<?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>217274</bug_id>
          
          <creation_ts>2020-10-02 20:50:50 -0700</creation_ts>
          <short_desc>Implement a GC verifier.</short_desc>
          <delta_ts>2021-02-19 07:53:16 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>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="Mark Lam">mark.lam</reporter>
          <assigned_to name="Mark Lam">mark.lam</assigned_to>
          <cc>alecflett</cc>
    
    <cc>annulen</cc>
    
    <cc>beidson</cc>
    
    <cc>benjamin</cc>
    
    <cc>calvaris</cc>
    
    <cc>cdumez</cc>
    
    <cc>changseok</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>dino</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fpizlo</cc>
    
    <cc>glenn</cc>
    
    <cc>graouts</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>hi</cc>
    
    <cc>jer.noble</cc>
    
    <cc>joepeck</cc>
    
    <cc>jsbell</cc>
    
    <cc>kangil.han</cc>
    
    <cc>keith_miller</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>msaboff</cc>
    
    <cc>philipj</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>saam</cc>
    
    <cc>sergio</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>youennf</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1694356</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2020-10-02 20:50:50 -0700</bug_when>
    <thetext>rdar://55236585</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1695454</commentid>
    <comment_count>1</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2020-10-06 21:20:02 -0700</bug_when>
    <thetext>Snag #1
=======
I&apos;m trying to templatize visitChildren() so that I can call it with 2 different kinds of visitors.  To minimize the amount of boiler plate that I have to write, I made ClassInfo&apos;s MethodTable refer to the instantiations of the visitChildren() templates.

Some classes like JSObject and JSGlobalObject need to export their visitChildren().  To make this work, I tried exporting an explicit instantiation of those template methods.

Unfortunately, this resulted in the explicitly instantiated template methods showing up as weak external symbols in the JavaScriptCore shared object.  This, in turn, results in a build failure because Tools/Scripts/check-for-weak-vtables-and-externals forbids weak external symbols in our built shared objects.

Now investigating to see if there&apos;s a way around this, or if I have to go the route of writing a lot of boilerplate code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1695458</commentid>
    <comment_count>2</comment_count>
      <attachid>410733</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2020-10-06 21:31:11 -0700</bug_when>
    <thetext>Created attachment 410733
work in progress.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1695803</commentid>
    <comment_count>3</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2020-10-07 23:30:13 -0700</bug_when>
    <thetext>A Clang engineer tells me that &quot;there’s no way to export an explicit instantiation that will make it a strong symbol.&quot;  This is because &quot;C++ does not provide any standard way to guarantee that an explicit instantiation is unique, and Clang hasn’t added any extension to do so.&quot;

So, I&apos;m moving forward with adding a lot of boilerplate code (using macros as much as I can).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1695804</commentid>
    <comment_count>4</comment_count>
      <attachid>410812</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2020-10-07 23:30:58 -0700</bug_when>
    <thetext>Created attachment 410812
work in progress.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1695805</commentid>
    <comment_count>5</comment_count>
      <attachid>410813</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2020-10-07 23:32:58 -0700</bug_when>
    <thetext>Created attachment 410813
work in progress.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1696020</commentid>
    <comment_count>6</comment_count>
      <attachid>410879</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2020-10-08 13:45:08 -0700</bug_when>
    <thetext>Created attachment 410879
work in progress.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1696034</commentid>
    <comment_count>7</comment_count>
      <attachid>410885</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2020-10-08 14:27:44 -0700</bug_when>
    <thetext>Created attachment 410885
test patch to check EWS.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1719075</commentid>
    <comment_count>8</comment_count>
      <attachid>417475</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2021-01-12 11:45:21 -0800</bug_when>
    <thetext>Created attachment 417475
work in progress.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1719425</commentid>
    <comment_count>9</comment_count>
      <attachid>417561</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2021-01-13 14:03:33 -0800</bug_when>
    <thetext>Created attachment 417561
work in progress.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1719436</commentid>
    <comment_count>10</comment_count>
      <attachid>417566</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2021-01-13 14:30:49 -0800</bug_when>
    <thetext>Created attachment 417566
work in progress.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1719754</commentid>
    <comment_count>11</comment_count>
      <attachid>417671</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2021-01-14 17:15:18 -0800</bug_when>
    <thetext>Created attachment 417671
work in progress.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1722125</commentid>
    <comment_count>12</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2021-01-25 10:34:03 -0800</bug_when>
    <thetext>rdar://56255683</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1724316</commentid>
    <comment_count>13</comment_count>
      <attachid>418900</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2021-02-01 11:11:37 -0800</bug_when>
    <thetext>Created attachment 418900
work in progress.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1724526</commentid>
    <comment_count>14</comment_count>
      <attachid>418958</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2021-02-01 21:53:52 -0800</bug_when>
    <thetext>Created attachment 418958
work in progress.

It builds, runs, and crashes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1724795</commentid>
    <comment_count>15</comment_count>
      <attachid>419038</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2021-02-02 11:41:11 -0800</bug_when>
    <thetext>Created attachment 419038
work in progress.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1726839</commentid>
    <comment_count>16</comment_count>
      <attachid>419640</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2021-02-08 15:15:45 -0800</bug_when>
    <thetext>Created attachment 419640
work in progress.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1727865</commentid>
    <comment_count>17</comment_count>
      <attachid>419917</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2021-02-10 16:18:25 -0800</bug_when>
    <thetext>Created attachment 419917
dirty patch with lots of debugging instrumentations &amp; refactorings.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1727974</commentid>
    <comment_count>18</comment_count>
      <attachid>419950</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2021-02-10 23:52:33 -0800</bug_when>
    <thetext>Created attachment 419950
dirty patch with lots of debugging instrumentations &amp; refactorings.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1728014</commentid>
    <comment_count>19</comment_count>
      <attachid>419968</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2021-02-11 02:23:50 -0800</bug_when>
    <thetext>Created attachment 419968
work in progress.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1728465</commentid>
    <comment_count>20</comment_count>
      <attachid>420099</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2021-02-11 22:09:18 -0800</bug_when>
    <thetext>Created attachment 420099
work in progress (clean).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1728905</commentid>
    <comment_count>21</comment_count>
      <attachid>420209</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2021-02-12 22:25:59 -0800</bug_when>
    <thetext>Created attachment 420209
work in progress.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1728981</commentid>
    <comment_count>22</comment_count>
      <attachid>420237</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2021-02-14 01:19:08 -0800</bug_when>
    <thetext>Created attachment 420237
work in progress.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1728999</commentid>
    <comment_count>23</comment_count>
      <attachid>420245</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2021-02-14 11:54:38 -0800</bug_when>
    <thetext>Created attachment 420245
work in progress.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1729001</commentid>
    <comment_count>24</comment_count>
      <attachid>420246</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2021-02-14 12:03:21 -0800</bug_when>
    <thetext>Created attachment 420246
work in progress.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1729054</commentid>
    <comment_count>25</comment_count>
      <attachid>420274</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2021-02-14 23:54:04 -0800</bug_when>
    <thetext>Created attachment 420274
work in progress.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1729101</commentid>
    <comment_count>26</comment_count>
      <attachid>420297</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2021-02-15 03:05:05 -0800</bug_when>
    <thetext>Created attachment 420297
work in progress.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1729621</commentid>
    <comment_count>27</comment_count>
      <attachid>420450</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2021-02-16 04:36:04 -0800</bug_when>
    <thetext>Created attachment 420450
work in progress.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1729629</commentid>
    <comment_count>28</comment_count>
      <attachid>420455</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2021-02-16 05:17:44 -0800</bug_when>
    <thetext>Created attachment 420455
work in progress.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1729834</commentid>
    <comment_count>29</comment_count>
      <attachid>420511</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2021-02-16 11:42:22 -0800</bug_when>
    <thetext>Created attachment 420511
work in progress.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1729850</commentid>
    <comment_count>30</comment_count>
      <attachid>420516</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2021-02-16 12:00:18 -0800</bug_when>
    <thetext>Created attachment 420516
work in progress.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1729865</commentid>
    <comment_count>31</comment_count>
      <attachid>420519</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2021-02-16 12:23:46 -0800</bug_when>
    <thetext>Created attachment 420519
work in progress.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1730403</commentid>
    <comment_count>32</comment_count>
      <attachid>420675</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2021-02-17 11:11:11 -0800</bug_when>
    <thetext>Created attachment 420675
work in progress.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1730411</commentid>
    <comment_count>33</comment_count>
      <attachid>420680</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2021-02-17 11:18:52 -0800</bug_when>
    <thetext>Created attachment 420680
test with verifyGC ON.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1730906</commentid>
    <comment_count>34</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2021-02-18 10:08:20 -0800</bug_when>
    <thetext>Win EWS failures are not related.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1731154</commentid>
    <comment_count>35</comment_count>
      <attachid>420899</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2021-02-18 18:44:44 -0800</bug_when>
    <thetext>Created attachment 420899
proposed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1731157</commentid>
    <comment_count>36</comment_count>
      <attachid>420900</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2021-02-18 18:57:58 -0800</bug_when>
    <thetext>Created attachment 420900
proposed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1731181</commentid>
    <comment_count>37</comment_count>
      <attachid>420900</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2021-02-18 20:02:02 -0800</bug_when>
    <thetext>Comment on attachment 420900
proposed patch.

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

I think I would have used virtual dispatch a lot more. But if this works, then let’s just do it.

&gt; Source/JavaScriptCore/dfg/DFGPlan.cpp:716
&gt; +bool Plan::isKnownToBeLiveDuringGC(Visitor&amp; visitor)

It’s surprising that stuff like this needs the templatization. Seems like you would have gotten away with virtual calls in paths like this.

&gt; Source/JavaScriptCore/dfg/DFGSafepoint.cpp:105
&gt; +bool Safepoint::isKnownToBeLiveDuringGC(Visitor&amp; visitor)

And stuff like this.

&gt; Source/JavaScriptCore/heap/Heap.cpp:2785
&gt; +        MAKE_MARKING_CONSTRAINT_EXECUTOR_PAIR(([this] (auto&amp; visitor) {

surprising that you needed templatization for stuff like this. Did you benchmark it?

&gt; Source/JavaScriptCore/heap/VerifierSlotVisitor.cpp:341
&gt; +        cell-&gt;methodTable(vm())-&gt;visitChildren(const_cast&lt;JSCell*&gt;(cell), *this);

You could just call this directly without the switch. The switch is a silly perf optimization.

&gt; Source/JavaScriptCore/interpreter/ShadowChicken.h:199
&gt; +    void visitChildren(AbstractSlotVisitor&amp;);

Why can’t stuff like this just take the abstract one?  This isn’t perf critical code at all.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1731198</commentid>
    <comment_count>38</comment_count>
      <attachid>420900</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2021-02-18 20:54:10 -0800</bug_when>
    <thetext>Comment on attachment 420900
proposed patch.

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

Thanks for the review.

&gt;&gt; Source/JavaScriptCore/dfg/DFGPlan.cpp:716
&gt;&gt; +bool Plan::isKnownToBeLiveDuringGC(Visitor&amp; visitor)
&gt; 
&gt; It’s surprising that stuff like this needs the templatization. Seems like you would have gotten away with virtual calls in paths like this.

Yes, it may be true that this can remain a virtual function without a perf regression.  However, I did not initially aggressively templatize functions, and several rounds of benchmarking (on multiple device types) showed that there&apos;s some performance regression somewhere that is very hard to track down.  Since each round of benchmarking is very time consuming, I decided to just get aggressive on templatizing functions unless I know for sure that it will not benefit.  The plan is to eventually claw these back if additional benchmarking shows no regression going with a virtual dispatch.

For that reason, I&apos;ll land this patch with this level of templatization for now.

&gt;&gt; Source/JavaScriptCore/heap/Heap.cpp:2785
&gt;&gt; +        MAKE_MARKING_CONSTRAINT_EXECUTOR_PAIR(([this] (auto&amp; visitor) {
&gt; 
&gt; surprising that you needed templatization for stuff like this. Did you benchmark it?

Initial benchmarking showed that we needed to templatize some constraints execution.  The interface for m_constraintSet-&gt;add() was changed to take a MarkingConstraintExecutorPair, and this one went along for the ride.  It is not clear to me if this specific constraint needed it or not.  scanExternalRememberedSet() probably does not, but it is less clear to me whether the other things visited in this constraint does or not.  I can revisit this later when I explore clawing back templates.

&gt;&gt; Source/JavaScriptCore/heap/VerifierSlotVisitor.cpp:341
&gt;&gt; +        cell-&gt;methodTable(vm())-&gt;visitChildren(const_cast&lt;JSCell*&gt;(cell), *this);
&gt; 
&gt; You could just call this directly without the switch. The switch is a silly perf optimization.

Will fix.

&gt;&gt; Source/JavaScriptCore/interpreter/ShadowChicken.h:199
&gt;&gt; +    void visitChildren(AbstractSlotVisitor&amp;);
&gt; 
&gt; Why can’t stuff like this just take the abstract one?  This isn’t perf critical code at all.

It does just take the abstract one.  Note: it&apos;s not templatized, and the new code only takes an AbstractSlotVisitor.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1731224</commentid>
    <comment_count>39</comment_count>
      <attachid>420900</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-02-18 22:23:44 -0800</bug_when>
    <thetext>Comment on attachment 420900
proposed patch.

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

Nice!! LGTM too

&gt; Source/JavaScriptCore/ChangeLog:97
&gt; +           we introduce some macros in SlotVisitorMacros.h to make reduce some of the

make reduce =&gt; reduce

&gt; Source/JavaScriptCore/ChangeLog:110
&gt; +           JSC_verifyGC and JSC_verboseVerifyGC.

nit: maybe a more canonical naming would be &quot;useGCVerifier&quot;?

&gt; Source/JavaScriptCore/ChangeLog:209
&gt; +            To improve the verifier making performance, we reserve a void* m_verifierMemo

making =&gt; marking

&gt; Source/JavaScriptCore/API/JSCallbackObject.h:245
&gt; +template &lt;class Parent&gt;
&gt; +template&lt;typename Visitor&gt;

nit: put these on the  same template?
template &lt;class Parent, typename Visitor&gt;?

&gt; Source/JavaScriptCore/bytecode/CodeBlock.cpp:1110
&gt; +// ALWAYS_INLINE because this only has 1 client.

nit: might not be necessary to say this. If the status quo changes, there will be a linker error

&gt; Source/JavaScriptCore/heap/Heap.cpp:2831
&gt; +                serviceSamplingProfiler(m_vm, visitor);

nit: I&apos;d call this visitSamplingProfiler  I think

&gt; Source/JavaScriptCore/heap/Heap.cpp:3072
&gt; +void Heap::verifyGC()

👍

&gt; Source/JavaScriptCore/heap/MarkStackMergingConstraint.cpp:64
&gt; +    //    Hence, we can ignore thse stacks.

thse -&gt; these

&gt; Source/JavaScriptCore/runtime/StackFrame.h:62
&gt; +    void visitChildren(Visitor&amp; visitor)

nit: we should&apos;v called this visitAggregate previously to go w/  our naming convention. Maybe worth doing

&gt; Source/JavaScriptCore/wasm/WasmGlobal.h:60
&gt; +//    template&lt;typename Visitor&gt; void visitAggregate(Visitor&amp;);

oops</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1731233</commentid>
    <comment_count>40</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2021-02-18 22:54:50 -0800</bug_when>
    <thetext>(In reply to Saam Barati from comment #39)
&gt; Comment on attachment 420900 [details]
&gt; proposed patch.
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=420900&amp;action=review
&gt; 
&gt; Nice!! LGTM too

Thanks.

&gt; &gt; Source/JavaScriptCore/ChangeLog:97
&gt; &gt; +           we introduce some macros in SlotVisitorMacros.h to make reduce some of the
&gt; 
&gt; make reduce =&gt; reduce

Fixed.

&gt; &gt; Source/JavaScriptCore/ChangeLog:110
&gt; &gt; +           JSC_verifyGC and JSC_verboseVerifyGC.
&gt; 
&gt; nit: maybe a more canonical naming would be &quot;useGCVerifier&quot;?

I&apos;ll stick with JSC_verifyGC and JSC_verboseVerifyGC.  It&apos;s shorter and there is precedence: --verifyHeap, --verboseOSR.

&gt; &gt; Source/JavaScriptCore/ChangeLog:209
&gt; &gt; +            To improve the verifier making performance, we reserve a void* m_verifierMemo
&gt; 
&gt; making =&gt; marking

Fixed.

&gt; &gt; Source/JavaScriptCore/API/JSCallbackObject.h:245
&gt; &gt; +template &lt;class Parent&gt;
&gt; &gt; +template&lt;typename Visitor&gt;
&gt; 
&gt; nit: put these on the  same template?
&gt; template &lt;class Parent, typename Visitor&gt;?

No, we can&apos;t do that.  JSCallbackObject is a template class parameterized on Parent, while the visitChildren method is a template method parameterized on Visitor within JSCallbackObject.  Hence, it has to be structured this way.

&gt; &gt; Source/JavaScriptCore/bytecode/CodeBlock.cpp:1110
&gt; &gt; +// ALWAYS_INLINE because this only has 1 client.
&gt; 
&gt; nit: might not be necessary to say this. If the status quo changes, there
&gt; will be a linker error

I&apos;ll remove the comment.

&gt; &gt; Source/JavaScriptCore/heap/Heap.cpp:2831
&gt; &gt; +                serviceSamplingProfiler(m_vm, visitor);
&gt; 
&gt; nit: I&apos;d call this visitSamplingProfiler  I think

Fixed.

&gt; &gt; Source/JavaScriptCore/heap/MarkStackMergingConstraint.cpp:64
&gt; &gt; +    //    Hence, we can ignore thse stacks.
&gt; 
&gt; thse -&gt; these

Fixed.

&gt; &gt; Source/JavaScriptCore/runtime/StackFrame.h:62
&gt; &gt; +    void visitChildren(Visitor&amp; visitor)
&gt; 
&gt; nit: we should&apos;v called this visitAggregate previously to go w/  our naming
&gt; convention. Maybe worth doing

Fixed.

&gt; &gt; Source/JavaScriptCore/wasm/WasmGlobal.h:60
&gt; &gt; +//    template&lt;typename Visitor&gt; void visitAggregate(Visitor&amp;);
&gt; 
&gt; oops

Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1731333</commentid>
    <comment_count>41</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2021-02-19 07:53:16 -0800</bug_when>
    <thetext>Landed in r273138: &lt;http://trac.webkit.org/r273138&gt;.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>410733</attachid>
            <date>2020-10-06 21:31:11 -0700</date>
            <delta_ts>2020-10-07 23:30:58 -0700</delta_ts>
            <desc>work in progress.</desc>
            <filename>wip-gc-verifier2.patch</filename>
            <type>text/plain</type>
            <size>189525</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNBUElWYWx1ZVdyYXBwZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNBUElWYWx1ZVdyYXBwZXIu
Y3BwCShyZXZpc2lvbiAyNjgwODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQVBJ
VmFsdWVXcmFwcGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMsNiArMjMsOCBAQAogI2luY2x1
ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkpTQVBJVmFsdWVXcmFwcGVyLmgiCiAKKyNpbmNsdWRl
ICJKU0NlbGxJbmxpbmVzLmgiIC8vIG1sYW0gVEVTVAorCiBuYW1lc3BhY2UgSlNDIHsKIAogU1RB
VElDX0FTU0VSVF9JU19UUklWSUFMTFlfREVTVFJVQ1RJQkxFKEpTQVBJVmFsdWVXcmFwcGVyKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNBUElXcmFwcGVyT2JqZWN0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0FQSVdyYXBwZXJPYmplY3Qu
aAkocmV2aXNpb24gMjY4MDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0FQSVdy
YXBwZXJPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtNDEsNyArNDEsOCBAQCBwdWJsaWM6CiAg
ICAgc3RhdGljIHZvaWQgc3Vic3BhY2VGb3IoVk0mKSB7IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7IH0KICAgICAKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7Ci0gICAgc3RhdGlj
IHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJik7CisgICAgREVD
TEFSRV9WSVNJVF9DSElMRFJFTjsKKy8vICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlND
ZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpOwogICAgIAogICAgIHZvaWQqIHdyYXBwZWRPYmplY3Qo
KSB7IHJldHVybiBtX3dyYXBwZWRPYmplY3Q7IH0KICAgICB2b2lkIHNldFdyYXBwZWRPYmplY3Qo
dm9pZCopOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0FQSVdyYXBwZXJPYmpl
Y3QubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0FQSVdyYXBw
ZXJPYmplY3QubW0JKHJldmlzaW9uIDI2ODA4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9B
UEkvSlNBUElXcmFwcGVyT2JqZWN0Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMjMsNyArMTIzLDgg
QEAgdm9pZCBKU0FQSVdyYXBwZXJPYmplY3Q6OnNldFdyYXBwZWRPYmplYwogICAgIG1fd3JhcHBl
ZE9iamVjdCA9IFtzdGF0aWNfY2FzdDxpZD4od3JhcHBlZE9iamVjdCkgcmV0YWluXTsKIH0KIAot
dm9pZCBKU0FQSVdyYXBwZXJPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBKU0M6
OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQg
SlNBUElXcmFwcGVyT2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYg
dmlzaXRvcikKIHsKICAgICBKU0FQSVdyYXBwZXJPYmplY3QqIHRoaXNPYmplY3QgPSBKU0M6Ompz
Q2FzdDxKU0FQSVdyYXBwZXJPYmplY3QqPihjZWxsKTsKICAgICBCYXNlOjp2aXNpdENoaWxkcmVu
KGNlbGwsIHZpc2l0b3IpOwpAQCAtMTMzLDYgKzEzNCw4IEBAIHZvaWQgSlNBUElXcmFwcGVyT2Jq
ZWN0Ojp2aXNpdENoaWxkcmVuKEoKICAgICAgICAgc2NhbkV4dGVybmFsT2JqZWN0R3JhcGgodmlz
aXRvci52bSgpLCB2aXNpdG9yLCB3cmFwcGVkT2JqZWN0KTsKIH0KIAorREVGSU5FX1ZJU0lUX0NI
SUxEUkVOKEpTQVBJV3JhcHBlck9iamVjdCk7CisKIHRlbXBsYXRlIDw+CiBJc29TdWJzcGFjZSog
SlNDYWxsYmFja09iamVjdDxKU0FQSVdyYXBwZXJPYmplY3Q+OjpzdWJzcGFjZUZvckltcGwoVk0m
IHZtLCBTdWJzcGFjZUFjY2VzcyBtb2RlKQogewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L0FQSS9KU0NhbGxiYWNrT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0LmgJKHJldmlzaW9uIDI2ODA4NikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC02
OSw3ICs2OSwxMCBAQCBwdWJsaWM6CiAgICAgICAgIG1fcHJpdmF0ZVByb3BlcnRpZXMtPmRlbGV0
ZVByaXZhdGVQcm9wZXJ0eShwcm9wZXJ0eU5hbWUpOwogICAgIH0KIAotICAgIHZvaWQgdmlzaXRD
aGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVO
OworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KKyAgICB2b2lkIHZpc2l0Q2hpbGRy
ZW4oVmlzaXRvciYgdmlzaXRvcikKICAgICB7CiAgICAgICAgIEpTUHJpdmF0ZVByb3BlcnR5TWFw
KiBwcm9wZXJ0aWVzID0gbV9wcml2YXRlUHJvcGVydGllcy5nZXQoKTsKICAgICAgICAgaWYgKCFw
cm9wZXJ0aWVzKQpAQCAtMTAzLDcgKzEwNiw4IEBAIHB1YmxpYzoKICAgICAgICAgICAgIG1fcHJv
cGVydHlNYXAucmVtb3ZlKHByb3BlcnR5TmFtZS5pbXBsKCkpOwogICAgICAgICB9CiAKLSAgICAg
ICAgdm9pZCB2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorICAgICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgorICAgICAgICB2b2lkIHZpc2l0Q2hpbGRyZW4oVmlzaXRv
ciYgdmlzaXRvcikKICAgICAgICAgewogICAgICAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9s
b2NrKTsKICAgICAgICAgICAgIGZvciAoYXV0byYgcGFpciA6IG1fcHJvcGVydHlNYXApIHsKQEAg
LTIxNiw3ICsyMjAsMTAgQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgQ2FsbERhdGEgZ2V0Q29uc3Ry
dWN0RGF0YShKU0NlbGwqKTsKICAgICBzdGF0aWMgQ2FsbERhdGEgZ2V0Q2FsbERhdGEoSlNDZWxs
Kik7CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZp
c2l0b3ImIHZpc2l0b3IpCisvLyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOworCisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KKyAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpT
Q2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKICAgICB7CiAgICAgICAgIEpTQ2FsbGJhY2tP
YmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNDYWxsYmFja09iamVjdCo+KGNlbGwpOwogICAg
ICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKChzdGF0aWNfY2FzdDxQYXJlbnQqPih0aGlz
T2JqZWN0KSksIEpTQ2FsbGJhY2tPYmplY3Q8UGFyZW50Pjo6aW5mbygpKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lvbiAyNjgw
ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtOTk4LDcgKzk5OCw4IEBAIHNpemVfdCBDb2RlQmxvY2s6OmVzdGltYXRl
ZFNpemUoSlNDZWxsKiAKICAgICByZXR1cm4gQmFzZTo6ZXN0aW1hdGVkU2l6ZShjZWxsLCB2bSkg
KyBleHRyYU1lbW9yeUFsbG9jYXRlZDsKIH0KIAotdm9pZCBDb2RlQmxvY2s6OnZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1l
IFZpc2l0b3I+Cit2b2lkIENvZGVCbG9jazo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFZp
c2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgQ29kZUJsb2NrKiB0aGlzT2JqZWN0ID0ganNDYXN0PENv
ZGVCbG9jayo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVj
dCwgaW5mbygpKTsKQEAgLTEwMDcsNyArMTAwOCwxMCBAQCB2b2lkIENvZGVCbG9jazo6dmlzaXRD
aGlsZHJlbihKU0NlbGwqIGNlCiAgICAgdGhpc09iamVjdC0+dmlzaXRDaGlsZHJlbih2aXNpdG9y
KTsKIH0KIAotdm9pZCBDb2RlQmxvY2s6OnZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0
b3IpCitERUZJTkVfVklTSVRfQ0hJTERSRU4oQ29kZUJsb2NrKTsKKwordGVtcGxhdGU8dHlwZW5h
bWUgVmlzaXRvcj4KK3ZvaWQgQ29kZUJsb2NrOjp2aXNpdENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0
b3IpCiB7CiAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2spOwogICAgIGlmIChD
b2RlQmxvY2sqIG90aGVyQmxvY2sgPSBzcGVjaWFsT1NSRW50cnlCbG9ja09yTnVsbCgpKQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkocmV2aXNpb24g
MjY4MDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yMDEsMTAgKzIwMSwxMiBAQCBwdWJsaWM6CiAgICAgLy8gaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyMzY3NwogICAgIENvZGVCbG9jayog
YmFzZWxpbmVWZXJzaW9uKCk7CiAKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOworCiAgICAg
c3RhdGljIHNpemVfdCBlc3RpbWF0ZWRTaXplKEpTQ2VsbCosIFZNJik7Ci0gICAgc3RhdGljIHZv
aWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworLy8gICAgc3RhdGljIHZv
aWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwogICAgIHN0YXRpYyB2b2lk
IGRlc3Ryb3koSlNDZWxsKik7Ci0gICAgdm9pZCB2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJik7
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCB2aXNpdENoaWxkcmVuKFZpc2l0
b3ImKTsKICAgICB2b2lkIGZpbmFsaXplVW5jb25kaXRpb25hbGx5KFZNJik7CiAKICAgICB2b2lk
IG5vdGlmeUxleGljYWxCaW5kaW5nVXBkYXRlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvRXZhbENvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0V2YWxDb2RlQmxvY2suY3BwCShyZXZpc2lvbiAyNjgwODYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXZhbENvZGVCbG9jay5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTMwLDYgKzMwLDggQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRl
ICJFdmFsQ29kZUJsb2NrLmgiCiAKKyNpbmNsdWRlICJKU0NlbGxJbmxpbmVzLmgiIC8vIG1sYW0g
VEVTVAorCiBuYW1lc3BhY2UgSlNDIHsKIAogY29uc3QgQ2xhc3NJbmZvIEV2YWxDb2RlQmxvY2s6
OnNfaW5mbyA9IHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGVjdXRh
YmxlVG9Db2RlQmxvY2tFZGdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZS5jcHAJKHJldmlzaW9uIDI2ODA4
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGVjdXRhYmxlVG9Db2RlQmxv
Y2tFZGdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTMsNyArNTMsOCBAQCB2b2lkIEV4ZWN1dGFi
bGVUb0NvZGVCbG9ja0VkZ2U6OmZpbmlzaENyCiAgICAgQVNTRVJUKCFpc0FjdGl2ZSgpKTsKIH0K
IAotdm9pZCBFeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCog
Y2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgor
dm9pZCBFeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2Vs
bCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBWTSYgdm0gPSB2aXNpdG9yLnZtKCk7CiAgICAg
RXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZSogZWRnZSA9IGpzQ2FzdDxFeGVjdXRhYmxlVG9Db2Rl
QmxvY2tFZGdlKj4oY2VsbCk7CkBAIC0xMTcsNyArMTE4LDEwIEBAIHZvaWQgRXhlY3V0YWJsZVRv
Q29kZUJsb2NrRWRnZTo6dmlzaXRDaGkKICAgICBlZGdlLT5ydW5Db25zdHJhaW50KGxvY2tlciwg
dm0sIHZpc2l0b3IpOwogfQogCi12b2lkIEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2U6OnZpc2l0
T3V0cHV0Q29uc3RyYWludHMoSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK0RF
RklORV9WSVNJVF9DSElMRFJFTihFeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlKTsKKwordGVtcGxh
dGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZTo6dmlz
aXRPdXRwdXRDb25zdHJhaW50cyhKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAg
ICAgVk0mIHZtID0gdmlzaXRvci52bSgpOwogICAgIEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2Uq
IGVkZ2UgPSBqc0Nhc3Q8RXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZSo+KGNlbGwpOwpAQCAtMTI1
LDYgKzEyOSw4IEBAIHZvaWQgRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZTo6dmlzaXRPdXQKICAg
ICBlZGdlLT5ydW5Db25zdHJhaW50KE5vTG9ja2luZ05lY2Vzc2FyeSwgdm0sIHZpc2l0b3IpOwog
fQogCitERUZJTkVfVklTSVRfT1VUUFVUX0NPTlNUUkFJTlRTKEV4ZWN1dGFibGVUb0NvZGVCbG9j
a0VkZ2UpOworCiB2b2lkIEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2U6OmZpbmFsaXplVW5jb25k
aXRpb25hbGx5KFZNJiB2bSkKIHsKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IG1fY29kZUJs
b2NrLmdldCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGFi
bGVUb0NvZGVCbG9ja0VkZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZS5oCShyZXZpc2lvbiAyNjgwODYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRn
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01Myw5ICs1MywxMSBAQCBwdWJsaWM6CiAgICAgREVDTEFS
RV9JTkZPOwogCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2soKSBjb25zdCB7IHJldHVybiBtX2Nv
ZGVCbG9jay5nZXQoKTsgfQotICAgIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlND
ZWxsKiwgU2xvdFZpc2l0b3ImKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdE91dHB1dENvbnN0cmFp
bnRzKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVO
OworICAgIERFQ0xBUkVfVklTSVRfT1VUUFVUX0NPTlNUUkFJTlRTOworLy8gICAgc3RhdGljIHZv
aWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworLy8gICAgc3RhdGljIHZv
aWQgdmlzaXRPdXRwdXRDb25zdHJhaW50cyhKU0NlbGwqLCBTbG90VmlzaXRvciYpOwogICAgIHZv
aWQgZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoVk0mKTsKICAgICAKICAgICBzdGF0aWMgQ29kZUJs
b2NrKiB1bndyYXAoRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZSogZWRnZSkKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9GdW5jdGlvbkNvZGVCbG9jay5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Z1bmN0aW9uQ29kZUJsb2NrLmNw
cAkocmV2aXNpb24gMjY4MDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Z1
bmN0aW9uQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsOCBAQAogI2lu
Y2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkZ1bmN0aW9uQ29kZUJsb2NrLmgiCiAKKyNpbmNs
dWRlICJKU0NlbGxJbmxpbmVzLmgiIC8vIG1sYW0gVEVTVAorCiBuYW1lc3BhY2UgSlNDIHsKIAog
Y29uc3QgQ2xhc3NJbmZvIEZ1bmN0aW9uQ29kZUJsb2NrOjpzX2luZm8gPSB7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTW9kdWxlUHJvZ3JhbUNvZGVCbG9jay5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL01vZHVsZVByb2dyYW1D
b2RlQmxvY2suY3BwCShyZXZpc2lvbiAyNjgwODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvTW9kdWxlUHJvZ3JhbUNvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMw
LDYgKzMwLDggQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJNb2R1bGVQcm9ncmFt
Q29kZUJsb2NrLmgiCiAKKyNpbmNsdWRlICJKU0NlbGxJbmxpbmVzLmgiIC8vIG1sYW0gVEVTVAor
CiBuYW1lc3BhY2UgSlNDIHsKIAogY29uc3QgQ2xhc3NJbmZvIE1vZHVsZVByb2dyYW1Db2RlQmxv
Y2s6OnNfaW5mbyA9IHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qcm9n
cmFtQ29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvUHJvZ3JhbUNvZGVCbG9jay5jcHAJKHJldmlzaW9uIDI2ODA4NikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qcm9ncmFtQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzAsNiArMzAsOCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlByb2dy
YW1Db2RlQmxvY2suaCIKIAorI2luY2x1ZGUgIkpTQ2VsbElubGluZXMuaCIgLy8gbWxhbSBURVNU
CisKIG5hbWVzcGFjZSBKU0MgewogCiBjb25zdCBDbGFzc0luZm8gUHJvZ3JhbUNvZGVCbG9jazo6
c19pbmZvID0gewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2Vk
Q29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwCShyZXZpc2lvbiAyNjgwODYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC03MSw3ICs3MSw4IEBAIFVubGlua2VkQ29kZUJsb2NrOjpVbmxpbmtlZENvZGVCbG9jayhW
TSYKICAgICB9CiB9CiAKLXZvaWQgVW5saW5rZWRDb2RlQmxvY2s6OnZpc2l0Q2hpbGRyZW4oSlND
ZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0
b3I+Cit2b2lkIFVubGlua2VkQ29kZUJsb2NrOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwg
VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBVbmxpbmtlZENvZGVCbG9jayogdGhpc09iamVjdCA9
IGpzQ2FzdDxVbmxpbmtlZENvZGVCbG9jayo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1Rf
SU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTkwLDYgKzkxLDggQEAgdm9pZCBVbmxp
bmtlZENvZGVCbG9jazo6dmlzaXRDaGlsZHJlbihKUwogICAgIHZpc2l0b3IucmVwb3J0RXh0cmFN
ZW1vcnlWaXNpdGVkKGV4dHJhTWVtb3J5KTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKFVu
bGlua2VkQ29kZUJsb2NrKTsKKwogc2l6ZV90IFVubGlua2VkQ29kZUJsb2NrOjplc3RpbWF0ZWRT
aXplKEpTQ2VsbCogY2VsbCwgVk0mIHZtKQogewogICAgIFVubGlua2VkQ29kZUJsb2NrKiB0aGlz
T2JqZWN0ID0ganNDYXN0PFVubGlua2VkQ29kZUJsb2NrKj4oY2VsbCk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaAkocmV2
aXNpb24gMjY4MDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2Vk
Q29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTQyMyw3ICs0MjMsOCBAQCBwcml2YXRlOgog
ICAgIFJlZkNvdW50ZWRBcnJheTxFeHByZXNzaW9uUmFuZ2VJbmZvPiBtX2V4cHJlc3Npb25JbmZv
OwogCiBwcm90ZWN0ZWQ6Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBT
bG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CisvLyAgICBzdGF0aWMg
dm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CiAgICAgc3RhdGljIHNp
emVfdCBlc3RpbWF0ZWRTaXplKEpTQ2VsbCosIFZNJik7CiAKIHB1YmxpYzoKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkRnVu
Y3Rpb25FeGVjdXRhYmxlLmNwcAkocmV2aXNpb24gMjY4MDg2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1VubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTQxLDcgKzE0MSw4IEBAIHZvaWQgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU6
OmRlc3Ryb3kKICAgICBzdGF0aWNfY2FzdDxVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGNl
bGwpLT5+VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUoKTsKIH0KIAotdm9pZCBVbmxpbmtlZEZ1
bmN0aW9uRXhlY3V0YWJsZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9y
JiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgVW5saW5rZWRGdW5j
dGlvbkV4ZWN1dGFibGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNp
dG9yKQogewogICAgIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiB0aGlzT2JqZWN0ID0ganND
YXN0PFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09C
SkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtMTY0LDYgKzE2NSw4IEBAIHZv
aWQgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU6OnZpc2l0Q2gKICAgICB9CiB9CiAKK0RFRklO
RV9WSVNJVF9DSElMRFJFTihVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSk7CisKIFNvdXJjZUNv
ZGUgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU6OmxpbmtlZFNvdXJjZUNvZGUoY29uc3QgU291
cmNlQ29kZSYgcGFzc2VkUGFyZW50U291cmNlKSBjb25zdAogewogICAgIGNvbnN0IFNvdXJjZUNv
ZGUmIHBhcmVudFNvdXJjZSA9ICFtX2lzQnVpbHRpbkRlZmF1bHRDbGFzc0NvbnN0cnVjdG9yID8g
cGFzc2VkUGFyZW50U291cmNlIDogQnVpbHRpbkV4ZWN1dGFibGVzOjpkZWZhdWx0Q29uc3RydWN0
b3JTb3VyY2VDb2RlKGNvbnN0cnVjdG9yS2luZCgpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJs
ZS5oCShyZXZpc2lvbiAyNjgwODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjMyLDcgKzIz
Miw4IEBAIHByaXZhdGU6CiAgICAgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUoVk0mLCBTdHJ1
Y3R1cmUqLCBjb25zdCBTb3VyY2VDb2RlJiwgRnVuY3Rpb25NZXRhZGF0YU5vZGUqLCBVbmxpbmtl
ZEZ1bmN0aW9uS2luZCwgQ29uc3RydWN0QWJpbGl0eSwgSlNQYXJzZXJTY3JpcHRNb2RlLCBPcHRp
b25hbDxDb21wYWN0VmFyaWFibGVNYXA6OkhhbmRsZT4sICBKU0M6OkRlcml2ZWRDb250ZXh0VHlw
ZSwgSlNDOjpOZWVkc0NsYXNzRmllbGRJbml0aWFsaXplciwgYm9vbCBpc0J1aWx0aW5EZWZhdWx0
Q2xhc3NDb25zdHJ1Y3Rvcik7CiAgICAgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUoRGVjb2Rl
ciYsIGNvbnN0IENhY2hlZEZ1bmN0aW9uRXhlY3V0YWJsZSYpOwogCi0gICAgc3RhdGljIHZvaWQg
dmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRf
Q0hJTERSRU47CisvLyAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RW
aXNpdG9yJik7CiAKICAgICB2b2lkIGRlY29kZUNhY2hlZENvZGVCbG9ja3MoVk0mKTsKIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyU2NvcGUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlclNjb3BlLmNw
cAkocmV2aXNpb24gMjY4MDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0Rl
YnVnZ2VyU2NvcGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NSw3ICs1NSw4IEBAIHZvaWQgRGVi
dWdnZXJTY29wZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHYKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlv
bih2bSk7CiB9CiAKLXZvaWQgRGVidWdnZXJTY29wZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNl
bGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3Zv
aWQgRGVidWdnZXJTY29wZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZp
c2l0b3IpCiB7CiAgICAgRGVidWdnZXJTY29wZSogdGhpc09iamVjdCA9IGpzQ2FzdDxEZWJ1Z2dl
clNjb3BlKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0
LCBpbmZvKCkpOwpAQCAtNjUsNiArNjYsOCBAQCB2b2lkIERlYnVnZ2VyU2NvcGU6OnZpc2l0Q2hp
bGRyZW4oSlNDZWxsCiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9uZXh0KTsKIH0K
IAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKERlYnVnZ2VyU2NvcGUpOworCiBTdHJpbmcgRGVidWdn
ZXJTY29wZTo6Y2xhc3NOYW1lKGNvbnN0IEpTT2JqZWN0KiBvYmplY3QsIFZNJiB2bSkKIHsKICAg
ICBjb25zdCBEZWJ1Z2dlclNjb3BlKiBzY29wZSA9IGpzQ2FzdDxjb25zdCBEZWJ1Z2dlclNjb3Bl
Kj4ob2JqZWN0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dl
clNjb3BlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0Rl
YnVnZ2VyU2NvcGUuaAkocmV2aXNpb24gMjY4MDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RlYnVnZ2VyL0RlYnVnZ2VyU2NvcGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDYsNyArNDYsOCBA
QCBwdWJsaWM6CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgRGVidWdnZXJTY29wZSog
Y3JlYXRlKFZNJiB2bSwgSlNTY29wZSogc2NvcGUpOwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRD
aGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERS
RU47CisvLyAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9y
Jik7CiAgICAgc3RhdGljIFN0cmluZyBjbGFzc05hbWUoY29uc3QgSlNPYmplY3QqLCBWTSYpOwog
ICAgIHN0YXRpYyBTdHJpbmcgdG9TdHJpbmdOYW1lKGNvbnN0IEpTT2JqZWN0KiwgSlNHbG9iYWxP
YmplY3QqKTsKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqLCBK
U0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRUcmFuc2l0aW9ucy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkVHJhbnNpdGlvbnMuY3Bw
CShyZXZpc2lvbiAyNjgwODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2ly
ZWRUcmFuc2l0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUyLDEyICs1MiwxMyBAQCB2b2lk
IERlc2lyZWRUcmFuc2l0aW9uOjpyZWFsbHlBZGQoVk0mIHZtCiAgICAgICAgICAgICBtX29sZFN0
cnVjdHVyZSwgbV9uZXdTdHJ1Y3R1cmUpKTsKIH0KIAotdm9pZCBEZXNpcmVkVHJhbnNpdGlvbjo6
dmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKLXsKLSAgICB2aXNpdG9yLmFwcGVu
ZFVuYmFycmllcmVkKG1fY29kZU9yaWdpbk93bmVyKTsKLSAgICB2aXNpdG9yLmFwcGVuZFVuYmFy
cmllcmVkKG1fb2xkU3RydWN0dXJlKTsKLSAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKG1f
bmV3U3RydWN0dXJlKTsKLX0KKy8vdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KKy8vdm9pZCBE
ZXNpcmVkVHJhbnNpdGlvbjo6dmlzaXRDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQorLy97Cisv
LyAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKG1fY29kZU9yaWdpbk93bmVyKTsKKy8vICAg
IHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQobV9vbGRTdHJ1Y3R1cmUpOworLy8gICAgdmlzaXRv
ci5hcHBlbmRVbmJhcnJpZXJlZChtX25ld1N0cnVjdHVyZSk7CisvL30KIAogRGVzaXJlZFRyYW5z
aXRpb25zOjpEZXNpcmVkVHJhbnNpdGlvbnMoKQogewpAQCAtNzgsMTEgKzc5LDEyIEBAIHZvaWQg
RGVzaXJlZFRyYW5zaXRpb25zOjpyZWFsbHlBZGQoVk0mIHYKICAgICAgICAgbV90cmFuc2l0aW9u
c1tpXS5yZWFsbHlBZGQodm0sIGNvbW1vbik7CiB9CiAKLXZvaWQgRGVzaXJlZFRyYW5zaXRpb25z
Ojp2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQotewotICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBtX3RyYW5zaXRpb25zLnNpemUoKTsgaSsrKQotICAgICAgICBtX3RyYW5z
aXRpb25zW2ldLnZpc2l0Q2hpbGRyZW4odmlzaXRvcik7Ci19CisvL3RlbXBsYXRlPHR5cGVuYW1l
IFZpc2l0b3I+CisvL3ZvaWQgRGVzaXJlZFRyYW5zaXRpb25zOjp2aXNpdENoaWxkcmVuKFZpc2l0
b3ImIHZpc2l0b3IpCisvL3sKKy8vICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3RyYW5z
aXRpb25zLnNpemUoKTsgaSsrKQorLy8gICAgICAgIG1fdHJhbnNpdGlvbnNbaV0udmlzaXRDaGls
ZHJlbih2aXNpdG9yKTsKKy8vfQogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFRyYW5zaXRpb25zLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkVHJhbnNpdGlvbnMu
aAkocmV2aXNpb24gMjY4MDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNp
cmVkVHJhbnNpdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtNDYsOCArNDYsOCBAQCBwdWJsaWM6
CiAgICAgRGVzaXJlZFRyYW5zaXRpb24oQ29kZUJsb2NrKiwgQ29kZUJsb2NrKiBjb2RlT3JpZ2lu
T3duZXIsIFN0cnVjdHVyZSosIFN0cnVjdHVyZSopOwogCiAgICAgdm9pZCByZWFsbHlBZGQoVk0m
LCBDb21tb25EYXRhKik7Ci0gICAgCi0gICAgdm9pZCB2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9y
Jik7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIHZpc2l0Q2hpbGRyZW4o
VmlzaXRvciYpOwogCiBwcml2YXRlOgogICAgIENvZGVCbG9jayogbV9jb2RlQmxvY2s7CkBAIC01
Niw2ICs1NiwxNSBAQCBwcml2YXRlOgogICAgIFN0cnVjdHVyZSogbV9uZXdTdHJ1Y3R1cmU7CiB9
OwogCisvLyBtbGFtIEZJWE1FCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBEZXNp
cmVkVHJhbnNpdGlvbjo6dmlzaXRDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIHZp
c2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQobV9jb2RlT3JpZ2luT3duZXIpOworICAgIHZpc2l0b3Iu
YXBwZW5kVW5iYXJyaWVyZWQobV9vbGRTdHJ1Y3R1cmUpOworICAgIHZpc2l0b3IuYXBwZW5kVW5i
YXJyaWVyZWQobV9uZXdTdHJ1Y3R1cmUpOworfQorCiBjbGFzcyBEZXNpcmVkVHJhbnNpdGlvbnMg
ewogcHVibGljOgogICAgIERlc2lyZWRUcmFuc2l0aW9ucygpOwpAQCAtNjMsMTIgKzcyLDIwIEBA
IHB1YmxpYzoKIAogICAgIHZvaWQgYWRkTGF6aWx5KENvZGVCbG9jayosIENvZGVCbG9jayogY29k
ZU9yaWdpbk93bmVyLCBTdHJ1Y3R1cmUqLCBTdHJ1Y3R1cmUqKTsKICAgICB2b2lkIHJlYWxseUFk
ZChWTSYsIENvbW1vbkRhdGEqKTsKLSAgICB2b2lkIHZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3Im
KTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIHZpc2l0Q2hpbGRyZW4oVmlz
aXRvciYpOwogCiBwcml2YXRlOgogICAgIFZlY3RvcjxEZXNpcmVkVHJhbnNpdGlvbj4gbV90cmFu
c2l0aW9uczsKIH07CiAKKy8vIG1sYW0gRklYTUUKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+
Cit2b2lkIERlc2lyZWRUcmFuc2l0aW9uczo6dmlzaXRDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9y
KQoreworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3RyYW5zaXRpb25zLnNpemUoKTsg
aSsrKQorICAgICAgICBtX3RyYW5zaXRpb25zW2ldLnZpc2l0Q2hpbGRyZW4odmlzaXRvcik7Cit9
CisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIAogI2VuZGlmIC8vIEVOQUJMRShERkdfSklU
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2Vha1JlZmVyZW5j
ZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJl
ZFdlYWtSZWZlcmVuY2VzLmNwcAkocmV2aXNpb24gMjY4MDg2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdEZXNpcmVkV2Vha1JlZmVyZW5jZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC04NywxMSArODcsMTIgQEAgdm9pZCBEZXNpcmVkV2Vha1JlZmVyZW5jZXM6OnJlYWxseUFkZChW
TQogICAgIH0KIH0KIAotdm9pZCBEZXNpcmVkV2Vha1JlZmVyZW5jZXM6OnZpc2l0Q2hpbGRyZW4o
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCi17Ci0gICAgZm9yIChKU0NlbGwqIHRhcmdldCA6IG1fcmVm
ZXJlbmNlcykKLSAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZCh0YXJnZXQpOwotfQor
Ly90ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgorLy92b2lkIERlc2lyZWRXZWFrUmVmZXJlbmNl
czo6dmlzaXRDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQorLy97CisvLyAgICBmb3IgKEpTQ2Vs
bCogdGFyZ2V0IDogbV9yZWZlcmVuY2VzKQorLy8gICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJy
aWVyZWQodGFyZ2V0KTsKKy8vfQogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFdlYWtSZWZlcmVuY2VzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2Vha1JlZmVy
ZW5jZXMuaAkocmV2aXNpb24gMjY4MDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdEZXNpcmVkV2Vha1JlZmVyZW5jZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNTMsMTMgKzUzLDIx
IEBAIHB1YmxpYzoKICAgICAKICAgICB2b2lkIHJlYWxseUFkZChWTSYsIENvbW1vbkRhdGEqKTsK
ICAgICAKLSAgICB2b2lkIHZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIHZpc2l0Q2hpbGRyZW4oVmlzaXRvciYpOwogCiBwcml2
YXRlOgogICAgIENvZGVCbG9jayogbV9jb2RlQmxvY2s7CiAgICAgSGFzaFNldDxKU0NlbGwqPiBt
X3JlZmVyZW5jZXM7CiB9OwogCisvLyBtbGFtIEZJWE1FCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNp
dG9yPgordm9pZCBEZXNpcmVkV2Vha1JlZmVyZW5jZXM6OnZpc2l0Q2hpbGRyZW4oVmlzaXRvciYg
dmlzaXRvcikKK3sKKyAgICBmb3IgKEpTQ2VsbCogdGFyZ2V0IDogbV9yZWZlcmVuY2VzKQorICAg
ICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKHRhcmdldCk7Cit9CisKIH0gfSAvLyBuYW1l
c3BhY2UgSlNDOjpERkcKIAogI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHJldmlzaW9uIDI2ODA4NikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05Nzcs
NyArOTc3LDcgQEAgQmxvY2tMaXN0IEdyYXBoOjpibG9ja3NJblBvc3RPcmRlcihib29sIAogICAg
ICAgICB9CiAgICAgfQogCi0gICAgaWYgKGlzU2FmZVRvVmFsaWRhdGUgJiYgdmFsaWRhdGlvbkVu
YWJsZWQoKSkgeyAvLyBUaGVyZSBhcmUgdXNlcnMgb2YgdGhpcyB3aGVyZSB3ZSBoYXZlbid0IHll
dCBidWlsdCBvZiB0aGUgQ0ZHIGVub3VnaCB0byBiZSBhYmxlIHRvIHJ1biBkb21pbmF0b3JzLgor
ICAgIGlmIChpc1NhZmVUb1ZhbGlkYXRlICYmIHZhbGlkYXRpb25FbmFibGVkKCkpIHsgLy8gVGhl
cmUgYXJlIHVzZXJzIG9mIHRoaXMgd2hlcmUgd2UgaGF2ZW4ndCB5ZXQgYnVpbHQgdGhlIENGRyBl
bm91Z2ggdG8gYmUgYWJsZSB0byBydW4gZG9taW5hdG9ycy4KICAgICAgICAgYXV0byB2YWxpZGF0
ZVJlc3VsdHMgPSBbJl0gKGF1dG8mIGRvbWluYXRvcnMpIHsKICAgICAgICAgICAgIC8vIFdoZW4g
aXRlcmF0aW5nIG92ZXIgcmV2ZXJzZSBwb3N0IG9yZGVyLCB3ZSBzaG91bGQgc2VlIGRvbWluYXRv
cnMKICAgICAgICAgICAgIC8vIGJlZm9yZSB0aGluZ3MgdGhleSBkb21pbmF0ZS4KQEAgLTE0NDgs
NyArMTQ0OCw4IEBAIHZvaWQgR3JhcGg6OnJlZ2lzdGVyRnJvemVuVmFsdWVzKCkKICAgICBtX2Nv
ZGVCbG9jay0+Y29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uKCkuc2hyaW5rVG9GaXQo
KTsKIH0KIAotdm9pZCBHcmFwaDo6dmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikK
K3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEdyYXBoOjp2aXNpdENoaWxkcmVuKFZp
c2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgZm9yIChGcm96ZW5WYWx1ZSogdmFsdWUgOiBtX2Zyb3pl
blZhbHVlcykgewogICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKHZhbHVlLT52YWx1
ZSgpKTsKQEAgLTE0NTYsNiArMTQ1Nyw5IEBAIHZvaWQgR3JhcGg6OnZpc2l0Q2hpbGRyZW4oU2xv
dFZpc2l0b3ImIHYKICAgICB9CiB9CiAKK3ZvaWQgR3JhcGg6OnZpc2l0Q2hpbGRyZW4oU2xvdFZp
c2l0b3ImIHZpc2l0b3IpIHsgdGhpcy0+dGVtcGxhdGUgdmlzaXRDaGlsZHJlbih2aXNpdG9yKTsg
fQordm9pZCBHcmFwaDo6dmlzaXRDaGlsZHJlbihEZWJ1Z1Nsb3RWaXNpdG9yJiB2aXNpdG9yKSB7
IHRoaXMtPnRlbXBsYXRlIHZpc2l0Q2hpbGRyZW4odmlzaXRvcik7IH0KKwogRnJvemVuVmFsdWUq
IEdyYXBoOjpmcmVlemUoSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBpZiAoVU5MSUtFTFkoIXZhbHVl
KSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHJldmlzaW9uIDI2ODA4
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkod29ya2luZyBjb3B5
KQpAQCAtMTAwMCw4ICsxMDAwLDEyIEBAIHB1YmxpYzoKICAgICBib29sIGNhbkRvRmFzdFNwcmVh
ZChOb2RlKiwgY29uc3QgQWJzdHJhY3RWYWx1ZSYpOwogICAgIAogICAgIHZvaWQgcmVnaXN0ZXJG
cm96ZW5WYWx1ZXMoKTsKLSAgICAKKworcHJpdmF0ZToKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPiB2b2lkIHZpc2l0Q2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcik7CitwdWJsaWM6CiAg
ICAgdm9pZCB2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJikgZmluYWw7CisgICAgdm9pZCB2aXNp
dENoaWxkcmVuKERlYnVnU2xvdFZpc2l0b3ImKSBmaW5hbDsKICAgICAKICAgICB2b2lkIGxvZ0Fz
c2VydGlvbkZhaWx1cmUoCiAgICAgICAgIHN0ZDo6bnVsbHB0cl90LCBjb25zdCBjaGFyKiBmaWxl
LCBpbnQgbGluZSwgY29uc3QgY2hhciogZnVuY3Rpb24sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1BsYW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHUGxhbi5jcHAJKHJldmlzaW9uIDI2ODA4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHUGxhbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY3Miw2ICs2NzIsOCBAQCBD
b21waWxhdGlvbktleSBQbGFuOjprZXkoKQogICAgIHJldHVybiBDb21waWxhdGlvbktleShtX2Nv
ZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSwgbV9tb2RlKTsKIH0KIAorLy90ZW1wbGF0ZTx0eXBlbmFt
ZSBWaXNpdG9yPgorLy92b2lkIFBsYW46OmNoZWNrTGl2ZW5lc3NBbmRWaXNpdENoaWxkcmVuKFZp
c2l0b3ImIHZpc2l0b3IpCiB2b2lkIFBsYW46OmNoZWNrTGl2ZW5lc3NBbmRWaXNpdENoaWxkcmVu
KFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGlmICghaXNLbm93blRvQmVMaXZlRHVyaW5n
R0MoKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5oCShyZXZpc2lvbiAyNjgw
ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uaAkod29ya2luZyBjb3B5
KQpAQCAtNzIsNiArNzIsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
RnVuYz4KICAgICB2b2lkIGl0ZXJhdGVDb2RlQmxvY2tzRm9yR0MoY29uc3QgRnVuYyYpOworLy8g
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCBjaGVja0xpdmVuZXNzQW5kVmlzaXRD
aGlsZHJlbihWaXNpdG9yJik7CiAgICAgdm9pZCBjaGVja0xpdmVuZXNzQW5kVmlzaXRDaGlsZHJl
bihTbG90VmlzaXRvciYpOwogICAgIGJvb2wgaXNLbm93blRvQmVMaXZlRHVyaW5nR0MoKTsKICAg
ICB2b2lkIGZpbmFsaXplSW5HQygpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTYWZlcG9pbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU2FmZXBvaW50LmNwcAkocmV2aXNpb24gMjY4MDg2KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTYWZlcG9pbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Myw2ICs4Myw4IEBA
IHZvaWQgU2FmZXBvaW50OjpiZWdpbigpCiAgICAgfQogfQogCisvL3RlbXBsYXRlPHR5cGVuYW1l
IFZpc2l0b3I+CisvL3ZvaWQgU2FmZXBvaW50OjpjaGVja0xpdmVuZXNzQW5kVmlzaXRDaGlsZHJl
bihWaXNpdG9yJiB2aXNpdG9yKQogdm9pZCBTYWZlcG9pbnQ6OmNoZWNrTGl2ZW5lc3NBbmRWaXNp
dENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFJFTEVBU0VfQVNTRVJUKG1f
ZGlkQ2FsbEJlZ2luKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZXBv
aW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlcG9p
bnQuaAkocmV2aXNpb24gMjY4MDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
YWZlcG9pbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNjcsNiArNjcsNyBAQCBwdWJsaWM6CiAgICAg
CiAgICAgdm9pZCBiZWdpbigpOwogICAgIAorLy8gICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRv
cj4gdm9pZCBjaGVja0xpdmVuZXNzQW5kVmlzaXRDaGlsZHJlbihWaXNpdG9yJik7CiAgICAgdm9p
ZCBjaGVja0xpdmVuZXNzQW5kVmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYpOwogICAgIGJvb2wg
aXNLbm93blRvQmVMaXZlRHVyaW5nR0MoKTsKICAgICB2b2lkIGNhbmNlbCgpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTY2FubmFibGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NjYW5uYWJsZS5oCShyZXZpc2lvbiAyNjgwODYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NjYW5uYWJsZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zOSw2ICszOSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5TY2FubmFibGUoKSB7IH0K
ICAgICAKICAgICB2aXJ0dWFsIHZvaWQgdmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYpID0gMDsK
KyAgICB2aXJ0dWFsIHZvaWQgdmlzaXRDaGlsZHJlbihEZWJ1Z1Nsb3RWaXNpdG9yJikgPSAwOyAv
LyBtbGFtCiB9OwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0LmNwcAkocmV2aXNpb24gMjY4MDg2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM3Miw2ICszNzIsOCBAQCB2b2lkIFdvcmtsaXN0OjpyZXN1bWVBbGxUaHJlYWRzKCkKICAgICBt
X3N1c3BlbnNpb25Mb2NrLnVubG9jaygpOwogfQogCisvL3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0
b3I+CisvL3ZvaWQgV29ya2xpc3Q6OnZpc2l0V2Vha1JlZmVyZW5jZXMoVmlzaXRvciYgdmlzaXRv
cikKIHZvaWQgV29ya2xpc3Q6OnZpc2l0V2Vha1JlZmVyZW5jZXMoU2xvdFZpc2l0b3ImIHZpc2l0
b3IpCiB7CiAgICAgVk0qIHZtID0gJnZpc2l0b3IuaGVhcCgpLT52bSgpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3QuaAkocmV2aXNpb24gMjY4MDg2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC03
Myw2ICs3Myw3IEBAIHB1YmxpYzoKICAgICBib29sIGlzQWN0aXZlRm9yVk0oVk0mKSBjb25zdDsK
ICAgICAKICAgICAvLyBPbmx5IGNhbGxlZCBvbiB0aGUgbWFpbiB0aHJlYWQgYWZ0ZXIgc3VzcGVu
ZGluZyBhbGwgdGhyZWFkcy4KKy8vICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQg
dmlzaXRXZWFrUmVmZXJlbmNlcyhWaXNpdG9yJik7CiAgICAgdm9pZCB2aXNpdFdlYWtSZWZlcmVu
Y2VzKFNsb3RWaXNpdG9yJik7CiAgICAgdm9pZCByZW1vdmVEZWFkUGxhbnMoVk0mKTsKICAgICAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCShyZXZpc2lvbiAyNjgwODYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjY5Nyw2ICsyNjk3LDcgQEAgdm9pZCBIZWFwOjpkaWRGcmVlQmxvY2soc2l6ZV90IGNhcGFjaXR5
KQogI2VuZGlmCiB9CiAKKy8vIG1sYW0gRklYTUUKIHZvaWQgSGVhcDo6YWRkQ29yZUNvbnN0cmFp
bnRzKCkKIHsKICAgICBtX2NvbnN0cmFpbnRTZXQtPmFkZCgKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5jcHAJKHJldmlzaW9uIDI2ODA4NikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
Mzc0LDE0ICszNzQsMTcgQEAgQUxXQVlTX0lOTElORSB2b2lkIFNsb3RWaXNpdG9yOjp2aXNpdENo
aQogICAgIHN3aXRjaCAoY2VsbC0+dHlwZSgpKSB7CiAgICAgY2FzZSBTdHJpbmdUeXBlOgogICAg
ICAgICBKU1N0cmluZzo6dmlzaXRDaGlsZHJlbihjb25zdF9jYXN0PEpTQ2VsbCo+KGNlbGwpLCAq
dGhpcyk7CisvLyAgICAgICAgSlNTdHJpbmc6OnZpc2l0Q2hpbGRyZW5Gb3JTbG90VmlzaXRvcihj
b25zdF9jYXN0PEpTQ2VsbCo+KGNlbGwpLCAqdGhpcyk7CiAgICAgICAgIGJyZWFrOwogICAgICAg
ICAKICAgICBjYXNlIEZpbmFsT2JqZWN0VHlwZToKICAgICAgICAgSlNGaW5hbE9iamVjdDo6dmlz
aXRDaGlsZHJlbihjb25zdF9jYXN0PEpTQ2VsbCo+KGNlbGwpLCAqdGhpcyk7CisvLyAgICAgICAg
SlNGaW5hbE9iamVjdDo6dmlzaXRDaGlsZHJlbkZvclNsb3RWaXNpdG9yKGNvbnN0X2Nhc3Q8SlND
ZWxsKj4oY2VsbCksICp0aGlzKTsKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIEFycmF5VHlw
ZToKICAgICAgICAgSlNBcnJheTo6dmlzaXRDaGlsZHJlbihjb25zdF9jYXN0PEpTQ2VsbCo+KGNl
bGwpLCAqdGhpcyk7CisvLyAgICAgICAgSlNBcnJheTo6dmlzaXRDaGlsZHJlbkZvclNsb3RWaXNp
dG9yKGNvbnN0X2Nhc3Q8SlNDZWxsKj4oY2VsbCksICp0aGlzKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIAogICAgIGRlZmF1bHQ6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9T
bG90VmlzaXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Ns
b3RWaXNpdG9yLmgJKHJldmlzaW9uIDI2ODA4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL1Nsb3RWaXNpdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2OCw2ICsyNjgsMTEgQEAgcHVi
bGljOgogI2VuZGlmCiB9OwogCitjbGFzcyBEZWJ1Z1Nsb3RWaXNpdG9yIDogcHVibGljIFNsb3RW
aXNpdG9yIC8vIG1sYW0gVEVTVAoreworCit9OworCiBjbGFzcyBQYXJhbGxlbE1vZGVFbmFibGVy
IHsKIHB1YmxpYzoKICAgICBQYXJhbGxlbE1vZGVFbmFibGVyKFNsb3RWaXNpdG9yJiBzdGFjaykK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TaGFkb3dDaGlja2VuLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU2hhZG93
Q2hpY2tlbi5jcHAJKHJldmlzaW9uIDI2ODA4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnRlcnByZXRlci9TaGFkb3dDaGlja2VuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQwLDYgKzQ0
MCw4IEBAIHZvaWQgU2hhZG93Q2hpY2tlbjo6dXBkYXRlKFZNJiB2bSwgQ2FsbEYKICAgICAgICAg
ZGF0YUxvZygiICAgIEFmdGVyIGNsZWFuLXVwOiAiLCAqdGhpcywgIlxuIik7CiB9CiAKKy8vdGVt
cGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KKy8vdm9pZCBTaGFkb3dDaGlja2VuOjp2aXNpdENoaWxk
cmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB2b2lkIFNoYWRvd0NoaWNrZW46OnZpc2l0Q2hpbGRyZW4o
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9sb2dDdXJz
b3IgLSBtX2xvZzsgaS0tOykgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJl
dGVyL1NoYWRvd0NoaWNrZW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW50ZXJwcmV0ZXIvU2hhZG93Q2hpY2tlbi5oCShyZXZpc2lvbiAyNjgwODYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU2hhZG93Q2hpY2tlbi5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xOTYsNiArMTk2LDcgQEAgcHVibGljOgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0
b3I+CiAgICAgdm9pZCBpdGVyYXRlKFZNJiwgQ2FsbEZyYW1lKiwgY29uc3QgRnVuY3RvciYpOwog
ICAgIAorLy8gICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCB2aXNpdENoaWxkcmVu
KFZpc2l0b3ImKTsKICAgICB2b2lkIHZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKICAgICB2
b2lkIHJlc2V0KCk7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFRo
dW5rcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUVGh1bmtz
LmgJKHJldmlzaW9uIDI2ODA4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUVGh1
bmtzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw0IEBACisKIC8qCiAgKiBDb3B5cmlnaHQg
KEMpIDIwMTItMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQWJzdHJhY3RNb2R1bGVSZWNvcmQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Fic3RyYWN0TW9kdWxl
UmVjb3JkLmNwcAkocmV2aXNpb24gMjY4MDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQWJzdHJhY3RNb2R1bGVSZWNvcmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MCw3ICs2
MCw4IEBAIHZvaWQgQWJzdHJhY3RNb2R1bGVSZWNvcmQ6OmZpbmlzaENyZWF0aW8KICAgICBwdXRE
aXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJkZXBlbmRlbmNpZXNNYXAiX3Mp
LCBtX2RlcGVuZGVuY2llc01hcC5nZXQoKSk7CiB9CiAKLXZvaWQgQWJzdHJhY3RNb2R1bGVSZWNv
cmQ6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3Rl
bXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEFic3RyYWN0TW9kdWxlUmVjb3JkOjp2aXNp
dENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBBYnN0cmFj
dE1vZHVsZVJlY29yZCogdGhpc09iamVjdCA9IGpzQ2FzdDxBYnN0cmFjdE1vZHVsZVJlY29yZCo+
KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygp
KTsKQEAgLTcwLDYgKzcxLDggQEAgdm9pZCBBYnN0cmFjdE1vZHVsZVJlY29yZDo6dmlzaXRDaGls
ZHJlbgogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fZGVwZW5kZW5jaWVzTWFwKTsK
IH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEFic3RyYWN0TW9kdWxlUmVjb3JkKTsKKwogdm9p
ZCBBYnN0cmFjdE1vZHVsZVJlY29yZDo6YXBwZW5kUmVxdWVzdGVkTW9kdWxlKGNvbnN0IElkZW50
aWZpZXImIG1vZHVsZU5hbWUpCiB7CiAgICAgbV9yZXF1ZXN0ZWRNb2R1bGVzLmFkZChtb2R1bGVO
YW1lLmltcGwoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BYnN0cmFj
dE1vZHVsZVJlY29yZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0Fic3RyYWN0TW9kdWxlUmVjb3JkLmgJKHJldmlzaW9uIDI2ODA4NikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0Fic3RyYWN0TW9kdWxlUmVjb3JkLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEzNiw3ICsxMzYsOCBAQCBwcm90ZWN0ZWQ6CiAgICAgQWJzdHJhY3RNb2R1bGVSZWNv
cmQoVk0mLCBTdHJ1Y3R1cmUqLCBjb25zdCBJZGVudGlmaWVyJik7CiAgICAgdm9pZCBmaW5pc2hD
cmVhdGlvbihKU0dsb2JhbE9iamVjdCosIFZNJik7CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENo
aWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJF
TjsKKy8vICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3Im
KTsKIAogICAgIHZvaWQgc2V0TW9kdWxlRW52aXJvbm1lbnQoSlNHbG9iYWxPYmplY3QqLCBKU01v
ZHVsZUVudmlyb25tZW50Kik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0NsYXNzSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0NsYXNzSW5mby5oCShyZXZpc2lvbiAyNjgwODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9DbGFzc0luZm8uaAkod29ya2luZyBjb3B5KQpAQCAtNDQsOSArNDQsNiBAQCBzdHJ1
Y3QgTWV0aG9kVGFibGUgewogICAgIHVzaW5nIERlc3Ryb3lGdW5jdGlvblB0ciA9IHZvaWQgKCop
KEpTQ2VsbCopOwogICAgIERlc3Ryb3lGdW5jdGlvblB0ciBNRVRIT0RfVEFCTEVfRU5UUlkoZGVz
dHJveSk7CiAKLSAgICB1c2luZyBWaXNpdENoaWxkcmVuRnVuY3Rpb25QdHIgPSB2b2lkICgqKShK
U0NlbGwqLCBTbG90VmlzaXRvciYpOwotICAgIFZpc2l0Q2hpbGRyZW5GdW5jdGlvblB0ciBNRVRI
T0RfVEFCTEVfRU5UUlkodmlzaXRDaGlsZHJlbik7Ci0KICAgICB1c2luZyBHZXRDYWxsRGF0YUZ1
bmN0aW9uUHRyID0gQ2FsbERhdGEgKCopKEpTQ2VsbCopOwogICAgIEdldENhbGxEYXRhRnVuY3Rp
b25QdHIgTUVUSE9EX1RBQkxFX0VOVFJZKGdldENhbGxEYXRhKTsKIApAQCAtMTI4LDggKzEyNSwy
MiBAQCBzdHJ1Y3QgTWV0aG9kVGFibGUgewogICAgIHVzaW5nIEVzdGltYXRlZFNpemVGdW5jdGlv
blB0ciA9IHNpemVfdCAoKikoSlNDZWxsKiwgVk0mKTsKICAgICBFc3RpbWF0ZWRTaXplRnVuY3Rp
b25QdHIgTUVUSE9EX1RBQkxFX0VOVFJZKGVzdGltYXRlZFNpemUpOwogCisgICAgdXNpbmcgVmlz
aXRDaGlsZHJlbkZ1bmN0aW9uUHRyID0gdm9pZCAoKikoSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsK
KyAgICBWaXNpdENoaWxkcmVuRnVuY3Rpb25QdHIgTUVUSE9EX1RBQkxFX0VOVFJZKHZpc2l0Q2hp
bGRyZW5XaXRoU2xvdFZpc2l0b3IpOworCiAgICAgdXNpbmcgVmlzaXRPdXRwdXRDb25zdHJhaW50
c1B0ciA9IHZvaWQgKCopKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7Ci0gICAgVmlzaXRPdXRwdXRD
b25zdHJhaW50c1B0ciBNRVRIT0RfVEFCTEVfRU5UUlkodmlzaXRPdXRwdXRDb25zdHJhaW50cyk7
CisgICAgVmlzaXRPdXRwdXRDb25zdHJhaW50c1B0ciBNRVRIT0RfVEFCTEVfRU5UUlkodmlzaXRP
dXRwdXRDb25zdHJhaW50c1dpdGhTbG90VmlzaXRvcik7CisKKyAgICB1c2luZyBWaXNpdENoaWxk
cmVuV2l0aERlYnVnU2xvdFZpc2l0b3JQdHIgPSB2b2lkICgqKShKU0NlbGwqLCBEZWJ1Z1Nsb3RW
aXNpdG9yJik7CisgICAgVmlzaXRDaGlsZHJlbldpdGhEZWJ1Z1Nsb3RWaXNpdG9yUHRyIE1FVEhP
RF9UQUJMRV9FTlRSWSh2aXNpdENoaWxkcmVuV2l0aERlYnVnU2xvdFZpc2l0b3IpOworCisgICAg
dXNpbmcgVmlzaXRPdXRwdXRDb25zdHJhaW50c1dpdGhEZWJ1Z1Nsb3RWaXNpdG9yUHRyID0gdm9p
ZCAoKikoSlNDZWxsKiwgRGVidWdTbG90VmlzaXRvciYpOworICAgIFZpc2l0T3V0cHV0Q29uc3Ry
YWludHNXaXRoRGVidWdTbG90VmlzaXRvclB0ciBNRVRIT0RfVEFCTEVfRU5UUlkodmlzaXRPdXRw
dXRDb25zdHJhaW50c1dpdGhEZWJ1Z1Nsb3RWaXNpdG9yKTsKKworICAgIEFMV0FZU19JTkxJTkUg
dm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpIGNv
bnN0IHsgdmlzaXRDaGlsZHJlbldpdGhTbG90VmlzaXRvcihjZWxsLCB2aXNpdG9yKTsgfQorICAg
IEFMV0FZU19JTkxJTkUgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgRGVidWdTbG90
VmlzaXRvciYgdmlzaXRvcikgY29uc3QgeyB2aXNpdENoaWxkcmVuV2l0aERlYnVnU2xvdFZpc2l0
b3IoY2VsbCwgdmlzaXRvcik7IH0KKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgdmlzaXRPdXRwdXRD
b25zdHJhaW50cyhKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBjb25zdCB7IHZp
c2l0T3V0cHV0Q29uc3RyYWludHNXaXRoU2xvdFZpc2l0b3IoY2VsbCwgdmlzaXRvcik7IH0KKyAg
ICBBTFdBWVNfSU5MSU5FIHZvaWQgdmlzaXRPdXRwdXRDb25zdHJhaW50cyhKU0NlbGwqIGNlbGws
IERlYnVnU2xvdFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0IHsgdmlzaXRPdXRwdXRDb25zdHJhaW50
c1dpdGhEZWJ1Z1Nsb3RWaXNpdG9yKGNlbGwsIHZpc2l0b3IpOyB9CiB9OwogCiAjZGVmaW5lIENS
RUFURV9NRU1CRVJfQ0hFQ0tFUihtZW1iZXIpIFwKQEAgLTE1NSw3ICsxNjYsNiBAQCBzdHJ1Y3Qg
TWV0aG9kVGFibGUgewogICAgIEpTQ2FzdGluZ0hlbHBlcnM6OkluaGVyaXRzVHJhaXRzPENsYXNz
TmFtZT46OnR5cGVSYW5nZSwgXAogICAgIHsgXAogICAgICAgICAmQ2xhc3NOYW1lOjpkZXN0cm95
LCBcCi0gICAgICAgICZDbGFzc05hbWU6OnZpc2l0Q2hpbGRyZW4sIFwKICAgICAgICAgJkNsYXNz
TmFtZTo6Z2V0Q2FsbERhdGEsIFwKICAgICAgICAgJkNsYXNzTmFtZTo6Z2V0Q29uc3RydWN0RGF0
YSwgXAogICAgICAgICAmQ2xhc3NOYW1lOjpwdXQsIFwKQEAgLTE4NCw3ICsxOTQsMTAgQEAgc3Ry
dWN0IE1ldGhvZFRhYmxlIHsKICAgICAgICAgJkNsYXNzTmFtZTo6ZHVtcFRvU3RyZWFtLCBcCiAg
ICAgICAgICZDbGFzc05hbWU6OmFuYWx5emVIZWFwLCBcCiAgICAgICAgICZDbGFzc05hbWU6OmVz
dGltYXRlZFNpemUsIFwKLSAgICAgICAgJkNsYXNzTmFtZTo6dmlzaXRPdXRwdXRDb25zdHJhaW50
cywgXAorICAgICAgICAmQ2xhc3NOYW1lOjp2aXNpdENoaWxkcmVuPFNsb3RWaXNpdG9yPiwgXAor
ICAgICAgICAmQ2xhc3NOYW1lOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzPFNsb3RWaXNpdG9yPiwg
XAorICAgICAgICAmQ2xhc3NOYW1lOjp2aXNpdENoaWxkcmVuPERlYnVnU2xvdFZpc2l0b3I+LCBc
CisgICAgICAgICZDbGFzc05hbWU6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM8RGVidWdTbG90Vmlz
aXRvcj4sIFwKICAgICB9LCBcCiAgICAgQ2xhc3NOYW1lOjpUeXBlZEFycmF5U3RvcmFnZVR5cGUs
IFwKICAgICBzaXplb2YoQ2xhc3NOYW1lKSwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0Nsb25lZEFyZ3VtZW50cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQ2xvbmVkQXJndW1lbnRzLmNwcAkocmV2aXNpb24gMjY4MDg2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xvbmVkQXJndW1lbnRzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjY3LDcgKzI2Nyw4IEBAIHZvaWQgQ2xvbmVkQXJndW1lbnRzOjptYXRlcmlh
bGl6ZVNwZWNpYWwKICAgICAgICAgbWF0ZXJpYWxpemVTcGVjaWFscyhnbG9iYWxPYmplY3QpOwog
fQogCi12b2lkIENsb25lZEFyZ3VtZW50czo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgQ2xv
bmVkQXJndW1lbnRzOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRv
cikKIHsKICAgICBDbG9uZWRBcmd1bWVudHMqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8Q2xvbmVkQXJn
dW1lbnRzKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0
LCBpbmZvKCkpOwpAQCAtMjc1LDUgKzI3Niw3IEBAIHZvaWQgQ2xvbmVkQXJndW1lbnRzOjp2aXNp
dENoaWxkcmVuKEpTQ2UKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2NhbGxlZSk7
CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihDbG9uZWRBcmd1bWVudHMpOworCiB9IC8vIG5h
bWVzcGFjZSBKU0MKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xvbmVk
QXJndW1lbnRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Q2xvbmVkQXJndW1lbnRzLmgJKHJldmlzaW9uIDI2ODA4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0Nsb25lZEFyZ3VtZW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC02Miw3ICs2
Miw4IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0m
LCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUgcHJvdG90eXBlKTsKICAgICBzdGF0aWMgU3RydWN0
dXJlKiBjcmVhdGVTbG93UHV0U3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVl
IHByb3RvdHlwZSk7CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNs
b3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKKy8vICAgIHN0YXRpYyB2
b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKIAogICAgIERFQ0xBUkVf
SU5GTzsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGlyZWN0QXJndW1l
bnRzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EaXJl
Y3RBcmd1bWVudHMuY3BwCShyZXZpc2lvbiAyNjgwODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9EaXJlY3RBcmd1bWVudHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MCw3ICs5
MCw4IEBAIHNpemVfdCBEaXJlY3RBcmd1bWVudHM6OmVzdGltYXRlZFNpemUoSlMKICAgICByZXR1
cm4gQmFzZTo6ZXN0aW1hdGVkU2l6ZShjZWxsLCB2bSkgKyBtYXBwZWRBcmd1bWVudHNTaXplICsg
bW9kaWZpZWRBcmd1bWVudHNTaXplOwogfQogCi12b2lkIERpcmVjdEFyZ3VtZW50czo6dmlzaXRD
aGlsZHJlbihKU0NlbGwqIHRoaXNDZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRl
PHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIERpcmVjdEFyZ3VtZW50czo6dmlzaXRDaGlsZHJlbihK
U0NlbGwqIHRoaXNDZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIERpcmVjdEFyZ3VtZW50
cyogdGhpc09iamVjdCA9IHN0YXRpY19jYXN0PERpcmVjdEFyZ3VtZW50cyo+KHRoaXNDZWxsKTsK
ICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC0x
MDQsNiArMTA1LDggQEAgdm9pZCBEaXJlY3RBcmd1bWVudHM6OnZpc2l0Q2hpbGRyZW4oSlNDZQog
ICAgIEdlbmVyaWNBcmd1bWVudHM8RGlyZWN0QXJndW1lbnRzPjo6dmlzaXRDaGlsZHJlbih0aGlz
Q2VsbCwgdmlzaXRvcik7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihEaXJlY3RBcmd1bWVu
dHMpOworCiBTdHJ1Y3R1cmUqIERpcmVjdEFyZ3VtZW50czo6Y3JlYXRlU3RydWN0dXJlKFZNJiB2
bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCiB7CiAg
ICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwg
VHlwZUluZm8oRGlyZWN0QXJndW1lbnRzVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGlyZWN0QXJndW1lbnRzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGlyZWN0QXJndW1lbnRz
LmgJKHJldmlzaW9uIDI2ODA4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Rp
cmVjdEFyZ3VtZW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC02NSw3ICs2NSw4IEBAIHB1YmxpYzoK
ICAgICBzdGF0aWMgRGlyZWN0QXJndW1lbnRzKiBjcmVhdGVCeUNvcHlpbmcoSlNHbG9iYWxPYmpl
Y3QqLCBDYWxsRnJhbWUqKTsKIAogICAgIHN0YXRpYyBzaXplX3QgZXN0aW1hdGVkU2l6ZShKU0Nl
bGwqLCBWTSYpOwotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZp
c2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOworLy8gICAgc3RhdGljIHZvaWQg
dmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwogICAgIAogICAgIHVpbnQzMl90
IGludGVybmFsTGVuZ3RoKCkgY29uc3QKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9FdmFsRXhlY3V0YWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvRXZhbEV4ZWN1dGFibGUuY3BwCShyZXZpc2lvbiAyNjgwODYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FdmFsRXhlY3V0YWJsZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQ5LDcgKzQ5LDggQEAgYXV0byBFdmFsRXhlY3V0YWJsZTo6ZW5zdXJlVGVt
cGxhdGVPYmplYwogICAgIHJldHVybiBlbnN1cmVUZW1wbGF0ZU9iamVjdE1hcEltcGwobV90ZW1w
bGF0ZU9iamVjdE1hcCk7CiB9CiAKLXZvaWQgRXZhbEV4ZWN1dGFibGU6OnZpc2l0Q2hpbGRyZW4o
SlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZp
c2l0b3I+Cit2b2lkIEV2YWxFeGVjdXRhYmxlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwg
VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBFdmFsRXhlY3V0YWJsZSogdGhpc09iamVjdCA9IGpz
Q2FzdDxFdmFsRXhlY3V0YWJsZSo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJ
VFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTYzLDQgKzY0LDYgQEAgdm9pZCBFdmFsRXhlY3V0
YWJsZTo6dmlzaXRDaGlsZHJlbihKU0NlbAogICAgIH0KIH0KIAorREVGSU5FX1ZJU0lUX0NISUxE
UkVOKEV2YWxFeGVjdXRhYmxlKTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9FdmFsRXhlY3V0YWJsZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V2YWxFeGVjdXRhYmxlLmgJKHJldmlzaW9uIDI2
ODA4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V2YWxFeGVjdXRhYmxlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTc4LDcgKzc4LDggQEAgcHJvdGVjdGVkOgogICAgIHVzaW5nIEJh
c2U6OmZpbmlzaENyZWF0aW9uOwogICAgIEV2YWxFeGVjdXRhYmxlKEpTR2xvYmFsT2JqZWN0Kiwg
Y29uc3QgU291cmNlQ29kZSYsIGJvb2wgaW5TdHJpY3RDb250ZXh0LCBEZXJpdmVkQ29udGV4dFR5
cGUsIGJvb2wgaXNBcnJvd0Z1bmN0aW9uQ29udGV4dCwgYm9vbCBpc0luc2lkZU9yZGluYXJ5RnVu
Y3Rpb24sIEV2YWxDb250ZXh0VHlwZSwgTmVlZHNDbGFzc0ZpZWxkSW5pdGlhbGl6ZXIpOwogCi0g
ICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAg
IERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CisvLyAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVu
KEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CiAKICAgICB1bnNpZ25lZCBtX25lZWRzQ2xhc3NGaWVs
ZEluaXRpYWxpemVyIDogMTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
RXhjZXB0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9FeGNlcHRpb24uY3BwCShyZXZpc2lvbiAyNjgwODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9FeGNlcHRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Myw3ICs1Myw4IEBA
IFN0cnVjdHVyZSogRXhjZXB0aW9uOjpjcmVhdGVTdHJ1Y3R1cmUoVk0KICAgICByZXR1cm4gU3Ry
dWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhDZWxs
VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwogfQogCi12b2lkIEV4Y2VwdGlvbjo6dmlz
aXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8
dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgRXhjZXB0aW9uOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCog
Y2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBFeGNlcHRpb24qIHRoaXNPYmplY3QgPSBq
c0Nhc3Q8RXhjZXB0aW9uKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0
aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNjQsNiArNjUsOCBAQCB2b2lkIEV4Y2VwdGlvbjo6dmlz
aXRDaGlsZHJlbihKU0NlbGwqIGNlCiAgICAgICAgIGZyYW1lLnZpc2l0Q2hpbGRyZW4odmlzaXRv
cik7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihFeGNlcHRpb24pOworCiBFeGNlcHRpb246
OkV4Y2VwdGlvbihWTSYgdm0pCiAgICAgOiBCYXNlKHZtLCB2bS5leGNlcHRpb25TdHJ1Y3R1cmUu
Z2V0KCkpCiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGNlcHRpb24u
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGNlcHRpb24u
aAkocmV2aXNpb24gMjY4MDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhj
ZXB0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxLDcgKzUxLDggQEAgcHVibGljOgogCiAgICAg
c3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBK
U1ZhbHVlIHByb3RvdHlwZSk7CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2Vs
bCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKKy8vICAgIHN0
YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKIAogICAgIERF
Q0xBUkVfRVhQT1JUX0lORk87CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0Z1bmN0aW9uRXhlY3V0YWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvRnVuY3Rpb25FeGVjdXRhYmxlLmNwcAkocmV2aXNpb24gMjY4MDg2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25FeGVjdXRhYmxlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNjcsNyArNjcsOCBAQCBGdW5jdGlvbkNvZGVCbG9jayogRnVuY3Rpb25F
eGVjdXRhYmxlOjpiCiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEZ1bmN0aW9uQ29kZUJsb2NrKj4o
ZWRnZS0+Y29kZUJsb2NrKCktPmJhc2VsaW5lQWx0ZXJuYXRpdmUoKSk7CiB9CiAKLXZvaWQgRnVu
Y3Rpb25FeGVjdXRhYmxlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3Im
IHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBGdW5jdGlvbkV4ZWN1
dGFibGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewog
ICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogdGhpc09iamVjdCA9IGpzQ2FzdDxGdW5jdGlvbkV4ZWN1
dGFibGUqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3Qs
IGluZm8oKSk7CkBAIC04Niw2ICs4Nyw4IEBAIHZvaWQgRnVuY3Rpb25FeGVjdXRhYmxlOjp2aXNp
dENoaWxkcmVuKEoKICAgICB9CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihGdW5jdGlvbkV4
ZWN1dGFibGUpOworCiBGdW5jdGlvbkV4ZWN1dGFibGUqIEZ1bmN0aW9uRXhlY3V0YWJsZTo6ZnJv
bUdsb2JhbENvZGUoCiAgICAgY29uc3QgSWRlbnRpZmllciYgbmFtZSwgSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCAKICAgICBKU09iamVjdCom
IGV4Y2VwdGlvbiwgaW50IG92ZXJyaWRlTGluZU51bWJlciwgT3B0aW9uYWw8aW50PiBmdW5jdGlv
bkNvbnN0cnVjdG9yUGFyYW1ldGVyc0VuZFBvc2l0aW9uKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25FeGVjdXRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25FeGVjdXRhYmxlLmgJKHJldmlzaW9uIDI2
ODA4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJs
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNjYsNyArMTY2LDggQEAgcHVibGljOgogICAgIEpTUGFy
c2VyU2NyaXB0TW9kZSBzY3JpcHRNb2RlKCkgY29uc3QgeyByZXR1cm4gbV91bmxpbmtlZEV4ZWN1
dGFibGUtPnNjcmlwdE1vZGUoKTsgfQogICAgIFNvdXJjZUNvZGUgY2xhc3NTb3VyY2UoKSBjb25z
dCB7IHJldHVybiBtX3VubGlua2VkRXhlY3V0YWJsZS0+Y2xhc3NTb3VyY2UoKTsgfQogCi0gICAg
c3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERF
Q0xBUkVfVklTSVRfQ0hJTERSRU47CisvLyAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpT
Q2VsbCosIFNsb3RWaXNpdG9yJik7CiAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0
dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90bykK
ICAgICB7CiAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0
LCBwcm90bywgVHlwZUluZm8oRnVuY3Rpb25FeGVjdXRhYmxlVHlwZSwgU3RydWN0dXJlRmxhZ3Mp
LCBpbmZvKCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25S
YXJlRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
RnVuY3Rpb25SYXJlRGF0YS5jcHAJKHJldmlzaW9uIDI2ODA4NikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uUmFyZURhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01
MSw3ICs1MSw4IEBAIFN0cnVjdHVyZSogRnVuY3Rpb25SYXJlRGF0YTo6Y3JlYXRlU3RydWMKICAg
ICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBU
eXBlSW5mbyhDZWxsVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwogfQogCi12b2lkIEZ1
bmN0aW9uUmFyZURhdGE6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYg
dmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEZ1bmN0aW9uUmFyZURh
dGE6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAg
IEZ1bmN0aW9uUmFyZURhdGEqIHJhcmVEYXRhID0ganNDYXN0PEZ1bmN0aW9uUmFyZURhdGEqPihj
ZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNlbGwsIGluZm8oKSk7CkBAIC02
Myw2ICs2NCw4IEBAIHZvaWQgRnVuY3Rpb25SYXJlRGF0YTo6dmlzaXRDaGlsZHJlbihKU0MKICAg
ICB2aXNpdG9yLmFwcGVuZChyYXJlRGF0YS0+bV9leGVjdXRhYmxlKTsKIH0KIAorREVGSU5FX1ZJ
U0lUX0NISUxEUkVOKEZ1bmN0aW9uUmFyZURhdGEpOworCiBGdW5jdGlvblJhcmVEYXRhOjpGdW5j
dGlvblJhcmVEYXRhKFZNJiB2bSwgRXhlY3V0YWJsZUJhc2UqIGV4ZWN1dGFibGUpCiAgICAgOiBC
YXNlKHZtLCB2bS5mdW5jdGlvblJhcmVEYXRhU3RydWN0dXJlLmdldCgpKQogICAgICwgbV9vYmpl
Y3RBbGxvY2F0aW9uUHJvZmlsZSgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9GdW5jdGlvblJhcmVEYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvRnVuY3Rpb25SYXJlRGF0YS5oCShyZXZpc2lvbiAyNjgwODYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvblJhcmVEYXRhLmgJKHdvcmtpbmcgY29weSkK
QEAgLTY1LDcgKzY1LDggQEAgcHVibGljOgogCiAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRl
U3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlIHByb3RvdHlwZSk7CiAKLSAg
ICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAg
REVDTEFSRV9WSVNJVF9DSElMRFJFTjsKKy8vICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4o
SlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKIAogICAgIERFQ0xBUkVfSU5GTzsKIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50cy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNBcmd1bWVudHMuaAkocmV2
aXNpb24gMjY4MDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY0Fy
Z3VtZW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCw3ICs0NCw4IEBAIHByb3RlY3RlZDoKICAg
ICB7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90
VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CisvLyAgICBzdGF0aWMgdm9p
ZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CiAgICAgc3RhdGljIGJvb2wg
Z2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5h
bWUsIFByb3BlcnR5U2xvdCYpOwogICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdEJ5
SW5kZXgoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwg
UHJvcGVydHlTbG90Jik7CiAgICAgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU09i
amVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1v
ZGUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50
c0lubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9H
ZW5lcmljQXJndW1lbnRzSW5saW5lcy5oCShyZXZpc2lvbiAyNjgwODYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljQXJndW1lbnRzSW5saW5lcy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zMSw3ICszMSw4IEBACiBuYW1lc3BhY2UgSlNDIHsKIAogdGVtcGxhdGU8dHlwZW5h
bWUgVHlwZT4KLXZvaWQgR2VuZXJpY0FyZ3VtZW50czxUeXBlPjo6dmlzaXRDaGlsZHJlbihKU0Nl
bGwqIHRoaXNDZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZp
c2l0b3I+Cit2b2lkIEdlbmVyaWNBcmd1bWVudHM8VHlwZT46OnZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiB0aGlzQ2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBUeXBlKiB0aGlzT2JqZWN0ID0g
c3RhdGljX2Nhc3Q8VHlwZSo+KHRoaXNDZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVS
SVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9HZXR0ZXJTZXR0ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0dldHRlclNldHRlci5jcHAJKHJldmlzaW9uIDI2ODA4NikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0dldHRlclNldHRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMzLDcgKzMzLDggQEAgU1RBVElDX0FTU0VSVF9JU19UUklWSUFMTFlfREVTVFJVQ1RJQkxFKAog
CiBjb25zdCBDbGFzc0luZm8gR2V0dGVyU2V0dGVyOjpzX2luZm8gPSB7ICJHZXR0ZXJTZXR0ZXIi
LCBudWxscHRyLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEdldHRlclNl
dHRlcikgfTsKIAotdm9pZCBHZXR0ZXJTZXR0ZXI6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxs
LCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lk
IEdldHRlclNldHRlcjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0
b3IpCiB7CiAgICAgR2V0dGVyU2V0dGVyKiB0aGlzT2JqZWN0ID0ganNDYXN0PEdldHRlclNldHRl
cio+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5m
bygpKTsKQEAgLTQzLDYgKzQ0LDggQEAgdm9pZCBHZXR0ZXJTZXR0ZXI6OnZpc2l0Q2hpbGRyZW4o
SlNDZWxsKgogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fc2V0dGVyKTsKIH0KIAor
REVGSU5FX1ZJU0lUX0NISUxEUkVOKEdldHRlclNldHRlcik7CisKIEpTVmFsdWUgY2FsbEdldHRl
cihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIGJhc2UsIEpTVmFsdWUgZ2V0
dGVyU2V0dGVyKQogewogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dldHRlclNldHRlci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dldHRlclNldHRlci5oCShyZXZpc2lvbiAy
NjgwODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZXR0ZXJTZXR0ZXIuaAko
d29ya2luZyBjb3B5KQpAQCAtODIsNyArODIsOCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBj
cmVhdGUodm0sIGdsb2JhbE9iamVjdCwgZ2V0dGVyT2JqZWN0LCBzZXR0ZXJPYmplY3QpOwogICAg
IH0KIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3Im
KTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOworLy8gICAgc3RhdGljIHZvaWQgdmlzaXRD
aGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwogCiAgICAgSlNPYmplY3QqIGdldHRlcigp
IGNvbnN0IHsgcmV0dXJuIG1fZ2V0dGVyLmdldCgpOyB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0hhc2hNYXBJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9IYXNoTWFwSW1wbC5jcHAJKHJldmlzaW9uIDI2ODA4NikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0hhc2hNYXBJbXBsLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzgsOCArMzgsOSBAQCB0ZW1wbGF0ZTw+CiBjb25zdCBDbGFzc0luZm8gSGFzaE1h
cEJ1Y2tldDxIYXNoTWFwQnVja2V0RGF0YUtleVZhbHVlPjo6c19pbmZvID0KICAgICB7ICJIYXNo
TWFwQnVja2V0IiwgbnVsbHB0ciwgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJM
RShIYXNoTWFwQnVja2V0PEhhc2hNYXBCdWNrZXREYXRhS2V5VmFsdWU+KSB9OwogCi10ZW1wbGF0
ZSA8dHlwZW5hbWUgRGF0YT4KLXZvaWQgSGFzaE1hcEJ1Y2tldDxEYXRhPjo6dmlzaXRDaGlsZHJl
bihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUg
RGF0YT4KK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEhhc2hNYXBCdWNrZXQ8RGF0
YT46OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAg
IEhhc2hNYXBCdWNrZXQqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SGFzaE1hcEJ1Y2tldCo+KGNlbGwp
OwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAg
LTUyLDE5ICs1MywyMCBAQCB2b2lkIEhhc2hNYXBCdWNrZXQ8RGF0YT46OnZpc2l0Q2hpbGRyZW4o
CiAgICAgdmlzaXRvci5hcHBlbmRWYWx1ZXMoYml0d2lzZV9jYXN0PFdyaXRlQmFycmllcjxVbmtu
b3duPio+KCZ0aGlzT2JqZWN0LT5tX2RhdGEpLCBzaXplb2YoRGF0YSkgLyBzaXplb2YoV3JpdGVC
YXJyaWVyPFVua25vd24+KSk7CiB9CiAKLXRlbXBsYXRlIDx0eXBlbmFtZSBIYXNoTWFwQnVja2V0
Pgotdm9pZCBIYXNoTWFwSW1wbDxIYXNoTWFwQnVja2V0Pjo6dmlzaXRDaGlsZHJlbihKU0NlbGwq
IGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQotewotICAgIEhhc2hNYXBJbXBsKiB0aGlzT2Jq
ZWN0ID0ganNDYXN0PEhhc2hNYXBJbXBsKj4oY2VsbCk7Ci0gICAgQVNTRVJUX0dDX09CSkVDVF9J
TkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwotICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhp
c09iamVjdCwgdmlzaXRvcik7Ci0KLSAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2hl
YWQpOwotICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fdGFpbCk7Ci0gICAgCi0gICAg
aWYgKEhhc2hNYXBCdWZmZXJUeXBlKiBidWZmZXIgPSB0aGlzT2JqZWN0LT5tX2J1ZmZlci5nZXQo
KSkKLSAgICAgICAgdmlzaXRvci5tYXJrQXV4aWxpYXJ5KGJ1ZmZlcik7Ci19CisvL3RlbXBsYXRl
PHR5cGVuYW1lIEhhc2hNYXBCdWNrZXQ+CisvL3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cisv
L3ZvaWQgSGFzaE1hcEltcGw8SGFzaE1hcEJ1Y2tldD46OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBj
ZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQorLy97CisvLyAgICBIYXNoTWFwSW1wbCogdGhpc09iamVj
dCA9IGpzQ2FzdDxIYXNoTWFwSW1wbCo+KGNlbGwpOworLy8gICAgQVNTRVJUX0dDX09CSkVDVF9J
TkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOworLy8gICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0
aGlzT2JqZWN0LCB2aXNpdG9yKTsKKy8vCisvLyAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0
LT5tX2hlYWQpOworLy8gICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV90YWlsKTsKKy8v
ICAgIAorLy8gICAgaWYgKEhhc2hNYXBCdWZmZXJUeXBlKiBidWZmZXIgPSB0aGlzT2JqZWN0LT5t
X2J1ZmZlci5nZXQoKSkKKy8vICAgICAgICB2aXNpdG9yLm1hcmtBdXhpbGlhcnkoYnVmZmVyKTsK
Ky8vfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgSGFzaE1hcEJ1Y2tldD4KIHNpemVfdCBIYXNoTWFw
SW1wbDxIYXNoTWFwQnVja2V0Pjo6ZXN0aW1hdGVkU2l6ZShKU0NlbGwqIGNlbGwsIFZNJiB2bSkK
QEAgLTg0LDQgKzg2LDMwIEBAIGNvbnN0IENsYXNzSW5mbyogZ2V0SGFzaE1hcEJ1Y2tldEtleVZh
bHUKIHRlbXBsYXRlIGNsYXNzIEhhc2hNYXBJbXBsPEhhc2hNYXBCdWNrZXQ8SGFzaE1hcEJ1Y2tl
dERhdGFLZXlWYWx1ZT4+OwogdGVtcGxhdGUgY2xhc3MgSGFzaE1hcEltcGw8SGFzaE1hcEJ1Y2tl
dDxIYXNoTWFwQnVja2V0RGF0YUtleT4+OwogCisvKi8gbWxhbSBGSVhNRQordGVtcGxhdGU8Pgor
dm9pZCBIYXNoTWFwSW1wbDxIYXNoTWFwQnVja2V0PEhhc2hNYXBCdWNrZXREYXRhS2V5VmFsdWU+
Pjo6dmlzaXRDaGlsZHJlbkZvclNsb3RWaXNpdG9yKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3Im
IHZpc2l0b3IpCit7CisgICAgSGFzaE1hcEltcGw8SGFzaE1hcEJ1Y2tldDxIYXNoTWFwQnVja2V0
RGF0YUtleVZhbHVlPj46OnRlbXBsYXRlIHZpc2l0Q2hpbGRyZW4oY2VsbCwgdmlzaXRvcik7Cit9
CisKK3RlbXBsYXRlPD4KK3ZvaWQgSGFzaE1hcEltcGw8SGFzaE1hcEJ1Y2tldDxIYXNoTWFwQnVj
a2V0RGF0YUtleVZhbHVlPj46OnZpc2l0Q2hpbGRyZW5Gb3JEZWJ1Z1Nsb3RWaXNpdG9yKEpTQ2Vs
bCogY2VsbCwgRGVidWdTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBIYXNoTWFwSW1wbDxI
YXNoTWFwQnVja2V0PEhhc2hNYXBCdWNrZXREYXRhS2V5VmFsdWU+Pjo6dGVtcGxhdGUgdmlzaXRD
aGlsZHJlbihjZWxsLCB2aXNpdG9yKTsKK30KKwordGVtcGxhdGU8Pgordm9pZCBIYXNoTWFwSW1w
bDxIYXNoTWFwQnVja2V0PEhhc2hNYXBCdWNrZXREYXRhS2V5Pj46OnZpc2l0Q2hpbGRyZW5Gb3JT
bG90VmlzaXRvcihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIEhh
c2hNYXBJbXBsPEhhc2hNYXBCdWNrZXQ8SGFzaE1hcEJ1Y2tldERhdGFLZXk+Pjo6dGVtcGxhdGUg
dmlzaXRDaGlsZHJlbihjZWxsLCB2aXNpdG9yKTsKK30KKwordGVtcGxhdGU8Pgordm9pZCBIYXNo
TWFwSW1wbDxIYXNoTWFwQnVja2V0PEhhc2hNYXBCdWNrZXREYXRhS2V5Pj46OnZpc2l0Q2hpbGRy
ZW5Gb3JEZWJ1Z1Nsb3RWaXNpdG9yKEpTQ2VsbCogY2VsbCwgRGVidWdTbG90VmlzaXRvciYgdmlz
aXRvcikKK3sKKyAgICBIYXNoTWFwSW1wbDxIYXNoTWFwQnVja2V0PEhhc2hNYXBCdWNrZXREYXRh
S2V5Pj46OnRlbXBsYXRlIHZpc2l0Q2hpbGRyZW4oY2VsbCwgdmlzaXRvcik7Cit9CisvLyAqLwor
CiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0hhc2hNYXBJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSGFzaE1hcEltcGwuaAkocmV2aXNpb24gMjY4MDg2KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSGFzaE1hcEltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtMTQ4LDcgKzE0OCw4
IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fZGF0YS52YWx1ZS5nZXQoKTsKICAgICB9CiAK
LSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7Cisg
ICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKKy8vICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKIAogICAgIEFMV0FZU19JTkxJTkUgSGFzaE1hcEJ1
Y2tldCogbmV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fbmV4dC5nZXQoKTsgfQogICAgIEFMV0FZU19J
TkxJTkUgSGFzaE1hcEJ1Y2tldCogcHJldigpIGNvbnN0IHsgcmV0dXJuIG1fcHJldi5nZXQoKTsg
fQpAQCAtMzY0LDcgKzM2NSw4IEBAIGNsYXNzIEhhc2hNYXBJbXBsIDogcHVibGljIEpTTm9uRmlu
YWxPYmoKIHB1YmxpYzoKICAgICB1c2luZyBCdWNrZXRUeXBlID0gSGFzaE1hcEJ1Y2tldFR5cGU7
CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7
CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKKy8vICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hp
bGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKIAogICAgIHN0YXRpYyBzaXplX3QgZXN0aW1h
dGVkU2l6ZShKU0NlbGwqLCBWTSYpOwogCkBAIC03NTcsNCArNzU5LDE5IEBAIHByaXZhdGU6CiAg
ICAgdWludDMyX3QgbV9jYXBhY2l0eTsKIH07CiAKK3RlbXBsYXRlPHR5cGVuYW1lIEhhc2hNYXBC
dWNrZXQ+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBIYXNoTWFwSW1wbDxIYXNo
TWFwQnVja2V0Pjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3Ip
Cit7CisgICAgSGFzaE1hcEltcGwqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SGFzaE1hcEltcGwqPihj
ZWxsKTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7
CisgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKKworICAgIHZp
c2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1faGVhZCk7CisgICAgdmlzaXRvci5hcHBlbmQodGhp
c09iamVjdC0+bV90YWlsKTsKKyAgICAKKyAgICBpZiAoSGFzaE1hcEJ1ZmZlclR5cGUqIGJ1ZmZl
ciA9IHRoaXNPYmplY3QtPm1fYnVmZmVyLmdldCgpKQorICAgICAgICB2aXNpdG9yLm1hcmtBdXhp
bGlhcnkoYnVmZmVyKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9JbnRlcm5hbEZ1bmN0aW9uLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRlcm5hbEZ1bmN0aW9uLmNwcAkocmV2aXNp
b24gMjY4MDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50ZXJuYWxGdW5j
dGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY0LDcgKzY0LDggQEAgdm9pZCBJbnRlcm5hbEZ1
bmN0aW9uOjpmaW5pc2hDcmVhdGlvbihWTQogICAgIH0KIH0KIAotdm9pZCBJbnRlcm5hbEZ1bmN0
aW9uOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0
ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBJbnRlcm5hbEZ1bmN0aW9uOjp2aXNpdENo
aWxkcmVuKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBJbnRlcm5hbEZ1
bmN0aW9uKiB0aGlzT2JqZWN0ID0ganNDYXN0PEludGVybmFsRnVuY3Rpb24qPihjZWxsKTsKICAg
ICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC03Myw2
ICs3NCw4IEBAIHZvaWQgSW50ZXJuYWxGdW5jdGlvbjo6dmlzaXRDaGlsZHJlbihKU0MKICAgICB2
aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX29yaWdpbmFsTmFtZSk7CiB9CiAKK0RFRklORV9W
SVNJVF9DSElMRFJFTihJbnRlcm5hbEZ1bmN0aW9uKTsKKwogY29uc3QgU3RyaW5nJiBJbnRlcm5h
bEZ1bmN0aW9uOjpuYW1lKCkKIHsKICAgICBjb25zdCBTdHJpbmcmIG5hbWUgPSBtX29yaWdpbmFs
TmFtZS0+dHJ5R2V0VmFsdWUoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0ludGVybmFsRnVuY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9JbnRlcm5hbEZ1bmN0aW9uLmgJKHJldmlzaW9uIDI2ODA4NikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGVybmFsRnVuY3Rpb24uaAkod29ya2luZyBjb3B5KQpA
QCAtNDYsNyArNDYsOCBAQCBwdWJsaWM6CiAKICAgICBERUNMQVJFX0VYUE9SVF9JTkZPOwogCi0g
ICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBT
bG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfRVhQT1JUX1ZJU0lUX0NISUxEUkVOOworLy8gICAg
SlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90
VmlzaXRvciYpOwogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgY29uc3QgU3RyaW5nJiBuYW1lKCk7
CiAgICAgY29uc3QgU3RyaW5nIGRpc3BsYXlOYW1lKFZNJik7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9JbnRsQ29sbGF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxDb2xsYXRvci5jcHAJKHJldmlzaW9uIDI2ODA4NikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxDb2xsYXRvci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTY1LDcgKzY1LDggQEAgdm9pZCBJbnRsQ29sbGF0b3I6OmZpbmlzaENyZWF0
aW9uKFZNJiB2bQogICAgIEFTU0VSVChpbmhlcml0cyh2bSwgaW5mbygpKSk7CiB9CiAKLXZvaWQg
SW50bENvbGxhdG9yOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZp
c2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBJbnRsQ29sbGF0b3I6OnZp
c2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEludGxD
b2xsYXRvciogdGhpc09iamVjdCA9IGpzQ2FzdDxJbnRsQ29sbGF0b3IqPihjZWxsKTsKICAgICBB
U1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC03NSw2ICs3
Niw4IEBAIHZvaWQgSW50bENvbGxhdG9yOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCoKICAgICB2aXNp
dG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2JvdW5kQ29tcGFyZSk7CiB9CiAKK0RFRklORV9WSVNJ
VF9DSElMRFJFTihJbnRsQ29sbGF0b3IpOworCiBWZWN0b3I8U3RyaW5nPiBJbnRsQ29sbGF0b3I6
OnNvcnRMb2NhbGVEYXRhKGNvbnN0IFN0cmluZyYgbG9jYWxlLCBSZWxldmFudEV4dGVuc2lvbktl
eSBrZXkpCiB7CiAgICAgLy8gOS4xIEludGVybmFsIHNsb3RzIG9mIFNlcnZpY2UgQ29uc3RydWN0
b3JzICYgMTAuMi4zIEludGVybmFsIHNsb3RzIChFQ01BLTQwMiAyLjApCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsQ29sbGF0b3IuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsQ29sbGF0b3IuaAkocmV2aXNpb24gMjY4MDg2
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bENvbGxhdG9yLmgJKHdvcmtp
bmcgY29weSkKQEAgLTgwLDcgKzgwLDggQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBJbnRsQ29s
bGF0b3IoVk0mLCBTdHJ1Y3R1cmUqKTsKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7Ci0g
ICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAg
IERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CisvLyAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVu
KEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CiAKICAgICBib29sIHVwZGF0ZUNhbkRvQVNDSUlVQ0FE
VUNFVENvbXBhcmlzb24oKSBjb25zdDsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSW50bERhdGVUaW1lRm9ybWF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9JbnRsRGF0ZVRpbWVGb3JtYXQuY3BwCShyZXZpc2lvbiAyNjgwODYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsRGF0ZVRpbWVGb3JtYXQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC03MCw3ICs3MCw4IEBAIHZvaWQgSW50bERhdGVUaW1lRm9ybWF0
OjpmaW5pc2hDcmVhdGlvbigKICAgICBBU1NFUlQoaW5oZXJpdHModm0sIGluZm8oKSkpOwogfQog
Ci12b2lkIEludGxEYXRlVGltZUZvcm1hdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSW50
bERhdGVUaW1lRm9ybWF0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlz
aXRvcikKIHsKICAgICBJbnRsRGF0ZVRpbWVGb3JtYXQqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SW50
bERhdGVUaW1lRm9ybWF0Kj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0
aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtODAsNiArODEsOCBAQCB2b2lkIEludGxEYXRlVGltZUZv
cm1hdDo6dmlzaXRDaGlsZHJlbihKCiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9i
b3VuZEZvcm1hdCk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihJbnRsRGF0ZVRpbWVGb3Jt
YXQpOworCiB2b2lkIEludGxEYXRlVGltZUZvcm1hdDo6c2V0Qm91bmRGb3JtYXQoVk0mIHZtLCBK
U0JvdW5kRnVuY3Rpb24qIGZvcm1hdCkKIHsKICAgICBtX2JvdW5kRm9ybWF0LnNldCh2bSwgdGhp
cywgZm9ybWF0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxEYXRl
VGltZUZvcm1hdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0ludGxEYXRlVGltZUZvcm1hdC5oCShyZXZpc2lvbiAyNjgwODYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9JbnRsRGF0ZVRpbWVGb3JtYXQuaAkod29ya2luZyBjb3B5KQpAQCAt
NzIsNyArNzIsOCBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIEludGxEYXRlVGltZUZvcm1hdChW
TSYsIFN0cnVjdHVyZSopOwogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKLSAgICBzdGF0
aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFS
RV9WSVNJVF9DSElMRFJFTjsKKy8vICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiwgU2xvdFZpc2l0b3ImKTsKIAogICAgIHN0YXRpYyBWZWN0b3I8U3RyaW5nPiBsb2NhbGVEYXRh
KGNvbnN0IFN0cmluZyYsIFJlbGV2YW50RXh0ZW5zaW9uS2V5KTsKIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bExvY2FsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bExvY2FsZS5jcHAJKHJldmlzaW9uIDI2ODA4NikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxMb2NhbGUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC01OCw3ICs1OCw4IEBAIHZvaWQgSW50bExvY2FsZTo6ZmluaXNoQ3JlYXRpb24o
Vk0mIHZtKQogICAgIEFTU0VSVChpbmhlcml0cyh2bSwgaW5mbygpKSk7CiB9CiAKLXZvaWQgSW50
bExvY2FsZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9y
KQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSW50bExvY2FsZTo6dmlzaXRDaGls
ZHJlbihKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0byogdGhpc09i
amVjdCA9IGpzQ2FzdDxJbnRsTG9jYWxlKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9J
TkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNjYsNiArNjcsOCBAQCB2b2lkIEludGxM
b2NhbGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjCiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0
aGlzT2JqZWN0LCB2aXNpdG9yKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEludGxMb2Nh
bGUpOworCiBjbGFzcyBMb2NhbGVJREJ1aWxkZXIgZmluYWwgewogcHVibGljOgogICAgIGJvb2wg
aW5pdGlhbGl6ZShjb25zdCBTdHJpbmcmKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0ludGxMb2NhbGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9JbnRsTG9jYWxlLmgJKHJldmlzaW9uIDI2ODA4NikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0ludGxMb2NhbGUuaAkod29ya2luZyBjb3B5KQpAQCAtNzEsNyArNzEs
OCBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIEludGxMb2NhbGUoVk0mLCBTdHJ1Y3R1cmUqKTsK
ICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGls
ZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47
CisvLyAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7
CiAKICAgICBTdHJpbmcga2V5d29yZFZhbHVlKEFTQ0lJTGl0ZXJhbCwgYm9vbCBpc0Jvb2xlYW4g
PSBmYWxzZSkgY29uc3Q7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lu
dGxOdW1iZXJGb3JtYXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0ludGxOdW1iZXJGb3JtYXQuY3BwCShyZXZpc2lvbiAyNjgwODYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTnVtYmVyRm9ybWF0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNzMsNyArNzMsOCBAQCB2b2lkIEludGxOdW1iZXJGb3JtYXQ6OmZpbmlzaENyZWF0aW9u
KFZNCiAgICAgQVNTRVJUKGluaGVyaXRzKHZtLCBpbmZvKCkpKTsKIH0KIAotdm9pZCBJbnRsTnVt
YmVyRm9ybWF0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0
b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBJbnRsTnVtYmVyRm9ybWF0Ojp2
aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBJbnRs
TnVtYmVyRm9ybWF0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEludGxOdW1iZXJGb3JtYXQqPihjZWxs
KTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBA
IC04Myw2ICs4NCw4IEBAIHZvaWQgSW50bE51bWJlckZvcm1hdDo6dmlzaXRDaGlsZHJlbihKU0MK
ICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2JvdW5kRm9ybWF0KTsKIH0KIAorREVG
SU5FX1ZJU0lUX0NISUxEUkVOKEludGxOdW1iZXJGb3JtYXQpOworCiBWZWN0b3I8U3RyaW5nPiBJ
bnRsTnVtYmVyRm9ybWF0Ojpsb2NhbGVEYXRhKGNvbnN0IFN0cmluZyYgbG9jYWxlLCBSZWxldmFu
dEV4dGVuc2lvbktleSBrZXkpCiB7CiAgICAgLy8gOS4xIEludGVybmFsIHNsb3RzIG9mIFNlcnZp
Y2UgQ29uc3RydWN0b3JzICYgMTEuMi4zIEludGVybmFsIHNsb3RzIChFQ01BLTQwMiAyLjApCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTnVtYmVyRm9ybWF0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE51bWJlckZvcm1h
dC5oCShyZXZpc2lvbiAyNjgwODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9J
bnRsTnVtYmVyRm9ybWF0LmgJKHdvcmtpbmcgY29weSkKQEAgLTk2LDcgKzk2LDggQEAgcHVibGlj
OgogcHJpdmF0ZToKICAgICBJbnRsTnVtYmVyRm9ybWF0KFZNJiwgU3RydWN0dXJlKik7CiAgICAg
dm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOwotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4o
SlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOworLy8g
ICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwogCiAg
ICAgc3RhdGljIFZlY3RvcjxTdHJpbmc+IGxvY2FsZURhdGEoY29uc3QgU3RyaW5nJiwgUmVsZXZh
bnRFeHRlbnNpb25LZXkpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9J
bnRsUGx1cmFsUnVsZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0ludGxQbHVyYWxSdWxlcy5jcHAJKHJldmlzaW9uIDI2ODA4NikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxQbHVyYWxSdWxlcy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTYxLDcgKzYxLDggQEAgdm9pZCBJbnRsUGx1cmFsUnVsZXM6OmZpbmlzaENyZWF0aW9uKFZN
JgogICAgIEFTU0VSVChpbmhlcml0cyh2bSwgaW5mbygpKSk7CiB9CiAKLXZvaWQgSW50bFBsdXJh
bFJ1bGVzOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3Ip
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBJbnRsUGx1cmFsUnVsZXM6OnZpc2l0
Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEludGxQbHVy
YWxSdWxlcyogdGhpc09iamVjdCA9IGpzQ2FzdDxJbnRsUGx1cmFsUnVsZXMqPihjZWxsKTsKICAg
ICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC02OSw2
ICs3MCw4IEBAIHZvaWQgSW50bFBsdXJhbFJ1bGVzOjp2aXNpdENoaWxkcmVuKEpTQ2UKICAgICBC
YXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwogfQogCitERUZJTkVfVklT
SVRfQ0hJTERSRU4oSW50bFBsdXJhbFJ1bGVzKTsKKwogVmVjdG9yPFN0cmluZz4gSW50bFBsdXJh
bFJ1bGVzOjpsb2NhbGVEYXRhKGNvbnN0IFN0cmluZyYsIFJlbGV2YW50RXh0ZW5zaW9uS2V5KQog
ewogICAgIHJldHVybiB7IH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9J
bnRsUGx1cmFsUnVsZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9JbnRsUGx1cmFsUnVsZXMuaAkocmV2aXNpb24gMjY4MDg2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSW50bFBsdXJhbFJ1bGVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTY2
LDcgKzY2LDggQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBJbnRsUGx1cmFsUnVsZXMoVk0mLCBT
dHJ1Y3R1cmUqKTsKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7Ci0gICAgc3RhdGljIHZv
aWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklT
SVRfQ0hJTERSRU47CisvLyAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNs
b3RWaXNpdG9yJik7CiAKICAgICBzdGF0aWMgVmVjdG9yPFN0cmluZz4gbG9jYWxlRGF0YShjb25z
dCBTdHJpbmcmLCBSZWxldmFudEV4dGVuc2lvbktleSk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0ludGxSZWxhdGl2ZVRpbWVGb3JtYXQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxSZWxhdGl2ZVRpbWVGb3JtYXQuY3Bw
CShyZXZpc2lvbiAyNjgwODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRs
UmVsYXRpdmVUaW1lRm9ybWF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjIsNyArNjIsOCBAQCB2
b2lkIEludGxSZWxhdGl2ZVRpbWVGb3JtYXQ6OmZpbmlzaENyZWF0CiAgICAgQVNTRVJUKGluaGVy
aXRzKHZtLCBpbmZvKCkpKTsKIH0KIAotdm9pZCBJbnRsUmVsYXRpdmVUaW1lRm9ybWF0Ojp2aXNp
dENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0
eXBlbmFtZSBWaXNpdG9yPgordm9pZCBJbnRsUmVsYXRpdmVUaW1lRm9ybWF0Ojp2aXNpdENoaWxk
cmVuKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBhdXRvKiB0aGlzT2Jq
ZWN0ID0ganNDYXN0PEludGxSZWxhdGl2ZVRpbWVGb3JtYXQqPihjZWxsKTsKICAgICBBU1NFUlRf
R0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC03MCw2ICs3MSw4IEBA
IHZvaWQgSW50bFJlbGF0aXZlVGltZUZvcm1hdDo6dmlzaXRDaGlsZHIKICAgICBCYXNlOjp2aXNp
dENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERS
RU4oSW50bFJlbGF0aXZlVGltZUZvcm1hdCk7CisKIFZlY3RvcjxTdHJpbmc+IEludGxSZWxhdGl2
ZVRpbWVGb3JtYXQ6OmxvY2FsZURhdGEoY29uc3QgU3RyaW5nJiBsb2NhbGUsIFJlbGV2YW50RXh0
ZW5zaW9uS2V5IGtleSkKIHsKICAgICBBU1NFUlRfVU5VU0VEKGtleSwga2V5ID09IFJlbGV2YW50
RXh0ZW5zaW9uS2V5OjpOdSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9J
bnRsUmVsYXRpdmVUaW1lRm9ybWF0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSW50bFJlbGF0aXZlVGltZUZvcm1hdC5oCShyZXZpc2lvbiAyNjgwODYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsUmVsYXRpdmVUaW1lRm9ybWF0LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTY0LDcgKzY0LDggQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBJ
bnRsUmVsYXRpdmVUaW1lRm9ybWF0KFZNJiwgU3RydWN0dXJlKik7CiAgICAgdm9pZCBmaW5pc2hD
cmVhdGlvbihWTSYpOwotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xv
dFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOworLy8gICAgc3RhdGljIHZv
aWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwogCiAgICAgc3RhdGljIFZl
Y3RvcjxTdHJpbmc+IGxvY2FsZURhdGEoY29uc3QgU3RyaW5nJiwgUmVsZXZhbnRFeHRlbnNpb25L
ZXkpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsU2VnbWVudEl0
ZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9J
bnRsU2VnbWVudEl0ZXJhdG9yLmNwcAkocmV2aXNpb24gMjY4MDg2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSW50bFNlZ21lbnRJdGVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTY0LDEzICs2NCwxNiBAQCB2b2lkIEludGxTZWdtZW50SXRlcmF0b3I6OmZpbmlzaENyZWF0
aW9uCiAgICAgbV9zdHJpbmcuc2V0KHZtLCB0aGlzLCBzdHJpbmcpOwogfQogCi12b2lkIEludGxT
ZWdtZW50SXRlcmF0b3I6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYg
dmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEludGxTZWdtZW50SXRl
cmF0b3I6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewog
ICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SW50bFNlZ21lbnRJdGVyYXRvcio+KGNlbGwp
OwogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CiAgICAgdmlz
aXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9zdHJpbmcpOwogfQogCitERUZJTkVfVklTSVRfQ0hJ
TERSRU4oSW50bFNlZ21lbnRJdGVyYXRvcik7CisKIEpTT2JqZWN0KiBJbnRsU2VnbWVudEl0ZXJh
dG9yOjpuZXh0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCiB7CiAgICAgVk0mIHZtID0g
Z2xvYmFsT2JqZWN0LT52bSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SW50bFNlZ21lbnRJdGVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0ludGxTZWdtZW50SXRlcmF0b3IuaAkocmV2aXNpb24gMjY4MDg2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFNlZ21lbnRJdGVyYXRvci5oCSh3b3JraW5n
IGNvcHkpCkBAIC01Myw3ICs1Myw4IEBAIHB1YmxpYzoKIAogICAgIEpTT2JqZWN0KiBuZXh0KEpT
R2xvYmFsT2JqZWN0Kik7CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCos
IFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKKy8vICAgIHN0YXRp
YyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKIAogcHJpdmF0ZToK
ICAgICBJbnRsU2VnbWVudEl0ZXJhdG9yKFZNJiwgU3RydWN0dXJlKiwgc3RkOjp1bmlxdWVfcHRy
PFVCcmVha0l0ZXJhdG9yLCBVQnJlYWtJdGVyYXRvckRlbGV0ZXI+JiYsIEJveDxWZWN0b3I8VUNo
YXI+PiYmLCBJbnRsU2VnbWVudGVyOjpHcmFudWxhcml0eSk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9JbnRsU2VnbWVudHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxTZWdtZW50cy5jcHAJKHJldmlzaW9uIDI2ODA4NikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxTZWdtZW50cy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEwOSwxMSArMTA5LDE0IEBAIEpTT2JqZWN0KiBJbnRsU2VnbWVudHM6OmNy
ZWF0ZVNlZ21lbnRJdGUKICAgICByZXR1cm4gSW50bFNlZ21lbnRJdGVyYXRvcjo6Y3JlYXRlKHZt
LCBnbG9iYWxPYmplY3QtPnNlZ21lbnRJdGVyYXRvclN0cnVjdHVyZSgpLCBXVEZNb3ZlKHNlZ21l
bnRlciksIG1fYnVmZmVyLCBtX3N0cmluZy5nZXQoKSwgbV9ncmFudWxhcml0eSk7CiB9CiAKLXZv
aWQgSW50bFNlZ21lbnRzOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3Im
IHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBJbnRsU2VnbWVudHM6
OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGF1
dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SW50bFNlZ21lbnRzKj4oY2VsbCk7CiAgICAgQmFzZTo6
dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKICAgICB2aXNpdG9yLmFwcGVuZCh0
aGlzT2JqZWN0LT5tX3N0cmluZyk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihJbnRsU2Vn
bWVudHMpOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0ludGxTZWdtZW50cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0ludGxTZWdtZW50cy5oCShyZXZpc2lvbiAyNjgwODYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsU2VnbWVudHMuaAkod29ya2luZyBjb3B5KQpAQCAt
NTQsNyArNTQsOCBAQCBwdWJsaWM6CiAgICAgSlNWYWx1ZSBjb250YWluaW5nKEpTR2xvYmFsT2Jq
ZWN0KiwgSlNWYWx1ZSBpbmRleFZhbHVlKTsKICAgICBKU09iamVjdCogY3JlYXRlU2VnbWVudEl0
ZXJhdG9yKEpTR2xvYmFsT2JqZWN0Kik7CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVu
KEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKKy8v
ICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKIAog
cHJpdmF0ZToKICAgICBJbnRsU2VnbWVudHMoVk0mLCBTdHJ1Y3R1cmUqLCBzdGQ6OnVuaXF1ZV9w
dHI8VUJyZWFrSXRlcmF0b3IsIFVCcmVha0l0ZXJhdG9yRGVsZXRlcj4mJiwgQm94PFZlY3RvcjxV
Q2hhcj4+JiYsIEludGxTZWdtZW50ZXI6OkdyYW51bGFyaXR5KTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5jcHAJKHJldmlz
aW9uIDI2ODA4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZm
ZXJWaWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU1LDcgKzE1NSw4IEBAIHZvaWQgSlNBcnJh
eUJ1ZmZlclZpZXc6OmZpbmlzaENyZWF0aW9uKFYKICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOwogfQogCi12b2lkIEpTQXJyYXlCdWZmZXJWaWV3Ojp2aXNpdENoaWxkcmVuKEpTQ2Vs
bCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
Pgordm9pZCBKU0FycmF5QnVmZmVyVmlldzo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFZp
c2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNBcnJheUJ1ZmZlclZpZXcqIHRoaXNPYmplY3QgPSBq
c0Nhc3Q8SlNBcnJheUJ1ZmZlclZpZXcqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lO
SEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC0xNjksNiArMTcwLDggQEAgdm9pZCBKU0Fy
cmF5QnVmZmVyVmlldzo6dmlzaXRDaGlsZHJlbihKUwogICAgIH0KIH0KIAorREVGSU5FX1ZJU0lU
X0NISUxEUkVOKEpTQXJyYXlCdWZmZXJWaWV3KTsKKwogYm9vbCBKU0FycmF5QnVmZmVyVmlldzo6
cHV0KAogICAgIEpTQ2VsbCogY2VsbCwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUHJv
cGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwKICAgICBQdXRQcm9wZXJ0eVNs
b3QmIHNsb3QpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVm
ZmVyVmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
QXJyYXlCdWZmZXJWaWV3LmgJKHJldmlzaW9uIDI2ODA4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3LmgJKHdvcmtpbmcgY29weSkKQEAgLTE3Miw3
ICsxNzIsOCBAQCBwcm90ZWN0ZWQ6CiAgICAgCiAgICAgc3RhdGljIGJvb2wgcHV0KEpTQ2VsbCos
IEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBQdXRQcm9wZXJ0eVNsb3Qm
KTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3Im
KTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOworLy8gICAgc3RhdGljIHZvaWQgdmlzaXRD
aGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwogICAgIAogcHVibGljOgogICAgIFR5cGVk
QXJyYXlNb2RlIG1vZGUoKSBjb25zdCB7IHJldHVybiBtX21vZGU7IH0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlJdGVyYXRvci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUl0ZXJhdG9yLmNwcAkocmV2aXNp
b24gMjY4MDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUl0ZXJh
dG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjgsMTEgKzY4LDE0IEBAIHZvaWQgSlNBcnJheUl0
ZXJhdG9yOjpmaW5pc2hDcmVhdGlvbihWTSYKICAgICAgICAgQmFzZTo6aW50ZXJuYWxGaWVsZChp
bmRleCkuc2V0KHZtLCB0aGlzLCB2YWx1ZXNbaW5kZXhdKTsKIH0KIAotdm9pZCBKU0FycmF5SXRl
cmF0b3I6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikK
K3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTQXJyYXlJdGVyYXRvcjo6dmlzaXRD
aGlsZHJlbihKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0byogdGhp
c09iamVjdCA9IGpzQ2FzdDxKU0FycmF5SXRlcmF0b3IqPihjZWxsKTsKICAgICBBU1NFUlRfR0Nf
T0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAgICAgQmFzZTo6dmlzaXRDaGls
ZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpT
QXJyYXlJdGVyYXRvcik7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUl0ZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUl0ZXJhdG9yLmgJKHJldmlzaW9uIDI2ODA4
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlJdGVyYXRvci5oCSh3
b3JraW5nIGNvcHkpCkBAIC03OCw3ICs3OCw4IEBAIHB1YmxpYzoKIAogICAgIERFQ0xBUkVfSU5G
TzsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3Im
KTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOworLy8gICAgc3RhdGljIHZvaWQgdmlzaXRD
aGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwogCiBwcml2YXRlOgogICAgIEpTQXJyYXlJ
dGVyYXRvcihWTSYsIFN0cnVjdHVyZSopOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNBc3luY0dlbmVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNBc3luY0dlbmVyYXRvci5jcHAJKHJldmlzaW9uIDI2ODA4NikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXN5bmNHZW5lcmF0b3IuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC01OSwxMSArNTksMTQgQEAgdm9pZCBKU0FzeW5jR2VuZXJhdG9yOjpmaW5p
c2hDcmVhdGlvbihWTQogICAgICAgICBpbnRlcm5hbEZpZWxkKGluZGV4KS5zZXQodm0sIHRoaXMs
IHZhbHVlc1tpbmRleF0pOwogfQogCi12b2lkIEpTQXN5bmNHZW5lcmF0b3I6OnZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1l
IFZpc2l0b3I+Cit2b2lkIEpTQXN5bmNHZW5lcmF0b3I6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBj
ZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8
SlNBc3luY0dlbmVyYXRvcio+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMo
dGhpc09iamVjdCwgaW5mbygpKTsKICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3Qs
IHZpc2l0b3IpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNBc3luY0dlbmVyYXRvcik7
CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNBc3luY0dlbmVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQXN5bmNHZW5lcmF0b3IuaAkocmV2aXNpb24gMjY4MDg2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBc3luY0dlbmVyYXRvci5oCSh3b3JraW5nIGNvcHkp
CkBAIC05NSw3ICs5NSw4IEBAIHB1YmxpYzoKIAogICAgIERFQ0xBUkVfRVhQT1JUX0lORk87CiAK
LSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7Cisg
ICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKKy8vICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKIAogcHJpdmF0ZToKICAgICBKU0FzeW5jR2VuZXJh
dG9yKFZNJiwgU3RydWN0dXJlKik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0JpZ0ludC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNCaWdJbnQuY3BwCShyZXZpc2lvbiAyNjgwODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0JpZ0ludC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY3LDcgKzY3LDggQEAg
SlNCaWdJbnQ6OkpTQmlnSW50KFZNJiB2bSwgU3RydWN0dXJlKiBzdAogICAgICwgbV9kYXRhKHZt
LCB0aGlzLCBkYXRhLCBsZW5ndGgpCiB7IH0KIAotdm9pZCBKU0JpZ0ludDo6dmlzaXRDaGlsZHJl
bihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUg
VmlzaXRvcj4KK3ZvaWQgSlNCaWdJbnQ6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBWaXNp
dG9yJiB2aXNpdG9yKQogewogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNCaWdJbnQq
PihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8o
KSk7CkBAIC03Niw2ICs3Nyw4IEBAIHZvaWQgSlNCaWdJbnQ6OnZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiBjZWwKICAgICAgICAgdmlzaXRvci5tYXJrQXV4aWxpYXJ5KGRhdGEpOwogfQogCitERUZJTkVf
VklTSVRfQ0hJTERSRU4oSlNCaWdJbnQpOworCiB2b2lkIEpTQmlnSW50Ojppbml0aWFsaXplKElu
aXRpYWxpemF0aW9uVHlwZSBpbml0VHlwZSkKIHsKICAgICBpZiAoaW5pdFR5cGUgPT0gSW5pdGlh
bGl6YXRpb25UeXBlOjpXaXRoWmVybykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTQmlnSW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNCaWdJbnQuaAkocmV2aXNpb24gMjY4MDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNCaWdJbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNTAsNyArNTAsOCBAQCBwdWJs
aWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6
OlN0cnVjdHVyZUZsYWdzIHwgU3RydWN0dXJlSXNJbW1vcnRhbCB8IE92ZXJyaWRlc1RvVGhpczsK
ICAgICBmcmllbmQgY2xhc3MgQ2FjaGVkQmlnSW50OwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRD
aGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERS
RU47CisvLyAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9y
Jik7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3M+CiAg
ICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JvdW5kRnVuY3Rpb24uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQm91bmRGdW5jdGlvbi5jcHAJKHJldmlz
aW9uIDI2ODA4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQm91bmRGdW5j
dGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0OSw3ICsyNDksOCBAQCB2b2lkIEpTQm91bmRG
dW5jdGlvbjo6ZmluaXNoQ3JlYXRpb24oVk0mCiAgICAgQVNTRVJUKGluaGVyaXRzKHZtLCBpbmZv
KCkpKTsKIH0KIAotdm9pZCBKU0JvdW5kRnVuY3Rpb246OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBj
ZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2
b2lkIEpTQm91bmRGdW5jdGlvbjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFZpc2l0b3Im
IHZpc2l0b3IpCiB7CiAgICAgSlNCb3VuZEZ1bmN0aW9uKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpT
Qm91bmRGdW5jdGlvbio+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhp
c09iamVjdCwgaW5mbygpKTsKQEAgLTI2MSw0ICsyNjIsNiBAQCB2b2lkIEpTQm91bmRGdW5jdGlv
bjo6dmlzaXRDaGlsZHJlbihKU0NlCiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9u
YW1lTWF5QmVOdWxsKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTQm91bmRGdW5jdGlv
bik7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNCb3VuZEZ1bmN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNCb3VuZEZ1bmN0aW9uLmgJKHJldmlzaW9uIDI2ODA4NikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQm91bmRGdW5jdGlvbi5oCSh3b3JraW5nIGNvcHkp
CkBAIC04NCw3ICs4NCw4IEBAIHByaXZhdGU6CiAgICAgSlNCb3VuZEZ1bmN0aW9uKFZNJiwgTmF0
aXZlRXhlY3V0YWJsZSosIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKiwgSlNPYmplY3QqIHRh
cmdldEZ1bmN0aW9uLCBKU1ZhbHVlIGJvdW5kVGhpcywgSlNJbW11dGFibGVCdXR0ZXJmbHkqIGJv
dW5kQXJncywgSlNTdHJpbmcqIG5hbWVNYXlCZU51bGwsIGRvdWJsZSBsZW5ndGgpOwogCiAgICAg
dm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOwotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4o
SlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOworLy8g
ICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwogCiAg
ICAgV3JpdGVCYXJyaWVyPEpTT2JqZWN0PiBtX3RhcmdldEZ1bmN0aW9uOwogICAgIFdyaXRlQmFy
cmllcjxVbmtub3duPiBtX2JvdW5kVGhpczsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTQ2FsbGVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0NhbGxlZS5jcHAJKHJldmlzaW9uIDI2ODA4NikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTQ2FsbGVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTAsNyArNTAs
OCBAQCB2b2lkIEpTQ2FsbGVlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCiAgICAgQVNTRVJUKGlu
aGVyaXRzKHZtLCBpbmZvKCkpKTsKIH0KIAotdm9pZCBKU0NhbGxlZTo6dmlzaXRDaGlsZHJlbihK
U0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlz
aXRvcj4KK3ZvaWQgSlNDYWxsZWU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBWaXNpdG9y
JiB2aXNpdG9yKQogewogICAgIEpTQ2FsbGVlKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQ2FsbGVl
Kj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZv
KCkpOwpAQCAtNTksNCArNjAsNiBAQCB2b2lkIEpTQ2FsbGVlOjp2aXNpdENoaWxkcmVuKEpTQ2Vs
bCogY2VsCiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9zY29wZSk7CiB9CiAKK0RF
RklORV9WSVNJVF9DSElMRFJFTihKU0NhbGxlZSk7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDYWxsZWUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NhbGxlZS5oCShyZXZpc2lvbiAyNjgw
ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NhbGxlZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xMDAsNyArMTAwLDggQEAgcHJvdGVjdGVkOgogICAgIHZvaWQgZmluaXNoQ3Jl
YXRpb24oVk0mKTsKICAgICB1c2luZyBCYXNlOjpmaW5pc2hDcmVhdGlvbjsKIAotICAgIHN0YXRp
YyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJF
X1ZJU0lUX0NISUxEUkVOOworLy8gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwq
LCBTbG90VmlzaXRvciYpOwogCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNl
dHNFeHRyYWN0b3I7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAko
cmV2aXNpb24gMjY4MDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxs
LmgJKHdvcmtpbmcgY29weSkKQEAgLTc1LDYgKzc1LDcwIEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+
IHZvaWQqIHRyeUFsbG9jYXRlQ2UKICAgICBwdWJsaWM6ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICBzdGF0
aWMgY29uc3RleHByIGNvbnN0IDo6SlNDOjpDbGFzc0luZm8qIGluZm8oKSB7IHJldHVybiAmc19p
bmZvOyB9CiAKKyNkZWZpbmUgREVDTEFSRV9VTlVTRURfU1RSVUNUX0VYUEFOREVSKG5hbWVfXywg
Y291bnRlcl9fKSBzdHJ1Y3QgVW51c2VkIyNuYW1lX18jI1N0cnVjdFNvV2VDYW5IYXZlQVNlbWlj
b2xvbiMjY291bnRlcl9fIHsgfQorI2RlZmluZSBERUNMQVJFX1VOVVNFRF9TVFJVQ1QobmFtZV9f
LCBjb3VudGVyX18pIERFQ0xBUkVfVU5VU0VEX1NUUlVDVF9FWFBBTkRFUihuYW1lX18sIGNvdW50
ZXJfXykKKworLy8jZGVmaW5lIERFQ0xBUkVfVklTSVRfQ0hJTERSRU5fSU1QTChtb2RpZmllcl9f
KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisvLyAgICBwcm90ZWN0ZWQ6
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKKy8vICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiBzdGF0
aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFZpc2l0b3ImKTsgICAgXAorLy8gICAgcHVi
bGljOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCisvLyAgICAgICAgbW9kaWZpZXJfXyBzdGF0aWMgdm9pZCB2
aXNpdENoaWxkcmVuRm9yU2xvdFZpc2l0b3IoSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsgIFwKKy8v
ICAgICAgICBtb2RpZmllcl9fIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW5Gb3JEZWJ1Z1Nsb3RW
aXNpdG9yKEpTQ2VsbCosIERlYnVnU2xvdFZpc2l0b3ImKQorLy8KKy8vI2RlZmluZSBERUNMQVJF
X1ZJU0lUX0NISUxEUkVOIERFQ0xBUkVfVklTSVRfQ0hJTERSRU5fSU1QTCgpCisvLyNkZWZpbmUg
REVDTEFSRV9FWFBPUlRfVklTSVRfQ0hJTERSRU4gREVDTEFSRV9WSVNJVF9DSElMRFJFTl9JTVBM
KEpTX0VYUE9SVF9QUklWQVRFKQorLy8jZGVmaW5lIERFQ0xBUkVfSU5MSU5FX1ZJU0lUX0NISUxE
UkVOIERFQ0xBUkVfVklTSVRfQ0hJTERSRU5fSU1QTChpbmxpbmUpCisKKyNkZWZpbmUgREVDTEFS
RV9WSVNJVF9DSElMRFJFTiBcCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gc3RhdGlj
IHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBWaXNpdG9yJikKKyNkZWZpbmUgREVDTEFSRV9F
WFBPUlRfVklTSVRfQ0hJTERSRU4gREVDTEFSRV9WSVNJVF9DSElMRFJFTgorI2RlZmluZSBERUNM
QVJFX0lOTElORV9WSVNJVF9DSElMRFJFTiBERUNMQVJFX1ZJU0lUX0NISUxEUkVOCisKKy8vI2Rl
ZmluZSBERUZJTkVfVklTSVRfQ0hJTERSRU5fSU1QTChDbGFzc05hbWUsIG1vZGlmaWVyX18pIFwK
Ky8vICAgIG1vZGlmaWVyICBfXyB2b2lkIENsYXNzTmFtZTo6dmlzaXRDaGlsZHJlbkZvclNsb3RW
aXNpdG9yKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsgIENsYXNzTmFtZTo6
dGVtcGxhdGUgdmlzaXRDaGlsZHJlbihjZWxsLCB2aXNpdG9yKTsgfSBcCisvLyAgICBtb2RpZmll
cl9fIHZvaWQgQ2xhc3NOYW1lOjp2aXNpdENoaWxkcmVuRm9yRGVidWdTbG90VmlzaXRvcihKU0Nl
bGwqIGNlbGwsIERlYnVnU2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsgIENsYXNzTmFtZTo6dGVtcGxh
dGUgdmlzaXRDaGlsZHJlbihjZWxsLCB2aXNpdG9yKTsgfSBcCisvLyAgICBERUNMQVJFX1VOVVNF
RF9TVFJVQ1QoVmlzaXRDaGlsZHJlbiwgX19DT1VOVEVSX18pCisvLworLy8jZGVmaW5lIERFRklO
RV9WSVNJVF9DSElMRFJFTihDbGFzc05hbWUpICBERUZJTkVfVklTSVRfQ0hJTERSRU5fSU1QTChD
bGFzc05hbWUsICkKKy8vI2RlZmluZSBERUZJTkVfSU5MSU5FX1ZJU0lUX0NISUxEUkVOKENsYXNz
TmFtZSkgREVGSU5FX1ZJU0lUX0NISUxEUkVOX0lNUEwoQ2xhc3NOYW1lLCBpbmxpbmUpCisKKyNk
ZWZpbmUgREVGSU5FX1ZJU0lUX0NISUxEUkVOX0lNUEwoQ2xhc3NOYW1lLCBtb2RpZmllcl9fKSBc
CisgICAgREVDTEFSRV9VTlVTRURfU1RSVUNUKFZpc2l0Q2hpbGRyZW4sIF9fQ09VTlRFUl9fKQor
CisjZGVmaW5lIERFRklORV9WSVNJVF9DSElMRFJFTihDbGFzc05hbWUpICBERUZJTkVfVklTSVRf
Q0hJTERSRU5fSU1QTChDbGFzc05hbWUsICkKKyNkZWZpbmUgREVGSU5FX0lOTElORV9WSVNJVF9D
SElMRFJFTihDbGFzc05hbWUpIERFRklORV9WSVNJVF9DSElMRFJFTl9JTVBMKENsYXNzTmFtZSwg
aW5saW5lKQorCisvLyNkZWZpbmUgREVDTEFSRV9WSVNJVF9PVVRQVVRfQ09OU1RSQUlOVFNfSU1Q
TChtb2RpZmllcl9fKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLy8gICAg
cHJvdGVjdGVkOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy8vICAgICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBWaXNpdG9yPiBzdGF0aWMgdm9pZCB2aXNpdE91dHB1dENvbnN0cmFpbnRzKEpTQ2VsbCos
IFZpc2l0b3ImKTsgICBcCisvLyAgICBwdWJsaWM6ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor
Ly8gICAgICAgIG1vZGlmaWVyX18gc3RhdGljIHZvaWQgdmlzaXRPdXRwdXRDb25zdHJhaW50c0Zv
clNsb3RWaXNpdG9yKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7IFwKKy8vICAgICAgICBtb2RpZmll
cl9fIHN0YXRpYyB2b2lkIHZpc2l0T3V0cHV0Q29uc3RyYWludHNGb3JEZWJ1Z1Nsb3RWaXNpdG9y
KEpTQ2VsbCosIERlYnVnU2xvdFZpc2l0b3ImKQorLy8KKy8vI2RlZmluZSBERUNMQVJFX1ZJU0lU
X09VVFBVVF9DT05TVFJBSU5UUyBERUNMQVJFX1ZJU0lUX09VVFBVVF9DT05TVFJBSU5UU19JTVBM
KCkKKy8vI2RlZmluZSBERUNMQVJFX0VYUE9SVF9WSVNJVF9PVVRQVVRfQ09OU1RSQUlOVFMgREVD
TEFSRV9WSVNJVF9PVVRQVVRfQ09OU1RSQUlOVFNfSU1QTChKU19FWFBPUlRfUFJJVkFURSkKKy8v
I2RlZmluZSBERUNMQVJFX0lOTElORV9WSVNJVF9PVVRQVVRfQ09OU1RSQUlOVFMgREVDTEFSRV9W
SVNJVF9PVVRQVVRfQ09OU1RSQUlOVFNfSU1QTChpbmxpbmUpCisKKyNkZWZpbmUgREVDTEFSRV9W
SVNJVF9PVVRQVVRfQ09OU1RSQUlOVFMgXAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+
IHN0YXRpYyB2b2lkIHZpc2l0T3V0cHV0Q29uc3RyYWludHMoSlNDZWxsKiwgVmlzaXRvciYpCisK
KyNkZWZpbmUgREVDTEFSRV9FWFBPUlRfVklTSVRfT1VUUFVUX0NPTlNUUkFJTlRTIERFQ0xBUkVf
VklTSVRfT1VUUFVUX0NPTlNUUkFJTlRTCisjZGVmaW5lIERFQ0xBUkVfSU5MSU5FX1ZJU0lUX09V
VFBVVF9DT05TVFJBSU5UUyBERUNMQVJFX1ZJU0lUX09VVFBVVF9DT05TVFJBSU5UUworCisvLyNk
ZWZpbmUgREVGSU5FX1ZJU0lUX09VVFBVVF9DT05TVFJBSU5UU19JTVBMKENsYXNzTmFtZSwgbW9k
aWZpZXJfXykgXAorLy8gICAgbW9kaWZpZXJfXyB2b2lkIENsYXNzTmFtZTo6dmlzaXRPdXRwdXRD
b25zdHJhaW50c0ZvclNsb3RWaXNpdG9yKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0
b3IpIHsgIENsYXNzTmFtZTo6dGVtcGxhdGUgdmlzaXRPdXRwdXRDb25zdHJhaW50cyhjZWxsLCB2
aXNpdG9yKTsgfSBcCisvLyAgICBtb2RpZmllcl9fIHZvaWQgQ2xhc3NOYW1lOjp2aXNpdE91dHB1
dENvbnN0cmFpbnRzRm9yRGVidWdTbG90VmlzaXRvcihKU0NlbGwqIGNlbGwsIERlYnVnU2xvdFZp
c2l0b3ImIHZpc2l0b3IpIHsgIENsYXNzTmFtZTo6dGVtcGxhdGUgdmlzaXRPdXRwdXRDb25zdHJh
aW50cyhjZWxsLCB2aXNpdG9yKTsgfSBcCisvLyAgICBERUNMQVJFX1VOVVNFRF9TVFJVQ1QoVmlz
aXRPdXRwdXRDb25zdHJhaW50cywgX19DT1VOVEVSX18pCisvLworLy8jZGVmaW5lIERFRklORV9W
SVNJVF9PVVRQVVRfQ09OU1RSQUlOVFMoQ2xhc3NOYW1lKSBERUZJTkVfVklTSVRfT1VUUFVUX0NP
TlNUUkFJTlRTX0lNUEwoQ2xhc3NOYW1lLCApCisvLyNkZWZpbmUgREVGSU5FX0lOTElORV9WSVNJ
VF9PVVRQVVRfQ09OU1RSQUlOVFMoQ2xhc3NOYW1lKSBERUZJTkVfVklTSVRfT1VUUFVUX0NPTlNU
UkFJTlRTX0lNUEwoQ2xhc3NOYW1lLCBpbmxpbmUpCisKKyNkZWZpbmUgREVGSU5FX1ZJU0lUX09V
VFBVVF9DT05TVFJBSU5UU19JTVBMKENsYXNzTmFtZSwgbW9kaWZpZXJfXykgXAorICAgIERFQ0xB
UkVfVU5VU0VEX1NUUlVDVChWaXNpdE91dHB1dENvbnN0cmFpbnRzLCBfX0NPVU5URVJfXykKKwor
I2RlZmluZSBERUZJTkVfVklTSVRfT1VUUFVUX0NPTlNUUkFJTlRTKENsYXNzTmFtZSkgREVGSU5F
X1ZJU0lUX09VVFBVVF9DT05TVFJBSU5UU19JTVBMKENsYXNzTmFtZSwgKQorI2RlZmluZSBERUZJ
TkVfSU5MSU5FX1ZJU0lUX09VVFBVVF9DT05TVFJBSU5UUyhDbGFzc05hbWUpIERFRklORV9WSVNJ
VF9PVVRQVVRfQ09OU1RSQUlOVFNfSU1QTChDbGFzc05hbWUsIGlubGluZSkKKwogY2xhc3MgSlND
ZWxsIDogcHVibGljIEhlYXBDZWxsIHsKICAgICBmcmllbmQgY2xhc3MgSlNWYWx1ZTsKICAgICBm
cmllbmQgY2xhc3MgTWFya2VkQmxvY2s7CkBAIC0xNjgsOCArMjMyLDEwIEBAIHB1YmxpYzoKICAg
ICBzaXplX3QgZXN0aW1hdGVkU2l6ZUluQnl0ZXMoVk0mKSBjb25zdDsKICAgICBKU19FWFBPUlRf
UFJJVkFURSBzdGF0aWMgc2l6ZV90IGVzdGltYXRlZFNpemUoSlNDZWxsKiwgVk0mKTsKIAotICAg
IHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKLSAgICBz
dGF0aWMgdm9pZCB2aXNpdE91dHB1dENvbnN0cmFpbnRzKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7
CisvLyAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7
CisvLyAgICBzdGF0aWMgdm9pZCB2aXNpdE91dHB1dENvbnN0cmFpbnRzKEpTQ2VsbCosIFNsb3RW
aXNpdG9yJik7CisgICAgREVDTEFSRV9JTkxJTkVfVklTSVRfQ0hJTERSRU47CisgICAgREVDTEFS
RV9JTkxJTkVfVklTSVRfT1VUUFVUX0NPTlNUUkFJTlRTOwogCiAgICAgSlNfRVhQT1JUX1BSSVZB
VEUgc3RhdGljIHZvaWQgYW5hbHl6ZUhlYXAoSlNDZWxsKiwgSGVhcEFuYWx5emVyJik7CiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbElubGluZXMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGxJbmxpbmVzLmgJKHJl
dmlzaW9uIDI2ODA4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbElu
bGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMTQxLDE1ICsxNDEsNDAgQEAgQUxXQVlTX0lOTElO
RSBTdHJ1Y3R1cmUqIEpTQ2VsbDo6c3RydWN0dQogICAgIHJldHVybiB2bS5nZXRTdHJ1Y3R1cmUo
bV9zdHJ1Y3R1cmVJRCk7CiB9CiAKLWlubGluZSB2b2lkIEpTQ2VsbDo6dmlzaXRDaGlsZHJlbihK
U0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlz
aXRvcj4KK2lubGluZSB2b2lkIEpTQ2VsbDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFZp
c2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZChjZWxsLT5z
dHJ1Y3R1cmUodmlzaXRvci52bSgpKSk7CiB9CiAKLWlubGluZSB2b2lkIEpTQ2VsbDo6dmlzaXRP
dXRwdXRDb25zdHJhaW50cyhKU0NlbGwqLCBTbG90VmlzaXRvciYpCitERUZJTkVfSU5MSU5FX1ZJ
U0lUX0NISUxEUkVOKEpTQ2VsbCk7CisKKy8vaW5saW5lIHZvaWQgSlNDZWxsOjp2aXNpdENoaWxk
cmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3sKKy8vICAgIHZpc2l0
Q2hpbGRyZW48U2xvdFZpc2l0b3I+KGNlbGwsIHZpc2l0b3IpOworLy99CisvLworLy9pbmxpbmUg
dm9pZCBKU0NlbGw6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBEZWJ1Z1Nsb3RWaXNpdG9y
JiB2aXNpdG9yKQorLy97CisvLyAgICB2aXNpdENoaWxkcmVuPERlYnVnU2xvdFZpc2l0b3I+KGNl
bGwsIHZpc2l0b3IpOworLy99CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+CitpbmxpbmUg
dm9pZCBKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHMoSlNDZWxsKiwgVmlzaXRvciYpCiB7
CiB9CiAKK0RFRklORV9JTkxJTkVfVklTSVRfT1VUUFVUX0NPTlNUUkFJTlRTKEpTQ2VsbCk7CisK
Ky8vaW5saW5lIHZvaWQgSlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzKEpTQ2VsbCosIFNs
b3RWaXNpdG9yJikKKy8veworLy99CisKKy8vaW5saW5lIHZvaWQgSlNDZWxsOjp2aXNpdE91dHB1
dENvbnN0cmFpbnRzKEpTQ2VsbCosIERlYnVnU2xvdFZpc2l0b3ImKQorLy97CisvL30KKworCiBB
TFdBWVNfSU5MSU5FIFZNJiBDYWxsRnJhbWU6OmRlcHJlY2F0ZWRWTSgpIGNvbnN0CiB7CiAgICAg
SlNDZWxsKiBjYWxsZWUgPSB0aGlzLT5jYWxsZWUoKS5hc0NlbGwoKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ3VzdG9tR2V0dGVyU2V0dGVyRnVuY3Rpb24uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ3VzdG9tR2V0dGVy
U2V0dGVyRnVuY3Rpb24uY3BwCShyZXZpc2lvbiAyNjgwODYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0N1c3RvbUdldHRlclNldHRlckZ1bmN0aW9uLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtODUsNyArODUsOCBAQCBKU0N1c3RvbUdldHRlclNldHRlckZ1bmN0aW9uKiBKU0N1
c3RvbUdlCiAgICAgcmV0dXJuIGZ1bmN0aW9uOwogfQogCi12b2lkIEpTQ3VzdG9tR2V0dGVyU2V0
dGVyRnVuY3Rpb246OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlz
aXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTQ3VzdG9tR2V0dGVyU2V0
dGVyRnVuY3Rpb246OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9y
KQogewogICAgIEpTQ3VzdG9tR2V0dGVyU2V0dGVyRnVuY3Rpb24qIHRoaXNPYmplY3QgPSBqc0Nh
c3Q8SlNDdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbio+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19P
QkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTk0LDYgKzk1LDggQEAgdm9p
ZCBKU0N1c3RvbUdldHRlclNldHRlckZ1bmN0aW9uOjp2aXNpdAogICAgIHZpc2l0b3IuYXBwZW5k
KHRoaXNPYmplY3QtPm1fZ2V0dGVyU2V0dGVyKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVO
KEpTQ3VzdG9tR2V0dGVyU2V0dGVyRnVuY3Rpb24pOworCiB2b2lkIEpTQ3VzdG9tR2V0dGVyU2V0
dGVyRnVuY3Rpb246OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgTmF0aXZlRXhlY3V0YWJsZSogZXhl
Y3V0YWJsZSwgQ3VzdG9tR2V0dGVyU2V0dGVyKiBnZXR0ZXJTZXR0ZXIsIGNvbnN0IFN0cmluZyYg
bmFtZSkKIHsKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSwgZXhlY3V0YWJsZSwgaXNTZXR0
ZXIoKSwgbmFtZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0N1c3Rv
bUdldHRlclNldHRlckZ1bmN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNDdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbi5oCShyZXZpc2lvbiAyNjgw
ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0N1c3RvbUdldHRlclNldHRl
ckZ1bmN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTYzLDcgKzYzLDggQEAgcHVibGljOgogcHJp
dmF0ZToKICAgICBKU0N1c3RvbUdldHRlclNldHRlckZ1bmN0aW9uKFZNJiwgTmF0aXZlRXhlY3V0
YWJsZSosIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKiwgVHlwZSwgY29uc3QgUHJvcGVydHlO
YW1lJik7CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIE5hdGl2ZUV4ZWN1dGFibGUqLCBD
dXN0b21HZXR0ZXJTZXR0ZXIqLCBjb25zdCBTdHJpbmcmKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNp
dENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElM
RFJFTjsKKy8vICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0
b3ImKTsKIAogICAgIFdyaXRlQmFycmllcjxDdXN0b21HZXR0ZXJTZXR0ZXI+IG1fZ2V0dGVyU2V0
dGVyOwogICAgIFR5cGUgbV90eXBlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNGaW5hbGl6YXRpb25SZWdpc3RyeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNGaW5hbGl6YXRpb25SZWdpc3RyeS5jcHAJKHJldmlzaW9uIDI2
ODA4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRmluYWxpemF0aW9uUmVn
aXN0cnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Niw3ICs1Niw4IEBAIHZvaWQgSlNGaW5hbGl6
YXRpb25SZWdpc3RyeTo6ZmluaXNoQ3JlYXQKICAgICBpbnRlcm5hbEZpZWxkKEZpZWxkOjpDYWxs
YmFjaykuc2V0V2l0aG91dFdyaXRlQmFycmllcihjYWxsYmFjayk7CiB9CiAKLXZvaWQgSlNGaW5h
bGl6YXRpb25SZWdpc3RyeTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9y
JiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNGaW5hbGl6YXRp
b25SZWdpc3RyeTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3Ip
CiB7CiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbihjZWxsLCB2aXNpdG9yKTsKIApAQCAtODMsNiAr
ODQsOCBAQCB2b2lkIEpTRmluYWxpemF0aW9uUmVnaXN0cnk6OnZpc2l0Q2hpbGRyCiAgICAgdmlz
aXRvci52bSgpLmhlYXAucmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKHRvdGFsQnVmZmVyU2l6ZXNJ
bkJ5dGVzKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTRmluYWxpemF0aW9uUmVnaXN0
cnkpOworCiB2b2lkIEpTRmluYWxpemF0aW9uUmVnaXN0cnk6OmRlc3Ryb3koSlNDZWxsKiB0YWJs
ZSkKIHsKICAgICBzdGF0aWNfY2FzdDxKU0ZpbmFsaXphdGlvblJlZ2lzdHJ5Kj4odGFibGUpLT5+
SlNGaW5hbGl6YXRpb25SZWdpc3RyeSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNGaW5hbGl6YXRpb25SZWdpc3RyeS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTRmluYWxpemF0aW9uUmVnaXN0cnkuaAkocmV2aXNpb24gMjY4
MDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGaW5hbGl6YXRpb25SZWdp
c3RyeS5oCSh3b3JraW5nIGNvcHkpCkBAIC03MCw3ICs3MCw4IEBAIHB1YmxpYzoKICAgICBERUNM
QVJFX0VYUE9SVF9JTkZPOwogCiAgICAgdm9pZCBmaW5hbGl6ZVVuY29uZGl0aW9uYWxseShWTSYp
OwotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsK
KyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOworLy8gICAgc3RhdGljIHZvaWQgdmlzaXRDaGls
ZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlND
ZWxsKik7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVl
OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmNw
cAkocmV2aXNpb24gMjY4MDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNG
dW5jdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1Miw3ICsyNTIsOCBAQCBjb25zdCBTb3Vy
Y2VDb2RlKiBKU0Z1bmN0aW9uOjpzb3VyY2VDb2RlCiAgICAgcmV0dXJuICZqc0V4ZWN1dGFibGUo
KS0+c291cmNlKCk7CiB9CiAgICAgCi12b2lkIEpTRnVuY3Rpb246OnZpc2l0Q2hpbGRyZW4oSlND
ZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0
b3I+Cit2b2lkIEpTRnVuY3Rpb246OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBWaXNpdG9y
JiB2aXNpdG9yKQogewogICAgIEpTRnVuY3Rpb24qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNGdW5j
dGlvbio+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwg
aW5mbygpKTsKQEAgLTI2MSw2ICsyNjIsOCBAQCB2b2lkIEpTRnVuY3Rpb246OnZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKiBjCiAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZChiaXR3aXNlX2Nhc3Q8
SlNDZWxsKj4oYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4odGhpc09iamVjdC0+bV9leGVjdXRhYmxl
T3JSYXJlRGF0YSkgJiB+cmFyZURhdGFUYWcpKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVO
KEpTRnVuY3Rpb24pOworCiBDYWxsRGF0YSBKU0Z1bmN0aW9uOjpnZXRDYWxsRGF0YShKU0NlbGwq
IGNlbGwpCiB7CiAgICAgLy8gS2VlcCB0aGlzIGZ1bmN0aW9uIE9LIGZvciBpbnZvY2F0aW9uIGZy
b20gY29uY3VycmVudCBjb21waWxlcnMuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0Z1bmN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNGdW5jdGlvbi5oCShyZXZpc2lvbiAyNjgwODYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTE4MCw3ICsxODAs
OCBAQCBwcm90ZWN0ZWQ6CiAKICAgICBzdGF0aWMgYm9vbCBkZWxldGVQcm9wZXJ0eShKU0NlbGwq
LCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSwgRGVsZXRlUHJvcGVydHlTbG90Jik7CiAK
LSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7Cisg
ICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKKy8vICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKIAogcHJpdmF0ZToKICAgICBzdGF0aWMgSlNGdW5j
dGlvbiogY3JlYXRlSW1wbChWTSYgdm0sIEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJsZSwg
SlNTY29wZSogc2NvcGUsIFN0cnVjdHVyZSogc3RydWN0dXJlKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJhdG9yLmNwcAkocmV2aXNpb24gMjY4MDg2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmF0b3IuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC01OSwxMSArNTksMTQgQEAgdm9pZCBKU0dlbmVyYXRvcjo6ZmluaXNoQ3JlYXRp
b24oVk0mIHZtKQogICAgICAgICBpbnRlcm5hbEZpZWxkKGluZGV4KS5zZXQodm0sIHRoaXMsIHZh
bHVlc1tpbmRleF0pOwogfQogCi12b2lkIEpTR2VuZXJhdG9yOjp2aXNpdENoaWxkcmVuKEpTQ2Vs
bCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
Pgordm9pZCBKU0dlbmVyYXRvcjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFZpc2l0b3Im
IHZpc2l0b3IpCiB7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0dlbmVyYXRvcio+
KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygp
KTsKICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwogfQogCitE
RUZJTkVfVklTSVRfQ0hJTERSRU4oSlNHZW5lcmF0b3IpOworCiB9IC8vIG5hbWVzcGFjZSBKU0MK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJhdG9yLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmF0b3IuaAkocmV2
aXNpb24gMjY4MDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmF0
b3IuaAkod29ya2luZyBjb3B5KQpAQCAtOTQsNyArOTQsOCBAQCBwdWJsaWM6CiAKICAgICBERUNM
QVJFX0VYUE9SVF9JTkZPOwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwq
LCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CisvLyAgICBzdGF0
aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CiAKIHByaXZhdGU6
CiAgICAgSlNHZW5lcmF0b3IoVk0mLCBTdHJ1Y3R1cmUqKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXcuaAko
cmV2aXNpb24gMjY4MDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5l
cmljVHlwZWRBcnJheVZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAtMzEyLDcgKzMxMiw4IEBAIHBy
aXZhdGU6CiAgICAgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCosIEpT
R2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOwogCiAg
ICAgc3RhdGljIHNpemVfdCBlc3RpbWF0ZWRTaXplKEpTQ2VsbCosIFZNJik7Ci0gICAgc3RhdGlj
IHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVf
VklTSVRfQ0hJTERSRU47CisvLyAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCos
IFNsb3RWaXNpdG9yJik7CiAKICAgICAvLyBSZXR1cm5zIHRydWUgaWYgc3VjY2Vzc2Z1bCwgYW5k
IGZhbHNlIG9uIGVycm9yOyBpdCB3aWxsIHRocm93IG9uIGVycm9yLgogICAgIHRlbXBsYXRlPHR5
cGVuYW1lIE90aGVyQWRhcHRvcj4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oCShy
ZXZpc2lvbiAyNjgwODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVy
aWNUeXBlZEFycmF5Vmlld0lubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNTEwLDcgKzUxMCw4
IEBAIHNpemVfdCBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjoKIH0KIAogdGVtcGxh
dGU8dHlwZW5hbWUgQWRhcHRvcj4KLXZvaWQgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRv
cj46OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3Rl
bXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFk
YXB0b3I+Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsK
ICAgICBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0dlbmVy
aWNUeXBlZEFycmF5Vmlldyo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMo
dGhpc09iamVjdCwgaW5mbygpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTR2xvYmFsT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAJKHJldmlzaW9uIDI2ODA4NikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTg3Niw3ICsxODc2LDggQEAgdm9pZCBKU0dsb2JhbE9iamVjdDo6cmVzZXRQcm90b3R5cGUo
Vk0mIAogICAgIHNldEdsb2JhbFRoaXModm0sIEpTUHJveHk6OmNyZWF0ZSh2bSwgSlNQcm94eTo6
Y3JlYXRlU3RydWN0dXJlKHZtLCB0aGlzLCBwcm90b3R5cGUsIFB1cmVGb3J3YXJkaW5nUHJveHlU
eXBlKSwgdGhpcykpOwogfQogCi12b2lkIEpTR2xvYmFsT2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpT
Q2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNp
dG9yPgordm9pZCBKU0dsb2JhbE9iamVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFZp
c2l0b3ImIHZpc2l0b3IpCiB7IAogICAgIEpTR2xvYmFsT2JqZWN0KiB0aGlzT2JqZWN0ID0ganND
YXN0PEpTR2xvYmFsT2JqZWN0Kj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklU
Uyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtMjA0Nyw2ICsyMDQ4LDkgQEAgdm9pZCBKU0dsb2Jh
bE9iamVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbAogICAgIHRoaXNPYmplY3QtPm1fcmVnRXhwR2xv
YmFsRGF0YS52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKIH0KIAordGVtcGxhdGUgSlNfRVhQT1JU
X1BSSVZBVEUgdm9pZCBKU0dsb2JhbE9iamVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90
VmlzaXRvciYpOwordGVtcGxhdGUgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBKU0dsb2JhbE9iamVj
dDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqLCBEZWJ1Z1Nsb3RWaXNpdG9yJik7CisKIENhbGxGcmFt
ZSogSlNHbG9iYWxPYmplY3Q6OmRlcHJlY2F0ZWRDYWxsRnJhbWVGb3JEZWJ1Z2dlcigpCiB7CiAg
ICAgcmV0dXJuIENhbGxGcmFtZTo6Y3JlYXRlKG1fZGVwcmVjYXRlZENhbGxGcmFtZUZvckRlYnVn
Z2VyKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxP
YmplY3QuaAkocmV2aXNpb24gMjY4MDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNHbG9iYWxPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtNTg2LDcgKzU4Niw4IEBAIHB1
YmxpYzoKICAgICBKU19FWFBPUlRfUFJJVkFURSB+SlNHbG9iYWxPYmplY3QoKTsKICAgICBKU19F
WFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwogCi0gICAgSlNfRVhQ
T1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRv
ciYpOworICAgIERFQ0xBUkVfRVhQT1JUX1ZJU0lUX0NISUxEUkVOOworLy8gICAgSlNfRVhQT1JU
X1BSSVZBVEUgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYp
OwogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90
KEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYp
OwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBib29sIHB1dChKU0NlbGwqLCBKU0dsb2Jh
bE9iamVjdCosIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgUHV0UHJvcGVydHlTbG90Jik7CkBAIC0x
MTA0LDYgKzExMDUsOSBAQCBwcml2YXRlOgogI2VuZGlmCiB9OwogCitleHRlcm4gdGVtcGxhdGUg
SlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBKU0dsb2JhbE9iamVjdDo6dmlzaXRDaGlsZHJlbihKU0Nl
bGwqLCBTbG90VmlzaXRvciYpOworZXh0ZXJuIHRlbXBsYXRlIEpTX0VYUE9SVF9QUklWQVRFIHZv
aWQgSlNHbG9iYWxPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgRGVidWdTbG90VmlzaXRv
ciYpOworCiBpbmxpbmUgSlNBcnJheSogY29uc3RydWN0RW1wdHlBcnJheShKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBBcnJheUFsbG9jYXRpb25Qcm9maWxlKiBwcm9maWxlLCB1bnNpZ25l
ZCBpbml0aWFsTGVuZ3RoID0gMCwgSlNWYWx1ZSBuZXdUYXJnZXQgPSBKU1ZhbHVlKCkpCiB7CiAg
ICAgVk0mIHZtID0gZ2V0Vk0oZ2xvYmFsT2JqZWN0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTSW1tdXRhYmxlQnV0dGVyZmx5LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ltbXV0YWJsZUJ1dHRlcmZseS5jcHAJKHJldmlz
aW9uIDI2ODA4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTSW1tdXRhYmxl
QnV0dGVyZmx5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsOCBAQCBuYW1lc3BhY2Ug
SlNDIHsKIAogY29uc3QgQ2xhc3NJbmZvIEpTSW1tdXRhYmxlQnV0dGVyZmx5OjpzX2luZm8gPSB7
ICJJbW11dGFibGUgQnV0dGVyZmx5IiwgbnVsbHB0ciwgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRF
X01FVEhPRF9UQUJMRShKU0ltbXV0YWJsZUJ1dHRlcmZseSkgfTsKIAotdm9pZCBKU0ltbXV0YWJs
ZUJ1dHRlcmZseTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNp
dG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNJbW11dGFibGVCdXR0ZXJm
bHk6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAg
IEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2VsbCwgaW5mbygpKTsKICAgICBCYXNlOjp2aXNp
dENoaWxkcmVuKGNlbGwsIHZpc2l0b3IpOwpAQCAtNDUsNiArNDYsOCBAQCB2b2lkIEpTSW1tdXRh
YmxlQnV0dGVyZmx5Ojp2aXNpdENoaWxkcmVuCiAgICAgdmlzaXRvci5hcHBlbmRWYWx1ZXNIaWRk
ZW4oYnV0dGVyZmx5LT5jb250aWd1b3VzKCkuZGF0YSgpLCBidXR0ZXJmbHktPnB1YmxpY0xlbmd0
aCgpKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTSW1tdXRhYmxlQnV0dGVyZmx5KTsK
Kwogdm9pZCBKU0ltbXV0YWJsZUJ1dHRlcmZseTo6Y29weVRvQXJndW1lbnRzKEpTR2xvYmFsT2Jq
ZWN0KiwgSlNWYWx1ZSogZmlyc3RFbGVtZW50RGVzdCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25l
ZCBsZW5ndGgpCiB7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ltbXV0YWJsZUJ1dHRlcmZs
eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTSW1tdXRh
YmxlQnV0dGVyZmx5LmgJKHJldmlzaW9uIDI2ODA4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTSW1tdXRhYmxlQnV0dGVyZmx5LmgJKHdvcmtpbmcgY29weSkKQEAgLTE0NSw3
ICsxNDUsOCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBqc0RvdWJsZU51bWJlcih2YWx1ZSk7
CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90Vmlz
aXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CisvLyAgICBzdGF0aWMgdm9pZCB2
aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CiAKICAgICB2b2lkIGNvcHlUb0Fy
Z3VtZW50cyhKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUqIGZpcnN0RWxlbWVudERlc3QsIHVuc2ln
bmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTSW50ZXJuYWxGaWVsZE9iamVjdEltcGwuaAko
cmV2aXNpb24gMjY4MDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbnRl
cm5hbEZpZWxkT2JqZWN0SW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC02Niw3ICs2Niw4IEBAIHB1
YmxpYzoKICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mSW50ZXJuYWxGaWVsZCh1bnNpZ25l
ZCBpbmRleCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTSW50ZXJuYWxGaWVsZE9iamVjdElt
cGwsIG1faW50ZXJuYWxGaWVsZHMpICsgaW5kZXggKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25v
d24+KTsgfQogCiBwcm90ZWN0ZWQ6Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0Nl
bGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CisvLyAgICBz
dGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CiAKICAgICBK
U0ludGVybmFsRmllbGRPYmplY3RJbXBsKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiAg
ICAgICAgIDogQmFzZSh2bSwgc3RydWN0dXJlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbElubGluZXMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ludGVybmFsRmllbGRPYmplY3RJbXBs
SW5saW5lcy5oCShyZXZpc2lvbiAyNjgwODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0ludGVybmFsRmllbGRPYmplY3RJbXBsSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zMCw3ICszMCw4IEBACiBuYW1lc3BhY2UgSlNDIHsKIAogdGVtcGxhdGU8dW5zaWduZWQgcGFz
c2VkTnVtYmVyT2ZJbnRlcm5hbEZpZWxkcz4KLXZvaWQgSlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1w
bDxwYXNzZWROdW1iZXJPZkludGVybmFsRmllbGRzPjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNl
bGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3Zv
aWQgSlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbDxwYXNzZWROdW1iZXJPZkludGVybmFsRmllbGRz
Pjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAg
YXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0ludGVybmFsRmllbGRPYmplY3RJbXBsKj4oY2Vs
bCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMZXhpY2FsRW52aXJvbm1lbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTGV4aWNh
bEVudmlyb25tZW50LmNwcAkocmV2aXNpb24gMjY4MDg2KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNMZXhpY2FsRW52aXJvbm1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
Niw3ICszNiw4IEBAIG5hbWVzcGFjZSBKU0MgewogCiBjb25zdCBDbGFzc0luZm8gSlNMZXhpY2Fs
RW52aXJvbm1lbnQ6OnNfaW5mbyA9IHsgIkpTTGV4aWNhbEVudmlyb25tZW50IiwgJkJhc2U6OnNf
aW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU0xleGljYWxFbnZp
cm9ubWVudCkgfTsKIAotdm9pZCBKU0xleGljYWxFbnZpcm9ubWVudDo6dmlzaXRDaGlsZHJlbihK
U0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlz
aXRvcj4KK3ZvaWQgSlNMZXhpY2FsRW52aXJvbm1lbnQ6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBj
ZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8
SlNMZXhpY2FsRW52aXJvbm1lbnQqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVS
SVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC00NCw2ICs0NSw4IEBAIHZvaWQgSlNMZXhpY2Fs
RW52aXJvbm1lbnQ6OnZpc2l0Q2hpbGRyZW4KICAgICB2aXNpdG9yLmFwcGVuZFZhbHVlc0hpZGRl
bih0aGlzT2JqZWN0LT52YXJpYWJsZXMoKSwgdGhpc09iamVjdC0+c3ltYm9sVGFibGUoKS0+c2Nv
cGVTaXplKCkpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNMZXhpY2FsRW52aXJvbm1l
bnQpOworCiB2b2lkIEpTTGV4aWNhbEVudmlyb25tZW50OjphbmFseXplSGVhcChKU0NlbGwqIGNl
bGwsIEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCiB7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpz
Q2FzdDxKU0xleGljYWxFbnZpcm9ubWVudCo+KGNlbGwpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNMZXhpY2FsRW52aXJvbm1lbnQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xleGljYWxFbnZpcm9ubWVudC5oCShyZXZpc2lv
biAyNjgwODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xleGljYWxFbnZp
cm9ubWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzQsNyArMTM0LDggQEAgcHJvdGVjdGVkOgog
ICAgICAgICB9CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwq
LCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CisvLyAgICBzdGF0
aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CiAgICAgc3RhdGlj
IHZvaWQgYW5hbHl6ZUhlYXAoSlNDZWxsKiwgSGVhcEFuYWx5emVyJik7CiB9OwogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01hcEl0ZXJhdG9yLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01hcEl0ZXJhdG9yLmNwcAkocmV2
aXNpb24gMjY4MDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNYXBJdGVy
YXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU3LDEzICs1NywxNiBAQCB2b2lkIEpTTWFwSXRl
cmF0b3I6OmZpbmlzaENyZWF0aW9uKFZNJiB2CiAgICAgICAgIEJhc2U6OmludGVybmFsRmllbGQo
aW5kZXgpLnNldCh2bSwgdGhpcywgdmFsdWVzW2luZGV4XSk7CiB9CiAKLXZvaWQgSlNNYXBJdGVy
YXRvcjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQor
dGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNNYXBJdGVyYXRvcjo6dmlzaXRDaGls
ZHJlbihKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0byogdGhpc09i
amVjdCA9IGpzQ2FzdDxKU01hcEl0ZXJhdG9yKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVD
VF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4o
dGhpc09iamVjdCwgdmlzaXRvcik7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU01hcEl0
ZXJhdG9yKTsKKwogSlNWYWx1ZSBKU01hcEl0ZXJhdG9yOjpjcmVhdGVQYWlyKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUga2V5LCBKU1ZhbHVlIHZhbHVlKQogewogICAgIE1h
cmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3M7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU01hcEl0ZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNNYXBJdGVyYXRvci5oCShyZXZpc2lvbiAyNjgwODYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU01hcEl0ZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0
Miw3ICsxNDIsOCBAQCBwcml2YXRlOgogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZmluaXNo
Q3JlYXRpb24oVk0mLCBKU01hcCosIEl0ZXJhdGlvbktpbmQpOwogICAgIHZvaWQgZmluaXNoQ3Jl
YXRpb24oVk0mKTsKICAgICBKU1ZhbHVlIGNyZWF0ZVBhaXIoSlNHbG9iYWxPYmplY3QqLCBKU1Zh
bHVlLCBKU1ZhbHVlKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNs
b3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKKy8vICAgIHN0YXRpYyB2
b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKIH07CiBTVEFUSUNfQVNT
RVJUX0lTX1RSSVZJQUxMWV9ERVNUUlVDVElCTEUoSlNNYXBJdGVyYXRvcik7CiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlRW52aXJvbm1lbnQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlRW52aXJvbm1l
bnQuY3BwCShyZXZpc2lvbiAyNjgwODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU01vZHVsZUVudmlyb25tZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjUsNyArNjUsOCBA
QCB2b2lkIEpTTW9kdWxlRW52aXJvbm1lbnQ6OmZpbmlzaENyZWF0aW9uCiAgICAgdGhpcy0+bW9k
dWxlUmVjb3JkU2xvdCgpLnNldCh2bSwgdGhpcywgbW9kdWxlUmVjb3JkKTsKIH0KIAotdm9pZCBK
U01vZHVsZUVudmlyb25tZW50Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0
b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU01vZHVsZUVu
dmlyb25tZW50Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikK
IHsKICAgICBKU01vZHVsZUVudmlyb25tZW50KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTTW9kdWxl
RW52aXJvbm1lbnQqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNP
YmplY3QsIGluZm8oKSk7CkBAIC03NCw2ICs3NSw4IEBAIHZvaWQgSlNNb2R1bGVFbnZpcm9ubWVu
dDo6dmlzaXRDaGlsZHJlbigKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tb2R1bGVS
ZWNvcmRTbG90KCkpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNNb2R1bGVFbnZpcm9u
bWVudCk7CisKIGJvb2wgSlNNb2R1bGVFbnZpcm9ubWVudDo6Z2V0T3duUHJvcGVydHlTbG90KEpT
T2JqZWN0KiBjZWxsLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWUg
cHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFs
T2JqZWN0LT52bSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1
bGVFbnZpcm9ubWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTTW9kdWxlRW52aXJvbm1lbnQuaAkocmV2aXNpb24gMjY4MDg2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVFbnZpcm9ubWVudC5oCSh3b3JraW5nIGNvcHkp
CkBAIC04OSw3ICs4OSw4IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiAqYml0d2lzZV9jYXN0
PFdyaXRlQmFycmllckJhc2U8QWJzdHJhY3RNb2R1bGVSZWNvcmQ+Kj4oYml0d2lzZV9jYXN0PGNo
YXIqPih0aGlzKSArIG9mZnNldE9mTW9kdWxlUmVjb3JkKHN5bWJvbFRhYmxlKCkpKTsKICAgICB9
CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7
CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKKy8vICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hp
bGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKIH07CiAKIGlubGluZSBKU01vZHVsZUVudmly
b25tZW50OjpKU01vZHVsZUVudmlyb25tZW50KFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUs
IEpTU2NvcGUqIGN1cnJlbnRTY29wZSwgU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlTmFt
ZXNwYWNlT2JqZWN0LmNwcAkocmV2aXNpb24gMjY4MDg2KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC04NSw3ICs4NSw4IEBAIHZvaWQgSlNNb2R1bGVOYW1lc3BhY2VPYmplY3Q6OmRlc3Ryb3koSlMK
ICAgICB0aGlzT2JqZWN0LT5KU01vZHVsZU5hbWVzcGFjZU9iamVjdDo6fkpTTW9kdWxlTmFtZXNw
YWNlT2JqZWN0KCk7CiB9CiAKLXZvaWQgSlNNb2R1bGVOYW1lc3BhY2VPYmplY3Q6OnZpc2l0Q2hp
bGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVu
YW1lIFZpc2l0b3I+Cit2b2lkIEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0Ojp2aXNpdENoaWxkcmVu
KEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU01vZHVsZU5hbWVzcGFj
ZU9iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU01vZHVsZU5hbWVzcGFjZU9iamVjdCo+KGNl
bGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsK
QEAgLTk4LDYgKzk5LDggQEAgdm9pZCBKU01vZHVsZU5hbWVzcGFjZU9iamVjdDo6dmlzaXRDaGls
ZAogICAgIH0KIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTTW9kdWxlTmFtZXNwYWNlT2Jq
ZWN0KTsKKwogc3RhdGljIEpTVmFsdWUgZ2V0VmFsdWUoSlNNb2R1bGVFbnZpcm9ubWVudCogZW52
aXJvbm1lbnQsIFByb3BlcnR5TmFtZSBsb2NhbE5hbWUsIFNjb3BlT2Zmc2V0JiBzY29wZU9mZnNl
dCkKIHsKICAgICBTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUgPSBlbnZpcm9ubWVudC0+c3ltYm9s
VGFibGUoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlTmFt
ZXNwYWNlT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QuaAkocmV2aXNpb24gMjY4MDg2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNzIsNyArNzIsOCBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIEpTX0VYUE9S
VF9QUklWQVRFIEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0KFZNJiwgU3RydWN0dXJlKik7CiAgICAg
SlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0dsb2JhbE9iamVjdCosIEFi
c3RyYWN0TW9kdWxlUmVjb3JkKiwgVmVjdG9yPHN0ZDo6cGFpcjxJZGVudGlmaWVyLCBBYnN0cmFj
dE1vZHVsZVJlY29yZDo6UmVzb2x1dGlvbj4+JiYpOwotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hp
bGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVO
OworLy8gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYp
OwogICAgIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90Q29tbW9uKEpTR2xvYmFsT2JqZWN0KiwgUHJv
cGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKIAogICAgIHN0cnVjdCBFeHBvcnRFbnRyeSB7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZVJlY29yZC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVSZWNvcmQu
Y3BwCShyZXZpc2lvbiAyNjgwODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U01vZHVsZVJlY29yZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcwLDcgKzcwLDggQEAgdm9pZCBK
U01vZHVsZVJlY29yZDo6ZmluaXNoQ3JlYXRpb24oSlNHbAogICAgIEFTU0VSVChpbmhlcml0cyh2
bSwgaW5mbygpKSk7CiB9CiAKLXZvaWQgSlNNb2R1bGVSZWNvcmQ6OnZpc2l0Q2hpbGRyZW4oSlND
ZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0
b3I+Cit2b2lkIEpTTW9kdWxlUmVjb3JkOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgVmlz
aXRvciYgdmlzaXRvcikKIHsKICAgICBKU01vZHVsZVJlY29yZCogdGhpc09iamVjdCA9IGpzQ2Fz
dDxKU01vZHVsZVJlY29yZCo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMo
dGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTc4LDYgKzc5LDggQEAgdm9pZCBKU01vZHVsZVJlY29y
ZDo6dmlzaXRDaGlsZHJlbihKU0NlbAogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1f
bW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNN
b2R1bGVSZWNvcmQpOworCiB2b2lkIEpTTW9kdWxlUmVjb3JkOjpsaW5rKEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgc2NyaXB0RmV0Y2hlcikKIHsKICAgICBWTSYgdm0gPSBn
bG9iYWxPYmplY3QtPnZtKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U01vZHVsZVJlY29yZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTTW9kdWxlUmVjb3JkLmgJKHJldmlzaW9uIDI2ODA4NikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlUmVjb3JkLmgJKHdvcmtpbmcgY29weSkKQEAgLTY2LDcg
KzY2LDggQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxPYmpl
Y3QqLCBWTSYpOwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90
VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CisvLyAgICBzdGF0aWMgdm9p
ZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CiAKICAgICB2b2lkIGluc3Rh
bnRpYXRlRGVjbGFyYXRpb25zKEpTR2xvYmFsT2JqZWN0KiwgTW9kdWxlUHJvZ3JhbUV4ZWN1dGFi
bGUqLCBKU1ZhbHVlIHNjcmlwdEZldGNoZXIpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU05hdGl2ZVN0ZEZ1bmN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU05hdGl2ZVN0ZEZ1bmN0aW9uLmNwcAkocmV2aXNpb24g
MjY4MDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNOYXRpdmVTdGRGdW5j
dGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDEzICs0MSwxNiBAQCBKU05hdGl2ZVN0ZEZ1
bmN0aW9uOjpKU05hdGl2ZVN0ZEZ1bmN0aW9uCiB7CiB9CiAKLXZvaWQgSlNOYXRpdmVTdGRGdW5j
dGlvbjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQor
dGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNOYXRpdmVTdGRGdW5jdGlvbjo6dmlz
aXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNOYXRp
dmVTdGRGdW5jdGlvbiogdGhpc09iamVjdCA9IGpzQ2FzdDxKU05hdGl2ZVN0ZEZ1bmN0aW9uKj4o
Y2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkp
OwogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CiB9CiAKK0RF
RklORV9WSVNJVF9DSElMRFJFTihKU05hdGl2ZVN0ZEZ1bmN0aW9uKTsKKwogdm9pZCBKU05hdGl2
ZVN0ZEZ1bmN0aW9uOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIE5hdGl2ZUV4ZWN1dGFibGUqIGV4
ZWN1dGFibGUsIHVuc2lnbmVkIGxlbmd0aCwgY29uc3QgU3RyaW5nJiBuYW1lKQogewogICAgIEJh
c2U6OmZpbmlzaENyZWF0aW9uKHZtLCBleGVjdXRhYmxlLCBsZW5ndGgsIG5hbWUpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNOYXRpdmVTdGRGdW5jdGlvbi5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTmF0aXZlU3RkRnVuY3Rp
b24uaAkocmV2aXNpb24gMjY4MDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNOYXRpdmVTdGRGdW5jdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC02NSw3ICs2NSw4IEBAIHB1
YmxpYzoKIHByaXZhdGU6CiAgICAgSlNOYXRpdmVTdGRGdW5jdGlvbihWTSYsIE5hdGl2ZUV4ZWN1
dGFibGUqLCBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSosIE5hdGl2ZVN0ZEZ1bmN0aW9uJiYp
OwogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBOYXRpdmVFeGVjdXRhYmxlKiwgdW5zaWdu
ZWQgbGVuZ3RoLCBjb25zdCBTdHJpbmcmIG5hbWUpOwotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hp
bGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVO
OworLy8gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYp
OwogCiAgICAgTmF0aXZlU3RkRnVuY3Rpb24gbV9mdW5jdGlvbjsKIH07CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCShyZXZpc2lvbiAyNjgwODYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEyMCw3ICsxMjAsOCBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSlNPYmplY3Q6Om1hcmtB
dXhpbGlhCiAgICAgdmlzaXRvci5hcHBlbmRWYWx1ZXNIaWRkZW4oYnV0dGVyZmx5LT5wcm9wZXJ0
eVN0b3JhZ2UoKSAtIG91dE9mTGluZVNpemUsIG91dE9mTGluZVNpemUpOwogfQogCi1BTFdBWVNf
SU5MSU5FIFN0cnVjdHVyZSogSlNPYmplY3Q6OnZpc2l0QnV0dGVyZmx5KFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK0FMV0FZU19JTkxJTkUgU3RydWN0
dXJlKiBKU09iamVjdDo6dmlzaXRCdXR0ZXJmbHkoVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBz
dGF0aWMgY29uc3QgY2hhciogY29uc3QgcmFjZVJlYXNvbiA9ICJKU09iamVjdDo6dmlzaXRCdXR0
ZXJmbHkiOwogICAgIFN0cnVjdHVyZSogcmVzdWx0ID0gdmlzaXRCdXR0ZXJmbHlJbXBsKHZpc2l0
b3IpOwpAQCAtMTI5LDcgKzEzMCw4IEBAIEFMV0FZU19JTkxJTkUgU3RydWN0dXJlKiBKU09iamVj
dDo6dmlzaXQKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1BTFdBWVNfSU5MSU5FIFN0cnVjdHVy
ZSogSlNPYmplY3Q6OnZpc2l0QnV0dGVyZmx5SW1wbChTbG90VmlzaXRvciYgdmlzaXRvcikKK3Rl
bXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+CitBTFdBWVNfSU5MSU5FIFN0cnVjdHVyZSogSlNPYmpl
Y3Q6OnZpc2l0QnV0dGVyZmx5SW1wbChWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFZNJiB2bSA9
IHZpc2l0b3Iudm0oKTsKICAgICAKQEAgLTQyOSw3ICs0MzEsOSBAQCBzaXplX3QgSlNPYmplY3Q6
OmVzdGltYXRlZFNpemUoSlNDZWxsKiBjCiAgICAgcmV0dXJuIEJhc2U6OmVzdGltYXRlZFNpemUo
Y2VsbCwgdm0pICsgYnV0dGVyZmx5T3V0T2ZMaW5lU2l6ZTsKIH0KIAotdm9pZCBKU09iamVjdDo6
dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxh
dGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQorLy92b2lkIEpTT2JqZWN0Ojp2aXNpdENoaWxkcmVu
KEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNPYmplY3QqIHRo
aXNPYmplY3QgPSBqc0Nhc3Q8SlNPYmplY3QqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNU
X0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC00MzcsMTYgKzQ0MSwxOSBAQCB2b2lk
IEpTT2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsCiAgICAgYm9vbCB3YXNDaGVja2lu
Z0ZvckRlZmF1bHRNYXJrVmlvbGF0aW9uID0gdmlzaXRvci5tX2lzQ2hlY2tpbmdGb3JEZWZhdWx0
TWFya1Zpb2xhdGlvbjsKICAgICB2aXNpdG9yLm1faXNDaGVja2luZ0ZvckRlZmF1bHRNYXJrVmlv
bGF0aW9uID0gZmFsc2U7CiAjZW5kaWYKLSAgICAKKwogICAgIEpTQ2VsbDo6dmlzaXRDaGlsZHJl
bih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKLSAgICAKKwogICAgIHRoaXNPYmplY3QtPnZpc2l0QnV0
dGVyZmx5KHZpc2l0b3IpOwotICAgIAorCiAjaWYgQVNTRVJUX0VOQUJMRUQKICAgICB2aXNpdG9y
Lm1faXNDaGVja2luZ0ZvckRlZmF1bHRNYXJrVmlvbGF0aW9uID0gd2FzQ2hlY2tpbmdGb3JEZWZh
dWx0TWFya1Zpb2xhdGlvbjsKICNlbmRpZgogfQogCit0ZW1wbGF0ZSB2b2lkIEpTT2JqZWN0Ojp2
aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTT2Jq
ZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCosIERlYnVnU2xvdFZpc2l0b3ImKTsKKwogdm9pZCBK
U09iamVjdDo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVy
KQogewogICAgIEpTT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTT2JqZWN0Kj4oY2VsbCk7
CkBAIC00ODUsNyArNDkyLDggQEAgdm9pZCBKU09iamVjdDo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBj
ZWxsLAogICAgIH0KIH0KIAotdm9pZCBKU0ZpbmFsT2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2Vs
bCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
Pgordm9pZCBKU0ZpbmFsT2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgVmlzaXRv
ciYgdmlzaXRvcikKIHsKICAgICBKU0ZpbmFsT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpT
RmluYWxPYmplY3QqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNP
YmplY3QsIGluZm8oKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09i
amVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2Jq
ZWN0LmgJKHJldmlzaW9uIDI2ODA4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEwOCw4ICsxMDgsMTAgQEAgY2xhc3MgSlNP
YmplY3QgOiBwdWJsaWMgSlNDZWxsIHsKIHB1YmxpYzoKICAgICB1c2luZyBCYXNlID0gSlNDZWxs
OwogCisgICAgREVDTEFSRV9FWFBPUlRfVklTSVRfQ0hJTERSRU47CisKICAgICBKU19FWFBPUlRf
UFJJVkFURSBzdGF0aWMgc2l6ZV90IGVzdGltYXRlZFNpemUoSlNDZWxsKiwgVk0mKTsKLSAgICBK
U19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RW
aXNpdG9yJik7CisvLyAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCB2aXNpdENoaWxk
cmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGlj
IHZvaWQgYW5hbHl6ZUhlYXAoSlNDZWxsKiwgSGVhcEFuYWx5emVyJik7CiAKICAgICBKU19FWFBP
UlRfUFJJVkFURSBzdGF0aWMgU3RyaW5nIGNsYXNzTmFtZShjb25zdCBKU09iamVjdCosIFZNJik7
CkBAIC05NzksOSArOTgxLDkgQEAgcHJvdGVjdGVkOgogICAgIEpTT2JqZWN0KFZNJiwgU3RydWN0
dXJlKiwgQnV0dGVyZmx5KiA9IG51bGxwdHIpOwogICAgIAogICAgIC8vIFZpc2l0cyB0aGUgYnV0
dGVyZmx5IHVubGVzcyB0aGVyZSBpcyBhIHJhY2UuIFJldHVybnMgdGhlIHN0cnVjdHVyZSBpZiB0
aGVyZSB3YXMgbm8gcmFjZS4KLSAgICBTdHJ1Y3R1cmUqIHZpc2l0QnV0dGVyZmx5KFNsb3RWaXNp
dG9yJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gU3RydWN0dXJlKiB2aXNpdEJ1
dHRlcmZseShWaXNpdG9yJik7CiAgICAgCi0gICAgU3RydWN0dXJlKiB2aXNpdEJ1dHRlcmZseUlt
cGwoU2xvdFZpc2l0b3ImKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiBTdHJ1Y3R1
cmUqIHZpc2l0QnV0dGVyZmx5SW1wbChWaXNpdG9yJik7CiAgICAgCiAgICAgdm9pZCBtYXJrQXV4
aWxpYXJ5QW5kVmlzaXRPdXRPZkxpbmVQcm9wZXJ0aWVzKFNsb3RWaXNpdG9yJiwgQnV0dGVyZmx5
KiwgU3RydWN0dXJlKiwgUHJvcGVydHlPZmZzZXQgbWF4T2Zmc2V0KTsKIApAQCAtMTE0Myw2ICsx
MTQ1LDkgQEAgcHJpdmF0ZToKICNlbmRpZgogfTsKIAorZXh0ZXJuIHRlbXBsYXRlIEpTX0VYUE9S
VF9QUklWQVRFIHZvaWQgSlNPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0
b3ImKTsKK2V4dGVybiB0ZW1wbGF0ZSBKU19FWFBPUlRfUFJJVkFURSB2b2lkIEpTT2JqZWN0Ojp2
aXNpdENoaWxkcmVuKEpTQ2VsbCosIERlYnVnU2xvdFZpc2l0b3ImKTsKKwogLy8gSlNOb25GaW5h
bE9iamVjdCBpcyBhIHR5cGUgb2YgSlNPYmplY3QgdGhhdCBoYXMgc29tZSBpbnRlcm5hbCBzdG9y
YWdlLAogLy8gYnV0IGFsc28gcHJlc2VydmVzIHNvbWUgc3BhY2UgaW4gdGhlIGNvbGxlY3RvciBj
ZWxsIGZvciBhZGRpdGlvbmFsCiAvLyBkYXRhIG1lbWJlcnMgaW4gZGVyaXZlZCB0eXBlcy4KQEAg
LTEyMTEsMTQgKzEyMTYsMTUgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpj
cmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCB0eXBlSW5mbygpLCBpbmZvKCksIGRl
ZmF1bHRJbmRleGluZ1R5cGUsIGlubGluZUNhcGFjaXR5KTsKICAgICB9CiAKLSAgICBKU19FWFBP
UlRfUFJJVkFURSBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9y
Jik7CisgICAgREVDTEFSRV9FWFBPUlRfVklTSVRfQ0hJTERSRU47CisvLyAgICBKU19FWFBPUlRf
UFJJVkFURSBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7
CiAKICAgICBERUNMQVJFX0VYUE9SVF9JTkZPOwogCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFz
cyBMTEludE9mZnNldHNFeHRyYWN0b3I7CiAKLSAgICB2b2lkIHZpc2l0Q2hpbGRyZW5Db21tb24o
U2xvdFZpc2l0b3ImKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIHZpc2l0
Q2hpbGRyZW5Db21tb24oVmlzaXRvciYpOwogCiAgICAgZXhwbGljaXQgSlNGaW5hbE9iamVjdChW
TSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBCdXR0ZXJmbHkqIGJ1dHRlcmZseSkKICAgICAg
ICAgOiBKU09iamVjdCh2bSwgc3RydWN0dXJlLCBidXR0ZXJmbHkpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb21pc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvbWlzZS5jcHAJKHJldmlzaW9uIDI2ODA4NikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvbWlzZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTY3LDEzICs2NywxNiBAQCB2b2lkIEpTUHJvbWlzZTo6ZmluaXNoQ3JlYXRpb24oVk0m
IHZtKQogICAgICAgICBCYXNlOjppbnRlcm5hbEZpZWxkKGluZGV4KS5zZXQodm0sIHRoaXMsIHZh
bHVlc1tpbmRleF0pOwogfQogCi12b2lkIEpTUHJvbWlzZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwq
IGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4K
K3ZvaWQgSlNQcm9taXNlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlz
aXRvcikKIHsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTUHJvbWlzZSo+KGNlbGwp
OwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKICAg
ICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwogfQogCitERUZJTkVf
VklTSVRfQ0hJTERSRU4oSlNQcm9taXNlKTsKKwogYXV0byBKU1Byb21pc2U6OnN0YXR1cyhWTSYp
IGNvbnN0IC0+IFN0YXR1cwogewogICAgIEpTVmFsdWUgdmFsdWUgPSBpbnRlcm5hbEZpZWxkKEZp
ZWxkOjpGbGFncykuZ2V0KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U1Byb21pc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U1Byb21pc2UuaAkocmV2aXNpb24gMjY4MDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNQcm9taXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTkzLDcgKzkzLDggQEAgcHVibGlj
OgogICAgIH07CiAgICAgc3RhdGljIERlZmVycmVkRGF0YSBjcmVhdGVEZWZlcnJlZERhdGEoSlNH
bG9iYWxPYmplY3QqLCBKU1Byb21pc2VDb25zdHJ1Y3RvciopOwogCi0gICAgc3RhdGljIHZvaWQg
dmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRf
Q0hJTERSRU47CisvLyAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RW
aXNpdG9yJik7CiAKIHByb3RlY3RlZDoKICAgICBKU1Byb21pc2UoVk0mLCBTdHJ1Y3R1cmUqKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVydHlOYW1lRW51bWVy
YXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQ
cm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmNwcAkocmV2aXNpb24gMjY4MDg2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNzAsNyArNzAsOCBAQCB2b2lkIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6
ZmluaXNoQ3JlCiAgICAgfQogfQogCi12b2lkIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6dmlz
aXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8
dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjp2aXNpdENo
aWxkcmVuKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU1Byb3BlcnR5
TmFtZUVudW1lcmF0b3IqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBp
bmZvKCkpOwpAQCAtODcsNCArODgsNiBAQCB2b2lkIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6
dmlzaXRDaGlsCiAgICAgfQogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNQcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yKTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3Iu
aAkocmV2aXNpb24gMjY4MDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQ
cm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTg0LDcgKzg0LDggQEAg
cHVibGljOgogICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTUHJvcGVydHlOYW1lRW51
bWVyYXRvciwgbV9wcm9wZXJ0eU5hbWVzKTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNp
dENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElM
RFJFTjsKKy8vICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0
b3ImKTsKIAogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9y
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm94eS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm94eS5jcHAJKHJldmlz
aW9uIDI2ODA4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJveHkuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zNSw3ICszNSw4IEBAIFNUQVRJQ19BU1NFUlRfSVNfVFJJVklB
TExZX0RFU1RSVUNUSUJMRSgKIAogY29uc3QgQ2xhc3NJbmZvIEpTUHJveHk6OnNfaW5mbyA9IHsg
IkpTUHJveHkiLCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9E
X1RBQkxFKEpTUHJveHkpIH07CiAKLXZvaWQgSlNQcm94eTo6dmlzaXRDaGlsZHJlbihKU0NlbGwq
IGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4K
K3ZvaWQgSlNQcm94eTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0
b3IpCiB7CiAgICAgSlNQcm94eSogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Byb3h5Kj4oY2VsbCk7
CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAt
NDMsNiArNDQsOCBAQCB2b2lkIEpTUHJveHk6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsCiAg
ICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV90YXJnZXQpOwogfQogCitERUZJTkVfVklT
SVRfQ0hJTERSRU4oSlNQcm94eSk7CisKIHZvaWQgSlNQcm94eTo6c2V0VGFyZ2V0KFZNJiB2bSwg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKIHsKICAgICBtX3RhcmdldC5zZXQodm0sIHRo
aXMsIGdsb2JhbE9iamVjdCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U1Byb3h5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQ
cm94eS5oCShyZXZpc2lvbiAyNjgwODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU1Byb3h5LmgJKHdvcmtpbmcgY29weSkKQEAgLTg1LDcgKzg1LDggQEAgcHJvdGVjdGVkOgog
ICAgICAgICBtX3RhcmdldC5zZXQodm0sIHRoaXMsIHRhcmdldCk7CiAgICAgfQogCi0gICAgSlNf
RVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90Vmlz
aXRvciYpOworICAgIERFQ0xBUkVfRVhQT1JUX1ZJU0lUX0NISUxEUkVOOworLy8gICAgSlNfRVhQ
T1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRv
ciYpOwogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFN0cmluZyBjbGFzc05hbWUoY29u
c3QgSlNPYmplY3QqLCBWTSYpOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBTdHJpbmcg
dG9TdHJpbmdOYW1lKGNvbnN0IEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2NvcGUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2NvcGUuY3BwCShyZXZpc2lvbiAyNjgwODYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Njb3BlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzksNyArMzksOCBAQCBTVEFUSUNfQVNTRVJUX0lTX1RSSVZJQUxMWV9ERVNUUlVD
VElCTEUoCiAKIGNvbnN0IENsYXNzSW5mbyBKU1Njb3BlOjpzX2luZm8gPSB7ICJTY29wZSIsICZC
YXNlOjpzX2luZm8sIG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNTY29w
ZSkgfTsKIAotdm9pZCBKU1Njb3BlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZp
c2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1Njb3Bl
Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBK
U1Njb3BlKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTU2NvcGUqPihjZWxsKTsKICAgICBBU1NFUlRf
R0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC00Nyw2ICs0OCw4IEBA
IHZvaWQgSlNTY29wZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwKICAgICB2aXNpdG9yLmFw
cGVuZCh0aGlzT2JqZWN0LT5tX25leHQpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNT
Y29wZSk7CisKIC8vIFJldHVybnMgdHJ1ZSBpZiB3ZSBmb3VuZCBlbm91Z2ggaW5mb3JtYXRpb24g
dG8gdGVybWluYXRlIG9wdGltaXphdGlvbi4KIHN0YXRpYyBpbmxpbmUgYm9vbCBhYnN0cmFjdEFj
Y2VzcyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1Njb3BlKiBzY29wZSwgY29uc3Qg
SWRlbnRpZmllciYgaWRlbnQsIEdldE9yUHV0IGdldE9yUHV0LCBzaXplX3QgZGVwdGgsIGJvb2wm
IG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCBSZXNvbHZlT3AmIG9wLCBJbml0aWFsaXphdGlvbk1v
ZGUgaW5pdGlhbGl6YXRpb25Nb2RlKQogewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNTY29wZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTU2NvcGUuaAkocmV2aXNpb24gMjY4MDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNTY29wZS5oCSh3b3JraW5nIGNvcHkpCkBAIC02Miw3ICs2Miw4IEBAIHB1Ymxp
YzoKIAogICAgIHN0YXRpYyB2b2lkIGNvbGxlY3RDbG9zdXJlVmFyaWFibGVzVW5kZXJURFooSlNT
Y29wZSosIFZhcmlhYmxlRW52aXJvbm1lbnQmIHJlc3VsdCk7CiAKLSAgICBzdGF0aWMgdm9pZCB2
aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9D
SElMRFJFTjsKKy8vICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZp
c2l0b3ImKTsKIAogICAgIGJvb2wgaXNWYXJTY29wZSgpOwogICAgIGJvb2wgaXNMZXhpY2FsU2Nv
cGUoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2VnbWVudGVkVmFy
aWFibGVPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTU2VnbWVudGVkVmFyaWFibGVPYmplY3QuY3BwCShyZXZpc2lvbiAyNjgwODYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNjIsMTkgKzYyLDIyIEBAIFNjb3BlT2Zmc2V0IEpTU2VnbWVu
dGVkVmFyaWFibGVPYmplY3Q6OmEKICAgICByZXR1cm4gU2NvcGVPZmZzZXQob2xkU2l6ZSk7CiB9
CiAKLXZvaWQgSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwq
IGNlbGwsIFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0
b3I+Cit2b2lkIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTU2VnbWVudGVkVmFyaWFibGVPYmpl
Y3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdCo+KGNlbGwp
OwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKLSAg
ICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHNsb3RWaXNpdG9yKTsKKyAgICBCYXNl
Ojp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwogICAgIAogICAgIC8vIEZJWE1F
OiBXZSBjb3VsZCBhdm9pZCBsb2NraW5nIGhlcmUgaWYgU2VnbWVudGVkVmVjdG9yIHdhcyBsb2Nr
LWZyZWUuIEl0IGNvdWxkIGJlIG1hZGUgbG9jay1mcmVlCiAgICAgLy8gcmVsYXRpdmVseSBlYXNp
bHkuCiAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayh0aGlzT2JqZWN0LT5jZWxsTG9jaygpKTsK
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSB0aGlzT2JqZWN0LT5tX3ZhcmlhYmxlcy5zaXplKCk7IGkt
LTspCi0gICAgICAgIHNsb3RWaXNpdG9yLmFwcGVuZEhpZGRlbih0aGlzT2JqZWN0LT5tX3Zhcmlh
Ymxlc1tpXSk7CisgICAgICAgIHZpc2l0b3IuYXBwZW5kSGlkZGVuKHRoaXNPYmplY3QtPm1fdmFy
aWFibGVzW2ldKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTU2VnbWVudGVkVmFyaWFi
bGVPYmplY3QpOworCiB2b2lkIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3Q6OmFuYWx5emVIZWFw
KEpTQ2VsbCogY2VsbCwgSGVhcEFuYWx5emVyJiBhbmFseXplcikKIHsKICAgICBKU1NlZ21lbnRl
ZFZhcmlhYmxlT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTU2VnbWVudGVkVmFyaWFibGVP
YmplY3QqPihjZWxsKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2Vn
bWVudGVkVmFyaWFibGVPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmgJKHJldmlzaW9uIDI2ODA4NikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVPYmpl
Y3QuaAkod29ya2luZyBjb3B5KQpAQCAtODYsNyArODYsOCBAQCBwdWJsaWM6CiAgICAgLy8gdGhl
IGluZGV4IG9mIHRoZSBmaXJzdCBvbmUgYWRkZWQuCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgU2Nv
cGVPZmZzZXQgYWRkVmFyaWFibGVzKHVuc2lnbmVkIG51bWJlck9mVmFyaWFibGVzVG9BZGQsIEpT
VmFsdWUpOwogICAgIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIHZpc2l0Q2hp
bGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX0VYUE9SVF9WSVNJVF9D
SElMRFJFTjsKKy8vICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMg
dm9pZCBhbmFseXplSGVhcChKU0NlbGwqLCBIZWFwQW5hbHl6ZXImKTsKICAgICAKIHByb3RlY3Rl
ZDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2V0SXRlcmF0b3IuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2V0SXRlcmF0
b3IuY3BwCShyZXZpc2lvbiAyNjgwODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU1NldEl0ZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTcsMTMgKzU3LDE2IEBAIHZv
aWQgSlNTZXRJdGVyYXRvcjo6ZmluaXNoQ3JlYXRpb24oVk0mIHYKICAgICAgICAgQmFzZTo6aW50
ZXJuYWxGaWVsZChpbmRleCkuc2V0KHZtLCB0aGlzLCB2YWx1ZXNbaW5kZXhdKTsKIH0KIAotdm9p
ZCBKU1NldEl0ZXJhdG9yOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3Im
IHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1NldEl0ZXJhdG9y
Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBh
dXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTU2V0SXRlcmF0b3IqPihjZWxsKTsKICAgICBBU1NF
UlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAgICAgQmFzZTo6dmlz
aXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxE
UkVOKEpTU2V0SXRlcmF0b3IpOworCiBKU1ZhbHVlIEpTU2V0SXRlcmF0b3I6OmNyZWF0ZVBhaXIo
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBrZXksIEpTVmFsdWUgdmFsdWUp
CiB7CiAgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgYXJnczsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTU2V0SXRlcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU1NldEl0ZXJhdG9yLmgJKHJldmlzaW9uIDI2ODA4NikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2V0SXRlcmF0b3IuaAkod29ya2luZyBj
b3B5KQpAQCAtMTMwLDcgKzEzMCw4IEBAIHByaXZhdGU6CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUg
dm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIEpTU2V0KiwgSXRlcmF0aW9uS2luZCk7CiAgICAgdm9p
ZCBmaW5pc2hDcmVhdGlvbihWTSYpOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIEpTVmFsdWUgY3Jl
YXRlUGFpcihKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUsIEpTVmFsdWUpOwotICAgIHN0YXRpYyB2
b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJ
U0lUX0NISUxEUkVOOworLy8gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBT
bG90VmlzaXRvciYpOwogfTsKIFNUQVRJQ19BU1NFUlRfSVNfVFJJVklBTExZX0RFU1RSVUNUSUJM
RShKU1NldEl0ZXJhdG9yKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNTb3VyY2VDb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1NvdXJjZUNvZGUuY3BwCShyZXZpc2lvbiAyNjgwODYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU1NvdXJjZUNvZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2
ICsyNiw4IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSlNTb3VyY2VDb2RlLmgi
CiAKKyNpbmNsdWRlICJKU0NlbGxJbmxpbmVzLmgiIC8vIG1sYW0gVEVTVAorCiBuYW1lc3BhY2Ug
SlNDIHsKIAogY29uc3QgQ2xhc3NJbmZvIEpTU291cmNlQ29kZTo6c19pbmZvID0geyAiSlNTb3Vy
Y2VDb2RlIiwgbnVsbHB0ciwgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShK
U1NvdXJjZUNvZGUpIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0
cmluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNT
dHJpbmcuY3BwCShyZXZpc2lvbiAyNjgwODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1N0cmluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNSw3ICsxMDUsOCBAQCBzaXpl
X3QgSlNTdHJpbmc6OmVzdGltYXRlZFNpemUoSlNDZWxsKiBjCiAgICAgcmV0dXJuIEJhc2U6OmVz
dGltYXRlZFNpemUoY2VsbCwgdm0pICsgYml0d2lzZV9jYXN0PFN0cmluZ0ltcGwqPihwb2ludGVy
KS0+Y29zdER1cmluZ0dDKCk7CiB9CiAKLXZvaWQgSlNTdHJpbmc6OnZpc2l0Q2hpbGRyZW4oSlND
ZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0
b3I+Cit2b2lkIEpTU3RyaW5nOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYg
dmlzaXRvcikKIHsKICAgICBKU1N0cmluZyogdGhpc09iamVjdCA9IGFzU3RyaW5nKGNlbGwpOwog
ICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTE0
Myw2ICsxNDQsOCBAQCB2b2lkIEpTU3RyaW5nOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsCiAg
ICAgICAgIHZpc2l0b3IucmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKGltcGwtPmNvc3REdXJpbmdH
QygpKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTU3RyaW5nKTsKKwogc3RhdGljIGNv
bnN0ZXhwciB1bnNpZ25lZCBtYXhMZW5ndGhGb3JPblN0YWNrUmVzb2x2ZSA9IDIwNDg7CiAKIHZv
aWQgSlNSb3BlU3RyaW5nOjpyZXNvbHZlUm9wZUludGVybmFsOChMQ2hhciogYnVmZmVyKSBjb25z
dApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5oCShyZXZpc2lv
biAyNjgwODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yMTgsNyArMjE4LDggQEAgcHVibGljOgogCiAgICAgc3RhdGljIHZv
aWQgZHVtcFRvU3RyZWFtKGNvbnN0IEpTQ2VsbCosIFByaW50U3RyZWFtJik7CiAgICAgc3RhdGlj
IHNpemVfdCBlc3RpbWF0ZWRTaXplKEpTQ2VsbCosIFZNJik7Ci0gICAgc3RhdGljIHZvaWQgdmlz
aXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJ
TERSRU47CisvLyAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNp
dG9yJik7CiAKICAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaXNSb3BlKCkgY29uc3QKICAgICB7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZ0l0ZXJhdG9yLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZ0l0ZXJh
dG9yLmNwcAkocmV2aXNpb24gMjY4MDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNTdHJpbmdJdGVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUxLDExICs1MSwxNCBA
QCBKU1N0cmluZ0l0ZXJhdG9yKiBKU1N0cmluZ0l0ZXJhdG9yOjpjbG9uCiAgICAgcmV0dXJuIGNs
b25lOwogfQogCi12b2lkIEpTU3RyaW5nSXRlcmF0b3I6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBj
ZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2
b2lkIEpTU3RyaW5nSXRlcmF0b3I6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBWaXNpdG9y
JiB2aXNpdG9yKQogewogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNTdHJpbmdJdGVy
YXRvcio+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwg
aW5mbygpKTsKICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwog
fQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNTdHJpbmdJdGVyYXRvcik7CisKIH0gLy8gbmFt
ZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmdJ
dGVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
U3RyaW5nSXRlcmF0b3IuaAkocmV2aXNpb24gMjY4MDg2KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNTdHJpbmdJdGVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC03OSw3ICs3
OSw4IEBAIHB1YmxpYzoKICAgICBKU1ZhbHVlIGluZGV4KCkgY29uc3QgeyByZXR1cm4gaW50ZXJu
YWxGaWVsZChGaWVsZDo6SW5kZXgpLmdldCgpOyB9CiAgICAgSlNTdHJpbmdJdGVyYXRvciogY2xv
bmUoSlNHbG9iYWxPYmplY3QqKTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlND
ZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOworLy8gICAg
c3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwogCiBwcml2
YXRlOgogICAgIEpTU3RyaW5nSXRlcmF0b3IoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3Qu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3ltYm9s
VGFibGVPYmplY3QuY3BwCShyZXZpc2lvbiAyNjgwODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYs
NyArMzYsOCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogY29uc3QgQ2xhc3NJbmZvIEpTU3ltYm9sVGFi
bGVPYmplY3Q6OnNfaW5mbyA9IHsgIlN5bWJvbFRhYmxlT2JqZWN0IiwgJkJhc2U6OnNfaW5mbywg
bnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1N5bWJvbFRhYmxlT2JqZWN0
KSB9OwogCi12b2lkIEpTU3ltYm9sVGFibGVPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBj
ZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2
b2lkIEpTU3ltYm9sVGFibGVPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBWaXNp
dG9yJiB2aXNpdG9yKQogewogICAgIEpTU3ltYm9sVGFibGVPYmplY3QqIHRoaXNPYmplY3QgPSBq
c0Nhc3Q8SlNTeW1ib2xUYWJsZU9iamVjdCo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1Rf
SU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTQ0LDYgKzQ1LDggQEAgdm9pZCBKU1N5
bWJvbFRhYmxlT2JqZWN0Ojp2aXNpdENoaWxkcmVuKAogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNP
YmplY3QtPm1fc3ltYm9sVGFibGUpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNTeW1i
b2xUYWJsZU9iamVjdCk7CisKIGJvb2wgSlNTeW1ib2xUYWJsZU9iamVjdDo6ZGVsZXRlUHJvcGVy
dHkoSlNDZWxsKiBjZWxsLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5h
bWUgcHJvcGVydHlOYW1lLCBEZWxldGVQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgSlNTeW1i
b2xUYWJsZU9iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1N5bWJvbFRhYmxlT2JqZWN0Kj4o
Y2VsbCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N5bWJvbFRhYmxl
T2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNT
eW1ib2xUYWJsZU9iamVjdC5oCShyZXZpc2lvbiAyNjgwODYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTcw
LDcgKzcwLDggQEAgcHJvdGVjdGVkOgogICAgICAgICBtX3N5bWJvbFRhYmxlLnNldCh2bSwgdGhp
cywgc3ltYm9sVGFibGUpOwogICAgIH0KICAgICAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxk
cmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsK
Ky8vICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsK
ICAgICAKIHByaXZhdGU6CiAgICAgV3JpdGVCYXJyaWVyPFN5bWJvbFRhYmxlPiBtX3N5bWJvbFRh
YmxlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNXZWFrT2JqZWN0UmVm
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1dlYWtP
YmplY3RSZWYuY3BwCShyZXZpc2lvbiAyNjgwODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU1dlYWtPYmplY3RSZWYuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw3ICszOSw4
IEBAIHZvaWQgSlNXZWFrT2JqZWN0UmVmOjpmaW5pc2hDcmVhdGlvbihWTSYKICAgICBCYXNlOjpm
aW5pc2hDcmVhdGlvbih2bSk7CiB9CiAKLXZvaWQgSlNXZWFrT2JqZWN0UmVmOjp2aXNpdENoaWxk
cmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBWaXNpdG9yPgordm9pZCBKU1dlYWtPYmplY3RSZWY6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBj
ZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8
SlNXZWFrT2JqZWN0UmVmKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0
aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNTEsNiArNTIsOCBAQCB2b2lkIEpTV2Vha09iamVjdFJl
Zjo6dmlzaXRDaGlsZHJlbihKU0NlCiAgICAgfQogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4o
SlNXZWFrT2JqZWN0UmVmKTsKKwogdm9pZCBKU1dlYWtPYmplY3RSZWY6OmZpbmFsaXplVW5jb25k
aXRpb25hbGx5KFZNJiB2bSkKIHsKICAgICBpZiAobV92YWx1ZSAmJiAhdm0uaGVhcC5pc01hcmtl
ZChtX3ZhbHVlLmdldCgpKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
V2Vha09iamVjdFJlZi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTV2Vha09iamVjdFJlZi5oCShyZXZpc2lvbiAyNjgwODYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU1dlYWtPYmplY3RSZWYuaAkod29ya2luZyBjb3B5KQpAQCAtNjUs
NyArNjUsOCBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgdm9pZCBmaW5hbGl6ZVVuY29uZGl0aW9u
YWxseShWTSYpOwotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZp
c2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOworLy8gICAgc3RhdGljIHZvaWQg
dmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwogCiBwcml2YXRlOgogICAgIEpT
V2Vha09iamVjdFJlZihWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNXZWFrU2V0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1dlYWtTZXQuY3BwCShyZXZpc2lvbiAyNjgwODYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1dlYWtTZXQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiSlNXZWFrU2V0LmgiCiAKICNpbmNs
dWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAiV2Vha01hcEltcGxJbmxpbmVzLmgiCiAKIG5h
bWVzcGFjZSBKU0MgewogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1dp
dGhTY29wZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNXaXRoU2NvcGUuY3BwCShyZXZpc2lvbiAyNjgwODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1dpdGhTY29wZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDcgKzQxLDgg
QEAgSlNXaXRoU2NvcGUqIEpTV2l0aFNjb3BlOjpjcmVhdGUoCiAgICAgcmV0dXJuIHdpdGhTY29w
ZTsKIH0KIAotdm9pZCBKU1dpdGhTY29wZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNX
aXRoU2NvcGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQog
ewogICAgIEpTV2l0aFNjb3BlKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTV2l0aFNjb3BlKj4oY2Vs
bCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpA
QCAtNDksNiArNTAsOCBAQCB2b2lkIEpTV2l0aFNjb3BlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCog
CiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9vYmplY3QpOwogfQogCitERUZJTkVf
VklTSVRfQ0hJTERSRU4oSlNXaXRoU2NvcGUpOworCiBTdHJ1Y3R1cmUqIEpTV2l0aFNjb3BlOjpj
cmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1Zh
bHVlIHByb3RvKQogewogICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2Jq
ZWN0LCBwcm90bywgVHlwZUluZm8oV2l0aFNjb3BlVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZv
KCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNXaXRoU2NvcGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1dpdGhTY29wZS5o
CShyZXZpc2lvbiAyNjgwODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1dp
dGhTY29wZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00Myw3ICs0Myw4IEBAIHB1YmxpYzoKIAogICAg
IEpTT2JqZWN0KiBvYmplY3QoKSB7IHJldHVybiBtX29iamVjdC5nZXQoKTsgfQogCi0gICAgc3Rh
dGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xB
UkVfVklTSVRfQ0hJTERSRU47CisvLyAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2Vs
bCosIFNsb3RWaXNpdG9yJik7CiAKICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1
cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUgcHJvdG8pOwogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1dyYXBwZXJPYmplY3QuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTV3JhcHBlck9iamVjdC5jcHAJKHJldmlz
aW9uIDI2ODA4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTV3JhcHBlck9i
amVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDExICsyOSwxNyBAQCBuYW1lc3BhY2UgSlND
IHsKIAogU1RBVElDX0FTU0VSVF9JU19UUklWSUFMTFlfREVTVFJVQ1RJQkxFKEpTV3JhcHBlck9i
amVjdCk7CiAKLXZvaWQgSlNXcmFwcGVyT2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2Vs
bCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9p
ZCBKU1dyYXBwZXJPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2
aXNpdG9yKQogewogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNXcmFwcGVyT2JqZWN0
Kj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZv
KCkpOwogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CiB9CiAK
Ky8vdGVtcGxhdGUgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBKU1dyYXBwZXJPYmplY3Q6OnZpc2l0
Q2hpbGRyZW48U2xvdFZpc2l0b3I+KEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisvL3RlbXBsYXRl
IEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgSlNXcmFwcGVyT2JqZWN0Ojp2aXNpdENoaWxkcmVuPERl
YnVnU2xvdFZpc2l0b3I+KEpTQ2VsbCosIERlYnVnU2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZv
aWQgSlNXcmFwcGVyT2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7
Cit0ZW1wbGF0ZSB2b2lkIEpTV3JhcHBlck9iamVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqLCBE
ZWJ1Z1Nsb3RWaXNpdG9yJik7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNXcmFwcGVyT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNXcmFwcGVyT2JqZWN0LmgJKHJldmlzaW9uIDI2
ODA4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTV3JhcHBlck9iamVjdC5o
CSh3b3JraW5nIGNvcHkpCkBAIC02NCw5ICs2NCwxNCBAQCBwdWJsaWM6CiBwcm90ZWN0ZWQ6CiAg
ICAgZXhwbGljaXQgSlNXcmFwcGVyT2JqZWN0KFZNJiwgU3RydWN0dXJlKik7CiAKLSAgICBKU19F
WFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNp
dG9yJik7CisvLyAgICBERUNMQVJFX0VYUE9SVF9WSVNJVF9DSElMRFJFTjsKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBWaXNpdG9yPiBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCB2aXNpdENo
aWxkcmVuKEpTQ2VsbCosIFZpc2l0b3ImKTsKKy8vICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRp
YyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKIH07CiAKK2V4dGVy
biB0ZW1wbGF0ZSBKU19FWFBPUlRfUFJJVkFURSB2b2lkIEpTV3JhcHBlck9iamVjdDo6dmlzaXRD
aGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworZXh0ZXJuIHRlbXBsYXRlIEpTX0VYUE9S
VF9QUklWQVRFIHZvaWQgSlNXcmFwcGVyT2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCosIERl
YnVnU2xvdFZpc2l0b3ImKTsKKwogaW5saW5lIEpTV3JhcHBlck9iamVjdDo6SlNXcmFwcGVyT2Jq
ZWN0KFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiAgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1
cmUpCiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Nb2R1bGVQcm9ncmFt
RXhlY3V0YWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUuY3BwCShyZXZpc2lvbiAyNjgwODYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Nb2R1bGVQcm9ncmFtRXhlY3V0YWJsZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTc5LDcgKzc5LDggQEAgYXV0byBNb2R1bGVQcm9ncmFtRXhlY3V0YWJs
ZTo6ZW5zdXJlVGVtcAogICAgIHJldHVybiBlbnN1cmVUZW1wbGF0ZU9iamVjdE1hcEltcGwobV90
ZW1wbGF0ZU9iamVjdE1hcCk7CiB9CiAKLXZvaWQgTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGU6OnZp
c2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRl
PHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIE1vZHVsZVByb2dyYW1FeGVjdXRhYmxlOjp2aXNpdENo
aWxkcmVuKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBNb2R1bGVQcm9n
cmFtRXhlY3V0YWJsZSogdGhpc09iamVjdCA9IGpzQ2FzdDxNb2R1bGVQcm9ncmFtRXhlY3V0YWJs
ZSo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5m
bygpKTsKQEAgLTk0LDQgKzk1LDYgQEAgdm9pZCBNb2R1bGVQcm9ncmFtRXhlY3V0YWJsZTo6dmlz
aXRDaGlsZAogICAgIH0KIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKE1vZHVsZVByb2dyYW1F
eGVjdXRhYmxlKTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9Nb2R1bGVQcm9ncmFtRXhlY3V0YWJsZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01vZHVsZVByb2dyYW1FeGVjdXRhYmxlLmgJKHJl
dmlzaW9uIDI2ODA4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01vZHVsZVBy
b2dyYW1FeGVjdXRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTc3LDcgKzc3LDggQEAgcHJpdmF0
ZToKIAogICAgIE1vZHVsZVByb2dyYW1FeGVjdXRhYmxlKEpTR2xvYmFsT2JqZWN0KiwgY29uc3Qg
U291cmNlQ29kZSYpOwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBT
bG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CisvLyAgICBzdGF0aWMg
dm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CiAKICAgICBXcml0ZUJh
cnJpZXI8VW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrPiBtX3VubGlua2VkTW9kdWxlUHJv
Z3JhbUNvZGVCbG9jazsKICAgICBXcml0ZUJhcnJpZXI8U3ltYm9sVGFibGU+IG1fbW9kdWxlRW52
aXJvbm1lbnRTeW1ib2xUYWJsZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1Byb2dyYW1FeGVjdXRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9Qcm9ncmFtRXhlY3V0YWJsZS5jcHAJKHJldmlzaW9uIDI2ODA4NikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb2dyYW1FeGVjdXRhYmxlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjA4LDcgKzIwOCw4IEBAIGF1dG8gUHJvZ3JhbUV4ZWN1dGFibGU6OmVuc3Vy
ZVRlbXBsYXRlT2IKICAgICByZXR1cm4gZW5zdXJlVGVtcGxhdGVPYmplY3RNYXBJbXBsKG1fdGVt
cGxhdGVPYmplY3RNYXApOwogfQogCi12b2lkIFByb2dyYW1FeGVjdXRhYmxlOjp2aXNpdENoaWxk
cmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBWaXNpdG9yPgordm9pZCBQcm9ncmFtRXhlY3V0YWJsZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwq
IGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgUHJvZ3JhbUV4ZWN1dGFibGUqIHRoaXNP
YmplY3QgPSBqc0Nhc3Q8UHJvZ3JhbUV4ZWN1dGFibGUqPihjZWxsKTsKICAgICBBU1NFUlRfR0Nf
T0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC0yMjIsNCArMjIzLDYgQEAg
dm9pZCBQcm9ncmFtRXhlY3V0YWJsZTo6dmlzaXRDaGlsZHJlbihKUwogICAgIH0KIH0KIAorREVG
SU5FX1ZJU0lUX0NISUxEUkVOKFByb2dyYW1FeGVjdXRhYmxlKTsKKwogfSAvLyBuYW1lc3BhY2Ug
SlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9ncmFtRXhlY3V0YWJs
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb2dyYW1F
eGVjdXRhYmxlLmgJKHJldmlzaW9uIDI2ODA4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1Byb2dyYW1FeGVjdXRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTgxLDcgKzgxLDgg
QEAgcHJpdmF0ZToKIAogICAgIFByb2dyYW1FeGVjdXRhYmxlKEpTR2xvYmFsT2JqZWN0KiwgY29u
c3QgU291cmNlQ29kZSYpOwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwq
LCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CisvLyAgICBzdGF0
aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CiAKICAgICBXcml0
ZUJhcnJpZXI8VW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrPiBtX3VubGlua2VkUHJvZ3JhbUNvZGVC
bG9jazsKICAgICBXcml0ZUJhcnJpZXI8RXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZT4gbV9wcm9n
cmFtQ29kZUJsb2NrOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVy
dHlNYXBIYXNoVGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9Qcm9wZXJ0eU1hcEhhc2hUYWJsZS5oCShyZXZpc2lvbiAyNjgwODYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eU1hcEhhc2hUYWJsZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xMzMsNyArMTMzLDggQEAgcHVibGljOgogCiAgICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOwogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlND
ZWxsKik7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRv
ciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CisvLyAgICBzdGF0aWMgdm9pZCB2aXNp
dENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CiAKICAgICBERUNMQVJFX0VYUE9SVF9J
TkZPOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eVRhYmxl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0
eVRhYmxlLmNwcAkocmV2aXNpb24gMjY4MDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvUHJvcGVydHlUYWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExOCw3ICsxMTgsOCBA
QCB2b2lkIFByb3BlcnR5VGFibGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2CiAgICAgdm0uaGVhcC5y
ZXBvcnRFeHRyYU1lbW9yeUFsbG9jYXRlZChkYXRhU2l6ZSgpKTsKIH0KIAotdm9pZCBQcm9wZXJ0
eVRhYmxlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3Ip
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBQcm9wZXJ0eVRhYmxlOjp2aXNpdENo
aWxkcmVuKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBhdXRvKiB0aGlz
T2JqZWN0ID0ganNDYXN0PFByb3BlcnR5VGFibGUqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JK
RUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC0xMjYsNiArMTI3LDggQEAgdm9p
ZCBQcm9wZXJ0eVRhYmxlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbAogICAgIHZpc2l0b3IucmVwb3J0
RXh0cmFNZW1vcnlWaXNpdGVkKHRoaXNPYmplY3QtPmRhdGFTaXplKCkpOwogfQogCitERUZJTkVf
VklTSVRfQ0hJTERSRU4oUHJvcGVydHlUYWJsZSk7CisKIHZvaWQgUHJvcGVydHlUYWJsZTo6ZGVz
dHJveShKU0NlbGwqIGNlbGwpCiB7CiAgICAgc3RhdGljX2Nhc3Q8UHJvcGVydHlUYWJsZSo+KGNl
bGwpLT5Qcm9wZXJ0eVRhYmxlOjp+UHJvcGVydHlUYWJsZSgpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvUHJveHlPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3h5T2JqZWN0LmNwcAkocmV2aXNpb24gMjY4MDg2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJveHlPYmplY3QuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMTgxLDcgKzExODEsOCBAQCBib29sIFByb3h5T2JqZWN0Ojppc1Jldm9rZWQo
KSBjb25zdAogICAgIHJldHVybiBoYW5kbGVyKCkuaXNOdWxsKCk7CiB9CiAKLXZvaWQgUHJveHlP
YmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikK
K3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFByb3h5T2JqZWN0Ojp2aXNpdENoaWxk
cmVuKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBQcm94eU9iamVjdCog
dGhpc09iamVjdCA9IGpzQ2FzdDxQcm94eU9iamVjdCo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19P
QkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTExOTEsNCArMTE5Miw2IEBA
IHZvaWQgUHJveHlPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiAKICAgICB2aXNpdG9yLmFw
cGVuZCh0aGlzT2JqZWN0LT5tX2hhbmRsZXIpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4o
UHJveHlPYmplY3QpOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1Byb3h5T2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvUHJveHlPYmplY3QuaAkocmV2aXNpb24gMjY4MDg2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJveHlPYmplY3QuaAkod29ya2luZyBjb3B5KQpA
QCAtOTYsNyArOTYsOCBAQCBwcml2YXRlOgogICAgIHN0YXRpYyBOT19SRVRVUk5fRFVFX1RPX0NS
QVNIIHZvaWQgZ2V0R2VuZXJpY1Byb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVj
dCosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKICAgICBzdGF0aWMgYm9v
bCBzZXRQcm90b3R5cGUoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUgcHJvdG90
eXBlLCBib29sIHNob3VsZFRocm93SWZDYW50U2V0KTsKICAgICBzdGF0aWMgSlNWYWx1ZSBnZXRQ
cm90b3R5cGUoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCopOwotICAgIHN0YXRpYyB2b2lkIHZp
c2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NI
SUxEUkVOOworLy8gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90Vmlz
aXRvciYpOwogCiAgICAgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3RDb21tb24oSlNHbG9iYWxPYmpl
Y3QqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwogICAgIGJvb2wgcGVyZm9ybUludGVy
bmFsTWV0aG9kR2V0T3duUHJvcGVydHkoSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIFBy
b3BlcnR5U2xvdCYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJveHlS
ZXZva2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1By
b3h5UmV2b2tlLmNwcAkocmV2aXNpb24gMjY4MDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvUHJveHlSZXZva2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OSw3ICs2OSw4IEBA
IEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihwZXJmb3JtUHJveHlSZXYKICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCi12b2lkIFByb3h5UmV2b2tlOjp2aXNp
dENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0
eXBlbmFtZSBWaXNpdG9yPgordm9pZCBQcm94eVJldm9rZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwq
IGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgUHJveHlSZXZva2UqIHRoaXNPYmplY3Qg
PSBqc0Nhc3Q8UHJveHlSZXZva2UqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVS
SVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC03OCw0ICs3OSw2IEBAIHZvaWQgUHJveHlSZXZv
a2U6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiAKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0
LT5tX3Byb3h5KTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKFByb3h5UmV2b2tlKTsKKwog
fSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Q
cm94eVJldm9rZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1Byb3h5UmV2b2tlLmgJKHJldmlzaW9uIDI2ODA4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1Byb3h5UmV2b2tlLmgJKHdvcmtpbmcgY29weSkKQEAgLTUyLDcgKzUyLDggQEAg
cHVibGljOgogICAgIH0KIAogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBQcm94eU9iamVj
dCopOwotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3Im
KTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOworLy8gICAgc3RhdGljIHZvaWQgdmlzaXRD
aGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwogICAgIEpTVmFsdWUgcHJveHkoKSB7IHJl
dHVybiBtX3Byb3h5LmdldCgpOyB9CiAgICAgdm9pZCBzZXRQcm94eVRvTnVsbChWTSYgdm0pIHsg
cmV0dXJuIG1fcHJveHkuc2V0KHZtLCB0aGlzLCBqc051bGwoKSk7IH0KIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBPYmplY3QuY3BwCShyZXZpc2lvbiAy
NjgwODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBPYmplY3QuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00Niw3ICs0Niw4IEBAIHZvaWQgUmVnRXhwT2JqZWN0OjpmaW5p
c2hDcmVhdGlvbihWTSYgdm0KICAgICBBU1NFUlQodHlwZSgpID09IFJlZ0V4cE9iamVjdFR5cGUp
OwogfQogCi12b2lkIFJlZ0V4cE9iamVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgUmVn
RXhwT2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikK
IHsKICAgICBSZWdFeHBPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8UmVnRXhwT2JqZWN0Kj4o
Y2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkp
OwpAQCAtNTUsNiArNTYsOCBAQCB2b2lkIFJlZ0V4cE9iamVjdDo6dmlzaXRDaGlsZHJlbihKU0Nl
bGwqCiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9sYXN0SW5kZXgpOwogfQogCitE
RUZJTkVfVklTSVRfQ0hJTERSRU4oUmVnRXhwT2JqZWN0KTsKKwogYm9vbCBSZWdFeHBPYmplY3Q6
OmdldE93blByb3BlcnR5U2xvdChKU09iamVjdCogb2JqZWN0LCBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3Qp
CiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0LmgJKHJldmlzaW9uIDI2ODA4NikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE9iamVjdC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xMzMsNyArMTMzLDggQEAgcHJpdmF0ZToKICAgICBKU19FWFBPUlRfUFJJVkFURSBS
ZWdFeHBPYmplY3QoVk0mLCBTdHJ1Y3R1cmUqLCBSZWdFeHAqKTsKICAgICBKU19FWFBPUlRfUFJJ
VkFURSB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENo
aWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJF
TjsKKy8vICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3Im
KTsKIAogICAgIGJvb2wgbGFzdEluZGV4SXNXcml0YWJsZSgpIGNvbnN0CiAgICAgewpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVkQXJndW1lbnRzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29wZWRBcmd1bWVudHMuY3Bw
CShyZXZpc2lvbiAyNjgwODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29w
ZWRBcmd1bWVudHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05OCw3ICs5OCw4IEBAIFNjb3BlZEFy
Z3VtZW50cyogU2NvcGVkQXJndW1lbnRzOjpjcmVhdGUKICAgICByZXR1cm4gcmVzdWx0OwogfQog
Ci12b2lkIFNjb3BlZEFyZ3VtZW50czo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgU2NvcGVk
QXJndW1lbnRzOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikK
IHsKICAgICBTY29wZWRBcmd1bWVudHMqIHRoaXNPYmplY3QgPSBzdGF0aWNfY2FzdDxTY29wZWRB
cmd1bWVudHMqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmpl
Y3QsIGluZm8oKSk7CkBAIC0xMTUsNiArMTE2LDggQEAgdm9pZCBTY29wZWRBcmd1bWVudHM6OnZp
c2l0Q2hpbGRyZW4oSlNDZQogICAgIH0KIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKFNjb3Bl
ZEFyZ3VtZW50cyk7CisKIFN0cnVjdHVyZSogU2NvcGVkQXJndW1lbnRzOjpjcmVhdGVTdHJ1Y3R1
cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlw
ZSkKIHsKICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJv
dG90eXBlLCBUeXBlSW5mbyhTY29wZWRBcmd1bWVudHNUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGlu
Zm8oKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29wZWRBcmd1bWVu
dHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29wZWRB
cmd1bWVudHMuaAkocmV2aXNpb24gMjY4MDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU2NvcGVkQXJndW1lbnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTY0LDcgKzY0LDggQEAg
cHVibGljOgogICAgIC8vIENyZWF0ZXMgYW4gYXJndW1lbnRzIG9iamVjdCBieSBjb3B5aW5nIHRo
ZSBhcmd1bWVudHMgZnJvbSBhIHdlbGwtZGVmaW5lZCBzdGFjayBsb2NhdGlvbi4KICAgICBzdGF0
aWMgU2NvcGVkQXJndW1lbnRzKiBjcmVhdGVCeUNvcHlpbmdGcm9tKFZNJiwgU3RydWN0dXJlKiwg
UmVnaXN0ZXIqIGFyZ3VtZW50c1N0YXJ0LCB1bnNpZ25lZCB0b3RhbExlbmd0aCwgSlNGdW5jdGlv
biogY2FsbGVlLCBTY29wZWRBcmd1bWVudHNUYWJsZSosIEpTTGV4aWNhbEVudmlyb25tZW50Kik7
CiAgICAgCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRv
ciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CisvLyAgICBzdGF0aWMgdm9pZCB2aXNp
dENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CiAgICAgCiAgICAgdWludDMyX3QgaW50
ZXJuYWxMZW5ndGgoKSBjb25zdAogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1NwYXJzZUFycmF5VmFsdWVNYXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1NwYXJzZUFycmF5VmFsdWVNYXAuY3BwCShyZXZpc2lvbiAyNjgw
ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TcGFyc2VBcnJheVZhbHVlTWFw
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjEwLDcgKzIxMCw4IEBAIEpTVmFsdWUgU3BhcnNlQXJy
YXlFbnRyeTo6Z2V0Tm9uU3BhcnNlTW8KICAgICByZXR1cm4gQmFzZTo6Z2V0KCk7CiB9CiAKLXZv
aWQgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgU3BhcnNl
QXJyYXlWYWx1ZU1hcDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0
b3IpCiB7CiAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCogdGhpc09iamVjdCA9IGpzQ2FzdDxTcGFy
c2VBcnJheVZhbHVlTWFwKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0
aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtMjIzLDUgKzIyNCw3IEBAIHZvaWQgU3BhcnNlQXJyYXlW
YWx1ZU1hcDo6dmlzaXRDaGlsZHJlbigKICAgICB2aXNpdG9yLnJlcG9ydEV4dHJhTWVtb3J5Vmlz
aXRlZCh0aGlzT2JqZWN0LT5tX3JlcG9ydGVkQ2FwYWNpdHkgKiBzaXplb2YoTWFwOjpLZXlWYWx1
ZVBhaXJUeXBlKSk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihTcGFyc2VBcnJheVZhbHVl
TWFwKTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1NwYXJzZUFycmF5VmFsdWVNYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TcGFyc2VBcnJheVZhbHVlTWFwLmgJKHJldmlzaW9uIDI2ODA4
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NwYXJzZUFycmF5VmFsdWVNYXAu
aAkod29ya2luZyBjb3B5KQpAQCAtMTE1LDcgKzExNSw4IEBAIHB1YmxpYzoKICAgICAKICAgICBz
dGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpT
VmFsdWUgcHJvdG90eXBlKTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOworLy8gICAgc3Rh
dGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwogCiAgICAgYm9v
bCBzcGFyc2VNb2RlKCkKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TdGFja0ZyYW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TdGFja0ZyYW1lLmNwcAkocmV2aXNpb24gMjY4MDg2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU3RhY2tGcmFtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0MiwxMyAr
MTQyLDE5IEBAIFN0cmluZyBTdGFja0ZyYW1lOjp0b1N0cmluZyhWTSYgdm0pIGNvbnMKICAgICBy
ZXR1cm4gdHJhY2VCdWlsZC50b1N0cmluZygpLmltcGwoKTsKIH0KIAotdm9pZCBTdGFja0ZyYW1l
Ojp2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQotewotICAgIGlmIChtX2NhbGxl
ZSkKLSAgICAgICAgdmlzaXRvci5hcHBlbmQobV9jYWxsZWUpOwotICAgIGlmIChtX2NvZGVCbG9j
aykKLSAgICAgICAgdmlzaXRvci5hcHBlbmQobV9jb2RlQmxvY2spOwotfQorLy90ZW1wbGF0ZTx0
eXBlbmFtZSBWaXNpdG9yPgorLy92b2lkIFN0YWNrRnJhbWU6OnZpc2l0Q2hpbGRyZW4oVmlzaXRv
ciYgdmlzaXRvcikKKy8veworLy8gICAgaWYgKG1fY2FsbGVlKQorLy8gICAgICAgIHZpc2l0b3Iu
YXBwZW5kKG1fY2FsbGVlKTsKKy8vICAgIGlmIChtX2NvZGVCbG9jaykKKy8vICAgICAgICB2aXNp
dG9yLmFwcGVuZChtX2NvZGVCbG9jayk7CisvL30KKy8vCisvL3RlbXBsYXRlPD4KKy8vdm9pZCBT
dGFja0ZyYW1lOjp2aXNpdENoaWxkcmVuPFNsb3RWaXNpdG9yPihTbG90VmlzaXRvciYpOworLy90
ZW1wbGF0ZTw+CisvL3ZvaWQgU3RhY2tGcmFtZTo6dmlzaXRDaGlsZHJlbjxEZWJ1Z1Nsb3RWaXNp
dG9yPihEZWJ1Z1Nsb3RWaXNpdG9yJik7CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdGFja0ZyYW1lLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RhY2tGcmFtZS5oCShyZXZpc2lvbiAyNjgw
ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdGFja0ZyYW1lLmgJKHdvcmtp
bmcgY29weSkKQEAgLTM1LDcgKzM1LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIENvZGVC
bG9jazsKIGNsYXNzIEpTT2JqZWN0OwotY2xhc3MgU2xvdFZpc2l0b3I7CisvL2NsYXNzIFNsb3RW
aXNpdG9yOwogCiBjbGFzcyBTdGFja0ZyYW1lIHsKIHB1YmxpYzoKQEAgLTU4LDcgKzU4LDcgQEAg
cHVibGljOgogICAgICAgICByZXR1cm4gbV9ieXRlY29kZUluZGV4OwogICAgIH0KICAgICAKLSAg
ICB2b2lkIHZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBWaXNpdG9yPiB2b2lkIHZpc2l0Q2hpbGRyZW4oVmlzaXRvciYpOwogICAgIGJvb2wgaXNNYXJr
ZWQoVk0mIHZtKSBjb25zdCB7IHJldHVybiAoIW1fY2FsbGVlIHx8IHZtLmhlYXAuaXNNYXJrZWQo
bV9jYWxsZWUuZ2V0KCkpKSAmJiAoIW1fY29kZUJsb2NrIHx8IHZtLmhlYXAuaXNNYXJrZWQobV9j
b2RlQmxvY2suZ2V0KCkpKTsgfQogCiBwcml2YXRlOgpAQCAtNjksNSArNjksMTQgQEAgcHJpdmF0
ZToKICAgICBib29sIG1faXNXYXNtRnJhbWUgeyBmYWxzZSB9OwogfTsKIAordGVtcGxhdGU8dHlw
ZW5hbWUgVmlzaXRvcj4KK3ZvaWQgU3RhY2tGcmFtZTo6dmlzaXRDaGlsZHJlbihWaXNpdG9yJiB2
aXNpdG9yKQoreworICAgIGlmIChtX2NhbGxlZSkKKyAgICAgICAgdmlzaXRvci5hcHBlbmQobV9j
YWxsZWUpOworICAgIGlmIChtX2NvZGVCbG9jaykKKyAgICAgICAgdmlzaXRvci5hcHBlbmQobV9j
b2RlQmxvY2spOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCShyZXZpc2lvbiAyNjgwODYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMjc5LDcgKzEyNzksOCBAQCB2b2lkIFN0cnVjdHVyZTo6ZGlkVHJhbnNpdGlvbkZyb21U
aGlzU3RyCiAgICAgICAgIG1fdHJhbnNpdGlvbldhdGNocG9pbnRTZXQuZmlyZUFsbCh2bSgpLCBT
dHJ1Y3R1cmVGaXJlRGV0YWlsKHRoaXMpKTsKIH0KIAotdm9pZCBTdHJ1Y3R1cmU6OnZpc2l0Q2hp
bGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVu
YW1lIFZpc2l0b3I+Cit2b2lkIFN0cnVjdHVyZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGws
IFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgU3RydWN0dXJlKiB0aGlzT2JqZWN0ID0ganNDYXN0
PFN0cnVjdHVyZSo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09i
amVjdCwgaW5mbygpKTsKQEAgLTEzMDcsNiArMTMwOCw4IEBAIHZvaWQgU3RydWN0dXJlOjp2aXNp
dENoaWxkcmVuKEpTQ2VsbCogY2UKICAgICAgICAgdGhpc09iamVjdC0+bV9wcm9wZXJ0eVRhYmxl
VW5zYWZlLmNsZWFyKCk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihTdHJ1Y3R1cmUpOwor
CiBib29sIFN0cnVjdHVyZTo6aXNDaGVhcER1cmluZ0dDKFZNJiB2bSkKIHsKICAgICAvLyBGSVhN
RTogV2UgY291bGQgbWFrZSB0aGlzIGV2ZW4gc2FmZXIgYnkgcmV0dXJuaW5nIGZhbHNlIGlmIHRo
aXMgc3RydWN0dXJlJ3MgcHJvcGVydHkgdGFibGUKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1N0cnVjdHVyZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1N0cnVjdHVyZS5oCShyZXZpc2lvbiAyNjgwODYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAkod29ya2luZyBjb3B5KQpAQCAtMzA3LDcgKzMw
Nyw4IEBAIHB1YmxpYzoKICAgICBKU1ZhbHVlIHByb3RvdHlwZUZvckxvb2t1cChKU0dsb2JhbE9i
amVjdCosIEpTQ2VsbCogYmFzZSkgY29uc3Q7CiAgICAgU3RydWN0dXJlQ2hhaW4qIHByb3RvdHlw
ZUNoYWluKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU09iamVjdCogYmFzZSkgY29uc3Q7CiAgICAg
U3RydWN0dXJlQ2hhaW4qIHByb3RvdHlwZUNoYWluKEpTR2xvYmFsT2JqZWN0KiwgSlNPYmplY3Qq
IGJhc2UpIGNvbnN0OwotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xv
dFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOworLy8gICAgc3RhdGljIHZv
aWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwogICAgIAogICAgIC8vIEEg
U3RydWN0dXJlIGlzIGNoZWFwIHRvIG1hcmsgZHVyaW5nIEdDIGlmIGRvaW5nIHNvIHdvdWxkIG9u
bHkgYWRkIGEgc21hbGwgYW5kIGJvdW5kZWQgYW1vdW50CiAgICAgLy8gdG8gb3VyIGhlYXAgZm9v
dHByaW50LiBGb3IgZXhhbXBsZSwgaWYgdGhlIHN0cnVjdHVyZSByZWZlcnMgdG8gYSBnbG9iYWwg
b2JqZWN0IHRoYXQgaXMgbm90CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
dHJ1Y3R1cmVDaGFpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU3RydWN0dXJlQ2hhaW4uY3BwCShyZXZpc2lvbiAyNjgwODYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVDaGFpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTY2LDcgKzY2LDggQEAgdm9pZCBTdHJ1Y3R1cmVDaGFpbjo6ZmluaXNoQ3JlYXRpb24oVk0mIAog
ICAgIH0KIH0KIAotdm9pZCBTdHJ1Y3R1cmVDaGFpbjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNl
bGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3Zv
aWQgU3RydWN0dXJlQ2hhaW46OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2
aXNpdG9yKQogewogICAgIFN0cnVjdHVyZUNoYWluKiB0aGlzT2JqZWN0ID0ganNDYXN0PFN0cnVj
dHVyZUNoYWluKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2Jq
ZWN0LCBpbmZvKCkpOwpAQCAtODAsNCArODEsNiBAQCB2b2lkIFN0cnVjdHVyZUNoYWluOjp2aXNp
dENoaWxkcmVuKEpTQ2VsCiAgICAgfQogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oU3RydWN0
dXJlQ2hhaW4pOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1N0cnVjdHVyZUNoYWluLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlQ2hhaW4uaAkocmV2aXNpb24gMjY4MDg2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlQ2hhaW4uaAkod29ya2luZyBj
b3B5KQpAQCAtNTEsNyArNTEsOCBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgU3RydWN0dXJlQ2hh
aW4qIGNyZWF0ZShWTSYsIEpTT2JqZWN0Kik7CiAgICAgU3RydWN0dXJlSUQqIGhlYWQoKSB7IHJl
dHVybiBtX3ZlY3Rvci5nZXQoKTsgfQotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlND
ZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOworLy8gICAg
c3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwogCiAgICAg
c3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCiAgICAgewpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlUmFyZURhdGEuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZVJhcmVEYXRhLmNwcAkocmV2
aXNpb24gMjY4MDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJl
UmFyZURhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Nyw3ICs2Nyw4IEBAIFN0cnVjdHVyZVJh
cmVEYXRhOjpTdHJ1Y3R1cmVSYXJlRGF0YShWTSYKICAgICAgICAgbV9wcmV2aW91cy5zZXQodm0s
IHRoaXMsIHByZXZpb3VzKTsKIH0KIAotdm9pZCBTdHJ1Y3R1cmVSYXJlRGF0YTo6dmlzaXRDaGls
ZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5h
bWUgVmlzaXRvcj4KK3ZvaWQgU3RydWN0dXJlUmFyZURhdGE6OnZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFN0cnVjdHVyZVJhcmVEYXRhKiB0aGlz
T2JqZWN0ID0ganNDYXN0PFN0cnVjdHVyZVJhcmVEYXRhKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dD
X09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtODYsNiArODcsOCBAQCB2
b2lkIFN0cnVjdHVyZVJhcmVEYXRhOjp2aXNpdENoaWxkcmVuKEpTCiAgICAgfQogfQogCitERUZJ
TkVfVklTSVRfQ0hJTERSRU4oU3RydWN0dXJlUmFyZURhdGEpOworCiAvLyAtLS0tLS0tLS0tLSBD
YWNoZWQgc3BlY2lhbCBwcm9wZXJ0aWVzIGhlbHBlciB3YXRjaHBvaW50IGNsYXNzZXMgLS0tLS0t
LS0tLS0KIAogY2xhc3MgQ2FjaGVkU3BlY2lhbFByb3BlcnR5QWRhcHRpdmVJbmZlcnJlZFByb3Bl
cnR5VmFsdWVXYXRjaHBvaW50IGZpbmFsIDogcHVibGljIEFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0
eVZhbHVlV2F0Y2hwb2ludEJhc2UgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU3RydWN0dXJlUmFyZURhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TdHJ1Y3R1cmVSYXJlRGF0YS5oCShyZXZpc2lvbiAyNjgwODYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVSYXJlRGF0YS5oCSh3b3JraW5nIGNv
cHkpCkBAIC02OCw3ICs2OCw4IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
bmVlZHNEZXN0cnVjdGlvbiA9IHRydWU7CiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwq
KTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3Im
KTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOworLy8gICAgc3RhdGljIHZvaWQgdmlzaXRD
aGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwogCiAgICAgc3RhdGljIFN0cnVjdHVyZSog
Y3JlYXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlIHByb3RvdHlwZSk7
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJvbFRhYmxlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TeW1ib2xUYWJsZS5j
cHAJKHJldmlzaW9uIDI2ODA4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5
bWJvbFRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTIsNyArOTIsOCBAQCB2b2lkIFN5bWJv
bFRhYmxlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24o
dm0pOwogfQogCi12b2lkIFN5bWJvbFRhYmxlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogdGhpc0Nl
bGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3Zv
aWQgU3ltYm9sVGFibGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiB0aGlzQ2VsbCwgVmlzaXRvciYg
dmlzaXRvcikKIHsKICAgICBTeW1ib2xUYWJsZSogdGhpc1N5bWJvbFRhYmxlID0ganNDYXN0PFN5
bWJvbFRhYmxlKj4odGhpc0NlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhp
c1N5bWJvbFRhYmxlLCBpbmZvKCkpOwpAQCAtMTA4LDYgKzEwOSw4IEBAIHZvaWQgU3ltYm9sVGFi
bGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiAKICAgICB0aGlzU3ltYm9sVGFibGUtPm1fbG9jYWxU
b0VudHJ5ID0gbnVsbHB0cjsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKFN5bWJvbFRhYmxl
KTsKKwogY29uc3QgU3ltYm9sVGFibGU6OkxvY2FsVG9FbnRyeVZlYyYgU3ltYm9sVGFibGU6Omxv
Y2FsVG9FbnRyeShjb25zdCBDb25jdXJyZW50SlNMb2NrZXImKQogewogICAgIGlmIChVTkxJS0VM
WSghbV9sb2NhbFRvRW50cnkpKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TeW1ib2xUYWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1N5bWJvbFRhYmxlLmgJKHJldmlzaW9uIDI2ODA4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1N5bWJvbFRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTczMyw3ICs3MzMs
OCBAQCBwdWJsaWM6CiAgICAgICAgIG1fc2luZ2xldG9uLm5vdGlmeVdyaXRlKHZtLCB0aGlzLCBz
Y29wZSwgcmVhc29uKTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpT
Q2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKKy8vICAg
IHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKIAogICAg
IERFQ0xBUkVfRVhQT1JUX0lORk87CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1dlYWtNYXBJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9XZWFrTWFwSW1wbC5jcHAJKHJldmlzaW9uIDI2ODA4NikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1dlYWtNYXBJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzks
MTQgKzM5LDE1IEBAIHZvaWQgV2Vha01hcEltcGw8V2Vha01hcEJ1Y2tldD46OmRlc3Ryb3kKICAg
ICBzdGF0aWNfY2FzdDxXZWFrTWFwSW1wbCo+KGNlbGwpLT5+V2Vha01hcEltcGwoKTsKIH0KIAot
dGVtcGxhdGUgPHR5cGVuYW1lIFdlYWtNYXBCdWNrZXQ+Ci12b2lkIFdlYWtNYXBJbXBsPFdlYWtN
YXBCdWNrZXQ+Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0
b3IpCi17Ci0gICAgV2Vha01hcEltcGwqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8V2Vha01hcEltcGwq
PihjZWxsKTsKLSAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8o
KSk7Ci0gICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKLSAgICB2
aXNpdG9yLnJlcG9ydEV4dHJhTWVtb3J5VmlzaXRlZCh0aGlzT2JqZWN0LT5tX2NhcGFjaXR5ICog
c2l6ZW9mKFdlYWtNYXBCdWNrZXQpKTsKLX0KKy8vdGVtcGxhdGU8dHlwZW5hbWUgV2Vha01hcEJ1
Y2tldD4KKy8vdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KKy8vdm9pZCBXZWFrTWFwSW1wbDxX
ZWFrTWFwQnVja2V0Pjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0
b3IpCisvL3sKKy8vICAgIFdlYWtNYXBJbXBsKiB0aGlzT2JqZWN0ID0ganNDYXN0PFdlYWtNYXBJ
bXBsKj4oY2VsbCk7CisvLyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3Qs
IGluZm8oKSk7CisvLyAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3Ip
OworLy8gICAgdmlzaXRvci5yZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQodGhpc09iamVjdC0+bV9j
YXBhY2l0eSAqIHNpemVvZihXZWFrTWFwQnVja2V0KSk7CisvL30KIAogdGVtcGxhdGUgPHR5cGVu
YW1lIFdlYWtNYXBCdWNrZXQ+CiBzaXplX3QgV2Vha01hcEltcGw8V2Vha01hcEJ1Y2tldD46OmVz
dGltYXRlZFNpemUoSlNDZWxsKiBjZWxsLCBWTSYgdm0pCkBAIC01NSwyOCArNTYsMzAgQEAgc2l6
ZV90IFdlYWtNYXBJbXBsPFdlYWtNYXBCdWNrZXQ+Ojplc3RpbQogICAgIHJldHVybiBCYXNlOjpl
c3RpbWF0ZWRTaXplKHRoaXNPYmplY3QsIHZtKSArIChzaXplb2YoV2Vha01hcEltcGwpIC0gc2l6
ZW9mKEJhc2UpKSArIHRoaXNPYmplY3QtPm1fY2FwYWNpdHkgKiBzaXplb2YoV2Vha01hcEJ1Y2tl
dCk7CiB9CiAKLXRlbXBsYXRlIDw+Ci12b2lkIFdlYWtNYXBJbXBsPFdlYWtNYXBCdWNrZXQ8V2Vh
a01hcEJ1Y2tldERhdGFLZXk+Pjo6dmlzaXRPdXRwdXRDb25zdHJhaW50cyhKU0NlbGwqLCBTbG90
VmlzaXRvciYpCi17Ci0gICAgLy8gT25seSBKU1dlYWtNYXAgbmVlZHMgdG8gaGFydmVzdCB2YWx1
ZSByZWZlcmVuY2VzCi19Ci0KLXRlbXBsYXRlIDw+Ci12b2lkIFdlYWtNYXBJbXBsPFdlYWtNYXBC
dWNrZXQ8V2Vha01hcEJ1Y2tldERhdGFLZXlWYWx1ZT4+Ojp2aXNpdE91dHB1dENvbnN0cmFpbnRz
KEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCi17Ci0gICAgVk0mIHZtID0gdmlz
aXRvci52bSgpOwotICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8V2Vha01hcEltcGwqPihj
ZWxsKTsKLSAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKHRoaXNPYmplY3QtPmNlbGxMb2NrKCkp
OwotICAgIGF1dG8qIGJ1ZmZlciA9IHRoaXNPYmplY3QtPmJ1ZmZlcigpOwotICAgIGZvciAodWlu
dDMyX3QgaW5kZXggPSAwOyBpbmRleCA8IHRoaXNPYmplY3QtPm1fY2FwYWNpdHk7ICsraW5kZXgp
IHsKLSAgICAgICAgYXV0byogYnVja2V0ID0gYnVmZmVyICsgaW5kZXg7Ci0gICAgICAgIGlmIChi
dWNrZXQtPmlzRW1wdHkoKSB8fCBidWNrZXQtPmlzRGVsZXRlZCgpKQotICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgIGlmICghdm0uaGVhcC5pc01hcmtlZChidWNrZXQtPmtleSgpKSkKLSAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBidWNrZXQtPnZpc2l0QWdncmVnYXRlKHZpc2l0
b3IpOwotICAgIH0KLX0KKy8vdGVtcGxhdGUgPD4KKy8vdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRv
cj4KKy8vdm9pZCBXZWFrTWFwSW1wbDxXZWFrTWFwQnVja2V0PFdlYWtNYXBCdWNrZXREYXRhS2V5
Pj46OnZpc2l0T3V0cHV0Q29uc3RyYWludHMoSlNDZWxsKiwgVmlzaXRvciYpCisvL3sKKy8vICAg
IC8vIE9ubHkgSlNXZWFrTWFwIG5lZWRzIHRvIGhhcnZlc3QgdmFsdWUgcmVmZXJlbmNlcworLy99
CisvLworLy90ZW1wbGF0ZSA8PgorLy90ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgorLy92b2lk
IFdlYWtNYXBJbXBsPFdlYWtNYXBCdWNrZXQ8V2Vha01hcEJ1Y2tldERhdGFLZXlWYWx1ZT4+Ojp2
aXNpdE91dHB1dENvbnN0cmFpbnRzKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKKy8v
eworLy8gICAgVk0mIHZtID0gdmlzaXRvci52bSgpOworLy8gICAgYXV0byogdGhpc09iamVjdCA9
IGpzQ2FzdDxXZWFrTWFwSW1wbCo+KGNlbGwpOworLy8gICAgYXV0byBsb2NrZXIgPSBob2xkTG9j
ayh0aGlzT2JqZWN0LT5jZWxsTG9jaygpKTsKKy8vICAgIGF1dG8qIGJ1ZmZlciA9IHRoaXNPYmpl
Y3QtPmJ1ZmZlcigpOworLy8gICAgZm9yICh1aW50MzJfdCBpbmRleCA9IDA7IGluZGV4IDwgdGhp
c09iamVjdC0+bV9jYXBhY2l0eTsgKytpbmRleCkgeworLy8gICAgICAgIGF1dG8qIGJ1Y2tldCA9
IGJ1ZmZlciArIGluZGV4OworLy8gICAgICAgIGlmIChidWNrZXQtPmlzRW1wdHkoKSB8fCBidWNr
ZXQtPmlzRGVsZXRlZCgpKQorLy8gICAgICAgICAgICBjb250aW51ZTsKKy8vICAgICAgICBpZiAo
IXZtLmhlYXAuaXNNYXJrZWQoYnVja2V0LT5rZXkoKSkpCisvLyAgICAgICAgICAgIGNvbnRpbnVl
OworLy8gICAgICAgIGJ1Y2tldC0+dmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7CisvLyAgICB9Cisv
L30KIAogdGVtcGxhdGUgPHR5cGVuYW1lIFdlYWtNYXBCdWNrZXQ+CiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBBcHBlbmRlcj4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtNYXBJ
bXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha01h
cEltcGwuaAkocmV2aXNpb24gMjY4MDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvV2Vha01hcEltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtMjAyLDcgKzIwMiw5IEBAIHB1Ymxp
YzoKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNEZXN0cnVjdGlvbiA9IHRydWU7CiAg
ICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0
Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxE
UkVOOworICAgIERFQ0xBUkVfVklTSVRfT1VUUFVUX0NPTlNUUkFJTlRTOworLy8gICAgc3RhdGlj
IHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwogCiAgICAgc3RhdGlj
IHNpemVfdCBlc3RpbWF0ZWRTaXplKEpTQ2VsbCosIFZNJik7CiAKQEAgLTMxMSw3ICszMTMsNyBA
QCBwdWJsaWM6CiAgICAgICAgIHJldHVybiB2bS53ZWFrU2V0U3BhY2U8bW9kZT4oKTsKICAgICB9
CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdE91dHB1dENvbnN0cmFpbnRzKEpTQ2VsbCosIFNsb3RW
aXNpdG9yJik7CisvLyAgICBzdGF0aWMgdm9pZCB2aXNpdE91dHB1dENvbnN0cmFpbnRzKEpTQ2Vs
bCosIFNsb3RWaXNpdG9yJik7CiAgICAgdm9pZCBmaW5hbGl6ZVVuY29uZGl0aW9uYWxseShWTSYp
OwogCiBwcml2YXRlOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha01h
cEltcGxJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvV2Vha01hcEltcGxJbmxpbmVzLmgJKHJldmlzaW9uIDI2ODA4NikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1dlYWtNYXBJbXBsSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yOSw2ICsyOSwxNiBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAordGVtcGxhdGU8dHlwZW5hbWUg
V2Vha01hcEJ1Y2tldD4KK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFdlYWtNYXBJ
bXBsPFdlYWtNYXBCdWNrZXQ+Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYg
dmlzaXRvcikKK3sKKyAgICBXZWFrTWFwSW1wbCogdGhpc09iamVjdCA9IGpzQ2FzdDxXZWFrTWFw
SW1wbCo+KGNlbGwpOworICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwg
aW5mbygpKTsKKyAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwor
ICAgIHZpc2l0b3IucmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKHRoaXNPYmplY3QtPm1fY2FwYWNp
dHkgKiBzaXplb2YoV2Vha01hcEJ1Y2tldCkpOworfQorCiAvLyBOb3RlIHRoYXQgdGhpcyBmdW5j
dGlvbiBjYW4gYmUgZXhlY3V0ZWQgaW4gcGFyYWxsZWwgYXMgbG9uZyBhcyB0aGUgbXV0YXRvciBz
dG9wcy4KIHRlbXBsYXRlPHR5cGVuYW1lIFdlYWtNYXBCdWNrZXQ+CiB2b2lkIFdlYWtNYXBJbXBs
PFdlYWtNYXBCdWNrZXQ+OjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxseShWTSYgdm0pCkBAIC01Miw0
ICs2MiwyOSBAQCB2b2lkIFdlYWtNYXBJbXBsPFdlYWtNYXBCdWNrZXQ+OjpmaW5hbGl6CiAgICAg
ICAgIHJlaGFzaChSZWhhc2hNb2RlOjpSZW1vdmVCYXRjaGluZyk7CiB9CiAKK3RlbXBsYXRlIDw+
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBXZWFrTWFwSW1wbDxXZWFrTWFwQnVj
a2V0PFdlYWtNYXBCdWNrZXREYXRhS2V5Pj46OnZpc2l0T3V0cHV0Q29uc3RyYWludHMoSlNDZWxs
KiwgVmlzaXRvciYpCit7CisgICAgLy8gT25seSBKU1dlYWtNYXAgbmVlZHMgdG8gaGFydmVzdCB2
YWx1ZSByZWZlcmVuY2VzCit9CisKK3RlbXBsYXRlIDw+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNp
dG9yPgordm9pZCBXZWFrTWFwSW1wbDxXZWFrTWFwQnVja2V0PFdlYWtNYXBCdWNrZXREYXRhS2V5
VmFsdWU+Pjo6dmlzaXRPdXRwdXRDb25zdHJhaW50cyhKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZp
c2l0b3IpCit7CisgICAgVk0mIHZtID0gdmlzaXRvci52bSgpOworICAgIGF1dG8qIHRoaXNPYmpl
Y3QgPSBqc0Nhc3Q8V2Vha01hcEltcGwqPihjZWxsKTsKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRM
b2NrKHRoaXNPYmplY3QtPmNlbGxMb2NrKCkpOworICAgIGF1dG8qIGJ1ZmZlciA9IHRoaXNPYmpl
Y3QtPmJ1ZmZlcigpOworICAgIGZvciAodWludDMyX3QgaW5kZXggPSAwOyBpbmRleCA8IHRoaXNP
YmplY3QtPm1fY2FwYWNpdHk7ICsraW5kZXgpIHsKKyAgICAgICAgYXV0byogYnVja2V0ID0gYnVm
ZmVyICsgaW5kZXg7CisgICAgICAgIGlmIChidWNrZXQtPmlzRW1wdHkoKSB8fCBidWNrZXQtPmlz
RGVsZXRlZCgpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGlmICghdm0uaGVhcC5p
c01hcmtlZChidWNrZXQtPmtleSgpKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBi
dWNrZXQtPnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOworICAgIH0KIH0KKworfSAvLyBKU0MKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9KU0RvbGxhclZNLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvSlNEb2xsYXJWTS5jcHAJKHJldmlzaW9u
IDI2ODA4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9KU0RvbGxhclZNLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjIyLDE0ICsyMjIsMTcgQEAgcHVibGljOgogCiAgICAgdm9pZCBm
aW5pc2hDcmVhdGlvbihWTSYsIFJvb3QqKTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKLSAgICB7Ci0gICAgICAgIERv
bGxhclZNQXNzZXJ0U2NvcGUgYXNzZXJ0U2NvcGU7Ci0gICAgICAgIEVsZW1lbnQqIHRoaXNPYmpl
Y3QgPSBqc0Nhc3Q8RWxlbWVudCo+KGNlbGwpOwotICAgICAgICBBU1NFUlRfR0NfT0JKRUNUX0lO
SEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7Ci0gICAgICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4o
dGhpc09iamVjdCwgdmlzaXRvcik7Ci0gICAgICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3Qt
Pm1fcm9vdCk7Ci0gICAgfQorICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CisKKy8vICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+CisvLyAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVu
KEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKKy8vICAgIHsKKy8vICAgICAgICBEb2xs
YXJWTUFzc2VydFNjb3BlIGFzc2VydFNjb3BlOworLy8gICAgICAgIEVsZW1lbnQqIHRoaXNPYmpl
Y3QgPSBqc0Nhc3Q8RWxlbWVudCo+KGNlbGwpOworLy8gICAgICAgIEFTU0VSVF9HQ19PQkpFQ1Rf
SU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKKy8vICAgICAgICBCYXNlOjp2aXNpdENoaWxk
cmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOworLy8gICAgICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNP
YmplY3QtPm1fcm9vdCk7CisvLyAgICB9CiAKICAgICBzdGF0aWMgRWxlbWVudEhhbmRsZU93bmVy
KiBoYW5kbGVPd25lcigpOwogCkBAIC0yNDUsNiArMjQ4LDE4IEBAIHByaXZhdGU6CiAgICAgV3Jp
dGVCYXJyaWVyPFJvb3Q+IG1fcm9vdDsKIH07CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+
Cit2b2lkIEVsZW1lbnQ6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNp
dG9yKQoreworICAgIERvbGxhclZNQXNzZXJ0U2NvcGUgYXNzZXJ0U2NvcGU7CisgICAgRWxlbWVu
dCogdGhpc09iamVjdCA9IGpzQ2FzdDxFbGVtZW50Kj4oY2VsbCk7CisgICAgQVNTRVJUX0dDX09C
SkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOworICAgIEJhc2U6OnZpc2l0Q2hpbGRy
ZW4odGhpc09iamVjdCwgdmlzaXRvcik7CisgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+
bV9yb290KTsKK30KKworREVGSU5FX1ZJU0lUX0NISUxEUkVOKEVsZW1lbnQpOworCiBjbGFzcyBF
bGVtZW50SGFuZGxlT3duZXIgZmluYWwgOiBwdWJsaWMgV2Vha0hhbmRsZU93bmVyIHsKICAgICBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKQEAgLTMwMiwxOCArMzE3LDMyIEBAIHB1
YmxpYzoKICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3Qs
IHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkp
OwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiB0aGlzT2Jq
ZWN0LCBTbG90VmlzaXRvciYgdmlzaXRvcikKLSAgICB7Ci0gICAgICAgIERvbGxhclZNQXNzZXJ0
U2NvcGUgYXNzZXJ0U2NvcGU7Ci0gICAgICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhp
c09iamVjdCwgaW5mbygpKTsKLSAgICAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0
LCB2aXNpdG9yKTsKLSAgICAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHRoaXNPYmplY3QpOwot
ICAgIH0KKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOworCisvLyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBWaXNpdG9yPgorLy8gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqIHRo
aXNPYmplY3QsIFZpc2l0b3ImIHZpc2l0b3IpCisvLyAgICB7CisvLyAgICAgICAgRG9sbGFyVk1B
c3NlcnRTY29wZSBhc3NlcnRTY29wZTsKKy8vICAgICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVS
SVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CisvLyAgICAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0
aGlzT2JqZWN0LCB2aXNpdG9yKTsKKy8vICAgICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QodGhp
c09iamVjdCk7CisvLyAgICB9CiAKIHByaXZhdGU6CiAgICAgV2VhazxFbGVtZW50PiBtX2VsZW1l
bnQ7CiB9OwogCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBSb290Ojp2aXNpdENo
aWxkcmVuKEpTQ2VsbCogdGhpc09iamVjdCwgVmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBEb2xs
YXJWTUFzc2VydFNjb3BlIGFzc2VydFNjb3BlOworICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJ
VFModGhpc09iamVjdCwgaW5mbygpKTsKKyAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmpl
Y3QsIHZpc2l0b3IpOworICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdCh0aGlzT2JqZWN0KTsKK30K
KworREVGSU5FX1ZJU0lUX0NISUxEUkVOKFJvb3QpOworCiBjbGFzcyBTaW1wbGVPYmplY3QgOiBw
dWJsaWMgSlNOb25GaW5hbE9iamVjdCB7CiBwdWJsaWM6CiAgICAgU2ltcGxlT2JqZWN0KFZNJiB2
bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCkBAIC0zMzgsMTQgKzM2NywxNyBAQCBwdWJsaWM6CiAg
ICAgICAgIHJldHVybiBzaW1wbGVPYmplY3Q7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgdmlz
aXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQotICAgIHsKLSAg
ICAgICAgRG9sbGFyVk1Bc3NlcnRTY29wZSBhc3NlcnRTY29wZTsKLSAgICAgICAgU2ltcGxlT2Jq
ZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PFNpbXBsZU9iamVjdCo+KGNlbGwpOwotICAgICAgICBB
U1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7Ci0gICAgICAgIEJh
c2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7Ci0gICAgICAgIHZpc2l0b3Iu
YXBwZW5kKHRoaXNPYmplY3QtPm1faGlkZGVuVmFsdWUpOwotICAgIH0KKyAgICBERUNMQVJFX1ZJ
U0lUX0NISUxEUkVOOworCisvLyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgorLy8gICAg
c3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3Ip
CisvLyAgICB7CisvLyAgICAgICAgRG9sbGFyVk1Bc3NlcnRTY29wZSBhc3NlcnRTY29wZTsKKy8v
ICAgICAgICBTaW1wbGVPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8U2ltcGxlT2JqZWN0Kj4o
Y2VsbCk7CisvLyAgICAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBp
bmZvKCkpOworLy8gICAgICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRv
cik7CisvLyAgICAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9oaWRkZW5WYWx1ZSk7
CisvLyAgICB9CiAKICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZt
LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKICAgICB7
CkBAIC0zNzgsNiArNDEwLDE4IEBAIHByaXZhdGU6CiAgICAgV3JpdGVCYXJyaWVyPEpTQzo6VW5r
bm93bj4gbV9oaWRkZW5WYWx1ZTsKIH07CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2
b2lkIFNpbXBsZU9iamVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZp
c2l0b3IpCit7CisgICAgRG9sbGFyVk1Bc3NlcnRTY29wZSBhc3NlcnRTY29wZTsKKyAgICBTaW1w
bGVPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8U2ltcGxlT2JqZWN0Kj4oY2VsbCk7CisgICAg
QVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOworICAgIEJhc2U6
OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CisgICAgdmlzaXRvci5hcHBlbmQo
dGhpc09iamVjdC0+bV9oaWRkZW5WYWx1ZSk7Cit9CisKK0RFRklORV9WSVNJVF9DSElMRFJFTihT
aW1wbGVPYmplY3QpOworCiBjbGFzcyBJbXB1cmVHZXR0ZXIgOiBwdWJsaWMgSlNOb25GaW5hbE9i
amVjdCB7CiBwdWJsaWM6CiAgICAgSW1wdXJlR2V0dGVyKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUpCkBAIC00MzQsMTQgKzQ3OCwxNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBCYXNl
OjpnZXRPd25Qcm9wZXJ0eVNsb3Qob2JqZWN0LCBnbG9iYWxPYmplY3QsIG5hbWUsIHNsb3QpOwog
ICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90
VmlzaXRvciYgdmlzaXRvcikKLSAgICB7Ci0gICAgICAgIERvbGxhclZNQXNzZXJ0U2NvcGUgYXNz
ZXJ0U2NvcGU7Ci0gICAgICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2VsbCwgaW5mbygp
KTsKLSAgICAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbihjZWxsLCB2aXNpdG9yKTsKLSAgICAgICAg
SW1wdXJlR2V0dGVyKiB0aGlzT2JqZWN0ID0ganNDYXN0PEltcHVyZUdldHRlcio+KGNlbGwpOwot
ICAgICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2RlbGVnYXRlKTsKLSAgICB9Cisg
ICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKKworLy8gICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlz
aXRvcj4KKy8vICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBWaXNp
dG9yJiB2aXNpdG9yKQorLy8gICAgeworLy8gICAgICAgIERvbGxhclZNQXNzZXJ0U2NvcGUgYXNz
ZXJ0U2NvcGU7CisvLyAgICAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjZWxsLCBpbmZv
KCkpOworLy8gICAgICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4oY2VsbCwgdmlzaXRvcik7CisvLyAg
ICAgICAgSW1wdXJlR2V0dGVyKiB0aGlzT2JqZWN0ID0ganNDYXN0PEltcHVyZUdldHRlcio+KGNl
bGwpOworLy8gICAgICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fZGVsZWdhdGUpOwor
Ly8gICAgfQogCiAgICAgdm9pZCBzZXREZWxlZ2F0ZShWTSYgdm0sIEpTT2JqZWN0KiBkZWxlZ2F0
ZSkKICAgICB7CkBAIC00NTIsNiArNDk5LDE4IEBAIHByaXZhdGU6CiAgICAgV3JpdGVCYXJyaWVy
PEpTT2JqZWN0PiBtX2RlbGVnYXRlOwogfTsKIAordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4K
K3ZvaWQgSW1wdXJlR2V0dGVyOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYg
dmlzaXRvcikKK3sKKyAgICBEb2xsYXJWTUFzc2VydFNjb3BlIGFzc2VydFNjb3BlOworICAgIEFT
U0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2VsbCwgaW5mbygpKTsKKyAgICBCYXNlOjp2aXNpdENo
aWxkcmVuKGNlbGwsIHZpc2l0b3IpOworICAgIEltcHVyZUdldHRlciogdGhpc09iamVjdCA9IGpz
Q2FzdDxJbXB1cmVHZXR0ZXIqPihjZWxsKTsKKyAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0
LT5tX2RlbGVnYXRlKTsKK30KKworREVGSU5FX1ZJU0lUX0NISUxEUkVOKEltcHVyZUdldHRlcik7
CisKIHN0YXRpYyBKU0NfREVDTEFSRV9DVVNUT01fR0VUVEVSKGN1c3RvbUdldHRlclZhbHVlR2V0
dGVyKTsKIHN0YXRpYyBKU0NfREVDTEFSRV9DVVNUT01fR0VUVEVSKGN1c3RvbUdldHRlckFjZXNz
b3JHZXR0ZXIpOwogCkBAIC0zNTM2LDEzICszNTk1LDE2IEBAIHZvaWQgSlNEb2xsYXJWTTo6YWRk
Q29uc3RydWN0aWJsZUZ1bmN0aW8KICAgICBwdXREaXJlY3Qodm0sIGlkZW50aWZpZXIsIEpTRnVu
Y3Rpb246OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBhcmd1bWVudHMsIGlkZW50aWZpZXIuc3Ry
aW5nKCksIGZ1bmN0aW9uLCBOb0ludHJpbnNpYywgZnVuY3Rpb24pLCBqc0RvbGxhclZNUHJvcGVy
dHlBdHRyaWJ1dGVzKTsKIH0KIAotdm9pZCBKU0RvbGxhclZNOjp2aXNpdENoaWxkcmVuKEpTQ2Vs
bCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
Pgordm9pZCBKU0RvbGxhclZNOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYg
dmlzaXRvcikKIHsKICAgICBKU0RvbGxhclZNKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTRG9sbGFy
Vk0qPihjZWxsKTsKICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3Ip
OwogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fb2JqZWN0RG9pbmdTaWRlRWZmZWN0
UHV0V2l0aG91dENvcnJlY3RTbG90U3RhdHVzU3RydWN0dXJlKTsKIH0KIAorREVGSU5FX1ZJU0lU
X0NISUxEUkVOKEpTRG9sbGFyVk0pOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogSUdOT1JFX1dB
Uk5JTkdTX0VORApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0pTRG9sbGFyVk0u
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvSlNEb2xsYXJWTS5o
CShyZXZpc2lvbiAyNjgwODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvSlNEb2xs
YXJWTS5oCSh3b3JraW5nIGNvcHkpCkBAIC03NCw3ICs3NCw4IEBAIHByaXZhdGU6CiAgICAgdm9p
ZCBhZGRGdW5jdGlvbihWTSYsIEpTR2xvYmFsT2JqZWN0KiwgY29uc3QgY2hhciogbmFtZSwgTmF0
aXZlRnVuY3Rpb24sIHVuc2lnbmVkIGFyZ3VtZW50cyk7CiAgICAgdm9pZCBhZGRDb25zdHJ1Y3Rp
YmxlRnVuY3Rpb24oVk0mLCBKU0dsb2JhbE9iamVjdCosIGNvbnN0IGNoYXIqIG5hbWUsIE5hdGl2
ZUZ1bmN0aW9uLCB1bnNpZ25lZCBhcmd1bWVudHMpOwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRD
aGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERS
RU47CisvLyAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9y
Jik7CiAKICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX29iamVjdERvaW5nU2lkZUVmZmVj
dFB1dFdpdGhvdXRDb3JyZWN0U2xvdFN0YXR1c1N0cnVjdHVyZTsKIH07CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1RvV2FzbUlDQ2FsbGVlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1RvV2FzbUlDQ2FsbGVlLmNwcAkocmV2
aXNpb24gMjY4MDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNUb1dhc21J
Q0NhbGxlZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDcgKzQ5LDggQEAgU3RydWN0dXJlKiBK
U1RvV2FzbUlDQ2FsbGVlOjpjcmVhdGVTdHJ1YwogICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0
ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKEpTQ2FsbGVlVHlwZSwgU3Ry
dWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwogfQogCi12b2lkIEpTVG9XYXNtSUNDYWxsZWU6OnZpc2l0
Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5
cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTVG9XYXNtSUNDYWxsZWU6OnZpc2l0Q2hpbGRyZW4oSlND
ZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTVG9XYXNtSUNDYWxsZWUqIHRo
aXNPYmplY3QgPSBqc0Nhc3Q8SlNUb1dhc21JQ0NhbGxlZSo+KGNlbGwpOwogICAgIEFTU0VSVF9H
Q19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTU4LDYgKzU5LDggQEAg
dm9pZCBKU1RvV2FzbUlDQ2FsbGVlOjp2aXNpdENoaWxkcmVuKEpTQwogICAgIHZpc2l0b3IuYXBw
ZW5kKHRoaXNPYmplY3QtPm1fZnVuY3Rpb24pOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4o
SlNUb1dhc21JQ0NhbGxlZSk7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gRU5B
QkxFKFdFQkFTU0VNQkxZKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNU
b1dhc21JQ0NhbGxlZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL0pTVG9XYXNtSUNDYWxsZWUuaAkocmV2aXNpb24gMjY4MDg2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvSlNUb1dhc21JQ0NhbGxlZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01
Niw3ICs1Niw4IEBAIHByaXZhdGU6CiAgICAgSlNUb1dhc21JQ0NhbGxlZShWTSYgdm0sIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlKQogICAgICAgICA6
IEJhc2Uodm0sIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKQogICAgIHsgfQotICAgIHN0YXRpYyB2
b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJ
U0lUX0NISUxEUkVOOworLy8gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBT
bG90VmlzaXRvciYpOwogCiAgICAgV3JpdGVCYXJyaWVyPFdlYkFzc2VtYmx5RnVuY3Rpb24+IG1f
ZnVuY3Rpb247CiB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJB
c3NlbWJseUNvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9jay5jcHAJKHJldmlzaW9uIDI2ODA4NikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC04Miw3ICs4Miw4IEBAIHZvaWQgSlNXZWJBc3NlbWJseUNvZGVC
bG9jazo6Y2xlYXJKU0NhbGwKICAgICAgICAgKCppdGVyKS0+dW5saW5rKHZtKTsKIH0KIAotdm9p
ZCBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xv
dFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1dl
YkFzc2VtYmx5Q29kZUJsb2NrOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYg
dmlzaXRvcikKIHsKICAgICBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKiB0aGlzT2JqZWN0ID0ganND
YXN0PEpTV2ViQXNzZW1ibHlDb2RlQmxvY2sqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNU
X0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC05MCw2ICs5MSw4IEBAIHZvaWQgSlNX
ZWJBc3NlbWJseUNvZGVCbG9jazo6dmlzaXRDaGlsZHIKICAgICBCYXNlOjp2aXNpdENoaWxkcmVu
KHRoaXNPYmplY3QsIHZpc2l0b3IpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNXZWJB
c3NlbWJseUNvZGVCbG9jayk7CisKIHZvaWQgSlNXZWJBc3NlbWJseUNvZGVCbG9jazo6ZmluYWxp
emVVbmNvbmRpdGlvbmFsbHkoVk0mIHZtKQogewogICAgIGZvciAoYXV0byBpdGVyID0gbV9jYWxs
TGlua0luZm9zLmJlZ2luKCk7ICEhaXRlcjsgKytpdGVyKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suaAkocmV2
aXNpb24gMjY4MDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3Nl
bWJseUNvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC04Niw3ICs4Niw4IEBAIHByaXZhdGU6
CiAgICAgREVDTEFSRV9FWFBPUlRfSU5GTzsKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVl
ZHNEZXN0cnVjdGlvbiA9IHRydWU7CiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsK
LSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7Cisg
ICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKKy8vICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKIAogICAgIFJlZjxXYXNtOjpDb2RlQmxvY2s+IG1f
Y29kZUJsb2NrOwogICAgIFZlY3RvcjxNYWNyb0Fzc2VtYmxlckNvZGVSZWY8V2FzbUVudHJ5UHRy
VGFnPj4gbV93YXNtVG9KU0V4aXRTdHViczsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL2pzL0pTV2ViQXNzZW1ibHlHbG9iYWwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlHbG9iYWwuY3BwCShyZXZpc2lvbiAyNjgw
ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5R2xvYmFs
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzEsNyArNzEsOCBAQCB2b2lkIEpTV2ViQXNzZW1ibHlH
bG9iYWw6OmRlc3Ryb3koSlNDZWxsCiAgICAgc3RhdGljX2Nhc3Q8SlNXZWJBc3NlbWJseUdsb2Jh
bCo+KGNlbGwpLT5KU1dlYkFzc2VtYmx5R2xvYmFsOjp+SlNXZWJBc3NlbWJseUdsb2JhbCgpOwog
fQogCi12b2lkIEpTV2ViQXNzZW1ibHlHbG9iYWw6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxs
LCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lk
IEpTV2ViQXNzZW1ibHlHbG9iYWw6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBWaXNpdG9y
JiB2aXNpdG9yKQogewogICAgIEpTV2ViQXNzZW1ibHlHbG9iYWwqIHRoaXNPYmplY3QgPSBqc0Nh
c3Q8SlNXZWJBc3NlbWJseUdsb2JhbCo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5I
RVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTgwLDYgKzgxLDggQEAgdm9pZCBKU1dlYkFz
c2VtYmx5R2xvYmFsOjp2aXNpdENoaWxkcmVuKAogICAgIHRoaXNPYmplY3QtPmdsb2JhbCgpLT52
aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTV2Vi
QXNzZW1ibHlHbG9iYWwpOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIEVOQUJM
RShXRUJBU1NFTUJMWSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2Vi
QXNzZW1ibHlHbG9iYWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9KU1dlYkFzc2VtYmx5R2xvYmFsLmgJKHJldmlzaW9uIDI2ODA4NikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlHbG9iYWwuaAkod29ya2luZyBjb3B5
KQpAQCAtNTksNyArNTksOCBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIEpTV2ViQXNzZW1ibHlH
bG9iYWwoVk0mLCBTdHJ1Y3R1cmUqLCBSZWY8V2FzbTo6R2xvYmFsPiYmKTsKICAgICB2b2lkIGZp
bmlzaENyZWF0aW9uKFZNJik7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwq
LCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CisvLyAgICBzdGF0
aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CiAKICAgICBSZWY8
V2FzbTo6R2xvYmFsPiBtX2dsb2JhbDsKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5jcHAJKHJldmlzaW9u
IDI2ODA4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJ
bnN0YW5jZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTczLDcgKzczLDggQEAgdm9pZCBKU1dlYkFz
c2VtYmx5SW5zdGFuY2U6OmRlc3Ryb3koSlNDZQogICAgIHN0YXRpY19jYXN0PEpTV2ViQXNzZW1i
bHlJbnN0YW5jZSo+KGNlbGwpLT5KU1dlYkFzc2VtYmx5SW5zdGFuY2U6On5KU1dlYkFzc2VtYmx5
SW5zdGFuY2UoKTsKIH0KIAotdm9pZCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OnZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1l
IFZpc2l0b3I+Cit2b2lkIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6dmlzaXRDaGlsZHJlbihKU0Nl
bGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpz
Q2FzdDxKU1dlYkFzc2VtYmx5SW5zdGFuY2UqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNU
X0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC0xMDIsNiArMTAzLDggQEAgdm9pZCBK
U1dlYkFzc2VtYmx5SW5zdGFuY2U6OnZpc2l0Q2hpbGRyZQogICAgICAgICB2aXNpdG9yLmFwcGVu
ZFVuYmFycmllcmVkKHdyYXBwZXIuZ2V0KCkpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4o
SlNXZWJBc3NlbWJseUluc3RhbmNlKTsKKwogdm9pZCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OmZp
bmFsaXplQ3JlYXRpb24oVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWY8
V2FzbTo6Q29kZUJsb2NrPiYmIHdhc21Db2RlQmxvY2ssIEpTT2JqZWN0KiBpbXBvcnRPYmplY3Qs
IFdhc206OkNyZWF0aW9uTW9kZSBjcmVhdGlvbk1vZGUpCiB7CiAgICAgbV9pbnN0YW5jZS0+Zmlu
YWxpemVDcmVhdGlvbih0aGlzLCB3YXNtQ29kZUJsb2NrLmNvcHlSZWYoKSk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFu
Y2UuaAkocmV2aXNpb24gMjY4MDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
SlNXZWJBc3NlbWJseUluc3RhbmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwNCw3ICsxMDQsOCBA
QCBwdWJsaWM6CiBwcml2YXRlOgogICAgIEpTV2ViQXNzZW1ibHlJbnN0YW5jZShWTSYsIFN0cnVj
dHVyZSosIFJlZjxXYXNtOjpJbnN0YW5jZT4mJik7CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihW
TSYsIEpTV2ViQXNzZW1ibHlNb2R1bGUqLCBKU01vZHVsZU5hbWVzcGFjZU9iamVjdCopOwotICAg
IHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBE
RUNMQVJFX1ZJU0lUX0NISUxEUkVOOworLy8gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihK
U0NlbGwqLCBTbG90VmlzaXRvciYpOwogCiAgICAgUmVmPFdhc206Okluc3RhbmNlPiBtX2luc3Rh
bmNlOwogICAgIFZNKiBtX3ZtOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
SlNXZWJBc3NlbWJseU1lbW9yeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1lbW9yeS5jcHAJKHJldmlzaW9uIDI2ODA4NikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNZW1vcnkuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xNDEsNyArMTQxLDggQEAgdm9pZCBKU1dlYkFzc2VtYmx5TWVtb3J5
OjpkZXN0cm95KEpTQ2VsbAogICAgIG1lbW9yeS0+SlNXZWJBc3NlbWJseU1lbW9yeTo6fkpTV2Vi
QXNzZW1ibHlNZW1vcnkoKTsKIH0KIAotdm9pZCBKU1dlYkFzc2VtYmx5TWVtb3J5Ojp2aXNpdENo
aWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBl
bmFtZSBWaXNpdG9yPgordm9pZCBKU1dlYkFzc2VtYmx5TWVtb3J5Ojp2aXNpdENoaWxkcmVuKEpT
Q2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0g
anNDYXN0PEpTV2ViQXNzZW1ibHlNZW1vcnkqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNU
X0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC0xNTEsNiArMTUyLDggQEAgdm9pZCBK
U1dlYkFzc2VtYmx5TWVtb3J5Ojp2aXNpdENoaWxkcmVuKAogICAgIHZpc2l0b3IucmVwb3J0RXh0
cmFNZW1vcnlWaXNpdGVkKHRoaXNPYmplY3QtPm1lbW9yeSgpLnNpemUoKSk7CiB9CiAKK0RFRklO
RV9WSVNJVF9DSElMRFJFTihKU1dlYkFzc2VtYmx5TWVtb3J5KTsKKwogfSAvLyBuYW1lc3BhY2Ug
SlNDCiAKICNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TWVtb3J5LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1lbW9yeS5oCShyZXZpc2lv
biAyNjgwODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5
TWVtb3J5LmgJKHdvcmtpbmcgY29weSkKQEAgLTYzLDcgKzYzLDggQEAgcHVibGljOgogcHJpdmF0
ZToKICAgICBKU1dlYkFzc2VtYmx5TWVtb3J5KFZNJiwgU3RydWN0dXJlKik7CiAgICAgdm9pZCBm
aW5pc2hDcmVhdGlvbihWTSYpOwotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOworLy8gICAgc3Rh
dGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwogCiAgICAgUmVm
PFdhc206Ok1lbW9yeT4gbV9tZW1vcnk7CiAgICAgV3JpdGVCYXJyaWVyPEpTQXJyYXlCdWZmZXI+
IG1fYnVmZmVyV3JhcHBlcjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pT
V2ViQXNzZW1ibHlNb2R1bGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuY3BwCShyZXZpc2lvbiAyNjgwODYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTI0LDcgKzEyNCw4IEBAIHZvaWQgSlNXZWJBc3NlbWJseU1vZHVsZTo6
c2V0Q29kZUJsb2NrKFYKICAgICBtX2NvZGVCbG9ja3Nbc3RhdGljX2Nhc3Q8c2l6ZV90Pihtb2Rl
KV0uc2V0KHZtLCB0aGlzLCBjb2RlQmxvY2spOwogfQogCi12b2lkIEpTV2ViQXNzZW1ibHlNb2R1
bGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3Rl
bXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTV2ViQXNzZW1ibHlNb2R1bGU6OnZpc2l0
Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTV2ViQXNz
ZW1ibHlNb2R1bGUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNXZWJBc3NlbWJseU1vZHVsZSo+KGNl
bGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsK
QEAgLTEzNSw2ICsxMzYsOCBAQCB2b2lkIEpTV2ViQXNzZW1ibHlNb2R1bGU6OnZpc2l0Q2hpbGRy
ZW4oCiAgICAgICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fY29kZUJsb2Nrc1tpXSk7
CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU1dlYkFzc2VtYmx5TW9kdWxlKTsKKwogfSAv
LyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1vZHVs
ZS5oCShyZXZpc2lvbiAyNjgwODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9K
U1dlYkFzc2VtYmx5TW9kdWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTgwLDcgKzgwLDggQEAgcHJp
dmF0ZToKIAogICAgIEpTV2ViQXNzZW1ibHlNb2R1bGUoVk0mLCBTdHJ1Y3R1cmUqLCBSZWY8V2Fz
bTo6TW9kdWxlPiYmKTsKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7Ci0gICAgc3RhdGlj
IHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVf
VklTSVRfQ0hJTERSRU47CisvLyAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCos
IFNsb3RWaXNpdG9yJik7CiAKICAgICBSZWY8V2FzbTo6TW9kdWxlPiBtX21vZHVsZTsKICAgICBX
cml0ZUJhcnJpZXI8U3ltYm9sVGFibGU+IG1fZXhwb3J0U3ltYm9sVGFibGU7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5VGFibGUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlUYWJsZS5j
cHAJKHJldmlzaW9uIDI2ODA4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pT
V2ViQXNzZW1ibHlUYWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcyLDcgKzcyLDggQEAgdm9p
ZCBKU1dlYkFzc2VtYmx5VGFibGU6OmRlc3Ryb3koSlNDZWxsKgogICAgIHN0YXRpY19jYXN0PEpT
V2ViQXNzZW1ibHlUYWJsZSo+KGNlbGwpLT5KU1dlYkFzc2VtYmx5VGFibGU6On5KU1dlYkFzc2Vt
Ymx5VGFibGUoKTsKIH0KIAotdm9pZCBKU1dlYkFzc2VtYmx5VGFibGU6OnZpc2l0Q2hpbGRyZW4o
SlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZp
c2l0b3I+Cit2b2lkIEpTV2ViQXNzZW1ibHlUYWJsZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNl
bGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNXZWJBc3NlbWJseVRhYmxlKiB0aGlzT2Jq
ZWN0ID0ganNDYXN0PEpTV2ViQXNzZW1ibHlUYWJsZSo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19P
QkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTgxLDYgKzgyLDggQEAgdm9p
ZCBKU1dlYkFzc2VtYmx5VGFibGU6OnZpc2l0Q2hpbGRyZW4oSgogICAgIHRoaXNPYmplY3QtPnRh
YmxlKCktPnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERS
RU4oSlNXZWJBc3NlbWJseVRhYmxlKTsKKwogYm9vbCBKU1dlYkFzc2VtYmx5VGFibGU6Omdyb3co
dWludDMyX3QgZGVsdGEpCiB7CiAgICAgaWYgKGRlbHRhID09IDApCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5VGFibGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5VGFibGUuaAkocmV2aXNp
b24gMjY4MDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJs
eVRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTcwLDcgKzcwLDggQEAgcHVibGljOgogcHJpdmF0
ZToKICAgICBKU1dlYkFzc2VtYmx5VGFibGUoVk0mLCBTdHJ1Y3R1cmUqLCBSZWY8V2FzbTo6VGFi
bGU+JiYpOwogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKLSAgICBzdGF0aWMgdm9pZCB2
aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9D
SElMRFJFTjsKKy8vICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZp
c2l0b3ImKTsKIAogICAgIFJlZjxXYXNtOjpUYWJsZT4gbV90YWJsZTsKIH07CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9u
LmNwcAkocmV2aXNpb24gMjY4MDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
V2ViQXNzZW1ibHlGdW5jdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0OSw3ICs0NDksOCBA
QCBXZWJBc3NlbWJseUZ1bmN0aW9uOjpXZWJBc3NlbWJseUZ1bmN0aW9uCiAgICAgLCBtX2ltcG9y
dGFibGVGdW5jdGlvbiB7IHNpZ25hdHVyZUluZGV4LCB3YXNtVG9XYXNtRW50cnlwb2ludExvYWRM
b2NhdGlvbiB9CiB7IH0KIAotdm9pZCBXZWJBc3NlbWJseUZ1bmN0aW9uOjp2aXNpdENoaWxkcmVu
KEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPgordm9pZCBXZWJBc3NlbWJseUZ1bmN0aW9uOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCog
Y2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBXZWJBc3NlbWJseUZ1bmN0aW9uKiB0aGlz
T2JqZWN0ID0ganNDYXN0PFdlYkFzc2VtYmx5RnVuY3Rpb24qPihjZWxsKTsKICAgICBBU1NFUlRf
R0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC00NTgsNiArNDU5LDgg
QEAgdm9pZCBXZWJBc3NlbWJseUZ1bmN0aW9uOjp2aXNpdENoaWxkcmVuKAogICAgIHZpc2l0b3Iu
YXBwZW5kKHRoaXNPYmplY3QtPm1fanNUb1dhc21JQ0NhbGxlZSk7CiB9CiAKK0RFRklORV9WSVNJ
VF9DSElMRFJFTihXZWJBc3NlbWJseUZ1bmN0aW9uKTsKKwogdm9pZCBXZWJBc3NlbWJseUZ1bmN0
aW9uOjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKIHsKICAgICBzdGF0aWNfY2FzdDxXZWJBc3NlbWJs
eUZ1bmN0aW9uKj4oY2VsbCktPldlYkFzc2VtYmx5RnVuY3Rpb246On5XZWJBc3NlbWJseUZ1bmN0
aW9uKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1
bmN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2Vi
QXNzZW1ibHlGdW5jdGlvbi5oCShyZXZpc2lvbiAyNjgwODYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTkw
LDcgKzkwLDggQEAgcHVibGljOgogICAgIFdhc206Okluc3RhbmNlKiBwcmV2aW91c0luc3RhbmNl
KENhbGxGcmFtZSopOwogCiBwcml2YXRlOgotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4o
SlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOworLy8g
ICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwogICAg
IFdlYkFzc2VtYmx5RnVuY3Rpb24oVk0mLCBOYXRpdmVFeGVjdXRhYmxlKiwgSlNHbG9iYWxPYmpl
Y3QqLCBTdHJ1Y3R1cmUqLCBXYXNtOjpDYWxsZWUmIGpzRW50cnlwb2ludCwgV2FzbVRvV2FzbUlt
cG9ydGFibGVGdW5jdGlvbjo6TG9hZExvY2F0aW9uIGVudHJ5cG9pbnRMb2FkTG9jYXRpb24sIFdh
c206OlNpZ25hdHVyZUluZGV4KTsKIAogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5
UHRyVGFnPiBqc0NhbGxFbnRyeXBvaW50U2xvdygpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbkJhc2UuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb25CYXNlLmNwcAko
cmV2aXNpb24gMjY4MDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNz
ZW1ibHlGdW5jdGlvbkJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0MSw4IEBAIFdl
YkFzc2VtYmx5RnVuY3Rpb25CYXNlOjpXZWJBc3NlbWJseUZ1bmMKICAgICA6IEJhc2Uodm0sIGV4
ZWN1dGFibGUsIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKQogeyB9CiAKLXZvaWQgV2ViQXNzZW1i
bHlGdW5jdGlvbkJhc2U6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYg
dmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFdlYkFzc2VtYmx5RnVu
Y3Rpb25CYXNlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikK
IHsKICAgICBXZWJBc3NlbWJseUZ1bmN0aW9uQmFzZSogdGhpc09iamVjdCA9IGpzQ2FzdDxXZWJB
c3NlbWJseUZ1bmN0aW9uQmFzZSo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJ
VFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTQ5LDYgKzUwLDggQEAgdm9pZCBXZWJBc3NlbWJs
eUZ1bmN0aW9uQmFzZTo6dmlzaXRDaGlsZAogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3Qt
Pm1faW5zdGFuY2UpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oV2ViQXNzZW1ibHlGdW5j
dGlvbkJhc2UpOworCiB2b2lkIFdlYkFzc2VtYmx5RnVuY3Rpb25CYXNlOjpmaW5pc2hDcmVhdGlv
bihWTSYgdm0sIE5hdGl2ZUV4ZWN1dGFibGUqIGV4ZWN1dGFibGUsIHVuc2lnbmVkIGxlbmd0aCwg
Y29uc3QgU3RyaW5nJiBuYW1lLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGluc3RhbmNlKQogewog
ICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtLCBleGVjdXRhYmxlLCBsZW5ndGgsIG5hbWUpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbkJh
c2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3Nl
bWJseUZ1bmN0aW9uQmFzZS5oCShyZXZpc2lvbiAyNjgwODYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uQmFzZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC00Niw3ICs0Niw4IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mSW5z
dGFuY2UoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoV2ViQXNzZW1ibHlGdW5jdGlvbkJhc2Us
IG1faW5zdGFuY2UpOyB9CiAKIHByb3RlY3RlZDoKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxk
cmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsK
Ky8vICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsK
ICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgTmF0aXZlRXhlY3V0YWJsZSosIHVuc2lnbmVk
IGxlbmd0aCwgY29uc3QgU3RyaW5nJiBuYW1lLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqKTsKICAg
ICBXZWJBc3NlbWJseUZ1bmN0aW9uQmFzZShWTSYsIE5hdGl2ZUV4ZWN1dGFibGUqLCBKU0dsb2Jh
bE9iamVjdCosIFN0cnVjdHVyZSopOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9XZWJBc3NlbWJseU1vZHVsZVJlY29yZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuY3BwCShyZXZpc2lv
biAyNjgwODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1v
ZHVsZVJlY29yZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc3LDcgKzc3LDggQEAgdm9pZCBXZWJB
c3NlbWJseU1vZHVsZVJlY29yZDo6ZmluaXNoQ3JlYQogICAgIH0KIH0KIAotdm9pZCBXZWJBc3Nl
bWJseU1vZHVsZVJlY29yZDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9y
JiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgV2ViQXNzZW1ibHlN
b2R1bGVSZWNvcmQ6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9y
KQogewogICAgIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkKiB0aGlzT2JqZWN0ID0ganNDYXN0PFdl
YkFzc2VtYmx5TW9kdWxlUmVjb3JkKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhF
UklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtODYsNiArODcsOCBAQCB2b2lkIFdlYkFzc2Vt
Ymx5TW9kdWxlUmVjb3JkOjp2aXNpdENoaWxkCiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVj
dC0+bV9zdGFydEZ1bmN0aW9uKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKFdlYkFzc2Vt
Ymx5TW9kdWxlUmVjb3JkKTsKKwogdm9pZCBXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6cHJlcGFy
ZUxpbmsoVk0mIHZtLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGluc3RhbmNlKQogewogICAgIFJF
TEVBU0VfQVNTRVJUKCFtX2luc3RhbmNlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuaAkocmV2aXNpb24g
MjY4MDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1
bGVSZWNvcmQuaAkod29ya2luZyBjb3B5KQpAQCAtNjcsNyArNjcsOCBAQCBwcml2YXRlOgogCiAg
ICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0dsb2JhbE9iamVjdCosIFZNJiwgY29uc3QgV2FzbTo6
TW9kdWxlSW5mb3JtYXRpb24mKTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlND
ZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOworLy8gICAg
c3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwogCiAgICAg
V3JpdGVCYXJyaWVyPEpTV2ViQXNzZW1ibHlJbnN0YW5jZT4gbV9pbnN0YW5jZTsKICAgICBXcml0
ZUJhcnJpZXI8SlNPYmplY3Q+IG1fc3RhcnRGdW5jdGlvbjsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVdyYXBwZXJGdW5j
dGlvbi5jcHAJKHJldmlzaW9uIDI2ODA4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL1dlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjcs
NyArNjcsOCBAQCBTdHJ1Y3R1cmUqIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uOjpjCiAgICAg
cmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlw
ZUluZm8oSlNGdW5jdGlvblR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKIH0KIAotdm9p
ZCBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGws
IFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQg
V2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb246OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBW
aXNpdG9yJiB2aXNpdG9yKQogewogICAgIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uKiB0aGlz
T2JqZWN0ID0ganNDYXN0PFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uKj4oY2VsbCk7CiAgICAg
QVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNzYsNiAr
NzcsOCBAQCB2b2lkIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uOjp2aXNpdENoCiAgICAgdmlz
aXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9mdW5jdGlvbik7CiB9CiAKK0RFRklORV9WSVNJVF9D
SElMRFJFTihXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbik7CisKIEpTQ19ERUZJTkVfSE9TVF9G
VU5DVElPTihjYWxsV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24sIChKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkpCiB7CiAgICAgVk0mIHZtID0gZ2xv
YmFsT2JqZWN0LT52bSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2Vi
QXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5oCShyZXZpc2lvbiAyNjgw
ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVdyYXBwZXJG
dW5jdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC01OSw3ICs1OSw4IEBAIHB1YmxpYzoKIHByaXZh
dGU6CiAgICAgV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24oVk0mLCBOYXRpdmVFeGVjdXRhYmxl
KiwgSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqLCBXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0
aW9uKTsKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgTmF0aXZlRXhlY3V0YWJsZSosIHVu
c2lnbmVkIGxlbmd0aCwgY29uc3QgU3RyaW5nJiBuYW1lLCBKU09iamVjdCosIEpTV2ViQXNzZW1i
bHlJbnN0YW5jZSopOwotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xv
dFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOworLy8gICAgc3RhdGljIHZv
aWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwogCiAgICAgV3JpdGVCYXJy
aWVyPEpTT2JqZWN0PiBtX2Z1bmN0aW9uOwogICAgIC8vIEl0J3Mgc2FmZSB0byBqdXN0IGhvbGQg
dGhlIHJhdyBXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9uIGJlY2F1c2Ugd2UgaGF2ZSBhIHJl
ZmVyZW5jZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CdWlsdGluQ29u
c3RydWN0b3JCYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0RPTUJ1aWx0aW5Db25zdHJ1Y3RvckJhc2UuY3BwCShyZXZpc2lvbiAyNjgwODYpCisrKyBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJ1aWx0aW5Db25zdHJ1Y3RvckJhc2UuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00NSw3ICs0NSw4IEBAIHZvaWQgSlNET01CdWlsdGluQ29uc3Ry
dWN0b3JCYXNlOjpjYWxsRnUKICAgICBKU0M6OmNhbGwoJmxleGljYWxHbG9iYWxPYmplY3QsICZm
dW5jdGlvbiwgY2FsbERhdGEsICZ0aGlzT2JqZWN0LCBhcmd1bWVudHMpOwogfQogCi12b2lkIEpT
RE9NQnVpbHRpbkNvbnN0cnVjdG9yQmFzZTo6dmlzaXRDaGlsZHJlbihKU0M6OkpTQ2VsbCogY2Vs
bCwgSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+
Cit2b2lkIEpTRE9NQnVpbHRpbkNvbnN0cnVjdG9yQmFzZTo6dmlzaXRDaGlsZHJlbihKU0M6OkpT
Q2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0g
anNDYXN0PEpTRE9NQnVpbHRpbkNvbnN0cnVjdG9yQmFzZSo+KGNlbGwpOwogICAgIEFTU0VSVF9H
Q19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTUzLDYgKzU0LDggQEAg
dm9pZCBKU0RPTUJ1aWx0aW5Db25zdHJ1Y3RvckJhc2U6OnZpc2l0QwogICAgIHZpc2l0b3IuYXBw
ZW5kKHRoaXNPYmplY3QtPm1faW5pdGlhbGl6ZUZ1bmN0aW9uKTsKIH0KIAorREVGSU5FX1ZJU0lU
X0NISUxEUkVOKEpTRE9NQnVpbHRpbkNvbnN0cnVjdG9yQmFzZSk7CisKIEpTQzo6SXNvU3Vic3Bh
Y2UqIEpTRE9NQnVpbHRpbkNvbnN0cnVjdG9yQmFzZTo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0m
IHZtKQogewogICAgIHJldHVybiAmc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGll
bnREYXRhKS0+ZG9tQnVpbHRpbkNvbnN0cnVjdG9yU3BhY2UoKTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTRE9NQnVpbHRpbkNvbnN0cnVjdG9yQmFzZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQnVpbHRpbkNvbnN0cnVjdG9yQmFz
ZS5oCShyZXZpc2lvbiAyNjgwODYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RP
TUJ1aWx0aW5Db25zdHJ1Y3RvckJhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtNDIsNyArNDIsOCBA
QCBwcm90ZWN0ZWQ6CiAgICAgewogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRy
ZW4oSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9D
SElMRFJFTjsKKy8vICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDOjpKU0NlbGwqLCBK
U0M6OlNsb3RWaXNpdG9yJik7CiAKICAgICBKU0M6OkpTRnVuY3Rpb24qIGluaXRpYWxpemVGdW5j
dGlvbigpOwogICAgIHZvaWQgc2V0SW5pdGlhbGl6ZUZ1bmN0aW9uKEpTQzo6Vk0mLCBKU0M6OkpT
RnVuY3Rpb24mKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFs
T2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RP
TUdsb2JhbE9iamVjdC5jcHAJKHJldmlzaW9uIDI2ODA4NikKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjM2LDcg
KzIzNiw4IEBAIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIEpTRE9NR2xvYmFsT2JqZWMKICAgICBy
ZXR1cm4gbnVsbHB0cjsKIH0KIAotdm9pZCBKU0RPTUdsb2JhbE9iamVjdDo6dmlzaXRDaGlsZHJl
bihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUg
VmlzaXRvcj4KK3ZvaWQgSlNET01HbG9iYWxPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBj
ZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTRE9NR2xvYmFsT2JqZWN0KiB0aGlzT2Jq
ZWN0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09C
SkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtMjU4LDYgKzI1OSw4IEBAIHZv
aWQgSlNET01HbG9iYWxPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlMKICAgICB0aGlzT2JqZWN0LT5t
X2J1aWx0aW5JbnRlcm5hbEZ1bmN0aW9ucy52aXNpdCh2aXNpdG9yKTsKIH0KIAorREVGSU5FX1ZJ
U0lUX0NISUxEUkVOKEpTRE9NR2xvYmFsT2JqZWN0KTsKKwogdm9pZCBKU0RPTUdsb2JhbE9iamVj
dDo6c2V0Q3VycmVudEV2ZW50KEV2ZW50KiBjdXJyZW50RXZlbnQpCiB7CiAgICAgbV9jdXJyZW50
RXZlbnQgPSBjdXJyZW50RXZlbnQ7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0RPTUdsb2JhbE9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTRE9NR2xvYmFsT2JqZWN0LmgJKHJldmlzaW9uIDI2ODA4NikKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTcx
LDcgKzcxLDggQEAgcHVibGljOgogICAgIHZvaWQgc2V0Q3VycmVudEV2ZW50KEV2ZW50Kik7CiAg
ICAgRXZlbnQqIGN1cnJlbnRFdmVudCgpIGNvbnN0OwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRD
aGlsZHJlbihKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJ
U0lUX0NISUxEUkVOOworLy8gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0M6OkpTQ2Vs
bCosIEpTQzo6U2xvdFZpc2l0b3ImKTsKIAogICAgIERPTVdyYXBwZXJXb3JsZCYgd29ybGQoKSB7
IHJldHVybiBtX3dvcmxkLmdldCgpOyB9CiAgICAgYm9vbCB3b3JsZElzTm9ybWFsKCkgY29uc3Qg
eyByZXR1cm4gbV93b3JsZElzTm9ybWFsOyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU1dvcmtlckdsb2JhbFNjb3BlQmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNXb3JrZXJHbG9iYWxTY29wZUJhc2UuY3BwCShyZXZpc2lvbiAy
NjgwODYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckdsb2JhbFNjb3Bl
QmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkyLDcgKzkyLDggQEAgdm9pZCBKU1dvcmtlckds
b2JhbFNjb3BlQmFzZTo6Y2xlYXJET01HdQogICAgICAgICBndWFyZGVkLT5jbGVhcigpOwogfQog
Ci12b2lkIEpTV29ya2VyR2xvYmFsU2NvcGVCYXNlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2Vs
bCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9p
ZCBKU1dvcmtlckdsb2JhbFNjb3BlQmFzZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFZp
c2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNXb3JrZXJHbG9iYWxTY29wZUJhc2UqIHRoaXNPYmpl
Y3QgPSBqc0Nhc3Q8SlNXb3JrZXJHbG9iYWxTY29wZUJhc2UqPihjZWxsKTsKICAgICBBU1NFUlRf
R0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC0xMDAsNiArMTAxLDgg
QEAgdm9pZCBKU1dvcmtlckdsb2JhbFNjb3BlQmFzZTo6dmlzaXRDaGlsZAogICAgIHZpc2l0b3Iu
YXBwZW5kKHRoaXNPYmplY3QtPm1fcHJveHkpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4o
SlNXb3JrZXJHbG9iYWxTY29wZUJhc2UpOworCiB2b2lkIEpTV29ya2VyR2xvYmFsU2NvcGVCYXNl
OjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKIHsKICAgICBzdGF0aWNfY2FzdDxKU1dvcmtlckdsb2Jh
bFNjb3BlQmFzZSo+KGNlbGwpLT5KU1dvcmtlckdsb2JhbFNjb3BlQmFzZTo6fkpTV29ya2VyR2xv
YmFsU2NvcGVCYXNlKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtl
ckdsb2JhbFNjb3BlQmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTV29ya2VyR2xvYmFsU2NvcGVCYXNlLmgJKHJldmlzaW9uIDI2ODA4NikKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyR2xvYmFsU2NvcGVCYXNlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTgxLDcgKzgxLDggQEAgcHJvdGVjdGVkOgogICAgIEpTV29ya2VyR2xvYmFsU2Nv
cGVCYXNlKEpTQzo6Vk0mLCBKU0M6OlN0cnVjdHVyZSosIFJlZlB0cjxXb3JrZXJHbG9iYWxTY29w
ZT4mJik7CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJiwgSlNDOjpKU1Byb3h5Kik7
CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90
VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CisvLyAgICBzdGF0aWMgdm9p
ZCB2aXNpdENoaWxkcmVuKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpOwogCiBwcml2
YXRlOgogICAgIFJlZlB0cjxXb3JrZXJHbG9iYWxTY29wZT4gbV93cmFwcGVkOwpJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrbGV0R2xvYmFsU2NvcGVCYXNlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtsZXRHbG9iYWxTY29w
ZUJhc2UuY3BwCShyZXZpc2lvbiAyNjgwODYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU1dvcmtsZXRHbG9iYWxTY29wZUJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Miw3ICs4
Miw4IEBAIHZvaWQgSlNXb3JrbGV0R2xvYmFsU2NvcGVCYXNlOjpjbGVhckRPTUcKICAgICAgICAg
Z3VhcmRlZC0+Y2xlYXIoKTsKIH0KIAotdm9pZCBKU1dvcmtsZXRHbG9iYWxTY29wZUJhc2U6OnZp
c2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRl
PHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTV29ya2xldEdsb2JhbFNjb3BlQmFzZTo6dmlzaXRD
aGlsZHJlbihKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0byogdGhp
c09iamVjdCA9IGpzQ2FzdDxKU1dvcmtsZXRHbG9iYWxTY29wZUJhc2UqPihjZWxsKTsKICAgICBB
U1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC05MCw2ICs5
MSw4IEBAIHZvaWQgSlNXb3JrbGV0R2xvYmFsU2NvcGVCYXNlOjp2aXNpdENoaWwKICAgICB2aXNp
dG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX3Byb3h5KTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxE
UkVOKEpTV29ya2xldEdsb2JhbFNjb3BlQmFzZSk7CisKIHZvaWQgSlNXb3JrbGV0R2xvYmFsU2Nv
cGVCYXNlOjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKIHsKICAgICBzdGF0aWNfY2FzdDxKU1dvcmts
ZXRHbG9iYWxTY29wZUJhc2UqPihjZWxsKS0+SlNXb3JrbGV0R2xvYmFsU2NvcGVCYXNlOjp+SlNX
b3JrbGV0R2xvYmFsU2NvcGVCYXNlKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU1dvcmtsZXRHbG9iYWxTY29wZUJhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU1dvcmtsZXRHbG9iYWxTY29wZUJhc2UuaAkocmV2aXNpb24gMjY4MDg2
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrbGV0R2xvYmFsU2NvcGVCYXNl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTY5LDcgKzY5LDggQEAgcHJvdGVjdGVkOgogICAgIEpTV29y
a2xldEdsb2JhbFNjb3BlQmFzZShKU0M6OlZNJiwgSlNDOjpTdHJ1Y3R1cmUqLCBSZWZQdHI8V29y
a2xldEdsb2JhbFNjb3BlPiYmKTsKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mLCBK
U0M6OkpTUHJveHkqKTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDOjpKU0Nl
bGwqLCBKU0M6OlNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKKy8v
ICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNp
dG9yJik7CiAKIHByaXZhdGU6CiAgICAgUmVmUHRyPFdvcmtsZXRHbG9iYWxTY29wZT4gbV93cmFw
cGVkOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9y
SlMucG0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2Rl
R2VuZXJhdG9ySlMucG0JKHJldmlzaW9uIDI2ODA4NikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCSh3b3JraW5nIGNvcHkpCkBAIC0zMDc4LDcg
KzMwNzgsOCBAQCBzdWIgR2VuZXJhdGVIZWFkZXIKIAogICAgICMgdmlzaXQgZnVuY3Rpb24KICAg
ICBpZiAoJG5lZWRzVmlzaXRDaGlsZHJlbikgewotICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50
LCAiICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgSlNDOjpTbG90VmlzaXRv
ciYpO1xuIik7CisgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgREVDTEFSRV9WSVNJ
VF9DSElMRFJFTjtcbiIpOworIyAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICBzdGF0
aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKTtcbiIpOwog
ICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHZvaWQgdmlzaXRBZGRpdGlvbmFsQ2hp
bGRyZW4oSlNDOjpTbG90VmlzaXRvciYpO1xuIikgaWYgJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRy
aWJ1dGVzLT57SlNDdXN0b21NYXJrRnVuY3Rpb259OwogICAgICAgICBwdXNoKEBoZWFkZXJDb250
ZW50LCAiXG4iKTsKIApAQCAtMzA5NCw3ICszMDk1LDggQEAgc3ViIEdlbmVyYXRlSGVhZGVyCiAg
ICAgICAgICAgICAjIHRoYXQgdGhlIEdDIGNhbGxzIHRvIGFzayBhbiBvYmplY3QgaXMgaXQgd291
bGQgbGlrZSB0byBtYXJrIGFueXRoaW5nIGVsc2UgYWZ0ZXIgdGhlCiAgICAgICAgICAgICAjIHBy
b2dyYW0gcmVzdW1lZCBzaW5jZSB0aGUgbGFzdCBjYWxsIHRvIHZpc2l0Q2hpbGRyZW4gb3Igdmlz
aXRPdXRwdXRDb25zdHJhaW50cy4gU2luY2UKICAgICAgICAgICAgICMgdGhpcyBqdXN0IGNhbGxz
IHZpc2l0QWRkaXRpb25hbENoaWxkcmVuLCB5b3UgdXN1YWxseSBkb24ndCBoYXZlIHRvIHdvcnJ5
IGFib3V0IHRoaXMuCi0gICAgICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHN0YXRp
YyB2b2lkIHZpc2l0T3V0cHV0Q29uc3RyYWludHMoSlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYp
O1xuIik7CisgICAgICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIERFQ0xBUkVfVklT
SVRfT1VUUFVUX0NPTlNUUkFJTlRTO1xuIik7CisjICAgICAgICAgICAgcHVzaChAaGVhZGVyQ29u
dGVudCwgIiAgICBzdGF0aWMgdm9pZCB2aXNpdE91dHB1dENvbnN0cmFpbnRzKEpTQ2VsbCosIEpT
Qzo6U2xvdFZpc2l0b3ImKTtcbiIpOwogICAgICAgICB9CiAgICAgfQogCkBAIC00OTYwLDcgKzQ5
NjIsOCBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgIHB1c2goQGltcGxDb250ZW50
LCAifVxuXG4iKTsKIAogICAgIGlmICgkbmVlZHNWaXNpdENoaWxkcmVuKSB7Ci0gICAgICAgIHB1
c2goQGltcGxDb250ZW50LCAidm9pZCAke2NsYXNzTmFtZX06OnZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcilcbiIpOworICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudCwgInRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+XG4iKTsKKyAgICAgICAgcHVzaChAaW1w
bENvbnRlbnQsICJ2b2lkICR7Y2xhc3NOYW1lfTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGws
IFZpc2l0b3ImIHZpc2l0b3IpXG4iKTsKICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ7XG4i
KTsKICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgYXV0byogdGhpc09iamVjdCA9IGpz
Q2FzdDwke2NsYXNzTmFtZX0qPihjZWxsKTtcbiIpOwogICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIiAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7XG4i
KTsKQEAgLTQ5ODYsNyArNDk4OSw4IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAg
ICAgIH0KICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ9XG5cbiIpOwogICAgICAgICBpZiAo
JGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57SlNDdXN0b21NYXJrRnVuY3Rpb259KSB7
Ci0gICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgInZvaWQgJHtjbGFzc05hbWV9Ojp2aXNp
dE91dHB1dENvbnN0cmFpbnRzKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpXG4i
KTsKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAidGVtcGxhdGU8dHlwZW5hbWUgVmlz
aXRvcj5cbiIpOworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ2b2lkICR7Y2xhc3NO
YW1lfTo6dmlzaXRPdXRwdXRDb25zdHJhaW50cyhKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0
b3IpXG4iKTsKICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAie1xuIik7CiAgICAgICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PCR7
Y2xhc3NOYW1lfSo+KGNlbGwpO1xuIik7CiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwg
IiAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7XG4iKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>410812</attachid>
            <date>2020-10-07 23:30:58 -0700</date>
            <delta_ts>2020-10-07 23:36:17 -0700</delta_ts>
            <desc>work in progress.</desc>
            <filename>wip-gc-verifier4.patch</filename>
            <type>text/plain</type>
            <size>179232</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDI2ODA4NikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtNjU2LDYgKzY1Niw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9QUklWQVRFX0ZSQU1FV09SS19I
RUEKICAgICBoZWFwL1NpbXBsZU1hcmtpbmdDb25zdHJhaW50LmgKICAgICBoZWFwL1Nsb3RWaXNp
dG9yLmgKICAgICBoZWFwL1Nsb3RWaXNpdG9ySW5saW5lcy5oCisgICAgaGVhcC9TbG90VmlzaXRv
ck1hY3Jvcy5oCiAgICAgaGVhcC9TdHJvbmcuaAogICAgIGhlYXAvU3Ryb25nSW5saW5lcy5oCiAg
ICAgaGVhcC9TdWJzcGFjZS5oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQVBJ
V3JhcHBlck9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkv
SlNBUElXcmFwcGVyT2JqZWN0LmgJKHJldmlzaW9uIDI2ODA4NikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvSlNBUElXcmFwcGVyT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjAgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00MSw3
ICs0MSw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBzdWJzcGFjZUZvcihWTSYpIHsgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQogICAgIAogICAgIHZvaWQgZmluaXNoQ3JlYXRp
b24oVk0mKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIEpTQzo6U2xv
dFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX0VYUE9SVF9WSVNJVF9DSElMRFJFTjsKICAgICAKICAg
ICB2b2lkKiB3cmFwcGVkT2JqZWN0KCkgeyByZXR1cm4gbV93cmFwcGVkT2JqZWN0OyB9CiAgICAg
dm9pZCBzZXRXcmFwcGVkT2JqZWN0KHZvaWQqKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9BUEkvSlNBUElXcmFwcGVyT2JqZWN0Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvSlNBUElXcmFwcGVyT2JqZWN0Lm1tCShyZXZpc2lvbiAyNjgwODYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQVBJV3JhcHBlck9iamVjdC5tbQkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxOCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTczLDYgKzczLDggQEAgc3RhdGljIEpTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJT04o
Y29uc3RydQogc3RhdGljIEpTQ19ERUNMQVJFX0NVU1RPTV9HRVRURVIoY2FsbGJhY2tHZXR0ZXJK
U0FQSVdyYXBwZXJPYmplY3RDYWxsYmFja09iamVjdCk7CiBzdGF0aWMgSlNDX0RFQ0xBUkVfQ1VT
VE9NX0dFVFRFUihzdGF0aWNGdW5jdGlvbkdldHRlckpTQVBJV3JhcHBlck9iamVjdENhbGxiYWNr
T2JqZWN0KTsKIAorREVGSU5FX1RFTVBMQVRFX1ZJU0lUX0NISUxEUkVOKHRlbXBsYXRlPD4sIEpT
Q2FsbGJhY2tPYmplY3Q8SlNBUElXcmFwcGVyT2JqZWN0Pik7CisKIHRlbXBsYXRlIDw+IGNvbnN0
IENsYXNzSW5mbyBKU0NhbGxiYWNrT2JqZWN0PEpTQVBJV3JhcHBlck9iamVjdD46OnNfaW5mbyA9
IHsgIkpTQVBJV3JhcHBlck9iamVjdCIsICZCYXNlOjpzX2luZm8sIG51bGxwdHIsIG51bGxwdHIs
IENSRUFURV9NRVRIT0RfVEFCTEUoSlNDYWxsYmFja09iamVjdCkgfTsKIHRlbXBsYXRlIDw+IGNv
bnN0IGJvb2wgSlNDYWxsYmFja09iamVjdDxKU0FQSVdyYXBwZXJPYmplY3Q+OjpuZWVkc0Rlc3Ry
dWN0aW9uID0gdHJ1ZTsKIApAQCAtMTIzLDcgKzEyNSw4IEBAIHZvaWQgSlNBUElXcmFwcGVyT2Jq
ZWN0OjpzZXRXcmFwcGVkT2JqZWMKICAgICBtX3dyYXBwZWRPYmplY3QgPSBbc3RhdGljX2Nhc3Q8
aWQ+KHdyYXBwZWRPYmplY3QpIHJldGFpbl07CiB9CiAKLXZvaWQgSlNBUElXcmFwcGVyT2JqZWN0
Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikK
K3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTQVBJV3JhcHBlck9iamVjdDo6dmlz
aXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpT
QVBJV3JhcHBlck9iamVjdCogdGhpc09iamVjdCA9IEpTQzo6anNDYXN0PEpTQVBJV3JhcHBlck9i
amVjdCo+KGNlbGwpOwogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4oY2VsbCwgdmlzaXRvcik7CkBA
IC0xMzMsNiArMTM2LDggQEAgdm9pZCBKU0FQSVdyYXBwZXJPYmplY3Q6OnZpc2l0Q2hpbGRyZW4o
SgogICAgICAgICBzY2FuRXh0ZXJuYWxPYmplY3RHcmFwaCh2aXNpdG9yLnZtKCksIHZpc2l0b3Is
IHdyYXBwZWRPYmplY3QpOwogfQogCitERUZJTkVfRVhQT1JUX1ZJU0lUX0NISUxEUkVOKEpTQVBJ
V3JhcHBlck9iamVjdCk7CisKIHRlbXBsYXRlIDw+CiBJc29TdWJzcGFjZSogSlNDYWxsYmFja09i
amVjdDxKU0FQSVdyYXBwZXJPYmplY3Q+OjpzdWJzcGFjZUZvckltcGwoVk0mIHZtLCBTdWJzcGFj
ZUFjY2VzcyBtb2RlKQogewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxi
YWNrT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pT
Q2FsbGJhY2tPYmplY3QuY3BwCShyZXZpc2lvbiAyNjgwODYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNi0yMDE3IEFwcGxlIEluYy4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcgRXJpYyBTZWlkZWwgPGVyaWNA
d2Via2l0Lm9yZz4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTQxLDYgKzQxLDkgQEAgc3RhdGljIEpT
Q19ERUNMQVJFX0NVU1RPTV9HRVRURVIoc3RhdGljRgogc3RhdGljIEpTQ19ERUNMQVJFX0NVU1RP
TV9HRVRURVIoY2FsbGJhY2tHZXR0ZXJKU0dsb2JhbE9iamVjdENhbGxiYWNrT2JqZWN0KTsKIHN0
YXRpYyBKU0NfREVDTEFSRV9DVVNUT01fR0VUVEVSKHN0YXRpY0Z1bmN0aW9uR2V0dGVySlNHbG9i
YWxPYmplY3RDYWxsYmFja09iamVjdCk7CiAKK0RFRklORV9URU1QTEFURV9WSVNJVF9DSElMRFJF
Tih0ZW1wbGF0ZTw+LCBKU0NhbGxiYWNrT2JqZWN0PEpTTm9uRmluYWxPYmplY3Q+KTsKK0RFRklO
RV9URU1QTEFURV9WSVNJVF9DSElMRFJFTih0ZW1wbGF0ZTw+LCBKU0NhbGxiYWNrT2JqZWN0PEpT
R2xvYmFsT2JqZWN0Pik7CisKIC8vIERlZmluZSB0aGUgdHdvIHR5cGVzIG9mIEpTQ2FsbGJhY2tP
YmplY3RzIHdlIHN1cHBvcnQuCiB0ZW1wbGF0ZSA8PiBjb25zdCBDbGFzc0luZm8gSlNDYWxsYmFj
a09iamVjdDxKU05vbkZpbmFsT2JqZWN0Pjo6c19pbmZvID0geyAiQ2FsbGJhY2tPYmplY3QiLCAm
QmFzZTo6c19pbmZvLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTQ2Fs
bGJhY2tPYmplY3QpIH07CiB0ZW1wbGF0ZSA8PiBjb25zdCBDbGFzc0luZm8gSlNDYWxsYmFja09i
amVjdDxKU0dsb2JhbE9iamVjdD46OnNfaW5mbyA9IHsgIkNhbGxiYWNrR2xvYmFsT2JqZWN0Iiwg
JkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU0Nh
bGxiYWNrT2JqZWN0KSB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxi
YWNrT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0Nh
bGxiYWNrT2JqZWN0LmgJKHJldmlzaW9uIDI2ODA4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9BUEkvSlNDYWxsYmFja09iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC02OSw3ICs2OSwxMCBA
QCBwdWJsaWM6CiAgICAgICAgIG1fcHJpdmF0ZVByb3BlcnRpZXMtPmRlbGV0ZVByaXZhdGVQcm9w
ZXJ0eShwcm9wZXJ0eU5hbWUpOwogICAgIH0KIAotICAgIHZvaWQgdmlzaXRDaGlsZHJlbihTbG90
VmlzaXRvciYgdmlzaXRvcikKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOworCisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KKyAgICB2b2lkIHZpc2l0Q2hpbGRyZW4oVmlzaXRvciYg
dmlzaXRvcikKICAgICB7CiAgICAgICAgIEpTUHJpdmF0ZVByb3BlcnR5TWFwKiBwcm9wZXJ0aWVz
ID0gbV9wcml2YXRlUHJvcGVydGllcy5nZXQoKTsKICAgICAgICAgaWYgKCFwcm9wZXJ0aWVzKQpA
QCAtMTAzLDcgKzEwNiw4IEBAIHB1YmxpYzoKICAgICAgICAgICAgIG1fcHJvcGVydHlNYXAucmVt
b3ZlKHByb3BlcnR5TmFtZS5pbXBsKCkpOwogICAgICAgICB9CiAKLSAgICAgICAgdm9pZCB2aXNp
dENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBWaXNpdG9yPgorICAgICAgICB2b2lkIHZpc2l0Q2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikK
ICAgICAgICAgewogICAgICAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9sb2NrKTsKICAgICAg
ICAgICAgIGZvciAoYXV0byYgcGFpciA6IG1fcHJvcGVydHlNYXApIHsKQEAgLTIxNiwxMyArMjIw
LDcgQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgQ2FsbERhdGEgZ2V0Q29uc3RydWN0RGF0YShKU0Nl
bGwqKTsKICAgICBzdGF0aWMgQ2FsbERhdGEgZ2V0Q2FsbERhdGEoSlNDZWxsKik7CiAKLSAgICBz
dGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0
b3IpCi0gICAgewotICAgICAgICBKU0NhbGxiYWNrT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0
PEpTQ2FsbGJhY2tPYmplY3QqPihjZWxsKTsKLSAgICAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhF
UklUUygoc3RhdGljX2Nhc3Q8UGFyZW50Kj4odGhpc09iamVjdCkpLCBKU0NhbGxiYWNrT2JqZWN0
PFBhcmVudD46OmluZm8oKSk7Ci0gICAgICAgIFBhcmVudDo6dmlzaXRDaGlsZHJlbih0aGlzT2Jq
ZWN0LCB2aXNpdG9yKTsKLSAgICAgICAgdGhpc09iamVjdC0+bV9jYWxsYmFja09iamVjdERhdGEt
PnZpc2l0Q2hpbGRyZW4odmlzaXRvcik7Ci0gICAgfQorICAgIERFQ0xBUkVfVEVNUExBVEVfVklT
SVRfQ0hJTERSRU47CiAKICAgICB2b2lkIGluaXQoSlNHbG9iYWxPYmplY3QqKTsKICAKQEAgLTI0
NSw2ICsyNDMsMTYgQEAgcHJpdmF0ZToKICAgICBjb25zdCBDbGFzc0luZm8qIG1fY2xhc3NJbmZv
IHsgbnVsbHB0ciB9OwogfTsKIAordGVtcGxhdGUgPGNsYXNzIFBhcmVudD4KK3RlbXBsYXRlPHR5
cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTQ2FsbGJhY2tPYmplY3Q8UGFyZW50Pjo6dmlzaXRDaGls
ZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIEpTQ2FsbGJh
Y2tPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNDYWxsYmFja09iamVjdCo+KGNlbGwpOwor
ICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoKHN0YXRpY19jYXN0PFBhcmVudCo+KHRoaXNP
YmplY3QpKSwgSlNDYWxsYmFja09iamVjdDxQYXJlbnQ+OjppbmZvKCkpOworICAgIFBhcmVudDo6
dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKKyAgICB0aGlzT2JqZWN0LT5tX2Nh
bGxiYWNrT2JqZWN0RGF0YS0+dmlzaXRDaGlsZHJlbih2aXNpdG9yKTsKK30KKwogfSAvLyBuYW1l
c3BhY2UgSlNDCiAKIC8vIGluY2x1ZGUgdGhlIGFjdHVhbCB0ZW1wbGF0ZSBjbGFzcyBpbXBsZW1l
bnRhdGlvbgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDI2ODA4
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xODk5LDYgKzE4OTksNyBAQAogCQlFM0ZG
NzUzMzFEOUNFQTE4MDBDN0UxNkQgLyogRE9NSklUR2V0dGVyU2V0dGVyLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFM0ZGNzUyRjFEOUNFQTEyMDBDN0Ux
NkQgLyogRE9NSklUR2V0dGVyU2V0dGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTQ5REMxNkMxMkVGMjk0RTAwMTg0QTFGIC8qIFNvdXJjZVBy
b3ZpZGVyQ2FjaGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEU0OURDMTUxMTJFRjI3MjIwMDE4NEExRiAvKiBTb3VyY2VQcm92aWRlckNhY2hlLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTQ5REMxNkQx
MkVGMjk1MzAwMTg0QTFGIC8qIFNvdXJjZVByb3ZpZGVyQ2FjaGVJdGVtLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDlEQzE0OTEyRUYyNjFBMDAxODRB
MUYgLyogU291cmNlUHJvdmlkZXJDYWNoZUl0ZW0uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OworCQlGRTA0MTU1MzI1MkVDMDczMDA5MUVCNUQgLyogU2xv
dFZpc2l0b3JNYWNyb3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEZFMDQxNTUyMjUyRUMwNzMwMDkxRUI1RCAvKiBTbG90VmlzaXRvck1hY3Jvcy5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUZFMDVGQUZE
MUZFNENFREEwMDA5MzIzMCAvKiBEZXByZWNhdGVkSW5zcGVjdG9yVmFsdWVzLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk5MkQ2QTExMUZCRDQ5MUQw
MDAyNDVGNCAvKiBEZXByZWNhdGVkSW5zcGVjdG9yVmFsdWVzLmNwcCAqLzsgfTsKIAkJRkUwODZC
Q0EyMTIzREVGQjAwM0YyOTI5IC8qIEVudHJ5RnJhbWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFMDg2QkM5MjEyM0RFRkEwMDNGMjkyOSAvKiBFbnRy
eUZyYW1lLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJRkUwRDRBMDYxQUI4REQwQTAwMkY1NEJGIC8qIEV4ZWN1dGlvblRpbWVMaW1pdFRlc3QuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUwRDRBMDQx
QUI4REQwQTAwMkY1NEJGIC8qIEV4ZWN1dGlvblRpbWVMaW1pdFRlc3QuY3BwICovOyB9OwpAQCAt
NTE3OCw2ICs1MTc5LDcgQEAKIAkJRjY5MkE4ODcwMjU1NTk3RDAxRkY2MEY3IC8qIEpTQ0pTVmFs
dWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBp
bmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gSlNDSlNWYWx1ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0g
ODsgfTsKIAkJRjczOTI2OTE4REM2NDMzMEFGQ0RGMEQ3IC8qIEpTU291cmNlQ29kZS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1NvdXJjZUNvZGUuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTAwMjYyMjIzRjNBRjMzMDAzQTM1OEYgLyogV2Vi
QXNzZW1ibHkuYXNtICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5hc20uYXNtOyBuYW1lID0gV2ViQXNzZW1ibHkuYXNtOyBwYXRoID0g
bGxpbnQvV2ViQXNzZW1ibHkuYXNtOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRTA0
MTU1MjI1MkVDMDczMDA5MUVCNUQgLyogU2xvdFZpc2l0b3JNYWNyb3MuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gU2xvdFZpc2l0b3JNYWNyb3MuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJRkUwODZCQzkyMTIzREVGQTAwM0YyOTI5IC8qIEVudHJ5RnJhbWUuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRW50cnlGcmFtZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlGRTBENEEwNDFBQjhERDBBMDAyRjU0QkYgLyogRXhlY3V0aW9u
VGltZUxpbWl0VGVzdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBF
eGVjdXRpb25UaW1lTGltaXRUZXN0LmNwcDsgcGF0aCA9IEFQSS90ZXN0cy9FeGVjdXRpb25UaW1l
TGltaXRUZXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkUwRDRBMDUxQUI4
REQwQTAwMkY1NEJGIC8qIEV4ZWN1dGlvblRpbWVMaW1pdFRlc3QuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gRXhlY3V0aW9uVGltZUxpbWl0VGVzdC5oOyBwYXRoID0gQVBJL3Rl
c3RzL0V4ZWN1dGlvblRpbWVMaW1pdFRlc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTYzOTAsNiArNjM5Miw3IEBACiAJCQkJQzIyNTQ5NDIxNUY3REJBQTAwNjVFODk4IC8qIFNs
b3RWaXNpdG9yLmNwcCAqLywKIAkJCQkxNEJBNzhGMDEzQUFCODhGMDA1QjdDMkMgLyogU2xvdFZp
c2l0b3IuaCAqLywKIAkJCQkwRkNCNDA4NTE1QzBBM0MzMDA0ODkzMkIgLyogU2xvdFZpc2l0b3JJ
bmxpbmVzLmggKi8sCisJCQkJRkUwNDE1NTIyNTJFQzA3MzAwOTFFQjVEIC8qIFNsb3RWaXNpdG9y
TWFjcm9zLmggKi8sCiAJCQkJMEZERTg3RkExREZFNkU1MDAwNjRDMzkwIC8qIFNwYWNlVGltZU11
dGF0b3JTY2hlZHVsZXIuY3BwICovLAogCQkJCTBGREU4N0ZCMURGRTZFNTAwMDY0QzM5MCAvKiBT
cGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyLmggKi8sCiAJCQkJMEY0RjgyODkxRTMxQjk3MTAwNzUx
ODRDIC8qIFN0b2NoYXN0aWNTcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyLmNwcCAqLywKQEAgLTky
MjUsNiArOTIyOCw3IEBACiAJCQkJNTI2NzhGOEYxQTAzMTAwOTAwNkEzMDZEIC8qIEJhc2ljQmxv
Y2tMb2NhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQ3QjgzQUMwRTZEQjhDOTAwNDc3NUE0
IC8qIEJhdGNoZWRUcmFuc2l0aW9uT3B0aW1pemVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk4Njk3
NkU1RjFGQTNFOEJDMDBFN0M0RTEgLyogQmlnSW50Q29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICov
LAorCQkJCUZFMDQxNTUzMjUyRUMwNzMwMDkxRUI1RCAvKiBTbG90VmlzaXRvck1hY3Jvcy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJODY2NzM5RDIxM0JGREU3MTAwMjNEODdDIC8qIEJpZ0ludGVnZXIu
aCBpbiBIZWFkZXJzICovLAogCQkJCTg2MTgxNjc3MUZCNzkyNDIwMEVDQzRFQyAvKiBCaWdJbnRP
YmplY3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2OTc2RTVFMUZBM0U4QjYwMEU3QzRFMSAvKiBC
aWdJbnRQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJldmlzaW9uIDI2ODA4NikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC05OTgsNyArOTk4LDggQEAgc2l6ZV90IENvZGVCbG9jazo6ZXN0aW1hdGVkU2l6ZShKU0NlbGwq
IAogICAgIHJldHVybiBCYXNlOjplc3RpbWF0ZWRTaXplKGNlbGwsIHZtKSArIGV4dHJhTWVtb3J5
QWxsb2NhdGVkOwogfQogCi12b2lkIENvZGVCbG9jazo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNl
bGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3Zv
aWQgQ29kZUJsb2NrOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZp
c2l0b3IpCiB7CiAgICAgQ29kZUJsb2NrKiB0aGlzT2JqZWN0ID0ganNDYXN0PENvZGVCbG9jayo+
KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygp
KTsKQEAgLTEwMDcsNyArMTAwOCwxMCBAQCB2b2lkIENvZGVCbG9jazo6dmlzaXRDaGlsZHJlbihK
U0NlbGwqIGNlCiAgICAgdGhpc09iamVjdC0+dmlzaXRDaGlsZHJlbih2aXNpdG9yKTsKIH0KIAot
dm9pZCBDb2RlQmxvY2s6OnZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCitERUZJ
TkVfVklTSVRfQ0hJTERSRU4oQ29kZUJsb2NrKTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRv
cj4KK3ZvaWQgQ29kZUJsb2NrOjp2aXNpdENoaWxkcmVuSW1wbChWaXNpdG9yJiB2aXNpdG9yKQog
ewogICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9sb2NrKTsKICAgICBpZiAoQ29kZUJs
b2NrKiBvdGhlckJsb2NrID0gc3BlY2lhbE9TUkVudHJ5QmxvY2tPck51bGwoKSkKQEAgLTEwMjYs
NiArMTAzMCw4IEBAIHZvaWQgQ29kZUJsb2NrOjp2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG8KICAg
ICBWTTo6U3BhY2VBbmRTZXQ6OnNldEZvcigqc3Vic3BhY2UoKSkuYWRkKHRoaXMpOwogfQogCitE
RUZJTkVfSU5TVEFOQ0VfVklTSVRfQ0hJTERSRU4oQ29kZUJsb2NrKTsKKwogYm9vbCBDb2RlQmxv
Y2s6OnNob3VsZFZpc2l0U3Ryb25nbHkoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiBsb2NrZXIp
CiB7CiAgICAgaWYgKE9wdGlvbnM6OmZvcmNlQ29kZUJsb2NrTGl2ZW5lc3MoKSkKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9uIDI2ODA4
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjAxLDEwICsyMDEsMTEgQEAgcHVibGljOgogICAgIC8vIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjM2NzcKICAgICBDb2RlQmxvY2sqIGJhc2Vs
aW5lVmVyc2lvbigpOwogCisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKKwogICAgIHN0YXRp
YyBzaXplX3QgZXN0aW1hdGVkU2l6ZShKU0NlbGwqLCBWTSYpOwotICAgIHN0YXRpYyB2b2lkIHZp
c2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKICAgICBzdGF0aWMgdm9pZCBkZXN0
cm95KEpTQ2VsbCopOwotICAgIHZvaWQgdmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYpOworICAg
IERFQ0xBUkVfSU5TVEFOQ0VfVklTSVRfQ0hJTERSRU47CiAgICAgdm9pZCBmaW5hbGl6ZVVuY29u
ZGl0aW9uYWxseShWTSYpOwogCiAgICAgdm9pZCBub3RpZnlMZXhpY2FsQmluZGluZ1VwZGF0ZSgp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGFibGVUb0NvZGVC
bG9ja0VkZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9FeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlLmNwcAkocmV2aXNpb24gMjY4MDg2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
OCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTgt
MjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTUzLDcgKzUzLDggQEAgdm9pZCBFeGVjdXRhYmxlVG9Db2RlQmxvY2tF
ZGdlOjpmaW5pc2hDcgogICAgIEFTU0VSVCghaXNBY3RpdmUoKSk7CiB9CiAKLXZvaWQgRXhlY3V0
YWJsZVRvQ29kZUJsb2NrRWRnZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNp
dG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgRXhlY3V0YWJs
ZVRvQ29kZUJsb2NrRWRnZTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9y
JiB2aXNpdG9yKQogewogICAgIFZNJiB2bSA9IHZpc2l0b3Iudm0oKTsKICAgICBFeGVjdXRhYmxl
VG9Db2RlQmxvY2tFZGdlKiBlZGdlID0ganNDYXN0PEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2Uq
PihjZWxsKTsKQEAgLTExNyw3ICsxMTgsMTAgQEAgdm9pZCBFeGVjdXRhYmxlVG9Db2RlQmxvY2tF
ZGdlOjp2aXNpdENoaQogICAgIGVkZ2UtPnJ1bkNvbnN0cmFpbnQobG9ja2VyLCB2bSwgdmlzaXRv
cik7CiB9CiAKLXZvaWQgRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZTo6dmlzaXRPdXRwdXRDb25z
dHJhaW50cyhKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorREVGSU5FX1ZJU0lU
X0NISUxEUkVOKEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UpOworCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBWaXNpdG9yPgordm9pZCBFeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlOjp2aXNpdE91dHB1dENv
bnN0cmFpbnRzSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgVk0m
IHZtID0gdmlzaXRvci52bSgpOwogICAgIEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UqIGVkZ2Ug
PSBqc0Nhc3Q8RXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZSo+KGNlbGwpOwpAQCAtMTI1LDYgKzEy
OSw4IEBAIHZvaWQgRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZTo6dmlzaXRPdXQKICAgICBlZGdl
LT5ydW5Db25zdHJhaW50KE5vTG9ja2luZ05lY2Vzc2FyeSwgdm0sIHZpc2l0b3IpOwogfQogCitE
RUZJTkVfVklTSVRfT1VUUFVUX0NPTlNUUkFJTlRTKEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2Up
OworCiB2b2lkIEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2U6OmZpbmFsaXplVW5jb25kaXRpb25h
bGx5KFZNJiB2bSkKIHsKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IG1fY29kZUJsb2NrLmdl
dCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGFibGVUb0Nv
ZGVCbG9ja0VkZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZS5oCShyZXZpc2lvbiAyNjgwODYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOC0y
MDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
OC0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtNTMsOSArNTMsOSBAQCBwdWJsaWM6CiAgICAgREVDTEFSRV9JTkZP
OwogCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2soKSBjb25zdCB7IHJldHVybiBtX2NvZGVCbG9j
ay5nZXQoKTsgfQotICAgIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwg
U2xvdFZpc2l0b3ImKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdE91dHB1dENvbnN0cmFpbnRzKEpT
Q2VsbCosIFNsb3RWaXNpdG9yJik7CisKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOworICAg
IERFQ0xBUkVfVklTSVRfT1VUUFVUX0NPTlNUUkFJTlRTOwogICAgIHZvaWQgZmluYWxpemVVbmNv
bmRpdGlvbmFsbHkoVk0mKTsKICAgICAKICAgICBzdGF0aWMgQ29kZUJsb2NrKiB1bndyYXAoRXhl
Y3V0YWJsZVRvQ29kZUJsb2NrRWRnZSogZWRnZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcAkocmV2aXNpb24gMjY4
MDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2Nr
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTItMjAxOSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTItMjAyMCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTcxLDcgKzcxLDggQEAgVW5saW5rZWRDb2RlQmxvY2s6
OlVubGlua2VkQ29kZUJsb2NrKFZNJgogICAgIH0KIH0KIAotdm9pZCBVbmxpbmtlZENvZGVCbG9j
azo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVt
cGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgVW5saW5rZWRDb2RlQmxvY2s6OnZpc2l0Q2hp
bGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBVbmxpbmtl
ZENvZGVCbG9jayogdGhpc09iamVjdCA9IGpzQ2FzdDxVbmxpbmtlZENvZGVCbG9jayo+KGNlbGwp
OwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAg
LTkwLDYgKzkxLDggQEAgdm9pZCBVbmxpbmtlZENvZGVCbG9jazo6dmlzaXRDaGlsZHJlbihKUwog
ICAgIHZpc2l0b3IucmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKGV4dHJhTWVtb3J5KTsKIH0KIAor
REVGSU5FX1ZJU0lUX0NISUxEUkVOKFVubGlua2VkQ29kZUJsb2NrKTsKKwogc2l6ZV90IFVubGlu
a2VkQ29kZUJsb2NrOjplc3RpbWF0ZWRTaXplKEpTQ2VsbCogY2VsbCwgVk0mIHZtKQogewogICAg
IFVubGlua2VkQ29kZUJsb2NrKiB0aGlzT2JqZWN0ID0ganNDYXN0PFVubGlua2VkQ29kZUJsb2Nr
Kj4oY2VsbCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRD
b2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
VW5saW5rZWRDb2RlQmxvY2suaAkocmV2aXNpb24gMjY4MDg2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTkgQXBwbGUgSW5jLiBBbGwg
UmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjAgQXBwbGUgSW5jLiBB
bGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00
MjMsNyArNDIzLDcgQEAgcHJpdmF0ZToKICAgICBSZWZDb3VudGVkQXJyYXk8RXhwcmVzc2lvblJh
bmdlSW5mbz4gbV9leHByZXNzaW9uSW5mbzsKIAogcHJvdGVjdGVkOgotICAgIHN0YXRpYyB2b2lk
IHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lU
X0NISUxEUkVOOwogICAgIHN0YXRpYyBzaXplX3QgZXN0aW1hdGVkU2l6ZShKU0NlbGwqLCBWTSYp
OwogCiBwdWJsaWM6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5r
ZWRGdW5jdGlvbkV4ZWN1dGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5jcHAJKHJldmlzaW9uIDI2
ODA4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9u
RXhlY3V0YWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDEyLTIwMTkgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEyLTIwMjAgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xNDEsNyArMTQxLDggQEAgdm9pZCBV
bmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6ZGVzdHJveQogICAgIHN0YXRpY19jYXN0PFVubGlu
a2VkRnVuY3Rpb25FeGVjdXRhYmxlKj4oY2VsbCktPn5VbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJs
ZSgpOwogfQogCi12b2lkIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlOjp2aXNpdENoaWxkcmVu
KEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPgordm9pZCBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6dmlzaXRDaGlsZHJlbklt
cGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFVubGlua2VkRnVuY3Rp
b25FeGVjdXRhYmxlKiB0aGlzT2JqZWN0ID0ganNDYXN0PFVubGlua2VkRnVuY3Rpb25FeGVjdXRh
YmxlKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBp
bmZvKCkpOwpAQCAtMTY0LDYgKzE2NSw4IEBAIHZvaWQgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFi
bGU6OnZpc2l0Q2gKICAgICB9CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihVbmxpbmtlZEZ1
bmN0aW9uRXhlY3V0YWJsZSk7CisKIFNvdXJjZUNvZGUgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFi
bGU6OmxpbmtlZFNvdXJjZUNvZGUoY29uc3QgU291cmNlQ29kZSYgcGFzc2VkUGFyZW50U291cmNl
KSBjb25zdAogewogICAgIGNvbnN0IFNvdXJjZUNvZGUmIHBhcmVudFNvdXJjZSA9ICFtX2lzQnVp
bHRpbkRlZmF1bHRDbGFzc0NvbnN0cnVjdG9yID8gcGFzc2VkUGFyZW50U291cmNlIDogQnVpbHRp
bkV4ZWN1dGFibGVzOjpkZWZhdWx0Q29uc3RydWN0b3JTb3VyY2VDb2RlKGNvbnN0cnVjdG9yS2lu
ZCgpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZEZ1bmN0
aW9uRXhlY3V0YWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9VbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5oCShyZXZpc2lvbiAyNjgwODYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUu
aAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTItMjAxOSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTItMjAyMCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTIzMiw3ICsyMzIsNyBAQCBwcml2YXRlOgogICAgIFVubGlu
a2VkRnVuY3Rpb25FeGVjdXRhYmxlKFZNJiwgU3RydWN0dXJlKiwgY29uc3QgU291cmNlQ29kZSYs
IEZ1bmN0aW9uTWV0YWRhdGFOb2RlKiwgVW5saW5rZWRGdW5jdGlvbktpbmQsIENvbnN0cnVjdEFi
aWxpdHksIEpTUGFyc2VyU2NyaXB0TW9kZSwgT3B0aW9uYWw8Q29tcGFjdFZhcmlhYmxlTWFwOjpI
YW5kbGU+LCAgSlNDOjpEZXJpdmVkQ29udGV4dFR5cGUsIEpTQzo6TmVlZHNDbGFzc0ZpZWxkSW5p
dGlhbGl6ZXIsIGJvb2wgaXNCdWlsdGluRGVmYXVsdENsYXNzQ29uc3RydWN0b3IpOwogICAgIFVu
bGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKERlY29kZXImLCBjb25zdCBDYWNoZWRGdW5jdGlvbkV4
ZWN1dGFibGUmKTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xv
dFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgdm9pZCBkZWNv
ZGVDYWNoZWRDb2RlQmxvY2tzKFZNJik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZWJ1Z2dlci9EZWJ1Z2dlclNjb3BlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGVidWdnZXIvRGVidWdnZXJTY29wZS5jcHAJKHJldmlzaW9uIDI2ODA4NikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlclNjb3BlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxOSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAyMCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTU1LDcgKzU1LDggQEAgdm9pZCBEZWJ1Z2dlclNjb3BlOjpmaW5pc2hDcmVhdGlv
bihWTSYgdgogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKIH0KIAotdm9pZCBEZWJ1Z2dl
clNjb3BlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3Ip
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBEZWJ1Z2dlclNjb3BlOjp2aXNpdENo
aWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgRGVidWdn
ZXJTY29wZSogdGhpc09iamVjdCA9IGpzQ2FzdDxEZWJ1Z2dlclNjb3BlKj4oY2VsbCk7CiAgICAg
QVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNjUsNiAr
NjYsOCBAQCB2b2lkIERlYnVnZ2VyU2NvcGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsCiAgICAgdmlz
aXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9uZXh0KTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxE
UkVOKERlYnVnZ2VyU2NvcGUpOworCiBTdHJpbmcgRGVidWdnZXJTY29wZTo6Y2xhc3NOYW1lKGNv
bnN0IEpTT2JqZWN0KiBvYmplY3QsIFZNJiB2bSkKIHsKICAgICBjb25zdCBEZWJ1Z2dlclNjb3Bl
KiBzY29wZSA9IGpzQ2FzdDxjb25zdCBEZWJ1Z2dlclNjb3BlKj4ob2JqZWN0KTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlclNjb3BlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyU2NvcGUuaAkocmV2aXNp
b24gMjY4MDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyU2Nv
cGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDYsNyArNDYsNyBAQCBwdWJsaWM6CiAKICAgICBKU19F
WFBPUlRfUFJJVkFURSBzdGF0aWMgRGVidWdnZXJTY29wZSogY3JlYXRlKFZNJiB2bSwgSlNTY29w
ZSogc2NvcGUpOwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90
VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAgICAgc3RhdGljIFN0cmlu
ZyBjbGFzc05hbWUoY29uc3QgSlNPYmplY3QqLCBWTSYpOwogICAgIHN0YXRpYyBTdHJpbmcgdG9T
dHJpbmdOYW1lKGNvbnN0IEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqKTsKICAgICBzdGF0aWMg
Ym9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIFByb3Bl
cnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0Rlc2lyZWRUcmFuc2l0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdEZXNpcmVkVHJhbnNpdGlvbnMuY3BwCShyZXZpc2lvbiAyNjgwODYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRUcmFuc2l0aW9ucy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTUyLDEzICs1MiwxNiBAQCB2b2lkIERlc2lyZWRUcmFuc2l0aW9uOjpy
ZWFsbHlBZGQoVk0mIHZtCiAgICAgICAgICAgICBtX29sZFN0cnVjdHVyZSwgbV9uZXdTdHJ1Y3R1
cmUpKTsKIH0KIAotdm9pZCBEZXNpcmVkVHJhbnNpdGlvbjo6dmlzaXRDaGlsZHJlbihTbG90Vmlz
aXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIERlc2lyZWRU
cmFuc2l0aW9uOjp2aXNpdENoaWxkcmVuSW1wbChWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHZp
c2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQobV9jb2RlT3JpZ2luT3duZXIpOwogICAgIHZpc2l0b3Iu
YXBwZW5kVW5iYXJyaWVyZWQobV9vbGRTdHJ1Y3R1cmUpOwogICAgIHZpc2l0b3IuYXBwZW5kVW5i
YXJyaWVyZWQobV9uZXdTdHJ1Y3R1cmUpOwogfQogCitERUZJTkVfSU5TVEFOQ0VfVklTSVRfQ0hJ
TERSRU4oRGVzaXJlZFRyYW5zaXRpb24pOworCiBEZXNpcmVkVHJhbnNpdGlvbnM6OkRlc2lyZWRU
cmFuc2l0aW9ucygpCiB7CiB9CkBAIC03OCwxMiArODEsMTUgQEAgdm9pZCBEZXNpcmVkVHJhbnNp
dGlvbnM6OnJlYWxseUFkZChWTSYgdgogICAgICAgICBtX3RyYW5zaXRpb25zW2ldLnJlYWxseUFk
ZCh2bSwgY29tbW9uKTsKIH0KIAotdm9pZCBEZXNpcmVkVHJhbnNpdGlvbnM6OnZpc2l0Q2hpbGRy
ZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9p
ZCBEZXNpcmVkVHJhbnNpdGlvbnM6OnZpc2l0Q2hpbGRyZW5JbXBsKFZpc2l0b3ImIHZpc2l0b3Ip
CiB7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fdHJhbnNpdGlvbnMuc2l6ZSgpOyBp
KyspCiAgICAgICAgIG1fdHJhbnNpdGlvbnNbaV0udmlzaXRDaGlsZHJlbih2aXNpdG9yKTsKIH0K
IAorREVGSU5FX0lOU1RBTkNFX1ZJU0lUX0NISUxEUkVOKERlc2lyZWRUcmFuc2l0aW9ucyk7CisK
IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIAogI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkVHJhbnNpdGlvbnMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRUcmFuc2l0
aW9ucy5oCShyZXZpc2lvbiAyNjgwODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0Rlc2lyZWRUcmFuc2l0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC00Niw4ICs0Niw3IEBAIHB1
YmxpYzoKICAgICBEZXNpcmVkVHJhbnNpdGlvbihDb2RlQmxvY2sqLCBDb2RlQmxvY2sqIGNvZGVP
cmlnaW5Pd25lciwgU3RydWN0dXJlKiwgU3RydWN0dXJlKik7CiAKICAgICB2b2lkIHJlYWxseUFk
ZChWTSYsIENvbW1vbkRhdGEqKTsKLSAgICAKLSAgICB2b2lkIHZpc2l0Q2hpbGRyZW4oU2xvdFZp
c2l0b3ImKTsKKyAgICBERUNMQVJFX0lOU1RBTkNFX1ZJU0lUX0NISUxEUkVOOwogCiBwcml2YXRl
OgogICAgIENvZGVCbG9jayogbV9jb2RlQmxvY2s7CkBAIC02Myw3ICs2Miw3IEBAIHB1YmxpYzoK
IAogICAgIHZvaWQgYWRkTGF6aWx5KENvZGVCbG9jayosIENvZGVCbG9jayogY29kZU9yaWdpbk93
bmVyLCBTdHJ1Y3R1cmUqLCBTdHJ1Y3R1cmUqKTsKICAgICB2b2lkIHJlYWxseUFkZChWTSYsIENv
bW1vbkRhdGEqKTsKLSAgICB2b2lkIHZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKKyAgICBE
RUNMQVJFX0lOU1RBTkNFX1ZJU0lUX0NISUxEUkVOOwogCiBwcml2YXRlOgogICAgIFZlY3RvcjxE
ZXNpcmVkVHJhbnNpdGlvbj4gbV90cmFuc2l0aW9uczsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHRGVzaXJlZFdlYWtSZWZlcmVuY2VzLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXZWFrUmVmZXJlbmNlcy5jcHAJKHJldmlz
aW9uIDI2ODA4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFdlYWtS
ZWZlcmVuY2VzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODcsMTIgKzg3LDE1IEBAIHZvaWQgRGVz
aXJlZFdlYWtSZWZlcmVuY2VzOjpyZWFsbHlBZGQoVk0KICAgICB9CiB9CiAKLXZvaWQgRGVzaXJl
ZFdlYWtSZWZlcmVuY2VzOjp2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVt
cGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgRGVzaXJlZFdlYWtSZWZlcmVuY2VzOjp2aXNp
dENoaWxkcmVuSW1wbChWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGZvciAoSlNDZWxsKiB0YXJn
ZXQgOiBtX3JlZmVyZW5jZXMpCiAgICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQodGFy
Z2V0KTsKIH0KIAorREVGSU5FX0lOU1RBTkNFX1ZJU0lUX0NISUxEUkVOKERlc2lyZWRXZWFrUmVm
ZXJlbmNlcyk7CisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIAogI2VuZGlmIC8vIEVOQUJM
RShERkdfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2Vh
a1JlZmVyZW5jZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0Rlc2lyZWRXZWFrUmVmZXJlbmNlcy5oCShyZXZpc2lvbiAyNjgwODYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXZWFrUmVmZXJlbmNlcy5oCSh3b3JraW5nIGNvcHkp
CkBAIC01Myw3ICs1Myw3IEBAIHB1YmxpYzoKICAgICAKICAgICB2b2lkIHJlYWxseUFkZChWTSYs
IENvbW1vbkRhdGEqKTsKICAgICAKLSAgICB2b2lkIHZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3Im
KTsKKyAgICBERUNMQVJFX0lOU1RBTkNFX1ZJU0lUX0NISUxEUkVOOwogCiBwcml2YXRlOgogICAg
IENvZGVCbG9jayogbV9jb2RlQmxvY2s7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0dyYXBoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0dyYXBoLmNwcAkocmV2aXNpb24gMjY4MDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdHcmFwaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk3Nyw3ICs5NzcsNyBAQCBCbG9ja0xp
c3QgR3JhcGg6OmJsb2Nrc0luUG9zdE9yZGVyKGJvb2wgCiAgICAgICAgIH0KICAgICB9CiAKLSAg
ICBpZiAoaXNTYWZlVG9WYWxpZGF0ZSAmJiB2YWxpZGF0aW9uRW5hYmxlZCgpKSB7IC8vIFRoZXJl
IGFyZSB1c2VycyBvZiB0aGlzIHdoZXJlIHdlIGhhdmVuJ3QgeWV0IGJ1aWx0IG9mIHRoZSBDRkcg
ZW5vdWdoIHRvIGJlIGFibGUgdG8gcnVuIGRvbWluYXRvcnMuCisgICAgaWYgKGlzU2FmZVRvVmFs
aWRhdGUgJiYgdmFsaWRhdGlvbkVuYWJsZWQoKSkgeyAvLyBUaGVyZSBhcmUgdXNlcnMgb2YgdGhp
cyB3aGVyZSB3ZSBoYXZlbid0IHlldCBidWlsdCB0aGUgQ0ZHIGVub3VnaCB0byBiZSBhYmxlIHRv
IHJ1biBkb21pbmF0b3JzLgogICAgICAgICBhdXRvIHZhbGlkYXRlUmVzdWx0cyA9IFsmXSAoYXV0
byYgZG9taW5hdG9ycykgewogICAgICAgICAgICAgLy8gV2hlbiBpdGVyYXRpbmcgb3ZlciByZXZl
cnNlIHBvc3Qgb3JkZXIsIHdlIHNob3VsZCBzZWUgZG9taW5hdG9ycwogICAgICAgICAgICAgLy8g
YmVmb3JlIHRoaW5ncyB0aGV5IGRvbWluYXRlLgpAQCAtMTQ0OCw3ICsxNDQ4LDggQEAgdm9pZCBH
cmFwaDo6cmVnaXN0ZXJGcm96ZW5WYWx1ZXMoKQogICAgIG1fY29kZUJsb2NrLT5jb25zdGFudHNT
b3VyY2VDb2RlUmVwcmVzZW50YXRpb24oKS5zaHJpbmtUb0ZpdCgpOwogfQogCi12b2lkIEdyYXBo
Ojp2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUg
VmlzaXRvcj4KK3ZvaWQgR3JhcGg6OnZpc2l0Q2hpbGRyZW5JbXBsKFZpc2l0b3ImIHZpc2l0b3Ip
CiB7CiAgICAgZm9yIChGcm96ZW5WYWx1ZSogdmFsdWUgOiBtX2Zyb3plblZhbHVlcykgewogICAg
ICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKHZhbHVlLT52YWx1ZSgpKTsKQEAgLTE0NTYs
NiArMTQ1Nyw4IEBAIHZvaWQgR3JhcGg6OnZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHYKICAg
ICB9CiB9CiAKK0RFRklORV9GSU5BTF9WSVNJVF9DSElMRFJFTihHcmFwaCk7CisKIEZyb3plblZh
bHVlKiBHcmFwaDo6ZnJlZXplKEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgaWYgKFVOTElLRUxZKCF2
YWx1ZSkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCShyZXZpc2lvbiAy
NjgwODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEwMDAsOSArMTAwMCw5IEBAIHB1YmxpYzoKICAgICBib29sIGNhbkRvRmFzdFNw
cmVhZChOb2RlKiwgY29uc3QgQWJzdHJhY3RWYWx1ZSYpOwogICAgIAogICAgIHZvaWQgcmVnaXN0
ZXJGcm96ZW5WYWx1ZXMoKTsKLSAgICAKLSAgICB2b2lkIHZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0
b3ImKSBmaW5hbDsKLSAgICAKKworICAgIERFQ0xBUkVfRklOQUxfVklTSVRfQ0hJTERSRU47CisK
ICAgICB2b2lkIGxvZ0Fzc2VydGlvbkZhaWx1cmUoCiAgICAgICAgIHN0ZDo6bnVsbHB0cl90LCBj
b25zdCBjaGFyKiBmaWxlLCBpbnQgbGluZSwgY29uc3QgY2hhciogZnVuY3Rpb24sCiAgICAgICAg
IGNvbnN0IGNoYXIqIGFzc2VydGlvbik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1BsYW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
UGxhbi5jcHAJKHJldmlzaW9uIDI2ODA4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHUGxhbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY3Miw3ICs2NzIsOCBAQCBDb21waWxhdGlv
bktleSBQbGFuOjprZXkoKQogICAgIHJldHVybiBDb21waWxhdGlvbktleShtX2NvZGVCbG9jay0+
YWx0ZXJuYXRpdmUoKSwgbV9tb2RlKTsKIH0KIAotdm9pZCBQbGFuOjpjaGVja0xpdmVuZXNzQW5k
VmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZp
c2l0b3I+Cit2b2lkIFBsYW46OmNoZWNrTGl2ZW5lc3NBbmRWaXNpdENoaWxkcmVuSW1wbChWaXNp
dG9yJiB2aXNpdG9yKQogewogICAgIGlmICghaXNLbm93blRvQmVMaXZlRHVyaW5nR0MoKSkKICAg
ICAgICAgcmV0dXJuOwpAQCAtNzAyLDYgKzcwMyw4IEBAIHZvaWQgUGxhbjo6Y2hlY2tMaXZlbmVz
c0FuZFZpc2l0Q2hpbGRyZW4KICAgICBtX3RyYW5zaXRpb25zLnZpc2l0Q2hpbGRyZW4odmlzaXRv
cik7CiB9CiAKK0RFRklORV9JTlNUQU5DRV9TTE9UX1ZJU0lUT1JfTUVUSE9EKHZvaWQsIFBsYW4s
IGNoZWNrTGl2ZW5lc3NBbmRWaXNpdENoaWxkcmVuKTsKKwogdm9pZCBQbGFuOjpmaW5hbGl6ZUlu
R0MoKQogewogICAgIEFTU0VSVChtX3ZtKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHUGxhbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
UGxhbi5oCShyZXZpc2lvbiAyNjgwODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1BsYW4uaAkod29ya2luZyBjb3B5KQpAQCAtMzgsNiArMzgsNyBAQAogI2luY2x1ZGUgIk9wZXJh
bmRzLmgiCiAjaW5jbHVkZSAiUHJvZmlsZXJDb21waWxhdGlvbi5oIgogI2luY2x1ZGUgIlJlY29y
ZGVkU3RhdHVzZXMuaCIKKyNpbmNsdWRlICJTbG90VmlzaXRvck1hY3Jvcy5oIgogI2luY2x1ZGUg
PHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+CiAK
QEAgLTcyLDcgKzczLDcgQEAgcHVibGljOgogICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1
bmM+CiAgICAgdm9pZCBpdGVyYXRlQ29kZUJsb2Nrc0ZvckdDKGNvbnN0IEZ1bmMmKTsKLSAgICB2
b2lkIGNoZWNrTGl2ZW5lc3NBbmRWaXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CisgICAgREVD
TEFSRV9JTlNUQU5DRV9TTE9UX1ZJU0lUT1JfTUVUSE9EKHZvaWQsIGNoZWNrTGl2ZW5lc3NBbmRW
aXNpdENoaWxkcmVuKTsKICAgICBib29sIGlzS25vd25Ub0JlTGl2ZUR1cmluZ0dDKCk7CiAgICAg
dm9pZCBmaW5hbGl6ZUluR0MoKTsKICAgICB2b2lkIGNhbmNlbCgpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlcG9pbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZXBvaW50LmNwcAkocmV2aXNpb24gMjY4MDg2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlcG9pbnQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC04Myw3ICs4Myw4IEBAIHZvaWQgU2FmZXBvaW50OjpiZWdpbigpCiAgICAgfQogfQogCi12
b2lkIFNhZmVwb2ludDo6Y2hlY2tMaXZlbmVzc0FuZFZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3Im
IHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBTYWZlcG9pbnQ6OmNo
ZWNrTGl2ZW5lc3NBbmRWaXNpdENoaWxkcmVuSW1wbChWaXNpdG9yJiB2aXNpdG9yKQogewogICAg
IFJFTEVBU0VfQVNTRVJUKG1fZGlkQ2FsbEJlZ2luKTsKIApAQCAtOTcsNiArOTgsOCBAQCB2b2lk
IFNhZmVwb2ludDo6Y2hlY2tMaXZlbmVzc0FuZFZpc2l0Q2hpCiAgICAgICAgIG1fc2Nhbm5hYmxl
c1tpXS0+dmlzaXRDaGlsZHJlbih2aXNpdG9yKTsKIH0KIAorREVGSU5FX0lOU1RBTkNFX1NMT1Rf
VklTSVRPUl9NRVRIT0Qodm9pZCwgU2FmZXBvaW50LCBjaGVja0xpdmVuZXNzQW5kVmlzaXRDaGls
ZHJlbik7CisKIGJvb2wgU2FmZXBvaW50Ojppc0tub3duVG9CZUxpdmVEdXJpbmdHQygpCiB7CiAg
ICAgUkVMRUFTRV9BU1NFUlQobV9kaWRDYWxsQmVnaW4pOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTYWZlcG9pbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NhZmVwb2ludC5oCShyZXZpc2lvbiAyNjgwODYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVwb2ludC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsy
Nyw3IEBACiAKICNpZiBFTkFCTEUoREZHX0pJVCkKIAorI2luY2x1ZGUgIlNsb3RWaXNpdG9yTWFj
cm9zLmgiCiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTY3
LDcgKzY4LDcgQEAgcHVibGljOgogICAgIAogICAgIHZvaWQgYmVnaW4oKTsKICAgICAKLSAgICB2
b2lkIGNoZWNrTGl2ZW5lc3NBbmRWaXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CisgICAgREVD
TEFSRV9JTlNUQU5DRV9TTE9UX1ZJU0lUT1JfTUVUSE9EKHZvaWQsIGNoZWNrTGl2ZW5lc3NBbmRW
aXNpdENoaWxkcmVuKTsKICAgICBib29sIGlzS25vd25Ub0JlTGl2ZUR1cmluZ0dDKCk7CiAgICAg
dm9pZCBjYW5jZWwoKTsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U2Nhbm5hYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
Y2FubmFibGUuaAkocmV2aXNpb24gMjY4MDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTY2FubmFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzksNiArMzksNyBAQCBwdWJsaWM6
CiAgICAgdmlydHVhbCB+U2Nhbm5hYmxlKCkgeyB9CiAgICAgCiAgICAgdmlydHVhbCB2b2lkIHZp
c2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0Q2hp
bGRyZW4oRGVidWdTbG90VmlzaXRvciYpID0gMDsgLy8gbWxhbQogfTsKIAogfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlz
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlz
dC5jcHAJKHJldmlzaW9uIDI2ODA4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
V29ya2xpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNzIsNyArMzcyLDggQEAgdm9pZCBXb3Jr
bGlzdDo6cmVzdW1lQWxsVGhyZWFkcygpCiAgICAgbV9zdXNwZW5zaW9uTG9jay51bmxvY2soKTsK
IH0KIAotdm9pZCBXb3JrbGlzdDo6dmlzaXRXZWFrUmVmZXJlbmNlcyhTbG90VmlzaXRvciYgdmlz
aXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFdvcmtsaXN0Ojp2aXNpdFdl
YWtSZWZlcmVuY2VzSW1wbChWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFZNKiB2bSA9ICZ2aXNp
dG9yLmhlYXAoKS0+dm0oKTsKICAgICB7CkBAIC0zOTYsNiArMzk3LDggQEAgdm9pZCBXb3JrbGlz
dDo6dmlzaXRXZWFrUmVmZXJlbmNlcyhTbG90VgogICAgIH0KIH0KIAorREVGSU5FX0lOU1RBTkNF
X1NMT1RfVklTSVRPUl9NRVRIT0Qodm9pZCwgV29ya2xpc3QsIHZpc2l0V2Vha1JlZmVyZW5jZXMp
OworCiB2b2lkIFdvcmtsaXN0OjpyZW1vdmVEZWFkUGxhbnMoVk0mIHZtKQogewogICAgIHsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3QuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0LmgJKHJldmlzaW9uIDI2ODA4
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3QuaAkod29ya2luZyBj
b3B5KQpAQCAtNzMsNyArNzMsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc0FjdGl2ZUZvclZNKFZN
JikgY29uc3Q7CiAgICAgCiAgICAgLy8gT25seSBjYWxsZWQgb24gdGhlIG1haW4gdGhyZWFkIGFm
dGVyIHN1c3BlbmRpbmcgYWxsIHRocmVhZHMuCi0gICAgdm9pZCB2aXNpdFdlYWtSZWZlcmVuY2Vz
KFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9JTlNUQU5DRV9TTE9UX1ZJU0lUT1JfTUVUSE9E
KHZvaWQsIHZpc2l0V2Vha1JlZmVyZW5jZXMpOwogICAgIHZvaWQgcmVtb3ZlRGVhZFBsYW5zKFZN
Jik7CiAgICAgCiAgICAgdm9pZCByZW1vdmVOb25Db21waWxpbmdQbGFuc0ZvclZNKFZNJik7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAkocmV2aXNpb24gMjY4MDg2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2
OTcsNiArMjY5Nyw3IEBAIHZvaWQgSGVhcDo6ZGlkRnJlZUJsb2NrKHNpemVfdCBjYXBhY2l0eSkK
ICNlbmRpZgogfQogCisvLyBtbGFtIEZJWE1FCiB2b2lkIEhlYXA6OmFkZENvcmVDb25zdHJhaW50
cygpCiB7CiAgICAgbV9jb25zdHJhaW50U2V0LT5hZGQoCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9TbG90VmlzaXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmgJKHJldmlzaW9uIDI2ODA4NikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2OCw2ICsy
NjgsMTEgQEAgcHVibGljOgogI2VuZGlmCiB9OwogCitjbGFzcyBEZWJ1Z1Nsb3RWaXNpdG9yIDog
cHVibGljIFNsb3RWaXNpdG9yIC8vIG1sYW0gVEVTVAoreworCit9OworCiBjbGFzcyBQYXJhbGxl
bE1vZGVFbmFibGVyIHsKIHB1YmxpYzoKICAgICBQYXJhbGxlbE1vZGVFbmFibGVyKFNsb3RWaXNp
dG9yJiBzdGFjaykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TaGFk
b3dDaGlja2VuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJw
cmV0ZXIvU2hhZG93Q2hpY2tlbi5jcHAJKHJldmlzaW9uIDI2ODA4NikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnRlcnByZXRlci9TaGFkb3dDaGlja2VuLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDQwLDcgKzQ0MCw4IEBAIHZvaWQgU2hhZG93Q2hpY2tlbjo6dXBkYXRlKFZNJiB2bSwgQ2Fs
bEYKICAgICAgICAgZGF0YUxvZygiICAgIEFmdGVyIGNsZWFuLXVwOiAiLCAqdGhpcywgIlxuIik7
CiB9CiAKLXZvaWQgU2hhZG93Q2hpY2tlbjo6dmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYgdmlz
aXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFNoYWRvd0NoaWNrZW46OnZp
c2l0Q2hpbGRyZW5JbXBsKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgZm9yICh1bnNpZ25lZCBp
ID0gbV9sb2dDdXJzb3IgLSBtX2xvZzsgaS0tOykgewogICAgICAgICBKU09iamVjdCogY2FsbGVl
ID0gbV9sb2dbaV0uY2FsbGVlOwpAQCAtNDY1LDYgKzQ2Niw4IEBAIHZvaWQgU2hhZG93Q2hpY2tl
bjo6dmlzaXRDaGlsZHJlbihTbG90VmkKICAgICB9CiB9CiAKK0RFRklORV9JTlNUQU5DRV9WSVNJ
VF9DSElMRFJFTihTaGFkb3dDaGlja2VuKTsKKwogdm9pZCBTaGFkb3dDaGlja2VuOjpyZXNldCgp
CiB7CiAgICAgbV9sb2dDdXJzb3IgPSBtX2xvZzsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnRlcnByZXRlci9TaGFkb3dDaGlja2VuLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ludGVycHJldGVyL1NoYWRvd0NoaWNrZW4uaAkocmV2aXNpb24gMjY4MDg2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1NoYWRvd0NoaWNrZW4uaAkod29y
a2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogCiAjaW5jbHVkZSAiQ2FsbEZyYW1lLmgiCiAj
aW5jbHVkZSAiSlNDSlNWYWx1ZS5oIgorI2luY2x1ZGUgIlNsb3RWaXNpdG9yTWFjcm9zLmgiCiAj
aW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4K
ICNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KQEAgLTE5Niw3ICsxOTcsNyBAQCBwdWJsaWM6
CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KICAgICB2b2lkIGl0ZXJhdGUoVk0mLCBD
YWxsRnJhbWUqLCBjb25zdCBGdW5jdG9yJik7CiAgICAgCi0gICAgdm9pZCB2aXNpdENoaWxkcmVu
KFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9JTlNUQU5DRV9WSVNJVF9DSElMRFJFTjsKICAg
ICB2b2lkIHJlc2V0KCk7CiAgICAgCiAgICAgLy8gSklUIHN1cHBvcnQuCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9BYnN0cmFjdE1vZHVsZVJlY29yZC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQWJzdHJhY3RNb2R1bGVSZWNvcmQu
Y3BwCShyZXZpc2lvbiAyNjgwODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9B
YnN0cmFjdE1vZHVsZVJlY29yZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYwLDcgKzYwLDggQEAg
dm9pZCBBYnN0cmFjdE1vZHVsZVJlY29yZDo6ZmluaXNoQ3JlYXRpbwogICAgIHB1dERpcmVjdCh2
bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImRlcGVuZGVuY2llc01hcCJfcyksIG1fZGVw
ZW5kZW5jaWVzTWFwLmdldCgpKTsKIH0KIAotdm9pZCBBYnN0cmFjdE1vZHVsZVJlY29yZDo6dmlz
aXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8
dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgQWJzdHJhY3RNb2R1bGVSZWNvcmQ6OnZpc2l0Q2hpbGRy
ZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBBYnN0cmFjdE1v
ZHVsZVJlY29yZCogdGhpc09iamVjdCA9IGpzQ2FzdDxBYnN0cmFjdE1vZHVsZVJlY29yZCo+KGNl
bGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsK
QEAgLTcwLDYgKzcxLDggQEAgdm9pZCBBYnN0cmFjdE1vZHVsZVJlY29yZDo6dmlzaXRDaGlsZHJl
bgogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fZGVwZW5kZW5jaWVzTWFwKTsKIH0K
IAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEFic3RyYWN0TW9kdWxlUmVjb3JkKTsKKwogdm9pZCBB
YnN0cmFjdE1vZHVsZVJlY29yZDo6YXBwZW5kUmVxdWVzdGVkTW9kdWxlKGNvbnN0IElkZW50aWZp
ZXImIG1vZHVsZU5hbWUpCiB7CiAgICAgbV9yZXF1ZXN0ZWRNb2R1bGVzLmFkZChtb2R1bGVOYW1l
LmltcGwoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BYnN0cmFjdE1v
ZHVsZVJlY29yZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0Fic3RyYWN0TW9kdWxlUmVjb3JkLmgJKHJldmlzaW9uIDI2ODA4NikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0Fic3RyYWN0TW9kdWxlUmVjb3JkLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEzNiw3ICsxMzYsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgQWJzdHJhY3RNb2R1bGVSZWNvcmQo
Vk0mLCBTdHJ1Y3R1cmUqLCBjb25zdCBJZGVudGlmaWVyJik7CiAgICAgdm9pZCBmaW5pc2hDcmVh
dGlvbihKU0dsb2JhbE9iamVjdCosIFZNJik7CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxk
cmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsK
IAogICAgIHZvaWQgc2V0TW9kdWxlRW52aXJvbm1lbnQoSlNHbG9iYWxPYmplY3QqLCBKU01vZHVs
ZUVudmlyb25tZW50Kik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Ns
YXNzSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Ns
YXNzSW5mby5oCShyZXZpc2lvbiAyNjgwODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9DbGFzc0luZm8uaAkod29ya2luZyBjb3B5KQpAQCAtNDQsOSArNDQsNiBAQCBzdHJ1Y3Qg
TWV0aG9kVGFibGUgewogICAgIHVzaW5nIERlc3Ryb3lGdW5jdGlvblB0ciA9IHZvaWQgKCopKEpT
Q2VsbCopOwogICAgIERlc3Ryb3lGdW5jdGlvblB0ciBNRVRIT0RfVEFCTEVfRU5UUlkoZGVzdHJv
eSk7CiAKLSAgICB1c2luZyBWaXNpdENoaWxkcmVuRnVuY3Rpb25QdHIgPSB2b2lkICgqKShKU0Nl
bGwqLCBTbG90VmlzaXRvciYpOwotICAgIFZpc2l0Q2hpbGRyZW5GdW5jdGlvblB0ciBNRVRIT0Rf
VEFCTEVfRU5UUlkodmlzaXRDaGlsZHJlbik7Ci0KICAgICB1c2luZyBHZXRDYWxsRGF0YUZ1bmN0
aW9uUHRyID0gQ2FsbERhdGEgKCopKEpTQ2VsbCopOwogICAgIEdldENhbGxEYXRhRnVuY3Rpb25Q
dHIgTUVUSE9EX1RBQkxFX0VOVFJZKGdldENhbGxEYXRhKTsKIApAQCAtMTI4LDggKzEyNSwyMiBA
QCBzdHJ1Y3QgTWV0aG9kVGFibGUgewogICAgIHVzaW5nIEVzdGltYXRlZFNpemVGdW5jdGlvblB0
ciA9IHNpemVfdCAoKikoSlNDZWxsKiwgVk0mKTsKICAgICBFc3RpbWF0ZWRTaXplRnVuY3Rpb25Q
dHIgTUVUSE9EX1RBQkxFX0VOVFJZKGVzdGltYXRlZFNpemUpOwogCisgICAgdXNpbmcgVmlzaXRD
aGlsZHJlbkZ1bmN0aW9uUHRyID0gdm9pZCAoKikoSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAg
ICBWaXNpdENoaWxkcmVuRnVuY3Rpb25QdHIgTUVUSE9EX1RBQkxFX0VOVFJZKHZpc2l0Q2hpbGRy
ZW5XaXRoU2xvdFZpc2l0b3IpOworCiAgICAgdXNpbmcgVmlzaXRPdXRwdXRDb25zdHJhaW50c1B0
ciA9IHZvaWQgKCopKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7Ci0gICAgVmlzaXRPdXRwdXRDb25z
dHJhaW50c1B0ciBNRVRIT0RfVEFCTEVfRU5UUlkodmlzaXRPdXRwdXRDb25zdHJhaW50cyk7Cisg
ICAgVmlzaXRPdXRwdXRDb25zdHJhaW50c1B0ciBNRVRIT0RfVEFCTEVfRU5UUlkodmlzaXRPdXRw
dXRDb25zdHJhaW50c1dpdGhTbG90VmlzaXRvcik7CisKKyAgICB1c2luZyBWaXNpdENoaWxkcmVu
V2l0aERlYnVnU2xvdFZpc2l0b3JQdHIgPSB2b2lkICgqKShKU0NlbGwqLCBEZWJ1Z1Nsb3RWaXNp
dG9yJik7CisgICAgVmlzaXRDaGlsZHJlbldpdGhEZWJ1Z1Nsb3RWaXNpdG9yUHRyIE1FVEhPRF9U
QUJMRV9FTlRSWSh2aXNpdENoaWxkcmVuV2l0aERlYnVnU2xvdFZpc2l0b3IpOworCisgICAgdXNp
bmcgVmlzaXRPdXRwdXRDb25zdHJhaW50c1dpdGhEZWJ1Z1Nsb3RWaXNpdG9yUHRyID0gdm9pZCAo
KikoSlNDZWxsKiwgRGVidWdTbG90VmlzaXRvciYpOworICAgIFZpc2l0T3V0cHV0Q29uc3RyYWlu
dHNXaXRoRGVidWdTbG90VmlzaXRvclB0ciBNRVRIT0RfVEFCTEVfRU5UUlkodmlzaXRPdXRwdXRD
b25zdHJhaW50c1dpdGhEZWJ1Z1Nsb3RWaXNpdG9yKTsKKworICAgIEFMV0FZU19JTkxJTkUgdm9p
ZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0
IHsgdmlzaXRDaGlsZHJlbldpdGhTbG90VmlzaXRvcihjZWxsLCB2aXNpdG9yKTsgfQorICAgIEFM
V0FZU19JTkxJTkUgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgRGVidWdTbG90Vmlz
aXRvciYgdmlzaXRvcikgY29uc3QgeyB2aXNpdENoaWxkcmVuV2l0aERlYnVnU2xvdFZpc2l0b3Io
Y2VsbCwgdmlzaXRvcik7IH0KKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgdmlzaXRPdXRwdXRDb25z
dHJhaW50cyhKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBjb25zdCB7IHZpc2l0
T3V0cHV0Q29uc3RyYWludHNXaXRoU2xvdFZpc2l0b3IoY2VsbCwgdmlzaXRvcik7IH0KKyAgICBB
TFdBWVNfSU5MSU5FIHZvaWQgdmlzaXRPdXRwdXRDb25zdHJhaW50cyhKU0NlbGwqIGNlbGwsIERl
YnVnU2xvdFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0IHsgdmlzaXRPdXRwdXRDb25zdHJhaW50c1dp
dGhEZWJ1Z1Nsb3RWaXNpdG9yKGNlbGwsIHZpc2l0b3IpOyB9CiB9OwogCiAjZGVmaW5lIENSRUFU
RV9NRU1CRVJfQ0hFQ0tFUihtZW1iZXIpIFwKQEAgLTE1NSw3ICsxNjYsNiBAQCBzdHJ1Y3QgTWV0
aG9kVGFibGUgewogICAgIEpTQ2FzdGluZ0hlbHBlcnM6OkluaGVyaXRzVHJhaXRzPENsYXNzTmFt
ZT46OnR5cGVSYW5nZSwgXAogICAgIHsgXAogICAgICAgICAmQ2xhc3NOYW1lOjpkZXN0cm95LCBc
Ci0gICAgICAgICZDbGFzc05hbWU6OnZpc2l0Q2hpbGRyZW4sIFwKICAgICAgICAgJkNsYXNzTmFt
ZTo6Z2V0Q2FsbERhdGEsIFwKICAgICAgICAgJkNsYXNzTmFtZTo6Z2V0Q29uc3RydWN0RGF0YSwg
XAogICAgICAgICAmQ2xhc3NOYW1lOjpwdXQsIFwKQEAgLTE4NCw2ICsxOTQsOSBAQCBzdHJ1Y3Qg
TWV0aG9kVGFibGUgewogICAgICAgICAmQ2xhc3NOYW1lOjpkdW1wVG9TdHJlYW0sIFwKICAgICAg
ICAgJkNsYXNzTmFtZTo6YW5hbHl6ZUhlYXAsIFwKICAgICAgICAgJkNsYXNzTmFtZTo6ZXN0aW1h
dGVkU2l6ZSwgXAorICAgICAgICAmQ2xhc3NOYW1lOjp2aXNpdENoaWxkcmVuLCBcCisgICAgICAg
ICZDbGFzc05hbWU6OnZpc2l0T3V0cHV0Q29uc3RyYWludHMsIFwKKyAgICAgICAgJkNsYXNzTmFt
ZTo6dmlzaXRDaGlsZHJlbiwgXAogICAgICAgICAmQ2xhc3NOYW1lOjp2aXNpdE91dHB1dENvbnN0
cmFpbnRzLCBcCiAgICAgfSwgXAogICAgIENsYXNzTmFtZTo6VHlwZWRBcnJheVN0b3JhZ2VUeXBl
LCBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DbG9uZWRBcmd1bWVudHMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Nsb25lZEFy
Z3VtZW50cy5jcHAJKHJldmlzaW9uIDI2ODA4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0Nsb25lZEFyZ3VtZW50cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2Nyw3ICsyNjcs
OCBAQCB2b2lkIENsb25lZEFyZ3VtZW50czo6bWF0ZXJpYWxpemVTcGVjaWFsCiAgICAgICAgIG1h
dGVyaWFsaXplU3BlY2lhbHMoZ2xvYmFsT2JqZWN0KTsKIH0KIAotdm9pZCBDbG9uZWRBcmd1bWVu
dHM6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3Rl
bXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIENsb25lZEFyZ3VtZW50czo6dmlzaXRDaGls
ZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIENsb25lZEFy
Z3VtZW50cyogdGhpc09iamVjdCA9IGpzQ2FzdDxDbG9uZWRBcmd1bWVudHMqPihjZWxsKTsKICAg
ICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC0yNzUs
NSArMjc2LDcgQEAgdm9pZCBDbG9uZWRBcmd1bWVudHM6OnZpc2l0Q2hpbGRyZW4oSlNDZQogICAg
IHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fY2FsbGVlKTsKIH0KIAorREVGSU5FX1ZJU0lU
X0NISUxEUkVOKENsb25lZEFyZ3VtZW50cyk7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DbG9uZWRBcmd1bWVudHMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DbG9uZWRBcmd1bWVudHMuaAko
cmV2aXNpb24gMjY4MDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xvbmVk
QXJndW1lbnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTYyLDcgKzYyLDcgQEAgcHVibGljOgogICAg
IHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0Kiwg
SlNWYWx1ZSBwcm90b3R5cGUpOwogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVNsb3dQdXRT
dHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUgcHJvdG90eXBlKTsKIAotICAg
IHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBE
RUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgREVDTEFSRV9JTkZPOwogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EaXJlY3RBcmd1bWVudHMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5jcHAJKHJl
dmlzaW9uIDI2ODA4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVjdEFy
Z3VtZW50cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkwLDcgKzkwLDggQEAgc2l6ZV90IERpcmVj
dEFyZ3VtZW50czo6ZXN0aW1hdGVkU2l6ZShKUwogICAgIHJldHVybiBCYXNlOjplc3RpbWF0ZWRT
aXplKGNlbGwsIHZtKSArIG1hcHBlZEFyZ3VtZW50c1NpemUgKyBtb2RpZmllZEFyZ3VtZW50c1Np
emU7CiB9CiAKLXZvaWQgRGlyZWN0QXJndW1lbnRzOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogdGhp
c0NlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4K
K3ZvaWQgRGlyZWN0QXJndW1lbnRzOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIHRoaXNDZWxs
LCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIERpcmVjdEFyZ3VtZW50cyogdGhpc09iamVjdCA9
IHN0YXRpY19jYXN0PERpcmVjdEFyZ3VtZW50cyo+KHRoaXNDZWxsKTsKICAgICBBU1NFUlRfR0Nf
T0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC0xMDQsNiArMTA1LDggQEAg
dm9pZCBEaXJlY3RBcmd1bWVudHM6OnZpc2l0Q2hpbGRyZW4oSlNDZQogICAgIEdlbmVyaWNBcmd1
bWVudHM8RGlyZWN0QXJndW1lbnRzPjo6dmlzaXRDaGlsZHJlbih0aGlzQ2VsbCwgdmlzaXRvcik7
CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihEaXJlY3RBcmd1bWVudHMpOworCiBTdHJ1Y3R1
cmUqIERpcmVjdEFyZ3VtZW50czo6Y3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCiB7CiAgICAgcmV0dXJuIFN0cnVj
dHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oRGlyZWN0
QXJndW1lbnRzVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvRGlyZWN0QXJndW1lbnRzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGlyZWN0QXJndW1lbnRzLmgJKHJldmlzaW9uIDI2
ODA4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5o
CSh3b3JraW5nIGNvcHkpCkBAIC02NSw3ICs2NSw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgRGly
ZWN0QXJndW1lbnRzKiBjcmVhdGVCeUNvcHlpbmcoSlNHbG9iYWxPYmplY3QqLCBDYWxsRnJhbWUq
KTsKIAogICAgIHN0YXRpYyBzaXplX3QgZXN0aW1hdGVkU2l6ZShKU0NlbGwqLCBWTSYpOwotICAg
IHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBE
RUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogICAgIAogICAgIHVpbnQzMl90IGludGVybmFsTGVuZ3Ro
KCkgY29uc3QKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FdmFs
RXhlY3V0YWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvRXZhbEV4ZWN1dGFibGUuY3BwCShyZXZpc2lvbiAyNjgwODYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9FdmFsRXhlY3V0YWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5
LDcgKzQ5LDggQEAgYXV0byBFdmFsRXhlY3V0YWJsZTo6ZW5zdXJlVGVtcGxhdGVPYmplYwogICAg
IHJldHVybiBlbnN1cmVUZW1wbGF0ZU9iamVjdE1hcEltcGwobV90ZW1wbGF0ZU9iamVjdE1hcCk7
CiB9CiAKLXZvaWQgRXZhbEV4ZWN1dGFibGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBT
bG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEV2
YWxFeGVjdXRhYmxlOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZp
c2l0b3IpCiB7CiAgICAgRXZhbEV4ZWN1dGFibGUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8RXZhbEV4
ZWN1dGFibGUqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmpl
Y3QsIGluZm8oKSk7CkBAIC02Myw0ICs2NCw2IEBAIHZvaWQgRXZhbEV4ZWN1dGFibGU6OnZpc2l0
Q2hpbGRyZW4oSlNDZWwKICAgICB9CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihFdmFsRXhl
Y3V0YWJsZSk7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvRXZhbEV4ZWN1dGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9FdmFsRXhlY3V0YWJsZS5oCShyZXZpc2lvbiAyNjgwODYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FdmFsRXhlY3V0YWJsZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC03OCw3ICs3OCw3IEBAIHByb3RlY3RlZDoKICAgICB1c2luZyBCYXNlOjpmaW5pc2hD
cmVhdGlvbjsKICAgICBFdmFsRXhlY3V0YWJsZShKU0dsb2JhbE9iamVjdCosIGNvbnN0IFNvdXJj
ZUNvZGUmLCBib29sIGluU3RyaWN0Q29udGV4dCwgRGVyaXZlZENvbnRleHRUeXBlLCBib29sIGlz
QXJyb3dGdW5jdGlvbkNvbnRleHQsIGJvb2wgaXNJbnNpZGVPcmRpbmFyeUZ1bmN0aW9uLCBFdmFs
Q29udGV4dFR5cGUsIE5lZWRzQ2xhc3NGaWVsZEluaXRpYWxpemVyKTsKIAotICAgIHN0YXRpYyB2
b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJ
U0lUX0NISUxEUkVOOwogCiAgICAgdW5zaWduZWQgbV9uZWVkc0NsYXNzRmllbGRJbml0aWFsaXpl
ciA6IDE7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbi5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9u
LmNwcAkocmV2aXNpb24gMjY4MDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
RXhjZXB0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTMsNyArNTMsOCBAQCBTdHJ1Y3R1cmUq
IEV4Y2VwdGlvbjo6Y3JlYXRlU3RydWN0dXJlKFZNCiAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3Jl
YXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oQ2VsbFR5cGUsIFN0cnVj
dHVyZUZsYWdzKSwgaW5mbygpKTsKIH0KIAotdm9pZCBFeGNlcHRpb246OnZpc2l0Q2hpbGRyZW4o
SlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZp
c2l0b3I+Cit2b2lkIEV4Y2VwdGlvbjo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBW
aXNpdG9yJiB2aXNpdG9yKQogewogICAgIEV4Y2VwdGlvbiogdGhpc09iamVjdCA9IGpzQ2FzdDxF
eGNlcHRpb24qPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmpl
Y3QsIGluZm8oKSk7CkBAIC02NCw2ICs2NSw4IEBAIHZvaWQgRXhjZXB0aW9uOjp2aXNpdENoaWxk
cmVuKEpTQ2VsbCogY2UKICAgICAgICAgZnJhbWUudmlzaXRDaGlsZHJlbih2aXNpdG9yKTsKIH0K
IAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEV4Y2VwdGlvbik7CisKIEV4Y2VwdGlvbjo6RXhjZXB0
aW9uKFZNJiB2bSkKICAgICA6IEJhc2Uodm0sIHZtLmV4Y2VwdGlvblN0cnVjdHVyZS5nZXQoKSkK
IHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbi5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbi5oCShyZXZp
c2lvbiAyNjgwODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGNlcHRpb24u
aAkod29ya2luZyBjb3B5KQpAQCAtNTEsNyArNTEsNyBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMg
U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUg
cHJvdG90eXBlKTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xv
dFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgREVDTEFSRV9F
WFBPUlRfSU5GTzsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rp
b25FeGVjdXRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9GdW5jdGlvbkV4ZWN1dGFibGUuY3BwCShyZXZpc2lvbiAyNjgwODYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvbkV4ZWN1dGFibGUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC02Nyw3ICs2Nyw4IEBAIEZ1bmN0aW9uQ29kZUJsb2NrKiBGdW5jdGlvbkV4ZWN1dGFi
bGU6OmIKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RnVuY3Rpb25Db2RlQmxvY2sqPihlZGdlLT5j
b2RlQmxvY2soKS0+YmFzZWxpbmVBbHRlcm5hdGl2ZSgpKTsKIH0KIAotdm9pZCBGdW5jdGlvbkV4
ZWN1dGFibGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRv
cikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEZ1bmN0aW9uRXhlY3V0YWJsZTo6
dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAg
IEZ1bmN0aW9uRXhlY3V0YWJsZSogdGhpc09iamVjdCA9IGpzQ2FzdDxGdW5jdGlvbkV4ZWN1dGFi
bGUqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGlu
Zm8oKSk7CkBAIC04Niw2ICs4Nyw4IEBAIHZvaWQgRnVuY3Rpb25FeGVjdXRhYmxlOjp2aXNpdENo
aWxkcmVuKEoKICAgICB9CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihGdW5jdGlvbkV4ZWN1
dGFibGUpOworCiBGdW5jdGlvbkV4ZWN1dGFibGUqIEZ1bmN0aW9uRXhlY3V0YWJsZTo6ZnJvbUds
b2JhbENvZGUoCiAgICAgY29uc3QgSWRlbnRpZmllciYgbmFtZSwgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCAKICAgICBKU09iamVjdComIGV4
Y2VwdGlvbiwgaW50IG92ZXJyaWRlTGluZU51bWJlciwgT3B0aW9uYWw8aW50PiBmdW5jdGlvbkNv
bnN0cnVjdG9yUGFyYW1ldGVyc0VuZFBvc2l0aW9uKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvRnVuY3Rpb25FeGVjdXRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25FeGVjdXRhYmxlLmgJKHJldmlzaW9uIDI2ODA4
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xNjYsNyArMTY2LDcgQEAgcHVibGljOgogICAgIEpTUGFyc2Vy
U2NyaXB0TW9kZSBzY3JpcHRNb2RlKCkgY29uc3QgeyByZXR1cm4gbV91bmxpbmtlZEV4ZWN1dGFi
bGUtPnNjcmlwdE1vZGUoKTsgfQogICAgIFNvdXJjZUNvZGUgY2xhc3NTb3VyY2UoKSBjb25zdCB7
IHJldHVybiBtX3VubGlua2VkRXhlY3V0YWJsZS0+Y2xhc3NTb3VyY2UoKTsgfQogCi0gICAgc3Rh
dGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xB
UkVfVklTSVRfQ0hJTERSRU47CiAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJl
KFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90bykKICAg
ICB7CiAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBw
cm90bywgVHlwZUluZm8oRnVuY3Rpb25FeGVjdXRhYmxlVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBp
bmZvKCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25SYXJl
RGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVu
Y3Rpb25SYXJlRGF0YS5jcHAJKHJldmlzaW9uIDI2ODA4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0Z1bmN0aW9uUmFyZURhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MSw3
ICs1MSw4IEBAIFN0cnVjdHVyZSogRnVuY3Rpb25SYXJlRGF0YTo6Y3JlYXRlU3RydWMKICAgICBy
ZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBl
SW5mbyhDZWxsVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwogfQogCi12b2lkIEZ1bmN0
aW9uUmFyZURhdGE6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlz
aXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEZ1bmN0aW9uUmFyZURhdGE6
OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAg
ICBGdW5jdGlvblJhcmVEYXRhKiByYXJlRGF0YSA9IGpzQ2FzdDxGdW5jdGlvblJhcmVEYXRhKj4o
Y2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjZWxsLCBpbmZvKCkpOwpAQCAt
NjMsNiArNjQsOCBAQCB2b2lkIEZ1bmN0aW9uUmFyZURhdGE6OnZpc2l0Q2hpbGRyZW4oSlNDCiAg
ICAgdmlzaXRvci5hcHBlbmQocmFyZURhdGEtPm1fZXhlY3V0YWJsZSk7CiB9CiAKK0RFRklORV9W
SVNJVF9DSElMRFJFTihGdW5jdGlvblJhcmVEYXRhKTsKKwogRnVuY3Rpb25SYXJlRGF0YTo6RnVu
Y3Rpb25SYXJlRGF0YShWTSYgdm0sIEV4ZWN1dGFibGVCYXNlKiBleGVjdXRhYmxlKQogICAgIDog
QmFzZSh2bSwgdm0uZnVuY3Rpb25SYXJlRGF0YVN0cnVjdHVyZS5nZXQoKSkKICAgICAsIG1fb2Jq
ZWN0QWxsb2NhdGlvblByb2ZpbGUoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvRnVuY3Rpb25SYXJlRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0Z1bmN0aW9uUmFyZURhdGEuaAkocmV2aXNpb24gMjY4MDg2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25SYXJlRGF0YS5oCSh3b3JraW5nIGNvcHkp
CkBAIC02NSw3ICs2NSw3IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0
ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBwcm90b3R5cGUpOwogCi0g
ICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAg
IERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBERUNMQVJFX0lORk87CiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNBcmd1bWVudHMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljQXJndW1lbnRzLmgJKHJl
dmlzaW9uIDI2ODA4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNB
cmd1bWVudHMuaAkod29ya2luZyBjb3B5KQpAQCAtNDQsNyArNDQsNyBAQCBwcm90ZWN0ZWQ6CiAg
ICAgewogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xv
dFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1RFTVBMQVRFX1ZJU0lUX0NISUxEUkVOOwogICAgIHN0
YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0Kiwg
UHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9w
ZXJ0eVNsb3RCeUluZGV4KEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCB1bnNpZ25lZCBwcm9w
ZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwogICAgIHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5
TmFtZXMoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51
bWVyYXRpb25Nb2RlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVy
aWNBcmd1bWVudHNJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50c0lubGluZXMuaAkocmV2aXNpb24gMjY4MDg2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50c0lubGluZXMuaAko
d29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsOCBAQAogbmFtZXNwYWNlIEpTQyB7CiAKIHRlbXBs
YXRlPHR5cGVuYW1lIFR5cGU+Ci12b2lkIEdlbmVyaWNBcmd1bWVudHM8VHlwZT46OnZpc2l0Q2hp
bGRyZW4oSlNDZWxsKiB0aGlzQ2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0
eXBlbmFtZSBWaXNpdG9yPgordm9pZCBHZW5lcmljQXJndW1lbnRzPFR5cGU+Ojp2aXNpdENoaWxk
cmVuSW1wbChKU0NlbGwqIHRoaXNDZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFR5cGUq
IHRoaXNPYmplY3QgPSBzdGF0aWNfY2FzdDxUeXBlKj4odGhpc0NlbGwpOwogICAgIEFTU0VSVF9H
Q19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTQxLDYgKzQyLDggQEAg
dm9pZCBHZW5lcmljQXJndW1lbnRzPFR5cGU+Ojp2aXNpdENoaWxkcgogICAgICAgICB2aXNpdG9y
Lm1hcmtBdXhpbGlhcnkodGhpc09iamVjdC0+bV9tb2RpZmllZEFyZ3VtZW50c0Rlc2NyaXB0b3Iu
Z2V0VW5zYWZlKCkpOwogfQogCitERUZJTkVfVEVNUExBVEVfVklTSVRfQ0hJTERSRU4odGVtcGxh
dGU8dHlwZW5hbWUgVHlwZT4sIEdlbmVyaWNBcmd1bWVudHM8VHlwZT4pOworCiB0ZW1wbGF0ZTx0
eXBlbmFtZSBUeXBlPgogYm9vbCBHZW5lcmljQXJndW1lbnRzPFR5cGU+OjpnZXRPd25Qcm9wZXJ0
eVNsb3QoSlNPYmplY3QqIG9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUHJv
cGVydHlOYW1lIGlkZW50LCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9HZXR0ZXJTZXR0ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dldHRlclNldHRlci5jcHAJKHJldmlzaW9uIDI2ODA4
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dldHRlclNldHRlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTMzLDcgKzMzLDggQEAgU1RBVElDX0FTU0VSVF9JU19UUklWSUFMTFlf
REVTVFJVQ1RJQkxFKAogCiBjb25zdCBDbGFzc0luZm8gR2V0dGVyU2V0dGVyOjpzX2luZm8gPSB7
ICJHZXR0ZXJTZXR0ZXIiLCBudWxscHRyLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9E
X1RBQkxFKEdldHRlclNldHRlcikgfTsKIAotdm9pZCBHZXR0ZXJTZXR0ZXI6OnZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1l
IFZpc2l0b3I+Cit2b2lkIEdldHRlclNldHRlcjo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBj
ZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEdldHRlclNldHRlciogdGhpc09iamVjdCA9
IGpzQ2FzdDxHZXR0ZXJTZXR0ZXIqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVS
SVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC00Myw2ICs0NCw4IEBAIHZvaWQgR2V0dGVyU2V0
dGVyOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCoKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0
LT5tX3NldHRlcik7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihHZXR0ZXJTZXR0ZXIpOwor
CiBKU1ZhbHVlIGNhbGxHZXR0ZXIoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1
ZSBiYXNlLCBKU1ZhbHVlIGdldHRlclNldHRlcikKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmpl
Y3QtPnZtKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZXR0ZXJTZXR0
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZXR0ZXJT
ZXR0ZXIuaAkocmV2aXNpb24gMjY4MDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvR2V0dGVyU2V0dGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTgyLDcgKzgyLDcgQEAgcHVibGlj
OgogICAgICAgICByZXR1cm4gY3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIGdldHRlck9iamVjdCwg
c2V0dGVyT2JqZWN0KTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpT
Q2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAg
IEpTT2JqZWN0KiBnZXR0ZXIoKSBjb25zdCB7IHJldHVybiBtX2dldHRlci5nZXQoKTsgfQogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9IYXNoTWFwSW1wbC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSGFzaE1hcEltcGwuY3BwCShy
ZXZpc2lvbiAyNjgwODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9IYXNoTWFw
SW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDkgQEAKIAogbmFtZXNwYWNlIEpT
QyB7CiAKK0RFRklORV9URU1QTEFURV9WSVNJVF9DSElMRFJFTih0ZW1wbGF0ZTw+LCBIYXNoTWFw
QnVja2V0PEhhc2hNYXBCdWNrZXREYXRhS2V5Pik7CitERUZJTkVfVEVNUExBVEVfVklTSVRfQ0hJ
TERSRU4odGVtcGxhdGU8PiwgSGFzaE1hcEJ1Y2tldDxIYXNoTWFwQnVja2V0RGF0YUtleVZhbHVl
Pik7CisKIHRlbXBsYXRlPD4KIGNvbnN0IENsYXNzSW5mbyBIYXNoTWFwQnVja2V0PEhhc2hNYXBC
dWNrZXREYXRhS2V5Pjo6c19pbmZvID0KICAgICB7ICJIYXNoTWFwQnVja2V0IiwgbnVsbHB0ciwg
bnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShIYXNoTWFwQnVja2V0PEhhc2hN
YXBCdWNrZXREYXRhS2V5PikgfTsKQEAgLTM4LDggKzQxLDkgQEAgdGVtcGxhdGU8PgogY29uc3Qg
Q2xhc3NJbmZvIEhhc2hNYXBCdWNrZXQ8SGFzaE1hcEJ1Y2tldERhdGFLZXlWYWx1ZT46OnNfaW5m
byA9CiAgICAgeyAiSGFzaE1hcEJ1Y2tldCIsIG51bGxwdHIsIG51bGxwdHIsIG51bGxwdHIsIENS
RUFURV9NRVRIT0RfVEFCTEUoSGFzaE1hcEJ1Y2tldDxIYXNoTWFwQnVja2V0RGF0YUtleVZhbHVl
PikgfTsKIAotdGVtcGxhdGUgPHR5cGVuYW1lIERhdGE+Ci12b2lkIEhhc2hNYXBCdWNrZXQ8RGF0
YT46OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3Rl
bXBsYXRlPHR5cGVuYW1lIERhdGE+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBI
YXNoTWFwQnVja2V0PERhdGE+Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0
b3ImIHZpc2l0b3IpCiB7CiAgICAgSGFzaE1hcEJ1Y2tldCogdGhpc09iamVjdCA9IGpzQ2FzdDxI
YXNoTWFwQnVja2V0Kj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlz
T2JqZWN0LCBpbmZvKCkpOwpAQCAtNTIsOCArNTYsOSBAQCB2b2lkIEhhc2hNYXBCdWNrZXQ8RGF0
YT46OnZpc2l0Q2hpbGRyZW4oCiAgICAgdmlzaXRvci5hcHBlbmRWYWx1ZXMoYml0d2lzZV9jYXN0
PFdyaXRlQmFycmllcjxVbmtub3duPio+KCZ0aGlzT2JqZWN0LT5tX2RhdGEpLCBzaXplb2YoRGF0
YSkgLyBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSk7CiB9CiAKLXRlbXBsYXRlIDx0eXBl
bmFtZSBIYXNoTWFwQnVja2V0Pgotdm9pZCBIYXNoTWFwSW1wbDxIYXNoTWFwQnVja2V0Pjo6dmlz
aXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8
dHlwZW5hbWUgSGFzaE1hcEJ1Y2tldD4KK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lk
IEhhc2hNYXBJbXBsPEhhc2hNYXBCdWNrZXQ+Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNl
bGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSGFzaE1hcEltcGwqIHRoaXNPYmplY3QgPSBq
c0Nhc3Q8SGFzaE1hcEltcGwqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRT
KHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC02Niw2ICs3MSw4IEBAIHZvaWQgSGFzaE1hcEltcGw8
SGFzaE1hcEJ1Y2tldD46OnZpc2l0Q2gKICAgICAgICAgdmlzaXRvci5tYXJrQXV4aWxpYXJ5KGJ1
ZmZlcik7CiB9CiAKK0RFRklORV9URU1QTEFURV9WSVNJVF9DSElMRFJFTih0ZW1wbGF0ZTx0eXBl
bmFtZSBIYXNoTWFwQnVja2V0PiwgSGFzaE1hcEltcGw8SGFzaE1hcEJ1Y2tldD4pOworCiB0ZW1w
bGF0ZSA8dHlwZW5hbWUgSGFzaE1hcEJ1Y2tldD4KIHNpemVfdCBIYXNoTWFwSW1wbDxIYXNoTWFw
QnVja2V0Pjo6ZXN0aW1hdGVkU2l6ZShKU0NlbGwqIGNlbGwsIFZNJiB2bSkKIHsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0hhc2hNYXBJbXBsLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSGFzaE1hcEltcGwuaAkocmV2aXNpb24gMjY4
MDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSGFzaE1hcEltcGwuaAkod29y
a2luZyBjb3B5KQpAQCAtMTQ4LDcgKzE0OCw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1f
ZGF0YS52YWx1ZS5nZXQoKTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVu
KEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9URU1QTEFURV9WSVNJVF9DSElM
RFJFTjsKIAogICAgIEFMV0FZU19JTkxJTkUgSGFzaE1hcEJ1Y2tldCogbmV4dCgpIGNvbnN0IHsg
cmV0dXJuIG1fbmV4dC5nZXQoKTsgfQogICAgIEFMV0FZU19JTkxJTkUgSGFzaE1hcEJ1Y2tldCog
cHJldigpIGNvbnN0IHsgcmV0dXJuIG1fcHJldi5nZXQoKTsgfQpAQCAtMzY0LDcgKzM2NCw3IEBA
IGNsYXNzIEhhc2hNYXBJbXBsIDogcHVibGljIEpTTm9uRmluYWxPYmoKIHB1YmxpYzoKICAgICB1
c2luZyBCdWNrZXRUeXBlID0gSGFzaE1hcEJ1Y2tldFR5cGU7CiAKLSAgICBzdGF0aWMgdm9pZCB2
aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9URU1QTEFU
RV9WSVNJVF9DSElMRFJFTjsKIAogICAgIHN0YXRpYyBzaXplX3QgZXN0aW1hdGVkU2l6ZShKU0Nl
bGwqLCBWTSYpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRlcm5h
bEZ1bmN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9JbnRlcm5hbEZ1bmN0aW9uLmNwcAkocmV2aXNpb24gMjY4MDg2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSW50ZXJuYWxGdW5jdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTY0LDcgKzY0LDggQEAgdm9pZCBJbnRlcm5hbEZ1bmN0aW9uOjpmaW5pc2hDcmVhdGlvbihWTQog
ICAgIH0KIH0KIAotdm9pZCBJbnRlcm5hbEZ1bmN0aW9uOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCog
Y2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgor
dm9pZCBJbnRlcm5hbEZ1bmN0aW9uOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZp
c2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSW50ZXJuYWxGdW5jdGlvbiogdGhpc09iamVjdCA9IGpz
Q2FzdDxJbnRlcm5hbEZ1bmN0aW9uKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhF
UklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNzMsNiArNzQsOCBAQCB2b2lkIEludGVybmFs
RnVuY3Rpb246OnZpc2l0Q2hpbGRyZW4oSlNDCiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVj
dC0+bV9vcmlnaW5hbE5hbWUpOwogfQogCitERUZJTkVfRVhQT1JUX1ZJU0lUX0NISUxEUkVOKElu
dGVybmFsRnVuY3Rpb24pOworCiBjb25zdCBTdHJpbmcmIEludGVybmFsRnVuY3Rpb246Om5hbWUo
KQogewogICAgIGNvbnN0IFN0cmluZyYgbmFtZSA9IG1fb3JpZ2luYWxOYW1lLT50cnlHZXRWYWx1
ZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50ZXJuYWxGdW5jdGlv
bi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGVybmFs
RnVuY3Rpb24uaAkocmV2aXNpb24gMjY4MDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSW50ZXJuYWxGdW5jdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC00Niw3ICs0Niw3IEBA
IHB1YmxpYzoKIAogICAgIERFQ0xBUkVfRVhQT1JUX0lORk87CiAKLSAgICBKU19FWFBPUlRfUFJJ
VkFURSBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7Cisg
ICAgREVDTEFSRV9FWFBPUlRfVklTSVRfQ0hJTERSRU47CiAKICAgICBKU19FWFBPUlRfUFJJVkFU
RSBjb25zdCBTdHJpbmcmIG5hbWUoKTsKICAgICBjb25zdCBTdHJpbmcgZGlzcGxheU5hbWUoVk0m
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxDb2xsYXRvci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bENvbGxhdG9y
LmNwcAkocmV2aXNpb24gMjY4MDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SW50bENvbGxhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjUsNyArNjUsOCBAQCB2b2lkIElu
dGxDb2xsYXRvcjo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtCiAgICAgQVNTRVJUKGluaGVyaXRzKHZt
LCBpbmZvKCkpKTsKIH0KIAotdm9pZCBJbnRsQ29sbGF0b3I6OnZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+
Cit2b2lkIEludGxDb2xsYXRvcjo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNp
dG9yJiB2aXNpdG9yKQogewogICAgIEludGxDb2xsYXRvciogdGhpc09iamVjdCA9IGpzQ2FzdDxJ
bnRsQ29sbGF0b3IqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNP
YmplY3QsIGluZm8oKSk7CkBAIC03NSw2ICs3Niw4IEBAIHZvaWQgSW50bENvbGxhdG9yOjp2aXNp
dENoaWxkcmVuKEpTQ2VsbCoKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2JvdW5k
Q29tcGFyZSk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihJbnRsQ29sbGF0b3IpOworCiBW
ZWN0b3I8U3RyaW5nPiBJbnRsQ29sbGF0b3I6OnNvcnRMb2NhbGVEYXRhKGNvbnN0IFN0cmluZyYg
bG9jYWxlLCBSZWxldmFudEV4dGVuc2lvbktleSBrZXkpCiB7CiAgICAgLy8gOS4xIEludGVybmFs
IHNsb3RzIG9mIFNlcnZpY2UgQ29uc3RydWN0b3JzICYgMTAuMi4zIEludGVybmFsIHNsb3RzIChF
Q01BLTQwMiAyLjApCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsQ29s
bGF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRs
Q29sbGF0b3IuaAkocmV2aXNpb24gMjY4MDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSW50bENvbGxhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTgwLDcgKzgwLDcgQEAgcHVi
bGljOgogcHJpdmF0ZToKICAgICBJbnRsQ29sbGF0b3IoVk0mLCBTdHJ1Y3R1cmUqKTsKICAgICB2
b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihK
U0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAg
ICBib29sIHVwZGF0ZUNhbkRvQVNDSUlVQ0FEVUNFVENvbXBhcmlzb24oKSBjb25zdDsKIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERhdGVUaW1lRm9ybWF0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsRGF0ZVRpbWVG
b3JtYXQuY3BwCShyZXZpc2lvbiAyNjgwODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9JbnRsRGF0ZVRpbWVGb3JtYXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MCw3ICs3MCw4
IEBAIHZvaWQgSW50bERhdGVUaW1lRm9ybWF0OjpmaW5pc2hDcmVhdGlvbigKICAgICBBU1NFUlQo
aW5oZXJpdHModm0sIGluZm8oKSkpOwogfQogCi12b2lkIEludGxEYXRlVGltZUZvcm1hdDo6dmlz
aXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8
dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSW50bERhdGVUaW1lRm9ybWF0Ojp2aXNpdENoaWxkcmVu
SW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSW50bERhdGVUaW1l
Rm9ybWF0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEludGxEYXRlVGltZUZvcm1hdCo+KGNlbGwpOwog
ICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTgw
LDYgKzgxLDggQEAgdm9pZCBJbnRsRGF0ZVRpbWVGb3JtYXQ6OnZpc2l0Q2hpbGRyZW4oSgogICAg
IHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fYm91bmRGb3JtYXQpOwogfQogCitERUZJTkVf
VklTSVRfQ0hJTERSRU4oSW50bERhdGVUaW1lRm9ybWF0KTsKKwogdm9pZCBJbnRsRGF0ZVRpbWVG
b3JtYXQ6OnNldEJvdW5kRm9ybWF0KFZNJiB2bSwgSlNCb3VuZEZ1bmN0aW9uKiBmb3JtYXQpCiB7
CiAgICAgbV9ib3VuZEZvcm1hdC5zZXQodm0sIHRoaXMsIGZvcm1hdCk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsRGF0ZVRpbWVGb3JtYXQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsRGF0ZVRpbWVGb3JtYXQuaAkocmV2
aXNpb24gMjY4MDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERhdGVU
aW1lRm9ybWF0LmgJKHdvcmtpbmcgY29weSkKQEAgLTcyLDcgKzcyLDcgQEAgcHVibGljOgogcHJp
dmF0ZToKICAgICBJbnRsRGF0ZVRpbWVGb3JtYXQoVk0mLCBTdHJ1Y3R1cmUqKTsKICAgICB2b2lk
IGZpbmlzaENyZWF0aW9uKFZNJik7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0Nl
bGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBz
dGF0aWMgVmVjdG9yPFN0cmluZz4gbG9jYWxlRGF0YShjb25zdCBTdHJpbmcmLCBSZWxldmFudEV4
dGVuc2lvbktleSk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxM
b2NhbGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lu
dGxMb2NhbGUuY3BwCShyZXZpc2lvbiAyNjgwODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9JbnRsTG9jYWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTgsNyArNTgsOCBAQCB2
b2lkIEludGxMb2NhbGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKICAgICBBU1NFUlQoaW5oZXJp
dHModm0sIGluZm8oKSkpOwogfQogCi12b2lkIEludGxMb2NhbGU6OnZpc2l0Q2hpbGRyZW4oSlND
ZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0
b3I+Cit2b2lkIEludGxMb2NhbGU6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlz
aXRvciYgdmlzaXRvcikKIHsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEludGxMb2Nh
bGUqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGlu
Zm8oKSk7CkBAIC02Niw2ICs2Nyw4IEBAIHZvaWQgSW50bExvY2FsZTo6dmlzaXRDaGlsZHJlbihK
U0NlbGwqIGMKICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwog
fQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSW50bExvY2FsZSk7CisKIGNsYXNzIExvY2FsZUlE
QnVpbGRlciBmaW5hbCB7CiBwdWJsaWM6CiAgICAgYm9vbCBpbml0aWFsaXplKGNvbnN0IFN0cmlu
ZyYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bExvY2FsZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxMb2NhbGUuaAko
cmV2aXNpb24gMjY4MDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bExv
Y2FsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03MSw3ICs3MSw3IEBAIHB1YmxpYzoKIHByaXZhdGU6
CiAgICAgSW50bExvY2FsZShWTSYsIFN0cnVjdHVyZSopOwogICAgIHZvaWQgZmluaXNoQ3JlYXRp
b24oVk0mKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNp
dG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIFN0cmluZyBrZXl3b3Jk
VmFsdWUoQVNDSUlMaXRlcmFsLCBib29sIGlzQm9vbGVhbiA9IGZhbHNlKSBjb25zdDsKIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE51bWJlckZvcm1hdC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE51bWJlckZvcm1h
dC5jcHAJKHJldmlzaW9uIDI2ODA4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0ludGxOdW1iZXJGb3JtYXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Myw3ICs3Myw4IEBAIHZv
aWQgSW50bE51bWJlckZvcm1hdDo6ZmluaXNoQ3JlYXRpb24oVk0KICAgICBBU1NFUlQoaW5oZXJp
dHModm0sIGluZm8oKSkpOwogfQogCi12b2lkIEludGxOdW1iZXJGb3JtYXQ6OnZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1l
IFZpc2l0b3I+Cit2b2lkIEludGxOdW1iZXJGb3JtYXQ6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2Vs
bCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBJbnRsTnVtYmVyRm9ybWF0KiB0aGlz
T2JqZWN0ID0ganNDYXN0PEludGxOdW1iZXJGb3JtYXQqPihjZWxsKTsKICAgICBBU1NFUlRfR0Nf
T0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC04Myw2ICs4NCw4IEBAIHZv
aWQgSW50bE51bWJlckZvcm1hdDo6dmlzaXRDaGlsZHJlbihKU0MKICAgICB2aXNpdG9yLmFwcGVu
ZCh0aGlzT2JqZWN0LT5tX2JvdW5kRm9ybWF0KTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVO
KEludGxOdW1iZXJGb3JtYXQpOworCiBWZWN0b3I8U3RyaW5nPiBJbnRsTnVtYmVyRm9ybWF0Ojps
b2NhbGVEYXRhKGNvbnN0IFN0cmluZyYgbG9jYWxlLCBSZWxldmFudEV4dGVuc2lvbktleSBrZXkp
CiB7CiAgICAgLy8gOS4xIEludGVybmFsIHNsb3RzIG9mIFNlcnZpY2UgQ29uc3RydWN0b3JzICYg
MTEuMi4zIEludGVybmFsIHNsb3RzIChFQ01BLTQwMiAyLjApCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9JbnRsTnVtYmVyRm9ybWF0LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE51bWJlckZvcm1hdC5oCShyZXZpc2lvbiAyNjgw
ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTnVtYmVyRm9ybWF0LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTk2LDcgKzk2LDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBJ
bnRsTnVtYmVyRm9ybWF0KFZNJiwgU3RydWN0dXJlKik7CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlv
bihWTSYpOwotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0
b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgc3RhdGljIFZlY3RvcjxT
dHJpbmc+IGxvY2FsZURhdGEoY29uc3QgU3RyaW5nJiwgUmVsZXZhbnRFeHRlbnNpb25LZXkpOwog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsUGx1cmFsUnVsZXMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxQbHVyYWxS
dWxlcy5jcHAJKHJldmlzaW9uIDI2ODA4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0ludGxQbHVyYWxSdWxlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYxLDcgKzYxLDggQEAg
dm9pZCBJbnRsUGx1cmFsUnVsZXM6OmZpbmlzaENyZWF0aW9uKFZNJgogICAgIEFTU0VSVChpbmhl
cml0cyh2bSwgaW5mbygpKSk7CiB9CiAKLXZvaWQgSW50bFBsdXJhbFJ1bGVzOjp2aXNpdENoaWxk
cmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBWaXNpdG9yPgordm9pZCBJbnRsUGx1cmFsUnVsZXM6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2Vs
bCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBJbnRsUGx1cmFsUnVsZXMqIHRoaXNP
YmplY3QgPSBqc0Nhc3Q8SW50bFBsdXJhbFJ1bGVzKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09C
SkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNjksNiArNzAsOCBAQCB2b2lk
IEludGxQbHVyYWxSdWxlczo6dmlzaXRDaGlsZHJlbihKU0NlCiAgICAgQmFzZTo6dmlzaXRDaGls
ZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKElu
dGxQbHVyYWxSdWxlcyk7CisKIFZlY3RvcjxTdHJpbmc+IEludGxQbHVyYWxSdWxlczo6bG9jYWxl
RGF0YShjb25zdCBTdHJpbmcmLCBSZWxldmFudEV4dGVuc2lvbktleSkKIHsKICAgICByZXR1cm4g
eyB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFBsdXJhbFJ1bGVz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFBsdXJh
bFJ1bGVzLmgJKHJldmlzaW9uIDI2ODA4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0ludGxQbHVyYWxSdWxlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC02Niw3ICs2Niw3IEBAIHB1
YmxpYzoKIHByaXZhdGU6CiAgICAgSW50bFBsdXJhbFJ1bGVzKFZNJiwgU3RydWN0dXJlKik7CiAg
ICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOwotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwog
CiAgICAgc3RhdGljIFZlY3RvcjxTdHJpbmc+IGxvY2FsZURhdGEoY29uc3QgU3RyaW5nJiwgUmVs
ZXZhbnRFeHRlbnNpb25LZXkpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9JbnRsUmVsYXRpdmVUaW1lRm9ybWF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9JbnRsUmVsYXRpdmVUaW1lRm9ybWF0LmNwcAkocmV2aXNpb24gMjY4
MDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFJlbGF0aXZlVGltZUZv
cm1hdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYyLDcgKzYyLDggQEAgdm9pZCBJbnRsUmVsYXRp
dmVUaW1lRm9ybWF0OjpmaW5pc2hDcmVhdAogICAgIEFTU0VSVChpbmhlcml0cyh2bSwgaW5mbygp
KSk7CiB9CiAKLXZvaWQgSW50bFJlbGF0aXZlVGltZUZvcm1hdDo6dmlzaXRDaGlsZHJlbihKU0Nl
bGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRv
cj4KK3ZvaWQgSW50bFJlbGF0aXZlVGltZUZvcm1hdDo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxs
KiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nh
c3Q8SW50bFJlbGF0aXZlVGltZUZvcm1hdCo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1Rf
SU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTcwLDYgKzcxLDggQEAgdm9pZCBJbnRs
UmVsYXRpdmVUaW1lRm9ybWF0Ojp2aXNpdENoaWxkcgogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4o
dGhpc09iamVjdCwgdmlzaXRvcik7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihJbnRsUmVs
YXRpdmVUaW1lRm9ybWF0KTsKKwogVmVjdG9yPFN0cmluZz4gSW50bFJlbGF0aXZlVGltZUZvcm1h
dDo6bG9jYWxlRGF0YShjb25zdCBTdHJpbmcmIGxvY2FsZSwgUmVsZXZhbnRFeHRlbnNpb25LZXkg
a2V5KQogewogICAgIEFTU0VSVF9VTlVTRUQoa2V5LCBrZXkgPT0gUmVsZXZhbnRFeHRlbnNpb25L
ZXk6Ok51KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxSZWxhdGl2
ZVRpbWVGb3JtYXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9JbnRsUmVsYXRpdmVUaW1lRm9ybWF0LmgJKHJldmlzaW9uIDI2ODA4NikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxSZWxhdGl2ZVRpbWVGb3JtYXQuaAkod29ya2luZyBj
b3B5KQpAQCAtNjQsNyArNjQsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIEludGxSZWxhdGl2
ZVRpbWVGb3JtYXQoVk0mLCBTdHJ1Y3R1cmUqKTsKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZN
Jik7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYp
OworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBzdGF0aWMgVmVjdG9yPFN0cmlu
Zz4gbG9jYWxlRGF0YShjb25zdCBTdHJpbmcmLCBSZWxldmFudEV4dGVuc2lvbktleSk7CiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxTZWdtZW50SXRlcmF0b3IuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxTZWdtZW50
SXRlcmF0b3IuY3BwCShyZXZpc2lvbiAyNjgwODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9JbnRsU2VnbWVudEl0ZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjQsMTMg
KzY0LDE2IEBAIHZvaWQgSW50bFNlZ21lbnRJdGVyYXRvcjo6ZmluaXNoQ3JlYXRpb24KICAgICBt
X3N0cmluZy5zZXQodm0sIHRoaXMsIHN0cmluZyk7CiB9CiAKLXZvaWQgSW50bFNlZ21lbnRJdGVy
YXRvcjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQor
dGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSW50bFNlZ21lbnRJdGVyYXRvcjo6dmlz
aXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGF1
dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SW50bFNlZ21lbnRJdGVyYXRvcio+KGNlbGwpOwogICAg
IEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CiAgICAgdmlzaXRvci5h
cHBlbmQodGhpc09iamVjdC0+bV9zdHJpbmcpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4o
SW50bFNlZ21lbnRJdGVyYXRvcik7CisKIEpTT2JqZWN0KiBJbnRsU2VnbWVudEl0ZXJhdG9yOjpu
ZXh0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFs
T2JqZWN0LT52bSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFNl
Z21lbnRJdGVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0ludGxTZWdtZW50SXRlcmF0b3IuaAkocmV2aXNpb24gMjY4MDg2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFNlZ21lbnRJdGVyYXRvci5oCSh3b3JraW5nIGNvcHkp
CkBAIC01Myw3ICs1Myw3IEBAIHB1YmxpYzoKIAogICAgIEpTT2JqZWN0KiBuZXh0KEpTR2xvYmFs
T2JqZWN0Kik7CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RW
aXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogcHJpdmF0ZToKICAgICBJ
bnRsU2VnbWVudEl0ZXJhdG9yKFZNJiwgU3RydWN0dXJlKiwgc3RkOjp1bmlxdWVfcHRyPFVCcmVh
a0l0ZXJhdG9yLCBVQnJlYWtJdGVyYXRvckRlbGV0ZXI+JiYsIEJveDxWZWN0b3I8VUNoYXI+PiYm
LCBJbnRsU2VnbWVudGVyOjpHcmFudWxhcml0eSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9JbnRsU2VnbWVudHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0ludGxTZWdtZW50cy5jcHAJKHJldmlzaW9uIDI2ODA4NikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxTZWdtZW50cy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEwOSwxMSArMTA5LDE0IEBAIEpTT2JqZWN0KiBJbnRsU2VnbWVudHM6OmNyZWF0ZVNl
Z21lbnRJdGUKICAgICByZXR1cm4gSW50bFNlZ21lbnRJdGVyYXRvcjo6Y3JlYXRlKHZtLCBnbG9i
YWxPYmplY3QtPnNlZ21lbnRJdGVyYXRvclN0cnVjdHVyZSgpLCBXVEZNb3ZlKHNlZ21lbnRlciks
IG1fYnVmZmVyLCBtX3N0cmluZy5nZXQoKSwgbV9ncmFudWxhcml0eSk7CiB9CiAKLXZvaWQgSW50
bFNlZ21lbnRzOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0
b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBJbnRsU2VnbWVudHM6OnZpc2l0
Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBhdXRv
KiB0aGlzT2JqZWN0ID0ganNDYXN0PEludGxTZWdtZW50cyo+KGNlbGwpOwogICAgIEJhc2U6OnZp
c2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CiAgICAgdmlzaXRvci5hcHBlbmQodGhp
c09iamVjdC0+bV9zdHJpbmcpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSW50bFNlZ21l
bnRzKTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9JbnRsU2VnbWVudHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9JbnRsU2VnbWVudHMuaAkocmV2aXNpb24gMjY4MDg2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFNlZ21lbnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTU0
LDcgKzU0LDcgQEAgcHVibGljOgogICAgIEpTVmFsdWUgY29udGFpbmluZyhKU0dsb2JhbE9iamVj
dCosIEpTVmFsdWUgaW5kZXhWYWx1ZSk7CiAgICAgSlNPYmplY3QqIGNyZWF0ZVNlZ21lbnRJdGVy
YXRvcihKU0dsb2JhbE9iamVjdCopOwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihK
U0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKIHBy
aXZhdGU6CiAgICAgSW50bFNlZ21lbnRzKFZNJiwgU3RydWN0dXJlKiwgc3RkOjp1bmlxdWVfcHRy
PFVCcmVha0l0ZXJhdG9yLCBVQnJlYWtJdGVyYXRvckRlbGV0ZXI+JiYsIEJveDxWZWN0b3I8VUNo
YXI+PiYmLCBJbnRsU2VnbWVudGVyOjpHcmFudWxhcml0eSk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuY3BwCShyZXZpc2lv
biAyNjgwODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVy
Vmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1NSw3ICsxNTUsOCBAQCB2b2lkIEpTQXJyYXlC
dWZmZXJWaWV3OjpmaW5pc2hDcmVhdGlvbihWCiAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKIH0KIAotdm9pZCBKU0FycmF5QnVmZmVyVmlldzo6dmlzaXRDaGlsZHJlbihKU0NlbGwq
IGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4K
K3ZvaWQgSlNBcnJheUJ1ZmZlclZpZXc6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwg
VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU0FycmF5QnVmZmVyVmlldyogdGhpc09iamVjdCA9
IGpzQ2FzdDxKU0FycmF5QnVmZmVyVmlldyo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1Rf
SU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTE2OSw2ICsxNzAsOCBAQCB2b2lkIEpT
QXJyYXlCdWZmZXJWaWV3Ojp2aXNpdENoaWxkcmVuKEpTCiAgICAgfQogfQogCitERUZJTkVfVklT
SVRfQ0hJTERSRU4oSlNBcnJheUJ1ZmZlclZpZXcpOworCiBib29sIEpTQXJyYXlCdWZmZXJWaWV3
OjpwdXQoCiAgICAgSlNDZWxsKiBjZWxsLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQ
cm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLAogICAgIFB1dFByb3BlcnR5
U2xvdCYgc2xvdCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlC
dWZmZXJWaWV3LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNBcnJheUJ1ZmZlclZpZXcuaAkocmV2aXNpb24gMjY4MDg2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAtMTcy
LDcgKzE3Miw3IEBAIHByb3RlY3RlZDoKICAgICAKICAgICBzdGF0aWMgYm9vbCBwdXQoSlNDZWxs
KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xv
dCYpOwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRv
ciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAgICAgCiBwdWJsaWM6CiAgICAgVHlw
ZWRBcnJheU1vZGUgbW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fbW9kZTsgfQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUl0ZXJhdG9yLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5SXRlcmF0b3IuY3BwCShyZXZp
c2lvbiAyNjgwODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5SXRl
cmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OCwxMSArNjgsMTQgQEAgdm9pZCBKU0FycmF5
SXRlcmF0b3I6OmZpbmlzaENyZWF0aW9uKFZNJgogICAgICAgICBCYXNlOjppbnRlcm5hbEZpZWxk
KGluZGV4KS5zZXQodm0sIHRoaXMsIHZhbHVlc1tpbmRleF0pOwogfQogCi12b2lkIEpTQXJyYXlJ
dGVyYXRvcjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9y
KQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNBcnJheUl0ZXJhdG9yOjp2aXNp
dENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0
byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0FycmF5SXRlcmF0b3IqPihjZWxsKTsKICAgICBBU1NF
UlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAgICAgQmFzZTo6dmlz
aXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxE
UkVOKEpTQXJyYXlJdGVyYXRvcik7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUl0ZXJhdG9yLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUl0ZXJhdG9yLmgJKHJldmlzaW9u
IDI2ODA4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlJdGVyYXRv
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC03OCw3ICs3OCw3IEBAIHB1YmxpYzoKIAogICAgIERFQ0xB
UkVfSU5GTzsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZp
c2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiBwcml2YXRlOgogICAgIEpT
QXJyYXlJdGVyYXRvcihWTSYsIFN0cnVjdHVyZSopOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNBc3luY0dlbmVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBc3luY0dlbmVyYXRvci5jcHAJKHJldmlzaW9uIDI2ODA4
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXN5bmNHZW5lcmF0b3IuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC01OSwxMSArNTksMTQgQEAgdm9pZCBKU0FzeW5jR2VuZXJhdG9y
OjpmaW5pc2hDcmVhdGlvbihWTQogICAgICAgICBpbnRlcm5hbEZpZWxkKGluZGV4KS5zZXQodm0s
IHRoaXMsIHZhbHVlc1tpbmRleF0pOwogfQogCi12b2lkIEpTQXN5bmNHZW5lcmF0b3I6OnZpc2l0
Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5
cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTQXN5bmNHZW5lcmF0b3I6OnZpc2l0Q2hpbGRyZW5JbXBs
KEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBhdXRvKiB0aGlzT2JqZWN0
ID0ganNDYXN0PEpTQXN5bmNHZW5lcmF0b3IqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNU
X0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0
aGlzT2JqZWN0LCB2aXNpdG9yKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTQXN5bmNH
ZW5lcmF0b3IpOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTQXN5bmNHZW5lcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0FzeW5jR2VuZXJhdG9yLmgJKHJldmlzaW9uIDI2ODA4NikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXN5bmNHZW5lcmF0b3IuaAkod29y
a2luZyBjb3B5KQpAQCAtOTUsNyArOTUsNyBAQCBwdWJsaWM6CiAKICAgICBERUNMQVJFX0VYUE9S
VF9JTkZPOwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90Vmlz
aXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKIHByaXZhdGU6CiAgICAgSlNB
c3luY0dlbmVyYXRvcihWTSYsIFN0cnVjdHVyZSopOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNCaWdJbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTQmlnSW50LmNwcAkocmV2aXNpb24gMjY4MDg2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCaWdJbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Nyw3
ICs2Nyw4IEBAIEpTQmlnSW50OjpKU0JpZ0ludChWTSYgdm0sIFN0cnVjdHVyZSogc3QKICAgICAs
IG1fZGF0YSh2bSwgdGhpcywgZGF0YSwgbGVuZ3RoKQogeyB9CiAKLXZvaWQgSlNCaWdJbnQ6OnZp
c2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRl
PHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTQmlnSW50Ojp2aXNpdENoaWxkcmVuSW1wbChKU0Nl
bGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpz
Q2FzdDxKU0JpZ0ludCo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhp
c09iamVjdCwgaW5mbygpKTsKQEAgLTc2LDYgKzc3LDggQEAgdm9pZCBKU0JpZ0ludDo6dmlzaXRD
aGlsZHJlbihKU0NlbGwqIGNlbAogICAgICAgICB2aXNpdG9yLm1hcmtBdXhpbGlhcnkoZGF0YSk7
CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU0JpZ0ludCk7CisKIHZvaWQgSlNCaWdJbnQ6
OmluaXRpYWxpemUoSW5pdGlhbGl6YXRpb25UeXBlIGluaXRUeXBlKQogewogICAgIGlmIChpbml0
VHlwZSA9PSBJbml0aWFsaXphdGlvblR5cGU6OldpdGhaZXJvKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNCaWdJbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0JpZ0ludC5oCShyZXZpc2lvbiAyNjgwODYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JpZ0ludC5oCSh3b3JraW5nIGNvcHkpCkBAIC01MCw3
ICs1MCw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVy
ZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBTdHJ1Y3R1cmVJc0ltbW9ydGFsIHwgT3Zl
cnJpZGVzVG9UaGlzOwogICAgIGZyaWVuZCBjbGFzcyBDYWNoZWRCaWdJbnQ7CiAKLSAgICBzdGF0
aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFS
RV9WSVNJVF9DSElMRFJFTjsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJz
cGFjZUFjY2Vzcz4KICAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQm91bmRGdW5jdGlvbi5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCb3VuZEZ1bmN0
aW9uLmNwcAkocmV2aXNpb24gMjY4MDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNCb3VuZEZ1bmN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQ5LDcgKzI0OSw4IEBA
IHZvaWQgSlNCb3VuZEZ1bmN0aW9uOjpmaW5pc2hDcmVhdGlvbihWTSYKICAgICBBU1NFUlQoaW5o
ZXJpdHModm0sIGluZm8oKSkpOwogfQogCi12b2lkIEpTQm91bmRGdW5jdGlvbjo6dmlzaXRDaGls
ZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5h
bWUgVmlzaXRvcj4KK3ZvaWQgSlNCb3VuZEZ1bmN0aW9uOjp2aXNpdENoaWxkcmVuSW1wbChKU0Nl
bGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNCb3VuZEZ1bmN0aW9uKiB0aGlz
T2JqZWN0ID0ganNDYXN0PEpTQm91bmRGdW5jdGlvbio+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19P
QkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTI2MSw0ICsyNjIsNiBAQCB2
b2lkIEpTQm91bmRGdW5jdGlvbjo6dmlzaXRDaGlsZHJlbihKU0NlCiAgICAgdmlzaXRvci5hcHBl
bmQodGhpc09iamVjdC0+bV9uYW1lTWF5QmVOdWxsKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxE
UkVOKEpTQm91bmRGdW5jdGlvbik7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCb3VuZEZ1bmN0aW9uLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCb3VuZEZ1bmN0aW9uLmgJKHJldmlzaW9u
IDI2ODA4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQm91bmRGdW5jdGlv
bi5oCSh3b3JraW5nIGNvcHkpCkBAIC04NCw3ICs4NCw3IEBAIHByaXZhdGU6CiAgICAgSlNCb3Vu
ZEZ1bmN0aW9uKFZNJiwgTmF0aXZlRXhlY3V0YWJsZSosIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0
dXJlKiwgSlNPYmplY3QqIHRhcmdldEZ1bmN0aW9uLCBKU1ZhbHVlIGJvdW5kVGhpcywgSlNJbW11
dGFibGVCdXR0ZXJmbHkqIGJvdW5kQXJncywgSlNTdHJpbmcqIG5hbWVNYXlCZU51bGwsIGRvdWJs
ZSBsZW5ndGgpOwogCiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOwotICAgIHN0YXRpYyB2
b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJ
U0lUX0NISUxEUkVOOwogCiAgICAgV3JpdGVCYXJyaWVyPEpTT2JqZWN0PiBtX3RhcmdldEZ1bmN0
aW9uOwogICAgIFdyaXRlQmFycmllcjxVbmtub3duPiBtX2JvdW5kVGhpczsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2FsbGVlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NhbGxlZS5jcHAJKHJldmlzaW9uIDI2ODA4NikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2FsbGVlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNTAsNyArNTAsOCBAQCB2b2lkIEpTQ2FsbGVlOjpmaW5pc2hDcmVhdGlvbihWTSYg
dm0pCiAgICAgQVNTRVJUKGluaGVyaXRzKHZtLCBpbmZvKCkpKTsKIH0KIAotdm9pZCBKU0NhbGxl
ZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVt
cGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNDYWxsZWU6OnZpc2l0Q2hpbGRyZW5JbXBs
KEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU0NhbGxlZSogdGhpc09i
amVjdCA9IGpzQ2FzdDxKU0NhbGxlZSo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5I
RVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTU5LDQgKzYwLDYgQEAgdm9pZCBKU0NhbGxl
ZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbAogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmpl
Y3QtPm1fc2NvcGUpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNDYWxsZWUpOworCiB9
IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
Q2FsbGVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlND
YWxsZWUuaAkocmV2aXNpb24gMjY4MDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNDYWxsZWUuaAkod29ya2luZyBjb3B5KQpAQCAtMTAwLDcgKzEwMCw3IEBAIHByb3RlY3Rl
ZDoKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7CiAgICAgdXNpbmcgQmFzZTo6ZmluaXNo
Q3JlYXRpb247CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RW
aXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogcHJpdmF0ZToKICAgICBm
cmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNDZWxsLmgJKHJldmlzaW9uIDI2ODA4NikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBAQAog
LyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMSBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUu
b3JnKQogICogIENvcHlyaWdodCAoQykgMjAwMSBQZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQot
ICogIENvcHlyaWdodCAoQykgMjAwMy0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUg
IkpTTG9jay5oIgogI2luY2x1ZGUgIkpTVHlwZUluZm8uaCIKICNpbmNsdWRlICJTbG90VmlzaXRv
ci5oIgorI2luY2x1ZGUgIlNsb3RWaXNpdG9yTWFjcm9zLmgiCiAjaW5jbHVkZSAiU3Vic3BhY2VB
Y2Nlc3MuaCIKICNpbmNsdWRlICJUeXBlZEFycmF5VHlwZS5oIgogI2luY2x1ZGUgIldyaXRlQmFy
cmllci5oIgpAQCAtMTY4LDggKzE2OSw4IEBAIHB1YmxpYzoKICAgICBzaXplX3QgZXN0aW1hdGVk
U2l6ZUluQnl0ZXMoVk0mKSBjb25zdDsKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgc2l6
ZV90IGVzdGltYXRlZFNpemUoSlNDZWxsKiwgVk0mKTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0
Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdE91
dHB1dENvbnN0cmFpbnRzKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9JTkxJ
TkVfVklTSVRfQ0hJTERSRU47CisgICAgREVDTEFSRV9JTkxJTkVfVklTSVRfT1VUUFVUX0NPTlNU
UkFJTlRTOwogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgYW5hbHl6ZUhlYXAo
SlNDZWxsKiwgSGVhcEFuYWx5emVyJik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTQ2VsbElubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0NlbGxJbmxpbmVzLmgJKHJldmlzaW9uIDI2ODA4NikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAt
MTQxLDE1ICsxNDEsMjEgQEAgQUxXQVlTX0lOTElORSBTdHJ1Y3R1cmUqIEpTQ2VsbDo6c3RydWN0
dQogICAgIHJldHVybiB2bS5nZXRTdHJ1Y3R1cmUobV9zdHJ1Y3R1cmVJRCk7CiB9CiAKLWlubGlu
ZSB2b2lkIEpTQ2VsbDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK2lubGluZSB2b2lkIEpTQ2VsbDo6
dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAg
IHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQoY2VsbC0+c3RydWN0dXJlKHZpc2l0b3Iudm0oKSkp
OwogfQogCi1pbmxpbmUgdm9pZCBKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHMoSlNDZWxs
KiwgU2xvdFZpc2l0b3ImKQorREVGSU5FX0lOTElORV9WSVNJVF9DSElMRFJFTihKU0NlbGwpOwor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgoraW5saW5lIHZvaWQgSlNDZWxsOjp2aXNpdE91
dHB1dENvbnN0cmFpbnRzSW1wbChKU0NlbGwqLCBWaXNpdG9yJikKIHsKIH0KIAorREVGSU5FX0lO
TElORV9WSVNJVF9PVVRQVVRfQ09OU1RSQUlOVFMoSlNDZWxsKTsKKwogQUxXQVlTX0lOTElORSBW
TSYgQ2FsbEZyYW1lOjpkZXByZWNhdGVkVk0oKSBjb25zdAogewogICAgIEpTQ2VsbCogY2FsbGVl
ID0gdGhpcy0+Y2FsbGVlKCkuYXNDZWxsKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0N1c3RvbUdldHRlclNldHRlckZ1bmN0aW9uLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0N1c3RvbUdldHRlclNldHRlckZ1bmN0aW9u
LmNwcAkocmV2aXNpb24gMjY4MDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNDdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg1LDcg
Kzg1LDggQEAgSlNDdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbiogSlNDdXN0b21HZQogICAgIHJl
dHVybiBmdW5jdGlvbjsKIH0KIAotdm9pZCBKU0N1c3RvbUdldHRlclNldHRlckZ1bmN0aW9uOjp2
aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0
ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0N1c3RvbUdldHRlclNldHRlckZ1bmN0aW9uOjp2
aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAg
SlNDdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbiogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0N1c3Rv
bUdldHRlclNldHRlckZ1bmN0aW9uKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhF
UklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtOTQsNiArOTUsOCBAQCB2b2lkIEpTQ3VzdG9t
R2V0dGVyU2V0dGVyRnVuY3Rpb246OnZpc2l0CiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVj
dC0+bV9nZXR0ZXJTZXR0ZXIpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNDdXN0b21H
ZXR0ZXJTZXR0ZXJGdW5jdGlvbik7CisKIHZvaWQgSlNDdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlv
bjo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBOYXRpdmVFeGVjdXRhYmxlKiBleGVjdXRhYmxlLCBD
dXN0b21HZXR0ZXJTZXR0ZXIqIGdldHRlclNldHRlciwgY29uc3QgU3RyaW5nJiBuYW1lKQogewog
ICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtLCBleGVjdXRhYmxlLCBpc1NldHRlcigpLCBuYW1l
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ3VzdG9tR2V0dGVyU2V0
dGVyRnVuY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0N1c3RvbUdldHRlclNldHRlckZ1bmN0aW9uLmgJKHJldmlzaW9uIDI2ODA4NikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ3VzdG9tR2V0dGVyU2V0dGVyRnVuY3Rpb24u
aAkod29ya2luZyBjb3B5KQpAQCAtNjMsNyArNjMsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAg
IEpTQ3VzdG9tR2V0dGVyU2V0dGVyRnVuY3Rpb24oVk0mLCBOYXRpdmVFeGVjdXRhYmxlKiwgSlNH
bG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqLCBUeXBlLCBjb25zdCBQcm9wZXJ0eU5hbWUmKTsKICAg
ICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgTmF0aXZlRXhlY3V0YWJsZSosIEN1c3RvbUdldHRl
clNldHRlciosIGNvbnN0IFN0cmluZyYpOwotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4o
SlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAg
ICAgV3JpdGVCYXJyaWVyPEN1c3RvbUdldHRlclNldHRlcj4gbV9nZXR0ZXJTZXR0ZXI7CiAgICAg
VHlwZSBtX3R5cGU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ZpbmFs
aXphdGlvblJlZ2lzdHJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0ZpbmFsaXphdGlvblJlZ2lzdHJ5LmNwcAkocmV2aXNpb24gMjY4MDg2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGaW5hbGl6YXRpb25SZWdpc3RyeS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTU2LDcgKzU2LDggQEAgdm9pZCBKU0ZpbmFsaXphdGlvblJlZ2lz
dHJ5OjpmaW5pc2hDcmVhdAogICAgIGludGVybmFsRmllbGQoRmllbGQ6OkNhbGxiYWNrKS5zZXRX
aXRob3V0V3JpdGVCYXJyaWVyKGNhbGxiYWNrKTsKIH0KIAotdm9pZCBKU0ZpbmFsaXphdGlvblJl
Z2lzdHJ5Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3Ip
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0ZpbmFsaXphdGlvblJlZ2lzdHJ5
Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAg
ICAgQmFzZTo6dmlzaXRDaGlsZHJlbihjZWxsLCB2aXNpdG9yKTsKIApAQCAtODMsNiArODQsOCBA
QCB2b2lkIEpTRmluYWxpemF0aW9uUmVnaXN0cnk6OnZpc2l0Q2hpbGRyCiAgICAgdmlzaXRvci52
bSgpLmhlYXAucmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKHRvdGFsQnVmZmVyU2l6ZXNJbkJ5dGVz
KTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTRmluYWxpemF0aW9uUmVnaXN0cnkpOwor
CiB2b2lkIEpTRmluYWxpemF0aW9uUmVnaXN0cnk6OmRlc3Ryb3koSlNDZWxsKiB0YWJsZSkKIHsK
ICAgICBzdGF0aWNfY2FzdDxKU0ZpbmFsaXphdGlvblJlZ2lzdHJ5Kj4odGFibGUpLT5+SlNGaW5h
bGl6YXRpb25SZWdpc3RyeSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNGaW5hbGl6YXRpb25SZWdpc3RyeS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTRmluYWxpemF0aW9uUmVnaXN0cnkuaAkocmV2aXNpb24gMjY4MDg2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGaW5hbGl6YXRpb25SZWdpc3RyeS5o
CSh3b3JraW5nIGNvcHkpCkBAIC03MCw3ICs3MCw3IEBAIHB1YmxpYzoKICAgICBERUNMQVJFX0VY
UE9SVF9JTkZPOwogCiAgICAgdm9pZCBmaW5hbGl6ZVVuY29uZGl0aW9uYWxseShWTSYpOwotICAg
IHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBE
RUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7
CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOwogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmNwcAkocmV2
aXNpb24gMjY4MDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlv
bi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1Miw3ICsyNTIsOCBAQCBjb25zdCBTb3VyY2VDb2Rl
KiBKU0Z1bmN0aW9uOjpzb3VyY2VDb2RlCiAgICAgcmV0dXJuICZqc0V4ZWN1dGFibGUoKS0+c291
cmNlKCk7CiB9CiAgICAgCi12b2lkIEpTRnVuY3Rpb246OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBj
ZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2
b2lkIEpTRnVuY3Rpb246OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYg
dmlzaXRvcikKIHsKICAgICBKU0Z1bmN0aW9uKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTRnVuY3Rp
b24qPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGlu
Zm8oKSk7CkBAIC0yNjEsNiArMjYyLDggQEAgdm9pZCBKU0Z1bmN0aW9uOjp2aXNpdENoaWxkcmVu
KEpTQ2VsbCogYwogICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQoYml0d2lzZV9jYXN0PEpT
Q2VsbCo+KGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KHRoaXNPYmplY3QtPm1fZXhlY3V0YWJsZU9y
UmFyZURhdGEpICYgfnJhcmVEYXRhVGFnKSk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihK
U0Z1bmN0aW9uKTsKKwogQ2FsbERhdGEgSlNGdW5jdGlvbjo6Z2V0Q2FsbERhdGEoSlNDZWxsKiBj
ZWxsKQogewogICAgIC8vIEtlZXAgdGhpcyBmdW5jdGlvbiBPSyBmb3IgaW52b2NhdGlvbiBmcm9t
IGNvbmN1cnJlbnQgY29tcGlsZXJzLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNGdW5jdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTRnVuY3Rpb24uaAkocmV2aXNpb24gMjY4MDg2KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xODAsNyArMTgwLDcg
QEAgcHJvdGVjdGVkOgogCiAgICAgc3RhdGljIGJvb2wgZGVsZXRlUHJvcGVydHkoSlNDZWxsKiwg
SlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIERlbGV0ZVByb3BlcnR5U2xvdCYpOwogCi0g
ICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAg
IERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKIHByaXZhdGU6CiAgICAgc3RhdGljIEpTRnVuY3Rp
b24qIGNyZWF0ZUltcGwoVk0mIHZtLCBGdW5jdGlvbkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUsIEpT
U2NvcGUqIHNjb3BlLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTR2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyYXRvci5jcHAJKHJldmlzaW9uIDI2ODA4NikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJhdG9yLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNTksMTEgKzU5LDE0IEBAIHZvaWQgSlNHZW5lcmF0b3I6OmZpbmlzaENyZWF0aW9u
KFZNJiB2bSkKICAgICAgICAgaW50ZXJuYWxGaWVsZChpbmRleCkuc2V0KHZtLCB0aGlzLCB2YWx1
ZXNbaW5kZXhdKTsKIH0KIAotdm9pZCBKU0dlbmVyYXRvcjo6dmlzaXRDaGlsZHJlbihKU0NlbGwq
IGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4K
K3ZvaWQgSlNHZW5lcmF0b3I6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRv
ciYgdmlzaXRvcikKIHsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTR2VuZXJhdG9y
Kj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZv
KCkpOwogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CiB9CiAK
K0RFRklORV9WSVNJVF9DSElMRFJFTihKU0dlbmVyYXRvcik7CisKIH0gLy8gbmFtZXNwYWNlIEpT
QwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmF0b3IuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyYXRvci5oCShy
ZXZpc2lvbiAyNjgwODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVy
YXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC05NCw3ICs5NCw3IEBAIHB1YmxpYzoKIAogICAgIERF
Q0xBUkVfRVhQT1JUX0lORk87CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2Vs
bCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogcHJpdmF0
ZToKICAgICBKU0dlbmVyYXRvcihWTSYsIFN0cnVjdHVyZSopOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXcuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlldy5o
CShyZXZpc2lvbiAyNjgwODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dl
bmVyaWNUeXBlZEFycmF5Vmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMTIsNyArMzEyLDcgQEAg
cHJpdmF0ZToKICAgICBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0Kiwg
SlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CiAK
ICAgICBzdGF0aWMgc2l6ZV90IGVzdGltYXRlZFNpemUoSlNDZWxsKiwgVk0mKTsKLSAgICBzdGF0
aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFS
RV9URU1QTEFURV9WSVNJVF9DSElMRFJFTjsKIAogICAgIC8vIFJldHVybnMgdHJ1ZSBpZiBzdWNj
ZXNzZnVsLCBhbmQgZmFsc2Ugb24gZXJyb3I7IGl0IHdpbGwgdGhyb3cgb24gZXJyb3IuCiAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgT3RoZXJBZGFwdG9yPgpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdJ
bmxpbmVzLmgJKHJldmlzaW9uIDI2ODA4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC01
MTAsNyArNTEwLDggQEAgc2l6ZV90IEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+Ogog
fQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgotdm9pZCBKU0dlbmVyaWNUeXBlZEFycmF5
VmlldzxBZGFwdG9yPjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNHZW5lcmljVHlwZWRB
cnJheVZpZXc8QWRhcHRvcj46OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRv
ciYgdmlzaXRvcikKIHsKICAgICBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyogdGhpc09iamVjdCA9
IGpzQ2FzdDxKU0dlbmVyaWNUeXBlZEFycmF5Vmlldyo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19P
QkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTU0OCw0ICs1NDksNiBAQCB2
b2lkIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+Ojp2CiAgICAgfQogfQogCitERUZJ
TkVfVEVNUExBVEVfVklTSVRfQ0hJTERSRU4odGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4sIEpT
R2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+KTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3Qu
Y3BwCShyZXZpc2lvbiAyNjgwODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0dsb2JhbE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4NzYsNyArMTg3Niw4IEBAIHZv
aWQgSlNHbG9iYWxPYmplY3Q6OnJlc2V0UHJvdG90eXBlKFZNJiAKICAgICBzZXRHbG9iYWxUaGlz
KHZtLCBKU1Byb3h5OjpjcmVhdGUodm0sIEpTUHJveHk6OmNyZWF0ZVN0cnVjdHVyZSh2bSwgdGhp
cywgcHJvdG90eXBlLCBQdXJlRm9yd2FyZGluZ1Byb3h5VHlwZSksIHRoaXMpKTsKIH0KIAotdm9p
ZCBKU0dsb2JhbE9iamVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9y
JiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNHbG9iYWxPYmpl
Y3Q6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsg
CiAgICAgSlNHbG9iYWxPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNHbG9iYWxPYmplY3Qq
PihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8o
KSk7CkBAIC0yMDQ3LDYgKzIwNDgsOCBAQCB2b2lkIEpTR2xvYmFsT2JqZWN0Ojp2aXNpdENoaWxk
cmVuKEpTQ2VsCiAgICAgdGhpc09iamVjdC0+bV9yZWdFeHBHbG9iYWxEYXRhLnZpc2l0QWdncmVn
YXRlKHZpc2l0b3IpOwogfQogCitERUZJTkVfRVhQT1JUX1ZJU0lUX0NISUxEUkVOKEpTR2xvYmFs
T2JqZWN0KTsKKwogQ2FsbEZyYW1lKiBKU0dsb2JhbE9iamVjdDo6ZGVwcmVjYXRlZENhbGxGcmFt
ZUZvckRlYnVnZ2VyKCkKIHsKICAgICByZXR1cm4gQ2FsbEZyYW1lOjpjcmVhdGUobV9kZXByZWNh
dGVkQ2FsbEZyYW1lRm9yRGVidWdnZXIpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNHbG9iYWxPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCShyZXZpc2lvbiAyNjgwODYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBA
IC01ODYsNyArNTg2LDcgQEAgcHVibGljOgogICAgIEpTX0VYUE9SVF9QUklWQVRFIH5KU0dsb2Jh
bE9iamVjdCgpOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlND
ZWxsKik7CiAKLSAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVu
KEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9FWFBPUlRfVklTSVRfQ0hJTERS
RU47CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNs
b3QoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90
Jik7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIGJvb2wgcHV0KEpTQ2VsbCosIEpTR2xv
YmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTSW1tdXRhYmxlQnV0dGVyZmx5LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ltbXV0YWJs
ZUJ1dHRlcmZseS5jcHAJKHJldmlzaW9uIDI2ODA4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTSW1tdXRhYmxlQnV0dGVyZmx5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIs
NyArMzIsOCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogY29uc3QgQ2xhc3NJbmZvIEpTSW1tdXRhYmxl
QnV0dGVyZmx5OjpzX2luZm8gPSB7ICJJbW11dGFibGUgQnV0dGVyZmx5IiwgbnVsbHB0ciwgbnVs
bHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU0ltbXV0YWJsZUJ1dHRlcmZseSkg
fTsKIAotdm9pZCBKU0ltbXV0YWJsZUJ1dHRlcmZseTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNl
bGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3Zv
aWQgSlNJbW11dGFibGVCdXR0ZXJmbHk6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwg
VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNlbGws
IGluZm8oKSk7CiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbihjZWxsLCB2aXNpdG9yKTsKQEAgLTQ1
LDYgKzQ2LDggQEAgdm9pZCBKU0ltbXV0YWJsZUJ1dHRlcmZseTo6dmlzaXRDaGlsZHJlbgogICAg
IHZpc2l0b3IuYXBwZW5kVmFsdWVzSGlkZGVuKGJ1dHRlcmZseS0+Y29udGlndW91cygpLmRhdGEo
KSwgYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKSk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJF
TihKU0ltbXV0YWJsZUJ1dHRlcmZseSk7CisKIHZvaWQgSlNJbW11dGFibGVCdXR0ZXJmbHk6OmNv
cHlUb0FyZ3VtZW50cyhKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUqIGZpcnN0RWxlbWVudERlc3Qs
IHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQogewogICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNJbW11dGFibGVCdXR0ZXJmbHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0ltbXV0YWJsZUJ1dHRlcmZseS5oCShyZXZpc2lvbiAyNjgwODYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ltbXV0YWJsZUJ1dHRlcmZseS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xNDUsNyArMTQ1LDcgQEAgcHVibGljOgogICAgICAgICByZXR1
cm4ganNEb3VibGVOdW1iZXIodmFsdWUpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0
Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxE
UkVOOwogCiAgICAgdm9pZCBjb3B5VG9Bcmd1bWVudHMoSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVl
KiBmaXJzdEVsZW1lbnREZXN0LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7CiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTSW50ZXJuYWxGaWVsZE9iamVj
dEltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0lu
dGVybmFsRmllbGRPYmplY3RJbXBsLmgJKHJldmlzaW9uIDI2ODA4NikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTSW50ZXJuYWxGaWVsZE9iamVjdEltcGwuaAkod29ya2luZyBj
b3B5KQpAQCAtNjYsNyArNjYsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZz
ZXRPZkludGVybmFsRmllbGQodW5zaWduZWQgaW5kZXgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRP
RihKU0ludGVybmFsRmllbGRPYmplY3RJbXBsLCBtX2ludGVybmFsRmllbGRzKSArIGluZGV4ICog
c2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPik7IH0KIAogcHJvdGVjdGVkOgotICAgIHN0YXRp
YyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJF
X1RFTVBMQVRFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgSlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1w
bChWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQogICAgICAgICA6IEJhc2Uodm0sIHN0cnVj
dHVyZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTSW50ZXJuYWxGaWVs
ZE9iamVjdEltcGxJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbElubGluZXMuaAkocmV2aXNpb24gMjY4
MDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbnRlcm5hbEZpZWxkT2Jq
ZWN0SW1wbElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAsOCBAQAogbmFtZXNw
YWNlIEpTQyB7CiAKIHRlbXBsYXRlPHVuc2lnbmVkIHBhc3NlZE51bWJlck9mSW50ZXJuYWxGaWVs
ZHM+Ci12b2lkIEpTSW50ZXJuYWxGaWVsZE9iamVjdEltcGw8cGFzc2VkTnVtYmVyT2ZJbnRlcm5h
bEZpZWxkcz46OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRv
cikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTSW50ZXJuYWxGaWVsZE9iamVj
dEltcGw8cGFzc2VkTnVtYmVyT2ZJbnRlcm5hbEZpZWxkcz46OnZpc2l0Q2hpbGRyZW5JbXBsKEpT
Q2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0g
anNDYXN0PEpTSW50ZXJuYWxGaWVsZE9iamVjdEltcGwqPihjZWxsKTsKICAgICBBU1NFUlRfR0Nf
T0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC0zOCw0ICszOSw2IEBAIHZv
aWQgSlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbDxwYXNzZWROdW0KICAgICB2aXNpdG9yLmFwcGVu
ZFZhbHVlcyh0aGlzT2JqZWN0LT5tX2ludGVybmFsRmllbGRzLCBudW1iZXJPZkludGVybmFsRmll
bGRzKTsKIH0KIAorREVGSU5FX1RFTVBMQVRFX1ZJU0lUX0NISUxEUkVOKHRlbXBsYXRlPHVuc2ln
bmVkIHBhc3NlZE51bWJlck9mSW50ZXJuYWxGaWVsZHM+LCBKU0ludGVybmFsRmllbGRPYmplY3RJ
bXBsPHBhc3NlZE51bWJlck9mSW50ZXJuYWxGaWVsZHM+KTsKKwogfSAvLyBuYW1lc3BhY2UgSlND
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xleGljYWxFbnZpcm9ubWVu
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMZXhp
Y2FsRW52aXJvbm1lbnQuY3BwCShyZXZpc2lvbiAyNjgwODYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0xleGljYWxFbnZpcm9ubWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM2LDcgKzM2LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAKIGNvbnN0IENsYXNzSW5mbyBKU0xleGlj
YWxFbnZpcm9ubWVudDo6c19pbmZvID0geyAiSlNMZXhpY2FsRW52aXJvbm1lbnQiLCAmQmFzZTo6
c19pbmZvLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTTGV4aWNhbEVu
dmlyb25tZW50KSB9OwogCi12b2lkIEpTTGV4aWNhbEVudmlyb25tZW50Ojp2aXNpdENoaWxkcmVu
KEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPgordm9pZCBKU0xleGljYWxFbnZpcm9ubWVudDo6dmlzaXRDaGlsZHJlbkltcGwoSlND
ZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBq
c0Nhc3Q8SlNMZXhpY2FsRW52aXJvbm1lbnQqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNU
X0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC00NCw2ICs0NSw4IEBAIHZvaWQgSlNM
ZXhpY2FsRW52aXJvbm1lbnQ6OnZpc2l0Q2hpbGRyZW4KICAgICB2aXNpdG9yLmFwcGVuZFZhbHVl
c0hpZGRlbih0aGlzT2JqZWN0LT52YXJpYWJsZXMoKSwgdGhpc09iamVjdC0+c3ltYm9sVGFibGUo
KS0+c2NvcGVTaXplKCkpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNMZXhpY2FsRW52
aXJvbm1lbnQpOworCiB2b2lkIEpTTGV4aWNhbEVudmlyb25tZW50OjphbmFseXplSGVhcChKU0Nl
bGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCiB7CiAgICAgYXV0byogdGhpc09iamVj
dCA9IGpzQ2FzdDxKU0xleGljYWxFbnZpcm9ubWVudCo+KGNlbGwpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMZXhpY2FsRW52aXJvbm1lbnQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xleGljYWxFbnZpcm9ubWVudC5oCShy
ZXZpc2lvbiAyNjgwODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xleGlj
YWxFbnZpcm9ubWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzQsNyArMTM0LDcgQEAgcHJvdGVj
dGVkOgogICAgICAgICB9CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihK
U0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAgICAg
c3RhdGljIHZvaWQgYW5hbHl6ZUhlYXAoSlNDZWxsKiwgSGVhcEFuYWx5emVyJik7CiB9OwogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01hcEl0ZXJhdG9yLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01hcEl0ZXJhdG9yLmNw
cAkocmV2aXNpb24gMjY4MDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNN
YXBJdGVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU3LDEzICs1NywxNiBAQCB2b2lkIEpT
TWFwSXRlcmF0b3I6OmZpbmlzaENyZWF0aW9uKFZNJiB2CiAgICAgICAgIEJhc2U6OmludGVybmFs
RmllbGQoaW5kZXgpLnNldCh2bSwgdGhpcywgdmFsdWVzW2luZGV4XSk7CiB9CiAKLXZvaWQgSlNN
YXBJdGVyYXRvcjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNp
dG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNNYXBJdGVyYXRvcjo6dmlz
aXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGF1
dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNNYXBJdGVyYXRvcio+KGNlbGwpOwogICAgIEFTU0VS
VF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKICAgICBCYXNlOjp2aXNp
dENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERS
RU4oSlNNYXBJdGVyYXRvcik7CisKIEpTVmFsdWUgSlNNYXBJdGVyYXRvcjo6Y3JlYXRlUGFpcihK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIGtleSwgSlNWYWx1ZSB2YWx1ZSkK
IHsKICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdzOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNNYXBJdGVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTTWFwSXRlcmF0b3IuaAkocmV2aXNpb24gMjY4MDg2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNYXBJdGVyYXRvci5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xNDIsNyArMTQyLDcgQEAgcHJpdmF0ZToKICAgICBKU19FWFBPUlRfUFJJVkFURSB2
b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgSlNNYXAqLCBJdGVyYXRpb25LaW5kKTsKICAgICB2b2lk
IGZpbmlzaENyZWF0aW9uKFZNJik7CiAgICAgSlNWYWx1ZSBjcmVhdGVQYWlyKEpTR2xvYmFsT2Jq
ZWN0KiwgSlNWYWx1ZSwgSlNWYWx1ZSk7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihK
U0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiB9Owog
U1RBVElDX0FTU0VSVF9JU19UUklWSUFMTFlfREVTVFJVQ1RJQkxFKEpTTWFwSXRlcmF0b3IpOwog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZUVudmlyb25tZW50
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVs
ZUVudmlyb25tZW50LmNwcAkocmV2aXNpb24gMjY4MDg2KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNNb2R1bGVFbnZpcm9ubWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY1
LDcgKzY1LDggQEAgdm9pZCBKU01vZHVsZUVudmlyb25tZW50OjpmaW5pc2hDcmVhdGlvbgogICAg
IHRoaXMtPm1vZHVsZVJlY29yZFNsb3QoKS5zZXQodm0sIHRoaXMsIG1vZHVsZVJlY29yZCk7CiB9
CiAKLXZvaWQgSlNNb2R1bGVFbnZpcm9ubWVudDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGws
IFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQg
SlNNb2R1bGVFbnZpcm9ubWVudDo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNp
dG9yJiB2aXNpdG9yKQogewogICAgIEpTTW9kdWxlRW52aXJvbm1lbnQqIHRoaXNPYmplY3QgPSBq
c0Nhc3Q8SlNNb2R1bGVFbnZpcm9ubWVudCo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1Rf
SU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTc0LDYgKzc1LDggQEAgdm9pZCBKU01v
ZHVsZUVudmlyb25tZW50Ojp2aXNpdENoaWxkcmVuKAogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNP
YmplY3QtPm1vZHVsZVJlY29yZFNsb3QoKSk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihK
U01vZHVsZUVudmlyb25tZW50KTsKKwogYm9vbCBKU01vZHVsZUVudmlyb25tZW50OjpnZXRPd25Q
cm9wZXJ0eVNsb3QoSlNPYmplY3QqIGNlbGwsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBW
TSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU01vZHVsZUVudmlyb25tZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVFbnZpcm9ubWVudC5oCShyZXZpc2lvbiAyNjgwODYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZUVudmlyb25tZW50LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTg5LDcgKzg5LDcgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJu
ICpiaXR3aXNlX2Nhc3Q8V3JpdGVCYXJyaWVyQmFzZTxBYnN0cmFjdE1vZHVsZVJlY29yZD4qPihi
aXR3aXNlX2Nhc3Q8Y2hhcio+KHRoaXMpICsgb2Zmc2V0T2ZNb2R1bGVSZWNvcmQoc3ltYm9sVGFi
bGUoKSkpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwg
U2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogfTsKIAogaW5saW5l
IEpTTW9kdWxlRW52aXJvbm1lbnQ6OkpTTW9kdWxlRW52aXJvbm1lbnQoVk0mIHZtLCBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSwgSlNTY29wZSogY3VycmVudFNjb3BlLCBTeW1ib2xUYWJsZSogc3ltYm9s
VGFibGUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZU5hbWVz
cGFjZU9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QuY3BwCShyZXZpc2lvbiAyNjgwODYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZU5hbWVzcGFjZU9iamVjdC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTg1LDcgKzg1LDggQEAgdm9pZCBKU01vZHVsZU5hbWVzcGFjZU9iamVj
dDo6ZGVzdHJveShKUwogICAgIHRoaXNPYmplY3QtPkpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0Ojp+
SlNNb2R1bGVOYW1lc3BhY2VPYmplY3QoKTsKIH0KIAotdm9pZCBKU01vZHVsZU5hbWVzcGFjZU9i
amVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQor
dGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNNb2R1bGVOYW1lc3BhY2VPYmplY3Q6
OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAg
ICBKU01vZHVsZU5hbWVzcGFjZU9iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU01vZHVsZU5h
bWVzcGFjZU9iamVjdCo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhp
c09iamVjdCwgaW5mbygpKTsKQEAgLTk4LDYgKzk5LDggQEAgdm9pZCBKU01vZHVsZU5hbWVzcGFj
ZU9iamVjdDo6dmlzaXRDaGlsZAogICAgIH0KIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpT
TW9kdWxlTmFtZXNwYWNlT2JqZWN0KTsKKwogc3RhdGljIEpTVmFsdWUgZ2V0VmFsdWUoSlNNb2R1
bGVFbnZpcm9ubWVudCogZW52aXJvbm1lbnQsIFByb3BlcnR5TmFtZSBsb2NhbE5hbWUsIFNjb3Bl
T2Zmc2V0JiBzY29wZU9mZnNldCkKIHsKICAgICBTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUgPSBl
bnZpcm9ubWVudC0+c3ltYm9sVGFibGUoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTTW9kdWxlTmFtZXNwYWNlT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QuaAkocmV2aXNpb24g
MjY4MDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVOYW1lc3Bh
Y2VPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtNzIsNyArNzIsNyBAQCBwdWJsaWM6CiBwcml2
YXRlOgogICAgIEpTX0VYUE9SVF9QUklWQVRFIEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0KFZNJiwg
U3RydWN0dXJlKik7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBmaW5pc2hDcmVhdGlvbihK
U0dsb2JhbE9iamVjdCosIEFic3RyYWN0TW9kdWxlUmVjb3JkKiwgVmVjdG9yPHN0ZDo6cGFpcjxJ
ZGVudGlmaWVyLCBBYnN0cmFjdE1vZHVsZVJlY29yZDo6UmVzb2x1dGlvbj4+JiYpOwotICAgIHN0
YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNM
QVJFX1ZJU0lUX0NISUxEUkVOOwogICAgIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90Q29tbW9uKEpT
R2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKIAogICAgIHN0cnVj
dCBFeHBvcnRFbnRyeSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01v
ZHVsZVJlY29yZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNNb2R1bGVSZWNvcmQuY3BwCShyZXZpc2lvbiAyNjgwODYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU01vZHVsZVJlY29yZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcw
LDcgKzcwLDggQEAgdm9pZCBKU01vZHVsZVJlY29yZDo6ZmluaXNoQ3JlYXRpb24oSlNHbAogICAg
IEFTU0VSVChpbmhlcml0cyh2bSwgaW5mbygpKSk7CiB9CiAKLXZvaWQgSlNNb2R1bGVSZWNvcmQ6
OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBs
YXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTTW9kdWxlUmVjb3JkOjp2aXNpdENoaWxkcmVu
SW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNNb2R1bGVSZWNv
cmQqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNNb2R1bGVSZWNvcmQqPihjZWxsKTsKICAgICBBU1NF
UlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC03OCw2ICs3OSw4
IEBAIHZvaWQgSlNNb2R1bGVSZWNvcmQ6OnZpc2l0Q2hpbGRyZW4oSlNDZWwKICAgICB2aXNpdG9y
LmFwcGVuZCh0aGlzT2JqZWN0LT5tX21vZHVsZVByb2dyYW1FeGVjdXRhYmxlKTsKIH0KIAorREVG
SU5FX1ZJU0lUX0NISUxEUkVOKEpTTW9kdWxlUmVjb3JkKTsKKwogdm9pZCBKU01vZHVsZVJlY29y
ZDo6bGluayhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHNjcmlwdEZldGNo
ZXIpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVSZWNvcmQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZVJlY29yZC5oCShyZXZpc2lvbiAyNjgw
ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZVJlY29yZC5oCSh3
b3JraW5nIGNvcHkpCkBAIC02Niw3ICs2Niw3IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGZpbmlz
aENyZWF0aW9uKEpTR2xvYmFsT2JqZWN0KiwgVk0mKTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0
Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxE
UkVOOwogCiAgICAgdm9pZCBpbnN0YW50aWF0ZURlY2xhcmF0aW9ucyhKU0dsb2JhbE9iamVjdCos
IE1vZHVsZVByb2dyYW1FeGVjdXRhYmxlKiwgSlNWYWx1ZSBzY3JpcHRGZXRjaGVyKTsKIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNOYXRpdmVTdGRGdW5jdGlvbi5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNOYXRpdmVTdGRG
dW5jdGlvbi5jcHAJKHJldmlzaW9uIDI2ODA4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTTmF0aXZlU3RkRnVuY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSwxMyAr
NDEsMTYgQEAgSlNOYXRpdmVTdGRGdW5jdGlvbjo6SlNOYXRpdmVTdGRGdW5jdGlvbgogewogfQog
Ci12b2lkIEpTTmF0aXZlU3RkRnVuY3Rpb246OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBT
bG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpT
TmF0aXZlU3RkRnVuY3Rpb246OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRv
ciYgdmlzaXRvcikKIHsKICAgICBKU05hdGl2ZVN0ZEZ1bmN0aW9uKiB0aGlzT2JqZWN0ID0ganND
YXN0PEpTTmF0aXZlU3RkRnVuY3Rpb24qPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lO
SEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlz
T2JqZWN0LCB2aXNpdG9yKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTTmF0aXZlU3Rk
RnVuY3Rpb24pOworCiB2b2lkIEpTTmF0aXZlU3RkRnVuY3Rpb246OmZpbmlzaENyZWF0aW9uKFZN
JiB2bSwgTmF0aXZlRXhlY3V0YWJsZSogZXhlY3V0YWJsZSwgdW5zaWduZWQgbGVuZ3RoLCBjb25z
dCBTdHJpbmcmIG5hbWUpCiB7CiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0sIGV4ZWN1dGFi
bGUsIGxlbmd0aCwgbmFtZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U05hdGl2ZVN0ZEZ1bmN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNOYXRpdmVTdGRGdW5jdGlvbi5oCShyZXZpc2lvbiAyNjgwODYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU05hdGl2ZVN0ZEZ1bmN0aW9uLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTY1LDcgKzY1LDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBKU05hdGl2ZVN0
ZEZ1bmN0aW9uKFZNJiwgTmF0aXZlRXhlY3V0YWJsZSosIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0
dXJlKiwgTmF0aXZlU3RkRnVuY3Rpb24mJik7CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYs
IE5hdGl2ZUV4ZWN1dGFibGUqLCB1bnNpZ25lZCBsZW5ndGgsIGNvbnN0IFN0cmluZyYgbmFtZSk7
Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwor
ICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBOYXRpdmVTdGRGdW5jdGlvbiBtX2Z1
bmN0aW9uOwogfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVj
dC5jcHAJKHJldmlzaW9uIDI2ODA4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIwLDcgKzEyMCw4IEBAIEFMV0FZU19J
TkxJTkUgdm9pZCBKU09iamVjdDo6bWFya0F1eGlsaWEKICAgICB2aXNpdG9yLmFwcGVuZFZhbHVl
c0hpZGRlbihidXR0ZXJmbHktPnByb3BlcnR5U3RvcmFnZSgpIC0gb3V0T2ZMaW5lU2l6ZSwgb3V0
T2ZMaW5lU2l6ZSk7CiB9CiAKLUFMV0FZU19JTkxJTkUgU3RydWN0dXJlKiBKU09iamVjdDo6dmlz
aXRCdXR0ZXJmbHkoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNp
dG9yPgorQUxXQVlTX0lOTElORSBTdHJ1Y3R1cmUqIEpTT2JqZWN0Ojp2aXNpdEJ1dHRlcmZseShW
aXNpdG9yJiB2aXNpdG9yKQogewogICAgIHN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCByYWNlUmVh
c29uID0gIkpTT2JqZWN0Ojp2aXNpdEJ1dHRlcmZseSI7CiAgICAgU3RydWN0dXJlKiByZXN1bHQg
PSB2aXNpdEJ1dHRlcmZseUltcGwodmlzaXRvcik7CkBAIC0xMjksNyArMTMwLDggQEAgQUxXQVlT
X0lOTElORSBTdHJ1Y3R1cmUqIEpTT2JqZWN0Ojp2aXNpdAogICAgIHJldHVybiByZXN1bHQ7CiB9
CiAKLUFMV0FZU19JTkxJTkUgU3RydWN0dXJlKiBKU09iamVjdDo6dmlzaXRCdXR0ZXJmbHlJbXBs
KFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK0FMV0FZ
U19JTkxJTkUgU3RydWN0dXJlKiBKU09iamVjdDo6dmlzaXRCdXR0ZXJmbHlJbXBsKFZpc2l0b3Im
IHZpc2l0b3IpCiB7CiAgICAgVk0mIHZtID0gdmlzaXRvci52bSgpOwogICAgIApAQCAtNDI5LDcg
KzQzMSw4IEBAIHNpemVfdCBKU09iamVjdDo6ZXN0aW1hdGVkU2l6ZShKU0NlbGwqIGMKICAgICBy
ZXR1cm4gQmFzZTo6ZXN0aW1hdGVkU2l6ZShjZWxsLCB2bSkgKyBidXR0ZXJmbHlPdXRPZkxpbmVT
aXplOwogfQogCi12b2lkIEpTT2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xv
dFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU09i
amVjdDo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQog
ewogICAgIEpTT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTT2JqZWN0Kj4oY2VsbCk7CiAg
ICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNDM3
LDE2ICs0NDAsMTggQEAgdm9pZCBKU09iamVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbAog
ICAgIGJvb2wgd2FzQ2hlY2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlvbiA9IHZpc2l0b3IubV9p
c0NoZWNraW5nRm9yRGVmYXVsdE1hcmtWaW9sYXRpb247CiAgICAgdmlzaXRvci5tX2lzQ2hlY2tp
bmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlvbiA9IGZhbHNlOwogI2VuZGlmCi0gICAgCisKICAgICBK
U0NlbGw6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7Ci0gICAgCisKICAgICB0
aGlzT2JqZWN0LT52aXNpdEJ1dHRlcmZseSh2aXNpdG9yKTsKLSAgICAKKwogI2lmIEFTU0VSVF9F
TkFCTEVECiAgICAgdmlzaXRvci5tX2lzQ2hlY2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlvbiA9
IHdhc0NoZWNraW5nRm9yRGVmYXVsdE1hcmtWaW9sYXRpb247CiAjZW5kaWYKIH0KIAorREVGSU5F
X0VYUE9SVF9WSVNJVF9DSElMRFJFTihKU09iamVjdCk7CisKIHZvaWQgSlNPYmplY3Q6OmFuYWx5
emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFuYWx5emVyJiBhbmFseXplcikKIHsKICAgICBKU09i
amVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU09iamVjdCo+KGNlbGwpOwpAQCAtNDg1LDcgKzQ5
MCw4IEBAIHZvaWQgSlNPYmplY3Q6OmFuYWx5emVIZWFwKEpTQ2VsbCogY2VsbCwKICAgICB9CiB9
CiAKLXZvaWQgSlNGaW5hbE9iamVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNGaW5h
bE9iamVjdDo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9y
KQogewogICAgIEpTRmluYWxPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNGaW5hbE9iamVj
dCo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5m
bygpKTsKQEAgLTUwNiw2ICs1MTIsOCBAQCB2b2lkIEpTRmluYWxPYmplY3Q6OnZpc2l0Q2hpbGRy
ZW4oSlNDZWxsCiAjZW5kaWYKIH0KIAorREVGSU5FX0VYUE9SVF9WSVNJVF9DSElMRFJFTihKU0Zp
bmFsT2JqZWN0KTsKKwogU3RyaW5nIEpTT2JqZWN0OjpjbGFzc05hbWUoY29uc3QgSlNPYmplY3Qq
IG9iamVjdCwgVk0mIHZtKQogewogICAgIGNvbnN0IENsYXNzSW5mbyogaW5mbyA9IG9iamVjdC0+
Y2xhc3NJbmZvKHZtKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2Jq
ZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmpl
Y3QuaAkocmV2aXNpb24gMjY4MDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMTA4LDggKzEwOCw5IEBAIGNsYXNzIEpTT2Jq
ZWN0IDogcHVibGljIEpTQ2VsbCB7CiBwdWJsaWM6CiAgICAgdXNpbmcgQmFzZSA9IEpTQ2VsbDsK
IAorICAgIERFQ0xBUkVfRVhQT1JUX1ZJU0lUX0NISUxEUkVOOworCiAgICAgSlNfRVhQT1JUX1BS
SVZBVEUgc3RhdGljIHNpemVfdCBlc3RpbWF0ZWRTaXplKEpTQ2VsbCosIFZNJik7Ci0gICAgSlNf
RVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90Vmlz
aXRvciYpOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGFuYWx5emVIZWFwKEpT
Q2VsbCosIEhlYXBBbmFseXplciYpOwogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFN0
cmluZyBjbGFzc05hbWUoY29uc3QgSlNPYmplY3QqLCBWTSYpOwpAQCAtOTc5LDkgKzk4MCw5IEBA
IHByb3RlY3RlZDoKICAgICBKU09iamVjdChWTSYsIFN0cnVjdHVyZSosIEJ1dHRlcmZseSogPSBu
dWxscHRyKTsKICAgICAKICAgICAvLyBWaXNpdHMgdGhlIGJ1dHRlcmZseSB1bmxlc3MgdGhlcmUg
aXMgYSByYWNlLiBSZXR1cm5zIHRoZSBzdHJ1Y3R1cmUgaWYgdGhlcmUgd2FzIG5vIHJhY2UuCi0g
ICAgU3RydWN0dXJlKiB2aXNpdEJ1dHRlcmZseShTbG90VmlzaXRvciYpOworICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFZpc2l0b3I+IFN0cnVjdHVyZSogdmlzaXRCdXR0ZXJmbHkoVmlzaXRvciYpOwog
ICAgIAotICAgIFN0cnVjdHVyZSogdmlzaXRCdXR0ZXJmbHlJbXBsKFNsb3RWaXNpdG9yJik7Cisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gU3RydWN0dXJlKiB2aXNpdEJ1dHRlcmZseUlt
cGwoVmlzaXRvciYpOwogICAgIAogICAgIHZvaWQgbWFya0F1eGlsaWFyeUFuZFZpc2l0T3V0T2ZM
aW5lUHJvcGVydGllcyhTbG90VmlzaXRvciYsIEJ1dHRlcmZseSosIFN0cnVjdHVyZSosIFByb3Bl
cnR5T2Zmc2V0IG1heE9mZnNldCk7CiAKQEAgLTExNzEsOCArMTE3Miw2IEBAIHByb3RlY3RlZDoK
ICAgICB9CiB9OwogCi1jbGFzcyBKU0ZpbmFsT2JqZWN0OwotCiAvLyBKU0ZpbmFsT2JqZWN0IGlz
IGEgdHlwZSBvZiBKU09iamVjdCB0aGF0IGNvbnRhaW5zIHN1ZmZpY2llbnQgaW50ZXJuYWwKIC8v
IHN0b3JhZ2UgdG8gZnVsbHkgbWFrZSB1c2Ugb2YgdGhlIGNvbGxlY3RvciBjZWxsIGNvbnRhaW5p
bmcgaXQuCiBjbGFzcyBKU0ZpbmFsT2JqZWN0IGZpbmFsIDogcHVibGljIEpTT2JqZWN0IHsKQEAg
LTEyMTEsMTUgKzEyMTAsMTMgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpj
cmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCB0eXBlSW5mbygpLCBpbmZvKCksIGRl
ZmF1bHRJbmRleGluZ1R5cGUsIGlubGluZUNhcGFjaXR5KTsKICAgICB9CiAKLSAgICBKU19FWFBP
UlRfUFJJVkFURSBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9y
Jik7CisgICAgREVDTEFSRV9FWFBPUlRfVklTSVRfQ0hJTERSRU47CiAKICAgICBERUNMQVJFX0VY
UE9SVF9JTkZPOwogCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRy
YWN0b3I7CiAKLSAgICB2b2lkIHZpc2l0Q2hpbGRyZW5Db21tb24oU2xvdFZpc2l0b3ImKTsKLQog
ICAgIGV4cGxpY2l0IEpTRmluYWxPYmplY3QoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwg
QnV0dGVyZmx5KiBidXR0ZXJmbHkpCiAgICAgICAgIDogSlNPYmplY3Qodm0sIHN0cnVjdHVyZSwg
YnV0dGVyZmx5KQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
UHJvbWlzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNQcm9taXNlLmNwcAkocmV2aXNpb24gMjY4MDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNQcm9taXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjcsMTMgKzY3LDE2IEBA
IHZvaWQgSlNQcm9taXNlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCiAgICAgICAgIEJhc2U6Omlu
dGVybmFsRmllbGQoaW5kZXgpLnNldCh2bSwgdGhpcywgdmFsdWVzW2luZGV4XSk7CiB9CiAKLXZv
aWQgSlNQcm9taXNlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZp
c2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1Byb21pc2U6OnZpc2l0
Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBhdXRv
KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTUHJvbWlzZSo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19P
QkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKICAgICBCYXNlOjp2aXNpdENoaWxk
cmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNQ
cm9taXNlKTsKKwogYXV0byBKU1Byb21pc2U6OnN0YXR1cyhWTSYpIGNvbnN0IC0+IFN0YXR1cwog
ewogICAgIEpTVmFsdWUgdmFsdWUgPSBpbnRlcm5hbEZpZWxkKEZpZWxkOjpGbGFncykuZ2V0KCk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb21pc2UuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb21pc2UuaAkocmV2aXNp
b24gMjY4MDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9taXNlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTkzLDcgKzkzLDcgQEAgcHVibGljOgogICAgIH07CiAgICAgc3Rh
dGljIERlZmVycmVkRGF0YSBjcmVhdGVEZWZlcnJlZERhdGEoSlNHbG9iYWxPYmplY3QqLCBKU1By
b21pc2VDb25zdHJ1Y3RvciopOwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0Nl
bGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKIHByb3Rl
Y3RlZDoKICAgICBKU1Byb21pc2UoVk0mLCBTdHJ1Y3R1cmUqKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVydHlOYW1lRW51bWVyYXRvci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yLmNwcAkocmV2aXNpb24gMjY4MDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzAsNyAr
NzAsOCBAQCB2b2lkIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6ZmluaXNoQ3JlCiAgICAgfQog
fQogCi12b2lkIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6dmlzaXRDaGlsZHJlbihKU0NlbGwq
IGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4K
K3ZvaWQgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwq
IGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9y
KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcio+KGNlbGwpOwog
ICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTg3
LDQgKzg4LDYgQEAgdm9pZCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OnZpc2l0Q2hpbAogICAg
IH0KIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcik7
CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmgJKHJldmlzaW9uIDI2
ODA4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVydHlOYW1lRW51
bWVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC04NCw3ICs4NCw3IEBAIHB1YmxpYzoKICAgICAg
ICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IsIG1fcHJv
cGVydHlOYW1lcyk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0Nl
bGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKIHByaXZh
dGU6CiAgICAgZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJveHkuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJveHkuY3BwCShyZXZpc2lvbiAyNjgwODYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3h5LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzUsNyArMzUsOCBAQCBTVEFUSUNfQVNTRVJUX0lTX1RSSVZJQUxMWV9ERVNUUlVDVElC
TEUoCiAKIGNvbnN0IENsYXNzSW5mbyBKU1Byb3h5OjpzX2luZm8gPSB7ICJKU1Byb3h5IiwgJkJh
c2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1Byb3h5
KSB9OwogCi12b2lkIEpTUHJveHk6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90Vmlz
aXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTUHJveHk6
OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAg
ICBKU1Byb3h5KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTUHJveHkqPihjZWxsKTsKICAgICBBU1NF
UlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC00Myw2ICs0NCw4
IEBAIHZvaWQgSlNQcm94eTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwKICAgICB2aXNpdG9y
LmFwcGVuZCh0aGlzT2JqZWN0LT5tX3RhcmdldCk7CiB9CiAKK0RFRklORV9FWFBPUlRfVklTSVRf
Q0hJTERSRU4oSlNQcm94eSk7CisKIHZvaWQgSlNQcm94eTo6c2V0VGFyZ2V0KFZNJiB2bSwgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKIHsKICAgICBtX3RhcmdldC5zZXQodm0sIHRoaXMs
IGdsb2JhbE9iamVjdCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1By
b3h5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm94
eS5oCShyZXZpc2lvbiAyNjgwODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U1Byb3h5LmgJKHdvcmtpbmcgY29weSkKQEAgLTg1LDcgKzg1LDcgQEAgcHJvdGVjdGVkOgogICAg
ICAgICBtX3RhcmdldC5zZXQodm0sIHRoaXMsIHRhcmdldCk7CiAgICAgfQogCi0gICAgSlNfRVhQ
T1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRv
ciYpOworICAgIERFQ0xBUkVfRVhQT1JUX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgSlNfRVhQT1JU
X1BSSVZBVEUgc3RhdGljIFN0cmluZyBjbGFzc05hbWUoY29uc3QgSlNPYmplY3QqLCBWTSYpOwog
ICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBTdHJpbmcgdG9TdHJpbmdOYW1lKGNvbnN0IEpT
T2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTU2NvcGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTU2NvcGUuY3BwCShyZXZpc2lvbiAyNjgwODYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU1Njb3BlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksNyArMzksOCBA
QCBTVEFUSUNfQVNTRVJUX0lTX1RSSVZJQUxMWV9ERVNUUlVDVElCTEUoCiAKIGNvbnN0IENsYXNz
SW5mbyBKU1Njb3BlOjpzX2luZm8gPSB7ICJTY29wZSIsICZCYXNlOjpzX2luZm8sIG51bGxwdHIs
IG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNTY29wZSkgfTsKIAotdm9pZCBKU1Njb3Bl
Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1w
bGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1Njb3BlOjp2aXNpdENoaWxkcmVuSW1wbChK
U0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNTY29wZSogdGhpc09iamVj
dCA9IGpzQ2FzdDxKU1Njb3BlKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklU
Uyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNDcsNiArNDgsOCBAQCB2b2lkIEpTU2NvcGU6OnZp
c2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsCiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+
bV9uZXh0KTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTU2NvcGUpOworCiAvLyBSZXR1
cm5zIHRydWUgaWYgd2UgZm91bmQgZW5vdWdoIGluZm9ybWF0aW9uIHRvIHRlcm1pbmF0ZSBvcHRp
bWl6YXRpb24uCiBzdGF0aWMgaW5saW5lIGJvb2wgYWJzdHJhY3RBY2Nlc3MoSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgSlNTY29wZSogc2NvcGUsIGNvbnN0IElkZW50aWZpZXImIGlkZW50
LCBHZXRPclB1dCBnZXRPclB1dCwgc2l6ZV90IGRlcHRoLCBib29sJiBuZWVkc1ZhckluamVjdGlv
bkNoZWNrcywgUmVzb2x2ZU9wJiBvcCwgSW5pdGlhbGl6YXRpb25Nb2RlIGluaXRpYWxpemF0aW9u
TW9kZSkKIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2NvcGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Njb3BlLmgJKHJl
dmlzaW9uIDI2ODA4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2NvcGUu
aAkod29ya2luZyBjb3B5KQpAQCAtNjIsNyArNjIsNyBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMg
dm9pZCBjb2xsZWN0Q2xvc3VyZVZhcmlhYmxlc1VuZGVyVERaKEpTU2NvcGUqLCBWYXJpYWJsZUVu
dmlyb25tZW50JiByZXN1bHQpOwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0Nl
bGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBi
b29sIGlzVmFyU2NvcGUoKTsKICAgICBib29sIGlzTGV4aWNhbFNjb3BlKCk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NlZ21lbnRlZFZh
cmlhYmxlT2JqZWN0LmNwcAkocmV2aXNpb24gMjY4MDg2KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTYyLDE5ICs2MiwyMiBAQCBTY29wZU9mZnNldCBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0
OjphCiAgICAgcmV0dXJuIFNjb3BlT2Zmc2V0KG9sZFNpemUpOwogfQogCi12b2lkIEpTU2VnbWVu
dGVkVmFyaWFibGVPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRv
ciYgc2xvdFZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1NlZ21l
bnRlZFZhcmlhYmxlT2JqZWN0Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0
b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdCogdGhpc09iamVj
dCA9IGpzQ2FzdDxKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0Kj4oY2VsbCk7CiAgICAgQVNTRVJU
X0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwotICAgIEJhc2U6OnZpc2l0
Q2hpbGRyZW4odGhpc09iamVjdCwgc2xvdFZpc2l0b3IpOworICAgIEJhc2U6OnZpc2l0Q2hpbGRy
ZW4odGhpc09iamVjdCwgdmlzaXRvcik7CiAgICAgCiAgICAgLy8gRklYTUU6IFdlIGNvdWxkIGF2
b2lkIGxvY2tpbmcgaGVyZSBpZiBTZWdtZW50ZWRWZWN0b3Igd2FzIGxvY2stZnJlZS4gSXQgY291
bGQgYmUgbWFkZSBsb2NrLWZyZWUKICAgICAvLyByZWxhdGl2ZWx5IGVhc2lseS4KICAgICBhdXRv
IGxvY2tlciA9IGhvbGRMb2NrKHRoaXNPYmplY3QtPmNlbGxMb2NrKCkpOwogICAgIGZvciAodW5z
aWduZWQgaSA9IHRoaXNPYmplY3QtPm1fdmFyaWFibGVzLnNpemUoKTsgaS0tOykKLSAgICAgICAg
c2xvdFZpc2l0b3IuYXBwZW5kSGlkZGVuKHRoaXNPYmplY3QtPm1fdmFyaWFibGVzW2ldKTsKKyAg
ICAgICAgdmlzaXRvci5hcHBlbmRIaWRkZW4odGhpc09iamVjdC0+bV92YXJpYWJsZXNbaV0pOwog
fQogCitERUZJTkVfRVhQT1JUX1ZJU0lUX0NISUxEUkVOKEpTU2VnbWVudGVkVmFyaWFibGVPYmpl
Y3QpOworCiB2b2lkIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3Q6OmFuYWx5emVIZWFwKEpTQ2Vs
bCogY2VsbCwgSGVhcEFuYWx5emVyJiBhbmFseXplcikKIHsKICAgICBKU1NlZ21lbnRlZFZhcmlh
YmxlT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3Qq
PihjZWxsKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2VnbWVudGVk
VmFyaWFibGVPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmgJKHJldmlzaW9uIDI2ODA4NikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVPYmplY3QuaAko
d29ya2luZyBjb3B5KQpAQCAtODYsNyArODYsNyBAQCBwdWJsaWM6CiAgICAgLy8gdGhlIGluZGV4
IG9mIHRoZSBmaXJzdCBvbmUgYWRkZWQuCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgU2NvcGVPZmZz
ZXQgYWRkVmFyaWFibGVzKHVuc2lnbmVkIG51bWJlck9mVmFyaWFibGVzVG9BZGQsIEpTVmFsdWUp
OwogICAgIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4o
SlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX0VYUE9SVF9WSVNJVF9DSElMRFJF
TjsKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBhbmFseXplSGVhcChKU0NlbGwq
LCBIZWFwQW5hbHl6ZXImKTsKICAgICAKIHByb3RlY3RlZDoKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTU2V0SXRlcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2V0SXRlcmF0b3IuY3BwCShyZXZpc2lvbiAyNjgwODYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NldEl0ZXJhdG9yLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNTcsMTMgKzU3LDE2IEBAIHZvaWQgSlNTZXRJdGVyYXRvcjo6ZmluaXNo
Q3JlYXRpb24oVk0mIHYKICAgICAgICAgQmFzZTo6aW50ZXJuYWxGaWVsZChpbmRleCkuc2V0KHZt
LCB0aGlzLCB2YWx1ZXNbaW5kZXhdKTsKIH0KIAotdm9pZCBKU1NldEl0ZXJhdG9yOjp2aXNpdENo
aWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBl
bmFtZSBWaXNpdG9yPgordm9pZCBKU1NldEl0ZXJhdG9yOjp2aXNpdENoaWxkcmVuSW1wbChKU0Nl
bGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpz
Q2FzdDxKU1NldEl0ZXJhdG9yKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklU
Uyh0aGlzT2JqZWN0LCBpbmZvKCkpOwogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVj
dCwgdmlzaXRvcik7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU1NldEl0ZXJhdG9yKTsK
KwogSlNWYWx1ZSBKU1NldEl0ZXJhdG9yOjpjcmVhdGVQYWlyKEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIEpTVmFsdWUga2V5LCBKU1ZhbHVlIHZhbHVlKQogewogICAgIE1hcmtlZEFyZ3Vt
ZW50QnVmZmVyIGFyZ3M7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Nl
dEl0ZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNTZXRJdGVyYXRvci5oCShyZXZpc2lvbiAyNjgwODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1NldEl0ZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTEzMCw3ICsxMzAs
NyBAQCBwcml2YXRlOgogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZmluaXNoQ3JlYXRpb24o
Vk0mLCBKU1NldCosIEl0ZXJhdGlvbktpbmQpOwogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0m
KTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBKU1ZhbHVlIGNyZWF0ZVBhaXIoSlNHbG9iYWxPYmpl
Y3QqLCBKU1ZhbHVlLCBKU1ZhbHVlKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpT
Q2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIH07CiBT
VEFUSUNfQVNTRVJUX0lTX1RSSVZJQUxMWV9ERVNUUlVDVElCTEUoSlNTZXRJdGVyYXRvcik7CiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU291cmNlQ29kZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTb3VyY2VDb2RlLmNw
cAkocmV2aXNpb24gMjY4MDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNT
b3VyY2VDb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsOCBAQAogI2luY2x1ZGUg
ImNvbmZpZy5oIgogI2luY2x1ZGUgIkpTU291cmNlQ29kZS5oIgogCisjaW5jbHVkZSAiSlNDZWxs
SW5saW5lcy5oIiAvLyBtbGFtIFRFU1QKKwogbmFtZXNwYWNlIEpTQyB7CiAKIGNvbnN0IENsYXNz
SW5mbyBKU1NvdXJjZUNvZGU6OnNfaW5mbyA9IHsgIkpTU291cmNlQ29kZSIsIG51bGxwdHIsIG51
bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNTb3VyY2VDb2RlKSB9OwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmNwcAkocmV2aXNpb24g
MjY4MDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMDUsNyArMTA1LDggQEAgc2l6ZV90IEpTU3RyaW5nOjplc3RpbWF0
ZWRTaXplKEpTQ2VsbCogYwogICAgIHJldHVybiBCYXNlOjplc3RpbWF0ZWRTaXplKGNlbGwsIHZt
KSArIGJpdHdpc2VfY2FzdDxTdHJpbmdJbXBsKj4ocG9pbnRlciktPmNvc3REdXJpbmdHQygpOwog
fQogCi12b2lkIEpTU3RyaW5nOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0
b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1N0cmluZzo6
dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAg
IEpTU3RyaW5nKiB0aGlzT2JqZWN0ID0gYXNTdHJpbmcoY2VsbCk7CiAgICAgQVNTRVJUX0dDX09C
SkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtMTQzLDYgKzE0NCw4IEBAIHZv
aWQgSlNTdHJpbmc6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWwKICAgICAgICAgdmlzaXRvci5y
ZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQoaW1wbC0+Y29zdER1cmluZ0dDKCkpOwogfQogCitERUZJ
TkVfVklTSVRfQ0hJTERSRU4oSlNTdHJpbmcpOworCiBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVk
IG1heExlbmd0aEZvck9uU3RhY2tSZXNvbHZlID0gMjA0ODsKIAogdm9pZCBKU1JvcGVTdHJpbmc6
OnJlc29sdmVSb3BlSW50ZXJuYWw4KExDaGFyKiBidWZmZXIpIGNvbnN0CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmgJKHJldmlzaW9uIDI2ODA4NikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmgJKHdvcmtpbmcgY29weSkKQEAg
LTIxOCw3ICsyMTgsNyBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgdm9pZCBkdW1wVG9TdHJlYW0o
Y29uc3QgSlNDZWxsKiwgUHJpbnRTdHJlYW0mKTsKICAgICBzdGF0aWMgc2l6ZV90IGVzdGltYXRl
ZFNpemUoSlNDZWxsKiwgVk0mKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2Vs
bCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIEFM
V0FZU19JTkxJTkUgYm9vbCBpc1JvcGUoKSBjb25zdAogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nSXRlcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nSXRlcmF0b3IuY3BwCShyZXZpc2lv
biAyNjgwODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZ0l0ZXJh
dG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTEsMTEgKzUxLDE0IEBAIEpTU3RyaW5nSXRlcmF0
b3IqIEpTU3RyaW5nSXRlcmF0b3I6OmNsb24KICAgICByZXR1cm4gY2xvbmU7CiB9CiAKLXZvaWQg
SlNTdHJpbmdJdGVyYXRvcjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9y
JiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNTdHJpbmdJdGVy
YXRvcjo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQog
ewogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNTdHJpbmdJdGVyYXRvcio+KGNlbGwp
OwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKICAg
ICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwogfQogCitERUZJTkVf
VklTSVRfQ0hJTERSRU4oSlNTdHJpbmdJdGVyYXRvcik7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmdJdGVyYXRvci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nSXRlcmF0
b3IuaAkocmV2aXNpb24gMjY4MDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNTdHJpbmdJdGVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC03OSw3ICs3OSw3IEBAIHB1Ymxp
YzoKICAgICBKU1ZhbHVlIGluZGV4KCkgY29uc3QgeyByZXR1cm4gaW50ZXJuYWxGaWVsZChGaWVs
ZDo6SW5kZXgpLmdldCgpOyB9CiAgICAgSlNTdHJpbmdJdGVyYXRvciogY2xvbmUoSlNHbG9iYWxP
YmplY3QqKTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZp
c2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiBwcml2YXRlOgogICAgIEpT
U3RyaW5nSXRlcmF0b3IoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3Qu
Y3BwCShyZXZpc2lvbiAyNjgwODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U1N5bWJvbFRhYmxlT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsOCBAQCBu
YW1lc3BhY2UgSlNDIHsKIAogY29uc3QgQ2xhc3NJbmZvIEpTU3ltYm9sVGFibGVPYmplY3Q6OnNf
aW5mbyA9IHsgIlN5bWJvbFRhYmxlT2JqZWN0IiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVs
bHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1N5bWJvbFRhYmxlT2JqZWN0KSB9OwogCi12b2lk
IEpTU3ltYm9sVGFibGVPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90Vmlz
aXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTU3ltYm9s
VGFibGVPYmplY3Q6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlz
aXRvcikKIHsKICAgICBKU1N5bWJvbFRhYmxlT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpT
U3ltYm9sVGFibGVPYmplY3QqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRT
KHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC00NCw2ICs0NSw4IEBAIHZvaWQgSlNTeW1ib2xUYWJs
ZU9iamVjdDo6dmlzaXRDaGlsZHJlbigKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5t
X3N5bWJvbFRhYmxlKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTU3ltYm9sVGFibGVP
YmplY3QpOworCiBib29sIEpTU3ltYm9sVGFibGVPYmplY3Q6OmRlbGV0ZVByb3BlcnR5KEpTQ2Vs
bCogY2VsbCwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lIHByb3Bl
cnR5TmFtZSwgRGVsZXRlUHJvcGVydHlTbG90JiBzbG90KQogewogICAgIEpTU3ltYm9sVGFibGVP
YmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNTeW1ib2xUYWJsZU9iamVjdCo+KGNlbGwpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVjdC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3ltYm9sVGFi
bGVPYmplY3QuaAkocmV2aXNpb24gMjY4MDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC03MCw3ICs3MCw3
IEBAIHByb3RlY3RlZDoKICAgICAgICAgbV9zeW1ib2xUYWJsZS5zZXQodm0sIHRoaXMsIHN5bWJv
bFRhYmxlKTsKICAgICB9CiAgICAgCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0Nl
bGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAgICAgCiBw
cml2YXRlOgogICAgIFdyaXRlQmFycmllcjxTeW1ib2xUYWJsZT4gbV9zeW1ib2xUYWJsZTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTV2Vha09iamVjdFJlZi5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNXZWFrT2JqZWN0UmVm
LmNwcAkocmV2aXNpb24gMjY4MDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNXZWFrT2JqZWN0UmVmLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksNyArMzksOCBAQCB2b2lk
IEpTV2Vha09iamVjdFJlZjo6ZmluaXNoQ3JlYXRpb24oVk0mCiAgICAgQmFzZTo6ZmluaXNoQ3Jl
YXRpb24odm0pOwogfQogCi12b2lkIEpTV2Vha09iamVjdFJlZjo6dmlzaXRDaGlsZHJlbihKU0Nl
bGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRv
cj4KK3ZvaWQgSlNXZWFrT2JqZWN0UmVmOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGws
IFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1dl
YWtPYmplY3RSZWYqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNP
YmplY3QsIGluZm8oKSk7CkBAIC01MSw2ICs1Miw4IEBAIHZvaWQgSlNXZWFrT2JqZWN0UmVmOjp2
aXNpdENoaWxkcmVuKEpTQ2UKICAgICB9CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU1dl
YWtPYmplY3RSZWYpOworCiB2b2lkIEpTV2Vha09iamVjdFJlZjo6ZmluYWxpemVVbmNvbmRpdGlv
bmFsbHkoVk0mIHZtKQogewogICAgIGlmIChtX3ZhbHVlICYmICF2bS5oZWFwLmlzTWFya2VkKG1f
dmFsdWUuZ2V0KCkpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNXZWFr
T2JqZWN0UmVmLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNXZWFrT2JqZWN0UmVmLmgJKHJldmlzaW9uIDI2ODA4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTV2Vha09iamVjdFJlZi5oCSh3b3JraW5nIGNvcHkpCkBAIC02NSw3ICs2
NSw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICB2b2lkIGZpbmFsaXplVW5jb25kaXRpb25hbGx5
KFZNJik7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRv
ciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKIHByaXZhdGU6CiAgICAgSlNXZWFr
T2JqZWN0UmVmKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU1dpdGhTY29wZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNXaXRoU2NvcGUuY3BwCShyZXZpc2lvbiAyNjgwODYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1dpdGhTY29wZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQxLDcgKzQxLDggQEAgSlNXaXRoU2NvcGUqIEpTV2l0aFNjb3BlOjpjcmVh
dGUoCiAgICAgcmV0dXJuIHdpdGhTY29wZTsKIH0KIAotdm9pZCBKU1dpdGhTY29wZTo6dmlzaXRD
aGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlw
ZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNXaXRoU2NvcGU6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2Vs
bCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU1dpdGhTY29wZSogdGhpc09iamVj
dCA9IGpzQ2FzdDxKU1dpdGhTY29wZSo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5I
RVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTQ5LDYgKzUwLDggQEAgdm9pZCBKU1dpdGhT
Y29wZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIAogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmpl
Y3QtPm1fb2JqZWN0KTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTV2l0aFNjb3BlKTsK
KwogU3RydWN0dXJlKiBKU1dpdGhTY29wZTo6Y3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90bykKIHsKICAgICByZXR1cm4gU3Ry
dWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG8sIFR5cGVJbmZvKFdpdGhTY29w
ZVR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTV2l0aFNjb3BlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNXaXRoU2NvcGUuaAkocmV2aXNpb24gMjY4MDg2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNXaXRoU2NvcGUuaAkod29ya2luZyBjb3B5KQpAQCAt
NDMsNyArNDMsNyBAQCBwdWJsaWM6CiAKICAgICBKU09iamVjdCogb2JqZWN0KCkgeyByZXR1cm4g
bV9vYmplY3QuZ2V0KCk7IH0KIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgc3Rh
dGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1Zh
bHVlIHByb3RvKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNXcmFw
cGVyT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU1dyYXBwZXJPYmplY3QuY3BwCShyZXZpc2lvbiAyNjgwODYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU1dyYXBwZXJPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
OSwxMSArMjksMTQgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIFNUQVRJQ19BU1NFUlRfSVNfVFJJVklB
TExZX0RFU1RSVUNUSUJMRShKU1dyYXBwZXJPYmplY3QpOwogCi12b2lkIEpTV3JhcHBlck9iamVj
dDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVt
cGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNXcmFwcGVyT2JqZWN0Ojp2aXNpdENoaWxk
cmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0byogdGhp
c09iamVjdCA9IGpzQ2FzdDxKU1dyYXBwZXJPYmplY3QqPihjZWxsKTsKICAgICBBU1NFUlRfR0Nf
T0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAgICAgQmFzZTo6dmlzaXRDaGls
ZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKIH0KIAorREVGSU5FX0VYUE9SVF9WSVNJVF9DSElM
RFJFTihKU1dyYXBwZXJPYmplY3QpOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTV3JhcHBlck9iamVjdC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTV3JhcHBlck9iamVjdC5oCShyZXZpc2lv
biAyNjgwODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1dyYXBwZXJPYmpl
Y3QuaAkod29ya2luZyBjb3B5KQpAQCAtNjQsNyArNjQsNyBAQCBwdWJsaWM6CiBwcm90ZWN0ZWQ6
CiAgICAgZXhwbGljaXQgSlNXcmFwcGVyT2JqZWN0KFZNJiwgU3RydWN0dXJlKik7CiAKLSAgICBK
U19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RW
aXNpdG9yJik7CisgICAgREVDTEFSRV9FWFBPUlRfVklTSVRfQ0hJTERSRU47CiB9OwogCiBpbmxp
bmUgSlNXcmFwcGVyT2JqZWN0OjpKU1dyYXBwZXJPYmplY3QoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01vZHVsZVByb2dy
YW1FeGVjdXRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9Nb2R1bGVQcm9ncmFtRXhlY3V0YWJsZS5jcHAJKHJldmlzaW9uIDI2ODA4NikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01vZHVsZVByb2dyYW1FeGVjdXRhYmxlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNzksNyArNzksOCBAQCBhdXRvIE1vZHVsZVByb2dyYW1FeGVjdXRh
YmxlOjplbnN1cmVUZW1wCiAgICAgcmV0dXJuIGVuc3VyZVRlbXBsYXRlT2JqZWN0TWFwSW1wbCht
X3RlbXBsYXRlT2JqZWN0TWFwKTsKIH0KIAotdm9pZCBNb2R1bGVQcm9ncmFtRXhlY3V0YWJsZTo6
dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxh
dGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGU6OnZpc2l0
Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBNb2R1
bGVQcm9ncmFtRXhlY3V0YWJsZSogdGhpc09iamVjdCA9IGpzQ2FzdDxNb2R1bGVQcm9ncmFtRXhl
Y3V0YWJsZSo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVj
dCwgaW5mbygpKTsKQEAgLTk0LDQgKzk1LDYgQEAgdm9pZCBNb2R1bGVQcm9ncmFtRXhlY3V0YWJs
ZTo6dmlzaXRDaGlsZAogICAgIH0KIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKE1vZHVsZVBy
b2dyYW1FeGVjdXRhYmxlKTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9Nb2R1bGVQcm9ncmFtRXhlY3V0YWJsZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01vZHVsZVByb2dyYW1FeGVjdXRhYmxl
LmgJKHJldmlzaW9uIDI2ODA4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01v
ZHVsZVByb2dyYW1FeGVjdXRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTc3LDcgKzc3LDcgQEAg
cHJpdmF0ZToKIAogICAgIE1vZHVsZVByb2dyYW1FeGVjdXRhYmxlKEpTR2xvYmFsT2JqZWN0Kiwg
Y29uc3QgU291cmNlQ29kZSYpOwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0Nl
bGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBX
cml0ZUJhcnJpZXI8VW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrPiBtX3VubGlua2VkTW9k
dWxlUHJvZ3JhbUNvZGVCbG9jazsKICAgICBXcml0ZUJhcnJpZXI8U3ltYm9sVGFibGU+IG1fbW9k
dWxlRW52aXJvbm1lbnRTeW1ib2xUYWJsZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1Byb2dyYW1FeGVjdXRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9Qcm9ncmFtRXhlY3V0YWJsZS5jcHAJKHJldmlzaW9uIDI2ODA4NikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb2dyYW1FeGVjdXRhYmxlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjA4LDcgKzIwOCw4IEBAIGF1dG8gUHJvZ3JhbUV4ZWN1dGFibGU6
OmVuc3VyZVRlbXBsYXRlT2IKICAgICByZXR1cm4gZW5zdXJlVGVtcGxhdGVPYmplY3RNYXBJbXBs
KG1fdGVtcGxhdGVPYmplY3RNYXApOwogfQogCi12b2lkIFByb2dyYW1FeGVjdXRhYmxlOjp2aXNp
dENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0
eXBlbmFtZSBWaXNpdG9yPgordm9pZCBQcm9ncmFtRXhlY3V0YWJsZTo6dmlzaXRDaGlsZHJlbklt
cGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFByb2dyYW1FeGVjdXRh
YmxlKiB0aGlzT2JqZWN0ID0ganNDYXN0PFByb2dyYW1FeGVjdXRhYmxlKj4oY2VsbCk7CiAgICAg
QVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtMjIyLDQg
KzIyMyw2IEBAIHZvaWQgUHJvZ3JhbUV4ZWN1dGFibGU6OnZpc2l0Q2hpbGRyZW4oSlMKICAgICB9
CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihQcm9ncmFtRXhlY3V0YWJsZSk7CisKIH0gLy8g
bmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvZ3Jh
bUV4ZWN1dGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9Qcm9ncmFtRXhlY3V0YWJsZS5oCShyZXZpc2lvbiAyNjgwODYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9Qcm9ncmFtRXhlY3V0YWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC04
MSw3ICs4MSw3IEBAIHByaXZhdGU6CiAKICAgICBQcm9ncmFtRXhlY3V0YWJsZShKU0dsb2JhbE9i
amVjdCosIGNvbnN0IFNvdXJjZUNvZGUmKTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwog
CiAgICAgV3JpdGVCYXJyaWVyPFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jaz4gbV91bmxpbmtlZFBy
b2dyYW1Db2RlQmxvY2s7CiAgICAgV3JpdGVCYXJyaWVyPEV4ZWN1dGFibGVUb0NvZGVCbG9ja0Vk
Z2U+IG1fcHJvZ3JhbUNvZGVCbG9jazsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1Byb3BlcnR5TWFwSGFzaFRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvUHJvcGVydHlNYXBIYXNoVGFibGUuaAkocmV2aXNpb24gMjY4MDg2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlNYXBIYXNoVGFibGUuaAko
d29ya2luZyBjb3B5KQpAQCAtMTMzLDcgKzEzMyw3IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBuZWVkc0Rlc3RydWN0aW9uID0gdHJ1ZTsKICAgICBzdGF0aWMgdm9pZCBk
ZXN0cm95KEpTQ2VsbCopOwotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwg
U2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgREVDTEFS
RV9FWFBPUlRfSU5GTzsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJv
cGVydHlUYWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvUHJvcGVydHlUYWJsZS5jcHAJKHJldmlzaW9uIDI2ODA4NikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5VGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTgs
NyArMTE4LDggQEAgdm9pZCBQcm9wZXJ0eVRhYmxlOjpmaW5pc2hDcmVhdGlvbihWTSYgdgogICAg
IHZtLmhlYXAucmVwb3J0RXh0cmFNZW1vcnlBbGxvY2F0ZWQoZGF0YVNpemUoKSk7CiB9CiAKLXZv
aWQgUHJvcGVydHlUYWJsZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9y
JiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgUHJvcGVydHlUYWJs
ZTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewog
ICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8UHJvcGVydHlUYWJsZSo+KGNlbGwpOwogICAg
IEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTEyNiw2
ICsxMjcsOCBAQCB2b2lkIFByb3BlcnR5VGFibGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsCiAgICAg
dmlzaXRvci5yZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQodGhpc09iamVjdC0+ZGF0YVNpemUoKSk7
CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihQcm9wZXJ0eVRhYmxlKTsKKwogdm9pZCBQcm9w
ZXJ0eVRhYmxlOjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKIHsKICAgICBzdGF0aWNfY2FzdDxQcm9w
ZXJ0eVRhYmxlKj4oY2VsbCktPlByb3BlcnR5VGFibGU6On5Qcm9wZXJ0eVRhYmxlKCk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm94eU9iamVjdC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJveHlPYmplY3QuY3BwCShyZXZp
c2lvbiAyNjgwODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm94eU9iamVj
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExODEsNyArMTE4MSw4IEBAIGJvb2wgUHJveHlPYmpl
Y3Q6OmlzUmV2b2tlZCgpIGNvbnN0CiAgICAgcmV0dXJuIGhhbmRsZXIoKS5pc051bGwoKTsKIH0K
IAotdm9pZCBQcm94eU9iamVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNp
dG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgUHJveHlPYmpl
Y3Q6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsK
ICAgICBQcm94eU9iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxQcm94eU9iamVjdCo+KGNlbGwp
OwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAg
LTExOTEsNCArMTE5Miw2IEBAIHZvaWQgUHJveHlPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiAKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2hhbmRsZXIpOwogfQogCitERUZJ
TkVfVklTSVRfQ0hJTERSRU4oUHJveHlPYmplY3QpOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3h5T2JqZWN0LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJveHlPYmplY3QuaAkocmV2aXNp
b24gMjY4MDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJveHlPYmplY3Qu
aAkod29ya2luZyBjb3B5KQpAQCAtOTYsNyArOTYsNyBAQCBwcml2YXRlOgogICAgIHN0YXRpYyBO
T19SRVRVUk5fRFVFX1RPX0NSQVNIIHZvaWQgZ2V0R2VuZXJpY1Byb3BlcnR5TmFtZXMoSlNPYmpl
Y3QqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2Rl
KTsKICAgICBzdGF0aWMgYm9vbCBzZXRQcm90b3R5cGUoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVj
dCosIEpTVmFsdWUgcHJvdG90eXBlLCBib29sIHNob3VsZFRocm93SWZDYW50U2V0KTsKICAgICBz
dGF0aWMgSlNWYWx1ZSBnZXRQcm90b3R5cGUoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCopOwot
ICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAg
ICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3RD
b21tb24oSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwogICAg
IGJvb2wgcGVyZm9ybUludGVybmFsTWV0aG9kR2V0T3duUHJvcGVydHkoSlNHbG9iYWxPYmplY3Qq
LCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvUHJveHlSZXZva2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1Byb3h5UmV2b2tlLmNwcAkocmV2aXNpb24gMjY4MDg2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJveHlSZXZva2UuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC02OSw3ICs2OSw4IEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihwZXJmb3JtUHJveHlS
ZXYKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCi12b2lk
IFByb3h5UmV2b2tlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZp
c2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBQcm94eVJldm9rZTo6dmlz
aXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFBy
b3h5UmV2b2tlKiB0aGlzT2JqZWN0ID0ganNDYXN0PFByb3h5UmV2b2tlKj4oY2VsbCk7CiAgICAg
QVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNzgsNCAr
NzksNiBAQCB2b2lkIFByb3h5UmV2b2tlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogCiAgICAgdmlz
aXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9wcm94eSk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElM
RFJFTihQcm94eVJldm9rZSk7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJveHlSZXZva2UuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm94eVJldm9rZS5oCShyZXZpc2lvbiAyNjgwODYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm94eVJldm9rZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC01Miw3ICs1Miw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICB2b2lkIGZpbmlzaENy
ZWF0aW9uKFZNJiwgUHJveHlPYmplY3QqKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVu
KEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKICAg
ICBKU1ZhbHVlIHByb3h5KCkgeyByZXR1cm4gbV9wcm94eS5nZXQoKTsgfQogICAgIHZvaWQgc2V0
UHJveHlUb051bGwoVk0mIHZtKSB7IHJldHVybiBtX3Byb3h5LnNldCh2bSwgdGhpcywganNOdWxs
KCkpOyB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE9iamVj
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhw
T2JqZWN0LmNwcAkocmV2aXNpb24gMjY4MDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvUmVnRXhwT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYsNyArNDYsOCBAQCB2
b2lkIFJlZ0V4cE9iamVjdDo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtCiAgICAgQVNTRVJUKHR5cGUo
KSA9PSBSZWdFeHBPYmplY3RUeXBlKTsKIH0KIAotdm9pZCBSZWdFeHBPYmplY3Q6OnZpc2l0Q2hp
bGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVu
YW1lIFZpc2l0b3I+Cit2b2lkIFJlZ0V4cE9iamVjdDo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxs
KiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFJlZ0V4cE9iamVjdCogdGhpc09iamVj
dCA9IGpzQ2FzdDxSZWdFeHBPYmplY3QqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lO
SEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC01NSw2ICs1Niw4IEBAIHZvaWQgUmVnRXhw
T2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCoKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2Jq
ZWN0LT5tX2xhc3RJbmRleCk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihSZWdFeHBPYmpl
Y3QpOworCiBib29sIFJlZ0V4cE9iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiBv
YmplY3QsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0
eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3Qt
PnZtKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBPYmplY3Qu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBPYmpl
Y3QuaAkocmV2aXNpb24gMjY4MDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
UmVnRXhwT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEzMyw3ICsxMzMsNyBAQCBwcml2YXRl
OgogICAgIEpTX0VYUE9SVF9QUklWQVRFIFJlZ0V4cE9iamVjdChWTSYsIFN0cnVjdHVyZSosIFJl
Z0V4cCopOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsK
IAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsK
KyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgYm9vbCBsYXN0SW5kZXhJc1dyaXRh
YmxlKCkgY29uc3QKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
Y29wZWRBcmd1bWVudHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1Njb3BlZEFyZ3VtZW50cy5jcHAJKHJldmlzaW9uIDI2ODA4NikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlZEFyZ3VtZW50cy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTk4LDcgKzk4LDggQEAgU2NvcGVkQXJndW1lbnRzKiBTY29wZWRBcmd1bWVudHM6OmNyZWF0
ZQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQgU2NvcGVkQXJndW1lbnRzOjp2aXNpdENo
aWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBl
bmFtZSBWaXNpdG9yPgordm9pZCBTY29wZWRBcmd1bWVudHM6OnZpc2l0Q2hpbGRyZW5JbXBsKEpT
Q2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBTY29wZWRBcmd1bWVudHMqIHRo
aXNPYmplY3QgPSBzdGF0aWNfY2FzdDxTY29wZWRBcmd1bWVudHMqPihjZWxsKTsKICAgICBBU1NF
UlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC0xMTUsNiArMTE2
LDggQEAgdm9pZCBTY29wZWRBcmd1bWVudHM6OnZpc2l0Q2hpbGRyZW4oSlNDZQogICAgIH0KIH0K
IAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKFNjb3BlZEFyZ3VtZW50cyk7CisKIFN0cnVjdHVyZSog
U2NvcGVkQXJndW1lbnRzOjpjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKIHsKICAgICByZXR1cm4gU3RydWN0dXJl
OjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhTY29wZWRBcmd1
bWVudHNUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TY29wZWRBcmd1bWVudHMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29wZWRBcmd1bWVudHMuaAkocmV2aXNpb24gMjY4MDg2
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVkQXJndW1lbnRzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTYzLDkgKzYzLDkgQEAgcHVibGljOgogICAgIAogICAgIC8vIENyZWF0
ZXMgYW4gYXJndW1lbnRzIG9iamVjdCBieSBjb3B5aW5nIHRoZSBhcmd1bWVudHMgZnJvbSBhIHdl
bGwtZGVmaW5lZCBzdGFjayBsb2NhdGlvbi4KICAgICBzdGF0aWMgU2NvcGVkQXJndW1lbnRzKiBj
cmVhdGVCeUNvcHlpbmdGcm9tKFZNJiwgU3RydWN0dXJlKiwgUmVnaXN0ZXIqIGFyZ3VtZW50c1N0
YXJ0LCB1bnNpZ25lZCB0b3RhbExlbmd0aCwgSlNGdW5jdGlvbiogY2FsbGVlLCBTY29wZWRBcmd1
bWVudHNUYWJsZSosIEpTTGV4aWNhbEVudmlyb25tZW50Kik7Ci0gICAgCi0gICAgc3RhdGljIHZv
aWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwotICAgIAorCisgICAgREVD
TEFSRV9WSVNJVF9DSElMRFJFTjsKKwogICAgIHVpbnQzMl90IGludGVybmFsTGVuZ3RoKCkgY29u
c3QKICAgICB7CiAgICAgICAgIHJldHVybiBtX3RvdGFsTGVuZ3RoOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU3BhcnNlQXJyYXlWYWx1ZU1hcC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3BhcnNlQXJyYXlWYWx1ZU1hcC5jcHAJ
KHJldmlzaW9uIDI2ODA4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NwYXJz
ZUFycmF5VmFsdWVNYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTAsNyArMjEwLDggQEAgSlNW
YWx1ZSBTcGFyc2VBcnJheUVudHJ5OjpnZXROb25TcGFyc2VNbwogICAgIHJldHVybiBCYXNlOjpn
ZXQoKTsKIH0KIAotdm9pZCBTcGFyc2VBcnJheVZhbHVlTWFwOjp2aXNpdENoaWxkcmVuKEpTQ2Vs
bCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
Pgordm9pZCBTcGFyc2VBcnJheVZhbHVlTWFwOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNl
bGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCogdGhpc09i
amVjdCA9IGpzQ2FzdDxTcGFyc2VBcnJheVZhbHVlTWFwKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dD
X09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtMjIzLDUgKzIyNCw3IEBA
IHZvaWQgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6dmlzaXRDaGlsZHJlbigKICAgICB2aXNpdG9yLnJl
cG9ydEV4dHJhTWVtb3J5VmlzaXRlZCh0aGlzT2JqZWN0LT5tX3JlcG9ydGVkQ2FwYWNpdHkgKiBz
aXplb2YoTWFwOjpLZXlWYWx1ZVBhaXJUeXBlKSk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJF
TihTcGFyc2VBcnJheVZhbHVlTWFwKTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NwYXJzZUFycmF5VmFsdWVNYXAuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TcGFyc2VBcnJheVZhbHVlTWFw
LmgJKHJldmlzaW9uIDI2ODA4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Nw
YXJzZUFycmF5VmFsdWVNYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMTE1LDcgKzExNSw3IEBAIHB1
YmxpYzoKICAgICAKICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBK
U0dsb2JhbE9iamVjdCosIEpTVmFsdWUgcHJvdG90eXBlKTsKIAotICAgIHN0YXRpYyB2b2lkIHZp
c2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NI
SUxEUkVOOwogCiAgICAgYm9vbCBzcGFyc2VNb2RlKCkKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TdGFja0ZyYW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TdGFja0ZyYW1lLmNwcAkocmV2aXNpb24gMjY4MDg2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RhY2tGcmFtZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE0Miw3ICsxNDIsOCBAQCBTdHJpbmcgU3RhY2tGcmFtZTo6dG9TdHJpbmcoVk0m
IHZtKSBjb25zCiAgICAgcmV0dXJuIHRyYWNlQnVpbGQudG9TdHJpbmcoKS5pbXBsKCk7CiB9CiAK
LXZvaWQgU3RhY2tGcmFtZTo6dmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3Rl
bXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFN0YWNrRnJhbWU6OnZpc2l0Q2hpbGRyZW5J
bXBsKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgaWYgKG1fY2FsbGVlKQogICAgICAgICB2aXNp
dG9yLmFwcGVuZChtX2NhbGxlZSk7CkBAIC0xNTAsNSArMTUxLDcgQEAgdm9pZCBTdGFja0ZyYW1l
Ojp2aXNpdENoaWxkcmVuKFNsb3RWaXNpdAogICAgICAgICB2aXNpdG9yLmFwcGVuZChtX2NvZGVC
bG9jayk7CiB9CiAKK0RFRklORV9JTlNUQU5DRV9WSVNJVF9DSElMRFJFTihTdGFja0ZyYW1lKTsK
KwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1N0YWNrRnJhbWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TdGFja0ZyYW1lLmgJKHJldmlzaW9uIDI2ODA4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1N0YWNrRnJhbWUuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBA
QAogCiAjaW5jbHVkZSAiSGVhcC5oIgogI2luY2x1ZGUgIlZNLmgiCisjaW5jbHVkZSAiU2xvdFZp
c2l0b3JNYWNyb3MuaCIKICNpbmNsdWRlICJXYXNtSW5kZXhPck5hbWUuaCIKICNpbmNsdWRlICJX
cml0ZUJhcnJpZXIuaCIKICNpbmNsdWRlIDxsaW1pdHMuaD4KQEAgLTM1LDcgKzM2LDYgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAKIGNsYXNzIENvZGVCbG9jazsKIGNsYXNzIEpTT2JqZWN0OwotY2xhc3Mg
U2xvdFZpc2l0b3I7CiAKIGNsYXNzIFN0YWNrRnJhbWUgewogcHVibGljOgpAQCAtNTgsNyArNTgs
NyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX2J5dGVjb2RlSW5kZXg7CiAgICAgfQogICAg
IAotICAgIHZvaWQgdmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfSU5T
VEFOQ0VfVklTSVRfQ0hJTERSRU47CiAgICAgYm9vbCBpc01hcmtlZChWTSYgdm0pIGNvbnN0IHsg
cmV0dXJuICghbV9jYWxsZWUgfHwgdm0uaGVhcC5pc01hcmtlZChtX2NhbGxlZS5nZXQoKSkpICYm
ICghbV9jb2RlQmxvY2sgfHwgdm0uaGVhcC5pc01hcmtlZChtX2NvZGVCbG9jay5nZXQoKSkpOyB9
CiAKIHByaXZhdGU6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1
cmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVj
dHVyZS5jcHAJKHJldmlzaW9uIDI2ODA4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1N0cnVjdHVyZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNzksNyArMTI3OSw4IEBAIHZv
aWQgU3RydWN0dXJlOjpkaWRUcmFuc2l0aW9uRnJvbVRoaXNTdHIKICAgICAgICAgbV90cmFuc2l0
aW9uV2F0Y2hwb2ludFNldC5maXJlQWxsKHZtKCksIFN0cnVjdHVyZUZpcmVEZXRhaWwodGhpcykp
OwogfQogCi12b2lkIFN0cnVjdHVyZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgU3RydWN0
dXJlOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7
CiAgICAgU3RydWN0dXJlKiB0aGlzT2JqZWN0ID0ganNDYXN0PFN0cnVjdHVyZSo+KGNlbGwpOwog
ICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTEz
MDcsNiArMTMwOCw4IEBAIHZvaWQgU3RydWN0dXJlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2UK
ICAgICAgICAgdGhpc09iamVjdC0+bV9wcm9wZXJ0eVRhYmxlVW5zYWZlLmNsZWFyKCk7CiB9CiAK
K0RFRklORV9WSVNJVF9DSElMRFJFTihTdHJ1Y3R1cmUpOworCiBib29sIFN0cnVjdHVyZTo6aXND
aGVhcER1cmluZ0dDKFZNJiB2bSkKIHsKICAgICAvLyBGSVhNRTogV2UgY291bGQgbWFrZSB0aGlz
IGV2ZW4gc2FmZXIgYnkgcmV0dXJuaW5nIGZhbHNlIGlmIHRoaXMgc3RydWN0dXJlJ3MgcHJvcGVy
dHkgdGFibGUKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5o
CShyZXZpc2lvbiAyNjgwODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1
Y3R1cmUuaAkod29ya2luZyBjb3B5KQpAQCAtMzA3LDcgKzMwNyw3IEBAIHB1YmxpYzoKICAgICBK
U1ZhbHVlIHByb3RvdHlwZUZvckxvb2t1cChKU0dsb2JhbE9iamVjdCosIEpTQ2VsbCogYmFzZSkg
Y29uc3Q7CiAgICAgU3RydWN0dXJlQ2hhaW4qIHByb3RvdHlwZUNoYWluKFZNJiwgSlNHbG9iYWxP
YmplY3QqLCBKU09iamVjdCogYmFzZSkgY29uc3Q7CiAgICAgU3RydWN0dXJlQ2hhaW4qIHByb3Rv
dHlwZUNoYWluKEpTR2xvYmFsT2JqZWN0KiwgSlNPYmplY3QqIGJhc2UpIGNvbnN0OwotICAgIHN0
YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNM
QVJFX1ZJU0lUX0NISUxEUkVOOwogICAgIAogICAgIC8vIEEgU3RydWN0dXJlIGlzIGNoZWFwIHRv
IG1hcmsgZHVyaW5nIEdDIGlmIGRvaW5nIHNvIHdvdWxkIG9ubHkgYWRkIGEgc21hbGwgYW5kIGJv
dW5kZWQgYW1vdW50CiAgICAgLy8gdG8gb3VyIGhlYXAgZm9vdHByaW50LiBGb3IgZXhhbXBsZSwg
aWYgdGhlIHN0cnVjdHVyZSByZWZlcnMgdG8gYSBnbG9iYWwgb2JqZWN0IHRoYXQgaXMgbm90Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVDaGFpbi5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlQ2hhaW4u
Y3BwCShyZXZpc2lvbiAyNjgwODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
dHJ1Y3R1cmVDaGFpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY2LDcgKzY2LDggQEAgdm9pZCBT
dHJ1Y3R1cmVDaGFpbjo6ZmluaXNoQ3JlYXRpb24oVk0mIAogICAgIH0KIH0KIAotdm9pZCBTdHJ1
Y3R1cmVDaGFpbjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNp
dG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgU3RydWN0dXJlQ2hhaW46OnZp
c2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBT
dHJ1Y3R1cmVDaGFpbiogdGhpc09iamVjdCA9IGpzQ2FzdDxTdHJ1Y3R1cmVDaGFpbio+KGNlbGwp
OwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAg
LTgwLDQgKzgxLDYgQEAgdm9pZCBTdHJ1Y3R1cmVDaGFpbjo6dmlzaXRDaGlsZHJlbihKU0NlbAog
ICAgIH0KIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKFN0cnVjdHVyZUNoYWluKTsKKwogfSAv
LyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1
Y3R1cmVDaGFpbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1N0cnVjdHVyZUNoYWluLmgJKHJldmlzaW9uIDI2ODA4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1N0cnVjdHVyZUNoYWluLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxLDcgKzUx
LDcgQEAgcHVibGljOgogCiAgICAgc3RhdGljIFN0cnVjdHVyZUNoYWluKiBjcmVhdGUoVk0mLCBK
U09iamVjdCopOwogICAgIFN0cnVjdHVyZUlEKiBoZWFkKCkgeyByZXR1cm4gbV92ZWN0b3IuZ2V0
KCk7IH0KLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9y
Jik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIHN0YXRpYyBTdHJ1Y3R1cmUq
IGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpT
VmFsdWUgcHJvdG90eXBlKQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1N0cnVjdHVyZVJhcmVEYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TdHJ1Y3R1cmVSYXJlRGF0YS5jcHAJKHJldmlzaW9uIDI2ODA4NikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZVJhcmVEYXRhLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNjcsNyArNjcsOCBAQCBTdHJ1Y3R1cmVSYXJlRGF0YTo6U3RydWN0dXJl
UmFyZURhdGEoVk0mCiAgICAgICAgIG1fcHJldmlvdXMuc2V0KHZtLCB0aGlzLCBwcmV2aW91cyk7
CiB9CiAKLXZvaWQgU3RydWN0dXJlUmFyZURhdGE6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxs
LCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lk
IFN0cnVjdHVyZVJhcmVEYXRhOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0
b3ImIHZpc2l0b3IpCiB7CiAgICAgU3RydWN0dXJlUmFyZURhdGEqIHRoaXNPYmplY3QgPSBqc0Nh
c3Q8U3RydWN0dXJlUmFyZURhdGEqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVS
SVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC04Niw2ICs4Nyw4IEBAIHZvaWQgU3RydWN0dXJl
UmFyZURhdGE6OnZpc2l0Q2hpbGRyZW4oSlMKICAgICB9CiB9CiAKK0RFRklORV9WSVNJVF9DSElM
RFJFTihTdHJ1Y3R1cmVSYXJlRGF0YSk7CisKIC8vIC0tLS0tLS0tLS0tIENhY2hlZCBzcGVjaWFs
IHByb3BlcnRpZXMgaGVscGVyIHdhdGNocG9pbnQgY2xhc3NlcyAtLS0tLS0tLS0tLQogCiBjbGFz
cyBDYWNoZWRTcGVjaWFsUHJvcGVydHlBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNo
cG9pbnQgZmluYWwgOiBwdWJsaWMgQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBv
aW50QmFzZSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVS
YXJlRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0
cnVjdHVyZVJhcmVEYXRhLmgJKHJldmlzaW9uIDI2ODA4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1N0cnVjdHVyZVJhcmVEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTY4LDcg
KzY4LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0Rlc3RydWN0
aW9uID0gdHJ1ZTsKICAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwogCi0gICAgc3Rh
dGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xB
UkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1
cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUgcHJvdG90eXBlKTsKIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFibGUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJvbFRhYmxlLmNwcAkocmV2aXNpb24g
MjY4MDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFibGUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC05Miw3ICs5Miw4IEBAIHZvaWQgU3ltYm9sVGFibGU6OmZpbmlz
aENyZWF0aW9uKFZNJiB2bSkKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CiB9CiAKLXZv
aWQgU3ltYm9sVGFibGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiB0aGlzQ2VsbCwgU2xvdFZpc2l0
b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBTeW1ib2xUYWJs
ZTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiB0aGlzQ2VsbCwgVmlzaXRvciYgdmlzaXRvcikK
IHsKICAgICBTeW1ib2xUYWJsZSogdGhpc1N5bWJvbFRhYmxlID0ganNDYXN0PFN5bWJvbFRhYmxl
Kj4odGhpc0NlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc1N5bWJvbFRh
YmxlLCBpbmZvKCkpOwpAQCAtMTA4LDYgKzEwOSw4IEBAIHZvaWQgU3ltYm9sVGFibGU6OnZpc2l0
Q2hpbGRyZW4oSlNDZWxsKiAKICAgICB0aGlzU3ltYm9sVGFibGUtPm1fbG9jYWxUb0VudHJ5ID0g
bnVsbHB0cjsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKFN5bWJvbFRhYmxlKTsKKwogY29u
c3QgU3ltYm9sVGFibGU6OkxvY2FsVG9FbnRyeVZlYyYgU3ltYm9sVGFibGU6OmxvY2FsVG9FbnRy
eShjb25zdCBDb25jdXJyZW50SlNMb2NrZXImKQogewogICAgIGlmIChVTkxJS0VMWSghbV9sb2Nh
bFRvRW50cnkpKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TeW1ib2xU
YWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJv
bFRhYmxlLmgJKHJldmlzaW9uIDI2ODA4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1N5bWJvbFRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTczMyw3ICs3MzMsNyBAQCBwdWJs
aWM6CiAgICAgICAgIG1fc2luZ2xldG9uLm5vdGlmeVdyaXRlKHZtLCB0aGlzLCBzY29wZSwgcmVh
c29uKTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNs
b3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIERFQ0xBUkVf
RVhQT1JUX0lORk87CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtN
YXBJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9X
ZWFrTWFwSW1wbC5jcHAJKHJldmlzaW9uIDI2ODA4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1dlYWtNYXBJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksOCArMzksOSBA
QCB2b2lkIFdlYWtNYXBJbXBsPFdlYWtNYXBCdWNrZXQ+OjpkZXN0cm95CiAgICAgc3RhdGljX2Nh
c3Q8V2Vha01hcEltcGwqPihjZWxsKS0+fldlYWtNYXBJbXBsKCk7CiB9CiAKLXRlbXBsYXRlIDx0
eXBlbmFtZSBXZWFrTWFwQnVja2V0Pgotdm9pZCBXZWFrTWFwSW1wbDxXZWFrTWFwQnVja2V0Pjo6
dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxh
dGU8dHlwZW5hbWUgV2Vha01hcEJ1Y2tldD4KK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2
b2lkIFdlYWtNYXBJbXBsPFdlYWtNYXBCdWNrZXQ+Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwq
IGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgV2Vha01hcEltcGwqIHRoaXNPYmplY3Qg
PSBqc0Nhc3Q8V2Vha01hcEltcGwqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVS
SVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC00OCw2ICs0OSw4IEBAIHZvaWQgV2Vha01hcElt
cGw8V2Vha01hcEJ1Y2tldD46OnZpc2l0Q2gKICAgICB2aXNpdG9yLnJlcG9ydEV4dHJhTWVtb3J5
VmlzaXRlZCh0aGlzT2JqZWN0LT5tX2NhcGFjaXR5ICogc2l6ZW9mKFdlYWtNYXBCdWNrZXQpKTsK
IH0KIAorREVGSU5FX1RFTVBMQVRFX1ZJU0lUX0NISUxEUkVOKHRlbXBsYXRlPHR5cGVuYW1lIFdl
YWtNYXBCdWNrZXQ+LCBXZWFrTWFwSW1wbDxXZWFrTWFwQnVja2V0Pik7CisKIHRlbXBsYXRlIDx0
eXBlbmFtZSBXZWFrTWFwQnVja2V0Pgogc2l6ZV90IFdlYWtNYXBJbXBsPFdlYWtNYXBCdWNrZXQ+
Ojplc3RpbWF0ZWRTaXplKEpTQ2VsbCogY2VsbCwgVk0mIHZtKQogewpAQCAtNTYsMTMgKzU5LDE3
IEBAIHNpemVfdCBXZWFrTWFwSW1wbDxXZWFrTWFwQnVja2V0Pjo6ZXN0aW0KIH0KIAogdGVtcGxh
dGUgPD4KLXZvaWQgV2Vha01hcEltcGw8V2Vha01hcEJ1Y2tldDxXZWFrTWFwQnVja2V0RGF0YUtl
eT4+Ojp2aXNpdE91dHB1dENvbnN0cmFpbnRzKEpTQ2VsbCosIFNsb3RWaXNpdG9yJikKK3RlbXBs
YXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFdlYWtNYXBJbXBsPFdlYWtNYXBCdWNrZXQ8V2Vh
a01hcEJ1Y2tldERhdGFLZXk+Pjo6dmlzaXRPdXRwdXRDb25zdHJhaW50c0ltcGwoSlNDZWxsKiwg
VmlzaXRvciYpCiB7CiAgICAgLy8gT25seSBKU1dlYWtNYXAgbmVlZHMgdG8gaGFydmVzdCB2YWx1
ZSByZWZlcmVuY2VzCiB9CiAKK0RFRklORV9URU1QTEFURV9WSVNJVF9PVVRQVVRfQ09OU1RSQUlO
VFModGVtcGxhdGU8PiwgV2Vha01hcEltcGw8V2Vha01hcEJ1Y2tldDxXZWFrTWFwQnVja2V0RGF0
YUtleT4+KTsKKwogdGVtcGxhdGUgPD4KLXZvaWQgV2Vha01hcEltcGw8V2Vha01hcEJ1Y2tldDxX
ZWFrTWFwQnVja2V0RGF0YUtleVZhbHVlPj46OnZpc2l0T3V0cHV0Q29uc3RyYWludHMoSlNDZWxs
KiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+
Cit2b2lkIFdlYWtNYXBJbXBsPFdlYWtNYXBCdWNrZXQ8V2Vha01hcEJ1Y2tldERhdGFLZXlWYWx1
ZT4+Ojp2aXNpdE91dHB1dENvbnN0cmFpbnRzSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZp
c2l0b3IpCiB7CiAgICAgVk0mIHZtID0gdmlzaXRvci52bSgpOwogICAgIGF1dG8qIHRoaXNPYmpl
Y3QgPSBqc0Nhc3Q8V2Vha01hcEltcGwqPihjZWxsKTsKQEAgLTc4LDYgKzg1LDggQEAgdm9pZCBX
ZWFrTWFwSW1wbDxXZWFrTWFwQnVja2V0PFdlYWtNYXBCdQogICAgIH0KIH0KIAorREVGSU5FX1RF
TVBMQVRFX1ZJU0lUX09VVFBVVF9DT05TVFJBSU5UUyh0ZW1wbGF0ZTw+LCBXZWFrTWFwSW1wbDxX
ZWFrTWFwQnVja2V0PFdlYWtNYXBCdWNrZXREYXRhS2V5VmFsdWU+Pik7CisKIHRlbXBsYXRlIDx0
eXBlbmFtZSBXZWFrTWFwQnVja2V0PgogdGVtcGxhdGU8dHlwZW5hbWUgQXBwZW5kZXI+CiB2b2lk
IFdlYWtNYXBJbXBsPFdlYWtNYXBCdWNrZXQ+Ojp0YWtlU25hcHNob3RJbnRlcm5hbCh1bnNpZ25l
ZCBsaW1pdCwgQXBwZW5kZXIgYXBwZW5kZXIpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9XZWFrTWFwSW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1dlYWtNYXBJbXBsLmgJKHJldmlzaW9uIDI2ODA4NikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1dlYWtNYXBJbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTIwMiw3
ICsyMDIsOCBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzRGVzdHJ1
Y3Rpb24gPSB0cnVlOwogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CiAKLSAgICBz
dGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVD
TEFSRV9URU1QTEFURV9WSVNJVF9DSElMRFJFTjsKKyAgICBERUNMQVJFX1RFTVBMQVRFX1ZJU0lU
X09VVFBVVF9DT05TVFJBSU5UUzsKIAogICAgIHN0YXRpYyBzaXplX3QgZXN0aW1hdGVkU2l6ZShK
U0NlbGwqLCBWTSYpOwogCkBAIC0zMTEsNyArMzEyLDYgQEAgcHVibGljOgogICAgICAgICByZXR1
cm4gdm0ud2Vha1NldFNwYWNlPG1vZGU+KCk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgdmlz
aXRPdXRwdXRDb25zdHJhaW50cyhKU0NlbGwqLCBTbG90VmlzaXRvciYpOwogICAgIHZvaWQgZmlu
YWxpemVVbmNvbmRpdGlvbmFsbHkoVk0mKTsKIAogcHJpdmF0ZToKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS90b29scy9KU0RvbGxhclZNLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvdG9vbHMvSlNEb2xsYXJWTS5jcHAJKHJldmlzaW9uIDI2ODA4NikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9KU0RvbGxhclZNLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjIyLDE0ICsyMjIsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZN
JiwgUm9vdCopOwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGws
IFNsb3RWaXNpdG9yJiB2aXNpdG9yKQotICAgIHsKLSAgICAgICAgRG9sbGFyVk1Bc3NlcnRTY29w
ZSBhc3NlcnRTY29wZTsKLSAgICAgICAgRWxlbWVudCogdGhpc09iamVjdCA9IGpzQ2FzdDxFbGVt
ZW50Kj4oY2VsbCk7Ci0gICAgICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVj
dCwgaW5mbygpKTsKLSAgICAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNp
dG9yKTsKLSAgICAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9yb290KTsKLSAgICB9
CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIHN0YXRpYyBFbGVtZW50SGFuZGxl
T3duZXIqIGhhbmRsZU93bmVyKCk7CiAKQEAgLTI0NSw2ICsyMzgsMTggQEAgcHJpdmF0ZToKICAg
ICBXcml0ZUJhcnJpZXI8Um9vdD4gbV9yb290OwogfTsKIAordGVtcGxhdGU8dHlwZW5hbWUgVmlz
aXRvcj4KK3ZvaWQgRWxlbWVudDo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNp
dG9yJiB2aXNpdG9yKQoreworICAgIERvbGxhclZNQXNzZXJ0U2NvcGUgYXNzZXJ0U2NvcGU7Cisg
ICAgRWxlbWVudCogdGhpc09iamVjdCA9IGpzQ2FzdDxFbGVtZW50Kj4oY2VsbCk7CisgICAgQVNT
RVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOworICAgIEJhc2U6OnZp
c2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CisgICAgdmlzaXRvci5hcHBlbmQodGhp
c09iamVjdC0+bV9yb290KTsKK30KKworREVGSU5FX1ZJU0lUX0NISUxEUkVOKEVsZW1lbnQpOwor
CiBjbGFzcyBFbGVtZW50SGFuZGxlT3duZXIgZmluYWwgOiBwdWJsaWMgV2Vha0hhbmRsZU93bmVy
IHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKQEAgLTMwMiwxOCArMzA3
LDIzIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9i
YWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3Mp
LCBpbmZvKCkpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiB0aGlzT2JqZWN0LCBTbG90VmlzaXRvciYgdmlzaXRvcikKLSAgICB7Ci0gICAgICAgIERvbGxh
clZNQXNzZXJ0U2NvcGUgYXNzZXJ0U2NvcGU7Ci0gICAgICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5I
RVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKLSAgICAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0
aGlzT2JqZWN0LCB2aXNpdG9yKTsKLSAgICAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHRoaXNP
YmplY3QpOwotICAgIH0KKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiBwcml2YXRlOgog
ICAgIFdlYWs8RWxlbWVudD4gbV9lbGVtZW50OwogfTsKIAordGVtcGxhdGU8dHlwZW5hbWUgVmlz
aXRvcj4KK3ZvaWQgUm9vdDo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiB0aGlzT2JqZWN0LCBW
aXNpdG9yJiB2aXNpdG9yKQoreworICAgIERvbGxhclZNQXNzZXJ0U2NvcGUgYXNzZXJ0U2NvcGU7
CisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOworICAg
IEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CisgICAgdmlzaXRvci5h
ZGRPcGFxdWVSb290KHRoaXNPYmplY3QpOworfQorCitERUZJTkVfVklTSVRfQ0hJTERSRU4oUm9v
dCk7CisKIGNsYXNzIFNpbXBsZU9iamVjdCA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKIHB1
YmxpYzoKICAgICBTaW1wbGVPYmplY3QoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKQEAg
LTMzOCwxNCArMzQ4LDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gc2ltcGxlT2JqZWN0Owog
ICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90
VmlzaXRvciYgdmlzaXRvcikKLSAgICB7Ci0gICAgICAgIERvbGxhclZNQXNzZXJ0U2NvcGUgYXNz
ZXJ0U2NvcGU7Ci0gICAgICAgIFNpbXBsZU9iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxTaW1w
bGVPYmplY3QqPihjZWxsKTsKLSAgICAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlz
T2JqZWN0LCBpbmZvKCkpOwotICAgICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3Qs
IHZpc2l0b3IpOwotICAgICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2hpZGRlblZh
bHVlKTsKLSAgICB9CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIHN0YXRpYyBT
dHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQogICAgIHsKQEAgLTM3OCw2ICszODEsMTggQEAgcHJp
dmF0ZToKICAgICBXcml0ZUJhcnJpZXI8SlNDOjpVbmtub3duPiBtX2hpZGRlblZhbHVlOwogfTsK
IAordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgU2ltcGxlT2JqZWN0Ojp2aXNpdENo
aWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgRG9sbGFy
Vk1Bc3NlcnRTY29wZSBhc3NlcnRTY29wZTsKKyAgICBTaW1wbGVPYmplY3QqIHRoaXNPYmplY3Qg
PSBqc0Nhc3Q8U2ltcGxlT2JqZWN0Kj4oY2VsbCk7CisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhF
UklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOworICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09i
amVjdCwgdmlzaXRvcik7CisgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9oaWRkZW5W
YWx1ZSk7Cit9CisKK0RFRklORV9WSVNJVF9DSElMRFJFTihTaW1wbGVPYmplY3QpOworCiBjbGFz
cyBJbXB1cmVHZXR0ZXIgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7CiBwdWJsaWM6CiAgICAg
SW1wdXJlR2V0dGVyKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCkBAIC00MzQsMTQgKzQ0
OSw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIEJhc2U6OmdldE93blByb3BlcnR5U2xvdChv
YmplY3QsIGdsb2JhbE9iamVjdCwgbmFtZSwgc2xvdCk7CiAgICAgfQogCi0gICAgc3RhdGljIHZv
aWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQotICAg
IHsKLSAgICAgICAgRG9sbGFyVk1Bc3NlcnRTY29wZSBhc3NlcnRTY29wZTsKLSAgICAgICAgQVNT
RVJUX0dDX09CSkVDVF9JTkhFUklUUyhjZWxsLCBpbmZvKCkpOwotICAgICAgICBCYXNlOjp2aXNp
dENoaWxkcmVuKGNlbGwsIHZpc2l0b3IpOwotICAgICAgICBJbXB1cmVHZXR0ZXIqIHRoaXNPYmpl
Y3QgPSBqc0Nhc3Q8SW1wdXJlR2V0dGVyKj4oY2VsbCk7Ci0gICAgICAgIHZpc2l0b3IuYXBwZW5k
KHRoaXNPYmplY3QtPm1fZGVsZWdhdGUpOwotICAgIH0KKyAgICBERUNMQVJFX1ZJU0lUX0NISUxE
UkVOOwogCiAgICAgdm9pZCBzZXREZWxlZ2F0ZShWTSYgdm0sIEpTT2JqZWN0KiBkZWxlZ2F0ZSkK
ICAgICB7CkBAIC00NTIsNiArNDYwLDE4IEBAIHByaXZhdGU6CiAgICAgV3JpdGVCYXJyaWVyPEpT
T2JqZWN0PiBtX2RlbGVnYXRlOwogfTsKIAordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3Zv
aWQgSW1wdXJlR2V0dGVyOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3Im
IHZpc2l0b3IpCit7CisgICAgRG9sbGFyVk1Bc3NlcnRTY29wZSBhc3NlcnRTY29wZTsKKyAgICBB
U1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNlbGwsIGluZm8oKSk7CisgICAgQmFzZTo6dmlzaXRD
aGlsZHJlbihjZWxsLCB2aXNpdG9yKTsKKyAgICBJbXB1cmVHZXR0ZXIqIHRoaXNPYmplY3QgPSBq
c0Nhc3Q8SW1wdXJlR2V0dGVyKj4oY2VsbCk7CisgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVj
dC0+bV9kZWxlZ2F0ZSk7Cit9CisKK0RFRklORV9WSVNJVF9DSElMRFJFTihJbXB1cmVHZXR0ZXIp
OworCiBzdGF0aWMgSlNDX0RFQ0xBUkVfQ1VTVE9NX0dFVFRFUihjdXN0b21HZXR0ZXJWYWx1ZUdl
dHRlcik7CiBzdGF0aWMgSlNDX0RFQ0xBUkVfQ1VTVE9NX0dFVFRFUihjdXN0b21HZXR0ZXJBY2Vz
c29yR2V0dGVyKTsKIApAQCAtMzUzNiwxMyArMzU1NiwxNiBAQCB2b2lkIEpTRG9sbGFyVk06OmFk
ZENvbnN0cnVjdGlibGVGdW5jdGlvCiAgICAgcHV0RGlyZWN0KHZtLCBpZGVudGlmaWVyLCBKU0Z1
bmN0aW9uOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgYXJndW1lbnRzLCBpZGVudGlmaWVyLnN0
cmluZygpLCBmdW5jdGlvbiwgTm9JbnRyaW5zaWMsIGZ1bmN0aW9uKSwganNEb2xsYXJWTVByb3Bl
cnR5QXR0cmlidXRlcyk7CiB9CiAKLXZvaWQgSlNEb2xsYXJWTTo6dmlzaXRDaGlsZHJlbihKU0Nl
bGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRv
cj4KK3ZvaWQgSlNEb2xsYXJWTTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNp
dG9yJiB2aXNpdG9yKQogewogICAgIEpTRG9sbGFyVk0qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNE
b2xsYXJWTSo+KGNlbGwpOwogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlz
aXRvcik7CiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9vYmplY3REb2luZ1NpZGVF
ZmZlY3RQdXRXaXRob3V0Q29ycmVjdFNsb3RTdGF0dXNTdHJ1Y3R1cmUpOwogfQogCitERUZJTkVf
VklTSVRfQ0hJTERSRU4oSlNEb2xsYXJWTSk7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiBJR05P
UkVfV0FSTklOR1NfRU5ECkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvSlNEb2xs
YXJWTS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9KU0RvbGxh
clZNLmgJKHJldmlzaW9uIDI2ODA4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9K
U0RvbGxhclZNLmgJKHdvcmtpbmcgY29weSkKQEAgLTc0LDcgKzc0LDcgQEAgcHJpdmF0ZToKICAg
ICB2b2lkIGFkZEZ1bmN0aW9uKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBjb25zdCBjaGFyKiBuYW1l
LCBOYXRpdmVGdW5jdGlvbiwgdW5zaWduZWQgYXJndW1lbnRzKTsKICAgICB2b2lkIGFkZENvbnN0
cnVjdGlibGVGdW5jdGlvbihWTSYsIEpTR2xvYmFsT2JqZWN0KiwgY29uc3QgY2hhciogbmFtZSwg
TmF0aXZlRnVuY3Rpb24sIHVuc2lnbmVkIGFyZ3VtZW50cyk7CiAKLSAgICBzdGF0aWMgdm9pZCB2
aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9D
SElMRFJFTjsKIAogICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1fb2JqZWN0RG9pbmdTaWRl
RWZmZWN0UHV0V2l0aG91dENvcnJlY3RTbG90U3RhdHVzU3RydWN0dXJlOwogfTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTVG9XYXNtSUNDYWxsZWUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTVG9XYXNtSUNDYWxsZWUuY3Bw
CShyZXZpc2lvbiAyNjgwODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1Rv
V2FzbUlDQ2FsbGVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDksNyArNDksOCBAQCBTdHJ1Y3R1
cmUqIEpTVG9XYXNtSUNDYWxsZWU6OmNyZWF0ZVN0cnVjCiAgICAgcmV0dXJuIFN0cnVjdHVyZTo6
Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oSlNDYWxsZWVUeXBl
LCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CiB9CiAKLXZvaWQgSlNUb1dhc21JQ0NhbGxlZTo6
dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxh
dGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNUb1dhc21JQ0NhbGxlZTo6dmlzaXRDaGlsZHJl
bkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTVG9XYXNtSUND
YWxsZWUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUb1dhc21JQ0NhbGxlZSo+KGNlbGwpOwogICAg
IEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTU4LDYg
KzU5LDggQEAgdm9pZCBKU1RvV2FzbUlDQ2FsbGVlOjp2aXNpdENoaWxkcmVuKEpTQwogICAgIHZp
c2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fZnVuY3Rpb24pOwogfQogCitERUZJTkVfVklTSVRf
Q0hJTERSRU4oSlNUb1dhc21JQ0NhbGxlZSk7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5k
aWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vanMvSlNUb1dhc21JQ0NhbGxlZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL0pTVG9XYXNtSUNDYWxsZWUuaAkocmV2aXNpb24gMjY4MDg2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNUb1dhc21JQ0NhbGxlZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC01Niw3ICs1Niw3IEBAIHByaXZhdGU6CiAgICAgSlNUb1dhc21JQ0NhbGxlZShWTSYg
dm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlKQog
ICAgICAgICA6IEJhc2Uodm0sIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKQogICAgIHsgfQotICAg
IHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBE
RUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgV3JpdGVCYXJyaWVyPFdlYkFzc2VtYmx5RnVu
Y3Rpb24+IG1fZnVuY3Rpb247CiB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
anMvSlNXZWJBc3NlbWJseUNvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9jay5jcHAJKHJldmlzaW9uIDI2
ODA4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2Rl
QmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Miw3ICs4Miw4IEBAIHZvaWQgSlNXZWJBc3Nl
bWJseUNvZGVCbG9jazo6Y2xlYXJKU0NhbGwKICAgICAgICAgKCppdGVyKS0+dW5saW5rKHZtKTsK
IH0KIAotdm9pZCBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCog
Y2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgor
dm9pZCBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNl
bGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNXZWJBc3NlbWJseUNvZGVCbG9jayogdGhp
c09iamVjdCA9IGpzQ2FzdDxKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKj4oY2VsbCk7CiAgICAgQVNT
RVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtOTAsNiArOTEs
OCBAQCB2b2lkIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6OnZpc2l0Q2hpbGRyCiAgICAgQmFzZTo6
dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NI
SUxEUkVOKEpTV2ViQXNzZW1ibHlDb2RlQmxvY2spOworCiB2b2lkIEpTV2ViQXNzZW1ibHlDb2Rl
QmxvY2s6OmZpbmFsaXplVW5jb25kaXRpb25hbGx5KFZNJiB2bSkKIHsKICAgICBmb3IgKGF1dG8g
aXRlciA9IG1fY2FsbExpbmtJbmZvcy5iZWdpbigpOyAhIWl0ZXI7ICsraXRlcikKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29k
ZUJsb2NrLmgJKHJldmlzaW9uIDI2ODA4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtODYsNyArODYs
NyBAQCBwcml2YXRlOgogICAgIERFQ0xBUkVfRVhQT1JUX0lORk87CiAgICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOwogICAgIHN0YXRpYyB2b2lkIGRlc3Ry
b3koSlNDZWxsKik7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90
VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBSZWY8V2FzbTo6
Q29kZUJsb2NrPiBtX2NvZGVCbG9jazsKICAgICBWZWN0b3I8TWFjcm9Bc3NlbWJsZXJDb2RlUmVm
PFdhc21FbnRyeVB0clRhZz4+IG1fd2FzbVRvSlNFeGl0U3R1YnM7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5R2xvYmFsLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5R2xvYmFsLmNwcAko
cmV2aXNpb24gMjY4MDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJB
c3NlbWJseUdsb2JhbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcxLDcgKzcxLDggQEAgdm9pZCBK
U1dlYkFzc2VtYmx5R2xvYmFsOjpkZXN0cm95KEpTQ2VsbAogICAgIHN0YXRpY19jYXN0PEpTV2Vi
QXNzZW1ibHlHbG9iYWwqPihjZWxsKS0+SlNXZWJBc3NlbWJseUdsb2JhbDo6fkpTV2ViQXNzZW1i
bHlHbG9iYWwoKTsKIH0KIAotdm9pZCBKU1dlYkFzc2VtYmx5R2xvYmFsOjp2aXNpdENoaWxkcmVu
KEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPgordm9pZCBKU1dlYkFzc2VtYmx5R2xvYmFsOjp2aXNpdENoaWxkcmVuSW1wbChKU0Nl
bGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNXZWJBc3NlbWJseUdsb2JhbCog
dGhpc09iamVjdCA9IGpzQ2FzdDxKU1dlYkFzc2VtYmx5R2xvYmFsKj4oY2VsbCk7CiAgICAgQVNT
RVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtODAsNiArODEs
OCBAQCB2b2lkIEpTV2ViQXNzZW1ibHlHbG9iYWw6OnZpc2l0Q2hpbGRyZW4oCiAgICAgdGhpc09i
amVjdC0+Z2xvYmFsKCktPnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOwogfQogCitERUZJTkVfVklT
SVRfQ0hJTERSRU4oSlNXZWJBc3NlbWJseUdsb2JhbCk7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwog
CiAjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUdsb2JhbC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlHbG9iYWwuaAkocmV2aXNpb24gMjY4
MDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUdsb2Jh
bC5oCSh3b3JraW5nIGNvcHkpCkBAIC01OSw3ICs1OSw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAg
ICAgSlNXZWJBc3NlbWJseUdsb2JhbChWTSYsIFN0cnVjdHVyZSosIFJlZjxXYXNtOjpHbG9iYWw+
JiYpOwogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNp
dENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElM
RFJFTjsKIAogICAgIFJlZjxXYXNtOjpHbG9iYWw+IG1fZ2xvYmFsOwogfTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUluc3Rh
bmNlLmNwcAkocmV2aXNpb24gMjY4MDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
anMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzMsNyArNzMs
OCBAQCB2b2lkIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6ZGVzdHJveShKU0NlCiAgICAgc3RhdGlj
X2Nhc3Q8SlNXZWJBc3NlbWJseUluc3RhbmNlKj4oY2VsbCktPkpTV2ViQXNzZW1ibHlJbnN0YW5j
ZTo6fkpTV2ViQXNzZW1ibHlJbnN0YW5jZSgpOwogfQogCi12b2lkIEpTV2ViQXNzZW1ibHlJbnN0
YW5jZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQor
dGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNXZWJBc3NlbWJseUluc3RhbmNlOjp2
aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAg
YXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1dlYkFzc2VtYmx5SW5zdGFuY2UqPihjZWxsKTsK
ICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC0x
MDIsNiArMTAzLDggQEAgdm9pZCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OnZpc2l0Q2hpbGRyZQog
ICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKHdyYXBwZXIuZ2V0KCkpOwogfQogCitE
RUZJTkVfVklTSVRfQ0hJTERSRU4oSlNXZWJBc3NlbWJseUluc3RhbmNlKTsKKwogdm9pZCBKU1dl
YkFzc2VtYmx5SW5zdGFuY2U6OmZpbmFsaXplQ3JlYXRpb24oVk0mIHZtLCBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBSZWY8V2FzbTo6Q29kZUJsb2NrPiYmIHdhc21Db2RlQmxvY2ssIEpT
T2JqZWN0KiBpbXBvcnRPYmplY3QsIFdhc206OkNyZWF0aW9uTW9kZSBjcmVhdGlvbk1vZGUpCiB7
CiAgICAgbV9pbnN0YW5jZS0+ZmluYWxpemVDcmVhdGlvbih0aGlzLCB3YXNtQ29kZUJsb2NrLmNv
cHlSZWYoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2Vt
Ymx5SW5zdGFuY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuaAkocmV2aXNpb24gMjY4MDg2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEwNCw3ICsxMDQsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIEpTV2ViQXNzZW1i
bHlJbnN0YW5jZShWTSYsIFN0cnVjdHVyZSosIFJlZjxXYXNtOjpJbnN0YW5jZT4mJik7CiAgICAg
dm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIEpTV2ViQXNzZW1ibHlNb2R1bGUqLCBKU01vZHVsZU5h
bWVzcGFjZU9iamVjdCopOwotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwg
U2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgUmVmPFdh
c206Okluc3RhbmNlPiBtX2luc3RhbmNlOwogICAgIFZNKiBtX3ZtOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1lbW9yeS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1lbW9yeS5jcHAJ
KHJldmlzaW9uIDI2ODA4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2Vi
QXNzZW1ibHlNZW1vcnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDEsNyArMTQxLDggQEAgdm9p
ZCBKU1dlYkFzc2VtYmx5TWVtb3J5OjpkZXN0cm95KEpTQ2VsbAogICAgIG1lbW9yeS0+SlNXZWJB
c3NlbWJseU1lbW9yeTo6fkpTV2ViQXNzZW1ibHlNZW1vcnkoKTsKIH0KIAotdm9pZCBKU1dlYkFz
c2VtYmx5TWVtb3J5Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZp
c2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1dlYkFzc2VtYmx5TWVt
b3J5Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7
CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1dlYkFzc2VtYmx5TWVtb3J5Kj4oY2Vs
bCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpA
QCAtMTUxLDYgKzE1Miw4IEBAIHZvaWQgSlNXZWJBc3NlbWJseU1lbW9yeTo6dmlzaXRDaGlsZHJl
bigKICAgICB2aXNpdG9yLnJlcG9ydEV4dHJhTWVtb3J5VmlzaXRlZCh0aGlzT2JqZWN0LT5tZW1v
cnkoKS5zaXplKCkpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNXZWJBc3NlbWJseU1l
bW9yeSk7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VN
QkxZKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1l
bW9yeS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2Vi
QXNzZW1ibHlNZW1vcnkuaAkocmV2aXNpb24gMjY4MDg2KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1lbW9yeS5oCSh3b3JraW5nIGNvcHkpCkBAIC02Myw3
ICs2Myw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgSlNXZWJBc3NlbWJseU1lbW9yeShWTSYs
IFN0cnVjdHVyZSopOwogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKLSAgICBzdGF0aWMg
dm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9W
SVNJVF9DSElMRFJFTjsKIAogICAgIFJlZjxXYXNtOjpNZW1vcnk+IG1fbWVtb3J5OwogICAgIFdy
aXRlQmFycmllcjxKU0FycmF5QnVmZmVyPiBtX2J1ZmZlcldyYXBwZXI7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmNw
cAkocmV2aXNpb24gMjY4MDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNX
ZWJBc3NlbWJseU1vZHVsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNCw3ICsxMjQsOCBAQCB2
b2lkIEpTV2ViQXNzZW1ibHlNb2R1bGU6OnNldENvZGVCbG9jayhWCiAgICAgbV9jb2RlQmxvY2tz
W3N0YXRpY19jYXN0PHNpemVfdD4obW9kZSldLnNldCh2bSwgdGhpcywgY29kZUJsb2NrKTsKIH0K
IAotdm9pZCBKU1dlYkFzc2VtYmx5TW9kdWxlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwg
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBK
U1dlYkFzc2VtYmx5TW9kdWxlOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0
b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNXZWJBc3NlbWJseU1vZHVsZSogdGhpc09iamVjdCA9IGpz
Q2FzdDxKU1dlYkFzc2VtYmx5TW9kdWxlKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9J
TkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtMTM1LDYgKzEzNiw4IEBAIHZvaWQgSlNX
ZWJBc3NlbWJseU1vZHVsZTo6dmlzaXRDaGlsZHJlbigKICAgICAgICAgdmlzaXRvci5hcHBlbmQo
dGhpc09iamVjdC0+bV9jb2RlQmxvY2tzW2ldKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVO
KEpTV2ViQXNzZW1ibHlNb2R1bGUpOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8v
IEVOQUJMRShXRUJBU1NFTUJMWSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L0pTV2ViQXNzZW1ibHlNb2R1bGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmgJKHJldmlzaW9uIDI2ODA4NikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtODAsNyArODAsNyBAQCBwcml2YXRlOgogCiAgICAgSlNXZWJBc3NlbWJseU1v
ZHVsZShWTSYsIFN0cnVjdHVyZSosIFJlZjxXYXNtOjpNb2R1bGU+JiYpOwogICAgIHZvaWQgZmlu
aXNoQ3JlYXRpb24oVk0mKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCos
IFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIFJlZjxX
YXNtOjpNb2R1bGU+IG1fbW9kdWxlOwogICAgIFdyaXRlQmFycmllcjxTeW1ib2xUYWJsZT4gbV9l
eHBvcnRTeW1ib2xUYWJsZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pT
V2ViQXNzZW1ibHlUYWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvSlNXZWJBc3NlbWJseVRhYmxlLmNwcAkocmV2aXNpb24gMjY4MDg2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseVRhYmxlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNzIsNyArNzIsOCBAQCB2b2lkIEpTV2ViQXNzZW1ibHlUYWJsZTo6ZGVzdHJv
eShKU0NlbGwqCiAgICAgc3RhdGljX2Nhc3Q8SlNXZWJBc3NlbWJseVRhYmxlKj4oY2VsbCktPkpT
V2ViQXNzZW1ibHlUYWJsZTo6fkpTV2ViQXNzZW1ibHlUYWJsZSgpOwogfQogCi12b2lkIEpTV2Vi
QXNzZW1ibHlUYWJsZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNXZWJBc3NlbWJseVRh
YmxlOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7
CiAgICAgSlNXZWJBc3NlbWJseVRhYmxlKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTV2ViQXNzZW1i
bHlUYWJsZSo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVj
dCwgaW5mbygpKTsKQEAgLTgxLDYgKzgyLDggQEAgdm9pZCBKU1dlYkFzc2VtYmx5VGFibGU6OnZp
c2l0Q2hpbGRyZW4oSgogICAgIHRoaXNPYmplY3QtPnRhYmxlKCktPnZpc2l0QWdncmVnYXRlKHZp
c2l0b3IpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNXZWJBc3NlbWJseVRhYmxlKTsK
KwogYm9vbCBKU1dlYkFzc2VtYmx5VGFibGU6Omdyb3codWludDMyX3QgZGVsdGEpCiB7CiAgICAg
aWYgKGRlbHRhID09IDApCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dl
YkFzc2VtYmx5VGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9KU1dlYkFzc2VtYmx5VGFibGUuaAkocmV2aXNpb24gMjY4MDg2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseVRhYmxlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTcwLDggKzcwLDggQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBKU1dlYkFzc2VtYmx5VGFi
bGUoVk0mLCBTdHJ1Y3R1cmUqLCBSZWY8V2FzbTo6VGFibGU+JiYpOwogICAgIHZvaWQgZmluaXNo
Q3JlYXRpb24oVk0mKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNs
b3RWaXNpdG9yJik7Ci0KKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOworLy8KICAgICBSZWY8
V2FzbTo6VGFibGU+IG1fdGFibGU7CiB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmNwcAkocmV2aXNpb24gMjY4
MDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlv
bi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0OSw3ICs0NDksOCBAQCBXZWJBc3NlbWJseUZ1bmN0
aW9uOjpXZWJBc3NlbWJseUZ1bmN0aW9uCiAgICAgLCBtX2ltcG9ydGFibGVGdW5jdGlvbiB7IHNp
Z25hdHVyZUluZGV4LCB3YXNtVG9XYXNtRW50cnlwb2ludExvYWRMb2NhdGlvbiB9CiB7IH0KIAot
dm9pZCBXZWJBc3NlbWJseUZ1bmN0aW9uOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xv
dFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBXZWJB
c3NlbWJseUZ1bmN0aW9uOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3Im
IHZpc2l0b3IpCiB7CiAgICAgV2ViQXNzZW1ibHlGdW5jdGlvbiogdGhpc09iamVjdCA9IGpzQ2Fz
dDxXZWJBc3NlbWJseUZ1bmN0aW9uKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhF
UklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNDU4LDYgKzQ1OSw4IEBAIHZvaWQgV2ViQXNz
ZW1ibHlGdW5jdGlvbjo6dmlzaXRDaGlsZHJlbigKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2Jq
ZWN0LT5tX2pzVG9XYXNtSUNDYWxsZWUpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oV2Vi
QXNzZW1ibHlGdW5jdGlvbik7CisKIHZvaWQgV2ViQXNzZW1ibHlGdW5jdGlvbjo6ZGVzdHJveShK
U0NlbGwqIGNlbGwpCiB7CiAgICAgc3RhdGljX2Nhc3Q8V2ViQXNzZW1ibHlGdW5jdGlvbio+KGNl
bGwpLT5XZWJBc3NlbWJseUZ1bmN0aW9uOjp+V2ViQXNzZW1ibHlGdW5jdGlvbigpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rp
b24uaAkocmV2aXNpb24gMjY4MDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
V2ViQXNzZW1ibHlGdW5jdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC05MCw3ICs5MCw3IEBAIHB1
YmxpYzoKICAgICBXYXNtOjpJbnN0YW5jZSogcHJldmlvdXNJbnN0YW5jZShDYWxsRnJhbWUqKTsK
IAogcHJpdmF0ZToKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RW
aXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKICAgICBXZWJBc3NlbWJseUZ1
bmN0aW9uKFZNJiwgTmF0aXZlRXhlY3V0YWJsZSosIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJl
KiwgV2FzbTo6Q2FsbGVlJiBqc0VudHJ5cG9pbnQsIFdhc21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rp
b246OkxvYWRMb2NhdGlvbiBlbnRyeXBvaW50TG9hZExvY2F0aW9uLCBXYXNtOjpTaWduYXR1cmVJ
bmRleCk7CiAKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4ganNDYWxs
RW50cnlwb2ludFNsb3coKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dl
YkFzc2VtYmx5RnVuY3Rpb25CYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uQmFzZS5jcHAJKHJldmlzaW9uIDI2ODA4
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb25C
YXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEsNyArNDEsOCBAQCBXZWJBc3NlbWJseUZ1bmN0
aW9uQmFzZTo6V2ViQXNzZW1ibHlGdW5jCiAgICAgOiBCYXNlKHZtLCBleGVjdXRhYmxlLCBnbG9i
YWxPYmplY3QsIHN0cnVjdHVyZSkKIHsgfQogCi12b2lkIFdlYkFzc2VtYmx5RnVuY3Rpb25CYXNl
Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1w
bGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBXZWJBc3NlbWJseUZ1bmN0aW9uQmFzZTo6dmlz
aXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFdl
YkFzc2VtYmx5RnVuY3Rpb25CYXNlKiB0aGlzT2JqZWN0ID0ganNDYXN0PFdlYkFzc2VtYmx5RnVu
Y3Rpb25CYXNlKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2Jq
ZWN0LCBpbmZvKCkpOwpAQCAtNDksNiArNTAsOCBAQCB2b2lkIFdlYkFzc2VtYmx5RnVuY3Rpb25C
YXNlOjp2aXNpdENoaWxkCiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9pbnN0YW5j
ZSk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihXZWJBc3NlbWJseUZ1bmN0aW9uQmFzZSk7
CisKIHZvaWQgV2ViQXNzZW1ibHlGdW5jdGlvbkJhc2U6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwg
TmF0aXZlRXhlY3V0YWJsZSogZXhlY3V0YWJsZSwgdW5zaWduZWQgbGVuZ3RoLCBjb25zdCBTdHJp
bmcmIG5hbWUsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogaW5zdGFuY2UpCiB7CiAgICAgQmFzZTo6
ZmluaXNoQ3JlYXRpb24odm0sIGV4ZWN1dGFibGUsIGxlbmd0aCwgbmFtZSk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uQmFzZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rp
b25CYXNlLmgJKHJldmlzaW9uIDI2ODA4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL1dlYkFzc2VtYmx5RnVuY3Rpb25CYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDcgKzQ2
LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZJbnN0YW5jZSgpIHsg
cmV0dXJuIE9CSkVDVF9PRkZTRVRPRihXZWJBc3NlbWJseUZ1bmN0aW9uQmFzZSwgbV9pbnN0YW5j
ZSk7IH0KIAogcHJvdGVjdGVkOgotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogICAgIHZvaWQg
ZmluaXNoQ3JlYXRpb24oVk0mLCBOYXRpdmVFeGVjdXRhYmxlKiwgdW5zaWduZWQgbGVuZ3RoLCBj
b25zdCBTdHJpbmcmIG5hbWUsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSopOwogICAgIFdlYkFzc2Vt
Ymx5RnVuY3Rpb25CYXNlKFZNJiwgTmF0aXZlRXhlY3V0YWJsZSosIEpTR2xvYmFsT2JqZWN0Kiwg
U3RydWN0dXJlKik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFz
c2VtYmx5TW9kdWxlUmVjb3JkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZVJlY29yZC5jcHAJKHJldmlzaW9uIDI2ODA4NikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3Jk
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzcsNyArNzcsOCBAQCB2b2lkIFdlYkFzc2VtYmx5TW9k
dWxlUmVjb3JkOjpmaW5pc2hDcmVhCiAgICAgfQogfQogCi12b2lkIFdlYkFzc2VtYmx5TW9kdWxl
UmVjb3JkOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3Ip
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBXZWJBc3NlbWJseU1vZHVsZVJlY29y
ZDo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewog
ICAgIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkKiB0aGlzT2JqZWN0ID0ganNDYXN0PFdlYkFzc2Vt
Ymx5TW9kdWxlUmVjb3JkKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0
aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtODYsNiArODcsOCBAQCB2b2lkIFdlYkFzc2VtYmx5TW9k
dWxlUmVjb3JkOjp2aXNpdENoaWxkCiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9z
dGFydEZ1bmN0aW9uKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKFdlYkFzc2VtYmx5TW9k
dWxlUmVjb3JkKTsKKwogdm9pZCBXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6cHJlcGFyZUxpbmso
Vk0mIHZtLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGluc3RhbmNlKQogewogICAgIFJFTEVBU0Vf
QVNTRVJUKCFtX2luc3RhbmNlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuaAkocmV2aXNpb24gMjY4MDg2
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNv
cmQuaAkod29ya2luZyBjb3B5KQpAQCAtNjcsNyArNjcsNyBAQCBwcml2YXRlOgogCiAgICAgdm9p
ZCBmaW5pc2hDcmVhdGlvbihKU0dsb2JhbE9iamVjdCosIFZNJiwgY29uc3QgV2FzbTo6TW9kdWxl
SW5mb3JtYXRpb24mKTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwg
U2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgV3JpdGVC
YXJyaWVyPEpTV2ViQXNzZW1ibHlJbnN0YW5jZT4gbV9pbnN0YW5jZTsKICAgICBXcml0ZUJhcnJp
ZXI8SlNPYmplY3Q+IG1fc3RhcnRGdW5jdGlvbjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL1dlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5j
cHAJKHJldmlzaW9uIDI2ODA4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dl
YkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjcsNyArNjcs
OCBAQCBTdHJ1Y3R1cmUqIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uOjpjCiAgICAgcmV0dXJu
IFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8o
SlNGdW5jdGlvblR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKIH0KIAotdm9pZCBXZWJB
c3NlbWJseVdyYXBwZXJGdW5jdGlvbjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgV2ViQXNz
ZW1ibHlXcmFwcGVyRnVuY3Rpb246OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlz
aXRvciYgdmlzaXRvcikKIHsKICAgICBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbiogdGhpc09i
amVjdCA9IGpzQ2FzdDxXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbio+KGNlbGwpOwogICAgIEFT
U0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTc2LDYgKzc3
LDggQEAgdm9pZCBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbjo6dmlzaXRDaAogICAgIHZpc2l0
b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fZnVuY3Rpb24pOwogfQogCitERUZJTkVfVklTSVRfQ0hJ
TERSRU4oV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24pOworCiBKU0NfREVGSU5FX0hPU1RfRlVO
Q1RJT04oY2FsbFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLCAoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpKQogewogICAgIFZNJiB2bSA9IGdsb2Jh
bE9iamVjdC0+dm0oKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFz
c2VtYmx5V3JhcHBlckZ1bmN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uaAkocmV2aXNpb24gMjY4MDg2
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlXcmFwcGVyRnVu
Y3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtNTksNyArNTksNyBAQCBwdWJsaWM6CiBwcml2YXRl
OgogICAgIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uKFZNJiwgTmF0aXZlRXhlY3V0YWJsZSos
IEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKiwgV2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlv
bik7CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIE5hdGl2ZUV4ZWN1dGFibGUqLCB1bnNp
Z25lZCBsZW5ndGgsIGNvbnN0IFN0cmluZyYgbmFtZSwgSlNPYmplY3QqLCBKU1dlYkFzc2VtYmx5
SW5zdGFuY2UqKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RW
aXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIFdyaXRlQmFycmll
cjxKU09iamVjdD4gbV9mdW5jdGlvbjsKICAgICAvLyBJdCdzIHNhZmUgdG8ganVzdCBob2xkIHRo
ZSByYXcgV2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbiBiZWNhdXNlIHdlIGhhdmUgYSByZWZl
cmVuY2UKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQnVpbHRpbkNvbnN0
cnVjdG9yQmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNET01CdWlsdGluQ29uc3RydWN0b3JCYXNlLmNwcAkocmV2aXNpb24gMjY4MDg2KQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CdWlsdGluQ29uc3RydWN0b3JCYXNlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDUsNyArNDUsOCBAQCB2b2lkIEpTRE9NQnVpbHRpbkNvbnN0cnVj
dG9yQmFzZTo6Y2FsbEZ1CiAgICAgSlNDOjpjYWxsKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAmZnVu
Y3Rpb24sIGNhbGxEYXRhLCAmdGhpc09iamVjdCwgYXJndW1lbnRzKTsKIH0KIAotdm9pZCBKU0RP
TUJ1aWx0aW5Db25zdHJ1Y3RvckJhc2U6OnZpc2l0Q2hpbGRyZW4oSlNDOjpKU0NlbGwqIGNlbGws
IEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgor
dm9pZCBKU0RPTUJ1aWx0aW5Db25zdHJ1Y3RvckJhc2U6OnZpc2l0Q2hpbGRyZW4oSlNDOjpKU0Nl
bGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpz
Q2FzdDxKU0RPTUJ1aWx0aW5Db25zdHJ1Y3RvckJhc2UqPihjZWxsKTsKICAgICBBU1NFUlRfR0Nf
T0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC01Myw2ICs1NCw4IEBAIHZv
aWQgSlNET01CdWlsdGluQ29uc3RydWN0b3JCYXNlOjp2aXNpdEMKICAgICB2aXNpdG9yLmFwcGVu
ZCh0aGlzT2JqZWN0LT5tX2luaXRpYWxpemVGdW5jdGlvbik7CiB9CiAKK0RFRklORV9WSVNJVF9D
SElMRFJFTihKU0RPTUJ1aWx0aW5Db25zdHJ1Y3RvckJhc2UpOworCiBKU0M6Oklzb1N1YnNwYWNl
KiBKU0RPTUJ1aWx0aW5Db25zdHJ1Y3RvckJhc2U6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2
bSkKIHsKICAgICByZXR1cm4gJnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50
RGF0YSktPmRvbUJ1aWx0aW5Db25zdHJ1Y3RvclNwYWNlKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0RPTUJ1aWx0aW5Db25zdHJ1Y3RvckJhc2UuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJ1aWx0aW5Db25zdHJ1Y3RvckJhc2Uu
aAkocmV2aXNpb24gMjY4MDg2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01C
dWlsdGluQ29uc3RydWN0b3JCYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDcgKzQyLDcgQEAg
cHJvdGVjdGVkOgogICAgIHsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVu
KEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJ
TERSRU47CiAKICAgICBKU0M6OkpTRnVuY3Rpb24qIGluaXRpYWxpemVGdW5jdGlvbigpOwogICAg
IHZvaWQgc2V0SW5pdGlhbGl6ZUZ1bmN0aW9uKEpTQzo6Vk0mLCBKU0M6OkpTRnVuY3Rpb24mKTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVj
dC5jcHAJKHJldmlzaW9uIDI2ODA4NikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
RE9NR2xvYmFsT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjM2LDcgKzIzNiw4IEBAIFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqIEpTRE9NR2xvYmFsT2JqZWMKICAgICByZXR1cm4gbnVsbHB0
cjsKIH0KIAotdm9pZCBKU0RPTUdsb2JhbE9iamVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNl
bGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3Zv
aWQgSlNET01HbG9iYWxPYmplY3Q6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlz
aXRvciYgdmlzaXRvcikKIHsKICAgICBKU0RPTUdsb2JhbE9iamVjdCogdGhpc09iamVjdCA9IGpz
Q2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5I
RVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTI1OCw2ICsyNTksOCBAQCB2b2lkIEpTRE9N
R2xvYmFsT2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTCiAgICAgdGhpc09iamVjdC0+bV9idWlsdGlu
SW50ZXJuYWxGdW5jdGlvbnMudmlzaXQodmlzaXRvcik7CiB9CiAKK0RFRklORV9WSVNJVF9DSElM
RFJFTihKU0RPTUdsb2JhbE9iamVjdCk7CisKIHZvaWQgSlNET01HbG9iYWxPYmplY3Q6OnNldEN1
cnJlbnRFdmVudChFdmVudCogY3VycmVudEV2ZW50KQogewogICAgIG1fY3VycmVudEV2ZW50ID0g
Y3VycmVudEV2ZW50OwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01HbG9i
YWxPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RP
TUdsb2JhbE9iamVjdC5oCShyZXZpc2lvbiAyNjgwODYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC03MSw3ICs3MSw3
IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldEN1cnJlbnRFdmVudChFdmVudCopOwogICAgIEV2ZW50
KiBjdXJyZW50RXZlbnQoKSBjb25zdDsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4o
SlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElM
RFJFTjsKIAogICAgIERPTVdyYXBwZXJXb3JsZCYgd29ybGQoKSB7IHJldHVybiBtX3dvcmxkLmdl
dCgpOyB9CiAgICAgYm9vbCB3b3JsZElzTm9ybWFsKCkgY29uc3QgeyByZXR1cm4gbV93b3JsZElz
Tm9ybWFsOyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckdsb2Jh
bFNjb3BlQmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNXb3JrZXJHbG9iYWxTY29wZUJhc2UuY3BwCShyZXZpc2lvbiAyNjgwODYpCisrKyBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckdsb2JhbFNjb3BlQmFzZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTkyLDcgKzkyLDggQEAgdm9pZCBKU1dvcmtlckdsb2JhbFNjb3BlQmFzZTo6Y2xl
YXJET01HdQogICAgICAgICBndWFyZGVkLT5jbGVhcigpOwogfQogCi12b2lkIEpTV29ya2VyR2xv
YmFsU2NvcGVCYXNlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZp
c2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1dvcmtlckdsb2JhbFNj
b3BlQmFzZTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9y
KQogewogICAgIEpTV29ya2VyR2xvYmFsU2NvcGVCYXNlKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpT
V29ya2VyR2xvYmFsU2NvcGVCYXNlKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhF
UklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtMTAwLDYgKzEwMSw4IEBAIHZvaWQgSlNXb3Jr
ZXJHbG9iYWxTY29wZUJhc2U6OnZpc2l0Q2hpbGQKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2Jq
ZWN0LT5tX3Byb3h5KTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTV29ya2VyR2xvYmFs
U2NvcGVCYXNlKTsKKwogdm9pZCBKU1dvcmtlckdsb2JhbFNjb3BlQmFzZTo6ZGVzdHJveShKU0Nl
bGwqIGNlbGwpCiB7CiAgICAgc3RhdGljX2Nhc3Q8SlNXb3JrZXJHbG9iYWxTY29wZUJhc2UqPihj
ZWxsKS0+SlNXb3JrZXJHbG9iYWxTY29wZUJhc2U6On5KU1dvcmtlckdsb2JhbFNjb3BlQmFzZSgp
OwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrZXJHbG9iYWxTY29wZUJh
c2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckds
b2JhbFNjb3BlQmFzZS5oCShyZXZpc2lvbiAyNjgwODYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU1dvcmtlckdsb2JhbFNjb3BlQmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC04MSw3
ICs4MSw3IEBAIHByb3RlY3RlZDoKICAgICBKU1dvcmtlckdsb2JhbFNjb3BlQmFzZShKU0M6OlZN
JiwgSlNDOjpTdHJ1Y3R1cmUqLCBSZWZQdHI8V29ya2VyR2xvYmFsU2NvcGU+JiYpOwogICAgIHZv
aWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYsIEpTQzo6SlNQcm94eSopOwogCi0gICAgc3RhdGlj
IHZvaWQgdmlzaXRDaGlsZHJlbihKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKTsKKyAg
ICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiBwcml2YXRlOgogICAgIFJlZlB0cjxXb3JrZXJH
bG9iYWxTY29wZT4gbV93cmFwcGVkOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNXb3JrbGV0R2xvYmFsU2NvcGVCYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU1dvcmtsZXRHbG9iYWxTY29wZUJhc2UuY3BwCShyZXZpc2lvbiAyNjgw
ODYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtsZXRHbG9iYWxTY29wZUJh
c2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Miw3ICs4Miw4IEBAIHZvaWQgSlNXb3JrbGV0R2xv
YmFsU2NvcGVCYXNlOjpjbGVhckRPTUcKICAgICAgICAgZ3VhcmRlZC0+Y2xlYXIoKTsKIH0KIAot
dm9pZCBKU1dvcmtsZXRHbG9iYWxTY29wZUJhc2U6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxs
LCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lk
IEpTV29ya2xldEdsb2JhbFNjb3BlQmFzZTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxs
LCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNX
b3JrbGV0R2xvYmFsU2NvcGVCYXNlKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhF
UklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtOTAsNiArOTEsOCBAQCB2b2lkIEpTV29ya2xl
dEdsb2JhbFNjb3BlQmFzZTo6dmlzaXRDaGlsCiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVj
dC0+bV9wcm94eSk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU1dvcmtsZXRHbG9iYWxT
Y29wZUJhc2UpOworCiB2b2lkIEpTV29ya2xldEdsb2JhbFNjb3BlQmFzZTo6ZGVzdHJveShKU0Nl
bGwqIGNlbGwpCiB7CiAgICAgc3RhdGljX2Nhc3Q8SlNXb3JrbGV0R2xvYmFsU2NvcGVCYXNlKj4o
Y2VsbCktPkpTV29ya2xldEdsb2JhbFNjb3BlQmFzZTo6fkpTV29ya2xldEdsb2JhbFNjb3BlQmFz
ZSgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrbGV0R2xvYmFsU2Nv
cGVCYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXb3Jr
bGV0R2xvYmFsU2NvcGVCYXNlLmgJKHJldmlzaW9uIDI2ODA4NikKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTV29ya2xldEdsb2JhbFNjb3BlQmFzZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC02OSw3ICs2OSw3IEBAIHByb3RlY3RlZDoKICAgICBKU1dvcmtsZXRHbG9iYWxTY29wZUJhc2Uo
SlNDOjpWTSYsIEpTQzo6U3RydWN0dXJlKiwgUmVmUHRyPFdvcmtsZXRHbG9iYWxTY29wZT4mJik7
CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJiwgSlNDOjpKU1Byb3h5Kik7CiAKLSAg
ICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRv
ciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKIHByaXZhdGU6CiAgICAgUmVmUHRy
PFdvcmtsZXRHbG9iYWxTY29wZT4gbV93cmFwcGVkOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0JKHJldmlzaW9uIDI2ODA4
NikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBt
CSh3b3JraW5nIGNvcHkpCkBAIC0zMDc4LDcgKzMwNzgsNyBAQCBzdWIgR2VuZXJhdGVIZWFkZXIK
IAogICAgICMgdmlzaXQgZnVuY3Rpb24KICAgICBpZiAoJG5lZWRzVmlzaXRDaGlsZHJlbikgewot
ICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpO1xuIik7CisgICAgICAgIHB1c2goQGhlYWRl
ckNvbnRlbnQsICIgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjtcbiIpOwogICAgICAgICBwdXNo
KEBoZWFkZXJDb250ZW50LCAiICAgIHZvaWQgdmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpT
bG90VmlzaXRvciYpO1xuIikgaWYgJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57SlND
dXN0b21NYXJrRnVuY3Rpb259OwogICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiXG4iKTsK
IApAQCAtMzA5NCw3ICszMDk0LDcgQEAgc3ViIEdlbmVyYXRlSGVhZGVyCiAgICAgICAgICAgICAj
IHRoYXQgdGhlIEdDIGNhbGxzIHRvIGFzayBhbiBvYmplY3QgaXMgaXQgd291bGQgbGlrZSB0byBt
YXJrIGFueXRoaW5nIGVsc2UgYWZ0ZXIgdGhlCiAgICAgICAgICAgICAjIHByb2dyYW0gcmVzdW1l
ZCBzaW5jZSB0aGUgbGFzdCBjYWxsIHRvIHZpc2l0Q2hpbGRyZW4gb3IgdmlzaXRPdXRwdXRDb25z
dHJhaW50cy4gU2luY2UKICAgICAgICAgICAgICMgdGhpcyBqdXN0IGNhbGxzIHZpc2l0QWRkaXRp
b25hbENoaWxkcmVuLCB5b3UgdXN1YWxseSBkb24ndCBoYXZlIHRvIHdvcnJ5IGFib3V0IHRoaXMu
Ci0gICAgICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHN0YXRpYyB2b2lkIHZpc2l0
T3V0cHV0Q29uc3RyYWludHMoSlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpO1xuIik7CisgICAg
ICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIERFQ0xBUkVfVklTSVRfT1VUUFVUX0NP
TlNUUkFJTlRTO1xuIik7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTQ5NjAsNyArNDk2MCw4IEBA
IHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ9XG5c
biIpOwogCiAgICAgaWYgKCRuZWVkc1Zpc2l0Q2hpbGRyZW4pIHsKLSAgICAgICAgcHVzaChAaW1w
bENvbnRlbnQsICJ2b2lkICR7Y2xhc3NOYW1lfTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGws
IFNsb3RWaXNpdG9yJiB2aXNpdG9yKVxuIik7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
dGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj5cbiIpOworICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgInZvaWQgJHtjbGFzc05hbWV9Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZp
c2l0b3ImIHZpc2l0b3IpXG4iKTsKICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ7XG4iKTsK
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2Fz
dDwke2NsYXNzTmFtZX0qPihjZWxsKTtcbiIpOwogICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwg
IiAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7XG4iKTsK
QEAgLTQ5ODUsMTQgKzQ5ODYsMTggQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICAg
ICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIn1cblxuIik7
CisgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiREVGSU5FX1ZJU0lUX0NISUxEUkVOKCR7Y2xh
c3NOYW1lfSk7XG5cbiIpOworCiAgICAgICAgIGlmICgkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJp
YnV0ZXMtPntKU0N1c3RvbU1hcmtGdW5jdGlvbn0pIHsKLSAgICAgICAgICAgIHB1c2goQGltcGxD
b250ZW50LCAidm9pZCAke2NsYXNzTmFtZX06OnZpc2l0T3V0cHV0Q29uc3RyYWludHMoSlNDZWxs
KiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcilcbiIpOworICAgICAgICAgICAgcHVzaChAaW1w
bENvbnRlbnQsICJ0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPlxuIik7CisgICAgICAgICAgICBw
dXNoKEBpbXBsQ29udGVudCwgInZvaWQgJHtjbGFzc05hbWV9Ojp2aXNpdE91dHB1dENvbnN0cmFp
bnRzSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpXG4iKTsKICAgICAgICAgICAg
IHB1c2goQGltcGxDb250ZW50LCAie1xuIik7CiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIiAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PCR7Y2xhc3NOYW1lfSo+KGNlbGwpO1xu
Iik7CiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBBU1NFUlRfR0NfT0JKRUNU
X0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7XG4iKTsKICAgICAgICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAiICAgIEJhc2U6OnZpc2l0T3V0cHV0Q29uc3RyYWludHModGhpc09iamVjdCwg
dmlzaXRvcik7XG4iKTsKICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHRoaXNP
YmplY3QtPnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKHZpc2l0b3IpO1xuIik7CiAgICAgICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgIn1cblxuIik7CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudCwgIkRFRklORV9WSVNJVF9PVVRQVVRfQ09OU1RSQUlOVFMoJHtjbGFzc05hbWV9KTtcblxu
Iik7CiAgICAgICAgIH0KICAgICB9CiAK
</data>
<flag name="commit-queue"
          id="426865"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>410813</attachid>
            <date>2020-10-07 23:32:58 -0700</date>
            <delta_ts>2020-10-08 13:45:08 -0700</delta_ts>
            <desc>work in progress.</desc>
            <filename>wip-gc-verifier4.patch</filename>
            <type>text/plain</type>
            <size>187688</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDI2ODA4NikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtNjU2LDYgKzY1Niw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9QUklWQVRFX0ZSQU1FV09SS19I
RUEKICAgICBoZWFwL1NpbXBsZU1hcmtpbmdDb25zdHJhaW50LmgKICAgICBoZWFwL1Nsb3RWaXNp
dG9yLmgKICAgICBoZWFwL1Nsb3RWaXNpdG9ySW5saW5lcy5oCisgICAgaGVhcC9TbG90VmlzaXRv
ck1hY3Jvcy5oCiAgICAgaGVhcC9TdHJvbmcuaAogICAgIGhlYXAvU3Ryb25nSW5saW5lcy5oCiAg
ICAgaGVhcC9TdWJzcGFjZS5oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQVBJ
V3JhcHBlck9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkv
SlNBUElXcmFwcGVyT2JqZWN0LmgJKHJldmlzaW9uIDI2ODA4NikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvSlNBUElXcmFwcGVyT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjAgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00MSw3
ICs0MSw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBzdWJzcGFjZUZvcihWTSYpIHsgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQogICAgIAogICAgIHZvaWQgZmluaXNoQ3JlYXRp
b24oVk0mKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIEpTQzo6U2xv
dFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX0VYUE9SVF9WSVNJVF9DSElMRFJFTjsKICAgICAKICAg
ICB2b2lkKiB3cmFwcGVkT2JqZWN0KCkgeyByZXR1cm4gbV93cmFwcGVkT2JqZWN0OyB9CiAgICAg
dm9pZCBzZXRXcmFwcGVkT2JqZWN0KHZvaWQqKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9BUEkvSlNBUElXcmFwcGVyT2JqZWN0Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvSlNBUElXcmFwcGVyT2JqZWN0Lm1tCShyZXZpc2lvbiAyNjgwODYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQVBJV3JhcHBlck9iamVjdC5tbQkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxOCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTczLDYgKzczLDggQEAgc3RhdGljIEpTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJT04o
Y29uc3RydQogc3RhdGljIEpTQ19ERUNMQVJFX0NVU1RPTV9HRVRURVIoY2FsbGJhY2tHZXR0ZXJK
U0FQSVdyYXBwZXJPYmplY3RDYWxsYmFja09iamVjdCk7CiBzdGF0aWMgSlNDX0RFQ0xBUkVfQ1VT
VE9NX0dFVFRFUihzdGF0aWNGdW5jdGlvbkdldHRlckpTQVBJV3JhcHBlck9iamVjdENhbGxiYWNr
T2JqZWN0KTsKIAorREVGSU5FX1RFTVBMQVRFX1ZJU0lUX0NISUxEUkVOKHRlbXBsYXRlPD4sIEpT
Q2FsbGJhY2tPYmplY3Q8SlNBUElXcmFwcGVyT2JqZWN0Pik7CisKIHRlbXBsYXRlIDw+IGNvbnN0
IENsYXNzSW5mbyBKU0NhbGxiYWNrT2JqZWN0PEpTQVBJV3JhcHBlck9iamVjdD46OnNfaW5mbyA9
IHsgIkpTQVBJV3JhcHBlck9iamVjdCIsICZCYXNlOjpzX2luZm8sIG51bGxwdHIsIG51bGxwdHIs
IENSRUFURV9NRVRIT0RfVEFCTEUoSlNDYWxsYmFja09iamVjdCkgfTsKIHRlbXBsYXRlIDw+IGNv
bnN0IGJvb2wgSlNDYWxsYmFja09iamVjdDxKU0FQSVdyYXBwZXJPYmplY3Q+OjpuZWVkc0Rlc3Ry
dWN0aW9uID0gdHJ1ZTsKIApAQCAtMTIzLDcgKzEyNSw4IEBAIHZvaWQgSlNBUElXcmFwcGVyT2Jq
ZWN0OjpzZXRXcmFwcGVkT2JqZWMKICAgICBtX3dyYXBwZWRPYmplY3QgPSBbc3RhdGljX2Nhc3Q8
aWQ+KHdyYXBwZWRPYmplY3QpIHJldGFpbl07CiB9CiAKLXZvaWQgSlNBUElXcmFwcGVyT2JqZWN0
Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikK
K3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTQVBJV3JhcHBlck9iamVjdDo6dmlz
aXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpT
QVBJV3JhcHBlck9iamVjdCogdGhpc09iamVjdCA9IEpTQzo6anNDYXN0PEpTQVBJV3JhcHBlck9i
amVjdCo+KGNlbGwpOwogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4oY2VsbCwgdmlzaXRvcik7CkBA
IC0xMzMsNiArMTM2LDggQEAgdm9pZCBKU0FQSVdyYXBwZXJPYmplY3Q6OnZpc2l0Q2hpbGRyZW4o
SgogICAgICAgICBzY2FuRXh0ZXJuYWxPYmplY3RHcmFwaCh2aXNpdG9yLnZtKCksIHZpc2l0b3Is
IHdyYXBwZWRPYmplY3QpOwogfQogCitERUZJTkVfRVhQT1JUX1ZJU0lUX0NISUxEUkVOKEpTQVBJ
V3JhcHBlck9iamVjdCk7CisKIHRlbXBsYXRlIDw+CiBJc29TdWJzcGFjZSogSlNDYWxsYmFja09i
amVjdDxKU0FQSVdyYXBwZXJPYmplY3Q+OjpzdWJzcGFjZUZvckltcGwoVk0mIHZtLCBTdWJzcGFj
ZUFjY2VzcyBtb2RlKQogewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxi
YWNrT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pT
Q2FsbGJhY2tPYmplY3QuY3BwCShyZXZpc2lvbiAyNjgwODYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNi0yMDE3IEFwcGxlIEluYy4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcgRXJpYyBTZWlkZWwgPGVyaWNA
d2Via2l0Lm9yZz4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTQxLDYgKzQxLDkgQEAgc3RhdGljIEpT
Q19ERUNMQVJFX0NVU1RPTV9HRVRURVIoc3RhdGljRgogc3RhdGljIEpTQ19ERUNMQVJFX0NVU1RP
TV9HRVRURVIoY2FsbGJhY2tHZXR0ZXJKU0dsb2JhbE9iamVjdENhbGxiYWNrT2JqZWN0KTsKIHN0
YXRpYyBKU0NfREVDTEFSRV9DVVNUT01fR0VUVEVSKHN0YXRpY0Z1bmN0aW9uR2V0dGVySlNHbG9i
YWxPYmplY3RDYWxsYmFja09iamVjdCk7CiAKK0RFRklORV9URU1QTEFURV9WSVNJVF9DSElMRFJF
Tih0ZW1wbGF0ZTw+LCBKU0NhbGxiYWNrT2JqZWN0PEpTTm9uRmluYWxPYmplY3Q+KTsKK0RFRklO
RV9URU1QTEFURV9WSVNJVF9DSElMRFJFTih0ZW1wbGF0ZTw+LCBKU0NhbGxiYWNrT2JqZWN0PEpT
R2xvYmFsT2JqZWN0Pik7CisKIC8vIERlZmluZSB0aGUgdHdvIHR5cGVzIG9mIEpTQ2FsbGJhY2tP
YmplY3RzIHdlIHN1cHBvcnQuCiB0ZW1wbGF0ZSA8PiBjb25zdCBDbGFzc0luZm8gSlNDYWxsYmFj
a09iamVjdDxKU05vbkZpbmFsT2JqZWN0Pjo6c19pbmZvID0geyAiQ2FsbGJhY2tPYmplY3QiLCAm
QmFzZTo6c19pbmZvLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTQ2Fs
bGJhY2tPYmplY3QpIH07CiB0ZW1wbGF0ZSA8PiBjb25zdCBDbGFzc0luZm8gSlNDYWxsYmFja09i
amVjdDxKU0dsb2JhbE9iamVjdD46OnNfaW5mbyA9IHsgIkNhbGxiYWNrR2xvYmFsT2JqZWN0Iiwg
JkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU0Nh
bGxiYWNrT2JqZWN0KSB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxi
YWNrT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0Nh
bGxiYWNrT2JqZWN0LmgJKHJldmlzaW9uIDI2ODA4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9BUEkvSlNDYWxsYmFja09iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC02OSw3ICs2OSwxMCBA
QCBwdWJsaWM6CiAgICAgICAgIG1fcHJpdmF0ZVByb3BlcnRpZXMtPmRlbGV0ZVByaXZhdGVQcm9w
ZXJ0eShwcm9wZXJ0eU5hbWUpOwogICAgIH0KIAotICAgIHZvaWQgdmlzaXRDaGlsZHJlbihTbG90
VmlzaXRvciYgdmlzaXRvcikKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOworCisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KKyAgICB2b2lkIHZpc2l0Q2hpbGRyZW4oVmlzaXRvciYg
dmlzaXRvcikKICAgICB7CiAgICAgICAgIEpTUHJpdmF0ZVByb3BlcnR5TWFwKiBwcm9wZXJ0aWVz
ID0gbV9wcml2YXRlUHJvcGVydGllcy5nZXQoKTsKICAgICAgICAgaWYgKCFwcm9wZXJ0aWVzKQpA
QCAtMTAzLDcgKzEwNiw4IEBAIHB1YmxpYzoKICAgICAgICAgICAgIG1fcHJvcGVydHlNYXAucmVt
b3ZlKHByb3BlcnR5TmFtZS5pbXBsKCkpOwogICAgICAgICB9CiAKLSAgICAgICAgdm9pZCB2aXNp
dENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBWaXNpdG9yPgorICAgICAgICB2b2lkIHZpc2l0Q2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikK
ICAgICAgICAgewogICAgICAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9sb2NrKTsKICAgICAg
ICAgICAgIGZvciAoYXV0byYgcGFpciA6IG1fcHJvcGVydHlNYXApIHsKQEAgLTIxNiwxMyArMjIw
LDcgQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgQ2FsbERhdGEgZ2V0Q29uc3RydWN0RGF0YShKU0Nl
bGwqKTsKICAgICBzdGF0aWMgQ2FsbERhdGEgZ2V0Q2FsbERhdGEoSlNDZWxsKik7CiAKLSAgICBz
dGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0
b3IpCi0gICAgewotICAgICAgICBKU0NhbGxiYWNrT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0
PEpTQ2FsbGJhY2tPYmplY3QqPihjZWxsKTsKLSAgICAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhF
UklUUygoc3RhdGljX2Nhc3Q8UGFyZW50Kj4odGhpc09iamVjdCkpLCBKU0NhbGxiYWNrT2JqZWN0
PFBhcmVudD46OmluZm8oKSk7Ci0gICAgICAgIFBhcmVudDo6dmlzaXRDaGlsZHJlbih0aGlzT2Jq
ZWN0LCB2aXNpdG9yKTsKLSAgICAgICAgdGhpc09iamVjdC0+bV9jYWxsYmFja09iamVjdERhdGEt
PnZpc2l0Q2hpbGRyZW4odmlzaXRvcik7Ci0gICAgfQorICAgIERFQ0xBUkVfVEVNUExBVEVfVklT
SVRfQ0hJTERSRU47CiAKICAgICB2b2lkIGluaXQoSlNHbG9iYWxPYmplY3QqKTsKICAKQEAgLTI0
NSw2ICsyNDMsMTYgQEAgcHJpdmF0ZToKICAgICBjb25zdCBDbGFzc0luZm8qIG1fY2xhc3NJbmZv
IHsgbnVsbHB0ciB9OwogfTsKIAordGVtcGxhdGUgPGNsYXNzIFBhcmVudD4KK3RlbXBsYXRlPHR5
cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTQ2FsbGJhY2tPYmplY3Q8UGFyZW50Pjo6dmlzaXRDaGls
ZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIEpTQ2FsbGJh
Y2tPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNDYWxsYmFja09iamVjdCo+KGNlbGwpOwor
ICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoKHN0YXRpY19jYXN0PFBhcmVudCo+KHRoaXNP
YmplY3QpKSwgSlNDYWxsYmFja09iamVjdDxQYXJlbnQ+OjppbmZvKCkpOworICAgIFBhcmVudDo6
dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKKyAgICB0aGlzT2JqZWN0LT5tX2Nh
bGxiYWNrT2JqZWN0RGF0YS0+dmlzaXRDaGlsZHJlbih2aXNpdG9yKTsKK30KKwogfSAvLyBuYW1l
c3BhY2UgSlNDCiAKIC8vIGluY2x1ZGUgdGhlIGFjdHVhbCB0ZW1wbGF0ZSBjbGFzcyBpbXBsZW1l
bnRhdGlvbgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDI2ODA4
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xODk5LDYgKzE4OTksNyBAQAogCQlFM0ZG
NzUzMzFEOUNFQTE4MDBDN0UxNkQgLyogRE9NSklUR2V0dGVyU2V0dGVyLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFM0ZGNzUyRjFEOUNFQTEyMDBDN0Ux
NkQgLyogRE9NSklUR2V0dGVyU2V0dGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTQ5REMxNkMxMkVGMjk0RTAwMTg0QTFGIC8qIFNvdXJjZVBy
b3ZpZGVyQ2FjaGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEU0OURDMTUxMTJFRjI3MjIwMDE4NEExRiAvKiBTb3VyY2VQcm92aWRlckNhY2hlLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTQ5REMxNkQx
MkVGMjk1MzAwMTg0QTFGIC8qIFNvdXJjZVByb3ZpZGVyQ2FjaGVJdGVtLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDlEQzE0OTEyRUYyNjFBMDAxODRB
MUYgLyogU291cmNlUHJvdmlkZXJDYWNoZUl0ZW0uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OworCQlGRTA0MTU1MzI1MkVDMDczMDA5MUVCNUQgLyogU2xv
dFZpc2l0b3JNYWNyb3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEZFMDQxNTUyMjUyRUMwNzMwMDkxRUI1RCAvKiBTbG90VmlzaXRvck1hY3Jvcy5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUZFMDVGQUZE
MUZFNENFREEwMDA5MzIzMCAvKiBEZXByZWNhdGVkSW5zcGVjdG9yVmFsdWVzLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk5MkQ2QTExMUZCRDQ5MUQw
MDAyNDVGNCAvKiBEZXByZWNhdGVkSW5zcGVjdG9yVmFsdWVzLmNwcCAqLzsgfTsKIAkJRkUwODZC
Q0EyMTIzREVGQjAwM0YyOTI5IC8qIEVudHJ5RnJhbWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFMDg2QkM5MjEyM0RFRkEwMDNGMjkyOSAvKiBFbnRy
eUZyYW1lLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJRkUwRDRBMDYxQUI4REQwQTAwMkY1NEJGIC8qIEV4ZWN1dGlvblRpbWVMaW1pdFRlc3QuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUwRDRBMDQx
QUI4REQwQTAwMkY1NEJGIC8qIEV4ZWN1dGlvblRpbWVMaW1pdFRlc3QuY3BwICovOyB9OwpAQCAt
NTE3OCw2ICs1MTc5LDcgQEAKIAkJRjY5MkE4ODcwMjU1NTk3RDAxRkY2MEY3IC8qIEpTQ0pTVmFs
dWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBp
bmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gSlNDSlNWYWx1ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0g
ODsgfTsKIAkJRjczOTI2OTE4REM2NDMzMEFGQ0RGMEQ3IC8qIEpTU291cmNlQ29kZS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1NvdXJjZUNvZGUuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTAwMjYyMjIzRjNBRjMzMDAzQTM1OEYgLyogV2Vi
QXNzZW1ibHkuYXNtICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5hc20uYXNtOyBuYW1lID0gV2ViQXNzZW1ibHkuYXNtOyBwYXRoID0g
bGxpbnQvV2ViQXNzZW1ibHkuYXNtOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRTA0
MTU1MjI1MkVDMDczMDA5MUVCNUQgLyogU2xvdFZpc2l0b3JNYWNyb3MuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gU2xvdFZpc2l0b3JNYWNyb3MuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJRkUwODZCQzkyMTIzREVGQTAwM0YyOTI5IC8qIEVudHJ5RnJhbWUuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRW50cnlGcmFtZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlGRTBENEEwNDFBQjhERDBBMDAyRjU0QkYgLyogRXhlY3V0aW9u
VGltZUxpbWl0VGVzdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBF
eGVjdXRpb25UaW1lTGltaXRUZXN0LmNwcDsgcGF0aCA9IEFQSS90ZXN0cy9FeGVjdXRpb25UaW1l
TGltaXRUZXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkUwRDRBMDUxQUI4
REQwQTAwMkY1NEJGIC8qIEV4ZWN1dGlvblRpbWVMaW1pdFRlc3QuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gRXhlY3V0aW9uVGltZUxpbWl0VGVzdC5oOyBwYXRoID0gQVBJL3Rl
c3RzL0V4ZWN1dGlvblRpbWVMaW1pdFRlc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTYzOTAsNiArNjM5Miw3IEBACiAJCQkJQzIyNTQ5NDIxNUY3REJBQTAwNjVFODk4IC8qIFNs
b3RWaXNpdG9yLmNwcCAqLywKIAkJCQkxNEJBNzhGMDEzQUFCODhGMDA1QjdDMkMgLyogU2xvdFZp
c2l0b3IuaCAqLywKIAkJCQkwRkNCNDA4NTE1QzBBM0MzMDA0ODkzMkIgLyogU2xvdFZpc2l0b3JJ
bmxpbmVzLmggKi8sCisJCQkJRkUwNDE1NTIyNTJFQzA3MzAwOTFFQjVEIC8qIFNsb3RWaXNpdG9y
TWFjcm9zLmggKi8sCiAJCQkJMEZERTg3RkExREZFNkU1MDAwNjRDMzkwIC8qIFNwYWNlVGltZU11
dGF0b3JTY2hlZHVsZXIuY3BwICovLAogCQkJCTBGREU4N0ZCMURGRTZFNTAwMDY0QzM5MCAvKiBT
cGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyLmggKi8sCiAJCQkJMEY0RjgyODkxRTMxQjk3MTAwNzUx
ODRDIC8qIFN0b2NoYXN0aWNTcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyLmNwcCAqLywKQEAgLTky
MjUsNiArOTIyOCw3IEBACiAJCQkJNTI2NzhGOEYxQTAzMTAwOTAwNkEzMDZEIC8qIEJhc2ljQmxv
Y2tMb2NhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQ3QjgzQUMwRTZEQjhDOTAwNDc3NUE0
IC8qIEJhdGNoZWRUcmFuc2l0aW9uT3B0aW1pemVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk4Njk3
NkU1RjFGQTNFOEJDMDBFN0M0RTEgLyogQmlnSW50Q29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICov
LAorCQkJCUZFMDQxNTUzMjUyRUMwNzMwMDkxRUI1RCAvKiBTbG90VmlzaXRvck1hY3Jvcy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJODY2NzM5RDIxM0JGREU3MTAwMjNEODdDIC8qIEJpZ0ludGVnZXIu
aCBpbiBIZWFkZXJzICovLAogCQkJCTg2MTgxNjc3MUZCNzkyNDIwMEVDQzRFQyAvKiBCaWdJbnRP
YmplY3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2OTc2RTVFMUZBM0U4QjYwMEU3QzRFMSAvKiBC
aWdJbnRQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJldmlzaW9uIDI2ODA4NikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC05OTgsNyArOTk4LDggQEAgc2l6ZV90IENvZGVCbG9jazo6ZXN0aW1hdGVkU2l6ZShKU0NlbGwq
IAogICAgIHJldHVybiBCYXNlOjplc3RpbWF0ZWRTaXplKGNlbGwsIHZtKSArIGV4dHJhTWVtb3J5
QWxsb2NhdGVkOwogfQogCi12b2lkIENvZGVCbG9jazo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNl
bGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3Zv
aWQgQ29kZUJsb2NrOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZp
c2l0b3IpCiB7CiAgICAgQ29kZUJsb2NrKiB0aGlzT2JqZWN0ID0ganNDYXN0PENvZGVCbG9jayo+
KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygp
KTsKQEAgLTEwMDcsNyArMTAwOCwxMCBAQCB2b2lkIENvZGVCbG9jazo6dmlzaXRDaGlsZHJlbihK
U0NlbGwqIGNlCiAgICAgdGhpc09iamVjdC0+dmlzaXRDaGlsZHJlbih2aXNpdG9yKTsKIH0KIAot
dm9pZCBDb2RlQmxvY2s6OnZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCitERUZJ
TkVfVklTSVRfQ0hJTERSRU4oQ29kZUJsb2NrKTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRv
cj4KK3ZvaWQgQ29kZUJsb2NrOjp2aXNpdENoaWxkcmVuSW1wbChWaXNpdG9yJiB2aXNpdG9yKQog
ewogICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9sb2NrKTsKICAgICBpZiAoQ29kZUJs
b2NrKiBvdGhlckJsb2NrID0gc3BlY2lhbE9TUkVudHJ5QmxvY2tPck51bGwoKSkKQEAgLTEwMjYs
NiArMTAzMCw4IEBAIHZvaWQgQ29kZUJsb2NrOjp2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG8KICAg
ICBWTTo6U3BhY2VBbmRTZXQ6OnNldEZvcigqc3Vic3BhY2UoKSkuYWRkKHRoaXMpOwogfQogCitE
RUZJTkVfSU5TVEFOQ0VfVklTSVRfQ0hJTERSRU4oQ29kZUJsb2NrKTsKKwogYm9vbCBDb2RlQmxv
Y2s6OnNob3VsZFZpc2l0U3Ryb25nbHkoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiBsb2NrZXIp
CiB7CiAgICAgaWYgKE9wdGlvbnM6OmZvcmNlQ29kZUJsb2NrTGl2ZW5lc3MoKSkKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9uIDI2ODA4
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjAxLDEwICsyMDEsMTEgQEAgcHVibGljOgogICAgIC8vIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjM2NzcKICAgICBDb2RlQmxvY2sqIGJhc2Vs
aW5lVmVyc2lvbigpOwogCisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKKwogICAgIHN0YXRp
YyBzaXplX3QgZXN0aW1hdGVkU2l6ZShKU0NlbGwqLCBWTSYpOwotICAgIHN0YXRpYyB2b2lkIHZp
c2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKICAgICBzdGF0aWMgdm9pZCBkZXN0
cm95KEpTQ2VsbCopOwotICAgIHZvaWQgdmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYpOworICAg
IERFQ0xBUkVfSU5TVEFOQ0VfVklTSVRfQ0hJTERSRU47CiAgICAgdm9pZCBmaW5hbGl6ZVVuY29u
ZGl0aW9uYWxseShWTSYpOwogCiAgICAgdm9pZCBub3RpZnlMZXhpY2FsQmluZGluZ1VwZGF0ZSgp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGFibGVUb0NvZGVC
bG9ja0VkZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9FeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlLmNwcAkocmV2aXNpb24gMjY4MDg2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
OCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTgt
MjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTUzLDcgKzUzLDggQEAgdm9pZCBFeGVjdXRhYmxlVG9Db2RlQmxvY2tF
ZGdlOjpmaW5pc2hDcgogICAgIEFTU0VSVCghaXNBY3RpdmUoKSk7CiB9CiAKLXZvaWQgRXhlY3V0
YWJsZVRvQ29kZUJsb2NrRWRnZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNp
dG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgRXhlY3V0YWJs
ZVRvQ29kZUJsb2NrRWRnZTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9y
JiB2aXNpdG9yKQogewogICAgIFZNJiB2bSA9IHZpc2l0b3Iudm0oKTsKICAgICBFeGVjdXRhYmxl
VG9Db2RlQmxvY2tFZGdlKiBlZGdlID0ganNDYXN0PEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2Uq
PihjZWxsKTsKQEAgLTExNyw3ICsxMTgsMTAgQEAgdm9pZCBFeGVjdXRhYmxlVG9Db2RlQmxvY2tF
ZGdlOjp2aXNpdENoaQogICAgIGVkZ2UtPnJ1bkNvbnN0cmFpbnQobG9ja2VyLCB2bSwgdmlzaXRv
cik7CiB9CiAKLXZvaWQgRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZTo6dmlzaXRPdXRwdXRDb25z
dHJhaW50cyhKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorREVGSU5FX1ZJU0lU
X0NISUxEUkVOKEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UpOworCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBWaXNpdG9yPgordm9pZCBFeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlOjp2aXNpdE91dHB1dENv
bnN0cmFpbnRzSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgVk0m
IHZtID0gdmlzaXRvci52bSgpOwogICAgIEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UqIGVkZ2Ug
PSBqc0Nhc3Q8RXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZSo+KGNlbGwpOwpAQCAtMTI1LDYgKzEy
OSw4IEBAIHZvaWQgRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZTo6dmlzaXRPdXQKICAgICBlZGdl
LT5ydW5Db25zdHJhaW50KE5vTG9ja2luZ05lY2Vzc2FyeSwgdm0sIHZpc2l0b3IpOwogfQogCitE
RUZJTkVfVklTSVRfT1VUUFVUX0NPTlNUUkFJTlRTKEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2Up
OworCiB2b2lkIEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2U6OmZpbmFsaXplVW5jb25kaXRpb25h
bGx5KFZNJiB2bSkKIHsKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IG1fY29kZUJsb2NrLmdl
dCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGFibGVUb0Nv
ZGVCbG9ja0VkZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZS5oCShyZXZpc2lvbiAyNjgwODYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOC0y
MDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
OC0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtNTMsOSArNTMsOSBAQCBwdWJsaWM6CiAgICAgREVDTEFSRV9JTkZP
OwogCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2soKSBjb25zdCB7IHJldHVybiBtX2NvZGVCbG9j
ay5nZXQoKTsgfQotICAgIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwg
U2xvdFZpc2l0b3ImKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdE91dHB1dENvbnN0cmFpbnRzKEpT
Q2VsbCosIFNsb3RWaXNpdG9yJik7CisKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOworICAg
IERFQ0xBUkVfVklTSVRfT1VUUFVUX0NPTlNUUkFJTlRTOwogICAgIHZvaWQgZmluYWxpemVVbmNv
bmRpdGlvbmFsbHkoVk0mKTsKICAgICAKICAgICBzdGF0aWMgQ29kZUJsb2NrKiB1bndyYXAoRXhl
Y3V0YWJsZVRvQ29kZUJsb2NrRWRnZSogZWRnZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcAkocmV2aXNpb24gMjY4
MDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2Nr
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTItMjAxOSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTItMjAyMCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTcxLDcgKzcxLDggQEAgVW5saW5rZWRDb2RlQmxvY2s6
OlVubGlua2VkQ29kZUJsb2NrKFZNJgogICAgIH0KIH0KIAotdm9pZCBVbmxpbmtlZENvZGVCbG9j
azo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVt
cGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgVW5saW5rZWRDb2RlQmxvY2s6OnZpc2l0Q2hp
bGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBVbmxpbmtl
ZENvZGVCbG9jayogdGhpc09iamVjdCA9IGpzQ2FzdDxVbmxpbmtlZENvZGVCbG9jayo+KGNlbGwp
OwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAg
LTkwLDYgKzkxLDggQEAgdm9pZCBVbmxpbmtlZENvZGVCbG9jazo6dmlzaXRDaGlsZHJlbihKUwog
ICAgIHZpc2l0b3IucmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKGV4dHJhTWVtb3J5KTsKIH0KIAor
REVGSU5FX1ZJU0lUX0NISUxEUkVOKFVubGlua2VkQ29kZUJsb2NrKTsKKwogc2l6ZV90IFVubGlu
a2VkQ29kZUJsb2NrOjplc3RpbWF0ZWRTaXplKEpTQ2VsbCogY2VsbCwgVk0mIHZtKQogewogICAg
IFVubGlua2VkQ29kZUJsb2NrKiB0aGlzT2JqZWN0ID0ganNDYXN0PFVubGlua2VkQ29kZUJsb2Nr
Kj4oY2VsbCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRD
b2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
VW5saW5rZWRDb2RlQmxvY2suaAkocmV2aXNpb24gMjY4MDg2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTkgQXBwbGUgSW5jLiBBbGwg
UmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjAgQXBwbGUgSW5jLiBB
bGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00
MjMsNyArNDIzLDcgQEAgcHJpdmF0ZToKICAgICBSZWZDb3VudGVkQXJyYXk8RXhwcmVzc2lvblJh
bmdlSW5mbz4gbV9leHByZXNzaW9uSW5mbzsKIAogcHJvdGVjdGVkOgotICAgIHN0YXRpYyB2b2lk
IHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lU
X0NISUxEUkVOOwogICAgIHN0YXRpYyBzaXplX3QgZXN0aW1hdGVkU2l6ZShKU0NlbGwqLCBWTSYp
OwogCiBwdWJsaWM6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5r
ZWRGdW5jdGlvbkV4ZWN1dGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5jcHAJKHJldmlzaW9uIDI2
ODA4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9u
RXhlY3V0YWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDEyLTIwMTkgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEyLTIwMjAgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xNDEsNyArMTQxLDggQEAgdm9pZCBV
bmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6ZGVzdHJveQogICAgIHN0YXRpY19jYXN0PFVubGlu
a2VkRnVuY3Rpb25FeGVjdXRhYmxlKj4oY2VsbCktPn5VbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJs
ZSgpOwogfQogCi12b2lkIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlOjp2aXNpdENoaWxkcmVu
KEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPgordm9pZCBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6dmlzaXRDaGlsZHJlbklt
cGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFVubGlua2VkRnVuY3Rp
b25FeGVjdXRhYmxlKiB0aGlzT2JqZWN0ID0ganNDYXN0PFVubGlua2VkRnVuY3Rpb25FeGVjdXRh
YmxlKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBp
bmZvKCkpOwpAQCAtMTY0LDYgKzE2NSw4IEBAIHZvaWQgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFi
bGU6OnZpc2l0Q2gKICAgICB9CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihVbmxpbmtlZEZ1
bmN0aW9uRXhlY3V0YWJsZSk7CisKIFNvdXJjZUNvZGUgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFi
bGU6OmxpbmtlZFNvdXJjZUNvZGUoY29uc3QgU291cmNlQ29kZSYgcGFzc2VkUGFyZW50U291cmNl
KSBjb25zdAogewogICAgIGNvbnN0IFNvdXJjZUNvZGUmIHBhcmVudFNvdXJjZSA9ICFtX2lzQnVp
bHRpbkRlZmF1bHRDbGFzc0NvbnN0cnVjdG9yID8gcGFzc2VkUGFyZW50U291cmNlIDogQnVpbHRp
bkV4ZWN1dGFibGVzOjpkZWZhdWx0Q29uc3RydWN0b3JTb3VyY2VDb2RlKGNvbnN0cnVjdG9yS2lu
ZCgpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZEZ1bmN0
aW9uRXhlY3V0YWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9VbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5oCShyZXZpc2lvbiAyNjgwODYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUu
aAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTItMjAxOSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTItMjAyMCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTIzMiw3ICsyMzIsNyBAQCBwcml2YXRlOgogICAgIFVubGlu
a2VkRnVuY3Rpb25FeGVjdXRhYmxlKFZNJiwgU3RydWN0dXJlKiwgY29uc3QgU291cmNlQ29kZSYs
IEZ1bmN0aW9uTWV0YWRhdGFOb2RlKiwgVW5saW5rZWRGdW5jdGlvbktpbmQsIENvbnN0cnVjdEFi
aWxpdHksIEpTUGFyc2VyU2NyaXB0TW9kZSwgT3B0aW9uYWw8Q29tcGFjdFZhcmlhYmxlTWFwOjpI
YW5kbGU+LCAgSlNDOjpEZXJpdmVkQ29udGV4dFR5cGUsIEpTQzo6TmVlZHNDbGFzc0ZpZWxkSW5p
dGlhbGl6ZXIsIGJvb2wgaXNCdWlsdGluRGVmYXVsdENsYXNzQ29uc3RydWN0b3IpOwogICAgIFVu
bGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKERlY29kZXImLCBjb25zdCBDYWNoZWRGdW5jdGlvbkV4
ZWN1dGFibGUmKTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xv
dFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgdm9pZCBkZWNv
ZGVDYWNoZWRDb2RlQmxvY2tzKFZNJik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZWJ1Z2dlci9EZWJ1Z2dlclNjb3BlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGVidWdnZXIvRGVidWdnZXJTY29wZS5jcHAJKHJldmlzaW9uIDI2ODA4NikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlclNjb3BlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxOSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAyMCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTU1LDcgKzU1LDggQEAgdm9pZCBEZWJ1Z2dlclNjb3BlOjpmaW5pc2hDcmVhdGlv
bihWTSYgdgogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKIH0KIAotdm9pZCBEZWJ1Z2dl
clNjb3BlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3Ip
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBEZWJ1Z2dlclNjb3BlOjp2aXNpdENo
aWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgRGVidWdn
ZXJTY29wZSogdGhpc09iamVjdCA9IGpzQ2FzdDxEZWJ1Z2dlclNjb3BlKj4oY2VsbCk7CiAgICAg
QVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNjUsNiAr
NjYsOCBAQCB2b2lkIERlYnVnZ2VyU2NvcGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsCiAgICAgdmlz
aXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9uZXh0KTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxE
UkVOKERlYnVnZ2VyU2NvcGUpOworCiBTdHJpbmcgRGVidWdnZXJTY29wZTo6Y2xhc3NOYW1lKGNv
bnN0IEpTT2JqZWN0KiBvYmplY3QsIFZNJiB2bSkKIHsKICAgICBjb25zdCBEZWJ1Z2dlclNjb3Bl
KiBzY29wZSA9IGpzQ2FzdDxjb25zdCBEZWJ1Z2dlclNjb3BlKj4ob2JqZWN0KTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlclNjb3BlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyU2NvcGUuaAkocmV2aXNp
b24gMjY4MDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyU2Nv
cGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDYsNyArNDYsNyBAQCBwdWJsaWM6CiAKICAgICBKU19F
WFBPUlRfUFJJVkFURSBzdGF0aWMgRGVidWdnZXJTY29wZSogY3JlYXRlKFZNJiB2bSwgSlNTY29w
ZSogc2NvcGUpOwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90
VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAgICAgc3RhdGljIFN0cmlu
ZyBjbGFzc05hbWUoY29uc3QgSlNPYmplY3QqLCBWTSYpOwogICAgIHN0YXRpYyBTdHJpbmcgdG9T
dHJpbmdOYW1lKGNvbnN0IEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqKTsKICAgICBzdGF0aWMg
Ym9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIFByb3Bl
cnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0Rlc2lyZWRUcmFuc2l0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdEZXNpcmVkVHJhbnNpdGlvbnMuY3BwCShyZXZpc2lvbiAyNjgwODYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRUcmFuc2l0aW9ucy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTUyLDEzICs1MiwxNiBAQCB2b2lkIERlc2lyZWRUcmFuc2l0aW9uOjpy
ZWFsbHlBZGQoVk0mIHZtCiAgICAgICAgICAgICBtX29sZFN0cnVjdHVyZSwgbV9uZXdTdHJ1Y3R1
cmUpKTsKIH0KIAotdm9pZCBEZXNpcmVkVHJhbnNpdGlvbjo6dmlzaXRDaGlsZHJlbihTbG90Vmlz
aXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIERlc2lyZWRU
cmFuc2l0aW9uOjp2aXNpdENoaWxkcmVuSW1wbChWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHZp
c2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQobV9jb2RlT3JpZ2luT3duZXIpOwogICAgIHZpc2l0b3Iu
YXBwZW5kVW5iYXJyaWVyZWQobV9vbGRTdHJ1Y3R1cmUpOwogICAgIHZpc2l0b3IuYXBwZW5kVW5i
YXJyaWVyZWQobV9uZXdTdHJ1Y3R1cmUpOwogfQogCitERUZJTkVfSU5TVEFOQ0VfVklTSVRfQ0hJ
TERSRU4oRGVzaXJlZFRyYW5zaXRpb24pOworCiBEZXNpcmVkVHJhbnNpdGlvbnM6OkRlc2lyZWRU
cmFuc2l0aW9ucygpCiB7CiB9CkBAIC03OCwxMiArODEsMTUgQEAgdm9pZCBEZXNpcmVkVHJhbnNp
dGlvbnM6OnJlYWxseUFkZChWTSYgdgogICAgICAgICBtX3RyYW5zaXRpb25zW2ldLnJlYWxseUFk
ZCh2bSwgY29tbW9uKTsKIH0KIAotdm9pZCBEZXNpcmVkVHJhbnNpdGlvbnM6OnZpc2l0Q2hpbGRy
ZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9p
ZCBEZXNpcmVkVHJhbnNpdGlvbnM6OnZpc2l0Q2hpbGRyZW5JbXBsKFZpc2l0b3ImIHZpc2l0b3Ip
CiB7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fdHJhbnNpdGlvbnMuc2l6ZSgpOyBp
KyspCiAgICAgICAgIG1fdHJhbnNpdGlvbnNbaV0udmlzaXRDaGlsZHJlbih2aXNpdG9yKTsKIH0K
IAorREVGSU5FX0lOU1RBTkNFX1ZJU0lUX0NISUxEUkVOKERlc2lyZWRUcmFuc2l0aW9ucyk7CisK
IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIAogI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkVHJhbnNpdGlvbnMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRUcmFuc2l0
aW9ucy5oCShyZXZpc2lvbiAyNjgwODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0Rlc2lyZWRUcmFuc2l0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC00Niw4ICs0Niw3IEBAIHB1
YmxpYzoKICAgICBEZXNpcmVkVHJhbnNpdGlvbihDb2RlQmxvY2sqLCBDb2RlQmxvY2sqIGNvZGVP
cmlnaW5Pd25lciwgU3RydWN0dXJlKiwgU3RydWN0dXJlKik7CiAKICAgICB2b2lkIHJlYWxseUFk
ZChWTSYsIENvbW1vbkRhdGEqKTsKLSAgICAKLSAgICB2b2lkIHZpc2l0Q2hpbGRyZW4oU2xvdFZp
c2l0b3ImKTsKKyAgICBERUNMQVJFX0lOU1RBTkNFX1ZJU0lUX0NISUxEUkVOOwogCiBwcml2YXRl
OgogICAgIENvZGVCbG9jayogbV9jb2RlQmxvY2s7CkBAIC02Myw3ICs2Miw3IEBAIHB1YmxpYzoK
IAogICAgIHZvaWQgYWRkTGF6aWx5KENvZGVCbG9jayosIENvZGVCbG9jayogY29kZU9yaWdpbk93
bmVyLCBTdHJ1Y3R1cmUqLCBTdHJ1Y3R1cmUqKTsKICAgICB2b2lkIHJlYWxseUFkZChWTSYsIENv
bW1vbkRhdGEqKTsKLSAgICB2b2lkIHZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKKyAgICBE
RUNMQVJFX0lOU1RBTkNFX1ZJU0lUX0NISUxEUkVOOwogCiBwcml2YXRlOgogICAgIFZlY3RvcjxE
ZXNpcmVkVHJhbnNpdGlvbj4gbV90cmFuc2l0aW9uczsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHRGVzaXJlZFdlYWtSZWZlcmVuY2VzLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXZWFrUmVmZXJlbmNlcy5jcHAJKHJldmlz
aW9uIDI2ODA4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFdlYWtS
ZWZlcmVuY2VzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODcsMTIgKzg3LDE1IEBAIHZvaWQgRGVz
aXJlZFdlYWtSZWZlcmVuY2VzOjpyZWFsbHlBZGQoVk0KICAgICB9CiB9CiAKLXZvaWQgRGVzaXJl
ZFdlYWtSZWZlcmVuY2VzOjp2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVt
cGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgRGVzaXJlZFdlYWtSZWZlcmVuY2VzOjp2aXNp
dENoaWxkcmVuSW1wbChWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGZvciAoSlNDZWxsKiB0YXJn
ZXQgOiBtX3JlZmVyZW5jZXMpCiAgICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQodGFy
Z2V0KTsKIH0KIAorREVGSU5FX0lOU1RBTkNFX1ZJU0lUX0NISUxEUkVOKERlc2lyZWRXZWFrUmVm
ZXJlbmNlcyk7CisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIAogI2VuZGlmIC8vIEVOQUJM
RShERkdfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2Vh
a1JlZmVyZW5jZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0Rlc2lyZWRXZWFrUmVmZXJlbmNlcy5oCShyZXZpc2lvbiAyNjgwODYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXZWFrUmVmZXJlbmNlcy5oCSh3b3JraW5nIGNvcHkp
CkBAIC01Myw3ICs1Myw3IEBAIHB1YmxpYzoKICAgICAKICAgICB2b2lkIHJlYWxseUFkZChWTSYs
IENvbW1vbkRhdGEqKTsKICAgICAKLSAgICB2b2lkIHZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3Im
KTsKKyAgICBERUNMQVJFX0lOU1RBTkNFX1ZJU0lUX0NISUxEUkVOOwogCiBwcml2YXRlOgogICAg
IENvZGVCbG9jayogbV9jb2RlQmxvY2s7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0dyYXBoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0dyYXBoLmNwcAkocmV2aXNpb24gMjY4MDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdHcmFwaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk3Nyw3ICs5NzcsNyBAQCBCbG9ja0xp
c3QgR3JhcGg6OmJsb2Nrc0luUG9zdE9yZGVyKGJvb2wgCiAgICAgICAgIH0KICAgICB9CiAKLSAg
ICBpZiAoaXNTYWZlVG9WYWxpZGF0ZSAmJiB2YWxpZGF0aW9uRW5hYmxlZCgpKSB7IC8vIFRoZXJl
IGFyZSB1c2VycyBvZiB0aGlzIHdoZXJlIHdlIGhhdmVuJ3QgeWV0IGJ1aWx0IG9mIHRoZSBDRkcg
ZW5vdWdoIHRvIGJlIGFibGUgdG8gcnVuIGRvbWluYXRvcnMuCisgICAgaWYgKGlzU2FmZVRvVmFs
aWRhdGUgJiYgdmFsaWRhdGlvbkVuYWJsZWQoKSkgeyAvLyBUaGVyZSBhcmUgdXNlcnMgb2YgdGhp
cyB3aGVyZSB3ZSBoYXZlbid0IHlldCBidWlsdCB0aGUgQ0ZHIGVub3VnaCB0byBiZSBhYmxlIHRv
IHJ1biBkb21pbmF0b3JzLgogICAgICAgICBhdXRvIHZhbGlkYXRlUmVzdWx0cyA9IFsmXSAoYXV0
byYgZG9taW5hdG9ycykgewogICAgICAgICAgICAgLy8gV2hlbiBpdGVyYXRpbmcgb3ZlciByZXZl
cnNlIHBvc3Qgb3JkZXIsIHdlIHNob3VsZCBzZWUgZG9taW5hdG9ycwogICAgICAgICAgICAgLy8g
YmVmb3JlIHRoaW5ncyB0aGV5IGRvbWluYXRlLgpAQCAtMTQ0OCw3ICsxNDQ4LDggQEAgdm9pZCBH
cmFwaDo6cmVnaXN0ZXJGcm96ZW5WYWx1ZXMoKQogICAgIG1fY29kZUJsb2NrLT5jb25zdGFudHNT
b3VyY2VDb2RlUmVwcmVzZW50YXRpb24oKS5zaHJpbmtUb0ZpdCgpOwogfQogCi12b2lkIEdyYXBo
Ojp2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUg
VmlzaXRvcj4KK3ZvaWQgR3JhcGg6OnZpc2l0Q2hpbGRyZW5JbXBsKFZpc2l0b3ImIHZpc2l0b3Ip
CiB7CiAgICAgZm9yIChGcm96ZW5WYWx1ZSogdmFsdWUgOiBtX2Zyb3plblZhbHVlcykgewogICAg
ICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKHZhbHVlLT52YWx1ZSgpKTsKQEAgLTE0NTYs
NiArMTQ1Nyw4IEBAIHZvaWQgR3JhcGg6OnZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHYKICAg
ICB9CiB9CiAKK0RFRklORV9GSU5BTF9WSVNJVF9DSElMRFJFTihHcmFwaCk7CisKIEZyb3plblZh
bHVlKiBHcmFwaDo6ZnJlZXplKEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgaWYgKFVOTElLRUxZKCF2
YWx1ZSkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCShyZXZpc2lvbiAy
NjgwODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEwMDAsOSArMTAwMCw5IEBAIHB1YmxpYzoKICAgICBib29sIGNhbkRvRmFzdFNw
cmVhZChOb2RlKiwgY29uc3QgQWJzdHJhY3RWYWx1ZSYpOwogICAgIAogICAgIHZvaWQgcmVnaXN0
ZXJGcm96ZW5WYWx1ZXMoKTsKLSAgICAKLSAgICB2b2lkIHZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0
b3ImKSBmaW5hbDsKLSAgICAKKworICAgIERFQ0xBUkVfRklOQUxfVklTSVRfQ0hJTERSRU47CisK
ICAgICB2b2lkIGxvZ0Fzc2VydGlvbkZhaWx1cmUoCiAgICAgICAgIHN0ZDo6bnVsbHB0cl90LCBj
b25zdCBjaGFyKiBmaWxlLCBpbnQgbGluZSwgY29uc3QgY2hhciogZnVuY3Rpb24sCiAgICAgICAg
IGNvbnN0IGNoYXIqIGFzc2VydGlvbik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1BsYW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
UGxhbi5jcHAJKHJldmlzaW9uIDI2ODA4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHUGxhbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY3Miw3ICs2NzIsOCBAQCBDb21waWxhdGlv
bktleSBQbGFuOjprZXkoKQogICAgIHJldHVybiBDb21waWxhdGlvbktleShtX2NvZGVCbG9jay0+
YWx0ZXJuYXRpdmUoKSwgbV9tb2RlKTsKIH0KIAotdm9pZCBQbGFuOjpjaGVja0xpdmVuZXNzQW5k
VmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZp
c2l0b3I+Cit2b2lkIFBsYW46OmNoZWNrTGl2ZW5lc3NBbmRWaXNpdENoaWxkcmVuSW1wbChWaXNp
dG9yJiB2aXNpdG9yKQogewogICAgIGlmICghaXNLbm93blRvQmVMaXZlRHVyaW5nR0MoKSkKICAg
ICAgICAgcmV0dXJuOwpAQCAtNzAyLDYgKzcwMyw4IEBAIHZvaWQgUGxhbjo6Y2hlY2tMaXZlbmVz
c0FuZFZpc2l0Q2hpbGRyZW4KICAgICBtX3RyYW5zaXRpb25zLnZpc2l0Q2hpbGRyZW4odmlzaXRv
cik7CiB9CiAKK0RFRklORV9JTlNUQU5DRV9TTE9UX1ZJU0lUT1JfTUVUSE9EKHZvaWQsIFBsYW4s
IGNoZWNrTGl2ZW5lc3NBbmRWaXNpdENoaWxkcmVuKTsKKwogdm9pZCBQbGFuOjpmaW5hbGl6ZUlu
R0MoKQogewogICAgIEFTU0VSVChtX3ZtKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHUGxhbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
UGxhbi5oCShyZXZpc2lvbiAyNjgwODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1BsYW4uaAkod29ya2luZyBjb3B5KQpAQCAtMzgsNiArMzgsNyBAQAogI2luY2x1ZGUgIk9wZXJh
bmRzLmgiCiAjaW5jbHVkZSAiUHJvZmlsZXJDb21waWxhdGlvbi5oIgogI2luY2x1ZGUgIlJlY29y
ZGVkU3RhdHVzZXMuaCIKKyNpbmNsdWRlICJTbG90VmlzaXRvck1hY3Jvcy5oIgogI2luY2x1ZGUg
PHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+CiAK
QEAgLTcyLDcgKzczLDcgQEAgcHVibGljOgogICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1
bmM+CiAgICAgdm9pZCBpdGVyYXRlQ29kZUJsb2Nrc0ZvckdDKGNvbnN0IEZ1bmMmKTsKLSAgICB2
b2lkIGNoZWNrTGl2ZW5lc3NBbmRWaXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CisgICAgREVD
TEFSRV9JTlNUQU5DRV9TTE9UX1ZJU0lUT1JfTUVUSE9EKHZvaWQsIGNoZWNrTGl2ZW5lc3NBbmRW
aXNpdENoaWxkcmVuKTsKICAgICBib29sIGlzS25vd25Ub0JlTGl2ZUR1cmluZ0dDKCk7CiAgICAg
dm9pZCBmaW5hbGl6ZUluR0MoKTsKICAgICB2b2lkIGNhbmNlbCgpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlcG9pbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZXBvaW50LmNwcAkocmV2aXNpb24gMjY4MDg2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlcG9pbnQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC04Myw3ICs4Myw4IEBAIHZvaWQgU2FmZXBvaW50OjpiZWdpbigpCiAgICAgfQogfQogCi12
b2lkIFNhZmVwb2ludDo6Y2hlY2tMaXZlbmVzc0FuZFZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3Im
IHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBTYWZlcG9pbnQ6OmNo
ZWNrTGl2ZW5lc3NBbmRWaXNpdENoaWxkcmVuSW1wbChWaXNpdG9yJiB2aXNpdG9yKQogewogICAg
IFJFTEVBU0VfQVNTRVJUKG1fZGlkQ2FsbEJlZ2luKTsKIApAQCAtOTcsNiArOTgsOCBAQCB2b2lk
IFNhZmVwb2ludDo6Y2hlY2tMaXZlbmVzc0FuZFZpc2l0Q2hpCiAgICAgICAgIG1fc2Nhbm5hYmxl
c1tpXS0+dmlzaXRDaGlsZHJlbih2aXNpdG9yKTsKIH0KIAorREVGSU5FX0lOU1RBTkNFX1NMT1Rf
VklTSVRPUl9NRVRIT0Qodm9pZCwgU2FmZXBvaW50LCBjaGVja0xpdmVuZXNzQW5kVmlzaXRDaGls
ZHJlbik7CisKIGJvb2wgU2FmZXBvaW50Ojppc0tub3duVG9CZUxpdmVEdXJpbmdHQygpCiB7CiAg
ICAgUkVMRUFTRV9BU1NFUlQobV9kaWRDYWxsQmVnaW4pOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTYWZlcG9pbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NhZmVwb2ludC5oCShyZXZpc2lvbiAyNjgwODYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVwb2ludC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsy
Nyw3IEBACiAKICNpZiBFTkFCTEUoREZHX0pJVCkKIAorI2luY2x1ZGUgIlNsb3RWaXNpdG9yTWFj
cm9zLmgiCiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTY3
LDcgKzY4LDcgQEAgcHVibGljOgogICAgIAogICAgIHZvaWQgYmVnaW4oKTsKICAgICAKLSAgICB2
b2lkIGNoZWNrTGl2ZW5lc3NBbmRWaXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CisgICAgREVD
TEFSRV9JTlNUQU5DRV9TTE9UX1ZJU0lUT1JfTUVUSE9EKHZvaWQsIGNoZWNrTGl2ZW5lc3NBbmRW
aXNpdENoaWxkcmVuKTsKICAgICBib29sIGlzS25vd25Ub0JlTGl2ZUR1cmluZ0dDKCk7CiAgICAg
dm9pZCBjYW5jZWwoKTsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U2Nhbm5hYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
Y2FubmFibGUuaAkocmV2aXNpb24gMjY4MDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTY2FubmFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzksNiArMzksNyBAQCBwdWJsaWM6
CiAgICAgdmlydHVhbCB+U2Nhbm5hYmxlKCkgeyB9CiAgICAgCiAgICAgdmlydHVhbCB2b2lkIHZp
c2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0Q2hp
bGRyZW4oRGVidWdTbG90VmlzaXRvciYpID0gMDsgLy8gbWxhbQogfTsKIAogfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlz
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlz
dC5jcHAJKHJldmlzaW9uIDI2ODA4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
V29ya2xpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNzIsNyArMzcyLDggQEAgdm9pZCBXb3Jr
bGlzdDo6cmVzdW1lQWxsVGhyZWFkcygpCiAgICAgbV9zdXNwZW5zaW9uTG9jay51bmxvY2soKTsK
IH0KIAotdm9pZCBXb3JrbGlzdDo6dmlzaXRXZWFrUmVmZXJlbmNlcyhTbG90VmlzaXRvciYgdmlz
aXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFdvcmtsaXN0Ojp2aXNpdFdl
YWtSZWZlcmVuY2VzSW1wbChWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFZNKiB2bSA9ICZ2aXNp
dG9yLmhlYXAoKS0+dm0oKTsKICAgICB7CkBAIC0zOTYsNiArMzk3LDggQEAgdm9pZCBXb3JrbGlz
dDo6dmlzaXRXZWFrUmVmZXJlbmNlcyhTbG90VgogICAgIH0KIH0KIAorREVGSU5FX0lOU1RBTkNF
X1NMT1RfVklTSVRPUl9NRVRIT0Qodm9pZCwgV29ya2xpc3QsIHZpc2l0V2Vha1JlZmVyZW5jZXMp
OworCiB2b2lkIFdvcmtsaXN0OjpyZW1vdmVEZWFkUGxhbnMoVk0mIHZtKQogewogICAgIHsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3QuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0LmgJKHJldmlzaW9uIDI2ODA4
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3QuaAkod29ya2luZyBj
b3B5KQpAQCAtNzMsNyArNzMsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc0FjdGl2ZUZvclZNKFZN
JikgY29uc3Q7CiAgICAgCiAgICAgLy8gT25seSBjYWxsZWQgb24gdGhlIG1haW4gdGhyZWFkIGFm
dGVyIHN1c3BlbmRpbmcgYWxsIHRocmVhZHMuCi0gICAgdm9pZCB2aXNpdFdlYWtSZWZlcmVuY2Vz
KFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9JTlNUQU5DRV9TTE9UX1ZJU0lUT1JfTUVUSE9E
KHZvaWQsIHZpc2l0V2Vha1JlZmVyZW5jZXMpOwogICAgIHZvaWQgcmVtb3ZlRGVhZFBsYW5zKFZN
Jik7CiAgICAgCiAgICAgdm9pZCByZW1vdmVOb25Db21waWxpbmdQbGFuc0ZvclZNKFZNJik7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAkocmV2aXNpb24gMjY4MDg2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2
OTcsNiArMjY5Nyw3IEBAIHZvaWQgSGVhcDo6ZGlkRnJlZUJsb2NrKHNpemVfdCBjYXBhY2l0eSkK
ICNlbmRpZgogfQogCisvLyBtbGFtIEZJWE1FCiB2b2lkIEhlYXA6OmFkZENvcmVDb25zdHJhaW50
cygpCiB7CiAgICAgbV9jb25zdHJhaW50U2V0LT5hZGQoCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9TbG90VmlzaXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmgJKHJldmlzaW9uIDI2ODA4NikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2OCw2ICsy
NjgsMTEgQEAgcHVibGljOgogI2VuZGlmCiB9OwogCitjbGFzcyBEZWJ1Z1Nsb3RWaXNpdG9yIDog
cHVibGljIFNsb3RWaXNpdG9yIC8vIG1sYW0gVEVTVAoreworCit9OworCiBjbGFzcyBQYXJhbGxl
bE1vZGVFbmFibGVyIHsKIHB1YmxpYzoKICAgICBQYXJhbGxlbE1vZGVFbmFibGVyKFNsb3RWaXNp
dG9yJiBzdGFjaykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9y
TWFjcm9zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZp
c2l0b3JNYWNyb3MuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9TbG90VmlzaXRvck1hY3Jvcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTY0IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNl
CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBEZWJ1Z1Nsb3RWaXNpdG9yOworY2xhc3MgSlND
ZWxsOworY2xhc3MgU2xvdFZpc2l0b3I7CisKKyNkZWZpbmUgREVDTEFSRV9VTlVTRURfU0xPVF9W
SVNJVE9SX1NUUlVDVF9FWFBBTkRFUjIoY291bnRlcl8pIFwKKyAgICBzdHJ1Y3QgVW51c2VkU2xv
dFZpc2l0b3JTdHJ1Y3RTb1dlQ2FuSGF2ZUFTZW1pY29sb24jI2NvdW50ZXJfIHsgfQorCisjZGVm
aW5lIERFQ0xBUkVfVU5VU0VEX1NMT1RfVklTSVRPUl9TVFJVQ1RfRVhQQU5ERVIoY291bnRlcl8p
IFwKKyAgICBERUNMQVJFX1VOVVNFRF9TTE9UX1ZJU0lUT1JfU1RSVUNUX0VYUEFOREVSMihjb3Vu
dGVyXykKKworI2RlZmluZSBERUNMQVJFX1VOVVNFRF9TTE9UX1ZJU0lUT1JfU1RSVUNUKCkgXAor
ICAgIERFQ0xBUkVfVU5VU0VEX1NMT1RfVklTSVRPUl9TVFJVQ1RfRVhQQU5ERVIoX19DT1VOVEVS
X18pCisKKy8vIE1hY3JvcyBmb3IgaW5zdGFuY2UgY3VzdG9tIHZpc2l0b3IgbWV0aG9kLgorCisj
ZGVmaW5lIERFQ0xBUkVfSU5TVEFOQ0VfU0xPVF9WSVNJVE9SX01FVEhPRF9JTVBMKHJldHVyblR5
cGVfLCBtZXRob2ROYW1lXywgcG9zdE1vZGlmaWVyXykgXAorICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFZpc2l0b3I+IHJldHVyblR5cGVfIG1ldGhvZE5hbWVfIyNJbXBsKFZpc2l0b3ImIHZpc2l0b3Ip
OyBcCisgICAgcmV0dXJuVHlwZV8gbWV0aG9kTmFtZV8oU2xvdFZpc2l0b3ImKSBwb3N0TW9kaWZp
ZXJfOyBcCisgICAgcmV0dXJuVHlwZV8gbWV0aG9kTmFtZV8oRGVidWdTbG90VmlzaXRvciYpIHBv
c3RNb2RpZmllcl87IFwKKyAgICBERUNMQVJFX1VOVVNFRF9TTE9UX1ZJU0lUT1JfU1RSVUNUKCkK
KworI2RlZmluZSBERUNMQVJFX0lOU1RBTkNFX1NMT1RfVklTSVRPUl9NRVRIT0QocmV0dXJuVHlw
ZV8sIG1ldGhvZE5hbWVfKSBcCisgICAgREVDTEFSRV9JTlNUQU5DRV9TTE9UX1ZJU0lUT1JfTUVU
SE9EX0lNUEwocmV0dXJuVHlwZV8sIG1ldGhvZE5hbWVfLCApCisKKworI2RlZmluZSBERUZJTkVf
SU5TVEFOQ0VfU0xPVF9WSVNJVE9SX01FVEhPRChyZXR1cm5UeXBlXywgY2xhc3NOYW1lXywgbWV0
aG9kTmFtZV8pIFwKKyAgICByZXR1cm5UeXBlXyBjbGFzc05hbWVfOjptZXRob2ROYW1lXyhTbG90
VmlzaXRvciYgdmlzaXRvcikgeyBtZXRob2ROYW1lXyMjSW1wbCh2aXNpdG9yKTsgfSBcCisgICAg
cmV0dXJuVHlwZV8gY2xhc3NOYW1lXzo6bWV0aG9kTmFtZV8oRGVidWdTbG90VmlzaXRvciYgdmlz
aXRvcikgIHsgbWV0aG9kTmFtZV8jI0ltcGwodmlzaXRvcik7IH0gXAorICAgIERFQ0xBUkVfVU5V
U0VEX1NMT1RfVklTSVRPUl9TVFJVQ1QoKQorCisvLyBNYWNyb3MgZm9yIGluc3RhbmNlIHZpc2l0
Q2hpbGRyZW4oKS4KKworI2RlZmluZSBERUNMQVJFX0lOU1RBTkNFX1ZJU0lUX0NISUxEUkVOIFwK
KyAgICBERUNMQVJFX0lOU1RBTkNFX1NMT1RfVklTSVRPUl9NRVRIT0Qodm9pZCwgdmlzaXRDaGls
ZHJlbikKKyNkZWZpbmUgREVDTEFSRV9GSU5BTF9WSVNJVF9DSElMRFJFTiBcCisgICAgREVDTEFS
RV9JTlNUQU5DRV9TTE9UX1ZJU0lUT1JfTUVUSE9EX0lNUEwodm9pZCwgdmlzaXRDaGlsZHJlbiwg
ZmluYWwpCisKKworI2RlZmluZSBERUZJTkVfSU5TVEFOQ0VfVklTSVRfQ0hJTERSRU4oY2xhc3NO
YW1lXykgXAorICAgIERFRklORV9JTlNUQU5DRV9TTE9UX1ZJU0lUT1JfTUVUSE9EKHZvaWQsIGNs
YXNzTmFtZV8sIHZpc2l0Q2hpbGRyZW4pCisjZGVmaW5lIERFRklORV9GSU5BTF9WSVNJVF9DSElM
RFJFTihjbGFzc05hbWVfKSBcCisgICAgREVGSU5FX0lOU1RBTkNFX1ZJU0lUX0NISUxEUkVOKGNs
YXNzTmFtZV8pCisKKy8vIE1hY3JvcyBmb3Igc3RhdGljIHZpc2l0Q2hpbGRyZW4oKS4KKworI2Rl
ZmluZSBERUNMQVJFX1ZJU0lUX0NISUxEUkVOX0lNUEwgXAorICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFZpc2l0b3I+IHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCosIFZpc2l0b3Im
KQorCisjZGVmaW5lIERFQ0xBUkVfVklTSVRfQ0hJTERSRU4gXAorICAgIERFQ0xBUkVfVklTSVRf
Q0hJTERSRU5fSU1QTDsgXAorICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBj
ZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcik7IFwKKyAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxk
cmVuKEpTQ2VsbCogY2VsbCwgRGVidWdTbG90VmlzaXRvciYgdmlzaXRvcikKKworI2RlZmluZSBE
RUNMQVJFX0VYUE9SVF9WSVNJVF9DSElMRFJFTiBcCisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJF
Tl9JTVBMOyBcCisgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJl
bihKU0NlbGwqLCBTbG90VmlzaXRvciYpOyAgXAorICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRp
YyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgRGVidWdTbG90VmlzaXRvciYpCisKKyNkZWZp
bmUgREVDTEFSRV9JTkxJTkVfVklTSVRfQ0hJTERSRU4gXAorICAgIERFQ0xBUkVfVklTSVRfQ0hJ
TERSRU5fSU1QTDsgXAorICAgIGlubGluZSBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2Vs
bCosIFNsb3RWaXNpdG9yJik7ICBcCisgICAgaW5saW5lIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKiwgRGVidWdTbG90VmlzaXRvciYpCisKKyNkZWZpbmUgREVDTEFSRV9URU1QTEFU
RV9WSVNJVF9DSElMRFJFTiBcCisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTgorCisKKyNkZWZp
bmUgREVGSU5FX1ZJU0lUX0NISUxEUkVOKGNsYXNzTmFtZV8pIFwKKyAgICB2b2lkIGNsYXNzTmFt
ZV86OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikgeyB2
aXNpdENoaWxkcmVuSW1wbChjZWxsLCB2aXNpdG9yKTsgfSBcCisgICAgdm9pZCBjbGFzc05hbWVf
Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgRGVidWdTbG90VmlzaXRvciYgdmlzaXRvcikg
eyB2aXNpdENoaWxkcmVuSW1wbChjZWxsLCB2aXNpdG9yKTsgfSBcCisgICAgREVDTEFSRV9VTlVT
RURfU0xPVF9WSVNJVE9SX1NUUlVDVCgpCisKKyNkZWZpbmUgREVGSU5FX0VYUE9SVF9WSVNJVF9D
SElMRFJFTihjbGFzc05hbWVfKSBcCisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBjbGFzc05h
bWVfOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsg
dmlzaXRDaGlsZHJlbkltcGwoY2VsbCwgdmlzaXRvcik7IH0gXAorICAgIEpTX0VYUE9SVF9QUklW
QVRFIHZvaWQgY2xhc3NOYW1lXzo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIERlYnVnU2xv
dFZpc2l0b3ImIHZpc2l0b3IpIHsgdmlzaXRDaGlsZHJlbkltcGwoY2VsbCwgdmlzaXRvcik7IH0g
XAorICAgIERFQ0xBUkVfVU5VU0VEX1NMT1RfVklTSVRPUl9TVFJVQ1QoKQorCisjZGVmaW5lIERF
RklORV9JTkxJTkVfVklTSVRfQ0hJTERSRU4oY2xhc3NOYW1lXykgXAorICAgIGlubGluZSB2b2lk
IGNsYXNzTmFtZV86OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlz
aXRvcikgeyB2aXNpdENoaWxkcmVuSW1wbChjZWxsLCB2aXNpdG9yKTsgfSBcCisgICAgaW5saW5l
IHZvaWQgY2xhc3NOYW1lXzo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIERlYnVnU2xvdFZp
c2l0b3ImIHZpc2l0b3IpIHsgdmlzaXRDaGlsZHJlbkltcGwoY2VsbCwgdmlzaXRvcik7IH0gXAor
ICAgIERFQ0xBUkVfVU5VU0VEX1NMT1RfVklTSVRPUl9TVFJVQ1QoKQorCisjZGVmaW5lIERFRklO
RV9URU1QTEFURV9WSVNJVF9DSElMRFJFTih0ZW1wbGF0ZUNsYXVzZV8sIGNsYXNzTmFtZV8pIFwK
KyAgICB0ZW1wbGF0ZUNsYXVzZV8gdm9pZCBjbGFzc05hbWVfOjp2aXNpdENoaWxkcmVuKEpTQ2Vs
bCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsgdmlzaXRDaGlsZHJlbkltcGwoY2VsbCwg
dmlzaXRvcik7IH0gXAorICAgIHRlbXBsYXRlQ2xhdXNlXyB2b2lkIGNsYXNzTmFtZV86OnZpc2l0
Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBEZWJ1Z1Nsb3RWaXNpdG9yJiB2aXNpdG9yKSB7IHZpc2l0
Q2hpbGRyZW5JbXBsKGNlbGwsIHZpc2l0b3IpOyB9IFwKKyAgICBERUNMQVJFX1VOVVNFRF9TTE9U
X1ZJU0lUT1JfU1RSVUNUKCkKKworLy8gTWFjcm9zIGZvciB2aXNpdE91dHB1dENvbnN0cmFpbnQo
KS4KKworI2RlZmluZSBERUNMQVJFX1ZJU0lUX09VVFBVVF9DT05TVFJBSU5UU19JTVBMIFwKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiBzdGF0aWMgdm9pZCB2aXNpdE91dHB1dENvbnN0
cmFpbnRzSW1wbChKU0NlbGwqLCBWaXNpdG9yJikKKworI2RlZmluZSBERUNMQVJFX1ZJU0lUX09V
VFBVVF9DT05TVFJBSU5UUyBcCisgICAgREVDTEFSRV9WSVNJVF9PVVRQVVRfQ09OU1RSQUlOVFNf
SU1QTDsgXAorICAgIHN0YXRpYyB2b2lkIHZpc2l0T3V0cHV0Q29uc3RyYWludHMoSlNDZWxsKiwg
U2xvdFZpc2l0b3ImKTsgIFwKKyAgICBzdGF0aWMgdm9pZCB2aXNpdE91dHB1dENvbnN0cmFpbnRz
KEpTQ2VsbCosIERlYnVnU2xvdFZpc2l0b3ImKQorCisjZGVmaW5lIERFQ0xBUkVfRVhQT1JUX1ZJ
U0lUX09VVFBVVF9DT05TVFJBSU5UUyBcCisgICAgREVDTEFSRV9WSVNJVF9PVVRQVVRfQ09OU1RS
QUlOVFNfSU1QTDsgXAorICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIHZpc2l0T3V0
cHV0Q29uc3RyYWludHMoSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsgIFwKKyAgICBKU19FWFBPUlRf
UFJJVkFURSBzdGF0aWMgdm9pZCB2aXNpdE91dHB1dENvbnN0cmFpbnRzKEpTQ2VsbCosIERlYnVn
U2xvdFZpc2l0b3ImKQorCisjZGVmaW5lIERFQ0xBUkVfSU5MSU5FX1ZJU0lUX09VVFBVVF9DT05T
VFJBSU5UUyBcCisgICAgREVDTEFSRV9WSVNJVF9PVVRQVVRfQ09OU1RSQUlOVFNfSU1QTDsgXAor
ICAgIGlubGluZSBzdGF0aWMgdm9pZCB2aXNpdE91dHB1dENvbnN0cmFpbnRzKEpTQ2VsbCosIFNs
b3RWaXNpdG9yJik7ICBcCisgICAgaW5saW5lIHN0YXRpYyB2b2lkIHZpc2l0T3V0cHV0Q29uc3Ry
YWludHMoSlNDZWxsKiwgRGVidWdTbG90VmlzaXRvciYpCisKKyNkZWZpbmUgREVDTEFSRV9URU1Q
TEFURV9WSVNJVF9PVVRQVVRfQ09OU1RSQUlOVFMgREVDTEFSRV9WSVNJVF9PVVRQVVRfQ09OU1RS
QUlOVFMKKworCisjZGVmaW5lIERFRklORV9WSVNJVF9PVVRQVVRfQ09OU1RSQUlOVFMoY2xhc3NO
YW1lXykgXAorICAgIHZvaWQgY2xhc3NOYW1lXzo6dmlzaXRPdXRwdXRDb25zdHJhaW50cyhKU0Nl
bGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKSB7IHZpc2l0T3V0cHV0Q29uc3RyYWludHNJ
bXBsKGNlbGwsIHZpc2l0b3IpOyB9IFwKKyAgICB2b2lkIGNsYXNzTmFtZV86OnZpc2l0T3V0cHV0
Q29uc3RyYWludHMoSlNDZWxsKiBjZWxsLCBEZWJ1Z1Nsb3RWaXNpdG9yJiB2aXNpdG9yKSB7IHZp
c2l0T3V0cHV0Q29uc3RyYWludHNJbXBsKGNlbGwsIHZpc2l0b3IpOyB9IFwKKyAgICBERUNMQVJF
X1VOVVNFRF9TTE9UX1ZJU0lUT1JfU1RSVUNUKCkKKworI2RlZmluZSBERUZJTkVfRVhQT1JUX1ZJ
U0lUX09VVFBVVF9DT05TVFJBSU5UUyhjbGFzc05hbWVfKSBcCisgICAgSlNfRVhQT1JUX1BSSVZB
VEUgdm9pZCBjbGFzc05hbWVfOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzKEpTQ2VsbCogY2VsbCwg
U2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsgdmlzaXRPdXRwdXRDb25zdHJhaW50c0ltcGwoY2VsbCwg
dmlzaXRvcik7IH0gXAorICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgY2xhc3NOYW1lXzo6dmlz
aXRPdXRwdXRDb25zdHJhaW50cyhKU0NlbGwqIGNlbGwsIERlYnVnU2xvdFZpc2l0b3ImIHZpc2l0
b3IpIHsgdmlzaXRPdXRwdXRDb25zdHJhaW50c0ltcGwoY2VsbCwgdmlzaXRvcik7IH0gXAorICAg
IERFQ0xBUkVfVU5VU0VEX1NMT1RfVklTSVRPUl9TVFJVQ1QoKQorCisjZGVmaW5lIERFRklORV9J
TkxJTkVfVklTSVRfT1VUUFVUX0NPTlNUUkFJTlRTKGNsYXNzTmFtZV8pIFwKKyAgICBpbmxpbmUg
dm9pZCBjbGFzc05hbWVfOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzKEpTQ2VsbCogY2VsbCwgU2xv
dFZpc2l0b3ImIHZpc2l0b3IpIHsgdmlzaXRPdXRwdXRDb25zdHJhaW50c0ltcGwoY2VsbCwgdmlz
aXRvcik7IH0gXAorICAgIGlubGluZSB2b2lkIGNsYXNzTmFtZV86OnZpc2l0T3V0cHV0Q29uc3Ry
YWludHMoSlNDZWxsKiBjZWxsLCBEZWJ1Z1Nsb3RWaXNpdG9yJiB2aXNpdG9yKSB7IHZpc2l0T3V0
cHV0Q29uc3RyYWludHNJbXBsKGNlbGwsIHZpc2l0b3IpOyB9IFwKKyAgICBERUNMQVJFX1VOVVNF
RF9TTE9UX1ZJU0lUT1JfU1RSVUNUKCkKKworI2RlZmluZSBERUZJTkVfVEVNUExBVEVfVklTSVRf
T1VUUFVUX0NPTlNUUkFJTlRTKHRlbXBsYXRlQ2xhdXNlXywgY2xhc3NOYW1lXykgXAorICAgIHRl
bXBsYXRlQ2xhdXNlXyB2b2lkIGNsYXNzTmFtZV86OnZpc2l0T3V0cHV0Q29uc3RyYWludHMoSlND
ZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikgeyB2aXNpdE91dHB1dENvbnN0cmFpbnRz
SW1wbChjZWxsLCB2aXNpdG9yKTsgfSBcCisgICAgdGVtcGxhdGVDbGF1c2VfIHZvaWQgY2xhc3NO
YW1lXzo6dmlzaXRPdXRwdXRDb25zdHJhaW50cyhKU0NlbGwqIGNlbGwsIERlYnVnU2xvdFZpc2l0
b3ImIHZpc2l0b3IpIHsgdmlzaXRPdXRwdXRDb25zdHJhaW50c0ltcGwoY2VsbCwgdmlzaXRvcik7
IH0gXAorICAgIERFQ0xBUkVfVU5VU0VEX1NMT1RfVklTSVRPUl9TVFJVQ1QoKQorCit9IC8vIG5h
bWVzcGFjZSBKU0MKKwordXNpbmcgSlNDOjpKU0NlbGw7Cit1c2luZyBKU0M6OlNsb3RWaXNpdG9y
OwordXNpbmcgSlNDOjpEZWJ1Z1Nsb3RWaXNpdG9yOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ludGVycHJldGVyL1NoYWRvd0NoaWNrZW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TaGFkb3dDaGlja2VuLmNwcAkocmV2aXNpb24gMjY4
MDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1NoYWRvd0NoaWNrZW4u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NDAsNyArNDQwLDggQEAgdm9pZCBTaGFkb3dDaGlja2Vu
Ojp1cGRhdGUoVk0mIHZtLCBDYWxsRgogICAgICAgICBkYXRhTG9nKCIgICAgQWZ0ZXIgY2xlYW4t
dXA6ICIsICp0aGlzLCAiXG4iKTsKIH0KIAotdm9pZCBTaGFkb3dDaGlja2VuOjp2aXNpdENoaWxk
cmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3Zv
aWQgU2hhZG93Q2hpY2tlbjo6dmlzaXRDaGlsZHJlbkltcGwoVmlzaXRvciYgdmlzaXRvcikKIHsK
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2xvZ0N1cnNvciAtIG1fbG9nOyBpLS07KSB7CiAgICAg
ICAgIEpTT2JqZWN0KiBjYWxsZWUgPSBtX2xvZ1tpXS5jYWxsZWU7CkBAIC00NjUsNiArNDY2LDgg
QEAgdm9pZCBTaGFkb3dDaGlja2VuOjp2aXNpdENoaWxkcmVuKFNsb3RWaQogICAgIH0KIH0KIAor
REVGSU5FX0lOU1RBTkNFX1ZJU0lUX0NISUxEUkVOKFNoYWRvd0NoaWNrZW4pOworCiB2b2lkIFNo
YWRvd0NoaWNrZW46OnJlc2V0KCkKIHsKICAgICBtX2xvZ0N1cnNvciA9IG1fbG9nOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1NoYWRvd0NoaWNrZW4uaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU2hhZG93Q2hpY2tlbi5o
CShyZXZpc2lvbiAyNjgwODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIv
U2hhZG93Q2hpY2tlbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAKICNpbmNs
dWRlICJDYWxsRnJhbWUuaCIKICNpbmNsdWRlICJKU0NKU1ZhbHVlLmgiCisjaW5jbHVkZSAiU2xv
dFZpc2l0b3JNYWNyb3MuaCIKICNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgogI2luY2x1ZGUg
PHd0Zi9Ob25jb3B5YWJsZS5oPgogI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgpAQCAtMTk2
LDcgKzE5Nyw3IEBAIHB1YmxpYzoKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgogICAg
IHZvaWQgaXRlcmF0ZShWTSYsIENhbGxGcmFtZSosIGNvbnN0IEZ1bmN0b3ImKTsKICAgICAKLSAg
ICB2b2lkIHZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX0lOU1RBTkNF
X1ZJU0lUX0NISUxEUkVOOwogICAgIHZvaWQgcmVzZXQoKTsKICAgICAKICAgICAvLyBKSVQgc3Vw
cG9ydC4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Fic3RyYWN0TW9kdWxl
UmVjb3JkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9B
YnN0cmFjdE1vZHVsZVJlY29yZC5jcHAJKHJldmlzaW9uIDI2ODA4NikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0Fic3RyYWN0TW9kdWxlUmVjb3JkLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNjAsNyArNjAsOCBAQCB2b2lkIEFic3RyYWN0TW9kdWxlUmVjb3JkOjpmaW5pc2hDcmVh
dGlvCiAgICAgcHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiZGVwZW5k
ZW5jaWVzTWFwIl9zKSwgbV9kZXBlbmRlbmNpZXNNYXAuZ2V0KCkpOwogfQogCi12b2lkIEFic3Ry
YWN0TW9kdWxlUmVjb3JkOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3Im
IHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBBYnN0cmFjdE1vZHVs
ZVJlY29yZDo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9y
KQogewogICAgIEFic3RyYWN0TW9kdWxlUmVjb3JkKiB0aGlzT2JqZWN0ID0ganNDYXN0PEFic3Ry
YWN0TW9kdWxlUmVjb3JkKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0
aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNzAsNiArNzEsOCBAQCB2b2lkIEFic3RyYWN0TW9kdWxl
UmVjb3JkOjp2aXNpdENoaWxkcmVuCiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9k
ZXBlbmRlbmNpZXNNYXApOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oQWJzdHJhY3RNb2R1
bGVSZWNvcmQpOworCiB2b2lkIEFic3RyYWN0TW9kdWxlUmVjb3JkOjphcHBlbmRSZXF1ZXN0ZWRN
b2R1bGUoY29uc3QgSWRlbnRpZmllciYgbW9kdWxlTmFtZSkKIHsKICAgICBtX3JlcXVlc3RlZE1v
ZHVsZXMuYWRkKG1vZHVsZU5hbWUuaW1wbCgpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0Fic3RyYWN0TW9kdWxlUmVjb3JkLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQWJzdHJhY3RNb2R1bGVSZWNvcmQuaAkocmV2aXNpb24gMjY4
MDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQWJzdHJhY3RNb2R1bGVSZWNv
cmQuaAkod29ya2luZyBjb3B5KQpAQCAtMTM2LDcgKzEzNiw3IEBAIHByb3RlY3RlZDoKICAgICBB
YnN0cmFjdE1vZHVsZVJlY29yZChWTSYsIFN0cnVjdHVyZSosIGNvbnN0IElkZW50aWZpZXImKTsK
ICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTR2xvYmFsT2JqZWN0KiwgVk0mKTsKIAotICAgIHN0
YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNM
QVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgdm9pZCBzZXRNb2R1bGVFbnZpcm9ubWVudChKU0ds
b2JhbE9iamVjdCosIEpTTW9kdWxlRW52aXJvbm1lbnQqKTsKIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQ2xhc3NJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQ2xhc3NJbmZvLmgJKHJldmlzaW9uIDI2ODA4NikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NsYXNzSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC00
NCw5ICs0NCw2IEBAIHN0cnVjdCBNZXRob2RUYWJsZSB7CiAgICAgdXNpbmcgRGVzdHJveUZ1bmN0
aW9uUHRyID0gdm9pZCAoKikoSlNDZWxsKik7CiAgICAgRGVzdHJveUZ1bmN0aW9uUHRyIE1FVEhP
RF9UQUJMRV9FTlRSWShkZXN0cm95KTsKIAotICAgIHVzaW5nIFZpc2l0Q2hpbGRyZW5GdW5jdGlv
blB0ciA9IHZvaWQgKCopKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7Ci0gICAgVmlzaXRDaGlsZHJl
bkZ1bmN0aW9uUHRyIE1FVEhPRF9UQUJMRV9FTlRSWSh2aXNpdENoaWxkcmVuKTsKLQogICAgIHVz
aW5nIEdldENhbGxEYXRhRnVuY3Rpb25QdHIgPSBDYWxsRGF0YSAoKikoSlNDZWxsKik7CiAgICAg
R2V0Q2FsbERhdGFGdW5jdGlvblB0ciBNRVRIT0RfVEFCTEVfRU5UUlkoZ2V0Q2FsbERhdGEpOwog
CkBAIC0xMjgsOCArMTI1LDIyIEBAIHN0cnVjdCBNZXRob2RUYWJsZSB7CiAgICAgdXNpbmcgRXN0
aW1hdGVkU2l6ZUZ1bmN0aW9uUHRyID0gc2l6ZV90ICgqKShKU0NlbGwqLCBWTSYpOwogICAgIEVz
dGltYXRlZFNpemVGdW5jdGlvblB0ciBNRVRIT0RfVEFCTEVfRU5UUlkoZXN0aW1hdGVkU2l6ZSk7
CiAKKyAgICB1c2luZyBWaXNpdENoaWxkcmVuRnVuY3Rpb25QdHIgPSB2b2lkICgqKShKU0NlbGwq
LCBTbG90VmlzaXRvciYpOworICAgIFZpc2l0Q2hpbGRyZW5GdW5jdGlvblB0ciBNRVRIT0RfVEFC
TEVfRU5UUlkodmlzaXRDaGlsZHJlbldpdGhTbG90VmlzaXRvcik7CisKICAgICB1c2luZyBWaXNp
dE91dHB1dENvbnN0cmFpbnRzUHRyID0gdm9pZCAoKikoSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsK
LSAgICBWaXNpdE91dHB1dENvbnN0cmFpbnRzUHRyIE1FVEhPRF9UQUJMRV9FTlRSWSh2aXNpdE91
dHB1dENvbnN0cmFpbnRzKTsKKyAgICBWaXNpdE91dHB1dENvbnN0cmFpbnRzUHRyIE1FVEhPRF9U
QUJMRV9FTlRSWSh2aXNpdE91dHB1dENvbnN0cmFpbnRzV2l0aFNsb3RWaXNpdG9yKTsKKworICAg
IHVzaW5nIFZpc2l0Q2hpbGRyZW5XaXRoRGVidWdTbG90VmlzaXRvclB0ciA9IHZvaWQgKCopKEpT
Q2VsbCosIERlYnVnU2xvdFZpc2l0b3ImKTsKKyAgICBWaXNpdENoaWxkcmVuV2l0aERlYnVnU2xv
dFZpc2l0b3JQdHIgTUVUSE9EX1RBQkxFX0VOVFJZKHZpc2l0Q2hpbGRyZW5XaXRoRGVidWdTbG90
VmlzaXRvcik7CisKKyAgICB1c2luZyBWaXNpdE91dHB1dENvbnN0cmFpbnRzV2l0aERlYnVnU2xv
dFZpc2l0b3JQdHIgPSB2b2lkICgqKShKU0NlbGwqLCBEZWJ1Z1Nsb3RWaXNpdG9yJik7CisgICAg
VmlzaXRPdXRwdXRDb25zdHJhaW50c1dpdGhEZWJ1Z1Nsb3RWaXNpdG9yUHRyIE1FVEhPRF9UQUJM
RV9FTlRSWSh2aXNpdE91dHB1dENvbnN0cmFpbnRzV2l0aERlYnVnU2xvdFZpc2l0b3IpOworCisg
ICAgQUxXQVlTX0lOTElORSB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90Vmlz
aXRvciYgdmlzaXRvcikgY29uc3QgeyB2aXNpdENoaWxkcmVuV2l0aFNsb3RWaXNpdG9yKGNlbGws
IHZpc2l0b3IpOyB9CisgICAgQUxXQVlTX0lOTElORSB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiBjZWxsLCBEZWJ1Z1Nsb3RWaXNpdG9yJiB2aXNpdG9yKSBjb25zdCB7IHZpc2l0Q2hpbGRyZW5X
aXRoRGVidWdTbG90VmlzaXRvcihjZWxsLCB2aXNpdG9yKTsgfQorICAgIEFMV0FZU19JTkxJTkUg
dm9pZCB2aXNpdE91dHB1dENvbnN0cmFpbnRzKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZp
c2l0b3IpIGNvbnN0IHsgdmlzaXRPdXRwdXRDb25zdHJhaW50c1dpdGhTbG90VmlzaXRvcihjZWxs
LCB2aXNpdG9yKTsgfQorICAgIEFMV0FZU19JTkxJTkUgdm9pZCB2aXNpdE91dHB1dENvbnN0cmFp
bnRzKEpTQ2VsbCogY2VsbCwgRGVidWdTbG90VmlzaXRvciYgdmlzaXRvcikgY29uc3QgeyB2aXNp
dE91dHB1dENvbnN0cmFpbnRzV2l0aERlYnVnU2xvdFZpc2l0b3IoY2VsbCwgdmlzaXRvcik7IH0K
IH07CiAKICNkZWZpbmUgQ1JFQVRFX01FTUJFUl9DSEVDS0VSKG1lbWJlcikgXApAQCAtMTU1LDcg
KzE2Niw2IEBAIHN0cnVjdCBNZXRob2RUYWJsZSB7CiAgICAgSlNDYXN0aW5nSGVscGVyczo6SW5o
ZXJpdHNUcmFpdHM8Q2xhc3NOYW1lPjo6dHlwZVJhbmdlLCBcCiAgICAgeyBcCiAgICAgICAgICZD
bGFzc05hbWU6OmRlc3Ryb3ksIFwKLSAgICAgICAgJkNsYXNzTmFtZTo6dmlzaXRDaGlsZHJlbiwg
XAogICAgICAgICAmQ2xhc3NOYW1lOjpnZXRDYWxsRGF0YSwgXAogICAgICAgICAmQ2xhc3NOYW1l
OjpnZXRDb25zdHJ1Y3REYXRhLCBcCiAgICAgICAgICZDbGFzc05hbWU6OnB1dCwgXApAQCAtMTg0
LDYgKzE5NCw5IEBAIHN0cnVjdCBNZXRob2RUYWJsZSB7CiAgICAgICAgICZDbGFzc05hbWU6OmR1
bXBUb1N0cmVhbSwgXAogICAgICAgICAmQ2xhc3NOYW1lOjphbmFseXplSGVhcCwgXAogICAgICAg
ICAmQ2xhc3NOYW1lOjplc3RpbWF0ZWRTaXplLCBcCisgICAgICAgICZDbGFzc05hbWU6OnZpc2l0
Q2hpbGRyZW4sIFwKKyAgICAgICAgJkNsYXNzTmFtZTo6dmlzaXRPdXRwdXRDb25zdHJhaW50cywg
XAorICAgICAgICAmQ2xhc3NOYW1lOjp2aXNpdENoaWxkcmVuLCBcCiAgICAgICAgICZDbGFzc05h
bWU6OnZpc2l0T3V0cHV0Q29uc3RyYWludHMsIFwKICAgICB9LCBcCiAgICAgQ2xhc3NOYW1lOjpU
eXBlZEFycmF5U3RvcmFnZVR5cGUsIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0Nsb25lZEFyZ3VtZW50cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQ2xvbmVkQXJndW1lbnRzLmNwcAkocmV2aXNpb24gMjY4MDg2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xvbmVkQXJndW1lbnRzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjY3LDcgKzI2Nyw4IEBAIHZvaWQgQ2xvbmVkQXJndW1lbnRzOjptYXRlcmlhbGl6
ZVNwZWNpYWwKICAgICAgICAgbWF0ZXJpYWxpemVTcGVjaWFscyhnbG9iYWxPYmplY3QpOwogfQog
Ci12b2lkIENsb25lZEFyZ3VtZW50czo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgQ2xvbmVk
QXJndW1lbnRzOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0
b3IpCiB7CiAgICAgQ2xvbmVkQXJndW1lbnRzKiB0aGlzT2JqZWN0ID0ganNDYXN0PENsb25lZEFy
Z3VtZW50cyo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVj
dCwgaW5mbygpKTsKQEAgLTI3NSw1ICsyNzYsNyBAQCB2b2lkIENsb25lZEFyZ3VtZW50czo6dmlz
aXRDaGlsZHJlbihKU0NlCiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9jYWxsZWUp
OwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oQ2xvbmVkQXJndW1lbnRzKTsKKwogfSAvLyBu
YW1lc3BhY2UgSlNDCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Nsb25l
ZEFyZ3VtZW50cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0Nsb25lZEFyZ3VtZW50cy5oCShyZXZpc2lvbiAyNjgwODYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9DbG9uZWRBcmd1bWVudHMuaAkod29ya2luZyBjb3B5KQpAQCAtNjIsNyAr
NjIsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZN
JiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlIHByb3RvdHlwZSk7CiAgICAgc3RhdGljIFN0cnVj
dHVyZSogY3JlYXRlU2xvd1B1dFN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1
ZSBwcm90b3R5cGUpOwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBT
bG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBERUNMQVJF
X0lORk87CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3Vt
ZW50cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGly
ZWN0QXJndW1lbnRzLmNwcAkocmV2aXNpb24gMjY4MDg2KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvRGlyZWN0QXJndW1lbnRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTAsNyAr
OTAsOCBAQCBzaXplX3QgRGlyZWN0QXJndW1lbnRzOjplc3RpbWF0ZWRTaXplKEpTCiAgICAgcmV0
dXJuIEJhc2U6OmVzdGltYXRlZFNpemUoY2VsbCwgdm0pICsgbWFwcGVkQXJndW1lbnRzU2l6ZSAr
IG1vZGlmaWVkQXJndW1lbnRzU2l6ZTsKIH0KIAotdm9pZCBEaXJlY3RBcmd1bWVudHM6OnZpc2l0
Q2hpbGRyZW4oSlNDZWxsKiB0aGlzQ2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0
ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBEaXJlY3RBcmd1bWVudHM6OnZpc2l0Q2hpbGRyZW5J
bXBsKEpTQ2VsbCogdGhpc0NlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgRGlyZWN0QXJn
dW1lbnRzKiB0aGlzT2JqZWN0ID0gc3RhdGljX2Nhc3Q8RGlyZWN0QXJndW1lbnRzKj4odGhpc0Nl
bGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsK
QEAgLTEwNCw2ICsxMDUsOCBAQCB2b2lkIERpcmVjdEFyZ3VtZW50czo6dmlzaXRDaGlsZHJlbihK
U0NlCiAgICAgR2VuZXJpY0FyZ3VtZW50czxEaXJlY3RBcmd1bWVudHM+Ojp2aXNpdENoaWxkcmVu
KHRoaXNDZWxsLCB2aXNpdG9yKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKERpcmVjdEFy
Z3VtZW50cyk7CisKIFN0cnVjdHVyZSogRGlyZWN0QXJndW1lbnRzOjpjcmVhdGVTdHJ1Y3R1cmUo
Vk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkK
IHsKICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90
eXBlLCBUeXBlSW5mbyhEaXJlY3RBcmd1bWVudHNUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8o
KSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EaXJlY3RBcmd1bWVudHMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EaXJlY3RBcmd1
bWVudHMuaAkocmV2aXNpb24gMjY4MDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvRGlyZWN0QXJndW1lbnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTY1LDcgKzY1LDcgQEAgcHVi
bGljOgogICAgIHN0YXRpYyBEaXJlY3RBcmd1bWVudHMqIGNyZWF0ZUJ5Q29weWluZyhKU0dsb2Jh
bE9iamVjdCosIENhbGxGcmFtZSopOwogCiAgICAgc3RhdGljIHNpemVfdCBlc3RpbWF0ZWRTaXpl
KEpTQ2VsbCosIFZNJik7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBT
bG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAgICAgCiAgICAgdWlu
dDMyX3QgaW50ZXJuYWxMZW5ndGgoKSBjb25zdAogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0V2YWxFeGVjdXRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9FdmFsRXhlY3V0YWJsZS5jcHAJKHJldmlzaW9uIDI2ODA4
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V2YWxFeGVjdXRhYmxlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDksNyArNDksOCBAQCBhdXRvIEV2YWxFeGVjdXRhYmxlOjplbnN1
cmVUZW1wbGF0ZU9iamVjCiAgICAgcmV0dXJuIGVuc3VyZVRlbXBsYXRlT2JqZWN0TWFwSW1wbCht
X3RlbXBsYXRlT2JqZWN0TWFwKTsKIH0KIAotdm9pZCBFdmFsRXhlY3V0YWJsZTo6dmlzaXRDaGls
ZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5h
bWUgVmlzaXRvcj4KK3ZvaWQgRXZhbEV4ZWN1dGFibGU6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2Vs
bCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBFdmFsRXhlY3V0YWJsZSogdGhpc09i
amVjdCA9IGpzQ2FzdDxFdmFsRXhlY3V0YWJsZSo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpF
Q1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTYzLDQgKzY0LDYgQEAgdm9pZCBF
dmFsRXhlY3V0YWJsZTo6dmlzaXRDaGlsZHJlbihKU0NlbAogICAgIH0KIH0KIAorREVGSU5FX1ZJ
U0lUX0NISUxEUkVOKEV2YWxFeGVjdXRhYmxlKTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FdmFsRXhlY3V0YWJsZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V2YWxFeGVjdXRhYmxlLmgJKHJl
dmlzaW9uIDI2ODA4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V2YWxFeGVj
dXRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTc4LDcgKzc4LDcgQEAgcHJvdGVjdGVkOgogICAg
IHVzaW5nIEJhc2U6OmZpbmlzaENyZWF0aW9uOwogICAgIEV2YWxFeGVjdXRhYmxlKEpTR2xvYmFs
T2JqZWN0KiwgY29uc3QgU291cmNlQ29kZSYsIGJvb2wgaW5TdHJpY3RDb250ZXh0LCBEZXJpdmVk
Q29udGV4dFR5cGUsIGJvb2wgaXNBcnJvd0Z1bmN0aW9uQ29udGV4dCwgYm9vbCBpc0luc2lkZU9y
ZGluYXJ5RnVuY3Rpb24sIEV2YWxDb250ZXh0VHlwZSwgTmVlZHNDbGFzc0ZpZWxkSW5pdGlhbGl6
ZXIpOwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRv
ciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICB1bnNpZ25lZCBtX25lZWRz
Q2xhc3NGaWVsZEluaXRpYWxpemVyIDogMTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvRXhjZXB0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9FeGNlcHRpb24uY3BwCShyZXZpc2lvbiAyNjgwODYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9FeGNlcHRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Myw3
ICs1Myw4IEBAIFN0cnVjdHVyZSogRXhjZXB0aW9uOjpjcmVhdGVTdHJ1Y3R1cmUoVk0KICAgICBy
ZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBl
SW5mbyhDZWxsVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwogfQogCi12b2lkIEV4Y2Vw
dGlvbjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQor
dGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgRXhjZXB0aW9uOjp2aXNpdENoaWxkcmVu
SW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgRXhjZXB0aW9uKiB0
aGlzT2JqZWN0ID0ganNDYXN0PEV4Y2VwdGlvbio+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpF
Q1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTY0LDYgKzY1LDggQEAgdm9pZCBF
eGNlcHRpb246OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZQogICAgICAgICBmcmFtZS52aXNpdENo
aWxkcmVuKHZpc2l0b3IpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oRXhjZXB0aW9uKTsK
KwogRXhjZXB0aW9uOjpFeGNlcHRpb24oVk0mIHZtKQogICAgIDogQmFzZSh2bSwgdm0uZXhjZXB0
aW9uU3RydWN0dXJlLmdldCgpKQogewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvRXhjZXB0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvRXhjZXB0aW9uLmgJKHJldmlzaW9uIDI2ODA4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0V4Y2VwdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC01MSw3ICs1MSw3IEBAIHB1
YmxpYzoKIAogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xv
YmFsT2JqZWN0KiwgSlNWYWx1ZSBwcm90b3R5cGUpOwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRD
aGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERS
RU47CiAKICAgICBERUNMQVJFX0VYUE9SVF9JTkZPOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9GdW5jdGlvbkV4ZWN1dGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZS5jcHAJKHJldmlzaW9u
IDI2ODA4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uRXhlY3V0
YWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY3LDcgKzY3LDggQEAgRnVuY3Rpb25Db2RlQmxv
Y2sqIEZ1bmN0aW9uRXhlY3V0YWJsZTo6YgogICAgIHJldHVybiBzdGF0aWNfY2FzdDxGdW5jdGlv
bkNvZGVCbG9jayo+KGVkZ2UtPmNvZGVCbG9jaygpLT5iYXNlbGluZUFsdGVybmF0aXZlKCkpOwog
fQogCi12b2lkIEZ1bmN0aW9uRXhlY3V0YWJsZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGws
IFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQg
RnVuY3Rpb25FeGVjdXRhYmxlOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0
b3ImIHZpc2l0b3IpCiB7CiAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiB0aGlzT2JqZWN0ID0ganND
YXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5I
RVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTg2LDYgKzg3LDggQEAgdm9pZCBGdW5jdGlv
bkV4ZWN1dGFibGU6OnZpc2l0Q2hpbGRyZW4oSgogICAgIH0KIH0KIAorREVGSU5FX1ZJU0lUX0NI
SUxEUkVOKEZ1bmN0aW9uRXhlY3V0YWJsZSk7CisKIEZ1bmN0aW9uRXhlY3V0YWJsZSogRnVuY3Rp
b25FeGVjdXRhYmxlOjpmcm9tR2xvYmFsQ29kZSgKICAgICBjb25zdCBJZGVudGlmaWVyJiBuYW1l
LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2Us
IAogICAgIEpTT2JqZWN0KiYgZXhjZXB0aW9uLCBpbnQgb3ZlcnJpZGVMaW5lTnVtYmVyLCBPcHRp
b25hbDxpbnQ+IGZ1bmN0aW9uQ29uc3RydWN0b3JQYXJhbWV0ZXJzRW5kUG9zaXRpb24pCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvbkV4ZWN1dGFibGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvbkV4ZWN1dGFi
bGUuaAkocmV2aXNpb24gMjY4MDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
RnVuY3Rpb25FeGVjdXRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE2Niw3ICsxNjYsNyBAQCBw
dWJsaWM6CiAgICAgSlNQYXJzZXJTY3JpcHRNb2RlIHNjcmlwdE1vZGUoKSBjb25zdCB7IHJldHVy
biBtX3VubGlua2VkRXhlY3V0YWJsZS0+c2NyaXB0TW9kZSgpOyB9CiAgICAgU291cmNlQ29kZSBj
bGFzc1NvdXJjZSgpIGNvbnN0IHsgcmV0dXJuIG1fdW5saW5rZWRFeGVjdXRhYmxlLT5jbGFzc1Nv
dXJjZSgpOyB9CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RW
aXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKICAgICBzdGF0aWMgU3RydWN0
dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBKU1ZhbHVlIHByb3RvKQogICAgIHsKICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRl
KHZtLCBnbG9iYWxPYmplY3QsIHByb3RvLCBUeXBlSW5mbyhGdW5jdGlvbkV4ZWN1dGFibGVUeXBl
LCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9GdW5jdGlvblJhcmVEYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9GdW5jdGlvblJhcmVEYXRhLmNwcAkocmV2aXNpb24gMjY4MDg2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25SYXJlRGF0YS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTUxLDcgKzUxLDggQEAgU3RydWN0dXJlKiBGdW5jdGlvblJhcmVEYXRh
OjpjcmVhdGVTdHJ1YwogICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2Jq
ZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKENlbGxUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8o
KSk7CiB9CiAKLXZvaWQgRnVuY3Rpb25SYXJlRGF0YTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNl
bGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3Zv
aWQgRnVuY3Rpb25SYXJlRGF0YTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNp
dG9yJiB2aXNpdG9yKQogewogICAgIEZ1bmN0aW9uUmFyZURhdGEqIHJhcmVEYXRhID0ganNDYXN0
PEZ1bmN0aW9uUmFyZURhdGEqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRT
KGNlbGwsIGluZm8oKSk7CkBAIC02Myw2ICs2NCw4IEBAIHZvaWQgRnVuY3Rpb25SYXJlRGF0YTo6
dmlzaXRDaGlsZHJlbihKU0MKICAgICB2aXNpdG9yLmFwcGVuZChyYXJlRGF0YS0+bV9leGVjdXRh
YmxlKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEZ1bmN0aW9uUmFyZURhdGEpOworCiBG
dW5jdGlvblJhcmVEYXRhOjpGdW5jdGlvblJhcmVEYXRhKFZNJiB2bSwgRXhlY3V0YWJsZUJhc2Uq
IGV4ZWN1dGFibGUpCiAgICAgOiBCYXNlKHZtLCB2bS5mdW5jdGlvblJhcmVEYXRhU3RydWN0dXJl
LmdldCgpKQogICAgICwgbV9vYmplY3RBbGxvY2F0aW9uUHJvZmlsZSgpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvblJhcmVEYXRhLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25SYXJlRGF0YS5oCShyZXZpc2lv
biAyNjgwODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvblJhcmVE
YXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTY1LDcgKzY1LDcgQEAgcHVibGljOgogCiAgICAgc3Rh
dGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1Zh
bHVlIHByb3RvdHlwZSk7CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCos
IFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIERFQ0xB
UkVfSU5GTzsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY0Fy
Z3VtZW50cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dl
bmVyaWNBcmd1bWVudHMuaAkocmV2aXNpb24gMjY4MDg2KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCw3ICs0
NCw3IEBAIHByb3RlY3RlZDoKICAgICB7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRD
aGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVEVNUExBVEVfVklT
SVRfQ0hJTERSRU47CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0
KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwogICAgIHN0
YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNPYmplY3QqLCBKU0dsb2JhbE9i
amVjdCosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CiAgICAgc3RhdGlj
IHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJv
cGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50c0lubGluZXMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljQXJndW1lbnRzSW5saW5lcy5oCShy
ZXZpc2lvbiAyNjgwODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmlj
QXJndW1lbnRzSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw4IEBACiBuYW1l
c3BhY2UgSlNDIHsKIAogdGVtcGxhdGU8dHlwZW5hbWUgVHlwZT4KLXZvaWQgR2VuZXJpY0FyZ3Vt
ZW50czxUeXBlPjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIHRoaXNDZWxsLCBTbG90VmlzaXRvciYg
dmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEdlbmVyaWNBcmd1bWVu
dHM8VHlwZT46OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogdGhpc0NlbGwsIFZpc2l0b3ImIHZp
c2l0b3IpCiB7CiAgICAgVHlwZSogdGhpc09iamVjdCA9IHN0YXRpY19jYXN0PFR5cGUqPih0aGlz
Q2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkp
OwpAQCAtNDEsNiArNDIsOCBAQCB2b2lkIEdlbmVyaWNBcmd1bWVudHM8VHlwZT46OnZpc2l0Q2hp
bGRyCiAgICAgICAgIHZpc2l0b3IubWFya0F1eGlsaWFyeSh0aGlzT2JqZWN0LT5tX21vZGlmaWVk
QXJndW1lbnRzRGVzY3JpcHRvci5nZXRVbnNhZmUoKSk7CiB9CiAKK0RFRklORV9URU1QTEFURV9W
SVNJVF9DSElMRFJFTih0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlPiwgR2VuZXJpY0FyZ3VtZW50czxU
eXBlPik7CisKIHRlbXBsYXRlPHR5cGVuYW1lIFR5cGU+CiBib29sIEdlbmVyaWNBcmd1bWVudHM8
VHlwZT46OmdldE93blByb3BlcnR5U2xvdChKU09iamVjdCogb2JqZWN0LCBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWUgaWRlbnQsIFByb3BlcnR5U2xvdCYgc2xvdCkK
IHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dldHRlclNldHRlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2V0dGVyU2V0dGVy
LmNwcAkocmV2aXNpb24gMjY4MDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
R2V0dGVyU2V0dGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNyArMzMsOCBAQCBTVEFUSUNf
QVNTRVJUX0lTX1RSSVZJQUxMWV9ERVNUUlVDVElCTEUoCiAKIGNvbnN0IENsYXNzSW5mbyBHZXR0
ZXJTZXR0ZXI6OnNfaW5mbyA9IHsgIkdldHRlclNldHRlciIsIG51bGxwdHIsIG51bGxwdHIsIG51
bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoR2V0dGVyU2V0dGVyKSB9OwogCi12b2lkIEdldHRl
clNldHRlcjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9y
KQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgR2V0dGVyU2V0dGVyOjp2aXNpdENo
aWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgR2V0dGVy
U2V0dGVyKiB0aGlzT2JqZWN0ID0ganNDYXN0PEdldHRlclNldHRlcio+KGNlbGwpOwogICAgIEFT
U0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTQzLDYgKzQ0
LDggQEAgdm9pZCBHZXR0ZXJTZXR0ZXI6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKgogICAgIHZpc2l0
b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fc2V0dGVyKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxE
UkVOKEdldHRlclNldHRlcik7CisKIEpTVmFsdWUgY2FsbEdldHRlcihKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBKU1ZhbHVlIGJhc2UsIEpTVmFsdWUgZ2V0dGVyU2V0dGVyKQogewogICAg
IFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0dldHRlclNldHRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0dldHRlclNldHRlci5oCShyZXZpc2lvbiAyNjgwODYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9HZXR0ZXJTZXR0ZXIuaAkod29ya2luZyBjb3B5KQpAQCAt
ODIsNyArODIsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBjcmVhdGUodm0sIGdsb2JhbE9i
amVjdCwgZ2V0dGVyT2JqZWN0LCBzZXR0ZXJPYmplY3QpOwogICAgIH0KIAotICAgIHN0YXRpYyB2
b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJ
U0lUX0NISUxEUkVOOwogCiAgICAgSlNPYmplY3QqIGdldHRlcigpIGNvbnN0IHsgcmV0dXJuIG1f
Z2V0dGVyLmdldCgpOyB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0hh
c2hNYXBJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9IYXNoTWFwSW1wbC5jcHAJKHJldmlzaW9uIDI2ODA4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0hhc2hNYXBJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAs
OSBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAorREVGSU5FX1RFTVBMQVRFX1ZJU0lUX0NISUxEUkVO
KHRlbXBsYXRlPD4sIEhhc2hNYXBCdWNrZXQ8SGFzaE1hcEJ1Y2tldERhdGFLZXk+KTsKK0RFRklO
RV9URU1QTEFURV9WSVNJVF9DSElMRFJFTih0ZW1wbGF0ZTw+LCBIYXNoTWFwQnVja2V0PEhhc2hN
YXBCdWNrZXREYXRhS2V5VmFsdWU+KTsKKwogdGVtcGxhdGU8PgogY29uc3QgQ2xhc3NJbmZvIEhh
c2hNYXBCdWNrZXQ8SGFzaE1hcEJ1Y2tldERhdGFLZXk+OjpzX2luZm8gPQogICAgIHsgIkhhc2hN
YXBCdWNrZXQiLCBudWxscHRyLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxF
KEhhc2hNYXBCdWNrZXQ8SGFzaE1hcEJ1Y2tldERhdGFLZXk+KSB9OwpAQCAtMzgsOCArNDEsOSBA
QCB0ZW1wbGF0ZTw+CiBjb25zdCBDbGFzc0luZm8gSGFzaE1hcEJ1Y2tldDxIYXNoTWFwQnVja2V0
RGF0YUtleVZhbHVlPjo6c19pbmZvID0KICAgICB7ICJIYXNoTWFwQnVja2V0IiwgbnVsbHB0ciwg
bnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShIYXNoTWFwQnVja2V0PEhhc2hN
YXBCdWNrZXREYXRhS2V5VmFsdWU+KSB9OwogCi10ZW1wbGF0ZSA8dHlwZW5hbWUgRGF0YT4KLXZv
aWQgSGFzaE1hcEJ1Y2tldDxEYXRhPjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgRGF0YT4KK3RlbXBsYXRlPHR5cGVu
YW1lIFZpc2l0b3I+Cit2b2lkIEhhc2hNYXBCdWNrZXQ8RGF0YT46OnZpc2l0Q2hpbGRyZW5JbXBs
KEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBIYXNoTWFwQnVja2V0KiB0
aGlzT2JqZWN0ID0ganNDYXN0PEhhc2hNYXBCdWNrZXQqPihjZWxsKTsKICAgICBBU1NFUlRfR0Nf
T0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC01Miw4ICs1Niw5IEBAIHZv
aWQgSGFzaE1hcEJ1Y2tldDxEYXRhPjo6dmlzaXRDaGlsZHJlbigKICAgICB2aXNpdG9yLmFwcGVu
ZFZhbHVlcyhiaXR3aXNlX2Nhc3Q8V3JpdGVCYXJyaWVyPFVua25vd24+Kj4oJnRoaXNPYmplY3Qt
Pm1fZGF0YSksIHNpemVvZihEYXRhKSAvIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKTsK
IH0KIAotdGVtcGxhdGUgPHR5cGVuYW1lIEhhc2hNYXBCdWNrZXQ+Ci12b2lkIEhhc2hNYXBJbXBs
PEhhc2hNYXBCdWNrZXQ+Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3Im
IHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoTWFwQnVja2V0PgordGVtcGxhdGU8dHlw
ZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSGFzaE1hcEltcGw8SGFzaE1hcEJ1Y2tldD46OnZpc2l0Q2hp
bGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBIYXNoTWFw
SW1wbCogdGhpc09iamVjdCA9IGpzQ2FzdDxIYXNoTWFwSW1wbCo+KGNlbGwpOwogICAgIEFTU0VS
VF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTY2LDYgKzcxLDgg
QEAgdm9pZCBIYXNoTWFwSW1wbDxIYXNoTWFwQnVja2V0Pjo6dmlzaXRDaAogICAgICAgICB2aXNp
dG9yLm1hcmtBdXhpbGlhcnkoYnVmZmVyKTsKIH0KIAorREVGSU5FX1RFTVBMQVRFX1ZJU0lUX0NI
SUxEUkVOKHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hNYXBCdWNrZXQ+LCBIYXNoTWFwSW1wbDxIYXNo
TWFwQnVja2V0Pik7CisKIHRlbXBsYXRlIDx0eXBlbmFtZSBIYXNoTWFwQnVja2V0Pgogc2l6ZV90
IEhhc2hNYXBJbXBsPEhhc2hNYXBCdWNrZXQ+Ojplc3RpbWF0ZWRTaXplKEpTQ2VsbCogY2VsbCwg
Vk0mIHZtKQogewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSGFzaE1hcElt
cGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9IYXNoTWFw
SW1wbC5oCShyZXZpc2lvbiAyNjgwODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9IYXNoTWFwSW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDgsNyArMTQ4LDcgQEAgcHVibGlj
OgogICAgICAgICByZXR1cm4gbV9kYXRhLnZhbHVlLmdldCgpOwogICAgIH0KIAotICAgIHN0YXRp
YyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJF
X1RFTVBMQVRFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgQUxXQVlTX0lOTElORSBIYXNoTWFwQnVj
a2V0KiBuZXh0KCkgY29uc3QgeyByZXR1cm4gbV9uZXh0LmdldCgpOyB9CiAgICAgQUxXQVlTX0lO
TElORSBIYXNoTWFwQnVja2V0KiBwcmV2KCkgY29uc3QgeyByZXR1cm4gbV9wcmV2LmdldCgpOyB9
CkBAIC0zNjQsNyArMzY0LDcgQEAgY2xhc3MgSGFzaE1hcEltcGwgOiBwdWJsaWMgSlNOb25GaW5h
bE9iagogcHVibGljOgogICAgIHVzaW5nIEJ1Y2tldFR5cGUgPSBIYXNoTWFwQnVja2V0VHlwZTsK
IAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsK
KyAgICBERUNMQVJFX1RFTVBMQVRFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgc3RhdGljIHNpemVf
dCBlc3RpbWF0ZWRTaXplKEpTQ2VsbCosIFZNJik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0ludGVybmFsRnVuY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGVybmFsRnVuY3Rpb24uY3BwCShyZXZpc2lvbiAyNjgw
ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRlcm5hbEZ1bmN0aW9uLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNjQsNyArNjQsOCBAQCB2b2lkIEludGVybmFsRnVuY3Rpb246
OmZpbmlzaENyZWF0aW9uKFZNCiAgICAgfQogfQogCi12b2lkIEludGVybmFsRnVuY3Rpb246OnZp
c2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRl
PHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEludGVybmFsRnVuY3Rpb246OnZpc2l0Q2hpbGRyZW5J
bXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBJbnRlcm5hbEZ1bmN0
aW9uKiB0aGlzT2JqZWN0ID0ganNDYXN0PEludGVybmFsRnVuY3Rpb24qPihjZWxsKTsKICAgICBB
U1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC03Myw2ICs3
NCw4IEBAIHZvaWQgSW50ZXJuYWxGdW5jdGlvbjo6dmlzaXRDaGlsZHJlbihKU0MKICAgICB2aXNp
dG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX29yaWdpbmFsTmFtZSk7CiB9CiAKK0RFRklORV9FWFBP
UlRfVklTSVRfQ0hJTERSRU4oSW50ZXJuYWxGdW5jdGlvbik7CisKIGNvbnN0IFN0cmluZyYgSW50
ZXJuYWxGdW5jdGlvbjo6bmFtZSgpCiB7CiAgICAgY29uc3QgU3RyaW5nJiBuYW1lID0gbV9vcmln
aW5hbE5hbWUtPnRyeUdldFZhbHVlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9JbnRlcm5hbEZ1bmN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSW50ZXJuYWxGdW5jdGlvbi5oCShyZXZpc2lvbiAyNjgwODYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRlcm5hbEZ1bmN0aW9uLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQ2LDcgKzQ2LDcgQEAgcHVibGljOgogCiAgICAgREVDTEFSRV9FWFBPUlRfSU5GTzsK
IAotICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX0VYUE9SVF9WSVNJVF9DSElMRFJFTjsKIAog
ICAgIEpTX0VYUE9SVF9QUklWQVRFIGNvbnN0IFN0cmluZyYgbmFtZSgpOwogICAgIGNvbnN0IFN0
cmluZyBkaXNwbGF5TmFtZShWTSYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSW50bENvbGxhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9JbnRsQ29sbGF0b3IuY3BwCShyZXZpc2lvbiAyNjgwODYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9JbnRsQ29sbGF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02
NSw3ICs2NSw4IEBAIHZvaWQgSW50bENvbGxhdG9yOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0KICAg
ICBBU1NFUlQoaW5oZXJpdHModm0sIGluZm8oKSkpOwogfQogCi12b2lkIEludGxDb2xsYXRvcjo6
dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxh
dGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSW50bENvbGxhdG9yOjp2aXNpdENoaWxkcmVuSW1w
bChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSW50bENvbGxhdG9yKiB0
aGlzT2JqZWN0ID0ganNDYXN0PEludGxDb2xsYXRvcio+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19P
QkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTc1LDYgKzc2LDggQEAgdm9p
ZCBJbnRsQ29sbGF0b3I6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKgogICAgIHZpc2l0b3IuYXBwZW5k
KHRoaXNPYmplY3QtPm1fYm91bmRDb21wYXJlKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVO
KEludGxDb2xsYXRvcik7CisKIFZlY3RvcjxTdHJpbmc+IEludGxDb2xsYXRvcjo6c29ydExvY2Fs
ZURhdGEoY29uc3QgU3RyaW5nJiBsb2NhbGUsIFJlbGV2YW50RXh0ZW5zaW9uS2V5IGtleSkKIHsK
ICAgICAvLyA5LjEgSW50ZXJuYWwgc2xvdHMgb2YgU2VydmljZSBDb25zdHJ1Y3RvcnMgJiAxMC4y
LjMgSW50ZXJuYWwgc2xvdHMgKEVDTUEtNDAyIDIuMCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0ludGxDb2xsYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0ludGxDb2xsYXRvci5oCShyZXZpc2lvbiAyNjgwODYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsQ29sbGF0b3IuaAkod29ya2luZyBjb3B5KQpA
QCAtODAsNyArODAsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIEludGxDb2xsYXRvcihWTSYs
IFN0cnVjdHVyZSopOwogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKLSAgICBzdGF0aWMg
dm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9W
SVNJVF9DSElMRFJFTjsKIAogICAgIGJvb2wgdXBkYXRlQ2FuRG9BU0NJSVVDQURVQ0VUQ29tcGFy
aXNvbigpIGNvbnN0OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRs
RGF0ZVRpbWVGb3JtYXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0ludGxEYXRlVGltZUZvcm1hdC5jcHAJKHJldmlzaW9uIDI2ODA4NikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxEYXRlVGltZUZvcm1hdC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTcwLDcgKzcwLDggQEAgdm9pZCBJbnRsRGF0ZVRpbWVGb3JtYXQ6OmZpbmlzaENy
ZWF0aW9uKAogICAgIEFTU0VSVChpbmhlcml0cyh2bSwgaW5mbygpKSk7CiB9CiAKLXZvaWQgSW50
bERhdGVUaW1lRm9ybWF0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3Im
IHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBJbnRsRGF0ZVRpbWVG
b3JtYXQ6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikK
IHsKICAgICBJbnRsRGF0ZVRpbWVGb3JtYXQqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SW50bERhdGVU
aW1lRm9ybWF0Kj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2Jq
ZWN0LCBpbmZvKCkpOwpAQCAtODAsNiArODEsOCBAQCB2b2lkIEludGxEYXRlVGltZUZvcm1hdDo6
dmlzaXRDaGlsZHJlbihKCiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9ib3VuZEZv
cm1hdCk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihJbnRsRGF0ZVRpbWVGb3JtYXQpOwor
CiB2b2lkIEludGxEYXRlVGltZUZvcm1hdDo6c2V0Qm91bmRGb3JtYXQoVk0mIHZtLCBKU0JvdW5k
RnVuY3Rpb24qIGZvcm1hdCkKIHsKICAgICBtX2JvdW5kRm9ybWF0LnNldCh2bSwgdGhpcywgZm9y
bWF0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxEYXRlVGltZUZv
cm1hdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxE
YXRlVGltZUZvcm1hdC5oCShyZXZpc2lvbiAyNjgwODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9JbnRsRGF0ZVRpbWVGb3JtYXQuaAkod29ya2luZyBjb3B5KQpAQCAtNzIsNyAr
NzIsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIEludGxEYXRlVGltZUZvcm1hdChWTSYsIFN0
cnVjdHVyZSopOwogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKLSAgICBzdGF0aWMgdm9p
ZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJ
VF9DSElMRFJFTjsKIAogICAgIHN0YXRpYyBWZWN0b3I8U3RyaW5nPiBsb2NhbGVEYXRhKGNvbnN0
IFN0cmluZyYsIFJlbGV2YW50RXh0ZW5zaW9uS2V5KTsKIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSW50bExvY2FsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSW50bExvY2FsZS5jcHAJKHJldmlzaW9uIDI2ODA4NikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxMb2NhbGUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC01OCw3ICs1OCw4IEBAIHZvaWQgSW50bExvY2FsZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZt
KQogICAgIEFTU0VSVChpbmhlcml0cyh2bSwgaW5mbygpKSk7CiB9CiAKLXZvaWQgSW50bExvY2Fs
ZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVt
cGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSW50bExvY2FsZTo6dmlzaXRDaGlsZHJlbklt
cGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGF1dG8qIHRoaXNPYmpl
Y3QgPSBqc0Nhc3Q8SW50bExvY2FsZSo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5I
RVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTY2LDYgKzY3LDggQEAgdm9pZCBJbnRsTG9j
YWxlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogYwogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhp
c09iamVjdCwgdmlzaXRvcik7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihJbnRsTG9jYWxl
KTsKKwogY2xhc3MgTG9jYWxlSURCdWlsZGVyIGZpbmFsIHsKIHB1YmxpYzoKICAgICBib29sIGlu
aXRpYWxpemUoY29uc3QgU3RyaW5nJik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9JbnRsTG9jYWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSW50bExvY2FsZS5oCShyZXZpc2lvbiAyNjgwODYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9JbnRsTG9jYWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTcxLDcgKzcxLDcg
QEAgcHVibGljOgogcHJpdmF0ZToKICAgICBJbnRsTG9jYWxlKFZNJiwgU3RydWN0dXJlKik7CiAg
ICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOwotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwog
CiAgICAgU3RyaW5nIGtleXdvcmRWYWx1ZShBU0NJSUxpdGVyYWwsIGJvb2wgaXNCb29sZWFuID0g
ZmFsc2UpIGNvbnN0OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRs
TnVtYmVyRm9ybWF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9JbnRsTnVtYmVyRm9ybWF0LmNwcAkocmV2aXNpb24gMjY4MDg2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE51bWJlckZvcm1hdC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTczLDcgKzczLDggQEAgdm9pZCBJbnRsTnVtYmVyRm9ybWF0OjpmaW5pc2hDcmVhdGlvbihW
TQogICAgIEFTU0VSVChpbmhlcml0cyh2bSwgaW5mbygpKSk7CiB9CiAKLXZvaWQgSW50bE51bWJl
ckZvcm1hdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9y
KQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSW50bE51bWJlckZvcm1hdDo6dmlz
aXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIElu
dGxOdW1iZXJGb3JtYXQqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SW50bE51bWJlckZvcm1hdCo+KGNl
bGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsK
QEAgLTgzLDYgKzg0LDggQEAgdm9pZCBJbnRsTnVtYmVyRm9ybWF0Ojp2aXNpdENoaWxkcmVuKEpT
QwogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fYm91bmRGb3JtYXQpOwogfQogCitE
RUZJTkVfVklTSVRfQ0hJTERSRU4oSW50bE51bWJlckZvcm1hdCk7CisKIFZlY3RvcjxTdHJpbmc+
IEludGxOdW1iZXJGb3JtYXQ6OmxvY2FsZURhdGEoY29uc3QgU3RyaW5nJiBsb2NhbGUsIFJlbGV2
YW50RXh0ZW5zaW9uS2V5IGtleSkKIHsKICAgICAvLyA5LjEgSW50ZXJuYWwgc2xvdHMgb2YgU2Vy
dmljZSBDb25zdHJ1Y3RvcnMgJiAxMS4yLjMgSW50ZXJuYWwgc2xvdHMgKEVDTUEtNDAyIDIuMCkK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxOdW1iZXJGb3JtYXQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTnVtYmVyRm9y
bWF0LmgJKHJldmlzaW9uIDI2ODA4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0ludGxOdW1iZXJGb3JtYXQuaAkod29ya2luZyBjb3B5KQpAQCAtOTYsNyArOTYsNyBAQCBwdWJs
aWM6CiBwcml2YXRlOgogICAgIEludGxOdW1iZXJGb3JtYXQoVk0mLCBTdHJ1Y3R1cmUqKTsKICAg
ICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJl
bihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAK
ICAgICBzdGF0aWMgVmVjdG9yPFN0cmluZz4gbG9jYWxlRGF0YShjb25zdCBTdHJpbmcmLCBSZWxl
dmFudEV4dGVuc2lvbktleSk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0ludGxQbHVyYWxSdWxlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSW50bFBsdXJhbFJ1bGVzLmNwcAkocmV2aXNpb24gMjY4MDg2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFBsdXJhbFJ1bGVzLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNjEsNyArNjEsOCBAQCB2b2lkIEludGxQbHVyYWxSdWxlczo6ZmluaXNoQ3JlYXRpb24o
Vk0mCiAgICAgQVNTRVJUKGluaGVyaXRzKHZtLCBpbmZvKCkpKTsKIH0KIAotdm9pZCBJbnRsUGx1
cmFsUnVsZXM6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRv
cikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEludGxQbHVyYWxSdWxlczo6dmlz
aXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIElu
dGxQbHVyYWxSdWxlcyogdGhpc09iamVjdCA9IGpzQ2FzdDxJbnRsUGx1cmFsUnVsZXMqPihjZWxs
KTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBA
IC02OSw2ICs3MCw4IEBAIHZvaWQgSW50bFBsdXJhbFJ1bGVzOjp2aXNpdENoaWxkcmVuKEpTQ2UK
ICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwogfQogCitERUZJ
TkVfVklTSVRfQ0hJTERSRU4oSW50bFBsdXJhbFJ1bGVzKTsKKwogVmVjdG9yPFN0cmluZz4gSW50
bFBsdXJhbFJ1bGVzOjpsb2NhbGVEYXRhKGNvbnN0IFN0cmluZyYsIFJlbGV2YW50RXh0ZW5zaW9u
S2V5KQogewogICAgIHJldHVybiB7IH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9JbnRsUGx1cmFsUnVsZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9JbnRsUGx1cmFsUnVsZXMuaAkocmV2aXNpb24gMjY4MDg2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFBsdXJhbFJ1bGVzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTY2LDcgKzY2LDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBJbnRsUGx1cmFsUnVsZXMo
Vk0mLCBTdHJ1Y3R1cmUqKTsKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7Ci0gICAgc3Rh
dGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xB
UkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBzdGF0aWMgVmVjdG9yPFN0cmluZz4gbG9jYWxlRGF0
YShjb25zdCBTdHJpbmcmLCBSZWxldmFudEV4dGVuc2lvbktleSk7CiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxSZWxhdGl2ZVRpbWVGb3JtYXQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxSZWxhdGl2ZVRpbWVGb3Jt
YXQuY3BwCShyZXZpc2lvbiAyNjgwODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9JbnRsUmVsYXRpdmVUaW1lRm9ybWF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjIsNyArNjIs
OCBAQCB2b2lkIEludGxSZWxhdGl2ZVRpbWVGb3JtYXQ6OmZpbmlzaENyZWF0CiAgICAgQVNTRVJU
KGluaGVyaXRzKHZtLCBpbmZvKCkpKTsKIH0KIAotdm9pZCBJbnRsUmVsYXRpdmVUaW1lRm9ybWF0
Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1w
bGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBJbnRsUmVsYXRpdmVUaW1lRm9ybWF0Ojp2aXNp
dENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0
byogdGhpc09iamVjdCA9IGpzQ2FzdDxJbnRsUmVsYXRpdmVUaW1lRm9ybWF0Kj4oY2VsbCk7CiAg
ICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNzAs
NiArNzEsOCBAQCB2b2lkIEludGxSZWxhdGl2ZVRpbWVGb3JtYXQ6OnZpc2l0Q2hpbGRyCiAgICAg
QmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKIH0KIAorREVGSU5FX1ZJ
U0lUX0NISUxEUkVOKEludGxSZWxhdGl2ZVRpbWVGb3JtYXQpOworCiBWZWN0b3I8U3RyaW5nPiBJ
bnRsUmVsYXRpdmVUaW1lRm9ybWF0Ojpsb2NhbGVEYXRhKGNvbnN0IFN0cmluZyYgbG9jYWxlLCBS
ZWxldmFudEV4dGVuc2lvbktleSBrZXkpCiB7CiAgICAgQVNTRVJUX1VOVVNFRChrZXksIGtleSA9
PSBSZWxldmFudEV4dGVuc2lvbktleTo6TnUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSW50bFJlbGF0aXZlVGltZUZvcm1hdC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxSZWxhdGl2ZVRpbWVGb3JtYXQuaAkocmV2aXNpb24g
MjY4MDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFJlbGF0aXZlVGlt
ZUZvcm1hdC5oCSh3b3JraW5nIGNvcHkpCkBAIC02NCw3ICs2NCw3IEBAIHB1YmxpYzoKIHByaXZh
dGU6CiAgICAgSW50bFJlbGF0aXZlVGltZUZvcm1hdChWTSYsIFN0cnVjdHVyZSopOwogICAgIHZv
aWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpT
Q2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAg
IHN0YXRpYyBWZWN0b3I8U3RyaW5nPiBsb2NhbGVEYXRhKGNvbnN0IFN0cmluZyYsIFJlbGV2YW50
RXh0ZW5zaW9uS2V5KTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50
bFNlZ21lbnRJdGVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSW50bFNlZ21lbnRJdGVyYXRvci5jcHAJKHJldmlzaW9uIDI2ODA4NikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxTZWdtZW50SXRlcmF0b3IuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC02NCwxMyArNjQsMTYgQEAgdm9pZCBJbnRsU2VnbWVudEl0ZXJhdG9yOjpm
aW5pc2hDcmVhdGlvbgogICAgIG1fc3RyaW5nLnNldCh2bSwgdGhpcywgc3RyaW5nKTsKIH0KIAot
dm9pZCBJbnRsU2VnbWVudEl0ZXJhdG9yOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xv
dFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBJbnRs
U2VnbWVudEl0ZXJhdG9yOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3Im
IHZpc2l0b3IpCiB7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxJbnRsU2VnbWVudEl0
ZXJhdG9yKj4oY2VsbCk7CiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNp
dG9yKTsKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX3N0cmluZyk7CiB9CiAKK0RF
RklORV9WSVNJVF9DSElMRFJFTihJbnRsU2VnbWVudEl0ZXJhdG9yKTsKKwogSlNPYmplY3QqIElu
dGxTZWdtZW50SXRlcmF0b3I6Om5leHQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKIHsK
ICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9JbnRsU2VnbWVudEl0ZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFNlZ21lbnRJdGVyYXRvci5oCShyZXZpc2lvbiAy
NjgwODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsU2VnbWVudEl0ZXJh
dG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTUzLDcgKzUzLDcgQEAgcHVibGljOgogCiAgICAgSlNP
YmplY3QqIG5leHQoSlNHbG9iYWxPYmplY3QqKTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hp
bGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVO
OwogCiBwcml2YXRlOgogICAgIEludGxTZWdtZW50SXRlcmF0b3IoVk0mLCBTdHJ1Y3R1cmUqLCBz
dGQ6OnVuaXF1ZV9wdHI8VUJyZWFrSXRlcmF0b3IsIFVCcmVha0l0ZXJhdG9yRGVsZXRlcj4mJiwg
Qm94PFZlY3RvcjxVQ2hhcj4+JiYsIEludGxTZWdtZW50ZXI6OkdyYW51bGFyaXR5KTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxTZWdtZW50cy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFNlZ21lbnRzLmNwcAkocmV2
aXNpb24gMjY4MDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFNlZ21l
bnRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA5LDExICsxMDksMTQgQEAgSlNPYmplY3QqIElu
dGxTZWdtZW50czo6Y3JlYXRlU2VnbWVudEl0ZQogICAgIHJldHVybiBJbnRsU2VnbWVudEl0ZXJh
dG9yOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdC0+c2VnbWVudEl0ZXJhdG9yU3RydWN0dXJlKCks
IFdURk1vdmUoc2VnbWVudGVyKSwgbV9idWZmZXIsIG1fc3RyaW5nLmdldCgpLCBtX2dyYW51bGFy
aXR5KTsKIH0KIAotdm9pZCBJbnRsU2VnbWVudHM6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxs
LCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lk
IEludGxTZWdtZW50czo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2
aXNpdG9yKQogewogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SW50bFNlZ21lbnRzKj4o
Y2VsbCk7CiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKICAg
ICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX3N0cmluZyk7CiB9CiAKK0RFRklORV9WSVNJ
VF9DSElMRFJFTihJbnRsU2VnbWVudHMpOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxTZWdtZW50cy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxTZWdtZW50cy5oCShyZXZpc2lvbiAy
NjgwODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsU2VnbWVudHMuaAko
d29ya2luZyBjb3B5KQpAQCAtNTQsNyArNTQsNyBAQCBwdWJsaWM6CiAgICAgSlNWYWx1ZSBjb250
YWluaW5nKEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBpbmRleFZhbHVlKTsKICAgICBKU09iamVj
dCogY3JlYXRlU2VnbWVudEl0ZXJhdG9yKEpTR2xvYmFsT2JqZWN0Kik7CiAKLSAgICBzdGF0aWMg
dm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9W
SVNJVF9DSElMRFJFTjsKIAogcHJpdmF0ZToKICAgICBJbnRsU2VnbWVudHMoVk0mLCBTdHJ1Y3R1
cmUqLCBzdGQ6OnVuaXF1ZV9wdHI8VUJyZWFrSXRlcmF0b3IsIFVCcmVha0l0ZXJhdG9yRGVsZXRl
cj4mJiwgQm94PFZlY3RvcjxVQ2hhcj4+JiYsIEludGxTZWdtZW50ZXI6OkdyYW51bGFyaXR5KTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVm
ZmVyVmlldy5jcHAJKHJldmlzaW9uIDI2ODA4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU1LDcgKzE1
NSw4IEBAIHZvaWQgSlNBcnJheUJ1ZmZlclZpZXc6OmZpbmlzaENyZWF0aW9uKFYKICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCi12b2lkIEpTQXJyYXlCdWZmZXJWaWV3Ojp2
aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0
ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0FycmF5QnVmZmVyVmlldzo6dmlzaXRDaGlsZHJl
bkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTQXJyYXlCdWZm
ZXJWaWV3KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQXJyYXlCdWZmZXJWaWV3Kj4oY2VsbCk7CiAg
ICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtMTY5
LDYgKzE3MCw4IEBAIHZvaWQgSlNBcnJheUJ1ZmZlclZpZXc6OnZpc2l0Q2hpbGRyZW4oSlMKICAg
ICB9CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU0FycmF5QnVmZmVyVmlldyk7CisKIGJv
b2wgSlNBcnJheUJ1ZmZlclZpZXc6OnB1dCgKICAgICBKU0NlbGwqIGNlbGwsIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFs
dWUsCiAgICAgUHV0UHJvcGVydHlTbG90JiBzbG90KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5oCShyZXZpc2lvbiAyNjgwODYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xNzIsNyArMTcyLDcgQEAgcHJvdGVjdGVkOgogICAgIAogICAgIHN0
YXRpYyBib29sIHB1dChKU0NlbGwqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSwgSlNW
YWx1ZSwgUHV0UHJvcGVydHlTbG90Jik7CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVu
KEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKICAg
ICAKIHB1YmxpYzoKICAgICBUeXBlZEFycmF5TW9kZSBtb2RlKCkgY29uc3QgeyByZXR1cm4gbV9t
b2RlOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5SXRlcmF0
b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJy
YXlJdGVyYXRvci5jcHAJKHJldmlzaW9uIDI2ODA4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQXJyYXlJdGVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY4LDExICs2
OCwxNCBAQCB2b2lkIEpTQXJyYXlJdGVyYXRvcjo6ZmluaXNoQ3JlYXRpb24oVk0mCiAgICAgICAg
IEJhc2U6OmludGVybmFsRmllbGQoaW5kZXgpLnNldCh2bSwgdGhpcywgdmFsdWVzW2luZGV4XSk7
CiB9CiAKLXZvaWQgSlNBcnJheUl0ZXJhdG9yOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwg
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBK
U0FycmF5SXRlcmF0b3I6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYg
dmlzaXRvcikKIHsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQXJyYXlJdGVyYXRv
cio+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5m
bygpKTsKICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwogfQog
CitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNBcnJheUl0ZXJhdG9yKTsKKwogfSAvLyBuYW1lc3Bh
Y2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5SXRlcmF0
b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5
SXRlcmF0b3IuaAkocmV2aXNpb24gMjY4MDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNBcnJheUl0ZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTc4LDcgKzc4LDcgQEAg
cHVibGljOgogCiAgICAgREVDTEFSRV9JTkZPOwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGls
ZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47
CiAKIHByaXZhdGU6CiAgICAgSlNBcnJheUl0ZXJhdG9yKFZNJiwgU3RydWN0dXJlKik7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FzeW5jR2VuZXJhdG9yLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FzeW5jR2VuZXJhdG9y
LmNwcAkocmV2aXNpb24gMjY4MDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNBc3luY0dlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU5LDExICs1OSwxNCBAQCB2
b2lkIEpTQXN5bmNHZW5lcmF0b3I6OmZpbmlzaENyZWF0aW9uKFZNCiAgICAgICAgIGludGVybmFs
RmllbGQoaW5kZXgpLnNldCh2bSwgdGhpcywgdmFsdWVzW2luZGV4XSk7CiB9CiAKLXZvaWQgSlNB
c3luY0dlbmVyYXRvcjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNBc3luY0dlbmVyYXRv
cjo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewog
ICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNBc3luY0dlbmVyYXRvcio+KGNlbGwpOwog
ICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKICAgICBC
YXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwogfQogCitERUZJTkVfVklT
SVRfQ0hJTERSRU4oSlNBc3luY0dlbmVyYXRvcik7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBc3luY0dlbmVyYXRvci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXN5bmNHZW5lcmF0b3Iu
aAkocmV2aXNpb24gMjY4MDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNB
c3luY0dlbmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC05NSw3ICs5NSw3IEBAIHB1YmxpYzoK
IAogICAgIERFQ0xBUkVfRVhQT1JUX0lORk87CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxk
cmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsK
IAogcHJpdmF0ZToKICAgICBKU0FzeW5jR2VuZXJhdG9yKFZNJiwgU3RydWN0dXJlKik7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JpZ0ludC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCaWdJbnQuY3BwCShyZXZpc2lvbiAy
NjgwODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JpZ0ludC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTY3LDcgKzY3LDggQEAgSlNCaWdJbnQ6OkpTQmlnSW50KFZNJiB2bSwg
U3RydWN0dXJlKiBzdAogICAgICwgbV9kYXRhKHZtLCB0aGlzLCBkYXRhLCBsZW5ndGgpCiB7IH0K
IAotdm9pZCBKU0JpZ0ludDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9y
JiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNCaWdJbnQ6OnZp
c2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBh
dXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQmlnSW50Kj4oY2VsbCk7CiAgICAgQVNTRVJUX0dD
X09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNzYsNiArNzcsOCBAQCB2
b2lkIEpTQmlnSW50Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsCiAgICAgICAgIHZpc2l0b3Iu
bWFya0F1eGlsaWFyeShkYXRhKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTQmlnSW50
KTsKKwogdm9pZCBKU0JpZ0ludDo6aW5pdGlhbGl6ZShJbml0aWFsaXphdGlvblR5cGUgaW5pdFR5
cGUpCiB7CiAgICAgaWYgKGluaXRUeXBlID09IEluaXRpYWxpemF0aW9uVHlwZTo6V2l0aFplcm8p
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JpZ0ludC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQmlnSW50LmgJKHJldmlzaW9u
IDI2ODA4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQmlnSW50LmgJKHdv
cmtpbmcgY29weSkKQEAgLTUwLDcgKzUwLDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4
cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IFN0cnVj
dHVyZUlzSW1tb3J0YWwgfCBPdmVycmlkZXNUb1RoaXM7CiAgICAgZnJpZW5kIGNsYXNzIENhY2hl
ZEJpZ0ludDsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZp
c2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzPgogICAgIHN0YXRpYyBJc29TdWJzcGFjZSog
c3Vic3BhY2VGb3IoVk0mIHZtKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNCb3VuZEZ1bmN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0JvdW5kRnVuY3Rpb24uY3BwCShyZXZpc2lvbiAyNjgwODYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JvdW5kRnVuY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yNDksNyArMjQ5LDggQEAgdm9pZCBKU0JvdW5kRnVuY3Rpb246OmZpbmlzaENyZWF0aW9u
KFZNJgogICAgIEFTU0VSVChpbmhlcml0cyh2bSwgaW5mbygpKSk7CiB9CiAKLXZvaWQgSlNCb3Vu
ZEZ1bmN0aW9uOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0
b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0JvdW5kRnVuY3Rpb246OnZp
c2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBK
U0JvdW5kRnVuY3Rpb24qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNCb3VuZEZ1bmN0aW9uKj4oY2Vs
bCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpA
QCAtMjYxLDQgKzI2Miw2IEBAIHZvaWQgSlNCb3VuZEZ1bmN0aW9uOjp2aXNpdENoaWxkcmVuKEpT
Q2UKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX25hbWVNYXlCZU51bGwpOwogfQog
CitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNCb3VuZEZ1bmN0aW9uKTsKKwogfSAvLyBuYW1lc3Bh
Y2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JvdW5kRnVuY3Rp
b24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JvdW5k
RnVuY3Rpb24uaAkocmV2aXNpb24gMjY4MDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNCb3VuZEZ1bmN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTg0LDcgKzg0LDcgQEAg
cHJpdmF0ZToKICAgICBKU0JvdW5kRnVuY3Rpb24oVk0mLCBOYXRpdmVFeGVjdXRhYmxlKiwgSlNH
bG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqLCBKU09iamVjdCogdGFyZ2V0RnVuY3Rpb24sIEpTVmFs
dWUgYm91bmRUaGlzLCBKU0ltbXV0YWJsZUJ1dHRlcmZseSogYm91bmRBcmdzLCBKU1N0cmluZyog
bmFtZU1heUJlTnVsbCwgZG91YmxlIGxlbmd0aCk7CiAKICAgICB2b2lkIGZpbmlzaENyZWF0aW9u
KFZNJik7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRv
ciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBXcml0ZUJhcnJpZXI8SlNP
YmplY3Q+IG1fdGFyZ2V0RnVuY3Rpb247CiAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+IG1fYm91
bmRUaGlzOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDYWxsZWUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2FsbGVlLmNw
cAkocmV2aXNpb24gMjY4MDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlND
YWxsZWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MCw3ICs1MCw4IEBAIHZvaWQgSlNDYWxsZWU6
OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKICAgICBBU1NFUlQoaW5oZXJpdHModm0sIGluZm8oKSkp
OwogfQogCi12b2lkIEpTQ2FsbGVlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZp
c2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0NhbGxl
ZTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewog
ICAgIEpTQ2FsbGVlKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQ2FsbGVlKj4oY2VsbCk7CiAgICAg
QVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNTksNCAr
NjAsNiBAQCB2b2lkIEpTQ2FsbGVlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsCiAgICAgdmlz
aXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9zY29wZSk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElM
RFJFTihKU0NhbGxlZSk7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNDYWxsZWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0NhbGxlZS5oCShyZXZpc2lvbiAyNjgwODYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NhbGxlZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDAs
NyArMTAwLDcgQEAgcHJvdGVjdGVkOgogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKICAg
ICB1c2luZyBCYXNlOjpmaW5pc2hDcmVhdGlvbjsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hp
bGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVO
OwogCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAkocmV2aXNpb24gMjY4MDg2
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNyArMSw3IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAxIEhhcnJp
IFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCiAgKiAgQ29weXJpZ2h0IChDKSAyMDAxIFBldGVyIEtl
bGx5IChwbWtAcG9zdC5jb20pCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMTkgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwMy0yMDIwIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0zMiw2
ICszMiw3IEBACiAjaW5jbHVkZSAiSlNMb2NrLmgiCiAjaW5jbHVkZSAiSlNUeXBlSW5mby5oIgog
I2luY2x1ZGUgIlNsb3RWaXNpdG9yLmgiCisjaW5jbHVkZSAiU2xvdFZpc2l0b3JNYWNyb3MuaCIK
ICNpbmNsdWRlICJTdWJzcGFjZUFjY2Vzcy5oIgogI2luY2x1ZGUgIlR5cGVkQXJyYXlUeXBlLmgi
CiAjaW5jbHVkZSAiV3JpdGVCYXJyaWVyLmgiCkBAIC0xNjgsOCArMTY5LDggQEAgcHVibGljOgog
ICAgIHNpemVfdCBlc3RpbWF0ZWRTaXplSW5CeXRlcyhWTSYpIGNvbnN0OwogICAgIEpTX0VYUE9S
VF9QUklWQVRFIHN0YXRpYyBzaXplX3QgZXN0aW1hdGVkU2l6ZShKU0NlbGwqLCBWTSYpOwogCi0g
ICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwotICAg
IHN0YXRpYyB2b2lkIHZpc2l0T3V0cHV0Q29uc3RyYWludHMoSlNDZWxsKiwgU2xvdFZpc2l0b3Im
KTsKKyAgICBERUNMQVJFX0lOTElORV9WSVNJVF9DSElMRFJFTjsKKyAgICBERUNMQVJFX0lOTElO
RV9WSVNJVF9PVVRQVVRfQ09OU1RSQUlOVFM7CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0
aWMgdm9pZCBhbmFseXplSGVhcChKU0NlbGwqLCBIZWFwQW5hbHl6ZXImKTsKIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsSW5saW5lcy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbElubGluZXMuaAkocmV2aXNpb24g
MjY4MDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsSW5saW5lcy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xNDEsMTUgKzE0MSwyMSBAQCBBTFdBWVNfSU5MSU5FIFN0cnVj
dHVyZSogSlNDZWxsOjpzdHJ1Y3R1CiAgICAgcmV0dXJuIHZtLmdldFN0cnVjdHVyZShtX3N0cnVj
dHVyZUlEKTsKIH0KIAotaW5saW5lIHZvaWQgSlNDZWxsOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCog
Y2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgor
aW5saW5lIHZvaWQgSlNDZWxsOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0
b3ImIHZpc2l0b3IpCiB7CiAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZChjZWxsLT5zdHJ1
Y3R1cmUodmlzaXRvci52bSgpKSk7CiB9CiAKLWlubGluZSB2b2lkIEpTQ2VsbDo6dmlzaXRPdXRw
dXRDb25zdHJhaW50cyhKU0NlbGwqLCBTbG90VmlzaXRvciYpCitERUZJTkVfSU5MSU5FX1ZJU0lU
X0NISUxEUkVOKEpTQ2VsbCk7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+CitpbmxpbmUg
dm9pZCBKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHNJbXBsKEpTQ2VsbCosIFZpc2l0b3Im
KQogewogfQogCitERUZJTkVfSU5MSU5FX1ZJU0lUX09VVFBVVF9DT05TVFJBSU5UUyhKU0NlbGwp
OworCiBBTFdBWVNfSU5MSU5FIFZNJiBDYWxsRnJhbWU6OmRlcHJlY2F0ZWRWTSgpIGNvbnN0CiB7
CiAgICAgSlNDZWxsKiBjYWxsZWUgPSB0aGlzLT5jYWxsZWUoKS5hc0NlbGwoKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ3VzdG9tR2V0dGVyU2V0dGVyRnVuY3Rpb24u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ3VzdG9t
R2V0dGVyU2V0dGVyRnVuY3Rpb24uY3BwCShyZXZpc2lvbiAyNjgwODYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0N1c3RvbUdldHRlclNldHRlckZ1bmN0aW9uLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtODUsNyArODUsOCBAQCBKU0N1c3RvbUdldHRlclNldHRlckZ1bmN0aW9u
KiBKU0N1c3RvbUdlCiAgICAgcmV0dXJuIGZ1bmN0aW9uOwogfQogCi12b2lkIEpTQ3VzdG9tR2V0
dGVyU2V0dGVyRnVuY3Rpb246OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRv
ciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTQ3VzdG9tR2V0
dGVyU2V0dGVyRnVuY3Rpb246OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRv
ciYgdmlzaXRvcikKIHsKICAgICBKU0N1c3RvbUdldHRlclNldHRlckZ1bmN0aW9uKiB0aGlzT2Jq
ZWN0ID0ganNDYXN0PEpTQ3VzdG9tR2V0dGVyU2V0dGVyRnVuY3Rpb24qPihjZWxsKTsKICAgICBB
U1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC05NCw2ICs5
NSw4IEBAIHZvaWQgSlNDdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbjo6dmlzaXQKICAgICB2aXNp
dG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2dldHRlclNldHRlcik7CiB9CiAKK0RFRklORV9WSVNJ
VF9DSElMRFJFTihKU0N1c3RvbUdldHRlclNldHRlckZ1bmN0aW9uKTsKKwogdm9pZCBKU0N1c3Rv
bUdldHRlclNldHRlckZ1bmN0aW9uOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIE5hdGl2ZUV4ZWN1
dGFibGUqIGV4ZWN1dGFibGUsIEN1c3RvbUdldHRlclNldHRlciogZ2V0dGVyU2V0dGVyLCBjb25z
dCBTdHJpbmcmIG5hbWUpCiB7CiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0sIGV4ZWN1dGFi
bGUsIGlzU2V0dGVyKCksIG5hbWUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNDdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ3VzdG9tR2V0dGVyU2V0dGVyRnVuY3Rpb24uaAkocmV2
aXNpb24gMjY4MDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDdXN0b21H
ZXR0ZXJTZXR0ZXJGdW5jdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC02Myw3ICs2Myw3IEBAIHB1
YmxpYzoKIHByaXZhdGU6CiAgICAgSlNDdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbihWTSYsIE5h
dGl2ZUV4ZWN1dGFibGUqLCBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSosIFR5cGUsIGNvbnN0
IFByb3BlcnR5TmFtZSYpOwogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBOYXRpdmVFeGVj
dXRhYmxlKiwgQ3VzdG9tR2V0dGVyU2V0dGVyKiwgY29uc3QgU3RyaW5nJik7Ci0gICAgc3RhdGlj
IHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVf
VklTSVRfQ0hJTERSRU47CiAKICAgICBXcml0ZUJhcnJpZXI8Q3VzdG9tR2V0dGVyU2V0dGVyPiBt
X2dldHRlclNldHRlcjsKICAgICBUeXBlIG1fdHlwZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTRmluYWxpemF0aW9uUmVnaXN0cnkuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRmluYWxpemF0aW9uUmVnaXN0cnkuY3BwCShy
ZXZpc2lvbiAyNjgwODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ZpbmFs
aXphdGlvblJlZ2lzdHJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTYsNyArNTYsOCBAQCB2b2lk
IEpTRmluYWxpemF0aW9uUmVnaXN0cnk6OmZpbmlzaENyZWF0CiAgICAgaW50ZXJuYWxGaWVsZChG
aWVsZDo6Q2FsbGJhY2spLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIoY2FsbGJhY2spOwogfQogCi12
b2lkIEpTRmluYWxpemF0aW9uUmVnaXN0cnk6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBT
bG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpT
RmluYWxpemF0aW9uUmVnaXN0cnk6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlz
aXRvciYgdmlzaXRvcikKIHsKICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKGNlbGwsIHZpc2l0b3Ip
OwogCkBAIC04Myw2ICs4NCw4IEBAIHZvaWQgSlNGaW5hbGl6YXRpb25SZWdpc3RyeTo6dmlzaXRD
aGlsZHIKICAgICB2aXNpdG9yLnZtKCkuaGVhcC5yZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQodG90
YWxCdWZmZXJTaXplc0luQnl0ZXMpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNGaW5h
bGl6YXRpb25SZWdpc3RyeSk7CisKIHZvaWQgSlNGaW5hbGl6YXRpb25SZWdpc3RyeTo6ZGVzdHJv
eShKU0NlbGwqIHRhYmxlKQogewogICAgIHN0YXRpY19jYXN0PEpTRmluYWxpemF0aW9uUmVnaXN0
cnkqPih0YWJsZSktPn5KU0ZpbmFsaXphdGlvblJlZ2lzdHJ5KCk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0ZpbmFsaXphdGlvblJlZ2lzdHJ5LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGaW5hbGl6YXRpb25SZWdpc3RyeS5o
CShyZXZpc2lvbiAyNjgwODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Zp
bmFsaXphdGlvblJlZ2lzdHJ5LmgJKHdvcmtpbmcgY29weSkKQEAgLTcwLDcgKzcwLDcgQEAgcHVi
bGljOgogICAgIERFQ0xBUkVfRVhQT1JUX0lORk87CiAKICAgICB2b2lkIGZpbmFsaXplVW5jb25k
aXRpb25hbGx5KFZNJik7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBT
bG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAgICAgc3RhdGljIHZv
aWQgZGVzdHJveShKU0NlbGwqKTsKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNEZXN0
cnVjdGlvbiA9IHRydWU7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
RnVuY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTRnVuY3Rpb24uY3BwCShyZXZpc2lvbiAyNjgwODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0Z1bmN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUyLDcgKzI1Miw4
IEBAIGNvbnN0IFNvdXJjZUNvZGUqIEpTRnVuY3Rpb246OnNvdXJjZUNvZGUKICAgICByZXR1cm4g
JmpzRXhlY3V0YWJsZSgpLT5zb3VyY2UoKTsKIH0KICAgICAKLXZvaWQgSlNGdW5jdGlvbjo6dmlz
aXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8
dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNGdW5jdGlvbjo6dmlzaXRDaGlsZHJlbkltcGwoSlND
ZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTRnVuY3Rpb24qIHRoaXNPYmpl
Y3QgPSBqc0Nhc3Q8SlNGdW5jdGlvbio+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5I
RVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTI2MSw2ICsyNjIsOCBAQCB2b2lkIEpTRnVu
Y3Rpb246OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjCiAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJp
ZXJlZChiaXR3aXNlX2Nhc3Q8SlNDZWxsKj4oYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4odGhpc09i
amVjdC0+bV9leGVjdXRhYmxlT3JSYXJlRGF0YSkgJiB+cmFyZURhdGFUYWcpKTsKIH0KIAorREVG
SU5FX1ZJU0lUX0NISUxEUkVOKEpTRnVuY3Rpb24pOworCiBDYWxsRGF0YSBKU0Z1bmN0aW9uOjpn
ZXRDYWxsRGF0YShKU0NlbGwqIGNlbGwpCiB7CiAgICAgLy8gS2VlcCB0aGlzIGZ1bmN0aW9uIE9L
IGZvciBpbnZvY2F0aW9uIGZyb20gY29uY3VycmVudCBjb21waWxlcnMuCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5oCShyZXZpc2lvbiAyNjgwODYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTE4MCw3ICsxODAsNyBAQCBwcm90ZWN0ZWQ6CiAKICAgICBzdGF0aWMgYm9vbCBkZWxl
dGVQcm9wZXJ0eShKU0NlbGwqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSwgRGVsZXRl
UHJvcGVydHlTbG90Jik7CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCos
IFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogcHJpdmF0ZToK
ICAgICBzdGF0aWMgSlNGdW5jdGlvbiogY3JlYXRlSW1wbChWTSYgdm0sIEZ1bmN0aW9uRXhlY3V0
YWJsZSogZXhlY3V0YWJsZSwgSlNTY29wZSogc2NvcGUsIFN0cnVjdHVyZSogc3RydWN0dXJlKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmF0b3IuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJhdG9yLmNwcAko
cmV2aXNpb24gMjY4MDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5l
cmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OSwxMSArNTksMTQgQEAgdm9pZCBKU0dlbmVy
YXRvcjo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQogICAgICAgICBpbnRlcm5hbEZpZWxkKGluZGV4
KS5zZXQodm0sIHRoaXMsIHZhbHVlc1tpbmRleF0pOwogfQogCi12b2lkIEpTR2VuZXJhdG9yOjp2
aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0
ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0dlbmVyYXRvcjo6dmlzaXRDaGlsZHJlbkltcGwo
SlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGF1dG8qIHRoaXNPYmplY3Qg
PSBqc0Nhc3Q8SlNHZW5lcmF0b3IqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVS
SVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2Jq
ZWN0LCB2aXNpdG9yKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTR2VuZXJhdG9yKTsK
KwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0dlbmVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTR2VuZXJhdG9yLmgJKHJldmlzaW9uIDI2ODA4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTR2VuZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTk0LDcgKzk0LDcg
QEAgcHVibGljOgogCiAgICAgREVDTEFSRV9FWFBPUlRfSU5GTzsKIAotICAgIHN0YXRpYyB2b2lk
IHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lU
X0NISUxEUkVOOwogCiBwcml2YXRlOgogICAgIEpTR2VuZXJhdG9yKFZNJiwgU3RydWN0dXJlKik7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5
Vmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3LmgJKHJldmlzaW9uIDI2ODA4NikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmgJKHdvcmtpbmcgY29weSkK
QEAgLTMxMiw3ICszMTIsNyBAQCBwcml2YXRlOgogICAgIHN0YXRpYyB2b2lkIGdldE93blByb3Bl
cnR5TmFtZXMoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZUFycmF5Jiwg
RW51bWVyYXRpb25Nb2RlKTsKIAogICAgIHN0YXRpYyBzaXplX3QgZXN0aW1hdGVkU2l6ZShKU0Nl
bGwqLCBWTSYpOwotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZp
c2l0b3ImKTsKKyAgICBERUNMQVJFX1RFTVBMQVRFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgLy8g
UmV0dXJucyB0cnVlIGlmIHN1Y2Nlc3NmdWwsIGFuZCBmYWxzZSBvbiBlcnJvcjsgaXQgd2lsbCB0
aHJvdyBvbiBlcnJvci4KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPdGhlckFkYXB0b3I+CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld0lu
bGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dl
bmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaAkocmV2aXNpb24gMjY4MDg2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTUxMCw3ICs1MTAsOCBAQCBzaXplX3QgSlNHZW5lcmljVHlwZWRB
cnJheVZpZXc8QWRhcHRvcj46CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+Ci12b2lk
IEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCog
Y2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgor
dm9pZCBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6dmlzaXRDaGlsZHJlbkltcGwo
SlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTR2VuZXJpY1R5cGVkQXJy
YXlWaWV3KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Kj4oY2Vs
bCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpA
QCAtNTQ4LDQgKzU0OSw2IEBAIHZvaWQgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46
OnYKICAgICB9CiB9CiAKK0RFRklORV9URU1QTEFURV9WSVNJVF9DSElMRFJFTih0ZW1wbGF0ZTx0
eXBlbmFtZSBBZGFwdG9yPiwgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj4pOworCiB9
IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
R2xvYmFsT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0dsb2JhbE9iamVjdC5jcHAJKHJldmlzaW9uIDI2ODA4NikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTg3Niw3ICsxODc2LDggQEAgdm9pZCBKU0dsb2JhbE9iamVjdDo6cmVzZXRQcm90b3R5cGUoVk0m
IAogICAgIHNldEdsb2JhbFRoaXModm0sIEpTUHJveHk6OmNyZWF0ZSh2bSwgSlNQcm94eTo6Y3Jl
YXRlU3RydWN0dXJlKHZtLCB0aGlzLCBwcm90b3R5cGUsIFB1cmVGb3J3YXJkaW5nUHJveHlUeXBl
KSwgdGhpcykpOwogfQogCi12b2lkIEpTR2xvYmFsT2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2Vs
bCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
Pgordm9pZCBKU0dsb2JhbE9iamVjdDo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBW
aXNpdG9yJiB2aXNpdG9yKQogeyAKICAgICBKU0dsb2JhbE9iamVjdCogdGhpc09iamVjdCA9IGpz
Q2FzdDxKU0dsb2JhbE9iamVjdCo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJ
VFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTIwNDcsNiArMjA0OCw4IEBAIHZvaWQgSlNHbG9i
YWxPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWwKICAgICB0aGlzT2JqZWN0LT5tX3JlZ0V4cEds
b2JhbERhdGEudmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7CiB9CiAKK0RFRklORV9FWFBPUlRfVklT
SVRfQ0hJTERSRU4oSlNHbG9iYWxPYmplY3QpOworCiBDYWxsRnJhbWUqIEpTR2xvYmFsT2JqZWN0
OjpkZXByZWNhdGVkQ2FsbEZyYW1lRm9yRGVidWdnZXIoKQogewogICAgIHJldHVybiBDYWxsRnJh
bWU6OmNyZWF0ZShtX2RlcHJlY2F0ZWRDYWxsRnJhbWVGb3JEZWJ1Z2dlcik7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgJKHJldmlzaW9u
IDI2ODA4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTU4Niw3ICs1ODYsNyBAQCBwdWJsaWM6CiAgICAgSlNfRVhQ
T1JUX1BSSVZBVEUgfkpTR2xvYmFsT2JqZWN0KCk7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3Rh
dGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRp
YyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJF
X0VYUE9SVF9WSVNJVF9DSElMRFJFTjsKIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBi
b29sIGdldE93blByb3BlcnR5U2xvdChKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVy
dHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgYm9v
bCBwdXQoSlNDZWxsKiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1
dFByb3BlcnR5U2xvdCYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJ
bW11dGFibGVCdXR0ZXJmbHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTSW1tdXRhYmxlQnV0dGVyZmx5LmNwcAkocmV2aXNpb24gMjY4MDg2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbW11dGFibGVCdXR0ZXJmbHkuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw4IEBAIG5hbWVzcGFjZSBKU0MgewogCiBjb25zdCBD
bGFzc0luZm8gSlNJbW11dGFibGVCdXR0ZXJmbHk6OnNfaW5mbyA9IHsgIkltbXV0YWJsZSBCdXR0
ZXJmbHkiLCBudWxscHRyLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpT
SW1tdXRhYmxlQnV0dGVyZmx5KSB9OwogCi12b2lkIEpTSW1tdXRhYmxlQnV0dGVyZmx5Ojp2aXNp
dENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0
eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0ltbXV0YWJsZUJ1dHRlcmZseTo6dmlzaXRDaGlsZHJl
bkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEFTU0VSVF9HQ19P
QkpFQ1RfSU5IRVJJVFMoY2VsbCwgaW5mbygpKTsKICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKGNl
bGwsIHZpc2l0b3IpOwpAQCAtNDUsNiArNDYsOCBAQCB2b2lkIEpTSW1tdXRhYmxlQnV0dGVyZmx5
Ojp2aXNpdENoaWxkcmVuCiAgICAgdmlzaXRvci5hcHBlbmRWYWx1ZXNIaWRkZW4oYnV0dGVyZmx5
LT5jb250aWd1b3VzKCkuZGF0YSgpLCBidXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpKTsKIH0KIAor
REVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTSW1tdXRhYmxlQnV0dGVyZmx5KTsKKwogdm9pZCBKU0lt
bXV0YWJsZUJ1dHRlcmZseTo6Y29weVRvQXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1
ZSogZmlyc3RFbGVtZW50RGVzdCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCiB7
CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ltbXV0YWJsZUJ1dHRlcmZseS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTSW1tdXRhYmxlQnV0dGVyZmx5
LmgJKHJldmlzaW9uIDI2ODA4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
SW1tdXRhYmxlQnV0dGVyZmx5LmgJKHdvcmtpbmcgY29weSkKQEAgLTE0NSw3ICsxNDUsNyBAQCBw
dWJsaWM6CiAgICAgICAgIHJldHVybiBqc0RvdWJsZU51bWJlcih2YWx1ZSk7CiAgICAgfQogCi0g
ICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAg
IERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICB2b2lkIGNvcHlUb0FyZ3VtZW50cyhKU0ds
b2JhbE9iamVjdCosIEpTVmFsdWUqIGZpcnN0RWxlbWVudERlc3QsIHVuc2lnbmVkIG9mZnNldCwg
dW5zaWduZWQgbGVuZ3RoKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTSW50ZXJuYWxGaWVsZE9iamVjdEltcGwuaAkocmV2aXNpb24gMjY4
MDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbnRlcm5hbEZpZWxkT2Jq
ZWN0SW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC02Niw3ICs2Niw3IEBAIHB1YmxpYzoKICAgICBz
dGF0aWMgcHRyZGlmZl90IG9mZnNldE9mSW50ZXJuYWxGaWVsZCh1bnNpZ25lZCBpbmRleCkgeyBy
ZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTSW50ZXJuYWxGaWVsZE9iamVjdEltcGwsIG1faW50ZXJu
YWxGaWVsZHMpICsgaW5kZXggKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KTsgfQogCiBw
cm90ZWN0ZWQ6Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90Vmlz
aXRvciYpOworICAgIERFQ0xBUkVfVEVNUExBVEVfVklTSVRfQ0hJTERSRU47CiAKICAgICBKU0lu
dGVybmFsRmllbGRPYmplY3RJbXBsKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiAgICAg
ICAgIDogQmFzZSh2bSwgc3RydWN0dXJlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbElubGluZXMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ludGVybmFsRmllbGRPYmplY3RJbXBsSW5s
aW5lcy5oCShyZXZpc2lvbiAyNjgwODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0ludGVybmFsRmllbGRPYmplY3RJbXBsSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
MCw3ICszMCw4IEBACiBuYW1lc3BhY2UgSlNDIHsKIAogdGVtcGxhdGU8dW5zaWduZWQgcGFzc2Vk
TnVtYmVyT2ZJbnRlcm5hbEZpZWxkcz4KLXZvaWQgSlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbDxw
YXNzZWROdW1iZXJPZkludGVybmFsRmllbGRzPjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGws
IFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQg
SlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbDxwYXNzZWROdW1iZXJPZkludGVybmFsRmllbGRzPjo6
dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAg
IGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbCo+KGNl
bGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsK
QEAgLTM4LDQgKzM5LDYgQEAgdm9pZCBKU0ludGVybmFsRmllbGRPYmplY3RJbXBsPHBhc3NlZE51
bQogICAgIHZpc2l0b3IuYXBwZW5kVmFsdWVzKHRoaXNPYmplY3QtPm1faW50ZXJuYWxGaWVsZHMs
IG51bWJlck9mSW50ZXJuYWxGaWVsZHMpOwogfQogCitERUZJTkVfVEVNUExBVEVfVklTSVRfQ0hJ
TERSRU4odGVtcGxhdGU8dW5zaWduZWQgcGFzc2VkTnVtYmVyT2ZJbnRlcm5hbEZpZWxkcz4sIEpT
SW50ZXJuYWxGaWVsZE9iamVjdEltcGw8cGFzc2VkTnVtYmVyT2ZJbnRlcm5hbEZpZWxkcz4pOwor
CiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTTGV4aWNhbEVudmlyb25tZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0xleGljYWxFbnZpcm9ubWVudC5jcHAJKHJldmlzaW9uIDI2ODA4NikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTGV4aWNhbEVudmlyb25tZW50LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsOCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogY29u
c3QgQ2xhc3NJbmZvIEpTTGV4aWNhbEVudmlyb25tZW50OjpzX2luZm8gPSB7ICJKU0xleGljYWxF
bnZpcm9ubWVudCIsICZCYXNlOjpzX2luZm8sIG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRI
T0RfVEFCTEUoSlNMZXhpY2FsRW52aXJvbm1lbnQpIH07CiAKLXZvaWQgSlNMZXhpY2FsRW52aXJv
bm1lbnQ6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikK
K3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTTGV4aWNhbEVudmlyb25tZW50Ojp2
aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAg
YXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0xleGljYWxFbnZpcm9ubWVudCo+KGNlbGwpOwog
ICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTQ0
LDYgKzQ1LDggQEAgdm9pZCBKU0xleGljYWxFbnZpcm9ubWVudDo6dmlzaXRDaGlsZHJlbgogICAg
IHZpc2l0b3IuYXBwZW5kVmFsdWVzSGlkZGVuKHRoaXNPYmplY3QtPnZhcmlhYmxlcygpLCB0aGlz
T2JqZWN0LT5zeW1ib2xUYWJsZSgpLT5zY29wZVNpemUoKSk7CiB9CiAKK0RFRklORV9WSVNJVF9D
SElMRFJFTihKU0xleGljYWxFbnZpcm9ubWVudCk7CisKIHZvaWQgSlNMZXhpY2FsRW52aXJvbm1l
bnQ6OmFuYWx5emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFuYWx5emVyJiBhbmFseXplcikKIHsK
ICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTTGV4aWNhbEVudmlyb25tZW50Kj4oY2Vs
bCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xleGljYWxFbnZpcm9u
bWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTGV4
aWNhbEVudmlyb25tZW50LmgJKHJldmlzaW9uIDI2ODA4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTTGV4aWNhbEVudmlyb25tZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEz
NCw3ICsxMzQsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBzdGF0aWMg
dm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9W
SVNJVF9DSElMRFJFTjsKICAgICBzdGF0aWMgdm9pZCBhbmFseXplSGVhcChKU0NlbGwqLCBIZWFw
QW5hbHl6ZXImKTsKIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
TWFwSXRlcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTTWFwSXRlcmF0b3IuY3BwCShyZXZpc2lvbiAyNjgwODYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU01hcEl0ZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTcs
MTMgKzU3LDE2IEBAIHZvaWQgSlNNYXBJdGVyYXRvcjo6ZmluaXNoQ3JlYXRpb24oVk0mIHYKICAg
ICAgICAgQmFzZTo6aW50ZXJuYWxGaWVsZChpbmRleCkuc2V0KHZtLCB0aGlzLCB2YWx1ZXNbaW5k
ZXhdKTsKIH0KIAotdm9pZCBKU01hcEl0ZXJhdG9yOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2Vs
bCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9p
ZCBKU01hcEl0ZXJhdG9yOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3Im
IHZpc2l0b3IpCiB7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU01hcEl0ZXJhdG9y
Kj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZv
KCkpOwogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CiB9CiAK
K0RFRklORV9WSVNJVF9DSElMRFJFTihKU01hcEl0ZXJhdG9yKTsKKwogSlNWYWx1ZSBKU01hcEl0
ZXJhdG9yOjpjcmVhdGVQYWlyKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUg
a2V5LCBKU1ZhbHVlIHZhbHVlKQogewogICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3M7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01hcEl0ZXJhdG9yLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNYXBJdGVyYXRvci5oCShy
ZXZpc2lvbiAyNjgwODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01hcEl0
ZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0Miw3ICsxNDIsNyBAQCBwcml2YXRlOgogICAg
IEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBKU01hcCosIEl0ZXJh
dGlvbktpbmQpOwogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKICAgICBKU1ZhbHVlIGNy
ZWF0ZVBhaXIoSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlLCBKU1ZhbHVlKTsKLSAgICBzdGF0aWMg
dm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9W
SVNJVF9DSElMRFJFTjsKIH07CiBTVEFUSUNfQVNTRVJUX0lTX1RSSVZJQUxMWV9ERVNUUlVDVElC
TEUoSlNNYXBJdGVyYXRvcik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTTW9kdWxlRW52aXJvbm1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTTW9kdWxlRW52aXJvbm1lbnQuY3BwCShyZXZpc2lvbiAyNjgwODYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZUVudmlyb25tZW50LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNjUsNyArNjUsOCBAQCB2b2lkIEpTTW9kdWxlRW52aXJvbm1lbnQ6
OmZpbmlzaENyZWF0aW9uCiAgICAgdGhpcy0+bW9kdWxlUmVjb3JkU2xvdCgpLnNldCh2bSwgdGhp
cywgbW9kdWxlUmVjb3JkKTsKIH0KIAotdm9pZCBKU01vZHVsZUVudmlyb25tZW50Ojp2aXNpdENo
aWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBl
bmFtZSBWaXNpdG9yPgordm9pZCBKU01vZHVsZUVudmlyb25tZW50Ojp2aXNpdENoaWxkcmVuSW1w
bChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNNb2R1bGVFbnZpcm9u
bWVudCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU01vZHVsZUVudmlyb25tZW50Kj4oY2VsbCk7CiAg
ICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNzQs
NiArNzUsOCBAQCB2b2lkIEpTTW9kdWxlRW52aXJvbm1lbnQ6OnZpc2l0Q2hpbGRyZW4oCiAgICAg
dmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bW9kdWxlUmVjb3JkU2xvdCgpKTsKIH0KIAorREVG
SU5FX1ZJU0lUX0NISUxEUkVOKEpTTW9kdWxlRW52aXJvbm1lbnQpOworCiBib29sIEpTTW9kdWxl
RW52aXJvbm1lbnQ6OmdldE93blByb3BlcnR5U2xvdChKU09iamVjdCogY2VsbCwgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlT
bG90JiBzbG90KQogewogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlRW52aXJvbm1lbnQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZUVudmlyb25tZW50
LmgJKHJldmlzaW9uIDI2ODA4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
TW9kdWxlRW52aXJvbm1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtODksNyArODksNyBAQCBwcml2
YXRlOgogICAgICAgICByZXR1cm4gKmJpdHdpc2VfY2FzdDxXcml0ZUJhcnJpZXJCYXNlPEFic3Ry
YWN0TW9kdWxlUmVjb3JkPio+KGJpdHdpc2VfY2FzdDxjaGFyKj4odGhpcykgKyBvZmZzZXRPZk1v
ZHVsZVJlY29yZChzeW1ib2xUYWJsZSgpKSk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgdmlz
aXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJ
TERSRU47CiB9OwogCiBpbmxpbmUgSlNNb2R1bGVFbnZpcm9ubWVudDo6SlNNb2R1bGVFbnZpcm9u
bWVudChWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU1Njb3BlKiBjdXJyZW50U2NvcGUs
IFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTTW9kdWxlTmFtZXNwYWNlT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZU5hbWVzcGFjZU9iamVjdC5jcHAJKHJldmlz
aW9uIDI2ODA4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlTmFt
ZXNwYWNlT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODUsNyArODUsOCBAQCB2b2lkIEpT
TW9kdWxlTmFtZXNwYWNlT2JqZWN0OjpkZXN0cm95KEpTCiAgICAgdGhpc09iamVjdC0+SlNNb2R1
bGVOYW1lc3BhY2VPYmplY3Q6On5KU01vZHVsZU5hbWVzcGFjZU9iamVjdCgpOwogfQogCi12b2lk
IEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xv
dFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU01v
ZHVsZU5hbWVzcGFjZU9iamVjdDo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNp
dG9yJiB2aXNpdG9yKQogewogICAgIEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0KiB0aGlzT2JqZWN0
ID0ganNDYXN0PEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0Kj4oY2VsbCk7CiAgICAgQVNTRVJUX0dD
X09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtOTgsNiArOTksOCBAQCB2
b2lkIEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0Ojp2aXNpdENoaWxkCiAgICAgfQogfQogCitERUZJ
TkVfVklTSVRfQ0hJTERSRU4oSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QpOworCiBzdGF0aWMgSlNW
YWx1ZSBnZXRWYWx1ZShKU01vZHVsZUVudmlyb25tZW50KiBlbnZpcm9ubWVudCwgUHJvcGVydHlO
YW1lIGxvY2FsTmFtZSwgU2NvcGVPZmZzZXQmIHNjb3BlT2Zmc2V0KQogewogICAgIFN5bWJvbFRh
YmxlKiBzeW1ib2xUYWJsZSA9IGVudmlyb25tZW50LT5zeW1ib2xUYWJsZSgpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZU5hbWVzcGFj
ZU9iamVjdC5oCShyZXZpc2lvbiAyNjgwODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU01vZHVsZU5hbWVzcGFjZU9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC03Miw3ICs3
Miw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgSlNNb2R1bGVO
YW1lc3BhY2VPYmplY3QoVk0mLCBTdHJ1Y3R1cmUqKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSB2
b2lkIGZpbmlzaENyZWF0aW9uKEpTR2xvYmFsT2JqZWN0KiwgQWJzdHJhY3RNb2R1bGVSZWNvcmQq
LCBWZWN0b3I8c3RkOjpwYWlyPElkZW50aWZpZXIsIEFic3RyYWN0TW9kdWxlUmVjb3JkOjpSZXNv
bHV0aW9uPj4mJik7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90
VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAgICAgYm9vbCBnZXRPd25Q
cm9wZXJ0eVNsb3RDb21tb24oSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5
U2xvdCYpOwogCiAgICAgc3RydWN0IEV4cG9ydEVudHJ5IHsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlUmVjb3JkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZVJlY29yZC5jcHAJKHJldmlzaW9uIDI2ODA4
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlUmVjb3JkLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNzAsNyArNzAsOCBAQCB2b2lkIEpTTW9kdWxlUmVjb3JkOjpmaW5p
c2hDcmVhdGlvbihKU0dsCiAgICAgQVNTRVJUKGluaGVyaXRzKHZtLCBpbmZvKCkpKTsKIH0KIAot
dm9pZCBKU01vZHVsZVJlY29yZDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNp
dG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNNb2R1bGVS
ZWNvcmQ6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikK
IHsKICAgICBKU01vZHVsZVJlY29yZCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU01vZHVsZVJlY29y
ZCo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5m
bygpKTsKQEAgLTc4LDYgKzc5LDggQEAgdm9pZCBKU01vZHVsZVJlY29yZDo6dmlzaXRDaGlsZHJl
bihKU0NlbAogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fbW9kdWxlUHJvZ3JhbUV4
ZWN1dGFibGUpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNNb2R1bGVSZWNvcmQpOwor
CiB2b2lkIEpTTW9kdWxlUmVjb3JkOjpsaW5rKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEpTVmFsdWUgc2NyaXB0RmV0Y2hlcikKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZt
KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZVJlY29yZC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlUmVj
b3JkLmgJKHJldmlzaW9uIDI2ODA4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTTW9kdWxlUmVjb3JkLmgJKHdvcmtpbmcgY29weSkKQEAgLTY2LDcgKzY2LDcgQEAgcHJpdmF0
ZToKIAogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxPYmplY3QqLCBWTSYpOwogCi0g
ICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAg
IERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICB2b2lkIGluc3RhbnRpYXRlRGVjbGFyYXRp
b25zKEpTR2xvYmFsT2JqZWN0KiwgTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUqLCBKU1ZhbHVlIHNj
cmlwdEZldGNoZXIpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU05h
dGl2ZVN0ZEZ1bmN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU05hdGl2ZVN0ZEZ1bmN0aW9uLmNwcAkocmV2aXNpb24gMjY4MDg2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNOYXRpdmVTdGRGdW5jdGlvbi5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQxLDEzICs0MSwxNiBAQCBKU05hdGl2ZVN0ZEZ1bmN0aW9uOjpKU05hdGl2
ZVN0ZEZ1bmN0aW9uCiB7CiB9CiAKLXZvaWQgSlNOYXRpdmVTdGRGdW5jdGlvbjo6dmlzaXRDaGls
ZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5h
bWUgVmlzaXRvcj4KK3ZvaWQgSlNOYXRpdmVTdGRGdW5jdGlvbjo6dmlzaXRDaGlsZHJlbkltcGwo
SlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTTmF0aXZlU3RkRnVuY3Rp
b24qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNOYXRpdmVTdGRGdW5jdGlvbio+KGNlbGwpOwogICAg
IEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKICAgICBCYXNl
Ojp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwogfQogCitERUZJTkVfVklTSVRf
Q0hJTERSRU4oSlNOYXRpdmVTdGRGdW5jdGlvbik7CisKIHZvaWQgSlNOYXRpdmVTdGRGdW5jdGlv
bjo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBOYXRpdmVFeGVjdXRhYmxlKiBleGVjdXRhYmxlLCB1
bnNpZ25lZCBsZW5ndGgsIGNvbnN0IFN0cmluZyYgbmFtZSkKIHsKICAgICBCYXNlOjpmaW5pc2hD
cmVhdGlvbih2bSwgZXhlY3V0YWJsZSwgbGVuZ3RoLCBuYW1lKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTTmF0aXZlU3RkRnVuY3Rpb24uaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU05hdGl2ZVN0ZEZ1bmN0aW9uLmgJKHJldmlz
aW9uIDI2ODA4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTmF0aXZlU3Rk
RnVuY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtNjUsNyArNjUsNyBAQCBwdWJsaWM6CiBwcml2
YXRlOgogICAgIEpTTmF0aXZlU3RkRnVuY3Rpb24oVk0mLCBOYXRpdmVFeGVjdXRhYmxlKiwgSlNH
bG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqLCBOYXRpdmVTdGRGdW5jdGlvbiYmKTsKICAgICB2b2lk
IGZpbmlzaENyZWF0aW9uKFZNJiwgTmF0aXZlRXhlY3V0YWJsZSosIHVuc2lnbmVkIGxlbmd0aCwg
Y29uc3QgU3RyaW5nJiBuYW1lKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2Vs
bCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIE5h
dGl2ZVN0ZEZ1bmN0aW9uIG1fZnVuY3Rpb247CiB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAkocmV2aXNpb24gMjY4MDg2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjAs
NyArMTIwLDggQEAgQUxXQVlTX0lOTElORSB2b2lkIEpTT2JqZWN0OjptYXJrQXV4aWxpYQogICAg
IHZpc2l0b3IuYXBwZW5kVmFsdWVzSGlkZGVuKGJ1dHRlcmZseS0+cHJvcGVydHlTdG9yYWdlKCkg
LSBvdXRPZkxpbmVTaXplLCBvdXRPZkxpbmVTaXplKTsKIH0KIAotQUxXQVlTX0lOTElORSBTdHJ1
Y3R1cmUqIEpTT2JqZWN0Ojp2aXNpdEJ1dHRlcmZseShTbG90VmlzaXRvciYgdmlzaXRvcikKK3Rl
bXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+CitBTFdBWVNfSU5MSU5FIFN0cnVjdHVyZSogSlNPYmpl
Y3Q6OnZpc2l0QnV0dGVyZmx5KFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgc3RhdGljIGNvbnN0
IGNoYXIqIGNvbnN0IHJhY2VSZWFzb24gPSAiSlNPYmplY3Q6OnZpc2l0QnV0dGVyZmx5IjsKICAg
ICBTdHJ1Y3R1cmUqIHJlc3VsdCA9IHZpc2l0QnV0dGVyZmx5SW1wbCh2aXNpdG9yKTsKQEAgLTEy
OSw3ICsxMzAsOCBAQCBBTFdBWVNfSU5MSU5FIFN0cnVjdHVyZSogSlNPYmplY3Q6OnZpc2l0CiAg
ICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotQUxXQVlTX0lOTElORSBTdHJ1Y3R1cmUqIEpTT2JqZWN0
Ojp2aXNpdEJ1dHRlcmZseUltcGwoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBl
bmFtZSBWaXNpdG9yPgorQUxXQVlTX0lOTElORSBTdHJ1Y3R1cmUqIEpTT2JqZWN0Ojp2aXNpdEJ1
dHRlcmZseUltcGwoVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBWTSYgdm0gPSB2aXNpdG9yLnZt
KCk7CiAgICAgCkBAIC00MjksNyArNDMxLDggQEAgc2l6ZV90IEpTT2JqZWN0Ojplc3RpbWF0ZWRT
aXplKEpTQ2VsbCogYwogICAgIHJldHVybiBCYXNlOjplc3RpbWF0ZWRTaXplKGNlbGwsIHZtKSAr
IGJ1dHRlcmZseU91dE9mTGluZVNpemU7CiB9CiAKLXZvaWQgSlNPYmplY3Q6OnZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1l
IFZpc2l0b3I+Cit2b2lkIEpTT2JqZWN0Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGws
IFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8
SlNPYmplY3QqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmpl
Y3QsIGluZm8oKSk7CkBAIC00MzcsMTYgKzQ0MCwxOCBAQCB2b2lkIEpTT2JqZWN0Ojp2aXNpdENo
aWxkcmVuKEpTQ2VsbCogY2VsCiAgICAgYm9vbCB3YXNDaGVja2luZ0ZvckRlZmF1bHRNYXJrVmlv
bGF0aW9uID0gdmlzaXRvci5tX2lzQ2hlY2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlvbjsKICAg
ICB2aXNpdG9yLm1faXNDaGVja2luZ0ZvckRlZmF1bHRNYXJrVmlvbGF0aW9uID0gZmFsc2U7CiAj
ZW5kaWYKLSAgICAKKwogICAgIEpTQ2VsbDo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNp
dG9yKTsKLSAgICAKKwogICAgIHRoaXNPYmplY3QtPnZpc2l0QnV0dGVyZmx5KHZpc2l0b3IpOwot
ICAgIAorCiAjaWYgQVNTRVJUX0VOQUJMRUQKICAgICB2aXNpdG9yLm1faXNDaGVja2luZ0ZvckRl
ZmF1bHRNYXJrVmlvbGF0aW9uID0gd2FzQ2hlY2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlvbjsK
ICNlbmRpZgogfQogCitERUZJTkVfRVhQT1JUX1ZJU0lUX0NISUxEUkVOKEpTT2JqZWN0KTsKKwog
dm9pZCBKU09iamVjdDo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFu
YWx5emVyKQogewogICAgIEpTT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTT2JqZWN0Kj4o
Y2VsbCk7CkBAIC00ODUsNyArNDkwLDggQEAgdm9pZCBKU09iamVjdDo6YW5hbHl6ZUhlYXAoSlND
ZWxsKiBjZWxsLAogICAgIH0KIH0KIAotdm9pZCBKU0ZpbmFsT2JqZWN0Ojp2aXNpdENoaWxkcmVu
KEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPgordm9pZCBKU0ZpbmFsT2JqZWN0Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNl
bGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNGaW5hbE9iamVjdCogdGhpc09iamVjdCA9
IGpzQ2FzdDxKU0ZpbmFsT2JqZWN0Kj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhF
UklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNTA2LDYgKzUxMiw4IEBAIHZvaWQgSlNGaW5h
bE9iamVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwKICNlbmRpZgogfQogCitERUZJTkVfRVhQT1JU
X1ZJU0lUX0NISUxEUkVOKEpTRmluYWxPYmplY3QpOworCiBTdHJpbmcgSlNPYmplY3Q6OmNsYXNz
TmFtZShjb25zdCBKU09iamVjdCogb2JqZWN0LCBWTSYgdm0pCiB7CiAgICAgY29uc3QgQ2xhc3NJ
bmZvKiBpbmZvID0gb2JqZWN0LT5jbGFzc0luZm8odm0pOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU09iamVjdC5oCShyZXZpc2lvbiAyNjgwODYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDgsOCAr
MTA4LDkgQEAgY2xhc3MgSlNPYmplY3QgOiBwdWJsaWMgSlNDZWxsIHsKIHB1YmxpYzoKICAgICB1
c2luZyBCYXNlID0gSlNDZWxsOwogCisgICAgREVDTEFSRV9FWFBPUlRfVklTSVRfQ0hJTERSRU47
CisKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgc2l6ZV90IGVzdGltYXRlZFNpemUoSlND
ZWxsKiwgVk0mKTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCB2aXNpdENoaWxk
cmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGlj
IHZvaWQgYW5hbHl6ZUhlYXAoSlNDZWxsKiwgSGVhcEFuYWx5emVyJik7CiAKICAgICBKU19FWFBP
UlRfUFJJVkFURSBzdGF0aWMgU3RyaW5nIGNsYXNzTmFtZShjb25zdCBKU09iamVjdCosIFZNJik7
CkBAIC05NzksOSArOTgwLDkgQEAgcHJvdGVjdGVkOgogICAgIEpTT2JqZWN0KFZNJiwgU3RydWN0
dXJlKiwgQnV0dGVyZmx5KiA9IG51bGxwdHIpOwogICAgIAogICAgIC8vIFZpc2l0cyB0aGUgYnV0
dGVyZmx5IHVubGVzcyB0aGVyZSBpcyBhIHJhY2UuIFJldHVybnMgdGhlIHN0cnVjdHVyZSBpZiB0
aGVyZSB3YXMgbm8gcmFjZS4KLSAgICBTdHJ1Y3R1cmUqIHZpc2l0QnV0dGVyZmx5KFNsb3RWaXNp
dG9yJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gU3RydWN0dXJlKiB2aXNpdEJ1
dHRlcmZseShWaXNpdG9yJik7CiAgICAgCi0gICAgU3RydWN0dXJlKiB2aXNpdEJ1dHRlcmZseUlt
cGwoU2xvdFZpc2l0b3ImKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiBTdHJ1Y3R1
cmUqIHZpc2l0QnV0dGVyZmx5SW1wbChWaXNpdG9yJik7CiAgICAgCiAgICAgdm9pZCBtYXJrQXV4
aWxpYXJ5QW5kVmlzaXRPdXRPZkxpbmVQcm9wZXJ0aWVzKFNsb3RWaXNpdG9yJiwgQnV0dGVyZmx5
KiwgU3RydWN0dXJlKiwgUHJvcGVydHlPZmZzZXQgbWF4T2Zmc2V0KTsKIApAQCAtMTE3MSw4ICsx
MTcyLDYgQEAgcHJvdGVjdGVkOgogICAgIH0KIH07CiAKLWNsYXNzIEpTRmluYWxPYmplY3Q7Ci0K
IC8vIEpTRmluYWxPYmplY3QgaXMgYSB0eXBlIG9mIEpTT2JqZWN0IHRoYXQgY29udGFpbnMgc3Vm
ZmljaWVudCBpbnRlcm5hbAogLy8gc3RvcmFnZSB0byBmdWxseSBtYWtlIHVzZSBvZiB0aGUgY29s
bGVjdG9yIGNlbGwgY29udGFpbmluZyBpdC4KIGNsYXNzIEpTRmluYWxPYmplY3QgZmluYWwgOiBw
dWJsaWMgSlNPYmplY3QgewpAQCAtMTIxMSwxNSArMTIxMCwxMyBAQCBwdWJsaWM6CiAgICAgICAg
IHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIHR5
cGVJbmZvKCksIGluZm8oKSwgZGVmYXVsdEluZGV4aW5nVHlwZSwgaW5saW5lQ2FwYWNpdHkpOwog
ICAgIH0KIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4o
SlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX0VYUE9SVF9WSVNJVF9DSElMRFJF
TjsKIAogICAgIERFQ0xBUkVfRVhQT1JUX0lORk87CiAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNs
YXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKIAotICAgIHZvaWQgdmlzaXRDaGlsZHJlbkNvbW1v
bihTbG90VmlzaXRvciYpOwotCiAgICAgZXhwbGljaXQgSlNGaW5hbE9iamVjdChWTSYgdm0sIFN0
cnVjdHVyZSogc3RydWN0dXJlLCBCdXR0ZXJmbHkqIGJ1dHRlcmZseSkKICAgICAgICAgOiBKU09i
amVjdCh2bSwgc3RydWN0dXJlLCBidXR0ZXJmbHkpCiAgICAgewpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9taXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb21pc2UuY3BwCShyZXZpc2lvbiAyNjgwODYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb21pc2UuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC02NywxMyArNjcsMTYgQEAgdm9pZCBKU1Byb21pc2U6OmZpbmlzaENyZWF0aW9uKFZNJiB2
bSkKICAgICAgICAgQmFzZTo6aW50ZXJuYWxGaWVsZChpbmRleCkuc2V0KHZtLCB0aGlzLCB2YWx1
ZXNbaW5kZXhdKTsKIH0KIAotdm9pZCBKU1Byb21pc2U6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBj
ZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2
b2lkIEpTUHJvbWlzZTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2
aXNpdG9yKQogewogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNQcm9taXNlKj4oY2Vs
bCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwog
ICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CiB9CiAKK0RFRklO
RV9WSVNJVF9DSElMRFJFTihKU1Byb21pc2UpOworCiBhdXRvIEpTUHJvbWlzZTo6c3RhdHVzKFZN
JikgY29uc3QgLT4gU3RhdHVzCiB7CiAgICAgSlNWYWx1ZSB2YWx1ZSA9IGludGVybmFsRmllbGQo
RmllbGQ6OkZsYWdzKS5nZXQoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTUHJvbWlzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTUHJvbWlzZS5oCShyZXZpc2lvbiAyNjgwODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU1Byb21pc2UuaAkod29ya2luZyBjb3B5KQpAQCAtOTMsNyArOTMsNyBAQCBwdWJs
aWM6CiAgICAgfTsKICAgICBzdGF0aWMgRGVmZXJyZWREYXRhIGNyZWF0ZURlZmVycmVkRGF0YShK
U0dsb2JhbE9iamVjdCosIEpTUHJvbWlzZUNvbnN0cnVjdG9yKik7CiAKLSAgICBzdGF0aWMgdm9p
ZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJ
VF9DSElMRFJFTjsKIAogcHJvdGVjdGVkOgogICAgIEpTUHJvbWlzZShWTSYsIFN0cnVjdHVyZSop
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVFbnVt
ZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuY3BwCShyZXZpc2lvbiAyNjgwODYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC03MCw3ICs3MCw4IEBAIHZvaWQgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9y
OjpmaW5pc2hDcmUKICAgICB9CiB9CiAKLXZvaWQgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjp2
aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0
ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OnZpc2l0
Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU1By
b3BlcnR5TmFtZUVudW1lcmF0b3IqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2Jq
ZWN0LCBpbmZvKCkpOwpAQCAtODcsNCArODgsNiBAQCB2b2lkIEpTUHJvcGVydHlOYW1lRW51bWVy
YXRvcjo6dmlzaXRDaGlsCiAgICAgfQogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNQcm9w
ZXJ0eU5hbWVFbnVtZXJhdG9yKTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3BlcnR5TmFtZUVudW1l
cmF0b3IuaAkocmV2aXNpb24gMjY4MDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTg0LDcgKzg0
LDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTUHJvcGVydHlO
YW1lRW51bWVyYXRvciwgbV9wcm9wZXJ0eU5hbWVzKTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9p
ZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJ
VF9DSElMRFJFTjsKIAogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0
cmFjdG9yOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm94eS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm94eS5jcHAJ
KHJldmlzaW9uIDI2ODA4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJv
eHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw3ICszNSw4IEBAIFNUQVRJQ19BU1NFUlRfSVNf
VFJJVklBTExZX0RFU1RSVUNUSUJMRSgKIAogY29uc3QgQ2xhc3NJbmZvIEpTUHJveHk6OnNfaW5m
byA9IHsgIkpTUHJveHkiLCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVf
TUVUSE9EX1RBQkxFKEpTUHJveHkpIH07CiAKLXZvaWQgSlNQcm94eTo6dmlzaXRDaGlsZHJlbihK
U0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlz
aXRvcj4KK3ZvaWQgSlNQcm94eTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNp
dG9yJiB2aXNpdG9yKQogewogICAgIEpTUHJveHkqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNQcm94
eSo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5m
bygpKTsKQEAgLTQzLDYgKzQ0LDggQEAgdm9pZCBKU1Byb3h5Ojp2aXNpdENoaWxkcmVuKEpTQ2Vs
bCogY2VsbAogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fdGFyZ2V0KTsKIH0KIAor
REVGSU5FX0VYUE9SVF9WSVNJVF9DSElMRFJFTihKU1Byb3h5KTsKKwogdm9pZCBKU1Byb3h5Ojpz
ZXRUYXJnZXQoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQogewogICAgIG1f
dGFyZ2V0LnNldCh2bSwgdGhpcywgZ2xvYmFsT2JqZWN0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTUHJveHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU1Byb3h5LmgJKHJldmlzaW9uIDI2ODA4NikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTUHJveHkuaAkod29ya2luZyBjb3B5KQpAQCAtODUsNyArODUs
NyBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIG1fdGFyZ2V0LnNldCh2bSwgdGhpcywgdGFyZ2V0KTsK
ICAgICB9CiAKLSAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVu
KEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9FWFBPUlRfVklTSVRfQ0hJTERS
RU47CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgU3RyaW5nIGNsYXNzTmFtZShjb25z
dCBKU09iamVjdCosIFZNJik7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFN0cmluZyB0
b1N0cmluZ05hbWUoY29uc3QgSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCopOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTY29wZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTY29wZS5jcHAJKHJldmlzaW9uIDI2ODA4NikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2NvcGUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zOSw3ICszOSw4IEBAIFNUQVRJQ19BU1NFUlRfSVNfVFJJVklBTExZX0RFU1RSVUNU
SUJMRSgKIAogY29uc3QgQ2xhc3NJbmZvIEpTU2NvcGU6OnNfaW5mbyA9IHsgIlNjb3BlIiwgJkJh
c2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1Njb3Bl
KSB9OwogCi12b2lkIEpTU2NvcGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90Vmlz
aXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTU2NvcGU6
OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAg
ICBKU1Njb3BlKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTU2NvcGUqPihjZWxsKTsKICAgICBBU1NF
UlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC00Nyw2ICs0OCw4
IEBAIHZvaWQgSlNTY29wZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwKICAgICB2aXNpdG9y
LmFwcGVuZCh0aGlzT2JqZWN0LT5tX25leHQpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4o
SlNTY29wZSk7CisKIC8vIFJldHVybnMgdHJ1ZSBpZiB3ZSBmb3VuZCBlbm91Z2ggaW5mb3JtYXRp
b24gdG8gdGVybWluYXRlIG9wdGltaXphdGlvbi4KIHN0YXRpYyBpbmxpbmUgYm9vbCBhYnN0cmFj
dEFjY2VzcyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1Njb3BlKiBzY29wZSwgY29u
c3QgSWRlbnRpZmllciYgaWRlbnQsIEdldE9yUHV0IGdldE9yUHV0LCBzaXplX3QgZGVwdGgsIGJv
b2wmIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCBSZXNvbHZlT3AmIG9wLCBJbml0aWFsaXphdGlv
bk1vZGUgaW5pdGlhbGl6YXRpb25Nb2RlKQogewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNTY29wZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTU2NvcGUuaAkocmV2aXNpb24gMjY4MDg2KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNTY29wZS5oCSh3b3JraW5nIGNvcHkpCkBAIC02Miw3ICs2Miw3IEBAIHB1
YmxpYzoKIAogICAgIHN0YXRpYyB2b2lkIGNvbGxlY3RDbG9zdXJlVmFyaWFibGVzVW5kZXJURFoo
SlNTY29wZSosIFZhcmlhYmxlRW52aXJvbm1lbnQmIHJlc3VsdCk7CiAKLSAgICBzdGF0aWMgdm9p
ZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJ
VF9DSElMRFJFTjsKIAogICAgIGJvb2wgaXNWYXJTY29wZSgpOwogICAgIGJvb2wgaXNMZXhpY2Fs
U2NvcGUoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2VnbWVudGVk
VmFyaWFibGVPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVPYmplY3QuY3BwCShyZXZpc2lvbiAyNjgwODYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjIsMTkgKzYyLDIyIEBAIFNjb3BlT2Zmc2V0IEpTU2Vn
bWVudGVkVmFyaWFibGVPYmplY3Q6OmEKICAgICByZXR1cm4gU2NvcGVPZmZzZXQob2xkU2l6ZSk7
CiB9CiAKLXZvaWQgSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdDo6dmlzaXRDaGlsZHJlbihKU0Nl
bGwqIGNlbGwsIFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZp
c2l0b3I+Cit2b2lkIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3Q6OnZpc2l0Q2hpbGRyZW5JbXBs
KEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU1NlZ21lbnRlZFZhcmlh
YmxlT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3Qq
PihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8o
KSk7Ci0gICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCBzbG90VmlzaXRvcik7Cisg
ICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKICAgICAKICAgICAv
LyBGSVhNRTogV2UgY291bGQgYXZvaWQgbG9ja2luZyBoZXJlIGlmIFNlZ21lbnRlZFZlY3RvciB3
YXMgbG9jay1mcmVlLiBJdCBjb3VsZCBiZSBtYWRlIGxvY2stZnJlZQogICAgIC8vIHJlbGF0aXZl
bHkgZWFzaWx5LgogICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sodGhpc09iamVjdC0+Y2VsbExv
Y2soKSk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gdGhpc09iamVjdC0+bV92YXJpYWJsZXMuc2l6
ZSgpOyBpLS07KQotICAgICAgICBzbG90VmlzaXRvci5hcHBlbmRIaWRkZW4odGhpc09iamVjdC0+
bV92YXJpYWJsZXNbaV0pOworICAgICAgICB2aXNpdG9yLmFwcGVuZEhpZGRlbih0aGlzT2JqZWN0
LT5tX3ZhcmlhYmxlc1tpXSk7CiB9CiAKK0RFRklORV9FWFBPUlRfVklTSVRfQ0hJTERSRU4oSlNT
ZWdtZW50ZWRWYXJpYWJsZU9iamVjdCk7CisKIHZvaWQgSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVj
dDo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQogewog
ICAgIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNTZWdt
ZW50ZWRWYXJpYWJsZU9iamVjdCo+KGNlbGwpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVPYmplY3QuaAkocmV2
aXNpb24gMjY4MDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZWdtZW50
ZWRWYXJpYWJsZU9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC04Niw3ICs4Niw3IEBAIHB1Ymxp
YzoKICAgICAvLyB0aGUgaW5kZXggb2YgdGhlIGZpcnN0IG9uZSBhZGRlZC4KICAgICBKU19FWFBP
UlRfUFJJVkFURSBTY29wZU9mZnNldCBhZGRWYXJpYWJsZXModW5zaWduZWQgbnVtYmVyT2ZWYXJp
YWJsZXNUb0FkZCwgSlNWYWx1ZSk7CiAgICAgCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGlj
IHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVf
RVhQT1JUX1ZJU0lUX0NISUxEUkVOOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lk
IGFuYWx5emVIZWFwKEpTQ2VsbCosIEhlYXBBbmFseXplciYpOwogICAgIAogcHJvdGVjdGVkOgpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZXRJdGVyYXRvci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZXRJdGVyYXRvci5j
cHAJKHJldmlzaW9uIDI2ODA4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
U2V0SXRlcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NywxMyArNTcsMTYgQEAgdm9pZCBK
U1NldEl0ZXJhdG9yOjpmaW5pc2hDcmVhdGlvbihWTSYgdgogICAgICAgICBCYXNlOjppbnRlcm5h
bEZpZWxkKGluZGV4KS5zZXQodm0sIHRoaXMsIHZhbHVlc1tpbmRleF0pOwogfQogCi12b2lkIEpT
U2V0SXRlcmF0b3I6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlz
aXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTU2V0SXRlcmF0b3I6OnZp
c2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBh
dXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTU2V0SXRlcmF0b3IqPihjZWxsKTsKICAgICBBU1NF
UlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAgICAgQmFzZTo6dmlz
aXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxE
UkVOKEpTU2V0SXRlcmF0b3IpOworCiBKU1ZhbHVlIEpTU2V0SXRlcmF0b3I6OmNyZWF0ZVBhaXIo
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBrZXksIEpTVmFsdWUgdmFsdWUp
CiB7CiAgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgYXJnczsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTU2V0SXRlcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU1NldEl0ZXJhdG9yLmgJKHJldmlzaW9uIDI2ODA4NikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2V0SXRlcmF0b3IuaAkod29ya2luZyBj
b3B5KQpAQCAtMTMwLDcgKzEzMCw3IEBAIHByaXZhdGU6CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUg
dm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIEpTU2V0KiwgSXRlcmF0aW9uS2luZCk7CiAgICAgdm9p
ZCBmaW5pc2hDcmVhdGlvbihWTSYpOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIEpTVmFsdWUgY3Jl
YXRlUGFpcihKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUsIEpTVmFsdWUpOwotICAgIHN0YXRpYyB2
b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJ
U0lUX0NISUxEUkVOOwogfTsKIFNUQVRJQ19BU1NFUlRfSVNfVFJJVklBTExZX0RFU1RSVUNUSUJM
RShKU1NldEl0ZXJhdG9yKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNTb3VyY2VDb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1NvdXJjZUNvZGUuY3BwCShyZXZpc2lvbiAyNjgwODYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU1NvdXJjZUNvZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2
ICsyNiw4IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSlNTb3VyY2VDb2RlLmgi
CiAKKyNpbmNsdWRlICJKU0NlbGxJbmxpbmVzLmgiIC8vIG1sYW0gVEVTVAorCiBuYW1lc3BhY2Ug
SlNDIHsKIAogY29uc3QgQ2xhc3NJbmZvIEpTU291cmNlQ29kZTo6c19pbmZvID0geyAiSlNTb3Vy
Y2VDb2RlIiwgbnVsbHB0ciwgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShK
U1NvdXJjZUNvZGUpIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0
cmluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNT
dHJpbmcuY3BwCShyZXZpc2lvbiAyNjgwODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1N0cmluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNSw3ICsxMDUsOCBAQCBzaXpl
X3QgSlNTdHJpbmc6OmVzdGltYXRlZFNpemUoSlNDZWxsKiBjCiAgICAgcmV0dXJuIEJhc2U6OmVz
dGltYXRlZFNpemUoY2VsbCwgdm0pICsgYml0d2lzZV9jYXN0PFN0cmluZ0ltcGwqPihwb2ludGVy
KS0+Y29zdER1cmluZ0dDKCk7CiB9CiAKLXZvaWQgSlNTdHJpbmc6OnZpc2l0Q2hpbGRyZW4oSlND
ZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0
b3I+Cit2b2lkIEpTU3RyaW5nOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0
b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNTdHJpbmcqIHRoaXNPYmplY3QgPSBhc1N0cmluZyhjZWxs
KTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBA
IC0xNDMsNiArMTQ0LDggQEAgdm9pZCBKU1N0cmluZzo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNl
bAogICAgICAgICB2aXNpdG9yLnJlcG9ydEV4dHJhTWVtb3J5VmlzaXRlZChpbXBsLT5jb3N0RHVy
aW5nR0MoKSk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU1N0cmluZyk7CisKIHN0YXRp
YyBjb25zdGV4cHIgdW5zaWduZWQgbWF4TGVuZ3RoRm9yT25TdGFja1Jlc29sdmUgPSAyMDQ4Owog
CiB2b2lkIEpTUm9wZVN0cmluZzo6cmVzb2x2ZVJvcGVJbnRlcm5hbDgoTENoYXIqIGJ1ZmZlcikg
Y29uc3QKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuaAkocmV2
aXNpb24gMjY4MDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcu
aAkod29ya2luZyBjb3B5KQpAQCAtMjE4LDcgKzIxOCw3IEBAIHB1YmxpYzoKIAogICAgIHN0YXRp
YyB2b2lkIGR1bXBUb1N0cmVhbShjb25zdCBKU0NlbGwqLCBQcmludFN0cmVhbSYpOwogICAgIHN0
YXRpYyBzaXplX3QgZXN0aW1hdGVkU2l6ZShKU0NlbGwqLCBWTSYpOwotICAgIHN0YXRpYyB2b2lk
IHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lU
X0NISUxEUkVOOwogCiAgICAgQUxXQVlTX0lOTElORSBib29sIGlzUm9wZSgpIGNvbnN0CiAgICAg
ewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmdJdGVyYXRvci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmdJ
dGVyYXRvci5jcHAJKHJldmlzaW9uIDI2ODA4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTU3RyaW5nSXRlcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MSwxMSArNTEs
MTQgQEAgSlNTdHJpbmdJdGVyYXRvciogSlNTdHJpbmdJdGVyYXRvcjo6Y2xvbgogICAgIHJldHVy
biBjbG9uZTsKIH0KIAotdm9pZCBKU1N0cmluZ0l0ZXJhdG9yOjp2aXNpdENoaWxkcmVuKEpTQ2Vs
bCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
Pgordm9pZCBKU1N0cmluZ0l0ZXJhdG9yOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGws
IFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1N0
cmluZ0l0ZXJhdG9yKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlz
T2JqZWN0LCBpbmZvKCkpOwogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlz
aXRvcik7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU1N0cmluZ0l0ZXJhdG9yKTsKKwog
fSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U1N0cmluZ0l0ZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNTdHJpbmdJdGVyYXRvci5oCShyZXZpc2lvbiAyNjgwODYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZ0l0ZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAg
LTc5LDcgKzc5LDcgQEAgcHVibGljOgogICAgIEpTVmFsdWUgaW5kZXgoKSBjb25zdCB7IHJldHVy
biBpbnRlcm5hbEZpZWxkKEZpZWxkOjpJbmRleCkuZ2V0KCk7IH0KICAgICBKU1N0cmluZ0l0ZXJh
dG9yKiBjbG9uZShKU0dsb2JhbE9iamVjdCopOwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGls
ZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47
CiAKIHByaXZhdGU6CiAgICAgSlNTdHJpbmdJdGVyYXRvcihWTSYgdm0sIFN0cnVjdHVyZSogc3Ry
dWN0dXJlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTeW1ib2xUYWJs
ZU9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNTeW1ib2xUYWJsZU9iamVjdC5jcHAJKHJldmlzaW9uIDI2ODA4NikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zNiw3ICszNiw4IEBAIG5hbWVzcGFjZSBKU0MgewogCiBjb25zdCBDbGFzc0luZm8gSlNT
eW1ib2xUYWJsZU9iamVjdDo6c19pbmZvID0geyAiU3ltYm9sVGFibGVPYmplY3QiLCAmQmFzZTo6
c19pbmZvLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTU3ltYm9sVGFi
bGVPYmplY3QpIH07CiAKLXZvaWQgSlNTeW1ib2xUYWJsZU9iamVjdDo6dmlzaXRDaGlsZHJlbihK
U0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlz
aXRvcj4KK3ZvaWQgSlNTeW1ib2xUYWJsZU9iamVjdDo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxs
KiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTU3ltYm9sVGFibGVPYmplY3QqIHRo
aXNPYmplY3QgPSBqc0Nhc3Q8SlNTeW1ib2xUYWJsZU9iamVjdCo+KGNlbGwpOwogICAgIEFTU0VS
VF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTQ0LDYgKzQ1LDgg
QEAgdm9pZCBKU1N5bWJvbFRhYmxlT2JqZWN0Ojp2aXNpdENoaWxkcmVuKAogICAgIHZpc2l0b3Iu
YXBwZW5kKHRoaXNPYmplY3QtPm1fc3ltYm9sVGFibGUpOwogfQogCitERUZJTkVfVklTSVRfQ0hJ
TERSRU4oSlNTeW1ib2xUYWJsZU9iamVjdCk7CisKIGJvb2wgSlNTeW1ib2xUYWJsZU9iamVjdDo6
ZGVsZXRlUHJvcGVydHkoSlNDZWxsKiBjZWxsLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBEZWxldGVQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7
CiAgICAgSlNTeW1ib2xUYWJsZU9iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1N5bWJvbFRh
YmxlT2JqZWN0Kj4oY2VsbCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U1N5bWJvbFRhYmxlT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVjdC5oCShyZXZpc2lvbiAyNjgwODYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTcwLDcgKzcwLDcgQEAgcHJvdGVjdGVkOgogICAgICAgICBtX3N5bWJvbFRhYmxl
LnNldCh2bSwgdGhpcywgc3ltYm9sVGFibGUpOwogICAgIH0KICAgICAKLSAgICBzdGF0aWMgdm9p
ZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJ
VF9DSElMRFJFTjsKICAgICAKIHByaXZhdGU6CiAgICAgV3JpdGVCYXJyaWVyPFN5bWJvbFRhYmxl
PiBtX3N5bWJvbFRhYmxlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNX
ZWFrT2JqZWN0UmVmLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1dlYWtPYmplY3RSZWYuY3BwCShyZXZpc2lvbiAyNjgwODYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU1dlYWtPYmplY3RSZWYuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zOSw3ICszOSw4IEBAIHZvaWQgSlNXZWFrT2JqZWN0UmVmOjpmaW5pc2hDcmVhdGlvbihWTSYK
ICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CiB9CiAKLXZvaWQgSlNXZWFrT2JqZWN0UmVm
Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1w
bGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1dlYWtPYmplY3RSZWY6OnZpc2l0Q2hpbGRy
ZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBhdXRvKiB0aGlz
T2JqZWN0ID0ganNDYXN0PEpTV2Vha09iamVjdFJlZio+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19P
QkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTUxLDYgKzUyLDggQEAgdm9p
ZCBKU1dlYWtPYmplY3RSZWY6OnZpc2l0Q2hpbGRyZW4oSlNDZQogICAgIH0KIH0KIAorREVGSU5F
X1ZJU0lUX0NISUxEUkVOKEpTV2Vha09iamVjdFJlZik7CisKIHZvaWQgSlNXZWFrT2JqZWN0UmVm
OjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxseShWTSYgdm0pCiB7CiAgICAgaWYgKG1fdmFsdWUgJiYg
IXZtLmhlYXAuaXNNYXJrZWQobV92YWx1ZS5nZXQoKSkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU1dlYWtPYmplY3RSZWYuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU1dlYWtPYmplY3RSZWYuaAkocmV2aXNpb24gMjY4MDg2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNXZWFrT2JqZWN0UmVmLmgJKHdvcmtp
bmcgY29weSkKQEAgLTY1LDcgKzY1LDcgQEAgcHVibGljOgogICAgIH0KIAogICAgIHZvaWQgZmlu
YWxpemVVbmNvbmRpdGlvbmFsbHkoVk0mKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVu
KEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAog
cHJpdmF0ZToKICAgICBKU1dlYWtPYmplY3RSZWYoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTV2l0aFNjb3BlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1dpdGhTY29wZS5j
cHAJKHJldmlzaW9uIDI2ODA4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
V2l0aFNjb3BlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEsNyArNDEsOCBAQCBKU1dpdGhTY29w
ZSogSlNXaXRoU2NvcGU6OmNyZWF0ZSgKICAgICByZXR1cm4gd2l0aFNjb3BlOwogfQogCi12b2lk
IEpTV2l0aFNjb3BlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZp
c2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1dpdGhTY29wZTo6dmlz
aXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpT
V2l0aFNjb3BlKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTV2l0aFNjb3BlKj4oY2VsbCk7CiAgICAg
QVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNDksNiAr
NTAsOCBAQCB2b2lkIEpTV2l0aFNjb3BlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogCiAgICAgdmlz
aXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9vYmplY3QpOwogfQogCitERUZJTkVfVklTSVRfQ0hJ
TERSRU4oSlNXaXRoU2NvcGUpOworCiBTdHJ1Y3R1cmUqIEpTV2l0aFNjb3BlOjpjcmVhdGVTdHJ1
Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3Rv
KQogewogICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90
bywgVHlwZUluZm8oV2l0aFNjb3BlVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNXaXRoU2NvcGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1dpdGhTY29wZS5oCShyZXZpc2lv
biAyNjgwODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1dpdGhTY29wZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC00Myw3ICs0Myw3IEBAIHB1YmxpYzoKIAogICAgIEpTT2JqZWN0
KiBvYmplY3QoKSB7IHJldHVybiBtX29iamVjdC5nZXQoKTsgfQogCi0gICAgc3RhdGljIHZvaWQg
dmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRf
Q0hJTERSRU47CiAKICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBK
U0dsb2JhbE9iamVjdCosIEpTVmFsdWUgcHJvdG8pOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU1dyYXBwZXJPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTV3JhcHBlck9iamVjdC5jcHAJKHJldmlzaW9uIDI2ODA4
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTV3JhcHBlck9iamVjdC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI5LDExICsyOSwxNCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogU1RB
VElDX0FTU0VSVF9JU19UUklWSUFMTFlfREVTVFJVQ1RJQkxFKEpTV3JhcHBlck9iamVjdCk7CiAK
LXZvaWQgSlNXcmFwcGVyT2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZp
c2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1dyYXBw
ZXJPYmplY3Q6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRv
cikKIHsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTV3JhcHBlck9iamVjdCo+KGNl
bGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsK
ICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwogfQogCitERUZJ
TkVfRVhQT1JUX1ZJU0lUX0NISUxEUkVOKEpTV3JhcHBlck9iamVjdCk7CisKIH0gLy8gbmFtZXNw
YWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNXcmFwcGVyT2Jq
ZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNXcmFw
cGVyT2JqZWN0LmgJKHJldmlzaW9uIDI2ODA4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTV3JhcHBlck9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC02NCw3ICs2NCw3IEBA
IHB1YmxpYzoKIHByb3RlY3RlZDoKICAgICBleHBsaWNpdCBKU1dyYXBwZXJPYmplY3QoVk0mLCBT
dHJ1Y3R1cmUqKTsKIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIHZpc2l0Q2hp
bGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX0VYUE9SVF9WSVNJVF9D
SElMRFJFTjsKIH07CiAKIGlubGluZSBKU1dyYXBwZXJPYmplY3Q6OkpTV3JhcHBlck9iamVjdChW
TSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01vZHVsZVByb2dyYW1FeGVjdXRhYmxlLmNwcAkocmV2
aXNpb24gMjY4MDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTW9kdWxlUHJv
Z3JhbUV4ZWN1dGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03OSw3ICs3OSw4IEBAIGF1dG8g
TW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGU6OmVuc3VyZVRlbXAKICAgICByZXR1cm4gZW5zdXJlVGVt
cGxhdGVPYmplY3RNYXBJbXBsKG1fdGVtcGxhdGVPYmplY3RNYXApOwogfQogCi12b2lkIE1vZHVs
ZVByb2dyYW1FeGVjdXRhYmxlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0
b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBNb2R1bGVQcm9n
cmFtRXhlY3V0YWJsZTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2
aXNpdG9yKQogewogICAgIE1vZHVsZVByb2dyYW1FeGVjdXRhYmxlKiB0aGlzT2JqZWN0ID0ganND
YXN0PE1vZHVsZVByb2dyYW1FeGVjdXRhYmxlKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVD
VF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtOTQsNCArOTUsNiBAQCB2b2lkIE1v
ZHVsZVByb2dyYW1FeGVjdXRhYmxlOjp2aXNpdENoaWxkCiAgICAgfQogfQogCitERUZJTkVfVklT
SVRfQ0hJTERSRU4oTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUpOworCiB9IC8vIG5hbWVzcGFjZSBK
U0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01vZHVsZVByb2dyYW1FeGVj
dXRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTW9k
dWxlUHJvZ3JhbUV4ZWN1dGFibGUuaAkocmV2aXNpb24gMjY4MDg2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUuaAkod29ya2luZyBjb3B5
KQpAQCAtNzcsNyArNzcsNyBAQCBwcml2YXRlOgogCiAgICAgTW9kdWxlUHJvZ3JhbUV4ZWN1dGFi
bGUoSlNHbG9iYWxPYmplY3QqLCBjb25zdCBTb3VyY2VDb2RlJik7CiAKLSAgICBzdGF0aWMgdm9p
ZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJ
VF9DSElMRFJFTjsKIAogICAgIFdyaXRlQmFycmllcjxVbmxpbmtlZE1vZHVsZVByb2dyYW1Db2Rl
QmxvY2s+IG1fdW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrOwogICAgIFdyaXRlQmFycmll
cjxTeW1ib2xUYWJsZT4gbV9tb2R1bGVFbnZpcm9ubWVudFN5bWJvbFRhYmxlOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvZ3JhbUV4ZWN1dGFibGUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb2dyYW1FeGVjdXRhYmxlLmNw
cAkocmV2aXNpb24gMjY4MDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJv
Z3JhbUV4ZWN1dGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDgsNyArMjA4LDggQEAgYXV0
byBQcm9ncmFtRXhlY3V0YWJsZTo6ZW5zdXJlVGVtcGxhdGVPYgogICAgIHJldHVybiBlbnN1cmVU
ZW1wbGF0ZU9iamVjdE1hcEltcGwobV90ZW1wbGF0ZU9iamVjdE1hcCk7CiB9CiAKLXZvaWQgUHJv
Z3JhbUV4ZWN1dGFibGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYg
dmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFByb2dyYW1FeGVjdXRh
YmxlOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7
CiAgICAgUHJvZ3JhbUV4ZWN1dGFibGUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8UHJvZ3JhbUV4ZWN1
dGFibGUqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3Qs
IGluZm8oKSk7CkBAIC0yMjIsNCArMjIzLDYgQEAgdm9pZCBQcm9ncmFtRXhlY3V0YWJsZTo6dmlz
aXRDaGlsZHJlbihKUwogICAgIH0KIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKFByb2dyYW1F
eGVjdXRhYmxlKTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9Qcm9ncmFtRXhlY3V0YWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb2dyYW1FeGVjdXRhYmxlLmgJKHJldmlzaW9uIDI2ODA4
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb2dyYW1FeGVjdXRhYmxlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTgxLDcgKzgxLDcgQEAgcHJpdmF0ZToKIAogICAgIFByb2dyYW1F
eGVjdXRhYmxlKEpTR2xvYmFsT2JqZWN0KiwgY29uc3QgU291cmNlQ29kZSYpOwogCi0gICAgc3Rh
dGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xB
UkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBXcml0ZUJhcnJpZXI8VW5saW5rZWRQcm9ncmFtQ29k
ZUJsb2NrPiBtX3VubGlua2VkUHJvZ3JhbUNvZGVCbG9jazsKICAgICBXcml0ZUJhcnJpZXI8RXhl
Y3V0YWJsZVRvQ29kZUJsb2NrRWRnZT4gbV9wcm9ncmFtQ29kZUJsb2NrOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlNYXBIYXNoVGFibGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eU1hcEhhc2hUYWJsZS5o
CShyZXZpc2lvbiAyNjgwODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9w
ZXJ0eU1hcEhhc2hUYWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzMsNyArMTMzLDcgQEAgcHVi
bGljOgogCiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVl
OwogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7Ci0gICAgc3RhdGljIHZvaWQgdmlz
aXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJ
TERSRU47CiAKICAgICBERUNMQVJFX0VYUE9SVF9JTkZPOwogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eVRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eVRhYmxlLmNwcAkocmV2aXNpb24gMjY4MDg2
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlUYWJsZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTExOCw3ICsxMTgsOCBAQCB2b2lkIFByb3BlcnR5VGFibGU6OmZpbmlz
aENyZWF0aW9uKFZNJiB2CiAgICAgdm0uaGVhcC5yZXBvcnRFeHRyYU1lbW9yeUFsbG9jYXRlZChk
YXRhU2l6ZSgpKTsKIH0KIAotdm9pZCBQcm9wZXJ0eVRhYmxlOjp2aXNpdENoaWxkcmVuKEpTQ2Vs
bCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
Pgordm9pZCBQcm9wZXJ0eVRhYmxlOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZp
c2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxQcm9wZXJ0
eVRhYmxlKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0
LCBpbmZvKCkpOwpAQCAtMTI2LDYgKzEyNyw4IEBAIHZvaWQgUHJvcGVydHlUYWJsZTo6dmlzaXRD
aGlsZHJlbihKU0NlbGwKICAgICB2aXNpdG9yLnJlcG9ydEV4dHJhTWVtb3J5VmlzaXRlZCh0aGlz
T2JqZWN0LT5kYXRhU2l6ZSgpKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKFByb3BlcnR5
VGFibGUpOworCiB2b2lkIFByb3BlcnR5VGFibGU6OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQogewog
ICAgIHN0YXRpY19jYXN0PFByb3BlcnR5VGFibGUqPihjZWxsKS0+UHJvcGVydHlUYWJsZTo6flBy
b3BlcnR5VGFibGUoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3h5
T2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Q
cm94eU9iamVjdC5jcHAJKHJldmlzaW9uIDI2ODA4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1Byb3h5T2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE4MSw3ICsxMTgx
LDggQEAgYm9vbCBQcm94eU9iamVjdDo6aXNSZXZva2VkKCkgY29uc3QKICAgICByZXR1cm4gaGFu
ZGxlcigpLmlzTnVsbCgpOwogfQogCi12b2lkIFByb3h5T2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpT
Q2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNp
dG9yPgordm9pZCBQcm94eU9iamVjdDo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBW
aXNpdG9yJiB2aXNpdG9yKQogewogICAgIFByb3h5T2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0
PFByb3h5T2JqZWN0Kj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlz
T2JqZWN0LCBpbmZvKCkpOwpAQCAtMTE5MSw0ICsxMTkyLDYgQEAgdm9pZCBQcm94eU9iamVjdDo6
dmlzaXRDaGlsZHJlbihKU0NlbGwqIAogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1f
aGFuZGxlcik7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihQcm94eU9iamVjdCk7CisKIH0g
Ly8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJv
eHlPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Q
cm94eU9iamVjdC5oCShyZXZpc2lvbiAyNjgwODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9Qcm94eU9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC05Niw3ICs5Niw3IEBAIHBy
aXZhdGU6CiAgICAgc3RhdGljIE5PX1JFVFVSTl9EVUVfVE9fQ1JBU0ggdm9pZCBnZXRHZW5lcmlj
UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lQXJy
YXkmLCBFbnVtZXJhdGlvbk1vZGUpOwogICAgIHN0YXRpYyBib29sIHNldFByb3RvdHlwZShKU09i
amVjdCosIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBwcm90b3R5cGUsIGJvb2wgc2hvdWxkVGhy
b3dJZkNhbnRTZXQpOwogICAgIHN0YXRpYyBKU1ZhbHVlIGdldFByb3RvdHlwZShKU09iamVjdCos
IEpTR2xvYmFsT2JqZWN0Kik7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwq
LCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBib29s
IGdldE93blByb3BlcnR5U2xvdENvbW1vbihKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSwg
UHJvcGVydHlTbG90Jik7CiAgICAgYm9vbCBwZXJmb3JtSW50ZXJuYWxNZXRob2RHZXRPd25Qcm9w
ZXJ0eShKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm94eVJldm9rZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJveHlSZXZva2UuY3BwCShyZXZp
c2lvbiAyNjgwODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm94eVJldm9r
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY5LDcgKzY5LDggQEAgSlNDX0RFRklORV9IT1NUX0ZV
TkNUSU9OKHBlcmZvcm1Qcm94eVJldgogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CiB9CiAKLXZvaWQgUHJveHlSZXZva2U6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBj
ZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2
b2lkIFByb3h5UmV2b2tlOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3Im
IHZpc2l0b3IpCiB7CiAgICAgUHJveHlSZXZva2UqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8UHJveHlS
ZXZva2UqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3Qs
IGluZm8oKSk7CkBAIC03OCw0ICs3OSw2IEBAIHZvaWQgUHJveHlSZXZva2U6OnZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKiAKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX3Byb3h5KTsKIH0K
IAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKFByb3h5UmV2b2tlKTsKKwogfSAvLyBuYW1lc3BhY2Ug
SlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm94eVJldm9rZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3h5UmV2b2tlLmgJ
KHJldmlzaW9uIDI2ODA4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3h5
UmV2b2tlLmgJKHdvcmtpbmcgY29weSkKQEAgLTUyLDcgKzUyLDcgQEAgcHVibGljOgogICAgIH0K
IAogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBQcm94eU9iamVjdCopOwotICAgIHN0YXRp
YyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJF
X1ZJU0lUX0NISUxEUkVOOwogICAgIEpTVmFsdWUgcHJveHkoKSB7IHJldHVybiBtX3Byb3h5Lmdl
dCgpOyB9CiAgICAgdm9pZCBzZXRQcm94eVRvTnVsbChWTSYgdm0pIHsgcmV0dXJuIG1fcHJveHku
c2V0KHZtLCB0aGlzLCBqc051bGwoKSk7IH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvUmVnRXhwT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9SZWdFeHBPYmplY3QuY3BwCShyZXZpc2lvbiAyNjgwODYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00Niw3ICs0Niw4IEBAIHZvaWQgUmVnRXhwT2JqZWN0OjpmaW5pc2hDcmVhdGlvbihWTSYg
dm0KICAgICBBU1NFUlQodHlwZSgpID09IFJlZ0V4cE9iamVjdFR5cGUpOwogfQogCi12b2lkIFJl
Z0V4cE9iamVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNp
dG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgUmVnRXhwT2JqZWN0Ojp2aXNp
dENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgUmVn
RXhwT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PFJlZ0V4cE9iamVjdCo+KGNlbGwpOwogICAg
IEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTU1LDYg
KzU2LDggQEAgdm9pZCBSZWdFeHBPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKgogICAgIHZp
c2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fbGFzdEluZGV4KTsKIH0KIAorREVGSU5FX1ZJU0lU
X0NISUxEUkVOKFJlZ0V4cE9iamVjdCk7CisKIGJvb2wgUmVnRXhwT2JqZWN0OjpnZXRPd25Qcm9w
ZXJ0eVNsb3QoSlNPYmplY3QqIG9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
UHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQogewogICAgIFZN
JiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1JlZ0V4cE9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1JlZ0V4cE9iamVjdC5oCShyZXZpc2lvbiAyNjgwODYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMTMz
LDcgKzEzMyw3IEBAIHByaXZhdGU6CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgUmVnRXhwT2JqZWN0
KFZNJiwgU3RydWN0dXJlKiwgUmVnRXhwKik7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBm
aW5pc2hDcmVhdGlvbihWTSYpOwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0Nl
bGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBi
b29sIGxhc3RJbmRleElzV3JpdGFibGUoKSBjb25zdAogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlZEFyZ3VtZW50cy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVkQXJndW1lbnRzLmNwcAkocmV2aXNpb24g
MjY4MDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVkQXJndW1lbnRz
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTgsNyArOTgsOCBAQCBTY29wZWRBcmd1bWVudHMqIFNj
b3BlZEFyZ3VtZW50czo6Y3JlYXRlCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotdm9pZCBTY29w
ZWRBcmd1bWVudHM6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlz
aXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFNjb3BlZEFyZ3VtZW50czo6
dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAg
IFNjb3BlZEFyZ3VtZW50cyogdGhpc09iamVjdCA9IHN0YXRpY19jYXN0PFNjb3BlZEFyZ3VtZW50
cyo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5m
bygpKTsKQEAgLTExNSw2ICsxMTYsOCBAQCB2b2lkIFNjb3BlZEFyZ3VtZW50czo6dmlzaXRDaGls
ZHJlbihKU0NlCiAgICAgfQogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oU2NvcGVkQXJndW1l
bnRzKTsKKwogU3RydWN0dXJlKiBTY29wZWRBcmd1bWVudHM6OmNyZWF0ZVN0cnVjdHVyZShWTSYg
dm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQogewog
ICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUs
IFR5cGVJbmZvKFNjb3BlZEFyZ3VtZW50c1R5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlZEFyZ3VtZW50cy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlZEFyZ3VtZW50
cy5oCShyZXZpc2lvbiAyNjgwODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
Y29wZWRBcmd1bWVudHMuaAkod29ya2luZyBjb3B5KQpAQCAtNjMsOSArNjMsOSBAQCBwdWJsaWM6
CiAgICAgCiAgICAgLy8gQ3JlYXRlcyBhbiBhcmd1bWVudHMgb2JqZWN0IGJ5IGNvcHlpbmcgdGhl
IGFyZ3VtZW50cyBmcm9tIGEgd2VsbC1kZWZpbmVkIHN0YWNrIGxvY2F0aW9uLgogICAgIHN0YXRp
YyBTY29wZWRBcmd1bWVudHMqIGNyZWF0ZUJ5Q29weWluZ0Zyb20oVk0mLCBTdHJ1Y3R1cmUqLCBS
ZWdpc3RlciogYXJndW1lbnRzU3RhcnQsIHVuc2lnbmVkIHRvdGFsTGVuZ3RoLCBKU0Z1bmN0aW9u
KiBjYWxsZWUsIFNjb3BlZEFyZ3VtZW50c1RhYmxlKiwgSlNMZXhpY2FsRW52aXJvbm1lbnQqKTsK
LSAgICAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9y
Jik7Ci0gICAgCisKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOworCiAgICAgdWludDMyX3Qg
aW50ZXJuYWxMZW5ndGgoKSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJuIG1fdG90YWxMZW5n
dGg7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TcGFyc2VBcnJheVZhbHVl
TWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TcGFy
c2VBcnJheVZhbHVlTWFwLmNwcAkocmV2aXNpb24gMjY4MDg2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU3BhcnNlQXJyYXlWYWx1ZU1hcC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTIxMCw3ICsyMTAsOCBAQCBKU1ZhbHVlIFNwYXJzZUFycmF5RW50cnk6OmdldE5vblNwYXJzZU1v
CiAgICAgcmV0dXJuIEJhc2U6OmdldCgpOwogfQogCi12b2lkIFNwYXJzZUFycmF5VmFsdWVNYXA6
OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBs
YXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFNwYXJzZUFycmF5VmFsdWVNYXA6OnZpc2l0Q2hp
bGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBTcGFyc2VB
cnJheVZhbHVlTWFwKiB0aGlzT2JqZWN0ID0ganNDYXN0PFNwYXJzZUFycmF5VmFsdWVNYXAqPihj
ZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7
CkBAIC0yMjMsNSArMjI0LDcgQEAgdm9pZCBTcGFyc2VBcnJheVZhbHVlTWFwOjp2aXNpdENoaWxk
cmVuKAogICAgIHZpc2l0b3IucmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKHRoaXNPYmplY3QtPm1f
cmVwb3J0ZWRDYXBhY2l0eSAqIHNpemVvZihNYXA6OktleVZhbHVlUGFpclR5cGUpKTsKIH0KIAor
REVGSU5FX1ZJU0lUX0NISUxEUkVOKFNwYXJzZUFycmF5VmFsdWVNYXApOworCiB9IC8vIG5hbWVz
cGFjZSBKU0MKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3BhcnNlQXJy
YXlWYWx1ZU1hcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1NwYXJzZUFycmF5VmFsdWVNYXAuaAkocmV2aXNpb24gMjY4MDg2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU3BhcnNlQXJyYXlWYWx1ZU1hcC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xMTUsNyArMTE1LDcgQEAgcHVibGljOgogICAgIAogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNy
ZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBwcm90b3R5cGUpOwog
Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwor
ICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBib29sIHNwYXJzZU1vZGUoKQogICAg
IHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0YWNrRnJhbWUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0YWNrRnJhbWUuY3Bw
CShyZXZpc2lvbiAyNjgwODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdGFj
a0ZyYW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQyLDcgKzE0Miw4IEBAIFN0cmluZyBTdGFj
a0ZyYW1lOjp0b1N0cmluZyhWTSYgdm0pIGNvbnMKICAgICByZXR1cm4gdHJhY2VCdWlsZC50b1N0
cmluZygpLmltcGwoKTsKIH0KIAotdm9pZCBTdGFja0ZyYW1lOjp2aXNpdENoaWxkcmVuKFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgU3RhY2tG
cmFtZTo6dmlzaXRDaGlsZHJlbkltcGwoVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBpZiAobV9j
YWxsZWUpCiAgICAgICAgIHZpc2l0b3IuYXBwZW5kKG1fY2FsbGVlKTsKQEAgLTE1MCw1ICsxNTEs
NyBAQCB2b2lkIFN0YWNrRnJhbWU6OnZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0CiAgICAgICAgIHZp
c2l0b3IuYXBwZW5kKG1fY29kZUJsb2NrKTsKIH0KIAorREVGSU5FX0lOU1RBTkNFX1ZJU0lUX0NI
SUxEUkVOKFN0YWNrRnJhbWUpOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RhY2tGcmFtZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0YWNrRnJhbWUuaAkocmV2aXNpb24gMjY4MDg2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RhY2tGcmFtZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yNyw2ICsyNyw3IEBACiAKICNpbmNsdWRlICJIZWFwLmgiCiAjaW5jbHVkZSAiVk0u
aCIKKyNpbmNsdWRlICJTbG90VmlzaXRvck1hY3Jvcy5oIgogI2luY2x1ZGUgIldhc21JbmRleE9y
TmFtZS5oIgogI2luY2x1ZGUgIldyaXRlQmFycmllci5oIgogI2luY2x1ZGUgPGxpbWl0cy5oPgpA
QCAtMzUsNyArMzYsNiBAQCBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgQ29kZUJsb2NrOwogY2xh
c3MgSlNPYmplY3Q7Ci1jbGFzcyBTbG90VmlzaXRvcjsKIAogY2xhc3MgU3RhY2tGcmFtZSB7CiBw
dWJsaWM6CkBAIC01OCw3ICs1OCw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fYnl0ZWNv
ZGVJbmRleDsKICAgICB9CiAgICAgCi0gICAgdm9pZCB2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9y
Jik7CisgICAgREVDTEFSRV9JTlNUQU5DRV9WSVNJVF9DSElMRFJFTjsKICAgICBib29sIGlzTWFy
a2VkKFZNJiB2bSkgY29uc3QgeyByZXR1cm4gKCFtX2NhbGxlZSB8fCB2bS5oZWFwLmlzTWFya2Vk
KG1fY2FsbGVlLmdldCgpKSkgJiYgKCFtX2NvZGVCbG9jayB8fCB2bS5oZWFwLmlzTWFya2VkKG1f
Y29kZUJsb2NrLmdldCgpKSk7IH0KIAogcHJpdmF0ZToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAkocmV2aXNpb24gMjY4MDg2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTI3OSw3ICsxMjc5LDggQEAgdm9pZCBTdHJ1Y3R1cmU6OmRpZFRyYW5zaXRpb25Gcm9tVGhpc1N0
cgogICAgICAgICBtX3RyYW5zaXRpb25XYXRjaHBvaW50U2V0LmZpcmVBbGwodm0oKSwgU3RydWN0
dXJlRmlyZURldGFpbCh0aGlzKSk7CiB9CiAKLXZvaWQgU3RydWN0dXJlOjp2aXNpdENoaWxkcmVu
KEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPgordm9pZCBTdHJ1Y3R1cmU6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwg
VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBTdHJ1Y3R1cmUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8
U3RydWN0dXJlKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2Jq
ZWN0LCBpbmZvKCkpOwpAQCAtMTMwNyw2ICsxMzA4LDggQEAgdm9pZCBTdHJ1Y3R1cmU6OnZpc2l0
Q2hpbGRyZW4oSlNDZWxsKiBjZQogICAgICAgICB0aGlzT2JqZWN0LT5tX3Byb3BlcnR5VGFibGVV
bnNhZmUuY2xlYXIoKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKFN0cnVjdHVyZSk7CisK
IGJvb2wgU3RydWN0dXJlOjppc0NoZWFwRHVyaW5nR0MoVk0mIHZtKQogewogICAgIC8vIEZJWE1F
OiBXZSBjb3VsZCBtYWtlIHRoaXMgZXZlbiBzYWZlciBieSByZXR1cm5pbmcgZmFsc2UgaWYgdGhp
cyBzdHJ1Y3R1cmUncyBwcm9wZXJ0eSB0YWJsZQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU3RydWN0dXJlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU3RydWN0dXJlLmgJKHJldmlzaW9uIDI2ODA4NikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMDcsNyArMzA3
LDcgQEAgcHVibGljOgogICAgIEpTVmFsdWUgcHJvdG90eXBlRm9yTG9va3VwKEpTR2xvYmFsT2Jq
ZWN0KiwgSlNDZWxsKiBiYXNlKSBjb25zdDsKICAgICBTdHJ1Y3R1cmVDaGFpbiogcHJvdG90eXBl
Q2hhaW4oVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTT2JqZWN0KiBiYXNlKSBjb25zdDsKICAgICBT
dHJ1Y3R1cmVDaGFpbiogcHJvdG90eXBlQ2hhaW4oSlNHbG9iYWxPYmplY3QqLCBKU09iamVjdCog
YmFzZSkgY29uc3Q7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90
VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAgICAgCiAgICAgLy8gQSBT
dHJ1Y3R1cmUgaXMgY2hlYXAgdG8gbWFyayBkdXJpbmcgR0MgaWYgZG9pbmcgc28gd291bGQgb25s
eSBhZGQgYSBzbWFsbCBhbmQgYm91bmRlZCBhbW91bnQKICAgICAvLyB0byBvdXIgaGVhcCBmb290
cHJpbnQuIEZvciBleGFtcGxlLCBpZiB0aGUgc3RydWN0dXJlIHJlZmVycyB0byBhIGdsb2JhbCBv
YmplY3QgdGhhdCBpcyBub3QKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0
cnVjdHVyZUNoYWluLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TdHJ1Y3R1cmVDaGFpbi5jcHAJKHJldmlzaW9uIDI2ODA4NikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUNoYWluLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NjYsNyArNjYsOCBAQCB2b2lkIFN0cnVjdHVyZUNoYWluOjpmaW5pc2hDcmVhdGlvbihWTSYgCiAg
ICAgfQogfQogCi12b2lkIFN0cnVjdHVyZUNoYWluOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2Vs
bCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9p
ZCBTdHJ1Y3R1cmVDaGFpbjo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9y
JiB2aXNpdG9yKQogewogICAgIFN0cnVjdHVyZUNoYWluKiB0aGlzT2JqZWN0ID0ganNDYXN0PFN0
cnVjdHVyZUNoYWluKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlz
T2JqZWN0LCBpbmZvKCkpOwpAQCAtODAsNCArODEsNiBAQCB2b2lkIFN0cnVjdHVyZUNoYWluOjp2
aXNpdENoaWxkcmVuKEpTQ2VsCiAgICAgfQogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oU3Ry
dWN0dXJlQ2hhaW4pOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUNoYWluLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlQ2hhaW4uaAkocmV2aXNpb24gMjY4MDg2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlQ2hhaW4uaAkod29ya2lu
ZyBjb3B5KQpAQCAtNTEsNyArNTEsNyBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgU3RydWN0dXJl
Q2hhaW4qIGNyZWF0ZShWTSYsIEpTT2JqZWN0Kik7CiAgICAgU3RydWN0dXJlSUQqIGhlYWQoKSB7
IHJldHVybiBtX3ZlY3Rvci5nZXQoKTsgfQotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4o
SlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAg
ICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCiAgICAgewpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlUmFyZURhdGEuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZVJhcmVEYXRhLmNwcAko
cmV2aXNpb24gMjY4MDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0
dXJlUmFyZURhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Nyw3ICs2Nyw4IEBAIFN0cnVjdHVy
ZVJhcmVEYXRhOjpTdHJ1Y3R1cmVSYXJlRGF0YShWTSYKICAgICAgICAgbV9wcmV2aW91cy5zZXQo
dm0sIHRoaXMsIHByZXZpb3VzKTsKIH0KIAotdm9pZCBTdHJ1Y3R1cmVSYXJlRGF0YTo6dmlzaXRD
aGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlw
ZW5hbWUgVmlzaXRvcj4KK3ZvaWQgU3RydWN0dXJlUmFyZURhdGE6OnZpc2l0Q2hpbGRyZW5JbXBs
KEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBTdHJ1Y3R1cmVSYXJlRGF0
YSogdGhpc09iamVjdCA9IGpzQ2FzdDxTdHJ1Y3R1cmVSYXJlRGF0YSo+KGNlbGwpOwogICAgIEFT
U0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTg2LDYgKzg3
LDggQEAgdm9pZCBTdHJ1Y3R1cmVSYXJlRGF0YTo6dmlzaXRDaGlsZHJlbihKUwogICAgIH0KIH0K
IAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKFN0cnVjdHVyZVJhcmVEYXRhKTsKKwogLy8gLS0tLS0t
LS0tLS0gQ2FjaGVkIHNwZWNpYWwgcHJvcGVydGllcyBoZWxwZXIgd2F0Y2hwb2ludCBjbGFzc2Vz
IC0tLS0tLS0tLS0tCiAKIGNsYXNzIENhY2hlZFNwZWNpYWxQcm9wZXJ0eUFkYXB0aXZlSW5mZXJy
ZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludCBmaW5hbCA6IHB1YmxpYyBBZGFwdGl2ZUluZmVycmVk
UHJvcGVydHlWYWx1ZVdhdGNocG9pbnRCYXNlIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1N0cnVjdHVyZVJhcmVEYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlUmFyZURhdGEuaAkocmV2aXNpb24gMjY4MDg2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlUmFyZURhdGEuaAkod29y
a2luZyBjb3B5KQpAQCAtNjgsNyArNjgsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOwogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3ko
SlNDZWxsKik7CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RW
aXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIHN0YXRpYyBTdHJ1
Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBwcm90
b3R5cGUpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TeW1ib2xUYWJs
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9s
VGFibGUuY3BwCShyZXZpc2lvbiAyNjgwODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TeW1ib2xUYWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkyLDcgKzkyLDggQEAgdm9p
ZCBTeW1ib2xUYWJsZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQogICAgIEJhc2U6OmZpbmlzaENy
ZWF0aW9uKHZtKTsKIH0KIAotdm9pZCBTeW1ib2xUYWJsZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwq
IHRoaXNDZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0
b3I+Cit2b2lkIFN5bWJvbFRhYmxlOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIHRoaXNDZWxs
LCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFN5bWJvbFRhYmxlKiB0aGlzU3ltYm9sVGFibGUg
PSBqc0Nhc3Q8U3ltYm9sVGFibGUqPih0aGlzQ2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9J
TkhFUklUUyh0aGlzU3ltYm9sVGFibGUsIGluZm8oKSk7CkBAIC0xMDgsNiArMTA5LDggQEAgdm9p
ZCBTeW1ib2xUYWJsZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIAogICAgIHRoaXNTeW1ib2xUYWJs
ZS0+bV9sb2NhbFRvRW50cnkgPSBudWxscHRyOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4o
U3ltYm9sVGFibGUpOworCiBjb25zdCBTeW1ib2xUYWJsZTo6TG9jYWxUb0VudHJ5VmVjJiBTeW1i
b2xUYWJsZTo6bG9jYWxUb0VudHJ5KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYpCiB7CiAgICAg
aWYgKFVOTElLRUxZKCFtX2xvY2FsVG9FbnRyeSkpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1N5bWJvbFRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFibGUuaAkocmV2aXNpb24gMjY4MDg2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAt
NzMzLDcgKzczMyw3IEBAIHB1YmxpYzoKICAgICAgICAgbV9zaW5nbGV0b24ubm90aWZ5V3JpdGUo
dm0sIHRoaXMsIHNjb3BlLCByZWFzb24pOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0
Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxE
UkVOOwogCiAgICAgREVDTEFSRV9FWFBPUlRfSU5GTzsKIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvV2Vha01hcEltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1dlYWtNYXBJbXBsLmNwcAkocmV2aXNpb24gMjY4MDg2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha01hcEltcGwuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zOSw4ICszOSw5IEBAIHZvaWQgV2Vha01hcEltcGw8V2Vha01hcEJ1Y2tldD46OmRl
c3Ryb3kKICAgICBzdGF0aWNfY2FzdDxXZWFrTWFwSW1wbCo+KGNlbGwpLT5+V2Vha01hcEltcGwo
KTsKIH0KIAotdGVtcGxhdGUgPHR5cGVuYW1lIFdlYWtNYXBCdWNrZXQ+Ci12b2lkIFdlYWtNYXBJ
bXBsPFdlYWtNYXBCdWNrZXQ+Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0
b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBXZWFrTWFwQnVja2V0PgordGVtcGxhdGU8
dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgV2Vha01hcEltcGw8V2Vha01hcEJ1Y2tldD46OnZpc2l0
Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBXZWFr
TWFwSW1wbCogdGhpc09iamVjdCA9IGpzQ2FzdDxXZWFrTWFwSW1wbCo+KGNlbGwpOwogICAgIEFT
U0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTQ4LDYgKzQ5
LDggQEAgdm9pZCBXZWFrTWFwSW1wbDxXZWFrTWFwQnVja2V0Pjo6dmlzaXRDaAogICAgIHZpc2l0
b3IucmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKHRoaXNPYmplY3QtPm1fY2FwYWNpdHkgKiBzaXpl
b2YoV2Vha01hcEJ1Y2tldCkpOwogfQogCitERUZJTkVfVEVNUExBVEVfVklTSVRfQ0hJTERSRU4o
dGVtcGxhdGU8dHlwZW5hbWUgV2Vha01hcEJ1Y2tldD4sIFdlYWtNYXBJbXBsPFdlYWtNYXBCdWNr
ZXQ+KTsKKwogdGVtcGxhdGUgPHR5cGVuYW1lIFdlYWtNYXBCdWNrZXQ+CiBzaXplX3QgV2Vha01h
cEltcGw8V2Vha01hcEJ1Y2tldD46OmVzdGltYXRlZFNpemUoSlNDZWxsKiBjZWxsLCBWTSYgdm0p
CiB7CkBAIC01NiwxMyArNTksMTcgQEAgc2l6ZV90IFdlYWtNYXBJbXBsPFdlYWtNYXBCdWNrZXQ+
Ojplc3RpbQogfQogCiB0ZW1wbGF0ZSA8Pgotdm9pZCBXZWFrTWFwSW1wbDxXZWFrTWFwQnVja2V0
PFdlYWtNYXBCdWNrZXREYXRhS2V5Pj46OnZpc2l0T3V0cHV0Q29uc3RyYWludHMoSlNDZWxsKiwg
U2xvdFZpc2l0b3ImKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgV2Vha01hcElt
cGw8V2Vha01hcEJ1Y2tldDxXZWFrTWFwQnVja2V0RGF0YUtleT4+Ojp2aXNpdE91dHB1dENvbnN0
cmFpbnRzSW1wbChKU0NlbGwqLCBWaXNpdG9yJikKIHsKICAgICAvLyBPbmx5IEpTV2Vha01hcCBu
ZWVkcyB0byBoYXJ2ZXN0IHZhbHVlIHJlZmVyZW5jZXMKIH0KIAorREVGSU5FX1RFTVBMQVRFX1ZJ
U0lUX09VVFBVVF9DT05TVFJBSU5UUyh0ZW1wbGF0ZTw+LCBXZWFrTWFwSW1wbDxXZWFrTWFwQnVj
a2V0PFdlYWtNYXBCdWNrZXREYXRhS2V5Pj4pOworCiB0ZW1wbGF0ZSA8Pgotdm9pZCBXZWFrTWFw
SW1wbDxXZWFrTWFwQnVja2V0PFdlYWtNYXBCdWNrZXREYXRhS2V5VmFsdWU+Pjo6dmlzaXRPdXRw
dXRDb25zdHJhaW50cyhKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxh
dGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgV2Vha01hcEltcGw8V2Vha01hcEJ1Y2tldDxXZWFr
TWFwQnVja2V0RGF0YUtleVZhbHVlPj46OnZpc2l0T3V0cHV0Q29uc3RyYWludHNJbXBsKEpTQ2Vs
bCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBWTSYgdm0gPSB2aXNpdG9yLnZtKCk7
CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxXZWFrTWFwSW1wbCo+KGNlbGwpOwpAQCAt
NzgsNiArODUsOCBAQCB2b2lkIFdlYWtNYXBJbXBsPFdlYWtNYXBCdWNrZXQ8V2Vha01hcEJ1CiAg
ICAgfQogfQogCitERUZJTkVfVEVNUExBVEVfVklTSVRfT1VUUFVUX0NPTlNUUkFJTlRTKHRlbXBs
YXRlPD4sIFdlYWtNYXBJbXBsPFdlYWtNYXBCdWNrZXQ8V2Vha01hcEJ1Y2tldERhdGFLZXlWYWx1
ZT4+KTsKKwogdGVtcGxhdGUgPHR5cGVuYW1lIFdlYWtNYXBCdWNrZXQ+CiB0ZW1wbGF0ZTx0eXBl
bmFtZSBBcHBlbmRlcj4KIHZvaWQgV2Vha01hcEltcGw8V2Vha01hcEJ1Y2tldD46OnRha2VTbmFw
c2hvdEludGVybmFsKHVuc2lnbmVkIGxpbWl0LCBBcHBlbmRlciBhcHBlbmRlcikKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtNYXBJbXBsLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha01hcEltcGwuaAkocmV2aXNpb24gMjY4
MDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha01hcEltcGwuaAkod29y
a2luZyBjb3B5KQpAQCAtMjAyLDcgKzIwMiw4IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgbmVlZHNEZXN0cnVjdGlvbiA9IHRydWU7CiAgICAgc3RhdGljIHZvaWQgZGVzdHJv
eShKU0NlbGwqKTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xv
dFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1RFTVBMQVRFX1ZJU0lUX0NISUxEUkVOOworICAgIERF
Q0xBUkVfVEVNUExBVEVfVklTSVRfT1VUUFVUX0NPTlNUUkFJTlRTOwogCiAgICAgc3RhdGljIHNp
emVfdCBlc3RpbWF0ZWRTaXplKEpTQ2VsbCosIFZNJik7CiAKQEAgLTMxMSw3ICszMTIsNiBAQCBw
dWJsaWM6CiAgICAgICAgIHJldHVybiB2bS53ZWFrU2V0U3BhY2U8bW9kZT4oKTsKICAgICB9CiAK
LSAgICBzdGF0aWMgdm9pZCB2aXNpdE91dHB1dENvbnN0cmFpbnRzKEpTQ2VsbCosIFNsb3RWaXNp
dG9yJik7CiAgICAgdm9pZCBmaW5hbGl6ZVVuY29uZGl0aW9uYWxseShWTSYpOwogCiBwcml2YXRl
OgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0pTRG9sbGFyVk0uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9KU0RvbGxhclZNLmNwcAkocmV2
aXNpb24gMjY4MDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0pTRG9sbGFyVk0u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjIsMTQgKzIyMiw3IEBAIHB1YmxpYzoKIAogICAgIHZv
aWQgZmluaXNoQ3JlYXRpb24oVk0mLCBSb290Kik7CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENo
aWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCi0gICAgewotICAgICAg
ICBEb2xsYXJWTUFzc2VydFNjb3BlIGFzc2VydFNjb3BlOwotICAgICAgICBFbGVtZW50KiB0aGlz
T2JqZWN0ID0ganNDYXN0PEVsZW1lbnQqPihjZWxsKTsKLSAgICAgICAgQVNTRVJUX0dDX09CSkVD
VF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwotICAgICAgICBCYXNlOjp2aXNpdENoaWxk
cmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwotICAgICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2Jq
ZWN0LT5tX3Jvb3QpOwotICAgIH0KKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAg
c3RhdGljIEVsZW1lbnRIYW5kbGVPd25lciogaGFuZGxlT3duZXIoKTsKIApAQCAtMjQ1LDYgKzIz
OCwxOCBAQCBwcml2YXRlOgogICAgIFdyaXRlQmFycmllcjxSb290PiBtX3Jvb3Q7CiB9OwogCit0
ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBFbGVtZW50Ojp2aXNpdENoaWxkcmVuSW1w
bChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgRG9sbGFyVk1Bc3NlcnRT
Y29wZSBhc3NlcnRTY29wZTsKKyAgICBFbGVtZW50KiB0aGlzT2JqZWN0ID0ganNDYXN0PEVsZW1l
bnQqPihjZWxsKTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGlu
Zm8oKSk7CisgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKKyAg
ICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX3Jvb3QpOworfQorCitERUZJTkVfVklTSVRf
Q0hJTERSRU4oRWxlbWVudCk7CisKIGNsYXNzIEVsZW1lbnRIYW5kbGVPd25lciBmaW5hbCA6IHB1
YmxpYyBXZWFrSGFuZGxlT3duZXIgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVi
bGljOgpAQCAtMzAyLDE4ICszMDcsMjMgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gU3RydWN0
dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RU
eXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQg
dmlzaXRDaGlsZHJlbihKU0NlbGwqIHRoaXNPYmplY3QsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQot
ICAgIHsKLSAgICAgICAgRG9sbGFyVk1Bc3NlcnRTY29wZSBhc3NlcnRTY29wZTsKLSAgICAgICAg
QVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwotICAgICAgICBC
YXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwotICAgICAgICB2aXNpdG9y
LmFkZE9wYXF1ZVJvb3QodGhpc09iamVjdCk7Ci0gICAgfQorICAgIERFQ0xBUkVfVklTSVRfQ0hJ
TERSRU47CiAKIHByaXZhdGU6CiAgICAgV2VhazxFbGVtZW50PiBtX2VsZW1lbnQ7CiB9OwogCit0
ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBSb290Ojp2aXNpdENoaWxkcmVuSW1wbChK
U0NlbGwqIHRoaXNPYmplY3QsIFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgRG9sbGFyVk1Bc3Nl
cnRTY29wZSBhc3NlcnRTY29wZTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNP
YmplY3QsIGluZm8oKSk7CisgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNp
dG9yKTsKKyAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QodGhpc09iamVjdCk7Cit9CisKK0RFRklO
RV9WSVNJVF9DSElMRFJFTihSb290KTsKKwogY2xhc3MgU2ltcGxlT2JqZWN0IDogcHVibGljIEpT
Tm9uRmluYWxPYmplY3QgewogcHVibGljOgogICAgIFNpbXBsZU9iamVjdChWTSYgdm0sIFN0cnVj
dHVyZSogc3RydWN0dXJlKQpAQCAtMzM4LDE0ICszNDgsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJl
dHVybiBzaW1wbGVPYmplY3Q7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJl
bihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQotICAgIHsKLSAgICAgICAgRG9s
bGFyVk1Bc3NlcnRTY29wZSBhc3NlcnRTY29wZTsKLSAgICAgICAgU2ltcGxlT2JqZWN0KiB0aGlz
T2JqZWN0ID0ganNDYXN0PFNpbXBsZU9iamVjdCo+KGNlbGwpOwotICAgICAgICBBU1NFUlRfR0Nf
T0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7Ci0gICAgICAgIEJhc2U6OnZpc2l0
Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7Ci0gICAgICAgIHZpc2l0b3IuYXBwZW5kKHRo
aXNPYmplY3QtPm1faGlkZGVuVmFsdWUpOwotICAgIH0KKyAgICBERUNMQVJFX1ZJU0lUX0NISUxE
UkVOOwogCiAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCiAgICAgewpAQCAt
Mzc4LDYgKzM4MSwxOCBAQCBwcml2YXRlOgogICAgIFdyaXRlQmFycmllcjxKU0M6OlVua25vd24+
IG1faGlkZGVuVmFsdWU7CiB9OwogCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBT
aW1wbGVPYmplY3Q6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlz
aXRvcikKK3sKKyAgICBEb2xsYXJWTUFzc2VydFNjb3BlIGFzc2VydFNjb3BlOworICAgIFNpbXBs
ZU9iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxTaW1wbGVPYmplY3QqPihjZWxsKTsKKyAgICBB
U1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CisgICAgQmFzZTo6
dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKKyAgICB2aXNpdG9yLmFwcGVuZCh0
aGlzT2JqZWN0LT5tX2hpZGRlblZhbHVlKTsKK30KKworREVGSU5FX1ZJU0lUX0NISUxEUkVOKFNp
bXBsZU9iamVjdCk7CisKIGNsYXNzIEltcHVyZUdldHRlciA6IHB1YmxpYyBKU05vbkZpbmFsT2Jq
ZWN0IHsKIHB1YmxpYzoKICAgICBJbXB1cmVHZXR0ZXIoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSkKQEAgLTQzNCwxNCArNDQ5LDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gQmFzZTo6
Z2V0T3duUHJvcGVydHlTbG90KG9iamVjdCwgZ2xvYmFsT2JqZWN0LCBuYW1lLCBzbG90KTsKICAg
ICB9CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZp
c2l0b3ImIHZpc2l0b3IpCi0gICAgewotICAgICAgICBEb2xsYXJWTUFzc2VydFNjb3BlIGFzc2Vy
dFNjb3BlOwotICAgICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNlbGwsIGluZm8oKSk7
Ci0gICAgICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4oY2VsbCwgdmlzaXRvcik7Ci0gICAgICAgIElt
cHVyZUdldHRlciogdGhpc09iamVjdCA9IGpzQ2FzdDxJbXB1cmVHZXR0ZXIqPihjZWxsKTsKLSAg
ICAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9kZWxlZ2F0ZSk7Ci0gICAgfQorICAg
IERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICB2b2lkIHNldERlbGVnYXRlKFZNJiB2bSwg
SlNPYmplY3QqIGRlbGVnYXRlKQogICAgIHsKQEAgLTQ1Miw2ICs0NjAsMTggQEAgcHJpdmF0ZToK
ICAgICBXcml0ZUJhcnJpZXI8SlNPYmplY3Q+IG1fZGVsZWdhdGU7CiB9OwogCit0ZW1wbGF0ZTx0
eXBlbmFtZSBWaXNpdG9yPgordm9pZCBJbXB1cmVHZXR0ZXI6OnZpc2l0Q2hpbGRyZW5JbXBsKEpT
Q2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBEb2xsYXJWTUFzc2VydFNjb3Bl
IGFzc2VydFNjb3BlOworICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2VsbCwgaW5mbygp
KTsKKyAgICBCYXNlOjp2aXNpdENoaWxkcmVuKGNlbGwsIHZpc2l0b3IpOworICAgIEltcHVyZUdl
dHRlciogdGhpc09iamVjdCA9IGpzQ2FzdDxJbXB1cmVHZXR0ZXIqPihjZWxsKTsKKyAgICB2aXNp
dG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2RlbGVnYXRlKTsKK30KKworREVGSU5FX1ZJU0lUX0NI
SUxEUkVOKEltcHVyZUdldHRlcik7CisKIHN0YXRpYyBKU0NfREVDTEFSRV9DVVNUT01fR0VUVEVS
KGN1c3RvbUdldHRlclZhbHVlR2V0dGVyKTsKIHN0YXRpYyBKU0NfREVDTEFSRV9DVVNUT01fR0VU
VEVSKGN1c3RvbUdldHRlckFjZXNzb3JHZXR0ZXIpOwogCkBAIC0zNTM2LDEzICszNTU2LDE2IEBA
IHZvaWQgSlNEb2xsYXJWTTo6YWRkQ29uc3RydWN0aWJsZUZ1bmN0aW8KICAgICBwdXREaXJlY3Qo
dm0sIGlkZW50aWZpZXIsIEpTRnVuY3Rpb246OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBhcmd1
bWVudHMsIGlkZW50aWZpZXIuc3RyaW5nKCksIGZ1bmN0aW9uLCBOb0ludHJpbnNpYywgZnVuY3Rp
b24pLCBqc0RvbGxhclZNUHJvcGVydHlBdHRyaWJ1dGVzKTsKIH0KIAotdm9pZCBKU0RvbGxhclZN
Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1w
bGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0RvbGxhclZNOjp2aXNpdENoaWxkcmVuSW1w
bChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNEb2xsYXJWTSogdGhp
c09iamVjdCA9IGpzQ2FzdDxKU0RvbGxhclZNKj4oY2VsbCk7CiAgICAgQmFzZTo6dmlzaXRDaGls
ZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0
LT5tX29iamVjdERvaW5nU2lkZUVmZmVjdFB1dFdpdGhvdXRDb3JyZWN0U2xvdFN0YXR1c1N0cnVj
dHVyZSk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU0RvbGxhclZNKTsKKwogfSAvLyBu
YW1lc3BhY2UgSlNDCiAKIElHTk9SRV9XQVJOSU5HU19FTkQKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS90b29scy9KU0RvbGxhclZNLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3Rvb2xzL0pTRG9sbGFyVk0uaAkocmV2aXNpb24gMjY4MDg2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3Rvb2xzL0pTRG9sbGFyVk0uaAkod29ya2luZyBjb3B5KQpAQCAtNzQsNyAr
NzQsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgYWRkRnVuY3Rpb24oVk0mLCBKU0dsb2JhbE9iamVj
dCosIGNvbnN0IGNoYXIqIG5hbWUsIE5hdGl2ZUZ1bmN0aW9uLCB1bnNpZ25lZCBhcmd1bWVudHMp
OwogICAgIHZvaWQgYWRkQ29uc3RydWN0aWJsZUZ1bmN0aW9uKFZNJiwgSlNHbG9iYWxPYmplY3Qq
LCBjb25zdCBjaGFyKiBuYW1lLCBOYXRpdmVGdW5jdGlvbiwgdW5zaWduZWQgYXJndW1lbnRzKTsK
IAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsK
KyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVy
ZT4gbV9vYmplY3REb2luZ1NpZGVFZmZlY3RQdXRXaXRob3V0Q29ycmVjdFNsb3RTdGF0dXNTdHJ1
Y3R1cmU7CiB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNUb1dhc21J
Q0NhbGxlZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
SlNUb1dhc21JQ0NhbGxlZS5jcHAJKHJldmlzaW9uIDI2ODA4NikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL0pTVG9XYXNtSUNDYWxsZWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
OSw3ICs0OSw4IEBAIFN0cnVjdHVyZSogSlNUb1dhc21JQ0NhbGxlZTo6Y3JlYXRlU3RydWMKICAg
ICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBU
eXBlSW5mbyhKU0NhbGxlZVR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKIH0KIAotdm9p
ZCBKU1RvV2FzbUlDQ2FsbGVlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0
b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1RvV2FzbUlD
Q2FsbGVlOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3Ip
CiB7CiAgICAgSlNUb1dhc21JQ0NhbGxlZSogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1RvV2FzbUlD
Q2FsbGVlKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0
LCBpbmZvKCkpOwpAQCAtNTgsNiArNTksOCBAQCB2b2lkIEpTVG9XYXNtSUNDYWxsZWU6OnZpc2l0
Q2hpbGRyZW4oSlNDCiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9mdW5jdGlvbik7
CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU1RvV2FzbUlDQ2FsbGVlKTsKKwogfSAvLyBu
YW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1RvV2FzbUlDQ2FsbGVlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNUb1dhc21JQ0NhbGxlZS5oCShyZXZp
c2lvbiAyNjgwODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1RvV2FzbUlD
Q2FsbGVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTU2LDcgKzU2LDcgQEAgcHJpdmF0ZToKICAgICBK
U1RvV2FzbUlDQ2FsbGVlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUpCiAgICAgICAgIDogQmFzZSh2bSwgZ2xvYmFsT2JqZWN0LCBzdHJ1
Y3R1cmUpCiAgICAgeyB9Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBT
bG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBXcml0ZUJh
cnJpZXI8V2ViQXNzZW1ibHlGdW5jdGlvbj4gbV9mdW5jdGlvbjsKIH07CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJs
b2NrLmNwcAkocmV2aXNpb24gMjY4MDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
anMvSlNXZWJBc3NlbWJseUNvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgyLDcgKzgy
LDggQEAgdm9pZCBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrOjpjbGVhckpTQ2FsbAogICAgICAgICAo
Kml0ZXIpLT51bmxpbmsodm0pOwogfQogCi12b2lkIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6OnZp
c2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRl
PHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6OnZpc2l0Q2hp
bGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU1dlYkFz
c2VtYmx5Q29kZUJsb2NrKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTV2ViQXNzZW1ibHlDb2RlQmxv
Y2sqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGlu
Zm8oKSk7CkBAIC05MCw2ICs5MSw4IEBAIHZvaWQgSlNXZWJBc3NlbWJseUNvZGVCbG9jazo6dmlz
aXRDaGlsZHIKICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwog
fQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNXZWJBc3NlbWJseUNvZGVCbG9jayk7CisKIHZv
aWQgSlNXZWJBc3NlbWJseUNvZGVCbG9jazo6ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoVk0mIHZt
KQogewogICAgIGZvciAoYXV0byBpdGVyID0gbV9jYWxsTGlua0luZm9zLmJlZ2luKCk7ICEhaXRl
cjsgKytpdGVyKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3Nl
bWJseUNvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suaAkocmV2aXNpb24gMjY4MDg2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9jay5oCSh3b3JraW5n
IGNvcHkpCkBAIC04Niw3ICs4Niw3IEBAIHByaXZhdGU6CiAgICAgREVDTEFSRV9FWFBPUlRfSU5G
TzsKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNEZXN0cnVjdGlvbiA9IHRydWU7CiAg
ICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENo
aWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJF
TjsKIAogICAgIFJlZjxXYXNtOjpDb2RlQmxvY2s+IG1fY29kZUJsb2NrOwogICAgIFZlY3RvcjxN
YWNyb0Fzc2VtYmxlckNvZGVSZWY8V2FzbUVudHJ5UHRyVGFnPj4gbV93YXNtVG9KU0V4aXRTdHVi
czsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlHbG9i
YWwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2Vi
QXNzZW1ibHlHbG9iYWwuY3BwCShyZXZpc2lvbiAyNjgwODYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5R2xvYmFsLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NzEsNyArNzEsOCBAQCB2b2lkIEpTV2ViQXNzZW1ibHlHbG9iYWw6OmRlc3Ryb3koSlNDZWxsCiAg
ICAgc3RhdGljX2Nhc3Q8SlNXZWJBc3NlbWJseUdsb2JhbCo+KGNlbGwpLT5KU1dlYkFzc2VtYmx5
R2xvYmFsOjp+SlNXZWJBc3NlbWJseUdsb2JhbCgpOwogfQogCi12b2lkIEpTV2ViQXNzZW1ibHlH
bG9iYWw6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikK
K3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTV2ViQXNzZW1ibHlHbG9iYWw6OnZp
c2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBK
U1dlYkFzc2VtYmx5R2xvYmFsKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTV2ViQXNzZW1ibHlHbG9i
YWwqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGlu
Zm8oKSk7CkBAIC04MCw2ICs4MSw4IEBAIHZvaWQgSlNXZWJBc3NlbWJseUdsb2JhbDo6dmlzaXRD
aGlsZHJlbigKICAgICB0aGlzT2JqZWN0LT5nbG9iYWwoKS0+dmlzaXRBZ2dyZWdhdGUodmlzaXRv
cik7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU1dlYkFzc2VtYmx5R2xvYmFsKTsKKwog
fSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5R2xvYmFsLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUds
b2JhbC5oCShyZXZpc2lvbiAyNjgwODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9KU1dlYkFzc2VtYmx5R2xvYmFsLmgJKHdvcmtpbmcgY29weSkKQEAgLTU5LDcgKzU5LDcgQEAg
cHVibGljOgogcHJpdmF0ZToKICAgICBKU1dlYkFzc2VtYmx5R2xvYmFsKFZNJiwgU3RydWN0dXJl
KiwgUmVmPFdhc206Okdsb2JhbD4mJik7CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOwot
ICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAg
ICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgUmVmPFdhc206Okdsb2JhbD4gbV9nbG9i
YWw7CiB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJs
eUluc3RhbmNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuY3BwCShyZXZpc2lvbiAyNjgwODYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC03Myw3ICs3Myw4IEBAIHZvaWQgSlNXZWJBc3NlbWJseUluc3RhbmNlOjpkZXN0
cm95KEpTQ2UKICAgICBzdGF0aWNfY2FzdDxKU1dlYkFzc2VtYmx5SW5zdGFuY2UqPihjZWxsKS0+
SlNXZWJBc3NlbWJseUluc3RhbmNlOjp+SlNXZWJBc3NlbWJseUluc3RhbmNlKCk7CiB9CiAKLXZv
aWQgSlNXZWJBc3NlbWJseUluc3RhbmNlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xv
dFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1dl
YkFzc2VtYmx5SW5zdGFuY2U6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRv
ciYgdmlzaXRvcikKIHsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTV2ViQXNzZW1i
bHlJbnN0YW5jZSo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09i
amVjdCwgaW5mbygpKTsKQEAgLTEwMiw2ICsxMDMsOCBAQCB2b2lkIEpTV2ViQXNzZW1ibHlJbnN0
YW5jZTo6dmlzaXRDaGlsZHJlCiAgICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQod3Jh
cHBlci5nZXQoKSk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU1dlYkFzc2VtYmx5SW5z
dGFuY2UpOworCiB2b2lkIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6ZmluYWxpemVDcmVhdGlvbihW
TSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZjxXYXNtOjpDb2RlQmxvY2s+
JiYgd2FzbUNvZGVCbG9jaywgSlNPYmplY3QqIGltcG9ydE9iamVjdCwgV2FzbTo6Q3JlYXRpb25N
b2RlIGNyZWF0aW9uTW9kZSkKIHsKICAgICBtX2luc3RhbmNlLT5maW5hbGl6ZUNyZWF0aW9uKHRo
aXMsIHdhc21Db2RlQmxvY2suY29weVJlZigpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5oCShyZXZpc2lvbiAy
NjgwODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5z
dGFuY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMTA0LDcgKzEwNCw3IEBAIHB1YmxpYzoKIHByaXZh
dGU6CiAgICAgSlNXZWJBc3NlbWJseUluc3RhbmNlKFZNJiwgU3RydWN0dXJlKiwgUmVmPFdhc206
Okluc3RhbmNlPiYmKTsKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgSlNXZWJBc3NlbWJs
eU1vZHVsZSosIEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0Kik7Ci0gICAgc3RhdGljIHZvaWQgdmlz
aXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJ
TERSRU47CiAKICAgICBSZWY8V2FzbTo6SW5zdGFuY2U+IG1faW5zdGFuY2U7CiAgICAgVk0qIG1f
dm07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TWVt
b3J5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dl
YkFzc2VtYmx5TWVtb3J5LmNwcAkocmV2aXNpb24gMjY4MDg2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1lbW9yeS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE0MSw3ICsxNDEsOCBAQCB2b2lkIEpTV2ViQXNzZW1ibHlNZW1vcnk6OmRlc3Ryb3koSlNDZWxs
CiAgICAgbWVtb3J5LT5KU1dlYkFzc2VtYmx5TWVtb3J5Ojp+SlNXZWJBc3NlbWJseU1lbW9yeSgp
OwogfQogCi12b2lkIEpTV2ViQXNzZW1ibHlNZW1vcnk6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBj
ZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2
b2lkIEpTV2ViQXNzZW1ibHlNZW1vcnk6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwg
VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTV2Vi
QXNzZW1ibHlNZW1vcnkqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRo
aXNPYmplY3QsIGluZm8oKSk7CkBAIC0xNTEsNiArMTUyLDggQEAgdm9pZCBKU1dlYkFzc2VtYmx5
TWVtb3J5Ojp2aXNpdENoaWxkcmVuKAogICAgIHZpc2l0b3IucmVwb3J0RXh0cmFNZW1vcnlWaXNp
dGVkKHRoaXNPYmplY3QtPm1lbW9yeSgpLnNpemUoKSk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElM
RFJFTihKU1dlYkFzc2VtYmx5TWVtb3J5KTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRp
ZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9KU1dlYkFzc2VtYmx5TWVtb3J5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1lbW9yeS5oCShyZXZpc2lvbiAyNjgwODYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TWVtb3J5LmgJKHdv
cmtpbmcgY29weSkKQEAgLTYzLDcgKzYzLDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBKU1dl
YkFzc2VtYmx5TWVtb3J5KFZNJiwgU3RydWN0dXJlKik7CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlv
bihWTSYpOwotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0
b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgUmVmPFdhc206Ok1lbW9y
eT4gbV9tZW1vcnk7CiAgICAgV3JpdGVCYXJyaWVyPEpTQXJyYXlCdWZmZXI+IG1fYnVmZmVyV3Jh
cHBlcjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlN
b2R1bGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pT
V2ViQXNzZW1ibHlNb2R1bGUuY3BwCShyZXZpc2lvbiAyNjgwODYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTI0LDcgKzEyNCw4IEBAIHZvaWQgSlNXZWJBc3NlbWJseU1vZHVsZTo6c2V0Q29kZUJsb2Nr
KFYKICAgICBtX2NvZGVCbG9ja3Nbc3RhdGljX2Nhc3Q8c2l6ZV90Pihtb2RlKV0uc2V0KHZtLCB0
aGlzLCBjb2RlQmxvY2spOwogfQogCi12b2lkIEpTV2ViQXNzZW1ibHlNb2R1bGU6OnZpc2l0Q2hp
bGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVu
YW1lIFZpc2l0b3I+Cit2b2lkIEpTV2ViQXNzZW1ibHlNb2R1bGU6OnZpc2l0Q2hpbGRyZW5JbXBs
KEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU1dlYkFzc2VtYmx5TW9k
dWxlKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTV2ViQXNzZW1ibHlNb2R1bGUqPihjZWxsKTsKICAg
ICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC0xMzUs
NiArMTM2LDggQEAgdm9pZCBKU1dlYkFzc2VtYmx5TW9kdWxlOjp2aXNpdENoaWxkcmVuKAogICAg
ICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2NvZGVCbG9ja3NbaV0pOwogfQogCitE
RUZJTkVfVklTSVRfQ0hJTERSRU4oSlNXZWJBc3NlbWJseU1vZHVsZSk7CisKIH0gLy8gbmFtZXNw
YWNlIEpTQwogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuaAkocmV2
aXNpb24gMjY4MDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3Nl
bWJseU1vZHVsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC04MCw3ICs4MCw3IEBAIHByaXZhdGU6CiAK
ICAgICBKU1dlYkFzc2VtYmx5TW9kdWxlKFZNJiwgU3RydWN0dXJlKiwgUmVmPFdhc206Ok1vZHVs
ZT4mJik7CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOwotICAgIHN0YXRpYyB2b2lkIHZp
c2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NI
SUxEUkVOOwogCiAgICAgUmVmPFdhc206Ok1vZHVsZT4gbV9tb2R1bGU7CiAgICAgV3JpdGVCYXJy
aWVyPFN5bWJvbFRhYmxlPiBtX2V4cG9ydFN5bWJvbFRhYmxlOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseVRhYmxlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5VGFibGUuY3BwCShyZXZp
c2lvbiAyNjgwODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2Vt
Ymx5VGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Miw3ICs3Miw4IEBAIHZvaWQgSlNXZWJB
c3NlbWJseVRhYmxlOjpkZXN0cm95KEpTQ2VsbCoKICAgICBzdGF0aWNfY2FzdDxKU1dlYkFzc2Vt
Ymx5VGFibGUqPihjZWxsKS0+SlNXZWJBc3NlbWJseVRhYmxlOjp+SlNXZWJBc3NlbWJseVRhYmxl
KCk7CiB9CiAKLXZvaWQgSlNXZWJBc3NlbWJseVRhYmxlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCog
Y2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgor
dm9pZCBKU1dlYkFzc2VtYmx5VGFibGU6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwg
VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU1dlYkFzc2VtYmx5VGFibGUqIHRoaXNPYmplY3Qg
PSBqc0Nhc3Q8SlNXZWJBc3NlbWJseVRhYmxlKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVD
VF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtODEsNiArODIsOCBAQCB2b2lkIEpT
V2ViQXNzZW1ibHlUYWJsZTo6dmlzaXRDaGlsZHJlbihKCiAgICAgdGhpc09iamVjdC0+dGFibGUo
KS0+dmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihK
U1dlYkFzc2VtYmx5VGFibGUpOworCiBib29sIEpTV2ViQXNzZW1ibHlUYWJsZTo6Z3Jvdyh1aW50
MzJfdCBkZWx0YSkKIHsKICAgICBpZiAoZGVsdGEgPT0gMCkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlUYWJsZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlUYWJsZS5oCShyZXZpc2lvbiAy
NjgwODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5VGFi
bGUuaAkod29ya2luZyBjb3B5KQpAQCAtNzAsOCArNzAsOCBAQCBwdWJsaWM6CiBwcml2YXRlOgog
ICAgIEpTV2ViQXNzZW1ibHlUYWJsZShWTSYsIFN0cnVjdHVyZSosIFJlZjxXYXNtOjpUYWJsZT4m
Jik7CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOwotICAgIHN0YXRpYyB2b2lkIHZpc2l0
Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKLQorICAgIERFQ0xBUkVfVklTSVRfQ0hJ
TERSRU47CisvLwogICAgIFJlZjxXYXNtOjpUYWJsZT4gbV90YWJsZTsKIH07CiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rp
b24uY3BwCShyZXZpc2lvbiAyNjgwODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9XZWJBc3NlbWJseUZ1bmN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQ5LDcgKzQ0OSw4
IEBAIFdlYkFzc2VtYmx5RnVuY3Rpb246OldlYkFzc2VtYmx5RnVuY3Rpb24KICAgICAsIG1faW1w
b3J0YWJsZUZ1bmN0aW9uIHsgc2lnbmF0dXJlSW5kZXgsIHdhc21Ub1dhc21FbnRyeXBvaW50TG9h
ZExvY2F0aW9uIH0KIHsgfQogCi12b2lkIFdlYkFzc2VtYmx5RnVuY3Rpb246OnZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1l
IFZpc2l0b3I+Cit2b2lkIFdlYkFzc2VtYmx5RnVuY3Rpb246OnZpc2l0Q2hpbGRyZW5JbXBsKEpT
Q2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBXZWJBc3NlbWJseUZ1bmN0aW9u
KiB0aGlzT2JqZWN0ID0ganNDYXN0PFdlYkFzc2VtYmx5RnVuY3Rpb24qPihjZWxsKTsKICAgICBB
U1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC00NTgsNiAr
NDU5LDggQEAgdm9pZCBXZWJBc3NlbWJseUZ1bmN0aW9uOjp2aXNpdENoaWxkcmVuKAogICAgIHZp
c2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fanNUb1dhc21JQ0NhbGxlZSk7CiB9CiAKK0RFRklO
RV9WSVNJVF9DSElMRFJFTihXZWJBc3NlbWJseUZ1bmN0aW9uKTsKKwogdm9pZCBXZWJBc3NlbWJs
eUZ1bmN0aW9uOjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKIHsKICAgICBzdGF0aWNfY2FzdDxXZWJB
c3NlbWJseUZ1bmN0aW9uKj4oY2VsbCktPldlYkFzc2VtYmx5RnVuY3Rpb246On5XZWJBc3NlbWJs
eUZ1bmN0aW9uKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3Nl
bWJseUZ1bmN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
anMvV2ViQXNzZW1ibHlGdW5jdGlvbi5oCShyZXZpc2lvbiAyNjgwODYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmgJKHdvcmtpbmcgY29weSkK
QEAgLTkwLDcgKzkwLDcgQEAgcHVibGljOgogICAgIFdhc206Okluc3RhbmNlKiBwcmV2aW91c0lu
c3RhbmNlKENhbGxGcmFtZSopOwogCiBwcml2YXRlOgotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hp
bGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVO
OwogICAgIFdlYkFzc2VtYmx5RnVuY3Rpb24oVk0mLCBOYXRpdmVFeGVjdXRhYmxlKiwgSlNHbG9i
YWxPYmplY3QqLCBTdHJ1Y3R1cmUqLCBXYXNtOjpDYWxsZWUmIGpzRW50cnlwb2ludCwgV2FzbVRv
V2FzbUltcG9ydGFibGVGdW5jdGlvbjo6TG9hZExvY2F0aW9uIGVudHJ5cG9pbnRMb2FkTG9jYXRp
b24sIFdhc206OlNpZ25hdHVyZUluZGV4KTsKIAogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxK
U0VudHJ5UHRyVGFnPiBqc0NhbGxFbnRyeXBvaW50U2xvdygpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbkJhc2UuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb25CYXNl
LmNwcAkocmV2aXNpb24gMjY4MDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
V2ViQXNzZW1ibHlGdW5jdGlvbkJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0MSw4
IEBAIFdlYkFzc2VtYmx5RnVuY3Rpb25CYXNlOjpXZWJBc3NlbWJseUZ1bmMKICAgICA6IEJhc2Uo
dm0sIGV4ZWN1dGFibGUsIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKQogeyB9CiAKLXZvaWQgV2Vi
QXNzZW1ibHlGdW5jdGlvbkJhc2U6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90Vmlz
aXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFdlYkFzc2Vt
Ymx5RnVuY3Rpb25CYXNlOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3Im
IHZpc2l0b3IpCiB7CiAgICAgV2ViQXNzZW1ibHlGdW5jdGlvbkJhc2UqIHRoaXNPYmplY3QgPSBq
c0Nhc3Q8V2ViQXNzZW1ibHlGdW5jdGlvbkJhc2UqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JK
RUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC00OSw2ICs1MCw4IEBAIHZvaWQg
V2ViQXNzZW1ibHlGdW5jdGlvbkJhc2U6OnZpc2l0Q2hpbGQKICAgICB2aXNpdG9yLmFwcGVuZCh0
aGlzT2JqZWN0LT5tX2luc3RhbmNlKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKFdlYkFz
c2VtYmx5RnVuY3Rpb25CYXNlKTsKKwogdm9pZCBXZWJBc3NlbWJseUZ1bmN0aW9uQmFzZTo6Zmlu
aXNoQ3JlYXRpb24oVk0mIHZtLCBOYXRpdmVFeGVjdXRhYmxlKiBleGVjdXRhYmxlLCB1bnNpZ25l
ZCBsZW5ndGgsIGNvbnN0IFN0cmluZyYgbmFtZSwgSlNXZWJBc3NlbWJseUluc3RhbmNlKiBpbnN0
YW5jZSkKIHsKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSwgZXhlY3V0YWJsZSwgbGVuZ3Ro
LCBuYW1lKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5
RnVuY3Rpb25CYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
anMvV2ViQXNzZW1ibHlGdW5jdGlvbkJhc2UuaAkocmV2aXNpb24gMjY4MDg2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbkJhc2UuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDYsNyArNDYsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHB0cmRpZmZfdCBv
ZmZzZXRPZkluc3RhbmNlKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFdlYkFzc2VtYmx5RnVu
Y3Rpb25CYXNlLCBtX2luc3RhbmNlKTsgfQogCiBwcm90ZWN0ZWQ6Ci0gICAgc3RhdGljIHZvaWQg
dmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRf
Q0hJTERSRU47CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIE5hdGl2ZUV4ZWN1dGFibGUq
LCB1bnNpZ25lZCBsZW5ndGgsIGNvbnN0IFN0cmluZyYgbmFtZSwgSlNXZWJBc3NlbWJseUluc3Rh
bmNlKik7CiAgICAgV2ViQXNzZW1ibHlGdW5jdGlvbkJhc2UoVk0mLCBOYXRpdmVFeGVjdXRhYmxl
KiwgSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqKTsKIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmNw
cAkocmV2aXNpb24gMjY4MDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2Vi
QXNzZW1ibHlNb2R1bGVSZWNvcmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Nyw3ICs3Nyw4IEBA
IHZvaWQgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmZpbmlzaENyZWEKICAgICB9CiB9CiAKLXZv
aWQgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBT
bG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFdl
YkFzc2VtYmx5TW9kdWxlUmVjb3JkOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZp
c2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQqIHRoaXNPYmpl
Y3QgPSBqc0Nhc3Q8V2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQqPihjZWxsKTsKICAgICBBU1NFUlRf
R0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC04Niw2ICs4Nyw4IEBA
IHZvaWQgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OnZpc2l0Q2hpbGQKICAgICB2aXNpdG9yLmFw
cGVuZCh0aGlzT2JqZWN0LT5tX3N0YXJ0RnVuY3Rpb24pOwogfQogCitERUZJTkVfVklTSVRfQ0hJ
TERSRU4oV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQpOworCiB2b2lkIFdlYkFzc2VtYmx5TW9kdWxl
UmVjb3JkOjpwcmVwYXJlTGluayhWTSYgdm0sIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogaW5zdGFu
Y2UpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoIW1faW5zdGFuY2UpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZVJlY29y
ZC5oCShyZXZpc2lvbiAyNjgwODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9X
ZWJBc3NlbWJseU1vZHVsZVJlY29yZC5oCSh3b3JraW5nIGNvcHkpCkBAIC02Nyw3ICs2Nyw3IEBA
IHByaXZhdGU6CiAKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTR2xvYmFsT2JqZWN0KiwgVk0m
LCBjb25zdCBXYXNtOjpNb2R1bGVJbmZvcm1hdGlvbiYpOwogCi0gICAgc3RhdGljIHZvaWQgdmlz
aXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJ
TERSRU47CiAKICAgICBXcml0ZUJhcnJpZXI8SlNXZWJBc3NlbWJseUluc3RhbmNlPiBtX2luc3Rh
bmNlOwogICAgIFdyaXRlQmFycmllcjxKU09iamVjdD4gbV9zdGFydEZ1bmN0aW9uOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2Vt
Ymx5V3JhcHBlckZ1bmN0aW9uLmNwcAkocmV2aXNpb24gMjY4MDg2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC02Nyw3ICs2Nyw4IEBAIFN0cnVjdHVyZSogV2ViQXNzZW1ibHlXcmFwcGVyRnVu
Y3Rpb246OmMKICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwg
cHJvdG90eXBlLCBUeXBlSW5mbyhKU0Z1bmN0aW9uVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZv
KCkpOwogfQogCi12b2lkIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uOjp2aXNpdENoaWxkcmVu
KEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPgordm9pZCBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbjo6dmlzaXRDaGlsZHJlbklt
cGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFdlYkFzc2VtYmx5V3Jh
cHBlckZ1bmN0aW9uKiB0aGlzT2JqZWN0ID0ganNDYXN0PFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0
aW9uKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBp
bmZvKCkpOwpAQCAtNzYsNiArNzcsOCBAQCB2b2lkIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9u
Ojp2aXNpdENoCiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9mdW5jdGlvbik7CiB9
CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbik7CisK
IEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihjYWxsV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24s
IChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkpCiB7
CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlv
bi5oCShyZXZpc2lvbiAyNjgwODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9X
ZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC01OSw3ICs1OSw3
IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24oVk0m
LCBOYXRpdmVFeGVjdXRhYmxlKiwgSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqLCBXYXNtVG9X
YXNtSW1wb3J0YWJsZUZ1bmN0aW9uKTsKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgTmF0
aXZlRXhlY3V0YWJsZSosIHVuc2lnbmVkIGxlbmd0aCwgY29uc3QgU3RyaW5nJiBuYW1lLCBKU09i
amVjdCosIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSopOwotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hp
bGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVO
OwogCiAgICAgV3JpdGVCYXJyaWVyPEpTT2JqZWN0PiBtX2Z1bmN0aW9uOwogICAgIC8vIEl0J3Mg
c2FmZSB0byBqdXN0IGhvbGQgdGhlIHJhdyBXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9uIGJl
Y2F1c2Ugd2UgaGF2ZSBhIHJlZmVyZW5jZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNET01CdWlsdGluQ29uc3RydWN0b3JCYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJ1aWx0aW5Db25zdHJ1Y3RvckJhc2UuY3BwCShyZXZp
c2lvbiAyNjgwODYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJ1aWx0aW5D
b25zdHJ1Y3RvckJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSw3ICs0NSw4IEBAIHZvaWQg
SlNET01CdWlsdGluQ29uc3RydWN0b3JCYXNlOjpjYWxsRnUKICAgICBKU0M6OmNhbGwoJmxleGlj
YWxHbG9iYWxPYmplY3QsICZmdW5jdGlvbiwgY2FsbERhdGEsICZ0aGlzT2JqZWN0LCBhcmd1bWVu
dHMpOwogfQogCi12b2lkIEpTRE9NQnVpbHRpbkNvbnN0cnVjdG9yQmFzZTo6dmlzaXRDaGlsZHJl
bihKU0M6OkpTQ2VsbCogY2VsbCwgSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRl
PHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTRE9NQnVpbHRpbkNvbnN0cnVjdG9yQmFzZTo6dmlz
aXRDaGlsZHJlbihKU0M6OkpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBh
dXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTRE9NQnVpbHRpbkNvbnN0cnVjdG9yQmFzZSo+KGNl
bGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsK
QEAgLTUzLDYgKzU0LDggQEAgdm9pZCBKU0RPTUJ1aWx0aW5Db25zdHJ1Y3RvckJhc2U6OnZpc2l0
QwogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1faW5pdGlhbGl6ZUZ1bmN0aW9uKTsK
IH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTRE9NQnVpbHRpbkNvbnN0cnVjdG9yQmFzZSk7
CisKIEpTQzo6SXNvU3Vic3BhY2UqIEpTRE9NQnVpbHRpbkNvbnN0cnVjdG9yQmFzZTo6c3Vic3Bh
Y2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQogewogICAgIHJldHVybiAmc3RhdGljX2Nhc3Q8SlNWTUNs
aWVudERhdGEqPih2bS5jbGllbnREYXRhKS0+ZG9tQnVpbHRpbkNvbnN0cnVjdG9yU3BhY2UoKTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQnVpbHRpbkNvbnN0cnVjdG9y
QmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQnVp
bHRpbkNvbnN0cnVjdG9yQmFzZS5oCShyZXZpc2lvbiAyNjgwODYpCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0RPTUJ1aWx0aW5Db25zdHJ1Y3RvckJhc2UuaAkod29ya2luZyBjb3B5
KQpAQCAtNDIsNyArNDIsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgewogICAgIH0KIAotICAgIHN0YXRp
YyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJik7Cisg
ICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIEpTQzo6SlNGdW5jdGlvbiogaW5pdGlh
bGl6ZUZ1bmN0aW9uKCk7CiAgICAgdm9pZCBzZXRJbml0aWFsaXplRnVuY3Rpb24oSlNDOjpWTSYs
IEpTQzo6SlNGdW5jdGlvbiYpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNE
T01HbG9iYWxPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTRE9NR2xvYmFsT2JqZWN0LmNwcAkocmV2aXNpb24gMjY4MDg2KQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNET01HbG9iYWxPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yMzYsNyArMjM2LDggQEAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogSlNET01HbG9iYWxPYmpl
YwogICAgIHJldHVybiBudWxscHRyOwogfQogCi12b2lkIEpTRE9NR2xvYmFsT2JqZWN0Ojp2aXNp
dENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0
eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0RPTUdsb2JhbE9iamVjdDo6dmlzaXRDaGlsZHJlbklt
cGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTRE9NR2xvYmFsT2Jq
ZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oY2VsbCk7CiAgICAg
QVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtMjU4LDYg
KzI1OSw4IEBAIHZvaWQgSlNET01HbG9iYWxPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlMKICAgICB0
aGlzT2JqZWN0LT5tX2J1aWx0aW5JbnRlcm5hbEZ1bmN0aW9ucy52aXNpdCh2aXNpdG9yKTsKIH0K
IAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTRE9NR2xvYmFsT2JqZWN0KTsKKwogdm9pZCBKU0RP
TUdsb2JhbE9iamVjdDo6c2V0Q3VycmVudEV2ZW50KEV2ZW50KiBjdXJyZW50RXZlbnQpCiB7CiAg
ICAgbV9jdXJyZW50RXZlbnQgPSBjdXJyZW50RXZlbnQ7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0LmgJKHJldmlzaW9uIDI2ODA4NikKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTcxLDcgKzcxLDcgQEAgcHVibGljOgogICAgIHZvaWQgc2V0Q3VycmVudEV2ZW50
KEV2ZW50Kik7CiAgICAgRXZlbnQqIGN1cnJlbnRFdmVudCgpIGNvbnN0OwogCi0gICAgc3RhdGlj
IHZvaWQgdmlzaXRDaGlsZHJlbihKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKTsKKyAg
ICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgRE9NV3JhcHBlcldvcmxkJiB3b3JsZCgp
IHsgcmV0dXJuIG1fd29ybGQuZ2V0KCk7IH0KICAgICBib29sIHdvcmxkSXNOb3JtYWwoKSBjb25z
dCB7IHJldHVybiBtX3dvcmxkSXNOb3JtYWw7IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTV29ya2VyR2xvYmFsU2NvcGVCYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckdsb2JhbFNjb3BlQmFzZS5jcHAJKHJldmlzaW9u
IDI2ODA4NikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyR2xvYmFsU2Nv
cGVCYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTIsNyArOTIsOCBAQCB2b2lkIEpTV29ya2Vy
R2xvYmFsU2NvcGVCYXNlOjpjbGVhckRPTUd1CiAgICAgICAgIGd1YXJkZWQtPmNsZWFyKCk7CiB9
CiAKLXZvaWQgSlNXb3JrZXJHbG9iYWxTY29wZUJhc2U6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBj
ZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2
b2lkIEpTV29ya2VyR2xvYmFsU2NvcGVCYXNlOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNl
bGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNXb3JrZXJHbG9iYWxTY29wZUJhc2UqIHRo
aXNPYmplY3QgPSBqc0Nhc3Q8SlNXb3JrZXJHbG9iYWxTY29wZUJhc2UqPihjZWxsKTsKICAgICBB
U1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC0xMDAsNiAr
MTAxLDggQEAgdm9pZCBKU1dvcmtlckdsb2JhbFNjb3BlQmFzZTo6dmlzaXRDaGlsZAogICAgIHZp
c2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fcHJveHkpOwogfQogCitERUZJTkVfVklTSVRfQ0hJ
TERSRU4oSlNXb3JrZXJHbG9iYWxTY29wZUJhc2UpOworCiB2b2lkIEpTV29ya2VyR2xvYmFsU2Nv
cGVCYXNlOjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKIHsKICAgICBzdGF0aWNfY2FzdDxKU1dvcmtl
ckdsb2JhbFNjb3BlQmFzZSo+KGNlbGwpLT5KU1dvcmtlckdsb2JhbFNjb3BlQmFzZTo6fkpTV29y
a2VyR2xvYmFsU2NvcGVCYXNlKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U1dvcmtlckdsb2JhbFNjb3BlQmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTV29ya2VyR2xvYmFsU2NvcGVCYXNlLmgJKHJldmlzaW9uIDI2ODA4NikKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyR2xvYmFsU2NvcGVCYXNlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTgxLDcgKzgxLDcgQEAgcHJvdGVjdGVkOgogICAgIEpTV29ya2VyR2xv
YmFsU2NvcGVCYXNlKEpTQzo6Vk0mLCBKU0M6OlN0cnVjdHVyZSosIFJlZlB0cjxXb3JrZXJHbG9i
YWxTY29wZT4mJik7CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJiwgSlNDOjpKU1By
b3h5Kik7CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQzo6SlNDZWxsKiwgSlND
OjpTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKIHByaXZhdGU6
CiAgICAgUmVmUHRyPFdvcmtlckdsb2JhbFNjb3BlPiBtX3dyYXBwZWQ7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtsZXRHbG9iYWxTY29wZUJhc2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2xldEdsb2JhbFNjb3BlQmFz
ZS5jcHAJKHJldmlzaW9uIDI2ODA4NikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
V29ya2xldEdsb2JhbFNjb3BlQmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgyLDcgKzgyLDgg
QEAgdm9pZCBKU1dvcmtsZXRHbG9iYWxTY29wZUJhc2U6OmNsZWFyRE9NRwogICAgICAgICBndWFy
ZGVkLT5jbGVhcigpOwogfQogCi12b2lkIEpTV29ya2xldEdsb2JhbFNjb3BlQmFzZTo6dmlzaXRD
aGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlw
ZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNXb3JrbGV0R2xvYmFsU2NvcGVCYXNlOjp2aXNpdENoaWxk
cmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0byogdGhp
c09iamVjdCA9IGpzQ2FzdDxKU1dvcmtsZXRHbG9iYWxTY29wZUJhc2UqPihjZWxsKTsKICAgICBB
U1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC05MCw2ICs5
MSw4IEBAIHZvaWQgSlNXb3JrbGV0R2xvYmFsU2NvcGVCYXNlOjp2aXNpdENoaWwKICAgICB2aXNp
dG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX3Byb3h5KTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxE
UkVOKEpTV29ya2xldEdsb2JhbFNjb3BlQmFzZSk7CisKIHZvaWQgSlNXb3JrbGV0R2xvYmFsU2Nv
cGVCYXNlOjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKIHsKICAgICBzdGF0aWNfY2FzdDxKU1dvcmts
ZXRHbG9iYWxTY29wZUJhc2UqPihjZWxsKS0+SlNXb3JrbGV0R2xvYmFsU2NvcGVCYXNlOjp+SlNX
b3JrbGV0R2xvYmFsU2NvcGVCYXNlKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU1dvcmtsZXRHbG9iYWxTY29wZUJhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU1dvcmtsZXRHbG9iYWxTY29wZUJhc2UuaAkocmV2aXNpb24gMjY4MDg2
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrbGV0R2xvYmFsU2NvcGVCYXNl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTY5LDcgKzY5LDcgQEAgcHJvdGVjdGVkOgogICAgIEpTV29y
a2xldEdsb2JhbFNjb3BlQmFzZShKU0M6OlZNJiwgSlNDOjpTdHJ1Y3R1cmUqLCBSZWZQdHI8V29y
a2xldEdsb2JhbFNjb3BlPiYmKTsKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mLCBK
U0M6OkpTUHJveHkqKTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDOjpKU0Nl
bGwqLCBKU0M6OlNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAog
cHJpdmF0ZToKICAgICBSZWZQdHI8V29ya2xldEdsb2JhbFNjb3BlPiBtX3dyYXBwZWQ7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JK
Uy5wbQkocmV2aXNpb24gMjY4MDg2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy9Db2RlR2VuZXJhdG9ySlMucG0JKHdvcmtpbmcgY29weSkKQEAgLTMwNzgsNyArMzA3OCw3IEBA
IHN1YiBHZW5lcmF0ZUhlYWRlcgogCiAgICAgIyB2aXNpdCBmdW5jdGlvbgogICAgIGlmICgkbmVl
ZHNWaXNpdENoaWxkcmVuKSB7Ci0gICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgc3Rh
dGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJik7XG4iKTsK
KyAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVO
O1xuIik7CiAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgdm9pZCB2aXNpdEFkZGl0
aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJik7XG4iKSBpZiAkaW50ZXJmYWNlLT5leHRl
bmRlZEF0dHJpYnV0ZXMtPntKU0N1c3RvbU1hcmtGdW5jdGlvbn07CiAgICAgICAgIHB1c2goQGhl
YWRlckNvbnRlbnQsICJcbiIpOwogCkBAIC0zMDk0LDcgKzMwOTQsNyBAQCBzdWIgR2VuZXJhdGVI
ZWFkZXIKICAgICAgICAgICAgICMgdGhhdCB0aGUgR0MgY2FsbHMgdG8gYXNrIGFuIG9iamVjdCBp
cyBpdCB3b3VsZCBsaWtlIHRvIG1hcmsgYW55dGhpbmcgZWxzZSBhZnRlciB0aGUKICAgICAgICAg
ICAgICMgcHJvZ3JhbSByZXN1bWVkIHNpbmNlIHRoZSBsYXN0IGNhbGwgdG8gdmlzaXRDaGlsZHJl
biBvciB2aXNpdE91dHB1dENvbnN0cmFpbnRzLiBTaW5jZQogICAgICAgICAgICAgIyB0aGlzIGp1
c3QgY2FsbHMgdmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4sIHlvdSB1c3VhbGx5IGRvbid0IGhhdmUg
dG8gd29ycnkgYWJvdXQgdGhpcy4KLSAgICAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIg
ICAgc3RhdGljIHZvaWQgdmlzaXRPdXRwdXRDb25zdHJhaW50cyhKU0NlbGwqLCBKU0M6OlNsb3RW
aXNpdG9yJik7XG4iKTsKKyAgICAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgREVD
TEFSRV9WSVNJVF9PVVRQVVRfQ09OU1RSQUlOVFM7XG4iKTsKICAgICAgICAgfQogICAgIH0KIApA
QCAtNDk2MCw3ICs0OTYwLDggQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICBwdXNo
KEBpbXBsQ29udGVudCwgIn1cblxuIik7CiAKICAgICBpZiAoJG5lZWRzVmlzaXRDaGlsZHJlbikg
ewotICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgInZvaWQgJHtjbGFzc05hbWV9Ojp2aXNpdENo
aWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpXG4iKTsKKyAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICJ0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPlxuIik7CisgICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAidm9pZCAke2NsYXNzTmFtZX06OnZpc2l0Q2hpbGRyZW5J
bXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcilcbiIpOwogICAgICAgICBwdXNoKEBp
bXBsQ29udGVudCwgIntcbiIpOwogICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBhdXRv
KiB0aGlzT2JqZWN0ID0ganNDYXN0PCR7Y2xhc3NOYW1lfSo+KGNlbGwpO1xuIik7CiAgICAgICAg
IHB1c2goQGltcGxDb250ZW50LCAiICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09i
amVjdCwgaW5mbygpKTtcbiIpOwpAQCAtNDk4NSwxNCArNDk4NiwxOCBAQCBzdWIgR2VuZXJhdGVJ
bXBsZW1lbnRhdGlvbgogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAifVxuXG4iKTsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJERUZJTkVf
VklTSVRfQ0hJTERSRU4oJHtjbGFzc05hbWV9KTtcblxuIik7CisKICAgICAgICAgaWYgKCRpbnRl
cmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+e0pTQ3VzdG9tTWFya0Z1bmN0aW9ufSkgewotICAg
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ2b2lkICR7Y2xhc3NOYW1lfTo6dmlzaXRPdXRw
dXRDb25zdHJhaW50cyhKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKVxuIik7Cisg
ICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgInRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+
XG4iKTsKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAidm9pZCAke2NsYXNzTmFtZX06
OnZpc2l0T3V0cHV0Q29uc3RyYWludHNJbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRv
cilcbiIpOwogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ7XG4iKTsKICAgICAgICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8JHtj
bGFzc05hbWV9Kj4oY2VsbCk7XG4iKTsKICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
ICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTtcbiIpOwog
ICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgQmFzZTo6dmlzaXRPdXRwdXRDb25z
dHJhaW50cyh0aGlzT2JqZWN0LCB2aXNpdG9yKTtcbiIpOwogICAgICAgICAgICAgcHVzaChAaW1w
bENvbnRlbnQsICIgICAgdGhpc09iamVjdC0+dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4odmlzaXRv
cik7XG4iKTsKICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAifVxuXG4iKTsKKyAgICAg
ICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiREVGSU5FX1ZJU0lUX09VVFBVVF9DT05TVFJBSU5U
Uygke2NsYXNzTmFtZX0pO1xuXG4iKTsKICAgICAgICAgfQogICAgIH0KIAo=
</data>
<flag name="commit-queue"
          id="426866"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>410879</attachid>
            <date>2020-10-08 13:45:08 -0700</date>
            <delta_ts>2021-01-12 11:45:21 -0800</delta_ts>
            <desc>work in progress.</desc>
            <filename>wip-gc-verifier5.patch</filename>
            <type>text/plain</type>
            <size>190365</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDI2ODA4NikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtNjU2LDYgKzY1Niw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9QUklWQVRFX0ZSQU1FV09SS19I
RUEKICAgICBoZWFwL1NpbXBsZU1hcmtpbmdDb25zdHJhaW50LmgKICAgICBoZWFwL1Nsb3RWaXNp
dG9yLmgKICAgICBoZWFwL1Nsb3RWaXNpdG9ySW5saW5lcy5oCisgICAgaGVhcC9TbG90VmlzaXRv
ck1hY3Jvcy5oCiAgICAgaGVhcC9TdHJvbmcuaAogICAgIGhlYXAvU3Ryb25nSW5saW5lcy5oCiAg
ICAgaGVhcC9TdWJzcGFjZS5oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQVBJ
V3JhcHBlck9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkv
SlNBUElXcmFwcGVyT2JqZWN0LmgJKHJldmlzaW9uIDI2ODA4NikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvSlNBUElXcmFwcGVyT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjAgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00MSw3
ICs0MSw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBzdWJzcGFjZUZvcihWTSYpIHsgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQogICAgIAogICAgIHZvaWQgZmluaXNoQ3JlYXRp
b24oVk0mKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIEpTQzo6U2xv
dFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX0VYUE9SVF9WSVNJVF9DSElMRFJFTjsKICAgICAKICAg
ICB2b2lkKiB3cmFwcGVkT2JqZWN0KCkgeyByZXR1cm4gbV93cmFwcGVkT2JqZWN0OyB9CiAgICAg
dm9pZCBzZXRXcmFwcGVkT2JqZWN0KHZvaWQqKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9BUEkvSlNBUElXcmFwcGVyT2JqZWN0Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvSlNBUElXcmFwcGVyT2JqZWN0Lm1tCShyZXZpc2lvbiAyNjgwODYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQVBJV3JhcHBlck9iamVjdC5tbQkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxOCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTczLDYgKzczLDggQEAgc3RhdGljIEpTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJT04o
Y29uc3RydQogc3RhdGljIEpTQ19ERUNMQVJFX0NVU1RPTV9HRVRURVIoY2FsbGJhY2tHZXR0ZXJK
U0FQSVdyYXBwZXJPYmplY3RDYWxsYmFja09iamVjdCk7CiBzdGF0aWMgSlNDX0RFQ0xBUkVfQ1VT
VE9NX0dFVFRFUihzdGF0aWNGdW5jdGlvbkdldHRlckpTQVBJV3JhcHBlck9iamVjdENhbGxiYWNr
T2JqZWN0KTsKIAorREVGSU5FX1RFTVBMQVRFX1ZJU0lUX0NISUxEUkVOKHRlbXBsYXRlPD4sIEpT
Q2FsbGJhY2tPYmplY3Q8SlNBUElXcmFwcGVyT2JqZWN0Pik7CisKIHRlbXBsYXRlIDw+IGNvbnN0
IENsYXNzSW5mbyBKU0NhbGxiYWNrT2JqZWN0PEpTQVBJV3JhcHBlck9iamVjdD46OnNfaW5mbyA9
IHsgIkpTQVBJV3JhcHBlck9iamVjdCIsICZCYXNlOjpzX2luZm8sIG51bGxwdHIsIG51bGxwdHIs
IENSRUFURV9NRVRIT0RfVEFCTEUoSlNDYWxsYmFja09iamVjdCkgfTsKIHRlbXBsYXRlIDw+IGNv
bnN0IGJvb2wgSlNDYWxsYmFja09iamVjdDxKU0FQSVdyYXBwZXJPYmplY3Q+OjpuZWVkc0Rlc3Ry
dWN0aW9uID0gdHJ1ZTsKIApAQCAtMTIzLDcgKzEyNSw4IEBAIHZvaWQgSlNBUElXcmFwcGVyT2Jq
ZWN0OjpzZXRXcmFwcGVkT2JqZWMKICAgICBtX3dyYXBwZWRPYmplY3QgPSBbc3RhdGljX2Nhc3Q8
aWQ+KHdyYXBwZWRPYmplY3QpIHJldGFpbl07CiB9CiAKLXZvaWQgSlNBUElXcmFwcGVyT2JqZWN0
Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikK
K3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTQVBJV3JhcHBlck9iamVjdDo6dmlz
aXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpT
QVBJV3JhcHBlck9iamVjdCogdGhpc09iamVjdCA9IEpTQzo6anNDYXN0PEpTQVBJV3JhcHBlck9i
amVjdCo+KGNlbGwpOwogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4oY2VsbCwgdmlzaXRvcik7CkBA
IC0xMzMsNiArMTM2LDggQEAgdm9pZCBKU0FQSVdyYXBwZXJPYmplY3Q6OnZpc2l0Q2hpbGRyZW4o
SgogICAgICAgICBzY2FuRXh0ZXJuYWxPYmplY3RHcmFwaCh2aXNpdG9yLnZtKCksIHZpc2l0b3Is
IHdyYXBwZWRPYmplY3QpOwogfQogCitERUZJTkVfRVhQT1JUX1ZJU0lUX0NISUxEUkVOKEpTQVBJ
V3JhcHBlck9iamVjdCk7CisKIHRlbXBsYXRlIDw+CiBJc29TdWJzcGFjZSogSlNDYWxsYmFja09i
amVjdDxKU0FQSVdyYXBwZXJPYmplY3Q+OjpzdWJzcGFjZUZvckltcGwoVk0mIHZtLCBTdWJzcGFj
ZUFjY2VzcyBtb2RlKQogewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxi
YWNrT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pT
Q2FsbGJhY2tPYmplY3QuY3BwCShyZXZpc2lvbiAyNjgwODYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNi0yMDE3IEFwcGxlIEluYy4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcgRXJpYyBTZWlkZWwgPGVyaWNA
d2Via2l0Lm9yZz4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTQxLDYgKzQxLDkgQEAgc3RhdGljIEpT
Q19ERUNMQVJFX0NVU1RPTV9HRVRURVIoc3RhdGljRgogc3RhdGljIEpTQ19ERUNMQVJFX0NVU1RP
TV9HRVRURVIoY2FsbGJhY2tHZXR0ZXJKU0dsb2JhbE9iamVjdENhbGxiYWNrT2JqZWN0KTsKIHN0
YXRpYyBKU0NfREVDTEFSRV9DVVNUT01fR0VUVEVSKHN0YXRpY0Z1bmN0aW9uR2V0dGVySlNHbG9i
YWxPYmplY3RDYWxsYmFja09iamVjdCk7CiAKK0RFRklORV9URU1QTEFURV9WSVNJVF9DSElMRFJF
Tih0ZW1wbGF0ZTw+LCBKU0NhbGxiYWNrT2JqZWN0PEpTTm9uRmluYWxPYmplY3Q+KTsKK0RFRklO
RV9URU1QTEFURV9WSVNJVF9DSElMRFJFTih0ZW1wbGF0ZTw+LCBKU0NhbGxiYWNrT2JqZWN0PEpT
R2xvYmFsT2JqZWN0Pik7CisKIC8vIERlZmluZSB0aGUgdHdvIHR5cGVzIG9mIEpTQ2FsbGJhY2tP
YmplY3RzIHdlIHN1cHBvcnQuCiB0ZW1wbGF0ZSA8PiBjb25zdCBDbGFzc0luZm8gSlNDYWxsYmFj
a09iamVjdDxKU05vbkZpbmFsT2JqZWN0Pjo6c19pbmZvID0geyAiQ2FsbGJhY2tPYmplY3QiLCAm
QmFzZTo6c19pbmZvLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTQ2Fs
bGJhY2tPYmplY3QpIH07CiB0ZW1wbGF0ZSA8PiBjb25zdCBDbGFzc0luZm8gSlNDYWxsYmFja09i
amVjdDxKU0dsb2JhbE9iamVjdD46OnNfaW5mbyA9IHsgIkNhbGxiYWNrR2xvYmFsT2JqZWN0Iiwg
JkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU0Nh
bGxiYWNrT2JqZWN0KSB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxi
YWNrT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0Nh
bGxiYWNrT2JqZWN0LmgJKHJldmlzaW9uIDI2ODA4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9BUEkvSlNDYWxsYmFja09iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC02OSw3ICs2OSwxMCBA
QCBwdWJsaWM6CiAgICAgICAgIG1fcHJpdmF0ZVByb3BlcnRpZXMtPmRlbGV0ZVByaXZhdGVQcm9w
ZXJ0eShwcm9wZXJ0eU5hbWUpOwogICAgIH0KIAotICAgIHZvaWQgdmlzaXRDaGlsZHJlbihTbG90
VmlzaXRvciYgdmlzaXRvcikKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOworCisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KKyAgICB2b2lkIHZpc2l0Q2hpbGRyZW4oVmlzaXRvciYg
dmlzaXRvcikKICAgICB7CiAgICAgICAgIEpTUHJpdmF0ZVByb3BlcnR5TWFwKiBwcm9wZXJ0aWVz
ID0gbV9wcml2YXRlUHJvcGVydGllcy5nZXQoKTsKICAgICAgICAgaWYgKCFwcm9wZXJ0aWVzKQpA
QCAtMTAzLDcgKzEwNiw4IEBAIHB1YmxpYzoKICAgICAgICAgICAgIG1fcHJvcGVydHlNYXAucmVt
b3ZlKHByb3BlcnR5TmFtZS5pbXBsKCkpOwogICAgICAgICB9CiAKLSAgICAgICAgdm9pZCB2aXNp
dENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBWaXNpdG9yPgorICAgICAgICB2b2lkIHZpc2l0Q2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikK
ICAgICAgICAgewogICAgICAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9sb2NrKTsKICAgICAg
ICAgICAgIGZvciAoYXV0byYgcGFpciA6IG1fcHJvcGVydHlNYXApIHsKQEAgLTIxNiwxMyArMjIw
LDcgQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgQ2FsbERhdGEgZ2V0Q29uc3RydWN0RGF0YShKU0Nl
bGwqKTsKICAgICBzdGF0aWMgQ2FsbERhdGEgZ2V0Q2FsbERhdGEoSlNDZWxsKik7CiAKLSAgICBz
dGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0
b3IpCi0gICAgewotICAgICAgICBKU0NhbGxiYWNrT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0
PEpTQ2FsbGJhY2tPYmplY3QqPihjZWxsKTsKLSAgICAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhF
UklUUygoc3RhdGljX2Nhc3Q8UGFyZW50Kj4odGhpc09iamVjdCkpLCBKU0NhbGxiYWNrT2JqZWN0
PFBhcmVudD46OmluZm8oKSk7Ci0gICAgICAgIFBhcmVudDo6dmlzaXRDaGlsZHJlbih0aGlzT2Jq
ZWN0LCB2aXNpdG9yKTsKLSAgICAgICAgdGhpc09iamVjdC0+bV9jYWxsYmFja09iamVjdERhdGEt
PnZpc2l0Q2hpbGRyZW4odmlzaXRvcik7Ci0gICAgfQorICAgIERFQ0xBUkVfVEVNUExBVEVfVklT
SVRfQ0hJTERSRU47CiAKICAgICB2b2lkIGluaXQoSlNHbG9iYWxPYmplY3QqKTsKICAKQEAgLTI0
NSw2ICsyNDMsMTYgQEAgcHJpdmF0ZToKICAgICBjb25zdCBDbGFzc0luZm8qIG1fY2xhc3NJbmZv
IHsgbnVsbHB0ciB9OwogfTsKIAordGVtcGxhdGUgPGNsYXNzIFBhcmVudD4KK3RlbXBsYXRlPHR5
cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTQ2FsbGJhY2tPYmplY3Q8UGFyZW50Pjo6dmlzaXRDaGls
ZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIEpTQ2FsbGJh
Y2tPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNDYWxsYmFja09iamVjdCo+KGNlbGwpOwor
ICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoKHN0YXRpY19jYXN0PFBhcmVudCo+KHRoaXNP
YmplY3QpKSwgSlNDYWxsYmFja09iamVjdDxQYXJlbnQ+OjppbmZvKCkpOworICAgIFBhcmVudDo6
dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKKyAgICB0aGlzT2JqZWN0LT5tX2Nh
bGxiYWNrT2JqZWN0RGF0YS0+dmlzaXRDaGlsZHJlbih2aXNpdG9yKTsKK30KKwogfSAvLyBuYW1l
c3BhY2UgSlNDCiAKIC8vIGluY2x1ZGUgdGhlIGFjdHVhbCB0ZW1wbGF0ZSBjbGFzcyBpbXBsZW1l
bnRhdGlvbgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDI2ODA4
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xODk5LDYgKzE4OTksNyBAQAogCQlFM0ZG
NzUzMzFEOUNFQTE4MDBDN0UxNkQgLyogRE9NSklUR2V0dGVyU2V0dGVyLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFM0ZGNzUyRjFEOUNFQTEyMDBDN0Ux
NkQgLyogRE9NSklUR2V0dGVyU2V0dGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTQ5REMxNkMxMkVGMjk0RTAwMTg0QTFGIC8qIFNvdXJjZVBy
b3ZpZGVyQ2FjaGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEU0OURDMTUxMTJFRjI3MjIwMDE4NEExRiAvKiBTb3VyY2VQcm92aWRlckNhY2hlLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTQ5REMxNkQx
MkVGMjk1MzAwMTg0QTFGIC8qIFNvdXJjZVByb3ZpZGVyQ2FjaGVJdGVtLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDlEQzE0OTEyRUYyNjFBMDAxODRB
MUYgLyogU291cmNlUHJvdmlkZXJDYWNoZUl0ZW0uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OworCQlGRTA0MTU1MzI1MkVDMDczMDA5MUVCNUQgLyogU2xv
dFZpc2l0b3JNYWNyb3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEZFMDQxNTUyMjUyRUMwNzMwMDkxRUI1RCAvKiBTbG90VmlzaXRvck1hY3Jvcy5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUZFMDVGQUZE
MUZFNENFREEwMDA5MzIzMCAvKiBEZXByZWNhdGVkSW5zcGVjdG9yVmFsdWVzLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk5MkQ2QTExMUZCRDQ5MUQw
MDAyNDVGNCAvKiBEZXByZWNhdGVkSW5zcGVjdG9yVmFsdWVzLmNwcCAqLzsgfTsKIAkJRkUwODZC
Q0EyMTIzREVGQjAwM0YyOTI5IC8qIEVudHJ5RnJhbWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFMDg2QkM5MjEyM0RFRkEwMDNGMjkyOSAvKiBFbnRy
eUZyYW1lLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJRkUwRDRBMDYxQUI4REQwQTAwMkY1NEJGIC8qIEV4ZWN1dGlvblRpbWVMaW1pdFRlc3QuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUwRDRBMDQx
QUI4REQwQTAwMkY1NEJGIC8qIEV4ZWN1dGlvblRpbWVMaW1pdFRlc3QuY3BwICovOyB9OwpAQCAt
NTE3OCw2ICs1MTc5LDcgQEAKIAkJRjY5MkE4ODcwMjU1NTk3RDAxRkY2MEY3IC8qIEpTQ0pTVmFs
dWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBp
bmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gSlNDSlNWYWx1ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0g
ODsgfTsKIAkJRjczOTI2OTE4REM2NDMzMEFGQ0RGMEQ3IC8qIEpTU291cmNlQ29kZS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1NvdXJjZUNvZGUuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTAwMjYyMjIzRjNBRjMzMDAzQTM1OEYgLyogV2Vi
QXNzZW1ibHkuYXNtICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5hc20uYXNtOyBuYW1lID0gV2ViQXNzZW1ibHkuYXNtOyBwYXRoID0g
bGxpbnQvV2ViQXNzZW1ibHkuYXNtOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRTA0
MTU1MjI1MkVDMDczMDA5MUVCNUQgLyogU2xvdFZpc2l0b3JNYWNyb3MuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gU2xvdFZpc2l0b3JNYWNyb3MuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJRkUwODZCQzkyMTIzREVGQTAwM0YyOTI5IC8qIEVudHJ5RnJhbWUuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRW50cnlGcmFtZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlGRTBENEEwNDFBQjhERDBBMDAyRjU0QkYgLyogRXhlY3V0aW9u
VGltZUxpbWl0VGVzdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBF
eGVjdXRpb25UaW1lTGltaXRUZXN0LmNwcDsgcGF0aCA9IEFQSS90ZXN0cy9FeGVjdXRpb25UaW1l
TGltaXRUZXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkUwRDRBMDUxQUI4
REQwQTAwMkY1NEJGIC8qIEV4ZWN1dGlvblRpbWVMaW1pdFRlc3QuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gRXhlY3V0aW9uVGltZUxpbWl0VGVzdC5oOyBwYXRoID0gQVBJL3Rl
c3RzL0V4ZWN1dGlvblRpbWVMaW1pdFRlc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTYzOTAsNiArNjM5Miw3IEBACiAJCQkJQzIyNTQ5NDIxNUY3REJBQTAwNjVFODk4IC8qIFNs
b3RWaXNpdG9yLmNwcCAqLywKIAkJCQkxNEJBNzhGMDEzQUFCODhGMDA1QjdDMkMgLyogU2xvdFZp
c2l0b3IuaCAqLywKIAkJCQkwRkNCNDA4NTE1QzBBM0MzMDA0ODkzMkIgLyogU2xvdFZpc2l0b3JJ
bmxpbmVzLmggKi8sCisJCQkJRkUwNDE1NTIyNTJFQzA3MzAwOTFFQjVEIC8qIFNsb3RWaXNpdG9y
TWFjcm9zLmggKi8sCiAJCQkJMEZERTg3RkExREZFNkU1MDAwNjRDMzkwIC8qIFNwYWNlVGltZU11
dGF0b3JTY2hlZHVsZXIuY3BwICovLAogCQkJCTBGREU4N0ZCMURGRTZFNTAwMDY0QzM5MCAvKiBT
cGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyLmggKi8sCiAJCQkJMEY0RjgyODkxRTMxQjk3MTAwNzUx
ODRDIC8qIFN0b2NoYXN0aWNTcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyLmNwcCAqLywKQEAgLTky
MjUsNiArOTIyOCw3IEBACiAJCQkJNTI2NzhGOEYxQTAzMTAwOTAwNkEzMDZEIC8qIEJhc2ljQmxv
Y2tMb2NhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQ3QjgzQUMwRTZEQjhDOTAwNDc3NUE0
IC8qIEJhdGNoZWRUcmFuc2l0aW9uT3B0aW1pemVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk4Njk3
NkU1RjFGQTNFOEJDMDBFN0M0RTEgLyogQmlnSW50Q29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICov
LAorCQkJCUZFMDQxNTUzMjUyRUMwNzMwMDkxRUI1RCAvKiBTbG90VmlzaXRvck1hY3Jvcy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJODY2NzM5RDIxM0JGREU3MTAwMjNEODdDIC8qIEJpZ0ludGVnZXIu
aCBpbiBIZWFkZXJzICovLAogCQkJCTg2MTgxNjc3MUZCNzkyNDIwMEVDQzRFQyAvKiBCaWdJbnRP
YmplY3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2OTc2RTVFMUZBM0U4QjYwMEU3QzRFMSAvKiBC
aWdJbnRQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJldmlzaW9uIDI2ODA4NikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC05OTgsNyArOTk4LDggQEAgc2l6ZV90IENvZGVCbG9jazo6ZXN0aW1hdGVkU2l6ZShKU0NlbGwq
IAogICAgIHJldHVybiBCYXNlOjplc3RpbWF0ZWRTaXplKGNlbGwsIHZtKSArIGV4dHJhTWVtb3J5
QWxsb2NhdGVkOwogfQogCi12b2lkIENvZGVCbG9jazo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNl
bGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3Zv
aWQgQ29kZUJsb2NrOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZp
c2l0b3IpCiB7CiAgICAgQ29kZUJsb2NrKiB0aGlzT2JqZWN0ID0ganNDYXN0PENvZGVCbG9jayo+
KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygp
KTsKQEAgLTEwMDcsNyArMTAwOCwxMCBAQCB2b2lkIENvZGVCbG9jazo6dmlzaXRDaGlsZHJlbihK
U0NlbGwqIGNlCiAgICAgdGhpc09iamVjdC0+dmlzaXRDaGlsZHJlbih2aXNpdG9yKTsKIH0KIAot
dm9pZCBDb2RlQmxvY2s6OnZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCitERUZJ
TkVfVklTSVRfQ0hJTERSRU4oQ29kZUJsb2NrKTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRv
cj4KK3ZvaWQgQ29kZUJsb2NrOjp2aXNpdENoaWxkcmVuSW1wbChWaXNpdG9yJiB2aXNpdG9yKQog
ewogICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9sb2NrKTsKICAgICBpZiAoQ29kZUJs
b2NrKiBvdGhlckJsb2NrID0gc3BlY2lhbE9TUkVudHJ5QmxvY2tPck51bGwoKSkKQEAgLTEwMjYs
NiArMTAzMCw4IEBAIHZvaWQgQ29kZUJsb2NrOjp2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG8KICAg
ICBWTTo6U3BhY2VBbmRTZXQ6OnNldEZvcigqc3Vic3BhY2UoKSkuYWRkKHRoaXMpOwogfQogCitE
RUZJTkVfSU5TVEFOQ0VfVklTSVRfQ0hJTERSRU4oQ29kZUJsb2NrKTsKKwogYm9vbCBDb2RlQmxv
Y2s6OnNob3VsZFZpc2l0U3Ryb25nbHkoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiBsb2NrZXIp
CiB7CiAgICAgaWYgKE9wdGlvbnM6OmZvcmNlQ29kZUJsb2NrTGl2ZW5lc3MoKSkKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9uIDI2ODA4
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjAxLDEwICsyMDEsMTEgQEAgcHVibGljOgogICAgIC8vIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjM2NzcKICAgICBDb2RlQmxvY2sqIGJhc2Vs
aW5lVmVyc2lvbigpOwogCisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKKwogICAgIHN0YXRp
YyBzaXplX3QgZXN0aW1hdGVkU2l6ZShKU0NlbGwqLCBWTSYpOwotICAgIHN0YXRpYyB2b2lkIHZp
c2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKICAgICBzdGF0aWMgdm9pZCBkZXN0
cm95KEpTQ2VsbCopOwotICAgIHZvaWQgdmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYpOworICAg
IERFQ0xBUkVfSU5TVEFOQ0VfVklTSVRfQ0hJTERSRU47CiAgICAgdm9pZCBmaW5hbGl6ZVVuY29u
ZGl0aW9uYWxseShWTSYpOwogCiAgICAgdm9pZCBub3RpZnlMZXhpY2FsQmluZGluZ1VwZGF0ZSgp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGFibGVUb0NvZGVC
bG9ja0VkZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9FeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlLmNwcAkocmV2aXNpb24gMjY4MDg2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
OCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTgt
MjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTUzLDcgKzUzLDggQEAgdm9pZCBFeGVjdXRhYmxlVG9Db2RlQmxvY2tF
ZGdlOjpmaW5pc2hDcgogICAgIEFTU0VSVCghaXNBY3RpdmUoKSk7CiB9CiAKLXZvaWQgRXhlY3V0
YWJsZVRvQ29kZUJsb2NrRWRnZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNp
dG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgRXhlY3V0YWJs
ZVRvQ29kZUJsb2NrRWRnZTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9y
JiB2aXNpdG9yKQogewogICAgIFZNJiB2bSA9IHZpc2l0b3Iudm0oKTsKICAgICBFeGVjdXRhYmxl
VG9Db2RlQmxvY2tFZGdlKiBlZGdlID0ganNDYXN0PEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2Uq
PihjZWxsKTsKQEAgLTExNyw3ICsxMTgsMTAgQEAgdm9pZCBFeGVjdXRhYmxlVG9Db2RlQmxvY2tF
ZGdlOjp2aXNpdENoaQogICAgIGVkZ2UtPnJ1bkNvbnN0cmFpbnQobG9ja2VyLCB2bSwgdmlzaXRv
cik7CiB9CiAKLXZvaWQgRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZTo6dmlzaXRPdXRwdXRDb25z
dHJhaW50cyhKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorREVGSU5FX1ZJU0lU
X0NISUxEUkVOKEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UpOworCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBWaXNpdG9yPgordm9pZCBFeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlOjp2aXNpdE91dHB1dENv
bnN0cmFpbnRzSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgVk0m
IHZtID0gdmlzaXRvci52bSgpOwogICAgIEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UqIGVkZ2Ug
PSBqc0Nhc3Q8RXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZSo+KGNlbGwpOwpAQCAtMTI1LDYgKzEy
OSw4IEBAIHZvaWQgRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZTo6dmlzaXRPdXQKICAgICBlZGdl
LT5ydW5Db25zdHJhaW50KE5vTG9ja2luZ05lY2Vzc2FyeSwgdm0sIHZpc2l0b3IpOwogfQogCitE
RUZJTkVfVklTSVRfT1VUUFVUX0NPTlNUUkFJTlRTKEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2Up
OworCiB2b2lkIEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2U6OmZpbmFsaXplVW5jb25kaXRpb25h
bGx5KFZNJiB2bSkKIHsKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IG1fY29kZUJsb2NrLmdl
dCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGFibGVUb0Nv
ZGVCbG9ja0VkZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZS5oCShyZXZpc2lvbiAyNjgwODYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOC0y
MDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
OC0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtNTMsOSArNTMsOSBAQCBwdWJsaWM6CiAgICAgREVDTEFSRV9JTkZP
OwogCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2soKSBjb25zdCB7IHJldHVybiBtX2NvZGVCbG9j
ay5nZXQoKTsgfQotICAgIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwg
U2xvdFZpc2l0b3ImKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdE91dHB1dENvbnN0cmFpbnRzKEpT
Q2VsbCosIFNsb3RWaXNpdG9yJik7CisKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOworICAg
IERFQ0xBUkVfVklTSVRfT1VUUFVUX0NPTlNUUkFJTlRTOwogICAgIHZvaWQgZmluYWxpemVVbmNv
bmRpdGlvbmFsbHkoVk0mKTsKICAgICAKICAgICBzdGF0aWMgQ29kZUJsb2NrKiB1bndyYXAoRXhl
Y3V0YWJsZVRvQ29kZUJsb2NrRWRnZSogZWRnZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcAkocmV2aXNpb24gMjY4
MDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2Nr
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTItMjAxOSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTItMjAyMCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTcxLDcgKzcxLDggQEAgVW5saW5rZWRDb2RlQmxvY2s6
OlVubGlua2VkQ29kZUJsb2NrKFZNJgogICAgIH0KIH0KIAotdm9pZCBVbmxpbmtlZENvZGVCbG9j
azo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVt
cGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgVW5saW5rZWRDb2RlQmxvY2s6OnZpc2l0Q2hp
bGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBVbmxpbmtl
ZENvZGVCbG9jayogdGhpc09iamVjdCA9IGpzQ2FzdDxVbmxpbmtlZENvZGVCbG9jayo+KGNlbGwp
OwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAg
LTkwLDYgKzkxLDggQEAgdm9pZCBVbmxpbmtlZENvZGVCbG9jazo6dmlzaXRDaGlsZHJlbihKUwog
ICAgIHZpc2l0b3IucmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKGV4dHJhTWVtb3J5KTsKIH0KIAor
REVGSU5FX1ZJU0lUX0NISUxEUkVOKFVubGlua2VkQ29kZUJsb2NrKTsKKwogc2l6ZV90IFVubGlu
a2VkQ29kZUJsb2NrOjplc3RpbWF0ZWRTaXplKEpTQ2VsbCogY2VsbCwgVk0mIHZtKQogewogICAg
IFVubGlua2VkQ29kZUJsb2NrKiB0aGlzT2JqZWN0ID0ganNDYXN0PFVubGlua2VkQ29kZUJsb2Nr
Kj4oY2VsbCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRD
b2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
VW5saW5rZWRDb2RlQmxvY2suaAkocmV2aXNpb24gMjY4MDg2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTkgQXBwbGUgSW5jLiBBbGwg
UmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjAgQXBwbGUgSW5jLiBB
bGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00
MjMsNyArNDIzLDcgQEAgcHJpdmF0ZToKICAgICBSZWZDb3VudGVkQXJyYXk8RXhwcmVzc2lvblJh
bmdlSW5mbz4gbV9leHByZXNzaW9uSW5mbzsKIAogcHJvdGVjdGVkOgotICAgIHN0YXRpYyB2b2lk
IHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lU
X0NISUxEUkVOOwogICAgIHN0YXRpYyBzaXplX3QgZXN0aW1hdGVkU2l6ZShKU0NlbGwqLCBWTSYp
OwogCiBwdWJsaWM6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5r
ZWRGdW5jdGlvbkV4ZWN1dGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5jcHAJKHJldmlzaW9uIDI2
ODA4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9u
RXhlY3V0YWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDEyLTIwMTkgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEyLTIwMjAgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xNDEsNyArMTQxLDggQEAgdm9pZCBV
bmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6ZGVzdHJveQogICAgIHN0YXRpY19jYXN0PFVubGlu
a2VkRnVuY3Rpb25FeGVjdXRhYmxlKj4oY2VsbCktPn5VbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJs
ZSgpOwogfQogCi12b2lkIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlOjp2aXNpdENoaWxkcmVu
KEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPgordm9pZCBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6dmlzaXRDaGlsZHJlbklt
cGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFVubGlua2VkRnVuY3Rp
b25FeGVjdXRhYmxlKiB0aGlzT2JqZWN0ID0ganNDYXN0PFVubGlua2VkRnVuY3Rpb25FeGVjdXRh
YmxlKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBp
bmZvKCkpOwpAQCAtMTY0LDYgKzE2NSw4IEBAIHZvaWQgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFi
bGU6OnZpc2l0Q2gKICAgICB9CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihVbmxpbmtlZEZ1
bmN0aW9uRXhlY3V0YWJsZSk7CisKIFNvdXJjZUNvZGUgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFi
bGU6OmxpbmtlZFNvdXJjZUNvZGUoY29uc3QgU291cmNlQ29kZSYgcGFzc2VkUGFyZW50U291cmNl
KSBjb25zdAogewogICAgIGNvbnN0IFNvdXJjZUNvZGUmIHBhcmVudFNvdXJjZSA9ICFtX2lzQnVp
bHRpbkRlZmF1bHRDbGFzc0NvbnN0cnVjdG9yID8gcGFzc2VkUGFyZW50U291cmNlIDogQnVpbHRp
bkV4ZWN1dGFibGVzOjpkZWZhdWx0Q29uc3RydWN0b3JTb3VyY2VDb2RlKGNvbnN0cnVjdG9yS2lu
ZCgpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZEZ1bmN0
aW9uRXhlY3V0YWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9VbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5oCShyZXZpc2lvbiAyNjgwODYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUu
aAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTItMjAxOSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTItMjAyMCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTIzMiw3ICsyMzIsNyBAQCBwcml2YXRlOgogICAgIFVubGlu
a2VkRnVuY3Rpb25FeGVjdXRhYmxlKFZNJiwgU3RydWN0dXJlKiwgY29uc3QgU291cmNlQ29kZSYs
IEZ1bmN0aW9uTWV0YWRhdGFOb2RlKiwgVW5saW5rZWRGdW5jdGlvbktpbmQsIENvbnN0cnVjdEFi
aWxpdHksIEpTUGFyc2VyU2NyaXB0TW9kZSwgT3B0aW9uYWw8Q29tcGFjdFZhcmlhYmxlTWFwOjpI
YW5kbGU+LCAgSlNDOjpEZXJpdmVkQ29udGV4dFR5cGUsIEpTQzo6TmVlZHNDbGFzc0ZpZWxkSW5p
dGlhbGl6ZXIsIGJvb2wgaXNCdWlsdGluRGVmYXVsdENsYXNzQ29uc3RydWN0b3IpOwogICAgIFVu
bGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKERlY29kZXImLCBjb25zdCBDYWNoZWRGdW5jdGlvbkV4
ZWN1dGFibGUmKTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xv
dFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgdm9pZCBkZWNv
ZGVDYWNoZWRDb2RlQmxvY2tzKFZNJik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZWJ1Z2dlci9EZWJ1Z2dlclNjb3BlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGVidWdnZXIvRGVidWdnZXJTY29wZS5jcHAJKHJldmlzaW9uIDI2ODA4NikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlclNjb3BlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxOSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAyMCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTU1LDcgKzU1LDggQEAgdm9pZCBEZWJ1Z2dlclNjb3BlOjpmaW5pc2hDcmVhdGlv
bihWTSYgdgogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKIH0KIAotdm9pZCBEZWJ1Z2dl
clNjb3BlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3Ip
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBEZWJ1Z2dlclNjb3BlOjp2aXNpdENo
aWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgRGVidWdn
ZXJTY29wZSogdGhpc09iamVjdCA9IGpzQ2FzdDxEZWJ1Z2dlclNjb3BlKj4oY2VsbCk7CiAgICAg
QVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNjUsNiAr
NjYsOCBAQCB2b2lkIERlYnVnZ2VyU2NvcGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsCiAgICAgdmlz
aXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9uZXh0KTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxE
UkVOKERlYnVnZ2VyU2NvcGUpOworCiBTdHJpbmcgRGVidWdnZXJTY29wZTo6Y2xhc3NOYW1lKGNv
bnN0IEpTT2JqZWN0KiBvYmplY3QsIFZNJiB2bSkKIHsKICAgICBjb25zdCBEZWJ1Z2dlclNjb3Bl
KiBzY29wZSA9IGpzQ2FzdDxjb25zdCBEZWJ1Z2dlclNjb3BlKj4ob2JqZWN0KTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlclNjb3BlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyU2NvcGUuaAkocmV2aXNp
b24gMjY4MDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyU2Nv
cGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDYsNyArNDYsNyBAQCBwdWJsaWM6CiAKICAgICBKU19F
WFBPUlRfUFJJVkFURSBzdGF0aWMgRGVidWdnZXJTY29wZSogY3JlYXRlKFZNJiB2bSwgSlNTY29w
ZSogc2NvcGUpOwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90
VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAgICAgc3RhdGljIFN0cmlu
ZyBjbGFzc05hbWUoY29uc3QgSlNPYmplY3QqLCBWTSYpOwogICAgIHN0YXRpYyBTdHJpbmcgdG9T
dHJpbmdOYW1lKGNvbnN0IEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqKTsKICAgICBzdGF0aWMg
Ym9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIFByb3Bl
cnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0Rlc2lyZWRUcmFuc2l0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdEZXNpcmVkVHJhbnNpdGlvbnMuY3BwCShyZXZpc2lvbiAyNjgwODYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRUcmFuc2l0aW9ucy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTUyLDEzICs1MiwxNiBAQCB2b2lkIERlc2lyZWRUcmFuc2l0aW9uOjpy
ZWFsbHlBZGQoVk0mIHZtCiAgICAgICAgICAgICBtX29sZFN0cnVjdHVyZSwgbV9uZXdTdHJ1Y3R1
cmUpKTsKIH0KIAotdm9pZCBEZXNpcmVkVHJhbnNpdGlvbjo6dmlzaXRDaGlsZHJlbihTbG90Vmlz
aXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIERlc2lyZWRU
cmFuc2l0aW9uOjp2aXNpdENoaWxkcmVuSW1wbChWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHZp
c2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQobV9jb2RlT3JpZ2luT3duZXIpOwogICAgIHZpc2l0b3Iu
YXBwZW5kVW5iYXJyaWVyZWQobV9vbGRTdHJ1Y3R1cmUpOwogICAgIHZpc2l0b3IuYXBwZW5kVW5i
YXJyaWVyZWQobV9uZXdTdHJ1Y3R1cmUpOwogfQogCitERUZJTkVfSU5TVEFOQ0VfVklTSVRfQ0hJ
TERSRU4oRGVzaXJlZFRyYW5zaXRpb24pOworCiBEZXNpcmVkVHJhbnNpdGlvbnM6OkRlc2lyZWRU
cmFuc2l0aW9ucygpCiB7CiB9CkBAIC03OCwxMiArODEsMTUgQEAgdm9pZCBEZXNpcmVkVHJhbnNp
dGlvbnM6OnJlYWxseUFkZChWTSYgdgogICAgICAgICBtX3RyYW5zaXRpb25zW2ldLnJlYWxseUFk
ZCh2bSwgY29tbW9uKTsKIH0KIAotdm9pZCBEZXNpcmVkVHJhbnNpdGlvbnM6OnZpc2l0Q2hpbGRy
ZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9p
ZCBEZXNpcmVkVHJhbnNpdGlvbnM6OnZpc2l0Q2hpbGRyZW5JbXBsKFZpc2l0b3ImIHZpc2l0b3Ip
CiB7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fdHJhbnNpdGlvbnMuc2l6ZSgpOyBp
KyspCiAgICAgICAgIG1fdHJhbnNpdGlvbnNbaV0udmlzaXRDaGlsZHJlbih2aXNpdG9yKTsKIH0K
IAorREVGSU5FX0lOU1RBTkNFX1ZJU0lUX0NISUxEUkVOKERlc2lyZWRUcmFuc2l0aW9ucyk7CisK
IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIAogI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkVHJhbnNpdGlvbnMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRUcmFuc2l0
aW9ucy5oCShyZXZpc2lvbiAyNjgwODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0Rlc2lyZWRUcmFuc2l0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC00Niw4ICs0Niw3IEBAIHB1
YmxpYzoKICAgICBEZXNpcmVkVHJhbnNpdGlvbihDb2RlQmxvY2sqLCBDb2RlQmxvY2sqIGNvZGVP
cmlnaW5Pd25lciwgU3RydWN0dXJlKiwgU3RydWN0dXJlKik7CiAKICAgICB2b2lkIHJlYWxseUFk
ZChWTSYsIENvbW1vbkRhdGEqKTsKLSAgICAKLSAgICB2b2lkIHZpc2l0Q2hpbGRyZW4oU2xvdFZp
c2l0b3ImKTsKKyAgICBERUNMQVJFX0lOU1RBTkNFX1ZJU0lUX0NISUxEUkVOOwogCiBwcml2YXRl
OgogICAgIENvZGVCbG9jayogbV9jb2RlQmxvY2s7CkBAIC02Myw3ICs2Miw3IEBAIHB1YmxpYzoK
IAogICAgIHZvaWQgYWRkTGF6aWx5KENvZGVCbG9jayosIENvZGVCbG9jayogY29kZU9yaWdpbk93
bmVyLCBTdHJ1Y3R1cmUqLCBTdHJ1Y3R1cmUqKTsKICAgICB2b2lkIHJlYWxseUFkZChWTSYsIENv
bW1vbkRhdGEqKTsKLSAgICB2b2lkIHZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKKyAgICBE
RUNMQVJFX0lOU1RBTkNFX1ZJU0lUX0NISUxEUkVOOwogCiBwcml2YXRlOgogICAgIFZlY3RvcjxE
ZXNpcmVkVHJhbnNpdGlvbj4gbV90cmFuc2l0aW9uczsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHRGVzaXJlZFdlYWtSZWZlcmVuY2VzLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXZWFrUmVmZXJlbmNlcy5jcHAJKHJldmlz
aW9uIDI2ODA4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFdlYWtS
ZWZlcmVuY2VzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODcsMTIgKzg3LDE1IEBAIHZvaWQgRGVz
aXJlZFdlYWtSZWZlcmVuY2VzOjpyZWFsbHlBZGQoVk0KICAgICB9CiB9CiAKLXZvaWQgRGVzaXJl
ZFdlYWtSZWZlcmVuY2VzOjp2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVt
cGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgRGVzaXJlZFdlYWtSZWZlcmVuY2VzOjp2aXNp
dENoaWxkcmVuSW1wbChWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGZvciAoSlNDZWxsKiB0YXJn
ZXQgOiBtX3JlZmVyZW5jZXMpCiAgICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQodGFy
Z2V0KTsKIH0KIAorREVGSU5FX0lOU1RBTkNFX1ZJU0lUX0NISUxEUkVOKERlc2lyZWRXZWFrUmVm
ZXJlbmNlcyk7CisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIAogI2VuZGlmIC8vIEVOQUJM
RShERkdfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2Vh
a1JlZmVyZW5jZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0Rlc2lyZWRXZWFrUmVmZXJlbmNlcy5oCShyZXZpc2lvbiAyNjgwODYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXZWFrUmVmZXJlbmNlcy5oCSh3b3JraW5nIGNvcHkp
CkBAIC01Myw3ICs1Myw3IEBAIHB1YmxpYzoKICAgICAKICAgICB2b2lkIHJlYWxseUFkZChWTSYs
IENvbW1vbkRhdGEqKTsKICAgICAKLSAgICB2b2lkIHZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3Im
KTsKKyAgICBERUNMQVJFX0lOU1RBTkNFX1ZJU0lUX0NISUxEUkVOOwogCiBwcml2YXRlOgogICAg
IENvZGVCbG9jayogbV9jb2RlQmxvY2s7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0dyYXBoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0dyYXBoLmNwcAkocmV2aXNpb24gMjY4MDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdHcmFwaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk3Nyw3ICs5NzcsNyBAQCBCbG9ja0xp
c3QgR3JhcGg6OmJsb2Nrc0luUG9zdE9yZGVyKGJvb2wgCiAgICAgICAgIH0KICAgICB9CiAKLSAg
ICBpZiAoaXNTYWZlVG9WYWxpZGF0ZSAmJiB2YWxpZGF0aW9uRW5hYmxlZCgpKSB7IC8vIFRoZXJl
IGFyZSB1c2VycyBvZiB0aGlzIHdoZXJlIHdlIGhhdmVuJ3QgeWV0IGJ1aWx0IG9mIHRoZSBDRkcg
ZW5vdWdoIHRvIGJlIGFibGUgdG8gcnVuIGRvbWluYXRvcnMuCisgICAgaWYgKGlzU2FmZVRvVmFs
aWRhdGUgJiYgdmFsaWRhdGlvbkVuYWJsZWQoKSkgeyAvLyBUaGVyZSBhcmUgdXNlcnMgb2YgdGhp
cyB3aGVyZSB3ZSBoYXZlbid0IHlldCBidWlsdCB0aGUgQ0ZHIGVub3VnaCB0byBiZSBhYmxlIHRv
IHJ1biBkb21pbmF0b3JzLgogICAgICAgICBhdXRvIHZhbGlkYXRlUmVzdWx0cyA9IFsmXSAoYXV0
byYgZG9taW5hdG9ycykgewogICAgICAgICAgICAgLy8gV2hlbiBpdGVyYXRpbmcgb3ZlciByZXZl
cnNlIHBvc3Qgb3JkZXIsIHdlIHNob3VsZCBzZWUgZG9taW5hdG9ycwogICAgICAgICAgICAgLy8g
YmVmb3JlIHRoaW5ncyB0aGV5IGRvbWluYXRlLgpAQCAtMTQ0OCw3ICsxNDQ4LDggQEAgdm9pZCBH
cmFwaDo6cmVnaXN0ZXJGcm96ZW5WYWx1ZXMoKQogICAgIG1fY29kZUJsb2NrLT5jb25zdGFudHNT
b3VyY2VDb2RlUmVwcmVzZW50YXRpb24oKS5zaHJpbmtUb0ZpdCgpOwogfQogCi12b2lkIEdyYXBo
Ojp2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUg
VmlzaXRvcj4KK3ZvaWQgR3JhcGg6OnZpc2l0Q2hpbGRyZW5JbXBsKFZpc2l0b3ImIHZpc2l0b3Ip
CiB7CiAgICAgZm9yIChGcm96ZW5WYWx1ZSogdmFsdWUgOiBtX2Zyb3plblZhbHVlcykgewogICAg
ICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKHZhbHVlLT52YWx1ZSgpKTsKQEAgLTE0NTYs
NiArMTQ1Nyw4IEBAIHZvaWQgR3JhcGg6OnZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHYKICAg
ICB9CiB9CiAKK0RFRklORV9GSU5BTF9WSVNJVF9DSElMRFJFTihHcmFwaCk7CisKIEZyb3plblZh
bHVlKiBHcmFwaDo6ZnJlZXplKEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgaWYgKFVOTElLRUxZKCF2
YWx1ZSkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCShyZXZpc2lvbiAy
NjgwODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEwMDAsOSArMTAwMCw5IEBAIHB1YmxpYzoKICAgICBib29sIGNhbkRvRmFzdFNw
cmVhZChOb2RlKiwgY29uc3QgQWJzdHJhY3RWYWx1ZSYpOwogICAgIAogICAgIHZvaWQgcmVnaXN0
ZXJGcm96ZW5WYWx1ZXMoKTsKLSAgICAKLSAgICB2b2lkIHZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0
b3ImKSBmaW5hbDsKLSAgICAKKworICAgIERFQ0xBUkVfRklOQUxfVklTSVRfQ0hJTERSRU47CisK
ICAgICB2b2lkIGxvZ0Fzc2VydGlvbkZhaWx1cmUoCiAgICAgICAgIHN0ZDo6bnVsbHB0cl90LCBj
b25zdCBjaGFyKiBmaWxlLCBpbnQgbGluZSwgY29uc3QgY2hhciogZnVuY3Rpb24sCiAgICAgICAg
IGNvbnN0IGNoYXIqIGFzc2VydGlvbik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1BsYW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
UGxhbi5jcHAJKHJldmlzaW9uIDI2ODA4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHUGxhbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY3Miw3ICs2NzIsOCBAQCBDb21waWxhdGlv
bktleSBQbGFuOjprZXkoKQogICAgIHJldHVybiBDb21waWxhdGlvbktleShtX2NvZGVCbG9jay0+
YWx0ZXJuYXRpdmUoKSwgbV9tb2RlKTsKIH0KIAotdm9pZCBQbGFuOjpjaGVja0xpdmVuZXNzQW5k
VmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZp
c2l0b3I+Cit2b2lkIFBsYW46OmNoZWNrTGl2ZW5lc3NBbmRWaXNpdENoaWxkcmVuSW1wbChWaXNp
dG9yJiB2aXNpdG9yKQogewogICAgIGlmICghaXNLbm93blRvQmVMaXZlRHVyaW5nR0MoKSkKICAg
ICAgICAgcmV0dXJuOwpAQCAtNzAyLDYgKzcwMyw4IEBAIHZvaWQgUGxhbjo6Y2hlY2tMaXZlbmVz
c0FuZFZpc2l0Q2hpbGRyZW4KICAgICBtX3RyYW5zaXRpb25zLnZpc2l0Q2hpbGRyZW4odmlzaXRv
cik7CiB9CiAKK0RFRklORV9JTlNUQU5DRV9TTE9UX1ZJU0lUT1JfTUVUSE9EKHZvaWQsIFBsYW4s
IGNoZWNrTGl2ZW5lc3NBbmRWaXNpdENoaWxkcmVuKTsKKwogdm9pZCBQbGFuOjpmaW5hbGl6ZUlu
R0MoKQogewogICAgIEFTU0VSVChtX3ZtKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHUGxhbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
UGxhbi5oCShyZXZpc2lvbiAyNjgwODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1BsYW4uaAkod29ya2luZyBjb3B5KQpAQCAtMzgsNiArMzgsNyBAQAogI2luY2x1ZGUgIk9wZXJh
bmRzLmgiCiAjaW5jbHVkZSAiUHJvZmlsZXJDb21waWxhdGlvbi5oIgogI2luY2x1ZGUgIlJlY29y
ZGVkU3RhdHVzZXMuaCIKKyNpbmNsdWRlICJTbG90VmlzaXRvck1hY3Jvcy5oIgogI2luY2x1ZGUg
PHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+CiAK
QEAgLTcyLDcgKzczLDcgQEAgcHVibGljOgogICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1
bmM+CiAgICAgdm9pZCBpdGVyYXRlQ29kZUJsb2Nrc0ZvckdDKGNvbnN0IEZ1bmMmKTsKLSAgICB2
b2lkIGNoZWNrTGl2ZW5lc3NBbmRWaXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CisgICAgREVD
TEFSRV9JTlNUQU5DRV9TTE9UX1ZJU0lUT1JfTUVUSE9EKHZvaWQsIGNoZWNrTGl2ZW5lc3NBbmRW
aXNpdENoaWxkcmVuKTsKICAgICBib29sIGlzS25vd25Ub0JlTGl2ZUR1cmluZ0dDKCk7CiAgICAg
dm9pZCBmaW5hbGl6ZUluR0MoKTsKICAgICB2b2lkIGNhbmNlbCgpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlcG9pbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZXBvaW50LmNwcAkocmV2aXNpb24gMjY4MDg2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlcG9pbnQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC04Myw3ICs4Myw4IEBAIHZvaWQgU2FmZXBvaW50OjpiZWdpbigpCiAgICAgfQogfQogCi12
b2lkIFNhZmVwb2ludDo6Y2hlY2tMaXZlbmVzc0FuZFZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3Im
IHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBTYWZlcG9pbnQ6OmNo
ZWNrTGl2ZW5lc3NBbmRWaXNpdENoaWxkcmVuSW1wbChWaXNpdG9yJiB2aXNpdG9yKQogewogICAg
IFJFTEVBU0VfQVNTRVJUKG1fZGlkQ2FsbEJlZ2luKTsKIApAQCAtOTcsNiArOTgsOCBAQCB2b2lk
IFNhZmVwb2ludDo6Y2hlY2tMaXZlbmVzc0FuZFZpc2l0Q2hpCiAgICAgICAgIG1fc2Nhbm5hYmxl
c1tpXS0+dmlzaXRDaGlsZHJlbih2aXNpdG9yKTsKIH0KIAorREVGSU5FX0lOU1RBTkNFX1NMT1Rf
VklTSVRPUl9NRVRIT0Qodm9pZCwgU2FmZXBvaW50LCBjaGVja0xpdmVuZXNzQW5kVmlzaXRDaGls
ZHJlbik7CisKIGJvb2wgU2FmZXBvaW50Ojppc0tub3duVG9CZUxpdmVEdXJpbmdHQygpCiB7CiAg
ICAgUkVMRUFTRV9BU1NFUlQobV9kaWRDYWxsQmVnaW4pOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTYWZlcG9pbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NhZmVwb2ludC5oCShyZXZpc2lvbiAyNjgwODYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVwb2ludC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsy
Nyw3IEBACiAKICNpZiBFTkFCTEUoREZHX0pJVCkKIAorI2luY2x1ZGUgIlNsb3RWaXNpdG9yTWFj
cm9zLmgiCiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTY3
LDcgKzY4LDcgQEAgcHVibGljOgogICAgIAogICAgIHZvaWQgYmVnaW4oKTsKICAgICAKLSAgICB2
b2lkIGNoZWNrTGl2ZW5lc3NBbmRWaXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CisgICAgREVD
TEFSRV9JTlNUQU5DRV9TTE9UX1ZJU0lUT1JfTUVUSE9EKHZvaWQsIGNoZWNrTGl2ZW5lc3NBbmRW
aXNpdENoaWxkcmVuKTsKICAgICBib29sIGlzS25vd25Ub0JlTGl2ZUR1cmluZ0dDKCk7CiAgICAg
dm9pZCBjYW5jZWwoKTsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U2Nhbm5hYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
Y2FubmFibGUuaAkocmV2aXNpb24gMjY4MDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTY2FubmFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzksNiArMzksNyBAQCBwdWJsaWM6
CiAgICAgdmlydHVhbCB+U2Nhbm5hYmxlKCkgeyB9CiAgICAgCiAgICAgdmlydHVhbCB2b2lkIHZp
c2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0Q2hp
bGRyZW4oRGVidWdTbG90VmlzaXRvciYpID0gMDsgLy8gbWxhbQogfTsKIAogfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlz
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlz
dC5jcHAJKHJldmlzaW9uIDI2ODA4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
V29ya2xpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNzIsNyArMzcyLDggQEAgdm9pZCBXb3Jr
bGlzdDo6cmVzdW1lQWxsVGhyZWFkcygpCiAgICAgbV9zdXNwZW5zaW9uTG9jay51bmxvY2soKTsK
IH0KIAotdm9pZCBXb3JrbGlzdDo6dmlzaXRXZWFrUmVmZXJlbmNlcyhTbG90VmlzaXRvciYgdmlz
aXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFdvcmtsaXN0Ojp2aXNpdFdl
YWtSZWZlcmVuY2VzSW1wbChWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFZNKiB2bSA9ICZ2aXNp
dG9yLmhlYXAoKS0+dm0oKTsKICAgICB7CkBAIC0zOTYsNiArMzk3LDggQEAgdm9pZCBXb3JrbGlz
dDo6dmlzaXRXZWFrUmVmZXJlbmNlcyhTbG90VgogICAgIH0KIH0KIAorREVGSU5FX0lOU1RBTkNF
X1NMT1RfVklTSVRPUl9NRVRIT0Qodm9pZCwgV29ya2xpc3QsIHZpc2l0V2Vha1JlZmVyZW5jZXMp
OworCiB2b2lkIFdvcmtsaXN0OjpyZW1vdmVEZWFkUGxhbnMoVk0mIHZtKQogewogICAgIHsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3QuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0LmgJKHJldmlzaW9uIDI2ODA4
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3QuaAkod29ya2luZyBj
b3B5KQpAQCAtNzMsNyArNzMsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc0FjdGl2ZUZvclZNKFZN
JikgY29uc3Q7CiAgICAgCiAgICAgLy8gT25seSBjYWxsZWQgb24gdGhlIG1haW4gdGhyZWFkIGFm
dGVyIHN1c3BlbmRpbmcgYWxsIHRocmVhZHMuCi0gICAgdm9pZCB2aXNpdFdlYWtSZWZlcmVuY2Vz
KFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9JTlNUQU5DRV9TTE9UX1ZJU0lUT1JfTUVUSE9E
KHZvaWQsIHZpc2l0V2Vha1JlZmVyZW5jZXMpOwogICAgIHZvaWQgcmVtb3ZlRGVhZFBsYW5zKFZN
Jik7CiAgICAgCiAgICAgdm9pZCByZW1vdmVOb25Db21waWxpbmdQbGFuc0ZvclZNKFZNJik7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAkocmV2aXNpb24gMjY4MDg2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2
OTcsNiArMjY5Nyw3IEBAIHZvaWQgSGVhcDo6ZGlkRnJlZUJsb2NrKHNpemVfdCBjYXBhY2l0eSkK
ICNlbmRpZgogfQogCisvLyBtbGFtIEZJWE1FCiB2b2lkIEhlYXA6OmFkZENvcmVDb25zdHJhaW50
cygpCiB7CiAgICAgbV9jb25zdHJhaW50U2V0LT5hZGQoCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9TbG90VmlzaXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmgJKHJldmlzaW9uIDI2ODA4NikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2OCw2ICsy
NjgsMTEgQEAgcHVibGljOgogI2VuZGlmCiB9OwogCitjbGFzcyBEZWJ1Z1Nsb3RWaXNpdG9yIDog
cHVibGljIFNsb3RWaXNpdG9yIC8vIG1sYW0gVEVTVAoreworCit9OworCiBjbGFzcyBQYXJhbGxl
bE1vZGVFbmFibGVyIHsKIHB1YmxpYzoKICAgICBQYXJhbGxlbE1vZGVFbmFibGVyKFNsb3RWaXNp
dG9yJiBzdGFjaykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9y
TWFjcm9zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZp
c2l0b3JNYWNyb3MuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9TbG90VmlzaXRvck1hY3Jvcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTY4IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNl
CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBEZWJ1Z1Nsb3RWaXNpdG9yOworY2xhc3MgSlND
ZWxsOworY2xhc3MgU2xvdFZpc2l0b3I7CisKKyNkZWZpbmUgREVDTEFSRV9VTlVTRURfU0xPVF9W
SVNJVE9SX1NUUlVDVF9FWFBBTkRFUjIoY291bnRlcl8pIFwKKyAgICBzdHJ1Y3QgVW51c2VkU2xv
dFZpc2l0b3JTdHJ1Y3RTb1dlQ2FuSGF2ZUFTZW1pY29sb24jI2NvdW50ZXJfIHsgfQorCisjZGVm
aW5lIERFQ0xBUkVfVU5VU0VEX1NMT1RfVklTSVRPUl9TVFJVQ1RfRVhQQU5ERVIoY291bnRlcl8p
IFwKKyAgICBERUNMQVJFX1VOVVNFRF9TTE9UX1ZJU0lUT1JfU1RSVUNUX0VYUEFOREVSMihjb3Vu
dGVyXykKKworI2RlZmluZSBERUNMQVJFX1VOVVNFRF9TTE9UX1ZJU0lUT1JfU1RSVUNUKCkgXAor
ICAgIERFQ0xBUkVfVU5VU0VEX1NMT1RfVklTSVRPUl9TVFJVQ1RfRVhQQU5ERVIoX19DT1VOVEVS
X18pCisKKy8vIE1hY3JvcyBmb3IgaW5zdGFuY2UgY3VzdG9tIHZpc2l0b3IgbWV0aG9kLgorCisj
ZGVmaW5lIERFQ0xBUkVfSU5TVEFOQ0VfU0xPVF9WSVNJVE9SX01FVEhPRF9JTVBMKHJldHVyblR5
cGVfLCBtZXRob2ROYW1lXywgcG9zdE1vZGlmaWVyXykgXAorICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFZpc2l0b3I+IHJldHVyblR5cGVfIG1ldGhvZE5hbWVfIyNJbXBsKFZpc2l0b3ImIHZpc2l0b3Ip
OyBcCisgICAgcmV0dXJuVHlwZV8gbWV0aG9kTmFtZV8oU2xvdFZpc2l0b3ImKSBwb3N0TW9kaWZp
ZXJfOyBcCisgICAgcmV0dXJuVHlwZV8gbWV0aG9kTmFtZV8oRGVidWdTbG90VmlzaXRvciYpIHBv
c3RNb2RpZmllcl87IFwKKyAgICBERUNMQVJFX1VOVVNFRF9TTE9UX1ZJU0lUT1JfU1RSVUNUKCkK
KworI2RlZmluZSBERUNMQVJFX0lOU1RBTkNFX1NMT1RfVklTSVRPUl9NRVRIT0QocmV0dXJuVHlw
ZV8sIG1ldGhvZE5hbWVfKSBcCisgICAgREVDTEFSRV9JTlNUQU5DRV9TTE9UX1ZJU0lUT1JfTUVU
SE9EX0lNUEwocmV0dXJuVHlwZV8sIG1ldGhvZE5hbWVfLCApCisKKworI2RlZmluZSBERUZJTkVf
SU5TVEFOQ0VfU0xPVF9WSVNJVE9SX01FVEhPRChyZXR1cm5UeXBlXywgY2xhc3NOYW1lXywgbWV0
aG9kTmFtZV8pIFwKKyAgICByZXR1cm5UeXBlXyBjbGFzc05hbWVfOjptZXRob2ROYW1lXyhTbG90
VmlzaXRvciYgdmlzaXRvcikgeyBtZXRob2ROYW1lXyMjSW1wbCh2aXNpdG9yKTsgfSBcCisgICAg
cmV0dXJuVHlwZV8gY2xhc3NOYW1lXzo6bWV0aG9kTmFtZV8oRGVidWdTbG90VmlzaXRvciYgdmlz
aXRvcikgIHsgbWV0aG9kTmFtZV8jI0ltcGwodmlzaXRvcik7IH0gXAorICAgIERFQ0xBUkVfVU5V
U0VEX1NMT1RfVklTSVRPUl9TVFJVQ1QoKQorCisvLyBNYWNyb3MgZm9yIGluc3RhbmNlIHZpc2l0
Q2hpbGRyZW4oKS4KKworI2RlZmluZSBERUNMQVJFX0lOU1RBTkNFX1ZJU0lUX0NISUxEUkVOIFwK
KyAgICBERUNMQVJFX0lOU1RBTkNFX1NMT1RfVklTSVRPUl9NRVRIT0Qodm9pZCwgdmlzaXRDaGls
ZHJlbikKKyNkZWZpbmUgREVDTEFSRV9GSU5BTF9WSVNJVF9DSElMRFJFTiBcCisgICAgREVDTEFS
RV9JTlNUQU5DRV9TTE9UX1ZJU0lUT1JfTUVUSE9EX0lNUEwodm9pZCwgdmlzaXRDaGlsZHJlbiwg
ZmluYWwpCisKKworI2RlZmluZSBERUZJTkVfSU5TVEFOQ0VfVklTSVRfQ0hJTERSRU4oY2xhc3NO
YW1lXykgXAorICAgIERFRklORV9JTlNUQU5DRV9TTE9UX1ZJU0lUT1JfTUVUSE9EKHZvaWQsIGNs
YXNzTmFtZV8sIHZpc2l0Q2hpbGRyZW4pCisjZGVmaW5lIERFRklORV9GSU5BTF9WSVNJVF9DSElM
RFJFTihjbGFzc05hbWVfKSBcCisgICAgREVGSU5FX0lOU1RBTkNFX1ZJU0lUX0NISUxEUkVOKGNs
YXNzTmFtZV8pCisKKy8vIE1hY3JvcyBmb3Igc3RhdGljIHZpc2l0Q2hpbGRyZW4oKS4KKworI2Rl
ZmluZSBERUNMQVJFX1ZJU0lUX0NISUxEUkVOX0lNUEwgXAorICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFZpc2l0b3I+IHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCosIFZpc2l0b3Im
KQorCisjZGVmaW5lIERFQ0xBUkVfVklTSVRfQ0hJTERSRU4gXAorICAgIERFQ0xBUkVfVklTSVRf
Q0hJTERSRU5fSU1QTDsgXAorICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBj
ZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcik7IFwKKyAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxk
cmVuKEpTQ2VsbCogY2VsbCwgRGVidWdTbG90VmlzaXRvciYgdmlzaXRvcikKKworI2RlZmluZSBE
RUNMQVJFX0VYUE9SVF9WSVNJVF9DSElMRFJFTiBcCisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJF
Tl9JTVBMOyBcCisgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJl
bihKU0NlbGwqLCBTbG90VmlzaXRvciYpOyAgXAorICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRp
YyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgRGVidWdTbG90VmlzaXRvciYpCisKKyNkZWZp
bmUgREVDTEFSRV9JTkxJTkVfVklTSVRfQ0hJTERSRU4gXAorICAgIERFQ0xBUkVfVklTSVRfQ0hJ
TERSRU5fSU1QTDsgXAorICAgIGlubGluZSBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2Vs
bCosIFNsb3RWaXNpdG9yJik7ICBcCisgICAgaW5saW5lIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKiwgRGVidWdTbG90VmlzaXRvciYpCisKKyNkZWZpbmUgREVDTEFSRV9URU1QTEFU
RV9WSVNJVF9DSElMRFJFTiBcCisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTgorCisKKyNkZWZp
bmUgREVGSU5FX1ZJU0lUX0NISUxEUkVOKGNsYXNzTmFtZV8pIFwKKyAgICB2b2lkIGNsYXNzTmFt
ZV86OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikgeyB2
aXNpdENoaWxkcmVuSW1wbChjZWxsLCB2aXNpdG9yKTsgfSBcCisgICAgdm9pZCBjbGFzc05hbWVf
Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgRGVidWdTbG90VmlzaXRvciYgdmlzaXRvcikg
eyB2aXNpdENoaWxkcmVuSW1wbChjZWxsLCB2aXNpdG9yKTsgfSBcCisgICAgREVDTEFSRV9VTlVT
RURfU0xPVF9WSVNJVE9SX1NUUlVDVCgpCisKKyNkZWZpbmUgREVGSU5FX0VYUE9SVF9WSVNJVF9D
SElMRFJFTihjbGFzc05hbWVfKSBcCisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBjbGFzc05h
bWVfOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsg
dmlzaXRDaGlsZHJlbkltcGwoY2VsbCwgdmlzaXRvcik7IH0gXAorICAgIEpTX0VYUE9SVF9QUklW
QVRFIHZvaWQgY2xhc3NOYW1lXzo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIERlYnVnU2xv
dFZpc2l0b3ImIHZpc2l0b3IpIHsgdmlzaXRDaGlsZHJlbkltcGwoY2VsbCwgdmlzaXRvcik7IH0g
XAorICAgIERFQ0xBUkVfVU5VU0VEX1NMT1RfVklTSVRPUl9TVFJVQ1QoKQorCisjZGVmaW5lIERF
RklORV9JTkxJTkVfVklTSVRfQ0hJTERSRU4oY2xhc3NOYW1lXykgXAorICAgIGlubGluZSB2b2lk
IGNsYXNzTmFtZV86OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlz
aXRvcikgeyB2aXNpdENoaWxkcmVuSW1wbChjZWxsLCB2aXNpdG9yKTsgfSBcCisgICAgaW5saW5l
IHZvaWQgY2xhc3NOYW1lXzo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIERlYnVnU2xvdFZp
c2l0b3ImIHZpc2l0b3IpIHsgdmlzaXRDaGlsZHJlbkltcGwoY2VsbCwgdmlzaXRvcik7IH0gXAor
ICAgIERFQ0xBUkVfVU5VU0VEX1NMT1RfVklTSVRPUl9TVFJVQ1QoKQorCisjZGVmaW5lIERFRklO
RV9URU1QTEFURV9WSVNJVF9DSElMRFJFTih0ZW1wbGF0ZUNsYXVzZV8sIGNsYXNzTmFtZV8pIFwK
KyAgICB0ZW1wbGF0ZUNsYXVzZV8gdm9pZCBjbGFzc05hbWVfOjp2aXNpdENoaWxkcmVuKEpTQ2Vs
bCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsgdmlzaXRDaGlsZHJlbkltcGwoY2VsbCwg
dmlzaXRvcik7IH0gXAorICAgIHRlbXBsYXRlQ2xhdXNlXyB2b2lkIGNsYXNzTmFtZV86OnZpc2l0
Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBEZWJ1Z1Nsb3RWaXNpdG9yJiB2aXNpdG9yKSB7IHZpc2l0
Q2hpbGRyZW5JbXBsKGNlbGwsIHZpc2l0b3IpOyB9IFwKKyAgICBERUNMQVJFX1VOVVNFRF9TTE9U
X1ZJU0lUT1JfU1RSVUNUKCkKKworLy8gTWFjcm9zIGZvciB2aXNpdE91dHB1dENvbnN0cmFpbnQo
KS4KKworI2RlZmluZSBERUNMQVJFX1ZJU0lUX09VVFBVVF9DT05TVFJBSU5UU19JTVBMIFwKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiBzdGF0aWMgdm9pZCB2aXNpdE91dHB1dENvbnN0
cmFpbnRzSW1wbChKU0NlbGwqLCBWaXNpdG9yJikKKworI2RlZmluZSBERUNMQVJFX1ZJU0lUX09V
VFBVVF9DT05TVFJBSU5UUyBcCisgICAgREVDTEFSRV9WSVNJVF9PVVRQVVRfQ09OU1RSQUlOVFNf
SU1QTDsgXAorICAgIHN0YXRpYyB2b2lkIHZpc2l0T3V0cHV0Q29uc3RyYWludHMoSlNDZWxsKiwg
U2xvdFZpc2l0b3ImKTsgIFwKKyAgICBzdGF0aWMgdm9pZCB2aXNpdE91dHB1dENvbnN0cmFpbnRz
KEpTQ2VsbCosIERlYnVnU2xvdFZpc2l0b3ImKQorCisjZGVmaW5lIERFQ0xBUkVfRVhQT1JUX1ZJ
U0lUX09VVFBVVF9DT05TVFJBSU5UUyBcCisgICAgREVDTEFSRV9WSVNJVF9PVVRQVVRfQ09OU1RS
QUlOVFNfSU1QTDsgXAorICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIHZpc2l0T3V0
cHV0Q29uc3RyYWludHMoSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsgIFwKKyAgICBKU19FWFBPUlRf
UFJJVkFURSBzdGF0aWMgdm9pZCB2aXNpdE91dHB1dENvbnN0cmFpbnRzKEpTQ2VsbCosIERlYnVn
U2xvdFZpc2l0b3ImKQorCisjZGVmaW5lIERFQ0xBUkVfSU5MSU5FX1ZJU0lUX09VVFBVVF9DT05T
VFJBSU5UUyBcCisgICAgREVDTEFSRV9WSVNJVF9PVVRQVVRfQ09OU1RSQUlOVFNfSU1QTDsgXAor
ICAgIGlubGluZSBzdGF0aWMgdm9pZCB2aXNpdE91dHB1dENvbnN0cmFpbnRzKEpTQ2VsbCosIFNs
b3RWaXNpdG9yJik7ICBcCisgICAgaW5saW5lIHN0YXRpYyB2b2lkIHZpc2l0T3V0cHV0Q29uc3Ry
YWludHMoSlNDZWxsKiwgRGVidWdTbG90VmlzaXRvciYpCisKKyNkZWZpbmUgREVDTEFSRV9URU1Q
TEFURV9WSVNJVF9PVVRQVVRfQ09OU1RSQUlOVFMgREVDTEFSRV9WSVNJVF9PVVRQVVRfQ09OU1RS
QUlOVFMKKworCisjZGVmaW5lIERFRklORV9WSVNJVF9PVVRQVVRfQ09OU1RSQUlOVFMoY2xhc3NO
YW1lXykgXAorICAgIHZvaWQgY2xhc3NOYW1lXzo6dmlzaXRPdXRwdXRDb25zdHJhaW50cyhKU0Nl
bGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKSB7IHZpc2l0T3V0cHV0Q29uc3RyYWludHNJ
bXBsKGNlbGwsIHZpc2l0b3IpOyB9IFwKKyAgICB2b2lkIGNsYXNzTmFtZV86OnZpc2l0T3V0cHV0
Q29uc3RyYWludHMoSlNDZWxsKiBjZWxsLCBEZWJ1Z1Nsb3RWaXNpdG9yJiB2aXNpdG9yKSB7IHZp
c2l0T3V0cHV0Q29uc3RyYWludHNJbXBsKGNlbGwsIHZpc2l0b3IpOyB9IFwKKyAgICBERUNMQVJF
X1VOVVNFRF9TTE9UX1ZJU0lUT1JfU1RSVUNUKCkKKworI2RlZmluZSBERUZJTkVfRVhQT1JUX1ZJ
U0lUX09VVFBVVF9DT05TVFJBSU5UUyhjbGFzc05hbWVfKSBcCisgICAgSlNfRVhQT1JUX1BSSVZB
VEUgdm9pZCBjbGFzc05hbWVfOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzKEpTQ2VsbCogY2VsbCwg
U2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsgdmlzaXRPdXRwdXRDb25zdHJhaW50c0ltcGwoY2VsbCwg
dmlzaXRvcik7IH0gXAorICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgY2xhc3NOYW1lXzo6dmlz
aXRPdXRwdXRDb25zdHJhaW50cyhKU0NlbGwqIGNlbGwsIERlYnVnU2xvdFZpc2l0b3ImIHZpc2l0
b3IpIHsgdmlzaXRPdXRwdXRDb25zdHJhaW50c0ltcGwoY2VsbCwgdmlzaXRvcik7IH0gXAorICAg
IERFQ0xBUkVfVU5VU0VEX1NMT1RfVklTSVRPUl9TVFJVQ1QoKQorCisjZGVmaW5lIERFRklORV9J
TkxJTkVfVklTSVRfT1VUUFVUX0NPTlNUUkFJTlRTKGNsYXNzTmFtZV8pIFwKKyAgICBpbmxpbmUg
dm9pZCBjbGFzc05hbWVfOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzKEpTQ2VsbCogY2VsbCwgU2xv
dFZpc2l0b3ImIHZpc2l0b3IpIHsgdmlzaXRPdXRwdXRDb25zdHJhaW50c0ltcGwoY2VsbCwgdmlz
aXRvcik7IH0gXAorICAgIGlubGluZSB2b2lkIGNsYXNzTmFtZV86OnZpc2l0T3V0cHV0Q29uc3Ry
YWludHMoSlNDZWxsKiBjZWxsLCBEZWJ1Z1Nsb3RWaXNpdG9yJiB2aXNpdG9yKSB7IHZpc2l0T3V0
cHV0Q29uc3RyYWludHNJbXBsKGNlbGwsIHZpc2l0b3IpOyB9IFwKKyAgICBERUNMQVJFX1VOVVNF
RF9TTE9UX1ZJU0lUT1JfU1RSVUNUKCkKKworI2RlZmluZSBERUZJTkVfVEVNUExBVEVfVklTSVRf
T1VUUFVUX0NPTlNUUkFJTlRTKHRlbXBsYXRlQ2xhdXNlXywgY2xhc3NOYW1lXykgXAorICAgIHRl
bXBsYXRlQ2xhdXNlXyB2b2lkIGNsYXNzTmFtZV86OnZpc2l0T3V0cHV0Q29uc3RyYWludHMoSlND
ZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikgeyB2aXNpdE91dHB1dENvbnN0cmFpbnRz
SW1wbChjZWxsLCB2aXNpdG9yKTsgfSBcCisgICAgdGVtcGxhdGVDbGF1c2VfIHZvaWQgY2xhc3NO
YW1lXzo6dmlzaXRPdXRwdXRDb25zdHJhaW50cyhKU0NlbGwqIGNlbGwsIERlYnVnU2xvdFZpc2l0
b3ImIHZpc2l0b3IpIHsgdmlzaXRPdXRwdXRDb25zdHJhaW50c0ltcGwoY2VsbCwgdmlzaXRvcik7
IH0gXAorICAgIERFQ0xBUkVfVU5VU0VEX1NMT1RfVklTSVRPUl9TVFJVQ1QoKQorCisKK3VzaW5n
IFZpc2l0T3V0cHV0Q29udHJhaW50c1dpdGhTbG90VmlzaXRvck1ldGhvZFJlZiA9IHZvaWQgKCYp
KEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisKK30gLy8gbmFtZXNwYWNlIEpTQworCit1c2luZyBK
U0M6OkpTQ2VsbDsKK3VzaW5nIEpTQzo6U2xvdFZpc2l0b3I7Cit1c2luZyBKU0M6OkRlYnVnU2xv
dFZpc2l0b3I7Cit1c2luZyBKU0M6OlZpc2l0T3V0cHV0Q29udHJhaW50c1dpdGhTbG90VmlzaXRv
ck1ldGhvZFJlZjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TaGFk
b3dDaGlja2VuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJw
cmV0ZXIvU2hhZG93Q2hpY2tlbi5jcHAJKHJldmlzaW9uIDI2ODA4NikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnRlcnByZXRlci9TaGFkb3dDaGlja2VuLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDQwLDcgKzQ0MCw4IEBAIHZvaWQgU2hhZG93Q2hpY2tlbjo6dXBkYXRlKFZNJiB2bSwgQ2Fs
bEYKICAgICAgICAgZGF0YUxvZygiICAgIEFmdGVyIGNsZWFuLXVwOiAiLCAqdGhpcywgIlxuIik7
CiB9CiAKLXZvaWQgU2hhZG93Q2hpY2tlbjo6dmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYgdmlz
aXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFNoYWRvd0NoaWNrZW46OnZp
c2l0Q2hpbGRyZW5JbXBsKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgZm9yICh1bnNpZ25lZCBp
ID0gbV9sb2dDdXJzb3IgLSBtX2xvZzsgaS0tOykgewogICAgICAgICBKU09iamVjdCogY2FsbGVl
ID0gbV9sb2dbaV0uY2FsbGVlOwpAQCAtNDY1LDYgKzQ2Niw4IEBAIHZvaWQgU2hhZG93Q2hpY2tl
bjo6dmlzaXRDaGlsZHJlbihTbG90VmkKICAgICB9CiB9CiAKK0RFRklORV9JTlNUQU5DRV9WSVNJ
VF9DSElMRFJFTihTaGFkb3dDaGlja2VuKTsKKwogdm9pZCBTaGFkb3dDaGlja2VuOjpyZXNldCgp
CiB7CiAgICAgbV9sb2dDdXJzb3IgPSBtX2xvZzsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnRlcnByZXRlci9TaGFkb3dDaGlja2VuLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ludGVycHJldGVyL1NoYWRvd0NoaWNrZW4uaAkocmV2aXNpb24gMjY4MDg2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1NoYWRvd0NoaWNrZW4uaAkod29y
a2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogCiAjaW5jbHVkZSAiQ2FsbEZyYW1lLmgiCiAj
aW5jbHVkZSAiSlNDSlNWYWx1ZS5oIgorI2luY2x1ZGUgIlNsb3RWaXNpdG9yTWFjcm9zLmgiCiAj
aW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4K
ICNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KQEAgLTE5Niw3ICsxOTcsNyBAQCBwdWJsaWM6
CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KICAgICB2b2lkIGl0ZXJhdGUoVk0mLCBD
YWxsRnJhbWUqLCBjb25zdCBGdW5jdG9yJik7CiAgICAgCi0gICAgdm9pZCB2aXNpdENoaWxkcmVu
KFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9JTlNUQU5DRV9WSVNJVF9DSElMRFJFTjsKICAg
ICB2b2lkIHJlc2V0KCk7CiAgICAgCiAgICAgLy8gSklUIHN1cHBvcnQuCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9BYnN0cmFjdE1vZHVsZVJlY29yZC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQWJzdHJhY3RNb2R1bGVSZWNvcmQu
Y3BwCShyZXZpc2lvbiAyNjgwODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9B
YnN0cmFjdE1vZHVsZVJlY29yZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYwLDcgKzYwLDggQEAg
dm9pZCBBYnN0cmFjdE1vZHVsZVJlY29yZDo6ZmluaXNoQ3JlYXRpbwogICAgIHB1dERpcmVjdCh2
bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImRlcGVuZGVuY2llc01hcCJfcyksIG1fZGVw
ZW5kZW5jaWVzTWFwLmdldCgpKTsKIH0KIAotdm9pZCBBYnN0cmFjdE1vZHVsZVJlY29yZDo6dmlz
aXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8
dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgQWJzdHJhY3RNb2R1bGVSZWNvcmQ6OnZpc2l0Q2hpbGRy
ZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBBYnN0cmFjdE1v
ZHVsZVJlY29yZCogdGhpc09iamVjdCA9IGpzQ2FzdDxBYnN0cmFjdE1vZHVsZVJlY29yZCo+KGNl
bGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsK
QEAgLTcwLDYgKzcxLDggQEAgdm9pZCBBYnN0cmFjdE1vZHVsZVJlY29yZDo6dmlzaXRDaGlsZHJl
bgogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fZGVwZW5kZW5jaWVzTWFwKTsKIH0K
IAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEFic3RyYWN0TW9kdWxlUmVjb3JkKTsKKwogdm9pZCBB
YnN0cmFjdE1vZHVsZVJlY29yZDo6YXBwZW5kUmVxdWVzdGVkTW9kdWxlKGNvbnN0IElkZW50aWZp
ZXImIG1vZHVsZU5hbWUpCiB7CiAgICAgbV9yZXF1ZXN0ZWRNb2R1bGVzLmFkZChtb2R1bGVOYW1l
LmltcGwoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BYnN0cmFjdE1v
ZHVsZVJlY29yZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0Fic3RyYWN0TW9kdWxlUmVjb3JkLmgJKHJldmlzaW9uIDI2ODA4NikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0Fic3RyYWN0TW9kdWxlUmVjb3JkLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEzNiw3ICsxMzYsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgQWJzdHJhY3RNb2R1bGVSZWNvcmQo
Vk0mLCBTdHJ1Y3R1cmUqLCBjb25zdCBJZGVudGlmaWVyJik7CiAgICAgdm9pZCBmaW5pc2hDcmVh
dGlvbihKU0dsb2JhbE9iamVjdCosIFZNJik7CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxk
cmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsK
IAogICAgIHZvaWQgc2V0TW9kdWxlRW52aXJvbm1lbnQoSlNHbG9iYWxPYmplY3QqLCBKU01vZHVs
ZUVudmlyb25tZW50Kik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Ns
YXNzSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Ns
YXNzSW5mby5oCShyZXZpc2lvbiAyNjgwODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9DbGFzc0luZm8uaAkod29ya2luZyBjb3B5KQpAQCAtNDQsOSArNDQsNiBAQCBzdHJ1Y3Qg
TWV0aG9kVGFibGUgewogICAgIHVzaW5nIERlc3Ryb3lGdW5jdGlvblB0ciA9IHZvaWQgKCopKEpT
Q2VsbCopOwogICAgIERlc3Ryb3lGdW5jdGlvblB0ciBNRVRIT0RfVEFCTEVfRU5UUlkoZGVzdHJv
eSk7CiAKLSAgICB1c2luZyBWaXNpdENoaWxkcmVuRnVuY3Rpb25QdHIgPSB2b2lkICgqKShKU0Nl
bGwqLCBTbG90VmlzaXRvciYpOwotICAgIFZpc2l0Q2hpbGRyZW5GdW5jdGlvblB0ciBNRVRIT0Rf
VEFCTEVfRU5UUlkodmlzaXRDaGlsZHJlbik7Ci0KICAgICB1c2luZyBHZXRDYWxsRGF0YUZ1bmN0
aW9uUHRyID0gQ2FsbERhdGEgKCopKEpTQ2VsbCopOwogICAgIEdldENhbGxEYXRhRnVuY3Rpb25Q
dHIgTUVUSE9EX1RBQkxFX0VOVFJZKGdldENhbGxEYXRhKTsKIApAQCAtMTI4LDggKzEyNSwyMiBA
QCBzdHJ1Y3QgTWV0aG9kVGFibGUgewogICAgIHVzaW5nIEVzdGltYXRlZFNpemVGdW5jdGlvblB0
ciA9IHNpemVfdCAoKikoSlNDZWxsKiwgVk0mKTsKICAgICBFc3RpbWF0ZWRTaXplRnVuY3Rpb25Q
dHIgTUVUSE9EX1RBQkxFX0VOVFJZKGVzdGltYXRlZFNpemUpOwogCisgICAgdXNpbmcgVmlzaXRD
aGlsZHJlbkZ1bmN0aW9uUHRyID0gdm9pZCAoKikoSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAg
ICBWaXNpdENoaWxkcmVuRnVuY3Rpb25QdHIgTUVUSE9EX1RBQkxFX0VOVFJZKHZpc2l0Q2hpbGRy
ZW5XaXRoU2xvdFZpc2l0b3IpOworCiAgICAgdXNpbmcgVmlzaXRPdXRwdXRDb25zdHJhaW50c1B0
ciA9IHZvaWQgKCopKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7Ci0gICAgVmlzaXRPdXRwdXRDb25z
dHJhaW50c1B0ciBNRVRIT0RfVEFCTEVfRU5UUlkodmlzaXRPdXRwdXRDb25zdHJhaW50cyk7Cisg
ICAgVmlzaXRPdXRwdXRDb25zdHJhaW50c1B0ciBNRVRIT0RfVEFCTEVfRU5UUlkodmlzaXRPdXRw
dXRDb25zdHJhaW50c1dpdGhTbG90VmlzaXRvcik7CisKKyAgICB1c2luZyBWaXNpdENoaWxkcmVu
V2l0aERlYnVnU2xvdFZpc2l0b3JQdHIgPSB2b2lkICgqKShKU0NlbGwqLCBEZWJ1Z1Nsb3RWaXNp
dG9yJik7CisgICAgVmlzaXRDaGlsZHJlbldpdGhEZWJ1Z1Nsb3RWaXNpdG9yUHRyIE1FVEhPRF9U
QUJMRV9FTlRSWSh2aXNpdENoaWxkcmVuV2l0aERlYnVnU2xvdFZpc2l0b3IpOworCisgICAgdXNp
bmcgVmlzaXRPdXRwdXRDb25zdHJhaW50c1dpdGhEZWJ1Z1Nsb3RWaXNpdG9yUHRyID0gdm9pZCAo
KikoSlNDZWxsKiwgRGVidWdTbG90VmlzaXRvciYpOworICAgIFZpc2l0T3V0cHV0Q29uc3RyYWlu
dHNXaXRoRGVidWdTbG90VmlzaXRvclB0ciBNRVRIT0RfVEFCTEVfRU5UUlkodmlzaXRPdXRwdXRD
b25zdHJhaW50c1dpdGhEZWJ1Z1Nsb3RWaXNpdG9yKTsKKworICAgIEFMV0FZU19JTkxJTkUgdm9p
ZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0
IHsgdmlzaXRDaGlsZHJlbldpdGhTbG90VmlzaXRvcihjZWxsLCB2aXNpdG9yKTsgfQorICAgIEFM
V0FZU19JTkxJTkUgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgRGVidWdTbG90Vmlz
aXRvciYgdmlzaXRvcikgY29uc3QgeyB2aXNpdENoaWxkcmVuV2l0aERlYnVnU2xvdFZpc2l0b3Io
Y2VsbCwgdmlzaXRvcik7IH0KKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgdmlzaXRPdXRwdXRDb25z
dHJhaW50cyhKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBjb25zdCB7IHZpc2l0
T3V0cHV0Q29uc3RyYWludHNXaXRoU2xvdFZpc2l0b3IoY2VsbCwgdmlzaXRvcik7IH0KKyAgICBB
TFdBWVNfSU5MSU5FIHZvaWQgdmlzaXRPdXRwdXRDb25zdHJhaW50cyhKU0NlbGwqIGNlbGwsIERl
YnVnU2xvdFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0IHsgdmlzaXRPdXRwdXRDb25zdHJhaW50c1dp
dGhEZWJ1Z1Nsb3RWaXNpdG9yKGNlbGwsIHZpc2l0b3IpOyB9CiB9OwogCiAjZGVmaW5lIENSRUFU
RV9NRU1CRVJfQ0hFQ0tFUihtZW1iZXIpIFwKQEAgLTE1NSw3ICsxNjYsNiBAQCBzdHJ1Y3QgTWV0
aG9kVGFibGUgewogICAgIEpTQ2FzdGluZ0hlbHBlcnM6OkluaGVyaXRzVHJhaXRzPENsYXNzTmFt
ZT46OnR5cGVSYW5nZSwgXAogICAgIHsgXAogICAgICAgICAmQ2xhc3NOYW1lOjpkZXN0cm95LCBc
Ci0gICAgICAgICZDbGFzc05hbWU6OnZpc2l0Q2hpbGRyZW4sIFwKICAgICAgICAgJkNsYXNzTmFt
ZTo6Z2V0Q2FsbERhdGEsIFwKICAgICAgICAgJkNsYXNzTmFtZTo6Z2V0Q29uc3RydWN0RGF0YSwg
XAogICAgICAgICAmQ2xhc3NOYW1lOjpwdXQsIFwKQEAgLTE4NCw2ICsxOTQsOSBAQCBzdHJ1Y3Qg
TWV0aG9kVGFibGUgewogICAgICAgICAmQ2xhc3NOYW1lOjpkdW1wVG9TdHJlYW0sIFwKICAgICAg
ICAgJkNsYXNzTmFtZTo6YW5hbHl6ZUhlYXAsIFwKICAgICAgICAgJkNsYXNzTmFtZTo6ZXN0aW1h
dGVkU2l6ZSwgXAorICAgICAgICAmQ2xhc3NOYW1lOjp2aXNpdENoaWxkcmVuLCBcCisgICAgICAg
ICZDbGFzc05hbWU6OnZpc2l0T3V0cHV0Q29uc3RyYWludHMsIFwKKyAgICAgICAgJkNsYXNzTmFt
ZTo6dmlzaXRDaGlsZHJlbiwgXAogICAgICAgICAmQ2xhc3NOYW1lOjp2aXNpdE91dHB1dENvbnN0
cmFpbnRzLCBcCiAgICAgfSwgXAogICAgIENsYXNzTmFtZTo6VHlwZWRBcnJheVN0b3JhZ2VUeXBl
LCBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DbG9uZWRBcmd1bWVudHMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Nsb25lZEFy
Z3VtZW50cy5jcHAJKHJldmlzaW9uIDI2ODA4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0Nsb25lZEFyZ3VtZW50cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2Nyw3ICsyNjcs
OCBAQCB2b2lkIENsb25lZEFyZ3VtZW50czo6bWF0ZXJpYWxpemVTcGVjaWFsCiAgICAgICAgIG1h
dGVyaWFsaXplU3BlY2lhbHMoZ2xvYmFsT2JqZWN0KTsKIH0KIAotdm9pZCBDbG9uZWRBcmd1bWVu
dHM6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3Rl
bXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIENsb25lZEFyZ3VtZW50czo6dmlzaXRDaGls
ZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIENsb25lZEFy
Z3VtZW50cyogdGhpc09iamVjdCA9IGpzQ2FzdDxDbG9uZWRBcmd1bWVudHMqPihjZWxsKTsKICAg
ICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC0yNzUs
NSArMjc2LDcgQEAgdm9pZCBDbG9uZWRBcmd1bWVudHM6OnZpc2l0Q2hpbGRyZW4oSlNDZQogICAg
IHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fY2FsbGVlKTsKIH0KIAorREVGSU5FX1ZJU0lU
X0NISUxEUkVOKENsb25lZEFyZ3VtZW50cyk7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DbG9uZWRBcmd1bWVudHMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DbG9uZWRBcmd1bWVudHMuaAko
cmV2aXNpb24gMjY4MDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xvbmVk
QXJndW1lbnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTYyLDcgKzYyLDcgQEAgcHVibGljOgogICAg
IHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0Kiwg
SlNWYWx1ZSBwcm90b3R5cGUpOwogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVNsb3dQdXRT
dHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUgcHJvdG90eXBlKTsKIAotICAg
IHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBE
RUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgREVDTEFSRV9JTkZPOwogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EaXJlY3RBcmd1bWVudHMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5jcHAJKHJl
dmlzaW9uIDI2ODA4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVjdEFy
Z3VtZW50cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkwLDcgKzkwLDggQEAgc2l6ZV90IERpcmVj
dEFyZ3VtZW50czo6ZXN0aW1hdGVkU2l6ZShKUwogICAgIHJldHVybiBCYXNlOjplc3RpbWF0ZWRT
aXplKGNlbGwsIHZtKSArIG1hcHBlZEFyZ3VtZW50c1NpemUgKyBtb2RpZmllZEFyZ3VtZW50c1Np
emU7CiB9CiAKLXZvaWQgRGlyZWN0QXJndW1lbnRzOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogdGhp
c0NlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4K
K3ZvaWQgRGlyZWN0QXJndW1lbnRzOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIHRoaXNDZWxs
LCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIERpcmVjdEFyZ3VtZW50cyogdGhpc09iamVjdCA9
IHN0YXRpY19jYXN0PERpcmVjdEFyZ3VtZW50cyo+KHRoaXNDZWxsKTsKICAgICBBU1NFUlRfR0Nf
T0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC0xMDQsNiArMTA1LDggQEAg
dm9pZCBEaXJlY3RBcmd1bWVudHM6OnZpc2l0Q2hpbGRyZW4oSlNDZQogICAgIEdlbmVyaWNBcmd1
bWVudHM8RGlyZWN0QXJndW1lbnRzPjo6dmlzaXRDaGlsZHJlbih0aGlzQ2VsbCwgdmlzaXRvcik7
CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihEaXJlY3RBcmd1bWVudHMpOworCiBTdHJ1Y3R1
cmUqIERpcmVjdEFyZ3VtZW50czo6Y3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCiB7CiAgICAgcmV0dXJuIFN0cnVj
dHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oRGlyZWN0
QXJndW1lbnRzVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvRGlyZWN0QXJndW1lbnRzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGlyZWN0QXJndW1lbnRzLmgJKHJldmlzaW9uIDI2
ODA4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5o
CSh3b3JraW5nIGNvcHkpCkBAIC02NSw3ICs2NSw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgRGly
ZWN0QXJndW1lbnRzKiBjcmVhdGVCeUNvcHlpbmcoSlNHbG9iYWxPYmplY3QqLCBDYWxsRnJhbWUq
KTsKIAogICAgIHN0YXRpYyBzaXplX3QgZXN0aW1hdGVkU2l6ZShKU0NlbGwqLCBWTSYpOwotICAg
IHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBE
RUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogICAgIAogICAgIHVpbnQzMl90IGludGVybmFsTGVuZ3Ro
KCkgY29uc3QKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FdmFs
RXhlY3V0YWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvRXZhbEV4ZWN1dGFibGUuY3BwCShyZXZpc2lvbiAyNjgwODYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9FdmFsRXhlY3V0YWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5
LDcgKzQ5LDggQEAgYXV0byBFdmFsRXhlY3V0YWJsZTo6ZW5zdXJlVGVtcGxhdGVPYmplYwogICAg
IHJldHVybiBlbnN1cmVUZW1wbGF0ZU9iamVjdE1hcEltcGwobV90ZW1wbGF0ZU9iamVjdE1hcCk7
CiB9CiAKLXZvaWQgRXZhbEV4ZWN1dGFibGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBT
bG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEV2
YWxFeGVjdXRhYmxlOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZp
c2l0b3IpCiB7CiAgICAgRXZhbEV4ZWN1dGFibGUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8RXZhbEV4
ZWN1dGFibGUqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmpl
Y3QsIGluZm8oKSk7CkBAIC02Myw0ICs2NCw2IEBAIHZvaWQgRXZhbEV4ZWN1dGFibGU6OnZpc2l0
Q2hpbGRyZW4oSlNDZWwKICAgICB9CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihFdmFsRXhl
Y3V0YWJsZSk7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvRXZhbEV4ZWN1dGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9FdmFsRXhlY3V0YWJsZS5oCShyZXZpc2lvbiAyNjgwODYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FdmFsRXhlY3V0YWJsZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC03OCw3ICs3OCw3IEBAIHByb3RlY3RlZDoKICAgICB1c2luZyBCYXNlOjpmaW5pc2hD
cmVhdGlvbjsKICAgICBFdmFsRXhlY3V0YWJsZShKU0dsb2JhbE9iamVjdCosIGNvbnN0IFNvdXJj
ZUNvZGUmLCBib29sIGluU3RyaWN0Q29udGV4dCwgRGVyaXZlZENvbnRleHRUeXBlLCBib29sIGlz
QXJyb3dGdW5jdGlvbkNvbnRleHQsIGJvb2wgaXNJbnNpZGVPcmRpbmFyeUZ1bmN0aW9uLCBFdmFs
Q29udGV4dFR5cGUsIE5lZWRzQ2xhc3NGaWVsZEluaXRpYWxpemVyKTsKIAotICAgIHN0YXRpYyB2
b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJ
U0lUX0NISUxEUkVOOwogCiAgICAgdW5zaWduZWQgbV9uZWVkc0NsYXNzRmllbGRJbml0aWFsaXpl
ciA6IDE7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbi5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9u
LmNwcAkocmV2aXNpb24gMjY4MDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
RXhjZXB0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTMsNyArNTMsOCBAQCBTdHJ1Y3R1cmUq
IEV4Y2VwdGlvbjo6Y3JlYXRlU3RydWN0dXJlKFZNCiAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3Jl
YXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oQ2VsbFR5cGUsIFN0cnVj
dHVyZUZsYWdzKSwgaW5mbygpKTsKIH0KIAotdm9pZCBFeGNlcHRpb246OnZpc2l0Q2hpbGRyZW4o
SlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZp
c2l0b3I+Cit2b2lkIEV4Y2VwdGlvbjo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBW
aXNpdG9yJiB2aXNpdG9yKQogewogICAgIEV4Y2VwdGlvbiogdGhpc09iamVjdCA9IGpzQ2FzdDxF
eGNlcHRpb24qPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmpl
Y3QsIGluZm8oKSk7CkBAIC02NCw2ICs2NSw4IEBAIHZvaWQgRXhjZXB0aW9uOjp2aXNpdENoaWxk
cmVuKEpTQ2VsbCogY2UKICAgICAgICAgZnJhbWUudmlzaXRDaGlsZHJlbih2aXNpdG9yKTsKIH0K
IAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEV4Y2VwdGlvbik7CisKIEV4Y2VwdGlvbjo6RXhjZXB0
aW9uKFZNJiB2bSkKICAgICA6IEJhc2Uodm0sIHZtLmV4Y2VwdGlvblN0cnVjdHVyZS5nZXQoKSkK
IHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbi5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbi5oCShyZXZp
c2lvbiAyNjgwODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGNlcHRpb24u
aAkod29ya2luZyBjb3B5KQpAQCAtNTEsNyArNTEsNyBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMg
U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUg
cHJvdG90eXBlKTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xv
dFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgREVDTEFSRV9F
WFBPUlRfSU5GTzsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rp
b25FeGVjdXRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9GdW5jdGlvbkV4ZWN1dGFibGUuY3BwCShyZXZpc2lvbiAyNjgwODYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvbkV4ZWN1dGFibGUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC02Nyw3ICs2Nyw4IEBAIEZ1bmN0aW9uQ29kZUJsb2NrKiBGdW5jdGlvbkV4ZWN1dGFi
bGU6OmIKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RnVuY3Rpb25Db2RlQmxvY2sqPihlZGdlLT5j
b2RlQmxvY2soKS0+YmFzZWxpbmVBbHRlcm5hdGl2ZSgpKTsKIH0KIAotdm9pZCBGdW5jdGlvbkV4
ZWN1dGFibGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRv
cikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEZ1bmN0aW9uRXhlY3V0YWJsZTo6
dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAg
IEZ1bmN0aW9uRXhlY3V0YWJsZSogdGhpc09iamVjdCA9IGpzQ2FzdDxGdW5jdGlvbkV4ZWN1dGFi
bGUqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGlu
Zm8oKSk7CkBAIC04Niw2ICs4Nyw4IEBAIHZvaWQgRnVuY3Rpb25FeGVjdXRhYmxlOjp2aXNpdENo
aWxkcmVuKEoKICAgICB9CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihGdW5jdGlvbkV4ZWN1
dGFibGUpOworCiBGdW5jdGlvbkV4ZWN1dGFibGUqIEZ1bmN0aW9uRXhlY3V0YWJsZTo6ZnJvbUds
b2JhbENvZGUoCiAgICAgY29uc3QgSWRlbnRpZmllciYgbmFtZSwgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCAKICAgICBKU09iamVjdComIGV4
Y2VwdGlvbiwgaW50IG92ZXJyaWRlTGluZU51bWJlciwgT3B0aW9uYWw8aW50PiBmdW5jdGlvbkNv
bnN0cnVjdG9yUGFyYW1ldGVyc0VuZFBvc2l0aW9uKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvRnVuY3Rpb25FeGVjdXRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25FeGVjdXRhYmxlLmgJKHJldmlzaW9uIDI2ODA4
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xNjYsNyArMTY2LDcgQEAgcHVibGljOgogICAgIEpTUGFyc2Vy
U2NyaXB0TW9kZSBzY3JpcHRNb2RlKCkgY29uc3QgeyByZXR1cm4gbV91bmxpbmtlZEV4ZWN1dGFi
bGUtPnNjcmlwdE1vZGUoKTsgfQogICAgIFNvdXJjZUNvZGUgY2xhc3NTb3VyY2UoKSBjb25zdCB7
IHJldHVybiBtX3VubGlua2VkRXhlY3V0YWJsZS0+Y2xhc3NTb3VyY2UoKTsgfQogCi0gICAgc3Rh
dGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xB
UkVfVklTSVRfQ0hJTERSRU47CiAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJl
KFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90bykKICAg
ICB7CiAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBw
cm90bywgVHlwZUluZm8oRnVuY3Rpb25FeGVjdXRhYmxlVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBp
bmZvKCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25SYXJl
RGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVu
Y3Rpb25SYXJlRGF0YS5jcHAJKHJldmlzaW9uIDI2ODA4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0Z1bmN0aW9uUmFyZURhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MSw3
ICs1MSw4IEBAIFN0cnVjdHVyZSogRnVuY3Rpb25SYXJlRGF0YTo6Y3JlYXRlU3RydWMKICAgICBy
ZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBl
SW5mbyhDZWxsVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwogfQogCi12b2lkIEZ1bmN0
aW9uUmFyZURhdGE6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlz
aXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEZ1bmN0aW9uUmFyZURhdGE6
OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAg
ICBGdW5jdGlvblJhcmVEYXRhKiByYXJlRGF0YSA9IGpzQ2FzdDxGdW5jdGlvblJhcmVEYXRhKj4o
Y2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjZWxsLCBpbmZvKCkpOwpAQCAt
NjMsNiArNjQsOCBAQCB2b2lkIEZ1bmN0aW9uUmFyZURhdGE6OnZpc2l0Q2hpbGRyZW4oSlNDCiAg
ICAgdmlzaXRvci5hcHBlbmQocmFyZURhdGEtPm1fZXhlY3V0YWJsZSk7CiB9CiAKK0RFRklORV9W
SVNJVF9DSElMRFJFTihGdW5jdGlvblJhcmVEYXRhKTsKKwogRnVuY3Rpb25SYXJlRGF0YTo6RnVu
Y3Rpb25SYXJlRGF0YShWTSYgdm0sIEV4ZWN1dGFibGVCYXNlKiBleGVjdXRhYmxlKQogICAgIDog
QmFzZSh2bSwgdm0uZnVuY3Rpb25SYXJlRGF0YVN0cnVjdHVyZS5nZXQoKSkKICAgICAsIG1fb2Jq
ZWN0QWxsb2NhdGlvblByb2ZpbGUoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvRnVuY3Rpb25SYXJlRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0Z1bmN0aW9uUmFyZURhdGEuaAkocmV2aXNpb24gMjY4MDg2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25SYXJlRGF0YS5oCSh3b3JraW5nIGNvcHkp
CkBAIC02NSw3ICs2NSw3IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0
ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBwcm90b3R5cGUpOwogCi0g
ICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAg
IERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBERUNMQVJFX0lORk87CiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNBcmd1bWVudHMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljQXJndW1lbnRzLmgJKHJl
dmlzaW9uIDI2ODA4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNB
cmd1bWVudHMuaAkod29ya2luZyBjb3B5KQpAQCAtNDQsNyArNDQsNyBAQCBwcm90ZWN0ZWQ6CiAg
ICAgewogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xv
dFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1RFTVBMQVRFX1ZJU0lUX0NISUxEUkVOOwogICAgIHN0
YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0Kiwg
UHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9w
ZXJ0eVNsb3RCeUluZGV4KEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCB1bnNpZ25lZCBwcm9w
ZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwogICAgIHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5
TmFtZXMoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51
bWVyYXRpb25Nb2RlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVy
aWNBcmd1bWVudHNJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50c0lubGluZXMuaAkocmV2aXNpb24gMjY4MDg2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50c0lubGluZXMuaAko
d29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsOCBAQAogbmFtZXNwYWNlIEpTQyB7CiAKIHRlbXBs
YXRlPHR5cGVuYW1lIFR5cGU+Ci12b2lkIEdlbmVyaWNBcmd1bWVudHM8VHlwZT46OnZpc2l0Q2hp
bGRyZW4oSlNDZWxsKiB0aGlzQ2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0
eXBlbmFtZSBWaXNpdG9yPgordm9pZCBHZW5lcmljQXJndW1lbnRzPFR5cGU+Ojp2aXNpdENoaWxk
cmVuSW1wbChKU0NlbGwqIHRoaXNDZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFR5cGUq
IHRoaXNPYmplY3QgPSBzdGF0aWNfY2FzdDxUeXBlKj4odGhpc0NlbGwpOwogICAgIEFTU0VSVF9H
Q19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTQxLDYgKzQyLDggQEAg
dm9pZCBHZW5lcmljQXJndW1lbnRzPFR5cGU+Ojp2aXNpdENoaWxkcgogICAgICAgICB2aXNpdG9y
Lm1hcmtBdXhpbGlhcnkodGhpc09iamVjdC0+bV9tb2RpZmllZEFyZ3VtZW50c0Rlc2NyaXB0b3Iu
Z2V0VW5zYWZlKCkpOwogfQogCitERUZJTkVfVEVNUExBVEVfVklTSVRfQ0hJTERSRU4odGVtcGxh
dGU8dHlwZW5hbWUgVHlwZT4sIEdlbmVyaWNBcmd1bWVudHM8VHlwZT4pOworCiB0ZW1wbGF0ZTx0
eXBlbmFtZSBUeXBlPgogYm9vbCBHZW5lcmljQXJndW1lbnRzPFR5cGU+OjpnZXRPd25Qcm9wZXJ0
eVNsb3QoSlNPYmplY3QqIG9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUHJv
cGVydHlOYW1lIGlkZW50LCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9HZXR0ZXJTZXR0ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dldHRlclNldHRlci5jcHAJKHJldmlzaW9uIDI2ODA4
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dldHRlclNldHRlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTMzLDcgKzMzLDggQEAgU1RBVElDX0FTU0VSVF9JU19UUklWSUFMTFlf
REVTVFJVQ1RJQkxFKAogCiBjb25zdCBDbGFzc0luZm8gR2V0dGVyU2V0dGVyOjpzX2luZm8gPSB7
ICJHZXR0ZXJTZXR0ZXIiLCBudWxscHRyLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9E
X1RBQkxFKEdldHRlclNldHRlcikgfTsKIAotdm9pZCBHZXR0ZXJTZXR0ZXI6OnZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1l
IFZpc2l0b3I+Cit2b2lkIEdldHRlclNldHRlcjo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBj
ZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEdldHRlclNldHRlciogdGhpc09iamVjdCA9
IGpzQ2FzdDxHZXR0ZXJTZXR0ZXIqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVS
SVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC00Myw2ICs0NCw4IEBAIHZvaWQgR2V0dGVyU2V0
dGVyOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCoKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0
LT5tX3NldHRlcik7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihHZXR0ZXJTZXR0ZXIpOwor
CiBKU1ZhbHVlIGNhbGxHZXR0ZXIoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1
ZSBiYXNlLCBKU1ZhbHVlIGdldHRlclNldHRlcikKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmpl
Y3QtPnZtKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZXR0ZXJTZXR0
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZXR0ZXJT
ZXR0ZXIuaAkocmV2aXNpb24gMjY4MDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvR2V0dGVyU2V0dGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTgyLDcgKzgyLDcgQEAgcHVibGlj
OgogICAgICAgICByZXR1cm4gY3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIGdldHRlck9iamVjdCwg
c2V0dGVyT2JqZWN0KTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpT
Q2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAg
IEpTT2JqZWN0KiBnZXR0ZXIoKSBjb25zdCB7IHJldHVybiBtX2dldHRlci5nZXQoKTsgfQogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9IYXNoTWFwSW1wbC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSGFzaE1hcEltcGwuY3BwCShy
ZXZpc2lvbiAyNjgwODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9IYXNoTWFw
SW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDkgQEAKIAogbmFtZXNwYWNlIEpT
QyB7CiAKK0RFRklORV9URU1QTEFURV9WSVNJVF9DSElMRFJFTih0ZW1wbGF0ZTw+LCBIYXNoTWFw
QnVja2V0PEhhc2hNYXBCdWNrZXREYXRhS2V5Pik7CitERUZJTkVfVEVNUExBVEVfVklTSVRfQ0hJ
TERSRU4odGVtcGxhdGU8PiwgSGFzaE1hcEJ1Y2tldDxIYXNoTWFwQnVja2V0RGF0YUtleVZhbHVl
Pik7CisKIHRlbXBsYXRlPD4KIGNvbnN0IENsYXNzSW5mbyBIYXNoTWFwQnVja2V0PEhhc2hNYXBC
dWNrZXREYXRhS2V5Pjo6c19pbmZvID0KICAgICB7ICJIYXNoTWFwQnVja2V0IiwgbnVsbHB0ciwg
bnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShIYXNoTWFwQnVja2V0PEhhc2hN
YXBCdWNrZXREYXRhS2V5PikgfTsKQEAgLTM4LDggKzQxLDkgQEAgdGVtcGxhdGU8PgogY29uc3Qg
Q2xhc3NJbmZvIEhhc2hNYXBCdWNrZXQ8SGFzaE1hcEJ1Y2tldERhdGFLZXlWYWx1ZT46OnNfaW5m
byA9CiAgICAgeyAiSGFzaE1hcEJ1Y2tldCIsIG51bGxwdHIsIG51bGxwdHIsIG51bGxwdHIsIENS
RUFURV9NRVRIT0RfVEFCTEUoSGFzaE1hcEJ1Y2tldDxIYXNoTWFwQnVja2V0RGF0YUtleVZhbHVl
PikgfTsKIAotdGVtcGxhdGUgPHR5cGVuYW1lIERhdGE+Ci12b2lkIEhhc2hNYXBCdWNrZXQ8RGF0
YT46OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3Rl
bXBsYXRlPHR5cGVuYW1lIERhdGE+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBI
YXNoTWFwQnVja2V0PERhdGE+Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0
b3ImIHZpc2l0b3IpCiB7CiAgICAgSGFzaE1hcEJ1Y2tldCogdGhpc09iamVjdCA9IGpzQ2FzdDxI
YXNoTWFwQnVja2V0Kj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlz
T2JqZWN0LCBpbmZvKCkpOwpAQCAtNTIsOCArNTYsOSBAQCB2b2lkIEhhc2hNYXBCdWNrZXQ8RGF0
YT46OnZpc2l0Q2hpbGRyZW4oCiAgICAgdmlzaXRvci5hcHBlbmRWYWx1ZXMoYml0d2lzZV9jYXN0
PFdyaXRlQmFycmllcjxVbmtub3duPio+KCZ0aGlzT2JqZWN0LT5tX2RhdGEpLCBzaXplb2YoRGF0
YSkgLyBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSk7CiB9CiAKLXRlbXBsYXRlIDx0eXBl
bmFtZSBIYXNoTWFwQnVja2V0Pgotdm9pZCBIYXNoTWFwSW1wbDxIYXNoTWFwQnVja2V0Pjo6dmlz
aXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8
dHlwZW5hbWUgSGFzaE1hcEJ1Y2tldD4KK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lk
IEhhc2hNYXBJbXBsPEhhc2hNYXBCdWNrZXQ+Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNl
bGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSGFzaE1hcEltcGwqIHRoaXNPYmplY3QgPSBq
c0Nhc3Q8SGFzaE1hcEltcGwqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRT
KHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC02Niw2ICs3MSw4IEBAIHZvaWQgSGFzaE1hcEltcGw8
SGFzaE1hcEJ1Y2tldD46OnZpc2l0Q2gKICAgICAgICAgdmlzaXRvci5tYXJrQXV4aWxpYXJ5KGJ1
ZmZlcik7CiB9CiAKK0RFRklORV9URU1QTEFURV9WSVNJVF9DSElMRFJFTih0ZW1wbGF0ZTx0eXBl
bmFtZSBIYXNoTWFwQnVja2V0PiwgSGFzaE1hcEltcGw8SGFzaE1hcEJ1Y2tldD4pOworCiB0ZW1w
bGF0ZSA8dHlwZW5hbWUgSGFzaE1hcEJ1Y2tldD4KIHNpemVfdCBIYXNoTWFwSW1wbDxIYXNoTWFw
QnVja2V0Pjo6ZXN0aW1hdGVkU2l6ZShKU0NlbGwqIGNlbGwsIFZNJiB2bSkKIHsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0hhc2hNYXBJbXBsLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSGFzaE1hcEltcGwuaAkocmV2aXNpb24gMjY4
MDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSGFzaE1hcEltcGwuaAkod29y
a2luZyBjb3B5KQpAQCAtMTQ4LDcgKzE0OCw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1f
ZGF0YS52YWx1ZS5nZXQoKTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVu
KEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9URU1QTEFURV9WSVNJVF9DSElM
RFJFTjsKIAogICAgIEFMV0FZU19JTkxJTkUgSGFzaE1hcEJ1Y2tldCogbmV4dCgpIGNvbnN0IHsg
cmV0dXJuIG1fbmV4dC5nZXQoKTsgfQogICAgIEFMV0FZU19JTkxJTkUgSGFzaE1hcEJ1Y2tldCog
cHJldigpIGNvbnN0IHsgcmV0dXJuIG1fcHJldi5nZXQoKTsgfQpAQCAtMzY0LDcgKzM2NCw3IEBA
IGNsYXNzIEhhc2hNYXBJbXBsIDogcHVibGljIEpTTm9uRmluYWxPYmoKIHB1YmxpYzoKICAgICB1
c2luZyBCdWNrZXRUeXBlID0gSGFzaE1hcEJ1Y2tldFR5cGU7CiAKLSAgICBzdGF0aWMgdm9pZCB2
aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9URU1QTEFU
RV9WSVNJVF9DSElMRFJFTjsKIAogICAgIHN0YXRpYyBzaXplX3QgZXN0aW1hdGVkU2l6ZShKU0Nl
bGwqLCBWTSYpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRlcm5h
bEZ1bmN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9JbnRlcm5hbEZ1bmN0aW9uLmNwcAkocmV2aXNpb24gMjY4MDg2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSW50ZXJuYWxGdW5jdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTY0LDcgKzY0LDggQEAgdm9pZCBJbnRlcm5hbEZ1bmN0aW9uOjpmaW5pc2hDcmVhdGlvbihWTQog
ICAgIH0KIH0KIAotdm9pZCBJbnRlcm5hbEZ1bmN0aW9uOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCog
Y2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgor
dm9pZCBJbnRlcm5hbEZ1bmN0aW9uOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZp
c2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSW50ZXJuYWxGdW5jdGlvbiogdGhpc09iamVjdCA9IGpz
Q2FzdDxJbnRlcm5hbEZ1bmN0aW9uKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhF
UklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNzMsNiArNzQsOCBAQCB2b2lkIEludGVybmFs
RnVuY3Rpb246OnZpc2l0Q2hpbGRyZW4oSlNDCiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVj
dC0+bV9vcmlnaW5hbE5hbWUpOwogfQogCitERUZJTkVfRVhQT1JUX1ZJU0lUX0NISUxEUkVOKElu
dGVybmFsRnVuY3Rpb24pOworCiBjb25zdCBTdHJpbmcmIEludGVybmFsRnVuY3Rpb246Om5hbWUo
KQogewogICAgIGNvbnN0IFN0cmluZyYgbmFtZSA9IG1fb3JpZ2luYWxOYW1lLT50cnlHZXRWYWx1
ZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50ZXJuYWxGdW5jdGlv
bi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGVybmFs
RnVuY3Rpb24uaAkocmV2aXNpb24gMjY4MDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSW50ZXJuYWxGdW5jdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC00Niw3ICs0Niw3IEBA
IHB1YmxpYzoKIAogICAgIERFQ0xBUkVfRVhQT1JUX0lORk87CiAKLSAgICBKU19FWFBPUlRfUFJJ
VkFURSBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7Cisg
ICAgREVDTEFSRV9FWFBPUlRfVklTSVRfQ0hJTERSRU47CiAKICAgICBKU19FWFBPUlRfUFJJVkFU
RSBjb25zdCBTdHJpbmcmIG5hbWUoKTsKICAgICBjb25zdCBTdHJpbmcgZGlzcGxheU5hbWUoVk0m
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxDb2xsYXRvci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bENvbGxhdG9y
LmNwcAkocmV2aXNpb24gMjY4MDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SW50bENvbGxhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjUsNyArNjUsOCBAQCB2b2lkIElu
dGxDb2xsYXRvcjo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtCiAgICAgQVNTRVJUKGluaGVyaXRzKHZt
LCBpbmZvKCkpKTsKIH0KIAotdm9pZCBJbnRsQ29sbGF0b3I6OnZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+
Cit2b2lkIEludGxDb2xsYXRvcjo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNp
dG9yJiB2aXNpdG9yKQogewogICAgIEludGxDb2xsYXRvciogdGhpc09iamVjdCA9IGpzQ2FzdDxJ
bnRsQ29sbGF0b3IqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNP
YmplY3QsIGluZm8oKSk7CkBAIC03NSw2ICs3Niw4IEBAIHZvaWQgSW50bENvbGxhdG9yOjp2aXNp
dENoaWxkcmVuKEpTQ2VsbCoKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2JvdW5k
Q29tcGFyZSk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihJbnRsQ29sbGF0b3IpOworCiBW
ZWN0b3I8U3RyaW5nPiBJbnRsQ29sbGF0b3I6OnNvcnRMb2NhbGVEYXRhKGNvbnN0IFN0cmluZyYg
bG9jYWxlLCBSZWxldmFudEV4dGVuc2lvbktleSBrZXkpCiB7CiAgICAgLy8gOS4xIEludGVybmFs
IHNsb3RzIG9mIFNlcnZpY2UgQ29uc3RydWN0b3JzICYgMTAuMi4zIEludGVybmFsIHNsb3RzIChF
Q01BLTQwMiAyLjApCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsQ29s
bGF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRs
Q29sbGF0b3IuaAkocmV2aXNpb24gMjY4MDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSW50bENvbGxhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTgwLDcgKzgwLDcgQEAgcHVi
bGljOgogcHJpdmF0ZToKICAgICBJbnRsQ29sbGF0b3IoVk0mLCBTdHJ1Y3R1cmUqKTsKICAgICB2
b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihK
U0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAg
ICBib29sIHVwZGF0ZUNhbkRvQVNDSUlVQ0FEVUNFVENvbXBhcmlzb24oKSBjb25zdDsKIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERhdGVUaW1lRm9ybWF0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsRGF0ZVRpbWVG
b3JtYXQuY3BwCShyZXZpc2lvbiAyNjgwODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9JbnRsRGF0ZVRpbWVGb3JtYXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MCw3ICs3MCw4
IEBAIHZvaWQgSW50bERhdGVUaW1lRm9ybWF0OjpmaW5pc2hDcmVhdGlvbigKICAgICBBU1NFUlQo
aW5oZXJpdHModm0sIGluZm8oKSkpOwogfQogCi12b2lkIEludGxEYXRlVGltZUZvcm1hdDo6dmlz
aXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8
dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSW50bERhdGVUaW1lRm9ybWF0Ojp2aXNpdENoaWxkcmVu
SW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSW50bERhdGVUaW1l
Rm9ybWF0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEludGxEYXRlVGltZUZvcm1hdCo+KGNlbGwpOwog
ICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTgw
LDYgKzgxLDggQEAgdm9pZCBJbnRsRGF0ZVRpbWVGb3JtYXQ6OnZpc2l0Q2hpbGRyZW4oSgogICAg
IHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fYm91bmRGb3JtYXQpOwogfQogCitERUZJTkVf
VklTSVRfQ0hJTERSRU4oSW50bERhdGVUaW1lRm9ybWF0KTsKKwogdm9pZCBJbnRsRGF0ZVRpbWVG
b3JtYXQ6OnNldEJvdW5kRm9ybWF0KFZNJiB2bSwgSlNCb3VuZEZ1bmN0aW9uKiBmb3JtYXQpCiB7
CiAgICAgbV9ib3VuZEZvcm1hdC5zZXQodm0sIHRoaXMsIGZvcm1hdCk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsRGF0ZVRpbWVGb3JtYXQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsRGF0ZVRpbWVGb3JtYXQuaAkocmV2
aXNpb24gMjY4MDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERhdGVU
aW1lRm9ybWF0LmgJKHdvcmtpbmcgY29weSkKQEAgLTcyLDcgKzcyLDcgQEAgcHVibGljOgogcHJp
dmF0ZToKICAgICBJbnRsRGF0ZVRpbWVGb3JtYXQoVk0mLCBTdHJ1Y3R1cmUqKTsKICAgICB2b2lk
IGZpbmlzaENyZWF0aW9uKFZNJik7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0Nl
bGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBz
dGF0aWMgVmVjdG9yPFN0cmluZz4gbG9jYWxlRGF0YShjb25zdCBTdHJpbmcmLCBSZWxldmFudEV4
dGVuc2lvbktleSk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxM
b2NhbGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lu
dGxMb2NhbGUuY3BwCShyZXZpc2lvbiAyNjgwODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9JbnRsTG9jYWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTgsNyArNTgsOCBAQCB2
b2lkIEludGxMb2NhbGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKICAgICBBU1NFUlQoaW5oZXJp
dHModm0sIGluZm8oKSkpOwogfQogCi12b2lkIEludGxMb2NhbGU6OnZpc2l0Q2hpbGRyZW4oSlND
ZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0
b3I+Cit2b2lkIEludGxMb2NhbGU6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlz
aXRvciYgdmlzaXRvcikKIHsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEludGxMb2Nh
bGUqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGlu
Zm8oKSk7CkBAIC02Niw2ICs2Nyw4IEBAIHZvaWQgSW50bExvY2FsZTo6dmlzaXRDaGlsZHJlbihK
U0NlbGwqIGMKICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwog
fQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSW50bExvY2FsZSk7CisKIGNsYXNzIExvY2FsZUlE
QnVpbGRlciBmaW5hbCB7CiBwdWJsaWM6CiAgICAgYm9vbCBpbml0aWFsaXplKGNvbnN0IFN0cmlu
ZyYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bExvY2FsZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxMb2NhbGUuaAko
cmV2aXNpb24gMjY4MDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bExv
Y2FsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03MSw3ICs3MSw3IEBAIHB1YmxpYzoKIHByaXZhdGU6
CiAgICAgSW50bExvY2FsZShWTSYsIFN0cnVjdHVyZSopOwogICAgIHZvaWQgZmluaXNoQ3JlYXRp
b24oVk0mKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNp
dG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIFN0cmluZyBrZXl3b3Jk
VmFsdWUoQVNDSUlMaXRlcmFsLCBib29sIGlzQm9vbGVhbiA9IGZhbHNlKSBjb25zdDsKIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE51bWJlckZvcm1hdC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE51bWJlckZvcm1h
dC5jcHAJKHJldmlzaW9uIDI2ODA4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0ludGxOdW1iZXJGb3JtYXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Myw3ICs3Myw4IEBAIHZv
aWQgSW50bE51bWJlckZvcm1hdDo6ZmluaXNoQ3JlYXRpb24oVk0KICAgICBBU1NFUlQoaW5oZXJp
dHModm0sIGluZm8oKSkpOwogfQogCi12b2lkIEludGxOdW1iZXJGb3JtYXQ6OnZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1l
IFZpc2l0b3I+Cit2b2lkIEludGxOdW1iZXJGb3JtYXQ6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2Vs
bCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBJbnRsTnVtYmVyRm9ybWF0KiB0aGlz
T2JqZWN0ID0ganNDYXN0PEludGxOdW1iZXJGb3JtYXQqPihjZWxsKTsKICAgICBBU1NFUlRfR0Nf
T0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC04Myw2ICs4NCw4IEBAIHZv
aWQgSW50bE51bWJlckZvcm1hdDo6dmlzaXRDaGlsZHJlbihKU0MKICAgICB2aXNpdG9yLmFwcGVu
ZCh0aGlzT2JqZWN0LT5tX2JvdW5kRm9ybWF0KTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVO
KEludGxOdW1iZXJGb3JtYXQpOworCiBWZWN0b3I8U3RyaW5nPiBJbnRsTnVtYmVyRm9ybWF0Ojps
b2NhbGVEYXRhKGNvbnN0IFN0cmluZyYgbG9jYWxlLCBSZWxldmFudEV4dGVuc2lvbktleSBrZXkp
CiB7CiAgICAgLy8gOS4xIEludGVybmFsIHNsb3RzIG9mIFNlcnZpY2UgQ29uc3RydWN0b3JzICYg
MTEuMi4zIEludGVybmFsIHNsb3RzIChFQ01BLTQwMiAyLjApCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9JbnRsTnVtYmVyRm9ybWF0LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE51bWJlckZvcm1hdC5oCShyZXZpc2lvbiAyNjgw
ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTnVtYmVyRm9ybWF0LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTk2LDcgKzk2LDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBJ
bnRsTnVtYmVyRm9ybWF0KFZNJiwgU3RydWN0dXJlKik7CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlv
bihWTSYpOwotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0
b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgc3RhdGljIFZlY3RvcjxT
dHJpbmc+IGxvY2FsZURhdGEoY29uc3QgU3RyaW5nJiwgUmVsZXZhbnRFeHRlbnNpb25LZXkpOwog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsUGx1cmFsUnVsZXMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxQbHVyYWxS
dWxlcy5jcHAJKHJldmlzaW9uIDI2ODA4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0ludGxQbHVyYWxSdWxlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYxLDcgKzYxLDggQEAg
dm9pZCBJbnRsUGx1cmFsUnVsZXM6OmZpbmlzaENyZWF0aW9uKFZNJgogICAgIEFTU0VSVChpbmhl
cml0cyh2bSwgaW5mbygpKSk7CiB9CiAKLXZvaWQgSW50bFBsdXJhbFJ1bGVzOjp2aXNpdENoaWxk
cmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBWaXNpdG9yPgordm9pZCBJbnRsUGx1cmFsUnVsZXM6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2Vs
bCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBJbnRsUGx1cmFsUnVsZXMqIHRoaXNP
YmplY3QgPSBqc0Nhc3Q8SW50bFBsdXJhbFJ1bGVzKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09C
SkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNjksNiArNzAsOCBAQCB2b2lk
IEludGxQbHVyYWxSdWxlczo6dmlzaXRDaGlsZHJlbihKU0NlCiAgICAgQmFzZTo6dmlzaXRDaGls
ZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKElu
dGxQbHVyYWxSdWxlcyk7CisKIFZlY3RvcjxTdHJpbmc+IEludGxQbHVyYWxSdWxlczo6bG9jYWxl
RGF0YShjb25zdCBTdHJpbmcmLCBSZWxldmFudEV4dGVuc2lvbktleSkKIHsKICAgICByZXR1cm4g
eyB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFBsdXJhbFJ1bGVz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFBsdXJh
bFJ1bGVzLmgJKHJldmlzaW9uIDI2ODA4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0ludGxQbHVyYWxSdWxlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC02Niw3ICs2Niw3IEBAIHB1
YmxpYzoKIHByaXZhdGU6CiAgICAgSW50bFBsdXJhbFJ1bGVzKFZNJiwgU3RydWN0dXJlKik7CiAg
ICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOwotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwog
CiAgICAgc3RhdGljIFZlY3RvcjxTdHJpbmc+IGxvY2FsZURhdGEoY29uc3QgU3RyaW5nJiwgUmVs
ZXZhbnRFeHRlbnNpb25LZXkpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9JbnRsUmVsYXRpdmVUaW1lRm9ybWF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9JbnRsUmVsYXRpdmVUaW1lRm9ybWF0LmNwcAkocmV2aXNpb24gMjY4
MDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFJlbGF0aXZlVGltZUZv
cm1hdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYyLDcgKzYyLDggQEAgdm9pZCBJbnRsUmVsYXRp
dmVUaW1lRm9ybWF0OjpmaW5pc2hDcmVhdAogICAgIEFTU0VSVChpbmhlcml0cyh2bSwgaW5mbygp
KSk7CiB9CiAKLXZvaWQgSW50bFJlbGF0aXZlVGltZUZvcm1hdDo6dmlzaXRDaGlsZHJlbihKU0Nl
bGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRv
cj4KK3ZvaWQgSW50bFJlbGF0aXZlVGltZUZvcm1hdDo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxs
KiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nh
c3Q8SW50bFJlbGF0aXZlVGltZUZvcm1hdCo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1Rf
SU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTcwLDYgKzcxLDggQEAgdm9pZCBJbnRs
UmVsYXRpdmVUaW1lRm9ybWF0Ojp2aXNpdENoaWxkcgogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4o
dGhpc09iamVjdCwgdmlzaXRvcik7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihJbnRsUmVs
YXRpdmVUaW1lRm9ybWF0KTsKKwogVmVjdG9yPFN0cmluZz4gSW50bFJlbGF0aXZlVGltZUZvcm1h
dDo6bG9jYWxlRGF0YShjb25zdCBTdHJpbmcmIGxvY2FsZSwgUmVsZXZhbnRFeHRlbnNpb25LZXkg
a2V5KQogewogICAgIEFTU0VSVF9VTlVTRUQoa2V5LCBrZXkgPT0gUmVsZXZhbnRFeHRlbnNpb25L
ZXk6Ok51KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxSZWxhdGl2
ZVRpbWVGb3JtYXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9JbnRsUmVsYXRpdmVUaW1lRm9ybWF0LmgJKHJldmlzaW9uIDI2ODA4NikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxSZWxhdGl2ZVRpbWVGb3JtYXQuaAkod29ya2luZyBj
b3B5KQpAQCAtNjQsNyArNjQsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIEludGxSZWxhdGl2
ZVRpbWVGb3JtYXQoVk0mLCBTdHJ1Y3R1cmUqKTsKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZN
Jik7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYp
OworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBzdGF0aWMgVmVjdG9yPFN0cmlu
Zz4gbG9jYWxlRGF0YShjb25zdCBTdHJpbmcmLCBSZWxldmFudEV4dGVuc2lvbktleSk7CiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxTZWdtZW50SXRlcmF0b3IuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxTZWdtZW50
SXRlcmF0b3IuY3BwCShyZXZpc2lvbiAyNjgwODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9JbnRsU2VnbWVudEl0ZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjQsMTMg
KzY0LDE2IEBAIHZvaWQgSW50bFNlZ21lbnRJdGVyYXRvcjo6ZmluaXNoQ3JlYXRpb24KICAgICBt
X3N0cmluZy5zZXQodm0sIHRoaXMsIHN0cmluZyk7CiB9CiAKLXZvaWQgSW50bFNlZ21lbnRJdGVy
YXRvcjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQor
dGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSW50bFNlZ21lbnRJdGVyYXRvcjo6dmlz
aXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGF1
dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SW50bFNlZ21lbnRJdGVyYXRvcio+KGNlbGwpOwogICAg
IEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CiAgICAgdmlzaXRvci5h
cHBlbmQodGhpc09iamVjdC0+bV9zdHJpbmcpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4o
SW50bFNlZ21lbnRJdGVyYXRvcik7CisKIEpTT2JqZWN0KiBJbnRsU2VnbWVudEl0ZXJhdG9yOjpu
ZXh0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFs
T2JqZWN0LT52bSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFNl
Z21lbnRJdGVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0ludGxTZWdtZW50SXRlcmF0b3IuaAkocmV2aXNpb24gMjY4MDg2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFNlZ21lbnRJdGVyYXRvci5oCSh3b3JraW5nIGNvcHkp
CkBAIC01Myw3ICs1Myw3IEBAIHB1YmxpYzoKIAogICAgIEpTT2JqZWN0KiBuZXh0KEpTR2xvYmFs
T2JqZWN0Kik7CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RW
aXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogcHJpdmF0ZToKICAgICBJ
bnRsU2VnbWVudEl0ZXJhdG9yKFZNJiwgU3RydWN0dXJlKiwgc3RkOjp1bmlxdWVfcHRyPFVCcmVh
a0l0ZXJhdG9yLCBVQnJlYWtJdGVyYXRvckRlbGV0ZXI+JiYsIEJveDxWZWN0b3I8VUNoYXI+PiYm
LCBJbnRsU2VnbWVudGVyOjpHcmFudWxhcml0eSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9JbnRsU2VnbWVudHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0ludGxTZWdtZW50cy5jcHAJKHJldmlzaW9uIDI2ODA4NikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxTZWdtZW50cy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEwOSwxMSArMTA5LDE0IEBAIEpTT2JqZWN0KiBJbnRsU2VnbWVudHM6OmNyZWF0ZVNl
Z21lbnRJdGUKICAgICByZXR1cm4gSW50bFNlZ21lbnRJdGVyYXRvcjo6Y3JlYXRlKHZtLCBnbG9i
YWxPYmplY3QtPnNlZ21lbnRJdGVyYXRvclN0cnVjdHVyZSgpLCBXVEZNb3ZlKHNlZ21lbnRlciks
IG1fYnVmZmVyLCBtX3N0cmluZy5nZXQoKSwgbV9ncmFudWxhcml0eSk7CiB9CiAKLXZvaWQgSW50
bFNlZ21lbnRzOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0
b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBJbnRsU2VnbWVudHM6OnZpc2l0
Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBhdXRv
KiB0aGlzT2JqZWN0ID0ganNDYXN0PEludGxTZWdtZW50cyo+KGNlbGwpOwogICAgIEJhc2U6OnZp
c2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CiAgICAgdmlzaXRvci5hcHBlbmQodGhp
c09iamVjdC0+bV9zdHJpbmcpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSW50bFNlZ21l
bnRzKTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9JbnRsU2VnbWVudHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9JbnRsU2VnbWVudHMuaAkocmV2aXNpb24gMjY4MDg2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFNlZ21lbnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTU0
LDcgKzU0LDcgQEAgcHVibGljOgogICAgIEpTVmFsdWUgY29udGFpbmluZyhKU0dsb2JhbE9iamVj
dCosIEpTVmFsdWUgaW5kZXhWYWx1ZSk7CiAgICAgSlNPYmplY3QqIGNyZWF0ZVNlZ21lbnRJdGVy
YXRvcihKU0dsb2JhbE9iamVjdCopOwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihK
U0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKIHBy
aXZhdGU6CiAgICAgSW50bFNlZ21lbnRzKFZNJiwgU3RydWN0dXJlKiwgc3RkOjp1bmlxdWVfcHRy
PFVCcmVha0l0ZXJhdG9yLCBVQnJlYWtJdGVyYXRvckRlbGV0ZXI+JiYsIEJveDxWZWN0b3I8VUNo
YXI+PiYmLCBJbnRsU2VnbWVudGVyOjpHcmFudWxhcml0eSk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuY3BwCShyZXZpc2lv
biAyNjgwODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVy
Vmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1NSw3ICsxNTUsOCBAQCB2b2lkIEpTQXJyYXlC
dWZmZXJWaWV3OjpmaW5pc2hDcmVhdGlvbihWCiAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKIH0KIAotdm9pZCBKU0FycmF5QnVmZmVyVmlldzo6dmlzaXRDaGlsZHJlbihKU0NlbGwq
IGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4K
K3ZvaWQgSlNBcnJheUJ1ZmZlclZpZXc6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwg
VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU0FycmF5QnVmZmVyVmlldyogdGhpc09iamVjdCA9
IGpzQ2FzdDxKU0FycmF5QnVmZmVyVmlldyo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1Rf
SU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTE2OSw2ICsxNzAsOCBAQCB2b2lkIEpT
QXJyYXlCdWZmZXJWaWV3Ojp2aXNpdENoaWxkcmVuKEpTCiAgICAgfQogfQogCitERUZJTkVfVklT
SVRfQ0hJTERSRU4oSlNBcnJheUJ1ZmZlclZpZXcpOworCiBib29sIEpTQXJyYXlCdWZmZXJWaWV3
OjpwdXQoCiAgICAgSlNDZWxsKiBjZWxsLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQ
cm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLAogICAgIFB1dFByb3BlcnR5
U2xvdCYgc2xvdCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlC
dWZmZXJWaWV3LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNBcnJheUJ1ZmZlclZpZXcuaAkocmV2aXNpb24gMjY4MDg2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAtMTcy
LDcgKzE3Miw3IEBAIHByb3RlY3RlZDoKICAgICAKICAgICBzdGF0aWMgYm9vbCBwdXQoSlNDZWxs
KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xv
dCYpOwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRv
ciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAgICAgCiBwdWJsaWM6CiAgICAgVHlw
ZWRBcnJheU1vZGUgbW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fbW9kZTsgfQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUl0ZXJhdG9yLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5SXRlcmF0b3IuY3BwCShyZXZp
c2lvbiAyNjgwODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5SXRl
cmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OCwxMSArNjgsMTQgQEAgdm9pZCBKU0FycmF5
SXRlcmF0b3I6OmZpbmlzaENyZWF0aW9uKFZNJgogICAgICAgICBCYXNlOjppbnRlcm5hbEZpZWxk
KGluZGV4KS5zZXQodm0sIHRoaXMsIHZhbHVlc1tpbmRleF0pOwogfQogCi12b2lkIEpTQXJyYXlJ
dGVyYXRvcjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9y
KQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNBcnJheUl0ZXJhdG9yOjp2aXNp
dENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0
byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0FycmF5SXRlcmF0b3IqPihjZWxsKTsKICAgICBBU1NF
UlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAgICAgQmFzZTo6dmlz
aXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxE
UkVOKEpTQXJyYXlJdGVyYXRvcik7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUl0ZXJhdG9yLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUl0ZXJhdG9yLmgJKHJldmlzaW9u
IDI2ODA4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlJdGVyYXRv
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC03OCw3ICs3OCw3IEBAIHB1YmxpYzoKIAogICAgIERFQ0xB
UkVfSU5GTzsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZp
c2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiBwcml2YXRlOgogICAgIEpT
QXJyYXlJdGVyYXRvcihWTSYsIFN0cnVjdHVyZSopOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNBc3luY0dlbmVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBc3luY0dlbmVyYXRvci5jcHAJKHJldmlzaW9uIDI2ODA4
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXN5bmNHZW5lcmF0b3IuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC01OSwxMSArNTksMTQgQEAgdm9pZCBKU0FzeW5jR2VuZXJhdG9y
OjpmaW5pc2hDcmVhdGlvbihWTQogICAgICAgICBpbnRlcm5hbEZpZWxkKGluZGV4KS5zZXQodm0s
IHRoaXMsIHZhbHVlc1tpbmRleF0pOwogfQogCi12b2lkIEpTQXN5bmNHZW5lcmF0b3I6OnZpc2l0
Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5
cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTQXN5bmNHZW5lcmF0b3I6OnZpc2l0Q2hpbGRyZW5JbXBs
KEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBhdXRvKiB0aGlzT2JqZWN0
ID0ganNDYXN0PEpTQXN5bmNHZW5lcmF0b3IqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNU
X0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0
aGlzT2JqZWN0LCB2aXNpdG9yKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTQXN5bmNH
ZW5lcmF0b3IpOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTQXN5bmNHZW5lcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0FzeW5jR2VuZXJhdG9yLmgJKHJldmlzaW9uIDI2ODA4NikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXN5bmNHZW5lcmF0b3IuaAkod29y
a2luZyBjb3B5KQpAQCAtOTUsNyArOTUsNyBAQCBwdWJsaWM6CiAKICAgICBERUNMQVJFX0VYUE9S
VF9JTkZPOwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90Vmlz
aXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKIHByaXZhdGU6CiAgICAgSlNB
c3luY0dlbmVyYXRvcihWTSYsIFN0cnVjdHVyZSopOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNCaWdJbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTQmlnSW50LmNwcAkocmV2aXNpb24gMjY4MDg2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCaWdJbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Nyw3
ICs2Nyw4IEBAIEpTQmlnSW50OjpKU0JpZ0ludChWTSYgdm0sIFN0cnVjdHVyZSogc3QKICAgICAs
IG1fZGF0YSh2bSwgdGhpcywgZGF0YSwgbGVuZ3RoKQogeyB9CiAKLXZvaWQgSlNCaWdJbnQ6OnZp
c2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRl
PHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTQmlnSW50Ojp2aXNpdENoaWxkcmVuSW1wbChKU0Nl
bGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpz
Q2FzdDxKU0JpZ0ludCo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhp
c09iamVjdCwgaW5mbygpKTsKQEAgLTc2LDYgKzc3LDggQEAgdm9pZCBKU0JpZ0ludDo6dmlzaXRD
aGlsZHJlbihKU0NlbGwqIGNlbAogICAgICAgICB2aXNpdG9yLm1hcmtBdXhpbGlhcnkoZGF0YSk7
CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU0JpZ0ludCk7CisKIHZvaWQgSlNCaWdJbnQ6
OmluaXRpYWxpemUoSW5pdGlhbGl6YXRpb25UeXBlIGluaXRUeXBlKQogewogICAgIGlmIChpbml0
VHlwZSA9PSBJbml0aWFsaXphdGlvblR5cGU6OldpdGhaZXJvKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNCaWdJbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0JpZ0ludC5oCShyZXZpc2lvbiAyNjgwODYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JpZ0ludC5oCSh3b3JraW5nIGNvcHkpCkBAIC01MCw3
ICs1MCw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVy
ZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBTdHJ1Y3R1cmVJc0ltbW9ydGFsIHwgT3Zl
cnJpZGVzVG9UaGlzOwogICAgIGZyaWVuZCBjbGFzcyBDYWNoZWRCaWdJbnQ7CiAKLSAgICBzdGF0
aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFS
RV9WSVNJVF9DSElMRFJFTjsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJz
cGFjZUFjY2Vzcz4KICAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQm91bmRGdW5jdGlvbi5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCb3VuZEZ1bmN0
aW9uLmNwcAkocmV2aXNpb24gMjY4MDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNCb3VuZEZ1bmN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQ5LDcgKzI0OSw4IEBA
IHZvaWQgSlNCb3VuZEZ1bmN0aW9uOjpmaW5pc2hDcmVhdGlvbihWTSYKICAgICBBU1NFUlQoaW5o
ZXJpdHModm0sIGluZm8oKSkpOwogfQogCi12b2lkIEpTQm91bmRGdW5jdGlvbjo6dmlzaXRDaGls
ZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5h
bWUgVmlzaXRvcj4KK3ZvaWQgSlNCb3VuZEZ1bmN0aW9uOjp2aXNpdENoaWxkcmVuSW1wbChKU0Nl
bGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNCb3VuZEZ1bmN0aW9uKiB0aGlz
T2JqZWN0ID0ganNDYXN0PEpTQm91bmRGdW5jdGlvbio+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19P
QkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTI2MSw0ICsyNjIsNiBAQCB2
b2lkIEpTQm91bmRGdW5jdGlvbjo6dmlzaXRDaGlsZHJlbihKU0NlCiAgICAgdmlzaXRvci5hcHBl
bmQodGhpc09iamVjdC0+bV9uYW1lTWF5QmVOdWxsKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxE
UkVOKEpTQm91bmRGdW5jdGlvbik7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCb3VuZEZ1bmN0aW9uLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCb3VuZEZ1bmN0aW9uLmgJKHJldmlzaW9u
IDI2ODA4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQm91bmRGdW5jdGlv
bi5oCSh3b3JraW5nIGNvcHkpCkBAIC04NCw3ICs4NCw3IEBAIHByaXZhdGU6CiAgICAgSlNCb3Vu
ZEZ1bmN0aW9uKFZNJiwgTmF0aXZlRXhlY3V0YWJsZSosIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0
dXJlKiwgSlNPYmplY3QqIHRhcmdldEZ1bmN0aW9uLCBKU1ZhbHVlIGJvdW5kVGhpcywgSlNJbW11
dGFibGVCdXR0ZXJmbHkqIGJvdW5kQXJncywgSlNTdHJpbmcqIG5hbWVNYXlCZU51bGwsIGRvdWJs
ZSBsZW5ndGgpOwogCiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOwotICAgIHN0YXRpYyB2
b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJ
U0lUX0NISUxEUkVOOwogCiAgICAgV3JpdGVCYXJyaWVyPEpTT2JqZWN0PiBtX3RhcmdldEZ1bmN0
aW9uOwogICAgIFdyaXRlQmFycmllcjxVbmtub3duPiBtX2JvdW5kVGhpczsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2FsbGVlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NhbGxlZS5jcHAJKHJldmlzaW9uIDI2ODA4NikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2FsbGVlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNTAsNyArNTAsOCBAQCB2b2lkIEpTQ2FsbGVlOjpmaW5pc2hDcmVhdGlvbihWTSYg
dm0pCiAgICAgQVNTRVJUKGluaGVyaXRzKHZtLCBpbmZvKCkpKTsKIH0KIAotdm9pZCBKU0NhbGxl
ZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVt
cGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNDYWxsZWU6OnZpc2l0Q2hpbGRyZW5JbXBs
KEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU0NhbGxlZSogdGhpc09i
amVjdCA9IGpzQ2FzdDxKU0NhbGxlZSo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5I
RVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTU5LDQgKzYwLDYgQEAgdm9pZCBKU0NhbGxl
ZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbAogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmpl
Y3QtPm1fc2NvcGUpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNDYWxsZWUpOworCiB9
IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
Q2FsbGVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlND
YWxsZWUuaAkocmV2aXNpb24gMjY4MDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNDYWxsZWUuaAkod29ya2luZyBjb3B5KQpAQCAtMTAwLDcgKzEwMCw3IEBAIHByb3RlY3Rl
ZDoKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7CiAgICAgdXNpbmcgQmFzZTo6ZmluaXNo
Q3JlYXRpb247CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RW
aXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogcHJpdmF0ZToKICAgICBm
cmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNDZWxsLmgJKHJldmlzaW9uIDI2ODA4NikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBAQAog
LyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMSBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUu
b3JnKQogICogIENvcHlyaWdodCAoQykgMjAwMSBQZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQot
ICogIENvcHlyaWdodCAoQykgMjAwMy0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUg
IkpTTG9jay5oIgogI2luY2x1ZGUgIkpTVHlwZUluZm8uaCIKICNpbmNsdWRlICJTbG90VmlzaXRv
ci5oIgorI2luY2x1ZGUgIlNsb3RWaXNpdG9yTWFjcm9zLmgiCiAjaW5jbHVkZSAiU3Vic3BhY2VB
Y2Nlc3MuaCIKICNpbmNsdWRlICJUeXBlZEFycmF5VHlwZS5oIgogI2luY2x1ZGUgIldyaXRlQmFy
cmllci5oIgpAQCAtMTY4LDggKzE2OSw4IEBAIHB1YmxpYzoKICAgICBzaXplX3QgZXN0aW1hdGVk
U2l6ZUluQnl0ZXMoVk0mKSBjb25zdDsKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgc2l6
ZV90IGVzdGltYXRlZFNpemUoSlNDZWxsKiwgVk0mKTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0
Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdE91
dHB1dENvbnN0cmFpbnRzKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9JTkxJ
TkVfVklTSVRfQ0hJTERSRU47CisgICAgREVDTEFSRV9JTkxJTkVfVklTSVRfT1VUUFVUX0NPTlNU
UkFJTlRTOwogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgYW5hbHl6ZUhlYXAo
SlNDZWxsKiwgSGVhcEFuYWx5emVyJik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTQ2VsbElubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0NlbGxJbmxpbmVzLmgJKHJldmlzaW9uIDI2ODA4NikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAt
MTQxLDE1ICsxNDEsMjEgQEAgQUxXQVlTX0lOTElORSBTdHJ1Y3R1cmUqIEpTQ2VsbDo6c3RydWN0
dQogICAgIHJldHVybiB2bS5nZXRTdHJ1Y3R1cmUobV9zdHJ1Y3R1cmVJRCk7CiB9CiAKLWlubGlu
ZSB2b2lkIEpTQ2VsbDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK2lubGluZSB2b2lkIEpTQ2VsbDo6
dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAg
IHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQoY2VsbC0+c3RydWN0dXJlKHZpc2l0b3Iudm0oKSkp
OwogfQogCi1pbmxpbmUgdm9pZCBKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHMoSlNDZWxs
KiwgU2xvdFZpc2l0b3ImKQorREVGSU5FX0lOTElORV9WSVNJVF9DSElMRFJFTihKU0NlbGwpOwor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgoraW5saW5lIHZvaWQgSlNDZWxsOjp2aXNpdE91
dHB1dENvbnN0cmFpbnRzSW1wbChKU0NlbGwqLCBWaXNpdG9yJikKIHsKIH0KIAorREVGSU5FX0lO
TElORV9WSVNJVF9PVVRQVVRfQ09OU1RSQUlOVFMoSlNDZWxsKTsKKwogQUxXQVlTX0lOTElORSBW
TSYgQ2FsbEZyYW1lOjpkZXByZWNhdGVkVk0oKSBjb25zdAogewogICAgIEpTQ2VsbCogY2FsbGVl
ID0gdGhpcy0+Y2FsbGVlKCkuYXNDZWxsKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0N1c3RvbUdldHRlclNldHRlckZ1bmN0aW9uLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0N1c3RvbUdldHRlclNldHRlckZ1bmN0aW9u
LmNwcAkocmV2aXNpb24gMjY4MDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNDdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg1LDcg
Kzg1LDggQEAgSlNDdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbiogSlNDdXN0b21HZQogICAgIHJl
dHVybiBmdW5jdGlvbjsKIH0KIAotdm9pZCBKU0N1c3RvbUdldHRlclNldHRlckZ1bmN0aW9uOjp2
aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0
ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0N1c3RvbUdldHRlclNldHRlckZ1bmN0aW9uOjp2
aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAg
SlNDdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbiogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0N1c3Rv
bUdldHRlclNldHRlckZ1bmN0aW9uKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhF
UklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtOTQsNiArOTUsOCBAQCB2b2lkIEpTQ3VzdG9t
R2V0dGVyU2V0dGVyRnVuY3Rpb246OnZpc2l0CiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVj
dC0+bV9nZXR0ZXJTZXR0ZXIpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNDdXN0b21H
ZXR0ZXJTZXR0ZXJGdW5jdGlvbik7CisKIHZvaWQgSlNDdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlv
bjo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBOYXRpdmVFeGVjdXRhYmxlKiBleGVjdXRhYmxlLCBD
dXN0b21HZXR0ZXJTZXR0ZXIqIGdldHRlclNldHRlciwgY29uc3QgU3RyaW5nJiBuYW1lKQogewog
ICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtLCBleGVjdXRhYmxlLCBpc1NldHRlcigpLCBuYW1l
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ3VzdG9tR2V0dGVyU2V0
dGVyRnVuY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0N1c3RvbUdldHRlclNldHRlckZ1bmN0aW9uLmgJKHJldmlzaW9uIDI2ODA4NikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ3VzdG9tR2V0dGVyU2V0dGVyRnVuY3Rpb24u
aAkod29ya2luZyBjb3B5KQpAQCAtNjMsNyArNjMsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAg
IEpTQ3VzdG9tR2V0dGVyU2V0dGVyRnVuY3Rpb24oVk0mLCBOYXRpdmVFeGVjdXRhYmxlKiwgSlNH
bG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqLCBUeXBlLCBjb25zdCBQcm9wZXJ0eU5hbWUmKTsKICAg
ICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgTmF0aXZlRXhlY3V0YWJsZSosIEN1c3RvbUdldHRl
clNldHRlciosIGNvbnN0IFN0cmluZyYpOwotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4o
SlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAg
ICAgV3JpdGVCYXJyaWVyPEN1c3RvbUdldHRlclNldHRlcj4gbV9nZXR0ZXJTZXR0ZXI7CiAgICAg
VHlwZSBtX3R5cGU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ZpbmFs
aXphdGlvblJlZ2lzdHJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0ZpbmFsaXphdGlvblJlZ2lzdHJ5LmNwcAkocmV2aXNpb24gMjY4MDg2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGaW5hbGl6YXRpb25SZWdpc3RyeS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTU2LDcgKzU2LDggQEAgdm9pZCBKU0ZpbmFsaXphdGlvblJlZ2lz
dHJ5OjpmaW5pc2hDcmVhdAogICAgIGludGVybmFsRmllbGQoRmllbGQ6OkNhbGxiYWNrKS5zZXRX
aXRob3V0V3JpdGVCYXJyaWVyKGNhbGxiYWNrKTsKIH0KIAotdm9pZCBKU0ZpbmFsaXphdGlvblJl
Z2lzdHJ5Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3Ip
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0ZpbmFsaXphdGlvblJlZ2lzdHJ5
Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAg
ICAgQmFzZTo6dmlzaXRDaGlsZHJlbihjZWxsLCB2aXNpdG9yKTsKIApAQCAtODMsNiArODQsOCBA
QCB2b2lkIEpTRmluYWxpemF0aW9uUmVnaXN0cnk6OnZpc2l0Q2hpbGRyCiAgICAgdmlzaXRvci52
bSgpLmhlYXAucmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKHRvdGFsQnVmZmVyU2l6ZXNJbkJ5dGVz
KTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTRmluYWxpemF0aW9uUmVnaXN0cnkpOwor
CiB2b2lkIEpTRmluYWxpemF0aW9uUmVnaXN0cnk6OmRlc3Ryb3koSlNDZWxsKiB0YWJsZSkKIHsK
ICAgICBzdGF0aWNfY2FzdDxKU0ZpbmFsaXphdGlvblJlZ2lzdHJ5Kj4odGFibGUpLT5+SlNGaW5h
bGl6YXRpb25SZWdpc3RyeSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNGaW5hbGl6YXRpb25SZWdpc3RyeS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTRmluYWxpemF0aW9uUmVnaXN0cnkuaAkocmV2aXNpb24gMjY4MDg2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGaW5hbGl6YXRpb25SZWdpc3RyeS5o
CSh3b3JraW5nIGNvcHkpCkBAIC03MCw3ICs3MCw3IEBAIHB1YmxpYzoKICAgICBERUNMQVJFX0VY
UE9SVF9JTkZPOwogCiAgICAgdm9pZCBmaW5hbGl6ZVVuY29uZGl0aW9uYWxseShWTSYpOwotICAg
IHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBE
RUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7
CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOwogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmNwcAkocmV2
aXNpb24gMjY4MDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlv
bi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1Miw3ICsyNTIsOCBAQCBjb25zdCBTb3VyY2VDb2Rl
KiBKU0Z1bmN0aW9uOjpzb3VyY2VDb2RlCiAgICAgcmV0dXJuICZqc0V4ZWN1dGFibGUoKS0+c291
cmNlKCk7CiB9CiAgICAgCi12b2lkIEpTRnVuY3Rpb246OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBj
ZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2
b2lkIEpTRnVuY3Rpb246OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYg
dmlzaXRvcikKIHsKICAgICBKU0Z1bmN0aW9uKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTRnVuY3Rp
b24qPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGlu
Zm8oKSk7CkBAIC0yNjEsNiArMjYyLDggQEAgdm9pZCBKU0Z1bmN0aW9uOjp2aXNpdENoaWxkcmVu
KEpTQ2VsbCogYwogICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQoYml0d2lzZV9jYXN0PEpT
Q2VsbCo+KGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KHRoaXNPYmplY3QtPm1fZXhlY3V0YWJsZU9y
UmFyZURhdGEpICYgfnJhcmVEYXRhVGFnKSk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihK
U0Z1bmN0aW9uKTsKKwogQ2FsbERhdGEgSlNGdW5jdGlvbjo6Z2V0Q2FsbERhdGEoSlNDZWxsKiBj
ZWxsKQogewogICAgIC8vIEtlZXAgdGhpcyBmdW5jdGlvbiBPSyBmb3IgaW52b2NhdGlvbiBmcm9t
IGNvbmN1cnJlbnQgY29tcGlsZXJzLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNGdW5jdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTRnVuY3Rpb24uaAkocmV2aXNpb24gMjY4MDg2KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xODAsNyArMTgwLDcg
QEAgcHJvdGVjdGVkOgogCiAgICAgc3RhdGljIGJvb2wgZGVsZXRlUHJvcGVydHkoSlNDZWxsKiwg
SlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIERlbGV0ZVByb3BlcnR5U2xvdCYpOwogCi0g
ICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAg
IERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKIHByaXZhdGU6CiAgICAgc3RhdGljIEpTRnVuY3Rp
b24qIGNyZWF0ZUltcGwoVk0mIHZtLCBGdW5jdGlvbkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUsIEpT
U2NvcGUqIHNjb3BlLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTR2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyYXRvci5jcHAJKHJldmlzaW9uIDI2ODA4NikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJhdG9yLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNTksMTEgKzU5LDE0IEBAIHZvaWQgSlNHZW5lcmF0b3I6OmZpbmlzaENyZWF0aW9u
KFZNJiB2bSkKICAgICAgICAgaW50ZXJuYWxGaWVsZChpbmRleCkuc2V0KHZtLCB0aGlzLCB2YWx1
ZXNbaW5kZXhdKTsKIH0KIAotdm9pZCBKU0dlbmVyYXRvcjo6dmlzaXRDaGlsZHJlbihKU0NlbGwq
IGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4K
K3ZvaWQgSlNHZW5lcmF0b3I6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRv
ciYgdmlzaXRvcikKIHsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTR2VuZXJhdG9y
Kj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZv
KCkpOwogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CiB9CiAK
K0RFRklORV9WSVNJVF9DSElMRFJFTihKU0dlbmVyYXRvcik7CisKIH0gLy8gbmFtZXNwYWNlIEpT
QwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmF0b3IuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyYXRvci5oCShy
ZXZpc2lvbiAyNjgwODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVy
YXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC05NCw3ICs5NCw3IEBAIHB1YmxpYzoKIAogICAgIERF
Q0xBUkVfRVhQT1JUX0lORk87CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2Vs
bCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogcHJpdmF0
ZToKICAgICBKU0dlbmVyYXRvcihWTSYsIFN0cnVjdHVyZSopOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXcuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlldy5o
CShyZXZpc2lvbiAyNjgwODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dl
bmVyaWNUeXBlZEFycmF5Vmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMTIsNyArMzEyLDcgQEAg
cHJpdmF0ZToKICAgICBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0Kiwg
SlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CiAK
ICAgICBzdGF0aWMgc2l6ZV90IGVzdGltYXRlZFNpemUoSlNDZWxsKiwgVk0mKTsKLSAgICBzdGF0
aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFS
RV9URU1QTEFURV9WSVNJVF9DSElMRFJFTjsKIAogICAgIC8vIFJldHVybnMgdHJ1ZSBpZiBzdWNj
ZXNzZnVsLCBhbmQgZmFsc2Ugb24gZXJyb3I7IGl0IHdpbGwgdGhyb3cgb24gZXJyb3IuCiAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgT3RoZXJBZGFwdG9yPgpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdJ
bmxpbmVzLmgJKHJldmlzaW9uIDI2ODA4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC01
MTAsNyArNTEwLDggQEAgc2l6ZV90IEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+Ogog
fQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgotdm9pZCBKU0dlbmVyaWNUeXBlZEFycmF5
VmlldzxBZGFwdG9yPjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNHZW5lcmljVHlwZWRB
cnJheVZpZXc8QWRhcHRvcj46OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRv
ciYgdmlzaXRvcikKIHsKICAgICBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyogdGhpc09iamVjdCA9
IGpzQ2FzdDxKU0dlbmVyaWNUeXBlZEFycmF5Vmlldyo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19P
QkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTU0OCw0ICs1NDksNiBAQCB2
b2lkIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+Ojp2CiAgICAgfQogfQogCitERUZJ
TkVfVEVNUExBVEVfVklTSVRfQ0hJTERSRU4odGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4sIEpT
R2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+KTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3Qu
Y3BwCShyZXZpc2lvbiAyNjgwODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0dsb2JhbE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4NzYsNyArMTg3Niw4IEBAIHZv
aWQgSlNHbG9iYWxPYmplY3Q6OnJlc2V0UHJvdG90eXBlKFZNJiAKICAgICBzZXRHbG9iYWxUaGlz
KHZtLCBKU1Byb3h5OjpjcmVhdGUodm0sIEpTUHJveHk6OmNyZWF0ZVN0cnVjdHVyZSh2bSwgdGhp
cywgcHJvdG90eXBlLCBQdXJlRm9yd2FyZGluZ1Byb3h5VHlwZSksIHRoaXMpKTsKIH0KIAotdm9p
ZCBKU0dsb2JhbE9iamVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9y
JiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNHbG9iYWxPYmpl
Y3Q6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsg
CiAgICAgSlNHbG9iYWxPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNHbG9iYWxPYmplY3Qq
PihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8o
KSk7CkBAIC0yMDQ3LDYgKzIwNDgsOCBAQCB2b2lkIEpTR2xvYmFsT2JqZWN0Ojp2aXNpdENoaWxk
cmVuKEpTQ2VsCiAgICAgdGhpc09iamVjdC0+bV9yZWdFeHBHbG9iYWxEYXRhLnZpc2l0QWdncmVn
YXRlKHZpc2l0b3IpOwogfQogCitERUZJTkVfRVhQT1JUX1ZJU0lUX0NISUxEUkVOKEpTR2xvYmFs
T2JqZWN0KTsKKwogQ2FsbEZyYW1lKiBKU0dsb2JhbE9iamVjdDo6ZGVwcmVjYXRlZENhbGxGcmFt
ZUZvckRlYnVnZ2VyKCkKIHsKICAgICByZXR1cm4gQ2FsbEZyYW1lOjpjcmVhdGUobV9kZXByZWNh
dGVkQ2FsbEZyYW1lRm9yRGVidWdnZXIpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNHbG9iYWxPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCShyZXZpc2lvbiAyNjgwODYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBA
IC01ODYsNyArNTg2LDcgQEAgcHVibGljOgogICAgIEpTX0VYUE9SVF9QUklWQVRFIH5KU0dsb2Jh
bE9iamVjdCgpOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlND
ZWxsKik7CiAKLSAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVu
KEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9FWFBPUlRfVklTSVRfQ0hJTERS
RU47CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNs
b3QoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90
Jik7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIGJvb2wgcHV0KEpTQ2VsbCosIEpTR2xv
YmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTSW1tdXRhYmxlQnV0dGVyZmx5LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ltbXV0YWJs
ZUJ1dHRlcmZseS5jcHAJKHJldmlzaW9uIDI2ODA4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTSW1tdXRhYmxlQnV0dGVyZmx5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIs
NyArMzIsOCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogY29uc3QgQ2xhc3NJbmZvIEpTSW1tdXRhYmxl
QnV0dGVyZmx5OjpzX2luZm8gPSB7ICJJbW11dGFibGUgQnV0dGVyZmx5IiwgbnVsbHB0ciwgbnVs
bHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU0ltbXV0YWJsZUJ1dHRlcmZseSkg
fTsKIAotdm9pZCBKU0ltbXV0YWJsZUJ1dHRlcmZseTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNl
bGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3Zv
aWQgSlNJbW11dGFibGVCdXR0ZXJmbHk6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwg
VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNlbGws
IGluZm8oKSk7CiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbihjZWxsLCB2aXNpdG9yKTsKQEAgLTQ1
LDYgKzQ2LDggQEAgdm9pZCBKU0ltbXV0YWJsZUJ1dHRlcmZseTo6dmlzaXRDaGlsZHJlbgogICAg
IHZpc2l0b3IuYXBwZW5kVmFsdWVzSGlkZGVuKGJ1dHRlcmZseS0+Y29udGlndW91cygpLmRhdGEo
KSwgYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKSk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJF
TihKU0ltbXV0YWJsZUJ1dHRlcmZseSk7CisKIHZvaWQgSlNJbW11dGFibGVCdXR0ZXJmbHk6OmNv
cHlUb0FyZ3VtZW50cyhKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUqIGZpcnN0RWxlbWVudERlc3Qs
IHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQogewogICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNJbW11dGFibGVCdXR0ZXJmbHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0ltbXV0YWJsZUJ1dHRlcmZseS5oCShyZXZpc2lvbiAyNjgwODYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ltbXV0YWJsZUJ1dHRlcmZseS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xNDUsNyArMTQ1LDcgQEAgcHVibGljOgogICAgICAgICByZXR1
cm4ganNEb3VibGVOdW1iZXIodmFsdWUpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0
Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxE
UkVOOwogCiAgICAgdm9pZCBjb3B5VG9Bcmd1bWVudHMoSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVl
KiBmaXJzdEVsZW1lbnREZXN0LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7CiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTSW50ZXJuYWxGaWVsZE9iamVj
dEltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0lu
dGVybmFsRmllbGRPYmplY3RJbXBsLmgJKHJldmlzaW9uIDI2ODA4NikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTSW50ZXJuYWxGaWVsZE9iamVjdEltcGwuaAkod29ya2luZyBj
b3B5KQpAQCAtNjYsNyArNjYsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZz
ZXRPZkludGVybmFsRmllbGQodW5zaWduZWQgaW5kZXgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRP
RihKU0ludGVybmFsRmllbGRPYmplY3RJbXBsLCBtX2ludGVybmFsRmllbGRzKSArIGluZGV4ICog
c2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPik7IH0KIAogcHJvdGVjdGVkOgotICAgIHN0YXRp
YyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJF
X1RFTVBMQVRFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgSlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1w
bChWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQogICAgICAgICA6IEJhc2Uodm0sIHN0cnVj
dHVyZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTSW50ZXJuYWxGaWVs
ZE9iamVjdEltcGxJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbElubGluZXMuaAkocmV2aXNpb24gMjY4
MDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbnRlcm5hbEZpZWxkT2Jq
ZWN0SW1wbElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAsOCBAQAogbmFtZXNw
YWNlIEpTQyB7CiAKIHRlbXBsYXRlPHVuc2lnbmVkIHBhc3NlZE51bWJlck9mSW50ZXJuYWxGaWVs
ZHM+Ci12b2lkIEpTSW50ZXJuYWxGaWVsZE9iamVjdEltcGw8cGFzc2VkTnVtYmVyT2ZJbnRlcm5h
bEZpZWxkcz46OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRv
cikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTSW50ZXJuYWxGaWVsZE9iamVj
dEltcGw8cGFzc2VkTnVtYmVyT2ZJbnRlcm5hbEZpZWxkcz46OnZpc2l0Q2hpbGRyZW5JbXBsKEpT
Q2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0g
anNDYXN0PEpTSW50ZXJuYWxGaWVsZE9iamVjdEltcGwqPihjZWxsKTsKICAgICBBU1NFUlRfR0Nf
T0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC0zOCw0ICszOSw2IEBAIHZv
aWQgSlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbDxwYXNzZWROdW0KICAgICB2aXNpdG9yLmFwcGVu
ZFZhbHVlcyh0aGlzT2JqZWN0LT5tX2ludGVybmFsRmllbGRzLCBudW1iZXJPZkludGVybmFsRmll
bGRzKTsKIH0KIAorREVGSU5FX1RFTVBMQVRFX1ZJU0lUX0NISUxEUkVOKHRlbXBsYXRlPHVuc2ln
bmVkIHBhc3NlZE51bWJlck9mSW50ZXJuYWxGaWVsZHM+LCBKU0ludGVybmFsRmllbGRPYmplY3RJ
bXBsPHBhc3NlZE51bWJlck9mSW50ZXJuYWxGaWVsZHM+KTsKKwogfSAvLyBuYW1lc3BhY2UgSlND
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xleGljYWxFbnZpcm9ubWVu
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMZXhp
Y2FsRW52aXJvbm1lbnQuY3BwCShyZXZpc2lvbiAyNjgwODYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0xleGljYWxFbnZpcm9ubWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM2LDcgKzM2LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAKIGNvbnN0IENsYXNzSW5mbyBKU0xleGlj
YWxFbnZpcm9ubWVudDo6c19pbmZvID0geyAiSlNMZXhpY2FsRW52aXJvbm1lbnQiLCAmQmFzZTo6
c19pbmZvLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTTGV4aWNhbEVu
dmlyb25tZW50KSB9OwogCi12b2lkIEpTTGV4aWNhbEVudmlyb25tZW50Ojp2aXNpdENoaWxkcmVu
KEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPgordm9pZCBKU0xleGljYWxFbnZpcm9ubWVudDo6dmlzaXRDaGlsZHJlbkltcGwoSlND
ZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBq
c0Nhc3Q8SlNMZXhpY2FsRW52aXJvbm1lbnQqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNU
X0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC00NCw2ICs0NSw4IEBAIHZvaWQgSlNM
ZXhpY2FsRW52aXJvbm1lbnQ6OnZpc2l0Q2hpbGRyZW4KICAgICB2aXNpdG9yLmFwcGVuZFZhbHVl
c0hpZGRlbih0aGlzT2JqZWN0LT52YXJpYWJsZXMoKSwgdGhpc09iamVjdC0+c3ltYm9sVGFibGUo
KS0+c2NvcGVTaXplKCkpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNMZXhpY2FsRW52
aXJvbm1lbnQpOworCiB2b2lkIEpTTGV4aWNhbEVudmlyb25tZW50OjphbmFseXplSGVhcChKU0Nl
bGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCiB7CiAgICAgYXV0byogdGhpc09iamVj
dCA9IGpzQ2FzdDxKU0xleGljYWxFbnZpcm9ubWVudCo+KGNlbGwpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMZXhpY2FsRW52aXJvbm1lbnQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xleGljYWxFbnZpcm9ubWVudC5oCShy
ZXZpc2lvbiAyNjgwODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xleGlj
YWxFbnZpcm9ubWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzQsNyArMTM0LDcgQEAgcHJvdGVj
dGVkOgogICAgICAgICB9CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihK
U0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAgICAg
c3RhdGljIHZvaWQgYW5hbHl6ZUhlYXAoSlNDZWxsKiwgSGVhcEFuYWx5emVyJik7CiB9OwogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01hcEl0ZXJhdG9yLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01hcEl0ZXJhdG9yLmNw
cAkocmV2aXNpb24gMjY4MDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNN
YXBJdGVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU3LDEzICs1NywxNiBAQCB2b2lkIEpT
TWFwSXRlcmF0b3I6OmZpbmlzaENyZWF0aW9uKFZNJiB2CiAgICAgICAgIEJhc2U6OmludGVybmFs
RmllbGQoaW5kZXgpLnNldCh2bSwgdGhpcywgdmFsdWVzW2luZGV4XSk7CiB9CiAKLXZvaWQgSlNN
YXBJdGVyYXRvcjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNp
dG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNNYXBJdGVyYXRvcjo6dmlz
aXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGF1
dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNNYXBJdGVyYXRvcio+KGNlbGwpOwogICAgIEFTU0VS
VF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKICAgICBCYXNlOjp2aXNp
dENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERS
RU4oSlNNYXBJdGVyYXRvcik7CisKIEpTVmFsdWUgSlNNYXBJdGVyYXRvcjo6Y3JlYXRlUGFpcihK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIGtleSwgSlNWYWx1ZSB2YWx1ZSkK
IHsKICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdzOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNNYXBJdGVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTTWFwSXRlcmF0b3IuaAkocmV2aXNpb24gMjY4MDg2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNYXBJdGVyYXRvci5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xNDIsNyArMTQyLDcgQEAgcHJpdmF0ZToKICAgICBKU19FWFBPUlRfUFJJVkFURSB2
b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgSlNNYXAqLCBJdGVyYXRpb25LaW5kKTsKICAgICB2b2lk
IGZpbmlzaENyZWF0aW9uKFZNJik7CiAgICAgSlNWYWx1ZSBjcmVhdGVQYWlyKEpTR2xvYmFsT2Jq
ZWN0KiwgSlNWYWx1ZSwgSlNWYWx1ZSk7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihK
U0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiB9Owog
U1RBVElDX0FTU0VSVF9JU19UUklWSUFMTFlfREVTVFJVQ1RJQkxFKEpTTWFwSXRlcmF0b3IpOwog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZUVudmlyb25tZW50
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVs
ZUVudmlyb25tZW50LmNwcAkocmV2aXNpb24gMjY4MDg2KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNNb2R1bGVFbnZpcm9ubWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY1
LDcgKzY1LDggQEAgdm9pZCBKU01vZHVsZUVudmlyb25tZW50OjpmaW5pc2hDcmVhdGlvbgogICAg
IHRoaXMtPm1vZHVsZVJlY29yZFNsb3QoKS5zZXQodm0sIHRoaXMsIG1vZHVsZVJlY29yZCk7CiB9
CiAKLXZvaWQgSlNNb2R1bGVFbnZpcm9ubWVudDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGws
IFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQg
SlNNb2R1bGVFbnZpcm9ubWVudDo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNp
dG9yJiB2aXNpdG9yKQogewogICAgIEpTTW9kdWxlRW52aXJvbm1lbnQqIHRoaXNPYmplY3QgPSBq
c0Nhc3Q8SlNNb2R1bGVFbnZpcm9ubWVudCo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1Rf
SU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTc0LDYgKzc1LDggQEAgdm9pZCBKU01v
ZHVsZUVudmlyb25tZW50Ojp2aXNpdENoaWxkcmVuKAogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNP
YmplY3QtPm1vZHVsZVJlY29yZFNsb3QoKSk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihK
U01vZHVsZUVudmlyb25tZW50KTsKKwogYm9vbCBKU01vZHVsZUVudmlyb25tZW50OjpnZXRPd25Q
cm9wZXJ0eVNsb3QoSlNPYmplY3QqIGNlbGwsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBW
TSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU01vZHVsZUVudmlyb25tZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVFbnZpcm9ubWVudC5oCShyZXZpc2lvbiAyNjgwODYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZUVudmlyb25tZW50LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTg5LDcgKzg5LDcgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJu
ICpiaXR3aXNlX2Nhc3Q8V3JpdGVCYXJyaWVyQmFzZTxBYnN0cmFjdE1vZHVsZVJlY29yZD4qPihi
aXR3aXNlX2Nhc3Q8Y2hhcio+KHRoaXMpICsgb2Zmc2V0T2ZNb2R1bGVSZWNvcmQoc3ltYm9sVGFi
bGUoKSkpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwg
U2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogfTsKIAogaW5saW5l
IEpTTW9kdWxlRW52aXJvbm1lbnQ6OkpTTW9kdWxlRW52aXJvbm1lbnQoVk0mIHZtLCBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSwgSlNTY29wZSogY3VycmVudFNjb3BlLCBTeW1ib2xUYWJsZSogc3ltYm9s
VGFibGUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZU5hbWVz
cGFjZU9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QuY3BwCShyZXZpc2lvbiAyNjgwODYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZU5hbWVzcGFjZU9iamVjdC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTg1LDcgKzg1LDggQEAgdm9pZCBKU01vZHVsZU5hbWVzcGFjZU9iamVj
dDo6ZGVzdHJveShKUwogICAgIHRoaXNPYmplY3QtPkpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0Ojp+
SlNNb2R1bGVOYW1lc3BhY2VPYmplY3QoKTsKIH0KIAotdm9pZCBKU01vZHVsZU5hbWVzcGFjZU9i
amVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQor
dGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNNb2R1bGVOYW1lc3BhY2VPYmplY3Q6
OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAg
ICBKU01vZHVsZU5hbWVzcGFjZU9iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU01vZHVsZU5h
bWVzcGFjZU9iamVjdCo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhp
c09iamVjdCwgaW5mbygpKTsKQEAgLTk4LDYgKzk5LDggQEAgdm9pZCBKU01vZHVsZU5hbWVzcGFj
ZU9iamVjdDo6dmlzaXRDaGlsZAogICAgIH0KIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpT
TW9kdWxlTmFtZXNwYWNlT2JqZWN0KTsKKwogc3RhdGljIEpTVmFsdWUgZ2V0VmFsdWUoSlNNb2R1
bGVFbnZpcm9ubWVudCogZW52aXJvbm1lbnQsIFByb3BlcnR5TmFtZSBsb2NhbE5hbWUsIFNjb3Bl
T2Zmc2V0JiBzY29wZU9mZnNldCkKIHsKICAgICBTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUgPSBl
bnZpcm9ubWVudC0+c3ltYm9sVGFibGUoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTTW9kdWxlTmFtZXNwYWNlT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QuaAkocmV2aXNpb24g
MjY4MDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVOYW1lc3Bh
Y2VPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtNzIsNyArNzIsNyBAQCBwdWJsaWM6CiBwcml2
YXRlOgogICAgIEpTX0VYUE9SVF9QUklWQVRFIEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0KFZNJiwg
U3RydWN0dXJlKik7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBmaW5pc2hDcmVhdGlvbihK
U0dsb2JhbE9iamVjdCosIEFic3RyYWN0TW9kdWxlUmVjb3JkKiwgVmVjdG9yPHN0ZDo6cGFpcjxJ
ZGVudGlmaWVyLCBBYnN0cmFjdE1vZHVsZVJlY29yZDo6UmVzb2x1dGlvbj4+JiYpOwotICAgIHN0
YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNM
QVJFX1ZJU0lUX0NISUxEUkVOOwogICAgIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90Q29tbW9uKEpT
R2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKIAogICAgIHN0cnVj
dCBFeHBvcnRFbnRyeSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01v
ZHVsZVJlY29yZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNNb2R1bGVSZWNvcmQuY3BwCShyZXZpc2lvbiAyNjgwODYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU01vZHVsZVJlY29yZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcw
LDcgKzcwLDggQEAgdm9pZCBKU01vZHVsZVJlY29yZDo6ZmluaXNoQ3JlYXRpb24oSlNHbAogICAg
IEFTU0VSVChpbmhlcml0cyh2bSwgaW5mbygpKSk7CiB9CiAKLXZvaWQgSlNNb2R1bGVSZWNvcmQ6
OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBs
YXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTTW9kdWxlUmVjb3JkOjp2aXNpdENoaWxkcmVu
SW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNNb2R1bGVSZWNv
cmQqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNNb2R1bGVSZWNvcmQqPihjZWxsKTsKICAgICBBU1NF
UlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC03OCw2ICs3OSw4
IEBAIHZvaWQgSlNNb2R1bGVSZWNvcmQ6OnZpc2l0Q2hpbGRyZW4oSlNDZWwKICAgICB2aXNpdG9y
LmFwcGVuZCh0aGlzT2JqZWN0LT5tX21vZHVsZVByb2dyYW1FeGVjdXRhYmxlKTsKIH0KIAorREVG
SU5FX1ZJU0lUX0NISUxEUkVOKEpTTW9kdWxlUmVjb3JkKTsKKwogdm9pZCBKU01vZHVsZVJlY29y
ZDo6bGluayhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHNjcmlwdEZldGNo
ZXIpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVSZWNvcmQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZVJlY29yZC5oCShyZXZpc2lvbiAyNjgw
ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZVJlY29yZC5oCSh3
b3JraW5nIGNvcHkpCkBAIC02Niw3ICs2Niw3IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGZpbmlz
aENyZWF0aW9uKEpTR2xvYmFsT2JqZWN0KiwgVk0mKTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0
Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxE
UkVOOwogCiAgICAgdm9pZCBpbnN0YW50aWF0ZURlY2xhcmF0aW9ucyhKU0dsb2JhbE9iamVjdCos
IE1vZHVsZVByb2dyYW1FeGVjdXRhYmxlKiwgSlNWYWx1ZSBzY3JpcHRGZXRjaGVyKTsKIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNOYXRpdmVTdGRGdW5jdGlvbi5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNOYXRpdmVTdGRG
dW5jdGlvbi5jcHAJKHJldmlzaW9uIDI2ODA4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTTmF0aXZlU3RkRnVuY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSwxMyAr
NDEsMTYgQEAgSlNOYXRpdmVTdGRGdW5jdGlvbjo6SlNOYXRpdmVTdGRGdW5jdGlvbgogewogfQog
Ci12b2lkIEpTTmF0aXZlU3RkRnVuY3Rpb246OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBT
bG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpT
TmF0aXZlU3RkRnVuY3Rpb246OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRv
ciYgdmlzaXRvcikKIHsKICAgICBKU05hdGl2ZVN0ZEZ1bmN0aW9uKiB0aGlzT2JqZWN0ID0ganND
YXN0PEpTTmF0aXZlU3RkRnVuY3Rpb24qPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lO
SEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlz
T2JqZWN0LCB2aXNpdG9yKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTTmF0aXZlU3Rk
RnVuY3Rpb24pOworCiB2b2lkIEpTTmF0aXZlU3RkRnVuY3Rpb246OmZpbmlzaENyZWF0aW9uKFZN
JiB2bSwgTmF0aXZlRXhlY3V0YWJsZSogZXhlY3V0YWJsZSwgdW5zaWduZWQgbGVuZ3RoLCBjb25z
dCBTdHJpbmcmIG5hbWUpCiB7CiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0sIGV4ZWN1dGFi
bGUsIGxlbmd0aCwgbmFtZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U05hdGl2ZVN0ZEZ1bmN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNOYXRpdmVTdGRGdW5jdGlvbi5oCShyZXZpc2lvbiAyNjgwODYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU05hdGl2ZVN0ZEZ1bmN0aW9uLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTY1LDcgKzY1LDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBKU05hdGl2ZVN0
ZEZ1bmN0aW9uKFZNJiwgTmF0aXZlRXhlY3V0YWJsZSosIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0
dXJlKiwgTmF0aXZlU3RkRnVuY3Rpb24mJik7CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYs
IE5hdGl2ZUV4ZWN1dGFibGUqLCB1bnNpZ25lZCBsZW5ndGgsIGNvbnN0IFN0cmluZyYgbmFtZSk7
Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwor
ICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBOYXRpdmVTdGRGdW5jdGlvbiBtX2Z1
bmN0aW9uOwogfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVj
dC5jcHAJKHJldmlzaW9uIDI2ODA4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIwLDcgKzEyMCw4IEBAIEFMV0FZU19J
TkxJTkUgdm9pZCBKU09iamVjdDo6bWFya0F1eGlsaWEKICAgICB2aXNpdG9yLmFwcGVuZFZhbHVl
c0hpZGRlbihidXR0ZXJmbHktPnByb3BlcnR5U3RvcmFnZSgpIC0gb3V0T2ZMaW5lU2l6ZSwgb3V0
T2ZMaW5lU2l6ZSk7CiB9CiAKLUFMV0FZU19JTkxJTkUgU3RydWN0dXJlKiBKU09iamVjdDo6dmlz
aXRCdXR0ZXJmbHkoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNp
dG9yPgorQUxXQVlTX0lOTElORSBTdHJ1Y3R1cmUqIEpTT2JqZWN0Ojp2aXNpdEJ1dHRlcmZseShW
aXNpdG9yJiB2aXNpdG9yKQogewogICAgIHN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCByYWNlUmVh
c29uID0gIkpTT2JqZWN0Ojp2aXNpdEJ1dHRlcmZseSI7CiAgICAgU3RydWN0dXJlKiByZXN1bHQg
PSB2aXNpdEJ1dHRlcmZseUltcGwodmlzaXRvcik7CkBAIC0xMjksNyArMTMwLDggQEAgQUxXQVlT
X0lOTElORSBTdHJ1Y3R1cmUqIEpTT2JqZWN0Ojp2aXNpdAogICAgIHJldHVybiByZXN1bHQ7CiB9
CiAKLUFMV0FZU19JTkxJTkUgU3RydWN0dXJlKiBKU09iamVjdDo6dmlzaXRCdXR0ZXJmbHlJbXBs
KFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK0FMV0FZ
U19JTkxJTkUgU3RydWN0dXJlKiBKU09iamVjdDo6dmlzaXRCdXR0ZXJmbHlJbXBsKFZpc2l0b3Im
IHZpc2l0b3IpCiB7CiAgICAgVk0mIHZtID0gdmlzaXRvci52bSgpOwogICAgIApAQCAtNDI5LDcg
KzQzMSw4IEBAIHNpemVfdCBKU09iamVjdDo6ZXN0aW1hdGVkU2l6ZShKU0NlbGwqIGMKICAgICBy
ZXR1cm4gQmFzZTo6ZXN0aW1hdGVkU2l6ZShjZWxsLCB2bSkgKyBidXR0ZXJmbHlPdXRPZkxpbmVT
aXplOwogfQogCi12b2lkIEpTT2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xv
dFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU09i
amVjdDo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQog
ewogICAgIEpTT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTT2JqZWN0Kj4oY2VsbCk7CiAg
ICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNDM3
LDE2ICs0NDAsMTggQEAgdm9pZCBKU09iamVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbAog
ICAgIGJvb2wgd2FzQ2hlY2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlvbiA9IHZpc2l0b3IubV9p
c0NoZWNraW5nRm9yRGVmYXVsdE1hcmtWaW9sYXRpb247CiAgICAgdmlzaXRvci5tX2lzQ2hlY2tp
bmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlvbiA9IGZhbHNlOwogI2VuZGlmCi0gICAgCisKICAgICBK
U0NlbGw6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7Ci0gICAgCisKICAgICB0
aGlzT2JqZWN0LT52aXNpdEJ1dHRlcmZseSh2aXNpdG9yKTsKLSAgICAKKwogI2lmIEFTU0VSVF9F
TkFCTEVECiAgICAgdmlzaXRvci5tX2lzQ2hlY2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlvbiA9
IHdhc0NoZWNraW5nRm9yRGVmYXVsdE1hcmtWaW9sYXRpb247CiAjZW5kaWYKIH0KIAorREVGSU5F
X0VYUE9SVF9WSVNJVF9DSElMRFJFTihKU09iamVjdCk7CisKIHZvaWQgSlNPYmplY3Q6OmFuYWx5
emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFuYWx5emVyJiBhbmFseXplcikKIHsKICAgICBKU09i
amVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU09iamVjdCo+KGNlbGwpOwpAQCAtNDg1LDcgKzQ5
MCw4IEBAIHZvaWQgSlNPYmplY3Q6OmFuYWx5emVIZWFwKEpTQ2VsbCogY2VsbCwKICAgICB9CiB9
CiAKLXZvaWQgSlNGaW5hbE9iamVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNGaW5h
bE9iamVjdDo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9y
KQogewogICAgIEpTRmluYWxPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNGaW5hbE9iamVj
dCo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5m
bygpKTsKQEAgLTUwNiw2ICs1MTIsOCBAQCB2b2lkIEpTRmluYWxPYmplY3Q6OnZpc2l0Q2hpbGRy
ZW4oSlNDZWxsCiAjZW5kaWYKIH0KIAorREVGSU5FX0VYUE9SVF9WSVNJVF9DSElMRFJFTihKU0Zp
bmFsT2JqZWN0KTsKKwogU3RyaW5nIEpTT2JqZWN0OjpjbGFzc05hbWUoY29uc3QgSlNPYmplY3Qq
IG9iamVjdCwgVk0mIHZtKQogewogICAgIGNvbnN0IENsYXNzSW5mbyogaW5mbyA9IG9iamVjdC0+
Y2xhc3NJbmZvKHZtKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2Jq
ZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmpl
Y3QuaAkocmV2aXNpb24gMjY4MDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMTA4LDggKzEwOCw5IEBAIGNsYXNzIEpTT2Jq
ZWN0IDogcHVibGljIEpTQ2VsbCB7CiBwdWJsaWM6CiAgICAgdXNpbmcgQmFzZSA9IEpTQ2VsbDsK
IAorICAgIERFQ0xBUkVfRVhQT1JUX1ZJU0lUX0NISUxEUkVOOworCiAgICAgSlNfRVhQT1JUX1BS
SVZBVEUgc3RhdGljIHNpemVfdCBlc3RpbWF0ZWRTaXplKEpTQ2VsbCosIFZNJik7Ci0gICAgSlNf
RVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90Vmlz
aXRvciYpOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGFuYWx5emVIZWFwKEpT
Q2VsbCosIEhlYXBBbmFseXplciYpOwogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFN0
cmluZyBjbGFzc05hbWUoY29uc3QgSlNPYmplY3QqLCBWTSYpOwpAQCAtOTc5LDkgKzk4MCw5IEBA
IHByb3RlY3RlZDoKICAgICBKU09iamVjdChWTSYsIFN0cnVjdHVyZSosIEJ1dHRlcmZseSogPSBu
dWxscHRyKTsKICAgICAKICAgICAvLyBWaXNpdHMgdGhlIGJ1dHRlcmZseSB1bmxlc3MgdGhlcmUg
aXMgYSByYWNlLiBSZXR1cm5zIHRoZSBzdHJ1Y3R1cmUgaWYgdGhlcmUgd2FzIG5vIHJhY2UuCi0g
ICAgU3RydWN0dXJlKiB2aXNpdEJ1dHRlcmZseShTbG90VmlzaXRvciYpOworICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFZpc2l0b3I+IFN0cnVjdHVyZSogdmlzaXRCdXR0ZXJmbHkoVmlzaXRvciYpOwog
ICAgIAotICAgIFN0cnVjdHVyZSogdmlzaXRCdXR0ZXJmbHlJbXBsKFNsb3RWaXNpdG9yJik7Cisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gU3RydWN0dXJlKiB2aXNpdEJ1dHRlcmZseUlt
cGwoVmlzaXRvciYpOwogICAgIAogICAgIHZvaWQgbWFya0F1eGlsaWFyeUFuZFZpc2l0T3V0T2ZM
aW5lUHJvcGVydGllcyhTbG90VmlzaXRvciYsIEJ1dHRlcmZseSosIFN0cnVjdHVyZSosIFByb3Bl
cnR5T2Zmc2V0IG1heE9mZnNldCk7CiAKQEAgLTExNzEsOCArMTE3Miw2IEBAIHByb3RlY3RlZDoK
ICAgICB9CiB9OwogCi1jbGFzcyBKU0ZpbmFsT2JqZWN0OwotCiAvLyBKU0ZpbmFsT2JqZWN0IGlz
IGEgdHlwZSBvZiBKU09iamVjdCB0aGF0IGNvbnRhaW5zIHN1ZmZpY2llbnQgaW50ZXJuYWwKIC8v
IHN0b3JhZ2UgdG8gZnVsbHkgbWFrZSB1c2Ugb2YgdGhlIGNvbGxlY3RvciBjZWxsIGNvbnRhaW5p
bmcgaXQuCiBjbGFzcyBKU0ZpbmFsT2JqZWN0IGZpbmFsIDogcHVibGljIEpTT2JqZWN0IHsKQEAg
LTEyMTEsMTUgKzEyMTAsMTMgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpj
cmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCB0eXBlSW5mbygpLCBpbmZvKCksIGRl
ZmF1bHRJbmRleGluZ1R5cGUsIGlubGluZUNhcGFjaXR5KTsKICAgICB9CiAKLSAgICBKU19FWFBP
UlRfUFJJVkFURSBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9y
Jik7CisgICAgREVDTEFSRV9FWFBPUlRfVklTSVRfQ0hJTERSRU47CiAKICAgICBERUNMQVJFX0VY
UE9SVF9JTkZPOwogCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRy
YWN0b3I7CiAKLSAgICB2b2lkIHZpc2l0Q2hpbGRyZW5Db21tb24oU2xvdFZpc2l0b3ImKTsKLQog
ICAgIGV4cGxpY2l0IEpTRmluYWxPYmplY3QoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwg
QnV0dGVyZmx5KiBidXR0ZXJmbHkpCiAgICAgICAgIDogSlNPYmplY3Qodm0sIHN0cnVjdHVyZSwg
YnV0dGVyZmx5KQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
UHJvbWlzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNQcm9taXNlLmNwcAkocmV2aXNpb24gMjY4MDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNQcm9taXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjcsMTMgKzY3LDE2IEBA
IHZvaWQgSlNQcm9taXNlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCiAgICAgICAgIEJhc2U6Omlu
dGVybmFsRmllbGQoaW5kZXgpLnNldCh2bSwgdGhpcywgdmFsdWVzW2luZGV4XSk7CiB9CiAKLXZv
aWQgSlNQcm9taXNlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZp
c2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1Byb21pc2U6OnZpc2l0
Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBhdXRv
KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTUHJvbWlzZSo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19P
QkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKICAgICBCYXNlOjp2aXNpdENoaWxk
cmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNQ
cm9taXNlKTsKKwogYXV0byBKU1Byb21pc2U6OnN0YXR1cyhWTSYpIGNvbnN0IC0+IFN0YXR1cwog
ewogICAgIEpTVmFsdWUgdmFsdWUgPSBpbnRlcm5hbEZpZWxkKEZpZWxkOjpGbGFncykuZ2V0KCk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb21pc2UuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb21pc2UuaAkocmV2aXNp
b24gMjY4MDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9taXNlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTkzLDcgKzkzLDcgQEAgcHVibGljOgogICAgIH07CiAgICAgc3Rh
dGljIERlZmVycmVkRGF0YSBjcmVhdGVEZWZlcnJlZERhdGEoSlNHbG9iYWxPYmplY3QqLCBKU1By
b21pc2VDb25zdHJ1Y3RvciopOwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0Nl
bGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKIHByb3Rl
Y3RlZDoKICAgICBKU1Byb21pc2UoVk0mLCBTdHJ1Y3R1cmUqKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVydHlOYW1lRW51bWVyYXRvci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yLmNwcAkocmV2aXNpb24gMjY4MDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzAsNyAr
NzAsOCBAQCB2b2lkIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6ZmluaXNoQ3JlCiAgICAgfQog
fQogCi12b2lkIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6dmlzaXRDaGlsZHJlbihKU0NlbGwq
IGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4K
K3ZvaWQgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwq
IGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9y
KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcio+KGNlbGwpOwog
ICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTg3
LDQgKzg4LDYgQEAgdm9pZCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OnZpc2l0Q2hpbAogICAg
IH0KIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcik7
CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmgJKHJldmlzaW9uIDI2
ODA4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVydHlOYW1lRW51
bWVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC04NCw3ICs4NCw3IEBAIHB1YmxpYzoKICAgICAg
ICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IsIG1fcHJv
cGVydHlOYW1lcyk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0Nl
bGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKIHByaXZh
dGU6CiAgICAgZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJveHkuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJveHkuY3BwCShyZXZpc2lvbiAyNjgwODYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3h5LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzUsNyArMzUsOCBAQCBTVEFUSUNfQVNTRVJUX0lTX1RSSVZJQUxMWV9ERVNUUlVDVElC
TEUoCiAKIGNvbnN0IENsYXNzSW5mbyBKU1Byb3h5OjpzX2luZm8gPSB7ICJKU1Byb3h5IiwgJkJh
c2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1Byb3h5
KSB9OwogCi12b2lkIEpTUHJveHk6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90Vmlz
aXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTUHJveHk6
OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAg
ICBKU1Byb3h5KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTUHJveHkqPihjZWxsKTsKICAgICBBU1NF
UlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC00Myw2ICs0NCw4
IEBAIHZvaWQgSlNQcm94eTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwKICAgICB2aXNpdG9y
LmFwcGVuZCh0aGlzT2JqZWN0LT5tX3RhcmdldCk7CiB9CiAKK0RFRklORV9FWFBPUlRfVklTSVRf
Q0hJTERSRU4oSlNQcm94eSk7CisKIHZvaWQgSlNQcm94eTo6c2V0VGFyZ2V0KFZNJiB2bSwgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKIHsKICAgICBtX3RhcmdldC5zZXQodm0sIHRoaXMs
IGdsb2JhbE9iamVjdCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1By
b3h5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm94
eS5oCShyZXZpc2lvbiAyNjgwODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U1Byb3h5LmgJKHdvcmtpbmcgY29weSkKQEAgLTg1LDcgKzg1LDcgQEAgcHJvdGVjdGVkOgogICAg
ICAgICBtX3RhcmdldC5zZXQodm0sIHRoaXMsIHRhcmdldCk7CiAgICAgfQogCi0gICAgSlNfRVhQ
T1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRv
ciYpOworICAgIERFQ0xBUkVfRVhQT1JUX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgSlNfRVhQT1JU
X1BSSVZBVEUgc3RhdGljIFN0cmluZyBjbGFzc05hbWUoY29uc3QgSlNPYmplY3QqLCBWTSYpOwog
ICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBTdHJpbmcgdG9TdHJpbmdOYW1lKGNvbnN0IEpT
T2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTU2NvcGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTU2NvcGUuY3BwCShyZXZpc2lvbiAyNjgwODYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU1Njb3BlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksNyArMzksOCBA
QCBTVEFUSUNfQVNTRVJUX0lTX1RSSVZJQUxMWV9ERVNUUlVDVElCTEUoCiAKIGNvbnN0IENsYXNz
SW5mbyBKU1Njb3BlOjpzX2luZm8gPSB7ICJTY29wZSIsICZCYXNlOjpzX2luZm8sIG51bGxwdHIs
IG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNTY29wZSkgfTsKIAotdm9pZCBKU1Njb3Bl
Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1w
bGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1Njb3BlOjp2aXNpdENoaWxkcmVuSW1wbChK
U0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNTY29wZSogdGhpc09iamVj
dCA9IGpzQ2FzdDxKU1Njb3BlKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklU
Uyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNDcsNiArNDgsOCBAQCB2b2lkIEpTU2NvcGU6OnZp
c2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsCiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+
bV9uZXh0KTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTU2NvcGUpOworCiAvLyBSZXR1
cm5zIHRydWUgaWYgd2UgZm91bmQgZW5vdWdoIGluZm9ybWF0aW9uIHRvIHRlcm1pbmF0ZSBvcHRp
bWl6YXRpb24uCiBzdGF0aWMgaW5saW5lIGJvb2wgYWJzdHJhY3RBY2Nlc3MoSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgSlNTY29wZSogc2NvcGUsIGNvbnN0IElkZW50aWZpZXImIGlkZW50
LCBHZXRPclB1dCBnZXRPclB1dCwgc2l6ZV90IGRlcHRoLCBib29sJiBuZWVkc1ZhckluamVjdGlv
bkNoZWNrcywgUmVzb2x2ZU9wJiBvcCwgSW5pdGlhbGl6YXRpb25Nb2RlIGluaXRpYWxpemF0aW9u
TW9kZSkKIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2NvcGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Njb3BlLmgJKHJl
dmlzaW9uIDI2ODA4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2NvcGUu
aAkod29ya2luZyBjb3B5KQpAQCAtNjIsNyArNjIsNyBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMg
dm9pZCBjb2xsZWN0Q2xvc3VyZVZhcmlhYmxlc1VuZGVyVERaKEpTU2NvcGUqLCBWYXJpYWJsZUVu
dmlyb25tZW50JiByZXN1bHQpOwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0Nl
bGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBi
b29sIGlzVmFyU2NvcGUoKTsKICAgICBib29sIGlzTGV4aWNhbFNjb3BlKCk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NlZ21lbnRlZFZh
cmlhYmxlT2JqZWN0LmNwcAkocmV2aXNpb24gMjY4MDg2KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTYyLDE5ICs2MiwyMiBAQCBTY29wZU9mZnNldCBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0
OjphCiAgICAgcmV0dXJuIFNjb3BlT2Zmc2V0KG9sZFNpemUpOwogfQogCi12b2lkIEpTU2VnbWVu
dGVkVmFyaWFibGVPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRv
ciYgc2xvdFZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1NlZ21l
bnRlZFZhcmlhYmxlT2JqZWN0Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0
b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdCogdGhpc09iamVj
dCA9IGpzQ2FzdDxKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0Kj4oY2VsbCk7CiAgICAgQVNTRVJU
X0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwotICAgIEJhc2U6OnZpc2l0
Q2hpbGRyZW4odGhpc09iamVjdCwgc2xvdFZpc2l0b3IpOworICAgIEJhc2U6OnZpc2l0Q2hpbGRy
ZW4odGhpc09iamVjdCwgdmlzaXRvcik7CiAgICAgCiAgICAgLy8gRklYTUU6IFdlIGNvdWxkIGF2
b2lkIGxvY2tpbmcgaGVyZSBpZiBTZWdtZW50ZWRWZWN0b3Igd2FzIGxvY2stZnJlZS4gSXQgY291
bGQgYmUgbWFkZSBsb2NrLWZyZWUKICAgICAvLyByZWxhdGl2ZWx5IGVhc2lseS4KICAgICBhdXRv
IGxvY2tlciA9IGhvbGRMb2NrKHRoaXNPYmplY3QtPmNlbGxMb2NrKCkpOwogICAgIGZvciAodW5z
aWduZWQgaSA9IHRoaXNPYmplY3QtPm1fdmFyaWFibGVzLnNpemUoKTsgaS0tOykKLSAgICAgICAg
c2xvdFZpc2l0b3IuYXBwZW5kSGlkZGVuKHRoaXNPYmplY3QtPm1fdmFyaWFibGVzW2ldKTsKKyAg
ICAgICAgdmlzaXRvci5hcHBlbmRIaWRkZW4odGhpc09iamVjdC0+bV92YXJpYWJsZXNbaV0pOwog
fQogCitERUZJTkVfRVhQT1JUX1ZJU0lUX0NISUxEUkVOKEpTU2VnbWVudGVkVmFyaWFibGVPYmpl
Y3QpOworCiB2b2lkIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3Q6OmFuYWx5emVIZWFwKEpTQ2Vs
bCogY2VsbCwgSGVhcEFuYWx5emVyJiBhbmFseXplcikKIHsKICAgICBKU1NlZ21lbnRlZFZhcmlh
YmxlT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3Qq
PihjZWxsKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2VnbWVudGVk
VmFyaWFibGVPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmgJKHJldmlzaW9uIDI2ODA4NikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVPYmplY3QuaAko
d29ya2luZyBjb3B5KQpAQCAtODYsNyArODYsNyBAQCBwdWJsaWM6CiAgICAgLy8gdGhlIGluZGV4
IG9mIHRoZSBmaXJzdCBvbmUgYWRkZWQuCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgU2NvcGVPZmZz
ZXQgYWRkVmFyaWFibGVzKHVuc2lnbmVkIG51bWJlck9mVmFyaWFibGVzVG9BZGQsIEpTVmFsdWUp
OwogICAgIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4o
SlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX0VYUE9SVF9WSVNJVF9DSElMRFJF
TjsKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBhbmFseXplSGVhcChKU0NlbGwq
LCBIZWFwQW5hbHl6ZXImKTsKICAgICAKIHByb3RlY3RlZDoKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTU2V0SXRlcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2V0SXRlcmF0b3IuY3BwCShyZXZpc2lvbiAyNjgwODYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NldEl0ZXJhdG9yLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNTcsMTMgKzU3LDE2IEBAIHZvaWQgSlNTZXRJdGVyYXRvcjo6ZmluaXNo
Q3JlYXRpb24oVk0mIHYKICAgICAgICAgQmFzZTo6aW50ZXJuYWxGaWVsZChpbmRleCkuc2V0KHZt
LCB0aGlzLCB2YWx1ZXNbaW5kZXhdKTsKIH0KIAotdm9pZCBKU1NldEl0ZXJhdG9yOjp2aXNpdENo
aWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBl
bmFtZSBWaXNpdG9yPgordm9pZCBKU1NldEl0ZXJhdG9yOjp2aXNpdENoaWxkcmVuSW1wbChKU0Nl
bGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpz
Q2FzdDxKU1NldEl0ZXJhdG9yKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklU
Uyh0aGlzT2JqZWN0LCBpbmZvKCkpOwogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVj
dCwgdmlzaXRvcik7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU1NldEl0ZXJhdG9yKTsK
KwogSlNWYWx1ZSBKU1NldEl0ZXJhdG9yOjpjcmVhdGVQYWlyKEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIEpTVmFsdWUga2V5LCBKU1ZhbHVlIHZhbHVlKQogewogICAgIE1hcmtlZEFyZ3Vt
ZW50QnVmZmVyIGFyZ3M7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Nl
dEl0ZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNTZXRJdGVyYXRvci5oCShyZXZpc2lvbiAyNjgwODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1NldEl0ZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTEzMCw3ICsxMzAs
NyBAQCBwcml2YXRlOgogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZmluaXNoQ3JlYXRpb24o
Vk0mLCBKU1NldCosIEl0ZXJhdGlvbktpbmQpOwogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0m
KTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBKU1ZhbHVlIGNyZWF0ZVBhaXIoSlNHbG9iYWxPYmpl
Y3QqLCBKU1ZhbHVlLCBKU1ZhbHVlKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpT
Q2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIH07CiBT
VEFUSUNfQVNTRVJUX0lTX1RSSVZJQUxMWV9ERVNUUlVDVElCTEUoSlNTZXRJdGVyYXRvcik7CiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU291cmNlQ29kZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTb3VyY2VDb2RlLmNw
cAkocmV2aXNpb24gMjY4MDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNT
b3VyY2VDb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsOCBAQAogI2luY2x1ZGUg
ImNvbmZpZy5oIgogI2luY2x1ZGUgIkpTU291cmNlQ29kZS5oIgogCisjaW5jbHVkZSAiSlNDZWxs
SW5saW5lcy5oIiAvLyBtbGFtIFRFU1QKKwogbmFtZXNwYWNlIEpTQyB7CiAKIGNvbnN0IENsYXNz
SW5mbyBKU1NvdXJjZUNvZGU6OnNfaW5mbyA9IHsgIkpTU291cmNlQ29kZSIsIG51bGxwdHIsIG51
bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNTb3VyY2VDb2RlKSB9OwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmNwcAkocmV2aXNpb24g
MjY4MDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMDUsNyArMTA1LDggQEAgc2l6ZV90IEpTU3RyaW5nOjplc3RpbWF0
ZWRTaXplKEpTQ2VsbCogYwogICAgIHJldHVybiBCYXNlOjplc3RpbWF0ZWRTaXplKGNlbGwsIHZt
KSArIGJpdHdpc2VfY2FzdDxTdHJpbmdJbXBsKj4ocG9pbnRlciktPmNvc3REdXJpbmdHQygpOwog
fQogCi12b2lkIEpTU3RyaW5nOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0
b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1N0cmluZzo6
dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAg
IEpTU3RyaW5nKiB0aGlzT2JqZWN0ID0gYXNTdHJpbmcoY2VsbCk7CiAgICAgQVNTRVJUX0dDX09C
SkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtMTQzLDYgKzE0NCw4IEBAIHZv
aWQgSlNTdHJpbmc6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWwKICAgICAgICAgdmlzaXRvci5y
ZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQoaW1wbC0+Y29zdER1cmluZ0dDKCkpOwogfQogCitERUZJ
TkVfVklTSVRfQ0hJTERSRU4oSlNTdHJpbmcpOworCiBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVk
IG1heExlbmd0aEZvck9uU3RhY2tSZXNvbHZlID0gMjA0ODsKIAogdm9pZCBKU1JvcGVTdHJpbmc6
OnJlc29sdmVSb3BlSW50ZXJuYWw4KExDaGFyKiBidWZmZXIpIGNvbnN0CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmgJKHJldmlzaW9uIDI2ODA4NikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmgJKHdvcmtpbmcgY29weSkKQEAg
LTIxOCw3ICsyMTgsNyBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgdm9pZCBkdW1wVG9TdHJlYW0o
Y29uc3QgSlNDZWxsKiwgUHJpbnRTdHJlYW0mKTsKICAgICBzdGF0aWMgc2l6ZV90IGVzdGltYXRl
ZFNpemUoSlNDZWxsKiwgVk0mKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2Vs
bCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIEFM
V0FZU19JTkxJTkUgYm9vbCBpc1JvcGUoKSBjb25zdAogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nSXRlcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nSXRlcmF0b3IuY3BwCShyZXZpc2lv
biAyNjgwODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZ0l0ZXJh
dG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTEsMTEgKzUxLDE0IEBAIEpTU3RyaW5nSXRlcmF0
b3IqIEpTU3RyaW5nSXRlcmF0b3I6OmNsb24KICAgICByZXR1cm4gY2xvbmU7CiB9CiAKLXZvaWQg
SlNTdHJpbmdJdGVyYXRvcjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9y
JiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNTdHJpbmdJdGVy
YXRvcjo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQog
ewogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNTdHJpbmdJdGVyYXRvcio+KGNlbGwp
OwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKICAg
ICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwogfQogCitERUZJTkVf
VklTSVRfQ0hJTERSRU4oSlNTdHJpbmdJdGVyYXRvcik7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmdJdGVyYXRvci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nSXRlcmF0
b3IuaAkocmV2aXNpb24gMjY4MDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNTdHJpbmdJdGVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC03OSw3ICs3OSw3IEBAIHB1Ymxp
YzoKICAgICBKU1ZhbHVlIGluZGV4KCkgY29uc3QgeyByZXR1cm4gaW50ZXJuYWxGaWVsZChGaWVs
ZDo6SW5kZXgpLmdldCgpOyB9CiAgICAgSlNTdHJpbmdJdGVyYXRvciogY2xvbmUoSlNHbG9iYWxP
YmplY3QqKTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZp
c2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiBwcml2YXRlOgogICAgIEpT
U3RyaW5nSXRlcmF0b3IoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3Qu
Y3BwCShyZXZpc2lvbiAyNjgwODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U1N5bWJvbFRhYmxlT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsOCBAQCBu
YW1lc3BhY2UgSlNDIHsKIAogY29uc3QgQ2xhc3NJbmZvIEpTU3ltYm9sVGFibGVPYmplY3Q6OnNf
aW5mbyA9IHsgIlN5bWJvbFRhYmxlT2JqZWN0IiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVs
bHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1N5bWJvbFRhYmxlT2JqZWN0KSB9OwogCi12b2lk
IEpTU3ltYm9sVGFibGVPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90Vmlz
aXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTU3ltYm9s
VGFibGVPYmplY3Q6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlz
aXRvcikKIHsKICAgICBKU1N5bWJvbFRhYmxlT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpT
U3ltYm9sVGFibGVPYmplY3QqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRT
KHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC00NCw2ICs0NSw4IEBAIHZvaWQgSlNTeW1ib2xUYWJs
ZU9iamVjdDo6dmlzaXRDaGlsZHJlbigKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5t
X3N5bWJvbFRhYmxlKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTU3ltYm9sVGFibGVP
YmplY3QpOworCiBib29sIEpTU3ltYm9sVGFibGVPYmplY3Q6OmRlbGV0ZVByb3BlcnR5KEpTQ2Vs
bCogY2VsbCwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lIHByb3Bl
cnR5TmFtZSwgRGVsZXRlUHJvcGVydHlTbG90JiBzbG90KQogewogICAgIEpTU3ltYm9sVGFibGVP
YmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNTeW1ib2xUYWJsZU9iamVjdCo+KGNlbGwpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVjdC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3ltYm9sVGFi
bGVPYmplY3QuaAkocmV2aXNpb24gMjY4MDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC03MCw3ICs3MCw3
IEBAIHByb3RlY3RlZDoKICAgICAgICAgbV9zeW1ib2xUYWJsZS5zZXQodm0sIHRoaXMsIHN5bWJv
bFRhYmxlKTsKICAgICB9CiAgICAgCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0Nl
bGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAgICAgCiBw
cml2YXRlOgogICAgIFdyaXRlQmFycmllcjxTeW1ib2xUYWJsZT4gbV9zeW1ib2xUYWJsZTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTV2Vha09iamVjdFJlZi5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNXZWFrT2JqZWN0UmVm
LmNwcAkocmV2aXNpb24gMjY4MDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNXZWFrT2JqZWN0UmVmLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksNyArMzksOCBAQCB2b2lk
IEpTV2Vha09iamVjdFJlZjo6ZmluaXNoQ3JlYXRpb24oVk0mCiAgICAgQmFzZTo6ZmluaXNoQ3Jl
YXRpb24odm0pOwogfQogCi12b2lkIEpTV2Vha09iamVjdFJlZjo6dmlzaXRDaGlsZHJlbihKU0Nl
bGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRv
cj4KK3ZvaWQgSlNXZWFrT2JqZWN0UmVmOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGws
IFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1dl
YWtPYmplY3RSZWYqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNP
YmplY3QsIGluZm8oKSk7CkBAIC01MSw2ICs1Miw4IEBAIHZvaWQgSlNXZWFrT2JqZWN0UmVmOjp2
aXNpdENoaWxkcmVuKEpTQ2UKICAgICB9CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU1dl
YWtPYmplY3RSZWYpOworCiB2b2lkIEpTV2Vha09iamVjdFJlZjo6ZmluYWxpemVVbmNvbmRpdGlv
bmFsbHkoVk0mIHZtKQogewogICAgIGlmIChtX3ZhbHVlICYmICF2bS5oZWFwLmlzTWFya2VkKG1f
dmFsdWUuZ2V0KCkpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNXZWFr
T2JqZWN0UmVmLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNXZWFrT2JqZWN0UmVmLmgJKHJldmlzaW9uIDI2ODA4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTV2Vha09iamVjdFJlZi5oCSh3b3JraW5nIGNvcHkpCkBAIC02NSw3ICs2
NSw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICB2b2lkIGZpbmFsaXplVW5jb25kaXRpb25hbGx5
KFZNJik7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRv
ciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKIHByaXZhdGU6CiAgICAgSlNXZWFr
T2JqZWN0UmVmKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU1dpdGhTY29wZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNXaXRoU2NvcGUuY3BwCShyZXZpc2lvbiAyNjgwODYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1dpdGhTY29wZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQxLDcgKzQxLDggQEAgSlNXaXRoU2NvcGUqIEpTV2l0aFNjb3BlOjpjcmVh
dGUoCiAgICAgcmV0dXJuIHdpdGhTY29wZTsKIH0KIAotdm9pZCBKU1dpdGhTY29wZTo6dmlzaXRD
aGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlw
ZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNXaXRoU2NvcGU6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2Vs
bCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU1dpdGhTY29wZSogdGhpc09iamVj
dCA9IGpzQ2FzdDxKU1dpdGhTY29wZSo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5I
RVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTQ5LDYgKzUwLDggQEAgdm9pZCBKU1dpdGhT
Y29wZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIAogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmpl
Y3QtPm1fb2JqZWN0KTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTV2l0aFNjb3BlKTsK
KwogU3RydWN0dXJlKiBKU1dpdGhTY29wZTo6Y3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90bykKIHsKICAgICByZXR1cm4gU3Ry
dWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG8sIFR5cGVJbmZvKFdpdGhTY29w
ZVR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTV2l0aFNjb3BlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNXaXRoU2NvcGUuaAkocmV2aXNpb24gMjY4MDg2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNXaXRoU2NvcGUuaAkod29ya2luZyBjb3B5KQpAQCAt
NDMsNyArNDMsNyBAQCBwdWJsaWM6CiAKICAgICBKU09iamVjdCogb2JqZWN0KCkgeyByZXR1cm4g
bV9vYmplY3QuZ2V0KCk7IH0KIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgc3Rh
dGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1Zh
bHVlIHByb3RvKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNXcmFw
cGVyT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU1dyYXBwZXJPYmplY3QuY3BwCShyZXZpc2lvbiAyNjgwODYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU1dyYXBwZXJPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
OSwxMSArMjksMTQgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIFNUQVRJQ19BU1NFUlRfSVNfVFJJVklB
TExZX0RFU1RSVUNUSUJMRShKU1dyYXBwZXJPYmplY3QpOwogCi12b2lkIEpTV3JhcHBlck9iamVj
dDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVt
cGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNXcmFwcGVyT2JqZWN0Ojp2aXNpdENoaWxk
cmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0byogdGhp
c09iamVjdCA9IGpzQ2FzdDxKU1dyYXBwZXJPYmplY3QqPihjZWxsKTsKICAgICBBU1NFUlRfR0Nf
T0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAgICAgQmFzZTo6dmlzaXRDaGls
ZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKIH0KIAorREVGSU5FX0VYUE9SVF9WSVNJVF9DSElM
RFJFTihKU1dyYXBwZXJPYmplY3QpOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTV3JhcHBlck9iamVjdC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTV3JhcHBlck9iamVjdC5oCShyZXZpc2lv
biAyNjgwODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1dyYXBwZXJPYmpl
Y3QuaAkod29ya2luZyBjb3B5KQpAQCAtNjQsNyArNjQsNyBAQCBwdWJsaWM6CiBwcm90ZWN0ZWQ6
CiAgICAgZXhwbGljaXQgSlNXcmFwcGVyT2JqZWN0KFZNJiwgU3RydWN0dXJlKik7CiAKLSAgICBK
U19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RW
aXNpdG9yJik7CisgICAgREVDTEFSRV9FWFBPUlRfVklTSVRfQ0hJTERSRU47CiB9OwogCiBpbmxp
bmUgSlNXcmFwcGVyT2JqZWN0OjpKU1dyYXBwZXJPYmplY3QoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01vZHVsZVByb2dy
YW1FeGVjdXRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9Nb2R1bGVQcm9ncmFtRXhlY3V0YWJsZS5jcHAJKHJldmlzaW9uIDI2ODA4NikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01vZHVsZVByb2dyYW1FeGVjdXRhYmxlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNzksNyArNzksOCBAQCBhdXRvIE1vZHVsZVByb2dyYW1FeGVjdXRh
YmxlOjplbnN1cmVUZW1wCiAgICAgcmV0dXJuIGVuc3VyZVRlbXBsYXRlT2JqZWN0TWFwSW1wbCht
X3RlbXBsYXRlT2JqZWN0TWFwKTsKIH0KIAotdm9pZCBNb2R1bGVQcm9ncmFtRXhlY3V0YWJsZTo6
dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxh
dGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGU6OnZpc2l0
Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBNb2R1
bGVQcm9ncmFtRXhlY3V0YWJsZSogdGhpc09iamVjdCA9IGpzQ2FzdDxNb2R1bGVQcm9ncmFtRXhl
Y3V0YWJsZSo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVj
dCwgaW5mbygpKTsKQEAgLTk0LDQgKzk1LDYgQEAgdm9pZCBNb2R1bGVQcm9ncmFtRXhlY3V0YWJs
ZTo6dmlzaXRDaGlsZAogICAgIH0KIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKE1vZHVsZVBy
b2dyYW1FeGVjdXRhYmxlKTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9Nb2R1bGVQcm9ncmFtRXhlY3V0YWJsZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01vZHVsZVByb2dyYW1FeGVjdXRhYmxl
LmgJKHJldmlzaW9uIDI2ODA4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01v
ZHVsZVByb2dyYW1FeGVjdXRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTc3LDcgKzc3LDcgQEAg
cHJpdmF0ZToKIAogICAgIE1vZHVsZVByb2dyYW1FeGVjdXRhYmxlKEpTR2xvYmFsT2JqZWN0Kiwg
Y29uc3QgU291cmNlQ29kZSYpOwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0Nl
bGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBX
cml0ZUJhcnJpZXI8VW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrPiBtX3VubGlua2VkTW9k
dWxlUHJvZ3JhbUNvZGVCbG9jazsKICAgICBXcml0ZUJhcnJpZXI8U3ltYm9sVGFibGU+IG1fbW9k
dWxlRW52aXJvbm1lbnRTeW1ib2xUYWJsZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1Byb2dyYW1FeGVjdXRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9Qcm9ncmFtRXhlY3V0YWJsZS5jcHAJKHJldmlzaW9uIDI2ODA4NikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb2dyYW1FeGVjdXRhYmxlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjA4LDcgKzIwOCw4IEBAIGF1dG8gUHJvZ3JhbUV4ZWN1dGFibGU6
OmVuc3VyZVRlbXBsYXRlT2IKICAgICByZXR1cm4gZW5zdXJlVGVtcGxhdGVPYmplY3RNYXBJbXBs
KG1fdGVtcGxhdGVPYmplY3RNYXApOwogfQogCi12b2lkIFByb2dyYW1FeGVjdXRhYmxlOjp2aXNp
dENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0
eXBlbmFtZSBWaXNpdG9yPgordm9pZCBQcm9ncmFtRXhlY3V0YWJsZTo6dmlzaXRDaGlsZHJlbklt
cGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFByb2dyYW1FeGVjdXRh
YmxlKiB0aGlzT2JqZWN0ID0ganNDYXN0PFByb2dyYW1FeGVjdXRhYmxlKj4oY2VsbCk7CiAgICAg
QVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtMjIyLDQg
KzIyMyw2IEBAIHZvaWQgUHJvZ3JhbUV4ZWN1dGFibGU6OnZpc2l0Q2hpbGRyZW4oSlMKICAgICB9
CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihQcm9ncmFtRXhlY3V0YWJsZSk7CisKIH0gLy8g
bmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvZ3Jh
bUV4ZWN1dGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9Qcm9ncmFtRXhlY3V0YWJsZS5oCShyZXZpc2lvbiAyNjgwODYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9Qcm9ncmFtRXhlY3V0YWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC04
MSw3ICs4MSw3IEBAIHByaXZhdGU6CiAKICAgICBQcm9ncmFtRXhlY3V0YWJsZShKU0dsb2JhbE9i
amVjdCosIGNvbnN0IFNvdXJjZUNvZGUmKTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwog
CiAgICAgV3JpdGVCYXJyaWVyPFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jaz4gbV91bmxpbmtlZFBy
b2dyYW1Db2RlQmxvY2s7CiAgICAgV3JpdGVCYXJyaWVyPEV4ZWN1dGFibGVUb0NvZGVCbG9ja0Vk
Z2U+IG1fcHJvZ3JhbUNvZGVCbG9jazsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1Byb3BlcnR5TWFwSGFzaFRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvUHJvcGVydHlNYXBIYXNoVGFibGUuaAkocmV2aXNpb24gMjY4MDg2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlNYXBIYXNoVGFibGUuaAko
d29ya2luZyBjb3B5KQpAQCAtMTMzLDcgKzEzMyw3IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBuZWVkc0Rlc3RydWN0aW9uID0gdHJ1ZTsKICAgICBzdGF0aWMgdm9pZCBk
ZXN0cm95KEpTQ2VsbCopOwotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwg
U2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgREVDTEFS
RV9FWFBPUlRfSU5GTzsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJv
cGVydHlUYWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvUHJvcGVydHlUYWJsZS5jcHAJKHJldmlzaW9uIDI2ODA4NikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5VGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTgs
NyArMTE4LDggQEAgdm9pZCBQcm9wZXJ0eVRhYmxlOjpmaW5pc2hDcmVhdGlvbihWTSYgdgogICAg
IHZtLmhlYXAucmVwb3J0RXh0cmFNZW1vcnlBbGxvY2F0ZWQoZGF0YVNpemUoKSk7CiB9CiAKLXZv
aWQgUHJvcGVydHlUYWJsZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9y
JiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgUHJvcGVydHlUYWJs
ZTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewog
ICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8UHJvcGVydHlUYWJsZSo+KGNlbGwpOwogICAg
IEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTEyNiw2
ICsxMjcsOCBAQCB2b2lkIFByb3BlcnR5VGFibGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsCiAgICAg
dmlzaXRvci5yZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQodGhpc09iamVjdC0+ZGF0YVNpemUoKSk7
CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihQcm9wZXJ0eVRhYmxlKTsKKwogdm9pZCBQcm9w
ZXJ0eVRhYmxlOjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKIHsKICAgICBzdGF0aWNfY2FzdDxQcm9w
ZXJ0eVRhYmxlKj4oY2VsbCktPlByb3BlcnR5VGFibGU6On5Qcm9wZXJ0eVRhYmxlKCk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm94eU9iamVjdC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJveHlPYmplY3QuY3BwCShyZXZp
c2lvbiAyNjgwODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm94eU9iamVj
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExODEsNyArMTE4MSw4IEBAIGJvb2wgUHJveHlPYmpl
Y3Q6OmlzUmV2b2tlZCgpIGNvbnN0CiAgICAgcmV0dXJuIGhhbmRsZXIoKS5pc051bGwoKTsKIH0K
IAotdm9pZCBQcm94eU9iamVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNp
dG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgUHJveHlPYmpl
Y3Q6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsK
ICAgICBQcm94eU9iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxQcm94eU9iamVjdCo+KGNlbGwp
OwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAg
LTExOTEsNCArMTE5Miw2IEBAIHZvaWQgUHJveHlPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiAKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2hhbmRsZXIpOwogfQogCitERUZJ
TkVfVklTSVRfQ0hJTERSRU4oUHJveHlPYmplY3QpOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3h5T2JqZWN0LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJveHlPYmplY3QuaAkocmV2aXNp
b24gMjY4MDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJveHlPYmplY3Qu
aAkod29ya2luZyBjb3B5KQpAQCAtOTYsNyArOTYsNyBAQCBwcml2YXRlOgogICAgIHN0YXRpYyBO
T19SRVRVUk5fRFVFX1RPX0NSQVNIIHZvaWQgZ2V0R2VuZXJpY1Byb3BlcnR5TmFtZXMoSlNPYmpl
Y3QqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2Rl
KTsKICAgICBzdGF0aWMgYm9vbCBzZXRQcm90b3R5cGUoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVj
dCosIEpTVmFsdWUgcHJvdG90eXBlLCBib29sIHNob3VsZFRocm93SWZDYW50U2V0KTsKICAgICBz
dGF0aWMgSlNWYWx1ZSBnZXRQcm90b3R5cGUoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCopOwot
ICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAg
ICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3RD
b21tb24oSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwogICAg
IGJvb2wgcGVyZm9ybUludGVybmFsTWV0aG9kR2V0T3duUHJvcGVydHkoSlNHbG9iYWxPYmplY3Qq
LCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvUHJveHlSZXZva2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1Byb3h5UmV2b2tlLmNwcAkocmV2aXNpb24gMjY4MDg2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJveHlSZXZva2UuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC02OSw3ICs2OSw4IEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihwZXJmb3JtUHJveHlS
ZXYKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCi12b2lk
IFByb3h5UmV2b2tlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZp
c2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBQcm94eVJldm9rZTo6dmlz
aXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFBy
b3h5UmV2b2tlKiB0aGlzT2JqZWN0ID0ganNDYXN0PFByb3h5UmV2b2tlKj4oY2VsbCk7CiAgICAg
QVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNzgsNCAr
NzksNiBAQCB2b2lkIFByb3h5UmV2b2tlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogCiAgICAgdmlz
aXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9wcm94eSk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElM
RFJFTihQcm94eVJldm9rZSk7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJveHlSZXZva2UuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm94eVJldm9rZS5oCShyZXZpc2lvbiAyNjgwODYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm94eVJldm9rZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC01Miw3ICs1Miw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICB2b2lkIGZpbmlzaENy
ZWF0aW9uKFZNJiwgUHJveHlPYmplY3QqKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVu
KEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKICAg
ICBKU1ZhbHVlIHByb3h5KCkgeyByZXR1cm4gbV9wcm94eS5nZXQoKTsgfQogICAgIHZvaWQgc2V0
UHJveHlUb051bGwoVk0mIHZtKSB7IHJldHVybiBtX3Byb3h5LnNldCh2bSwgdGhpcywganNOdWxs
KCkpOyB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE9iamVj
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhw
T2JqZWN0LmNwcAkocmV2aXNpb24gMjY4MDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvUmVnRXhwT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYsNyArNDYsOCBAQCB2
b2lkIFJlZ0V4cE9iamVjdDo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtCiAgICAgQVNTRVJUKHR5cGUo
KSA9PSBSZWdFeHBPYmplY3RUeXBlKTsKIH0KIAotdm9pZCBSZWdFeHBPYmplY3Q6OnZpc2l0Q2hp
bGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVu
YW1lIFZpc2l0b3I+Cit2b2lkIFJlZ0V4cE9iamVjdDo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxs
KiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFJlZ0V4cE9iamVjdCogdGhpc09iamVj
dCA9IGpzQ2FzdDxSZWdFeHBPYmplY3QqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lO
SEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC01NSw2ICs1Niw4IEBAIHZvaWQgUmVnRXhw
T2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCoKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2Jq
ZWN0LT5tX2xhc3RJbmRleCk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihSZWdFeHBPYmpl
Y3QpOworCiBib29sIFJlZ0V4cE9iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiBv
YmplY3QsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0
eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3Qt
PnZtKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBPYmplY3Qu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBPYmpl
Y3QuaAkocmV2aXNpb24gMjY4MDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
UmVnRXhwT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEzMyw3ICsxMzMsNyBAQCBwcml2YXRl
OgogICAgIEpTX0VYUE9SVF9QUklWQVRFIFJlZ0V4cE9iamVjdChWTSYsIFN0cnVjdHVyZSosIFJl
Z0V4cCopOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsK
IAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsK
KyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgYm9vbCBsYXN0SW5kZXhJc1dyaXRh
YmxlKCkgY29uc3QKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
Y29wZWRBcmd1bWVudHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1Njb3BlZEFyZ3VtZW50cy5jcHAJKHJldmlzaW9uIDI2ODA4NikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlZEFyZ3VtZW50cy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTk4LDcgKzk4LDggQEAgU2NvcGVkQXJndW1lbnRzKiBTY29wZWRBcmd1bWVudHM6OmNyZWF0
ZQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQgU2NvcGVkQXJndW1lbnRzOjp2aXNpdENo
aWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBl
bmFtZSBWaXNpdG9yPgordm9pZCBTY29wZWRBcmd1bWVudHM6OnZpc2l0Q2hpbGRyZW5JbXBsKEpT
Q2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBTY29wZWRBcmd1bWVudHMqIHRo
aXNPYmplY3QgPSBzdGF0aWNfY2FzdDxTY29wZWRBcmd1bWVudHMqPihjZWxsKTsKICAgICBBU1NF
UlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC0xMTUsNiArMTE2
LDggQEAgdm9pZCBTY29wZWRBcmd1bWVudHM6OnZpc2l0Q2hpbGRyZW4oSlNDZQogICAgIH0KIH0K
IAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKFNjb3BlZEFyZ3VtZW50cyk7CisKIFN0cnVjdHVyZSog
U2NvcGVkQXJndW1lbnRzOjpjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKIHsKICAgICByZXR1cm4gU3RydWN0dXJl
OjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhTY29wZWRBcmd1
bWVudHNUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TY29wZWRBcmd1bWVudHMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29wZWRBcmd1bWVudHMuaAkocmV2aXNpb24gMjY4MDg2
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVkQXJndW1lbnRzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTYzLDkgKzYzLDkgQEAgcHVibGljOgogICAgIAogICAgIC8vIENyZWF0
ZXMgYW4gYXJndW1lbnRzIG9iamVjdCBieSBjb3B5aW5nIHRoZSBhcmd1bWVudHMgZnJvbSBhIHdl
bGwtZGVmaW5lZCBzdGFjayBsb2NhdGlvbi4KICAgICBzdGF0aWMgU2NvcGVkQXJndW1lbnRzKiBj
cmVhdGVCeUNvcHlpbmdGcm9tKFZNJiwgU3RydWN0dXJlKiwgUmVnaXN0ZXIqIGFyZ3VtZW50c1N0
YXJ0LCB1bnNpZ25lZCB0b3RhbExlbmd0aCwgSlNGdW5jdGlvbiogY2FsbGVlLCBTY29wZWRBcmd1
bWVudHNUYWJsZSosIEpTTGV4aWNhbEVudmlyb25tZW50Kik7Ci0gICAgCi0gICAgc3RhdGljIHZv
aWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwotICAgIAorCisgICAgREVD
TEFSRV9WSVNJVF9DSElMRFJFTjsKKwogICAgIHVpbnQzMl90IGludGVybmFsTGVuZ3RoKCkgY29u
c3QKICAgICB7CiAgICAgICAgIHJldHVybiBtX3RvdGFsTGVuZ3RoOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU3BhcnNlQXJyYXlWYWx1ZU1hcC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3BhcnNlQXJyYXlWYWx1ZU1hcC5jcHAJ
KHJldmlzaW9uIDI2ODA4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NwYXJz
ZUFycmF5VmFsdWVNYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTAsNyArMjEwLDggQEAgSlNW
YWx1ZSBTcGFyc2VBcnJheUVudHJ5OjpnZXROb25TcGFyc2VNbwogICAgIHJldHVybiBCYXNlOjpn
ZXQoKTsKIH0KIAotdm9pZCBTcGFyc2VBcnJheVZhbHVlTWFwOjp2aXNpdENoaWxkcmVuKEpTQ2Vs
bCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
Pgordm9pZCBTcGFyc2VBcnJheVZhbHVlTWFwOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNl
bGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCogdGhpc09i
amVjdCA9IGpzQ2FzdDxTcGFyc2VBcnJheVZhbHVlTWFwKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dD
X09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtMjIzLDUgKzIyNCw3IEBA
IHZvaWQgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6dmlzaXRDaGlsZHJlbigKICAgICB2aXNpdG9yLnJl
cG9ydEV4dHJhTWVtb3J5VmlzaXRlZCh0aGlzT2JqZWN0LT5tX3JlcG9ydGVkQ2FwYWNpdHkgKiBz
aXplb2YoTWFwOjpLZXlWYWx1ZVBhaXJUeXBlKSk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJF
TihTcGFyc2VBcnJheVZhbHVlTWFwKTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NwYXJzZUFycmF5VmFsdWVNYXAuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TcGFyc2VBcnJheVZhbHVlTWFw
LmgJKHJldmlzaW9uIDI2ODA4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Nw
YXJzZUFycmF5VmFsdWVNYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMTE1LDcgKzExNSw3IEBAIHB1
YmxpYzoKICAgICAKICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBK
U0dsb2JhbE9iamVjdCosIEpTVmFsdWUgcHJvdG90eXBlKTsKIAotICAgIHN0YXRpYyB2b2lkIHZp
c2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NI
SUxEUkVOOwogCiAgICAgYm9vbCBzcGFyc2VNb2RlKCkKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TdGFja0ZyYW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TdGFja0ZyYW1lLmNwcAkocmV2aXNpb24gMjY4MDg2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RhY2tGcmFtZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE0Miw3ICsxNDIsOCBAQCBTdHJpbmcgU3RhY2tGcmFtZTo6dG9TdHJpbmcoVk0m
IHZtKSBjb25zCiAgICAgcmV0dXJuIHRyYWNlQnVpbGQudG9TdHJpbmcoKS5pbXBsKCk7CiB9CiAK
LXZvaWQgU3RhY2tGcmFtZTo6dmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3Rl
bXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFN0YWNrRnJhbWU6OnZpc2l0Q2hpbGRyZW5J
bXBsKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgaWYgKG1fY2FsbGVlKQogICAgICAgICB2aXNp
dG9yLmFwcGVuZChtX2NhbGxlZSk7CkBAIC0xNTAsNSArMTUxLDcgQEAgdm9pZCBTdGFja0ZyYW1l
Ojp2aXNpdENoaWxkcmVuKFNsb3RWaXNpdAogICAgICAgICB2aXNpdG9yLmFwcGVuZChtX2NvZGVC
bG9jayk7CiB9CiAKK0RFRklORV9JTlNUQU5DRV9WSVNJVF9DSElMRFJFTihTdGFja0ZyYW1lKTsK
KwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1N0YWNrRnJhbWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TdGFja0ZyYW1lLmgJKHJldmlzaW9uIDI2ODA4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1N0YWNrRnJhbWUuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBA
QAogCiAjaW5jbHVkZSAiSGVhcC5oIgogI2luY2x1ZGUgIlZNLmgiCisjaW5jbHVkZSAiU2xvdFZp
c2l0b3JNYWNyb3MuaCIKICNpbmNsdWRlICJXYXNtSW5kZXhPck5hbWUuaCIKICNpbmNsdWRlICJX
cml0ZUJhcnJpZXIuaCIKICNpbmNsdWRlIDxsaW1pdHMuaD4KQEAgLTM1LDcgKzM2LDYgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAKIGNsYXNzIENvZGVCbG9jazsKIGNsYXNzIEpTT2JqZWN0OwotY2xhc3Mg
U2xvdFZpc2l0b3I7CiAKIGNsYXNzIFN0YWNrRnJhbWUgewogcHVibGljOgpAQCAtNTgsNyArNTgs
NyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX2J5dGVjb2RlSW5kZXg7CiAgICAgfQogICAg
IAotICAgIHZvaWQgdmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfSU5T
VEFOQ0VfVklTSVRfQ0hJTERSRU47CiAgICAgYm9vbCBpc01hcmtlZChWTSYgdm0pIGNvbnN0IHsg
cmV0dXJuICghbV9jYWxsZWUgfHwgdm0uaGVhcC5pc01hcmtlZChtX2NhbGxlZS5nZXQoKSkpICYm
ICghbV9jb2RlQmxvY2sgfHwgdm0uaGVhcC5pc01hcmtlZChtX2NvZGVCbG9jay5nZXQoKSkpOyB9
CiAKIHByaXZhdGU6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1
cmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVj
dHVyZS5jcHAJKHJldmlzaW9uIDI2ODA4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1N0cnVjdHVyZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNzksNyArMTI3OSw4IEBAIHZv
aWQgU3RydWN0dXJlOjpkaWRUcmFuc2l0aW9uRnJvbVRoaXNTdHIKICAgICAgICAgbV90cmFuc2l0
aW9uV2F0Y2hwb2ludFNldC5maXJlQWxsKHZtKCksIFN0cnVjdHVyZUZpcmVEZXRhaWwodGhpcykp
OwogfQogCi12b2lkIFN0cnVjdHVyZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgU3RydWN0
dXJlOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7
CiAgICAgU3RydWN0dXJlKiB0aGlzT2JqZWN0ID0ganNDYXN0PFN0cnVjdHVyZSo+KGNlbGwpOwog
ICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTEz
MDcsNiArMTMwOCw4IEBAIHZvaWQgU3RydWN0dXJlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2UK
ICAgICAgICAgdGhpc09iamVjdC0+bV9wcm9wZXJ0eVRhYmxlVW5zYWZlLmNsZWFyKCk7CiB9CiAK
K0RFRklORV9WSVNJVF9DSElMRFJFTihTdHJ1Y3R1cmUpOworCiBib29sIFN0cnVjdHVyZTo6aXND
aGVhcER1cmluZ0dDKFZNJiB2bSkKIHsKICAgICAvLyBGSVhNRTogV2UgY291bGQgbWFrZSB0aGlz
IGV2ZW4gc2FmZXIgYnkgcmV0dXJuaW5nIGZhbHNlIGlmIHRoaXMgc3RydWN0dXJlJ3MgcHJvcGVy
dHkgdGFibGUKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5o
CShyZXZpc2lvbiAyNjgwODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1
Y3R1cmUuaAkod29ya2luZyBjb3B5KQpAQCAtMzA3LDcgKzMwNyw3IEBAIHB1YmxpYzoKICAgICBK
U1ZhbHVlIHByb3RvdHlwZUZvckxvb2t1cChKU0dsb2JhbE9iamVjdCosIEpTQ2VsbCogYmFzZSkg
Y29uc3Q7CiAgICAgU3RydWN0dXJlQ2hhaW4qIHByb3RvdHlwZUNoYWluKFZNJiwgSlNHbG9iYWxP
YmplY3QqLCBKU09iamVjdCogYmFzZSkgY29uc3Q7CiAgICAgU3RydWN0dXJlQ2hhaW4qIHByb3Rv
dHlwZUNoYWluKEpTR2xvYmFsT2JqZWN0KiwgSlNPYmplY3QqIGJhc2UpIGNvbnN0OwotICAgIHN0
YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNM
QVJFX1ZJU0lUX0NISUxEUkVOOwogICAgIAogICAgIC8vIEEgU3RydWN0dXJlIGlzIGNoZWFwIHRv
IG1hcmsgZHVyaW5nIEdDIGlmIGRvaW5nIHNvIHdvdWxkIG9ubHkgYWRkIGEgc21hbGwgYW5kIGJv
dW5kZWQgYW1vdW50CiAgICAgLy8gdG8gb3VyIGhlYXAgZm9vdHByaW50LiBGb3IgZXhhbXBsZSwg
aWYgdGhlIHN0cnVjdHVyZSByZWZlcnMgdG8gYSBnbG9iYWwgb2JqZWN0IHRoYXQgaXMgbm90Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVDaGFpbi5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlQ2hhaW4u
Y3BwCShyZXZpc2lvbiAyNjgwODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
dHJ1Y3R1cmVDaGFpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY2LDcgKzY2LDggQEAgdm9pZCBT
dHJ1Y3R1cmVDaGFpbjo6ZmluaXNoQ3JlYXRpb24oVk0mIAogICAgIH0KIH0KIAotdm9pZCBTdHJ1
Y3R1cmVDaGFpbjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNp
dG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgU3RydWN0dXJlQ2hhaW46OnZp
c2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBT
dHJ1Y3R1cmVDaGFpbiogdGhpc09iamVjdCA9IGpzQ2FzdDxTdHJ1Y3R1cmVDaGFpbio+KGNlbGwp
OwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAg
LTgwLDQgKzgxLDYgQEAgdm9pZCBTdHJ1Y3R1cmVDaGFpbjo6dmlzaXRDaGlsZHJlbihKU0NlbAog
ICAgIH0KIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKFN0cnVjdHVyZUNoYWluKTsKKwogfSAv
LyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1
Y3R1cmVDaGFpbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1N0cnVjdHVyZUNoYWluLmgJKHJldmlzaW9uIDI2ODA4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1N0cnVjdHVyZUNoYWluLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxLDcgKzUx
LDcgQEAgcHVibGljOgogCiAgICAgc3RhdGljIFN0cnVjdHVyZUNoYWluKiBjcmVhdGUoVk0mLCBK
U09iamVjdCopOwogICAgIFN0cnVjdHVyZUlEKiBoZWFkKCkgeyByZXR1cm4gbV92ZWN0b3IuZ2V0
KCk7IH0KLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9y
Jik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIHN0YXRpYyBTdHJ1Y3R1cmUq
IGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpT
VmFsdWUgcHJvdG90eXBlKQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1N0cnVjdHVyZVJhcmVEYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TdHJ1Y3R1cmVSYXJlRGF0YS5jcHAJKHJldmlzaW9uIDI2ODA4NikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZVJhcmVEYXRhLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNjcsNyArNjcsOCBAQCBTdHJ1Y3R1cmVSYXJlRGF0YTo6U3RydWN0dXJl
UmFyZURhdGEoVk0mCiAgICAgICAgIG1fcHJldmlvdXMuc2V0KHZtLCB0aGlzLCBwcmV2aW91cyk7
CiB9CiAKLXZvaWQgU3RydWN0dXJlUmFyZURhdGE6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxs
LCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lk
IFN0cnVjdHVyZVJhcmVEYXRhOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0
b3ImIHZpc2l0b3IpCiB7CiAgICAgU3RydWN0dXJlUmFyZURhdGEqIHRoaXNPYmplY3QgPSBqc0Nh
c3Q8U3RydWN0dXJlUmFyZURhdGEqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVS
SVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC04Niw2ICs4Nyw4IEBAIHZvaWQgU3RydWN0dXJl
UmFyZURhdGE6OnZpc2l0Q2hpbGRyZW4oSlMKICAgICB9CiB9CiAKK0RFRklORV9WSVNJVF9DSElM
RFJFTihTdHJ1Y3R1cmVSYXJlRGF0YSk7CisKIC8vIC0tLS0tLS0tLS0tIENhY2hlZCBzcGVjaWFs
IHByb3BlcnRpZXMgaGVscGVyIHdhdGNocG9pbnQgY2xhc3NlcyAtLS0tLS0tLS0tLQogCiBjbGFz
cyBDYWNoZWRTcGVjaWFsUHJvcGVydHlBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNo
cG9pbnQgZmluYWwgOiBwdWJsaWMgQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBv
aW50QmFzZSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVS
YXJlRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0
cnVjdHVyZVJhcmVEYXRhLmgJKHJldmlzaW9uIDI2ODA4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1N0cnVjdHVyZVJhcmVEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTY4LDcg
KzY4LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0Rlc3RydWN0
aW9uID0gdHJ1ZTsKICAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwogCi0gICAgc3Rh
dGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xB
UkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1
cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUgcHJvdG90eXBlKTsKIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFibGUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJvbFRhYmxlLmNwcAkocmV2aXNpb24g
MjY4MDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFibGUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC05Miw3ICs5Miw4IEBAIHZvaWQgU3ltYm9sVGFibGU6OmZpbmlz
aENyZWF0aW9uKFZNJiB2bSkKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CiB9CiAKLXZv
aWQgU3ltYm9sVGFibGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiB0aGlzQ2VsbCwgU2xvdFZpc2l0
b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBTeW1ib2xUYWJs
ZTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiB0aGlzQ2VsbCwgVmlzaXRvciYgdmlzaXRvcikK
IHsKICAgICBTeW1ib2xUYWJsZSogdGhpc1N5bWJvbFRhYmxlID0ganNDYXN0PFN5bWJvbFRhYmxl
Kj4odGhpc0NlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc1N5bWJvbFRh
YmxlLCBpbmZvKCkpOwpAQCAtMTA4LDYgKzEwOSw4IEBAIHZvaWQgU3ltYm9sVGFibGU6OnZpc2l0
Q2hpbGRyZW4oSlNDZWxsKiAKICAgICB0aGlzU3ltYm9sVGFibGUtPm1fbG9jYWxUb0VudHJ5ID0g
bnVsbHB0cjsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKFN5bWJvbFRhYmxlKTsKKwogY29u
c3QgU3ltYm9sVGFibGU6OkxvY2FsVG9FbnRyeVZlYyYgU3ltYm9sVGFibGU6OmxvY2FsVG9FbnRy
eShjb25zdCBDb25jdXJyZW50SlNMb2NrZXImKQogewogICAgIGlmIChVTkxJS0VMWSghbV9sb2Nh
bFRvRW50cnkpKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TeW1ib2xU
YWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJv
bFRhYmxlLmgJKHJldmlzaW9uIDI2ODA4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1N5bWJvbFRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTczMyw3ICs3MzMsNyBAQCBwdWJs
aWM6CiAgICAgICAgIG1fc2luZ2xldG9uLm5vdGlmeVdyaXRlKHZtLCB0aGlzLCBzY29wZSwgcmVh
c29uKTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNs
b3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIERFQ0xBUkVf
RVhQT1JUX0lORk87CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtN
YXBJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9X
ZWFrTWFwSW1wbC5jcHAJKHJldmlzaW9uIDI2ODA4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1dlYWtNYXBJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksOCArMzksOSBA
QCB2b2lkIFdlYWtNYXBJbXBsPFdlYWtNYXBCdWNrZXQ+OjpkZXN0cm95CiAgICAgc3RhdGljX2Nh
c3Q8V2Vha01hcEltcGwqPihjZWxsKS0+fldlYWtNYXBJbXBsKCk7CiB9CiAKLXRlbXBsYXRlIDx0
eXBlbmFtZSBXZWFrTWFwQnVja2V0Pgotdm9pZCBXZWFrTWFwSW1wbDxXZWFrTWFwQnVja2V0Pjo6
dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxh
dGU8dHlwZW5hbWUgV2Vha01hcEJ1Y2tldD4KK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2
b2lkIFdlYWtNYXBJbXBsPFdlYWtNYXBCdWNrZXQ+Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwq
IGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgV2Vha01hcEltcGwqIHRoaXNPYmplY3Qg
PSBqc0Nhc3Q8V2Vha01hcEltcGwqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVS
SVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC00OCw2ICs0OSw4IEBAIHZvaWQgV2Vha01hcElt
cGw8V2Vha01hcEJ1Y2tldD46OnZpc2l0Q2gKICAgICB2aXNpdG9yLnJlcG9ydEV4dHJhTWVtb3J5
VmlzaXRlZCh0aGlzT2JqZWN0LT5tX2NhcGFjaXR5ICogc2l6ZW9mKFdlYWtNYXBCdWNrZXQpKTsK
IH0KIAorREVGSU5FX1RFTVBMQVRFX1ZJU0lUX0NISUxEUkVOKHRlbXBsYXRlPHR5cGVuYW1lIFdl
YWtNYXBCdWNrZXQ+LCBXZWFrTWFwSW1wbDxXZWFrTWFwQnVja2V0Pik7CisKIHRlbXBsYXRlIDx0
eXBlbmFtZSBXZWFrTWFwQnVja2V0Pgogc2l6ZV90IFdlYWtNYXBJbXBsPFdlYWtNYXBCdWNrZXQ+
Ojplc3RpbWF0ZWRTaXplKEpTQ2VsbCogY2VsbCwgVk0mIHZtKQogewpAQCAtNTYsMTMgKzU5LDE3
IEBAIHNpemVfdCBXZWFrTWFwSW1wbDxXZWFrTWFwQnVja2V0Pjo6ZXN0aW0KIH0KIAogdGVtcGxh
dGUgPD4KLXZvaWQgV2Vha01hcEltcGw8V2Vha01hcEJ1Y2tldDxXZWFrTWFwQnVja2V0RGF0YUtl
eT4+Ojp2aXNpdE91dHB1dENvbnN0cmFpbnRzKEpTQ2VsbCosIFNsb3RWaXNpdG9yJikKK3RlbXBs
YXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFdlYWtNYXBJbXBsPFdlYWtNYXBCdWNrZXQ8V2Vh
a01hcEJ1Y2tldERhdGFLZXk+Pjo6dmlzaXRPdXRwdXRDb25zdHJhaW50c0ltcGwoSlNDZWxsKiwg
VmlzaXRvciYpCiB7CiAgICAgLy8gT25seSBKU1dlYWtNYXAgbmVlZHMgdG8gaGFydmVzdCB2YWx1
ZSByZWZlcmVuY2VzCiB9CiAKK0RFRklORV9URU1QTEFURV9WSVNJVF9PVVRQVVRfQ09OU1RSQUlO
VFModGVtcGxhdGU8PiwgV2Vha01hcEltcGw8V2Vha01hcEJ1Y2tldDxXZWFrTWFwQnVja2V0RGF0
YUtleT4+KTsKKwogdGVtcGxhdGUgPD4KLXZvaWQgV2Vha01hcEltcGw8V2Vha01hcEJ1Y2tldDxX
ZWFrTWFwQnVja2V0RGF0YUtleVZhbHVlPj46OnZpc2l0T3V0cHV0Q29uc3RyYWludHMoSlNDZWxs
KiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+
Cit2b2lkIFdlYWtNYXBJbXBsPFdlYWtNYXBCdWNrZXQ8V2Vha01hcEJ1Y2tldERhdGFLZXlWYWx1
ZT4+Ojp2aXNpdE91dHB1dENvbnN0cmFpbnRzSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZp
c2l0b3IpCiB7CiAgICAgVk0mIHZtID0gdmlzaXRvci52bSgpOwogICAgIGF1dG8qIHRoaXNPYmpl
Y3QgPSBqc0Nhc3Q8V2Vha01hcEltcGwqPihjZWxsKTsKQEAgLTc4LDYgKzg1LDggQEAgdm9pZCBX
ZWFrTWFwSW1wbDxXZWFrTWFwQnVja2V0PFdlYWtNYXBCdQogICAgIH0KIH0KIAorREVGSU5FX1RF
TVBMQVRFX1ZJU0lUX09VVFBVVF9DT05TVFJBSU5UUyh0ZW1wbGF0ZTw+LCBXZWFrTWFwSW1wbDxX
ZWFrTWFwQnVja2V0PFdlYWtNYXBCdWNrZXREYXRhS2V5VmFsdWU+Pik7CisKIHRlbXBsYXRlIDx0
eXBlbmFtZSBXZWFrTWFwQnVja2V0PgogdGVtcGxhdGU8dHlwZW5hbWUgQXBwZW5kZXI+CiB2b2lk
IFdlYWtNYXBJbXBsPFdlYWtNYXBCdWNrZXQ+Ojp0YWtlU25hcHNob3RJbnRlcm5hbCh1bnNpZ25l
ZCBsaW1pdCwgQXBwZW5kZXIgYXBwZW5kZXIpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9XZWFrTWFwSW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1dlYWtNYXBJbXBsLmgJKHJldmlzaW9uIDI2ODA4NikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1dlYWtNYXBJbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTIwMiw3
ICsyMDIsOCBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzRGVzdHJ1
Y3Rpb24gPSB0cnVlOwogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CiAKLSAgICBz
dGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVD
TEFSRV9URU1QTEFURV9WSVNJVF9DSElMRFJFTjsKKyAgICBERUNMQVJFX1RFTVBMQVRFX1ZJU0lU
X09VVFBVVF9DT05TVFJBSU5UUzsKIAogICAgIHN0YXRpYyBzaXplX3QgZXN0aW1hdGVkU2l6ZShK
U0NlbGwqLCBWTSYpOwogCkBAIC0zMTEsNyArMzEyLDYgQEAgcHVibGljOgogICAgICAgICByZXR1
cm4gdm0ud2Vha1NldFNwYWNlPG1vZGU+KCk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgdmlz
aXRPdXRwdXRDb25zdHJhaW50cyhKU0NlbGwqLCBTbG90VmlzaXRvciYpOwogICAgIHZvaWQgZmlu
YWxpemVVbmNvbmRpdGlvbmFsbHkoVk0mKTsKIAogcHJpdmF0ZToKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS90b29scy9KU0RvbGxhclZNLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvdG9vbHMvSlNEb2xsYXJWTS5jcHAJKHJldmlzaW9uIDI2ODA4NikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9KU0RvbGxhclZNLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjIyLDE0ICsyMjIsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZN
JiwgUm9vdCopOwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGws
IFNsb3RWaXNpdG9yJiB2aXNpdG9yKQotICAgIHsKLSAgICAgICAgRG9sbGFyVk1Bc3NlcnRTY29w
ZSBhc3NlcnRTY29wZTsKLSAgICAgICAgRWxlbWVudCogdGhpc09iamVjdCA9IGpzQ2FzdDxFbGVt
ZW50Kj4oY2VsbCk7Ci0gICAgICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVj
dCwgaW5mbygpKTsKLSAgICAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNp
dG9yKTsKLSAgICAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9yb290KTsKLSAgICB9
CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIHN0YXRpYyBFbGVtZW50SGFuZGxl
T3duZXIqIGhhbmRsZU93bmVyKCk7CiAKQEAgLTI0NSw2ICsyMzgsMTggQEAgcHJpdmF0ZToKICAg
ICBXcml0ZUJhcnJpZXI8Um9vdD4gbV9yb290OwogfTsKIAordGVtcGxhdGU8dHlwZW5hbWUgVmlz
aXRvcj4KK3ZvaWQgRWxlbWVudDo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNp
dG9yJiB2aXNpdG9yKQoreworICAgIERvbGxhclZNQXNzZXJ0U2NvcGUgYXNzZXJ0U2NvcGU7Cisg
ICAgRWxlbWVudCogdGhpc09iamVjdCA9IGpzQ2FzdDxFbGVtZW50Kj4oY2VsbCk7CisgICAgQVNT
RVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOworICAgIEJhc2U6OnZp
c2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CisgICAgdmlzaXRvci5hcHBlbmQodGhp
c09iamVjdC0+bV9yb290KTsKK30KKworREVGSU5FX1ZJU0lUX0NISUxEUkVOKEVsZW1lbnQpOwor
CiBjbGFzcyBFbGVtZW50SGFuZGxlT3duZXIgZmluYWwgOiBwdWJsaWMgV2Vha0hhbmRsZU93bmVy
IHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKQEAgLTMwMiwxOCArMzA3
LDIzIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9i
YWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3Mp
LCBpbmZvKCkpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiB0aGlzT2JqZWN0LCBTbG90VmlzaXRvciYgdmlzaXRvcikKLSAgICB7Ci0gICAgICAgIERvbGxh
clZNQXNzZXJ0U2NvcGUgYXNzZXJ0U2NvcGU7Ci0gICAgICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5I
RVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKLSAgICAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0
aGlzT2JqZWN0LCB2aXNpdG9yKTsKLSAgICAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHRoaXNP
YmplY3QpOwotICAgIH0KKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiBwcml2YXRlOgog
ICAgIFdlYWs8RWxlbWVudD4gbV9lbGVtZW50OwogfTsKIAordGVtcGxhdGU8dHlwZW5hbWUgVmlz
aXRvcj4KK3ZvaWQgUm9vdDo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiB0aGlzT2JqZWN0LCBW
aXNpdG9yJiB2aXNpdG9yKQoreworICAgIERvbGxhclZNQXNzZXJ0U2NvcGUgYXNzZXJ0U2NvcGU7
CisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOworICAg
IEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CisgICAgdmlzaXRvci5h
ZGRPcGFxdWVSb290KHRoaXNPYmplY3QpOworfQorCitERUZJTkVfVklTSVRfQ0hJTERSRU4oUm9v
dCk7CisKIGNsYXNzIFNpbXBsZU9iamVjdCA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKIHB1
YmxpYzoKICAgICBTaW1wbGVPYmplY3QoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKQEAg
LTMzOCwxNCArMzQ4LDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gc2ltcGxlT2JqZWN0Owog
ICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90
VmlzaXRvciYgdmlzaXRvcikKLSAgICB7Ci0gICAgICAgIERvbGxhclZNQXNzZXJ0U2NvcGUgYXNz
ZXJ0U2NvcGU7Ci0gICAgICAgIFNpbXBsZU9iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxTaW1w
bGVPYmplY3QqPihjZWxsKTsKLSAgICAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlz
T2JqZWN0LCBpbmZvKCkpOwotICAgICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3Qs
IHZpc2l0b3IpOwotICAgICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2hpZGRlblZh
bHVlKTsKLSAgICB9CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIHN0YXRpYyBT
dHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQogICAgIHsKQEAgLTM3OCw2ICszODEsMTggQEAgcHJp
dmF0ZToKICAgICBXcml0ZUJhcnJpZXI8SlNDOjpVbmtub3duPiBtX2hpZGRlblZhbHVlOwogfTsK
IAordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgU2ltcGxlT2JqZWN0Ojp2aXNpdENo
aWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgRG9sbGFy
Vk1Bc3NlcnRTY29wZSBhc3NlcnRTY29wZTsKKyAgICBTaW1wbGVPYmplY3QqIHRoaXNPYmplY3Qg
PSBqc0Nhc3Q8U2ltcGxlT2JqZWN0Kj4oY2VsbCk7CisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhF
UklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOworICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09i
amVjdCwgdmlzaXRvcik7CisgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9oaWRkZW5W
YWx1ZSk7Cit9CisKK0RFRklORV9WSVNJVF9DSElMRFJFTihTaW1wbGVPYmplY3QpOworCiBjbGFz
cyBJbXB1cmVHZXR0ZXIgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7CiBwdWJsaWM6CiAgICAg
SW1wdXJlR2V0dGVyKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCkBAIC00MzQsMTQgKzQ0
OSw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIEJhc2U6OmdldE93blByb3BlcnR5U2xvdChv
YmplY3QsIGdsb2JhbE9iamVjdCwgbmFtZSwgc2xvdCk7CiAgICAgfQogCi0gICAgc3RhdGljIHZv
aWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQotICAg
IHsKLSAgICAgICAgRG9sbGFyVk1Bc3NlcnRTY29wZSBhc3NlcnRTY29wZTsKLSAgICAgICAgQVNT
RVJUX0dDX09CSkVDVF9JTkhFUklUUyhjZWxsLCBpbmZvKCkpOwotICAgICAgICBCYXNlOjp2aXNp
dENoaWxkcmVuKGNlbGwsIHZpc2l0b3IpOwotICAgICAgICBJbXB1cmVHZXR0ZXIqIHRoaXNPYmpl
Y3QgPSBqc0Nhc3Q8SW1wdXJlR2V0dGVyKj4oY2VsbCk7Ci0gICAgICAgIHZpc2l0b3IuYXBwZW5k
KHRoaXNPYmplY3QtPm1fZGVsZWdhdGUpOwotICAgIH0KKyAgICBERUNMQVJFX1ZJU0lUX0NISUxE
UkVOOwogCiAgICAgdm9pZCBzZXREZWxlZ2F0ZShWTSYgdm0sIEpTT2JqZWN0KiBkZWxlZ2F0ZSkK
ICAgICB7CkBAIC00NTIsNiArNDYwLDE4IEBAIHByaXZhdGU6CiAgICAgV3JpdGVCYXJyaWVyPEpT
T2JqZWN0PiBtX2RlbGVnYXRlOwogfTsKIAordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3Zv
aWQgSW1wdXJlR2V0dGVyOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3Im
IHZpc2l0b3IpCit7CisgICAgRG9sbGFyVk1Bc3NlcnRTY29wZSBhc3NlcnRTY29wZTsKKyAgICBB
U1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNlbGwsIGluZm8oKSk7CisgICAgQmFzZTo6dmlzaXRD
aGlsZHJlbihjZWxsLCB2aXNpdG9yKTsKKyAgICBJbXB1cmVHZXR0ZXIqIHRoaXNPYmplY3QgPSBq
c0Nhc3Q8SW1wdXJlR2V0dGVyKj4oY2VsbCk7CisgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVj
dC0+bV9kZWxlZ2F0ZSk7Cit9CisKK0RFRklORV9WSVNJVF9DSElMRFJFTihJbXB1cmVHZXR0ZXIp
OworCiBzdGF0aWMgSlNDX0RFQ0xBUkVfQ1VTVE9NX0dFVFRFUihjdXN0b21HZXR0ZXJWYWx1ZUdl
dHRlcik7CiBzdGF0aWMgSlNDX0RFQ0xBUkVfQ1VTVE9NX0dFVFRFUihjdXN0b21HZXR0ZXJBY2Vz
c29yR2V0dGVyKTsKIApAQCAtMzUzNiwxMyArMzU1NiwxNiBAQCB2b2lkIEpTRG9sbGFyVk06OmFk
ZENvbnN0cnVjdGlibGVGdW5jdGlvCiAgICAgcHV0RGlyZWN0KHZtLCBpZGVudGlmaWVyLCBKU0Z1
bmN0aW9uOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgYXJndW1lbnRzLCBpZGVudGlmaWVyLnN0
cmluZygpLCBmdW5jdGlvbiwgTm9JbnRyaW5zaWMsIGZ1bmN0aW9uKSwganNEb2xsYXJWTVByb3Bl
cnR5QXR0cmlidXRlcyk7CiB9CiAKLXZvaWQgSlNEb2xsYXJWTTo6dmlzaXRDaGlsZHJlbihKU0Nl
bGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRv
cj4KK3ZvaWQgSlNEb2xsYXJWTTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNp
dG9yJiB2aXNpdG9yKQogewogICAgIEpTRG9sbGFyVk0qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNE
b2xsYXJWTSo+KGNlbGwpOwogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlz
aXRvcik7CiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9vYmplY3REb2luZ1NpZGVF
ZmZlY3RQdXRXaXRob3V0Q29ycmVjdFNsb3RTdGF0dXNTdHJ1Y3R1cmUpOwogfQogCitERUZJTkVf
VklTSVRfQ0hJTERSRU4oSlNEb2xsYXJWTSk7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiBJR05P
UkVfV0FSTklOR1NfRU5ECkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvSlNEb2xs
YXJWTS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9KU0RvbGxh
clZNLmgJKHJldmlzaW9uIDI2ODA4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9K
U0RvbGxhclZNLmgJKHdvcmtpbmcgY29weSkKQEAgLTc0LDcgKzc0LDcgQEAgcHJpdmF0ZToKICAg
ICB2b2lkIGFkZEZ1bmN0aW9uKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBjb25zdCBjaGFyKiBuYW1l
LCBOYXRpdmVGdW5jdGlvbiwgdW5zaWduZWQgYXJndW1lbnRzKTsKICAgICB2b2lkIGFkZENvbnN0
cnVjdGlibGVGdW5jdGlvbihWTSYsIEpTR2xvYmFsT2JqZWN0KiwgY29uc3QgY2hhciogbmFtZSwg
TmF0aXZlRnVuY3Rpb24sIHVuc2lnbmVkIGFyZ3VtZW50cyk7CiAKLSAgICBzdGF0aWMgdm9pZCB2
aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9D
SElMRFJFTjsKIAogICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1fb2JqZWN0RG9pbmdTaWRl
RWZmZWN0UHV0V2l0aG91dENvcnJlY3RTbG90U3RhdHVzU3RydWN0dXJlOwogfTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTVG9XYXNtSUNDYWxsZWUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTVG9XYXNtSUNDYWxsZWUuY3Bw
CShyZXZpc2lvbiAyNjgwODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1Rv
V2FzbUlDQ2FsbGVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDksNyArNDksOCBAQCBTdHJ1Y3R1
cmUqIEpTVG9XYXNtSUNDYWxsZWU6OmNyZWF0ZVN0cnVjCiAgICAgcmV0dXJuIFN0cnVjdHVyZTo6
Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oSlNDYWxsZWVUeXBl
LCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CiB9CiAKLXZvaWQgSlNUb1dhc21JQ0NhbGxlZTo6
dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxh
dGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNUb1dhc21JQ0NhbGxlZTo6dmlzaXRDaGlsZHJl
bkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTVG9XYXNtSUND
YWxsZWUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUb1dhc21JQ0NhbGxlZSo+KGNlbGwpOwogICAg
IEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTU4LDYg
KzU5LDggQEAgdm9pZCBKU1RvV2FzbUlDQ2FsbGVlOjp2aXNpdENoaWxkcmVuKEpTQwogICAgIHZp
c2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fZnVuY3Rpb24pOwogfQogCitERUZJTkVfVklTSVRf
Q0hJTERSRU4oSlNUb1dhc21JQ0NhbGxlZSk7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5k
aWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vanMvSlNUb1dhc21JQ0NhbGxlZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL0pTVG9XYXNtSUNDYWxsZWUuaAkocmV2aXNpb24gMjY4MDg2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNUb1dhc21JQ0NhbGxlZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC01Niw3ICs1Niw3IEBAIHByaXZhdGU6CiAgICAgSlNUb1dhc21JQ0NhbGxlZShWTSYg
dm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlKQog
ICAgICAgICA6IEJhc2Uodm0sIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKQogICAgIHsgfQotICAg
IHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBE
RUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgV3JpdGVCYXJyaWVyPFdlYkFzc2VtYmx5RnVu
Y3Rpb24+IG1fZnVuY3Rpb247CiB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
anMvSlNXZWJBc3NlbWJseUNvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9jay5jcHAJKHJldmlzaW9uIDI2
ODA4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2Rl
QmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Miw3ICs4Miw4IEBAIHZvaWQgSlNXZWJBc3Nl
bWJseUNvZGVCbG9jazo6Y2xlYXJKU0NhbGwKICAgICAgICAgKCppdGVyKS0+dW5saW5rKHZtKTsK
IH0KIAotdm9pZCBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCog
Y2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgor
dm9pZCBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNl
bGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNXZWJBc3NlbWJseUNvZGVCbG9jayogdGhp
c09iamVjdCA9IGpzQ2FzdDxKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKj4oY2VsbCk7CiAgICAgQVNT
RVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtOTAsNiArOTEs
OCBAQCB2b2lkIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6OnZpc2l0Q2hpbGRyCiAgICAgQmFzZTo6
dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NI
SUxEUkVOKEpTV2ViQXNzZW1ibHlDb2RlQmxvY2spOworCiB2b2lkIEpTV2ViQXNzZW1ibHlDb2Rl
QmxvY2s6OmZpbmFsaXplVW5jb25kaXRpb25hbGx5KFZNJiB2bSkKIHsKICAgICBmb3IgKGF1dG8g
aXRlciA9IG1fY2FsbExpbmtJbmZvcy5iZWdpbigpOyAhIWl0ZXI7ICsraXRlcikKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29k
ZUJsb2NrLmgJKHJldmlzaW9uIDI2ODA4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtODYsNyArODYs
NyBAQCBwcml2YXRlOgogICAgIERFQ0xBUkVfRVhQT1JUX0lORk87CiAgICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOwogICAgIHN0YXRpYyB2b2lkIGRlc3Ry
b3koSlNDZWxsKik7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90
VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBSZWY8V2FzbTo6
Q29kZUJsb2NrPiBtX2NvZGVCbG9jazsKICAgICBWZWN0b3I8TWFjcm9Bc3NlbWJsZXJDb2RlUmVm
PFdhc21FbnRyeVB0clRhZz4+IG1fd2FzbVRvSlNFeGl0U3R1YnM7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5R2xvYmFsLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5R2xvYmFsLmNwcAko
cmV2aXNpb24gMjY4MDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJB
c3NlbWJseUdsb2JhbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcxLDcgKzcxLDggQEAgdm9pZCBK
U1dlYkFzc2VtYmx5R2xvYmFsOjpkZXN0cm95KEpTQ2VsbAogICAgIHN0YXRpY19jYXN0PEpTV2Vi
QXNzZW1ibHlHbG9iYWwqPihjZWxsKS0+SlNXZWJBc3NlbWJseUdsb2JhbDo6fkpTV2ViQXNzZW1i
bHlHbG9iYWwoKTsKIH0KIAotdm9pZCBKU1dlYkFzc2VtYmx5R2xvYmFsOjp2aXNpdENoaWxkcmVu
KEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPgordm9pZCBKU1dlYkFzc2VtYmx5R2xvYmFsOjp2aXNpdENoaWxkcmVuSW1wbChKU0Nl
bGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNXZWJBc3NlbWJseUdsb2JhbCog
dGhpc09iamVjdCA9IGpzQ2FzdDxKU1dlYkFzc2VtYmx5R2xvYmFsKj4oY2VsbCk7CiAgICAgQVNT
RVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtODAsNiArODEs
OCBAQCB2b2lkIEpTV2ViQXNzZW1ibHlHbG9iYWw6OnZpc2l0Q2hpbGRyZW4oCiAgICAgdGhpc09i
amVjdC0+Z2xvYmFsKCktPnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOwogfQogCitERUZJTkVfVklT
SVRfQ0hJTERSRU4oSlNXZWJBc3NlbWJseUdsb2JhbCk7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwog
CiAjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUdsb2JhbC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlHbG9iYWwuaAkocmV2aXNpb24gMjY4
MDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUdsb2Jh
bC5oCSh3b3JraW5nIGNvcHkpCkBAIC01OSw3ICs1OSw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAg
ICAgSlNXZWJBc3NlbWJseUdsb2JhbChWTSYsIFN0cnVjdHVyZSosIFJlZjxXYXNtOjpHbG9iYWw+
JiYpOwogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNp
dENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElM
RFJFTjsKIAogICAgIFJlZjxXYXNtOjpHbG9iYWw+IG1fZ2xvYmFsOwogfTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUluc3Rh
bmNlLmNwcAkocmV2aXNpb24gMjY4MDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
anMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzMsNyArNzMs
OCBAQCB2b2lkIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6ZGVzdHJveShKU0NlCiAgICAgc3RhdGlj
X2Nhc3Q8SlNXZWJBc3NlbWJseUluc3RhbmNlKj4oY2VsbCktPkpTV2ViQXNzZW1ibHlJbnN0YW5j
ZTo6fkpTV2ViQXNzZW1ibHlJbnN0YW5jZSgpOwogfQogCi12b2lkIEpTV2ViQXNzZW1ibHlJbnN0
YW5jZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQor
dGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNXZWJBc3NlbWJseUluc3RhbmNlOjp2
aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAg
YXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1dlYkFzc2VtYmx5SW5zdGFuY2UqPihjZWxsKTsK
ICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC0x
MDIsNiArMTAzLDggQEAgdm9pZCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OnZpc2l0Q2hpbGRyZQog
ICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKHdyYXBwZXIuZ2V0KCkpOwogfQogCitE
RUZJTkVfVklTSVRfQ0hJTERSRU4oSlNXZWJBc3NlbWJseUluc3RhbmNlKTsKKwogdm9pZCBKU1dl
YkFzc2VtYmx5SW5zdGFuY2U6OmZpbmFsaXplQ3JlYXRpb24oVk0mIHZtLCBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBSZWY8V2FzbTo6Q29kZUJsb2NrPiYmIHdhc21Db2RlQmxvY2ssIEpT
T2JqZWN0KiBpbXBvcnRPYmplY3QsIFdhc206OkNyZWF0aW9uTW9kZSBjcmVhdGlvbk1vZGUpCiB7
CiAgICAgbV9pbnN0YW5jZS0+ZmluYWxpemVDcmVhdGlvbih0aGlzLCB3YXNtQ29kZUJsb2NrLmNv
cHlSZWYoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2Vt
Ymx5SW5zdGFuY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuaAkocmV2aXNpb24gMjY4MDg2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEwNCw3ICsxMDQsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIEpTV2ViQXNzZW1i
bHlJbnN0YW5jZShWTSYsIFN0cnVjdHVyZSosIFJlZjxXYXNtOjpJbnN0YW5jZT4mJik7CiAgICAg
dm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIEpTV2ViQXNzZW1ibHlNb2R1bGUqLCBKU01vZHVsZU5h
bWVzcGFjZU9iamVjdCopOwotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwg
U2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgUmVmPFdh
c206Okluc3RhbmNlPiBtX2luc3RhbmNlOwogICAgIFZNKiBtX3ZtOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1lbW9yeS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1lbW9yeS5jcHAJ
KHJldmlzaW9uIDI2ODA4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2Vi
QXNzZW1ibHlNZW1vcnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDEsNyArMTQxLDggQEAgdm9p
ZCBKU1dlYkFzc2VtYmx5TWVtb3J5OjpkZXN0cm95KEpTQ2VsbAogICAgIG1lbW9yeS0+SlNXZWJB
c3NlbWJseU1lbW9yeTo6fkpTV2ViQXNzZW1ibHlNZW1vcnkoKTsKIH0KIAotdm9pZCBKU1dlYkFz
c2VtYmx5TWVtb3J5Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZp
c2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1dlYkFzc2VtYmx5TWVt
b3J5Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7
CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1dlYkFzc2VtYmx5TWVtb3J5Kj4oY2Vs
bCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpA
QCAtMTUxLDYgKzE1Miw4IEBAIHZvaWQgSlNXZWJBc3NlbWJseU1lbW9yeTo6dmlzaXRDaGlsZHJl
bigKICAgICB2aXNpdG9yLnJlcG9ydEV4dHJhTWVtb3J5VmlzaXRlZCh0aGlzT2JqZWN0LT5tZW1v
cnkoKS5zaXplKCkpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNXZWJBc3NlbWJseU1l
bW9yeSk7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VN
QkxZKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1l
bW9yeS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2Vi
QXNzZW1ibHlNZW1vcnkuaAkocmV2aXNpb24gMjY4MDg2KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1lbW9yeS5oCSh3b3JraW5nIGNvcHkpCkBAIC02Myw3
ICs2Myw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgSlNXZWJBc3NlbWJseU1lbW9yeShWTSYs
IFN0cnVjdHVyZSopOwogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKLSAgICBzdGF0aWMg
dm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9W
SVNJVF9DSElMRFJFTjsKIAogICAgIFJlZjxXYXNtOjpNZW1vcnk+IG1fbWVtb3J5OwogICAgIFdy
aXRlQmFycmllcjxKU0FycmF5QnVmZmVyPiBtX2J1ZmZlcldyYXBwZXI7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmNw
cAkocmV2aXNpb24gMjY4MDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNX
ZWJBc3NlbWJseU1vZHVsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNCw3ICsxMjQsOCBAQCB2
b2lkIEpTV2ViQXNzZW1ibHlNb2R1bGU6OnNldENvZGVCbG9jayhWCiAgICAgbV9jb2RlQmxvY2tz
W3N0YXRpY19jYXN0PHNpemVfdD4obW9kZSldLnNldCh2bSwgdGhpcywgY29kZUJsb2NrKTsKIH0K
IAotdm9pZCBKU1dlYkFzc2VtYmx5TW9kdWxlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwg
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBK
U1dlYkFzc2VtYmx5TW9kdWxlOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0
b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNXZWJBc3NlbWJseU1vZHVsZSogdGhpc09iamVjdCA9IGpz
Q2FzdDxKU1dlYkFzc2VtYmx5TW9kdWxlKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9J
TkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtMTM1LDYgKzEzNiw4IEBAIHZvaWQgSlNX
ZWJBc3NlbWJseU1vZHVsZTo6dmlzaXRDaGlsZHJlbigKICAgICAgICAgdmlzaXRvci5hcHBlbmQo
dGhpc09iamVjdC0+bV9jb2RlQmxvY2tzW2ldKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVO
KEpTV2ViQXNzZW1ibHlNb2R1bGUpOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8v
IEVOQUJMRShXRUJBU1NFTUJMWSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L0pTV2ViQXNzZW1ibHlNb2R1bGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmgJKHJldmlzaW9uIDI2ODA4NikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtODAsNyArODAsNyBAQCBwcml2YXRlOgogCiAgICAgSlNXZWJBc3NlbWJseU1v
ZHVsZShWTSYsIFN0cnVjdHVyZSosIFJlZjxXYXNtOjpNb2R1bGU+JiYpOwogICAgIHZvaWQgZmlu
aXNoQ3JlYXRpb24oVk0mKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCos
IFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIFJlZjxX
YXNtOjpNb2R1bGU+IG1fbW9kdWxlOwogICAgIFdyaXRlQmFycmllcjxTeW1ib2xUYWJsZT4gbV9l
eHBvcnRTeW1ib2xUYWJsZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pT
V2ViQXNzZW1ibHlUYWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvSlNXZWJBc3NlbWJseVRhYmxlLmNwcAkocmV2aXNpb24gMjY4MDg2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseVRhYmxlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNzIsNyArNzIsOCBAQCB2b2lkIEpTV2ViQXNzZW1ibHlUYWJsZTo6ZGVzdHJv
eShKU0NlbGwqCiAgICAgc3RhdGljX2Nhc3Q8SlNXZWJBc3NlbWJseVRhYmxlKj4oY2VsbCktPkpT
V2ViQXNzZW1ibHlUYWJsZTo6fkpTV2ViQXNzZW1ibHlUYWJsZSgpOwogfQogCi12b2lkIEpTV2Vi
QXNzZW1ibHlUYWJsZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNXZWJBc3NlbWJseVRh
YmxlOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7
CiAgICAgSlNXZWJBc3NlbWJseVRhYmxlKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTV2ViQXNzZW1i
bHlUYWJsZSo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVj
dCwgaW5mbygpKTsKQEAgLTgxLDYgKzgyLDggQEAgdm9pZCBKU1dlYkFzc2VtYmx5VGFibGU6OnZp
c2l0Q2hpbGRyZW4oSgogICAgIHRoaXNPYmplY3QtPnRhYmxlKCktPnZpc2l0QWdncmVnYXRlKHZp
c2l0b3IpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNXZWJBc3NlbWJseVRhYmxlKTsK
KwogYm9vbCBKU1dlYkFzc2VtYmx5VGFibGU6Omdyb3codWludDMyX3QgZGVsdGEpCiB7CiAgICAg
aWYgKGRlbHRhID09IDApCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dl
YkFzc2VtYmx5VGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9KU1dlYkFzc2VtYmx5VGFibGUuaAkocmV2aXNpb24gMjY4MDg2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseVRhYmxlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTcwLDggKzcwLDggQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBKU1dlYkFzc2VtYmx5VGFi
bGUoVk0mLCBTdHJ1Y3R1cmUqLCBSZWY8V2FzbTo6VGFibGU+JiYpOwogICAgIHZvaWQgZmluaXNo
Q3JlYXRpb24oVk0mKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNs
b3RWaXNpdG9yJik7Ci0KKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOworLy8KICAgICBSZWY8
V2FzbTo6VGFibGU+IG1fdGFibGU7CiB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmNwcAkocmV2aXNpb24gMjY4
MDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlv
bi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0OSw3ICs0NDksOCBAQCBXZWJBc3NlbWJseUZ1bmN0
aW9uOjpXZWJBc3NlbWJseUZ1bmN0aW9uCiAgICAgLCBtX2ltcG9ydGFibGVGdW5jdGlvbiB7IHNp
Z25hdHVyZUluZGV4LCB3YXNtVG9XYXNtRW50cnlwb2ludExvYWRMb2NhdGlvbiB9CiB7IH0KIAot
dm9pZCBXZWJBc3NlbWJseUZ1bmN0aW9uOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xv
dFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBXZWJB
c3NlbWJseUZ1bmN0aW9uOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3Im
IHZpc2l0b3IpCiB7CiAgICAgV2ViQXNzZW1ibHlGdW5jdGlvbiogdGhpc09iamVjdCA9IGpzQ2Fz
dDxXZWJBc3NlbWJseUZ1bmN0aW9uKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhF
UklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNDU4LDYgKzQ1OSw4IEBAIHZvaWQgV2ViQXNz
ZW1ibHlGdW5jdGlvbjo6dmlzaXRDaGlsZHJlbigKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2Jq
ZWN0LT5tX2pzVG9XYXNtSUNDYWxsZWUpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oV2Vi
QXNzZW1ibHlGdW5jdGlvbik7CisKIHZvaWQgV2ViQXNzZW1ibHlGdW5jdGlvbjo6ZGVzdHJveShK
U0NlbGwqIGNlbGwpCiB7CiAgICAgc3RhdGljX2Nhc3Q8V2ViQXNzZW1ibHlGdW5jdGlvbio+KGNl
bGwpLT5XZWJBc3NlbWJseUZ1bmN0aW9uOjp+V2ViQXNzZW1ibHlGdW5jdGlvbigpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rp
b24uaAkocmV2aXNpb24gMjY4MDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
V2ViQXNzZW1ibHlGdW5jdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC05MCw3ICs5MCw3IEBAIHB1
YmxpYzoKICAgICBXYXNtOjpJbnN0YW5jZSogcHJldmlvdXNJbnN0YW5jZShDYWxsRnJhbWUqKTsK
IAogcHJpdmF0ZToKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RW
aXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKICAgICBXZWJBc3NlbWJseUZ1
bmN0aW9uKFZNJiwgTmF0aXZlRXhlY3V0YWJsZSosIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJl
KiwgV2FzbTo6Q2FsbGVlJiBqc0VudHJ5cG9pbnQsIFdhc21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rp
b246OkxvYWRMb2NhdGlvbiBlbnRyeXBvaW50TG9hZExvY2F0aW9uLCBXYXNtOjpTaWduYXR1cmVJ
bmRleCk7CiAKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4ganNDYWxs
RW50cnlwb2ludFNsb3coKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dl
YkFzc2VtYmx5RnVuY3Rpb25CYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uQmFzZS5jcHAJKHJldmlzaW9uIDI2ODA4
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb25C
YXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEsNyArNDEsOCBAQCBXZWJBc3NlbWJseUZ1bmN0
aW9uQmFzZTo6V2ViQXNzZW1ibHlGdW5jCiAgICAgOiBCYXNlKHZtLCBleGVjdXRhYmxlLCBnbG9i
YWxPYmplY3QsIHN0cnVjdHVyZSkKIHsgfQogCi12b2lkIFdlYkFzc2VtYmx5RnVuY3Rpb25CYXNl
Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1w
bGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBXZWJBc3NlbWJseUZ1bmN0aW9uQmFzZTo6dmlz
aXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFdl
YkFzc2VtYmx5RnVuY3Rpb25CYXNlKiB0aGlzT2JqZWN0ID0ganNDYXN0PFdlYkFzc2VtYmx5RnVu
Y3Rpb25CYXNlKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2Jq
ZWN0LCBpbmZvKCkpOwpAQCAtNDksNiArNTAsOCBAQCB2b2lkIFdlYkFzc2VtYmx5RnVuY3Rpb25C
YXNlOjp2aXNpdENoaWxkCiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9pbnN0YW5j
ZSk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihXZWJBc3NlbWJseUZ1bmN0aW9uQmFzZSk7
CisKIHZvaWQgV2ViQXNzZW1ibHlGdW5jdGlvbkJhc2U6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwg
TmF0aXZlRXhlY3V0YWJsZSogZXhlY3V0YWJsZSwgdW5zaWduZWQgbGVuZ3RoLCBjb25zdCBTdHJp
bmcmIG5hbWUsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogaW5zdGFuY2UpCiB7CiAgICAgQmFzZTo6
ZmluaXNoQ3JlYXRpb24odm0sIGV4ZWN1dGFibGUsIGxlbmd0aCwgbmFtZSk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uQmFzZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rp
b25CYXNlLmgJKHJldmlzaW9uIDI2ODA4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL1dlYkFzc2VtYmx5RnVuY3Rpb25CYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDcgKzQ2
LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZJbnN0YW5jZSgpIHsg
cmV0dXJuIE9CSkVDVF9PRkZTRVRPRihXZWJBc3NlbWJseUZ1bmN0aW9uQmFzZSwgbV9pbnN0YW5j
ZSk7IH0KIAogcHJvdGVjdGVkOgotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogICAgIHZvaWQg
ZmluaXNoQ3JlYXRpb24oVk0mLCBOYXRpdmVFeGVjdXRhYmxlKiwgdW5zaWduZWQgbGVuZ3RoLCBj
b25zdCBTdHJpbmcmIG5hbWUsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSopOwogICAgIFdlYkFzc2Vt
Ymx5RnVuY3Rpb25CYXNlKFZNJiwgTmF0aXZlRXhlY3V0YWJsZSosIEpTR2xvYmFsT2JqZWN0Kiwg
U3RydWN0dXJlKik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFz
c2VtYmx5TW9kdWxlUmVjb3JkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZVJlY29yZC5jcHAJKHJldmlzaW9uIDI2ODA4NikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3Jk
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzcsNyArNzcsOCBAQCB2b2lkIFdlYkFzc2VtYmx5TW9k
dWxlUmVjb3JkOjpmaW5pc2hDcmVhCiAgICAgfQogfQogCi12b2lkIFdlYkFzc2VtYmx5TW9kdWxl
UmVjb3JkOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3Ip
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBXZWJBc3NlbWJseU1vZHVsZVJlY29y
ZDo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewog
ICAgIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkKiB0aGlzT2JqZWN0ID0ganNDYXN0PFdlYkFzc2Vt
Ymx5TW9kdWxlUmVjb3JkKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0
aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtODYsNiArODcsOCBAQCB2b2lkIFdlYkFzc2VtYmx5TW9k
dWxlUmVjb3JkOjp2aXNpdENoaWxkCiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9z
dGFydEZ1bmN0aW9uKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKFdlYkFzc2VtYmx5TW9k
dWxlUmVjb3JkKTsKKwogdm9pZCBXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6cHJlcGFyZUxpbmso
Vk0mIHZtLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGluc3RhbmNlKQogewogICAgIFJFTEVBU0Vf
QVNTRVJUKCFtX2luc3RhbmNlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuaAkocmV2aXNpb24gMjY4MDg2
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNv
cmQuaAkod29ya2luZyBjb3B5KQpAQCAtNjcsNyArNjcsNyBAQCBwcml2YXRlOgogCiAgICAgdm9p
ZCBmaW5pc2hDcmVhdGlvbihKU0dsb2JhbE9iamVjdCosIFZNJiwgY29uc3QgV2FzbTo6TW9kdWxl
SW5mb3JtYXRpb24mKTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwg
U2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgV3JpdGVC
YXJyaWVyPEpTV2ViQXNzZW1ibHlJbnN0YW5jZT4gbV9pbnN0YW5jZTsKICAgICBXcml0ZUJhcnJp
ZXI8SlNPYmplY3Q+IG1fc3RhcnRGdW5jdGlvbjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL1dlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5j
cHAJKHJldmlzaW9uIDI2ODA4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dl
YkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjcsNyArNjcs
OCBAQCBTdHJ1Y3R1cmUqIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uOjpjCiAgICAgcmV0dXJu
IFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8o
SlNGdW5jdGlvblR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKIH0KIAotdm9pZCBXZWJB
c3NlbWJseVdyYXBwZXJGdW5jdGlvbjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgV2ViQXNz
ZW1ibHlXcmFwcGVyRnVuY3Rpb246OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlz
aXRvciYgdmlzaXRvcikKIHsKICAgICBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbiogdGhpc09i
amVjdCA9IGpzQ2FzdDxXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbio+KGNlbGwpOwogICAgIEFT
U0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTc2LDYgKzc3
LDggQEAgdm9pZCBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbjo6dmlzaXRDaAogICAgIHZpc2l0
b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fZnVuY3Rpb24pOwogfQogCitERUZJTkVfVklTSVRfQ0hJ
TERSRU4oV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24pOworCiBKU0NfREVGSU5FX0hPU1RfRlVO
Q1RJT04oY2FsbFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLCAoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpKQogewogICAgIFZNJiB2bSA9IGdsb2Jh
bE9iamVjdC0+dm0oKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFz
c2VtYmx5V3JhcHBlckZ1bmN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uaAkocmV2aXNpb24gMjY4MDg2
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlXcmFwcGVyRnVu
Y3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtNTksNyArNTksNyBAQCBwdWJsaWM6CiBwcml2YXRl
OgogICAgIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uKFZNJiwgTmF0aXZlRXhlY3V0YWJsZSos
IEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKiwgV2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlv
bik7CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIE5hdGl2ZUV4ZWN1dGFibGUqLCB1bnNp
Z25lZCBsZW5ndGgsIGNvbnN0IFN0cmluZyYgbmFtZSwgSlNPYmplY3QqLCBKU1dlYkFzc2VtYmx5
SW5zdGFuY2UqKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RW
aXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIFdyaXRlQmFycmll
cjxKU09iamVjdD4gbV9mdW5jdGlvbjsKICAgICAvLyBJdCdzIHNhZmUgdG8ganVzdCBob2xkIHRo
ZSByYXcgV2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbiBiZWNhdXNlIHdlIGhhdmUgYSByZWZl
cmVuY2UKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQnVpbHRpbkNvbnN0
cnVjdG9yQmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNET01CdWlsdGluQ29uc3RydWN0b3JCYXNlLmNwcAkocmV2aXNpb24gMjY4MDg2KQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CdWlsdGluQ29uc3RydWN0b3JCYXNlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDUsNyArNDUsOCBAQCB2b2lkIEpTRE9NQnVpbHRpbkNvbnN0cnVj
dG9yQmFzZTo6Y2FsbEZ1CiAgICAgSlNDOjpjYWxsKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAmZnVu
Y3Rpb24sIGNhbGxEYXRhLCAmdGhpc09iamVjdCwgYXJndW1lbnRzKTsKIH0KIAotdm9pZCBKU0RP
TUJ1aWx0aW5Db25zdHJ1Y3RvckJhc2U6OnZpc2l0Q2hpbGRyZW4oSlNDOjpKU0NlbGwqIGNlbGws
IEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgor
dm9pZCBKU0RPTUJ1aWx0aW5Db25zdHJ1Y3RvckJhc2U6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQzo6
SlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGF1dG8qIHRoaXNPYmplY3Qg
PSBqc0Nhc3Q8SlNET01CdWlsdGluQ29uc3RydWN0b3JCYXNlKj4oY2VsbCk7CiAgICAgQVNTRVJU
X0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNTMsNiArNTQsOCBA
QCB2b2lkIEpTRE9NQnVpbHRpbkNvbnN0cnVjdG9yQmFzZTo6dmlzaXRDCiAgICAgdmlzaXRvci5h
cHBlbmQodGhpc09iamVjdC0+bV9pbml0aWFsaXplRnVuY3Rpb24pOwogfQogCitERUZJTkVfVklT
SVRfQ0hJTERSRU4oSlNET01CdWlsdGluQ29uc3RydWN0b3JCYXNlKTsKKwogSlNDOjpJc29TdWJz
cGFjZSogSlNET01CdWlsdGluQ29uc3RydWN0b3JCYXNlOjpzdWJzcGFjZUZvckltcGwoSlNDOjpW
TSYgdm0pCiB7CiAgICAgcmV0dXJuICZzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNs
aWVudERhdGEpLT5kb21CdWlsdGluQ29uc3RydWN0b3JTcGFjZSgpOwpJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNET01CdWlsdGluQ29uc3RydWN0b3JCYXNlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CdWlsdGluQ29uc3RydWN0b3JC
YXNlLmgJKHJldmlzaW9uIDI2ODA4NikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
RE9NQnVpbHRpbkNvbnN0cnVjdG9yQmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00Miw3ICs0Miw3
IEBAIHByb3RlY3RlZDoKICAgICB7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGls
ZHJlbihKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lU
X0NISUxEUkVOOwogCiAgICAgSlNDOjpKU0Z1bmN0aW9uKiBpbml0aWFsaXplRnVuY3Rpb24oKTsK
ICAgICB2b2lkIHNldEluaXRpYWxpemVGdW5jdGlvbihKU0M6OlZNJiwgSlNDOjpKU0Z1bmN0aW9u
Jik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01HbG9iYWxP
YmplY3QuY3BwCShyZXZpc2lvbiAyNjgwODYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0RPTUdsb2JhbE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzNiw3ICsyMzYsOCBA
QCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBKU0RPTUdsb2JhbE9iamVjCiAgICAgcmV0dXJuIG51
bGxwdHI7CiB9CiAKLXZvaWQgSlNET01HbG9iYWxPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+
Cit2b2lkIEpTRE9NR2xvYmFsT2JqZWN0Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGws
IFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNET01HbG9iYWxPYmplY3QqIHRoaXNPYmplY3Qg
PSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNU
X0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC0yNTgsNiArMjU5LDggQEAgdm9pZCBK
U0RPTUdsb2JhbE9iamVjdDo6dmlzaXRDaGlsZHJlbihKUwogICAgIHRoaXNPYmplY3QtPm1fYnVp
bHRpbkludGVybmFsRnVuY3Rpb25zLnZpc2l0KHZpc2l0b3IpOwogfQogCitERUZJTkVfVklTSVRf
Q0hJTERSRU4oSlNET01HbG9iYWxPYmplY3QpOworCiB2b2lkIEpTRE9NR2xvYmFsT2JqZWN0Ojpz
ZXRDdXJyZW50RXZlbnQoRXZlbnQqIGN1cnJlbnRFdmVudCkKIHsKICAgICBtX2N1cnJlbnRFdmVu
dCA9IGN1cnJlbnRFdmVudDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9N
R2xvYmFsT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNET01HbG9iYWxPYmplY3QuaAkocmV2aXNpb24gMjY4MDg2KQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNET01HbG9iYWxPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtNzEsNyAr
NzEsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRDdXJyZW50RXZlbnQoRXZlbnQqKTsKICAgICBF
dmVudCogY3VycmVudEV2ZW50KCkgY29uc3Q7CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxk
cmVuKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRf
Q0hJTERSRU47CiAKICAgICBET01XcmFwcGVyV29ybGQmIHdvcmxkKCkgeyByZXR1cm4gbV93b3Js
ZC5nZXQoKTsgfQogICAgIGJvb2wgd29ybGRJc05vcm1hbCgpIGNvbnN0IHsgcmV0dXJuIG1fd29y
bGRJc05vcm1hbDsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrZXJH
bG9iYWxTY29wZUJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTV29ya2VyR2xvYmFsU2NvcGVCYXNlLmNwcAkocmV2aXNpb24gMjY4MDg2KQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrZXJHbG9iYWxTY29wZUJhc2UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC05Miw3ICs5Miw4IEBAIHZvaWQgSlNXb3JrZXJHbG9iYWxTY29wZUJhc2U6
OmNsZWFyRE9NR3UKICAgICAgICAgZ3VhcmRlZC0+Y2xlYXIoKTsKIH0KIAotdm9pZCBKU1dvcmtl
ckdsb2JhbFNjb3BlQmFzZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9y
JiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNXb3JrZXJHbG9i
YWxTY29wZUJhc2U6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlz
aXRvcikKIHsKICAgICBKU1dvcmtlckdsb2JhbFNjb3BlQmFzZSogdGhpc09iamVjdCA9IGpzQ2Fz
dDxKU1dvcmtlckdsb2JhbFNjb3BlQmFzZSo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1Rf
SU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTEwMCw2ICsxMDEsOCBAQCB2b2lkIEpT
V29ya2VyR2xvYmFsU2NvcGVCYXNlOjp2aXNpdENoaWxkCiAgICAgdmlzaXRvci5hcHBlbmQodGhp
c09iamVjdC0+bV9wcm94eSk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU1dvcmtlckds
b2JhbFNjb3BlQmFzZSk7CisKIHZvaWQgSlNXb3JrZXJHbG9iYWxTY29wZUJhc2U6OmRlc3Ryb3ko
SlNDZWxsKiBjZWxsKQogewogICAgIHN0YXRpY19jYXN0PEpTV29ya2VyR2xvYmFsU2NvcGVCYXNl
Kj4oY2VsbCktPkpTV29ya2VyR2xvYmFsU2NvcGVCYXNlOjp+SlNXb3JrZXJHbG9iYWxTY29wZUJh
c2UoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyR2xvYmFsU2Nv
cGVCYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXb3Jr
ZXJHbG9iYWxTY29wZUJhc2UuaAkocmV2aXNpb24gMjY4MDg2KQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNXb3JrZXJHbG9iYWxTY29wZUJhc2UuaAkod29ya2luZyBjb3B5KQpAQCAt
ODEsNyArODEsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgSlNXb3JrZXJHbG9iYWxTY29wZUJhc2UoSlND
OjpWTSYsIEpTQzo6U3RydWN0dXJlKiwgUmVmUHRyPFdvcmtlckdsb2JhbFNjb3BlPiYmKTsKICAg
ICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mLCBKU0M6OkpTUHJveHkqKTsKIAotICAgIHN0
YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJik7
CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogcHJpdmF0ZToKICAgICBSZWZQdHI8V29y
a2VyR2xvYmFsU2NvcGU+IG1fd3JhcHBlZDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTV29ya2xldEdsb2JhbFNjb3BlQmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNXb3JrbGV0R2xvYmFsU2NvcGVCYXNlLmNwcAkocmV2aXNpb24g
MjY4MDg2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrbGV0R2xvYmFsU2Nv
cGVCYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODIsNyArODIsOCBAQCB2b2lkIEpTV29ya2xl
dEdsb2JhbFNjb3BlQmFzZTo6Y2xlYXJET01HCiAgICAgICAgIGd1YXJkZWQtPmNsZWFyKCk7CiB9
CiAKLXZvaWQgSlNXb3JrbGV0R2xvYmFsU2NvcGVCYXNlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCog
Y2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgor
dm9pZCBKU1dvcmtsZXRHbG9iYWxTY29wZUJhc2U6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCog
Y2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0
PEpTV29ya2xldEdsb2JhbFNjb3BlQmFzZSo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1Rf
SU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTkwLDYgKzkxLDggQEAgdm9pZCBKU1dv
cmtsZXRHbG9iYWxTY29wZUJhc2U6OnZpc2l0Q2hpbAogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNP
YmplY3QtPm1fcHJveHkpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNXb3JrbGV0R2xv
YmFsU2NvcGVCYXNlKTsKKwogdm9pZCBKU1dvcmtsZXRHbG9iYWxTY29wZUJhc2U6OmRlc3Ryb3ko
SlNDZWxsKiBjZWxsKQogewogICAgIHN0YXRpY19jYXN0PEpTV29ya2xldEdsb2JhbFNjb3BlQmFz
ZSo+KGNlbGwpLT5KU1dvcmtsZXRHbG9iYWxTY29wZUJhc2U6On5KU1dvcmtsZXRHbG9iYWxTY29w
ZUJhc2UoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2xldEdsb2Jh
bFNjb3BlQmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
V29ya2xldEdsb2JhbFNjb3BlQmFzZS5oCShyZXZpc2lvbiAyNjgwODYpCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU1dvcmtsZXRHbG9iYWxTY29wZUJhc2UuaAkod29ya2luZyBjb3B5
KQpAQCAtNjksNyArNjksNyBAQCBwcm90ZWN0ZWQ6CiAgICAgSlNXb3JrbGV0R2xvYmFsU2NvcGVC
YXNlKEpTQzo6Vk0mLCBKU0M6OlN0cnVjdHVyZSosIFJlZlB0cjxXb3JrbGV0R2xvYmFsU2NvcGU+
JiYpOwogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYsIEpTQzo6SlNQcm94eSopOwog
Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZp
c2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiBwcml2YXRlOgogICAgIFJl
ZlB0cjxXb3JrbGV0R2xvYmFsU2NvcGU+IG1fd3JhcHBlZDsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCShyZXZpc2lvbiAy
NjgwODYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JK
Uy5wbQkod29ya2luZyBjb3B5KQpAQCAtMzA3OCw3ICszMDc4LDcgQEAgc3ViIEdlbmVyYXRlSGVh
ZGVyCiAKICAgICAjIHZpc2l0IGZ1bmN0aW9uCiAgICAgaWYgKCRuZWVkc1Zpc2l0Q2hpbGRyZW4p
IHsKLSAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICBzdGF0aWMgdm9pZCB2aXNpdENo
aWxkcmVuKEpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKTtcbiIpOworICAgICAgICBwdXNoKEBo
ZWFkZXJDb250ZW50LCAiICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47XG4iKTsKICAgICAgICAg
cHVzaChAaGVhZGVyQ29udGVudCwgIiAgICB2b2lkIHZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpT
Qzo6U2xvdFZpc2l0b3ImKTtcbiIpIGlmICRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+
e0pTQ3VzdG9tTWFya0Z1bmN0aW9ufTsKICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIlxu
Iik7CiAKQEAgLTMwOTQsNyArMzA5NCw3IEBAIHN1YiBHZW5lcmF0ZUhlYWRlcgogICAgICAgICAg
ICAgIyB0aGF0IHRoZSBHQyBjYWxscyB0byBhc2sgYW4gb2JqZWN0IGlzIGl0IHdvdWxkIGxpa2Ug
dG8gbWFyayBhbnl0aGluZyBlbHNlIGFmdGVyIHRoZQogICAgICAgICAgICAgIyBwcm9ncmFtIHJl
c3VtZWQgc2luY2UgdGhlIGxhc3QgY2FsbCB0byB2aXNpdENoaWxkcmVuIG9yIHZpc2l0T3V0cHV0
Q29uc3RyYWludHMuIFNpbmNlCiAgICAgICAgICAgICAjIHRoaXMganVzdCBjYWxscyB2aXNpdEFk
ZGl0aW9uYWxDaGlsZHJlbiwgeW91IHVzdWFsbHkgZG9uJ3QgaGF2ZSB0byB3b3JyeSBhYm91dCB0
aGlzLgotICAgICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICBzdGF0aWMgdm9pZCB2
aXNpdE91dHB1dENvbnN0cmFpbnRzKEpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKTtcbiIpOwor
ICAgICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICBERUNMQVJFX1ZJU0lUX09VVFBV
VF9DT05TVFJBSU5UUztcbiIpOwogICAgICAgICB9CiAgICAgfQogCkBAIC00OTMzLDYgKzQ5MzMs
NyBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJE
T01Jc29TdWJzcGFjZXMuaCIpOwogICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJXZWJDb3JlSlNDbGll
bnREYXRhLmgiKTsKICAgICBBZGRUb0ltcGxJbmNsdWRlcygiPEphdmFTY3JpcHRDb3JlL0pTRGVz
dHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLmg+Iik7CisgICAgQWRkVG9JbXBsSW5jbHVkZXMo
IjxKYXZhU2NyaXB0Q29yZS9TbG90VmlzaXRvck1hY3Jvcy5oPiIpOwogICAgIEFkZFRvSW1wbElu
Y2x1ZGVzKCI8SmF2YVNjcmlwdENvcmUvU3Vic3BhY2VJbmxpbmVzLmg+Iik7CiAgICAgcHVzaChA
aW1wbENvbnRlbnQsICJKU0M6Oklzb1N1YnNwYWNlKiAke2NsYXNzTmFtZX06OnN1YnNwYWNlRm9y
SW1wbChKU0M6OlZNJiB2bSlcbiIpOwogICAgIHB1c2goQGltcGxDb250ZW50LCAie1xuIik7CkBA
IC00OTUyLDcgKzQ5NTMsOSBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgIHB1c2go
QGltcGxDb250ZW50LCAiICAgIGF1dG8qIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3Ike2lu
dGVyZmFjZU5hbWV9LmdldCgpO1xuIik7CiAgICAgcHVzaChAaW1wbENvbnRlbnQsICJJR05PUkVf
V0FSTklOR1NfQkVHSU4oXCJ1bnJlYWNoYWJsZS1jb2RlXCIpXG4iKTsKICAgICBwdXNoKEBpbXBs
Q29udGVudCwgIklHTk9SRV9XQVJOSU5HU19CRUdJTihcInRhdXRvbG9naWNhbC1jb21wYXJlXCIp
XG4iKTsKLSAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAoJiR7Y2xhc3NOYW1lfTo6dmlz
aXRPdXRwdXRDb25zdHJhaW50cyAhPSAmSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWlu
dHMpXG4iKTsKKyAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBjb25zdGV4cHIgVmlzaXRPdXRw
dXRDb250cmFpbnRzV2l0aFNsb3RWaXNpdG9yTWV0aG9kUmVmIG15VmlzaXRPdXRwdXRDb25zdHJh
aW50cyA9ICR7Y2xhc3NOYW1lfTo6dmlzaXRPdXRwdXRDb25zdHJhaW50cztcbiIpOworICAgIHB1
c2goQGltcGxDb250ZW50LCAiICAgIGNvbnN0ZXhwciBWaXNpdE91dHB1dENvbnRyYWludHNXaXRo
U2xvdFZpc2l0b3JNZXRob2RSZWYganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50cyA9IEpTQzo6
SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzO1xuIik7CisgICAgcHVzaChAaW1wbENvbnRl
bnQsICIgICAgaWYgKCZteVZpc2l0T3V0cHV0Q29uc3RyYWludHMgIT0gJmpzQ2VsbFZpc2l0T3V0
cHV0Q29uc3RyYWludHMpXG4iKTsKICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgY2xp
ZW50RGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTtcbiIpOwogICAg
IHB1c2goQGltcGxDb250ZW50LCAiSUdOT1JFX1dBUk5JTkdTX0VORFxuIik7CiAgICAgcHVzaChA
aW1wbENvbnRlbnQsICJJR05PUkVfV0FSTklOR1NfRU5EXG4iKTsKQEAgLTQ5NjAsNyArNDk2Myw4
IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ9
XG5cbiIpOwogCiAgICAgaWYgKCRuZWVkc1Zpc2l0Q2hpbGRyZW4pIHsKLSAgICAgICAgcHVzaChA
aW1wbENvbnRlbnQsICJ2b2lkICR7Y2xhc3NOYW1lfTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNl
bGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKVxuIik7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50
LCAidGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj5cbiIpOworICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudCwgInZvaWQgJHtjbGFzc05hbWV9Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGws
IFZpc2l0b3ImIHZpc2l0b3IpXG4iKTsKICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ7XG4i
KTsKICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgYXV0byogdGhpc09iamVjdCA9IGpz
Q2FzdDwke2NsYXNzTmFtZX0qPihjZWxsKTtcbiIpOwogICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIiAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7XG4i
KTsKQEAgLTQ5ODUsMTQgKzQ5ODksMTggQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAg
ICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIn1cblxu
Iik7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiREVGSU5FX1ZJU0lUX0NISUxEUkVOKCR7
Y2xhc3NOYW1lfSk7XG5cbiIpOworCiAgICAgICAgIGlmICgkaW50ZXJmYWNlLT5leHRlbmRlZEF0
dHJpYnV0ZXMtPntKU0N1c3RvbU1hcmtGdW5jdGlvbn0pIHsKLSAgICAgICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAidm9pZCAke2NsYXNzTmFtZX06OnZpc2l0T3V0cHV0Q29uc3RyYWludHMoSlND
ZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcilcbiIpOworICAgICAgICAgICAgcHVzaChA
aW1wbENvbnRlbnQsICJ0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPlxuIik7CisgICAgICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgInZvaWQgJHtjbGFzc05hbWV9Ojp2aXNpdE91dHB1dENvbnN0
cmFpbnRzSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpXG4iKTsKICAgICAgICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAie1xuIik7CiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudCwgIiAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PCR7Y2xhc3NOYW1lfSo+KGNlbGwp
O1xuIik7CiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBBU1NFUlRfR0NfT0JK
RUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7XG4iKTsKICAgICAgICAgICAgIHB1c2go
QGltcGxDb250ZW50LCAiICAgIEJhc2U6OnZpc2l0T3V0cHV0Q29uc3RyYWludHModGhpc09iamVj
dCwgdmlzaXRvcik7XG4iKTsKICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHRo
aXNPYmplY3QtPnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKHZpc2l0b3IpO1xuIik7CiAgICAgICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgIn1cblxuIik7CisgICAgICAgICAgICBwdXNoKEBpbXBs
Q29udGVudCwgIkRFRklORV9WSVNJVF9PVVRQVVRfQ09OU1RSQUlOVFMoJHtjbGFzc05hbWV9KTtc
blxuIik7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTY4MDcsNiArNjgxNSw3IEBAIHN1YiBHZW5l
cmF0ZUl0ZXJhYmxlRGVmaW5pdGlvbgogICAgIG15ICR2aXNpYmxlSW50ZXJmYWNlTmFtZSA9ICRj
b2RlR2VuZXJhdG9yLT5HZXRWaXNpYmxlSW50ZXJmYWNlTmFtZSgkaW50ZXJmYWNlKTsKIAogICAg
IEFkZFRvSW1wbEluY2x1ZGVzKCJKU0RPTUl0ZXJhdG9yLmgiKTsKKyAgICBBZGRUb0ltcGxJbmNs
dWRlcygiPEphdmFTY3JpcHRDb3JlL1Nsb3RWaXNpdG9yTWFjcm9zLmg+Iik7CiAKICAgICByZXR1
cm4gdW5sZXNzIElzS2V5VmFsdWVJdGVyYWJsZUludGVyZmFjZSgkaW50ZXJmYWNlKTsKIApAQCAt
Njg1MCw3ICs2ODU5LDkgQEAgcHVibGljOgogICAgICAgICBhdXRvKiBzcGFjZSA9IHNwYWNlcy5t
X3N1YnNwYWNlRm9yJHtpdGVyYXRvck5hbWV9LmdldCgpOwogSUdOT1JFX1dBUk5JTkdTX0JFR0lO
KFwidW5yZWFjaGFibGUtY29kZVwiKQogSUdOT1JFX1dBUk5JTkdTX0JFR0lOKFwidGF1dG9sb2dp
Y2FsLWNvbXBhcmVcIikKLSAgICAgICAgaWYgKCYke2l0ZXJhdG9yTmFtZX06OnZpc2l0T3V0cHV0
Q29uc3RyYWludHMgIT0gJkpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzKQorICAg
ICAgICBjb25zdGV4cHIgVmlzaXRPdXRwdXRDb250cmFpbnRzV2l0aFNsb3RWaXNpdG9yTWV0aG9k
UmVmIG15VmlzaXRPdXRwdXRDb25zdHJhaW50cyA9ICR7aXRlcmF0b3JOYW1lfTo6dmlzaXRPdXRw
dXRDb25zdHJhaW50czsKKyAgICAgICAgY29uc3RleHByIFZpc2l0T3V0cHV0Q29udHJhaW50c1dp
dGhTbG90VmlzaXRvck1ldGhvZFJlZiBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnRzID0gSlND
OjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAgICAgIGlmICgmbXlWaXNpdE91
dHB1dENvbnN0cmFpbnRzICE9ICZqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnRzKQogICAgICAg
ICAgICAgY2xpZW50RGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsK
IElHTk9SRV9XQVJOSU5HU19FTkQKIElHTk9SRV9XQVJOSU5HU19FTkQK
</data>
<flag name="commit-queue"
          id="426945"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>410885</attachid>
            <date>2020-10-08 14:27:44 -0700</date>
            <delta_ts>2021-01-12 11:45:21 -0800</delta_ts>
            <desc>test patch to check EWS.</desc>
            <filename>test.patch</filename>
            <type>text/plain</type>
            <size>474</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuaAkocmV2aXNpb24g
MjY4MDUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuaAkod29y
a2luZyBjb3B5KQpAQCAtMjE2LDYgKzIxNiw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBub3RlTGl2
ZUF1eGlsaWFyeUNlbGwoSGVhcENlbGwqKTsKICAgICAKICAgICB2b2lkIHZpc2l0Q2hpbGRyZW4o
Y29uc3QgSlNDZWxsKik7CisgICAgdm9pZCBtbGFtVGVzdChjb25zdCBKU0NlbGwqKSB7IH0gLy8g
anVzdCBjYXVzZS4KIAogICAgIHZvaWQgcHJvcGFnYXRlRXh0ZXJuYWxNZW1vcnlWaXNpdGVkSWZO
ZWNlc3NhcnkoKTsKICAgICAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>417475</attachid>
            <date>2021-01-12 11:45:21 -0800</date>
            <delta_ts>2021-01-13 14:03:33 -0800</delta_ts>
            <desc>work in progress.</desc>
            <filename>bug-217274.patch</filename>
            <type>text/plain</type>
            <size>458710</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDI3MTM2OCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtNjEwLDYgKzYxMCw4IEBAIHNldChKYXZhU2NyaXB0Q29yZV9QUklWQVRFX0ZSQU1FV09SS19I
RUEKICAgICBkb21qaXQvRE9NSklUSGVhcFJhbmdlLmgKICAgICBkb21qaXQvRE9NSklUU2lnbmF0
dXJlLmgKIAorICAgIGhlYXAvQWJzdHJhY3RTbG90VmlzaXRvci5oCisgICAgaGVhcC9BYnN0cmFj
dFNsb3RWaXNpdG9ySW5saW5lcy5oCiAgICAgaGVhcC9BbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmgK
ICAgICBoZWFwL0FsbG9jYXRpb25GYWlsdXJlTW9kZS5oCiAgICAgaGVhcC9BbGxvY2F0b3IuaApA
QCAtNjI5LDYgKzYzMSw4IEBAIHNldChKYXZhU2NyaXB0Q29yZV9QUklWQVRFX0ZSQU1FV09SS19I
RUEKICAgICBoZWFwL0NvbnN0cmFpbnRDb25jdXJyZW5jeS5oCiAgICAgaGVhcC9Db25zdHJhaW50
UGFyYWxsZWxpc20uaAogICAgIGhlYXAvQ29uc3RyYWludFZvbGF0aWxpdHkuaAorICAgIGhlYXAv
RGVidWdTbG90VmlzaXRvci5oCisgICAgaGVhcC9EZWJ1Z1Nsb3RWaXNpdG9ySW5saW5lcy5oCiAg
ICAgaGVhcC9EZWZlckdDLmgKICAgICBoZWFwL0RlbGV0ZUFsbENvZGVFZmZvcnQuaAogICAgIGhl
YXAvRGVzdHJ1Y3Rpb25Nb2RlLmgKQEAgLTY4Myw2ICs2ODcsNyBAQCBzZXQoSmF2YVNjcmlwdENv
cmVfUFJJVkFURV9GUkFNRVdPUktfSEVBCiAgICAgaGVhcC9TaW1wbGVNYXJraW5nQ29uc3RyYWlu
dC5oCiAgICAgaGVhcC9TbG90VmlzaXRvci5oCiAgICAgaGVhcC9TbG90VmlzaXRvcklubGluZXMu
aAorICAgIGhlYXAvU2xvdFZpc2l0b3JNYWNyb3MuaAogICAgIGhlYXAvU3Ryb25nLmgKICAgICBo
ZWFwL1N0cm9uZ0lubGluZXMuaAogICAgIGhlYXAvU3Vic3BhY2UuaApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9Tb3VyY2VzLnR4dAkocmV2aXNpb24gMjcxMzY4KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL1NvdXJjZXMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC01MDMsNiArNTAzLDcgQEAgZnRsL0ZU
TFN0YXRlLmNwcAogZnRsL0ZUTFRodW5rcy5jcHAKIGZ0bC9GVExWYWx1ZVJhbmdlLmNwcAogCito
ZWFwL0Fic3RyYWN0U2xvdFZpc2l0b3IuY3BwCiBoZWFwL0FsaWduZWRNZW1vcnlBbGxvY2F0b3Iu
Y3BwCiBoZWFwL0FsbG9jYXRvci5jcHAKIGhlYXAvQmxvY2tEaXJlY3RvcnkuY3BwCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQVBJV3JhcHBlck9iamVjdC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNBUElXcmFwcGVyT2JqZWN0LmgJKHJldmlz
aW9uIDI3MTM2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNBUElXcmFwcGVyT2Jq
ZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00MSw3ICs0MSw3IEBAIHB1YmxpYzoKICAgICBzdGF0
aWMgdm9pZCBzdWJzcGFjZUZvcihWTSYpIHsgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsg
fQogICAgIAogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKLSAgICBzdGF0aWMgdm9pZCB2
aXNpdENoaWxkcmVuKEpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX0VY
UE9SVF9WSVNJVF9DSElMRFJFTjsKICAgICAKICAgICB2b2lkKiB3cmFwcGVkT2JqZWN0KCkgeyBy
ZXR1cm4gbV93cmFwcGVkT2JqZWN0OyB9CiAgICAgdm9pZCBzZXRXcmFwcGVkT2JqZWN0KHZvaWQq
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNBUElXcmFwcGVyT2JqZWN0Lm1t
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNBUElXcmFwcGVyT2Jq
ZWN0Lm1tCShyZXZpc2lvbiAyNzEzNjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pT
QVBJV3JhcHBlck9iamVjdC5tbQkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM3LDcgKzM3LDcgQEAKIGNs
YXNzIEpTQVBJV3JhcHBlck9iamVjdEhhbmRsZU93bmVyIGZpbmFsIDogcHVibGljIEpTQzo6V2Vh
a0hhbmRsZU93bmVyIHsKIHB1YmxpYzoKICAgICB2b2lkIGZpbmFsaXplKEpTQzo6SGFuZGxlPEpT
Qzo6VW5rbm93bj4sIHZvaWQqKSBmaW5hbDsKLSAgICBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1
ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6U2xv
dFZpc2l0b3ImLCBjb25zdCBjaGFyKiopIGZpbmFsOworICAgIGJvb2wgaXNSZWFjaGFibGVGcm9t
T3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCwgSlND
OjpBYnN0cmFjdFNsb3RWaXNpdG9yJiwgY29uc3QgY2hhcioqKSBmaW5hbDsKIH07CiAKIHN0YXRp
YyBKU0FQSVdyYXBwZXJPYmplY3RIYW5kbGVPd25lcioganNBUElXcmFwcGVyT2JqZWN0SGFuZGxl
T3duZXIoKQpAQCAtNTYsNyArNTYsNyBAQCB2b2lkIEpTQVBJV3JhcHBlck9iamVjdEhhbmRsZU93
bmVyOjpmaW5hCiAgICAgSlNDOjpXZWFrU2V0OjpkZWFsbG9jYXRlKEpTQzo6V2Vha0ltcGw6OmFz
V2Vha0ltcGwoaGFuZGxlLnNsb3QoKSkpOwogfQogCi1ib29sIEpTQVBJV3JhcHBlck9iamVjdEhh
bmRsZU93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVu
a25vd24+IGhhbmRsZSwgdm9pZCosIEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNo
YXIqKikKK2Jvb2wgSlNBUElXcmFwcGVyT2JqZWN0SGFuZGxlT3duZXI6OmlzUmVhY2hhYmxlRnJv
bU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgSlND
OjpBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiopCiB7CiAgICAgSlND
OjpKU0FQSVdyYXBwZXJPYmplY3QqIHdyYXBwZXJPYmplY3QgPSBKU0M6OmpzQ2FzdDxKU0M6OkpT
QVBJV3JhcHBlck9iamVjdCo+KGhhbmRsZS5nZXQoKS5hc0NlbGwoKSk7CiAgICAgLy8gV2UgdXNl
IHRoZSBKU0dsb2JhbE9iamVjdCB3aGVuIHByb2Nlc3Npbmcgd2VhayBoYW5kbGVzIHRvIHByZXZl
bnQgdGhlIHNpdHVhdGlvbiB3aGVyZSB1c2luZwpAQCAtNzMsNiArNzMsOCBAQCBzdGF0aWMgSlND
X0RFQ0xBUkVfSE9TVF9GVU5DVElPTihjb25zdHJ1CiBzdGF0aWMgSlNDX0RFQ0xBUkVfQ1VTVE9N
X0dFVFRFUihjYWxsYmFja0dldHRlckpTQVBJV3JhcHBlck9iamVjdENhbGxiYWNrT2JqZWN0KTsK
IHN0YXRpYyBKU0NfREVDTEFSRV9DVVNUT01fR0VUVEVSKHN0YXRpY0Z1bmN0aW9uR2V0dGVySlNB
UElXcmFwcGVyT2JqZWN0Q2FsbGJhY2tPYmplY3QpOwogCitERUZJTkVfVEVNUExBVEVfVklTSVRf
Q0hJTERSRU4odGVtcGxhdGU8PiwgSlNDYWxsYmFja09iamVjdDxKU0FQSVdyYXBwZXJPYmplY3Q+
KTsKKwogdGVtcGxhdGUgPD4gY29uc3QgQ2xhc3NJbmZvIEpTQ2FsbGJhY2tPYmplY3Q8SlNBUElX
cmFwcGVyT2JqZWN0Pjo6c19pbmZvID0geyAiSlNBUElXcmFwcGVyT2JqZWN0IiwgJkJhc2U6OnNf
aW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU0NhbGxiYWNrT2Jq
ZWN0KSB9OwogdGVtcGxhdGUgPD4gY29uc3QgYm9vbCBKU0NhbGxiYWNrT2JqZWN0PEpTQVBJV3Jh
cHBlck9iamVjdD46Om5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOwogCkBAIC0xMjMsNyArMTI1LDgg
QEAgdm9pZCBKU0FQSVdyYXBwZXJPYmplY3Q6OnNldFdyYXBwZWRPYmplYwogICAgIG1fd3JhcHBl
ZE9iamVjdCA9IFtzdGF0aWNfY2FzdDxpZD4od3JhcHBlZE9iamVjdCkgcmV0YWluXTsKIH0KIAot
dm9pZCBKU0FQSVdyYXBwZXJPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBKU0M6
OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQg
SlNBUElXcmFwcGVyT2JqZWN0Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0
b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNBUElXcmFwcGVyT2JqZWN0KiB0aGlzT2JqZWN0ID0gSlND
Ojpqc0Nhc3Q8SlNBUElXcmFwcGVyT2JqZWN0Kj4oY2VsbCk7CiAgICAgQmFzZTo6dmlzaXRDaGls
ZHJlbihjZWxsLCB2aXNpdG9yKTsKQEAgLTEzMyw2ICsxMzYsOCBAQCB2b2lkIEpTQVBJV3JhcHBl
ck9iamVjdDo6dmlzaXRDaGlsZHJlbihKCiAgICAgICAgIHNjYW5FeHRlcm5hbE9iamVjdEdyYXBo
KHZpc2l0b3Iudm0oKSwgdmlzaXRvciwgd3JhcHBlZE9iamVjdCk7CiB9CiAKK0RFRklORV9FWFBP
UlRfVklTSVRfQ0hJTERSRU4oSlNBUElXcmFwcGVyT2JqZWN0KTsKKwogdGVtcGxhdGUgPD4KIElz
b1N1YnNwYWNlKiBKU0NhbGxiYWNrT2JqZWN0PEpTQVBJV3JhcHBlck9iamVjdD46OnN1YnNwYWNl
Rm9ySW1wbChWTSYgdm0sIFN1YnNwYWNlQWNjZXNzIG1vZGUpCiB7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdC5jcHAJKHJldmlzaW9uIDI3MTM2
OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA2LTIw
MTcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAw
Ni0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykg
MjAwNyBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAt
NDEsNiArNDEsOSBAQCBzdGF0aWMgSlNDX0RFQ0xBUkVfQ1VTVE9NX0dFVFRFUihzdGF0aWNGCiBz
dGF0aWMgSlNDX0RFQ0xBUkVfQ1VTVE9NX0dFVFRFUihjYWxsYmFja0dldHRlckpTR2xvYmFsT2Jq
ZWN0Q2FsbGJhY2tPYmplY3QpOwogc3RhdGljIEpTQ19ERUNMQVJFX0NVU1RPTV9HRVRURVIoc3Rh
dGljRnVuY3Rpb25HZXR0ZXJKU0dsb2JhbE9iamVjdENhbGxiYWNrT2JqZWN0KTsKIAorREVGSU5F
X1RFTVBMQVRFX1ZJU0lUX0NISUxEUkVOKHRlbXBsYXRlPD4sIEpTQ2FsbGJhY2tPYmplY3Q8SlNO
b25GaW5hbE9iamVjdD4pOworREVGSU5FX1RFTVBMQVRFX1ZJU0lUX0NISUxEUkVOKHRlbXBsYXRl
PD4sIEpTQ2FsbGJhY2tPYmplY3Q8SlNHbG9iYWxPYmplY3Q+KTsKKwogLy8gRGVmaW5lIHRoZSB0
d28gdHlwZXMgb2YgSlNDYWxsYmFja09iamVjdHMgd2Ugc3VwcG9ydC4KIHRlbXBsYXRlIDw+IGNv
bnN0IENsYXNzSW5mbyBKU0NhbGxiYWNrT2JqZWN0PEpTTm9uRmluYWxPYmplY3Q+OjpzX2luZm8g
PSB7ICJDYWxsYmFja09iamVjdCIsICZCYXNlOjpzX2luZm8sIG51bGxwdHIsIG51bGxwdHIsIENS
RUFURV9NRVRIT0RfVEFCTEUoSlNDYWxsYmFja09iamVjdCkgfTsKIHRlbXBsYXRlIDw+IGNvbnN0
IENsYXNzSW5mbyBKU0NhbGxiYWNrT2JqZWN0PEpTR2xvYmFsT2JqZWN0Pjo6c19pbmZvID0geyAi
Q2FsbGJhY2tHbG9iYWxPYmplY3QiLCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBudWxscHRyLCBD
UkVBVEVfTUVUSE9EX1RBQkxFKEpTQ2FsbGJhY2tPYmplY3QpIH07CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3QuaAkocmV2aXNpb24gMjcxMzY4KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTY5LDcgKzY5LDEwIEBAIHB1YmxpYzoKICAgICAgICAgbV9wcml2YXRlUHJvcGVy
dGllcy0+ZGVsZXRlUHJpdmF0ZVByb3BlcnR5KHByb3BlcnR5TmFtZSk7CiAgICAgfQogCi0gICAg
dm9pZCB2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorICAgIERFQ0xBUkVfVklT
SVRfQ0hJTERSRU47CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgorICAgIHZvaWQg
dmlzaXRDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogICAgIHsKICAgICAgICAgSlNQcml2YXRl
UHJvcGVydHlNYXAqIHByb3BlcnRpZXMgPSBtX3ByaXZhdGVQcm9wZXJ0aWVzLmdldCgpOwogICAg
ICAgICBpZiAoIXByb3BlcnRpZXMpCkBAIC0xMDMsNyArMTA2LDggQEAgcHVibGljOgogICAgICAg
ICAgICAgbV9wcm9wZXJ0eU1hcC5yZW1vdmUocHJvcGVydHlOYW1lLmltcGwoKSk7CiAgICAgICAg
IH0KIAotICAgICAgICB2b2lkIHZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisg
ICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+CisgICAgICAgIHZvaWQgdmlzaXRDaGls
ZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogICAgICAgICB7CiAgICAgICAgICAgICBMb2NrSG9sZGVy
IGxvY2tlcihtX2xvY2spOwogICAgICAgICAgICAgZm9yIChhdXRvJiBwYWlyIDogbV9wcm9wZXJ0
eU1hcCkgewpAQCAtMjE2LDEzICsyMjAsNyBAQCBwcml2YXRlOgogICAgIHN0YXRpYyBDYWxsRGF0
YSBnZXRDb25zdHJ1Y3REYXRhKEpTQ2VsbCopOwogICAgIHN0YXRpYyBDYWxsRGF0YSBnZXRDYWxs
RGF0YShKU0NlbGwqKTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBj
ZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKLSAgICB7Ci0gICAgICAgIEpTQ2FsbGJhY2tPYmpl
Y3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNDYWxsYmFja09iamVjdCo+KGNlbGwpOwotICAgICAg
ICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKChzdGF0aWNfY2FzdDxQYXJlbnQqPih0aGlzT2Jq
ZWN0KSksIEpTQ2FsbGJhY2tPYmplY3Q8UGFyZW50Pjo6aW5mbygpKTsKLSAgICAgICAgUGFyZW50
Ojp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwotICAgICAgICB0aGlzT2JqZWN0
LT5tX2NhbGxiYWNrT2JqZWN0RGF0YS0+dmlzaXRDaGlsZHJlbih2aXNpdG9yKTsKLSAgICB9Cisg
ICAgREVDTEFSRV9URU1QTEFURV9WSVNJVF9DSElMRFJFTjsKIAogICAgIHZvaWQgaW5pdChKU0ds
b2JhbE9iamVjdCopOwogIApAQCAtMjQ1LDYgKzI0MywxNiBAQCBwcml2YXRlOgogICAgIGNvbnN0
IENsYXNzSW5mbyogbV9jbGFzc0luZm8geyBudWxscHRyIH07CiB9OwogCit0ZW1wbGF0ZSA8Y2xh
c3MgUGFyZW50PgordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNDYWxsYmFja09i
amVjdDxQYXJlbnQ+Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZp
c2l0b3IpCit7CisgICAgSlNDYWxsYmFja09iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0Nh
bGxiYWNrT2JqZWN0Kj4oY2VsbCk7CisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUygoc3Rh
dGljX2Nhc3Q8UGFyZW50Kj4odGhpc09iamVjdCkpLCBKU0NhbGxiYWNrT2JqZWN0PFBhcmVudD46
OmluZm8oKSk7CisgICAgUGFyZW50Ojp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3Ip
OworICAgIHRoaXNPYmplY3QtPm1fY2FsbGJhY2tPYmplY3REYXRhLT52aXNpdENoaWxkcmVuKHZp
c2l0b3IpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogLy8gaW5jbHVkZSB0aGUgYWN0dWFs
IHRlbXBsYXRlIGNsYXNzIGltcGxlbWVudGF0aW9uCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvQVBJL0pTTWFuYWdlZFZhbHVlLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9BUEkvSlNNYW5hZ2VkVmFsdWUubW0JKHJldmlzaW9uIDI3MTM2OCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9BUEkvSlNNYW5hZ2VkVmFsdWUubW0JKHdvcmtpbmcgY29weSkKQEAgLTQy
LDcgKzQyLDcgQEAKIGNsYXNzIEpTTWFuYWdlZFZhbHVlSGFuZGxlT3duZXIgZmluYWwgOiBwdWJs
aWMgSlNDOjpXZWFrSGFuZGxlT3duZXIgewogcHVibGljOgogICAgIHZvaWQgZmluYWxpemUoSlND
OjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCkgZmluYWw7Ci0gICAgYm9vbCBp
c1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lk
KiBjb250ZXh0LCBKU0M6OlNsb3RWaXNpdG9yJiwgY29uc3QgY2hhcioqKSBmaW5hbDsKKyAgICBi
b29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4s
IHZvaWQqIGNvbnRleHQsIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYsIGNvbnN0IGNoYXIqKikg
ZmluYWw7CiB9OwogCiBzdGF0aWMgSlNNYW5hZ2VkVmFsdWVIYW5kbGVPd25lciYgbWFuYWdlZFZh
bHVlSGFuZGxlT3duZXIoKQpAQCAtMTgwLDcgKzE4MCw3IEBAIEBpbnRlcmZhY2UgSlNNYW5hZ2Vk
VmFsdWUgKFByaXZhdGVNZXRob2QKIC0gKHZvaWQpZGlzY29ubmVjdFZhbHVlOwogQGVuZAogCi1i
b29sIEpTTWFuYWdlZFZhbHVlSGFuZGxlT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3Rz
KEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6U2xvdFZpc2l0
b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCitib29sIEpTTWFuYWdlZFZhbHVlSGFu
ZGxlT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5r
bm93bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvciwg
Y29uc3QgY2hhcioqIHJlYXNvbikKIHsKICAgICBpZiAoVU5MSUtFTFkocmVhc29uKSkKICAgICAg
ICAgKnJlYXNvbiA9ICJKU01hbmFnZWRWYWx1ZSBpcyBvcGFxdWUgcm9vdCI7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTTWFya2luZ0NvbnN0cmFpbnRQcml2YXRlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTTWFya2luZ0NvbnN0cmFpbnRQ
cml2YXRlLmNwcAkocmV2aXNpb24gMjcxMzY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQ
SS9KU01hcmtpbmdDb25zdHJhaW50UHJpdmF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDcg
KzM2LDcgQEAgbmFtZXNwYWNlIHsKIEF0b21pYzx1bnNpZ25lZD4gY29uc3RyYWludENvdW50ZXI7
CiAKIHN0cnVjdCBNYXJrZXIgOiBKU01hcmtlciB7Ci0gICAgU2xvdFZpc2l0b3IqIHZpc2l0b3I7
CisgICAgQWJzdHJhY3RTbG90VmlzaXRvciogdmlzaXRvcjsKIH07CiAKIGJvb2wgaXNNYXJrZWQo
SlNNYXJrZXJSZWYgbWFya2VyUmVmLCBKU09iamVjdFJlZiBvYmplY3RSZWYpCkBAIC03NCwxMSAr
NzQsMTEgQEAgdm9pZCBKU0NvbnRleHRHcm91cEFkZE1hcmtpbmdDb25zdHJhaW50KAogICAgICAg
ICB0b0NTdHJpbmcoIkFtYyIsIGNvbnN0cmFpbnRJbmRleCwgIigiLCBSYXdQb2ludGVyKGJpdHdp
c2VfY2FzdDx2b2lkKj4oY29uc3RyYWludENhbGxiYWNrKSksICIpIiksCiAgICAgICAgIHRvQ1N0
cmluZygiQVBJIE1hcmtpbmcgQ29uc3RyYWludCAjIiwgY29uc3RyYWludEluZGV4LCAiICgiLCBS
YXdQb2ludGVyKGJpdHdpc2VfY2FzdDx2b2lkKj4oY29uc3RyYWludENhbGxiYWNrKSksICIsICIs
IFJhd1BvaW50ZXIodXNlckRhdGEpLCAiKSIpLAogICAgICAgICBbY29uc3RyYWludENhbGxiYWNr
LCB1c2VyRGF0YV0KLSAgICAgICAgKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvcikgeworICAgICAg
ICAoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikgewogICAgICAgICAgICAgTWFya2VyIG1h
cmtlcjsKICAgICAgICAgICAgIG1hcmtlci5Jc01hcmtlZCA9IGlzTWFya2VkOwogICAgICAgICAg
ICAgbWFya2VyLk1hcmsgPSBtYXJrOwotICAgICAgICAgICAgbWFya2VyLnZpc2l0b3IgPSAmc2xv
dFZpc2l0b3I7CisgICAgICAgICAgICBtYXJrZXIudmlzaXRvciA9ICZ2aXNpdG9yOwogICAgICAg
ICAgICAgCiAgICAgICAgICAgICBjb25zdHJhaW50Q2FsbGJhY2soJm1hcmtlciwgdXNlckRhdGEp
OwogICAgICAgICB9LApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1ZpcnR1YWxN
YWNoaW5lLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWaXJ0
dWFsTWFjaGluZS5tbQkocmV2aXNpb24gMjcxMzY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L0FQSS9KU1ZpcnR1YWxNYWNoaW5lLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zMTYsNyArMzE2LDgg
QEAgKyAodm9pZClzZXRDcmFzaE9uVk1DcmVhdGlvbjooQk9PTClzaG91bAogCiBAZW5kCiAKLXN0
YXRpYyB2b2lkIHNjYW5FeHRlcm5hbE9iamVjdEdyYXBoKEpTQzo6Vk0mIHZtLCBKU0M6OlNsb3RW
aXNpdG9yJiB2aXNpdG9yLCB2b2lkKiByb290LCBib29sIGxvY2tBY3F1aXJlZCkKK3RlbXBsYXRl
PHR5cGVuYW1lIFZpc2l0b3I+CitzdGF0aWMgdm9pZCBzY2FuRXh0ZXJuYWxPYmplY3RHcmFwaChK
U0M6OlZNJiB2bSwgVmlzaXRvciYgdmlzaXRvciwgdm9pZCogcm9vdCwgYm9vbCBsb2NrQWNxdWly
ZWQpCiB7CiAgICAgQGF1dG9yZWxlYXNlcG9vbCB7CiAgICAgICAgIEpTVmlydHVhbE1hY2hpbmUg
KnZpcnR1YWxNYWNoaW5lID0gW0pTVk1XcmFwcGVyQ2FjaGUgd3JhcHBlckZvckpTQ29udGV4dEdy
b3VwUmVmOnRvUmVmKCZ2bSldOwpAQCAtMzQ4LDEzICszNDksMTcgQEAgc3RhdGljIHZvaWQgc2Nh
bkV4dGVybmFsT2JqZWN0R3JhcGgoSlNDOgogICAgIH0KIH0KIAotdm9pZCBzY2FuRXh0ZXJuYWxP
YmplY3RHcmFwaChKU0M6OlZNJiB2bSwgSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvciwgdm9pZCog
cm9vdCkKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIHNjYW5FeHRlcm5hbE9iamVj
dEdyYXBoKEpTQzo6Vk0mIHZtLCBWaXNpdG9yJiB2aXNpdG9yLCB2b2lkKiByb290KQogewogICAg
IGJvb2wgbG9ja0FjcXVpcmVkID0gZmFsc2U7CiAgICAgc2NhbkV4dGVybmFsT2JqZWN0R3JhcGgo
dm0sIHZpc2l0b3IsIHJvb3QsIGxvY2tBY3F1aXJlZCk7CiB9CiAKLXZvaWQgc2NhbkV4dGVybmFs
UmVtZW1iZXJlZFNldChKU0M6OlZNJiB2bSwgSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3Rl
bXBsYXRlIHZvaWQgc2NhbkV4dGVybmFsT2JqZWN0R3JhcGgoSlNDOjpWTSYsIEpTQzo6U2xvdFZp
c2l0b3ImLCB2b2lkKik7Cit0ZW1wbGF0ZSB2b2lkIHNjYW5FeHRlcm5hbE9iamVjdEdyYXBoKEpT
Qzo6Vk0mLCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImLCB2b2lkKik7CisKK3ZvaWQgc2NhbkV4
dGVybmFsUmVtZW1iZXJlZFNldChKU0M6OlZNJiB2bSwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9y
JiB2aXNpdG9yKQogewogICAgIEBhdXRvcmVsZWFzZXBvb2wgewogICAgICAgICBKU1ZpcnR1YWxN
YWNoaW5lICp2aXJ0dWFsTWFjaGluZSA9IFtKU1ZNV3JhcHBlckNhY2hlIHdyYXBwZXJGb3JKU0Nv
bnRleHRHcm91cFJlZjp0b1JlZigmdm0pXTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9B
UEkvSlNWaXJ0dWFsTWFjaGluZUludGVybmFsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL0FQSS9KU1ZpcnR1YWxNYWNoaW5lSW50ZXJuYWwuaAkocmV2aXNpb24gMjcxMzY4
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1ZpcnR1YWxNYWNoaW5lSW50ZXJuYWwu
aAkod29ya2luZyBjb3B5KQpAQCAtNTQsOCArNTQsOCBAQCBKU0NvbnRleHRHcm91cFJlZiBnZXRH
cm91cEZyb21WaXJ0dWFsTWFjCiAKICNlbmRpZiAvLyBkZWZpbmVkKF9fT0JKQ19fKQogCi12b2lk
IHNjYW5FeHRlcm5hbE9iamVjdEdyYXBoKEpTQzo6Vk0mLCBKU0M6OlNsb3RWaXNpdG9yJiwgdm9p
ZCogcm9vdCk7Ci12b2lkIHNjYW5FeHRlcm5hbFJlbWVtYmVyZWRTZXQoSlNDOjpWTSYsIEpTQzo6
U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgc2NhbkV4dGVy
bmFsT2JqZWN0R3JhcGgoSlNDOjpWTSYsIFZpc2l0b3ImLCB2b2lkKiByb290KTsKK3ZvaWQgc2Nh
bkV4dGVybmFsUmVtZW1iZXJlZFNldChKU0M6OlZNJiwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9y
Jik7CiAKICNlbmRpZiAvLyBKU0NfT0JKQ19BUElfRU5BQkxFRAogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvQVBJL01hcmtlZEpTVmFsdWVSZWZBcnJheS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9NYXJrZWRKU1ZhbHVlUmVmQXJyYXkuY3BwCShyZXZp
c2lvbiAyNzEzNjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL01hcmtlZEpTVmFsdWVS
ZWZBcnJheS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDcgKzQ2LDkgQEAgTWFya2VkSlNWYWx1
ZVJlZkFycmF5Ojp+TWFya2VkSlNWYWx1ZVJlZgogICAgICAgICByZW1vdmUoKTsKIH0KIAotdm9p
ZCBNYXJrZWRKU1ZhbHVlUmVmQXJyYXk6OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJiB2aXNp
dG9yKQorLy90ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgorLy92b2lkIE1hcmtlZEpTVmFsdWVS
ZWZBcnJheTo6dmlzaXRBZ2dyZWdhdGUoVmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgTWFya2VkSlNW
YWx1ZVJlZkFycmF5Ojp2aXNpdEFnZ3JlZ2F0ZTEoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRv
cikKIHsKICAgICBKU1ZhbHVlUmVmKiBidWZmZXIgPSBkYXRhKCk7CiAgICAgZm9yICh1bnNpZ25l
ZCBpbmRleCA9IDA7IGluZGV4IDwgbV9zaXplOyArK2luZGV4KSB7CkBAIC02Miw0ICs2NCw3IEBA
IHZvaWQgTWFya2VkSlNWYWx1ZVJlZkFycmF5Ojp2aXNpdEFnZ3JlZ2EKICAgICB9CiB9CiAKKy8v
dGVtcGxhdGUgdm9pZCBNYXJrZWRKU1ZhbHVlUmVmQXJyYXk6OnZpc2l0QWdncmVnYXRlKFNsb3RW
aXNpdG9yJik7CisvL3RlbXBsYXRlIHZvaWQgTWFya2VkSlNWYWx1ZVJlZkFycmF5Ojp2aXNpdEFn
Z3JlZ2F0ZShEZWJ1Z1Nsb3RWaXNpdG9yJik7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9NYXJrZWRKU1ZhbHVlUmVmQXJyYXkuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL01hcmtlZEpTVmFsdWVSZWZBcnJheS5o
CShyZXZpc2lvbiAyNzEzNjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL01hcmtlZEpT
VmFsdWVSZWZBcnJheS5oCSh3b3JraW5nIGNvcHkpCkBAIC02Miw3ICs2Miw4IEBAIHB1YmxpYzoK
ICAgICAgICAgcmV0dXJuIG1faW5saW5lQnVmZmVyOwogICAgIH0KIAotICAgIHZvaWQgdmlzaXRB
Z2dyZWdhdGUoU2xvdFZpc2l0b3ImKTsKKy8vICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+
IHZvaWQgdmlzaXRBZ2dyZWdhdGUoVmlzaXRvciYpOworICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUx
KEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKIAogcHJpdmF0ZToKICAgICB1bnNpZ25lZCBtX3NpemU7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjcxMzY4KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTE5MDgsNiArMTkwOCw3IEBACiAJCUUzRkY3NTMzMUQ5
Q0VBMTgwMEM3RTE2RCAvKiBET01KSVRHZXR0ZXJTZXR0ZXIuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUzRkY3NTJGMUQ5Q0VBMTIwMEM3RTE2RCAvKiBE
T01KSVRHZXR0ZXJTZXR0ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQlFNDlEQzE2QzEyRUYyOTRFMDAxODRBMUYgLyogU291cmNlUHJvdmlkZXJD
YWNoZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQ5
REMxNTExMkVGMjcyMjAwMTg0QTFGIC8qIFNvdXJjZVByb3ZpZGVyQ2FjaGUuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlFNDlEQzE2RDEyRUYyOTUz
MDAxODRBMUYgLyogU291cmNlUHJvdmlkZXJDYWNoZUl0ZW0uaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0OURDMTQ5MTJFRjI2MUEwMDE4NEExRiAvKiBT
b3VyY2VQcm92aWRlckNhY2hlSXRlbS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CisJCUZFMDQxNTUzMjUyRUMwNzMwMDkxRUI1RCAvKiBTbG90VmlzaXRv
ck1hY3Jvcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RkUwNDE1NTIyNTJFQzA3MzAwOTFFQjVEIC8qIFNsb3RWaXNpdG9yTWFjcm9zLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRkUwNUZBRkQxRkU0Q0VE
QTAwMDkzMjMwIC8qIERlcHJlY2F0ZWRJbnNwZWN0b3JWYWx1ZXMuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTkyRDZBMTExRkJENDkxRDAwMDI0NUY0
IC8qIERlcHJlY2F0ZWRJbnNwZWN0b3JWYWx1ZXMuY3BwICovOyB9OwogCQlGRTA4NkJDQTIxMjNE
RUZCMDAzRjI5MjkgLyogRW50cnlGcmFtZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRkUwODZCQzkyMTIzREVGQTAwM0YyOTI5IC8qIEVudHJ5RnJhbWUu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlGRTBE
NEEwNjFBQjhERDBBMDAyRjU0QkYgLyogRXhlY3V0aW9uVGltZUxpbWl0VGVzdC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTBENEEwNDFBQjhERDBB
MDAyRjU0QkYgLyogRXhlY3V0aW9uVGltZUxpbWl0VGVzdC5jcHAgKi87IH07CkBAIC0xOTMwLDYg
KzE5MzEsOCBAQAogCQlGRTFFMkMzRjIyNDBERDU4MDBGNkI3MjkgLyogTWFjcm9Bc3NlbWJsZXJB
Uk02NEUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZF
MUUyQzNFMjI0MEQzMEIwMEY2QjcyOSAvKiBNYWNyb0Fzc2VtYmxlckFSTTY0RS5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUZFMUUyQzQwMjI0MERE
NjIwMEY2QjcyOSAvKiBBUk02NEVBc3NlbWJsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFMUUyQzNEMjI0MEQyRjYwMEY2QjcyOSAvKiBBUk02NEVB
c3NlbWJsZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQlGRTIwQ0U5RTE1RjA0QTk1MDBERjM0MzAgLyogTExJbnRDTG9vcC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUyMENFOUMxNUYwNEE5NTAwREYz
NDMwIC8qIExMSW50Q0xvb3AuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OworCQlGRTI4N0QwMjI1MkZCMkU4MDBENzIzRjkgLyogRGVidWdTbG90VmlzaXRv
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUyODdE
MDEyNTJGQjJFODAwRDcyM0Y5IC8qIERlYnVnU2xvdFZpc2l0b3IuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlGRTI4N0QwNDI1MkZCRkVCMDBENzIz
RjkgLyogRGVidWdTbG90VmlzaXRvcklubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFMjg3RDAzMjUyRkJGRUEwMEQ3MjNGOSAvKiBEZWJ1Z1Ns
b3RWaXNpdG9ySW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCUZFMkE4NzYwMUYwMjM4MTYwMEVCMzFCMiAvKiBNaW5pbXVtUmVzZXJ2ZWRa
b25lU2l6ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RkUyQTg3NUYxRjAyMzgxNjAwRUIzMUIyIC8qIE1pbmltdW1SZXNlcnZlZFpvbmVTaXplLmggKi87
IH07CiAJCUZFMzAyMkQzMUUzRDczQTUwMEJBQzQ5MyAvKiBTaWdpbGxDcmFzaEFuYWx5emVyLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTMwMjJEMTFF
M0Q3Mzk2MDBCQUM0OTMgLyogU2lnaWxsQ3Jhc2hBbmFseXplci5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUZFMzAyMkQ3MUU0Mjg1NzMwMEJBQzQ5
MyAvKiBWTUluc3BlY3Rvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRkUzMDIyRDUxRTQyODU2NzAwQkFDNDkzIC8qIFZNSW5zcGVjdG9yLmggKi87IH07
CkBAIC0xOTY3LDYgKzE5NzAsOCBAQAogCQlGRTgwQzE5NzFENzc1Q0REMDA4NTEwQzAgLyogQ2F0
Y2hTY29wZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RkU4MEMxOTYxRDc3NUIyNzAwODUxMEMwIC8qIENhdGNoU2NvcGUuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlGRThERTU0QjIzQUMxREFEMDA1Qzkx
NDIgLyogQ2FjaGVhYmxlSWRlbnRpZmllci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRkU4REU1NEEyM0FDMURBRDAwNUM5MTQyIC8qIENhY2hlYWJsZUlk
ZW50aWZpZXIuaCAqLzsgfTsKIAkJRkU4REU1NEQyM0FDMUU4NjAwNUM5MTQyIC8qIENhY2hlYWJs
ZUlkZW50aWZpZXJJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBGRThERTU0QzIzQUMxRTg2MDA1QzkxNDIgLyogQ2FjaGVhYmxlSWRlbnRpZmll
cklubGluZXMuaCAqLzsgfTsKKwkJRkU5MTJCNEYyNTMxMTkzMzAwRkFCRERGIC8qIEFic3RyYWN0
U2xvdFZpc2l0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEZFOTEyQjRFMjUzMTE5MzMwMEZBQkRERiAvKiBBYnN0cmFjdFNsb3RWaXNpdG9yLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJRkU5MTJCNTEy
NTMxMUFEMTAwRkFCRERGIC8qIEFic3RyYWN0U2xvdFZpc2l0b3JJbmxpbmVzLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTkxMkI1MDI1MzExQUQxMDBG
QUJEREYgLyogQWJzdHJhY3RTbG90VmlzaXRvcklubGluZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlGRTk5QjI0OTFDMjRDM0QzMDBDODIxNTkg
LyogSklUTmVnR2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBGRTk5QjI0ODFDMjRCNkQzMDBDODIxNTkgLyogSklUTmVnR2VuZXJhdG9yLmgg
Ki87IH07CiAJCUZFQTA4NjIwMTgyQjdBMDQwMEY2RDg1MSAvKiBCcmVha3BvaW50LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRUEwODYxRTE4MkI3QTA0
MDBGNkQ4NTEgLyogQnJlYWtwb2ludC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCUZFQTA4NjIxMTgyQjdBMDQwMEY2RDg1MSAvKiBEZWJ1Z2dlclBy
aW1pdGl2ZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEZFQTA4NjFGMTgyQjdBMDQwMEY2RDg1MSAvKiBEZWJ1Z2dlclByaW1pdGl2ZXMuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtNTE5Nyw2ICs1MjAy
LDcgQEAKIAkJRjY5MkE4ODcwMjU1NTk3RDAxRkY2MEY3IC8qIEpTQ0pTVmFsdWUuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNDSlNW
YWx1ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgfTsKIAkJRjcz
OTI2OTE4REM2NDMzMEFGQ0RGMEQ3IC8qIEpTU291cmNlQ29kZS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1NvdXJjZUNvZGUuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlGRTAwMjYyMjIzRjNBRjMzMDAzQTM1OEYgLyogV2ViQXNzZW1ibHkuYXNt
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5hc20uYXNtOyBuYW1lID0gV2ViQXNzZW1ibHkuYXNtOyBwYXRoID0gbGxpbnQvV2ViQXNz
ZW1ibHkuYXNtOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRTA0MTU1MjI1MkVDMDcz
MDA5MUVCNUQgLyogU2xvdFZpc2l0b3JNYWNyb3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gU2xvdFZpc2l0b3JNYWNyb3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJRkUwODZCQzkyMTIzREVGQTAwM0YyOTI5IC8qIEVudHJ5RnJhbWUuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gRW50cnlGcmFtZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlGRTBENEEwNDFBQjhERDBBMDAyRjU0QkYgLyogRXhlY3V0aW9uVGltZUxpbWl0VGVz
dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBFeGVjdXRpb25UaW1l
TGltaXRUZXN0LmNwcDsgcGF0aCA9IEFQSS90ZXN0cy9FeGVjdXRpb25UaW1lTGltaXRUZXN0LmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkUwRDRBMDUxQUI4REQwQTAwMkY1NEJG
IC8qIEV4ZWN1dGlvblRpbWVMaW1pdFRlc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gRXhlY3V0aW9uVGltZUxpbWl0VGVzdC5oOyBwYXRoID0gQVBJL3Rlc3RzL0V4ZWN1dGlv
blRpbWVMaW1pdFRlc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTUyMTAsNiAr
NTIxNiw3IEBACiAJCUZFMTIyMDI1MUJFN0Y1NjQwMDM5RTZGMiAvKiBKSVRBZGRHZW5lcmF0b3Iu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSklUQWRkR2VuZXJhdG9y
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkUxMjIwMjYxQkU3RjU2NDAwMzlF
NkYyIC8qIEpJVEFkZEdlbmVyYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBKSVRBZGRHZW5lcmF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkUxNDA5
MDYyMDU2RjNGRTAwQ0ZFMzE4IC8qIE5hdGl2ZUZ1bmN0aW9uLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IE5hdGl2ZUZ1bmN0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCUZFMTc4Q0MzMjU1RjIwNTUwMEZGRDY3NyAvKiBBYnN0cmFjdFNsb3RWaXNpdG9yLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEFic3RyYWN0U2xvdFZpc2l0
b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTE4NzlGRjFCRkJDNzNDMDAz
OEJCQ0EgLyogSklUTXVsR2VuZXJhdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEpJVE11bEdlbmVyYXRvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUZFMTg3QTAwMUJGQkM3M0MwMDM4QkJDQSAvKiBKSVRNdWxHZW5lcmF0b3IuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSklUTXVsR2VuZXJhdG9yLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUZFMTg3QTBBMUMwMjI5MjMwMDM4QkJDQSAvKiBKSVREaXZHZW5l
cmF0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSklURGl2R2Vu
ZXJhdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTUyMzEsNiArNTIzOCw4
IEBACiAJCUZFMUUyQzNFMjI0MEQzMEIwMEY2QjcyOSAvKiBNYWNyb0Fzc2VtYmxlckFSTTY0RS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNYWNyb0Fzc2VtYmxlckFSTTY0RS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTIwQ0U5QjE1RjA0QTk1MDBERjM0MzAg
LyogTExJbnRDTG9vcC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBM
TEludENMb29wLmNwcDsgcGF0aCA9IGxsaW50L0xMSW50Q0xvb3AuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlGRTIwQ0U5QzE1RjA0QTk1MDBERjM0MzAgLyogTExJbnRDTG9vcC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBMTEludENMb29wLmg7IHBhdGggPSBs
bGludC9MTEludENMb29wLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZFMjg3RDAx
MjUyRkIyRTgwMEQ3MjNGOSAvKiBEZWJ1Z1Nsb3RWaXNpdG9yLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IERlYnVnU2xvdFZpc2l0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJRkUyODdEMDMyNTJGQkZFQTAwRDcyM0Y5IC8qIERlYnVnU2xvdFZpc2l0b3JJbmxp
bmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERlYnVnU2xvdFZpc2l0b3JJ
bmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFMkE4NzVGMUYwMjM4MTYw
MEVCMzFCMiAvKiBNaW5pbXVtUmVzZXJ2ZWRab25lU2l6ZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNaW5p
bXVtUmVzZXJ2ZWRab25lU2l6ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTJF
NkE3QTFENkVBNUZFMDA2MEY4OTYgLyogVGhyb3dTY29wZS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBUaHJvd1Njb3BlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJRkUzMDIyRDAxRTNENzM5NjAwQkFDNDkzIC8qIFNpZ2lsbENyYXNoQW5hbHl6ZXIu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2lnaWxsQ3Jhc2hBbmFs
eXplci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01MzA0LDYgKzUzMTMsOCBA
QAogCQlGRThERTU0QzIzQUMxRTg2MDA1QzkxNDIgLyogQ2FjaGVhYmxlSWRlbnRpZmllcklubGlu
ZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ2FjaGVhYmxlSWRlbnRpZmll
cklubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkU4REU1NEUyM0FDM0E4
RTAwNUM5MTQyIC8qIENhY2hlYWJsZUlkZW50aWZpZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
Q2FjaGVhYmxlSWRlbnRpZmllci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZF
OTBCQjNBMUI3Q0Y2NEUwMDZCM0YwMyAvKiBWTUlubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gVk1JbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUZFOTEyQjRFMjUzMTE5MzMwMEZBQkRERiAvKiBBYnN0cmFjdFNsb3RWaXNpdG9yLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFic3RyYWN0U2xvdFZpc2l0b3IuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkU5MTJCNTAyNTMxMUFEMTAwRkFCRERGIC8qIEFic3Ry
YWN0U2xvdFZpc2l0b3JJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEFic3RyYWN0U2xvdFZpc2l0b3JJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUZFOThCNUI2MUJCOUFFMTEwMDczRTdBNiAvKiBKSVRTdWJHZW5lcmF0b3IuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSklUU3ViR2VuZXJhdG9yLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUZFOTlCMjQ3MUMyNEI2RDMwMEM4MjE1OSAvKiBKSVROZWdHZW5l
cmF0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSklUTmVnR2Vu
ZXJhdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkU5OUIyNDgxQzI0QjZE
MzAwQzgyMTU5IC8qIEpJVE5lZ0dlbmVyYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBKSVROZWdHZW5lcmF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTYyNTMsNiArNjI2NCw5IEBACiAJCTE0MkUzMTJBMTM0RkYwQTYwMEFGQURCNSAvKiBoZWFwICov
ID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQlGRTE3OENDMzI1
NUYyMDU1MDBGRkQ2NzcgLyogQWJzdHJhY3RTbG90VmlzaXRvci5jcHAgKi8sCisJCQkJRkU5MTJC
NEUyNTMxMTkzMzAwRkFCRERGIC8qIEFic3RyYWN0U2xvdFZpc2l0b3IuaCAqLywKKwkJCQlGRTkx
MkI1MDI1MzExQUQxMDBGQUJEREYgLyogQWJzdHJhY3RTbG90VmlzaXRvcklubGluZXMuaCAqLywK
IAkJCQkwRkVDM0M1MDFGMzNBNDE2MDBGNTlCNkMgLyogQWxpZ25lZE1lbW9yeUFsbG9jYXRvci5j
cHAgKi8sCiAJCQkJMEZFQzNDNTExRjMzQTQxNjAwRjU5QjZDIC8qIEFsaWduZWRNZW1vcnlBbGxv
Y2F0b3IuaCAqLywKIAkJCQkwRkE3NjIwQTFEQjk1OUY2MDBCN0EyRkQgLyogQWxsb2NhdGluZ1Nj
b3BlLmggKi8sCkBAIC02Mjg4LDYgKzYzMDIsOCBAQAogCQkJCTBGNDE1NDVBMUZEMjBCMUYwMDFC
NThGNiAvKiBDb25zdHJhaW50Q29uY3VycmVuY3kuaCAqLywKIAkJCQkwRjREOEM3MzFGQzdBOTc0
MDAxRDMyQUMgLyogQ29uc3RyYWludFBhcmFsbGVsaXNtLmggKi8sCiAJCQkJMEY3REYxMkYxRTI5
NzBENTAwOTU5NTFCIC8qIENvbnN0cmFpbnRWb2xhdGlsaXR5LmggKi8sCisJCQkJRkUyODdEMDEy
NTJGQjJFODAwRDcyM0Y5IC8qIERlYnVnU2xvdFZpc2l0b3IuaCAqLywKKwkJCQlGRTI4N0QwMzI1
MkZCRkVBMDBENzIzRjkgLyogRGVidWdTbG90VmlzaXRvcklubGluZXMuaCAqLywKIAkJCQkyQTdB
NThFRTE4MDhBNEM0MDAyMEJERjcgLyogRGVmZXJHQy5jcHAgKi8sCiAJCQkJMEYxMzZENEIxNzRB
RDY5QjAwNzVCMzU0IC8qIERlZmVyR0MuaCAqLywKIAkJCQkwRkJCNzNCQTFERUY4NjQ0MDAyQzAw
OUUgLyogRGVsZXRlQWxsQ29kZUVmZm9ydC5oICovLApAQCAtNjQwOSw2ICs2NDI1LDcgQEAKIAkJ
CQlDMjI1NDk0MjE1RjdEQkFBMDA2NUU4OTggLyogU2xvdFZpc2l0b3IuY3BwICovLAogCQkJCTE0
QkE3OEYwMTNBQUI4OEYwMDVCN0MyQyAvKiBTbG90VmlzaXRvci5oICovLAogCQkJCTBGQ0I0MDg1
MTVDMEEzQzMwMDQ4OTMyQiAvKiBTbG90VmlzaXRvcklubGluZXMuaCAqLywKKwkJCQlGRTA0MTU1
MjI1MkVDMDczMDA5MUVCNUQgLyogU2xvdFZpc2l0b3JNYWNyb3MuaCAqLywKIAkJCQkwRkRFODdG
QTFERkU2RTUwMDA2NEMzOTAgLyogU3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlci5jcHAgKi8sCiAJ
CQkJMEZERTg3RkIxREZFNkU1MDAwNjRDMzkwIC8qIFNwYWNlVGltZU11dGF0b3JTY2hlZHVsZXIu
aCAqLywKIAkJCQkwRjRGODI4OTFFMzFCOTcxMDA3NTE4NEMgLyogU3RvY2hhc3RpY1NwYWNlVGlt
ZU11dGF0b3JTY2hlZHVsZXIuY3BwICovLApAQCAtOTI1NCw2ICs5MjcxLDcgQEAKIAkJCQk1MjY3
OEY4RjFBMDMxMDA5MDA2QTMwNkQgLyogQmFzaWNCbG9ja0xvY2F0aW9uLmggaW4gSGVhZGVycyAq
LywKIAkJCQkxNDdCODNBQzBFNkRCOEM5MDA0Nzc1QTQgLyogQmF0Y2hlZFRyYW5zaXRpb25PcHRp
bWl6ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2OTc2RTVGMUZBM0U4QkMwMEU3QzRFMSAvKiBC
aWdJbnRDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCisJCQkJRkUwNDE1NTMyNTJFQzA3MzAw
OTFFQjVEIC8qIFNsb3RWaXNpdG9yTWFjcm9zLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjY3MzlE
MjEzQkZERTcxMDAyM0Q4N0MgLyogQmlnSW50ZWdlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODYx
ODE2NzcxRkI3OTI0MjAwRUNDNEVDIC8qIEJpZ0ludE9iamVjdC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJODY5NzZFNUUxRkEzRThCNjAwRTdDNEUxIC8qIEJpZ0ludFByb3RvdHlwZS5oIGluIEhlYWRl
cnMgKi8sCkBAIC05NTMxLDYgKzk1NDksNyBAQAogCQkJCTBGRDgyRTU3MTQxREFGMTAwMDE3OUM5
NCAvKiBERkdPU1JFbnRyeS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEOEEzMjYxN0Q1MUY1NzAw
Q0EyQzQwIC8qIERGR09TUkVudHJ5cG9pbnRDcmVhdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRkMwOTc2QTE0NjhBNkY3MDBDRjI0NDIgLyogREZHT1NSRXhpdC5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJRkU5MTJCNEYyNTMxMTkzMzAwRkFCRERGIC8qIEFic3RyYWN0U2xvdFZpc2l0b3Iu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGMjM1QkVDMTcxNzhFNzMwMDY5MEM3RiAvKiBERkdPU1JF
eGl0QmFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGQjkyMUMxNkQwMkYxMTAwNTVBNURCIC8q
IERGR09TUkV4aXRDb21waWxhdGlvbkluZm8uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNzAyNUFB
MTcxNEIwRkMwMDM4MkMwRSAvKiBERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uaCBpbiBIZWFkZXJz
ICovLApAQCAtOTgxNiw2ICs5ODM1LDcgQEAKIAkJCQlBNTEzRTVCRTE4NUJGQUNDMDA3RTk1QUQg
LyogSW5qZWN0ZWRTY3JpcHRIb3N0LmggaW4gSGVhZGVycyAqLywKIAkJCQlBNTEzRTVDQjE4NUY5
NjI0MDA3RTk1QUQgLyogSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBNTg0MEUyMTE4N0I3Qjg2MDA4NDNCMTAgLyogSW5qZWN0ZWRTY3JpcHRNb2R1bGUuaCBpbiBI
ZWFkZXJzICovLAorCQkJCUZFMjg3RDAyMjUyRkIyRTgwMEQ3MjNGOSAvKiBEZWJ1Z1Nsb3RWaXNp
dG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNTEzRTVDNzE4NUY5NDQ2MDA3RTk1QUQgLyogSW5q
ZWN0ZWRTY3JpcHRTb3VyY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTk5NTlFOTMyMUJEMTgyNzkw
MDFBQTQxMyAvKiBpbmxpbmUtYW5kLW1pbmlmeS1zdHlsZXNoZWV0cy1hbmQtc2NyaXB0cy5weSBp
biBIZWFkZXJzICovLAogCQkJCTc5MDVCQjY5MUQxMjA1MEUwMDE5RkU1NyAvKiBJbmxpbmVBY2Nl
c3MuaCBpbiBIZWFkZXJzICovLApAQCAtMTAxMjAsNiArMTAxNDAsNyBAQAogCQkJCTc5NUFDNjE4
MjBBMjM1NUUwMDUyQzc2QyAvKiBKU1ZpcnR1YWxNYWNoaW5lUHJpdmF0ZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQTdDQTNBRTgxN0RBNDFBRTAwNjUzOEFGIC8qIEpTV2Vha01hcC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQTc0ODJFOTMxMTZBN0NBRDAwM0IwNzEyIC8qIEpTV2Vha09iamVjdE1hcFJl
ZkludGVybmFsLmggaW4gSGVhZGVycyAqLywKKwkJCQlGRTkxMkI1MTI1MzExQUQxMDBGQUJEREYg
LyogQWJzdHJhY3RTbG90VmlzaXRvcklubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3NDgy
QjkzMTE2NzExNDcwMDNCMDcxMiAvKiBKU1dlYWtPYmplY3RNYXBSZWZQcml2YXRlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk1MzlCRkJCMDIyQUQzQ0RDMDAyM0Y0QzAgLyogSlNXZWFrT2JqZWN0UmVm
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjBCMjg2QjFFQjhFNkNGMDAwRUI1RDIgLyogSlNXZWFr
UHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0xMDE5MSw2ICsxMDIxMiw3IEBACiAJCQkJQTc0
REVGOTQxODJEOTkxNDAwNTIyQzIyIC8qIE1hcEl0ZXJhdG9yUHJvdG90eXBlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlBNzAwODczRTE3Q0JFOEQzMDBDM0U2NDMgLyogTWFwUHJvdG90eXBlLmggaW4g
SGVhZGVycyAqLywKIAkJCQkxNDJENkYwOTEzNTM5QTI4MDBCMDJFODYgLyogTWFya2VkQmxvY2su
aCBpbiBIZWFkZXJzICovLAorCQkJCUZFMjg3RDA0MjUyRkJGRUIwMEQ3MjNGOSAvKiBEZWJ1Z1Ns
b3RWaXNpdG9ySW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY3QzVGQjgxRDg4OEEwQzAw
NDRGNUUyIC8qIE1hcmtlZEJsb2NrSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQxNDQ4
Q0IxM0ExNzZFQzAwRjVCQTFBIC8qIE1hcmtlZEJsb2NrU2V0LmggaW4gSGVhZGVycyAqLywKIAkJ
CQlFM0QzNTE1RjI0MUI4OUQ3MDA4REMxNkUgLyogTWFya2VkSlNWYWx1ZVJlZkFycmF5LmggaW4g
SGVhZGVycyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL3drYnVpbHRp
bnMvYnVpbHRpbnNfZ2VuZXJhdGVfaW50ZXJuYWxzX3dyYXBwZXJfaGVhZGVyLnB5Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL3drYnVpbHRpbnMvYnVpbHRpbnNf
Z2VuZXJhdGVfaW50ZXJuYWxzX3dyYXBwZXJfaGVhZGVyLnB5CShyZXZpc2lvbiAyNzEzNjgpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy93a2J1aWx0aW5zL2J1aWx0aW5zX2dlbmVy
YXRlX2ludGVybmFsc193cmFwcGVyX2hlYWRlci5weQkod29ya2luZyBjb3B5KQpAQCAtOTMsNyAr
OTMsNyBAQCBjbGFzcyBCdWlsdGluc0ludGVybmFsc1dyYXBwZXJIZWFkZXJHZW5lCiAKICAgICBk
ZWYgZ2VuZXJhdGVfbWV0aG9kcyhzZWxmKToKICAgICAgICAgcmV0dXJuICIiIgotICAgIHZvaWQg
dmlzaXQoSlNDOjpTbG90VmlzaXRvciYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+
IHZvaWQgdmlzaXQoVmlzaXRvciYpOwogICAgIHZvaWQgaW5pdGlhbGl6ZShKU0RPTUdsb2JhbE9i
amVjdCYpOwogIiIiCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL3drYnVp
bHRpbnMvYnVpbHRpbnNfZ2VuZXJhdGVfaW50ZXJuYWxzX3dyYXBwZXJfaW1wbGVtZW50YXRpb24u
cHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvd2tidWlsdGlu
cy9idWlsdGluc19nZW5lcmF0ZV9pbnRlcm5hbHNfd3JhcHBlcl9pbXBsZW1lbnRhdGlvbi5weQko
cmV2aXNpb24gMjcxMzY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvd2tidWls
dGlucy9idWlsdGluc19nZW5lcmF0ZV9pbnRlcm5hbHNfd3JhcHBlcl9pbXBsZW1lbnRhdGlvbi5w
eQkod29ya2luZyBjb3B5KQpAQCAtMTIwLDEzICsxMjAsMTYgQEAgY2xhc3MgQnVpbHRpbnNJbnRl
cm5hbHNXcmFwcGVySW1wbGVtZW50YQogICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQog
CiAgICAgZGVmIGdlbmVyYXRlX3Zpc2l0X21ldGhvZChzZWxmKToKLSAgICAgICAgbGluZXMgPSBb
InZvaWQgSlNCdWlsdGluSW50ZXJuYWxGdW5jdGlvbnM6OnZpc2l0KEpTQzo6U2xvdFZpc2l0b3Im
IHZpc2l0b3IpIiwKKyAgICAgICAgbGluZXMgPSBbInRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+
IiwKKyAgICAgICAgICAgICAgICAgInZvaWQgSlNCdWlsdGluSW50ZXJuYWxGdW5jdGlvbnM6OnZp
c2l0KFZpc2l0b3ImIHZpc2l0b3IpIiwKICAgICAgICAgICAgICAgICAgInsiXQogICAgICAgICBm
b3Igb2JqZWN0IGluIHNlbGYuaW50ZXJuYWxzOgogICAgICAgICAgICAgdmlzaXQgPSAiICAgICVz
LnZpc2l0KHZpc2l0b3IpOyIgJSBzZWxmLm1lbWJlcl9uYW1lKG9iamVjdCkKICAgICAgICAgICAg
IGxpbmVzLmFwcGVuZChCdWlsdGluc0dlbmVyYXRvci53cmFwX3dpdGhfZ3VhcmQob2JqZWN0LmFu
bm90YXRpb25zLmdldCgnY29uZGl0aW9uYWwnKSwgdmlzaXQpKQogICAgICAgICBsaW5lcy5hcHBl
bmQoIiAgICBVTlVTRURfUEFSQU0odmlzaXRvcik7IikKICAgICAgICAgbGluZXMuYXBwZW5kKCJ9
XG4iKQorICAgICAgICBsaW5lcy5hcHBlbmQoInRlbXBsYXRlIHZvaWQgSlNCdWlsdGluSW50ZXJu
YWxGdW5jdGlvbnM6OnZpc2l0KEFic3RyYWN0U2xvdFZpc2l0b3ImKTsiKQorICAgICAgICBsaW5l
cy5hcHBlbmQoInRlbXBsYXRlIHZvaWQgSlNCdWlsdGluSW50ZXJuYWxGdW5jdGlvbnM6OnZpc2l0
KFNsb3RWaXNpdG9yJik7XG4iKQogICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQogCiAg
ICAgZGVmIF9nZW5lcmF0ZV9pbml0aWFsaXplX3N0YXRpY19nbG9iYWxzKHNlbGYpOgpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvd2tidWlsdGlucy9idWlsdGluc190ZW1wbGF0
ZXMucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvd2tidWls
dGlucy9idWlsdGluc190ZW1wbGF0ZXMucHkJKHJldmlzaW9uIDI3MTM2OCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9TY3JpcHRzL3drYnVpbHRpbnMvYnVpbHRpbnNfdGVtcGxhdGVzLnB5CSh3
b3JraW5nIGNvcHkpCkBAIC0xODgsNyArMTg4LDggQEAgcHVibGljOgogICAgIGV4cGxpY2l0ICR7
b2JqZWN0TmFtZX1CdWlsdGluRnVuY3Rpb25zKEpTQzo6Vk0mIHZtKSA6IG1fdm0odm0pIHsgfQog
CiAgICAgdm9pZCBpbml0KEpTQzo6SlNHbG9iYWxPYmplY3QmKTsKLSAgICB2b2lkIHZpc2l0KEpT
Qzo6U2xvdFZpc2l0b3ImKTsKKyAgICAvLyBtbGFtIHZvaWQgdmlzaXQoSlNDOjpTbG90VmlzaXRv
ciYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgdmlzaXQoVmlzaXRvciYp
OwogCiBwdWJsaWM6CiAgICAgSlNDOjpWTSYgbV92bTsKQEAgLTIwNywxMCArMjA4LDE1IEBAIGlu
bGluZSB2b2lkICR7b2JqZWN0TmFtZX1CdWlsdGluRnVuY3Rpb24KICN1bmRlZiBFWFBPUlRfRlVO
Q1RJT04KIH0KIAotaW5saW5lIHZvaWQgJHtvYmplY3ROYW1lfUJ1aWx0aW5GdW5jdGlvbnM6OnZp
c2l0KEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
PgoraW5saW5lIHZvaWQgJHtvYmplY3ROYW1lfUJ1aWx0aW5GdW5jdGlvbnM6OnZpc2l0KFZpc2l0
b3ImIHZpc2l0b3IpCiB7CiAjZGVmaW5lIFZJU0lUX0ZVTkNUSU9OKG5hbWUpIHZpc2l0b3IuYXBw
ZW5kKG1fIyNuYW1lIyNGdW5jdGlvbik7CiAgICAgJHttYWNyb1ByZWZpeH1fRk9SRUFDSF8ke29i
amVjdE1hY3JvfV9CVUlMVElOX0ZVTkNUSU9OX05BTUUoVklTSVRfRlVOQ1RJT04pCiAjdW5kZWYg
VklTSVRfRlVOQ1RJT04KIH0KKwordGVtcGxhdGUgdm9pZCAke29iamVjdE5hbWV9QnVpbHRpbkZ1
bmN0aW9uczo6dmlzaXQoSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lk
ICR7b2JqZWN0TmFtZX1CdWlsdGluRnVuY3Rpb25zOjp2aXNpdChKU0M6OlNsb3RWaXNpdG9yJik7
CisKICIiIikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNz
Q2FzZS5jcHAJKHJldmlzaW9uIDI3MTM2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9BY2Nlc3NDYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzI5LDE2ICs3MjksMTcgQEAg
Ym9vbCBBY2Nlc3NDYXNlOjp2aXNpdFdlYWsoVk0mIHZtKSBjb25zdAogICAgIHJldHVybiBpc1Zh
bGlkOwogfQogCi1ib29sIEFjY2Vzc0Nhc2U6OnByb3BhZ2F0ZVRyYW5zaXRpb25zKFNsb3RWaXNp
dG9yJiB2aXNpdG9yKSBjb25zdAordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK2Jvb2wgQWNj
ZXNzQ2FzZTo6cHJvcGFnYXRlVHJhbnNpdGlvbnMoVmlzaXRvciYgdmlzaXRvcikgY29uc3QKIHsK
ICAgICBib29sIHJlc3VsdCA9IHRydWU7CiAKICAgICBpZiAobV9zdHJ1Y3R1cmUpCi0gICAgICAg
IHJlc3VsdCAmPSBtX3N0cnVjdHVyZS0+bWFya0lmQ2hlYXAodmlzaXRvcik7CisgICAgICAgIHJl
c3VsdCAmPSBtX3N0cnVjdHVyZS0+bWFya0lmQ2hlYXAxKHZpc2l0b3IpOwogCiAgICAgaWYgKG1f
cG9seVByb3RvQWNjZXNzQ2hhaW4pIHsKICAgICAgICAgZm9yIChTdHJ1Y3R1cmVJRCBzdHJ1Y3R1
cmVJRCA6IG1fcG9seVByb3RvQWNjZXNzQ2hhaW4tPmNoYWluKCkpCi0gICAgICAgICAgICByZXN1
bHQgJj0gdmlzaXRvci52bSgpLmdldFN0cnVjdHVyZShzdHJ1Y3R1cmVJRCktPm1hcmtJZkNoZWFw
KHZpc2l0b3IpOworICAgICAgICAgICAgcmVzdWx0ICY9IHZpc2l0b3Iudm0oKS5nZXRTdHJ1Y3R1
cmUoc3RydWN0dXJlSUQpLT5tYXJrSWZDaGVhcDEodmlzaXRvcik7CiAgICAgfQogCiAgICAgc3dp
dGNoIChtX3R5cGUpIHsKQEAgLTc1NiwxMSArNzU3LDE5IEBAIGJvb2wgQWNjZXNzQ2FzZTo6cHJv
cGFnYXRlVHJhbnNpdGlvbnMoU2wKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi12b2lkIEFjY2Vz
c0Nhc2U6OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBjb25zdAordGVtcGxh
dGUgYm9vbCBBY2Nlc3NDYXNlOjpwcm9wYWdhdGVUcmFuc2l0aW9ucyhTbG90VmlzaXRvciYpIGNv
bnN0OwordGVtcGxhdGUgYm9vbCBBY2Nlc3NDYXNlOjpwcm9wYWdhdGVUcmFuc2l0aW9ucyhBYnN0
cmFjdFNsb3RWaXNpdG9yJikgY29uc3Q7CisKKy8vdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4K
Ky8vdm9pZCBBY2Nlc3NDYXNlOjp2aXNpdEFnZ3JlZ2F0ZShWaXNpdG9yJiB2aXNpdG9yKSBjb25z
dAordm9pZCBBY2Nlc3NDYXNlOjp2aXNpdEFnZ3JlZ2F0ZTEoQWJzdHJhY3RTbG90VmlzaXRvciYg
dmlzaXRvcikgY29uc3QKIHsKLSAgICBtX2lkZW50aWZpZXIudmlzaXRBZ2dyZWdhdGUodmlzaXRv
cik7CisgICAgbV9pZGVudGlmaWVyLnZpc2l0QWdncmVnYXRlMSh2aXNpdG9yKTsKIH0KIAorLy90
ZW1wbGF0ZSB2b2lkIEFjY2Vzc0Nhc2U6OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJikgY29u
c3Q7CisvL3RlbXBsYXRlIHZvaWQgQWNjZXNzQ2FzZTo6dmlzaXRBZ2dyZWdhdGUoRGVidWdTbG90
VmlzaXRvciYpIGNvbnN0OworCiB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlV2l0aEd1YXJkKAog
ICAgIEFjY2Vzc0dlbmVyYXRpb25TdGF0ZSYgc3RhdGUsIENDYWxsSGVscGVyczo6SnVtcExpc3Qm
IGZhbGxUaHJvdWdoKQogewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Fj
Y2Vzc0Nhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
QWNjZXNzQ2FzZS5oCShyZXZpc2lvbiAyNzEzNjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQWNjZXNzQ2FzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNzUsOSArMjc1LDEwIEBA
IHByaXZhdGU6CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KICAgICB2b2lkIGZvckVh
Y2hEZXBlbmRlbnRDZWxsKFZNJiwgY29uc3QgRnVuY3RvciYpIGNvbnN0OwogCi0gICAgdm9pZCB2
aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYpIGNvbnN0OworLy8gICAgdGVtcGxhdGU8dHlwZW5h
bWUgVmlzaXRvcj4gdm9pZCB2aXNpdEFnZ3JlZ2F0ZShWaXNpdG9yJikgY29uc3Q7CisgICAgdm9p
ZCB2aXNpdEFnZ3JlZ2F0ZTEoQWJzdHJhY3RTbG90VmlzaXRvciYpIGNvbnN0OwogICAgIGJvb2wg
dmlzaXRXZWFrKFZNJikgY29uc3Q7Ci0gICAgYm9vbCBwcm9wYWdhdGVUcmFuc2l0aW9ucyhTbG90
VmlzaXRvciYpIGNvbnN0OworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IGJvb2wgcHJv
cGFnYXRlVHJhbnNpdGlvbnMoVmlzaXRvciYpIGNvbnN0OwogCiAgICAgLy8gRklYTUU6IFRoaXMg
b25seSBleGlzdHMgYmVjYXVzZSBvZiBob3cgQWNjZXNzQ2FzZSBwdXRzIHBvc3QtZ2VuZXJhdGlv
biB0aGluZ3MgaW50byBpdHNlbGYuCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE1NjQ1NgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0J5VmFsSW5mby5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0J5VmFsSW5mby5jcHAJKHJldmlzaW9uIDI3MTM2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9CeVZhbEluZm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiwxMSArMzIs
MTYgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICNpZiBFTkFCTEUoSklUKQogCi12b2lkIEJ5VmFsSW5m
bzo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3RlbXBsYXRlPHR5cGVu
YW1lIFZpc2l0b3I+CisvL3ZvaWQgQnlWYWxJbmZvOjp2aXNpdEFnZ3JlZ2F0ZShWaXNpdG9yJiB2
aXNpdG9yKQordm9pZCBCeVZhbEluZm86OnZpc2l0QWdncmVnYXRlMShBYnN0cmFjdFNsb3RWaXNp
dG9yJiB2aXNpdG9yKQogewotICAgIGNhY2hlZElkLnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOwor
ICAgIGNhY2hlZElkLnZpc2l0QWdncmVnYXRlMSh2aXNpdG9yKTsKIH0KIAorLy90ZW1wbGF0ZSB2
b2lkIEJ5VmFsSW5mbzo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImKTsKKy8vdGVtcGxhdGUg
dm9pZCBCeVZhbEluZm86OnZpc2l0QWdncmVnYXRlKERlYnVnU2xvdFZpc2l0b3ImKTsKKwogI2Vu
ZGlmIC8vIEVOQUJMRShKSVQpCiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5VmFsSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeVZhbEluZm8uaAkocmV2aXNpb24gMjcxMzY4KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5VmFsSW5mby5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yNDYsNyArMjQ2LDggQEAgc3RydWN0IEJ5VmFsSW5mbyB7CiAgICAgICAgIHRoaXMtPnNl
ZW4gPSBmYWxzZTsKICAgICB9CiAKLSAgICB2b2lkIHZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9y
Jik7CisvLyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIHZpc2l0QWdncmVnYXRl
KFZpc2l0b3ImKTsKKyAgICB2b2lkIHZpc2l0QWdncmVnYXRlMShBYnN0cmFjdFNsb3RWaXNpdG9y
Jik7CiAKICAgICBDb2RlTG9jYXRpb25KdW1wPEpTSW50ZXJuYWxQdHJUYWc+IG5vdEluZGV4SnVt
cDsKICAgICBDb2RlTG9jYXRpb25KdW1wPEpTSW50ZXJuYWxQdHJUYWc+IGJhZFR5cGVKdW1wOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJl
dmlzaW9uIDI3MTM2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxv
Y2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw5IEBACiAjaW5jbHVkZSAiY29uZmln
LmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAKKyNpbmNsdWRlICJBYnN0cmFjdFNsb3RWaXNp
dG9yLmgiIC8vIG1sYW0gVEVTVAorI2luY2x1ZGUgIlBvbHltb3JwaGljQWNjZXNzLmgiIC8vIG1s
YW0gVEVTVAorCiAjaW5jbHVkZSAiQXJpdGhQcm9maWxlLmgiCiAjaW5jbHVkZSAiQmFzaWNCbG9j
a0xvY2F0aW9uLmgiCiAjaW5jbHVkZSAiQnlWYWxJbmZvLmgiCkBAIC05OTgsNyArMTAwMSw4IEBA
IHNpemVfdCBDb2RlQmxvY2s6OmVzdGltYXRlZFNpemUoSlNDZWxsKiAKICAgICByZXR1cm4gQmFz
ZTo6ZXN0aW1hdGVkU2l6ZShjZWxsLCB2bSkgKyBleHRyYU1lbW9yeUFsbG9jYXRlZDsKIH0KIAot
dm9pZCBDb2RlQmxvY2s6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYg
dmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIENvZGVCbG9jazo6dmlz
aXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIENv
ZGVCbG9jayogdGhpc09iamVjdCA9IGpzQ2FzdDxDb2RlQmxvY2sqPihjZWxsKTsKICAgICBBU1NF
UlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC0xMDA3LDcgKzEw
MTEsMTAgQEAgdm9pZCBDb2RlQmxvY2s6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZQogICAgIHRo
aXNPYmplY3QtPnZpc2l0Q2hpbGRyZW4odmlzaXRvcik7CiB9CiAKLXZvaWQgQ29kZUJsb2NrOjp2
aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorREVGSU5FX1ZJU0lUX0NISUxEUkVO
KENvZGVCbG9jayk7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIENvZGVCbG9j
azo6dmlzaXRDaGlsZHJlbkltcGwoVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBDb25jdXJyZW50
SlNMb2NrZXIgbG9ja2VyKG1fbG9jayk7CiAgICAgaWYgKENvZGVCbG9jayogb3RoZXJCbG9jayA9
IHNwZWNpYWxPU1JFbnRyeUJsb2NrT3JOdWxsKCkpCkBAIC0xMDI2LDYgKzEwMzMsOCBAQCB2b2lk
IENvZGVCbG9jazo6dmlzaXRDaGlsZHJlbihTbG90VmlzaXRvCiAgICAgVk06OlNwYWNlQW5kU2V0
OjpzZXRGb3IoKnN1YnNwYWNlKCkpLmFkZCh0aGlzKTsKIH0KIAorREVGSU5FX0lOU1RBTkNFX1ZJ
U0lUX0NISUxEUkVOKENvZGVCbG9jayk7CisKIGJvb2wgQ29kZUJsb2NrOjpzaG91bGRWaXNpdFN0
cm9uZ2x5KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYgbG9ja2VyKQogewogICAgIGlmIChPcHRp
b25zOjpmb3JjZUNvZGVCbG9ja0xpdmVuZXNzKCkpCkBAIC0xMDk4LDcgKzExMDcsOSBAQCBib29s
IENvZGVCbG9jazo6c2hvdWxkSmV0dGlzb25EdWVUb09sZEFnCiB9CiAKICNpZiBFTkFCTEUoREZH
X0pJVCkKLXN0YXRpYyBib29sIHNob3VsZE1hcmtUcmFuc2l0aW9uKFZNJiB2bSwgREZHOjpXZWFr
UmVmZXJlbmNlVHJhbnNpdGlvbiYgdHJhbnNpdGlvbikKKy8vIG1sYW0gRklYTUU6IHZtLmhlYXAu
aXNNYXJrZWQgbmVlZHMgdG8gYmUgYWJzdHJhY3RlZC4KKy8vc3RhdGljIGJvb2wgc2hvdWxkTWFy
a1RyYW5zaXRpb24oVk0mIHZtLCBERkc6OldlYWtSZWZlcmVuY2VUcmFuc2l0aW9uJiB0cmFuc2l0
aW9uKQorc3RhdGljIGlubGluZSBib29sIHNob3VsZE1hcmtUcmFuc2l0aW9uKFZNJiB2bSwgREZH
OjpXZWFrUmVmZXJlbmNlVHJhbnNpdGlvbiYgdHJhbnNpdGlvbikKIHsKICAgICBpZiAodHJhbnNp
dGlvbi5tX2NvZGVPcmlnaW4gJiYgIXZtLmhlYXAuaXNNYXJrZWQodHJhbnNpdGlvbi5tX2NvZGVP
cmlnaW4uZ2V0KCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xMTE5LDcgKzExMzAsMzYg
QEAgQnl0ZWNvZGVJbmRleCBDb2RlQmxvY2s6OmJ5dGVjb2RlSW5kZXhGbwogfQogI2VuZGlmIC8v
IEVOQUJMRShERkdfSklUKQogCi12b2lkIENvZGVCbG9jazo6cHJvcGFnYXRlVHJhbnNpdGlvbnMo
Y29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3RlbXBs
YXRlPHR5cGVuYW1lIFZpc2l0b3I+CisvL2Jvb2wgU3RydWN0dXJlU3R1YkluZm86OnByb3BhZ2F0
ZVRyYW5zaXRpb25zMShWaXNpdG9yJiB2aXNpdG9yKQorYm9vbCBTdHJ1Y3R1cmVTdHViSW5mbzo6
cHJvcGFnYXRlVHJhbnNpdGlvbnMxKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7Cisg
ICAgc3dpdGNoIChtX2NhY2hlVHlwZSkgeworICAgIGNhc2UgQ2FjaGVUeXBlOjpVbnNldDoKKyAg
ICBjYXNlIENhY2hlVHlwZTo6QXJyYXlMZW5ndGg6CisgICAgY2FzZSBDYWNoZVR5cGU6OlN0cmlu
Z0xlbmd0aDoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgY2FzZSBDYWNoZVR5cGU6OkdldEJ5
SWRTZWxmOgorICAgIGNhc2UgQ2FjaGVUeXBlOjpQdXRCeUlkUmVwbGFjZToKKyAgICBjYXNlIENh
Y2hlVHlwZTo6SW5CeUlkU2VsZjoKKyAgICAgICAgcmV0dXJuIHUuYnlJZFNlbGYuYmFzZU9iamVj
dFN0cnVjdHVyZS0+bWFya0lmQ2hlYXAxKHZpc2l0b3IpOworICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgY2FzZSBDYWNoZVR5cGU6OlN0dWI6CisgICAgICAgIHJldHVybiB1LnN0dWItPnByb3Bh
Z2F0ZVRyYW5zaXRpb25zMTAodmlzaXRvcik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CisgICAgCisvLyAgICBVTlVTRURfUEFSQU0odmlzaXRvcik7IC8vIG1sYW0gVEVTVAorICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKKy8vdGVt
cGxhdGU8PiBib29sIFN0cnVjdHVyZVN0dWJJbmZvOjpwcm9wYWdhdGVUcmFuc2l0aW9uczEoU2xv
dFZpc2l0b3ImKTsKKy8vdGVtcGxhdGU8PiBib29sIFN0cnVjdHVyZVN0dWJJbmZvOjpwcm9wYWdh
dGVUcmFuc2l0aW9uczEoQWJzdHJhY3RTbG90VmlzaXRvciYpOworCisvL3RlbXBsYXRlPHR5cGVu
YW1lIFZpc2l0b3I+CisvL3ZvaWQgQ29kZUJsb2NrOjpwcm9wYWdhdGVUcmFuc2l0aW9ucyhjb25z
dCBDb25jdXJyZW50SlNMb2NrZXImLCBWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBDb2RlQmxvY2s6
OnByb3BhZ2F0ZVRyYW5zaXRpb25zMShjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBBYnN0cmFj
dFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFZNJiB2bSA9ICptX3ZtOwogCkBAIC0xMTYz
LDcgKzEyMDMsNyBAQCB2b2lkIENvZGVCbG9jazo6cHJvcGFnYXRlVHJhbnNpdGlvbnMoY29uCiAg
ICAgaWYgKEpJVENvZGU6OmlzSklUKGppdFR5cGUoKSkpIHsKICAgICAgICAgaWYgKGF1dG8qIGpp
dERhdGEgPSBtX2ppdERhdGEuZ2V0KCkpIHsKICAgICAgICAgICAgIGZvciAoU3RydWN0dXJlU3R1
YkluZm8qIHN0dWJJbmZvIDogaml0RGF0YS0+bV9zdHViSW5mb3MpCi0gICAgICAgICAgICAgICAg
c3R1YkluZm8tPnByb3BhZ2F0ZVRyYW5zaXRpb25zKHZpc2l0b3IpOworICAgICAgICAgICAgICAg
IHN0dWJJbmZvLT5wcm9wYWdhdGVUcmFuc2l0aW9uczEodmlzaXRvcik7CiAgICAgICAgIH0KICAg
ICB9CiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKQEAgLTExNzIsMTAgKzEyMTIsMTAgQEAgdm9pZCBD
b2RlQmxvY2s6OnByb3BhZ2F0ZVRyYW5zaXRpb25zKGNvbgogICAgIGlmIChKSVRDb2RlOjppc09w
dGltaXppbmdKSVQoaml0VHlwZSgpKSkgewogICAgICAgICBERkc6OkNvbW1vbkRhdGEqIGRmZ0Nv
bW1vbiA9IG1faml0Q29kZS0+ZGZnQ29tbW9uKCk7CiAgICAgICAgIAotICAgICAgICBkZmdDb21t
b24tPnJlY29yZGVkU3RhdHVzZXMubWFya0lmQ2hlYXAodmlzaXRvcik7CisgICAgICAgIGRmZ0Nv
bW1vbi0+cmVjb3JkZWRTdGF0dXNlcy5tYXJrSWZDaGVhcDEodmlzaXRvcik7CiAgICAgICAgIAog
ICAgICAgICBmb3IgKFN0cnVjdHVyZUlEIHN0cnVjdHVyZUlEIDogZGZnQ29tbW9uLT53ZWFrU3Ry
dWN0dXJlUmVmZXJlbmNlcykKLSAgICAgICAgICAgIHZtLmdldFN0cnVjdHVyZShzdHJ1Y3R1cmVJ
RCktPm1hcmtJZkNoZWFwKHZpc2l0b3IpOworICAgICAgICAgICAgdm0uZ2V0U3RydWN0dXJlKHN0
cnVjdHVyZUlEKS0+bWFya0lmQ2hlYXAxKHZpc2l0b3IpOwogCiAgICAgICAgIGZvciAoYXV0byYg
dHJhbnNpdGlvbiA6IGRmZ0NvbW1vbi0+dHJhbnNpdGlvbnMpIHsKICAgICAgICAgICAgIGlmIChz
aG91bGRNYXJrVHJhbnNpdGlvbih2bSwgdHJhbnNpdGlvbikpIHsKQEAgLTEyMDUsNyArMTI0NSwx
MiBAQCB2b2lkIENvZGVCbG9jazo6cHJvcGFnYXRlVHJhbnNpdGlvbnMoY29uCiAjZW5kaWYgLy8g
RU5BQkxFKERGR19KSVQpCiB9CiAKLXZvaWQgQ29kZUJsb2NrOjpkZXRlcm1pbmVMaXZlbmVzcyhj
b25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vdGVtcGxh
dGUgdm9pZCBDb2RlQmxvY2s6OnByb3BhZ2F0ZVRyYW5zaXRpb25zKGNvbnN0IENvbmN1cnJlbnRK
U0xvY2tlciYsIFNsb3RWaXNpdG9yJik7CisvL3RlbXBsYXRlIHZvaWQgQ29kZUJsb2NrOjpwcm9w
YWdhdGVUcmFuc2l0aW9ucyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBEZWJ1Z1Nsb3RWaXNp
dG9yJik7CisKKy8vdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KKy8vdm9pZCBDb2RlQmxvY2s6
OmRldGVybWluZUxpdmVuZXNzKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIFZpc2l0b3ImIHZp
c2l0b3IpCit2b2lkIENvZGVCbG9jazo6ZGV0ZXJtaW5lTGl2ZW5lc3MoY29uc3QgQ29uY3VycmVu
dEpTTG9ja2VyJiwgQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBVTlVTRURf
UEFSQU0odmlzaXRvcik7CiAgICAgCkBAIC0xMjU0LDYgKzEyOTksOSBAQCB2b2lkIENvZGVCbG9j
azo6ZGV0ZXJtaW5lTGl2ZW5lc3MoY29uc3QgCiAjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCiB9
CiAKKy8vdGVtcGxhdGUgdm9pZCBDb2RlQmxvY2s6OmRldGVybWluZUxpdmVuZXNzKGNvbnN0IENv
bmN1cnJlbnRKU0xvY2tlciYsIFNsb3RWaXNpdG9yJik7CisvL3RlbXBsYXRlIHZvaWQgQ29kZUJs
b2NrOjpkZXRlcm1pbmVMaXZlbmVzcyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBEZWJ1Z1Ns
b3RWaXNpdG9yJik7CisKIHZvaWQgQ29kZUJsb2NrOjpmaW5hbGl6ZUxMSW50SW5saW5lQ2FjaGVz
KCkKIHsKICAgICBWTSYgdm0gPSAqbV92bTsKQEAgLTE3NjIsNyArMTgxMCw4IEBAIHZvaWQgQ29k
ZUJsb2NrOjpyZXNldEpJVERhdGEoKQogfQogI2VuZGlmCiAKLXZvaWQgQ29kZUJsb2NrOjp2aXNp
dE9TUkV4aXRUYXJnZXRzKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgQ29kZUJsb2NrOjp2aXNp
dE9TUkV4aXRUYXJnZXRzKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIFZpc2l0b3ImIHZpc2l0
b3IpCiB7CiAgICAgLy8gV2Ugc3Ryb25nbHkgdmlzaXQgT1NSIGV4aXRzIHRhcmdldHMgYmVjYXVz
ZSB3ZSBkb24ndCB3YW50IHRvIGRlYWwgd2l0aAogICAgIC8vIHRoZSBjb21wbGV4aXR5IG9mIGdl
bmVyYXRpbmcgYW4gZXhpdCB0YXJnZXQgQ29kZUJsb2NrIG9uIGRlbWFuZCBhbmQKQEAgLTE3ODIs
NyArMTgzMSwxMSBAQCB2b2lkIENvZGVCbG9jazo6dmlzaXRPU1JFeGl0VGFyZ2V0cyhjb25zCiAj
ZW5kaWYKIH0KIAotdm9pZCBDb2RlQmxvY2s6OnN0cm9uZ2x5VmlzaXRTdHJvbmdSZWZlcmVuY2Vz
KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYgbG9ja2VyLCBTbG90VmlzaXRvciYgdmlzaXRvcikK
K3RlbXBsYXRlIHZvaWQgQ29kZUJsb2NrOjp2aXNpdE9TUkV4aXRUYXJnZXRzKGNvbnN0IENvbmN1
cnJlbnRKU0xvY2tlciYsIFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIENvZGVCbG9jazo6
dmlzaXRPU1JFeGl0VGFyZ2V0cyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBBYnN0cmFjdFNs
b3RWaXNpdG9yJik7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIENvZGVCbG9j
azo6c3Ryb25nbHlWaXNpdFN0cm9uZ1JlZmVyZW5jZXMoY29uc3QgQ29uY3VycmVudEpTTG9ja2Vy
JiBsb2NrZXIsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGxvY2tlcik7
CiAgICAgCkBAIC0xODAzLDIyICsxODU2LDI2IEBAIHZvaWQgQ29kZUJsb2NrOjpzdHJvbmdseVZp
c2l0U3Ryb25nUmVmZXIKICNpZiBFTkFCTEUoSklUKQogICAgIGlmIChhdXRvKiBqaXREYXRhID0g
bV9qaXREYXRhLmdldCgpKSB7CiAgICAgICAgIGZvciAoQnlWYWxJbmZvKiBieVZhbEluZm8gOiBq
aXREYXRhLT5tX2J5VmFsSW5mb3MpCi0gICAgICAgICAgICBieVZhbEluZm8tPnZpc2l0QWdncmVn
YXRlKHZpc2l0b3IpOworICAgICAgICAgICAgYnlWYWxJbmZvLT52aXNpdEFnZ3JlZ2F0ZTEodmlz
aXRvcik7CiAgICAgICAgIGZvciAoU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvIDogaml0RGF0
YS0+bV9zdHViSW5mb3MpCi0gICAgICAgICAgICBzdHViSW5mby0+dmlzaXRBZ2dyZWdhdGUodmlz
aXRvcik7CisgICAgICAgICAgICBzdHViSW5mby0+dmlzaXRBZ2dyZWdhdGUxKHZpc2l0b3IpOwog
ICAgIH0KICNlbmRpZgogCiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAgaWYgKEpJVENvZGU6Omlz
T3B0aW1pemluZ0pJVChqaXRUeXBlKCkpKSB7CiAgICAgICAgIERGRzo6Q29tbW9uRGF0YSogZGZn
Q29tbW9uID0gbV9qaXRDb2RlLT5kZmdDb21tb24oKTsKLSAgICAgICAgZGZnQ29tbW9uLT5yZWNv
cmRlZFN0YXR1c2VzLnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOworICAgICAgICBkZmdDb21tb24t
PnJlY29yZGVkU3RhdHVzZXMudmlzaXRBZ2dyZWdhdGUxKHZpc2l0b3IpOwogICAgICAgICB2aXNp
dE9TUkV4aXRUYXJnZXRzKGxvY2tlciwgdmlzaXRvcik7CiAgICAgfQogI2VuZGlmCiB9CiAKLXZv
aWQgQ29kZUJsb2NrOjpzdHJvbmdseVZpc2l0V2Vha1JlZmVyZW5jZXMoY29uc3QgQ29uY3VycmVu
dEpTTG9ja2VyJiwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3RlbXBsYXRlIHZvaWQgQ29kZUJs
b2NrOjpzdHJvbmdseVZpc2l0U3Ryb25nUmVmZXJlbmNlcyhjb25zdCBDb25jdXJyZW50SlNMb2Nr
ZXImLCBTbG90VmlzaXRvciYpOworLy90ZW1wbGF0ZSB2b2lkIENvZGVCbG9jazo6c3Ryb25nbHlW
aXNpdFN0cm9uZ1JlZmVyZW5jZXMoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgRGVidWdTbG90
VmlzaXRvciYpOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBDb2RlQmxvY2s6
OnN0cm9uZ2x5VmlzaXRXZWFrUmVmZXJlbmNlcyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBW
aXNpdG9yJiB2aXNpdG9yKQogewogICAgIFVOVVNFRF9QQVJBTSh2aXNpdG9yKTsKIApAQCAtMTg0
NSw2ICsxOTAyLDkgQEAgdm9pZCBDb2RlQmxvY2s6OnN0cm9uZ2x5VmlzaXRXZWFrUmVmZXJlbgog
I2VuZGlmICAgIAogfQogCit0ZW1wbGF0ZSB2b2lkIENvZGVCbG9jazo6c3Ryb25nbHlWaXNpdFdl
YWtSZWZlcmVuY2VzKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIFNsb3RWaXNpdG9yJik7Cit0
ZW1wbGF0ZSB2b2lkIENvZGVCbG9jazo6c3Ryb25nbHlWaXNpdFdlYWtSZWZlcmVuY2VzKGNvbnN0
IENvbmN1cnJlbnRKU0xvY2tlciYsIEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKKwogQ29kZUJsb2Nr
KiBDb2RlQmxvY2s6OmJhc2VsaW5lQWx0ZXJuYXRpdmUoKQogewogI2lmIEVOQUJMRShKSVQpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShyZXZpc2lv
biAyNzEzNjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTIwMSwxMCArMjAxLDExIEBAIHB1YmxpYzoKICAgICAvLyBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIzNjc3CiAgICAgQ29kZUJsb2Nr
KiBiYXNlbGluZVZlcnNpb24oKTsKIAorICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CisKICAg
ICBzdGF0aWMgc2l6ZV90IGVzdGltYXRlZFNpemUoSlNDZWxsKiwgVk0mKTsKLSAgICBzdGF0aWMg
dm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CiAgICAgc3RhdGljIHZv
aWQgZGVzdHJveShKU0NlbGwqKTsKLSAgICB2b2lkIHZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3Im
KTsKKyAgICBERUNMQVJFX0lOU1RBTkNFX1ZJU0lUX0NISUxEUkVOOwogICAgIHZvaWQgZmluYWxp
emVVbmNvbmRpdGlvbmFsbHkoVk0mKTsKIAogICAgIHZvaWQgbm90aWZ5TGV4aWNhbEJpbmRpbmdV
cGRhdGUoKTsKQEAgLTk2NywxMiArOTY4LDE0IEBAIHByaXZhdGU6CiAgICAgYm9vbCBzaG91bGRK
ZXR0aXNvbkR1ZVRvV2Vha1JlZmVyZW5jZShWTSYpOwogICAgIGJvb2wgc2hvdWxkSmV0dGlzb25E
dWVUb09sZEFnZShjb25zdCBDb25jdXJyZW50SlNMb2NrZXImKTsKICAgICAKLSAgICB2b2lkIHBy
b3BhZ2F0ZVRyYW5zaXRpb25zKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIFNsb3RWaXNpdG9y
Jik7Ci0gICAgdm9pZCBkZXRlcm1pbmVMaXZlbmVzcyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXIm
LCBTbG90VmlzaXRvciYpOworLy8gICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCBw
cm9wYWdhdGVUcmFuc2l0aW9ucyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBWaXNpdG9yJik7
CisgICAgdm9pZCBwcm9wYWdhdGVUcmFuc2l0aW9uczEoY29uc3QgQ29uY3VycmVudEpTTG9ja2Vy
JiwgQWJzdHJhY3RTbG90VmlzaXRvciYpOworLy8gICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRv
cj4gdm9pZCBkZXRlcm1pbmVMaXZlbmVzcyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBWaXNp
dG9yJik7CisgICAgdm9pZCBkZXRlcm1pbmVMaXZlbmVzcyhjb25zdCBDb25jdXJyZW50SlNMb2Nr
ZXImLCBBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAgICAgICAgIAotICAgIHZvaWQgc3Ryb25nbHlW
aXNpdFN0cm9uZ1JlZmVyZW5jZXMoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgU2xvdFZpc2l0
b3ImKTsKLSAgICB2b2lkIHN0cm9uZ2x5VmlzaXRXZWFrUmVmZXJlbmNlcyhjb25zdCBDb25jdXJy
ZW50SlNMb2NrZXImLCBTbG90VmlzaXRvciYpOwotICAgIHZvaWQgdmlzaXRPU1JFeGl0VGFyZ2V0
cyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBTbG90VmlzaXRvciYpOworICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgc3Ryb25nbHlWaXNpdFN0cm9uZ1JlZmVyZW5jZXMoY29u
c3QgQ29uY3VycmVudEpTTG9ja2VyJiwgVmlzaXRvciYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFZpc2l0b3I+IHZvaWQgc3Ryb25nbHlWaXNpdFdlYWtSZWZlcmVuY2VzKGNvbnN0IENvbmN1cnJl
bnRKU0xvY2tlciYsIFZpc2l0b3ImKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2
b2lkIHZpc2l0T1NSRXhpdFRhcmdldHMoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgVmlzaXRv
ciYpOwogCiAgICAgdW5zaWduZWQgbnVtYmVyT2ZOb25Bcmd1bWVudFZhbHVlUHJvZmlsZXMoKSB7
IHJldHVybiBtX251bWJlck9mTm9uQXJndW1lbnRWYWx1ZVByb2ZpbGVzOyB9CiAgICAgdW5zaWdu
ZWQgdG90YWxOdW1iZXJPZlZhbHVlUHJvZmlsZXMoKSB7IHJldHVybiBudW1iZXJPZkFyZ3VtZW50
VmFsdWVQcm9maWxlcygpICsgbnVtYmVyT2ZOb25Bcmd1bWVudFZhbHVlUHJvZmlsZXMoKTsgfQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0RlbGV0ZUJ5SWRWYXJpYW50LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRGVsZXRlQnlJ
ZFZhcmlhbnQuY3BwCShyZXZpc2lvbiAyNzEzNjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvRGVsZXRlQnlJZFZhcmlhbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OCwxOSAr
ODgsMjkgQEAgYm9vbCBEZWxldGVCeUlkVmFyaWFudDo6d3JpdGVzU3RydWN0dXJlcwogICAgIHJl
dHVybiAhIW5ld1N0cnVjdHVyZSgpOwogfQogCi12b2lkIERlbGV0ZUJ5SWRWYXJpYW50Ojp2aXNp
dEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vdGVtcGxhdGU8dHlwZW5hbWUgVmlz
aXRvcj4KKy8vdm9pZCBEZWxldGVCeUlkVmFyaWFudDo6dmlzaXRBZ2dyZWdhdGUoVmlzaXRvciYg
dmlzaXRvcikKK3ZvaWQgRGVsZXRlQnlJZFZhcmlhbnQ6OnZpc2l0QWdncmVnYXRlMShBYnN0cmFj
dFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewotICAgIG1faWRlbnRpZmllci52aXNpdEFnZ3JlZ2F0
ZSh2aXNpdG9yKTsKKyAgICBtX2lkZW50aWZpZXIudmlzaXRBZ2dyZWdhdGUxKHZpc2l0b3IpOwog
fQogCi12b2lkIERlbGV0ZUJ5SWRWYXJpYW50OjptYXJrSWZDaGVhcChTbG90VmlzaXRvciYgdmlz
aXRvcikKKy8vdGVtcGxhdGUgdm9pZCBEZWxldGVCeUlkVmFyaWFudDo6dmlzaXRBZ2dyZWdhdGUo
U2xvdFZpc2l0b3ImKTsKKy8vdGVtcGxhdGUgdm9pZCBEZWxldGVCeUlkVmFyaWFudDo6dmlzaXRB
Z2dyZWdhdGUoRGVidWdTbG90VmlzaXRvciYpOworCisvL3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0
b3I+CisvL3ZvaWQgRGVsZXRlQnlJZFZhcmlhbnQ6Om1hcmtJZkNoZWFwKFZpc2l0b3ImIHZpc2l0
b3IpCit2b2lkIERlbGV0ZUJ5SWRWYXJpYW50OjptYXJrSWZDaGVhcDEoQWJzdHJhY3RTbG90Vmlz
aXRvciYgdmlzaXRvcikKIHsKICAgICBpZiAobV9vbGRTdHJ1Y3R1cmUpCi0gICAgICAgIG1fb2xk
U3RydWN0dXJlLT5tYXJrSWZDaGVhcCh2aXNpdG9yKTsKKyAgICAgICAgbV9vbGRTdHJ1Y3R1cmUt
Pm1hcmtJZkNoZWFwMSh2aXNpdG9yKTsKICAgICBpZiAobV9uZXdTdHJ1Y3R1cmUpCi0gICAgICAg
IG1fbmV3U3RydWN0dXJlLT5tYXJrSWZDaGVhcCh2aXNpdG9yKTsKKyAgICAgICAgbV9uZXdTdHJ1
Y3R1cmUtPm1hcmtJZkNoZWFwMSh2aXNpdG9yKTsKIH0KIAorLy90ZW1wbGF0ZSB2b2lkIERlbGV0
ZUJ5SWRWYXJpYW50OjptYXJrSWZDaGVhcChTbG90VmlzaXRvciYpOworLy90ZW1wbGF0ZSB2b2lk
IERlbGV0ZUJ5SWRWYXJpYW50OjptYXJrSWZDaGVhcChEZWJ1Z1Nsb3RWaXNpdG9yJik7CisKIHZv
aWQgRGVsZXRlQnlJZFZhcmlhbnQ6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKIHsKICAg
ICBkdW1wSW5Db250ZXh0KG91dCwgbnVsbHB0cik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvRGVsZXRlQnlJZFZhcmlhbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvRGVsZXRlQnlJZFZhcmlhbnQuaAkocmV2aXNpb24gMjcxMzY4
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0RlbGV0ZUJ5SWRWYXJpYW50LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTYxLDggKzYxLDEwIEBAIHB1YmxpYzoKIAogICAgIGJvb2wgYXR0
ZW1wdFRvTWVyZ2UoY29uc3QgRGVsZXRlQnlJZFZhcmlhbnQmIG90aGVyKTsKIAotICAgIHZvaWQg
dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImKTsKLSAgICB2b2lkIG1hcmtJZkNoZWFwKFNsb3RW
aXNpdG9yJik7CisvLyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIHZpc2l0QWdn
cmVnYXRlKFZpc2l0b3ImKTsKKy8vICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQg
bWFya0lmQ2hlYXAoVmlzaXRvciYpOworICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUxKEFic3RyYWN0
U2xvdFZpc2l0b3ImKTsKKyAgICB2b2lkIG1hcmtJZkNoZWFwMShBYnN0cmFjdFNsb3RWaXNpdG9y
Jik7CiAgICAgYm9vbCBmaW5hbGl6ZShWTSYpOwogCiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFt
JikgY29uc3Q7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRGVsZXRlQnlT
dGF0dXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9E
ZWxldGVCeVN0YXR1cy5jcHAJKHJldmlzaW9uIDI3MTM2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9EZWxldGVCeVN0YXR1cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1NCwx
OCArMjU0LDI4IEBAIENhY2hlYWJsZUlkZW50aWZpZXIgRGVsZXRlQnlTdGF0dXM6OnNpbmcKICAg
ICByZXR1cm4gcmVzdWx0OwogfQogCi12b2lkIERlbGV0ZUJ5U3RhdHVzOjp2aXNpdEFnZ3JlZ2F0
ZShTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KKy8v
dm9pZCBEZWxldGVCeVN0YXR1czo6dmlzaXRBZ2dyZWdhdGUoVmlzaXRvciYgdmlzaXRvcikKK3Zv
aWQgRGVsZXRlQnlTdGF0dXM6OnZpc2l0QWdncmVnYXRlMShBYnN0cmFjdFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQogewogICAgIGZvciAoRGVsZXRlQnlJZFZhcmlhbnQmIHZhcmlhbnQgOiBtX3Zhcmlh
bnRzKQotICAgICAgICB2YXJpYW50LnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOworICAgICAgICB2
YXJpYW50LnZpc2l0QWdncmVnYXRlMSh2aXNpdG9yKTsKIH0KIAotdm9pZCBEZWxldGVCeVN0YXR1
czo6bWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3RlbXBsYXRlIHZvaWQgRGVs
ZXRlQnlTdGF0dXM6OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJik7CisvL3RlbXBsYXRlIHZv
aWQgRGVsZXRlQnlTdGF0dXM6OnZpc2l0QWdncmVnYXRlKERlYnVnU2xvdFZpc2l0b3ImKTsKKwor
Ly90ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgorLy92b2lkIERlbGV0ZUJ5U3RhdHVzOjptYXJr
SWZDaGVhcChWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBEZWxldGVCeVN0YXR1czo6bWFya0lmQ2hl
YXAxKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgZm9yIChEZWxldGVCeUlk
VmFyaWFudCYgdmFyaWFudCA6IG1fdmFyaWFudHMpCi0gICAgICAgIHZhcmlhbnQubWFya0lmQ2hl
YXAodmlzaXRvcik7CisgICAgICAgIHZhcmlhbnQubWFya0lmQ2hlYXAxKHZpc2l0b3IpOwogfQog
CisvL3RlbXBsYXRlIHZvaWQgRGVsZXRlQnlTdGF0dXM6Om1hcmtJZkNoZWFwKFNsb3RWaXNpdG9y
Jik7CisvL3RlbXBsYXRlIHZvaWQgRGVsZXRlQnlTdGF0dXM6Om1hcmtJZkNoZWFwKERlYnVnU2xv
dFZpc2l0b3ImKTsKKwogYm9vbCBEZWxldGVCeVN0YXR1czo6ZmluYWxpemUoVk0mIHZtKQogewog
ICAgIGZvciAoYXV0byYgdmFyaWFudCA6IG1fdmFyaWFudHMpIHsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9EZWxldGVCeVN0YXR1cy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9EZWxldGVCeVN0YXR1cy5oCShyZXZpc2lvbiAyNzEz
NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRGVsZXRlQnlTdGF0dXMuaAko
d29ya2luZyBjb3B5KQpAQCAtODEsOCArODEsMTAgQEAgcHVibGljOgogICAgIC8vIEF0dGVtcHRz
IHRvIHJlZHVjZSB0aGUgc2V0IG9mIHZhcmlhbnRzIHRvIGZpdCB0aGUgZ2l2ZW4gc3RydWN0dXJl
IHNldC4gVGhpcyBtYXkgYmUgYXBwcm94aW1hdGUuCiAgICAgdm9pZCBmaWx0ZXIoY29uc3QgU3Ry
dWN0dXJlU2V0Jik7CiAKLSAgICB2b2lkIHZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJik7Ci0g
ICAgdm9pZCBtYXJrSWZDaGVhcChTbG90VmlzaXRvciYpOworLy8gICAgdGVtcGxhdGU8dHlwZW5h
bWUgVmlzaXRvcj4gdm9pZCB2aXNpdEFnZ3JlZ2F0ZShWaXNpdG9yJik7CisvLyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIG1hcmtJZkNoZWFwKFZpc2l0b3ImKTsKKyAgICB2b2lk
IHZpc2l0QWdncmVnYXRlMShBYnN0cmFjdFNsb3RWaXNpdG9yJik7CisgICAgdm9pZCBtYXJrSWZD
aGVhcDEoQWJzdHJhY3RTbG90VmlzaXRvciYpOwogICAgIGJvb2wgZmluYWxpemUoVk0mKTsKIAog
ICAgIGJvb2wgYXBwZW5kVmFyaWFudChjb25zdCBEZWxldGVCeUlkVmFyaWFudCYpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0RpcmVjdEV2YWxDb2RlQ2FjaGUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9EaXJlY3RFdmFsQ29k
ZUNhY2hlLmNwcAkocmV2aXNpb24gMjcxMzY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0RpcmVjdEV2YWxDb2RlQ2FjaGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSw3ICs0
NSw4IEBAIHZvaWQgRGlyZWN0RXZhbENvZGVDYWNoZTo6Y2xlYXIoKQogICAgIG1fY2FjaGVNYXAu
Y2xlYXIoKTsKIH0KIAotdm9pZCBEaXJlY3RFdmFsQ29kZUNhY2hlOjp2aXNpdEFnZ3JlZ2F0ZShT
bG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIERp
cmVjdEV2YWxDb2RlQ2FjaGU6OnZpc2l0QWdncmVnYXRlKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAg
ICAgTG9ja0hvbGRlciBsb2NrZXIobV9sb2NrKTsKICAgICBFdmFsQ2FjaGVNYXA6Oml0ZXJhdG9y
IGVuZCA9IG1fY2FjaGVNYXAuZW5kKCk7CkBAIC01Myw1ICs1NCw3IEBAIHZvaWQgRGlyZWN0RXZh
bENvZGVDYWNoZTo6dmlzaXRBZ2dyZWdhdGUKICAgICAgICAgdmlzaXRvci5hcHBlbmQocHRyLT52
YWx1ZSk7CiB9CiAKLX0gLy8gbmFtZXNwYWNlIEpTQwordGVtcGxhdGUgdm9pZCBEaXJlY3RFdmFs
Q29kZUNhY2hlOjp2aXNpdEFnZ3JlZ2F0ZShBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0
ZSB2b2lkIERpcmVjdEV2YWxDb2RlQ2FjaGU6OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJik7
CiAKK30gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0RpcmVjdEV2YWxDb2RlQ2FjaGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvRGlyZWN0RXZhbENvZGVDYWNoZS5oCShyZXZpc2lvbiAyNzEzNjgpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRGlyZWN0RXZhbENvZGVDYWNoZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC05Nyw3ICs5Nyw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAg
IGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fY2FjaGVNYXAuaXNFbXB0eSgpOyB9CiAK
LSAgICAgICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYpOworICAgICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIHZpc2l0QWdncmVnYXRlKFZpc2l0b3ImKTsKIAog
ICAgICAgICB2b2lkIGNsZWFyKCk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9FeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZS5jcHAJKHJl
dmlzaW9uIDI3MTM2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGVjdXRh
YmxlVG9Db2RlQmxvY2tFZGdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01Myw3ICs1Myw5IEBAIHZvaWQg
RXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZTo6ZmluaXNoQ3IKICAgICBBU1NFUlQoIWlzQWN0aXZl
KCkpOwogfQogCi12b2lkIEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2U6OnZpc2l0Q2hpbGRyZW4o
SlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZp
c2l0b3I+Cit2b2lkIEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2U6OnZpc2l0Q2hpbGRyZW5JbXBs
KEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKKy8vdm9pZCBFeGVjdXRhYmxlVG9Db2Rl
QmxvY2tFZGdlOjp2aXNpdENoaWxkcmVuMShKU0NlbGwqIGNlbGwsIEFic3RyYWN0U2xvdFZpc2l0
b3ImIHZpc2l0b3IpCiB7CiAgICAgVk0mIHZtID0gdmlzaXRvci52bSgpOwogICAgIEV4ZWN1dGFi
bGVUb0NvZGVCbG9ja0VkZ2UqIGVkZ2UgPSBqc0Nhc3Q8RXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRn
ZSo+KGNlbGwpOwpAQCAtMTE0LDE1ICsxMTYsMTcgQEAgdm9pZCBFeGVjdXRhYmxlVG9Db2RlQmxv
Y2tFZGdlOjp2aXNpdENoaQogICAgIC8vIHdpbGwga2VlcCBmaXhwb2ludGluZyB1bnRpbCB0aGUg
ZW5kLgogICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQoY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSk7CiAgICAgdm0uZXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZXNXaXRoQ29uc3RyYWludHMu
YWRkKGVkZ2UpOwotICAgIGVkZ2UtPnJ1bkNvbnN0cmFpbnQobG9ja2VyLCB2bSwgdmlzaXRvcik7
CisgICAgZWRnZS0+cnVuQ29uc3RyYWludDEobG9ja2VyLCB2bSwgdmlzaXRvcik7IC8vIG1sYW0g
RklYTUUKIH0KIAotdm9pZCBFeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlOjp2aXNpdE91dHB1dENv
bnN0cmFpbnRzKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCitERUZJTkVfVklT
SVRfQ0hJTERSRU4oRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZSk7CisKK3ZvaWQgRXhlY3V0YWJs
ZVRvQ29kZUJsb2NrRWRnZTo6dmlzaXRPdXRwdXRDb25zdHJhaW50cyhKU0NlbGwqIGNlbGwsIEFi
c3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgVk0mIHZtID0gdmlzaXRvci52bSgp
OwogICAgIEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UqIGVkZ2UgPSBqc0Nhc3Q8RXhlY3V0YWJs
ZVRvQ29kZUJsb2NrRWRnZSo+KGNlbGwpOwogICAgIAotICAgIGVkZ2UtPnJ1bkNvbnN0cmFpbnQo
Tm9Mb2NraW5nTmVjZXNzYXJ5LCB2bSwgdmlzaXRvcik7CisgICAgZWRnZS0+cnVuQ29uc3RyYWlu
dDEoTm9Mb2NraW5nTmVjZXNzYXJ5LCB2bSwgdmlzaXRvcik7CiB9CiAKIHZvaWQgRXhlY3V0YWJs
ZVRvQ29kZUJsb2NrRWRnZTo6ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoVk0mIHZtKQpAQCAtMTg2
LDE2ICsxOTAsMjAgQEAgRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZTo6RXhlY3V0YWJsZVRvQwog
ewogfQogCi12b2lkIEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2U6OnJ1bkNvbnN0cmFpbnQoY29u
c3QgQ29uY3VycmVudEpTTG9ja2VyJiBsb2NrZXIsIFZNJiB2bSwgU2xvdFZpc2l0b3ImIHZpc2l0
b3IpCisvL3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+CisvL3ZvaWQgRXhlY3V0YWJsZVRvQ29k
ZUJsb2NrRWRnZTo6cnVuQ29uc3RyYWludDEoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiBsb2Nr
ZXIsIFZNJiB2bSwgVmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgRXhlY3V0YWJsZVRvQ29kZUJsb2Nr
RWRnZTo6cnVuQ29uc3RyYWludDEoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiBsb2NrZXIsIFZN
JiB2bSwgQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBDb2RlQmxvY2sqIGNv
ZGVCbG9jayA9IG1fY29kZUJsb2NrLmdldCgpOwogICAgIAotICAgIGNvZGVCbG9jay0+cHJvcGFn
YXRlVHJhbnNpdGlvbnMobG9ja2VyLCB2aXNpdG9yKTsKKyAgICBjb2RlQmxvY2stPnByb3BhZ2F0
ZVRyYW5zaXRpb25zMShsb2NrZXIsIHZpc2l0b3IpOwogICAgIGNvZGVCbG9jay0+ZGV0ZXJtaW5l
TGl2ZW5lc3MobG9ja2VyLCB2aXNpdG9yKTsKICAgICAKICAgICBpZiAodm0uaGVhcC5pc01hcmtl
ZChjb2RlQmxvY2spKQogICAgICAgICB2bS5leGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlc1dpdGhD
b25zdHJhaW50cy5yZW1vdmUodGhpcyk7CiB9CiAKLX0gLy8gbmFtZXNwYWNlIEpTQworLy90ZW1w
bGF0ZSB2b2lkIEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2U6OnJ1bkNvbnN0cmFpbnQxKGNvbnN0
IENvbmN1cnJlbnRKU0xvY2tlciYsIFZNJiwgU2xvdFZpc2l0b3ImKTsKKy8vdGVtcGxhdGUgdm9p
ZCBFeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlOjpydW5Db25zdHJhaW50MShjb25zdCBDb25jdXJy
ZW50SlNMb2NrZXImLCBWTSYsIEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKIAorfSAvLyBuYW1lc3Bh
Y2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhlY3V0YWJsZVRv
Q29kZUJsb2NrRWRnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9FeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlLmgJKHJldmlzaW9uIDI3MTM2OCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE4
LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE4LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC01Myw5ICs1MywxMCBAQCBwdWJsaWM6CiAgICAgREVDTEFSRV9J
TkZPOwogCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2soKSBjb25zdCB7IHJldHVybiBtX2NvZGVC
bG9jay5nZXQoKTsgfQotICAgIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiwgU2xvdFZpc2l0b3ImKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdE91dHB1dENvbnN0cmFpbnRz
KEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwor
Ly8gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbjEoSlNDZWxsKiwgQWJzdHJhY3RTbG90Vmlz
aXRvciYpOworICAgIHN0YXRpYyB2b2lkIHZpc2l0T3V0cHV0Q29uc3RyYWludHMoSlNDZWxsKiwg
QWJzdHJhY3RTbG90VmlzaXRvciYpOwogICAgIHZvaWQgZmluYWxpemVVbmNvbmRpdGlvbmFsbHko
Vk0mKTsKICAgICAKICAgICBzdGF0aWMgQ29kZUJsb2NrKiB1bndyYXAoRXhlY3V0YWJsZVRvQ29k
ZUJsb2NrRWRnZSogZWRnZSkKQEAgLTgxLDkgKzgyLDExIEBAIHByaXZhdGU6CiAgICAgdm9pZCBh
Y3RpdmF0ZSgpOwogICAgIHZvaWQgZGVhY3RpdmF0ZSgpOwogICAgIGJvb2wgaXNBY3RpdmUoKSBj
b25zdDsKLSAgICAKLSAgICB2b2lkIHJ1bkNvbnN0cmFpbnQoY29uc3QgQ29uY3VycmVudEpTTG9j
a2VyJiwgVk0mLCBTbG90VmlzaXRvciYpOwotICAgIAorCisvLyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBWaXNpdG9yPgorLy8gICAgdm9pZCBydW5Db25zdHJhaW50MShjb25zdCBDb25jdXJyZW50SlNM
b2NrZXImLCBWTSYsIFZpc2l0b3ImKTsKKyAgICB2b2lkIHJ1bkNvbnN0cmFpbnQxKGNvbnN0IENv
bmN1cnJlbnRKU0xvY2tlciYsIFZNJiwgQWJzdHJhY3RTbG90VmlzaXRvciYpOworCiAgICAgV3Jp
dGVCYXJyaWVyPENvZGVCbG9jaz4gbV9jb2RlQmxvY2s7CiB9OwogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFZhcmlhbnQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkVmFyaWFudC5jcHAJKHJldmlzaW9u
IDI3MTM2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkVmFyaWFu
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1NiwxNiArMTU2LDI2IEBAIGJvb2wgR2V0QnlJZFZh
cmlhbnQ6OmF0dGVtcHRUb01lcmdlKGNvbnMKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBH
ZXRCeUlkVmFyaWFudDo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3Rl
bXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+CisvL3ZvaWQgR2V0QnlJZFZhcmlhbnQ6OnZpc2l0QWdn
cmVnYXRlKFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIEdldEJ5SWRWYXJpYW50Ojp2aXNpdEFnZ3Jl
Z2F0ZTEoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKLSAgICBtX2lkZW50aWZpZXIu
dmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7CisgICAgbV9pZGVudGlmaWVyLnZpc2l0QWdncmVnYXRl
MSh2aXNpdG9yKTsKIH0KIAotdm9pZCBHZXRCeUlkVmFyaWFudDo6bWFya0lmQ2hlYXAoU2xvdFZp
c2l0b3ImIHZpc2l0b3IpCisvL3RlbXBsYXRlIHZvaWQgR2V0QnlJZFZhcmlhbnQ6OnZpc2l0QWdn
cmVnYXRlKFNsb3RWaXNpdG9yJik7CisvL3RlbXBsYXRlIHZvaWQgR2V0QnlJZFZhcmlhbnQ6OnZp
c2l0QWdncmVnYXRlKERlYnVnU2xvdFZpc2l0b3ImKTsKKworLy90ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPgorLy92b2lkIEdldEJ5SWRWYXJpYW50OjptYXJrSWZDaGVhcChWaXNpdG9yJiB2aXNp
dG9yKQordm9pZCBHZXRCeUlkVmFyaWFudDo6bWFya0lmQ2hlYXAxKEFic3RyYWN0U2xvdFZpc2l0
b3ImIHZpc2l0b3IpCiB7Ci0gICAgbV9zdHJ1Y3R1cmVTZXQubWFya0lmQ2hlYXAodmlzaXRvcik7
CisgICAgbV9zdHJ1Y3R1cmVTZXQubWFya0lmQ2hlYXAxKHZpc2l0b3IpOwogfQogCisvL3RlbXBs
YXRlIHZvaWQgR2V0QnlJZFZhcmlhbnQ6Om1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJik7CisvL3Rl
bXBsYXRlIHZvaWQgR2V0QnlJZFZhcmlhbnQ6Om1hcmtJZkNoZWFwKERlYnVnU2xvdFZpc2l0b3Im
KTsKKwogYm9vbCBHZXRCeUlkVmFyaWFudDo6ZmluYWxpemUoVk0mIHZtKQogewogICAgIGlmICgh
bV9zdHJ1Y3R1cmVTZXQuaXNTdGlsbEFsaXZlKHZtKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9HZXRCeUlkVmFyaWFudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkVmFyaWFudC5oCShyZXZpc2lvbiAyNzEzNjgpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFZhcmlhbnQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNzcsOCArNzcsMTAgQEAgcHVibGljOgogCiAgICAgYm9vbCBhdHRlbXB0VG9N
ZXJnZShjb25zdCBHZXRCeUlkVmFyaWFudCYgb3RoZXIpOwogICAgIAotICAgIHZvaWQgdmlzaXRB
Z2dyZWdhdGUoU2xvdFZpc2l0b3ImKTsKLSAgICB2b2lkIG1hcmtJZkNoZWFwKFNsb3RWaXNpdG9y
Jik7CisvLyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIHZpc2l0QWdncmVnYXRl
KFZpc2l0b3ImKTsKKy8vICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgbWFya0lm
Q2hlYXAoVmlzaXRvciYpOworICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUxKEFic3RyYWN0U2xvdFZp
c2l0b3ImKTsKKyAgICB2b2lkIG1hcmtJZkNoZWFwMShBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAg
ICAgYm9vbCBmaW5hbGl6ZShWTSYpOwogICAgIAogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYp
IGNvbnN0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5U3RhdHVz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlT
dGF0dXMuY3BwCShyZXZpc2lvbiAyNzEzNjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvR2V0QnlTdGF0dXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MzAsMjAgKzUzMCwzMSBA
QCB2b2lkIEdldEJ5U3RhdHVzOjpmaWx0ZXIoY29uc3QgU3RydWN0dXJlCiAgICAgICAgIG1fc3Rh
dGUgPSBOb0luZm9ybWF0aW9uOwogfQogCi12b2lkIEdldEJ5U3RhdHVzOjp2aXNpdEFnZ3JlZ2F0
ZShTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KKy8v
dm9pZCBHZXRCeVN0YXR1czo6dmlzaXRBZ2dyZWdhdGUoVmlzaXRvciYgdmlzaXRvcikKK3ZvaWQg
R2V0QnlTdGF0dXM6OnZpc2l0QWdncmVnYXRlMShBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9y
KQogewogICAgIGlmIChpc01vZHVsZU5hbWVzcGFjZSgpKQotICAgICAgICBtX21vZHVsZU5hbWVz
cGFjZURhdGEtPm1faWRlbnRpZmllci52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKKyAgICAgICAg
bV9tb2R1bGVOYW1lc3BhY2VEYXRhLT5tX2lkZW50aWZpZXIudmlzaXRBZ2dyZWdhdGUxKHZpc2l0
b3IpOwogICAgIGZvciAoR2V0QnlJZFZhcmlhbnQmIHZhcmlhbnQgOiBtX3ZhcmlhbnRzKQotICAg
ICAgICB2YXJpYW50LnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOworICAgICAgICB2YXJpYW50LnZp
c2l0QWdncmVnYXRlMSh2aXNpdG9yKTsKIH0KIAotdm9pZCBHZXRCeVN0YXR1czo6bWFya0lmQ2hl
YXAoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3RlbXBsYXRlIHZvaWQgR2V0QnlTdGF0dXM6OnZp
c2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJik7CisvL3RlbXBsYXRlIHZvaWQgR2V0QnlTdGF0dXM6
OnZpc2l0QWdncmVnYXRlKERlYnVnU2xvdFZpc2l0b3ImKTsKKworLy90ZW1wbGF0ZTx0eXBlbmFt
ZSBWaXNpdG9yPgorLy92b2lkIEdldEJ5U3RhdHVzOjptYXJrSWZDaGVhcChWaXNpdG9yJiB2aXNp
dG9yKQordm9pZCBHZXRCeVN0YXR1czo6bWFya0lmQ2hlYXAxKEFic3RyYWN0U2xvdFZpc2l0b3Im
IHZpc2l0b3IpCiB7CiAgICAgZm9yIChHZXRCeUlkVmFyaWFudCYgdmFyaWFudCA6IG1fdmFyaWFu
dHMpCi0gICAgICAgIHZhcmlhbnQubWFya0lmQ2hlYXAodmlzaXRvcik7CisgICAgICAgIHZhcmlh
bnQubWFya0lmQ2hlYXAxKHZpc2l0b3IpOwogfQogCisvL3RlbXBsYXRlIHZvaWQgR2V0QnlTdGF0
dXM6Om1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJik7CisvL3RlbXBsYXRlIHZvaWQgR2V0QnlTdGF0
dXM6Om1hcmtJZkNoZWFwKERlYnVnU2xvdFZpc2l0b3ImKTsKKworCiBib29sIEdldEJ5U3RhdHVz
OjpmaW5hbGl6ZShWTSYgdm0pCiB7CiAgICAgZm9yIChHZXRCeUlkVmFyaWFudCYgdmFyaWFudCA6
IG1fdmFyaWFudHMpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRC
eVN0YXR1cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9H
ZXRCeVN0YXR1cy5oCShyZXZpc2lvbiAyNzEzNjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvR2V0QnlTdGF0dXMuaAkod29ya2luZyBjb3B5KQpAQCAtMTE4LDggKzExOCwxMCBA
QCBwdWJsaWM6CiAgICAgSlNNb2R1bGVFbnZpcm9ubWVudCogbW9kdWxlRW52aXJvbm1lbnQoKSBj
b25zdCB7IHJldHVybiBtX21vZHVsZU5hbWVzcGFjZURhdGEtPm1fbW9kdWxlRW52aXJvbm1lbnQ7
IH0KICAgICBTY29wZU9mZnNldCBzY29wZU9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fbW9kdWxl
TmFtZXNwYWNlRGF0YS0+bV9zY29wZU9mZnNldDsgfQogICAgIAotICAgIHZvaWQgdmlzaXRBZ2dy
ZWdhdGUoU2xvdFZpc2l0b3ImKTsKLSAgICB2b2lkIG1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJik7
CisvLyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIHZpc2l0QWdncmVnYXRlKFZp
c2l0b3ImKTsKKy8vICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgbWFya0lmQ2hl
YXAoVmlzaXRvciYpOworICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUxKEFic3RyYWN0U2xvdFZpc2l0
b3ImKTsKKyAgICB2b2lkIG1hcmtJZkNoZWFwMShBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAgICAg
Ym9vbCBmaW5hbGl6ZShWTSYpOyAvLyBSZXR1cm4gdHJ1ZSBpZiB0aGlzIGdldHMgdG8gbGl2ZS4K
IAogICAgIGJvb2wgYXBwZW5kVmFyaWFudChjb25zdCBHZXRCeUlkVmFyaWFudCYpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luQnlJZFN0YXR1cy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luQnlJZFN0YXR1cy5jcHAJKHJl
dmlzaW9uIDI3MTM2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbkJ5SWRT
dGF0dXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTEsMTIgKzI1MSwxNyBAQCB2b2lkIEluQnlJ
ZFN0YXR1czo6ZmlsdGVyKGNvbnN0IFN0cnVjdHVyCiAgICAgICAgIG1fc3RhdGUgPSBOb0luZm9y
bWF0aW9uOwogfQogCi12b2lkIEluQnlJZFN0YXR1czo6bWFya0lmQ2hlYXAoU2xvdFZpc2l0b3Im
IHZpc2l0b3IpCisvL3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+CisvL3ZvaWQgSW5CeUlkU3Rh
dHVzOjptYXJrSWZDaGVhcChWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBJbkJ5SWRTdGF0dXM6Om1h
cmtJZkNoZWFwMShBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGZvciAoSW5C
eUlkVmFyaWFudCYgdmFyaWFudCA6IG1fdmFyaWFudHMpCi0gICAgICAgIHZhcmlhbnQubWFya0lm
Q2hlYXAodmlzaXRvcik7CisgICAgICAgIHZhcmlhbnQubWFya0lmQ2hlYXAxKHZpc2l0b3IpOwog
fQogCisvL3RlbXBsYXRlIHZvaWQgSW5CeUlkU3RhdHVzOjptYXJrSWZDaGVhcChTbG90VmlzaXRv
ciYpOworLy90ZW1wbGF0ZSB2b2lkIEluQnlJZFN0YXR1czo6bWFya0lmQ2hlYXAoRGVidWdTbG90
VmlzaXRvciYpOworCiBib29sIEluQnlJZFN0YXR1czo6ZmluYWxpemUoVk0mIHZtKQogewogICAg
IGZvciAoSW5CeUlkVmFyaWFudCYgdmFyaWFudCA6IG1fdmFyaWFudHMpIHsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbkJ5SWRTdGF0dXMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5CeUlkU3RhdHVzLmgJKHJldmlzaW9uIDI3
MTM2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbkJ5SWRTdGF0dXMuaAko
d29ya2luZyBjb3B5KQpAQCAtMTA2LDcgKzEwNiw4IEBAIHB1YmxpYzoKICAgICAvLyBBdHRlbXB0
cyB0byByZWR1Y2UgdGhlIHNldCBvZiB2YXJpYW50cyB0byBmaXQgdGhlIGdpdmVuIHN0cnVjdHVy
ZSBzZXQuIFRoaXMgbWF5IGJlIGFwcHJveGltYXRlLgogICAgIHZvaWQgZmlsdGVyKGNvbnN0IFN0
cnVjdHVyZVNldCYpOwogICAgIAotICAgIHZvaWQgbWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImKTsK
Ky8vICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgbWFya0lmQ2hlYXAoVmlzaXRv
ciYpOworICAgIHZvaWQgbWFya0lmQ2hlYXAxKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKICAgICBi
b29sIGZpbmFsaXplKFZNJik7CiAKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbkJ5SWRWYXJpYW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5CeUlkVmFyaWFu
dC5jcHAJKHJldmlzaW9uIDI3MTM2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9JbkJ5SWRWYXJpYW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjQsMTEgKzY0LDE2IEBAIGJv
b2wgSW5CeUlkVmFyaWFudDo6YXR0ZW1wdFRvTWVyZ2UoY29uc3QKICAgICByZXR1cm4gdHJ1ZTsK
IH0KIAotdm9pZCBJbkJ5SWRWYXJpYW50OjptYXJrSWZDaGVhcChTbG90VmlzaXRvciYgdmlzaXRv
cikKKy8vdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KKy8vdm9pZCBJbkJ5SWRWYXJpYW50Ojpt
YXJrSWZDaGVhcChWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBJbkJ5SWRWYXJpYW50OjptYXJrSWZD
aGVhcDEoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKLSAgICBtX3N0cnVjdHVyZVNl
dC5tYXJrSWZDaGVhcCh2aXNpdG9yKTsKKyAgICBtX3N0cnVjdHVyZVNldC5tYXJrSWZDaGVhcDEo
dmlzaXRvcik7CiB9CiAKKy8vdGVtcGxhdGUgdm9pZCBJbkJ5SWRWYXJpYW50OjptYXJrSWZDaGVh
cChTbG90VmlzaXRvciYpOworLy90ZW1wbGF0ZSB2b2lkIEluQnlJZFZhcmlhbnQ6Om1hcmtJZkNo
ZWFwKERlYnVnU2xvdFZpc2l0b3ImKTsKKwogYm9vbCBJbkJ5SWRWYXJpYW50OjpmaW5hbGl6ZShW
TSYgdm0pCiB7CiAgICAgaWYgKCFtX3N0cnVjdHVyZVNldC5pc1N0aWxsQWxpdmUodm0pKQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luQnlJZFZhcmlhbnQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5CeUlkVmFyaWFudC5oCShy
ZXZpc2lvbiAyNzEzNjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5CeUlk
VmFyaWFudC5oCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw3ICs1Nyw4IEBAIHB1YmxpYzoKIAogICAg
IGJvb2wgYXR0ZW1wdFRvTWVyZ2UoY29uc3QgSW5CeUlkVmFyaWFudCYgb3RoZXIpOwogICAgIAot
ICAgIHZvaWQgbWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImKTsKKy8vICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFZpc2l0b3I+IHZvaWQgbWFya0lmQ2hlYXAoVmlzaXRvciYpOworICAgIHZvaWQgbWFya0lm
Q2hlYXAxKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKICAgICBib29sIGZpbmFsaXplKFZNJik7CiAK
ICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9JbnRlcm5hbEZ1bmN0aW9uQWxsb2NhdGlvblByb2ZpbGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW50ZXJuYWxGdW5jdGlv
bkFsbG9jYXRpb25Qcm9maWxlLmgJKHJldmlzaW9uIDI3MTM2OCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9JbnRlcm5hbEZ1bmN0aW9uQWxsb2NhdGlvblByb2ZpbGUuaAkod29y
a2luZyBjb3B5KQpAQCAtMzksNyArMzksNyBAQCBwdWJsaWM6CiAgICAgU3RydWN0dXJlKiBjcmVh
dGVBbGxvY2F0aW9uU3RydWN0dXJlRnJvbUJhc2UoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTQ2Vs
bCogb3duZXIsIEpTT2JqZWN0KiBwcm90b3R5cGUsIFN0cnVjdHVyZSogYmFzZSk7CiAKICAgICB2
b2lkIGNsZWFyKCkgeyBtX3N0cnVjdHVyZS5jbGVhcigpOyB9Ci0gICAgdm9pZCB2aXNpdEFnZ3Jl
Z2F0ZShTbG90VmlzaXRvciYgdmlzaXRvcikgeyB2aXNpdG9yLmFwcGVuZChtX3N0cnVjdHVyZSk7
IH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIHZpc2l0QWdncmVnYXRlKFZp
c2l0b3ImIHZpc2l0b3IpIHsgdmlzaXRvci5hcHBlbmQobV9zdHJ1Y3R1cmUpOyB9CiAKIHByaXZh
dGU6CiAgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gbV9zdHJ1Y3R1cmU7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT2JqZWN0QWxsb2NhdGlv
blByb2ZpbGUuaAkocmV2aXNpb24gMjcxMzY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL09iamVjdEFsbG9jYXRpb25Qcm9maWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTY0LDcg
KzY0LDggQEAgcHJvdGVjdGVkOgogICAgICAgICBBU1NFUlQoaXNOdWxsKCkpOwogICAgIH0KIAot
ICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgVmlzaXRvcj4KKyAgICB2b2lkIHZpc2l0QWdncmVnYXRlKFZpc2l0b3ImIHZp
c2l0b3IpCiAgICAgewogICAgICAgICB2aXNpdG9yLmFwcGVuZChtX3N0cnVjdHVyZSk7CiAgICAg
fQpAQCAtMTEwLDcgKzExMSw4IEBAIHB1YmxpYzoKICAgICAgICAgQVNTRVJUKGlzTnVsbCgpKTsK
ICAgICB9CiAKLSAgICB2b2lkIHZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+CisgICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShW
aXNpdG9yJiB2aXNpdG9yKQogICAgIHsKICAgICAgICAgQmFzZTo6dmlzaXRBZ2dyZWdhdGUodmlz
aXRvcik7CiAgICAgICAgIHZpc2l0b3IuYXBwZW5kKG1fcHJvdG90eXBlKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNw
cAkocmV2aXNpb24gMjcxMzY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Bv
bHltb3JwaGljQWNjZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzU4LDcgKzM1OCw5IEBAIGJv
b2wgUG9seW1vcnBoaWNBY2Nlc3M6OnZpc2l0V2VhayhWTSYgdm0KICAgICByZXR1cm4gdHJ1ZTsK
IH0KIAotYm9vbCBQb2x5bW9ycGhpY0FjY2Vzczo6cHJvcGFnYXRlVHJhbnNpdGlvbnMoU2xvdFZp
c2l0b3ImIHZpc2l0b3IpIGNvbnN0CisvL3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+CisvL2Jv
b2wgUG9seW1vcnBoaWNBY2Nlc3M6OnByb3BhZ2F0ZVRyYW5zaXRpb25zMTAoVmlzaXRvciYgdmlz
aXRvcikgY29uc3QKK2Jvb2wgUG9seW1vcnBoaWNBY2Nlc3M6OnByb3BhZ2F0ZVRyYW5zaXRpb25z
MTAoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikgY29uc3QKIHsKICAgICBib29sIHJlc3Vs
dCA9IHRydWU7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemUoKTsgKytpKQpAQCAt
MzY2LDEyICszNjgsMjEgQEAgYm9vbCBQb2x5bW9ycGhpY0FjY2Vzczo6cHJvcGFnYXRlVHJhbnNp
dAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQgUG9seW1vcnBoaWNBY2Nlc3M6OnZpc2l0
QWdncmVnYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy90ZW1wbGF0ZTw+IGJvb2wgUG9seW1v
cnBoaWNBY2Nlc3M6OnByb3BhZ2F0ZVRyYW5zaXRpb25zMTAoU2xvdFZpc2l0b3ImKSBjb25zdDsK
Ky8vdGVtcGxhdGU8PiBib29sIFBvbHltb3JwaGljQWNjZXNzOjpwcm9wYWdhdGVUcmFuc2l0aW9u
czEwKEFic3RyYWN0U2xvdFZpc2l0b3ImKSBjb25zdDsKKworCisvL3RlbXBsYXRlPHR5cGVuYW1l
IFZpc2l0b3I+CisvL3ZvaWQgUG9seW1vcnBoaWNBY2Nlc3M6OnZpc2l0QWdncmVnYXRlKFZpc2l0
b3ImIHZpc2l0b3IpCit2b2lkIFBvbHltb3JwaGljQWNjZXNzOjp2aXNpdEFnZ3JlZ2F0ZTEoQWJz
dHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgc2l6ZSgpOyArK2kpCi0gICAgICAgIGF0KGkpLnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOwor
ICAgICAgICBhdChpKS52aXNpdEFnZ3JlZ2F0ZTEodmlzaXRvcik7CiB9CiAKKy8vdGVtcGxhdGUg
dm9pZCBQb2x5bW9ycGhpY0FjY2Vzczo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImKTsKKy8v
dGVtcGxhdGUgdm9pZCBQb2x5bW9ycGhpY0FjY2Vzczo6dmlzaXRBZ2dyZWdhdGUoRGVidWdTbG90
VmlzaXRvciYpOworCiB2b2lkIFBvbHltb3JwaGljQWNjZXNzOjpkdW1wKFByaW50U3RyZWFtJiBv
dXQpIGNvbnN0CiB7CiAgICAgb3V0LnByaW50KFJhd1BvaW50ZXIodGhpcyksICI6WyIpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNj
ZXNzLmgJKHJldmlzaW9uIDI3MTM2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Qb2x5bW9ycGhpY0FjY2Vzcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNTIsMTQgKzE1MiwxNiBA
QCBwdWJsaWM6CiAgICAgY29uc3QgQWNjZXNzQ2FzZSYgYXQodW5zaWduZWQgaSkgY29uc3QgeyBy
ZXR1cm4gKm1fbGlzdFtpXTsgfQogICAgIGNvbnN0IEFjY2Vzc0Nhc2UmIG9wZXJhdG9yW10odW5z
aWduZWQgaSkgY29uc3QgeyByZXR1cm4gKm1fbGlzdFtpXTsgfQogCi0gICAgdm9pZCB2aXNpdEFn
Z3JlZ2F0ZShTbG90VmlzaXRvciYpOworLy8gICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4g
dm9pZCB2aXNpdEFnZ3JlZ2F0ZShWaXNpdG9yJik7CisgICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZTEo
QWJzdHJhY3RTbG90VmlzaXRvciYpOwogCiAgICAgLy8gSWYgdGhpcyByZXR1cm5zIGZhbHNlIHRo
ZW4gd2UgYXJlIHJlcXVlc3RpbmcgYSByZXNldCBvZiB0aGUgb3duaW5nIFN0cnVjdHVyZVN0dWJJ
bmZvLgogICAgIGJvb2wgdmlzaXRXZWFrKFZNJikgY29uc3Q7CiAgICAgCiAgICAgLy8gVGhpcyBy
ZXR1cm5zIHRydWUgaWYgaXQgaGFzIG1hcmtlZCBldmVyeXRoaW5nIGl0IHdpbGwgZXZlciBtYXJr
ZWQuIFRoaXMgY2FuIGJlIHVzZWQgYXMgYW4KICAgICAvLyBvcHRpbWl6YXRpb24gdG8gdGhlbiBh
dm9pZCBjYWxsaW5nIHRoaXMgbWV0aG9kIGFnYWluIGR1cmluZyB0aGUgZml4cG9pbnQuCi0gICAg
Ym9vbCBwcm9wYWdhdGVUcmFuc2l0aW9ucyhTbG90VmlzaXRvciYpIGNvbnN0OworLy8gICAgdGVt
cGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gYm9vbCBwcm9wYWdhdGVUcmFuc2l0aW9uczEwKFZpc2l0
b3ImKSBjb25zdDsKKyAgICBib29sIHByb3BhZ2F0ZVRyYW5zaXRpb25zMTAoQWJzdHJhY3RTbG90
VmlzaXRvciYpIGNvbnN0OwogCiAgICAgdm9pZCBhYm91dFRvRGllKCk7CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5jcHAJKHJldmlz
aW9uIDI3MTM2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3Rh
dHVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzk2LDEyICszOTYsMTcgQEAgUHV0QnlJZFN0YXR1
cyBQdXRCeUlkU3RhdHVzOjpzbG93VmVyc2lvbgogICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKG1h
a2VzQ2FsbHMoKSA/IE1ha2VzQ2FsbHMgOiBUYWtlc1Nsb3dQYXRoKTsKIH0KIAotdm9pZCBQdXRC
eUlkU3RhdHVzOjptYXJrSWZDaGVhcChTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vdGVtcGxhdGU8
dHlwZW5hbWUgVmlzaXRvcj4KKy8vdm9pZCBQdXRCeUlkU3RhdHVzOjptYXJrSWZDaGVhcChWaXNp
dG9yJiB2aXNpdG9yKQordm9pZCBQdXRCeUlkU3RhdHVzOjptYXJrSWZDaGVhcDEoQWJzdHJhY3RT
bG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBmb3IgKFB1dEJ5SWRWYXJpYW50JiB2YXJpYW50
IDogbV92YXJpYW50cykKLSAgICAgICAgdmFyaWFudC5tYXJrSWZDaGVhcCh2aXNpdG9yKTsKKyAg
ICAgICAgdmFyaWFudC5tYXJrSWZDaGVhcDEodmlzaXRvcik7CiB9CiAKKy8vdGVtcGxhdGUgdm9p
ZCBQdXRCeUlkU3RhdHVzOjptYXJrSWZDaGVhcChTbG90VmlzaXRvciYpOworLy90ZW1wbGF0ZSB2
b2lkIFB1dEJ5SWRTdGF0dXM6Om1hcmtJZkNoZWFwKERlYnVnU2xvdFZpc2l0b3ImKTsKKwogYm9v
bCBQdXRCeUlkU3RhdHVzOjpmaW5hbGl6ZShWTSYgdm0pCiB7CiAgICAgZm9yIChQdXRCeUlkVmFy
aWFudCYgdmFyaWFudCA6IG1fdmFyaWFudHMpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuaAkocmV2aXNpb24gMjcxMzY4KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuaAkod29ya2luZyBjb3B5
KQpAQCAtMTE3LDcgKzExNyw4IEBAIHB1YmxpYzoKICAgICBjb25zdCBQdXRCeUlkVmFyaWFudCYg
YXQoc2l6ZV90IGluZGV4KSBjb25zdCB7IHJldHVybiBtX3ZhcmlhbnRzW2luZGV4XTsgfQogICAg
IGNvbnN0IFB1dEJ5SWRWYXJpYW50JiBvcGVyYXRvcltdKHNpemVfdCBpbmRleCkgY29uc3QgeyBy
ZXR1cm4gYXQoaW5kZXgpOyB9CiAgICAgCi0gICAgdm9pZCBtYXJrSWZDaGVhcChTbG90VmlzaXRv
ciYpOworLy8gICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCBtYXJrSWZDaGVhcChW
aXNpdG9yJik7CisgICAgdm9pZCBtYXJrSWZDaGVhcDEoQWJzdHJhY3RTbG90VmlzaXRvciYpOwog
ICAgIGJvb2wgZmluYWxpemUoVk0mKTsKICAgICAKICAgICB2b2lkIG1lcmdlKGNvbnN0IFB1dEJ5
SWRTdGF0dXMmKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlk
VmFyaWFudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1B1dEJ5SWRWYXJpYW50LmNwcAkocmV2aXNpb24gMjcxMzY4KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYy
LDEzICsyNjIsMTggQEAgYm9vbCBQdXRCeUlkVmFyaWFudDo6YXR0ZW1wdFRvTWVyZ2VUcmFucwog
ICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIFB1dEJ5SWRWYXJpYW50OjptYXJrSWZDaGVhcChT
bG90VmlzaXRvciYgdmlzaXRvcikKKy8vdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KKy8vdm9p
ZCBQdXRCeUlkVmFyaWFudDo6bWFya0lmQ2hlYXAoVmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgUHV0
QnlJZFZhcmlhbnQ6Om1hcmtJZkNoZWFwMShBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQog
ewotICAgIG1fb2xkU3RydWN0dXJlLm1hcmtJZkNoZWFwKHZpc2l0b3IpOworICAgIG1fb2xkU3Ry
dWN0dXJlLm1hcmtJZkNoZWFwMSh2aXNpdG9yKTsKICAgICBpZiAobV9uZXdTdHJ1Y3R1cmUpCi0g
ICAgICAgIG1fbmV3U3RydWN0dXJlLT5tYXJrSWZDaGVhcCh2aXNpdG9yKTsKKyAgICAgICAgbV9u
ZXdTdHJ1Y3R1cmUtPm1hcmtJZkNoZWFwMSh2aXNpdG9yKTsKIH0KIAorLy90ZW1wbGF0ZSB2b2lk
IFB1dEJ5SWRWYXJpYW50OjptYXJrSWZDaGVhcChTbG90VmlzaXRvciYpOworLy90ZW1wbGF0ZSB2
b2lkIFB1dEJ5SWRWYXJpYW50OjptYXJrSWZDaGVhcChEZWJ1Z1Nsb3RWaXNpdG9yJik7CisKIGJv
b2wgUHV0QnlJZFZhcmlhbnQ6OmZpbmFsaXplKFZNJiB2bSkKIHsKICAgICBpZiAoIW1fb2xkU3Ry
dWN0dXJlLmlzU3RpbGxBbGl2ZSh2bSkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvUHV0QnlJZFZhcmlhbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuaAkocmV2aXNpb24gMjcxMzY4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmgJKHdvcmtpbmcgY29weSkK
QEAgLTEzMiw3ICsxMzIsOCBAQCBwdWJsaWM6CiAKICAgICBib29sIGF0dGVtcHRUb01lcmdlKGNv
bnN0IFB1dEJ5SWRWYXJpYW50JiBvdGhlcik7CiAgICAgCi0gICAgdm9pZCBtYXJrSWZDaGVhcChT
bG90VmlzaXRvciYpOworLy8gICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCBtYXJr
SWZDaGVhcChWaXNpdG9yJik7CisgICAgdm9pZCBtYXJrSWZDaGVhcDEoQWJzdHJhY3RTbG90Vmlz
aXRvciYpOwogICAgIGJvb2wgZmluYWxpemUoVk0mKTsKICAgICAKICAgICB2b2lkIGR1bXAoUHJp
bnRTdHJlYW0mKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9S
ZWNvcmRlZFN0YXR1c2VzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvUmVjb3JkZWRTdGF0dXNlcy5jcHAJKHJldmlzaW9uIDI3MTM2OCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9SZWNvcmRlZFN0YXR1c2VzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtODQsMjYgKzg0LDM2IEBAIERlbGV0ZUJ5U3RhdHVzKiBSZWNvcmRlZFN0YXR1c2Vz
OjphZGREZWwKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi12b2lkIFJlY29yZGVkU3RhdHVzZXM6
OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvcikKKy8vdGVtcGxhdGU8dHlw
ZW5hbWUgVmlzaXRvcj4KKy8vdm9pZCBSZWNvcmRlZFN0YXR1c2VzOjp2aXNpdEFnZ3JlZ2F0ZShW
aXNpdG9yJiB2aXNpdG9yKQordm9pZCBSZWNvcmRlZFN0YXR1c2VzOjp2aXNpdEFnZ3JlZ2F0ZTEo
QWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBmb3IgKGF1dG8mIHBhaXIgOiBn
ZXRzKQotICAgICAgICBwYWlyLnNlY29uZC0+dmlzaXRBZ2dyZWdhdGUoc2xvdFZpc2l0b3IpOwor
ICAgICAgICBwYWlyLnNlY29uZC0+dmlzaXRBZ2dyZWdhdGUxKHZpc2l0b3IpOwogICAgIGZvciAo
YXV0byYgcGFpciA6IGRlbGV0ZXMpCi0gICAgICAgIHBhaXIuc2Vjb25kLT52aXNpdEFnZ3JlZ2F0
ZShzbG90VmlzaXRvcik7CisgICAgICAgIHBhaXIuc2Vjb25kLT52aXNpdEFnZ3JlZ2F0ZTEodmlz
aXRvcik7CiB9CiAKLXZvaWQgUmVjb3JkZWRTdGF0dXNlczo6bWFya0lmQ2hlYXAoU2xvdFZpc2l0
b3ImIHNsb3RWaXNpdG9yKQorLy90ZW1wbGF0ZSB2b2lkIFJlY29yZGVkU3RhdHVzZXM6OnZpc2l0
QWdncmVnYXRlKFNsb3RWaXNpdG9yJik7CisvL3RlbXBsYXRlIHZvaWQgUmVjb3JkZWRTdGF0dXNl
czo6dmlzaXRBZ2dyZWdhdGUoRGVidWdTbG90VmlzaXRvciYpOworCisvL3RlbXBsYXRlPHR5cGVu
YW1lIFZpc2l0b3I+CisvL3ZvaWQgUmVjb3JkZWRTdGF0dXNlczo6bWFya0lmQ2hlYXAoVmlzaXRv
ciYgdmlzaXRvcikKK3ZvaWQgUmVjb3JkZWRTdGF0dXNlczo6bWFya0lmQ2hlYXAxKEFic3RyYWN0
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgZm9yIChhdXRvJiBwYWlyIDogZ2V0cykKLSAg
ICAgICAgcGFpci5zZWNvbmQtPm1hcmtJZkNoZWFwKHNsb3RWaXNpdG9yKTsKKyAgICAgICAgcGFp
ci5zZWNvbmQtPm1hcmtJZkNoZWFwMSh2aXNpdG9yKTsKICAgICBmb3IgKGF1dG8mIHBhaXIgOiBw
dXRzKQotICAgICAgICBwYWlyLnNlY29uZC0+bWFya0lmQ2hlYXAoc2xvdFZpc2l0b3IpOworICAg
ICAgICBwYWlyLnNlY29uZC0+bWFya0lmQ2hlYXAxKHZpc2l0b3IpOwogICAgIGZvciAoYXV0byYg
cGFpciA6IGlucykKLSAgICAgICAgcGFpci5zZWNvbmQtPm1hcmtJZkNoZWFwKHNsb3RWaXNpdG9y
KTsKKyAgICAgICAgcGFpci5zZWNvbmQtPm1hcmtJZkNoZWFwMSh2aXNpdG9yKTsKICAgICBmb3Ig
KGF1dG8mIHBhaXIgOiBkZWxldGVzKQotICAgICAgICBwYWlyLnNlY29uZC0+bWFya0lmQ2hlYXAo
c2xvdFZpc2l0b3IpOworICAgICAgICBwYWlyLnNlY29uZC0+bWFya0lmQ2hlYXAxKHZpc2l0b3Ip
OwogfQogCisvL3RlbXBsYXRlIHZvaWQgUmVjb3JkZWRTdGF0dXNlczo6bWFya0lmQ2hlYXAoU2xv
dFZpc2l0b3ImKTsKKy8vdGVtcGxhdGUgdm9pZCBSZWNvcmRlZFN0YXR1c2VzOjptYXJrSWZDaGVh
cChEZWJ1Z1Nsb3RWaXNpdG9yJik7CisKIHZvaWQgUmVjb3JkZWRTdGF0dXNlczo6ZmluYWxpemVX
aXRob3V0RGVsZXRpbmcoVk0mIHZtKQogewogICAgIC8vIFRoaXMgdmFyaWFudCBvZiBmaW5hbGl6
ZSBnZXRzIGNhbGxlZCBmcm9tIHdpdGhpbiBncmFwaCBzYWZlcG9pbnRzIC0tIHNvIHRoZXJlIG1h
eSBiZSBERkcgSVIgaW4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9SZWNv
cmRlZFN0YXR1c2VzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1JlY29yZGVkU3RhdHVzZXMuaAkocmV2aXNpb24gMjcxMzY4KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1JlY29yZGVkU3RhdHVzZXMuaAkod29ya2luZyBjb3B5KQpAQCAt
NTAsOCArNTAsMTAgQEAgc3RydWN0IFJlY29yZGVkU3RhdHVzZXMgewogICAgIEluQnlJZFN0YXR1
cyogYWRkSW5CeUlkU3RhdHVzKGNvbnN0IENvZGVPcmlnaW4mLCBjb25zdCBJbkJ5SWRTdGF0dXMm
KTsKICAgICBEZWxldGVCeVN0YXR1cyogYWRkRGVsZXRlQnlTdGF0dXMoY29uc3QgQ29kZU9yaWdp
biYsIGNvbnN0IERlbGV0ZUJ5U3RhdHVzJik7CiAgICAgCi0gICAgdm9pZCB2aXNpdEFnZ3JlZ2F0
ZShTbG90VmlzaXRvciYpOwotICAgIHZvaWQgbWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImKTsKKy8v
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgdmlzaXRBZ2dyZWdhdGUoVmlzaXRv
ciYpOworLy8gICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCBtYXJrSWZDaGVhcChW
aXNpdG9yJik7CisgICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZTEoQWJzdHJhY3RTbG90VmlzaXRvciYp
OworICAgIHZvaWQgbWFya0lmQ2hlYXAxKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKICAgICAKICAg
ICB2b2lkIGZpbmFsaXplV2l0aG91dERlbGV0aW5nKFZNJik7CiAgICAgdm9pZCBmaW5hbGl6ZShW
TSYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVNldC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVy
ZVNldC5jcHAJKHJldmlzaW9uIDI3MTM2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9TdHJ1Y3R1cmVTZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwxMiArMzEsMTcgQEAK
IAogbmFtZXNwYWNlIEpTQyB7CiAKLXZvaWQgU3RydWN0dXJlU2V0OjptYXJrSWZDaGVhcChTbG90
VmlzaXRvciYgdmlzaXRvcikgY29uc3QKKy8vdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KKy8v
dm9pZCBTdHJ1Y3R1cmVTZXQ6Om1hcmtJZkNoZWFwKFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0Cit2
b2lkIFN0cnVjdHVyZVNldDo6bWFya0lmQ2hlYXAxKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0
b3IpIGNvbnN0CiB7CiAgICAgZm9yIChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA6ICp0aGlzKQotICAg
ICAgICBzdHJ1Y3R1cmUtPm1hcmtJZkNoZWFwKHZpc2l0b3IpOworICAgICAgICBzdHJ1Y3R1cmUt
Pm1hcmtJZkNoZWFwMSh2aXNpdG9yKTsKIH0KIAorLy90ZW1wbGF0ZSB2b2lkIFN0cnVjdHVyZVNl
dDo6bWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImKSBjb25zdDsKKy8vdGVtcGxhdGUgdm9pZCBTdHJ1
Y3R1cmVTZXQ6Om1hcmtJZkNoZWFwKERlYnVnU2xvdFZpc2l0b3ImKSBjb25zdDsKKwogYm9vbCBT
dHJ1Y3R1cmVTZXQ6OmlzU3RpbGxBbGl2ZShWTSYgdm0pIGNvbnN0CiB7CiAgICAgZm9yIChTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSA6ICp0aGlzKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvU3RydWN0dXJlU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1N0cnVjdHVyZVNldC5oCShyZXZpc2lvbiAyNzEzNjgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU2V0LmgJKHdvcmtpbmcgY29weSkKQEAg
LTU0LDcgKzU0LDggQEAgcHVibGljOgogICAgICAgICByZXR1cm4gb25seUVudHJ5KCk7CiAgICAg
fQogCi0gICAgdm9pZCBtYXJrSWZDaGVhcChTbG90VmlzaXRvciYpIGNvbnN0OworLy8gICAgdGVt
cGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCBtYXJrSWZDaGVhcChWaXNpdG9yJikgY29uc3Q7
CisgICAgdm9pZCBtYXJrSWZDaGVhcDEoQWJzdHJhY3RTbG90VmlzaXRvciYpIGNvbnN0OwogICAg
IGJvb2wgaXNTdGlsbEFsaXZlKFZNJikgY29uc3Q7CiAgICAgCiAgICAgdm9pZCBkdW1wSW5Db250
ZXh0KFByaW50U3RyZWFtJiwgRHVtcENvbnRleHQqKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcAkocmV2
aXNpb24gMjcxMzY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVy
ZVN0dWJJbmZvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjkwLDEyICsyOTAsMTQgQEAgdm9pZCBT
dHJ1Y3R1cmVTdHViSW5mbzo6cmVzZXQoY29uc3QgQ29uYwogICAgIHNldENhY2hlVHlwZShsb2Nr
ZXIsIENhY2hlVHlwZTo6VW5zZXQpOwogfQogCi12b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjp2aXNp
dEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vdGVtcGxhdGU8dHlwZW5hbWUgVmlz
aXRvcj4KKy8vdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6dmlzaXRBZ2dyZWdhdGUoVmlzaXRvciYg
dmlzaXRvcikKK3ZvaWQgU3RydWN0dXJlU3R1YkluZm86OnZpc2l0QWdncmVnYXRlMShBYnN0cmFj
dFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHsKICAgICAgICAgYXV0byBsb2NrZXIgPSBo
b2xkTG9jayhtX2J1ZmZlcmVkU3RydWN0dXJlc0xvY2spOwogICAgICAgICBmb3IgKGF1dG8mIGJ1
ZmZlcmVkU3RydWN0dXJlIDogbV9idWZmZXJlZFN0cnVjdHVyZXMpCi0gICAgICAgICAgICBidWZm
ZXJlZFN0cnVjdHVyZS5ieVZhbElkKCkudmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7CisgICAgICAg
ICAgICBidWZmZXJlZFN0cnVjdHVyZS5ieVZhbElkKCkudmlzaXRBZ2dyZWdhdGUxKHZpc2l0b3Ip
OwogICAgIH0KICAgICBzd2l0Y2ggKG1fY2FjaGVUeXBlKSB7CiAgICAgY2FzZSBDYWNoZVR5cGU6
OlVuc2V0OgpAQCAtMzA1LDEwICszMDcsMTAgQEAgdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6dmlz
aXRBZ2dyZWdhdGUoUwogICAgIGNhc2UgQ2FjaGVUeXBlOjpQdXRCeUlkUmVwbGFjZToKICAgICBj
YXNlIENhY2hlVHlwZTo6SW5CeUlkU2VsZjoKICAgICBjYXNlIENhY2hlVHlwZTo6R2V0QnlJZFNl
bGY6Ci0gICAgICAgIG1faWRlbnRpZmllci52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKKyAgICAg
ICAgbV9pZGVudGlmaWVyLnZpc2l0QWdncmVnYXRlMSh2aXNpdG9yKTsKICAgICAgICAgcmV0dXJu
OwogICAgIGNhc2UgQ2FjaGVUeXBlOjpTdHViOgotICAgICAgICB1LnN0dWItPnZpc2l0QWdncmVn
YXRlKHZpc2l0b3IpOworICAgICAgICB1LnN0dWItPnZpc2l0QWdncmVnYXRlMSh2aXNpdG9yKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKQEAgLTMxNiw2ICszMTgsOSBAQCB2b2lkIFN0
cnVjdHVyZVN0dWJJbmZvOjp2aXNpdEFnZ3JlZ2F0ZShTCiAgICAgcmV0dXJuOwogfQogCisvL3Rl
bXBsYXRlIHZvaWQgU3RydWN0dXJlU3R1YkluZm86OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9y
Jik7CisvL3RlbXBsYXRlIHZvaWQgU3RydWN0dXJlU3R1YkluZm86OnZpc2l0QWdncmVnYXRlKERl
YnVnU2xvdFZpc2l0b3ImKTsKKwogdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6dmlzaXRXZWFrUmVm
ZXJlbmNlcyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXJCYXNlJiBsb2NrZXIsIENvZGVCbG9jayog
Y29kZUJsb2NrKQogewogICAgIFZNJiB2bSA9IGNvZGVCbG9jay0+dm0oKTsKQEAgLTM0NiwyNCAr
MzUxLDMxIEBAIHZvaWQgU3RydWN0dXJlU3R1YkluZm86OnZpc2l0V2Vha1JlZmVyZW4KICAgICBy
ZXNldEJ5R0MgPSB0cnVlOwogfQogCi1ib29sIFN0cnVjdHVyZVN0dWJJbmZvOjpwcm9wYWdhdGVU
cmFuc2l0aW9ucyhTbG90VmlzaXRvciYgdmlzaXRvcikKLXsKLSAgICBzd2l0Y2ggKG1fY2FjaGVU
eXBlKSB7Ci0gICAgY2FzZSBDYWNoZVR5cGU6OlVuc2V0OgotICAgIGNhc2UgQ2FjaGVUeXBlOjpB
cnJheUxlbmd0aDoKLSAgICBjYXNlIENhY2hlVHlwZTo6U3RyaW5nTGVuZ3RoOgotICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICBjYXNlIENhY2hlVHlwZTo6R2V0QnlJZFNlbGY6Ci0gICAgY2FzZSBD
YWNoZVR5cGU6OlB1dEJ5SWRSZXBsYWNlOgotICAgIGNhc2UgQ2FjaGVUeXBlOjpJbkJ5SWRTZWxm
OgotICAgICAgICByZXR1cm4gdS5ieUlkU2VsZi5iYXNlT2JqZWN0U3RydWN0dXJlLT5tYXJrSWZD
aGVhcCh2aXNpdG9yKTsKLSAgICBjYXNlIENhY2hlVHlwZTo6U3R1YjoKLSAgICAgICAgcmV0dXJu
IHUuc3R1Yi0+cHJvcGFnYXRlVHJhbnNpdGlvbnModmlzaXRvcik7Ci0gICAgfQotICAgIAotICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19CisvL3Rl
bXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+CisvL2Jvb2wgU3RydWN0dXJlU3R1YkluZm86OnByb3Bh
Z2F0ZVRyYW5zaXRpb25zMShWaXNpdG9yJiB2aXNpdG9yKQorLy97CisvLyAgICBzd2l0Y2ggKG1f
Y2FjaGVUeXBlKSB7CisvLyAgICBjYXNlIENhY2hlVHlwZTo6VW5zZXQ6CisvLyAgICBjYXNlIENh
Y2hlVHlwZTo6QXJyYXlMZW5ndGg6CisvLyAgICBjYXNlIENhY2hlVHlwZTo6U3RyaW5nTGVuZ3Ro
OgorLy8gICAgICAgIHJldHVybiB0cnVlOworLy8gICAgY2FzZSBDYWNoZVR5cGU6OkdldEJ5SWRT
ZWxmOgorLy8gICAgY2FzZSBDYWNoZVR5cGU6OlB1dEJ5SWRSZXBsYWNlOgorLy8gICAgY2FzZSBD
YWNoZVR5cGU6OkluQnlJZFNlbGY6CisvLyAgICAgICAgcmV0dXJuIHUuYnlJZFNlbGYuYmFzZU9i
amVjdFN0cnVjdHVyZS0+bWFya0lmQ2hlYXAxKHZpc2l0b3IpOworLy8gICAgICAgIHJldHVybiBm
YWxzZTsKKy8vICAgIGNhc2UgQ2FjaGVUeXBlOjpTdHViOgorLy8gICAgICAgIHJldHVybiB1LnN0
dWItPnByb3BhZ2F0ZVRyYW5zaXRpb25zMTAodmlzaXRvcik7CisvLyAgICAgICAgcmV0dXJuIGZh
bHNlOworLy8gICAgfQorLy8KKy8vLy8gICAgVU5VU0VEX1BBUkFNKHZpc2l0b3IpOyAvLyBtbGFt
IFRFU1QKKy8vICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisvLyAgICByZXR1cm4g
dHJ1ZTsKKy8vfQorLy8KKy8vdGVtcGxhdGU8PiBib29sIFN0cnVjdHVyZVN0dWJJbmZvOjpwcm9w
YWdhdGVUcmFuc2l0aW9uczEoU2xvdFZpc2l0b3ImKTsKKy8vdGVtcGxhdGU8PiBib29sIFN0cnVj
dHVyZVN0dWJJbmZvOjpwcm9wYWdhdGVUcmFuc2l0aW9uczEoQWJzdHJhY3RTbG90VmlzaXRvciYp
OwogCiBTdHViSW5mb1N1bW1hcnkgU3RydWN0dXJlU3R1YkluZm86OnN1bW1hcnkoVk0mIHZtKSBj
b25zdAogewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0
dWJJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0
cnVjdHVyZVN0dWJJbmZvLmgJKHJldmlzaW9uIDI3MTM2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC05MSwx
NCArOTEsMTYgQEAgcHVibGljOgogICAgIHZvaWQgZGVyZWYoKTsKICAgICB2b2lkIGFib3V0VG9E
aWUoKTsKIAotICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImKTsKKy8vICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgdmlzaXRBZ2dyZWdhdGUoVmlzaXRvciYpOwor
ICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUxKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKIAogICAgIC8v
IENoZWNrIGlmIHRoZSBzdHViIGhhcyB3ZWFrIHJlZmVyZW5jZXMgdGhhdCBhcmUgZGVhZC4gSWYg
aXQgZG9lcywgdGhlbiBpdCByZXNldHMgaXRzZWxmLAogICAgIC8vIGVpdGhlciBlbnRpcmVseSBv
ciBqdXN0IGVub3VnaCB0byBlbnN1cmUgdGhhdCB0aG9zZSBkZWFkIHBvaW50ZXJzIGRvbid0IGdl
dCB1c2VkIGFueW1vcmUuCiAgICAgdm9pZCB2aXNpdFdlYWtSZWZlcmVuY2VzKGNvbnN0IENvbmN1
cnJlbnRKU0xvY2tlckJhc2UmLCBDb2RlQmxvY2sqKTsKICAgICAKICAgICAvLyBUaGlzIHJldHVy
bnMgdHJ1ZSBpZiBpdCBoYXMgbWFya2VkIGV2ZXJ5dGhpbmcgdGhhdCBpdCB3aWxsIGV2ZXIgbWFy
ay4KLSAgICBib29sIHByb3BhZ2F0ZVRyYW5zaXRpb25zKFNsb3RWaXNpdG9yJik7CisvLyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiBib29sIHByb3BhZ2F0ZVRyYW5zaXRpb25zMShWaXNp
dG9yJik7CisgICAgYm9vbCBwcm9wYWdhdGVUcmFuc2l0aW9uczEoQWJzdHJhY3RTbG90VmlzaXRv
ciYpOwogICAgICAgICAKICAgICBTdHViSW5mb1N1bW1hcnkgc3VtbWFyeShWTSYpIGNvbnN0Owog
ICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJs
b2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5s
aW5rZWRDb2RlQmxvY2suY3BwCShyZXZpc2lvbiAyNzEzNjgpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE5IEFwcGxlIEluYy4gQWxs
IFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDIwIEFwcGxlIEluYy4g
QWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
NzEsNyArNzEsOCBAQCBVbmxpbmtlZENvZGVCbG9jazo6VW5saW5rZWRDb2RlQmxvY2soVk0mCiAg
ICAgfQogfQogCi12b2lkIFVubGlua2VkQ29kZUJsb2NrOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCog
Y2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgor
dm9pZCBVbmxpbmtlZENvZGVCbG9jazo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBW
aXNpdG9yJiB2aXNpdG9yKQogewogICAgIFVubGlua2VkQ29kZUJsb2NrKiB0aGlzT2JqZWN0ID0g
anNDYXN0PFVubGlua2VkQ29kZUJsb2NrKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9J
TkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtOTAsNiArOTEsOCBAQCB2b2lkIFVubGlu
a2VkQ29kZUJsb2NrOjp2aXNpdENoaWxkcmVuKEpTCiAgICAgdmlzaXRvci5yZXBvcnRFeHRyYU1l
bW9yeVZpc2l0ZWQoZXh0cmFNZW1vcnkpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oVW5s
aW5rZWRDb2RlQmxvY2spOworCiBzaXplX3QgVW5saW5rZWRDb2RlQmxvY2s6OmVzdGltYXRlZFNp
emUoSlNDZWxsKiBjZWxsLCBWTSYgdm0pCiB7CiAgICAgVW5saW5rZWRDb2RlQmxvY2sqIHRoaXNP
YmplY3QgPSBqc0Nhc3Q8VW5saW5rZWRDb2RlQmxvY2sqPihjZWxsKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oCShyZXZp
c2lvbiAyNzEzNjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRD
b2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTItMjAxOSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTItMjAyMCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQyMyw3ICs0MjMsNyBAQCBwcml2YXRlOgog
ICAgIFJlZkNvdW50ZWRBcnJheTxFeHByZXNzaW9uUmFuZ2VJbmZvPiBtX2V4cHJlc3Npb25JbmZv
OwogCiBwcm90ZWN0ZWQ6Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBT
bG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAgICAgc3RhdGljIHNp
emVfdCBlc3RpbWF0ZWRTaXplKEpTQ2VsbCosIFZNJik7CiAKIHB1YmxpYzoKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkRnVu
Y3Rpb25FeGVjdXRhYmxlLmNwcAkocmV2aXNpb24gMjcxMzY4KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1VubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxOSBBcHBs
ZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMCBB
cHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTE0MSw3ICsxNDEsOCBAQCB2b2lkIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxl
OjpkZXN0cm95CiAgICAgc3RhdGljX2Nhc3Q8VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqPihj
ZWxsKS0+flVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKCk7CiB9CiAKLXZvaWQgVW5saW5rZWRG
dW5jdGlvbkV4ZWN1dGFibGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRv
ciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFVubGlua2VkRnVu
Y3Rpb25FeGVjdXRhYmxlOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3Im
IHZpc2l0b3IpCiB7CiAgICAgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIHRoaXNPYmplY3Qg
PSBqc0Nhc3Q8VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqPihjZWxsKTsKICAgICBBU1NFUlRf
R0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC0xNjQsNiArMTY1LDgg
QEAgdm9pZCBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6dmlzaXRDaAogICAgIH0KIH0KIAor
REVGSU5FX1ZJU0lUX0NISUxEUkVOKFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKTsKKwogU291
cmNlQ29kZSBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6bGlua2VkU291cmNlQ29kZShjb25z
dCBTb3VyY2VDb2RlJiBwYXNzZWRQYXJlbnRTb3VyY2UpIGNvbnN0CiB7CiAgICAgY29uc3QgU291
cmNlQ29kZSYgcGFyZW50U291cmNlID0gIW1faXNCdWlsdGluRGVmYXVsdENsYXNzQ29uc3RydWN0
b3IgPyBwYXNzZWRQYXJlbnRTb3VyY2UgOiBCdWlsdGluRXhlY3V0YWJsZXM6OmRlZmF1bHRDb25z
dHJ1Y3RvclNvdXJjZUNvZGUoY29uc3RydWN0b3JLaW5kKCkpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkRnVuY3Rpb25FeGVj
dXRhYmxlLmgJKHJldmlzaW9uIDI3MTM2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9VbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE5IEFwcGxlIEluYy4gQWxsIFJp
Z2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDIwIEFwcGxlIEluYy4gQWxs
IFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjMy
LDcgKzIzMiw3IEBAIHByaXZhdGU6CiAgICAgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUoVk0m
LCBTdHJ1Y3R1cmUqLCBjb25zdCBTb3VyY2VDb2RlJiwgRnVuY3Rpb25NZXRhZGF0YU5vZGUqLCBV
bmxpbmtlZEZ1bmN0aW9uS2luZCwgQ29uc3RydWN0QWJpbGl0eSwgSlNQYXJzZXJTY3JpcHRNb2Rl
LCBSZWZQdHI8VERaRW52aXJvbm1lbnRMaW5rPiwgIEpTQzo6RGVyaXZlZENvbnRleHRUeXBlLCBK
U0M6Ok5lZWRzQ2xhc3NGaWVsZEluaXRpYWxpemVyLCBib29sIGlzQnVpbHRpbkRlZmF1bHRDbGFz
c0NvbnN0cnVjdG9yKTsKICAgICBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZShEZWNvZGVyJiwg
Y29uc3QgQ2FjaGVkRnVuY3Rpb25FeGVjdXRhYmxlJik7CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNp
dENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElM
RFJFTjsKIAogICAgIHZvaWQgZGVjb2RlQ2FjaGVkQ29kZUJsb2NrcyhWTSYpOwogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXJTY29wZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyU2NvcGUuY3BwCShy
ZXZpc2lvbiAyNzEzNjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdn
ZXJTY29wZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDA4LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDA4LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01NSw3ICs1NSw4IEBAIHZvaWQgRGVidWdn
ZXJTY29wZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHYKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2
bSk7CiB9CiAKLXZvaWQgRGVidWdnZXJTY29wZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGws
IFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQg
RGVidWdnZXJTY29wZTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2
aXNpdG9yKQogewogICAgIERlYnVnZ2VyU2NvcGUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8RGVidWdn
ZXJTY29wZSo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVj
dCwgaW5mbygpKTsKQEAgLTY1LDYgKzY2LDggQEAgdm9pZCBEZWJ1Z2dlclNjb3BlOjp2aXNpdENo
aWxkcmVuKEpTQ2VsbAogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fbmV4dCk7CiB9
CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihEZWJ1Z2dlclNjb3BlKTsKKwogU3RyaW5nIERlYnVn
Z2VyU2NvcGU6OmNsYXNzTmFtZShjb25zdCBKU09iamVjdCogb2JqZWN0LCBWTSYgdm0pCiB7CiAg
ICAgY29uc3QgRGVidWdnZXJTY29wZSogc2NvcGUgPSBqc0Nhc3Q8Y29uc3QgRGVidWdnZXJTY29w
ZSo+KG9iamVjdCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdn
ZXJTY29wZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9E
ZWJ1Z2dlclNjb3BlLmgJKHJldmlzaW9uIDI3MTM2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZWJ1Z2dlci9EZWJ1Z2dlclNjb3BlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDcgKzQ2LDcg
QEAgcHVibGljOgogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIERlYnVnZ2VyU2NvcGUq
IGNyZWF0ZShWTSYgdm0sIEpTU2NvcGUqIHNjb3BlKTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0
Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxE
UkVOOwogICAgIHN0YXRpYyBTdHJpbmcgY2xhc3NOYW1lKGNvbnN0IEpTT2JqZWN0KiwgVk0mKTsK
ICAgICBzdGF0aWMgU3RyaW5nIHRvU3RyaW5nTmFtZShjb25zdCBKU09iamVjdCosIEpTR2xvYmFs
T2JqZWN0Kik7CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0Kiwg
SlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkVHJhbnNpdGlvbnMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFRyYW5zaXRpb25zLmNw
cAkocmV2aXNpb24gMjcxMzY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNp
cmVkVHJhbnNpdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Miw3ICs1Miw3IEBAIHZvaWQg
RGVzaXJlZFRyYW5zaXRpb246OnJlYWxseUFkZChWTSYgdm0KICAgICAgICAgICAgIG1fb2xkU3Ry
dWN0dXJlLCBtX25ld1N0cnVjdHVyZSkpOwogfQogCi12b2lkIERlc2lyZWRUcmFuc2l0aW9uOjp2
aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBEZXNpcmVkVHJhbnNpdGlv
bjo6dmlzaXRDaGlsZHJlbjIoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB2
aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKG1fY29kZU9yaWdpbk93bmVyKTsKICAgICB2aXNpdG9y
LmFwcGVuZFVuYmFycmllcmVkKG1fb2xkU3RydWN0dXJlKTsKQEAgLTc4LDEwICs3OCwxMCBAQCB2
b2lkIERlc2lyZWRUcmFuc2l0aW9uczo6cmVhbGx5QWRkKFZNJiB2CiAgICAgICAgIG1fdHJhbnNp
dGlvbnNbaV0ucmVhbGx5QWRkKHZtLCBjb21tb24pOwogfQogCi12b2lkIERlc2lyZWRUcmFuc2l0
aW9uczo6dmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgRGVzaXJlZFRy
YW5zaXRpb25zOjp2aXNpdENoaWxkcmVuMihBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQog
ewogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3RyYW5zaXRpb25zLnNpemUoKTsgaSsr
KQotICAgICAgICBtX3RyYW5zaXRpb25zW2ldLnZpc2l0Q2hpbGRyZW4odmlzaXRvcik7CisgICAg
ICAgIG1fdHJhbnNpdGlvbnNbaV0udmlzaXRDaGlsZHJlbjIodmlzaXRvcik7CiB9CiAKIH0gfSAv
LyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
RGVzaXJlZFRyYW5zaXRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdEZXNpcmVkVHJhbnNpdGlvbnMuaAkocmV2aXNpb24gMjcxMzY4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkVHJhbnNpdGlvbnMuaAkod29ya2luZyBjb3B5
KQpAQCAtNDYsOCArNDYsNyBAQCBwdWJsaWM6CiAgICAgRGVzaXJlZFRyYW5zaXRpb24oQ29kZUJs
b2NrKiwgQ29kZUJsb2NrKiBjb2RlT3JpZ2luT3duZXIsIFN0cnVjdHVyZSosIFN0cnVjdHVyZSop
OwogCiAgICAgdm9pZCByZWFsbHlBZGQoVk0mLCBDb21tb25EYXRhKik7Ci0gICAgCi0gICAgdm9p
ZCB2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CisgICAgdm9pZCB2aXNpdENoaWxkcmVuMihB
YnN0cmFjdFNsb3RWaXNpdG9yJik7CiAKIHByaXZhdGU6CiAgICAgQ29kZUJsb2NrKiBtX2NvZGVC
bG9jazsKQEAgLTYzLDcgKzYyLDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBhZGRMYXppbHkoQ29k
ZUJsb2NrKiwgQ29kZUJsb2NrKiBjb2RlT3JpZ2luT3duZXIsIFN0cnVjdHVyZSosIFN0cnVjdHVy
ZSopOwogICAgIHZvaWQgcmVhbGx5QWRkKFZNJiwgQ29tbW9uRGF0YSopOwotICAgIHZvaWQgdmlz
aXRDaGlsZHJlbihTbG90VmlzaXRvciYpOworICAgIHZvaWQgdmlzaXRDaGlsZHJlbjIoQWJzdHJh
Y3RTbG90VmlzaXRvciYpOwogCiBwcml2YXRlOgogICAgIFZlY3RvcjxEZXNpcmVkVHJhbnNpdGlv
bj4gbV90cmFuc2l0aW9uczsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVz
aXJlZFdlYWtSZWZlcmVuY2VzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Rlc2lyZWRXZWFrUmVmZXJlbmNlcy5jcHAJKHJldmlzaW9uIDI3MTM2OCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFdlYWtSZWZlcmVuY2VzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtODcsNyArODcsNyBAQCB2b2lkIERlc2lyZWRXZWFrUmVmZXJlbmNl
czo6cmVhbGx5QWRkKFZNCiAgICAgfQogfQogCi12b2lkIERlc2lyZWRXZWFrUmVmZXJlbmNlczo6
dmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgRGVzaXJlZFdlYWtSZWZl
cmVuY2VzOjp2aXNpdENoaWxkcmVuMihBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewog
ICAgIGZvciAoSlNDZWxsKiB0YXJnZXQgOiBtX3JlZmVyZW5jZXMpCiAgICAgICAgIHZpc2l0b3Iu
YXBwZW5kVW5iYXJyaWVyZWQodGFyZ2V0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHRGVzaXJlZFdlYWtSZWZlcmVuY2VzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2Vha1JlZmVyZW5jZXMuaAkocmV2aXNpb24gMjcxMzY4
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2Vha1JlZmVyZW5jZXMu
aAkod29ya2luZyBjb3B5KQpAQCAtMzEsMTAgKzMxLDEwIEBACiAKIG5hbWVzcGFjZSBKU0MgeyAK
IAorY2xhc3MgQWJzdHJhY3RTbG90VmlzaXRvcjsKIGNsYXNzIENvZGVCbG9jazsKIGNsYXNzIEpT
Q2VsbDsKIGNsYXNzIEpTVmFsdWU7Ci1jbGFzcyBTbG90VmlzaXRvcjsKIGNsYXNzIFZNOwogCiBu
YW1lc3BhY2UgREZHIHsKQEAgLTUyLDggKzUyLDggQEAgcHVibGljOgogICAgIGJvb2wgY29udGFp
bnMoSlNDZWxsKik7CiAgICAgCiAgICAgdm9pZCByZWFsbHlBZGQoVk0mLCBDb21tb25EYXRhKik7
Ci0gICAgCi0gICAgdm9pZCB2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CisKKyAgICB2b2lk
IHZpc2l0Q2hpbGRyZW4yKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKIAogcHJpdmF0ZToKICAgICBD
b2RlQmxvY2sqIG1fY29kZUJsb2NrOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdHcmFwaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdH
cmFwaC5jcHAJKHJldmlzaW9uIDI3MTM2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHR3JhcGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NzcsNyArOTc3LDcgQEAgQmxvY2tMaXN0
IEdyYXBoOjpibG9ja3NJblBvc3RPcmRlcihib29sIAogICAgICAgICB9CiAgICAgfQogCi0gICAg
aWYgKGlzU2FmZVRvVmFsaWRhdGUgJiYgdmFsaWRhdGlvbkVuYWJsZWQoKSkgeyAvLyBUaGVyZSBh
cmUgdXNlcnMgb2YgdGhpcyB3aGVyZSB3ZSBoYXZlbid0IHlldCBidWlsdCBvZiB0aGUgQ0ZHIGVu
b3VnaCB0byBiZSBhYmxlIHRvIHJ1biBkb21pbmF0b3JzLgorICAgIGlmIChpc1NhZmVUb1ZhbGlk
YXRlICYmIHZhbGlkYXRpb25FbmFibGVkKCkpIHsgLy8gVGhlcmUgYXJlIHVzZXJzIG9mIHRoaXMg
d2hlcmUgd2UgaGF2ZW4ndCB5ZXQgYnVpbHQgdGhlIENGRyBlbm91Z2ggdG8gYmUgYWJsZSB0byBy
dW4gZG9taW5hdG9ycy4KICAgICAgICAgYXV0byB2YWxpZGF0ZVJlc3VsdHMgPSBbJl0gKGF1dG8m
IGRvbWluYXRvcnMpIHsKICAgICAgICAgICAgIC8vIFdoZW4gaXRlcmF0aW5nIG92ZXIgcmV2ZXJz
ZSBwb3N0IG9yZGVyLCB3ZSBzaG91bGQgc2VlIGRvbWluYXRvcnMKICAgICAgICAgICAgIC8vIGJl
Zm9yZSB0aGluZ3MgdGhleSBkb21pbmF0ZS4KQEAgLTE0NDgsNyArMTQ0OCw3IEBAIHZvaWQgR3Jh
cGg6OnJlZ2lzdGVyRnJvemVuVmFsdWVzKCkKICAgICBtX2NvZGVCbG9jay0+Y29uc3RhbnRzU291
cmNlQ29kZVJlcHJlc2VudGF0aW9uKCkuc2hyaW5rVG9GaXQoKTsKIH0KIAotdm9pZCBHcmFwaDo6
dmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgR3JhcGg6OnZpc2l0Q2hp
bGRyZW4xKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgZm9yIChGcm96ZW5W
YWx1ZSogdmFsdWUgOiBtX2Zyb3plblZhbHVlcykgewogICAgICAgICB2aXNpdG9yLmFwcGVuZFVu
YmFycmllcmVkKHZhbHVlLT52YWx1ZSgpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHR3JhcGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0dyYXBoLmgJKHJldmlzaW9uIDI3MTM2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHR3JhcGguaAkod29ya2luZyBjb3B5KQpAQCAtMTAwMCw5ICsxMDAwLDkgQEAgcHVibGljOgog
ICAgIGJvb2wgY2FuRG9GYXN0U3ByZWFkKE5vZGUqLCBjb25zdCBBYnN0cmFjdFZhbHVlJik7CiAg
ICAgCiAgICAgdm9pZCByZWdpc3RlckZyb3plblZhbHVlcygpOwotICAgIAotICAgIHZvaWQgdmlz
aXRDaGlsZHJlbihTbG90VmlzaXRvciYpIGZpbmFsOwotICAgIAorCisgICAgdm9pZCB2aXNpdENo
aWxkcmVuMShBYnN0cmFjdFNsb3RWaXNpdG9yJikgZmluYWw7CisKICAgICB2b2lkIGxvZ0Fzc2Vy
dGlvbkZhaWx1cmUoCiAgICAgICAgIHN0ZDo6bnVsbHB0cl90LCBjb25zdCBjaGFyKiBmaWxlLCBp
bnQgbGluZSwgY29uc3QgY2hhciogZnVuY3Rpb24sCiAgICAgICAgIGNvbnN0IGNoYXIqIGFzc2Vy
dGlvbik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAJKHJldmlzaW9u
IDI3MTM2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTY3Miw3ICs2NzIsNyBAQCBDb21waWxhdGlvbktleSBQbGFuOjprZXkoKQog
ICAgIHJldHVybiBDb21waWxhdGlvbktleShtX2NvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSwgbV9t
b2RlKTsKIH0KIAotdm9pZCBQbGFuOjpjaGVja0xpdmVuZXNzQW5kVmlzaXRDaGlsZHJlbihTbG90
VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgUGxhbjo6Y2hlY2tMaXZlbmVzc0FuZFZpc2l0Q2hpbGRy
ZW4oQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBpZiAoIWlzS25vd25Ub0Jl
TGl2ZUR1cmluZ0dDKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTY4NCw4ICs2ODQsOCBAQCB2b2lk
IFBsYW46OmNoZWNrTGl2ZW5lc3NBbmRWaXNpdENoaWxkcmVuCiAgICAgICAgICAgICB2aXNpdG9y
LmFwcGVuZFVuYmFycmllcmVkKHZhbHVlLnZhbHVlKCkpOwogICAgIH0KIAotICAgIG1fcmVjb3Jk
ZWRTdGF0dXNlcy52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKLSAgICBtX3JlY29yZGVkU3RhdHVz
ZXMubWFya0lmQ2hlYXAodmlzaXRvcik7CisgICAgbV9yZWNvcmRlZFN0YXR1c2VzLnZpc2l0QWdn
cmVnYXRlMSh2aXNpdG9yKTsKKyAgICBtX3JlY29yZGVkU3RhdHVzZXMubWFya0lmQ2hlYXAxKHZp
c2l0b3IpOwogCiAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZChtX2NvZGVCbG9jayk7CiAg
ICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZChtX2NvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSk7
CkBAIC02OTgsOCArNjk4LDggQEAgdm9pZCBQbGFuOjpjaGVja0xpdmVuZXNzQW5kVmlzaXRDaGls
ZHJlbgogICAgICAgICB9CiAgICAgfQogCi0gICAgbV93ZWFrUmVmZXJlbmNlcy52aXNpdENoaWxk
cmVuKHZpc2l0b3IpOwotICAgIG1fdHJhbnNpdGlvbnMudmlzaXRDaGlsZHJlbih2aXNpdG9yKTsK
KyAgICBtX3dlYWtSZWZlcmVuY2VzLnZpc2l0Q2hpbGRyZW4yKHZpc2l0b3IpOworICAgIG1fdHJh
bnNpdGlvbnMudmlzaXRDaGlsZHJlbjIodmlzaXRvcik7CiB9CiAKIHZvaWQgUGxhbjo6ZmluYWxp
emVJbkdDKCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5oCShyZXZpc2lvbiAy
NzEzNjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uaAkod29ya2luZyBj
b3B5KQpAQCAtNDMsOCArNDMsOCBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAorY2xhc3MgQWJzdHJh
Y3RTbG90VmlzaXRvcjsKIGNsYXNzIENvZGVCbG9jazsKLWNsYXNzIFNsb3RWaXNpdG9yOwogCiBu
YW1lc3BhY2UgREZHIHsKIApAQCAtNzIsNyArNzIsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgRnVuYz4KICAgICB2b2lkIGl0ZXJhdGVDb2RlQmxvY2tzRm9yR0MoY29u
c3QgRnVuYyYpOwotICAgIHZvaWQgY2hlY2tMaXZlbmVzc0FuZFZpc2l0Q2hpbGRyZW4oU2xvdFZp
c2l0b3ImKTsKKyAgICB2b2lkIGNoZWNrTGl2ZW5lc3NBbmRWaXNpdENoaWxkcmVuKEFic3RyYWN0
U2xvdFZpc2l0b3ImKTsKICAgICBib29sIGlzS25vd25Ub0JlTGl2ZUR1cmluZ0dDKCk7CiAgICAg
dm9pZCBmaW5hbGl6ZUluR0MoKTsKICAgICB2b2lkIGNhbmNlbCgpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlcG9pbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZXBvaW50LmNwcAkocmV2aXNpb24gMjcxMzY4KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlcG9pbnQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC04Myw3ICs4Myw3IEBAIHZvaWQgU2FmZXBvaW50OjpiZWdpbigpCiAgICAgfQogfQogCi12
b2lkIFNhZmVwb2ludDo6Y2hlY2tMaXZlbmVzc0FuZFZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3Im
IHZpc2l0b3IpCit2b2lkIFNhZmVwb2ludDo6Y2hlY2tMaXZlbmVzc0FuZFZpc2l0Q2hpbGRyZW4o
QWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBSRUxFQVNFX0FTU0VSVChtX2Rp
ZENhbGxCZWdpbik7CiAKQEAgLTk0LDcgKzk0LDcgQEAgdm9pZCBTYWZlcG9pbnQ6OmNoZWNrTGl2
ZW5lc3NBbmRWaXNpdENoaQogICAgICAgICByZXR1cm47CiAgICAgCiAgICAgZm9yICh1bnNpZ25l
ZCBpID0gbV9zY2FubmFibGVzLnNpemUoKTsgaS0tOykKLSAgICAgICAgbV9zY2FubmFibGVzW2ld
LT52aXNpdENoaWxkcmVuKHZpc2l0b3IpOworICAgICAgICBtX3NjYW5uYWJsZXNbaV0tPnZpc2l0
Q2hpbGRyZW4xKHZpc2l0b3IpOwogfQogCiBib29sIFNhZmVwb2ludDo6aXNLbm93blRvQmVMaXZl
RHVyaW5nR0MoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlcG9pbnQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVwb2ludC5o
CShyZXZpc2lvbiAyNzEzNjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVw
b2ludC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw3IEBACiAKIG5hbWVzcGFjZSBKU0Mg
ewogCi1jbGFzcyBTbG90VmlzaXRvcjsKK2NsYXNzIEFic3RyYWN0U2xvdFZpc2l0b3I7CiBjbGFz
cyBWTTsKIAogbmFtZXNwYWNlIERGRyB7CkBAIC02Niw4ICs2Niw4IEBAIHB1YmxpYzoKICAgICB2
b2lkIGFkZChTY2FubmFibGUqKTsKICAgICAKICAgICB2b2lkIGJlZ2luKCk7Ci0gICAgCi0gICAg
dm9pZCBjaGVja0xpdmVuZXNzQW5kVmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYpOworCisgICAg
dm9pZCBjaGVja0xpdmVuZXNzQW5kVmlzaXRDaGlsZHJlbihBYnN0cmFjdFNsb3RWaXNpdG9yJik7
CiAgICAgYm9vbCBpc0tub3duVG9CZUxpdmVEdXJpbmdHQygpOwogICAgIHZvaWQgY2FuY2VsKCk7
CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NjYW5uYWJsZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2Nhbm5hYmxlLmgJKHJl
dmlzaW9uIDI3MTM2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2Nhbm5hYmxl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAK
LWNsYXNzIFNsb3RWaXNpdG9yOworY2xhc3MgQWJzdHJhY3RTbG90VmlzaXRvcjsKIAogbmFtZXNw
YWNlIERGRyB7CiAKQEAgLTM4LDcgKzM4LDcgQEAgcHVibGljOgogICAgIFNjYW5uYWJsZSgpIHsg
fQogICAgIHZpcnR1YWwgflNjYW5uYWJsZSgpIHsgfQogICAgIAotICAgIHZpcnR1YWwgdm9pZCB2
aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdENo
aWxkcmVuMShBYnN0cmFjdFNsb3RWaXNpdG9yJikgPSAwOwogfTsKIAogfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5j
cHAJKHJldmlzaW9uIDI3MTM2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV29y
a2xpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNzIsNyArMzcyLDcgQEAgdm9pZCBXb3JrbGlz
dDo6cmVzdW1lQWxsVGhyZWFkcygpCiAgICAgbV9zdXNwZW5zaW9uTG9jay51bmxvY2soKTsKIH0K
IAotdm9pZCBXb3JrbGlzdDo6dmlzaXRXZWFrUmVmZXJlbmNlcyhTbG90VmlzaXRvciYgdmlzaXRv
cikKK3ZvaWQgV29ya2xpc3Q6OnZpc2l0V2Vha1JlZmVyZW5jZXMoQWJzdHJhY3RTbG90VmlzaXRv
ciYgdmlzaXRvcikKIHsKICAgICBWTSogdm0gPSAmdmlzaXRvci5oZWFwKCktPnZtKCk7CiAgICAg
ewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3QuaAkocmV2aXNpb24g
MjcxMzY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNSw3ICszNSw3IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1jbGFzcyBT
bG90VmlzaXRvcjsKK2NsYXNzIEFic3RyYWN0U2xvdFZpc2l0b3I7CiAKIG5hbWVzcGFjZSBERkcg
ewogCkBAIC03Myw3ICs3Myw3IEBAIHB1YmxpYzoKICAgICBib29sIGlzQWN0aXZlRm9yVk0oVk0m
KSBjb25zdDsKICAgICAKICAgICAvLyBPbmx5IGNhbGxlZCBvbiB0aGUgbWFpbiB0aHJlYWQgYWZ0
ZXIgc3VzcGVuZGluZyBhbGwgdGhyZWFkcy4KLSAgICB2b2lkIHZpc2l0V2Vha1JlZmVyZW5jZXMo
U2xvdFZpc2l0b3ImKTsKKyAgICB2b2lkIHZpc2l0V2Vha1JlZmVyZW5jZXMoQWJzdHJhY3RTbG90
VmlzaXRvciYpOwogICAgIHZvaWQgcmVtb3ZlRGVhZFBsYW5zKFZNJik7CiAgICAgCiAgICAgdm9p
ZCByZW1vdmVOb25Db21waWxpbmdQbGFuc0ZvclZNKFZNJik7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9BYnN0cmFjdFNsb3RWaXNpdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9BYnN0cmFjdFNsb3RWaXNpdG9yLmNwcAkobm9uZXhpc3Rl
bnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9BYnN0cmFjdFNsb3RWaXNpdG9yLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkFic3RyYWN0U2xvdFZpc2l0b3IuaCIKKworI2luY2x1ZGUg
IkFic3RyYWN0U2xvdFZpc2l0b3JJbmxpbmVzLmgiCisjaW5jbHVkZSAiTWFya2luZ0NvbnN0cmFp
bnRTb2x2ZXIuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3ZvaWQgQWJzdHJhY3RTbG90VmlzaXRv
cjo6YWRkUGFyYWxsZWxDb25zdHJhaW50VGFzayhSZWZQdHI8U2hhcmVkVGFzazx2b2lkKEFic3Ry
YWN0U2xvdFZpc2l0b3ImKT4+IHRhc2spCit7CisgICAgUkVMRUFTRV9BU1NFUlQobV9jdXJyZW50
U29sdmVyKTsKKyAgICBSRUxFQVNFX0FTU0VSVChtX2N1cnJlbnRDb25zdHJhaW50KTsKKyAgICBS
RUxFQVNFX0FTU0VSVCh0YXNrKTsKKyAgICAKKyAgICBtX2N1cnJlbnRTb2x2ZXItPmFkZFBhcmFs
bGVsVGFzayh0YXNrLCAqbV9jdXJyZW50Q29uc3RyYWludCk7Cit9CisKK30gLy8gbmFtZXNwYWNl
IEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQWJzdHJhY3RTbG90VmlzaXRv
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Fic3RyYWN0U2xv
dFZpc2l0b3IuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9B
YnN0cmFjdFNsb3RWaXNpdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMDkgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UK
KworI2luY2x1ZGUgIkpTQ0pTVmFsdWUuaCIKKyNpbmNsdWRlICJNYXJrU3RhY2suaCIKKyNpbmNs
dWRlICJWaXNpdFJhY2VLZXkuaCIgLy8gbWxhbQorI2luY2x1ZGUgPHd0Zi9TaGFyZWRUYXNrLmg+
CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgSlNDIHsKKworY2xh
c3MgQ29uc2VydmF0aXZlUm9vdHM7CitjbGFzcyBEZWJ1Z1Nsb3RWaXNpdG9yOworY2xhc3MgSGVh
cDsKK2NsYXNzIEhlYXBBbmFseXplcjsKK2NsYXNzIE1hcmtpbmdDb25zdHJhaW50OworY2xhc3Mg
TWFya2luZ0NvbnN0cmFpbnRTb2x2ZXI7CitjbGFzcyBTbG90VmlzaXRvcjsKK2NsYXNzIFZNOwor
dGVtcGxhdGU8dHlwZW5hbWUgVD4gY2xhc3MgV2VhazsKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5
cGVuYW1lIFRyYWl0cz4gY2xhc3MgV3JpdGVCYXJyaWVyQmFzZTsKKwordHlwZWRlZiB1aW50MzJf
dCBIZWFwVmVyc2lvbjsKKworY2xhc3MgQWJzdHJhY3RTbG90VmlzaXRvciB7CisgICAgV1RGX01B
S0VfTk9OQ09QWUFCTEUoQWJzdHJhY3RTbG90VmlzaXRvcik7CisgICAgV1RGX01BS0VfRkFTVF9B
TExPQ0FURUQ7CitwdWJsaWM6CisvLyAgICBlbnVtIGNsYXNzIFR5cGUgeworLy8gICAgICAgIFNs
b3RWaXNpdG9yLAorLy8gICAgICAgIERlYnVnU2xvdFZpc2l0b3IKKy8vICAgIH07CisKKyAgICBl
bnVtIFJvb3RNYXJrUmVhc29uIHsKKyAgICAgICAgTm9uZSwKKyAgICAgICAgQ29uc2VydmF0aXZl
U2NhbiwKKyAgICAgICAgU3Ryb25nUmVmZXJlbmNlcywKKyAgICAgICAgUHJvdGVjdGVkVmFsdWVz
LAorICAgICAgICBNYXJrTGlzdFNldCwKKyAgICAgICAgVk1FeGNlcHRpb25zLAorICAgICAgICBT
dHJvbmdIYW5kbGVzLAorICAgICAgICBEZWJ1Z2dlciwKKyAgICAgICAgSklUU3R1YlJvdXRpbmVz
LAorICAgICAgICBXZWFrU2V0cywKKyAgICAgICAgT3V0cHV0LAorICAgICAgICBERkdXb3JrTGlz
dHMsCisgICAgICAgIENvZGVCbG9ja3MsCisgICAgICAgIERPTUdDT3V0cHV0LAorICAgIH07CisK
KyAgICBjbGFzcyBEZWZhdWx0TWFya2luZ1Zpb2xhdGlvbkFzc2VydGlvblNjb3BlIHsKKyAgICBw
dWJsaWM6CisgICAgICAgIERlZmF1bHRNYXJraW5nVmlvbGF0aW9uQXNzZXJ0aW9uU2NvcGUoQWJz
dHJhY3RTbG90VmlzaXRvciYpIHsgfQorICAgIH07CisKKyAgICB2aXJ0dWFsIH5BYnN0cmFjdFNs
b3RWaXNpdG9yKCkgPSBkZWZhdWx0OworCisvLyAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaXNEZWJ1
Z1Nsb3RWaXNpdG9yKCkgY29uc3QgeyByZXR1cm4gbV92aXNpdG9yVHlwZSA9PSBUeXBlOjpEZWJ1
Z1Nsb3RWaXNpdG9yOyB9CisvLyAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaXNTbG90VmlzaXRvcigp
IGNvbnN0IHsgcmV0dXJuIG1fdmlzaXRvclR5cGUgPT0gVHlwZTo6U2xvdFZpc2l0b3I7IH0KKwor
Ly8gICAgQUxXQVlTX0lOTElORSBEZWJ1Z1Nsb3RWaXNpdG9yJiBhc0RlYnVnU2xvdFZpc2l0b3Io
KSB7IHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxEZWJ1Z1Nsb3RWaXNpdG9yKj4odGhpcyk7IH0K
Ky8vICAgIEFMV0FZU19JTkxJTkUgY29uc3QgRGVidWdTbG90VmlzaXRvciYgYXNEZWJ1Z1Nsb3RW
aXNpdG9yKCkgY29uc3QgeyByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgRGVidWdTbG90
VmlzaXRvcio+KHRoaXMpOyB9CisKKy8vICAgIEFMV0FZU19JTkxJTkUgU2xvdFZpc2l0b3ImIGFz
U2xvdFZpc2l0b3IoKSB7IHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxTbG90VmlzaXRvcio+KHRo
aXMpOyB9CisvLyAgICBBTFdBWVNfSU5MSU5FIGNvbnN0IFNsb3RWaXNpdG9yJiBhc1Nsb3RWaXNp
dG9yKCkgY29uc3QgeyByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgU2xvdFZpc2l0b3Iq
Pih0aGlzKTsgfQorCisgICAgTWFya1N0YWNrQXJyYXkmIGNvbGxlY3Rvck1hcmtTdGFjaygpIHsg
cmV0dXJuIG1fY29sbGVjdG9yU3RhY2s7IH0KKyAgICBNYXJrU3RhY2tBcnJheSYgbXV0YXRvck1h
cmtTdGFjaygpIHsgcmV0dXJuIG1fbXV0YXRvclN0YWNrOyB9CisgICAgY29uc3QgTWFya1N0YWNr
QXJyYXkmIGNvbGxlY3Rvck1hcmtTdGFjaygpIGNvbnN0IHsgcmV0dXJuIG1fY29sbGVjdG9yU3Rh
Y2s7IH0KKyAgICBjb25zdCBNYXJrU3RhY2tBcnJheSYgbXV0YXRvck1hcmtTdGFjaygpIGNvbnN0
IHsgcmV0dXJuIG1fbXV0YXRvclN0YWNrOyB9CisKKyAgICBWTSYgdm0oKTsKKyAgICBjb25zdCBW
TSYgdm0oKSBjb25zdDsKKyAgICBIZWFwKiBoZWFwKCkgY29uc3Q7CisKKyAgICB2aXJ0dWFsIHZv
aWQgYXBwZW5kKGNvbnN0IENvbnNlcnZhdGl2ZVJvb3RzJikgPSAwOworCisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgVCwgdHlwZW5hbWUgVHJhaXRzPiB2b2lkIGFwcGVuZChjb25zdCBXcml0ZUJhcnJp
ZXJCYXNlPFQsIFRyYWl0cz4mKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBU
cmFpdHM+IHZvaWQgYXBwZW5kSGlkZGVuKGNvbnN0IFdyaXRlQmFycmllckJhc2U8VCwgVHJhaXRz
PiYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEl0ZXJhdG9yPiB2b2lkIGFwcGVuZChJdGVyYXRv
ciBiZWdpbiAsIEl0ZXJhdG9yIGVuZCk7CisgICAgdm9pZCBhcHBlbmRWYWx1ZXMoY29uc3QgV3Jp
dGVCYXJyaWVyQmFzZTxVbmtub3duLCBSYXdWYWx1ZVRyYWl0czxVbmtub3duPj4qLCBzaXplX3Qg
Y291bnQpOworICAgIHZvaWQgYXBwZW5kVmFsdWVzSGlkZGVuKGNvbnN0IFdyaXRlQmFycmllckJh
c2U8VW5rbm93biwgUmF3VmFsdWVUcmFpdHM8VW5rbm93bj4+Kiwgc2l6ZV90IGNvdW50KTsKKwor
ICAgIHZpcnR1YWwgdm9pZCBhcHBlbmRVbmJhcnJpZXJlZChKU1ZhbHVlKSA9IDA7CisgICAgdmly
dHVhbCB2b2lkIGFwcGVuZFVuYmFycmllcmVkKEpTQ2VsbCopID0gMDsKKworICAgIHZpcnR1YWwg
Ym9vbCBhZGRPcGFxdWVSb290KHZvaWQqKSA9IDA7IC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgcm9v
dCB3YXMgbmV3LgorCisgICAgdmlydHVhbCBib29sIGlzRmlyc3RWaXNpdCgpIGNvbnN0ID0gMDsg
Ly8gbWxhbSBGSVhNRQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICB2b2lkIGFwcGVu
ZChjb25zdCBXZWFrPFQ+JiB3ZWFrKTsKKworICAgIHZpcnR1YWwgdm9pZCBhcHBlbmRIaWRkZW5V
bmJhcnJpZXJlZChKU1ZhbHVlKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGFwcGVuZEhpZGRlblVu
YmFycmllcmVkKEpTQ2VsbCopID0gMDsKKworICAgIHZpcnR1YWwgYm9vbCBjb250YWluc09wYXF1
ZVJvb3Qodm9pZCopIGNvbnN0ID0gMDsKKworICAgIHNpemVfdCBieXRlc1Zpc2l0ZWQoKSBjb25z
dCB7IHJldHVybiBtX2J5dGVzVmlzaXRlZDsgfQorICAgIHNpemVfdCB2aXNpdENvdW50KCkgY29u
c3QgeyByZXR1cm4gbV92aXNpdENvdW50OyB9CisKKyAgICB2b2lkIGFkZFRvVmlzaXRDb3VudChz
aXplX3QgdmFsdWUpIHsgbV92aXNpdENvdW50ICs9IHZhbHVlOyB9CisKKyAgICBKU19FWFBPUlRf
UFJJVkFURSB2b2lkIGFkZFBhcmFsbGVsQ29uc3RyYWludFRhc2soUmVmUHRyPFNoYXJlZFRhc2s8
dm9pZChBYnN0cmFjdFNsb3RWaXNpdG9yJik+Pik7CisKKyAgICB2aXJ0dWFsIHZvaWQgbWFya0F1
eGlsaWFyeShjb25zdCB2b2lkKiBiYXNlKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgcmVwb3J0
RXh0cmFNZW1vcnlWaXNpdGVkKHNpemVfdCkgPSAwOworI2lmIEVOQUJMRShSRVNPVVJDRV9VU0FH
RSkKKyAgICB2aXJ0dWFsIHZvaWQgcmVwb3J0RXh0ZXJuYWxNZW1vcnlWaXNpdGVkKHNpemVfdCkg
PSAwOworI2VuZGlmCisKKyAgICB2aXJ0dWFsIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0
ID0gMDsKKworICAgIGJvb2wgaXNBbmFseXppbmdIZWFwKCkgY29uc3QgeyByZXR1cm4gISFtX2hl
YXBBbmFseXplcjsgfQorICAgIEhlYXBBbmFseXplciogaGVhcEFuYWx5emVyKCkgY29uc3QgeyBy
ZXR1cm4gbV9oZWFwQW5hbHl6ZXI7IH0KKworICAgIFJvb3RNYXJrUmVhc29uIHJvb3RNYXJrUmVh
c29uKCkgY29uc3QgeyByZXR1cm4gbV9yb290TWFya1JlYXNvbjsgfQorICAgIHZvaWQgc2V0Um9v
dE1hcmtSZWFzb24oUm9vdE1hcmtSZWFzb24gcmVhc29uKSB7IG1fcm9vdE1hcmtSZWFzb24gPSBy
ZWFzb247IH0KKworICAgIEhlYXBWZXJzaW9uIG1hcmtpbmdWZXJzaW9uKCkgY29uc3QgeyByZXR1
cm4gbV9tYXJraW5nVmVyc2lvbjsgfQorCisgICAgdmlydHVhbCBib29sIG11dGF0b3JJc1N0b3Bw
ZWQoKSBjb25zdCA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgZGlkUmFjZShjb25zdCBWaXNpdFJh
Y2VLZXkmKSA9IDA7CisgICAgdm9pZCBkaWRSYWNlKEpTQ2VsbCogY2VsbCwgY29uc3QgY2hhciog
cmVhc29uKSB7IGRpZFJhY2UoVmlzaXRSYWNlS2V5KGNlbGwsIHJlYXNvbikpOyB9CisKKyAgICB2
aXJ0dWFsIHZvaWQgdmlzaXRBc0NvbnN0cmFpbnQoY29uc3QgSlNDZWxsKikgPSAwOworCisgICAg
Ly8gSW5saW5lIGZ1bmN0aW9ucyBmb3IgZGlzYXBhdGNoaW5nIHRvIFNsb3RWaXNpdG9yIC8gRGVi
dWdTbG90VmlzaXRvciB2ZXJzaW9ucy4KKworLy8gICAgdm9pZCBhcHBlbmQoY29uc3QgQ29uc2Vy
dmF0aXZlUm9vdHMmKTsKKy8vICAgIHZvaWQgYXBwZW5kVW5iYXJyaWVyZWQoSlNWYWx1ZSk7Cisv
LyAgICB2b2lkIGFwcGVuZFVuYmFycmllcmVkKEpTQ2VsbCopOworLy8gICAgdm9pZCBhcHBlbmRI
aWRkZW5VbmJhcnJpZXJlZChKU0NlbGwqKTsKKy8vICAgIGJvb2wgY29udGFpbnNPcGFxdWVSb290
KHZvaWQqKSBjb25zdDsKKy8vICAgIHZvaWQgdmlzaXRBc0NvbnN0cmFpbnQoY29uc3QgSlNDZWxs
Kik7CisKK3Byb3RlY3RlZDoKKyAgICBpbmxpbmUgQWJzdHJhY3RTbG90VmlzaXRvcihIZWFwJiwg
Q1N0cmluZyBjb2RlTmFtZSk7CisKKyAgICB2b2lkIHJlc2V0KCk7CisKKyAgICBNYXJrU3RhY2tB
cnJheSBtX2NvbGxlY3RvclN0YWNrOworICAgIE1hcmtTdGFja0FycmF5IG1fbXV0YXRvclN0YWNr
OworCisgICAgc2l6ZV90IG1fYnl0ZXNWaXNpdGVkIHsgMCB9OworICAgIHNpemVfdCBtX3Zpc2l0
Q291bnQgeyAwIH07CisKKyAgICBIZWFwVmVyc2lvbiBtX21hcmtpbmdWZXJzaW9uOyAvLyBtbGFt
IEZJWE1FCisgICAgSGVhcCYgbV9oZWFwOworCisgICAgSGVhcEFuYWx5emVyKiBtX2hlYXBBbmFs
eXplciB7IG51bGxwdHIgfTsKKyAgICBSb290TWFya1JlYXNvbiBtX3Jvb3RNYXJrUmVhc29uIHsg
Um9vdE1hcmtSZWFzb246Ok5vbmUgfTsKKworICAgIENTdHJpbmcgbV9jb2RlTmFtZTsKKworICAg
IE1hcmtpbmdDb25zdHJhaW50KiBtX2N1cnJlbnRDb25zdHJhaW50IHsgbnVsbHB0ciB9OworICAg
IE1hcmtpbmdDb25zdHJhaW50U29sdmVyKiBtX2N1cnJlbnRTb2x2ZXIgeyBudWxscHRyIH07CisK
Ky8vICAgIFR5cGUgbV92aXNpdG9yVHlwZTsKKworICAgIGZyaWVuZCBjbGFzcyBNYXJraW5nQ29u
c3RyYWludFNvbHZlcjsKK307CisKK2NsYXNzIFNldFJvb3RNYXJrUmVhc29uU2NvcGUgeworcHVi
bGljOgorICAgIFNldFJvb3RNYXJrUmVhc29uU2NvcGUoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlz
aXRvciwgQWJzdHJhY3RTbG90VmlzaXRvcjo6Um9vdE1hcmtSZWFzb24gcmVhc29uKQorICAgICAg
ICA6IG1fdmlzaXRvcih2aXNpdG9yKQorICAgICAgICAsIG1fcHJldmlvdXNSZWFzb24odmlzaXRv
ci5yb290TWFya1JlYXNvbigpKQorICAgIHsKKyAgICAgICAgbV92aXNpdG9yLnNldFJvb3RNYXJr
UmVhc29uKHJlYXNvbik7CisgICAgfQorCisgICAgflNldFJvb3RNYXJrUmVhc29uU2NvcGUoKQor
ICAgIHsKKyAgICAgICAgbV92aXNpdG9yLnNldFJvb3RNYXJrUmVhc29uKG1fcHJldmlvdXNSZWFz
b24pOworICAgIH0KKworcHJpdmF0ZToKKyAgICBBYnN0cmFjdFNsb3RWaXNpdG9yJiBtX3Zpc2l0
b3I7CisgICAgQWJzdHJhY3RTbG90VmlzaXRvcjo6Um9vdE1hcmtSZWFzb24gbV9wcmV2aW91c1Jl
YXNvbjsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvQWJzdHJhY3RTbG90VmlzaXRvcklubGluZXMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9BYnN0cmFjdFNsb3RWaXNpdG9ySW5saW5lcy5oCShub25l
eGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Fic3RyYWN0U2xvdFZpc2l0
b3JJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMDQgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1
ZGUgIkFic3RyYWN0U2xvdFZpc2l0b3IuaCIKKy8vI2luY2x1ZGUgIkRlYnVnU2xvdFZpc2l0b3Iu
aCIKKyNpbmNsdWRlICJIZWFwLmgiCisvLyNpbmNsdWRlICJTbG90VmlzaXRvci5oIgorI2luY2x1
ZGUgIldlYWtJbmxpbmVzLmgiCisjaW5jbHVkZSAiV3JpdGVCYXJyaWVyLmgiCisKK25hbWVzcGFj
ZSBKU0MgeworCisvL2lubGluZSBBYnN0cmFjdFNsb3RWaXNpdG9yOjpBYnN0cmFjdFNsb3RWaXNp
dG9yKFR5cGUgdHlwZSwgSGVhcCYgaGVhcCwgQ1N0cmluZyBjb2RlTmFtZSkKK2lubGluZSBBYnN0
cmFjdFNsb3RWaXNpdG9yOjpBYnN0cmFjdFNsb3RWaXNpdG9yKEhlYXAmIGhlYXAsIENTdHJpbmcg
Y29kZU5hbWUpCisgICAgOiBtX21hcmtpbmdWZXJzaW9uKE1hcmtlZFNwYWNlOjppbml0aWFsVmVy
c2lvbikKKyAgICAsIG1faGVhcChoZWFwKQorICAgICwgbV9jb2RlTmFtZShjb2RlTmFtZSkKKy8v
ICAgICwgbV92aXNpdG9yVHlwZSh0eXBlKQoreworfQorCitpbmxpbmUgSGVhcCogQWJzdHJhY3RT
bG90VmlzaXRvcjo6aGVhcCgpIGNvbnN0Cit7CisgICAgcmV0dXJuICZtX2hlYXA7Cit9CisKK2lu
bGluZSBWTSYgQWJzdHJhY3RTbG90VmlzaXRvcjo6dm0oKQoreworICAgIHJldHVybiBtX2hlYXAu
dm0oKTsKK30KKworaW5saW5lIGNvbnN0IFZNJiBBYnN0cmFjdFNsb3RWaXNpdG9yOjp2bSgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIG1faGVhcC52bSgpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
PgorQUxXQVlTX0lOTElORSB2b2lkIEFic3RyYWN0U2xvdFZpc2l0b3I6OmFwcGVuZChjb25zdCBX
ZWFrPFQ+JiB3ZWFrKQoreworICAgIGFwcGVuZFVuYmFycmllcmVkKHdlYWsuZ2V0KCkpOworfQor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBUcmFpdHM+CitBTFdBWVNfSU5MSU5FIHZv
aWQgQWJzdHJhY3RTbG90VmlzaXRvcjo6YXBwZW5kKGNvbnN0IFdyaXRlQmFycmllckJhc2U8VCwg
VHJhaXRzPiYgc2xvdCkKK3sKKyAgICBhcHBlbmRVbmJhcnJpZXJlZChzbG90LmdldCgpKTsKK30K
KwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVHJhaXRzPgorQUxXQVlTX0lOTElORSB2
b2lkIEFic3RyYWN0U2xvdFZpc2l0b3I6OmFwcGVuZEhpZGRlbihjb25zdCBXcml0ZUJhcnJpZXJC
YXNlPFQsIFRyYWl0cz4mIHNsb3QpCit7CisgICAgYXBwZW5kSGlkZGVuVW5iYXJyaWVyZWQoc2xv
dC5nZXQoKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEl0ZXJhdG9yPgorQUxXQVlTX0lOTElO
RSB2b2lkIEFic3RyYWN0U2xvdFZpc2l0b3I6OmFwcGVuZChJdGVyYXRvciBiZWdpbiwgSXRlcmF0
b3IgZW5kKQoreworICAgIGZvciAoYXV0byBpdCA9IGJlZ2luOyBpdCAhPSBlbmQ7ICsraXQpCisg
ICAgICAgIGFwcGVuZCgqaXQpOworfQorCitBTFdBWVNfSU5MSU5FIHZvaWQgQWJzdHJhY3RTbG90
VmlzaXRvcjo6YXBwZW5kVmFsdWVzKGNvbnN0IFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4qIGJh
cnJpZXJzLCBzaXplX3QgY291bnQpCit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3Vu
dDsgKytpKQorICAgICAgICBhcHBlbmQoYmFycmllcnNbaV0pOworfQorCitBTFdBWVNfSU5MSU5F
IHZvaWQgQWJzdHJhY3RTbG90VmlzaXRvcjo6YXBwZW5kVmFsdWVzSGlkZGVuKGNvbnN0IFdyaXRl
QmFycmllckJhc2U8VW5rbm93bj4qIGJhcnJpZXJzLCBzaXplX3QgY291bnQpCit7CisgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKQorICAgICAgICBhcHBlbmRIaWRkZW4oYmFy
cmllcnNbaV0pOworfQorCitBTFdBWVNfSU5MSU5FIHZvaWQgQWJzdHJhY3RTbG90VmlzaXRvcjo6
cmVzZXQoKQoreworICAgIG1fYnl0ZXNWaXNpdGVkID0gMDsKKyAgICBtX3Zpc2l0Q291bnQgPSAw
OworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0RlYnVnU2xvdFZpc2l0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9EZWJ1Z1Nsb3RWaXNpdG9yLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvRGVidWdTbG90VmlzaXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMTEwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJBYnN0cmFjdFNsb3RWaXNpdG9yLmgiCisjaW5jbHVk
ZSAiSlNDSlNWYWx1ZS5oIgorI2luY2x1ZGUgIlZpc2l0UmFjZUtleS5oIgorI2luY2x1ZGUgIldl
YWsuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIENvbnNlcnZhdGl2ZVJvb3RzOworY2xh
c3MgSGVhcDsKK2NsYXNzIEpTQ2VsbDsKKworLy8gRGVidWdTbG90VmlzaXRvcidzIG1ldGhvZHMg
c2hvdWxkIG1hdGNoIFNsb3RWaXNpdG9yLgorLy8gU2VlIFNsb3RWaXNpdG9yLmggZm9yIGRvY3Vt
ZW50YXRpb24gb24gd2hhdCBlYWNoIG9mIHRoZSBtZXRob2RzIGRvZXMuCisKK2NsYXNzIERlYnVn
U2xvdFZpc2l0b3IgOiBwdWJsaWMgQWJzdHJhY3RTbG90VmlzaXRvciB7CisgICAgV1RGX01BS0Vf
Tk9OQ09QWUFCTEUoRGVidWdTbG90VmlzaXRvcik7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FU
RUQ7CisgICAgdXNpbmcgQmFzZSA9IEFic3RyYWN0U2xvdFZpc2l0b3I7CitwdWJsaWM6CisvLyAg
ICBjbGFzcyBEZWZhdWx0TWFya2luZ1Zpb2xhdGlvbkFzc2VydGlvblNjb3BlIHsKKy8vICAgIHB1
YmxpYzoKKy8vICAgICAgICBEZWZhdWx0TWFya2luZ1Zpb2xhdGlvbkFzc2VydGlvblNjb3BlKERl
YnVnU2xvdFZpc2l0b3ImKSB7IH0KKy8vICAgIH07CisKKyAgICBpbmxpbmUgRGVidWdTbG90Vmlz
aXRvcihIZWFwJiwgQ1N0cmluZyBjb2RlTmFtZSk7CisgICAgdmlydHVhbCB+RGVidWdTbG90Vmlz
aXRvcigpID0gZGVmYXVsdDsKKworICAgIGlubGluZSBWTSYgdm0oKTsKKyAgICBpbmxpbmUgY29u
c3QgVk0mIHZtKCkgY29uc3Q7CisgICAgaW5saW5lIEhlYXAqIGhlYXAoKSBjb25zdDsKKworICAg
IHZpcnR1YWwgdm9pZCBhcHBlbmQoY29uc3QgQ29uc2VydmF0aXZlUm9vdHMmKSBvdmVycmlkZTsK
KworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFRyYWl0cz4gdm9pZCBhcHBlbmQo
Y29uc3QgV3JpdGVCYXJyaWVyQmFzZTxULCBUcmFpdHM+Jik7CisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgVCwgdHlwZW5hbWUgVHJhaXRzPiB2b2lkIGFwcGVuZEhpZGRlbihjb25zdCBXcml0ZUJhcnJp
ZXJCYXNlPFQsIFRyYWl0cz4mKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJdGVyYXRvcj4gdm9p
ZCBhcHBlbmQoSXRlcmF0b3IgYmVnaW4gLCBJdGVyYXRvciBlbmQpOworICAgIHZpcnR1YWwgdm9p
ZCBhcHBlbmRWYWx1ZXMoY29uc3QgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duLCBSYXdWYWx1ZVRy
YWl0czxVbmtub3duPj4qLCBzaXplX3QgY291bnQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgYXBw
ZW5kVmFsdWVzSGlkZGVuKGNvbnN0IFdyaXRlQmFycmllckJhc2U8VW5rbm93biwgUmF3VmFsdWVU
cmFpdHM8VW5rbm93bj4+Kiwgc2l6ZV90IGNvdW50KSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQg
YXBwZW5kVW5iYXJyaWVyZWQoSlNWYWx1ZSkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGFw
cGVuZFVuYmFycmllcmVkKEpTVmFsdWUqLCBzaXplX3QpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQg
YXBwZW5kVW5iYXJyaWVyZWQoSlNDZWxsKikgb3ZlcnJpZGU7CisKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBUPgorICAgIHZvaWQgYXBwZW5kKGNvbnN0IFdlYWs8VD4mIHdlYWspOworCisgICAgdm9p
ZCBhcHBlbmRIaWRkZW5VbmJhcnJpZXJlZChKU1ZhbHVlKSBvdmVycmlkZTsKKyAgICB2b2lkIGFw
cGVuZEhpZGRlblVuYmFycmllcmVkKEpTQ2VsbCopIG92ZXJyaWRlOworCisgICAgYm9vbCBhZGRP
cGFxdWVSb290KHZvaWQqKSBvdmVycmlkZTsgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSByb290IHdh
cyBuZXcuCisgICAgYm9vbCBjb250YWluc09wYXF1ZVJvb3Qodm9pZCopIGNvbnN0IG92ZXJyaWRl
OworCisgICAgYm9vbCBpc0ZpcnN0VmlzaXQoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2lzRmly
c3RWaXNpdDsgfSAvLyBtbGFtIEZJWE1FCisKKyAgICB2b2lkIG1hcmtBdXhpbGlhcnkoY29uc3Qg
dm9pZCogYmFzZSkgb3ZlcnJpZGU7CisKKyAgICB2b2lkIHJlcG9ydEV4dHJhTWVtb3J5VmlzaXRl
ZChzaXplX3QpIG92ZXJyaWRlOworI2lmIEVOQUJMRShSRVNPVVJDRV9VU0FHRSkKKyAgICB2b2lk
IHJlcG9ydEV4dGVybmFsTWVtb3J5VmlzaXRlZChzaXplX3QpIG92ZXJyaWRlOworI2VuZGlmCisK
KyAgICBIZWFwVmVyc2lvbiBtYXJraW5nVmVyc2lvbigpIGNvbnN0IHsgcmV0dXJuIG1fbWFya2lu
Z1ZlcnNpb247IH0KKworICAgIGJvb2wgbXV0YXRvcklzU3RvcHBlZCgpIGNvbnN0IG92ZXJyaWRl
OworCisvLyAgICB2aXJ0dWFsIHZvaWQgZGlkUmFjZShjb25zdCBWaXNpdFJhY2VLZXkmKSA9IDA7
CisvLyAgICB2b2lkIGRpZFJhY2UoSlNDZWxsKiBjZWxsLCBjb25zdCBjaGFyKiByZWFzb24pIHsg
ZGlkUmFjZShWaXNpdFJhY2VLZXkoY2VsbCwgcmVhc29uKSk7IH0KKyAgICB2b2lkIGRpZFJhY2Uo
Y29uc3QgVmlzaXRSYWNlS2V5Jikgb3ZlcnJpZGU7CisKK3Byb3RlY3RlZDoKKyAgICBzaXplX3Qg
bV9ub25DZWxsVmlzaXRDb3VudCB7IDAgfTsgLy8gVXNlZCBmb3IgaW5jcmVtZW50YWwgZHJhaW5p
bmcsIGlnbm9yZWQgb3RoZXJ3aXNlLgorICAgIENoZWNrZWRTaXplIG1fZXh0cmFNZW1vcnlTaXpl
IHsgMCB9OworCisgICAgSGVhcFZlcnNpb24gbV9tYXJraW5nVmVyc2lvbjsgLy8gbWxhbSBGSVhN
RQorCisvLyAgICBIZWFwJiBtX2hlYXA7CisgICAgQ1N0cmluZyBtX2NvZGVOYW1lOworCisgICAg
Ym9vbCBtX2lzRmlyc3RWaXNpdCB7IGZhbHNlIH07CisvLyAgICBib29sIG1fbXV0YXRvcklzU3Rv
cHBlZCB7IGZhbHNlIH07IC8vIG1sYW0gRklYTUUKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvRGVidWdTbG90VmlzaXRvcklubGluZXMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9EZWJ1Z1Nsb3RWaXNp
dG9ySW5saW5lcy5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0RlYnVnU2xvdFZpc2l0b3JJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4OSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEg
b25jZQorCisjaW5jbHVkZSAiQWJzdHJhY3RTbG90VmlzaXRvcklubGluZXMuaCIKKyNpbmNsdWRl
ICJEZWJ1Z1Nsb3RWaXNpdG9yLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitpbmxpbmUgRGVidWdT
bG90VmlzaXRvcjo6RGVidWdTbG90VmlzaXRvcihIZWFwJiBoZWFwLCBDU3RyaW5nIGNvZGVOYW1l
KQorLy8gICAgOiBCYXNlKFR5cGU6OkRlYnVnU2xvdFZpc2l0b3IsIGhlYXAsIGNvZGVOYW1lKQor
ICAgIDogQmFzZShoZWFwLCBjb2RlTmFtZSkKK3sKK30KKworaW5saW5lIEhlYXAqIERlYnVnU2xv
dFZpc2l0b3I6OmhlYXAoKSBjb25zdAoreworICAgIHJldHVybiAmbV9oZWFwOworfQorCitpbmxp
bmUgVk0mIERlYnVnU2xvdFZpc2l0b3I6OnZtKCkKK3sKKyAgICByZXR1cm4gbV9oZWFwLnZtKCk7
Cit9CisKK2lubGluZSBjb25zdCBWTSYgRGVidWdTbG90VmlzaXRvcjo6dm0oKSBjb25zdAorewor
ICAgIHJldHVybiBtX2hlYXAudm0oKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5h
bWUgVHJhaXRzPgorQUxXQVlTX0lOTElORSB2b2lkIERlYnVnU2xvdFZpc2l0b3I6OmFwcGVuZChj
b25zdCBXcml0ZUJhcnJpZXJCYXNlPFQsIFRyYWl0cz4mIHNsb3QpCit7CisgICAgYXBwZW5kVW5i
YXJyaWVyZWQoc2xvdC5nZXQoKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1l
IFRyYWl0cz4KK0FMV0FZU19JTkxJTkUgdm9pZCBEZWJ1Z1Nsb3RWaXNpdG9yOjphcHBlbmRIaWRk
ZW4oY29uc3QgV3JpdGVCYXJyaWVyQmFzZTxULCBUcmFpdHM+JiBzbG90KQoreworICAgIGFwcGVu
ZEhpZGRlblVuYmFycmllcmVkKHNsb3QuZ2V0KCkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBJ
dGVyYXRvcj4KK0FMV0FZU19JTkxJTkUgdm9pZCBEZWJ1Z1Nsb3RWaXNpdG9yOjphcHBlbmQoSXRl
cmF0b3IgYmVnaW4sIEl0ZXJhdG9yIGVuZCkKK3sKKyAgICBmb3IgKGF1dG8gaXQgPSBiZWdpbjsg
aXQgIT0gZW5kOyArK2l0KQorICAgICAgICBhcHBlbmQoKml0KTsKK30KKwordGVtcGxhdGU8dHlw
ZW5hbWUgVD4KK0FMV0FZU19JTkxJTkUgdm9pZCBEZWJ1Z1Nsb3RWaXNpdG9yOjphcHBlbmQoY29u
c3QgV2VhazxUPiYgd2VhaykKK3sKKyAgICBhcHBlbmRVbmJhcnJpZXJlZCh3ZWFrLmdldCgpKTsK
K30KKworaW5saW5lIHZvaWQgRGVidWdTbG90VmlzaXRvcjo6cmVwb3J0RXh0cmFNZW1vcnlWaXNp
dGVkKHNpemVfdCBzaXplKQoreworICAgIGlmIChtX2lzRmlyc3RWaXNpdCkgeworICAgICAgICBt
X25vbkNlbGxWaXNpdENvdW50ICs9IHNpemU7CisgICAgICAgIC8vIEZJWE1FOiBDaGFuZ2UgdGhp
cyB0byB1c2UgU2F0dXJhdGVkQXJpdGhtZXRpYyB3aGVuIGF2YWlsYWJsZS4KKyAgICAgICAgLy8g
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MDQxMQorICAgICAgICBt
X2V4dHJhTWVtb3J5U2l6ZSArPSBzaXplOworICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgSlND
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IYW5kbGVTZXQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hhbmRsZVNldC5jcHAJKHJldmlzaW9u
IDI3MTM2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hhbmRsZVNldC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTU2LDcgKzU2LDkgQEAgdm9pZCBIYW5kbGVTZXQ6Omdyb3coKQogICAg
IH0KIH0KIAotdm9pZCBIYW5kbGVTZXQ6OnZpc2l0U3Ryb25nSGFuZGxlcyhTbG90VmlzaXRvciYg
dmlzaXRvcikKKy8vdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KKy8vdm9pZCBIYW5kbGVTZXQ6
OnZpc2l0U3Ryb25nSGFuZGxlcyhWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBIYW5kbGVTZXQ6OnZp
c2l0U3Ryb25nSGFuZGxlczEoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBO
b2RlKiBlbmQgPSBtX3N0cm9uZ0xpc3QuZW5kKCk7CiAgICAgZm9yIChOb2RlKiBub2RlID0gbV9z
dHJvbmdMaXN0LmJlZ2luKCk7IG5vZGUgIT0gZW5kOyBub2RlID0gbm9kZS0+bmV4dCgpKSB7CkBA
IC02Nyw2ICs2OSw5IEBAIHZvaWQgSGFuZGxlU2V0Ojp2aXNpdFN0cm9uZ0hhbmRsZXMoU2xvdFYK
ICAgICB9CiB9CiAKKy8vdGVtcGxhdGUgdm9pZCBIYW5kbGVTZXQ6OnZpc2l0U3Ryb25nSGFuZGxl
cyhTbG90VmlzaXRvciYpOworLy90ZW1wbGF0ZSB2b2lkIEhhbmRsZVNldDo6dmlzaXRTdHJvbmdI
YW5kbGVzKERlYnVnU2xvdFZpc2l0b3ImKTsKKwogdm9pZCBIYW5kbGVTZXQ6OndyaXRlQmFycmll
cihIYW5kbGVTbG90IHNsb3QsIGNvbnN0IEpTVmFsdWUmIHZhbHVlKQogewogICAgIGlmICghdmFs
dWUgPT0gISpzbG90ICYmIHNsb3QtPmlzQ2VsbCgpID09IHZhbHVlLmlzQ2VsbCgpKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGFuZGxlU2V0LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGFuZGxlU2V0LmgJKHJldmlzaW9uIDI3MTM2OCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hhbmRsZVNldC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zNSwxMCArMzUsMTEgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKK2NsYXNzIEFic3RyYWN0U2xv
dFZpc2l0b3I7CiBjbGFzcyBIYW5kbGVTZXQ7CiBjbGFzcyBWTTsKIGNsYXNzIEpTVmFsdWU7Ci1j
bGFzcyBTbG90VmlzaXRvcjsKKy8vY2xhc3MgU2xvdFZpc2l0b3I7CiAKIGNsYXNzIEhhbmRsZU5v
ZGUgewogcHVibGljOgpAQCAtNzMsNyArNzQsOCBAQCBwdWJsaWM6CiAgICAgSGFuZGxlU2xvdCBh
bGxvY2F0ZSgpOwogICAgIHZvaWQgZGVhbGxvY2F0ZShIYW5kbGVTbG90KTsKIAotICAgIHZvaWQg
dmlzaXRTdHJvbmdIYW5kbGVzKFNsb3RWaXNpdG9yJik7CisvLyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBWaXNpdG9yPiB2b2lkIHZpc2l0U3Ryb25nSGFuZGxlcyhWaXNpdG9yJik7CisgICAgdm9pZCB2
aXNpdFN0cm9uZ0hhbmRsZXMxKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKIAogICAgIEpTX0VYUE9S
VF9QUklWQVRFIHZvaWQgd3JpdGVCYXJyaWVyKEhhbmRsZVNsb3QsIGNvbnN0IEpTVmFsdWUmKTsK
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHJldmlzaW9uIDI3MTM2OCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yNjk3LDExICsyNjk3LDEyIEBAIHZvaWQgSGVhcDo6ZGlkRnJlZUJsb2NrKHNpemVfdCBjYXBh
Y2l0eSkKICNlbmRpZgogfQogCisvLyBtbGFtIEZJWE1FCiB2b2lkIEhlYXA6OmFkZENvcmVDb25z
dHJhaW50cygpCiB7CiAgICAgbV9jb25zdHJhaW50U2V0LT5hZGQoCiAgICAgICAgICJDcyIsICJD
b25zZXJ2YXRpdmUgU2NhbiIsCi0gICAgICAgIFt0aGlzLCBsYXN0VmVyc2lvbiA9IHN0YXRpY19j
YXN0PHVpbnQ2NF90PigwKV0gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvcikgbXV0YWJsZSB7Cisg
ICAgICAgIFt0aGlzLCBsYXN0VmVyc2lvbiA9IHN0YXRpY19jYXN0PHVpbnQ2NF90PigwKV0gKEFi
c3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpIG11dGFibGUgewogICAgICAgICAgICAgYm9vbCBz
aG91bGROb3RQcm9kdWNlV29yayA9IGxhc3RWZXJzaW9uID09IG1fcGhhc2VWZXJzaW9uOwogICAg
ICAgICAgICAgaWYgKHNob3VsZE5vdFByb2R1Y2VXb3JrKQogICAgICAgICAgICAgICAgIHJldHVy
bjsKQEAgLTI3MTgsMTMgKzI3MTksMTMgQEAgdm9pZCBIZWFwOjphZGRDb3JlQ29uc3RyYWludHMo
KQogICAgICAgICAgICAgICAgIGdhdGhlckpTU3RhY2tSb290cyhjb25zZXJ2YXRpdmVSb290cyk7
CiAgICAgICAgICAgICAgICAgZ2F0aGVyU2NyYXRjaEJ1ZmZlclJvb3RzKGNvbnNlcnZhdGl2ZVJv
b3RzKTsKIAotICAgICAgICAgICAgICAgIFNldFJvb3RNYXJrUmVhc29uU2NvcGUgcm9vdFNjb3Bl
KHNsb3RWaXNpdG9yLCBTbG90VmlzaXRvcjo6Um9vdE1hcmtSZWFzb246OkNvbnNlcnZhdGl2ZVNj
YW4pOwotICAgICAgICAgICAgICAgIHNsb3RWaXNpdG9yLmFwcGVuZChjb25zZXJ2YXRpdmVSb290
cyk7CisgICAgICAgICAgICAgICAgU2V0Um9vdE1hcmtSZWFzb25TY29wZSByb290U2NvcGUodmlz
aXRvciwgQWJzdHJhY3RTbG90VmlzaXRvcjo6Um9vdE1hcmtSZWFzb246OkNvbnNlcnZhdGl2ZVNj
YW4pOworICAgICAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kKGNvbnNlcnZhdGl2ZVJvb3RzKTsK
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChPcHRpb25zOjp1c2VKSVQoKSkgewogICAg
ICAgICAgICAgICAgIC8vIEpJVFN0dWJSb3V0aW5lcyBtdXN0IGJlIHZpc2l0ZWQgYWZ0ZXIgc2Nh
bm5pbmcgQ29uc2VydmF0aXZlUm9vdHMgc2luY2UgSklUU3R1YlJvdXRpbmVzIGRlcGVuZCBvbiB0
aGUgaG9vayBleGVjdXRlZCBkdXJpbmcgZ2F0aGVyaW5nIENvbnNlcnZhdGl2ZVJvb3RzLgotICAg
ICAgICAgICAgICAgIFNldFJvb3RNYXJrUmVhc29uU2NvcGUgcm9vdFNjb3BlKHNsb3RWaXNpdG9y
LCBTbG90VmlzaXRvcjo6Um9vdE1hcmtSZWFzb246OkpJVFN0dWJSb3V0aW5lcyk7Ci0gICAgICAg
ICAgICAgICAgbV9qaXRTdHViUm91dGluZXMtPnRyYWNlTWFya2VkU3R1YlJvdXRpbmVzKHNsb3RW
aXNpdG9yKTsKKyAgICAgICAgICAgICAgICBTZXRSb290TWFya1JlYXNvblNjb3BlIHJvb3RTY29w
ZSh2aXNpdG9yLCBBYnN0cmFjdFNsb3RWaXNpdG9yOjpSb290TWFya1JlYXNvbjo6SklUU3R1YlJv
dXRpbmVzKTsKKyAgICAgICAgICAgICAgICBtX2ppdFN0dWJSb3V0aW5lcy0+dHJhY2VNYXJrZWRT
dHViUm91dGluZXMxKHZpc2l0b3IpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAg
ICAgICAgICBsYXN0VmVyc2lvbiA9IG1fcGhhc2VWZXJzaW9uOwpAQCAtMjczMyw5MiArMjczNCw5
MiBAQCB2b2lkIEhlYXA6OmFkZENvcmVDb25zdHJhaW50cygpCiAgICAgCiAgICAgbV9jb25zdHJh
aW50U2V0LT5hZGQoCiAgICAgICAgICJNc3IiLCAiTWlzYyBTbWFsbCBSb290cyIsCi0gICAgICAg
IFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yKSB7CisgICAgICAgIFt0aGlzXSAoQWJz
dHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikgewogCiAjaWYgSlNDX09CSkNfQVBJX0VOQUJMRUQK
LSAgICAgICAgICAgIHNjYW5FeHRlcm5hbFJlbWVtYmVyZWRTZXQobV92bSwgc2xvdFZpc2l0b3Ip
OworICAgICAgICAgICAgc2NhbkV4dGVybmFsUmVtZW1iZXJlZFNldChtX3ZtLCB2aXNpdG9yKTsK
ICNlbmRpZgogICAgICAgICAgICAgaWYgKG1fdm0uc21hbGxTdHJpbmdzLm5lZWRzVG9CZVZpc2l0
ZWQoKm1fY29sbGVjdGlvblNjb3BlKSkgewotICAgICAgICAgICAgICAgIFNldFJvb3RNYXJrUmVh
c29uU2NvcGUgcm9vdFNjb3BlKHNsb3RWaXNpdG9yLCBTbG90VmlzaXRvcjo6Um9vdE1hcmtSZWFz
b246OlN0cm9uZ1JlZmVyZW5jZXMpOwotICAgICAgICAgICAgICAgIG1fdm0uc21hbGxTdHJpbmdz
LnZpc2l0U3Ryb25nUmVmZXJlbmNlcyhzbG90VmlzaXRvcik7CisgICAgICAgICAgICAgICAgU2V0
Um9vdE1hcmtSZWFzb25TY29wZSByb290U2NvcGUodmlzaXRvciwgQWJzdHJhY3RTbG90VmlzaXRv
cjo6Um9vdE1hcmtSZWFzb246OlN0cm9uZ1JlZmVyZW5jZXMpOworICAgICAgICAgICAgICAgIG1f
dm0uc21hbGxTdHJpbmdzLnZpc2l0U3Ryb25nUmVmZXJlbmNlcyh2aXNpdG9yKTsKICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIAogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFNldFJv
b3RNYXJrUmVhc29uU2NvcGUgcm9vdFNjb3BlKHNsb3RWaXNpdG9yLCBTbG90VmlzaXRvcjo6Um9v
dE1hcmtSZWFzb246OlByb3RlY3RlZFZhbHVlcyk7CisgICAgICAgICAgICAgICAgU2V0Um9vdE1h
cmtSZWFzb25TY29wZSByb290U2NvcGUodmlzaXRvciwgQWJzdHJhY3RTbG90VmlzaXRvcjo6Um9v
dE1hcmtSZWFzb246OlByb3RlY3RlZFZhbHVlcyk7CiAgICAgICAgICAgICAgICAgZm9yIChhdXRv
JiBwYWlyIDogbV9wcm90ZWN0ZWRWYWx1ZXMpCi0gICAgICAgICAgICAgICAgICAgIHNsb3RWaXNp
dG9yLmFwcGVuZFVuYmFycmllcmVkKHBhaXIua2V5KTsKKyAgICAgICAgICAgICAgICAgICAgdmlz
aXRvci5hcHBlbmRVbmJhcnJpZXJlZChwYWlyLmtleSk7CiAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAKICAgICAgICAgICAgIGlmIChtX21hcmtMaXN0U2V0ICYmIG1fbWFya0xpc3RTZXQtPnNp
emUoKSkgewotICAgICAgICAgICAgICAgIFNldFJvb3RNYXJrUmVhc29uU2NvcGUgcm9vdFNjb3Bl
KHNsb3RWaXNpdG9yLCBTbG90VmlzaXRvcjo6Um9vdE1hcmtSZWFzb246OkNvbnNlcnZhdGl2ZVNj
YW4pOwotICAgICAgICAgICAgICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyOjptYXJrTGlzdHMoc2xv
dFZpc2l0b3IsICptX21hcmtMaXN0U2V0KTsKKyAgICAgICAgICAgICAgICBTZXRSb290TWFya1Jl
YXNvblNjb3BlIHJvb3RTY29wZSh2aXNpdG9yLCBBYnN0cmFjdFNsb3RWaXNpdG9yOjpSb290TWFy
a1JlYXNvbjo6Q29uc2VydmF0aXZlU2Nhbik7CisgICAgICAgICAgICAgICAgTWFya2VkQXJndW1l
bnRCdWZmZXI6Om1hcmtMaXN0cyh2aXNpdG9yLCAqbV9tYXJrTGlzdFNldCk7CiAgICAgICAgICAg
ICB9CiAKICAgICAgICAgICAgIG1fbWFya2VkSlNWYWx1ZVJlZkFycmF5cy5mb3JFYWNoKFsmXSAo
TWFya2VkSlNWYWx1ZVJlZkFycmF5KiBhcnJheSkgewotICAgICAgICAgICAgICAgIGFycmF5LT52
aXNpdEFnZ3JlZ2F0ZShzbG90VmlzaXRvcik7CisgICAgICAgICAgICAgICAgYXJyYXktPnZpc2l0
QWdncmVnYXRlMSh2aXNpdG9yKTsKICAgICAgICAgICAgIH0pOwogCiAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgU2V0Um9vdE1hcmtSZWFzb25TY29wZSByb290U2NvcGUoc2xvdFZpc2l0
b3IsIFNsb3RWaXNpdG9yOjpSb290TWFya1JlYXNvbjo6Vk1FeGNlcHRpb25zKTsKLSAgICAgICAg
ICAgICAgICBzbG90VmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZChtX3ZtLmV4Y2VwdGlvbigpKTsK
LSAgICAgICAgICAgICAgICBzbG90VmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZChtX3ZtLmxhc3RF
eGNlcHRpb24oKSk7CisgICAgICAgICAgICAgICAgU2V0Um9vdE1hcmtSZWFzb25TY29wZSByb290
U2NvcGUodmlzaXRvciwgQWJzdHJhY3RTbG90VmlzaXRvcjo6Um9vdE1hcmtSZWFzb246OlZNRXhj
ZXB0aW9ucyk7CisgICAgICAgICAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZChtX3Zt
LmV4Y2VwdGlvbigpKTsKKyAgICAgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVk
KG1fdm0ubGFzdEV4Y2VwdGlvbigpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSwKICAgICAg
ICAgQ29uc3RyYWludFZvbGF0aWxpdHk6OkdyZXllZEJ5RXhlY3V0aW9uKTsKICAgICAKICAgICBt
X2NvbnN0cmFpbnRTZXQtPmFkZCgKICAgICAgICAgIlNoIiwgIlN0cm9uZyBIYW5kbGVzIiwKLSAg
ICAgICAgW3RoaXNdIChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IpIHsKLSAgICAgICAgICAgIFNl
dFJvb3RNYXJrUmVhc29uU2NvcGUgcm9vdFNjb3BlKHNsb3RWaXNpdG9yLCBTbG90VmlzaXRvcjo6
Um9vdE1hcmtSZWFzb246OlN0cm9uZ0hhbmRsZXMpOwotICAgICAgICAgICAgbV9oYW5kbGVTZXQu
dmlzaXRTdHJvbmdIYW5kbGVzKHNsb3RWaXNpdG9yKTsKKyAgICAgICAgW3RoaXNdIChBYnN0cmFj
dFNsb3RWaXNpdG9yJiB2aXNpdG9yKSB7CisgICAgICAgICAgICBTZXRSb290TWFya1JlYXNvblNj
b3BlIHJvb3RTY29wZSh2aXNpdG9yLCBBYnN0cmFjdFNsb3RWaXNpdG9yOjpSb290TWFya1JlYXNv
bjo6U3Ryb25nSGFuZGxlcyk7CisgICAgICAgICAgICBtX2hhbmRsZVNldC52aXNpdFN0cm9uZ0hh
bmRsZXMxKHZpc2l0b3IpOwogICAgICAgICB9LAogICAgICAgICBDb25zdHJhaW50Vm9sYXRpbGl0
eTo6R3JleWVkQnlFeGVjdXRpb24pOwogICAgIAogICAgIG1fY29uc3RyYWludFNldC0+YWRkKAog
ICAgICAgICAiRCIsICJEZWJ1Z2dlciIsCi0gICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNs
b3RWaXNpdG9yKSB7Ci0gICAgICAgICAgICBTZXRSb290TWFya1JlYXNvblNjb3BlIHJvb3RTY29w
ZShzbG90VmlzaXRvciwgU2xvdFZpc2l0b3I6OlJvb3RNYXJrUmVhc29uOjpEZWJ1Z2dlcik7Cisg
ICAgICAgIFt0aGlzXSAoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikgeworICAgICAgICAg
ICAgU2V0Um9vdE1hcmtSZWFzb25TY29wZSByb290U2NvcGUodmlzaXRvciwgQWJzdHJhY3RTbG90
VmlzaXRvcjo6Um9vdE1hcmtSZWFzb246OkRlYnVnZ2VyKTsKIAogI2lmIEVOQUJMRShTQU1QTElO
R19QUk9GSUxFUikKICAgICAgICAgICAgIGlmIChTYW1wbGluZ1Byb2ZpbGVyKiBzYW1wbGluZ1By
b2ZpbGVyID0gbV92bS5zYW1wbGluZ1Byb2ZpbGVyKCkpIHsKICAgICAgICAgICAgICAgICBhdXRv
IGxvY2tlciA9IGhvbGRMb2NrKHNhbXBsaW5nUHJvZmlsZXItPmdldExvY2soKSk7CiAgICAgICAg
ICAgICAgICAgc2FtcGxpbmdQcm9maWxlci0+cHJvY2Vzc1VudmVyaWZpZWRTdGFja1RyYWNlcyhs
b2NrZXIpOwotICAgICAgICAgICAgICAgIHNhbXBsaW5nUHJvZmlsZXItPnZpc2l0KHNsb3RWaXNp
dG9yKTsKKyAgICAgICAgICAgICAgICBzYW1wbGluZ1Byb2ZpbGVyLT52aXNpdCh2aXNpdG9yKTsK
ICAgICAgICAgICAgICAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSA9PSBHQ0xvZ2dpbmc6OlZlcmJv
c2UpCi0gICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIlNhbXBsaW5nIFByb2ZpbGVyIGRhdGE6
XG4iLCBzbG90VmlzaXRvcik7CisgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIlNhbXBsaW5n
IFByb2ZpbGVyIGRhdGE6XG4iLCB2aXNpdG9yKTsKICAgICAgICAgICAgIH0KICNlbmRpZiAvLyBF
TkFCTEUoU0FNUExJTkdfUFJPRklMRVIpCiAKICAgICAgICAgICAgIGlmIChtX3ZtLnR5cGVQcm9m
aWxlcigpKQotICAgICAgICAgICAgICAgIG1fdm0udHlwZVByb2ZpbGVyTG9nKCktPnZpc2l0KHNs
b3RWaXNpdG9yKTsKKyAgICAgICAgICAgICAgICBtX3ZtLnR5cGVQcm9maWxlckxvZygpLT52aXNp
dCh2aXNpdG9yKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKGF1dG8qIHNoYWRvd0No
aWNrZW4gPSBtX3ZtLnNoYWRvd0NoaWNrZW4oKSkKLSAgICAgICAgICAgICAgICBzaGFkb3dDaGlj
a2VuLT52aXNpdENoaWxkcmVuKHNsb3RWaXNpdG9yKTsKKyAgICAgICAgICAgICAgICBzaGFkb3dD
aGlja2VuLT52aXNpdENoaWxkcmVuKHZpc2l0b3IpOwogICAgICAgICB9LAogICAgICAgICBDb25z
dHJhaW50Vm9sYXRpbGl0eTo6R3JleWVkQnlFeGVjdXRpb24pOwogICAgIAogICAgIG1fY29uc3Ry
YWludFNldC0+YWRkKAogICAgICAgICAiV3MiLCAiV2VhayBTZXRzIiwKLSAgICAgICAgW3RoaXNd
IChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IpIHsKLSAgICAgICAgICAgIFNldFJvb3RNYXJrUmVh
c29uU2NvcGUgcm9vdFNjb3BlKHNsb3RWaXNpdG9yLCBTbG90VmlzaXRvcjo6Um9vdE1hcmtSZWFz
b246OldlYWtTZXRzKTsKLSAgICAgICAgICAgIG1fb2JqZWN0U3BhY2UudmlzaXRXZWFrU2V0cyhz
bG90VmlzaXRvcik7CisgICAgICAgIFt0aGlzXSAoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRv
cikgeworICAgICAgICAgICAgU2V0Um9vdE1hcmtSZWFzb25TY29wZSByb290U2NvcGUodmlzaXRv
ciwgQWJzdHJhY3RTbG90VmlzaXRvcjo6Um9vdE1hcmtSZWFzb246OldlYWtTZXRzKTsKKyAgICAg
ICAgICAgIG1fb2JqZWN0U3BhY2UudmlzaXRXZWFrU2V0czEodmlzaXRvcik7CiAgICAgICAgIH0s
CiAgICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5OjpHcmV5ZWRCeU1hcmtpbmcpOwogICAgIAog
ICAgIG1fY29uc3RyYWludFNldC0+YWRkKAogICAgICAgICAiTyIsICJPdXRwdXQiLAotICAgICAg
ICBbXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yKSB7Ci0gICAgICAgICAgICBWTSYgdm0gPSBz
bG90VmlzaXRvci52bSgpOworICAgICAgICBbXSAoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRv
cikgeworICAgICAgICAgICAgVk0mIHZtID0gdmlzaXRvci52bSgpOwogCi0gICAgICAgICAgICBh
dXRvIGNhbGxPdXRwdXRDb25zdHJhaW50ID0gW10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvciwg
SGVhcENlbGwqIGhlYXBDZWxsLCBIZWFwQ2VsbDo6S2luZCkgewotICAgICAgICAgICAgICAgIFNl
dFJvb3RNYXJrUmVhc29uU2NvcGUgcm9vdFNjb3BlKHNsb3RWaXNpdG9yLCBTbG90VmlzaXRvcjo6
Um9vdE1hcmtSZWFzb246Ok91dHB1dCk7Ci0gICAgICAgICAgICAgICAgVk0mIHZtID0gc2xvdFZp
c2l0b3Iudm0oKTsKKyAgICAgICAgICAgIGF1dG8gY2FsbE91dHB1dENvbnN0cmFpbnQgPSBbXSAo
QWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvciwgSGVhcENlbGwqIGhlYXBDZWxsLCBIZWFwQ2Vs
bDo6S2luZCkgeworICAgICAgICAgICAgICAgIFNldFJvb3RNYXJrUmVhc29uU2NvcGUgcm9vdFNj
b3BlKHZpc2l0b3IsIEFic3RyYWN0U2xvdFZpc2l0b3I6OlJvb3RNYXJrUmVhc29uOjpPdXRwdXQp
OworICAgICAgICAgICAgICAgIFZNJiB2bSA9IHZpc2l0b3Iudm0oKTsKICAgICAgICAgICAgICAg
ICBKU0NlbGwqIGNlbGwgPSBzdGF0aWNfY2FzdDxKU0NlbGwqPihoZWFwQ2VsbCk7Ci0gICAgICAg
ICAgICAgICAgY2VsbC0+bWV0aG9kVGFibGUodm0pLT52aXNpdE91dHB1dENvbnN0cmFpbnRzKGNl
bGwsIHNsb3RWaXNpdG9yKTsKKyAgICAgICAgICAgICAgICBjZWxsLT5tZXRob2RUYWJsZSh2bSkt
PnZpc2l0T3V0cHV0Q29uc3RyYWludHMoY2VsbCwgdmlzaXRvcik7CiAgICAgICAgICAgICB9Owog
ICAgICAgICAgICAgCiAgICAgICAgICAgICBhdXRvIGFkZCA9IFsmXSAoYXV0byYgc2V0KSB7Ci0g
ICAgICAgICAgICAgICAgc2xvdFZpc2l0b3IuYWRkUGFyYWxsZWxDb25zdHJhaW50VGFzayhzZXQu
Zm9yRWFjaE1hcmtlZENlbGxJblBhcmFsbGVsKGNhbGxPdXRwdXRDb25zdHJhaW50KSk7CisgICAg
ICAgICAgICAgICAgdmlzaXRvci5hZGRQYXJhbGxlbENvbnN0cmFpbnRUYXNrKHNldC5mb3JFYWNo
TWFya2VkQ2VsbEluUGFyYWxsZWwoY2FsbE91dHB1dENvbnN0cmFpbnQpKTsKICAgICAgICAgICAg
IH07CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGFkZCh2bS5leGVjdXRhYmxlVG9Db2RlQmxv
Y2tFZGdlc1dpdGhDb25zdHJhaW50cyk7CkBAIC0yODMyLDIyICsyODMzLDIyIEBAIHZvaWQgSGVh
cDo6YWRkQ29yZUNvbnN0cmFpbnRzKCkKICAgICBpZiAoT3B0aW9uczo6dXNlSklUKCkpIHsKICAg
ICAgICAgbV9jb25zdHJhaW50U2V0LT5hZGQoCiAgICAgICAgICAgICAiRHciLCAiREZHIFdvcmts
aXN0cyIsCi0gICAgICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvcikgewot
ICAgICAgICAgICAgICAgIFNldFJvb3RNYXJrUmVhc29uU2NvcGUgcm9vdFNjb3BlKHNsb3RWaXNp
dG9yLCBTbG90VmlzaXRvcjo6Um9vdE1hcmtSZWFzb246OkRGR1dvcmtMaXN0cyk7CisgICAgICAg
ICAgICBbdGhpc10gKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsKKyAgICAgICAgICAg
ICAgICBTZXRSb290TWFya1JlYXNvblNjb3BlIHJvb3RTY29wZSh2aXNpdG9yLCBBYnN0cmFjdFNs
b3RWaXNpdG9yOjpSb290TWFya1JlYXNvbjo6REZHV29ya0xpc3RzKTsKIAogICAgICAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IERGRzo6bnVtYmVyT2ZXb3JrbGlzdHMoKTsgaS0tOykKLSAg
ICAgICAgICAgICAgICAgICAgREZHOjpleGlzdGluZ1dvcmtsaXN0Rm9ySW5kZXgoaSkudmlzaXRX
ZWFrUmVmZXJlbmNlcyhzbG90VmlzaXRvcik7CisgICAgICAgICAgICAgICAgICAgIERGRzo6ZXhp
c3RpbmdXb3JrbGlzdEZvckluZGV4KGkpLnZpc2l0V2Vha1JlZmVyZW5jZXModmlzaXRvcik7CiAg
ICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMgaXMgYWxtb3N0
IGNlcnRhaW5seSB1bm5lY2Vzc2FyeS4KICAgICAgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY2ODI5CiAgICAgICAgICAgICAgICAgREZHOjpp
dGVyYXRlQ29kZUJsb2Nrc0ZvckdDKAogICAgICAgICAgICAgICAgICAgICBtX3ZtLAogICAgICAg
ICAgICAgICAgICAgICBbJl0gKENvZGVCbG9jayogY29kZUJsb2NrKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBzbG90VmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZChjb2RlQmxvY2spOworICAg
ICAgICAgICAgICAgICAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZChjb2RlQmxvY2sp
OwogICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAg
ICAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSA9PSBHQ0xvZ2dpbmc6OlZlcmJvc2UpCi0gICAgICAg
ICAgICAgICAgICAgIGRhdGFMb2coIkRGRyBXb3JrbGlzdHM6XG4iLCBzbG90VmlzaXRvcik7Cisg
ICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIkRGRyBXb3JrbGlzdHM6XG4iLCB2aXNpdG9yKTsK
ICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eTo6R3JleWVk
QnlNYXJraW5nKTsKICAgICB9CkBAIC0yODU1LDE0ICsyODU2LDE0IEBAIHZvaWQgSGVhcDo6YWRk
Q29yZUNvbnN0cmFpbnRzKCkKICAgICAKICAgICBtX2NvbnN0cmFpbnRTZXQtPmFkZCgKICAgICAg
ICAgIkNiIiwgIkNvZGVCbG9ja3MiLAotICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiBzbG90
VmlzaXRvcikgewotICAgICAgICAgICAgU2V0Um9vdE1hcmtSZWFzb25TY29wZSByb290U2NvcGUo
c2xvdFZpc2l0b3IsIFNsb3RWaXNpdG9yOjpSb290TWFya1JlYXNvbjo6Q29kZUJsb2Nrcyk7Cisg
ICAgICAgIFt0aGlzXSAoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikgeworICAgICAgICAg
ICAgU2V0Um9vdE1hcmtSZWFzb25TY29wZSByb290U2NvcGUodmlzaXRvciwgQWJzdHJhY3RTbG90
VmlzaXRvcjo6Um9vdE1hcmtSZWFzb246OkNvZGVCbG9ja3MpOwogICAgICAgICAgICAgaXRlcmF0
ZUV4ZWN1dGluZ0FuZENvbXBpbGluZ0NvZGVCbG9ja3NXaXRob3V0SG9sZGluZ0xvY2tzKAogICAg
ICAgICAgICAgICAgIFsmXSAoQ29kZUJsb2NrKiBjb2RlQmxvY2spIHsKICAgICAgICAgICAgICAg
ICAgICAgLy8gVmlzaXQgdGhlIENvZGVCbG9jayBhcyBhIGNvbnN0cmFpbnQgb25seSBpZiBpdCdz
IGJsYWNrLgogICAgICAgICAgICAgICAgICAgICBpZiAoaXNNYXJrZWQoY29kZUJsb2NrKQogICAg
ICAgICAgICAgICAgICAgICAgICAgJiYgY29kZUJsb2NrLT5jZWxsU3RhdGUoKSA9PSBDZWxsU3Rh
dGU6OlBvc3NpYmx5QmxhY2spCi0gICAgICAgICAgICAgICAgICAgICAgICBzbG90VmlzaXRvci52
aXNpdEFzQ29uc3RyYWludChjb2RlQmxvY2spOworICAgICAgICAgICAgICAgICAgICAgICAgdmlz
aXRvci52aXNpdEFzQ29uc3RyYWludChjb2RlQmxvY2spOwogICAgICAgICAgICAgICAgIH0pOwog
ICAgICAgICB9LAogICAgICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eTo6U2VsZG9tR3JleWVkKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0lzb0NlbGxTZXQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Jc29DZWxsU2V0LmgJKHJldmlzaW9uIDI3
MTM2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0lzb0NlbGxTZXQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzQsNiArMzQsNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAorY2xhc3MgQWJz
dHJhY3RTbG90VmlzaXRvcjsKIGNsYXNzIEhlYXBDZWxsOwogY2xhc3MgSXNvU3Vic3BhY2U7CiAK
QEAgLTU5LDcgKzYwLDcgQEAgcHVibGljOgogICAgIHZvaWQgZm9yRWFjaE1hcmtlZENlbGwoY29u
c3QgRnVuYyYpOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KLSAgICBSZWY8U2hhcmVk
VGFzazx2b2lkKFNsb3RWaXNpdG9yJik+PiBmb3JFYWNoTWFya2VkQ2VsbEluUGFyYWxsZWwoY29u
c3QgRnVuYyYpOworICAgIFJlZjxTaGFyZWRUYXNrPHZvaWQoQWJzdHJhY3RTbG90VmlzaXRvciYp
Pj4gZm9yRWFjaE1hcmtlZENlbGxJblBhcmFsbGVsKGNvbnN0IEZ1bmMmKTsKICAgICAKICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgogICAgIHZvaWQgZm9yRWFjaExpdmVDZWxsKGNvbnN0IEZ1
bmMmKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0lzb0NlbGxTZXRJbmxpbmVz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvQ2VsbFNldElu
bGluZXMuaAkocmV2aXNpb24gMjcxMzY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
SXNvQ2VsbFNldElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtOTIsOSArOTIsOSBAQCB2b2lk
IElzb0NlbGxTZXQ6OmZvckVhY2hNYXJrZWRDZWxsKGNvbnN0CiB9CiAKIHRlbXBsYXRlPHR5cGVu
YW1lIEZ1bmM+Ci1SZWY8U2hhcmVkVGFzazx2b2lkKFNsb3RWaXNpdG9yJik+PiBJc29DZWxsU2V0
Ojpmb3JFYWNoTWFya2VkQ2VsbEluUGFyYWxsZWwoY29uc3QgRnVuYyYgZnVuYykKK1JlZjxTaGFy
ZWRUYXNrPHZvaWQoQWJzdHJhY3RTbG90VmlzaXRvciYpPj4gSXNvQ2VsbFNldDo6Zm9yRWFjaE1h
cmtlZENlbGxJblBhcmFsbGVsKGNvbnN0IEZ1bmMmIGZ1bmMpCiB7Ci0gICAgY2xhc3MgVGFzayBm
aW5hbCA6IHB1YmxpYyBTaGFyZWRUYXNrPHZvaWQoU2xvdFZpc2l0b3ImKT4geworICAgIGNsYXNz
IFRhc2sgZmluYWwgOiBwdWJsaWMgU2hhcmVkVGFzazx2b2lkKEFic3RyYWN0U2xvdFZpc2l0b3Im
KT4gewogICAgIHB1YmxpYzoKICAgICAgICAgVGFzayhJc29DZWxsU2V0JiBzZXQsIGNvbnN0IEZ1
bmMmIGZ1bmMpCiAgICAgICAgICAgICA6IG1fc2V0KHNldCkKQEAgLTEwMyw3ICsxMDMsNyBAQCBS
ZWY8U2hhcmVkVGFzazx2b2lkKFNsb3RWaXNpdG9yJik+PiBJc29DCiAgICAgICAgIHsKICAgICAg
ICAgfQogICAgICAgICAKLSAgICAgICAgdm9pZCBydW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpIGZp
bmFsCisgICAgICAgIHZvaWQgcnVuKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpIGZpbmFs
CiAgICAgICAgIHsKICAgICAgICAgICAgIHdoaWxlIChNYXJrZWRCbG9jazo6SGFuZGxlKiBoYW5k
bGUgPSBtX2Jsb2NrU291cmNlLT5ydW4oKSkgewogICAgICAgICAgICAgICAgIHVuc2lnbmVkIGJs
b2NrSW5kZXggPSBoYW5kbGUtPmluZGV4KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9KSVRTdHViUm91dGluZVNldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvSklUU3R1YlJvdXRpbmVTZXQuY3BwCShyZXZpc2lvbiAyNzEzNjgpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9KSVRTdHViUm91dGluZVNldC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEyOCwxNyArMTI4LDIyIEBAIHZvaWQgSklUU3R1YlJvdXRpbmVTZXQ6OmRlbGV0
ZVVubWFya2VkSmUKICAgICBtX3JvdXRpbmVzLnNocmluayhkc3RJbmRleCk7CiB9CiAKLXZvaWQg
SklUU3R1YlJvdXRpbmVTZXQ6OnRyYWNlTWFya2VkU3R1YlJvdXRpbmVzKFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQorLy90ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgorLy92b2lkIEpJVFN0dWJSb3V0
aW5lU2V0Ojp0cmFjZU1hcmtlZFN0dWJSb3V0aW5lcyhWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBK
SVRTdHViUm91dGluZVNldDo6dHJhY2VNYXJrZWRTdHViUm91dGluZXMxKEFic3RyYWN0U2xvdFZp
c2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgZm9yIChhdXRvJiBlbnRyeSA6IG1fcm91dGluZXMpIHsK
ICAgICAgICAgR0NBd2FyZUpJVFN0dWJSb3V0aW5lKiByb3V0aW5lID0gZW50cnkucm91dGluZTsK
ICAgICAgICAgaWYgKCFyb3V0aW5lLT5tX21heUJlRXhlY3V0aW5nKQogICAgICAgICAgICAgY29u
dGludWU7CiAgICAgICAgIAotICAgICAgICByb3V0aW5lLT5tYXJrUmVxdWlyZWRPYmplY3RzKHZp
c2l0b3IpOworICAgICAgICByb3V0aW5lLT5tYXJrUmVxdWlyZWRPYmplY3RzMSh2aXNpdG9yKTsK
ICAgICB9CiB9CiAKKy8vdGVtcGxhdGUgdm9pZCBKSVRTdHViUm91dGluZVNldDo6dHJhY2VNYXJr
ZWRTdHViUm91dGluZXMoU2xvdFZpc2l0b3ImKTsKKy8vdGVtcGxhdGUgdm9pZCBKSVRTdHViUm91
dGluZVNldDo6dHJhY2VNYXJrZWRTdHViUm91dGluZXMoRGVidWdTbG90VmlzaXRvciYpOworCiB9
IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIEVOQUJMRShKSVQpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9KSVRTdHViUm91dGluZVNldC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0pJVFN0dWJSb3V0aW5lU2V0LmgJKHJldmlzaW9uIDI3
MTM2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0pJVFN0dWJSb3V0aW5lU2V0LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTM1LDggKzM1LDkgQEAgdXNpbmcgV1RGOjpSYW5nZTsKIAogbmFt
ZXNwYWNlIEpTQyB7CiAKK2NsYXNzIEFic3RyYWN0U2xvdFZpc2l0b3I7CiBjbGFzcyBHQ0F3YXJl
SklUU3R1YlJvdXRpbmU7Ci1jbGFzcyBTbG90VmlzaXRvcjsKKy8vY2xhc3MgU2xvdFZpc2l0b3I7
CiAKICNpZiBFTkFCTEUoSklUKQogCkBAIC02Myw4ICs2NCw5IEBAIHB1YmxpYzoKICAgICB2b2lk
IHByZXBhcmVGb3JDb25zZXJ2YXRpdmVTY2FuKCk7CiAgICAgCiAgICAgdm9pZCBkZWxldGVVbm1h
cmtlZEpldHRpc29uZWRTdHViUm91dGluZXMoKTsKLSAgICAKLSAgICB2b2lkIHRyYWNlTWFya2Vk
U3R1YlJvdXRpbmVzKFNsb3RWaXNpdG9yJik7CisKKy8vICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZp
c2l0b3I+IHZvaWQgdHJhY2VNYXJrZWRTdHViUm91dGluZXMoVmlzaXRvciYpOworICAgIHZvaWQg
dHJhY2VNYXJrZWRTdHViUm91dGluZXMxKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKICAgICAKIHBy
aXZhdGU6CiAgICAgdm9pZCBtYXJrU2xvdyh1aW50cHRyX3QgYWRkcmVzcyk7CkBAIC05Miw3ICs5
NCw4IEBAIHB1YmxpYzoKICAgICB2b2lkIG1hcmsodm9pZCopIHsgfQogICAgIHZvaWQgcHJlcGFy
ZUZvckNvbnNlcnZhdGl2ZVNjYW4oKSB7IH0KICAgICB2b2lkIGRlbGV0ZVVubWFya2VkSmV0dGlz
b25lZFN0dWJSb3V0aW5lcygpIHsgfQotICAgIHZvaWQgdHJhY2VNYXJrZWRTdHViUm91dGluZXMo
U2xvdFZpc2l0b3ImKSB7IH0KKy8vICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQg
dHJhY2VNYXJrZWRTdHViUm91dGluZXMoVmlzaXRvciYpIHsgfQorICAgIHZvaWQgdHJhY2VNYXJr
ZWRTdHViUm91dGluZXMoQWJzdHJhY3RTbG90VmlzaXRvciYpIHsgfQogfTsKIAogI2VuZGlmIC8v
ICFFTkFCTEUoSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya1N0YWNr
TWVyZ2luZ0NvbnN0cmFpbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL01hcmtTdGFja01lcmdpbmdDb25zdHJhaW50LmNwcAkocmV2aXNpb24gMjcxMzY4KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw3ICsyNSw2IEBACiAKICNpbmNsdWRlICJjb25maWcu
aCIKICNpbmNsdWRlICJNYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludC5oIgotCiAjaW5jbHVkZSAi
R0NTZWdtZW50ZWRBcnJheUlubGluZXMuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAKQEAg
LTQxLDEyICs0MCwxMiBAQCBNYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludDo6fk1hcmtTdGFja01l
CiB7CiB9CiAKLWRvdWJsZSBNYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludDo6cXVpY2tXb3JrRXN0
aW1hdGUoU2xvdFZpc2l0b3ImKQorZG91YmxlIE1hcmtTdGFja01lcmdpbmdDb25zdHJhaW50Ojpx
dWlja1dvcmtFc3RpbWF0ZShBYnN0cmFjdFNsb3RWaXNpdG9yJikKIHsKICAgICByZXR1cm4gbV9o
ZWFwLm1fbXV0YXRvck1hcmtTdGFjay0+c2l6ZSgpICsgbV9oZWFwLm1fcmFjZU1hcmtTdGFjay0+
c2l6ZSgpOwogfQogCi12b2lkIE1hcmtTdGFja01lcmdpbmdDb25zdHJhaW50OjpwcmVwYXJlVG9F
eGVjdXRlSW1wbChjb25zdCBBYnN0cmFjdExvY2tlciYsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQor
dm9pZCBNYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludDo6cHJlcGFyZVRvRXhlY3V0ZUltcGwoY29u
c3QgQWJzdHJhY3RMb2NrZXImLCBBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAg
IC8vIExvZ2dpbmcgdGhlIHdvcmsgaGVyZSBlbnN1cmVzIHRoYXQgdGhlIGNvbnN0cmFpbnQgc29s
dmVyIGtub3dzIHRoYXQgaXQgZG9lc24ndCBuZWVkIHRvIHByb2R1Y2UKICAgICAvLyBhbnltb3Jl
IHdvcmsuCkBAIC01Niw3ICs1NSw3IEBAIHZvaWQgTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQ6
OnByZXBhcmUKICAgICBkYXRhTG9nSWYoT3B0aW9uczo6bG9nR0MoKSwgIigiLCBzaXplLCAiKSIp
OwogfQogCi12b2lkIE1hcmtTdGFja01lcmdpbmdDb25zdHJhaW50OjpleGVjdXRlSW1wbChTbG90
VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQ6OmV4ZWN1
dGVJbXBsKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgbV9oZWFwLm1fbXV0
YXRvck1hcmtTdGFjay0+dHJhbnNmZXJUbyh2aXNpdG9yLm11dGF0b3JNYXJrU3RhY2soKSk7CiAg
ICAgbV9oZWFwLm1fcmFjZU1hcmtTdGFjay0+dHJhbnNmZXJUbyh2aXNpdG9yLm11dGF0b3JNYXJr
U3RhY2soKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3RhY2tNZXJn
aW5nQ29uc3RyYWludC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L01hcmtTdGFja01lcmdpbmdDb25zdHJhaW50LmgJKHJldmlzaW9uIDI3MTM2OCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtTdGFja01lcmdpbmdDb25zdHJhaW50LmgJKHdvcmtp
bmcgY29weSkKQEAgLTMwLDE4ICszMCwxOCBAQAogbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIEhl
YXA7Ci1jbGFzcyBTbG90VmlzaXRvcjsKK2NsYXNzIEFic3RyYWN0U2xvdFZpc2l0b3I7CiAKIGNs
YXNzIE1hcmtTdGFja01lcmdpbmdDb25zdHJhaW50IGZpbmFsIDogcHVibGljIE1hcmtpbmdDb25z
dHJhaW50IHsKIHB1YmxpYzoKICAgICBNYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludChIZWFwJik7
CiAgICAgfk1hcmtTdGFja01lcmdpbmdDb25zdHJhaW50KCkgZmluYWw7CiAgICAgCi0gICAgZG91
YmxlIHF1aWNrV29ya0VzdGltYXRlKFNsb3RWaXNpdG9yJikgZmluYWw7CisgICAgZG91YmxlIHF1
aWNrV29ya0VzdGltYXRlKEFic3RyYWN0U2xvdFZpc2l0b3ImKSBmaW5hbDsKICAgICAKIHByaXZh
dGU6Ci0gICAgdm9pZCBwcmVwYXJlVG9FeGVjdXRlSW1wbChjb25zdCBBYnN0cmFjdExvY2tlciYg
Y29uc3RyYWludFNvbHZpbmdMb2NrZXIsIFNsb3RWaXNpdG9yJikgZmluYWw7Ci0gICAgdm9pZCBl
eGVjdXRlSW1wbChTbG90VmlzaXRvciYpIGZpbmFsOworICAgIHZvaWQgcHJlcGFyZVRvRXhlY3V0
ZUltcGwoY29uc3QgQWJzdHJhY3RMb2NrZXImIGNvbnN0cmFpbnRTb2x2aW5nTG9ja2VyLCBBYnN0
cmFjdFNsb3RWaXNpdG9yJikgZmluYWw7CisgICAgdm9pZCBleGVjdXRlSW1wbChBYnN0cmFjdFNs
b3RWaXNpdG9yJikgZmluYWw7CiAgICAgCiAgICAgSGVhcCYgbV9oZWFwOwogfTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suaAkocmV2aXNpb24gMjcxMzY4KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suaAkod29ya2luZyBjb3B5
KQpAQCAtMTUxLDcgKzE1MSw4IEBAIHB1YmxpYzoKICAgICAgICAgCiAgICAgICAgIHZvaWQgc2hy
aW5rKCk7CiAgICAgICAgICAgICAKLSAgICAgICAgdm9pZCB2aXNpdFdlYWtTZXQoU2xvdFZpc2l0
b3ImKTsKKy8vICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIHZpc2l0V2Vh
a1NldChWaXNpdG9yJik7CisgICAgICAgIHZvaWQgdmlzaXRXZWFrU2V0MShBYnN0cmFjdFNsb3RW
aXNpdG9yJik7CiAgICAgICAgIHZvaWQgcmVhcFdlYWtTZXQoKTsKICAgICAgICAgICAgIAogICAg
ICAgICAvLyBXaGlsZSBhbGxvY2F0aW5nIGZyb20gYSBmcmVlIGxpc3QsIE1hcmtlZEJsb2NrIHRl
bXBvcmFyaWx5IGhhcyBib2d1cwpAQCAtNDk4LDkgKzQ5OSwxMSBAQCBpbmxpbmUgdm9pZCBNYXJr
ZWRCbG9jazo6SGFuZGxlOjpzaHJpbmsoCiAgICAgbV93ZWFrU2V0LnNocmluaygpOwogfQogCi1p
bmxpbmUgdm9pZCBNYXJrZWRCbG9jazo6SGFuZGxlOjp2aXNpdFdlYWtTZXQoU2xvdFZpc2l0b3Im
IHZpc2l0b3IpCisvL3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+CisvL2lubGluZSB2b2lkIE1h
cmtlZEJsb2NrOjpIYW5kbGU6OnZpc2l0V2Vha1NldChWaXNpdG9yJiB2aXNpdG9yKQoraW5saW5l
IHZvaWQgTWFya2VkQmxvY2s6OkhhbmRsZTo6dmlzaXRXZWFrU2V0MShBYnN0cmFjdFNsb3RWaXNp
dG9yJiB2aXNpdG9yKQogewotICAgIHJldHVybiBtX3dlYWtTZXQudmlzaXQodmlzaXRvcik7Cisg
ICAgcmV0dXJuIG1fd2Vha1NldC52aXNpdDEodmlzaXRvcik7CiB9CiAKIGlubGluZSB2b2lkIE1h
cmtlZEJsb2NrOjpIYW5kbGU6OnJlYXBXZWFrU2V0KCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL01hcmtlZFNwYWNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9NYXJrZWRTcGFjZS5jcHAJKHJldmlzaW9uIDI3MTM2OCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZFNwYWNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcy
LDEwICsyNzIsMTAgQEAgdm9pZCBNYXJrZWRTcGFjZTo6ZW5hYmxlUHJlY2lzZUFsbG9jYXRpbwog
ICAgICAgICBtX3ByZWNpc2VBbGxvY2F0aW9uU2V0LT5hZGQoYWxsb2NhdGlvbi0+Y2VsbCgpKTsK
IH0KIAotdm9pZCBNYXJrZWRTcGFjZTo6dmlzaXRXZWFrU2V0cyhTbG90VmlzaXRvciYgdmlzaXRv
cikKK3ZvaWQgTWFya2VkU3BhY2U6OnZpc2l0V2Vha1NldHMxKEFic3RyYWN0U2xvdFZpc2l0b3Im
IHZpc2l0b3IpCiB7CiAgICAgYXV0byB2aXNpdCA9IFsmXSAoV2Vha1NldCogd2Vha1NldCkgewot
ICAgICAgICB3ZWFrU2V0LT52aXNpdCh2aXNpdG9yKTsKKyAgICAgICAgd2Vha1NldC0+dmlzaXQx
KHZpc2l0b3IpOwogICAgIH07CiAgICAgCiAgICAgbV9uZXdBY3RpdmVXZWFrU2V0cy5mb3JFYWNo
KHZpc2l0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZFNwYWNlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkU3BhY2UuaAko
cmV2aXNpb24gMjcxMzY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkU3Bh
Y2UuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsNiArMzcsNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsK
IAorY2xhc3MgQWJzdHJhY3RTbG90VmlzaXRvcjsgLy8gbWxhbSBGSVhNRSA/CiBjbGFzcyBDb21w
bGV0ZVN1YnNwYWNlOwogY2xhc3MgSGVhcDsKIGNsYXNzIEhlYXBDZWxsOwpAQCAtMTA1LDcgKzEw
Niw3IEBAIHB1YmxpYzoKICAgICAKICAgICB2b2lkIHByZXBhcmVGb3JBbGxvY2F0aW9uKCk7CiAK
LSAgICB2b2lkIHZpc2l0V2Vha1NldHMoU2xvdFZpc2l0b3ImKTsKKyAgICB2b2lkIHZpc2l0V2Vh
a1NldHMxKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKICAgICB2b2lkIHJlYXBXZWFrU2V0cygpOwog
CiAgICAgTWFya2VkQmxvY2tTZXQmIGJsb2NrcygpIHsgcmV0dXJuIG1fYmxvY2tzOyB9CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnQuY3Bw
CShyZXZpc2lvbiAyNzEzNjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5n
Q29uc3RyYWludC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRl
ICJjb25maWcuaCIKICNpbmNsdWRlICJNYXJraW5nQ29uc3RyYWludC5oIgogCisjaW5jbHVkZSAi
QWJzdHJhY3RTbG90VmlzaXRvcklubGluZXMuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAj
aW5jbHVkZSAiVmlzaXRDb3VudGVyLmgiCiAKQEAgLTUxLDcgKzUyLDcgQEAgdm9pZCBNYXJraW5n
Q29uc3RyYWludDo6cmVzZXRTdGF0cygpCiAgICAgbV9sYXN0VmlzaXRDb3VudCA9IDA7CiB9CiAK
LXZvaWQgTWFya2luZ0NvbnN0cmFpbnQ6OmV4ZWN1dGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2
b2lkIE1hcmtpbmdDb25zdHJhaW50OjpleGVjdXRlKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0
b3IpCiB7CiAgICAgVmlzaXRDb3VudGVyIHZpc2l0Q291bnRlcih2aXNpdG9yKTsKICAgICBleGVj
dXRlSW1wbCh2aXNpdG9yKTsKQEAgLTYwLDE3ICs2MSwxNyBAQCB2b2lkIE1hcmtpbmdDb25zdHJh
aW50OjpleGVjdXRlKFNsb3RWaXNpCiAgICAgICAgIGRhdGFMb2coIigiLCBhYmJyZXZpYXRlZE5h
bWUoKSwgIiB2aXNpdGVkICIsIHZpc2l0Q291bnRlci52aXNpdENvdW50KCksICIgaW4gZXhlY3V0
ZSkiKTsKIH0KIAotZG91YmxlIE1hcmtpbmdDb25zdHJhaW50OjpxdWlja1dvcmtFc3RpbWF0ZShT
bG90VmlzaXRvciYpCitkb3VibGUgTWFya2luZ0NvbnN0cmFpbnQ6OnF1aWNrV29ya0VzdGltYXRl
KEFic3RyYWN0U2xvdFZpc2l0b3ImKQogewogICAgIHJldHVybiAwOwogfQogCi1kb3VibGUgTWFy
a2luZ0NvbnN0cmFpbnQ6OndvcmtFc3RpbWF0ZShTbG90VmlzaXRvciYgdmlzaXRvcikKK2RvdWJs
ZSBNYXJraW5nQ29uc3RyYWludDo6d29ya0VzdGltYXRlKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZp
c2l0b3IpCiB7CiAgICAgcmV0dXJuIGxhc3RWaXNpdENvdW50KCkgKyBxdWlja1dvcmtFc3RpbWF0
ZSh2aXNpdG9yKTsKIH0KIAotdm9pZCBNYXJraW5nQ29uc3RyYWludDo6cHJlcGFyZVRvRXhlY3V0
ZShjb25zdCBBYnN0cmFjdExvY2tlciYgY29uc3RyYWludFNvbHZpbmdMb2NrZXIsIFNsb3RWaXNp
dG9yJiB2aXNpdG9yKQordm9pZCBNYXJraW5nQ29uc3RyYWludDo6cHJlcGFyZVRvRXhlY3V0ZShj
b25zdCBBYnN0cmFjdExvY2tlciYgY29uc3RyYWludFNvbHZpbmdMb2NrZXIsIEFic3RyYWN0U2xv
dFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgZGF0YUxvZ0lmKE9wdGlvbnM6OmxvZ0dDKCksIGFi
YnJldmlhdGVkTmFtZSgpKTsKICAgICBWaXNpdENvdW50ZXIgdmlzaXRDb3VudGVyKHZpc2l0b3Ip
OwpAQCAtODAsNyArODEsNyBAQCB2b2lkIE1hcmtpbmdDb25zdHJhaW50OjpwcmVwYXJlVG9FeGVj
dXRlCiAgICAgICAgIGRhdGFMb2coIigiLCBhYmJyZXZpYXRlZE5hbWUoKSwgIiB2aXNpdGVkICIs
IHZpc2l0Q291bnRlci52aXNpdENvdW50KCksICIgaW4gcHJlcGFyZVRvRXhlY3V0ZSkiKTsKIH0K
IAotdm9pZCBNYXJraW5nQ29uc3RyYWludDo6ZG9QYXJhbGxlbFdvcmsoU2xvdFZpc2l0b3ImIHZp
c2l0b3IsIFNoYXJlZFRhc2s8dm9pZChTbG90VmlzaXRvciYpPiYgdGFzaykKK3ZvaWQgTWFya2lu
Z0NvbnN0cmFpbnQ6OmRvUGFyYWxsZWxXb3JrKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3Is
IFNoYXJlZFRhc2s8dm9pZChBYnN0cmFjdFNsb3RWaXNpdG9yJik+JiB0YXNrKQogewogICAgIFZp
c2l0Q291bnRlciB2aXNpdENvdW50ZXIodmlzaXRvcik7CiAgICAgdGFzay5ydW4odmlzaXRvcik7
CkBAIC05Miw3ICs5Myw3IEBAIHZvaWQgTWFya2luZ0NvbnN0cmFpbnQ6OmRvUGFyYWxsZWxXb3Jr
KFMKICAgICB9CiB9CiAKLXZvaWQgTWFya2luZ0NvbnN0cmFpbnQ6OnByZXBhcmVUb0V4ZWN1dGVJ
bXBsKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgU2xvdFZpc2l0b3ImKQordm9pZCBNYXJraW5nQ29u
c3RyYWludDo6cHJlcGFyZVRvRXhlY3V0ZUltcGwoY29uc3QgQWJzdHJhY3RMb2NrZXImLCBBYnN0
cmFjdFNsb3RWaXNpdG9yJikKIHsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvTWFya2luZ0NvbnN0cmFpbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9NYXJraW5nQ29uc3RyYWludC5oCShyZXZpc2lvbiAyNzEzNjgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zOCw3ICszOCw3IEBACiBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgTWFya2luZ0NvbnN0cmFp
bnRTZXQ7Ci1jbGFzcyBTbG90VmlzaXRvcjsKK2NsYXNzIEFic3RyYWN0U2xvdFZpc2l0b3I7CiAK
IGNsYXNzIE1hcmtpbmdDb25zdHJhaW50IHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShNYXJr
aW5nQ29uc3RyYWludCk7CkBAIC02MCwxNSArNjAsMTYgQEAgcHVibGljOgogICAgIAogICAgIHNp
emVfdCBsYXN0VmlzaXRDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fbGFzdFZpc2l0Q291bnQ7IH0K
ICAgICAKLSAgICB2b2lkIGV4ZWN1dGUoU2xvdFZpc2l0b3ImKTsKLSAgICAKLSAgICBKU19FWFBP
UlRfUFJJVkFURSB2aXJ0dWFsIGRvdWJsZSBxdWlja1dvcmtFc3RpbWF0ZShTbG90VmlzaXRvciYg
dmlzaXRvcik7CisgICAgdm9pZCBleGVjdXRlKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKKworICAg
IC8vIEZJWE1FIG1sYW0KKyAgICBKU19FWFBPUlRfUFJJVkFURSB2aXJ0dWFsIGRvdWJsZSBxdWlj
a1dvcmtFc3RpbWF0ZShBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKTsKICAgICAKLSAgICBk
b3VibGUgd29ya0VzdGltYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKTsKKyAgICBkb3VibGUgd29y
a0VzdGltYXRlKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpOwogICAgIAotICAgIHZvaWQg
cHJlcGFyZVRvRXhlY3V0ZShjb25zdCBBYnN0cmFjdExvY2tlciYgY29uc3RyYWludFNvbHZpbmdM
b2NrZXIsIFNsb3RWaXNpdG9yJik7CisgICAgdm9pZCBwcmVwYXJlVG9FeGVjdXRlKGNvbnN0IEFi
c3RyYWN0TG9ja2VyJiBjb25zdHJhaW50U29sdmluZ0xvY2tlciwgQWJzdHJhY3RTbG90VmlzaXRv
ciYpOwogICAgIAotICAgIHZvaWQgZG9QYXJhbGxlbFdvcmsoU2xvdFZpc2l0b3ImLCBTaGFyZWRU
YXNrPHZvaWQoU2xvdFZpc2l0b3ImKT4mKTsKKyAgICB2b2lkIGRvUGFyYWxsZWxXb3JrKEFic3Ry
YWN0U2xvdFZpc2l0b3ImLCBTaGFyZWRUYXNrPHZvaWQoQWJzdHJhY3RTbG90VmlzaXRvciYpPiYp
OwogICAgIAogICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5IHZvbGF0aWxpdHkoKSBjb25zdCB7IHJl
dHVybiBtX3ZvbGF0aWxpdHk7IH0KICAgICAKQEAgLTc2LDggKzc3LDggQEAgcHVibGljOgogICAg
IENvbnN0cmFpbnRQYXJhbGxlbGlzbSBwYXJhbGxlbGlzbSgpIGNvbnN0IHsgcmV0dXJuIG1fcGFy
YWxsZWxpc207IH0KIAogcHJvdGVjdGVkOgotICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlSW1wbChT
bG90VmlzaXRvciYpID0gMDsKLSAgICBKU19FWFBPUlRfUFJJVkFURSB2aXJ0dWFsIHZvaWQgcHJl
cGFyZVRvRXhlY3V0ZUltcGwoY29uc3QgQWJzdHJhY3RMb2NrZXImIGNvbnN0cmFpbnRTb2x2aW5n
TG9ja2VyLCBTbG90VmlzaXRvciYpOworICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlSW1wbChBYnN0
cmFjdFNsb3RWaXNpdG9yJikgPSAwOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZpcnR1YWwgdm9p
ZCBwcmVwYXJlVG9FeGVjdXRlSW1wbChjb25zdCBBYnN0cmFjdExvY2tlciYgY29uc3RyYWludFNv
bHZpbmdMb2NrZXIsIEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKICAgICAKIHByaXZhdGU6CiAgICAg
ZnJpZW5kIGNsYXNzIE1hcmtpbmdDb25zdHJhaW50U2V0OyAvLyBTbyBpdCBjYW4gc2V0IG1faW5k
ZXguCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludFNl
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0Nv
bnN0cmFpbnRTZXQuY3BwCShyZXZpc2lvbiAyNzEzNjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9NYXJraW5nQ29uc3RyYWludFNldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYzLDcg
KzYzLDcgQEAgdm9pZCBNYXJraW5nQ29uc3RyYWludFNldDo6ZGlkU3RhcnRNYXJraQogICAgIG1f
aXRlcmF0aW9uID0gMTsKIH0KIAotdm9pZCBNYXJraW5nQ29uc3RyYWludFNldDo6YWRkKENTdHJp
bmcgYWJicmV2aWF0ZWROYW1lLCBDU3RyaW5nIG5hbWUsIDo6RnVuY3Rpb248dm9pZChTbG90Vmlz
aXRvciYpPiBmdW5jdGlvbiwgQ29uc3RyYWludFZvbGF0aWxpdHkgdm9sYXRpbGl0eSwgQ29uc3Ry
YWludENvbmN1cnJlbmN5IGNvbmN1cnJlbmN5LCBDb25zdHJhaW50UGFyYWxsZWxpc20gcGFyYWxs
ZWxpc20pCit2b2lkIE1hcmtpbmdDb25zdHJhaW50U2V0OjphZGQoQ1N0cmluZyBhYmJyZXZpYXRl
ZE5hbWUsIENTdHJpbmcgbmFtZSwgOjpGdW5jdGlvbjx2b2lkKEFic3RyYWN0U2xvdFZpc2l0b3Im
KT4gZnVuY3Rpb24sIENvbnN0cmFpbnRWb2xhdGlsaXR5IHZvbGF0aWxpdHksIENvbnN0cmFpbnRD
b25jdXJyZW5jeSBjb25jdXJyZW5jeSwgQ29uc3RyYWludFBhcmFsbGVsaXNtIHBhcmFsbGVsaXNt
KQogewogICAgIGFkZChtYWtlVW5pcXVlPFNpbXBsZU1hcmtpbmdDb25zdHJhaW50PihXVEZNb3Zl
KGFiYnJldmlhdGVkTmFtZSksIFdURk1vdmUobmFtZSksIFdURk1vdmUoZnVuY3Rpb24pLCB2b2xh
dGlsaXR5LCBjb25jdXJyZW5jeSwgcGFyYWxsZWxpc20pKTsKIH0KQEAgLTc4LDE0ICs3OCwxNCBA
QCB2b2lkIE1hcmtpbmdDb25zdHJhaW50U2V0OjphZGQoCiAgICAgbV9zZXQuYXBwZW5kKFdURk1v
dmUoY29uc3RyYWludCkpOwogfQogCi1ib29sIE1hcmtpbmdDb25zdHJhaW50U2V0OjpleGVjdXRl
Q29udmVyZ2VuY2UoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCitib29sIE1hcmtpbmdDb25zdHJhaW50
U2V0OjpleGVjdXRlQ29udmVyZ2VuY2UoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsK
ICAgICBib29sIHJlc3VsdCA9IGV4ZWN1dGVDb252ZXJnZW5jZUltcGwodmlzaXRvcik7CiAgICAg
ZGF0YUxvZ0lmKE9wdGlvbnM6OmxvZ0dDKCksICIgIik7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0K
IAotYm9vbCBNYXJraW5nQ29uc3RyYWludFNldDo6aXNXYXZlZnJvbnRBZHZhbmNpbmcoU2xvdFZp
c2l0b3ImIHZpc2l0b3IpCitib29sIE1hcmtpbmdDb25zdHJhaW50U2V0Ojppc1dhdmVmcm9udEFk
dmFuY2luZyhBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGZvciAoTWFya2lu
Z0NvbnN0cmFpbnQqIG91dGdyb3d0aCA6IG1fb3V0Z3Jvd3RocykgewogICAgICAgICBpZiAob3V0
Z3Jvd3RoLT53b3JrRXN0aW1hdGUodmlzaXRvcikpCkBAIC05NCw3ICs5NCw3IEBAIGJvb2wgTWFy
a2luZ0NvbnN0cmFpbnRTZXQ6OmlzV2F2ZWZyb250QWQKICAgICByZXR1cm4gZmFsc2U7CiB9CiAK
LWJvb2wgTWFya2luZ0NvbnN0cmFpbnRTZXQ6OmV4ZWN1dGVDb252ZXJnZW5jZUltcGwoU2xvdFZp
c2l0b3ImIHZpc2l0b3IpCitib29sIE1hcmtpbmdDb25zdHJhaW50U2V0OjpleGVjdXRlQ29udmVy
Z2VuY2VJbXBsKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgU3VwZXJTYW1w
bGVyU2NvcGUgc3VwZXJTYW1wbGVyU2NvcGUoZmFsc2UpOwogICAgIE1hcmtpbmdDb25zdHJhaW50
U29sdmVyIHNvbHZlcigqdGhpcyk7CkBAIC0xNjYsNyArMTY2LDcgQEAgYm9vbCBNYXJraW5nQ29u
c3RyYWludFNldDo6ZXhlY3V0ZUNvbnZlcgogICAgIHJldHVybiAhc29sdmVyLmRpZFZpc2l0U29t
ZXRoaW5nKCk7CiB9CiAKLXZvaWQgTWFya2luZ0NvbnN0cmFpbnRTZXQ6OmV4ZWN1dGVBbGwoU2xv
dFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIE1hcmtpbmdDb25zdHJhaW50U2V0OjpleGVjdXRlQWxs
KEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgZm9yIChhdXRvJiBjb25zdHJh
aW50IDogbV9zZXQpCiAgICAgICAgIGNvbnN0cmFpbnQtPmV4ZWN1dGUodmlzaXRvcik7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludFNldC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50U2V0
LmgJKHJldmlzaW9uIDI3MTM2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtp
bmdDb25zdHJhaW50U2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDE0ICs0NiwxNCBAQCBwdWJs
aWM6CiAgICAgdm9pZCBhZGQoCiAgICAgICAgIENTdHJpbmcgYWJicmV2aWF0ZWROYW1lLAogICAg
ICAgICBDU3RyaW5nIG5hbWUsCi0gICAgICAgIDo6RnVuY3Rpb248dm9pZChTbG90VmlzaXRvciYp
PiwKKyAgICAgICAgOjpGdW5jdGlvbjx2b2lkKEFic3RyYWN0U2xvdFZpc2l0b3ImKT4sCiAgICAg
ICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5LAogICAgICAgICBDb25zdHJhaW50Q29uY3VycmVuY3kg
PSBDb25zdHJhaW50Q29uY3VycmVuY3k6OkNvbmN1cnJlbnQsCiAgICAgICAgIENvbnN0cmFpbnRQ
YXJhbGxlbGlzbSA9IENvbnN0cmFpbnRQYXJhbGxlbGlzbTo6U2VxdWVudGlhbCk7CiAgICAgCiAg
ICAgdm9pZCBhZGQoCiAgICAgICAgIENTdHJpbmcgYWJicmV2aWF0ZWROYW1lLCBDU3RyaW5nIG5h
bWUsCi0gICAgICAgIDo6RnVuY3Rpb248dm9pZChTbG90VmlzaXRvciYpPiBmdW5jLAorICAgICAg
ICA6OkZ1bmN0aW9uPHZvaWQoQWJzdHJhY3RTbG90VmlzaXRvciYpPiBmdW5jLAogICAgICAgICBD
b25zdHJhaW50Vm9sYXRpbGl0eSB2b2xhdGlsaXR5LAogICAgICAgICBDb25zdHJhaW50UGFyYWxs
ZWxpc20gcGFyYWxsZWxpc20pCiAgICAgewpAQCAtNjQsMjAgKzY0LDIwIEBAIHB1YmxpYzoKICAg
ICAKICAgICAvLyBBc3N1bWluZyB0aGF0IHRoZSBtYXJrIHN0YWNrcyBhcmUgYWxsIGVtcHR5LCB0
aGlzIHdpbGwgZ2l2ZSB5b3UgYSBndWVzcyBhcyB0byB3aGV0aGVyIG9yCiAgICAgLy8gbm90IHRo
ZSB3YXZlZnJvbnQgaXMgYWR2YW5jaW5nLgotICAgIGJvb2wgaXNXYXZlZnJvbnRBZHZhbmNpbmco
U2xvdFZpc2l0b3ImKTsKLSAgICBib29sIGlzV2F2ZWZyb250UmV0cmVhdGluZyhTbG90VmlzaXRv
ciYgdmlzaXRvcikgeyByZXR1cm4gIWlzV2F2ZWZyb250QWR2YW5jaW5nKHZpc2l0b3IpOyB9Cisg
ICAgYm9vbCBpc1dhdmVmcm9udEFkdmFuY2luZyhBYnN0cmFjdFNsb3RWaXNpdG9yJik7CisgICAg
Ym9vbCBpc1dhdmVmcm9udFJldHJlYXRpbmcoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikg
eyByZXR1cm4gIWlzV2F2ZWZyb250QWR2YW5jaW5nKHZpc2l0b3IpOyB9CiAgICAgCiAgICAgLy8g
UmV0dXJucyB0cnVlIGlmIHRoaXMgZXhlY3V0ZWQgYWxsIGNvbnN0cmFpbnRzIGFuZCBub25lIG9m
IHRoZW0gcHJvZHVjZWQgbmV3IHdvcmsuIFRoaXMKICAgICAvLyBhc3N1bWVzIHRoYXQgeW91J3Zl
IGFscmFlZHkgdmlzaXRlZCByb290cyBhbmQgZHJhaW5lZCBmcm9tIHRoZXJlLgotICAgIGJvb2wg
ZXhlY3V0ZUNvbnZlcmdlbmNlKFNsb3RWaXNpdG9yJik7CisgICAgYm9vbCBleGVjdXRlQ29udmVy
Z2VuY2UoQWJzdHJhY3RTbG90VmlzaXRvciYpOwogICAgIAogICAgIC8vIFNpbXBseSBydW5zIGFs
bCBjb25zdHJhaW50cyB3aXRob3V0IGFueSBzaGVuYW5pZ2Fucy4KLSAgICB2b2lkIGV4ZWN1dGVB
bGwoU2xvdFZpc2l0b3ImKTsKKyAgICB2b2lkIGV4ZWN1dGVBbGwoQWJzdHJhY3RTbG90VmlzaXRv
ciYpOwogICAgIAogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgTWFya2luZ0NvbnN0cmFpbnRT
b2x2ZXI7CiAgICAgCi0gICAgYm9vbCBleGVjdXRlQ29udmVyZ2VuY2VJbXBsKFNsb3RWaXNpdG9y
Jik7CisgICAgYm9vbCBleGVjdXRlQ29udmVyZ2VuY2VJbXBsKEFic3RyYWN0U2xvdFZpc2l0b3Im
KTsKICAgICAKICAgICBIZWFwJiBtX2hlYXA7CiAgICAgQml0VmVjdG9yIG1fdW5leGVjdXRlZFJv
b3RzOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnRT
b2x2ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtp
bmdDb25zdHJhaW50U29sdmVyLmNwcAkocmV2aXNpb24gMjcxMzY4KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zMyw3ICszMyw3IEBAIG5hbWVzcGFjZSBKU0MgeyAKIAogTWFya2luZ0NvbnN0cmFpbnRT
b2x2ZXI6Ok1hcmtpbmdDb25zdHJhaW50U29sdmVyKE1hcmtpbmdDb25zdHJhaW50U2V0JiBzZXQp
CiAgICAgOiBtX2hlYXAoc2V0Lm1faGVhcCkKLSAgICAsIG1fbWFpblZpc2l0b3IobV9oZWFwLmNv
bGxlY3RvclNsb3RWaXNpdG9yKCkpCisgICAgLCBtX21haW5WaXNpdG9yKG1faGVhcC5jb2xsZWN0
b3JTbG90VmlzaXRvcigpKSAvLyBtbGFtIEZJWE1FIG5lZWQgc3VwcG9ydCBmb3IgRGVidWdTbG90
VmlzaXRvcgogICAgICwgbV9zZXQoc2V0KQogewogICAgIG1faGVhcC5mb3JFYWNoU2xvdFZpc2l0
b3IoCkBAIC0xNTAsMTMgKzE1MCwxMyBAQCB2b2lkIE1hcmtpbmdDb25zdHJhaW50U29sdmVyOjpl
eGVjdXRlKE1hCiAgICAgbV9leGVjdXRlZC5zZXQoY29uc3RyYWludC5pbmRleCgpKTsKIH0KIAot
dm9pZCBNYXJraW5nQ29uc3RyYWludFNvbHZlcjo6YWRkUGFyYWxsZWxUYXNrKFJlZlB0cjxTaGFy
ZWRUYXNrPHZvaWQoU2xvdFZpc2l0b3ImKT4+IHRhc2ssIE1hcmtpbmdDb25zdHJhaW50JiBjb25z
dHJhaW50KQordm9pZCBNYXJraW5nQ29uc3RyYWludFNvbHZlcjo6YWRkUGFyYWxsZWxUYXNrKFJl
ZlB0cjxTaGFyZWRUYXNrPHZvaWQoQWJzdHJhY3RTbG90VmlzaXRvciYpPj4gdGFzaywgTWFya2lu
Z0NvbnN0cmFpbnQmIGNvbnN0cmFpbnQpCiB7CiAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayht
X2xvY2spOwogICAgIG1fdG9FeGVjdXRlSW5QYXJhbGxlbC5hcHBlbmQoVGFza1dpdGhDb25zdHJh
aW50KFdURk1vdmUodGFzayksICZjb25zdHJhaW50KSk7CiB9CiAKLXZvaWQgTWFya2luZ0NvbnN0
cmFpbnRTb2x2ZXI6OnJ1bkV4ZWN1dGlvblRocmVhZChTbG90VmlzaXRvciYgdmlzaXRvciwgU2No
ZWR1bGVyUHJlZmVyZW5jZSBwcmVmZXJlbmNlLCBTY29wZWRMYW1iZGE8T3B0aW9uYWw8dW5zaWdu
ZWQ+KCk+IHBpY2tOZXh0KQordm9pZCBNYXJraW5nQ29uc3RyYWludFNvbHZlcjo6cnVuRXhlY3V0
aW9uVGhyZWFkKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIFNjaGVkdWxlclByZWZlcmVu
Y2UgcHJlZmVyZW5jZSwgU2NvcGVkTGFtYmRhPE9wdGlvbmFsPHVuc2lnbmVkPigpPiBwaWNrTmV4
dCkKIHsKICAgICBmb3IgKDs7KSB7CiAgICAgICAgIGJvb2wgZG9QYXJhbGxlbFdvcmtNb2RlOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXIu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3Ry
YWludFNvbHZlci5oCShyZXZpc2lvbiAyNzEzNjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9NYXJraW5nQ29uc3RyYWludFNvbHZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC02NSwxNSAr
NjUsMTUgQEAgcHVibGljOgogICAgIHZvaWQgZXhlY3V0ZShNYXJraW5nQ29uc3RyYWludCYpOwog
ICAgIAogICAgIC8vIFBhcmFsbGVsIGNvbnN0cmFpbnRzIGNhbiBhZGQgcGFyYWxsZWwgdGFza3Mu
Ci0gICAgdm9pZCBhZGRQYXJhbGxlbFRhc2soUmVmUHRyPFNoYXJlZFRhc2s8dm9pZChTbG90Vmlz
aXRvciYpPj4sIE1hcmtpbmdDb25zdHJhaW50Jik7CisgICAgdm9pZCBhZGRQYXJhbGxlbFRhc2so
UmVmUHRyPFNoYXJlZFRhc2s8dm9pZChBYnN0cmFjdFNsb3RWaXNpdG9yJik+PiwgTWFya2luZ0Nv
bnN0cmFpbnQmKTsKICAgICAKIHByaXZhdGU6Ci0gICAgdm9pZCBydW5FeGVjdXRpb25UaHJlYWQo
U2xvdFZpc2l0b3ImLCBTY2hlZHVsZXJQcmVmZXJlbmNlLCBTY29wZWRMYW1iZGE8T3B0aW9uYWw8
dW5zaWduZWQ+KCk+IHBpY2tOZXh0KTsKKyAgICB2b2lkIHJ1bkV4ZWN1dGlvblRocmVhZChBYnN0
cmFjdFNsb3RWaXNpdG9yJiwgU2NoZWR1bGVyUHJlZmVyZW5jZSwgU2NvcGVkTGFtYmRhPE9wdGlv
bmFsPHVuc2lnbmVkPigpPiBwaWNrTmV4dCk7CiAgICAgCiAgICAgc3RydWN0IFRhc2tXaXRoQ29u
c3RyYWludCB7CiAgICAgICAgIFRhc2tXaXRoQ29uc3RyYWludCgpIHsgfQogICAgICAgICAKLSAg
ICAgICAgVGFza1dpdGhDb25zdHJhaW50KFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoU2xvdFZpc2l0
b3ImKT4+IHRhc2ssIE1hcmtpbmdDb25zdHJhaW50KiBjb25zdHJhaW50KQorICAgICAgICBUYXNr
V2l0aENvbnN0cmFpbnQoUmVmUHRyPFNoYXJlZFRhc2s8dm9pZChBYnN0cmFjdFNsb3RWaXNpdG9y
Jik+PiB0YXNrLCBNYXJraW5nQ29uc3RyYWludCogY29uc3RyYWludCkKICAgICAgICAgICAgIDog
dGFzayhXVEZNb3ZlKHRhc2spKQogICAgICAgICAgICAgLCBjb25zdHJhaW50KGNvbnN0cmFpbnQp
CiAgICAgICAgIHsKQEAgLTg1LDEyICs4NSwxMiBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAg
ICYmIGNvbnN0cmFpbnQgPT0gb3RoZXIuY29uc3RyYWludDsKICAgICAgICAgfQogICAgICAgICAK
LSAgICAgICAgUmVmUHRyPFNoYXJlZFRhc2s8dm9pZChTbG90VmlzaXRvciYpPj4gdGFzazsKKyAg
ICAgICAgUmVmUHRyPFNoYXJlZFRhc2s8dm9pZChBYnN0cmFjdFNsb3RWaXNpdG9yJik+PiB0YXNr
OwogICAgICAgICBNYXJraW5nQ29uc3RyYWludCogY29uc3RyYWludCB7IG51bGxwdHIgfTsKICAg
ICB9OwogICAgIAogICAgIEhlYXAmIG1faGVhcDsKLSAgICBTbG90VmlzaXRvciYgbV9tYWluVmlz
aXRvcjsKKyAgICBBYnN0cmFjdFNsb3RWaXNpdG9yJiBtX21haW5WaXNpdG9yOwogICAgIE1hcmtp
bmdDb25zdHJhaW50U2V0JiBtX3NldDsKICAgICBCaXRWZWN0b3IgbV9leGVjdXRlZDsKICAgICBE
ZXF1ZTxUYXNrV2l0aENvbnN0cmFpbnQsIDMyPiBtX3RvRXhlY3V0ZUluUGFyYWxsZWw7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9QcmVjaXNlQWxsb2NhdGlvbi5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvUHJlY2lzZUFsbG9jYXRpb24uY3Bw
CShyZXZpc2lvbiAyNzEzNjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9QcmVjaXNl
QWxsb2NhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwMCwxMSArMjAwLDE2IEBAIHZvaWQg
UHJlY2lzZUFsbG9jYXRpb246OnNocmluaygpCiAgICAgbV93ZWFrU2V0LnNocmluaygpOwogfQog
Ci12b2lkIFByZWNpc2VBbGxvY2F0aW9uOjp2aXNpdFdlYWtTZXQoU2xvdFZpc2l0b3ImIHZpc2l0
b3IpCisvL3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+CisvL3ZvaWQgUHJlY2lzZUFsbG9jYXRp
b246OnZpc2l0V2Vha1NldChWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBQcmVjaXNlQWxsb2NhdGlv
bjo6dmlzaXRXZWFrU2V0MTAwMChBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewotICAg
IG1fd2Vha1NldC52aXNpdCh2aXNpdG9yKTsKKyAgICBtX3dlYWtTZXQudmlzaXQxKHZpc2l0b3Ip
OwogfQogCisvL3RlbXBsYXRlIHZvaWQgUHJlY2lzZUFsbG9jYXRpb246OnZpc2l0V2Vha1NldChT
bG90VmlzaXRvciYpOworLy90ZW1wbGF0ZSB2b2lkIFByZWNpc2VBbGxvY2F0aW9uOjp2aXNpdFdl
YWtTZXQoRGVidWdTbG90VmlzaXRvciYpOworCiB2b2lkIFByZWNpc2VBbGxvY2F0aW9uOjpyZWFw
V2Vha1NldCgpCiB7CiAgICAgcmV0dXJuIG1fd2Vha1NldC5yZWFwKCk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9QcmVjaXNlQWxsb2NhdGlvbi5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1ByZWNpc2VBbGxvY2F0aW9uLmgJKHJldmlzaW9uIDI3
MTM2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1ByZWNpc2VBbGxvY2F0aW9uLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTgyLDcgKzgyLDggQEAgcHVibGljOgogICAgIAogICAgIHZvaWQg
c2hyaW5rKCk7CiAgICAgCi0gICAgdm9pZCB2aXNpdFdlYWtTZXQoU2xvdFZpc2l0b3ImKTsKKy8v
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgdmlzaXRXZWFrU2V0KFZpc2l0b3Im
KTsKKyAgICB2b2lkIHZpc2l0V2Vha1NldDEwMDAoQWJzdHJhY3RTbG90VmlzaXRvciYpOwogICAg
IHZvaWQgcmVhcFdlYWtTZXQoKTsKICAgICAKICAgICB2b2lkIGNsZWFyTmV3bHlBbGxvY2F0ZWQo
KSB7IG1faXNOZXdseUFsbG9jYXRlZCA9IGZhbHNlOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9TaW1wbGVNYXJraW5nQ29uc3RyYWludC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQuY3BwCShyZXZp
c2lvbiAyNzEzNjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TaW1wbGVNYXJraW5n
Q29uc3RyYWludC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDcgQEAgbmFtZXNwYWNl
IEpTQyB7CiAKIFNpbXBsZU1hcmtpbmdDb25zdHJhaW50OjpTaW1wbGVNYXJraW5nQ29uc3RyYWlu
dCgKICAgICBDU3RyaW5nIGFiYnJldmlhdGVkTmFtZSwgQ1N0cmluZyBuYW1lLAotICAgIDo6RnVu
Y3Rpb248dm9pZChTbG90VmlzaXRvciYpPiBleGVjdXRlRnVuY3Rpb24sCisgICAgOjpGdW5jdGlv
bjx2b2lkKEFic3RyYWN0U2xvdFZpc2l0b3ImKT4gZXhlY3V0ZUZ1bmN0aW9uLAogICAgIENvbnN0
cmFpbnRWb2xhdGlsaXR5IHZvbGF0aWxpdHksIENvbnN0cmFpbnRDb25jdXJyZW5jeSBjb25jdXJy
ZW5jeSwKICAgICBDb25zdHJhaW50UGFyYWxsZWxpc20gcGFyYWxsZWxpc20pCiAgICAgOiBNYXJr
aW5nQ29uc3RyYWludChXVEZNb3ZlKGFiYnJldmlhdGVkTmFtZSksIFdURk1vdmUobmFtZSksIHZv
bGF0aWxpdHksIGNvbmN1cnJlbmN5LCBwYXJhbGxlbGlzbSkKQEAgLTQyLDcgKzQyLDcgQEAgU2lt
cGxlTWFya2luZ0NvbnN0cmFpbnQ6On5TaW1wbGVNYXJraW5nQwogewogfQogCi12b2lkIFNpbXBs
ZU1hcmtpbmdDb25zdHJhaW50OjpleGVjdXRlSW1wbChTbG90VmlzaXRvciYgdmlzaXRvcikKK3Zv
aWQgU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQ6OmV4ZWN1dGVJbXBsKEFic3RyYWN0U2xvdFZpc2l0
b3ImIHZpc2l0b3IpCiB7CiAgICAgbV9leGVjdXRlRnVuY3Rpb24odmlzaXRvcik7CiB9CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TaW1wbGVNYXJraW5nQ29uc3RyYWludC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1NpbXBsZU1hcmtpbmdDb25z
dHJhaW50LmgJKHJldmlzaW9uIDI3MTM2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L1NpbXBsZU1hcmtpbmdDb25zdHJhaW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDE0ICszNywx
NCBAQCBjbGFzcyBTaW1wbGVNYXJraW5nQ29uc3RyYWludCBmaW5hbCA6IHB1CiBwdWJsaWM6CiAg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQoCiAgICAgICAgIENT
dHJpbmcgYWJicmV2aWF0ZWROYW1lLCBDU3RyaW5nIG5hbWUsCi0gICAgICAgIDo6RnVuY3Rpb248
dm9pZChTbG90VmlzaXRvciYpPiwKKyAgICAgICAgOjpGdW5jdGlvbjx2b2lkKEFic3RyYWN0U2xv
dFZpc2l0b3ImKT4sCiAgICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5LAogICAgICAgICBDb25z
dHJhaW50Q29uY3VycmVuY3kgPSBDb25zdHJhaW50Q29uY3VycmVuY3k6OkNvbmN1cnJlbnQsCiAg
ICAgICAgIENvbnN0cmFpbnRQYXJhbGxlbGlzbSA9IENvbnN0cmFpbnRQYXJhbGxlbGlzbTo6U2Vx
dWVudGlhbCk7CiAgICAgCiAgICAgU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQoCiAgICAgICAgIENT
dHJpbmcgYWJicmV2aWF0ZWROYW1lLCBDU3RyaW5nIG5hbWUsCi0gICAgICAgIDo6RnVuY3Rpb248
dm9pZChTbG90VmlzaXRvciYpPiBmdW5jLAorICAgICAgICA6OkZ1bmN0aW9uPHZvaWQoQWJzdHJh
Y3RTbG90VmlzaXRvciYpPiBmdW5jLAogICAgICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eSB2b2xh
dGlsaXR5LAogICAgICAgICBDb25zdHJhaW50UGFyYWxsZWxpc20gcGFyYWxsZWxpc20pCiAgICAg
ICAgIDogU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQoYWJicmV2aWF0ZWROYW1lLCBuYW1lLCBXVEZN
b3ZlKGZ1bmMpLCB2b2xhdGlsaXR5LCBDb25zdHJhaW50Q29uY3VycmVuY3k6OkNvbmN1cnJlbnQs
IHBhcmFsbGVsaXNtKQpAQCAtNTQsOSArNTQsOSBAQCBwdWJsaWM6CiAgICAgSlNfRVhQT1JUX1BS
SVZBVEUgflNpbXBsZU1hcmtpbmdDb25zdHJhaW50KCkgZmluYWw7CiAgICAgCiBwcml2YXRlOgot
ICAgIHZvaWQgZXhlY3V0ZUltcGwoU2xvdFZpc2l0b3ImKSBmaW5hbDsKKyAgICB2b2lkIGV4ZWN1
dGVJbXBsKEFic3RyYWN0U2xvdFZpc2l0b3ImKSBmaW5hbDsKIAotICAgIDo6RnVuY3Rpb248dm9p
ZChTbG90VmlzaXRvciYpPiBtX2V4ZWN1dGVGdW5jdGlvbjsKKyAgICA6OkZ1bmN0aW9uPHZvaWQo
QWJzdHJhY3RTbG90VmlzaXRvciYpPiBtX2V4ZWN1dGVGdW5jdGlvbjsKIH07CiAKIH0gLy8gbmFt
ZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3Iu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9y
LmNwcAkocmV2aXNpb24gMjcxMzY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xv
dFZpc2l0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSAi
Y29uZmlnLmgiCiAjaW5jbHVkZSAiU2xvdFZpc2l0b3IuaCIKIAorI2luY2x1ZGUgIkFic3RyYWN0
U2xvdFZpc2l0b3JJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQ29uc2VydmF0aXZlUm9vdHMuaCIKICNp
bmNsdWRlICJHQ1NlZ21lbnRlZEFycmF5SW5saW5lcy5oIgogI2luY2x1ZGUgIkhlYXBBbmFseXpl
ci5oIgpAQCAtMzUsNyArMzYsNyBAQAogI2luY2x1ZGUgIkpTQXJyYXkuaCIKICNpbmNsdWRlICJK
U0NlbGxJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNTdHJpbmcuaCIKLSNpbmNsdWRlICJNYXJraW5n
Q29uc3RyYWludFNvbHZlci5oIgorLy8jaW5jbHVkZSAiTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXIu
aCIKICNpbmNsdWRlICJTbG90VmlzaXRvcklubGluZXMuaCIKICNpbmNsdWRlICJTdG9wSWZOZWNl
c3NhcnlUaW1lci5oIgogI2luY2x1ZGUgIlZNLmgiCkBAIC03NywxNiArNzgsMTggQEAgc3RhdGlj
IHZvaWQgdmFsaWRhdGUoSlNDZWxsKiBjZWxsKQogI2VuZGlmCiAKIFNsb3RWaXNpdG9yOjpTbG90
VmlzaXRvcihIZWFwJiBoZWFwLCBDU3RyaW5nIGNvZGVOYW1lKQotICAgIDogbV9ieXRlc1Zpc2l0
ZWQoMCkKLSAgICAsIG1fdmlzaXRDb3VudCgwKQorLy8gICAgOiBCYXNlKFR5cGU6OlNsb3RWaXNp
dG9yLCBoZWFwLCBjb2RlTmFtZSkKKyAgICA6IEJhc2UoaGVhcCwgY29kZU5hbWUpCisvLyAgICAs
IG1fYnl0ZXNWaXNpdGVkKDApCisvLyAgICAsIG1fdmlzaXRDb3VudCgwKQogICAgICwgbV9pc0lu
UGFyYWxsZWxNb2RlKGZhbHNlKQotICAgICwgbV9tYXJraW5nVmVyc2lvbihNYXJrZWRTcGFjZTo6
aW5pdGlhbFZlcnNpb24pCi0gICAgLCBtX2hlYXAoaGVhcCkKLSAgICAsIG1fY29kZU5hbWUoY29k
ZU5hbWUpCi0jaWYgQVNTRVJUX0VOQUJMRUQKLSAgICAsIG1faXNDaGVja2luZ0ZvckRlZmF1bHRN
YXJrVmlvbGF0aW9uKGZhbHNlKQotICAgICwgbV9pc0RyYWluaW5nKGZhbHNlKQotI2VuZGlmCisv
LyAgICAsIG1fbWFya2luZ1ZlcnNpb24oTWFya2VkU3BhY2U6OmluaXRpYWxWZXJzaW9uKQorLy8g
ICAgLCBtX2hlYXAoaGVhcCkKKy8vICAgICwgbV9jb2RlTmFtZShjb2RlTmFtZSkKKy8vI2lmIEFT
U0VSVF9FTkFCTEVECisvLyAgICAsIG1faXNDaGVja2luZ0ZvckRlZmF1bHRNYXJrVmlvbGF0aW9u
KGZhbHNlKQorLy8vLyAgICAsIG1faXNEcmFpbmluZyhmYWxzZSkKKy8vI2VuZGlmCiB7CiB9CiAK
QEAgLTExNyw4ICsxMjAsOSBAQCB2b2lkIFNsb3RWaXNpdG9yOjpkaWRTdGFydE1hcmtpbmcoKQog
CiB2b2lkIFNsb3RWaXNpdG9yOjpyZXNldCgpCiB7Ci0gICAgbV9ieXRlc1Zpc2l0ZWQgPSAwOwot
ICAgIG1fdmlzaXRDb3VudCA9IDA7CisvLyAgICBtX2J5dGVzVmlzaXRlZCA9IDA7CisvLyAgICBt
X3Zpc2l0Q291bnQgPSAwOworICAgIEFic3RyYWN0U2xvdFZpc2l0b3I6OnJlc2V0KCk7CiAgICAg
bV9oZWFwQW5hbHl6ZXIgPSBudWxscHRyOwogICAgIFJFTEVBU0VfQVNTRVJUKCFtX2N1cnJlbnRD
ZWxsKTsKIH0KQEAgLTgwNywxMyArODExLDEzIEBAIE1hcmtTdGFja0FycmF5JiBTbG90VmlzaXRv
cjo6Y29ycmVzcG9uZGkKICAgICByZXR1cm4gKm1faGVhcC5tX3NoYXJlZE11dGF0b3JNYXJrU3Rh
Y2s7CiB9CiAKLXZvaWQgU2xvdFZpc2l0b3I6OmFkZFBhcmFsbGVsQ29uc3RyYWludFRhc2soUmVm
UHRyPFNoYXJlZFRhc2s8dm9pZChTbG90VmlzaXRvciYpPj4gdGFzaykKLXsKLSAgICBSRUxFQVNF
X0FTU0VSVChtX2N1cnJlbnRTb2x2ZXIpOwotICAgIFJFTEVBU0VfQVNTRVJUKG1fY3VycmVudENv
bnN0cmFpbnQpOwotICAgIFJFTEVBU0VfQVNTRVJUKHRhc2spOwotICAgIAotICAgIG1fY3VycmVu
dFNvbHZlci0+YWRkUGFyYWxsZWxUYXNrKHRhc2ssICptX2N1cnJlbnRDb25zdHJhaW50KTsKLX0K
Ky8vdm9pZCBTbG90VmlzaXRvcjo6YWRkUGFyYWxsZWxDb25zdHJhaW50VGFzayhSZWZQdHI8U2hh
cmVkVGFzazx2b2lkKEFic3RyYWN0U2xvdFZpc2l0b3ImKT4+IHRhc2spCisvL3sKKy8vICAgIFJF
TEVBU0VfQVNTRVJUKG1fY3VycmVudFNvbHZlcik7CisvLyAgICBSRUxFQVNFX0FTU0VSVChtX2N1
cnJlbnRDb25zdHJhaW50KTsKKy8vICAgIFJFTEVBU0VfQVNTRVJUKHRhc2spOworLy8KKy8vICAg
IG1fY3VycmVudFNvbHZlci0+YWRkUGFyYWxsZWxUYXNrKHRhc2ssICptX2N1cnJlbnRDb25zdHJh
aW50KTsKKy8vfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvU2xvdFZpc2l0b3IuaAkocmV2aXNpb24gMjcxMzY4KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMjUsNzQgKzI1
LDEwMSBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgIkFic3RyYWN0U2xvdFZpc2l0b3Iu
aCIKICNpbmNsdWRlICJIYW5kbGVUeXBlcy5oIgogI2luY2x1ZGUgIkl0ZXJhdGlvblN0YXR1cy5o
IgotI2luY2x1ZGUgIk1hcmtTdGFjay5oIgotI2luY2x1ZGUgIlZpc2l0UmFjZUtleS5oIgorLy8j
aW5jbHVkZSAiTWFya1N0YWNrLmgiCisvLyNpbmNsdWRlICJWaXNpdFJhY2VLZXkuaCIKICNpbmNs
dWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9Nb25vdG9uaWNUaW1lLmg+Ci0jaW5j
bHVkZSA8d3RmL1NoYXJlZFRhc2suaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Cisv
LyNpbmNsdWRlIDx3dGYvU2hhcmVkVGFzay5oPgorLy8jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmlu
Zy5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIAotY2xhc3MgQ29uc2VydmF0aXZlUm9vdHM7CisvL2Ns
YXNzIENvbnNlcnZhdGl2ZVJvb3RzOwogY2xhc3MgR0NUaHJlYWRTaGFyZWREYXRhOwotY2xhc3Mg
SGVhcDsKKy8vY2xhc3MgSGVhcDsKIGNsYXNzIEhlYXBDZWxsOwotY2xhc3MgSGVhcEFuYWx5emVy
OworLy9jbGFzcyBIZWFwQW5hbHl6ZXI7CiBjbGFzcyBNYXJrZWRCbG9jazsKLWNsYXNzIE1hcmtp
bmdDb25zdHJhaW50OwotY2xhc3MgTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXI7Ci10ZW1wbGF0ZTx0
eXBlbmFtZSBUPiBjbGFzcyBXZWFrOwotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVHJh
aXRzPiBjbGFzcyBXcml0ZUJhcnJpZXJCYXNlOworLy9jbGFzcyBNYXJraW5nQ29uc3RyYWludDsK
Ky8vY2xhc3MgTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXI7CisvL3RlbXBsYXRlPHR5cGVuYW1lIFQ+
IGNsYXNzIFdlYWs7CisvL3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFRyYWl0cz4gY2xh
c3MgV3JpdGVCYXJyaWVyQmFzZTsKIAotdHlwZWRlZiB1aW50MzJfdCBIZWFwVmVyc2lvbjsKKy8v
dHlwZWRlZiB1aW50MzJfdCBIZWFwVmVyc2lvbjsKIAotY2xhc3MgU2xvdFZpc2l0b3IgeworY2xh
c3MgU2xvdFZpc2l0b3IgZmluYWwgOiBwdWJsaWMgQWJzdHJhY3RTbG90VmlzaXRvciB7CiAgICAg
V1RGX01BS0VfTk9OQ09QWUFCTEUoU2xvdFZpc2l0b3IpOwogICAgIFdURl9NQUtFX0ZBU1RfQUxM
T0NBVEVEOwogCisgICAgdXNpbmcgQmFzZSA9IEFic3RyYWN0U2xvdFZpc2l0b3I7CisKICAgICBm
cmllbmQgY2xhc3MgU2V0Q3VycmVudENlbGxTY29wZTsKICAgICBmcmllbmQgY2xhc3MgSGVhcDsK
IAogcHVibGljOgotICAgIGVudW0gUm9vdE1hcmtSZWFzb24gewotICAgICAgICBOb25lLAotICAg
ICAgICBDb25zZXJ2YXRpdmVTY2FuLAotICAgICAgICBTdHJvbmdSZWZlcmVuY2VzLAotICAgICAg
ICBQcm90ZWN0ZWRWYWx1ZXMsCi0gICAgICAgIE1hcmtMaXN0U2V0LAotICAgICAgICBWTUV4Y2Vw
dGlvbnMsCi0gICAgICAgIFN0cm9uZ0hhbmRsZXMsCi0gICAgICAgIERlYnVnZ2VyLAotICAgICAg
ICBKSVRTdHViUm91dGluZXMsCi0gICAgICAgIFdlYWtTZXRzLAotICAgICAgICBPdXRwdXQsCi0g
ICAgICAgIERGR1dvcmtMaXN0cywKLSAgICAgICAgQ29kZUJsb2NrcywKLSAgICAgICAgRE9NR0NP
dXRwdXQsCisgICAgY2xhc3MgRGVmYXVsdE1hcmtpbmdWaW9sYXRpb25Bc3NlcnRpb25TY29wZSB7
CisgICAgcHVibGljOgorI2lmIEFTU0VSVF9FTkFCTEVECisgICAgICAgIERlZmF1bHRNYXJraW5n
VmlvbGF0aW9uQXNzZXJ0aW9uU2NvcGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisgICAgICAgICAg
ICA6IG1fdmlzaXRvcih2aXNpdG9yKQorICAgICAgICB7CisgICAgICAgICAgICBtX3dhc0NoZWNr
aW5nRm9yRGVmYXVsdE1hcmtWaW9sYXRpb24gPSBtX3Zpc2l0b3IubV9pc0NoZWNraW5nRm9yRGVm
YXVsdE1hcmtWaW9sYXRpb247CisgICAgICAgICAgICBtX3Zpc2l0b3IubV9pc0NoZWNraW5nRm9y
RGVmYXVsdE1hcmtWaW9sYXRpb24gPSBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIH5EZWZh
dWx0TWFya2luZ1Zpb2xhdGlvbkFzc2VydGlvblNjb3BlKCkKKyAgICAgICAgeworICAgICAgICAg
ICAgbV92aXNpdG9yLm1faXNDaGVja2luZ0ZvckRlZmF1bHRNYXJrVmlvbGF0aW9uID0gbV93YXND
aGVja2luZ0ZvckRlZmF1bHRNYXJrVmlvbGF0aW9uOworICAgICAgICB9CisKKyAgICBwcml2YXRl
OgorICAgICAgICBTbG90VmlzaXRvciYgbV92aXNpdG9yOworICAgICAgICBib29sIG1fd2FzQ2hl
Y2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlvbjsKKyNlbHNlCisgICAgICAgIERlZmF1bHRNYXJr
aW5nVmlvbGF0aW9uQXNzZXJ0aW9uU2NvcGUoU2xvdFZpc2l0b3ImKSB7IH0KKyNlbmRpZgogICAg
IH07CiAKKy8vICAgIGVudW0gUm9vdE1hcmtSZWFzb24geworLy8gICAgICAgIE5vbmUsCisvLyAg
ICAgICAgQ29uc2VydmF0aXZlU2NhbiwKKy8vICAgICAgICBTdHJvbmdSZWZlcmVuY2VzLAorLy8g
ICAgICAgIFByb3RlY3RlZFZhbHVlcywKKy8vICAgICAgICBNYXJrTGlzdFNldCwKKy8vICAgICAg
ICBWTUV4Y2VwdGlvbnMsCisvLyAgICAgICAgU3Ryb25nSGFuZGxlcywKKy8vICAgICAgICBEZWJ1
Z2dlciwKKy8vICAgICAgICBKSVRTdHViUm91dGluZXMsCisvLyAgICAgICAgV2Vha1NldHMsCisv
LyAgICAgICAgT3V0cHV0LAorLy8gICAgICAgIERGR1dvcmtMaXN0cywKKy8vICAgICAgICBDb2Rl
QmxvY2tzLAorLy8gICAgICAgIERPTUdDT3V0cHV0LAorLy8gICAgfTsKKwogICAgIFNsb3RWaXNp
dG9yKEhlYXAmLCBDU3RyaW5nIGNvZGVOYW1lKTsKICAgICB+U2xvdFZpc2l0b3IoKTsKIAotICAg
IE1hcmtTdGFja0FycmF5JiBjb2xsZWN0b3JNYXJrU3RhY2soKSB7IHJldHVybiBtX2NvbGxlY3Rv
clN0YWNrOyB9Ci0gICAgTWFya1N0YWNrQXJyYXkmIG11dGF0b3JNYXJrU3RhY2soKSB7IHJldHVy
biBtX211dGF0b3JTdGFjazsgfQotICAgIGNvbnN0IE1hcmtTdGFja0FycmF5JiBjb2xsZWN0b3JN
YXJrU3RhY2soKSBjb25zdCB7IHJldHVybiBtX2NvbGxlY3RvclN0YWNrOyB9Ci0gICAgY29uc3Qg
TWFya1N0YWNrQXJyYXkmIG11dGF0b3JNYXJrU3RhY2soKSBjb25zdCB7IHJldHVybiBtX211dGF0
b3JTdGFjazsgfQotICAgIAotICAgIFZNJiB2bSgpOwotICAgIGNvbnN0IFZNJiB2bSgpIGNvbnN0
OwotICAgIEhlYXAqIGhlYXAoKSBjb25zdDsKLQotICAgIHZvaWQgYXBwZW5kKGNvbnN0IENvbnNl
cnZhdGl2ZVJvb3RzJik7Ci0gICAgCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUg
VHJhaXRzPiB2b2lkIGFwcGVuZChjb25zdCBXcml0ZUJhcnJpZXJCYXNlPFQsIFRyYWl0cz4mKTsK
LSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBUcmFpdHM+IHZvaWQgYXBwZW5kSGlk
ZGVuKGNvbnN0IFdyaXRlQmFycmllckJhc2U8VCwgVHJhaXRzPiYpOwotICAgIHRlbXBsYXRlPHR5
cGVuYW1lIEl0ZXJhdG9yPiB2b2lkIGFwcGVuZChJdGVyYXRvciBiZWdpbiAsIEl0ZXJhdG9yIGVu
ZCk7Ci0gICAgdm9pZCBhcHBlbmRWYWx1ZXMoY29uc3QgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3du
LCBSYXdWYWx1ZVRyYWl0czxVbmtub3duPj4qLCBzaXplX3QgY291bnQpOwotICAgIHZvaWQgYXBw
ZW5kVmFsdWVzSGlkZGVuKGNvbnN0IFdyaXRlQmFycmllckJhc2U8VW5rbm93biwgUmF3VmFsdWVU
cmFpdHM8VW5rbm93bj4+Kiwgc2l6ZV90IGNvdW50KTsKKy8vICAgIE1hcmtTdGFja0FycmF5JiBj
b2xsZWN0b3JNYXJrU3RhY2soKSB7IHJldHVybiBtX2NvbGxlY3RvclN0YWNrOyB9CisvLyAgICBN
YXJrU3RhY2tBcnJheSYgbXV0YXRvck1hcmtTdGFjaygpIHsgcmV0dXJuIG1fbXV0YXRvclN0YWNr
OyB9CisvLyAgICBjb25zdCBNYXJrU3RhY2tBcnJheSYgY29sbGVjdG9yTWFya1N0YWNrKCkgY29u
c3QgeyByZXR1cm4gbV9jb2xsZWN0b3JTdGFjazsgfQorLy8gICAgY29uc3QgTWFya1N0YWNrQXJy
YXkmIG11dGF0b3JNYXJrU3RhY2soKSBjb25zdCB7IHJldHVybiBtX211dGF0b3JTdGFjazsgfQor
ICAgIAorLy8gICAgVk0mIHZtKCk7CisvLyAgICBjb25zdCBWTSYgdm0oKSBjb25zdDsKKy8vICAg
IEhlYXAqIGhlYXAoKSBjb25zdDsKKworICAgIHZvaWQgYXBwZW5kKGNvbnN0IENvbnNlcnZhdGl2
ZVJvb3RzJikgZmluYWw7CisKKyAgICB1c2luZyBCYXNlOjphcHBlbmQ7CisvLyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBUcmFpdHM+IHZvaWQgYXBwZW5kKGNvbnN0IFdyaXRlQmFy
cmllckJhc2U8VCwgVHJhaXRzPiYpOworLy8gICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5h
bWUgVHJhaXRzPiB2b2lkIGFwcGVuZEhpZGRlbihjb25zdCBXcml0ZUJhcnJpZXJCYXNlPFQsIFRy
YWl0cz4mKTsKKy8vICAgIHRlbXBsYXRlPHR5cGVuYW1lIEl0ZXJhdG9yPiB2b2lkIGFwcGVuZChJ
dGVyYXRvciBiZWdpbiAsIEl0ZXJhdG9yIGVuZCk7CisvLyAgICB2b2lkIGFwcGVuZFZhbHVlcyhj
b25zdCBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24sIFJhd1ZhbHVlVHJhaXRzPFVua25vd24+Pios
IHNpemVfdCBjb3VudCk7CisvLyAgICB2b2lkIGFwcGVuZFZhbHVlc0hpZGRlbihjb25zdCBXcml0
ZUJhcnJpZXJCYXNlPFVua25vd24sIFJhd1ZhbHVlVHJhaXRzPFVua25vd24+PiosIHNpemVfdCBj
b3VudCk7CiAgICAgCiAgICAgLy8gVGhlc2UgZG9uJ3QgcmVxdWlyZSB5b3UgdG8gcHJvdmUgdGhh
dCB5b3UgaGF2ZSBhIFdyaXRlQmFycmllcjw+LiBUaGF0IG1ha2VzIHNlbnNlCiAgICAgLy8gZm9y
OgpAQCAtMTAzLDE5ICsxMzAsMTkgQEAgcHVibGljOgogICAgIC8vCiAgICAgLy8gSWYgeW91IGFy
ZSBub3QgYSByb290IGFuZCB5b3UgZG9uJ3Qga25vdyB3aGF0IGtpbmQgb2YgYmFycmllciB5b3Ug
aGF2ZSwgdGhlbiB5b3UKICAgICAvLyBzaG91bGRuJ3QgY2FsbCB0aGVzZSBtZXRob2RzLgotICAg
IHZvaWQgYXBwZW5kVW5iYXJyaWVyZWQoSlNWYWx1ZSk7CisgICAgdm9pZCBhcHBlbmRVbmJhcnJp
ZXJlZChKU1ZhbHVlKSBmaW5hbDsKICAgICB2b2lkIGFwcGVuZFVuYmFycmllcmVkKEpTVmFsdWUq
LCBzaXplX3QpOwotICAgIHZvaWQgYXBwZW5kVW5iYXJyaWVyZWQoSlNDZWxsKik7CisgICAgdm9p
ZCBhcHBlbmRVbmJhcnJpZXJlZChKU0NlbGwqKSBmaW5hbDsKICAgICAKLSAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBUPgotICAgIHZvaWQgYXBwZW5kKGNvbnN0IFdlYWs8VD4mIHdlYWspOworLy8gICAg
dGVtcGxhdGU8dHlwZW5hbWUgVD4KKy8vICAgIHZvaWQgYXBwZW5kKGNvbnN0IFdlYWs8VD4mIHdl
YWspOwogICAgIAotICAgIHZvaWQgYXBwZW5kSGlkZGVuVW5iYXJyaWVyZWQoSlNWYWx1ZSk7Ci0g
ICAgdm9pZCBhcHBlbmRIaWRkZW5VbmJhcnJpZXJlZChKU0NlbGwqKTsKKyAgICB2b2lkIGFwcGVu
ZEhpZGRlblVuYmFycmllcmVkKEpTVmFsdWUpIGZpbmFsOworICAgIHZvaWQgYXBwZW5kSGlkZGVu
VW5iYXJyaWVyZWQoSlNDZWxsKikgZmluYWw7CiAKLSAgICBib29sIGFkZE9wYXF1ZVJvb3Qodm9p
ZCopOyAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIHJvb3Qgd2FzIG5ldy4KKyAgICBib29sIGFkZE9w
YXF1ZVJvb3Qodm9pZCopIGZpbmFsOyAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIHJvb3Qgd2FzIG5l
dy4KICAgICAKLSAgICBib29sIGNvbnRhaW5zT3BhcXVlUm9vdCh2b2lkKikgY29uc3Q7CisgICAg
Ym9vbCBjb250YWluc09wYXF1ZVJvb3Qodm9pZCopIGNvbnN0IGZpbmFsOwogCiAgICAgYm9vbCBp
c0VtcHR5KCkgeyByZXR1cm4gbV9jb2xsZWN0b3JTdGFjay5pc0VtcHR5KCkgJiYgbV9tdXRhdG9y
U3RhY2suaXNFbXB0eSgpOyB9CiAKQEAgLTEyNSwxMCArMTUyLDEwIEBAIHB1YmxpYzoKICAgICB2
b2lkIHJlc2V0KCk7CiAgICAgdm9pZCBjbGVhck1hcmtTdGFja3MoKTsKIAotICAgIHNpemVfdCBi
eXRlc1Zpc2l0ZWQoKSBjb25zdCB7IHJldHVybiBtX2J5dGVzVmlzaXRlZDsgfQotICAgIHNpemVf
dCB2aXNpdENvdW50KCkgY29uc3QgeyByZXR1cm4gbV92aXNpdENvdW50OyB9Ci0gICAgCi0gICAg
dm9pZCBhZGRUb1Zpc2l0Q291bnQoc2l6ZV90IHZhbHVlKSB7IG1fdmlzaXRDb3VudCArPSB2YWx1
ZTsgfQorLy8gICAgc2l6ZV90IGJ5dGVzVmlzaXRlZCgpIGNvbnN0IHsgcmV0dXJuIG1fYnl0ZXNW
aXNpdGVkOyB9CisvLyAgICBzaXplX3QgdmlzaXRDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fdmlz
aXRDb3VudDsgfQorLy8KKy8vICAgIHZvaWQgYWRkVG9WaXNpdENvdW50KHNpemVfdCB2YWx1ZSkg
eyBtX3Zpc2l0Q291bnQgKz0gdmFsdWU7IH0KIAogICAgIHZvaWQgZG9uYXRlKCk7CiAgICAgdm9p
ZCBkcmFpbihNb25vdG9uaWNUaW1lIHRpbWVvdXQgPSBNb25vdG9uaWNUaW1lOjppbmZpbml0eSgp
KTsKQEAgLTE1MSwyNCArMTc4LDI0IEBAIHB1YmxpYzoKICAgICAKICAgICAvLyBUaGlzIGluZm9y
bXMgdGhlIEdDIGFib3V0IGF1eGlsaWFyeSBvZiBzb21lIHNpemUgdGhhdCB3ZSBhcmUga2VlcGlu
ZyBhbGl2ZS4gSWYgeW91IGRvbid0IGRvCiAgICAgLy8gdGhpcyB0aGVuIHRoZSBzcGFjZSB3aWxs
IGJlIGZyZWVkIGF0IGVuZCBvZiBHQy4KLSAgICB2b2lkIG1hcmtBdXhpbGlhcnkoY29uc3Qgdm9p
ZCogYmFzZSk7CisgICAgdm9pZCBtYXJrQXV4aWxpYXJ5KGNvbnN0IHZvaWQqIGJhc2UpIGZpbmFs
OwogCi0gICAgdm9pZCByZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQoc2l6ZV90KTsKKyAgICB2b2lk
IHJlcG9ydEV4dHJhTWVtb3J5VmlzaXRlZChzaXplX3QpIGZpbmFsOwogI2lmIEVOQUJMRShSRVNP
VVJDRV9VU0FHRSkKLSAgICB2b2lkIHJlcG9ydEV4dGVybmFsTWVtb3J5VmlzaXRlZChzaXplX3Qp
OworICAgIHZvaWQgcmVwb3J0RXh0ZXJuYWxNZW1vcnlWaXNpdGVkKHNpemVfdCkgZmluYWw7CiAj
ZW5kaWYKICAgICAKLSAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICB2b2lk
IGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdCBmaW5hbDsKIAotICAgIGJvb2wgaXNBbmFseXppbmdI
ZWFwKCkgY29uc3QgeyByZXR1cm4gISFtX2hlYXBBbmFseXplcjsgfQotICAgIEhlYXBBbmFseXpl
ciogaGVhcEFuYWx5emVyKCkgY29uc3QgeyByZXR1cm4gbV9oZWFwQW5hbHl6ZXI7IH0KKy8vICAg
IGJvb2wgaXNBbmFseXppbmdIZWFwKCkgY29uc3QgeyByZXR1cm4gISFtX2hlYXBBbmFseXplcjsg
fQorLy8gICAgSGVhcEFuYWx5emVyKiBoZWFwQW5hbHl6ZXIoKSBjb25zdCB7IHJldHVybiBtX2hl
YXBBbmFseXplcjsgfQogICAgIAotICAgIFJvb3RNYXJrUmVhc29uIHJvb3RNYXJrUmVhc29uKCkg
Y29uc3QgeyByZXR1cm4gbV9yb290TWFya1JlYXNvbjsgfQotICAgIHZvaWQgc2V0Um9vdE1hcmtS
ZWFzb24oUm9vdE1hcmtSZWFzb24gcmVhc29uKSB7IG1fcm9vdE1hcmtSZWFzb24gPSByZWFzb247
IH0KKy8vICAgIFJvb3RNYXJrUmVhc29uIHJvb3RNYXJrUmVhc29uKCkgY29uc3QgeyByZXR1cm4g
bV9yb290TWFya1JlYXNvbjsgfQorLy8gICAgdm9pZCBzZXRSb290TWFya1JlYXNvbihSb290TWFy
a1JlYXNvbiByZWFzb24pIHsgbV9yb290TWFya1JlYXNvbiA9IHJlYXNvbjsgfQogCi0gICAgSGVh
cFZlcnNpb24gbWFya2luZ1ZlcnNpb24oKSBjb25zdCB7IHJldHVybiBtX21hcmtpbmdWZXJzaW9u
OyB9CisvLyAgICBIZWFwVmVyc2lvbiBtYXJraW5nVmVyc2lvbigpIGNvbnN0IHsgcmV0dXJuIG1f
bWFya2luZ1ZlcnNpb247IH0KIAotICAgIGJvb2wgbXV0YXRvcklzU3RvcHBlZCgpIGNvbnN0IHsg
cmV0dXJuIG1fbXV0YXRvcklzU3RvcHBlZDsgfQorICAgIGJvb2wgbXV0YXRvcklzU3RvcHBlZCgp
IGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fbXV0YXRvcklzU3RvcHBlZDsgfQogICAgIAogICAgIExv
Y2smIHJpZ2h0VG9SdW4oKSB7IHJldHVybiBtX3JpZ2h0VG9SdW47IH0KICAgICAKQEAgLTE4MCwx
MCArMjA3LDEwIEBAIHB1YmxpYzoKICAgICAKICAgICB2b2lkIG9wdGltaXplRm9yU3RvcHBlZE11
dGF0b3IoKTsKICAgICAKLSAgICB2b2lkIGRpZFJhY2UoY29uc3QgVmlzaXRSYWNlS2V5Jik7Cisg
ICAgdm9pZCBkaWRSYWNlKGNvbnN0IFZpc2l0UmFjZUtleSYpIGZpbmFsOwogICAgIHZvaWQgZGlk
UmFjZShKU0NlbGwqIGNlbGwsIGNvbnN0IGNoYXIqIHJlYXNvbikgeyBkaWRSYWNlKFZpc2l0UmFj
ZUtleShjZWxsLCByZWFzb24pKTsgfQogICAgIAotICAgIHZvaWQgdmlzaXRBc0NvbnN0cmFpbnQo
Y29uc3QgSlNDZWxsKik7CisgICAgdm9pZCB2aXNpdEFzQ29uc3RyYWludChjb25zdCBKU0NlbGwq
KSBmaW5hbDsKICAgICAKICAgICBib29sIGRpZFJlYWNoVGVybWluYXRpb24oKTsKICAgICAKQEAg
LTE5MywxMSArMjIwLDExIEBAIHB1YmxpYzoKICAgICAKICAgICBjb25zdCBjaGFyKiBjb2RlTmFt
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29kZU5hbWUuZGF0YSgpOyB9CiAgICAgCi0gICAgSlNfRVhQ
T1JUX1BSSVZBVEUgdm9pZCBhZGRQYXJhbGxlbENvbnN0cmFpbnRUYXNrKFJlZlB0cjxTaGFyZWRU
YXNrPHZvaWQoU2xvdFZpc2l0b3ImKT4+KTsKKy8vICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQg
YWRkUGFyYWxsZWxDb25zdHJhaW50VGFzayhSZWZQdHI8U2hhcmVkVGFzazx2b2lkKEFic3RyYWN0
U2xvdFZpc2l0b3ImKT4+KTsKIAogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgUGFyYWxsZWxN
b2RlRW5hYmxlcjsKLSAgICBmcmllbmQgY2xhc3MgTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXI7Cisv
LyAgICBmcmllbmQgY2xhc3MgTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXI7CiAgICAgCiAgICAgdm9p
ZCBhcHBlbmRKU0NlbGxPckF1eGlsaWFyeShIZWFwQ2VsbCopOwogCkBAIC0yMzIsMzkgKzI1OSwz
OSBAQCBwcml2YXRlOgogCiAgICAgTWFya1N0YWNrQXJyYXkmIGNvcnJlc3BvbmRpbmdHbG9iYWxT
dGFjayhNYXJrU3RhY2tBcnJheSYpOwogCi0gICAgTWFya1N0YWNrQXJyYXkgbV9jb2xsZWN0b3JT
dGFjazsKLSAgICBNYXJrU3RhY2tBcnJheSBtX211dGF0b3JTdGFjazsKLSAgICAKLSAgICBzaXpl
X3QgbV9ieXRlc1Zpc2l0ZWQ7Ci0gICAgc2l6ZV90IG1fdmlzaXRDb3VudDsKKy8vICAgIE1hcmtT
dGFja0FycmF5IG1fY29sbGVjdG9yU3RhY2s7CisvLyAgICBNYXJrU3RhY2tBcnJheSBtX211dGF0
b3JTdGFjazsKKy8vCisvLyAgICBzaXplX3QgbV9ieXRlc1Zpc2l0ZWQ7CisvLyAgICBzaXplX3Qg
bV92aXNpdENvdW50OwogICAgIHNpemVfdCBtX25vbkNlbGxWaXNpdENvdW50IHsgMCB9OyAvLyBV
c2VkIGZvciBpbmNyZW1lbnRhbCBkcmFpbmluZywgaWdub3JlZCBvdGhlcndpc2UuCiAgICAgQ2hl
Y2tlZFNpemUgbV9leHRyYU1lbW9yeVNpemUgeyAwIH07CiAgICAgYm9vbCBtX2lzSW5QYXJhbGxl
bE1vZGU7CiAgICAgYm9vbCBtX2lnbm9yZU5ld09wYXF1ZVJvb3RzIHsgZmFsc2UgfTsgLy8gVXNl
ZnVsIGFzIGEgZGVidWdnaW5nIG1vZGUuCiAKLSAgICBIZWFwVmVyc2lvbiBtX21hcmtpbmdWZXJz
aW9uOwotICAgIAotICAgIEhlYXAmIG1faGVhcDsKKy8vICAgIEhlYXBWZXJzaW9uIG1fbWFya2lu
Z1ZlcnNpb247CisvLworLy8gICAgSGVhcCYgbV9oZWFwOwogCi0gICAgSGVhcEFuYWx5emVyKiBt
X2hlYXBBbmFseXplciB7IG51bGxwdHIgfTsKKy8vICAgIEhlYXBBbmFseXplciogbV9oZWFwQW5h
bHl6ZXIgeyBudWxscHRyIH07CiAgICAgSlNDZWxsKiBtX2N1cnJlbnRDZWxsIHsgbnVsbHB0ciB9
OwotICAgIFJvb3RNYXJrUmVhc29uIG1fcm9vdE1hcmtSZWFzb24geyBSb290TWFya1JlYXNvbjo6
Tm9uZSB9OworLy8gICAgUm9vdE1hcmtSZWFzb24gbV9yb290TWFya1JlYXNvbiB7IFJvb3RNYXJr
UmVhc29uOjpOb25lIH07CiAgICAgYm9vbCBtX2lzRmlyc3RWaXNpdCB7IGZhbHNlIH07CiAgICAg
Ym9vbCBtX211dGF0b3JJc1N0b3BwZWQgeyBmYWxzZSB9OwogICAgIGJvb2wgbV9jYW5PcHRpbWl6
ZUZvclN0b3BwZWRNdXRhdG9yIHsgZmFsc2UgfTsKICAgICBMb2NrIG1fcmlnaHRUb1J1bjsKICAg
ICAKLSAgICBDU3RyaW5nIG1fY29kZU5hbWU7CisvLyAgICBDU3RyaW5nIG1fY29kZU5hbWU7CiAg
ICAgCi0gICAgTWFya2luZ0NvbnN0cmFpbnQqIG1fY3VycmVudENvbnN0cmFpbnQgeyBudWxscHRy
IH07Ci0gICAgTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXIqIG1fY3VycmVudFNvbHZlciB7IG51bGxw
dHIgfTsKKy8vICAgIE1hcmtpbmdDb25zdHJhaW50KiBtX2N1cnJlbnRDb25zdHJhaW50IHsgbnVs
bHB0ciB9OworLy8gICAgTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXIqIG1fY3VycmVudFNvbHZlciB7
IG51bGxwdHIgfTsKICAgICAKICAgICAvLyBQdXQgcGFkZGluZyBoZXJlIHRvIG1pdGlnYXRlIGZh
bHNlIHNoYXJpbmcgYmV0d2VlbiBtdWx0aXBsZSBTbG90VmlzaXRvcnMuCiAgICAgY2hhciBwYWRk
aW5nWzY0XTsKLXB1YmxpYzoKKy8vcHVibGljOgogI2lmIEFTU0VSVF9FTkFCTEVECi0gICAgYm9v
bCBtX2lzQ2hlY2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlvbjsKLSAgICBib29sIG1faXNEcmFp
bmluZzsKKyAgICBib29sIG1faXNDaGVja2luZ0ZvckRlZmF1bHRNYXJrVmlvbGF0aW9uIHsgZmFs
c2UgfTsKKy8vICAgIGJvb2wgbV9pc0RyYWluaW5nOwogI2VuZGlmCiB9OwogCkBAIC0yODcsMjMg
KzMxNCwyMyBAQCBwcml2YXRlOgogICAgIFNsb3RWaXNpdG9yJiBtX3N0YWNrOwogfTsKIAotY2xh
c3MgU2V0Um9vdE1hcmtSZWFzb25TY29wZSB7Ci1wdWJsaWM6Ci0gICAgU2V0Um9vdE1hcmtSZWFz
b25TY29wZShTbG90VmlzaXRvciYgdmlzaXRvciwgU2xvdFZpc2l0b3I6OlJvb3RNYXJrUmVhc29u
IHJlYXNvbikKLSAgICAgICAgOiBtX3Zpc2l0b3IodmlzaXRvcikKLSAgICAgICAgLCBtX3ByZXZp
b3VzUmVhc29uKHZpc2l0b3Iucm9vdE1hcmtSZWFzb24oKSkKLSAgICB7Ci0gICAgICAgIG1fdmlz
aXRvci5zZXRSb290TWFya1JlYXNvbihyZWFzb24pOwotICAgIH0KLQotICAgIH5TZXRSb290TWFy
a1JlYXNvblNjb3BlKCkKLSAgICB7Ci0gICAgICAgIG1fdmlzaXRvci5zZXRSb290TWFya1JlYXNv
bihtX3ByZXZpb3VzUmVhc29uKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgU2xvdFZpc2l0b3Im
IG1fdmlzaXRvcjsKLSAgICBTbG90VmlzaXRvcjo6Um9vdE1hcmtSZWFzb24gbV9wcmV2aW91c1Jl
YXNvbjsKLX07Ci0KKy8vY2xhc3MgU2V0Um9vdE1hcmtSZWFzb25TY29wZSB7CisvL3B1YmxpYzoK
Ky8vICAgIFNldFJvb3RNYXJrUmVhc29uU2NvcGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IsIFNsb3RW
aXNpdG9yOjpSb290TWFya1JlYXNvbiByZWFzb24pCisvLyAgICAgICAgOiBtX3Zpc2l0b3Iodmlz
aXRvcikKKy8vICAgICAgICAsIG1fcHJldmlvdXNSZWFzb24odmlzaXRvci5yb290TWFya1JlYXNv
bigpKQorLy8gICAgeworLy8gICAgICAgIG1fdmlzaXRvci5zZXRSb290TWFya1JlYXNvbihyZWFz
b24pOworLy8gICAgfQorLy8KKy8vICAgIH5TZXRSb290TWFya1JlYXNvblNjb3BlKCkKKy8vICAg
IHsKKy8vICAgICAgICBtX3Zpc2l0b3Iuc2V0Um9vdE1hcmtSZWFzb24obV9wcmV2aW91c1JlYXNv
bik7CisvLyAgICB9CisvLworLy9wcml2YXRlOgorLy8gICAgU2xvdFZpc2l0b3ImIG1fdmlzaXRv
cjsKKy8vICAgIFNsb3RWaXNpdG9yOjpSb290TWFya1JlYXNvbiBtX3ByZXZpb3VzUmVhc29uOwor
Ly99OworLy8KIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmgJKHJldmlzaW9uIDI3MTM2OCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9ySW5saW5lcy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yNSw5ICsyNSwxMCBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgIkFic3Ry
YWN0U2xvdFZpc2l0b3JJbmxpbmVzLmgiCiAjaW5jbHVkZSAiU2xvdFZpc2l0b3IuaCIKLSNpbmNs
dWRlICJXZWFrLmgiCi0jaW5jbHVkZSAiV2Vha0lubGluZXMuaCIKKy8vI2luY2x1ZGUgIldlYWsu
aCIKKy8vI2luY2x1ZGUgIldlYWtJbmxpbmVzLmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC05
Nyw0MiArOTgsNDIgQEAgQUxXQVlTX0lOTElORSB2b2lkIFNsb3RWaXNpdG9yOjphcHBlbmRIaQog
ICAgIGFwcGVuZEhpZGRlblNsb3coY2VsbCwgZGVwZW5kZW5jeSk7CiB9CiAKLXRlbXBsYXRlPHR5
cGVuYW1lIFQ+Ci1BTFdBWVNfSU5MSU5FIHZvaWQgU2xvdFZpc2l0b3I6OmFwcGVuZChjb25zdCBX
ZWFrPFQ+JiB3ZWFrKQotewotICAgIGFwcGVuZFVuYmFycmllcmVkKHdlYWsuZ2V0KCkpOwotfQot
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBUcmFpdHM+Ci1BTFdBWVNfSU5MSU5FIHZv
aWQgU2xvdFZpc2l0b3I6OmFwcGVuZChjb25zdCBXcml0ZUJhcnJpZXJCYXNlPFQsIFRyYWl0cz4m
IHNsb3QpCi17Ci0gICAgYXBwZW5kVW5iYXJyaWVyZWQoc2xvdC5nZXQoKSk7Ci19Ci0KLXRlbXBs
YXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFRyYWl0cz4KLUFMV0FZU19JTkxJTkUgdm9pZCBTbG90
VmlzaXRvcjo6YXBwZW5kSGlkZGVuKGNvbnN0IFdyaXRlQmFycmllckJhc2U8VCwgVHJhaXRzPiYg
c2xvdCkKLXsKLSAgICBhcHBlbmRIaWRkZW5VbmJhcnJpZXJlZChzbG90LmdldCgpKTsKLX0KLQot
dGVtcGxhdGU8dHlwZW5hbWUgSXRlcmF0b3I+Ci1BTFdBWVNfSU5MSU5FIHZvaWQgU2xvdFZpc2l0
b3I6OmFwcGVuZChJdGVyYXRvciBiZWdpbiwgSXRlcmF0b3IgZW5kKQotewotICAgIGZvciAoYXV0
byBpdCA9IGJlZ2luOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIGFwcGVuZCgqaXQpOwotfQot
Ci1BTFdBWVNfSU5MSU5FIHZvaWQgU2xvdFZpc2l0b3I6OmFwcGVuZFZhbHVlcyhjb25zdCBXcml0
ZUJhcnJpZXJCYXNlPFVua25vd24+KiBiYXJyaWVycywgc2l6ZV90IGNvdW50KQotewotICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgY291bnQ7ICsraSkKLSAgICAgICAgYXBwZW5kKGJhcnJpZXJz
W2ldKTsKLX0KLQotQUxXQVlTX0lOTElORSB2b2lkIFNsb3RWaXNpdG9yOjphcHBlbmRWYWx1ZXNI
aWRkZW4oY29uc3QgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiogYmFycmllcnMsIHNpemVfdCBj
b3VudCkKLXsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpCi0gICAgICAg
IGFwcGVuZEhpZGRlbihiYXJyaWVyc1tpXSk7Ci19CisvL3RlbXBsYXRlPHR5cGVuYW1lIFQ+Cisv
L0FMV0FZU19JTkxJTkUgdm9pZCBTbG90VmlzaXRvcjo6YXBwZW5kKGNvbnN0IFdlYWs8VD4mIHdl
YWspCisvL3sKKy8vICAgIGFwcGVuZFVuYmFycmllcmVkKHdlYWsuZ2V0KCkpOworLy99CisvLwor
Ly90ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBUcmFpdHM+CisvL0FMV0FZU19JTkxJTkUg
dm9pZCBTbG90VmlzaXRvcjo6YXBwZW5kKGNvbnN0IFdyaXRlQmFycmllckJhc2U8VCwgVHJhaXRz
PiYgc2xvdCkKKy8veworLy8gICAgYXBwZW5kVW5iYXJyaWVyZWQoc2xvdC5nZXQoKSk7CisvL30K
Ky8vCisvL3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFRyYWl0cz4KKy8vQUxXQVlTX0lO
TElORSB2b2lkIFNsb3RWaXNpdG9yOjphcHBlbmRIaWRkZW4oY29uc3QgV3JpdGVCYXJyaWVyQmFz
ZTxULCBUcmFpdHM+JiBzbG90KQorLy97CisvLyAgICBhcHBlbmRIaWRkZW5VbmJhcnJpZXJlZChz
bG90LmdldCgpKTsKKy8vfQorLy8KKy8vdGVtcGxhdGU8dHlwZW5hbWUgSXRlcmF0b3I+CisvL0FM
V0FZU19JTkxJTkUgdm9pZCBTbG90VmlzaXRvcjo6YXBwZW5kKEl0ZXJhdG9yIGJlZ2luLCBJdGVy
YXRvciBlbmQpCisvL3sKKy8vICAgIGZvciAoYXV0byBpdCA9IGJlZ2luOyBpdCAhPSBlbmQ7ICsr
aXQpCisvLyAgICAgICAgYXBwZW5kKCppdCk7CisvL30KKworLy9BTFdBWVNfSU5MSU5FIHZvaWQg
U2xvdFZpc2l0b3I6OmFwcGVuZFZhbHVlcyhjb25zdCBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+
KiBiYXJyaWVycywgc2l6ZV90IGNvdW50KQorLy97CisvLyAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGNvdW50OyArK2kpCisvLyAgICAgICAgYXBwZW5kKGJhcnJpZXJzW2ldKTsKKy8vfQorLy8K
Ky8vQUxXQVlTX0lOTElORSB2b2lkIFNsb3RWaXNpdG9yOjphcHBlbmRWYWx1ZXNIaWRkZW4oY29u
c3QgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiogYmFycmllcnMsIHNpemVfdCBjb3VudCkKKy8v
eworLy8gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKQorLy8gICAgICAgIGFw
cGVuZEhpZGRlbihiYXJyaWVyc1tpXSk7CisvL30KIAogaW5saW5lIGJvb2wgU2xvdFZpc2l0b3I6
OmFkZE9wYXF1ZVJvb3Qodm9pZCogcHRyKQogewpAQCAtMTY5LDIwICsxNzAsMjAgQEAgaW5saW5l
IHZvaWQgU2xvdFZpc2l0b3I6OnJlcG9ydEV4dGVybmFsTQogfQogI2VuZGlmCiAKLWlubGluZSBI
ZWFwKiBTbG90VmlzaXRvcjo6aGVhcCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuICZtX2hlYXA7Ci19
Ci0KLWlubGluZSBWTSYgU2xvdFZpc2l0b3I6OnZtKCkKLXsKLSAgICByZXR1cm4gbV9oZWFwLnZt
KCk7Ci19Ci0KLWlubGluZSBjb25zdCBWTSYgU2xvdFZpc2l0b3I6OnZtKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gbV9oZWFwLnZtKCk7Ci19CisvL2lubGluZSBIZWFwKiBTbG90VmlzaXRvcjo6aGVh
cCgpIGNvbnN0CisvL3sKKy8vICAgIHJldHVybiAmbV9oZWFwOworLy99CisvLworLy9pbmxpbmUg
Vk0mIFNsb3RWaXNpdG9yOjp2bSgpCisvL3sKKy8vICAgIHJldHVybiBtX2hlYXAudm0oKTsKKy8v
fQorLy8KKy8vaW5saW5lIGNvbnN0IFZNJiBTbG90VmlzaXRvcjo6dm0oKSBjb25zdAorLy97Cisv
LyAgICByZXR1cm4gbV9oZWFwLnZtKCk7CisvL30KIAogdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4K
IEl0ZXJhdGlvblN0YXR1cyBTbG90VmlzaXRvcjo6Zm9yRWFjaE1hcmtTdGFjayhjb25zdCBGdW5j
JiBmdW5jKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3JNYWNy
b3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRv
ck1hY3Jvcy5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Ns
b3RWaXNpdG9yTWFjcm9zLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMTcgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKwor
bmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEFic3RyYWN0U2xvdFZpc2l0b3I7CitjbGFzcyBKU0Nl
bGw7CitjbGFzcyBTbG90VmlzaXRvcjsKKworI2RlZmluZSBERUNMQVJFX1VOVVNFRF9TTE9UX1ZJ
U0lUT1JfU1RSVUNUX0VYUEFOREVSMihjb3VudGVyXykgXAorICAgIHN0cnVjdCBVbnVzZWRTbG90
VmlzaXRvclN0cnVjdFNvV2VDYW5IYXZlQVNlbWljb2xvbiMjY291bnRlcl8geyB9CisKKyNkZWZp
bmUgREVDTEFSRV9VTlVTRURfU0xPVF9WSVNJVE9SX1NUUlVDVF9FWFBBTkRFUihjb3VudGVyXykg
XAorICAgIERFQ0xBUkVfVU5VU0VEX1NMT1RfVklTSVRPUl9TVFJVQ1RfRVhQQU5ERVIyKGNvdW50
ZXJfKQorCisjZGVmaW5lIERFQ0xBUkVfVU5VU0VEX1NMT1RfVklTSVRPUl9TVFJVQ1QoKSBcCisg
ICAgREVDTEFSRV9VTlVTRURfU0xPVF9WSVNJVE9SX1NUUlVDVF9FWFBBTkRFUihfX0NPVU5URVJf
XykKKworLy8gTWFjcm9zIGZvciBpbnN0YW5jZSBjdXN0b20gdmlzaXRvciBtZXRob2QuCisKKyNk
ZWZpbmUgREVDTEFSRV9JTlNUQU5DRV9TTE9UX1ZJU0lUT1JfTUVUSE9EX0lNUEwocmV0dXJuVHlw
ZV8sIG1ldGhvZE5hbWVfLCBwb3N0TW9kaWZpZXJfKSBcCisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
VmlzaXRvcj4gcmV0dXJuVHlwZV8gbWV0aG9kTmFtZV8jI0ltcGwoVmlzaXRvciYgdmlzaXRvcik7
IFwKKyAgICByZXR1cm5UeXBlXyBtZXRob2ROYW1lXyhTbG90VmlzaXRvciYpIHBvc3RNb2RpZmll
cl87IFwKKyAgICByZXR1cm5UeXBlXyBtZXRob2ROYW1lXyhBYnN0cmFjdFNsb3RWaXNpdG9yJikg
cG9zdE1vZGlmaWVyXzsgXAorICAgIERFQ0xBUkVfVU5VU0VEX1NMT1RfVklTSVRPUl9TVFJVQ1Qo
KQorCisjZGVmaW5lIERFQ0xBUkVfSU5TVEFOQ0VfU0xPVF9WSVNJVE9SX01FVEhPRChyZXR1cm5U
eXBlXywgbWV0aG9kTmFtZV8pIFwKKyAgICBERUNMQVJFX0lOU1RBTkNFX1NMT1RfVklTSVRPUl9N
RVRIT0RfSU1QTChyZXR1cm5UeXBlXywgbWV0aG9kTmFtZV8sICkKKworCisjZGVmaW5lIERFRklO
RV9JTlNUQU5DRV9TTE9UX1ZJU0lUT1JfTUVUSE9EKHJldHVyblR5cGVfLCBjbGFzc05hbWVfLCBt
ZXRob2ROYW1lXykgXAorICAgIHJldHVyblR5cGVfIGNsYXNzTmFtZV86Om1ldGhvZE5hbWVfKFNs
b3RWaXNpdG9yJiB2aXNpdG9yKSB7IG1ldGhvZE5hbWVfIyNJbXBsKHZpc2l0b3IpOyB9IFwKKyAg
ICByZXR1cm5UeXBlXyBjbGFzc05hbWVfOjptZXRob2ROYW1lXyhBYnN0cmFjdFNsb3RWaXNpdG9y
JiB2aXNpdG9yKSAgeyBtZXRob2ROYW1lXyMjSW1wbCh2aXNpdG9yKTsgfSBcCisgICAgREVDTEFS
RV9VTlVTRURfU0xPVF9WSVNJVE9SX1NUUlVDVCgpCisKKy8vIE1hY3JvcyBmb3IgaW5zdGFuY2Ug
dmlzaXRDaGlsZHJlbigpLgorCisjZGVmaW5lIERFQ0xBUkVfSU5TVEFOQ0VfVklTSVRfQ0hJTERS
RU4gXAorICAgIERFQ0xBUkVfSU5TVEFOQ0VfU0xPVF9WSVNJVE9SX01FVEhPRCh2b2lkLCB2aXNp
dENoaWxkcmVuKQorCisKKyNkZWZpbmUgREVGSU5FX0lOU1RBTkNFX1ZJU0lUX0NISUxEUkVOKGNs
YXNzTmFtZV8pIFwKKyAgICBERUZJTkVfSU5TVEFOQ0VfU0xPVF9WSVNJVE9SX01FVEhPRCh2b2lk
LCBjbGFzc05hbWVfLCB2aXNpdENoaWxkcmVuKQorCisvLyBNYWNyb3MgZm9yIHN0YXRpYyB2aXNp
dENoaWxkcmVuKCkuCisKKyNkZWZpbmUgREVDTEFSRV9WSVNJVF9DSElMRFJFTl9JTVBMIFwKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuSW1w
bChKU0NlbGwqLCBWaXNpdG9yJikKKworI2RlZmluZSBERUNMQVJFX1ZJU0lUX0NISUxEUkVOIFwK
KyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOX0lNUEw7IFwKKyAgICBzdGF0aWMgdm9pZCB2aXNp
dENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcik7IFwK
KyAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3Im
IHZpc2l0b3IpCisKKyNkZWZpbmUgREVDTEFSRV9FWFBPUlRfVklTSVRfQ0hJTERSRU4gXAorICAg
IERFQ0xBUkVfVklTSVRfQ0hJTERSRU5fSU1QTDsgXAorICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0
YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgQWJzdHJhY3RTbG90VmlzaXRvciYpOyBc
CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwq
LCBTbG90VmlzaXRvciYpCisKKyNkZWZpbmUgREVDTEFSRV9JTkxJTkVfVklTSVRfQ0hJTERSRU4g
XAorICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU5fSU1QTDsgXAorICAgIGlubGluZSBzdGF0aWMg
dm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIEFic3RyYWN0U2xvdFZpc2l0b3ImKTsgXAorICAg
IGlubGluZSBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJikK
KworI2RlZmluZSBERUNMQVJFX1RFTVBMQVRFX1ZJU0lUX0NISUxEUkVOIFwKKyAgICBERUNMQVJF
X1ZJU0lUX0NISUxEUkVOCisKKworI2RlZmluZSBERUZJTkVfVklTSVRfQ0hJTERSRU4oY2xhc3NO
YW1lXykgXAorICAgIHZvaWQgY2xhc3NOYW1lXzo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGws
IEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsgdmlzaXRDaGlsZHJlbkltcGwoY2VsbCwg
dmlzaXRvcik7IH0gXAorICAgIHZvaWQgY2xhc3NOYW1lXzo6dmlzaXRDaGlsZHJlbihKU0NlbGwq
IGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKSB7IHZpc2l0Q2hpbGRyZW5JbXBsKGNlbGwsIHZp
c2l0b3IpOyB9IFwKKyAgICBERUNMQVJFX1VOVVNFRF9TTE9UX1ZJU0lUT1JfU1RSVUNUKCkKKwor
I2RlZmluZSBERUZJTkVfRVhQT1JUX1ZJU0lUX0NISUxEUkVOKGNsYXNzTmFtZV8pIFwKKyAgICBK
U19FWFBPUlRfUFJJVkFURSB2b2lkIGNsYXNzTmFtZV86OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBj
ZWxsLCBBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKSB7IHZpc2l0Q2hpbGRyZW5JbXBsKGNl
bGwsIHZpc2l0b3IpOyB9IFwKKyAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGNsYXNzTmFtZV86
OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikgeyB2aXNp
dENoaWxkcmVuSW1wbChjZWxsLCB2aXNpdG9yKTsgfSBcCisgICAgREVDTEFSRV9VTlVTRURfU0xP
VF9WSVNJVE9SX1NUUlVDVCgpCisKKyNkZWZpbmUgREVGSU5FX0lOTElORV9WSVNJVF9DSElMRFJF
TihjbGFzc05hbWVfKSBcCisgICAgaW5saW5lIHZvaWQgY2xhc3NOYW1lXzo6dmlzaXRDaGlsZHJl
bihKU0NlbGwqIGNlbGwsIEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsgdmlzaXRDaGls
ZHJlbkltcGwoY2VsbCwgdmlzaXRvcik7IH0gXAorICAgIGlubGluZSB2b2lkIGNsYXNzTmFtZV86
OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikgeyB2aXNp
dENoaWxkcmVuSW1wbChjZWxsLCB2aXNpdG9yKTsgfSBcCisgICAgREVDTEFSRV9VTlVTRURfU0xP
VF9WSVNJVE9SX1NUUlVDVCgpCisKKyNkZWZpbmUgREVGSU5FX1RFTVBMQVRFX1ZJU0lUX0NISUxE
UkVOKHRlbXBsYXRlQ2xhdXNlXywgY2xhc3NOYW1lXykgXAorICAgIHRlbXBsYXRlQ2xhdXNlXyB2
b2lkIGNsYXNzTmFtZV86OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBBYnN0cmFjdFNsb3RW
aXNpdG9yJiB2aXNpdG9yKSB7IHZpc2l0Q2hpbGRyZW5JbXBsKGNlbGwsIHZpc2l0b3IpOyB9IFwK
KyAgICB0ZW1wbGF0ZUNsYXVzZV8gdm9pZCBjbGFzc05hbWVfOjp2aXNpdENoaWxkcmVuKEpTQ2Vs
bCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsgdmlzaXRDaGlsZHJlbkltcGwoY2VsbCwg
dmlzaXRvcik7IH0gXAorICAgIERFQ0xBUkVfVU5VU0VEX1NMT1RfVklTSVRPUl9TVFJVQ1QoKQor
Cit9IC8vIG5hbWVzcGFjZSBKU0MKKwordXNpbmcgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yOwor
dXNpbmcgSlNDOjpKU0NlbGw7Cit1c2luZyBKU0M6OlNsb3RWaXNpdG9yOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvU3Vic3BhY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9TdWJzcGFjZS5oCShyZXZpc2lvbiAyNzEzNjgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9TdWJzcGFjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICsz
NCw3IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCitjbGFzcyBBYnN0cmFjdFNsb3RWaXNpdG9yOyAv
LyBtbGFtCiBjbGFzcyBBbGlnbmVkTWVtb3J5QWxsb2NhdG9yOwogY2xhc3MgSGVhcENlbGxUeXBl
OwogCkBAIC04Nyw3ICs4OCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGZvckVhY2hNYXJrZWRDZWxs
KGNvbnN0IEZ1bmMmKTsKICAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgotICAgIFJl
ZjxTaGFyZWRUYXNrPHZvaWQoU2xvdFZpc2l0b3ImKT4+IGZvckVhY2hNYXJrZWRDZWxsSW5QYXJh
bGxlbChjb25zdCBGdW5jJik7CisgICAgUmVmPFNoYXJlZFRhc2s8dm9pZChBYnN0cmFjdFNsb3RW
aXNpdG9yJik+PiBmb3JFYWNoTWFya2VkQ2VsbEluUGFyYWxsZWwoY29uc3QgRnVuYyYpOwogCiAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KICAgICB2b2lkIGZvckVhY2hMaXZlQ2VsbChjb25z
dCBGdW5jJik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdWJzcGFjZUlubGlu
ZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdWJzcGFjZUlu
bGluZXMuaAkocmV2aXNpb24gMjcxMzY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
U3Vic3BhY2VJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTg2LDkgKzg2LDkgQEAgdm9pZCBT
dWJzcGFjZTo6Zm9yRWFjaE1hcmtlZENlbGwoY29uc3QgRgogfQogCiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBGdW5jPgotUmVmPFNoYXJlZFRhc2s8dm9pZChTbG90VmlzaXRvciYpPj4gU3Vic3BhY2U6OmZv
ckVhY2hNYXJrZWRDZWxsSW5QYXJhbGxlbChjb25zdCBGdW5jJiBmdW5jKQorUmVmPFNoYXJlZFRh
c2s8dm9pZChBYnN0cmFjdFNsb3RWaXNpdG9yJik+PiBTdWJzcGFjZTo6Zm9yRWFjaE1hcmtlZENl
bGxJblBhcmFsbGVsKGNvbnN0IEZ1bmMmIGZ1bmMpCiB7Ci0gICAgY2xhc3MgVGFzayBmaW5hbCA6
IHB1YmxpYyBTaGFyZWRUYXNrPHZvaWQoU2xvdFZpc2l0b3ImKT4geworICAgIGNsYXNzIFRhc2sg
ZmluYWwgOiBwdWJsaWMgU2hhcmVkVGFzazx2b2lkKEFic3RyYWN0U2xvdFZpc2l0b3ImKT4gewog
ICAgIHB1YmxpYzoKICAgICAgICAgVGFzayhTdWJzcGFjZSYgc3Vic3BhY2UsIGNvbnN0IEZ1bmMm
IGZ1bmMpCiAgICAgICAgICAgICA6IG1fc3Vic3BhY2Uoc3Vic3BhY2UpCkBAIC05Nyw3ICs5Nyw3
IEBAIFJlZjxTaGFyZWRUYXNrPHZvaWQoU2xvdFZpc2l0b3ImKT4+IFN1YnMKICAgICAgICAgewog
ICAgICAgICB9CiAgICAgICAgIAotICAgICAgICB2b2lkIHJ1bihTbG90VmlzaXRvciYgdmlzaXRv
cikgZmluYWwKKyAgICAgICAgdm9pZCBydW4oQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikg
ZmluYWwKICAgICAgICAgewogICAgICAgICAgICAgd2hpbGUgKE1hcmtlZEJsb2NrOjpIYW5kbGUq
IGhhbmRsZSA9IG1fYmxvY2tTb3VyY2UtPnJ1bigpKSB7CiAgICAgICAgICAgICAgICAgaGFuZGxl
LT5mb3JFYWNoTWFya2VkQ2VsbCgKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Zp
c2l0Q291bnRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Zp
c2l0Q291bnRlci5oCShyZXZpc2lvbiAyNzEzNjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9WaXNpdENvdW50ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjUsNyArMjUsNyBAQAogCiAj
cHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgIlNsb3RWaXNpdG9yLmgiCisjaW5jbHVkZSAiQWJzdHJh
Y3RTbG90VmlzaXRvci5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIApAQCAtMzMsMTMgKzMzLDEzIEBA
IGNsYXNzIFZpc2l0Q291bnRlciB7CiBwdWJsaWM6CiAgICAgVmlzaXRDb3VudGVyKCkgeyB9CiAg
ICAgCi0gICAgVmlzaXRDb3VudGVyKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorICAgIFZpc2l0Q291
bnRlcihBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogICAgICAgICA6IG1fdmlzaXRvcigm
dmlzaXRvcikKICAgICAgICAgLCBtX2luaXRpYWxWaXNpdENvdW50KHZpc2l0b3IudmlzaXRDb3Vu
dCgpKQogICAgIHsKICAgICB9CiAgICAgCi0gICAgU2xvdFZpc2l0b3ImIHZpc2l0b3IoKSBjb25z
dCB7IHJldHVybiAqbV92aXNpdG9yOyB9CisgICAgQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRv
cigpIGNvbnN0IHsgcmV0dXJuICptX3Zpc2l0b3I7IH0KICAgICAKICAgICBzaXplX3QgdmlzaXRD
b3VudCgpIGNvbnN0CiAgICAgewpAQCAtNDcsNyArNDcsNyBAQCBwdWJsaWM6CiAgICAgfQogICAg
IAogcHJpdmF0ZToKLSAgICBTbG90VmlzaXRvciogbV92aXNpdG9yIHsgbnVsbHB0ciB9OworICAg
IEFic3RyYWN0U2xvdFZpc2l0b3IqIG1fdmlzaXRvciB7IG51bGxwdHIgfTsKICAgICBzaXplX3Qg
bV9pbml0aWFsVmlzaXRDb3VudCB7IDAgfTsKIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL1dlYWtCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvV2Vha0Jsb2NrLmNwcAkocmV2aXNpb24gMjcxMzY4KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvV2Vha0Jsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTgsOCArOTgs
OCBAQCB2b2lkIFdlYWtCbG9jazo6c3dlZXAoKQogICAgIEFTU0VSVCghbV9zd2VlcFJlc3VsdC5p
c051bGwoKSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIENvbnRhaW5lclR5cGU+Ci12b2lkIFdl
YWtCbG9jazo6c3BlY2lhbGl6ZWRWaXNpdChDb250YWluZXJUeXBlJiBjb250YWluZXIsIFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgQ29udGFpbmVyVHlwZSwgdHlwZW5h
bWUgVmlzaXRvcj4KK3ZvaWQgV2Vha0Jsb2NrOjpzcGVjaWFsaXplZFZpc2l0KENvbnRhaW5lclR5
cGUmIGNvbnRhaW5lciwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBIZWFwVmVyc2lvbiBtYXJr
aW5nVmVyc2lvbiA9IHZpc2l0b3IubWFya2luZ1ZlcnNpb24oKTsKIApAQCAtMTM0LDcgKzEzNCw5
IEBAIHZvaWQgV2Vha0Jsb2NrOjpzcGVjaWFsaXplZFZpc2l0KENvbnRhaW4KICAgICB9CiB9CiAK
LXZvaWQgV2Vha0Jsb2NrOjp2aXNpdChTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vdGVtcGxhdGU8
dHlwZW5hbWUgVmlzaXRvcj4KKy8vdm9pZCBXZWFrQmxvY2s6OnZpc2l0KFZpc2l0b3ImIHZpc2l0
b3IpCit2b2lkIFdlYWtCbG9jazo6dmlzaXQxKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3Ip
CiB7CiAgICAgLy8gSWYgYSBibG9jayBpcyBjb21wbGV0ZWx5IGVtcHR5LCBhIHZpc2l0IHdvbid0
IGhhdmUgYW55IGVmZmVjdC4KICAgICBpZiAoaXNFbXB0eSgpKQpAQCAtMTQ5LDYgKzE1MSw5IEBA
IHZvaWQgV2Vha0Jsb2NrOjp2aXNpdChTbG90VmlzaXRvciYgdmlzaXQKICAgICAgICAgc3BlY2lh
bGl6ZWRWaXNpdChtX2NvbnRhaW5lci5tYXJrZWRCbG9jaygpLCB2aXNpdG9yKTsKIH0KIAorLy90
ZW1wbGF0ZSB2b2lkIFdlYWtCbG9jazo6dmlzaXQoU2xvdFZpc2l0b3ImKTsKKy8vdGVtcGxhdGUg
dm9pZCBXZWFrQmxvY2s6OnZpc2l0KERlYnVnU2xvdFZpc2l0b3ImKTsKKwogdm9pZCBXZWFrQmxv
Y2s6OnJlYXAoKQogewogICAgIC8vIElmIGEgYmxvY2sgaXMgY29tcGxldGVseSBlbXB0eSwgYSBy
ZWFwaW5nIHdvbid0IGhhdmUgYW55IGVmZmVjdC4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL1dlYWtCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL1dlYWtCbG9jay5oCShyZXZpc2lvbiAyNzEzNjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9XZWFrQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMzIsOCArMzIsOSBAQAogCiBu
YW1lc3BhY2UgSlNDIHsKIAorY2xhc3MgQWJzdHJhY3RTbG90VmlzaXRvcjsKIGNsYXNzIEhlYXA7
Ci1jbGFzcyBTbG90VmlzaXRvcjsKKy8vY2xhc3MgU2xvdFZpc2l0b3I7CiAKIERFQ0xBUkVfQUxM
T0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKFdlYWtCbG9jayk7CiAKQEAgLTY1LDcgKzY2LDgg
QEAgcHVibGljOgogICAgIHZvaWQgc3dlZXAoKTsKICAgICBTd2VlcFJlc3VsdCB0YWtlU3dlZXBS
ZXN1bHQoKTsKIAotICAgIHZvaWQgdmlzaXQoU2xvdFZpc2l0b3ImKTsKKy8vICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgdmlzaXQoVmlzaXRvciYpOworICAgIHZvaWQgdmlzaXQx
KEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKIAogICAgIHZvaWQgcmVhcCgpOwogCkBAIC03NSw4ICs3
Nyw4IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgc3RhdGljIEZyZWVDZWxsKiBhc0ZyZWVDZWxs
KFdlYWtJbXBsKik7CiAgICAgCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgQ29udGFpbmVyVHlwZT4K
LSAgICB2b2lkIHNwZWNpYWxpemVkVmlzaXQoQ29udGFpbmVyVHlwZSYsIFNsb3RWaXNpdG9yJik7
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ29udGFpbmVyVHlwZSwgdHlwZW5hbWUgVmlzaXRvcj4K
KyAgICB2b2lkIHNwZWNpYWxpemVkVmlzaXQoQ29udGFpbmVyVHlwZSYsIFZpc2l0b3ImKTsKIAog
ICAgIGV4cGxpY2l0IFdlYWtCbG9jayhDZWxsQ29udGFpbmVyKTsKICAgICB2b2lkIGZpbmFsaXpl
KFdlYWtJbXBsKik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrSGFuZGxl
T3duZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtI
YW5kbGVPd25lci5jcHAJKHJldmlzaW9uIDI3MTM2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL1dlYWtIYW5kbGVPd25lci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDcgKzM1LDcg
QEAgV2Vha0hhbmRsZU93bmVyOjp+V2Vha0hhbmRsZU93bmVyKCkKIHsKIH0KIAotYm9vbCBXZWFr
SGFuZGxlT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEhhbmRsZTxVbmtub3duPiwg
dm9pZCosIFNsb3RWaXNpdG9yJiwgY29uc3QgY2hhcioqKQorYm9vbCBXZWFrSGFuZGxlT3duZXI6
OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEhhbmRsZTxVbmtub3duPiwgdm9pZCosIEFic3Ry
YWN0U2xvdFZpc2l0b3ImLCBjb25zdCBjaGFyKiopCiB7CiAgICAgcmV0dXJuIGZhbHNlOwogfQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha0hhbmRsZU93bmVyLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha0hhbmRsZU93bmVyLmgJKHJl
dmlzaW9uIDI3MTM2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtIYW5kbGVP
d25lci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSwxMyArMjksMTMgQEAKIAogbmFtZXNwYWNlIEpT
QyB7CiAKLWNsYXNzIFNsb3RWaXNpdG9yOworY2xhc3MgQWJzdHJhY3RTbG90VmlzaXRvcjsKIAog
Y2xhc3MgSlNfRVhQT1JUX1BSSVZBVEUgV2Vha0hhbmRsZU93bmVyIHsKIHB1YmxpYzoKICAgICB2
aXJ0dWFsIH5XZWFrSGFuZGxlT3duZXIoKTsKICAgICAvLyByZWFzb24gd2lsbCBvbmx5IGJlIG5v
bi1udWxsIHdoZW4gZ2VuZXJhdGluZyBhIGRlYnVnIEdDIGhlYXAgc25hcHNob3QuCi0gICAgdmly
dHVhbCBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEhhbmRsZTxVbmtub3duPiwgdm9p
ZCogY29udGV4dCwgU2xvdFZpc2l0b3ImLCBjaGFyIGNvbnN0KiogcmVhc29uID0gbnVsbHB0cik7
CisgICAgdmlydHVhbCBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEhhbmRsZTxVbmtu
b3duPiwgdm9pZCogY29udGV4dCwgQWJzdHJhY3RTbG90VmlzaXRvciYsIGNoYXIgY29uc3QqKiBy
ZWFzb24gPSBudWxscHRyKTsKICAgICB2aXJ0dWFsIHZvaWQgZmluYWxpemUoSGFuZGxlPFVua25v
d24+LCB2b2lkKiBjb250ZXh0KTsKIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL1dlYWtJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvV2Vha0lubGluZXMuaAkocmV2aXNpb24gMjcxMzY4KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvV2Vha0lubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAog
I3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJKU0Nhc3QuaCIKKyNpbmNsdWRlICJXZWFrLmgiCiAj
aW5jbHVkZSAiV2Vha1NldElubGluZXMuaCIKICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrU2V0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha1NldC5oCShyZXZpc2lvbiAyNzEzNjgp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrU2V0LmgJKHdvcmtpbmcgY29weSkK
QEAgLTUxLDcgKzUxLDggQEAgcHVibGljOgogICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0OwogICAg
IGJvb2wgaXNUcml2aWFsbHlEZXN0cnVjdGlibGUoKSBjb25zdDsKIAotICAgIHZvaWQgdmlzaXQo
U2xvdFZpc2l0b3ImKTsKKy8vICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgdmlz
aXQoVmlzaXRvciYpOworICAgIHZvaWQgdmlzaXQxKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKIAog
ICAgIHZvaWQgcmVhcCgpOwogICAgIHZvaWQgc3dlZXAoKTsKQEAgLTExNCwxMCArMTE1LDEyIEBA
IGlubGluZSB2b2lkIFdlYWtTZXQ6Omxhc3RDaGFuY2VUb0ZpbmFsaXoKICAgICAgICAgYmxvY2st
Pmxhc3RDaGFuY2VUb0ZpbmFsaXplKCk7CiB9CiAKLWlubGluZSB2b2lkIFdlYWtTZXQ6OnZpc2l0
KFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy90ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgorLy9p
bmxpbmUgdm9pZCBXZWFrU2V0Ojp2aXNpdChWaXNpdG9yJiB2aXNpdG9yKQoraW5saW5lIHZvaWQg
V2Vha1NldDo6dmlzaXQxKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgZm9y
IChXZWFrQmxvY2sqIGJsb2NrID0gbV9ibG9ja3MuaGVhZCgpOyBibG9jazsgYmxvY2sgPSBibG9j
ay0+bmV4dCgpKQotICAgICAgICBibG9jay0+dmlzaXQodmlzaXRvcik7CisgICAgICAgIGJsb2Nr
LT52aXNpdDEodmlzaXRvcik7CiB9CiAKIGlubGluZSB2b2lkIFdlYWtTZXQ6OnJlYXAoKQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1NoYWRvd0NoaWNrZW4uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TaGFkb3dDaGlj
a2VuLmNwcAkocmV2aXNpb24gMjcxMzY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVy
cHJldGVyL1NoYWRvd0NoaWNrZW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NDAsNyArNDQwLDcg
QEAgdm9pZCBTaGFkb3dDaGlja2VuOjp1cGRhdGUoVk0mIHZtLCBDYWxsRgogICAgICAgICBkYXRh
TG9nKCIgICAgQWZ0ZXIgY2xlYW4tdXA6ICIsICp0aGlzLCAiXG4iKTsKIH0KIAotdm9pZCBTaGFk
b3dDaGlja2VuOjp2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBTaGFk
b3dDaGlja2VuOjp2aXNpdENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7
CiAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9sb2dDdXJzb3IgLSBtX2xvZzsgaS0tOykgewogICAg
ICAgICBKU09iamVjdCogY2FsbGVlID0gbV9sb2dbaV0uY2FsbGVlOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1NoYWRvd0NoaWNrZW4uaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU2hhZG93Q2hpY2tlbi5oCShyZXZpc2lv
biAyNzEzNjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU2hhZG93Q2hp
Y2tlbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSwxMyArMzUsMTMgQEAKIAogbmFtZXNwYWNlIEpT
QyB7CiAKK2NsYXNzIEFic3RyYWN0U2xvdFZpc2l0b3I7CiBjbGFzcyBDYWxsRnJhbWU7CiBjbGFz
cyBDb2RlQmxvY2s7CiBjbGFzcyBKU0FycmF5OwogY2xhc3MgSlNPYmplY3Q7CiBjbGFzcyBKU1Nj
b3BlOwogY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwotY2xhc3MgU2xvdFZpc2l0b3I7CiBj
bGFzcyBWTTsKIAogLy8gU2hhZG93Q2hpY2tlbiBpcyBhIGxvZyB0aGF0IGNhbiBiZSB1c2VkIHRv
IHByb2R1Y2UgYSBzaGFkb3cgc3RhY2sgb2YgQ0hJQ0tFTi1zdHlsZSBzdGFjayBmcmFtZXMuCkBA
IC0xOTYsNyArMTk2LDcgQEAgcHVibGljOgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+
CiAgICAgdm9pZCBpdGVyYXRlKFZNJiwgQ2FsbEZyYW1lKiwgY29uc3QgRnVuY3RvciYpOwogICAg
IAotICAgIHZvaWQgdmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYpOworICAgIHZvaWQgdmlzaXRD
aGlsZHJlbihBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAgICAgdm9pZCByZXNldCgpOwogICAgIAog
ICAgIC8vIEpJVCBzdXBwb3J0LgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9HQ0F3
YXJlSklUU3R1YlJvdXRpbmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvR0NBd2FyZUpJVFN0dWJSb3V0aW5lLmNwcAkocmV2aXNpb24gMjcxMzY4KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9HQ0F3YXJlSklUU3R1YlJvdXRpbmUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC03MywxMCArNzMsMTUgQEAgdm9pZCBHQ0F3YXJlSklUU3R1YlJvdXRpbmU6OmRl
bGV0ZUZyb21HQwogICAgIGRlbGV0ZSB0aGlzOwogfQogCi12b2lkIEdDQXdhcmVKSVRTdHViUm91
dGluZTo6bWFya1JlcXVpcmVkT2JqZWN0c0ludGVybmFsKFNsb3RWaXNpdG9yJikKKy8vdm9pZCBH
Q0F3YXJlSklUU3R1YlJvdXRpbmU6Om1hcmtSZXF1aXJlZE9iamVjdHNJbnRlcm5hbChTbG90Vmlz
aXRvciYpCit2b2lkIEdDQXdhcmVKSVRTdHViUm91dGluZTo6bWFya1JlcXVpcmVkT2JqZWN0c0lu
dGVybmFsMShBYnN0cmFjdFNsb3RWaXNpdG9yJikKIHsKIH0KIAorLy92b2lkIEdDQXdhcmVKSVRT
dHViUm91dGluZTo6bWFya1JlcXVpcmVkT2JqZWN0c0ludGVybmFsKERlYnVnU2xvdFZpc2l0b3Im
KQorLy97CisvL30KKwogTWFya2luZ0dDQXdhcmVKSVRTdHViUm91dGluZTo6TWFya2luZ0dDQXdh
cmVKSVRTdHViUm91dGluZSgKICAgICBjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUU3R1
YlJvdXRpbmVQdHJUYWc+JiBjb2RlLCBWTSYgdm0sIGNvbnN0IEpTQ2VsbCogb3duZXIsCiAgICAg
Y29uc3QgVmVjdG9yPEpTQ2VsbCo+JiBjZWxscywgQmFnPENhbGxMaW5rSW5mbz4mJiBjYWxsTGlu
a0luZm9zKQpAQCAtOTIsMTIgKzk3LDE5IEBAIE1hcmtpbmdHQ0F3YXJlSklUU3R1YlJvdXRpbmU6
On5NYXJraW5nR0MKIHsKIH0KIAotdm9pZCBNYXJraW5nR0NBd2FyZUpJVFN0dWJSb3V0aW5lOjpt
YXJrUmVxdWlyZWRPYmplY3RzSW50ZXJuYWwoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3ZvaWQg
TWFya2luZ0dDQXdhcmVKSVRTdHViUm91dGluZTo6bWFya1JlcXVpcmVkT2JqZWN0c0ludGVybmFs
KFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBNYXJraW5nR0NBd2FyZUpJVFN0dWJSb3V0aW5l
OjptYXJrUmVxdWlyZWRPYmplY3RzSW50ZXJuYWwxKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0
b3IpCiB7CiAgICAgZm9yIChhdXRvJiBlbnRyeSA6IG1fY2VsbHMpCiAgICAgICAgIHZpc2l0b3Iu
YXBwZW5kKGVudHJ5KTsKIH0KIAorLy8gRklYTUUgZGVkdXBlPworLy92b2lkIE1hcmtpbmdHQ0F3
YXJlSklUU3R1YlJvdXRpbmU6Om1hcmtSZXF1aXJlZE9iamVjdHNJbnRlcm5hbChEZWJ1Z1Nsb3RW
aXNpdG9yJiB2aXNpdG9yKQorLy97CisvLyAgICBmb3IgKGF1dG8mIGVudHJ5IDogbV9jZWxscykK
Ky8vICAgICAgICB2aXNpdG9yLmFwcGVuZChlbnRyeSk7CisvL30KIAogR0NBd2FyZUpJVFN0dWJS
b3V0aW5lV2l0aEV4Y2VwdGlvbkhhbmRsZXI6OkdDQXdhcmVKSVRTdHViUm91dGluZVdpdGhFeGNl
cHRpb25IYW5kbGVyKAogICAgIGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRTdHViUm91
dGluZVB0clRhZz4mIGNvZGUsIFZNJiB2bSwgIGNvbnN0IEpTQ2VsbCogb3duZXIsIGNvbnN0IFZl
Y3RvcjxKU0NlbGwqPiYgY2VsbHMsIEJhZzxDYWxsTGlua0luZm8+JiYgY2FsbExpbmtJbmZvcywK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvR0NBd2FyZUpJVFN0dWJSb3V0aW5lLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9HQ0F3YXJlSklUU3R1YlJv
dXRpbmUuaAkocmV2aXNpb24gMjcxMzY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9H
Q0F3YXJlSklUU3R1YlJvdXRpbmUuaAkod29ya2luZyBjb3B5KQpAQCAtNjAsMTAgKzYwLDEyIEBA
IHB1YmxpYzoKICAgICB7CiAgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEdDQXdhcmVKSVRT
dHViUm91dGluZShjb2RlLCB2bSkpOwogICAgIH0KLSAgICAKLSAgICB2b2lkIG1hcmtSZXF1aXJl
ZE9iamVjdHMoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisKKy8vICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFZpc2l0b3I+CisvLyAgICB2b2lkIG1hcmtSZXF1aXJlZE9iamVjdHMoVmlzaXRvciYgdmlzaXRv
cikKKyAgICB2b2lkIG1hcmtSZXF1aXJlZE9iamVjdHMxKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZp
c2l0b3IpCiAgICAgewotICAgICAgICBtYXJrUmVxdWlyZWRPYmplY3RzSW50ZXJuYWwodmlzaXRv
cik7CisgICAgICAgIG1hcmtSZXF1aXJlZE9iamVjdHNJbnRlcm5hbDEodmlzaXRvcik7CiAgICAg
fQogICAgIAogICAgIHZvaWQgZGVsZXRlRnJvbUdDKCk7CkBAIC03MSw3ICs3Myw5IEBAIHB1Ymxp
YzoKIHByb3RlY3RlZDoKICAgICB2b2lkIG9ic2VydmVaZXJvUmVmQ291bnQoKSBvdmVycmlkZTsK
ICAgICAKLSAgICB2aXJ0dWFsIHZvaWQgbWFya1JlcXVpcmVkT2JqZWN0c0ludGVybmFsKFNsb3RW
aXNpdG9yJik7CisvLyAgICB2aXJ0dWFsIHZvaWQgbWFya1JlcXVpcmVkT2JqZWN0c0ludGVybmFs
KFNsb3RWaXNpdG9yJik7CisvLyAgICB2aXJ0dWFsIHZvaWQgbWFya1JlcXVpcmVkT2JqZWN0c0lu
dGVybmFsKERlYnVnU2xvdFZpc2l0b3ImKTsKKyAgICB2aXJ0dWFsIHZvaWQgbWFya1JlcXVpcmVk
T2JqZWN0c0ludGVybmFsMShBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAKIHByaXZhdGU6CiAgICAg
ZnJpZW5kIGNsYXNzIEpJVFN0dWJSb3V0aW5lU2V0OwpAQCAtODksNyArOTMsOSBAQCBwdWJsaWM6
CiAgICAgfk1hcmtpbmdHQ0F3YXJlSklUU3R1YlJvdXRpbmUoKSBvdmVycmlkZTsKICAgICAKIHBy
b3RlY3RlZDoKLSAgICB2b2lkIG1hcmtSZXF1aXJlZE9iamVjdHNJbnRlcm5hbChTbG90VmlzaXRv
ciYpIG92ZXJyaWRlOworLy8gICAgdm9pZCBtYXJrUmVxdWlyZWRPYmplY3RzSW50ZXJuYWwoU2xv
dFZpc2l0b3ImKSBvdmVycmlkZTsKKy8vICAgIHZvaWQgbWFya1JlcXVpcmVkT2JqZWN0c0ludGVy
bmFsKERlYnVnU2xvdFZpc2l0b3ImKSBvdmVycmlkZTsKKyAgICB2b2lkIG1hcmtSZXF1aXJlZE9i
amVjdHNJbnRlcm5hbDEoQWJzdHJhY3RTbG90VmlzaXRvciYpIG92ZXJyaWRlOwogCiBwcml2YXRl
OgogICAgIFZlY3RvcjxXcml0ZUJhcnJpZXI8SlNDZWxsPj4gbV9jZWxsczsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUG9seW1vcnBoaWNDYWxsU3R1YlJv
dXRpbmUuY3BwCShyZXZpc2lvbiAyNzEzNjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L1BvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM1LDEy
ICsxMzUsMjAgQEAgYm9vbCBQb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZTo6dmlzaXRXZQogICAg
IHJldHVybiBpc1N0aWxsTGl2ZTsKIH0KIAotdm9pZCBQb2x5bW9ycGhpY0NhbGxTdHViUm91dGlu
ZTo6bWFya1JlcXVpcmVkT2JqZWN0c0ludGVybmFsKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy92
b2lkIFBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lOjptYXJrUmVxdWlyZWRPYmplY3RzSW50ZXJu
YWwoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIFBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5l
OjptYXJrUmVxdWlyZWRPYmplY3RzSW50ZXJuYWwxKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0
b3IpCiB7CiAgICAgZm9yIChhdXRvJiB2YXJpYW50IDogbV92YXJpYW50cykKICAgICAgICAgdmlz
aXRvci5hcHBlbmQodmFyaWFudCk7CiB9CiAKKy8vLy8gbWxhbSBGSVhNRSBkZWR1cGU/Pz8KKy8v
dm9pZCBQb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZTo6bWFya1JlcXVpcmVkT2JqZWN0c0ludGVy
bmFsKERlYnVnU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3sKKy8vICAgIGZvciAoYXV0byYgdmFy
aWFudCA6IG1fdmFyaWFudHMpCisvLyAgICAgICAgdmlzaXRvci5hcHBlbmQodmFyaWFudCk7Cisv
L30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBFTkFCTEUoSklUKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Qb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUG9seW1vcnBoaWNDYWxsU3R1
YlJvdXRpbmUuaAkocmV2aXNpb24gMjcxMzY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9Qb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDUsNyAr
MTA1LDkgQEAgcHVibGljOgogICAgIGJvb2wgdmlzaXRXZWFrKFZNJikgZmluYWw7CiAKIHByaXZh
dGU6Ci0gICAgdm9pZCBtYXJrUmVxdWlyZWRPYmplY3RzSW50ZXJuYWwoU2xvdFZpc2l0b3ImKSBm
aW5hbDsKKy8vICAgIHZvaWQgbWFya1JlcXVpcmVkT2JqZWN0c0ludGVybmFsKFNsb3RWaXNpdG9y
JikgZmluYWw7CisvLyAgICB2b2lkIG1hcmtSZXF1aXJlZE9iamVjdHNJbnRlcm5hbChEZWJ1Z1Ns
b3RWaXNpdG9yJikgZmluYWw7CisgICAgdm9pZCBtYXJrUmVxdWlyZWRPYmplY3RzSW50ZXJuYWwx
KEFic3RyYWN0U2xvdFZpc2l0b3ImKSBmaW5hbDsKIAogICAgIFZlY3RvcjxXcml0ZUJhcnJpZXI8
SlNDZWxsPiwgMj4gbV92YXJpYW50czsKICAgICBVbmlxdWVBcnJheTx1aW50MzJfdD4gbV9mYXN0
Q291bnRzOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQWJzdHJhY3RNb2R1
bGVSZWNvcmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0Fic3RyYWN0TW9kdWxlUmVjb3JkLmNwcAkocmV2aXNpb24gMjcxMzY4KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQWJzdHJhY3RNb2R1bGVSZWNvcmQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC02MCw3ICs2MCw4IEBAIHZvaWQgQWJzdHJhY3RNb2R1bGVSZWNvcmQ6OmZpbmlzaENy
ZWF0aW8KICAgICBwdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJkZXBl
bmRlbmNpZXNNYXAiX3MpLCBtX2RlcGVuZGVuY2llc01hcC5nZXQoKSk7CiB9CiAKLXZvaWQgQWJz
dHJhY3RNb2R1bGVSZWNvcmQ6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRv
ciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEFic3RyYWN0TW9k
dWxlUmVjb3JkOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0
b3IpCiB7CiAgICAgQWJzdHJhY3RNb2R1bGVSZWNvcmQqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8QWJz
dHJhY3RNb2R1bGVSZWNvcmQqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRT
KHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC03MCw2ICs3MSw4IEBAIHZvaWQgQWJzdHJhY3RNb2R1
bGVSZWNvcmQ6OnZpc2l0Q2hpbGRyZW4KICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5t
X2RlcGVuZGVuY2llc01hcCk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihBYnN0cmFjdE1v
ZHVsZVJlY29yZCk7CisKIHZvaWQgQWJzdHJhY3RNb2R1bGVSZWNvcmQ6OmFwcGVuZFJlcXVlc3Rl
ZE1vZHVsZShjb25zdCBJZGVudGlmaWVyJiBtb2R1bGVOYW1lKQogewogICAgIG1fcmVxdWVzdGVk
TW9kdWxlcy5hZGQobW9kdWxlTmFtZS5pbXBsKCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQWJzdHJhY3RNb2R1bGVSZWNvcmQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9BYnN0cmFjdE1vZHVsZVJlY29yZC5oCShyZXZpc2lvbiAy
NzEzNjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BYnN0cmFjdE1vZHVsZVJl
Y29yZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzYsNyArMTM2LDcgQEAgcHJvdGVjdGVkOgogICAg
IEFic3RyYWN0TW9kdWxlUmVjb3JkKFZNJiwgU3RydWN0dXJlKiwgY29uc3QgSWRlbnRpZmllciYp
OwogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxPYmplY3QqLCBWTSYpOwogCi0gICAg
c3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERF
Q0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICB2b2lkIHNldE1vZHVsZUVudmlyb25tZW50KEpT
R2xvYmFsT2JqZWN0KiwgSlNNb2R1bGVFbnZpcm9ubWVudCopOwogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9BcmdMaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9BcmdMaXN0LmNwcAkocmV2aXNpb24gMjcxMzY4KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJnTGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTUxLDcgKzUxLDcgQEAgdm9pZCBBcmdMaXN0OjpnZXRTbGljZShpbnQgc3RhcnRJbmRleCwgQQog
ICAgIHJlc3VsdC5tX2FyZ0NvdW50ID0gIG1fYXJnQ291bnQgLSBzdGFydEluZGV4OwogfQogCi12
b2lkIE1hcmtlZEFyZ3VtZW50QnVmZmVyOjptYXJrTGlzdHMoU2xvdFZpc2l0b3ImIHZpc2l0b3Is
IExpc3RTZXQmIG1hcmtTZXQpCit2b2lkIE1hcmtlZEFyZ3VtZW50QnVmZmVyOjptYXJrTGlzdHMo
QWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvciwgTGlzdFNldCYgbWFya1NldCkKIHsKICAgICBM
aXN0U2V0OjppdGVyYXRvciBlbmQgPSBtYXJrU2V0LmVuZCgpOwogICAgIGZvciAoTGlzdFNldDo6
aXRlcmF0b3IgaXQgPSBtYXJrU2V0LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJnTGlzdC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FyZ0xpc3QuaAkocmV2aXNpb24gMjcxMzY4KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJnTGlzdC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xMTgsNyArMTE4LDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAg
IH0KICAgICAgICAgCi0gICAgc3RhdGljIHZvaWQgbWFya0xpc3RzKFNsb3RWaXNpdG9yJiwgTGlz
dFNldCYpOworICAgIHN0YXRpYyB2b2lkIG1hcmtMaXN0cyhBYnN0cmFjdFNsb3RWaXNpdG9yJiwg
TGlzdFNldCYpOwogCiAgICAgdm9pZCBlbnN1cmVDYXBhY2l0eShzaXplX3QgcmVxdWVzdGVkQ2Fw
YWNpdHkpCiAgICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVh
YmxlSWRlbnRpZmllci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0NhY2hlYWJsZUlkZW50aWZpZXIuaAkocmV2aXNpb24gMjcxMzY4KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVhYmxlSWRlbnRpZmllci5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zOSwxMCArMzksMTEgQEAgdXNpbmcgV1RGOjpVbmlxdWVkU3RyaW5nSW1wbDsKIAogbmFt
ZXNwYWNlIEpTQyB7CiAKK2NsYXNzIEFic3RyYWN0U2xvdFZpc2l0b3I7CiBjbGFzcyBDb2RlQmxv
Y2s7CiBjbGFzcyBJZGVudGlmaWVyOwogY2xhc3MgSlNDZWxsOwotY2xhc3MgU2xvdFZpc2l0b3I7
CisvL2NsYXNzIFNsb3RWaXNpdG9yOwogCiBjbGFzcyBDYWNoZWFibGVJZGVudGlmaWVyIHsKIHB1
YmxpYzoKQEAgLTg3LDcgKzg4LDggQEAgcHVibGljOgogCiAgICAgdWludHB0cl90IHJhd0JpdHMo
KSBjb25zdCB7IHJldHVybiBtX2JpdHM7IH0KIAotICAgIGlubGluZSB2b2lkIHZpc2l0QWdncmVn
YXRlKFNsb3RWaXNpdG9yJikgY29uc3Q7CisvLyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
PiBpbmxpbmUgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShWaXNpdG9yJikgY29uc3Q7CisgICAgaW5saW5l
IHZvaWQgdmlzaXRBZ2dyZWdhdGUxKEFic3RyYWN0U2xvdFZpc2l0b3ImKSBjb25zdDsKIAogICAg
IEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWFibGVJZGVudGlmaWVySW5saW5l
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlYWJs
ZUlkZW50aWZpZXJJbmxpbmVzLmgJKHJldmlzaW9uIDI3MTM2OCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0NhY2hlYWJsZUlkZW50aWZpZXJJbmxpbmVzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEzNywxMiArMTM3LDE2IEBAIGlubGluZSB2b2lkIENhY2hlYWJsZUlkZW50aWZpZXI6
OnNldFVpZEIKICAgICBtX2JpdHMgPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90Pih1aWQpIHwgc191
aWRUYWc7CiB9CiAKLWlubGluZSB2b2lkIENhY2hlYWJsZUlkZW50aWZpZXI6OnZpc2l0QWdncmVn
YXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBjb25zdAorLy90ZW1wbGF0ZTx0eXBlbmFtZSBWaXNp
dG9yPgorLy9pbmxpbmUgdm9pZCBDYWNoZWFibGVJZGVudGlmaWVyOjp2aXNpdEFnZ3JlZ2F0ZShW
aXNpdG9yJiB2aXNpdG9yKSBjb25zdAoraW5saW5lIHZvaWQgQ2FjaGVhYmxlSWRlbnRpZmllcjo6
dmlzaXRBZ2dyZWdhdGUxKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0CiB7CiAg
ICAgaWYgKG1fYml0cyAmJiBpc0NlbGwoKSkKICAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJp
ZXJlZChjZWxsKCkpOwogfQogCisvL3RlbXBsYXRlIHZvaWQgQ2FjaGVhYmxlSWRlbnRpZmllcjo6
dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImKSBjb25zdDsKKy8vdGVtcGxhdGUgdm9pZCBDYWNo
ZWFibGVJZGVudGlmaWVyOjp2aXNpdEFnZ3JlZ2F0ZShEZWJ1Z1Nsb3RWaXNpdG9yJikgY29uc3Q7
CiAKIGlubGluZSBib29sIENhY2hlYWJsZUlkZW50aWZpZXI6Om9wZXJhdG9yPT0oY29uc3QgQ2Fj
aGVhYmxlSWRlbnRpZmllciYgb3RoZXIpIGNvbnN0CiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9DbGFzc0luZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9DbGFzc0luZm8uaAkocmV2aXNpb24gMjcxMzY4KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xhc3NJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDkg
KzQ0LDYgQEAgc3RydWN0IE1ldGhvZFRhYmxlIHsKICAgICB1c2luZyBEZXN0cm95RnVuY3Rpb25Q
dHIgPSB2b2lkICgqKShKU0NlbGwqKTsKICAgICBEZXN0cm95RnVuY3Rpb25QdHIgTUVUSE9EX1RB
QkxFX0VOVFJZKGRlc3Ryb3kpOwogCi0gICAgdXNpbmcgVmlzaXRDaGlsZHJlbkZ1bmN0aW9uUHRy
ID0gdm9pZCAoKikoSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKLSAgICBWaXNpdENoaWxkcmVuRnVu
Y3Rpb25QdHIgTUVUSE9EX1RBQkxFX0VOVFJZKHZpc2l0Q2hpbGRyZW4pOwotCiAgICAgdXNpbmcg
R2V0Q2FsbERhdGFGdW5jdGlvblB0ciA9IENhbGxEYXRhICgqKShKU0NlbGwqKTsKICAgICBHZXRD
YWxsRGF0YUZ1bmN0aW9uUHRyIE1FVEhPRF9UQUJMRV9FTlRSWShnZXRDYWxsRGF0YSk7CiAKQEAg
LTEyMCw3ICsxMTcsMTggQEAgc3RydWN0IE1ldGhvZFRhYmxlIHsKICAgICB1c2luZyBFc3RpbWF0
ZWRTaXplRnVuY3Rpb25QdHIgPSBzaXplX3QgKCopKEpTQ2VsbCosIFZNJik7CiAgICAgRXN0aW1h
dGVkU2l6ZUZ1bmN0aW9uUHRyIE1FVEhPRF9UQUJMRV9FTlRSWShlc3RpbWF0ZWRTaXplKTsKIAot
ICAgIHVzaW5nIFZpc2l0T3V0cHV0Q29uc3RyYWludHNQdHIgPSB2b2lkICgqKShKU0NlbGwqLCBT
bG90VmlzaXRvciYpOworICAgIHVzaW5nIFZpc2l0Q2hpbGRyZW5GdW5jdGlvblB0ciA9IHZvaWQg
KCopKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgVmlzaXRDaGlsZHJlbkZ1bmN0aW9uUHRy
IE1FVEhPRF9UQUJMRV9FTlRSWSh2aXNpdENoaWxkcmVuV2l0aFNsb3RWaXNpdG9yKTsKKworLy8g
ICAgdXNpbmcgVmlzaXRDaGlsZHJlbldpdGhEZWJ1Z1Nsb3RWaXNpdG9yUHRyID0gdm9pZCAoKiko
SlNDZWxsKiwgRGVidWdTbG90VmlzaXRvciYpOworICAgIHVzaW5nIFZpc2l0Q2hpbGRyZW5XaXRo
QWJzdHJhY3RTbG90VmlzaXRvclB0ciA9IHZvaWQgKCopKEpTQ2VsbCosIEFic3RyYWN0U2xvdFZp
c2l0b3ImKTsKKyAgICBWaXNpdENoaWxkcmVuV2l0aEFic3RyYWN0U2xvdFZpc2l0b3JQdHIgTUVU
SE9EX1RBQkxFX0VOVFJZKHZpc2l0Q2hpbGRyZW5XaXRoQWJzdHJhY3RTbG90VmlzaXRvcik7CisK
KyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RW
aXNpdG9yJiB2aXNpdG9yKSBjb25zdCB7IHZpc2l0Q2hpbGRyZW5XaXRoU2xvdFZpc2l0b3IoY2Vs
bCwgdmlzaXRvcik7IH0KKy8vICAgIEFMV0FZU19JTkxJTkUgdm9pZCB2aXNpdENoaWxkcmVuKEpT
Q2VsbCogY2VsbCwgRGVidWdTbG90VmlzaXRvciYgdmlzaXRvcikgY29uc3QgeyB2aXNpdENoaWxk
cmVuV2l0aERlYnVnU2xvdFZpc2l0b3IoY2VsbCwgdmlzaXRvcik7IH0KKyAgICBBTFdBWVNfSU5M
SU5FIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIEFic3RyYWN0U2xvdFZpc2l0b3Im
IHZpc2l0b3IpIGNvbnN0IHsgdmlzaXRDaGlsZHJlbldpdGhBYnN0cmFjdFNsb3RWaXNpdG9yKGNl
bGwsIHZpc2l0b3IpOyB9CisKKyAgICB1c2luZyBWaXNpdE91dHB1dENvbnN0cmFpbnRzUHRyID0g
dm9pZCAoKikoSlNDZWxsKiwgQWJzdHJhY3RTbG90VmlzaXRvciYpOwogICAgIFZpc2l0T3V0cHV0
Q29uc3RyYWludHNQdHIgTUVUSE9EX1RBQkxFX0VOVFJZKHZpc2l0T3V0cHV0Q29uc3RyYWludHMp
OwogfTsKIApAQCAtMTQ3LDcgKzE1NSw2IEBAIHN0cnVjdCBNZXRob2RUYWJsZSB7CiAgICAgSlND
YXN0aW5nSGVscGVyczo6SW5oZXJpdHNUcmFpdHM8Q2xhc3NOYW1lPjo6dHlwZVJhbmdlLCBcCiAg
ICAgeyBcCiAgICAgICAgICZDbGFzc05hbWU6OmRlc3Ryb3ksIFwKLSAgICAgICAgJkNsYXNzTmFt
ZTo6dmlzaXRDaGlsZHJlbiwgXAogICAgICAgICAmQ2xhc3NOYW1lOjpnZXRDYWxsRGF0YSwgXAog
ICAgICAgICAmQ2xhc3NOYW1lOjpnZXRDb25zdHJ1Y3REYXRhLCBcCiAgICAgICAgICZDbGFzc05h
bWU6OnB1dCwgXApAQCAtMTczLDYgKzE4MCw4IEBAIHN0cnVjdCBNZXRob2RUYWJsZSB7CiAgICAg
ICAgICZDbGFzc05hbWU6OmR1bXBUb1N0cmVhbSwgXAogICAgICAgICAmQ2xhc3NOYW1lOjphbmFs
eXplSGVhcCwgXAogICAgICAgICAmQ2xhc3NOYW1lOjplc3RpbWF0ZWRTaXplLCBcCisgICAgICAg
ICZDbGFzc05hbWU6OnZpc2l0Q2hpbGRyZW4sIFwKKyAgICAgICAgJkNsYXNzTmFtZTo6dmlzaXRD
aGlsZHJlbiwgXAogICAgICAgICAmQ2xhc3NOYW1lOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzLCBc
CiAgICAgfSwgXAogICAgIENsYXNzTmFtZTo6VHlwZWRBcnJheVN0b3JhZ2VUeXBlLCBcCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DbG9uZWRBcmd1bWVudHMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Nsb25lZEFyZ3VtZW50cy5j
cHAJKHJldmlzaW9uIDI3MTM2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Ns
b25lZEFyZ3VtZW50cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2Nyw3ICsyNjcsOCBAQCB2b2lk
IENsb25lZEFyZ3VtZW50czo6bWF0ZXJpYWxpemVTcGVjaWFsCiAgICAgICAgIG1hdGVyaWFsaXpl
U3BlY2lhbHMoZ2xvYmFsT2JqZWN0KTsKIH0KIAotdm9pZCBDbG9uZWRBcmd1bWVudHM6OnZpc2l0
Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5
cGVuYW1lIFZpc2l0b3I+Cit2b2lkIENsb25lZEFyZ3VtZW50czo6dmlzaXRDaGlsZHJlbkltcGwo
SlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIENsb25lZEFyZ3VtZW50cyog
dGhpc09iamVjdCA9IGpzQ2FzdDxDbG9uZWRBcmd1bWVudHMqPihjZWxsKTsKICAgICBBU1NFUlRf
R0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC0yNzUsNSArMjc2LDcg
QEAgdm9pZCBDbG9uZWRBcmd1bWVudHM6OnZpc2l0Q2hpbGRyZW4oSlNDZQogICAgIHZpc2l0b3Iu
YXBwZW5kKHRoaXNPYmplY3QtPm1fY2FsbGVlKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVO
KENsb25lZEFyZ3VtZW50cyk7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9DbG9uZWRBcmd1bWVudHMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DbG9uZWRBcmd1bWVudHMuaAkocmV2aXNpb24g
MjcxMzY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xvbmVkQXJndW1lbnRz
LmgJKHdvcmtpbmcgY29weSkKQEAgLTYyLDcgKzYyLDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBT
dHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBw
cm90b3R5cGUpOwogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVNsb3dQdXRTdHJ1Y3R1cmUo
Vk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUgcHJvdG90eXBlKTsKIAotICAgIHN0YXRpYyB2
b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJ
U0lUX0NISUxEUkVOOwogCiAgICAgREVDTEFSRV9JTkZPOwogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9EaXJlY3RBcmd1bWVudHMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5jcHAJKHJldmlzaW9uIDI3
MTM2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTkwLDcgKzkwLDggQEAgc2l6ZV90IERpcmVjdEFyZ3VtZW50
czo6ZXN0aW1hdGVkU2l6ZShKUwogICAgIHJldHVybiBCYXNlOjplc3RpbWF0ZWRTaXplKGNlbGws
IHZtKSArIG1hcHBlZEFyZ3VtZW50c1NpemUgKyBtb2RpZmllZEFyZ3VtZW50c1NpemU7CiB9CiAK
LXZvaWQgRGlyZWN0QXJndW1lbnRzOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogdGhpc0NlbGwsIFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgRGly
ZWN0QXJndW1lbnRzOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIHRoaXNDZWxsLCBWaXNpdG9y
JiB2aXNpdG9yKQogewogICAgIERpcmVjdEFyZ3VtZW50cyogdGhpc09iamVjdCA9IHN0YXRpY19j
YXN0PERpcmVjdEFyZ3VtZW50cyo+KHRoaXNDZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lO
SEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC0xMDQsNiArMTA1LDggQEAgdm9pZCBEaXJl
Y3RBcmd1bWVudHM6OnZpc2l0Q2hpbGRyZW4oSlNDZQogICAgIEdlbmVyaWNBcmd1bWVudHM8RGly
ZWN0QXJndW1lbnRzPjo6dmlzaXRDaGlsZHJlbih0aGlzQ2VsbCwgdmlzaXRvcik7CiB9CiAKK0RF
RklORV9WSVNJVF9DSElMRFJFTihEaXJlY3RBcmd1bWVudHMpOworCiBTdHJ1Y3R1cmUqIERpcmVj
dEFyZ3VtZW50czo6Y3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCiB7CiAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3Jl
YXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oRGlyZWN0QXJndW1lbnRz
VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvRGlyZWN0QXJndW1lbnRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvRGlyZWN0QXJndW1lbnRzLmgJKHJldmlzaW9uIDI3MTM2OCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5oCSh3b3JraW5n
IGNvcHkpCkBAIC02NSw3ICs2NSw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgRGlyZWN0QXJndW1l
bnRzKiBjcmVhdGVCeUNvcHlpbmcoSlNHbG9iYWxPYmplY3QqLCBDYWxsRnJhbWUqKTsKIAogICAg
IHN0YXRpYyBzaXplX3QgZXN0aW1hdGVkU2l6ZShKU0NlbGwqLCBWTSYpOwotICAgIHN0YXRpYyB2
b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJ
U0lUX0NISUxEUkVOOwogICAgIAogICAgIHVpbnQzMl90IGludGVybmFsTGVuZ3RoKCkgY29uc3QK
ICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FdmFsRXhlY3V0YWJs
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXZhbEV4
ZWN1dGFibGUuY3BwCShyZXZpc2lvbiAyNzEzNjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9FdmFsRXhlY3V0YWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDcgKzQ5LDgg
QEAgYXV0byBFdmFsRXhlY3V0YWJsZTo6ZW5zdXJlVGVtcGxhdGVPYmplYwogICAgIHJldHVybiBl
bnN1cmVUZW1wbGF0ZU9iamVjdE1hcEltcGwobV90ZW1wbGF0ZU9iamVjdE1hcCk7CiB9CiAKLXZv
aWQgRXZhbEV4ZWN1dGFibGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRv
ciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEV2YWxFeGVjdXRh
YmxlOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7
CiAgICAgRXZhbEV4ZWN1dGFibGUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8RXZhbEV4ZWN1dGFibGUq
PihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8o
KSk7CkBAIC02Myw0ICs2NCw2IEBAIHZvaWQgRXZhbEV4ZWN1dGFibGU6OnZpc2l0Q2hpbGRyZW4o
SlNDZWwKICAgICB9CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihFdmFsRXhlY3V0YWJsZSk7
CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvRXZhbEV4ZWN1dGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9FdmFsRXhlY3V0YWJsZS5oCShyZXZpc2lvbiAyNzEzNjgpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9FdmFsRXhlY3V0YWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03
OCw3ICs3OCw3IEBAIHByb3RlY3RlZDoKICAgICB1c2luZyBCYXNlOjpmaW5pc2hDcmVhdGlvbjsK
ICAgICBFdmFsRXhlY3V0YWJsZShKU0dsb2JhbE9iamVjdCosIGNvbnN0IFNvdXJjZUNvZGUmLCBi
b29sIGluU3RyaWN0Q29udGV4dCwgRGVyaXZlZENvbnRleHRUeXBlLCBib29sIGlzQXJyb3dGdW5j
dGlvbkNvbnRleHQsIGJvb2wgaXNJbnNpZGVPcmRpbmFyeUZ1bmN0aW9uLCBFdmFsQ29udGV4dFR5
cGUsIE5lZWRzQ2xhc3NGaWVsZEluaXRpYWxpemVyKTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0
Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxE
UkVOOwogCiAgICAgdW5zaWduZWQgbV9uZWVkc0NsYXNzRmllbGRJbml0aWFsaXplciA6IDE7CiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbi5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9uLmNwcAkocmV2
aXNpb24gMjcxMzY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9u
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTMsNyArNTMsOCBAQCBTdHJ1Y3R1cmUqIEV4Y2VwdGlv
bjo6Y3JlYXRlU3RydWN0dXJlKFZNCiAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBn
bG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oQ2VsbFR5cGUsIFN0cnVjdHVyZUZsYWdz
KSwgaW5mbygpKTsKIH0KIAotdm9pZCBFeGNlcHRpb246OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBj
ZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2
b2lkIEV4Y2VwdGlvbjo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2
aXNpdG9yKQogewogICAgIEV4Y2VwdGlvbiogdGhpc09iamVjdCA9IGpzQ2FzdDxFeGNlcHRpb24q
PihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8o
KSk7CkBAIC02NCw2ICs2NSw4IEBAIHZvaWQgRXhjZXB0aW9uOjp2aXNpdENoaWxkcmVuKEpTQ2Vs
bCogY2UKICAgICAgICAgZnJhbWUudmlzaXRDaGlsZHJlbih2aXNpdG9yKTsKIH0KIAorREVGSU5F
X1ZJU0lUX0NISUxEUkVOKEV4Y2VwdGlvbik7CisKIEV4Y2VwdGlvbjo6RXhjZXB0aW9uKFZNJiB2
bSkKICAgICA6IEJhc2Uodm0sIHZtLmV4Y2VwdGlvblN0cnVjdHVyZS5nZXQoKSkKIHsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbi5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbi5oCShyZXZpc2lvbiAyNzEz
NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGNlcHRpb24uaAkod29ya2lu
ZyBjb3B5KQpAQCAtNTEsNyArNTEsNyBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgU3RydWN0dXJl
KiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUgcHJvdG90eXBl
KTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3Im
KTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgREVDTEFSRV9FWFBPUlRfSU5G
TzsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25FeGVjdXRh
YmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5j
dGlvbkV4ZWN1dGFibGUuY3BwCShyZXZpc2lvbiAyNzEzNjgpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9GdW5jdGlvbkV4ZWN1dGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02
Nyw3ICs2Nyw4IEBAIEZ1bmN0aW9uQ29kZUJsb2NrKiBGdW5jdGlvbkV4ZWN1dGFibGU6OmIKICAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8RnVuY3Rpb25Db2RlQmxvY2sqPihlZGdlLT5jb2RlQmxvY2so
KS0+YmFzZWxpbmVBbHRlcm5hdGl2ZSgpKTsKIH0KIAotdm9pZCBGdW5jdGlvbkV4ZWN1dGFibGU6
OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBs
YXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEZ1bmN0aW9uRXhlY3V0YWJsZTo6dmlzaXRDaGls
ZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEZ1bmN0aW9u
RXhlY3V0YWJsZSogdGhpc09iamVjdCA9IGpzQ2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihjZWxs
KTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBA
IC04Niw2ICs4Nyw4IEBAIHZvaWQgRnVuY3Rpb25FeGVjdXRhYmxlOjp2aXNpdENoaWxkcmVuKEoK
ICAgICB9CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihGdW5jdGlvbkV4ZWN1dGFibGUpOwor
CiBGdW5jdGlvbkV4ZWN1dGFibGUqIEZ1bmN0aW9uRXhlY3V0YWJsZTo6ZnJvbUdsb2JhbENvZGUo
CiAgICAgY29uc3QgSWRlbnRpZmllciYgbmFtZSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCAKICAgICBKU09iamVjdComIGV4Y2VwdGlvbiwg
aW50IG92ZXJyaWRlTGluZU51bWJlciwgT3B0aW9uYWw8aW50PiBmdW5jdGlvbkNvbnN0cnVjdG9y
UGFyYW1ldGVyc0VuZFBvc2l0aW9uKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvRnVuY3Rpb25FeGVjdXRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvRnVuY3Rpb25FeGVjdXRhYmxlLmgJKHJldmlzaW9uIDI3MTM2OCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xNjYsNyArMTY2LDcgQEAgcHVibGljOgogICAgIEpTUGFyc2VyU2NyaXB0TW9k
ZSBzY3JpcHRNb2RlKCkgY29uc3QgeyByZXR1cm4gbV91bmxpbmtlZEV4ZWN1dGFibGUtPnNjcmlw
dE1vZGUoKTsgfQogICAgIFNvdXJjZUNvZGUgY2xhc3NTb3VyY2UoKSBjb25zdCB7IHJldHVybiBt
X3VubGlua2VkRXhlY3V0YWJsZS0+Y2xhc3NTb3VyY2UoKTsgfQogCi0gICAgc3RhdGljIHZvaWQg
dmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRf
Q0hJTERSRU47CiAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90bykKICAgICB7CiAgICAg
ICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90bywgVHlw
ZUluZm8oRnVuY3Rpb25FeGVjdXRhYmxlVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25SYXJlRGF0YS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25SYXJl
RGF0YS5jcHAJKHJldmlzaW9uIDI3MTM2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0Z1bmN0aW9uUmFyZURhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MSw3ICs1MSw4IEBA
IFN0cnVjdHVyZSogRnVuY3Rpb25SYXJlRGF0YTo6Y3JlYXRlU3RydWMKICAgICByZXR1cm4gU3Ry
dWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhDZWxs
VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwogfQogCi12b2lkIEZ1bmN0aW9uUmFyZURh
dGE6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3Rl
bXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEZ1bmN0aW9uUmFyZURhdGE6OnZpc2l0Q2hp
bGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBGdW5jdGlv
blJhcmVEYXRhKiByYXJlRGF0YSA9IGpzQ2FzdDxGdW5jdGlvblJhcmVEYXRhKj4oY2VsbCk7CiAg
ICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjZWxsLCBpbmZvKCkpOwpAQCAtNjMsNiArNjQs
OCBAQCB2b2lkIEZ1bmN0aW9uUmFyZURhdGE6OnZpc2l0Q2hpbGRyZW4oSlNDCiAgICAgdmlzaXRv
ci5hcHBlbmQocmFyZURhdGEtPm1fZXhlY3V0YWJsZSk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElM
RFJFTihGdW5jdGlvblJhcmVEYXRhKTsKKwogRnVuY3Rpb25SYXJlRGF0YTo6RnVuY3Rpb25SYXJl
RGF0YShWTSYgdm0sIEV4ZWN1dGFibGVCYXNlKiBleGVjdXRhYmxlKQogICAgIDogQmFzZSh2bSwg
dm0uZnVuY3Rpb25SYXJlRGF0YVN0cnVjdHVyZS5nZXQoKSkKICAgICAsIG1fb2JqZWN0QWxsb2Nh
dGlvblByb2ZpbGUoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rp
b25SYXJlRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0Z1bmN0aW9uUmFyZURhdGEuaAkocmV2aXNpb24gMjcxMzY4KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25SYXJlRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC02NSw3
ICs2NSw3IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVy
ZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBwcm90b3R5cGUpOwogCi0gICAgc3RhdGlj
IHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVf
VklTSVRfQ0hJTERSRU47CiAKICAgICBERUNMQVJFX0lORk87CiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNBcmd1bWVudHMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljQXJndW1lbnRzLmgJKHJldmlzaW9uIDI3
MTM2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNBcmd1bWVudHMu
aAkod29ya2luZyBjb3B5KQpAQCAtNDQsNyArNDQsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgewogICAg
IH0KIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3Im
KTsKKyAgICBERUNMQVJFX1RFTVBMQVRFX1ZJU0lUX0NISUxEUkVOOwogICAgIHN0YXRpYyBib29s
IGdldE93blByb3BlcnR5U2xvdChKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlO
YW1lLCBQcm9wZXJ0eVNsb3QmKTsKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3RC
eUluZGV4KEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUs
IFByb3BlcnR5U2xvdCYpOwogICAgIHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNP
YmplY3QqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZUFycmF5JiwgRG9udEVudW1Qcm9w
ZXJ0aWVzTW9kZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmlj
QXJndW1lbnRzSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0dlbmVyaWNBcmd1bWVudHNJbmxpbmVzLmgJKHJldmlzaW9uIDI3MTM2OCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNBcmd1bWVudHNJbmxpbmVzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDggQEAKIG5hbWVzcGFjZSBKU0MgewogCiB0ZW1wbGF0
ZTx0eXBlbmFtZSBUeXBlPgotdm9pZCBHZW5lcmljQXJndW1lbnRzPFR5cGU+Ojp2aXNpdENoaWxk
cmVuKEpTQ2VsbCogdGhpc0NlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlw
ZW5hbWUgVmlzaXRvcj4KK3ZvaWQgR2VuZXJpY0FyZ3VtZW50czxUeXBlPjo6dmlzaXRDaGlsZHJl
bkltcGwoSlNDZWxsKiB0aGlzQ2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBUeXBlKiB0
aGlzT2JqZWN0ID0gc3RhdGljX2Nhc3Q8VHlwZSo+KHRoaXNDZWxsKTsKICAgICBBU1NFUlRfR0Nf
T0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC00MSw2ICs0Miw4IEBAIHZv
aWQgR2VuZXJpY0FyZ3VtZW50czxUeXBlPjo6dmlzaXRDaGlsZHIKICAgICAgICAgdmlzaXRvci5t
YXJrQXV4aWxpYXJ5KHRoaXNPYmplY3QtPm1fbW9kaWZpZWRBcmd1bWVudHNEZXNjcmlwdG9yLmdl
dFVuc2FmZSgpKTsKIH0KIAorREVGSU5FX1RFTVBMQVRFX1ZJU0lUX0NISUxEUkVOKHRlbXBsYXRl
PHR5cGVuYW1lIFR5cGU+LCBHZW5lcmljQXJndW1lbnRzPFR5cGU+KTsKKwogdGVtcGxhdGU8dHlw
ZW5hbWUgVHlwZT4KIGJvb2wgR2VuZXJpY0FyZ3VtZW50czxUeXBlPjo6Z2V0T3duUHJvcGVydHlT
bG90KEpTT2JqZWN0KiBvYmplY3QsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFByb3Bl
cnR5TmFtZSBpZGVudCwgUHJvcGVydHlTbG90JiBzbG90KQogewpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvR2V0dGVyU2V0dGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9HZXR0ZXJTZXR0ZXIuY3BwCShyZXZpc2lvbiAyNzEzNjgp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZXR0ZXJTZXR0ZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMyw3ICszMyw4IEBAIFNUQVRJQ19BU1NFUlRfSVNfVFJJVklBTExZX0RF
U1RSVUNUSUJMRSgKIAogY29uc3QgQ2xhc3NJbmZvIEdldHRlclNldHRlcjo6c19pbmZvID0geyAi
R2V0dGVyU2V0dGVyIiwgbnVsbHB0ciwgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9U
QUJMRShHZXR0ZXJTZXR0ZXIpIH07CiAKLXZvaWQgR2V0dGVyU2V0dGVyOjp2aXNpdENoaWxkcmVu
KEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPgordm9pZCBHZXR0ZXJTZXR0ZXI6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2Vs
bCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBHZXR0ZXJTZXR0ZXIqIHRoaXNPYmplY3QgPSBq
c0Nhc3Q8R2V0dGVyU2V0dGVyKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklU
Uyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNDMsNiArNDQsOCBAQCB2b2lkIEdldHRlclNldHRl
cjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqCiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+
bV9zZXR0ZXIpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oR2V0dGVyU2V0dGVyKTsKKwog
SlNWYWx1ZSBjYWxsR2V0dGVyKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUg
YmFzZSwgSlNWYWx1ZSBnZXR0ZXJTZXR0ZXIpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0
LT52bSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2V0dGVyU2V0dGVy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2V0dGVyU2V0
dGVyLmgJKHJldmlzaW9uIDI3MTM2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0dldHRlclNldHRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC04Miw3ICs4Miw3IEBAIHB1YmxpYzoK
ICAgICAgICAgcmV0dXJuIGNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBnZXR0ZXJPYmplY3QsIHNl
dHRlck9iamVjdCk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0Nl
bGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBK
U09iamVjdCogZ2V0dGVyKCkgY29uc3QgeyByZXR1cm4gbV9nZXR0ZXIuZ2V0KCk7IH0KIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSGFzaE1hcEltcGwuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0hhc2hNYXBJbXBsLmNwcAkocmV2
aXNpb24gMjcxMzY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSGFzaE1hcElt
cGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw5IEBACiAKIG5hbWVzcGFjZSBKU0Mg
ewogCitERUZJTkVfVEVNUExBVEVfVklTSVRfQ0hJTERSRU4odGVtcGxhdGU8PiwgSGFzaE1hcEJ1
Y2tldDxIYXNoTWFwQnVja2V0RGF0YUtleT4pOworREVGSU5FX1RFTVBMQVRFX1ZJU0lUX0NISUxE
UkVOKHRlbXBsYXRlPD4sIEhhc2hNYXBCdWNrZXQ8SGFzaE1hcEJ1Y2tldERhdGFLZXlWYWx1ZT4p
OworCiB0ZW1wbGF0ZTw+CiBjb25zdCBDbGFzc0luZm8gSGFzaE1hcEJ1Y2tldDxIYXNoTWFwQnVj
a2V0RGF0YUtleT46OnNfaW5mbyA9CiAgICAgeyAiSGFzaE1hcEJ1Y2tldCIsIG51bGxwdHIsIG51
bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSGFzaE1hcEJ1Y2tldDxIYXNoTWFw
QnVja2V0RGF0YUtleT4pIH07CkBAIC0zOCw4ICs0MSw5IEBAIHRlbXBsYXRlPD4KIGNvbnN0IENs
YXNzSW5mbyBIYXNoTWFwQnVja2V0PEhhc2hNYXBCdWNrZXREYXRhS2V5VmFsdWU+OjpzX2luZm8g
PQogICAgIHsgIkhhc2hNYXBCdWNrZXQiLCBudWxscHRyLCBudWxscHRyLCBudWxscHRyLCBDUkVB
VEVfTUVUSE9EX1RBQkxFKEhhc2hNYXBCdWNrZXQ8SGFzaE1hcEJ1Y2tldERhdGFLZXlWYWx1ZT4p
IH07CiAKLXRlbXBsYXRlIDx0eXBlbmFtZSBEYXRhPgotdm9pZCBIYXNoTWFwQnVja2V0PERhdGE+
Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1w
bGF0ZTx0eXBlbmFtZSBEYXRhPgordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSGFz
aE1hcEJ1Y2tldDxEYXRhPjo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9y
JiB2aXNpdG9yKQogewogICAgIEhhc2hNYXBCdWNrZXQqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SGFz
aE1hcEJ1Y2tldCo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09i
amVjdCwgaW5mbygpKTsKQEAgLTUyLDggKzU2LDkgQEAgdm9pZCBIYXNoTWFwQnVja2V0PERhdGE+
Ojp2aXNpdENoaWxkcmVuKAogICAgIHZpc2l0b3IuYXBwZW5kVmFsdWVzKGJpdHdpc2VfY2FzdDxX
cml0ZUJhcnJpZXI8VW5rbm93bj4qPigmdGhpc09iamVjdC0+bV9kYXRhKSwgc2l6ZW9mKERhdGEp
IC8gc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpOwogfQogCi10ZW1wbGF0ZSA8dHlwZW5h
bWUgSGFzaE1hcEJ1Y2tldD4KLXZvaWQgSGFzaE1hcEltcGw8SGFzaE1hcEJ1Y2tldD46OnZpc2l0
Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5
cGVuYW1lIEhhc2hNYXBCdWNrZXQ+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBI
YXNoTWFwSW1wbDxIYXNoTWFwQnVja2V0Pjo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxs
LCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEhhc2hNYXBJbXBsKiB0aGlzT2JqZWN0ID0ganND
YXN0PEhhc2hNYXBJbXBsKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0
aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNjYsNiArNzEsOCBAQCB2b2lkIEhhc2hNYXBJbXBsPEhh
c2hNYXBCdWNrZXQ+Ojp2aXNpdENoCiAgICAgICAgIHZpc2l0b3IubWFya0F1eGlsaWFyeShidWZm
ZXIpOwogfQogCitERUZJTkVfVEVNUExBVEVfVklTSVRfQ0hJTERSRU4odGVtcGxhdGU8dHlwZW5h
bWUgSGFzaE1hcEJ1Y2tldD4sIEhhc2hNYXBJbXBsPEhhc2hNYXBCdWNrZXQ+KTsKKwogdGVtcGxh
dGUgPHR5cGVuYW1lIEhhc2hNYXBCdWNrZXQ+CiBzaXplX3QgSGFzaE1hcEltcGw8SGFzaE1hcEJ1
Y2tldD46OmVzdGltYXRlZFNpemUoSlNDZWxsKiBjZWxsLCBWTSYgdm0pCiB7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9IYXNoTWFwSW1wbC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0hhc2hNYXBJbXBsLmgJKHJldmlzaW9uIDI3MTM2
OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0hhc2hNYXBJbXBsLmgJKHdvcmtp
bmcgY29weSkKQEAgLTE0OCw3ICsxNDgsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX2Rh
dGEudmFsdWUuZ2V0KCk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihK
U0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVEVNUExBVEVfVklTSVRfQ0hJTERS
RU47CiAKICAgICBBTFdBWVNfSU5MSU5FIEhhc2hNYXBCdWNrZXQqIG5leHQoKSBjb25zdCB7IHJl
dHVybiBtX25leHQuZ2V0KCk7IH0KICAgICBBTFdBWVNfSU5MSU5FIEhhc2hNYXBCdWNrZXQqIHBy
ZXYoKSBjb25zdCB7IHJldHVybiBtX3ByZXYuZ2V0KCk7IH0KQEAgLTM2NCw3ICszNjQsNyBAQCBj
bGFzcyBIYXNoTWFwSW1wbCA6IHB1YmxpYyBKU05vbkZpbmFsT2JqCiBwdWJsaWM6CiAgICAgdXNp
bmcgQnVja2V0VHlwZSA9IEhhc2hNYXBCdWNrZXRUeXBlOwogCi0gICAgc3RhdGljIHZvaWQgdmlz
aXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVEVNUExBVEVf
VklTSVRfQ0hJTERSRU47CiAKICAgICBzdGF0aWMgc2l6ZV90IGVzdGltYXRlZFNpemUoSlNDZWxs
KiwgVk0mKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50ZXJuYWxG
dW5jdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SW50ZXJuYWxGdW5jdGlvbi5jcHAJKHJldmlzaW9uIDI3MTM2OCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0ludGVybmFsRnVuY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02
NCw3ICs2NCw4IEBAIHZvaWQgSW50ZXJuYWxGdW5jdGlvbjo6ZmluaXNoQ3JlYXRpb24oVk0KICAg
ICB9CiB9CiAKLXZvaWQgSW50ZXJuYWxGdW5jdGlvbjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNl
bGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3Zv
aWQgSW50ZXJuYWxGdW5jdGlvbjo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNp
dG9yJiB2aXNpdG9yKQogewogICAgIEludGVybmFsRnVuY3Rpb24qIHRoaXNPYmplY3QgPSBqc0Nh
c3Q8SW50ZXJuYWxGdW5jdGlvbio+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJ
VFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTczLDYgKzc0LDggQEAgdm9pZCBJbnRlcm5hbEZ1
bmN0aW9uOjp2aXNpdENoaWxkcmVuKEpTQwogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3Qt
Pm1fb3JpZ2luYWxOYW1lKTsKIH0KIAorREVGSU5FX0VYUE9SVF9WSVNJVF9DSElMRFJFTihJbnRl
cm5hbEZ1bmN0aW9uKTsKKwogY29uc3QgU3RyaW5nJiBJbnRlcm5hbEZ1bmN0aW9uOjpuYW1lKCkK
IHsKICAgICBjb25zdCBTdHJpbmcmIG5hbWUgPSBtX29yaWdpbmFsTmFtZS0+dHJ5R2V0VmFsdWUo
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGVybmFsRnVuY3Rpb24u
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRlcm5hbEZ1
bmN0aW9uLmgJKHJldmlzaW9uIDI3MTM2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0ludGVybmFsRnVuY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtNDYsNyArNDYsNyBAQCBw
dWJsaWM6CiAKICAgICBERUNMQVJFX0VYUE9SVF9JTkZPOwogCi0gICAgSlNfRVhQT1JUX1BSSVZB
VEUgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAg
IERFQ0xBUkVfRVhQT1JUX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUg
Y29uc3QgU3RyaW5nJiBuYW1lKCk7CiAgICAgY29uc3QgU3RyaW5nIGRpc3BsYXlOYW1lKFZNJik7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsQ29sbGF0b3IuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxDb2xsYXRvci5j
cHAJKHJldmlzaW9uIDI3MTM2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lu
dGxDb2xsYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY1LDcgKzY1LDggQEAgdm9pZCBJbnRs
Q29sbGF0b3I6OmZpbmlzaENyZWF0aW9uKFZNJiB2bQogICAgIEFTU0VSVChpbmhlcml0cyh2bSwg
aW5mbygpKSk7CiB9CiAKLXZvaWQgSW50bENvbGxhdG9yOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCog
Y2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgor
dm9pZCBJbnRsQ29sbGF0b3I6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRv
ciYgdmlzaXRvcikKIHsKICAgICBJbnRsQ29sbGF0b3IqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SW50
bENvbGxhdG9yKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2Jq
ZWN0LCBpbmZvKCkpOwpAQCAtNzUsNiArNzYsOCBAQCB2b2lkIEludGxDb2xsYXRvcjo6dmlzaXRD
aGlsZHJlbihKU0NlbGwqCiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9ib3VuZENv
bXBhcmUpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSW50bENvbGxhdG9yKTsKKwogVmVj
dG9yPFN0cmluZz4gSW50bENvbGxhdG9yOjpzb3J0TG9jYWxlRGF0YShjb25zdCBTdHJpbmcmIGxv
Y2FsZSwgUmVsZXZhbnRFeHRlbnNpb25LZXkga2V5KQogewogICAgIC8vIDkuMSBJbnRlcm5hbCBz
bG90cyBvZiBTZXJ2aWNlIENvbnN0cnVjdG9ycyAmIDEwLjIuMyBJbnRlcm5hbCBzbG90cyAoRUNN
QS00MDIgMi4wKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bENvbGxh
dG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bENv
bGxhdG9yLmgJKHJldmlzaW9uIDI3MTM2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0ludGxDb2xsYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC04MCw3ICs4MCw3IEBAIHB1Ymxp
YzoKIHByaXZhdGU6CiAgICAgSW50bENvbGxhdG9yKFZNJiwgU3RydWN0dXJlKik7CiAgICAgdm9p
ZCBmaW5pc2hDcmVhdGlvbihWTSYpOwotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlND
ZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAg
Ym9vbCB1cGRhdGVDYW5Eb0FTQ0lJVUNBRFVDRVRDb21wYXJpc29uKCkgY29uc3Q7CiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxEYXRlVGltZUZvcm1hdC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERhdGVUaW1lRm9y
bWF0LmNwcAkocmV2aXNpb24gMjcxMzY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSW50bERhdGVUaW1lRm9ybWF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTAsNyArOTAsOCBA
QCB2b2lkIEludGxEYXRlVGltZUZvcm1hdDo6ZmluaXNoQ3JlYXRpb24oCiAgICAgQVNTRVJUKGlu
aGVyaXRzKHZtLCBpbmZvKCkpKTsKIH0KIAotdm9pZCBJbnRsRGF0ZVRpbWVGb3JtYXQ6OnZpc2l0
Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5
cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEludGxEYXRlVGltZUZvcm1hdDo6dmlzaXRDaGlsZHJlbklt
cGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEludGxEYXRlVGltZUZv
cm1hdCogdGhpc09iamVjdCA9IGpzQ2FzdDxJbnRsRGF0ZVRpbWVGb3JtYXQqPihjZWxsKTsKICAg
ICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC0xMDAs
NiArMTAxLDggQEAgdm9pZCBJbnRsRGF0ZVRpbWVGb3JtYXQ6OnZpc2l0Q2hpbGRyZW4oSgogICAg
IHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fYm91bmRGb3JtYXQpOwogfQogCitERUZJTkVf
VklTSVRfQ0hJTERSRU4oSW50bERhdGVUaW1lRm9ybWF0KTsKKwogdm9pZCBJbnRsRGF0ZVRpbWVG
b3JtYXQ6OnNldEJvdW5kRm9ybWF0KFZNJiB2bSwgSlNCb3VuZEZ1bmN0aW9uKiBmb3JtYXQpCiB7
CiAgICAgbV9ib3VuZEZvcm1hdC5zZXQodm0sIHRoaXMsIGZvcm1hdCk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsRGF0ZVRpbWVGb3JtYXQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsRGF0ZVRpbWVGb3JtYXQuaAkocmV2
aXNpb24gMjcxMzY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERhdGVU
aW1lRm9ybWF0LmgJKHdvcmtpbmcgY29weSkKQEAgLTg1LDcgKzg1LDcgQEAgcHVibGljOgogcHJp
dmF0ZToKICAgICBJbnRsRGF0ZVRpbWVGb3JtYXQoVk0mLCBTdHJ1Y3R1cmUqKTsKICAgICB2b2lk
IGZpbmlzaENyZWF0aW9uKFZNJik7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0Nl
bGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBz
dGF0aWMgVmVjdG9yPFN0cmluZz4gbG9jYWxlRGF0YShjb25zdCBTdHJpbmcmLCBSZWxldmFudEV4
dGVuc2lvbktleSk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxM
b2NhbGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lu
dGxMb2NhbGUuY3BwCShyZXZpc2lvbiAyNzEzNjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9JbnRsTG9jYWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTgsNyArNTgsOCBAQCB2
b2lkIEludGxMb2NhbGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKICAgICBBU1NFUlQoaW5oZXJp
dHModm0sIGluZm8oKSkpOwogfQogCi12b2lkIEludGxMb2NhbGU6OnZpc2l0Q2hpbGRyZW4oSlND
ZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0
b3I+Cit2b2lkIEludGxMb2NhbGU6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlz
aXRvciYgdmlzaXRvcikKIHsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEludGxMb2Nh
bGUqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGlu
Zm8oKSk7CkBAIC02Niw2ICs2Nyw4IEBAIHZvaWQgSW50bExvY2FsZTo6dmlzaXRDaGlsZHJlbihK
U0NlbGwqIGMKICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwog
fQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSW50bExvY2FsZSk7CisKIGNsYXNzIExvY2FsZUlE
QnVpbGRlciBmaW5hbCB7CiBwdWJsaWM6CiAgICAgYm9vbCBpbml0aWFsaXplKGNvbnN0IFN0cmlu
ZyYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bExvY2FsZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxMb2NhbGUuaAko
cmV2aXNpb24gMjcxMzY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bExv
Y2FsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03MSw3ICs3MSw3IEBAIHB1YmxpYzoKIHByaXZhdGU6
CiAgICAgSW50bExvY2FsZShWTSYsIFN0cnVjdHVyZSopOwogICAgIHZvaWQgZmluaXNoQ3JlYXRp
b24oVk0mKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNp
dG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIFN0cmluZyBrZXl3b3Jk
VmFsdWUoQVNDSUlMaXRlcmFsLCBib29sIGlzQm9vbGVhbiA9IGZhbHNlKSBjb25zdDsKIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE51bWJlckZvcm1hdC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE51bWJlckZvcm1h
dC5jcHAJKHJldmlzaW9uIDI3MTM2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0ludGxOdW1iZXJGb3JtYXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Myw3ICs3Myw4IEBAIHZv
aWQgSW50bE51bWJlckZvcm1hdDo6ZmluaXNoQ3JlYXRpb24oVk0KICAgICBBU1NFUlQoaW5oZXJp
dHModm0sIGluZm8oKSkpOwogfQogCi12b2lkIEludGxOdW1iZXJGb3JtYXQ6OnZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1l
IFZpc2l0b3I+Cit2b2lkIEludGxOdW1iZXJGb3JtYXQ6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2Vs
bCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBJbnRsTnVtYmVyRm9ybWF0KiB0aGlz
T2JqZWN0ID0ganNDYXN0PEludGxOdW1iZXJGb3JtYXQqPihjZWxsKTsKICAgICBBU1NFUlRfR0Nf
T0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC04Myw2ICs4NCw4IEBAIHZv
aWQgSW50bE51bWJlckZvcm1hdDo6dmlzaXRDaGlsZHJlbihKU0MKICAgICB2aXNpdG9yLmFwcGVu
ZCh0aGlzT2JqZWN0LT5tX2JvdW5kRm9ybWF0KTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVO
KEludGxOdW1iZXJGb3JtYXQpOworCiBWZWN0b3I8U3RyaW5nPiBJbnRsTnVtYmVyRm9ybWF0Ojps
b2NhbGVEYXRhKGNvbnN0IFN0cmluZyYgbG9jYWxlLCBSZWxldmFudEV4dGVuc2lvbktleSBrZXkp
CiB7CiAgICAgLy8gOS4xIEludGVybmFsIHNsb3RzIG9mIFNlcnZpY2UgQ29uc3RydWN0b3JzICYg
MTEuMi4zIEludGVybmFsIHNsb3RzIChFQ01BLTQwMiAyLjApCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9JbnRsTnVtYmVyRm9ybWF0LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE51bWJlckZvcm1hdC5oCShyZXZpc2lvbiAyNzEz
NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTnVtYmVyRm9ybWF0LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTk2LDcgKzk2LDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBJ
bnRsTnVtYmVyRm9ybWF0KFZNJiwgU3RydWN0dXJlKik7CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlv
bihWTSYpOwotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0
b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgc3RhdGljIFZlY3RvcjxT
dHJpbmc+IGxvY2FsZURhdGEoY29uc3QgU3RyaW5nJiwgUmVsZXZhbnRFeHRlbnNpb25LZXkpOwog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsUGx1cmFsUnVsZXMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxQbHVyYWxS
dWxlcy5jcHAJKHJldmlzaW9uIDI3MTM2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0ludGxQbHVyYWxSdWxlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYxLDcgKzYxLDggQEAg
dm9pZCBJbnRsUGx1cmFsUnVsZXM6OmZpbmlzaENyZWF0aW9uKFZNJgogICAgIEFTU0VSVChpbmhl
cml0cyh2bSwgaW5mbygpKSk7CiB9CiAKLXZvaWQgSW50bFBsdXJhbFJ1bGVzOjp2aXNpdENoaWxk
cmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBWaXNpdG9yPgordm9pZCBJbnRsUGx1cmFsUnVsZXM6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2Vs
bCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBJbnRsUGx1cmFsUnVsZXMqIHRoaXNP
YmplY3QgPSBqc0Nhc3Q8SW50bFBsdXJhbFJ1bGVzKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09C
SkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNjksNiArNzAsOCBAQCB2b2lk
IEludGxQbHVyYWxSdWxlczo6dmlzaXRDaGlsZHJlbihKU0NlCiAgICAgQmFzZTo6dmlzaXRDaGls
ZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKElu
dGxQbHVyYWxSdWxlcyk7CisKIFZlY3RvcjxTdHJpbmc+IEludGxQbHVyYWxSdWxlczo6bG9jYWxl
RGF0YShjb25zdCBTdHJpbmcmLCBSZWxldmFudEV4dGVuc2lvbktleSkKIHsKICAgICByZXR1cm4g
eyB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFBsdXJhbFJ1bGVz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFBsdXJh
bFJ1bGVzLmgJKHJldmlzaW9uIDI3MTM2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0ludGxQbHVyYWxSdWxlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC02Niw3ICs2Niw3IEBAIHB1
YmxpYzoKIHByaXZhdGU6CiAgICAgSW50bFBsdXJhbFJ1bGVzKFZNJiwgU3RydWN0dXJlKik7CiAg
ICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOwotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwog
CiAgICAgc3RhdGljIFZlY3RvcjxTdHJpbmc+IGxvY2FsZURhdGEoY29uc3QgU3RyaW5nJiwgUmVs
ZXZhbnRFeHRlbnNpb25LZXkpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9JbnRsUmVsYXRpdmVUaW1lRm9ybWF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9JbnRsUmVsYXRpdmVUaW1lRm9ybWF0LmNwcAkocmV2aXNpb24gMjcx
MzY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFJlbGF0aXZlVGltZUZv
cm1hdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYyLDcgKzYyLDggQEAgdm9pZCBJbnRsUmVsYXRp
dmVUaW1lRm9ybWF0OjpmaW5pc2hDcmVhdAogICAgIEFTU0VSVChpbmhlcml0cyh2bSwgaW5mbygp
KSk7CiB9CiAKLXZvaWQgSW50bFJlbGF0aXZlVGltZUZvcm1hdDo6dmlzaXRDaGlsZHJlbihKU0Nl
bGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRv
cj4KK3ZvaWQgSW50bFJlbGF0aXZlVGltZUZvcm1hdDo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxs
KiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nh
c3Q8SW50bFJlbGF0aXZlVGltZUZvcm1hdCo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1Rf
SU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTcwLDYgKzcxLDggQEAgdm9pZCBJbnRs
UmVsYXRpdmVUaW1lRm9ybWF0Ojp2aXNpdENoaWxkcgogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4o
dGhpc09iamVjdCwgdmlzaXRvcik7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihJbnRsUmVs
YXRpdmVUaW1lRm9ybWF0KTsKKwogVmVjdG9yPFN0cmluZz4gSW50bFJlbGF0aXZlVGltZUZvcm1h
dDo6bG9jYWxlRGF0YShjb25zdCBTdHJpbmcmIGxvY2FsZSwgUmVsZXZhbnRFeHRlbnNpb25LZXkg
a2V5KQogewogICAgIEFTU0VSVF9VTlVTRUQoa2V5LCBrZXkgPT0gUmVsZXZhbnRFeHRlbnNpb25L
ZXk6Ok51KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxSZWxhdGl2
ZVRpbWVGb3JtYXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9JbnRsUmVsYXRpdmVUaW1lRm9ybWF0LmgJKHJldmlzaW9uIDI3MTM2OCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxSZWxhdGl2ZVRpbWVGb3JtYXQuaAkod29ya2luZyBj
b3B5KQpAQCAtNjQsNyArNjQsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIEludGxSZWxhdGl2
ZVRpbWVGb3JtYXQoVk0mLCBTdHJ1Y3R1cmUqKTsKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZN
Jik7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYp
OworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBzdGF0aWMgVmVjdG9yPFN0cmlu
Zz4gbG9jYWxlRGF0YShjb25zdCBTdHJpbmcmLCBSZWxldmFudEV4dGVuc2lvbktleSk7CiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxTZWdtZW50SXRlcmF0b3IuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxTZWdtZW50
SXRlcmF0b3IuY3BwCShyZXZpc2lvbiAyNzEzNjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9JbnRsU2VnbWVudEl0ZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjQsMTMg
KzY0LDE2IEBAIHZvaWQgSW50bFNlZ21lbnRJdGVyYXRvcjo6ZmluaXNoQ3JlYXRpb24KICAgICBt
X3N0cmluZy5zZXQodm0sIHRoaXMsIHN0cmluZyk7CiB9CiAKLXZvaWQgSW50bFNlZ21lbnRJdGVy
YXRvcjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQor
dGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSW50bFNlZ21lbnRJdGVyYXRvcjo6dmlz
aXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGF1
dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SW50bFNlZ21lbnRJdGVyYXRvcio+KGNlbGwpOwogICAg
IEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CiAgICAgdmlzaXRvci5h
cHBlbmQodGhpc09iamVjdC0+bV9zdHJpbmcpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4o
SW50bFNlZ21lbnRJdGVyYXRvcik7CisKIEpTT2JqZWN0KiBJbnRsU2VnbWVudEl0ZXJhdG9yOjpu
ZXh0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFs
T2JqZWN0LT52bSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFNl
Z21lbnRJdGVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0ludGxTZWdtZW50SXRlcmF0b3IuaAkocmV2aXNpb24gMjcxMzY4KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFNlZ21lbnRJdGVyYXRvci5oCSh3b3JraW5nIGNvcHkp
CkBAIC01Myw3ICs1Myw3IEBAIHB1YmxpYzoKIAogICAgIEpTT2JqZWN0KiBuZXh0KEpTR2xvYmFs
T2JqZWN0Kik7CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RW
aXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogcHJpdmF0ZToKICAgICBJ
bnRsU2VnbWVudEl0ZXJhdG9yKFZNJiwgU3RydWN0dXJlKiwgc3RkOjp1bmlxdWVfcHRyPFVCcmVh
a0l0ZXJhdG9yLCBVQnJlYWtJdGVyYXRvckRlbGV0ZXI+JiYsIEJveDxWZWN0b3I8VUNoYXI+PiYm
LCBJbnRsU2VnbWVudGVyOjpHcmFudWxhcml0eSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9JbnRsU2VnbWVudHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0ludGxTZWdtZW50cy5jcHAJKHJldmlzaW9uIDI3MTM2OCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxTZWdtZW50cy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEwOSwxMSArMTA5LDE0IEBAIEpTT2JqZWN0KiBJbnRsU2VnbWVudHM6OmNyZWF0ZVNl
Z21lbnRJdGUKICAgICByZXR1cm4gSW50bFNlZ21lbnRJdGVyYXRvcjo6Y3JlYXRlKHZtLCBnbG9i
YWxPYmplY3QtPnNlZ21lbnRJdGVyYXRvclN0cnVjdHVyZSgpLCBXVEZNb3ZlKHNlZ21lbnRlciks
IG1fYnVmZmVyLCBtX3N0cmluZy5nZXQoKSwgbV9ncmFudWxhcml0eSk7CiB9CiAKLXZvaWQgSW50
bFNlZ21lbnRzOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0
b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBJbnRsU2VnbWVudHM6OnZpc2l0
Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBhdXRv
KiB0aGlzT2JqZWN0ID0ganNDYXN0PEludGxTZWdtZW50cyo+KGNlbGwpOwogICAgIEJhc2U6OnZp
c2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CiAgICAgdmlzaXRvci5hcHBlbmQodGhp
c09iamVjdC0+bV9zdHJpbmcpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSW50bFNlZ21l
bnRzKTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9JbnRsU2VnbWVudHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9JbnRsU2VnbWVudHMuaAkocmV2aXNpb24gMjcxMzY4KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFNlZ21lbnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTU0
LDcgKzU0LDcgQEAgcHVibGljOgogICAgIEpTVmFsdWUgY29udGFpbmluZyhKU0dsb2JhbE9iamVj
dCosIEpTVmFsdWUgaW5kZXhWYWx1ZSk7CiAgICAgSlNPYmplY3QqIGNyZWF0ZVNlZ21lbnRJdGVy
YXRvcihKU0dsb2JhbE9iamVjdCopOwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihK
U0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKIHBy
aXZhdGU6CiAgICAgSW50bFNlZ21lbnRzKFZNJiwgU3RydWN0dXJlKiwgc3RkOjp1bmlxdWVfcHRy
PFVCcmVha0l0ZXJhdG9yLCBVQnJlYWtJdGVyYXRvckRlbGV0ZXI+JiYsIEJveDxWZWN0b3I8VUNo
YXI+PiYmLCBJbnRsU2VnbWVudGVyOjpHcmFudWxhcml0eSk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuY3BwCShyZXZpc2lv
biAyNzEzNjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVy
Vmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1NSw3ICsxNTUsOCBAQCB2b2lkIEpTQXJyYXlC
dWZmZXJWaWV3OjpmaW5pc2hDcmVhdGlvbihWCiAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKIH0KIAotdm9pZCBKU0FycmF5QnVmZmVyVmlldzo6dmlzaXRDaGlsZHJlbihKU0NlbGwq
IGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4K
K3ZvaWQgSlNBcnJheUJ1ZmZlclZpZXc6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwg
VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU0FycmF5QnVmZmVyVmlldyogdGhpc09iamVjdCA9
IGpzQ2FzdDxKU0FycmF5QnVmZmVyVmlldyo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1Rf
SU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTE2OSw2ICsxNzAsOCBAQCB2b2lkIEpT
QXJyYXlCdWZmZXJWaWV3Ojp2aXNpdENoaWxkcmVuKEpTCiAgICAgfQogfQogCitERUZJTkVfVklT
SVRfQ0hJTERSRU4oSlNBcnJheUJ1ZmZlclZpZXcpOworCiBib29sIEpTQXJyYXlCdWZmZXJWaWV3
OjpwdXQoCiAgICAgSlNDZWxsKiBjZWxsLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQ
cm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLAogICAgIFB1dFByb3BlcnR5
U2xvdCYgc2xvdCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlC
dWZmZXJWaWV3LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNBcnJheUJ1ZmZlclZpZXcuaAkocmV2aXNpb24gMjcxMzY4KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAtMTcy
LDcgKzE3Miw3IEBAIHByb3RlY3RlZDoKICAgICAKICAgICBzdGF0aWMgYm9vbCBwdXQoSlNDZWxs
KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xv
dCYpOwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRv
ciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAgICAgCiBwdWJsaWM6CiAgICAgVHlw
ZWRBcnJheU1vZGUgbW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fbW9kZTsgfQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUl0ZXJhdG9yLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5SXRlcmF0b3IuY3BwCShyZXZp
c2lvbiAyNzEzNjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5SXRl
cmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OCwxMSArNjgsMTQgQEAgdm9pZCBKU0FycmF5
SXRlcmF0b3I6OmZpbmlzaENyZWF0aW9uKFZNJgogICAgICAgICBCYXNlOjppbnRlcm5hbEZpZWxk
KGluZGV4KS5zZXQodm0sIHRoaXMsIHZhbHVlc1tpbmRleF0pOwogfQogCi12b2lkIEpTQXJyYXlJ
dGVyYXRvcjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9y
KQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNBcnJheUl0ZXJhdG9yOjp2aXNp
dENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0
byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0FycmF5SXRlcmF0b3IqPihjZWxsKTsKICAgICBBU1NF
UlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAgICAgQmFzZTo6dmlz
aXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxE
UkVOKEpTQXJyYXlJdGVyYXRvcik7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUl0ZXJhdG9yLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUl0ZXJhdG9yLmgJKHJldmlzaW9u
IDI3MTM2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlJdGVyYXRv
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC03OCw3ICs3OCw3IEBAIHB1YmxpYzoKIAogICAgIERFQ0xB
UkVfSU5GTzsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZp
c2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiBwcml2YXRlOgogICAgIEpT
QXJyYXlJdGVyYXRvcihWTSYsIFN0cnVjdHVyZSopOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNBc3luY0dlbmVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBc3luY0dlbmVyYXRvci5jcHAJKHJldmlzaW9uIDI3MTM2
OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXN5bmNHZW5lcmF0b3IuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC01OSwxMSArNTksMTQgQEAgdm9pZCBKU0FzeW5jR2VuZXJhdG9y
OjpmaW5pc2hDcmVhdGlvbihWTQogICAgICAgICBpbnRlcm5hbEZpZWxkKGluZGV4KS5zZXQodm0s
IHRoaXMsIHZhbHVlc1tpbmRleF0pOwogfQogCi12b2lkIEpTQXN5bmNHZW5lcmF0b3I6OnZpc2l0
Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5
cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTQXN5bmNHZW5lcmF0b3I6OnZpc2l0Q2hpbGRyZW5JbXBs
KEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBhdXRvKiB0aGlzT2JqZWN0
ID0ganNDYXN0PEpTQXN5bmNHZW5lcmF0b3IqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNU
X0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0
aGlzT2JqZWN0LCB2aXNpdG9yKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTQXN5bmNH
ZW5lcmF0b3IpOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTQXN5bmNHZW5lcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0FzeW5jR2VuZXJhdG9yLmgJKHJldmlzaW9uIDI3MTM2OCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXN5bmNHZW5lcmF0b3IuaAkod29y
a2luZyBjb3B5KQpAQCAtOTUsNyArOTUsNyBAQCBwdWJsaWM6CiAKICAgICBERUNMQVJFX0VYUE9S
VF9JTkZPOwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90Vmlz
aXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKIHByaXZhdGU6CiAgICAgSlNB
c3luY0dlbmVyYXRvcihWTSYsIFN0cnVjdHVyZSopOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNCaWdJbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTQmlnSW50LmNwcAkocmV2aXNpb24gMjcxMzY4KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCaWdJbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Nyw3
ICs2Nyw4IEBAIEpTQmlnSW50OjpKU0JpZ0ludChWTSYgdm0sIFN0cnVjdHVyZSogc3QKICAgICAs
IG1fZGF0YSh2bSwgdGhpcywgZGF0YSwgbGVuZ3RoKQogeyB9CiAKLXZvaWQgSlNCaWdJbnQ6OnZp
c2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRl
PHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTQmlnSW50Ojp2aXNpdENoaWxkcmVuSW1wbChKU0Nl
bGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpz
Q2FzdDxKU0JpZ0ludCo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhp
c09iamVjdCwgaW5mbygpKTsKQEAgLTc2LDYgKzc3LDggQEAgdm9pZCBKU0JpZ0ludDo6dmlzaXRD
aGlsZHJlbihKU0NlbGwqIGNlbAogICAgICAgICB2aXNpdG9yLm1hcmtBdXhpbGlhcnkoZGF0YSk7
CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU0JpZ0ludCk7CisKIHZvaWQgSlNCaWdJbnQ6
OmluaXRpYWxpemUoSW5pdGlhbGl6YXRpb25UeXBlIGluaXRUeXBlKQogewogICAgIGlmIChpbml0
VHlwZSA9PSBJbml0aWFsaXphdGlvblR5cGU6OldpdGhaZXJvKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNCaWdJbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0JpZ0ludC5oCShyZXZpc2lvbiAyNzEzNjgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JpZ0ludC5oCSh3b3JraW5nIGNvcHkpCkBAIC01MCw3
ICs1MCw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVy
ZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBTdHJ1Y3R1cmVJc0ltbW9ydGFsIHwgT3Zl
cnJpZGVzVG9UaGlzOwogICAgIGZyaWVuZCBjbGFzcyBDYWNoZWRCaWdJbnQ7CiAKLSAgICBzdGF0
aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFS
RV9WSVNJVF9DSElMRFJFTjsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJz
cGFjZUFjY2Vzcz4KICAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQm91bmRGdW5jdGlvbi5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCb3VuZEZ1bmN0
aW9uLmNwcAkocmV2aXNpb24gMjcxMzY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNCb3VuZEZ1bmN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQ5LDcgKzI0OSw4IEBA
IHZvaWQgSlNCb3VuZEZ1bmN0aW9uOjpmaW5pc2hDcmVhdGlvbihWTSYKICAgICBBU1NFUlQoaW5o
ZXJpdHModm0sIGluZm8oKSkpOwogfQogCi12b2lkIEpTQm91bmRGdW5jdGlvbjo6dmlzaXRDaGls
ZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5h
bWUgVmlzaXRvcj4KK3ZvaWQgSlNCb3VuZEZ1bmN0aW9uOjp2aXNpdENoaWxkcmVuSW1wbChKU0Nl
bGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNCb3VuZEZ1bmN0aW9uKiB0aGlz
T2JqZWN0ID0ganNDYXN0PEpTQm91bmRGdW5jdGlvbio+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19P
QkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTI2MSw0ICsyNjIsNiBAQCB2
b2lkIEpTQm91bmRGdW5jdGlvbjo6dmlzaXRDaGlsZHJlbihKU0NlCiAgICAgdmlzaXRvci5hcHBl
bmQodGhpc09iamVjdC0+bV9uYW1lTWF5QmVOdWxsKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxE
UkVOKEpTQm91bmRGdW5jdGlvbik7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCb3VuZEZ1bmN0aW9uLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCb3VuZEZ1bmN0aW9uLmgJKHJldmlzaW9u
IDI3MTM2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQm91bmRGdW5jdGlv
bi5oCSh3b3JraW5nIGNvcHkpCkBAIC04NCw3ICs4NCw3IEBAIHByaXZhdGU6CiAgICAgSlNCb3Vu
ZEZ1bmN0aW9uKFZNJiwgTmF0aXZlRXhlY3V0YWJsZSosIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0
dXJlKiwgSlNPYmplY3QqIHRhcmdldEZ1bmN0aW9uLCBKU1ZhbHVlIGJvdW5kVGhpcywgSlNJbW11
dGFibGVCdXR0ZXJmbHkqIGJvdW5kQXJncywgSlNTdHJpbmcqIG5hbWVNYXlCZU51bGwsIGRvdWJs
ZSBsZW5ndGgpOwogCiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOwotICAgIHN0YXRpYyB2
b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJ
U0lUX0NISUxEUkVOOwogCiAgICAgV3JpdGVCYXJyaWVyPEpTT2JqZWN0PiBtX3RhcmdldEZ1bmN0
aW9uOwogICAgIFdyaXRlQmFycmllcjxVbmtub3duPiBtX2JvdW5kVGhpczsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2FsbGVlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NhbGxlZS5jcHAJKHJldmlzaW9uIDI3MTM2OCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2FsbGVlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNTAsNyArNTAsOCBAQCB2b2lkIEpTQ2FsbGVlOjpmaW5pc2hDcmVhdGlvbihWTSYg
dm0pCiAgICAgQVNTRVJUKGluaGVyaXRzKHZtLCBpbmZvKCkpKTsKIH0KIAotdm9pZCBKU0NhbGxl
ZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVt
cGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNDYWxsZWU6OnZpc2l0Q2hpbGRyZW5JbXBs
KEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU0NhbGxlZSogdGhpc09i
amVjdCA9IGpzQ2FzdDxKU0NhbGxlZSo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5I
RVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTU5LDQgKzYwLDYgQEAgdm9pZCBKU0NhbGxl
ZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbAogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmpl
Y3QtPm1fc2NvcGUpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNDYWxsZWUpOworCiB9
IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
Q2FsbGVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlND
YWxsZWUuaAkocmV2aXNpb24gMjcxMzY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNDYWxsZWUuaAkod29ya2luZyBjb3B5KQpAQCAtMTAwLDcgKzEwMCw3IEBAIHByb3RlY3Rl
ZDoKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7CiAgICAgdXNpbmcgQmFzZTo6ZmluaXNo
Q3JlYXRpb247CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RW
aXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogcHJpdmF0ZToKICAgICBm
cmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNDZWxsLmgJKHJldmlzaW9uIDI3MTM2OCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBAQAog
LyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMSBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUu
b3JnKQogICogIENvcHlyaWdodCAoQykgMjAwMSBQZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQot
ICogIENvcHlyaWdodCAoQykgMjAwMy0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUg
IkpTTG9jay5oIgogI2luY2x1ZGUgIkpTVHlwZUluZm8uaCIKICNpbmNsdWRlICJTbG90VmlzaXRv
ci5oIgorI2luY2x1ZGUgIlNsb3RWaXNpdG9yTWFjcm9zLmgiCiAjaW5jbHVkZSAiU3Vic3BhY2VB
Y2Nlc3MuaCIKICNpbmNsdWRlICJUeXBlZEFycmF5VHlwZS5oIgogI2luY2x1ZGUgIldyaXRlQmFy
cmllci5oIgpAQCAtMTY3LDggKzE2OCw4IEBAIHB1YmxpYzoKICAgICBzaXplX3QgZXN0aW1hdGVk
U2l6ZUluQnl0ZXMoVk0mKSBjb25zdDsKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgc2l6
ZV90IGVzdGltYXRlZFNpemUoSlNDZWxsKiwgVk0mKTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0
Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdE91
dHB1dENvbnN0cmFpbnRzKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9JTkxJ
TkVfVklTSVRfQ0hJTERSRU47CisgICAgc3RhdGljIHZvaWQgdmlzaXRPdXRwdXRDb25zdHJhaW50
cyhKU0NlbGwqLCBBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAKICAgICBKU19FWFBPUlRfUFJJVkFU
RSBzdGF0aWMgdm9pZCBhbmFseXplSGVhcChKU0NlbGwqLCBIZWFwQW5hbHl6ZXImKTsKIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsSW5saW5lcy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbElubGluZXMuaAkocmV2
aXNpb24gMjcxMzY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsSW5s
aW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAiQ29tcGxl
dGVTdWJzcGFjZUlubGluZXMuaCIKICNpbmNsdWRlICJDUFUuaCIKICNpbmNsdWRlICJDYWxsRnJh
bWVJbmxpbmVzLmgiCisjaW5jbHVkZSAiRGVidWdTbG90VmlzaXRvcklubGluZXMuaCIKICNpbmNs
dWRlICJEZWZlckdDLmgiCiAjaW5jbHVkZSAiRnJlZUxpc3RJbmxpbmVzLmgiCiAjaW5jbHVkZSAi
SGFuZGxlLmgiCkBAIC0xNDEsMTIgKzE0MiwxNSBAQCBBTFdBWVNfSU5MSU5FIFN0cnVjdHVyZSog
SlNDZWxsOjpzdHJ1Y3R1CiAgICAgcmV0dXJuIHZtLmdldFN0cnVjdHVyZShtX3N0cnVjdHVyZUlE
KTsKIH0KIAotaW5saW5lIHZvaWQgSlNDZWxsOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwg
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgoraW5saW5l
IHZvaWQgSlNDZWxsOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZp
c2l0b3IpCiB7CiAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZChjZWxsLT5zdHJ1Y3R1cmUo
dmlzaXRvci52bSgpKSk7CiB9CiAKLWlubGluZSB2b2lkIEpTQ2VsbDo6dmlzaXRPdXRwdXRDb25z
dHJhaW50cyhKU0NlbGwqLCBTbG90VmlzaXRvciYpCitERUZJTkVfSU5MSU5FX1ZJU0lUX0NISUxE
UkVOKEpTQ2VsbCk7CisKK2lubGluZSB2b2lkIEpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50
cyhKU0NlbGwqLCBBYnN0cmFjdFNsb3RWaXNpdG9yJikKIHsKIH0KIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbi5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDdXN0b21HZXR0ZXJT
ZXR0ZXJGdW5jdGlvbi5jcHAJKHJldmlzaW9uIDI3MTM2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTQ3VzdG9tR2V0dGVyU2V0dGVyRnVuY3Rpb24uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC04NSw3ICs4NSw4IEBAIEpTQ3VzdG9tR2V0dGVyU2V0dGVyRnVuY3Rpb24qIEpTQ3Vz
dG9tR2UKICAgICByZXR1cm4gZnVuY3Rpb247CiB9CiAKLXZvaWQgSlNDdXN0b21HZXR0ZXJTZXR0
ZXJGdW5jdGlvbjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNp
dG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNDdXN0b21HZXR0ZXJTZXR0
ZXJGdW5jdGlvbjo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNp
dG9yKQogewogICAgIEpTQ3VzdG9tR2V0dGVyU2V0dGVyRnVuY3Rpb24qIHRoaXNPYmplY3QgPSBq
c0Nhc3Q8SlNDdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbio+KGNlbGwpOwogICAgIEFTU0VSVF9H
Q19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTk0LDYgKzk1LDggQEAg
dm9pZCBKU0N1c3RvbUdldHRlclNldHRlckZ1bmN0aW9uOjp2aXNpdAogICAgIHZpc2l0b3IuYXBw
ZW5kKHRoaXNPYmplY3QtPm1fZ2V0dGVyU2V0dGVyKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxE
UkVOKEpTQ3VzdG9tR2V0dGVyU2V0dGVyRnVuY3Rpb24pOworCiB2b2lkIEpTQ3VzdG9tR2V0dGVy
U2V0dGVyRnVuY3Rpb246OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgTmF0aXZlRXhlY3V0YWJsZSog
ZXhlY3V0YWJsZSwgQ3VzdG9tR2V0dGVyU2V0dGVyKiBnZXR0ZXJTZXR0ZXIsIGNvbnN0IFN0cmlu
ZyYgbmFtZSkKIHsKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSwgZXhlY3V0YWJsZSwgaXNT
ZXR0ZXIoKSwgbmFtZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0N1
c3RvbUdldHRlclNldHRlckZ1bmN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNDdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbi5oCShyZXZpc2lvbiAy
NzEzNjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0N1c3RvbUdldHRlclNl
dHRlckZ1bmN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTYzLDcgKzYzLDcgQEAgcHVibGljOgog
cHJpdmF0ZToKICAgICBKU0N1c3RvbUdldHRlclNldHRlckZ1bmN0aW9uKFZNJiwgTmF0aXZlRXhl
Y3V0YWJsZSosIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKiwgVHlwZSwgY29uc3QgUHJvcGVy
dHlOYW1lJik7CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIE5hdGl2ZUV4ZWN1dGFibGUq
LCBDdXN0b21HZXR0ZXJTZXR0ZXIqLCBjb25zdCBTdHJpbmcmKTsKLSAgICBzdGF0aWMgdm9pZCB2
aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9D
SElMRFJFTjsKIAogICAgIFdyaXRlQmFycmllcjxDdXN0b21HZXR0ZXJTZXR0ZXI+IG1fZ2V0dGVy
U2V0dGVyOwogICAgIFR5cGUgbV90eXBlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNGaW5hbGl6YXRpb25SZWdpc3RyeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGaW5hbGl6YXRpb25SZWdpc3RyeS5jcHAJKHJldmlzaW9u
IDI3MTM2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRmluYWxpemF0aW9u
UmVnaXN0cnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MCw3ICs2MCw4IEBAIHZvaWQgSlNGaW5h
bGl6YXRpb25SZWdpc3RyeTo6ZmluaXNoQ3JlYXQKICAgICBnbG9iYWxPYmplY3QtPmdsb2JhbE9i
amVjdE1ldGhvZFRhYmxlKCktPmN1cnJlbnRTY3JpcHRFeGVjdXRpb25Pd25lcihnbG9iYWxPYmpl
Y3QpOwogfQogCi12b2lkIEpTRmluYWxpemF0aW9uUmVnaXN0cnk6OnZpc2l0Q2hpbGRyZW4oSlND
ZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0
b3I+Cit2b2lkIEpTRmluYWxpemF0aW9uUmVnaXN0cnk6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2Vs
bCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKGNl
bGwsIHZpc2l0b3IpOwogCkBAIC04Nyw2ICs4OCw4IEBAIHZvaWQgSlNGaW5hbGl6YXRpb25SZWdp
c3RyeTo6dmlzaXRDaGlsZHIKICAgICB2aXNpdG9yLnZtKCkuaGVhcC5yZXBvcnRFeHRyYU1lbW9y
eVZpc2l0ZWQodG90YWxCdWZmZXJTaXplc0luQnl0ZXMpOwogfQogCitERUZJTkVfVklTSVRfQ0hJ
TERSRU4oSlNGaW5hbGl6YXRpb25SZWdpc3RyeSk7CisKIHZvaWQgSlNGaW5hbGl6YXRpb25SZWdp
c3RyeTo6ZGVzdHJveShKU0NlbGwqIHRhYmxlKQogewogICAgIHN0YXRpY19jYXN0PEpTRmluYWxp
emF0aW9uUmVnaXN0cnkqPih0YWJsZSktPn5KU0ZpbmFsaXphdGlvblJlZ2lzdHJ5KCk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ZpbmFsaXphdGlvblJlZ2lzdHJ5LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGaW5hbGl6YXRp
b25SZWdpc3RyeS5oCShyZXZpc2lvbiAyNzEzNjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0ZpbmFsaXphdGlvblJlZ2lzdHJ5LmgJKHdvcmtpbmcgY29weSkKQEAgLTcwLDcg
KzcwLDcgQEAgcHVibGljOgogICAgIERFQ0xBUkVfRVhQT1JUX0lORk87CiAKICAgICB2b2lkIGZp
bmFsaXplVW5jb25kaXRpb25hbGx5KFZNJik7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJl
bihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAg
ICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKICAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgbmVlZHNEZXN0cnVjdGlvbiA9IHRydWU7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTRnVuY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uY3BwCShyZXZpc2lvbiAyNzEzNjgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjUyLDcgKzI1Miw4IEBAIGNvbnN0IFNvdXJjZUNvZGUqIEpTRnVuY3Rpb246OnNvdXJjZUNvZGUK
ICAgICByZXR1cm4gJmpzRXhlY3V0YWJsZSgpLT5zb3VyY2UoKTsKIH0KICAgICAKLXZvaWQgSlNG
dW5jdGlvbjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9y
KQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNGdW5jdGlvbjo6dmlzaXRDaGls
ZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTRnVuY3Rp
b24qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNGdW5jdGlvbio+KGNlbGwpOwogICAgIEFTU0VSVF9H
Q19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTI2MSw2ICsyNjIsOCBA
QCB2b2lkIEpTRnVuY3Rpb246OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjCiAgICAgdmlzaXRvci5h
cHBlbmRVbmJhcnJpZXJlZChiaXR3aXNlX2Nhc3Q8SlNDZWxsKj4oYml0d2lzZV9jYXN0PHVpbnRw
dHJfdD4odGhpc09iamVjdC0+bV9leGVjdXRhYmxlT3JSYXJlRGF0YSkgJiB+cmFyZURhdGFUYWcp
KTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTRnVuY3Rpb24pOworCiBDYWxsRGF0YSBK
U0Z1bmN0aW9uOjpnZXRDYWxsRGF0YShKU0NlbGwqIGNlbGwpCiB7CiAgICAgLy8gS2VlcCB0aGlz
IGZ1bmN0aW9uIE9LIGZvciBpbnZvY2F0aW9uIGZyb20gY29uY3VycmVudCBjb21waWxlcnMuCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5oCShyZXZpc2lv
biAyNzEzNjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTE4MCw3ICsxODAsNyBAQCBwcm90ZWN0ZWQ6CiAKICAgICBzdGF0
aWMgYm9vbCBkZWxldGVQcm9wZXJ0eShKU0NlbGwqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5
TmFtZSwgRGVsZXRlUHJvcGVydHlTbG90Jik7CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxk
cmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsK
IAogcHJpdmF0ZToKICAgICBzdGF0aWMgSlNGdW5jdGlvbiogY3JlYXRlSW1wbChWTSYgdm0sIEZ1
bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJsZSwgSlNTY29wZSogc2NvcGUsIFN0cnVjdHVyZSog
c3RydWN0dXJlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmF0
b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2Vu
ZXJhdG9yLmNwcAkocmV2aXNpb24gMjcxMzY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OSwxMSArNTksMTQgQEAg
dm9pZCBKU0dlbmVyYXRvcjo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQogICAgICAgICBpbnRlcm5h
bEZpZWxkKGluZGV4KS5zZXQodm0sIHRoaXMsIHZhbHVlc1tpbmRleF0pOwogfQogCi12b2lkIEpT
R2VuZXJhdG9yOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0
b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0dlbmVyYXRvcjo6dmlzaXRD
aGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGF1dG8q
IHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNHZW5lcmF0b3IqPihjZWxsKTsKICAgICBBU1NFUlRfR0Nf
T0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAgICAgQmFzZTo6dmlzaXRDaGls
ZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpT
R2VuZXJhdG9yKTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0dlbmVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTR2VuZXJhdG9yLmgJKHJldmlzaW9uIDI3MTM2OCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAg
LTk0LDcgKzk0LDcgQEAgcHVibGljOgogCiAgICAgREVDTEFSRV9FWFBPUlRfSU5GTzsKIAotICAg
IHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBE
RUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiBwcml2YXRlOgogICAgIEpTR2VuZXJhdG9yKFZNJiwg
U3RydWN0dXJlKik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVy
aWNUeXBlZEFycmF5Vmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmgJKHJldmlzaW9uIDI3MTM2OCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmgJKHdv
cmtpbmcgY29weSkKQEAgLTMwNyw3ICszMDcsNyBAQCBwcml2YXRlOgogICAgIHN0YXRpYyB2b2lk
IGdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5
TmFtZUFycmF5JiwgRG9udEVudW1Qcm9wZXJ0aWVzTW9kZSk7CiAKICAgICBzdGF0aWMgc2l6ZV90
IGVzdGltYXRlZFNpemUoSlNDZWxsKiwgVk0mKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxk
cmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9URU1QTEFURV9WSVNJVF9D
SElMRFJFTjsKIAogICAgIC8vIFJldHVybnMgdHJ1ZSBpZiBzdWNjZXNzZnVsLCBhbmQgZmFsc2Ug
b24gZXJyb3I7IGl0IHdpbGwgdGhyb3cgb24gZXJyb3IuCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
T3RoZXJBZGFwdG9yPgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5l
cmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmgJKHJldmlzaW9u
IDI3MTM2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVk
QXJyYXlWaWV3SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC00OTEsNyArNDkxLDggQEAgc2l6
ZV90IEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OgogfQogCiB0ZW1wbGF0ZTx0eXBl
bmFtZSBBZGFwdG9yPgotdm9pZCBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6dmlz
aXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8
dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46
OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAg
ICBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0dlbmVyaWNU
eXBlZEFycmF5Vmlldyo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhp
c09iamVjdCwgaW5mbygpKTsKQEAgLTUyOSw0ICs1MzAsNiBAQCB2b2lkIEpTR2VuZXJpY1R5cGVk
QXJyYXlWaWV3PEFkYXB0b3I+Ojp2CiAgICAgfQogfQogCitERUZJTkVfVEVNUExBVEVfVklTSVRf
Q0hJTERSRU4odGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4sIEpTR2VuZXJpY1R5cGVkQXJyYXlW
aWV3PEFkYXB0b3I+KTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCShyZXZpc2lvbiAyNzEz
NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTE4OTUsNyArMTg5NSw4IEBAIHZvaWQgSlNHbG9iYWxPYmplY3Q6
OnJlc2V0UHJvdG90eXBlKFZNJiAKICAgICBzZXRHbG9iYWxUaGlzKHZtLCBKU1Byb3h5OjpjcmVh
dGUodm0sIEpTUHJveHk6OmNyZWF0ZVN0cnVjdHVyZSh2bSwgdGhpcywgcHJvdG90eXBlLCBQdXJl
Rm9yd2FyZGluZ1Byb3h5VHlwZSksIHRoaXMpKTsKIH0KIAotdm9pZCBKU0dsb2JhbE9iamVjdDo6
dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxh
dGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNHbG9iYWxPYmplY3Q6OnZpc2l0Q2hpbGRyZW5J
bXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsgCiAgICAgSlNHbG9iYWxPYmpl
Y3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNHbG9iYWxPYmplY3QqPihjZWxsKTsKICAgICBBU1NF
UlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC0yMDYzLDYgKzIw
NjQsOCBAQCB2b2lkIEpTR2xvYmFsT2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsCiAgICAgdGhp
c09iamVjdC0+bV9yZWdFeHBHbG9iYWxEYXRhLnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOwogfQog
CitERUZJTkVfRVhQT1JUX1ZJU0lUX0NISUxEUkVOKEpTR2xvYmFsT2JqZWN0KTsKKwogQ2FsbEZy
YW1lKiBKU0dsb2JhbE9iamVjdDo6ZGVwcmVjYXRlZENhbGxGcmFtZUZvckRlYnVnZ2VyKCkKIHsK
ICAgICByZXR1cm4gQ2FsbEZyYW1lOjpjcmVhdGUobV9kZXByZWNhdGVkQ2FsbEZyYW1lRm9yRGVi
dWdnZXIpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmpl
Y3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2Jh
bE9iamVjdC5oCShyZXZpc2lvbiAyNzEzNjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0dsb2JhbE9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC02MDksNyArNjA5LDcgQEAg
cHVibGljOgogICAgIEpTX0VYUE9SVF9QUklWQVRFIH5KU0dsb2JhbE9iamVjdCgpOwogICAgIEpT
X0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CiAKLSAgICBKU19F
WFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNp
dG9yJik7CisgICAgREVDTEFSRV9FWFBPUlRfVklTSVRfQ0hJTERSRU47CiAKICAgICBKU19FWFBP
UlRfUFJJVkFURSBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqLCBKU0ds
b2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CiAgICAgSlNfRVhQT1JU
X1BSSVZBVEUgc3RhdGljIGJvb2wgcHV0KEpTQ2VsbCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVy
dHlOYW1lLCBKU1ZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTSW1tdXRhYmxlQnV0dGVyZmx5LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ltbXV0YWJsZUJ1dHRlcmZseS5jcHAJKHJl
dmlzaW9uIDI3MTM2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTSW1tdXRh
YmxlQnV0dGVyZmx5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsOCBAQCBuYW1lc3Bh
Y2UgSlNDIHsKIAogY29uc3QgQ2xhc3NJbmZvIEpTSW1tdXRhYmxlQnV0dGVyZmx5OjpzX2luZm8g
PSB7ICJJbW11dGFibGUgQnV0dGVyZmx5IiwgbnVsbHB0ciwgbnVsbHB0ciwgbnVsbHB0ciwgQ1JF
QVRFX01FVEhPRF9UQUJMRShKU0ltbXV0YWJsZUJ1dHRlcmZseSkgfTsKIAotdm9pZCBKU0ltbXV0
YWJsZUJ1dHRlcmZseTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNJbW11dGFibGVCdXR0
ZXJmbHk6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikK
IHsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNlbGwsIGluZm8oKSk7CiAgICAgQmFz
ZTo6dmlzaXRDaGlsZHJlbihjZWxsLCB2aXNpdG9yKTsKQEAgLTQ1LDYgKzQ2LDggQEAgdm9pZCBK
U0ltbXV0YWJsZUJ1dHRlcmZseTo6dmlzaXRDaGlsZHJlbgogICAgIHZpc2l0b3IuYXBwZW5kVmFs
dWVzSGlkZGVuKGJ1dHRlcmZseS0+Y29udGlndW91cygpLmRhdGEoKSwgYnV0dGVyZmx5LT5wdWJs
aWNMZW5ndGgoKSk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU0ltbXV0YWJsZUJ1dHRl
cmZseSk7CisKIHZvaWQgSlNJbW11dGFibGVCdXR0ZXJmbHk6OmNvcHlUb0FyZ3VtZW50cyhKU0ds
b2JhbE9iamVjdCosIEpTVmFsdWUqIGZpcnN0RWxlbWVudERlc3QsIHVuc2lnbmVkIG9mZnNldCwg
dW5zaWduZWQgbGVuZ3RoKQogewogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7
ICsraSkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbW11dGFibGVC
dXR0ZXJmbHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0ltbXV0YWJsZUJ1dHRlcmZseS5oCShyZXZpc2lvbiAyNzEzNjgpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0ltbXV0YWJsZUJ1dHRlcmZseS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xNDUsNyArMTQ1LDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4ganNEb3VibGVOdW1iZXIo
dmFsdWUpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwg
U2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgdm9pZCBj
b3B5VG9Bcmd1bWVudHMoSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlKiBmaXJzdEVsZW1lbnREZXN0
LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7CiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTSW50ZXJuYWxGaWVsZE9iamVjdEltcGwuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ludGVybmFsRmllbGRPYmplY3RJ
bXBsLmgJKHJldmlzaW9uIDI3MTM2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTSW50ZXJuYWxGaWVsZE9iamVjdEltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtNjYsNyArNjYs
NyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkludGVybmFsRmllbGQo
dW5zaWduZWQgaW5kZXgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU0ludGVybmFsRmllbGRP
YmplY3RJbXBsLCBtX2ludGVybmFsRmllbGRzKSArIGluZGV4ICogc2l6ZW9mKFdyaXRlQmFycmll
cjxVbmtub3duPik7IH0KIAogcHJvdGVjdGVkOgotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1RFTVBMQVRFX1ZJU0lUX0NI
SUxEUkVOOwogCiAgICAgSlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbChWTSYgdm0sIFN0cnVjdHVy
ZSogc3RydWN0dXJlKQogICAgICAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSkKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTSW50ZXJuYWxGaWVsZE9iamVjdEltcGxJbmxpbmVz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbnRlcm5h
bEZpZWxkT2JqZWN0SW1wbElubGluZXMuaAkocmV2aXNpb24gMjcxMzY4KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbElubGluZXMuaAko
d29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAsOCBAQAogbmFtZXNwYWNlIEpTQyB7CiAKIHRlbXBs
YXRlPHVuc2lnbmVkIHBhc3NlZE51bWJlck9mSW50ZXJuYWxGaWVsZHM+Ci12b2lkIEpTSW50ZXJu
YWxGaWVsZE9iamVjdEltcGw8cGFzc2VkTnVtYmVyT2ZJbnRlcm5hbEZpZWxkcz46OnZpc2l0Q2hp
bGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVu
YW1lIFZpc2l0b3I+Cit2b2lkIEpTSW50ZXJuYWxGaWVsZE9iamVjdEltcGw8cGFzc2VkTnVtYmVy
T2ZJbnRlcm5hbEZpZWxkcz46OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRv
ciYgdmlzaXRvcikKIHsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTSW50ZXJuYWxG
aWVsZE9iamVjdEltcGwqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRo
aXNPYmplY3QsIGluZm8oKSk7CkBAIC0zOCw0ICszOSw2IEBAIHZvaWQgSlNJbnRlcm5hbEZpZWxk
T2JqZWN0SW1wbDxwYXNzZWROdW0KICAgICB2aXNpdG9yLmFwcGVuZFZhbHVlcyh0aGlzT2JqZWN0
LT5tX2ludGVybmFsRmllbGRzLCBudW1iZXJPZkludGVybmFsRmllbGRzKTsKIH0KIAorREVGSU5F
X1RFTVBMQVRFX1ZJU0lUX0NISUxEUkVOKHRlbXBsYXRlPHVuc2lnbmVkIHBhc3NlZE51bWJlck9m
SW50ZXJuYWxGaWVsZHM+LCBKU0ludGVybmFsRmllbGRPYmplY3RJbXBsPHBhc3NlZE51bWJlck9m
SW50ZXJuYWxGaWVsZHM+KTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0xleGljYWxFbnZpcm9ubWVudC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMZXhpY2FsRW52aXJvbm1lbnQuY3Bw
CShyZXZpc2lvbiAyNzEzNjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xl
eGljYWxFbnZpcm9ubWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDcgKzM2LDggQEAgbmFt
ZXNwYWNlIEpTQyB7CiAKIGNvbnN0IENsYXNzSW5mbyBKU0xleGljYWxFbnZpcm9ubWVudDo6c19p
bmZvID0geyAiSlNMZXhpY2FsRW52aXJvbm1lbnQiLCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBu
dWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTTGV4aWNhbEVudmlyb25tZW50KSB9OwogCi12
b2lkIEpTTGV4aWNhbEVudmlyb25tZW50Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xv
dFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0xl
eGljYWxFbnZpcm9ubWVudDo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9y
JiB2aXNpdG9yKQogewogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNMZXhpY2FsRW52
aXJvbm1lbnQqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmpl
Y3QsIGluZm8oKSk7CkBAIC00NCw2ICs0NSw4IEBAIHZvaWQgSlNMZXhpY2FsRW52aXJvbm1lbnQ6
OnZpc2l0Q2hpbGRyZW4KICAgICB2aXNpdG9yLmFwcGVuZFZhbHVlc0hpZGRlbih0aGlzT2JqZWN0
LT52YXJpYWJsZXMoKSwgdGhpc09iamVjdC0+c3ltYm9sVGFibGUoKS0+c2NvcGVTaXplKCkpOwog
fQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNMZXhpY2FsRW52aXJvbm1lbnQpOworCiB2b2lk
IEpTTGV4aWNhbEVudmlyb25tZW50OjphbmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhlYXBBbmFs
eXplciYgYW5hbHl6ZXIpCiB7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0xleGlj
YWxFbnZpcm9ubWVudCo+KGNlbGwpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNMZXhpY2FsRW52aXJvbm1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0xleGljYWxFbnZpcm9ubWVudC5oCShyZXZpc2lvbiAyNzEzNjgpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xleGljYWxFbnZpcm9ubWVudC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xMzQsNyArMTM0LDcgQEAgcHJvdGVjdGVkOgogICAgICAgICB9CiAg
ICAgfQogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRv
ciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAgICAgc3RhdGljIHZvaWQgYW5hbHl6
ZUhlYXAoSlNDZWxsKiwgSGVhcEFuYWx5emVyJik7CiB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU01hcEl0ZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01hcEl0ZXJhdG9yLmNwcAkocmV2aXNpb24gMjcxMzY4
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNYXBJdGVyYXRvci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTU3LDEzICs1NywxNiBAQCB2b2lkIEpTTWFwSXRlcmF0b3I6OmZpbmlz
aENyZWF0aW9uKFZNJiB2CiAgICAgICAgIEJhc2U6OmludGVybmFsRmllbGQoaW5kZXgpLnNldCh2
bSwgdGhpcywgdmFsdWVzW2luZGV4XSk7CiB9CiAKLXZvaWQgSlNNYXBJdGVyYXRvcjo6dmlzaXRD
aGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlw
ZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNNYXBJdGVyYXRvcjo6dmlzaXRDaGlsZHJlbkltcGwoSlND
ZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBq
c0Nhc3Q8SlNNYXBJdGVyYXRvcio+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJ
VFModGhpc09iamVjdCwgaW5mbygpKTsKICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmpl
Y3QsIHZpc2l0b3IpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNNYXBJdGVyYXRvcik7
CisKIEpTVmFsdWUgSlNNYXBJdGVyYXRvcjo6Y3JlYXRlUGFpcihKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBKU1ZhbHVlIGtleSwgSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBNYXJrZWRBcmd1
bWVudEJ1ZmZlciBhcmdzOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNN
YXBJdGVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTTWFwSXRlcmF0b3IuaAkocmV2aXNpb24gMjcxMzY4KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNNYXBJdGVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDIsNyArMTQy
LDcgQEAgcHJpdmF0ZToKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGZpbmlzaENyZWF0aW9u
KFZNJiwgSlNNYXAqLCBJdGVyYXRpb25LaW5kKTsKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZN
Jik7CiAgICAgSlNWYWx1ZSBjcmVhdGVQYWlyKEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSwgSlNW
YWx1ZSk7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRv
ciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiB9OwogU1RBVElDX0FTU0VSVF9JU19U
UklWSUFMTFlfREVTVFJVQ1RJQkxFKEpTTWFwSXRlcmF0b3IpOwogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZUVudmlyb25tZW50LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZUVudmlyb25tZW50LmNwcAko
cmV2aXNpb24gMjcxMzY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1
bGVFbnZpcm9ubWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY1LDcgKzY1LDggQEAgdm9pZCBK
U01vZHVsZUVudmlyb25tZW50OjpmaW5pc2hDcmVhdGlvbgogICAgIHRoaXMtPm1vZHVsZVJlY29y
ZFNsb3QoKS5zZXQodm0sIHRoaXMsIG1vZHVsZVJlY29yZCk7CiB9CiAKLXZvaWQgSlNNb2R1bGVF
bnZpcm9ubWVudDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNp
dG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNNb2R1bGVFbnZpcm9ubWVu
dDo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewog
ICAgIEpTTW9kdWxlRW52aXJvbm1lbnQqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNNb2R1bGVFbnZp
cm9ubWVudCo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVj
dCwgaW5mbygpKTsKQEAgLTc0LDYgKzc1LDggQEAgdm9pZCBKU01vZHVsZUVudmlyb25tZW50Ojp2
aXNpdENoaWxkcmVuKAogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1vZHVsZVJlY29y
ZFNsb3QoKSk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU01vZHVsZUVudmlyb25tZW50
KTsKKwogYm9vbCBKU01vZHVsZUVudmlyb25tZW50OjpnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmpl
Y3QqIGNlbGwsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZSBwcm9w
ZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmpl
Y3QtPnZtKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZUVu
dmlyb25tZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNNb2R1bGVFbnZpcm9ubWVudC5oCShyZXZpc2lvbiAyNzEzNjgpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU01vZHVsZUVudmlyb25tZW50LmgJKHdvcmtpbmcgY29weSkKQEAg
LTg5LDcgKzg5LDcgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuICpiaXR3aXNlX2Nhc3Q8V3Jp
dGVCYXJyaWVyQmFzZTxBYnN0cmFjdE1vZHVsZVJlY29yZD4qPihiaXR3aXNlX2Nhc3Q8Y2hhcio+
KHRoaXMpICsgb2Zmc2V0T2ZNb2R1bGVSZWNvcmQoc3ltYm9sVGFibGUoKSkpOwogICAgIH0KIAot
ICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAg
ICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogfTsKIAogaW5saW5lIEpTTW9kdWxlRW52aXJvbm1l
bnQ6OkpTTW9kdWxlRW52aXJvbm1lbnQoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNT
Y29wZSogY3VycmVudFNjb3BlLCBTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZU5hbWVzcGFjZU9iamVjdC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVOYW1lc3Bh
Y2VPYmplY3QuY3BwCShyZXZpc2lvbiAyNzEzNjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU01vZHVsZU5hbWVzcGFjZU9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg1
LDcgKzg1LDggQEAgdm9pZCBKU01vZHVsZU5hbWVzcGFjZU9iamVjdDo6ZGVzdHJveShKUwogICAg
IHRoaXNPYmplY3QtPkpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0Ojp+SlNNb2R1bGVOYW1lc3BhY2VP
YmplY3QoKTsKIH0KIAotdm9pZCBKU01vZHVsZU5hbWVzcGFjZU9iamVjdDo6dmlzaXRDaGlsZHJl
bihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUg
VmlzaXRvcj4KK3ZvaWQgSlNNb2R1bGVOYW1lc3BhY2VPYmplY3Q6OnZpc2l0Q2hpbGRyZW5JbXBs
KEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU01vZHVsZU5hbWVzcGFj
ZU9iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU01vZHVsZU5hbWVzcGFjZU9iamVjdCo+KGNl
bGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsK
QEAgLTk4LDYgKzk5LDggQEAgdm9pZCBKU01vZHVsZU5hbWVzcGFjZU9iamVjdDo6dmlzaXRDaGls
ZAogICAgIH0KIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTTW9kdWxlTmFtZXNwYWNlT2Jq
ZWN0KTsKKwogc3RhdGljIEpTVmFsdWUgZ2V0VmFsdWUoSlNNb2R1bGVFbnZpcm9ubWVudCogZW52
aXJvbm1lbnQsIFByb3BlcnR5TmFtZSBsb2NhbE5hbWUsIFNjb3BlT2Zmc2V0JiBzY29wZU9mZnNl
dCkKIHsKICAgICBTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUgPSBlbnZpcm9ubWVudC0+c3ltYm9s
VGFibGUoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlTmFt
ZXNwYWNlT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QuaAkocmV2aXNpb24gMjcxMzY4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNzIsNyArNzIsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIEpTX0VYUE9S
VF9QUklWQVRFIEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0KFZNJiwgU3RydWN0dXJlKik7CiAgICAg
SlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0dsb2JhbE9iamVjdCosIEFi
c3RyYWN0TW9kdWxlUmVjb3JkKiwgVmVjdG9yPHN0ZDo6cGFpcjxJZGVudGlmaWVyLCBBYnN0cmFj
dE1vZHVsZVJlY29yZDo6UmVzb2x1dGlvbj4+JiYpOwotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hp
bGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVO
OwogICAgIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90Q29tbW9uKEpTR2xvYmFsT2JqZWN0KiwgUHJv
cGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKIAogICAgIHN0cnVjdCBFeHBvcnRFbnRyeSB7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZVJlY29yZC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVSZWNvcmQu
Y3BwCShyZXZpc2lvbiAyNzEzNjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U01vZHVsZVJlY29yZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcwLDcgKzcwLDggQEAgdm9pZCBK
U01vZHVsZVJlY29yZDo6ZmluaXNoQ3JlYXRpb24oSlNHbAogICAgIEFTU0VSVChpbmhlcml0cyh2
bSwgaW5mbygpKSk7CiB9CiAKLXZvaWQgSlNNb2R1bGVSZWNvcmQ6OnZpc2l0Q2hpbGRyZW4oSlND
ZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0
b3I+Cit2b2lkIEpTTW9kdWxlUmVjb3JkOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGws
IFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNNb2R1bGVSZWNvcmQqIHRoaXNPYmplY3QgPSBq
c0Nhc3Q8SlNNb2R1bGVSZWNvcmQqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVS
SVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC03OCw2ICs3OSw4IEBAIHZvaWQgSlNNb2R1bGVS
ZWNvcmQ6OnZpc2l0Q2hpbGRyZW4oSlNDZWwKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0
LT5tX21vZHVsZVByb2dyYW1FeGVjdXRhYmxlKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVO
KEpTTW9kdWxlUmVjb3JkKTsKKwogdm9pZCBKU01vZHVsZVJlY29yZDo6bGluayhKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHNjcmlwdEZldGNoZXIpCiB7CiAgICAgVk0mIHZt
ID0gZ2xvYmFsT2JqZWN0LT52bSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNNb2R1bGVSZWNvcmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU01vZHVsZVJlY29yZC5oCShyZXZpc2lvbiAyNzEzNjgpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZVJlY29yZC5oCSh3b3JraW5nIGNvcHkpCkBAIC02
Niw3ICs2Niw3IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTR2xvYmFs
T2JqZWN0KiwgVk0mKTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwg
U2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgdm9pZCBp
bnN0YW50aWF0ZURlY2xhcmF0aW9ucyhKU0dsb2JhbE9iamVjdCosIE1vZHVsZVByb2dyYW1FeGVj
dXRhYmxlKiwgSlNWYWx1ZSBzY3JpcHRGZXRjaGVyKTsKIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNOYXRpdmVTdGRGdW5jdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNOYXRpdmVTdGRGdW5jdGlvbi5jcHAJKHJldmlz
aW9uIDI3MTM2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTmF0aXZlU3Rk
RnVuY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSwxMyArNDEsMTYgQEAgSlNOYXRpdmVT
dGRGdW5jdGlvbjo6SlNOYXRpdmVTdGRGdW5jdGlvbgogewogfQogCi12b2lkIEpTTmF0aXZlU3Rk
RnVuY3Rpb246OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRv
cikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTTmF0aXZlU3RkRnVuY3Rpb246
OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAg
ICBKU05hdGl2ZVN0ZEZ1bmN0aW9uKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTTmF0aXZlU3RkRnVu
Y3Rpb24qPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3Qs
IGluZm8oKSk7CiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsK
IH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTTmF0aXZlU3RkRnVuY3Rpb24pOworCiB2b2lk
IEpTTmF0aXZlU3RkRnVuY3Rpb246OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgTmF0aXZlRXhlY3V0
YWJsZSogZXhlY3V0YWJsZSwgdW5zaWduZWQgbGVuZ3RoLCBjb25zdCBTdHJpbmcmIG5hbWUpCiB7
CiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0sIGV4ZWN1dGFibGUsIGxlbmd0aCwgbmFtZSk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU05hdGl2ZVN0ZEZ1bmN0aW9u
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNOYXRpdmVT
dGRGdW5jdGlvbi5oCShyZXZpc2lvbiAyNzEzNjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU05hdGl2ZVN0ZEZ1bmN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTY1LDcgKzY1
LDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBKU05hdGl2ZVN0ZEZ1bmN0aW9uKFZNJiwgTmF0
aXZlRXhlY3V0YWJsZSosIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKiwgTmF0aXZlU3RkRnVu
Y3Rpb24mJik7CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIE5hdGl2ZUV4ZWN1dGFibGUq
LCB1bnNpZ25lZCBsZW5ndGgsIGNvbnN0IFN0cmluZyYgbmFtZSk7Ci0gICAgc3RhdGljIHZvaWQg
dmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRf
Q0hJTERSRU47CiAKICAgICBOYXRpdmVTdGRGdW5jdGlvbiBtX2Z1bmN0aW9uOwogfTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAJKHJldmlzaW9uIDI3
MTM2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtOTAsNyArOTAsOCBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSlNPYmplY3Q6
OmdldE5vblJlaWZpCiAgICAgfQogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSlNPYmplY3Q6Om1h
cmtBdXhpbGlhcnlBbmRWaXNpdE91dE9mTGluZVByb3BlcnRpZXMoU2xvdFZpc2l0b3ImIHZpc2l0
b3IsIEJ1dHRlcmZseSogYnV0dGVyZmx5LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUHJvcGVydHlP
ZmZzZXQgbWF4T2Zmc2V0KQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK0FMV0FZU19JTkxJ
TkUgdm9pZCBKU09iamVjdDo6bWFya0F1eGlsaWFyeUFuZFZpc2l0T3V0T2ZMaW5lUHJvcGVydGll
cyhWaXNpdG9yJiB2aXNpdG9yLCBCdXR0ZXJmbHkqIGJ1dHRlcmZseSwgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IG1heE9mZnNldCkKIHsKICAgICAvLyBXZSBjYWxsIHRoaXMg
d2hlbiB3ZSBmb3VuZCBldmVyeXRoaW5nIHdpdGhvdXQgcmFjZXMuCiAgICAgQVNTRVJUKHN0cnVj
dHVyZSk7CkBAIC0xMjEsNyArMTIyLDggQEAgQUxXQVlTX0lOTElORSB2b2lkIEpTT2JqZWN0Ojpt
YXJrQXV4aWxpYQogICAgIHZpc2l0b3IuYXBwZW5kVmFsdWVzSGlkZGVuKGJ1dHRlcmZseS0+cHJv
cGVydHlTdG9yYWdlKCkgLSBvdXRPZkxpbmVTaXplLCBvdXRPZkxpbmVTaXplKTsKIH0KIAotQUxX
QVlTX0lOTElORSBTdHJ1Y3R1cmUqIEpTT2JqZWN0Ojp2aXNpdEJ1dHRlcmZseShTbG90VmlzaXRv
ciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+CitBTFdBWVNfSU5MSU5FIFN0
cnVjdHVyZSogSlNPYmplY3Q6OnZpc2l0QnV0dGVyZmx5KFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAg
ICAgc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IHJhY2VSZWFzb24gPSAiSlNPYmplY3Q6OnZpc2l0
QnV0dGVyZmx5IjsKICAgICBTdHJ1Y3R1cmUqIHJlc3VsdCA9IHZpc2l0QnV0dGVyZmx5SW1wbCh2
aXNpdG9yKTsKQEAgLTEzMCw3ICsxMzIsOCBAQCBBTFdBWVNfSU5MSU5FIFN0cnVjdHVyZSogSlNP
YmplY3Q6OnZpc2l0CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotQUxXQVlTX0lOTElORSBTdHJ1
Y3R1cmUqIEpTT2JqZWN0Ojp2aXNpdEJ1dHRlcmZseUltcGwoU2xvdFZpc2l0b3ImIHZpc2l0b3Ip
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgorQUxXQVlTX0lOTElORSBTdHJ1Y3R1cmUqIEpT
T2JqZWN0Ojp2aXNpdEJ1dHRlcmZseUltcGwoVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBWTSYg
dm0gPSB2aXNpdG9yLnZtKCk7CiAgICAgCkBAIC00MzAsMjQgKzQzMywyMCBAQCBzaXplX3QgSlNP
YmplY3Q6OmVzdGltYXRlZFNpemUoSlNDZWxsKiBjCiAgICAgcmV0dXJuIEJhc2U6OmVzdGltYXRl
ZFNpemUoY2VsbCwgdm0pICsgYnV0dGVyZmx5T3V0T2ZMaW5lU2l6ZTsKIH0KIAotdm9pZCBKU09i
amVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQor
dGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNPYmplY3Q6OnZpc2l0Q2hpbGRyZW5J
bXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU09iamVjdCogdGhp
c09iamVjdCA9IGpzQ2FzdDxKU09iamVjdCo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1Rf
SU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKLSNpZiBBU1NFUlRfRU5BQkxFRAotICAgIGJv
b2wgd2FzQ2hlY2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlvbiA9IHZpc2l0b3IubV9pc0NoZWNr
aW5nRm9yRGVmYXVsdE1hcmtWaW9sYXRpb247Ci0gICAgdmlzaXRvci5tX2lzQ2hlY2tpbmdGb3JE
ZWZhdWx0TWFya1Zpb2xhdGlvbiA9IGZhbHNlOwotI2VuZGlmCi0gICAgCisgICAgdHlwZW5hbWUg
VmlzaXRvcjo6RGVmYXVsdE1hcmtpbmdWaW9sYXRpb25Bc3NlcnRpb25TY29wZSBhc3NlcnRpb25T
Y29wZSh2aXNpdG9yKTsKKwogICAgIEpTQ2VsbDo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2
aXNpdG9yKTsKLSAgICAKKwogICAgIHRoaXNPYmplY3QtPnZpc2l0QnV0dGVyZmx5KHZpc2l0b3Ip
OwotICAgIAotI2lmIEFTU0VSVF9FTkFCTEVECi0gICAgdmlzaXRvci5tX2lzQ2hlY2tpbmdGb3JE
ZWZhdWx0TWFya1Zpb2xhdGlvbiA9IHdhc0NoZWNraW5nRm9yRGVmYXVsdE1hcmtWaW9sYXRpb247
Ci0jZW5kaWYKIH0KIAorREVGSU5FX0VYUE9SVF9WSVNJVF9DSElMRFJFTihKU09iamVjdCk7CisK
IHZvaWQgSlNPYmplY3Q6OmFuYWx5emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFuYWx5emVyJiBh
bmFseXplcikKIHsKICAgICBKU09iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU09iamVjdCo+
KGNlbGwpOwpAQCAtNDg2LDE0ICs0ODUsMTIgQEAgdm9pZCBKU09iamVjdDo6YW5hbHl6ZUhlYXAo
SlNDZWxsKiBjZWxsLAogICAgIH0KIH0KIAotdm9pZCBKU0ZpbmFsT2JqZWN0Ojp2aXNpdENoaWxk
cmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBWaXNpdG9yPgordm9pZCBKU0ZpbmFsT2JqZWN0Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwq
IGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNGaW5hbE9iamVjdCogdGhpc09iamVj
dCA9IGpzQ2FzdDxKU0ZpbmFsT2JqZWN0Kj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9J
TkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwotI2lmIEFTU0VSVF9FTkFCTEVECi0gICAgYm9v
bCB3YXNDaGVja2luZ0ZvckRlZmF1bHRNYXJrVmlvbGF0aW9uID0gdmlzaXRvci5tX2lzQ2hlY2tp
bmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlvbjsKLSAgICB2aXNpdG9yLm1faXNDaGVja2luZ0ZvckRl
ZmF1bHRNYXJrVmlvbGF0aW9uID0gZmFsc2U7Ci0jZW5kaWYKKyAgICB0eXBlbmFtZSBWaXNpdG9y
OjpEZWZhdWx0TWFya2luZ1Zpb2xhdGlvbkFzc2VydGlvblNjb3BlIGFzc2VydGlvblNjb3BlKHZp
c2l0b3IpOwogICAgIAogICAgIEpTQ2VsbDo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNp
dG9yKTsKICAgICAKQEAgLTUwMSwxMiArNDk4LDEwIEBAIHZvaWQgSlNGaW5hbE9iamVjdDo6dmlz
aXRDaGlsZHJlbihKU0NlbGwKICAgICAgICAgaWYgKHVuc2lnbmVkIHN0b3JhZ2VTaXplID0gc3Ry
dWN0dXJlLT5pbmxpbmVTaXplKCkpCiAgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZFZhbHVlc0hp
ZGRlbih0aGlzT2JqZWN0LT5pbmxpbmVTdG9yYWdlKCksIHN0b3JhZ2VTaXplKTsKICAgICB9Ci0g
ICAgCi0jaWYgQVNTRVJUX0VOQUJMRUQKLSAgICB2aXNpdG9yLm1faXNDaGVja2luZ0ZvckRlZmF1
bHRNYXJrVmlvbGF0aW9uID0gd2FzQ2hlY2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlvbjsKLSNl
bmRpZgogfQogCitERUZJTkVfRVhQT1JUX1ZJU0lUX0NISUxEUkVOKEpTRmluYWxPYmplY3QpOwor
CiBTdHJpbmcgSlNPYmplY3Q6OmNsYXNzTmFtZShjb25zdCBKU09iamVjdCogb2JqZWN0LCBWTSYg
dm0pCiB7CiAgICAgY29uc3QgQ2xhc3NJbmZvKiBpbmZvID0gb2JqZWN0LT5jbGFzc0luZm8odm0p
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCShyZXZpc2lv
biAyNzEzNjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xMDgsOCArMTA4LDkgQEAgY2xhc3MgSlNPYmplY3QgOiBwdWJsaWMg
SlNDZWxsIHsKIHB1YmxpYzoKICAgICB1c2luZyBCYXNlID0gSlNDZWxsOwogCisgICAgREVDTEFS
RV9FWFBPUlRfVklTSVRfQ0hJTERSRU47CisKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMg
c2l6ZV90IGVzdGltYXRlZFNpemUoSlNDZWxsKiwgVk0mKTsKLSAgICBKU19FWFBPUlRfUFJJVkFU
RSBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CiAgICAg
SlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgYW5hbHl6ZUhlYXAoSlNDZWxsKiwgSGVhcEFu
YWx5emVyJik7CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgU3RyaW5nIGNsYXNzTmFt
ZShjb25zdCBKU09iamVjdCosIFZNJik7CkBAIC05ODAsMTEgKzk4MSwxMSBAQCBwcm90ZWN0ZWQ6
CiAgICAgSlNPYmplY3QoVk0mLCBTdHJ1Y3R1cmUqLCBCdXR0ZXJmbHkqID0gbnVsbHB0cik7CiAg
ICAgCiAgICAgLy8gVmlzaXRzIHRoZSBidXR0ZXJmbHkgdW5sZXNzIHRoZXJlIGlzIGEgcmFjZS4g
UmV0dXJucyB0aGUgc3RydWN0dXJlIGlmIHRoZXJlIHdhcyBubyByYWNlLgotICAgIFN0cnVjdHVy
ZSogdmlzaXRCdXR0ZXJmbHkoU2xvdFZpc2l0b3ImKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPiBTdHJ1Y3R1cmUqIHZpc2l0QnV0dGVyZmx5KFZpc2l0b3ImKTsKICAgICAKLSAgICBT
dHJ1Y3R1cmUqIHZpc2l0QnV0dGVyZmx5SW1wbChTbG90VmlzaXRvciYpOworICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFZpc2l0b3I+IFN0cnVjdHVyZSogdmlzaXRCdXR0ZXJmbHlJbXBsKFZpc2l0b3Im
KTsKICAgICAKLSAgICB2b2lkIG1hcmtBdXhpbGlhcnlBbmRWaXNpdE91dE9mTGluZVByb3BlcnRp
ZXMoU2xvdFZpc2l0b3ImLCBCdXR0ZXJmbHkqLCBTdHJ1Y3R1cmUqLCBQcm9wZXJ0eU9mZnNldCBt
YXhPZmZzZXQpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgbWFya0F1eGls
aWFyeUFuZFZpc2l0T3V0T2ZMaW5lUHJvcGVydGllcyhWaXNpdG9yJiwgQnV0dGVyZmx5KiwgU3Ry
dWN0dXJlKiwgUHJvcGVydHlPZmZzZXQgbWF4T2Zmc2V0KTsKIAogICAgIC8vIENhbGwgdGhpcyBp
ZiB5b3Uga25vdyB0aGF0IHRoZSBvYmplY3QgaXMgaW4gYSBtb2RlIHdoZXJlIGl0IGhhcyBhcnJh
eQogICAgIC8vIHN0b3JhZ2UuIFRoaXMgd2lsbCBhc3NlcnQgb3RoZXJ3aXNlLgpAQCAtMTE3Miw4
ICsxMTczLDYgQEAgcHJvdGVjdGVkOgogICAgIH0KIH07CiAKLWNsYXNzIEpTRmluYWxPYmplY3Q7
Ci0KIC8vIEpTRmluYWxPYmplY3QgaXMgYSB0eXBlIG9mIEpTT2JqZWN0IHRoYXQgY29udGFpbnMg
c3VmZmljaWVudCBpbnRlcm5hbAogLy8gc3RvcmFnZSB0byBmdWxseSBtYWtlIHVzZSBvZiB0aGUg
Y29sbGVjdG9yIGNlbGwgY29udGFpbmluZyBpdC4KIGNsYXNzIEpTRmluYWxPYmplY3QgZmluYWwg
OiBwdWJsaWMgSlNPYmplY3QgewpAQCAtMTIxMiwxNSArMTIxMSwxMyBAQCBwdWJsaWM6CiAgICAg
ICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUs
IHR5cGVJbmZvKCksIGluZm8oKSwgZGVmYXVsdEluZGV4aW5nVHlwZSwgaW5saW5lQ2FwYWNpdHkp
OwogICAgIH0KIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX0VYUE9SVF9WSVNJVF9DSElM
RFJFTjsKIAogICAgIERFQ0xBUkVfRVhQT1JUX0lORk87CiAKIHByaXZhdGU6CiAgICAgZnJpZW5k
IGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKIAotICAgIHZvaWQgdmlzaXRDaGlsZHJlbkNv
bW1vbihTbG90VmlzaXRvciYpOwotCiAgICAgZXhwbGljaXQgSlNGaW5hbE9iamVjdChWTSYgdm0s
IFN0cnVjdHVyZSogc3RydWN0dXJlLCBCdXR0ZXJmbHkqIGJ1dHRlcmZseSkKICAgICAgICAgOiBK
U09iamVjdCh2bSwgc3RydWN0dXJlLCBidXR0ZXJmbHkpCiAgICAgewpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9taXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb21pc2UuY3BwCShyZXZpc2lvbiAyNzEzNjgpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb21pc2UuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC02NywxMyArNjcsMTYgQEAgdm9pZCBKU1Byb21pc2U6OmZpbmlzaENyZWF0aW9uKFZN
JiB2bSkKICAgICAgICAgQmFzZTo6aW50ZXJuYWxGaWVsZChpbmRleCkuc2V0KHZtLCB0aGlzLCB2
YWx1ZXNbaW5kZXhdKTsKIH0KIAotdm9pZCBKU1Byb21pc2U6OnZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+
Cit2b2lkIEpTUHJvbWlzZTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9y
JiB2aXNpdG9yKQogewogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNQcm9taXNlKj4o
Y2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkp
OwogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CiB9CiAKK0RF
RklORV9WSVNJVF9DSElMRFJFTihKU1Byb21pc2UpOworCiBhdXRvIEpTUHJvbWlzZTo6c3RhdHVz
KFZNJikgY29uc3QgLT4gU3RhdHVzCiB7CiAgICAgSlNWYWx1ZSB2YWx1ZSA9IGludGVybmFsRmll
bGQoRmllbGQ6OkZsYWdzKS5nZXQoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTUHJvbWlzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTUHJvbWlzZS5oCShyZXZpc2lvbiAyNzEzNjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1Byb21pc2UuaAkod29ya2luZyBjb3B5KQpAQCAtOTMsNyArOTMsNyBAQCBw
dWJsaWM6CiAgICAgfTsKICAgICBzdGF0aWMgRGVmZXJyZWREYXRhIGNyZWF0ZURlZmVycmVkRGF0
YShKU0dsb2JhbE9iamVjdCosIEpTUHJvbWlzZUNvbnN0cnVjdG9yKik7CiAKLSAgICBzdGF0aWMg
dm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9W
SVNJVF9DSElMRFJFTjsKIAogcHJvdGVjdGVkOgogICAgIEpTUHJvbWlzZShWTSYsIFN0cnVjdHVy
ZSopOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuY3BwCShyZXZpc2lvbiAyNzEzNjgpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC03MCw3ICs3MCw4IEBAIHZvaWQgSlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yOjpmaW5pc2hDcmUKICAgICB9CiB9CiAKLXZvaWQgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9y
Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1w
bGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OnZp
c2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBK
U1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNQcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlz
T2JqZWN0LCBpbmZvKCkpOwpAQCAtODcsNiArODgsOCBAQCB2b2lkIEpTUHJvcGVydHlOYW1lRW51
bWVyYXRvcjo6dmlzaXRDaGlsCiAgICAgfQogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNQ
cm9wZXJ0eU5hbWVFbnVtZXJhdG9yKTsKKwogLy8gRklYTUU6IEFzc2VydCB0aGF0IHByb3BlcnRp
ZXMgcmV0dXJuZWQgYnkgZ2V0T3duUHJvcGVydHlOYW1lcygpIGFyZSByZXBvcnRlZCBlbnVtZXJh
YmxlIGJ5IGdldE93blByb3BlcnR5U2xvdCgpLgogLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIxOTkyNgogdm9pZCBnZXRFbnVtZXJhYmxlUHJvcGVydHlOYW1lcyhK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU09iamVjdCogYmFzZSwgUHJvcGVydHlOYW1l
QXJyYXkmIHByb3BlcnR5TmFtZXMsIHVpbnQzMl90JiBpbmRleGVkTGVuZ3RoLCB1aW50MzJfdCYg
c3RydWN0dXJlUHJvcGVydHlDb3VudCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTUHJvcGVydHlOYW1lRW51bWVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVydHlOYW1lRW51bWVyYXRvci5oCShyZXZpc2lvbiAy
NzEzNjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3BlcnR5TmFtZUVu
dW1lcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtODQsNyArODQsNyBAQCBwdWJsaWM6CiAgICAg
ICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLCBtX3By
b3BlcnR5TmFtZXMpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlND
ZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiBwcml2
YXRlOgogICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3h5LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3h5LmNwcAkocmV2aXNpb24gMjcxMzY4KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm94eS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM1LDcgKzM1LDggQEAgU1RBVElDX0FTU0VSVF9JU19UUklWSUFMTFlfREVTVFJVQ1RJ
QkxFKAogCiBjb25zdCBDbGFzc0luZm8gSlNQcm94eTo6c19pbmZvID0geyAiSlNQcm94eSIsICZC
YXNlOjpzX2luZm8sIG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNQcm94
eSkgfTsKIAotdm9pZCBKU1Byb3h5Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZp
c2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1Byb3h5
Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAg
ICAgSlNQcm94eSogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Byb3h5Kj4oY2VsbCk7CiAgICAgQVNT
RVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNDMsNiArNDQs
OCBAQCB2b2lkIEpTUHJveHk6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsCiAgICAgdmlzaXRv
ci5hcHBlbmQodGhpc09iamVjdC0+bV90YXJnZXQpOwogfQogCitERUZJTkVfRVhQT1JUX1ZJU0lU
X0NISUxEUkVOKEpTUHJveHkpOworCiB2b2lkIEpTUHJveHk6OnNldFRhcmdldChWTSYgdm0sIEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCiB7CiAgICAgbV90YXJnZXQuc2V0KHZtLCB0aGlz
LCBnbG9iYWxPYmplY3QpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQ
cm94eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJv
eHkuaAkocmV2aXNpb24gMjcxMzY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNQcm94eS5oCSh3b3JraW5nIGNvcHkpCkBAIC04NSw3ICs4NSw3IEBAIHByb3RlY3RlZDoKICAg
ICAgICAgbV90YXJnZXQuc2V0KHZtLCB0aGlzLCB0YXJnZXQpOwogICAgIH0KIAotICAgIEpTX0VY
UE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0
b3ImKTsKKyAgICBERUNMQVJFX0VYUE9SVF9WSVNJVF9DSElMRFJFTjsKIAogICAgIEpTX0VYUE9S
VF9QUklWQVRFIHN0YXRpYyBTdHJpbmcgY2xhc3NOYW1lKGNvbnN0IEpTT2JqZWN0KiwgVk0mKTsK
ICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgU3RyaW5nIHRvU3RyaW5nTmFtZShjb25zdCBK
U09iamVjdCosIEpTR2xvYmFsT2JqZWN0Kik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU1Njb3BlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU1Njb3BlLmNwcAkocmV2aXNpb24gMjcxMzY4KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNTY29wZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDcgKzM5LDgg
QEAgU1RBVElDX0FTU0VSVF9JU19UUklWSUFMTFlfREVTVFJVQ1RJQkxFKAogCiBjb25zdCBDbGFz
c0luZm8gSlNTY29wZTo6c19pbmZvID0geyAiU2NvcGUiLCAmQmFzZTo6c19pbmZvLCBudWxscHRy
LCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTU2NvcGUpIH07CiAKLXZvaWQgSlNTY29w
ZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVt
cGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNTY29wZTo6dmlzaXRDaGlsZHJlbkltcGwo
SlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTU2NvcGUqIHRoaXNPYmpl
Y3QgPSBqc0Nhc3Q8SlNTY29wZSo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJ
VFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTQ3LDYgKzQ4LDggQEAgdm9pZCBKU1Njb3BlOjp2
aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbAogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3Qt
Pm1fbmV4dCk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU1Njb3BlKTsKKwogLy8gUmV0
dXJucyB0cnVlIGlmIHdlIGZvdW5kIGVub3VnaCBpbmZvcm1hdGlvbiB0byB0ZXJtaW5hdGUgb3B0
aW1pemF0aW9uLgogc3RhdGljIGlubGluZSBib29sIGFic3RyYWN0QWNjZXNzKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEpTU2NvcGUqIHNjb3BlLCBjb25zdCBJZGVudGlmaWVyJiBpZGVu
dCwgR2V0T3JQdXQgZ2V0T3JQdXQsIHNpemVfdCBkZXB0aCwgYm9vbCYgbmVlZHNWYXJJbmplY3Rp
b25DaGVja3MsIFJlc29sdmVPcCYgb3AsIEluaXRpYWxpemF0aW9uTW9kZSBpbml0aWFsaXphdGlv
bk1vZGUpCiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Njb3BlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTY29wZS5oCShy
ZXZpc2lvbiAyNzEzNjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Njb3Bl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTY0LDcgKzY0LDcgQEAgcHVibGljOgogCiAgICAgc3RhdGlj
IHZvaWQgY29sbGVjdENsb3N1cmVWYXJpYWJsZXNVbmRlclREWihKU1Njb3BlKiwgVERaRW52aXJv
bm1lbnQmIHJlc3VsdCwgVmFyaWFibGVFbnZpcm9ubWVudCYgcHJpdmF0ZU5hbWVzKTsKIAotICAg
IHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBE
RUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgYm9vbCBpc1ZhclNjb3BlKCk7CiAgICAgYm9v
bCBpc0xleGljYWxTY29wZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdC5jcHAJKHJldmlzaW9u
IDI3MTM2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2VnbWVudGVkVmFy
aWFibGVPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MiwxOSArNjIsMjIgQEAgU2NvcGVP
ZmZzZXQgSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdDo6YQogICAgIHJldHVybiBTY29wZU9mZnNl
dChvbGRTaXplKTsKIH0KIAotdm9pZCBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0Ojp2aXNpdENo
aWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yKQordGVtcGxhdGU8
dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdDo6dmlzaXRD
aGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTU2Vn
bWVudGVkVmFyaWFibGVPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNTZWdtZW50ZWRWYXJp
YWJsZU9iamVjdCo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09i
amVjdCwgaW5mbygpKTsKLSAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHNsb3RW
aXNpdG9yKTsKKyAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwog
ICAgIAogICAgIC8vIEZJWE1FOiBXZSBjb3VsZCBhdm9pZCBsb2NraW5nIGhlcmUgaWYgU2VnbWVu
dGVkVmVjdG9yIHdhcyBsb2NrLWZyZWUuIEl0IGNvdWxkIGJlIG1hZGUgbG9jay1mcmVlCiAgICAg
Ly8gcmVsYXRpdmVseSBlYXNpbHkuCiAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayh0aGlzT2Jq
ZWN0LT5jZWxsTG9jaygpKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSB0aGlzT2JqZWN0LT5tX3Zh
cmlhYmxlcy5zaXplKCk7IGktLTspCi0gICAgICAgIHNsb3RWaXNpdG9yLmFwcGVuZEhpZGRlbih0
aGlzT2JqZWN0LT5tX3ZhcmlhYmxlc1tpXSk7CisgICAgICAgIHZpc2l0b3IuYXBwZW5kSGlkZGVu
KHRoaXNPYmplY3QtPm1fdmFyaWFibGVzW2ldKTsKIH0KIAorREVGSU5FX0VYUE9SVF9WSVNJVF9D
SElMRFJFTihKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0KTsKKwogdm9pZCBKU1NlZ21lbnRlZFZh
cmlhYmxlT2JqZWN0OjphbmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5h
bHl6ZXIpCiB7CiAgICAgSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdCogdGhpc09iamVjdCA9IGpz
Q2FzdDxKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0Kj4oY2VsbCk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9i
amVjdC5oCShyZXZpc2lvbiAyNzEzNjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTg2LDcgKzg2
LDcgQEAgcHVibGljOgogICAgIC8vIHRoZSBpbmRleCBvZiB0aGUgZmlyc3Qgb25lIGFkZGVkLgog
ICAgIEpTX0VYUE9SVF9QUklWQVRFIFNjb3BlT2Zmc2V0IGFkZFZhcmlhYmxlcyh1bnNpZ25lZCBu
dW1iZXJPZlZhcmlhYmxlc1RvQWRkLCBKU1ZhbHVlKTsKICAgICAKLSAgICBKU19FWFBPUlRfUFJJ
VkFURSBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7Cisg
ICAgREVDTEFSRV9FWFBPUlRfVklTSVRfQ0hJTERSRU47CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUg
c3RhdGljIHZvaWQgYW5hbHl6ZUhlYXAoSlNDZWxsKiwgSGVhcEFuYWx5emVyJik7CiAgICAgCiBw
cm90ZWN0ZWQ6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NldEl0ZXJh
dG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Nl
dEl0ZXJhdG9yLmNwcAkocmV2aXNpb24gMjcxMzY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNTZXRJdGVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU3LDEzICs1Nywx
NiBAQCB2b2lkIEpTU2V0SXRlcmF0b3I6OmZpbmlzaENyZWF0aW9uKFZNJiB2CiAgICAgICAgIEJh
c2U6OmludGVybmFsRmllbGQoaW5kZXgpLnNldCh2bSwgdGhpcywgdmFsdWVzW2luZGV4XSk7CiB9
CiAKLXZvaWQgSlNTZXRJdGVyYXRvcjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNTZXRJ
dGVyYXRvcjo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9y
KQogewogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNTZXRJdGVyYXRvcio+KGNlbGwp
OwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKICAg
ICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwogfQogCitERUZJTkVf
VklTSVRfQ0hJTERSRU4oSlNTZXRJdGVyYXRvcik7CisKIEpTVmFsdWUgSlNTZXRJdGVyYXRvcjo6
Y3JlYXRlUGFpcihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIGtleSwgSlNW
YWx1ZSB2YWx1ZSkKIHsKICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdzOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZXRJdGVyYXRvci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2V0SXRlcmF0b3IuaAkocmV2aXNpb24g
MjcxMzY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZXRJdGVyYXRvci5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xMzAsNyArMTMwLDcgQEAgcHJpdmF0ZToKICAgICBKU19FWFBP
UlRfUFJJVkFURSB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgSlNTZXQqLCBJdGVyYXRpb25LaW5k
KTsKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUg
SlNWYWx1ZSBjcmVhdGVQYWlyKEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSwgSlNWYWx1ZSk7Ci0g
ICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAg
IERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiB9OwogU1RBVElDX0FTU0VSVF9JU19UUklWSUFMTFlf
REVTVFJVQ1RJQkxFKEpTU2V0SXRlcmF0b3IpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1NvdXJjZUNvZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTU291cmNlQ29kZS5jcHAJKHJldmlzaW9uIDI3MTM2OCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU291cmNlQ29kZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI2LDYgKzI2LDggQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJKU1Nv
dXJjZUNvZGUuaCIKIAorI2luY2x1ZGUgIkpTQ2VsbElubGluZXMuaCIgLy8gbWxhbSBURVNUCisK
IG5hbWVzcGFjZSBKU0MgewogCiBjb25zdCBDbGFzc0luZm8gSlNTb3VyY2VDb2RlOjpzX2luZm8g
PSB7ICJKU1NvdXJjZUNvZGUiLCBudWxscHRyLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVU
SE9EX1RBQkxFKEpTU291cmNlQ29kZSkgfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTU3RyaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU1N0cmluZy5jcHAJKHJldmlzaW9uIDI3MTM2OCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA1LDcgKzEw
NSw4IEBAIHNpemVfdCBKU1N0cmluZzo6ZXN0aW1hdGVkU2l6ZShKU0NlbGwqIGMKICAgICByZXR1
cm4gQmFzZTo6ZXN0aW1hdGVkU2l6ZShjZWxsLCB2bSkgKyBiaXR3aXNlX2Nhc3Q8U3RyaW5nSW1w
bCo+KHBvaW50ZXIpLT5jb3N0RHVyaW5nR0MoKTsKIH0KIAotdm9pZCBKU1N0cmluZzo6dmlzaXRD
aGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlw
ZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNTdHJpbmc6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCog
Y2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU1N0cmluZyogdGhpc09iamVjdCA9IGFz
U3RyaW5nKGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwg
aW5mbygpKTsKQEAgLTE0Myw2ICsxNDQsOCBAQCB2b2lkIEpTU3RyaW5nOjp2aXNpdENoaWxkcmVu
KEpTQ2VsbCogY2VsCiAgICAgICAgIHZpc2l0b3IucmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKGlt
cGwtPmNvc3REdXJpbmdHQygpKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTU3RyaW5n
KTsKKwogc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBtYXhMZW5ndGhGb3JPblN0YWNrUmVzb2x2
ZSA9IDIwNDg7CiAKIHZvaWQgSlNSb3BlU3RyaW5nOjpyZXNvbHZlUm9wZUludGVybmFsOChMQ2hh
ciogYnVmZmVyKSBjb25zdApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNT
dHJpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0
cmluZy5oCShyZXZpc2lvbiAyNzEzNjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU1N0cmluZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMTcsNyArMjE3LDcgQEAgcHVibGljOgog
CiAgICAgc3RhdGljIHZvaWQgZHVtcFRvU3RyZWFtKGNvbnN0IEpTQ2VsbCosIFByaW50U3RyZWFt
Jik7CiAgICAgc3RhdGljIHNpemVfdCBlc3RpbWF0ZWRTaXplKEpTQ2VsbCosIFZNJik7Ci0gICAg
c3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERF
Q0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaXNSb3BlKCkg
Y29uc3QKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmlu
Z0l0ZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU1N0cmluZ0l0ZXJhdG9yLmNwcAkocmV2aXNpb24gMjcxMzY4KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmdJdGVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTUxLDExICs1MSwxNCBAQCBKU1N0cmluZ0l0ZXJhdG9yKiBKU1N0cmluZ0l0ZXJhdG9yOjpjbG9u
CiAgICAgcmV0dXJuIGNsb25lOwogfQogCi12b2lkIEpTU3RyaW5nSXRlcmF0b3I6OnZpc2l0Q2hp
bGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVu
YW1lIFZpc2l0b3I+Cit2b2lkIEpTU3RyaW5nSXRlcmF0b3I6OnZpc2l0Q2hpbGRyZW5JbXBsKEpT
Q2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0g
anNDYXN0PEpTU3RyaW5nSXRlcmF0b3IqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lO
SEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlz
T2JqZWN0LCB2aXNpdG9yKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTU3RyaW5nSXRl
cmF0b3IpOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTU3RyaW5nSXRlcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU1N0cmluZ0l0ZXJhdG9yLmgJKHJldmlzaW9uIDI3MTM2OCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nSXRlcmF0b3IuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNzksNyArNzksNyBAQCBwdWJsaWM6CiAgICAgSlNWYWx1ZSBpbmRleCgpIGNv
bnN0IHsgcmV0dXJuIGludGVybmFsRmllbGQoRmllbGQ6OkluZGV4KS5nZXQoKTsgfQogICAgIEpT
U3RyaW5nSXRlcmF0b3IqIGNsb25lKEpTR2xvYmFsT2JqZWN0Kik7CiAKLSAgICBzdGF0aWMgdm9p
ZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJ
VF9DSElMRFJFTjsKIAogcHJpdmF0ZToKICAgICBKU1N0cmluZ0l0ZXJhdG9yKFZNJiB2bSwgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U1N5bWJvbFRhYmxlT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0LmNwcAkocmV2aXNpb24gMjcxMzY4KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVjdC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM2LDcgKzM2LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAKIGNvbnN0IENs
YXNzSW5mbyBKU1N5bWJvbFRhYmxlT2JqZWN0OjpzX2luZm8gPSB7ICJTeW1ib2xUYWJsZU9iamVj
dCIsICZCYXNlOjpzX2luZm8sIG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUo
SlNTeW1ib2xUYWJsZU9iamVjdCkgfTsKIAotdm9pZCBKU1N5bWJvbFRhYmxlT2JqZWN0Ojp2aXNp
dENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0
eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1N5bWJvbFRhYmxlT2JqZWN0Ojp2aXNpdENoaWxkcmVu
SW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNTeW1ib2xUYWJs
ZU9iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1N5bWJvbFRhYmxlT2JqZWN0Kj4oY2VsbCk7
CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAt
NDQsNiArNDUsOCBAQCB2b2lkIEpTU3ltYm9sVGFibGVPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oCiAg
ICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9zeW1ib2xUYWJsZSk7CiB9CiAKK0RFRklO
RV9WSVNJVF9DSElMRFJFTihKU1N5bWJvbFRhYmxlT2JqZWN0KTsKKwogYm9vbCBKU1N5bWJvbFRh
YmxlT2JqZWN0OjpkZWxldGVQcm9wZXJ0eShKU0NlbGwqIGNlbGwsIEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIERlbGV0ZVByb3BlcnR5U2xv
dCYgc2xvdCkKIHsKICAgICBKU1N5bWJvbFRhYmxlT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0
PEpTU3ltYm9sVGFibGVPYmplY3QqPihjZWxsKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0LmgJKHJldmlzaW9uIDI3MTM2
OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3Qu
aAkod29ya2luZyBjb3B5KQpAQCAtNzAsNyArNzAsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIG1f
c3ltYm9sVGFibGUuc2V0KHZtLCB0aGlzLCBzeW1ib2xUYWJsZSk7CiAgICAgfQogICAgIAotICAg
IHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBE
RUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogICAgIAogcHJpdmF0ZToKICAgICBXcml0ZUJhcnJpZXI8
U3ltYm9sVGFibGU+IG1fc3ltYm9sVGFibGU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU1dlYWtPYmplY3RSZWYuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTV2Vha09iamVjdFJlZi5jcHAJKHJldmlzaW9uIDI3MTM2OCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTV2Vha09iamVjdFJlZi5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM5LDcgKzM5LDggQEAgdm9pZCBKU1dlYWtPYmplY3RSZWY6OmZpbmlzaENy
ZWF0aW9uKFZNJgogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKIH0KIAotdm9pZCBKU1dl
YWtPYmplY3RSZWY6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlz
aXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTV2Vha09iamVjdFJlZjo6
dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAg
IGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNXZWFrT2JqZWN0UmVmKj4oY2VsbCk7CiAgICAg
QVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNTEsNiAr
NTIsOCBAQCB2b2lkIEpTV2Vha09iamVjdFJlZjo6dmlzaXRDaGlsZHJlbihKU0NlCiAgICAgfQog
fQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNXZWFrT2JqZWN0UmVmKTsKKwogdm9pZCBKU1dl
YWtPYmplY3RSZWY6OmZpbmFsaXplVW5jb25kaXRpb25hbGx5KFZNJiB2bSkKIHsKICAgICBpZiAo
bV92YWx1ZSAmJiAhdm0uaGVhcC5pc01hcmtlZChtX3ZhbHVlLmdldCgpKSkKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTV2Vha09iamVjdFJlZi5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTV2Vha09iamVjdFJlZi5oCShyZXZpc2lv
biAyNzEzNjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1dlYWtPYmplY3RS
ZWYuaAkod29ya2luZyBjb3B5KQpAQCAtNjUsNyArNjUsNyBAQCBwdWJsaWM6CiAgICAgfQogCiAg
ICAgdm9pZCBmaW5hbGl6ZVVuY29uZGl0aW9uYWxseShWTSYpOwotICAgIHN0YXRpYyB2b2lkIHZp
c2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NI
SUxEUkVOOwogCiBwcml2YXRlOgogICAgIEpTV2Vha09iamVjdFJlZihWTSYgdm0sIFN0cnVjdHVy
ZSogc3RydWN0dXJlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNXaXRo
U2NvcGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
V2l0aFNjb3BlLmNwcAkocmV2aXNpb24gMjcxMzY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNXaXRoU2NvcGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0MSw4IEBA
IEpTV2l0aFNjb3BlKiBKU1dpdGhTY29wZTo6Y3JlYXRlKAogICAgIHJldHVybiB3aXRoU2NvcGU7
CiB9CiAKLXZvaWQgSlNXaXRoU2NvcGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90
VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTV2l0
aFNjb3BlOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3Ip
CiB7CiAgICAgSlNXaXRoU2NvcGUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNXaXRoU2NvcGUqPihj
ZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7
CkBAIC00OSw2ICs1MCw4IEBAIHZvaWQgSlNXaXRoU2NvcGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiAKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX29iamVjdCk7CiB9CiAKK0RFRklO
RV9WSVNJVF9DSElMRFJFTihKU1dpdGhTY29wZSk7CisKIFN0cnVjdHVyZSogSlNXaXRoU2NvcGU6
OmNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpT
VmFsdWUgcHJvdG8pCiB7CiAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxP
YmplY3QsIHByb3RvLCBUeXBlSW5mbyhXaXRoU2NvcGVUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGlu
Zm8oKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1dpdGhTY29wZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTV2l0aFNjb3Bl
LmgJKHJldmlzaW9uIDI3MTM2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
V2l0aFNjb3BlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDcgKzQzLDcgQEAgcHVibGljOgogCiAg
ICAgSlNPYmplY3QqIG9iamVjdCgpIHsgcmV0dXJuIG1fb2JqZWN0LmdldCgpOyB9CiAKLSAgICBz
dGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVD
TEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVj
dHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBwcm90byk7CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTV3JhcHBlck9iamVjdC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNXcmFwcGVyT2JqZWN0LmNwcAkocmV2
aXNpb24gMjcxMzY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNXcmFwcGVy
T2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksMTEgKzI5LDE0IEBAIG5hbWVzcGFjZSBK
U0MgewogCiBTVEFUSUNfQVNTRVJUX0lTX1RSSVZJQUxMWV9ERVNUUlVDVElCTEUoSlNXcmFwcGVy
T2JqZWN0KTsKIAotdm9pZCBKU1dyYXBwZXJPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBj
ZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2
b2lkIEpTV3JhcHBlck9iamVjdDo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNp
dG9yJiB2aXNpdG9yKQogewogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNXcmFwcGVy
T2JqZWN0Kj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0
LCBpbmZvKCkpOwogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7
CiB9CiAKK0RFRklORV9FWFBPUlRfVklTSVRfQ0hJTERSRU4oSlNXcmFwcGVyT2JqZWN0KTsKKwog
fSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U1dyYXBwZXJPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1dyYXBwZXJPYmplY3QuaAkocmV2aXNpb24gMjcxMzY4KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNXcmFwcGVyT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTY0
LDcgKzY0LDcgQEAgcHVibGljOgogcHJvdGVjdGVkOgogICAgIGV4cGxpY2l0IEpTV3JhcHBlck9i
amVjdChWTSYsIFN0cnVjdHVyZSopOwogCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZv
aWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfRVhQ
T1JUX1ZJU0lUX0NISUxEUkVOOwogfTsKIAogaW5saW5lIEpTV3JhcHBlck9iamVjdDo6SlNXcmFw
cGVyT2JqZWN0KFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9MYXp5Q2xhc3NTdHJ1Y3R1cmUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0xhenlDbGFzc1N0cnVjdHVyZS5jcHAJKHJl
dmlzaW9uIDI3MTM2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0xhenlDbGFz
c1N0cnVjdHVyZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcyLDEyICs3MiwxNiBAQCB2b2lkIExh
enlDbGFzc1N0cnVjdHVyZTo6SW5pdGlhbGl6ZXI6OnNlCiAgICAgY2xhc3NTdHJ1Y3R1cmUubV9j
b25zdHJ1Y3Rvci5zZXQodm0sIGdsb2JhbCwgY29uc3RydWN0b3IpOwogfQogCi12b2lkIExhenlD
bGFzc1N0cnVjdHVyZTo6dmlzaXQoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBl
bmFtZSBWaXNpdG9yPgordm9pZCBMYXp5Q2xhc3NTdHJ1Y3R1cmU6OnZpc2l0KFZpc2l0b3ImIHZp
c2l0b3IpCiB7CiAgICAgbV9zdHJ1Y3R1cmUudmlzaXQodmlzaXRvcik7CiAgICAgdmlzaXRvci5h
cHBlbmQobV9jb25zdHJ1Y3Rvcik7CiB9CiAKK3RlbXBsYXRlIHZvaWQgTGF6eUNsYXNzU3RydWN0
dXJlOjp2aXNpdChBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIExhenlDbGFz
c1N0cnVjdHVyZTo6dmlzaXQoU2xvdFZpc2l0b3ImKTsKKwogdm9pZCBMYXp5Q2xhc3NTdHJ1Y3R1
cmU6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKIHsKICAgICBvdXQucHJpbnQoIjxzdHJ1
Y3R1cmUgPSAiLCBtX3N0cnVjdHVyZSwgIiwgY29uc3RydWN0b3IgPSAiLCBSYXdQb2ludGVyKG1f
Y29uc3RydWN0b3IuZ2V0KCkpLCAiPiIpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvTGF6eUNsYXNzU3RydWN0dXJlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvTGF6eUNsYXNzU3RydWN0dXJlLmgJKHJldmlzaW9uIDI3MTM2OCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0xhenlDbGFzc1N0cnVjdHVyZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMTcsNyArMTE3LDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9j
b25zdHJ1Y3Rvci5nZXQoKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCB2aXNpdChTbG90VmlzaXRv
ciYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgdmlzaXQoVmlzaXRvciYp
OwogICAgIAogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9MYXp5UHJvcGVydHkuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9MYXp5UHJvcGVydHkuaAkocmV2aXNpb24gMjcx
MzY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTGF6eVByb3BlcnR5LmgJKHdv
cmtpbmcgY29weSkKQEAgLTEwMyw3ICsxMDMsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRNYXlC
ZU51bGwoVk0mLCBjb25zdCBPd25lclR5cGUqIG93bmVyLCBFbGVtZW50VHlwZSopOwogICAgIHZv
aWQgc2V0KFZNJiwgY29uc3QgT3duZXJUeXBlKiBvd25lciwgRWxlbWVudFR5cGUqKTsKICAgICAK
LSAgICB2b2lkIHZpc2l0KFNsb3RWaXNpdG9yJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlz
aXRvcj4gdm9pZCB2aXNpdChWaXNpdG9yJik7CiAgICAgCiAgICAgdm9pZCBkdW1wKFByaW50U3Ry
ZWFtJikgY29uc3Q7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9M
YXp5UHJvcGVydHlJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvTGF6eVByb3BlcnR5SW5saW5lcy5oCShyZXZpc2lvbiAyNzEzNjgpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9MYXp5UHJvcGVydHlJbmxpbmVzLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTY2LDcgKzY2LDggQEAgdm9pZCBMYXp5UHJvcGVydHk8T3duZXJUeXBlLCBFbGVt
ZW50VHlwZQogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPd25lclR5cGUsIHR5cGVuYW1lIEVsZW1l
bnRUeXBlPgotdm9pZCBMYXp5UHJvcGVydHk8T3duZXJUeXBlLCBFbGVtZW50VHlwZT46OnZpc2l0
KFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQg
TGF6eVByb3BlcnR5PE93bmVyVHlwZSwgRWxlbWVudFR5cGU+Ojp2aXNpdChWaXNpdG9yJiB2aXNp
dG9yKQogewogICAgIGlmIChtX3BvaW50ZXIgJiYgIShtX3BvaW50ZXIgJiBsYXp5VGFnKSkKICAg
ICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZChiaXR3aXNlX2Nhc3Q8RWxlbWVudFR5cGUq
PihtX3BvaW50ZXIpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01vZHVs
ZVByb2dyYW1FeGVjdXRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9Nb2R1bGVQcm9ncmFtRXhlY3V0YWJsZS5jcHAJKHJldmlzaW9uIDI3MTM2OCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01vZHVsZVByb2dyYW1FeGVjdXRhYmxl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzksNyArNzksOCBAQCBhdXRvIE1vZHVsZVByb2dyYW1F
eGVjdXRhYmxlOjplbnN1cmVUZW1wCiAgICAgcmV0dXJuIGVuc3VyZVRlbXBsYXRlT2JqZWN0TWFw
SW1wbChtX3RlbXBsYXRlT2JqZWN0TWFwKTsKIH0KIAotdm9pZCBNb2R1bGVQcm9ncmFtRXhlY3V0
YWJsZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQor
dGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGU6
OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAg
ICBNb2R1bGVQcm9ncmFtRXhlY3V0YWJsZSogdGhpc09iamVjdCA9IGpzQ2FzdDxNb2R1bGVQcm9n
cmFtRXhlY3V0YWJsZSo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhp
c09iamVjdCwgaW5mbygpKTsKQEAgLTk0LDQgKzk1LDYgQEAgdm9pZCBNb2R1bGVQcm9ncmFtRXhl
Y3V0YWJsZTo6dmlzaXRDaGlsZAogICAgIH0KIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKE1v
ZHVsZVByb2dyYW1FeGVjdXRhYmxlKTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Nb2R1bGVQcm9ncmFtRXhlY3V0YWJsZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01vZHVsZVByb2dyYW1FeGVj
dXRhYmxlLmgJKHJldmlzaW9uIDI3MTM2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL01vZHVsZVByb2dyYW1FeGVjdXRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTc3LDcgKzc3
LDcgQEAgcHJpdmF0ZToKIAogICAgIE1vZHVsZVByb2dyYW1FeGVjdXRhYmxlKEpTR2xvYmFsT2Jq
ZWN0KiwgY29uc3QgU291cmNlQ29kZSYpOwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJl
bihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAK
ICAgICBXcml0ZUJhcnJpZXI8VW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrPiBtX3VubGlu
a2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jazsKICAgICBXcml0ZUJhcnJpZXI8U3ltYm9sVGFibGU+
IG1fbW9kdWxlRW52aXJvbm1lbnRTeW1ib2xUYWJsZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1Byb2dyYW1FeGVjdXRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9ncmFtRXhlY3V0YWJsZS5jcHAJKHJldmlzaW9uIDI3
MTM2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb2dyYW1FeGVjdXRhYmxl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjA4LDcgKzIwOCw4IEBAIGF1dG8gUHJvZ3JhbUV4ZWN1
dGFibGU6OmVuc3VyZVRlbXBsYXRlT2IKICAgICByZXR1cm4gZW5zdXJlVGVtcGxhdGVPYmplY3RN
YXBJbXBsKG1fdGVtcGxhdGVPYmplY3RNYXApOwogfQogCi12b2lkIFByb2dyYW1FeGVjdXRhYmxl
Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1w
bGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBQcm9ncmFtRXhlY3V0YWJsZTo6dmlzaXRDaGls
ZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFByb2dyYW1F
eGVjdXRhYmxlKiB0aGlzT2JqZWN0ID0ganNDYXN0PFByb2dyYW1FeGVjdXRhYmxlKj4oY2VsbCk7
CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAt
MjIyLDQgKzIyMyw2IEBAIHZvaWQgUHJvZ3JhbUV4ZWN1dGFibGU6OnZpc2l0Q2hpbGRyZW4oSlMK
ICAgICB9CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihQcm9ncmFtRXhlY3V0YWJsZSk7CisK
IH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
UHJvZ3JhbUV4ZWN1dGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9Qcm9ncmFtRXhlY3V0YWJsZS5oCShyZXZpc2lvbiAyNzEzNjgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9ncmFtRXhlY3V0YWJsZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC04MSw3ICs4MSw3IEBAIHByaXZhdGU6CiAKICAgICBQcm9ncmFtRXhlY3V0YWJsZShKU0ds
b2JhbE9iamVjdCosIGNvbnN0IFNvdXJjZUNvZGUmKTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0
Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxE
UkVOOwogCiAgICAgV3JpdGVCYXJyaWVyPFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jaz4gbV91bmxp
bmtlZFByb2dyYW1Db2RlQmxvY2s7CiAgICAgV3JpdGVCYXJyaWVyPEV4ZWN1dGFibGVUb0NvZGVC
bG9ja0VkZ2U+IG1fcHJvZ3JhbUNvZGVCbG9jazsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1Byb3BlcnR5TWFwSGFzaFRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlNYXBIYXNoVGFibGUuaAkocmV2aXNpb24gMjcx
MzY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlNYXBIYXNoVGFi
bGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTMzLDcgKzEzMyw3IEBAIHB1YmxpYzoKIAogICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0Rlc3RydWN0aW9uID0gdHJ1ZTsKICAgICBzdGF0aWMg
dm9pZCBkZXN0cm95KEpTQ2VsbCopOwotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlND
ZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAg
REVDTEFSRV9FWFBPUlRfSU5GTzsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvUHJvcGVydHlUYWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvUHJvcGVydHlUYWJsZS5jcHAJKHJldmlzaW9uIDI3MTM2OCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5VGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMTgsNyArMTE4LDggQEAgdm9pZCBQcm9wZXJ0eVRhYmxlOjpmaW5pc2hDcmVhdGlvbihWTSYg
dgogICAgIHZtLmhlYXAucmVwb3J0RXh0cmFNZW1vcnlBbGxvY2F0ZWQoZGF0YVNpemUoKSk7CiB9
CiAKLXZvaWQgUHJvcGVydHlUYWJsZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgUHJvcGVy
dHlUYWJsZTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9y
KQogewogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8UHJvcGVydHlUYWJsZSo+KGNlbGwp
OwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAg
LTEyNiw2ICsxMjcsOCBAQCB2b2lkIFByb3BlcnR5VGFibGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxs
CiAgICAgdmlzaXRvci5yZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQodGhpc09iamVjdC0+ZGF0YVNp
emUoKSk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihQcm9wZXJ0eVRhYmxlKTsKKwogdm9p
ZCBQcm9wZXJ0eVRhYmxlOjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKIHsKICAgICBzdGF0aWNfY2Fz
dDxQcm9wZXJ0eVRhYmxlKj4oY2VsbCktPlByb3BlcnR5VGFibGU6On5Qcm9wZXJ0eVRhYmxlKCk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm94eU9iamVjdC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJveHlPYmplY3QuY3Bw
CShyZXZpc2lvbiAyNzEzNjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm94
eU9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNTgsNyArMTE1OCw4IEBAIGJvb2wgUHJv
eHlPYmplY3Q6OmlzUmV2b2tlZCgpIGNvbnN0CiAgICAgcmV0dXJuIGhhbmRsZXIoKS5pc051bGwo
KTsKIH0KIAotdm9pZCBQcm94eU9iamVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgUHJv
eHlPYmplY3Q6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRv
cikKIHsKICAgICBQcm94eU9iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxQcm94eU9iamVjdCo+
KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygp
KTsKQEAgLTExNjgsNCArMTE2OSw2IEBAIHZvaWQgUHJveHlPYmplY3Q6OnZpc2l0Q2hpbGRyZW4o
SlNDZWxsKiAKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2hhbmRsZXIpOwogfQog
CitERUZJTkVfVklTSVRfQ0hJTERSRU4oUHJveHlPYmplY3QpOworCiB9IC8vIG5hbWVzcGFjZSBK
U0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3h5T2JqZWN0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJveHlPYmplY3QuaAko
cmV2aXNpb24gMjcxMzY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJveHlP
YmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtOTEsNyArOTEsNyBAQCBwcml2YXRlOgogICAgIHN0
YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCos
IFByb3BlcnR5TmFtZUFycmF5JiwgRG9udEVudW1Qcm9wZXJ0aWVzTW9kZSk7CiAgICAgc3RhdGlj
IGJvb2wgc2V0UHJvdG90eXBlKEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlIHBy
b3RvdHlwZSwgYm9vbCBzaG91bGRUaHJvd0lmQ2FudFNldCk7CiAgICAgc3RhdGljIEpTVmFsdWUg
Z2V0UHJvdG90eXBlKEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqKTsKLSAgICBzdGF0aWMgdm9p
ZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJ
VF9DSElMRFJFTjsKIAogICAgIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90Q29tbW9uKEpTR2xvYmFs
T2JqZWN0KiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKICAgICBib29sIHBlcmZvcm1J
bnRlcm5hbE1ldGhvZEdldE93blByb3BlcnR5KEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1l
LCBQcm9wZXJ0eVNsb3QmKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1By
b3h5UmV2b2tlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9Qcm94eVJldm9rZS5jcHAJKHJldmlzaW9uIDI3MTM2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1Byb3h5UmV2b2tlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjksNyArNjks
OCBAQCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04ocGVyZm9ybVByb3h5UmV2CiAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KIAotdm9pZCBQcm94eVJldm9rZTo6
dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxh
dGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgUHJveHlSZXZva2U6OnZpc2l0Q2hpbGRyZW5JbXBs
KEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBQcm94eVJldm9rZSogdGhp
c09iamVjdCA9IGpzQ2FzdDxQcm94eVJldm9rZSo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpF
Q1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTc4LDQgKzc5LDYgQEAgdm9pZCBQ
cm94eVJldm9rZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIAogICAgIHZpc2l0b3IuYXBwZW5kKHRo
aXNPYmplY3QtPm1fcHJveHkpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oUHJveHlSZXZv
a2UpOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1Byb3h5UmV2b2tlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvUHJveHlSZXZva2UuaAkocmV2aXNpb24gMjcxMzY4KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvUHJveHlSZXZva2UuaAkod29ya2luZyBjb3B5KQpAQCAtNTIsNyAr
NTIsNyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIFBy
b3h5T2JqZWN0Kik7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90
VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAgICAgSlNWYWx1ZSBwcm94
eSgpIHsgcmV0dXJuIG1fcHJveHkuZ2V0KCk7IH0KICAgICB2b2lkIHNldFByb3h5VG9OdWxsKFZN
JiB2bSkgeyByZXR1cm4gbV9wcm94eS5zZXQodm0sIHRoaXMsIGpzTnVsbCgpKTsgfQogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBDYWNoZWRSZXN1bHQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENhY2hlZFJl
c3VsdC5jcHAJKHJldmlzaW9uIDI3MTM2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1JlZ0V4cENhY2hlZFJlc3VsdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDgg
QEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLXZvaWQgUmVnRXhwQ2FjaGVkUmVzdWx0Ojp2aXNpdEFn
Z3JlZ2F0ZShTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+
Cit2b2lkIFJlZ0V4cENhY2hlZFJlc3VsdDo6dmlzaXRBZ2dyZWdhdGUoVmlzaXRvciYgdmlzaXRv
cikKIHsKICAgICB2aXNpdG9yLmFwcGVuZChtX2xhc3RJbnB1dCk7CiAgICAgdmlzaXRvci5hcHBl
bmQobV9sYXN0UmVnRXhwKTsKQEAgLTQzLDYgKzQ0LDkgQEAgdm9pZCBSZWdFeHBDYWNoZWRSZXN1
bHQ6OnZpc2l0QWdncmVnYXRlKAogICAgIH0KIH0KIAordGVtcGxhdGUgdm9pZCBSZWdFeHBDYWNo
ZWRSZXN1bHQ6OnZpc2l0QWdncmVnYXRlKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRl
IHZvaWQgUmVnRXhwQ2FjaGVkUmVzdWx0Ojp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYpOwor
CiBKU0FycmF5KiBSZWdFeHBDYWNoZWRSZXN1bHQ6Omxhc3RSZXN1bHQoSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgSlNPYmplY3QqIG93bmVyKQogewogICAgIFZNJiB2bSA9IGdsb2JhbE9i
amVjdC0+dm0oKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENh
Y2hlZFJlc3VsdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1JlZ0V4cENhY2hlZFJlc3VsdC5oCShyZXZpc2lvbiAyNzEzNjgpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9SZWdFeHBDYWNoZWRSZXN1bHQuaAkod29ya2luZyBjb3B5KQpAQCAt
NjUsNyArNjUsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX3JlaWZpZWQgPyBtX3JlaWZp
ZWRJbnB1dC5nZXQoKSA6IG1fbGFzdElucHV0LmdldCgpOwogICAgIH0KIAotICAgIHZvaWQgdmlz
aXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
PiB2b2lkIHZpc2l0QWdncmVnYXRlKFZpc2l0b3ImKTsKIAogICAgIC8vIG1fbGFzdFJlZ0V4cCB3
b3VsZCBiZSBudWxscHRyIHdoZW4gUmVnRXhwQ2FjaGVkUmVzdWx0IGlzIG5vdCByZWlmaWVkLgog
ICAgIC8vIElmIHdlIGZpbmQgbV9sYXN0UmVnRXhwIGlzIG51bGxwdHIsIGl0IG1lYW5zIHRoaXMg
c2hvdWxkIGhvbGQgdGhlIGVtcHR5IFJlZ0V4cC4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1JlZ0V4cEdsb2JhbERhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cEdsb2JhbERhdGEuY3BwCShyZXZpc2lvbiAyNzEzNjgp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBHbG9iYWxEYXRhLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzAsMTEgKzMwLDE1IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi12
b2lkIFJlZ0V4cEdsb2JhbERhdGE6OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9y
KQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgUmVnRXhwR2xvYmFsRGF0YTo6dmlz
aXRBZ2dyZWdhdGUoVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBtX2NhY2hlZFJlc3VsdC52aXNp
dEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKIH0KIAordGVtcGxhdGUgdm9pZCBSZWdFeHBHbG9iYWxEYXRh
Ojp2aXNpdEFnZ3JlZ2F0ZShBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIFJl
Z0V4cEdsb2JhbERhdGE6OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJik7CisKIEpTVmFsdWUg
UmVnRXhwR2xvYmFsRGF0YTo6Z2V0QmFja3JlZihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCB1bnNpZ25lZCBpKQogewogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cEdsb2JhbERhdGEuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBHbG9iYWxEYXRhLmgJ
KHJldmlzaW9uIDI3MTM2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4
cEdsb2JhbERhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtNDEsNyArNDEsNyBAQCBwdWJsaWM6CiAg
ICAgdm9pZCBzZXRJbnB1dChKU0dsb2JhbE9iamVjdCosIEpTU3RyaW5nKik7CiAgICAgSlNTdHJp
bmcqIGlucHV0KCkgeyByZXR1cm4gbV9jYWNoZWRSZXN1bHQuaW5wdXQoKTsgfQogCi0gICAgdm9p
ZCB2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZp
c2l0b3I+IHZvaWQgdmlzaXRBZ2dyZWdhdGUoVmlzaXRvciYpOwogCiAgICAgSlNWYWx1ZSBnZXRC
YWNrcmVmKEpTR2xvYmFsT2JqZWN0KiwgdW5zaWduZWQpOwogICAgIEpTVmFsdWUgZ2V0TGFzdFBh
cmVuKEpTR2xvYmFsT2JqZWN0Kik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9SZWdFeHBPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1JlZ0V4cE9iamVjdC5jcHAJKHJldmlzaW9uIDI3MTM2OCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2
LDcgKzQ2LDggQEAgdm9pZCBSZWdFeHBPYmplY3Q6OmZpbmlzaENyZWF0aW9uKFZNJiB2bQogICAg
IEFTU0VSVCh0eXBlKCkgPT0gUmVnRXhwT2JqZWN0VHlwZSk7CiB9CiAKLXZvaWQgUmVnRXhwT2Jq
ZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0
ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBSZWdFeHBPYmplY3Q6OnZpc2l0Q2hpbGRy
ZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBSZWdFeHBPYmpl
Y3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8UmVnRXhwT2JqZWN0Kj4oY2VsbCk7CiAgICAgQVNTRVJU
X0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNTUsNiArNTYsOCBA
QCB2b2lkIFJlZ0V4cE9iamVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqCiAgICAgdmlzaXRvci5h
cHBlbmQodGhpc09iamVjdC0+bV9sYXN0SW5kZXgpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERS
RU4oUmVnRXhwT2JqZWN0KTsKKwogYm9vbCBSZWdFeHBPYmplY3Q6OmdldE93blByb3BlcnR5U2xv
dChKU09iamVjdCogb2JqZWN0LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0
eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgVk0mIHZtID0g
Z2xvYmFsT2JqZWN0LT52bSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
UmVnRXhwT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvUmVnRXhwT2JqZWN0LmgJKHJldmlzaW9uIDI3MTM2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1JlZ0V4cE9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzMsNyArMTMz
LDcgQEAgcHJpdmF0ZToKICAgICBKU19FWFBPUlRfUFJJVkFURSBSZWdFeHBPYmplY3QoVk0mLCBT
dHJ1Y3R1cmUqLCBSZWdFeHAqKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGZpbmlzaENy
ZWF0aW9uKFZNJik7CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNs
b3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIGJvb2wgbGFz
dEluZGV4SXNXcml0YWJsZSgpIGNvbnN0CiAgICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5jcHAJKHJldmlzaW9uIDI3MTM2
OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NhbXBsaW5nUHJvZmlsZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC02NTIsNyArNjUyLDcgQEAgdm9pZCBTYW1wbGluZ1Byb2ZpbGVy
Ojpwcm9jZXNzVW52ZXJpZmllZAogICAgIG1fdW5wcm9jZXNzZWRTdGFja1RyYWNlcy5jbGVhcigp
OwogfQogCi12b2lkIFNhbXBsaW5nUHJvZmlsZXI6OnZpc2l0KFNsb3RWaXNpdG9yJiBzbG90Vmlz
aXRvcikKK3ZvaWQgU2FtcGxpbmdQcm9maWxlcjo6dmlzaXQoQWJzdHJhY3RTbG90VmlzaXRvciYg
c2xvdFZpc2l0b3IpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQobV9sb2NrLmlzTG9ja2VkKCkpOwog
ICAgIGZvciAoSlNDZWxsKiBjZWxsIDogbV9saXZlQ2VsbFBvaW50ZXJzKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NhbXBsaW5nUHJvZmlsZXIuaAkocmV2aXNp
b24gMjcxMzY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2FtcGxpbmdQcm9m
aWxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNzEsNyArMTcxLDcgQEAgcHVibGljOgogICAgIHZv
aWQgbm90aWNlSlNMb2NrQWNxdWlzaXRpb24oKTsKICAgICB2b2lkIG5vdGljZVZNRW50cnkoKTsK
ICAgICB2b2lkIHNodXRkb3duKCk7Ci0gICAgdm9pZCB2aXNpdChTbG90VmlzaXRvciYpOworICAg
IHZvaWQgdmlzaXQoQWJzdHJhY3RTbG90VmlzaXRvciYpOwogICAgIExvY2smIGdldExvY2soKSB7
IHJldHVybiBtX2xvY2s7IH0KICAgICB2b2lkIHNldFRpbWluZ0ludGVydmFsKFNlY29uZHMgaW50
ZXJ2YWwpIHsgbV90aW1pbmdJbnRlcnZhbCA9IGludGVydmFsOyB9CiAgICAgSlNfRVhQT1JUX1BS
SVZBVEUgdm9pZCBzdGFydCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U2NvcGVkQXJndW1lbnRzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TY29wZWRBcmd1bWVudHMuY3BwCShyZXZpc2lvbiAyNzEzNjgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29wZWRBcmd1bWVudHMuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC05OCw3ICs5OCw4IEBAIFNjb3BlZEFyZ3VtZW50cyogU2NvcGVkQXJndW1lbnRzOjpjcmVh
dGUKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi12b2lkIFNjb3BlZEFyZ3VtZW50czo6dmlzaXRD
aGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlw
ZW5hbWUgVmlzaXRvcj4KK3ZvaWQgU2NvcGVkQXJndW1lbnRzOjp2aXNpdENoaWxkcmVuSW1wbChK
U0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgU2NvcGVkQXJndW1lbnRzKiB0
aGlzT2JqZWN0ID0gc3RhdGljX2Nhc3Q8U2NvcGVkQXJndW1lbnRzKj4oY2VsbCk7CiAgICAgQVNT
RVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtMTE1LDYgKzEx
Niw4IEBAIHZvaWQgU2NvcGVkQXJndW1lbnRzOjp2aXNpdENoaWxkcmVuKEpTQ2UKICAgICB9CiB9
CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihTY29wZWRBcmd1bWVudHMpOworCiBTdHJ1Y3R1cmUq
IFNjb3BlZEFyZ3VtZW50czo6Y3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCiB7CiAgICAgcmV0dXJuIFN0cnVjdHVy
ZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oU2NvcGVkQXJn
dW1lbnRzVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVkQXJndW1lbnRzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVkQXJndW1lbnRzLmgJKHJldmlzaW9uIDI3MTM2
OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlZEFyZ3VtZW50cy5oCSh3
b3JraW5nIGNvcHkpCkBAIC02Myw5ICs2Myw5IEBAIHB1YmxpYzoKICAgICAKICAgICAvLyBDcmVh
dGVzIGFuIGFyZ3VtZW50cyBvYmplY3QgYnkgY29weWluZyB0aGUgYXJndW1lbnRzIGZyb20gYSB3
ZWxsLWRlZmluZWQgc3RhY2sgbG9jYXRpb24uCiAgICAgc3RhdGljIFNjb3BlZEFyZ3VtZW50cyog
Y3JlYXRlQnlDb3B5aW5nRnJvbShWTSYsIFN0cnVjdHVyZSosIFJlZ2lzdGVyKiBhcmd1bWVudHNT
dGFydCwgdW5zaWduZWQgdG90YWxMZW5ndGgsIEpTRnVuY3Rpb24qIGNhbGxlZSwgU2NvcGVkQXJn
dW1lbnRzVGFibGUqLCBKU0xleGljYWxFbnZpcm9ubWVudCopOwotICAgIAotICAgIHN0YXRpYyB2
b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKLSAgICAKKworICAgIERF
Q0xBUkVfVklTSVRfQ0hJTERSRU47CisKICAgICB1aW50MzJfdCBpbnRlcm5hbExlbmd0aCgpIGNv
bnN0CiAgICAgewogICAgICAgICByZXR1cm4gbV90b3RhbExlbmd0aDsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1NpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TaW1wbGVUeXBlZEFycmF5
Q29udHJvbGxlci5jcHAJKHJldmlzaW9uIDI3MTM2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1NpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNjIsNyArNjIsNyBAQCBib29sIFNpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyOjppc0F0b21p
CiAgICAgcmV0dXJuIG1fYWxsb3dBdG9taWNzV2FpdDsKIH0KIAotYm9vbCBTaW1wbGVUeXBlZEFy
cmF5Q29udHJvbGxlcjo6SlNBcnJheUJ1ZmZlck93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVS
b290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIEpTQzo6U2xvdFZp
c2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCitib29sIFNpbXBsZVR5cGVkQXJy
YXlDb250cm9sbGVyOjpKU0FycmF5QnVmZmVyT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJv
b3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgSlNDOjpBYnN0cmFj
dFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQogewogICAgIGlmIChV
TkxJS0VMWShyZWFzb24pKQogICAgICAgICAqcmVhc29uID0gIkpTQXJyYXlCdWZmZXIgaXMgb3Bh
cXVlIHJvb3QiOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2ltcGxlVHlw
ZWRBcnJheUNvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlci5oCShyZXZpc2lvbiAyNzEzNjgpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TaW1wbGVUeXBlZEFycmF5Q29udHJvbGxl
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC01OCw3ICs1OCw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAg
ICAgY2xhc3MgSlNBcnJheUJ1ZmZlck93bmVyIGZpbmFsIDogcHVibGljIFdlYWtIYW5kbGVPd25l
ciB7CiAgICAgcHVibGljOgotICAgICAgICBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3Rz
KEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIFNsb3RWaXNpdG9yJiwg
Y29uc3QgY2hhcioqIHJlYXNvbikgZmluYWw7CisgICAgICAgIGJvb2wgaXNSZWFjaGFibGVGcm9t
T3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCwgQWJz
dHJhY3RTbG90VmlzaXRvciYsIGNvbnN0IGNoYXIqKiByZWFzb24pIGZpbmFsOwogICAgICAgICB2
b2lkIGZpbmFsaXplKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQpIGZp
bmFsOwogICAgIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NtYWxs
U3RyaW5ncy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U21hbGxTdHJpbmdzLmNwcAkocmV2aXNpb24gMjcxMzY4KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvU21hbGxTdHJpbmdzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjYsNyArNjYs
NyBAQCB2b2lkIFNtYWxsU3RyaW5nczo6aW5pdGlhbGl6ZUNvbW1vblN0cmluCiAgICAgc2V0SXNJ
bml0aWFsaXplZCh0cnVlKTsKIH0KIAotdm9pZCBTbWFsbFN0cmluZ3M6OnZpc2l0U3Ryb25nUmVm
ZXJlbmNlcyhTbG90VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgU21hbGxTdHJpbmdzOjp2aXNpdFN0
cm9uZ1JlZmVyZW5jZXMoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBtX25l
ZWRzVG9CZVZpc2l0ZWQgPSBmYWxzZTsKICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKG1f
ZW1wdHlTdHJpbmcpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU21hbGxT
dHJpbmdzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU21h
bGxTdHJpbmdzLmgJKHJldmlzaW9uIDI3MTM2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1NtYWxsU3RyaW5ncy5oCSh3b3JraW5nIGNvcHkpCkBAIC00OSw5ICs0OSw5IEBAIGNs
YXNzIFN0cmluZ0ltcGw7CiAKIG5hbWVzcGFjZSBKU0MgewogCitjbGFzcyBBYnN0cmFjdFNsb3RW
aXNpdG9yOwogY2xhc3MgVk07CiBjbGFzcyBKU1N0cmluZzsKLWNsYXNzIFNsb3RWaXNpdG9yOwog
CiBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG1heFNpbmdsZUNoYXJhY3RlclN0cmluZyA9IDB4
RkY7CiAKQEAgLTc4LDcgKzc4LDcgQEAgcHVibGljOgogICAgIEpTU3RyaW5nKiogc2luZ2xlQ2hh
cmFjdGVyU3RyaW5ncygpIHsgcmV0dXJuICZtX3NpbmdsZUNoYXJhY3RlclN0cmluZ3NbMF07IH0K
IAogICAgIHZvaWQgaW5pdGlhbGl6ZUNvbW1vblN0cmluZ3MoVk0mKTsKLSAgICB2b2lkIHZpc2l0
U3Ryb25nUmVmZXJlbmNlcyhTbG90VmlzaXRvciYpOworICAgIHZvaWQgdmlzaXRTdHJvbmdSZWZl
cmVuY2VzKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKIAogI2RlZmluZSBKU0NfQ09NTU9OX1NUUklO
R1NfQUNDRVNTT1JfREVGSU5JVElPTihuYW1lKSBcCiAgICAgSlNTdHJpbmcqIG5hbWUjI1N0cmlu
ZygpIGNvbnN0ICAgICAgICAgICAgICAgICAgIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1NwYXJzZUFycmF5VmFsdWVNYXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1NwYXJzZUFycmF5VmFsdWVNYXAuY3BwCShyZXZpc2lvbiAy
NzEzNjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TcGFyc2VBcnJheVZhbHVl
TWFwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjEwLDcgKzIxMCw4IEBAIEpTVmFsdWUgU3BhcnNl
QXJyYXlFbnRyeTo6Z2V0Tm9uU3BhcnNlTW8KICAgICByZXR1cm4gQmFzZTo6Z2V0KCk7CiB9CiAK
LXZvaWQgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgU3Bh
cnNlQXJyYXlWYWx1ZU1hcDo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9y
JiB2aXNpdG9yKQogewogICAgIFNwYXJzZUFycmF5VmFsdWVNYXAqIHRoaXNPYmplY3QgPSBqc0Nh
c3Q8U3BhcnNlQXJyYXlWYWx1ZU1hcCo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5I
RVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTIyMyw1ICsyMjQsNyBAQCB2b2lkIFNwYXJz
ZUFycmF5VmFsdWVNYXA6OnZpc2l0Q2hpbGRyZW4oCiAgICAgdmlzaXRvci5yZXBvcnRFeHRyYU1l
bW9yeVZpc2l0ZWQodGhpc09iamVjdC0+bV9yZXBvcnRlZENhcGFjaXR5ICogc2l6ZW9mKE1hcDo6
S2V5VmFsdWVQYWlyVHlwZSkpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oU3BhcnNlQXJy
YXlWYWx1ZU1hcCk7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TcGFyc2VBcnJheVZhbHVlTWFwLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3BhcnNlQXJyYXlWYWx1ZU1hcC5oCShyZXZpc2lv
biAyNzEzNjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TcGFyc2VBcnJheVZh
bHVlTWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTExNSw3ICsxMTUsNyBAQCBwdWJsaWM6CiAgICAg
CiAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmpl
Y3QqLCBKU1ZhbHVlIHByb3RvdHlwZSk7CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVu
KEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAog
ICAgIGJvb2wgc3BhcnNlTW9kZSgpCiAgICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU3RhY2tGcmFtZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvU3RhY2tGcmFtZS5jcHAJKHJldmlzaW9uIDI3MTM2OCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0YWNrRnJhbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
NDIsNyArMTQyLDggQEAgU3RyaW5nIFN0YWNrRnJhbWU6OnRvU3RyaW5nKFZNJiB2bSkgY29ucwog
ICAgIHJldHVybiB0cmFjZUJ1aWxkLnRvU3RyaW5nKCkuaW1wbCgpOwogfQogCi12b2lkIFN0YWNr
RnJhbWU6OnZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBl
bmFtZSBWaXNpdG9yPgordm9pZCBTdGFja0ZyYW1lOjp2aXNpdENoaWxkcmVuSW1wbChWaXNpdG9y
JiB2aXNpdG9yKQogewogICAgIGlmIChtX2NhbGxlZSkKICAgICAgICAgdmlzaXRvci5hcHBlbmQo
bV9jYWxsZWUpOwpAQCAtMTUwLDUgKzE1MSw3IEBAIHZvaWQgU3RhY2tGcmFtZTo6dmlzaXRDaGls
ZHJlbihTbG90VmlzaXQKICAgICAgICAgdmlzaXRvci5hcHBlbmQobV9jb2RlQmxvY2spOwogfQog
CitERUZJTkVfSU5TVEFOQ0VfVklTSVRfQ0hJTERSRU4oU3RhY2tGcmFtZSk7CisKIH0gLy8gbmFt
ZXNwYWNlIEpTQwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdGFja0Zy
YW1lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RhY2tG
cmFtZS5oCShyZXZpc2lvbiAyNzEzNjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TdGFja0ZyYW1lLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2luY2x1
ZGUgIkhlYXAuaCIKICNpbmNsdWRlICJWTS5oIgorI2luY2x1ZGUgIlNsb3RWaXNpdG9yTWFjcm9z
LmgiCiAjaW5jbHVkZSAiV2FzbUluZGV4T3JOYW1lLmgiCiAjaW5jbHVkZSAiV3JpdGVCYXJyaWVy
LmgiCiAjaW5jbHVkZSA8bGltaXRzLmg+CkBAIC0zNSw3ICszNiw2IEBAIG5hbWVzcGFjZSBKU0Mg
ewogCiBjbGFzcyBDb2RlQmxvY2s7CiBjbGFzcyBKU09iamVjdDsKLWNsYXNzIFNsb3RWaXNpdG9y
OwogCiBjbGFzcyBTdGFja0ZyYW1lIHsKIHB1YmxpYzoKQEAgLTU4LDcgKzU4LDcgQEAgcHVibGlj
OgogICAgICAgICByZXR1cm4gbV9ieXRlY29kZUluZGV4OwogICAgIH0KICAgICAKLSAgICB2b2lk
IHZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX0lOU1RBTkNFX1ZJU0lU
X0NISUxEUkVOOwogICAgIGJvb2wgaXNNYXJrZWQoVk0mIHZtKSBjb25zdCB7IHJldHVybiAoIW1f
Y2FsbGVlIHx8IHZtLmhlYXAuaXNNYXJrZWQobV9jYWxsZWUuZ2V0KCkpKSAmJiAoIW1fY29kZUJs
b2NrIHx8IHZtLmhlYXAuaXNNYXJrZWQobV9jb2RlQmxvY2suZ2V0KCkpKTsgfQogCiBwcml2YXRl
OgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCShy
ZXZpc2lvbiAyNzEzNjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1
cmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjY3LDcgKzEyNjcsOCBAQCB2b2lkIFN0cnVjdHVy
ZTo6ZGlkVHJhbnNpdGlvbkZyb21UaGlzU3RyCiAgICAgICAgIG1fdHJhbnNpdGlvbldhdGNocG9p
bnRTZXQuZmlyZUFsbCh2bSgpLCBTdHJ1Y3R1cmVGaXJlRGV0YWlsKHRoaXMpKTsKIH0KIAotdm9p
ZCBTdHJ1Y3R1cmU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlz
aXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFN0cnVjdHVyZTo6dmlzaXRD
aGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFN0cnVj
dHVyZSogdGhpc09iamVjdCA9IGpzQ2FzdDxTdHJ1Y3R1cmUqPihjZWxsKTsKICAgICBBU1NFUlRf
R0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC0xMjk1LDYgKzEyOTYs
OCBAQCB2b2lkIFN0cnVjdHVyZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlCiAgICAgICAgIHRo
aXNPYmplY3QtPm1fcHJvcGVydHlUYWJsZVVuc2FmZS5jbGVhcigpOwogfQogCitERUZJTkVfVklT
SVRfQ0hJTERSRU4oU3RydWN0dXJlKTsKKwogYm9vbCBTdHJ1Y3R1cmU6OmlzQ2hlYXBEdXJpbmdH
QyhWTSYgdm0pCiB7CiAgICAgLy8gRklYTUU6IFdlIGNvdWxkIG1ha2UgdGhpcyBldmVuIHNhZmVy
IGJ5IHJldHVybmluZyBmYWxzZSBpZiB0aGlzIHN0cnVjdHVyZSdzIHByb3BlcnR5IHRhYmxlCkBA
IC0xMzA1LDE2ICsxMzA4LDI2IEBAIGJvb2wgU3RydWN0dXJlOjppc0NoZWFwRHVyaW5nR0MoVk0m
IHZtKQogICAgICAgICAmJiAoaGFzUG9seVByb3RvKCkgfHwgIXN0b3JlZFByb3RvdHlwZU9iamVj
dCgpIHx8IHZtLmhlYXAuaXNNYXJrZWQoc3RvcmVkUHJvdG90eXBlT2JqZWN0KCkpKTsKIH0KIAot
Ym9vbCBTdHJ1Y3R1cmU6Om1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxh
dGU8dHlwZW5hbWUgVmlzaXRvcj4KK2Jvb2wgU3RydWN0dXJlOjptYXJrSWZDaGVhcDEoVmlzaXRv
ciYgdmlzaXRvcikKKy8vYm9vbCBTdHJ1Y3R1cmU6Om1hcmtJZkNoZWFwMShBYnN0cmFjdFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQogewogICAgIFZNJiB2bSA9IHZpc2l0b3Iudm0oKTsKICAgICBpZiAo
IWlzQ2hlYXBEdXJpbmdHQyh2bSkpCi0gICAgICAgIHJldHVybiB2bS5oZWFwLmlzTWFya2VkKHRo
aXMpOwotICAgIAorICAgICAgICByZXR1cm4gdm0uaGVhcC5pc01hcmtlZCh0aGlzKTsgLy8gbWxh
bSBGSVNNRQorCiAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZCh0aGlzKTsKICAgICByZXR1
cm4gdHJ1ZTsKIH0KIAorLy90ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgorLy9ib29sIFN0cnVj
dHVyZTo6bWFya0lmQ2hlYXAoVmlzaXRvciYgdmlzaXRvcikKKy8veworLy8gICAgcmV0dXJuIG1h
cmtJZkNoZWFwMSh2aXNpdG9yKTsgLy8gbWxhbSBGSVhNRSBIQUNLIHRvIGdldCB0aGlzIGNvbXBp
bGluZyEhIQorLy99Cit0ZW1wbGF0ZSBib29sIFN0cnVjdHVyZTo6bWFya0lmQ2hlYXAxKFNsb3RW
aXNpdG9yJik7Cit0ZW1wbGF0ZSBib29sIFN0cnVjdHVyZTo6bWFya0lmQ2hlYXAxKEFic3RyYWN0
U2xvdFZpc2l0b3ImKTsKKwogUmVmPFN0cnVjdHVyZVNoYXBlPiBTdHJ1Y3R1cmU6OnRvU3RydWN0
dXJlU2hhcGUoSlNWYWx1ZSB2YWx1ZSwgYm9vbCYgc2F3UG9seVByb3RvU3RydWN0dXJlKQogewog
ICAgIFJlZjxTdHJ1Y3R1cmVTaGFwZT4gYmFzZVNoYXBlID0gU3RydWN0dXJlU2hhcGU6OmNyZWF0
ZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgJKHJl
dmlzaW9uIDI3MTM2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVy
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC02MCw3ICs2MCw2IEBAIGNsYXNzIFByb3BlcnR5TmFtZUFy
cmF5RGF0YTsKIGNsYXNzIFByb3BlcnR5VGFibGU7CiBjbGFzcyBTdHJ1Y3R1cmVDaGFpbjsKIGNs
YXNzIFN0cnVjdHVyZVNoYXBlOwotY2xhc3MgU2xvdFZpc2l0b3I7CiBjbGFzcyBKU1N0cmluZzsK
IHN0cnVjdCBEdW1wQ29udGV4dDsKIHN0cnVjdCBIYXNoVGFibGU7CkBAIC0zMDcsNyArMzA2LDcg
QEAgcHVibGljOgogICAgIEpTVmFsdWUgcHJvdG90eXBlRm9yTG9va3VwKEpTR2xvYmFsT2JqZWN0
KiwgSlNDZWxsKiBiYXNlKSBjb25zdDsKICAgICBTdHJ1Y3R1cmVDaGFpbiogcHJvdG90eXBlQ2hh
aW4oVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTT2JqZWN0KiBiYXNlKSBjb25zdDsKICAgICBTdHJ1
Y3R1cmVDaGFpbiogcHJvdG90eXBlQ2hhaW4oSlNHbG9iYWxPYmplY3QqLCBKU09iamVjdCogYmFz
ZSkgY29uc3Q7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90Vmlz
aXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAgICAgCiAgICAgLy8gQSBTdHJ1
Y3R1cmUgaXMgY2hlYXAgdG8gbWFyayBkdXJpbmcgR0MgaWYgZG9pbmcgc28gd291bGQgb25seSBh
ZGQgYSBzbWFsbCBhbmQgYm91bmRlZCBhbW91bnQKICAgICAvLyB0byBvdXIgaGVhcCBmb290cHJp
bnQuIEZvciBleGFtcGxlLCBpZiB0aGUgc3RydWN0dXJlIHJlZmVycyB0byBhIGdsb2JhbCBvYmpl
Y3QgdGhhdCBpcyBub3QKQEAgLTMxOCw3ICszMTcsOSBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc0No
ZWFwRHVyaW5nR0MoVk0mKTsKICAgICAKICAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhpcyBzdHJ1
Y3R1cmUgaXMgbm93IG1hcmtlZC4KLSAgICBib29sIG1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJik7
CisvLyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiBib29sIG1hcmtJZkNoZWFwKFZpc2l0
b3ImKTsKKy8vICAgIGJvb2wgbWFya0lmQ2hlYXAxKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiBib29sIG1hcmtJZkNoZWFwMShWaXNpdG9yJik7
IC8vIG1sc20gVEVTVAogICAgIAogICAgIGJvb2wgaGFzUmFyZURhdGEoKSBjb25zdAogICAgIHsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUNoYWluLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVDaGFp
bi5jcHAJKHJldmlzaW9uIDI3MTM2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1N0cnVjdHVyZUNoYWluLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjYsNyArNjYsOCBAQCB2b2lk
IFN0cnVjdHVyZUNoYWluOjpmaW5pc2hDcmVhdGlvbihWTSYgCiAgICAgfQogfQogCi12b2lkIFN0
cnVjdHVyZUNoYWluOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZp
c2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBTdHJ1Y3R1cmVDaGFpbjo6
dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAg
IFN0cnVjdHVyZUNoYWluKiB0aGlzT2JqZWN0ID0ganNDYXN0PFN0cnVjdHVyZUNoYWluKj4oY2Vs
bCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpA
QCAtODAsNCArODEsNiBAQCB2b2lkIFN0cnVjdHVyZUNoYWluOjp2aXNpdENoaWxkcmVuKEpTQ2Vs
CiAgICAgfQogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oU3RydWN0dXJlQ2hhaW4pOworCiB9
IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0
cnVjdHVyZUNoYWluLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU3RydWN0dXJlQ2hhaW4uaAkocmV2aXNpb24gMjcxMzY4KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlQ2hhaW4uaAkod29ya2luZyBjb3B5KQpAQCAtNTEsNyAr
NTEsNyBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgU3RydWN0dXJlQ2hhaW4qIGNyZWF0ZShWTSYs
IEpTT2JqZWN0Kik7CiAgICAgU3RydWN0dXJlSUQqIGhlYWQoKSB7IHJldHVybiBtX3ZlY3Rvci5n
ZXQoKTsgfQotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0
b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgc3RhdGljIFN0cnVjdHVy
ZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
SlNWYWx1ZSBwcm90b3R5cGUpCiAgICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU3RydWN0dXJlUmFyZURhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZVJhcmVEYXRhLmNwcAkocmV2aXNpb24gMjcxMzY4KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlUmFyZURhdGEuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC02Nyw3ICs2Nyw4IEBAIFN0cnVjdHVyZVJhcmVEYXRhOjpTdHJ1Y3R1
cmVSYXJlRGF0YShWTSYKICAgICAgICAgbV9wcmV2aW91cy5zZXQodm0sIHRoaXMsIHByZXZpb3Vz
KTsKIH0KIAotdm9pZCBTdHJ1Y3R1cmVSYXJlRGF0YTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNl
bGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3Zv
aWQgU3RydWN0dXJlUmFyZURhdGE6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlz
aXRvciYgdmlzaXRvcikKIHsKICAgICBTdHJ1Y3R1cmVSYXJlRGF0YSogdGhpc09iamVjdCA9IGpz
Q2FzdDxTdHJ1Y3R1cmVSYXJlRGF0YSo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5I
RVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTg2LDYgKzg3LDggQEAgdm9pZCBTdHJ1Y3R1
cmVSYXJlRGF0YTo6dmlzaXRDaGlsZHJlbihKUwogICAgIH0KIH0KIAorREVGSU5FX1ZJU0lUX0NI
SUxEUkVOKFN0cnVjdHVyZVJhcmVEYXRhKTsKKwogLy8gLS0tLS0tLS0tLS0gQ2FjaGVkIHNwZWNp
YWwgcHJvcGVydGllcyBoZWxwZXIgd2F0Y2hwb2ludCBjbGFzc2VzIC0tLS0tLS0tLS0tCiAKIGNs
YXNzIENhY2hlZFNwZWNpYWxQcm9wZXJ0eUFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0
Y2hwb2ludCBmaW5hbCA6IHB1YmxpYyBBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNo
cG9pbnRCYXNlIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVy
ZVJhcmVEYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U3RydWN0dXJlUmFyZURhdGEuaAkocmV2aXNpb24gMjcxMzY4KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlUmFyZURhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtNjgs
NyArNjgsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzRGVzdHJ1
Y3Rpb24gPSB0cnVlOwogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CiAKLSAgICBz
dGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVD
TEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVj
dHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBwcm90b3R5cGUpOwogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TeW1ib2xUYWJsZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFibGUuY3BwCShyZXZpc2lv
biAyNzEzNjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TeW1ib2xUYWJsZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTkyLDcgKzkyLDggQEAgdm9pZCBTeW1ib2xUYWJsZTo6Zmlu
aXNoQ3JlYXRpb24oVk0mIHZtKQogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKIH0KIAot
dm9pZCBTeW1ib2xUYWJsZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIHRoaXNDZWxsLCBTbG90Vmlz
aXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFN5bWJvbFRh
YmxlOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIHRoaXNDZWxsLCBWaXNpdG9yJiB2aXNpdG9y
KQogewogICAgIFN5bWJvbFRhYmxlKiB0aGlzU3ltYm9sVGFibGUgPSBqc0Nhc3Q8U3ltYm9sVGFi
bGUqPih0aGlzQ2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzU3ltYm9s
VGFibGUsIGluZm8oKSk7CkBAIC0xMDgsNiArMTA5LDggQEAgdm9pZCBTeW1ib2xUYWJsZTo6dmlz
aXRDaGlsZHJlbihKU0NlbGwqIAogICAgIHRoaXNTeW1ib2xUYWJsZS0+bV9sb2NhbFRvRW50cnkg
PSBudWxscHRyOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oU3ltYm9sVGFibGUpOworCiBj
b25zdCBTeW1ib2xUYWJsZTo6TG9jYWxUb0VudHJ5VmVjJiBTeW1ib2xUYWJsZTo6bG9jYWxUb0Vu
dHJ5KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYpCiB7CiAgICAgaWYgKFVOTElLRUxZKCFtX2xv
Y2FsVG9FbnRyeSkpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJv
bFRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3lt
Ym9sVGFibGUuaAkocmV2aXNpb24gMjcxMzY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU3ltYm9sVGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtNzMzLDcgKzczMyw3IEBAIHB1
YmxpYzoKICAgICAgICAgbV9zaW5nbGV0b24ubm90aWZ5V3JpdGUodm0sIHRoaXMsIHNjb3BlLCBy
ZWFzb24pOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwg
U2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgREVDTEFS
RV9FWFBPUlRfSU5GTzsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlw
ZVByb2ZpbGVyTG9nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9UeXBlUHJvZmlsZXJMb2cuY3BwCShyZXZpc2lvbiAyNzEzNjgpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9UeXBlUHJvZmlsZXJMb2cuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMjQsNyArMTI0LDcgQEAgdm9pZCBUeXBlUHJvZmlsZXJMb2c6OnByb2Nlc3NMb2dFbnRyaWVz
KAogICAgIH0KIH0KIAotdm9pZCBUeXBlUHJvZmlsZXJMb2c6OnZpc2l0KFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQordm9pZCBUeXBlUHJvZmlsZXJMb2c6OnZpc2l0KEFic3RyYWN0U2xvdFZpc2l0b3Im
IHZpc2l0b3IpCiB7CiAgICAgZm9yIChMb2dFbnRyeSogZW50cnkgPSBtX2xvZ1N0YXJ0UHRyOyBl
bnRyeSAhPSBtX2N1cnJlbnRMb2dFbnRyeVB0cjsgKytlbnRyeSkgewogICAgICAgICB2aXNpdG9y
LmFwcGVuZFVuYmFycmllcmVkKGVudHJ5LT52YWx1ZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9UeXBlUHJvZmlsZXJMb2cuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9UeXBlUHJvZmlsZXJMb2cuaAkocmV2aXNpb24gMjcxMzY4KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZVByb2ZpbGVyTG9nLmgJKHdvcmtp
bmcgY29weSkKQEAgLTU5LDcgKzU5LDcgQEAgcHVibGljOgogICAgIEpTX0VYUE9SVF9QUklWQVRF
IHZvaWQgcHJvY2Vzc0xvZ0VudHJpZXMoVk0mLCBjb25zdCBTdHJpbmcmKTsKICAgICBMb2dFbnRy
eSogbG9nRW5kUHRyKCkgY29uc3QgeyByZXR1cm4gbV9sb2dFbmRQdHI7IH0KIAotICAgIHZvaWQg
dmlzaXQoU2xvdFZpc2l0b3ImKTsKKyAgICB2b2lkIHZpc2l0KEFic3RyYWN0U2xvdFZpc2l0b3Im
KTsKIAogICAgIHN0YXRpYyBwdHJkaWZmX3QgbG9nU3RhcnRPZmZzZXQoKSB7IHJldHVybiBPQkpF
Q1RfT0ZGU0VUT0YoVHlwZVByb2ZpbGVyTG9nLCBtX2xvZ1N0YXJ0UHRyKTsgfQogICAgIHN0YXRp
YyBwdHJkaWZmX3QgY3VycmVudExvZ0VudHJ5T2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNF
VE9GKFR5cGVQcm9maWxlckxvZywgbV9jdXJyZW50TG9nRW50cnlQdHIpOyB9CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9XZWFrTWFwSW1wbC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha01hcEltcGwuY3BwCShyZXZpc2lvbiAy
NzEzNjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9XZWFrTWFwSW1wbC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM5LDggKzM5LDkgQEAgdm9pZCBXZWFrTWFwSW1wbDxXZWFrTWFw
QnVja2V0Pjo6ZGVzdHJveQogICAgIHN0YXRpY19jYXN0PFdlYWtNYXBJbXBsKj4oY2VsbCktPn5X
ZWFrTWFwSW1wbCgpOwogfQogCi10ZW1wbGF0ZSA8dHlwZW5hbWUgV2Vha01hcEJ1Y2tldD4KLXZv
aWQgV2Vha01hcEltcGw8V2Vha01hcEJ1Y2tldD46OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxs
LCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFdlYWtNYXBCdWNrZXQ+
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBXZWFrTWFwSW1wbDxXZWFrTWFwQnVj
a2V0Pjo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQog
ewogICAgIFdlYWtNYXBJbXBsKiB0aGlzT2JqZWN0ID0ganNDYXN0PFdlYWtNYXBJbXBsKj4oY2Vs
bCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpA
QCAtNDgsNiArNDksOCBAQCB2b2lkIFdlYWtNYXBJbXBsPFdlYWtNYXBCdWNrZXQ+Ojp2aXNpdENo
CiAgICAgdmlzaXRvci5yZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQodGhpc09iamVjdC0+bV9jYXBh
Y2l0eSAqIHNpemVvZihXZWFrTWFwQnVja2V0KSk7CiB9CiAKK0RFRklORV9URU1QTEFURV9WSVNJ
VF9DSElMRFJFTih0ZW1wbGF0ZTx0eXBlbmFtZSBXZWFrTWFwQnVja2V0PiwgV2Vha01hcEltcGw8
V2Vha01hcEJ1Y2tldD4pOworCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgV2Vha01hcEJ1Y2tldD4KIHNp
emVfdCBXZWFrTWFwSW1wbDxXZWFrTWFwQnVja2V0Pjo6ZXN0aW1hdGVkU2l6ZShKU0NlbGwqIGNl
bGwsIFZNJiB2bSkKIHsKQEAgLTU2LDEzICs1OSwxMyBAQCBzaXplX3QgV2Vha01hcEltcGw8V2Vh
a01hcEJ1Y2tldD46OmVzdGltCiB9CiAKIHRlbXBsYXRlIDw+Ci12b2lkIFdlYWtNYXBJbXBsPFdl
YWtNYXBCdWNrZXQ8V2Vha01hcEJ1Y2tldERhdGFLZXk+Pjo6dmlzaXRPdXRwdXRDb25zdHJhaW50
cyhKU0NlbGwqLCBTbG90VmlzaXRvciYpCit2b2lkIFdlYWtNYXBJbXBsPFdlYWtNYXBCdWNrZXQ8
V2Vha01hcEJ1Y2tldERhdGFLZXk+Pjo6dmlzaXRPdXRwdXRDb25zdHJhaW50cyhKU0NlbGwqLCBB
YnN0cmFjdFNsb3RWaXNpdG9yJikKIHsKICAgICAvLyBPbmx5IEpTV2Vha01hcCBuZWVkcyB0byBo
YXJ2ZXN0IHZhbHVlIHJlZmVyZW5jZXMKIH0KIAogdGVtcGxhdGUgPD4KLXZvaWQgV2Vha01hcElt
cGw8V2Vha01hcEJ1Y2tldDxXZWFrTWFwQnVja2V0RGF0YUtleVZhbHVlPj46OnZpc2l0T3V0cHV0
Q29uc3RyYWludHMoSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgV2Vh
a01hcEltcGw8V2Vha01hcEJ1Y2tldDxXZWFrTWFwQnVja2V0RGF0YUtleVZhbHVlPj46OnZpc2l0
T3V0cHV0Q29uc3RyYWludHMoSlNDZWxsKiBjZWxsLCBBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNp
dG9yKQogewogICAgIFZNJiB2bSA9IHZpc2l0b3Iudm0oKTsKICAgICBhdXRvKiB0aGlzT2JqZWN0
ID0ganNDYXN0PFdlYWtNYXBJbXBsKj4oY2VsbCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9XZWFrTWFwSW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1dlYWtNYXBJbXBsLmgJKHJldmlzaW9uIDI3MTM2OCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtNYXBJbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0
NCw4ICsxNDQsMTAgQEAgcHVibGljOgogICAgICAgICBjbGVhclZhbHVlKCk7CiAgICAgfQogCisv
LyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVmlzaXRvciwgdHlwZW5hbWUgVCA9IERhdGE+CisvLyAg
ICBBTFdBWVNfSU5MSU5FIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTxULCBX
ZWFrTWFwQnVja2V0RGF0YUtleVZhbHVlPjo6dmFsdWU+Ojp0eXBlIHZpc2l0QWdncmVnYXRlKFZp
c2l0b3ImIHZpc2l0b3IpCiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQgPSBEYXRhPgotICAgIEFM
V0FZU19JTkxJTkUgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19zYW1lPFQsIFdlYWtN
YXBCdWNrZXREYXRhS2V5VmFsdWU+Ojp2YWx1ZT46OnR5cGUgdmlzaXRBZ2dyZWdhdGUoU2xvdFZp
c2l0b3ImIHZpc2l0b3IpCisgICAgQUxXQVlTX0lOTElORSB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9p
ZjxzdGQ6OmlzX3NhbWU8VCwgV2Vha01hcEJ1Y2tldERhdGFLZXlWYWx1ZT46OnZhbHVlPjo6dHlw
ZSB2aXNpdEFnZ3JlZ2F0ZShBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogICAgIHsKICAg
ICAgICAgdmlzaXRvci5hcHBlbmQobV9kYXRhLnZhbHVlKTsKICAgICB9CkBAIC0yMDIsNyArMjA0
LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0Rlc3RydWN0aW9u
ID0gdHJ1ZTsKICAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwogCi0gICAgc3RhdGlj
IHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVf
VEVNUExBVEVfVklTSVRfQ0hJTERSRU47CiAKICAgICBzdGF0aWMgc2l6ZV90IGVzdGltYXRlZFNp
emUoSlNDZWxsKiwgVk0mKTsKIApAQCAtMzExLDcgKzMxMyw3IEBAIHB1YmxpYzoKICAgICAgICAg
cmV0dXJuIHZtLndlYWtTZXRTcGFjZTxtb2RlPigpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lk
IHZpc2l0T3V0cHV0Q29uc3RyYWludHMoSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBzdGF0
aWMgdm9pZCB2aXNpdE91dHB1dENvbnN0cmFpbnRzKEpTQ2VsbCosIEFic3RyYWN0U2xvdFZpc2l0
b3ImKTsKICAgICB2b2lkIGZpbmFsaXplVW5jb25kaXRpb25hbGx5KFZNJik7CiAKIHByaXZhdGU6
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvSlNEb2xsYXJWTS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0pTRG9sbGFyVk0uY3BwCShyZXZp
c2lvbiAyNzEzNjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvSlNEb2xsYXJWTS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTIyMiwxNCArMjIyLDcgQEAgcHVibGljOgogCiAgICAgdm9p
ZCBmaW5pc2hDcmVhdGlvbihWTSYsIFJvb3QqKTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hp
bGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKLSAgICB7Ci0gICAgICAg
IERvbGxhclZNQXNzZXJ0U2NvcGUgYXNzZXJ0U2NvcGU7Ci0gICAgICAgIEVsZW1lbnQqIHRoaXNP
YmplY3QgPSBqc0Nhc3Q8RWxlbWVudCo+KGNlbGwpOwotICAgICAgICBBU1NFUlRfR0NfT0JKRUNU
X0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7Ci0gICAgICAgIEJhc2U6OnZpc2l0Q2hpbGRy
ZW4odGhpc09iamVjdCwgdmlzaXRvcik7Ci0gICAgICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmpl
Y3QtPm1fcm9vdCk7Ci0gICAgfQorICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBz
dGF0aWMgRWxlbWVudEhhbmRsZU93bmVyKiBoYW5kbGVPd25lcigpOwogCkBAIC0yNDUsMTAgKzIz
OCwyMiBAQCBwcml2YXRlOgogICAgIFdyaXRlQmFycmllcjxSb290PiBtX3Jvb3Q7CiB9OwogCit0
ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBFbGVtZW50Ojp2aXNpdENoaWxkcmVuSW1w
bChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgRG9sbGFyVk1Bc3NlcnRT
Y29wZSBhc3NlcnRTY29wZTsKKyAgICBFbGVtZW50KiB0aGlzT2JqZWN0ID0ganNDYXN0PEVsZW1l
bnQqPihjZWxsKTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGlu
Zm8oKSk7CisgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKKyAg
ICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX3Jvb3QpOworfQorCitERUZJTkVfVklTSVRf
Q0hJTERSRU4oRWxlbWVudCk7CisKIGNsYXNzIEVsZW1lbnRIYW5kbGVPd25lciBmaW5hbCA6IHB1
YmxpYyBXZWFrSGFuZGxlT3duZXIgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVi
bGljOgotICAgIGJvb2wgaXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlND
OjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hh
cioqIHJlYXNvbikgZmluYWwKKyAgICBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpT
Qzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgQWJzdHJhY3RTbG90VmlzaXRv
ciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikgZmluYWwKICAgICB7CiAgICAgICAgIERv
bGxhclZNQXNzZXJ0U2NvcGUgYXNzZXJ0U2NvcGU7CiAgICAgICAgIGlmIChVTkxJS0VMWShyZWFz
b24pKQpAQCAtMzAyLDE4ICszMDcsMjMgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gU3RydWN0
dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RU
eXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQg
dmlzaXRDaGlsZHJlbihKU0NlbGwqIHRoaXNPYmplY3QsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQot
ICAgIHsKLSAgICAgICAgRG9sbGFyVk1Bc3NlcnRTY29wZSBhc3NlcnRTY29wZTsKLSAgICAgICAg
QVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwotICAgICAgICBC
YXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwotICAgICAgICB2aXNpdG9y
LmFkZE9wYXF1ZVJvb3QodGhpc09iamVjdCk7Ci0gICAgfQorICAgIERFQ0xBUkVfVklTSVRfQ0hJ
TERSRU47CiAKIHByaXZhdGU6CiAgICAgV2VhazxFbGVtZW50PiBtX2VsZW1lbnQ7CiB9OwogCit0
ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBSb290Ojp2aXNpdENoaWxkcmVuSW1wbChK
U0NlbGwqIHRoaXNPYmplY3QsIFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgRG9sbGFyVk1Bc3Nl
cnRTY29wZSBhc3NlcnRTY29wZTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNP
YmplY3QsIGluZm8oKSk7CisgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNp
dG9yKTsKKyAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QodGhpc09iamVjdCk7Cit9CisKK0RFRklO
RV9WSVNJVF9DSElMRFJFTihSb290KTsKKwogY2xhc3MgU2ltcGxlT2JqZWN0IDogcHVibGljIEpT
Tm9uRmluYWxPYmplY3QgewogcHVibGljOgogICAgIFNpbXBsZU9iamVjdChWTSYgdm0sIFN0cnVj
dHVyZSogc3RydWN0dXJlKQpAQCAtMzM4LDE0ICszNDgsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJl
dHVybiBzaW1wbGVPYmplY3Q7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJl
bihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQotICAgIHsKLSAgICAgICAgRG9s
bGFyVk1Bc3NlcnRTY29wZSBhc3NlcnRTY29wZTsKLSAgICAgICAgU2ltcGxlT2JqZWN0KiB0aGlz
T2JqZWN0ID0ganNDYXN0PFNpbXBsZU9iamVjdCo+KGNlbGwpOwotICAgICAgICBBU1NFUlRfR0Nf
T0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7Ci0gICAgICAgIEJhc2U6OnZpc2l0
Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7Ci0gICAgICAgIHZpc2l0b3IuYXBwZW5kKHRo
aXNPYmplY3QtPm1faGlkZGVuVmFsdWUpOwotICAgIH0KKyAgICBERUNMQVJFX1ZJU0lUX0NISUxE
UkVOOwogCiAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCiAgICAgewpAQCAt
Mzc4LDYgKzM4MSwxOCBAQCBwcml2YXRlOgogICAgIFdyaXRlQmFycmllcjxKU0M6OlVua25vd24+
IG1faGlkZGVuVmFsdWU7CiB9OwogCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBT
aW1wbGVPYmplY3Q6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlz
aXRvcikKK3sKKyAgICBEb2xsYXJWTUFzc2VydFNjb3BlIGFzc2VydFNjb3BlOworICAgIFNpbXBs
ZU9iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxTaW1wbGVPYmplY3QqPihjZWxsKTsKKyAgICBB
U1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CisgICAgQmFzZTo6
dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKKyAgICB2aXNpdG9yLmFwcGVuZCh0
aGlzT2JqZWN0LT5tX2hpZGRlblZhbHVlKTsKK30KKworREVGSU5FX1ZJU0lUX0NISUxEUkVOKFNp
bXBsZU9iamVjdCk7CisKIGNsYXNzIEltcHVyZUdldHRlciA6IHB1YmxpYyBKU05vbkZpbmFsT2Jq
ZWN0IHsKIHB1YmxpYzoKICAgICBJbXB1cmVHZXR0ZXIoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSkKQEAgLTQzNCwxNCArNDQ5LDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gQmFzZTo6
Z2V0T3duUHJvcGVydHlTbG90KG9iamVjdCwgZ2xvYmFsT2JqZWN0LCBuYW1lLCBzbG90KTsKICAg
ICB9CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZp
c2l0b3ImIHZpc2l0b3IpCi0gICAgewotICAgICAgICBEb2xsYXJWTUFzc2VydFNjb3BlIGFzc2Vy
dFNjb3BlOwotICAgICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNlbGwsIGluZm8oKSk7
Ci0gICAgICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4oY2VsbCwgdmlzaXRvcik7Ci0gICAgICAgIElt
cHVyZUdldHRlciogdGhpc09iamVjdCA9IGpzQ2FzdDxJbXB1cmVHZXR0ZXIqPihjZWxsKTsKLSAg
ICAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9kZWxlZ2F0ZSk7Ci0gICAgfQorICAg
IERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICB2b2lkIHNldERlbGVnYXRlKFZNJiB2bSwg
SlNPYmplY3QqIGRlbGVnYXRlKQogICAgIHsKQEAgLTQ1Miw2ICs0NjAsMTggQEAgcHJpdmF0ZToK
ICAgICBXcml0ZUJhcnJpZXI8SlNPYmplY3Q+IG1fZGVsZWdhdGU7CiB9OwogCit0ZW1wbGF0ZTx0
eXBlbmFtZSBWaXNpdG9yPgordm9pZCBJbXB1cmVHZXR0ZXI6OnZpc2l0Q2hpbGRyZW5JbXBsKEpT
Q2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBEb2xsYXJWTUFzc2VydFNjb3Bl
IGFzc2VydFNjb3BlOworICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2VsbCwgaW5mbygp
KTsKKyAgICBCYXNlOjp2aXNpdENoaWxkcmVuKGNlbGwsIHZpc2l0b3IpOworICAgIEltcHVyZUdl
dHRlciogdGhpc09iamVjdCA9IGpzQ2FzdDxJbXB1cmVHZXR0ZXIqPihjZWxsKTsKKyAgICB2aXNp
dG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2RlbGVnYXRlKTsKK30KKworREVGSU5FX1ZJU0lUX0NI
SUxEUkVOKEltcHVyZUdldHRlcik7CisKIHN0YXRpYyBKU0NfREVDTEFSRV9DVVNUT01fR0VUVEVS
KGN1c3RvbUdldHRlclZhbHVlR2V0dGVyKTsKIHN0YXRpYyBKU0NfREVDTEFSRV9DVVNUT01fR0VU
VEVSKGN1c3RvbUdldHRlckFjZXNzb3JHZXR0ZXIpOwogCkBAIC0zNTU3LDEzICszNTc3LDE2IEBA
IHZvaWQgSlNEb2xsYXJWTTo6YWRkQ29uc3RydWN0aWJsZUZ1bmN0aW8KICAgICBwdXREaXJlY3Qo
dm0sIGlkZW50aWZpZXIsIEpTRnVuY3Rpb246OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBhcmd1
bWVudHMsIGlkZW50aWZpZXIuc3RyaW5nKCksIGZ1bmN0aW9uLCBOb0ludHJpbnNpYywgZnVuY3Rp
b24pLCBqc0RvbGxhclZNUHJvcGVydHlBdHRyaWJ1dGVzKTsKIH0KIAotdm9pZCBKU0RvbGxhclZN
Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1w
bGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0RvbGxhclZNOjp2aXNpdENoaWxkcmVuSW1w
bChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNEb2xsYXJWTSogdGhp
c09iamVjdCA9IGpzQ2FzdDxKU0RvbGxhclZNKj4oY2VsbCk7CiAgICAgQmFzZTo6dmlzaXRDaGls
ZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0
LT5tX29iamVjdERvaW5nU2lkZUVmZmVjdFB1dFdpdGhvdXRDb3JyZWN0U2xvdFN0YXR1c1N0cnVj
dHVyZSk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU0RvbGxhclZNKTsKKwogfSAvLyBu
YW1lc3BhY2UgSlNDCiAKIElHTk9SRV9XQVJOSU5HU19FTkQKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS90b29scy9KU0RvbGxhclZNLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3Rvb2xzL0pTRG9sbGFyVk0uaAkocmV2aXNpb24gMjcxMzY4KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3Rvb2xzL0pTRG9sbGFyVk0uaAkod29ya2luZyBjb3B5KQpAQCAtNzQsNyAr
NzQsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgYWRkRnVuY3Rpb24oVk0mLCBKU0dsb2JhbE9iamVj
dCosIGNvbnN0IGNoYXIqIG5hbWUsIE5hdGl2ZUZ1bmN0aW9uLCB1bnNpZ25lZCBhcmd1bWVudHMp
OwogICAgIHZvaWQgYWRkQ29uc3RydWN0aWJsZUZ1bmN0aW9uKFZNJiwgSlNHbG9iYWxPYmplY3Qq
LCBjb25zdCBjaGFyKiBuYW1lLCBOYXRpdmVGdW5jdGlvbiwgdW5zaWduZWQgYXJndW1lbnRzKTsK
IAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsK
KyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVy
ZT4gbV9vYmplY3REb2luZ1NpZGVFZmZlY3RQdXRXaXRob3V0Q29ycmVjdFNsb3RTdGF0dXNTdHJ1
Y3R1cmU7CiB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUdsb2JhbC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUdsb2JhbC5j
cHAJKHJldmlzaW9uIDI3MTM2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21H
bG9iYWwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDMsNyArMTAzLDggQEAgdm9pZCBHbG9iYWw6
OnNldChKU0dsb2JhbE9iamVjdCogZ2xvYmFsTwogICAgIH0KIH0KIAotdm9pZCBHbG9iYWw6OnZp
c2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlz
aXRvcj4KK3ZvaWQgR2xvYmFsOjp2aXNpdEFnZ3JlZ2F0ZShWaXNpdG9yJiB2aXNpdG9yKQogewog
ICAgIHN3aXRjaCAobV90eXBlKSB7CiAgICAgY2FzZSBXYXNtOjpUeXBlOjpFeHRlcm5yZWY6CkBA
IC0xMTcsNiArMTE4LDkgQEAgdm9pZCBHbG9iYWw6OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9y
JgogICAgIH0KIH0KIAordGVtcGxhdGUgdm9pZCBHbG9iYWw6OnZpc2l0QWdncmVnYXRlKEFic3Ry
YWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgR2xvYmFsOjp2aXNpdEFnZ3JlZ2F0ZShT
bG90VmlzaXRvciYpOworCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6R2xvYmFsCiAKICNlbmRpZiAv
LyBFTkFCTEUoV0VCQVNTRU1CTFkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtR2xvYmFsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUdsb2JhbC5oCShyZXZpc2lvbiAyNzEzNjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtR2xvYmFsLmgJKHdvcmtpbmcgY29weSkKQEAgLTU3LDcgKzU3LDcgQEAgcHVibGljOgog
ICAgIEpTVmFsdWUgZ2V0KEpTR2xvYmFsT2JqZWN0KikgY29uc3Q7CiAgICAgdWludDY0X3QgZ2V0
UHJpbWl0aXZlKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZS5tX3ByaW1pdGl2ZTsgfQogICAgIHZv
aWQgc2V0KEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSk7Ci0gICAgdm9pZCB2aXNpdEFnZ3JlZ2F0
ZShTbG90VmlzaXRvciYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgdmlz
aXRBZ2dyZWdhdGUoVmlzaXRvciYpOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gVCogb3du
ZXIoKSBjb25zdCB7IHJldHVybiByZWludGVycHJldF9jYXN0PFQqPihtX293bmVyKTsgfQogICAg
IHZvaWQgc2V0T3duZXIoSlNPYmplY3QqIG93bmVyKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbVRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtVGFibGUuY3BwCShyZXZpc2lvbiAyNzEzNjgpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtVGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjYsNyArMTY2
LDggQEAgSlNWYWx1ZSBUYWJsZTo6Z2V0KHVpbnQzMl90IGluZGV4KSBjb25zdAogICAgIHJldHVy
biBtX2pzVmFsdWVzLmdldCgpW2luZGV4ICYgbV9tYXNrXS5nZXQoKTsKIH0KIAotdm9pZCBUYWJs
ZTo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBWaXNpdG9yPgordm9pZCBUYWJsZTo6dmlzaXRBZ2dyZWdhdGUoVmlzaXRvciYgdmlzaXRvcikK
IHsKICAgICBSRUxFQVNFX0FTU0VSVChtX293bmVyKTsKICAgICBhdXRvIGxvY2tlciA9IGhvbGRM
b2NrKG1fb3duZXItPmNlbGxMb2NrKCkpOwpAQCAtMTc0LDYgKzE3NSw5IEBAIHZvaWQgVGFibGU6
OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJiAKICAgICAgICAgdmlzaXRvci5hcHBlbmQobV9q
c1ZhbHVlcy5nZXQoKVtpXSk7CiB9CiAKK3RlbXBsYXRlIHZvaWQgVGFibGU6OnZpc2l0QWdncmVn
YXRlKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgVGFibGU6OnZpc2l0QWdn
cmVnYXRlKFNsb3RWaXNpdG9yJik7CisKIEZ1bmNSZWZUYWJsZSogVGFibGU6OmFzRnVuY3JlZlRh
YmxlKCkKIHsKICAgICByZXR1cm4gbV90eXBlID09IFRhYmxlRWxlbWVudFR5cGU6OkZ1bmNyZWYg
PyBzdGF0aWNfY2FzdDxGdW5jUmVmVGFibGUqPih0aGlzKSA6IG51bGxwdHI7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGFibGUuaAkocmV2aXNpb24gMjcxMzY4KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTc5
LDcgKzc5LDcgQEAgcHVibGljOgogICAgIE9wdGlvbmFsPHVpbnQzMl90PiBncm93KHVpbnQzMl90
IGRlbHRhLCBKU1ZhbHVlIGRlZmF1bHRWYWx1ZSk7CiAgICAgdm9pZCBjb3B5KGNvbnN0IFRhYmxl
KiBzcmNUYWJsZSwgdWludDMyX3QgZHN0SW5kZXgsIHVpbnQzMl90IHNyY0luZGV4KTsKIAotICAg
IHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBWaXNpdG9yPiB2b2lkIHZpc2l0QWdncmVnYXRlKFZpc2l0b3ImKTsKIAogcHJvdGVjdGVkOgog
ICAgIFRhYmxlKHVpbnQzMl90IGluaXRpYWwsIE9wdGlvbmFsPHVpbnQzMl90PiBtYXhpbXVtLCBU
YWJsZUVsZW1lbnRUeXBlID0gVGFibGVFbGVtZW50VHlwZTo6RXh0ZXJucmVmKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTVG9XYXNtSUNDYWxsZWUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTVG9XYXNtSUNDYWxsZWUuY3Bw
CShyZXZpc2lvbiAyNzEzNjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1Rv
V2FzbUlDQ2FsbGVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDksNyArNDksOCBAQCBTdHJ1Y3R1
cmUqIEpTVG9XYXNtSUNDYWxsZWU6OmNyZWF0ZVN0cnVjCiAgICAgcmV0dXJuIFN0cnVjdHVyZTo6
Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oSlNDYWxsZWVUeXBl
LCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CiB9CiAKLXZvaWQgSlNUb1dhc21JQ0NhbGxlZTo6
dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxh
dGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNUb1dhc21JQ0NhbGxlZTo6dmlzaXRDaGlsZHJl
bkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTVG9XYXNtSUND
YWxsZWUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUb1dhc21JQ0NhbGxlZSo+KGNlbGwpOwogICAg
IEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTU4LDYg
KzU5LDggQEAgdm9pZCBKU1RvV2FzbUlDQ2FsbGVlOjp2aXNpdENoaWxkcmVuKEpTQwogICAgIHZp
c2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fZnVuY3Rpb24pOwogfQogCitERUZJTkVfVklTSVRf
Q0hJTERSRU4oSlNUb1dhc21JQ0NhbGxlZSk7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5k
aWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vanMvSlNUb1dhc21JQ0NhbGxlZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL0pTVG9XYXNtSUNDYWxsZWUuaAkocmV2aXNpb24gMjcxMzY4KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNUb1dhc21JQ0NhbGxlZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC01Niw3ICs1Niw3IEBAIHByaXZhdGU6CiAgICAgSlNUb1dhc21JQ0NhbGxlZShWTSYg
dm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlKQog
ICAgICAgICA6IEJhc2Uodm0sIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKQogICAgIHsgfQotICAg
IHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBE
RUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgV3JpdGVCYXJyaWVyPFdlYkFzc2VtYmx5RnVu
Y3Rpb24+IG1fZnVuY3Rpb247CiB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
anMvSlNXZWJBc3NlbWJseUNvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9jay5jcHAJKHJldmlzaW9uIDI3
MTM2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2Rl
QmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Miw3ICs4Miw4IEBAIHZvaWQgSlNXZWJBc3Nl
bWJseUNvZGVCbG9jazo6Y2xlYXJKU0NhbGwKICAgICAgICAgKCppdGVyKS0+dW5saW5rKHZtKTsK
IH0KIAotdm9pZCBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCog
Y2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgor
dm9pZCBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNl
bGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNXZWJBc3NlbWJseUNvZGVCbG9jayogdGhp
c09iamVjdCA9IGpzQ2FzdDxKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKj4oY2VsbCk7CiAgICAgQVNT
RVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtOTAsNiArOTEs
OCBAQCB2b2lkIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6OnZpc2l0Q2hpbGRyCiAgICAgQmFzZTo6
dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NI
SUxEUkVOKEpTV2ViQXNzZW1ibHlDb2RlQmxvY2spOworCiB2b2lkIEpTV2ViQXNzZW1ibHlDb2Rl
QmxvY2s6OmZpbmFsaXplVW5jb25kaXRpb25hbGx5KFZNJiB2bSkKIHsKICAgICBmb3IgKGF1dG8g
aXRlciA9IG1fY2FsbExpbmtJbmZvcy5iZWdpbigpOyAhIWl0ZXI7ICsraXRlcikKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29k
ZUJsb2NrLmgJKHJldmlzaW9uIDI3MTM2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtODYsNyArODYs
NyBAQCBwcml2YXRlOgogICAgIERFQ0xBUkVfRVhQT1JUX0lORk87CiAgICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOwogICAgIHN0YXRpYyB2b2lkIGRlc3Ry
b3koSlNDZWxsKik7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90
VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBSZWY8V2FzbTo6
Q29kZUJsb2NrPiBtX2NvZGVCbG9jazsKICAgICBWZWN0b3I8TWFjcm9Bc3NlbWJsZXJDb2RlUmVm
PFdhc21FbnRyeVB0clRhZz4+IG1fd2FzbVRvSlNFeGl0U3R1YnM7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5R2xvYmFsLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5R2xvYmFsLmNwcAko
cmV2aXNpb24gMjcxMzY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJB
c3NlbWJseUdsb2JhbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcxLDcgKzcxLDggQEAgdm9pZCBK
U1dlYkFzc2VtYmx5R2xvYmFsOjpkZXN0cm95KEpTQ2VsbAogICAgIHN0YXRpY19jYXN0PEpTV2Vi
QXNzZW1ibHlHbG9iYWwqPihjZWxsKS0+SlNXZWJBc3NlbWJseUdsb2JhbDo6fkpTV2ViQXNzZW1i
bHlHbG9iYWwoKTsKIH0KIAotdm9pZCBKU1dlYkFzc2VtYmx5R2xvYmFsOjp2aXNpdENoaWxkcmVu
KEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPgordm9pZCBKU1dlYkFzc2VtYmx5R2xvYmFsOjp2aXNpdENoaWxkcmVuSW1wbChKU0Nl
bGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNXZWJBc3NlbWJseUdsb2JhbCog
dGhpc09iamVjdCA9IGpzQ2FzdDxKU1dlYkFzc2VtYmx5R2xvYmFsKj4oY2VsbCk7CiAgICAgQVNT
RVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtODAsNiArODEs
OCBAQCB2b2lkIEpTV2ViQXNzZW1ibHlHbG9iYWw6OnZpc2l0Q2hpbGRyZW4oCiAgICAgdGhpc09i
amVjdC0+Z2xvYmFsKCktPnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOwogfQogCitERUZJTkVfVklT
SVRfQ0hJTERSRU4oSlNXZWJBc3NlbWJseUdsb2JhbCk7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwog
CiAjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUdsb2JhbC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlHbG9iYWwuaAkocmV2aXNpb24gMjcx
MzY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUdsb2Jh
bC5oCSh3b3JraW5nIGNvcHkpCkBAIC01OSw3ICs1OSw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAg
ICAgSlNXZWJBc3NlbWJseUdsb2JhbChWTSYsIFN0cnVjdHVyZSosIFJlZjxXYXNtOjpHbG9iYWw+
JiYpOwogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNp
dENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElM
RFJFTjsKIAogICAgIFJlZjxXYXNtOjpHbG9iYWw+IG1fZ2xvYmFsOwogfTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUluc3Rh
bmNlLmNwcAkocmV2aXNpb24gMjcxMzY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
anMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzMsNyArNzMs
OCBAQCB2b2lkIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6ZGVzdHJveShKU0NlCiAgICAgc3RhdGlj
X2Nhc3Q8SlNXZWJBc3NlbWJseUluc3RhbmNlKj4oY2VsbCktPkpTV2ViQXNzZW1ibHlJbnN0YW5j
ZTo6fkpTV2ViQXNzZW1ibHlJbnN0YW5jZSgpOwogfQogCi12b2lkIEpTV2ViQXNzZW1ibHlJbnN0
YW5jZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQor
dGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNXZWJBc3NlbWJseUluc3RhbmNlOjp2
aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAg
YXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1dlYkFzc2VtYmx5SW5zdGFuY2UqPihjZWxsKTsK
ICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC0x
MDIsNiArMTAzLDggQEAgdm9pZCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OnZpc2l0Q2hpbGRyZQog
ICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKHdyYXBwZXIuZ2V0KCkpOwogfQogCitE
RUZJTkVfVklTSVRfQ0hJTERSRU4oSlNXZWJBc3NlbWJseUluc3RhbmNlKTsKKwogdm9pZCBKU1dl
YkFzc2VtYmx5SW5zdGFuY2U6OmZpbmFsaXplQ3JlYXRpb24oVk0mIHZtLCBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBSZWY8V2FzbTo6Q29kZUJsb2NrPiYmIHdhc21Db2RlQmxvY2ssIEpT
T2JqZWN0KiBpbXBvcnRPYmplY3QsIFdhc206OkNyZWF0aW9uTW9kZSBjcmVhdGlvbk1vZGUpCiB7
CiAgICAgbV9pbnN0YW5jZS0+ZmluYWxpemVDcmVhdGlvbih0aGlzLCB3YXNtQ29kZUJsb2NrLmNv
cHlSZWYoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2Vt
Ymx5SW5zdGFuY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuaAkocmV2aXNpb24gMjcxMzY4KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEwNSw3ICsxMDUsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIEpTV2ViQXNzZW1i
bHlJbnN0YW5jZShWTSYsIFN0cnVjdHVyZSosIFJlZjxXYXNtOjpJbnN0YW5jZT4mJik7CiAgICAg
dm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIEpTV2ViQXNzZW1ibHlNb2R1bGUqLCBXZWJBc3NlbWJs
eU1vZHVsZVJlY29yZCopOwotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwg
U2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgUmVmPFdh
c206Okluc3RhbmNlPiBtX2luc3RhbmNlOwogICAgIFZNKiBtX3ZtOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1lbW9yeS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1lbW9yeS5jcHAJ
KHJldmlzaW9uIDI3MTM2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2Vi
QXNzZW1ibHlNZW1vcnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTksNyArMTU5LDggQEAgdm9p
ZCBKU1dlYkFzc2VtYmx5TWVtb3J5OjpkZXN0cm95KEpTQ2VsbAogICAgIG1lbW9yeS0+SlNXZWJB
c3NlbWJseU1lbW9yeTo6fkpTV2ViQXNzZW1ibHlNZW1vcnkoKTsKIH0KIAotdm9pZCBKU1dlYkFz
c2VtYmx5TWVtb3J5Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZp
c2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1dlYkFzc2VtYmx5TWVt
b3J5Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7
CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1dlYkFzc2VtYmx5TWVtb3J5Kj4oY2Vs
bCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpA
QCAtMTY5LDYgKzE3MCw4IEBAIHZvaWQgSlNXZWJBc3NlbWJseU1lbW9yeTo6dmlzaXRDaGlsZHJl
bigKICAgICB2aXNpdG9yLnJlcG9ydEV4dHJhTWVtb3J5VmlzaXRlZCh0aGlzT2JqZWN0LT5tZW1v
cnkoKS5zaXplKCkpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNXZWJBc3NlbWJseU1l
bW9yeSk7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VN
QkxZKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1l
bW9yeS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2Vi
QXNzZW1ibHlNZW1vcnkuaAkocmV2aXNpb24gMjcxMzY4KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1lbW9yeS5oCSh3b3JraW5nIGNvcHkpCkBAIC02Myw3
ICs2Myw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgSlNXZWJBc3NlbWJseU1lbW9yeShWTSYs
IFN0cnVjdHVyZSopOwogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKLSAgICBzdGF0aWMg
dm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9W
SVNJVF9DSElMRFJFTjsKIAogICAgIFJlZjxXYXNtOjpNZW1vcnk+IG1fbWVtb3J5OwogICAgIFdy
aXRlQmFycmllcjxKU0FycmF5QnVmZmVyPiBtX2J1ZmZlcldyYXBwZXI7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmNw
cAkocmV2aXNpb24gMjcxMzY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNX
ZWJBc3NlbWJseU1vZHVsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNCw3ICsxMjQsOCBAQCB2
b2lkIEpTV2ViQXNzZW1ibHlNb2R1bGU6OnNldENvZGVCbG9jayhWCiAgICAgbV9jb2RlQmxvY2tz
W3N0YXRpY19jYXN0PHNpemVfdD4obW9kZSldLnNldCh2bSwgdGhpcywgY29kZUJsb2NrKTsKIH0K
IAotdm9pZCBKU1dlYkFzc2VtYmx5TW9kdWxlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwg
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBK
U1dlYkFzc2VtYmx5TW9kdWxlOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0
b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNXZWJBc3NlbWJseU1vZHVsZSogdGhpc09iamVjdCA9IGpz
Q2FzdDxKU1dlYkFzc2VtYmx5TW9kdWxlKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9J
TkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtMTM1LDYgKzEzNiw4IEBAIHZvaWQgSlNX
ZWJBc3NlbWJseU1vZHVsZTo6dmlzaXRDaGlsZHJlbigKICAgICAgICAgdmlzaXRvci5hcHBlbmQo
dGhpc09iamVjdC0+bV9jb2RlQmxvY2tzW2ldKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVO
KEpTV2ViQXNzZW1ibHlNb2R1bGUpOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8v
IEVOQUJMRShXRUJBU1NFTUJMWSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L0pTV2ViQXNzZW1ibHlNb2R1bGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmgJKHJldmlzaW9uIDI3MTM2OCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtODAsNyArODAsNyBAQCBwcml2YXRlOgogCiAgICAgSlNXZWJBc3NlbWJseU1v
ZHVsZShWTSYsIFN0cnVjdHVyZSosIFJlZjxXYXNtOjpNb2R1bGU+JiYpOwogICAgIHZvaWQgZmlu
aXNoQ3JlYXRpb24oVk0mKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCos
IFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIFJlZjxX
YXNtOjpNb2R1bGU+IG1fbW9kdWxlOwogICAgIFdyaXRlQmFycmllcjxTeW1ib2xUYWJsZT4gbV9l
eHBvcnRTeW1ib2xUYWJsZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pT
V2ViQXNzZW1ibHlUYWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvSlNXZWJBc3NlbWJseVRhYmxlLmNwcAkocmV2aXNpb24gMjcxMzY4KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseVRhYmxlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNzIsNyArNzIsOCBAQCB2b2lkIEpTV2ViQXNzZW1ibHlUYWJsZTo6ZGVzdHJv
eShKU0NlbGwqCiAgICAgc3RhdGljX2Nhc3Q8SlNXZWJBc3NlbWJseVRhYmxlKj4oY2VsbCktPkpT
V2ViQXNzZW1ibHlUYWJsZTo6fkpTV2ViQXNzZW1ibHlUYWJsZSgpOwogfQogCi12b2lkIEpTV2Vi
QXNzZW1ibHlUYWJsZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNXZWJBc3NlbWJseVRh
YmxlOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7
CiAgICAgSlNXZWJBc3NlbWJseVRhYmxlKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTV2ViQXNzZW1i
bHlUYWJsZSo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVj
dCwgaW5mbygpKTsKQEAgLTgxLDYgKzgyLDggQEAgdm9pZCBKU1dlYkFzc2VtYmx5VGFibGU6OnZp
c2l0Q2hpbGRyZW4oSgogICAgIHRoaXNPYmplY3QtPnRhYmxlKCktPnZpc2l0QWdncmVnYXRlKHZp
c2l0b3IpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNXZWJBc3NlbWJseVRhYmxlKTsK
KwogYm9vbCBKU1dlYkFzc2VtYmx5VGFibGU6Omdyb3codWludDMyX3QgZGVsdGEsIEpTVmFsdWUg
ZGVmYXVsdFZhbHVlKQogewogICAgIGlmIChkZWx0YSA9PSAwKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseVRhYmxlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseVRhYmxlLmgJKHJldmlzaW9u
IDI3MTM2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlU
YWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03MCw4ICs3MCw4IEBAIHB1YmxpYzoKIHByaXZhdGU6
CiAgICAgSlNXZWJBc3NlbWJseVRhYmxlKFZNJiwgU3RydWN0dXJlKiwgUmVmPFdhc206OlRhYmxl
PiYmKTsKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7Ci0gICAgc3RhdGljIHZvaWQgdmlz
aXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwotCisgICAgREVDTEFSRV9WSVNJVF9D
SElMRFJFTjsKKy8vCiAgICAgUmVmPFdhc206OlRhYmxlPiBtX3RhYmxlOwogfTsKIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5j
dGlvbi5jcHAJKHJldmlzaW9uIDI3MTM2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NTIsNyArNDUy
LDggQEAgV2ViQXNzZW1ibHlGdW5jdGlvbjo6V2ViQXNzZW1ibHlGdW5jdGlvbgogICAgICwgbV9p
bXBvcnRhYmxlRnVuY3Rpb24geyBzaWduYXR1cmVJbmRleCwgd2FzbVRvV2FzbUVudHJ5cG9pbnRM
b2FkTG9jYXRpb24gfQogeyB9CiAKLXZvaWQgV2ViQXNzZW1ibHlGdW5jdGlvbjo6dmlzaXRDaGls
ZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5h
bWUgVmlzaXRvcj4KK3ZvaWQgV2ViQXNzZW1ibHlGdW5jdGlvbjo6dmlzaXRDaGlsZHJlbkltcGwo
SlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFdlYkFzc2VtYmx5RnVuY3Rp
b24qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8V2ViQXNzZW1ibHlGdW5jdGlvbio+KGNlbGwpOwogICAg
IEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTQ2MSw2
ICs0NjIsOCBAQCB2b2lkIFdlYkFzc2VtYmx5RnVuY3Rpb246OnZpc2l0Q2hpbGRyZW4oCiAgICAg
dmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9qc1RvV2FzbUlDQ2FsbGVlKTsKIH0KIAorREVG
SU5FX1ZJU0lUX0NISUxEUkVOKFdlYkFzc2VtYmx5RnVuY3Rpb24pOworCiB2b2lkIFdlYkFzc2Vt
Ymx5RnVuY3Rpb246OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQogewogICAgIHN0YXRpY19jYXN0PFdl
YkFzc2VtYmx5RnVuY3Rpb24qPihjZWxsKS0+V2ViQXNzZW1ibHlGdW5jdGlvbjo6fldlYkFzc2Vt
Ymx5RnVuY3Rpb24oKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFz
c2VtYmx5RnVuY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmgJKHJldmlzaW9uIDI3MTM2OCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uaAkod29ya2luZyBjb3B5
KQpAQCAtOTAsNyArOTAsNyBAQCBwdWJsaWM6CiAgICAgV2FzbTo6SW5zdGFuY2UqIHByZXZpb3Vz
SW5zdGFuY2UoQ2FsbEZyYW1lKik7CiAKIHByaXZhdGU6Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRD
aGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERS
RU47CiAgICAgV2ViQXNzZW1ibHlGdW5jdGlvbihWTSYsIE5hdGl2ZUV4ZWN1dGFibGUqLCBKU0ds
b2JhbE9iamVjdCosIFN0cnVjdHVyZSosIFdhc206OkNhbGxlZSYganNFbnRyeXBvaW50LCBXYXNt
VG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9uOjpMb2FkTG9jYXRpb24gZW50cnlwb2ludExvYWRMb2Nh
dGlvbiwgV2FzbTo6U2lnbmF0dXJlSW5kZXgpOwogCiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRy
PEpTRW50cnlQdHJUYWc+IGpzQ2FsbEVudHJ5cG9pbnRTbG93KCk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uQmFzZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbkJh
c2UuY3BwCShyZXZpc2lvbiAyNzEzNjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9XZWJBc3NlbWJseUZ1bmN0aW9uQmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDcgKzQx
LDggQEAgV2ViQXNzZW1ibHlGdW5jdGlvbkJhc2U6OldlYkFzc2VtYmx5RnVuYwogICAgIDogQmFz
ZSh2bSwgZXhlY3V0YWJsZSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUpCiB7IH0KIAotdm9pZCBX
ZWJBc3NlbWJseUZ1bmN0aW9uQmFzZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgV2ViQXNz
ZW1ibHlGdW5jdGlvbkJhc2U6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRv
ciYgdmlzaXRvcikKIHsKICAgICBXZWJBc3NlbWJseUZ1bmN0aW9uQmFzZSogdGhpc09iamVjdCA9
IGpzQ2FzdDxXZWJBc3NlbWJseUZ1bmN0aW9uQmFzZSo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19P
QkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTQ5LDYgKzUwLDggQEAgdm9p
ZCBXZWJBc3NlbWJseUZ1bmN0aW9uQmFzZTo6dmlzaXRDaGlsZAogICAgIHZpc2l0b3IuYXBwZW5k
KHRoaXNPYmplY3QtPm1faW5zdGFuY2UpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oV2Vi
QXNzZW1ibHlGdW5jdGlvbkJhc2UpOworCiB2b2lkIFdlYkFzc2VtYmx5RnVuY3Rpb25CYXNlOjpm
aW5pc2hDcmVhdGlvbihWTSYgdm0sIE5hdGl2ZUV4ZWN1dGFibGUqIGV4ZWN1dGFibGUsIHVuc2ln
bmVkIGxlbmd0aCwgY29uc3QgU3RyaW5nJiBuYW1lLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGlu
c3RhbmNlKQogewogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtLCBleGVjdXRhYmxlLCBsZW5n
dGgsIG5hbWUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1i
bHlGdW5jdGlvbkJhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uQmFzZS5oCShyZXZpc2lvbiAyNzEzNjgpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uQmFzZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00Niw3ICs0Niw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgcHRyZGlmZl90
IG9mZnNldE9mSW5zdGFuY2UoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoV2ViQXNzZW1ibHlG
dW5jdGlvbkJhc2UsIG1faW5zdGFuY2UpOyB9CiAKIHByb3RlY3RlZDoKLSAgICBzdGF0aWMgdm9p
ZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJ
VF9DSElMRFJFTjsKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgTmF0aXZlRXhlY3V0YWJs
ZSosIHVuc2lnbmVkIGxlbmd0aCwgY29uc3QgU3RyaW5nJiBuYW1lLCBKU1dlYkFzc2VtYmx5SW5z
dGFuY2UqKTsKICAgICBXZWJBc3NlbWJseUZ1bmN0aW9uQmFzZShWTSYsIE5hdGl2ZUV4ZWN1dGFi
bGUqLCBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSopOwogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZVJlY29yZC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQu
Y3BwCShyZXZpc2lvbiAyNzEzNjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9X
ZWJBc3NlbWJseU1vZHVsZVJlY29yZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc3LDcgKzc3LDgg
QEAgdm9pZCBXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6ZmluaXNoQ3JlYQogICAgIH0KIH0KIAot
dm9pZCBXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGws
IFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQg
V2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwg
VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBXZWJBc3NlbWJseU1vZHVsZVJlY29yZCogdGhpc09i
amVjdCA9IGpzQ2FzdDxXZWJBc3NlbWJseU1vZHVsZVJlY29yZCo+KGNlbGwpOwogICAgIEFTU0VS
VF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTg3LDYgKzg4LDgg
QEAgdm9pZCBXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6dmlzaXRDaGlsZAogICAgIHZpc2l0b3Iu
YXBwZW5kKHRoaXNPYmplY3QtPm1fZXhwb3J0c09iamVjdCk7CiB9CiAKK0RFRklORV9WSVNJVF9D
SElMRFJFTihXZWJBc3NlbWJseU1vZHVsZVJlY29yZCk7CisKIHZvaWQgV2ViQXNzZW1ibHlNb2R1
bGVSZWNvcmQ6OnByZXBhcmVMaW5rKFZNJiB2bSwgSlNXZWJBc3NlbWJseUluc3RhbmNlKiBpbnN0
YW5jZSkKIHsKICAgICBSRUxFQVNFX0FTU0VSVCghbV9pbnN0YW5jZSk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZVJlY29yZC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVj
b3JkLmgJKHJldmlzaW9uIDI3MTM2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmgJKHdvcmtpbmcgY29weSkKQEAgLTY5LDcgKzY5LDcg
QEAgcHJpdmF0ZToKIAogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxPYmplY3QqLCBW
TSYsIGNvbnN0IFdhc206Ok1vZHVsZUluZm9ybWF0aW9uJik7CiAKLSAgICBzdGF0aWMgdm9pZCB2
aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9D
SElMRFJFTjsKIAogICAgIFdyaXRlQmFycmllcjxKU1dlYkFzc2VtYmx5SW5zdGFuY2U+IG1faW5z
dGFuY2U7CiAgICAgV3JpdGVCYXJyaWVyPEpTT2JqZWN0PiBtX3N0YXJ0RnVuY3Rpb247CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlv
bi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNz
ZW1ibHlXcmFwcGVyRnVuY3Rpb24uY3BwCShyZXZpc2lvbiAyNzEzNjgpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTY3LDcgKzY3LDggQEAgU3RydWN0dXJlKiBXZWJBc3NlbWJseVdyYXBwZXJG
dW5jdGlvbjo6YwogICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0
LCBwcm90b3R5cGUsIFR5cGVJbmZvKEpTRnVuY3Rpb25UeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGlu
Zm8oKSk7CiB9CiAKLXZvaWQgV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb246OnZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1l
IFZpc2l0b3I+Cit2b2lkIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uOjp2aXNpdENoaWxkcmVu
SW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgV2ViQXNzZW1ibHlX
cmFwcGVyRnVuY3Rpb24qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8V2ViQXNzZW1ibHlXcmFwcGVyRnVu
Y3Rpb24qPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3Qs
IGluZm8oKSk7CkBAIC03Niw2ICs3Nyw4IEBAIHZvaWQgV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rp
b246OnZpc2l0Q2gKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2Z1bmN0aW9uKTsK
IH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uKTsK
KwogSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGNhbGxXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlv
biwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKSkK
IHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5V3JhcHBlckZ1bmN0
aW9uLmgJKHJldmlzaW9uIDI3MTM2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L1dlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTU5LDcgKzU5
LDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbihW
TSYsIE5hdGl2ZUV4ZWN1dGFibGUqLCBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSosIFdhc21U
b1dhc21JbXBvcnRhYmxlRnVuY3Rpb24pOwogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBO
YXRpdmVFeGVjdXRhYmxlKiwgdW5zaWduZWQgbGVuZ3RoLCBjb25zdCBTdHJpbmcmIG5hbWUsIEpT
T2JqZWN0KiwgSlNXZWJBc3NlbWJseUluc3RhbmNlKik7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRD
aGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERS
RU47CiAKICAgICBXcml0ZUJhcnJpZXI8SlNPYmplY3Q+IG1fZnVuY3Rpb247CiAgICAgLy8gSXQn
cyBzYWZlIHRvIGp1c3QgaG9sZCB0aGUgcmF3IFdhc21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rpb24g
YmVjYXVzZSB3ZSBoYXZlIGEgcmVmZXJlbmNlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuY3BwCShyZXZpc2lvbiAyNzEzNjgp
CisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTcyOCw3ICs3MjgsOSBAQCB2b2lkIElEQk9iamVjdFN0b3JlOjpy
b2xsYmFja0ZvclZlcnNpb25DCiAgICAgfQogfQogCi12b2lkIElEQk9iamVjdFN0b3JlOjp2aXNp
dFJlZmVyZW5jZWRJbmRleGVzKFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBjb25zdAorLy92b2lkIElE
Qk9iamVjdFN0b3JlOjp2aXNpdFJlZmVyZW5jZWRJbmRleGVzKFNsb3RWaXNpdG9yJiB2aXNpdG9y
KSBjb25zdAordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSURCT2JqZWN0U3RvcmU6
OnZpc2l0UmVmZXJlbmNlZEluZGV4ZXMoVmlzaXRvciYgdmlzaXRvcikgY29uc3QKIHsKICAgICBM
b2NrZXI8TG9jaz4gbG9ja2VyKG1fcmVmZXJlbmNlZEluZGV4TG9jayk7CiAgICAgZm9yIChhdXRv
JiBpbmRleCA6IG1fcmVmZXJlbmNlZEluZGV4ZXMudmFsdWVzKCkpCkBAIC03MzcsNiArNzM5LDkg
QEAgdm9pZCBJREJPYmplY3RTdG9yZTo6dmlzaXRSZWZlcmVuY2VkSW5kZQogICAgICAgICB2aXNp
dG9yLmFkZE9wYXF1ZVJvb3QoaW5kZXguZ2V0KCkpOwogfQogCit0ZW1wbGF0ZSB2b2lkIElEQk9i
amVjdFN0b3JlOjp2aXNpdFJlZmVyZW5jZWRJbmRleGVzKEFic3RyYWN0U2xvdFZpc2l0b3ImKSBj
b25zdDsKK3RlbXBsYXRlIHZvaWQgSURCT2JqZWN0U3RvcmU6OnZpc2l0UmVmZXJlbmNlZEluZGV4
ZXMoU2xvdFZpc2l0b3ImKSBjb25zdDsKKwogdm9pZCBJREJPYmplY3RTdG9yZTo6cmVuYW1lUmVm
ZXJlbmNlZEluZGV4KElEQkluZGV4JiBpbmRleCwgY29uc3QgU3RyaW5nJiBuZXdOYW1lKQogewog
ICAgIExPRyhJbmRleGVkREIsICJJREJPYmplY3RTdG9yZTo6cmVuYW1lUmVmZXJlbmNlZEluZGV4
Iik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9y
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9i
amVjdFN0b3JlLmgJKHJldmlzaW9uIDI3MTM2OCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwOSw3ICsxMDks
OCBAQCBwdWJsaWM6CiAgICAgdm9pZCByZWYoKTsKICAgICB2b2lkIGRlcmVmKCk7CiAKLSAgICB2
b2lkIHZpc2l0UmVmZXJlbmNlZEluZGV4ZXMoSlNDOjpTbG90VmlzaXRvciYpIGNvbnN0OworLy8g
ICAgdm9pZCB2aXNpdFJlZmVyZW5jZWRJbmRleGVzKEpTQzo6U2xvdFZpc2l0b3ImKSBjb25zdDsK
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIHZpc2l0UmVmZXJlbmNlZEluZGV4
ZXMoVmlzaXRvciYpIGNvbnN0OwogICAgIHZvaWQgcmVuYW1lUmVmZXJlbmNlZEluZGV4KElEQklu
ZGV4JiwgY29uc3QgU3RyaW5nJiBuZXdOYW1lKTsKIAogcHJpdmF0ZToKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5jcHAJKHJl
dmlzaW9uIDI3MTM2OCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRy
YW5zYWN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ0NSw3ICsxNDQ1LDggQEAgdm9pZCBJ
REJUcmFuc2FjdGlvbjo6Y29ubmVjdGlvbkNsb3NlZEZybwogICAgIGZpcmVPbkFib3J0KCk7CiB9
CiAKLXZvaWQgSURCVHJhbnNhY3Rpb246OnZpc2l0UmVmZXJlbmNlZE9iamVjdFN0b3JlcyhKU0M6
OlNsb3RWaXNpdG9yJiB2aXNpdG9yKSBjb25zdAordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4K
K3ZvaWQgSURCVHJhbnNhY3Rpb246OnZpc2l0UmVmZXJlbmNlZE9iamVjdFN0b3JlcyhWaXNpdG9y
JiB2aXNpdG9yKSBjb25zdAogewogICAgIExvY2tlcjxMb2NrPiBsb2NrZXIobV9yZWZlcmVuY2Vk
T2JqZWN0U3RvcmVMb2NrKTsKICAgICBmb3IgKGF1dG8mIG9iamVjdFN0b3JlIDogbV9yZWZlcmVu
Y2VkT2JqZWN0U3RvcmVzLnZhbHVlcygpKQpAQCAtMTQ1NCw2ICsxNDU1LDkgQEAgdm9pZCBJREJU
cmFuc2FjdGlvbjo6dmlzaXRSZWZlcmVuY2VkT2JqZQogICAgICAgICB2aXNpdG9yLmFkZE9wYXF1
ZVJvb3Qob2JqZWN0U3RvcmUuZ2V0KCkpOwogfQogCit0ZW1wbGF0ZSB2b2lkIElEQlRyYW5zYWN0
aW9uOjp2aXNpdFJlZmVyZW5jZWRPYmplY3RTdG9yZXMoSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9y
JiB2aXNpdG9yKSBjb25zdDsKK3RlbXBsYXRlIHZvaWQgSURCVHJhbnNhY3Rpb246OnZpc2l0UmVm
ZXJlbmNlZE9iamVjdFN0b3JlcyhKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKSBjb25zdDsKKwog
dm9pZCBJREJUcmFuc2FjdGlvbjo6aGFuZGxlUGVuZGluZ09wZXJhdGlvbnMoKQogewogICAgIEFT
U0VSVChjYW5DdXJyZW50VGhyZWFkQWNjZXNzVGhyZWFkTG9jYWxEYXRhKG1fZGF0YWJhc2UtPm9y
aWdpblRocmVhZCgpKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJUcmFuc2FjdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmgJKHJldmlzaW9uIDI3MTM2OCkKKysrIFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAg
LTE0OSw3ICsxNDksOCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGNvbm5lY3Rpb25DbG9zZWRGcm9t
U2VydmVyKGNvbnN0IElEQkVycm9yJik7CiAKLSAgICB2b2lkIHZpc2l0UmVmZXJlbmNlZE9iamVj
dFN0b3JlcyhKU0M6OlNsb3RWaXNpdG9yJikgY29uc3Q7CisvLyAgICB2b2lkIHZpc2l0UmVmZXJl
bmNlZE9iamVjdFN0b3JlcyhKU0M6OlNsb3RWaXNpdG9yJikgY29uc3Q7CisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCB2aXNpdFJlZmVyZW5jZWRPYmplY3RTdG9yZXMoVmlzaXRv
ciYpIGNvbnN0OwogCiAgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIHN0ZDo6YXRvbWljPHVuc2ln
bmVkPiBudW1iZXJPZklEQlRyYW5zYWN0aW9uczsKIApJbmRleDogU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJhdWRpby9BdWRpb0J1ZmZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0J1ZmZlci5jcHAJKHJldmlzaW9uIDI3MTM2OCkKKysr
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9CdWZmZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xNTQsMTIgKzE1NCwxNyBAQCBFeGNlcHRpb25PcjxKU0M6OkpTVmFsdWU+IEF1
ZGlvQnVmZmVyOjpnCiAgICAgcmV0dXJuIGNvbnN0cnVjdEpTQXJyYXkoKTsKIH0KIAotdm9pZCBB
dWRpb0J1ZmZlcjo6dmlzaXRDaGFubmVsV3JhcHBlcnMoSlNDOjpTbG90VmlzaXRvciYgdmlzaXRv
cikKKy8vdm9pZCBBdWRpb0J1ZmZlcjo6dmlzaXRDaGFubmVsV3JhcHBlcnMoSlNDOjpTbG90Vmlz
aXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEF1ZGlvQnVm
ZmVyOjp2aXNpdENoYW5uZWxXcmFwcGVycyhWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGZvciAo
YXV0byYgY2hhbm5lbFdyYXBwZXIgOiBtX2NoYW5uZWxXcmFwcGVycykKICAgICAgICAgY2hhbm5l
bFdyYXBwZXIudmlzaXQodmlzaXRvcik7CiB9CiAKK3RlbXBsYXRlIHZvaWQgQXVkaW9CdWZmZXI6
OnZpc2l0Q2hhbm5lbFdyYXBwZXJzKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxh
dGUgdm9pZCBBdWRpb0J1ZmZlcjo6dmlzaXRDaGFubmVsV3JhcHBlcnMoSlNDOjpTbG90VmlzaXRv
ciYpOworCiBSZWZQdHI8RmxvYXQzMkFycmF5PiBBdWRpb0J1ZmZlcjo6Y2hhbm5lbERhdGEodW5z
aWduZWQgY2hhbm5lbEluZGV4KQogewogICAgIGlmIChjaGFubmVsSW5kZXggPj0gbV9jaGFubmVs
cy5zaXplKCkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQnVm
ZmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRp
b0J1ZmZlci5oCShyZXZpc2lvbiAyNzEzNjgpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmF1ZGlvL0F1ZGlvQnVmZmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTc1LDcgKzc1LDggQEAgcHVi
bGljOgogCiAgICAgc2l6ZV90IG1lbW9yeUNvc3QoKSBjb25zdDsKIAotICAgIHZvaWQgdmlzaXRD
aGFubmVsV3JhcHBlcnMoSlNDOjpTbG90VmlzaXRvciYpOworLy8gICAgdm9pZCB2aXNpdENoYW5u
ZWxXcmFwcGVycyhKU0M6OlNsb3RWaXNpdG9yJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlz
aXRvcj4gdm9pZCB2aXNpdENoYW5uZWxXcmFwcGVycyhWaXNpdG9yJik7CiAgICAgCiBwcml2YXRl
OgogICAgIEF1ZGlvQnVmZmVyKHVuc2lnbmVkIG51bWJlck9mQ2hhbm5lbHMsIHNpemVfdCBsZW5n
dGgsIGZsb2F0IHNhbXBsZVJhdGUsIExlZ2FjeVByZXZlbnREZXRhY2hpbmcgPSBMZWdhY3lQcmV2
ZW50RGV0YWNoaW5nOjpObyk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9ET01H
Q091dHB1dENvbnN0cmFpbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0RPTUdDT3V0cHV0Q29uc3RyYWludC5jcHAJKHJldmlzaW9uIDI3MTM2OCkKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0RPTUdDT3V0cHV0Q29uc3RyYWludC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQ5LDcgKzQ5LDcgQEAgRE9NR0NPdXRwdXRDb25zdHJhaW50Ojp+RE9NR0NP
dXRwdXRDb25zdAogewogfQogCi12b2lkIERPTUdDT3V0cHV0Q29uc3RyYWludDo6ZXhlY3V0ZUlt
cGwoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIERPTUdDT3V0cHV0Q29uc3RyYWludDo6ZXhl
Y3V0ZUltcGwoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBIZWFwJiBoZWFw
ID0gbV92bS5oZWFwOwogICAgIApAQCAtNjAsOCArNjAsOCBAQCB2b2lkIERPTUdDT3V0cHV0Q29u
c3RyYWludDo6ZXhlY3V0ZUltcGwoCiAgICAgCiAgICAgbV9jbGllbnREYXRhLmZvckVhY2hPdXRw
dXRDb25zdHJhaW50U3BhY2UoCiAgICAgICAgIFsmXSAoU3Vic3BhY2UmIHN1YnNwYWNlKSB7Ci0g
ICAgICAgICAgICBhdXRvIGZ1bmMgPSBbXSAoU2xvdFZpc2l0b3ImIHZpc2l0b3IsIEhlYXBDZWxs
KiBoZWFwQ2VsbCwgSGVhcENlbGw6OktpbmQpIHsKLSAgICAgICAgICAgICAgICBTZXRSb290TWFy
a1JlYXNvblNjb3BlIHJvb3RTY29wZSh2aXNpdG9yLCBTbG90VmlzaXRvcjo6Um9vdE1hcmtSZWFz
b246OkRPTUdDT3V0cHV0KTsKKyAgICAgICAgICAgIGF1dG8gZnVuYyA9IFtdIChBYnN0cmFjdFNs
b3RWaXNpdG9yJiB2aXNpdG9yLCBIZWFwQ2VsbCogaGVhcENlbGwsIEhlYXBDZWxsOjpLaW5kKSB7
CisgICAgICAgICAgICAgICAgU2V0Um9vdE1hcmtSZWFzb25TY29wZSByb290U2NvcGUodmlzaXRv
ciwgQWJzdHJhY3RTbG90VmlzaXRvcjo6Um9vdE1hcmtSZWFzb246OkRPTUdDT3V0cHV0KTsKICAg
ICAgICAgICAgICAgICBKU0NlbGwqIGNlbGwgPSBzdGF0aWNfY2FzdDxKU0NlbGwqPihoZWFwQ2Vs
bCk7CiAgICAgICAgICAgICAgICAgY2VsbC0+bWV0aG9kVGFibGUodmlzaXRvci52bSgpKS0+dmlz
aXRPdXRwdXRDb25zdHJhaW50cyhjZWxsLCB2aXNpdG9yKTsKICAgICAgICAgICAgIH07CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9ET01HQ091dHB1dENvbnN0cmFpbnQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9ET01HQ091dHB1dENvbnN0cmFp
bnQuaAkocmV2aXNpb24gMjcxMzY4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvRE9N
R0NPdXRwdXRDb25zdHJhaW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDcgKzQyLDcgQEAgcHVi
bGljOgogICAgIH5ET01HQ091dHB1dENvbnN0cmFpbnQoKTsKICAgICAKIHByb3RlY3RlZDoKLSAg
ICB2b2lkIGV4ZWN1dGVJbXBsKEpTQzo6U2xvdFZpc2l0b3ImKSBvdmVycmlkZTsKKyAgICB2b2lk
IGV4ZWN1dGVJbXBsKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpIG92ZXJyaWRlOwogCiBwcml2
YXRlOgogICAgIEpTQzo6Vk0mIG1fdm07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0Fib3J0Q29udHJvbGxlckN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNBYm9ydENvbnRyb2xsZXJDdXN0b20uY3BwCShyZXZpc2lvbiAyNzEz
NjgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Fib3J0Q29udHJvbGxlckN1c3Rv
bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDkgKzI4LDE0IEBACiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAotdm9pZCBKU0Fib3J0Q29udHJvbGxlcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4o
SlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vdm9pZCBKU0Fib3J0Q29udHJvbGxlcjo6dmlz
aXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRl
PHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTQWJvcnRDb250cm9sbGVyOjp2aXNpdEFkZGl0aW9u
YWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9v
dCgmd3JhcHBlZCgpLnNpZ25hbCgpKTsKIH0KIAordGVtcGxhdGUgdm9pZCBKU0Fib3J0Q29udHJv
bGxlcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJik7
Cit0ZW1wbGF0ZSB2b2lkIEpTQWJvcnRDb250cm9sbGVyOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJl
bihKU0M6OlNsb3RWaXNpdG9yJik7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQWJvcnRTaWduYWxDdXN0b20uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQWJvcnRTaWduYWxDdXN0b20uY3Bw
CShyZXZpc2lvbiAyNzEzNjgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Fib3J0
U2lnbmFsQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNyArMjgsNyBAQAogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLWJvb2wgSlNBYm9ydFNpZ25hbE93bmVyOjppc1JlYWNoYWJsZUZy
b21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIEpT
Qzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCitib29sIEpTQWJv
cnRTaWduYWxPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlND
OjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0
b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCiB7CiAgICAgYXV0byYgYWJvcnRTaWduYWwgPSBKU0M6
OmpzQ2FzdDxKU0Fib3J0U2lnbmFsKj4oaGFuZGxlLnNsb3QoKS0+YXNDZWxsKCkpLT53cmFwcGVk
KCk7CiAgICAgaWYgKGFib3J0U2lnbmFsLmlzRmlyaW5nRXZlbnRMaXN0ZW5lcnMoKSkgewpJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNBdHRyQ3VzdG9tLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0F0dHJDdXN0b20uY3BwCShyZXZpc2lv
biAyNzEzNjgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0F0dHJDdXN0b20uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zMywxMCArMzMsMTUgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCi12b2lkIEpTQXR0cjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRv
ciYgdmlzaXRvcikKKy8vdm9pZCBKU0F0dHI6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBK
U0F0dHI6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAg
aWYgKEVsZW1lbnQqIGVsZW1lbnQgPSB3cmFwcGVkKCkub3duZXJFbGVtZW50KCkpCiAgICAgICAg
IHZpc2l0b3IuYWRkT3BhcXVlUm9vdChyb290KGVsZW1lbnQpKTsKIH0KIAordGVtcGxhdGUgdm9p
ZCBKU0F0dHI6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRv
ciYpOwordGVtcGxhdGUgdm9pZCBKU0F0dHI6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6
U2xvdFZpc2l0b3ImKTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNBdWRpb0J1ZmZlckN1c3RvbS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNBdWRpb0J1ZmZlckN1c3RvbS5jcHAJKHJldmlz
aW9uIDI3MTM2OCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXVkaW9CdWZmZXJD
dXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwxMSArMzEsMTYgQEAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKLXZvaWQgSlNBdWRpb0J1ZmZlcjo6dmlz
aXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3ZvaWQgSlNBdWRp
b0J1ZmZlcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0
ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0F1ZGlvQnVmZmVyOjp2aXNpdEFkZGl0
aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHdyYXBwZWQoKS52aXNpdENo
YW5uZWxXcmFwcGVycyh2aXNpdG9yKTsKIH0KIAordGVtcGxhdGUgdm9pZCBKU0F1ZGlvQnVmZmVy
Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0
ZSB2b2lkIEpTQXVkaW9CdWZmZXI6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9y
Jik7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShXRUJfQVVE
SU8pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0F1ZGlvVHJhY2tDdXN0b20u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXVkaW9UcmFj
a0N1c3RvbS5jcHAJKHJldmlzaW9uIDI3MTM2OCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTQXVkaW9UcmFja0N1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDExICszNSwx
NiBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAotdm9pZCBK
U0F1ZGlvVHJhY2s6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9y
KQorLy92b2lkIEpTQXVkaW9UcmFjazo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0
b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0F1ZGlvVHJh
Y2s6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgdmlz
aXRvci5hZGRPcGFxdWVSb290KHJvb3QoJndyYXBwZWQoKSkpOwogfQogCit0ZW1wbGF0ZSB2b2lk
IEpTQXVkaW9UcmFjazo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oQWJzdHJhY3RTbG90VmlzaXRv
ciYpOwordGVtcGxhdGUgdm9pZCBKU0F1ZGlvVHJhY2s6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVu
KFNsb3RWaXNpdG9yJik7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0F1ZGlvVHJhY2tMaXN0Q3VzdG9tLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0F1ZGlvVHJhY2tMaXN0
Q3VzdG9tLmNwcAkocmV2aXNpb24gMjcxMzY4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNBdWRpb1RyYWNrTGlzdEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDExICsz
NiwxNiBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAotdm9p
ZCBKU0F1ZGlvVHJhY2tMaXN0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYg
dmlzaXRvcikKKy8vdm9pZCBKU0F1ZGlvVHJhY2tMaXN0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJl
bihTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lk
IEpTQXVkaW9UcmFja0xpc3Q6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0
b3IpCiB7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHJvb3Qod3JhcHBlZCgpLmVsZW1lbnQo
KSkpOwogfQogCit0ZW1wbGF0ZSB2b2lkIEpTQXVkaW9UcmFja0xpc3Q6OnZpc2l0QWRkaXRpb25h
bENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNBdWRpb1Ry
YWNrTGlzdDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKKwogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTQXVkaW9Xb3JrbGV0UHJvY2Vzc29yQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0F1ZGlvV29ya2xldFByb2Nlc3NvckN1c3RvbS5jcHAJ
KHJldmlzaW9uIDI3MTM2OCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXVkaW9X
b3JrbGV0UHJvY2Vzc29yQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsOSBA
QAogbmFtZXNwYWNlIFdlYkNvcmUgewogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAotdm9pZCBKU0F1
ZGlvV29ya2xldFByb2Nlc3Nvcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3Im
IHZpc2l0b3IpCisvL3ZvaWQgSlNBdWRpb1dvcmtsZXRQcm9jZXNzb3I6OnZpc2l0QWRkaXRpb25h
bENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRv
cj4KK3ZvaWQgSlNBdWRpb1dvcmtsZXRQcm9jZXNzb3I6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVu
KFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0byYgcHJvY2Vzc29yID0gd3JhcHBlZCgpOwog
ICAgIHByb2Nlc3Nvci5qc0lucHV0c1dyYXBwZXIoKS52aXNpdCh2aXNpdG9yKTsKQEAgLTM5LDYg
KzQxLDkgQEAgdm9pZCBKU0F1ZGlvV29ya2xldFByb2Nlc3Nvcjo6dmlzaXRBZGRpdAogICAgIHBy
b2Nlc3Nvci5qc1BhcmFtVmFsdWVzV3JhcHBlcigpLnZpc2l0KHZpc2l0b3IpOwogfQogCit0ZW1w
bGF0ZSB2b2lkIEpTQXVkaW9Xb3JrbGV0UHJvY2Vzc29yOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJl
bihBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTQXVkaW9Xb3JrbGV0UHJv
Y2Vzc29yOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYpOworCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoV0VCX0FVRElPKQpJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDU1NSdWxlQ3VzdG9tLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NTU1J1bGVDdXN0b20uY3BwCShyZXZpc2lv
biAyNzEzNjgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NTU1J1bGVDdXN0b20u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MSwxMSArNTEsMTYgQEAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKLXZvaWQgSlNDU1NSdWxlOjp2aXNpdEFkZGl0aW9u
YWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vdm9pZCBKU0NTU1J1bGU6OnZpc2l0
QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5h
bWUgVmlzaXRvcj4KK3ZvaWQgSlNDU1NSdWxlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNp
dG9yJiB2aXNpdG9yKQogewogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChyb290KCZ3cmFwcGVk
KCkpKTsKIH0KIAordGVtcGxhdGUgdm9pZCBKU0NTU1J1bGU6OnZpc2l0QWRkaXRpb25hbENoaWxk
cmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNDU1NSdWxlOjp2aXNp
dEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYpOworCiBKU1ZhbHVlIHRvSlNOZXdseUNy
ZWF0ZWQoSlNHbG9iYWxPYmplY3QqLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBS
ZWY8Q1NTUnVsZT4mJiBydWxlKQogewogICAgIHN3aXRjaCAocnVsZS0+dHlwZSgpKSB7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NTU1J1bGVMaXN0Q3VzdG9tLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NTU1J1bGVMaXN0Q3VzdG9t
LmNwcAkocmV2aXNpb24gMjcxMzY4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlND
U1NSdWxlTGlzdEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDcgKzM2LDcgQEAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKLWJvb2wgSlNDU1NSdWxl
TGlzdE93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVu
a25vd24+IGhhbmRsZSwgdm9pZCosIFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiog
cmVhc29uKQorYm9vbCBKU0NTU1J1bGVMaXN0T3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJv
b3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgQWJzdHJhY3RTbG90
VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikKIHsKICAgICBKU0NTU1J1bGVM
aXN0KiBqc0NTU1J1bGVMaXN0ID0ganNDYXN0PEpTQ1NTUnVsZUxpc3QqPihoYW5kbGUuc2xvdCgp
LT5hc0NlbGwoKSk7CiAgICAgaWYgKCFqc0NTU1J1bGVMaXN0LT5oYXNDdXN0b21Qcm9wZXJ0aWVz
KGpzQ1NTUnVsZUxpc3QtPnZtKCkpKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNDU1NTdHlsZURlY2xhcmF0aW9uQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0NTU1N0eWxlRGVjbGFyYXRpb25DdXN0b20uY3BwCShyZXZpc2lv
biAyNzEzNjgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NTU1N0eWxlRGVjbGFy
YXRpb25DdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MSw5ICs1MSwxNCBAQCB2b2lkKiBy
b290KENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlKQogICAgIHJldHVybiBzdHlsZTsKIH0KIAot
dm9pZCBKU0NTU1N0eWxlRGVjbGFyYXRpb246OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQorLy92b2lkIEpTQ1NTU3R5bGVEZWNsYXJhdGlvbjo6dmlzaXRBZGRp
dGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPgordm9pZCBKU0NTU1N0eWxlRGVjbGFyYXRpb246OnZpc2l0QWRkaXRpb25hbENoaWxk
cmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHJvb3Qo
JndyYXBwZWQoKSkpOwogfQogCit0ZW1wbGF0ZSB2b2lkIEpTQ1NTU3R5bGVEZWNsYXJhdGlvbjo6
dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oQWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUg
dm9pZCBKU0NTU1N0eWxlRGVjbGFyYXRpb246OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RW
aXNpdG9yJik7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTQ2FsbGJhY2tEYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0NhbGxiYWNrRGF0YS5jcHAJKHJldmlzaW9uIDI3MTM2OCkKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2FsbGJhY2tEYXRhLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtOTUsMTIgKzk1LDE2IEBAIEpTVmFsdWUgSlNDYWxsYmFja0RhdGE6Omludm9rZUNh
bGxiYWNrKEoKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi12b2lkIEpTQ2FsbGJhY2tEYXRhV2Vh
azo6dmlzaXRKU0Z1bmN0aW9uKEpTQzo6U2xvdFZpc2l0b3ImIHZpc3RvcikKK3RlbXBsYXRlPHR5
cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTQ2FsbGJhY2tEYXRhV2Vhazo6dmlzaXRKU0Z1bmN0aW9u
KFZpc2l0b3ImIHZpc2l0b3IpCiB7Ci0gICAgdmlzdG9yLmFwcGVuZChtX2NhbGxiYWNrKTsKKyAg
ICB2aXNpdG9yLmFwcGVuZChtX2NhbGxiYWNrKTsKIH0KIAotYm9vbCBKU0NhbGxiYWNrRGF0YVdl
YWs6OldlYWtPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlND
OjpVbmtub3duPiwgdm9pZCogY29udGV4dCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNo
YXIqKiByZWFzb24pCit0ZW1wbGF0ZSB2b2lkIEpTQ2FsbGJhY2tEYXRhV2Vhazo6dmlzaXRKU0Z1
bmN0aW9uKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU0NhbGxi
YWNrRGF0YVdlYWs6OnZpc2l0SlNGdW5jdGlvbihKU0M6OlNsb3RWaXNpdG9yJik7CisKK2Jvb2wg
SlNDYWxsYmFja0RhdGFXZWFrOjpXZWFrT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3Rz
KEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIEFic3RyYWN0U2xvdFZp
c2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCiB7CiAgICAgaWYgKFVOTElLRUxZ
KHJlYXNvbikpCiAgICAgICAgICpyZWFzb24gPSAiQ29udGV4dCBpcyBvcGFxdWUgcm9vdCI7IC8v
IEZJWE1FOiB3aGF0IGlzIHRoZSBjb250ZXh0LgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNDYWxsYmFja0RhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0NhbGxiYWNrRGF0YS5oCShyZXZpc2lvbiAyNzEzNjgpCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0NhbGxiYWNrRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTMs
MTEgKzExMywxMiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBKU0NhbGxiYWNrRGF0YTo6aW52
b2tlQ2FsbGJhY2soKmdsb2JhbE9iamVjdCwgY2FsbGJhY2soKSwgdGhpc1ZhbHVlLCBhcmdzLCBj
YWxsYmFja1R5cGUsIGZ1bmN0aW9uTmFtZSwgcmV0dXJuZWRFeGNlcHRpb24pOwogICAgIH0KIAot
ICAgIHZvaWQgdmlzaXRKU0Z1bmN0aW9uKEpTQzo6U2xvdFZpc2l0b3ImKTsKKy8vICAgIHZvaWQg
dmlzaXRKU0Z1bmN0aW9uKEpTQzo6U2xvdFZpc2l0b3ImKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBWaXNpdG9yPiB2b2lkIHZpc2l0SlNGdW5jdGlvbihWaXNpdG9yJik7CiAKIHByaXZhdGU6CiAg
ICAgY2xhc3MgV2Vha093bmVyIDogcHVibGljIEpTQzo6V2Vha0hhbmRsZU93bmVyIHsKLSAgICAg
ICAgYm9vbCBpc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25v
d24+LCB2b2lkKiBjb250ZXh0LCBKU0M6OlNsb3RWaXNpdG9yJiwgY29uc3QgY2hhcioqKSBvdmVy
cmlkZTsKKyAgICAgICAgYm9vbCBpc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRs
ZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0LCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3Im
LCBjb25zdCBjaGFyKiopIG92ZXJyaWRlOwogICAgIH07CiAgICAgV2Vha093bmVyIG1fd2Vha093
bmVyOwogICAgIEpTQzo6V2VhazxKU0M6OkpTT2JqZWN0PiBtX2NhbGxiYWNrOwpJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRDdXN0b20u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcxMzY4KQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRDdXN0b20uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yNCw3ICsyNCw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAot
Ym9vbCBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRE93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFx
dWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIEpTQzo6U2xv
dFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCitib29sIEpTQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJET3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFu
ZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9y
JiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQogewogICAgIGlmIChVTkxJS0VMWShyZWFz
b24pKQogICAgICAgICAqcmVhc29uID0gIkNhbnZhcyBpcyBvcGFxdWUgcm9vdCI7CkBAIC0zNCw5
ICszNCwxNCBAQCBib29sIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJET3duZXI6OmlzCiAgICAg
cmV0dXJuIHZpc2l0b3IuY29udGFpbnNPcGFxdWVSb290KHJvb3QpOwogfQogCi12b2lkIEpTQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RW
aXNpdG9yJiB2aXNpdG9yKQorLy92b2lkIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjp2aXNp
dEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8
dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnZpc2l0
QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgdmlzaXRvci5hZGRP
cGFxdWVSb290KHJvb3Qod3JhcHBlZCgpLmNhbnZhcygpKSk7CiB9CiAKK3RlbXBsYXRlIHZvaWQg
SlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6
QWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU0NhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyRDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYpOworCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0N1c3RvbUV2ZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0N1c3RvbUV2ZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gMjcxMzY4KQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDdXN0b21FdmVudEN1c3RvbS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQyLDEwICs0MiwxNSBAQCBKU0M6OkpTVmFsdWUgSlNDdXN0b21FdmVudDo6ZGV0
YWlsKEpTQzo6CiAgICAgfSk7CiB9CiAKLXZvaWQgSlNDdXN0b21FdmVudDo6dmlzaXRBZGRpdGlv
bmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vdm9pZCBKU0N1c3RvbUV2
ZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQor
dGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNDdXN0b21FdmVudDo6dmlzaXRBZGRp
dGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB3cmFwcGVkKCkuZGV0YWls
KCkudmlzaXQodmlzaXRvcik7CiAgICAgd3JhcHBlZCgpLmNhY2hlZERldGFpbCgpLnZpc2l0KHZp
c2l0b3IpOwogfQogCit0ZW1wbGF0ZSB2b2lkIEpTQ3VzdG9tRXZlbnQ6OnZpc2l0QWRkaXRpb25h
bENoaWxkcmVuKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU0N1
c3RvbUV2ZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJik7CisK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTRE9NQnVpbHRpbkNvbnN0cnVjdG9yQmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNET01CdWlsdGluQ29uc3RydWN0b3JCYXNlLmNwcAkocmV2aXNp
b24gMjcxMzY4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CdWlsdGluQ29u
c3RydWN0b3JCYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUsNyArNDUsOCBAQCB2b2lkIEpT
RE9NQnVpbHRpbkNvbnN0cnVjdG9yQmFzZTo6Y2FsbEZ1CiAgICAgSlNDOjpjYWxsKCZsZXhpY2Fs
R2xvYmFsT2JqZWN0LCAmZnVuY3Rpb24sIGNhbGxEYXRhLCAmdGhpc09iamVjdCwgYXJndW1lbnRz
KTsKIH0KIAotdm9pZCBKU0RPTUJ1aWx0aW5Db25zdHJ1Y3RvckJhc2U6OnZpc2l0Q2hpbGRyZW4o
SlNDOjpKU0NlbGwqIGNlbGwsIEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0
eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0RPTUJ1aWx0aW5Db25zdHJ1Y3RvckJhc2U6OnZpc2l0
Q2hpbGRyZW5JbXBsKEpTQzo6SlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAg
IGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNET01CdWlsdGluQ29uc3RydWN0b3JCYXNlKj4o
Y2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkp
OwpAQCAtNTMsNiArNTQsOCBAQCB2b2lkIEpTRE9NQnVpbHRpbkNvbnN0cnVjdG9yQmFzZTo6dmlz
aXRDCiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9pbml0aWFsaXplRnVuY3Rpb24p
OwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNET01CdWlsdGluQ29uc3RydWN0b3JCYXNl
KTsKKwogSlNDOjpJc29TdWJzcGFjZSogSlNET01CdWlsdGluQ29uc3RydWN0b3JCYXNlOjpzdWJz
cGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCiB7CiAgICAgcmV0dXJuICZzdGF0aWNfY2FzdDxKU1ZN
Q2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpLT5kb21CdWlsdGluQ29uc3RydWN0b3JTcGFjZSgp
OwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CdWlsdGluQ29uc3RydWN0
b3JCYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01C
dWlsdGluQ29uc3RydWN0b3JCYXNlLmgJKHJldmlzaW9uIDI3MTM2OCkKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTRE9NQnVpbHRpbkNvbnN0cnVjdG9yQmFzZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC00Miw3ICs0Miw3IEBAIHByb3RlY3RlZDoKICAgICB7CiAgICAgfQogCi0gICAgc3Rh
dGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKTsK
KyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgSlNDOjpKU0Z1bmN0aW9uKiBpbml0
aWFsaXplRnVuY3Rpb24oKTsKICAgICB2b2lkIHNldEluaXRpYWxpemVGdW5jdGlvbihKU0M6OlZN
JiwgSlNDOjpKU0Z1bmN0aW9uJik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0RPTUdsb2JhbE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNET01HbG9iYWxPYmplY3QuY3BwCShyZXZpc2lvbiAyNzEzNjgpCisrKyBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTIzNSw3ICsyMzUsOCBAQCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBKU0RPTUdsb2JhbE9i
amVjCiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLXZvaWQgSlNET01HbG9iYWxPYmplY3Q6OnZp
c2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRl
PHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTRE9NR2xvYmFsT2JqZWN0Ojp2aXNpdENoaWxkcmVu
SW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNET01HbG9iYWxP
YmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihjZWxsKTsKICAg
ICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC0yNTcs
NiArMjU4LDggQEAgdm9pZCBKU0RPTUdsb2JhbE9iamVjdDo6dmlzaXRDaGlsZHJlbihKUwogICAg
IHRoaXNPYmplY3QtPm1fYnVpbHRpbkludGVybmFsRnVuY3Rpb25zLnZpc2l0KHZpc2l0b3IpOwog
fQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNET01HbG9iYWxPYmplY3QpOworCiB2b2lkIEpT
RE9NR2xvYmFsT2JqZWN0Ojpwcm9taXNlUmVqZWN0aW9uVHJhY2tlcihKU0dsb2JhbE9iamVjdCog
anNHbG9iYWxPYmplY3QsIEpTUHJvbWlzZSogcHJvbWlzZSwgSlNQcm9taXNlUmVqZWN0aW9uT3Bl
cmF0aW9uIG9wZXJhdGlvbikKIHsKICAgICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3Jn
L211bHRpcGFnZS93ZWJhcHBhcGlzLmh0bWwjdGhlLWhvc3Rwcm9taXNlcmVqZWN0aW9udHJhY2tl
ci1pbXBsZW1lbnRhdGlvbgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01H
bG9iYWxPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0RPTUdsb2JhbE9iamVjdC5oCShyZXZpc2lvbiAyNzEzNjgpCisrKyBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC02OSw3ICs2
OSw3IEBAIHB1YmxpYzoKICAgICAvLyBNYWtlIGJpbmRpbmcgY29kZSBnZW5lcmF0aW9uIGVhc2ll
ci4KICAgICBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KCkgeyByZXR1cm4gdGhpczsg
fQogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0M6OkpTQ2VsbCosIEpTQzo6U2xv
dFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgRE9NV3JhcHBl
cldvcmxkJiB3b3JsZCgpIHsgcmV0dXJuIG1fd29ybGQuZ2V0KCk7IH0KICAgICBib29sIHdvcmxk
SXNOb3JtYWwoKSBjb25zdCB7IHJldHVybiBtX3dvcmxkSXNOb3JtYWw7IH0KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR3VhcmRlZE9iamVjdC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR3VhcmRlZE9iamVjdC5oCShyZXZpc2lv
biAyNzEzNjgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUd1YXJkZWRPYmpl
Y3QuaAkod29ya2luZyBjb3B5KQpAQCAtNDAsNyArNDAsOCBAQCBwdWJsaWM6CiAKICAgICBib29s
IGlzU3VzcGVuZGVkKCkgY29uc3QgeyByZXR1cm4gIW1fZ3VhcmRlZCB8fCAhY2FuSW52b2tlQ2Fs
bGJhY2soKTsgfSAvLyBUaGUgd3JhcHBlciB3b3JsZCBoYXMgZ29uZSBhd2F5IG9yIGFjdGl2ZSBE
T00gb2JqZWN0cyBoYXZlIGJlZW4gc3VzcGVuZGVkLgogCi0gICAgdm9pZCB2aXNpdEFnZ3JlZ2F0
ZShKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKSB7IHZpc2l0b3IuYXBwZW5kKG1fZ3VhcmRlZCk7
IH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgorICAgIHZvaWQgdmlzaXRBZ2dyZWdh
dGUoVmlzaXRvciYgdmlzaXRvcikgeyB2aXNpdG9yLmFwcGVuZChtX2d1YXJkZWQpOyB9CiAKICAg
ICBKU0M6OkpTVmFsdWUgZ3VhcmRlZE9iamVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fZ3VhcmRlZC5n
ZXQoKTsgfQogICAgIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QoKSBjb25zdCB7IHJl
dHVybiBtX2dsb2JhbE9iamVjdC5nZXQoKTsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNET01RdWFkQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0RPTVF1YWRDdXN0b20uY3BwCShyZXZpc2lvbiAyNzEzNjgpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVF1YWRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zMyw3ICszMyw5IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2Ug
SlNDOwogCi12b2lkIEpTRE9NUXVhZDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0
b3ImIHZpc2l0b3IpCisvL3ZvaWQgSlNET01RdWFkOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihT
bG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpT
RE9NUXVhZDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAg
ICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QoY29uc3RfY2FzdDxET01Qb2ludCo+KCZ3cmFwcGVkKCku
cDEoKSkpOwogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChjb25zdF9jYXN0PERPTVBvaW50Kj4o
JndyYXBwZWQoKS5wMigpKSk7CkBAIC00MSw0ICs0Myw3IEBAIHZvaWQgSlNET01RdWFkOjp2aXNp
dEFkZGl0aW9uYWxDaGlsZHJlbigKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QoY29uc3RfY2Fz
dDxET01Qb2ludCo+KCZ3cmFwcGVkKCkucDQoKSkpOwogfQogCi19Cit0ZW1wbGF0ZSB2b2lkIEpT
RE9NUXVhZDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oQWJzdHJhY3RTbG90VmlzaXRvciYpOwor
dGVtcGxhdGUgdm9pZCBKU0RPTVF1YWQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNp
dG9yJik7CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTRE9NV2luZG93Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0N1c3RvbS5jcHAJKHJldmlzaW9uIDI3MTM2OCkK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93Q3VzdG9tLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTE2LDcgKzExNiw5IEBAIEpTQ19ERUZJTkVfQ1VTVE9NX0dFVFRFUihq
c0RPTVdpbmRvd0luc3QKICAgICByZXR1cm4gbm9uQ2FjaGluZ1N0YXRpY0Z1bmN0aW9uR2V0dGVy
SW1wbDxqc0RPTVdpbmRvd0luc3RhbmNlRnVuY3Rpb25fcG9zdE1lc3NhZ2UsIDI+KGdsb2JhbE9i
amVjdCwgcHJvcGVydHlOYW1lKTsKIH0KIAotdm9pZCBKU0RPTVdpbmRvdzo6dmlzaXRBZGRpdGlv
bmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3ZvaWQgSlNET01XaW5kb3c6OnZp
c2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlw
ZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNET01XaW5kb3c6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVu
KFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgaWYgKEZyYW1lKiBmcmFtZSA9IHdyYXBwZWQoKS5m
cmFtZSgpKQogICAgICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QoZnJhbWUpOwpAQCAtMTI5LDYg
KzEzMSw5IEBAIHZvaWQgSlNET01XaW5kb3c6OnZpc2l0QWRkaXRpb25hbENoaWxkcmUKICAgICB3
cmFwcGVkKCkudmlzaXRKU0V2ZW50TGlzdGVuZXJzKHZpc2l0b3IpOwogfQogCit0ZW1wbGF0ZSB2
b2lkIEpTRE9NV2luZG93Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihBYnN0cmFjdFNsb3RWaXNp
dG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTRE9NV2luZG93Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJl
bihTbG90VmlzaXRvciYpOworCiAjaWYgRU5BQkxFKFVTRVJfTUVTU0FHRV9IQU5ETEVSUykKIEpT
Q19ERUZJTkVfQ1VTVE9NX0dFVFRFUihqc0RPTVdpbmRvd193ZWJraXQsIChKU0dsb2JhbE9iamVj
dCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0
eU5hbWUpKQogewpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNEZXByZWNhdGVk
Q1NTT01WYWx1ZUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNEZXByZWNhdGVkQ1NTT01WYWx1ZUN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MTM2OCkK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGVwcmVjYXRlZENTU09NVmFsdWVDdXN0
b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw3ICszNSw3IEBACiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCi1ib29sIEpTRGVwcmVjYXRlZENTU09NVmFsdWVP
d25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3du
PiBoYW5kbGUsIHZvaWQqLCBTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNv
bikKK2Jvb2wgSlNEZXByZWNhdGVkQ1NTT01WYWx1ZU93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFx
dWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIEFic3RyYWN0
U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCiB7CiAgICAgSlNEZXBy
ZWNhdGVkQ1NTT01WYWx1ZSoganNDU1NWYWx1ZSA9IGpzQ2FzdDxKU0RlcHJlY2F0ZWRDU1NPTVZh
bHVlKj4oaGFuZGxlLnNsb3QoKS0+YXNDZWxsKCkpOwogICAgIGlmICghanNDU1NWYWx1ZS0+aGFz
Q3VzdG9tUHJvcGVydGllcyhqc0NTU1ZhbHVlLT52bSgpKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTRG9jdW1lbnRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTRG9jdW1lbnRDdXN0b20uY3BwCShyZXZpc2lvbiAyNzEzNjgp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RvY3VtZW50Q3VzdG9tLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtOTEsMTEgKzkxLDE2IEBAIEpTVmFsdWUgdG9KUyhKU0dsb2JhbE9iamVj
dCogbGV4aWNhbEdsb2IKICAgICByZXR1cm4gdG9KU05ld2x5Q3JlYXRlZChsZXhpY2FsR2xvYmFs
T2JqZWN0LCBnbG9iYWxPYmplY3QsIFJlZjxEb2N1bWVudD4oZG9jdW1lbnQpKTsKIH0KIAotdm9p
ZCBKU0RvY3VtZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRv
cikKKy8vdm9pZCBKU0RvY3VtZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRv
ciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTRG9jdW1lbnQ6
OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgdmlzaXRv
ci5hZGRPcGFxdWVSb290KHN0YXRpY19jYXN0PFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqPigmd3Jh
cHBlZCgpKSk7CiB9CiAKK3RlbXBsYXRlIHZvaWQgSlNEb2N1bWVudDo6dmlzaXRBZGRpdGlvbmFs
Q2hpbGRyZW4oQWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU0RvY3VtZW50
Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYpOworCiB2b2lkIEpTRG9jdW1l
bnQ6OmFuYWx5emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFuYWx5emVyJiBhbmFseXplcikKIHsK
ICAgICBCYXNlOjphbmFseXplSGVhcChjZWxsLCBhbmFseXplcik7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0Vycm9yRXZlbnRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXJyb3JFdmVudEN1c3RvbS5jcHAJKHJldmlzaW9u
IDI3MTM2OCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXJyb3JFdmVudEN1c3Rv
bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDkgKzI4LDE0IEBACiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAotdm9pZCBKU0Vycm9yRXZlbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3ZvaWQgSlNFcnJvckV2ZW50Ojp2aXNpdEFkZGl0aW9u
YWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUg
VmlzaXRvcj4KK3ZvaWQgSlNFcnJvckV2ZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNp
dG9yJiB2aXNpdG9yKQogewogICAgIHdyYXBwZWQoKS5vcmlnaW5hbEVycm9yKCkudmlzaXQodmlz
aXRvcik7CiB9CiAKK3RlbXBsYXRlIHZvaWQgSlNFcnJvckV2ZW50Ojp2aXNpdEFkZGl0aW9uYWxD
aGlsZHJlbihKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNFcnJv
ckV2ZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJik7CisKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
RXZlbnRMaXN0ZW5lci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNFdmVudExpc3RlbmVyLmNwcAkocmV2aXNpb24gMjcxMzY4KQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNFdmVudExpc3RlbmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzgs
NyArNzgsOCBAQCBKU09iamVjdCogSlNFdmVudExpc3RlbmVyOjppbml0aWFsaXplSlNGCiAgICAg
cmV0dXJuIG51bGxwdHI7CiB9CiAKLXZvaWQgSlNFdmVudExpc3RlbmVyOjp2aXNpdEpTRnVuY3Rp
b24oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3ZvaWQgSlNFdmVudExpc3RlbmVyOjp2aXNpdEpT
RnVuY3Rpb24oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIEpTRXZlbnRMaXN0ZW5lcjo6dmlz
aXRKU0Z1bmN0aW9uKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgLy8gSWYg
bV93cmFwcGVyIGlzIG51bGwsIHdlIGFyZSBub3Qga2VlcGluZyBtX2pzRnVuY3Rpb24gYWxpdmUu
CiAgICAgaWYgKCFtX3dyYXBwZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0V2ZW50TGlzdGVuZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0V2ZW50TGlzdGVuZXIuaAkocmV2aXNpb24gMjcxMzY4KQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNFdmVudExpc3RlbmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTYyLDcgKzYy
LDggQEAgcHVibGljOgogCiBwcml2YXRlOgogICAgIHZpcnR1YWwgSlNDOjpKU09iamVjdCogaW5p
dGlhbGl6ZUpTRnVuY3Rpb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYpIGNvbnN0OwotICAgIHZv
aWQgdmlzaXRKU0Z1bmN0aW9uKEpTQzo6U2xvdFZpc2l0b3ImKSBmaW5hbDsKKy8vICAgIHZvaWQg
dmlzaXRKU0Z1bmN0aW9uKEpTQzo6U2xvdFZpc2l0b3ImKSBmaW5hbDsKKyAgICB2b2lkIHZpc2l0
SlNGdW5jdGlvbihKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKSBmaW5hbDsKIAogcHJvdGVjdGVk
OgogICAgIEpTRXZlbnRMaXN0ZW5lcihKU0M6OkpTT2JqZWN0KiBmdW5jdGlvbiwgSlNDOjpKU09i
amVjdCogd3JhcHBlciwgYm9vbCBpc0F0dHJpYnV0ZSwgRE9NV3JhcHBlcldvcmxkJik7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50VGFyZ2V0Q3VzdG9tLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50VGFyZ2V0Q3VzdG9t
LmNwcAkocmV2aXNpb24gMjcxMzY4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNF
dmVudFRhcmdldEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcyLDkgKzcyLDE0IEBAIHN0
ZDo6dW5pcXVlX3B0cjxKU0V2ZW50VGFyZ2V0V3JhcHBlcj4ganMKICAgICByZXR1cm4gbnVsbHB0
cjsKIH0KIAotdm9pZCBKU0V2ZW50VGFyZ2V0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90
VmlzaXRvciYgdmlzaXRvcikKKy8vdm9pZCBKU0V2ZW50VGFyZ2V0Ojp2aXNpdEFkZGl0aW9uYWxD
aGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+
Cit2b2lkIEpTRXZlbnRUYXJnZXQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZp
c2l0b3IpCiB7CiAgICAgd3JhcHBlZCgpLnZpc2l0SlNFdmVudExpc3RlbmVycyh2aXNpdG9yKTsK
IH0KIAordGVtcGxhdGUgdm9pZCBKU0V2ZW50VGFyZ2V0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJl
bihBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTRXZlbnRUYXJnZXQ6OnZp
c2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CisKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRmV0Y2hFdmVudEN1c3Rv
bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNGZXRjaEV2
ZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gMjcxMzY4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNGZXRjaEV2ZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsMTEgKzMw
LDE2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBKU0ZldGNoRXZlbnQ6OnZpc2l0
QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3ZvaWQgSlNG
ZXRjaEV2ZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNp
dG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNGZXRjaEV2ZW50Ojp2aXNp
dEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHZpc2l0b3IuYWRk
T3BhcXVlUm9vdCgmd3JhcHBlZCgpLnJlcXVlc3QoKSk7CiB9CiAKLX0KK3RlbXBsYXRlIHZvaWQg
SlNGZXRjaEV2ZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OkFic3RyYWN0U2xvdFZp
c2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNGZXRjaEV2ZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGls
ZHJlbihKU0M6OlNsb3RWaXNpdG9yJik7CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2Vu
ZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxDYW52YXNFbGVtZW50
Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hU
TUxDYW52YXNFbGVtZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gMjcxMzY4KQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNIVE1MQ2FudmFzRWxlbWVudEN1c3RvbS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTMxLDkgKzMxLDE0IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBK
U0hUTUxDYW52YXNFbGVtZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNp
dG9yJiB2aXNpdG9yKQorLy92b2lkIEpTSFRNTENhbnZhc0VsZW1lbnQ6OnZpc2l0QWRkaXRpb25h
bENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPgordm9pZCBKU0hUTUxDYW52YXNFbGVtZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJl
bihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChzdGF0aWNf
Y2FzdDxDYW52YXNCYXNlKj4oJndyYXBwZWQoKSkpOwogfQogCit0ZW1wbGF0ZSB2b2lkIEpTSFRN
TENhbnZhc0VsZW1lbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6QWJzdHJhY3RTbG90
VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU0hUTUxDYW52YXNFbGVtZW50Ojp2aXNpdEFkZGl0
aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJik7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTFRlbXBsYXRlRWxlbWVu
dEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNI
VE1MVGVtcGxhdGVFbGVtZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gMjcxMzY4KQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MVGVtcGxhdGVFbGVtZW50Q3VzdG9tLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzcsMTAgKzM3LDE1IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2lu
ZyBuYW1lc3BhY2UgSlNDOwogCi12b2lkIEpTSFRNTFRlbXBsYXRlRWxlbWVudDo6dmlzaXRBZGRp
dGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vdm9pZCBKU0hUTUxU
ZW1wbGF0ZUVsZW1lbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3Im
IHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0hUTUxUZW1wbGF0
ZUVsZW1lbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAg
ICAgaWYgKGF1dG8qIGNvbnRlbnQgPSB3cmFwcGVkKCkuY29udGVudElmQXZhaWxhYmxlKCkpCiAg
ICAgICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChyb290KGNvbnRlbnQpKTsKIH0KIAordGVtcGxh
dGUgdm9pZCBKU0hUTUxUZW1wbGF0ZUVsZW1lbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpT
Qzo6QWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU0hUTUxUZW1wbGF0ZUVs
ZW1lbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImKTsKKwogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNI
aXN0b3J5Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0hpc3RvcnlDdXN0b20uY3BwCShyZXZpc2lvbiAyNzEzNjgpCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0hpc3RvcnlDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NCw5
ICs0NCwxNCBAQCBKU1ZhbHVlIEpTSGlzdG9yeTo6c3RhdGUoSlNHbG9iYWxPYmplY3QmCiAgICAg
fSk7CiB9CiAKLXZvaWQgSlNIaXN0b3J5Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90Vmlz
aXRvciYgdmlzaXRvcikKKy8vdm9pZCBKU0hpc3Rvcnk6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVu
KFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQg
SlNIaXN0b3J5Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewog
ICAgIHdyYXBwZWQoKS5jYWNoZWRTdGF0ZUZvckdDKCkudmlzaXQodmlzaXRvcik7CiB9CiAKK3Rl
bXBsYXRlIHZvaWQgSlNIaXN0b3J5Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihBYnN0cmFjdFNs
b3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTSGlzdG9yeTo6dmlzaXRBZGRpdGlvbmFsQ2hp
bGRyZW4oU2xvdFZpc2l0b3ImKTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJDdXJzb3JDdXN0b20uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCQ3Vyc29yQ3VzdG9tLmNwcAkocmV2
aXNpb24gMjcxMzY4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJDdXJzb3JD
dXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MCw3ICs1MCw5IEBAIEpTQzo6SlNWYWx1ZSBK
U0lEQkN1cnNvcjo6cHJpbWFyeUtleShKU0MKICAgICB9KTsKIH0KIAotdm9pZCBKU0lEQkN1cnNv
cjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3ZvaWQg
SlNJREJDdXJzb3I6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9y
KQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNJREJDdXJzb3I6OnZpc2l0QWRk
aXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0byYgY3Vyc29yID0g
d3JhcHBlZCgpOwogICAgIGlmIChhdXRvKiByZXF1ZXN0ID0gY3Vyc29yLnJlcXVlc3QoKSkKQEAg
LTU5LDYgKzYxLDkgQEAgdm9pZCBKU0lEQkN1cnNvcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZQog
ICAgIGN1cnNvci5wcmltYXJ5S2V5V3JhcHBlcigpLnZpc2l0KHZpc2l0b3IpOwogfQogCit0ZW1w
bGF0ZSB2b2lkIEpTSURCQ3Vyc29yOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihBYnN0cmFjdFNs
b3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTSURCQ3Vyc29yOjp2aXNpdEFkZGl0aW9uYWxD
aGlsZHJlbihTbG90VmlzaXRvciYpOworCiBKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpK
U0dsb2JhbE9iamVjdCosIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZjxJREJD
dXJzb3I+JiYgY3Vyc29yKQogewogICAgIGlmIChpczxJREJDdXJzb3JXaXRoVmFsdWU+KGN1cnNv
cikpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQkN1cnNvcldpdGhWYWx1
ZUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJ
REJDdXJzb3JXaXRoVmFsdWVDdXN0b20uY3BwCShyZXZpc2lvbiAyNzEzNjgpCisrKyBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQkN1cnNvcldpdGhWYWx1ZUN1c3RvbS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQzLDEyICs0MywxNyBAQCBKU0M6OkpTVmFsdWUgSlNJREJDdXJzb3JXaXRo
VmFsdWU6OnZhbHVlCiAgICAgfSk7CiB9CiAKLXZvaWQgSlNJREJDdXJzb3JXaXRoVmFsdWU6OnZp
c2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy92b2lkIEpTSURC
Q3Vyc29yV2l0aFZhbHVlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlz
aXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTSURCQ3Vyc29yV2l0aFZh
bHVlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpT
SURCQ3Vyc29yOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbih2aXNpdG9yKTsKICAgICB3cmFwcGVk
KCkudmFsdWVXcmFwcGVyKCkudmlzaXQodmlzaXRvcik7CiB9CiAKK3RlbXBsYXRlIHZvaWQgSlNJ
REJDdXJzb3JXaXRoVmFsdWU6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEFic3RyYWN0U2xvdFZp
c2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNJREJDdXJzb3JXaXRoVmFsdWU6OnZpc2l0QWRkaXRp
b25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAog
I2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQpJbmRleDogU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNJREJJbmRleEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNJREJJbmRleEN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MTM2OCkK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCSW5kZXhDdXN0b20uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNCwxMSArMzQsMTYgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5n
IG5hbWVzcGFjZSBKU0M7CiAKLXZvaWQgSlNJREJJbmRleDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRy
ZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3ZvaWQgSlNJREJJbmRleDo6dmlzaXRBZGRpdGlv
bmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNp
dG9yPgordm9pZCBKU0lEQkluZGV4Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2
aXNpdG9yKQogewogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChzdGF0aWNfY2FzdDxJREJJbmRl
eCY+KHdyYXBwZWQoKSkub2JqZWN0U3RvcmVBc09wYXF1ZVJvb3QoKSk7CiB9CiAKK3RlbXBsYXRl
IHZvaWQgSlNJREJJbmRleDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oQWJzdHJhY3RTbG90Vmlz
aXRvciYpOwordGVtcGxhdGUgdm9pZCBKU0lEQkluZGV4Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJl
bihTbG90VmlzaXRvciYpOworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBF
TkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTSURCT2JqZWN0U3RvcmVDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTSURCT2JqZWN0U3RvcmVDdXN0b20uY3BwCShyZXZpc2lvbiAyNzEzNjgp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQk9iamVjdFN0b3JlQ3VzdG9tLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzYsMTEgKzM2LDE2IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCi12b2lkIEpTSURCT2JqZWN0U3RvcmU6OnZpc2l0QWRk
aXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy92b2lkIEpTSURCT2JqZWN0
U3RvcmU6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVt
cGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNJREJPYmplY3RTdG9yZTo6dmlzaXRBZGRp
dGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBzdGF0aWNfY2FzdDxJREJP
YmplY3RTdG9yZSY+KHdyYXBwZWQoKSkudmlzaXRSZWZlcmVuY2VkSW5kZXhlcyh2aXNpdG9yKTsK
IH0KIAotfQordGVtcGxhdGUgdm9pZCBKU0lEQk9iamVjdFN0b3JlOjp2aXNpdEFkZGl0aW9uYWxD
aGlsZHJlbihBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTSURCT2JqZWN0
U3RvcmU6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0lEQlJlcXVlc3RDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTSURCUmVxdWVzdEN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MTM2OCkKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCUmVxdWVzdEN1c3RvbS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTg5LDEyICs4OSwxOCBAQCBKU0M6OkpTVmFsdWUgSlNJREJSZXF1ZXN0OjpyZXN1
bHQoSlNDOjpKCiAgICAgfSk7CiB9CiAKLXZvaWQgSlNJREJSZXF1ZXN0Ojp2aXNpdEFkZGl0aW9u
YWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vdm9pZCBKU0lEQlJlcXVlc3Q6OnZp
c2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlw
ZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNJREJSZXF1ZXN0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJl
bihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGF1dG8mIHJlcXVlc3QgPSB3cmFwcGVkKCk7CiAg
ICAgcmVxdWVzdC5yZXN1bHRXcmFwcGVyKCkudmlzaXQodmlzaXRvcik7CiAgICAgcmVxdWVzdC5j
dXJzb3JXcmFwcGVyKCkudmlzaXQodmlzaXRvcik7CiB9CiAKLX0KK3RlbXBsYXRlIHZvaWQgSlNJ
REJSZXF1ZXN0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihBYnN0cmFjdFNsb3RWaXNpdG9yJik7
Cit0ZW1wbGF0ZSB2b2lkIEpTSURCUmVxdWVzdDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xv
dFZpc2l0b3ImKTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCiAjZW5kaWYgLy8gRU5BQkxF
KElOREVYRURfREFUQUJBU0UpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lE
QlRyYW5zYWN0aW9uQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0lEQlRyYW5zYWN0aW9uQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcxMzY4KQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJUcmFuc2FjdGlvbkN1c3RvbS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM0LDExICszNCwxNiBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogdXNp
bmcgbmFtZXNwYWNlIEpTQzsKIAotdm9pZCBKU0lEQlRyYW5zYWN0aW9uOjp2aXNpdEFkZGl0aW9u
YWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vdm9pZCBKU0lEQlRyYW5zYWN0aW9u
Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRl
PHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTSURCVHJhbnNhY3Rpb246OnZpc2l0QWRkaXRpb25h
bENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgc3RhdGljX2Nhc3Q8SURCVHJhbnNh
Y3Rpb24mPih3cmFwcGVkKCkpLnZpc2l0UmVmZXJlbmNlZE9iamVjdFN0b3Jlcyh2aXNpdG9yKTsK
IH0KIAotfQordGVtcGxhdGUgdm9pZCBKU0lEQlRyYW5zYWN0aW9uOjp2aXNpdEFkZGl0aW9uYWxD
aGlsZHJlbihBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTSURCVHJhbnNh
Y3Rpb246OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0ludGVyc2VjdGlvbk9ic2VydmVyQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0ludGVyc2VjdGlvbk9ic2VydmVyQ3VzdG9tLmNwcAkocmV2
aXNpb24gMjcxMzY4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJbnRlcnNlY3Rp
b25PYnNlcnZlckN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDEwICszMCwxNSBAQAog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgSlNJbnRlcnNlY3Rpb25PYnNlcnZlcjo6dmlz
aXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vdm9pZCBK
U0ludGVyc2VjdGlvbk9ic2VydmVyOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RW
aXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNJbnRl
cnNlY3Rpb25PYnNlcnZlcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRv
cikKIHsKICAgICBpZiAoYXV0byogY2FsbGJhY2sgPSB3cmFwcGVkKCkuY2FsbGJhY2tDb25jdXJy
ZW50bHkoKSkKICAgICAgICAgY2FsbGJhY2stPnZpc2l0SlNGdW5jdGlvbih2aXNpdG9yKTsKIH0K
IAotfQordGVtcGxhdGUgdm9pZCBKU0ludGVyc2VjdGlvbk9ic2VydmVyOjp2aXNpdEFkZGl0aW9u
YWxDaGlsZHJlbihKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNJ
bnRlcnNlY3Rpb25PYnNlcnZlcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90Vmlz
aXRvciYpOworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0ludGVyc2VjdGlvbk9ic2VydmVyRW50cnlDdXN0b20uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW50ZXJzZWN0aW9uT2JzZXJ2ZXJF
bnRyeUN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MTM2OCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTSW50ZXJzZWN0aW9uT2JzZXJ2ZXJFbnRyeUN1c3RvbS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTMwLDcgKzMwLDkgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIEpTSW50
ZXJzZWN0aW9uT2JzZXJ2ZXJFbnRyeTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90
VmlzaXRvciYgdmlzaXRvcikKKy8vdm9pZCBKU0ludGVyc2VjdGlvbk9ic2VydmVyRW50cnk6OnZp
c2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0
ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0ludGVyc2VjdGlvbk9ic2VydmVyRW50cnk6OnZp
c2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgdmlzaXRvci5h
ZGRPcGFxdWVSb290KHJvb3Qod3JhcHBlZCgpLnRhcmdldCgpKSk7CiAgICAgdmlzaXRvci5hZGRP
cGFxdWVSb290KHdyYXBwZWQoKS5ib3VuZGluZ0NsaWVudFJlY3QoKSk7CkBAIC0zOCw0ICs0MCw3
IEBAIHZvaWQgSlNJbnRlcnNlY3Rpb25PYnNlcnZlckVudHJ5Ojp2aXNpdEEKICAgICB2aXNpdG9y
LmFkZE9wYXF1ZVJvb3Qod3JhcHBlZCgpLnJvb3RCb3VuZHMoKSk7CiB9CiAKLX0KK3RlbXBsYXRl
IHZvaWQgSlNJbnRlcnNlY3Rpb25PYnNlcnZlckVudHJ5Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJl
bihKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNJbnRlcnNlY3Rp
b25PYnNlcnZlckVudHJ5Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9y
Jik7CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTTWVzc2FnZUNoYW5uZWxDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWVzc2FnZUNoYW5uZWxDdXN0b20uY3BwCShyZXZpc2lvbiAy
NzEzNjgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01lc3NhZ2VDaGFubmVsQ3Vz
dG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNyArMzMsOSBAQAogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLXZvaWQgSlNNZXNzYWdlQ2hhbm5lbDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4o
SlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vdm9pZCBKU01lc3NhZ2VDaGFubmVsOjp2aXNp
dEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8
dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNNZXNzYWdlQ2hhbm5lbDo6dmlzaXRBZGRpdGlvbmFs
Q2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBpZiAoTWVzc2FnZVBvcnQqIHBvcnQg
PSB3cmFwcGVkKCkucG9ydDEoKSkKICAgICAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHBvcnQp
OwpAQCAtNDIsNiArNDQsOSBAQCB2b2lkIEpTTWVzc2FnZUNoYW5uZWw6OnZpc2l0QWRkaXRpb25h
bENoCiAgICAgICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChwb3J0KTsKIH0KIAordGVtcGxhdGUg
dm9pZCBKU01lc3NhZ2VDaGFubmVsOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OkFic3Ry
YWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNNZXNzYWdlQ2hhbm5lbDo6dmlzaXRB
ZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYpOworCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoQ0hBTk5FTF9NRVNTQUdJTkcpCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01lc3NhZ2VFdmVudEN1c3RvbS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNZXNzYWdlRXZlbnRDdXN0b20uY3Bw
CShyZXZpc2lvbiAyNzEzNjgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01lc3Nh
Z2VFdmVudEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcwLDcgKzcwLDkgQEAgSlNDOjpK
U1ZhbHVlIEpTTWVzc2FnZUV2ZW50OjpkYXRhKEpTQzo6SgogICAgIH0pOwogfQogCi12b2lkIEpT
TWVzc2FnZUV2ZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2
aXNpdG9yKQorLy92b2lkIEpTTWVzc2FnZUV2ZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihK
U0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3Zv
aWQgSlNNZXNzYWdlRXZlbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0
b3IpCiB7CiAgICAgV1RGOjpzd2l0Y2hPbih3cmFwcGVkKCkuZGF0YSgpLCBbJnZpc2l0b3JdIChj
b25zdCBKU1ZhbHVlSW5XcmFwcGVkT2JqZWN0JiBkYXRhKSB7CiAgICAgICAgIGRhdGEudmlzaXQo
dmlzaXRvcik7CkBAIC04NCw0ICs4Niw3IEBAIHZvaWQgSlNNZXNzYWdlRXZlbnQ6OnZpc2l0QWRk
aXRpb25hbENoaWwKICAgICB3cmFwcGVkKCkuY2FjaGVkUG9ydHMoKS52aXNpdCh2aXNpdG9yKTsK
IH0KIAordGVtcGxhdGUgdm9pZCBKU01lc3NhZ2VFdmVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRy
ZW4oSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTTWVzc2FnZUV2
ZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJik7CisKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWVz
c2FnZVBvcnRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTTWVzc2FnZVBvcnRDdXN0b20uY3BwCShyZXZpc2lvbiAyNzEzNjgpCisrKyBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU01lc3NhZ2VQb3J0Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzEsMTEgKzMxLDE2IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3Bh
Y2UgSlNDOwogCi12b2lkIEpTTWVzc2FnZVBvcnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQorLy92b2lkIEpTTWVzc2FnZVBvcnQ6OnZpc2l0QWRkaXRpb25h
bENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRv
cj4KK3ZvaWQgSlNNZXNzYWdlUG9ydDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYg
dmlzaXRvcikKIHsKICAgICAvLyBJZiB3ZSBoYXZlIGEgbG9jYWxseSBlbnRhbmdsZWQgcG9ydCwg
d2UgY2FuIGRpcmVjdGx5IG1hcmsgaXQgYXMgcmVhY2hhYmxlLiBQb3J0cyB0aGF0IGFyZSByZW1v
dGVseSBlbnRhbmdsZWQgYXJlIG1hcmtlZCBpbi11c2UgYnkgbWFya0FjdGl2ZU9iamVjdHNGb3JD
b250ZXh0KCkuCiAgICAgaWYgKE1lc3NhZ2VQb3J0KiBwb3J0ID0gd3JhcHBlZCgpLmxvY2FsbHlF
bnRhbmdsZWRQb3J0KCkpCiAgICAgICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChwb3J0KTsKIH0K
IAordGVtcGxhdGUgdm9pZCBKU01lc3NhZ2VQb3J0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihB
YnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTTWVzc2FnZVBvcnQ6OnZpc2l0
QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTXV0YXRpb25PYnNlcnZlckN1
c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNdXRh
dGlvbk9ic2VydmVyQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcxMzY4KQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNNdXRhdGlvbk9ic2VydmVyQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzksMTIgKzM5LDE3IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3Bh
Y2UgSlNDOwogCi12b2lkIEpTTXV0YXRpb25PYnNlcnZlcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRy
ZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vdm9pZCBKU011dGF0aW9uT2JzZXJ2ZXI6
OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1w
bGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU011dGF0aW9uT2JzZXJ2ZXI6OnZpc2l0QWRk
aXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgd3JhcHBlZCgpLmNhbGxi
YWNrKCkudmlzaXRKU0Z1bmN0aW9uKHZpc2l0b3IpOwogfQogCi1ib29sIEpTTXV0YXRpb25PYnNl
cnZlck93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVu
a25vd24+IGhhbmRsZSwgdm9pZCosIFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKipy
ZWFzb24pCit0ZW1wbGF0ZSB2b2lkIEpTTXV0YXRpb25PYnNlcnZlcjo6dmlzaXRBZGRpdGlvbmFs
Q2hpbGRyZW4oSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTTXV0
YXRpb25PYnNlcnZlcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYp
OworCitib29sIEpTTXV0YXRpb25PYnNlcnZlck93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVS
b290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIEFic3RyYWN0U2xv
dFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKnJlYXNvbikKIHsKICAgICBmb3IgKGF1dG8q
IG5vZGUgOiBqc0Nhc3Q8SlNNdXRhdGlvbk9ic2VydmVyKj4oaGFuZGxlLnNsb3QoKS0+YXNDZWxs
KCkpLT53cmFwcGVkKCkub2JzZXJ2ZWROb2RlcygpKSB7CiAgICAgICAgIGlmICh2aXNpdG9yLmNv
bnRhaW5zT3BhcXVlUm9vdChyb290KG5vZGUpKSkgewpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNNdXRhdGlvblJlY29yZEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNNdXRhdGlvblJlY29yZEN1c3RvbS5jcHAJKHJldmlzaW9u
IDI3MTM2OCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTXV0YXRpb25SZWNvcmRD
dXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw5ICszMCwxNCBAQAogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLXZvaWQgSlNNdXRhdGlvblJlY29yZDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRy
ZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vdm9pZCBKU011dGF0aW9uUmVjb3JkOjp2
aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxh
dGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNNdXRhdGlvblJlY29yZDo6dmlzaXRBZGRpdGlv
bmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB3cmFwcGVkKCkudmlzaXROb2Rl
c0NvbmN1cnJlbnRseSh2aXNpdG9yKTsKIH0KLSAgICAKKwordGVtcGxhdGUgdm9pZCBKU011dGF0
aW9uUmVjb3JkOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OkFic3RyYWN0U2xvdFZpc2l0
b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNNdXRhdGlvblJlY29yZDo6dmlzaXRBZGRpdGlvbmFsQ2hp
bGRyZW4oSlNDOjpTbG90VmlzaXRvciYpOworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05hdmlnYXRvckN1c3RvbS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOYXZpZ2F0b3JDdXN0b20uY3Bw
CShyZXZpc2lvbiAyNzEzNjgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05hdmln
YXRvckN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDExICszMiwxNiBAQAogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgSlNOYXZpZ2F0b3I6OnZpc2l0QWRkaXRpb25hbENoaWxk
cmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3ZvaWQgSlNOYXZpZ2F0b3I6OnZpc2l0
QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0
eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU05hdmlnYXRvcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRy
ZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qoc3RhdGlj
X2Nhc3Q8TmF2aWdhdG9yQmFzZSo+KCZ3cmFwcGVkKCkpKTsKIH0KIAordGVtcGxhdGUgdm9pZCBK
U05hdmlnYXRvcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpBYnN0cmFjdFNsb3RWaXNp
dG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTTmF2aWdhdG9yOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJl
bihKU0M6OlNsb3RWaXNpdG9yJik7CisKICNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQogSlNDOjpK
U1ZhbHVlIEpTTmF2aWdhdG9yOjpnZXRVc2VyTWVkaWEoSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4
aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpDYWxsRnJhbWUmIGNhbGxGcmFtZSkKIHsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcx
MzY4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlQ3VzdG9tLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNzQsNyArNzQsOCBAQCB1c2luZyBuYW1lc3BhY2UgSlNDOwogCiB1c2lu
ZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCi1zdGF0aWMgaW5saW5lIGJvb2wgaXNSZWFjaGFibGVG
cm9tRE9NKE5vZGUqIG5vZGUsIFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVh
c29uKQorLy9zdGF0aWMgaW5saW5lIGJvb2wgaXNSZWFjaGFibGVGcm9tRE9NKE5vZGUqIG5vZGUs
IFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQorc3RhdGljIGlubGlu
ZSBib29sIGlzUmVhY2hhYmxlRnJvbURPTShOb2RlKiBub2RlLCBBYnN0cmFjdFNsb3RWaXNpdG9y
JiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQogewogICAgIGlmICghbm9kZS0+aXNDb25u
ZWN0ZWQoKSkgewogICAgICAgICBpZiAoaXM8RWxlbWVudD4oKm5vZGUpKSB7CkBAIC0xMjMsNyAr
MTI0LDcgQEAgc3RhdGljIGlubGluZSBib29sIGlzUmVhY2hhYmxlRnJvbURPTShObwogICAgIHJl
dHVybiB2aXNpdG9yLmNvbnRhaW5zT3BhcXVlUm9vdChyb290KG5vZGUpKTsKIH0KIAotYm9vbCBK
U05vZGVPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpV
bmtub3duPiBoYW5kbGUsIHZvaWQqLCBTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioq
IHJlYXNvbikKK2Jvb2wgSlNOb2RlT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpT
Qzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgQWJzdHJhY3RTbG90VmlzaXRv
ciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikKIHsKICAgICBKU05vZGUqIGpzTm9kZSA9
IGpzQ2FzdDxKU05vZGUqPihoYW5kbGUuc2xvdCgpLT5hc0NlbGwoKSk7CiAgICAgcmV0dXJuIGlz
UmVhY2hhYmxlRnJvbURPTSgmanNOb2RlLT53cmFwcGVkKCksIHZpc2l0b3IsIHJlYXNvbik7CkBA
IC0xMzYsMTEgKzEzNywxNiBAQCBKU1Njb3BlKiBKU05vZGU6OnB1c2hFdmVudEhhbmRsZXJTY29w
ZShKCiAgICAgcmV0dXJuIG5vZGU7CiB9CiAKLXZvaWQgSlNOb2RlOjp2aXNpdEFkZGl0aW9uYWxD
aGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vdm9pZCBKU05vZGU6OnZpc2l0QWRkaXRp
b25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlz
aXRvcj4KK3ZvaWQgSlNOb2RlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNp
dG9yKQogewogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChyb290KHdyYXBwZWQoKSkpOwogfQog
Cit0ZW1wbGF0ZSB2b2lkIEpTTm9kZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oQWJzdHJhY3RT
bG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU05vZGU6OnZpc2l0QWRkaXRpb25hbENoaWxk
cmVuKFNsb3RWaXNpdG9yJik7CisKIHN0YXRpYyBBTFdBWVNfSU5MSU5FIEpTVmFsdWUgY3JlYXRl
V3JhcHBlcklubGluZShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNET01H
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmPE5vZGU+JiYgbm9kZSkKIHsKICAgICBBU1NF
UlQoIWdldENhY2hlZFdyYXBwZXIoZ2xvYmFsT2JqZWN0LT53b3JsZCgpLCBub2RlKSk7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVJdGVyYXRvckN1c3RvbS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlSXRlcmF0b3JDdXN0
b20uY3BwCShyZXZpc2lvbiAyNzEzNjgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U05vZGVJdGVyYXRvckN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1LDEwICsyNSwxNSBA
QAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgSlNOb2RlSXRlcmF0b3I6OnZpc2l0QWRk
aXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3ZvaWQgSlNOb2Rl
SXRlcmF0b3I6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0
b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU05vZGVJdGVyYXRvcjo6dmlz
aXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBpZiAoTm9kZUZp
bHRlciogZmlsdGVyID0gd3JhcHBlZCgpLmZpbHRlcigpKQogICAgICAgICB2aXNpdG9yLmFkZE9w
YXF1ZVJvb3QoZmlsdGVyKTsKIH0KIAotfQordGVtcGxhdGUgdm9pZCBKU05vZGVJdGVyYXRvcjo6
dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1w
bGF0ZSB2b2lkIEpTTm9kZUl0ZXJhdG9yOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNs
b3RWaXNpdG9yJik7CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTTm9kZUxpc3RDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUxpc3RDdXN0b20uY3BwCShyZXZpc2lvbiAyNzEz
NjgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVMaXN0Q3VzdG9tLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzcsNyArMzcsNyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogdXNp
bmcgbmFtZXNwYWNlIEpTQzsKIAotYm9vbCBKU05vZGVMaXN0T3duZXI6OmlzUmVhY2hhYmxlRnJv
bU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgU2xv
dFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCitib29sIEpTTm9kZUxpc3RP
d25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3du
PiBoYW5kbGUsIHZvaWQqLCBBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFy
KiogcmVhc29uKQogewogICAgIEpTTm9kZUxpc3QqIGpzTm9kZUxpc3QgPSBqc0Nhc3Q8SlNOb2Rl
TGlzdCo+KGhhbmRsZS5zbG90KCktPmFzQ2VsbCgpKTsKICAgICBpZiAoIWpzTm9kZUxpc3QtPmhh
c0N1c3RvbVByb3BlcnRpZXMoanNOb2RlTGlzdC0+dm0oKSkpCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU09mZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyREN1c3RvbS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNPZmZzY3JlZW5D
YW52YXNSZW5kZXJpbmdDb250ZXh0MkRDdXN0b20uY3BwCShyZXZpc2lvbiAyNzEzNjgpCisrKyBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU09mZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyREN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDcgQEAgaW5saW5lIHZv
aWQqIHJvb3QoT2Zmc2NyZWVuQ2FudmFzKiBjYW52YQogICAgIHJldHVybiBjYW52YXM7CiB9CiAK
LWJvb2wgSlNPZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRPd25lcjo6aXNSZWFjaGFi
bGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQq
LCBTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikKK2Jvb2wgSlNPZmZz
Y3JlZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVl
Um9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBBYnN0cmFjdFNs
b3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQogewogICAgIGlmIChVTkxJ
S0VMWShyZWFzb24pKQogICAgICAgICAqcmVhc29uID0gIkNhbnZhcyBpcyBvcGFxdWUgcm9vdCI7
CkBAIC00MSwxMSArNDEsMTYgQEAgYm9vbCBKU09mZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyRAogICAgIHJldHVybiB2aXNpdG9yLmNvbnRhaW5zT3BhcXVlUm9vdChyb290KTsKIH0KIAot
dm9pZCBKU09mZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6dmlzaXRBZGRpdGlvbmFs
Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3ZvaWQgSlNPZmZzY3JlZW5DYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNPZmZzY3JlZW5DYW52
YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZp
c2l0b3IpCiB7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHJvb3QoJndyYXBwZWQoKS5jYW52
YXMoKSkpOwogfQogCit0ZW1wbGF0ZSB2b2lkIEpTT2Zmc2NyZWVuQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0
ZW1wbGF0ZSB2b2lkIEpTT2Zmc2NyZWVuQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjp2aXNpdEFk
ZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYpOworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CiAKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNQYWludFJlbmRl
cmluZ0NvbnRleHQyREN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNQYWludFJlbmRlcmluZ0NvbnRleHQyREN1c3RvbS5jcHAJKHJldmlzaW9uIDI3
MTM2OCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUGFpbnRSZW5kZXJpbmdDb250
ZXh0MkRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3ICszNiw3IEBAIGlubGluZSB2
b2lkKiByb290KEN1c3RvbVBhaW50Q2FudmFzKiBjYW4KICAgICByZXR1cm4gY2FudmFzOwogfQog
Ci1ib29sIEpTUGFpbnRSZW5kZXJpbmdDb250ZXh0MkRPd25lcjo6aXNSZWFjaGFibGVGcm9tT3Bh
cXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBTbG90Vmlz
aXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikKK2Jvb2wgSlNQYWludFJlbmRlcmlu
Z0NvbnRleHQyRE93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxK
U0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3Is
IGNvbnN0IGNoYXIqKiByZWFzb24pCiB7CiAgICAgaWYgKFVOTElLRUxZKHJlYXNvbikpCiAgICAg
ICAgICpyZWFzb24gPSAiQ2FudmFzIGlzIG9wYXF1ZSByb290IjsKQEAgLTQ2LDExICs0NiwxNiBA
QCBib29sIEpTUGFpbnRSZW5kZXJpbmdDb250ZXh0MkRPd25lcjo6aXNSCiAgICAgcmV0dXJuIHZp
c2l0b3IuY29udGFpbnNPcGFxdWVSb290KHJvb3QpOwogfQogCi12b2lkIEpTUGFpbnRSZW5kZXJp
bmdDb250ZXh0MkQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9y
KQorLy92b2lkIEpTUGFpbnRSZW5kZXJpbmdDb250ZXh0MkQ6OnZpc2l0QWRkaXRpb25hbENoaWxk
cmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3Zv
aWQgSlNQYWludFJlbmRlcmluZ0NvbnRleHQyRDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlz
aXRvciYgdmlzaXRvcikKIHsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qocm9vdCgmd3JhcHBl
ZCgpLmNhbnZhcygpKSk7CiB9CiAKK3RlbXBsYXRlIHZvaWQgSlNQYWludFJlbmRlcmluZ0NvbnRl
eHQyRDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oQWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVt
cGxhdGUgdm9pZCBKU1BhaW50UmVuZGVyaW5nQ29udGV4dDJEOjp2aXNpdEFkZGl0aW9uYWxDaGls
ZHJlbihTbG90VmlzaXRvciYpOworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAjZW5kaWYKIApJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNQYWludFdvcmtsZXRHbG9iYWxTY29w
ZUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNQ
YWludFdvcmtsZXRHbG9iYWxTY29wZUN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MTM2OCkKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUGFpbnRXb3JrbGV0R2xvYmFsU2NvcGVDdXN0b20u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw5IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCi12b2lkIEpTUGFpbnRXb3JrbGV0R2xvYmFsU2NvcGU6
OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3Zv
aWQgSlNQYWludFdvcmtsZXRHbG9iYWxTY29wZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlND
OjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lk
IEpTUGFpbnRXb3JrbGV0R2xvYmFsU2NvcGU6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0
b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayh3cmFwcGVkKCkucGFp
bnREZWZpbml0aW9uTG9jaygpKTsKICAgICBmb3IgKGF1dG8mIHJlZ2lzdGVyZWQgOiB3cmFwcGVk
KCkucGFpbnREZWZpbml0aW9uTWFwKCkudmFsdWVzKCkpIHsKQEAgLTQwLDUgKzQyLDkgQEAgdm9p
ZCBKU1BhaW50V29ya2xldEdsb2JhbFNjb3BlOjp2aXNpdEFkZAogICAgIH0KIH0KIAotfQordGVt
cGxhdGUgdm9pZCBKU1BhaW50V29ya2xldEdsb2JhbFNjb3BlOjp2aXNpdEFkZGl0aW9uYWxDaGls
ZHJlbihKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNQYWludFdv
cmtsZXRHbG9iYWxTY29wZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRv
ciYpOworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKICNlbmRpZgpJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNQYXltZW50TWV0aG9kQ2hhbmdlRXZlbnRDdXN0b20uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUGF5bWVudE1ldGhvZENo
YW5nZUV2ZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gMjcxMzY4KQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNQYXltZW50TWV0aG9kQ2hhbmdlRXZlbnRDdXN0b20uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00MSw3ICs0MSw5IEBAIEpTQzo6SlNWYWx1ZSBKU1BheW1lbnRNZXRob2RDaGFu
Z2VFdmVudDoKICAgICB9KTsKIH0KIAotdm9pZCBKU1BheW1lbnRNZXRob2RDaGFuZ2VFdmVudDo6
dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vdm9p
ZCBKU1BheW1lbnRNZXRob2RDaGFuZ2VFdmVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlND
OjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lk
IEpTUGF5bWVudE1ldGhvZENoYW5nZUV2ZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNp
dG9yJiB2aXNpdG9yKQogewogICAgIFdURjo6c3dpdGNoT24od3JhcHBlZCgpLm1ldGhvZERldGFp
bHMoKSwgWyZ2aXNpdG9yXShjb25zdCBKU1ZhbHVlSW5XcmFwcGVkT2JqZWN0JiBtZXRob2REZXRh
aWxzKSB7CiAgICAgICAgIG1ldGhvZERldGFpbHMudmlzaXQodmlzaXRvcik7CkBAIC01MSw2ICs1
Myw5IEBAIHZvaWQgSlNQYXltZW50TWV0aG9kQ2hhbmdlRXZlbnQ6OnZpc2l0QWQKICAgICB3cmFw
cGVkKCkuY2FjaGVkTWV0aG9kRGV0YWlscygpLnZpc2l0KHZpc2l0b3IpOwogfQogCit0ZW1wbGF0
ZSB2b2lkIEpTUGF5bWVudE1ldGhvZENoYW5nZUV2ZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJl
bihKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNQYXltZW50TWV0
aG9kQ2hhbmdlRXZlbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3Im
KTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKFBBWU1FTlRf
UkVRVUVTVCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUGF5bWVudFJlc3Bv
bnNlQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U1BheW1lbnRSZXNwb25zZUN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MTM2OCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTUGF5bWVudFJlc3BvbnNlQ3VzdG9tLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzcsMTEgKzM3LDE2IEBAIEpTQzo6SlNWYWx1ZSBKU1BheW1lbnRSZXNwb25zZTo6
ZGV0YWlscygKICAgICB9KTsKIH0KIAotdm9pZCBKU1BheW1lbnRSZXNwb25zZTo6dmlzaXRBZGRp
dGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vdm9pZCBKU1BheW1l
bnRSZXNwb25zZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlz
aXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTUGF5bWVudFJlc3BvbnNl
Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHdyYXBw
ZWQoKS5jYWNoZWREZXRhaWxzKCkudmlzaXQodmlzaXRvcik7CiB9CiAKK3RlbXBsYXRlIHZvaWQg
SlNQYXltZW50UmVzcG9uc2U6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6QWJzdHJhY3RT
bG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU1BheW1lbnRSZXNwb25zZTo6dmlzaXRBZGRp
dGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYpOworCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoUEFZTUVOVF9SRVFVRVNUKQpJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNQZXJmb3JtYW5jZU9ic2VydmVyQ3VzdG9tLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1BlcmZvcm1hbmNlT2JzZXJ2ZXJD
dXN0b20uY3BwCShyZXZpc2lvbiAyNzEzNjgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU1BlcmZvcm1hbmNlT2JzZXJ2ZXJDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwx
MiArMzEsMTcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIEpTUGVyZm9ybWFuY2VP
YnNlcnZlcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRv
cikKKy8vdm9pZCBKU1BlcmZvcm1hbmNlT2JzZXJ2ZXI6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVu
KEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgor
dm9pZCBKU1BlcmZvcm1hbmNlT2JzZXJ2ZXI6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0
b3ImIHZpc2l0b3IpCiB7CiAgICAgd3JhcHBlZCgpLmNhbGxiYWNrKCkudmlzaXRKU0Z1bmN0aW9u
KHZpc2l0b3IpOwogfQogCi1ib29sIEpTUGVyZm9ybWFuY2VPYnNlcnZlck93bmVyOjppc1JlYWNo
YWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9p
ZCosIEpTQzo6U2xvdFZpc2l0b3ImLCBjb25zdCBjaGFyKiogcmVhc29uKQordGVtcGxhdGUgdm9p
ZCBKU1BlcmZvcm1hbmNlT2JzZXJ2ZXI6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6QWJz
dHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU1BlcmZvcm1hbmNlT2JzZXJ2ZXI6
OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImKTsKKworYm9vbCBKU1Bl
cmZvcm1hbmNlT2JzZXJ2ZXJPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpI
YW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0
b3ImLCBjb25zdCBjaGFyKiogcmVhc29uKQogewogICAgIGlmIChVTkxJS0VMWShyZWFzb24pKQog
ICAgICAgICAqcmVhc29uID0gIlJlZ2lzdGVyZWQgUGVyZm9ybWFuY2VPYnNlcnZlciBjYWxsYmFj
ayI7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1BvcFN0YXRlRXZlbnRDdXN0
b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUG9wU3Rh
dGVFdmVudEN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MTM2OCkKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTUG9wU3RhdGVFdmVudEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkw
LDkgKzkwLDE0IEBAIEpTVmFsdWUgSlNQb3BTdGF0ZUV2ZW50OjpzdGF0ZShKU0dsb2JhbE8KICAg
ICByZXR1cm4gY2FjaGVTdGF0ZShyZXN1bHQpOwogfQogCi12b2lkIEpTUG9wU3RhdGVFdmVudDo6
dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vdm9p
ZCBKU1BvcFN0YXRlRXZlbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0
b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1BvcFN0YXRl
RXZlbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAg
d3JhcHBlZCgpLnN0YXRlKCkudmlzaXQodmlzaXRvcik7CiB9CiAKK3RlbXBsYXRlIHZvaWQgSlNQ
b3BTdGF0ZUV2ZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OkFic3RyYWN0U2xvdFZp
c2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNQb3BTdGF0ZUV2ZW50Ojp2aXNpdEFkZGl0aW9uYWxD
aGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJik7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUHJvbWlzZVJlamVjdGlvbkV2ZW50Q3Vz
dG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1Byb21p
c2VSZWplY3Rpb25FdmVudEN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MTM2OCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTUHJvbWlzZVJlamVjdGlvbkV2ZW50Q3VzdG9tLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzIsOSArMzIsMTQgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12
b2lkIEpTUHJvbWlzZVJlamVjdGlvbkV2ZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6
OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy92b2lkIEpTUHJvbWlzZVJlamVjdGlvbkV2ZW50Ojp2
aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxh
dGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNQcm9taXNlUmVqZWN0aW9uRXZlbnQ6OnZpc2l0
QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgd3JhcHBlZCgpLnJl
YXNvbigpLnZpc2l0KHZpc2l0b3IpOwogfQogCit0ZW1wbGF0ZSB2b2lkIEpTUHJvbWlzZVJlamVj
dGlvbkV2ZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OkFic3RyYWN0U2xvdFZpc2l0
b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNQcm9taXNlUmVqZWN0aW9uRXZlbnQ6OnZpc2l0QWRkaXRp
b25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImKTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNSZXNpemVPYnNlcnZlckN1c3Rv
bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNSZXNpemVP
YnNlcnZlckN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MTM2OCkKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTUmVzaXplT2JzZXJ2ZXJDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
MCwxMSArMzAsMTYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIEpTUmVzaXplT2Jz
ZXJ2ZXI6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3Ip
CisvL3ZvaWQgSlNSZXNpemVPYnNlcnZlcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpT
bG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpT
UmVzaXplT2JzZXJ2ZXI6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3Ip
CiB7CiAgICAgUmVzaXplT2JzZXJ2ZXJDYWxsYmFjayogY2FsbGJhY2sgPSB3cmFwcGVkKCkuY2Fs
bGJhY2tDb25jdXJyZW50bHkoKTsKICAgICBpZiAoY2FsbGJhY2spCiAgICAgICAgIGNhbGxiYWNr
LT52aXNpdEpTRnVuY3Rpb24odmlzaXRvcik7CiB9CiAKLX0KK3RlbXBsYXRlIHZvaWQgSlNSZXNp
emVPYnNlcnZlcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpBYnN0cmFjdFNsb3RWaXNp
dG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTUmVzaXplT2JzZXJ2ZXI6OnZpc2l0QWRkaXRpb25hbENo
aWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImKTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNSZXNpemVPYnNlcnZlckVudHJ5Q3VzdG9t
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1Jlc2l6ZU9i
c2VydmVyRW50cnlDdXN0b20uY3BwCShyZXZpc2lvbiAyNzEzNjgpCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU1Jlc2l6ZU9ic2VydmVyRW50cnlDdXN0b20uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zMCwxMCArMzAsMTUgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIEpT
UmVzaXplT2JzZXJ2ZXJFbnRyeTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90Vmlz
aXRvciYgdmlzaXRvcikKKy8vdm9pZCBKU1Jlc2l6ZU9ic2VydmVyRW50cnk6OnZpc2l0QWRkaXRp
b25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBWaXNpdG9yPgordm9pZCBKU1Jlc2l6ZU9ic2VydmVyRW50cnk6OnZpc2l0QWRkaXRpb25hbENo
aWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHJv
b3Qod3JhcHBlZCgpLnRhcmdldCgpKSk7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHdyYXBw
ZWQoKS5jb250ZW50UmVjdCgpKTsKIH0KIAotfQordGVtcGxhdGUgdm9pZCBKU1Jlc2l6ZU9ic2Vy
dmVyRW50cnk6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRv
ciYpOwordGVtcGxhdGUgdm9pZCBKU1Jlc2l6ZU9ic2VydmVyRW50cnk6OnZpc2l0QWRkaXRpb25h
bENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImKTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNTVkdWaWV3U3BlY0N1c3RvbS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNTVkdWaWV3U3BlY0N1
c3RvbS5jcHAJKHJldmlzaW9uIDI3MTM2OCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTU1ZHVmlld1NwZWNDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCwxMCArMzAsMTUg
QEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIEpTU1ZHVmlld1NwZWM6OnZpc2l0QWRk
aXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3ZvaWQgSlNTVkdW
aWV3U3BlYzo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRv
cikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTU1ZHVmlld1NwZWM6OnZpc2l0
QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgQVNTRVJUKHdyYXBw
ZWQoKS5jb250ZXh0RWxlbWVudENvbmN1cnJlbnRseSgpLmdldCgpKTsKICAgICB2aXNpdG9yLmFk
ZE9wYXF1ZVJvb3Qocm9vdCh3cmFwcGVkKCkuY29udGV4dEVsZW1lbnRDb25jdXJyZW50bHkoKS5n
ZXQoKSkpOwogfQogCi19Cit0ZW1wbGF0ZSB2b2lkIEpTU1ZHVmlld1NwZWM6OnZpc2l0QWRkaXRp
b25hbENoaWxkcmVuKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBK
U1NWR1ZpZXdTcGVjOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJik7
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTU2VydmljZVdvcmtlckdsb2JhbFNjb3BlQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NlcnZpY2VXb3JrZXJHbG9iYWxTY29wZUN1c3Rv
bS5jcHAJKHJldmlzaW9uIDI3MTM2OCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
U2VydmljZVdvcmtlckdsb2JhbFNjb3BlQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQs
MTIgKzM0LDE3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNwYWNlIEpTQzsK
IAotdm9pZCBKU1NlcnZpY2VXb3JrZXJHbG9iYWxTY29wZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRy
ZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3ZvaWQgSlNTZXJ2aWNlV29ya2VyR2xvYmFsU2Nv
cGU6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxh
dGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNTZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGU6OnZp
c2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgdmlzaXRvci5h
ZGRPcGFxdWVSb290KCZ3cmFwcGVkKCkuY2xpZW50cygpKTsKICAgICB2aXNpdG9yLmFkZE9wYXF1
ZVJvb3QoJndyYXBwZWQoKS5yZWdpc3RyYXRpb24oKSk7CiB9CiAKK3RlbXBsYXRlIHZvaWQgSlNT
ZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGU6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEFic3RyYWN0
U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNTZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGU6
OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CisKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKIAogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1N0
eWxlU2hlZXRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTU3R5bGVTaGVldEN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MTM2OCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTU3R5bGVTaGVldEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMwLDExICszMCwxNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgSlNTdHls
ZVNoZWV0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9y
KQorLy92b2lkIEpTU3R5bGVTaGVldDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90
VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTU3R5
bGVTaGVldDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAg
ICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qocm9vdCgmd3JhcHBlZCgpKSk7CiB9CiAKK3RlbXBsYXRl
IHZvaWQgSlNTdHlsZVNoZWV0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihBYnN0cmFjdFNsb3RW
aXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTU3R5bGVTaGVldDo6dmlzaXRBZGRpdGlvbmFsQ2hp
bGRyZW4oU2xvdFZpc2l0b3ImKTsKKwogSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlND
OjpKU0dsb2JhbE9iamVjdCosIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZjxT
dHlsZVNoZWV0PiYmIHN0eWxlU2hlZXQpCiB7CiAgICAgaWYgKHN0eWxlU2hlZXQtPmlzQ1NTU3R5
bGVTaGVldCgpKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNUZXh0VHJhY2tD
dWVDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
VGV4dFRyYWNrQ3VlQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcxMzY4KQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNUZXh0VHJhY2tDdWVDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zOCw3ICszOCw3IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2UgSlND
OwogCi1ib29sIEpTVGV4dFRyYWNrQ3VlT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3Rz
KEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgU2xvdFZpc2l0b3ImIHZp
c2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCitib29sIEpTVGV4dFRyYWNrQ3VlT3duZXI6Omlz
UmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxl
LCB2b2lkKiwgQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNv
bikKIHsKICAgICBKU1RleHRUcmFja0N1ZSoganNUZXh0VHJhY2tDdWUgPSBqc0Nhc3Q8SlNUZXh0
VHJhY2tDdWUqPihoYW5kbGUuc2xvdCgpLT5hc0NlbGwoKSk7CiAgICAgVGV4dFRyYWNrQ3VlJiB0
ZXh0VHJhY2tDdWUgPSBqc1RleHRUcmFja0N1ZS0+d3JhcHBlZCgpOwpAQCAtODIsMTIgKzgyLDE3
IEBAIEpTVmFsdWUgdG9KUyhKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2IKICAgICByZXR1cm4g
d3JhcChsZXhpY2FsR2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QsIGN1ZSk7CiB9CiAKLXZvaWQg
SlNUZXh0VHJhY2tDdWU6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNp
dG9yKQorLy92b2lkIEpTVGV4dFRyYWNrQ3VlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90
VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTVGV4
dFRyYWNrQ3VlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewog
ICAgIGlmIChUZXh0VHJhY2sqIHRleHRUcmFjayA9IHdyYXBwZWQoKS50cmFjaygpKQogICAgICAg
ICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qocm9vdCh0ZXh0VHJhY2spKTsKIH0KIAordGVtcGxhdGUg
dm9pZCBKU1RleHRUcmFja0N1ZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oQWJzdHJhY3RTbG90
VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU1RleHRUcmFja0N1ZTo6dmlzaXRBZGRpdGlvbmFs
Q2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5k
aWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVGV4dFRyYWNrQ3VzdG9tLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1RleHRUcmFja0N1
c3RvbS5jcHAJKHJldmlzaW9uIDI3MTM2OCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTVGV4dFRyYWNrQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsMTEgKzM2LDE2IEBA
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCi12b2lkIEpTVGV4
dFRyYWNrOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKKy8v
dm9pZCBKU1RleHRUcmFjazo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZp
c2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1RleHRUcmFjazo6dmlz
aXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB2aXNpdG9yLmFk
ZE9wYXF1ZVJvb3Qocm9vdCgmd3JhcHBlZCgpKSk7CiB9CiAKK3RlbXBsYXRlIHZvaWQgSlNUZXh0
VHJhY2s6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3Rl
bXBsYXRlIHZvaWQgSlNUZXh0VHJhY2s6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNp
dG9yJik7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU1RleHRUcmFja0xpc3RDdXN0b20uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVGV4dFRyYWNrTGlzdEN1c3RvbS5jcHAJ
KHJldmlzaW9uIDI3MTM2OCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVGV4dFRy
YWNrTGlzdEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDExICszNiwxNiBAQAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAotdm9pZCBKU1RleHRUcmFj
a0xpc3Q6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3Ip
CisvL3ZvaWQgSlNUZXh0VHJhY2tMaXN0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNs
b3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNU
ZXh0VHJhY2tMaXN0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQog
ewogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChyb290KHdyYXBwZWQoKS5lbGVtZW50KCkpKTsK
IH0KICAgICAKK3RlbXBsYXRlIHZvaWQgSlNUZXh0VHJhY2tMaXN0Ojp2aXNpdEFkZGl0aW9uYWxD
aGlsZHJlbihBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTVGV4dFRyYWNr
TGlzdDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKKwogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQogCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTVHJlZVdhbGtlckN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNUcmVlV2Fsa2VyQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcxMzY4KQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNUcmVlV2Fsa2VyQ3VzdG9tLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjUsMTAgKzI1LDE1IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBK
U1RyZWVXYWxrZXI6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZp
c2l0b3IpCisvL3ZvaWQgSlNUcmVlV2Fsa2VyOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6
OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQg
SlNUcmVlV2Fsa2VyOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQog
ewogICAgIGlmIChOb2RlRmlsdGVyKiBmaWx0ZXIgPSB3cmFwcGVkKCkuZmlsdGVyKCkpCiAgICAg
ICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChmaWx0ZXIpOwogfQogCi19Cit0ZW1wbGF0ZSB2b2lk
IEpTVHJlZVdhbGtlcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpBYnN0cmFjdFNsb3RW
aXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTVHJlZVdhbGtlcjo6dmlzaXRBZGRpdGlvbmFsQ2hp
bGRyZW4oSlNDOjpTbG90VmlzaXRvciYpOworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1VuZG9JdGVtQ3VzdG9tLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1VuZG9JdGVtQ3VzdG9tLmNwcAko
cmV2aXNpb24gMjcxMzY4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNVbmRvSXRl
bUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDEzICsyOSwxOCBAQAogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLXZvaWQgSlNVbmRvSXRlbTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4o
SlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vdm9pZCBKU1VuZG9JdGVtOjp2aXNpdEFkZGl0
aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5h
bWUgVmlzaXRvcj4KK3ZvaWQgSlNVbmRvSXRlbTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlz
aXRvciYgdmlzaXRvcikKIHsKICAgICB3cmFwcGVkKCkudW5kb0hhbmRsZXIoKS52aXNpdEpTRnVu
Y3Rpb24odmlzaXRvcik7CiAgICAgd3JhcHBlZCgpLnJlZG9IYW5kbGVyKCkudmlzaXRKU0Z1bmN0
aW9uKHZpc2l0b3IpOwogfQogCi1ib29sIEpTVW5kb0l0ZW1Pd25lcjo6aXNSZWFjaGFibGVGcm9t
T3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBKU0M6
OlNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQordGVtcGxhdGUgdm9p
ZCBKU1VuZG9JdGVtOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OkFic3RyYWN0U2xvdFZp
c2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNVbmRvSXRlbTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRy
ZW4oSlNDOjpTbG90VmlzaXRvciYpOworCitib29sIEpTVW5kb0l0ZW1Pd25lcjo6aXNSZWFjaGFi
bGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQq
LCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24p
CiB7CiAgICAgaWYgKFVOTElLRUxZKHJlYXNvbikpCiAgICAgICAgICpyZWFzb24gPSAiRG9jdW1l
bnQgaXMgYW4gb3BhcXVlIHJvb3QuIjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTVmFsdWVJbldyYXBwZWRPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU1ZhbHVlSW5XcmFwcGVkT2JqZWN0LmgJKHJldmlzaW9uIDI3MTM2OCkKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVmFsdWVJbldyYXBwZWRPYmplY3QuaAkod29y
a2luZyBjb3B5KQpAQCAtNDAsNyArNDAsOCBAQCBwdWJsaWM6CiAgICAgb3BlcmF0b3IgSlNDOjpK
U1ZhbHVlKCkgY29uc3Q7CiAgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0OwogICAg
IEpTVmFsdWVJbldyYXBwZWRPYmplY3QmIG9wZXJhdG9yPShjb25zdCBKU1ZhbHVlSW5XcmFwcGVk
T2JqZWN0JiBvdGhlcik7Ci0gICAgdm9pZCB2aXNpdChKU0M6OlNsb3RWaXNpdG9yJikgY29uc3Q7
CisvLyAgICB2b2lkIHZpc2l0KEpTQzo6U2xvdFZpc2l0b3ImKSBjb25zdDsKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIHZpc2l0KFZpc2l0b3ImKSBjb25zdDsKICAgICB2b2lk
IGNsZWFyKCk7CiAKIHByaXZhdGU6CkBAIC05OCw3ICs5OSw4IEBAIGlubGluZSBKU1ZhbHVlSW5X
cmFwcGVkT2JqZWN0JiBKU1ZhbHVlSW4KICAgICByZXR1cm4gKnRoaXM7CiB9CiAKLWlubGluZSB2
b2lkIEpTVmFsdWVJbldyYXBwZWRPYmplY3Q6OnZpc2l0KEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0
b3IpIGNvbnN0Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgoraW5saW5lIHZvaWQgSlNWYWx1
ZUluV3JhcHBlZE9iamVjdDo6dmlzaXQoVmlzaXRvciYgdmlzaXRvcikgY29uc3QKIHsKICAgICBy
ZXR1cm4gV1RGOjpzd2l0Y2hPbihtX3ZhbHVlLCBbXSAoSlNDOjpKU1ZhbHVlKSB7CiAgICAgICAg
IC8vIE5vdGhpbmcgdG8gdmlzaXQuCkBAIC0xMDcsNiArMTA5LDkgQEAgaW5saW5lIHZvaWQgSlNW
YWx1ZUluV3JhcHBlZE9iamVjdDo6dmlzaQogICAgIH0pOwogfQogCit0ZW1wbGF0ZSB2b2lkIEpT
VmFsdWVJbldyYXBwZWRPYmplY3Q6OnZpc2l0KEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpIGNv
bnN0OwordGVtcGxhdGUgdm9pZCBKU1ZhbHVlSW5XcmFwcGVkT2JqZWN0Ojp2aXNpdChKU0M6OlNs
b3RWaXNpdG9yJikgY29uc3Q7CisKIGlubGluZSB2b2lkIEpTVmFsdWVJbldyYXBwZWRPYmplY3Q6
OmNsZWFyKCkKIHsKICAgICBXVEY6OnN3aXRjaE9uKG1fdmFsdWUsIFtdIChXZWFrJiB2YWx1ZSkg
ewpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNWaWRlb1RyYWNrQ3VzdG9tLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1ZpZGVvVHJhY2tD
dXN0b20uY3BwCShyZXZpc2lvbiAyNzEzNjgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU1ZpZGVvVHJhY2tDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSwxMSArMzUsMTYg
QEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKLXZvaWQgSlNW
aWRlb1RyYWNrOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikK
Ky8vdm9pZCBKU1ZpZGVvVHJhY2s6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9y
JiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNWaWRlb1RyYWNr
Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHZpc2l0
b3IuYWRkT3BhcXVlUm9vdChyb290KCZ3cmFwcGVkKCkpKTsKIH0KIAordGVtcGxhdGUgdm9pZCBK
U1ZpZGVvVHJhY2s6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6QWJzdHJhY3RTbG90Vmlz
aXRvciYpOwordGVtcGxhdGUgdm9pZCBKU1ZpZGVvVHJhY2s6OnZpc2l0QWRkaXRpb25hbENoaWxk
cmVuKEpTQzo6U2xvdFZpc2l0b3ImKTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5k
aWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVmlkZW9UcmFja0xpc3RDdXN0
b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVmlkZW9U
cmFja0xpc3RDdXN0b20uY3BwCShyZXZpc2lvbiAyNzEzNjgpCisrKyBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU1ZpZGVvVHJhY2tMaXN0Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzUsMTEgKzM1LDE2IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2UgSlND
OwogCi12b2lkIEpTVmlkZW9UcmFja0xpc3Q6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQorLy92b2lkIEpTVmlkZW9UcmFja0xpc3Q6OnZpc2l0QWRkaXRpb25h
bENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRv
cj4KK3ZvaWQgSlNWaWRlb1RyYWNrTGlzdDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRv
ciYgdmlzaXRvcikKIHsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qocm9vdCh3cmFwcGVkKCku
ZWxlbWVudCgpKSk7CiB9CiAKK3RlbXBsYXRlIHZvaWQgSlNWaWRlb1RyYWNrTGlzdDo6dmlzaXRB
ZGRpdGlvbmFsQ2hpbGRyZW4oQWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBK
U1ZpZGVvVHJhY2tMaXN0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYpOwor
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNXZWJHTDJSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYkdMMlJlbmRlcmluZ0NvbnRleHRD
dXN0b20uY3BwCShyZXZpc2lvbiAyNzEzNjgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU1dlYkdMMlJlbmRlcmluZ0NvbnRleHRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
MywxMiArMzMsMTcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBKU0M7
CiAKLXZvaWQgSlNXZWJHTDJSZW5kZXJpbmdDb250ZXh0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJl
bihTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vdm9pZCBKU1dlYkdMMlJlbmRlcmluZ0NvbnRleHQ6
OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8
dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNXZWJHTDJSZW5kZXJpbmdDb250ZXh0Ojp2aXNpdEFk
ZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHZpc2l0b3IuYWRkT3Bh
cXVlUm9vdCgmd3JhcHBlZCgpKTsKICAgICB3cmFwcGVkKCkuYWRkTWVtYmVyc1RvT3BhcXVlUm9v
dHModmlzaXRvcik7CiB9CiAKK3RlbXBsYXRlIHZvaWQgSlNXZWJHTDJSZW5kZXJpbmdDb250ZXh0
Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3Rl
bXBsYXRlIHZvaWQgSlNXZWJHTDJSZW5kZXJpbmdDb250ZXh0Ojp2aXNpdEFkZGl0aW9uYWxDaGls
ZHJlbihKU0M6OlNsb3RWaXNpdG9yJik7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2Vu
ZGlmIC8vIEVOQUJMRShXRUJHTCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
V2ViR0xSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU1dlYkdMUmVuZGVyaW5nQ29udGV4dEN1c3RvbS5jcHAJKHJldmlz
aW9uIDI3MTM2OCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViR0xSZW5kZXJp
bmdDb250ZXh0Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsMTIgKzMzLDE3IEBACiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCi12b2lkIEpTV2ViR0xS
ZW5kZXJpbmdDb250ZXh0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlz
aXRvcikKKy8vdm9pZCBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmlzaXRBZGRpdGlvbmFsQ2hp
bGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgor
dm9pZCBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlz
aXRvciYgdmlzaXRvcikKIHsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QoJndyYXBwZWQoKSk7
CiAgICAgd3JhcHBlZCgpLmFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKHZpc2l0b3IpOwogfQogCit0
ZW1wbGF0ZSB2b2lkIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2aXNpdEFkZGl0aW9uYWxDaGls
ZHJlbihBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTV2ViR0xSZW5kZXJp
bmdDb250ZXh0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYpOworCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoV0VCR0wpCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckdsb2JhbFNjb3BlQmFzZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrZXJHbG9iYWxTY29wZUJh
c2UuY3BwCShyZXZpc2lvbiAyNzEzNjgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U1dvcmtlckdsb2JhbFNjb3BlQmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg3LDcgKzg3LDgg
QEAgdm9pZCBKU1dvcmtlckdsb2JhbFNjb3BlQmFzZTo6ZmluaXNoQ3JlYQogICAgIEFTU0VSVChp
bmhlcml0cyh2bSwgaW5mbygpKSk7CiB9CiAKLXZvaWQgSlNXb3JrZXJHbG9iYWxTY29wZUJhc2U6
OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBs
YXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTV29ya2VyR2xvYmFsU2NvcGVCYXNlOjp2aXNp
dENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNX
b3JrZXJHbG9iYWxTY29wZUJhc2UqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNXb3JrZXJHbG9iYWxT
Y29wZUJhc2UqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmpl
Y3QsIGluZm8oKSk7CkBAIC05NSw2ICs5Niw4IEBAIHZvaWQgSlNXb3JrZXJHbG9iYWxTY29wZUJh
c2U6OnZpc2l0Q2hpbGQKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX3Byb3h5KTsK
IH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTV29ya2VyR2xvYmFsU2NvcGVCYXNlKTsKKwog
dm9pZCBKU1dvcmtlckdsb2JhbFNjb3BlQmFzZTo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCiB7CiAg
ICAgc3RhdGljX2Nhc3Q8SlNXb3JrZXJHbG9iYWxTY29wZUJhc2UqPihjZWxsKS0+SlNXb3JrZXJH
bG9iYWxTY29wZUJhc2U6On5KU1dvcmtlckdsb2JhbFNjb3BlQmFzZSgpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrZXJHbG9iYWxTY29wZUJhc2UuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckdsb2JhbFNjb3BlQmFzZS5o
CShyZXZpc2lvbiAyNzEzNjgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtl
ckdsb2JhbFNjb3BlQmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03OSw3ICs3OSw3IEBAIHByb3Rl
Y3RlZDoKICAgICBKU1dvcmtlckdsb2JhbFNjb3BlQmFzZShKU0M6OlZNJiwgSlNDOjpTdHJ1Y3R1
cmUqLCBSZWZQdHI8V29ya2VyR2xvYmFsU2NvcGU+JiYpOwogICAgIHZvaWQgZmluaXNoQ3JlYXRp
b24oSlNDOjpWTSYsIEpTQzo6SlNQcm94eSopOwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGls
ZHJlbihKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lU
X0NISUxEUkVOOwogCiBwcml2YXRlOgogICAgIFJlZlB0cjxXb3JrZXJHbG9iYWxTY29wZT4gbV93
cmFwcGVkOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrZXJHbG9iYWxT
Y29wZUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNXb3JrZXJHbG9iYWxTY29wZUN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MTM2OCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyR2xvYmFsU2NvcGVDdXN0b20uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMyw3ICszMyw5IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBu
YW1lc3BhY2UgSlNDOwogCi12b2lkIEpTV29ya2VyR2xvYmFsU2NvcGU6OnZpc2l0QWRkaXRpb25h
bENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy92b2lkIEpTV29ya2VyR2xvYmFsU2Nv
cGU6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxh
dGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNXb3JrZXJHbG9iYWxTY29wZTo6dmlzaXRBZGRp
dGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBpZiAoYXV0byogbG9jYXRp
b24gPSB3cmFwcGVkKCkub3B0aW9uYWxMb2NhdGlvbigpKQogICAgICAgICB2aXNpdG9yLmFkZE9w
YXF1ZVJvb3QobG9jYXRpb24pOwpAQCAtNDgsNiArNTAsOSBAQCB2b2lkIEpTV29ya2VyR2xvYmFs
U2NvcGU6OnZpc2l0QWRkaXRpb25hCiAgICAgd3JhcHBlZCgpLnZpc2l0SlNFdmVudExpc3RlbmVy
cyh2aXNpdG9yKTsKIH0KIAordGVtcGxhdGUgdm9pZCBKU1dvcmtlckdsb2JhbFNjb3BlOjp2aXNp
dEFkZGl0aW9uYWxDaGlsZHJlbihBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lk
IEpTV29ya2VyR2xvYmFsU2NvcGU6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9y
Jik7CisKIEpTVmFsdWUgSlNXb3JrZXJHbG9iYWxTY29wZTo6cXVldWVNaWNyb3Rhc2soSlNHbG9i
YWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFtZSYgY2FsbEZyYW1lKQogewog
ICAgIFZNJiB2bSA9IGxleGljYWxHbG9iYWxPYmplY3Qudm0oKTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyTmF2aWdhdG9yQ3VzdG9tLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlck5hdmlnYXRvckN1c3RvbS5jcHAJ
KHJldmlzaW9uIDI3MTM2OCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2Vy
TmF2aWdhdG9yQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsOSArMjgsMTQgQEAKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIEpTV29ya2VyTmF2aWdhdG9yOjp2aXNpdEFkZGl0
aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy92b2lkIEpTV29ya2Vy
TmF2aWdhdG9yOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNp
dG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNXb3JrZXJOYXZpZ2F0b3I6
OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgdmlzaXRv
ci5hZGRPcGFxdWVSb290KHN0YXRpY19jYXN0PE5hdmlnYXRvckJhc2UqPigmd3JhcHBlZCgpKSk7
CiB9CiAKLX0KK3RlbXBsYXRlIHZvaWQgSlNXb3JrZXJOYXZpZ2F0b3I6OnZpc2l0QWRkaXRpb25h
bENoaWxkcmVuKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU1dv
cmtlck5hdmlnYXRvcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYp
OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU1dvcmtsZXRHbG9iYWxTY29wZUJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2xldEdsb2JhbFNjb3BlQmFzZS5jcHAJKHJldmlzaW9u
IDI3MTM2OCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2xldEdsb2JhbFNj
b3BlQmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc3LDcgKzc3LDggQEAgdm9pZCBKU1dvcmts
ZXRHbG9iYWxTY29wZUJhc2U6OmZpbmlzaENyZQogICAgIEFTU0VSVChpbmhlcml0cyh2bSwgaW5m
bygpKSk7CiB9CiAKLXZvaWQgSlNXb3JrbGV0R2xvYmFsU2NvcGVCYXNlOjp2aXNpdENoaWxkcmVu
KEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPgordm9pZCBKU1dvcmtsZXRHbG9iYWxTY29wZUJhc2U6OnZpc2l0Q2hpbGRyZW5JbXBs
KEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBhdXRvKiB0aGlzT2JqZWN0
ID0ganNDYXN0PEpTV29ya2xldEdsb2JhbFNjb3BlQmFzZSo+KGNlbGwpOwogICAgIEFTU0VSVF9H
Q19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTg1LDYgKzg2LDggQEAg
dm9pZCBKU1dvcmtsZXRHbG9iYWxTY29wZUJhc2U6OnZpc2l0Q2hpbAogICAgIHZpc2l0b3IuYXBw
ZW5kKHRoaXNPYmplY3QtPm1fcHJveHkpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNX
b3JrbGV0R2xvYmFsU2NvcGVCYXNlKTsKKwogdm9pZCBKU1dvcmtsZXRHbG9iYWxTY29wZUJhc2U6
OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQogewogICAgIHN0YXRpY19jYXN0PEpTV29ya2xldEdsb2Jh
bFNjb3BlQmFzZSo+KGNlbGwpLT5KU1dvcmtsZXRHbG9iYWxTY29wZUJhc2U6On5KU1dvcmtsZXRH
bG9iYWxTY29wZUJhc2UoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29y
a2xldEdsb2JhbFNjb3BlQmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTV29ya2xldEdsb2JhbFNjb3BlQmFzZS5oCShyZXZpc2lvbiAyNzEzNjgpCisrKyBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtsZXRHbG9iYWxTY29wZUJhc2UuaAkod29y
a2luZyBjb3B5KQpAQCAtNjcsNyArNjcsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgSlNXb3JrbGV0R2xv
YmFsU2NvcGVCYXNlKEpTQzo6Vk0mLCBKU0M6OlN0cnVjdHVyZSosIFJlZlB0cjxXb3JrbGV0R2xv
YmFsU2NvcGU+JiYpOwogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYsIEpTQzo6SlNQ
cm94eSopOwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0M6OkpTQ2VsbCosIEpT
Qzo6U2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiBwcml2YXRl
OgogICAgIFJlZlB0cjxXb3JrbGV0R2xvYmFsU2NvcGU+IG1fd3JhcHBlZDsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTWE1MSHR0cFJlcXVlc3RDdXN0b20uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTWE1MSHR0cFJlcXVlc3RDdXN0b20u
Y3BwCShyZXZpc2lvbiAyNzEzNjgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1hN
TEh0dHBSZXF1ZXN0Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEsNyArNDEsOSBAQAog
bmFtZXNwYWNlIFdlYkNvcmUgewogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAotdm9pZCBKU1hNTEh0
dHBSZXF1ZXN0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikK
Ky8vdm9pZCBKU1hNTEh0dHBSZXF1ZXN0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90Vmlz
aXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTWE1MSHR0
cFJlcXVlc3Q6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAg
ICAgaWYgKGF1dG8qIHVwbG9hZCA9IHdyYXBwZWQoKS5vcHRpb25hbFVwbG9hZCgpKQogICAgICAg
ICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QodXBsb2FkKTsKQEAgLTUwLDYgKzUyLDkgQEAgdm9pZCBK
U1hNTEh0dHBSZXF1ZXN0Ojp2aXNpdEFkZGl0aW9uYWxDaAogICAgICAgICB2aXNpdG9yLmFkZE9w
YXF1ZVJvb3QocmVzcG9uc2VEb2N1bWVudCk7CiB9CiAKK3RlbXBsYXRlIHZvaWQgSlNYTUxIdHRw
UmVxdWVzdDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oQWJzdHJhY3RTbG90VmlzaXRvciYpOwor
dGVtcGxhdGUgdm9pZCBKU1hNTEh0dHBSZXF1ZXN0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihT
bG90VmlzaXRvciYpOworCiBKU1ZhbHVlIEpTWE1MSHR0cFJlcXVlc3Q6OnJlc3BvbnNlKEpTR2xv
YmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0KSBjb25zdAogewogICAgIGF1dG8gY2FjaGVS
ZXN1bHQgPSBbJl0gKEpTVmFsdWUgdmFsdWUpIC0+IEpTVmFsdWUgewpJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNYUGF0aFJlc3VsdEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNYUGF0aFJlc3VsdEN1c3RvbS5jcHAJKHJldmlz
aW9uIDI3MTM2OCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTWFBhdGhSZXN1bHRD
dXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw5IEBACiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotdm9pZCBKU1hQYXRoUmVzdWx0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihK
U0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy92b2lkIEpTWFBhdGhSZXN1bHQ6OnZpc2l0QWRk
aXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBl
bmFtZSBWaXNpdG9yPgordm9pZCBKU1hQYXRoUmVzdWx0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJl
bihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGF1dG8mIHZhbHVlID0gd3JhcHBlZCgpLnZhbHVl
KCk7CiAgICAgaWYgKHZhbHVlLmlzTm9kZVNldCgpKSB7CkBAIC00MSw0ICs0Myw3IEBAIHZvaWQg
SlNYUGF0aFJlc3VsdDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGQKICAgICB9CiB9CiAKK3RlbXBsYXRl
IHZvaWQgSlNYUGF0aFJlc3VsdDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpBYnN0cmFj
dFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTWFBhdGhSZXN1bHQ6OnZpc2l0QWRkaXRp
b25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImKTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV2ViQ29yZVR5cGVkQXJyYXlDb250
cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJD
b3JlVHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiAyNzEzNjgpCisrKyBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC01Niw3ICs1Niw3IEBAIGJvb2wgV2ViQ29yZVR5cGVkQXJyYXlDb250cm9s
bGVyOjppc0F0b20KICAgICByZXR1cm4gbV9hbGxvd0F0b21pY3NXYWl0OwogfQogCi1ib29sIFdl
YkNvcmVUeXBlZEFycmF5Q29udHJvbGxlcjo6SlNBcnJheUJ1ZmZlck93bmVyOjppc1JlYWNoYWJs
ZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCos
IEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCitib29sIFdl
YkNvcmVUeXBlZEFycmF5Q29udHJvbGxlcjo6SlNBcnJheUJ1ZmZlck93bmVyOjppc1JlYWNoYWJs
ZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCos
IEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikK
IHsKICAgICBpZiAoVU5MSUtFTFkocmVhc29uKSkKICAgICAgICAgKnJlYXNvbiA9ICJBcnJheUJ1
ZmZlciBpcyBvcGFxdWUgcm9vdCI7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9X
ZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9XZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXIuaAkocmV2aXNpb24gMjcx
MzY4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV2ViQ29yZVR5cGVkQXJyYXlDb250
cm9sbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDcgKzQ4LDcgQEAgcHVibGljOgogcHJpdmF0
ZToKICAgICBjbGFzcyBKU0FycmF5QnVmZmVyT3duZXIgOiBwdWJsaWMgSlNDOjpXZWFrSGFuZGxl
T3duZXIgewogICAgIHB1YmxpYzoKLSAgICAgICAgYm9vbCBpc1JlYWNoYWJsZUZyb21PcGFxdWVS
b290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0LCBKU0M6OlNsb3RW
aXNpdG9yJiwgY29uc3QgY2hhcioqKSBvdmVycmlkZTsKKyAgICAgICAgYm9vbCBpc1JlYWNoYWJs
ZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0
LCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImLCBjb25zdCBjaGFyKiopIG92ZXJyaWRlOwogICAg
ICAgICB2b2lkIGZpbmFsaXplKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRl
eHQpIG92ZXJyaWRlOwogICAgIH07CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCShyZXZpc2lvbiAyNzEzNjgpCisrKyBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQkod29ya2lu
ZyBjb3B5KQpAQCAtMzA3OCw4ICszMDc4LDEwIEBAIHN1YiBHZW5lcmF0ZUhlYWRlcgogCiAgICAg
IyB2aXNpdCBmdW5jdGlvbgogICAgIGlmICgkbmVlZHNWaXNpdENoaWxkcmVuKSB7Ci0gICAgICAg
IHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0Nl
bGwqLCBKU0M6OlNsb3RWaXNpdG9yJik7XG4iKTsKLSAgICAgICAgcHVzaChAaGVhZGVyQ29udGVu
dCwgIiAgICB2b2lkIHZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImKTtc
biIpIGlmICRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+e0pTQ3VzdG9tTWFya0Z1bmN0
aW9ufTsKKyAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICBERUNMQVJFX1ZJU0lUX0NI
SUxEUkVOO1xuIik7CisjICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHZvaWQgdmlz
aXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYpO1xuIikgaWYgJGludGVyZmFj
ZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57SlNDdXN0b21NYXJrRnVuY3Rpb259OyAjIG1sYW0KKyMg
ICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgdm9pZCB2aXNpdEFkZGl0aW9uYWxDaGls
ZHJlbihKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKTtcbiIpIGlmICRpbnRlcmZhY2UtPmV4dGVu
ZGVkQXR0cmlidXRlcy0+e0pTQ3VzdG9tTWFya0Z1bmN0aW9ufTsKKyAgICAgICAgcHVzaChAaGVh
ZGVyQ29udGVudCwgIiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIHZpc2l0QWRk
aXRpb25hbENoaWxkcmVuKFZpc2l0b3ImKTtcbiIpIGlmICRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0
cmlidXRlcy0+e0pTQ3VzdG9tTWFya0Z1bmN0aW9ufTsKICAgICAgICAgcHVzaChAaGVhZGVyQ29u
dGVudCwgIlxuIik7CiAKICAgICAgICAgaWYgKCRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRl
cy0+e0pTQ3VzdG9tTWFya0Z1bmN0aW9ufSkgewpAQCAtMzA5NCw3ICszMDk2LDkgQEAgc3ViIEdl
bmVyYXRlSGVhZGVyCiAgICAgICAgICAgICAjIHRoYXQgdGhlIEdDIGNhbGxzIHRvIGFzayBhbiBv
YmplY3QgaXMgaXQgd291bGQgbGlrZSB0byBtYXJrIGFueXRoaW5nIGVsc2UgYWZ0ZXIgdGhlCiAg
ICAgICAgICAgICAjIHByb2dyYW0gcmVzdW1lZCBzaW5jZSB0aGUgbGFzdCBjYWxsIHRvIHZpc2l0
Q2hpbGRyZW4gb3IgdmlzaXRPdXRwdXRDb25zdHJhaW50cy4gU2luY2UKICAgICAgICAgICAgICMg
dGhpcyBqdXN0IGNhbGxzIHZpc2l0QWRkaXRpb25hbENoaWxkcmVuLCB5b3UgdXN1YWxseSBkb24n
dCBoYXZlIHRvIHdvcnJ5IGFib3V0IHRoaXMuCi0gICAgICAgICAgICBwdXNoKEBoZWFkZXJDb250
ZW50LCAiICAgIHN0YXRpYyB2b2lkIHZpc2l0T3V0cHV0Q29uc3RyYWludHMoSlNDZWxsKiwgSlND
OjpTbG90VmlzaXRvciYpO1xuIik7CisgICAgICAgICAgICAjIG1sYW0gcHVzaChAaGVhZGVyQ29u
dGVudCwgIiAgICBzdGF0aWMgdm9pZCB2aXNpdE91dHB1dENvbnN0cmFpbnRzKEpTQ2VsbCosIEpT
Qzo6U2xvdFZpc2l0b3ImKTtcbiIpOworICAgICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwg
IiAgICBzdGF0aWMgdm9pZCB2aXNpdE91dHB1dENvbnN0cmFpbnRzKEpTQ2VsbCosIEpTQzo6QWJz
dHJhY3RTbG90VmlzaXRvciYpO1xuIik7CisgICAgICAgICAgICAjIG1sYW0gcHVzaChAaGVhZGVy
Q29udGVudCwgIiAgICBERUNMQVJFX1ZJU0lUX09VVFBVVF9DT05TVFJBSU5UUztcbiIpOwogICAg
ICAgICB9CiAgICAgfQogCkBAIC0zMjE1LDcgKzMyMTksNyBAQCBzdWIgR2VuZXJhdGVIZWFkZXIK
ICAgICAgICAgfQogICAgICAgICAkaGVhZGVySW5jbHVkZXN7Ijx3dGYvTmV2ZXJEZXN0cm95ZWQu
aD4ifSA9IDE7CiAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJwdWJsaWM6XG4iKTsKLSAg
ICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1
ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6U2xv
dFZpc2l0b3ImLCBjb25zdCBjaGFyKiopICR7b3ZlcnJpZGVEZWNsfTtcbiIpOworICAgICAgICBw
dXNoKEBoZWFkZXJDb250ZW50LCAiICAgIGJvb2wgaXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMo
SlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCwgSlNDOjpBYnN0cmFjdFNs
b3RWaXNpdG9yJiwgY29uc3QgY2hhcioqKSAke292ZXJyaWRlRGVjbH07XG4iKTsKICAgICAgICAg
cHVzaChAaGVhZGVyQ29udGVudCwgIiAgICB2b2lkIGZpbmFsaXplKEpTQzo6SGFuZGxlPEpTQzo6
VW5rbm93bj4sIHZvaWQqIGNvbnRleHQpICR7b3ZlcnJpZGVEZWNsfTtcbiIpOwogICAgICAgICBw
dXNoKEBoZWFkZXJDb250ZW50LCAifTtcbiIpOwogICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50
LCAiXG4iKTsKQEAgLTQ5MjgsNiArNDkzMiw3IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9u
CiAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIkRPTUlzb1N1YnNwYWNlcy5oIik7CiAgICAgQWRkVG9J
bXBsSW5jbHVkZXMoIldlYkNvcmVKU0NsaWVudERhdGEuaCIpOwogICAgIEFkZFRvSW1wbEluY2x1
ZGVzKCI8SmF2YVNjcmlwdENvcmUvSlNEZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUuaD4i
KTsKKyAgICBBZGRUb0ltcGxJbmNsdWRlcygiPEphdmFTY3JpcHRDb3JlL1Nsb3RWaXNpdG9yTWFj
cm9zLmg+Iik7CiAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIjxKYXZhU2NyaXB0Q29yZS9TdWJzcGFj
ZUlubGluZXMuaD4iKTsKICAgICBwdXNoKEBpbXBsQ29udGVudCwgIkpTQzo6SXNvU3Vic3BhY2Uq
ICR7Y2xhc3NOYW1lfTo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKVxuIik7CiAgICAgcHVz
aChAaW1wbENvbnRlbnQsICJ7XG4iKTsKQEAgLTQ5NTUsNyArNDk2MCw4IEBAIHN1YiBHZW5lcmF0
ZUltcGxlbWVudGF0aW9uCiAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ9XG5cbiIpOwogCiAgICAg
aWYgKCRuZWVkc1Zpc2l0Q2hpbGRyZW4pIHsKLSAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ2
b2lkICR7Y2xhc3NOYW1lfTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9y
JiB2aXNpdG9yKVxuIik7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAidGVtcGxhdGU8dHlw
ZW5hbWUgVmlzaXRvcj5cbiIpOworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgInZvaWQgJHtj
bGFzc05hbWV9Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0
b3IpXG4iKTsKICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ7XG4iKTsKICAgICAgICAgcHVz
aChAaW1wbENvbnRlbnQsICIgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDwke2NsYXNzTmFt
ZX0qPihjZWxsKTtcbiIpOwogICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBBU1NFUlRf
R0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7XG4iKTsKQEAgLTQ5ODAsOCAr
NDk4NiwxMCBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgICAgICAgICAgfQogICAg
ICAgICB9CiAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAifVxuXG4iKTsKKyAgICAgICAgcHVz
aChAaW1wbENvbnRlbnQsICJERUZJTkVfVklTSVRfQ0hJTERSRU4oJHtjbGFzc05hbWV9KTtcblxu
Iik7CisKICAgICAgICAgaWYgKCRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+e0pTQ3Vz
dG9tTWFya0Z1bmN0aW9ufSkgewotICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ2b2lk
ICR7Y2xhc3NOYW1lfTo6dmlzaXRPdXRwdXRDb25zdHJhaW50cyhKU0NlbGwqIGNlbGwsIFNsb3RW
aXNpdG9yJiB2aXNpdG9yKVxuIik7CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgInZv
aWQgJHtjbGFzc05hbWV9Ojp2aXNpdE91dHB1dENvbnN0cmFpbnRzKEpTQ2VsbCogY2VsbCwgQWJz
dHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcilcbiIpOwogICAgICAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsICJ7XG4iKTsKICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGF1dG8q
IHRoaXNPYmplY3QgPSBqc0Nhc3Q8JHtjbGFzc05hbWV9Kj4oY2VsbCk7XG4iKTsKICAgICAgICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhp
c09iamVjdCwgaW5mbygpKTtcbiIpOwpAQCAtNTAyMiw3ICs1MDMwLDcgQEAgc3ViIEdlbmVyYXRl
SW1wbGVtZW50YXRpb24KICAgICB9CiAKICAgICBpZiAoU2hvdWxkR2VuZXJhdGVXcmFwcGVyT3du
ZXJDb2RlKCRoYXNQYXJlbnQsICRpbnRlcmZhY2UpICYmICFHZXRDdXN0b21Jc1JlYWNoYWJsZSgk
aW50ZXJmYWNlKSkgewotICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgImJvb2wgSlMke2ludGVy
ZmFjZU5hbWV9T3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpT
Qzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgU2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNo
YXIqKiByZWFzb24pXG4iKTsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJib29sIEpTJHtp
bnRlcmZhY2VOYW1lfU93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRs
ZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0
b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pXG4iKTsKICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICJ7XG4iKTsKICAgICAgICAgIyBBbGwgQWN0aXZlRE9NT2JqZWN0cyBpbXBsZW1lbnQgaGFzUGVu
ZGluZ0FjdGl2aXR5KCksIGJ1dCBub3QgYWxsIG9mIHRoZW0KICAgICAgICAgIyBpbmNyZW1lbnQg
dGhlaXIgQysrIHJlZmVyZW5jZSBjb3VudHMgd2hlbiBoYXNQZW5kaW5nQWN0aXZpdHkoKSBiZWNv
bWVzCkBAIC02NDIxLDcgKzY0MjksOCBAQCBzdWIgR2VuZXJhdGVDYWxsYmFja0hlYWRlckNvbnRl
bnQKICAgICAgICAgcHVzaChAJGNvbnRlbnRSZWYsICIgICAgYm9vbCBoYXNDYWxsYmFjaygpIGNv
bnN0IGZpbmFsIHsgcmV0dXJuIG1fZGF0YSAmJiBtX2RhdGEtPmNhbGxiYWNrKCk7IH1cblxuIik7
CiAgICAgfQogCi0gICAgcHVzaChAJGNvbnRlbnRSZWYsICIgICAgdm9pZCB2aXNpdEpTRnVuY3Rp
b24oSlNDOjpTbG90VmlzaXRvciYpIG92ZXJyaWRlO1xuXG4iKSBpZiAkaW50ZXJmYWNlT3JDYWxs
YmFjay0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57SXNXZWFrQ2FsbGJhY2t9OworIyAgICBwdXNoKEAk
Y29udGVudFJlZiwgIiAgICB2b2lkIHZpc2l0SlNGdW5jdGlvbihKU0M6OlNsb3RWaXNpdG9yJikg
b3ZlcnJpZGU7XG5cbiIpIGlmICRpbnRlcmZhY2VPckNhbGxiYWNrLT5leHRlbmRlZEF0dHJpYnV0
ZXMtPntJc1dlYWtDYWxsYmFja307CisgICAgcHVzaChAJGNvbnRlbnRSZWYsICIgICAgdm9pZCB2
aXNpdEpTRnVuY3Rpb24oSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJikgb3ZlcnJpZGU7XG5cbiIp
IGlmICRpbnRlcmZhY2VPckNhbGxiYWNrLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntJc1dlYWtDYWxs
YmFja307CiAKICAgICBwdXNoKEAkY29udGVudFJlZiwgIiAgICAke2NhbGxiYWNrRGF0YVR5cGV9
KiBtX2RhdGE7XG4iKTsKICAgICBwdXNoKEAkY29udGVudFJlZiwgIn07XG5cbiIpOwpAQCAtNjYx
Miw3ICs2NjIxLDggQEAgc3ViIEdlbmVyYXRlQ2FsbGJhY2tJbXBsZW1lbnRhdGlvbkNvbnRlbgog
ICAgIH0KIAogICAgIGlmICgkaW50ZXJmYWNlT3JDYWxsYmFjay0+ZXh0ZW5kZWRBdHRyaWJ1dGVz
LT57SXNXZWFrQ2FsbGJhY2t9KSB7Ci0gICAgICAgIHB1c2goQCRjb250ZW50UmVmLCAidm9pZCAk
e2NsYXNzTmFtZX06OnZpc2l0SlNGdW5jdGlvbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKVxu
Iik7CisjICAgICAgICBwdXNoKEAkY29udGVudFJlZiwgInZvaWQgJHtjbGFzc05hbWV9Ojp2aXNp
dEpTRnVuY3Rpb24oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcilcbiIpOworICAgICAgICBwdXNo
KEAkY29udGVudFJlZiwgInZvaWQgJHtjbGFzc05hbWV9Ojp2aXNpdEpTRnVuY3Rpb24oSlNDOjpB
YnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKVxuIik7CiAgICAgICAgIHB1c2goQCRjb250ZW50
UmVmLCAie1xuIik7CiAgICAgICAgIHB1c2goQCRjb250ZW50UmVmLCAiICAgIG1fZGF0YS0+dmlz
aXRKU0Z1bmN0aW9uKHZpc2l0b3IpO1xuIik7CiAgICAgICAgIHB1c2goQCRjb250ZW50UmVmLCAi
fVxuXG4iKTsKQEAgLTY3MjMsNiArNjczMyw3IEBAIHN1YiBHZW5lcmF0ZUl0ZXJhYmxlRGVmaW5p
dGlvbgogICAgIG15ICR2aXNpYmxlSW50ZXJmYWNlTmFtZSA9ICRjb2RlR2VuZXJhdG9yLT5HZXRW
aXNpYmxlSW50ZXJmYWNlTmFtZSgkaW50ZXJmYWNlKTsKIAogICAgIEFkZFRvSW1wbEluY2x1ZGVz
KCJKU0RPTUl0ZXJhdG9yLmgiKTsKKyAgICBBZGRUb0ltcGxJbmNsdWRlcygiPEphdmFTY3JpcHRD
b3JlL1Nsb3RWaXNpdG9yTWFjcm9zLmg+Iik7CiAKICAgICByZXR1cm4gdW5sZXNzIElzS2V5VmFs
dWVJdGVyYWJsZUludGVyZmFjZSgkaW50ZXJmYWNlKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUv
ZG9tL0FjdGl2ZURPTUNhbGxiYWNrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9t
L0FjdGl2ZURPTUNhbGxiYWNrLmgJKHJldmlzaW9uIDI3MTM2OCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2RvbS9BY3RpdmVET01DYWxsYmFjay5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw3IEBA
CiAjaW5jbHVkZSAiQ29udGV4dERlc3RydWN0aW9uT2JzZXJ2ZXIuaCIKIAogbmFtZXNwYWNlIEpT
QyB7CitjbGFzcyBBYnN0cmFjdFNsb3RWaXNpdG9yOwogY2xhc3MgU2xvdFZpc2l0b3I7CiB9CiAK
QEAgLTU1LDcgKzU2LDggQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgYWN0aXZl
RE9NT2JqZWN0c0FyZVN1c3BlbmRlZCgpIGNvbnN0OwogICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wg
YWN0aXZlRE9NT2JqZWN0QXJlU3RvcHBlZCgpIGNvbnN0OwogICAgIAotICAgIHZpcnR1YWwgdm9p
ZCB2aXNpdEpTRnVuY3Rpb24oSlNDOjpTbG90VmlzaXRvciYpIHsgfQorLy8gICAgdmlydHVhbCB2
b2lkIHZpc2l0SlNGdW5jdGlvbihKU0M6OlNsb3RWaXNpdG9yJikgeyB9CisgICAgdmlydHVhbCB2
b2lkIHZpc2l0SlNGdW5jdGlvbihKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKSB7IH0KIH07CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9FdmVudExp
c3RlbmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50TGlzdGVuZXIu
aAkocmV2aXNpb24gMjcxMzY4KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50TGlzdGVuZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtMjMsOCArMjMsOSBAQAogI2luY2x1ZGUgPHd0Zi9SZWZDb3Vu
dGVkLmg+CiAKIG5hbWVzcGFjZSBKU0MgeworY2xhc3MgQWJzdHJhY3RTbG90VmlzaXRvcjsKIGNs
YXNzIEpTT2JqZWN0OwotY2xhc3MgU2xvdFZpc2l0b3I7CisvL2NsYXNzIFNsb3RWaXNpdG9yOwog
fQogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC01MSw3ICs1Miw4IEBAIHB1YmxpYzoKICAgICB2
aXJ0dWFsIHZvaWQgaGFuZGxlRXZlbnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIEV2ZW50Jikg
PSAwOwogICAgIHZpcnR1YWwgYm9vbCB3YXNDcmVhdGVkRnJvbU1hcmt1cCgpIGNvbnN0IHsgcmV0
dXJuIGZhbHNlOyB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXRKU0Z1bmN0aW9uKEpTQzo6U2xv
dFZpc2l0b3ImKSB7IH0KKy8vICAgIHZpcnR1YWwgdm9pZCB2aXNpdEpTRnVuY3Rpb24oSlNDOjpT
bG90VmlzaXRvciYpIHsgfQorICAgIHZpcnR1YWwgdm9pZCB2aXNpdEpTRnVuY3Rpb24oSlNDOjpB
YnN0cmFjdFNsb3RWaXNpdG9yJikgeyB9CiAKICAgICB2aXJ0dWFsIGJvb2wgaXNBdHRyaWJ1dGUo
KSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIFR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJu
IG1fdHlwZTsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50VGFyZ2V0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRUYXJnZXQuY3BwCShyZXZpc2lvbiAy
NzEzNjgpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRUYXJnZXQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zNzQsNyArMzc0LDkgQEAgdm9pZCBFdmVudFRhcmdldDo6cmVtb3ZlQWxsRXZlbnRM
aXN0ZW5lcgogICAgIHRocmVhZERhdGEuc2V0SXNJblJlbW92ZUFsbEV2ZW50TGlzdGVuZXJzKGZh
bHNlKTsKIH0KIAotdm9pZCBFdmVudFRhcmdldDo6dmlzaXRKU0V2ZW50TGlzdGVuZXJzKEpTQzo6
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3ZvaWQgRXZlbnRUYXJnZXQ6OnZpc2l0SlNFdmVudExp
c3RlbmVycyhKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlz
aXRvcj4KK3ZvaWQgRXZlbnRUYXJnZXQ6OnZpc2l0SlNFdmVudExpc3RlbmVycyhWaXNpdG9yJiB2
aXNpdG9yKQogewogICAgIEV2ZW50VGFyZ2V0RGF0YSogZGF0YSA9IGV2ZW50VGFyZ2V0RGF0YUNv
bmN1cnJlbnRseSgpOwogICAgIGlmICghZGF0YSkKQEAgLTM4Niw2ICszODgsOSBAQCB2b2lkIEV2
ZW50VGFyZ2V0Ojp2aXNpdEpTRXZlbnRMaXN0ZW5lcnMoCiAgICAgICAgIGxpc3RlbmVyLT52aXNp
dEpTRnVuY3Rpb24odmlzaXRvcik7CiB9CiAKK3RlbXBsYXRlIHZvaWQgRXZlbnRUYXJnZXQ6OnZp
c2l0SlNFdmVudExpc3RlbmVycyhKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRl
IHZvaWQgRXZlbnRUYXJnZXQ6OnZpc2l0SlNFdmVudExpc3RlbmVycyhKU0M6OlNsb3RWaXNpdG9y
Jik7CisKIHZvaWQgRXZlbnRUYXJnZXQ6OmludmFsaWRhdGVFdmVudExpc3RlbmVyUmVnaW9ucygp
CiB7CiAgICAgaWYgKGlzPEVsZW1lbnQ+KCp0aGlzKSkgewpJbmRleDogU291cmNlL1dlYkNvcmUv
ZG9tL0V2ZW50VGFyZ2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50
VGFyZ2V0LmgJKHJldmlzaW9uIDI3MTM2OCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9FdmVudFRh
cmdldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTMsNyArMTEzLDggQEAgcHVibGljOgogICAgIHZv
aWQgZmlyZUV2ZW50TGlzdGVuZXJzKEV2ZW50JiwgRXZlbnRJbnZva2VQaGFzZSk7CiAgICAgYm9v
bCBpc0ZpcmluZ0V2ZW50TGlzdGVuZXJzKCkgY29uc3Q7CiAKLSAgICB2b2lkIHZpc2l0SlNFdmVu
dExpc3RlbmVycyhKU0M6OlNsb3RWaXNpdG9yJik7CisvLyAgICB2b2lkIHZpc2l0SlNFdmVudExp
c3RlbmVycyhKU0M6OlNsb3RWaXNpdG9yJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRv
cj4gdm9pZCB2aXNpdEpTRXZlbnRMaXN0ZW5lcnMoVmlzaXRvciYpOwogICAgIHZvaWQgaW52YWxp
ZGF0ZUpTRXZlbnRMaXN0ZW5lcnMoSlNDOjpKU09iamVjdCopOwogCiAgICAgY29uc3QgRXZlbnRU
YXJnZXREYXRhKiBldmVudFRhcmdldERhdGEoKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2RvbS9NdXRhdGlvblJlY29yZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9t
L011dGF0aW9uUmVjb3JkLmNwcAkocmV2aXNpb24gMjcxMzY4KQorKysgU291cmNlL1dlYkNvcmUv
ZG9tL011dGF0aW9uUmVjb3JkLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEsNyArNDEsOCBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKIG5hbWVzcGFjZSB7CiAKLXN0YXRpYyB2b2lkIHZpc2l0Tm9k
ZUxpc3QoSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvciwgTm9kZUxpc3QmIG5vZGVMaXN0KQorLy9z
dGF0aWMgdm9pZCB2aXNpdE5vZGVMaXN0KEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IsIE5vZGVM
aXN0JiBub2RlTGlzdCkKK3N0YXRpYyB2b2lkIHZpc2l0Tm9kZUxpc3QoSlNDOjpBYnN0cmFjdFNs
b3RWaXNpdG9yJiB2aXNpdG9yLCBOb2RlTGlzdCYgbm9kZUxpc3QpCiB7CiAgICAgQVNTRVJUKCFu
b2RlTGlzdC5pc0xpdmVOb2RlTGlzdCgpKTsKICAgICB1bnNpZ25lZCBsZW5ndGggPSBub2RlTGlz
dC5sZW5ndGgoKTsKQEAgLTY4LDcgKzY5LDggQEAgcHJpdmF0ZToKICAgICBOb2RlKiBwcmV2aW91
c1NpYmxpbmcoKSBvdmVycmlkZSB7IHJldHVybiBtX3ByZXZpb3VzU2libGluZy5nZXQoKTsgfQog
ICAgIE5vZGUqIG5leHRTaWJsaW5nKCkgb3ZlcnJpZGUgeyByZXR1cm4gbV9uZXh0U2libGluZy5n
ZXQoKTsgfQogCi0gICAgdm9pZCB2aXNpdE5vZGVzQ29uY3VycmVudGx5KEpTQzo6U2xvdFZpc2l0
b3ImIHZpc2l0b3IpIGNvbnN0IGZpbmFsCisvLyAgICB2b2lkIHZpc2l0Tm9kZXNDb25jdXJyZW50
bHkoSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikgY29uc3QgZmluYWwKKyAgICB2b2lkIHZpc2l0
Tm9kZXNDb25jdXJyZW50bHkoSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBjb25z
dCBmaW5hbAogICAgIHsKICAgICAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHJvb3QobV90YXJn
ZXQucHRyKCkpKTsKICAgICAgICAgaWYgKG1fYWRkZWROb2RlcykKQEAgLTEwNSw3ICsxMDcsOCBA
QCBwcml2YXRlOgogICAgICAgICByZXR1cm4gbm9kZUxpc3QuZ2V0KCk7CiAgICAgfQogCi0gICAg
dm9pZCB2aXNpdE5vZGVzQ29uY3VycmVudGx5KEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpIGNv
bnN0IGZpbmFsCisvLyAgICB2b2lkIHZpc2l0Tm9kZXNDb25jdXJyZW50bHkoSlNDOjpTbG90Vmlz
aXRvciYgdmlzaXRvcikgY29uc3QgZmluYWwKKyAgICB2b2lkIHZpc2l0Tm9kZXNDb25jdXJyZW50
bHkoSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBjb25zdCBmaW5hbAogICAgIHsK
ICAgICAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHJvb3QobV90YXJnZXQucHRyKCkpKTsKICAg
ICB9CkBAIC0xNjQsNyArMTY3LDggQEAgcHJpdmF0ZToKIAogICAgIFN0cmluZyBvbGRWYWx1ZSgp
IG92ZXJyaWRlIHsgcmV0dXJuIFN0cmluZygpOyB9CiAKLSAgICB2b2lkIHZpc2l0Tm9kZXNDb25j
dXJyZW50bHkoSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikgY29uc3QgZmluYWwKKy8vICAgIHZv
aWQgdmlzaXROb2Rlc0NvbmN1cnJlbnRseShKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKSBjb25z
dCBmaW5hbAorICAgIHZvaWQgdmlzaXROb2Rlc0NvbmN1cnJlbnRseShKU0M6OkFic3RyYWN0U2xv
dFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0IGZpbmFsCiAgICAgewogICAgICAgICBtX3JlY29yZC0+
dmlzaXROb2Rlc0NvbmN1cnJlbnRseSh2aXNpdG9yKTsKICAgICB9CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9kb20vTXV0YXRpb25SZWNvcmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9k
b20vTXV0YXRpb25SZWNvcmQuaAkocmV2aXNpb24gMjcxMzY4KQorKysgU291cmNlL1dlYkNvcmUv
ZG9tL011dGF0aW9uUmVjb3JkLmgJKHdvcmtpbmcgY29weSkKQEAgLTcyLDcgKzcyLDggQEAgcHVi
bGljOgogCiAgICAgdmlydHVhbCBTdHJpbmcgb2xkVmFsdWUoKSB7IHJldHVybiBTdHJpbmcoKTsg
fQogCi0gICAgdmlydHVhbCB2b2lkIHZpc2l0Tm9kZXNDb25jdXJyZW50bHkoSlNDOjpTbG90Vmlz
aXRvciYpIGNvbnN0ID0gMDsKKy8vICAgIHZpcnR1YWwgdm9pZCB2aXNpdE5vZGVzQ29uY3VycmVu
dGx5KEpTQzo6U2xvdFZpc2l0b3ImKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0
Tm9kZXNDb25jdXJyZW50bHkoSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJikgY29uc3QgPSAwOwog
fTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9j
YW52YXMvV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvaHRtbC9jYW52YXMvV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5jcHAJKHJldmlzaW9uIDI3
MTM2OCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMMlJlbmRlcmluZ0NvbnRl
eHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMDI4LDE4ICszMDI4LDIwIEBAIGJvb2wgV2ViR0wy
UmVuZGVyaW5nQ29udGV4dDo6Y2hlY2tBbmRUcmEKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9p
ZCBXZWJHTDJSZW5kZXJpbmdDb250ZXh0OjphZGRNZW1iZXJzVG9PcGFxdWVSb290cyhKU0M6OlNs
b3RWaXNpdG9yJiB2aXNpdG9yKQorLy92b2lkIFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OmFkZE1l
bWJlcnNUb09wYXF1ZVJvb3RzKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIFdlYkdM
MlJlbmRlcmluZ0NvbnRleHQ6OmFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKEpTQzo6QWJzdHJhY3RT
bG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjph
ZGRNZW1iZXJzVG9PcGFxdWVSb290cyh2aXNpdG9yKTsKIAogICAgIGF1dG8gbG9ja2VyID0gaG9s
ZExvY2sob2JqZWN0R3JhcGhMb2NrKCkpOwogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChtX3Jl
YWRGcmFtZWJ1ZmZlckJpbmRpbmcuZ2V0KCkpOwogICAgIGlmIChtX3JlYWRGcmFtZWJ1ZmZlckJp
bmRpbmcpCi0gICAgICAgIG1fcmVhZEZyYW1lYnVmZmVyQmluZGluZy0+YWRkTWVtYmVyc1RvT3Bh
cXVlUm9vdHMobG9ja2VyLCB2aXNpdG9yKTsKKyAgICAgICAgbV9yZWFkRnJhbWVidWZmZXJCaW5k
aW5nLT5hZGRNZW1iZXJzVG9PcGFxdWVSb290czMwMChsb2NrZXIsIHZpc2l0b3IpOwogCiAgICAg
dmlzaXRvci5hZGRPcGFxdWVSb290KG1fYm91bmRUcmFuc2Zvcm1GZWVkYmFjay5nZXQoKSk7CiAg
ICAgaWYgKG1fYm91bmRUcmFuc2Zvcm1GZWVkYmFjaykKLSAgICAgICAgbV9ib3VuZFRyYW5zZm9y
bUZlZWRiYWNrLT5hZGRNZW1iZXJzVG9PcGFxdWVSb290cyhsb2NrZXIsIHZpc2l0b3IpOworLy8g
ICAgICAgIG1fYm91bmRUcmFuc2Zvcm1GZWVkYmFjay0+YWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMo
bG9ja2VyLCB2aXNpdG9yKTsKKyAgICAgICAgbV9ib3VuZFRyYW5zZm9ybUZlZWRiYWNrLT5hZGRN
ZW1iZXJzVG9PcGFxdWVSb290czEwMChsb2NrZXIsIHZpc2l0b3IpOwogCiAgICAgdmlzaXRvci5h
ZGRPcGFxdWVSb290KG1fYm91bmRDb3B5UmVhZEJ1ZmZlci5nZXQoKSk7CiAgICAgdmlzaXRvci5h
ZGRPcGFxdWVSb290KG1fYm91bmRDb3B5V3JpdGVCdWZmZXIuZ2V0KCkpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMMlJlbmRlcmluZ0NvbnRleHQuaAko
cmV2aXNpb24gMjcxMzY4KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0wyUmVu
ZGVyaW5nQ29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNjEsNyArMjYxLDggQEAgcHVibGlj
OgogCiAgICAgYm9vbCBjaGVja0FuZFRyYW5zbGF0ZUF0dGFjaG1lbnRzKGNvbnN0IGNoYXIqIGZ1
bmN0aW9uTmFtZSwgR0NHTGVudW0sIFZlY3RvcjxHQ0dMZW51bT4mKTsKIAotICAgIHZvaWQgYWRk
TWVtYmVyc1RvT3BhcXVlUm9vdHMoSlNDOjpTbG90VmlzaXRvciYpIG92ZXJyaWRlOworLy8gICAg
dm9pZCBhZGRNZW1iZXJzVG9PcGFxdWVSb290cyhKU0M6OlNsb3RWaXNpdG9yJikgb3ZlcnJpZGU7
CisgICAgdm9pZCBhZGRNZW1iZXJzVG9PcGFxdWVSb290cyhKU0M6OkFic3RyYWN0U2xvdFZpc2l0
b3ImKSBvdmVycmlkZTsKIAogcHJpdmF0ZToKICAgICBXZWJHTDJSZW5kZXJpbmdDb250ZXh0KENh
bnZhc0Jhc2UmLCBHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMpOwpJbmRleDogU291cmNlL1dl
YkNvcmUvaHRtbC9jYW52YXMvV2ViR0xGcmFtZWJ1ZmZlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xGcmFtZWJ1ZmZlci5jcHAJKHJldmlzaW9uIDI3
MTM2OCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRnJhbWVidWZmZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC02Myw3ICs2Myw4IEBAIG5hbWVzcGFjZSB7CiAgICAgICAgIHZv
aWQgb25EZXRhY2hlZChjb25zdCBBYnN0cmFjdExvY2tlciYsIEdyYXBoaWNzQ29udGV4dEdMKikg
b3ZlcnJpZGU7CiAgICAgICAgIHZvaWQgYXR0YWNoKEdyYXBoaWNzQ29udGV4dEdMKiwgR0NHTGVu
dW0gdGFyZ2V0LCBHQ0dMZW51bSBhdHRhY2htZW50KSBvdmVycmlkZTsKICAgICAgICAgdm9pZCB1
bmF0dGFjaChHcmFwaGljc0NvbnRleHRHTCosIEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gYXR0
YWNobWVudCkgb3ZlcnJpZGU7Ci0gICAgICAgIHZvaWQgYWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMo
Y29uc3QgQWJzdHJhY3RMb2NrZXImLCBKU0M6OlNsb3RWaXNpdG9yJikgb3ZlcnJpZGU7CisvLyAg
ICAgICAgdm9pZCBhZGRNZW1iZXJzVG9PcGFxdWVSb290cyhjb25zdCBBYnN0cmFjdExvY2tlciYs
IEpTQzo6U2xvdFZpc2l0b3ImKSBvdmVycmlkZTsKKyAgICAgICAgdm9pZCBhZGRNZW1iZXJzVG9P
cGFxdWVSb290czQwMChjb25zdCBBYnN0cmFjdExvY2tlciYsIEpTQzo6QWJzdHJhY3RTbG90Vmlz
aXRvciYpIG92ZXJyaWRlOwogCiAgICAgICAgIFdlYkdMUmVuZGVyYnVmZmVyQXR0YWNobWVudCgp
IHsgfTsKIApAQCAtMTQ1LDcgKzE0Niw4IEBAIG5hbWVzcGFjZSB7CiAgICAgICAgICAgICBjb250
ZXh0LT5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcih0YXJnZXQsIGF0dGFjaG1lbnQsIEdyYXBoaWNz
Q29udGV4dEdMOjpSRU5ERVJCVUZGRVIsIDApOwogICAgIH0KIAotICAgIHZvaWQgV2ViR0xSZW5k
ZXJidWZmZXJBdHRhY2htZW50OjphZGRNZW1iZXJzVG9PcGFxdWVSb290cyhjb25zdCBBYnN0cmFj
dExvY2tlciYsIEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvLyAgICB2b2lkIFdlYkdMUmVu
ZGVyYnVmZmVyQXR0YWNobWVudDo6YWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMoY29uc3QgQWJzdHJh
Y3RMb2NrZXImLCBKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQorICAgIHZvaWQgV2ViR0xSZW5k
ZXJidWZmZXJBdHRhY2htZW50OjphZGRNZW1iZXJzVG9PcGFxdWVSb290czQwMChjb25zdCBBYnN0
cmFjdExvY2tlciYsIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKICAgICB7CiAg
ICAgICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChtX3JlbmRlcmJ1ZmZlci5nZXQoKSk7CiAgICAg
fQpAQCAtMTY5LDcgKzE3MSw4IEBAIG5hbWVzcGFjZSB7CiAgICAgICAgIHZvaWQgb25EZXRhY2hl
ZChjb25zdCBBYnN0cmFjdExvY2tlciYsIEdyYXBoaWNzQ29udGV4dEdMKikgb3ZlcnJpZGU7CiAg
ICAgICAgIHZvaWQgYXR0YWNoKEdyYXBoaWNzQ29udGV4dEdMKiwgR0NHTGVudW0gdGFyZ2V0LCBH
Q0dMZW51bSBhdHRhY2htZW50KSBvdmVycmlkZTsKICAgICAgICAgdm9pZCB1bmF0dGFjaChHcmFw
aGljc0NvbnRleHRHTCosIEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gYXR0YWNobWVudCkgb3Zl
cnJpZGU7Ci0gICAgICAgIHZvaWQgYWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMoY29uc3QgQWJzdHJh
Y3RMb2NrZXImLCBKU0M6OlNsb3RWaXNpdG9yJikgb3ZlcnJpZGU7CisvLyAgICAgICAgdm9pZCBh
ZGRNZW1iZXJzVG9PcGFxdWVSb290cyhjb25zdCBBYnN0cmFjdExvY2tlciYsIEpTQzo6U2xvdFZp
c2l0b3ImKSBvdmVycmlkZTsKKyAgICAgICAgdm9pZCBhZGRNZW1iZXJzVG9PcGFxdWVSb290czQw
MChjb25zdCBBYnN0cmFjdExvY2tlciYsIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpIG92ZXJy
aWRlOwogCiAgICAgICAgIFdlYkdMVGV4dHVyZUF0dGFjaG1lbnQoKSB7IH07CiAKQEAgLTI2Nyw3
ICsyNzAsOCBAQCBuYW1lc3BhY2UgewogI2VuZGlmCiAgICAgfQogCi0gICAgdm9pZCBXZWJHTFRl
eHR1cmVBdHRhY2htZW50OjphZGRNZW1iZXJzVG9PcGFxdWVSb290cyhjb25zdCBBYnN0cmFjdExv
Y2tlciYsIEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvLyAgICB2b2lkIFdlYkdMVGV4dHVy
ZUF0dGFjaG1lbnQ6OmFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKGNvbnN0IEFic3RyYWN0TG9ja2Vy
JiwgSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKKyAgICB2b2lkIFdlYkdMVGV4dHVyZUF0dGFj
aG1lbnQ6OmFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzNDAwKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwg
SlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogICAgIHsKICAgICAgICAgdmlzaXRv
ci5hZGRPcGFxdWVSb290KG1fdGV4dHVyZS5nZXQoKSk7CiAgICAgfQpAQCAtNzIxLDEwICs3MjUs
MTEgQEAgR0NHTGVudW0gV2ViR0xGcmFtZWJ1ZmZlcjo6Z2V0RHJhd0J1ZmZlcgogICAgIHJldHVy
biBHcmFwaGljc0NvbnRleHRHTDo6Tk9ORTsKIH0KIAotdm9pZCBXZWJHTEZyYW1lYnVmZmVyOjph
ZGRNZW1iZXJzVG9PcGFxdWVSb290cyhjb25zdCBBYnN0cmFjdExvY2tlciYgbG9ja2VyLCBKU0M6
OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy92b2lkIFdlYkdMRnJhbWVidWZmZXI6OmFkZE1lbWJl
cnNUb09wYXF1ZVJvb3RzKGNvbnN0IEFic3RyYWN0TG9ja2VyJiBsb2NrZXIsIEpTQzo6U2xvdFZp
c2l0b3ImIHZpc2l0b3IpCit2b2lkIFdlYkdMRnJhbWVidWZmZXI6OmFkZE1lbWJlcnNUb09wYXF1
ZVJvb3RzMzAwKGNvbnN0IEFic3RyYWN0TG9ja2VyJiBsb2NrZXIsIEpTQzo6QWJzdHJhY3RTbG90
VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBmb3IgKGF1dG8mIGVudHJ5IDogbV9hdHRhY2htZW50
cykKLSAgICAgICAgZW50cnkudmFsdWUtPmFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKGxvY2tlciwg
dmlzaXRvcik7CisgICAgICAgIGVudHJ5LnZhbHVlLT5hZGRNZW1iZXJzVG9PcGFxdWVSb290czQw
MChsb2NrZXIsIHZpc2l0b3IpOwogfQogCiB2b2lkIFdlYkdMRnJhbWVidWZmZXI6OnNldEF0dGFj
aG1lbnRJbnRlcm5hbChHQ0dMZW51bSBhdHRhY2htZW50LCBHQ0dMZW51bSB0ZXhUYXJnZXQsIFdl
YkdMVGV4dHVyZSogdGV4dHVyZSwgR0NHTGludCBsZXZlbCwgR0NHTGludCBsYXllcikKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRnJhbWVidWZmZXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEZyYW1lYnVmZmVyLmgJKHJldmlz
aW9uIDI3MTM2OCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRnJhbWVidWZm
ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQsOCBAQAogI2luY2x1ZGUgPHd0Zi9WZWN0
b3IuaD4KIAogbmFtZXNwYWNlIEpTQyB7Ci1jbGFzcyBTbG90VmlzaXRvcjsKKy8vY2xhc3MgU2xv
dFZpc2l0b3I7CitjbGFzcyBBYnN0cmFjdFNsb3RWaXNpdG9yOwogfQogCiBuYW1lc3BhY2UgV1RG
IHsKQEAgLTY1LDcgKzY2LDggQEAgcHVibGljOgogICAgICAgICB2aXJ0dWFsIHZvaWQgb25EZXRh
Y2hlZChjb25zdCBXVEY6OkFic3RyYWN0TG9ja2VyJiwgR3JhcGhpY3NDb250ZXh0R0wqKSA9IDA7
CiAgICAgICAgIHZpcnR1YWwgdm9pZCBhdHRhY2goR3JhcGhpY3NDb250ZXh0R0wqLCBHQ0dMZW51
bSB0YXJnZXQsIEdDR0xlbnVtIGF0dGFjaG1lbnQpID0gMDsKICAgICAgICAgdmlydHVhbCB2b2lk
IHVuYXR0YWNoKEdyYXBoaWNzQ29udGV4dEdMKiwgR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBh
dHRhY2htZW50KSA9IDA7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBhZGRNZW1iZXJzVG9PcGFxdWVS
b290cyhjb25zdCBXVEY6OkFic3RyYWN0TG9ja2VyJiwgSlNDOjpTbG90VmlzaXRvciYpID0gMDsK
Ky8vICAgICAgICB2aXJ0dWFsIHZvaWQgYWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMoY29uc3QgV1RG
OjpBYnN0cmFjdExvY2tlciYsIEpTQzo6U2xvdFZpc2l0b3ImKSA9IDA7CisgICAgICAgIHZpcnR1
YWwgdm9pZCBhZGRNZW1iZXJzVG9PcGFxdWVSb290czQwMChjb25zdCBXVEY6OkFic3RyYWN0TG9j
a2VyJiwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJikgPSAwOwogCiAgICAgcHJvdGVjdGVkOgog
ICAgICAgICBXZWJHTEF0dGFjaG1lbnQoKTsKQEAgLTExNCw3ICsxMTYsOCBAQCBwdWJsaWM6CiAK
ICAgICBHQ0dMZW51bSBnZXREcmF3QnVmZmVyKEdDR0xlbnVtKTsKIAotICAgIHZvaWQgYWRkTWVt
YmVyc1RvT3BhcXVlUm9vdHMoY29uc3QgV1RGOjpBYnN0cmFjdExvY2tlciYsIEpTQzo6U2xvdFZp
c2l0b3ImKTsKKy8vICAgIHZvaWQgYWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMoY29uc3QgV1RGOjpB
YnN0cmFjdExvY2tlciYsIEpTQzo6U2xvdFZpc2l0b3ImKTsKKyAgICB2b2lkIGFkZE1lbWJlcnNU
b09wYXF1ZVJvb3RzMzAwKGNvbnN0IFdURjo6QWJzdHJhY3RMb2NrZXImLCBKU0M6OkFic3RyYWN0
U2xvdFZpc2l0b3ImKTsKIAogcHJpdmF0ZToKICAgICBXZWJHTEZyYW1lYnVmZmVyKFdlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2UmKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dl
YkdMUHJvZ3JhbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
V2ViR0xQcm9ncmFtLmNwcAkocmV2aXNpb24gMjcxMzY4KQorKysgU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvV2ViR0xQcm9ncmFtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjA2LDcgKzIwNiw4
IEBAIGJvb2wgV2ViR0xQcm9ncmFtOjpkZXRhY2hTaGFkZXIoY29uc3QgQWIKICAgICB9CiB9CiAK
LXZvaWQgV2ViR0xQcm9ncmFtOjphZGRNZW1iZXJzVG9PcGFxdWVSb290cyhjb25zdCBBYnN0cmFj
dExvY2tlciYsIEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3ZvaWQgV2ViR0xQcm9ncmFt
OjphZGRNZW1iZXJzVG9PcGFxdWVSb290cyhjb25zdCBBYnN0cmFjdExvY2tlciYsIEpTQzo6U2xv
dFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIFdlYkdMUHJvZ3JhbTo6YWRkTWVtYmVyc1RvT3BhcXVl
Um9vdHMyMDAoY29uc3QgQWJzdHJhY3RMb2NrZXImLCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3Im
IHZpc2l0b3IpCiB7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KG1fdmVydGV4U2hhZGVyLmdl
dCgpKTsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QobV9mcmFnbWVudFNoYWRlci5nZXQoKSk7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFByb2dyYW0uaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFByb2dyYW0uaAkocmV2aXNp
b24gMjcxMzY4KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xQcm9ncmFtLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTM1LDcgKzM1LDggQEAKICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+
CiAKIG5hbWVzcGFjZSBKU0MgewotY2xhc3MgU2xvdFZpc2l0b3I7CisvL2NsYXNzIFNsb3RWaXNp
dG9yOworY2xhc3MgQWJzdHJhY3RTbG90VmlzaXRvcjsKIH0KIAogbmFtZXNwYWNlIFdURiB7CkBA
IC04OCw3ICs4OSw4IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fcmVxdWlyZWRUcmFuc2Zv
cm1GZWVkYmFja0J1ZmZlckNvdW50OwogICAgIH0KIAotICAgIHZvaWQgYWRkTWVtYmVyc1RvT3Bh
cXVlUm9vdHMoY29uc3QgV1RGOjpBYnN0cmFjdExvY2tlciYsIEpTQzo6U2xvdFZpc2l0b3ImKTsK
Ky8vICAgIHZvaWQgYWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMoY29uc3QgV1RGOjpBYnN0cmFjdExv
Y2tlciYsIEpTQzo6U2xvdFZpc2l0b3ImKTsKKyAgICB2b2lkIGFkZE1lbWJlcnNUb09wYXF1ZVJv
b3RzMjAwKGNvbnN0IFdURjo6QWJzdHJhY3RMb2NrZXImLCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0
b3ImKTsKIAogcHJpdmF0ZToKICAgICBXZWJHTFByb2dyYW0oV2ViR0xSZW5kZXJpbmdDb250ZXh0
QmFzZSYpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHAJKHJldmlzaW9uIDI3MTM2OCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC03OTI3LDIzICs3OTI3LDI2IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZTo6ZGlzcGF0Y2gKICAgICBxdWV1ZVRhc2tUb0Rpc3BhdGNoRXZlbnQoKmNhbnZhcywg
VGFza1NvdXJjZTo6V2ViR0wsIFdlYkdMQ29udGV4dEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygp
LndlYmdsY29udGV4dGNoYW5nZWRFdmVudCwgRXZlbnQ6OkNhbkJ1YmJsZTo6Tm8sIEV2ZW50OjpJ
c0NhbmNlbGFibGU6OlllcywgZW1wdHlTdHJpbmcoKSkpOwogfQogCi12b2lkIFdlYkdMUmVuZGVy
aW5nQ29udGV4dEJhc2U6OmFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKEpTQzo6U2xvdFZpc2l0b3Im
IHZpc2l0b3IpCisvL3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6YWRkTWVtYmVyc1Rv
T3BhcXVlUm9vdHMoSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgV2ViR0xSZW5kZXJp
bmdDb250ZXh0QmFzZTo6YWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMoSlNDOjpBYnN0cmFjdFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQogewogICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sob2JqZWN0R3Jh
cGhMb2NrKCkpOwogCisgICAgLy8gbWxhbSBGSVhNRTogd2h5IGFyZSB3ZSBub3QgYWxzbyB2aXNp
dGluZyBtX2RlZmF1bHRWZXJ0ZXhBcnJheU9iamVjdD8KKwogICAgIHZpc2l0b3IuYWRkT3BhcXVl
Um9vdChtX2JvdW5kQXJyYXlCdWZmZXIuZ2V0KCkpOwogCiAgICAgdmlzaXRvci5hZGRPcGFxdWVS
b290KG1fYm91bmRWZXJ0ZXhBcnJheU9iamVjdC5nZXQoKSk7CiAgICAgaWYgKG1fYm91bmRWZXJ0
ZXhBcnJheU9iamVjdCkKLSAgICAgICAgbV9ib3VuZFZlcnRleEFycmF5T2JqZWN0LT5hZGRNZW1i
ZXJzVG9PcGFxdWVSb290cyhsb2NrZXIsIHZpc2l0b3IpOworICAgICAgICBtX2JvdW5kVmVydGV4
QXJyYXlPYmplY3QtPmFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzNjAwKGxvY2tlciwgdmlzaXRvcik7
CiAKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QobV9jdXJyZW50UHJvZ3JhbS5nZXQoKSk7CiAg
ICAgaWYgKG1fY3VycmVudFByb2dyYW0pCi0gICAgICAgIG1fY3VycmVudFByb2dyYW0tPmFkZE1l
bWJlcnNUb09wYXF1ZVJvb3RzKGxvY2tlciwgdmlzaXRvcik7CisgICAgICAgIG1fY3VycmVudFBy
b2dyYW0tPmFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzMjAwKGxvY2tlciwgdmlzaXRvcik7CiAKICAg
ICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QobV9mcmFtZWJ1ZmZlckJpbmRpbmcuZ2V0KCkpOwogICAg
IGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZykKLSAgICAgICAgbV9mcmFtZWJ1ZmZlckJpbmRpbmct
PmFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKGxvY2tlciwgdmlzaXRvcik7CisgICAgICAgIG1fZnJh
bWVidWZmZXJCaW5kaW5nLT5hZGRNZW1iZXJzVG9PcGFxdWVSb290czMwMChsb2NrZXIsIHZpc2l0
b3IpOwogCiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KG1fcmVuZGVyYnVmZmVyQmluZGluZy5n
ZXQoKSk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9X
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmgJKHJldmlzaW9uIDI3MTM2OCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuaAkod29ya2luZyBj
b3B5KQpAQCAtNTgsNyArNTgsOCBAQAogI2VuZGlmCiAKIG5hbWVzcGFjZSBKU0MgewotY2xhc3Mg
U2xvdFZpc2l0b3I7CisvL2NsYXNzIFNsb3RWaXNpdG9yOworY2xhc3MgQWJzdHJhY3RTbG90Vmlz
aXRvcjsKIH0KIAogbmFtZXNwYWNlIFdURiB7CkBAIC00MTAsNyArNDExLDggQEAgcHVibGljOgog
ICAgIHZvaWQgcmVjeWNsZUNvbnRleHQoKSBvdmVycmlkZTsKICAgICB2b2lkIGRpc3BhdGNoQ29u
dGV4dENoYW5nZWROb3RpZmljYXRpb24oKSBvdmVycmlkZTsKIAotICAgIHZpcnR1YWwgdm9pZCBh
ZGRNZW1iZXJzVG9PcGFxdWVSb290cyhKU0M6OlNsb3RWaXNpdG9yJik7CisvLyAgICB2aXJ0dWFs
IHZvaWQgYWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMoSlNDOjpTbG90VmlzaXRvciYpOworICAgIHZp
cnR1YWwgdm9pZCBhZGRNZW1iZXJzVG9PcGFxdWVSb290cyhKU0M6OkFic3RyYWN0U2xvdFZpc2l0
b3ImKTsKICAgICAvLyBUaGlzIGxvY2sgbXVzdCBiZSBoZWxkIGFjcm9zcyBhbGwgbXV0YXRpb25z
IG9mIGNvbnRhaW5lcnMgbGlrZQogICAgIC8vIFZlY3RvcnMsIEhhc2hTZXRzLCBldGMuIHdoaWNo
IGNvbnRhaW4gUmVmUHRyPFdlYkdMT2JqZWN0PiwgYW5kCiAgICAgLy8gd2hpY2ggYXJlIHRyYXZl
cnNlZCBieSBhZGRNZW1iZXJzVG9PcGFxdWVSb290cygpIG9yIGFueSBvZiB0aGUKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVHJhbnNmb3JtRmVlZGJhY2suY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVHJhbnNmb3JtRmVlZGJh
Y2suY3BwCShyZXZpc2lvbiAyNzEzNjgpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9X
ZWJHTFRyYW5zZm9ybUZlZWRiYWNrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsOCArMzAsOSBA
QAogCiAjaW5jbHVkZSAiV2ViR0xDb250ZXh0R3JvdXAuaCIKICNpbmNsdWRlICJXZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvU2xvdFZpc2l0b3Iu
aD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9TbG90VmlzaXRvcklubGluZXMuaD4KKy8vI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL1Nsb3RWaXNpdG9yLmg+CisvLyNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9TbG90VmlzaXRvcklubGluZXMuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9B
YnN0cmFjdFNsb3RWaXNpdG9ySW5saW5lcy5oPgogI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CiAjaW5j
bHVkZSA8d3RmL0xvY2tlci5oPgogCkBAIC05MywxNCArOTQsMTUgQEAgYm9vbCBXZWJHTFRyYW5z
Zm9ybUZlZWRiYWNrOjpoYXNFbm91Z2hCdQogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIFdl
YkdMVHJhbnNmb3JtRmVlZGJhY2s6OmFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKGNvbnN0IEFic3Ry
YWN0TG9ja2VyJiBsb2NrZXIsIEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3ZvaWQgV2Vi
R0xUcmFuc2Zvcm1GZWVkYmFjazo6YWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMoY29uc3QgQWJzdHJh
Y3RMb2NrZXImIGxvY2tlciwgSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgV2ViR0xU
cmFuc2Zvcm1GZWVkYmFjazo6YWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMxMDAoY29uc3QgQWJzdHJh
Y3RMb2NrZXImIGxvY2tlciwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewog
ICAgIGZvciAoYXV0byYgYnVmZmVyIDogbV9ib3VuZEluZGV4ZWRUcmFuc2Zvcm1GZWVkYmFja0J1
ZmZlcnMpCiAgICAgICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChidWZmZXIuZ2V0KCkpOwogCiAg
ICAgdmlzaXRvci5hZGRPcGFxdWVSb290KG1fcHJvZ3JhbS5nZXQoKSk7CiAgICAgaWYgKG1fcHJv
Z3JhbSkKLSAgICAgICAgbV9wcm9ncmFtLT5hZGRNZW1iZXJzVG9PcGFxdWVSb290cyhsb2NrZXIs
IHZpc2l0b3IpOworICAgICAgICBtX3Byb2dyYW0tPmFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzMjAw
KGxvY2tlciwgdmlzaXRvcik7CiB9CiAKIHZvaWQgV2ViR0xUcmFuc2Zvcm1GZWVkYmFjazo6dW5i
aW5kQnVmZmVyKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgV2ViR0xCdWZmZXImIGJ1ZmZlcikKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVHJhbnNmb3JtRmVlZGJhY2suaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFRyYW5zZm9ybUZl
ZWRiYWNrLmgJKHJldmlzaW9uIDI3MTM2OCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L1dlYkdMVHJhbnNmb3JtRmVlZGJhY2suaAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsOCBA
QAogI2luY2x1ZGUgIldlYkdMU2hhcmVkT2JqZWN0LmgiCiAKIG5hbWVzcGFjZSBKU0MgewotY2xh
c3MgU2xvdFZpc2l0b3I7CisvL2NsYXNzIFNsb3RWaXNpdG9yOworY2xhc3MgQWJzdHJhY3RTbG90
VmlzaXRvcjsKIH0KIAogbmFtZXNwYWNlIFdURiB7CkBAIC03MCw3ICs3MSw4IEBAIHB1YmxpYzoK
ICAgICAKICAgICBib29sIGhhc0Vub3VnaEJ1ZmZlcnMoR0NHTHVpbnQgbnVtUmVxdWlyZWQpIGNv
bnN0OwogCi0gICAgdm9pZCBhZGRNZW1iZXJzVG9PcGFxdWVSb290cyhjb25zdCBBYnN0cmFjdExv
Y2tlciYsIEpTQzo6U2xvdFZpc2l0b3ImKTsKKy8vICAgIHZvaWQgYWRkTWVtYmVyc1RvT3BhcXVl
Um9vdHMoY29uc3QgQWJzdHJhY3RMb2NrZXImLCBKU0M6OlNsb3RWaXNpdG9yJik7CisgICAgdm9p
ZCBhZGRNZW1iZXJzVG9PcGFxdWVSb290czEwMChjb25zdCBBYnN0cmFjdExvY2tlciYsIEpTQzo6
QWJzdHJhY3RTbG90VmlzaXRvciYpOwogCiBwcml2YXRlOgogICAgIFdlYkdMVHJhbnNmb3JtRmVl
ZGJhY2soV2ViR0wyUmVuZGVyaW5nQ29udGV4dCYpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvV2ViR0xWZXJ0ZXhBcnJheU9iamVjdEJhc2UuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVmVydGV4QXJyYXlPYmplY3RCYXNlLmNwcAko
cmV2aXNpb24gMjcxMzY4KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xWZXJ0
ZXhBcnJheU9iamVjdEJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw4ICsyOSw5IEBACiAj
aWYgRU5BQkxFKFdFQkdMKQogCiAjaW5jbHVkZSAiV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5o
IgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1Nsb3RWaXNpdG9yLmg+Ci0jaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvU2xvdFZpc2l0b3JJbmxpbmVzLmg+CisvLyNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9TbG90VmlzaXRvci5oPgorLy8jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvU2xvdFZpc2l0
b3JJbmxpbmVzLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvQWJzdHJhY3RTbG90VmlzaXRv
cklubGluZXMuaD4KICNpbmNsdWRlIDx3dGYvTG9ja2VyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKQEAgLTEwOCw3ICsxMDksOCBAQCB2b2lkIFdlYkdMVmVydGV4QXJyYXlPYmplY3RCYXNlOjpz
ZXRWZXJ0CiAgICAgbV92ZXJ0ZXhBdHRyaWJTdGF0ZVtpbmRleF0uZGl2aXNvciA9IGRpdmlzb3I7
CiB9CiAKLXZvaWQgV2ViR0xWZXJ0ZXhBcnJheU9iamVjdEJhc2U6OmFkZE1lbWJlcnNUb09wYXF1
ZVJvb3RzKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikK
Ky8vdm9pZCBXZWJHTFZlcnRleEFycmF5T2JqZWN0QmFzZTo6YWRkTWVtYmVyc1RvT3BhcXVlUm9v
dHM2MDAoY29uc3QgQWJzdHJhY3RMb2NrZXImLCBKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQor
dm9pZCBXZWJHTFZlcnRleEFycmF5T2JqZWN0QmFzZTo6YWRkTWVtYmVyc1RvT3BhcXVlUm9vdHM2
MDAoY29uc3QgQWJzdHJhY3RMb2NrZXImLCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0
b3IpCiB7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KG1fYm91bmRFbGVtZW50QXJyYXlCdWZm
ZXIuZ2V0KCkpOwogICAgIGZvciAoYXV0byYgc3RhdGUgOiBtX3ZlcnRleEF0dHJpYlN0YXRlKQpJ
bmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xWZXJ0ZXhBcnJheU9iamVjdEJh
c2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFZlcnRl
eEFycmF5T2JqZWN0QmFzZS5oCShyZXZpc2lvbiAyNzEzNjgpCisrKyBTb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9XZWJHTFZlcnRleEFycmF5T2JqZWN0QmFzZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zMiw3ICszMiw4IEBACiAjaW5jbHVkZSAiV2ViR0xDb250ZXh0T2JqZWN0LmgiCiAKIG5hbWVz
cGFjZSBKU0MgewotY2xhc3MgU2xvdFZpc2l0b3I7CisvL2NsYXNzIFNsb3RWaXNpdG9yOworY2xh
c3MgQWJzdHJhY3RTbG90VmlzaXRvcjsKIH0KIAogbmFtZXNwYWNlIFdURiB7CkBAIC03Niw3ICs3
Nyw4IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgc2V0VmVydGV4QXR0cmliRGl2aXNvcihHQ0dMdWlu
dCBpbmRleCwgR0NHTHVpbnQgZGl2aXNvcik7CiAKLSAgICB2b2lkIGFkZE1lbWJlcnNUb09wYXF1
ZVJvb3RzKGNvbnN0IFdURjo6QWJzdHJhY3RMb2NrZXImLCBKU0M6OlNsb3RWaXNpdG9yJik7Cisv
LyAgICB2b2lkIGFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzNjAwKGNvbnN0IFdURjo6QWJzdHJhY3RM
b2NrZXImLCBKU0M6OlNsb3RWaXNpdG9yJik7CisgICAgdm9pZCBhZGRNZW1iZXJzVG9PcGFxdWVS
b290czYwMChjb25zdCBXVEY6OkFic3RyYWN0TG9ja2VyJiwgSlNDOjpBYnN0cmFjdFNsb3RWaXNp
dG9yJik7CiAKIHByb3RlY3RlZDoKICAgICBXZWJHTFZlcnRleEFycmF5T2JqZWN0QmFzZShXZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlJiwgVHlwZSk7Cg==
</data>
<flag name="commit-queue"
          id="435197"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>417561</attachid>
            <date>2021-01-13 14:03:33 -0800</date>
            <delta_ts>2021-01-13 14:30:49 -0800</delta_ts>
            <desc>work in progress.</desc>
            <filename>bug-217274.patch</filename>
            <type>text/plain</type>
            <size>459117</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDI3MTQ0MykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtNjEwLDYgKzYxMCw4IEBAIHNldChKYXZhU2NyaXB0Q29yZV9QUklWQVRFX0ZSQU1FV09SS19I
RUEKICAgICBkb21qaXQvRE9NSklUSGVhcFJhbmdlLmgKICAgICBkb21qaXQvRE9NSklUU2lnbmF0
dXJlLmgKIAorICAgIGhlYXAvQWJzdHJhY3RTbG90VmlzaXRvci5oCisgICAgaGVhcC9BYnN0cmFj
dFNsb3RWaXNpdG9ySW5saW5lcy5oCiAgICAgaGVhcC9BbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmgK
ICAgICBoZWFwL0FsbG9jYXRpb25GYWlsdXJlTW9kZS5oCiAgICAgaGVhcC9BbGxvY2F0b3IuaApA
QCAtNjI5LDYgKzYzMSw4IEBAIHNldChKYXZhU2NyaXB0Q29yZV9QUklWQVRFX0ZSQU1FV09SS19I
RUEKICAgICBoZWFwL0NvbnN0cmFpbnRDb25jdXJyZW5jeS5oCiAgICAgaGVhcC9Db25zdHJhaW50
UGFyYWxsZWxpc20uaAogICAgIGhlYXAvQ29uc3RyYWludFZvbGF0aWxpdHkuaAorICAgIGhlYXAv
RGVidWdTbG90VmlzaXRvci5oCisgICAgaGVhcC9EZWJ1Z1Nsb3RWaXNpdG9ySW5saW5lcy5oCiAg
ICAgaGVhcC9EZWZlckdDLmgKICAgICBoZWFwL0RlbGV0ZUFsbENvZGVFZmZvcnQuaAogICAgIGhl
YXAvRGVzdHJ1Y3Rpb25Nb2RlLmgKQEAgLTY4Myw2ICs2ODcsNyBAQCBzZXQoSmF2YVNjcmlwdENv
cmVfUFJJVkFURV9GUkFNRVdPUktfSEVBCiAgICAgaGVhcC9TaW1wbGVNYXJraW5nQ29uc3RyYWlu
dC5oCiAgICAgaGVhcC9TbG90VmlzaXRvci5oCiAgICAgaGVhcC9TbG90VmlzaXRvcklubGluZXMu
aAorICAgIGhlYXAvU2xvdFZpc2l0b3JNYWNyb3MuaAogICAgIGhlYXAvU3Ryb25nLmgKICAgICBo
ZWFwL1N0cm9uZ0lubGluZXMuaAogICAgIGhlYXAvU3Vic3BhY2UuaApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9Tb3VyY2VzLnR4dAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL1NvdXJjZXMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC01MDMsNiArNTAzLDcgQEAgZnRsL0ZU
TFN0YXRlLmNwcAogZnRsL0ZUTFRodW5rcy5jcHAKIGZ0bC9GVExWYWx1ZVJhbmdlLmNwcAogCito
ZWFwL0Fic3RyYWN0U2xvdFZpc2l0b3IuY3BwCiBoZWFwL0FsaWduZWRNZW1vcnlBbGxvY2F0b3Iu
Y3BwCiBoZWFwL0FsbG9jYXRvci5jcHAKIGhlYXAvQmxvY2tEaXJlY3RvcnkuY3BwCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQVBJV3JhcHBlck9iamVjdC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNBUElXcmFwcGVyT2JqZWN0LmgJKHJldmlz
aW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNBUElXcmFwcGVyT2Jq
ZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00MSw3ICs0MSw3IEBAIHB1YmxpYzoKICAgICBzdGF0
aWMgdm9pZCBzdWJzcGFjZUZvcihWTSYpIHsgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsg
fQogICAgIAogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKLSAgICBzdGF0aWMgdm9pZCB2
aXNpdENoaWxkcmVuKEpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX0VY
UE9SVF9WSVNJVF9DSElMRFJFTjsKICAgICAKICAgICB2b2lkKiB3cmFwcGVkT2JqZWN0KCkgeyBy
ZXR1cm4gbV93cmFwcGVkT2JqZWN0OyB9CiAgICAgdm9pZCBzZXRXcmFwcGVkT2JqZWN0KHZvaWQq
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNBUElXcmFwcGVyT2JqZWN0Lm1t
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNBUElXcmFwcGVyT2Jq
ZWN0Lm1tCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pT
QVBJV3JhcHBlck9iamVjdC5tbQkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM3LDcgKzM3LDcgQEAKIGNs
YXNzIEpTQVBJV3JhcHBlck9iamVjdEhhbmRsZU93bmVyIGZpbmFsIDogcHVibGljIEpTQzo6V2Vh
a0hhbmRsZU93bmVyIHsKIHB1YmxpYzoKICAgICB2b2lkIGZpbmFsaXplKEpTQzo6SGFuZGxlPEpT
Qzo6VW5rbm93bj4sIHZvaWQqKSBmaW5hbDsKLSAgICBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1
ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6U2xv
dFZpc2l0b3ImLCBjb25zdCBjaGFyKiopIGZpbmFsOworICAgIGJvb2wgaXNSZWFjaGFibGVGcm9t
T3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCwgSlND
OjpBYnN0cmFjdFNsb3RWaXNpdG9yJiwgY29uc3QgY2hhcioqKSBmaW5hbDsKIH07CiAKIHN0YXRp
YyBKU0FQSVdyYXBwZXJPYmplY3RIYW5kbGVPd25lcioganNBUElXcmFwcGVyT2JqZWN0SGFuZGxl
T3duZXIoKQpAQCAtNTYsNyArNTYsNyBAQCB2b2lkIEpTQVBJV3JhcHBlck9iamVjdEhhbmRsZU93
bmVyOjpmaW5hCiAgICAgSlNDOjpXZWFrU2V0OjpkZWFsbG9jYXRlKEpTQzo6V2Vha0ltcGw6OmFz
V2Vha0ltcGwoaGFuZGxlLnNsb3QoKSkpOwogfQogCi1ib29sIEpTQVBJV3JhcHBlck9iamVjdEhh
bmRsZU93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVu
a25vd24+IGhhbmRsZSwgdm9pZCosIEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNo
YXIqKikKK2Jvb2wgSlNBUElXcmFwcGVyT2JqZWN0SGFuZGxlT3duZXI6OmlzUmVhY2hhYmxlRnJv
bU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgSlND
OjpBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiopCiB7CiAgICAgSlND
OjpKU0FQSVdyYXBwZXJPYmplY3QqIHdyYXBwZXJPYmplY3QgPSBKU0M6OmpzQ2FzdDxKU0M6OkpT
QVBJV3JhcHBlck9iamVjdCo+KGhhbmRsZS5nZXQoKS5hc0NlbGwoKSk7CiAgICAgLy8gV2UgdXNl
IHRoZSBKU0dsb2JhbE9iamVjdCB3aGVuIHByb2Nlc3Npbmcgd2VhayBoYW5kbGVzIHRvIHByZXZl
bnQgdGhlIHNpdHVhdGlvbiB3aGVyZSB1c2luZwpAQCAtNzMsNiArNzMsOCBAQCBzdGF0aWMgSlND
X0RFQ0xBUkVfSE9TVF9GVU5DVElPTihjb25zdHJ1CiBzdGF0aWMgSlNDX0RFQ0xBUkVfQ1VTVE9N
X0dFVFRFUihjYWxsYmFja0dldHRlckpTQVBJV3JhcHBlck9iamVjdENhbGxiYWNrT2JqZWN0KTsK
IHN0YXRpYyBKU0NfREVDTEFSRV9DVVNUT01fR0VUVEVSKHN0YXRpY0Z1bmN0aW9uR2V0dGVySlNB
UElXcmFwcGVyT2JqZWN0Q2FsbGJhY2tPYmplY3QpOwogCitERUZJTkVfVEVNUExBVEVfVklTSVRf
Q0hJTERSRU4odGVtcGxhdGU8PiwgSlNDYWxsYmFja09iamVjdDxKU0FQSVdyYXBwZXJPYmplY3Q+
KTsKKwogdGVtcGxhdGUgPD4gY29uc3QgQ2xhc3NJbmZvIEpTQ2FsbGJhY2tPYmplY3Q8SlNBUElX
cmFwcGVyT2JqZWN0Pjo6c19pbmZvID0geyAiSlNBUElXcmFwcGVyT2JqZWN0IiwgJkJhc2U6OnNf
aW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU0NhbGxiYWNrT2Jq
ZWN0KSB9OwogdGVtcGxhdGUgPD4gY29uc3QgYm9vbCBKU0NhbGxiYWNrT2JqZWN0PEpTQVBJV3Jh
cHBlck9iamVjdD46Om5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOwogCkBAIC0xMjMsNyArMTI1LDgg
QEAgdm9pZCBKU0FQSVdyYXBwZXJPYmplY3Q6OnNldFdyYXBwZWRPYmplYwogICAgIG1fd3JhcHBl
ZE9iamVjdCA9IFtzdGF0aWNfY2FzdDxpZD4od3JhcHBlZE9iamVjdCkgcmV0YWluXTsKIH0KIAot
dm9pZCBKU0FQSVdyYXBwZXJPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBKU0M6
OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQg
SlNBUElXcmFwcGVyT2JqZWN0Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0
b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNBUElXcmFwcGVyT2JqZWN0KiB0aGlzT2JqZWN0ID0gSlND
Ojpqc0Nhc3Q8SlNBUElXcmFwcGVyT2JqZWN0Kj4oY2VsbCk7CiAgICAgQmFzZTo6dmlzaXRDaGls
ZHJlbihjZWxsLCB2aXNpdG9yKTsKQEAgLTEzMyw2ICsxMzYsOCBAQCB2b2lkIEpTQVBJV3JhcHBl
ck9iamVjdDo6dmlzaXRDaGlsZHJlbihKCiAgICAgICAgIHNjYW5FeHRlcm5hbE9iamVjdEdyYXBo
KHZpc2l0b3Iudm0oKSwgdmlzaXRvciwgd3JhcHBlZE9iamVjdCk7CiB9CiAKK0RFRklORV9FWFBP
UlRfVklTSVRfQ0hJTERSRU4oSlNBUElXcmFwcGVyT2JqZWN0KTsKKwogdGVtcGxhdGUgPD4KIElz
b1N1YnNwYWNlKiBKU0NhbGxiYWNrT2JqZWN0PEpTQVBJV3JhcHBlck9iamVjdD46OnN1YnNwYWNl
Rm9ySW1wbChWTSYgdm0sIFN1YnNwYWNlQWNjZXNzIG1vZGUpCiB7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdC5jcHAJKHJldmlzaW9uIDI3MTQ0
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA2LTIw
MTcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAw
Ni0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykg
MjAwNyBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAt
NDEsNiArNDEsOSBAQCBzdGF0aWMgSlNDX0RFQ0xBUkVfQ1VTVE9NX0dFVFRFUihzdGF0aWNGCiBz
dGF0aWMgSlNDX0RFQ0xBUkVfQ1VTVE9NX0dFVFRFUihjYWxsYmFja0dldHRlckpTR2xvYmFsT2Jq
ZWN0Q2FsbGJhY2tPYmplY3QpOwogc3RhdGljIEpTQ19ERUNMQVJFX0NVU1RPTV9HRVRURVIoc3Rh
dGljRnVuY3Rpb25HZXR0ZXJKU0dsb2JhbE9iamVjdENhbGxiYWNrT2JqZWN0KTsKIAorREVGSU5F
X1RFTVBMQVRFX1ZJU0lUX0NISUxEUkVOKHRlbXBsYXRlPD4sIEpTQ2FsbGJhY2tPYmplY3Q8SlNO
b25GaW5hbE9iamVjdD4pOworREVGSU5FX1RFTVBMQVRFX1ZJU0lUX0NISUxEUkVOKHRlbXBsYXRl
PD4sIEpTQ2FsbGJhY2tPYmplY3Q8SlNHbG9iYWxPYmplY3Q+KTsKKwogLy8gRGVmaW5lIHRoZSB0
d28gdHlwZXMgb2YgSlNDYWxsYmFja09iamVjdHMgd2Ugc3VwcG9ydC4KIHRlbXBsYXRlIDw+IGNv
bnN0IENsYXNzSW5mbyBKU0NhbGxiYWNrT2JqZWN0PEpTTm9uRmluYWxPYmplY3Q+OjpzX2luZm8g
PSB7ICJDYWxsYmFja09iamVjdCIsICZCYXNlOjpzX2luZm8sIG51bGxwdHIsIG51bGxwdHIsIENS
RUFURV9NRVRIT0RfVEFCTEUoSlNDYWxsYmFja09iamVjdCkgfTsKIHRlbXBsYXRlIDw+IGNvbnN0
IENsYXNzSW5mbyBKU0NhbGxiYWNrT2JqZWN0PEpTR2xvYmFsT2JqZWN0Pjo6c19pbmZvID0geyAi
Q2FsbGJhY2tHbG9iYWxPYmplY3QiLCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBudWxscHRyLCBD
UkVBVEVfTUVUSE9EX1RBQkxFKEpTQ2FsbGJhY2tPYmplY3QpIH07CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3QuaAkocmV2aXNpb24gMjcxNDQzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTY5LDcgKzY5LDEwIEBAIHB1YmxpYzoKICAgICAgICAgbV9wcml2YXRlUHJvcGVy
dGllcy0+ZGVsZXRlUHJpdmF0ZVByb3BlcnR5KHByb3BlcnR5TmFtZSk7CiAgICAgfQogCi0gICAg
dm9pZCB2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorICAgIERFQ0xBUkVfVklT
SVRfQ0hJTERSRU47CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgorICAgIHZvaWQg
dmlzaXRDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogICAgIHsKICAgICAgICAgSlNQcml2YXRl
UHJvcGVydHlNYXAqIHByb3BlcnRpZXMgPSBtX3ByaXZhdGVQcm9wZXJ0aWVzLmdldCgpOwogICAg
ICAgICBpZiAoIXByb3BlcnRpZXMpCkBAIC0xMDMsNyArMTA2LDggQEAgcHVibGljOgogICAgICAg
ICAgICAgbV9wcm9wZXJ0eU1hcC5yZW1vdmUocHJvcGVydHlOYW1lLmltcGwoKSk7CiAgICAgICAg
IH0KIAotICAgICAgICB2b2lkIHZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisg
ICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+CisgICAgICAgIHZvaWQgdmlzaXRDaGls
ZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogICAgICAgICB7CiAgICAgICAgICAgICBMb2NrSG9sZGVy
IGxvY2tlcihtX2xvY2spOwogICAgICAgICAgICAgZm9yIChhdXRvJiBwYWlyIDogbV9wcm9wZXJ0
eU1hcCkgewpAQCAtMjE2LDEzICsyMjAsNyBAQCBwcml2YXRlOgogICAgIHN0YXRpYyBDYWxsRGF0
YSBnZXRDb25zdHJ1Y3REYXRhKEpTQ2VsbCopOwogICAgIHN0YXRpYyBDYWxsRGF0YSBnZXRDYWxs
RGF0YShKU0NlbGwqKTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBj
ZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKLSAgICB7Ci0gICAgICAgIEpTQ2FsbGJhY2tPYmpl
Y3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNDYWxsYmFja09iamVjdCo+KGNlbGwpOwotICAgICAg
ICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKChzdGF0aWNfY2FzdDxQYXJlbnQqPih0aGlzT2Jq
ZWN0KSksIEpTQ2FsbGJhY2tPYmplY3Q8UGFyZW50Pjo6aW5mbygpKTsKLSAgICAgICAgUGFyZW50
Ojp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwotICAgICAgICB0aGlzT2JqZWN0
LT5tX2NhbGxiYWNrT2JqZWN0RGF0YS0+dmlzaXRDaGlsZHJlbih2aXNpdG9yKTsKLSAgICB9Cisg
ICAgREVDTEFSRV9URU1QTEFURV9WSVNJVF9DSElMRFJFTjsKIAogICAgIHZvaWQgaW5pdChKU0ds
b2JhbE9iamVjdCopOwogIApAQCAtMjQ1LDYgKzI0MywxNiBAQCBwcml2YXRlOgogICAgIGNvbnN0
IENsYXNzSW5mbyogbV9jbGFzc0luZm8geyBudWxscHRyIH07CiB9OwogCit0ZW1wbGF0ZSA8Y2xh
c3MgUGFyZW50PgordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNDYWxsYmFja09i
amVjdDxQYXJlbnQ+Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZp
c2l0b3IpCit7CisgICAgSlNDYWxsYmFja09iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0Nh
bGxiYWNrT2JqZWN0Kj4oY2VsbCk7CisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUygoc3Rh
dGljX2Nhc3Q8UGFyZW50Kj4odGhpc09iamVjdCkpLCBKU0NhbGxiYWNrT2JqZWN0PFBhcmVudD46
OmluZm8oKSk7CisgICAgUGFyZW50Ojp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3Ip
OworICAgIHRoaXNPYmplY3QtPm1fY2FsbGJhY2tPYmplY3REYXRhLT52aXNpdENoaWxkcmVuKHZp
c2l0b3IpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogLy8gaW5jbHVkZSB0aGUgYWN0dWFs
IHRlbXBsYXRlIGNsYXNzIGltcGxlbWVudGF0aW9uCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvQVBJL0pTTWFuYWdlZFZhbHVlLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9BUEkvSlNNYW5hZ2VkVmFsdWUubW0JKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9BUEkvSlNNYW5hZ2VkVmFsdWUubW0JKHdvcmtpbmcgY29weSkKQEAgLTQy
LDcgKzQyLDcgQEAKIGNsYXNzIEpTTWFuYWdlZFZhbHVlSGFuZGxlT3duZXIgZmluYWwgOiBwdWJs
aWMgSlNDOjpXZWFrSGFuZGxlT3duZXIgewogcHVibGljOgogICAgIHZvaWQgZmluYWxpemUoSlND
OjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCkgZmluYWw7Ci0gICAgYm9vbCBp
c1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lk
KiBjb250ZXh0LCBKU0M6OlNsb3RWaXNpdG9yJiwgY29uc3QgY2hhcioqKSBmaW5hbDsKKyAgICBi
b29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4s
IHZvaWQqIGNvbnRleHQsIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYsIGNvbnN0IGNoYXIqKikg
ZmluYWw7CiB9OwogCiBzdGF0aWMgSlNNYW5hZ2VkVmFsdWVIYW5kbGVPd25lciYgbWFuYWdlZFZh
bHVlSGFuZGxlT3duZXIoKQpAQCAtMTgwLDcgKzE4MCw3IEBAIEBpbnRlcmZhY2UgSlNNYW5hZ2Vk
VmFsdWUgKFByaXZhdGVNZXRob2QKIC0gKHZvaWQpZGlzY29ubmVjdFZhbHVlOwogQGVuZAogCi1i
b29sIEpTTWFuYWdlZFZhbHVlSGFuZGxlT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3Rz
KEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6U2xvdFZpc2l0
b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCitib29sIEpTTWFuYWdlZFZhbHVlSGFu
ZGxlT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5r
bm93bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvciwg
Y29uc3QgY2hhcioqIHJlYXNvbikKIHsKICAgICBpZiAoVU5MSUtFTFkocmVhc29uKSkKICAgICAg
ICAgKnJlYXNvbiA9ICJKU01hbmFnZWRWYWx1ZSBpcyBvcGFxdWUgcm9vdCI7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTTWFya2luZ0NvbnN0cmFpbnRQcml2YXRlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTTWFya2luZ0NvbnN0cmFpbnRQ
cml2YXRlLmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQ
SS9KU01hcmtpbmdDb25zdHJhaW50UHJpdmF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDcg
KzM2LDcgQEAgbmFtZXNwYWNlIHsKIEF0b21pYzx1bnNpZ25lZD4gY29uc3RyYWludENvdW50ZXI7
CiAKIHN0cnVjdCBNYXJrZXIgOiBKU01hcmtlciB7Ci0gICAgU2xvdFZpc2l0b3IqIHZpc2l0b3I7
CisgICAgQWJzdHJhY3RTbG90VmlzaXRvciogdmlzaXRvcjsKIH07CiAKIGJvb2wgaXNNYXJrZWQo
SlNNYXJrZXJSZWYgbWFya2VyUmVmLCBKU09iamVjdFJlZiBvYmplY3RSZWYpCkBAIC03NCwxMSAr
NzQsMTEgQEAgdm9pZCBKU0NvbnRleHRHcm91cEFkZE1hcmtpbmdDb25zdHJhaW50KAogICAgICAg
ICB0b0NTdHJpbmcoIkFtYyIsIGNvbnN0cmFpbnRJbmRleCwgIigiLCBSYXdQb2ludGVyKGJpdHdp
c2VfY2FzdDx2b2lkKj4oY29uc3RyYWludENhbGxiYWNrKSksICIpIiksCiAgICAgICAgIHRvQ1N0
cmluZygiQVBJIE1hcmtpbmcgQ29uc3RyYWludCAjIiwgY29uc3RyYWludEluZGV4LCAiICgiLCBS
YXdQb2ludGVyKGJpdHdpc2VfY2FzdDx2b2lkKj4oY29uc3RyYWludENhbGxiYWNrKSksICIsICIs
IFJhd1BvaW50ZXIodXNlckRhdGEpLCAiKSIpLAogICAgICAgICBbY29uc3RyYWludENhbGxiYWNr
LCB1c2VyRGF0YV0KLSAgICAgICAgKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvcikgeworICAgICAg
ICAoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikgewogICAgICAgICAgICAgTWFya2VyIG1h
cmtlcjsKICAgICAgICAgICAgIG1hcmtlci5Jc01hcmtlZCA9IGlzTWFya2VkOwogICAgICAgICAg
ICAgbWFya2VyLk1hcmsgPSBtYXJrOwotICAgICAgICAgICAgbWFya2VyLnZpc2l0b3IgPSAmc2xv
dFZpc2l0b3I7CisgICAgICAgICAgICBtYXJrZXIudmlzaXRvciA9ICZ2aXNpdG9yOwogICAgICAg
ICAgICAgCiAgICAgICAgICAgICBjb25zdHJhaW50Q2FsbGJhY2soJm1hcmtlciwgdXNlckRhdGEp
OwogICAgICAgICB9LApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1ZpcnR1YWxN
YWNoaW5lLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWaXJ0
dWFsTWFjaGluZS5tbQkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L0FQSS9KU1ZpcnR1YWxNYWNoaW5lLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zMTYsNyArMzE2LDgg
QEAgKyAodm9pZClzZXRDcmFzaE9uVk1DcmVhdGlvbjooQk9PTClzaG91bAogCiBAZW5kCiAKLXN0
YXRpYyB2b2lkIHNjYW5FeHRlcm5hbE9iamVjdEdyYXBoKEpTQzo6Vk0mIHZtLCBKU0M6OlNsb3RW
aXNpdG9yJiB2aXNpdG9yLCB2b2lkKiByb290LCBib29sIGxvY2tBY3F1aXJlZCkKK3RlbXBsYXRl
PHR5cGVuYW1lIFZpc2l0b3I+CitzdGF0aWMgdm9pZCBzY2FuRXh0ZXJuYWxPYmplY3RHcmFwaChK
U0M6OlZNJiB2bSwgVmlzaXRvciYgdmlzaXRvciwgdm9pZCogcm9vdCwgYm9vbCBsb2NrQWNxdWly
ZWQpCiB7CiAgICAgQGF1dG9yZWxlYXNlcG9vbCB7CiAgICAgICAgIEpTVmlydHVhbE1hY2hpbmUg
KnZpcnR1YWxNYWNoaW5lID0gW0pTVk1XcmFwcGVyQ2FjaGUgd3JhcHBlckZvckpTQ29udGV4dEdy
b3VwUmVmOnRvUmVmKCZ2bSldOwpAQCAtMzQ4LDEzICszNDksMTcgQEAgc3RhdGljIHZvaWQgc2Nh
bkV4dGVybmFsT2JqZWN0R3JhcGgoSlNDOgogICAgIH0KIH0KIAotdm9pZCBzY2FuRXh0ZXJuYWxP
YmplY3RHcmFwaChKU0M6OlZNJiB2bSwgSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvciwgdm9pZCog
cm9vdCkKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIHNjYW5FeHRlcm5hbE9iamVj
dEdyYXBoKEpTQzo6Vk0mIHZtLCBWaXNpdG9yJiB2aXNpdG9yLCB2b2lkKiByb290KQogewogICAg
IGJvb2wgbG9ja0FjcXVpcmVkID0gZmFsc2U7CiAgICAgc2NhbkV4dGVybmFsT2JqZWN0R3JhcGgo
dm0sIHZpc2l0b3IsIHJvb3QsIGxvY2tBY3F1aXJlZCk7CiB9CiAKLXZvaWQgc2NhbkV4dGVybmFs
UmVtZW1iZXJlZFNldChKU0M6OlZNJiB2bSwgSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3Rl
bXBsYXRlIHZvaWQgc2NhbkV4dGVybmFsT2JqZWN0R3JhcGgoSlNDOjpWTSYsIEpTQzo6U2xvdFZp
c2l0b3ImLCB2b2lkKik7Cit0ZW1wbGF0ZSB2b2lkIHNjYW5FeHRlcm5hbE9iamVjdEdyYXBoKEpT
Qzo6Vk0mLCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImLCB2b2lkKik7CisKK3ZvaWQgc2NhbkV4
dGVybmFsUmVtZW1iZXJlZFNldChKU0M6OlZNJiB2bSwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9y
JiB2aXNpdG9yKQogewogICAgIEBhdXRvcmVsZWFzZXBvb2wgewogICAgICAgICBKU1ZpcnR1YWxN
YWNoaW5lICp2aXJ0dWFsTWFjaGluZSA9IFtKU1ZNV3JhcHBlckNhY2hlIHdyYXBwZXJGb3JKU0Nv
bnRleHRHcm91cFJlZjp0b1JlZigmdm0pXTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9B
UEkvSlNWaXJ0dWFsTWFjaGluZUludGVybmFsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL0FQSS9KU1ZpcnR1YWxNYWNoaW5lSW50ZXJuYWwuaAkocmV2aXNpb24gMjcxNDQz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1ZpcnR1YWxNYWNoaW5lSW50ZXJuYWwu
aAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsOCBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIGNs
YXNzIFZNOwotY2xhc3MgU2xvdFZpc2l0b3I7CisvL2NsYXNzIFNsb3RWaXNpdG9yOworY2xhc3Mg
QWJzdHJhY3RTbG90VmlzaXRvcjsKIH0KIAogI2lmIGRlZmluZWQoX19PQkpDX18pCkBAIC01NCw4
ICs1NSw4IEBAIEpTQ29udGV4dEdyb3VwUmVmIGdldEdyb3VwRnJvbVZpcnR1YWxNYWMKIAogI2Vu
ZGlmIC8vIGRlZmluZWQoX19PQkpDX18pCiAKLXZvaWQgc2NhbkV4dGVybmFsT2JqZWN0R3JhcGgo
SlNDOjpWTSYsIEpTQzo6U2xvdFZpc2l0b3ImLCB2b2lkKiByb290KTsKLXZvaWQgc2NhbkV4dGVy
bmFsUmVtZW1iZXJlZFNldChKU0M6OlZNJiwgSlNDOjpTbG90VmlzaXRvciYpOwordGVtcGxhdGU8
dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCBzY2FuRXh0ZXJuYWxPYmplY3RHcmFwaChKU0M6OlZNJiwg
VmlzaXRvciYsIHZvaWQqIHJvb3QpOwordm9pZCBzY2FuRXh0ZXJuYWxSZW1lbWJlcmVkU2V0KEpT
Qzo6Vk0mLCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKTsKIAogI2VuZGlmIC8vIEpTQ19PQkpD
X0FQSV9FTkFCTEVECiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvTWFya2VkSlNW
YWx1ZVJlZkFycmF5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJ
L01hcmtlZEpTVmFsdWVSZWZBcnJheS5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9BUEkvTWFya2VkSlNWYWx1ZVJlZkFycmF5LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDYsNyArNDYsOSBAQCBNYXJrZWRKU1ZhbHVlUmVmQXJyYXk6On5NYXJrZWRKU1ZhbHVl
UmVmCiAgICAgICAgIHJlbW92ZSgpOwogfQogCi12b2lkIE1hcmtlZEpTVmFsdWVSZWZBcnJheTo6
dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3RlbXBsYXRlPHR5cGVuYW1l
IFZpc2l0b3I+CisvL3ZvaWQgTWFya2VkSlNWYWx1ZVJlZkFycmF5Ojp2aXNpdEFnZ3JlZ2F0ZShW
aXNpdG9yJiB2aXNpdG9yKQordm9pZCBNYXJrZWRKU1ZhbHVlUmVmQXJyYXk6OnZpc2l0QWdncmVn
YXRlMShBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTVmFsdWVSZWYqIGJ1
ZmZlciA9IGRhdGEoKTsKICAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gMDsgaW5kZXggPCBtX3Np
emU7ICsraW5kZXgpIHsKQEAgLTYyLDQgKzY0LDcgQEAgdm9pZCBNYXJrZWRKU1ZhbHVlUmVmQXJy
YXk6OnZpc2l0QWdncmVnYQogICAgIH0KIH0KIAorLy90ZW1wbGF0ZSB2b2lkIE1hcmtlZEpTVmFs
dWVSZWZBcnJheTo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImKTsKKy8vdGVtcGxhdGUgdm9p
ZCBNYXJrZWRKU1ZhbHVlUmVmQXJyYXk6OnZpc2l0QWdncmVnYXRlKERlYnVnU2xvdFZpc2l0b3Im
KTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJ
L01hcmtlZEpTVmFsdWVSZWZBcnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9BUEkvTWFya2VkSlNWYWx1ZVJlZkFycmF5LmgJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvTWFya2VkSlNWYWx1ZVJlZkFycmF5LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTYyLDcgKzYyLDggQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9pbmxpbmVC
dWZmZXI7CiAgICAgfQogCi0gICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYpOwor
Ly8gICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCB2aXNpdEFnZ3JlZ2F0ZShWaXNp
dG9yJik7CisgICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZTEoQWJzdHJhY3RTbG90VmlzaXRvciYpOwog
CiBwcml2YXRlOgogICAgIHVuc2lnbmVkIG1fc2l6ZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAt
MTkwOCw2ICsxOTA4LDcgQEAKIAkJRTNGRjc1MzMxRDlDRUExODAwQzdFMTZEIC8qIERPTUpJVEdl
dHRlclNldHRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRTNGRjc1MkYxRDlDRUExMjAwQzdFMTZEIC8qIERPTUpJVEdldHRlclNldHRlci5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUU0OURDMTZDMTJF
RjI5NEUwMDE4NEExRiAvKiBTb3VyY2VQcm92aWRlckNhY2hlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDlEQzE1MTEyRUYyNzIyMDAxODRBMUYgLyog
U291cmNlUHJvdmlkZXJDYWNoZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCUU0OURDMTZEMTJFRjI5NTMwMDE4NEExRiAvKiBTb3VyY2VQcm92aWRl
ckNhY2hlSXRlbS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRTQ5REMxNDkxMkVGMjYxQTAwMTg0QTFGIC8qIFNvdXJjZVByb3ZpZGVyQ2FjaGVJdGVtLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJRkUwNDE1
NTMyNTJFQzA3MzAwOTFFQjVEIC8qIFNsb3RWaXNpdG9yTWFjcm9zLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTA0MTU1MjI1MkVDMDczMDA5MUVCNUQg
LyogU2xvdFZpc2l0b3JNYWNyb3MuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQlGRTA1RkFGRDFGRTRDRURBMDAwOTMyMzAgLyogRGVwcmVjYXRlZElu
c3BlY3RvclZhbHVlcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA5OTJENkExMTFGQkQ0OTFEMDAwMjQ1RjQgLyogRGVwcmVjYXRlZEluc3BlY3RvclZh
bHVlcy5jcHAgKi87IH07CiAJCUZFMDg2QkNBMjEyM0RFRkIwMDNGMjkyOSAvKiBFbnRyeUZyYW1l
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTA4NkJD
OTIxMjNERUZBMDAzRjI5MjkgLyogRW50cnlGcmFtZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUZFMEQ0QTA2MUFCOEREMEEwMDJGNTRCRiAvKiBF
eGVjdXRpb25UaW1lTGltaXRUZXN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEZFMEQ0QTA0MUFCOEREMEEwMDJGNTRCRiAvKiBFeGVjdXRpb25UaW1l
TGltaXRUZXN0LmNwcCAqLzsgfTsKQEAgLTE5MzAsNiArMTkzMSw4IEBACiAJCUZFMUUyQzNGMjI0
MERENTgwMEY2QjcyOSAvKiBNYWNyb0Fzc2VtYmxlckFSTTY0RS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUxRTJDM0UyMjQwRDMwQjAwRjZCNzI5IC8q
IE1hY3JvQXNzZW1ibGVyQVJNNjRFLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJRkUxRTJDNDAyMjQwREQ2MjAwRjZCNzI5IC8qIEFSTTY0RUFzc2Vt
Ymxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUx
RTJDM0QyMjQwRDJGNjAwRjZCNzI5IC8qIEFSTTY0RUFzc2VtYmxlci5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUZFMjBDRTlFMTVGMDRBOTUwMERG
MzQzMCAvKiBMTEludENMb29wLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBGRTIwQ0U5QzE1RjA0QTk1MDBERjM0MzAgLyogTExJbnRDTG9vcC5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUZFMjg3RDAyMjUy
RkIyRTgwMEQ3MjNGOSAvKiBEZWJ1Z1Nsb3RWaXNpdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTI4N0QwMTI1MkZCMkU4MDBENzIzRjkgLyogRGVi
dWdTbG90VmlzaXRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CisJCUZFMjg3RDA0MjUyRkJGRUIwMEQ3MjNGOSAvKiBEZWJ1Z1Nsb3RWaXNpdG9ySW5s
aW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUy
ODdEMDMyNTJGQkZFQTAwRDcyM0Y5IC8qIERlYnVnU2xvdFZpc2l0b3JJbmxpbmVzLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRkUyQTg3NjAxRjAy
MzgxNjAwRUIzMUIyIC8qIE1pbmltdW1SZXNlcnZlZFpvbmVTaXplLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTJBODc1RjFGMDIzODE2MDBFQjMxQjIg
LyogTWluaW11bVJlc2VydmVkWm9uZVNpemUuaCAqLzsgfTsKIAkJRkUzMDIyRDMxRTNENzNBNTAw
QkFDNDkzIC8qIFNpZ2lsbENyYXNoQW5hbHl6ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFMzAyMkQxMUUzRDczOTYwMEJBQzQ5MyAvKiBTaWdpbGxD
cmFzaEFuYWx5emVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJRkUzMDIyRDcxRTQyODU3MzAwQkFDNDkzIC8qIFZNSW5zcGVjdG9yLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTMwMjJENTFFNDI4NTY3
MDBCQUM0OTMgLyogVk1JbnNwZWN0b3IuaCAqLzsgfTsKQEAgLTE5NjcsNiArMTk3MCw4IEBACiAJ
CUZFODBDMTk3MUQ3NzVDREQwMDg1MTBDMCAvKiBDYXRjaFNjb3BlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTgwQzE5NjFENzc1QjI3MDA4NTEwQzAg
LyogQ2F0Y2hTY29wZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCUZFOERFNTRCMjNBQzFEQUQwMDVDOTE0MiAvKiBDYWNoZWFibGVJZGVudGlmaWVy
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRThERTU0
QTIzQUMxREFEMDA1QzkxNDIgLyogQ2FjaGVhYmxlSWRlbnRpZmllci5oICovOyB9OwogCQlGRThE
RTU0RDIzQUMxRTg2MDA1QzkxNDIgLyogQ2FjaGVhYmxlSWRlbnRpZmllcklubGluZXMuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFOERFNTRDMjNBQzFF
ODYwMDVDOTE0MiAvKiBDYWNoZWFibGVJZGVudGlmaWVySW5saW5lcy5oICovOyB9OworCQlGRTkx
MkI0RjI1MzExOTMzMDBGQUJEREYgLyogQWJzdHJhY3RTbG90VmlzaXRvci5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkU5MTJCNEUyNTMxMTkzMzAwRkFC
RERGIC8qIEFic3RyYWN0U2xvdFZpc2l0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OworCQlGRTkxMkI1MTI1MzExQUQxMDBGQUJEREYgLyogQWJzdHJh
Y3RTbG90VmlzaXRvcklubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEZFOTEyQjUwMjUzMTFBRDEwMEZBQkRERiAvKiBBYnN0cmFjdFNsb3RWaXNp
dG9ySW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCUZFOTlCMjQ5MUMyNEMzRDMwMEM4MjE1OSAvKiBKSVROZWdHZW5lcmF0b3IuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFOTlCMjQ4MUMyNEI2
RDMwMEM4MjE1OSAvKiBKSVROZWdHZW5lcmF0b3IuaCAqLzsgfTsKIAkJRkVBMDg2MjAxODJCN0Ew
NDAwRjZEODUxIC8qIEJyZWFrcG9pbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEZFQTA4NjFFMTgyQjdBMDQwMEY2RDg1MSAvKiBCcmVha3BvaW50Lmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRkVBMDg2
MjExODJCN0EwNDAwRjZEODUxIC8qIERlYnVnZ2VyUHJpbWl0aXZlcy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkVBMDg2MUYxODJCN0EwNDAwRjZEODUx
IC8qIERlYnVnZ2VyUHJpbWl0aXZlcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CkBAIC01MTk3LDYgKzUyMDIsNyBAQAogCQlGNjkyQTg4NzAyNTU1OTdE
MDFGRjYwRjcgLyogSlNDSlNWYWx1ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0NKU1ZhbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB9OwogCQlGNzM5MjY5MThEQzY0MzMwQUZDREYwRDcgLyog
SlNTb3VyY2VDb2RlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpT
U291cmNlQ29kZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFMDAyNjIyMjNG
M0FGMzMwMDNBMzU4RiAvKiBXZWJBc3NlbWJseS5hc20gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmFzbS5hc207IG5hbWUgPSBXZWJB
c3NlbWJseS5hc207IHBhdGggPSBsbGludC9XZWJBc3NlbWJseS5hc207IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCUZFMDQxNTUyMjUyRUMwNzMwMDkxRUI1RCAvKiBTbG90VmlzaXRvck1h
Y3Jvcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTbG90VmlzaXRvck1hY3Jv
cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTA4NkJDOTIxMjNERUZBMDAzRjI5
MjkgLyogRW50cnlGcmFtZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFbnRy
eUZyYW1lLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFMEQ0QTA0MUFCOEREMEEw
MDJGNTRCRiAvKiBFeGVjdXRpb25UaW1lTGltaXRUZXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgbmFtZSA9IEV4ZWN1dGlvblRpbWVMaW1pdFRlc3QuY3BwOyBwYXRoID0gQVBJ
L3Rlc3RzL0V4ZWN1dGlvblRpbWVMaW1pdFRlc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlGRTBENEEwNTFBQjhERDBBMDAyRjU0QkYgLyogRXhlY3V0aW9uVGltZUxpbWl0VGVz
dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBFeGVjdXRpb25UaW1lTGltaXRU
ZXN0Lmg7IHBhdGggPSBBUEkvdGVzdHMvRXhlY3V0aW9uVGltZUxpbWl0VGVzdC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtNTIxMCw2ICs1MjE2LDcgQEAKIAkJRkUxMjIwMjUxQkU3
RjU2NDAwMzlFNkYyIC8qIEpJVEFkZEdlbmVyYXRvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBKSVRBZGRHZW5lcmF0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlGRTEyMjAyNjFCRTdGNTY0MDAzOUU2RjIgLyogSklUQWRkR2VuZXJhdG9yLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpJVEFkZEdlbmVyYXRvci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTE0MDkwNjIwNTZGM0ZFMDBDRkUzMTggLyogTmF0
aXZlRnVuY3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTmF0aXZlRnVu
Y3Rpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkUxNzhDQzMyNTVGMjA1NTAw
RkZENjc3IC8qIEFic3RyYWN0U2xvdFZpc2l0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gQWJzdHJhY3RTbG90VmlzaXRvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUZFMTg3OUZGMUJGQkM3M0MwMDM4QkJDQSAvKiBKSVRNdWxHZW5lcmF0b3Iu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSklUTXVsR2VuZXJhdG9y
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkUxODdBMDAxQkZCQzczQzAwMzhC
QkNBIC8qIEpJVE11bEdlbmVyYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBKSVRNdWxHZW5lcmF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkUxODdB
MEExQzAyMjkyMzAwMzhCQkNBIC8qIEpJVERpdkdlbmVyYXRvci5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKSVREaXZHZW5lcmF0b3IuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtNTIzMSw2ICs1MjM4LDggQEAKIAkJRkUxRTJDM0UyMjQwRDMwQjAw
RjZCNzI5IC8qIE1hY3JvQXNzZW1ibGVyQVJNNjRFLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IE1hY3JvQXNzZW1ibGVyQVJNNjRFLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUZFMjBDRTlCMTVGMDRBOTUwMERGMzQzMCAvKiBMTEludENMb29wLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IExMSW50Q0xvb3AuY3BwOyBwYXRoID0gbGxp
bnQvTExJbnRDTG9vcC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFMjBDRTlD
MTVGMDRBOTUwMERGMzQzMCAvKiBMTEludENMb29wLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IExMSW50Q0xvb3AuaDsgcGF0aCA9IGxsaW50L0xMSW50Q0xvb3AuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkUyODdEMDEyNTJGQjJFODAwRDcyM0Y5IC8qIERlYnVn
U2xvdFZpc2l0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGVidWdTbG90
VmlzaXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRTI4N0QwMzI1MkZCRkVB
MDBENzIzRjkgLyogRGVidWdTbG90VmlzaXRvcklubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gRGVidWdTbG90VmlzaXRvcklubGluZXMuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJRkUyQTg3NUYxRjAyMzgxNjAwRUIzMUIyIC8qIE1pbmltdW1SZXNlcnZl
ZFpvbmVTaXplLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1pbmltdW1SZXNlcnZlZFpvbmVTaXplLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFMkU2QTdBMUQ2RUE1RkUwMDYwRjg5NiAvKiBU
aHJvd1Njb3BlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRocm93
U2NvcGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTMwMjJEMDFFM0Q3Mzk2
MDBCQUM0OTMgLyogU2lnaWxsQ3Jhc2hBbmFseXplci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBTaWdpbGxDcmFzaEFuYWx5emVyLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTUzMDQsNiArNTMxMyw4IEBACiAJCUZFOERFNTRDMjNBQzFFODYwMDVD
OTE0MiAvKiBDYWNoZWFibGVJZGVudGlmaWVySW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBDYWNoZWFibGVJZGVudGlmaWVySW5saW5lcy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlGRThERTU0RTIzQUMzQThFMDA1QzkxNDIgLyogQ2FjaGVhYmxlSWRl
bnRpZmllci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDYWNoZWFibGVJZGVudGlmaWVyLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkU5MEJCM0ExQjdDRjY0RTAwNkIzRjAzIC8q
IFZNSW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBWTUlubGluZXMu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkU5MTJCNEUyNTMxMTkzMzAwRkFCRERG
IC8qIEFic3RyYWN0U2xvdFZpc2l0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gQWJzdHJhY3RTbG90VmlzaXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlG
RTkxMkI1MDI1MzExQUQxMDBGQUJEREYgLyogQWJzdHJhY3RTbG90VmlzaXRvcklubGluZXMuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQWJzdHJhY3RTbG90VmlzaXRvcklubGlu
ZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkU5OEI1QjYxQkI5QUUxMTAwNzNF
N0E2IC8qIEpJVFN1YkdlbmVyYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBKSVRTdWJHZW5lcmF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkU5OUIy
NDcxQzI0QjZEMzAwQzgyMTU5IC8qIEpJVE5lZ0dlbmVyYXRvci5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKSVROZWdHZW5lcmF0b3IuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlGRTk5QjI0ODFDMjRCNkQzMDBDODIxNTkgLyogSklUTmVnR2VuZXJh
dG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpJVE5lZ0dlbmVyYXRvci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNjI1Myw2ICs2MjY0LDkgQEAKIAkJMTQy
RTMxMkExMzRGRjBBNjAwQUZBREI1IC8qIGhlYXAgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsK
IAkJCWNoaWxkcmVuID0gKAorCQkJCUZFMTc4Q0MzMjU1RjIwNTUwMEZGRDY3NyAvKiBBYnN0cmFj
dFNsb3RWaXNpdG9yLmNwcCAqLywKKwkJCQlGRTkxMkI0RTI1MzExOTMzMDBGQUJEREYgLyogQWJz
dHJhY3RTbG90VmlzaXRvci5oICovLAorCQkJCUZFOTEyQjUwMjUzMTFBRDEwMEZBQkRERiAvKiBB
YnN0cmFjdFNsb3RWaXNpdG9ySW5saW5lcy5oICovLAogCQkJCTBGRUMzQzUwMUYzM0E0MTYwMEY1
OUI2QyAvKiBBbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmNwcCAqLywKIAkJCQkwRkVDM0M1MTFGMzNB
NDE2MDBGNTlCNkMgLyogQWxpZ25lZE1lbW9yeUFsbG9jYXRvci5oICovLAogCQkJCTBGQTc2MjBB
MURCOTU5RjYwMEI3QTJGRCAvKiBBbGxvY2F0aW5nU2NvcGUuaCAqLywKQEAgLTYyODgsNiArNjMw
Miw4IEBACiAJCQkJMEY0MTU0NUExRkQyMEIxRjAwMUI1OEY2IC8qIENvbnN0cmFpbnRDb25jdXJy
ZW5jeS5oICovLAogCQkJCTBGNEQ4QzczMUZDN0E5NzQwMDFEMzJBQyAvKiBDb25zdHJhaW50UGFy
YWxsZWxpc20uaCAqLywKIAkJCQkwRjdERjEyRjFFMjk3MEQ1MDA5NTk1MUIgLyogQ29uc3RyYWlu
dFZvbGF0aWxpdHkuaCAqLywKKwkJCQlGRTI4N0QwMTI1MkZCMkU4MDBENzIzRjkgLyogRGVidWdT
bG90VmlzaXRvci5oICovLAorCQkJCUZFMjg3RDAzMjUyRkJGRUEwMEQ3MjNGOSAvKiBEZWJ1Z1Ns
b3RWaXNpdG9ySW5saW5lcy5oICovLAogCQkJCTJBN0E1OEVFMTgwOEE0QzQwMDIwQkRGNyAvKiBE
ZWZlckdDLmNwcCAqLywKIAkJCQkwRjEzNkQ0QjE3NEFENjlCMDA3NUIzNTQgLyogRGVmZXJHQy5o
ICovLAogCQkJCTBGQkI3M0JBMURFRjg2NDQwMDJDMDA5RSAvKiBEZWxldGVBbGxDb2RlRWZmb3J0
LmggKi8sCkBAIC02NDA5LDYgKzY0MjUsNyBAQAogCQkJCUMyMjU0OTQyMTVGN0RCQUEwMDY1RTg5
OCAvKiBTbG90VmlzaXRvci5jcHAgKi8sCiAJCQkJMTRCQTc4RjAxM0FBQjg4RjAwNUI3QzJDIC8q
IFNsb3RWaXNpdG9yLmggKi8sCiAJCQkJMEZDQjQwODUxNUMwQTNDMzAwNDg5MzJCIC8qIFNsb3RW
aXNpdG9ySW5saW5lcy5oICovLAorCQkJCUZFMDQxNTUyMjUyRUMwNzMwMDkxRUI1RCAvKiBTbG90
VmlzaXRvck1hY3Jvcy5oICovLAogCQkJCTBGREU4N0ZBMURGRTZFNTAwMDY0QzM5MCAvKiBTcGFj
ZVRpbWVNdXRhdG9yU2NoZWR1bGVyLmNwcCAqLywKIAkJCQkwRkRFODdGQjFERkU2RTUwMDA2NEMz
OTAgLyogU3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlci5oICovLAogCQkJCTBGNEY4Mjg5MUUzMUI5
NzEwMDc1MTg0QyAvKiBTdG9jaGFzdGljU3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlci5jcHAgKi8s
CkBAIC05MjU0LDYgKzkyNzEsNyBAQAogCQkJCTUyNjc4RjhGMUEwMzEwMDkwMDZBMzA2RCAvKiBC
YXNpY0Jsb2NrTG9jYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTE0N0I4M0FDMEU2REI4Qzkw
MDQ3NzVBNCAvKiBCYXRjaGVkVHJhbnNpdGlvbk9wdGltaXplci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJODY5NzZFNUYxRkEzRThCQzAwRTdDNEUxIC8qIEJpZ0ludENvbnN0cnVjdG9yLmggaW4gSGVh
ZGVycyAqLywKKwkJCQlGRTA0MTU1MzI1MkVDMDczMDA5MUVCNUQgLyogU2xvdFZpc2l0b3JNYWNy
b3MuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2NjczOUQyMTNCRkRFNzEwMDIzRDg3QyAvKiBCaWdJ
bnRlZ2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjE4MTY3NzFGQjc5MjQyMDBFQ0M0RUMgLyog
QmlnSW50T2JqZWN0LmggaW4gSGVhZGVycyAqLywKIAkJCQk4Njk3NkU1RTFGQTNFOEI2MDBFN0M0
RTEgLyogQmlnSW50UHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywKQEAgLTk1MzEsNiArOTU0OSw3
IEBACiAJCQkJMEZEODJFNTcxNDFEQUYxMDAwMTc5Qzk0IC8qIERGR09TUkVudHJ5LmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRkQ4QTMyNjE3RDUxRjU3MDBDQTJDNDAgLyogREZHT1NSRW50cnlwb2lu
dENyZWF0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQzA5NzZBMTQ2OEE2RjcwMENG
MjQ0MiAvKiBERkdPU1JFeGl0LmggaW4gSGVhZGVycyAqLywKKwkJCQlGRTkxMkI0RjI1MzExOTMz
MDBGQUJEREYgLyogQWJzdHJhY3RTbG90VmlzaXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYy
MzVCRUMxNzE3OEU3MzAwNjkwQzdGIC8qIERGR09TUkV4aXRCYXNlLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRkZCOTIxQzE2RDAyRjExMDA1NUE1REIgLyogREZHT1NSRXhpdENvbXBpbGF0aW9uSW5m
by5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY3MDI1QUExNzE0QjBGQzAwMzgyQzBFIC8qIERGR09T
UkV4aXRDb21waWxlckNvbW1vbi5oIGluIEhlYWRlcnMgKi8sCkBAIC05ODE2LDYgKzk4MzUsNyBA
QAogCQkJCUE1MTNFNUJFMTg1QkZBQ0MwMDdFOTVBRCAvKiBJbmplY3RlZFNjcmlwdEhvc3QuaCBp
biBIZWFkZXJzICovLAogCQkJCUE1MTNFNUNCMTg1Rjk2MjQwMDdFOTVBRCAvKiBJbmplY3RlZFNj
cmlwdE1hbmFnZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1ODQwRTIxMTg3QjdCODYwMDg0M0Ix
MCAvKiBJbmplY3RlZFNjcmlwdE1vZHVsZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJRkUyODdEMDIy
NTJGQjJFODAwRDcyM0Y5IC8qIERlYnVnU2xvdFZpc2l0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUE1MTNFNUM3MTg1Rjk0NDYwMDdFOTVBRCAvKiBJbmplY3RlZFNjcmlwdFNvdXJjZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJOTk1OUU5MzIxQkQxODI3OTAwMUFBNDEzIC8qIGlubGluZS1hbmQtbWlu
aWZ5LXN0eWxlc2hlZXRzLWFuZC1zY3JpcHRzLnB5IGluIEhlYWRlcnMgKi8sCiAJCQkJNzkwNUJC
NjkxRDEyMDUwRTAwMTlGRTU3IC8qIElubGluZUFjY2Vzcy5oIGluIEhlYWRlcnMgKi8sCkBAIC0x
MDEyMCw2ICsxMDE0MCw3IEBACiAJCQkJNzk1QUM2MTgyMEEyMzU1RTAwNTJDNzZDIC8qIEpTVmly
dHVhbE1hY2hpbmVQcml2YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0NBM0FFODE3REE0MUFF
MDA2NTM4QUYgLyogSlNXZWFrTWFwLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzQ4MkU5MzExNkE3
Q0FEMDAzQjA3MTIgLyogSlNXZWFrT2JqZWN0TWFwUmVmSW50ZXJuYWwuaCBpbiBIZWFkZXJzICov
LAorCQkJCUZFOTEyQjUxMjUzMTFBRDEwMEZBQkRERiAvKiBBYnN0cmFjdFNsb3RWaXNpdG9ySW5s
aW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc0ODJCOTMxMTY3MTE0NzAwM0IwNzEyIC8qIEpT
V2Vha09iamVjdE1hcFJlZlByaXZhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTUzOUJGQkIwMjJB
RDNDREMwMDIzRjRDMCAvKiBKU1dlYWtPYmplY3RSZWYuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
MEIyODZCMUVCOEU2Q0YwMDBFQjVEMiAvKiBKU1dlYWtQcml2YXRlLmggaW4gSGVhZGVycyAqLywK
QEAgLTEwMTkxLDYgKzEwMjEyLDcgQEAKIAkJCQlBNzRERUY5NDE4MkQ5OTE0MDA1MjJDMjIgLyog
TWFwSXRlcmF0b3JQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3MDA4NzNFMTdDQkU4
RDMwMEMzRTY0MyAvKiBNYXBQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0MkQ2RjA5
MTM1MzlBMjgwMEIwMkU4NiAvKiBNYXJrZWRCbG9jay5oIGluIEhlYWRlcnMgKi8sCisJCQkJRkUy
ODdEMDQyNTJGQkZFQjAwRDcyM0Y5IC8qIERlYnVnU2xvdFZpc2l0b3JJbmxpbmVzLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRjdDNUZCODFEODg4QTBDMDA0NEY1RTIgLyogTWFya2VkQmxvY2tJbmxp
bmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDE0NDhDQjEzQTE3NkVDMDBGNUJBMUEgLyogTWFy
a2VkQmxvY2tTZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUUzRDM1MTVGMjQxQjg5RDcwMDhEQzE2
RSAvKiBNYXJrZWRKU1ZhbHVlUmVmQXJyYXkuaCBpbiBIZWFkZXJzICovLApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvd2tidWlsdGlucy9idWlsdGluc19nZW5lcmF0ZV9pbnRl
cm5hbHNfd3JhcHBlcl9oZWFkZXIucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL1NjcmlwdHMvd2tidWlsdGlucy9idWlsdGluc19nZW5lcmF0ZV9pbnRlcm5hbHNfd3JhcHBl
cl9oZWFkZXIucHkJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9T
Y3JpcHRzL3drYnVpbHRpbnMvYnVpbHRpbnNfZ2VuZXJhdGVfaW50ZXJuYWxzX3dyYXBwZXJfaGVh
ZGVyLnB5CSh3b3JraW5nIGNvcHkpCkBAIC05Myw3ICs5Myw3IEBAIGNsYXNzIEJ1aWx0aW5zSW50
ZXJuYWxzV3JhcHBlckhlYWRlckdlbmUKIAogICAgIGRlZiBnZW5lcmF0ZV9tZXRob2RzKHNlbGYp
OgogICAgICAgICByZXR1cm4gIiIiCi0gICAgdm9pZCB2aXNpdChKU0M6OlNsb3RWaXNpdG9yJik7
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCB2aXNpdChWaXNpdG9yJik7CiAg
ICAgdm9pZCBpbml0aWFsaXplKEpTRE9NR2xvYmFsT2JqZWN0Jik7CiAiIiIKIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvd2tidWlsdGlucy9idWlsdGluc19nZW5lcmF0ZV9p
bnRlcm5hbHNfd3JhcHBlcl9pbXBsZW1lbnRhdGlvbi5weQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvU2NyaXB0cy93a2J1aWx0aW5zL2J1aWx0aW5zX2dlbmVyYXRlX2ludGVy
bmFsc193cmFwcGVyX2ltcGxlbWVudGF0aW9uLnB5CShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy93a2J1aWx0aW5zL2J1aWx0aW5zX2dlbmVyYXRlX2lu
dGVybmFsc193cmFwcGVyX2ltcGxlbWVudGF0aW9uLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0xMjAs
MTMgKzEyMCwxNiBAQCBjbGFzcyBCdWlsdGluc0ludGVybmFsc1dyYXBwZXJJbXBsZW1lbnRhCiAg
ICAgICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMpCiAKICAgICBkZWYgZ2VuZXJhdGVfdmlzaXRf
bWV0aG9kKHNlbGYpOgotICAgICAgICBsaW5lcyA9IFsidm9pZCBKU0J1aWx0aW5JbnRlcm5hbEZ1
bmN0aW9uczo6dmlzaXQoSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikiLAorICAgICAgICBsaW5l
cyA9IFsidGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4iLAorICAgICAgICAgICAgICAgICAidm9p
ZCBKU0J1aWx0aW5JbnRlcm5hbEZ1bmN0aW9uczo6dmlzaXQoVmlzaXRvciYgdmlzaXRvcikiLAog
ICAgICAgICAgICAgICAgICAieyJdCiAgICAgICAgIGZvciBvYmplY3QgaW4gc2VsZi5pbnRlcm5h
bHM6CiAgICAgICAgICAgICB2aXNpdCA9ICIgICAgJXMudmlzaXQodmlzaXRvcik7IiAlIHNlbGYu
bWVtYmVyX25hbWUob2JqZWN0KQogICAgICAgICAgICAgbGluZXMuYXBwZW5kKEJ1aWx0aW5zR2Vu
ZXJhdG9yLndyYXBfd2l0aF9ndWFyZChvYmplY3QuYW5ub3RhdGlvbnMuZ2V0KCdjb25kaXRpb25h
bCcpLCB2aXNpdCkpCiAgICAgICAgIGxpbmVzLmFwcGVuZCgiICAgIFVOVVNFRF9QQVJBTSh2aXNp
dG9yKTsiKQogICAgICAgICBsaW5lcy5hcHBlbmQoIn1cbiIpCisgICAgICAgIGxpbmVzLmFwcGVu
ZCgidGVtcGxhdGUgdm9pZCBKU0J1aWx0aW5JbnRlcm5hbEZ1bmN0aW9uczo6dmlzaXQoQWJzdHJh
Y3RTbG90VmlzaXRvciYpOyIpCisgICAgICAgIGxpbmVzLmFwcGVuZCgidGVtcGxhdGUgdm9pZCBK
U0J1aWx0aW5JbnRlcm5hbEZ1bmN0aW9uczo6dmlzaXQoU2xvdFZpc2l0b3ImKTtcbiIpCiAgICAg
ICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMpCiAKICAgICBkZWYgX2dlbmVyYXRlX2luaXRpYWxp
emVfc3RhdGljX2dsb2JhbHMoc2VsZik6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU2Ny
aXB0cy93a2J1aWx0aW5zL2J1aWx0aW5zX3RlbXBsYXRlcy5weQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy93a2J1aWx0aW5zL2J1aWx0aW5zX3RlbXBsYXRlcy5w
eQkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvd2ti
dWlsdGlucy9idWlsdGluc190ZW1wbGF0ZXMucHkJKHdvcmtpbmcgY29weSkKQEAgLTE4OCw3ICsx
ODgsOCBAQCBwdWJsaWM6CiAgICAgZXhwbGljaXQgJHtvYmplY3ROYW1lfUJ1aWx0aW5GdW5jdGlv
bnMoSlNDOjpWTSYgdm0pIDogbV92bSh2bSkgeyB9CiAKICAgICB2b2lkIGluaXQoSlNDOjpKU0ds
b2JhbE9iamVjdCYpOwotICAgIHZvaWQgdmlzaXQoSlNDOjpTbG90VmlzaXRvciYpOworICAgIC8v
IG1sYW0gdm9pZCB2aXNpdChKU0M6OlNsb3RWaXNpdG9yJik7CisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgVmlzaXRvcj4gdm9pZCB2aXNpdChWaXNpdG9yJik7CiAKIHB1YmxpYzoKICAgICBKU0M6OlZN
JiBtX3ZtOwpAQCAtMjA3LDEwICsyMDgsMTUgQEAgaW5saW5lIHZvaWQgJHtvYmplY3ROYW1lfUJ1
aWx0aW5GdW5jdGlvbgogI3VuZGVmIEVYUE9SVF9GVU5DVElPTgogfQogCi1pbmxpbmUgdm9pZCAk
e29iamVjdE5hbWV9QnVpbHRpbkZ1bmN0aW9uczo6dmlzaXQoSlNDOjpTbG90VmlzaXRvciYgdmlz
aXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+CitpbmxpbmUgdm9pZCAke29iamVjdE5h
bWV9QnVpbHRpbkZ1bmN0aW9uczo6dmlzaXQoVmlzaXRvciYgdmlzaXRvcikKIHsKICNkZWZpbmUg
VklTSVRfRlVOQ1RJT04obmFtZSkgdmlzaXRvci5hcHBlbmQobV8jI25hbWUjI0Z1bmN0aW9uKTsK
ICAgICAke21hY3JvUHJlZml4fV9GT1JFQUNIXyR7b2JqZWN0TWFjcm99X0JVSUxUSU5fRlVOQ1RJ
T05fTkFNRShWSVNJVF9GVU5DVElPTikKICN1bmRlZiBWSVNJVF9GVU5DVElPTgogfQorCit0ZW1w
bGF0ZSB2b2lkICR7b2JqZWN0TmFtZX1CdWlsdGluRnVuY3Rpb25zOjp2aXNpdChKU0M6OkFic3Ry
YWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgJHtvYmplY3ROYW1lfUJ1aWx0aW5GdW5j
dGlvbnM6OnZpc2l0KEpTQzo6U2xvdFZpc2l0b3ImKTsKKwogIiIiKQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmNwcAkocmV2aXNpb24gMjcxNDQz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC03MjksMTYgKzcyOSwxNyBAQCBib29sIEFjY2Vzc0Nhc2U6OnZpc2l0V2Vh
ayhWTSYgdm0pIGNvbnN0CiAgICAgcmV0dXJuIGlzVmFsaWQ7CiB9CiAKLWJvb2wgQWNjZXNzQ2Fz
ZTo6cHJvcGFnYXRlVHJhbnNpdGlvbnMoU2xvdFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0Cit0ZW1w
bGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgorYm9vbCBBY2Nlc3NDYXNlOjpwcm9wYWdhdGVUcmFuc2l0
aW9ucyhWaXNpdG9yJiB2aXNpdG9yKSBjb25zdAogewogICAgIGJvb2wgcmVzdWx0ID0gdHJ1ZTsK
IAogICAgIGlmIChtX3N0cnVjdHVyZSkKLSAgICAgICAgcmVzdWx0ICY9IG1fc3RydWN0dXJlLT5t
YXJrSWZDaGVhcCh2aXNpdG9yKTsKKyAgICAgICAgcmVzdWx0ICY9IG1fc3RydWN0dXJlLT5tYXJr
SWZDaGVhcDEodmlzaXRvcik7CiAKICAgICBpZiAobV9wb2x5UHJvdG9BY2Nlc3NDaGFpbikgewog
ICAgICAgICBmb3IgKFN0cnVjdHVyZUlEIHN0cnVjdHVyZUlEIDogbV9wb2x5UHJvdG9BY2Nlc3ND
aGFpbi0+Y2hhaW4oKSkKLSAgICAgICAgICAgIHJlc3VsdCAmPSB2aXNpdG9yLnZtKCkuZ2V0U3Ry
dWN0dXJlKHN0cnVjdHVyZUlEKS0+bWFya0lmQ2hlYXAodmlzaXRvcik7CisgICAgICAgICAgICBy
ZXN1bHQgJj0gdmlzaXRvci52bSgpLmdldFN0cnVjdHVyZShzdHJ1Y3R1cmVJRCktPm1hcmtJZkNo
ZWFwMSh2aXNpdG9yKTsKICAgICB9CiAKICAgICBzd2l0Y2ggKG1fdHlwZSkgewpAQCAtNzU2LDEx
ICs3NTcsMTkgQEAgYm9vbCBBY2Nlc3NDYXNlOjpwcm9wYWdhdGVUcmFuc2l0aW9ucyhTbAogICAg
IHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQgQWNjZXNzQ2FzZTo6dmlzaXRBZ2dyZWdhdGUoU2xv
dFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0Cit0ZW1wbGF0ZSBib29sIEFjY2Vzc0Nhc2U6OnByb3Bh
Z2F0ZVRyYW5zaXRpb25zKFNsb3RWaXNpdG9yJikgY29uc3Q7Cit0ZW1wbGF0ZSBib29sIEFjY2Vz
c0Nhc2U6OnByb3BhZ2F0ZVRyYW5zaXRpb25zKEFic3RyYWN0U2xvdFZpc2l0b3ImKSBjb25zdDsK
KworLy90ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgorLy92b2lkIEFjY2Vzc0Nhc2U6OnZpc2l0
QWdncmVnYXRlKFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0Cit2b2lkIEFjY2Vzc0Nhc2U6OnZpc2l0
QWdncmVnYXRlMShBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBjb25zdAogewotICAgIG1f
aWRlbnRpZmllci52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKKyAgICBtX2lkZW50aWZpZXIudmlz
aXRBZ2dyZWdhdGUxKHZpc2l0b3IpOwogfQogCisvL3RlbXBsYXRlIHZvaWQgQWNjZXNzQ2FzZTo6
dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImKSBjb25zdDsKKy8vdGVtcGxhdGUgdm9pZCBBY2Nl
c3NDYXNlOjp2aXNpdEFnZ3JlZ2F0ZShEZWJ1Z1Nsb3RWaXNpdG9yJikgY29uc3Q7CisKIHZvaWQg
QWNjZXNzQ2FzZTo6Z2VuZXJhdGVXaXRoR3VhcmQoCiAgICAgQWNjZXNzR2VuZXJhdGlvblN0YXRl
JiBzdGF0ZSwgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCYgZmFsbFRocm91Z2gpCiB7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmgJKHJldmlzaW9uIDI3
MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTI3NSw5ICsyNzUsMTAgQEAgcHJpdmF0ZToKICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBGdW5jdG9yPgogICAgIHZvaWQgZm9yRWFjaERlcGVuZGVudENlbGwoVk0mLCBjb25z
dCBGdW5jdG9yJikgY29uc3Q7CiAKLSAgICB2b2lkIHZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9y
JikgY29uc3Q7CisvLyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIHZpc2l0QWdn
cmVnYXRlKFZpc2l0b3ImKSBjb25zdDsKKyAgICB2b2lkIHZpc2l0QWdncmVnYXRlMShBYnN0cmFj
dFNsb3RWaXNpdG9yJikgY29uc3Q7CiAgICAgYm9vbCB2aXNpdFdlYWsoVk0mKSBjb25zdDsKLSAg
ICBib29sIHByb3BhZ2F0ZVRyYW5zaXRpb25zKFNsb3RWaXNpdG9yJikgY29uc3Q7CisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gYm9vbCBwcm9wYWdhdGVUcmFuc2l0aW9ucyhWaXNpdG9y
JikgY29uc3Q7CiAKICAgICAvLyBGSVhNRTogVGhpcyBvbmx5IGV4aXN0cyBiZWNhdXNlIG9mIGhv
dyBBY2Nlc3NDYXNlIHB1dHMgcG9zdC1nZW5lcmF0aW9uIHRoaW5ncyBpbnRvIGl0c2VsZi4KICAg
ICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU2NDU2CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnlWYWxJbmZvLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnlWYWxJbmZvLmNwcAkocmV2aXNp
b24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5VmFsSW5mby5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDExICszMiwxNiBAQCBuYW1lc3BhY2UgSlNDIHsKIAog
I2lmIEVOQUJMRShKSVQpCiAKLXZvaWQgQnlWYWxJbmZvOjp2aXNpdEFnZ3JlZ2F0ZShTbG90Vmlz
aXRvciYgdmlzaXRvcikKKy8vdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KKy8vdm9pZCBCeVZh
bEluZm86OnZpc2l0QWdncmVnYXRlKFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIEJ5VmFsSW5mbzo6
dmlzaXRBZ2dyZWdhdGUxKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7Ci0gICAgY2Fj
aGVkSWQudmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7CisgICAgY2FjaGVkSWQudmlzaXRBZ2dyZWdh
dGUxKHZpc2l0b3IpOwogfQogCisvL3RlbXBsYXRlIHZvaWQgQnlWYWxJbmZvOjp2aXNpdEFnZ3Jl
Z2F0ZShTbG90VmlzaXRvciYpOworLy90ZW1wbGF0ZSB2b2lkIEJ5VmFsSW5mbzo6dmlzaXRBZ2dy
ZWdhdGUoRGVidWdTbG90VmlzaXRvciYpOworCiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKIAogfSAv
LyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnlW
YWxJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5
VmFsSW5mby5oCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQnlWYWxJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTI0Niw3ICsyNDYsOCBAQCBzdHJ1
Y3QgQnlWYWxJbmZvIHsKICAgICAgICAgdGhpcy0+c2VlbiA9IGZhbHNlOwogICAgIH0KIAotICAg
IHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImKTsKKy8vICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFZpc2l0b3I+IHZvaWQgdmlzaXRBZ2dyZWdhdGUoVmlzaXRvciYpOworICAgIHZvaWQgdmlz
aXRBZ2dyZWdhdGUxKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKIAogICAgIENvZGVMb2NhdGlvbkp1
bXA8SlNJbnRlcm5hbFB0clRhZz4gbm90SW5kZXhKdW1wOwogICAgIENvZGVMb2NhdGlvbkp1bXA8
SlNJbnRlcm5hbFB0clRhZz4gYmFkVHlwZUp1bXA7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMwLDYgKzMwLDkgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJDb2RlQmxvY2su
aCIKIAorI2luY2x1ZGUgIkFic3RyYWN0U2xvdFZpc2l0b3IuaCIgLy8gbWxhbSBURVNUCisjaW5j
bHVkZSAiUG9seW1vcnBoaWNBY2Nlc3MuaCIgLy8gbWxhbSBURVNUCisKICNpbmNsdWRlICJBcml0
aFByb2ZpbGUuaCIKICNpbmNsdWRlICJCYXNpY0Jsb2NrTG9jYXRpb24uaCIKICNpbmNsdWRlICJC
eVZhbEluZm8uaCIKQEAgLTk5OCw3ICsxMDAxLDggQEAgc2l6ZV90IENvZGVCbG9jazo6ZXN0aW1h
dGVkU2l6ZShKU0NlbGwqIAogICAgIHJldHVybiBCYXNlOjplc3RpbWF0ZWRTaXplKGNlbGwsIHZt
KSArIGV4dHJhTWVtb3J5QWxsb2NhdGVkOwogfQogCi12b2lkIENvZGVCbG9jazo6dmlzaXRDaGls
ZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5h
bWUgVmlzaXRvcj4KK3ZvaWQgQ29kZUJsb2NrOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNl
bGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgQ29kZUJsb2NrKiB0aGlzT2JqZWN0ID0ganND
YXN0PENvZGVCbG9jayo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhp
c09iamVjdCwgaW5mbygpKTsKQEAgLTEwMDcsNyArMTAxMSwxMCBAQCB2b2lkIENvZGVCbG9jazo6
dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlCiAgICAgdGhpc09iamVjdC0+dmlzaXRDaGlsZHJlbih2
aXNpdG9yKTsKIH0KIAotdm9pZCBDb2RlQmxvY2s6OnZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3Im
IHZpc2l0b3IpCitERUZJTkVfVklTSVRfQ0hJTERSRU4oQ29kZUJsb2NrKTsKKwordGVtcGxhdGU8
dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgQ29kZUJsb2NrOjp2aXNpdENoaWxkcmVuSW1wbChWaXNp
dG9yJiB2aXNpdG9yKQogewogICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9sb2NrKTsK
ICAgICBpZiAoQ29kZUJsb2NrKiBvdGhlckJsb2NrID0gc3BlY2lhbE9TUkVudHJ5QmxvY2tPck51
bGwoKSkKQEAgLTEwMjYsNiArMTAzMyw4IEBAIHZvaWQgQ29kZUJsb2NrOjp2aXNpdENoaWxkcmVu
KFNsb3RWaXNpdG8KICAgICBWTTo6U3BhY2VBbmRTZXQ6OnNldEZvcigqc3Vic3BhY2UoKSkuYWRk
KHRoaXMpOwogfQogCitERUZJTkVfSU5TVEFOQ0VfVklTSVRfQ0hJTERSRU4oQ29kZUJsb2NrKTsK
KwogYm9vbCBDb2RlQmxvY2s6OnNob3VsZFZpc2l0U3Ryb25nbHkoY29uc3QgQ29uY3VycmVudEpT
TG9ja2VyJiBsb2NrZXIpCiB7CiAgICAgaWYgKE9wdGlvbnM6OmZvcmNlQ29kZUJsb2NrTGl2ZW5l
c3MoKSkKQEAgLTEwOTgsNyArMTEwNyw5IEBAIGJvb2wgQ29kZUJsb2NrOjpzaG91bGRKZXR0aXNv
bkR1ZVRvT2xkQWcKIH0KIAogI2lmIEVOQUJMRShERkdfSklUKQotc3RhdGljIGJvb2wgc2hvdWxk
TWFya1RyYW5zaXRpb24oVk0mIHZtLCBERkc6OldlYWtSZWZlcmVuY2VUcmFuc2l0aW9uJiB0cmFu
c2l0aW9uKQorLy8gbWxhbSBGSVhNRTogdm0uaGVhcC5pc01hcmtlZCBuZWVkcyB0byBiZSBhYnN0
cmFjdGVkLgorLy9zdGF0aWMgYm9vbCBzaG91bGRNYXJrVHJhbnNpdGlvbihWTSYgdm0sIERGRzo6
V2Vha1JlZmVyZW5jZVRyYW5zaXRpb24mIHRyYW5zaXRpb24pCitzdGF0aWMgaW5saW5lIGJvb2wg
c2hvdWxkTWFya1RyYW5zaXRpb24oVk0mIHZtLCBERkc6OldlYWtSZWZlcmVuY2VUcmFuc2l0aW9u
JiB0cmFuc2l0aW9uKQogewogICAgIGlmICh0cmFuc2l0aW9uLm1fY29kZU9yaWdpbiAmJiAhdm0u
aGVhcC5pc01hcmtlZCh0cmFuc2l0aW9uLm1fY29kZU9yaWdpbi5nZXQoKSkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKQEAgLTExMTksNyArMTEzMCw0MCBAQCBCeXRlY29kZUluZGV4IENvZGVCbG9j
azo6Ynl0ZWNvZGVJbmRleEZvCiB9CiAjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCiAKLXZvaWQg
Q29kZUJsb2NrOjpwcm9wYWdhdGVUcmFuc2l0aW9ucyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXIm
LCBTbG90VmlzaXRvciYgdmlzaXRvcikKKyNpZiBFTkFCTEUoSklUKQorCisvL3RlbXBsYXRlPHR5
cGVuYW1lIFZpc2l0b3I+CisvL2Jvb2wgU3RydWN0dXJlU3R1YkluZm86OnByb3BhZ2F0ZVRyYW5z
aXRpb25zMShWaXNpdG9yJiB2aXNpdG9yKQorYm9vbCBTdHJ1Y3R1cmVTdHViSW5mbzo6cHJvcGFn
YXRlVHJhbnNpdGlvbnMxKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgc3dp
dGNoIChtX2NhY2hlVHlwZSkgeworICAgIGNhc2UgQ2FjaGVUeXBlOjpVbnNldDoKKyAgICBjYXNl
IENhY2hlVHlwZTo6QXJyYXlMZW5ndGg6CisgICAgY2FzZSBDYWNoZVR5cGU6OlN0cmluZ0xlbmd0
aDoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgY2FzZSBDYWNoZVR5cGU6OkdldEJ5SWRTZWxm
OgorICAgIGNhc2UgQ2FjaGVUeXBlOjpQdXRCeUlkUmVwbGFjZToKKyAgICBjYXNlIENhY2hlVHlw
ZTo6SW5CeUlkU2VsZjoKKyAgICAgICAgcmV0dXJuIHUuYnlJZFNlbGYuYmFzZU9iamVjdFN0cnVj
dHVyZS0+bWFya0lmQ2hlYXAxKHZpc2l0b3IpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
Y2FzZSBDYWNoZVR5cGU6OlN0dWI6CisgICAgICAgIHJldHVybiB1LnN0dWItPnByb3BhZ2F0ZVRy
YW5zaXRpb25zMTAodmlzaXRvcik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAg
CisvLyAgICBVTlVTRURfUEFSQU0odmlzaXRvcik7IC8vIG1sYW0gVEVTVAorICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKKyNlbmRpZiAvLyBF
TkFCTEUoSklUKQorCisvL3RlbXBsYXRlPD4gYm9vbCBTdHJ1Y3R1cmVTdHViSW5mbzo6cHJvcGFn
YXRlVHJhbnNpdGlvbnMxKFNsb3RWaXNpdG9yJik7CisvL3RlbXBsYXRlPD4gYm9vbCBTdHJ1Y3R1
cmVTdHViSW5mbzo6cHJvcGFnYXRlVHJhbnNpdGlvbnMxKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsK
KworLy90ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgorLy92b2lkIENvZGVCbG9jazo6cHJvcGFn
YXRlVHJhbnNpdGlvbnMoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgVmlzaXRvciYgdmlzaXRv
cikKK3ZvaWQgQ29kZUJsb2NrOjpwcm9wYWdhdGVUcmFuc2l0aW9uczEoY29uc3QgQ29uY3VycmVu
dEpTTG9ja2VyJiwgQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBWTSYgdm0g
PSAqbV92bTsKIApAQCAtMTE2Myw3ICsxMjA3LDcgQEAgdm9pZCBDb2RlQmxvY2s6OnByb3BhZ2F0
ZVRyYW5zaXRpb25zKGNvbgogICAgIGlmIChKSVRDb2RlOjppc0pJVChqaXRUeXBlKCkpKSB7CiAg
ICAgICAgIGlmIChhdXRvKiBqaXREYXRhID0gbV9qaXREYXRhLmdldCgpKSB7CiAgICAgICAgICAg
ICBmb3IgKFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA6IGppdERhdGEtPm1fc3R1YkluZm9z
KQotICAgICAgICAgICAgICAgIHN0dWJJbmZvLT5wcm9wYWdhdGVUcmFuc2l0aW9ucyh2aXNpdG9y
KTsKKyAgICAgICAgICAgICAgICBzdHViSW5mby0+cHJvcGFnYXRlVHJhbnNpdGlvbnMxKHZpc2l0
b3IpOwogICAgICAgICB9CiAgICAgfQogI2VuZGlmIC8vIEVOQUJMRShKSVQpCkBAIC0xMTcyLDEw
ICsxMjE2LDEwIEBAIHZvaWQgQ29kZUJsb2NrOjpwcm9wYWdhdGVUcmFuc2l0aW9ucyhjb24KICAg
ICBpZiAoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGppdFR5cGUoKSkpIHsKICAgICAgICAgREZH
OjpDb21tb25EYXRhKiBkZmdDb21tb24gPSBtX2ppdENvZGUtPmRmZ0NvbW1vbigpOwogICAgICAg
ICAKLSAgICAgICAgZGZnQ29tbW9uLT5yZWNvcmRlZFN0YXR1c2VzLm1hcmtJZkNoZWFwKHZpc2l0
b3IpOworICAgICAgICBkZmdDb21tb24tPnJlY29yZGVkU3RhdHVzZXMubWFya0lmQ2hlYXAxKHZp
c2l0b3IpOwogICAgICAgICAKICAgICAgICAgZm9yIChTdHJ1Y3R1cmVJRCBzdHJ1Y3R1cmVJRCA6
IGRmZ0NvbW1vbi0+d2Vha1N0cnVjdHVyZVJlZmVyZW5jZXMpCi0gICAgICAgICAgICB2bS5nZXRT
dHJ1Y3R1cmUoc3RydWN0dXJlSUQpLT5tYXJrSWZDaGVhcCh2aXNpdG9yKTsKKyAgICAgICAgICAg
IHZtLmdldFN0cnVjdHVyZShzdHJ1Y3R1cmVJRCktPm1hcmtJZkNoZWFwMSh2aXNpdG9yKTsKIAog
ICAgICAgICBmb3IgKGF1dG8mIHRyYW5zaXRpb24gOiBkZmdDb21tb24tPnRyYW5zaXRpb25zKSB7
CiAgICAgICAgICAgICBpZiAoc2hvdWxkTWFya1RyYW5zaXRpb24odm0sIHRyYW5zaXRpb24pKSB7
CkBAIC0xMjA1LDcgKzEyNDksMTIgQEAgdm9pZCBDb2RlQmxvY2s6OnByb3BhZ2F0ZVRyYW5zaXRp
b25zKGNvbgogI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQogfQogCi12b2lkIENvZGVCbG9jazo6
ZGV0ZXJtaW5lTGl2ZW5lc3MoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgU2xvdFZpc2l0b3Im
IHZpc2l0b3IpCisvL3RlbXBsYXRlIHZvaWQgQ29kZUJsb2NrOjpwcm9wYWdhdGVUcmFuc2l0aW9u
cyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBTbG90VmlzaXRvciYpOworLy90ZW1wbGF0ZSB2
b2lkIENvZGVCbG9jazo6cHJvcGFnYXRlVHJhbnNpdGlvbnMoY29uc3QgQ29uY3VycmVudEpTTG9j
a2VyJiwgRGVidWdTbG90VmlzaXRvciYpOworCisvL3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+
CisvL3ZvaWQgQ29kZUJsb2NrOjpkZXRlcm1pbmVMaXZlbmVzcyhjb25zdCBDb25jdXJyZW50SlNM
b2NrZXImLCBWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBDb2RlQmxvY2s6OmRldGVybWluZUxpdmVu
ZXNzKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0
b3IpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHZpc2l0b3IpOwogICAgIApAQCAtMTI1NCw2ICsxMzAz
LDkgQEAgdm9pZCBDb2RlQmxvY2s6OmRldGVybWluZUxpdmVuZXNzKGNvbnN0IAogI2VuZGlmIC8v
IEVOQUJMRShERkdfSklUKQogfQogCisvL3RlbXBsYXRlIHZvaWQgQ29kZUJsb2NrOjpkZXRlcm1p
bmVMaXZlbmVzcyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBTbG90VmlzaXRvciYpOworLy90
ZW1wbGF0ZSB2b2lkIENvZGVCbG9jazo6ZGV0ZXJtaW5lTGl2ZW5lc3MoY29uc3QgQ29uY3VycmVu
dEpTTG9ja2VyJiwgRGVidWdTbG90VmlzaXRvciYpOworCiB2b2lkIENvZGVCbG9jazo6ZmluYWxp
emVMTEludElubGluZUNhY2hlcygpCiB7CiAgICAgVk0mIHZtID0gKm1fdm07CkBAIC0xNzYyLDcg
KzE4MTQsOCBAQCB2b2lkIENvZGVCbG9jazo6cmVzZXRKSVREYXRhKCkKIH0KICNlbmRpZgogCi12
b2lkIENvZGVCbG9jazo6dmlzaXRPU1JFeGl0VGFyZ2V0cyhjb25zdCBDb25jdXJyZW50SlNMb2Nr
ZXImLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2
b2lkIENvZGVCbG9jazo6dmlzaXRPU1JFeGl0VGFyZ2V0cyhjb25zdCBDb25jdXJyZW50SlNMb2Nr
ZXImLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIC8vIFdlIHN0cm9uZ2x5IHZpc2l0IE9TUiBl
eGl0cyB0YXJnZXRzIGJlY2F1c2Ugd2UgZG9uJ3Qgd2FudCB0byBkZWFsIHdpdGgKICAgICAvLyB0
aGUgY29tcGxleGl0eSBvZiBnZW5lcmF0aW5nIGFuIGV4aXQgdGFyZ2V0IENvZGVCbG9jayBvbiBk
ZW1hbmQgYW5kCkBAIC0xNzgyLDcgKzE4MzUsMTEgQEAgdm9pZCBDb2RlQmxvY2s6OnZpc2l0T1NS
RXhpdFRhcmdldHMoY29ucwogI2VuZGlmCiB9CiAKLXZvaWQgQ29kZUJsb2NrOjpzdHJvbmdseVZp
c2l0U3Ryb25nUmVmZXJlbmNlcyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImIGxvY2tlciwgU2xv
dFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZSB2b2lkIENvZGVCbG9jazo6dmlzaXRPU1JFeGl0
VGFyZ2V0cyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBTbG90VmlzaXRvciYpOwordGVtcGxh
dGUgdm9pZCBDb2RlQmxvY2s6OnZpc2l0T1NSRXhpdFRhcmdldHMoY29uc3QgQ29uY3VycmVudEpT
TG9ja2VyJiwgQWJzdHJhY3RTbG90VmlzaXRvciYpOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNp
dG9yPgordm9pZCBDb2RlQmxvY2s6OnN0cm9uZ2x5VmlzaXRTdHJvbmdSZWZlcmVuY2VzKGNvbnN0
IENvbmN1cnJlbnRKU0xvY2tlciYgbG9ja2VyLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFVO
VVNFRF9QQVJBTShsb2NrZXIpOwogICAgIApAQCAtMTgwMywyMiArMTg2MCwyNiBAQCB2b2lkIENv
ZGVCbG9jazo6c3Ryb25nbHlWaXNpdFN0cm9uZ1JlZmVyCiAjaWYgRU5BQkxFKEpJVCkKICAgICBp
ZiAoYXV0byogaml0RGF0YSA9IG1faml0RGF0YS5nZXQoKSkgewogICAgICAgICBmb3IgKEJ5VmFs
SW5mbyogYnlWYWxJbmZvIDogaml0RGF0YS0+bV9ieVZhbEluZm9zKQotICAgICAgICAgICAgYnlW
YWxJbmZvLT52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKKyAgICAgICAgICAgIGJ5VmFsSW5mby0+
dmlzaXRBZ2dyZWdhdGUxKHZpc2l0b3IpOwogICAgICAgICBmb3IgKFN0cnVjdHVyZVN0dWJJbmZv
KiBzdHViSW5mbyA6IGppdERhdGEtPm1fc3R1YkluZm9zKQotICAgICAgICAgICAgc3R1YkluZm8t
PnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOworICAgICAgICAgICAgc3R1YkluZm8tPnZpc2l0QWdn
cmVnYXRlMSh2aXNpdG9yKTsKICAgICB9CiAjZW5kaWYKIAogI2lmIEVOQUJMRShERkdfSklUKQog
ICAgIGlmIChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSgpKSkgewogICAgICAgICBE
Rkc6OkNvbW1vbkRhdGEqIGRmZ0NvbW1vbiA9IG1faml0Q29kZS0+ZGZnQ29tbW9uKCk7Ci0gICAg
ICAgIGRmZ0NvbW1vbi0+cmVjb3JkZWRTdGF0dXNlcy52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsK
KyAgICAgICAgZGZnQ29tbW9uLT5yZWNvcmRlZFN0YXR1c2VzLnZpc2l0QWdncmVnYXRlMSh2aXNp
dG9yKTsKICAgICAgICAgdmlzaXRPU1JFeGl0VGFyZ2V0cyhsb2NrZXIsIHZpc2l0b3IpOwogICAg
IH0KICNlbmRpZgogfQogCi12b2lkIENvZGVCbG9jazo6c3Ryb25nbHlWaXNpdFdlYWtSZWZlcmVu
Y2VzKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy90
ZW1wbGF0ZSB2b2lkIENvZGVCbG9jazo6c3Ryb25nbHlWaXNpdFN0cm9uZ1JlZmVyZW5jZXMoY29u
c3QgQ29uY3VycmVudEpTTG9ja2VyJiwgU2xvdFZpc2l0b3ImKTsKKy8vdGVtcGxhdGUgdm9pZCBD
b2RlQmxvY2s6OnN0cm9uZ2x5VmlzaXRTdHJvbmdSZWZlcmVuY2VzKGNvbnN0IENvbmN1cnJlbnRK
U0xvY2tlciYsIERlYnVnU2xvdFZpc2l0b3ImKTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRv
cj4KK3ZvaWQgQ29kZUJsb2NrOjpzdHJvbmdseVZpc2l0V2Vha1JlZmVyZW5jZXMoY29uc3QgQ29u
Y3VycmVudEpTTG9ja2VyJiwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBVTlVTRURfUEFSQU0o
dmlzaXRvcik7CiAKQEAgLTE4NDUsNiArMTkwNiw5IEBAIHZvaWQgQ29kZUJsb2NrOjpzdHJvbmds
eVZpc2l0V2Vha1JlZmVyZW4KICNlbmRpZiAgICAKIH0KIAordGVtcGxhdGUgdm9pZCBDb2RlQmxv
Y2s6OnN0cm9uZ2x5VmlzaXRXZWFrUmVmZXJlbmNlcyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXIm
LCBTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBDb2RlQmxvY2s6OnN0cm9uZ2x5VmlzaXRX
ZWFrUmVmZXJlbmNlcyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBBYnN0cmFjdFNsb3RWaXNp
dG9yJik7CisKIENvZGVCbG9jayogQ29kZUJsb2NrOjpiYXNlbGluZUFsdGVybmF0aXZlKCkKIHsK
ICNpZiBFTkFCTEUoSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Nv
ZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9D
b2RlQmxvY2suaAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0NvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMDEsMTAgKzIwMSwxMSBAQCBw
dWJsaWM6CiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEy
MzY3NwogICAgIENvZGVCbG9jayogYmFzZWxpbmVWZXJzaW9uKCk7CiAKKyAgICBERUNMQVJFX1ZJ
U0lUX0NISUxEUkVOOworCiAgICAgc3RhdGljIHNpemVfdCBlc3RpbWF0ZWRTaXplKEpTQ2VsbCos
IFZNJik7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRv
ciYpOwogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7Ci0gICAgdm9pZCB2aXNpdENo
aWxkcmVuKFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9JTlNUQU5DRV9WSVNJVF9DSElMRFJF
TjsKICAgICB2b2lkIGZpbmFsaXplVW5jb25kaXRpb25hbGx5KFZNJik7CiAKICAgICB2b2lkIG5v
dGlmeUxleGljYWxCaW5kaW5nVXBkYXRlKCk7CkBAIC05NjcsMTIgKzk2OCwxNCBAQCBwcml2YXRl
OgogICAgIGJvb2wgc2hvdWxkSmV0dGlzb25EdWVUb1dlYWtSZWZlcmVuY2UoVk0mKTsKICAgICBi
b29sIHNob3VsZEpldHRpc29uRHVlVG9PbGRBZ2UoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJik7
CiAgICAgCi0gICAgdm9pZCBwcm9wYWdhdGVUcmFuc2l0aW9ucyhjb25zdCBDb25jdXJyZW50SlNM
b2NrZXImLCBTbG90VmlzaXRvciYpOwotICAgIHZvaWQgZGV0ZXJtaW5lTGl2ZW5lc3MoY29uc3Qg
Q29uY3VycmVudEpTTG9ja2VyJiwgU2xvdFZpc2l0b3ImKTsKKy8vICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFZpc2l0b3I+IHZvaWQgcHJvcGFnYXRlVHJhbnNpdGlvbnMoY29uc3QgQ29uY3VycmVudEpT
TG9ja2VyJiwgVmlzaXRvciYpOworICAgIHZvaWQgcHJvcGFnYXRlVHJhbnNpdGlvbnMxKGNvbnN0
IENvbmN1cnJlbnRKU0xvY2tlciYsIEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKKy8vICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgZGV0ZXJtaW5lTGl2ZW5lc3MoY29uc3QgQ29uY3Vy
cmVudEpTTG9ja2VyJiwgVmlzaXRvciYpOworICAgIHZvaWQgZGV0ZXJtaW5lTGl2ZW5lc3MoY29u
c3QgQ29uY3VycmVudEpTTG9ja2VyJiwgQWJzdHJhY3RTbG90VmlzaXRvciYpOwogICAgICAgICAK
LSAgICB2b2lkIHN0cm9uZ2x5VmlzaXRTdHJvbmdSZWZlcmVuY2VzKGNvbnN0IENvbmN1cnJlbnRK
U0xvY2tlciYsIFNsb3RWaXNpdG9yJik7Ci0gICAgdm9pZCBzdHJvbmdseVZpc2l0V2Vha1JlZmVy
ZW5jZXMoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgU2xvdFZpc2l0b3ImKTsKLSAgICB2b2lk
IHZpc2l0T1NSRXhpdFRhcmdldHMoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgU2xvdFZpc2l0
b3ImKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIHN0cm9uZ2x5VmlzaXRT
dHJvbmdSZWZlcmVuY2VzKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIFZpc2l0b3ImKTsKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIHN0cm9uZ2x5VmlzaXRXZWFrUmVmZXJl
bmNlcyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBWaXNpdG9yJik7CisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCB2aXNpdE9TUkV4aXRUYXJnZXRzKGNvbnN0IENvbmN1cnJl
bnRKU0xvY2tlciYsIFZpc2l0b3ImKTsKIAogICAgIHVuc2lnbmVkIG51bWJlck9mTm9uQXJndW1l
bnRWYWx1ZVByb2ZpbGVzKCkgeyByZXR1cm4gbV9udW1iZXJPZk5vbkFyZ3VtZW50VmFsdWVQcm9m
aWxlczsgfQogICAgIHVuc2lnbmVkIHRvdGFsTnVtYmVyT2ZWYWx1ZVByb2ZpbGVzKCkgeyByZXR1
cm4gbnVtYmVyT2ZBcmd1bWVudFZhbHVlUHJvZmlsZXMoKSArIG51bWJlck9mTm9uQXJndW1lbnRW
YWx1ZVByb2ZpbGVzKCk7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9E
ZWxldGVCeUlkVmFyaWFudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0RlbGV0ZUJ5SWRWYXJpYW50LmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0RlbGV0ZUJ5SWRWYXJpYW50LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtODgsMTkgKzg4LDI5IEBAIGJvb2wgRGVsZXRlQnlJZFZhcmlhbnQ6OndyaXRl
c1N0cnVjdHVyZXMKICAgICByZXR1cm4gISFuZXdTdHJ1Y3R1cmUoKTsKIH0KIAotdm9pZCBEZWxl
dGVCeUlkVmFyaWFudDo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3Rl
bXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+CisvL3ZvaWQgRGVsZXRlQnlJZFZhcmlhbnQ6OnZpc2l0
QWdncmVnYXRlKFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIERlbGV0ZUJ5SWRWYXJpYW50Ojp2aXNp
dEFnZ3JlZ2F0ZTEoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKLSAgICBtX2lkZW50
aWZpZXIudmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7CisgICAgbV9pZGVudGlmaWVyLnZpc2l0QWdn
cmVnYXRlMSh2aXNpdG9yKTsKIH0KIAotdm9pZCBEZWxldGVCeUlkVmFyaWFudDo6bWFya0lmQ2hl
YXAoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3RlbXBsYXRlIHZvaWQgRGVsZXRlQnlJZFZhcmlh
bnQ6OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJik7CisvL3RlbXBsYXRlIHZvaWQgRGVsZXRl
QnlJZFZhcmlhbnQ6OnZpc2l0QWdncmVnYXRlKERlYnVnU2xvdFZpc2l0b3ImKTsKKworLy90ZW1w
bGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgorLy92b2lkIERlbGV0ZUJ5SWRWYXJpYW50OjptYXJrSWZD
aGVhcChWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBEZWxldGVCeUlkVmFyaWFudDo6bWFya0lmQ2hl
YXAxKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgaWYgKG1fb2xkU3RydWN0
dXJlKQotICAgICAgICBtX29sZFN0cnVjdHVyZS0+bWFya0lmQ2hlYXAodmlzaXRvcik7CisgICAg
ICAgIG1fb2xkU3RydWN0dXJlLT5tYXJrSWZDaGVhcDEodmlzaXRvcik7CiAgICAgaWYgKG1fbmV3
U3RydWN0dXJlKQotICAgICAgICBtX25ld1N0cnVjdHVyZS0+bWFya0lmQ2hlYXAodmlzaXRvcik7
CisgICAgICAgIG1fbmV3U3RydWN0dXJlLT5tYXJrSWZDaGVhcDEodmlzaXRvcik7CiB9CiAKKy8v
dGVtcGxhdGUgdm9pZCBEZWxldGVCeUlkVmFyaWFudDo6bWFya0lmQ2hlYXAoU2xvdFZpc2l0b3Im
KTsKKy8vdGVtcGxhdGUgdm9pZCBEZWxldGVCeUlkVmFyaWFudDo6bWFya0lmQ2hlYXAoRGVidWdT
bG90VmlzaXRvciYpOworCiB2b2lkIERlbGV0ZUJ5SWRWYXJpYW50OjpkdW1wKFByaW50U3RyZWFt
JiBvdXQpIGNvbnN0CiB7CiAgICAgZHVtcEluQ29udGV4dChvdXQsIG51bGxwdHIpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0RlbGV0ZUJ5SWRWYXJpYW50LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0RlbGV0ZUJ5SWRWYXJpYW50
LmgJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9E
ZWxldGVCeUlkVmFyaWFudC5oCSh3b3JraW5nIGNvcHkpCkBAIC02MSw4ICs2MSwxMCBAQCBwdWJs
aWM6CiAKICAgICBib29sIGF0dGVtcHRUb01lcmdlKGNvbnN0IERlbGV0ZUJ5SWRWYXJpYW50JiBv
dGhlcik7CiAKLSAgICB2b2lkIHZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJik7Ci0gICAgdm9p
ZCBtYXJrSWZDaGVhcChTbG90VmlzaXRvciYpOworLy8gICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlz
aXRvcj4gdm9pZCB2aXNpdEFnZ3JlZ2F0ZShWaXNpdG9yJik7CisvLyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBWaXNpdG9yPiB2b2lkIG1hcmtJZkNoZWFwKFZpc2l0b3ImKTsKKyAgICB2b2lkIHZpc2l0
QWdncmVnYXRlMShBYnN0cmFjdFNsb3RWaXNpdG9yJik7CisgICAgdm9pZCBtYXJrSWZDaGVhcDEo
QWJzdHJhY3RTbG90VmlzaXRvciYpOwogICAgIGJvb2wgZmluYWxpemUoVk0mKTsKIAogICAgIHZv
aWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0RlbGV0ZUJ5U3RhdHVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvRGVsZXRlQnlTdGF0dXMuY3BwCShyZXZpc2lvbiAyNzE0NDMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRGVsZXRlQnlTdGF0dXMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNTQsMTggKzI1NCwyOCBAQCBDYWNoZWFibGVJZGVudGlmaWVyIERlbGV0
ZUJ5U3RhdHVzOjpzaW5nCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotdm9pZCBEZWxldGVCeVN0
YXR1czo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3RlbXBsYXRlPHR5
cGVuYW1lIFZpc2l0b3I+CisvL3ZvaWQgRGVsZXRlQnlTdGF0dXM6OnZpc2l0QWdncmVnYXRlKFZp
c2l0b3ImIHZpc2l0b3IpCit2b2lkIERlbGV0ZUJ5U3RhdHVzOjp2aXNpdEFnZ3JlZ2F0ZTEoQWJz
dHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBmb3IgKERlbGV0ZUJ5SWRWYXJpYW50
JiB2YXJpYW50IDogbV92YXJpYW50cykKLSAgICAgICAgdmFyaWFudC52aXNpdEFnZ3JlZ2F0ZSh2
aXNpdG9yKTsKKyAgICAgICAgdmFyaWFudC52aXNpdEFnZ3JlZ2F0ZTEodmlzaXRvcik7CiB9CiAK
LXZvaWQgRGVsZXRlQnlTdGF0dXM6Om1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQor
Ly90ZW1wbGF0ZSB2b2lkIERlbGV0ZUJ5U3RhdHVzOjp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRv
ciYpOworLy90ZW1wbGF0ZSB2b2lkIERlbGV0ZUJ5U3RhdHVzOjp2aXNpdEFnZ3JlZ2F0ZShEZWJ1
Z1Nsb3RWaXNpdG9yJik7CisKKy8vdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KKy8vdm9pZCBE
ZWxldGVCeVN0YXR1czo6bWFya0lmQ2hlYXAoVmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgRGVsZXRl
QnlTdGF0dXM6Om1hcmtJZkNoZWFwMShBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewog
ICAgIGZvciAoRGVsZXRlQnlJZFZhcmlhbnQmIHZhcmlhbnQgOiBtX3ZhcmlhbnRzKQotICAgICAg
ICB2YXJpYW50Lm1hcmtJZkNoZWFwKHZpc2l0b3IpOworICAgICAgICB2YXJpYW50Lm1hcmtJZkNo
ZWFwMSh2aXNpdG9yKTsKIH0KIAorLy90ZW1wbGF0ZSB2b2lkIERlbGV0ZUJ5U3RhdHVzOjptYXJr
SWZDaGVhcChTbG90VmlzaXRvciYpOworLy90ZW1wbGF0ZSB2b2lkIERlbGV0ZUJ5U3RhdHVzOjpt
YXJrSWZDaGVhcChEZWJ1Z1Nsb3RWaXNpdG9yJik7CisKIGJvb2wgRGVsZXRlQnlTdGF0dXM6OmZp
bmFsaXplKFZNJiB2bSkKIHsKICAgICBmb3IgKGF1dG8mIHZhcmlhbnQgOiBtX3ZhcmlhbnRzKSB7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRGVsZXRlQnlTdGF0dXMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRGVsZXRlQnlTdGF0
dXMuaAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0RlbGV0ZUJ5U3RhdHVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTgxLDggKzgxLDEwIEBAIHB1Ymxp
YzoKICAgICAvLyBBdHRlbXB0cyB0byByZWR1Y2UgdGhlIHNldCBvZiB2YXJpYW50cyB0byBmaXQg
dGhlIGdpdmVuIHN0cnVjdHVyZSBzZXQuIFRoaXMgbWF5IGJlIGFwcHJveGltYXRlLgogICAgIHZv
aWQgZmlsdGVyKGNvbnN0IFN0cnVjdHVyZVNldCYpOwogCi0gICAgdm9pZCB2aXNpdEFnZ3JlZ2F0
ZShTbG90VmlzaXRvciYpOwotICAgIHZvaWQgbWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImKTsKKy8v
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgdmlzaXRBZ2dyZWdhdGUoVmlzaXRv
ciYpOworLy8gICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCBtYXJrSWZDaGVhcChW
aXNpdG9yJik7CisgICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZTEoQWJzdHJhY3RTbG90VmlzaXRvciYp
OworICAgIHZvaWQgbWFya0lmQ2hlYXAxKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKICAgICBib29s
IGZpbmFsaXplKFZNJik7CiAKICAgICBib29sIGFwcGVuZFZhcmlhbnQoY29uc3QgRGVsZXRlQnlJ
ZFZhcmlhbnQmKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9EaXJlY3RF
dmFsQ29kZUNhY2hlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvRGlyZWN0RXZhbENvZGVDYWNoZS5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9EaXJlY3RFdmFsQ29kZUNhY2hlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDUsNyArNDUsOCBAQCB2b2lkIERpcmVjdEV2YWxDb2RlQ2FjaGU6OmNsZWFy
KCkKICAgICBtX2NhY2hlTWFwLmNsZWFyKCk7CiB9CiAKLXZvaWQgRGlyZWN0RXZhbENvZGVDYWNo
ZTo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBWaXNpdG9yPgordm9pZCBEaXJlY3RFdmFsQ29kZUNhY2hlOjp2aXNpdEFnZ3JlZ2F0ZShWaXNp
dG9yJiB2aXNpdG9yKQogewogICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fbG9jayk7CiAgICAgRXZh
bENhY2hlTWFwOjppdGVyYXRvciBlbmQgPSBtX2NhY2hlTWFwLmVuZCgpOwpAQCAtNTMsNSArNTQs
NyBAQCB2b2lkIERpcmVjdEV2YWxDb2RlQ2FjaGU6OnZpc2l0QWdncmVnYXRlCiAgICAgICAgIHZp
c2l0b3IuYXBwZW5kKHB0ci0+dmFsdWUpOwogfQogCi19IC8vIG5hbWVzcGFjZSBKU0MKK3RlbXBs
YXRlIHZvaWQgRGlyZWN0RXZhbENvZGVDYWNoZTo6dmlzaXRBZ2dyZWdhdGUoQWJzdHJhY3RTbG90
VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBEaXJlY3RFdmFsQ29kZUNhY2hlOjp2aXNpdEFnZ3Jl
Z2F0ZShTbG90VmlzaXRvciYpOwogCit9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9EaXJlY3RFdmFsQ29kZUNhY2hlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0RpcmVjdEV2YWxDb2RlQ2FjaGUuaAko
cmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0RpcmVj
dEV2YWxDb2RlQ2FjaGUuaAkod29ya2luZyBjb3B5KQpAQCAtOTcsNyArOTcsNyBAQCBuYW1lc3Bh
Y2UgSlNDIHsKIAogICAgICAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBtX2NhY2hl
TWFwLmlzRW1wdHkoKTsgfQogCi0gICAgICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0
b3ImKTsKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCB2aXNpdEFnZ3Jl
Z2F0ZShWaXNpdG9yJik7CiAKICAgICAgICAgdm9pZCBjbGVhcigpOwogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGFibGVUb0Nv
ZGVCbG9ja0VkZ2UuY3BwCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOC0yMDIwIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
NTMsNyArNTMsOSBAQCB2b2lkIEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2U6OmZpbmlzaENyCiAg
ICAgQVNTRVJUKCFpc0FjdGl2ZSgpKTsKIH0KIAotdm9pZCBFeGVjdXRhYmxlVG9Db2RlQmxvY2tF
ZGdlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0
ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBFeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdl
Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCisvL3Zv
aWQgRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZTo6dmlzaXRDaGlsZHJlbjEoSlNDZWxsKiBjZWxs
LCBBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFZNJiB2bSA9IHZpc2l0b3Iu
dm0oKTsKICAgICBFeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlKiBlZGdlID0ganNDYXN0PEV4ZWN1
dGFibGVUb0NvZGVCbG9ja0VkZ2UqPihjZWxsKTsKQEAgLTExNCwxNSArMTE2LDE3IEBAIHZvaWQg
RXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZTo6dmlzaXRDaGkKICAgICAvLyB3aWxsIGtlZXAgZml4
cG9pbnRpbmcgdW50aWwgdGhlIGVuZC4KICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKGNv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpOwogICAgIHZtLmV4ZWN1dGFibGVUb0NvZGVCbG9ja0Vk
Z2VzV2l0aENvbnN0cmFpbnRzLmFkZChlZGdlKTsKLSAgICBlZGdlLT5ydW5Db25zdHJhaW50KGxv
Y2tlciwgdm0sIHZpc2l0b3IpOworICAgIGVkZ2UtPnJ1bkNvbnN0cmFpbnQxKGxvY2tlciwgdm0s
IHZpc2l0b3IpOyAvLyBtbGFtIEZJWE1FCiB9CiAKLXZvaWQgRXhlY3V0YWJsZVRvQ29kZUJsb2Nr
RWRnZTo6dmlzaXRPdXRwdXRDb25zdHJhaW50cyhKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2Up
OworCit2b2lkIEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2U6OnZpc2l0T3V0cHV0Q29uc3RyYWlu
dHMoSlNDZWxsKiBjZWxsLCBBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFZN
JiB2bSA9IHZpc2l0b3Iudm0oKTsKICAgICBFeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlKiBlZGdl
ID0ganNDYXN0PEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UqPihjZWxsKTsKICAgICAKLSAgICBl
ZGdlLT5ydW5Db25zdHJhaW50KE5vTG9ja2luZ05lY2Vzc2FyeSwgdm0sIHZpc2l0b3IpOworICAg
IGVkZ2UtPnJ1bkNvbnN0cmFpbnQxKE5vTG9ja2luZ05lY2Vzc2FyeSwgdm0sIHZpc2l0b3IpOwog
fQogCiB2b2lkIEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2U6OmZpbmFsaXplVW5jb25kaXRpb25h
bGx5KFZNJiB2bSkKQEAgLTE4NiwxNiArMTkwLDIwIEBAIEV4ZWN1dGFibGVUb0NvZGVCbG9ja0Vk
Z2U6OkV4ZWN1dGFibGVUb0MKIHsKIH0KIAotdm9pZCBFeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdl
OjpydW5Db25zdHJhaW50KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYgbG9ja2VyLCBWTSYgdm0s
IFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy90ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgorLy92
b2lkIEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2U6OnJ1bkNvbnN0cmFpbnQxKGNvbnN0IENvbmN1
cnJlbnRKU0xvY2tlciYgbG9ja2VyLCBWTSYgdm0sIFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIEV4
ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2U6OnJ1bkNvbnN0cmFpbnQxKGNvbnN0IENvbmN1cnJlbnRK
U0xvY2tlciYgbG9ja2VyLCBWTSYgdm0sIEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7
CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBtX2NvZGVCbG9jay5nZXQoKTsKICAgICAKLSAg
ICBjb2RlQmxvY2stPnByb3BhZ2F0ZVRyYW5zaXRpb25zKGxvY2tlciwgdmlzaXRvcik7CisgICAg
Y29kZUJsb2NrLT5wcm9wYWdhdGVUcmFuc2l0aW9uczEobG9ja2VyLCB2aXNpdG9yKTsKICAgICBj
b2RlQmxvY2stPmRldGVybWluZUxpdmVuZXNzKGxvY2tlciwgdmlzaXRvcik7CiAgICAgCiAgICAg
aWYgKHZtLmhlYXAuaXNNYXJrZWQoY29kZUJsb2NrKSkKICAgICAgICAgdm0uZXhlY3V0YWJsZVRv
Q29kZUJsb2NrRWRnZXNXaXRoQ29uc3RyYWludHMucmVtb3ZlKHRoaXMpOwogfQogCi19IC8vIG5h
bWVzcGFjZSBKU0MKKy8vdGVtcGxhdGUgdm9pZCBFeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlOjpy
dW5Db25zdHJhaW50MShjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBWTSYsIFNsb3RWaXNpdG9y
Jik7CisvL3RlbXBsYXRlIHZvaWQgRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZTo6cnVuQ29uc3Ry
YWludDEoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgVk0mLCBBYnN0cmFjdFNsb3RWaXNpdG9y
Jik7CiAKK30gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0V4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZS5oCShyZXZp
c2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhlY3V0YWJs
ZVRvQ29kZUJsb2NrRWRnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxOC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxOC0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTMsOSArNTMsMTAgQEAgcHVi
bGljOgogICAgIERFQ0xBUkVfSU5GTzsKIAogICAgIENvZGVCbG9jayogY29kZUJsb2NrKCkgY29u
c3QgeyByZXR1cm4gbV9jb2RlQmxvY2suZ2V0KCk7IH0KLSAgICAKLSAgICBzdGF0aWMgdm9pZCB2
aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7Ci0gICAgc3RhdGljIHZvaWQgdmlz
aXRPdXRwdXRDb25zdHJhaW50cyhKU0NlbGwqLCBTbG90VmlzaXRvciYpOworCisgICAgREVDTEFS
RV9WSVNJVF9DSElMRFJFTjsKKy8vICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4xKEpTQ2Vs
bCosIEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKKyAgICBzdGF0aWMgdm9pZCB2aXNpdE91dHB1dENv
bnN0cmFpbnRzKEpTQ2VsbCosIEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKICAgICB2b2lkIGZpbmFs
aXplVW5jb25kaXRpb25hbGx5KFZNJik7CiAgICAgCiAgICAgc3RhdGljIENvZGVCbG9jayogdW53
cmFwKEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UqIGVkZ2UpCkBAIC04MSw5ICs4MiwxMSBAQCBw
cml2YXRlOgogICAgIHZvaWQgYWN0aXZhdGUoKTsKICAgICB2b2lkIGRlYWN0aXZhdGUoKTsKICAg
ICBib29sIGlzQWN0aXZlKCkgY29uc3Q7Ci0gICAgCi0gICAgdm9pZCBydW5Db25zdHJhaW50KGNv
bnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIFZNJiwgU2xvdFZpc2l0b3ImKTsKLSAgICAKKworLy8g
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KKy8vICAgIHZvaWQgcnVuQ29uc3RyYWludDEo
Y29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgVk0mLCBWaXNpdG9yJik7CisgICAgdm9pZCBydW5D
b25zdHJhaW50MShjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBWTSYsIEFic3RyYWN0U2xvdFZp
c2l0b3ImKTsKKwogICAgIFdyaXRlQmFycmllcjxDb2RlQmxvY2s+IG1fY29kZUJsb2NrOwogfTsK
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRWYXJpYW50LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFZh
cmlhbnQuY3BwCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvR2V0QnlJZFZhcmlhbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTYsMTYgKzE1Niwy
NiBAQCBib29sIEdldEJ5SWRWYXJpYW50OjphdHRlbXB0VG9NZXJnZShjb25zCiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKLXZvaWQgR2V0QnlJZFZhcmlhbnQ6OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNp
dG9yJiB2aXNpdG9yKQorLy90ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgorLy92b2lkIEdldEJ5
SWRWYXJpYW50Ojp2aXNpdEFnZ3JlZ2F0ZShWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBHZXRCeUlk
VmFyaWFudDo6dmlzaXRBZ2dyZWdhdGUxKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7
Ci0gICAgbV9pZGVudGlmaWVyLnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOworICAgIG1faWRlbnRp
Zmllci52aXNpdEFnZ3JlZ2F0ZTEodmlzaXRvcik7CiB9CiAKLXZvaWQgR2V0QnlJZFZhcmlhbnQ6
Om1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy90ZW1wbGF0ZSB2b2lkIEdldEJ5
SWRWYXJpYW50Ojp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYpOworLy90ZW1wbGF0ZSB2b2lk
IEdldEJ5SWRWYXJpYW50Ojp2aXNpdEFnZ3JlZ2F0ZShEZWJ1Z1Nsb3RWaXNpdG9yJik7CisKKy8v
dGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KKy8vdm9pZCBHZXRCeUlkVmFyaWFudDo6bWFya0lm
Q2hlYXAoVmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgR2V0QnlJZFZhcmlhbnQ6Om1hcmtJZkNoZWFw
MShBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewotICAgIG1fc3RydWN0dXJlU2V0Lm1h
cmtJZkNoZWFwKHZpc2l0b3IpOworICAgIG1fc3RydWN0dXJlU2V0Lm1hcmtJZkNoZWFwMSh2aXNp
dG9yKTsKIH0KIAorLy90ZW1wbGF0ZSB2b2lkIEdldEJ5SWRWYXJpYW50OjptYXJrSWZDaGVhcChT
bG90VmlzaXRvciYpOworLy90ZW1wbGF0ZSB2b2lkIEdldEJ5SWRWYXJpYW50OjptYXJrSWZDaGVh
cChEZWJ1Z1Nsb3RWaXNpdG9yJik7CisKIGJvb2wgR2V0QnlJZFZhcmlhbnQ6OmZpbmFsaXplKFZN
JiB2bSkKIHsKICAgICBpZiAoIW1fc3RydWN0dXJlU2V0LmlzU3RpbGxBbGl2ZSh2bSkpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFZhcmlhbnQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFZhcmlhbnQuaAko
cmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5
SWRWYXJpYW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTc3LDggKzc3LDEwIEBAIHB1YmxpYzoKIAog
ICAgIGJvb2wgYXR0ZW1wdFRvTWVyZ2UoY29uc3QgR2V0QnlJZFZhcmlhbnQmIG90aGVyKTsKICAg
ICAKLSAgICB2b2lkIHZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJik7Ci0gICAgdm9pZCBtYXJr
SWZDaGVhcChTbG90VmlzaXRvciYpOworLy8gICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4g
dm9pZCB2aXNpdEFnZ3JlZ2F0ZShWaXNpdG9yJik7CisvLyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPiB2b2lkIG1hcmtJZkNoZWFwKFZpc2l0b3ImKTsKKyAgICB2b2lkIHZpc2l0QWdncmVn
YXRlMShBYnN0cmFjdFNsb3RWaXNpdG9yJik7CisgICAgdm9pZCBtYXJrSWZDaGVhcDEoQWJzdHJh
Y3RTbG90VmlzaXRvciYpOwogICAgIGJvb2wgZmluYWxpemUoVk0mKTsKICAgICAKICAgICB2b2lk
IGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9HZXRCeVN0YXR1cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0dldEJ5U3RhdHVzLmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5U3RhdHVzLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNTMwLDIwICs1MzAsMzEgQEAgdm9pZCBHZXRCeVN0YXR1czo6ZmlsdGVyKGNvbnN0IFN0cnVj
dHVyZQogICAgICAgICBtX3N0YXRlID0gTm9JbmZvcm1hdGlvbjsKIH0KIAotdm9pZCBHZXRCeVN0
YXR1czo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3RlbXBsYXRlPHR5
cGVuYW1lIFZpc2l0b3I+CisvL3ZvaWQgR2V0QnlTdGF0dXM6OnZpc2l0QWdncmVnYXRlKFZpc2l0
b3ImIHZpc2l0b3IpCit2b2lkIEdldEJ5U3RhdHVzOjp2aXNpdEFnZ3JlZ2F0ZTEoQWJzdHJhY3RT
bG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBpZiAoaXNNb2R1bGVOYW1lc3BhY2UoKSkKLSAg
ICAgICAgbV9tb2R1bGVOYW1lc3BhY2VEYXRhLT5tX2lkZW50aWZpZXIudmlzaXRBZ2dyZWdhdGUo
dmlzaXRvcik7CisgICAgICAgIG1fbW9kdWxlTmFtZXNwYWNlRGF0YS0+bV9pZGVudGlmaWVyLnZp
c2l0QWdncmVnYXRlMSh2aXNpdG9yKTsKICAgICBmb3IgKEdldEJ5SWRWYXJpYW50JiB2YXJpYW50
IDogbV92YXJpYW50cykKLSAgICAgICAgdmFyaWFudC52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsK
KyAgICAgICAgdmFyaWFudC52aXNpdEFnZ3JlZ2F0ZTEodmlzaXRvcik7CiB9CiAKLXZvaWQgR2V0
QnlTdGF0dXM6Om1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy90ZW1wbGF0ZSB2
b2lkIEdldEJ5U3RhdHVzOjp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYpOworLy90ZW1wbGF0
ZSB2b2lkIEdldEJ5U3RhdHVzOjp2aXNpdEFnZ3JlZ2F0ZShEZWJ1Z1Nsb3RWaXNpdG9yJik7CisK
Ky8vdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KKy8vdm9pZCBHZXRCeVN0YXR1czo6bWFya0lm
Q2hlYXAoVmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgR2V0QnlTdGF0dXM6Om1hcmtJZkNoZWFwMShB
YnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGZvciAoR2V0QnlJZFZhcmlhbnQm
IHZhcmlhbnQgOiBtX3ZhcmlhbnRzKQotICAgICAgICB2YXJpYW50Lm1hcmtJZkNoZWFwKHZpc2l0
b3IpOworICAgICAgICB2YXJpYW50Lm1hcmtJZkNoZWFwMSh2aXNpdG9yKTsKIH0KIAorLy90ZW1w
bGF0ZSB2b2lkIEdldEJ5U3RhdHVzOjptYXJrSWZDaGVhcChTbG90VmlzaXRvciYpOworLy90ZW1w
bGF0ZSB2b2lkIEdldEJ5U3RhdHVzOjptYXJrSWZDaGVhcChEZWJ1Z1Nsb3RWaXNpdG9yJik7CisK
KwogYm9vbCBHZXRCeVN0YXR1czo6ZmluYWxpemUoVk0mIHZtKQogewogICAgIGZvciAoR2V0QnlJ
ZFZhcmlhbnQmIHZhcmlhbnQgOiBtX3ZhcmlhbnRzKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvR2V0QnlTdGF0dXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlTdGF0dXMuaAkocmV2aXNpb24gMjcxNDQzKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5U3RhdHVzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTExOCw4ICsxMTgsMTAgQEAgcHVibGljOgogICAgIEpTTW9kdWxlRW52aXJvbm1lbnQqIG1v
ZHVsZUVudmlyb25tZW50KCkgY29uc3QgeyByZXR1cm4gbV9tb2R1bGVOYW1lc3BhY2VEYXRhLT5t
X21vZHVsZUVudmlyb25tZW50OyB9CiAgICAgU2NvcGVPZmZzZXQgc2NvcGVPZmZzZXQoKSBjb25z
dCB7IHJldHVybiBtX21vZHVsZU5hbWVzcGFjZURhdGEtPm1fc2NvcGVPZmZzZXQ7IH0KICAgICAK
LSAgICB2b2lkIHZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJik7Ci0gICAgdm9pZCBtYXJrSWZD
aGVhcChTbG90VmlzaXRvciYpOworLy8gICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9p
ZCB2aXNpdEFnZ3JlZ2F0ZShWaXNpdG9yJik7CisvLyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNp
dG9yPiB2b2lkIG1hcmtJZkNoZWFwKFZpc2l0b3ImKTsKKyAgICB2b2lkIHZpc2l0QWdncmVnYXRl
MShBYnN0cmFjdFNsb3RWaXNpdG9yJik7CisgICAgdm9pZCBtYXJrSWZDaGVhcDEoQWJzdHJhY3RT
bG90VmlzaXRvciYpOwogICAgIGJvb2wgZmluYWxpemUoVk0mKTsgLy8gUmV0dXJuIHRydWUgaWYg
dGhpcyBnZXRzIHRvIGxpdmUuCiAKICAgICBib29sIGFwcGVuZFZhcmlhbnQoY29uc3QgR2V0QnlJ
ZFZhcmlhbnQmKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbkJ5SWRT
dGF0dXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9J
bkJ5SWRTdGF0dXMuY3BwCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvSW5CeUlkU3RhdHVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUxLDEyICsy
NTEsMTcgQEAgdm9pZCBJbkJ5SWRTdGF0dXM6OmZpbHRlcihjb25zdCBTdHJ1Y3R1cgogICAgICAg
ICBtX3N0YXRlID0gTm9JbmZvcm1hdGlvbjsKIH0KIAotdm9pZCBJbkJ5SWRTdGF0dXM6Om1hcmtJ
ZkNoZWFwKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy90ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
PgorLy92b2lkIEluQnlJZFN0YXR1czo6bWFya0lmQ2hlYXAoVmlzaXRvciYgdmlzaXRvcikKK3Zv
aWQgSW5CeUlkU3RhdHVzOjptYXJrSWZDaGVhcDEoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRv
cikKIHsKICAgICBmb3IgKEluQnlJZFZhcmlhbnQmIHZhcmlhbnQgOiBtX3ZhcmlhbnRzKQotICAg
ICAgICB2YXJpYW50Lm1hcmtJZkNoZWFwKHZpc2l0b3IpOworICAgICAgICB2YXJpYW50Lm1hcmtJ
ZkNoZWFwMSh2aXNpdG9yKTsKIH0KIAorLy90ZW1wbGF0ZSB2b2lkIEluQnlJZFN0YXR1czo6bWFy
a0lmQ2hlYXAoU2xvdFZpc2l0b3ImKTsKKy8vdGVtcGxhdGUgdm9pZCBJbkJ5SWRTdGF0dXM6Om1h
cmtJZkNoZWFwKERlYnVnU2xvdFZpc2l0b3ImKTsKKwogYm9vbCBJbkJ5SWRTdGF0dXM6OmZpbmFs
aXplKFZNJiB2bSkKIHsKICAgICBmb3IgKEluQnlJZFZhcmlhbnQmIHZhcmlhbnQgOiBtX3Zhcmlh
bnRzKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5CeUlkU3RhdHVz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luQnlJZFN0
YXR1cy5oCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvSW5CeUlkU3RhdHVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwNiw3ICsxMDYsOCBAQCBwdWJs
aWM6CiAgICAgLy8gQXR0ZW1wdHMgdG8gcmVkdWNlIHRoZSBzZXQgb2YgdmFyaWFudHMgdG8gZml0
IHRoZSBnaXZlbiBzdHJ1Y3R1cmUgc2V0LiBUaGlzIG1heSBiZSBhcHByb3hpbWF0ZS4KICAgICB2
b2lkIGZpbHRlcihjb25zdCBTdHJ1Y3R1cmVTZXQmKTsKICAgICAKLSAgICB2b2lkIG1hcmtJZkNo
ZWFwKFNsb3RWaXNpdG9yJik7CisvLyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lk
IG1hcmtJZkNoZWFwKFZpc2l0b3ImKTsKKyAgICB2b2lkIG1hcmtJZkNoZWFwMShBYnN0cmFjdFNs
b3RWaXNpdG9yJik7CiAgICAgYm9vbCBmaW5hbGl6ZShWTSYpOwogCiAgICAgdm9pZCBkdW1wKFBy
aW50U3RyZWFtJikgY29uc3Q7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
SW5CeUlkVmFyaWFudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0luQnlJZFZhcmlhbnQuY3BwCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5CeUlkVmFyaWFudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTY0LDExICs2NCwxNiBAQCBib29sIEluQnlJZFZhcmlhbnQ6OmF0dGVtcHRUb01lcmdlKGNvbnN0
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgSW5CeUlkVmFyaWFudDo6bWFya0lmQ2hlYXAo
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+CisvL3Zv
aWQgSW5CeUlkVmFyaWFudDo6bWFya0lmQ2hlYXAoVmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgSW5C
eUlkVmFyaWFudDo6bWFya0lmQ2hlYXAxKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7
Ci0gICAgbV9zdHJ1Y3R1cmVTZXQubWFya0lmQ2hlYXAodmlzaXRvcik7CisgICAgbV9zdHJ1Y3R1
cmVTZXQubWFya0lmQ2hlYXAxKHZpc2l0b3IpOwogfQogCisvL3RlbXBsYXRlIHZvaWQgSW5CeUlk
VmFyaWFudDo6bWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImKTsKKy8vdGVtcGxhdGUgdm9pZCBJbkJ5
SWRWYXJpYW50OjptYXJrSWZDaGVhcChEZWJ1Z1Nsb3RWaXNpdG9yJik7CisKIGJvb2wgSW5CeUlk
VmFyaWFudDo6ZmluYWxpemUoVk0mIHZtKQogewogICAgIGlmICghbV9zdHJ1Y3R1cmVTZXQuaXNT
dGlsbEFsaXZlKHZtKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbkJ5
SWRWYXJpYW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0luQnlJZFZhcmlhbnQuaAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0luQnlJZFZhcmlhbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNTcsNyArNTcs
OCBAQCBwdWJsaWM6CiAKICAgICBib29sIGF0dGVtcHRUb01lcmdlKGNvbnN0IEluQnlJZFZhcmlh
bnQmIG90aGVyKTsKICAgICAKLSAgICB2b2lkIG1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJik7Cisv
LyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIG1hcmtJZkNoZWFwKFZpc2l0b3Im
KTsKKyAgICB2b2lkIG1hcmtJZkNoZWFwMShBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAgICAgYm9v
bCBmaW5hbGl6ZShWTSYpOwogCiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW50ZXJuYWxGdW5jdGlvbkFsbG9j
YXRpb25Qcm9maWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0ludGVybmFsRnVuY3Rpb25BbGxvY2F0aW9uUHJvZmlsZS5oCShyZXZpc2lvbiAyNzE0NDMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW50ZXJuYWxGdW5jdGlvbkFsbG9j
YXRpb25Qcm9maWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDcgKzM5LDcgQEAgcHVibGljOgog
ICAgIFN0cnVjdHVyZSogY3JlYXRlQWxsb2NhdGlvblN0cnVjdHVyZUZyb21CYXNlKFZNJiwgSlNH
bG9iYWxPYmplY3QqLCBKU0NlbGwqIG93bmVyLCBKU09iamVjdCogcHJvdG90eXBlLCBTdHJ1Y3R1
cmUqIGJhc2UpOwogCiAgICAgdm9pZCBjbGVhcigpIHsgbV9zdHJ1Y3R1cmUuY2xlYXIoKTsgfQot
ICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsgdmlzaXRvci5h
cHBlbmQobV9zdHJ1Y3R1cmUpOyB9CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9p
ZCB2aXNpdEFnZ3JlZ2F0ZShWaXNpdG9yJiB2aXNpdG9yKSB7IHZpc2l0b3IuYXBwZW5kKG1fc3Ry
dWN0dXJlKTsgfQogCiBwcml2YXRlOgogICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1fc3Ry
dWN0dXJlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09iamVjdEFsbG9j
YXRpb25Qcm9maWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL09iamVjdEFsbG9jYXRpb25Qcm9maWxlLmgJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PYmplY3RBbGxvY2F0aW9uUHJvZmlsZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC02NCw3ICs2NCw4IEBAIHByb3RlY3RlZDoKICAgICAgICAgQVNTRVJUKGlz
TnVsbCgpKTsKICAgICB9CiAKLSAgICB2b2lkIHZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+CisgICAgdm9pZCB2aXNpdEFn
Z3JlZ2F0ZShWaXNpdG9yJiB2aXNpdG9yKQogICAgIHsKICAgICAgICAgdmlzaXRvci5hcHBlbmQo
bV9zdHJ1Y3R1cmUpOwogICAgIH0KQEAgLTExMCw3ICsxMTEsOCBAQCBwdWJsaWM6CiAgICAgICAg
IEFTU0VSVChpc051bGwoKSk7CiAgICAgfQogCi0gICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShTbG90
VmlzaXRvciYgdmlzaXRvcikKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgorICAgIHZv
aWQgdmlzaXRBZ2dyZWdhdGUoVmlzaXRvciYgdmlzaXRvcikKICAgICB7CiAgICAgICAgIEJhc2U6
OnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOwogICAgICAgICB2aXNpdG9yLmFwcGVuZChtX3Byb3Rv
dHlwZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNB
Y2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Q
b2x5bW9ycGhpY0FjY2Vzcy5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM1OCw3ICszNTgsOSBAQCBib29sIFBvbHltb3JwaGljQWNjZXNzOjp2aXNpdFdlYWsoVk0mIHZt
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgUG9seW1vcnBoaWNBY2Nlc3M6OnByb3BhZ2F0
ZVRyYW5zaXRpb25zKFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBjb25zdAorLy90ZW1wbGF0ZTx0eXBl
bmFtZSBWaXNpdG9yPgorLy9ib29sIFBvbHltb3JwaGljQWNjZXNzOjpwcm9wYWdhdGVUcmFuc2l0
aW9uczEwKFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0Citib29sIFBvbHltb3JwaGljQWNjZXNzOjpw
cm9wYWdhdGVUcmFuc2l0aW9uczEwKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0
CiB7CiAgICAgYm9vbCByZXN1bHQgPSB0cnVlOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBzaXplKCk7ICsraSkKQEAgLTM2NiwxMiArMzY4LDIxIEBAIGJvb2wgUG9seW1vcnBoaWNBY2Nl
c3M6OnByb3BhZ2F0ZVRyYW5zaXQKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi12b2lkIFBvbHlt
b3JwaGljQWNjZXNzOjp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vdGVt
cGxhdGU8PiBib29sIFBvbHltb3JwaGljQWNjZXNzOjpwcm9wYWdhdGVUcmFuc2l0aW9uczEwKFNs
b3RWaXNpdG9yJikgY29uc3Q7CisvL3RlbXBsYXRlPD4gYm9vbCBQb2x5bW9ycGhpY0FjY2Vzczo6
cHJvcGFnYXRlVHJhbnNpdGlvbnMxMChBYnN0cmFjdFNsb3RWaXNpdG9yJikgY29uc3Q7CisKKwor
Ly90ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgorLy92b2lkIFBvbHltb3JwaGljQWNjZXNzOjp2
aXNpdEFnZ3JlZ2F0ZShWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBQb2x5bW9ycGhpY0FjY2Vzczo6
dmlzaXRBZ2dyZWdhdGUxKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemUoKTsgKytpKQotICAgICAgICBhdChpKS52aXNpdEFn
Z3JlZ2F0ZSh2aXNpdG9yKTsKKyAgICAgICAgYXQoaSkudmlzaXRBZ2dyZWdhdGUxKHZpc2l0b3Ip
OwogfQogCisvL3RlbXBsYXRlIHZvaWQgUG9seW1vcnBoaWNBY2Nlc3M6OnZpc2l0QWdncmVnYXRl
KFNsb3RWaXNpdG9yJik7CisvL3RlbXBsYXRlIHZvaWQgUG9seW1vcnBoaWNBY2Nlc3M6OnZpc2l0
QWdncmVnYXRlKERlYnVnU2xvdFZpc2l0b3ImKTsKKwogdm9pZCBQb2x5bW9ycGhpY0FjY2Vzczo6
ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAogewogICAgIG91dC5wcmludChSYXdQb2ludGVy
KHRoaXMpLCAiOlsiKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5
bW9ycGhpY0FjY2Vzcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5oCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuaAkod29ya2luZyBjb3B5KQpA
QCAtMTUyLDE0ICsxNTIsMTYgQEAgcHVibGljOgogICAgIGNvbnN0IEFjY2Vzc0Nhc2UmIGF0KHVu
c2lnbmVkIGkpIGNvbnN0IHsgcmV0dXJuICptX2xpc3RbaV07IH0KICAgICBjb25zdCBBY2Nlc3ND
YXNlJiBvcGVyYXRvcltdKHVuc2lnbmVkIGkpIGNvbnN0IHsgcmV0dXJuICptX2xpc3RbaV07IH0K
IAotICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImKTsKKy8vICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgdmlzaXRBZ2dyZWdhdGUoVmlzaXRvciYpOworICAgIHZv
aWQgdmlzaXRBZ2dyZWdhdGUxKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKIAogICAgIC8vIElmIHRo
aXMgcmV0dXJucyBmYWxzZSB0aGVuIHdlIGFyZSByZXF1ZXN0aW5nIGEgcmVzZXQgb2YgdGhlIG93
bmluZyBTdHJ1Y3R1cmVTdHViSW5mby4KICAgICBib29sIHZpc2l0V2VhayhWTSYpIGNvbnN0Owog
ICAgIAogICAgIC8vIFRoaXMgcmV0dXJucyB0cnVlIGlmIGl0IGhhcyBtYXJrZWQgZXZlcnl0aGlu
ZyBpdCB3aWxsIGV2ZXIgbWFya2VkLiBUaGlzIGNhbiBiZSB1c2VkIGFzIGFuCiAgICAgLy8gb3B0
aW1pemF0aW9uIHRvIHRoZW4gYXZvaWQgY2FsbGluZyB0aGlzIG1ldGhvZCBhZ2FpbiBkdXJpbmcg
dGhlIGZpeHBvaW50LgotICAgIGJvb2wgcHJvcGFnYXRlVHJhbnNpdGlvbnMoU2xvdFZpc2l0b3Im
KSBjb25zdDsKKy8vICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IGJvb2wgcHJvcGFnYXRl
VHJhbnNpdGlvbnMxMChWaXNpdG9yJikgY29uc3Q7CisgICAgYm9vbCBwcm9wYWdhdGVUcmFuc2l0
aW9uczEwKEFic3RyYWN0U2xvdFZpc2l0b3ImKSBjb25zdDsKIAogICAgIHZvaWQgYWJvdXRUb0Rp
ZSgpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1
cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5
SWRTdGF0dXMuY3BwCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5NiwxMiArMzk2
LDE3IEBAIFB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6c2xvd1ZlcnNpb24KICAgICByZXR1
cm4gUHV0QnlJZFN0YXR1cyhtYWtlc0NhbGxzKCkgPyBNYWtlc0NhbGxzIDogVGFrZXNTbG93UGF0
aCk7CiB9CiAKLXZvaWQgUHV0QnlJZFN0YXR1czo6bWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImIHZp
c2l0b3IpCisvL3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+CisvL3ZvaWQgUHV0QnlJZFN0YXR1
czo6bWFya0lmQ2hlYXAoVmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgUHV0QnlJZFN0YXR1czo6bWFy
a0lmQ2hlYXAxKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgZm9yIChQdXRC
eUlkVmFyaWFudCYgdmFyaWFudCA6IG1fdmFyaWFudHMpCi0gICAgICAgIHZhcmlhbnQubWFya0lm
Q2hlYXAodmlzaXRvcik7CisgICAgICAgIHZhcmlhbnQubWFya0lmQ2hlYXAxKHZpc2l0b3IpOwog
fQogCisvL3RlbXBsYXRlIHZvaWQgUHV0QnlJZFN0YXR1czo6bWFya0lmQ2hlYXAoU2xvdFZpc2l0
b3ImKTsKKy8vdGVtcGxhdGUgdm9pZCBQdXRCeUlkU3RhdHVzOjptYXJrSWZDaGVhcChEZWJ1Z1Ns
b3RWaXNpdG9yJik7CisKIGJvb2wgUHV0QnlJZFN0YXR1czo6ZmluYWxpemUoVk0mIHZtKQogewog
ICAgIGZvciAoUHV0QnlJZFZhcmlhbnQmIHZhcmlhbnQgOiBtX3ZhcmlhbnRzKSB7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmgJKHJldmlz
aW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3Rh
dHVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTExNyw3ICsxMTcsOCBAQCBwdWJsaWM6CiAgICAgY29u
c3QgUHV0QnlJZFZhcmlhbnQmIGF0KHNpemVfdCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV92YXJp
YW50c1tpbmRleF07IH0KICAgICBjb25zdCBQdXRCeUlkVmFyaWFudCYgb3BlcmF0b3JbXShzaXpl
X3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIGF0KGluZGV4KTsgfQogICAgIAotICAgIHZvaWQgbWFy
a0lmQ2hlYXAoU2xvdFZpc2l0b3ImKTsKKy8vICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+
IHZvaWQgbWFya0lmQ2hlYXAoVmlzaXRvciYpOworICAgIHZvaWQgbWFya0lmQ2hlYXAxKEFic3Ry
YWN0U2xvdFZpc2l0b3ImKTsKICAgICBib29sIGZpbmFsaXplKFZNJik7CiAgICAgCiAgICAgdm9p
ZCBtZXJnZShjb25zdCBQdXRCeUlkU3RhdHVzJik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkVmFyaWFudC5jcHAJKHJldmlzaW9uIDI3MTQ0MykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkVmFyaWFudC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI2MiwxMyArMjYyLDE4IEBAIGJvb2wgUHV0QnlJZFZhcmlhbnQ6OmF0
dGVtcHRUb01lcmdlVHJhbnMKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBQdXRCeUlkVmFy
aWFudDo6bWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3RlbXBsYXRlPHR5cGVu
YW1lIFZpc2l0b3I+CisvL3ZvaWQgUHV0QnlJZFZhcmlhbnQ6Om1hcmtJZkNoZWFwKFZpc2l0b3Im
IHZpc2l0b3IpCit2b2lkIFB1dEJ5SWRWYXJpYW50OjptYXJrSWZDaGVhcDEoQWJzdHJhY3RTbG90
VmlzaXRvciYgdmlzaXRvcikKIHsKLSAgICBtX29sZFN0cnVjdHVyZS5tYXJrSWZDaGVhcCh2aXNp
dG9yKTsKKyAgICBtX29sZFN0cnVjdHVyZS5tYXJrSWZDaGVhcDEodmlzaXRvcik7CiAgICAgaWYg
KG1fbmV3U3RydWN0dXJlKQotICAgICAgICBtX25ld1N0cnVjdHVyZS0+bWFya0lmQ2hlYXAodmlz
aXRvcik7CisgICAgICAgIG1fbmV3U3RydWN0dXJlLT5tYXJrSWZDaGVhcDEodmlzaXRvcik7CiB9
CiAKKy8vdGVtcGxhdGUgdm9pZCBQdXRCeUlkVmFyaWFudDo6bWFya0lmQ2hlYXAoU2xvdFZpc2l0
b3ImKTsKKy8vdGVtcGxhdGUgdm9pZCBQdXRCeUlkVmFyaWFudDo6bWFya0lmQ2hlYXAoRGVidWdT
bG90VmlzaXRvciYpOworCiBib29sIFB1dEJ5SWRWYXJpYW50OjpmaW5hbGl6ZShWTSYgdm0pCiB7
CiAgICAgaWYgKCFtX29sZFN0cnVjdHVyZS5pc1N0aWxsQWxpdmUodm0pKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmgJKHJldmlzaW9u
IDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkVmFyaWFu
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzIsNyArMTMyLDggQEAgcHVibGljOgogCiAgICAgYm9v
bCBhdHRlbXB0VG9NZXJnZShjb25zdCBQdXRCeUlkVmFyaWFudCYgb3RoZXIpOwogICAgIAotICAg
IHZvaWQgbWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImKTsKKy8vICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFZpc2l0b3I+IHZvaWQgbWFya0lmQ2hlYXAoVmlzaXRvciYpOworICAgIHZvaWQgbWFya0lmQ2hl
YXAxKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKICAgICBib29sIGZpbmFsaXplKFZNJik7CiAgICAg
CiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvUmVjb3JkZWRTdGF0dXNlcy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1JlY29yZGVkU3RhdHVzZXMuY3BwCShyZXZpc2lv
biAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUmVjb3JkZWRTdGF0
dXNlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg0LDI2ICs4NCwzNiBAQCBEZWxldGVCeVN0YXR1
cyogUmVjb3JkZWRTdGF0dXNlczo6YWRkRGVsCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotdm9p
ZCBSZWNvcmRlZFN0YXR1c2VzOjp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYgc2xvdFZpc2l0
b3IpCisvL3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+CisvL3ZvaWQgUmVjb3JkZWRTdGF0dXNl
czo6dmlzaXRBZ2dyZWdhdGUoVmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgUmVjb3JkZWRTdGF0dXNl
czo6dmlzaXRBZ2dyZWdhdGUxKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAg
Zm9yIChhdXRvJiBwYWlyIDogZ2V0cykKLSAgICAgICAgcGFpci5zZWNvbmQtPnZpc2l0QWdncmVn
YXRlKHNsb3RWaXNpdG9yKTsKKyAgICAgICAgcGFpci5zZWNvbmQtPnZpc2l0QWdncmVnYXRlMSh2
aXNpdG9yKTsKICAgICBmb3IgKGF1dG8mIHBhaXIgOiBkZWxldGVzKQotICAgICAgICBwYWlyLnNl
Y29uZC0+dmlzaXRBZ2dyZWdhdGUoc2xvdFZpc2l0b3IpOworICAgICAgICBwYWlyLnNlY29uZC0+
dmlzaXRBZ2dyZWdhdGUxKHZpc2l0b3IpOwogfQogCi12b2lkIFJlY29yZGVkU3RhdHVzZXM6Om1h
cmtJZkNoZWFwKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvcikKKy8vdGVtcGxhdGUgdm9pZCBSZWNv
cmRlZFN0YXR1c2VzOjp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYpOworLy90ZW1wbGF0ZSB2
b2lkIFJlY29yZGVkU3RhdHVzZXM6OnZpc2l0QWdncmVnYXRlKERlYnVnU2xvdFZpc2l0b3ImKTsK
KworLy90ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgorLy92b2lkIFJlY29yZGVkU3RhdHVzZXM6
Om1hcmtJZkNoZWFwKFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIFJlY29yZGVkU3RhdHVzZXM6Om1h
cmtJZkNoZWFwMShBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGZvciAoYXV0
byYgcGFpciA6IGdldHMpCi0gICAgICAgIHBhaXIuc2Vjb25kLT5tYXJrSWZDaGVhcChzbG90Vmlz
aXRvcik7CisgICAgICAgIHBhaXIuc2Vjb25kLT5tYXJrSWZDaGVhcDEodmlzaXRvcik7CiAgICAg
Zm9yIChhdXRvJiBwYWlyIDogcHV0cykKLSAgICAgICAgcGFpci5zZWNvbmQtPm1hcmtJZkNoZWFw
KHNsb3RWaXNpdG9yKTsKKyAgICAgICAgcGFpci5zZWNvbmQtPm1hcmtJZkNoZWFwMSh2aXNpdG9y
KTsKICAgICBmb3IgKGF1dG8mIHBhaXIgOiBpbnMpCi0gICAgICAgIHBhaXIuc2Vjb25kLT5tYXJr
SWZDaGVhcChzbG90VmlzaXRvcik7CisgICAgICAgIHBhaXIuc2Vjb25kLT5tYXJrSWZDaGVhcDEo
dmlzaXRvcik7CiAgICAgZm9yIChhdXRvJiBwYWlyIDogZGVsZXRlcykKLSAgICAgICAgcGFpci5z
ZWNvbmQtPm1hcmtJZkNoZWFwKHNsb3RWaXNpdG9yKTsKKyAgICAgICAgcGFpci5zZWNvbmQtPm1h
cmtJZkNoZWFwMSh2aXNpdG9yKTsKIH0KIAorLy90ZW1wbGF0ZSB2b2lkIFJlY29yZGVkU3RhdHVz
ZXM6Om1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJik7CisvL3RlbXBsYXRlIHZvaWQgUmVjb3JkZWRT
dGF0dXNlczo6bWFya0lmQ2hlYXAoRGVidWdTbG90VmlzaXRvciYpOworCiB2b2lkIFJlY29yZGVk
U3RhdHVzZXM6OmZpbmFsaXplV2l0aG91dERlbGV0aW5nKFZNJiB2bSkKIHsKICAgICAvLyBUaGlz
IHZhcmlhbnQgb2YgZmluYWxpemUgZ2V0cyBjYWxsZWQgZnJvbSB3aXRoaW4gZ3JhcGggc2FmZXBv
aW50cyAtLSBzbyB0aGVyZSBtYXkgYmUgREZHIElSIGluCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvUmVjb3JkZWRTdGF0dXNlcy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9SZWNvcmRlZFN0YXR1c2VzLmgJKHJldmlzaW9uIDI3MTQ0
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9SZWNvcmRlZFN0YXR1c2VzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTUwLDggKzUwLDEwIEBAIHN0cnVjdCBSZWNvcmRlZFN0YXR1c2Vz
IHsKICAgICBJbkJ5SWRTdGF0dXMqIGFkZEluQnlJZFN0YXR1cyhjb25zdCBDb2RlT3JpZ2luJiwg
Y29uc3QgSW5CeUlkU3RhdHVzJik7CiAgICAgRGVsZXRlQnlTdGF0dXMqIGFkZERlbGV0ZUJ5U3Rh
dHVzKGNvbnN0IENvZGVPcmlnaW4mLCBjb25zdCBEZWxldGVCeVN0YXR1cyYpOwogICAgIAotICAg
IHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImKTsKLSAgICB2b2lkIG1hcmtJZkNoZWFw
KFNsb3RWaXNpdG9yJik7CisvLyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIHZp
c2l0QWdncmVnYXRlKFZpc2l0b3ImKTsKKy8vICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+
IHZvaWQgbWFya0lmQ2hlYXAoVmlzaXRvciYpOworICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUxKEFi
c3RyYWN0U2xvdFZpc2l0b3ImKTsKKyAgICB2b2lkIG1hcmtJZkNoZWFwMShBYnN0cmFjdFNsb3RW
aXNpdG9yJik7CiAgICAgCiAgICAgdm9pZCBmaW5hbGl6ZVdpdGhvdXREZWxldGluZyhWTSYpOwog
ICAgIHZvaWQgZmluYWxpemUoVk0mKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9TdHJ1Y3R1cmVTZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9TdHJ1Y3R1cmVTZXQuY3BwCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU2V0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzEsMTIgKzMxLDE3IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi12b2lkIFN0cnVjdHVyZVNl
dDo6bWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0CisvL3RlbXBsYXRlPHR5
cGVuYW1lIFZpc2l0b3I+CisvL3ZvaWQgU3RydWN0dXJlU2V0OjptYXJrSWZDaGVhcChWaXNpdG9y
JiB2aXNpdG9yKSBjb25zdAordm9pZCBTdHJ1Y3R1cmVTZXQ6Om1hcmtJZkNoZWFwMShBYnN0cmFj
dFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBjb25zdAogewogICAgIGZvciAoU3RydWN0dXJlKiBzdHJ1
Y3R1cmUgOiAqdGhpcykKLSAgICAgICAgc3RydWN0dXJlLT5tYXJrSWZDaGVhcCh2aXNpdG9yKTsK
KyAgICAgICAgc3RydWN0dXJlLT5tYXJrSWZDaGVhcDEodmlzaXRvcik7CiB9CiAKKy8vdGVtcGxh
dGUgdm9pZCBTdHJ1Y3R1cmVTZXQ6Om1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJikgY29uc3Q7Cisv
L3RlbXBsYXRlIHZvaWQgU3RydWN0dXJlU2V0OjptYXJrSWZDaGVhcChEZWJ1Z1Nsb3RWaXNpdG9y
JikgY29uc3Q7CisKIGJvb2wgU3RydWN0dXJlU2V0Ojppc1N0aWxsQWxpdmUoVk0mIHZtKSBjb25z
dAogewogICAgIGZvciAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUgOiAqdGhpcykgewpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVNldC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTZXQuaAkocmV2aXNpb24g
MjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVNldC5o
CSh3b3JraW5nIGNvcHkpCkBAIC01NCw3ICs1NCw4IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJu
IG9ubHlFbnRyeSgpOwogICAgIH0KIAotICAgIHZvaWQgbWFya0lmQ2hlYXAoU2xvdFZpc2l0b3Im
KSBjb25zdDsKKy8vICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgbWFya0lmQ2hl
YXAoVmlzaXRvciYpIGNvbnN0OworICAgIHZvaWQgbWFya0lmQ2hlYXAxKEFic3RyYWN0U2xvdFZp
c2l0b3ImKSBjb25zdDsKICAgICBib29sIGlzU3RpbGxBbGl2ZShWTSYpIGNvbnN0OwogICAgIAog
ICAgIHZvaWQgZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYsIER1bXBDb250ZXh0KikgY29uc3Q7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1
cmVTdHViSW5mby5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5MCwx
MiArMjkwLDE0IEBAIHZvaWQgU3RydWN0dXJlU3R1YkluZm86OnJlc2V0KGNvbnN0IENvbmMKICAg
ICBzZXRDYWNoZVR5cGUobG9ja2VyLCBDYWNoZVR5cGU6OlVuc2V0KTsKIH0KIAotdm9pZCBTdHJ1
Y3R1cmVTdHViSW5mbzo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3Rl
bXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+CisvL3ZvaWQgU3RydWN0dXJlU3R1YkluZm86OnZpc2l0
QWdncmVnYXRlKFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjp2aXNp
dEFnZ3JlZ2F0ZTEoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB7CiAgICAg
ICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9idWZmZXJlZFN0cnVjdHVyZXNMb2NrKTsKICAg
ICAgICAgZm9yIChhdXRvJiBidWZmZXJlZFN0cnVjdHVyZSA6IG1fYnVmZmVyZWRTdHJ1Y3R1cmVz
KQotICAgICAgICAgICAgYnVmZmVyZWRTdHJ1Y3R1cmUuYnlWYWxJZCgpLnZpc2l0QWdncmVnYXRl
KHZpc2l0b3IpOworICAgICAgICAgICAgYnVmZmVyZWRTdHJ1Y3R1cmUuYnlWYWxJZCgpLnZpc2l0
QWdncmVnYXRlMSh2aXNpdG9yKTsKICAgICB9CiAgICAgc3dpdGNoIChtX2NhY2hlVHlwZSkgewog
ICAgIGNhc2UgQ2FjaGVUeXBlOjpVbnNldDoKQEAgLTMwNSwxMCArMzA3LDEwIEBAIHZvaWQgU3Ry
dWN0dXJlU3R1YkluZm86OnZpc2l0QWdncmVnYXRlKFMKICAgICBjYXNlIENhY2hlVHlwZTo6UHV0
QnlJZFJlcGxhY2U6CiAgICAgY2FzZSBDYWNoZVR5cGU6OkluQnlJZFNlbGY6CiAgICAgY2FzZSBD
YWNoZVR5cGU6OkdldEJ5SWRTZWxmOgotICAgICAgICBtX2lkZW50aWZpZXIudmlzaXRBZ2dyZWdh
dGUodmlzaXRvcik7CisgICAgICAgIG1faWRlbnRpZmllci52aXNpdEFnZ3JlZ2F0ZTEodmlzaXRv
cik7CiAgICAgICAgIHJldHVybjsKICAgICBjYXNlIENhY2hlVHlwZTo6U3R1YjoKLSAgICAgICAg
dS5zdHViLT52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKKyAgICAgICAgdS5zdHViLT52aXNpdEFn
Z3JlZ2F0ZTEodmlzaXRvcik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCkBAIC0zMTYs
NiArMzE4LDkgQEAgdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6dmlzaXRBZ2dyZWdhdGUoUwogICAg
IHJldHVybjsKIH0KIAorLy90ZW1wbGF0ZSB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjp2aXNpdEFn
Z3JlZ2F0ZShTbG90VmlzaXRvciYpOworLy90ZW1wbGF0ZSB2b2lkIFN0cnVjdHVyZVN0dWJJbmZv
Ojp2aXNpdEFnZ3JlZ2F0ZShEZWJ1Z1Nsb3RWaXNpdG9yJik7CisKIHZvaWQgU3RydWN0dXJlU3R1
YkluZm86OnZpc2l0V2Vha1JlZmVyZW5jZXMoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyQmFzZSYg
bG9ja2VyLCBDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKICAgICBWTSYgdm0gPSBjb2RlQmxvY2st
PnZtKCk7CkBAIC0zNDYsMjQgKzM1MSwzMSBAQCB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjp2aXNp
dFdlYWtSZWZlcmVuCiAgICAgcmVzZXRCeUdDID0gdHJ1ZTsKIH0KIAotYm9vbCBTdHJ1Y3R1cmVT
dHViSW5mbzo6cHJvcGFnYXRlVHJhbnNpdGlvbnMoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCi17Ci0g
ICAgc3dpdGNoIChtX2NhY2hlVHlwZSkgewotICAgIGNhc2UgQ2FjaGVUeXBlOjpVbnNldDoKLSAg
ICBjYXNlIENhY2hlVHlwZTo6QXJyYXlMZW5ndGg6Ci0gICAgY2FzZSBDYWNoZVR5cGU6OlN0cmlu
Z0xlbmd0aDoKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgY2FzZSBDYWNoZVR5cGU6OkdldEJ5
SWRTZWxmOgotICAgIGNhc2UgQ2FjaGVUeXBlOjpQdXRCeUlkUmVwbGFjZToKLSAgICBjYXNlIENh
Y2hlVHlwZTo6SW5CeUlkU2VsZjoKLSAgICAgICAgcmV0dXJuIHUuYnlJZFNlbGYuYmFzZU9iamVj
dFN0cnVjdHVyZS0+bWFya0lmQ2hlYXAodmlzaXRvcik7Ci0gICAgY2FzZSBDYWNoZVR5cGU6OlN0
dWI6Ci0gICAgICAgIHJldHVybiB1LnN0dWItPnByb3BhZ2F0ZVRyYW5zaXRpb25zKHZpc2l0b3Ip
OwotICAgIH0KLSAgICAKLSAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJl
dHVybiB0cnVlOwotfQorLy90ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgorLy9ib29sIFN0cnVj
dHVyZVN0dWJJbmZvOjpwcm9wYWdhdGVUcmFuc2l0aW9uczEoVmlzaXRvciYgdmlzaXRvcikKKy8v
eworLy8gICAgc3dpdGNoIChtX2NhY2hlVHlwZSkgeworLy8gICAgY2FzZSBDYWNoZVR5cGU6OlVu
c2V0OgorLy8gICAgY2FzZSBDYWNoZVR5cGU6OkFycmF5TGVuZ3RoOgorLy8gICAgY2FzZSBDYWNo
ZVR5cGU6OlN0cmluZ0xlbmd0aDoKKy8vICAgICAgICByZXR1cm4gdHJ1ZTsKKy8vICAgIGNhc2Ug
Q2FjaGVUeXBlOjpHZXRCeUlkU2VsZjoKKy8vICAgIGNhc2UgQ2FjaGVUeXBlOjpQdXRCeUlkUmVw
bGFjZToKKy8vICAgIGNhc2UgQ2FjaGVUeXBlOjpJbkJ5SWRTZWxmOgorLy8gICAgICAgIHJldHVy
biB1LmJ5SWRTZWxmLmJhc2VPYmplY3RTdHJ1Y3R1cmUtPm1hcmtJZkNoZWFwMSh2aXNpdG9yKTsK
Ky8vICAgICAgICByZXR1cm4gZmFsc2U7CisvLyAgICBjYXNlIENhY2hlVHlwZTo6U3R1YjoKKy8v
ICAgICAgICByZXR1cm4gdS5zdHViLT5wcm9wYWdhdGVUcmFuc2l0aW9uczEwKHZpc2l0b3IpOwor
Ly8gICAgICAgIHJldHVybiBmYWxzZTsKKy8vICAgIH0KKy8vCisvLy8vICAgIFVOVVNFRF9QQVJB
TSh2aXNpdG9yKTsgLy8gbWxhbSBURVNUCisvLyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOworLy8gICAgcmV0dXJuIHRydWU7CisvL30KKy8vCisvL3RlbXBsYXRlPD4gYm9vbCBTdHJ1
Y3R1cmVTdHViSW5mbzo6cHJvcGFnYXRlVHJhbnNpdGlvbnMxKFNsb3RWaXNpdG9yJik7CisvL3Rl
bXBsYXRlPD4gYm9vbCBTdHJ1Y3R1cmVTdHViSW5mbzo6cHJvcGFnYXRlVHJhbnNpdGlvbnMxKEFi
c3RyYWN0U2xvdFZpc2l0b3ImKTsKIAogU3R1YkluZm9TdW1tYXJ5IFN0cnVjdHVyZVN0dWJJbmZv
OjpzdW1tYXJ5KFZNJiB2bSkgY29uc3QKIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCShyZXZpc2lvbiAyNzE0NDMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaAkod29y
a2luZyBjb3B5KQpAQCAtOTEsMTQgKzkxLDE2IEBAIHB1YmxpYzoKICAgICB2b2lkIGRlcmVmKCk7
CiAgICAgdm9pZCBhYm91dFRvRGllKCk7CiAKLSAgICB2b2lkIHZpc2l0QWdncmVnYXRlKFNsb3RW
aXNpdG9yJik7CisvLyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIHZpc2l0QWdn
cmVnYXRlKFZpc2l0b3ImKTsKKyAgICB2b2lkIHZpc2l0QWdncmVnYXRlMShBYnN0cmFjdFNsb3RW
aXNpdG9yJik7CiAKICAgICAvLyBDaGVjayBpZiB0aGUgc3R1YiBoYXMgd2VhayByZWZlcmVuY2Vz
IHRoYXQgYXJlIGRlYWQuIElmIGl0IGRvZXMsIHRoZW4gaXQgcmVzZXRzIGl0c2VsZiwKICAgICAv
LyBlaXRoZXIgZW50aXJlbHkgb3IganVzdCBlbm91Z2ggdG8gZW5zdXJlIHRoYXQgdGhvc2UgZGVh
ZCBwb2ludGVycyBkb24ndCBnZXQgdXNlZCBhbnltb3JlLgogICAgIHZvaWQgdmlzaXRXZWFrUmVm
ZXJlbmNlcyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXJCYXNlJiwgQ29kZUJsb2NrKik7CiAgICAg
CiAgICAgLy8gVGhpcyByZXR1cm5zIHRydWUgaWYgaXQgaGFzIG1hcmtlZCBldmVyeXRoaW5nIHRo
YXQgaXQgd2lsbCBldmVyIG1hcmsuCi0gICAgYm9vbCBwcm9wYWdhdGVUcmFuc2l0aW9ucyhTbG90
VmlzaXRvciYpOworLy8gICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gYm9vbCBwcm9wYWdh
dGVUcmFuc2l0aW9uczEoVmlzaXRvciYpOworICAgIGJvb2wgcHJvcGFnYXRlVHJhbnNpdGlvbnMx
KEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKICAgICAgICAgCiAgICAgU3R1YkluZm9TdW1tYXJ5IHN1
bW1hcnkoVk0mKSBjb25zdDsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcAkocmV2aXNpb24gMjcxNDQzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIt
MjAxOSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTItMjAyMCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTcxLDcgKzcxLDggQEAgVW5saW5rZWRDb2RlQmxvY2s6OlVubGlu
a2VkQ29kZUJsb2NrKFZNJgogICAgIH0KIH0KIAotdm9pZCBVbmxpbmtlZENvZGVCbG9jazo6dmlz
aXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8
dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgVW5saW5rZWRDb2RlQmxvY2s6OnZpc2l0Q2hpbGRyZW5J
bXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBVbmxpbmtlZENvZGVC
bG9jayogdGhpc09iamVjdCA9IGpzQ2FzdDxVbmxpbmtlZENvZGVCbG9jayo+KGNlbGwpOwogICAg
IEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTkwLDYg
KzkxLDggQEAgdm9pZCBVbmxpbmtlZENvZGVCbG9jazo6dmlzaXRDaGlsZHJlbihKUwogICAgIHZp
c2l0b3IucmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKGV4dHJhTWVtb3J5KTsKIH0KIAorREVGSU5F
X1ZJU0lUX0NISUxEUkVOKFVubGlua2VkQ29kZUJsb2NrKTsKKwogc2l6ZV90IFVubGlua2VkQ29k
ZUJsb2NrOjplc3RpbWF0ZWRTaXplKEpTQ2VsbCogY2VsbCwgVk0mIHZtKQogewogICAgIFVubGlu
a2VkQ29kZUJsb2NrKiB0aGlzT2JqZWN0ID0ganNDYXN0PFVubGlua2VkQ29kZUJsb2NrKj4oY2Vs
bCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxv
Y2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5r
ZWRDb2RlQmxvY2suaAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTkgQXBwbGUgSW5jLiBBbGwgUmlnaHRz
IFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjAgQXBwbGUgSW5jLiBBbGwgUmln
aHRzIFJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00MjMsNyAr
NDIzLDcgQEAgcHJpdmF0ZToKICAgICBSZWZDb3VudGVkQXJyYXk8RXhwcmVzc2lvblJhbmdlSW5m
bz4gbV9leHByZXNzaW9uSW5mbzsKIAogcHJvdGVjdGVkOgotICAgIHN0YXRpYyB2b2lkIHZpc2l0
Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxE
UkVOOwogICAgIHN0YXRpYyBzaXplX3QgZXN0aW1hdGVkU2l6ZShKU0NlbGwqLCBWTSYpOwogCiBw
dWJsaWM6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRGdW5j
dGlvbkV4ZWN1dGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5jcHAJKHJldmlzaW9uIDI3MTQ0MykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9uRXhlY3V0
YWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDEyLTIwMTkgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEyLTIwMjAgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xNDEsNyArMTQxLDggQEAgdm9pZCBVbmxpbmtl
ZEZ1bmN0aW9uRXhlY3V0YWJsZTo6ZGVzdHJveQogICAgIHN0YXRpY19jYXN0PFVubGlua2VkRnVu
Y3Rpb25FeGVjdXRhYmxlKj4oY2VsbCktPn5VbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSgpOwog
fQogCi12b2lkIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlOjp2aXNpdENoaWxkcmVuKEpTQ2Vs
bCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
Pgordm9pZCBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6dmlzaXRDaGlsZHJlbkltcGwoSlND
ZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFVubGlua2VkRnVuY3Rpb25FeGVj
dXRhYmxlKiB0aGlzT2JqZWN0ID0ganNDYXN0PFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKj4o
Y2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkp
OwpAQCAtMTY0LDYgKzE2NSw4IEBAIHZvaWQgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU6OnZp
c2l0Q2gKICAgICB9CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihVbmxpbmtlZEZ1bmN0aW9u
RXhlY3V0YWJsZSk7CisKIFNvdXJjZUNvZGUgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU6Omxp
bmtlZFNvdXJjZUNvZGUoY29uc3QgU291cmNlQ29kZSYgcGFzc2VkUGFyZW50U291cmNlKSBjb25z
dAogewogICAgIGNvbnN0IFNvdXJjZUNvZGUmIHBhcmVudFNvdXJjZSA9ICFtX2lzQnVpbHRpbkRl
ZmF1bHRDbGFzc0NvbnN0cnVjdG9yID8gcGFzc2VkUGFyZW50U291cmNlIDogQnVpbHRpbkV4ZWN1
dGFibGVzOjpkZWZhdWx0Q29uc3RydWN0b3JTb3VyY2VDb2RlKGNvbnN0cnVjdG9yS2luZCgpKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9uRXhl
Y3V0YWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9V
bmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5oCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUuaAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAx
OSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIt
MjAyMCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTIzMiw3ICsyMzIsNyBAQCBwcml2YXRlOgogICAgIFVubGlua2VkRnVu
Y3Rpb25FeGVjdXRhYmxlKFZNJiwgU3RydWN0dXJlKiwgY29uc3QgU291cmNlQ29kZSYsIEZ1bmN0
aW9uTWV0YWRhdGFOb2RlKiwgVW5saW5rZWRGdW5jdGlvbktpbmQsIENvbnN0cnVjdEFiaWxpdHks
IEpTUGFyc2VyU2NyaXB0TW9kZSwgUmVmUHRyPFREWkVudmlyb25tZW50TGluaz4sICBKU0M6OkRl
cml2ZWRDb250ZXh0VHlwZSwgSlNDOjpOZWVkc0NsYXNzRmllbGRJbml0aWFsaXplciwgYm9vbCBp
c0J1aWx0aW5EZWZhdWx0Q2xhc3NDb25zdHJ1Y3Rvcik7CiAgICAgVW5saW5rZWRGdW5jdGlvbkV4
ZWN1dGFibGUoRGVjb2RlciYsIGNvbnN0IENhY2hlZEZ1bmN0aW9uRXhlY3V0YWJsZSYpOwogCi0g
ICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAg
IERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICB2b2lkIGRlY29kZUNhY2hlZENvZGVCbG9j
a3MoVk0mKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2Vy
U2NvcGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9E
ZWJ1Z2dlclNjb3BlLmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RlYnVnZ2VyL0RlYnVnZ2VyU2NvcGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDIwIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTUsNyAr
NTUsOCBAQCB2b2lkIERlYnVnZ2VyU2NvcGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2CiAgICAgQmFz
ZTo6ZmluaXNoQ3JlYXRpb24odm0pOwogfQogCi12b2lkIERlYnVnZ2VyU2NvcGU6OnZpc2l0Q2hp
bGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVu
YW1lIFZpc2l0b3I+Cit2b2lkIERlYnVnZ2VyU2NvcGU6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2Vs
bCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBEZWJ1Z2dlclNjb3BlKiB0aGlzT2Jq
ZWN0ID0ganNDYXN0PERlYnVnZ2VyU2NvcGUqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNU
X0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC02NSw2ICs2Niw4IEBAIHZvaWQgRGVi
dWdnZXJTY29wZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlz
T2JqZWN0LT5tX25leHQpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oRGVidWdnZXJTY29w
ZSk7CisKIFN0cmluZyBEZWJ1Z2dlclNjb3BlOjpjbGFzc05hbWUoY29uc3QgSlNPYmplY3QqIG9i
amVjdCwgVk0mIHZtKQogewogICAgIGNvbnN0IERlYnVnZ2VyU2NvcGUqIHNjb3BlID0ganNDYXN0
PGNvbnN0IERlYnVnZ2VyU2NvcGUqPihvYmplY3QpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RlYnVnZ2VyL0RlYnVnZ2VyU2NvcGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXJTY29wZS5oCShyZXZpc2lvbiAyNzE0NDMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXJTY29wZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC00Niw3ICs0Niw3IEBAIHB1YmxpYzoKIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0
YXRpYyBEZWJ1Z2dlclNjb3BlKiBjcmVhdGUoVk0mIHZtLCBKU1Njb3BlKiBzY29wZSk7CiAKLSAg
ICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAg
REVDTEFSRV9WSVNJVF9DSElMRFJFTjsKICAgICBzdGF0aWMgU3RyaW5nIGNsYXNzTmFtZShjb25z
dCBKU09iamVjdCosIFZNJik7CiAgICAgc3RhdGljIFN0cmluZyB0b1N0cmluZ05hbWUoY29uc3Qg
SlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCopOwogICAgIHN0YXRpYyBib29sIGdldE93blByb3Bl
cnR5U2xvdChKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0
eVNsb3QmKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFRyYW5z
aXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rl
c2lyZWRUcmFuc2l0aW9ucy5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHRGVzaXJlZFRyYW5zaXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTIsNyArNTIsNyBAQCB2b2lkIERlc2lyZWRUcmFuc2l0aW9uOjpyZWFsbHlBZGQoVk0mIHZtCiAg
ICAgICAgICAgICBtX29sZFN0cnVjdHVyZSwgbV9uZXdTdHJ1Y3R1cmUpKTsKIH0KIAotdm9pZCBE
ZXNpcmVkVHJhbnNpdGlvbjo6dmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3Zv
aWQgRGVzaXJlZFRyYW5zaXRpb246OnZpc2l0Q2hpbGRyZW4yKEFic3RyYWN0U2xvdFZpc2l0b3Im
IHZpc2l0b3IpCiB7CiAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZChtX2NvZGVPcmlnaW5P
d25lcik7CiAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZChtX29sZFN0cnVjdHVyZSk7CkBA
IC03OCwxMCArNzgsMTAgQEAgdm9pZCBEZXNpcmVkVHJhbnNpdGlvbnM6OnJlYWxseUFkZChWTSYg
dgogICAgICAgICBtX3RyYW5zaXRpb25zW2ldLnJlYWxseUFkZCh2bSwgY29tbW9uKTsKIH0KIAot
dm9pZCBEZXNpcmVkVHJhbnNpdGlvbnM6OnZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0
b3IpCit2b2lkIERlc2lyZWRUcmFuc2l0aW9uczo6dmlzaXRDaGlsZHJlbjIoQWJzdHJhY3RTbG90
VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV90cmFu
c2l0aW9ucy5zaXplKCk7IGkrKykKLSAgICAgICAgbV90cmFuc2l0aW9uc1tpXS52aXNpdENoaWxk
cmVuKHZpc2l0b3IpOworICAgICAgICBtX3RyYW5zaXRpb25zW2ldLnZpc2l0Q2hpbGRyZW4yKHZp
c2l0b3IpOwogfQogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRUcmFuc2l0aW9ucy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFRyYW5zaXRpb25zLmgJKHJldmlzaW9u
IDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFRyYW5zaXRp
b25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDggKzQ2LDcgQEAgcHVibGljOgogICAgIERlc2ly
ZWRUcmFuc2l0aW9uKENvZGVCbG9jayosIENvZGVCbG9jayogY29kZU9yaWdpbk93bmVyLCBTdHJ1
Y3R1cmUqLCBTdHJ1Y3R1cmUqKTsKIAogICAgIHZvaWQgcmVhbGx5QWRkKFZNJiwgQ29tbW9uRGF0
YSopOwotICAgIAotICAgIHZvaWQgdmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYpOworICAgIHZv
aWQgdmlzaXRDaGlsZHJlbjIoQWJzdHJhY3RTbG90VmlzaXRvciYpOwogCiBwcml2YXRlOgogICAg
IENvZGVCbG9jayogbV9jb2RlQmxvY2s7CkBAIC02Myw3ICs2Miw3IEBAIHB1YmxpYzoKIAogICAg
IHZvaWQgYWRkTGF6aWx5KENvZGVCbG9jayosIENvZGVCbG9jayogY29kZU9yaWdpbk93bmVyLCBT
dHJ1Y3R1cmUqLCBTdHJ1Y3R1cmUqKTsKICAgICB2b2lkIHJlYWxseUFkZChWTSYsIENvbW1vbkRh
dGEqKTsKLSAgICB2b2lkIHZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKKyAgICB2b2lkIHZp
c2l0Q2hpbGRyZW4yKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKIAogcHJpdmF0ZToKICAgICBWZWN0
b3I8RGVzaXJlZFRyYW5zaXRpb24+IG1fdHJhbnNpdGlvbnM7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXZWFrUmVmZXJlbmNlcy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2Vha1JlZmVyZW5jZXMuY3BwCShy
ZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRX
ZWFrUmVmZXJlbmNlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg3LDcgKzg3LDcgQEAgdm9pZCBE
ZXNpcmVkV2Vha1JlZmVyZW5jZXM6OnJlYWxseUFkZChWTQogICAgIH0KIH0KIAotdm9pZCBEZXNp
cmVkV2Vha1JlZmVyZW5jZXM6OnZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2
b2lkIERlc2lyZWRXZWFrUmVmZXJlbmNlczo6dmlzaXRDaGlsZHJlbjIoQWJzdHJhY3RTbG90Vmlz
aXRvciYgdmlzaXRvcikKIHsKICAgICBmb3IgKEpTQ2VsbCogdGFyZ2V0IDogbV9yZWZlcmVuY2Vz
KQogICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKHRhcmdldCk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXZWFrUmVmZXJlbmNlcy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFdlYWtSZWZlcmVuY2Vz
LmgJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVz
aXJlZFdlYWtSZWZlcmVuY2VzLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDEwICszMSwxMCBAQAog
CiBuYW1lc3BhY2UgSlNDIHsgCiAKK2NsYXNzIEFic3RyYWN0U2xvdFZpc2l0b3I7CiBjbGFzcyBD
b2RlQmxvY2s7CiBjbGFzcyBKU0NlbGw7CiBjbGFzcyBKU1ZhbHVlOwotY2xhc3MgU2xvdFZpc2l0
b3I7CiBjbGFzcyBWTTsKIAogbmFtZXNwYWNlIERGRyB7CkBAIC01Miw4ICs1Miw4IEBAIHB1Ymxp
YzoKICAgICBib29sIGNvbnRhaW5zKEpTQ2VsbCopOwogICAgIAogICAgIHZvaWQgcmVhbGx5QWRk
KFZNJiwgQ29tbW9uRGF0YSopOwotICAgIAotICAgIHZvaWQgdmlzaXRDaGlsZHJlbihTbG90Vmlz
aXRvciYpOworCisgICAgdm9pZCB2aXNpdENoaWxkcmVuMihBYnN0cmFjdFNsb3RWaXNpdG9yJik7
CiAKIHByaXZhdGU6CiAgICAgQ29kZUJsb2NrKiBtX2NvZGVCbG9jazsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTc3LDcg
Kzk3Nyw3IEBAIEJsb2NrTGlzdCBHcmFwaDo6YmxvY2tzSW5Qb3N0T3JkZXIoYm9vbCAKICAgICAg
ICAgfQogICAgIH0KIAotICAgIGlmIChpc1NhZmVUb1ZhbGlkYXRlICYmIHZhbGlkYXRpb25FbmFi
bGVkKCkpIHsgLy8gVGhlcmUgYXJlIHVzZXJzIG9mIHRoaXMgd2hlcmUgd2UgaGF2ZW4ndCB5ZXQg
YnVpbHQgb2YgdGhlIENGRyBlbm91Z2ggdG8gYmUgYWJsZSB0byBydW4gZG9taW5hdG9ycy4KKyAg
ICBpZiAoaXNTYWZlVG9WYWxpZGF0ZSAmJiB2YWxpZGF0aW9uRW5hYmxlZCgpKSB7IC8vIFRoZXJl
IGFyZSB1c2VycyBvZiB0aGlzIHdoZXJlIHdlIGhhdmVuJ3QgeWV0IGJ1aWx0IHRoZSBDRkcgZW5v
dWdoIHRvIGJlIGFibGUgdG8gcnVuIGRvbWluYXRvcnMuCiAgICAgICAgIGF1dG8gdmFsaWRhdGVS
ZXN1bHRzID0gWyZdIChhdXRvJiBkb21pbmF0b3JzKSB7CiAgICAgICAgICAgICAvLyBXaGVuIGl0
ZXJhdGluZyBvdmVyIHJldmVyc2UgcG9zdCBvcmRlciwgd2Ugc2hvdWxkIHNlZSBkb21pbmF0b3Jz
CiAgICAgICAgICAgICAvLyBiZWZvcmUgdGhpbmdzIHRoZXkgZG9taW5hdGUuCkBAIC0xNDQ4LDcg
KzE0NDgsNyBAQCB2b2lkIEdyYXBoOjpyZWdpc3RlckZyb3plblZhbHVlcygpCiAgICAgbV9jb2Rl
QmxvY2stPmNvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbigpLnNocmlua1RvRml0KCk7
CiB9CiAKLXZvaWQgR3JhcGg6OnZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2
b2lkIEdyYXBoOjp2aXNpdENoaWxkcmVuMShBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQog
ewogICAgIGZvciAoRnJvemVuVmFsdWUqIHZhbHVlIDogbV9mcm96ZW5WYWx1ZXMpIHsKICAgICAg
ICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZCh2YWx1ZS0+dmFsdWUoKSk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMDAsOSAr
MTAwMCw5IEBAIHB1YmxpYzoKICAgICBib29sIGNhbkRvRmFzdFNwcmVhZChOb2RlKiwgY29uc3Qg
QWJzdHJhY3RWYWx1ZSYpOwogICAgIAogICAgIHZvaWQgcmVnaXN0ZXJGcm96ZW5WYWx1ZXMoKTsK
LSAgICAKLSAgICB2b2lkIHZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImKSBmaW5hbDsKLSAgICAK
KworICAgIHZvaWQgdmlzaXRDaGlsZHJlbjEoQWJzdHJhY3RTbG90VmlzaXRvciYpIGZpbmFsOwor
CiAgICAgdm9pZCBsb2dBc3NlcnRpb25GYWlsdXJlKAogICAgICAgICBzdGQ6Om51bGxwdHJfdCwg
Y29uc3QgY2hhciogZmlsZSwgaW50IGxpbmUsIGNvbnN0IGNoYXIqIGZ1bmN0aW9uLAogICAgICAg
ICBjb25zdCBjaGFyKiBhc3NlcnRpb24pOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdQbGFuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1BsYW4uY3BwCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1BsYW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NzIsNyArNjcyLDcgQEAgQ29tcGlsYXRp
b25LZXkgUGxhbjo6a2V5KCkKICAgICByZXR1cm4gQ29tcGlsYXRpb25LZXkobV9jb2RlQmxvY2st
PmFsdGVybmF0aXZlKCksIG1fbW9kZSk7CiB9CiAKLXZvaWQgUGxhbjo6Y2hlY2tMaXZlbmVzc0Fu
ZFZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIFBsYW46OmNoZWNrTGl2
ZW5lc3NBbmRWaXNpdENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAg
ICAgaWYgKCFpc0tub3duVG9CZUxpdmVEdXJpbmdHQygpKQogICAgICAgICByZXR1cm47CkBAIC02
ODQsOCArNjg0LDggQEAgdm9pZCBQbGFuOjpjaGVja0xpdmVuZXNzQW5kVmlzaXRDaGlsZHJlbgog
ICAgICAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZCh2YWx1ZS52YWx1ZSgpKTsKICAg
ICB9CiAKLSAgICBtX3JlY29yZGVkU3RhdHVzZXMudmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7Ci0g
ICAgbV9yZWNvcmRlZFN0YXR1c2VzLm1hcmtJZkNoZWFwKHZpc2l0b3IpOworICAgIG1fcmVjb3Jk
ZWRTdGF0dXNlcy52aXNpdEFnZ3JlZ2F0ZTEodmlzaXRvcik7CisgICAgbV9yZWNvcmRlZFN0YXR1
c2VzLm1hcmtJZkNoZWFwMSh2aXNpdG9yKTsKIAogICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVy
ZWQobV9jb2RlQmxvY2spOwogICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQobV9jb2RlQmxv
Y2stPmFsdGVybmF0aXZlKCkpOwpAQCAtNjk4LDggKzY5OCw4IEBAIHZvaWQgUGxhbjo6Y2hlY2tM
aXZlbmVzc0FuZFZpc2l0Q2hpbGRyZW4KICAgICAgICAgfQogICAgIH0KIAotICAgIG1fd2Vha1Jl
ZmVyZW5jZXMudmlzaXRDaGlsZHJlbih2aXNpdG9yKTsKLSAgICBtX3RyYW5zaXRpb25zLnZpc2l0
Q2hpbGRyZW4odmlzaXRvcik7CisgICAgbV93ZWFrUmVmZXJlbmNlcy52aXNpdENoaWxkcmVuMih2
aXNpdG9yKTsKKyAgICBtX3RyYW5zaXRpb25zLnZpc2l0Q2hpbGRyZW4yKHZpc2l0b3IpOwogfQog
CiB2b2lkIFBsYW46OmZpbmFsaXplSW5HQygpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1BsYW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1BsYW4uaAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdQbGFuLmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDggKzQzLDggQEAKIAogbmFtZXNwYWNlIEpT
QyB7CiAKK2NsYXNzIEFic3RyYWN0U2xvdFZpc2l0b3I7CiBjbGFzcyBDb2RlQmxvY2s7Ci1jbGFz
cyBTbG90VmlzaXRvcjsKIAogbmFtZXNwYWNlIERGRyB7CiAKQEAgLTcyLDcgKzcyLDcgQEAgcHVi
bGljOgogICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CiAgICAgdm9pZCBpdGVyYXRl
Q29kZUJsb2Nrc0ZvckdDKGNvbnN0IEZ1bmMmKTsKLSAgICB2b2lkIGNoZWNrTGl2ZW5lc3NBbmRW
aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CisgICAgdm9pZCBjaGVja0xpdmVuZXNzQW5kVmlz
aXRDaGlsZHJlbihBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAgICAgYm9vbCBpc0tub3duVG9CZUxp
dmVEdXJpbmdHQygpOwogICAgIHZvaWQgZmluYWxpemVJbkdDKCk7CiAgICAgdm9pZCBjYW5jZWwo
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZXBvaW50LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVwb2ludC5jcHAJKHJl
dmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZXBvaW50
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODMsNyArODMsNyBAQCB2b2lkIFNhZmVwb2ludDo6YmVn
aW4oKQogICAgIH0KIH0KIAotdm9pZCBTYWZlcG9pbnQ6OmNoZWNrTGl2ZW5lc3NBbmRWaXNpdENo
aWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBTYWZlcG9pbnQ6OmNoZWNrTGl2ZW5l
c3NBbmRWaXNpdENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAg
UkVMRUFTRV9BU1NFUlQobV9kaWRDYWxsQmVnaW4pOwogCkBAIC05NCw3ICs5NCw3IEBAIHZvaWQg
U2FmZXBvaW50OjpjaGVja0xpdmVuZXNzQW5kVmlzaXRDaGkKICAgICAgICAgcmV0dXJuOwogICAg
IAogICAgIGZvciAodW5zaWduZWQgaSA9IG1fc2Nhbm5hYmxlcy5zaXplKCk7IGktLTspCi0gICAg
ICAgIG1fc2Nhbm5hYmxlc1tpXS0+dmlzaXRDaGlsZHJlbih2aXNpdG9yKTsKKyAgICAgICAgbV9z
Y2FubmFibGVzW2ldLT52aXNpdENoaWxkcmVuMSh2aXNpdG9yKTsKIH0KIAogYm9vbCBTYWZlcG9p
bnQ6OmlzS25vd25Ub0JlTGl2ZUR1cmluZ0dDKCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU2FmZXBvaW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTYWZlcG9pbnQuaAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTYWZlcG9pbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsNyBA
QAogCiBuYW1lc3BhY2UgSlNDIHsKIAotY2xhc3MgU2xvdFZpc2l0b3I7CitjbGFzcyBBYnN0cmFj
dFNsb3RWaXNpdG9yOwogY2xhc3MgVk07CiAKIG5hbWVzcGFjZSBERkcgewpAQCAtNjYsOCArNjYs
OCBAQCBwdWJsaWM6CiAgICAgdm9pZCBhZGQoU2Nhbm5hYmxlKik7CiAgICAgCiAgICAgdm9pZCBi
ZWdpbigpOwotICAgIAotICAgIHZvaWQgY2hlY2tMaXZlbmVzc0FuZFZpc2l0Q2hpbGRyZW4oU2xv
dFZpc2l0b3ImKTsKKworICAgIHZvaWQgY2hlY2tMaXZlbmVzc0FuZFZpc2l0Q2hpbGRyZW4oQWJz
dHJhY3RTbG90VmlzaXRvciYpOwogICAgIGJvb2wgaXNLbm93blRvQmVMaXZlRHVyaW5nR0MoKTsK
ICAgICB2b2lkIGNhbmNlbCgpOwogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTY2FubmFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NjYW5uYWJsZS5oCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NjYW5uYWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw3IEBACiAK
IG5hbWVzcGFjZSBKU0MgewogCi1jbGFzcyBTbG90VmlzaXRvcjsKK2NsYXNzIEFic3RyYWN0U2xv
dFZpc2l0b3I7CiAKIG5hbWVzcGFjZSBERkcgewogCkBAIC0zOCw3ICszOCw3IEBAIHB1YmxpYzoK
ICAgICBTY2FubmFibGUoKSB7IH0KICAgICB2aXJ0dWFsIH5TY2FubmFibGUoKSB7IH0KICAgICAK
LSAgICB2aXJ0dWFsIHZvaWQgdmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYpID0gMDsKKyAgICB2
aXJ0dWFsIHZvaWQgdmlzaXRDaGlsZHJlbjEoQWJzdHJhY3RTbG90VmlzaXRvciYpID0gMDsKIH07
CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHV29ya2xpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHV29ya2xpc3QuY3BwCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcyLDcgKzM3
Miw3IEBAIHZvaWQgV29ya2xpc3Q6OnJlc3VtZUFsbFRocmVhZHMoKQogICAgIG1fc3VzcGVuc2lv
bkxvY2sudW5sb2NrKCk7CiB9CiAKLXZvaWQgV29ya2xpc3Q6OnZpc2l0V2Vha1JlZmVyZW5jZXMo
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIFdvcmtsaXN0Ojp2aXNpdFdlYWtSZWZlcmVuY2Vz
KEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgVk0qIHZtID0gJnZpc2l0b3Iu
aGVhcCgpLT52bSgpOwogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
V29ya2xpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dv
cmtsaXN0LmgJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHV29ya2xpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsNyArMzUsNyBAQAogCiBuYW1lc3Bh
Y2UgSlNDIHsKIAotY2xhc3MgU2xvdFZpc2l0b3I7CitjbGFzcyBBYnN0cmFjdFNsb3RWaXNpdG9y
OwogCiBuYW1lc3BhY2UgREZHIHsKIApAQCAtNzMsNyArNzMsNyBAQCBwdWJsaWM6CiAgICAgYm9v
bCBpc0FjdGl2ZUZvclZNKFZNJikgY29uc3Q7CiAgICAgCiAgICAgLy8gT25seSBjYWxsZWQgb24g
dGhlIG1haW4gdGhyZWFkIGFmdGVyIHN1c3BlbmRpbmcgYWxsIHRocmVhZHMuCi0gICAgdm9pZCB2
aXNpdFdlYWtSZWZlcmVuY2VzKFNsb3RWaXNpdG9yJik7CisgICAgdm9pZCB2aXNpdFdlYWtSZWZl
cmVuY2VzKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKICAgICB2b2lkIHJlbW92ZURlYWRQbGFucyhW
TSYpOwogICAgIAogICAgIHZvaWQgcmVtb3ZlTm9uQ29tcGlsaW5nUGxhbnNGb3JWTShWTSYpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQWJzdHJhY3RTbG90VmlzaXRvci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQWJzdHJhY3RTbG90Vmlz
aXRvci5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQWJz
dHJhY3RTbG90VmlzaXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MyBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBYnN0cmFjdFNsb3RWaXNp
dG9yLmgiCisKKyNpbmNsdWRlICJBYnN0cmFjdFNsb3RWaXNpdG9ySW5saW5lcy5oIgorI2luY2x1
ZGUgIk1hcmtpbmdDb25zdHJhaW50U29sdmVyLmgiCisKK25hbWVzcGFjZSBKU0MgeworCit2b2lk
IEFic3RyYWN0U2xvdFZpc2l0b3I6OmFkZFBhcmFsbGVsQ29uc3RyYWludFRhc2soUmVmUHRyPFNo
YXJlZFRhc2s8dm9pZChBYnN0cmFjdFNsb3RWaXNpdG9yJik+PiB0YXNrKQoreworICAgIFJFTEVB
U0VfQVNTRVJUKG1fY3VycmVudFNvbHZlcik7CisgICAgUkVMRUFTRV9BU1NFUlQobV9jdXJyZW50
Q29uc3RyYWludCk7CisgICAgUkVMRUFTRV9BU1NFUlQodGFzayk7CisgICAgCisgICAgbV9jdXJy
ZW50U29sdmVyLT5hZGRQYXJhbGxlbFRhc2sodGFzaywgKm1fY3VycmVudENvbnN0cmFpbnQpOwor
fQorCit9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0Fic3RyYWN0U2xvdFZpc2l0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9BYnN0cmFjdFNsb3RWaXNpdG9yLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvQWJzdHJhY3RTbG90VmlzaXRvci5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMjA5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJKU0NKU1ZhbHVlLmgiCisjaW5jbHVkZSAi
TWFya1N0YWNrLmgiCisjaW5jbHVkZSAiVmlzaXRSYWNlS2V5LmgiIC8vIG1sYW0KKyNpbmNsdWRl
IDx3dGYvU2hhcmVkVGFzay5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFt
ZXNwYWNlIEpTQyB7CisKK2NsYXNzIENvbnNlcnZhdGl2ZVJvb3RzOworY2xhc3MgRGVidWdTbG90
VmlzaXRvcjsKK2NsYXNzIEhlYXA7CitjbGFzcyBIZWFwQW5hbHl6ZXI7CitjbGFzcyBNYXJraW5n
Q29uc3RyYWludDsKK2NsYXNzIE1hcmtpbmdDb25zdHJhaW50U29sdmVyOworY2xhc3MgU2xvdFZp
c2l0b3I7CitjbGFzcyBWTTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGNsYXNzIFdlYWs7Cit0ZW1w
bGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBUcmFpdHM+IGNsYXNzIFdyaXRlQmFycmllckJhc2U7
CisKK3R5cGVkZWYgdWludDMyX3QgSGVhcFZlcnNpb247CisKK2NsYXNzIEFic3RyYWN0U2xvdFZp
c2l0b3IgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEFic3RyYWN0U2xvdFZpc2l0b3IpOwor
ICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorLy8gICAgZW51bSBjbGFzcyBU
eXBlIHsKKy8vICAgICAgICBTbG90VmlzaXRvciwKKy8vICAgICAgICBEZWJ1Z1Nsb3RWaXNpdG9y
CisvLyAgICB9OworCisgICAgZW51bSBSb290TWFya1JlYXNvbiB7CisgICAgICAgIE5vbmUsCisg
ICAgICAgIENvbnNlcnZhdGl2ZVNjYW4sCisgICAgICAgIFN0cm9uZ1JlZmVyZW5jZXMsCisgICAg
ICAgIFByb3RlY3RlZFZhbHVlcywKKyAgICAgICAgTWFya0xpc3RTZXQsCisgICAgICAgIFZNRXhj
ZXB0aW9ucywKKyAgICAgICAgU3Ryb25nSGFuZGxlcywKKyAgICAgICAgRGVidWdnZXIsCisgICAg
ICAgIEpJVFN0dWJSb3V0aW5lcywKKyAgICAgICAgV2Vha1NldHMsCisgICAgICAgIE91dHB1dCwK
KyAgICAgICAgREZHV29ya0xpc3RzLAorICAgICAgICBDb2RlQmxvY2tzLAorICAgICAgICBET01H
Q091dHB1dCwKKyAgICB9OworCisgICAgY2xhc3MgRGVmYXVsdE1hcmtpbmdWaW9sYXRpb25Bc3Nl
cnRpb25TY29wZSB7CisgICAgcHVibGljOgorICAgICAgICBEZWZhdWx0TWFya2luZ1Zpb2xhdGlv
bkFzc2VydGlvblNjb3BlKEFic3RyYWN0U2xvdFZpc2l0b3ImKSB7IH0KKyAgICB9OworCisgICAg
dmlydHVhbCB+QWJzdHJhY3RTbG90VmlzaXRvcigpID0gZGVmYXVsdDsKKworLy8gICAgQUxXQVlT
X0lOTElORSBib29sIGlzRGVidWdTbG90VmlzaXRvcigpIGNvbnN0IHsgcmV0dXJuIG1fdmlzaXRv
clR5cGUgPT0gVHlwZTo6RGVidWdTbG90VmlzaXRvcjsgfQorLy8gICAgQUxXQVlTX0lOTElORSBi
b29sIGlzU2xvdFZpc2l0b3IoKSBjb25zdCB7IHJldHVybiBtX3Zpc2l0b3JUeXBlID09IFR5cGU6
OlNsb3RWaXNpdG9yOyB9CisKKy8vICAgIEFMV0FZU19JTkxJTkUgRGVidWdTbG90VmlzaXRvciYg
YXNEZWJ1Z1Nsb3RWaXNpdG9yKCkgeyByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8RGVidWdTbG90
VmlzaXRvcio+KHRoaXMpOyB9CisvLyAgICBBTFdBWVNfSU5MSU5FIGNvbnN0IERlYnVnU2xvdFZp
c2l0b3ImIGFzRGVidWdTbG90VmlzaXRvcigpIGNvbnN0IHsgcmV0dXJuICpyZWludGVycHJldF9j
YXN0PGNvbnN0IERlYnVnU2xvdFZpc2l0b3IqPih0aGlzKTsgfQorCisvLyAgICBBTFdBWVNfSU5M
SU5FIFNsb3RWaXNpdG9yJiBhc1Nsb3RWaXNpdG9yKCkgeyByZXR1cm4gKnJlaW50ZXJwcmV0X2Nh
c3Q8U2xvdFZpc2l0b3IqPih0aGlzKTsgfQorLy8gICAgQUxXQVlTX0lOTElORSBjb25zdCBTbG90
VmlzaXRvciYgYXNTbG90VmlzaXRvcigpIGNvbnN0IHsgcmV0dXJuICpyZWludGVycHJldF9jYXN0
PGNvbnN0IFNsb3RWaXNpdG9yKj4odGhpcyk7IH0KKworICAgIE1hcmtTdGFja0FycmF5JiBjb2xs
ZWN0b3JNYXJrU3RhY2soKSB7IHJldHVybiBtX2NvbGxlY3RvclN0YWNrOyB9CisgICAgTWFya1N0
YWNrQXJyYXkmIG11dGF0b3JNYXJrU3RhY2soKSB7IHJldHVybiBtX211dGF0b3JTdGFjazsgfQor
ICAgIGNvbnN0IE1hcmtTdGFja0FycmF5JiBjb2xsZWN0b3JNYXJrU3RhY2soKSBjb25zdCB7IHJl
dHVybiBtX2NvbGxlY3RvclN0YWNrOyB9CisgICAgY29uc3QgTWFya1N0YWNrQXJyYXkmIG11dGF0
b3JNYXJrU3RhY2soKSBjb25zdCB7IHJldHVybiBtX211dGF0b3JTdGFjazsgfQorCisgICAgVk0m
IHZtKCk7CisgICAgY29uc3QgVk0mIHZtKCkgY29uc3Q7CisgICAgSGVhcCogaGVhcCgpIGNvbnN0
OworCisgICAgdmlydHVhbCB2b2lkIGFwcGVuZChjb25zdCBDb25zZXJ2YXRpdmVSb290cyYpID0g
MDsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFRyYWl0cz4gdm9pZCBhcHBl
bmQoY29uc3QgV3JpdGVCYXJyaWVyQmFzZTxULCBUcmFpdHM+Jik7CisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVCwgdHlwZW5hbWUgVHJhaXRzPiB2b2lkIGFwcGVuZEhpZGRlbihjb25zdCBXcml0ZUJh
cnJpZXJCYXNlPFQsIFRyYWl0cz4mKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJdGVyYXRvcj4g
dm9pZCBhcHBlbmQoSXRlcmF0b3IgYmVnaW4gLCBJdGVyYXRvciBlbmQpOworICAgIHZvaWQgYXBw
ZW5kVmFsdWVzKGNvbnN0IFdyaXRlQmFycmllckJhc2U8VW5rbm93biwgUmF3VmFsdWVUcmFpdHM8
VW5rbm93bj4+Kiwgc2l6ZV90IGNvdW50KTsKKyAgICB2b2lkIGFwcGVuZFZhbHVlc0hpZGRlbihj
b25zdCBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24sIFJhd1ZhbHVlVHJhaXRzPFVua25vd24+Pios
IHNpemVfdCBjb3VudCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgYXBwZW5kVW5iYXJyaWVyZWQoSlNW
YWx1ZSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBhcHBlbmRVbmJhcnJpZXJlZChKU0NlbGwqKSA9
IDA7CisKKyAgICB2aXJ0dWFsIGJvb2wgYWRkT3BhcXVlUm9vdCh2b2lkKikgPSAwOyAvLyBSZXR1
cm5zIHRydWUgaWYgdGhlIHJvb3Qgd2FzIG5ldy4KKworICAgIHZpcnR1YWwgYm9vbCBpc0ZpcnN0
VmlzaXQoKSBjb25zdCA9IDA7IC8vIG1sYW0gRklYTUUKKworICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFQ+CisgICAgdm9pZCBhcHBlbmQoY29uc3QgV2VhazxUPiYgd2Vhayk7CisKKyAgICB2aXJ0dWFs
IHZvaWQgYXBwZW5kSGlkZGVuVW5iYXJyaWVyZWQoSlNWYWx1ZSkgPSAwOworICAgIHZpcnR1YWwg
dm9pZCBhcHBlbmRIaWRkZW5VbmJhcnJpZXJlZChKU0NlbGwqKSA9IDA7CisKKyAgICB2aXJ0dWFs
IGJvb2wgY29udGFpbnNPcGFxdWVSb290KHZvaWQqKSBjb25zdCA9IDA7CisKKyAgICBzaXplX3Qg
Ynl0ZXNWaXNpdGVkKCkgY29uc3QgeyByZXR1cm4gbV9ieXRlc1Zpc2l0ZWQ7IH0KKyAgICBzaXpl
X3QgdmlzaXRDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fdmlzaXRDb3VudDsgfQorCisgICAgdm9p
ZCBhZGRUb1Zpc2l0Q291bnQoc2l6ZV90IHZhbHVlKSB7IG1fdmlzaXRDb3VudCArPSB2YWx1ZTsg
fQorCisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBhZGRQYXJhbGxlbENvbnN0cmFpbnRUYXNr
KFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoQWJzdHJhY3RTbG90VmlzaXRvciYpPj4pOworCisgICAg
dmlydHVhbCB2b2lkIG1hcmtBdXhpbGlhcnkoY29uc3Qgdm9pZCogYmFzZSkgPSAwOworCisgICAg
dmlydHVhbCB2b2lkIHJlcG9ydEV4dHJhTWVtb3J5VmlzaXRlZChzaXplX3QpID0gMDsKKyNpZiBF
TkFCTEUoUkVTT1VSQ0VfVVNBR0UpCisgICAgdmlydHVhbCB2b2lkIHJlcG9ydEV4dGVybmFsTWVt
b3J5VmlzaXRlZChzaXplX3QpID0gMDsKKyNlbmRpZgorCisgICAgdmlydHVhbCB2b2lkIGR1bXAo
UHJpbnRTdHJlYW0mKSBjb25zdCA9IDA7CisKKyAgICBib29sIGlzQW5hbHl6aW5nSGVhcCgpIGNv
bnN0IHsgcmV0dXJuICEhbV9oZWFwQW5hbHl6ZXI7IH0KKyAgICBIZWFwQW5hbHl6ZXIqIGhlYXBB
bmFseXplcigpIGNvbnN0IHsgcmV0dXJuIG1faGVhcEFuYWx5emVyOyB9CisKKyAgICBSb290TWFy
a1JlYXNvbiByb290TWFya1JlYXNvbigpIGNvbnN0IHsgcmV0dXJuIG1fcm9vdE1hcmtSZWFzb247
IH0KKyAgICB2b2lkIHNldFJvb3RNYXJrUmVhc29uKFJvb3RNYXJrUmVhc29uIHJlYXNvbikgeyBt
X3Jvb3RNYXJrUmVhc29uID0gcmVhc29uOyB9CisKKyAgICBIZWFwVmVyc2lvbiBtYXJraW5nVmVy
c2lvbigpIGNvbnN0IHsgcmV0dXJuIG1fbWFya2luZ1ZlcnNpb247IH0KKworICAgIHZpcnR1YWwg
Ym9vbCBtdXRhdG9ySXNTdG9wcGVkKCkgY29uc3QgPSAwOworCisgICAgdmlydHVhbCB2b2lkIGRp
ZFJhY2UoY29uc3QgVmlzaXRSYWNlS2V5JikgPSAwOworICAgIHZvaWQgZGlkUmFjZShKU0NlbGwq
IGNlbGwsIGNvbnN0IGNoYXIqIHJlYXNvbikgeyBkaWRSYWNlKFZpc2l0UmFjZUtleShjZWxsLCBy
ZWFzb24pKTsgfQorCisgICAgdmlydHVhbCB2b2lkIHZpc2l0QXNDb25zdHJhaW50KGNvbnN0IEpT
Q2VsbCopID0gMDsKKworICAgIC8vIElubGluZSBmdW5jdGlvbnMgZm9yIGRpc2FwYXRjaGluZyB0
byBTbG90VmlzaXRvciAvIERlYnVnU2xvdFZpc2l0b3IgdmVyc2lvbnMuCisKKy8vICAgIHZvaWQg
YXBwZW5kKGNvbnN0IENvbnNlcnZhdGl2ZVJvb3RzJik7CisvLyAgICB2b2lkIGFwcGVuZFVuYmFy
cmllcmVkKEpTVmFsdWUpOworLy8gICAgdm9pZCBhcHBlbmRVbmJhcnJpZXJlZChKU0NlbGwqKTsK
Ky8vICAgIHZvaWQgYXBwZW5kSGlkZGVuVW5iYXJyaWVyZWQoSlNDZWxsKik7CisvLyAgICBib29s
IGNvbnRhaW5zT3BhcXVlUm9vdCh2b2lkKikgY29uc3Q7CisvLyAgICB2b2lkIHZpc2l0QXNDb25z
dHJhaW50KGNvbnN0IEpTQ2VsbCopOworCitwcm90ZWN0ZWQ6CisgICAgaW5saW5lIEFic3RyYWN0
U2xvdFZpc2l0b3IoSGVhcCYsIENTdHJpbmcgY29kZU5hbWUpOworCisgICAgdm9pZCByZXNldCgp
OworCisgICAgTWFya1N0YWNrQXJyYXkgbV9jb2xsZWN0b3JTdGFjazsKKyAgICBNYXJrU3RhY2tB
cnJheSBtX211dGF0b3JTdGFjazsKKworICAgIHNpemVfdCBtX2J5dGVzVmlzaXRlZCB7IDAgfTsK
KyAgICBzaXplX3QgbV92aXNpdENvdW50IHsgMCB9OworCisgICAgSGVhcFZlcnNpb24gbV9tYXJr
aW5nVmVyc2lvbjsgLy8gbWxhbSBGSVhNRQorICAgIEhlYXAmIG1faGVhcDsKKworICAgIEhlYXBB
bmFseXplciogbV9oZWFwQW5hbHl6ZXIgeyBudWxscHRyIH07CisgICAgUm9vdE1hcmtSZWFzb24g
bV9yb290TWFya1JlYXNvbiB7IFJvb3RNYXJrUmVhc29uOjpOb25lIH07CisKKyAgICBDU3RyaW5n
IG1fY29kZU5hbWU7CisKKyAgICBNYXJraW5nQ29uc3RyYWludCogbV9jdXJyZW50Q29uc3RyYWlu
dCB7IG51bGxwdHIgfTsKKyAgICBNYXJraW5nQ29uc3RyYWludFNvbHZlciogbV9jdXJyZW50U29s
dmVyIHsgbnVsbHB0ciB9OworCisvLyAgICBUeXBlIG1fdmlzaXRvclR5cGU7CisKKyAgICBmcmll
bmQgY2xhc3MgTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXI7Cit9OworCitjbGFzcyBTZXRSb290TWFy
a1JlYXNvblNjb3BlIHsKK3B1YmxpYzoKKyAgICBTZXRSb290TWFya1JlYXNvblNjb3BlKEFic3Ry
YWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIEFic3RyYWN0U2xvdFZpc2l0b3I6OlJvb3RNYXJrUmVh
c29uIHJlYXNvbikKKyAgICAgICAgOiBtX3Zpc2l0b3IodmlzaXRvcikKKyAgICAgICAgLCBtX3By
ZXZpb3VzUmVhc29uKHZpc2l0b3Iucm9vdE1hcmtSZWFzb24oKSkKKyAgICB7CisgICAgICAgIG1f
dmlzaXRvci5zZXRSb290TWFya1JlYXNvbihyZWFzb24pOworICAgIH0KKworICAgIH5TZXRSb290
TWFya1JlYXNvblNjb3BlKCkKKyAgICB7CisgICAgICAgIG1fdmlzaXRvci5zZXRSb290TWFya1Jl
YXNvbihtX3ByZXZpb3VzUmVhc29uKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgQWJzdHJhY3RT
bG90VmlzaXRvciYgbV92aXNpdG9yOworICAgIEFic3RyYWN0U2xvdFZpc2l0b3I6OlJvb3RNYXJr
UmVhc29uIG1fcHJldmlvdXNSZWFzb247Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Fic3RyYWN0U2xvdFZpc2l0b3JJbmxpbmVzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQWJzdHJhY3RTbG90Vmlz
aXRvcklubGluZXMuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9BYnN0cmFjdFNsb3RWaXNpdG9ySW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MTA0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3By
YWdtYSBvbmNlCisKKyNpbmNsdWRlICJBYnN0cmFjdFNsb3RWaXNpdG9yLmgiCisvLyNpbmNsdWRl
ICJEZWJ1Z1Nsb3RWaXNpdG9yLmgiCisjaW5jbHVkZSAiSGVhcC5oIgorLy8jaW5jbHVkZSAiU2xv
dFZpc2l0b3IuaCIKKyNpbmNsdWRlICJXZWFrSW5saW5lcy5oIgorI2luY2x1ZGUgIldyaXRlQmFy
cmllci5oIgorCituYW1lc3BhY2UgSlNDIHsKKworLy9pbmxpbmUgQWJzdHJhY3RTbG90VmlzaXRv
cjo6QWJzdHJhY3RTbG90VmlzaXRvcihUeXBlIHR5cGUsIEhlYXAmIGhlYXAsIENTdHJpbmcgY29k
ZU5hbWUpCitpbmxpbmUgQWJzdHJhY3RTbG90VmlzaXRvcjo6QWJzdHJhY3RTbG90VmlzaXRvcihI
ZWFwJiBoZWFwLCBDU3RyaW5nIGNvZGVOYW1lKQorICAgIDogbV9tYXJraW5nVmVyc2lvbihNYXJr
ZWRTcGFjZTo6aW5pdGlhbFZlcnNpb24pCisgICAgLCBtX2hlYXAoaGVhcCkKKyAgICAsIG1fY29k
ZU5hbWUoY29kZU5hbWUpCisvLyAgICAsIG1fdmlzaXRvclR5cGUodHlwZSkKK3sKK30KKworaW5s
aW5lIEhlYXAqIEFic3RyYWN0U2xvdFZpc2l0b3I6OmhlYXAoKSBjb25zdAoreworICAgIHJldHVy
biAmbV9oZWFwOworfQorCitpbmxpbmUgVk0mIEFic3RyYWN0U2xvdFZpc2l0b3I6OnZtKCkKK3sK
KyAgICByZXR1cm4gbV9oZWFwLnZtKCk7Cit9CisKK2lubGluZSBjb25zdCBWTSYgQWJzdHJhY3RT
bG90VmlzaXRvcjo6dm0oKSBjb25zdAoreworICAgIHJldHVybiBtX2hlYXAudm0oKTsKK30KKwor
dGVtcGxhdGU8dHlwZW5hbWUgVD4KK0FMV0FZU19JTkxJTkUgdm9pZCBBYnN0cmFjdFNsb3RWaXNp
dG9yOjphcHBlbmQoY29uc3QgV2VhazxUPiYgd2VhaykKK3sKKyAgICBhcHBlbmRVbmJhcnJpZXJl
ZCh3ZWFrLmdldCgpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVHJhaXRz
PgorQUxXQVlTX0lOTElORSB2b2lkIEFic3RyYWN0U2xvdFZpc2l0b3I6OmFwcGVuZChjb25zdCBX
cml0ZUJhcnJpZXJCYXNlPFQsIFRyYWl0cz4mIHNsb3QpCit7CisgICAgYXBwZW5kVW5iYXJyaWVy
ZWQoc2xvdC5nZXQoKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFRyYWl0
cz4KK0FMV0FZU19JTkxJTkUgdm9pZCBBYnN0cmFjdFNsb3RWaXNpdG9yOjphcHBlbmRIaWRkZW4o
Y29uc3QgV3JpdGVCYXJyaWVyQmFzZTxULCBUcmFpdHM+JiBzbG90KQoreworICAgIGFwcGVuZEhp
ZGRlblVuYmFycmllcmVkKHNsb3QuZ2V0KCkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBJdGVy
YXRvcj4KK0FMV0FZU19JTkxJTkUgdm9pZCBBYnN0cmFjdFNsb3RWaXNpdG9yOjphcHBlbmQoSXRl
cmF0b3IgYmVnaW4sIEl0ZXJhdG9yIGVuZCkKK3sKKyAgICBmb3IgKGF1dG8gaXQgPSBiZWdpbjsg
aXQgIT0gZW5kOyArK2l0KQorICAgICAgICBhcHBlbmQoKml0KTsKK30KKworQUxXQVlTX0lOTElO
RSB2b2lkIEFic3RyYWN0U2xvdFZpc2l0b3I6OmFwcGVuZFZhbHVlcyhjb25zdCBXcml0ZUJhcnJp
ZXJCYXNlPFVua25vd24+KiBiYXJyaWVycywgc2l6ZV90IGNvdW50KQoreworICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgY291bnQ7ICsraSkKKyAgICAgICAgYXBwZW5kKGJhcnJpZXJzW2ldKTsK
K30KKworQUxXQVlTX0lOTElORSB2b2lkIEFic3RyYWN0U2xvdFZpc2l0b3I6OmFwcGVuZFZhbHVl
c0hpZGRlbihjb25zdCBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+KiBiYXJyaWVycywgc2l6ZV90
IGNvdW50KQoreworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY291bnQ7ICsraSkKKyAgICAg
ICAgYXBwZW5kSGlkZGVuKGJhcnJpZXJzW2ldKTsKK30KKworQUxXQVlTX0lOTElORSB2b2lkIEFi
c3RyYWN0U2xvdFZpc2l0b3I6OnJlc2V0KCkKK3sKKyAgICBtX2J5dGVzVmlzaXRlZCA9IDA7Cisg
ICAgbV92aXNpdENvdW50ID0gMDsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9EZWJ1Z1Nsb3RWaXNpdG9yLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvRGVidWdTbG90VmlzaXRvci5oCShub25leGlzdGVu
dCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0RlYnVnU2xvdFZpc2l0b3IuaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDExMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQWJzdHJhY3RTbG90
VmlzaXRvci5oIgorI2luY2x1ZGUgIkpTQ0pTVmFsdWUuaCIKKyNpbmNsdWRlICJWaXNpdFJhY2VL
ZXkuaCIKKyNpbmNsdWRlICJXZWFrLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBDb25z
ZXJ2YXRpdmVSb290czsKK2NsYXNzIEhlYXA7CitjbGFzcyBKU0NlbGw7CisKKy8vIERlYnVnU2xv
dFZpc2l0b3IncyBtZXRob2RzIHNob3VsZCBtYXRjaCBTbG90VmlzaXRvci4KKy8vIFNlZSBTbG90
VmlzaXRvci5oIGZvciBkb2N1bWVudGF0aW9uIG9uIHdoYXQgZWFjaCBvZiB0aGUgbWV0aG9kcyBk
b2VzLgorCitjbGFzcyBEZWJ1Z1Nsb3RWaXNpdG9yIDogcHVibGljIEFic3RyYWN0U2xvdFZpc2l0
b3IgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKERlYnVnU2xvdFZpc2l0b3IpOworICAgIFdU
Rl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworICAgIHVzaW5nIEJhc2UgPSBBYnN0cmFjdFNsb3RWaXNp
dG9yOworcHVibGljOgorLy8gICAgY2xhc3MgRGVmYXVsdE1hcmtpbmdWaW9sYXRpb25Bc3NlcnRp
b25TY29wZSB7CisvLyAgICBwdWJsaWM6CisvLyAgICAgICAgRGVmYXVsdE1hcmtpbmdWaW9sYXRp
b25Bc3NlcnRpb25TY29wZShEZWJ1Z1Nsb3RWaXNpdG9yJikgeyB9CisvLyAgICB9OworCisgICAg
aW5saW5lIERlYnVnU2xvdFZpc2l0b3IoSGVhcCYsIENTdHJpbmcgY29kZU5hbWUpOworICAgIHZp
cnR1YWwgfkRlYnVnU2xvdFZpc2l0b3IoKSA9IGRlZmF1bHQ7CisKKyAgICBpbmxpbmUgVk0mIHZt
KCk7CisgICAgaW5saW5lIGNvbnN0IFZNJiB2bSgpIGNvbnN0OworICAgIGlubGluZSBIZWFwKiBo
ZWFwKCkgY29uc3Q7CisKKyAgICB2aXJ0dWFsIHZvaWQgYXBwZW5kKGNvbnN0IENvbnNlcnZhdGl2
ZVJvb3RzJikgb3ZlcnJpZGU7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBU
cmFpdHM+IHZvaWQgYXBwZW5kKGNvbnN0IFdyaXRlQmFycmllckJhc2U8VCwgVHJhaXRzPiYpOwor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFRyYWl0cz4gdm9pZCBhcHBlbmRIaWRk
ZW4oY29uc3QgV3JpdGVCYXJyaWVyQmFzZTxULCBUcmFpdHM+Jik7CisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgSXRlcmF0b3I+IHZvaWQgYXBwZW5kKEl0ZXJhdG9yIGJlZ2luICwgSXRlcmF0b3IgZW5k
KTsKKyAgICB2aXJ0dWFsIHZvaWQgYXBwZW5kVmFsdWVzKGNvbnN0IFdyaXRlQmFycmllckJhc2U8
VW5rbm93biwgUmF3VmFsdWVUcmFpdHM8VW5rbm93bj4+Kiwgc2l6ZV90IGNvdW50KSA9IDA7Cisg
ICAgdmlydHVhbCB2b2lkIGFwcGVuZFZhbHVlc0hpZGRlbihjb25zdCBXcml0ZUJhcnJpZXJCYXNl
PFVua25vd24sIFJhd1ZhbHVlVHJhaXRzPFVua25vd24+PiosIHNpemVfdCBjb3VudCkgPSAwOwor
CisgICAgdmlydHVhbCB2b2lkIGFwcGVuZFVuYmFycmllcmVkKEpTVmFsdWUpIG92ZXJyaWRlOwor
ICAgIHZpcnR1YWwgdm9pZCBhcHBlbmRVbmJhcnJpZXJlZChKU1ZhbHVlKiwgc2l6ZV90KSA9IDA7
CisgICAgdmlydHVhbCB2b2lkIGFwcGVuZFVuYmFycmllcmVkKEpTQ2VsbCopIG92ZXJyaWRlOwor
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICB2b2lkIGFwcGVuZChjb25zdCBXZWFrPFQ+
JiB3ZWFrKTsKKworICAgIHZvaWQgYXBwZW5kSGlkZGVuVW5iYXJyaWVyZWQoSlNWYWx1ZSkgb3Zl
cnJpZGU7CisgICAgdm9pZCBhcHBlbmRIaWRkZW5VbmJhcnJpZXJlZChKU0NlbGwqKSBvdmVycmlk
ZTsKKworICAgIGJvb2wgYWRkT3BhcXVlUm9vdCh2b2lkKikgb3ZlcnJpZGU7IC8vIFJldHVybnMg
dHJ1ZSBpZiB0aGUgcm9vdCB3YXMgbmV3LgorICAgIGJvb2wgY29udGFpbnNPcGFxdWVSb290KHZv
aWQqKSBjb25zdCBvdmVycmlkZTsKKworICAgIGJvb2wgaXNGaXJzdFZpc2l0KCkgY29uc3QgZmlu
YWwgeyByZXR1cm4gbV9pc0ZpcnN0VmlzaXQ7IH0gLy8gbWxhbSBGSVhNRQorCisgICAgdm9pZCBt
YXJrQXV4aWxpYXJ5KGNvbnN0IHZvaWQqIGJhc2UpIG92ZXJyaWRlOworCisgICAgdm9pZCByZXBv
cnRFeHRyYU1lbW9yeVZpc2l0ZWQoc2l6ZV90KSBvdmVycmlkZTsKKyNpZiBFTkFCTEUoUkVTT1VS
Q0VfVVNBR0UpCisgICAgdm9pZCByZXBvcnRFeHRlcm5hbE1lbW9yeVZpc2l0ZWQoc2l6ZV90KSBv
dmVycmlkZTsKKyNlbmRpZgorCisgICAgSGVhcFZlcnNpb24gbWFya2luZ1ZlcnNpb24oKSBjb25z
dCB7IHJldHVybiBtX21hcmtpbmdWZXJzaW9uOyB9CisKKyAgICBib29sIG11dGF0b3JJc1N0b3Bw
ZWQoKSBjb25zdCBvdmVycmlkZTsKKworLy8gICAgdmlydHVhbCB2b2lkIGRpZFJhY2UoY29uc3Qg
VmlzaXRSYWNlS2V5JikgPSAwOworLy8gICAgdm9pZCBkaWRSYWNlKEpTQ2VsbCogY2VsbCwgY29u
c3QgY2hhciogcmVhc29uKSB7IGRpZFJhY2UoVmlzaXRSYWNlS2V5KGNlbGwsIHJlYXNvbikpOyB9
CisgICAgdm9pZCBkaWRSYWNlKGNvbnN0IFZpc2l0UmFjZUtleSYpIG92ZXJyaWRlOworCitwcm90
ZWN0ZWQ6CisgICAgc2l6ZV90IG1fbm9uQ2VsbFZpc2l0Q291bnQgeyAwIH07IC8vIFVzZWQgZm9y
IGluY3JlbWVudGFsIGRyYWluaW5nLCBpZ25vcmVkIG90aGVyd2lzZS4KKyAgICBDaGVja2VkU2l6
ZSBtX2V4dHJhTWVtb3J5U2l6ZSB7IDAgfTsKKworICAgIEhlYXBWZXJzaW9uIG1fbWFya2luZ1Zl
cnNpb247IC8vIG1sYW0gRklYTUUKKworLy8gICAgSGVhcCYgbV9oZWFwOworICAgIENTdHJpbmcg
bV9jb2RlTmFtZTsKKworICAgIGJvb2wgbV9pc0ZpcnN0VmlzaXQgeyBmYWxzZSB9OworLy8gICAg
Ym9vbCBtX211dGF0b3JJc1N0b3BwZWQgeyBmYWxzZSB9OyAvLyBtbGFtIEZJWE1FCit9OworCit9
IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0RlYnVn
U2xvdFZpc2l0b3JJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvRGVidWdTbG90VmlzaXRvcklubGluZXMuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9EZWJ1Z1Nsb3RWaXNpdG9ySW5saW5lcy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsODkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkFic3RyYWN0U2xvdFZpc2l0b3JJ
bmxpbmVzLmgiCisjaW5jbHVkZSAiRGVidWdTbG90VmlzaXRvci5oIgorCituYW1lc3BhY2UgSlND
IHsKKworaW5saW5lIERlYnVnU2xvdFZpc2l0b3I6OkRlYnVnU2xvdFZpc2l0b3IoSGVhcCYgaGVh
cCwgQ1N0cmluZyBjb2RlTmFtZSkKKy8vICAgIDogQmFzZShUeXBlOjpEZWJ1Z1Nsb3RWaXNpdG9y
LCBoZWFwLCBjb2RlTmFtZSkKKyAgICA6IEJhc2UoaGVhcCwgY29kZU5hbWUpCit7Cit9CisKK2lu
bGluZSBIZWFwKiBEZWJ1Z1Nsb3RWaXNpdG9yOjpoZWFwKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
Jm1faGVhcDsKK30KKworaW5saW5lIFZNJiBEZWJ1Z1Nsb3RWaXNpdG9yOjp2bSgpCit7CisgICAg
cmV0dXJuIG1faGVhcC52bSgpOworfQorCitpbmxpbmUgY29uc3QgVk0mIERlYnVnU2xvdFZpc2l0
b3I6OnZtKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9oZWFwLnZtKCk7Cit9CisKK3RlbXBsYXRl
PHR5cGVuYW1lIFQsIHR5cGVuYW1lIFRyYWl0cz4KK0FMV0FZU19JTkxJTkUgdm9pZCBEZWJ1Z1Ns
b3RWaXNpdG9yOjphcHBlbmQoY29uc3QgV3JpdGVCYXJyaWVyQmFzZTxULCBUcmFpdHM+JiBzbG90
KQoreworICAgIGFwcGVuZFVuYmFycmllcmVkKHNsb3QuZ2V0KCkpOworfQorCit0ZW1wbGF0ZTx0
eXBlbmFtZSBULCB0eXBlbmFtZSBUcmFpdHM+CitBTFdBWVNfSU5MSU5FIHZvaWQgRGVidWdTbG90
VmlzaXRvcjo6YXBwZW5kSGlkZGVuKGNvbnN0IFdyaXRlQmFycmllckJhc2U8VCwgVHJhaXRzPiYg
c2xvdCkKK3sKKyAgICBhcHBlbmRIaWRkZW5VbmJhcnJpZXJlZChzbG90LmdldCgpKTsKK30KKwor
dGVtcGxhdGU8dHlwZW5hbWUgSXRlcmF0b3I+CitBTFdBWVNfSU5MSU5FIHZvaWQgRGVidWdTbG90
VmlzaXRvcjo6YXBwZW5kKEl0ZXJhdG9yIGJlZ2luLCBJdGVyYXRvciBlbmQpCit7CisgICAgZm9y
IChhdXRvIGl0ID0gYmVnaW47IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgYXBwZW5kKCppdCk7
Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitBTFdBWVNfSU5MSU5FIHZvaWQgRGVidWdTbG90
VmlzaXRvcjo6YXBwZW5kKGNvbnN0IFdlYWs8VD4mIHdlYWspCit7CisgICAgYXBwZW5kVW5iYXJy
aWVyZWQod2Vhay5nZXQoKSk7Cit9CisKK2lubGluZSB2b2lkIERlYnVnU2xvdFZpc2l0b3I6OnJl
cG9ydEV4dHJhTWVtb3J5VmlzaXRlZChzaXplX3Qgc2l6ZSkKK3sKKyAgICBpZiAobV9pc0ZpcnN0
VmlzaXQpIHsKKyAgICAgICAgbV9ub25DZWxsVmlzaXRDb3VudCArPSBzaXplOworICAgICAgICAv
LyBGSVhNRTogQ2hhbmdlIHRoaXMgdG8gdXNlIFNhdHVyYXRlZEFyaXRobWV0aWMgd2hlbiBhdmFp
bGFibGUuCisgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNzA0MTEKKyAgICAgICAgbV9leHRyYU1lbW9yeVNpemUgKz0gc2l6ZTsKKyAgICB9Cit9CisK
K30gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGFu
ZGxlU2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IYW5k
bGVTZXQuY3BwCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9IYW5kbGVTZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Niw3ICs1Niw5IEBAIHZvaWQgSGFu
ZGxlU2V0Ojpncm93KCkKICAgICB9CiB9CiAKLXZvaWQgSGFuZGxlU2V0Ojp2aXNpdFN0cm9uZ0hh
bmRsZXMoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+
CisvL3ZvaWQgSGFuZGxlU2V0Ojp2aXNpdFN0cm9uZ0hhbmRsZXMoVmlzaXRvciYgdmlzaXRvcikK
K3ZvaWQgSGFuZGxlU2V0Ojp2aXNpdFN0cm9uZ0hhbmRsZXMxKEFic3RyYWN0U2xvdFZpc2l0b3Im
IHZpc2l0b3IpCiB7CiAgICAgTm9kZSogZW5kID0gbV9zdHJvbmdMaXN0LmVuZCgpOwogICAgIGZv
ciAoTm9kZSogbm9kZSA9IG1fc3Ryb25nTGlzdC5iZWdpbigpOyBub2RlICE9IGVuZDsgbm9kZSA9
IG5vZGUtPm5leHQoKSkgewpAQCAtNjcsNiArNjksOSBAQCB2b2lkIEhhbmRsZVNldDo6dmlzaXRT
dHJvbmdIYW5kbGVzKFNsb3RWCiAgICAgfQogfQogCisvL3RlbXBsYXRlIHZvaWQgSGFuZGxlU2V0
Ojp2aXNpdFN0cm9uZ0hhbmRsZXMoU2xvdFZpc2l0b3ImKTsKKy8vdGVtcGxhdGUgdm9pZCBIYW5k
bGVTZXQ6OnZpc2l0U3Ryb25nSGFuZGxlcyhEZWJ1Z1Nsb3RWaXNpdG9yJik7CisKIHZvaWQgSGFu
ZGxlU2V0Ojp3cml0ZUJhcnJpZXIoSGFuZGxlU2xvdCBzbG90LCBjb25zdCBKU1ZhbHVlJiB2YWx1
ZSkKIHsKICAgICBpZiAoIXZhbHVlID09ICEqc2xvdCAmJiBzbG90LT5pc0NlbGwoKSA9PSB2YWx1
ZS5pc0NlbGwoKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hhbmRsZVNldC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hhbmRsZVNldC5oCShy
ZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IYW5kbGVTZXQu
aAkod29ya2luZyBjb3B5KQpAQCAtMzUsMTAgKzM1LDExIEBACiAKIG5hbWVzcGFjZSBKU0Mgewog
CitjbGFzcyBBYnN0cmFjdFNsb3RWaXNpdG9yOwogY2xhc3MgSGFuZGxlU2V0OwogY2xhc3MgVk07
CiBjbGFzcyBKU1ZhbHVlOwotY2xhc3MgU2xvdFZpc2l0b3I7CisvL2NsYXNzIFNsb3RWaXNpdG9y
OwogCiBjbGFzcyBIYW5kbGVOb2RlIHsKIHB1YmxpYzoKQEAgLTczLDcgKzc0LDggQEAgcHVibGlj
OgogICAgIEhhbmRsZVNsb3QgYWxsb2NhdGUoKTsKICAgICB2b2lkIGRlYWxsb2NhdGUoSGFuZGxl
U2xvdCk7CiAKLSAgICB2b2lkIHZpc2l0U3Ryb25nSGFuZGxlcyhTbG90VmlzaXRvciYpOworLy8g
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCB2aXNpdFN0cm9uZ0hhbmRsZXMoVmlz
aXRvciYpOworICAgIHZvaWQgdmlzaXRTdHJvbmdIYW5kbGVzMShBYnN0cmFjdFNsb3RWaXNpdG9y
Jik7CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHdyaXRlQmFycmllcihIYW5kbGVTbG90
LCBjb25zdCBKU1ZhbHVlJik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hl
YXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3Bw
CShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjY5NywxMSArMjY5NywxMiBAQCB2b2lkIEhlYXA6OmRpZEZy
ZWVCbG9jayhzaXplX3QgY2FwYWNpdHkpCiAjZW5kaWYKIH0KIAorLy8gbWxhbSBGSVhNRQogdm9p
ZCBIZWFwOjphZGRDb3JlQ29uc3RyYWludHMoKQogewogICAgIG1fY29uc3RyYWludFNldC0+YWRk
KAogICAgICAgICAiQ3MiLCAiQ29uc2VydmF0aXZlIFNjYW4iLAotICAgICAgICBbdGhpcywgbGFz
dFZlcnNpb24gPSBzdGF0aWNfY2FzdDx1aW50NjRfdD4oMCldIChTbG90VmlzaXRvciYgc2xvdFZp
c2l0b3IpIG11dGFibGUgeworICAgICAgICBbdGhpcywgbGFzdFZlcnNpb24gPSBzdGF0aWNfY2Fz
dDx1aW50NjRfdD4oMCldIChBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBtdXRhYmxlIHsK
ICAgICAgICAgICAgIGJvb2wgc2hvdWxkTm90UHJvZHVjZVdvcmsgPSBsYXN0VmVyc2lvbiA9PSBt
X3BoYXNlVmVyc2lvbjsKICAgICAgICAgICAgIGlmIChzaG91bGROb3RQcm9kdWNlV29yaykKICAg
ICAgICAgICAgICAgICByZXR1cm47CkBAIC0yNzE4LDEzICsyNzE5LDEzIEBAIHZvaWQgSGVhcDo6
YWRkQ29yZUNvbnN0cmFpbnRzKCkKICAgICAgICAgICAgICAgICBnYXRoZXJKU1N0YWNrUm9vdHMo
Y29uc2VydmF0aXZlUm9vdHMpOwogICAgICAgICAgICAgICAgIGdhdGhlclNjcmF0Y2hCdWZmZXJS
b290cyhjb25zZXJ2YXRpdmVSb290cyk7CiAKLSAgICAgICAgICAgICAgICBTZXRSb290TWFya1Jl
YXNvblNjb3BlIHJvb3RTY29wZShzbG90VmlzaXRvciwgU2xvdFZpc2l0b3I6OlJvb3RNYXJrUmVh
c29uOjpDb25zZXJ2YXRpdmVTY2FuKTsKLSAgICAgICAgICAgICAgICBzbG90VmlzaXRvci5hcHBl
bmQoY29uc2VydmF0aXZlUm9vdHMpOworICAgICAgICAgICAgICAgIFNldFJvb3RNYXJrUmVhc29u
U2NvcGUgcm9vdFNjb3BlKHZpc2l0b3IsIEFic3RyYWN0U2xvdFZpc2l0b3I6OlJvb3RNYXJrUmVh
c29uOjpDb25zZXJ2YXRpdmVTY2FuKTsKKyAgICAgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZChj
b25zZXJ2YXRpdmVSb290cyk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoT3B0aW9u
czo6dXNlSklUKCkpIHsKICAgICAgICAgICAgICAgICAvLyBKSVRTdHViUm91dGluZXMgbXVzdCBi
ZSB2aXNpdGVkIGFmdGVyIHNjYW5uaW5nIENvbnNlcnZhdGl2ZVJvb3RzIHNpbmNlIEpJVFN0dWJS
b3V0aW5lcyBkZXBlbmQgb24gdGhlIGhvb2sgZXhlY3V0ZWQgZHVyaW5nIGdhdGhlcmluZyBDb25z
ZXJ2YXRpdmVSb290cy4KLSAgICAgICAgICAgICAgICBTZXRSb290TWFya1JlYXNvblNjb3BlIHJv
b3RTY29wZShzbG90VmlzaXRvciwgU2xvdFZpc2l0b3I6OlJvb3RNYXJrUmVhc29uOjpKSVRTdHVi
Um91dGluZXMpOwotICAgICAgICAgICAgICAgIG1faml0U3R1YlJvdXRpbmVzLT50cmFjZU1hcmtl
ZFN0dWJSb3V0aW5lcyhzbG90VmlzaXRvcik7CisgICAgICAgICAgICAgICAgU2V0Um9vdE1hcmtS
ZWFzb25TY29wZSByb290U2NvcGUodmlzaXRvciwgQWJzdHJhY3RTbG90VmlzaXRvcjo6Um9vdE1h
cmtSZWFzb246OkpJVFN0dWJSb3V0aW5lcyk7CisgICAgICAgICAgICAgICAgbV9qaXRTdHViUm91
dGluZXMtPnRyYWNlTWFya2VkU3R1YlJvdXRpbmVzMSh2aXNpdG9yKTsKICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIAogICAgICAgICAgICAgbGFzdFZlcnNpb24gPSBtX3BoYXNlVmVyc2lvbjsK
QEAgLTI3MzMsOTIgKzI3MzQsOTIgQEAgdm9pZCBIZWFwOjphZGRDb3JlQ29uc3RyYWludHMoKQog
ICAgIAogICAgIG1fY29uc3RyYWludFNldC0+YWRkKAogICAgICAgICAiTXNyIiwgIk1pc2MgU21h
bGwgUm9vdHMiLAotICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvcikgewor
ICAgICAgICBbdGhpc10gKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsKIAogI2lmIEpT
Q19PQkpDX0FQSV9FTkFCTEVECi0gICAgICAgICAgICBzY2FuRXh0ZXJuYWxSZW1lbWJlcmVkU2V0
KG1fdm0sIHNsb3RWaXNpdG9yKTsKKyAgICAgICAgICAgIHNjYW5FeHRlcm5hbFJlbWVtYmVyZWRT
ZXQobV92bSwgdmlzaXRvcik7CiAjZW5kaWYKICAgICAgICAgICAgIGlmIChtX3ZtLnNtYWxsU3Ry
aW5ncy5uZWVkc1RvQmVWaXNpdGVkKCptX2NvbGxlY3Rpb25TY29wZSkpIHsKLSAgICAgICAgICAg
ICAgICBTZXRSb290TWFya1JlYXNvblNjb3BlIHJvb3RTY29wZShzbG90VmlzaXRvciwgU2xvdFZp
c2l0b3I6OlJvb3RNYXJrUmVhc29uOjpTdHJvbmdSZWZlcmVuY2VzKTsKLSAgICAgICAgICAgICAg
ICBtX3ZtLnNtYWxsU3RyaW5ncy52aXNpdFN0cm9uZ1JlZmVyZW5jZXMoc2xvdFZpc2l0b3IpOwor
ICAgICAgICAgICAgICAgIFNldFJvb3RNYXJrUmVhc29uU2NvcGUgcm9vdFNjb3BlKHZpc2l0b3Is
IEFic3RyYWN0U2xvdFZpc2l0b3I6OlJvb3RNYXJrUmVhc29uOjpTdHJvbmdSZWZlcmVuY2VzKTsK
KyAgICAgICAgICAgICAgICBtX3ZtLnNtYWxsU3RyaW5ncy52aXNpdFN0cm9uZ1JlZmVyZW5jZXMo
dmlzaXRvcik7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICBTZXRSb290TWFya1JlYXNvblNjb3BlIHJvb3RTY29wZShzbG90VmlzaXRv
ciwgU2xvdFZpc2l0b3I6OlJvb3RNYXJrUmVhc29uOjpQcm90ZWN0ZWRWYWx1ZXMpOworICAgICAg
ICAgICAgICAgIFNldFJvb3RNYXJrUmVhc29uU2NvcGUgcm9vdFNjb3BlKHZpc2l0b3IsIEFic3Ry
YWN0U2xvdFZpc2l0b3I6OlJvb3RNYXJrUmVhc29uOjpQcm90ZWN0ZWRWYWx1ZXMpOwogICAgICAg
ICAgICAgICAgIGZvciAoYXV0byYgcGFpciA6IG1fcHJvdGVjdGVkVmFsdWVzKQotICAgICAgICAg
ICAgICAgICAgICBzbG90VmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZChwYWlyLmtleSk7CisgICAg
ICAgICAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQocGFpci5rZXkpOwogICAg
ICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAobV9tYXJrTGlzdFNldCAm
JiBtX21hcmtMaXN0U2V0LT5zaXplKCkpIHsKLSAgICAgICAgICAgICAgICBTZXRSb290TWFya1Jl
YXNvblNjb3BlIHJvb3RTY29wZShzbG90VmlzaXRvciwgU2xvdFZpc2l0b3I6OlJvb3RNYXJrUmVh
c29uOjpDb25zZXJ2YXRpdmVTY2FuKTsKLSAgICAgICAgICAgICAgICBNYXJrZWRBcmd1bWVudEJ1
ZmZlcjo6bWFya0xpc3RzKHNsb3RWaXNpdG9yLCAqbV9tYXJrTGlzdFNldCk7CisgICAgICAgICAg
ICAgICAgU2V0Um9vdE1hcmtSZWFzb25TY29wZSByb290U2NvcGUodmlzaXRvciwgQWJzdHJhY3RT
bG90VmlzaXRvcjo6Um9vdE1hcmtSZWFzb246OkNvbnNlcnZhdGl2ZVNjYW4pOworICAgICAgICAg
ICAgICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyOjptYXJrTGlzdHModmlzaXRvciwgKm1fbWFya0xp
c3RTZXQpOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBtX21hcmtlZEpTVmFsdWVSZWZB
cnJheXMuZm9yRWFjaChbJl0gKE1hcmtlZEpTVmFsdWVSZWZBcnJheSogYXJyYXkpIHsKLSAgICAg
ICAgICAgICAgICBhcnJheS0+dmlzaXRBZ2dyZWdhdGUoc2xvdFZpc2l0b3IpOworICAgICAgICAg
ICAgICAgIGFycmF5LT52aXNpdEFnZ3JlZ2F0ZTEodmlzaXRvcik7CiAgICAgICAgICAgICB9KTsK
IAogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFNldFJvb3RNYXJrUmVhc29uU2NvcGUg
cm9vdFNjb3BlKHNsb3RWaXNpdG9yLCBTbG90VmlzaXRvcjo6Um9vdE1hcmtSZWFzb246OlZNRXhj
ZXB0aW9ucyk7Ci0gICAgICAgICAgICAgICAgc2xvdFZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQo
bV92bS5leGNlcHRpb24oKSk7Ci0gICAgICAgICAgICAgICAgc2xvdFZpc2l0b3IuYXBwZW5kVW5i
YXJyaWVyZWQobV92bS5sYXN0RXhjZXB0aW9uKCkpOworICAgICAgICAgICAgICAgIFNldFJvb3RN
YXJrUmVhc29uU2NvcGUgcm9vdFNjb3BlKHZpc2l0b3IsIEFic3RyYWN0U2xvdFZpc2l0b3I6OlJv
b3RNYXJrUmVhc29uOjpWTUV4Y2VwdGlvbnMpOworICAgICAgICAgICAgICAgIHZpc2l0b3IuYXBw
ZW5kVW5iYXJyaWVyZWQobV92bS5leGNlcHRpb24oKSk7CisgICAgICAgICAgICAgICAgdmlzaXRv
ci5hcHBlbmRVbmJhcnJpZXJlZChtX3ZtLmxhc3RFeGNlcHRpb24oKSk7CiAgICAgICAgICAgICB9
CiAgICAgICAgIH0sCiAgICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5OjpHcmV5ZWRCeUV4ZWN1
dGlvbik7CiAgICAgCiAgICAgbV9jb25zdHJhaW50U2V0LT5hZGQoCiAgICAgICAgICJTaCIsICJT
dHJvbmcgSGFuZGxlcyIsCi0gICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9y
KSB7Ci0gICAgICAgICAgICBTZXRSb290TWFya1JlYXNvblNjb3BlIHJvb3RTY29wZShzbG90Vmlz
aXRvciwgU2xvdFZpc2l0b3I6OlJvb3RNYXJrUmVhc29uOjpTdHJvbmdIYW5kbGVzKTsKLSAgICAg
ICAgICAgIG1faGFuZGxlU2V0LnZpc2l0U3Ryb25nSGFuZGxlcyhzbG90VmlzaXRvcik7CisgICAg
ICAgIFt0aGlzXSAoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikgeworICAgICAgICAgICAg
U2V0Um9vdE1hcmtSZWFzb25TY29wZSByb290U2NvcGUodmlzaXRvciwgQWJzdHJhY3RTbG90Vmlz
aXRvcjo6Um9vdE1hcmtSZWFzb246OlN0cm9uZ0hhbmRsZXMpOworICAgICAgICAgICAgbV9oYW5k
bGVTZXQudmlzaXRTdHJvbmdIYW5kbGVzMSh2aXNpdG9yKTsKICAgICAgICAgfSwKICAgICAgICAg
Q29uc3RyYWludFZvbGF0aWxpdHk6OkdyZXllZEJ5RXhlY3V0aW9uKTsKICAgICAKICAgICBtX2Nv
bnN0cmFpbnRTZXQtPmFkZCgKICAgICAgICAgIkQiLCAiRGVidWdnZXIiLAotICAgICAgICBbdGhp
c10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvcikgewotICAgICAgICAgICAgU2V0Um9vdE1hcmtS
ZWFzb25TY29wZSByb290U2NvcGUoc2xvdFZpc2l0b3IsIFNsb3RWaXNpdG9yOjpSb290TWFya1Jl
YXNvbjo6RGVidWdnZXIpOworICAgICAgICBbdGhpc10gKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZp
c2l0b3IpIHsKKyAgICAgICAgICAgIFNldFJvb3RNYXJrUmVhc29uU2NvcGUgcm9vdFNjb3BlKHZp
c2l0b3IsIEFic3RyYWN0U2xvdFZpc2l0b3I6OlJvb3RNYXJrUmVhc29uOjpEZWJ1Z2dlcik7CiAK
ICNpZiBFTkFCTEUoU0FNUExJTkdfUFJPRklMRVIpCiAgICAgICAgICAgICBpZiAoU2FtcGxpbmdQ
cm9maWxlciogc2FtcGxpbmdQcm9maWxlciA9IG1fdm0uc2FtcGxpbmdQcm9maWxlcigpKSB7CiAg
ICAgICAgICAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhzYW1wbGluZ1Byb2ZpbGVyLT5n
ZXRMb2NrKCkpOwogICAgICAgICAgICAgICAgIHNhbXBsaW5nUHJvZmlsZXItPnByb2Nlc3NVbnZl
cmlmaWVkU3RhY2tUcmFjZXMobG9ja2VyKTsKLSAgICAgICAgICAgICAgICBzYW1wbGluZ1Byb2Zp
bGVyLT52aXNpdChzbG90VmlzaXRvcik7CisgICAgICAgICAgICAgICAgc2FtcGxpbmdQcm9maWxl
ci0+dmlzaXQodmlzaXRvcik7CiAgICAgICAgICAgICAgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkg
PT0gR0NMb2dnaW5nOjpWZXJib3NlKQotICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJTYW1w
bGluZyBQcm9maWxlciBkYXRhOlxuIiwgc2xvdFZpc2l0b3IpOworICAgICAgICAgICAgICAgICAg
ICBkYXRhTG9nKCJTYW1wbGluZyBQcm9maWxlciBkYXRhOlxuIiwgdmlzaXRvcik7CiAgICAgICAg
ICAgICB9CiAjZW5kaWYgLy8gRU5BQkxFKFNBTVBMSU5HX1BST0ZJTEVSKQogCiAgICAgICAgICAg
ICBpZiAobV92bS50eXBlUHJvZmlsZXIoKSkKLSAgICAgICAgICAgICAgICBtX3ZtLnR5cGVQcm9m
aWxlckxvZygpLT52aXNpdChzbG90VmlzaXRvcik7CisgICAgICAgICAgICAgICAgbV92bS50eXBl
UHJvZmlsZXJMb2coKS0+dmlzaXQodmlzaXRvcik7CiAgICAgICAgICAgICAKICAgICAgICAgICAg
IGlmIChhdXRvKiBzaGFkb3dDaGlja2VuID0gbV92bS5zaGFkb3dDaGlja2VuKCkpCi0gICAgICAg
ICAgICAgICAgc2hhZG93Q2hpY2tlbi0+dmlzaXRDaGlsZHJlbihzbG90VmlzaXRvcik7CisgICAg
ICAgICAgICAgICAgc2hhZG93Q2hpY2tlbi0+dmlzaXRDaGlsZHJlbih2aXNpdG9yKTsKICAgICAg
ICAgfSwKICAgICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHk6OkdyZXllZEJ5RXhlY3V0aW9uKTsK
ICAgICAKICAgICBtX2NvbnN0cmFpbnRTZXQtPmFkZCgKICAgICAgICAgIldzIiwgIldlYWsgU2V0
cyIsCi0gICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yKSB7Ci0gICAgICAg
ICAgICBTZXRSb290TWFya1JlYXNvblNjb3BlIHJvb3RTY29wZShzbG90VmlzaXRvciwgU2xvdFZp
c2l0b3I6OlJvb3RNYXJrUmVhc29uOjpXZWFrU2V0cyk7Ci0gICAgICAgICAgICBtX29iamVjdFNw
YWNlLnZpc2l0V2Vha1NldHMoc2xvdFZpc2l0b3IpOworICAgICAgICBbdGhpc10gKEFic3RyYWN0
U2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsKKyAgICAgICAgICAgIFNldFJvb3RNYXJrUmVhc29uU2Nv
cGUgcm9vdFNjb3BlKHZpc2l0b3IsIEFic3RyYWN0U2xvdFZpc2l0b3I6OlJvb3RNYXJrUmVhc29u
OjpXZWFrU2V0cyk7CisgICAgICAgICAgICBtX29iamVjdFNwYWNlLnZpc2l0V2Vha1NldHMxKHZp
c2l0b3IpOwogICAgICAgICB9LAogICAgICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eTo6R3JleWVk
QnlNYXJraW5nKTsKICAgICAKICAgICBtX2NvbnN0cmFpbnRTZXQtPmFkZCgKICAgICAgICAgIk8i
LCAiT3V0cHV0IiwKLSAgICAgICAgW10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvcikgewotICAg
ICAgICAgICAgVk0mIHZtID0gc2xvdFZpc2l0b3Iudm0oKTsKKyAgICAgICAgW10gKEFic3RyYWN0
U2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsKKyAgICAgICAgICAgIFZNJiB2bSA9IHZpc2l0b3Iudm0o
KTsKIAotICAgICAgICAgICAgYXV0byBjYWxsT3V0cHV0Q29uc3RyYWludCA9IFtdIChTbG90Vmlz
aXRvciYgc2xvdFZpc2l0b3IsIEhlYXBDZWxsKiBoZWFwQ2VsbCwgSGVhcENlbGw6OktpbmQpIHsK
LSAgICAgICAgICAgICAgICBTZXRSb290TWFya1JlYXNvblNjb3BlIHJvb3RTY29wZShzbG90Vmlz
aXRvciwgU2xvdFZpc2l0b3I6OlJvb3RNYXJrUmVhc29uOjpPdXRwdXQpOwotICAgICAgICAgICAg
ICAgIFZNJiB2bSA9IHNsb3RWaXNpdG9yLnZtKCk7CisgICAgICAgICAgICBhdXRvIGNhbGxPdXRw
dXRDb25zdHJhaW50ID0gW10gKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIEhlYXBDZWxs
KiBoZWFwQ2VsbCwgSGVhcENlbGw6OktpbmQpIHsKKyAgICAgICAgICAgICAgICBTZXRSb290TWFy
a1JlYXNvblNjb3BlIHJvb3RTY29wZSh2aXNpdG9yLCBBYnN0cmFjdFNsb3RWaXNpdG9yOjpSb290
TWFya1JlYXNvbjo6T3V0cHV0KTsKKyAgICAgICAgICAgICAgICBWTSYgdm0gPSB2aXNpdG9yLnZt
KCk7CiAgICAgICAgICAgICAgICAgSlNDZWxsKiBjZWxsID0gc3RhdGljX2Nhc3Q8SlNDZWxsKj4o
aGVhcENlbGwpOwotICAgICAgICAgICAgICAgIGNlbGwtPm1ldGhvZFRhYmxlKHZtKS0+dmlzaXRP
dXRwdXRDb25zdHJhaW50cyhjZWxsLCBzbG90VmlzaXRvcik7CisgICAgICAgICAgICAgICAgY2Vs
bC0+bWV0aG9kVGFibGUodm0pLT52aXNpdE91dHB1dENvbnN0cmFpbnRzKGNlbGwsIHZpc2l0b3Ip
OwogICAgICAgICAgICAgfTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgYXV0byBhZGQgPSBb
Jl0gKGF1dG8mIHNldCkgewotICAgICAgICAgICAgICAgIHNsb3RWaXNpdG9yLmFkZFBhcmFsbGVs
Q29uc3RyYWludFRhc2soc2V0LmZvckVhY2hNYXJrZWRDZWxsSW5QYXJhbGxlbChjYWxsT3V0cHV0
Q29uc3RyYWludCkpOworICAgICAgICAgICAgICAgIHZpc2l0b3IuYWRkUGFyYWxsZWxDb25zdHJh
aW50VGFzayhzZXQuZm9yRWFjaE1hcmtlZENlbGxJblBhcmFsbGVsKGNhbGxPdXRwdXRDb25zdHJh
aW50KSk7CiAgICAgICAgICAgICB9OwogICAgICAgICAgICAgCiAgICAgICAgICAgICBhZGQodm0u
ZXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZXNXaXRoQ29uc3RyYWludHMpOwpAQCAtMjgzMiwyMiAr
MjgzMywyMiBAQCB2b2lkIEhlYXA6OmFkZENvcmVDb25zdHJhaW50cygpCiAgICAgaWYgKE9wdGlv
bnM6OnVzZUpJVCgpKSB7CiAgICAgICAgIG1fY29uc3RyYWludFNldC0+YWRkKAogICAgICAgICAg
ICAgIkR3IiwgIkRGRyBXb3JrbGlzdHMiLAotICAgICAgICAgICAgW3RoaXNdIChTbG90VmlzaXRv
ciYgc2xvdFZpc2l0b3IpIHsKLSAgICAgICAgICAgICAgICBTZXRSb290TWFya1JlYXNvblNjb3Bl
IHJvb3RTY29wZShzbG90VmlzaXRvciwgU2xvdFZpc2l0b3I6OlJvb3RNYXJrUmVhc29uOjpERkdX
b3JrTGlzdHMpOworICAgICAgICAgICAgW3RoaXNdIChBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNp
dG9yKSB7CisgICAgICAgICAgICAgICAgU2V0Um9vdE1hcmtSZWFzb25TY29wZSByb290U2NvcGUo
dmlzaXRvciwgQWJzdHJhY3RTbG90VmlzaXRvcjo6Um9vdE1hcmtSZWFzb246OkRGR1dvcmtMaXN0
cyk7CiAKICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBERkc6Om51bWJlck9mV29y
a2xpc3RzKCk7IGktLTspCi0gICAgICAgICAgICAgICAgICAgIERGRzo6ZXhpc3RpbmdXb3JrbGlz
dEZvckluZGV4KGkpLnZpc2l0V2Vha1JlZmVyZW5jZXMoc2xvdFZpc2l0b3IpOworICAgICAgICAg
ICAgICAgICAgICBERkc6OmV4aXN0aW5nV29ya2xpc3RGb3JJbmRleChpKS52aXNpdFdlYWtSZWZl
cmVuY2VzKHZpc2l0b3IpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIC8vIEZJ
WE1FOiBUaGlzIGlzIGFsbW9zdCBjZXJ0YWlubHkgdW5uZWNlc3NhcnkuCiAgICAgICAgICAgICAg
ICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NjgyOQogICAg
ICAgICAgICAgICAgIERGRzo6aXRlcmF0ZUNvZGVCbG9ja3NGb3JHQygKICAgICAgICAgICAgICAg
ICAgICAgbV92bSwKICAgICAgICAgICAgICAgICAgICAgWyZdIChDb2RlQmxvY2sqIGNvZGVCbG9j
aykgewotICAgICAgICAgICAgICAgICAgICAgICAgc2xvdFZpc2l0b3IuYXBwZW5kVW5iYXJyaWVy
ZWQoY29kZUJsb2NrKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kVW5i
YXJyaWVyZWQoY29kZUJsb2NrKTsKICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAg
ICAgICAgCiAgICAgICAgICAgICAgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkgPT0gR0NMb2dnaW5n
OjpWZXJib3NlKQotICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJERkcgV29ya2xpc3RzOlxu
Iiwgc2xvdFZpc2l0b3IpOworICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJERkcgV29ya2xp
c3RzOlxuIiwgdmlzaXRvcik7CiAgICAgICAgICAgICB9LAogICAgICAgICAgICAgQ29uc3RyYWlu
dFZvbGF0aWxpdHk6OkdyZXllZEJ5TWFya2luZyk7CiAgICAgfQpAQCAtMjg1NSwxNCArMjg1Niwx
NCBAQCB2b2lkIEhlYXA6OmFkZENvcmVDb25zdHJhaW50cygpCiAgICAgCiAgICAgbV9jb25zdHJh
aW50U2V0LT5hZGQoCiAgICAgICAgICJDYiIsICJDb2RlQmxvY2tzIiwKLSAgICAgICAgW3RoaXNd
IChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IpIHsKLSAgICAgICAgICAgIFNldFJvb3RNYXJrUmVh
c29uU2NvcGUgcm9vdFNjb3BlKHNsb3RWaXNpdG9yLCBTbG90VmlzaXRvcjo6Um9vdE1hcmtSZWFz
b246OkNvZGVCbG9ja3MpOworICAgICAgICBbdGhpc10gKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZp
c2l0b3IpIHsKKyAgICAgICAgICAgIFNldFJvb3RNYXJrUmVhc29uU2NvcGUgcm9vdFNjb3BlKHZp
c2l0b3IsIEFic3RyYWN0U2xvdFZpc2l0b3I6OlJvb3RNYXJrUmVhc29uOjpDb2RlQmxvY2tzKTsK
ICAgICAgICAgICAgIGl0ZXJhdGVFeGVjdXRpbmdBbmRDb21waWxpbmdDb2RlQmxvY2tzV2l0aG91
dEhvbGRpbmdMb2NrcygKICAgICAgICAgICAgICAgICBbJl0gKENvZGVCbG9jayogY29kZUJsb2Nr
KSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIFZpc2l0IHRoZSBDb2RlQmxvY2sgYXMgYSBjb25z
dHJhaW50IG9ubHkgaWYgaXQncyBibGFjay4KICAgICAgICAgICAgICAgICAgICAgaWYgKGlzTWFy
a2VkKGNvZGVCbG9jaykKICAgICAgICAgICAgICAgICAgICAgICAgICYmIGNvZGVCbG9jay0+Y2Vs
bFN0YXRlKCkgPT0gQ2VsbFN0YXRlOjpQb3NzaWJseUJsYWNrKQotICAgICAgICAgICAgICAgICAg
ICAgICAgc2xvdFZpc2l0b3IudmlzaXRBc0NvbnN0cmFpbnQoY29kZUJsb2NrKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHZpc2l0b3IudmlzaXRBc0NvbnN0cmFpbnQoY29kZUJsb2NrKTsKICAg
ICAgICAgICAgICAgICB9KTsKICAgICAgICAgfSwKICAgICAgICAgQ29uc3RyYWludFZvbGF0aWxp
dHk6OlNlbGRvbUdyZXllZCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Jc29D
ZWxsU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvQ2Vs
bFNldC5oCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9J
c29DZWxsU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDcgQEAKIAogbmFtZXNwYWNl
IEpTQyB7CiAKK2NsYXNzIEFic3RyYWN0U2xvdFZpc2l0b3I7CiBjbGFzcyBIZWFwQ2VsbDsKIGNs
YXNzIElzb1N1YnNwYWNlOwogCkBAIC01OSw3ICs2MCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGZv
ckVhY2hNYXJrZWRDZWxsKGNvbnN0IEZ1bmMmKTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1
bmM+Ci0gICAgUmVmPFNoYXJlZFRhc2s8dm9pZChTbG90VmlzaXRvciYpPj4gZm9yRWFjaE1hcmtl
ZENlbGxJblBhcmFsbGVsKGNvbnN0IEZ1bmMmKTsKKyAgICBSZWY8U2hhcmVkVGFzazx2b2lkKEFi
c3RyYWN0U2xvdFZpc2l0b3ImKT4+IGZvckVhY2hNYXJrZWRDZWxsSW5QYXJhbGxlbChjb25zdCBG
dW5jJik7CiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KICAgICB2b2lkIGZvckVh
Y2hMaXZlQ2VsbChjb25zdCBGdW5jJik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9Jc29DZWxsU2V0SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0lzb0NlbGxTZXRJbmxpbmVzLmgJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0lzb0NlbGxTZXRJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTkyLDkgKzkyLDkgQEAgdm9pZCBJc29DZWxsU2V0Ojpmb3JFYWNoTWFya2VkQ2VsbChjb25zdAog
fQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgotUmVmPFNoYXJlZFRhc2s8dm9pZChTbG90Vmlz
aXRvciYpPj4gSXNvQ2VsbFNldDo6Zm9yRWFjaE1hcmtlZENlbGxJblBhcmFsbGVsKGNvbnN0IEZ1
bmMmIGZ1bmMpCitSZWY8U2hhcmVkVGFzazx2b2lkKEFic3RyYWN0U2xvdFZpc2l0b3ImKT4+IElz
b0NlbGxTZXQ6OmZvckVhY2hNYXJrZWRDZWxsSW5QYXJhbGxlbChjb25zdCBGdW5jJiBmdW5jKQog
ewotICAgIGNsYXNzIFRhc2sgZmluYWwgOiBwdWJsaWMgU2hhcmVkVGFzazx2b2lkKFNsb3RWaXNp
dG9yJik+IHsKKyAgICBjbGFzcyBUYXNrIGZpbmFsIDogcHVibGljIFNoYXJlZFRhc2s8dm9pZChB
YnN0cmFjdFNsb3RWaXNpdG9yJik+IHsKICAgICBwdWJsaWM6CiAgICAgICAgIFRhc2soSXNvQ2Vs
bFNldCYgc2V0LCBjb25zdCBGdW5jJiBmdW5jKQogICAgICAgICAgICAgOiBtX3NldChzZXQpCkBA
IC0xMDMsNyArMTAzLDcgQEAgUmVmPFNoYXJlZFRhc2s8dm9pZChTbG90VmlzaXRvciYpPj4gSXNv
QwogICAgICAgICB7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIHZvaWQgcnVuKFNsb3RW
aXNpdG9yJiB2aXNpdG9yKSBmaW5hbAorICAgICAgICB2b2lkIHJ1bihBYnN0cmFjdFNsb3RWaXNp
dG9yJiB2aXNpdG9yKSBmaW5hbAogICAgICAgICB7CiAgICAgICAgICAgICB3aGlsZSAoTWFya2Vk
QmxvY2s6OkhhbmRsZSogaGFuZGxlID0gbV9ibG9ja1NvdXJjZS0+cnVuKCkpIHsKICAgICAgICAg
ICAgICAgICB1bnNpZ25lZCBibG9ja0luZGV4ID0gaGFuZGxlLT5pbmRleCgpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSklUU3R1YlJvdXRpbmVTZXQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0pJVFN0dWJSb3V0aW5lU2V0LmNwcAkocmV2
aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSklUU3R1YlJvdXRp
bmVTZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjgsMTcgKzEyOCwyMiBAQCB2b2lkIEpJVFN0
dWJSb3V0aW5lU2V0OjpkZWxldGVVbm1hcmtlZEplCiAgICAgbV9yb3V0aW5lcy5zaHJpbmsoZHN0
SW5kZXgpOwogfQogCi12b2lkIEpJVFN0dWJSb3V0aW5lU2V0Ojp0cmFjZU1hcmtlZFN0dWJSb3V0
aW5lcyhTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4K
Ky8vdm9pZCBKSVRTdHViUm91dGluZVNldDo6dHJhY2VNYXJrZWRTdHViUm91dGluZXMoVmlzaXRv
ciYgdmlzaXRvcikKK3ZvaWQgSklUU3R1YlJvdXRpbmVTZXQ6OnRyYWNlTWFya2VkU3R1YlJvdXRp
bmVzMShBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGZvciAoYXV0byYgZW50
cnkgOiBtX3JvdXRpbmVzKSB7CiAgICAgICAgIEdDQXdhcmVKSVRTdHViUm91dGluZSogcm91dGlu
ZSA9IGVudHJ5LnJvdXRpbmU7CiAgICAgICAgIGlmICghcm91dGluZS0+bV9tYXlCZUV4ZWN1dGlu
ZykKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAKLSAgICAgICAgcm91dGluZS0+bWFy
a1JlcXVpcmVkT2JqZWN0cyh2aXNpdG9yKTsKKyAgICAgICAgcm91dGluZS0+bWFya1JlcXVpcmVk
T2JqZWN0czEodmlzaXRvcik7CiAgICAgfQogfQogCisvL3RlbXBsYXRlIHZvaWQgSklUU3R1YlJv
dXRpbmVTZXQ6OnRyYWNlTWFya2VkU3R1YlJvdXRpbmVzKFNsb3RWaXNpdG9yJik7CisvL3RlbXBs
YXRlIHZvaWQgSklUU3R1YlJvdXRpbmVTZXQ6OnRyYWNlTWFya2VkU3R1YlJvdXRpbmVzKERlYnVn
U2xvdFZpc2l0b3ImKTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBFTkFCTEUo
SklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSklUU3R1YlJvdXRpbmVTZXQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9KSVRTdHViUm91dGlu
ZVNldC5oCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9K
SVRTdHViUm91dGluZVNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw4ICszNSw5IEBAIHVzaW5n
IFdURjo6UmFuZ2U7CiAKIG5hbWVzcGFjZSBKU0MgewogCitjbGFzcyBBYnN0cmFjdFNsb3RWaXNp
dG9yOwogY2xhc3MgR0NBd2FyZUpJVFN0dWJSb3V0aW5lOwotY2xhc3MgU2xvdFZpc2l0b3I7Cisv
L2NsYXNzIFNsb3RWaXNpdG9yOwogCiAjaWYgRU5BQkxFKEpJVCkKIApAQCAtNjMsOCArNjQsOSBA
QCBwdWJsaWM6CiAgICAgdm9pZCBwcmVwYXJlRm9yQ29uc2VydmF0aXZlU2NhbigpOwogICAgIAog
ICAgIHZvaWQgZGVsZXRlVW5tYXJrZWRKZXR0aXNvbmVkU3R1YlJvdXRpbmVzKCk7Ci0gICAgCi0g
ICAgdm9pZCB0cmFjZU1hcmtlZFN0dWJSb3V0aW5lcyhTbG90VmlzaXRvciYpOworCisvLyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIHRyYWNlTWFya2VkU3R1YlJvdXRpbmVzKFZp
c2l0b3ImKTsKKyAgICB2b2lkIHRyYWNlTWFya2VkU3R1YlJvdXRpbmVzMShBYnN0cmFjdFNsb3RW
aXNpdG9yJik7CiAgICAgCiBwcml2YXRlOgogICAgIHZvaWQgbWFya1Nsb3codWludHB0cl90IGFk
ZHJlc3MpOwpAQCAtOTIsNyArOTQsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBtYXJrKHZvaWQqKSB7
IH0KICAgICB2b2lkIHByZXBhcmVGb3JDb25zZXJ2YXRpdmVTY2FuKCkgeyB9CiAgICAgdm9pZCBk
ZWxldGVVbm1hcmtlZEpldHRpc29uZWRTdHViUm91dGluZXMoKSB7IH0KLSAgICB2b2lkIHRyYWNl
TWFya2VkU3R1YlJvdXRpbmVzKFNsb3RWaXNpdG9yJikgeyB9CisvLyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBWaXNpdG9yPiB2b2lkIHRyYWNlTWFya2VkU3R1YlJvdXRpbmVzKFZpc2l0b3ImKSB7IH0K
KyAgICB2b2lkIHRyYWNlTWFya2VkU3R1YlJvdXRpbmVzMShBYnN0cmFjdFNsb3RWaXNpdG9yJikg
eyB9CiB9OwogCiAjZW5kaWYgLy8gIUVOQUJMRShKSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9NYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQuY3Bw
CShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3Rh
Y2tNZXJnaW5nQ29uc3RyYWludC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1LDcgKzI1LDYgQEAK
IAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIk1hcmtTdGFja01lcmdpbmdDb25zdHJh
aW50LmgiCi0KICNpbmNsdWRlICJHQ1NlZ21lbnRlZEFycmF5SW5saW5lcy5oIgogI2luY2x1ZGUg
IkpTQ0lubGluZXMuaCIKIApAQCAtNDEsMTIgKzQwLDEyIEBAIE1hcmtTdGFja01lcmdpbmdDb25z
dHJhaW50Ojp+TWFya1N0YWNrTWUKIHsKIH0KIAotZG91YmxlIE1hcmtTdGFja01lcmdpbmdDb25z
dHJhaW50OjpxdWlja1dvcmtFc3RpbWF0ZShTbG90VmlzaXRvciYpCitkb3VibGUgTWFya1N0YWNr
TWVyZ2luZ0NvbnN0cmFpbnQ6OnF1aWNrV29ya0VzdGltYXRlKEFic3RyYWN0U2xvdFZpc2l0b3Im
KQogewogICAgIHJldHVybiBtX2hlYXAubV9tdXRhdG9yTWFya1N0YWNrLT5zaXplKCkgKyBtX2hl
YXAubV9yYWNlTWFya1N0YWNrLT5zaXplKCk7CiB9CiAKLXZvaWQgTWFya1N0YWNrTWVyZ2luZ0Nv
bnN0cmFpbnQ6OnByZXBhcmVUb0V4ZWN1dGVJbXBsKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgU2xv
dFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIE1hcmtTdGFja01lcmdpbmdDb25zdHJhaW50OjpwcmVw
YXJlVG9FeGVjdXRlSW1wbChjb25zdCBBYnN0cmFjdExvY2tlciYsIEFic3RyYWN0U2xvdFZpc2l0
b3ImIHZpc2l0b3IpCiB7CiAgICAgLy8gTG9nZ2luZyB0aGUgd29yayBoZXJlIGVuc3VyZXMgdGhh
dCB0aGUgY29uc3RyYWludCBzb2x2ZXIga25vd3MgdGhhdCBpdCBkb2Vzbid0IG5lZWQgdG8gcHJv
ZHVjZQogICAgIC8vIGFueW1vcmUgd29yay4KQEAgLTU2LDcgKzU1LDcgQEAgdm9pZCBNYXJrU3Rh
Y2tNZXJnaW5nQ29uc3RyYWludDo6cHJlcGFyZQogICAgIGRhdGFMb2dJZihPcHRpb25zOjpsb2dH
QygpLCAiKCIsIHNpemUsICIpIik7CiB9CiAKLXZvaWQgTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFp
bnQ6OmV4ZWN1dGVJbXBsKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBNYXJrU3RhY2tNZXJn
aW5nQ29uc3RyYWludDo6ZXhlY3V0ZUltcGwoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikK
IHsKICAgICBtX2hlYXAubV9tdXRhdG9yTWFya1N0YWNrLT50cmFuc2ZlclRvKHZpc2l0b3IubXV0
YXRvck1hcmtTdGFjaygpKTsKICAgICBtX2hlYXAubV9yYWNlTWFya1N0YWNrLT50cmFuc2ZlclRv
KHZpc2l0b3IubXV0YXRvck1hcmtTdGFjaygpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL01hcmtTdGFja01lcmdpbmdDb25zdHJhaW50LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQuaAkocmV2aXNp
b24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya1N0YWNrTWVyZ2lu
Z0NvbnN0cmFpbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsMTggKzMwLDE4IEBACiBuYW1lc3Bh
Y2UgSlNDIHsKIAogY2xhc3MgSGVhcDsKLWNsYXNzIFNsb3RWaXNpdG9yOworY2xhc3MgQWJzdHJh
Y3RTbG90VmlzaXRvcjsKIAogY2xhc3MgTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQgZmluYWwg
OiBwdWJsaWMgTWFya2luZ0NvbnN0cmFpbnQgewogcHVibGljOgogICAgIE1hcmtTdGFja01lcmdp
bmdDb25zdHJhaW50KEhlYXAmKTsKICAgICB+TWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQoKSBm
aW5hbDsKICAgICAKLSAgICBkb3VibGUgcXVpY2tXb3JrRXN0aW1hdGUoU2xvdFZpc2l0b3ImKSBm
aW5hbDsKKyAgICBkb3VibGUgcXVpY2tXb3JrRXN0aW1hdGUoQWJzdHJhY3RTbG90VmlzaXRvciYp
IGZpbmFsOwogICAgIAogcHJpdmF0ZToKLSAgICB2b2lkIHByZXBhcmVUb0V4ZWN1dGVJbXBsKGNv
bnN0IEFic3RyYWN0TG9ja2VyJiBjb25zdHJhaW50U29sdmluZ0xvY2tlciwgU2xvdFZpc2l0b3Im
KSBmaW5hbDsKLSAgICB2b2lkIGV4ZWN1dGVJbXBsKFNsb3RWaXNpdG9yJikgZmluYWw7CisgICAg
dm9pZCBwcmVwYXJlVG9FeGVjdXRlSW1wbChjb25zdCBBYnN0cmFjdExvY2tlciYgY29uc3RyYWlu
dFNvbHZpbmdMb2NrZXIsIEFic3RyYWN0U2xvdFZpc2l0b3ImKSBmaW5hbDsKKyAgICB2b2lkIGV4
ZWN1dGVJbXBsKEFic3RyYWN0U2xvdFZpc2l0b3ImKSBmaW5hbDsKICAgICAKICAgICBIZWFwJiBt
X2hlYXA7CiB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2su
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5o
CShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRC
bG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNTEsNyArMTUxLDggQEAgcHVibGljOgogICAgICAg
ICAKICAgICAgICAgdm9pZCBzaHJpbmsoKTsKICAgICAgICAgICAgIAotICAgICAgICB2b2lkIHZp
c2l0V2Vha1NldChTbG90VmlzaXRvciYpOworLy8gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZp
c2l0b3I+IHZvaWQgdmlzaXRXZWFrU2V0KFZpc2l0b3ImKTsKKyAgICAgICAgdm9pZCB2aXNpdFdl
YWtTZXQxKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKICAgICAgICAgdm9pZCByZWFwV2Vha1NldCgp
OwogICAgICAgICAgICAgCiAgICAgICAgIC8vIFdoaWxlIGFsbG9jYXRpbmcgZnJvbSBhIGZyZWUg
bGlzdCwgTWFya2VkQmxvY2sgdGVtcG9yYXJpbHkgaGFzIGJvZ3VzCkBAIC00OTgsOSArNDk5LDEx
IEBAIGlubGluZSB2b2lkIE1hcmtlZEJsb2NrOjpIYW5kbGU6OnNocmluaygKICAgICBtX3dlYWtT
ZXQuc2hyaW5rKCk7CiB9CiAKLWlubGluZSB2b2lkIE1hcmtlZEJsb2NrOjpIYW5kbGU6OnZpc2l0
V2Vha1NldChTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRv
cj4KKy8vaW5saW5lIHZvaWQgTWFya2VkQmxvY2s6OkhhbmRsZTo6dmlzaXRXZWFrU2V0KFZpc2l0
b3ImIHZpc2l0b3IpCitpbmxpbmUgdm9pZCBNYXJrZWRCbG9jazo6SGFuZGxlOjp2aXNpdFdlYWtT
ZXQxKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7Ci0gICAgcmV0dXJuIG1fd2Vha1Nl
dC52aXNpdCh2aXNpdG9yKTsKKyAgICByZXR1cm4gbV93ZWFrU2V0LnZpc2l0MSh2aXNpdG9yKTsK
IH0KIAogaW5saW5lIHZvaWQgTWFya2VkQmxvY2s6OkhhbmRsZTo6cmVhcFdlYWtTZXQoKQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkU3BhY2UuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZFNwYWNlLmNwcAkocmV2aXNpb24g
MjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkU3BhY2UuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yNzIsMTAgKzI3MiwxMCBAQCB2b2lkIE1hcmtlZFNwYWNlOjplbmFi
bGVQcmVjaXNlQWxsb2NhdGlvCiAgICAgICAgIG1fcHJlY2lzZUFsbG9jYXRpb25TZXQtPmFkZChh
bGxvY2F0aW9uLT5jZWxsKCkpOwogfQogCi12b2lkIE1hcmtlZFNwYWNlOjp2aXNpdFdlYWtTZXRz
KFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBNYXJrZWRTcGFjZTo6dmlzaXRXZWFrU2V0czEo
QWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBhdXRvIHZpc2l0ID0gWyZdIChX
ZWFrU2V0KiB3ZWFrU2V0KSB7Ci0gICAgICAgIHdlYWtTZXQtPnZpc2l0KHZpc2l0b3IpOworICAg
ICAgICB3ZWFrU2V0LT52aXNpdDEodmlzaXRvcik7CiAgICAgfTsKICAgICAKICAgICBtX25ld0Fj
dGl2ZVdlYWtTZXRzLmZvckVhY2godmlzaXQpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvTWFya2VkU3BhY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9NYXJrZWRTcGFjZS5oCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9NYXJrZWRTcGFjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw2ICszNyw3IEBA
CiAKIG5hbWVzcGFjZSBKU0MgewogCitjbGFzcyBBYnN0cmFjdFNsb3RWaXNpdG9yOyAvLyBtbGFt
IEZJWE1FID8KIGNsYXNzIENvbXBsZXRlU3Vic3BhY2U7CiBjbGFzcyBIZWFwOwogY2xhc3MgSGVh
cENlbGw7CkBAIC0xMDUsNyArMTA2LDcgQEAgcHVibGljOgogICAgIAogICAgIHZvaWQgcHJlcGFy
ZUZvckFsbG9jYXRpb24oKTsKIAotICAgIHZvaWQgdmlzaXRXZWFrU2V0cyhTbG90VmlzaXRvciYp
OworICAgIHZvaWQgdmlzaXRXZWFrU2V0czEoQWJzdHJhY3RTbG90VmlzaXRvciYpOwogICAgIHZv
aWQgcmVhcFdlYWtTZXRzKCk7CiAKICAgICBNYXJrZWRCbG9ja1NldCYgYmxvY2tzKCkgeyByZXR1
cm4gbV9ibG9ja3M7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdD
b25zdHJhaW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9N
YXJraW5nQ29uc3RyYWludC5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYs
NiArMjYsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIk1hcmtpbmdDb25zdHJh
aW50LmgiCiAKKyNpbmNsdWRlICJBYnN0cmFjdFNsb3RWaXNpdG9ySW5saW5lcy5oIgogI2luY2x1
ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJWaXNpdENvdW50ZXIuaCIKIApAQCAtNTEsNyAr
NTIsNyBAQCB2b2lkIE1hcmtpbmdDb25zdHJhaW50OjpyZXNldFN0YXRzKCkKICAgICBtX2xhc3RW
aXNpdENvdW50ID0gMDsKIH0KIAotdm9pZCBNYXJraW5nQ29uc3RyYWludDo6ZXhlY3V0ZShTbG90
VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgTWFya2luZ0NvbnN0cmFpbnQ6OmV4ZWN1dGUoQWJzdHJh
Y3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBWaXNpdENvdW50ZXIgdmlzaXRDb3VudGVy
KHZpc2l0b3IpOwogICAgIGV4ZWN1dGVJbXBsKHZpc2l0b3IpOwpAQCAtNjAsMTcgKzYxLDE3IEBA
IHZvaWQgTWFya2luZ0NvbnN0cmFpbnQ6OmV4ZWN1dGUoU2xvdFZpc2kKICAgICAgICAgZGF0YUxv
ZygiKCIsIGFiYnJldmlhdGVkTmFtZSgpLCAiIHZpc2l0ZWQgIiwgdmlzaXRDb3VudGVyLnZpc2l0
Q291bnQoKSwgIiBpbiBleGVjdXRlKSIpOwogfQogCi1kb3VibGUgTWFya2luZ0NvbnN0cmFpbnQ6
OnF1aWNrV29ya0VzdGltYXRlKFNsb3RWaXNpdG9yJikKK2RvdWJsZSBNYXJraW5nQ29uc3RyYWlu
dDo6cXVpY2tXb3JrRXN0aW1hdGUoQWJzdHJhY3RTbG90VmlzaXRvciYpCiB7CiAgICAgcmV0dXJu
IDA7CiB9CiAKLWRvdWJsZSBNYXJraW5nQ29uc3RyYWludDo6d29ya0VzdGltYXRlKFNsb3RWaXNp
dG9yJiB2aXNpdG9yKQorZG91YmxlIE1hcmtpbmdDb25zdHJhaW50Ojp3b3JrRXN0aW1hdGUoQWJz
dHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICByZXR1cm4gbGFzdFZpc2l0Q291bnQo
KSArIHF1aWNrV29ya0VzdGltYXRlKHZpc2l0b3IpOwogfQogCi12b2lkIE1hcmtpbmdDb25zdHJh
aW50OjpwcmVwYXJlVG9FeGVjdXRlKGNvbnN0IEFic3RyYWN0TG9ja2VyJiBjb25zdHJhaW50U29s
dmluZ0xvY2tlciwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIE1hcmtpbmdDb25zdHJhaW50
OjpwcmVwYXJlVG9FeGVjdXRlKGNvbnN0IEFic3RyYWN0TG9ja2VyJiBjb25zdHJhaW50U29sdmlu
Z0xvY2tlciwgQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBkYXRhTG9nSWYo
T3B0aW9uczo6bG9nR0MoKSwgYWJicmV2aWF0ZWROYW1lKCkpOwogICAgIFZpc2l0Q291bnRlciB2
aXNpdENvdW50ZXIodmlzaXRvcik7CkBAIC04MCw3ICs4MSw3IEBAIHZvaWQgTWFya2luZ0NvbnN0
cmFpbnQ6OnByZXBhcmVUb0V4ZWN1dGUKICAgICAgICAgZGF0YUxvZygiKCIsIGFiYnJldmlhdGVk
TmFtZSgpLCAiIHZpc2l0ZWQgIiwgdmlzaXRDb3VudGVyLnZpc2l0Q291bnQoKSwgIiBpbiBwcmVw
YXJlVG9FeGVjdXRlKSIpOwogfQogCi12b2lkIE1hcmtpbmdDb25zdHJhaW50Ojpkb1BhcmFsbGVs
V29yayhTbG90VmlzaXRvciYgdmlzaXRvciwgU2hhcmVkVGFzazx2b2lkKFNsb3RWaXNpdG9yJik+
JiB0YXNrKQordm9pZCBNYXJraW5nQ29uc3RyYWludDo6ZG9QYXJhbGxlbFdvcmsoQWJzdHJhY3RT
bG90VmlzaXRvciYgdmlzaXRvciwgU2hhcmVkVGFzazx2b2lkKEFic3RyYWN0U2xvdFZpc2l0b3Im
KT4mIHRhc2spCiB7CiAgICAgVmlzaXRDb3VudGVyIHZpc2l0Q291bnRlcih2aXNpdG9yKTsKICAg
ICB0YXNrLnJ1bih2aXNpdG9yKTsKQEAgLTkyLDcgKzkzLDcgQEAgdm9pZCBNYXJraW5nQ29uc3Ry
YWludDo6ZG9QYXJhbGxlbFdvcmsoUwogICAgIH0KIH0KIAotdm9pZCBNYXJraW5nQ29uc3RyYWlu
dDo6cHJlcGFyZVRvRXhlY3V0ZUltcGwoY29uc3QgQWJzdHJhY3RMb2NrZXImLCBTbG90VmlzaXRv
ciYpCit2b2lkIE1hcmtpbmdDb25zdHJhaW50OjpwcmVwYXJlVG9FeGVjdXRlSW1wbChjb25zdCBB
YnN0cmFjdExvY2tlciYsIEFic3RyYWN0U2xvdFZpc2l0b3ImKQogewogfQogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50LmgJKHJldmlzaW9u
IDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50
LmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDcgQEAKIG5hbWVzcGFjZSBKU0MgewogCiBj
bGFzcyBNYXJraW5nQ29uc3RyYWludFNldDsKLWNsYXNzIFNsb3RWaXNpdG9yOworY2xhc3MgQWJz
dHJhY3RTbG90VmlzaXRvcjsKIAogY2xhc3MgTWFya2luZ0NvbnN0cmFpbnQgewogICAgIFdURl9N
QUtFX05PTkNPUFlBQkxFKE1hcmtpbmdDb25zdHJhaW50KTsKQEAgLTYwLDE1ICs2MCwxNiBAQCBw
dWJsaWM6CiAgICAgCiAgICAgc2l6ZV90IGxhc3RWaXNpdENvdW50KCkgY29uc3QgeyByZXR1cm4g
bV9sYXN0VmlzaXRDb3VudDsgfQogICAgIAotICAgIHZvaWQgZXhlY3V0ZShTbG90VmlzaXRvciYp
OwotICAgIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIHZpcnR1YWwgZG91YmxlIHF1aWNrV29ya0Vz
dGltYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKTsKKyAgICB2b2lkIGV4ZWN1dGUoQWJzdHJhY3RT
bG90VmlzaXRvciYpOworCisgICAgLy8gRklYTUUgbWxhbQorICAgIEpTX0VYUE9SVF9QUklWQVRF
IHZpcnR1YWwgZG91YmxlIHF1aWNrV29ya0VzdGltYXRlKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZp
c2l0b3IpOwogICAgIAotICAgIGRvdWJsZSB3b3JrRXN0aW1hdGUoU2xvdFZpc2l0b3ImIHZpc2l0
b3IpOworICAgIGRvdWJsZSB3b3JrRXN0aW1hdGUoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRv
cik7CiAgICAgCi0gICAgdm9pZCBwcmVwYXJlVG9FeGVjdXRlKGNvbnN0IEFic3RyYWN0TG9ja2Vy
JiBjb25zdHJhaW50U29sdmluZ0xvY2tlciwgU2xvdFZpc2l0b3ImKTsKKyAgICB2b2lkIHByZXBh
cmVUb0V4ZWN1dGUoY29uc3QgQWJzdHJhY3RMb2NrZXImIGNvbnN0cmFpbnRTb2x2aW5nTG9ja2Vy
LCBBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAgICAgCi0gICAgdm9pZCBkb1BhcmFsbGVsV29yayhT
bG90VmlzaXRvciYsIFNoYXJlZFRhc2s8dm9pZChTbG90VmlzaXRvciYpPiYpOworICAgIHZvaWQg
ZG9QYXJhbGxlbFdvcmsoQWJzdHJhY3RTbG90VmlzaXRvciYsIFNoYXJlZFRhc2s8dm9pZChBYnN0
cmFjdFNsb3RWaXNpdG9yJik+Jik7CiAgICAgCiAgICAgQ29uc3RyYWludFZvbGF0aWxpdHkgdm9s
YXRpbGl0eSgpIGNvbnN0IHsgcmV0dXJuIG1fdm9sYXRpbGl0eTsgfQogICAgIApAQCAtNzYsOCAr
NzcsOCBAQCBwdWJsaWM6CiAgICAgQ29uc3RyYWludFBhcmFsbGVsaXNtIHBhcmFsbGVsaXNtKCkg
Y29uc3QgeyByZXR1cm4gbV9wYXJhbGxlbGlzbTsgfQogCiBwcm90ZWN0ZWQ6Ci0gICAgdmlydHVh
bCB2b2lkIGV4ZWN1dGVJbXBsKFNsb3RWaXNpdG9yJikgPSAwOwotICAgIEpTX0VYUE9SVF9QUklW
QVRFIHZpcnR1YWwgdm9pZCBwcmVwYXJlVG9FeGVjdXRlSW1wbChjb25zdCBBYnN0cmFjdExvY2tl
ciYgY29uc3RyYWludFNvbHZpbmdMb2NrZXIsIFNsb3RWaXNpdG9yJik7CisgICAgdmlydHVhbCB2
b2lkIGV4ZWN1dGVJbXBsKEFic3RyYWN0U2xvdFZpc2l0b3ImKSA9IDA7CisgICAgSlNfRVhQT1JU
X1BSSVZBVEUgdmlydHVhbCB2b2lkIHByZXBhcmVUb0V4ZWN1dGVJbXBsKGNvbnN0IEFic3RyYWN0
TG9ja2VyJiBjb25zdHJhaW50U29sdmluZ0xvY2tlciwgQWJzdHJhY3RTbG90VmlzaXRvciYpOwog
ICAgIAogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgTWFya2luZ0NvbnN0cmFpbnRTZXQ7IC8v
IFNvIGl0IGNhbiBzZXQgbV9pbmRleC4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L01hcmtpbmdDb25zdHJhaW50U2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludFNldC5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50U2V0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNjMsNyArNjMsNyBAQCB2b2lkIE1hcmtpbmdDb25zdHJhaW50U2V0Ojpk
aWRTdGFydE1hcmtpCiAgICAgbV9pdGVyYXRpb24gPSAxOwogfQogCi12b2lkIE1hcmtpbmdDb25z
dHJhaW50U2V0OjphZGQoQ1N0cmluZyBhYmJyZXZpYXRlZE5hbWUsIENTdHJpbmcgbmFtZSwgOjpG
dW5jdGlvbjx2b2lkKFNsb3RWaXNpdG9yJik+IGZ1bmN0aW9uLCBDb25zdHJhaW50Vm9sYXRpbGl0
eSB2b2xhdGlsaXR5LCBDb25zdHJhaW50Q29uY3VycmVuY3kgY29uY3VycmVuY3ksIENvbnN0cmFp
bnRQYXJhbGxlbGlzbSBwYXJhbGxlbGlzbSkKK3ZvaWQgTWFya2luZ0NvbnN0cmFpbnRTZXQ6OmFk
ZChDU3RyaW5nIGFiYnJldmlhdGVkTmFtZSwgQ1N0cmluZyBuYW1lLCA6OkZ1bmN0aW9uPHZvaWQo
QWJzdHJhY3RTbG90VmlzaXRvciYpPiBmdW5jdGlvbiwgQ29uc3RyYWludFZvbGF0aWxpdHkgdm9s
YXRpbGl0eSwgQ29uc3RyYWludENvbmN1cnJlbmN5IGNvbmN1cnJlbmN5LCBDb25zdHJhaW50UGFy
YWxsZWxpc20gcGFyYWxsZWxpc20pCiB7CiAgICAgYWRkKG1ha2VVbmlxdWU8U2ltcGxlTWFya2lu
Z0NvbnN0cmFpbnQ+KFdURk1vdmUoYWJicmV2aWF0ZWROYW1lKSwgV1RGTW92ZShuYW1lKSwgV1RG
TW92ZShmdW5jdGlvbiksIHZvbGF0aWxpdHksIGNvbmN1cnJlbmN5LCBwYXJhbGxlbGlzbSkpOwog
fQpAQCAtNzgsMTQgKzc4LDE0IEBAIHZvaWQgTWFya2luZ0NvbnN0cmFpbnRTZXQ6OmFkZCgKICAg
ICBtX3NldC5hcHBlbmQoV1RGTW92ZShjb25zdHJhaW50KSk7CiB9CiAKLWJvb2wgTWFya2luZ0Nv
bnN0cmFpbnRTZXQ6OmV4ZWN1dGVDb252ZXJnZW5jZShTbG90VmlzaXRvciYgdmlzaXRvcikKK2Jv
b2wgTWFya2luZ0NvbnN0cmFpbnRTZXQ6OmV4ZWN1dGVDb252ZXJnZW5jZShBYnN0cmFjdFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQogewogICAgIGJvb2wgcmVzdWx0ID0gZXhlY3V0ZUNvbnZlcmdlbmNl
SW1wbCh2aXNpdG9yKTsKICAgICBkYXRhTG9nSWYoT3B0aW9uczo6bG9nR0MoKSwgIiAiKTsKICAg
ICByZXR1cm4gcmVzdWx0OwogfQogCi1ib29sIE1hcmtpbmdDb25zdHJhaW50U2V0Ojppc1dhdmVm
cm9udEFkdmFuY2luZyhTbG90VmlzaXRvciYgdmlzaXRvcikKK2Jvb2wgTWFya2luZ0NvbnN0cmFp
bnRTZXQ6OmlzV2F2ZWZyb250QWR2YW5jaW5nKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3Ip
CiB7CiAgICAgZm9yIChNYXJraW5nQ29uc3RyYWludCogb3V0Z3Jvd3RoIDogbV9vdXRncm93dGhz
KSB7CiAgICAgICAgIGlmIChvdXRncm93dGgtPndvcmtFc3RpbWF0ZSh2aXNpdG9yKSkKQEAgLTk0
LDcgKzk0LDcgQEAgYm9vbCBNYXJraW5nQ29uc3RyYWludFNldDo6aXNXYXZlZnJvbnRBZAogICAg
IHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBNYXJraW5nQ29uc3RyYWludFNldDo6ZXhlY3V0ZUNv
bnZlcmdlbmNlSW1wbChTbG90VmlzaXRvciYgdmlzaXRvcikKK2Jvb2wgTWFya2luZ0NvbnN0cmFp
bnRTZXQ6OmV4ZWN1dGVDb252ZXJnZW5jZUltcGwoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRv
cikKIHsKICAgICBTdXBlclNhbXBsZXJTY29wZSBzdXBlclNhbXBsZXJTY29wZShmYWxzZSk7CiAg
ICAgTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXIgc29sdmVyKCp0aGlzKTsKQEAgLTE2Niw3ICsxNjYs
NyBAQCBib29sIE1hcmtpbmdDb25zdHJhaW50U2V0OjpleGVjdXRlQ29udmVyCiAgICAgcmV0dXJu
ICFzb2x2ZXIuZGlkVmlzaXRTb21ldGhpbmcoKTsKIH0KIAotdm9pZCBNYXJraW5nQ29uc3RyYWlu
dFNldDo6ZXhlY3V0ZUFsbChTbG90VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgTWFya2luZ0NvbnN0
cmFpbnRTZXQ6OmV4ZWN1dGVBbGwoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAg
ICBmb3IgKGF1dG8mIGNvbnN0cmFpbnQgOiBtX3NldCkKICAgICAgICAgY29uc3RyYWludC0+ZXhl
Y3V0ZSh2aXNpdG9yKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdD
b25zdHJhaW50U2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
TWFya2luZ0NvbnN0cmFpbnRTZXQuaAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnRTZXQuaAkod29ya2luZyBjb3B5KQpAQCAt
NDYsMTQgKzQ2LDE0IEBAIHB1YmxpYzoKICAgICB2b2lkIGFkZCgKICAgICAgICAgQ1N0cmluZyBh
YmJyZXZpYXRlZE5hbWUsCiAgICAgICAgIENTdHJpbmcgbmFtZSwKLSAgICAgICAgOjpGdW5jdGlv
bjx2b2lkKFNsb3RWaXNpdG9yJik+LAorICAgICAgICA6OkZ1bmN0aW9uPHZvaWQoQWJzdHJhY3RT
bG90VmlzaXRvciYpPiwKICAgICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHksCiAgICAgICAgIENv
bnN0cmFpbnRDb25jdXJyZW5jeSA9IENvbnN0cmFpbnRDb25jdXJyZW5jeTo6Q29uY3VycmVudCwK
ICAgICAgICAgQ29uc3RyYWludFBhcmFsbGVsaXNtID0gQ29uc3RyYWludFBhcmFsbGVsaXNtOjpT
ZXF1ZW50aWFsKTsKICAgICAKICAgICB2b2lkIGFkZCgKICAgICAgICAgQ1N0cmluZyBhYmJyZXZp
YXRlZE5hbWUsIENTdHJpbmcgbmFtZSwKLSAgICAgICAgOjpGdW5jdGlvbjx2b2lkKFNsb3RWaXNp
dG9yJik+IGZ1bmMsCisgICAgICAgIDo6RnVuY3Rpb248dm9pZChBYnN0cmFjdFNsb3RWaXNpdG9y
Jik+IGZ1bmMsCiAgICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5IHZvbGF0aWxpdHksCiAgICAg
ICAgIENvbnN0cmFpbnRQYXJhbGxlbGlzbSBwYXJhbGxlbGlzbSkKICAgICB7CkBAIC02NCwyMCAr
NjQsMjAgQEAgcHVibGljOgogICAgIAogICAgIC8vIEFzc3VtaW5nIHRoYXQgdGhlIG1hcmsgc3Rh
Y2tzIGFyZSBhbGwgZW1wdHksIHRoaXMgd2lsbCBnaXZlIHlvdSBhIGd1ZXNzIGFzIHRvIHdoZXRo
ZXIgb3IKICAgICAvLyBub3QgdGhlIHdhdmVmcm9udCBpcyBhZHZhbmNpbmcuCi0gICAgYm9vbCBp
c1dhdmVmcm9udEFkdmFuY2luZyhTbG90VmlzaXRvciYpOwotICAgIGJvb2wgaXNXYXZlZnJvbnRS
ZXRyZWF0aW5nKFNsb3RWaXNpdG9yJiB2aXNpdG9yKSB7IHJldHVybiAhaXNXYXZlZnJvbnRBZHZh
bmNpbmcodmlzaXRvcik7IH0KKyAgICBib29sIGlzV2F2ZWZyb250QWR2YW5jaW5nKEFic3RyYWN0
U2xvdFZpc2l0b3ImKTsKKyAgICBib29sIGlzV2F2ZWZyb250UmV0cmVhdGluZyhBYnN0cmFjdFNs
b3RWaXNpdG9yJiB2aXNpdG9yKSB7IHJldHVybiAhaXNXYXZlZnJvbnRBZHZhbmNpbmcodmlzaXRv
cik7IH0KICAgICAKICAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhpcyBleGVjdXRlZCBhbGwgY29u
c3RyYWludHMgYW5kIG5vbmUgb2YgdGhlbSBwcm9kdWNlZCBuZXcgd29yay4gVGhpcwogICAgIC8v
IGFzc3VtZXMgdGhhdCB5b3UndmUgYWxyYWVkeSB2aXNpdGVkIHJvb3RzIGFuZCBkcmFpbmVkIGZy
b20gdGhlcmUuCi0gICAgYm9vbCBleGVjdXRlQ29udmVyZ2VuY2UoU2xvdFZpc2l0b3ImKTsKKyAg
ICBib29sIGV4ZWN1dGVDb252ZXJnZW5jZShBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAgICAgCiAg
ICAgLy8gU2ltcGx5IHJ1bnMgYWxsIGNvbnN0cmFpbnRzIHdpdGhvdXQgYW55IHNoZW5hbmlnYW5z
LgotICAgIHZvaWQgZXhlY3V0ZUFsbChTbG90VmlzaXRvciYpOworICAgIHZvaWQgZXhlY3V0ZUFs
bChBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAgICAgCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFz
cyBNYXJraW5nQ29uc3RyYWludFNvbHZlcjsKICAgICAKLSAgICBib29sIGV4ZWN1dGVDb252ZXJn
ZW5jZUltcGwoU2xvdFZpc2l0b3ImKTsKKyAgICBib29sIGV4ZWN1dGVDb252ZXJnZW5jZUltcGwo
QWJzdHJhY3RTbG90VmlzaXRvciYpOwogICAgIAogICAgIEhlYXAmIG1faGVhcDsKICAgICBCaXRW
ZWN0b3IgbV91bmV4ZWN1dGVkUm9vdHM7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9NYXJraW5nQ29uc3RyYWludFNvbHZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXIuY3BwCShyZXZpc2lvbiAyNzE0
NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludFNvbHZl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDcgKzMzLDcgQEAgbmFtZXNwYWNlIEpTQyB7IAog
CiBNYXJraW5nQ29uc3RyYWludFNvbHZlcjo6TWFya2luZ0NvbnN0cmFpbnRTb2x2ZXIoTWFya2lu
Z0NvbnN0cmFpbnRTZXQmIHNldCkKICAgICA6IG1faGVhcChzZXQubV9oZWFwKQotICAgICwgbV9t
YWluVmlzaXRvcihtX2hlYXAuY29sbGVjdG9yU2xvdFZpc2l0b3IoKSkKKyAgICAsIG1fbWFpblZp
c2l0b3IobV9oZWFwLmNvbGxlY3RvclNsb3RWaXNpdG9yKCkpIC8vIG1sYW0gRklYTUUgbmVlZCBz
dXBwb3J0IGZvciBEZWJ1Z1Nsb3RWaXNpdG9yCiAgICAgLCBtX3NldChzZXQpCiB7CiAgICAgbV9o
ZWFwLmZvckVhY2hTbG90VmlzaXRvcigKQEAgLTE1MCwxMyArMTUwLDEzIEBAIHZvaWQgTWFya2lu
Z0NvbnN0cmFpbnRTb2x2ZXI6OmV4ZWN1dGUoTWEKICAgICBtX2V4ZWN1dGVkLnNldChjb25zdHJh
aW50LmluZGV4KCkpOwogfQogCi12b2lkIE1hcmtpbmdDb25zdHJhaW50U29sdmVyOjphZGRQYXJh
bGxlbFRhc2soUmVmUHRyPFNoYXJlZFRhc2s8dm9pZChTbG90VmlzaXRvciYpPj4gdGFzaywgTWFy
a2luZ0NvbnN0cmFpbnQmIGNvbnN0cmFpbnQpCit2b2lkIE1hcmtpbmdDb25zdHJhaW50U29sdmVy
OjphZGRQYXJhbGxlbFRhc2soUmVmUHRyPFNoYXJlZFRhc2s8dm9pZChBYnN0cmFjdFNsb3RWaXNp
dG9yJik+PiB0YXNrLCBNYXJraW5nQ29uc3RyYWludCYgY29uc3RyYWludCkKIHsKICAgICBhdXRv
IGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7CiAgICAgbV90b0V4ZWN1dGVJblBhcmFsbGVsLmFw
cGVuZChUYXNrV2l0aENvbnN0cmFpbnQoV1RGTW92ZSh0YXNrKSwgJmNvbnN0cmFpbnQpKTsKIH0K
IAotdm9pZCBNYXJraW5nQ29uc3RyYWludFNvbHZlcjo6cnVuRXhlY3V0aW9uVGhyZWFkKFNsb3RW
aXNpdG9yJiB2aXNpdG9yLCBTY2hlZHVsZXJQcmVmZXJlbmNlIHByZWZlcmVuY2UsIFNjb3BlZExh
bWJkYTxPcHRpb25hbDx1bnNpZ25lZD4oKT4gcGlja05leHQpCit2b2lkIE1hcmtpbmdDb25zdHJh
aW50U29sdmVyOjpydW5FeGVjdXRpb25UaHJlYWQoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRv
ciwgU2NoZWR1bGVyUHJlZmVyZW5jZSBwcmVmZXJlbmNlLCBTY29wZWRMYW1iZGE8T3B0aW9uYWw8
dW5zaWduZWQ+KCk+IHBpY2tOZXh0KQogewogICAgIGZvciAoOzspIHsKICAgICAgICAgYm9vbCBk
b1BhcmFsbGVsV29ya01vZGU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJr
aW5nQ29uc3RyYWludFNvbHZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL01hcmtpbmdDb25zdHJhaW50U29sdmVyLmgJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50U29sdmVyLmgJKHdvcmtp
bmcgY29weSkKQEAgLTY1LDE1ICs2NSwxNSBAQCBwdWJsaWM6CiAgICAgdm9pZCBleGVjdXRlKE1h
cmtpbmdDb25zdHJhaW50Jik7CiAgICAgCiAgICAgLy8gUGFyYWxsZWwgY29uc3RyYWludHMgY2Fu
IGFkZCBwYXJhbGxlbCB0YXNrcy4KLSAgICB2b2lkIGFkZFBhcmFsbGVsVGFzayhSZWZQdHI8U2hh
cmVkVGFzazx2b2lkKFNsb3RWaXNpdG9yJik+PiwgTWFya2luZ0NvbnN0cmFpbnQmKTsKKyAgICB2
b2lkIGFkZFBhcmFsbGVsVGFzayhSZWZQdHI8U2hhcmVkVGFzazx2b2lkKEFic3RyYWN0U2xvdFZp
c2l0b3ImKT4+LCBNYXJraW5nQ29uc3RyYWludCYpOwogICAgIAogcHJpdmF0ZToKLSAgICB2b2lk
IHJ1bkV4ZWN1dGlvblRocmVhZChTbG90VmlzaXRvciYsIFNjaGVkdWxlclByZWZlcmVuY2UsIFNj
b3BlZExhbWJkYTxPcHRpb25hbDx1bnNpZ25lZD4oKT4gcGlja05leHQpOworICAgIHZvaWQgcnVu
RXhlY3V0aW9uVGhyZWFkKEFic3RyYWN0U2xvdFZpc2l0b3ImLCBTY2hlZHVsZXJQcmVmZXJlbmNl
LCBTY29wZWRMYW1iZGE8T3B0aW9uYWw8dW5zaWduZWQ+KCk+IHBpY2tOZXh0KTsKICAgICAKICAg
ICBzdHJ1Y3QgVGFza1dpdGhDb25zdHJhaW50IHsKICAgICAgICAgVGFza1dpdGhDb25zdHJhaW50
KCkgeyB9CiAgICAgICAgIAotICAgICAgICBUYXNrV2l0aENvbnN0cmFpbnQoUmVmUHRyPFNoYXJl
ZFRhc2s8dm9pZChTbG90VmlzaXRvciYpPj4gdGFzaywgTWFya2luZ0NvbnN0cmFpbnQqIGNvbnN0
cmFpbnQpCisgICAgICAgIFRhc2tXaXRoQ29uc3RyYWludChSZWZQdHI8U2hhcmVkVGFzazx2b2lk
KEFic3RyYWN0U2xvdFZpc2l0b3ImKT4+IHRhc2ssIE1hcmtpbmdDb25zdHJhaW50KiBjb25zdHJh
aW50KQogICAgICAgICAgICAgOiB0YXNrKFdURk1vdmUodGFzaykpCiAgICAgICAgICAgICAsIGNv
bnN0cmFpbnQoY29uc3RyYWludCkKICAgICAgICAgewpAQCAtODUsMTIgKzg1LDEyIEBAIHByaXZh
dGU6CiAgICAgICAgICAgICAgICAgJiYgY29uc3RyYWludCA9PSBvdGhlci5jb25zdHJhaW50Owog
ICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBSZWZQdHI8U2hhcmVkVGFzazx2b2lkKFNsb3RW
aXNpdG9yJik+PiB0YXNrOworICAgICAgICBSZWZQdHI8U2hhcmVkVGFzazx2b2lkKEFic3RyYWN0
U2xvdFZpc2l0b3ImKT4+IHRhc2s7CiAgICAgICAgIE1hcmtpbmdDb25zdHJhaW50KiBjb25zdHJh
aW50IHsgbnVsbHB0ciB9OwogICAgIH07CiAgICAgCiAgICAgSGVhcCYgbV9oZWFwOwotICAgIFNs
b3RWaXNpdG9yJiBtX21haW5WaXNpdG9yOworICAgIEFic3RyYWN0U2xvdFZpc2l0b3ImIG1fbWFp
blZpc2l0b3I7CiAgICAgTWFya2luZ0NvbnN0cmFpbnRTZXQmIG1fc2V0OwogICAgIEJpdFZlY3Rv
ciBtX2V4ZWN1dGVkOwogICAgIERlcXVlPFRhc2tXaXRoQ29uc3RyYWludCwgMzI+IG1fdG9FeGVj
dXRlSW5QYXJhbGxlbDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1ByZWNpc2VB
bGxvY2F0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Q
cmVjaXNlQWxsb2NhdGlvbi5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL1ByZWNpc2VBbGxvY2F0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjAw
LDExICsyMDAsMTYgQEAgdm9pZCBQcmVjaXNlQWxsb2NhdGlvbjo6c2hyaW5rKCkKICAgICBtX3dl
YWtTZXQuc2hyaW5rKCk7CiB9CiAKLXZvaWQgUHJlY2lzZUFsbG9jYXRpb246OnZpc2l0V2Vha1Nl
dChTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KKy8v
dm9pZCBQcmVjaXNlQWxsb2NhdGlvbjo6dmlzaXRXZWFrU2V0KFZpc2l0b3ImIHZpc2l0b3IpCit2
b2lkIFByZWNpc2VBbGxvY2F0aW9uOjp2aXNpdFdlYWtTZXQxMDAwKEFic3RyYWN0U2xvdFZpc2l0
b3ImIHZpc2l0b3IpCiB7Ci0gICAgbV93ZWFrU2V0LnZpc2l0KHZpc2l0b3IpOworICAgIG1fd2Vh
a1NldC52aXNpdDEodmlzaXRvcik7CiB9CiAKKy8vdGVtcGxhdGUgdm9pZCBQcmVjaXNlQWxsb2Nh
dGlvbjo6dmlzaXRXZWFrU2V0KFNsb3RWaXNpdG9yJik7CisvL3RlbXBsYXRlIHZvaWQgUHJlY2lz
ZUFsbG9jYXRpb246OnZpc2l0V2Vha1NldChEZWJ1Z1Nsb3RWaXNpdG9yJik7CisKIHZvaWQgUHJl
Y2lzZUFsbG9jYXRpb246OnJlYXBXZWFrU2V0KCkKIHsKICAgICByZXR1cm4gbV93ZWFrU2V0LnJl
YXAoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1ByZWNpc2VBbGxvY2F0aW9u
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvUHJlY2lzZUFsbG9j
YXRpb24uaAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
UHJlY2lzZUFsbG9jYXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtODIsNyArODIsOCBAQCBwdWJs
aWM6CiAgICAgCiAgICAgdm9pZCBzaHJpbmsoKTsKICAgICAKLSAgICB2b2lkIHZpc2l0V2Vha1Nl
dChTbG90VmlzaXRvciYpOworLy8gICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCB2
aXNpdFdlYWtTZXQoVmlzaXRvciYpOworICAgIHZvaWQgdmlzaXRXZWFrU2V0MTAwMChBYnN0cmFj
dFNsb3RWaXNpdG9yJik7CiAgICAgdm9pZCByZWFwV2Vha1NldCgpOwogICAgIAogICAgIHZvaWQg
Y2xlYXJOZXdseUFsbG9jYXRlZCgpIHsgbV9pc05ld2x5QWxsb2NhdGVkID0gZmFsc2U7IH0KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1NpbXBsZU1hcmtpbmdDb25zdHJhaW50LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TaW1wbGVNYXJraW5n
Q29uc3RyYWludC5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL1NpbXBsZU1hcmtpbmdDb25zdHJhaW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAs
NyArMzAsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQ6OlNp
bXBsZU1hcmtpbmdDb25zdHJhaW50KAogICAgIENTdHJpbmcgYWJicmV2aWF0ZWROYW1lLCBDU3Ry
aW5nIG5hbWUsCi0gICAgOjpGdW5jdGlvbjx2b2lkKFNsb3RWaXNpdG9yJik+IGV4ZWN1dGVGdW5j
dGlvbiwKKyAgICA6OkZ1bmN0aW9uPHZvaWQoQWJzdHJhY3RTbG90VmlzaXRvciYpPiBleGVjdXRl
RnVuY3Rpb24sCiAgICAgQ29uc3RyYWludFZvbGF0aWxpdHkgdm9sYXRpbGl0eSwgQ29uc3RyYWlu
dENvbmN1cnJlbmN5IGNvbmN1cnJlbmN5LAogICAgIENvbnN0cmFpbnRQYXJhbGxlbGlzbSBwYXJh
bGxlbGlzbSkKICAgICA6IE1hcmtpbmdDb25zdHJhaW50KFdURk1vdmUoYWJicmV2aWF0ZWROYW1l
KSwgV1RGTW92ZShuYW1lKSwgdm9sYXRpbGl0eSwgY29uY3VycmVuY3ksIHBhcmFsbGVsaXNtKQpA
QCAtNDIsNyArNDIsNyBAQCBTaW1wbGVNYXJraW5nQ29uc3RyYWludDo6flNpbXBsZU1hcmtpbmdD
CiB7CiB9CiAKLXZvaWQgU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQ6OmV4ZWN1dGVJbXBsKFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQordm9pZCBTaW1wbGVNYXJraW5nQ29uc3RyYWludDo6ZXhlY3V0ZUlt
cGwoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBtX2V4ZWN1dGVGdW5jdGlv
bih2aXNpdG9yKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1NpbXBsZU1h
cmtpbmdDb25zdHJhaW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQuaAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQuaAkod29ya2luZyBj
b3B5KQpAQCAtMzcsMTQgKzM3LDE0IEBAIGNsYXNzIFNpbXBsZU1hcmtpbmdDb25zdHJhaW50IGZp
bmFsIDogcHUKIHB1YmxpYzoKICAgICBKU19FWFBPUlRfUFJJVkFURSBTaW1wbGVNYXJraW5nQ29u
c3RyYWludCgKICAgICAgICAgQ1N0cmluZyBhYmJyZXZpYXRlZE5hbWUsIENTdHJpbmcgbmFtZSwK
LSAgICAgICAgOjpGdW5jdGlvbjx2b2lkKFNsb3RWaXNpdG9yJik+LAorICAgICAgICA6OkZ1bmN0
aW9uPHZvaWQoQWJzdHJhY3RTbG90VmlzaXRvciYpPiwKICAgICAgICAgQ29uc3RyYWludFZvbGF0
aWxpdHksCiAgICAgICAgIENvbnN0cmFpbnRDb25jdXJyZW5jeSA9IENvbnN0cmFpbnRDb25jdXJy
ZW5jeTo6Q29uY3VycmVudCwKICAgICAgICAgQ29uc3RyYWludFBhcmFsbGVsaXNtID0gQ29uc3Ry
YWludFBhcmFsbGVsaXNtOjpTZXF1ZW50aWFsKTsKICAgICAKICAgICBTaW1wbGVNYXJraW5nQ29u
c3RyYWludCgKICAgICAgICAgQ1N0cmluZyBhYmJyZXZpYXRlZE5hbWUsIENTdHJpbmcgbmFtZSwK
LSAgICAgICAgOjpGdW5jdGlvbjx2b2lkKFNsb3RWaXNpdG9yJik+IGZ1bmMsCisgICAgICAgIDo6
RnVuY3Rpb248dm9pZChBYnN0cmFjdFNsb3RWaXNpdG9yJik+IGZ1bmMsCiAgICAgICAgIENvbnN0
cmFpbnRWb2xhdGlsaXR5IHZvbGF0aWxpdHksCiAgICAgICAgIENvbnN0cmFpbnRQYXJhbGxlbGlz
bSBwYXJhbGxlbGlzbSkKICAgICAgICAgOiBTaW1wbGVNYXJraW5nQ29uc3RyYWludChhYmJyZXZp
YXRlZE5hbWUsIG5hbWUsIFdURk1vdmUoZnVuYyksIHZvbGF0aWxpdHksIENvbnN0cmFpbnRDb25j
dXJyZW5jeTo6Q29uY3VycmVudCwgcGFyYWxsZWxpc20pCkBAIC01NCw5ICs1NCw5IEBAIHB1Ymxp
YzoKICAgICBKU19FWFBPUlRfUFJJVkFURSB+U2ltcGxlTWFya2luZ0NvbnN0cmFpbnQoKSBmaW5h
bDsKICAgICAKIHByaXZhdGU6Ci0gICAgdm9pZCBleGVjdXRlSW1wbChTbG90VmlzaXRvciYpIGZp
bmFsOworICAgIHZvaWQgZXhlY3V0ZUltcGwoQWJzdHJhY3RTbG90VmlzaXRvciYpIGZpbmFsOwog
Ci0gICAgOjpGdW5jdGlvbjx2b2lkKFNsb3RWaXNpdG9yJik+IG1fZXhlY3V0ZUZ1bmN0aW9uOwor
ICAgIDo6RnVuY3Rpb248dm9pZChBYnN0cmFjdFNsb3RWaXNpdG9yJik+IG1fZXhlY3V0ZUZ1bmN0
aW9uOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9TbG90VmlzaXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvU2xvdFZpc2l0b3IuY3BwCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYg
KzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJTbG90VmlzaXRvci5oIgog
CisjaW5jbHVkZSAiQWJzdHJhY3RTbG90VmlzaXRvcklubGluZXMuaCIKICNpbmNsdWRlICJDb25z
ZXJ2YXRpdmVSb290cy5oIgogI2luY2x1ZGUgIkdDU2VnbWVudGVkQXJyYXlJbmxpbmVzLmgiCiAj
aW5jbHVkZSAiSGVhcEFuYWx5emVyLmgiCkBAIC0zNSw3ICszNiw3IEBACiAjaW5jbHVkZSAiSlNB
cnJheS5oIgogI2luY2x1ZGUgIkpTQ2VsbElubGluZXMuaCIKICNpbmNsdWRlICJKU1N0cmluZy5o
IgotI2luY2x1ZGUgIk1hcmtpbmdDb25zdHJhaW50U29sdmVyLmgiCisvLyNpbmNsdWRlICJNYXJr
aW5nQ29uc3RyYWludFNvbHZlci5oIgogI2luY2x1ZGUgIlNsb3RWaXNpdG9ySW5saW5lcy5oIgog
I2luY2x1ZGUgIlN0b3BJZk5lY2Vzc2FyeVRpbWVyLmgiCiAjaW5jbHVkZSAiVk0uaCIKQEAgLTc3
LDE2ICs3OCwxOCBAQCBzdGF0aWMgdm9pZCB2YWxpZGF0ZShKU0NlbGwqIGNlbGwpCiAjZW5kaWYK
IAogU2xvdFZpc2l0b3I6OlNsb3RWaXNpdG9yKEhlYXAmIGhlYXAsIENTdHJpbmcgY29kZU5hbWUp
Ci0gICAgOiBtX2J5dGVzVmlzaXRlZCgwKQotICAgICwgbV92aXNpdENvdW50KDApCisvLyAgICA6
IEJhc2UoVHlwZTo6U2xvdFZpc2l0b3IsIGhlYXAsIGNvZGVOYW1lKQorICAgIDogQmFzZShoZWFw
LCBjb2RlTmFtZSkKKy8vICAgICwgbV9ieXRlc1Zpc2l0ZWQoMCkKKy8vICAgICwgbV92aXNpdENv
dW50KDApCiAgICAgLCBtX2lzSW5QYXJhbGxlbE1vZGUoZmFsc2UpCi0gICAgLCBtX21hcmtpbmdW
ZXJzaW9uKE1hcmtlZFNwYWNlOjppbml0aWFsVmVyc2lvbikKLSAgICAsIG1faGVhcChoZWFwKQot
ICAgICwgbV9jb2RlTmFtZShjb2RlTmFtZSkKLSNpZiBBU1NFUlRfRU5BQkxFRAotICAgICwgbV9p
c0NoZWNraW5nRm9yRGVmYXVsdE1hcmtWaW9sYXRpb24oZmFsc2UpCi0gICAgLCBtX2lzRHJhaW5p
bmcoZmFsc2UpCi0jZW5kaWYKKy8vICAgICwgbV9tYXJraW5nVmVyc2lvbihNYXJrZWRTcGFjZTo6
aW5pdGlhbFZlcnNpb24pCisvLyAgICAsIG1faGVhcChoZWFwKQorLy8gICAgLCBtX2NvZGVOYW1l
KGNvZGVOYW1lKQorLy8jaWYgQVNTRVJUX0VOQUJMRUQKKy8vICAgICwgbV9pc0NoZWNraW5nRm9y
RGVmYXVsdE1hcmtWaW9sYXRpb24oZmFsc2UpCisvLy8vICAgICwgbV9pc0RyYWluaW5nKGZhbHNl
KQorLy8jZW5kaWYKIHsKIH0KIApAQCAtMTE3LDggKzEyMCw5IEBAIHZvaWQgU2xvdFZpc2l0b3I6
OmRpZFN0YXJ0TWFya2luZygpCiAKIHZvaWQgU2xvdFZpc2l0b3I6OnJlc2V0KCkKIHsKLSAgICBt
X2J5dGVzVmlzaXRlZCA9IDA7Ci0gICAgbV92aXNpdENvdW50ID0gMDsKKy8vICAgIG1fYnl0ZXNW
aXNpdGVkID0gMDsKKy8vICAgIG1fdmlzaXRDb3VudCA9IDA7CisgICAgQWJzdHJhY3RTbG90Vmlz
aXRvcjo6cmVzZXQoKTsKICAgICBtX2hlYXBBbmFseXplciA9IG51bGxwdHI7CiAgICAgUkVMRUFT
RV9BU1NFUlQoIW1fY3VycmVudENlbGwpOwogfQpAQCAtODA3LDEzICs4MTEsMTMgQEAgTWFya1N0
YWNrQXJyYXkmIFNsb3RWaXNpdG9yOjpjb3JyZXNwb25kaQogICAgIHJldHVybiAqbV9oZWFwLm1f
c2hhcmVkTXV0YXRvck1hcmtTdGFjazsKIH0KIAotdm9pZCBTbG90VmlzaXRvcjo6YWRkUGFyYWxs
ZWxDb25zdHJhaW50VGFzayhSZWZQdHI8U2hhcmVkVGFzazx2b2lkKFNsb3RWaXNpdG9yJik+PiB0
YXNrKQotewotICAgIFJFTEVBU0VfQVNTRVJUKG1fY3VycmVudFNvbHZlcik7Ci0gICAgUkVMRUFT
RV9BU1NFUlQobV9jdXJyZW50Q29uc3RyYWludCk7Ci0gICAgUkVMRUFTRV9BU1NFUlQodGFzayk7
Ci0gICAgCi0gICAgbV9jdXJyZW50U29sdmVyLT5hZGRQYXJhbGxlbFRhc2sodGFzaywgKm1fY3Vy
cmVudENvbnN0cmFpbnQpOwotfQorLy92b2lkIFNsb3RWaXNpdG9yOjphZGRQYXJhbGxlbENvbnN0
cmFpbnRUYXNrKFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoQWJzdHJhY3RTbG90VmlzaXRvciYpPj4g
dGFzaykKKy8veworLy8gICAgUkVMRUFTRV9BU1NFUlQobV9jdXJyZW50U29sdmVyKTsKKy8vICAg
IFJFTEVBU0VfQVNTRVJUKG1fY3VycmVudENvbnN0cmFpbnQpOworLy8gICAgUkVMRUFTRV9BU1NF
UlQodGFzayk7CisvLworLy8gICAgbV9jdXJyZW50U29sdmVyLT5hZGRQYXJhbGxlbFRhc2sodGFz
aywgKm1fY3VycmVudENvbnN0cmFpbnQpOworLy99CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5oCShyZXZpc2lvbiAyNzE0
NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yNSw3NCArMjUsMTAxIEBACiAKICNwcmFnbWEgb25jZQogCisjaW5jbHVkZSAi
QWJzdHJhY3RTbG90VmlzaXRvci5oIgogI2luY2x1ZGUgIkhhbmRsZVR5cGVzLmgiCiAjaW5jbHVk
ZSAiSXRlcmF0aW9uU3RhdHVzLmgiCi0jaW5jbHVkZSAiTWFya1N0YWNrLmgiCi0jaW5jbHVkZSAi
VmlzaXRSYWNlS2V5LmgiCisvLyNpbmNsdWRlICJNYXJrU3RhY2suaCIKKy8vI2luY2x1ZGUgIlZp
c2l0UmFjZUtleS5oIgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL01v
bm90b25pY1RpbWUuaD4KLSNpbmNsdWRlIDx3dGYvU2hhcmVkVGFzay5oPgotI2luY2x1ZGUgPHd0
Zi90ZXh0L0NTdHJpbmcuaD4KKy8vI2luY2x1ZGUgPHd0Zi9TaGFyZWRUYXNrLmg+CisvLyNpbmNs
dWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCi1jbGFzcyBDb25z
ZXJ2YXRpdmVSb290czsKKy8vY2xhc3MgQ29uc2VydmF0aXZlUm9vdHM7CiBjbGFzcyBHQ1RocmVh
ZFNoYXJlZERhdGE7Ci1jbGFzcyBIZWFwOworLy9jbGFzcyBIZWFwOwogY2xhc3MgSGVhcENlbGw7
Ci1jbGFzcyBIZWFwQW5hbHl6ZXI7CisvL2NsYXNzIEhlYXBBbmFseXplcjsKIGNsYXNzIE1hcmtl
ZEJsb2NrOwotY2xhc3MgTWFya2luZ0NvbnN0cmFpbnQ7Ci1jbGFzcyBNYXJraW5nQ29uc3RyYWlu
dFNvbHZlcjsKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNsYXNzIFdlYWs7Ci10ZW1wbGF0ZTx0eXBl
bmFtZSBULCB0eXBlbmFtZSBUcmFpdHM+IGNsYXNzIFdyaXRlQmFycmllckJhc2U7CisvL2NsYXNz
IE1hcmtpbmdDb25zdHJhaW50OworLy9jbGFzcyBNYXJraW5nQ29uc3RyYWludFNvbHZlcjsKKy8v
dGVtcGxhdGU8dHlwZW5hbWUgVD4gY2xhc3MgV2VhazsKKy8vdGVtcGxhdGU8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgVHJhaXRzPiBjbGFzcyBXcml0ZUJhcnJpZXJCYXNlOwogCi10eXBlZGVmIHVpbnQz
Ml90IEhlYXBWZXJzaW9uOworLy90eXBlZGVmIHVpbnQzMl90IEhlYXBWZXJzaW9uOwogCi1jbGFz
cyBTbG90VmlzaXRvciB7CitjbGFzcyBTbG90VmlzaXRvciBmaW5hbCA6IHB1YmxpYyBBYnN0cmFj
dFNsb3RWaXNpdG9yIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShTbG90VmlzaXRvcik7CiAg
ICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiAKKyAgICB1c2luZyBCYXNlID0gQWJzdHJhY3RT
bG90VmlzaXRvcjsKKwogICAgIGZyaWVuZCBjbGFzcyBTZXRDdXJyZW50Q2VsbFNjb3BlOwogICAg
IGZyaWVuZCBjbGFzcyBIZWFwOwogCiBwdWJsaWM6Ci0gICAgZW51bSBSb290TWFya1JlYXNvbiB7
Ci0gICAgICAgIE5vbmUsCi0gICAgICAgIENvbnNlcnZhdGl2ZVNjYW4sCi0gICAgICAgIFN0cm9u
Z1JlZmVyZW5jZXMsCi0gICAgICAgIFByb3RlY3RlZFZhbHVlcywKLSAgICAgICAgTWFya0xpc3RT
ZXQsCi0gICAgICAgIFZNRXhjZXB0aW9ucywKLSAgICAgICAgU3Ryb25nSGFuZGxlcywKLSAgICAg
ICAgRGVidWdnZXIsCi0gICAgICAgIEpJVFN0dWJSb3V0aW5lcywKLSAgICAgICAgV2Vha1NldHMs
Ci0gICAgICAgIE91dHB1dCwKLSAgICAgICAgREZHV29ya0xpc3RzLAotICAgICAgICBDb2RlQmxv
Y2tzLAotICAgICAgICBET01HQ091dHB1dCwKKyAgICBjbGFzcyBEZWZhdWx0TWFya2luZ1Zpb2xh
dGlvbkFzc2VydGlvblNjb3BlIHsKKyAgICBwdWJsaWM6CisjaWYgQVNTRVJUX0VOQUJMRUQKKyAg
ICAgICAgRGVmYXVsdE1hcmtpbmdWaW9sYXRpb25Bc3NlcnRpb25TY29wZShTbG90VmlzaXRvciYg
dmlzaXRvcikKKyAgICAgICAgICAgIDogbV92aXNpdG9yKHZpc2l0b3IpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIG1fd2FzQ2hlY2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlvbiA9IG1fdmlzaXRv
ci5tX2lzQ2hlY2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlvbjsKKyAgICAgICAgICAgIG1fdmlz
aXRvci5tX2lzQ2hlY2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlvbiA9IGZhbHNlOworICAgICAg
ICB9CisKKyAgICAgICAgfkRlZmF1bHRNYXJraW5nVmlvbGF0aW9uQXNzZXJ0aW9uU2NvcGUoKQor
ICAgICAgICB7CisgICAgICAgICAgICBtX3Zpc2l0b3IubV9pc0NoZWNraW5nRm9yRGVmYXVsdE1h
cmtWaW9sYXRpb24gPSBtX3dhc0NoZWNraW5nRm9yRGVmYXVsdE1hcmtWaW9sYXRpb247CisgICAg
ICAgIH0KKworICAgIHByaXZhdGU6CisgICAgICAgIFNsb3RWaXNpdG9yJiBtX3Zpc2l0b3I7Cisg
ICAgICAgIGJvb2wgbV93YXNDaGVja2luZ0ZvckRlZmF1bHRNYXJrVmlvbGF0aW9uOworI2Vsc2UK
KyAgICAgICAgRGVmYXVsdE1hcmtpbmdWaW9sYXRpb25Bc3NlcnRpb25TY29wZShTbG90VmlzaXRv
ciYpIHsgfQorI2VuZGlmCiAgICAgfTsKIAorLy8gICAgZW51bSBSb290TWFya1JlYXNvbiB7Cisv
LyAgICAgICAgTm9uZSwKKy8vICAgICAgICBDb25zZXJ2YXRpdmVTY2FuLAorLy8gICAgICAgIFN0
cm9uZ1JlZmVyZW5jZXMsCisvLyAgICAgICAgUHJvdGVjdGVkVmFsdWVzLAorLy8gICAgICAgIE1h
cmtMaXN0U2V0LAorLy8gICAgICAgIFZNRXhjZXB0aW9ucywKKy8vICAgICAgICBTdHJvbmdIYW5k
bGVzLAorLy8gICAgICAgIERlYnVnZ2VyLAorLy8gICAgICAgIEpJVFN0dWJSb3V0aW5lcywKKy8v
ICAgICAgICBXZWFrU2V0cywKKy8vICAgICAgICBPdXRwdXQsCisvLyAgICAgICAgREZHV29ya0xp
c3RzLAorLy8gICAgICAgIENvZGVCbG9ja3MsCisvLyAgICAgICAgRE9NR0NPdXRwdXQsCisvLyAg
ICB9OworCiAgICAgU2xvdFZpc2l0b3IoSGVhcCYsIENTdHJpbmcgY29kZU5hbWUpOwogICAgIH5T
bG90VmlzaXRvcigpOwogCi0gICAgTWFya1N0YWNrQXJyYXkmIGNvbGxlY3Rvck1hcmtTdGFjaygp
IHsgcmV0dXJuIG1fY29sbGVjdG9yU3RhY2s7IH0KLSAgICBNYXJrU3RhY2tBcnJheSYgbXV0YXRv
ck1hcmtTdGFjaygpIHsgcmV0dXJuIG1fbXV0YXRvclN0YWNrOyB9Ci0gICAgY29uc3QgTWFya1N0
YWNrQXJyYXkmIGNvbGxlY3Rvck1hcmtTdGFjaygpIGNvbnN0IHsgcmV0dXJuIG1fY29sbGVjdG9y
U3RhY2s7IH0KLSAgICBjb25zdCBNYXJrU3RhY2tBcnJheSYgbXV0YXRvck1hcmtTdGFjaygpIGNv
bnN0IHsgcmV0dXJuIG1fbXV0YXRvclN0YWNrOyB9Ci0gICAgCi0gICAgVk0mIHZtKCk7Ci0gICAg
Y29uc3QgVk0mIHZtKCkgY29uc3Q7Ci0gICAgSGVhcCogaGVhcCgpIGNvbnN0OwotCi0gICAgdm9p
ZCBhcHBlbmQoY29uc3QgQ29uc2VydmF0aXZlUm9vdHMmKTsKLSAgICAKLSAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBULCB0eXBlbmFtZSBUcmFpdHM+IHZvaWQgYXBwZW5kKGNvbnN0IFdyaXRlQmFycmll
ckJhc2U8VCwgVHJhaXRzPiYpOwotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFRy
YWl0cz4gdm9pZCBhcHBlbmRIaWRkZW4oY29uc3QgV3JpdGVCYXJyaWVyQmFzZTxULCBUcmFpdHM+
Jik7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgSXRlcmF0b3I+IHZvaWQgYXBwZW5kKEl0ZXJhdG9y
IGJlZ2luICwgSXRlcmF0b3IgZW5kKTsKLSAgICB2b2lkIGFwcGVuZFZhbHVlcyhjb25zdCBXcml0
ZUJhcnJpZXJCYXNlPFVua25vd24sIFJhd1ZhbHVlVHJhaXRzPFVua25vd24+PiosIHNpemVfdCBj
b3VudCk7Ci0gICAgdm9pZCBhcHBlbmRWYWx1ZXNIaWRkZW4oY29uc3QgV3JpdGVCYXJyaWVyQmFz
ZTxVbmtub3duLCBSYXdWYWx1ZVRyYWl0czxVbmtub3duPj4qLCBzaXplX3QgY291bnQpOworLy8g
ICAgTWFya1N0YWNrQXJyYXkmIGNvbGxlY3Rvck1hcmtTdGFjaygpIHsgcmV0dXJuIG1fY29sbGVj
dG9yU3RhY2s7IH0KKy8vICAgIE1hcmtTdGFja0FycmF5JiBtdXRhdG9yTWFya1N0YWNrKCkgeyBy
ZXR1cm4gbV9tdXRhdG9yU3RhY2s7IH0KKy8vICAgIGNvbnN0IE1hcmtTdGFja0FycmF5JiBjb2xs
ZWN0b3JNYXJrU3RhY2soKSBjb25zdCB7IHJldHVybiBtX2NvbGxlY3RvclN0YWNrOyB9CisvLyAg
ICBjb25zdCBNYXJrU3RhY2tBcnJheSYgbXV0YXRvck1hcmtTdGFjaygpIGNvbnN0IHsgcmV0dXJu
IG1fbXV0YXRvclN0YWNrOyB9CisgICAgCisvLyAgICBWTSYgdm0oKTsKKy8vICAgIGNvbnN0IFZN
JiB2bSgpIGNvbnN0OworLy8gICAgSGVhcCogaGVhcCgpIGNvbnN0OworCisgICAgdm9pZCBhcHBl
bmQoY29uc3QgQ29uc2VydmF0aXZlUm9vdHMmKSBmaW5hbDsKKworICAgIHVzaW5nIEJhc2U6OmFw
cGVuZDsKKy8vICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFRyYWl0cz4gdm9pZCBh
cHBlbmQoY29uc3QgV3JpdGVCYXJyaWVyQmFzZTxULCBUcmFpdHM+Jik7CisvLyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBUcmFpdHM+IHZvaWQgYXBwZW5kSGlkZGVuKGNvbnN0IFdy
aXRlQmFycmllckJhc2U8VCwgVHJhaXRzPiYpOworLy8gICAgdGVtcGxhdGU8dHlwZW5hbWUgSXRl
cmF0b3I+IHZvaWQgYXBwZW5kKEl0ZXJhdG9yIGJlZ2luICwgSXRlcmF0b3IgZW5kKTsKKy8vICAg
IHZvaWQgYXBwZW5kVmFsdWVzKGNvbnN0IFdyaXRlQmFycmllckJhc2U8VW5rbm93biwgUmF3VmFs
dWVUcmFpdHM8VW5rbm93bj4+Kiwgc2l6ZV90IGNvdW50KTsKKy8vICAgIHZvaWQgYXBwZW5kVmFs
dWVzSGlkZGVuKGNvbnN0IFdyaXRlQmFycmllckJhc2U8VW5rbm93biwgUmF3VmFsdWVUcmFpdHM8
VW5rbm93bj4+Kiwgc2l6ZV90IGNvdW50KTsKICAgICAKICAgICAvLyBUaGVzZSBkb24ndCByZXF1
aXJlIHlvdSB0byBwcm92ZSB0aGF0IHlvdSBoYXZlIGEgV3JpdGVCYXJyaWVyPD4uIFRoYXQgbWFr
ZXMgc2Vuc2UKICAgICAvLyBmb3I6CkBAIC0xMDMsMTkgKzEzMCwxOSBAQCBwdWJsaWM6CiAgICAg
Ly8KICAgICAvLyBJZiB5b3UgYXJlIG5vdCBhIHJvb3QgYW5kIHlvdSBkb24ndCBrbm93IHdoYXQg
a2luZCBvZiBiYXJyaWVyIHlvdSBoYXZlLCB0aGVuIHlvdQogICAgIC8vIHNob3VsZG4ndCBjYWxs
IHRoZXNlIG1ldGhvZHMuCi0gICAgdm9pZCBhcHBlbmRVbmJhcnJpZXJlZChKU1ZhbHVlKTsKKyAg
ICB2b2lkIGFwcGVuZFVuYmFycmllcmVkKEpTVmFsdWUpIGZpbmFsOwogICAgIHZvaWQgYXBwZW5k
VW5iYXJyaWVyZWQoSlNWYWx1ZSosIHNpemVfdCk7Ci0gICAgdm9pZCBhcHBlbmRVbmJhcnJpZXJl
ZChKU0NlbGwqKTsKKyAgICB2b2lkIGFwcGVuZFVuYmFycmllcmVkKEpTQ2VsbCopIGZpbmFsOwog
ICAgIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgdm9pZCBhcHBlbmQoY29uc3QgV2Vh
azxUPiYgd2Vhayk7CisvLyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorLy8gICAgdm9pZCBhcHBl
bmQoY29uc3QgV2VhazxUPiYgd2Vhayk7CiAgICAgCi0gICAgdm9pZCBhcHBlbmRIaWRkZW5VbmJh
cnJpZXJlZChKU1ZhbHVlKTsKLSAgICB2b2lkIGFwcGVuZEhpZGRlblVuYmFycmllcmVkKEpTQ2Vs
bCopOworICAgIHZvaWQgYXBwZW5kSGlkZGVuVW5iYXJyaWVyZWQoSlNWYWx1ZSkgZmluYWw7Cisg
ICAgdm9pZCBhcHBlbmRIaWRkZW5VbmJhcnJpZXJlZChKU0NlbGwqKSBmaW5hbDsKIAotICAgIGJv
b2wgYWRkT3BhcXVlUm9vdCh2b2lkKik7IC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgcm9vdCB3YXMg
bmV3LgorICAgIGJvb2wgYWRkT3BhcXVlUm9vdCh2b2lkKikgZmluYWw7IC8vIFJldHVybnMgdHJ1
ZSBpZiB0aGUgcm9vdCB3YXMgbmV3LgogICAgIAotICAgIGJvb2wgY29udGFpbnNPcGFxdWVSb290
KHZvaWQqKSBjb25zdDsKKyAgICBib29sIGNvbnRhaW5zT3BhcXVlUm9vdCh2b2lkKikgY29uc3Qg
ZmluYWw7CiAKICAgICBib29sIGlzRW1wdHkoKSB7IHJldHVybiBtX2NvbGxlY3RvclN0YWNrLmlz
RW1wdHkoKSAmJiBtX211dGF0b3JTdGFjay5pc0VtcHR5KCk7IH0KIApAQCAtMTI1LDEwICsxNTIs
MTAgQEAgcHVibGljOgogICAgIHZvaWQgcmVzZXQoKTsKICAgICB2b2lkIGNsZWFyTWFya1N0YWNr
cygpOwogCi0gICAgc2l6ZV90IGJ5dGVzVmlzaXRlZCgpIGNvbnN0IHsgcmV0dXJuIG1fYnl0ZXNW
aXNpdGVkOyB9Ci0gICAgc2l6ZV90IHZpc2l0Q291bnQoKSBjb25zdCB7IHJldHVybiBtX3Zpc2l0
Q291bnQ7IH0KLSAgICAKLSAgICB2b2lkIGFkZFRvVmlzaXRDb3VudChzaXplX3QgdmFsdWUpIHsg
bV92aXNpdENvdW50ICs9IHZhbHVlOyB9CisvLyAgICBzaXplX3QgYnl0ZXNWaXNpdGVkKCkgY29u
c3QgeyByZXR1cm4gbV9ieXRlc1Zpc2l0ZWQ7IH0KKy8vICAgIHNpemVfdCB2aXNpdENvdW50KCkg
Y29uc3QgeyByZXR1cm4gbV92aXNpdENvdW50OyB9CisvLworLy8gICAgdm9pZCBhZGRUb1Zpc2l0
Q291bnQoc2l6ZV90IHZhbHVlKSB7IG1fdmlzaXRDb3VudCArPSB2YWx1ZTsgfQogCiAgICAgdm9p
ZCBkb25hdGUoKTsKICAgICB2b2lkIGRyYWluKE1vbm90b25pY1RpbWUgdGltZW91dCA9IE1vbm90
b25pY1RpbWU6OmluZmluaXR5KCkpOwpAQCAtMTUxLDI0ICsxNzgsMjQgQEAgcHVibGljOgogICAg
IAogICAgIC8vIFRoaXMgaW5mb3JtcyB0aGUgR0MgYWJvdXQgYXV4aWxpYXJ5IG9mIHNvbWUgc2l6
ZSB0aGF0IHdlIGFyZSBrZWVwaW5nIGFsaXZlLiBJZiB5b3UgZG9uJ3QgZG8KICAgICAvLyB0aGlz
IHRoZW4gdGhlIHNwYWNlIHdpbGwgYmUgZnJlZWQgYXQgZW5kIG9mIEdDLgotICAgIHZvaWQgbWFy
a0F1eGlsaWFyeShjb25zdCB2b2lkKiBiYXNlKTsKKyAgICB2b2lkIG1hcmtBdXhpbGlhcnkoY29u
c3Qgdm9pZCogYmFzZSkgZmluYWw7CiAKLSAgICB2b2lkIHJlcG9ydEV4dHJhTWVtb3J5VmlzaXRl
ZChzaXplX3QpOworICAgIHZvaWQgcmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKHNpemVfdCkgZmlu
YWw7CiAjaWYgRU5BQkxFKFJFU09VUkNFX1VTQUdFKQotICAgIHZvaWQgcmVwb3J0RXh0ZXJuYWxN
ZW1vcnlWaXNpdGVkKHNpemVfdCk7CisgICAgdm9pZCByZXBvcnRFeHRlcm5hbE1lbW9yeVZpc2l0
ZWQoc2l6ZV90KSBmaW5hbDsKICNlbmRpZgogICAgIAotICAgIHZvaWQgZHVtcChQcmludFN0cmVh
bSYpIGNvbnN0OworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0IGZpbmFsOwogCi0g
ICAgYm9vbCBpc0FuYWx5emluZ0hlYXAoKSBjb25zdCB7IHJldHVybiAhIW1faGVhcEFuYWx5emVy
OyB9Ci0gICAgSGVhcEFuYWx5emVyKiBoZWFwQW5hbHl6ZXIoKSBjb25zdCB7IHJldHVybiBtX2hl
YXBBbmFseXplcjsgfQorLy8gICAgYm9vbCBpc0FuYWx5emluZ0hlYXAoKSBjb25zdCB7IHJldHVy
biAhIW1faGVhcEFuYWx5emVyOyB9CisvLyAgICBIZWFwQW5hbHl6ZXIqIGhlYXBBbmFseXplcigp
IGNvbnN0IHsgcmV0dXJuIG1faGVhcEFuYWx5emVyOyB9CiAgICAgCi0gICAgUm9vdE1hcmtSZWFz
b24gcm9vdE1hcmtSZWFzb24oKSBjb25zdCB7IHJldHVybiBtX3Jvb3RNYXJrUmVhc29uOyB9Ci0g
ICAgdm9pZCBzZXRSb290TWFya1JlYXNvbihSb290TWFya1JlYXNvbiByZWFzb24pIHsgbV9yb290
TWFya1JlYXNvbiA9IHJlYXNvbjsgfQorLy8gICAgUm9vdE1hcmtSZWFzb24gcm9vdE1hcmtSZWFz
b24oKSBjb25zdCB7IHJldHVybiBtX3Jvb3RNYXJrUmVhc29uOyB9CisvLyAgICB2b2lkIHNldFJv
b3RNYXJrUmVhc29uKFJvb3RNYXJrUmVhc29uIHJlYXNvbikgeyBtX3Jvb3RNYXJrUmVhc29uID0g
cmVhc29uOyB9CiAKLSAgICBIZWFwVmVyc2lvbiBtYXJraW5nVmVyc2lvbigpIGNvbnN0IHsgcmV0
dXJuIG1fbWFya2luZ1ZlcnNpb247IH0KKy8vICAgIEhlYXBWZXJzaW9uIG1hcmtpbmdWZXJzaW9u
KCkgY29uc3QgeyByZXR1cm4gbV9tYXJraW5nVmVyc2lvbjsgfQogCi0gICAgYm9vbCBtdXRhdG9y
SXNTdG9wcGVkKCkgY29uc3QgeyByZXR1cm4gbV9tdXRhdG9ySXNTdG9wcGVkOyB9CisgICAgYm9v
bCBtdXRhdG9ySXNTdG9wcGVkKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9tdXRhdG9ySXNTdG9w
cGVkOyB9CiAgICAgCiAgICAgTG9jayYgcmlnaHRUb1J1bigpIHsgcmV0dXJuIG1fcmlnaHRUb1J1
bjsgfQogICAgIApAQCAtMTgwLDEwICsyMDcsMTAgQEAgcHVibGljOgogICAgIAogICAgIHZvaWQg
b3B0aW1pemVGb3JTdG9wcGVkTXV0YXRvcigpOwogICAgIAotICAgIHZvaWQgZGlkUmFjZShjb25z
dCBWaXNpdFJhY2VLZXkmKTsKKyAgICB2b2lkIGRpZFJhY2UoY29uc3QgVmlzaXRSYWNlS2V5Jikg
ZmluYWw7CiAgICAgdm9pZCBkaWRSYWNlKEpTQ2VsbCogY2VsbCwgY29uc3QgY2hhciogcmVhc29u
KSB7IGRpZFJhY2UoVmlzaXRSYWNlS2V5KGNlbGwsIHJlYXNvbikpOyB9CiAgICAgCi0gICAgdm9p
ZCB2aXNpdEFzQ29uc3RyYWludChjb25zdCBKU0NlbGwqKTsKKyAgICB2b2lkIHZpc2l0QXNDb25z
dHJhaW50KGNvbnN0IEpTQ2VsbCopIGZpbmFsOwogICAgIAogICAgIGJvb2wgZGlkUmVhY2hUZXJt
aW5hdGlvbigpOwogICAgIApAQCAtMTkzLDExICsyMjAsMTEgQEAgcHVibGljOgogICAgIAogICAg
IGNvbnN0IGNoYXIqIGNvZGVOYW1lKCkgY29uc3QgeyByZXR1cm4gbV9jb2RlTmFtZS5kYXRhKCk7
IH0KICAgICAKLSAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGFkZFBhcmFsbGVsQ29uc3RyYWlu
dFRhc2soUmVmUHRyPFNoYXJlZFRhc2s8dm9pZChTbG90VmlzaXRvciYpPj4pOworLy8gICAgSlNf
RVhQT1JUX1BSSVZBVEUgdm9pZCBhZGRQYXJhbGxlbENvbnN0cmFpbnRUYXNrKFJlZlB0cjxTaGFy
ZWRUYXNrPHZvaWQoQWJzdHJhY3RTbG90VmlzaXRvciYpPj4pOwogCiBwcml2YXRlOgogICAgIGZy
aWVuZCBjbGFzcyBQYXJhbGxlbE1vZGVFbmFibGVyOwotICAgIGZyaWVuZCBjbGFzcyBNYXJraW5n
Q29uc3RyYWludFNvbHZlcjsKKy8vICAgIGZyaWVuZCBjbGFzcyBNYXJraW5nQ29uc3RyYWludFNv
bHZlcjsKICAgICAKICAgICB2b2lkIGFwcGVuZEpTQ2VsbE9yQXV4aWxpYXJ5KEhlYXBDZWxsKik7
CiAKQEAgLTIzMiwzOSArMjU5LDM5IEBAIHByaXZhdGU6CiAKICAgICBNYXJrU3RhY2tBcnJheSYg
Y29ycmVzcG9uZGluZ0dsb2JhbFN0YWNrKE1hcmtTdGFja0FycmF5Jik7CiAKLSAgICBNYXJrU3Rh
Y2tBcnJheSBtX2NvbGxlY3RvclN0YWNrOwotICAgIE1hcmtTdGFja0FycmF5IG1fbXV0YXRvclN0
YWNrOwotICAgIAotICAgIHNpemVfdCBtX2J5dGVzVmlzaXRlZDsKLSAgICBzaXplX3QgbV92aXNp
dENvdW50OworLy8gICAgTWFya1N0YWNrQXJyYXkgbV9jb2xsZWN0b3JTdGFjazsKKy8vICAgIE1h
cmtTdGFja0FycmF5IG1fbXV0YXRvclN0YWNrOworLy8KKy8vICAgIHNpemVfdCBtX2J5dGVzVmlz
aXRlZDsKKy8vICAgIHNpemVfdCBtX3Zpc2l0Q291bnQ7CiAgICAgc2l6ZV90IG1fbm9uQ2VsbFZp
c2l0Q291bnQgeyAwIH07IC8vIFVzZWQgZm9yIGluY3JlbWVudGFsIGRyYWluaW5nLCBpZ25vcmVk
IG90aGVyd2lzZS4KICAgICBDaGVja2VkU2l6ZSBtX2V4dHJhTWVtb3J5U2l6ZSB7IDAgfTsKICAg
ICBib29sIG1faXNJblBhcmFsbGVsTW9kZTsKICAgICBib29sIG1faWdub3JlTmV3T3BhcXVlUm9v
dHMgeyBmYWxzZSB9OyAvLyBVc2VmdWwgYXMgYSBkZWJ1Z2dpbmcgbW9kZS4KIAotICAgIEhlYXBW
ZXJzaW9uIG1fbWFya2luZ1ZlcnNpb247Ci0gICAgCi0gICAgSGVhcCYgbV9oZWFwOworLy8gICAg
SGVhcFZlcnNpb24gbV9tYXJraW5nVmVyc2lvbjsKKy8vCisvLyAgICBIZWFwJiBtX2hlYXA7CiAK
LSAgICBIZWFwQW5hbHl6ZXIqIG1faGVhcEFuYWx5emVyIHsgbnVsbHB0ciB9OworLy8gICAgSGVh
cEFuYWx5emVyKiBtX2hlYXBBbmFseXplciB7IG51bGxwdHIgfTsKICAgICBKU0NlbGwqIG1fY3Vy
cmVudENlbGwgeyBudWxscHRyIH07Ci0gICAgUm9vdE1hcmtSZWFzb24gbV9yb290TWFya1JlYXNv
biB7IFJvb3RNYXJrUmVhc29uOjpOb25lIH07CisvLyAgICBSb290TWFya1JlYXNvbiBtX3Jvb3RN
YXJrUmVhc29uIHsgUm9vdE1hcmtSZWFzb246Ok5vbmUgfTsKICAgICBib29sIG1faXNGaXJzdFZp
c2l0IHsgZmFsc2UgfTsKICAgICBib29sIG1fbXV0YXRvcklzU3RvcHBlZCB7IGZhbHNlIH07CiAg
ICAgYm9vbCBtX2Nhbk9wdGltaXplRm9yU3RvcHBlZE11dGF0b3IgeyBmYWxzZSB9OwogICAgIExv
Y2sgbV9yaWdodFRvUnVuOwogICAgIAotICAgIENTdHJpbmcgbV9jb2RlTmFtZTsKKy8vICAgIENT
dHJpbmcgbV9jb2RlTmFtZTsKICAgICAKLSAgICBNYXJraW5nQ29uc3RyYWludCogbV9jdXJyZW50
Q29uc3RyYWludCB7IG51bGxwdHIgfTsKLSAgICBNYXJraW5nQ29uc3RyYWludFNvbHZlciogbV9j
dXJyZW50U29sdmVyIHsgbnVsbHB0ciB9OworLy8gICAgTWFya2luZ0NvbnN0cmFpbnQqIG1fY3Vy
cmVudENvbnN0cmFpbnQgeyBudWxscHRyIH07CisvLyAgICBNYXJraW5nQ29uc3RyYWludFNvbHZl
ciogbV9jdXJyZW50U29sdmVyIHsgbnVsbHB0ciB9OwogICAgIAogICAgIC8vIFB1dCBwYWRkaW5n
IGhlcmUgdG8gbWl0aWdhdGUgZmFsc2Ugc2hhcmluZyBiZXR3ZWVuIG11bHRpcGxlIFNsb3RWaXNp
dG9ycy4KICAgICBjaGFyIHBhZGRpbmdbNjRdOwotcHVibGljOgorLy9wdWJsaWM6CiAjaWYgQVNT
RVJUX0VOQUJMRUQKLSAgICBib29sIG1faXNDaGVja2luZ0ZvckRlZmF1bHRNYXJrVmlvbGF0aW9u
OwotICAgIGJvb2wgbV9pc0RyYWluaW5nOworICAgIGJvb2wgbV9pc0NoZWNraW5nRm9yRGVmYXVs
dE1hcmtWaW9sYXRpb24geyBmYWxzZSB9OworLy8gICAgYm9vbCBtX2lzRHJhaW5pbmc7CiAjZW5k
aWYKIH07CiAKQEAgLTI4NywyMyArMzE0LDIzIEBAIHByaXZhdGU6CiAgICAgU2xvdFZpc2l0b3Im
IG1fc3RhY2s7CiB9OwogCi1jbGFzcyBTZXRSb290TWFya1JlYXNvblNjb3BlIHsKLXB1YmxpYzoK
LSAgICBTZXRSb290TWFya1JlYXNvblNjb3BlKFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBTbG90Vmlz
aXRvcjo6Um9vdE1hcmtSZWFzb24gcmVhc29uKQotICAgICAgICA6IG1fdmlzaXRvcih2aXNpdG9y
KQotICAgICAgICAsIG1fcHJldmlvdXNSZWFzb24odmlzaXRvci5yb290TWFya1JlYXNvbigpKQot
ICAgIHsKLSAgICAgICAgbV92aXNpdG9yLnNldFJvb3RNYXJrUmVhc29uKHJlYXNvbik7Ci0gICAg
fQotCi0gICAgflNldFJvb3RNYXJrUmVhc29uU2NvcGUoKQotICAgIHsKLSAgICAgICAgbV92aXNp
dG9yLnNldFJvb3RNYXJrUmVhc29uKG1fcHJldmlvdXNSZWFzb24pOwotICAgIH0KLQotcHJpdmF0
ZToKLSAgICBTbG90VmlzaXRvciYgbV92aXNpdG9yOwotICAgIFNsb3RWaXNpdG9yOjpSb290TWFy
a1JlYXNvbiBtX3ByZXZpb3VzUmVhc29uOwotfTsKLQorLy9jbGFzcyBTZXRSb290TWFya1JlYXNv
blNjb3BlIHsKKy8vcHVibGljOgorLy8gICAgU2V0Um9vdE1hcmtSZWFzb25TY29wZShTbG90Vmlz
aXRvciYgdmlzaXRvciwgU2xvdFZpc2l0b3I6OlJvb3RNYXJrUmVhc29uIHJlYXNvbikKKy8vICAg
ICAgICA6IG1fdmlzaXRvcih2aXNpdG9yKQorLy8gICAgICAgICwgbV9wcmV2aW91c1JlYXNvbih2
aXNpdG9yLnJvb3RNYXJrUmVhc29uKCkpCisvLyAgICB7CisvLyAgICAgICAgbV92aXNpdG9yLnNl
dFJvb3RNYXJrUmVhc29uKHJlYXNvbik7CisvLyAgICB9CisvLworLy8gICAgflNldFJvb3RNYXJr
UmVhc29uU2NvcGUoKQorLy8gICAgeworLy8gICAgICAgIG1fdmlzaXRvci5zZXRSb290TWFya1Jl
YXNvbihtX3ByZXZpb3VzUmVhc29uKTsKKy8vICAgIH0KKy8vCisvL3ByaXZhdGU6CisvLyAgICBT
bG90VmlzaXRvciYgbV92aXNpdG9yOworLy8gICAgU2xvdFZpc2l0b3I6OlJvb3RNYXJrUmVhc29u
IG1fcHJldmlvdXNSZWFzb247CisvL307CisvLwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvcklubGluZXMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvcklubGluZXMuaAkocmV2
aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3JJ
bmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDkgKzI1LDEwIEBACiAKICNwcmFnbWEgb25j
ZQogCisjaW5jbHVkZSAiQWJzdHJhY3RTbG90VmlzaXRvcklubGluZXMuaCIKICNpbmNsdWRlICJT
bG90VmlzaXRvci5oIgotI2luY2x1ZGUgIldlYWsuaCIKLSNpbmNsdWRlICJXZWFrSW5saW5lcy5o
IgorLy8jaW5jbHVkZSAiV2Vhay5oIgorLy8jaW5jbHVkZSAiV2Vha0lubGluZXMuaCIKIAogbmFt
ZXNwYWNlIEpTQyB7CiAKQEAgLTk3LDQyICs5OCw0MiBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgU2xv
dFZpc2l0b3I6OmFwcGVuZEhpCiAgICAgYXBwZW5kSGlkZGVuU2xvdyhjZWxsLCBkZXBlbmRlbmN5
KTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLUFMV0FZU19JTkxJTkUgdm9pZCBTbG90Vmlz
aXRvcjo6YXBwZW5kKGNvbnN0IFdlYWs8VD4mIHdlYWspCi17Ci0gICAgYXBwZW5kVW5iYXJyaWVy
ZWQod2Vhay5nZXQoKSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFRyYWl0
cz4KLUFMV0FZU19JTkxJTkUgdm9pZCBTbG90VmlzaXRvcjo6YXBwZW5kKGNvbnN0IFdyaXRlQmFy
cmllckJhc2U8VCwgVHJhaXRzPiYgc2xvdCkKLXsKLSAgICBhcHBlbmRVbmJhcnJpZXJlZChzbG90
LmdldCgpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVHJhaXRzPgotQUxX
QVlTX0lOTElORSB2b2lkIFNsb3RWaXNpdG9yOjphcHBlbmRIaWRkZW4oY29uc3QgV3JpdGVCYXJy
aWVyQmFzZTxULCBUcmFpdHM+JiBzbG90KQotewotICAgIGFwcGVuZEhpZGRlblVuYmFycmllcmVk
KHNsb3QuZ2V0KCkpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBJdGVyYXRvcj4KLUFMV0FZU19J
TkxJTkUgdm9pZCBTbG90VmlzaXRvcjo6YXBwZW5kKEl0ZXJhdG9yIGJlZ2luLCBJdGVyYXRvciBl
bmQpCi17Ci0gICAgZm9yIChhdXRvIGl0ID0gYmVnaW47IGl0ICE9IGVuZDsgKytpdCkKLSAgICAg
ICAgYXBwZW5kKCppdCk7Ci19Ci0KLUFMV0FZU19JTkxJTkUgdm9pZCBTbG90VmlzaXRvcjo6YXBw
ZW5kVmFsdWVzKGNvbnN0IFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4qIGJhcnJpZXJzLCBzaXpl
X3QgY291bnQpCi17Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKQotICAg
ICAgICBhcHBlbmQoYmFycmllcnNbaV0pOwotfQotCi1BTFdBWVNfSU5MSU5FIHZvaWQgU2xvdFZp
c2l0b3I6OmFwcGVuZFZhbHVlc0hpZGRlbihjb25zdCBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+
KiBiYXJyaWVycywgc2l6ZV90IGNvdW50KQotewotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
Y291bnQ7ICsraSkKLSAgICAgICAgYXBwZW5kSGlkZGVuKGJhcnJpZXJzW2ldKTsKLX0KKy8vdGVt
cGxhdGU8dHlwZW5hbWUgVD4KKy8vQUxXQVlTX0lOTElORSB2b2lkIFNsb3RWaXNpdG9yOjphcHBl
bmQoY29uc3QgV2VhazxUPiYgd2VhaykKKy8veworLy8gICAgYXBwZW5kVW5iYXJyaWVyZWQod2Vh
ay5nZXQoKSk7CisvL30KKy8vCisvL3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFRyYWl0
cz4KKy8vQUxXQVlTX0lOTElORSB2b2lkIFNsb3RWaXNpdG9yOjphcHBlbmQoY29uc3QgV3JpdGVC
YXJyaWVyQmFzZTxULCBUcmFpdHM+JiBzbG90KQorLy97CisvLyAgICBhcHBlbmRVbmJhcnJpZXJl
ZChzbG90LmdldCgpKTsKKy8vfQorLy8KKy8vdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUg
VHJhaXRzPgorLy9BTFdBWVNfSU5MSU5FIHZvaWQgU2xvdFZpc2l0b3I6OmFwcGVuZEhpZGRlbihj
b25zdCBXcml0ZUJhcnJpZXJCYXNlPFQsIFRyYWl0cz4mIHNsb3QpCisvL3sKKy8vICAgIGFwcGVu
ZEhpZGRlblVuYmFycmllcmVkKHNsb3QuZ2V0KCkpOworLy99CisvLworLy90ZW1wbGF0ZTx0eXBl
bmFtZSBJdGVyYXRvcj4KKy8vQUxXQVlTX0lOTElORSB2b2lkIFNsb3RWaXNpdG9yOjphcHBlbmQo
SXRlcmF0b3IgYmVnaW4sIEl0ZXJhdG9yIGVuZCkKKy8veworLy8gICAgZm9yIChhdXRvIGl0ID0g
YmVnaW47IGl0ICE9IGVuZDsgKytpdCkKKy8vICAgICAgICBhcHBlbmQoKml0KTsKKy8vfQorCisv
L0FMV0FZU19JTkxJTkUgdm9pZCBTbG90VmlzaXRvcjo6YXBwZW5kVmFsdWVzKGNvbnN0IFdyaXRl
QmFycmllckJhc2U8VW5rbm93bj4qIGJhcnJpZXJzLCBzaXplX3QgY291bnQpCisvL3sKKy8vICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY291bnQ7ICsraSkKKy8vICAgICAgICBhcHBlbmQoYmFy
cmllcnNbaV0pOworLy99CisvLworLy9BTFdBWVNfSU5MSU5FIHZvaWQgU2xvdFZpc2l0b3I6OmFw
cGVuZFZhbHVlc0hpZGRlbihjb25zdCBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+KiBiYXJyaWVy
cywgc2l6ZV90IGNvdW50KQorLy97CisvLyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50
OyArK2kpCisvLyAgICAgICAgYXBwZW5kSGlkZGVuKGJhcnJpZXJzW2ldKTsKKy8vfQogCiBpbmxp
bmUgYm9vbCBTbG90VmlzaXRvcjo6YWRkT3BhcXVlUm9vdCh2b2lkKiBwdHIpCiB7CkBAIC0xNjks
MjAgKzE3MCwyMCBAQCBpbmxpbmUgdm9pZCBTbG90VmlzaXRvcjo6cmVwb3J0RXh0ZXJuYWxNCiB9
CiAjZW5kaWYKIAotaW5saW5lIEhlYXAqIFNsb3RWaXNpdG9yOjpoZWFwKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gJm1faGVhcDsKLX0KLQotaW5saW5lIFZNJiBTbG90VmlzaXRvcjo6dm0oKQotewot
ICAgIHJldHVybiBtX2hlYXAudm0oKTsKLX0KLQotaW5saW5lIGNvbnN0IFZNJiBTbG90VmlzaXRv
cjo6dm0oKSBjb25zdAotewotICAgIHJldHVybiBtX2hlYXAudm0oKTsKLX0KKy8vaW5saW5lIEhl
YXAqIFNsb3RWaXNpdG9yOjpoZWFwKCkgY29uc3QKKy8veworLy8gICAgcmV0dXJuICZtX2hlYXA7
CisvL30KKy8vCisvL2lubGluZSBWTSYgU2xvdFZpc2l0b3I6OnZtKCkKKy8veworLy8gICAgcmV0
dXJuIG1faGVhcC52bSgpOworLy99CisvLworLy9pbmxpbmUgY29uc3QgVk0mIFNsb3RWaXNpdG9y
Ojp2bSgpIGNvbnN0CisvL3sKKy8vICAgIHJldHVybiBtX2hlYXAudm0oKTsKKy8vfQogCiB0ZW1w
bGF0ZTx0eXBlbmFtZSBGdW5jPgogSXRlcmF0aW9uU3RhdHVzIFNsb3RWaXNpdG9yOjpmb3JFYWNo
TWFya1N0YWNrKGNvbnN0IEZ1bmMmIGZ1bmMpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9TbG90VmlzaXRvck1hY3Jvcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL1Nsb3RWaXNpdG9yTWFjcm9zLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3JNYWNyb3MuaAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDExNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNwcmFnbWEgb25jZQorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgQWJzdHJhY3RTbG90
VmlzaXRvcjsKK2NsYXNzIEpTQ2VsbDsKK2NsYXNzIFNsb3RWaXNpdG9yOworCisjZGVmaW5lIERF
Q0xBUkVfVU5VU0VEX1NMT1RfVklTSVRPUl9TVFJVQ1RfRVhQQU5ERVIyKGNvdW50ZXJfKSBcCisg
ICAgc3RydWN0IFVudXNlZFNsb3RWaXNpdG9yU3RydWN0U29XZUNhbkhhdmVBU2VtaWNvbG9uIyNj
b3VudGVyXyB7IH0KKworI2RlZmluZSBERUNMQVJFX1VOVVNFRF9TTE9UX1ZJU0lUT1JfU1RSVUNU
X0VYUEFOREVSKGNvdW50ZXJfKSBcCisgICAgREVDTEFSRV9VTlVTRURfU0xPVF9WSVNJVE9SX1NU
UlVDVF9FWFBBTkRFUjIoY291bnRlcl8pCisKKyNkZWZpbmUgREVDTEFSRV9VTlVTRURfU0xPVF9W
SVNJVE9SX1NUUlVDVCgpIFwKKyAgICBERUNMQVJFX1VOVVNFRF9TTE9UX1ZJU0lUT1JfU1RSVUNU
X0VYUEFOREVSKF9fQ09VTlRFUl9fKQorCisvLyBNYWNyb3MgZm9yIGluc3RhbmNlIGN1c3RvbSB2
aXNpdG9yIG1ldGhvZC4KKworI2RlZmluZSBERUNMQVJFX0lOU1RBTkNFX1NMT1RfVklTSVRPUl9N
RVRIT0RfSU1QTChyZXR1cm5UeXBlXywgbWV0aG9kTmFtZV8sIHBvc3RNb2RpZmllcl8pIFwKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiByZXR1cm5UeXBlXyBtZXRob2ROYW1lXyMjSW1w
bChWaXNpdG9yJiB2aXNpdG9yKTsgXAorICAgIHJldHVyblR5cGVfIG1ldGhvZE5hbWVfKFNsb3RW
aXNpdG9yJikgcG9zdE1vZGlmaWVyXzsgXAorICAgIHJldHVyblR5cGVfIG1ldGhvZE5hbWVfKEFi
c3RyYWN0U2xvdFZpc2l0b3ImKSBwb3N0TW9kaWZpZXJfOyBcCisgICAgREVDTEFSRV9VTlVTRURf
U0xPVF9WSVNJVE9SX1NUUlVDVCgpCisKKyNkZWZpbmUgREVDTEFSRV9JTlNUQU5DRV9TTE9UX1ZJ
U0lUT1JfTUVUSE9EKHJldHVyblR5cGVfLCBtZXRob2ROYW1lXykgXAorICAgIERFQ0xBUkVfSU5T
VEFOQ0VfU0xPVF9WSVNJVE9SX01FVEhPRF9JTVBMKHJldHVyblR5cGVfLCBtZXRob2ROYW1lXywg
KQorCisKKyNkZWZpbmUgREVGSU5FX0lOU1RBTkNFX1NMT1RfVklTSVRPUl9NRVRIT0QocmV0dXJu
VHlwZV8sIGNsYXNzTmFtZV8sIG1ldGhvZE5hbWVfKSBcCisgICAgcmV0dXJuVHlwZV8gY2xhc3NO
YW1lXzo6bWV0aG9kTmFtZV8oU2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsgbWV0aG9kTmFtZV8jI0lt
cGwodmlzaXRvcik7IH0gXAorICAgIHJldHVyblR5cGVfIGNsYXNzTmFtZV86Om1ldGhvZE5hbWVf
KEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpICB7IG1ldGhvZE5hbWVfIyNJbXBsKHZpc2l0
b3IpOyB9IFwKKyAgICBERUNMQVJFX1VOVVNFRF9TTE9UX1ZJU0lUT1JfU1RSVUNUKCkKKworLy8g
TWFjcm9zIGZvciBpbnN0YW5jZSB2aXNpdENoaWxkcmVuKCkuCisKKyNkZWZpbmUgREVDTEFSRV9J
TlNUQU5DRV9WSVNJVF9DSElMRFJFTiBcCisgICAgREVDTEFSRV9JTlNUQU5DRV9TTE9UX1ZJU0lU
T1JfTUVUSE9EKHZvaWQsIHZpc2l0Q2hpbGRyZW4pCisKKworI2RlZmluZSBERUZJTkVfSU5TVEFO
Q0VfVklTSVRfQ0hJTERSRU4oY2xhc3NOYW1lXykgXAorICAgIERFRklORV9JTlNUQU5DRV9TTE9U
X1ZJU0lUT1JfTUVUSE9EKHZvaWQsIGNsYXNzTmFtZV8sIHZpc2l0Q2hpbGRyZW4pCisKKy8vIE1h
Y3JvcyBmb3Igc3RhdGljIHZpc2l0Q2hpbGRyZW4oKS4KKworI2RlZmluZSBERUNMQVJFX1ZJU0lU
X0NISUxEUkVOX0lNUEwgXAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHN0YXRpYyB2
b2lkIHZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCosIFZpc2l0b3ImKQorCisjZGVmaW5lIERFQ0xB
UkVfVklTSVRfQ0hJTERSRU4gXAorICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU5fSU1QTDsgXAor
ICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBBYnN0cmFjdFNsb3RW
aXNpdG9yJiB2aXNpdG9yKTsgXAorICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKKworI2RlZmluZSBERUNMQVJFX0VYUE9SVF9W
SVNJVF9DSElMRFJFTiBcCisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTl9JTVBMOyBcCisgICAg
SlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBBYnN0
cmFjdFNsb3RWaXNpdG9yJik7IFwKKyAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCB2
aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJikKKworI2RlZmluZSBERUNMQVJFX0lO
TElORV9WSVNJVF9DSElMRFJFTiBcCisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTl9JTVBMOyBc
CisgICAgaW5saW5lIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgQWJzdHJhY3RT
bG90VmlzaXRvciYpOyBcCisgICAgaW5saW5lIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlND
ZWxsKiwgU2xvdFZpc2l0b3ImKQorCisjZGVmaW5lIERFQ0xBUkVfVEVNUExBVEVfVklTSVRfQ0hJ
TERSRU4gXAorICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU4KKworCisjZGVmaW5lIERFRklORV9W
SVNJVF9DSElMRFJFTihjbGFzc05hbWVfKSBcCisgICAgdm9pZCBjbGFzc05hbWVfOjp2aXNpdENo
aWxkcmVuKEpTQ2VsbCogY2VsbCwgQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikgeyB2aXNp
dENoaWxkcmVuSW1wbChjZWxsLCB2aXNpdG9yKTsgfSBcCisgICAgdm9pZCBjbGFzc05hbWVfOjp2
aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsgdmlzaXRD
aGlsZHJlbkltcGwoY2VsbCwgdmlzaXRvcik7IH0gXAorICAgIERFQ0xBUkVfVU5VU0VEX1NMT1Rf
VklTSVRPUl9TVFJVQ1QoKQorCisjZGVmaW5lIERFRklORV9FWFBPUlRfVklTSVRfQ0hJTERSRU4o
Y2xhc3NOYW1lXykgXAorICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgY2xhc3NOYW1lXzo6dmlz
aXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsg
dmlzaXRDaGlsZHJlbkltcGwoY2VsbCwgdmlzaXRvcik7IH0gXAorICAgIEpTX0VYUE9SVF9QUklW
QVRFIHZvaWQgY2xhc3NOYW1lXzo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNp
dG9yJiB2aXNpdG9yKSB7IHZpc2l0Q2hpbGRyZW5JbXBsKGNlbGwsIHZpc2l0b3IpOyB9IFwKKyAg
ICBERUNMQVJFX1VOVVNFRF9TTE9UX1ZJU0lUT1JfU1RSVUNUKCkKKworI2RlZmluZSBERUZJTkVf
SU5MSU5FX1ZJU0lUX0NISUxEUkVOKGNsYXNzTmFtZV8pIFwKKyAgICBpbmxpbmUgdm9pZCBjbGFz
c05hbWVfOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgQWJzdHJhY3RTbG90VmlzaXRvciYg
dmlzaXRvcikgeyB2aXNpdENoaWxkcmVuSW1wbChjZWxsLCB2aXNpdG9yKTsgfSBcCisgICAgaW5s
aW5lIHZvaWQgY2xhc3NOYW1lXzo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNp
dG9yJiB2aXNpdG9yKSB7IHZpc2l0Q2hpbGRyZW5JbXBsKGNlbGwsIHZpc2l0b3IpOyB9IFwKKyAg
ICBERUNMQVJFX1VOVVNFRF9TTE9UX1ZJU0lUT1JfU1RSVUNUKCkKKworI2RlZmluZSBERUZJTkVf
VEVNUExBVEVfVklTSVRfQ0hJTERSRU4odGVtcGxhdGVDbGF1c2VfLCBjbGFzc05hbWVfKSBcCisg
ICAgdGVtcGxhdGVDbGF1c2VfIHZvaWQgY2xhc3NOYW1lXzo6dmlzaXRDaGlsZHJlbihKU0NlbGwq
IGNlbGwsIEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsgdmlzaXRDaGlsZHJlbkltcGwo
Y2VsbCwgdmlzaXRvcik7IH0gXAorICAgIHRlbXBsYXRlQ2xhdXNlXyB2b2lkIGNsYXNzTmFtZV86
OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikgeyB2aXNp
dENoaWxkcmVuSW1wbChjZWxsLCB2aXNpdG9yKTsgfSBcCisgICAgREVDTEFSRV9VTlVTRURfU0xP
VF9WSVNJVE9SX1NUUlVDVCgpCisKK30gLy8gbmFtZXNwYWNlIEpTQworCit1c2luZyBKU0M6OkFi
c3RyYWN0U2xvdFZpc2l0b3I7Cit1c2luZyBKU0M6OkpTQ2VsbDsKK3VzaW5nIEpTQzo6U2xvdFZp
c2l0b3I7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdWJzcGFjZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N1YnNwYWNlLmgJKHJldmlzaW9u
IDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N1YnNwYWNlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTM0LDYgKzM0LDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKK2NsYXNzIEFi
c3RyYWN0U2xvdFZpc2l0b3I7IC8vIG1sYW0KIGNsYXNzIEFsaWduZWRNZW1vcnlBbGxvY2F0b3I7
CiBjbGFzcyBIZWFwQ2VsbFR5cGU7CiAKQEAgLTg3LDcgKzg4LDcgQEAgcHVibGljOgogICAgIHZv
aWQgZm9yRWFjaE1hcmtlZENlbGwoY29uc3QgRnVuYyYpOwogICAgIAogICAgIHRlbXBsYXRlPHR5
cGVuYW1lIEZ1bmM+Ci0gICAgUmVmPFNoYXJlZFRhc2s8dm9pZChTbG90VmlzaXRvciYpPj4gZm9y
RWFjaE1hcmtlZENlbGxJblBhcmFsbGVsKGNvbnN0IEZ1bmMmKTsKKyAgICBSZWY8U2hhcmVkVGFz
azx2b2lkKEFic3RyYWN0U2xvdFZpc2l0b3ImKT4+IGZvckVhY2hNYXJrZWRDZWxsSW5QYXJhbGxl
bChjb25zdCBGdW5jJik7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgogICAgIHZvaWQg
Zm9yRWFjaExpdmVDZWxsKGNvbnN0IEZ1bmMmKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL1N1YnNwYWNlSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL1N1YnNwYWNlSW5saW5lcy5oCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9TdWJzcGFjZUlubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAt
ODYsOSArODYsOSBAQCB2b2lkIFN1YnNwYWNlOjpmb3JFYWNoTWFya2VkQ2VsbChjb25zdCBGCiB9
CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+Ci1SZWY8U2hhcmVkVGFzazx2b2lkKFNsb3RWaXNp
dG9yJik+PiBTdWJzcGFjZTo6Zm9yRWFjaE1hcmtlZENlbGxJblBhcmFsbGVsKGNvbnN0IEZ1bmMm
IGZ1bmMpCitSZWY8U2hhcmVkVGFzazx2b2lkKEFic3RyYWN0U2xvdFZpc2l0b3ImKT4+IFN1YnNw
YWNlOjpmb3JFYWNoTWFya2VkQ2VsbEluUGFyYWxsZWwoY29uc3QgRnVuYyYgZnVuYykKIHsKLSAg
ICBjbGFzcyBUYXNrIGZpbmFsIDogcHVibGljIFNoYXJlZFRhc2s8dm9pZChTbG90VmlzaXRvciYp
PiB7CisgICAgY2xhc3MgVGFzayBmaW5hbCA6IHB1YmxpYyBTaGFyZWRUYXNrPHZvaWQoQWJzdHJh
Y3RTbG90VmlzaXRvciYpPiB7CiAgICAgcHVibGljOgogICAgICAgICBUYXNrKFN1YnNwYWNlJiBz
dWJzcGFjZSwgY29uc3QgRnVuYyYgZnVuYykKICAgICAgICAgICAgIDogbV9zdWJzcGFjZShzdWJz
cGFjZSkKQEAgLTk3LDcgKzk3LDcgQEAgUmVmPFNoYXJlZFRhc2s8dm9pZChTbG90VmlzaXRvciYp
Pj4gU3VicwogICAgICAgICB7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIHZvaWQgcnVu
KFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBmaW5hbAorICAgICAgICB2b2lkIHJ1bihBYnN0cmFjdFNs
b3RWaXNpdG9yJiB2aXNpdG9yKSBmaW5hbAogICAgICAgICB7CiAgICAgICAgICAgICB3aGlsZSAo
TWFya2VkQmxvY2s6OkhhbmRsZSogaGFuZGxlID0gbV9ibG9ja1NvdXJjZS0+cnVuKCkpIHsKICAg
ICAgICAgICAgICAgICBoYW5kbGUtPmZvckVhY2hNYXJrZWRDZWxsKApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvVmlzaXRDb3VudGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvVmlzaXRDb3VudGVyLmgJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Zpc2l0Q291bnRlci5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yNSw3ICsyNSw3IEBACiAKICNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSAiU2xvdFZpc2l0b3Iu
aCIKKyNpbmNsdWRlICJBYnN0cmFjdFNsb3RWaXNpdG9yLmgiCiAKIG5hbWVzcGFjZSBKU0Mgewog
CkBAIC0zMywxMyArMzMsMTMgQEAgY2xhc3MgVmlzaXRDb3VudGVyIHsKIHB1YmxpYzoKICAgICBW
aXNpdENvdW50ZXIoKSB7IH0KICAgICAKLSAgICBWaXNpdENvdW50ZXIoU2xvdFZpc2l0b3ImIHZp
c2l0b3IpCisgICAgVmlzaXRDb3VudGVyKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiAg
ICAgICAgIDogbV92aXNpdG9yKCZ2aXNpdG9yKQogICAgICAgICAsIG1faW5pdGlhbFZpc2l0Q291
bnQodmlzaXRvci52aXNpdENvdW50KCkpCiAgICAgewogICAgIH0KICAgICAKLSAgICBTbG90Vmlz
aXRvciYgdmlzaXRvcigpIGNvbnN0IHsgcmV0dXJuICptX3Zpc2l0b3I7IH0KKyAgICBBYnN0cmFj
dFNsb3RWaXNpdG9yJiB2aXNpdG9yKCkgY29uc3QgeyByZXR1cm4gKm1fdmlzaXRvcjsgfQogICAg
IAogICAgIHNpemVfdCB2aXNpdENvdW50KCkgY29uc3QKICAgICB7CkBAIC00Nyw3ICs0Nyw3IEBA
IHB1YmxpYzoKICAgICB9CiAgICAgCiBwcml2YXRlOgotICAgIFNsb3RWaXNpdG9yKiBtX3Zpc2l0
b3IgeyBudWxscHRyIH07CisgICAgQWJzdHJhY3RTbG90VmlzaXRvciogbV92aXNpdG9yIHsgbnVs
bHB0ciB9OwogICAgIHNpemVfdCBtX2luaXRpYWxWaXNpdENvdW50IHsgMCB9OwogfTsKIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha0Jsb2NrLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrQmxvY2suY3BwCShyZXZpc2lvbiAyNzE0
NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrQmxvY2suY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC05OCw4ICs5OCw4IEBAIHZvaWQgV2Vha0Jsb2NrOjpzd2VlcCgpCiAgICAgQVNT
RVJUKCFtX3N3ZWVwUmVzdWx0LmlzTnVsbCgpKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgQ29u
dGFpbmVyVHlwZT4KLXZvaWQgV2Vha0Jsb2NrOjpzcGVjaWFsaXplZFZpc2l0KENvbnRhaW5lclR5
cGUmIGNvbnRhaW5lciwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBD
b250YWluZXJUeXBlLCB0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBXZWFrQmxvY2s6OnNwZWNpYWxp
emVkVmlzaXQoQ29udGFpbmVyVHlwZSYgY29udGFpbmVyLCBWaXNpdG9yJiB2aXNpdG9yKQogewog
ICAgIEhlYXBWZXJzaW9uIG1hcmtpbmdWZXJzaW9uID0gdmlzaXRvci5tYXJraW5nVmVyc2lvbigp
OwogCkBAIC0xMzQsNyArMTM0LDkgQEAgdm9pZCBXZWFrQmxvY2s6OnNwZWNpYWxpemVkVmlzaXQo
Q29udGFpbgogICAgIH0KIH0KIAotdm9pZCBXZWFrQmxvY2s6OnZpc2l0KFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQorLy90ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgorLy92b2lkIFdlYWtCbG9jazo6
dmlzaXQoVmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgV2Vha0Jsb2NrOjp2aXNpdDEoQWJzdHJhY3RT
bG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICAvLyBJZiBhIGJsb2NrIGlzIGNvbXBsZXRlbHkg
ZW1wdHksIGEgdmlzaXQgd29uJ3QgaGF2ZSBhbnkgZWZmZWN0LgogICAgIGlmIChpc0VtcHR5KCkp
CkBAIC0xNDksNiArMTUxLDkgQEAgdm9pZCBXZWFrQmxvY2s6OnZpc2l0KFNsb3RWaXNpdG9yJiB2
aXNpdAogICAgICAgICBzcGVjaWFsaXplZFZpc2l0KG1fY29udGFpbmVyLm1hcmtlZEJsb2NrKCks
IHZpc2l0b3IpOwogfQogCisvL3RlbXBsYXRlIHZvaWQgV2Vha0Jsb2NrOjp2aXNpdChTbG90Vmlz
aXRvciYpOworLy90ZW1wbGF0ZSB2b2lkIFdlYWtCbG9jazo6dmlzaXQoRGVidWdTbG90VmlzaXRv
ciYpOworCiB2b2lkIFdlYWtCbG9jazo6cmVhcCgpCiB7CiAgICAgLy8gSWYgYSBibG9jayBpcyBj
b21wbGV0ZWx5IGVtcHR5LCBhIHJlYXBpbmcgd29uJ3QgaGF2ZSBhbnkgZWZmZWN0LgpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha0Jsb2NrLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha0Jsb2NrLmgJKHJldmlzaW9uIDI3MTQ0MykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zMiw4ICszMiw5IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCitjbGFzcyBBYnN0cmFjdFNsb3RW
aXNpdG9yOwogY2xhc3MgSGVhcDsKLWNsYXNzIFNsb3RWaXNpdG9yOworLy9jbGFzcyBTbG90Vmlz
aXRvcjsKIAogREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoV2Vha0Jsb2Nr
KTsKIApAQCAtNjUsNyArNjYsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzd2VlcCgpOwogICAgIFN3
ZWVwUmVzdWx0IHRha2VTd2VlcFJlc3VsdCgpOwogCi0gICAgdm9pZCB2aXNpdChTbG90VmlzaXRv
ciYpOworLy8gICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCB2aXNpdChWaXNpdG9y
Jik7CisgICAgdm9pZCB2aXNpdDEoQWJzdHJhY3RTbG90VmlzaXRvciYpOwogCiAgICAgdm9pZCBy
ZWFwKCk7CiAKQEAgLTc1LDggKzc3LDggQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBzdGF0aWMg
RnJlZUNlbGwqIGFzRnJlZUNlbGwoV2Vha0ltcGwqKTsKICAgICAKLSAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBDb250YWluZXJUeXBlPgotICAgIHZvaWQgc3BlY2lhbGl6ZWRWaXNpdChDb250YWluZXJU
eXBlJiwgU2xvdFZpc2l0b3ImKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDb250YWluZXJUeXBl
LCB0eXBlbmFtZSBWaXNpdG9yPgorICAgIHZvaWQgc3BlY2lhbGl6ZWRWaXNpdChDb250YWluZXJU
eXBlJiwgVmlzaXRvciYpOwogCiAgICAgZXhwbGljaXQgV2Vha0Jsb2NrKENlbGxDb250YWluZXIp
OwogICAgIHZvaWQgZmluYWxpemUoV2Vha0ltcGwqKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL1dlYWtIYW5kbGVPd25lci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvV2Vha0hhbmRsZU93bmVyLmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha0hhbmRsZU93bmVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzUsNyArMzUsNyBAQCBXZWFrSGFuZGxlT3duZXI6On5XZWFrSGFuZGxlT3duZXIo
KQogewogfQogCi1ib29sIFdlYWtIYW5kbGVPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9v
dHMoSGFuZGxlPFVua25vd24+LCB2b2lkKiwgU2xvdFZpc2l0b3ImLCBjb25zdCBjaGFyKiopCiti
b29sIFdlYWtIYW5kbGVPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSGFuZGxlPFVu
a25vd24+LCB2b2lkKiwgQWJzdHJhY3RTbG90VmlzaXRvciYsIGNvbnN0IGNoYXIqKikKIHsKICAg
ICByZXR1cm4gZmFsc2U7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFr
SGFuZGxlT3duZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9X
ZWFrSGFuZGxlT3duZXIuaAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvV2Vha0hhbmRsZU93bmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDEzICsyOSwx
MyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotY2xhc3MgU2xvdFZpc2l0b3I7CitjbGFzcyBBYnN0
cmFjdFNsb3RWaXNpdG9yOwogCiBjbGFzcyBKU19FWFBPUlRfUFJJVkFURSBXZWFrSGFuZGxlT3du
ZXIgewogcHVibGljOgogICAgIHZpcnR1YWwgfldlYWtIYW5kbGVPd25lcigpOwogICAgIC8vIHJl
YXNvbiB3aWxsIG9ubHkgYmUgbm9uLW51bGwgd2hlbiBnZW5lcmF0aW5nIGEgZGVidWcgR0MgaGVh
cCBzbmFwc2hvdC4KLSAgICB2aXJ0dWFsIGJvb2wgaXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMo
SGFuZGxlPFVua25vd24+LCB2b2lkKiBjb250ZXh0LCBTbG90VmlzaXRvciYsIGNoYXIgY29uc3Qq
KiByZWFzb24gPSBudWxscHRyKTsKKyAgICB2aXJ0dWFsIGJvb2wgaXNSZWFjaGFibGVGcm9tT3Bh
cXVlUm9vdHMoSGFuZGxlPFVua25vd24+LCB2b2lkKiBjb250ZXh0LCBBYnN0cmFjdFNsb3RWaXNp
dG9yJiwgY2hhciBjb25zdCoqIHJlYXNvbiA9IG51bGxwdHIpOwogICAgIHZpcnR1YWwgdm9pZCBm
aW5hbGl6ZShIYW5kbGU8VW5rbm93bj4sIHZvaWQqIGNvbnRleHQpOwogfTsKIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha0lubGluZXMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrSW5saW5lcy5oCShyZXZpc2lvbiAyNzE0NDMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrSW5saW5lcy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yNiw2ICsyNiw3IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkpTQ2FzdC5oIgor
I2luY2x1ZGUgIldlYWsuaCIKICNpbmNsdWRlICJXZWFrU2V0SW5saW5lcy5oIgogI2luY2x1ZGUg
PHd0Zi9Bc3NlcnRpb25zLmg+CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dl
YWtTZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrU2V0
LmgJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtT
ZXQuaAkod29ya2luZyBjb3B5KQpAQCAtNTEsNyArNTEsOCBAQCBwdWJsaWM6CiAgICAgYm9vbCBp
c0VtcHR5KCkgY29uc3Q7CiAgICAgYm9vbCBpc1RyaXZpYWxseURlc3RydWN0aWJsZSgpIGNvbnN0
OwogCi0gICAgdm9pZCB2aXNpdChTbG90VmlzaXRvciYpOworLy8gICAgdGVtcGxhdGU8dHlwZW5h
bWUgVmlzaXRvcj4gdm9pZCB2aXNpdChWaXNpdG9yJik7CisgICAgdm9pZCB2aXNpdDEoQWJzdHJh
Y3RTbG90VmlzaXRvciYpOwogCiAgICAgdm9pZCByZWFwKCk7CiAgICAgdm9pZCBzd2VlcCgpOwpA
QCAtMTE0LDEwICsxMTUsMTIgQEAgaW5saW5lIHZvaWQgV2Vha1NldDo6bGFzdENoYW5jZVRvRmlu
YWxpegogICAgICAgICBibG9jay0+bGFzdENoYW5jZVRvRmluYWxpemUoKTsKIH0KIAotaW5saW5l
IHZvaWQgV2Vha1NldDo6dmlzaXQoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3RlbXBsYXRlPHR5
cGVuYW1lIFZpc2l0b3I+CisvL2lubGluZSB2b2lkIFdlYWtTZXQ6OnZpc2l0KFZpc2l0b3ImIHZp
c2l0b3IpCitpbmxpbmUgdm9pZCBXZWFrU2V0Ojp2aXNpdDEoQWJzdHJhY3RTbG90VmlzaXRvciYg
dmlzaXRvcikKIHsKICAgICBmb3IgKFdlYWtCbG9jayogYmxvY2sgPSBtX2Jsb2Nrcy5oZWFkKCk7
IGJsb2NrOyBibG9jayA9IGJsb2NrLT5uZXh0KCkpCi0gICAgICAgIGJsb2NrLT52aXNpdCh2aXNp
dG9yKTsKKyAgICAgICAgYmxvY2stPnZpc2l0MSh2aXNpdG9yKTsKIH0KIAogaW5saW5lIHZvaWQg
V2Vha1NldDo6cmVhcCgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIv
U2hhZG93Q2hpY2tlbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
dGVycHJldGVyL1NoYWRvd0NoaWNrZW4uY3BwCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU2hhZG93Q2hpY2tlbi5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQ0MCw3ICs0NDAsNyBAQCB2b2lkIFNoYWRvd0NoaWNrZW46OnVwZGF0ZShWTSYgdm0s
IENhbGxGCiAgICAgICAgIGRhdGFMb2coIiAgICBBZnRlciBjbGVhbi11cDogIiwgKnRoaXMsICJc
biIpOwogfQogCi12b2lkIFNoYWRvd0NoaWNrZW46OnZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3Im
IHZpc2l0b3IpCit2b2lkIFNoYWRvd0NoaWNrZW46OnZpc2l0Q2hpbGRyZW4oQWJzdHJhY3RTbG90
VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2xvZ0N1cnNvciAt
IG1fbG9nOyBpLS07KSB7CiAgICAgICAgIEpTT2JqZWN0KiBjYWxsZWUgPSBtX2xvZ1tpXS5jYWxs
ZWU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU2hhZG93Q2hpY2tl
bi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TaGFk
b3dDaGlja2VuLmgJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnRlcnByZXRlci9TaGFkb3dDaGlja2VuLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDEzICszNSwx
MyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAorY2xhc3MgQWJzdHJhY3RTbG90VmlzaXRvcjsKIGNs
YXNzIENhbGxGcmFtZTsKIGNsYXNzIENvZGVCbG9jazsKIGNsYXNzIEpTQXJyYXk7CiBjbGFzcyBK
U09iamVjdDsKIGNsYXNzIEpTU2NvcGU7CiBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7Ci1j
bGFzcyBTbG90VmlzaXRvcjsKIGNsYXNzIFZNOwogCiAvLyBTaGFkb3dDaGlja2VuIGlzIGEgbG9n
IHRoYXQgY2FuIGJlIHVzZWQgdG8gcHJvZHVjZSBhIHNoYWRvdyBzdGFjayBvZiBDSElDS0VOLXN0
eWxlIHN0YWNrIGZyYW1lcy4KQEAgLTE5Niw3ICsxOTYsNyBAQCBwdWJsaWM6CiAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgRnVuY3Rvcj4KICAgICB2b2lkIGl0ZXJhdGUoVk0mLCBDYWxsRnJhbWUqLCBj
b25zdCBGdW5jdG9yJik7CiAgICAgCi0gICAgdm9pZCB2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9y
Jik7CisgICAgdm9pZCB2aXNpdENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKICAgICB2
b2lkIHJlc2V0KCk7CiAgICAgCiAgICAgLy8gSklUIHN1cHBvcnQuCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0dDQXdhcmVKSVRTdHViUm91dGluZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9HQ0F3YXJlSklUU3R1YlJvdXRpbmUuY3BwCShyZXZp
c2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0dDQXdhcmVKSVRTdHVi
Um91dGluZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTczLDEwICs3MywxNSBAQCB2b2lkIEdDQXdh
cmVKSVRTdHViUm91dGluZTo6ZGVsZXRlRnJvbUdDCiAgICAgZGVsZXRlIHRoaXM7CiB9CiAKLXZv
aWQgR0NBd2FyZUpJVFN0dWJSb3V0aW5lOjptYXJrUmVxdWlyZWRPYmplY3RzSW50ZXJuYWwoU2xv
dFZpc2l0b3ImKQorLy92b2lkIEdDQXdhcmVKSVRTdHViUm91dGluZTo6bWFya1JlcXVpcmVkT2Jq
ZWN0c0ludGVybmFsKFNsb3RWaXNpdG9yJikKK3ZvaWQgR0NBd2FyZUpJVFN0dWJSb3V0aW5lOjpt
YXJrUmVxdWlyZWRPYmplY3RzSW50ZXJuYWwxKEFic3RyYWN0U2xvdFZpc2l0b3ImKQogewogfQog
CisvL3ZvaWQgR0NBd2FyZUpJVFN0dWJSb3V0aW5lOjptYXJrUmVxdWlyZWRPYmplY3RzSW50ZXJu
YWwoRGVidWdTbG90VmlzaXRvciYpCisvL3sKKy8vfQorCiBNYXJraW5nR0NBd2FyZUpJVFN0dWJS
b3V0aW5lOjpNYXJraW5nR0NBd2FyZUpJVFN0dWJSb3V0aW5lKAogICAgIGNvbnN0IE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxKSVRTdHViUm91dGluZVB0clRhZz4mIGNvZGUsIFZNJiB2bSwgY29uc3Qg
SlNDZWxsKiBvd25lciwKICAgICBjb25zdCBWZWN0b3I8SlNDZWxsKj4mIGNlbGxzLCBCYWc8Q2Fs
bExpbmtJbmZvPiYmIGNhbGxMaW5rSW5mb3MpCkBAIC05MiwxMiArOTcsMTkgQEAgTWFya2luZ0dD
QXdhcmVKSVRTdHViUm91dGluZTo6fk1hcmtpbmdHQwogewogfQogCi12b2lkIE1hcmtpbmdHQ0F3
YXJlSklUU3R1YlJvdXRpbmU6Om1hcmtSZXF1aXJlZE9iamVjdHNJbnRlcm5hbChTbG90VmlzaXRv
ciYgdmlzaXRvcikKKy8vdm9pZCBNYXJraW5nR0NBd2FyZUpJVFN0dWJSb3V0aW5lOjptYXJrUmVx
dWlyZWRPYmplY3RzSW50ZXJuYWwoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIE1hcmtpbmdH
Q0F3YXJlSklUU3R1YlJvdXRpbmU6Om1hcmtSZXF1aXJlZE9iamVjdHNJbnRlcm5hbDEoQWJzdHJh
Y3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBmb3IgKGF1dG8mIGVudHJ5IDogbV9jZWxs
cykKICAgICAgICAgdmlzaXRvci5hcHBlbmQoZW50cnkpOwogfQogCisvLyBGSVhNRSBkZWR1cGU/
CisvL3ZvaWQgTWFya2luZ0dDQXdhcmVKSVRTdHViUm91dGluZTo6bWFya1JlcXVpcmVkT2JqZWN0
c0ludGVybmFsKERlYnVnU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3sKKy8vICAgIGZvciAoYXV0
byYgZW50cnkgOiBtX2NlbGxzKQorLy8gICAgICAgIHZpc2l0b3IuYXBwZW5kKGVudHJ5KTsKKy8v
fQogCiBHQ0F3YXJlSklUU3R1YlJvdXRpbmVXaXRoRXhjZXB0aW9uSGFuZGxlcjo6R0NBd2FyZUpJ
VFN0dWJSb3V0aW5lV2l0aEV4Y2VwdGlvbkhhbmRsZXIoCiAgICAgY29uc3QgTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiYgY29kZSwgVk0mIHZtLCAgY29uc3QgSlND
ZWxsKiBvd25lciwgY29uc3QgVmVjdG9yPEpTQ2VsbCo+JiBjZWxscywgQmFnPENhbGxMaW5rSW5m
bz4mJiBjYWxsTGlua0luZm9zLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9HQ0F3
YXJlSklUU3R1YlJvdXRpbmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0dDQXdhcmVKSVRTdHViUm91dGluZS5oCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0dDQXdhcmVKSVRTdHViUm91dGluZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC02MCwxMCArNjAsMTIgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKCpuZXcgR0NBd2FyZUpJVFN0dWJSb3V0aW5lKGNvZGUsIHZtKSk7CiAgICAgfQotICAgIAot
ICAgIHZvaWQgbWFya1JlcXVpcmVkT2JqZWN0cyhTbG90VmlzaXRvciYgdmlzaXRvcikKKworLy8g
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KKy8vICAgIHZvaWQgbWFya1JlcXVpcmVkT2Jq
ZWN0cyhWaXNpdG9yJiB2aXNpdG9yKQorICAgIHZvaWQgbWFya1JlcXVpcmVkT2JqZWN0czEoQWJz
dHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKICAgICB7Ci0gICAgICAgIG1hcmtSZXF1aXJlZE9i
amVjdHNJbnRlcm5hbCh2aXNpdG9yKTsKKyAgICAgICAgbWFya1JlcXVpcmVkT2JqZWN0c0ludGVy
bmFsMSh2aXNpdG9yKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBkZWxldGVGcm9tR0MoKTsKQEAg
LTcxLDcgKzczLDkgQEAgcHVibGljOgogcHJvdGVjdGVkOgogICAgIHZvaWQgb2JzZXJ2ZVplcm9S
ZWZDb3VudCgpIG92ZXJyaWRlOwogICAgIAotICAgIHZpcnR1YWwgdm9pZCBtYXJrUmVxdWlyZWRP
YmplY3RzSW50ZXJuYWwoU2xvdFZpc2l0b3ImKTsKKy8vICAgIHZpcnR1YWwgdm9pZCBtYXJrUmVx
dWlyZWRPYmplY3RzSW50ZXJuYWwoU2xvdFZpc2l0b3ImKTsKKy8vICAgIHZpcnR1YWwgdm9pZCBt
YXJrUmVxdWlyZWRPYmplY3RzSW50ZXJuYWwoRGVidWdTbG90VmlzaXRvciYpOworICAgIHZpcnR1
YWwgdm9pZCBtYXJrUmVxdWlyZWRPYmplY3RzSW50ZXJuYWwxKEFic3RyYWN0U2xvdFZpc2l0b3Im
KTsKIAogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgSklUU3R1YlJvdXRpbmVTZXQ7CkBAIC04
OSw3ICs5Myw5IEBAIHB1YmxpYzoKICAgICB+TWFya2luZ0dDQXdhcmVKSVRTdHViUm91dGluZSgp
IG92ZXJyaWRlOwogICAgIAogcHJvdGVjdGVkOgotICAgIHZvaWQgbWFya1JlcXVpcmVkT2JqZWN0
c0ludGVybmFsKFNsb3RWaXNpdG9yJikgb3ZlcnJpZGU7CisvLyAgICB2b2lkIG1hcmtSZXF1aXJl
ZE9iamVjdHNJbnRlcm5hbChTbG90VmlzaXRvciYpIG92ZXJyaWRlOworLy8gICAgdm9pZCBtYXJr
UmVxdWlyZWRPYmplY3RzSW50ZXJuYWwoRGVidWdTbG90VmlzaXRvciYpIG92ZXJyaWRlOworICAg
IHZvaWQgbWFya1JlcXVpcmVkT2JqZWN0c0ludGVybmFsMShBYnN0cmFjdFNsb3RWaXNpdG9yJikg
b3ZlcnJpZGU7CiAKIHByaXZhdGU6CiAgICAgVmVjdG9yPFdyaXRlQmFycmllcjxKU0NlbGw+PiBt
X2NlbGxzOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Qb2x5bW9ycGhpY0NhbGxT
dHViUm91dGluZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Q
b2x5bW9ycGhpY0NhbGxTdHViUm91dGluZS5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMzUsMTIgKzEzNSwyMCBAQCBib29sIFBvbHltb3JwaGljQ2FsbFN0dWJS
b3V0aW5lOjp2aXNpdFdlCiAgICAgcmV0dXJuIGlzU3RpbGxMaXZlOwogfQogCi12b2lkIFBvbHlt
b3JwaGljQ2FsbFN0dWJSb3V0aW5lOjptYXJrUmVxdWlyZWRPYmplY3RzSW50ZXJuYWwoU2xvdFZp
c2l0b3ImIHZpc2l0b3IpCisvL3ZvaWQgUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmU6Om1hcmtS
ZXF1aXJlZE9iamVjdHNJbnRlcm5hbChTbG90VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgUG9seW1v
cnBoaWNDYWxsU3R1YlJvdXRpbmU6Om1hcmtSZXF1aXJlZE9iamVjdHNJbnRlcm5hbDEoQWJzdHJh
Y3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBmb3IgKGF1dG8mIHZhcmlhbnQgOiBtX3Zh
cmlhbnRzKQogICAgICAgICB2aXNpdG9yLmFwcGVuZCh2YXJpYW50KTsKIH0KIAorLy8vLyBtbGFt
IEZJWE1FIGRlZHVwZT8/PworLy92b2lkIFBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lOjptYXJr
UmVxdWlyZWRPYmplY3RzSW50ZXJuYWwoRGVidWdTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vewor
Ly8gICAgZm9yIChhdXRvJiB2YXJpYW50IDogbV92YXJpYW50cykKKy8vICAgICAgICB2aXNpdG9y
LmFwcGVuZCh2YXJpYW50KTsKKy8vfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8v
IEVOQUJMRShKSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1BvbHltb3JwaGlj
Q2FsbFN0dWJSb3V0aW5lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9Qb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZS5oCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L1BvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEwNSw3ICsxMDUsOSBAQCBwdWJsaWM6CiAgICAgYm9vbCB2aXNpdFdlYWso
Vk0mKSBmaW5hbDsKIAogcHJpdmF0ZToKLSAgICB2b2lkIG1hcmtSZXF1aXJlZE9iamVjdHNJbnRl
cm5hbChTbG90VmlzaXRvciYpIGZpbmFsOworLy8gICAgdm9pZCBtYXJrUmVxdWlyZWRPYmplY3Rz
SW50ZXJuYWwoU2xvdFZpc2l0b3ImKSBmaW5hbDsKKy8vICAgIHZvaWQgbWFya1JlcXVpcmVkT2Jq
ZWN0c0ludGVybmFsKERlYnVnU2xvdFZpc2l0b3ImKSBmaW5hbDsKKyAgICB2b2lkIG1hcmtSZXF1
aXJlZE9iamVjdHNJbnRlcm5hbDEoQWJzdHJhY3RTbG90VmlzaXRvciYpIGZpbmFsOwogCiAgICAg
VmVjdG9yPFdyaXRlQmFycmllcjxKU0NlbGw+LCAyPiBtX3ZhcmlhbnRzOwogICAgIFVuaXF1ZUFy
cmF5PHVpbnQzMl90PiBtX2Zhc3RDb3VudHM7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9BYnN0cmFjdE1vZHVsZVJlY29yZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQWJzdHJhY3RNb2R1bGVSZWNvcmQuY3BwCShyZXZpc2lvbiAy
NzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BYnN0cmFjdE1vZHVsZVJl
Y29yZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYwLDcgKzYwLDggQEAgdm9pZCBBYnN0cmFjdE1v
ZHVsZVJlY29yZDo6ZmluaXNoQ3JlYXRpbwogICAgIHB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6
ZnJvbVN0cmluZyh2bSwgImRlcGVuZGVuY2llc01hcCJfcyksIG1fZGVwZW5kZW5jaWVzTWFwLmdl
dCgpKTsKIH0KIAotdm9pZCBBYnN0cmFjdE1vZHVsZVJlY29yZDo6dmlzaXRDaGlsZHJlbihKU0Nl
bGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRv
cj4KK3ZvaWQgQWJzdHJhY3RNb2R1bGVSZWNvcmQ6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCog
Y2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBBYnN0cmFjdE1vZHVsZVJlY29yZCogdGhp
c09iamVjdCA9IGpzQ2FzdDxBYnN0cmFjdE1vZHVsZVJlY29yZCo+KGNlbGwpOwogICAgIEFTU0VS
VF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTcwLDYgKzcxLDgg
QEAgdm9pZCBBYnN0cmFjdE1vZHVsZVJlY29yZDo6dmlzaXRDaGlsZHJlbgogICAgIHZpc2l0b3Iu
YXBwZW5kKHRoaXNPYmplY3QtPm1fZGVwZW5kZW5jaWVzTWFwKTsKIH0KIAorREVGSU5FX1ZJU0lU
X0NISUxEUkVOKEFic3RyYWN0TW9kdWxlUmVjb3JkKTsKKwogdm9pZCBBYnN0cmFjdE1vZHVsZVJl
Y29yZDo6YXBwZW5kUmVxdWVzdGVkTW9kdWxlKGNvbnN0IElkZW50aWZpZXImIG1vZHVsZU5hbWUp
CiB7CiAgICAgbV9yZXF1ZXN0ZWRNb2R1bGVzLmFkZChtb2R1bGVOYW1lLmltcGwoKSk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BYnN0cmFjdE1vZHVsZVJlY29yZC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Fic3RyYWN0TW9kdWxl
UmVjb3JkLmgJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0Fic3RyYWN0TW9kdWxlUmVjb3JkLmgJKHdvcmtpbmcgY29weSkKQEAgLTEzNiw3ICsxMzYs
NyBAQCBwcm90ZWN0ZWQ6CiAgICAgQWJzdHJhY3RNb2R1bGVSZWNvcmQoVk0mLCBTdHJ1Y3R1cmUq
LCBjb25zdCBJZGVudGlmaWVyJik7CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0dsb2JhbE9i
amVjdCosIFZNJik7CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNs
b3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIHZvaWQgc2V0
TW9kdWxlRW52aXJvbm1lbnQoSlNHbG9iYWxPYmplY3QqLCBKU01vZHVsZUVudmlyb25tZW50Kik7
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FyZ0xpc3QuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FyZ0xpc3QuY3BwCShyZXZp
c2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcmdMaXN0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNTEsNyArNTEsNyBAQCB2b2lkIEFyZ0xpc3Q6OmdldFNsaWNl
KGludCBzdGFydEluZGV4LCBBCiAgICAgcmVzdWx0Lm1fYXJnQ291bnQgPSAgbV9hcmdDb3VudCAt
IHN0YXJ0SW5kZXg7CiB9CiAKLXZvaWQgTWFya2VkQXJndW1lbnRCdWZmZXI6Om1hcmtMaXN0cyhT
bG90VmlzaXRvciYgdmlzaXRvciwgTGlzdFNldCYgbWFya1NldCkKK3ZvaWQgTWFya2VkQXJndW1l
bnRCdWZmZXI6Om1hcmtMaXN0cyhBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBMaXN0U2V0
JiBtYXJrU2V0KQogewogICAgIExpc3RTZXQ6Oml0ZXJhdG9yIGVuZCA9IG1hcmtTZXQuZW5kKCk7
CiAgICAgZm9yIChMaXN0U2V0OjppdGVyYXRvciBpdCA9IG1hcmtTZXQuYmVnaW4oKTsgaXQgIT0g
ZW5kOyArK2l0KSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcmdMaXN0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJnTGlzdC5o
CShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcmdM
aXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTExOCw3ICsxMTgsNyBAQCBwdWJsaWM6CiAgICAgICAg
IHJldHVybiByZXN1bHQ7CiAgICAgfQogICAgICAgICAKLSAgICBzdGF0aWMgdm9pZCBtYXJrTGlz
dHMoU2xvdFZpc2l0b3ImLCBMaXN0U2V0Jik7CisgICAgc3RhdGljIHZvaWQgbWFya0xpc3RzKEFi
c3RyYWN0U2xvdFZpc2l0b3ImLCBMaXN0U2V0Jik7CiAKICAgICB2b2lkIGVuc3VyZUNhcGFjaXR5
KHNpemVfdCByZXF1ZXN0ZWRDYXBhY2l0eSkKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9DYWNoZWFibGVJZGVudGlmaWVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVhYmxlSWRlbnRpZmllci5oCShyZXZpc2lvbiAy
NzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWFibGVJZGVudGlm
aWVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDEwICszOSwxMSBAQCB1c2luZyBXVEY6OlVuaXF1
ZWRTdHJpbmdJbXBsOwogCiBuYW1lc3BhY2UgSlNDIHsKIAorY2xhc3MgQWJzdHJhY3RTbG90Vmlz
aXRvcjsKIGNsYXNzIENvZGVCbG9jazsKIGNsYXNzIElkZW50aWZpZXI7CiBjbGFzcyBKU0NlbGw7
Ci1jbGFzcyBTbG90VmlzaXRvcjsKKy8vY2xhc3MgU2xvdFZpc2l0b3I7CiAKIGNsYXNzIENhY2hl
YWJsZUlkZW50aWZpZXIgewogcHVibGljOgpAQCAtODcsNyArODgsOCBAQCBwdWJsaWM6CiAKICAg
ICB1aW50cHRyX3QgcmF3Qml0cygpIGNvbnN0IHsgcmV0dXJuIG1fYml0czsgfQogCi0gICAgaW5s
aW5lIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImKSBjb25zdDsKKy8vICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFZpc2l0b3I+IGlubGluZSB2b2lkIHZpc2l0QWdncmVnYXRlKFZpc2l0b3Im
KSBjb25zdDsKKyAgICBpbmxpbmUgdm9pZCB2aXNpdEFnZ3JlZ2F0ZTEoQWJzdHJhY3RTbG90Vmlz
aXRvciYpIGNvbnN0OwogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBkdW1wKFByaW50U3Ry
ZWFtJikgY29uc3Q7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hl
YWJsZUlkZW50aWZpZXJJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQ2FjaGVhYmxlSWRlbnRpZmllcklubGluZXMuaAkocmV2aXNpb24gMjcxNDQz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVhYmxlSWRlbnRpZmllcklu
bGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMTM3LDEyICsxMzcsMTYgQEAgaW5saW5lIHZvaWQg
Q2FjaGVhYmxlSWRlbnRpZmllcjo6c2V0VWlkQgogICAgIG1fYml0cyA9IGJpdHdpc2VfY2FzdDx1
aW50cHRyX3Q+KHVpZCkgfCBzX3VpZFRhZzsKIH0KIAotaW5saW5lIHZvaWQgQ2FjaGVhYmxlSWRl
bnRpZmllcjo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0CisvL3Rl
bXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+CisvL2lubGluZSB2b2lkIENhY2hlYWJsZUlkZW50aWZp
ZXI6OnZpc2l0QWdncmVnYXRlKFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0CitpbmxpbmUgdm9pZCBD
YWNoZWFibGVJZGVudGlmaWVyOjp2aXNpdEFnZ3JlZ2F0ZTEoQWJzdHJhY3RTbG90VmlzaXRvciYg
dmlzaXRvcikgY29uc3QKIHsKICAgICBpZiAobV9iaXRzICYmIGlzQ2VsbCgpKQogICAgICAgICB2
aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKGNlbGwoKSk7CiB9CiAKKy8vdGVtcGxhdGUgdm9pZCBD
YWNoZWFibGVJZGVudGlmaWVyOjp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYpIGNvbnN0Owor
Ly90ZW1wbGF0ZSB2b2lkIENhY2hlYWJsZUlkZW50aWZpZXI6OnZpc2l0QWdncmVnYXRlKERlYnVn
U2xvdFZpc2l0b3ImKSBjb25zdDsKIAogaW5saW5lIGJvb2wgQ2FjaGVhYmxlSWRlbnRpZmllcjo6
b3BlcmF0b3I9PShjb25zdCBDYWNoZWFibGVJZGVudGlmaWVyJiBvdGhlcikgY29uc3QKIHsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NsYXNzSW5mby5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NsYXNzSW5mby5oCShyZXZpc2lvbiAy
NzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DbGFzc0luZm8uaAkod29y
a2luZyBjb3B5KQpAQCAtNDQsOSArNDQsNiBAQCBzdHJ1Y3QgTWV0aG9kVGFibGUgewogICAgIHVz
aW5nIERlc3Ryb3lGdW5jdGlvblB0ciA9IHZvaWQgKCopKEpTQ2VsbCopOwogICAgIERlc3Ryb3lG
dW5jdGlvblB0ciBNRVRIT0RfVEFCTEVfRU5UUlkoZGVzdHJveSk7CiAKLSAgICB1c2luZyBWaXNp
dENoaWxkcmVuRnVuY3Rpb25QdHIgPSB2b2lkICgqKShKU0NlbGwqLCBTbG90VmlzaXRvciYpOwot
ICAgIFZpc2l0Q2hpbGRyZW5GdW5jdGlvblB0ciBNRVRIT0RfVEFCTEVfRU5UUlkodmlzaXRDaGls
ZHJlbik7Ci0KICAgICB1c2luZyBHZXRDYWxsRGF0YUZ1bmN0aW9uUHRyID0gQ2FsbERhdGEgKCop
KEpTQ2VsbCopOwogICAgIEdldENhbGxEYXRhRnVuY3Rpb25QdHIgTUVUSE9EX1RBQkxFX0VOVFJZ
KGdldENhbGxEYXRhKTsKIApAQCAtMTIwLDcgKzExNywxOCBAQCBzdHJ1Y3QgTWV0aG9kVGFibGUg
ewogICAgIHVzaW5nIEVzdGltYXRlZFNpemVGdW5jdGlvblB0ciA9IHNpemVfdCAoKikoSlNDZWxs
KiwgVk0mKTsKICAgICBFc3RpbWF0ZWRTaXplRnVuY3Rpb25QdHIgTUVUSE9EX1RBQkxFX0VOVFJZ
KGVzdGltYXRlZFNpemUpOwogCi0gICAgdXNpbmcgVmlzaXRPdXRwdXRDb25zdHJhaW50c1B0ciA9
IHZvaWQgKCopKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgdXNpbmcgVmlzaXRDaGlsZHJl
bkZ1bmN0aW9uUHRyID0gdm9pZCAoKikoSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBWaXNp
dENoaWxkcmVuRnVuY3Rpb25QdHIgTUVUSE9EX1RBQkxFX0VOVFJZKHZpc2l0Q2hpbGRyZW5XaXRo
U2xvdFZpc2l0b3IpOworCisvLyAgICB1c2luZyBWaXNpdENoaWxkcmVuV2l0aERlYnVnU2xvdFZp
c2l0b3JQdHIgPSB2b2lkICgqKShKU0NlbGwqLCBEZWJ1Z1Nsb3RWaXNpdG9yJik7CisgICAgdXNp
bmcgVmlzaXRDaGlsZHJlbldpdGhBYnN0cmFjdFNsb3RWaXNpdG9yUHRyID0gdm9pZCAoKikoSlND
ZWxsKiwgQWJzdHJhY3RTbG90VmlzaXRvciYpOworICAgIFZpc2l0Q2hpbGRyZW5XaXRoQWJzdHJh
Y3RTbG90VmlzaXRvclB0ciBNRVRIT0RfVEFCTEVfRU5UUlkodmlzaXRDaGlsZHJlbldpdGhBYnN0
cmFjdFNsb3RWaXNpdG9yKTsKKworICAgIEFMV0FZU19JTkxJTkUgdm9pZCB2aXNpdENoaWxkcmVu
KEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0IHsgdmlzaXRDaGlsZHJl
bldpdGhTbG90VmlzaXRvcihjZWxsLCB2aXNpdG9yKTsgfQorLy8gICAgQUxXQVlTX0lOTElORSB2
b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBEZWJ1Z1Nsb3RWaXNpdG9yJiB2aXNpdG9y
KSBjb25zdCB7IHZpc2l0Q2hpbGRyZW5XaXRoRGVidWdTbG90VmlzaXRvcihjZWxsLCB2aXNpdG9y
KTsgfQorICAgIEFMV0FZU19JTkxJTkUgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwg
QWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikgY29uc3QgeyB2aXNpdENoaWxkcmVuV2l0aEFi
c3RyYWN0U2xvdFZpc2l0b3IoY2VsbCwgdmlzaXRvcik7IH0KKworICAgIHVzaW5nIFZpc2l0T3V0
cHV0Q29uc3RyYWludHNQdHIgPSB2b2lkICgqKShKU0NlbGwqLCBBYnN0cmFjdFNsb3RWaXNpdG9y
Jik7CiAgICAgVmlzaXRPdXRwdXRDb25zdHJhaW50c1B0ciBNRVRIT0RfVEFCTEVfRU5UUlkodmlz
aXRPdXRwdXRDb25zdHJhaW50cyk7CiB9OwogCkBAIC0xNDcsNyArMTU1LDYgQEAgc3RydWN0IE1l
dGhvZFRhYmxlIHsKICAgICBKU0Nhc3RpbmdIZWxwZXJzOjpJbmhlcml0c1RyYWl0czxDbGFzc05h
bWU+Ojp0eXBlUmFuZ2UsIFwKICAgICB7IFwKICAgICAgICAgJkNsYXNzTmFtZTo6ZGVzdHJveSwg
XAotICAgICAgICAmQ2xhc3NOYW1lOjp2aXNpdENoaWxkcmVuLCBcCiAgICAgICAgICZDbGFzc05h
bWU6OmdldENhbGxEYXRhLCBcCiAgICAgICAgICZDbGFzc05hbWU6OmdldENvbnN0cnVjdERhdGEs
IFwKICAgICAgICAgJkNsYXNzTmFtZTo6cHV0LCBcCkBAIC0xNzMsNiArMTgwLDggQEAgc3RydWN0
IE1ldGhvZFRhYmxlIHsKICAgICAgICAgJkNsYXNzTmFtZTo6ZHVtcFRvU3RyZWFtLCBcCiAgICAg
ICAgICZDbGFzc05hbWU6OmFuYWx5emVIZWFwLCBcCiAgICAgICAgICZDbGFzc05hbWU6OmVzdGlt
YXRlZFNpemUsIFwKKyAgICAgICAgJkNsYXNzTmFtZTo6dmlzaXRDaGlsZHJlbiwgXAorICAgICAg
ICAmQ2xhc3NOYW1lOjp2aXNpdENoaWxkcmVuLCBcCiAgICAgICAgICZDbGFzc05hbWU6OnZpc2l0
T3V0cHV0Q29uc3RyYWludHMsIFwKICAgICB9LCBcCiAgICAgQ2xhc3NOYW1lOjpUeXBlZEFycmF5
U3RvcmFnZVR5cGUsIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Nsb25l
ZEFyZ3VtZW50cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvQ2xvbmVkQXJndW1lbnRzLmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQ2xvbmVkQXJndW1lbnRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjY3LDcgKzI2Nyw4IEBAIHZvaWQgQ2xvbmVkQXJndW1lbnRzOjptYXRlcmlhbGl6ZVNwZWNpYWwK
ICAgICAgICAgbWF0ZXJpYWxpemVTcGVjaWFscyhnbG9iYWxPYmplY3QpOwogfQogCi12b2lkIENs
b25lZEFyZ3VtZW50czo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgQ2xvbmVkQXJndW1lbnRz
Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAg
ICAgQ2xvbmVkQXJndW1lbnRzKiB0aGlzT2JqZWN0ID0ganNDYXN0PENsb25lZEFyZ3VtZW50cyo+
KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygp
KTsKQEAgLTI3NSw1ICsyNzYsNyBAQCB2b2lkIENsb25lZEFyZ3VtZW50czo6dmlzaXRDaGlsZHJl
bihKU0NlCiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9jYWxsZWUpOwogfQogCitE
RUZJTkVfVklTSVRfQ0hJTERSRU4oQ2xvbmVkQXJndW1lbnRzKTsKKwogfSAvLyBuYW1lc3BhY2Ug
SlNDCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Nsb25lZEFyZ3VtZW50
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Nsb25lZEFy
Z3VtZW50cy5oCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9DbG9uZWRBcmd1bWVudHMuaAkod29ya2luZyBjb3B5KQpAQCAtNjIsNyArNjIsNyBAQCBw
dWJsaWM6CiAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiwgSlNHbG9i
YWxPYmplY3QqLCBKU1ZhbHVlIHByb3RvdHlwZSk7CiAgICAgc3RhdGljIFN0cnVjdHVyZSogY3Jl
YXRlU2xvd1B1dFN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBwcm90b3R5
cGUpOwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRv
ciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBERUNMQVJFX0lORk87CiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGlyZWN0QXJndW1l
bnRzLmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvRGlyZWN0QXJndW1lbnRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTAsNyArOTAsOCBAQCBz
aXplX3QgRGlyZWN0QXJndW1lbnRzOjplc3RpbWF0ZWRTaXplKEpTCiAgICAgcmV0dXJuIEJhc2U6
OmVzdGltYXRlZFNpemUoY2VsbCwgdm0pICsgbWFwcGVkQXJndW1lbnRzU2l6ZSArIG1vZGlmaWVk
QXJndW1lbnRzU2l6ZTsKIH0KIAotdm9pZCBEaXJlY3RBcmd1bWVudHM6OnZpc2l0Q2hpbGRyZW4o
SlNDZWxsKiB0aGlzQ2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBWaXNpdG9yPgordm9pZCBEaXJlY3RBcmd1bWVudHM6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2Vs
bCogdGhpc0NlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgRGlyZWN0QXJndW1lbnRzKiB0
aGlzT2JqZWN0ID0gc3RhdGljX2Nhc3Q8RGlyZWN0QXJndW1lbnRzKj4odGhpc0NlbGwpOwogICAg
IEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTEwNCw2
ICsxMDUsOCBAQCB2b2lkIERpcmVjdEFyZ3VtZW50czo6dmlzaXRDaGlsZHJlbihKU0NlCiAgICAg
R2VuZXJpY0FyZ3VtZW50czxEaXJlY3RBcmd1bWVudHM+Ojp2aXNpdENoaWxkcmVuKHRoaXNDZWxs
LCB2aXNpdG9yKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKERpcmVjdEFyZ3VtZW50cyk7
CisKIFN0cnVjdHVyZSogRGlyZWN0QXJndW1lbnRzOjpjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKIHsKICAgICBy
ZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBl
SW5mbyhEaXJlY3RBcmd1bWVudHNUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EaXJlY3RBcmd1bWVudHMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EaXJlY3RBcmd1bWVudHMuaAko
cmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGlyZWN0
QXJndW1lbnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTY1LDcgKzY1LDcgQEAgcHVibGljOgogICAg
IHN0YXRpYyBEaXJlY3RBcmd1bWVudHMqIGNyZWF0ZUJ5Q29weWluZyhKU0dsb2JhbE9iamVjdCos
IENhbGxGcmFtZSopOwogCiAgICAgc3RhdGljIHNpemVfdCBlc3RpbWF0ZWRTaXplKEpTQ2VsbCos
IFZNJik7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRv
ciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAgICAgCiAgICAgdWludDMyX3QgaW50
ZXJuYWxMZW5ndGgoKSBjb25zdAogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0V2YWxFeGVjdXRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9FdmFsRXhlY3V0YWJsZS5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V2YWxFeGVjdXRhYmxlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDksNyArNDksOCBAQCBhdXRvIEV2YWxFeGVjdXRhYmxlOjplbnN1cmVUZW1wbGF0
ZU9iamVjCiAgICAgcmV0dXJuIGVuc3VyZVRlbXBsYXRlT2JqZWN0TWFwSW1wbChtX3RlbXBsYXRl
T2JqZWN0TWFwKTsKIH0KIAotdm9pZCBFdmFsRXhlY3V0YWJsZTo6dmlzaXRDaGlsZHJlbihKU0Nl
bGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRv
cj4KK3ZvaWQgRXZhbEV4ZWN1dGFibGU6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwg
VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBFdmFsRXhlY3V0YWJsZSogdGhpc09iamVjdCA9IGpz
Q2FzdDxFdmFsRXhlY3V0YWJsZSo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJ
VFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTYzLDQgKzY0LDYgQEAgdm9pZCBFdmFsRXhlY3V0
YWJsZTo6dmlzaXRDaGlsZHJlbihKU0NlbAogICAgIH0KIH0KIAorREVGSU5FX1ZJU0lUX0NISUxE
UkVOKEV2YWxFeGVjdXRhYmxlKTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9FdmFsRXhlY3V0YWJsZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V2YWxFeGVjdXRhYmxlLmgJKHJldmlzaW9uIDI3
MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V2YWxFeGVjdXRhYmxlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTc4LDcgKzc4LDcgQEAgcHJvdGVjdGVkOgogICAgIHVzaW5nIEJh
c2U6OmZpbmlzaENyZWF0aW9uOwogICAgIEV2YWxFeGVjdXRhYmxlKEpTR2xvYmFsT2JqZWN0Kiwg
Y29uc3QgU291cmNlQ29kZSYsIGJvb2wgaW5TdHJpY3RDb250ZXh0LCBEZXJpdmVkQ29udGV4dFR5
cGUsIGJvb2wgaXNBcnJvd0Z1bmN0aW9uQ29udGV4dCwgYm9vbCBpc0luc2lkZU9yZGluYXJ5RnVu
Y3Rpb24sIEV2YWxDb250ZXh0VHlwZSwgTmVlZHNDbGFzc0ZpZWxkSW5pdGlhbGl6ZXIpOwogCi0g
ICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAg
IERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICB1bnNpZ25lZCBtX25lZWRzQ2xhc3NGaWVs
ZEluaXRpYWxpemVyIDogMTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
RXhjZXB0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9FeGNlcHRpb24uY3BwCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9FeGNlcHRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Myw3ICs1Myw4IEBA
IFN0cnVjdHVyZSogRXhjZXB0aW9uOjpjcmVhdGVTdHJ1Y3R1cmUoVk0KICAgICByZXR1cm4gU3Ry
dWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhDZWxs
VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwogfQogCi12b2lkIEV4Y2VwdGlvbjo6dmlz
aXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8
dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgRXhjZXB0aW9uOjp2aXNpdENoaWxkcmVuSW1wbChKU0Nl
bGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgRXhjZXB0aW9uKiB0aGlzT2JqZWN0
ID0ganNDYXN0PEV4Y2VwdGlvbio+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJ
VFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTY0LDYgKzY1LDggQEAgdm9pZCBFeGNlcHRpb246
OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZQogICAgICAgICBmcmFtZS52aXNpdENoaWxkcmVuKHZp
c2l0b3IpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oRXhjZXB0aW9uKTsKKwogRXhjZXB0
aW9uOjpFeGNlcHRpb24oVk0mIHZtKQogICAgIDogQmFzZSh2bSwgdm0uZXhjZXB0aW9uU3RydWN0
dXJlLmdldCgpKQogewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0
aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0
aW9uLmgJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0V4Y2VwdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC01MSw3ICs1MSw3IEBAIHB1YmxpYzoKIAog
ICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0
KiwgSlNWYWx1ZSBwcm90b3R5cGUpOwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihK
U0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAg
ICBERUNMQVJFX0VYUE9SVF9JTkZPOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9GdW5jdGlvbkV4ZWN1dGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZS5jcHAJKHJldmlzaW9uIDI3MTQ0MykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTY3LDcgKzY3LDggQEAgRnVuY3Rpb25Db2RlQmxvY2sqIEZ1bmN0
aW9uRXhlY3V0YWJsZTo6YgogICAgIHJldHVybiBzdGF0aWNfY2FzdDxGdW5jdGlvbkNvZGVCbG9j
ayo+KGVkZ2UtPmNvZGVCbG9jaygpLT5iYXNlbGluZUFsdGVybmF0aXZlKCkpOwogfQogCi12b2lk
IEZ1bmN0aW9uRXhlY3V0YWJsZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNp
dG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgRnVuY3Rpb25F
eGVjdXRhYmxlOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0
b3IpCiB7CiAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiB0aGlzT2JqZWN0ID0ganNDYXN0PEZ1bmN0
aW9uRXhlY3V0YWJsZSo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhp
c09iamVjdCwgaW5mbygpKTsKQEAgLTg2LDYgKzg3LDggQEAgdm9pZCBGdW5jdGlvbkV4ZWN1dGFi
bGU6OnZpc2l0Q2hpbGRyZW4oSgogICAgIH0KIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEZ1
bmN0aW9uRXhlY3V0YWJsZSk7CisKIEZ1bmN0aW9uRXhlY3V0YWJsZSogRnVuY3Rpb25FeGVjdXRh
YmxlOjpmcm9tR2xvYmFsQ29kZSgKICAgICBjb25zdCBJZGVudGlmaWVyJiBuYW1lLCBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIAogICAgIEpT
T2JqZWN0KiYgZXhjZXB0aW9uLCBpbnQgb3ZlcnJpZGVMaW5lTnVtYmVyLCBPcHRpb25hbDxpbnQ+
IGZ1bmN0aW9uQ29uc3RydWN0b3JQYXJhbWV0ZXJzRW5kUG9zaXRpb24pCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvbkV4ZWN1dGFibGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvbkV4ZWN1dGFibGUuaAkocmV2
aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25F
eGVjdXRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE2Niw3ICsxNjYsNyBAQCBwdWJsaWM6CiAg
ICAgSlNQYXJzZXJTY3JpcHRNb2RlIHNjcmlwdE1vZGUoKSBjb25zdCB7IHJldHVybiBtX3VubGlu
a2VkRXhlY3V0YWJsZS0+c2NyaXB0TW9kZSgpOyB9CiAgICAgU291cmNlQ29kZSBjbGFzc1NvdXJj
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdW5saW5rZWRFeGVjdXRhYmxlLT5jbGFzc1NvdXJjZSgpOyB9
CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7
CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVh
dGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVl
IHByb3RvKQogICAgIHsKICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9i
YWxPYmplY3QsIHByb3RvLCBUeXBlSW5mbyhGdW5jdGlvbkV4ZWN1dGFibGVUeXBlLCBTdHJ1Y3R1
cmVGbGFncyksIGluZm8oKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9G
dW5jdGlvblJhcmVEYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9GdW5jdGlvblJhcmVEYXRhLmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25SYXJlRGF0YS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTUxLDcgKzUxLDggQEAgU3RydWN0dXJlKiBGdW5jdGlvblJhcmVEYXRhOjpjcmVhdGVT
dHJ1YwogICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90
b3R5cGUsIFR5cGVJbmZvKENlbGxUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CiB9CiAK
LXZvaWQgRnVuY3Rpb25SYXJlRGF0YTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgRnVuY3Rp
b25SYXJlRGF0YTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNp
dG9yKQogewogICAgIEZ1bmN0aW9uUmFyZURhdGEqIHJhcmVEYXRhID0ganNDYXN0PEZ1bmN0aW9u
UmFyZURhdGEqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNlbGwsIGlu
Zm8oKSk7CkBAIC02Myw2ICs2NCw4IEBAIHZvaWQgRnVuY3Rpb25SYXJlRGF0YTo6dmlzaXRDaGls
ZHJlbihKU0MKICAgICB2aXNpdG9yLmFwcGVuZChyYXJlRGF0YS0+bV9leGVjdXRhYmxlKTsKIH0K
IAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEZ1bmN0aW9uUmFyZURhdGEpOworCiBGdW5jdGlvblJh
cmVEYXRhOjpGdW5jdGlvblJhcmVEYXRhKFZNJiB2bSwgRXhlY3V0YWJsZUJhc2UqIGV4ZWN1dGFi
bGUpCiAgICAgOiBCYXNlKHZtLCB2bS5mdW5jdGlvblJhcmVEYXRhU3RydWN0dXJlLmdldCgpKQog
ICAgICwgbV9vYmplY3RBbGxvY2F0aW9uUHJvZmlsZSgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9GdW5jdGlvblJhcmVEYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25SYXJlRGF0YS5oCShyZXZpc2lvbiAyNzE0NDMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvblJhcmVEYXRhLmgJKHdv
cmtpbmcgY29weSkKQEAgLTY1LDcgKzY1LDcgQEAgcHVibGljOgogCiAgICAgc3RhdGljIFN0cnVj
dHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlIHByb3Rv
dHlwZSk7CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNp
dG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIERFQ0xBUkVfSU5GTzsK
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50cy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNBcmd1
bWVudHMuaAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvR2VuZXJpY0FyZ3VtZW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCw3ICs0NCw3IEBAIHBy
b3RlY3RlZDoKICAgICB7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihK
U0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVEVNUExBVEVfVklTSVRfQ0hJTERS
RU47CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiwgSlNHbG9i
YWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwogICAgIHN0YXRpYyBib29s
IGdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIHVu
c2lnbmVkIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CiAgICAgc3RhdGljIHZvaWQgZ2V0
T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1l
QXJyYXkmLCBEb250RW51bVByb3BlcnRpZXNNb2RlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0dlbmVyaWNBcmd1bWVudHNJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50c0lubGluZXMuaAkocmV2
aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY0Fy
Z3VtZW50c0lubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsOCBAQAogbmFtZXNw
YWNlIEpTQyB7CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFR5cGU+Ci12b2lkIEdlbmVyaWNBcmd1bWVu
dHM8VHlwZT46OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiB0aGlzQ2VsbCwgU2xvdFZpc2l0b3ImIHZp
c2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBHZW5lcmljQXJndW1lbnRz
PFR5cGU+Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIHRoaXNDZWxsLCBWaXNpdG9yJiB2aXNp
dG9yKQogewogICAgIFR5cGUqIHRoaXNPYmplY3QgPSBzdGF0aWNfY2FzdDxUeXBlKj4odGhpc0Nl
bGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsK
QEAgLTQxLDYgKzQyLDggQEAgdm9pZCBHZW5lcmljQXJndW1lbnRzPFR5cGU+Ojp2aXNpdENoaWxk
cgogICAgICAgICB2aXNpdG9yLm1hcmtBdXhpbGlhcnkodGhpc09iamVjdC0+bV9tb2RpZmllZEFy
Z3VtZW50c0Rlc2NyaXB0b3IuZ2V0VW5zYWZlKCkpOwogfQogCitERUZJTkVfVEVNUExBVEVfVklT
SVRfQ0hJTERSRU4odGVtcGxhdGU8dHlwZW5hbWUgVHlwZT4sIEdlbmVyaWNBcmd1bWVudHM8VHlw
ZT4pOworCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlPgogYm9vbCBHZW5lcmljQXJndW1lbnRzPFR5
cGU+OjpnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqIG9iamVjdCwgSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lIGlkZW50LCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZXR0ZXJTZXR0ZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dldHRlclNldHRlci5j
cHAJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dl
dHRlclNldHRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDcgKzMzLDggQEAgU1RBVElDX0FT
U0VSVF9JU19UUklWSUFMTFlfREVTVFJVQ1RJQkxFKAogCiBjb25zdCBDbGFzc0luZm8gR2V0dGVy
U2V0dGVyOjpzX2luZm8gPSB7ICJHZXR0ZXJTZXR0ZXIiLCBudWxscHRyLCBudWxscHRyLCBudWxs
cHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEdldHRlclNldHRlcikgfTsKIAotdm9pZCBHZXR0ZXJT
ZXR0ZXI6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikK
K3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEdldHRlclNldHRlcjo6dmlzaXRDaGls
ZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEdldHRlclNl
dHRlciogdGhpc09iamVjdCA9IGpzQ2FzdDxHZXR0ZXJTZXR0ZXIqPihjZWxsKTsKICAgICBBU1NF
UlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC00Myw2ICs0NCw4
IEBAIHZvaWQgR2V0dGVyU2V0dGVyOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCoKICAgICB2aXNpdG9y
LmFwcGVuZCh0aGlzT2JqZWN0LT5tX3NldHRlcik7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJF
TihHZXR0ZXJTZXR0ZXIpOworCiBKU1ZhbHVlIGNhbGxHZXR0ZXIoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgSlNWYWx1ZSBiYXNlLCBKU1ZhbHVlIGdldHRlclNldHRlcikKIHsKICAgICBW
TSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9HZXR0ZXJTZXR0ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9HZXR0ZXJTZXR0ZXIuaAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvR2V0dGVyU2V0dGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTgy
LDcgKzgyLDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gY3JlYXRlKHZtLCBnbG9iYWxPYmpl
Y3QsIGdldHRlck9iamVjdCwgc2V0dGVyT2JqZWN0KTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9p
ZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJ
VF9DSElMRFJFTjsKIAogICAgIEpTT2JqZWN0KiBnZXR0ZXIoKSBjb25zdCB7IHJldHVybiBtX2dl
dHRlci5nZXQoKTsgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9IYXNo
TWFwSW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SGFzaE1hcEltcGwuY3BwCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9IYXNoTWFwSW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDkg
QEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKK0RFRklORV9URU1QTEFURV9WSVNJVF9DSElMRFJFTih0
ZW1wbGF0ZTw+LCBIYXNoTWFwQnVja2V0PEhhc2hNYXBCdWNrZXREYXRhS2V5Pik7CitERUZJTkVf
VEVNUExBVEVfVklTSVRfQ0hJTERSRU4odGVtcGxhdGU8PiwgSGFzaE1hcEJ1Y2tldDxIYXNoTWFw
QnVja2V0RGF0YUtleVZhbHVlPik7CisKIHRlbXBsYXRlPD4KIGNvbnN0IENsYXNzSW5mbyBIYXNo
TWFwQnVja2V0PEhhc2hNYXBCdWNrZXREYXRhS2V5Pjo6c19pbmZvID0KICAgICB7ICJIYXNoTWFw
QnVja2V0IiwgbnVsbHB0ciwgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShI
YXNoTWFwQnVja2V0PEhhc2hNYXBCdWNrZXREYXRhS2V5PikgfTsKQEAgLTM4LDggKzQxLDkgQEAg
dGVtcGxhdGU8PgogY29uc3QgQ2xhc3NJbmZvIEhhc2hNYXBCdWNrZXQ8SGFzaE1hcEJ1Y2tldERh
dGFLZXlWYWx1ZT46OnNfaW5mbyA9CiAgICAgeyAiSGFzaE1hcEJ1Y2tldCIsIG51bGxwdHIsIG51
bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSGFzaE1hcEJ1Y2tldDxIYXNoTWFw
QnVja2V0RGF0YUtleVZhbHVlPikgfTsKIAotdGVtcGxhdGUgPHR5cGVuYW1lIERhdGE+Ci12b2lk
IEhhc2hNYXBCdWNrZXQ8RGF0YT46OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90Vmlz
aXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIERhdGE+Cit0ZW1wbGF0ZTx0eXBlbmFt
ZSBWaXNpdG9yPgordm9pZCBIYXNoTWFwQnVja2V0PERhdGE+Ojp2aXNpdENoaWxkcmVuSW1wbChK
U0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSGFzaE1hcEJ1Y2tldCogdGhp
c09iamVjdCA9IGpzQ2FzdDxIYXNoTWFwQnVja2V0Kj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09C
SkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNTIsOCArNTYsOSBAQCB2b2lk
IEhhc2hNYXBCdWNrZXQ8RGF0YT46OnZpc2l0Q2hpbGRyZW4oCiAgICAgdmlzaXRvci5hcHBlbmRW
YWx1ZXMoYml0d2lzZV9jYXN0PFdyaXRlQmFycmllcjxVbmtub3duPio+KCZ0aGlzT2JqZWN0LT5t
X2RhdGEpLCBzaXplb2YoRGF0YSkgLyBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSk7CiB9
CiAKLXRlbXBsYXRlIDx0eXBlbmFtZSBIYXNoTWFwQnVja2V0Pgotdm9pZCBIYXNoTWFwSW1wbDxI
YXNoTWFwQnVja2V0Pjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgSGFzaE1hcEJ1Y2tldD4KK3RlbXBsYXRlPHR5cGVu
YW1lIFZpc2l0b3I+Cit2b2lkIEhhc2hNYXBJbXBsPEhhc2hNYXBCdWNrZXQ+Ojp2aXNpdENoaWxk
cmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSGFzaE1hcElt
cGwqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SGFzaE1hcEltcGwqPihjZWxsKTsKICAgICBBU1NFUlRf
R0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC02Niw2ICs3MSw4IEBA
IHZvaWQgSGFzaE1hcEltcGw8SGFzaE1hcEJ1Y2tldD46OnZpc2l0Q2gKICAgICAgICAgdmlzaXRv
ci5tYXJrQXV4aWxpYXJ5KGJ1ZmZlcik7CiB9CiAKK0RFRklORV9URU1QTEFURV9WSVNJVF9DSElM
RFJFTih0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoTWFwQnVja2V0PiwgSGFzaE1hcEltcGw8SGFzaE1h
cEJ1Y2tldD4pOworCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgSGFzaE1hcEJ1Y2tldD4KIHNpemVfdCBI
YXNoTWFwSW1wbDxIYXNoTWFwQnVja2V0Pjo6ZXN0aW1hdGVkU2l6ZShKU0NlbGwqIGNlbGwsIFZN
JiB2bSkKIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0hhc2hNYXBJbXBs
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSGFzaE1hcElt
cGwuaAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SGFzaE1hcEltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtMTQ4LDcgKzE0OCw3IEBAIHB1YmxpYzoK
ICAgICAgICAgcmV0dXJuIG1fZGF0YS52YWx1ZS5nZXQoKTsKICAgICB9CiAKLSAgICBzdGF0aWMg
dm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9U
RU1QTEFURV9WSVNJVF9DSElMRFJFTjsKIAogICAgIEFMV0FZU19JTkxJTkUgSGFzaE1hcEJ1Y2tl
dCogbmV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fbmV4dC5nZXQoKTsgfQogICAgIEFMV0FZU19JTkxJ
TkUgSGFzaE1hcEJ1Y2tldCogcHJldigpIGNvbnN0IHsgcmV0dXJuIG1fcHJldi5nZXQoKTsgfQpA
QCAtMzY0LDcgKzM2NCw3IEBAIGNsYXNzIEhhc2hNYXBJbXBsIDogcHVibGljIEpTTm9uRmluYWxP
YmoKIHB1YmxpYzoKICAgICB1c2luZyBCdWNrZXRUeXBlID0gSGFzaE1hcEJ1Y2tldFR5cGU7CiAK
LSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7Cisg
ICAgREVDTEFSRV9URU1QTEFURV9WSVNJVF9DSElMRFJFTjsKIAogICAgIHN0YXRpYyBzaXplX3Qg
ZXN0aW1hdGVkU2l6ZShKU0NlbGwqLCBWTSYpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9JbnRlcm5hbEZ1bmN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9JbnRlcm5hbEZ1bmN0aW9uLmNwcAkocmV2aXNpb24gMjcxNDQz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50ZXJuYWxGdW5jdGlvbi5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTY0LDcgKzY0LDggQEAgdm9pZCBJbnRlcm5hbEZ1bmN0aW9uOjpm
aW5pc2hDcmVhdGlvbihWTQogICAgIH0KIH0KIAotdm9pZCBJbnRlcm5hbEZ1bmN0aW9uOjp2aXNp
dENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0
eXBlbmFtZSBWaXNpdG9yPgordm9pZCBJbnRlcm5hbEZ1bmN0aW9uOjp2aXNpdENoaWxkcmVuSW1w
bChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSW50ZXJuYWxGdW5jdGlv
biogdGhpc09iamVjdCA9IGpzQ2FzdDxJbnRlcm5hbEZ1bmN0aW9uKj4oY2VsbCk7CiAgICAgQVNT
RVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNzMsNiArNzQs
OCBAQCB2b2lkIEludGVybmFsRnVuY3Rpb246OnZpc2l0Q2hpbGRyZW4oSlNDCiAgICAgdmlzaXRv
ci5hcHBlbmQodGhpc09iamVjdC0+bV9vcmlnaW5hbE5hbWUpOwogfQogCitERUZJTkVfRVhQT1JU
X1ZJU0lUX0NISUxEUkVOKEludGVybmFsRnVuY3Rpb24pOworCiBjb25zdCBTdHJpbmcmIEludGVy
bmFsRnVuY3Rpb246Om5hbWUoKQogewogICAgIGNvbnN0IFN0cmluZyYgbmFtZSA9IG1fb3JpZ2lu
YWxOYW1lLT50cnlHZXRWYWx1ZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSW50ZXJuYWxGdW5jdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0ludGVybmFsRnVuY3Rpb24uaAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50ZXJuYWxGdW5jdGlvbi5oCSh3b3JraW5nIGNvcHkp
CkBAIC00Niw3ICs0Niw3IEBAIHB1YmxpYzoKIAogICAgIERFQ0xBUkVfRVhQT1JUX0lORk87CiAK
LSAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCos
IFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9FWFBPUlRfVklTSVRfQ0hJTERSRU47CiAKICAg
ICBKU19FWFBPUlRfUFJJVkFURSBjb25zdCBTdHJpbmcmIG5hbWUoKTsKICAgICBjb25zdCBTdHJp
bmcgZGlzcGxheU5hbWUoVk0mKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0ludGxDb2xsYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSW50bENvbGxhdG9yLmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSW50bENvbGxhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjUs
NyArNjUsOCBAQCB2b2lkIEludGxDb2xsYXRvcjo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtCiAgICAg
QVNTRVJUKGluaGVyaXRzKHZtLCBpbmZvKCkpKTsKIH0KIAotdm9pZCBJbnRsQ29sbGF0b3I6OnZp
c2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRl
PHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEludGxDb2xsYXRvcjo6dmlzaXRDaGlsZHJlbkltcGwo
SlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEludGxDb2xsYXRvciogdGhp
c09iamVjdCA9IGpzQ2FzdDxJbnRsQ29sbGF0b3IqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JK
RUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC03NSw2ICs3Niw4IEBAIHZvaWQg
SW50bENvbGxhdG9yOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCoKICAgICB2aXNpdG9yLmFwcGVuZCh0
aGlzT2JqZWN0LT5tX2JvdW5kQ29tcGFyZSk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihJ
bnRsQ29sbGF0b3IpOworCiBWZWN0b3I8U3RyaW5nPiBJbnRsQ29sbGF0b3I6OnNvcnRMb2NhbGVE
YXRhKGNvbnN0IFN0cmluZyYgbG9jYWxlLCBSZWxldmFudEV4dGVuc2lvbktleSBrZXkpCiB7CiAg
ICAgLy8gOS4xIEludGVybmFsIHNsb3RzIG9mIFNlcnZpY2UgQ29uc3RydWN0b3JzICYgMTAuMi4z
IEludGVybmFsIHNsb3RzIChFQ01BLTQwMiAyLjApCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9JbnRsQ29sbGF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9JbnRsQ29sbGF0b3IuaAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bENvbGxhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAg
LTgwLDcgKzgwLDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBJbnRsQ29sbGF0b3IoVk0mLCBT
dHJ1Y3R1cmUqKTsKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7Ci0gICAgc3RhdGljIHZv
aWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklT
SVRfQ0hJTERSRU47CiAKICAgICBib29sIHVwZGF0ZUNhbkRvQVNDSUlVQ0FEVUNFVENvbXBhcmlz
b24oKSBjb25zdDsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERh
dGVUaW1lRm9ybWF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9JbnRsRGF0ZVRpbWVGb3JtYXQuY3BwCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsRGF0ZVRpbWVGb3JtYXQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC05MCw3ICs5MCw4IEBAIHZvaWQgSW50bERhdGVUaW1lRm9ybWF0OjpmaW5pc2hDcmVh
dGlvbigKICAgICBBU1NFUlQoaW5oZXJpdHModm0sIGluZm8oKSkpOwogfQogCi12b2lkIEludGxE
YXRlVGltZUZvcm1hdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSW50bERhdGVUaW1lRm9y
bWF0Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7
CiAgICAgSW50bERhdGVUaW1lRm9ybWF0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEludGxEYXRlVGlt
ZUZvcm1hdCo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVj
dCwgaW5mbygpKTsKQEAgLTEwMCw2ICsxMDEsOCBAQCB2b2lkIEludGxEYXRlVGltZUZvcm1hdDo6
dmlzaXRDaGlsZHJlbihKCiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9ib3VuZEZv
cm1hdCk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihJbnRsRGF0ZVRpbWVGb3JtYXQpOwor
CiB2b2lkIEludGxEYXRlVGltZUZvcm1hdDo6c2V0Qm91bmRGb3JtYXQoVk0mIHZtLCBKU0JvdW5k
RnVuY3Rpb24qIGZvcm1hdCkKIHsKICAgICBtX2JvdW5kRm9ybWF0LnNldCh2bSwgdGhpcywgZm9y
bWF0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxEYXRlVGltZUZv
cm1hdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxE
YXRlVGltZUZvcm1hdC5oCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9JbnRsRGF0ZVRpbWVGb3JtYXQuaAkod29ya2luZyBjb3B5KQpAQCAtODUsNyAr
ODUsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIEludGxEYXRlVGltZUZvcm1hdChWTSYsIFN0
cnVjdHVyZSopOwogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKLSAgICBzdGF0aWMgdm9p
ZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJ
VF9DSElMRFJFTjsKIAogICAgIHN0YXRpYyBWZWN0b3I8U3RyaW5nPiBsb2NhbGVEYXRhKGNvbnN0
IFN0cmluZyYsIFJlbGV2YW50RXh0ZW5zaW9uS2V5KTsKIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSW50bExvY2FsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSW50bExvY2FsZS5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxMb2NhbGUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC01OCw3ICs1OCw4IEBAIHZvaWQgSW50bExvY2FsZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZt
KQogICAgIEFTU0VSVChpbmhlcml0cyh2bSwgaW5mbygpKSk7CiB9CiAKLXZvaWQgSW50bExvY2Fs
ZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVt
cGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSW50bExvY2FsZTo6dmlzaXRDaGlsZHJlbklt
cGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGF1dG8qIHRoaXNPYmpl
Y3QgPSBqc0Nhc3Q8SW50bExvY2FsZSo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5I
RVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTY2LDYgKzY3LDggQEAgdm9pZCBJbnRsTG9j
YWxlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogYwogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhp
c09iamVjdCwgdmlzaXRvcik7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihJbnRsTG9jYWxl
KTsKKwogY2xhc3MgTG9jYWxlSURCdWlsZGVyIGZpbmFsIHsKIHB1YmxpYzoKICAgICBib29sIGlu
aXRpYWxpemUoY29uc3QgU3RyaW5nJik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9JbnRsTG9jYWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSW50bExvY2FsZS5oCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9JbnRsTG9jYWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTcxLDcgKzcxLDcg
QEAgcHVibGljOgogcHJpdmF0ZToKICAgICBJbnRsTG9jYWxlKFZNJiwgU3RydWN0dXJlKik7CiAg
ICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOwotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwog
CiAgICAgU3RyaW5nIGtleXdvcmRWYWx1ZShBU0NJSUxpdGVyYWwsIGJvb2wgaXNCb29sZWFuID0g
ZmFsc2UpIGNvbnN0OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRs
TnVtYmVyRm9ybWF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9JbnRsTnVtYmVyRm9ybWF0LmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE51bWJlckZvcm1hdC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTczLDcgKzczLDggQEAgdm9pZCBJbnRsTnVtYmVyRm9ybWF0OjpmaW5pc2hDcmVhdGlvbihW
TQogICAgIEFTU0VSVChpbmhlcml0cyh2bSwgaW5mbygpKSk7CiB9CiAKLXZvaWQgSW50bE51bWJl
ckZvcm1hdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9y
KQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSW50bE51bWJlckZvcm1hdDo6dmlz
aXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIElu
dGxOdW1iZXJGb3JtYXQqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SW50bE51bWJlckZvcm1hdCo+KGNl
bGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsK
QEAgLTgzLDYgKzg0LDggQEAgdm9pZCBJbnRsTnVtYmVyRm9ybWF0Ojp2aXNpdENoaWxkcmVuKEpT
QwogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fYm91bmRGb3JtYXQpOwogfQogCitE
RUZJTkVfVklTSVRfQ0hJTERSRU4oSW50bE51bWJlckZvcm1hdCk7CisKIFZlY3RvcjxTdHJpbmc+
IEludGxOdW1iZXJGb3JtYXQ6OmxvY2FsZURhdGEoY29uc3QgU3RyaW5nJiBsb2NhbGUsIFJlbGV2
YW50RXh0ZW5zaW9uS2V5IGtleSkKIHsKICAgICAvLyA5LjEgSW50ZXJuYWwgc2xvdHMgb2YgU2Vy
dmljZSBDb25zdHJ1Y3RvcnMgJiAxMS4yLjMgSW50ZXJuYWwgc2xvdHMgKEVDTUEtNDAyIDIuMCkK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxOdW1iZXJGb3JtYXQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTnVtYmVyRm9y
bWF0LmgJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0ludGxOdW1iZXJGb3JtYXQuaAkod29ya2luZyBjb3B5KQpAQCAtOTYsNyArOTYsNyBAQCBwdWJs
aWM6CiBwcml2YXRlOgogICAgIEludGxOdW1iZXJGb3JtYXQoVk0mLCBTdHJ1Y3R1cmUqKTsKICAg
ICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJl
bihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAK
ICAgICBzdGF0aWMgVmVjdG9yPFN0cmluZz4gbG9jYWxlRGF0YShjb25zdCBTdHJpbmcmLCBSZWxl
dmFudEV4dGVuc2lvbktleSk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0ludGxQbHVyYWxSdWxlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSW50bFBsdXJhbFJ1bGVzLmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFBsdXJhbFJ1bGVzLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNjEsNyArNjEsOCBAQCB2b2lkIEludGxQbHVyYWxSdWxlczo6ZmluaXNoQ3JlYXRpb24o
Vk0mCiAgICAgQVNTRVJUKGluaGVyaXRzKHZtLCBpbmZvKCkpKTsKIH0KIAotdm9pZCBJbnRsUGx1
cmFsUnVsZXM6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRv
cikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEludGxQbHVyYWxSdWxlczo6dmlz
aXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIElu
dGxQbHVyYWxSdWxlcyogdGhpc09iamVjdCA9IGpzQ2FzdDxJbnRsUGx1cmFsUnVsZXMqPihjZWxs
KTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBA
IC02OSw2ICs3MCw4IEBAIHZvaWQgSW50bFBsdXJhbFJ1bGVzOjp2aXNpdENoaWxkcmVuKEpTQ2UK
ICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwogfQogCitERUZJ
TkVfVklTSVRfQ0hJTERSRU4oSW50bFBsdXJhbFJ1bGVzKTsKKwogVmVjdG9yPFN0cmluZz4gSW50
bFBsdXJhbFJ1bGVzOjpsb2NhbGVEYXRhKGNvbnN0IFN0cmluZyYsIFJlbGV2YW50RXh0ZW5zaW9u
S2V5KQogewogICAgIHJldHVybiB7IH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9JbnRsUGx1cmFsUnVsZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9JbnRsUGx1cmFsUnVsZXMuaAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFBsdXJhbFJ1bGVzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTY2LDcgKzY2LDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBJbnRsUGx1cmFsUnVsZXMo
Vk0mLCBTdHJ1Y3R1cmUqKTsKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7Ci0gICAgc3Rh
dGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xB
UkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBzdGF0aWMgVmVjdG9yPFN0cmluZz4gbG9jYWxlRGF0
YShjb25zdCBTdHJpbmcmLCBSZWxldmFudEV4dGVuc2lvbktleSk7CiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxSZWxhdGl2ZVRpbWVGb3JtYXQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxSZWxhdGl2ZVRpbWVGb3Jt
YXQuY3BwCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9JbnRsUmVsYXRpdmVUaW1lRm9ybWF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjIsNyArNjIs
OCBAQCB2b2lkIEludGxSZWxhdGl2ZVRpbWVGb3JtYXQ6OmZpbmlzaENyZWF0CiAgICAgQVNTRVJU
KGluaGVyaXRzKHZtLCBpbmZvKCkpKTsKIH0KIAotdm9pZCBJbnRsUmVsYXRpdmVUaW1lRm9ybWF0
Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1w
bGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBJbnRsUmVsYXRpdmVUaW1lRm9ybWF0Ojp2aXNp
dENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0
byogdGhpc09iamVjdCA9IGpzQ2FzdDxJbnRsUmVsYXRpdmVUaW1lRm9ybWF0Kj4oY2VsbCk7CiAg
ICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNzAs
NiArNzEsOCBAQCB2b2lkIEludGxSZWxhdGl2ZVRpbWVGb3JtYXQ6OnZpc2l0Q2hpbGRyCiAgICAg
QmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKIH0KIAorREVGSU5FX1ZJ
U0lUX0NISUxEUkVOKEludGxSZWxhdGl2ZVRpbWVGb3JtYXQpOworCiBWZWN0b3I8U3RyaW5nPiBJ
bnRsUmVsYXRpdmVUaW1lRm9ybWF0Ojpsb2NhbGVEYXRhKGNvbnN0IFN0cmluZyYgbG9jYWxlLCBS
ZWxldmFudEV4dGVuc2lvbktleSBrZXkpCiB7CiAgICAgQVNTRVJUX1VOVVNFRChrZXksIGtleSA9
PSBSZWxldmFudEV4dGVuc2lvbktleTo6TnUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSW50bFJlbGF0aXZlVGltZUZvcm1hdC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxSZWxhdGl2ZVRpbWVGb3JtYXQuaAkocmV2aXNpb24g
MjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFJlbGF0aXZlVGlt
ZUZvcm1hdC5oCSh3b3JraW5nIGNvcHkpCkBAIC02NCw3ICs2NCw3IEBAIHB1YmxpYzoKIHByaXZh
dGU6CiAgICAgSW50bFJlbGF0aXZlVGltZUZvcm1hdChWTSYsIFN0cnVjdHVyZSopOwogICAgIHZv
aWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpT
Q2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAg
IHN0YXRpYyBWZWN0b3I8U3RyaW5nPiBsb2NhbGVEYXRhKGNvbnN0IFN0cmluZyYsIFJlbGV2YW50
RXh0ZW5zaW9uS2V5KTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50
bFNlZ21lbnRJdGVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSW50bFNlZ21lbnRJdGVyYXRvci5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxTZWdtZW50SXRlcmF0b3IuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC02NCwxMyArNjQsMTYgQEAgdm9pZCBJbnRsU2VnbWVudEl0ZXJhdG9yOjpm
aW5pc2hDcmVhdGlvbgogICAgIG1fc3RyaW5nLnNldCh2bSwgdGhpcywgc3RyaW5nKTsKIH0KIAot
dm9pZCBJbnRsU2VnbWVudEl0ZXJhdG9yOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xv
dFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBJbnRs
U2VnbWVudEl0ZXJhdG9yOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3Im
IHZpc2l0b3IpCiB7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxJbnRsU2VnbWVudEl0
ZXJhdG9yKj4oY2VsbCk7CiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNp
dG9yKTsKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX3N0cmluZyk7CiB9CiAKK0RF
RklORV9WSVNJVF9DSElMRFJFTihJbnRsU2VnbWVudEl0ZXJhdG9yKTsKKwogSlNPYmplY3QqIElu
dGxTZWdtZW50SXRlcmF0b3I6Om5leHQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKIHsK
ICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9JbnRsU2VnbWVudEl0ZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFNlZ21lbnRJdGVyYXRvci5oCShyZXZpc2lvbiAy
NzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsU2VnbWVudEl0ZXJh
dG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTUzLDcgKzUzLDcgQEAgcHVibGljOgogCiAgICAgSlNP
YmplY3QqIG5leHQoSlNHbG9iYWxPYmplY3QqKTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hp
bGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVO
OwogCiBwcml2YXRlOgogICAgIEludGxTZWdtZW50SXRlcmF0b3IoVk0mLCBTdHJ1Y3R1cmUqLCBz
dGQ6OnVuaXF1ZV9wdHI8VUJyZWFrSXRlcmF0b3IsIFVCcmVha0l0ZXJhdG9yRGVsZXRlcj4mJiwg
Qm94PFZlY3RvcjxVQ2hhcj4+JiYsIEludGxTZWdtZW50ZXI6OkdyYW51bGFyaXR5KTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxTZWdtZW50cy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFNlZ21lbnRzLmNwcAkocmV2
aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFNlZ21l
bnRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA5LDExICsxMDksMTQgQEAgSlNPYmplY3QqIElu
dGxTZWdtZW50czo6Y3JlYXRlU2VnbWVudEl0ZQogICAgIHJldHVybiBJbnRsU2VnbWVudEl0ZXJh
dG9yOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdC0+c2VnbWVudEl0ZXJhdG9yU3RydWN0dXJlKCks
IFdURk1vdmUoc2VnbWVudGVyKSwgbV9idWZmZXIsIG1fc3RyaW5nLmdldCgpLCBtX2dyYW51bGFy
aXR5KTsKIH0KIAotdm9pZCBJbnRsU2VnbWVudHM6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxs
LCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lk
IEludGxTZWdtZW50czo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2
aXNpdG9yKQogewogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SW50bFNlZ21lbnRzKj4o
Y2VsbCk7CiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKICAg
ICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX3N0cmluZyk7CiB9CiAKK0RFRklORV9WSVNJ
VF9DSElMRFJFTihJbnRsU2VnbWVudHMpOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxTZWdtZW50cy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxTZWdtZW50cy5oCShyZXZpc2lvbiAy
NzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsU2VnbWVudHMuaAko
d29ya2luZyBjb3B5KQpAQCAtNTQsNyArNTQsNyBAQCBwdWJsaWM6CiAgICAgSlNWYWx1ZSBjb250
YWluaW5nKEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBpbmRleFZhbHVlKTsKICAgICBKU09iamVj
dCogY3JlYXRlU2VnbWVudEl0ZXJhdG9yKEpTR2xvYmFsT2JqZWN0Kik7CiAKLSAgICBzdGF0aWMg
dm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9W
SVNJVF9DSElMRFJFTjsKIAogcHJpdmF0ZToKICAgICBJbnRsU2VnbWVudHMoVk0mLCBTdHJ1Y3R1
cmUqLCBzdGQ6OnVuaXF1ZV9wdHI8VUJyZWFrSXRlcmF0b3IsIFVCcmVha0l0ZXJhdG9yRGVsZXRl
cj4mJiwgQm94PFZlY3RvcjxVQ2hhcj4+JiYsIEludGxTZWdtZW50ZXI6OkdyYW51bGFyaXR5KTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVm
ZmVyVmlldy5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU1LDcgKzE1
NSw4IEBAIHZvaWQgSlNBcnJheUJ1ZmZlclZpZXc6OmZpbmlzaENyZWF0aW9uKFYKICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCi12b2lkIEpTQXJyYXlCdWZmZXJWaWV3Ojp2
aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0
ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0FycmF5QnVmZmVyVmlldzo6dmlzaXRDaGlsZHJl
bkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTQXJyYXlCdWZm
ZXJWaWV3KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQXJyYXlCdWZmZXJWaWV3Kj4oY2VsbCk7CiAg
ICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtMTY5
LDYgKzE3MCw4IEBAIHZvaWQgSlNBcnJheUJ1ZmZlclZpZXc6OnZpc2l0Q2hpbGRyZW4oSlMKICAg
ICB9CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU0FycmF5QnVmZmVyVmlldyk7CisKIGJv
b2wgSlNBcnJheUJ1ZmZlclZpZXc6OnB1dCgKICAgICBKU0NlbGwqIGNlbGwsIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFs
dWUsCiAgICAgUHV0UHJvcGVydHlTbG90JiBzbG90KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5oCShyZXZpc2lvbiAyNzE0NDMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xNzIsNyArMTcyLDcgQEAgcHJvdGVjdGVkOgogICAgIAogICAgIHN0
YXRpYyBib29sIHB1dChKU0NlbGwqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSwgSlNW
YWx1ZSwgUHV0UHJvcGVydHlTbG90Jik7CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVu
KEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKICAg
ICAKIHB1YmxpYzoKICAgICBUeXBlZEFycmF5TW9kZSBtb2RlKCkgY29uc3QgeyByZXR1cm4gbV9t
b2RlOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5SXRlcmF0
b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJy
YXlJdGVyYXRvci5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQXJyYXlJdGVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY4LDExICs2
OCwxNCBAQCB2b2lkIEpTQXJyYXlJdGVyYXRvcjo6ZmluaXNoQ3JlYXRpb24oVk0mCiAgICAgICAg
IEJhc2U6OmludGVybmFsRmllbGQoaW5kZXgpLnNldCh2bSwgdGhpcywgdmFsdWVzW2luZGV4XSk7
CiB9CiAKLXZvaWQgSlNBcnJheUl0ZXJhdG9yOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwg
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBK
U0FycmF5SXRlcmF0b3I6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYg
dmlzaXRvcikKIHsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQXJyYXlJdGVyYXRv
cio+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5m
bygpKTsKICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwogfQog
CitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNBcnJheUl0ZXJhdG9yKTsKKwogfSAvLyBuYW1lc3Bh
Y2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5SXRlcmF0
b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5
SXRlcmF0b3IuaAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNBcnJheUl0ZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTc4LDcgKzc4LDcgQEAg
cHVibGljOgogCiAgICAgREVDTEFSRV9JTkZPOwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGls
ZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47
CiAKIHByaXZhdGU6CiAgICAgSlNBcnJheUl0ZXJhdG9yKFZNJiwgU3RydWN0dXJlKik7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FzeW5jR2VuZXJhdG9yLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FzeW5jR2VuZXJhdG9y
LmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNBc3luY0dlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU5LDExICs1OSwxNCBAQCB2
b2lkIEpTQXN5bmNHZW5lcmF0b3I6OmZpbmlzaENyZWF0aW9uKFZNCiAgICAgICAgIGludGVybmFs
RmllbGQoaW5kZXgpLnNldCh2bSwgdGhpcywgdmFsdWVzW2luZGV4XSk7CiB9CiAKLXZvaWQgSlNB
c3luY0dlbmVyYXRvcjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNBc3luY0dlbmVyYXRv
cjo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewog
ICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNBc3luY0dlbmVyYXRvcio+KGNlbGwpOwog
ICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKICAgICBC
YXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwogfQogCitERUZJTkVfVklT
SVRfQ0hJTERSRU4oSlNBc3luY0dlbmVyYXRvcik7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBc3luY0dlbmVyYXRvci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXN5bmNHZW5lcmF0b3Iu
aAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNB
c3luY0dlbmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC05NSw3ICs5NSw3IEBAIHB1YmxpYzoK
IAogICAgIERFQ0xBUkVfRVhQT1JUX0lORk87CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxk
cmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsK
IAogcHJpdmF0ZToKICAgICBKU0FzeW5jR2VuZXJhdG9yKFZNJiwgU3RydWN0dXJlKik7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JpZ0ludC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCaWdJbnQuY3BwCShyZXZpc2lvbiAy
NzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JpZ0ludC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTY3LDcgKzY3LDggQEAgSlNCaWdJbnQ6OkpTQmlnSW50KFZNJiB2bSwg
U3RydWN0dXJlKiBzdAogICAgICwgbV9kYXRhKHZtLCB0aGlzLCBkYXRhLCBsZW5ndGgpCiB7IH0K
IAotdm9pZCBKU0JpZ0ludDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9y
JiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNCaWdJbnQ6OnZp
c2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBh
dXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQmlnSW50Kj4oY2VsbCk7CiAgICAgQVNTRVJUX0dD
X09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNzYsNiArNzcsOCBAQCB2
b2lkIEpTQmlnSW50Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsCiAgICAgICAgIHZpc2l0b3Iu
bWFya0F1eGlsaWFyeShkYXRhKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTQmlnSW50
KTsKKwogdm9pZCBKU0JpZ0ludDo6aW5pdGlhbGl6ZShJbml0aWFsaXphdGlvblR5cGUgaW5pdFR5
cGUpCiB7CiAgICAgaWYgKGluaXRUeXBlID09IEluaXRpYWxpemF0aW9uVHlwZTo6V2l0aFplcm8p
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JpZ0ludC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQmlnSW50LmgJKHJldmlzaW9u
IDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQmlnSW50LmgJKHdv
cmtpbmcgY29weSkKQEAgLTUwLDcgKzUwLDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4
cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IFN0cnVj
dHVyZUlzSW1tb3J0YWwgfCBPdmVycmlkZXNUb1RoaXM7CiAgICAgZnJpZW5kIGNsYXNzIENhY2hl
ZEJpZ0ludDsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZp
c2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzPgogICAgIHN0YXRpYyBJc29TdWJzcGFjZSog
c3Vic3BhY2VGb3IoVk0mIHZtKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNCb3VuZEZ1bmN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0JvdW5kRnVuY3Rpb24uY3BwCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JvdW5kRnVuY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yNDksNyArMjQ5LDggQEAgdm9pZCBKU0JvdW5kRnVuY3Rpb246OmZpbmlzaENyZWF0aW9u
KFZNJgogICAgIEFTU0VSVChpbmhlcml0cyh2bSwgaW5mbygpKSk7CiB9CiAKLXZvaWQgSlNCb3Vu
ZEZ1bmN0aW9uOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0
b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0JvdW5kRnVuY3Rpb246OnZp
c2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBK
U0JvdW5kRnVuY3Rpb24qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNCb3VuZEZ1bmN0aW9uKj4oY2Vs
bCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpA
QCAtMjYxLDQgKzI2Miw2IEBAIHZvaWQgSlNCb3VuZEZ1bmN0aW9uOjp2aXNpdENoaWxkcmVuKEpT
Q2UKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX25hbWVNYXlCZU51bGwpOwogfQog
CitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNCb3VuZEZ1bmN0aW9uKTsKKwogfSAvLyBuYW1lc3Bh
Y2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JvdW5kRnVuY3Rp
b24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JvdW5k
RnVuY3Rpb24uaAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNCb3VuZEZ1bmN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTg0LDcgKzg0LDcgQEAg
cHJpdmF0ZToKICAgICBKU0JvdW5kRnVuY3Rpb24oVk0mLCBOYXRpdmVFeGVjdXRhYmxlKiwgSlNH
bG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqLCBKU09iamVjdCogdGFyZ2V0RnVuY3Rpb24sIEpTVmFs
dWUgYm91bmRUaGlzLCBKU0ltbXV0YWJsZUJ1dHRlcmZseSogYm91bmRBcmdzLCBKU1N0cmluZyog
bmFtZU1heUJlTnVsbCwgZG91YmxlIGxlbmd0aCk7CiAKICAgICB2b2lkIGZpbmlzaENyZWF0aW9u
KFZNJik7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRv
ciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBXcml0ZUJhcnJpZXI8SlNP
YmplY3Q+IG1fdGFyZ2V0RnVuY3Rpb247CiAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+IG1fYm91
bmRUaGlzOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDYWxsZWUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2FsbGVlLmNw
cAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlND
YWxsZWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MCw3ICs1MCw4IEBAIHZvaWQgSlNDYWxsZWU6
OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKICAgICBBU1NFUlQoaW5oZXJpdHModm0sIGluZm8oKSkp
OwogfQogCi12b2lkIEpTQ2FsbGVlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZp
c2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0NhbGxl
ZTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewog
ICAgIEpTQ2FsbGVlKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQ2FsbGVlKj4oY2VsbCk7CiAgICAg
QVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNTksNCAr
NjAsNiBAQCB2b2lkIEpTQ2FsbGVlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsCiAgICAgdmlz
aXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9zY29wZSk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElM
RFJFTihKU0NhbGxlZSk7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNDYWxsZWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0NhbGxlZS5oCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NhbGxlZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDAs
NyArMTAwLDcgQEAgcHJvdGVjdGVkOgogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKICAg
ICB1c2luZyBCYXNlOjpmaW5pc2hDcmVhdGlvbjsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hp
bGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVO
OwogCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAkocmV2aXNpb24gMjcxNDQz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNyArMSw3IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAxIEhhcnJp
IFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCiAgKiAgQ29weXJpZ2h0IChDKSAyMDAxIFBldGVyIEtl
bGx5IChwbWtAcG9zdC5jb20pCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMTkgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwMy0yMDIwIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0zMiw2
ICszMiw3IEBACiAjaW5jbHVkZSAiSlNMb2NrLmgiCiAjaW5jbHVkZSAiSlNUeXBlSW5mby5oIgog
I2luY2x1ZGUgIlNsb3RWaXNpdG9yLmgiCisjaW5jbHVkZSAiU2xvdFZpc2l0b3JNYWNyb3MuaCIK
ICNpbmNsdWRlICJTdWJzcGFjZUFjY2Vzcy5oIgogI2luY2x1ZGUgIlR5cGVkQXJyYXlUeXBlLmgi
CiAjaW5jbHVkZSAiV3JpdGVCYXJyaWVyLmgiCkBAIC0xNjcsOCArMTY4LDggQEAgcHVibGljOgog
ICAgIHNpemVfdCBlc3RpbWF0ZWRTaXplSW5CeXRlcyhWTSYpIGNvbnN0OwogICAgIEpTX0VYUE9S
VF9QUklWQVRFIHN0YXRpYyBzaXplX3QgZXN0aW1hdGVkU2l6ZShKU0NlbGwqLCBWTSYpOwogCi0g
ICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwotICAg
IHN0YXRpYyB2b2lkIHZpc2l0T3V0cHV0Q29uc3RyYWludHMoSlNDZWxsKiwgU2xvdFZpc2l0b3Im
KTsKKyAgICBERUNMQVJFX0lOTElORV9WSVNJVF9DSElMRFJFTjsKKyAgICBzdGF0aWMgdm9pZCB2
aXNpdE91dHB1dENvbnN0cmFpbnRzKEpTQ2VsbCosIEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKIAog
ICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGFuYWx5emVIZWFwKEpTQ2VsbCosIEhl
YXBBbmFseXplciYpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Nl
bGxJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNDZWxsSW5saW5lcy5oCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0NlbGxJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcg
QEAKICNpbmNsdWRlICJDb21wbGV0ZVN1YnNwYWNlSW5saW5lcy5oIgogI2luY2x1ZGUgIkNQVS5o
IgogI2luY2x1ZGUgIkNhbGxGcmFtZUlubGluZXMuaCIKKyNpbmNsdWRlICJEZWJ1Z1Nsb3RWaXNp
dG9ySW5saW5lcy5oIgogI2luY2x1ZGUgIkRlZmVyR0MuaCIKICNpbmNsdWRlICJGcmVlTGlzdElu
bGluZXMuaCIKICNpbmNsdWRlICJIYW5kbGUuaCIKQEAgLTE0MSwxMiArMTQyLDE1IEBAIEFMV0FZ
U19JTkxJTkUgU3RydWN0dXJlKiBKU0NlbGw6OnN0cnVjdHUKICAgICByZXR1cm4gdm0uZ2V0U3Ry
dWN0dXJlKG1fc3RydWN0dXJlSUQpOwogfQogCi1pbmxpbmUgdm9pZCBKU0NlbGw6OnZpc2l0Q2hp
bGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVu
YW1lIFZpc2l0b3I+CitpbmxpbmUgdm9pZCBKU0NlbGw6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2Vs
bCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmll
cmVkKGNlbGwtPnN0cnVjdHVyZSh2aXNpdG9yLnZtKCkpKTsKIH0KIAotaW5saW5lIHZvaWQgSlND
ZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzKEpTQ2VsbCosIFNsb3RWaXNpdG9yJikKK0RFRklO
RV9JTkxJTkVfVklTSVRfQ0hJTERSRU4oSlNDZWxsKTsKKworaW5saW5lIHZvaWQgSlNDZWxsOjp2
aXNpdE91dHB1dENvbnN0cmFpbnRzKEpTQ2VsbCosIEFic3RyYWN0U2xvdFZpc2l0b3ImKQogewog
fQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0N1c3RvbUdldHRlclNl
dHRlckZ1bmN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0N1c3RvbUdldHRlclNldHRlckZ1bmN0aW9uLmNwcAkocmV2aXNpb24gMjcxNDQzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDdXN0b21HZXR0ZXJTZXR0ZXJGdW5j
dGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg1LDcgKzg1LDggQEAgSlNDdXN0b21HZXR0ZXJT
ZXR0ZXJGdW5jdGlvbiogSlNDdXN0b21HZQogICAgIHJldHVybiBmdW5jdGlvbjsKIH0KIAotdm9p
ZCBKU0N1c3RvbUdldHRlclNldHRlckZ1bmN0aW9uOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2Vs
bCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9p
ZCBKU0N1c3RvbUdldHRlclNldHRlckZ1bmN0aW9uOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwq
IGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNDdXN0b21HZXR0ZXJTZXR0ZXJGdW5j
dGlvbiogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0N1c3RvbUdldHRlclNldHRlckZ1bmN0aW9uKj4o
Y2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkp
OwpAQCAtOTQsNiArOTUsOCBAQCB2b2lkIEpTQ3VzdG9tR2V0dGVyU2V0dGVyRnVuY3Rpb246OnZp
c2l0CiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9nZXR0ZXJTZXR0ZXIpOwogfQog
CitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNDdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbik7CisK
IHZvaWQgSlNDdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbjo6ZmluaXNoQ3JlYXRpb24oVk0mIHZt
LCBOYXRpdmVFeGVjdXRhYmxlKiBleGVjdXRhYmxlLCBDdXN0b21HZXR0ZXJTZXR0ZXIqIGdldHRl
clNldHRlciwgY29uc3QgU3RyaW5nJiBuYW1lKQogewogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9u
KHZtLCBleGVjdXRhYmxlLCBpc1NldHRlcigpLCBuYW1lKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTQ3VzdG9tR2V0dGVyU2V0dGVyRnVuY3Rpb24uaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0N1c3RvbUdldHRlclNldHRlckZ1
bmN0aW9uLmgJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTQ3VzdG9tR2V0dGVyU2V0dGVyRnVuY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtNjMs
NyArNjMsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIEpTQ3VzdG9tR2V0dGVyU2V0dGVyRnVu
Y3Rpb24oVk0mLCBOYXRpdmVFeGVjdXRhYmxlKiwgSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUq
LCBUeXBlLCBjb25zdCBQcm9wZXJ0eU5hbWUmKTsKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZN
JiwgTmF0aXZlRXhlY3V0YWJsZSosIEN1c3RvbUdldHRlclNldHRlciosIGNvbnN0IFN0cmluZyYp
OwotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsK
KyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgV3JpdGVCYXJyaWVyPEN1c3RvbUdl
dHRlclNldHRlcj4gbV9nZXR0ZXJTZXR0ZXI7CiAgICAgVHlwZSBtX3R5cGU7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ZpbmFsaXphdGlvblJlZ2lzdHJ5LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ZpbmFsaXphdGlvblJl
Z2lzdHJ5LmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNGaW5hbGl6YXRpb25SZWdpc3RyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYg
KzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJKU0ZpbmFsaXphdGlvblJl
Z2lzdHJ5LmgiCiAKKyNpbmNsdWRlICJBYnN0cmFjdFNsb3RWaXNpdG9yLmgiCiAjaW5jbHVkZSAi
RGVmZXJyZWRXb3JrVGltZXIuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAi
SlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbElubGluZXMuaCIKQEAgLTYwLDcgKzYxLDggQEAgdm9p
ZCBKU0ZpbmFsaXphdGlvblJlZ2lzdHJ5OjpmaW5pc2hDcmVhdAogICAgIGdsb2JhbE9iamVjdC0+
Z2xvYmFsT2JqZWN0TWV0aG9kVGFibGUoKS0+Y3VycmVudFNjcmlwdEV4ZWN1dGlvbk93bmVyKGds
b2JhbE9iamVjdCk7CiB9CiAKLXZvaWQgSlNGaW5hbGl6YXRpb25SZWdpc3RyeTo6dmlzaXRDaGls
ZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5h
bWUgVmlzaXRvcj4KK3ZvaWQgSlNGaW5hbGl6YXRpb25SZWdpc3RyeTo6dmlzaXRDaGlsZHJlbklt
cGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEJhc2U6OnZpc2l0Q2hp
bGRyZW4oY2VsbCwgdmlzaXRvcik7CiAKQEAgLTg3LDYgKzg5LDggQEAgdm9pZCBKU0ZpbmFsaXph
dGlvblJlZ2lzdHJ5Ojp2aXNpdENoaWxkcgogICAgIHZpc2l0b3Iudm0oKS5oZWFwLnJlcG9ydEV4
dHJhTWVtb3J5VmlzaXRlZCh0b3RhbEJ1ZmZlclNpemVzSW5CeXRlcyk7CiB9CiAKK0RFRklORV9W
SVNJVF9DSElMRFJFTihKU0ZpbmFsaXphdGlvblJlZ2lzdHJ5KTsKKwogdm9pZCBKU0ZpbmFsaXph
dGlvblJlZ2lzdHJ5OjpkZXN0cm95KEpTQ2VsbCogdGFibGUpCiB7CiAgICAgc3RhdGljX2Nhc3Q8
SlNGaW5hbGl6YXRpb25SZWdpc3RyeSo+KHRhYmxlKS0+fkpTRmluYWxpemF0aW9uUmVnaXN0cnko
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRmluYWxpemF0aW9uUmVn
aXN0cnkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Zp
bmFsaXphdGlvblJlZ2lzdHJ5LmgJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTRmluYWxpemF0aW9uUmVnaXN0cnkuaAkod29ya2luZyBjb3B5KQpA
QCAtNzAsNyArNzAsNyBAQCBwdWJsaWM6CiAgICAgREVDTEFSRV9FWFBPUlRfSU5GTzsKIAogICAg
IHZvaWQgZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoVk0mKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNp
dENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElM
RFJFTjsKICAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwogICAgIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCBuZWVkc0Rlc3RydWN0aW9uID0gdHJ1ZTsKIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yNTIsNyArMjUyLDggQEAgY29uc3QgU291cmNlQ29kZSogSlNGdW5jdGlvbjo6c291
cmNlQ29kZQogICAgIHJldHVybiAmanNFeGVjdXRhYmxlKCktPnNvdXJjZSgpOwogfQogICAgIAot
dm9pZCBKU0Z1bmN0aW9uOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3Im
IHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0Z1bmN0aW9uOjp2
aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAg
SlNGdW5jdGlvbiogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0Z1bmN0aW9uKj4oY2VsbCk7CiAgICAg
QVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtMjYxLDYg
KzI2Miw4IEBAIHZvaWQgSlNGdW5jdGlvbjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGMKICAgICB2
aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKGJpdHdpc2VfY2FzdDxKU0NlbGwqPihiaXR3aXNlX2Nh
c3Q8dWludHB0cl90Pih0aGlzT2JqZWN0LT5tX2V4ZWN1dGFibGVPclJhcmVEYXRhKSAmIH5yYXJl
RGF0YVRhZykpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNGdW5jdGlvbik7CisKIENh
bGxEYXRhIEpTRnVuY3Rpb246OmdldENhbGxEYXRhKEpTQ2VsbCogY2VsbCkKIHsKICAgICAvLyBL
ZWVwIHRoaXMgZnVuY3Rpb24gT0sgZm9yIGludm9jYXRpb24gZnJvbSBjb25jdXJyZW50IGNvbXBp
bGVycy4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmgJ
KHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVu
Y3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMTgwLDcgKzE4MCw3IEBAIHByb3RlY3RlZDoKIAog
ICAgIHN0YXRpYyBib29sIGRlbGV0ZVByb3BlcnR5KEpTQ2VsbCosIEpTR2xvYmFsT2JqZWN0Kiwg
UHJvcGVydHlOYW1lLCBEZWxldGVQcm9wZXJ0eVNsb3QmKTsKIAotICAgIHN0YXRpYyB2b2lkIHZp
c2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NI
SUxEUkVOOwogCiBwcml2YXRlOgogICAgIHN0YXRpYyBKU0Z1bmN0aW9uKiBjcmVhdGVJbXBsKFZN
JiB2bSwgRnVuY3Rpb25FeGVjdXRhYmxlKiBleGVjdXRhYmxlLCBKU1Njb3BlKiBzY29wZSwgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0dlbmVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0dlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU5LDExICs1
OSwxNCBAQCB2b2lkIEpTR2VuZXJhdG9yOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCiAgICAgICAg
IGludGVybmFsRmllbGQoaW5kZXgpLnNldCh2bSwgdGhpcywgdmFsdWVzW2luZGV4XSk7CiB9CiAK
LXZvaWQgSlNHZW5lcmF0b3I6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRv
ciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTR2VuZXJhdG9y
Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAg
ICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0dlbmVyYXRvcio+KGNlbGwpOwogICAgIEFT
U0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKICAgICBCYXNlOjp2
aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwogfQogCitERUZJTkVfVklTSVRfQ0hJ
TERSRU4oSlNHZW5lcmF0b3IpOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmF0b3IuaAkocmV2aXNpb24gMjcxNDQzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmF0b3IuaAkod29ya2luZyBj
b3B5KQpAQCAtOTQsNyArOTQsNyBAQCBwdWJsaWM6CiAKICAgICBERUNMQVJFX0VYUE9SVF9JTkZP
OwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYp
OworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKIHByaXZhdGU6CiAgICAgSlNHZW5lcmF0
b3IoVk0mLCBTdHJ1Y3R1cmUqKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXcuaAkocmV2aXNpb24gMjcxNDQz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZp
ZXcuaAkod29ya2luZyBjb3B5KQpAQCAtMzA3LDcgKzMwNyw3IEBAIHByaXZhdGU6CiAgICAgc3Rh
dGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0Kiwg
UHJvcGVydHlOYW1lQXJyYXkmLCBEb250RW51bVByb3BlcnRpZXNNb2RlKTsKIAogICAgIHN0YXRp
YyBzaXplX3QgZXN0aW1hdGVkU2l6ZShKU0NlbGwqLCBWTSYpOwotICAgIHN0YXRpYyB2b2lkIHZp
c2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1RFTVBMQVRF
X1ZJU0lUX0NISUxEUkVOOwogCiAgICAgLy8gUmV0dXJucyB0cnVlIGlmIHN1Y2Nlc3NmdWwsIGFu
ZCBmYWxzZSBvbiBlcnJvcjsgaXQgd2lsbCB0aHJvdyBvbiBlcnJvci4KICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBPdGhlckFkYXB0b3I+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaAko
cmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5l
cmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5MSw3ICs0OTEs
OCBAQCBzaXplX3QgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46CiB9CiAKIHRlbXBs
YXRlPHR5cGVuYW1lIEFkYXB0b3I+Ci12b2lkIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0
b3I+Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0
ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxB
ZGFwdG9yPjo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9y
KQogewogICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpT
R2VuZXJpY1R5cGVkQXJyYXlWaWV3Kj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhF
UklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNTI5LDQgKzUzMCw2IEBAIHZvaWQgSlNHZW5l
cmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OnYKICAgICB9CiB9CiAKK0RFRklORV9URU1QTEFU
RV9WSVNJVF9DSElMRFJFTih0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPiwgSlNHZW5lcmljVHlw
ZWRBcnJheVZpZXc8QWRhcHRvcj4pOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAJKHJldmlz
aW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2Jq
ZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg5NSw3ICsxODk1LDggQEAgdm9pZCBKU0dsb2Jh
bE9iamVjdDo6cmVzZXRQcm90b3R5cGUoVk0mIAogICAgIHNldEdsb2JhbFRoaXModm0sIEpTUHJv
eHk6OmNyZWF0ZSh2bSwgSlNQcm94eTo6Y3JlYXRlU3RydWN0dXJlKHZtLCB0aGlzLCBwcm90b3R5
cGUsIFB1cmVGb3J3YXJkaW5nUHJveHlUeXBlKSwgdGhpcykpOwogfQogCi12b2lkIEpTR2xvYmFs
T2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3Ip
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0dsb2JhbE9iamVjdDo6dmlzaXRD
aGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogeyAKICAgICBKU0ds
b2JhbE9iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0dsb2JhbE9iamVjdCo+KGNlbGwpOwog
ICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTIw
NjMsNiArMjA2NCw4IEBAIHZvaWQgSlNHbG9iYWxPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWwK
ICAgICB0aGlzT2JqZWN0LT5tX3JlZ0V4cEdsb2JhbERhdGEudmlzaXRBZ2dyZWdhdGUodmlzaXRv
cik7CiB9CiAKK0RFRklORV9FWFBPUlRfVklTSVRfQ0hJTERSRU4oSlNHbG9iYWxPYmplY3QpOwor
CiBDYWxsRnJhbWUqIEpTR2xvYmFsT2JqZWN0OjpkZXByZWNhdGVkQ2FsbEZyYW1lRm9yRGVidWdn
ZXIoKQogewogICAgIHJldHVybiBDYWxsRnJhbWU6OmNyZWF0ZShtX2RlcHJlY2F0ZWRDYWxsRnJh
bWVGb3JEZWJ1Z2dlcik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ds
b2JhbE9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTR2xvYmFsT2JqZWN0LmgJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTYwOSw3ICs2
MDksNyBAQCBwdWJsaWM6CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgfkpTR2xvYmFsT2JqZWN0KCk7
CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKIAot
ICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwg
U2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX0VYUE9SVF9WSVNJVF9DSElMRFJFTjsKIAogICAg
IEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU09iamVj
dCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKICAgICBK
U19FWFBPUlRfUFJJVkFURSBzdGF0aWMgYm9vbCBwdXQoSlNDZWxsKiwgSlNHbG9iYWxPYmplY3Qq
LCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbW11dGFibGVCdXR0ZXJmbHkuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTSW1tdXRhYmxlQnV0dGVyZmx5
LmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNJbW11dGFibGVCdXR0ZXJmbHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw4IEBA
IG5hbWVzcGFjZSBKU0MgewogCiBjb25zdCBDbGFzc0luZm8gSlNJbW11dGFibGVCdXR0ZXJmbHk6
OnNfaW5mbyA9IHsgIkltbXV0YWJsZSBCdXR0ZXJmbHkiLCBudWxscHRyLCBudWxscHRyLCBudWxs
cHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTSW1tdXRhYmxlQnV0dGVyZmx5KSB9OwogCi12b2lk
IEpTSW1tdXRhYmxlQnV0dGVyZmx5Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZp
c2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0ltbXV0
YWJsZUJ1dHRlcmZseTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2
aXNpdG9yKQogewogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2VsbCwgaW5mbygpKTsK
ICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKGNlbGwsIHZpc2l0b3IpOwpAQCAtNDUsNiArNDYsOCBA
QCB2b2lkIEpTSW1tdXRhYmxlQnV0dGVyZmx5Ojp2aXNpdENoaWxkcmVuCiAgICAgdmlzaXRvci5h
cHBlbmRWYWx1ZXNIaWRkZW4oYnV0dGVyZmx5LT5jb250aWd1b3VzKCkuZGF0YSgpLCBidXR0ZXJm
bHktPnB1YmxpY0xlbmd0aCgpKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTSW1tdXRh
YmxlQnV0dGVyZmx5KTsKKwogdm9pZCBKU0ltbXV0YWJsZUJ1dHRlcmZseTo6Y29weVRvQXJndW1l
bnRzKEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSogZmlyc3RFbGVtZW50RGVzdCwgdW5zaWduZWQg
b2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCiB7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGxlbmd0aDsgKytpKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0lt
bXV0YWJsZUJ1dHRlcmZseS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTSW1tdXRhYmxlQnV0dGVyZmx5LmgJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTSW1tdXRhYmxlQnV0dGVyZmx5LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTE0NSw3ICsxNDUsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBqc0RvdWJs
ZU51bWJlcih2YWx1ZSk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihK
U0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAg
ICB2b2lkIGNvcHlUb0FyZ3VtZW50cyhKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUqIGZpcnN0RWxl
bWVudERlc3QsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTSW50ZXJuYWxGaWVs
ZE9iamVjdEltcGwuaAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC02
Niw3ICs2Niw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mSW50ZXJu
YWxGaWVsZCh1bnNpZ25lZCBpbmRleCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTSW50ZXJu
YWxGaWVsZE9iamVjdEltcGwsIG1faW50ZXJuYWxGaWVsZHMpICsgaW5kZXggKiBzaXplb2YoV3Jp
dGVCYXJyaWVyPFVua25vd24+KTsgfQogCiBwcm90ZWN0ZWQ6Ci0gICAgc3RhdGljIHZvaWQgdmlz
aXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVEVNUExBVEVf
VklTSVRfQ0hJTERSRU47CiAKICAgICBKU0ludGVybmFsRmllbGRPYmplY3RJbXBsKFZNJiB2bSwg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiAgICAgICAgIDogQmFzZSh2bSwgc3RydWN0dXJlKQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1w
bElubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0ludGVybmFsRmllbGRPYmplY3RJbXBsSW5saW5lcy5oCShyZXZpc2lvbiAyNzE0NDMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ludGVybmFsRmllbGRPYmplY3RJbXBsSW5s
aW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCw4IEBACiBuYW1lc3BhY2UgSlNDIHsK
IAogdGVtcGxhdGU8dW5zaWduZWQgcGFzc2VkTnVtYmVyT2ZJbnRlcm5hbEZpZWxkcz4KLXZvaWQg
SlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbDxwYXNzZWROdW1iZXJPZkludGVybmFsRmllbGRzPjo6
dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxh
dGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbDxwYXNz
ZWROdW1iZXJPZkludGVybmFsRmllbGRzPjo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxs
LCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNJ
bnRlcm5hbEZpZWxkT2JqZWN0SW1wbCo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5I
RVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTM4LDQgKzM5LDYgQEAgdm9pZCBKU0ludGVy
bmFsRmllbGRPYmplY3RJbXBsPHBhc3NlZE51bQogICAgIHZpc2l0b3IuYXBwZW5kVmFsdWVzKHRo
aXNPYmplY3QtPm1faW50ZXJuYWxGaWVsZHMsIG51bWJlck9mSW50ZXJuYWxGaWVsZHMpOwogfQog
CitERUZJTkVfVEVNUExBVEVfVklTSVRfQ0hJTERSRU4odGVtcGxhdGU8dW5zaWduZWQgcGFzc2Vk
TnVtYmVyT2ZJbnRlcm5hbEZpZWxkcz4sIEpTSW50ZXJuYWxGaWVsZE9iamVjdEltcGw8cGFzc2Vk
TnVtYmVyT2ZJbnRlcm5hbEZpZWxkcz4pOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTGV4aWNhbEVudmlyb25tZW50LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xleGljYWxFbnZpcm9u
bWVudC5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTTGV4aWNhbEVudmlyb25tZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYs
OCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogY29uc3QgQ2xhc3NJbmZvIEpTTGV4aWNhbEVudmlyb25t
ZW50OjpzX2luZm8gPSB7ICJKU0xleGljYWxFbnZpcm9ubWVudCIsICZCYXNlOjpzX2luZm8sIG51
bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNMZXhpY2FsRW52aXJvbm1lbnQp
IH07CiAKLXZvaWQgSlNMZXhpY2FsRW52aXJvbm1lbnQ6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBj
ZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2
b2lkIEpTTGV4aWNhbEVudmlyb25tZW50Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGws
IFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0xl
eGljYWxFbnZpcm9ubWVudCo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMo
dGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTQ0LDYgKzQ1LDggQEAgdm9pZCBKU0xleGljYWxFbnZp
cm9ubWVudDo6dmlzaXRDaGlsZHJlbgogICAgIHZpc2l0b3IuYXBwZW5kVmFsdWVzSGlkZGVuKHRo
aXNPYmplY3QtPnZhcmlhYmxlcygpLCB0aGlzT2JqZWN0LT5zeW1ib2xUYWJsZSgpLT5zY29wZVNp
emUoKSk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU0xleGljYWxFbnZpcm9ubWVudCk7
CisKIHZvaWQgSlNMZXhpY2FsRW52aXJvbm1lbnQ6OmFuYWx5emVIZWFwKEpTQ2VsbCogY2VsbCwg
SGVhcEFuYWx5emVyJiBhbmFseXplcikKIHsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0
PEpTTGV4aWNhbEVudmlyb25tZW50Kj4oY2VsbCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0xleGljYWxFbnZpcm9ubWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTGV4aWNhbEVudmlyb25tZW50LmgJKHJldmlzaW9uIDI3
MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTGV4aWNhbEVudmlyb25t
ZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEzNCw3ICsxMzQsNyBAQCBwcm90ZWN0ZWQ6CiAgICAg
ICAgIH0KICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNs
b3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKICAgICBzdGF0aWMgdm9p
ZCBhbmFseXplSGVhcChKU0NlbGwqLCBIZWFwQW5hbHl6ZXImKTsKIH07CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTWFwSXRlcmF0b3IuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTWFwSXRlcmF0b3IuY3BwCShyZXZpc2lv
biAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01hcEl0ZXJhdG9y
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTcsMTMgKzU3LDE2IEBAIHZvaWQgSlNNYXBJdGVyYXRv
cjo6ZmluaXNoQ3JlYXRpb24oVk0mIHYKICAgICAgICAgQmFzZTo6aW50ZXJuYWxGaWVsZChpbmRl
eCkuc2V0KHZtLCB0aGlzLCB2YWx1ZXNbaW5kZXhdKTsKIH0KIAotdm9pZCBKU01hcEl0ZXJhdG9y
Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1w
bGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU01hcEl0ZXJhdG9yOjp2aXNpdENoaWxkcmVu
SW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0byogdGhpc09i
amVjdCA9IGpzQ2FzdDxKU01hcEl0ZXJhdG9yKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVD
VF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4o
dGhpc09iamVjdCwgdmlzaXRvcik7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU01hcEl0
ZXJhdG9yKTsKKwogSlNWYWx1ZSBKU01hcEl0ZXJhdG9yOjpjcmVhdGVQYWlyKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUga2V5LCBKU1ZhbHVlIHZhbHVlKQogewogICAgIE1h
cmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3M7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU01hcEl0ZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNNYXBJdGVyYXRvci5oCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU01hcEl0ZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0
Miw3ICsxNDIsNyBAQCBwcml2YXRlOgogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZmluaXNo
Q3JlYXRpb24oVk0mLCBKU01hcCosIEl0ZXJhdGlvbktpbmQpOwogICAgIHZvaWQgZmluaXNoQ3Jl
YXRpb24oVk0mKTsKICAgICBKU1ZhbHVlIGNyZWF0ZVBhaXIoSlNHbG9iYWxPYmplY3QqLCBKU1Zh
bHVlLCBKU1ZhbHVlKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNs
b3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIH07CiBTVEFUSUNfQVNT
RVJUX0lTX1RSSVZJQUxMWV9ERVNUUlVDVElCTEUoSlNNYXBJdGVyYXRvcik7CiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlRW52aXJvbm1lbnQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlRW52aXJvbm1l
bnQuY3BwCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU01vZHVsZUVudmlyb25tZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjUsNyArNjUsOCBA
QCB2b2lkIEpTTW9kdWxlRW52aXJvbm1lbnQ6OmZpbmlzaENyZWF0aW9uCiAgICAgdGhpcy0+bW9k
dWxlUmVjb3JkU2xvdCgpLnNldCh2bSwgdGhpcywgbW9kdWxlUmVjb3JkKTsKIH0KIAotdm9pZCBK
U01vZHVsZUVudmlyb25tZW50Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0
b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU01vZHVsZUVu
dmlyb25tZW50Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0
b3IpCiB7CiAgICAgSlNNb2R1bGVFbnZpcm9ubWVudCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU01v
ZHVsZUVudmlyb25tZW50Kj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0
aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNzQsNiArNzUsOCBAQCB2b2lkIEpTTW9kdWxlRW52aXJv
bm1lbnQ6OnZpc2l0Q2hpbGRyZW4oCiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bW9k
dWxlUmVjb3JkU2xvdCgpKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTTW9kdWxlRW52
aXJvbm1lbnQpOworCiBib29sIEpTTW9kdWxlRW52aXJvbm1lbnQ6OmdldE93blByb3BlcnR5U2xv
dChKU09iamVjdCogY2VsbCwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUHJvcGVydHlO
YW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQogewogICAgIFZNJiB2bSA9IGds
b2JhbE9iamVjdC0+dm0oKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
TW9kdWxlRW52aXJvbm1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU01vZHVsZUVudmlyb25tZW50LmgJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlRW52aXJvbm1lbnQuaAkod29ya2luZyBj
b3B5KQpAQCAtODksNyArODksNyBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gKmJpdHdpc2Vf
Y2FzdDxXcml0ZUJhcnJpZXJCYXNlPEFic3RyYWN0TW9kdWxlUmVjb3JkPio+KGJpdHdpc2VfY2Fz
dDxjaGFyKj4odGhpcykgKyBvZmZzZXRPZk1vZHVsZVJlY29yZChzeW1ib2xUYWJsZSgpKSk7CiAg
ICAgfQogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRv
ciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiB9OwogCiBpbmxpbmUgSlNNb2R1bGVF
bnZpcm9ubWVudDo6SlNNb2R1bGVFbnZpcm9ubWVudChWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0
dXJlLCBKU1Njb3BlKiBjdXJyZW50U2NvcGUsIFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSkKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlTmFtZXNwYWNlT2JqZWN0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVs
ZU5hbWVzcGFjZU9iamVjdC5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlTmFtZXNwYWNlT2JqZWN0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtODUsNyArODUsOCBAQCB2b2lkIEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0OjpkZXN0cm95
KEpTCiAgICAgdGhpc09iamVjdC0+SlNNb2R1bGVOYW1lc3BhY2VPYmplY3Q6On5KU01vZHVsZU5h
bWVzcGFjZU9iamVjdCgpOwogfQogCi12b2lkIEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0Ojp2aXNp
dENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0
eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU01vZHVsZU5hbWVzcGFjZU9iamVjdDo6dmlzaXRDaGls
ZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTTW9kdWxl
TmFtZXNwYWNlT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTTW9kdWxlTmFtZXNwYWNlT2Jq
ZWN0Kj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBp
bmZvKCkpOwpAQCAtOTgsNiArOTksOCBAQCB2b2lkIEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0Ojp2
aXNpdENoaWxkCiAgICAgfQogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNNb2R1bGVOYW1l
c3BhY2VPYmplY3QpOworCiBzdGF0aWMgSlNWYWx1ZSBnZXRWYWx1ZShKU01vZHVsZUVudmlyb25t
ZW50KiBlbnZpcm9ubWVudCwgUHJvcGVydHlOYW1lIGxvY2FsTmFtZSwgU2NvcGVPZmZzZXQmIHNj
b3BlT2Zmc2V0KQogewogICAgIFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSA9IGVudmlyb25tZW50
LT5zeW1ib2xUYWJsZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNN
b2R1bGVOYW1lc3BhY2VPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU01vZHVsZU5hbWVzcGFjZU9iamVjdC5oCShyZXZpc2lvbiAyNzE0NDMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZU5hbWVzcGFjZU9iamVjdC5o
CSh3b3JraW5nIGNvcHkpCkBAIC03Miw3ICs3Miw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAg
SlNfRVhQT1JUX1BSSVZBVEUgSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QoVk0mLCBTdHJ1Y3R1cmUq
KTsKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGZpbmlzaENyZWF0aW9uKEpTR2xvYmFsT2Jq
ZWN0KiwgQWJzdHJhY3RNb2R1bGVSZWNvcmQqLCBWZWN0b3I8c3RkOjpwYWlyPElkZW50aWZpZXIs
IEFic3RyYWN0TW9kdWxlUmVjb3JkOjpSZXNvbHV0aW9uPj4mJik7Ci0gICAgc3RhdGljIHZvaWQg
dmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRf
Q0hJTERSRU47CiAgICAgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3RDb21tb24oSlNHbG9iYWxPYmpl
Y3QqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwogCiAgICAgc3RydWN0IEV4cG9ydEVu
dHJ5IHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlUmVjb3Jk
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVs
ZVJlY29yZC5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTTW9kdWxlUmVjb3JkLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzAsNyArNzAsOCBA
QCB2b2lkIEpTTW9kdWxlUmVjb3JkOjpmaW5pc2hDcmVhdGlvbihKU0dsCiAgICAgQVNTRVJUKGlu
aGVyaXRzKHZtLCBpbmZvKCkpKTsKIH0KIAotdm9pZCBKU01vZHVsZVJlY29yZDo6dmlzaXRDaGls
ZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5h
bWUgVmlzaXRvcj4KK3ZvaWQgSlNNb2R1bGVSZWNvcmQ6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2Vs
bCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU01vZHVsZVJlY29yZCogdGhpc09i
amVjdCA9IGpzQ2FzdDxKU01vZHVsZVJlY29yZCo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpF
Q1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTc4LDYgKzc5LDggQEAgdm9pZCBK
U01vZHVsZVJlY29yZDo6dmlzaXRDaGlsZHJlbihKU0NlbAogICAgIHZpc2l0b3IuYXBwZW5kKHRo
aXNPYmplY3QtPm1fbW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUpOwogfQogCitERUZJTkVfVklTSVRf
Q0hJTERSRU4oSlNNb2R1bGVSZWNvcmQpOworCiB2b2lkIEpTTW9kdWxlUmVjb3JkOjpsaW5rKEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgc2NyaXB0RmV0Y2hlcikKIHsKICAg
ICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU01vZHVsZVJlY29yZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlUmVjb3JkLmgJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlUmVjb3JkLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTY2LDcgKzY2LDcgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24o
SlNHbG9iYWxPYmplY3QqLCBWTSYpOwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihK
U0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAg
ICB2b2lkIGluc3RhbnRpYXRlRGVjbGFyYXRpb25zKEpTR2xvYmFsT2JqZWN0KiwgTW9kdWxlUHJv
Z3JhbUV4ZWN1dGFibGUqLCBKU1ZhbHVlIHNjcmlwdEZldGNoZXIpOwogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU05hdGl2ZVN0ZEZ1bmN0aW9uLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU05hdGl2ZVN0ZEZ1bmN0aW9uLmNw
cAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNO
YXRpdmVTdGRGdW5jdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDEzICs0MSwxNiBAQCBK
U05hdGl2ZVN0ZEZ1bmN0aW9uOjpKU05hdGl2ZVN0ZEZ1bmN0aW9uCiB7CiB9CiAKLXZvaWQgSlNO
YXRpdmVTdGRGdW5jdGlvbjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9y
JiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNOYXRpdmVTdGRG
dW5jdGlvbjo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9y
KQogewogICAgIEpTTmF0aXZlU3RkRnVuY3Rpb24qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNOYXRp
dmVTdGRGdW5jdGlvbio+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhp
c09iamVjdCwgaW5mbygpKTsKICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZp
c2l0b3IpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNOYXRpdmVTdGRGdW5jdGlvbik7
CisKIHZvaWQgSlNOYXRpdmVTdGRGdW5jdGlvbjo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBOYXRp
dmVFeGVjdXRhYmxlKiBleGVjdXRhYmxlLCB1bnNpZ25lZCBsZW5ndGgsIGNvbnN0IFN0cmluZyYg
bmFtZSkKIHsKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSwgZXhlY3V0YWJsZSwgbGVuZ3Ro
LCBuYW1lKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTmF0aXZlU3Rk
RnVuY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U05hdGl2ZVN0ZEZ1bmN0aW9uLmgJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTTmF0aXZlU3RkRnVuY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAt
NjUsNyArNjUsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIEpTTmF0aXZlU3RkRnVuY3Rpb24o
Vk0mLCBOYXRpdmVFeGVjdXRhYmxlKiwgSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqLCBOYXRp
dmVTdGRGdW5jdGlvbiYmKTsKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgTmF0aXZlRXhl
Y3V0YWJsZSosIHVuc2lnbmVkIGxlbmd0aCwgY29uc3QgU3RyaW5nJiBuYW1lKTsKLSAgICBzdGF0
aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFS
RV9WSVNJVF9DSElMRFJFTjsKIAogICAgIE5hdGl2ZVN0ZEZ1bmN0aW9uIG1fZnVuY3Rpb247CiB9
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAkocmV2
aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3Qu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MCw3ICs5MCw4IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBK
U09iamVjdDo6Z2V0Tm9uUmVpZmkKICAgICB9CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKU09i
amVjdDo6bWFya0F1eGlsaWFyeUFuZFZpc2l0T3V0T2ZMaW5lUHJvcGVydGllcyhTbG90VmlzaXRv
ciYgdmlzaXRvciwgQnV0dGVyZmx5KiBidXR0ZXJmbHksIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQ
cm9wZXJ0eU9mZnNldCBtYXhPZmZzZXQpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgorQUxX
QVlTX0lOTElORSB2b2lkIEpTT2JqZWN0OjptYXJrQXV4aWxpYXJ5QW5kVmlzaXRPdXRPZkxpbmVQ
cm9wZXJ0aWVzKFZpc2l0b3ImIHZpc2l0b3IsIEJ1dHRlcmZseSogYnV0dGVyZmx5LCBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgbWF4T2Zmc2V0KQogewogICAgIC8vIFdlIGNh
bGwgdGhpcyB3aGVuIHdlIGZvdW5kIGV2ZXJ5dGhpbmcgd2l0aG91dCByYWNlcy4KICAgICBBU1NF
UlQoc3RydWN0dXJlKTsKQEAgLTEyMSw3ICsxMjIsOCBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSlNP
YmplY3Q6Om1hcmtBdXhpbGlhCiAgICAgdmlzaXRvci5hcHBlbmRWYWx1ZXNIaWRkZW4oYnV0dGVy
Zmx5LT5wcm9wZXJ0eVN0b3JhZ2UoKSAtIG91dE9mTGluZVNpemUsIG91dE9mTGluZVNpemUpOwog
fQogCi1BTFdBWVNfSU5MSU5FIFN0cnVjdHVyZSogSlNPYmplY3Q6OnZpc2l0QnV0dGVyZmx5KFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK0FMV0FZU19J
TkxJTkUgU3RydWN0dXJlKiBKU09iamVjdDo6dmlzaXRCdXR0ZXJmbHkoVmlzaXRvciYgdmlzaXRv
cikKIHsKICAgICBzdGF0aWMgY29uc3QgY2hhciogY29uc3QgcmFjZVJlYXNvbiA9ICJKU09iamVj
dDo6dmlzaXRCdXR0ZXJmbHkiOwogICAgIFN0cnVjdHVyZSogcmVzdWx0ID0gdmlzaXRCdXR0ZXJm
bHlJbXBsKHZpc2l0b3IpOwpAQCAtMTMwLDcgKzEzMiw4IEBAIEFMV0FZU19JTkxJTkUgU3RydWN0
dXJlKiBKU09iamVjdDo6dmlzaXQKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1BTFdBWVNfSU5M
SU5FIFN0cnVjdHVyZSogSlNPYmplY3Q6OnZpc2l0QnV0dGVyZmx5SW1wbChTbG90VmlzaXRvciYg
dmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+CitBTFdBWVNfSU5MSU5FIFN0cnVj
dHVyZSogSlNPYmplY3Q6OnZpc2l0QnV0dGVyZmx5SW1wbChWaXNpdG9yJiB2aXNpdG9yKQogewog
ICAgIFZNJiB2bSA9IHZpc2l0b3Iudm0oKTsKICAgICAKQEAgLTQzMCwyNCArNDMzLDIwIEBAIHNp
emVfdCBKU09iamVjdDo6ZXN0aW1hdGVkU2l6ZShKU0NlbGwqIGMKICAgICByZXR1cm4gQmFzZTo6
ZXN0aW1hdGVkU2l6ZShjZWxsLCB2bSkgKyBidXR0ZXJmbHlPdXRPZkxpbmVTaXplOwogfQogCi12
b2lkIEpTT2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZp
c2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU09iamVjdDo6dmlzaXRD
aGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTT2Jq
ZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTT2JqZWN0Kj4oY2VsbCk7CiAgICAgQVNTRVJUX0dD
X09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwotI2lmIEFTU0VSVF9FTkFCTEVE
Ci0gICAgYm9vbCB3YXNDaGVja2luZ0ZvckRlZmF1bHRNYXJrVmlvbGF0aW9uID0gdmlzaXRvci5t
X2lzQ2hlY2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlvbjsKLSAgICB2aXNpdG9yLm1faXNDaGVj
a2luZ0ZvckRlZmF1bHRNYXJrVmlvbGF0aW9uID0gZmFsc2U7Ci0jZW5kaWYKLSAgICAKKyAgICB0
eXBlbmFtZSBWaXNpdG9yOjpEZWZhdWx0TWFya2luZ1Zpb2xhdGlvbkFzc2VydGlvblNjb3BlIGFz
c2VydGlvblNjb3BlKHZpc2l0b3IpOworCiAgICAgSlNDZWxsOjp2aXNpdENoaWxkcmVuKHRoaXNP
YmplY3QsIHZpc2l0b3IpOwotICAgIAorCiAgICAgdGhpc09iamVjdC0+dmlzaXRCdXR0ZXJmbHko
dmlzaXRvcik7Ci0gICAgCi0jaWYgQVNTRVJUX0VOQUJMRUQKLSAgICB2aXNpdG9yLm1faXNDaGVj
a2luZ0ZvckRlZmF1bHRNYXJrVmlvbGF0aW9uID0gd2FzQ2hlY2tpbmdGb3JEZWZhdWx0TWFya1Zp
b2xhdGlvbjsKLSNlbmRpZgogfQogCitERUZJTkVfRVhQT1JUX1ZJU0lUX0NISUxEUkVOKEpTT2Jq
ZWN0KTsKKwogdm9pZCBKU09iamVjdDo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5h
bHl6ZXImIGFuYWx5emVyKQogewogICAgIEpTT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpT
T2JqZWN0Kj4oY2VsbCk7CkBAIC00ODYsMTQgKzQ4NSwxMiBAQCB2b2lkIEpTT2JqZWN0OjphbmFs
eXplSGVhcChKU0NlbGwqIGNlbGwsCiAgICAgfQogfQogCi12b2lkIEpTRmluYWxPYmplY3Q6OnZp
c2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRl
PHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTRmluYWxPYmplY3Q6OnZpc2l0Q2hpbGRyZW5JbXBs
KEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU0ZpbmFsT2JqZWN0KiB0
aGlzT2JqZWN0ID0ganNDYXN0PEpTRmluYWxPYmplY3QqPihjZWxsKTsKICAgICBBU1NFUlRfR0Nf
T0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7Ci0jaWYgQVNTRVJUX0VOQUJMRUQK
LSAgICBib29sIHdhc0NoZWNraW5nRm9yRGVmYXVsdE1hcmtWaW9sYXRpb24gPSB2aXNpdG9yLm1f
aXNDaGVja2luZ0ZvckRlZmF1bHRNYXJrVmlvbGF0aW9uOwotICAgIHZpc2l0b3IubV9pc0NoZWNr
aW5nRm9yRGVmYXVsdE1hcmtWaW9sYXRpb24gPSBmYWxzZTsKLSNlbmRpZgorICAgIHR5cGVuYW1l
IFZpc2l0b3I6OkRlZmF1bHRNYXJraW5nVmlvbGF0aW9uQXNzZXJ0aW9uU2NvcGUgYXNzZXJ0aW9u
U2NvcGUodmlzaXRvcik7CiAgICAgCiAgICAgSlNDZWxsOjp2aXNpdENoaWxkcmVuKHRoaXNPYmpl
Y3QsIHZpc2l0b3IpOwogICAgIApAQCAtNTAxLDEyICs0OTgsMTAgQEAgdm9pZCBKU0ZpbmFsT2Jq
ZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbAogICAgICAgICBpZiAodW5zaWduZWQgc3RvcmFnZVNp
emUgPSBzdHJ1Y3R1cmUtPmlubGluZVNpemUoKSkKICAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5k
VmFsdWVzSGlkZGVuKHRoaXNPYmplY3QtPmlubGluZVN0b3JhZ2UoKSwgc3RvcmFnZVNpemUpOwog
ICAgIH0KLSAgICAKLSNpZiBBU1NFUlRfRU5BQkxFRAotICAgIHZpc2l0b3IubV9pc0NoZWNraW5n
Rm9yRGVmYXVsdE1hcmtWaW9sYXRpb24gPSB3YXNDaGVja2luZ0ZvckRlZmF1bHRNYXJrVmlvbGF0
aW9uOwotI2VuZGlmCiB9CiAKK0RFRklORV9FWFBPUlRfVklTSVRfQ0hJTERSRU4oSlNGaW5hbE9i
amVjdCk7CisKIFN0cmluZyBKU09iamVjdDo6Y2xhc3NOYW1lKGNvbnN0IEpTT2JqZWN0KiBvYmpl
Y3QsIFZNJiB2bSkKIHsKICAgICBjb25zdCBDbGFzc0luZm8qIGluZm8gPSBvYmplY3QtPmNsYXNz
SW5mbyh2bSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJ
KHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2Jq
ZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEwOCw4ICsxMDgsOSBAQCBjbGFzcyBKU09iamVjdCA6
IHB1YmxpYyBKU0NlbGwgewogcHVibGljOgogICAgIHVzaW5nIEJhc2UgPSBKU0NlbGw7CiAKKyAg
ICBERUNMQVJFX0VYUE9SVF9WSVNJVF9DSElMRFJFTjsKKwogICAgIEpTX0VYUE9SVF9QUklWQVRF
IHN0YXRpYyBzaXplX3QgZXN0aW1hdGVkU2l6ZShKU0NlbGwqLCBWTSYpOwotICAgIEpTX0VYUE9S
VF9QUklWQVRFIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3Im
KTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBhbmFseXplSGVhcChKU0NlbGwq
LCBIZWFwQW5hbHl6ZXImKTsKIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBTdHJpbmcg
Y2xhc3NOYW1lKGNvbnN0IEpTT2JqZWN0KiwgVk0mKTsKQEAgLTk4MCwxMSArOTgxLDExIEBAIHBy
b3RlY3RlZDoKICAgICBKU09iamVjdChWTSYsIFN0cnVjdHVyZSosIEJ1dHRlcmZseSogPSBudWxs
cHRyKTsKICAgICAKICAgICAvLyBWaXNpdHMgdGhlIGJ1dHRlcmZseSB1bmxlc3MgdGhlcmUgaXMg
YSByYWNlLiBSZXR1cm5zIHRoZSBzdHJ1Y3R1cmUgaWYgdGhlcmUgd2FzIG5vIHJhY2UuCi0gICAg
U3RydWN0dXJlKiB2aXNpdEJ1dHRlcmZseShTbG90VmlzaXRvciYpOworICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFZpc2l0b3I+IFN0cnVjdHVyZSogdmlzaXRCdXR0ZXJmbHkoVmlzaXRvciYpOwogICAg
IAotICAgIFN0cnVjdHVyZSogdmlzaXRCdXR0ZXJmbHlJbXBsKFNsb3RWaXNpdG9yJik7CisgICAg
dGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gU3RydWN0dXJlKiB2aXNpdEJ1dHRlcmZseUltcGwo
VmlzaXRvciYpOwogICAgIAotICAgIHZvaWQgbWFya0F1eGlsaWFyeUFuZFZpc2l0T3V0T2ZMaW5l
UHJvcGVydGllcyhTbG90VmlzaXRvciYsIEJ1dHRlcmZseSosIFN0cnVjdHVyZSosIFByb3BlcnR5
T2Zmc2V0IG1heE9mZnNldCk7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCBt
YXJrQXV4aWxpYXJ5QW5kVmlzaXRPdXRPZkxpbmVQcm9wZXJ0aWVzKFZpc2l0b3ImLCBCdXR0ZXJm
bHkqLCBTdHJ1Y3R1cmUqLCBQcm9wZXJ0eU9mZnNldCBtYXhPZmZzZXQpOwogCiAgICAgLy8gQ2Fs
bCB0aGlzIGlmIHlvdSBrbm93IHRoYXQgdGhlIG9iamVjdCBpcyBpbiBhIG1vZGUgd2hlcmUgaXQg
aGFzIGFycmF5CiAgICAgLy8gc3RvcmFnZS4gVGhpcyB3aWxsIGFzc2VydCBvdGhlcndpc2UuCkBA
IC0xMTcyLDggKzExNzMsNiBAQCBwcm90ZWN0ZWQ6CiAgICAgfQogfTsKIAotY2xhc3MgSlNGaW5h
bE9iamVjdDsKLQogLy8gSlNGaW5hbE9iamVjdCBpcyBhIHR5cGUgb2YgSlNPYmplY3QgdGhhdCBj
b250YWlucyBzdWZmaWNpZW50IGludGVybmFsCiAvLyBzdG9yYWdlIHRvIGZ1bGx5IG1ha2UgdXNl
IG9mIHRoZSBjb2xsZWN0b3IgY2VsbCBjb250YWluaW5nIGl0LgogY2xhc3MgSlNGaW5hbE9iamVj
dCBmaW5hbCA6IHB1YmxpYyBKU09iamVjdCB7CkBAIC0xMjEyLDE1ICsxMjExLDEzIEBAIHB1Ymxp
YzoKICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHBy
b3RvdHlwZSwgdHlwZUluZm8oKSwgaW5mbygpLCBkZWZhdWx0SW5kZXhpbmdUeXBlLCBpbmxpbmVD
YXBhY2l0eSk7CiAgICAgfQogCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgdmlz
aXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfRVhQT1JUX1ZJ
U0lUX0NISUxEUkVOOwogCiAgICAgREVDTEFSRV9FWFBPUlRfSU5GTzsKIAogcHJpdmF0ZToKICAg
ICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwogCi0gICAgdm9pZCB2aXNpdENo
aWxkcmVuQ29tbW9uKFNsb3RWaXNpdG9yJik7Ci0KICAgICBleHBsaWNpdCBKU0ZpbmFsT2JqZWN0
KFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEJ1dHRlcmZseSogYnV0dGVyZmx5KQogICAg
ICAgICA6IEpTT2JqZWN0KHZtLCBzdHJ1Y3R1cmUsIGJ1dHRlcmZseSkKICAgICB7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb21pc2UuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvbWlzZS5jcHAJKHJldmlzaW9uIDI3
MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvbWlzZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTY3LDEzICs2NywxNiBAQCB2b2lkIEpTUHJvbWlzZTo6ZmluaXNoQ3Jl
YXRpb24oVk0mIHZtKQogICAgICAgICBCYXNlOjppbnRlcm5hbEZpZWxkKGluZGV4KS5zZXQodm0s
IHRoaXMsIHZhbHVlc1tpbmRleF0pOwogfQogCi12b2lkIEpTUHJvbWlzZTo6dmlzaXRDaGlsZHJl
bihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUg
VmlzaXRvcj4KK3ZvaWQgSlNQcm9taXNlOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGws
IFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1By
b21pc2UqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3Qs
IGluZm8oKSk7CiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsK
IH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTUHJvbWlzZSk7CisKIGF1dG8gSlNQcm9taXNl
OjpzdGF0dXMoVk0mKSBjb25zdCAtPiBTdGF0dXMKIHsKICAgICBKU1ZhbHVlIHZhbHVlID0gaW50
ZXJuYWxGaWVsZChGaWVsZDo6RmxhZ3MpLmdldCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNQcm9taXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNQcm9taXNlLmgJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvbWlzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC05Myw3ICs5
Myw3IEBAIHB1YmxpYzoKICAgICB9OwogICAgIHN0YXRpYyBEZWZlcnJlZERhdGEgY3JlYXRlRGVm
ZXJyZWREYXRhKEpTR2xvYmFsT2JqZWN0KiwgSlNQcm9taXNlQ29uc3RydWN0b3IqKTsKIAotICAg
IHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBE
RUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiBwcm90ZWN0ZWQ6CiAgICAgSlNQcm9taXNlKFZNJiwg
U3RydWN0dXJlKik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3Bl
cnR5TmFtZUVudW1lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTUHJvcGVydHlOYW1lRW51bWVyYXRvci5jcHAJKHJldmlzaW9uIDI3MTQ0MykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVydHlOYW1lRW51bWVyYXRv
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcwLDcgKzcwLDggQEAgdm9pZCBKU1Byb3BlcnR5TmFt
ZUVudW1lcmF0b3I6OmZpbmlzaENyZQogICAgIH0KIH0KIAotdm9pZCBKU1Byb3BlcnR5TmFtZUVu
dW1lcmF0b3I6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRv
cikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTUHJvcGVydHlOYW1lRW51bWVy
YXRvcjo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQog
ewogICAgIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvciogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1By
b3BlcnR5TmFtZUVudW1lcmF0b3IqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVS
SVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC04Nyw2ICs4OCw4IEBAIHZvaWQgSlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yOjp2aXNpdENoaWwKICAgICB9CiB9CiAKK0RFRklORV9WSVNJVF9DSElM
RFJFTihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IpOworCiAvLyBGSVhNRTogQXNzZXJ0IHRoYXQg
cHJvcGVydGllcyByZXR1cm5lZCBieSBnZXRPd25Qcm9wZXJ0eU5hbWVzKCkgYXJlIHJlcG9ydGVk
IGVudW1lcmFibGUgYnkgZ2V0T3duUHJvcGVydHlTbG90KCkuCiAvLyBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE5OTI2CiB2b2lkIGdldEVudW1lcmFibGVQcm9wZXJ0
eU5hbWVzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTT2JqZWN0KiBiYXNlLCBQcm9w
ZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgdWludDMyX3QmIGluZGV4ZWRMZW5ndGgsIHVp
bnQzMl90JiBzdHJ1Y3R1cmVQcm9wZXJ0eUNvdW50KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmgJKHJl
dmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVy
dHlOYW1lRW51bWVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC04NCw3ICs4NCw3IEBAIHB1Ymxp
YzoKICAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU1Byb3BlcnR5TmFtZUVudW1lcmF0
b3IsIG1fcHJvcGVydHlOYW1lcyk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGls
ZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47
CiAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJveHkuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJveHkuY3BwCShyZXZpc2lvbiAy
NzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3h5LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzUsNyArMzUsOCBAQCBTVEFUSUNfQVNTRVJUX0lTX1RSSVZJQUxMWV9E
RVNUUlVDVElCTEUoCiAKIGNvbnN0IENsYXNzSW5mbyBKU1Byb3h5OjpzX2luZm8gPSB7ICJKU1By
b3h5IiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJM
RShKU1Byb3h5KSB9OwogCi12b2lkIEpTUHJveHk6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxs
LCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lk
IEpTUHJveHk6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRv
cikKIHsKICAgICBKU1Byb3h5KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTUHJveHkqPihjZWxsKTsK
ICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC00
Myw2ICs0NCw4IEBAIHZvaWQgSlNQcm94eTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwKICAg
ICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX3RhcmdldCk7CiB9CiAKK0RFRklORV9FWFBP
UlRfVklTSVRfQ0hJTERSRU4oSlNQcm94eSk7CisKIHZvaWQgSlNQcm94eTo6c2V0VGFyZ2V0KFZN
JiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKIHsKICAgICBtX3RhcmdldC5zZXQo
dm0sIHRoaXMsIGdsb2JhbE9iamVjdCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1Byb3h5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNQcm94eS5oCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU1Byb3h5LmgJKHdvcmtpbmcgY29weSkKQEAgLTg1LDcgKzg1LDcgQEAgcHJvdGVj
dGVkOgogICAgICAgICBtX3RhcmdldC5zZXQodm0sIHRoaXMsIHRhcmdldCk7CiAgICAgfQogCi0g
ICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBT
bG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfRVhQT1JUX1ZJU0lUX0NISUxEUkVOOwogCiAgICAg
SlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFN0cmluZyBjbGFzc05hbWUoY29uc3QgSlNPYmplY3Qq
LCBWTSYpOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBTdHJpbmcgdG9TdHJpbmdOYW1l
KGNvbnN0IEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTU2NvcGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTU2NvcGUuY3BwCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Njb3BlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzks
NyArMzksOCBAQCBTVEFUSUNfQVNTRVJUX0lTX1RSSVZJQUxMWV9ERVNUUlVDVElCTEUoCiAKIGNv
bnN0IENsYXNzSW5mbyBKU1Njb3BlOjpzX2luZm8gPSB7ICJTY29wZSIsICZCYXNlOjpzX2luZm8s
IG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNTY29wZSkgfTsKIAotdm9p
ZCBKU1Njb3BlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0
b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1Njb3BlOjp2aXNpdENoaWxk
cmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNTY29wZSog
dGhpc09iamVjdCA9IGpzQ2FzdDxKU1Njb3BlKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVD
VF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNDcsNiArNDgsOCBAQCB2b2lkIEpT
U2NvcGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsCiAgICAgdmlzaXRvci5hcHBlbmQodGhp
c09iamVjdC0+bV9uZXh0KTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTU2NvcGUpOwor
CiAvLyBSZXR1cm5zIHRydWUgaWYgd2UgZm91bmQgZW5vdWdoIGluZm9ybWF0aW9uIHRvIHRlcm1p
bmF0ZSBvcHRpbWl6YXRpb24uCiBzdGF0aWMgaW5saW5lIGJvb2wgYWJzdHJhY3RBY2Nlc3MoSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNTY29wZSogc2NvcGUsIGNvbnN0IElkZW50aWZp
ZXImIGlkZW50LCBHZXRPclB1dCBnZXRPclB1dCwgc2l6ZV90IGRlcHRoLCBib29sJiBuZWVkc1Zh
ckluamVjdGlvbkNoZWNrcywgUmVzb2x2ZU9wJiBvcCwgSW5pdGlhbGl6YXRpb25Nb2RlIGluaXRp
YWxpemF0aW9uTW9kZSkKIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
U2NvcGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Nj
b3BlLmgJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTU2NvcGUuaAkod29ya2luZyBjb3B5KQpAQCAtNjQsNyArNjQsNyBAQCBwdWJsaWM6CiAKICAg
ICBzdGF0aWMgdm9pZCBjb2xsZWN0Q2xvc3VyZVZhcmlhYmxlc1VuZGVyVERaKEpTU2NvcGUqLCBU
RFpFbnZpcm9ubWVudCYgcmVzdWx0LCBWYXJpYWJsZUVudmlyb25tZW50JiBwcml2YXRlTmFtZXMp
OwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYp
OworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBib29sIGlzVmFyU2NvcGUoKTsK
ICAgICBib29sIGlzTGV4aWNhbFNjb3BlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmNwcAko
cmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZWdt
ZW50ZWRWYXJpYWJsZU9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYyLDE5ICs2MiwyMiBA
QCBTY29wZU9mZnNldCBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0OjphCiAgICAgcmV0dXJuIFNj
b3BlT2Zmc2V0KG9sZFNpemUpOwogfQogCi12b2lkIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3Q6
OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IpCit0
ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0
Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAg
ICAgSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1NlZ21l
bnRlZFZhcmlhYmxlT2JqZWN0Kj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklU
Uyh0aGlzT2JqZWN0LCBpbmZvKCkpOwotICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVj
dCwgc2xvdFZpc2l0b3IpOworICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlz
aXRvcik7CiAgICAgCiAgICAgLy8gRklYTUU6IFdlIGNvdWxkIGF2b2lkIGxvY2tpbmcgaGVyZSBp
ZiBTZWdtZW50ZWRWZWN0b3Igd2FzIGxvY2stZnJlZS4gSXQgY291bGQgYmUgbWFkZSBsb2NrLWZy
ZWUKICAgICAvLyByZWxhdGl2ZWx5IGVhc2lseS4KICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2Nr
KHRoaXNPYmplY3QtPmNlbGxMb2NrKCkpOwogICAgIGZvciAodW5zaWduZWQgaSA9IHRoaXNPYmpl
Y3QtPm1fdmFyaWFibGVzLnNpemUoKTsgaS0tOykKLSAgICAgICAgc2xvdFZpc2l0b3IuYXBwZW5k
SGlkZGVuKHRoaXNPYmplY3QtPm1fdmFyaWFibGVzW2ldKTsKKyAgICAgICAgdmlzaXRvci5hcHBl
bmRIaWRkZW4odGhpc09iamVjdC0+bV92YXJpYWJsZXNbaV0pOwogfQogCitERUZJTkVfRVhQT1JU
X1ZJU0lUX0NISUxEUkVOKEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3QpOworCiB2b2lkIEpTU2Vn
bWVudGVkVmFyaWFibGVPYmplY3Q6OmFuYWx5emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFuYWx5
emVyJiBhbmFseXplcikKIHsKICAgICBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0KiB0aGlzT2Jq
ZWN0ID0ganNDYXN0PEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3QqPihjZWxsKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVPYmplY3QuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NlZ21lbnRlZFZh
cmlhYmxlT2JqZWN0LmgJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAt
ODYsNyArODYsNyBAQCBwdWJsaWM6CiAgICAgLy8gdGhlIGluZGV4IG9mIHRoZSBmaXJzdCBvbmUg
YWRkZWQuCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgU2NvcGVPZmZzZXQgYWRkVmFyaWFibGVzKHVu
c2lnbmVkIG51bWJlck9mVmFyaWFibGVzVG9BZGQsIEpTVmFsdWUpOwogICAgIAotICAgIEpTX0VY
UE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0
b3ImKTsKKyAgICBERUNMQVJFX0VYUE9SVF9WSVNJVF9DSElMRFJFTjsKICAgICBKU19FWFBPUlRf
UFJJVkFURSBzdGF0aWMgdm9pZCBhbmFseXplSGVhcChKU0NlbGwqLCBIZWFwQW5hbHl6ZXImKTsK
ICAgICAKIHByb3RlY3RlZDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
U2V0SXRlcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTU2V0SXRlcmF0b3IuY3BwCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU1NldEl0ZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTcs
MTMgKzU3LDE2IEBAIHZvaWQgSlNTZXRJdGVyYXRvcjo6ZmluaXNoQ3JlYXRpb24oVk0mIHYKICAg
ICAgICAgQmFzZTo6aW50ZXJuYWxGaWVsZChpbmRleCkuc2V0KHZtLCB0aGlzLCB2YWx1ZXNbaW5k
ZXhdKTsKIH0KIAotdm9pZCBKU1NldEl0ZXJhdG9yOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2Vs
bCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9p
ZCBKU1NldEl0ZXJhdG9yOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3Im
IHZpc2l0b3IpCiB7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1NldEl0ZXJhdG9y
Kj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZv
KCkpOwogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CiB9CiAK
K0RFRklORV9WSVNJVF9DSElMRFJFTihKU1NldEl0ZXJhdG9yKTsKKwogSlNWYWx1ZSBKU1NldEl0
ZXJhdG9yOjpjcmVhdGVQYWlyKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUg
a2V5LCBKU1ZhbHVlIHZhbHVlKQogewogICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3M7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NldEl0ZXJhdG9yLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZXRJdGVyYXRvci5oCShy
ZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NldEl0
ZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTEzMCw3ICsxMzAsNyBAQCBwcml2YXRlOgogICAg
IEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBKU1NldCosIEl0ZXJh
dGlvbktpbmQpOwogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKICAgICBKU19FWFBPUlRf
UFJJVkFURSBKU1ZhbHVlIGNyZWF0ZVBhaXIoSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlLCBKU1Zh
bHVlKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9y
Jik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIH07CiBTVEFUSUNfQVNTRVJUX0lTX1RS
SVZJQUxMWV9ERVNUUlVDVElCTEUoSlNTZXRJdGVyYXRvcik7CiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTU291cmNlQ29kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTb3VyY2VDb2RlLmNwcAkocmV2aXNpb24gMjcxNDQz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTb3VyY2VDb2RlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjYsNiArMjYsOCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1
ZGUgIkpTU291cmNlQ29kZS5oIgogCisjaW5jbHVkZSAiSlNDZWxsSW5saW5lcy5oIiAvLyBtbGFt
IFRFU1QKKwogbmFtZXNwYWNlIEpTQyB7CiAKIGNvbnN0IENsYXNzSW5mbyBKU1NvdXJjZUNvZGU6
OnNfaW5mbyA9IHsgIkpTU291cmNlQ29kZSIsIG51bGxwdHIsIG51bGxwdHIsIG51bGxwdHIsIENS
RUFURV9NRVRIT0RfVEFCTEUoSlNTb3VyY2VDb2RlKSB9OwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MDUsNyArMTA1LDggQEAgc2l6ZV90IEpTU3RyaW5nOjplc3RpbWF0ZWRTaXplKEpTQ2VsbCogYwog
ICAgIHJldHVybiBCYXNlOjplc3RpbWF0ZWRTaXplKGNlbGwsIHZtKSArIGJpdHdpc2VfY2FzdDxT
dHJpbmdJbXBsKj4ocG9pbnRlciktPmNvc3REdXJpbmdHQygpOwogfQogCi12b2lkIEpTU3RyaW5n
Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1w
bGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1N0cmluZzo6dmlzaXRDaGlsZHJlbkltcGwo
SlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTU3RyaW5nKiB0aGlzT2Jq
ZWN0ID0gYXNTdHJpbmcoY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlz
T2JqZWN0LCBpbmZvKCkpOwpAQCAtMTQzLDYgKzE0NCw4IEBAIHZvaWQgSlNTdHJpbmc6OnZpc2l0
Q2hpbGRyZW4oSlNDZWxsKiBjZWwKICAgICAgICAgdmlzaXRvci5yZXBvcnRFeHRyYU1lbW9yeVZp
c2l0ZWQoaW1wbC0+Y29zdER1cmluZ0dDKCkpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4o
SlNTdHJpbmcpOworCiBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG1heExlbmd0aEZvck9uU3Rh
Y2tSZXNvbHZlID0gMjA0ODsKIAogdm9pZCBKU1JvcGVTdHJpbmc6OnJlc29sdmVSb3BlSW50ZXJu
YWw4KExDaGFyKiBidWZmZXIpIGNvbnN0CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1N0cmluZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTU3RyaW5nLmgJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTU3RyaW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTIxNyw3ICsyMTcsNyBAQCBw
dWJsaWM6CiAKICAgICBzdGF0aWMgdm9pZCBkdW1wVG9TdHJlYW0oY29uc3QgSlNDZWxsKiwgUHJp
bnRTdHJlYW0mKTsKICAgICBzdGF0aWMgc2l6ZV90IGVzdGltYXRlZFNpemUoSlNDZWxsKiwgVk0m
KTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7
CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIEFMV0FZU19JTkxJTkUgYm9vbCBp
c1JvcGUoKSBjb25zdAogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTU3RyaW5nSXRlcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTU3RyaW5nSXRlcmF0b3IuY3BwCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZ0l0ZXJhdG9yLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNTEsMTEgKzUxLDE0IEBAIEpTU3RyaW5nSXRlcmF0b3IqIEpTU3RyaW5nSXRlcmF0
b3I6OmNsb24KICAgICByZXR1cm4gY2xvbmU7CiB9CiAKLXZvaWQgSlNTdHJpbmdJdGVyYXRvcjo6
dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxh
dGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNTdHJpbmdJdGVyYXRvcjo6dmlzaXRDaGlsZHJl
bkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGF1dG8qIHRoaXNP
YmplY3QgPSBqc0Nhc3Q8SlNTdHJpbmdJdGVyYXRvcio+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19P
QkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKICAgICBCYXNlOjp2aXNpdENoaWxk
cmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNT
dHJpbmdJdGVyYXRvcik7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmdJdGVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nSXRlcmF0b3IuaAkocmV2aXNpb24gMjcx
NDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmdJdGVyYXRvci5o
CSh3b3JraW5nIGNvcHkpCkBAIC03OSw3ICs3OSw3IEBAIHB1YmxpYzoKICAgICBKU1ZhbHVlIGlu
ZGV4KCkgY29uc3QgeyByZXR1cm4gaW50ZXJuYWxGaWVsZChGaWVsZDo6SW5kZXgpLmdldCgpOyB9
CiAgICAgSlNTdHJpbmdJdGVyYXRvciogY2xvbmUoSlNHbG9iYWxPYmplY3QqKTsKIAotICAgIHN0
YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNM
QVJFX1ZJU0lUX0NISUxEUkVOOwogCiBwcml2YXRlOgogICAgIEpTU3RyaW5nSXRlcmF0b3IoVk0m
IHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuY3BwCShyZXZpc2lvbiAyNzE0
NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsOCBAQCBuYW1lc3BhY2UgSlNDIHsKIAog
Y29uc3QgQ2xhc3NJbmZvIEpTU3ltYm9sVGFibGVPYmplY3Q6OnNfaW5mbyA9IHsgIlN5bWJvbFRh
YmxlT2JqZWN0IiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhP
RF9UQUJMRShKU1N5bWJvbFRhYmxlT2JqZWN0KSB9OwogCi12b2lkIEpTU3ltYm9sVGFibGVPYmpl
Y3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3Rl
bXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTU3ltYm9sVGFibGVPYmplY3Q6OnZpc2l0
Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU1N5
bWJvbFRhYmxlT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTU3ltYm9sVGFibGVPYmplY3Qq
PihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8o
KSk7CkBAIC00NCw2ICs0NSw4IEBAIHZvaWQgSlNTeW1ib2xUYWJsZU9iamVjdDo6dmlzaXRDaGls
ZHJlbigKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX3N5bWJvbFRhYmxlKTsKIH0K
IAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTU3ltYm9sVGFibGVPYmplY3QpOworCiBib29sIEpT
U3ltYm9sVGFibGVPYmplY3Q6OmRlbGV0ZVByb3BlcnR5KEpTQ2VsbCogY2VsbCwgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgRGVsZXRlUHJv
cGVydHlTbG90JiBzbG90KQogewogICAgIEpTU3ltYm9sVGFibGVPYmplY3QqIHRoaXNPYmplY3Qg
PSBqc0Nhc3Q8SlNTeW1ib2xUYWJsZU9iamVjdCo+KGNlbGwpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVjdC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuaAkocmV2aXNp
b24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTeW1ib2xUYWJs
ZU9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC03MCw3ICs3MCw3IEBAIHByb3RlY3RlZDoKICAg
ICAgICAgbV9zeW1ib2xUYWJsZS5zZXQodm0sIHRoaXMsIHN5bWJvbFRhYmxlKTsKICAgICB9CiAg
ICAgCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYp
OworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAgICAgCiBwcml2YXRlOgogICAgIFdyaXRl
QmFycmllcjxTeW1ib2xUYWJsZT4gbV9zeW1ib2xUYWJsZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTV2Vha09iamVjdFJlZi5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNXZWFrT2JqZWN0UmVmLmNwcAkocmV2aXNpb24gMjcx
NDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNXZWFrT2JqZWN0UmVmLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzksNyArMzksOCBAQCB2b2lkIEpTV2Vha09iamVjdFJlZjo6
ZmluaXNoQ3JlYXRpb24oVk0mCiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwogfQogCi12
b2lkIEpTV2Vha09iamVjdFJlZjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNp
dG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNXZWFrT2Jq
ZWN0UmVmOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3Ip
CiB7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1dlYWtPYmplY3RSZWYqPihjZWxs
KTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBA
IC01MSw2ICs1Miw4IEBAIHZvaWQgSlNXZWFrT2JqZWN0UmVmOjp2aXNpdENoaWxkcmVuKEpTQ2UK
ICAgICB9CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU1dlYWtPYmplY3RSZWYpOworCiB2
b2lkIEpTV2Vha09iamVjdFJlZjo6ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoVk0mIHZtKQogewog
ICAgIGlmIChtX3ZhbHVlICYmICF2bS5oZWFwLmlzTWFya2VkKG1fdmFsdWUuZ2V0KCkpKQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNXZWFrT2JqZWN0UmVmLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNXZWFrT2JqZWN0UmVmLmgJ
KHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTV2Vh
a09iamVjdFJlZi5oCSh3b3JraW5nIGNvcHkpCkBAIC02NSw3ICs2NSw3IEBAIHB1YmxpYzoKICAg
ICB9CiAKICAgICB2b2lkIGZpbmFsaXplVW5jb25kaXRpb25hbGx5KFZNJik7Ci0gICAgc3RhdGlj
IHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVf
VklTSVRfQ0hJTERSRU47CiAKIHByaXZhdGU6CiAgICAgSlNXZWFrT2JqZWN0UmVmKFZNJiB2bSwg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU1dpdGhTY29wZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNXaXRoU2NvcGUuY3BwCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU1dpdGhTY29wZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDcg
KzQxLDggQEAgSlNXaXRoU2NvcGUqIEpTV2l0aFNjb3BlOjpjcmVhdGUoCiAgICAgcmV0dXJuIHdp
dGhTY29wZTsKIH0KIAotdm9pZCBKU1dpdGhTY29wZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNl
bGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3Zv
aWQgSlNXaXRoU2NvcGU6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYg
dmlzaXRvcikKIHsKICAgICBKU1dpdGhTY29wZSogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1dpdGhT
Y29wZSo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwg
aW5mbygpKTsKQEAgLTQ5LDYgKzUwLDggQEAgdm9pZCBKU1dpdGhTY29wZTo6dmlzaXRDaGlsZHJl
bihKU0NlbGwqIAogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fb2JqZWN0KTsKIH0K
IAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTV2l0aFNjb3BlKTsKKwogU3RydWN0dXJlKiBKU1dp
dGhTY29wZTo6Y3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgSlNWYWx1ZSBwcm90bykKIHsKICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0s
IGdsb2JhbE9iamVjdCwgcHJvdG8sIFR5cGVJbmZvKFdpdGhTY29wZVR5cGUsIFN0cnVjdHVyZUZs
YWdzKSwgaW5mbygpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTV2l0
aFNjb3BlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNX
aXRoU2NvcGUuaAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNXaXRoU2NvcGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDMsNyArNDMsNyBAQCBwdWJs
aWM6CiAKICAgICBKU09iamVjdCogb2JqZWN0KCkgeyByZXR1cm4gbV9vYmplY3QuZ2V0KCk7IH0K
IAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsK
KyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgc3RhdGljIFN0cnVjdHVyZSogY3Jl
YXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlIHByb3RvKTsKIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNXcmFwcGVyT2JqZWN0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1dyYXBwZXJPYmplY3Qu
Y3BwCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U1dyYXBwZXJPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSwxMSArMjksMTQgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAKIFNUQVRJQ19BU1NFUlRfSVNfVFJJVklBTExZX0RFU1RSVUNUSUJMRShK
U1dyYXBwZXJPYmplY3QpOwogCi12b2lkIEpTV3JhcHBlck9iamVjdDo6dmlzaXRDaGlsZHJlbihK
U0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlz
aXRvcj4KK3ZvaWQgSlNXcmFwcGVyT2JqZWN0Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNl
bGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxK
U1dyYXBwZXJPYmplY3QqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRo
aXNPYmplY3QsIGluZm8oKSk7CiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2
aXNpdG9yKTsKIH0KIAorREVGSU5FX0VYUE9SVF9WSVNJVF9DSElMRFJFTihKU1dyYXBwZXJPYmpl
Y3QpOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTV3JhcHBlck9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTV3JhcHBlck9iamVjdC5oCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1dyYXBwZXJPYmplY3QuaAkod29ya2luZyBjb3B5
KQpAQCAtNjQsNyArNjQsNyBAQCBwdWJsaWM6CiBwcm90ZWN0ZWQ6CiAgICAgZXhwbGljaXQgSlNX
cmFwcGVyT2JqZWN0KFZNJiwgU3RydWN0dXJlKik7CiAKLSAgICBKU19FWFBPUlRfUFJJVkFURSBz
dGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVD
TEFSRV9FWFBPUlRfVklTSVRfQ0hJTERSRU47CiB9OwogCiBpbmxpbmUgSlNXcmFwcGVyT2JqZWN0
OjpKU1dyYXBwZXJPYmplY3QoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0xhenlDbGFzc1N0cnVjdHVyZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTGF6eUNsYXNzU3RydWN0dXJl
LmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
TGF6eUNsYXNzU3RydWN0dXJlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzIsMTIgKzcyLDE2IEBA
IHZvaWQgTGF6eUNsYXNzU3RydWN0dXJlOjpJbml0aWFsaXplcjo6c2UKICAgICBjbGFzc1N0cnVj
dHVyZS5tX2NvbnN0cnVjdG9yLnNldCh2bSwgZ2xvYmFsLCBjb25zdHJ1Y3Rvcik7CiB9CiAKLXZv
aWQgTGF6eUNsYXNzU3RydWN0dXJlOjp2aXNpdChTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBs
YXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIExhenlDbGFzc1N0cnVjdHVyZTo6dmlzaXQoVmlz
aXRvciYgdmlzaXRvcikKIHsKICAgICBtX3N0cnVjdHVyZS52aXNpdCh2aXNpdG9yKTsKICAgICB2
aXNpdG9yLmFwcGVuZChtX2NvbnN0cnVjdG9yKTsKIH0KIAordGVtcGxhdGUgdm9pZCBMYXp5Q2xh
c3NTdHJ1Y3R1cmU6OnZpc2l0KEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQg
TGF6eUNsYXNzU3RydWN0dXJlOjp2aXNpdChTbG90VmlzaXRvciYpOworCiB2b2lkIExhenlDbGFz
c1N0cnVjdHVyZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAogewogICAgIG91dC5wcmlu
dCgiPHN0cnVjdHVyZSA9ICIsIG1fc3RydWN0dXJlLCAiLCBjb25zdHJ1Y3RvciA9ICIsIFJhd1Bv
aW50ZXIobV9jb25zdHJ1Y3Rvci5nZXQoKSksICI+Iik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9MYXp5Q2xhc3NTdHJ1Y3R1cmUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9MYXp5Q2xhc3NTdHJ1Y3R1cmUuaAkocmV2aXNpb24gMjcx
NDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTGF6eUNsYXNzU3RydWN0dXJl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTExNyw3ICsxMTcsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJl
dHVybiBtX2NvbnN0cnVjdG9yLmdldCgpOwogICAgIH0KICAgICAKLSAgICB2b2lkIHZpc2l0KFNs
b3RWaXNpdG9yJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCB2aXNpdChW
aXNpdG9yJik7CiAgICAgCiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0xhenlQcm9wZXJ0eS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0xhenlQcm9wZXJ0eS5oCShyZXZp
c2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9MYXp5UHJvcGVy
dHkuaAkod29ya2luZyBjb3B5KQpAQCAtMTAzLDcgKzEwMyw3IEBAIHB1YmxpYzoKICAgICB2b2lk
IHNldE1heUJlTnVsbChWTSYsIGNvbnN0IE93bmVyVHlwZSogb3duZXIsIEVsZW1lbnRUeXBlKik7
CiAgICAgdm9pZCBzZXQoVk0mLCBjb25zdCBPd25lclR5cGUqIG93bmVyLCBFbGVtZW50VHlwZSop
OwogICAgIAotICAgIHZvaWQgdmlzaXQoU2xvdFZpc2l0b3ImKTsKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBWaXNpdG9yPiB2b2lkIHZpc2l0KFZpc2l0b3ImKTsKICAgICAKICAgICB2b2lkIGR1bXAo
UHJpbnRTdHJlYW0mKSBjb25zdDsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0xhenlQcm9wZXJ0eUlubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9MYXp5UHJvcGVydHlJbmxpbmVzLmgJKHJldmlzaW9uIDI3MTQ0MykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0xhenlQcm9wZXJ0eUlubGluZXMuaAko
d29ya2luZyBjb3B5KQpAQCAtNjYsNyArNjYsOCBAQCB2b2lkIExhenlQcm9wZXJ0eTxPd25lclR5
cGUsIEVsZW1lbnRUeXBlCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE93bmVyVHlwZSwgdHlwZW5h
bWUgRWxlbWVudFR5cGU+Ci12b2lkIExhenlQcm9wZXJ0eTxPd25lclR5cGUsIEVsZW1lbnRUeXBl
Pjo6dmlzaXQoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
Pgordm9pZCBMYXp5UHJvcGVydHk8T3duZXJUeXBlLCBFbGVtZW50VHlwZT46OnZpc2l0KFZpc2l0
b3ImIHZpc2l0b3IpCiB7CiAgICAgaWYgKG1fcG9pbnRlciAmJiAhKG1fcG9pbnRlciAmIGxhenlU
YWcpKQogICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKGJpdHdpc2VfY2FzdDxFbGVt
ZW50VHlwZSo+KG1fcG9pbnRlcikpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL01vZHVsZVByb2dyYW1FeGVjdXRhYmxlLmNwcAkocmV2aXNpb24g
MjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTW9kdWxlUHJvZ3JhbUV4
ZWN1dGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03OSw3ICs3OSw4IEBAIGF1dG8gTW9kdWxl
UHJvZ3JhbUV4ZWN1dGFibGU6OmVuc3VyZVRlbXAKICAgICByZXR1cm4gZW5zdXJlVGVtcGxhdGVP
YmplY3RNYXBJbXBsKG1fdGVtcGxhdGVPYmplY3RNYXApOwogfQogCi12b2lkIE1vZHVsZVByb2dy
YW1FeGVjdXRhYmxlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZp
c2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBNb2R1bGVQcm9ncmFtRXhl
Y3V0YWJsZTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9y
KQogewogICAgIE1vZHVsZVByb2dyYW1FeGVjdXRhYmxlKiB0aGlzT2JqZWN0ID0ganNDYXN0PE1v
ZHVsZVByb2dyYW1FeGVjdXRhYmxlKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhF
UklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtOTQsNCArOTUsNiBAQCB2b2lkIE1vZHVsZVBy
b2dyYW1FeGVjdXRhYmxlOjp2aXNpdENoaWxkCiAgICAgfQogfQogCitERUZJTkVfVklTSVRfQ0hJ
TERSRU4oTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUpOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01vZHVsZVByb2dyYW1FeGVjdXRhYmxl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTW9kdWxlUHJv
Z3JhbUV4ZWN1dGFibGUuaAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAt
NzcsNyArNzcsNyBAQCBwcml2YXRlOgogCiAgICAgTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUoSlNH
bG9iYWxPYmplY3QqLCBjb25zdCBTb3VyY2VDb2RlJik7CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNp
dENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElM
RFJFTjsKIAogICAgIFdyaXRlQmFycmllcjxVbmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2s+
IG1fdW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrOwogICAgIFdyaXRlQmFycmllcjxTeW1i
b2xUYWJsZT4gbV9tb2R1bGVFbnZpcm9ubWVudFN5bWJvbFRhYmxlOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvZ3JhbUV4ZWN1dGFibGUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb2dyYW1FeGVjdXRhYmxlLmNwcAkocmV2
aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvZ3JhbUV4
ZWN1dGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDgsNyArMjA4LDggQEAgYXV0byBQcm9n
cmFtRXhlY3V0YWJsZTo6ZW5zdXJlVGVtcGxhdGVPYgogICAgIHJldHVybiBlbnN1cmVUZW1wbGF0
ZU9iamVjdE1hcEltcGwobV90ZW1wbGF0ZU9iamVjdE1hcCk7CiB9CiAKLXZvaWQgUHJvZ3JhbUV4
ZWN1dGFibGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRv
cikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFByb2dyYW1FeGVjdXRhYmxlOjp2
aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAg
UHJvZ3JhbUV4ZWN1dGFibGUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8UHJvZ3JhbUV4ZWN1dGFibGUq
PihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8o
KSk7CkBAIC0yMjIsNCArMjIzLDYgQEAgdm9pZCBQcm9ncmFtRXhlY3V0YWJsZTo6dmlzaXRDaGls
ZHJlbihKUwogICAgIH0KIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKFByb2dyYW1FeGVjdXRh
YmxlKTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9Qcm9ncmFtRXhlY3V0YWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1Byb2dyYW1FeGVjdXRhYmxlLmgJKHJldmlzaW9uIDI3MTQ0MykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb2dyYW1FeGVjdXRhYmxlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTgxLDcgKzgxLDcgQEAgcHJpdmF0ZToKIAogICAgIFByb2dyYW1FeGVjdXRh
YmxlKEpTR2xvYmFsT2JqZWN0KiwgY29uc3QgU291cmNlQ29kZSYpOwogCi0gICAgc3RhdGljIHZv
aWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklT
SVRfQ0hJTERSRU47CiAKICAgICBXcml0ZUJhcnJpZXI8VW5saW5rZWRQcm9ncmFtQ29kZUJsb2Nr
PiBtX3VubGlua2VkUHJvZ3JhbUNvZGVCbG9jazsKICAgICBXcml0ZUJhcnJpZXI8RXhlY3V0YWJs
ZVRvQ29kZUJsb2NrRWRnZT4gbV9wcm9ncmFtQ29kZUJsb2NrOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlNYXBIYXNoVGFibGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eU1hcEhhc2hUYWJsZS5oCShyZXZp
c2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eU1h
cEhhc2hUYWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzMsNyArMTMzLDcgQEAgcHVibGljOgog
CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOwogICAg
IHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGls
ZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47
CiAKICAgICBERUNMQVJFX0VYUE9SVF9JTkZPOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9Qcm9wZXJ0eVRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eVRhYmxlLmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlUYWJsZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTExOCw3ICsxMTgsOCBAQCB2b2lkIFByb3BlcnR5VGFibGU6OmZpbmlzaENyZWF0
aW9uKFZNJiB2CiAgICAgdm0uaGVhcC5yZXBvcnRFeHRyYU1lbW9yeUFsbG9jYXRlZChkYXRhU2l6
ZSgpKTsKIH0KIAotdm9pZCBQcm9wZXJ0eVRhYmxlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2Vs
bCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9p
ZCBQcm9wZXJ0eVRhYmxlOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3Im
IHZpc2l0b3IpCiB7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxQcm9wZXJ0eVRhYmxl
Kj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZv
KCkpOwpAQCAtMTI2LDYgKzEyNyw4IEBAIHZvaWQgUHJvcGVydHlUYWJsZTo6dmlzaXRDaGlsZHJl
bihKU0NlbGwKICAgICB2aXNpdG9yLnJlcG9ydEV4dHJhTWVtb3J5VmlzaXRlZCh0aGlzT2JqZWN0
LT5kYXRhU2l6ZSgpKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKFByb3BlcnR5VGFibGUp
OworCiB2b2lkIFByb3BlcnR5VGFibGU6OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQogewogICAgIHN0
YXRpY19jYXN0PFByb3BlcnR5VGFibGUqPihjZWxsKS0+UHJvcGVydHlUYWJsZTo6flByb3BlcnR5
VGFibGUoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3h5T2JqZWN0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm94eU9i
amVjdC5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1Byb3h5T2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE1OCw3ICsxMTU4LDggQEAg
Ym9vbCBQcm94eU9iamVjdDo6aXNSZXZva2VkKCkgY29uc3QKICAgICByZXR1cm4gaGFuZGxlcigp
LmlzTnVsbCgpOwogfQogCi12b2lkIFByb3h5T2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCog
Y2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgor
dm9pZCBQcm94eU9iamVjdDo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9y
JiB2aXNpdG9yKQogewogICAgIFByb3h5T2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PFByb3h5
T2JqZWN0Kj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0
LCBpbmZvKCkpOwpAQCAtMTE2OCw0ICsxMTY5LDYgQEAgdm9pZCBQcm94eU9iamVjdDo6dmlzaXRD
aGlsZHJlbihKU0NlbGwqIAogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1faGFuZGxl
cik7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihQcm94eU9iamVjdCk7CisKIH0gLy8gbmFt
ZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJveHlPYmpl
Y3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm94eU9i
amVjdC5oCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9Qcm94eU9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC05MSw3ICs5MSw3IEBAIHByaXZhdGU6
CiAgICAgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCosIEpTR2xvYmFs
T2JqZWN0KiwgUHJvcGVydHlOYW1lQXJyYXkmLCBEb250RW51bVByb3BlcnRpZXNNb2RlKTsKICAg
ICBzdGF0aWMgYm9vbCBzZXRQcm90b3R5cGUoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIEpT
VmFsdWUgcHJvdG90eXBlLCBib29sIHNob3VsZFRocm93SWZDYW50U2V0KTsKICAgICBzdGF0aWMg
SlNWYWx1ZSBnZXRQcm90b3R5cGUoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCopOwotICAgIHN0
YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNM
QVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3RDb21tb24o
SlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwogICAgIGJvb2wg
cGVyZm9ybUludGVybmFsTWV0aG9kR2V0T3duUHJvcGVydHkoSlNHbG9iYWxPYmplY3QqLCBQcm9w
ZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvUHJveHlSZXZva2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1Byb3h5UmV2b2tlLmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJveHlSZXZva2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02
OSw3ICs2OSw4IEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihwZXJmb3JtUHJveHlSZXYKICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCi12b2lkIFByb3h5
UmV2b2tlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3Ip
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBQcm94eVJldm9rZTo6dmlzaXRDaGls
ZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFByb3h5UmV2
b2tlKiB0aGlzT2JqZWN0ID0ganNDYXN0PFByb3h5UmV2b2tlKj4oY2VsbCk7CiAgICAgQVNTRVJU
X0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNzgsNCArNzksNiBA
QCB2b2lkIFByb3h5UmV2b2tlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogCiAgICAgdmlzaXRvci5h
cHBlbmQodGhpc09iamVjdC0+bV9wcm94eSk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihQ
cm94eVJldm9rZSk7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvUHJveHlSZXZva2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9Qcm94eVJldm9rZS5oCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm94eVJldm9rZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC01Miw3ICs1Miw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICB2b2lkIGZpbmlzaENyZWF0aW9u
KFZNJiwgUHJveHlPYmplY3QqKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2Vs
bCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKICAgICBKU1Zh
bHVlIHByb3h5KCkgeyByZXR1cm4gbV9wcm94eS5nZXQoKTsgfQogICAgIHZvaWQgc2V0UHJveHlU
b051bGwoVk0mIHZtKSB7IHJldHVybiBtX3Byb3h5LnNldCh2bSwgdGhpcywganNOdWxsKCkpOyB9
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENhY2hlZFJlc3Vs
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhw
Q2FjaGVkUmVzdWx0LmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvUmVnRXhwQ2FjaGVkUmVzdWx0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEs
NyArMzEsOCBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotdm9pZCBSZWdFeHBDYWNoZWRSZXN1bHQ6
OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUg
VmlzaXRvcj4KK3ZvaWQgUmVnRXhwQ2FjaGVkUmVzdWx0Ojp2aXNpdEFnZ3JlZ2F0ZShWaXNpdG9y
JiB2aXNpdG9yKQogewogICAgIHZpc2l0b3IuYXBwZW5kKG1fbGFzdElucHV0KTsKICAgICB2aXNp
dG9yLmFwcGVuZChtX2xhc3RSZWdFeHApOwpAQCAtNDMsNiArNDQsOSBAQCB2b2lkIFJlZ0V4cENh
Y2hlZFJlc3VsdDo6dmlzaXRBZ2dyZWdhdGUoCiAgICAgfQogfQogCit0ZW1wbGF0ZSB2b2lkIFJl
Z0V4cENhY2hlZFJlc3VsdDo6dmlzaXRBZ2dyZWdhdGUoQWJzdHJhY3RTbG90VmlzaXRvciYpOwor
dGVtcGxhdGUgdm9pZCBSZWdFeHBDYWNoZWRSZXN1bHQ6OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNp
dG9yJik7CisKIEpTQXJyYXkqIFJlZ0V4cENhY2hlZFJlc3VsdDo6bGFzdFJlc3VsdChKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU09iamVjdCogb3duZXIpCiB7CiAgICAgVk0mIHZtID0g
Z2xvYmFsT2JqZWN0LT52bSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
UmVnRXhwQ2FjaGVkUmVzdWx0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvUmVnRXhwQ2FjaGVkUmVzdWx0LmgJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENhY2hlZFJlc3VsdC5oCSh3b3JraW5nIGNv
cHkpCkBAIC02NSw3ICs2NSw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fcmVpZmllZCA/
IG1fcmVpZmllZElucHV0LmdldCgpIDogbV9sYXN0SW5wdXQuZ2V0KCk7CiAgICAgfQogCi0gICAg
dm9pZCB2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFZpc2l0b3I+IHZvaWQgdmlzaXRBZ2dyZWdhdGUoVmlzaXRvciYpOwogCiAgICAgLy8gbV9sYXN0
UmVnRXhwIHdvdWxkIGJlIG51bGxwdHIgd2hlbiBSZWdFeHBDYWNoZWRSZXN1bHQgaXMgbm90IHJl
aWZpZWQuCiAgICAgLy8gSWYgd2UgZmluZCBtX2xhc3RSZWdFeHAgaXMgbnVsbHB0ciwgaXQgbWVh
bnMgdGhpcyBzaG91bGQgaG9sZCB0aGUgZW1wdHkgUmVnRXhwLgpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwR2xvYmFsRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwR2xvYmFsRGF0YS5jcHAJKHJldmlzaW9u
IDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cEdsb2JhbERh
dGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCwxMSArMzAsMTUgQEAKIAogbmFtZXNwYWNlIEpT
QyB7CiAKLXZvaWQgUmVnRXhwR2xvYmFsRGF0YTo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3Im
IHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBSZWdFeHBHbG9iYWxE
YXRhOjp2aXNpdEFnZ3JlZ2F0ZShWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIG1fY2FjaGVkUmVz
dWx0LnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOwogfQogCit0ZW1wbGF0ZSB2b2lkIFJlZ0V4cEds
b2JhbERhdGE6OnZpc2l0QWdncmVnYXRlKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRl
IHZvaWQgUmVnRXhwR2xvYmFsRGF0YTo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImKTsKKwog
SlNWYWx1ZSBSZWdFeHBHbG9iYWxEYXRhOjpnZXRCYWNrcmVmKEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIHVuc2lnbmVkIGkpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwR2xvYmFsRGF0YS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cEdsb2Jh
bERhdGEuaAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvUmVnRXhwR2xvYmFsRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0MSw3IEBAIHB1
YmxpYzoKICAgICB2b2lkIHNldElucHV0KEpTR2xvYmFsT2JqZWN0KiwgSlNTdHJpbmcqKTsKICAg
ICBKU1N0cmluZyogaW5wdXQoKSB7IHJldHVybiBtX2NhY2hlZFJlc3VsdC5pbnB1dCgpOyB9CiAK
LSAgICB2b2lkIHZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJik7CisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVmlzaXRvcj4gdm9pZCB2aXNpdEFnZ3JlZ2F0ZShWaXNpdG9yJik7CiAKICAgICBKU1Zh
bHVlIGdldEJhY2tyZWYoSlNHbG9iYWxPYmplY3QqLCB1bnNpZ25lZCk7CiAgICAgSlNWYWx1ZSBn
ZXRMYXN0UGFyZW4oSlNHbG9iYWxPYmplY3QqKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1JlZ0V4cE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0LmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDYsNyArNDYsOCBAQCB2b2lkIFJlZ0V4cE9iamVjdDo6ZmluaXNoQ3JlYXRpb24oVk0m
IHZtCiAgICAgQVNTRVJUKHR5cGUoKSA9PSBSZWdFeHBPYmplY3RUeXBlKTsKIH0KIAotdm9pZCBS
ZWdFeHBPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlz
aXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFJlZ0V4cE9iamVjdDo6dmlz
aXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFJl
Z0V4cE9iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxSZWdFeHBPYmplY3QqPihjZWxsKTsKICAg
ICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC01NSw2
ICs1Niw4IEBAIHZvaWQgUmVnRXhwT2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCoKICAgICB2
aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2xhc3RJbmRleCk7CiB9CiAKK0RFRklORV9WSVNJ
VF9DSElMRFJFTihSZWdFeHBPYmplY3QpOworCiBib29sIFJlZ0V4cE9iamVjdDo6Z2V0T3duUHJv
cGVydHlTbG90KEpTT2JqZWN0KiBvYmplY3QsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBW
TSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9SZWdFeHBPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9SZWdFeHBPYmplY3QuaAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEz
Myw3ICsxMzMsNyBAQCBwcml2YXRlOgogICAgIEpTX0VYUE9SVF9QUklWQVRFIFJlZ0V4cE9iamVj
dChWTSYsIFN0cnVjdHVyZSosIFJlZ0V4cCopOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQg
ZmluaXNoQ3JlYXRpb24oVk0mKTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlND
ZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAg
Ym9vbCBsYXN0SW5kZXhJc1dyaXRhYmxlKCkgY29uc3QKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TYW1wbGluZ1Byb2ZpbGVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TYW1wbGluZ1Byb2ZpbGVyLmNwcAkocmV2aXNp
b24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2FtcGxpbmdQcm9m
aWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY1Miw3ICs2NTIsNyBAQCB2b2lkIFNhbXBsaW5n
UHJvZmlsZXI6OnByb2Nlc3NVbnZlcmlmaWVkCiAgICAgbV91bnByb2Nlc3NlZFN0YWNrVHJhY2Vz
LmNsZWFyKCk7CiB9CiAKLXZvaWQgU2FtcGxpbmdQcm9maWxlcjo6dmlzaXQoU2xvdFZpc2l0b3Im
IHNsb3RWaXNpdG9yKQordm9pZCBTYW1wbGluZ1Byb2ZpbGVyOjp2aXNpdChBYnN0cmFjdFNsb3RW
aXNpdG9yJiBzbG90VmlzaXRvcikKIHsKICAgICBSRUxFQVNFX0FTU0VSVChtX2xvY2suaXNMb2Nr
ZWQoKSk7CiAgICAgZm9yIChKU0NlbGwqIGNlbGwgOiBtX2xpdmVDZWxsUG9pbnRlcnMpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TYW1wbGluZ1Byb2ZpbGVyLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5o
CShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TYW1w
bGluZ1Byb2ZpbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTE3MSw3ICsxNzEsNyBAQCBwdWJsaWM6
CiAgICAgdm9pZCBub3RpY2VKU0xvY2tBY3F1aXNpdGlvbigpOwogICAgIHZvaWQgbm90aWNlVk1F
bnRyeSgpOwogICAgIHZvaWQgc2h1dGRvd24oKTsKLSAgICB2b2lkIHZpc2l0KFNsb3RWaXNpdG9y
Jik7CisgICAgdm9pZCB2aXNpdChBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAgICAgTG9jayYgZ2V0
TG9jaygpIHsgcmV0dXJuIG1fbG9jazsgfQogICAgIHZvaWQgc2V0VGltaW5nSW50ZXJ2YWwoU2Vj
b25kcyBpbnRlcnZhbCkgeyBtX3RpbWluZ0ludGVydmFsID0gaW50ZXJ2YWw7IH0KICAgICBKU19F
WFBPUlRfUFJJVkFURSB2b2lkIHN0YXJ0KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TY29wZWRBcmd1bWVudHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1Njb3BlZEFyZ3VtZW50cy5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlZEFyZ3VtZW50cy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTk4LDcgKzk4LDggQEAgU2NvcGVkQXJndW1lbnRzKiBTY29wZWRBcmd1bWVu
dHM6OmNyZWF0ZQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQgU2NvcGVkQXJndW1lbnRz
Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1w
bGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBTY29wZWRBcmd1bWVudHM6OnZpc2l0Q2hpbGRy
ZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBTY29wZWRBcmd1
bWVudHMqIHRoaXNPYmplY3QgPSBzdGF0aWNfY2FzdDxTY29wZWRBcmd1bWVudHMqPihjZWxsKTsK
ICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC0x
MTUsNiArMTE2LDggQEAgdm9pZCBTY29wZWRBcmd1bWVudHM6OnZpc2l0Q2hpbGRyZW4oSlNDZQog
ICAgIH0KIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKFNjb3BlZEFyZ3VtZW50cyk7CisKIFN0
cnVjdHVyZSogU2NvcGVkQXJndW1lbnRzOjpjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKIHsKICAgICByZXR1cm4g
U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhT
Y29wZWRBcmd1bWVudHNUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29wZWRBcmd1bWVudHMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29wZWRBcmd1bWVudHMuaAkocmV2aXNp
b24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVkQXJndW1l
bnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTYzLDkgKzYzLDkgQEAgcHVibGljOgogICAgIAogICAg
IC8vIENyZWF0ZXMgYW4gYXJndW1lbnRzIG9iamVjdCBieSBjb3B5aW5nIHRoZSBhcmd1bWVudHMg
ZnJvbSBhIHdlbGwtZGVmaW5lZCBzdGFjayBsb2NhdGlvbi4KICAgICBzdGF0aWMgU2NvcGVkQXJn
dW1lbnRzKiBjcmVhdGVCeUNvcHlpbmdGcm9tKFZNJiwgU3RydWN0dXJlKiwgUmVnaXN0ZXIqIGFy
Z3VtZW50c1N0YXJ0LCB1bnNpZ25lZCB0b3RhbExlbmd0aCwgSlNGdW5jdGlvbiogY2FsbGVlLCBT
Y29wZWRBcmd1bWVudHNUYWJsZSosIEpTTGV4aWNhbEVudmlyb25tZW50Kik7Ci0gICAgCi0gICAg
c3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwotICAgIAor
CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKKwogICAgIHVpbnQzMl90IGludGVybmFsTGVu
Z3RoKCkgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiBtX3RvdGFsTGVuZ3RoOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NpbXBsZVR5
cGVkQXJyYXlDb250cm9sbGVyLmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC02Miw3ICs2Miw3IEBAIGJvb2wgU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXI6
OmlzQXRvbWkKICAgICByZXR1cm4gbV9hbGxvd0F0b21pY3NXYWl0OwogfQogCi1ib29sIFNpbXBs
ZVR5cGVkQXJyYXlDb250cm9sbGVyOjpKU0FycmF5QnVmZmVyT3duZXI6OmlzUmVhY2hhYmxlRnJv
bU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgSlND
OjpTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikKK2Jvb2wgU2ltcGxl
VHlwZWRBcnJheUNvbnRyb2xsZXI6OkpTQXJyYXlCdWZmZXJPd25lcjo6aXNSZWFjaGFibGVGcm9t
T3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBKU0M6
OkFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCiB7CiAg
ICAgaWYgKFVOTElLRUxZKHJlYXNvbikpCiAgICAgICAgICpyZWFzb24gPSAiSlNBcnJheUJ1ZmZl
ciBpcyBvcGFxdWUgcm9vdCI7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
aW1wbGVUeXBlZEFycmF5Q29udHJvbGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1NpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyLmgJKHJldmlzaW9uIDI3
MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NpbXBsZVR5cGVkQXJyYXlD
b250cm9sbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTU4LDcgKzU4LDcgQEAgcHVibGljOgogcHJp
dmF0ZToKICAgICBjbGFzcyBKU0FycmF5QnVmZmVyT3duZXIgZmluYWwgOiBwdWJsaWMgV2Vha0hh
bmRsZU93bmVyIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIGJvb2wgaXNSZWFjaGFibGVGcm9tT3Bh
cXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCwgU2xvdFZp
c2l0b3ImLCBjb25zdCBjaGFyKiogcmVhc29uKSBmaW5hbDsKKyAgICAgICAgYm9vbCBpc1JlYWNo
YWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250
ZXh0LCBBYnN0cmFjdFNsb3RWaXNpdG9yJiwgY29uc3QgY2hhcioqIHJlYXNvbikgZmluYWw7CiAg
ICAgICAgIHZvaWQgZmluYWxpemUoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29u
dGV4dCkgZmluYWw7CiAgICAgfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU21hbGxTdHJpbmdzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TbWFsbFN0cmluZ3MuY3BwCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TbWFsbFN0cmluZ3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02
Niw3ICs2Niw3IEBAIHZvaWQgU21hbGxTdHJpbmdzOjppbml0aWFsaXplQ29tbW9uU3RyaW4KICAg
ICBzZXRJc0luaXRpYWxpemVkKHRydWUpOwogfQogCi12b2lkIFNtYWxsU3RyaW5nczo6dmlzaXRT
dHJvbmdSZWZlcmVuY2VzKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBTbWFsbFN0cmluZ3M6
OnZpc2l0U3Ryb25nUmVmZXJlbmNlcyhBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewog
ICAgIG1fbmVlZHNUb0JlVmlzaXRlZCA9IGZhbHNlOwogICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJy
aWVyZWQobV9lbXB0eVN0cmluZyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TbWFsbFN0cmluZ3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TbWFsbFN0cmluZ3MuaAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU21hbGxTdHJpbmdzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDkgKzQ5
LDkgQEAgY2xhc3MgU3RyaW5nSW1wbDsKIAogbmFtZXNwYWNlIEpTQyB7CiAKK2NsYXNzIEFic3Ry
YWN0U2xvdFZpc2l0b3I7CiBjbGFzcyBWTTsKIGNsYXNzIEpTU3RyaW5nOwotY2xhc3MgU2xvdFZp
c2l0b3I7CiAKIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbWF4U2luZ2xlQ2hhcmFjdGVyU3Ry
aW5nID0gMHhGRjsKIApAQCAtNzgsNyArNzgsNyBAQCBwdWJsaWM6CiAgICAgSlNTdHJpbmcqKiBz
aW5nbGVDaGFyYWN0ZXJTdHJpbmdzKCkgeyByZXR1cm4gJm1fc2luZ2xlQ2hhcmFjdGVyU3RyaW5n
c1swXTsgfQogCiAgICAgdm9pZCBpbml0aWFsaXplQ29tbW9uU3RyaW5ncyhWTSYpOwotICAgIHZv
aWQgdmlzaXRTdHJvbmdSZWZlcmVuY2VzKFNsb3RWaXNpdG9yJik7CisgICAgdm9pZCB2aXNpdFN0
cm9uZ1JlZmVyZW5jZXMoQWJzdHJhY3RTbG90VmlzaXRvciYpOwogCiAjZGVmaW5lIEpTQ19DT01N
T05fU1RSSU5HU19BQ0NFU1NPUl9ERUZJTklUSU9OKG5hbWUpIFwKICAgICBKU1N0cmluZyogbmFt
ZSMjU3RyaW5nKCkgY29uc3QgICAgICAgICAgICAgICAgICAgXApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU3BhcnNlQXJyYXlWYWx1ZU1hcC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3BhcnNlQXJyYXlWYWx1ZU1hcC5jcHAJKHJl
dmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NwYXJzZUFy
cmF5VmFsdWVNYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTAsNyArMjEwLDggQEAgSlNWYWx1
ZSBTcGFyc2VBcnJheUVudHJ5OjpnZXROb25TcGFyc2VNbwogICAgIHJldHVybiBCYXNlOjpnZXQo
KTsKIH0KIAotdm9pZCBTcGFyc2VBcnJheVZhbHVlTWFwOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCog
Y2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgor
dm9pZCBTcGFyc2VBcnJheVZhbHVlTWFwOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGws
IFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCogdGhpc09iamVj
dCA9IGpzQ2FzdDxTcGFyc2VBcnJheVZhbHVlTWFwKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09C
SkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtMjIzLDUgKzIyNCw3IEBAIHZv
aWQgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6dmlzaXRDaGlsZHJlbigKICAgICB2aXNpdG9yLnJlcG9y
dEV4dHJhTWVtb3J5VmlzaXRlZCh0aGlzT2JqZWN0LT5tX3JlcG9ydGVkQ2FwYWNpdHkgKiBzaXpl
b2YoTWFwOjpLZXlWYWx1ZVBhaXJUeXBlKSk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihT
cGFyc2VBcnJheVZhbHVlTWFwKTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NwYXJzZUFycmF5VmFsdWVNYXAuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TcGFyc2VBcnJheVZhbHVlTWFwLmgJ
KHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NwYXJz
ZUFycmF5VmFsdWVNYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMTE1LDcgKzExNSw3IEBAIHB1Ymxp
YzoKICAgICAKICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0ds
b2JhbE9iamVjdCosIEpTVmFsdWUgcHJvdG90eXBlKTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0
Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxE
UkVOOwogCiAgICAgYm9vbCBzcGFyc2VNb2RlKCkKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TdGFja0ZyYW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TdGFja0ZyYW1lLmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RhY2tGcmFtZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE0Miw3ICsxNDIsOCBAQCBTdHJpbmcgU3RhY2tGcmFtZTo6dG9TdHJpbmcoVk0mIHZt
KSBjb25zCiAgICAgcmV0dXJuIHRyYWNlQnVpbGQudG9TdHJpbmcoKS5pbXBsKCk7CiB9CiAKLXZv
aWQgU3RhY2tGcmFtZTo6dmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBs
YXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFN0YWNrRnJhbWU6OnZpc2l0Q2hpbGRyZW5JbXBs
KFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgaWYgKG1fY2FsbGVlKQogICAgICAgICB2aXNpdG9y
LmFwcGVuZChtX2NhbGxlZSk7CkBAIC0xNTAsNSArMTUxLDcgQEAgdm9pZCBTdGFja0ZyYW1lOjp2
aXNpdENoaWxkcmVuKFNsb3RWaXNpdAogICAgICAgICB2aXNpdG9yLmFwcGVuZChtX2NvZGVCbG9j
ayk7CiB9CiAKK0RFRklORV9JTlNUQU5DRV9WSVNJVF9DSElMRFJFTihTdGFja0ZyYW1lKTsKKwog
fSAvLyBuYW1lc3BhY2UgSlNDCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1N0YWNrRnJhbWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TdGFja0ZyYW1lLmgJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1N0YWNrRnJhbWUuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAog
CiAjaW5jbHVkZSAiSGVhcC5oIgogI2luY2x1ZGUgIlZNLmgiCisjaW5jbHVkZSAiU2xvdFZpc2l0
b3JNYWNyb3MuaCIKICNpbmNsdWRlICJXYXNtSW5kZXhPck5hbWUuaCIKICNpbmNsdWRlICJXcml0
ZUJhcnJpZXIuaCIKICNpbmNsdWRlIDxsaW1pdHMuaD4KQEAgLTM1LDcgKzM2LDYgQEAgbmFtZXNw
YWNlIEpTQyB7CiAKIGNsYXNzIENvZGVCbG9jazsKIGNsYXNzIEpTT2JqZWN0OwotY2xhc3MgU2xv
dFZpc2l0b3I7CiAKIGNsYXNzIFN0YWNrRnJhbWUgewogcHVibGljOgpAQCAtNTgsNyArNTgsNyBA
QCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX2J5dGVjb2RlSW5kZXg7CiAgICAgfQogICAgIAot
ICAgIHZvaWQgdmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfSU5TVEFO
Q0VfVklTSVRfQ0hJTERSRU47CiAgICAgYm9vbCBpc01hcmtlZChWTSYgdm0pIGNvbnN0IHsgcmV0
dXJuICghbV9jYWxsZWUgfHwgdm0uaGVhcC5pc01hcmtlZChtX2NhbGxlZS5nZXQoKSkpICYmICgh
bV9jb2RlQmxvY2sgfHwgdm0uaGVhcC5pc01hcmtlZChtX2NvZGVCbG9jay5nZXQoKSkpOyB9CiAK
IHByaXZhdGU6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVy
ZS5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1N0cnVjdHVyZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNjcsNyArMTI2Nyw4IEBAIHZvaWQg
U3RydWN0dXJlOjpkaWRUcmFuc2l0aW9uRnJvbVRoaXNTdHIKICAgICAgICAgbV90cmFuc2l0aW9u
V2F0Y2hwb2ludFNldC5maXJlQWxsKHZtKCksIFN0cnVjdHVyZUZpcmVEZXRhaWwodGhpcykpOwog
fQogCi12b2lkIFN0cnVjdHVyZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNp
dG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgU3RydWN0dXJl
Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAg
ICAgU3RydWN0dXJlKiB0aGlzT2JqZWN0ID0ganNDYXN0PFN0cnVjdHVyZSo+KGNlbGwpOwogICAg
IEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTEyOTUs
NiArMTI5Niw4IEBAIHZvaWQgU3RydWN0dXJlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2UKICAg
ICAgICAgdGhpc09iamVjdC0+bV9wcm9wZXJ0eVRhYmxlVW5zYWZlLmNsZWFyKCk7CiB9CiAKK0RF
RklORV9WSVNJVF9DSElMRFJFTihTdHJ1Y3R1cmUpOworCiBib29sIFN0cnVjdHVyZTo6aXNDaGVh
cER1cmluZ0dDKFZNJiB2bSkKIHsKICAgICAvLyBGSVhNRTogV2UgY291bGQgbWFrZSB0aGlzIGV2
ZW4gc2FmZXIgYnkgcmV0dXJuaW5nIGZhbHNlIGlmIHRoaXMgc3RydWN0dXJlJ3MgcHJvcGVydHkg
dGFibGUKQEAgLTEzMDUsMTYgKzEzMDgsMjYgQEAgYm9vbCBTdHJ1Y3R1cmU6OmlzQ2hlYXBEdXJp
bmdHQyhWTSYgdm0pCiAgICAgICAgICYmIChoYXNQb2x5UHJvdG8oKSB8fCAhc3RvcmVkUHJvdG90
eXBlT2JqZWN0KCkgfHwgdm0uaGVhcC5pc01hcmtlZChzdG9yZWRQcm90b3R5cGVPYmplY3QoKSkp
OwogfQogCi1ib29sIFN0cnVjdHVyZTo6bWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImIHZpc2l0b3Ip
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgorYm9vbCBTdHJ1Y3R1cmU6Om1hcmtJZkNoZWFw
MShWaXNpdG9yJiB2aXNpdG9yKQorLy9ib29sIFN0cnVjdHVyZTo6bWFya0lmQ2hlYXAxKEFic3Ry
YWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgVk0mIHZtID0gdmlzaXRvci52bSgpOwog
ICAgIGlmICghaXNDaGVhcER1cmluZ0dDKHZtKSkKLSAgICAgICAgcmV0dXJuIHZtLmhlYXAuaXNN
YXJrZWQodGhpcyk7Ci0gICAgCisgICAgICAgIHJldHVybiB2bS5oZWFwLmlzTWFya2VkKHRoaXMp
OyAvLyBtbGFtIEZJU01FCisKICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKHRoaXMpOwog
ICAgIHJldHVybiB0cnVlOwogfQogCisvL3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+CisvL2Jv
b2wgU3RydWN0dXJlOjptYXJrSWZDaGVhcChWaXNpdG9yJiB2aXNpdG9yKQorLy97CisvLyAgICBy
ZXR1cm4gbWFya0lmQ2hlYXAxKHZpc2l0b3IpOyAvLyBtbGFtIEZJWE1FIEhBQ0sgdG8gZ2V0IHRo
aXMgY29tcGlsaW5nISEhCisvL30KK3RlbXBsYXRlIGJvb2wgU3RydWN0dXJlOjptYXJrSWZDaGVh
cDEoU2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIGJvb2wgU3RydWN0dXJlOjptYXJrSWZDaGVhcDEo
QWJzdHJhY3RTbG90VmlzaXRvciYpOworCiBSZWY8U3RydWN0dXJlU2hhcGU+IFN0cnVjdHVyZTo6
dG9TdHJ1Y3R1cmVTaGFwZShKU1ZhbHVlIHZhbHVlLCBib29sJiBzYXdQb2x5UHJvdG9TdHJ1Y3R1
cmUpCiB7CiAgICAgUmVmPFN0cnVjdHVyZVNoYXBlPiBiYXNlU2hhcGUgPSBTdHJ1Y3R1cmVTaGFw
ZTo6Y3JlYXRlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1
cmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1
cmUuaAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U3RydWN0dXJlLmgJKHdvcmtpbmcgY29weSkKQEAgLTYwLDcgKzYwLDYgQEAgY2xhc3MgUHJvcGVy
dHlOYW1lQXJyYXlEYXRhOwogY2xhc3MgUHJvcGVydHlUYWJsZTsKIGNsYXNzIFN0cnVjdHVyZUNo
YWluOwogY2xhc3MgU3RydWN0dXJlU2hhcGU7Ci1jbGFzcyBTbG90VmlzaXRvcjsKIGNsYXNzIEpT
U3RyaW5nOwogc3RydWN0IER1bXBDb250ZXh0Owogc3RydWN0IEhhc2hUYWJsZTsKQEAgLTMwNyw3
ICszMDYsNyBAQCBwdWJsaWM6CiAgICAgSlNWYWx1ZSBwcm90b3R5cGVGb3JMb29rdXAoSlNHbG9i
YWxPYmplY3QqLCBKU0NlbGwqIGJhc2UpIGNvbnN0OwogICAgIFN0cnVjdHVyZUNoYWluKiBwcm90
b3R5cGVDaGFpbihWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNPYmplY3QqIGJhc2UpIGNvbnN0Owog
ICAgIFN0cnVjdHVyZUNoYWluKiBwcm90b3R5cGVDaGFpbihKU0dsb2JhbE9iamVjdCosIEpTT2Jq
ZWN0KiBiYXNlKSBjb25zdDsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCos
IFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKICAgICAKICAgICAv
LyBBIFN0cnVjdHVyZSBpcyBjaGVhcCB0byBtYXJrIGR1cmluZyBHQyBpZiBkb2luZyBzbyB3b3Vs
ZCBvbmx5IGFkZCBhIHNtYWxsIGFuZCBib3VuZGVkIGFtb3VudAogICAgIC8vIHRvIG91ciBoZWFw
IGZvb3RwcmludC4gRm9yIGV4YW1wbGUsIGlmIHRoZSBzdHJ1Y3R1cmUgcmVmZXJzIHRvIGEgZ2xv
YmFsIG9iamVjdCB0aGF0IGlzIG5vdApAQCAtMzE4LDcgKzMxNyw5IEBAIHB1YmxpYzoKICAgICBi
b29sIGlzQ2hlYXBEdXJpbmdHQyhWTSYpOwogICAgIAogICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0
aGlzIHN0cnVjdHVyZSBpcyBub3cgbWFya2VkLgotICAgIGJvb2wgbWFya0lmQ2hlYXAoU2xvdFZp
c2l0b3ImKTsKKy8vICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IGJvb2wgbWFya0lmQ2hl
YXAoVmlzaXRvciYpOworLy8gICAgYm9vbCBtYXJrSWZDaGVhcDEoQWJzdHJhY3RTbG90VmlzaXRv
ciYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IGJvb2wgbWFya0lmQ2hlYXAxKFZp
c2l0b3ImKTsgLy8gbWxzbSBURVNUCiAgICAgCiAgICAgYm9vbCBoYXNSYXJlRGF0YSgpIGNvbnN0
CiAgICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlQ2hh
aW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVj
dHVyZUNoYWluLmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU3RydWN0dXJlQ2hhaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Niw3ICs2Niw4
IEBAIHZvaWQgU3RydWN0dXJlQ2hhaW46OmZpbmlzaENyZWF0aW9uKFZNJiAKICAgICB9CiB9CiAK
LXZvaWQgU3RydWN0dXJlQ2hhaW46OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90Vmlz
aXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFN0cnVjdHVy
ZUNoYWluOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3Ip
CiB7CiAgICAgU3RydWN0dXJlQ2hhaW4qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8U3RydWN0dXJlQ2hh
aW4qPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGlu
Zm8oKSk7CkBAIC04MCw0ICs4MSw2IEBAIHZvaWQgU3RydWN0dXJlQ2hhaW46OnZpc2l0Q2hpbGRy
ZW4oSlNDZWwKICAgICB9CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihTdHJ1Y3R1cmVDaGFp
bik7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU3RydWN0dXJlQ2hhaW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TdHJ1Y3R1cmVDaGFpbi5oCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVDaGFpbi5oCSh3b3JraW5nIGNvcHkpCkBA
IC01MSw3ICs1MSw3IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBTdHJ1Y3R1cmVDaGFpbiogY3Jl
YXRlKFZNJiwgSlNPYmplY3QqKTsKICAgICBTdHJ1Y3R1cmVJRCogaGVhZCgpIHsgcmV0dXJuIG1f
dmVjdG9yLmdldCgpOyB9Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBT
bG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBzdGF0aWMg
U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TdHJ1Y3R1cmVSYXJlRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlUmFyZURhdGEuY3BwCShyZXZpc2lvbiAy
NzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVSYXJlRGF0
YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY3LDcgKzY3LDggQEAgU3RydWN0dXJlUmFyZURhdGE6
OlN0cnVjdHVyZVJhcmVEYXRhKFZNJgogICAgICAgICBtX3ByZXZpb3VzLnNldCh2bSwgdGhpcywg
cHJldmlvdXMpOwogfQogCi12b2lkIFN0cnVjdHVyZVJhcmVEYXRhOjp2aXNpdENoaWxkcmVuKEpT
Q2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNp
dG9yPgordm9pZCBTdHJ1Y3R1cmVSYXJlRGF0YTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBj
ZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFN0cnVjdHVyZVJhcmVEYXRhKiB0aGlzT2Jq
ZWN0ID0ganNDYXN0PFN0cnVjdHVyZVJhcmVEYXRhKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09C
SkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtODYsNiArODcsOCBAQCB2b2lk
IFN0cnVjdHVyZVJhcmVEYXRhOjp2aXNpdENoaWxkcmVuKEpTCiAgICAgfQogfQogCitERUZJTkVf
VklTSVRfQ0hJTERSRU4oU3RydWN0dXJlUmFyZURhdGEpOworCiAvLyAtLS0tLS0tLS0tLSBDYWNo
ZWQgc3BlY2lhbCBwcm9wZXJ0aWVzIGhlbHBlciB3YXRjaHBvaW50IGNsYXNzZXMgLS0tLS0tLS0t
LS0KIAogY2xhc3MgQ2FjaGVkU3BlY2lhbFByb3BlcnR5QWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5
VmFsdWVXYXRjaHBvaW50IGZpbmFsIDogcHVibGljIEFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZh
bHVlV2F0Y2hwb2ludEJhc2UgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U3RydWN0dXJlUmFyZURhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TdHJ1Y3R1cmVSYXJlRGF0YS5oCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVSYXJlRGF0YS5oCSh3b3JraW5nIGNvcHkp
CkBAIC02OCw3ICs2OCw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVl
ZHNEZXN0cnVjdGlvbiA9IHRydWU7CiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsK
IAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsK
KyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgc3RhdGljIFN0cnVjdHVyZSogY3Jl
YXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlIHByb3RvdHlwZSk7CiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJvbFRhYmxlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TeW1ib2xUYWJsZS5jcHAJ
KHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJv
bFRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTIsNyArOTIsOCBAQCB2b2lkIFN5bWJvbFRh
YmxlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0p
OwogfQogCi12b2lkIFN5bWJvbFRhYmxlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogdGhpc0NlbGws
IFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQg
U3ltYm9sVGFibGU6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogdGhpc0NlbGwsIFZpc2l0b3Im
IHZpc2l0b3IpCiB7CiAgICAgU3ltYm9sVGFibGUqIHRoaXNTeW1ib2xUYWJsZSA9IGpzQ2FzdDxT
eW1ib2xUYWJsZSo+KHRoaXNDZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRo
aXNTeW1ib2xUYWJsZSwgaW5mbygpKTsKQEAgLTEwOCw2ICsxMDksOCBAQCB2b2lkIFN5bWJvbFRh
YmxlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogCiAgICAgdGhpc1N5bWJvbFRhYmxlLT5tX2xvY2Fs
VG9FbnRyeSA9IG51bGxwdHI7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihTeW1ib2xUYWJs
ZSk7CisKIGNvbnN0IFN5bWJvbFRhYmxlOjpMb2NhbFRvRW50cnlWZWMmIFN5bWJvbFRhYmxlOjps
b2NhbFRvRW50cnkoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJikKIHsKICAgICBpZiAoVU5MSUtF
TFkoIW1fbG9jYWxUb0VudHJ5KSkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU3ltYm9sVGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TeW1ib2xUYWJsZS5oCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TeW1ib2xUYWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03MzMsNyArNzMz
LDcgQEAgcHVibGljOgogICAgICAgICBtX3NpbmdsZXRvbi5ub3RpZnlXcml0ZSh2bSwgdGhpcywg
c2NvcGUsIHJlYXNvbik7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihK
U0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAg
ICBERUNMQVJFX0VYUE9SVF9JTkZPOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9UeXBlUHJvZmlsZXJMb2cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1R5cGVQcm9maWxlckxvZy5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVQcm9maWxlckxvZy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEyNCw3ICsxMjQsNyBAQCB2b2lkIFR5cGVQcm9maWxlckxvZzo6cHJvY2Vzc0xv
Z0VudHJpZXMoCiAgICAgfQogfQogCi12b2lkIFR5cGVQcm9maWxlckxvZzo6dmlzaXQoU2xvdFZp
c2l0b3ImIHZpc2l0b3IpCit2b2lkIFR5cGVQcm9maWxlckxvZzo6dmlzaXQoQWJzdHJhY3RTbG90
VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBmb3IgKExvZ0VudHJ5KiBlbnRyeSA9IG1fbG9nU3Rh
cnRQdHI7IGVudHJ5ICE9IG1fY3VycmVudExvZ0VudHJ5UHRyOyArK2VudHJ5KSB7CiAgICAgICAg
IHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQoZW50cnktPnZhbHVlKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVQcm9maWxlckxvZy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVQcm9maWxlckxvZy5oCShyZXZpc2lvbiAy
NzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlUHJvZmlsZXJMb2cu
aAkod29ya2luZyBjb3B5KQpAQCAtNTksNyArNTksNyBAQCBwdWJsaWM6CiAgICAgSlNfRVhQT1JU
X1BSSVZBVEUgdm9pZCBwcm9jZXNzTG9nRW50cmllcyhWTSYsIGNvbnN0IFN0cmluZyYpOwogICAg
IExvZ0VudHJ5KiBsb2dFbmRQdHIoKSBjb25zdCB7IHJldHVybiBtX2xvZ0VuZFB0cjsgfQogCi0g
ICAgdm9pZCB2aXNpdChTbG90VmlzaXRvciYpOworICAgIHZvaWQgdmlzaXQoQWJzdHJhY3RTbG90
VmlzaXRvciYpOwogCiAgICAgc3RhdGljIHB0cmRpZmZfdCBsb2dTdGFydE9mZnNldCgpIHsgcmV0
dXJuIE9CSkVDVF9PRkZTRVRPRihUeXBlUHJvZmlsZXJMb2csIG1fbG9nU3RhcnRQdHIpOyB9CiAg
ICAgc3RhdGljIHB0cmRpZmZfdCBjdXJyZW50TG9nRW50cnlPZmZzZXQoKSB7IHJldHVybiBPQkpF
Q1RfT0ZGU0VUT0YoVHlwZVByb2ZpbGVyTG9nLCBtX2N1cnJlbnRMb2dFbnRyeVB0cik7IH0KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtNYXBJbXBsLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9XZWFrTWFwSW1wbC5jcHAJKHJl
dmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtNYXBJ
bXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksOCArMzksOSBAQCB2b2lkIFdlYWtNYXBJbXBs
PFdlYWtNYXBCdWNrZXQ+OjpkZXN0cm95CiAgICAgc3RhdGljX2Nhc3Q8V2Vha01hcEltcGwqPihj
ZWxsKS0+fldlYWtNYXBJbXBsKCk7CiB9CiAKLXRlbXBsYXRlIDx0eXBlbmFtZSBXZWFrTWFwQnVj
a2V0Pgotdm9pZCBXZWFrTWFwSW1wbDxXZWFrTWFwQnVja2V0Pjo6dmlzaXRDaGlsZHJlbihKU0Nl
bGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgV2Vha01h
cEJ1Y2tldD4KK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFdlYWtNYXBJbXBsPFdl
YWtNYXBCdWNrZXQ+Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZp
c2l0b3IpCiB7CiAgICAgV2Vha01hcEltcGwqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8V2Vha01hcElt
cGwqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGlu
Zm8oKSk7CkBAIC00OCw2ICs0OSw4IEBAIHZvaWQgV2Vha01hcEltcGw8V2Vha01hcEJ1Y2tldD46
OnZpc2l0Q2gKICAgICB2aXNpdG9yLnJlcG9ydEV4dHJhTWVtb3J5VmlzaXRlZCh0aGlzT2JqZWN0
LT5tX2NhcGFjaXR5ICogc2l6ZW9mKFdlYWtNYXBCdWNrZXQpKTsKIH0KIAorREVGSU5FX1RFTVBM
QVRFX1ZJU0lUX0NISUxEUkVOKHRlbXBsYXRlPHR5cGVuYW1lIFdlYWtNYXBCdWNrZXQ+LCBXZWFr
TWFwSW1wbDxXZWFrTWFwQnVja2V0Pik7CisKIHRlbXBsYXRlIDx0eXBlbmFtZSBXZWFrTWFwQnVj
a2V0Pgogc2l6ZV90IFdlYWtNYXBJbXBsPFdlYWtNYXBCdWNrZXQ+Ojplc3RpbWF0ZWRTaXplKEpT
Q2VsbCogY2VsbCwgVk0mIHZtKQogewpAQCAtNTYsMTMgKzU5LDEzIEBAIHNpemVfdCBXZWFrTWFw
SW1wbDxXZWFrTWFwQnVja2V0Pjo6ZXN0aW0KIH0KIAogdGVtcGxhdGUgPD4KLXZvaWQgV2Vha01h
cEltcGw8V2Vha01hcEJ1Y2tldDxXZWFrTWFwQnVja2V0RGF0YUtleT4+Ojp2aXNpdE91dHB1dENv
bnN0cmFpbnRzKEpTQ2VsbCosIFNsb3RWaXNpdG9yJikKK3ZvaWQgV2Vha01hcEltcGw8V2Vha01h
cEJ1Y2tldDxXZWFrTWFwQnVja2V0RGF0YUtleT4+Ojp2aXNpdE91dHB1dENvbnN0cmFpbnRzKEpT
Q2VsbCosIEFic3RyYWN0U2xvdFZpc2l0b3ImKQogewogICAgIC8vIE9ubHkgSlNXZWFrTWFwIG5l
ZWRzIHRvIGhhcnZlc3QgdmFsdWUgcmVmZXJlbmNlcwogfQogCiB0ZW1wbGF0ZSA8Pgotdm9pZCBX
ZWFrTWFwSW1wbDxXZWFrTWFwQnVja2V0PFdlYWtNYXBCdWNrZXREYXRhS2V5VmFsdWU+Pjo6dmlz
aXRPdXRwdXRDb25zdHJhaW50cyhKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQor
dm9pZCBXZWFrTWFwSW1wbDxXZWFrTWFwQnVja2V0PFdlYWtNYXBCdWNrZXREYXRhS2V5VmFsdWU+
Pjo6dmlzaXRPdXRwdXRDb25zdHJhaW50cyhKU0NlbGwqIGNlbGwsIEFic3RyYWN0U2xvdFZpc2l0
b3ImIHZpc2l0b3IpCiB7CiAgICAgVk0mIHZtID0gdmlzaXRvci52bSgpOwogICAgIGF1dG8qIHRo
aXNPYmplY3QgPSBqc0Nhc3Q8V2Vha01hcEltcGwqPihjZWxsKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1dlYWtNYXBJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha01hcEltcGwuaAkocmV2aXNpb24gMjcxNDQzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha01hcEltcGwuaAkod29ya2luZyBjb3B5
KQpAQCAtMTQ0LDggKzE0NCwxMCBAQCBwdWJsaWM6CiAgICAgICAgIGNsZWFyVmFsdWUoKTsKICAg
ICB9CiAKKy8vICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBWaXNpdG9yLCB0eXBlbmFtZSBUID0gRGF0
YT4KKy8vICAgIEFMV0FZU19JTkxJTkUgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19z
YW1lPFQsIFdlYWtNYXBCdWNrZXREYXRhS2V5VmFsdWU+Ojp2YWx1ZT46OnR5cGUgdmlzaXRBZ2dy
ZWdhdGUoVmlzaXRvciYgdmlzaXRvcikKICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVCA9IERhdGE+
Ci0gICAgQUxXQVlTX0lOTElORSB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8
VCwgV2Vha01hcEJ1Y2tldERhdGFLZXlWYWx1ZT46OnZhbHVlPjo6dHlwZSB2aXNpdEFnZ3JlZ2F0
ZShTbG90VmlzaXRvciYgdmlzaXRvcikKKyAgICBBTFdBWVNfSU5MSU5FIHR5cGVuYW1lIHN0ZDo6
ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTxULCBXZWFrTWFwQnVja2V0RGF0YUtleVZhbHVlPjo6dmFs
dWU+Ojp0eXBlIHZpc2l0QWdncmVnYXRlKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiAg
ICAgewogICAgICAgICB2aXNpdG9yLmFwcGVuZChtX2RhdGEudmFsdWUpOwogICAgIH0KQEAgLTIw
Miw3ICsyMDQsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzRGVz
dHJ1Y3Rpb24gPSB0cnVlOwogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CiAKLSAg
ICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAg
REVDTEFSRV9URU1QTEFURV9WSVNJVF9DSElMRFJFTjsKIAogICAgIHN0YXRpYyBzaXplX3QgZXN0
aW1hdGVkU2l6ZShKU0NlbGwqLCBWTSYpOwogCkBAIC0zMTEsNyArMzEzLDcgQEAgcHVibGljOgog
ICAgICAgICByZXR1cm4gdm0ud2Vha1NldFNwYWNlPG1vZGU+KCk7CiAgICAgfQogCi0gICAgc3Rh
dGljIHZvaWQgdmlzaXRPdXRwdXRDb25zdHJhaW50cyhKU0NlbGwqLCBTbG90VmlzaXRvciYpOwor
ICAgIHN0YXRpYyB2b2lkIHZpc2l0T3V0cHV0Q29uc3RyYWludHMoSlNDZWxsKiwgQWJzdHJhY3RT
bG90VmlzaXRvciYpOwogICAgIHZvaWQgZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoVk0mKTsKIAog
cHJpdmF0ZToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9KU0RvbGxhclZNLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvSlNEb2xsYXJWTS5j
cHAJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9KU0Rv
bGxhclZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIyLDE0ICsyMjIsNyBAQCBwdWJsaWM6CiAK
ICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgUm9vdCopOwogCi0gICAgc3RhdGljIHZvaWQg
dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQotICAgIHsK
LSAgICAgICAgRG9sbGFyVk1Bc3NlcnRTY29wZSBhc3NlcnRTY29wZTsKLSAgICAgICAgRWxlbWVu
dCogdGhpc09iamVjdCA9IGpzQ2FzdDxFbGVtZW50Kj4oY2VsbCk7Ci0gICAgICAgIEFTU0VSVF9H
Q19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKLSAgICAgICAgQmFzZTo6dmlz
aXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKLSAgICAgICAgdmlzaXRvci5hcHBlbmQo
dGhpc09iamVjdC0+bV9yb290KTsKLSAgICB9CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsK
IAogICAgIHN0YXRpYyBFbGVtZW50SGFuZGxlT3duZXIqIGhhbmRsZU93bmVyKCk7CiAKQEAgLTI0
NSwxMCArMjM4LDIyIEBAIHByaXZhdGU6CiAgICAgV3JpdGVCYXJyaWVyPFJvb3Q+IG1fcm9vdDsK
IH07CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEVsZW1lbnQ6OnZpc2l0Q2hp
bGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBEb2xsYXJW
TUFzc2VydFNjb3BlIGFzc2VydFNjb3BlOworICAgIEVsZW1lbnQqIHRoaXNPYmplY3QgPSBqc0Nh
c3Q8RWxlbWVudCo+KGNlbGwpOworICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09i
amVjdCwgaW5mbygpKTsKKyAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0
b3IpOworICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fcm9vdCk7Cit9CisKK0RFRklO
RV9WSVNJVF9DSElMRFJFTihFbGVtZW50KTsKKwogY2xhc3MgRWxlbWVudEhhbmRsZU93bmVyIGZp
bmFsIDogcHVibGljIFdlYWtIYW5kbGVPd25lciB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FU
RUQ7CiBwdWJsaWM6Ci0gICAgYm9vbCBpc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6Okhh
bmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBj
b25zdCBjaGFyKiogcmVhc29uKSBmaW5hbAorICAgIGJvb2wgaXNSZWFjaGFibGVGcm9tT3BhcXVl
Um9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBBYnN0cmFjdFNs
b3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKSBmaW5hbAogICAgIHsKICAg
ICAgICAgRG9sbGFyVk1Bc3NlcnRTY29wZSBhc3NlcnRTY29wZTsKICAgICAgICAgaWYgKFVOTElL
RUxZKHJlYXNvbikpCkBAIC0zMDIsMTggKzMwNywyMyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVy
biBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZv
KE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKICAgICB9CiAKLSAgICBzdGF0
aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCogdGhpc09iamVjdCwgU2xvdFZpc2l0b3ImIHZp
c2l0b3IpCi0gICAgewotICAgICAgICBEb2xsYXJWTUFzc2VydFNjb3BlIGFzc2VydFNjb3BlOwot
ICAgICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7Ci0g
ICAgICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7Ci0gICAgICAg
IHZpc2l0b3IuYWRkT3BhcXVlUm9vdCh0aGlzT2JqZWN0KTsKLSAgICB9CisgICAgREVDTEFSRV9W
SVNJVF9DSElMRFJFTjsKIAogcHJpdmF0ZToKICAgICBXZWFrPEVsZW1lbnQ+IG1fZWxlbWVudDsK
IH07CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFJvb3Q6OnZpc2l0Q2hpbGRy
ZW5JbXBsKEpTQ2VsbCogdGhpc09iamVjdCwgVmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBEb2xs
YXJWTUFzc2VydFNjb3BlIGFzc2VydFNjb3BlOworICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJ
VFModGhpc09iamVjdCwgaW5mbygpKTsKKyAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmpl
Y3QsIHZpc2l0b3IpOworICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdCh0aGlzT2JqZWN0KTsKK30K
KworREVGSU5FX1ZJU0lUX0NISUxEUkVOKFJvb3QpOworCiBjbGFzcyBTaW1wbGVPYmplY3QgOiBw
dWJsaWMgSlNOb25GaW5hbE9iamVjdCB7CiBwdWJsaWM6CiAgICAgU2ltcGxlT2JqZWN0KFZNJiB2
bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCkBAIC0zMzgsMTQgKzM0OCw3IEBAIHB1YmxpYzoKICAg
ICAgICAgcmV0dXJuIHNpbXBsZU9iamVjdDsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNp
dENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCi0gICAgewotICAg
ICAgICBEb2xsYXJWTUFzc2VydFNjb3BlIGFzc2VydFNjb3BlOwotICAgICAgICBTaW1wbGVPYmpl
Y3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8U2ltcGxlT2JqZWN0Kj4oY2VsbCk7Ci0gICAgICAgIEFT
U0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKLSAgICAgICAgQmFz
ZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKLSAgICAgICAgdmlzaXRvci5h
cHBlbmQodGhpc09iamVjdC0+bV9oaWRkZW5WYWx1ZSk7Ci0gICAgfQorICAgIERFQ0xBUkVfVklT
SVRfQ0hJTERSRU47CiAKICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0m
IHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKICAg
ICB7CkBAIC0zNzgsNiArMzgxLDE4IEBAIHByaXZhdGU6CiAgICAgV3JpdGVCYXJyaWVyPEpTQzo6
VW5rbm93bj4gbV9oaWRkZW5WYWx1ZTsKIH07CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+
Cit2b2lkIFNpbXBsZU9iamVjdDo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNp
dG9yJiB2aXNpdG9yKQoreworICAgIERvbGxhclZNQXNzZXJ0U2NvcGUgYXNzZXJ0U2NvcGU7Cisg
ICAgU2ltcGxlT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PFNpbXBsZU9iamVjdCo+KGNlbGwp
OworICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKKyAg
ICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOworICAgIHZpc2l0b3Iu
YXBwZW5kKHRoaXNPYmplY3QtPm1faGlkZGVuVmFsdWUpOworfQorCitERUZJTkVfVklTSVRfQ0hJ
TERSRU4oU2ltcGxlT2JqZWN0KTsKKwogY2xhc3MgSW1wdXJlR2V0dGVyIDogcHVibGljIEpTTm9u
RmluYWxPYmplY3QgewogcHVibGljOgogICAgIEltcHVyZUdldHRlcihWTSYgdm0sIFN0cnVjdHVy
ZSogc3RydWN0dXJlKQpAQCAtNDM0LDE0ICs0NDksNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVy
biBCYXNlOjpnZXRPd25Qcm9wZXJ0eVNsb3Qob2JqZWN0LCBnbG9iYWxPYmplY3QsIG5hbWUsIHNs
b3QpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxs
LCBTbG90VmlzaXRvciYgdmlzaXRvcikKLSAgICB7Ci0gICAgICAgIERvbGxhclZNQXNzZXJ0U2Nv
cGUgYXNzZXJ0U2NvcGU7Ci0gICAgICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2VsbCwg
aW5mbygpKTsKLSAgICAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbihjZWxsLCB2aXNpdG9yKTsKLSAg
ICAgICAgSW1wdXJlR2V0dGVyKiB0aGlzT2JqZWN0ID0ganNDYXN0PEltcHVyZUdldHRlcio+KGNl
bGwpOwotICAgICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2RlbGVnYXRlKTsKLSAg
ICB9CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIHZvaWQgc2V0RGVsZWdhdGUo
Vk0mIHZtLCBKU09iamVjdCogZGVsZWdhdGUpCiAgICAgewpAQCAtNDUyLDYgKzQ2MCwxOCBAQCBw
cml2YXRlOgogICAgIFdyaXRlQmFycmllcjxKU09iamVjdD4gbV9kZWxlZ2F0ZTsKIH07CiAKK3Rl
bXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEltcHVyZUdldHRlcjo6dmlzaXRDaGlsZHJl
bkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIERvbGxhclZNQXNz
ZXJ0U2NvcGUgYXNzZXJ0U2NvcGU7CisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjZWxs
LCBpbmZvKCkpOworICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4oY2VsbCwgdmlzaXRvcik7CisgICAg
SW1wdXJlR2V0dGVyKiB0aGlzT2JqZWN0ID0ganNDYXN0PEltcHVyZUdldHRlcio+KGNlbGwpOwor
ICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fZGVsZWdhdGUpOworfQorCitERUZJTkVf
VklTSVRfQ0hJTERSRU4oSW1wdXJlR2V0dGVyKTsKKwogc3RhdGljIEpTQ19ERUNMQVJFX0NVU1RP
TV9HRVRURVIoY3VzdG9tR2V0dGVyVmFsdWVHZXR0ZXIpOwogc3RhdGljIEpTQ19ERUNMQVJFX0NV
U1RPTV9HRVRURVIoY3VzdG9tR2V0dGVyQWNlc3NvckdldHRlcik7CiAKQEAgLTM1NjMsMTMgKzM1
ODMsMTYgQEAgdm9pZCBKU0RvbGxhclZNOjphZGRDb25zdHJ1Y3RpYmxlRnVuY3RpbwogICAgIHB1
dERpcmVjdCh2bSwgaWRlbnRpZmllciwgSlNGdW5jdGlvbjo6Y3JlYXRlKHZtLCBnbG9iYWxPYmpl
Y3QsIGFyZ3VtZW50cywgaWRlbnRpZmllci5zdHJpbmcoKSwgZnVuY3Rpb24sIE5vSW50cmluc2lj
LCBmdW5jdGlvbiksIGpzRG9sbGFyVk1Qcm9wZXJ0eUF0dHJpYnV0ZXMpOwogfQogCi12b2lkIEpT
RG9sbGFyVk06OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRv
cikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTRG9sbGFyVk06OnZpc2l0Q2hp
bGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU0RvbGxh
clZNKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTRG9sbGFyVk0qPihjZWxsKTsKICAgICBCYXNlOjp2
aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwogICAgIHZpc2l0b3IuYXBwZW5kKHRo
aXNPYmplY3QtPm1fb2JqZWN0RG9pbmdTaWRlRWZmZWN0UHV0V2l0aG91dENvcnJlY3RTbG90U3Rh
dHVzU3RydWN0dXJlKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTRG9sbGFyVk0pOwor
CiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogSUdOT1JFX1dBUk5JTkdTX0VORApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3Rvb2xzL0pTRG9sbGFyVk0uaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvdG9vbHMvSlNEb2xsYXJWTS5oCShyZXZpc2lvbiAyNzE0NDMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvSlNEb2xsYXJWTS5oCSh3b3JraW5nIGNvcHkpCkBA
IC03NCw3ICs3NCw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBhZGRGdW5jdGlvbihWTSYsIEpTR2xv
YmFsT2JqZWN0KiwgY29uc3QgY2hhciogbmFtZSwgTmF0aXZlRnVuY3Rpb24sIHVuc2lnbmVkIGFy
Z3VtZW50cyk7CiAgICAgdm9pZCBhZGRDb25zdHJ1Y3RpYmxlRnVuY3Rpb24oVk0mLCBKU0dsb2Jh
bE9iamVjdCosIGNvbnN0IGNoYXIqIG5hbWUsIE5hdGl2ZUZ1bmN0aW9uLCB1bnNpZ25lZCBhcmd1
bWVudHMpOwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90Vmlz
aXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBXcml0ZUJhcnJpZXI8
U3RydWN0dXJlPiBtX29iamVjdERvaW5nU2lkZUVmZmVjdFB1dFdpdGhvdXRDb3JyZWN0U2xvdFN0
YXR1c1N0cnVjdHVyZTsKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
R2xvYmFsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
R2xvYmFsLmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbUdsb2JhbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMyw3ICsxMDMsOCBAQCB2b2lk
IEdsb2JhbDo6c2V0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPCiAgICAgfQogfQogCi12b2lkIEds
b2JhbDo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBl
bmFtZSBWaXNpdG9yPgordm9pZCBHbG9iYWw6OnZpc2l0QWdncmVnYXRlKFZpc2l0b3ImIHZpc2l0
b3IpCiB7CiAgICAgc3dpdGNoIChtX3R5cGUpIHsKICAgICBjYXNlIFdhc206OlR5cGU6OkV4dGVy
bnJlZjoKQEAgLTExNyw2ICsxMTgsOSBAQCB2b2lkIEdsb2JhbDo6dmlzaXRBZ2dyZWdhdGUoU2xv
dFZpc2l0b3ImCiAgICAgfQogfQogCit0ZW1wbGF0ZSB2b2lkIEdsb2JhbDo6dmlzaXRBZ2dyZWdh
dGUoQWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBHbG9iYWw6OnZpc2l0QWdn
cmVnYXRlKFNsb3RWaXNpdG9yJik7CisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpHbG9iYWwKIAog
I2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21HbG9iYWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtR2xvYmFsLmgJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21HbG9iYWwuaAkod29ya2luZyBjb3B5KQpAQCAtNTcsNyArNTcsNyBAQCBw
dWJsaWM6CiAgICAgSlNWYWx1ZSBnZXQoSlNHbG9iYWxPYmplY3QqKSBjb25zdDsKICAgICB1aW50
NjRfdCBnZXRQcmltaXRpdmUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlLm1fcHJpbWl0aXZlOyB9
CiAgICAgdm9pZCBzZXQoSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlKTsKLSAgICB2b2lkIHZpc2l0
QWdncmVnYXRlKFNsb3RWaXNpdG9yJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4g
dm9pZCB2aXNpdEFnZ3JlZ2F0ZShWaXNpdG9yJik7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBUKiBvd25lcigpIGNvbnN0IHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8VCo+KG1fb3duZXIp
OyB9CiAgICAgdm9pZCBzZXRPd25lcihKU09iamVjdCogb3duZXIpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtVGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21UYWJsZS5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UYWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2
Niw3ICsxNjYsOCBAQCBKU1ZhbHVlIFRhYmxlOjpnZXQodWludDMyX3QgaW5kZXgpIGNvbnN0CiAg
ICAgcmV0dXJuIG1fanNWYWx1ZXMuZ2V0KClbaW5kZXggJiBtX21hc2tdLmdldCgpOwogfQogCi12
b2lkIFRhYmxlOjp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRl
PHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFRhYmxlOjp2aXNpdEFnZ3JlZ2F0ZShWaXNpdG9yJiB2
aXNpdG9yKQogewogICAgIFJFTEVBU0VfQVNTRVJUKG1fb3duZXIpOwogICAgIGF1dG8gbG9ja2Vy
ID0gaG9sZExvY2sobV9vd25lci0+Y2VsbExvY2soKSk7CkBAIC0xNzQsNiArMTc1LDkgQEAgdm9p
ZCBUYWJsZTo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImIAogICAgICAgICB2aXNpdG9yLmFw
cGVuZChtX2pzVmFsdWVzLmdldCgpW2ldKTsKIH0KIAordGVtcGxhdGUgdm9pZCBUYWJsZTo6dmlz
aXRBZ2dyZWdhdGUoQWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBUYWJsZTo6
dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImKTsKKwogRnVuY1JlZlRhYmxlKiBUYWJsZTo6YXNG
dW5jcmVmVGFibGUoKQogewogICAgIHJldHVybiBtX3R5cGUgPT0gVGFibGVFbGVtZW50VHlwZTo6
RnVuY3JlZiA/IHN0YXRpY19jYXN0PEZ1bmNSZWZUYWJsZSo+KHRoaXMpIDogbnVsbHB0cjsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UYWJsZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UYWJsZS5oCShyZXZpc2lvbiAyNzE0NDMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGFibGUuaAkod29ya2luZyBjb3B5
KQpAQCAtNzksNyArNzksNyBAQCBwdWJsaWM6CiAgICAgT3B0aW9uYWw8dWludDMyX3Q+IGdyb3co
dWludDMyX3QgZGVsdGEsIEpTVmFsdWUgZGVmYXVsdFZhbHVlKTsKICAgICB2b2lkIGNvcHkoY29u
c3QgVGFibGUqIHNyY1RhYmxlLCB1aW50MzJfdCBkc3RJbmRleCwgdWludDMyX3Qgc3JjSW5kZXgp
OwogCi0gICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYpOworICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgdmlzaXRBZ2dyZWdhdGUoVmlzaXRvciYpOwogCiBwcm90
ZWN0ZWQ6CiAgICAgVGFibGUodWludDMyX3QgaW5pdGlhbCwgT3B0aW9uYWw8dWludDMyX3Q+IG1h
eGltdW0sIFRhYmxlRWxlbWVudFR5cGUgPSBUYWJsZUVsZW1lbnRUeXBlOjpFeHRlcm5yZWYpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNUb1dhc21JQ0NhbGxlZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNUb1dhc21JQ0Nh
bGxlZS5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL0pTVG9XYXNtSUNDYWxsZWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OSw3ICs0OSw4IEBA
IFN0cnVjdHVyZSogSlNUb1dhc21JQ0NhbGxlZTo6Y3JlYXRlU3RydWMKICAgICByZXR1cm4gU3Ry
dWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhKU0Nh
bGxlZVR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKIH0KIAotdm9pZCBKU1RvV2FzbUlD
Q2FsbGVlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3Ip
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1RvV2FzbUlDQ2FsbGVlOjp2aXNp
dENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNU
b1dhc21JQ0NhbGxlZSogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1RvV2FzbUlDQ2FsbGVlKj4oY2Vs
bCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpA
QCAtNTgsNiArNTksOCBAQCB2b2lkIEpTVG9XYXNtSUNDYWxsZWU6OnZpc2l0Q2hpbGRyZW4oSlND
CiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9mdW5jdGlvbik7CiB9CiAKK0RFRklO
RV9WSVNJVF9DSElMRFJFTihKU1RvV2FzbUlDQ2FsbGVlKTsKKwogfSAvLyBuYW1lc3BhY2UgSlND
CiAKICNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9KU1RvV2FzbUlDQ2FsbGVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvSlNUb1dhc21JQ0NhbGxlZS5oCShyZXZpc2lvbiAyNzE0NDMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1RvV2FzbUlDQ2FsbGVlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTU2LDcgKzU2LDcgQEAgcHJpdmF0ZToKICAgICBKU1RvV2FzbUlDQ2Fs
bGVlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUpCiAgICAgICAgIDogQmFzZSh2bSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUpCiAgICAg
eyB9Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYp
OworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBXcml0ZUJhcnJpZXI8V2ViQXNz
ZW1ibHlGdW5jdGlvbj4gbV9mdW5jdGlvbjsKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmNwcAkocmV2
aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3Nl
bWJseUNvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgyLDcgKzgyLDggQEAgdm9pZCBK
U1dlYkFzc2VtYmx5Q29kZUJsb2NrOjpjbGVhckpTQ2FsbAogICAgICAgICAoKml0ZXIpLT51bmxp
bmsodm0pOwogfQogCi12b2lkIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6OnZpc2l0Q2hpbGRyZW4o
SlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZp
c2l0b3I+Cit2b2lkIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6OnZpc2l0Q2hpbGRyZW5JbXBsKEpT
Q2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU1dlYkFzc2VtYmx5Q29kZUJs
b2NrKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTV2ViQXNzZW1ibHlDb2RlQmxvY2sqPihjZWxsKTsK
ICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC05
MCw2ICs5MSw4IEBAIHZvaWQgSlNXZWJBc3NlbWJseUNvZGVCbG9jazo6dmlzaXRDaGlsZHIKICAg
ICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwogfQogCitERUZJTkVf
VklTSVRfQ0hJTERSRU4oSlNXZWJBc3NlbWJseUNvZGVCbG9jayk7CisKIHZvaWQgSlNXZWJBc3Nl
bWJseUNvZGVCbG9jazo6ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoVk0mIHZtKQogewogICAgIGZv
ciAoYXV0byBpdGVyID0gbV9jYWxsTGlua0luZm9zLmJlZ2luKCk7ICEhaXRlcjsgKytpdGVyKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9j
ay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNz
ZW1ibHlDb2RlQmxvY2suaAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC04
Niw3ICs4Niw3IEBAIHByaXZhdGU6CiAgICAgREVDTEFSRV9FWFBPUlRfSU5GTzsKICAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgbmVlZHNEZXN0cnVjdGlvbiA9IHRydWU7CiAgICAgc3RhdGljIHZv
aWQgZGVzdHJveShKU0NlbGwqKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2Vs
bCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIFJl
ZjxXYXNtOjpDb2RlQmxvY2s+IG1fY29kZUJsb2NrOwogICAgIFZlY3RvcjxNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY8V2FzbUVudHJ5UHRyVGFnPj4gbV93YXNtVG9KU0V4aXRTdHViczsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlHbG9iYWwuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlHbG9i
YWwuY3BwCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9KU1dlYkFzc2VtYmx5R2xvYmFsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzEsNyArNzEsOCBA
QCB2b2lkIEpTV2ViQXNzZW1ibHlHbG9iYWw6OmRlc3Ryb3koSlNDZWxsCiAgICAgc3RhdGljX2Nh
c3Q8SlNXZWJBc3NlbWJseUdsb2JhbCo+KGNlbGwpLT5KU1dlYkFzc2VtYmx5R2xvYmFsOjp+SlNX
ZWJBc3NlbWJseUdsb2JhbCgpOwogfQogCi12b2lkIEpTV2ViQXNzZW1ibHlHbG9iYWw6OnZpc2l0
Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5
cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTV2ViQXNzZW1ibHlHbG9iYWw6OnZpc2l0Q2hpbGRyZW5J
bXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU1dlYkFzc2VtYmx5
R2xvYmFsKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTV2ViQXNzZW1ibHlHbG9iYWwqPihjZWxsKTsK
ICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC04
MCw2ICs4MSw4IEBAIHZvaWQgSlNXZWJBc3NlbWJseUdsb2JhbDo6dmlzaXRDaGlsZHJlbigKICAg
ICB0aGlzT2JqZWN0LT5nbG9iYWwoKS0+dmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7CiB9CiAKK0RF
RklORV9WSVNJVF9DSElMRFJFTihKU1dlYkFzc2VtYmx5R2xvYmFsKTsKKwogfSAvLyBuYW1lc3Bh
Y2UgSlNDCiAKICNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5R2xvYmFsLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUdsb2JhbC5oCShyZXZp
c2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2Vt
Ymx5R2xvYmFsLmgJKHdvcmtpbmcgY29weSkKQEAgLTU5LDcgKzU5LDcgQEAgcHVibGljOgogcHJp
dmF0ZToKICAgICBKU1dlYkFzc2VtYmx5R2xvYmFsKFZNJiwgU3RydWN0dXJlKiwgUmVmPFdhc206
Okdsb2JhbD4mJik7CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOwotICAgIHN0YXRpYyB2
b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJ
U0lUX0NISUxEUkVOOwogCiAgICAgUmVmPFdhc206Okdsb2JhbD4gbV9nbG9iYWw7CiB9OwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2Vt
Ymx5SW5zdGFuY2UuY3BwCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03
Myw3ICs3Myw4IEBAIHZvaWQgSlNXZWJBc3NlbWJseUluc3RhbmNlOjpkZXN0cm95KEpTQ2UKICAg
ICBzdGF0aWNfY2FzdDxKU1dlYkFzc2VtYmx5SW5zdGFuY2UqPihjZWxsKS0+SlNXZWJBc3NlbWJs
eUluc3RhbmNlOjp+SlNXZWJBc3NlbWJseUluc3RhbmNlKCk7CiB9CiAKLXZvaWQgSlNXZWJBc3Nl
bWJseUluc3RhbmNlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZp
c2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1dlYkFzc2VtYmx5SW5z
dGFuY2U6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikK
IHsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTV2ViQXNzZW1ibHlJbnN0YW5jZSo+
KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygp
KTsKQEAgLTEwMiw2ICsxMDMsOCBAQCB2b2lkIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6dmlzaXRD
aGlsZHJlCiAgICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQod3JhcHBlci5nZXQoKSk7
CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU1dlYkFzc2VtYmx5SW5zdGFuY2UpOworCiB2
b2lkIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6ZmluYWxpemVDcmVhdGlvbihWTSYgdm0sIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZjxXYXNtOjpDb2RlQmxvY2s+JiYgd2FzbUNvZGVC
bG9jaywgSlNPYmplY3QqIGltcG9ydE9iamVjdCwgV2FzbTo6Q3JlYXRpb25Nb2RlIGNyZWF0aW9u
TW9kZSkKIHsKICAgICBtX2luc3RhbmNlLT5maW5hbGl6ZUNyZWF0aW9uKHRoaXMsIHdhc21Db2Rl
QmxvY2suY29weVJlZigpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pT
V2ViQXNzZW1ibHlJbnN0YW5jZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5oCShyZXZpc2lvbiAyNzE0NDMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuaAkod29y
a2luZyBjb3B5KQpAQCAtMTA1LDcgKzEwNSw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgSlNX
ZWJBc3NlbWJseUluc3RhbmNlKFZNJiwgU3RydWN0dXJlKiwgUmVmPFdhc206Okluc3RhbmNlPiYm
KTsKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgSlNXZWJBc3NlbWJseU1vZHVsZSosIFdl
YkFzc2VtYmx5TW9kdWxlUmVjb3JkKik7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihK
U0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAg
ICBSZWY8V2FzbTo6SW5zdGFuY2U+IG1faW5zdGFuY2U7CiAgICAgVk0qIG1fdm07CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TWVtb3J5LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TWVt
b3J5LmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
anMvSlNXZWJBc3NlbWJseU1lbW9yeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1OSw3ICsxNTks
OCBAQCB2b2lkIEpTV2ViQXNzZW1ibHlNZW1vcnk6OmRlc3Ryb3koSlNDZWxsCiAgICAgbWVtb3J5
LT5KU1dlYkFzc2VtYmx5TWVtb3J5Ojp+SlNXZWJBc3NlbWJseU1lbW9yeSgpOwogfQogCi12b2lk
IEpTV2ViQXNzZW1ibHlNZW1vcnk6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90Vmlz
aXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTV2ViQXNz
ZW1ibHlNZW1vcnk6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlz
aXRvcikKIHsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTV2ViQXNzZW1ibHlNZW1v
cnkqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGlu
Zm8oKSk7CkBAIC0xNjksNiArMTcwLDggQEAgdm9pZCBKU1dlYkFzc2VtYmx5TWVtb3J5Ojp2aXNp
dENoaWxkcmVuKAogICAgIHZpc2l0b3IucmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKHRoaXNPYmpl
Y3QtPm1lbW9yeSgpLnNpemUoKSk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU1dlYkFz
c2VtYmx5TWVtb3J5KTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBFTkFCTEUo
V0VCQVNTRU1CTFkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFz
c2VtYmx5TWVtb3J5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
anMvSlNXZWJBc3NlbWJseU1lbW9yeS5oCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TWVtb3J5LmgJKHdvcmtpbmcgY29weSkK
QEAgLTYzLDcgKzYzLDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBKU1dlYkFzc2VtYmx5TWVt
b3J5KFZNJiwgU3RydWN0dXJlKik7CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOwotICAg
IHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBE
RUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgUmVmPFdhc206Ok1lbW9yeT4gbV9tZW1vcnk7
CiAgICAgV3JpdGVCYXJyaWVyPEpTQXJyYXlCdWZmZXI+IG1fYnVmZmVyV3JhcHBlcjsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlN
b2R1bGUuY3BwCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI0LDcgKzEy
NCw4IEBAIHZvaWQgSlNXZWJBc3NlbWJseU1vZHVsZTo6c2V0Q29kZUJsb2NrKFYKICAgICBtX2Nv
ZGVCbG9ja3Nbc3RhdGljX2Nhc3Q8c2l6ZV90Pihtb2RlKV0uc2V0KHZtLCB0aGlzLCBjb2RlQmxv
Y2spOwogfQogCi12b2lkIEpTV2ViQXNzZW1ibHlNb2R1bGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+
Cit2b2lkIEpTV2ViQXNzZW1ibHlNb2R1bGU6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2Vs
bCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU1dlYkFzc2VtYmx5TW9kdWxlKiB0aGlzT2Jq
ZWN0ID0ganNDYXN0PEpTV2ViQXNzZW1ibHlNb2R1bGUqPihjZWxsKTsKICAgICBBU1NFUlRfR0Nf
T0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC0xMzUsNiArMTM2LDggQEAg
dm9pZCBKU1dlYkFzc2VtYmx5TW9kdWxlOjp2aXNpdENoaWxkcmVuKAogICAgICAgICB2aXNpdG9y
LmFwcGVuZCh0aGlzT2JqZWN0LT5tX2NvZGVCbG9ja3NbaV0pOwogfQogCitERUZJTkVfVklTSVRf
Q0hJTERSRU4oSlNXZWJBc3NlbWJseU1vZHVsZSk7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAj
ZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuaAkocmV2aXNpb24gMjcxNDQz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC04MCw3ICs4MCw3IEBAIHByaXZhdGU6CiAKICAgICBKU1dlYkFz
c2VtYmx5TW9kdWxlKFZNJiwgU3RydWN0dXJlKiwgUmVmPFdhc206Ok1vZHVsZT4mJik7CiAgICAg
dm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOwotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4o
SlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAg
ICAgUmVmPFdhc206Ok1vZHVsZT4gbV9tb2R1bGU7CiAgICAgV3JpdGVCYXJyaWVyPFN5bWJvbFRh
YmxlPiBtX2V4cG9ydFN5bWJvbFRhYmxlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vanMvSlNXZWJBc3NlbWJseVRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5VGFibGUuY3BwCShyZXZpc2lvbiAyNzE0NDMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5VGFibGUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC03Miw3ICs3Miw4IEBAIHZvaWQgSlNXZWJBc3NlbWJseVRhYmxl
OjpkZXN0cm95KEpTQ2VsbCoKICAgICBzdGF0aWNfY2FzdDxKU1dlYkFzc2VtYmx5VGFibGUqPihj
ZWxsKS0+SlNXZWJBc3NlbWJseVRhYmxlOjp+SlNXZWJBc3NlbWJseVRhYmxlKCk7CiB9CiAKLXZv
aWQgSlNXZWJBc3NlbWJseVRhYmxlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZp
c2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1dlYkFz
c2VtYmx5VGFibGU6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlz
aXRvcikKIHsKICAgICBKU1dlYkFzc2VtYmx5VGFibGUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNX
ZWJBc3NlbWJseVRhYmxlKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0
aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtODEsNiArODIsOCBAQCB2b2lkIEpTV2ViQXNzZW1ibHlU
YWJsZTo6dmlzaXRDaGlsZHJlbihKCiAgICAgdGhpc09iamVjdC0+dGFibGUoKS0+dmlzaXRBZ2dy
ZWdhdGUodmlzaXRvcik7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU1dlYkFzc2VtYmx5
VGFibGUpOworCiBib29sIEpTV2ViQXNzZW1ibHlUYWJsZTo6Z3Jvdyh1aW50MzJfdCBkZWx0YSwg
SlNWYWx1ZSBkZWZhdWx0VmFsdWUpCiB7CiAgICAgaWYgKGRlbHRhID09IDApCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5VGFibGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5VGFibGUuaAko
cmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJB
c3NlbWJseVRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTcwLDggKzcwLDggQEAgcHVibGljOgog
cHJpdmF0ZToKICAgICBKU1dlYkFzc2VtYmx5VGFibGUoVk0mLCBTdHJ1Y3R1cmUqLCBSZWY8V2Fz
bTo6VGFibGU+JiYpOwogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKLSAgICBzdGF0aWMg
dm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7Ci0KKyAgICBERUNMQVJF
X1ZJU0lUX0NISUxEUkVOOworLy8KICAgICBSZWY8V2FzbTo6VGFibGU+IG1fdGFibGU7CiB9Owog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9u
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3Nl
bWJseUZ1bmN0aW9uLmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1
Miw3ICs0NTIsOCBAQCBXZWJBc3NlbWJseUZ1bmN0aW9uOjpXZWJBc3NlbWJseUZ1bmN0aW9uCiAg
ICAgLCBtX2ltcG9ydGFibGVGdW5jdGlvbiB7IHNpZ25hdHVyZUluZGV4LCB3YXNtVG9XYXNtRW50
cnlwb2ludExvYWRMb2NhdGlvbiB9CiB7IH0KIAotdm9pZCBXZWJBc3NlbWJseUZ1bmN0aW9uOjp2
aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0
ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBXZWJBc3NlbWJseUZ1bmN0aW9uOjp2aXNpdENoaWxk
cmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgV2ViQXNzZW1i
bHlGdW5jdGlvbiogdGhpc09iamVjdCA9IGpzQ2FzdDxXZWJBc3NlbWJseUZ1bmN0aW9uKj4oY2Vs
bCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpA
QCAtNDYxLDYgKzQ2Miw4IEBAIHZvaWQgV2ViQXNzZW1ibHlGdW5jdGlvbjo6dmlzaXRDaGlsZHJl
bigKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2pzVG9XYXNtSUNDYWxsZWUpOwog
fQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oV2ViQXNzZW1ibHlGdW5jdGlvbik7CisKIHZvaWQg
V2ViQXNzZW1ibHlGdW5jdGlvbjo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCiB7CiAgICAgc3RhdGlj
X2Nhc3Q8V2ViQXNzZW1ibHlGdW5jdGlvbio+KGNlbGwpLT5XZWJBc3NlbWJseUZ1bmN0aW9uOjp+
V2ViQXNzZW1ibHlGdW5jdGlvbigpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
anMvV2ViQXNzZW1ibHlGdW5jdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uaAkocmV2aXNpb24gMjcxNDQzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC05MCw3ICs5MCw3IEBAIHB1YmxpYzoKICAgICBXYXNtOjpJbnN0YW5jZSog
cHJldmlvdXNJbnN0YW5jZShDYWxsRnJhbWUqKTsKIAogcHJpdmF0ZToKLSAgICBzdGF0aWMgdm9p
ZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJ
VF9DSElMRFJFTjsKICAgICBXZWJBc3NlbWJseUZ1bmN0aW9uKFZNJiwgTmF0aXZlRXhlY3V0YWJs
ZSosIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKiwgV2FzbTo6Q2FsbGVlJiBqc0VudHJ5cG9p
bnQsIFdhc21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rpb246OkxvYWRMb2NhdGlvbiBlbnRyeXBvaW50
TG9hZExvY2F0aW9uLCBXYXNtOjpTaWduYXR1cmVJbmRleCk7CiAKICAgICBNYWNyb0Fzc2VtYmxl
ckNvZGVQdHI8SlNFbnRyeVB0clRhZz4ganNDYWxsRW50cnlwb2ludFNsb3coKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb25CYXNlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1
bmN0aW9uQmFzZS5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb25CYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDEsNyArNDEsOCBAQCBXZWJBc3NlbWJseUZ1bmN0aW9uQmFzZTo6V2ViQXNzZW1ibHlGdW5jCiAg
ICAgOiBCYXNlKHZtLCBleGVjdXRhYmxlLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSkKIHsgfQog
Ci12b2lkIFdlYkFzc2VtYmx5RnVuY3Rpb25CYXNlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2Vs
bCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9p
ZCBXZWJBc3NlbWJseUZ1bmN0aW9uQmFzZTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxs
LCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFdlYkFzc2VtYmx5RnVuY3Rpb25CYXNlKiB0aGlz
T2JqZWN0ID0ganNDYXN0PFdlYkFzc2VtYmx5RnVuY3Rpb25CYXNlKj4oY2VsbCk7CiAgICAgQVNT
RVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNDksNiArNTAs
OCBAQCB2b2lkIFdlYkFzc2VtYmx5RnVuY3Rpb25CYXNlOjp2aXNpdENoaWxkCiAgICAgdmlzaXRv
ci5hcHBlbmQodGhpc09iamVjdC0+bV9pbnN0YW5jZSk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElM
RFJFTihXZWJBc3NlbWJseUZ1bmN0aW9uQmFzZSk7CisKIHZvaWQgV2ViQXNzZW1ibHlGdW5jdGlv
bkJhc2U6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgTmF0aXZlRXhlY3V0YWJsZSogZXhlY3V0YWJs
ZSwgdW5zaWduZWQgbGVuZ3RoLCBjb25zdCBTdHJpbmcmIG5hbWUsIEpTV2ViQXNzZW1ibHlJbnN0
YW5jZSogaW5zdGFuY2UpCiB7CiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0sIGV4ZWN1dGFi
bGUsIGxlbmd0aCwgbmFtZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9X
ZWJBc3NlbWJseUZ1bmN0aW9uQmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb25CYXNlLmgJKHJldmlzaW9uIDI3MTQ0MykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb25CYXNl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDcgKzQ2LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBw
dHJkaWZmX3Qgb2Zmc2V0T2ZJbnN0YW5jZSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihXZWJB
c3NlbWJseUZ1bmN0aW9uQmFzZSwgbV9pbnN0YW5jZSk7IH0KIAogcHJvdGVjdGVkOgotICAgIHN0
YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNM
QVJFX1ZJU0lUX0NISUxEUkVOOwogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBOYXRpdmVF
eGVjdXRhYmxlKiwgdW5zaWduZWQgbGVuZ3RoLCBjb25zdCBTdHJpbmcmIG5hbWUsIEpTV2ViQXNz
ZW1ibHlJbnN0YW5jZSopOwogICAgIFdlYkFzc2VtYmx5RnVuY3Rpb25CYXNlKFZNJiwgTmF0aXZl
RXhlY3V0YWJsZSosIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKik7CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVs
ZVJlY29yZC5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzcs
NyArNzcsOCBAQCB2b2lkIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpmaW5pc2hDcmVhCiAgICAg
fQogfQogCi12b2lkIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjp2aXNpdENoaWxkcmVuKEpTQ2Vs
bCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
Pgordm9pZCBXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxs
KiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3Jk
KiB0aGlzT2JqZWN0ID0ganNDYXN0PFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkKj4oY2VsbCk7CiAg
ICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtODcs
NiArODgsOCBAQCB2b2lkIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjp2aXNpdENoaWxkCiAgICAg
dmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9leHBvcnRzT2JqZWN0KTsKIH0KIAorREVGSU5F
X1ZJU0lUX0NISUxEUkVOKFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkKTsKKwogdm9pZCBXZWJBc3Nl
bWJseU1vZHVsZVJlY29yZDo6cHJlcGFyZUxpbmsoVk0mIHZtLCBKU1dlYkFzc2VtYmx5SW5zdGFu
Y2UqIGluc3RhbmNlKQogewogICAgIFJFTEVBU0VfQVNTRVJUKCFtX2luc3RhbmNlKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlN
b2R1bGVSZWNvcmQuaAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuaAkod29ya2luZyBjb3B5KQpAQCAtNjks
NyArNjksNyBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0dsb2JhbE9i
amVjdCosIFZNJiwgY29uc3QgV2FzbTo6TW9kdWxlSW5mb3JtYXRpb24mKTsKIAotICAgIHN0YXRp
YyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJF
X1ZJU0lUX0NISUxEUkVOOwogCiAgICAgV3JpdGVCYXJyaWVyPEpTV2ViQXNzZW1ibHlJbnN0YW5j
ZT4gbV9pbnN0YW5jZTsKICAgICBXcml0ZUJhcnJpZXI8SlNPYmplY3Q+IG1fc3RhcnRGdW5jdGlv
bjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5V3JhcHBl
ckZ1bmN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9XZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNjcsNyArNjcsOCBAQCBTdHJ1Y3R1cmUqIFdlYkFzc2VtYmx5
V3JhcHBlckZ1bmN0aW9uOjpjCiAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9i
YWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oSlNGdW5jdGlvblR5cGUsIFN0cnVjdHVyZUZs
YWdzKSwgaW5mbygpKTsKIH0KIAotdm9pZCBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbjo6dmlz
aXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8
dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb246OnZpc2l0
Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBXZWJB
c3NlbWJseVdyYXBwZXJGdW5jdGlvbiogdGhpc09iamVjdCA9IGpzQ2FzdDxXZWJBc3NlbWJseVdy
YXBwZXJGdW5jdGlvbio+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhp
c09iamVjdCwgaW5mbygpKTsKQEAgLTc2LDYgKzc3LDggQEAgdm9pZCBXZWJBc3NlbWJseVdyYXBw
ZXJGdW5jdGlvbjo6dmlzaXRDaAogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fZnVu
Y3Rpb24pOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oV2ViQXNzZW1ibHlXcmFwcGVyRnVu
Y3Rpb24pOworCiBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oY2FsbFdlYkFzc2VtYmx5V3JhcHBl
ckZ1bmN0aW9uLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxs
RnJhbWUpKQogewogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlXcmFw
cGVyRnVuY3Rpb24uaAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAt
NTksNyArNTksNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIFdlYkFzc2VtYmx5V3JhcHBlckZ1
bmN0aW9uKFZNJiwgTmF0aXZlRXhlY3V0YWJsZSosIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJl
KiwgV2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbik7CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlv
bihWTSYsIE5hdGl2ZUV4ZWN1dGFibGUqLCB1bnNpZ25lZCBsZW5ndGgsIGNvbnN0IFN0cmluZyYg
bmFtZSwgSlNPYmplY3QqLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqKTsKLSAgICBzdGF0aWMgdm9p
ZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJ
VF9DSElMRFJFTjsKIAogICAgIFdyaXRlQmFycmllcjxKU09iamVjdD4gbV9mdW5jdGlvbjsKICAg
ICAvLyBJdCdzIHNhZmUgdG8ganVzdCBob2xkIHRoZSByYXcgV2FzbVRvV2FzbUltcG9ydGFibGVG
dW5jdGlvbiBiZWNhdXNlIHdlIGhhdmUgYSByZWZlcmVuY2UKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5jcHAJKHJldmlzaW9u
IDI3MTQ0MykKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0
b3JlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzI4LDcgKzcyOCw5IEBAIHZvaWQgSURCT2JqZWN0
U3RvcmU6OnJvbGxiYWNrRm9yVmVyc2lvbkMKICAgICB9CiB9CiAKLXZvaWQgSURCT2JqZWN0U3Rv
cmU6OnZpc2l0UmVmZXJlbmNlZEluZGV4ZXMoU2xvdFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0Cisv
L3ZvaWQgSURCT2JqZWN0U3RvcmU6OnZpc2l0UmVmZXJlbmNlZEluZGV4ZXMoU2xvdFZpc2l0b3Im
IHZpc2l0b3IpIGNvbnN0Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBJREJPYmpl
Y3RTdG9yZTo6dmlzaXRSZWZlcmVuY2VkSW5kZXhlcyhWaXNpdG9yJiB2aXNpdG9yKSBjb25zdAog
ewogICAgIExvY2tlcjxMb2NrPiBsb2NrZXIobV9yZWZlcmVuY2VkSW5kZXhMb2NrKTsKICAgICBm
b3IgKGF1dG8mIGluZGV4IDogbV9yZWZlcmVuY2VkSW5kZXhlcy52YWx1ZXMoKSkKQEAgLTczNyw2
ICs3MzksOSBAQCB2b2lkIElEQk9iamVjdFN0b3JlOjp2aXNpdFJlZmVyZW5jZWRJbmRlCiAgICAg
ICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChpbmRleC5nZXQoKSk7CiB9CiAKK3RlbXBsYXRlIHZv
aWQgSURCT2JqZWN0U3RvcmU6OnZpc2l0UmVmZXJlbmNlZEluZGV4ZXMoQWJzdHJhY3RTbG90Vmlz
aXRvciYpIGNvbnN0OwordGVtcGxhdGUgdm9pZCBJREJPYmplY3RTdG9yZTo6dmlzaXRSZWZlcmVu
Y2VkSW5kZXhlcyhTbG90VmlzaXRvciYpIGNvbnN0OworCiB2b2lkIElEQk9iamVjdFN0b3JlOjpy
ZW5hbWVSZWZlcmVuY2VkSW5kZXgoSURCSW5kZXgmIGluZGV4LCBjb25zdCBTdHJpbmcmIG5ld05h
bWUpCiB7CiAgICAgTE9HKEluZGV4ZWREQiwgIklEQk9iamVjdFN0b3JlOjpyZW5hbWVSZWZlcmVu
Y2VkSW5kZXgiKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9i
amVjdFN0b3JlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCT2JqZWN0U3RvcmUuaAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuaAkod29ya2luZyBjb3B5KQpAQCAtMTA5
LDcgKzEwOSw4IEBAIHB1YmxpYzoKICAgICB2b2lkIHJlZigpOwogICAgIHZvaWQgZGVyZWYoKTsK
IAotICAgIHZvaWQgdmlzaXRSZWZlcmVuY2VkSW5kZXhlcyhKU0M6OlNsb3RWaXNpdG9yJikgY29u
c3Q7CisvLyAgICB2b2lkIHZpc2l0UmVmZXJlbmNlZEluZGV4ZXMoSlNDOjpTbG90VmlzaXRvciYp
IGNvbnN0OworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgdmlzaXRSZWZlcmVu
Y2VkSW5kZXhlcyhWaXNpdG9yJikgY29uc3Q7CiAgICAgdm9pZCByZW5hbWVSZWZlcmVuY2VkSW5k
ZXgoSURCSW5kZXgmLCBjb25zdCBTdHJpbmcmIG5ld05hbWUpOwogCiBwcml2YXRlOgpJbmRleDog
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb24uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9u
LmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCVHJhbnNhY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDU1LDcgKzE0NTUsOCBA
QCB2b2lkIElEQlRyYW5zYWN0aW9uOjpjb25uZWN0aW9uQ2xvc2VkRnJvCiAgICAgZmlyZU9uQWJv
cnQoKTsKIH0KIAotdm9pZCBJREJUcmFuc2FjdGlvbjo6dmlzaXRSZWZlcmVuY2VkT2JqZWN0U3Rv
cmVzKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0Cit0ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPgordm9pZCBJREJUcmFuc2FjdGlvbjo6dmlzaXRSZWZlcmVuY2VkT2JqZWN0U3RvcmVz
KFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0CiB7CiAgICAgTG9ja2VyPExvY2s+IGxvY2tlcihtX3Jl
ZmVyZW5jZWRPYmplY3RTdG9yZUxvY2spOwogICAgIGZvciAoYXV0byYgb2JqZWN0U3RvcmUgOiBt
X3JlZmVyZW5jZWRPYmplY3RTdG9yZXMudmFsdWVzKCkpCkBAIC0xNDY0LDYgKzE0NjUsOSBAQCB2
b2lkIElEQlRyYW5zYWN0aW9uOjp2aXNpdFJlZmVyZW5jZWRPYmplCiAgICAgICAgIHZpc2l0b3Iu
YWRkT3BhcXVlUm9vdChvYmplY3RTdG9yZS5nZXQoKSk7CiB9CiAKK3RlbXBsYXRlIHZvaWQgSURC
VHJhbnNhY3Rpb246OnZpc2l0UmVmZXJlbmNlZE9iamVjdFN0b3JlcyhKU0M6OkFic3RyYWN0U2xv
dFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0OwordGVtcGxhdGUgdm9pZCBJREJUcmFuc2FjdGlvbjo6
dmlzaXRSZWZlcmVuY2VkT2JqZWN0U3RvcmVzKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpIGNv
bnN0OworCiB2b2lkIElEQlRyYW5zYWN0aW9uOjpoYW5kbGVQZW5kaW5nT3BlcmF0aW9ucygpCiB7
CiAgICAgQVNTRVJUKGNhbkN1cnJlbnRUaHJlYWRBY2Nlc3NUaHJlYWRMb2NhbERhdGEobV9kYXRh
YmFzZS0+b3JpZ2luVGhyZWFkKCkpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb24uaAkocmV2aXNpb24gMjcxNDQzKQorKysgU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb24uaAkod29ya2luZyBj
b3B5KQpAQCAtMTQ5LDcgKzE0OSw4IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgY29ubmVjdGlvbkNs
b3NlZEZyb21TZXJ2ZXIoY29uc3QgSURCRXJyb3ImKTsKIAotICAgIHZvaWQgdmlzaXRSZWZlcmVu
Y2VkT2JqZWN0U3RvcmVzKEpTQzo6U2xvdFZpc2l0b3ImKSBjb25zdDsKKy8vICAgIHZvaWQgdmlz
aXRSZWZlcmVuY2VkT2JqZWN0U3RvcmVzKEpTQzo6U2xvdFZpc2l0b3ImKSBjb25zdDsKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIHZpc2l0UmVmZXJlbmNlZE9iamVjdFN0b3Jl
cyhWaXNpdG9yJikgY29uc3Q7CiAKICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgc3RkOjphdG9t
aWM8dW5zaWduZWQ+IG51bWJlck9mSURCVHJhbnNhY3Rpb25zOwogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQnVmZmVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQnVmZmVyLmNwcAkocmV2aXNpb24gMjcx
NDQzKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0J1ZmZlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTE1NCwxMiArMTU0LDE3IEBAIEV4Y2VwdGlvbk9yPEpTQzo6SlNW
YWx1ZT4gQXVkaW9CdWZmZXI6OmcKICAgICByZXR1cm4gY29uc3RydWN0SlNBcnJheSgpOwogfQog
Ci12b2lkIEF1ZGlvQnVmZmVyOjp2aXNpdENoYW5uZWxXcmFwcGVycyhKU0M6OlNsb3RWaXNpdG9y
JiB2aXNpdG9yKQorLy92b2lkIEF1ZGlvQnVmZmVyOjp2aXNpdENoYW5uZWxXcmFwcGVycyhKU0M6
OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQg
QXVkaW9CdWZmZXI6OnZpc2l0Q2hhbm5lbFdyYXBwZXJzKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAg
ICAgZm9yIChhdXRvJiBjaGFubmVsV3JhcHBlciA6IG1fY2hhbm5lbFdyYXBwZXJzKQogICAgICAg
ICBjaGFubmVsV3JhcHBlci52aXNpdCh2aXNpdG9yKTsKIH0KIAordGVtcGxhdGUgdm9pZCBBdWRp
b0J1ZmZlcjo6dmlzaXRDaGFubmVsV3JhcHBlcnMoSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJik7
Cit0ZW1wbGF0ZSB2b2lkIEF1ZGlvQnVmZmVyOjp2aXNpdENoYW5uZWxXcmFwcGVycyhKU0M6OlNs
b3RWaXNpdG9yJik7CisKIFJlZlB0cjxGbG9hdDMyQXJyYXk+IEF1ZGlvQnVmZmVyOjpjaGFubmVs
RGF0YSh1bnNpZ25lZCBjaGFubmVsSW5kZXgpCiB7CiAgICAgaWYgKGNoYW5uZWxJbmRleCA+PSBt
X2NoYW5uZWxzLnNpemUoKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8v
QXVkaW9CdWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1
ZGlvL0F1ZGlvQnVmZmVyLmgJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViYXVkaW8vQXVkaW9CdWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNzUsNyArNzUs
OCBAQCBwdWJsaWM6CiAKICAgICBzaXplX3QgbWVtb3J5Q29zdCgpIGNvbnN0OwogCi0gICAgdm9p
ZCB2aXNpdENoYW5uZWxXcmFwcGVycyhKU0M6OlNsb3RWaXNpdG9yJik7CisvLyAgICB2b2lkIHZp
c2l0Q2hhbm5lbFdyYXBwZXJzKEpTQzo6U2xvdFZpc2l0b3ImKTsKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBWaXNpdG9yPiB2b2lkIHZpc2l0Q2hhbm5lbFdyYXBwZXJzKFZpc2l0b3ImKTsKICAgICAK
IHByaXZhdGU6CiAgICAgQXVkaW9CdWZmZXIodW5zaWduZWQgbnVtYmVyT2ZDaGFubmVscywgc2l6
ZV90IGxlbmd0aCwgZmxvYXQgc2FtcGxlUmF0ZSwgTGVnYWN5UHJldmVudERldGFjaGluZyA9IExl
Z2FjeVByZXZlbnREZXRhY2hpbmc6Ok5vKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0RPTUdDT3V0cHV0Q29uc3RyYWludC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvRE9NR0NPdXRwdXRDb25zdHJhaW50LmNwcAkocmV2aXNpb24gMjcxNDQz
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvRE9NR0NPdXRwdXRDb25zdHJhaW50LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDksNyArNDksNyBAQCBET01HQ091dHB1dENvbnN0cmFpbnQ6
On5ET01HQ091dHB1dENvbnN0CiB7CiB9CiAKLXZvaWQgRE9NR0NPdXRwdXRDb25zdHJhaW50Ojpl
eGVjdXRlSW1wbChTbG90VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgRE9NR0NPdXRwdXRDb25zdHJh
aW50OjpleGVjdXRlSW1wbChBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEhl
YXAmIGhlYXAgPSBtX3ZtLmhlYXA7CiAgICAgCkBAIC02MCw4ICs2MCw4IEBAIHZvaWQgRE9NR0NP
dXRwdXRDb25zdHJhaW50OjpleGVjdXRlSW1wbCgKICAgICAKICAgICBtX2NsaWVudERhdGEuZm9y
RWFjaE91dHB1dENvbnN0cmFpbnRTcGFjZSgKICAgICAgICAgWyZdIChTdWJzcGFjZSYgc3Vic3Bh
Y2UpIHsKLSAgICAgICAgICAgIGF1dG8gZnVuYyA9IFtdIChTbG90VmlzaXRvciYgdmlzaXRvciwg
SGVhcENlbGwqIGhlYXBDZWxsLCBIZWFwQ2VsbDo6S2luZCkgewotICAgICAgICAgICAgICAgIFNl
dFJvb3RNYXJrUmVhc29uU2NvcGUgcm9vdFNjb3BlKHZpc2l0b3IsIFNsb3RWaXNpdG9yOjpSb290
TWFya1JlYXNvbjo6RE9NR0NPdXRwdXQpOworICAgICAgICAgICAgYXV0byBmdW5jID0gW10gKEFi
c3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIEhlYXBDZWxsKiBoZWFwQ2VsbCwgSGVhcENlbGw6
OktpbmQpIHsKKyAgICAgICAgICAgICAgICBTZXRSb290TWFya1JlYXNvblNjb3BlIHJvb3RTY29w
ZSh2aXNpdG9yLCBBYnN0cmFjdFNsb3RWaXNpdG9yOjpSb290TWFya1JlYXNvbjo6RE9NR0NPdXRw
dXQpOwogICAgICAgICAgICAgICAgIEpTQ2VsbCogY2VsbCA9IHN0YXRpY19jYXN0PEpTQ2VsbCo+
KGhlYXBDZWxsKTsKICAgICAgICAgICAgICAgICBjZWxsLT5tZXRob2RUYWJsZSh2aXNpdG9yLnZt
KCkpLT52aXNpdE91dHB1dENvbnN0cmFpbnRzKGNlbGwsIHZpc2l0b3IpOwogICAgICAgICAgICAg
fTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0RPTUdDT3V0cHV0Q29uc3RyYWlu
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0RPTUdDT3V0cHV0
Q29uc3RyYWludC5oCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9ET01HQ091dHB1dENvbnN0cmFpbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNDIsNyArNDIs
NyBAQCBwdWJsaWM6CiAgICAgfkRPTUdDT3V0cHV0Q29uc3RyYWludCgpOwogICAgIAogcHJvdGVj
dGVkOgotICAgIHZvaWQgZXhlY3V0ZUltcGwoSlNDOjpTbG90VmlzaXRvciYpIG92ZXJyaWRlOwor
ICAgIHZvaWQgZXhlY3V0ZUltcGwoSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJikgb3ZlcnJpZGU7
CiAKIHByaXZhdGU6CiAgICAgSlNDOjpWTSYgbV92bTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTQWJvcnRDb250cm9sbGVyQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Fib3J0Q29udHJvbGxlckN1c3RvbS5jcHAJKHJldmlz
aW9uIDI3MTQ0MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQWJvcnRDb250cm9s
bGVyQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsOSArMjgsMTQgQEAKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi12b2lkIEpTQWJvcnRDb250cm9sbGVyOjp2aXNpdEFkZGl0aW9uYWxD
aGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy92b2lkIEpTQWJvcnRDb250cm9s
bGVyOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQor
dGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNBYm9ydENvbnRyb2xsZXI6OnZpc2l0
QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgdmlzaXRvci5hZGRP
cGFxdWVSb290KCZ3cmFwcGVkKCkuc2lnbmFsKCkpOwogfQogCit0ZW1wbGF0ZSB2b2lkIEpTQWJv
cnRDb250cm9sbGVyOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OkFic3RyYWN0U2xvdFZp
c2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNBYm9ydENvbnRyb2xsZXI6OnZpc2l0QWRkaXRpb25h
bENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImKTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNBYm9ydFNpZ25hbEN1c3RvbS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNBYm9ydFNpZ25hbEN1
c3RvbS5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTQWJvcnRTaWduYWxDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw3IEBA
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotYm9vbCBKU0Fib3J0U2lnbmFsT3duZXI6OmlzUmVh
Y2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2
b2lkKiwgSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikKK2Jv
b2wgSlNBYm9ydFNpZ25hbE93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6Okhh
bmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRv
ciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikKIHsKICAgICBhdXRvJiBhYm9ydFNpZ25h
bCA9IEpTQzo6anNDYXN0PEpTQWJvcnRTaWduYWwqPihoYW5kbGUuc2xvdCgpLT5hc0NlbGwoKSkt
PndyYXBwZWQoKTsKICAgICBpZiAoYWJvcnRTaWduYWwuaXNGaXJpbmdFdmVudExpc3RlbmVycygp
KSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0F0dHJDdXN0b20uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXR0ckN1c3RvbS5jcHAJ
KHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXR0ckN1
c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDEwICszMywxNSBAQAogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLXZvaWQgSlNBdHRyOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNs
b3RWaXNpdG9yJiB2aXNpdG9yKQorLy92b2lkIEpTQXR0cjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRy
ZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+
Cit2b2lkIEpTQXR0cjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikK
IHsKICAgICBpZiAoRWxlbWVudCogZWxlbWVudCA9IHdyYXBwZWQoKS5vd25lckVsZW1lbnQoKSkK
ICAgICAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHJvb3QoZWxlbWVudCkpOwogfQogCit0ZW1w
bGF0ZSB2b2lkIEpTQXR0cjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpBYnN0cmFjdFNs
b3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTQXR0cjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRy
ZW4oSlNDOjpTbG90VmlzaXRvciYpOworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0F1ZGlvQnVmZmVyQ3VzdG9tLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0F1ZGlvQnVmZmVyQ3VzdG9tLmNw
cAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNBdWRp
b0J1ZmZlckN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDExICszMSwxNiBAQAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAotdm9pZCBKU0F1ZGlvQnVm
ZmVyOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vdm9p
ZCBKU0F1ZGlvQnVmZmVyOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlz
aXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTQXVkaW9CdWZmZXI6OnZp
c2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgd3JhcHBlZCgp
LnZpc2l0Q2hhbm5lbFdyYXBwZXJzKHZpc2l0b3IpOwogfQogCit0ZW1wbGF0ZSB2b2lkIEpTQXVk
aW9CdWZmZXI6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsK
K3RlbXBsYXRlIHZvaWQgSlNBdWRpb0J1ZmZlcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xv
dFZpc2l0b3ImKTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxF
KFdFQl9BVURJTykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXVkaW9UcmFj
a0N1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNB
dWRpb1RyYWNrQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNBdWRpb1RyYWNrQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUs
MTEgKzM1LDE2IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2UgSlNDOwog
Ci12b2lkIEpTQXVkaW9UcmFjazo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3Im
IHZpc2l0b3IpCisvL3ZvaWQgSlNBdWRpb1RyYWNrOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihT
bG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpT
QXVkaW9UcmFjazo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsK
ICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qocm9vdCgmd3JhcHBlZCgpKSk7CiB9CiAKK3RlbXBs
YXRlIHZvaWQgSlNBdWRpb1RyYWNrOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihBYnN0cmFjdFNs
b3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTQXVkaW9UcmFjazo6dmlzaXRBZGRpdGlvbmFs
Q2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5k
aWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXVkaW9UcmFja0xpc3RDdXN0
b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXVkaW9U
cmFja0xpc3RDdXN0b20uY3BwCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0F1ZGlvVHJhY2tMaXN0Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzYsMTEgKzM2LDE2IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2UgSlND
OwogCi12b2lkIEpTQXVkaW9UcmFja0xpc3Q6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQorLy92b2lkIEpTQXVkaW9UcmFja0xpc3Q6OnZpc2l0QWRkaXRpb25h
bENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRv
cj4KK3ZvaWQgSlNBdWRpb1RyYWNrTGlzdDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRv
ciYgdmlzaXRvcikKIHsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qocm9vdCh3cmFwcGVkKCku
ZWxlbWVudCgpKSk7CiB9CiAKK3RlbXBsYXRlIHZvaWQgSlNBdWRpb1RyYWNrTGlzdDo6dmlzaXRB
ZGRpdGlvbmFsQ2hpbGRyZW4oQWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBK
U0F1ZGlvVHJhY2tMaXN0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYpOwor
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNBdWRpb1dvcmtsZXRQcm9jZXNzb3JDdXN0b20uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXVkaW9Xb3JrbGV0UHJvY2Vzc29yQ3Vz
dG9tLmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNBdWRpb1dvcmtsZXRQcm9jZXNzb3JDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3
ICszMSw5IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCi12
b2lkIEpTQXVkaW9Xb3JrbGV0UHJvY2Vzc29yOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90
VmlzaXRvciYgdmlzaXRvcikKKy8vdm9pZCBKU0F1ZGlvV29ya2xldFByb2Nlc3Nvcjo6dmlzaXRB
ZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBWaXNpdG9yPgordm9pZCBKU0F1ZGlvV29ya2xldFByb2Nlc3Nvcjo6dmlzaXRBZGRpdGlvbmFs
Q2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBhdXRvJiBwcm9jZXNzb3IgPSB3cmFw
cGVkKCk7CiAgICAgcHJvY2Vzc29yLmpzSW5wdXRzV3JhcHBlcigpLnZpc2l0KHZpc2l0b3IpOwpA
QCAtMzksNiArNDEsOSBAQCB2b2lkIEpTQXVkaW9Xb3JrbGV0UHJvY2Vzc29yOjp2aXNpdEFkZGl0
CiAgICAgcHJvY2Vzc29yLmpzUGFyYW1WYWx1ZXNXcmFwcGVyKCkudmlzaXQodmlzaXRvcik7CiB9
CiAKK3RlbXBsYXRlIHZvaWQgSlNBdWRpb1dvcmtsZXRQcm9jZXNzb3I6OnZpc2l0QWRkaXRpb25h
bENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNBdWRpb1dv
cmtsZXRQcm9jZXNzb3I6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CisK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShXRUJfQVVESU8pCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NTU1J1bGVDdXN0b20uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ1NTUnVsZUN1c3RvbS5jcHAJ
KHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ1NTUnVs
ZUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUxLDExICs1MSwxNiBAQAogbmFtZXNwYWNl
IFdlYkNvcmUgewogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAotdm9pZCBKU0NTU1J1bGU6OnZpc2l0
QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy92b2lkIEpTQ1NTUnVs
ZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0
ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0NTU1J1bGU6OnZpc2l0QWRkaXRpb25hbENoaWxk
cmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHJvb3Qo
JndyYXBwZWQoKSkpOwogfQogCit0ZW1wbGF0ZSB2b2lkIEpTQ1NTUnVsZTo6dmlzaXRBZGRpdGlv
bmFsQ2hpbGRyZW4oQWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU0NTU1J1
bGU6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CisKIEpTVmFsdWUgdG9K
U05ld2x5Q3JlYXRlZChKU0dsb2JhbE9iamVjdCosIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIFJlZjxDU1NSdWxlPiYmIHJ1bGUpCiB7CiAgICAgc3dpdGNoIChydWxlLT50eXBlKCkp
IHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ1NTUnVsZUxpc3RDdXN0b20u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ1NTUnVsZUxp
c3RDdXN0b20uY3BwCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0NTU1J1bGVMaXN0Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYs
NyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAotYm9vbCBK
U0NTU1J1bGVMaXN0T3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxl
PEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgU2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0
IGNoYXIqKiByZWFzb24pCitib29sIEpTQ1NTUnVsZUxpc3RPd25lcjo6aXNSZWFjaGFibGVGcm9t
T3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBBYnN0
cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQogewogICAgIEpT
Q1NTUnVsZUxpc3QqIGpzQ1NTUnVsZUxpc3QgPSBqc0Nhc3Q8SlNDU1NSdWxlTGlzdCo+KGhhbmRs
ZS5zbG90KCktPmFzQ2VsbCgpKTsKICAgICBpZiAoIWpzQ1NTUnVsZUxpc3QtPmhhc0N1c3RvbVBy
b3BlcnRpZXMoanNDU1NSdWxlTGlzdC0+dm0oKSkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0NTU1N0eWxlRGVjbGFyYXRpb25DdXN0b20uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ1NTU3R5bGVEZWNsYXJhdGlvbkN1c3RvbS5jcHAJ
KHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ1NTU3R5
bGVEZWNsYXJhdGlvbkN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUxLDkgKzUxLDE0IEBA
IHZvaWQqIHJvb3QoQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUpCiAgICAgcmV0dXJuIHN0eWxl
OwogfQogCi12b2lkIEpTQ1NTU3R5bGVEZWNsYXJhdGlvbjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRy
ZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3ZvaWQgSlNDU1NTdHlsZURlY2xhcmF0aW9uOjp2
aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5
cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTQ1NTU3R5bGVEZWNsYXJhdGlvbjo6dmlzaXRBZGRpdGlv
bmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJv
b3Qocm9vdCgmd3JhcHBlZCgpKSk7CiB9CiAKK3RlbXBsYXRlIHZvaWQgSlNDU1NTdHlsZURlY2xh
cmF0aW9uOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0
ZW1wbGF0ZSB2b2lkIEpTQ1NTU3R5bGVEZWNsYXJhdGlvbjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRy
ZW4oU2xvdFZpc2l0b3ImKTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNDYWxsYmFja0RhdGEuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2FsbGJhY2tEYXRhLmNwcAkocmV2aXNpb24gMjcx
NDQzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDYWxsYmFja0RhdGEuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC05NSwxMiArOTUsMTYgQEAgSlNWYWx1ZSBKU0NhbGxiYWNrRGF0YTo6
aW52b2tlQ2FsbGJhY2soSgogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQgSlNDYWxsYmFj
a0RhdGFXZWFrOjp2aXNpdEpTRnVuY3Rpb24oSlNDOjpTbG90VmlzaXRvciYgdmlzdG9yKQordGVt
cGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNDYWxsYmFja0RhdGFXZWFrOjp2aXNpdEpT
RnVuY3Rpb24oVmlzaXRvciYgdmlzaXRvcikKIHsKLSAgICB2aXN0b3IuYXBwZW5kKG1fY2FsbGJh
Y2spOworICAgIHZpc2l0b3IuYXBwZW5kKG1fY2FsbGJhY2spOwogfQogCi1ib29sIEpTQ2FsbGJh
Y2tEYXRhV2Vhazo6V2Vha093bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6Okhh
bmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0LCBTbG90VmlzaXRvciYgdmlzaXRvciwg
Y29uc3QgY2hhcioqIHJlYXNvbikKK3RlbXBsYXRlIHZvaWQgSlNDYWxsYmFja0RhdGFXZWFrOjp2
aXNpdEpTRnVuY3Rpb24oSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lk
IEpTQ2FsbGJhY2tEYXRhV2Vhazo6dmlzaXRKU0Z1bmN0aW9uKEpTQzo6U2xvdFZpc2l0b3ImKTsK
KworYm9vbCBKU0NhbGxiYWNrRGF0YVdlYWs6OldlYWtPd25lcjo6aXNSZWFjaGFibGVGcm9tT3Bh
cXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCwgQWJzdHJh
Y3RTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikKIHsKICAgICBpZiAo
VU5MSUtFTFkocmVhc29uKSkKICAgICAgICAgKnJlYXNvbiA9ICJDb250ZXh0IGlzIG9wYXF1ZSBy
b290IjsgLy8gRklYTUU6IHdoYXQgaXMgdGhlIGNvbnRleHQuCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0NhbGxiYWNrRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTQ2FsbGJhY2tEYXRhLmgJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2FsbGJhY2tEYXRhLmgJKHdvcmtpbmcgY29weSkK
QEAgLTExMywxMSArMTEzLDEyIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIEpTQ2FsbGJhY2tE
YXRhOjppbnZva2VDYWxsYmFjaygqZ2xvYmFsT2JqZWN0LCBjYWxsYmFjaygpLCB0aGlzVmFsdWUs
IGFyZ3MsIGNhbGxiYWNrVHlwZSwgZnVuY3Rpb25OYW1lLCByZXR1cm5lZEV4Y2VwdGlvbik7CiAg
ICAgfQogCi0gICAgdm9pZCB2aXNpdEpTRnVuY3Rpb24oSlNDOjpTbG90VmlzaXRvciYpOworLy8g
ICAgdm9pZCB2aXNpdEpTRnVuY3Rpb24oSlNDOjpTbG90VmlzaXRvciYpOworICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgdmlzaXRKU0Z1bmN0aW9uKFZpc2l0b3ImKTsKIAogcHJp
dmF0ZToKICAgICBjbGFzcyBXZWFrT3duZXIgOiBwdWJsaWMgSlNDOjpXZWFrSGFuZGxlT3duZXIg
ewotICAgICAgICBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpT
Qzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6U2xvdFZpc2l0b3ImLCBjb25zdCBjaGFy
KiopIG92ZXJyaWRlOworICAgICAgICBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpT
Qzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6QWJzdHJhY3RTbG90
VmlzaXRvciYsIGNvbnN0IGNoYXIqKikgb3ZlcnJpZGU7CiAgICAgfTsKICAgICBXZWFrT3duZXIg
bV93ZWFrT3duZXI7CiAgICAgSlNDOjpXZWFrPEpTQzo6SlNPYmplY3Q+IG1fY2FsbGJhY2s7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQy
REN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlND
YW52YXNSZW5kZXJpbmdDb250ZXh0MkRDdXN0b20uY3BwCShyZXZpc2lvbiAyNzE0NDMpCisrKyBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREN1c3Rv
bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0LDcgKzI0LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi1ib29sIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJET3duZXI6OmlzUmVhY2hhYmxl
RnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwg
SlNDOjpTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikKK2Jvb2wgSlND
YW52YXNSZW5kZXJpbmdDb250ZXh0MkRPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMo
SlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBKU0M6OkFic3RyYWN0U2xv
dFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCiB7CiAgICAgaWYgKFVOTElL
RUxZKHJlYXNvbikpCiAgICAgICAgICpyZWFzb24gPSAiQ2FudmFzIGlzIG9wYXF1ZSByb290IjsK
QEAgLTM0LDkgKzM0LDE0IEBAIGJvb2wgSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRPd25lcjo6
aXMKICAgICByZXR1cm4gdmlzaXRvci5jb250YWluc09wYXF1ZVJvb3Qocm9vdCk7CiB9CiAKLXZv
aWQgSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpT
Qzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3ZvaWQgSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0
MkQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0
ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQy
RDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB2aXNp
dG9yLmFkZE9wYXF1ZVJvb3Qocm9vdCh3cmFwcGVkKCkuY2FudmFzKCkpKTsKIH0KIAordGVtcGxh
dGUgdm9pZCBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRy
ZW4oSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9y
Jik7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTQ3VzdG9tRXZlbnRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9tRXZlbnRDdXN0b20uY3BwCShyZXZpc2lvbiAyNzE0NDMp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0N1c3RvbUV2ZW50Q3VzdG9tLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDIsMTAgKzQyLDE1IEBAIEpTQzo6SlNWYWx1ZSBKU0N1c3RvbUV2
ZW50OjpkZXRhaWwoSlNDOjoKICAgICB9KTsKIH0KIAotdm9pZCBKU0N1c3RvbUV2ZW50Ojp2aXNp
dEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy92b2lkIEpT
Q3VzdG9tRXZlbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZp
c2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0N1c3RvbUV2ZW50Ojp2
aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHdyYXBwZWQo
KS5kZXRhaWwoKS52aXNpdCh2aXNpdG9yKTsKICAgICB3cmFwcGVkKCkuY2FjaGVkRGV0YWlsKCku
dmlzaXQodmlzaXRvcik7CiB9CiAKK3RlbXBsYXRlIHZvaWQgSlNDdXN0b21FdmVudDo6dmlzaXRB
ZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2
b2lkIEpTQ3VzdG9tRXZlbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0
b3ImKTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNET01CdWlsdGluQ29uc3RydWN0b3JCYXNlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJ1aWx0aW5Db25zdHJ1Y3RvckJhc2UuY3Bw
CShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJ1
aWx0aW5Db25zdHJ1Y3RvckJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSw3ICs0NSw4IEBA
IHZvaWQgSlNET01CdWlsdGluQ29uc3RydWN0b3JCYXNlOjpjYWxsRnUKICAgICBKU0M6OmNhbGwo
JmxleGljYWxHbG9iYWxPYmplY3QsICZmdW5jdGlvbiwgY2FsbERhdGEsICZ0aGlzT2JqZWN0LCBh
cmd1bWVudHMpOwogfQogCi12b2lkIEpTRE9NQnVpbHRpbkNvbnN0cnVjdG9yQmFzZTo6dmlzaXRD
aGlsZHJlbihKU0M6OkpTQ2VsbCogY2VsbCwgSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3Rl
bXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTRE9NQnVpbHRpbkNvbnN0cnVjdG9yQmFz
ZTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDOjpKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3Ip
CiB7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0RPTUJ1aWx0aW5Db25zdHJ1Y3Rv
ckJhc2UqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3Qs
IGluZm8oKSk7CkBAIC01Myw2ICs1NCw4IEBAIHZvaWQgSlNET01CdWlsdGluQ29uc3RydWN0b3JC
YXNlOjp2aXNpdEMKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2luaXRpYWxpemVG
dW5jdGlvbik7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU0RPTUJ1aWx0aW5Db25zdHJ1
Y3RvckJhc2UpOworCiBKU0M6Oklzb1N1YnNwYWNlKiBKU0RPTUJ1aWx0aW5Db25zdHJ1Y3RvckJh
c2U6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKIHsKICAgICByZXR1cm4gJnN0YXRpY19j
YXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSktPmRvbUJ1aWx0aW5Db25zdHJ1Y3Rv
clNwYWNlKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJ1aWx0aW5D
b25zdHJ1Y3RvckJhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0RPTUJ1aWx0aW5Db25zdHJ1Y3RvckJhc2UuaAkocmV2aXNpb24gMjcxNDQzKQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CdWlsdGluQ29uc3RydWN0b3JCYXNlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTQyLDcgKzQyLDcgQEAgcHJvdGVjdGVkOgogICAgIHsKICAgICB9CiAK
LSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90Vmlz
aXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBKU0M6OkpTRnVuY3Rp
b24qIGluaXRpYWxpemVGdW5jdGlvbigpOwogICAgIHZvaWQgc2V0SW5pdGlhbGl6ZUZ1bmN0aW9u
KEpTQzo6Vk0mLCBKU0M6OkpTRnVuY3Rpb24mKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjM1LDcgKzIzNSw4IEBAIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIEpTRE9N
R2xvYmFsT2JqZWMKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotdm9pZCBKU0RPTUdsb2JhbE9i
amVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQor
dGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNET01HbG9iYWxPYmplY3Q6OnZpc2l0
Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU0RP
TUdsb2JhbE9iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGNl
bGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsK
QEAgLTI1Nyw2ICsyNTgsOCBAQCB2b2lkIEpTRE9NR2xvYmFsT2JqZWN0Ojp2aXNpdENoaWxkcmVu
KEpTCiAgICAgdGhpc09iamVjdC0+bV9idWlsdGluSW50ZXJuYWxGdW5jdGlvbnMudmlzaXQodmlz
aXRvcik7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU0RPTUdsb2JhbE9iamVjdCk7CisK
IHZvaWQgSlNET01HbG9iYWxPYmplY3Q6OnByb21pc2VSZWplY3Rpb25UcmFja2VyKEpTR2xvYmFs
T2JqZWN0KiBqc0dsb2JhbE9iamVjdCwgSlNQcm9taXNlKiBwcm9taXNlLCBKU1Byb21pc2VSZWpl
Y3Rpb25PcGVyYXRpb24gb3BlcmF0aW9uKQogewogICAgIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndo
YXR3Zy5vcmcvbXVsdGlwYWdlL3dlYmFwcGFwaXMuaHRtbCN0aGUtaG9zdHByb21pc2VyZWplY3Rp
b250cmFja2VyLWltcGxlbWVudGF0aW9uCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0RPTUdsb2JhbE9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0LmgJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAg
LTY5LDcgKzY5LDcgQEAgcHVibGljOgogICAgIC8vIE1ha2UgYmluZGluZyBjb2RlIGdlbmVyYXRp
b24gZWFzaWVyLgogICAgIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QoKSB7IHJldHVy
biB0aGlzOyB9CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQzo6SlNDZWxsKiwg
SlNDOjpTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBE
T01XcmFwcGVyV29ybGQmIHdvcmxkKCkgeyByZXR1cm4gbV93b3JsZC5nZXQoKTsgfQogICAgIGJv
b2wgd29ybGRJc05vcm1hbCgpIGNvbnN0IHsgcmV0dXJuIG1fd29ybGRJc05vcm1hbDsgfQpJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01HdWFyZGVkT2JqZWN0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01HdWFyZGVkT2JqZWN0LmgJ
KHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR3Vh
cmRlZE9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw4IEBAIHB1YmxpYzoKIAog
ICAgIGJvb2wgaXNTdXNwZW5kZWQoKSBjb25zdCB7IHJldHVybiAhbV9ndWFyZGVkIHx8ICFjYW5J
bnZva2VDYWxsYmFjaygpOyB9IC8vIFRoZSB3cmFwcGVyIHdvcmxkIGhhcyBnb25lIGF3YXkgb3Ig
YWN0aXZlIERPTSBvYmplY3RzIGhhdmUgYmVlbiBzdXNwZW5kZWQuCiAKLSAgICB2b2lkIHZpc2l0
QWdncmVnYXRlKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsgdmlzaXRvci5hcHBlbmQobV9n
dWFyZGVkKTsgfQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+CisgICAgdm9pZCB2aXNp
dEFnZ3JlZ2F0ZShWaXNpdG9yJiB2aXNpdG9yKSB7IHZpc2l0b3IuYXBwZW5kKG1fZ3VhcmRlZCk7
IH0KIAogICAgIEpTQzo6SlNWYWx1ZSBndWFyZGVkT2JqZWN0KCkgY29uc3QgeyByZXR1cm4gbV9n
dWFyZGVkLmdldCgpOyB9CiAgICAgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCgpIGNv
bnN0IHsgcmV0dXJuIG1fZ2xvYmFsT2JqZWN0LmdldCgpOyB9CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0RPTVF1YWRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NUXVhZEN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MTQ0MykK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NUXVhZEN1c3RvbS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTMzLDcgKzMzLDkgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5h
bWVzcGFjZSBKU0M7CiAKLXZvaWQgSlNET01RdWFkOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihT
bG90VmlzaXRvciYgdmlzaXRvcikKKy8vdm9pZCBKU0RPTVF1YWQ6OnZpc2l0QWRkaXRpb25hbENo
aWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4K
K3ZvaWQgSlNET01RdWFkOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9y
KQogewogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChjb25zdF9jYXN0PERPTVBvaW50Kj4oJndy
YXBwZWQoKS5wMSgpKSk7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KGNvbnN0X2Nhc3Q8RE9N
UG9pbnQqPigmd3JhcHBlZCgpLnAyKCkpKTsKQEAgLTQxLDQgKzQzLDcgQEAgdm9pZCBKU0RPTVF1
YWQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKAogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChj
b25zdF9jYXN0PERPTVBvaW50Kj4oJndyYXBwZWQoKS5wNCgpKSk7CiB9CiAKLX0KK3RlbXBsYXRl
IHZvaWQgSlNET01RdWFkOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihBYnN0cmFjdFNsb3RWaXNp
dG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTRE9NUXVhZDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4o
U2xvdFZpc2l0b3ImKTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93Q3VzdG9tLmNwcAkocmV2aXNpb24g
MjcxNDQzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dDdXN0b20u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTYsNyArMTE2LDkgQEAgSlNDX0RFRklORV9DVVNUT01f
R0VUVEVSKGpzRE9NV2luZG93SW5zdAogICAgIHJldHVybiBub25DYWNoaW5nU3RhdGljRnVuY3Rp
b25HZXR0ZXJJbXBsPGpzRE9NV2luZG93SW5zdGFuY2VGdW5jdGlvbl9wb3N0TWVzc2FnZSwgMj4o
Z2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUpOwogfQogCi12b2lkIEpTRE9NV2luZG93Ojp2aXNp
dEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vdm9pZCBKU0RPTVdp
bmRvdzo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1w
bGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0RPTVdpbmRvdzo6dmlzaXRBZGRpdGlvbmFs
Q2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBpZiAoRnJhbWUqIGZyYW1lID0gd3Jh
cHBlZCgpLmZyYW1lKCkpCiAgICAgICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChmcmFtZSk7CkBA
IC0xMjksNiArMTMxLDkgQEAgdm9pZCBKU0RPTVdpbmRvdzo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRy
ZQogICAgIHdyYXBwZWQoKS52aXNpdEpTRXZlbnRMaXN0ZW5lcnModmlzaXRvcik7CiB9CiAKK3Rl
bXBsYXRlIHZvaWQgSlNET01XaW5kb3c6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEFic3RyYWN0
U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNET01XaW5kb3c6OnZpc2l0QWRkaXRpb25h
bENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CisKICNpZiBFTkFCTEUoVVNFUl9NRVNTQUdFX0hBTkRM
RVJTKQogSlNDX0RFRklORV9DVVNUT01fR0VUVEVSKGpzRE9NV2luZG93X3dlYmtpdCwgKEpTR2xv
YmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUs
IFByb3BlcnR5TmFtZSkpCiB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Rl
cHJlY2F0ZWRDU1NPTVZhbHVlQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0RlcHJlY2F0ZWRDU1NPTVZhbHVlQ3VzdG9tLmNwcAkocmV2aXNpb24g
MjcxNDQzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNEZXByZWNhdGVkQ1NTT01W
YWx1ZUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDcgKzM1LDcgQEAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKLWJvb2wgSlNEZXByZWNhdGVkQ1NT
T01WYWx1ZU93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6
OlVua25vd24+IGhhbmRsZSwgdm9pZCosIFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFy
KiogcmVhc29uKQorYm9vbCBKU0RlcHJlY2F0ZWRDU1NPTVZhbHVlT3duZXI6OmlzUmVhY2hhYmxl
RnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwg
QWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikKIHsKICAg
ICBKU0RlcHJlY2F0ZWRDU1NPTVZhbHVlKiBqc0NTU1ZhbHVlID0ganNDYXN0PEpTRGVwcmVjYXRl
ZENTU09NVmFsdWUqPihoYW5kbGUuc2xvdCgpLT5hc0NlbGwoKSk7CiAgICAgaWYgKCFqc0NTU1Zh
bHVlLT5oYXNDdXN0b21Qcm9wZXJ0aWVzKGpzQ1NTVmFsdWUtPnZtKCkpKQpJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNEb2N1bWVudEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNEb2N1bWVudEN1c3RvbS5jcHAJKHJldmlzaW9u
IDI3MTQ0MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRG9jdW1lbnRDdXN0b20u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MSwxMSArOTEsMTYgQEAgSlNWYWx1ZSB0b0pTKEpTR2xv
YmFsT2JqZWN0KiBsZXhpY2FsR2xvYgogICAgIHJldHVybiB0b0pTTmV3bHlDcmVhdGVkKGxleGlj
YWxHbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdCwgUmVmPERvY3VtZW50Pihkb2N1bWVudCkpOwog
fQogCi12b2lkIEpTRG9jdW1lbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9y
JiB2aXNpdG9yKQorLy92b2lkIEpTRG9jdW1lbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNE
b2N1bWVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAg
ICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qoc3RhdGljX2Nhc3Q8U2NyaXB0RXhlY3V0aW9uQ29udGV4
dCo+KCZ3cmFwcGVkKCkpKTsKIH0KIAordGVtcGxhdGUgdm9pZCBKU0RvY3VtZW50Ojp2aXNpdEFk
ZGl0aW9uYWxDaGlsZHJlbihBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpT
RG9jdW1lbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CisKIHZvaWQg
SlNEb2N1bWVudDo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5
emVyKQogewogICAgIEJhc2U6OmFuYWx5emVIZWFwKGNlbGwsIGFuYWx5emVyKTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXJyb3JFdmVudEN1c3RvbS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFcnJvckV2ZW50Q3VzdG9tLmNwcAko
cmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFcnJvckV2
ZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsOSArMjgsMTQgQEAKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi12b2lkIEpTRXJyb3JFdmVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRy
ZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vdm9pZCBKU0Vycm9yRXZlbnQ6OnZpc2l0
QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0
eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0Vycm9yRXZlbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxk
cmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgd3JhcHBlZCgpLm9yaWdpbmFsRXJyb3IoKS52
aXNpdCh2aXNpdG9yKTsKIH0KIAordGVtcGxhdGUgdm9pZCBKU0Vycm9yRXZlbnQ6OnZpc2l0QWRk
aXRpb25hbENoaWxkcmVuKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9p
ZCBKU0Vycm9yRXZlbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3Im
KTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNFdmVudExpc3RlbmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0V2ZW50TGlzdGVuZXIuY3BwCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50TGlzdGVuZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC03OCw3ICs3OCw4IEBAIEpTT2JqZWN0KiBKU0V2ZW50TGlzdGVuZXI6OmluaXRpYWxpemVK
U0YKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotdm9pZCBKU0V2ZW50TGlzdGVuZXI6OnZpc2l0
SlNGdW5jdGlvbihTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vdm9pZCBKU0V2ZW50TGlzdGVuZXI6
OnZpc2l0SlNGdW5jdGlvbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgSlNFdmVudExpc3Rl
bmVyOjp2aXNpdEpTRnVuY3Rpb24oQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAg
ICAvLyBJZiBtX3dyYXBwZXIgaXMgbnVsbCwgd2UgYXJlIG5vdCBrZWVwaW5nIG1fanNGdW5jdGlv
biBhbGl2ZS4KICAgICBpZiAoIW1fd3JhcHBlcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTRXZlbnRMaXN0ZW5lci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTRXZlbnRMaXN0ZW5lci5oCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50TGlzdGVuZXIuaAkod29ya2luZyBjb3B5KQpAQCAt
NjIsNyArNjIsOCBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAgICAgdmlydHVhbCBKU0M6OkpTT2Jq
ZWN0KiBpbml0aWFsaXplSlNGdW5jdGlvbihTY3JpcHRFeGVjdXRpb25Db250ZXh0JikgY29uc3Q7
Ci0gICAgdm9pZCB2aXNpdEpTRnVuY3Rpb24oSlNDOjpTbG90VmlzaXRvciYpIGZpbmFsOworLy8g
ICAgdm9pZCB2aXNpdEpTRnVuY3Rpb24oSlNDOjpTbG90VmlzaXRvciYpIGZpbmFsOworICAgIHZv
aWQgdmlzaXRKU0Z1bmN0aW9uKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpIGZpbmFsOwogCiBw
cm90ZWN0ZWQ6CiAgICAgSlNFdmVudExpc3RlbmVyKEpTQzo6SlNPYmplY3QqIGZ1bmN0aW9uLCBK
U0M6OkpTT2JqZWN0KiB3cmFwcGVyLCBib29sIGlzQXR0cmlidXRlLCBET01XcmFwcGVyV29ybGQm
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRUYXJnZXRDdXN0b20u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRUYXJn
ZXRDdXN0b20uY3BwCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0V2ZW50VGFyZ2V0Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzIsOSArNzIs
MTQgQEAgc3RkOjp1bmlxdWVfcHRyPEpTRXZlbnRUYXJnZXRXcmFwcGVyPiBqcwogICAgIHJldHVy
biBudWxscHRyOwogfQogCi12b2lkIEpTRXZlbnRUYXJnZXQ6OnZpc2l0QWRkaXRpb25hbENoaWxk
cmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy92b2lkIEpTRXZlbnRUYXJnZXQ6OnZpc2l0QWRk
aXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUg
VmlzaXRvcj4KK3ZvaWQgSlNFdmVudFRhcmdldDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlz
aXRvciYgdmlzaXRvcikKIHsKICAgICB3cmFwcGVkKCkudmlzaXRKU0V2ZW50TGlzdGVuZXJzKHZp
c2l0b3IpOwogfQogCit0ZW1wbGF0ZSB2b2lkIEpTRXZlbnRUYXJnZXQ6OnZpc2l0QWRkaXRpb25h
bENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNFdmVudFRh
cmdldDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKKwogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNGZXRjaEV2
ZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0ZldGNoRXZlbnRDdXN0b20uY3BwCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0ZldGNoRXZlbnRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
MCwxMSArMzAsMTYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIEpTRmV0Y2hFdmVu
dDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKKy8v
dm9pZCBKU0ZldGNoRXZlbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0
b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0ZldGNoRXZl
bnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgdmlz
aXRvci5hZGRPcGFxdWVSb290KCZ3cmFwcGVkKCkucmVxdWVzdCgpKTsKIH0KIAotfQordGVtcGxh
dGUgdm9pZCBKU0ZldGNoRXZlbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6QWJzdHJh
Y3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU0ZldGNoRXZlbnQ6OnZpc2l0QWRkaXRp
b25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImKTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQogCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTENhbnZh
c0VsZW1lbnRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTSFRNTENhbnZhc0VsZW1lbnRDdXN0b20uY3BwCShyZXZpc2lvbiAyNzE0NDMpCisrKyBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxDYW52YXNFbGVtZW50Q3VzdG9tLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzEsOSArMzEsMTQgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci12b2lkIEpTSFRNTENhbnZhc0VsZW1lbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3ZvaWQgSlNIVE1MQ2FudmFzRWxlbWVudDo6dmlzaXRB
ZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5
cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTSFRNTENhbnZhc0VsZW1lbnQ6OnZpc2l0QWRkaXRpb25h
bENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290
KHN0YXRpY19jYXN0PENhbnZhc0Jhc2UqPigmd3JhcHBlZCgpKSk7CiB9CiAKK3RlbXBsYXRlIHZv
aWQgSlNIVE1MQ2FudmFzRWxlbWVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpBYnN0
cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTSFRNTENhbnZhc0VsZW1lbnQ6OnZp
c2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImKTsKKwogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MVGVtcGxh
dGVFbGVtZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0hUTUxUZW1wbGF0ZUVsZW1lbnRDdXN0b20uY3BwCShyZXZpc2lvbiAyNzE0NDMpCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxUZW1wbGF0ZUVsZW1lbnRDdXN0b20u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNywxMCArMzcsMTUgQEAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKLXZvaWQgSlNIVE1MVGVtcGxhdGVFbGVtZW50Ojp2
aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy92b2lk
IEpTSFRNTFRlbXBsYXRlRWxlbWVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90
VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTSFRN
TFRlbXBsYXRlRWxlbWVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRv
cikKIHsKICAgICBpZiAoYXV0byogY29udGVudCA9IHdyYXBwZWQoKS5jb250ZW50SWZBdmFpbGFi
bGUoKSkKICAgICAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHJvb3QoY29udGVudCkpOwogfQog
Cit0ZW1wbGF0ZSB2b2lkIEpTSFRNTFRlbXBsYXRlRWxlbWVudDo6dmlzaXRBZGRpdGlvbmFsQ2hp
bGRyZW4oSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTSFRNTFRl
bXBsYXRlRWxlbWVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYp
OworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0hpc3RvcnlDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTSGlzdG9yeUN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSGlzdG9yeUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQ0LDkgKzQ0LDE0IEBAIEpTVmFsdWUgSlNIaXN0b3J5OjpzdGF0ZShKU0dsb2JhbE9iamVj
dCYKICAgICB9KTsKIH0KIAotdm9pZCBKU0hpc3Rvcnk6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVu
KFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy92b2lkIEpTSGlzdG9yeTo6dmlzaXRBZGRpdGlvbmFs
Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
Pgordm9pZCBKU0hpc3Rvcnk6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0
b3IpCiB7CiAgICAgd3JhcHBlZCgpLmNhY2hlZFN0YXRlRm9yR0MoKS52aXNpdCh2aXNpdG9yKTsK
IH0KIAordGVtcGxhdGUgdm9pZCBKU0hpc3Rvcnk6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEFi
c3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNIaXN0b3J5Ojp2aXNpdEFkZGl0
aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYpOworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQkN1cnNvckN1c3RvbS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJDdXJzb3JDdXN0b20u
Y3BwCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lE
QkN1cnNvckN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUwLDcgKzUwLDkgQEAgSlNDOjpK
U1ZhbHVlIEpTSURCQ3Vyc29yOjpwcmltYXJ5S2V5KEpTQwogICAgIH0pOwogfQogCi12b2lkIEpT
SURCQ3Vyc29yOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikK
Ky8vdm9pZCBKU0lEQkN1cnNvcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3Im
IHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0lEQkN1cnNvcjo6
dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBhdXRvJiBj
dXJzb3IgPSB3cmFwcGVkKCk7CiAgICAgaWYgKGF1dG8qIHJlcXVlc3QgPSBjdXJzb3IucmVxdWVz
dCgpKQpAQCAtNTksNiArNjEsOSBAQCB2b2lkIEpTSURCQ3Vyc29yOjp2aXNpdEFkZGl0aW9uYWxD
aGlsZHJlCiAgICAgY3Vyc29yLnByaW1hcnlLZXlXcmFwcGVyKCkudmlzaXQodmlzaXRvcik7CiB9
CiAKK3RlbXBsYXRlIHZvaWQgSlNJREJDdXJzb3I6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEFi
c3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNJREJDdXJzb3I6OnZpc2l0QWRk
aXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CisKIEpTVmFsdWUgdG9KU05ld2x5Q3JlYXRl
ZChKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
UmVmPElEQkN1cnNvcj4mJiBjdXJzb3IpCiB7CiAgICAgaWYgKGlzPElEQkN1cnNvcldpdGhWYWx1
ZT4oY3Vyc29yKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCQ3Vyc29y
V2l0aFZhbHVlQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0lEQkN1cnNvcldpdGhWYWx1ZUN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCQ3Vyc29yV2l0aFZhbHVlQ3VzdG9tLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDMsMTIgKzQzLDE3IEBAIEpTQzo6SlNWYWx1ZSBKU0lEQkN1
cnNvcldpdGhWYWx1ZTo6dmFsdWUKICAgICB9KTsKIH0KIAotdm9pZCBKU0lEQkN1cnNvcldpdGhW
YWx1ZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3Zv
aWQgSlNJREJDdXJzb3JXaXRoVmFsdWU6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNp
dG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNJREJDdXJz
b3JXaXRoVmFsdWU6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7
CiAgICAgSlNJREJDdXJzb3I6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKHZpc2l0b3IpOwogICAg
IHdyYXBwZWQoKS52YWx1ZVdyYXBwZXIoKS52aXNpdCh2aXNpdG9yKTsKIH0KIAordGVtcGxhdGUg
dm9pZCBKU0lEQkN1cnNvcldpdGhWYWx1ZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oQWJzdHJh
Y3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU0lEQkN1cnNvcldpdGhWYWx1ZTo6dmlz
aXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKKwogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQkluZGV4Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQkluZGV4Q3VzdG9tLmNwcAkocmV2aXNpb24g
MjcxNDQzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJJbmRleEN1c3RvbS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDExICszNCwxNiBAQAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAotdm9pZCBKU0lEQkluZGV4Ojp2aXNpdEFkZGl0aW9u
YWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vdm9pZCBKU0lEQkluZGV4Ojp2aXNp
dEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVu
YW1lIFZpc2l0b3I+Cit2b2lkIEpTSURCSW5kZXg6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZp
c2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHN0YXRpY19jYXN0
PElEQkluZGV4Jj4od3JhcHBlZCgpKS5vYmplY3RTdG9yZUFzT3BhcXVlUm9vdCgpKTsKIH0KIAor
dGVtcGxhdGUgdm9pZCBKU0lEQkluZGV4Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihBYnN0cmFj
dFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTSURCSW5kZXg6OnZpc2l0QWRkaXRpb25h
bENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2Vu
ZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNJREJPYmplY3RTdG9yZUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJPYmplY3RTdG9yZUN1c3RvbS5jcHAJKHJldmlzaW9u
IDI3MTQ0MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCT2JqZWN0U3RvcmVD
dXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiwxMSArMzYsMTYgQEAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKLXZvaWQgSlNJREJPYmplY3RTdG9yZTo6
dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3ZvaWQgSlNJ
REJPYmplY3RTdG9yZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0
b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0lEQk9iamVjdFN0b3JlOjp2
aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHN0YXRpY19j
YXN0PElEQk9iamVjdFN0b3JlJj4od3JhcHBlZCgpKS52aXNpdFJlZmVyZW5jZWRJbmRleGVzKHZp
c2l0b3IpOwogfQogCi19Cit0ZW1wbGF0ZSB2b2lkIEpTSURCT2JqZWN0U3RvcmU6OnZpc2l0QWRk
aXRpb25hbENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNJ
REJPYmplY3RTdG9yZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTSURCUmVxdWVzdEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNJREJSZXF1ZXN0Q3VzdG9tLmNwcAkocmV2aXNpb24gMjcxNDQz
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJSZXF1ZXN0Q3VzdG9tLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtODksMTIgKzg5LDE4IEBAIEpTQzo6SlNWYWx1ZSBKU0lEQlJlcXVl
c3Q6OnJlc3VsdChKU0M6OkoKICAgICB9KTsKIH0KIAotdm9pZCBKU0lEQlJlcXVlc3Q6OnZpc2l0
QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy92b2lkIEpTSURCUmVx
dWVzdDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1w
bGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0lEQlJlcXVlc3Q6OnZpc2l0QWRkaXRpb25h
bENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0byYgcmVxdWVzdCA9IHdyYXBw
ZWQoKTsKICAgICByZXF1ZXN0LnJlc3VsdFdyYXBwZXIoKS52aXNpdCh2aXNpdG9yKTsKICAgICBy
ZXF1ZXN0LmN1cnNvcldyYXBwZXIoKS52aXNpdCh2aXNpdG9yKTsKIH0KIAotfQordGVtcGxhdGUg
dm9pZCBKU0lEQlJlcXVlc3Q6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEFic3RyYWN0U2xvdFZp
c2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNJREJSZXF1ZXN0Ojp2aXNpdEFkZGl0aW9uYWxDaGls
ZHJlbihTbG90VmlzaXRvciYpOworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKICNlbmRpZiAv
LyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTSURCVHJhbnNhY3Rpb25DdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTSURCVHJhbnNhY3Rpb25DdXN0b20uY3BwCShyZXZpc2lvbiAyNzE0
NDMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQlRyYW5zYWN0aW9uQ3VzdG9t
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsMTEgKzM0LDE2IEBACiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCi12b2lkIEpTSURCVHJhbnNhY3Rpb246OnZpc2l0
QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy92b2lkIEpTSURCVHJh
bnNhY3Rpb246OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQor
dGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNJREJUcmFuc2FjdGlvbjo6dmlzaXRB
ZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBzdGF0aWNfY2FzdDxJ
REJUcmFuc2FjdGlvbiY+KHdyYXBwZWQoKSkudmlzaXRSZWZlcmVuY2VkT2JqZWN0U3RvcmVzKHZp
c2l0b3IpOwogfQogCi19Cit0ZW1wbGF0ZSB2b2lkIEpTSURCVHJhbnNhY3Rpb246OnZpc2l0QWRk
aXRpb25hbENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNJ
REJUcmFuc2FjdGlvbjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTSW50ZXJzZWN0aW9uT2JzZXJ2ZXJDdXN0b20uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW50ZXJzZWN0aW9uT2JzZXJ2ZXJDdXN0b20u
Y3BwCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lu
dGVyc2VjdGlvbk9ic2VydmVyQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsMTAgKzMw
LDE1IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBKU0ludGVyc2VjdGlvbk9ic2Vy
dmVyOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQor
Ly92b2lkIEpTSW50ZXJzZWN0aW9uT2JzZXJ2ZXI6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpT
Qzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9p
ZCBKU0ludGVyc2VjdGlvbk9ic2VydmVyOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9y
JiB2aXNpdG9yKQogewogICAgIGlmIChhdXRvKiBjYWxsYmFjayA9IHdyYXBwZWQoKS5jYWxsYmFj
a0NvbmN1cnJlbnRseSgpKQogICAgICAgICBjYWxsYmFjay0+dmlzaXRKU0Z1bmN0aW9uKHZpc2l0
b3IpOwogfQogCi19Cit0ZW1wbGF0ZSB2b2lkIEpTSW50ZXJzZWN0aW9uT2JzZXJ2ZXI6OnZpc2l0
QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUg
dm9pZCBKU0ludGVyc2VjdGlvbk9ic2VydmVyOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6
OlNsb3RWaXNpdG9yJik7CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW50ZXJzZWN0aW9uT2JzZXJ2ZXJFbnRyeUN1c3RvbS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJbnRlcnNlY3Rpb25P
YnNlcnZlckVudHJ5Q3VzdG9tLmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNJbnRlcnNlY3Rpb25PYnNlcnZlckVudHJ5Q3VzdG9tLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzAsNyArMzAsOSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZv
aWQgSlNJbnRlcnNlY3Rpb25PYnNlcnZlckVudHJ5Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihK
U0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy92b2lkIEpTSW50ZXJzZWN0aW9uT2JzZXJ2ZXJF
bnRyeTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikK
K3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTSW50ZXJzZWN0aW9uT2JzZXJ2ZXJF
bnRyeTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB2
aXNpdG9yLmFkZE9wYXF1ZVJvb3Qocm9vdCh3cmFwcGVkKCkudGFyZ2V0KCkpKTsKICAgICB2aXNp
dG9yLmFkZE9wYXF1ZVJvb3Qod3JhcHBlZCgpLmJvdW5kaW5nQ2xpZW50UmVjdCgpKTsKQEAgLTM4
LDQgKzQwLDcgQEAgdm9pZCBKU0ludGVyc2VjdGlvbk9ic2VydmVyRW50cnk6OnZpc2l0QQogICAg
IHZpc2l0b3IuYWRkT3BhcXVlUm9vdCh3cmFwcGVkKCkucm9vdEJvdW5kcygpKTsKIH0KIAotfQor
dGVtcGxhdGUgdm9pZCBKU0ludGVyc2VjdGlvbk9ic2VydmVyRW50cnk6OnZpc2l0QWRkaXRpb25h
bENoaWxkcmVuKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU0lu
dGVyc2VjdGlvbk9ic2VydmVyRW50cnk6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xv
dFZpc2l0b3ImKTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNNZXNzYWdlQ2hhbm5lbEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNZXNzYWdlQ2hhbm5lbEN1c3RvbS5jcHAJKHJl
dmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWVzc2FnZUNo
YW5uZWxDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3ICszMyw5IEBACiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotdm9pZCBKU01lc3NhZ2VDaGFubmVsOjp2aXNpdEFkZGl0aW9uYWxD
aGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy92b2lkIEpTTWVzc2FnZUNoYW5u
ZWw6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0
ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU01lc3NhZ2VDaGFubmVsOjp2aXNpdEFk
ZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGlmIChNZXNzYWdlUG9y
dCogcG9ydCA9IHdyYXBwZWQoKS5wb3J0MSgpKQogICAgICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJv
b3QocG9ydCk7CkBAIC00Miw2ICs0NCw5IEBAIHZvaWQgSlNNZXNzYWdlQ2hhbm5lbDo6dmlzaXRB
ZGRpdGlvbmFsQ2gKICAgICAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHBvcnQpOwogfQogCit0
ZW1wbGF0ZSB2b2lkIEpTTWVzc2FnZUNoYW5uZWw6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpT
Qzo6QWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU01lc3NhZ2VDaGFubmVs
Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJik7CisKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShDSEFOTkVMX01FU1NBR0lORykKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWVzc2FnZUV2ZW50Q3VzdG9tLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01lc3NhZ2VFdmVudEN1
c3RvbS5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTTWVzc2FnZUV2ZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzAsNyArNzAsOSBA
QCBKU0M6OkpTVmFsdWUgSlNNZXNzYWdlRXZlbnQ6OmRhdGEoSlNDOjpKCiAgICAgfSk7CiB9CiAK
LXZvaWQgSlNNZXNzYWdlRXZlbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZp
c2l0b3ImIHZpc2l0b3IpCisvL3ZvaWQgSlNNZXNzYWdlRXZlbnQ6OnZpc2l0QWRkaXRpb25hbENo
aWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNp
dG9yPgordm9pZCBKU01lc3NhZ2VFdmVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRv
ciYgdmlzaXRvcikKIHsKICAgICBXVEY6OnN3aXRjaE9uKHdyYXBwZWQoKS5kYXRhKCksIFsmdmlz
aXRvcl0gKGNvbnN0IEpTVmFsdWVJbldyYXBwZWRPYmplY3QmIGRhdGEpIHsKICAgICAgICAgZGF0
YS52aXNpdCh2aXNpdG9yKTsKQEAgLTg0LDQgKzg2LDcgQEAgdm9pZCBKU01lc3NhZ2VFdmVudDo6
dmlzaXRBZGRpdGlvbmFsQ2hpbAogICAgIHdyYXBwZWQoKS5jYWNoZWRQb3J0cygpLnZpc2l0KHZp
c2l0b3IpOwogfQogCit0ZW1wbGF0ZSB2b2lkIEpTTWVzc2FnZUV2ZW50Ojp2aXNpdEFkZGl0aW9u
YWxDaGlsZHJlbihKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNN
ZXNzYWdlRXZlbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImKTsK
KwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNNZXNzYWdlUG9ydEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNNZXNzYWdlUG9ydEN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWVzc2FnZVBvcnRDdXN0b20uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMSwxMSArMzEsMTYgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5n
IG5hbWVzcGFjZSBKU0M7CiAKLXZvaWQgSlNNZXNzYWdlUG9ydDo6dmlzaXRBZGRpdGlvbmFsQ2hp
bGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3ZvaWQgSlNNZXNzYWdlUG9ydDo6dmlzaXRB
ZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBWaXNpdG9yPgordm9pZCBKU01lc3NhZ2VQb3J0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihW
aXNpdG9yJiB2aXNpdG9yKQogewogICAgIC8vIElmIHdlIGhhdmUgYSBsb2NhbGx5IGVudGFuZ2xl
ZCBwb3J0LCB3ZSBjYW4gZGlyZWN0bHkgbWFyayBpdCBhcyByZWFjaGFibGUuIFBvcnRzIHRoYXQg
YXJlIHJlbW90ZWx5IGVudGFuZ2xlZCBhcmUgbWFya2VkIGluLXVzZSBieSBtYXJrQWN0aXZlT2Jq
ZWN0c0ZvckNvbnRleHQoKS4KICAgICBpZiAoTWVzc2FnZVBvcnQqIHBvcnQgPSB3cmFwcGVkKCku
bG9jYWxseUVudGFuZ2xlZFBvcnQoKSkKICAgICAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHBv
cnQpOwogfQogCit0ZW1wbGF0ZSB2b2lkIEpTTWVzc2FnZVBvcnQ6OnZpc2l0QWRkaXRpb25hbENo
aWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNNZXNzYWdlUG9y
dDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKKwogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNdXRhdGlvbk9i
c2VydmVyQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU011dGF0aW9uT2JzZXJ2ZXJDdXN0b20uY3BwCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU011dGF0aW9uT2JzZXJ2ZXJDdXN0b20uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zOSwxMiArMzksMTcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5n
IG5hbWVzcGFjZSBKU0M7CiAKLXZvaWQgSlNNdXRhdGlvbk9ic2VydmVyOjp2aXNpdEFkZGl0aW9u
YWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy92b2lkIEpTTXV0YXRpb25P
YnNlcnZlcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRv
cikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTTXV0YXRpb25PYnNlcnZlcjo6
dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB3cmFwcGVk
KCkuY2FsbGJhY2soKS52aXNpdEpTRnVuY3Rpb24odmlzaXRvcik7CiB9CiAKLWJvb2wgSlNNdXRh
dGlvbk9ic2VydmVyT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxl
PEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgU2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0
IGNoYXIqKnJlYXNvbikKK3RlbXBsYXRlIHZvaWQgSlNNdXRhdGlvbk9ic2VydmVyOjp2aXNpdEFk
ZGl0aW9uYWxDaGlsZHJlbihKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZv
aWQgSlNNdXRhdGlvbk9ic2VydmVyOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RW
aXNpdG9yJik7CisKK2Jvb2wgSlNNdXRhdGlvbk9ic2VydmVyT3duZXI6OmlzUmVhY2hhYmxlRnJv
bU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgQWJz
dHJhY3RTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqcmVhc29uKQogewogICAgIGZv
ciAoYXV0byogbm9kZSA6IGpzQ2FzdDxKU011dGF0aW9uT2JzZXJ2ZXIqPihoYW5kbGUuc2xvdCgp
LT5hc0NlbGwoKSktPndyYXBwZWQoKS5vYnNlcnZlZE5vZGVzKCkpIHsKICAgICAgICAgaWYgKHZp
c2l0b3IuY29udGFpbnNPcGFxdWVSb290KHJvb3Qobm9kZSkpKSB7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU011dGF0aW9uUmVjb3JkQ3VzdG9tLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU011dGF0aW9uUmVjb3JkQ3VzdG9tLmNwcAko
cmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNdXRhdGlv
blJlY29yZEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDkgKzMwLDE0IEBACiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBKU011dGF0aW9uUmVjb3JkOjp2aXNpdEFkZGl0aW9u
YWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy92b2lkIEpTTXV0YXRpb25S
ZWNvcmQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3Ip
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU011dGF0aW9uUmVjb3JkOjp2aXNp
dEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHdyYXBwZWQoKS52
aXNpdE5vZGVzQ29uY3VycmVudGx5KHZpc2l0b3IpOwogfQotICAgIAorCit0ZW1wbGF0ZSB2b2lk
IEpTTXV0YXRpb25SZWNvcmQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6QWJzdHJhY3RT
bG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU011dGF0aW9uUmVjb3JkOjp2aXNpdEFkZGl0
aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJik7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTmF2aWdhdG9yQ3VzdG9tLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05hdmlnYXRvckN1
c3RvbS5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTTmF2aWdhdG9yQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsMTEgKzMyLDE2IEBA
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBKU05hdmlnYXRvcjo6dmlzaXRBZGRpdGlv
bmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vdm9pZCBKU05hdmlnYXRv
cjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3Rl
bXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTTmF2aWdhdG9yOjp2aXNpdEFkZGl0aW9u
YWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9v
dChzdGF0aWNfY2FzdDxOYXZpZ2F0b3JCYXNlKj4oJndyYXBwZWQoKSkpOwogfQogCit0ZW1wbGF0
ZSB2b2lkIEpTTmF2aWdhdG9yOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OkFic3RyYWN0
U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNOYXZpZ2F0b3I6OnZpc2l0QWRkaXRpb25h
bENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImKTsKKwogI2lmIEVOQUJMRShNRURJQV9TVFJFQU0p
CiBKU0M6OkpTVmFsdWUgSlNOYXZpZ2F0b3I6OmdldFVzZXJNZWRpYShKU0M6OkpTR2xvYmFsT2Jq
ZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OkNhbGxGcmFtZSYgY2FsbEZyYW1lKQogewpJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlQ3VzdG9tLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVDdXN0b20uY3BwCShyZXZp
c2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVDdXN0b20u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NCw3ICs3NCw4IEBAIHVzaW5nIG5hbWVzcGFjZSBKU0M7
CiAKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBpc1Jl
YWNoYWJsZUZyb21ET00oTm9kZSogbm9kZSwgU2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNo
YXIqKiByZWFzb24pCisvL3N0YXRpYyBpbmxpbmUgYm9vbCBpc1JlYWNoYWJsZUZyb21ET00oTm9k
ZSogbm9kZSwgU2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCitzdGF0
aWMgaW5saW5lIGJvb2wgaXNSZWFjaGFibGVGcm9tRE9NKE5vZGUqIG5vZGUsIEFic3RyYWN0U2xv
dFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCiB7CiAgICAgaWYgKCFub2Rl
LT5pc0Nvbm5lY3RlZCgpKSB7CiAgICAgICAgIGlmIChpczxFbGVtZW50Pigqbm9kZSkpIHsKQEAg
LTEyMyw3ICsxMjQsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaXNSZWFjaGFibGVGcm9tRE9NKE5v
CiAgICAgcmV0dXJuIHZpc2l0b3IuY29udGFpbnNPcGFxdWVSb290KHJvb3Qobm9kZSkpOwogfQog
Ci1ib29sIEpTTm9kZU93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRs
ZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25z
dCBjaGFyKiogcmVhc29uKQorYm9vbCBKU05vZGVPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVl
Um9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBBYnN0cmFjdFNs
b3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQogewogICAgIEpTTm9kZSog
anNOb2RlID0ganNDYXN0PEpTTm9kZSo+KGhhbmRsZS5zbG90KCktPmFzQ2VsbCgpKTsKICAgICBy
ZXR1cm4gaXNSZWFjaGFibGVGcm9tRE9NKCZqc05vZGUtPndyYXBwZWQoKSwgdmlzaXRvciwgcmVh
c29uKTsKQEAgLTEzNiwxMSArMTM3LDE2IEBAIEpTU2NvcGUqIEpTTm9kZTo6cHVzaEV2ZW50SGFu
ZGxlclNjb3BlKEoKICAgICByZXR1cm4gbm9kZTsKIH0KIAotdm9pZCBKU05vZGU6OnZpc2l0QWRk
aXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy92b2lkIEpTTm9kZTo6dmlz
aXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBl
bmFtZSBWaXNpdG9yPgordm9pZCBKU05vZGU6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0
b3ImIHZpc2l0b3IpCiB7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHJvb3Qod3JhcHBlZCgp
KSk7CiB9CiAKK3RlbXBsYXRlIHZvaWQgSlNOb2RlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihB
YnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTTm9kZTo6dmlzaXRBZGRpdGlv
bmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKKwogc3RhdGljIEFMV0FZU19JTkxJTkUgSlNWYWx1
ZSBjcmVhdGVXcmFwcGVySW5saW5lKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0
LCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWY8Tm9kZT4mJiBub2RlKQogewog
ICAgIEFTU0VSVCghZ2V0Q2FjaGVkV3JhcHBlcihnbG9iYWxPYmplY3QtPndvcmxkKCksIG5vZGUp
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUl0ZXJhdG9yQ3VzdG9t
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVJdGVy
YXRvckN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTTm9kZUl0ZXJhdG9yQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUsMTAg
KzI1LDE1IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBKU05vZGVJdGVyYXRvcjo6
dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vdm9p
ZCBKU05vZGVJdGVyYXRvcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRv
ciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTTm9kZUl0ZXJh
dG9yOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGlm
IChOb2RlRmlsdGVyKiBmaWx0ZXIgPSB3cmFwcGVkKCkuZmlsdGVyKCkpCiAgICAgICAgIHZpc2l0
b3IuYWRkT3BhcXVlUm9vdChmaWx0ZXIpOwogfQogCi19Cit0ZW1wbGF0ZSB2b2lkIEpTTm9kZUl0
ZXJhdG9yOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3Im
KTsKK3RlbXBsYXRlIHZvaWQgSlNOb2RlSXRlcmF0b3I6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVu
KEpTQzo6U2xvdFZpc2l0b3ImKTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlTGlzdEN1c3RvbS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlTGlzdEN1c3RvbS5jcHAJKHJldmlz
aW9uIDI3MTQ0MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUxpc3RDdXN0
b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw3ICszNyw3IEBACiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCi1ib29sIEpTTm9kZUxpc3RPd25lcjo6aXNSZWFj
aGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZv
aWQqLCBTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikKK2Jvb2wgSlNO
b2RlTGlzdE93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6
OlVua25vd24+IGhhbmRsZSwgdm9pZCosIEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNv
bnN0IGNoYXIqKiByZWFzb24pCiB7CiAgICAgSlNOb2RlTGlzdCoganNOb2RlTGlzdCA9IGpzQ2Fz
dDxKU05vZGVMaXN0Kj4oaGFuZGxlLnNsb3QoKS0+YXNDZWxsKCkpOwogICAgIGlmICghanNOb2Rl
TGlzdC0+aGFzQ3VzdG9tUHJvcGVydGllcyhqc05vZGVMaXN0LT52bSgpKSkKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTT2Zmc2NyZWVuQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU09m
ZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyREN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MTQ0
MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTT2Zmc2NyZWVuQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJEQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsNyBAQCBp
bmxpbmUgdm9pZCogcm9vdChPZmZzY3JlZW5DYW52YXMqIGNhbnZhCiAgICAgcmV0dXJuIGNhbnZh
czsKIH0KIAotYm9vbCBKU09mZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRE93bmVyOjpp
c1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRs
ZSwgdm9pZCosIFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQorYm9v
bCBKU09mZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRE93bmVyOjppc1JlYWNoYWJsZUZy
b21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIEFi
c3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCiB7CiAgICAg
aWYgKFVOTElLRUxZKHJlYXNvbikpCiAgICAgICAgICpyZWFzb24gPSAiQ2FudmFzIGlzIG9wYXF1
ZSByb290IjsKQEAgLTQxLDExICs0MSwxNiBAQCBib29sIEpTT2Zmc2NyZWVuQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJECiAgICAgcmV0dXJuIHZpc2l0b3IuY29udGFpbnNPcGFxdWVSb290KHJvb3Qp
OwogfQogCi12b2lkIEpTT2Zmc2NyZWVuQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjp2aXNpdEFk
ZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vdm9pZCBKU09mZnNjcmVl
bkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZp
c2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU09mZnNj
cmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlz
aXRvciYgdmlzaXRvcikKIHsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qocm9vdCgmd3JhcHBl
ZCgpLmNhbnZhcygpKSk7CiB9CiAKK3RlbXBsYXRlIHZvaWQgSlNPZmZzY3JlZW5DYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0
b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNPZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6
OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CisKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKIAogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1Bh
aW50UmVuZGVyaW5nQ29udGV4dDJEQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU1BhaW50UmVuZGVyaW5nQ29udGV4dDJEQ3VzdG9tLmNwcAkocmV2
aXNpb24gMjcxNDQzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNQYWludFJlbmRl
cmluZ0NvbnRleHQyREN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDcgKzM2LDcgQEAg
aW5saW5lIHZvaWQqIHJvb3QoQ3VzdG9tUGFpbnRDYW52YXMqIGNhbgogICAgIHJldHVybiBjYW52
YXM7CiB9CiAKLWJvb2wgSlNQYWludFJlbmRlcmluZ0NvbnRleHQyRE93bmVyOjppc1JlYWNoYWJs
ZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCos
IFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQorYm9vbCBKU1BhaW50
UmVuZGVyaW5nQ29udGV4dDJET3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6
SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgQWJzdHJhY3RTbG90VmlzaXRvciYg
dmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikKIHsKICAgICBpZiAoVU5MSUtFTFkocmVhc29u
KSkKICAgICAgICAgKnJlYXNvbiA9ICJDYW52YXMgaXMgb3BhcXVlIHJvb3QiOwpAQCAtNDYsMTEg
KzQ2LDE2IEBAIGJvb2wgSlNQYWludFJlbmRlcmluZ0NvbnRleHQyRE93bmVyOjppc1IKICAgICBy
ZXR1cm4gdmlzaXRvci5jb250YWluc09wYXF1ZVJvb3Qocm9vdCk7CiB9CiAKLXZvaWQgSlNQYWlu
dFJlbmRlcmluZ0NvbnRleHQyRDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3Im
IHZpc2l0b3IpCisvL3ZvaWQgSlNQYWludFJlbmRlcmluZ0NvbnRleHQyRDo6dmlzaXRBZGRpdGlv
bmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNp
dG9yPgordm9pZCBKU1BhaW50UmVuZGVyaW5nQ29udGV4dDJEOjp2aXNpdEFkZGl0aW9uYWxDaGls
ZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChyb290
KCZ3cmFwcGVkKCkuY2FudmFzKCkpKTsKIH0KIAordGVtcGxhdGUgdm9pZCBKU1BhaW50UmVuZGVy
aW5nQ29udGV4dDJEOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihBYnN0cmFjdFNsb3RWaXNpdG9y
Jik7Cit0ZW1wbGF0ZSB2b2lkIEpTUGFpbnRSZW5kZXJpbmdDb250ZXh0MkQ6OnZpc2l0QWRkaXRp
b25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKICNl
bmRpZgogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1BhaW50V29ya2xldEds
b2JhbFNjb3BlQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU1BhaW50V29ya2xldEdsb2JhbFNjb3BlQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcxNDQz
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNQYWludFdvcmtsZXRHbG9iYWxTY29w
ZUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDkgQEAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKLXZvaWQgSlNQYWludFdvcmtsZXRHbG9i
YWxTY29wZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRv
cikKKy8vdm9pZCBKU1BhaW50V29ya2xldEdsb2JhbFNjb3BlOjp2aXNpdEFkZGl0aW9uYWxDaGls
ZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRv
cj4KK3ZvaWQgSlNQYWludFdvcmtsZXRHbG9iYWxTY29wZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRy
ZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKHdyYXBw
ZWQoKS5wYWludERlZmluaXRpb25Mb2NrKCkpOwogICAgIGZvciAoYXV0byYgcmVnaXN0ZXJlZCA6
IHdyYXBwZWQoKS5wYWludERlZmluaXRpb25NYXAoKS52YWx1ZXMoKSkgewpAQCAtNDAsNSArNDIs
OSBAQCB2b2lkIEpTUGFpbnRXb3JrbGV0R2xvYmFsU2NvcGU6OnZpc2l0QWRkCiAgICAgfQogfQog
Ci19Cit0ZW1wbGF0ZSB2b2lkIEpTUGFpbnRXb3JrbGV0R2xvYmFsU2NvcGU6OnZpc2l0QWRkaXRp
b25hbENoaWxkcmVuKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBK
U1BhaW50V29ya2xldEdsb2JhbFNjb3BlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNs
b3RWaXNpdG9yJik7CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwogI2VuZGlmCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1BheW1lbnRNZXRob2RDaGFuZ2VFdmVudEN1c3Rv
bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNQYXltZW50
TWV0aG9kQ2hhbmdlRXZlbnRDdXN0b20uY3BwCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU1BheW1lbnRNZXRob2RDaGFuZ2VFdmVudEN1c3RvbS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQxLDcgKzQxLDkgQEAgSlNDOjpKU1ZhbHVlIEpTUGF5bWVudE1l
dGhvZENoYW5nZUV2ZW50OgogICAgIH0pOwogfQogCi12b2lkIEpTUGF5bWVudE1ldGhvZENoYW5n
ZUV2ZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9y
KQorLy92b2lkIEpTUGF5bWVudE1ldGhvZENoYW5nZUV2ZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGls
ZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRv
cj4KK3ZvaWQgSlNQYXltZW50TWV0aG9kQ2hhbmdlRXZlbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxk
cmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgV1RGOjpzd2l0Y2hPbih3cmFwcGVkKCkubWV0
aG9kRGV0YWlscygpLCBbJnZpc2l0b3JdKGNvbnN0IEpTVmFsdWVJbldyYXBwZWRPYmplY3QmIG1l
dGhvZERldGFpbHMpIHsKICAgICAgICAgbWV0aG9kRGV0YWlscy52aXNpdCh2aXNpdG9yKTsKQEAg
LTUxLDYgKzUzLDkgQEAgdm9pZCBKU1BheW1lbnRNZXRob2RDaGFuZ2VFdmVudDo6dmlzaXRBZAog
ICAgIHdyYXBwZWQoKS5jYWNoZWRNZXRob2REZXRhaWxzKCkudmlzaXQodmlzaXRvcik7CiB9CiAK
K3RlbXBsYXRlIHZvaWQgSlNQYXltZW50TWV0aG9kQ2hhbmdlRXZlbnQ6OnZpc2l0QWRkaXRpb25h
bENoaWxkcmVuKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU1Bh
eW1lbnRNZXRob2RDaGFuZ2VFdmVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90
VmlzaXRvciYpOworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUo
UEFZTUVOVF9SRVFVRVNUKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNQYXlt
ZW50UmVzcG9uc2VDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTUGF5bWVudFJlc3BvbnNlQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNQYXltZW50UmVzcG9uc2VDdXN0b20uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zNywxMSArMzcsMTYgQEAgSlNDOjpKU1ZhbHVlIEpTUGF5bWVudFJl
c3BvbnNlOjpkZXRhaWxzKAogICAgIH0pOwogfQogCi12b2lkIEpTUGF5bWVudFJlc3BvbnNlOjp2
aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy92b2lk
IEpTUGF5bWVudFJlc3BvbnNlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNp
dG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNQYXltZW50
UmVzcG9uc2U6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAg
ICAgd3JhcHBlZCgpLmNhY2hlZERldGFpbHMoKS52aXNpdCh2aXNpdG9yKTsKIH0KIAordGVtcGxh
dGUgdm9pZCBKU1BheW1lbnRSZXNwb25zZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpB
YnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTUGF5bWVudFJlc3BvbnNlOjp2
aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJik7CisKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShQQVlNRU5UX1JFUVVFU1QpCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1BlcmZvcm1hbmNlT2JzZXJ2ZXJDdXN0b20uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUGVyZm9ybWFuY2VP
YnNlcnZlckN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTUGVyZm9ybWFuY2VPYnNlcnZlckN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMxLDEyICszMSwxNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgSlNQZXJm
b3JtYW5jZU9ic2VydmVyOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9y
JiB2aXNpdG9yKQorLy92b2lkIEpTUGVyZm9ybWFuY2VPYnNlcnZlcjo6dmlzaXRBZGRpdGlvbmFs
Q2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZp
c2l0b3I+Cit2b2lkIEpTUGVyZm9ybWFuY2VPYnNlcnZlcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRy
ZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB3cmFwcGVkKCkuY2FsbGJhY2soKS52aXNpdEpT
RnVuY3Rpb24odmlzaXRvcik7CiB9CiAKLWJvb2wgSlNQZXJmb3JtYW5jZU9ic2VydmVyT3duZXI6
OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFu
ZGxlLCB2b2lkKiwgSlNDOjpTbG90VmlzaXRvciYsIGNvbnN0IGNoYXIqKiByZWFzb24pCit0ZW1w
bGF0ZSB2b2lkIEpTUGVyZm9ybWFuY2VPYnNlcnZlcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4o
SlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTUGVyZm9ybWFuY2VP
YnNlcnZlcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYpOworCiti
b29sIEpTUGVyZm9ybWFuY2VPYnNlcnZlck93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290
cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIEpTQzo6QWJzdHJhY3RT
bG90VmlzaXRvciYsIGNvbnN0IGNoYXIqKiByZWFzb24pCiB7CiAgICAgaWYgKFVOTElLRUxZKHJl
YXNvbikpCiAgICAgICAgICpyZWFzb24gPSAiUmVnaXN0ZXJlZCBQZXJmb3JtYW5jZU9ic2VydmVy
IGNhbGxiYWNrIjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUG9wU3RhdGVF
dmVudEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNQb3BTdGF0ZUV2ZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNQb3BTdGF0ZUV2ZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtOTAsOSArOTAsMTQgQEAgSlNWYWx1ZSBKU1BvcFN0YXRlRXZlbnQ6OnN0YXRlKEpTR2xv
YmFsTwogICAgIHJldHVybiBjYWNoZVN0YXRlKHJlc3VsdCk7CiB9CiAKLXZvaWQgSlNQb3BTdGF0
ZUV2ZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9y
KQorLy92b2lkIEpTUG9wU3RhdGVFdmVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpT
bG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpT
UG9wU3RhdGVFdmVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikK
IHsKICAgICB3cmFwcGVkKCkuc3RhdGUoKS52aXNpdCh2aXNpdG9yKTsKIH0KIAordGVtcGxhdGUg
dm9pZCBKU1BvcFN0YXRlRXZlbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6QWJzdHJh
Y3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU1BvcFN0YXRlRXZlbnQ6OnZpc2l0QWRk
aXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImKTsKKwogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNQcm9taXNlUmVqZWN0aW9u
RXZlbnRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTUHJvbWlzZVJlamVjdGlvbkV2ZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNQcm9taXNlUmVqZWN0aW9uRXZlbnRDdXN0b20u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw5ICszMiwxNCBAQAogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLXZvaWQgSlNQcm9taXNlUmVqZWN0aW9uRXZlbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxk
cmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3ZvaWQgSlNQcm9taXNlUmVqZWN0aW9u
RXZlbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3Ip
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1Byb21pc2VSZWplY3Rpb25FdmVu
dDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB3cmFw
cGVkKCkucmVhc29uKCkudmlzaXQodmlzaXRvcik7CiB9CiAKK3RlbXBsYXRlIHZvaWQgSlNQcm9t
aXNlUmVqZWN0aW9uRXZlbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6QWJzdHJhY3RT
bG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU1Byb21pc2VSZWplY3Rpb25FdmVudDo6dmlz
aXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYpOworCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1Jlc2l6ZU9ic2Vy
dmVyQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U1Jlc2l6ZU9ic2VydmVyQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNSZXNpemVPYnNlcnZlckN1c3RvbS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTMwLDExICszMCwxNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgSlNS
ZXNpemVPYnNlcnZlcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYg
dmlzaXRvcikKKy8vdm9pZCBKU1Jlc2l6ZU9ic2VydmVyOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJl
bihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4K
K3ZvaWQgSlNSZXNpemVPYnNlcnZlcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYg
dmlzaXRvcikKIHsKICAgICBSZXNpemVPYnNlcnZlckNhbGxiYWNrKiBjYWxsYmFjayA9IHdyYXBw
ZWQoKS5jYWxsYmFja0NvbmN1cnJlbnRseSgpOwogICAgIGlmIChjYWxsYmFjaykKICAgICAgICAg
Y2FsbGJhY2stPnZpc2l0SlNGdW5jdGlvbih2aXNpdG9yKTsKIH0KIAotfQordGVtcGxhdGUgdm9p
ZCBKU1Jlc2l6ZU9ic2VydmVyOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OkFic3RyYWN0
U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNSZXNpemVPYnNlcnZlcjo6dmlzaXRBZGRp
dGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYpOworCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1Jlc2l6ZU9ic2VydmVyRW50
cnlDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
UmVzaXplT2JzZXJ2ZXJFbnRyeUN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUmVzaXplT2JzZXJ2ZXJFbnRyeUN1c3RvbS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTMwLDEwICszMCwxNSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
LXZvaWQgSlNSZXNpemVPYnNlcnZlckVudHJ5Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6
OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy92b2lkIEpTUmVzaXplT2JzZXJ2ZXJFbnRyeTo6dmlz
aXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRl
PHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTUmVzaXplT2JzZXJ2ZXJFbnRyeTo6dmlzaXRBZGRp
dGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB2aXNpdG9yLmFkZE9wYXF1
ZVJvb3Qocm9vdCh3cmFwcGVkKCkudGFyZ2V0KCkpKTsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJv
b3Qod3JhcHBlZCgpLmNvbnRlbnRSZWN0KCkpOwogfQogCi19Cit0ZW1wbGF0ZSB2b2lkIEpTUmVz
aXplT2JzZXJ2ZXJFbnRyeTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpBYnN0cmFjdFNs
b3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTUmVzaXplT2JzZXJ2ZXJFbnRyeTo6dmlzaXRB
ZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYpOworCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NWR1ZpZXdTcGVjQ3Vz
dG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NWR1Zp
ZXdTcGVjQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNTVkdWaWV3U3BlY0N1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDEw
ICszMCwxNSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgSlNTVkdWaWV3U3BlYzo6
dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vdm9p
ZCBKU1NWR1ZpZXdTcGVjOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9y
JiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNTVkdWaWV3U3Bl
Yzo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBBU1NF
UlQod3JhcHBlZCgpLmNvbnRleHRFbGVtZW50Q29uY3VycmVudGx5KCkuZ2V0KCkpOwogICAgIHZp
c2l0b3IuYWRkT3BhcXVlUm9vdChyb290KHdyYXBwZWQoKS5jb250ZXh0RWxlbWVudENvbmN1cnJl
bnRseSgpLmdldCgpKSk7CiB9CiAKLX0KK3RlbXBsYXRlIHZvaWQgSlNTVkdWaWV3U3BlYzo6dmlz
aXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0
ZSB2b2lkIEpTU1ZHVmlld1NwZWM6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZp
c2l0b3ImKTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNTZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGVDdXN0b20uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU2VydmljZVdvcmtlckdsb2JhbFNj
b3BlQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNTZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGVDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zNCwxMiArMzQsMTcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3Bh
Y2UgSlNDOwogCi12b2lkIEpTU2VydmljZVdvcmtlckdsb2JhbFNjb3BlOjp2aXNpdEFkZGl0aW9u
YWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vdm9pZCBKU1NlcnZpY2VXb3JrZXJH
bG9iYWxTY29wZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3Ip
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1NlcnZpY2VXb3JrZXJHbG9iYWxT
Y29wZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB2
aXNpdG9yLmFkZE9wYXF1ZVJvb3QoJndyYXBwZWQoKS5jbGllbnRzKCkpOwogICAgIHZpc2l0b3Iu
YWRkT3BhcXVlUm9vdCgmd3JhcHBlZCgpLnJlZ2lzdHJhdGlvbigpKTsKIH0KIAordGVtcGxhdGUg
dm9pZCBKU1NlcnZpY2VXb3JrZXJHbG9iYWxTY29wZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4o
QWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU1NlcnZpY2VXb3JrZXJHbG9i
YWxTY29wZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKKwogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTU3R5bGVTaGVldEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNTdHlsZVNoZWV0Q3VzdG9tLmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNTdHlsZVNoZWV0Q3VzdG9tLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzAsMTEgKzMwLDE2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9p
ZCBKU1N0eWxlU2hlZXQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3Im
IHZpc2l0b3IpCisvL3ZvaWQgSlNTdHlsZVNoZWV0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihK
U0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3Zv
aWQgSlNTdHlsZVNoZWV0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9y
KQogewogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChyb290KCZ3cmFwcGVkKCkpKTsKIH0KIAor
dGVtcGxhdGUgdm9pZCBKU1N0eWxlU2hlZXQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEFic3Ry
YWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNTdHlsZVNoZWV0Ojp2aXNpdEFkZGl0
aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYpOworCiBKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3Jl
YXRlZChKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgUmVmPFN0eWxlU2hlZXQ+JiYgc3R5bGVTaGVldCkKIHsKICAgICBpZiAoc3R5bGVTaGVldC0+
aXNDU1NTdHlsZVNoZWV0KCkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1Rl
eHRUcmFja0N1ZUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNUZXh0VHJhY2tDdWVDdXN0b20uY3BwCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1RleHRUcmFja0N1ZUN1c3RvbS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM4LDcgKzM4LDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVz
cGFjZSBKU0M7CiAKLWJvb2wgSlNUZXh0VHJhY2tDdWVPd25lcjo6aXNSZWFjaGFibGVGcm9tT3Bh
cXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBTbG90Vmlz
aXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikKK2Jvb2wgSlNUZXh0VHJhY2tDdWVP
d25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3du
PiBoYW5kbGUsIHZvaWQqLCBBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFy
KiogcmVhc29uKQogewogICAgIEpTVGV4dFRyYWNrQ3VlKiBqc1RleHRUcmFja0N1ZSA9IGpzQ2Fz
dDxKU1RleHRUcmFja0N1ZSo+KGhhbmRsZS5zbG90KCktPmFzQ2VsbCgpKTsKICAgICBUZXh0VHJh
Y2tDdWUmIHRleHRUcmFja0N1ZSA9IGpzVGV4dFRyYWNrQ3VlLT53cmFwcGVkKCk7CkBAIC04Miwx
MiArODIsMTcgQEAgSlNWYWx1ZSB0b0pTKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYgogICAg
IHJldHVybiB3cmFwKGxleGljYWxHbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdCwgY3VlKTsKIH0K
IAotdm9pZCBKU1RleHRUcmFja0N1ZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0
b3ImIHZpc2l0b3IpCisvL3ZvaWQgSlNUZXh0VHJhY2tDdWU6OnZpc2l0QWRkaXRpb25hbENoaWxk
cmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3Zv
aWQgSlNUZXh0VHJhY2tDdWU6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0
b3IpCiB7CiAgICAgaWYgKFRleHRUcmFjayogdGV4dFRyYWNrID0gd3JhcHBlZCgpLnRyYWNrKCkp
CiAgICAgICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChyb290KHRleHRUcmFjaykpOwogfQogCit0
ZW1wbGF0ZSB2b2lkIEpTVGV4dFRyYWNrQ3VlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihBYnN0
cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTVGV4dFRyYWNrQ3VlOjp2aXNpdEFk
ZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYpOworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CiAKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNUZXh0VHJhY2tD
dXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVGV4
dFRyYWNrQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNUZXh0VHJhY2tDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiwxMSAr
MzYsMTYgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKLXZv
aWQgSlNUZXh0VHJhY2s6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNp
dG9yKQorLy92b2lkIEpTVGV4dFRyYWNrOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90Vmlz
aXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTVGV4dFRy
YWNrOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHZp
c2l0b3IuYWRkT3BhcXVlUm9vdChyb290KCZ3cmFwcGVkKCkpKTsKIH0KIAordGVtcGxhdGUgdm9p
ZCBKU1RleHRUcmFjazo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oQWJzdHJhY3RTbG90VmlzaXRv
ciYpOwordGVtcGxhdGUgdm9pZCBKU1RleHRUcmFjazo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4o
U2xvdFZpc2l0b3ImKTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVGV4dFRyYWNrTGlzdEN1c3RvbS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNUZXh0VHJhY2tMaXN0Q3Vz
dG9tLmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNUZXh0VHJhY2tMaXN0Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsMTEgKzM2LDE2
IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCi12b2lkIEpT
VGV4dFRyYWNrTGlzdDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYg
dmlzaXRvcikKKy8vdm9pZCBKU1RleHRUcmFja0xpc3Q6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVu
KEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgor
dm9pZCBKU1RleHRUcmFja0xpc3Q6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZp
c2l0b3IpCiB7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHJvb3Qod3JhcHBlZCgpLmVsZW1l
bnQoKSkpOwogfQogICAgIAordGVtcGxhdGUgdm9pZCBKU1RleHRUcmFja0xpc3Q6OnZpc2l0QWRk
aXRpb25hbENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNU
ZXh0VHJhY2tMaXN0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYpOworCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNUcmVlV2Fsa2VyQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU1RyZWVXYWxrZXJDdXN0b20uY3BwCShyZXZpc2lvbiAyNzE0NDMp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1RyZWVXYWxrZXJDdXN0b20uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yNSwxMCArMjUsMTUgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci12b2lkIEpTVHJlZVdhbGtlcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90Vmlz
aXRvciYgdmlzaXRvcikKKy8vdm9pZCBKU1RyZWVXYWxrZXI6OnZpc2l0QWRkaXRpb25hbENoaWxk
cmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
Pgordm9pZCBKU1RyZWVXYWxrZXI6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZp
c2l0b3IpCiB7CiAgICAgaWYgKE5vZGVGaWx0ZXIqIGZpbHRlciA9IHdyYXBwZWQoKS5maWx0ZXIo
KSkKICAgICAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KGZpbHRlcik7CiB9CiAKLX0KK3RlbXBs
YXRlIHZvaWQgSlNUcmVlV2Fsa2VyOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OkFic3Ry
YWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNUcmVlV2Fsa2VyOjp2aXNpdEFkZGl0
aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJik7CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVW5kb0l0ZW1DdXN0b20uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVW5kb0l0ZW1DdXN0
b20uY3BwCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U1VuZG9JdGVtQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksMTMgKzI5LDE4IEBACiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBKU1VuZG9JdGVtOjp2aXNpdEFkZGl0aW9uYWxD
aGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy92b2lkIEpTVW5kb0l0ZW06OnZp
c2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0
ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1VuZG9JdGVtOjp2aXNpdEFkZGl0aW9uYWxDaGls
ZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHdyYXBwZWQoKS51bmRvSGFuZGxlcigpLnZp
c2l0SlNGdW5jdGlvbih2aXNpdG9yKTsKICAgICB3cmFwcGVkKCkucmVkb0hhbmRsZXIoKS52aXNp
dEpTRnVuY3Rpb24odmlzaXRvcik7CiB9CiAKLWJvb2wgSlNVbmRvSXRlbU93bmVyOjppc1JlYWNo
YWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9p
ZCosIEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCit0ZW1w
bGF0ZSB2b2lkIEpTVW5kb0l0ZW06OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6QWJzdHJh
Y3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU1VuZG9JdGVtOjp2aXNpdEFkZGl0aW9u
YWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJik7CisKK2Jvb2wgSlNVbmRvSXRlbU93bmVyOjpp
c1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRs
ZSwgdm9pZCosIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioq
IHJlYXNvbikKIHsKICAgICBpZiAoVU5MSUtFTFkocmVhc29uKSkKICAgICAgICAgKnJlYXNvbiA9
ICJEb2N1bWVudCBpcyBhbiBvcGFxdWUgcm9vdC4iOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNWYWx1ZUluV3JhcHBlZE9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTVmFsdWVJbldyYXBwZWRPYmplY3QuaAkocmV2aXNpb24gMjcx
NDQzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNWYWx1ZUluV3JhcHBlZE9iamVj
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw4IEBAIHB1YmxpYzoKICAgICBvcGVyYXRv
ciBKU0M6OkpTVmFsdWUoKSBjb25zdDsKICAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29u
c3Q7CiAgICAgSlNWYWx1ZUluV3JhcHBlZE9iamVjdCYgb3BlcmF0b3I9KGNvbnN0IEpTVmFsdWVJ
bldyYXBwZWRPYmplY3QmIG90aGVyKTsKLSAgICB2b2lkIHZpc2l0KEpTQzo6U2xvdFZpc2l0b3Im
KSBjb25zdDsKKy8vICAgIHZvaWQgdmlzaXQoSlNDOjpTbG90VmlzaXRvciYpIGNvbnN0OworICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgdmlzaXQoVmlzaXRvciYpIGNvbnN0Owog
ICAgIHZvaWQgY2xlYXIoKTsKIAogcHJpdmF0ZToKQEAgLTk4LDcgKzk5LDggQEAgaW5saW5lIEpT
VmFsdWVJbldyYXBwZWRPYmplY3QmIEpTVmFsdWVJbgogICAgIHJldHVybiAqdGhpczsKIH0KIAot
aW5saW5lIHZvaWQgSlNWYWx1ZUluV3JhcHBlZE9iamVjdDo6dmlzaXQoSlNDOjpTbG90VmlzaXRv
ciYgdmlzaXRvcikgY29uc3QKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+CitpbmxpbmUgdm9p
ZCBKU1ZhbHVlSW5XcmFwcGVkT2JqZWN0Ojp2aXNpdChWaXNpdG9yJiB2aXNpdG9yKSBjb25zdAog
ewogICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKG1fdmFsdWUsIFtdIChKU0M6OkpTVmFsdWUpIHsK
ICAgICAgICAgLy8gTm90aGluZyB0byB2aXNpdC4KQEAgLTEwNyw2ICsxMDksOSBAQCBpbmxpbmUg
dm9pZCBKU1ZhbHVlSW5XcmFwcGVkT2JqZWN0Ojp2aXNpCiAgICAgfSk7CiB9CiAKK3RlbXBsYXRl
IHZvaWQgSlNWYWx1ZUluV3JhcHBlZE9iamVjdDo6dmlzaXQoSlNDOjpBYnN0cmFjdFNsb3RWaXNp
dG9yJikgY29uc3Q7Cit0ZW1wbGF0ZSB2b2lkIEpTVmFsdWVJbldyYXBwZWRPYmplY3Q6OnZpc2l0
KEpTQzo6U2xvdFZpc2l0b3ImKSBjb25zdDsKKwogaW5saW5lIHZvaWQgSlNWYWx1ZUluV3JhcHBl
ZE9iamVjdDo6Y2xlYXIoKQogewogICAgIFdURjo6c3dpdGNoT24obV92YWx1ZSwgW10gKFdlYWsm
IHZhbHVlKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1ZpZGVvVHJhY2tD
dXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVmlk
ZW9UcmFja0N1c3RvbS5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTVmlkZW9UcmFja0N1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDEx
ICszNSwxNiBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAot
dm9pZCBKU1ZpZGVvVHJhY2s6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQorLy92b2lkIEpTVmlkZW9UcmFjazo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xv
dFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1Zp
ZGVvVHJhY2s6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAg
ICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHJvb3QoJndyYXBwZWQoKSkpOwogfQogCit0ZW1wbGF0
ZSB2b2lkIEpTVmlkZW9UcmFjazo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpBYnN0cmFj
dFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTVmlkZW9UcmFjazo6dmlzaXRBZGRpdGlv
bmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYpOworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CiAKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNWaWRlb1RyYWNr
TGlzdEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNWaWRlb1RyYWNrTGlzdEN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTVmlkZW9UcmFja0xpc3RDdXN0b20uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zNSwxMSArMzUsMTYgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVz
cGFjZSBKU0M7CiAKLXZvaWQgSlNWaWRlb1RyYWNrTGlzdDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRy
ZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3ZvaWQgSlNWaWRlb1RyYWNrTGlzdDo6dmlzaXRB
ZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBWaXNpdG9yPgordm9pZCBKU1ZpZGVvVHJhY2tMaXN0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJl
bihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChyb290KHdy
YXBwZWQoKS5lbGVtZW50KCkpKTsKIH0KIAordGVtcGxhdGUgdm9pZCBKU1ZpZGVvVHJhY2tMaXN0
Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0
ZSB2b2lkIEpTVmlkZW9UcmFja0xpc3Q6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNp
dG9yJik7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYkdMMlJlbmRlcmluZ0NvbnRleHRDdXN0b20uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViR0wyUmVuZGVyaW5n
Q29udGV4dEN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTV2ViR0wyUmVuZGVyaW5nQ29udGV4dEN1c3RvbS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTMzLDEyICszMywxNyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogdXNpbmcgbmFtZXNw
YWNlIEpTQzsKIAotdm9pZCBKU1dlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OnZpc2l0QWRkaXRpb25h
bENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy92b2lkIEpTV2ViR0wyUmVuZGVyaW5n
Q29udGV4dDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0
ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1dlYkdMMlJlbmRlcmluZ0NvbnRleHQ6
OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgdmlzaXRv
ci5hZGRPcGFxdWVSb290KCZ3cmFwcGVkKCkpOwogICAgIHdyYXBwZWQoKS5hZGRNZW1iZXJzVG9P
cGFxdWVSb290cyh2aXNpdG9yKTsKIH0KIAordGVtcGxhdGUgdm9pZCBKU1dlYkdMMlJlbmRlcmlu
Z0NvbnRleHQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRv
ciYpOwordGVtcGxhdGUgdm9pZCBKU1dlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OnZpc2l0QWRkaXRp
b25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImKTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQkdMKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViR0xSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNw
cAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJH
TFJlbmRlcmluZ0NvbnRleHRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMywxMiArMzMs
MTcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKLXZvaWQg
SlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNp
dG9yJiB2aXNpdG9yKQorLy92b2lkIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2aXNpdEFkZGl0
aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZp
c2l0b3I+Cit2b2lkIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2aXNpdEFkZGl0aW9uYWxDaGls
ZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdCgmd3Jh
cHBlZCgpKTsKICAgICB3cmFwcGVkKCkuYWRkTWVtYmVyc1RvT3BhcXVlUm9vdHModmlzaXRvcik7
CiB9CiAKK3RlbXBsYXRlIHZvaWQgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZpc2l0QWRkaXRp
b25hbENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJik7
CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShXRUJHTCkKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyR2xvYmFsU2NvcGVCYXNlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckdsb2Jh
bFNjb3BlQmFzZS5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTV29ya2VyR2xvYmFsU2NvcGVCYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODcs
NyArODcsOCBAQCB2b2lkIEpTV29ya2VyR2xvYmFsU2NvcGVCYXNlOjpmaW5pc2hDcmVhCiAgICAg
QVNTRVJUKGluaGVyaXRzKHZtLCBpbmZvKCkpKTsKIH0KIAotdm9pZCBKU1dvcmtlckdsb2JhbFNj
b3BlQmFzZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9y
KQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNXb3JrZXJHbG9iYWxTY29wZUJh
c2U6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsK
ICAgICBKU1dvcmtlckdsb2JhbFNjb3BlQmFzZSogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1dvcmtl
ckdsb2JhbFNjb3BlQmFzZSo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMo
dGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTk1LDYgKzk2LDggQEAgdm9pZCBKU1dvcmtlckdsb2Jh
bFNjb3BlQmFzZTo6dmlzaXRDaGlsZAogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1f
cHJveHkpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNXb3JrZXJHbG9iYWxTY29wZUJh
c2UpOworCiB2b2lkIEpTV29ya2VyR2xvYmFsU2NvcGVCYXNlOjpkZXN0cm95KEpTQ2VsbCogY2Vs
bCkKIHsKICAgICBzdGF0aWNfY2FzdDxKU1dvcmtlckdsb2JhbFNjb3BlQmFzZSo+KGNlbGwpLT5K
U1dvcmtlckdsb2JhbFNjb3BlQmFzZTo6fkpTV29ya2VyR2xvYmFsU2NvcGVCYXNlKCk7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckdsb2JhbFNjb3BlQmFzZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyR2xvYmFsU2Nv
cGVCYXNlLmgJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTV29ya2VyR2xvYmFsU2NvcGVCYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTc5LDcgKzc5LDcg
QEAgcHJvdGVjdGVkOgogICAgIEpTV29ya2VyR2xvYmFsU2NvcGVCYXNlKEpTQzo6Vk0mLCBKU0M6
OlN0cnVjdHVyZSosIFJlZlB0cjxXb3JrZXJHbG9iYWxTY29wZT4mJik7CiAgICAgdm9pZCBmaW5p
c2hDcmVhdGlvbihKU0M6OlZNJiwgSlNDOjpKU1Byb3h5Kik7CiAKLSAgICBzdGF0aWMgdm9pZCB2
aXNpdENoaWxkcmVuKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpOworICAgIERFQ0xB
UkVfVklTSVRfQ0hJTERSRU47CiAKIHByaXZhdGU6CiAgICAgUmVmUHRyPFdvcmtlckdsb2JhbFNj
b3BlPiBtX3dyYXBwZWQ7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtl
ckdsb2JhbFNjb3BlQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU1dvcmtlckdsb2JhbFNjb3BlQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcxNDQzKQor
KysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrZXJHbG9iYWxTY29wZUN1c3RvbS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDcgKzMzLDkgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKLXZvaWQgSlNXb3JrZXJHbG9iYWxTY29wZTo6dmlzaXRB
ZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3ZvaWQgSlNXb3JrZXJH
bG9iYWxTY29wZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3Ip
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1dvcmtlckdsb2JhbFNjb3BlOjp2
aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGlmIChhdXRv
KiBsb2NhdGlvbiA9IHdyYXBwZWQoKS5vcHRpb25hbExvY2F0aW9uKCkpCiAgICAgICAgIHZpc2l0
b3IuYWRkT3BhcXVlUm9vdChsb2NhdGlvbik7CkBAIC00OCw2ICs1MCw5IEBAIHZvaWQgSlNXb3Jr
ZXJHbG9iYWxTY29wZTo6dmlzaXRBZGRpdGlvbmEKICAgICB3cmFwcGVkKCkudmlzaXRKU0V2ZW50
TGlzdGVuZXJzKHZpc2l0b3IpOwogfQogCit0ZW1wbGF0ZSB2b2lkIEpTV29ya2VyR2xvYmFsU2Nv
cGU6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBs
YXRlIHZvaWQgSlNXb3JrZXJHbG9iYWxTY29wZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xv
dFZpc2l0b3ImKTsKKwogSlNWYWx1ZSBKU1dvcmtlckdsb2JhbFNjb3BlOjpxdWV1ZU1pY3JvdGFz
ayhKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lJiBjYWxsRnJh
bWUpCiB7CiAgICAgVk0mIHZtID0gbGV4aWNhbEdsb2JhbE9iamVjdC52bSgpOwpJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrZXJOYXZpZ2F0b3JDdXN0b20uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyTmF2aWdhdG9yQ3Vz
dG9tLmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNXb3JrZXJOYXZpZ2F0b3JDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw5ICsyOCwx
NCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgSlNXb3JrZXJOYXZpZ2F0b3I6OnZp
c2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3ZvaWQg
SlNXb3JrZXJOYXZpZ2F0b3I6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0
b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1dvcmtlck5h
dmlnYXRvcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAg
ICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qoc3RhdGljX2Nhc3Q8TmF2aWdhdG9yQmFzZSo+KCZ3cmFw
cGVkKCkpKTsKIH0KIAotfQordGVtcGxhdGUgdm9pZCBKU1dvcmtlck5hdmlnYXRvcjo6dmlzaXRB
ZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2
b2lkIEpTV29ya2VyTmF2aWdhdG9yOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RW
aXNpdG9yJik7CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTV29ya2xldEdsb2JhbFNjb3BlQmFzZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrbGV0R2xvYmFsU2NvcGVCYXNlLmNwcAko
cmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrbGV0
R2xvYmFsU2NvcGVCYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzcsNyArNzcsOCBAQCB2b2lk
IEpTV29ya2xldEdsb2JhbFNjb3BlQmFzZTo6ZmluaXNoQ3JlCiAgICAgQVNTRVJUKGluaGVyaXRz
KHZtLCBpbmZvKCkpKTsKIH0KIAotdm9pZCBKU1dvcmtsZXRHbG9iYWxTY29wZUJhc2U6OnZpc2l0
Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5
cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTV29ya2xldEdsb2JhbFNjb3BlQmFzZTo6dmlzaXRDaGls
ZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGF1dG8qIHRo
aXNPYmplY3QgPSBqc0Nhc3Q8SlNXb3JrbGV0R2xvYmFsU2NvcGVCYXNlKj4oY2VsbCk7CiAgICAg
QVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtODUsNiAr
ODYsOCBAQCB2b2lkIEpTV29ya2xldEdsb2JhbFNjb3BlQmFzZTo6dmlzaXRDaGlsCiAgICAgdmlz
aXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9wcm94eSk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElM
RFJFTihKU1dvcmtsZXRHbG9iYWxTY29wZUJhc2UpOworCiB2b2lkIEpTV29ya2xldEdsb2JhbFNj
b3BlQmFzZTo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCiB7CiAgICAgc3RhdGljX2Nhc3Q8SlNXb3Jr
bGV0R2xvYmFsU2NvcGVCYXNlKj4oY2VsbCktPkpTV29ya2xldEdsb2JhbFNjb3BlQmFzZTo6fkpT
V29ya2xldEdsb2JhbFNjb3BlQmFzZSgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNXb3JrbGV0R2xvYmFsU2NvcGVCYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNXb3JrbGV0R2xvYmFsU2NvcGVCYXNlLmgJKHJldmlzaW9uIDI3MTQ0
MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2xldEdsb2JhbFNjb3BlQmFz
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC02Nyw3ICs2Nyw3IEBAIHByb3RlY3RlZDoKICAgICBKU1dv
cmtsZXRHbG9iYWxTY29wZUJhc2UoSlNDOjpWTSYsIEpTQzo6U3RydWN0dXJlKiwgUmVmUHRyPFdv
cmtsZXRHbG9iYWxTY29wZT4mJik7CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJiwg
SlNDOjpKU1Byb3h5Kik7CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQzo6SlND
ZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAK
IHByaXZhdGU6CiAgICAgUmVmUHRyPFdvcmtsZXRHbG9iYWxTY29wZT4gbV93cmFwcGVkOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNYTUxIdHRwUmVxdWVzdEN1c3RvbS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNYTUxIdHRwUmVxdWVz
dEN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTWE1MSHR0cFJlcXVlc3RDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0
MSw5IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCi12b2lk
IEpTWE1MSHR0cFJlcXVlc3Q6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQorLy92b2lkIEpTWE1MSHR0cFJlcXVlc3Q6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVu
KFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQg
SlNYTUxIdHRwUmVxdWVzdDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRv
cikKIHsKICAgICBpZiAoYXV0byogdXBsb2FkID0gd3JhcHBlZCgpLm9wdGlvbmFsVXBsb2FkKCkp
CiAgICAgICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdCh1cGxvYWQpOwpAQCAtNTAsNiArNTIsOSBA
QCB2b2lkIEpTWE1MSHR0cFJlcXVlc3Q6OnZpc2l0QWRkaXRpb25hbENoCiAgICAgICAgIHZpc2l0
b3IuYWRkT3BhcXVlUm9vdChyZXNwb25zZURvY3VtZW50KTsKIH0KIAordGVtcGxhdGUgdm9pZCBK
U1hNTEh0dHBSZXF1ZXN0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihBYnN0cmFjdFNsb3RWaXNp
dG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTWE1MSHR0cFJlcXVlc3Q6OnZpc2l0QWRkaXRpb25hbENo
aWxkcmVuKFNsb3RWaXNpdG9yJik7CisKIEpTVmFsdWUgSlNYTUxIdHRwUmVxdWVzdDo6cmVzcG9u
c2UoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QpIGNvbnN0CiB7CiAgICAgYXV0
byBjYWNoZVJlc3VsdCA9IFsmXSAoSlNWYWx1ZSB2YWx1ZSkgLT4gSlNWYWx1ZSB7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1hQYXRoUmVzdWx0Q3VzdG9tLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1hQYXRoUmVzdWx0Q3VzdG9tLmNw
cAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNYUGF0
aFJlc3VsdEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDkgQEAKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIEpTWFBhdGhSZXN1bHQ6OnZpc2l0QWRkaXRpb25hbENo
aWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3ZvaWQgSlNYUGF0aFJlc3VsdDo6
dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBs
YXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTWFBhdGhSZXN1bHQ6OnZpc2l0QWRkaXRpb25h
bENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0byYgdmFsdWUgPSB3cmFwcGVk
KCkudmFsdWUoKTsKICAgICBpZiAodmFsdWUuaXNOb2RlU2V0KCkpIHsKQEAgLTQxLDQgKzQzLDcg
QEAgdm9pZCBKU1hQYXRoUmVzdWx0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZAogICAgIH0KIH0KIAor
dGVtcGxhdGUgdm9pZCBKU1hQYXRoUmVzdWx0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6
OkFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNYUGF0aFJlc3VsdDo6dmlz
aXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYpOworCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlVHlwZWRB
cnJheUNvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL1dlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlci5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTU2LDcgKzU2LDcgQEAgYm9vbCBXZWJDb3JlVHlwZWRBcnJh
eUNvbnRyb2xsZXI6OmlzQXRvbQogICAgIHJldHVybiBtX2FsbG93QXRvbWljc1dhaXQ7CiB9CiAK
LWJvb2wgV2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyOjpKU0FycmF5QnVmZmVyT3duZXI6Omlz
UmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxl
LCB2b2lkKiwgSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikK
K2Jvb2wgV2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyOjpKU0FycmF5QnVmZmVyT3duZXI6Omlz
UmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxl
LCB2b2lkKiwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiog
cmVhc29uKQogewogICAgIGlmIChVTkxJS0VMWShyZWFzb24pKQogICAgICAgICAqcmVhc29uID0g
IkFycmF5QnVmZmVyIGlzIG9wYXF1ZSByb290IjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL1dlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlci5oCShyZXZp
c2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlVHlwZWRB
cnJheUNvbnRyb2xsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDgsNyArNDgsNyBAQCBwdWJsaWM6
CiBwcml2YXRlOgogICAgIGNsYXNzIEpTQXJyYXlCdWZmZXJPd25lciA6IHB1YmxpYyBKU0M6Oldl
YWtIYW5kbGVPd25lciB7CiAgICAgcHVibGljOgotICAgICAgICBib29sIGlzUmVhY2hhYmxlRnJv
bU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIEpT
Qzo6U2xvdFZpc2l0b3ImLCBjb25zdCBjaGFyKiopIG92ZXJyaWRlOworICAgICAgICBib29sIGlz
UmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQq
IGNvbnRleHQsIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYsIGNvbnN0IGNoYXIqKikgb3ZlcnJp
ZGU7CiAgICAgICAgIHZvaWQgZmluYWxpemUoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9p
ZCogY29udGV4dCkgb3ZlcnJpZGU7CiAgICAgfTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0JKHJldmlzaW9uIDI3MTQ0
MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBt
CSh3b3JraW5nIGNvcHkpCkBAIC0zMDc4LDggKzMwNzgsMTAgQEAgc3ViIEdlbmVyYXRlSGVhZGVy
CiAKICAgICAjIHZpc2l0IGZ1bmN0aW9uCiAgICAgaWYgKCRuZWVkc1Zpc2l0Q2hpbGRyZW4pIHsK
LSAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxk
cmVuKEpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKTtcbiIpOwotICAgICAgICBwdXNoKEBoZWFk
ZXJDb250ZW50LCAiICAgIHZvaWQgdmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90Vmlz
aXRvciYpO1xuIikgaWYgJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57SlNDdXN0b21N
YXJrRnVuY3Rpb259OworICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIERFQ0xBUkVf
VklTSVRfQ0hJTERSRU47XG4iKTsKKyMgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAg
dm9pZCB2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJik7XG4iKSBpZiAk
aW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntKU0N1c3RvbU1hcmtGdW5jdGlvbn07ICMg
bWxhbQorIyAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICB2b2lkIHZpc2l0QWRkaXRp
b25hbENoaWxkcmVuKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpO1xuIikgaWYgJGludGVyZmFj
ZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57SlNDdXN0b21NYXJrRnVuY3Rpb259OworICAgICAgICBw
dXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQg
dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYpO1xuIikgaWYgJGludGVyZmFjZS0+ZXh0
ZW5kZWRBdHRyaWJ1dGVzLT57SlNDdXN0b21NYXJrRnVuY3Rpb259OwogICAgICAgICBwdXNoKEBo
ZWFkZXJDb250ZW50LCAiXG4iKTsKIAogICAgICAgICBpZiAoJGludGVyZmFjZS0+ZXh0ZW5kZWRB
dHRyaWJ1dGVzLT57SlNDdXN0b21NYXJrRnVuY3Rpb259KSB7CkBAIC0zMDk0LDcgKzMwOTYsOSBA
QCBzdWIgR2VuZXJhdGVIZWFkZXIKICAgICAgICAgICAgICMgdGhhdCB0aGUgR0MgY2FsbHMgdG8g
YXNrIGFuIG9iamVjdCBpcyBpdCB3b3VsZCBsaWtlIHRvIG1hcmsgYW55dGhpbmcgZWxzZSBhZnRl
ciB0aGUKICAgICAgICAgICAgICMgcHJvZ3JhbSByZXN1bWVkIHNpbmNlIHRoZSBsYXN0IGNhbGwg
dG8gdmlzaXRDaGlsZHJlbiBvciB2aXNpdE91dHB1dENvbnN0cmFpbnRzLiBTaW5jZQogICAgICAg
ICAgICAgIyB0aGlzIGp1c3QgY2FsbHMgdmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4sIHlvdSB1c3Vh
bGx5IGRvbid0IGhhdmUgdG8gd29ycnkgYWJvdXQgdGhpcy4KLSAgICAgICAgICAgIHB1c2goQGhl
YWRlckNvbnRlbnQsICIgICAgc3RhdGljIHZvaWQgdmlzaXRPdXRwdXRDb25zdHJhaW50cyhKU0Nl
bGwqLCBKU0M6OlNsb3RWaXNpdG9yJik7XG4iKTsKKyAgICAgICAgICAgICMgbWxhbSBwdXNoKEBo
ZWFkZXJDb250ZW50LCAiICAgIHN0YXRpYyB2b2lkIHZpc2l0T3V0cHV0Q29uc3RyYWludHMoSlND
ZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpO1xuIik7CisgICAgICAgICAgICBwdXNoKEBoZWFkZXJD
b250ZW50LCAiICAgIHN0YXRpYyB2b2lkIHZpc2l0T3V0cHV0Q29uc3RyYWludHMoSlNDZWxsKiwg
SlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJik7XG4iKTsKKyAgICAgICAgICAgICMgbWxhbSBwdXNo
KEBoZWFkZXJDb250ZW50LCAiICAgIERFQ0xBUkVfVklTSVRfT1VUUFVUX0NPTlNUUkFJTlRTO1xu
Iik7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTMyMTUsNyArMzIxOSw3IEBAIHN1YiBHZW5lcmF0
ZUhlYWRlcgogICAgICAgICB9CiAgICAgICAgICRoZWFkZXJJbmNsdWRlc3siPHd0Zi9OZXZlckRl
c3Ryb3llZC5oPiJ9ID0gMTsKICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgInB1YmxpYzpc
biIpOwotICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIGJvb2wgaXNSZWFjaGFibGVG
cm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCwg
SlNDOjpTbG90VmlzaXRvciYsIGNvbnN0IGNoYXIqKikgJHtvdmVycmlkZURlY2x9O1xuIik7Cisg
ICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgYm9vbCBpc1JlYWNoYWJsZUZyb21PcGFx
dWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0LCBKU0M6OkFi
c3RyYWN0U2xvdFZpc2l0b3ImLCBjb25zdCBjaGFyKiopICR7b3ZlcnJpZGVEZWNsfTtcbiIpOwog
ICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHZvaWQgZmluYWxpemUoSlNDOjpIYW5k
bGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCkgJHtvdmVycmlkZURlY2x9O1xuIik7CiAg
ICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJ9O1xuIik7CiAgICAgICAgIHB1c2goQGhlYWRl
ckNvbnRlbnQsICJcbiIpOwpAQCAtNDkyOCw2ICs0OTMyLDcgQEAgc3ViIEdlbmVyYXRlSW1wbGVt
ZW50YXRpb24KICAgICBBZGRUb0ltcGxJbmNsdWRlcygiRE9NSXNvU3Vic3BhY2VzLmgiKTsKICAg
ICBBZGRUb0ltcGxJbmNsdWRlcygiV2ViQ29yZUpTQ2xpZW50RGF0YS5oIik7CiAgICAgQWRkVG9J
bXBsSW5jbHVkZXMoIjxKYXZhU2NyaXB0Q29yZS9KU0Rlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxs
VHlwZS5oPiIpOworICAgIEFkZFRvSW1wbEluY2x1ZGVzKCI8SmF2YVNjcmlwdENvcmUvU2xvdFZp
c2l0b3JNYWNyb3MuaD4iKTsKICAgICBBZGRUb0ltcGxJbmNsdWRlcygiPEphdmFTY3JpcHRDb3Jl
L1N1YnNwYWNlSW5saW5lcy5oPiIpOwogICAgIHB1c2goQGltcGxDb250ZW50LCAiSlNDOjpJc29T
dWJzcGFjZSogJHtjbGFzc05hbWV9OjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pXG4iKTsK
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgIntcbiIpOwpAQCAtNDk1NSw3ICs0OTYwLDggQEAgc3Vi
IEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICBwdXNoKEBpbXBsQ29udGVudCwgIn1cblxuIik7
CiAKICAgICBpZiAoJG5lZWRzVmlzaXRDaGlsZHJlbikgewotICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudCwgInZvaWQgJHtjbGFzc05hbWV9Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xv
dFZpc2l0b3ImIHZpc2l0b3IpXG4iKTsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ0ZW1w
bGF0ZTx0eXBlbmFtZSBWaXNpdG9yPlxuIik7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
dm9pZCAke2NsYXNzTmFtZX06OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRv
ciYgdmlzaXRvcilcbiIpOwogICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIntcbiIpOwogICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PCR7
Y2xhc3NOYW1lfSo+KGNlbGwpO1xuIik7CiAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAg
IEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTtcbiIpOwpAQCAt
NDk4MCw4ICs0OTg2LDEwIEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgICAgICAg
ICB9CiAgICAgICAgIH0KICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ9XG5cbiIpOworICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgIkRFRklORV9WSVNJVF9DSElMRFJFTigke2NsYXNzTmFt
ZX0pO1xuXG4iKTsKKwogICAgICAgICBpZiAoJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVz
LT57SlNDdXN0b21NYXJrRnVuY3Rpb259KSB7Ci0gICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgInZvaWQgJHtjbGFzc05hbWV9Ojp2aXNpdE91dHB1dENvbnN0cmFpbnRzKEpTQ2VsbCogY2Vs
bCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpXG4iKTsKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250
ZW50LCAidm9pZCAke2NsYXNzTmFtZX06OnZpc2l0T3V0cHV0Q29uc3RyYWludHMoSlNDZWxsKiBj
ZWxsLCBBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKVxuIik7CiAgICAgICAgICAgICBwdXNo
KEBpbXBsQ29udGVudCwgIntcbiIpOwogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIg
ICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDwke2NsYXNzTmFtZX0qPihjZWxsKTtcbiIpOwog
ICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhF
UklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpO1xuIik7CkBAIC01MDIyLDcgKzUwMzAsNyBAQCBzdWIg
R2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgIH0KIAogICAgIGlmIChTaG91bGRHZW5lcmF0ZVdy
YXBwZXJPd25lckNvZGUoJGhhc1BhcmVudCwgJGludGVyZmFjZSkgJiYgIUdldEN1c3RvbUlzUmVh
Y2hhYmxlKCRpbnRlcmZhY2UpKSB7Ci0gICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiYm9vbCBK
UyR7aW50ZXJmYWNlTmFtZX1Pd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpI
YW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBTbG90VmlzaXRvciYgdmlzaXRvciwg
Y29uc3QgY2hhcioqIHJlYXNvbilcbiIpOworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgImJv
b2wgSlMke2ludGVyZmFjZU5hbWV9T3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpT
Qzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgQWJzdHJhY3RTbG90VmlzaXRv
ciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbilcbiIpOwogICAgICAgICBwdXNoKEBpbXBs
Q29udGVudCwgIntcbiIpOwogICAgICAgICAjIEFsbCBBY3RpdmVET01PYmplY3RzIGltcGxlbWVu
dCBoYXNQZW5kaW5nQWN0aXZpdHkoKSwgYnV0IG5vdCBhbGwgb2YgdGhlbQogICAgICAgICAjIGlu
Y3JlbWVudCB0aGVpciBDKysgcmVmZXJlbmNlIGNvdW50cyB3aGVuIGhhc1BlbmRpbmdBY3Rpdml0
eSgpIGJlY29tZXMKQEAgLTY0MjEsNyArNjQyOSw4IEBAIHN1YiBHZW5lcmF0ZUNhbGxiYWNrSGVh
ZGVyQ29udGVudAogICAgICAgICBwdXNoKEAkY29udGVudFJlZiwgIiAgICBib29sIGhhc0NhbGxi
YWNrKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9kYXRhICYmIG1fZGF0YS0+Y2FsbGJhY2soKTsg
fVxuXG4iKTsKICAgICB9CiAKLSAgICBwdXNoKEAkY29udGVudFJlZiwgIiAgICB2b2lkIHZpc2l0
SlNGdW5jdGlvbihKU0M6OlNsb3RWaXNpdG9yJikgb3ZlcnJpZGU7XG5cbiIpIGlmICRpbnRlcmZh
Y2VPckNhbGxiYWNrLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntJc1dlYWtDYWxsYmFja307CisjICAg
IHB1c2goQCRjb250ZW50UmVmLCAiICAgIHZvaWQgdmlzaXRKU0Z1bmN0aW9uKEpTQzo6U2xvdFZp
c2l0b3ImKSBvdmVycmlkZTtcblxuIikgaWYgJGludGVyZmFjZU9yQ2FsbGJhY2stPmV4dGVuZGVk
QXR0cmlidXRlcy0+e0lzV2Vha0NhbGxiYWNrfTsKKyAgICBwdXNoKEAkY29udGVudFJlZiwgIiAg
ICB2b2lkIHZpc2l0SlNGdW5jdGlvbihKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKSBvdmVycmlk
ZTtcblxuIikgaWYgJGludGVyZmFjZU9yQ2FsbGJhY2stPmV4dGVuZGVkQXR0cmlidXRlcy0+e0lz
V2Vha0NhbGxiYWNrfTsKIAogICAgIHB1c2goQCRjb250ZW50UmVmLCAiICAgICR7Y2FsbGJhY2tE
YXRhVHlwZX0qIG1fZGF0YTtcbiIpOwogICAgIHB1c2goQCRjb250ZW50UmVmLCAifTtcblxuIik7
CkBAIC02NjEyLDcgKzY2MjEsOCBAQCBzdWIgR2VuZXJhdGVDYWxsYmFja0ltcGxlbWVudGF0aW9u
Q29udGVuCiAgICAgfQogCiAgICAgaWYgKCRpbnRlcmZhY2VPckNhbGxiYWNrLT5leHRlbmRlZEF0
dHJpYnV0ZXMtPntJc1dlYWtDYWxsYmFja30pIHsKLSAgICAgICAgcHVzaChAJGNvbnRlbnRSZWYs
ICJ2b2lkICR7Y2xhc3NOYW1lfTo6dmlzaXRKU0Z1bmN0aW9uKEpTQzo6U2xvdFZpc2l0b3ImIHZp
c2l0b3IpXG4iKTsKKyMgICAgICAgIHB1c2goQCRjb250ZW50UmVmLCAidm9pZCAke2NsYXNzTmFt
ZX06OnZpc2l0SlNGdW5jdGlvbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKVxuIik7CisgICAg
ICAgIHB1c2goQCRjb250ZW50UmVmLCAidm9pZCAke2NsYXNzTmFtZX06OnZpc2l0SlNGdW5jdGlv
bihKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpXG4iKTsKICAgICAgICAgcHVzaChA
JGNvbnRlbnRSZWYsICJ7XG4iKTsKICAgICAgICAgcHVzaChAJGNvbnRlbnRSZWYsICIgICAgbV9k
YXRhLT52aXNpdEpTRnVuY3Rpb24odmlzaXRvcik7XG4iKTsKICAgICAgICAgcHVzaChAJGNvbnRl
bnRSZWYsICJ9XG5cbiIpOwpAQCAtNjcyMyw2ICs2NzMzLDcgQEAgc3ViIEdlbmVyYXRlSXRlcmFi
bGVEZWZpbml0aW9uCiAgICAgbXkgJHZpc2libGVJbnRlcmZhY2VOYW1lID0gJGNvZGVHZW5lcmF0
b3ItPkdldFZpc2libGVJbnRlcmZhY2VOYW1lKCRpbnRlcmZhY2UpOwogCiAgICAgQWRkVG9JbXBs
SW5jbHVkZXMoIkpTRE9NSXRlcmF0b3IuaCIpOworICAgIEFkZFRvSW1wbEluY2x1ZGVzKCI8SmF2
YVNjcmlwdENvcmUvU2xvdFZpc2l0b3JNYWNyb3MuaD4iKTsKIAogICAgIHJldHVybiB1bmxlc3Mg
SXNLZXlWYWx1ZUl0ZXJhYmxlSW50ZXJmYWNlKCRpbnRlcmZhY2UpOwogCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9kb20vQWN0aXZlRE9NQ2FsbGJhY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9kb20vQWN0aXZlRE9NQ2FsbGJhY2suaAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNl
L1dlYkNvcmUvZG9tL0FjdGl2ZURPTUNhbGxiYWNrLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYg
KzMzLDcgQEAKICNpbmNsdWRlICJDb250ZXh0RGVzdHJ1Y3Rpb25PYnNlcnZlci5oIgogCiBuYW1l
c3BhY2UgSlNDIHsKK2NsYXNzIEFic3RyYWN0U2xvdFZpc2l0b3I7CiBjbGFzcyBTbG90VmlzaXRv
cjsKIH0KIApAQCAtNTUsNyArNTYsOCBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgYm9v
bCBhY3RpdmVET01PYmplY3RzQXJlU3VzcGVuZGVkKCkgY29uc3Q7CiAgICAgV0VCQ09SRV9FWFBP
UlQgYm9vbCBhY3RpdmVET01PYmplY3RBcmVTdG9wcGVkKCkgY29uc3Q7CiAgICAgCi0gICAgdmly
dHVhbCB2b2lkIHZpc2l0SlNGdW5jdGlvbihKU0M6OlNsb3RWaXNpdG9yJikgeyB9CisvLyAgICB2
aXJ0dWFsIHZvaWQgdmlzaXRKU0Z1bmN0aW9uKEpTQzo6U2xvdFZpc2l0b3ImKSB7IH0KKyAgICB2
aXJ0dWFsIHZvaWQgdmlzaXRKU0Z1bmN0aW9uKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpIHsg
fQogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9t
L0V2ZW50TGlzdGVuZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRM
aXN0ZW5lci5oCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRM
aXN0ZW5lci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw4ICsyMyw5IEBACiAjaW5jbHVkZSA8d3Rm
L1JlZkNvdW50ZWQuaD4KIAogbmFtZXNwYWNlIEpTQyB7CitjbGFzcyBBYnN0cmFjdFNsb3RWaXNp
dG9yOwogY2xhc3MgSlNPYmplY3Q7Ci1jbGFzcyBTbG90VmlzaXRvcjsKKy8vY2xhc3MgU2xvdFZp
c2l0b3I7CiB9CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTUxLDcgKzUyLDggQEAgcHVibGlj
OgogICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVFdmVudChTY3JpcHRFeGVjdXRpb25Db250ZXh0Jiwg
RXZlbnQmKSA9IDA7CiAgICAgdmlydHVhbCBib29sIHdhc0NyZWF0ZWRGcm9tTWFya3VwKCkgY29u
c3QgeyByZXR1cm4gZmFsc2U7IH0KIAotICAgIHZpcnR1YWwgdm9pZCB2aXNpdEpTRnVuY3Rpb24o
SlNDOjpTbG90VmlzaXRvciYpIHsgfQorLy8gICAgdmlydHVhbCB2b2lkIHZpc2l0SlNGdW5jdGlv
bihKU0M6OlNsb3RWaXNpdG9yJikgeyB9CisgICAgdmlydHVhbCB2b2lkIHZpc2l0SlNGdW5jdGlv
bihKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKSB7IH0KIAogICAgIHZpcnR1YWwgYm9vbCBpc0F0
dHJpYnV0ZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgVHlwZSB0eXBlKCkgY29uc3Qg
eyByZXR1cm4gbV90eXBlOyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRUYXJnZXQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9FdmVudFRhcmdldC5jcHAJKHJl
dmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9FdmVudFRhcmdldC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM3NCw3ICszNzQsOSBAQCB2b2lkIEV2ZW50VGFyZ2V0OjpyZW1vdmVB
bGxFdmVudExpc3RlbmVyCiAgICAgdGhyZWFkRGF0YS5zZXRJc0luUmVtb3ZlQWxsRXZlbnRMaXN0
ZW5lcnMoZmFsc2UpOwogfQogCi12b2lkIEV2ZW50VGFyZ2V0Ojp2aXNpdEpTRXZlbnRMaXN0ZW5l
cnMoSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vdm9pZCBFdmVudFRhcmdldDo6dmlzaXRK
U0V2ZW50TGlzdGVuZXJzKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBl
bmFtZSBWaXNpdG9yPgordm9pZCBFdmVudFRhcmdldDo6dmlzaXRKU0V2ZW50TGlzdGVuZXJzKFZp
c2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgRXZlbnRUYXJnZXREYXRhKiBkYXRhID0gZXZlbnRUYXJn
ZXREYXRhQ29uY3VycmVudGx5KCk7CiAgICAgaWYgKCFkYXRhKQpAQCAtMzg2LDYgKzM4OCw5IEBA
IHZvaWQgRXZlbnRUYXJnZXQ6OnZpc2l0SlNFdmVudExpc3RlbmVycygKICAgICAgICAgbGlzdGVu
ZXItPnZpc2l0SlNGdW5jdGlvbih2aXNpdG9yKTsKIH0KIAordGVtcGxhdGUgdm9pZCBFdmVudFRh
cmdldDo6dmlzaXRKU0V2ZW50TGlzdGVuZXJzKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpOwor
dGVtcGxhdGUgdm9pZCBFdmVudFRhcmdldDo6dmlzaXRKU0V2ZW50TGlzdGVuZXJzKEpTQzo6U2xv
dFZpc2l0b3ImKTsKKwogdm9pZCBFdmVudFRhcmdldDo6aW52YWxpZGF0ZUV2ZW50TGlzdGVuZXJS
ZWdpb25zKCkKIHsKICAgICBpZiAoaXM8RWxlbWVudD4oKnRoaXMpKSB7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9kb20vRXZlbnRUYXJnZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9k
b20vRXZlbnRUYXJnZXQuaAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL1dlYkNvcmUvZG9t
L0V2ZW50VGFyZ2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTExMyw3ICsxMTMsOCBAQCBwdWJsaWM6
CiAgICAgdm9pZCBmaXJlRXZlbnRMaXN0ZW5lcnMoRXZlbnQmLCBFdmVudEludm9rZVBoYXNlKTsK
ICAgICBib29sIGlzRmlyaW5nRXZlbnRMaXN0ZW5lcnMoKSBjb25zdDsKIAotICAgIHZvaWQgdmlz
aXRKU0V2ZW50TGlzdGVuZXJzKEpTQzo6U2xvdFZpc2l0b3ImKTsKKy8vICAgIHZvaWQgdmlzaXRK
U0V2ZW50TGlzdGVuZXJzKEpTQzo6U2xvdFZpc2l0b3ImKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBWaXNpdG9yPiB2b2lkIHZpc2l0SlNFdmVudExpc3RlbmVycyhWaXNpdG9yJik7CiAgICAgdm9p
ZCBpbnZhbGlkYXRlSlNFdmVudExpc3RlbmVycyhKU0M6OkpTT2JqZWN0Kik7CiAKICAgICBjb25z
dCBFdmVudFRhcmdldERhdGEqIGV2ZW50VGFyZ2V0RGF0YSgpIGNvbnN0OwpJbmRleDogU291cmNl
L1dlYkNvcmUvZG9tL011dGF0aW9uUmVjb3JkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9kb20vTXV0YXRpb25SZWNvcmQuY3BwCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2Uv
V2ViQ29yZS9kb20vTXV0YXRpb25SZWNvcmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0
MSw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogbmFtZXNwYWNlIHsKIAotc3RhdGljIHZvaWQg
dmlzaXROb2RlTGlzdChKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yLCBOb2RlTGlzdCYgbm9kZUxp
c3QpCisvL3N0YXRpYyB2b2lkIHZpc2l0Tm9kZUxpc3QoSlNDOjpTbG90VmlzaXRvciYgdmlzaXRv
ciwgTm9kZUxpc3QmIG5vZGVMaXN0KQorc3RhdGljIHZvaWQgdmlzaXROb2RlTGlzdChKU0M6OkFi
c3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIE5vZGVMaXN0JiBub2RlTGlzdCkKIHsKICAgICBB
U1NFUlQoIW5vZGVMaXN0LmlzTGl2ZU5vZGVMaXN0KCkpOwogICAgIHVuc2lnbmVkIGxlbmd0aCA9
IG5vZGVMaXN0Lmxlbmd0aCgpOwpAQCAtNjgsNyArNjksOCBAQCBwcml2YXRlOgogICAgIE5vZGUq
IHByZXZpb3VzU2libGluZygpIG92ZXJyaWRlIHsgcmV0dXJuIG1fcHJldmlvdXNTaWJsaW5nLmdl
dCgpOyB9CiAgICAgTm9kZSogbmV4dFNpYmxpbmcoKSBvdmVycmlkZSB7IHJldHVybiBtX25leHRT
aWJsaW5nLmdldCgpOyB9CiAKLSAgICB2b2lkIHZpc2l0Tm9kZXNDb25jdXJyZW50bHkoSlNDOjpT
bG90VmlzaXRvciYgdmlzaXRvcikgY29uc3QgZmluYWwKKy8vICAgIHZvaWQgdmlzaXROb2Rlc0Nv
bmN1cnJlbnRseShKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKSBjb25zdCBmaW5hbAorICAgIHZv
aWQgdmlzaXROb2Rlc0NvbmN1cnJlbnRseShKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0
b3IpIGNvbnN0IGZpbmFsCiAgICAgewogICAgICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qocm9v
dChtX3RhcmdldC5wdHIoKSkpOwogICAgICAgICBpZiAobV9hZGRlZE5vZGVzKQpAQCAtMTA1LDcg
KzEwNyw4IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiBub2RlTGlzdC5nZXQoKTsKICAgICB9
CiAKLSAgICB2b2lkIHZpc2l0Tm9kZXNDb25jdXJyZW50bHkoSlNDOjpTbG90VmlzaXRvciYgdmlz
aXRvcikgY29uc3QgZmluYWwKKy8vICAgIHZvaWQgdmlzaXROb2Rlc0NvbmN1cnJlbnRseShKU0M6
OlNsb3RWaXNpdG9yJiB2aXNpdG9yKSBjb25zdCBmaW5hbAorICAgIHZvaWQgdmlzaXROb2Rlc0Nv
bmN1cnJlbnRseShKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0IGZpbmFs
CiAgICAgewogICAgICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qocm9vdChtX3RhcmdldC5wdHIo
KSkpOwogICAgIH0KQEAgLTE2NCw3ICsxNjcsOCBAQCBwcml2YXRlOgogCiAgICAgU3RyaW5nIG9s
ZFZhbHVlKCkgb3ZlcnJpZGUgeyByZXR1cm4gU3RyaW5nKCk7IH0KIAotICAgIHZvaWQgdmlzaXRO
b2Rlc0NvbmN1cnJlbnRseShKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKSBjb25zdCBmaW5hbAor
Ly8gICAgdm9pZCB2aXNpdE5vZGVzQ29uY3VycmVudGx5KEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0
b3IpIGNvbnN0IGZpbmFsCisgICAgdm9pZCB2aXNpdE5vZGVzQ29uY3VycmVudGx5KEpTQzo6QWJz
dHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikgY29uc3QgZmluYWwKICAgICB7CiAgICAgICAgIG1f
cmVjb3JkLT52aXNpdE5vZGVzQ29uY3VycmVudGx5KHZpc2l0b3IpOwogICAgIH0KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2RvbS9NdXRhdGlvblJlY29yZC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2RvbS9NdXRhdGlvblJlY29yZC5oCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2Uv
V2ViQ29yZS9kb20vTXV0YXRpb25SZWNvcmQuaAkod29ya2luZyBjb3B5KQpAQCAtNzIsNyArNzIs
OCBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIFN0cmluZyBvbGRWYWx1ZSgpIHsgcmV0dXJuIFN0
cmluZygpOyB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXROb2Rlc0NvbmN1cnJlbnRseShKU0M6
OlNsb3RWaXNpdG9yJikgY29uc3QgPSAwOworLy8gICAgdmlydHVhbCB2b2lkIHZpc2l0Tm9kZXND
b25jdXJyZW50bHkoSlNDOjpTbG90VmlzaXRvciYpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZv
aWQgdmlzaXROb2Rlc0NvbmN1cnJlbnRseShKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKSBjb25z
dCA9IDA7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9XZWJHTDJSZW5kZXJpbmdDb250ZXh0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTDJSZW5kZXJpbmdDb250ZXh0LmNwcAkocmV2
aXNpb24gMjcxNDQzKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0wyUmVuZGVy
aW5nQ29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwMjgsMTggKzMwMjgsMjAgQEAgYm9v
bCBXZWJHTDJSZW5kZXJpbmdDb250ZXh0OjpjaGVja0FuZFRyYQogICAgIHJldHVybiB0cnVlOwog
fQogCi12b2lkIFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OmFkZE1lbWJlcnNUb09wYXF1ZVJvb3Rz
KEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3ZvaWQgV2ViR0wyUmVuZGVyaW5nQ29udGV4
dDo6YWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMoSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3Zv
aWQgV2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6YWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMoSlNDOjpB
YnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2U6OmFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKHZpc2l0b3IpOwogCiAgICAgYXV0byBsb2Nr
ZXIgPSBob2xkTG9jayhvYmplY3RHcmFwaExvY2soKSk7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVS
b290KG1fcmVhZEZyYW1lYnVmZmVyQmluZGluZy5nZXQoKSk7CiAgICAgaWYgKG1fcmVhZEZyYW1l
YnVmZmVyQmluZGluZykKLSAgICAgICAgbV9yZWFkRnJhbWVidWZmZXJCaW5kaW5nLT5hZGRNZW1i
ZXJzVG9PcGFxdWVSb290cyhsb2NrZXIsIHZpc2l0b3IpOworICAgICAgICBtX3JlYWRGcmFtZWJ1
ZmZlckJpbmRpbmctPmFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzMzAwKGxvY2tlciwgdmlzaXRvcik7
CiAKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QobV9ib3VuZFRyYW5zZm9ybUZlZWRiYWNrLmdl
dCgpKTsKICAgICBpZiAobV9ib3VuZFRyYW5zZm9ybUZlZWRiYWNrKQotICAgICAgICBtX2JvdW5k
VHJhbnNmb3JtRmVlZGJhY2stPmFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKGxvY2tlciwgdmlzaXRv
cik7CisvLyAgICAgICAgbV9ib3VuZFRyYW5zZm9ybUZlZWRiYWNrLT5hZGRNZW1iZXJzVG9PcGFx
dWVSb290cyhsb2NrZXIsIHZpc2l0b3IpOworICAgICAgICBtX2JvdW5kVHJhbnNmb3JtRmVlZGJh
Y2stPmFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzMTAwKGxvY2tlciwgdmlzaXRvcik7CiAKICAgICB2
aXNpdG9yLmFkZE9wYXF1ZVJvb3QobV9ib3VuZENvcHlSZWFkQnVmZmVyLmdldCgpKTsKICAgICB2
aXNpdG9yLmFkZE9wYXF1ZVJvb3QobV9ib3VuZENvcHlXcml0ZUJ1ZmZlci5nZXQoKSk7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTDJSZW5kZXJpbmdDb250ZXh0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0wyUmVuZGVyaW5nQ29u
dGV4dC5oCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9X
ZWJHTDJSZW5kZXJpbmdDb250ZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTI2MSw3ICsyNjEsOCBA
QCBwdWJsaWM6CiAKICAgICBib29sIGNoZWNrQW5kVHJhbnNsYXRlQXR0YWNobWVudHMoY29uc3Qg
Y2hhciogZnVuY3Rpb25OYW1lLCBHQ0dMZW51bSwgVmVjdG9yPEdDR0xlbnVtPiYpOwogCi0gICAg
dm9pZCBhZGRNZW1iZXJzVG9PcGFxdWVSb290cyhKU0M6OlNsb3RWaXNpdG9yJikgb3ZlcnJpZGU7
CisvLyAgICB2b2lkIGFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKEpTQzo6U2xvdFZpc2l0b3ImKSBv
dmVycmlkZTsKKyAgICB2b2lkIGFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKEpTQzo6QWJzdHJhY3RT
bG90VmlzaXRvciYpIG92ZXJyaWRlOwogCiBwcml2YXRlOgogICAgIFdlYkdMMlJlbmRlcmluZ0Nv
bnRleHQoQ2FudmFzQmFzZSYsIEdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcyk7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEZyYW1lYnVmZmVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEZyYW1lYnVmZmVyLmNwcAkocmV2
aXNpb24gMjcxNDQzKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xGcmFtZWJ1
ZmZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYzLDcgKzYzLDggQEAgbmFtZXNwYWNlIHsKICAg
ICAgICAgdm9pZCBvbkRldGFjaGVkKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgR3JhcGhpY3NDb250
ZXh0R0wqKSBvdmVycmlkZTsKICAgICAgICAgdm9pZCBhdHRhY2goR3JhcGhpY3NDb250ZXh0R0wq
LCBHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIGF0dGFjaG1lbnQpIG92ZXJyaWRlOwogICAgICAg
ICB2b2lkIHVuYXR0YWNoKEdyYXBoaWNzQ29udGV4dEdMKiwgR0NHTGVudW0gdGFyZ2V0LCBHQ0dM
ZW51bSBhdHRhY2htZW50KSBvdmVycmlkZTsKLSAgICAgICAgdm9pZCBhZGRNZW1iZXJzVG9PcGFx
dWVSb290cyhjb25zdCBBYnN0cmFjdExvY2tlciYsIEpTQzo6U2xvdFZpc2l0b3ImKSBvdmVycmlk
ZTsKKy8vICAgICAgICB2b2lkIGFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKGNvbnN0IEFic3RyYWN0
TG9ja2VyJiwgSlNDOjpTbG90VmlzaXRvciYpIG92ZXJyaWRlOworICAgICAgICB2b2lkIGFkZE1l
bWJlcnNUb09wYXF1ZVJvb3RzNDAwKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgSlNDOjpBYnN0cmFj
dFNsb3RWaXNpdG9yJikgb3ZlcnJpZGU7CiAKICAgICAgICAgV2ViR0xSZW5kZXJidWZmZXJBdHRh
Y2htZW50KCkgeyB9OwogCkBAIC0xNDUsNyArMTQ2LDggQEAgbmFtZXNwYWNlIHsKICAgICAgICAg
ICAgIGNvbnRleHQtPmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKHRhcmdldCwgYXR0YWNobWVudCwg
R3JhcGhpY3NDb250ZXh0R0w6OlJFTkRFUkJVRkZFUiwgMCk7CiAgICAgfQogCi0gICAgdm9pZCBX
ZWJHTFJlbmRlcmJ1ZmZlckF0dGFjaG1lbnQ6OmFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKGNvbnN0
IEFic3RyYWN0TG9ja2VyJiwgSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vICAgIHZvaWQg
V2ViR0xSZW5kZXJidWZmZXJBdHRhY2htZW50OjphZGRNZW1iZXJzVG9PcGFxdWVSb290cyhjb25z
dCBBYnN0cmFjdExvY2tlciYsIEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCisgICAgdm9pZCBX
ZWJHTFJlbmRlcmJ1ZmZlckF0dGFjaG1lbnQ6OmFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzNDAwKGNv
bnN0IEFic3RyYWN0TG9ja2VyJiwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQog
ICAgIHsKICAgICAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KG1fcmVuZGVyYnVmZmVyLmdldCgp
KTsKICAgICB9CkBAIC0xNjksNyArMTcxLDggQEAgbmFtZXNwYWNlIHsKICAgICAgICAgdm9pZCBv
bkRldGFjaGVkKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgR3JhcGhpY3NDb250ZXh0R0wqKSBvdmVy
cmlkZTsKICAgICAgICAgdm9pZCBhdHRhY2goR3JhcGhpY3NDb250ZXh0R0wqLCBHQ0dMZW51bSB0
YXJnZXQsIEdDR0xlbnVtIGF0dGFjaG1lbnQpIG92ZXJyaWRlOwogICAgICAgICB2b2lkIHVuYXR0
YWNoKEdyYXBoaWNzQ29udGV4dEdMKiwgR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBhdHRhY2ht
ZW50KSBvdmVycmlkZTsKLSAgICAgICAgdm9pZCBhZGRNZW1iZXJzVG9PcGFxdWVSb290cyhjb25z
dCBBYnN0cmFjdExvY2tlciYsIEpTQzo6U2xvdFZpc2l0b3ImKSBvdmVycmlkZTsKKy8vICAgICAg
ICB2b2lkIGFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgSlND
OjpTbG90VmlzaXRvciYpIG92ZXJyaWRlOworICAgICAgICB2b2lkIGFkZE1lbWJlcnNUb09wYXF1
ZVJvb3RzNDAwKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9y
Jikgb3ZlcnJpZGU7CiAKICAgICAgICAgV2ViR0xUZXh0dXJlQXR0YWNobWVudCgpIHsgfTsKIApA
QCAtMjY3LDcgKzI3MCw4IEBAIG5hbWVzcGFjZSB7CiAjZW5kaWYKICAgICB9CiAKLSAgICB2b2lk
IFdlYkdMVGV4dHVyZUF0dGFjaG1lbnQ6OmFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKGNvbnN0IEFi
c3RyYWN0TG9ja2VyJiwgSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vICAgIHZvaWQgV2Vi
R0xUZXh0dXJlQXR0YWNobWVudDo6YWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMoY29uc3QgQWJzdHJh
Y3RMb2NrZXImLCBKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQorICAgIHZvaWQgV2ViR0xUZXh0
dXJlQXR0YWNobWVudDo6YWRkTWVtYmVyc1RvT3BhcXVlUm9vdHM0MDAoY29uc3QgQWJzdHJhY3RM
b2NrZXImLCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiAgICAgewogICAgICAg
ICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QobV90ZXh0dXJlLmdldCgpKTsKICAgICB9CkBAIC03MjEs
MTAgKzcyNSwxMSBAQCBHQ0dMZW51bSBXZWJHTEZyYW1lYnVmZmVyOjpnZXREcmF3QnVmZmVyCiAg
ICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dEdMOjpOT05FOwogfQogCi12b2lkIFdlYkdMRnJhbWVi
dWZmZXI6OmFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKGNvbnN0IEFic3RyYWN0TG9ja2VyJiBsb2Nr
ZXIsIEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3ZvaWQgV2ViR0xGcmFtZWJ1ZmZlcjo6
YWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMoY29uc3QgQWJzdHJhY3RMb2NrZXImIGxvY2tlciwgSlND
OjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgV2ViR0xGcmFtZWJ1ZmZlcjo6YWRkTWVtYmVy
c1RvT3BhcXVlUm9vdHMzMDAoY29uc3QgQWJzdHJhY3RMb2NrZXImIGxvY2tlciwgSlNDOjpBYnN0
cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGZvciAoYXV0byYgZW50cnkgOiBtX2F0
dGFjaG1lbnRzKQotICAgICAgICBlbnRyeS52YWx1ZS0+YWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMo
bG9ja2VyLCB2aXNpdG9yKTsKKyAgICAgICAgZW50cnkudmFsdWUtPmFkZE1lbWJlcnNUb09wYXF1
ZVJvb3RzNDAwKGxvY2tlciwgdmlzaXRvcik7CiB9CiAKIHZvaWQgV2ViR0xGcmFtZWJ1ZmZlcjo6
c2V0QXR0YWNobWVudEludGVybmFsKEdDR0xlbnVtIGF0dGFjaG1lbnQsIEdDR0xlbnVtIHRleFRh
cmdldCwgV2ViR0xUZXh0dXJlKiB0ZXh0dXJlLCBHQ0dMaW50IGxldmVsLCBHQ0dMaW50IGxheWVy
KQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xGcmFtZWJ1ZmZlci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRnJhbWVidWZmZXIu
aAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xG
cmFtZWJ1ZmZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw4IEBACiAjaW5jbHVkZSA8
d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgSlNDIHsKLWNsYXNzIFNsb3RWaXNpdG9yOworLy9j
bGFzcyBTbG90VmlzaXRvcjsKK2NsYXNzIEFic3RyYWN0U2xvdFZpc2l0b3I7CiB9CiAKIG5hbWVz
cGFjZSBXVEYgewpAQCAtNjUsNyArNjYsOCBAQCBwdWJsaWM6CiAgICAgICAgIHZpcnR1YWwgdm9p
ZCBvbkRldGFjaGVkKGNvbnN0IFdURjo6QWJzdHJhY3RMb2NrZXImLCBHcmFwaGljc0NvbnRleHRH
TCopID0gMDsKICAgICAgICAgdmlydHVhbCB2b2lkIGF0dGFjaChHcmFwaGljc0NvbnRleHRHTCos
IEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gYXR0YWNobWVudCkgPSAwOwogICAgICAgICB2aXJ0
dWFsIHZvaWQgdW5hdHRhY2goR3JhcGhpY3NDb250ZXh0R0wqLCBHQ0dMZW51bSB0YXJnZXQsIEdD
R0xlbnVtIGF0dGFjaG1lbnQpID0gMDsKLSAgICAgICAgdmlydHVhbCB2b2lkIGFkZE1lbWJlcnNU
b09wYXF1ZVJvb3RzKGNvbnN0IFdURjo6QWJzdHJhY3RMb2NrZXImLCBKU0M6OlNsb3RWaXNpdG9y
JikgPSAwOworLy8gICAgICAgIHZpcnR1YWwgdm9pZCBhZGRNZW1iZXJzVG9PcGFxdWVSb290cyhj
b25zdCBXVEY6OkFic3RyYWN0TG9ja2VyJiwgSlNDOjpTbG90VmlzaXRvciYpID0gMDsKKyAgICAg
ICAgdmlydHVhbCB2b2lkIGFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzNDAwKGNvbnN0IFdURjo6QWJz
dHJhY3RMb2NrZXImLCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKSA9IDA7CiAKICAgICBwcm90
ZWN0ZWQ6CiAgICAgICAgIFdlYkdMQXR0YWNobWVudCgpOwpAQCAtMTE0LDcgKzExNiw4IEBAIHB1
YmxpYzoKIAogICAgIEdDR0xlbnVtIGdldERyYXdCdWZmZXIoR0NHTGVudW0pOwogCi0gICAgdm9p
ZCBhZGRNZW1iZXJzVG9PcGFxdWVSb290cyhjb25zdCBXVEY6OkFic3RyYWN0TG9ja2VyJiwgSlND
OjpTbG90VmlzaXRvciYpOworLy8gICAgdm9pZCBhZGRNZW1iZXJzVG9PcGFxdWVSb290cyhjb25z
dCBXVEY6OkFic3RyYWN0TG9ja2VyJiwgSlNDOjpTbG90VmlzaXRvciYpOworICAgIHZvaWQgYWRk
TWVtYmVyc1RvT3BhcXVlUm9vdHMzMDAoY29uc3QgV1RGOjpBYnN0cmFjdExvY2tlciYsIEpTQzo6
QWJzdHJhY3RTbG90VmlzaXRvciYpOwogCiBwcml2YXRlOgogICAgIFdlYkdMRnJhbWVidWZmZXIo
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSYpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9j
YW52YXMvV2ViR0xQcm9ncmFtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9XZWJHTFByb2dyYW0uY3BwCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvV2Vi
Q29yZS9odG1sL2NhbnZhcy9XZWJHTFByb2dyYW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDYs
NyArMjA2LDggQEAgYm9vbCBXZWJHTFByb2dyYW06OmRldGFjaFNoYWRlcihjb25zdCBBYgogICAg
IH0KIH0KIAotdm9pZCBXZWJHTFByb2dyYW06OmFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKGNvbnN0
IEFic3RyYWN0TG9ja2VyJiwgSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vdm9pZCBXZWJH
TFByb2dyYW06OmFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwg
SlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgV2ViR0xQcm9ncmFtOjphZGRNZW1iZXJz
VG9PcGFxdWVSb290czIwMChjb25zdCBBYnN0cmFjdExvY2tlciYsIEpTQzo6QWJzdHJhY3RTbG90
VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QobV92ZXJ0ZXhT
aGFkZXIuZ2V0KCkpOwogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChtX2ZyYWdtZW50U2hhZGVy
LmdldCgpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUHJvZ3JhbS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUHJvZ3JhbS5o
CShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFBy
b2dyYW0uaAkod29ya2luZyBjb3B5KQpAQCAtMzUsNyArMzUsOCBAQAogI2luY2x1ZGUgPHd0Zi9W
ZWN0b3IuaD4KIAogbmFtZXNwYWNlIEpTQyB7Ci1jbGFzcyBTbG90VmlzaXRvcjsKKy8vY2xhc3Mg
U2xvdFZpc2l0b3I7CitjbGFzcyBBYnN0cmFjdFNsb3RWaXNpdG9yOwogfQogCiBuYW1lc3BhY2Ug
V1RGIHsKQEAgLTg4LDcgKzg5LDggQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9yZXF1aXJl
ZFRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyQ291bnQ7CiAgICAgfQogCi0gICAgdm9pZCBhZGRNZW1i
ZXJzVG9PcGFxdWVSb290cyhjb25zdCBXVEY6OkFic3RyYWN0TG9ja2VyJiwgSlNDOjpTbG90Vmlz
aXRvciYpOworLy8gICAgdm9pZCBhZGRNZW1iZXJzVG9PcGFxdWVSb290cyhjb25zdCBXVEY6OkFi
c3RyYWN0TG9ja2VyJiwgSlNDOjpTbG90VmlzaXRvciYpOworICAgIHZvaWQgYWRkTWVtYmVyc1Rv
T3BhcXVlUm9vdHMyMDAoY29uc3QgV1RGOjpBYnN0cmFjdExvY2tlciYsIEpTQzo6QWJzdHJhY3RT
bG90VmlzaXRvciYpOwogCiBwcml2YXRlOgogICAgIFdlYkdMUHJvZ3JhbShXZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlJik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcAkocmV2aXNpb24gMjcxNDQzKQor
KysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTc5MjcsMjMgKzc5MjcsMjYgQEAgdm9pZCBXZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlOjpkaXNwYXRjaAogICAgIHF1ZXVlVGFza1RvRGlzcGF0Y2hFdmVudCgq
Y2FudmFzLCBUYXNrU291cmNlOjpXZWJHTCwgV2ViR0xDb250ZXh0RXZlbnQ6OmNyZWF0ZShldmVu
dE5hbWVzKCkud2ViZ2xjb250ZXh0Y2hhbmdlZEV2ZW50LCBFdmVudDo6Q2FuQnViYmxlOjpObywg
RXZlbnQ6OklzQ2FuY2VsYWJsZTo6WWVzLCBlbXB0eVN0cmluZygpKSk7CiB9CiAKLXZvaWQgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6YWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMoSlNDOjpTbG90
VmlzaXRvciYgdmlzaXRvcikKKy8vdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjphZGRN
ZW1iZXJzVG9PcGFxdWVSb290cyhKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBXZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlOjphZGRNZW1iZXJzVG9PcGFxdWVSb290cyhKU0M6OkFic3Ry
YWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhv
YmplY3RHcmFwaExvY2soKSk7CiAKKyAgICAvLyBtbGFtIEZJWE1FOiB3aHkgYXJlIHdlIG5vdCBh
bHNvIHZpc2l0aW5nIG1fZGVmYXVsdFZlcnRleEFycmF5T2JqZWN0PworCiAgICAgdmlzaXRvci5h
ZGRPcGFxdWVSb290KG1fYm91bmRBcnJheUJ1ZmZlci5nZXQoKSk7CiAKICAgICB2aXNpdG9yLmFk
ZE9wYXF1ZVJvb3QobV9ib3VuZFZlcnRleEFycmF5T2JqZWN0LmdldCgpKTsKICAgICBpZiAobV9i
b3VuZFZlcnRleEFycmF5T2JqZWN0KQotICAgICAgICBtX2JvdW5kVmVydGV4QXJyYXlPYmplY3Qt
PmFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKGxvY2tlciwgdmlzaXRvcik7CisgICAgICAgIG1fYm91
bmRWZXJ0ZXhBcnJheU9iamVjdC0+YWRkTWVtYmVyc1RvT3BhcXVlUm9vdHM2MDAobG9ja2VyLCB2
aXNpdG9yKTsKIAogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChtX2N1cnJlbnRQcm9ncmFtLmdl
dCgpKTsKICAgICBpZiAobV9jdXJyZW50UHJvZ3JhbSkKLSAgICAgICAgbV9jdXJyZW50UHJvZ3Jh
bS0+YWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMobG9ja2VyLCB2aXNpdG9yKTsKKyAgICAgICAgbV9j
dXJyZW50UHJvZ3JhbS0+YWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMyMDAobG9ja2VyLCB2aXNpdG9y
KTsKIAogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChtX2ZyYW1lYnVmZmVyQmluZGluZy5nZXQo
KSk7CiAgICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nKQotICAgICAgICBtX2ZyYW1lYnVmZmVy
QmluZGluZy0+YWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMobG9ja2VyLCB2aXNpdG9yKTsKKyAgICAg
ICAgbV9mcmFtZWJ1ZmZlckJpbmRpbmctPmFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzMzAwKGxvY2tl
ciwgdmlzaXRvcik7CiAKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QobV9yZW5kZXJidWZmZXJC
aW5kaW5nLmdldCgpKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuaAkocmV2aXNpb24gMjcxNDQzKQorKysg
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC01OCw3ICs1OCw4IEBACiAjZW5kaWYKIAogbmFtZXNwYWNlIEpTQyB7
Ci1jbGFzcyBTbG90VmlzaXRvcjsKKy8vY2xhc3MgU2xvdFZpc2l0b3I7CitjbGFzcyBBYnN0cmFj
dFNsb3RWaXNpdG9yOwogfQogCiBuYW1lc3BhY2UgV1RGIHsKQEAgLTQxMCw3ICs0MTEsOCBAQCBw
dWJsaWM6CiAgICAgdm9pZCByZWN5Y2xlQ29udGV4dCgpIG92ZXJyaWRlOwogICAgIHZvaWQgZGlz
cGF0Y2hDb250ZXh0Q2hhbmdlZE5vdGlmaWNhdGlvbigpIG92ZXJyaWRlOwogCi0gICAgdmlydHVh
bCB2b2lkIGFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKEpTQzo6U2xvdFZpc2l0b3ImKTsKKy8vICAg
IHZpcnR1YWwgdm9pZCBhZGRNZW1iZXJzVG9PcGFxdWVSb290cyhKU0M6OlNsb3RWaXNpdG9yJik7
CisgICAgdmlydHVhbCB2b2lkIGFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKEpTQzo6QWJzdHJhY3RT
bG90VmlzaXRvciYpOwogICAgIC8vIFRoaXMgbG9jayBtdXN0IGJlIGhlbGQgYWNyb3NzIGFsbCBt
dXRhdGlvbnMgb2YgY29udGFpbmVycyBsaWtlCiAgICAgLy8gVmVjdG9ycywgSGFzaFNldHMsIGV0
Yy4gd2hpY2ggY29udGFpbiBSZWZQdHI8V2ViR0xPYmplY3Q+LCBhbmQKICAgICAvLyB3aGljaCBh
cmUgdHJhdmVyc2VkIGJ5IGFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKCkgb3IgYW55IG9mIHRoZQpJ
bmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xUcmFuc2Zvcm1GZWVkYmFjay5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xUcmFuc2Zv
cm1GZWVkYmFjay5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL1dlYkdMVHJhbnNmb3JtRmVlZGJhY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw4
ICszMCw5IEBACiAKICNpbmNsdWRlICJXZWJHTENvbnRleHRHcm91cC5oIgogI2luY2x1ZGUgIldl
YkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9TbG90
VmlzaXRvci5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1Nsb3RWaXNpdG9ySW5saW5lcy5o
PgorLy8jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvU2xvdFZpc2l0b3IuaD4KKy8vI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL1Nsb3RWaXNpdG9ySW5saW5lcy5oPgorI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL0Fic3RyYWN0U2xvdFZpc2l0b3JJbmxpbmVzLmg+CiAjaW5jbHVkZSA8d3RmL0xvY2su
aD4KICNpbmNsdWRlIDx3dGYvTG9ja2VyLmg+CiAKQEAgLTkzLDE0ICs5NCwxNSBAQCBib29sIFdl
YkdMVHJhbnNmb3JtRmVlZGJhY2s6Omhhc0Vub3VnaEJ1CiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
LXZvaWQgV2ViR0xUcmFuc2Zvcm1GZWVkYmFjazo6YWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMoY29u
c3QgQWJzdHJhY3RMb2NrZXImIGxvY2tlciwgSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKKy8v
dm9pZCBXZWJHTFRyYW5zZm9ybUZlZWRiYWNrOjphZGRNZW1iZXJzVG9PcGFxdWVSb290cyhjb25z
dCBBYnN0cmFjdExvY2tlciYgbG9ja2VyLCBKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordm9p
ZCBXZWJHTFRyYW5zZm9ybUZlZWRiYWNrOjphZGRNZW1iZXJzVG9PcGFxdWVSb290czEwMChjb25z
dCBBYnN0cmFjdExvY2tlciYgbG9ja2VyLCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0
b3IpCiB7CiAgICAgZm9yIChhdXRvJiBidWZmZXIgOiBtX2JvdW5kSW5kZXhlZFRyYW5zZm9ybUZl
ZWRiYWNrQnVmZmVycykKICAgICAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KGJ1ZmZlci5nZXQo
KSk7CiAKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QobV9wcm9ncmFtLmdldCgpKTsKICAgICBp
ZiAobV9wcm9ncmFtKQotICAgICAgICBtX3Byb2dyYW0tPmFkZE1lbWJlcnNUb09wYXF1ZVJvb3Rz
KGxvY2tlciwgdmlzaXRvcik7CisgICAgICAgIG1fcHJvZ3JhbS0+YWRkTWVtYmVyc1RvT3BhcXVl
Um9vdHMyMDAobG9ja2VyLCB2aXNpdG9yKTsKIH0KIAogdm9pZCBXZWJHTFRyYW5zZm9ybUZlZWRi
YWNrOjp1bmJpbmRCdWZmZXIoY29uc3QgQWJzdHJhY3RMb2NrZXImLCBXZWJHTEJ1ZmZlciYgYnVm
ZmVyKQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xUcmFuc2Zvcm1GZWVk
YmFjay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVHJh
bnNmb3JtRmVlZGJhY2suaAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvV2ViR0xUcmFuc2Zvcm1GZWVkYmFjay5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3
ICszMSw4IEBACiAjaW5jbHVkZSAiV2ViR0xTaGFyZWRPYmplY3QuaCIKIAogbmFtZXNwYWNlIEpT
QyB7Ci1jbGFzcyBTbG90VmlzaXRvcjsKKy8vY2xhc3MgU2xvdFZpc2l0b3I7CitjbGFzcyBBYnN0
cmFjdFNsb3RWaXNpdG9yOwogfQogCiBuYW1lc3BhY2UgV1RGIHsKQEAgLTcwLDcgKzcxLDggQEAg
cHVibGljOgogICAgIAogICAgIGJvb2wgaGFzRW5vdWdoQnVmZmVycyhHQ0dMdWludCBudW1SZXF1
aXJlZCkgY29uc3Q7CiAKLSAgICB2b2lkIGFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKGNvbnN0IEFi
c3RyYWN0TG9ja2VyJiwgSlNDOjpTbG90VmlzaXRvciYpOworLy8gICAgdm9pZCBhZGRNZW1iZXJz
VG9PcGFxdWVSb290cyhjb25zdCBBYnN0cmFjdExvY2tlciYsIEpTQzo6U2xvdFZpc2l0b3ImKTsK
KyAgICB2b2lkIGFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzMTAwKGNvbnN0IEFic3RyYWN0TG9ja2Vy
JiwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAKIHByaXZhdGU6CiAgICAgV2ViR0xUcmFu
c2Zvcm1GZWVkYmFjayhXZWJHTDJSZW5kZXJpbmdDb250ZXh0Jik7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9odG1sL2NhbnZhcy9XZWJHTFZlcnRleEFycmF5T2JqZWN0QmFzZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xWZXJ0ZXhBcnJheU9iamVjdEJh
c2UuY3BwCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9X
ZWJHTFZlcnRleEFycmF5T2JqZWN0QmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDggKzI5
LDkgQEAKICNpZiBFTkFCTEUoV0VCR0wpCiAKICNpbmNsdWRlICJXZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvU2xvdFZpc2l0b3IuaD4KLSNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9TbG90VmlzaXRvcklubGluZXMuaD4KKy8vI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL1Nsb3RWaXNpdG9yLmg+CisvLyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9T
bG90VmlzaXRvcklubGluZXMuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9BYnN0cmFjdFNs
b3RWaXNpdG9ySW5saW5lcy5oPgogI2luY2x1ZGUgPHd0Zi9Mb2NrZXIuaD4KIAogbmFtZXNwYWNl
IFdlYkNvcmUgewpAQCAtMTA4LDcgKzEwOSw4IEBAIHZvaWQgV2ViR0xWZXJ0ZXhBcnJheU9iamVj
dEJhc2U6OnNldFZlcnQKICAgICBtX3ZlcnRleEF0dHJpYlN0YXRlW2luZGV4XS5kaXZpc29yID0g
ZGl2aXNvcjsKIH0KIAotdm9pZCBXZWJHTFZlcnRleEFycmF5T2JqZWN0QmFzZTo6YWRkTWVtYmVy
c1RvT3BhcXVlUm9vdHMoY29uc3QgQWJzdHJhY3RMb2NrZXImLCBKU0M6OlNsb3RWaXNpdG9yJiB2
aXNpdG9yKQorLy92b2lkIFdlYkdMVmVydGV4QXJyYXlPYmplY3RCYXNlOjphZGRNZW1iZXJzVG9P
cGFxdWVSb290czYwMChjb25zdCBBYnN0cmFjdExvY2tlciYsIEpTQzo6U2xvdFZpc2l0b3ImIHZp
c2l0b3IpCit2b2lkIFdlYkdMVmVydGV4QXJyYXlPYmplY3RCYXNlOjphZGRNZW1iZXJzVG9PcGFx
dWVSb290czYwMChjb25zdCBBYnN0cmFjdExvY2tlciYsIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRv
ciYgdmlzaXRvcikKIHsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QobV9ib3VuZEVsZW1lbnRB
cnJheUJ1ZmZlci5nZXQoKSk7CiAgICAgZm9yIChhdXRvJiBzdGF0ZSA6IG1fdmVydGV4QXR0cmli
U3RhdGUpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFZlcnRleEFycmF5
T2JqZWN0QmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dl
YkdMVmVydGV4QXJyYXlPYmplY3RCYXNlLmgJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVmVydGV4QXJyYXlPYmplY3RCYXNlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTMyLDcgKzMyLDggQEAKICNpbmNsdWRlICJXZWJHTENvbnRleHRPYmplY3QuaCIK
IAogbmFtZXNwYWNlIEpTQyB7Ci1jbGFzcyBTbG90VmlzaXRvcjsKKy8vY2xhc3MgU2xvdFZpc2l0
b3I7CitjbGFzcyBBYnN0cmFjdFNsb3RWaXNpdG9yOwogfQogCiBuYW1lc3BhY2UgV1RGIHsKQEAg
LTc2LDcgKzc3LDggQEAgcHVibGljOgogCiAgICAgdm9pZCBzZXRWZXJ0ZXhBdHRyaWJEaXZpc29y
KEdDR0x1aW50IGluZGV4LCBHQ0dMdWludCBkaXZpc29yKTsKIAotICAgIHZvaWQgYWRkTWVtYmVy
c1RvT3BhcXVlUm9vdHMoY29uc3QgV1RGOjpBYnN0cmFjdExvY2tlciYsIEpTQzo6U2xvdFZpc2l0
b3ImKTsKKy8vICAgIHZvaWQgYWRkTWVtYmVyc1RvT3BhcXVlUm9vdHM2MDAoY29uc3QgV1RGOjpB
YnN0cmFjdExvY2tlciYsIEpTQzo6U2xvdFZpc2l0b3ImKTsKKyAgICB2b2lkIGFkZE1lbWJlcnNU
b09wYXF1ZVJvb3RzNjAwKGNvbnN0IFdURjo6QWJzdHJhY3RMb2NrZXImLCBKU0M6OkFic3RyYWN0
U2xvdFZpc2l0b3ImKTsKIAogcHJvdGVjdGVkOgogICAgIFdlYkdMVmVydGV4QXJyYXlPYmplY3RC
YXNlKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UmLCBUeXBlKTsK
</data>
<flag name="commit-queue"
          id="435303"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>417566</attachid>
            <date>2021-01-13 14:30:49 -0800</date>
            <delta_ts>2021-01-14 17:15:18 -0800</delta_ts>
            <desc>work in progress.</desc>
            <filename>bug-217274.patch</filename>
            <type>text/plain</type>
            <size>461010</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDI3MTQ0MykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtNjEwLDYgKzYxMCw4IEBAIHNldChKYXZhU2NyaXB0Q29yZV9QUklWQVRFX0ZSQU1FV09SS19I
RUEKICAgICBkb21qaXQvRE9NSklUSGVhcFJhbmdlLmgKICAgICBkb21qaXQvRE9NSklUU2lnbmF0
dXJlLmgKIAorICAgIGhlYXAvQWJzdHJhY3RTbG90VmlzaXRvci5oCisgICAgaGVhcC9BYnN0cmFj
dFNsb3RWaXNpdG9ySW5saW5lcy5oCiAgICAgaGVhcC9BbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmgK
ICAgICBoZWFwL0FsbG9jYXRpb25GYWlsdXJlTW9kZS5oCiAgICAgaGVhcC9BbGxvY2F0b3IuaApA
QCAtNjI5LDYgKzYzMSw4IEBAIHNldChKYXZhU2NyaXB0Q29yZV9QUklWQVRFX0ZSQU1FV09SS19I
RUEKICAgICBoZWFwL0NvbnN0cmFpbnRDb25jdXJyZW5jeS5oCiAgICAgaGVhcC9Db25zdHJhaW50
UGFyYWxsZWxpc20uaAogICAgIGhlYXAvQ29uc3RyYWludFZvbGF0aWxpdHkuaAorICAgIGhlYXAv
RGVidWdTbG90VmlzaXRvci5oCisgICAgaGVhcC9EZWJ1Z1Nsb3RWaXNpdG9ySW5saW5lcy5oCiAg
ICAgaGVhcC9EZWZlckdDLmgKICAgICBoZWFwL0RlbGV0ZUFsbENvZGVFZmZvcnQuaAogICAgIGhl
YXAvRGVzdHJ1Y3Rpb25Nb2RlLmgKQEAgLTY4Myw2ICs2ODcsNyBAQCBzZXQoSmF2YVNjcmlwdENv
cmVfUFJJVkFURV9GUkFNRVdPUktfSEVBCiAgICAgaGVhcC9TaW1wbGVNYXJraW5nQ29uc3RyYWlu
dC5oCiAgICAgaGVhcC9TbG90VmlzaXRvci5oCiAgICAgaGVhcC9TbG90VmlzaXRvcklubGluZXMu
aAorICAgIGhlYXAvU2xvdFZpc2l0b3JNYWNyb3MuaAogICAgIGhlYXAvU3Ryb25nLmgKICAgICBo
ZWFwL1N0cm9uZ0lubGluZXMuaAogICAgIGhlYXAvU3Vic3BhY2UuaApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9Tb3VyY2VzLnR4dAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL1NvdXJjZXMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC01MDMsNiArNTAzLDcgQEAgZnRsL0ZU
TFN0YXRlLmNwcAogZnRsL0ZUTFRodW5rcy5jcHAKIGZ0bC9GVExWYWx1ZVJhbmdlLmNwcAogCito
ZWFwL0Fic3RyYWN0U2xvdFZpc2l0b3IuY3BwCiBoZWFwL0FsaWduZWRNZW1vcnlBbGxvY2F0b3Iu
Y3BwCiBoZWFwL0FsbG9jYXRvci5jcHAKIGhlYXAvQmxvY2tEaXJlY3RvcnkuY3BwCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQVBJV3JhcHBlck9iamVjdC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNBUElXcmFwcGVyT2JqZWN0LmgJKHJldmlz
aW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNBUElXcmFwcGVyT2Jq
ZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00MSw3ICs0MSw3IEBAIHB1YmxpYzoKICAgICBzdGF0
aWMgdm9pZCBzdWJzcGFjZUZvcihWTSYpIHsgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsg
fQogICAgIAogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKLSAgICBzdGF0aWMgdm9pZCB2
aXNpdENoaWxkcmVuKEpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX0VY
UE9SVF9WSVNJVF9DSElMRFJFTjsKICAgICAKICAgICB2b2lkKiB3cmFwcGVkT2JqZWN0KCkgeyBy
ZXR1cm4gbV93cmFwcGVkT2JqZWN0OyB9CiAgICAgdm9pZCBzZXRXcmFwcGVkT2JqZWN0KHZvaWQq
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNBUElXcmFwcGVyT2JqZWN0Lm1t
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNBUElXcmFwcGVyT2Jq
ZWN0Lm1tCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pT
QVBJV3JhcHBlck9iamVjdC5tbQkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM3LDcgKzM3LDcgQEAKIGNs
YXNzIEpTQVBJV3JhcHBlck9iamVjdEhhbmRsZU93bmVyIGZpbmFsIDogcHVibGljIEpTQzo6V2Vh
a0hhbmRsZU93bmVyIHsKIHB1YmxpYzoKICAgICB2b2lkIGZpbmFsaXplKEpTQzo6SGFuZGxlPEpT
Qzo6VW5rbm93bj4sIHZvaWQqKSBmaW5hbDsKLSAgICBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1
ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6U2xv
dFZpc2l0b3ImLCBjb25zdCBjaGFyKiopIGZpbmFsOworICAgIGJvb2wgaXNSZWFjaGFibGVGcm9t
T3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCwgSlND
OjpBYnN0cmFjdFNsb3RWaXNpdG9yJiwgY29uc3QgY2hhcioqKSBmaW5hbDsKIH07CiAKIHN0YXRp
YyBKU0FQSVdyYXBwZXJPYmplY3RIYW5kbGVPd25lcioganNBUElXcmFwcGVyT2JqZWN0SGFuZGxl
T3duZXIoKQpAQCAtNTYsNyArNTYsNyBAQCB2b2lkIEpTQVBJV3JhcHBlck9iamVjdEhhbmRsZU93
bmVyOjpmaW5hCiAgICAgSlNDOjpXZWFrU2V0OjpkZWFsbG9jYXRlKEpTQzo6V2Vha0ltcGw6OmFz
V2Vha0ltcGwoaGFuZGxlLnNsb3QoKSkpOwogfQogCi1ib29sIEpTQVBJV3JhcHBlck9iamVjdEhh
bmRsZU93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVu
a25vd24+IGhhbmRsZSwgdm9pZCosIEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNo
YXIqKikKK2Jvb2wgSlNBUElXcmFwcGVyT2JqZWN0SGFuZGxlT3duZXI6OmlzUmVhY2hhYmxlRnJv
bU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgSlND
OjpBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiopCiB7CiAgICAgSlND
OjpKU0FQSVdyYXBwZXJPYmplY3QqIHdyYXBwZXJPYmplY3QgPSBKU0M6OmpzQ2FzdDxKU0M6OkpT
QVBJV3JhcHBlck9iamVjdCo+KGhhbmRsZS5nZXQoKS5hc0NlbGwoKSk7CiAgICAgLy8gV2UgdXNl
IHRoZSBKU0dsb2JhbE9iamVjdCB3aGVuIHByb2Nlc3Npbmcgd2VhayBoYW5kbGVzIHRvIHByZXZl
bnQgdGhlIHNpdHVhdGlvbiB3aGVyZSB1c2luZwpAQCAtNzMsNiArNzMsOCBAQCBzdGF0aWMgSlND
X0RFQ0xBUkVfSE9TVF9GVU5DVElPTihjb25zdHJ1CiBzdGF0aWMgSlNDX0RFQ0xBUkVfQ1VTVE9N
X0dFVFRFUihjYWxsYmFja0dldHRlckpTQVBJV3JhcHBlck9iamVjdENhbGxiYWNrT2JqZWN0KTsK
IHN0YXRpYyBKU0NfREVDTEFSRV9DVVNUT01fR0VUVEVSKHN0YXRpY0Z1bmN0aW9uR2V0dGVySlNB
UElXcmFwcGVyT2JqZWN0Q2FsbGJhY2tPYmplY3QpOwogCitERUZJTkVfVEVNUExBVEVfVklTSVRf
Q0hJTERSRU4odGVtcGxhdGU8PiwgSlNDYWxsYmFja09iamVjdDxKU0FQSVdyYXBwZXJPYmplY3Q+
KTsKKwogdGVtcGxhdGUgPD4gY29uc3QgQ2xhc3NJbmZvIEpTQ2FsbGJhY2tPYmplY3Q8SlNBUElX
cmFwcGVyT2JqZWN0Pjo6c19pbmZvID0geyAiSlNBUElXcmFwcGVyT2JqZWN0IiwgJkJhc2U6OnNf
aW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU0NhbGxiYWNrT2Jq
ZWN0KSB9OwogdGVtcGxhdGUgPD4gY29uc3QgYm9vbCBKU0NhbGxiYWNrT2JqZWN0PEpTQVBJV3Jh
cHBlck9iamVjdD46Om5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOwogCkBAIC0xMjMsNyArMTI1LDgg
QEAgdm9pZCBKU0FQSVdyYXBwZXJPYmplY3Q6OnNldFdyYXBwZWRPYmplYwogICAgIG1fd3JhcHBl
ZE9iamVjdCA9IFtzdGF0aWNfY2FzdDxpZD4od3JhcHBlZE9iamVjdCkgcmV0YWluXTsKIH0KIAot
dm9pZCBKU0FQSVdyYXBwZXJPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBKU0M6
OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQg
SlNBUElXcmFwcGVyT2JqZWN0Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0
b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNBUElXcmFwcGVyT2JqZWN0KiB0aGlzT2JqZWN0ID0gSlND
Ojpqc0Nhc3Q8SlNBUElXcmFwcGVyT2JqZWN0Kj4oY2VsbCk7CiAgICAgQmFzZTo6dmlzaXRDaGls
ZHJlbihjZWxsLCB2aXNpdG9yKTsKQEAgLTEzMyw2ICsxMzYsOCBAQCB2b2lkIEpTQVBJV3JhcHBl
ck9iamVjdDo6dmlzaXRDaGlsZHJlbihKCiAgICAgICAgIHNjYW5FeHRlcm5hbE9iamVjdEdyYXBo
KHZpc2l0b3Iudm0oKSwgdmlzaXRvciwgd3JhcHBlZE9iamVjdCk7CiB9CiAKK0RFRklORV9FWFBP
UlRfVklTSVRfQ0hJTERSRU4oSlNBUElXcmFwcGVyT2JqZWN0KTsKKwogdGVtcGxhdGUgPD4KIElz
b1N1YnNwYWNlKiBKU0NhbGxiYWNrT2JqZWN0PEpTQVBJV3JhcHBlck9iamVjdD46OnN1YnNwYWNl
Rm9ySW1wbChWTSYgdm0sIFN1YnNwYWNlQWNjZXNzIG1vZGUpCiB7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdC5jcHAJKHJldmlzaW9uIDI3MTQ0
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA2LTIw
MTcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAw
Ni0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykg
MjAwNyBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAt
NDEsNiArNDEsOSBAQCBzdGF0aWMgSlNDX0RFQ0xBUkVfQ1VTVE9NX0dFVFRFUihzdGF0aWNGCiBz
dGF0aWMgSlNDX0RFQ0xBUkVfQ1VTVE9NX0dFVFRFUihjYWxsYmFja0dldHRlckpTR2xvYmFsT2Jq
ZWN0Q2FsbGJhY2tPYmplY3QpOwogc3RhdGljIEpTQ19ERUNMQVJFX0NVU1RPTV9HRVRURVIoc3Rh
dGljRnVuY3Rpb25HZXR0ZXJKU0dsb2JhbE9iamVjdENhbGxiYWNrT2JqZWN0KTsKIAorREVGSU5F
X1RFTVBMQVRFX1ZJU0lUX0NISUxEUkVOKHRlbXBsYXRlPD4sIEpTQ2FsbGJhY2tPYmplY3Q8SlNO
b25GaW5hbE9iamVjdD4pOworREVGSU5FX1RFTVBMQVRFX1ZJU0lUX0NISUxEUkVOKHRlbXBsYXRl
PD4sIEpTQ2FsbGJhY2tPYmplY3Q8SlNHbG9iYWxPYmplY3Q+KTsKKwogLy8gRGVmaW5lIHRoZSB0
d28gdHlwZXMgb2YgSlNDYWxsYmFja09iamVjdHMgd2Ugc3VwcG9ydC4KIHRlbXBsYXRlIDw+IGNv
bnN0IENsYXNzSW5mbyBKU0NhbGxiYWNrT2JqZWN0PEpTTm9uRmluYWxPYmplY3Q+OjpzX2luZm8g
PSB7ICJDYWxsYmFja09iamVjdCIsICZCYXNlOjpzX2luZm8sIG51bGxwdHIsIG51bGxwdHIsIENS
RUFURV9NRVRIT0RfVEFCTEUoSlNDYWxsYmFja09iamVjdCkgfTsKIHRlbXBsYXRlIDw+IGNvbnN0
IENsYXNzSW5mbyBKU0NhbGxiYWNrT2JqZWN0PEpTR2xvYmFsT2JqZWN0Pjo6c19pbmZvID0geyAi
Q2FsbGJhY2tHbG9iYWxPYmplY3QiLCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBudWxscHRyLCBD
UkVBVEVfTUVUSE9EX1RBQkxFKEpTQ2FsbGJhY2tPYmplY3QpIH07CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3QuaAkocmV2aXNpb24gMjcxNDQzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTY5LDcgKzY5LDEwIEBAIHB1YmxpYzoKICAgICAgICAgbV9wcml2YXRlUHJvcGVy
dGllcy0+ZGVsZXRlUHJpdmF0ZVByb3BlcnR5KHByb3BlcnR5TmFtZSk7CiAgICAgfQogCi0gICAg
dm9pZCB2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorICAgIERFQ0xBUkVfVklT
SVRfQ0hJTERSRU47CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgorICAgIHZvaWQg
dmlzaXRDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogICAgIHsKICAgICAgICAgSlNQcml2YXRl
UHJvcGVydHlNYXAqIHByb3BlcnRpZXMgPSBtX3ByaXZhdGVQcm9wZXJ0aWVzLmdldCgpOwogICAg
ICAgICBpZiAoIXByb3BlcnRpZXMpCkBAIC0xMDMsNyArMTA2LDggQEAgcHVibGljOgogICAgICAg
ICAgICAgbV9wcm9wZXJ0eU1hcC5yZW1vdmUocHJvcGVydHlOYW1lLmltcGwoKSk7CiAgICAgICAg
IH0KIAotICAgICAgICB2b2lkIHZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisg
ICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+CisgICAgICAgIHZvaWQgdmlzaXRDaGls
ZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogICAgICAgICB7CiAgICAgICAgICAgICBMb2NrSG9sZGVy
IGxvY2tlcihtX2xvY2spOwogICAgICAgICAgICAgZm9yIChhdXRvJiBwYWlyIDogbV9wcm9wZXJ0
eU1hcCkgewpAQCAtMjE2LDEzICsyMjAsNyBAQCBwcml2YXRlOgogICAgIHN0YXRpYyBDYWxsRGF0
YSBnZXRDb25zdHJ1Y3REYXRhKEpTQ2VsbCopOwogICAgIHN0YXRpYyBDYWxsRGF0YSBnZXRDYWxs
RGF0YShKU0NlbGwqKTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBj
ZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKLSAgICB7Ci0gICAgICAgIEpTQ2FsbGJhY2tPYmpl
Y3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNDYWxsYmFja09iamVjdCo+KGNlbGwpOwotICAgICAg
ICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKChzdGF0aWNfY2FzdDxQYXJlbnQqPih0aGlzT2Jq
ZWN0KSksIEpTQ2FsbGJhY2tPYmplY3Q8UGFyZW50Pjo6aW5mbygpKTsKLSAgICAgICAgUGFyZW50
Ojp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwotICAgICAgICB0aGlzT2JqZWN0
LT5tX2NhbGxiYWNrT2JqZWN0RGF0YS0+dmlzaXRDaGlsZHJlbih2aXNpdG9yKTsKLSAgICB9Cisg
ICAgREVDTEFSRV9URU1QTEFURV9WSVNJVF9DSElMRFJFTjsKIAogICAgIHZvaWQgaW5pdChKU0ds
b2JhbE9iamVjdCopOwogIApAQCAtMjQ1LDYgKzI0MywxNiBAQCBwcml2YXRlOgogICAgIGNvbnN0
IENsYXNzSW5mbyogbV9jbGFzc0luZm8geyBudWxscHRyIH07CiB9OwogCit0ZW1wbGF0ZSA8Y2xh
c3MgUGFyZW50PgordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNDYWxsYmFja09i
amVjdDxQYXJlbnQ+Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZp
c2l0b3IpCit7CisgICAgSlNDYWxsYmFja09iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0Nh
bGxiYWNrT2JqZWN0Kj4oY2VsbCk7CisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUygoc3Rh
dGljX2Nhc3Q8UGFyZW50Kj4odGhpc09iamVjdCkpLCBKU0NhbGxiYWNrT2JqZWN0PFBhcmVudD46
OmluZm8oKSk7CisgICAgUGFyZW50Ojp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3Ip
OworICAgIHRoaXNPYmplY3QtPm1fY2FsbGJhY2tPYmplY3REYXRhLT52aXNpdENoaWxkcmVuKHZp
c2l0b3IpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogLy8gaW5jbHVkZSB0aGUgYWN0dWFs
IHRlbXBsYXRlIGNsYXNzIGltcGxlbWVudGF0aW9uCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvQVBJL0pTTWFuYWdlZFZhbHVlLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9BUEkvSlNNYW5hZ2VkVmFsdWUubW0JKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9BUEkvSlNNYW5hZ2VkVmFsdWUubW0JKHdvcmtpbmcgY29weSkKQEAgLTQy
LDcgKzQyLDcgQEAKIGNsYXNzIEpTTWFuYWdlZFZhbHVlSGFuZGxlT3duZXIgZmluYWwgOiBwdWJs
aWMgSlNDOjpXZWFrSGFuZGxlT3duZXIgewogcHVibGljOgogICAgIHZvaWQgZmluYWxpemUoSlND
OjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCkgZmluYWw7Ci0gICAgYm9vbCBp
c1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lk
KiBjb250ZXh0LCBKU0M6OlNsb3RWaXNpdG9yJiwgY29uc3QgY2hhcioqKSBmaW5hbDsKKyAgICBi
b29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4s
IHZvaWQqIGNvbnRleHQsIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYsIGNvbnN0IGNoYXIqKikg
ZmluYWw7CiB9OwogCiBzdGF0aWMgSlNNYW5hZ2VkVmFsdWVIYW5kbGVPd25lciYgbWFuYWdlZFZh
bHVlSGFuZGxlT3duZXIoKQpAQCAtMTgwLDcgKzE4MCw3IEBAIEBpbnRlcmZhY2UgSlNNYW5hZ2Vk
VmFsdWUgKFByaXZhdGVNZXRob2QKIC0gKHZvaWQpZGlzY29ubmVjdFZhbHVlOwogQGVuZAogCi1i
b29sIEpTTWFuYWdlZFZhbHVlSGFuZGxlT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3Rz
KEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6U2xvdFZpc2l0
b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCitib29sIEpTTWFuYWdlZFZhbHVlSGFu
ZGxlT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5r
bm93bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvciwg
Y29uc3QgY2hhcioqIHJlYXNvbikKIHsKICAgICBpZiAoVU5MSUtFTFkocmVhc29uKSkKICAgICAg
ICAgKnJlYXNvbiA9ICJKU01hbmFnZWRWYWx1ZSBpcyBvcGFxdWUgcm9vdCI7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTTWFya2luZ0NvbnN0cmFpbnRQcml2YXRlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTTWFya2luZ0NvbnN0cmFpbnRQ
cml2YXRlLmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQ
SS9KU01hcmtpbmdDb25zdHJhaW50UHJpdmF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDcg
KzM2LDcgQEAgbmFtZXNwYWNlIHsKIEF0b21pYzx1bnNpZ25lZD4gY29uc3RyYWludENvdW50ZXI7
CiAKIHN0cnVjdCBNYXJrZXIgOiBKU01hcmtlciB7Ci0gICAgU2xvdFZpc2l0b3IqIHZpc2l0b3I7
CisgICAgQWJzdHJhY3RTbG90VmlzaXRvciogdmlzaXRvcjsKIH07CiAKIGJvb2wgaXNNYXJrZWQo
SlNNYXJrZXJSZWYgbWFya2VyUmVmLCBKU09iamVjdFJlZiBvYmplY3RSZWYpCkBAIC03NCwxMSAr
NzQsMTEgQEAgdm9pZCBKU0NvbnRleHRHcm91cEFkZE1hcmtpbmdDb25zdHJhaW50KAogICAgICAg
ICB0b0NTdHJpbmcoIkFtYyIsIGNvbnN0cmFpbnRJbmRleCwgIigiLCBSYXdQb2ludGVyKGJpdHdp
c2VfY2FzdDx2b2lkKj4oY29uc3RyYWludENhbGxiYWNrKSksICIpIiksCiAgICAgICAgIHRvQ1N0
cmluZygiQVBJIE1hcmtpbmcgQ29uc3RyYWludCAjIiwgY29uc3RyYWludEluZGV4LCAiICgiLCBS
YXdQb2ludGVyKGJpdHdpc2VfY2FzdDx2b2lkKj4oY29uc3RyYWludENhbGxiYWNrKSksICIsICIs
IFJhd1BvaW50ZXIodXNlckRhdGEpLCAiKSIpLAogICAgICAgICBbY29uc3RyYWludENhbGxiYWNr
LCB1c2VyRGF0YV0KLSAgICAgICAgKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvcikgeworICAgICAg
ICAoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikgewogICAgICAgICAgICAgTWFya2VyIG1h
cmtlcjsKICAgICAgICAgICAgIG1hcmtlci5Jc01hcmtlZCA9IGlzTWFya2VkOwogICAgICAgICAg
ICAgbWFya2VyLk1hcmsgPSBtYXJrOwotICAgICAgICAgICAgbWFya2VyLnZpc2l0b3IgPSAmc2xv
dFZpc2l0b3I7CisgICAgICAgICAgICBtYXJrZXIudmlzaXRvciA9ICZ2aXNpdG9yOwogICAgICAg
ICAgICAgCiAgICAgICAgICAgICBjb25zdHJhaW50Q2FsbGJhY2soJm1hcmtlciwgdXNlckRhdGEp
OwogICAgICAgICB9LApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1ZpcnR1YWxN
YWNoaW5lLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWaXJ0
dWFsTWFjaGluZS5tbQkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L0FQSS9KU1ZpcnR1YWxNYWNoaW5lLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zMTYsNyArMzE2LDgg
QEAgKyAodm9pZClzZXRDcmFzaE9uVk1DcmVhdGlvbjooQk9PTClzaG91bAogCiBAZW5kCiAKLXN0
YXRpYyB2b2lkIHNjYW5FeHRlcm5hbE9iamVjdEdyYXBoKEpTQzo6Vk0mIHZtLCBKU0M6OlNsb3RW
aXNpdG9yJiB2aXNpdG9yLCB2b2lkKiByb290LCBib29sIGxvY2tBY3F1aXJlZCkKK3RlbXBsYXRl
PHR5cGVuYW1lIFZpc2l0b3I+CitzdGF0aWMgdm9pZCBzY2FuRXh0ZXJuYWxPYmplY3RHcmFwaChK
U0M6OlZNJiB2bSwgVmlzaXRvciYgdmlzaXRvciwgdm9pZCogcm9vdCwgYm9vbCBsb2NrQWNxdWly
ZWQpCiB7CiAgICAgQGF1dG9yZWxlYXNlcG9vbCB7CiAgICAgICAgIEpTVmlydHVhbE1hY2hpbmUg
KnZpcnR1YWxNYWNoaW5lID0gW0pTVk1XcmFwcGVyQ2FjaGUgd3JhcHBlckZvckpTQ29udGV4dEdy
b3VwUmVmOnRvUmVmKCZ2bSldOwpAQCAtMzQ4LDEzICszNDksMTcgQEAgc3RhdGljIHZvaWQgc2Nh
bkV4dGVybmFsT2JqZWN0R3JhcGgoSlNDOgogICAgIH0KIH0KIAotdm9pZCBzY2FuRXh0ZXJuYWxP
YmplY3RHcmFwaChKU0M6OlZNJiB2bSwgSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvciwgdm9pZCog
cm9vdCkKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIHNjYW5FeHRlcm5hbE9iamVj
dEdyYXBoKEpTQzo6Vk0mIHZtLCBWaXNpdG9yJiB2aXNpdG9yLCB2b2lkKiByb290KQogewogICAg
IGJvb2wgbG9ja0FjcXVpcmVkID0gZmFsc2U7CiAgICAgc2NhbkV4dGVybmFsT2JqZWN0R3JhcGgo
dm0sIHZpc2l0b3IsIHJvb3QsIGxvY2tBY3F1aXJlZCk7CiB9CiAKLXZvaWQgc2NhbkV4dGVybmFs
UmVtZW1iZXJlZFNldChKU0M6OlZNJiB2bSwgSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3Rl
bXBsYXRlIHZvaWQgc2NhbkV4dGVybmFsT2JqZWN0R3JhcGgoSlNDOjpWTSYsIEpTQzo6U2xvdFZp
c2l0b3ImLCB2b2lkKik7Cit0ZW1wbGF0ZSB2b2lkIHNjYW5FeHRlcm5hbE9iamVjdEdyYXBoKEpT
Qzo6Vk0mLCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImLCB2b2lkKik7CisKK3ZvaWQgc2NhbkV4
dGVybmFsUmVtZW1iZXJlZFNldChKU0M6OlZNJiB2bSwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9y
JiB2aXNpdG9yKQogewogICAgIEBhdXRvcmVsZWFzZXBvb2wgewogICAgICAgICBKU1ZpcnR1YWxN
YWNoaW5lICp2aXJ0dWFsTWFjaGluZSA9IFtKU1ZNV3JhcHBlckNhY2hlIHdyYXBwZXJGb3JKU0Nv
bnRleHRHcm91cFJlZjp0b1JlZigmdm0pXTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9B
UEkvSlNWaXJ0dWFsTWFjaGluZUludGVybmFsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL0FQSS9KU1ZpcnR1YWxNYWNoaW5lSW50ZXJuYWwuaAkocmV2aXNpb24gMjcxNDQz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1ZpcnR1YWxNYWNoaW5lSW50ZXJuYWwu
aAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsOCBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIGNs
YXNzIFZNOwotY2xhc3MgU2xvdFZpc2l0b3I7CisvL2NsYXNzIFNsb3RWaXNpdG9yOworY2xhc3Mg
QWJzdHJhY3RTbG90VmlzaXRvcjsKIH0KIAogI2lmIGRlZmluZWQoX19PQkpDX18pCkBAIC01NCw4
ICs1NSw4IEBAIEpTQ29udGV4dEdyb3VwUmVmIGdldEdyb3VwRnJvbVZpcnR1YWxNYWMKIAogI2Vu
ZGlmIC8vIGRlZmluZWQoX19PQkpDX18pCiAKLXZvaWQgc2NhbkV4dGVybmFsT2JqZWN0R3JhcGgo
SlNDOjpWTSYsIEpTQzo6U2xvdFZpc2l0b3ImLCB2b2lkKiByb290KTsKLXZvaWQgc2NhbkV4dGVy
bmFsUmVtZW1iZXJlZFNldChKU0M6OlZNJiwgSlNDOjpTbG90VmlzaXRvciYpOwordGVtcGxhdGU8
dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCBzY2FuRXh0ZXJuYWxPYmplY3RHcmFwaChKU0M6OlZNJiwg
VmlzaXRvciYsIHZvaWQqIHJvb3QpOwordm9pZCBzY2FuRXh0ZXJuYWxSZW1lbWJlcmVkU2V0KEpT
Qzo6Vk0mLCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKTsKIAogI2VuZGlmIC8vIEpTQ19PQkpD
X0FQSV9FTkFCTEVECiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvTWFya2VkSlNW
YWx1ZVJlZkFycmF5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJ
L01hcmtlZEpTVmFsdWVSZWZBcnJheS5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9BUEkvTWFya2VkSlNWYWx1ZVJlZkFycmF5LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDYsNyArNDYsOSBAQCBNYXJrZWRKU1ZhbHVlUmVmQXJyYXk6On5NYXJrZWRKU1ZhbHVl
UmVmCiAgICAgICAgIHJlbW92ZSgpOwogfQogCi12b2lkIE1hcmtlZEpTVmFsdWVSZWZBcnJheTo6
dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3RlbXBsYXRlPHR5cGVuYW1l
IFZpc2l0b3I+CisvL3ZvaWQgTWFya2VkSlNWYWx1ZVJlZkFycmF5Ojp2aXNpdEFnZ3JlZ2F0ZShW
aXNpdG9yJiB2aXNpdG9yKQordm9pZCBNYXJrZWRKU1ZhbHVlUmVmQXJyYXk6OnZpc2l0QWdncmVn
YXRlMShBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTVmFsdWVSZWYqIGJ1
ZmZlciA9IGRhdGEoKTsKICAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gMDsgaW5kZXggPCBtX3Np
emU7ICsraW5kZXgpIHsKQEAgLTYyLDQgKzY0LDcgQEAgdm9pZCBNYXJrZWRKU1ZhbHVlUmVmQXJy
YXk6OnZpc2l0QWdncmVnYQogICAgIH0KIH0KIAorLy90ZW1wbGF0ZSB2b2lkIE1hcmtlZEpTVmFs
dWVSZWZBcnJheTo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImKTsKKy8vdGVtcGxhdGUgdm9p
ZCBNYXJrZWRKU1ZhbHVlUmVmQXJyYXk6OnZpc2l0QWdncmVnYXRlKERlYnVnU2xvdFZpc2l0b3Im
KTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJ
L01hcmtlZEpTVmFsdWVSZWZBcnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9BUEkvTWFya2VkSlNWYWx1ZVJlZkFycmF5LmgJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvTWFya2VkSlNWYWx1ZVJlZkFycmF5LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTYyLDcgKzYyLDggQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9pbmxpbmVC
dWZmZXI7CiAgICAgfQogCi0gICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYpOwor
Ly8gICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCB2aXNpdEFnZ3JlZ2F0ZShWaXNp
dG9yJik7CisgICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZTEoQWJzdHJhY3RTbG90VmlzaXRvciYpOwog
CiBwcml2YXRlOgogICAgIHVuc2lnbmVkIG1fc2l6ZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9BUEkvZ2xpYi9KU0FQSVdyYXBwZXJPYmplY3RHTGliLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNBUElXcmFwcGVyT2JqZWN0R0xpYi5jcHAJ
KHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0FQ
SVdyYXBwZXJPYmplY3RHTGliLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAog
I2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkpTQVBJV3JhcHBlck9iamVjdC5oIgogCisj
aW5jbHVkZSAiQWJzdHJhY3RTbG90VmlzaXRvci5oIgogI2luY2x1ZGUgIkpTQ0dMaWJXcmFwcGVy
T2JqZWN0LmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTQ2FsbGJhY2tP
YmplY3QuaCIKQEAgLTM2LDcgKzM3LDggQEAKIGNsYXNzIEpTQVBJV3JhcHBlck9iamVjdEhhbmRs
ZU93bmVyIGZpbmFsIDogcHVibGljIEpTQzo6V2Vha0hhbmRsZU93bmVyIHsKIHB1YmxpYzoKICAg
ICB2b2lkIGZpbmFsaXplKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqKSBmaW5hbDsK
LSAgICBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5r
bm93bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6U2xvdFZpc2l0b3ImLCBjb25zdCBjaGFyKiopIGZp
bmFsOworLy8gICAgIGJvb2wgaXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8
SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCwgSlNDOjpTbG90VmlzaXRvciYsIGNvbnN0IGNo
YXIqKikgZmluYWw7CisgICAgYm9vbCBpc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6Okhh
bmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0LCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0
b3ImLCBjb25zdCBjaGFyKiopIGZpbmFsOwogfTsKIAogc3RhdGljIEpTQVBJV3JhcHBlck9iamVj
dEhhbmRsZU93bmVyKiBqc0FQSVdyYXBwZXJPYmplY3RIYW5kbGVPd25lcigpCkBAIC01NSw3ICs1
Nyw4IEBAIHZvaWQgSlNBUElXcmFwcGVyT2JqZWN0SGFuZGxlT3duZXI6OmZpbmEKICAgICBKU0M6
OldlYWtTZXQ6OmRlYWxsb2NhdGUoSlNDOjpXZWFrSW1wbDo6YXNXZWFrSW1wbChoYW5kbGUuc2xv
dCgpKSk7CiB9CiAKLWJvb2wgSlNBUElXcmFwcGVyT2JqZWN0SGFuZGxlT3duZXI6OmlzUmVhY2hh
YmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lk
KiwgSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqKQorLy8gYm9vbCBKU0FQ
SVdyYXBwZXJPYmplY3RIYW5kbGVPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlND
OjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBKU0M6OlNsb3RWaXNpdG9yJiB2
aXNpdG9yLCBjb25zdCBjaGFyKiopCitib29sIEpTQVBJV3JhcHBlck9iamVjdEhhbmRsZU93bmVy
Ojppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhh
bmRsZSwgdm9pZCosIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hh
cioqKQogewogICAgIEpTQzo6SlNBUElXcmFwcGVyT2JqZWN0KiB3cmFwcGVyT2JqZWN0ID0gSlND
Ojpqc0Nhc3Q8SlNDOjpKU0FQSVdyYXBwZXJPYmplY3QqPihoYW5kbGUuZ2V0KCkuYXNDZWxsKCkp
OwogICAgIC8vIFdlIHVzZSB0aGUgSlNHbG9iYWxPYmplY3Qgd2hlbiBwcm9jZXNzaW5nIHdlYWsg
aGFuZGxlcyB0byBwcmV2ZW50IHRoZSBzaXR1YXRpb24gd2hlcmUgdXNpbmcKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2lu
ZyBjb3B5KQpAQCAtMTkwOCw2ICsxOTA4LDcgQEAKIAkJRTNGRjc1MzMxRDlDRUExODAwQzdFMTZE
IC8qIERPTUpJVEdldHRlclNldHRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRTNGRjc1MkYxRDlDRUExMjAwQzdFMTZEIC8qIERPTUpJVEdldHRlclNl
dHRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CUU0OURDMTZDMTJFRjI5NEUwMDE4NEExRiAvKiBTb3VyY2VQcm92aWRlckNhY2hlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDlEQzE1MTEyRUYyNzIy
MDAxODRBMUYgLyogU291cmNlUHJvdmlkZXJDYWNoZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUU0OURDMTZEMTJFRjI5NTMwMDE4NEExRiAvKiBT
b3VyY2VQcm92aWRlckNhY2hlSXRlbS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRTQ5REMxNDkxMkVGMjYxQTAwMTg0QTFGIC8qIFNvdXJjZVByb3ZpZGVy
Q2FjaGVJdGVtLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKKwkJRkUwNDE1NTMyNTJFQzA3MzAwOTFFQjVEIC8qIFNsb3RWaXNpdG9yTWFjcm9zLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTA0MTU1MjI1MkVD
MDczMDA5MUVCNUQgLyogU2xvdFZpc2l0b3JNYWNyb3MuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlGRTA1RkFGRDFGRTRDRURBMDAwOTMyMzAgLyog
RGVwcmVjYXRlZEluc3BlY3RvclZhbHVlcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA5OTJENkExMTFGQkQ0OTFEMDAwMjQ1RjQgLyogRGVwcmVjYXRl
ZEluc3BlY3RvclZhbHVlcy5jcHAgKi87IH07CiAJCUZFMDg2QkNBMjEyM0RFRkIwMDNGMjkyOSAv
KiBFbnRyeUZyYW1lLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBGRTA4NkJDOTIxMjNERUZBMDAzRjI5MjkgLyogRW50cnlGcmFtZS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUZFMEQ0QTA2MUFCOEREMEEw
MDJGNTRCRiAvKiBFeGVjdXRpb25UaW1lTGltaXRUZXN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFMEQ0QTA0MUFCOEREMEEwMDJGNTRCRiAvKiBF
eGVjdXRpb25UaW1lTGltaXRUZXN0LmNwcCAqLzsgfTsKQEAgLTE5MzAsNiArMTkzMSw4IEBACiAJ
CUZFMUUyQzNGMjI0MERENTgwMEY2QjcyOSAvKiBNYWNyb0Fzc2VtYmxlckFSTTY0RS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUxRTJDM0UyMjQwRDMw
QjAwRjZCNzI5IC8qIE1hY3JvQXNzZW1ibGVyQVJNNjRFLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRkUxRTJDNDAyMjQwREQ2MjAwRjZCNzI5IC8q
IEFSTTY0RUFzc2VtYmxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRkUxRTJDM0QyMjQwRDJGNjAwRjZCNzI5IC8qIEFSTTY0RUFzc2VtYmxlci5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUZFMjBDRTlF
MTVGMDRBOTUwMERGMzQzMCAvKiBMTEludENMb29wLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTIwQ0U5QzE1RjA0QTk1MDBERjM0MzAgLyogTExJbnRD
TG9vcC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJ
CUZFMjg3RDAyMjUyRkIyRTgwMEQ3MjNGOSAvKiBEZWJ1Z1Nsb3RWaXNpdG9yLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTI4N0QwMTI1MkZCMkU4MDBE
NzIzRjkgLyogRGVidWdTbG90VmlzaXRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CisJCUZFMjg3RDA0MjUyRkJGRUIwMEQ3MjNGOSAvKiBEZWJ1Z1Ns
b3RWaXNpdG9ySW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRkUyODdEMDMyNTJGQkZFQTAwRDcyM0Y5IC8qIERlYnVnU2xvdFZpc2l0b3JJbmxp
bmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
RkUyQTg3NjAxRjAyMzgxNjAwRUIzMUIyIC8qIE1pbmltdW1SZXNlcnZlZFpvbmVTaXplLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTJBODc1RjFGMDIz
ODE2MDBFQjMxQjIgLyogTWluaW11bVJlc2VydmVkWm9uZVNpemUuaCAqLzsgfTsKIAkJRkUzMDIy
RDMxRTNENzNBNTAwQkFDNDkzIC8qIFNpZ2lsbENyYXNoQW5hbHl6ZXIuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFMzAyMkQxMUUzRDczOTYwMEJBQzQ5
MyAvKiBTaWdpbGxDcmFzaEFuYWx5emVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJRkUzMDIyRDcxRTQyODU3MzAwQkFDNDkzIC8qIFZNSW5zcGVj
dG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTMw
MjJENTFFNDI4NTY3MDBCQUM0OTMgLyogVk1JbnNwZWN0b3IuaCAqLzsgfTsKQEAgLTE5NjcsNiAr
MTk3MCw4IEBACiAJCUZFODBDMTk3MUQ3NzVDREQwMDg1MTBDMCAvKiBDYXRjaFNjb3BlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTgwQzE5NjFENzc1
QjI3MDA4NTEwQzAgLyogQ2F0Y2hTY29wZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCUZFOERFNTRCMjNBQzFEQUQwMDVDOTE0MiAvKiBDYWNoZWFi
bGVJZGVudGlmaWVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBGRThERTU0QTIzQUMxREFEMDA1QzkxNDIgLyogQ2FjaGVhYmxlSWRlbnRpZmllci5oICov
OyB9OwogCQlGRThERTU0RDIzQUMxRTg2MDA1QzkxNDIgLyogQ2FjaGVhYmxlSWRlbnRpZmllcklu
bGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZF
OERFNTRDMjNBQzFFODYwMDVDOTE0MiAvKiBDYWNoZWFibGVJZGVudGlmaWVySW5saW5lcy5oICov
OyB9OworCQlGRTkxMkI0RjI1MzExOTMzMDBGQUJEREYgLyogQWJzdHJhY3RTbG90VmlzaXRvci5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkU5MTJCNEUy
NTMxMTkzMzAwRkFCRERGIC8qIEFic3RyYWN0U2xvdFZpc2l0b3IuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlGRTkxMkI1MTI1MzExQUQxMDBGQUJE
REYgLyogQWJzdHJhY3RTbG90VmlzaXRvcklubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFOTEyQjUwMjUzMTFBRDEwMEZBQkRERiAvKiBBYnN0
cmFjdFNsb3RWaXNpdG9ySW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCUZFOTlCMjQ5MUMyNEMzRDMwMEM4MjE1OSAvKiBKSVROZWdHZW5l
cmF0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZF
OTlCMjQ4MUMyNEI2RDMwMEM4MjE1OSAvKiBKSVROZWdHZW5lcmF0b3IuaCAqLzsgfTsKIAkJRkVB
MDg2MjAxODJCN0EwNDAwRjZEODUxIC8qIEJyZWFrcG9pbnQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFQTA4NjFFMTgyQjdBMDQwMEY2RDg1MSAvKiBC
cmVha3BvaW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJRkVBMDg2MjExODJCN0EwNDAwRjZEODUxIC8qIERlYnVnZ2VyUHJpbWl0aXZlcy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkVBMDg2MUYxODJC
N0EwNDAwRjZEODUxIC8qIERlYnVnZ2VyUHJpbWl0aXZlcy5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC01MTk3LDYgKzUyMDIsNyBAQAogCQlGNjky
QTg4NzAyNTU1OTdEMDFGRjYwRjcgLyogSlNDSlNWYWx1ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0NKU1ZhbHVlLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB9OwogCQlGNzM5MjY5MThEQzY0MzMw
QUZDREYwRDcgLyogSlNTb3VyY2VDb2RlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEpTU291cmNlQ29kZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUZFMDAyNjIyMjNGM0FGMzMwMDNBMzU4RiAvKiBXZWJBc3NlbWJseS5hc20gKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmFzbS5hc207
IG5hbWUgPSBXZWJBc3NlbWJseS5hc207IHBhdGggPSBsbGludC9XZWJBc3NlbWJseS5hc207IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZFMDQxNTUyMjUyRUMwNzMwMDkxRUI1RCAvKiBT
bG90VmlzaXRvck1hY3Jvcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTbG90
VmlzaXRvck1hY3Jvcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTA4NkJDOTIx
MjNERUZBMDAzRjI5MjkgLyogRW50cnlGcmFtZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBFbnRyeUZyYW1lLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFMEQ0
QTA0MUFCOEREMEEwMDJGNTRCRiAvKiBFeGVjdXRpb25UaW1lTGltaXRUZXN0LmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEV4ZWN1dGlvblRpbWVMaW1pdFRlc3QuY3Bw
OyBwYXRoID0gQVBJL3Rlc3RzL0V4ZWN1dGlvblRpbWVMaW1pdFRlc3QuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlGRTBENEEwNTFBQjhERDBBMDAyRjU0QkYgLyogRXhlY3V0aW9u
VGltZUxpbWl0VGVzdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBFeGVjdXRp
b25UaW1lTGltaXRUZXN0Lmg7IHBhdGggPSBBUEkvdGVzdHMvRXhlY3V0aW9uVGltZUxpbWl0VGVz
dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNTIxMCw2ICs1MjE2LDcgQEAKIAkJ
RkUxMjIwMjUxQkU3RjU2NDAwMzlFNkYyIC8qIEpJVEFkZEdlbmVyYXRvci5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKSVRBZGRHZW5lcmF0b3IuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlGRTEyMjAyNjFCRTdGNTY0MDAzOUU2RjIgLyogSklUQWRk
R2VuZXJhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpJVEFkZEdlbmVy
YXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTE0MDkwNjIwNTZGM0ZFMDBD
RkUzMTggLyogTmF0aXZlRnVuY3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gTmF0aXZlRnVuY3Rpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkUxNzhD
QzMyNTVGMjA1NTAwRkZENjc3IC8qIEFic3RyYWN0U2xvdFZpc2l0b3IuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQWJzdHJhY3RTbG90VmlzaXRvci5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFMTg3OUZGMUJGQkM3M0MwMDM4QkJDQSAvKiBKSVRN
dWxHZW5lcmF0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSklU
TXVsR2VuZXJhdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkUxODdBMDAx
QkZCQzczQzAwMzhCQkNBIC8qIEpJVE11bEdlbmVyYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBKSVRNdWxHZW5lcmF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJRkUxODdBMEExQzAyMjkyMzAwMzhCQkNBIC8qIEpJVERpdkdlbmVyYXRvci5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKSVREaXZHZW5lcmF0b3IuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNTIzMSw2ICs1MjM4LDggQEAKIAkJRkUxRTJD
M0UyMjQwRDMwQjAwRjZCNzI5IC8qIE1hY3JvQXNzZW1ibGVyQVJNNjRFLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1hY3JvQXNzZW1ibGVyQVJNNjRFLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUZFMjBDRTlCMTVGMDRBOTUwMERGMzQzMCAvKiBMTEludENMb29w
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IExMSW50Q0xvb3AuY3Bw
OyBwYXRoID0gbGxpbnQvTExJbnRDTG9vcC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUZFMjBDRTlDMTVGMDRBOTUwMERGMzQzMCAvKiBMTEludENMb29wLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IExMSW50Q0xvb3AuaDsgcGF0aCA9IGxsaW50L0xMSW50Q0xv
b3AuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkUyODdEMDEyNTJGQjJFODAwRDcy
M0Y5IC8qIERlYnVnU2xvdFZpc2l0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gRGVidWdTbG90VmlzaXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRTI4
N0QwMzI1MkZCRkVBMDBENzIzRjkgLyogRGVidWdTbG90VmlzaXRvcklubGluZXMuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGVidWdTbG90VmlzaXRvcklubGluZXMuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkUyQTg3NUYxRjAyMzgxNjAwRUIzMUIyIC8qIE1p
bmltdW1SZXNlcnZlZFpvbmVTaXplLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1pbmltdW1SZXNlcnZlZFpv
bmVTaXplLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFMkU2QTdBMUQ2RUE1RkUw
MDYwRjg5NiAvKiBUaHJvd1Njb3BlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFRocm93U2NvcGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTMw
MjJEMDFFM0Q3Mzk2MDBCQUM0OTMgLyogU2lnaWxsQ3Jhc2hBbmFseXplci5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTaWdpbGxDcmFzaEFuYWx5emVyLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTUzMDQsNiArNTMxMyw4IEBACiAJCUZFOERFNTRD
MjNBQzFFODYwMDVDOTE0MiAvKiBDYWNoZWFibGVJZGVudGlmaWVySW5saW5lcy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDYWNoZWFibGVJZGVudGlmaWVySW5saW5lcy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRThERTU0RTIzQUMzQThFMDA1QzkxNDIgLyog
Q2FjaGVhYmxlSWRlbnRpZmllci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDYWNoZWFibGVJZGVu
dGlmaWVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkU5MEJCM0ExQjdDRjY0
RTAwNkIzRjAzIC8qIFZNSW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBWTUlubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkU5MTJCNEUyNTMx
MTkzMzAwRkFCRERGIC8qIEFic3RyYWN0U2xvdFZpc2l0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gQWJzdHJhY3RTbG90VmlzaXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlGRTkxMkI1MDI1MzExQUQxMDBGQUJEREYgLyogQWJzdHJhY3RTbG90VmlzaXRv
cklubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQWJzdHJhY3RTbG90
VmlzaXRvcklubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkU5OEI1QjYx
QkI5QUUxMTAwNzNFN0E2IC8qIEpJVFN1YkdlbmVyYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBKSVRTdWJHZW5lcmF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJRkU5OUIyNDcxQzI0QjZEMzAwQzgyMTU5IC8qIEpJVE5lZ0dlbmVyYXRvci5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKSVROZWdHZW5lcmF0b3IuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTk5QjI0ODFDMjRCNkQzMDBDODIxNTkgLyog
SklUTmVnR2VuZXJhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpJVE5l
Z0dlbmVyYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNjI1Myw2ICs2MjY0
LDkgQEAKIAkJMTQyRTMxMkExMzRGRjBBNjAwQUZBREI1IC8qIGhlYXAgKi8gPSB7CiAJCQlpc2Eg
PSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCUZFMTc4Q0MzMjU1RjIwNTUwMEZGRDY3
NyAvKiBBYnN0cmFjdFNsb3RWaXNpdG9yLmNwcCAqLywKKwkJCQlGRTkxMkI0RTI1MzExOTMzMDBG
QUJEREYgLyogQWJzdHJhY3RTbG90VmlzaXRvci5oICovLAorCQkJCUZFOTEyQjUwMjUzMTFBRDEw
MEZBQkRERiAvKiBBYnN0cmFjdFNsb3RWaXNpdG9ySW5saW5lcy5oICovLAogCQkJCTBGRUMzQzUw
MUYzM0E0MTYwMEY1OUI2QyAvKiBBbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmNwcCAqLywKIAkJCQkw
RkVDM0M1MTFGMzNBNDE2MDBGNTlCNkMgLyogQWxpZ25lZE1lbW9yeUFsbG9jYXRvci5oICovLAog
CQkJCTBGQTc2MjBBMURCOTU5RjYwMEI3QTJGRCAvKiBBbGxvY2F0aW5nU2NvcGUuaCAqLywKQEAg
LTYyODgsNiArNjMwMiw4IEBACiAJCQkJMEY0MTU0NUExRkQyMEIxRjAwMUI1OEY2IC8qIENvbnN0
cmFpbnRDb25jdXJyZW5jeS5oICovLAogCQkJCTBGNEQ4QzczMUZDN0E5NzQwMDFEMzJBQyAvKiBD
b25zdHJhaW50UGFyYWxsZWxpc20uaCAqLywKIAkJCQkwRjdERjEyRjFFMjk3MEQ1MDA5NTk1MUIg
LyogQ29uc3RyYWludFZvbGF0aWxpdHkuaCAqLywKKwkJCQlGRTI4N0QwMTI1MkZCMkU4MDBENzIz
RjkgLyogRGVidWdTbG90VmlzaXRvci5oICovLAorCQkJCUZFMjg3RDAzMjUyRkJGRUEwMEQ3MjNG
OSAvKiBEZWJ1Z1Nsb3RWaXNpdG9ySW5saW5lcy5oICovLAogCQkJCTJBN0E1OEVFMTgwOEE0QzQw
MDIwQkRGNyAvKiBEZWZlckdDLmNwcCAqLywKIAkJCQkwRjEzNkQ0QjE3NEFENjlCMDA3NUIzNTQg
LyogRGVmZXJHQy5oICovLAogCQkJCTBGQkI3M0JBMURFRjg2NDQwMDJDMDA5RSAvKiBEZWxldGVB
bGxDb2RlRWZmb3J0LmggKi8sCkBAIC02NDA5LDYgKzY0MjUsNyBAQAogCQkJCUMyMjU0OTQyMTVG
N0RCQUEwMDY1RTg5OCAvKiBTbG90VmlzaXRvci5jcHAgKi8sCiAJCQkJMTRCQTc4RjAxM0FBQjg4
RjAwNUI3QzJDIC8qIFNsb3RWaXNpdG9yLmggKi8sCiAJCQkJMEZDQjQwODUxNUMwQTNDMzAwNDg5
MzJCIC8qIFNsb3RWaXNpdG9ySW5saW5lcy5oICovLAorCQkJCUZFMDQxNTUyMjUyRUMwNzMwMDkx
RUI1RCAvKiBTbG90VmlzaXRvck1hY3Jvcy5oICovLAogCQkJCTBGREU4N0ZBMURGRTZFNTAwMDY0
QzM5MCAvKiBTcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyLmNwcCAqLywKIAkJCQkwRkRFODdGQjFE
RkU2RTUwMDA2NEMzOTAgLyogU3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlci5oICovLAogCQkJCTBG
NEY4Mjg5MUUzMUI5NzEwMDc1MTg0QyAvKiBTdG9jaGFzdGljU3BhY2VUaW1lTXV0YXRvclNjaGVk
dWxlci5jcHAgKi8sCkBAIC05MjU0LDYgKzkyNzEsNyBAQAogCQkJCTUyNjc4RjhGMUEwMzEwMDkw
MDZBMzA2RCAvKiBCYXNpY0Jsb2NrTG9jYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTE0N0I4
M0FDMEU2REI4QzkwMDQ3NzVBNCAvKiBCYXRjaGVkVHJhbnNpdGlvbk9wdGltaXplci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJODY5NzZFNUYxRkEzRThCQzAwRTdDNEUxIC8qIEJpZ0ludENvbnN0cnVj
dG9yLmggaW4gSGVhZGVycyAqLywKKwkJCQlGRTA0MTU1MzI1MkVDMDczMDA5MUVCNUQgLyogU2xv
dFZpc2l0b3JNYWNyb3MuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2NjczOUQyMTNCRkRFNzEwMDIz
RDg3QyAvKiBCaWdJbnRlZ2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjE4MTY3NzFGQjc5MjQy
MDBFQ0M0RUMgLyogQmlnSW50T2JqZWN0LmggaW4gSGVhZGVycyAqLywKIAkJCQk4Njk3NkU1RTFG
QTNFOEI2MDBFN0M0RTEgLyogQmlnSW50UHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywKQEAgLTk1
MzEsNiArOTU0OSw3IEBACiAJCQkJMEZEODJFNTcxNDFEQUYxMDAwMTc5Qzk0IC8qIERGR09TUkVu
dHJ5LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkQ4QTMyNjE3RDUxRjU3MDBDQTJDNDAgLyogREZH
T1NSRW50cnlwb2ludENyZWF0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQzA5NzZB
MTQ2OEE2RjcwMENGMjQ0MiAvKiBERkdPU1JFeGl0LmggaW4gSGVhZGVycyAqLywKKwkJCQlGRTkx
MkI0RjI1MzExOTMzMDBGQUJEREYgLyogQWJzdHJhY3RTbG90VmlzaXRvci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEYyMzVCRUMxNzE3OEU3MzAwNjkwQzdGIC8qIERGR09TUkV4aXRCYXNlLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRkZCOTIxQzE2RDAyRjExMDA1NUE1REIgLyogREZHT1NSRXhpdENv
bXBpbGF0aW9uSW5mby5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY3MDI1QUExNzE0QjBGQzAwMzgy
QzBFIC8qIERGR09TUkV4aXRDb21waWxlckNvbW1vbi5oIGluIEhlYWRlcnMgKi8sCkBAIC05ODE2
LDYgKzk4MzUsNyBAQAogCQkJCUE1MTNFNUJFMTg1QkZBQ0MwMDdFOTVBRCAvKiBJbmplY3RlZFNj
cmlwdEhvc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1MTNFNUNCMTg1Rjk2MjQwMDdFOTVBRCAv
KiBJbmplY3RlZFNjcmlwdE1hbmFnZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1ODQwRTIxMTg3
QjdCODYwMDg0M0IxMCAvKiBJbmplY3RlZFNjcmlwdE1vZHVsZS5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJRkUyODdEMDIyNTJGQjJFODAwRDcyM0Y5IC8qIERlYnVnU2xvdFZpc2l0b3IuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUE1MTNFNUM3MTg1Rjk0NDYwMDdFOTVBRCAvKiBJbmplY3RlZFNjcmlwdFNv
dXJjZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTk1OUU5MzIxQkQxODI3OTAwMUFBNDEzIC8qIGlu
bGluZS1hbmQtbWluaWZ5LXN0eWxlc2hlZXRzLWFuZC1zY3JpcHRzLnB5IGluIEhlYWRlcnMgKi8s
CiAJCQkJNzkwNUJCNjkxRDEyMDUwRTAwMTlGRTU3IC8qIElubGluZUFjY2Vzcy5oIGluIEhlYWRl
cnMgKi8sCkBAIC0xMDEyMCw2ICsxMDE0MCw3IEBACiAJCQkJNzk1QUM2MTgyMEEyMzU1RTAwNTJD
NzZDIC8qIEpTVmlydHVhbE1hY2hpbmVQcml2YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0NB
M0FFODE3REE0MUFFMDA2NTM4QUYgLyogSlNXZWFrTWFwLmggaW4gSGVhZGVycyAqLywKIAkJCQlB
NzQ4MkU5MzExNkE3Q0FEMDAzQjA3MTIgLyogSlNXZWFrT2JqZWN0TWFwUmVmSW50ZXJuYWwuaCBp
biBIZWFkZXJzICovLAorCQkJCUZFOTEyQjUxMjUzMTFBRDEwMEZBQkRERiAvKiBBYnN0cmFjdFNs
b3RWaXNpdG9ySW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc0ODJCOTMxMTY3MTE0NzAw
M0IwNzEyIC8qIEpTV2Vha09iamVjdE1hcFJlZlByaXZhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTUzOUJGQkIwMjJBRDNDREMwMDIzRjRDMCAvKiBKU1dlYWtPYmplY3RSZWYuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGMEIyODZCMUVCOEU2Q0YwMDBFQjVEMiAvKiBKU1dlYWtQcml2YXRlLmggaW4g
SGVhZGVycyAqLywKQEAgLTEwMTkxLDYgKzEwMjEyLDcgQEAKIAkJCQlBNzRERUY5NDE4MkQ5OTE0
MDA1MjJDMjIgLyogTWFwSXRlcmF0b3JQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3
MDA4NzNFMTdDQkU4RDMwMEMzRTY0MyAvKiBNYXBQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovLAog
CQkJCTE0MkQ2RjA5MTM1MzlBMjgwMEIwMkU4NiAvKiBNYXJrZWRCbG9jay5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJRkUyODdEMDQyNTJGQkZFQjAwRDcyM0Y5IC8qIERlYnVnU2xvdFZpc2l0b3JJbmxp
bmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjdDNUZCODFEODg4QTBDMDA0NEY1RTIgLyogTWFy
a2VkQmxvY2tJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDE0NDhDQjEzQTE3NkVDMDBG
NUJBMUEgLyogTWFya2VkQmxvY2tTZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUUzRDM1MTVGMjQx
Qjg5RDcwMDhEQzE2RSAvKiBNYXJrZWRKU1ZhbHVlUmVmQXJyYXkuaCBpbiBIZWFkZXJzICovLApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvd2tidWlsdGlucy9idWlsdGluc19n
ZW5lcmF0ZV9pbnRlcm5hbHNfd3JhcHBlcl9oZWFkZXIucHkKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvd2tidWlsdGlucy9idWlsdGluc19nZW5lcmF0ZV9pbnRl
cm5hbHNfd3JhcHBlcl9oZWFkZXIucHkJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9TY3JpcHRzL3drYnVpbHRpbnMvYnVpbHRpbnNfZ2VuZXJhdGVfaW50ZXJuYWxz
X3dyYXBwZXJfaGVhZGVyLnB5CSh3b3JraW5nIGNvcHkpCkBAIC05Myw3ICs5Myw3IEBAIGNsYXNz
IEJ1aWx0aW5zSW50ZXJuYWxzV3JhcHBlckhlYWRlckdlbmUKIAogICAgIGRlZiBnZW5lcmF0ZV9t
ZXRob2RzKHNlbGYpOgogICAgICAgICByZXR1cm4gIiIiCi0gICAgdm9pZCB2aXNpdChKU0M6OlNs
b3RWaXNpdG9yJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCB2aXNpdChW
aXNpdG9yJik7CiAgICAgdm9pZCBpbml0aWFsaXplKEpTRE9NR2xvYmFsT2JqZWN0Jik7CiAiIiIK
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvd2tidWlsdGlucy9idWlsdGlu
c19nZW5lcmF0ZV9pbnRlcm5hbHNfd3JhcHBlcl9pbXBsZW1lbnRhdGlvbi5weQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy93a2J1aWx0aW5zL2J1aWx0aW5zX2dl
bmVyYXRlX2ludGVybmFsc193cmFwcGVyX2ltcGxlbWVudGF0aW9uLnB5CShyZXZpc2lvbiAyNzE0
NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy93a2J1aWx0aW5zL2J1aWx0aW5z
X2dlbmVyYXRlX2ludGVybmFsc193cmFwcGVyX2ltcGxlbWVudGF0aW9uLnB5CSh3b3JraW5nIGNv
cHkpCkBAIC0xMjAsMTMgKzEyMCwxNiBAQCBjbGFzcyBCdWlsdGluc0ludGVybmFsc1dyYXBwZXJJ
bXBsZW1lbnRhCiAgICAgICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMpCiAKICAgICBkZWYgZ2Vu
ZXJhdGVfdmlzaXRfbWV0aG9kKHNlbGYpOgotICAgICAgICBsaW5lcyA9IFsidm9pZCBKU0J1aWx0
aW5JbnRlcm5hbEZ1bmN0aW9uczo6dmlzaXQoSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikiLAor
ICAgICAgICBsaW5lcyA9IFsidGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4iLAorICAgICAgICAg
ICAgICAgICAidm9pZCBKU0J1aWx0aW5JbnRlcm5hbEZ1bmN0aW9uczo6dmlzaXQoVmlzaXRvciYg
dmlzaXRvcikiLAogICAgICAgICAgICAgICAgICAieyJdCiAgICAgICAgIGZvciBvYmplY3QgaW4g
c2VsZi5pbnRlcm5hbHM6CiAgICAgICAgICAgICB2aXNpdCA9ICIgICAgJXMudmlzaXQodmlzaXRv
cik7IiAlIHNlbGYubWVtYmVyX25hbWUob2JqZWN0KQogICAgICAgICAgICAgbGluZXMuYXBwZW5k
KEJ1aWx0aW5zR2VuZXJhdG9yLndyYXBfd2l0aF9ndWFyZChvYmplY3QuYW5ub3RhdGlvbnMuZ2V0
KCdjb25kaXRpb25hbCcpLCB2aXNpdCkpCiAgICAgICAgIGxpbmVzLmFwcGVuZCgiICAgIFVOVVNF
RF9QQVJBTSh2aXNpdG9yKTsiKQogICAgICAgICBsaW5lcy5hcHBlbmQoIn1cbiIpCisgICAgICAg
IGxpbmVzLmFwcGVuZCgidGVtcGxhdGUgdm9pZCBKU0J1aWx0aW5JbnRlcm5hbEZ1bmN0aW9uczo6
dmlzaXQoQWJzdHJhY3RTbG90VmlzaXRvciYpOyIpCisgICAgICAgIGxpbmVzLmFwcGVuZCgidGVt
cGxhdGUgdm9pZCBKU0J1aWx0aW5JbnRlcm5hbEZ1bmN0aW9uczo6dmlzaXQoU2xvdFZpc2l0b3Im
KTtcbiIpCiAgICAgICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMpCiAKICAgICBkZWYgX2dlbmVy
YXRlX2luaXRpYWxpemVfc3RhdGljX2dsb2JhbHMoc2VsZik6CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvU2NyaXB0cy93a2J1aWx0aW5zL2J1aWx0aW5zX3RlbXBsYXRlcy5weQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy93a2J1aWx0aW5zL2J1aWx0aW5z
X3RlbXBsYXRlcy5weQkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L1NjcmlwdHMvd2tidWlsdGlucy9idWlsdGluc190ZW1wbGF0ZXMucHkJKHdvcmtpbmcgY29weSkK
QEAgLTE4OCw3ICsxODgsOCBAQCBwdWJsaWM6CiAgICAgZXhwbGljaXQgJHtvYmplY3ROYW1lfUJ1
aWx0aW5GdW5jdGlvbnMoSlNDOjpWTSYgdm0pIDogbV92bSh2bSkgeyB9CiAKICAgICB2b2lkIGlu
aXQoSlNDOjpKU0dsb2JhbE9iamVjdCYpOwotICAgIHZvaWQgdmlzaXQoSlNDOjpTbG90VmlzaXRv
ciYpOworICAgIC8vIG1sYW0gdm9pZCB2aXNpdChKU0M6OlNsb3RWaXNpdG9yJik7CisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCB2aXNpdChWaXNpdG9yJik7CiAKIHB1YmxpYzoK
ICAgICBKU0M6OlZNJiBtX3ZtOwpAQCAtMjA3LDEwICsyMDgsMTUgQEAgaW5saW5lIHZvaWQgJHtv
YmplY3ROYW1lfUJ1aWx0aW5GdW5jdGlvbgogI3VuZGVmIEVYUE9SVF9GVU5DVElPTgogfQogCi1p
bmxpbmUgdm9pZCAke29iamVjdE5hbWV9QnVpbHRpbkZ1bmN0aW9uczo6dmlzaXQoSlNDOjpTbG90
VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+CitpbmxpbmUgdm9p
ZCAke29iamVjdE5hbWV9QnVpbHRpbkZ1bmN0aW9uczo6dmlzaXQoVmlzaXRvciYgdmlzaXRvcikK
IHsKICNkZWZpbmUgVklTSVRfRlVOQ1RJT04obmFtZSkgdmlzaXRvci5hcHBlbmQobV8jI25hbWUj
I0Z1bmN0aW9uKTsKICAgICAke21hY3JvUHJlZml4fV9GT1JFQUNIXyR7b2JqZWN0TWFjcm99X0JV
SUxUSU5fRlVOQ1RJT05fTkFNRShWSVNJVF9GVU5DVElPTikKICN1bmRlZiBWSVNJVF9GVU5DVElP
TgogfQorCit0ZW1wbGF0ZSB2b2lkICR7b2JqZWN0TmFtZX1CdWlsdGluRnVuY3Rpb25zOjp2aXNp
dChKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgJHtvYmplY3ROYW1l
fUJ1aWx0aW5GdW5jdGlvbnM6OnZpc2l0KEpTQzo6U2xvdFZpc2l0b3ImKTsKKwogIiIiKQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmNwcAkocmV2
aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nh
c2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MjksMTYgKzcyOSwxNyBAQCBib29sIEFjY2Vzc0Nh
c2U6OnZpc2l0V2VhayhWTSYgdm0pIGNvbnN0CiAgICAgcmV0dXJuIGlzVmFsaWQ7CiB9CiAKLWJv
b2wgQWNjZXNzQ2FzZTo6cHJvcGFnYXRlVHJhbnNpdGlvbnMoU2xvdFZpc2l0b3ImIHZpc2l0b3Ip
IGNvbnN0Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgorYm9vbCBBY2Nlc3NDYXNlOjpwcm9w
YWdhdGVUcmFuc2l0aW9ucyhWaXNpdG9yJiB2aXNpdG9yKSBjb25zdAogewogICAgIGJvb2wgcmVz
dWx0ID0gdHJ1ZTsKIAogICAgIGlmIChtX3N0cnVjdHVyZSkKLSAgICAgICAgcmVzdWx0ICY9IG1f
c3RydWN0dXJlLT5tYXJrSWZDaGVhcCh2aXNpdG9yKTsKKyAgICAgICAgcmVzdWx0ICY9IG1fc3Ry
dWN0dXJlLT5tYXJrSWZDaGVhcDEodmlzaXRvcik7CiAKICAgICBpZiAobV9wb2x5UHJvdG9BY2Nl
c3NDaGFpbikgewogICAgICAgICBmb3IgKFN0cnVjdHVyZUlEIHN0cnVjdHVyZUlEIDogbV9wb2x5
UHJvdG9BY2Nlc3NDaGFpbi0+Y2hhaW4oKSkKLSAgICAgICAgICAgIHJlc3VsdCAmPSB2aXNpdG9y
LnZtKCkuZ2V0U3RydWN0dXJlKHN0cnVjdHVyZUlEKS0+bWFya0lmQ2hlYXAodmlzaXRvcik7Cisg
ICAgICAgICAgICByZXN1bHQgJj0gdmlzaXRvci52bSgpLmdldFN0cnVjdHVyZShzdHJ1Y3R1cmVJ
RCktPm1hcmtJZkNoZWFwMSh2aXNpdG9yKTsKICAgICB9CiAKICAgICBzd2l0Y2ggKG1fdHlwZSkg
ewpAQCAtNzU2LDExICs3NTcsMTkgQEAgYm9vbCBBY2Nlc3NDYXNlOjpwcm9wYWdhdGVUcmFuc2l0
aW9ucyhTbAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQgQWNjZXNzQ2FzZTo6dmlzaXRB
Z2dyZWdhdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0Cit0ZW1wbGF0ZSBib29sIEFjY2Vz
c0Nhc2U6OnByb3BhZ2F0ZVRyYW5zaXRpb25zKFNsb3RWaXNpdG9yJikgY29uc3Q7Cit0ZW1wbGF0
ZSBib29sIEFjY2Vzc0Nhc2U6OnByb3BhZ2F0ZVRyYW5zaXRpb25zKEFic3RyYWN0U2xvdFZpc2l0
b3ImKSBjb25zdDsKKworLy90ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgorLy92b2lkIEFjY2Vz
c0Nhc2U6OnZpc2l0QWdncmVnYXRlKFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0Cit2b2lkIEFjY2Vz
c0Nhc2U6OnZpc2l0QWdncmVnYXRlMShBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBjb25z
dAogewotICAgIG1faWRlbnRpZmllci52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKKyAgICBtX2lk
ZW50aWZpZXIudmlzaXRBZ2dyZWdhdGUxKHZpc2l0b3IpOwogfQogCisvL3RlbXBsYXRlIHZvaWQg
QWNjZXNzQ2FzZTo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImKSBjb25zdDsKKy8vdGVtcGxh
dGUgdm9pZCBBY2Nlc3NDYXNlOjp2aXNpdEFnZ3JlZ2F0ZShEZWJ1Z1Nsb3RWaXNpdG9yJikgY29u
c3Q7CisKIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVXaXRoR3VhcmQoCiAgICAgQWNjZXNzR2Vu
ZXJhdGlvblN0YXRlJiBzdGF0ZSwgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCYgZmFsbFRocm91Z2gp
CiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmgJ
KHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nl
c3NDYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3NSw5ICsyNzUsMTAgQEAgcHJpdmF0ZToKICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgogICAgIHZvaWQgZm9yRWFjaERlcGVuZGVudENl
bGwoVk0mLCBjb25zdCBGdW5jdG9yJikgY29uc3Q7CiAKLSAgICB2b2lkIHZpc2l0QWdncmVnYXRl
KFNsb3RWaXNpdG9yJikgY29uc3Q7CisvLyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2
b2lkIHZpc2l0QWdncmVnYXRlKFZpc2l0b3ImKSBjb25zdDsKKyAgICB2b2lkIHZpc2l0QWdncmVn
YXRlMShBYnN0cmFjdFNsb3RWaXNpdG9yJikgY29uc3Q7CiAgICAgYm9vbCB2aXNpdFdlYWsoVk0m
KSBjb25zdDsKLSAgICBib29sIHByb3BhZ2F0ZVRyYW5zaXRpb25zKFNsb3RWaXNpdG9yJikgY29u
c3Q7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gYm9vbCBwcm9wYWdhdGVUcmFuc2l0
aW9ucyhWaXNpdG9yJikgY29uc3Q7CiAKICAgICAvLyBGSVhNRTogVGhpcyBvbmx5IGV4aXN0cyBi
ZWNhdXNlIG9mIGhvdyBBY2Nlc3NDYXNlIHB1dHMgcG9zdC1nZW5lcmF0aW9uIHRoaW5ncyBpbnRv
IGl0c2VsZi4KICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTU2NDU2CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnlWYWxJbmZvLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnlWYWxJbmZv
LmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0J5VmFsSW5mby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDExICszMiwxNiBAQCBuYW1lc3Bh
Y2UgSlNDIHsKIAogI2lmIEVOQUJMRShKSVQpCiAKLXZvaWQgQnlWYWxJbmZvOjp2aXNpdEFnZ3Jl
Z2F0ZShTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4K
Ky8vdm9pZCBCeVZhbEluZm86OnZpc2l0QWdncmVnYXRlKFZpc2l0b3ImIHZpc2l0b3IpCit2b2lk
IEJ5VmFsSW5mbzo6dmlzaXRBZ2dyZWdhdGUxKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3Ip
CiB7Ci0gICAgY2FjaGVkSWQudmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7CisgICAgY2FjaGVkSWQu
dmlzaXRBZ2dyZWdhdGUxKHZpc2l0b3IpOwogfQogCisvL3RlbXBsYXRlIHZvaWQgQnlWYWxJbmZv
Ojp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYpOworLy90ZW1wbGF0ZSB2b2lkIEJ5VmFsSW5m
bzo6dmlzaXRBZ2dyZWdhdGUoRGVidWdTbG90VmlzaXRvciYpOworCiAjZW5kaWYgLy8gRU5BQkxF
KEpJVCkKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQnlWYWxJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0J5VmFsSW5mby5oCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQnlWYWxJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTI0Niw3ICsy
NDYsOCBAQCBzdHJ1Y3QgQnlWYWxJbmZvIHsKICAgICAgICAgdGhpcy0+c2VlbiA9IGZhbHNlOwog
ICAgIH0KIAotICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImKTsKKy8vICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgdmlzaXRBZ2dyZWdhdGUoVmlzaXRvciYpOwor
ICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUxKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKIAogICAgIENv
ZGVMb2NhdGlvbkp1bXA8SlNJbnRlcm5hbFB0clRhZz4gbm90SW5kZXhKdW1wOwogICAgIENvZGVM
b2NhdGlvbkp1bXA8SlNJbnRlcm5hbFB0clRhZz4gYmFkVHlwZUp1bXA7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkocmV2aXNpb24gMjcxNDQz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTMwLDYgKzMwLDkgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRl
ICJDb2RlQmxvY2suaCIKIAorI2luY2x1ZGUgIkFic3RyYWN0U2xvdFZpc2l0b3IuaCIgLy8gbWxh
bSBURVNUCisjaW5jbHVkZSAiUG9seW1vcnBoaWNBY2Nlc3MuaCIgLy8gbWxhbSBURVNUCisKICNp
bmNsdWRlICJBcml0aFByb2ZpbGUuaCIKICNpbmNsdWRlICJCYXNpY0Jsb2NrTG9jYXRpb24uaCIK
ICNpbmNsdWRlICJCeVZhbEluZm8uaCIKQEAgLTk5OCw3ICsxMDAxLDggQEAgc2l6ZV90IENvZGVC
bG9jazo6ZXN0aW1hdGVkU2l6ZShKU0NlbGwqIAogICAgIHJldHVybiBCYXNlOjplc3RpbWF0ZWRT
aXplKGNlbGwsIHZtKSArIGV4dHJhTWVtb3J5QWxsb2NhdGVkOwogfQogCi12b2lkIENvZGVCbG9j
azo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVt
cGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgQ29kZUJsb2NrOjp2aXNpdENoaWxkcmVuSW1w
bChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgQ29kZUJsb2NrKiB0aGlz
T2JqZWN0ID0ganNDYXN0PENvZGVCbG9jayo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1Rf
SU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTEwMDcsNyArMTAxMSwxMCBAQCB2b2lk
IENvZGVCbG9jazo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlCiAgICAgdGhpc09iamVjdC0+dmlz
aXRDaGlsZHJlbih2aXNpdG9yKTsKIH0KIAotdm9pZCBDb2RlQmxvY2s6OnZpc2l0Q2hpbGRyZW4o
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCitERUZJTkVfVklTSVRfQ0hJTERSRU4oQ29kZUJsb2NrKTsK
KwordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgQ29kZUJsb2NrOjp2aXNpdENoaWxk
cmVuSW1wbChWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2Nr
ZXIobV9sb2NrKTsKICAgICBpZiAoQ29kZUJsb2NrKiBvdGhlckJsb2NrID0gc3BlY2lhbE9TUkVu
dHJ5QmxvY2tPck51bGwoKSkKQEAgLTEwMjYsNiArMTAzMyw4IEBAIHZvaWQgQ29kZUJsb2NrOjp2
aXNpdENoaWxkcmVuKFNsb3RWaXNpdG8KICAgICBWTTo6U3BhY2VBbmRTZXQ6OnNldEZvcigqc3Vi
c3BhY2UoKSkuYWRkKHRoaXMpOwogfQogCitERUZJTkVfSU5TVEFOQ0VfVklTSVRfQ0hJTERSRU4o
Q29kZUJsb2NrKTsKKwogYm9vbCBDb2RlQmxvY2s6OnNob3VsZFZpc2l0U3Ryb25nbHkoY29uc3Qg
Q29uY3VycmVudEpTTG9ja2VyJiBsb2NrZXIpCiB7CiAgICAgaWYgKE9wdGlvbnM6OmZvcmNlQ29k
ZUJsb2NrTGl2ZW5lc3MoKSkKQEAgLTEwOTgsNyArMTEwNyw5IEBAIGJvb2wgQ29kZUJsb2NrOjpz
aG91bGRKZXR0aXNvbkR1ZVRvT2xkQWcKIH0KIAogI2lmIEVOQUJMRShERkdfSklUKQotc3RhdGlj
IGJvb2wgc2hvdWxkTWFya1RyYW5zaXRpb24oVk0mIHZtLCBERkc6OldlYWtSZWZlcmVuY2VUcmFu
c2l0aW9uJiB0cmFuc2l0aW9uKQorLy8gbWxhbSBGSVhNRTogdm0uaGVhcC5pc01hcmtlZCBuZWVk
cyB0byBiZSBhYnN0cmFjdGVkLgorLy9zdGF0aWMgYm9vbCBzaG91bGRNYXJrVHJhbnNpdGlvbihW
TSYgdm0sIERGRzo6V2Vha1JlZmVyZW5jZVRyYW5zaXRpb24mIHRyYW5zaXRpb24pCitzdGF0aWMg
aW5saW5lIGJvb2wgc2hvdWxkTWFya1RyYW5zaXRpb24oVk0mIHZtLCBERkc6OldlYWtSZWZlcmVu
Y2VUcmFuc2l0aW9uJiB0cmFuc2l0aW9uKQogewogICAgIGlmICh0cmFuc2l0aW9uLm1fY29kZU9y
aWdpbiAmJiAhdm0uaGVhcC5pc01hcmtlZCh0cmFuc2l0aW9uLm1fY29kZU9yaWdpbi5nZXQoKSkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTExMTksNyArMTEzMCw0MCBAQCBCeXRlY29kZUlu
ZGV4IENvZGVCbG9jazo6Ynl0ZWNvZGVJbmRleEZvCiB9CiAjZW5kaWYgLy8gRU5BQkxFKERGR19K
SVQpCiAKLXZvaWQgQ29kZUJsb2NrOjpwcm9wYWdhdGVUcmFuc2l0aW9ucyhjb25zdCBDb25jdXJy
ZW50SlNMb2NrZXImLCBTbG90VmlzaXRvciYgdmlzaXRvcikKKyNpZiBFTkFCTEUoSklUKQorCisv
L3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+CisvL2Jvb2wgU3RydWN0dXJlU3R1YkluZm86OnBy
b3BhZ2F0ZVRyYW5zaXRpb25zMShWaXNpdG9yJiB2aXNpdG9yKQorYm9vbCBTdHJ1Y3R1cmVTdHVi
SW5mbzo6cHJvcGFnYXRlVHJhbnNpdGlvbnMxKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3Ip
Cit7CisgICAgc3dpdGNoIChtX2NhY2hlVHlwZSkgeworICAgIGNhc2UgQ2FjaGVUeXBlOjpVbnNl
dDoKKyAgICBjYXNlIENhY2hlVHlwZTo6QXJyYXlMZW5ndGg6CisgICAgY2FzZSBDYWNoZVR5cGU6
OlN0cmluZ0xlbmd0aDoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgY2FzZSBDYWNoZVR5cGU6
OkdldEJ5SWRTZWxmOgorICAgIGNhc2UgQ2FjaGVUeXBlOjpQdXRCeUlkUmVwbGFjZToKKyAgICBj
YXNlIENhY2hlVHlwZTo6SW5CeUlkU2VsZjoKKyAgICAgICAgcmV0dXJuIHUuYnlJZFNlbGYuYmFz
ZU9iamVjdFN0cnVjdHVyZS0+bWFya0lmQ2hlYXAxKHZpc2l0b3IpOworICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgY2FzZSBDYWNoZVR5cGU6OlN0dWI6CisgICAgICAgIHJldHVybiB1LnN0dWIt
PnByb3BhZ2F0ZVRyYW5zaXRpb25zMTAodmlzaXRvcik7CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisgICAgCisvLyAgICBVTlVTRURfUEFSQU0odmlzaXRvcik7IC8vIG1sYW0gVEVTVAor
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisK
KyNlbmRpZiAvLyBFTkFCTEUoSklUKQorCisvL3RlbXBsYXRlPD4gYm9vbCBTdHJ1Y3R1cmVTdHVi
SW5mbzo6cHJvcGFnYXRlVHJhbnNpdGlvbnMxKFNsb3RWaXNpdG9yJik7CisvL3RlbXBsYXRlPD4g
Ym9vbCBTdHJ1Y3R1cmVTdHViSW5mbzo6cHJvcGFnYXRlVHJhbnNpdGlvbnMxKEFic3RyYWN0U2xv
dFZpc2l0b3ImKTsKKworLy90ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgorLy92b2lkIENvZGVC
bG9jazo6cHJvcGFnYXRlVHJhbnNpdGlvbnMoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgVmlz
aXRvciYgdmlzaXRvcikKK3ZvaWQgQ29kZUJsb2NrOjpwcm9wYWdhdGVUcmFuc2l0aW9uczEoY29u
c3QgQ29uY3VycmVudEpTTG9ja2VyJiwgQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsK
ICAgICBWTSYgdm0gPSAqbV92bTsKIApAQCAtMTE2Myw3ICsxMjA3LDcgQEAgdm9pZCBDb2RlQmxv
Y2s6OnByb3BhZ2F0ZVRyYW5zaXRpb25zKGNvbgogICAgIGlmIChKSVRDb2RlOjppc0pJVChqaXRU
eXBlKCkpKSB7CiAgICAgICAgIGlmIChhdXRvKiBqaXREYXRhID0gbV9qaXREYXRhLmdldCgpKSB7
CiAgICAgICAgICAgICBmb3IgKFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA6IGppdERhdGEt
Pm1fc3R1YkluZm9zKQotICAgICAgICAgICAgICAgIHN0dWJJbmZvLT5wcm9wYWdhdGVUcmFuc2l0
aW9ucyh2aXNpdG9yKTsKKyAgICAgICAgICAgICAgICBzdHViSW5mby0+cHJvcGFnYXRlVHJhbnNp
dGlvbnMxKHZpc2l0b3IpOwogICAgICAgICB9CiAgICAgfQogI2VuZGlmIC8vIEVOQUJMRShKSVQp
CkBAIC0xMTcyLDEwICsxMjE2LDEwIEBAIHZvaWQgQ29kZUJsb2NrOjpwcm9wYWdhdGVUcmFuc2l0
aW9ucyhjb24KICAgICBpZiAoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGppdFR5cGUoKSkpIHsK
ICAgICAgICAgREZHOjpDb21tb25EYXRhKiBkZmdDb21tb24gPSBtX2ppdENvZGUtPmRmZ0NvbW1v
bigpOwogICAgICAgICAKLSAgICAgICAgZGZnQ29tbW9uLT5yZWNvcmRlZFN0YXR1c2VzLm1hcmtJ
ZkNoZWFwKHZpc2l0b3IpOworICAgICAgICBkZmdDb21tb24tPnJlY29yZGVkU3RhdHVzZXMubWFy
a0lmQ2hlYXAxKHZpc2l0b3IpOwogICAgICAgICAKICAgICAgICAgZm9yIChTdHJ1Y3R1cmVJRCBz
dHJ1Y3R1cmVJRCA6IGRmZ0NvbW1vbi0+d2Vha1N0cnVjdHVyZVJlZmVyZW5jZXMpCi0gICAgICAg
ICAgICB2bS5nZXRTdHJ1Y3R1cmUoc3RydWN0dXJlSUQpLT5tYXJrSWZDaGVhcCh2aXNpdG9yKTsK
KyAgICAgICAgICAgIHZtLmdldFN0cnVjdHVyZShzdHJ1Y3R1cmVJRCktPm1hcmtJZkNoZWFwMSh2
aXNpdG9yKTsKIAogICAgICAgICBmb3IgKGF1dG8mIHRyYW5zaXRpb24gOiBkZmdDb21tb24tPnRy
YW5zaXRpb25zKSB7CiAgICAgICAgICAgICBpZiAoc2hvdWxkTWFya1RyYW5zaXRpb24odm0sIHRy
YW5zaXRpb24pKSB7CkBAIC0xMjA1LDcgKzEyNDksMTIgQEAgdm9pZCBDb2RlQmxvY2s6OnByb3Bh
Z2F0ZVRyYW5zaXRpb25zKGNvbgogI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQogfQogCi12b2lk
IENvZGVCbG9jazo6ZGV0ZXJtaW5lTGl2ZW5lc3MoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwg
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3RlbXBsYXRlIHZvaWQgQ29kZUJsb2NrOjpwcm9wYWdh
dGVUcmFuc2l0aW9ucyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBTbG90VmlzaXRvciYpOwor
Ly90ZW1wbGF0ZSB2b2lkIENvZGVCbG9jazo6cHJvcGFnYXRlVHJhbnNpdGlvbnMoY29uc3QgQ29u
Y3VycmVudEpTTG9ja2VyJiwgRGVidWdTbG90VmlzaXRvciYpOworCisvL3RlbXBsYXRlPHR5cGVu
YW1lIFZpc2l0b3I+CisvL3ZvaWQgQ29kZUJsb2NrOjpkZXRlcm1pbmVMaXZlbmVzcyhjb25zdCBD
b25jdXJyZW50SlNMb2NrZXImLCBWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBDb2RlQmxvY2s6OmRl
dGVybWluZUxpdmVuZXNzKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIEFic3RyYWN0U2xvdFZp
c2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHZpc2l0b3IpOwogICAgIApAQCAt
MTI1NCw2ICsxMzAzLDkgQEAgdm9pZCBDb2RlQmxvY2s6OmRldGVybWluZUxpdmVuZXNzKGNvbnN0
IAogI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQogfQogCisvL3RlbXBsYXRlIHZvaWQgQ29kZUJs
b2NrOjpkZXRlcm1pbmVMaXZlbmVzcyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBTbG90Vmlz
aXRvciYpOworLy90ZW1wbGF0ZSB2b2lkIENvZGVCbG9jazo6ZGV0ZXJtaW5lTGl2ZW5lc3MoY29u
c3QgQ29uY3VycmVudEpTTG9ja2VyJiwgRGVidWdTbG90VmlzaXRvciYpOworCiB2b2lkIENvZGVC
bG9jazo6ZmluYWxpemVMTEludElubGluZUNhY2hlcygpCiB7CiAgICAgVk0mIHZtID0gKm1fdm07
CkBAIC0xNzYyLDcgKzE4MTQsOCBAQCB2b2lkIENvZGVCbG9jazo6cmVzZXRKSVREYXRhKCkKIH0K
ICNlbmRpZgogCi12b2lkIENvZGVCbG9jazo6dmlzaXRPU1JFeGl0VGFyZ2V0cyhjb25zdCBDb25j
dXJyZW50SlNMb2NrZXImLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1l
IFZpc2l0b3I+Cit2b2lkIENvZGVCbG9jazo6dmlzaXRPU1JFeGl0VGFyZ2V0cyhjb25zdCBDb25j
dXJyZW50SlNMb2NrZXImLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIC8vIFdlIHN0cm9uZ2x5
IHZpc2l0IE9TUiBleGl0cyB0YXJnZXRzIGJlY2F1c2Ugd2UgZG9uJ3Qgd2FudCB0byBkZWFsIHdp
dGgKICAgICAvLyB0aGUgY29tcGxleGl0eSBvZiBnZW5lcmF0aW5nIGFuIGV4aXQgdGFyZ2V0IENv
ZGVCbG9jayBvbiBkZW1hbmQgYW5kCkBAIC0xNzgyLDcgKzE4MzUsMTEgQEAgdm9pZCBDb2RlQmxv
Y2s6OnZpc2l0T1NSRXhpdFRhcmdldHMoY29ucwogI2VuZGlmCiB9CiAKLXZvaWQgQ29kZUJsb2Nr
OjpzdHJvbmdseVZpc2l0U3Ryb25nUmVmZXJlbmNlcyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXIm
IGxvY2tlciwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZSB2b2lkIENvZGVCbG9jazo6
dmlzaXRPU1JFeGl0VGFyZ2V0cyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBTbG90VmlzaXRv
ciYpOwordGVtcGxhdGUgdm9pZCBDb2RlQmxvY2s6OnZpc2l0T1NSRXhpdFRhcmdldHMoY29uc3Qg
Q29uY3VycmVudEpTTG9ja2VyJiwgQWJzdHJhY3RTbG90VmlzaXRvciYpOworCit0ZW1wbGF0ZTx0
eXBlbmFtZSBWaXNpdG9yPgordm9pZCBDb2RlQmxvY2s6OnN0cm9uZ2x5VmlzaXRTdHJvbmdSZWZl
cmVuY2VzKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYgbG9ja2VyLCBWaXNpdG9yJiB2aXNpdG9y
KQogewogICAgIFVOVVNFRF9QQVJBTShsb2NrZXIpOwogICAgIApAQCAtMTgwMywyMiArMTg2MCwy
NiBAQCB2b2lkIENvZGVCbG9jazo6c3Ryb25nbHlWaXNpdFN0cm9uZ1JlZmVyCiAjaWYgRU5BQkxF
KEpJVCkKICAgICBpZiAoYXV0byogaml0RGF0YSA9IG1faml0RGF0YS5nZXQoKSkgewogICAgICAg
ICBmb3IgKEJ5VmFsSW5mbyogYnlWYWxJbmZvIDogaml0RGF0YS0+bV9ieVZhbEluZm9zKQotICAg
ICAgICAgICAgYnlWYWxJbmZvLT52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKKyAgICAgICAgICAg
IGJ5VmFsSW5mby0+dmlzaXRBZ2dyZWdhdGUxKHZpc2l0b3IpOwogICAgICAgICBmb3IgKFN0cnVj
dHVyZVN0dWJJbmZvKiBzdHViSW5mbyA6IGppdERhdGEtPm1fc3R1YkluZm9zKQotICAgICAgICAg
ICAgc3R1YkluZm8tPnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOworICAgICAgICAgICAgc3R1Yklu
Zm8tPnZpc2l0QWdncmVnYXRlMSh2aXNpdG9yKTsKICAgICB9CiAjZW5kaWYKIAogI2lmIEVOQUJM
RShERkdfSklUKQogICAgIGlmIChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSgpKSkg
ewogICAgICAgICBERkc6OkNvbW1vbkRhdGEqIGRmZ0NvbW1vbiA9IG1faml0Q29kZS0+ZGZnQ29t
bW9uKCk7Ci0gICAgICAgIGRmZ0NvbW1vbi0+cmVjb3JkZWRTdGF0dXNlcy52aXNpdEFnZ3JlZ2F0
ZSh2aXNpdG9yKTsKKyAgICAgICAgZGZnQ29tbW9uLT5yZWNvcmRlZFN0YXR1c2VzLnZpc2l0QWdn
cmVnYXRlMSh2aXNpdG9yKTsKICAgICAgICAgdmlzaXRPU1JFeGl0VGFyZ2V0cyhsb2NrZXIsIHZp
c2l0b3IpOwogICAgIH0KICNlbmRpZgogfQogCi12b2lkIENvZGVCbG9jazo6c3Ryb25nbHlWaXNp
dFdlYWtSZWZlcmVuY2VzKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQorLy90ZW1wbGF0ZSB2b2lkIENvZGVCbG9jazo6c3Ryb25nbHlWaXNpdFN0cm9uZ1Jl
ZmVyZW5jZXMoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgU2xvdFZpc2l0b3ImKTsKKy8vdGVt
cGxhdGUgdm9pZCBDb2RlQmxvY2s6OnN0cm9uZ2x5VmlzaXRTdHJvbmdSZWZlcmVuY2VzKGNvbnN0
IENvbmN1cnJlbnRKU0xvY2tlciYsIERlYnVnU2xvdFZpc2l0b3ImKTsKKwordGVtcGxhdGU8dHlw
ZW5hbWUgVmlzaXRvcj4KK3ZvaWQgQ29kZUJsb2NrOjpzdHJvbmdseVZpc2l0V2Vha1JlZmVyZW5j
ZXMoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBV
TlVTRURfUEFSQU0odmlzaXRvcik7CiAKQEAgLTE4NDUsNiArMTkwNiw5IEBAIHZvaWQgQ29kZUJs
b2NrOjpzdHJvbmdseVZpc2l0V2Vha1JlZmVyZW4KICNlbmRpZiAgICAKIH0KIAordGVtcGxhdGUg
dm9pZCBDb2RlQmxvY2s6OnN0cm9uZ2x5VmlzaXRXZWFrUmVmZXJlbmNlcyhjb25zdCBDb25jdXJy
ZW50SlNMb2NrZXImLCBTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBDb2RlQmxvY2s6OnN0
cm9uZ2x5VmlzaXRXZWFrUmVmZXJlbmNlcyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBBYnN0
cmFjdFNsb3RWaXNpdG9yJik7CisKIENvZGVCbG9jayogQ29kZUJsb2NrOjpiYXNlbGluZUFsdGVy
bmF0aXZlKCkKIHsKICNpZiBFTkFCTEUoSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0NvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Db2RlQmxvY2suaAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMDEsMTAg
KzIwMSwxMSBAQCBwdWJsaWM6CiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTEyMzY3NwogICAgIENvZGVCbG9jayogYmFzZWxpbmVWZXJzaW9uKCk7CiAKKyAg
ICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOworCiAgICAgc3RhdGljIHNpemVfdCBlc3RpbWF0ZWRT
aXplKEpTQ2VsbCosIFZNJik7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwq
LCBTbG90VmlzaXRvciYpOwogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7Ci0gICAg
dm9pZCB2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9JTlNUQU5DRV9W
SVNJVF9DSElMRFJFTjsKICAgICB2b2lkIGZpbmFsaXplVW5jb25kaXRpb25hbGx5KFZNJik7CiAK
ICAgICB2b2lkIG5vdGlmeUxleGljYWxCaW5kaW5nVXBkYXRlKCk7CkBAIC05NjcsMTIgKzk2OCwx
NCBAQCBwcml2YXRlOgogICAgIGJvb2wgc2hvdWxkSmV0dGlzb25EdWVUb1dlYWtSZWZlcmVuY2Uo
Vk0mKTsKICAgICBib29sIHNob3VsZEpldHRpc29uRHVlVG9PbGRBZ2UoY29uc3QgQ29uY3VycmVu
dEpTTG9ja2VyJik7CiAgICAgCi0gICAgdm9pZCBwcm9wYWdhdGVUcmFuc2l0aW9ucyhjb25zdCBD
b25jdXJyZW50SlNMb2NrZXImLCBTbG90VmlzaXRvciYpOwotICAgIHZvaWQgZGV0ZXJtaW5lTGl2
ZW5lc3MoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgU2xvdFZpc2l0b3ImKTsKKy8vICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgcHJvcGFnYXRlVHJhbnNpdGlvbnMoY29uc3Qg
Q29uY3VycmVudEpTTG9ja2VyJiwgVmlzaXRvciYpOworICAgIHZvaWQgcHJvcGFnYXRlVHJhbnNp
dGlvbnMxKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIEFic3RyYWN0U2xvdFZpc2l0b3ImKTsK
Ky8vICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgZGV0ZXJtaW5lTGl2ZW5lc3Mo
Y29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgVmlzaXRvciYpOworICAgIHZvaWQgZGV0ZXJtaW5l
TGl2ZW5lc3MoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgQWJzdHJhY3RTbG90VmlzaXRvciYp
OwogICAgICAgICAKLSAgICB2b2lkIHN0cm9uZ2x5VmlzaXRTdHJvbmdSZWZlcmVuY2VzKGNvbnN0
IENvbmN1cnJlbnRKU0xvY2tlciYsIFNsb3RWaXNpdG9yJik7Ci0gICAgdm9pZCBzdHJvbmdseVZp
c2l0V2Vha1JlZmVyZW5jZXMoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgU2xvdFZpc2l0b3Im
KTsKLSAgICB2b2lkIHZpc2l0T1NSRXhpdFRhcmdldHMoY29uc3QgQ29uY3VycmVudEpTTG9ja2Vy
JiwgU2xvdFZpc2l0b3ImKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIHN0
cm9uZ2x5VmlzaXRTdHJvbmdSZWZlcmVuY2VzKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIFZp
c2l0b3ImKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIHN0cm9uZ2x5Vmlz
aXRXZWFrUmVmZXJlbmNlcyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBWaXNpdG9yJik7Cisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCB2aXNpdE9TUkV4aXRUYXJnZXRzKGNv
bnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIFZpc2l0b3ImKTsKIAogICAgIHVuc2lnbmVkIG51bWJl
ck9mTm9uQXJndW1lbnRWYWx1ZVByb2ZpbGVzKCkgeyByZXR1cm4gbV9udW1iZXJPZk5vbkFyZ3Vt
ZW50VmFsdWVQcm9maWxlczsgfQogICAgIHVuc2lnbmVkIHRvdGFsTnVtYmVyT2ZWYWx1ZVByb2Zp
bGVzKCkgeyByZXR1cm4gbnVtYmVyT2ZBcmd1bWVudFZhbHVlUHJvZmlsZXMoKSArIG51bWJlck9m
Tm9uQXJndW1lbnRWYWx1ZVByb2ZpbGVzKCk7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9EZWxldGVCeUlkVmFyaWFudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0RlbGV0ZUJ5SWRWYXJpYW50LmNwcAkocmV2aXNpb24gMjcx
NDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0RlbGV0ZUJ5SWRWYXJpYW50
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODgsMTkgKzg4LDI5IEBAIGJvb2wgRGVsZXRlQnlJZFZh
cmlhbnQ6OndyaXRlc1N0cnVjdHVyZXMKICAgICByZXR1cm4gISFuZXdTdHJ1Y3R1cmUoKTsKIH0K
IAotdm9pZCBEZWxldGVCeUlkVmFyaWFudDo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImIHZp
c2l0b3IpCisvL3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+CisvL3ZvaWQgRGVsZXRlQnlJZFZh
cmlhbnQ6OnZpc2l0QWdncmVnYXRlKFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIERlbGV0ZUJ5SWRW
YXJpYW50Ojp2aXNpdEFnZ3JlZ2F0ZTEoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsK
LSAgICBtX2lkZW50aWZpZXIudmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7CisgICAgbV9pZGVudGlm
aWVyLnZpc2l0QWdncmVnYXRlMSh2aXNpdG9yKTsKIH0KIAotdm9pZCBEZWxldGVCeUlkVmFyaWFu
dDo6bWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3RlbXBsYXRlIHZvaWQgRGVs
ZXRlQnlJZFZhcmlhbnQ6OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJik7CisvL3RlbXBsYXRl
IHZvaWQgRGVsZXRlQnlJZFZhcmlhbnQ6OnZpc2l0QWdncmVnYXRlKERlYnVnU2xvdFZpc2l0b3Im
KTsKKworLy90ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgorLy92b2lkIERlbGV0ZUJ5SWRWYXJp
YW50OjptYXJrSWZDaGVhcChWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBEZWxldGVCeUlkVmFyaWFu
dDo6bWFya0lmQ2hlYXAxKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgaWYg
KG1fb2xkU3RydWN0dXJlKQotICAgICAgICBtX29sZFN0cnVjdHVyZS0+bWFya0lmQ2hlYXAodmlz
aXRvcik7CisgICAgICAgIG1fb2xkU3RydWN0dXJlLT5tYXJrSWZDaGVhcDEodmlzaXRvcik7CiAg
ICAgaWYgKG1fbmV3U3RydWN0dXJlKQotICAgICAgICBtX25ld1N0cnVjdHVyZS0+bWFya0lmQ2hl
YXAodmlzaXRvcik7CisgICAgICAgIG1fbmV3U3RydWN0dXJlLT5tYXJrSWZDaGVhcDEodmlzaXRv
cik7CiB9CiAKKy8vdGVtcGxhdGUgdm9pZCBEZWxldGVCeUlkVmFyaWFudDo6bWFya0lmQ2hlYXAo
U2xvdFZpc2l0b3ImKTsKKy8vdGVtcGxhdGUgdm9pZCBEZWxldGVCeUlkVmFyaWFudDo6bWFya0lm
Q2hlYXAoRGVidWdTbG90VmlzaXRvciYpOworCiB2b2lkIERlbGV0ZUJ5SWRWYXJpYW50OjpkdW1w
KFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiB7CiAgICAgZHVtcEluQ29udGV4dChvdXQsIG51bGxw
dHIpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0RlbGV0ZUJ5SWRWYXJp
YW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0RlbGV0
ZUJ5SWRWYXJpYW50LmgJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9EZWxldGVCeUlkVmFyaWFudC5oCSh3b3JraW5nIGNvcHkpCkBAIC02MSw4ICs2
MSwxMCBAQCBwdWJsaWM6CiAKICAgICBib29sIGF0dGVtcHRUb01lcmdlKGNvbnN0IERlbGV0ZUJ5
SWRWYXJpYW50JiBvdGhlcik7CiAKLSAgICB2b2lkIHZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9y
Jik7Ci0gICAgdm9pZCBtYXJrSWZDaGVhcChTbG90VmlzaXRvciYpOworLy8gICAgdGVtcGxhdGU8
dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCB2aXNpdEFnZ3JlZ2F0ZShWaXNpdG9yJik7CisvLyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIG1hcmtJZkNoZWFwKFZpc2l0b3ImKTsKKyAg
ICB2b2lkIHZpc2l0QWdncmVnYXRlMShBYnN0cmFjdFNsb3RWaXNpdG9yJik7CisgICAgdm9pZCBt
YXJrSWZDaGVhcDEoQWJzdHJhY3RTbG90VmlzaXRvciYpOwogICAgIGJvb2wgZmluYWxpemUoVk0m
KTsKIAogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0RlbGV0ZUJ5U3RhdHVzLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRGVsZXRlQnlTdGF0dXMuY3BwCShyZXZpc2lv
biAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRGVsZXRlQnlTdGF0
dXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTQsMTggKzI1NCwyOCBAQCBDYWNoZWFibGVJZGVu
dGlmaWVyIERlbGV0ZUJ5U3RhdHVzOjpzaW5nCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotdm9p
ZCBEZWxldGVCeVN0YXR1czo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisv
L3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+CisvL3ZvaWQgRGVsZXRlQnlTdGF0dXM6OnZpc2l0
QWdncmVnYXRlKFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIERlbGV0ZUJ5U3RhdHVzOjp2aXNpdEFn
Z3JlZ2F0ZTEoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBmb3IgKERlbGV0
ZUJ5SWRWYXJpYW50JiB2YXJpYW50IDogbV92YXJpYW50cykKLSAgICAgICAgdmFyaWFudC52aXNp
dEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKKyAgICAgICAgdmFyaWFudC52aXNpdEFnZ3JlZ2F0ZTEodmlz
aXRvcik7CiB9CiAKLXZvaWQgRGVsZXRlQnlTdGF0dXM6Om1hcmtJZkNoZWFwKFNsb3RWaXNpdG9y
JiB2aXNpdG9yKQorLy90ZW1wbGF0ZSB2b2lkIERlbGV0ZUJ5U3RhdHVzOjp2aXNpdEFnZ3JlZ2F0
ZShTbG90VmlzaXRvciYpOworLy90ZW1wbGF0ZSB2b2lkIERlbGV0ZUJ5U3RhdHVzOjp2aXNpdEFn
Z3JlZ2F0ZShEZWJ1Z1Nsb3RWaXNpdG9yJik7CisKKy8vdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRv
cj4KKy8vdm9pZCBEZWxldGVCeVN0YXR1czo6bWFya0lmQ2hlYXAoVmlzaXRvciYgdmlzaXRvcikK
K3ZvaWQgRGVsZXRlQnlTdGF0dXM6Om1hcmtJZkNoZWFwMShBYnN0cmFjdFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQogewogICAgIGZvciAoRGVsZXRlQnlJZFZhcmlhbnQmIHZhcmlhbnQgOiBtX3Zhcmlh
bnRzKQotICAgICAgICB2YXJpYW50Lm1hcmtJZkNoZWFwKHZpc2l0b3IpOworICAgICAgICB2YXJp
YW50Lm1hcmtJZkNoZWFwMSh2aXNpdG9yKTsKIH0KIAorLy90ZW1wbGF0ZSB2b2lkIERlbGV0ZUJ5
U3RhdHVzOjptYXJrSWZDaGVhcChTbG90VmlzaXRvciYpOworLy90ZW1wbGF0ZSB2b2lkIERlbGV0
ZUJ5U3RhdHVzOjptYXJrSWZDaGVhcChEZWJ1Z1Nsb3RWaXNpdG9yJik7CisKIGJvb2wgRGVsZXRl
QnlTdGF0dXM6OmZpbmFsaXplKFZNJiB2bSkKIHsKICAgICBmb3IgKGF1dG8mIHZhcmlhbnQgOiBt
X3ZhcmlhbnRzKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRGVsZXRl
QnlTdGF0dXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
RGVsZXRlQnlTdGF0dXMuaAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0RlbGV0ZUJ5U3RhdHVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTgxLDggKzgx
LDEwIEBAIHB1YmxpYzoKICAgICAvLyBBdHRlbXB0cyB0byByZWR1Y2UgdGhlIHNldCBvZiB2YXJp
YW50cyB0byBmaXQgdGhlIGdpdmVuIHN0cnVjdHVyZSBzZXQuIFRoaXMgbWF5IGJlIGFwcHJveGlt
YXRlLgogICAgIHZvaWQgZmlsdGVyKGNvbnN0IFN0cnVjdHVyZVNldCYpOwogCi0gICAgdm9pZCB2
aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYpOwotICAgIHZvaWQgbWFya0lmQ2hlYXAoU2xvdFZp
c2l0b3ImKTsKKy8vICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgdmlzaXRBZ2dy
ZWdhdGUoVmlzaXRvciYpOworLy8gICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCBt
YXJrSWZDaGVhcChWaXNpdG9yJik7CisgICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZTEoQWJzdHJhY3RT
bG90VmlzaXRvciYpOworICAgIHZvaWQgbWFya0lmQ2hlYXAxKEFic3RyYWN0U2xvdFZpc2l0b3Im
KTsKICAgICBib29sIGZpbmFsaXplKFZNJik7CiAKICAgICBib29sIGFwcGVuZFZhcmlhbnQoY29u
c3QgRGVsZXRlQnlJZFZhcmlhbnQmKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9EaXJlY3RFdmFsQ29kZUNhY2hlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvRGlyZWN0RXZhbENvZGVDYWNoZS5jcHAJKHJldmlzaW9uIDI3MTQ0
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9EaXJlY3RFdmFsQ29kZUNhY2hl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUsNyArNDUsOCBAQCB2b2lkIERpcmVjdEV2YWxDb2Rl
Q2FjaGU6OmNsZWFyKCkKICAgICBtX2NhY2hlTWFwLmNsZWFyKCk7CiB9CiAKLXZvaWQgRGlyZWN0
RXZhbENvZGVDYWNoZTo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1w
bGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBEaXJlY3RFdmFsQ29kZUNhY2hlOjp2aXNpdEFn
Z3JlZ2F0ZShWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fbG9j
ayk7CiAgICAgRXZhbENhY2hlTWFwOjppdGVyYXRvciBlbmQgPSBtX2NhY2hlTWFwLmVuZCgpOwpA
QCAtNTMsNSArNTQsNyBAQCB2b2lkIERpcmVjdEV2YWxDb2RlQ2FjaGU6OnZpc2l0QWdncmVnYXRl
CiAgICAgICAgIHZpc2l0b3IuYXBwZW5kKHB0ci0+dmFsdWUpOwogfQogCi19IC8vIG5hbWVzcGFj
ZSBKU0MKK3RlbXBsYXRlIHZvaWQgRGlyZWN0RXZhbENvZGVDYWNoZTo6dmlzaXRBZ2dyZWdhdGUo
QWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBEaXJlY3RFdmFsQ29kZUNhY2hl
Ojp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYpOwogCit9IC8vIG5hbWVzcGFjZSBKU0MKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9EaXJlY3RFdmFsQ29kZUNhY2hlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0RpcmVjdEV2YWxD
b2RlQ2FjaGUuaAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0RpcmVjdEV2YWxDb2RlQ2FjaGUuaAkod29ya2luZyBjb3B5KQpAQCAtOTcsNyArOTcs
NyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJl
dHVybiBtX2NhY2hlTWFwLmlzRW1wdHkoKTsgfQogCi0gICAgICAgIHZvaWQgdmlzaXRBZ2dyZWdh
dGUoU2xvdFZpc2l0b3ImKTsKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9p
ZCB2aXNpdEFnZ3JlZ2F0ZShWaXNpdG9yJik7CiAKICAgICAgICAgdm9pZCBjbGVhcigpOwogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhlY3V0YWJsZVRvQ29kZUJsb2Nr
RWRnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4
ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UuY3BwCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE4IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOC0yMDIw
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtNTMsNyArNTMsOSBAQCB2b2lkIEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2U6
OmZpbmlzaENyCiAgICAgQVNTRVJUKCFpc0FjdGl2ZSgpKTsKIH0KIAotdm9pZCBFeGVjdXRhYmxl
VG9Db2RlQmxvY2tFZGdlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3Im
IHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBFeGVjdXRhYmxlVG9D
b2RlQmxvY2tFZGdlOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZp
c2l0b3IpCisvL3ZvaWQgRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZTo6dmlzaXRDaGlsZHJlbjEo
SlNDZWxsKiBjZWxsLCBBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFZNJiB2
bSA9IHZpc2l0b3Iudm0oKTsKICAgICBFeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlKiBlZGdlID0g
anNDYXN0PEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UqPihjZWxsKTsKQEAgLTExNCwxNSArMTE2
LDE3IEBAIHZvaWQgRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZTo6dmlzaXRDaGkKICAgICAvLyB3
aWxsIGtlZXAgZml4cG9pbnRpbmcgdW50aWwgdGhlIGVuZC4KICAgICB2aXNpdG9yLmFwcGVuZFVu
YmFycmllcmVkKGNvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpOwogICAgIHZtLmV4ZWN1dGFibGVU
b0NvZGVCbG9ja0VkZ2VzV2l0aENvbnN0cmFpbnRzLmFkZChlZGdlKTsKLSAgICBlZGdlLT5ydW5D
b25zdHJhaW50KGxvY2tlciwgdm0sIHZpc2l0b3IpOworICAgIGVkZ2UtPnJ1bkNvbnN0cmFpbnQx
KGxvY2tlciwgdm0sIHZpc2l0b3IpOyAvLyBtbGFtIEZJWE1FCiB9CiAKLXZvaWQgRXhlY3V0YWJs
ZVRvQ29kZUJsb2NrRWRnZTo6dmlzaXRPdXRwdXRDb25zdHJhaW50cyhKU0NlbGwqIGNlbGwsIFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEV4ZWN1dGFibGVUb0Nv
ZGVCbG9ja0VkZ2UpOworCit2b2lkIEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2U6OnZpc2l0T3V0
cHV0Q29uc3RyYWludHMoSlNDZWxsKiBjZWxsLCBBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9y
KQogewogICAgIFZNJiB2bSA9IHZpc2l0b3Iudm0oKTsKICAgICBFeGVjdXRhYmxlVG9Db2RlQmxv
Y2tFZGdlKiBlZGdlID0ganNDYXN0PEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UqPihjZWxsKTsK
ICAgICAKLSAgICBlZGdlLT5ydW5Db25zdHJhaW50KE5vTG9ja2luZ05lY2Vzc2FyeSwgdm0sIHZp
c2l0b3IpOworICAgIGVkZ2UtPnJ1bkNvbnN0cmFpbnQxKE5vTG9ja2luZ05lY2Vzc2FyeSwgdm0s
IHZpc2l0b3IpOwogfQogCiB2b2lkIEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2U6OmZpbmFsaXpl
VW5jb25kaXRpb25hbGx5KFZNJiB2bSkKQEAgLTE4NiwxNiArMTkwLDIwIEBAIEV4ZWN1dGFibGVU
b0NvZGVCbG9ja0VkZ2U6OkV4ZWN1dGFibGVUb0MKIHsKIH0KIAotdm9pZCBFeGVjdXRhYmxlVG9D
b2RlQmxvY2tFZGdlOjpydW5Db25zdHJhaW50KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYgbG9j
a2VyLCBWTSYgdm0sIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy90ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPgorLy92b2lkIEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2U6OnJ1bkNvbnN0cmFpbnQx
KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYgbG9ja2VyLCBWTSYgdm0sIFZpc2l0b3ImIHZpc2l0
b3IpCit2b2lkIEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2U6OnJ1bkNvbnN0cmFpbnQxKGNvbnN0
IENvbmN1cnJlbnRKU0xvY2tlciYgbG9ja2VyLCBWTSYgdm0sIEFic3RyYWN0U2xvdFZpc2l0b3Im
IHZpc2l0b3IpCiB7CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBtX2NvZGVCbG9jay5nZXQo
KTsKICAgICAKLSAgICBjb2RlQmxvY2stPnByb3BhZ2F0ZVRyYW5zaXRpb25zKGxvY2tlciwgdmlz
aXRvcik7CisgICAgY29kZUJsb2NrLT5wcm9wYWdhdGVUcmFuc2l0aW9uczEobG9ja2VyLCB2aXNp
dG9yKTsKICAgICBjb2RlQmxvY2stPmRldGVybWluZUxpdmVuZXNzKGxvY2tlciwgdmlzaXRvcik7
CiAgICAgCiAgICAgaWYgKHZtLmhlYXAuaXNNYXJrZWQoY29kZUJsb2NrKSkKICAgICAgICAgdm0u
ZXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZXNXaXRoQ29uc3RyYWludHMucmVtb3ZlKHRoaXMpOwog
fQogCi19IC8vIG5hbWVzcGFjZSBKU0MKKy8vdGVtcGxhdGUgdm9pZCBFeGVjdXRhYmxlVG9Db2Rl
QmxvY2tFZGdlOjpydW5Db25zdHJhaW50MShjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBWTSYs
IFNsb3RWaXNpdG9yJik7CisvL3RlbXBsYXRlIHZvaWQgRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRn
ZTo6cnVuQ29uc3RyYWludDEoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgVk0mLCBBYnN0cmFj
dFNsb3RWaXNpdG9yJik7CiAKK30gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhlY3V0YWJsZVRvQ29kZUJsb2Nr
RWRnZS5oCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOC0yMDIwIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTMsOSAr
NTMsMTAgQEAgcHVibGljOgogICAgIERFQ0xBUkVfSU5GTzsKIAogICAgIENvZGVCbG9jayogY29k
ZUJsb2NrKCkgY29uc3QgeyByZXR1cm4gbV9jb2RlQmxvY2suZ2V0KCk7IH0KLSAgICAKLSAgICBz
dGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7Ci0gICAgc3Rh
dGljIHZvaWQgdmlzaXRPdXRwdXRDb25zdHJhaW50cyhKU0NlbGwqLCBTbG90VmlzaXRvciYpOwor
CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKKy8vICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hp
bGRyZW4xKEpTQ2VsbCosIEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKKyAgICBzdGF0aWMgdm9pZCB2
aXNpdE91dHB1dENvbnN0cmFpbnRzKEpTQ2VsbCosIEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKICAg
ICB2b2lkIGZpbmFsaXplVW5jb25kaXRpb25hbGx5KFZNJik7CiAgICAgCiAgICAgc3RhdGljIENv
ZGVCbG9jayogdW53cmFwKEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UqIGVkZ2UpCkBAIC04MSw5
ICs4MiwxMSBAQCBwcml2YXRlOgogICAgIHZvaWQgYWN0aXZhdGUoKTsKICAgICB2b2lkIGRlYWN0
aXZhdGUoKTsKICAgICBib29sIGlzQWN0aXZlKCkgY29uc3Q7Ci0gICAgCi0gICAgdm9pZCBydW5D
b25zdHJhaW50KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIFZNJiwgU2xvdFZpc2l0b3ImKTsK
LSAgICAKKworLy8gICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KKy8vICAgIHZvaWQgcnVu
Q29uc3RyYWludDEoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgVk0mLCBWaXNpdG9yJik7Cisg
ICAgdm9pZCBydW5Db25zdHJhaW50MShjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBWTSYsIEFi
c3RyYWN0U2xvdFZpc2l0b3ImKTsKKwogICAgIFdyaXRlQmFycmllcjxDb2RlQmxvY2s+IG1fY29k
ZUJsb2NrOwogfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5
SWRWYXJpYW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvR2V0QnlJZFZhcmlhbnQuY3BwCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFZhcmlhbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
NTYsMTYgKzE1NiwyNiBAQCBib29sIEdldEJ5SWRWYXJpYW50OjphdHRlbXB0VG9NZXJnZShjb25z
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgR2V0QnlJZFZhcmlhbnQ6OnZpc2l0QWdncmVn
YXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy90ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgor
Ly92b2lkIEdldEJ5SWRWYXJpYW50Ojp2aXNpdEFnZ3JlZ2F0ZShWaXNpdG9yJiB2aXNpdG9yKQor
dm9pZCBHZXRCeUlkVmFyaWFudDo6dmlzaXRBZ2dyZWdhdGUxKEFic3RyYWN0U2xvdFZpc2l0b3Im
IHZpc2l0b3IpCiB7Ci0gICAgbV9pZGVudGlmaWVyLnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOwor
ICAgIG1faWRlbnRpZmllci52aXNpdEFnZ3JlZ2F0ZTEodmlzaXRvcik7CiB9CiAKLXZvaWQgR2V0
QnlJZFZhcmlhbnQ6Om1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy90ZW1wbGF0
ZSB2b2lkIEdldEJ5SWRWYXJpYW50Ojp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYpOworLy90
ZW1wbGF0ZSB2b2lkIEdldEJ5SWRWYXJpYW50Ojp2aXNpdEFnZ3JlZ2F0ZShEZWJ1Z1Nsb3RWaXNp
dG9yJik7CisKKy8vdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KKy8vdm9pZCBHZXRCeUlkVmFy
aWFudDo6bWFya0lmQ2hlYXAoVmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgR2V0QnlJZFZhcmlhbnQ6
Om1hcmtJZkNoZWFwMShBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewotICAgIG1fc3Ry
dWN0dXJlU2V0Lm1hcmtJZkNoZWFwKHZpc2l0b3IpOworICAgIG1fc3RydWN0dXJlU2V0Lm1hcmtJ
ZkNoZWFwMSh2aXNpdG9yKTsKIH0KIAorLy90ZW1wbGF0ZSB2b2lkIEdldEJ5SWRWYXJpYW50Ojpt
YXJrSWZDaGVhcChTbG90VmlzaXRvciYpOworLy90ZW1wbGF0ZSB2b2lkIEdldEJ5SWRWYXJpYW50
OjptYXJrSWZDaGVhcChEZWJ1Z1Nsb3RWaXNpdG9yJik7CisKIGJvb2wgR2V0QnlJZFZhcmlhbnQ6
OmZpbmFsaXplKFZNJiB2bSkKIHsKICAgICBpZiAoIW1fc3RydWN0dXJlU2V0LmlzU3RpbGxBbGl2
ZSh2bSkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFZhcmlh
bnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJ
ZFZhcmlhbnQuaAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0dldEJ5SWRWYXJpYW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTc3LDggKzc3LDEwIEBA
IHB1YmxpYzoKIAogICAgIGJvb2wgYXR0ZW1wdFRvTWVyZ2UoY29uc3QgR2V0QnlJZFZhcmlhbnQm
IG90aGVyKTsKICAgICAKLSAgICB2b2lkIHZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJik7Ci0g
ICAgdm9pZCBtYXJrSWZDaGVhcChTbG90VmlzaXRvciYpOworLy8gICAgdGVtcGxhdGU8dHlwZW5h
bWUgVmlzaXRvcj4gdm9pZCB2aXNpdEFnZ3JlZ2F0ZShWaXNpdG9yJik7CisvLyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIG1hcmtJZkNoZWFwKFZpc2l0b3ImKTsKKyAgICB2b2lk
IHZpc2l0QWdncmVnYXRlMShBYnN0cmFjdFNsb3RWaXNpdG9yJik7CisgICAgdm9pZCBtYXJrSWZD
aGVhcDEoQWJzdHJhY3RTbG90VmlzaXRvciYpOwogICAgIGJvb2wgZmluYWxpemUoVk0mKTsKICAg
ICAKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeVN0YXR1cy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5U3RhdHVzLmNwcAkocmV2aXNpb24gMjcxNDQz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5U3RhdHVzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNTMwLDIwICs1MzAsMzEgQEAgdm9pZCBHZXRCeVN0YXR1czo6ZmlsdGVy
KGNvbnN0IFN0cnVjdHVyZQogICAgICAgICBtX3N0YXRlID0gTm9JbmZvcm1hdGlvbjsKIH0KIAot
dm9pZCBHZXRCeVN0YXR1czo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisv
L3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+CisvL3ZvaWQgR2V0QnlTdGF0dXM6OnZpc2l0QWdn
cmVnYXRlKFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIEdldEJ5U3RhdHVzOjp2aXNpdEFnZ3JlZ2F0
ZTEoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBpZiAoaXNNb2R1bGVOYW1l
c3BhY2UoKSkKLSAgICAgICAgbV9tb2R1bGVOYW1lc3BhY2VEYXRhLT5tX2lkZW50aWZpZXIudmlz
aXRBZ2dyZWdhdGUodmlzaXRvcik7CisgICAgICAgIG1fbW9kdWxlTmFtZXNwYWNlRGF0YS0+bV9p
ZGVudGlmaWVyLnZpc2l0QWdncmVnYXRlMSh2aXNpdG9yKTsKICAgICBmb3IgKEdldEJ5SWRWYXJp
YW50JiB2YXJpYW50IDogbV92YXJpYW50cykKLSAgICAgICAgdmFyaWFudC52aXNpdEFnZ3JlZ2F0
ZSh2aXNpdG9yKTsKKyAgICAgICAgdmFyaWFudC52aXNpdEFnZ3JlZ2F0ZTEodmlzaXRvcik7CiB9
CiAKLXZvaWQgR2V0QnlTdGF0dXM6Om1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQor
Ly90ZW1wbGF0ZSB2b2lkIEdldEJ5U3RhdHVzOjp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYp
OworLy90ZW1wbGF0ZSB2b2lkIEdldEJ5U3RhdHVzOjp2aXNpdEFnZ3JlZ2F0ZShEZWJ1Z1Nsb3RW
aXNpdG9yJik7CisKKy8vdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KKy8vdm9pZCBHZXRCeVN0
YXR1czo6bWFya0lmQ2hlYXAoVmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgR2V0QnlTdGF0dXM6Om1h
cmtJZkNoZWFwMShBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGZvciAoR2V0
QnlJZFZhcmlhbnQmIHZhcmlhbnQgOiBtX3ZhcmlhbnRzKQotICAgICAgICB2YXJpYW50Lm1hcmtJ
ZkNoZWFwKHZpc2l0b3IpOworICAgICAgICB2YXJpYW50Lm1hcmtJZkNoZWFwMSh2aXNpdG9yKTsK
IH0KIAorLy90ZW1wbGF0ZSB2b2lkIEdldEJ5U3RhdHVzOjptYXJrSWZDaGVhcChTbG90VmlzaXRv
ciYpOworLy90ZW1wbGF0ZSB2b2lkIEdldEJ5U3RhdHVzOjptYXJrSWZDaGVhcChEZWJ1Z1Nsb3RW
aXNpdG9yJik7CisKKwogYm9vbCBHZXRCeVN0YXR1czo6ZmluYWxpemUoVk0mIHZtKQogewogICAg
IGZvciAoR2V0QnlJZFZhcmlhbnQmIHZhcmlhbnQgOiBtX3ZhcmlhbnRzKSB7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlTdGF0dXMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlTdGF0dXMuaAkocmV2aXNpb24gMjcx
NDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5U3RhdHVzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTExOCw4ICsxMTgsMTAgQEAgcHVibGljOgogICAgIEpTTW9kdWxlRW52
aXJvbm1lbnQqIG1vZHVsZUVudmlyb25tZW50KCkgY29uc3QgeyByZXR1cm4gbV9tb2R1bGVOYW1l
c3BhY2VEYXRhLT5tX21vZHVsZUVudmlyb25tZW50OyB9CiAgICAgU2NvcGVPZmZzZXQgc2NvcGVP
ZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX21vZHVsZU5hbWVzcGFjZURhdGEtPm1fc2NvcGVPZmZz
ZXQ7IH0KICAgICAKLSAgICB2b2lkIHZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJik7Ci0gICAg
dm9pZCBtYXJrSWZDaGVhcChTbG90VmlzaXRvciYpOworLy8gICAgdGVtcGxhdGU8dHlwZW5hbWUg
VmlzaXRvcj4gdm9pZCB2aXNpdEFnZ3JlZ2F0ZShWaXNpdG9yJik7CisvLyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBWaXNpdG9yPiB2b2lkIG1hcmtJZkNoZWFwKFZpc2l0b3ImKTsKKyAgICB2b2lkIHZp
c2l0QWdncmVnYXRlMShBYnN0cmFjdFNsb3RWaXNpdG9yJik7CisgICAgdm9pZCBtYXJrSWZDaGVh
cDEoQWJzdHJhY3RTbG90VmlzaXRvciYpOwogICAgIGJvb2wgZmluYWxpemUoVk0mKTsgLy8gUmV0
dXJuIHRydWUgaWYgdGhpcyBnZXRzIHRvIGxpdmUuCiAKICAgICBib29sIGFwcGVuZFZhcmlhbnQo
Y29uc3QgR2V0QnlJZFZhcmlhbnQmKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9JbkJ5SWRTdGF0dXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9JbkJ5SWRTdGF0dXMuY3BwCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5CeUlkU3RhdHVzLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjUxLDEyICsyNTEsMTcgQEAgdm9pZCBJbkJ5SWRTdGF0dXM6OmZpbHRlcihjb25zdCBTdHJ1
Y3R1cgogICAgICAgICBtX3N0YXRlID0gTm9JbmZvcm1hdGlvbjsKIH0KIAotdm9pZCBJbkJ5SWRT
dGF0dXM6Om1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy90ZW1wbGF0ZTx0eXBl
bmFtZSBWaXNpdG9yPgorLy92b2lkIEluQnlJZFN0YXR1czo6bWFya0lmQ2hlYXAoVmlzaXRvciYg
dmlzaXRvcikKK3ZvaWQgSW5CeUlkU3RhdHVzOjptYXJrSWZDaGVhcDEoQWJzdHJhY3RTbG90Vmlz
aXRvciYgdmlzaXRvcikKIHsKICAgICBmb3IgKEluQnlJZFZhcmlhbnQmIHZhcmlhbnQgOiBtX3Zh
cmlhbnRzKQotICAgICAgICB2YXJpYW50Lm1hcmtJZkNoZWFwKHZpc2l0b3IpOworICAgICAgICB2
YXJpYW50Lm1hcmtJZkNoZWFwMSh2aXNpdG9yKTsKIH0KIAorLy90ZW1wbGF0ZSB2b2lkIEluQnlJ
ZFN0YXR1czo6bWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImKTsKKy8vdGVtcGxhdGUgdm9pZCBJbkJ5
SWRTdGF0dXM6Om1hcmtJZkNoZWFwKERlYnVnU2xvdFZpc2l0b3ImKTsKKwogYm9vbCBJbkJ5SWRT
dGF0dXM6OmZpbmFsaXplKFZNJiB2bSkKIHsKICAgICBmb3IgKEluQnlJZFZhcmlhbnQmIHZhcmlh
bnQgOiBtX3ZhcmlhbnRzKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
SW5CeUlkU3RhdHVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0luQnlJZFN0YXR1cy5oCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvSW5CeUlkU3RhdHVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwNiw3ICsx
MDYsOCBAQCBwdWJsaWM6CiAgICAgLy8gQXR0ZW1wdHMgdG8gcmVkdWNlIHRoZSBzZXQgb2YgdmFy
aWFudHMgdG8gZml0IHRoZSBnaXZlbiBzdHJ1Y3R1cmUgc2V0LiBUaGlzIG1heSBiZSBhcHByb3hp
bWF0ZS4KICAgICB2b2lkIGZpbHRlcihjb25zdCBTdHJ1Y3R1cmVTZXQmKTsKICAgICAKLSAgICB2
b2lkIG1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJik7CisvLyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPiB2b2lkIG1hcmtJZkNoZWFwKFZpc2l0b3ImKTsKKyAgICB2b2lkIG1hcmtJZkNoZWFw
MShBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAgICAgYm9vbCBmaW5hbGl6ZShWTSYpOwogCiAgICAg
dm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvSW5CeUlkVmFyaWFudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0luQnlJZFZhcmlhbnQuY3BwCShyZXZpc2lvbiAyNzE0NDMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5CeUlkVmFyaWFudC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTY0LDExICs2NCwxNiBAQCBib29sIEluQnlJZFZhcmlhbnQ6OmF0dGVtcHRU
b01lcmdlKGNvbnN0CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgSW5CeUlkVmFyaWFudDo6
bWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3RlbXBsYXRlPHR5cGVuYW1lIFZp
c2l0b3I+CisvL3ZvaWQgSW5CeUlkVmFyaWFudDo6bWFya0lmQ2hlYXAoVmlzaXRvciYgdmlzaXRv
cikKK3ZvaWQgSW5CeUlkVmFyaWFudDo6bWFya0lmQ2hlYXAxKEFic3RyYWN0U2xvdFZpc2l0b3Im
IHZpc2l0b3IpCiB7Ci0gICAgbV9zdHJ1Y3R1cmVTZXQubWFya0lmQ2hlYXAodmlzaXRvcik7Cisg
ICAgbV9zdHJ1Y3R1cmVTZXQubWFya0lmQ2hlYXAxKHZpc2l0b3IpOwogfQogCisvL3RlbXBsYXRl
IHZvaWQgSW5CeUlkVmFyaWFudDo6bWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImKTsKKy8vdGVtcGxh
dGUgdm9pZCBJbkJ5SWRWYXJpYW50OjptYXJrSWZDaGVhcChEZWJ1Z1Nsb3RWaXNpdG9yJik7CisK
IGJvb2wgSW5CeUlkVmFyaWFudDo6ZmluYWxpemUoVk0mIHZtKQogewogICAgIGlmICghbV9zdHJ1
Y3R1cmVTZXQuaXNTdGlsbEFsaXZlKHZtKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9JbkJ5SWRWYXJpYW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0luQnlJZFZhcmlhbnQuaAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luQnlJZFZhcmlhbnQuaAkod29ya2luZyBjb3B5KQpA
QCAtNTcsNyArNTcsOCBAQCBwdWJsaWM6CiAKICAgICBib29sIGF0dGVtcHRUb01lcmdlKGNvbnN0
IEluQnlJZFZhcmlhbnQmIG90aGVyKTsKICAgICAKLSAgICB2b2lkIG1hcmtJZkNoZWFwKFNsb3RW
aXNpdG9yJik7CisvLyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIG1hcmtJZkNo
ZWFwKFZpc2l0b3ImKTsKKyAgICB2b2lkIG1hcmtJZkNoZWFwMShBYnN0cmFjdFNsb3RWaXNpdG9y
Jik7CiAgICAgYm9vbCBmaW5hbGl6ZShWTSYpOwogCiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFt
JikgY29uc3Q7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW50ZXJuYWxG
dW5jdGlvbkFsbG9jYXRpb25Qcm9maWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0ludGVybmFsRnVuY3Rpb25BbGxvY2F0aW9uUHJvZmlsZS5oCShyZXZp
c2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW50ZXJuYWxG
dW5jdGlvbkFsbG9jYXRpb25Qcm9maWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDcgKzM5LDcg
QEAgcHVibGljOgogICAgIFN0cnVjdHVyZSogY3JlYXRlQWxsb2NhdGlvblN0cnVjdHVyZUZyb21C
YXNlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU0NlbGwqIG93bmVyLCBKU09iamVjdCogcHJvdG90
eXBlLCBTdHJ1Y3R1cmUqIGJhc2UpOwogCiAgICAgdm9pZCBjbGVhcigpIHsgbV9zdHJ1Y3R1cmUu
Y2xlYXIoKTsgfQotICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3Ip
IHsgdmlzaXRvci5hcHBlbmQobV9zdHJ1Y3R1cmUpOyB9CisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
VmlzaXRvcj4gdm9pZCB2aXNpdEFnZ3JlZ2F0ZShWaXNpdG9yJiB2aXNpdG9yKSB7IHZpc2l0b3Iu
YXBwZW5kKG1fc3RydWN0dXJlKTsgfQogCiBwcml2YXRlOgogICAgIFdyaXRlQmFycmllcjxTdHJ1
Y3R1cmU+IG1fc3RydWN0dXJlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L09iamVjdEFsbG9jYXRpb25Qcm9maWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL09iamVjdEFsbG9jYXRpb25Qcm9maWxlLmgJKHJldmlzaW9uIDI3MTQ0
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PYmplY3RBbGxvY2F0aW9uUHJv
ZmlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC02NCw3ICs2NCw4IEBAIHByb3RlY3RlZDoKICAgICAg
ICAgQVNTRVJUKGlzTnVsbCgpKTsKICAgICB9CiAKLSAgICB2b2lkIHZpc2l0QWdncmVnYXRlKFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+CisgICAg
dm9pZCB2aXNpdEFnZ3JlZ2F0ZShWaXNpdG9yJiB2aXNpdG9yKQogICAgIHsKICAgICAgICAgdmlz
aXRvci5hcHBlbmQobV9zdHJ1Y3R1cmUpOwogICAgIH0KQEAgLTExMCw3ICsxMTEsOCBAQCBwdWJs
aWM6CiAgICAgICAgIEFTU0VSVChpc051bGwoKSk7CiAgICAgfQogCi0gICAgdm9pZCB2aXNpdEFn
Z3JlZ2F0ZShTbG90VmlzaXRvciYgdmlzaXRvcikKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNp
dG9yPgorICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoVmlzaXRvciYgdmlzaXRvcikKICAgICB7CiAg
ICAgICAgIEJhc2U6OnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOwogICAgICAgICB2aXNpdG9yLmFw
cGVuZChtX3Byb3RvdHlwZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
UG9seW1vcnBoaWNBY2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM1OCw3ICszNTgsOSBAQCBib29sIFBvbHltb3JwaGljQWNjZXNzOjp2aXNp
dFdlYWsoVk0mIHZtCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgUG9seW1vcnBoaWNBY2Nl
c3M6OnByb3BhZ2F0ZVRyYW5zaXRpb25zKFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBjb25zdAorLy90
ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgorLy9ib29sIFBvbHltb3JwaGljQWNjZXNzOjpwcm9w
YWdhdGVUcmFuc2l0aW9uczEwKFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0Citib29sIFBvbHltb3Jw
aGljQWNjZXNzOjpwcm9wYWdhdGVUcmFuc2l0aW9uczEwKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZp
c2l0b3IpIGNvbnN0CiB7CiAgICAgYm9vbCByZXN1bHQgPSB0cnVlOwogICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBzaXplKCk7ICsraSkKQEAgLTM2NiwxMiArMzY4LDIxIEBAIGJvb2wgUG9s
eW1vcnBoaWNBY2Nlc3M6OnByb3BhZ2F0ZVRyYW5zaXQKICAgICByZXR1cm4gcmVzdWx0OwogfQog
Ci12b2lkIFBvbHltb3JwaGljQWNjZXNzOjp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYgdmlz
aXRvcikKKy8vdGVtcGxhdGU8PiBib29sIFBvbHltb3JwaGljQWNjZXNzOjpwcm9wYWdhdGVUcmFu
c2l0aW9uczEwKFNsb3RWaXNpdG9yJikgY29uc3Q7CisvL3RlbXBsYXRlPD4gYm9vbCBQb2x5bW9y
cGhpY0FjY2Vzczo6cHJvcGFnYXRlVHJhbnNpdGlvbnMxMChBYnN0cmFjdFNsb3RWaXNpdG9yJikg
Y29uc3Q7CisKKworLy90ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgorLy92b2lkIFBvbHltb3Jw
aGljQWNjZXNzOjp2aXNpdEFnZ3JlZ2F0ZShWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBQb2x5bW9y
cGhpY0FjY2Vzczo6dmlzaXRBZ2dyZWdhdGUxKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3Ip
CiB7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemUoKTsgKytpKQotICAgICAgICBh
dChpKS52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKKyAgICAgICAgYXQoaSkudmlzaXRBZ2dyZWdh
dGUxKHZpc2l0b3IpOwogfQogCisvL3RlbXBsYXRlIHZvaWQgUG9seW1vcnBoaWNBY2Nlc3M6OnZp
c2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJik7CisvL3RlbXBsYXRlIHZvaWQgUG9seW1vcnBoaWNB
Y2Nlc3M6OnZpc2l0QWdncmVnYXRlKERlYnVnU2xvdFZpc2l0b3ImKTsKKwogdm9pZCBQb2x5bW9y
cGhpY0FjY2Vzczo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAogewogICAgIG91dC5wcmlu
dChSYXdQb2ludGVyKHRoaXMpLCAiOlsiKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5oCShyZXZpc2lvbiAyNzE0NDMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuaAkod29y
a2luZyBjb3B5KQpAQCAtMTUyLDE0ICsxNTIsMTYgQEAgcHVibGljOgogICAgIGNvbnN0IEFjY2Vz
c0Nhc2UmIGF0KHVuc2lnbmVkIGkpIGNvbnN0IHsgcmV0dXJuICptX2xpc3RbaV07IH0KICAgICBj
b25zdCBBY2Nlc3NDYXNlJiBvcGVyYXRvcltdKHVuc2lnbmVkIGkpIGNvbnN0IHsgcmV0dXJuICpt
X2xpc3RbaV07IH0KIAotICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImKTsKKy8v
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgdmlzaXRBZ2dyZWdhdGUoVmlzaXRv
ciYpOworICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUxKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKIAog
ICAgIC8vIElmIHRoaXMgcmV0dXJucyBmYWxzZSB0aGVuIHdlIGFyZSByZXF1ZXN0aW5nIGEgcmVz
ZXQgb2YgdGhlIG93bmluZyBTdHJ1Y3R1cmVTdHViSW5mby4KICAgICBib29sIHZpc2l0V2VhayhW
TSYpIGNvbnN0OwogICAgIAogICAgIC8vIFRoaXMgcmV0dXJucyB0cnVlIGlmIGl0IGhhcyBtYXJr
ZWQgZXZlcnl0aGluZyBpdCB3aWxsIGV2ZXIgbWFya2VkLiBUaGlzIGNhbiBiZSB1c2VkIGFzIGFu
CiAgICAgLy8gb3B0aW1pemF0aW9uIHRvIHRoZW4gYXZvaWQgY2FsbGluZyB0aGlzIG1ldGhvZCBh
Z2FpbiBkdXJpbmcgdGhlIGZpeHBvaW50LgotICAgIGJvb2wgcHJvcGFnYXRlVHJhbnNpdGlvbnMo
U2xvdFZpc2l0b3ImKSBjb25zdDsKKy8vICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IGJv
b2wgcHJvcGFnYXRlVHJhbnNpdGlvbnMxMChWaXNpdG9yJikgY29uc3Q7CisgICAgYm9vbCBwcm9w
YWdhdGVUcmFuc2l0aW9uczEwKEFic3RyYWN0U2xvdFZpc2l0b3ImKSBjb25zdDsKIAogICAgIHZv
aWQgYWJvdXRUb0RpZSgpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
UHV0QnlJZFN0YXR1cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1B1dEJ5SWRTdGF0dXMuY3BwCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM5NiwxMiArMzk2LDE3IEBAIFB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6c2xvd1ZlcnNp
b24KICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhtYWtlc0NhbGxzKCkgPyBNYWtlc0NhbGxzIDog
VGFrZXNTbG93UGF0aCk7CiB9CiAKLXZvaWQgUHV0QnlJZFN0YXR1czo6bWFya0lmQ2hlYXAoU2xv
dFZpc2l0b3ImIHZpc2l0b3IpCisvL3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+CisvL3ZvaWQg
UHV0QnlJZFN0YXR1czo6bWFya0lmQ2hlYXAoVmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgUHV0QnlJ
ZFN0YXR1czo6bWFya0lmQ2hlYXAxKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAg
ICAgZm9yIChQdXRCeUlkVmFyaWFudCYgdmFyaWFudCA6IG1fdmFyaWFudHMpCi0gICAgICAgIHZh
cmlhbnQubWFya0lmQ2hlYXAodmlzaXRvcik7CisgICAgICAgIHZhcmlhbnQubWFya0lmQ2hlYXAx
KHZpc2l0b3IpOwogfQogCisvL3RlbXBsYXRlIHZvaWQgUHV0QnlJZFN0YXR1czo6bWFya0lmQ2hl
YXAoU2xvdFZpc2l0b3ImKTsKKy8vdGVtcGxhdGUgdm9pZCBQdXRCeUlkU3RhdHVzOjptYXJrSWZD
aGVhcChEZWJ1Z1Nsb3RWaXNpdG9yJik7CisKIGJvb2wgUHV0QnlJZFN0YXR1czo6ZmluYWxpemUo
Vk0mIHZtKQogewogICAgIGZvciAoUHV0QnlJZFZhcmlhbnQmIHZhcmlhbnQgOiBtX3ZhcmlhbnRz
KSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3Rh
dHVzLmgJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9QdXRCeUlkU3RhdHVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTExNyw3ICsxMTcsOCBAQCBwdWJs
aWM6CiAgICAgY29uc3QgUHV0QnlJZFZhcmlhbnQmIGF0KHNpemVfdCBpbmRleCkgY29uc3QgeyBy
ZXR1cm4gbV92YXJpYW50c1tpbmRleF07IH0KICAgICBjb25zdCBQdXRCeUlkVmFyaWFudCYgb3Bl
cmF0b3JbXShzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIGF0KGluZGV4KTsgfQogICAgIAot
ICAgIHZvaWQgbWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImKTsKKy8vICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFZpc2l0b3I+IHZvaWQgbWFya0lmQ2hlYXAoVmlzaXRvciYpOworICAgIHZvaWQgbWFya0lm
Q2hlYXAxKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKICAgICBib29sIGZpbmFsaXplKFZNJik7CiAg
ICAgCiAgICAgdm9pZCBtZXJnZShjb25zdCBQdXRCeUlkU3RhdHVzJik7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkVmFyaWFudC5jcHAJKHJldmlz
aW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkVmFy
aWFudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2MiwxMyArMjYyLDE4IEBAIGJvb2wgUHV0QnlJ
ZFZhcmlhbnQ6OmF0dGVtcHRUb01lcmdlVHJhbnMKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9p
ZCBQdXRCeUlkVmFyaWFudDo6bWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3Rl
bXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+CisvL3ZvaWQgUHV0QnlJZFZhcmlhbnQ6Om1hcmtJZkNo
ZWFwKFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIFB1dEJ5SWRWYXJpYW50OjptYXJrSWZDaGVhcDEo
QWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKLSAgICBtX29sZFN0cnVjdHVyZS5tYXJr
SWZDaGVhcCh2aXNpdG9yKTsKKyAgICBtX29sZFN0cnVjdHVyZS5tYXJrSWZDaGVhcDEodmlzaXRv
cik7CiAgICAgaWYgKG1fbmV3U3RydWN0dXJlKQotICAgICAgICBtX25ld1N0cnVjdHVyZS0+bWFy
a0lmQ2hlYXAodmlzaXRvcik7CisgICAgICAgIG1fbmV3U3RydWN0dXJlLT5tYXJrSWZDaGVhcDEo
dmlzaXRvcik7CiB9CiAKKy8vdGVtcGxhdGUgdm9pZCBQdXRCeUlkVmFyaWFudDo6bWFya0lmQ2hl
YXAoU2xvdFZpc2l0b3ImKTsKKy8vdGVtcGxhdGUgdm9pZCBQdXRCeUlkVmFyaWFudDo6bWFya0lm
Q2hlYXAoRGVidWdTbG90VmlzaXRvciYpOworCiBib29sIFB1dEJ5SWRWYXJpYW50OjpmaW5hbGl6
ZShWTSYgdm0pCiB7CiAgICAgaWYgKCFtX29sZFN0cnVjdHVyZS5pc1N0aWxsQWxpdmUodm0pKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50
LmgJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Q
dXRCeUlkVmFyaWFudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzIsNyArMTMyLDggQEAgcHVibGlj
OgogCiAgICAgYm9vbCBhdHRlbXB0VG9NZXJnZShjb25zdCBQdXRCeUlkVmFyaWFudCYgb3RoZXIp
OwogICAgIAotICAgIHZvaWQgbWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImKTsKKy8vICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgbWFya0lmQ2hlYXAoVmlzaXRvciYpOworICAgIHZv
aWQgbWFya0lmQ2hlYXAxKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKICAgICBib29sIGZpbmFsaXpl
KFZNJik7CiAgICAgCiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUmVjb3JkZWRTdGF0dXNlcy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1JlY29yZGVkU3RhdHVzZXMu
Y3BwCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
UmVjb3JkZWRTdGF0dXNlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg0LDI2ICs4NCwzNiBAQCBE
ZWxldGVCeVN0YXR1cyogUmVjb3JkZWRTdGF0dXNlczo6YWRkRGVsCiAgICAgcmV0dXJuIHJlc3Vs
dDsKIH0KIAotdm9pZCBSZWNvcmRlZFN0YXR1c2VzOjp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRv
ciYgc2xvdFZpc2l0b3IpCisvL3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+CisvL3ZvaWQgUmVj
b3JkZWRTdGF0dXNlczo6dmlzaXRBZ2dyZWdhdGUoVmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgUmVj
b3JkZWRTdGF0dXNlczo6dmlzaXRBZ2dyZWdhdGUxKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0
b3IpCiB7CiAgICAgZm9yIChhdXRvJiBwYWlyIDogZ2V0cykKLSAgICAgICAgcGFpci5zZWNvbmQt
PnZpc2l0QWdncmVnYXRlKHNsb3RWaXNpdG9yKTsKKyAgICAgICAgcGFpci5zZWNvbmQtPnZpc2l0
QWdncmVnYXRlMSh2aXNpdG9yKTsKICAgICBmb3IgKGF1dG8mIHBhaXIgOiBkZWxldGVzKQotICAg
ICAgICBwYWlyLnNlY29uZC0+dmlzaXRBZ2dyZWdhdGUoc2xvdFZpc2l0b3IpOworICAgICAgICBw
YWlyLnNlY29uZC0+dmlzaXRBZ2dyZWdhdGUxKHZpc2l0b3IpOwogfQogCi12b2lkIFJlY29yZGVk
U3RhdHVzZXM6Om1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvcikKKy8vdGVtcGxh
dGUgdm9pZCBSZWNvcmRlZFN0YXR1c2VzOjp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYpOwor
Ly90ZW1wbGF0ZSB2b2lkIFJlY29yZGVkU3RhdHVzZXM6OnZpc2l0QWdncmVnYXRlKERlYnVnU2xv
dFZpc2l0b3ImKTsKKworLy90ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgorLy92b2lkIFJlY29y
ZGVkU3RhdHVzZXM6Om1hcmtJZkNoZWFwKFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIFJlY29yZGVk
U3RhdHVzZXM6Om1hcmtJZkNoZWFwMShBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewog
ICAgIGZvciAoYXV0byYgcGFpciA6IGdldHMpCi0gICAgICAgIHBhaXIuc2Vjb25kLT5tYXJrSWZD
aGVhcChzbG90VmlzaXRvcik7CisgICAgICAgIHBhaXIuc2Vjb25kLT5tYXJrSWZDaGVhcDEodmlz
aXRvcik7CiAgICAgZm9yIChhdXRvJiBwYWlyIDogcHV0cykKLSAgICAgICAgcGFpci5zZWNvbmQt
Pm1hcmtJZkNoZWFwKHNsb3RWaXNpdG9yKTsKKyAgICAgICAgcGFpci5zZWNvbmQtPm1hcmtJZkNo
ZWFwMSh2aXNpdG9yKTsKICAgICBmb3IgKGF1dG8mIHBhaXIgOiBpbnMpCi0gICAgICAgIHBhaXIu
c2Vjb25kLT5tYXJrSWZDaGVhcChzbG90VmlzaXRvcik7CisgICAgICAgIHBhaXIuc2Vjb25kLT5t
YXJrSWZDaGVhcDEodmlzaXRvcik7CiAgICAgZm9yIChhdXRvJiBwYWlyIDogZGVsZXRlcykKLSAg
ICAgICAgcGFpci5zZWNvbmQtPm1hcmtJZkNoZWFwKHNsb3RWaXNpdG9yKTsKKyAgICAgICAgcGFp
ci5zZWNvbmQtPm1hcmtJZkNoZWFwMSh2aXNpdG9yKTsKIH0KIAorLy90ZW1wbGF0ZSB2b2lkIFJl
Y29yZGVkU3RhdHVzZXM6Om1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJik7CisvL3RlbXBsYXRlIHZv
aWQgUmVjb3JkZWRTdGF0dXNlczo6bWFya0lmQ2hlYXAoRGVidWdTbG90VmlzaXRvciYpOworCiB2
b2lkIFJlY29yZGVkU3RhdHVzZXM6OmZpbmFsaXplV2l0aG91dERlbGV0aW5nKFZNJiB2bSkKIHsK
ICAgICAvLyBUaGlzIHZhcmlhbnQgb2YgZmluYWxpemUgZ2V0cyBjYWxsZWQgZnJvbSB3aXRoaW4g
Z3JhcGggc2FmZXBvaW50cyAtLSBzbyB0aGVyZSBtYXkgYmUgREZHIElSIGluCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUmVjb3JkZWRTdGF0dXNlcy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9SZWNvcmRlZFN0YXR1c2VzLmgJKHJl
dmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9SZWNvcmRl
ZFN0YXR1c2VzLmgJKHdvcmtpbmcgY29weSkKQEAgLTUwLDggKzUwLDEwIEBAIHN0cnVjdCBSZWNv
cmRlZFN0YXR1c2VzIHsKICAgICBJbkJ5SWRTdGF0dXMqIGFkZEluQnlJZFN0YXR1cyhjb25zdCBD
b2RlT3JpZ2luJiwgY29uc3QgSW5CeUlkU3RhdHVzJik7CiAgICAgRGVsZXRlQnlTdGF0dXMqIGFk
ZERlbGV0ZUJ5U3RhdHVzKGNvbnN0IENvZGVPcmlnaW4mLCBjb25zdCBEZWxldGVCeVN0YXR1cyYp
OwogICAgIAotICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImKTsKLSAgICB2b2lk
IG1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJik7CisvLyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNp
dG9yPiB2b2lkIHZpc2l0QWdncmVnYXRlKFZpc2l0b3ImKTsKKy8vICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFZpc2l0b3I+IHZvaWQgbWFya0lmQ2hlYXAoVmlzaXRvciYpOworICAgIHZvaWQgdmlzaXRB
Z2dyZWdhdGUxKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKKyAgICB2b2lkIG1hcmtJZkNoZWFwMShB
YnN0cmFjdFNsb3RWaXNpdG9yJik7CiAgICAgCiAgICAgdm9pZCBmaW5hbGl6ZVdpdGhvdXREZWxl
dGluZyhWTSYpOwogICAgIHZvaWQgZmluYWxpemUoVk0mKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTZXQuY3BwCShyZXZpc2lvbiAyNzE0NDMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU2V0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzEsMTIgKzMxLDE3IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi12b2lk
IFN0cnVjdHVyZVNldDo6bWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0Cisv
L3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+CisvL3ZvaWQgU3RydWN0dXJlU2V0OjptYXJrSWZD
aGVhcChWaXNpdG9yJiB2aXNpdG9yKSBjb25zdAordm9pZCBTdHJ1Y3R1cmVTZXQ6Om1hcmtJZkNo
ZWFwMShBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBjb25zdAogewogICAgIGZvciAoU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUgOiAqdGhpcykKLSAgICAgICAgc3RydWN0dXJlLT5tYXJrSWZDaGVh
cCh2aXNpdG9yKTsKKyAgICAgICAgc3RydWN0dXJlLT5tYXJrSWZDaGVhcDEodmlzaXRvcik7CiB9
CiAKKy8vdGVtcGxhdGUgdm9pZCBTdHJ1Y3R1cmVTZXQ6Om1hcmtJZkNoZWFwKFNsb3RWaXNpdG9y
JikgY29uc3Q7CisvL3RlbXBsYXRlIHZvaWQgU3RydWN0dXJlU2V0OjptYXJrSWZDaGVhcChEZWJ1
Z1Nsb3RWaXNpdG9yJikgY29uc3Q7CisKIGJvb2wgU3RydWN0dXJlU2V0Ojppc1N0aWxsQWxpdmUo
Vk0mIHZtKSBjb25zdAogewogICAgIGZvciAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUgOiAqdGhpcykg
ewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVNldC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTZXQu
aAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0
cnVjdHVyZVNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC01NCw3ICs1NCw4IEBAIHB1YmxpYzoKICAg
ICAgICAgcmV0dXJuIG9ubHlFbnRyeSgpOwogICAgIH0KIAotICAgIHZvaWQgbWFya0lmQ2hlYXAo
U2xvdFZpc2l0b3ImKSBjb25zdDsKKy8vICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZv
aWQgbWFya0lmQ2hlYXAoVmlzaXRvciYpIGNvbnN0OworICAgIHZvaWQgbWFya0lmQ2hlYXAxKEFi
c3RyYWN0U2xvdFZpc2l0b3ImKSBjb25zdDsKICAgICBib29sIGlzU3RpbGxBbGl2ZShWTSYpIGNv
bnN0OwogICAgIAogICAgIHZvaWQgZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYsIER1bXBDb250
ZXh0KikgY29uc3Q7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0
dXJlU3R1YkluZm8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI5MCwxMiArMjkwLDE0IEBAIHZvaWQgU3RydWN0dXJlU3R1YkluZm86OnJlc2V0KGNv
bnN0IENvbmMKICAgICBzZXRDYWNoZVR5cGUobG9ja2VyLCBDYWNoZVR5cGU6OlVuc2V0KTsKIH0K
IAotdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImIHZp
c2l0b3IpCisvL3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+CisvL3ZvaWQgU3RydWN0dXJlU3R1
YkluZm86OnZpc2l0QWdncmVnYXRlKFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIFN0cnVjdHVyZVN0
dWJJbmZvOjp2aXNpdEFnZ3JlZ2F0ZTEoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsK
ICAgICB7CiAgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9idWZmZXJlZFN0cnVjdHVy
ZXNMb2NrKTsKICAgICAgICAgZm9yIChhdXRvJiBidWZmZXJlZFN0cnVjdHVyZSA6IG1fYnVmZmVy
ZWRTdHJ1Y3R1cmVzKQotICAgICAgICAgICAgYnVmZmVyZWRTdHJ1Y3R1cmUuYnlWYWxJZCgpLnZp
c2l0QWdncmVnYXRlKHZpc2l0b3IpOworICAgICAgICAgICAgYnVmZmVyZWRTdHJ1Y3R1cmUuYnlW
YWxJZCgpLnZpc2l0QWdncmVnYXRlMSh2aXNpdG9yKTsKICAgICB9CiAgICAgc3dpdGNoIChtX2Nh
Y2hlVHlwZSkgewogICAgIGNhc2UgQ2FjaGVUeXBlOjpVbnNldDoKQEAgLTMwNSwxMCArMzA3LDEw
IEBAIHZvaWQgU3RydWN0dXJlU3R1YkluZm86OnZpc2l0QWdncmVnYXRlKFMKICAgICBjYXNlIENh
Y2hlVHlwZTo6UHV0QnlJZFJlcGxhY2U6CiAgICAgY2FzZSBDYWNoZVR5cGU6OkluQnlJZFNlbGY6
CiAgICAgY2FzZSBDYWNoZVR5cGU6OkdldEJ5SWRTZWxmOgotICAgICAgICBtX2lkZW50aWZpZXIu
dmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7CisgICAgICAgIG1faWRlbnRpZmllci52aXNpdEFnZ3Jl
Z2F0ZTEodmlzaXRvcik7CiAgICAgICAgIHJldHVybjsKICAgICBjYXNlIENhY2hlVHlwZTo6U3R1
YjoKLSAgICAgICAgdS5zdHViLT52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKKyAgICAgICAgdS5z
dHViLT52aXNpdEFnZ3JlZ2F0ZTEodmlzaXRvcik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAg
ICAgCkBAIC0zMTYsNiArMzE4LDkgQEAgdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6dmlzaXRBZ2dy
ZWdhdGUoUwogICAgIHJldHVybjsKIH0KIAorLy90ZW1wbGF0ZSB2b2lkIFN0cnVjdHVyZVN0dWJJ
bmZvOjp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYpOworLy90ZW1wbGF0ZSB2b2lkIFN0cnVj
dHVyZVN0dWJJbmZvOjp2aXNpdEFnZ3JlZ2F0ZShEZWJ1Z1Nsb3RWaXNpdG9yJik7CisKIHZvaWQg
U3RydWN0dXJlU3R1YkluZm86OnZpc2l0V2Vha1JlZmVyZW5jZXMoY29uc3QgQ29uY3VycmVudEpT
TG9ja2VyQmFzZSYgbG9ja2VyLCBDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKICAgICBWTSYgdm0g
PSBjb2RlQmxvY2stPnZtKCk7CkBAIC0zNDYsMjQgKzM1MSwzMSBAQCB2b2lkIFN0cnVjdHVyZVN0
dWJJbmZvOjp2aXNpdFdlYWtSZWZlcmVuCiAgICAgcmVzZXRCeUdDID0gdHJ1ZTsKIH0KIAotYm9v
bCBTdHJ1Y3R1cmVTdHViSW5mbzo6cHJvcGFnYXRlVHJhbnNpdGlvbnMoU2xvdFZpc2l0b3ImIHZp
c2l0b3IpCi17Ci0gICAgc3dpdGNoIChtX2NhY2hlVHlwZSkgewotICAgIGNhc2UgQ2FjaGVUeXBl
OjpVbnNldDoKLSAgICBjYXNlIENhY2hlVHlwZTo6QXJyYXlMZW5ndGg6Ci0gICAgY2FzZSBDYWNo
ZVR5cGU6OlN0cmluZ0xlbmd0aDoKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgY2FzZSBDYWNo
ZVR5cGU6OkdldEJ5SWRTZWxmOgotICAgIGNhc2UgQ2FjaGVUeXBlOjpQdXRCeUlkUmVwbGFjZToK
LSAgICBjYXNlIENhY2hlVHlwZTo6SW5CeUlkU2VsZjoKLSAgICAgICAgcmV0dXJuIHUuYnlJZFNl
bGYuYmFzZU9iamVjdFN0cnVjdHVyZS0+bWFya0lmQ2hlYXAodmlzaXRvcik7Ci0gICAgY2FzZSBD
YWNoZVR5cGU6OlN0dWI6Ci0gICAgICAgIHJldHVybiB1LnN0dWItPnByb3BhZ2F0ZVRyYW5zaXRp
b25zKHZpc2l0b3IpOwotICAgIH0KLSAgICAKLSAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOwotICAgIHJldHVybiB0cnVlOwotfQorLy90ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgor
Ly9ib29sIFN0cnVjdHVyZVN0dWJJbmZvOjpwcm9wYWdhdGVUcmFuc2l0aW9uczEoVmlzaXRvciYg
dmlzaXRvcikKKy8veworLy8gICAgc3dpdGNoIChtX2NhY2hlVHlwZSkgeworLy8gICAgY2FzZSBD
YWNoZVR5cGU6OlVuc2V0OgorLy8gICAgY2FzZSBDYWNoZVR5cGU6OkFycmF5TGVuZ3RoOgorLy8g
ICAgY2FzZSBDYWNoZVR5cGU6OlN0cmluZ0xlbmd0aDoKKy8vICAgICAgICByZXR1cm4gdHJ1ZTsK
Ky8vICAgIGNhc2UgQ2FjaGVUeXBlOjpHZXRCeUlkU2VsZjoKKy8vICAgIGNhc2UgQ2FjaGVUeXBl
OjpQdXRCeUlkUmVwbGFjZToKKy8vICAgIGNhc2UgQ2FjaGVUeXBlOjpJbkJ5SWRTZWxmOgorLy8g
ICAgICAgIHJldHVybiB1LmJ5SWRTZWxmLmJhc2VPYmplY3RTdHJ1Y3R1cmUtPm1hcmtJZkNoZWFw
MSh2aXNpdG9yKTsKKy8vICAgICAgICByZXR1cm4gZmFsc2U7CisvLyAgICBjYXNlIENhY2hlVHlw
ZTo6U3R1YjoKKy8vICAgICAgICByZXR1cm4gdS5zdHViLT5wcm9wYWdhdGVUcmFuc2l0aW9uczEw
KHZpc2l0b3IpOworLy8gICAgICAgIHJldHVybiBmYWxzZTsKKy8vICAgIH0KKy8vCisvLy8vICAg
IFVOVVNFRF9QQVJBTSh2aXNpdG9yKTsgLy8gbWxhbSBURVNUCisvLyAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOworLy8gICAgcmV0dXJuIHRydWU7CisvL30KKy8vCisvL3RlbXBsYXRl
PD4gYm9vbCBTdHJ1Y3R1cmVTdHViSW5mbzo6cHJvcGFnYXRlVHJhbnNpdGlvbnMxKFNsb3RWaXNp
dG9yJik7CisvL3RlbXBsYXRlPD4gYm9vbCBTdHJ1Y3R1cmVTdHViSW5mbzo6cHJvcGFnYXRlVHJh
bnNpdGlvbnMxKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKIAogU3R1YkluZm9TdW1tYXJ5IFN0cnVj
dHVyZVN0dWJJbmZvOjpzdW1tYXJ5KFZNJiB2bSkgY29uc3QKIHsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCShyZXZpc2lv
biAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1
YkluZm8uaAkod29ya2luZyBjb3B5KQpAQCAtOTEsMTQgKzkxLDE2IEBAIHB1YmxpYzoKICAgICB2
b2lkIGRlcmVmKCk7CiAgICAgdm9pZCBhYm91dFRvRGllKCk7CiAKLSAgICB2b2lkIHZpc2l0QWdn
cmVnYXRlKFNsb3RWaXNpdG9yJik7CisvLyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2
b2lkIHZpc2l0QWdncmVnYXRlKFZpc2l0b3ImKTsKKyAgICB2b2lkIHZpc2l0QWdncmVnYXRlMShB
YnN0cmFjdFNsb3RWaXNpdG9yJik7CiAKICAgICAvLyBDaGVjayBpZiB0aGUgc3R1YiBoYXMgd2Vh
ayByZWZlcmVuY2VzIHRoYXQgYXJlIGRlYWQuIElmIGl0IGRvZXMsIHRoZW4gaXQgcmVzZXRzIGl0
c2VsZiwKICAgICAvLyBlaXRoZXIgZW50aXJlbHkgb3IganVzdCBlbm91Z2ggdG8gZW5zdXJlIHRo
YXQgdGhvc2UgZGVhZCBwb2ludGVycyBkb24ndCBnZXQgdXNlZCBhbnltb3JlLgogICAgIHZvaWQg
dmlzaXRXZWFrUmVmZXJlbmNlcyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXJCYXNlJiwgQ29kZUJs
b2NrKik7CiAgICAgCiAgICAgLy8gVGhpcyByZXR1cm5zIHRydWUgaWYgaXQgaGFzIG1hcmtlZCBl
dmVyeXRoaW5nIHRoYXQgaXQgd2lsbCBldmVyIG1hcmsuCi0gICAgYm9vbCBwcm9wYWdhdGVUcmFu
c2l0aW9ucyhTbG90VmlzaXRvciYpOworLy8gICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4g
Ym9vbCBwcm9wYWdhdGVUcmFuc2l0aW9uczEoVmlzaXRvciYpOworICAgIGJvb2wgcHJvcGFnYXRl
VHJhbnNpdGlvbnMxKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKICAgICAgICAgCiAgICAgU3R1Yklu
Zm9TdW1tYXJ5IHN1bW1hcnkoVk0mKSBjb25zdDsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcAkocmV2aXNp
b24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29k
ZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTItMjAxOSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTItMjAyMCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTcxLDcgKzcxLDggQEAgVW5saW5rZWRDb2Rl
QmxvY2s6OlVubGlua2VkQ29kZUJsb2NrKFZNJgogICAgIH0KIH0KIAotdm9pZCBVbmxpbmtlZENv
ZGVCbG9jazo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9y
KQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgVW5saW5rZWRDb2RlQmxvY2s6OnZp
c2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBV
bmxpbmtlZENvZGVCbG9jayogdGhpc09iamVjdCA9IGpzQ2FzdDxVbmxpbmtlZENvZGVCbG9jayo+
KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygp
KTsKQEAgLTkwLDYgKzkxLDggQEAgdm9pZCBVbmxpbmtlZENvZGVCbG9jazo6dmlzaXRDaGlsZHJl
bihKUwogICAgIHZpc2l0b3IucmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKGV4dHJhTWVtb3J5KTsK
IH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKFVubGlua2VkQ29kZUJsb2NrKTsKKwogc2l6ZV90
IFVubGlua2VkQ29kZUJsb2NrOjplc3RpbWF0ZWRTaXplKEpTQ2VsbCogY2VsbCwgVk0mIHZtKQog
ewogICAgIFVubGlua2VkQ29kZUJsb2NrKiB0aGlzT2JqZWN0ID0ganNDYXN0PFVubGlua2VkQ29k
ZUJsb2NrKj4oY2VsbCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5s
aW5rZWRDb2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTkgQXBwbGUgSW5j
LiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjAgQXBwbGUg
SW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC00MjMsNyArNDIzLDcgQEAgcHJpdmF0ZToKICAgICBSZWZDb3VudGVkQXJyYXk8RXhwcmVz
c2lvblJhbmdlSW5mbz4gbV9leHByZXNzaW9uSW5mbzsKIAogcHJvdGVjdGVkOgotICAgIHN0YXRp
YyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJF
X1ZJU0lUX0NISUxEUkVOOwogICAgIHN0YXRpYyBzaXplX3QgZXN0aW1hdGVkU2l6ZShKU0NlbGwq
LCBWTSYpOwogCiBwdWJsaWM6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5jcHAJKHJldmlz
aW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZEZ1
bmN0aW9uRXhlY3V0YWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTkgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjAgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xNDEsNyArMTQxLDggQEAg
dm9pZCBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6ZGVzdHJveQogICAgIHN0YXRpY19jYXN0
PFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKj4oY2VsbCktPn5VbmxpbmtlZEZ1bmN0aW9uRXhl
Y3V0YWJsZSgpOwogfQogCi12b2lkIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlOjp2aXNpdENo
aWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBl
bmFtZSBWaXNpdG9yPgordm9pZCBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6dmlzaXRDaGls
ZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFVubGlua2Vk
RnVuY3Rpb25FeGVjdXRhYmxlKiB0aGlzT2JqZWN0ID0ganNDYXN0PFVubGlua2VkRnVuY3Rpb25F
eGVjdXRhYmxlKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2Jq
ZWN0LCBpbmZvKCkpOwpAQCAtMTY0LDYgKzE2NSw4IEBAIHZvaWQgVW5saW5rZWRGdW5jdGlvbkV4
ZWN1dGFibGU6OnZpc2l0Q2gKICAgICB9CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihVbmxp
bmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSk7CisKIFNvdXJjZUNvZGUgVW5saW5rZWRGdW5jdGlvbkV4
ZWN1dGFibGU6OmxpbmtlZFNvdXJjZUNvZGUoY29uc3QgU291cmNlQ29kZSYgcGFzc2VkUGFyZW50
U291cmNlKSBjb25zdAogewogICAgIGNvbnN0IFNvdXJjZUNvZGUmIHBhcmVudFNvdXJjZSA9ICFt
X2lzQnVpbHRpbkRlZmF1bHRDbGFzc0NvbnN0cnVjdG9yID8gcGFzc2VkUGFyZW50U291cmNlIDog
QnVpbHRpbkV4ZWN1dGFibGVzOjpkZWZhdWx0Q29uc3RydWN0b3JTb3VyY2VDb2RlKGNvbnN0cnVj
dG9yS2luZCgpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Vbmxpbmtl
ZEZ1bmN0aW9uRXhlY3V0YWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5oCShyZXZpc2lvbiAyNzE0NDMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRGdW5jdGlvbkV4ZWN1
dGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTItMjAxOSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTItMjAyMCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTIzMiw3ICsyMzIsNyBAQCBwcml2YXRlOgogICAg
IFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKFZNJiwgU3RydWN0dXJlKiwgY29uc3QgU291cmNl
Q29kZSYsIEZ1bmN0aW9uTWV0YWRhdGFOb2RlKiwgVW5saW5rZWRGdW5jdGlvbktpbmQsIENvbnN0
cnVjdEFiaWxpdHksIEpTUGFyc2VyU2NyaXB0TW9kZSwgUmVmUHRyPFREWkVudmlyb25tZW50TGlu
az4sICBKU0M6OkRlcml2ZWRDb250ZXh0VHlwZSwgSlNDOjpOZWVkc0NsYXNzRmllbGRJbml0aWFs
aXplciwgYm9vbCBpc0J1aWx0aW5EZWZhdWx0Q2xhc3NDb25zdHJ1Y3Rvcik7CiAgICAgVW5saW5r
ZWRGdW5jdGlvbkV4ZWN1dGFibGUoRGVjb2RlciYsIGNvbnN0IENhY2hlZEZ1bmN0aW9uRXhlY3V0
YWJsZSYpOwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90Vmlz
aXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICB2b2lkIGRlY29kZUNh
Y2hlZENvZGVCbG9ja3MoVk0mKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVn
Z2VyL0RlYnVnZ2VyU2NvcGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZWJ1Z2dlci9EZWJ1Z2dlclNjb3BlLmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyU2NvcGUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOC0yMDE5IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDIwIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtNTUsNyArNTUsOCBAQCB2b2lkIERlYnVnZ2VyU2NvcGU6OmZpbmlzaENyZWF0aW9uKFZN
JiB2CiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwogfQogCi12b2lkIERlYnVnZ2VyU2Nv
cGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3Rl
bXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIERlYnVnZ2VyU2NvcGU6OnZpc2l0Q2hpbGRy
ZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBEZWJ1Z2dlclNj
b3BlKiB0aGlzT2JqZWN0ID0ganNDYXN0PERlYnVnZ2VyU2NvcGUqPihjZWxsKTsKICAgICBBU1NF
UlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC02NSw2ICs2Niw4
IEBAIHZvaWQgRGVidWdnZXJTY29wZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwKICAgICB2aXNpdG9y
LmFwcGVuZCh0aGlzT2JqZWN0LT5tX25leHQpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4o
RGVidWdnZXJTY29wZSk7CisKIFN0cmluZyBEZWJ1Z2dlclNjb3BlOjpjbGFzc05hbWUoY29uc3Qg
SlNPYmplY3QqIG9iamVjdCwgVk0mIHZtKQogewogICAgIGNvbnN0IERlYnVnZ2VyU2NvcGUqIHNj
b3BlID0ganNDYXN0PGNvbnN0IERlYnVnZ2VyU2NvcGUqPihvYmplY3QpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyU2NvcGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXJTY29wZS5oCShyZXZpc2lvbiAy
NzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXJTY29wZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC00Niw3ICs0Niw3IEBAIHB1YmxpYzoKIAogICAgIEpTX0VYUE9S
VF9QUklWQVRFIHN0YXRpYyBEZWJ1Z2dlclNjb3BlKiBjcmVhdGUoVk0mIHZtLCBKU1Njb3BlKiBz
Y29wZSk7CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNp
dG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKICAgICBzdGF0aWMgU3RyaW5nIGNs
YXNzTmFtZShjb25zdCBKU09iamVjdCosIFZNJik7CiAgICAgc3RhdGljIFN0cmluZyB0b1N0cmlu
Z05hbWUoY29uc3QgSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCopOwogICAgIHN0YXRpYyBib29s
IGdldE93blByb3BlcnR5U2xvdChKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlO
YW1lLCBQcm9wZXJ0eVNsb3QmKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
RGVzaXJlZFRyYW5zaXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Rlc2lyZWRUcmFuc2l0aW9ucy5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFRyYW5zaXRpb25zLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTIsNyArNTIsNyBAQCB2b2lkIERlc2lyZWRUcmFuc2l0aW9uOjpyZWFsbHlB
ZGQoVk0mIHZtCiAgICAgICAgICAgICBtX29sZFN0cnVjdHVyZSwgbV9uZXdTdHJ1Y3R1cmUpKTsK
IH0KIAotdm9pZCBEZXNpcmVkVHJhbnNpdGlvbjo6dmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYg
dmlzaXRvcikKK3ZvaWQgRGVzaXJlZFRyYW5zaXRpb246OnZpc2l0Q2hpbGRyZW4yKEFic3RyYWN0
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZCht
X2NvZGVPcmlnaW5Pd25lcik7CiAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZChtX29sZFN0
cnVjdHVyZSk7CkBAIC03OCwxMCArNzgsMTAgQEAgdm9pZCBEZXNpcmVkVHJhbnNpdGlvbnM6OnJl
YWxseUFkZChWTSYgdgogICAgICAgICBtX3RyYW5zaXRpb25zW2ldLnJlYWxseUFkZCh2bSwgY29t
bW9uKTsKIH0KIAotdm9pZCBEZXNpcmVkVHJhbnNpdGlvbnM6OnZpc2l0Q2hpbGRyZW4oU2xvdFZp
c2l0b3ImIHZpc2l0b3IpCit2b2lkIERlc2lyZWRUcmFuc2l0aW9uczo6dmlzaXRDaGlsZHJlbjIo
QWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbV90cmFuc2l0aW9ucy5zaXplKCk7IGkrKykKLSAgICAgICAgbV90cmFuc2l0aW9uc1tp
XS52aXNpdENoaWxkcmVuKHZpc2l0b3IpOworICAgICAgICBtX3RyYW5zaXRpb25zW2ldLnZpc2l0
Q2hpbGRyZW4yKHZpc2l0b3IpOwogfQogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRUcmFuc2l0aW9ucy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFRyYW5zaXRpb25z
LmgJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVz
aXJlZFRyYW5zaXRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDggKzQ2LDcgQEAgcHVibGlj
OgogICAgIERlc2lyZWRUcmFuc2l0aW9uKENvZGVCbG9jayosIENvZGVCbG9jayogY29kZU9yaWdp
bk93bmVyLCBTdHJ1Y3R1cmUqLCBTdHJ1Y3R1cmUqKTsKIAogICAgIHZvaWQgcmVhbGx5QWRkKFZN
JiwgQ29tbW9uRGF0YSopOwotICAgIAotICAgIHZvaWQgdmlzaXRDaGlsZHJlbihTbG90VmlzaXRv
ciYpOworICAgIHZvaWQgdmlzaXRDaGlsZHJlbjIoQWJzdHJhY3RTbG90VmlzaXRvciYpOwogCiBw
cml2YXRlOgogICAgIENvZGVCbG9jayogbV9jb2RlQmxvY2s7CkBAIC02Myw3ICs2Miw3IEBAIHB1
YmxpYzoKIAogICAgIHZvaWQgYWRkTGF6aWx5KENvZGVCbG9jayosIENvZGVCbG9jayogY29kZU9y
aWdpbk93bmVyLCBTdHJ1Y3R1cmUqLCBTdHJ1Y3R1cmUqKTsKICAgICB2b2lkIHJlYWxseUFkZChW
TSYsIENvbW1vbkRhdGEqKTsKLSAgICB2b2lkIHZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsK
KyAgICB2b2lkIHZpc2l0Q2hpbGRyZW4yKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKIAogcHJpdmF0
ZToKICAgICBWZWN0b3I8RGVzaXJlZFRyYW5zaXRpb24+IG1fdHJhbnNpdGlvbnM7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXZWFrUmVmZXJlbmNlcy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2Vha1JlZmVy
ZW5jZXMuY3BwCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0Rlc2lyZWRXZWFrUmVmZXJlbmNlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg3LDcgKzg3
LDcgQEAgdm9pZCBEZXNpcmVkV2Vha1JlZmVyZW5jZXM6OnJlYWxseUFkZChWTQogICAgIH0KIH0K
IAotdm9pZCBEZXNpcmVkV2Vha1JlZmVyZW5jZXM6OnZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3Im
IHZpc2l0b3IpCit2b2lkIERlc2lyZWRXZWFrUmVmZXJlbmNlczo6dmlzaXRDaGlsZHJlbjIoQWJz
dHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBmb3IgKEpTQ2VsbCogdGFyZ2V0IDog
bV9yZWZlcmVuY2VzKQogICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKHRhcmdldCk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXZWFrUmVmZXJlbmNl
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFdl
YWtSZWZlcmVuY2VzLmgJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHRGVzaXJlZFdlYWtSZWZlcmVuY2VzLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDEw
ICszMSwxMCBAQAogCiBuYW1lc3BhY2UgSlNDIHsgCiAKK2NsYXNzIEFic3RyYWN0U2xvdFZpc2l0
b3I7CiBjbGFzcyBDb2RlQmxvY2s7CiBjbGFzcyBKU0NlbGw7CiBjbGFzcyBKU1ZhbHVlOwotY2xh
c3MgU2xvdFZpc2l0b3I7CiBjbGFzcyBWTTsKIAogbmFtZXNwYWNlIERGRyB7CkBAIC01Miw4ICs1
Miw4IEBAIHB1YmxpYzoKICAgICBib29sIGNvbnRhaW5zKEpTQ2VsbCopOwogICAgIAogICAgIHZv
aWQgcmVhbGx5QWRkKFZNJiwgQ29tbW9uRGF0YSopOwotICAgIAotICAgIHZvaWQgdmlzaXRDaGls
ZHJlbihTbG90VmlzaXRvciYpOworCisgICAgdm9pZCB2aXNpdENoaWxkcmVuMihBYnN0cmFjdFNs
b3RWaXNpdG9yJik7CiAKIHByaXZhdGU6CiAgICAgQ29kZUJsb2NrKiBtX2NvZGVCbG9jazsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCShyZXZpc2lvbiAyNzE0NDMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtOTc3LDcgKzk3Nyw3IEBAIEJsb2NrTGlzdCBHcmFwaDo6YmxvY2tzSW5Qb3N0T3JkZXIo
Ym9vbCAKICAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChpc1NhZmVUb1ZhbGlkYXRlICYmIHZh
bGlkYXRpb25FbmFibGVkKCkpIHsgLy8gVGhlcmUgYXJlIHVzZXJzIG9mIHRoaXMgd2hlcmUgd2Ug
aGF2ZW4ndCB5ZXQgYnVpbHQgb2YgdGhlIENGRyBlbm91Z2ggdG8gYmUgYWJsZSB0byBydW4gZG9t
aW5hdG9ycy4KKyAgICBpZiAoaXNTYWZlVG9WYWxpZGF0ZSAmJiB2YWxpZGF0aW9uRW5hYmxlZCgp
KSB7IC8vIFRoZXJlIGFyZSB1c2VycyBvZiB0aGlzIHdoZXJlIHdlIGhhdmVuJ3QgeWV0IGJ1aWx0
IHRoZSBDRkcgZW5vdWdoIHRvIGJlIGFibGUgdG8gcnVuIGRvbWluYXRvcnMuCiAgICAgICAgIGF1
dG8gdmFsaWRhdGVSZXN1bHRzID0gWyZdIChhdXRvJiBkb21pbmF0b3JzKSB7CiAgICAgICAgICAg
ICAvLyBXaGVuIGl0ZXJhdGluZyBvdmVyIHJldmVyc2UgcG9zdCBvcmRlciwgd2Ugc2hvdWxkIHNl
ZSBkb21pbmF0b3JzCiAgICAgICAgICAgICAvLyBiZWZvcmUgdGhpbmdzIHRoZXkgZG9taW5hdGUu
CkBAIC0xNDQ4LDcgKzE0NDgsNyBAQCB2b2lkIEdyYXBoOjpyZWdpc3RlckZyb3plblZhbHVlcygp
CiAgICAgbV9jb2RlQmxvY2stPmNvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbigpLnNo
cmlua1RvRml0KCk7CiB9CiAKLXZvaWQgR3JhcGg6OnZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3Im
IHZpc2l0b3IpCit2b2lkIEdyYXBoOjp2aXNpdENoaWxkcmVuMShBYnN0cmFjdFNsb3RWaXNpdG9y
JiB2aXNpdG9yKQogewogICAgIGZvciAoRnJvemVuVmFsdWUqIHZhbHVlIDogbV9mcm96ZW5WYWx1
ZXMpIHsKICAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZCh2YWx1ZS0+dmFsdWUoKSk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCShyZXZpc2lvbiAyNzE0NDMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEwMDAsOSArMTAwMCw5IEBAIHB1YmxpYzoKICAgICBib29sIGNhbkRvRmFzdFNwcmVhZChO
b2RlKiwgY29uc3QgQWJzdHJhY3RWYWx1ZSYpOwogICAgIAogICAgIHZvaWQgcmVnaXN0ZXJGcm96
ZW5WYWx1ZXMoKTsKLSAgICAKLSAgICB2b2lkIHZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImKSBm
aW5hbDsKLSAgICAKKworICAgIHZvaWQgdmlzaXRDaGlsZHJlbjEoQWJzdHJhY3RTbG90VmlzaXRv
ciYpIGZpbmFsOworCiAgICAgdm9pZCBsb2dBc3NlcnRpb25GYWlsdXJlKAogICAgICAgICBzdGQ6
Om51bGxwdHJfdCwgY29uc3QgY2hhciogZmlsZSwgaW50IGxpbmUsIGNvbnN0IGNoYXIqIGZ1bmN0
aW9uLAogICAgICAgICBjb25zdCBjaGFyKiBhc3NlcnRpb24pOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1BsYW4uY3BwCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NzIsNyArNjcyLDcg
QEAgQ29tcGlsYXRpb25LZXkgUGxhbjo6a2V5KCkKICAgICByZXR1cm4gQ29tcGlsYXRpb25LZXko
bV9jb2RlQmxvY2stPmFsdGVybmF0aXZlKCksIG1fbW9kZSk7CiB9CiAKLXZvaWQgUGxhbjo6Y2hl
Y2tMaXZlbmVzc0FuZFZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIFBs
YW46OmNoZWNrTGl2ZW5lc3NBbmRWaXNpdENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZp
c2l0b3IpCiB7CiAgICAgaWYgKCFpc0tub3duVG9CZUxpdmVEdXJpbmdHQygpKQogICAgICAgICBy
ZXR1cm47CkBAIC02ODQsOCArNjg0LDggQEAgdm9pZCBQbGFuOjpjaGVja0xpdmVuZXNzQW5kVmlz
aXRDaGlsZHJlbgogICAgICAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZCh2YWx1ZS52
YWx1ZSgpKTsKICAgICB9CiAKLSAgICBtX3JlY29yZGVkU3RhdHVzZXMudmlzaXRBZ2dyZWdhdGUo
dmlzaXRvcik7Ci0gICAgbV9yZWNvcmRlZFN0YXR1c2VzLm1hcmtJZkNoZWFwKHZpc2l0b3IpOwor
ICAgIG1fcmVjb3JkZWRTdGF0dXNlcy52aXNpdEFnZ3JlZ2F0ZTEodmlzaXRvcik7CisgICAgbV9y
ZWNvcmRlZFN0YXR1c2VzLm1hcmtJZkNoZWFwMSh2aXNpdG9yKTsKIAogICAgIHZpc2l0b3IuYXBw
ZW5kVW5iYXJyaWVyZWQobV9jb2RlQmxvY2spOwogICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVy
ZWQobV9jb2RlQmxvY2stPmFsdGVybmF0aXZlKCkpOwpAQCAtNjk4LDggKzY5OCw4IEBAIHZvaWQg
UGxhbjo6Y2hlY2tMaXZlbmVzc0FuZFZpc2l0Q2hpbGRyZW4KICAgICAgICAgfQogICAgIH0KIAot
ICAgIG1fd2Vha1JlZmVyZW5jZXMudmlzaXRDaGlsZHJlbih2aXNpdG9yKTsKLSAgICBtX3RyYW5z
aXRpb25zLnZpc2l0Q2hpbGRyZW4odmlzaXRvcik7CisgICAgbV93ZWFrUmVmZXJlbmNlcy52aXNp
dENoaWxkcmVuMih2aXNpdG9yKTsKKyAgICBtX3RyYW5zaXRpb25zLnZpc2l0Q2hpbGRyZW4yKHZp
c2l0b3IpOwogfQogCiB2b2lkIFBsYW46OmZpbmFsaXplSW5HQygpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1BsYW4uaAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdQbGFuLmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDggKzQzLDggQEAKIAog
bmFtZXNwYWNlIEpTQyB7CiAKK2NsYXNzIEFic3RyYWN0U2xvdFZpc2l0b3I7CiBjbGFzcyBDb2Rl
QmxvY2s7Ci1jbGFzcyBTbG90VmlzaXRvcjsKIAogbmFtZXNwYWNlIERGRyB7CiAKQEAgLTcyLDcg
KzcyLDcgQEAgcHVibGljOgogICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CiAgICAg
dm9pZCBpdGVyYXRlQ29kZUJsb2Nrc0ZvckdDKGNvbnN0IEZ1bmMmKTsKLSAgICB2b2lkIGNoZWNr
TGl2ZW5lc3NBbmRWaXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CisgICAgdm9pZCBjaGVja0xp
dmVuZXNzQW5kVmlzaXRDaGlsZHJlbihBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAgICAgYm9vbCBp
c0tub3duVG9CZUxpdmVEdXJpbmdHQygpOwogICAgIHZvaWQgZmluYWxpemVJbkdDKCk7CiAgICAg
dm9pZCBjYW5jZWwoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZXBv
aW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVw
b2ludC5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU2FmZXBvaW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODMsNyArODMsNyBAQCB2b2lkIFNh
ZmVwb2ludDo6YmVnaW4oKQogICAgIH0KIH0KIAotdm9pZCBTYWZlcG9pbnQ6OmNoZWNrTGl2ZW5l
c3NBbmRWaXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBTYWZlcG9pbnQ6
OmNoZWNrTGl2ZW5lc3NBbmRWaXNpdENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0
b3IpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQobV9kaWRDYWxsQmVnaW4pOwogCkBAIC05NCw3ICs5
NCw3IEBAIHZvaWQgU2FmZXBvaW50OjpjaGVja0xpdmVuZXNzQW5kVmlzaXRDaGkKICAgICAgICAg
cmV0dXJuOwogICAgIAogICAgIGZvciAodW5zaWduZWQgaSA9IG1fc2Nhbm5hYmxlcy5zaXplKCk7
IGktLTspCi0gICAgICAgIG1fc2Nhbm5hYmxlc1tpXS0+dmlzaXRDaGlsZHJlbih2aXNpdG9yKTsK
KyAgICAgICAgbV9zY2FubmFibGVzW2ldLT52aXNpdENoaWxkcmVuMSh2aXNpdG9yKTsKIH0KIAog
Ym9vbCBTYWZlcG9pbnQ6OmlzS25vd25Ub0JlTGl2ZUR1cmluZ0dDKCkKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZXBvaW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlcG9pbnQuaAkocmV2aXNpb24gMjcxNDQzKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlcG9pbnQuaAkod29ya2luZyBjb3B5KQpAQCAt
MzEsNyArMzEsNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotY2xhc3MgU2xvdFZpc2l0b3I7Citj
bGFzcyBBYnN0cmFjdFNsb3RWaXNpdG9yOwogY2xhc3MgVk07CiAKIG5hbWVzcGFjZSBERkcgewpA
QCAtNjYsOCArNjYsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBhZGQoU2Nhbm5hYmxlKik7CiAgICAg
CiAgICAgdm9pZCBiZWdpbigpOwotICAgIAotICAgIHZvaWQgY2hlY2tMaXZlbmVzc0FuZFZpc2l0
Q2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKKworICAgIHZvaWQgY2hlY2tMaXZlbmVzc0FuZFZpc2l0
Q2hpbGRyZW4oQWJzdHJhY3RTbG90VmlzaXRvciYpOwogICAgIGJvb2wgaXNLbm93blRvQmVMaXZl
RHVyaW5nR0MoKTsKICAgICB2b2lkIGNhbmNlbCgpOwogICAgIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTY2FubmFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NjYW5uYWJsZS5oCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NjYW5uYWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3
ICsyOSw3IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1jbGFzcyBTbG90VmlzaXRvcjsKK2NsYXNz
IEFic3RyYWN0U2xvdFZpc2l0b3I7CiAKIG5hbWVzcGFjZSBERkcgewogCkBAIC0zOCw3ICszOCw3
IEBAIHB1YmxpYzoKICAgICBTY2FubmFibGUoKSB7IH0KICAgICB2aXJ0dWFsIH5TY2FubmFibGUo
KSB7IH0KICAgICAKLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYp
ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXRDaGlsZHJlbjEoQWJzdHJhY3RTbG90VmlzaXRv
ciYpID0gMDsKIH07CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3QuY3BwCShyZXZpc2lvbiAyNzE0NDMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzcyLDcgKzM3Miw3IEBAIHZvaWQgV29ya2xpc3Q6OnJlc3VtZUFsbFRocmVhZHMoKQogICAg
IG1fc3VzcGVuc2lvbkxvY2sudW5sb2NrKCk7CiB9CiAKLXZvaWQgV29ya2xpc3Q6OnZpc2l0V2Vh
a1JlZmVyZW5jZXMoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIFdvcmtsaXN0Ojp2aXNpdFdl
YWtSZWZlcmVuY2VzKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgVk0qIHZt
ID0gJnZpc2l0b3IuaGVhcCgpLT52bSgpOwogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHV29ya2xpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1dvcmtsaXN0LmgJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHV29ya2xpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsNyArMzUsNyBA
QAogCiBuYW1lc3BhY2UgSlNDIHsKIAotY2xhc3MgU2xvdFZpc2l0b3I7CitjbGFzcyBBYnN0cmFj
dFNsb3RWaXNpdG9yOwogCiBuYW1lc3BhY2UgREZHIHsKIApAQCAtNzMsNyArNzMsNyBAQCBwdWJs
aWM6CiAgICAgYm9vbCBpc0FjdGl2ZUZvclZNKFZNJikgY29uc3Q7CiAgICAgCiAgICAgLy8gT25s
eSBjYWxsZWQgb24gdGhlIG1haW4gdGhyZWFkIGFmdGVyIHN1c3BlbmRpbmcgYWxsIHRocmVhZHMu
Ci0gICAgdm9pZCB2aXNpdFdlYWtSZWZlcmVuY2VzKFNsb3RWaXNpdG9yJik7CisgICAgdm9pZCB2
aXNpdFdlYWtSZWZlcmVuY2VzKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKICAgICB2b2lkIHJlbW92
ZURlYWRQbGFucyhWTSYpOwogICAgIAogICAgIHZvaWQgcmVtb3ZlTm9uQ29tcGlsaW5nUGxhbnNG
b3JWTShWTSYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQWJzdHJhY3RTbG90
VmlzaXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQWJz
dHJhY3RTbG90VmlzaXRvci5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvQWJzdHJhY3RTbG90VmlzaXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw0MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBYnN0
cmFjdFNsb3RWaXNpdG9yLmgiCisKKyNpbmNsdWRlICJBYnN0cmFjdFNsb3RWaXNpdG9ySW5saW5l
cy5oIgorI2luY2x1ZGUgIk1hcmtpbmdDb25zdHJhaW50U29sdmVyLmgiCisKK25hbWVzcGFjZSBK
U0MgeworCit2b2lkIEFic3RyYWN0U2xvdFZpc2l0b3I6OmFkZFBhcmFsbGVsQ29uc3RyYWludFRh
c2soUmVmUHRyPFNoYXJlZFRhc2s8dm9pZChBYnN0cmFjdFNsb3RWaXNpdG9yJik+PiB0YXNrKQor
eworICAgIFJFTEVBU0VfQVNTRVJUKG1fY3VycmVudFNvbHZlcik7CisgICAgUkVMRUFTRV9BU1NF
UlQobV9jdXJyZW50Q29uc3RyYWludCk7CisgICAgUkVMRUFTRV9BU1NFUlQodGFzayk7CisgICAg
CisgICAgbV9jdXJyZW50U29sdmVyLT5hZGRQYXJhbGxlbFRhc2sodGFzaywgKm1fY3VycmVudENv
bnN0cmFpbnQpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0Fic3RyYWN0U2xvdFZpc2l0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9BYnN0cmFjdFNsb3RWaXNpdG9yLmgJKG5vbmV4aXN0ZW50KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQWJzdHJhY3RTbG90VmlzaXRvci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMjA5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJKU0NKU1ZhbHVlLmgi
CisjaW5jbHVkZSAiTWFya1N0YWNrLmgiCisjaW5jbHVkZSAiVmlzaXRSYWNlS2V5LmgiIC8vIG1s
YW0KKyNpbmNsdWRlIDx3dGYvU2hhcmVkVGFzay5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJp
bmcuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIENvbnNlcnZhdGl2ZVJvb3RzOworY2xh
c3MgRGVidWdTbG90VmlzaXRvcjsKK2NsYXNzIEhlYXA7CitjbGFzcyBIZWFwQW5hbHl6ZXI7Citj
bGFzcyBNYXJraW5nQ29uc3RyYWludDsKK2NsYXNzIE1hcmtpbmdDb25zdHJhaW50U29sdmVyOwor
Y2xhc3MgU2xvdFZpc2l0b3I7CitjbGFzcyBWTTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGNsYXNz
IFdlYWs7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBUcmFpdHM+IGNsYXNzIFdyaXRl
QmFycmllckJhc2U7CisKK3R5cGVkZWYgdWludDMyX3QgSGVhcFZlcnNpb247CisKK2NsYXNzIEFi
c3RyYWN0U2xvdFZpc2l0b3IgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEFic3RyYWN0U2xv
dFZpc2l0b3IpOworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorLy8gICAg
ZW51bSBjbGFzcyBUeXBlIHsKKy8vICAgICAgICBTbG90VmlzaXRvciwKKy8vICAgICAgICBEZWJ1
Z1Nsb3RWaXNpdG9yCisvLyAgICB9OworCisgICAgZW51bSBSb290TWFya1JlYXNvbiB7CisgICAg
ICAgIE5vbmUsCisgICAgICAgIENvbnNlcnZhdGl2ZVNjYW4sCisgICAgICAgIFN0cm9uZ1JlZmVy
ZW5jZXMsCisgICAgICAgIFByb3RlY3RlZFZhbHVlcywKKyAgICAgICAgTWFya0xpc3RTZXQsCisg
ICAgICAgIFZNRXhjZXB0aW9ucywKKyAgICAgICAgU3Ryb25nSGFuZGxlcywKKyAgICAgICAgRGVi
dWdnZXIsCisgICAgICAgIEpJVFN0dWJSb3V0aW5lcywKKyAgICAgICAgV2Vha1NldHMsCisgICAg
ICAgIE91dHB1dCwKKyAgICAgICAgREZHV29ya0xpc3RzLAorICAgICAgICBDb2RlQmxvY2tzLAor
ICAgICAgICBET01HQ091dHB1dCwKKyAgICB9OworCisgICAgY2xhc3MgRGVmYXVsdE1hcmtpbmdW
aW9sYXRpb25Bc3NlcnRpb25TY29wZSB7CisgICAgcHVibGljOgorICAgICAgICBEZWZhdWx0TWFy
a2luZ1Zpb2xhdGlvbkFzc2VydGlvblNjb3BlKEFic3RyYWN0U2xvdFZpc2l0b3ImKSB7IH0KKyAg
ICB9OworCisgICAgdmlydHVhbCB+QWJzdHJhY3RTbG90VmlzaXRvcigpID0gZGVmYXVsdDsKKwor
Ly8gICAgQUxXQVlTX0lOTElORSBib29sIGlzRGVidWdTbG90VmlzaXRvcigpIGNvbnN0IHsgcmV0
dXJuIG1fdmlzaXRvclR5cGUgPT0gVHlwZTo6RGVidWdTbG90VmlzaXRvcjsgfQorLy8gICAgQUxX
QVlTX0lOTElORSBib29sIGlzU2xvdFZpc2l0b3IoKSBjb25zdCB7IHJldHVybiBtX3Zpc2l0b3JU
eXBlID09IFR5cGU6OlNsb3RWaXNpdG9yOyB9CisKKy8vICAgIEFMV0FZU19JTkxJTkUgRGVidWdT
bG90VmlzaXRvciYgYXNEZWJ1Z1Nsb3RWaXNpdG9yKCkgeyByZXR1cm4gKnJlaW50ZXJwcmV0X2Nh
c3Q8RGVidWdTbG90VmlzaXRvcio+KHRoaXMpOyB9CisvLyAgICBBTFdBWVNfSU5MSU5FIGNvbnN0
IERlYnVnU2xvdFZpc2l0b3ImIGFzRGVidWdTbG90VmlzaXRvcigpIGNvbnN0IHsgcmV0dXJuICpy
ZWludGVycHJldF9jYXN0PGNvbnN0IERlYnVnU2xvdFZpc2l0b3IqPih0aGlzKTsgfQorCisvLyAg
ICBBTFdBWVNfSU5MSU5FIFNsb3RWaXNpdG9yJiBhc1Nsb3RWaXNpdG9yKCkgeyByZXR1cm4gKnJl
aW50ZXJwcmV0X2Nhc3Q8U2xvdFZpc2l0b3IqPih0aGlzKTsgfQorLy8gICAgQUxXQVlTX0lOTElO
RSBjb25zdCBTbG90VmlzaXRvciYgYXNTbG90VmlzaXRvcigpIGNvbnN0IHsgcmV0dXJuICpyZWlu
dGVycHJldF9jYXN0PGNvbnN0IFNsb3RWaXNpdG9yKj4odGhpcyk7IH0KKworICAgIE1hcmtTdGFj
a0FycmF5JiBjb2xsZWN0b3JNYXJrU3RhY2soKSB7IHJldHVybiBtX2NvbGxlY3RvclN0YWNrOyB9
CisgICAgTWFya1N0YWNrQXJyYXkmIG11dGF0b3JNYXJrU3RhY2soKSB7IHJldHVybiBtX211dGF0
b3JTdGFjazsgfQorICAgIGNvbnN0IE1hcmtTdGFja0FycmF5JiBjb2xsZWN0b3JNYXJrU3RhY2so
KSBjb25zdCB7IHJldHVybiBtX2NvbGxlY3RvclN0YWNrOyB9CisgICAgY29uc3QgTWFya1N0YWNr
QXJyYXkmIG11dGF0b3JNYXJrU3RhY2soKSBjb25zdCB7IHJldHVybiBtX211dGF0b3JTdGFjazsg
fQorCisgICAgVk0mIHZtKCk7CisgICAgY29uc3QgVk0mIHZtKCkgY29uc3Q7CisgICAgSGVhcCog
aGVhcCgpIGNvbnN0OworCisgICAgdmlydHVhbCB2b2lkIGFwcGVuZChjb25zdCBDb25zZXJ2YXRp
dmVSb290cyYpID0gMDsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFRyYWl0
cz4gdm9pZCBhcHBlbmQoY29uc3QgV3JpdGVCYXJyaWVyQmFzZTxULCBUcmFpdHM+Jik7CisgICAg
dGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVHJhaXRzPiB2b2lkIGFwcGVuZEhpZGRlbihj
b25zdCBXcml0ZUJhcnJpZXJCYXNlPFQsIFRyYWl0cz4mKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBJdGVyYXRvcj4gdm9pZCBhcHBlbmQoSXRlcmF0b3IgYmVnaW4gLCBJdGVyYXRvciBlbmQpOwor
ICAgIHZvaWQgYXBwZW5kVmFsdWVzKGNvbnN0IFdyaXRlQmFycmllckJhc2U8VW5rbm93biwgUmF3
VmFsdWVUcmFpdHM8VW5rbm93bj4+Kiwgc2l6ZV90IGNvdW50KTsKKyAgICB2b2lkIGFwcGVuZFZh
bHVlc0hpZGRlbihjb25zdCBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24sIFJhd1ZhbHVlVHJhaXRz
PFVua25vd24+PiosIHNpemVfdCBjb3VudCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgYXBwZW5kVW5i
YXJyaWVyZWQoSlNWYWx1ZSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBhcHBlbmRVbmJhcnJpZXJl
ZChKU0NlbGwqKSA9IDA7CisKKyAgICB2aXJ0dWFsIGJvb2wgYWRkT3BhcXVlUm9vdCh2b2lkKikg
PSAwOyAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIHJvb3Qgd2FzIG5ldy4KKworICAgIHZpcnR1YWwg
Ym9vbCBpc0ZpcnN0VmlzaXQoKSBjb25zdCA9IDA7IC8vIG1sYW0gRklYTUUKKworICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFQ+CisgICAgdm9pZCBhcHBlbmQoY29uc3QgV2VhazxUPiYgd2Vhayk7CisK
KyAgICB2aXJ0dWFsIHZvaWQgYXBwZW5kSGlkZGVuVW5iYXJyaWVyZWQoSlNWYWx1ZSkgPSAwOwor
ICAgIHZpcnR1YWwgdm9pZCBhcHBlbmRIaWRkZW5VbmJhcnJpZXJlZChKU0NlbGwqKSA9IDA7CisK
KyAgICB2aXJ0dWFsIGJvb2wgY29udGFpbnNPcGFxdWVSb290KHZvaWQqKSBjb25zdCA9IDA7CisK
KyAgICBzaXplX3QgYnl0ZXNWaXNpdGVkKCkgY29uc3QgeyByZXR1cm4gbV9ieXRlc1Zpc2l0ZWQ7
IH0KKyAgICBzaXplX3QgdmlzaXRDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fdmlzaXRDb3VudDsg
fQorCisgICAgdm9pZCBhZGRUb1Zpc2l0Q291bnQoc2l6ZV90IHZhbHVlKSB7IG1fdmlzaXRDb3Vu
dCArPSB2YWx1ZTsgfQorCisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBhZGRQYXJhbGxlbENv
bnN0cmFpbnRUYXNrKFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoQWJzdHJhY3RTbG90VmlzaXRvciYp
Pj4pOworCisgICAgdmlydHVhbCB2b2lkIG1hcmtBdXhpbGlhcnkoY29uc3Qgdm9pZCogYmFzZSkg
PSAwOworCisgICAgdmlydHVhbCB2b2lkIHJlcG9ydEV4dHJhTWVtb3J5VmlzaXRlZChzaXplX3Qp
ID0gMDsKKyNpZiBFTkFCTEUoUkVTT1VSQ0VfVVNBR0UpCisgICAgdmlydHVhbCB2b2lkIHJlcG9y
dEV4dGVybmFsTWVtb3J5VmlzaXRlZChzaXplX3QpID0gMDsKKyNlbmRpZgorCisgICAgdmlydHVh
bCB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdCA9IDA7CisKKyAgICBib29sIGlzQW5hbHl6
aW5nSGVhcCgpIGNvbnN0IHsgcmV0dXJuICEhbV9oZWFwQW5hbHl6ZXI7IH0KKyAgICBIZWFwQW5h
bHl6ZXIqIGhlYXBBbmFseXplcigpIGNvbnN0IHsgcmV0dXJuIG1faGVhcEFuYWx5emVyOyB9CisK
KyAgICBSb290TWFya1JlYXNvbiByb290TWFya1JlYXNvbigpIGNvbnN0IHsgcmV0dXJuIG1fcm9v
dE1hcmtSZWFzb247IH0KKyAgICB2b2lkIHNldFJvb3RNYXJrUmVhc29uKFJvb3RNYXJrUmVhc29u
IHJlYXNvbikgeyBtX3Jvb3RNYXJrUmVhc29uID0gcmVhc29uOyB9CisKKyAgICBIZWFwVmVyc2lv
biBtYXJraW5nVmVyc2lvbigpIGNvbnN0IHsgcmV0dXJuIG1fbWFya2luZ1ZlcnNpb247IH0KKwor
ICAgIHZpcnR1YWwgYm9vbCBtdXRhdG9ySXNTdG9wcGVkKCkgY29uc3QgPSAwOworCisgICAgdmly
dHVhbCB2b2lkIGRpZFJhY2UoY29uc3QgVmlzaXRSYWNlS2V5JikgPSAwOworICAgIHZvaWQgZGlk
UmFjZShKU0NlbGwqIGNlbGwsIGNvbnN0IGNoYXIqIHJlYXNvbikgeyBkaWRSYWNlKFZpc2l0UmFj
ZUtleShjZWxsLCByZWFzb24pKTsgfQorCisgICAgdmlydHVhbCB2b2lkIHZpc2l0QXNDb25zdHJh
aW50KGNvbnN0IEpTQ2VsbCopID0gMDsKKworICAgIC8vIElubGluZSBmdW5jdGlvbnMgZm9yIGRp
c2FwYXRjaGluZyB0byBTbG90VmlzaXRvciAvIERlYnVnU2xvdFZpc2l0b3IgdmVyc2lvbnMuCisK
Ky8vICAgIHZvaWQgYXBwZW5kKGNvbnN0IENvbnNlcnZhdGl2ZVJvb3RzJik7CisvLyAgICB2b2lk
IGFwcGVuZFVuYmFycmllcmVkKEpTVmFsdWUpOworLy8gICAgdm9pZCBhcHBlbmRVbmJhcnJpZXJl
ZChKU0NlbGwqKTsKKy8vICAgIHZvaWQgYXBwZW5kSGlkZGVuVW5iYXJyaWVyZWQoSlNDZWxsKik7
CisvLyAgICBib29sIGNvbnRhaW5zT3BhcXVlUm9vdCh2b2lkKikgY29uc3Q7CisvLyAgICB2b2lk
IHZpc2l0QXNDb25zdHJhaW50KGNvbnN0IEpTQ2VsbCopOworCitwcm90ZWN0ZWQ6CisgICAgaW5s
aW5lIEFic3RyYWN0U2xvdFZpc2l0b3IoSGVhcCYsIENTdHJpbmcgY29kZU5hbWUpOworCisgICAg
dm9pZCByZXNldCgpOworCisgICAgTWFya1N0YWNrQXJyYXkgbV9jb2xsZWN0b3JTdGFjazsKKyAg
ICBNYXJrU3RhY2tBcnJheSBtX211dGF0b3JTdGFjazsKKworICAgIHNpemVfdCBtX2J5dGVzVmlz
aXRlZCB7IDAgfTsKKyAgICBzaXplX3QgbV92aXNpdENvdW50IHsgMCB9OworCisgICAgSGVhcFZl
cnNpb24gbV9tYXJraW5nVmVyc2lvbjsgLy8gbWxhbSBGSVhNRQorICAgIEhlYXAmIG1faGVhcDsK
KworICAgIEhlYXBBbmFseXplciogbV9oZWFwQW5hbHl6ZXIgeyBudWxscHRyIH07CisgICAgUm9v
dE1hcmtSZWFzb24gbV9yb290TWFya1JlYXNvbiB7IFJvb3RNYXJrUmVhc29uOjpOb25lIH07CisK
KyAgICBDU3RyaW5nIG1fY29kZU5hbWU7CisKKyAgICBNYXJraW5nQ29uc3RyYWludCogbV9jdXJy
ZW50Q29uc3RyYWludCB7IG51bGxwdHIgfTsKKyAgICBNYXJraW5nQ29uc3RyYWludFNvbHZlciog
bV9jdXJyZW50U29sdmVyIHsgbnVsbHB0ciB9OworCisvLyAgICBUeXBlIG1fdmlzaXRvclR5cGU7
CisKKyAgICBmcmllbmQgY2xhc3MgTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXI7Cit9OworCitjbGFz
cyBTZXRSb290TWFya1JlYXNvblNjb3BlIHsKK3B1YmxpYzoKKyAgICBTZXRSb290TWFya1JlYXNv
blNjb3BlKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIEFic3RyYWN0U2xvdFZpc2l0b3I6
OlJvb3RNYXJrUmVhc29uIHJlYXNvbikKKyAgICAgICAgOiBtX3Zpc2l0b3IodmlzaXRvcikKKyAg
ICAgICAgLCBtX3ByZXZpb3VzUmVhc29uKHZpc2l0b3Iucm9vdE1hcmtSZWFzb24oKSkKKyAgICB7
CisgICAgICAgIG1fdmlzaXRvci5zZXRSb290TWFya1JlYXNvbihyZWFzb24pOworICAgIH0KKwor
ICAgIH5TZXRSb290TWFya1JlYXNvblNjb3BlKCkKKyAgICB7CisgICAgICAgIG1fdmlzaXRvci5z
ZXRSb290TWFya1JlYXNvbihtX3ByZXZpb3VzUmVhc29uKTsKKyAgICB9CisKK3ByaXZhdGU6Cisg
ICAgQWJzdHJhY3RTbG90VmlzaXRvciYgbV92aXNpdG9yOworICAgIEFic3RyYWN0U2xvdFZpc2l0
b3I6OlJvb3RNYXJrUmVhc29uIG1fcHJldmlvdXNSZWFzb247Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Fic3RyYWN0U2xvdFZpc2l0
b3JJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQWJz
dHJhY3RTbG90VmlzaXRvcklubGluZXMuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9BYnN0cmFjdFNsb3RWaXNpdG9ySW5saW5lcy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMTA0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJBYnN0cmFjdFNsb3RWaXNpdG9yLmgi
CisvLyNpbmNsdWRlICJEZWJ1Z1Nsb3RWaXNpdG9yLmgiCisjaW5jbHVkZSAiSGVhcC5oIgorLy8j
aW5jbHVkZSAiU2xvdFZpc2l0b3IuaCIKKyNpbmNsdWRlICJXZWFrSW5saW5lcy5oIgorI2luY2x1
ZGUgIldyaXRlQmFycmllci5oIgorCituYW1lc3BhY2UgSlNDIHsKKworLy9pbmxpbmUgQWJzdHJh
Y3RTbG90VmlzaXRvcjo6QWJzdHJhY3RTbG90VmlzaXRvcihUeXBlIHR5cGUsIEhlYXAmIGhlYXAs
IENTdHJpbmcgY29kZU5hbWUpCitpbmxpbmUgQWJzdHJhY3RTbG90VmlzaXRvcjo6QWJzdHJhY3RT
bG90VmlzaXRvcihIZWFwJiBoZWFwLCBDU3RyaW5nIGNvZGVOYW1lKQorICAgIDogbV9tYXJraW5n
VmVyc2lvbihNYXJrZWRTcGFjZTo6aW5pdGlhbFZlcnNpb24pCisgICAgLCBtX2hlYXAoaGVhcCkK
KyAgICAsIG1fY29kZU5hbWUoY29kZU5hbWUpCisvLyAgICAsIG1fdmlzaXRvclR5cGUodHlwZSkK
K3sKK30KKworaW5saW5lIEhlYXAqIEFic3RyYWN0U2xvdFZpc2l0b3I6OmhlYXAoKSBjb25zdAor
eworICAgIHJldHVybiAmbV9oZWFwOworfQorCitpbmxpbmUgVk0mIEFic3RyYWN0U2xvdFZpc2l0
b3I6OnZtKCkKK3sKKyAgICByZXR1cm4gbV9oZWFwLnZtKCk7Cit9CisKK2lubGluZSBjb25zdCBW
TSYgQWJzdHJhY3RTbG90VmlzaXRvcjo6dm0oKSBjb25zdAoreworICAgIHJldHVybiBtX2hlYXAu
dm0oKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK0FMV0FZU19JTkxJTkUgdm9pZCBBYnN0
cmFjdFNsb3RWaXNpdG9yOjphcHBlbmQoY29uc3QgV2VhazxUPiYgd2VhaykKK3sKKyAgICBhcHBl
bmRVbmJhcnJpZXJlZCh3ZWFrLmdldCgpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlw
ZW5hbWUgVHJhaXRzPgorQUxXQVlTX0lOTElORSB2b2lkIEFic3RyYWN0U2xvdFZpc2l0b3I6OmFw
cGVuZChjb25zdCBXcml0ZUJhcnJpZXJCYXNlPFQsIFRyYWl0cz4mIHNsb3QpCit7CisgICAgYXBw
ZW5kVW5iYXJyaWVyZWQoc2xvdC5nZXQoKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5
cGVuYW1lIFRyYWl0cz4KK0FMV0FZU19JTkxJTkUgdm9pZCBBYnN0cmFjdFNsb3RWaXNpdG9yOjph
cHBlbmRIaWRkZW4oY29uc3QgV3JpdGVCYXJyaWVyQmFzZTxULCBUcmFpdHM+JiBzbG90KQorewor
ICAgIGFwcGVuZEhpZGRlblVuYmFycmllcmVkKHNsb3QuZ2V0KCkpOworfQorCit0ZW1wbGF0ZTx0
eXBlbmFtZSBJdGVyYXRvcj4KK0FMV0FZU19JTkxJTkUgdm9pZCBBYnN0cmFjdFNsb3RWaXNpdG9y
OjphcHBlbmQoSXRlcmF0b3IgYmVnaW4sIEl0ZXJhdG9yIGVuZCkKK3sKKyAgICBmb3IgKGF1dG8g
aXQgPSBiZWdpbjsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICBhcHBlbmQoKml0KTsKK30KKwor
QUxXQVlTX0lOTElORSB2b2lkIEFic3RyYWN0U2xvdFZpc2l0b3I6OmFwcGVuZFZhbHVlcyhjb25z
dCBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+KiBiYXJyaWVycywgc2l6ZV90IGNvdW50KQorewor
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY291bnQ7ICsraSkKKyAgICAgICAgYXBwZW5kKGJh
cnJpZXJzW2ldKTsKK30KKworQUxXQVlTX0lOTElORSB2b2lkIEFic3RyYWN0U2xvdFZpc2l0b3I6
OmFwcGVuZFZhbHVlc0hpZGRlbihjb25zdCBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+KiBiYXJy
aWVycywgc2l6ZV90IGNvdW50KQoreworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY291bnQ7
ICsraSkKKyAgICAgICAgYXBwZW5kSGlkZGVuKGJhcnJpZXJzW2ldKTsKK30KKworQUxXQVlTX0lO
TElORSB2b2lkIEFic3RyYWN0U2xvdFZpc2l0b3I6OnJlc2V0KCkKK3sKKyAgICBtX2J5dGVzVmlz
aXRlZCA9IDA7CisgICAgbV92aXNpdENvdW50ID0gMDsKK30KKworfSAvLyBuYW1lc3BhY2UgSlND
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9EZWJ1Z1Nsb3RWaXNpdG9yLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvRGVidWdTbG90VmlzaXRvci5o
CShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0RlYnVnU2xvdFZp
c2l0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDExMCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAi
QWJzdHJhY3RTbG90VmlzaXRvci5oIgorI2luY2x1ZGUgIkpTQ0pTVmFsdWUuaCIKKyNpbmNsdWRl
ICJWaXNpdFJhY2VLZXkuaCIKKyNpbmNsdWRlICJXZWFrLmgiCisKK25hbWVzcGFjZSBKU0Mgewor
CitjbGFzcyBDb25zZXJ2YXRpdmVSb290czsKK2NsYXNzIEhlYXA7CitjbGFzcyBKU0NlbGw7CisK
Ky8vIERlYnVnU2xvdFZpc2l0b3IncyBtZXRob2RzIHNob3VsZCBtYXRjaCBTbG90VmlzaXRvci4K
Ky8vIFNlZSBTbG90VmlzaXRvci5oIGZvciBkb2N1bWVudGF0aW9uIG9uIHdoYXQgZWFjaCBvZiB0
aGUgbWV0aG9kcyBkb2VzLgorCitjbGFzcyBEZWJ1Z1Nsb3RWaXNpdG9yIDogcHVibGljIEFic3Ry
YWN0U2xvdFZpc2l0b3IgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKERlYnVnU2xvdFZpc2l0
b3IpOworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworICAgIHVzaW5nIEJhc2UgPSBBYnN0
cmFjdFNsb3RWaXNpdG9yOworcHVibGljOgorLy8gICAgY2xhc3MgRGVmYXVsdE1hcmtpbmdWaW9s
YXRpb25Bc3NlcnRpb25TY29wZSB7CisvLyAgICBwdWJsaWM6CisvLyAgICAgICAgRGVmYXVsdE1h
cmtpbmdWaW9sYXRpb25Bc3NlcnRpb25TY29wZShEZWJ1Z1Nsb3RWaXNpdG9yJikgeyB9CisvLyAg
ICB9OworCisgICAgaW5saW5lIERlYnVnU2xvdFZpc2l0b3IoSGVhcCYsIENTdHJpbmcgY29kZU5h
bWUpOworICAgIHZpcnR1YWwgfkRlYnVnU2xvdFZpc2l0b3IoKSA9IGRlZmF1bHQ7CisKKyAgICBp
bmxpbmUgVk0mIHZtKCk7CisgICAgaW5saW5lIGNvbnN0IFZNJiB2bSgpIGNvbnN0OworICAgIGlu
bGluZSBIZWFwKiBoZWFwKCkgY29uc3Q7CisKKyAgICB2aXJ0dWFsIHZvaWQgYXBwZW5kKGNvbnN0
IENvbnNlcnZhdGl2ZVJvb3RzJikgb3ZlcnJpZGU7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBU
LCB0eXBlbmFtZSBUcmFpdHM+IHZvaWQgYXBwZW5kKGNvbnN0IFdyaXRlQmFycmllckJhc2U8VCwg
VHJhaXRzPiYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFRyYWl0cz4gdm9p
ZCBhcHBlbmRIaWRkZW4oY29uc3QgV3JpdGVCYXJyaWVyQmFzZTxULCBUcmFpdHM+Jik7CisgICAg
dGVtcGxhdGU8dHlwZW5hbWUgSXRlcmF0b3I+IHZvaWQgYXBwZW5kKEl0ZXJhdG9yIGJlZ2luICwg
SXRlcmF0b3IgZW5kKTsKKyAgICB2aXJ0dWFsIHZvaWQgYXBwZW5kVmFsdWVzKGNvbnN0IFdyaXRl
QmFycmllckJhc2U8VW5rbm93biwgUmF3VmFsdWVUcmFpdHM8VW5rbm93bj4+Kiwgc2l6ZV90IGNv
dW50KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGFwcGVuZFZhbHVlc0hpZGRlbihjb25zdCBXcml0
ZUJhcnJpZXJCYXNlPFVua25vd24sIFJhd1ZhbHVlVHJhaXRzPFVua25vd24+PiosIHNpemVfdCBj
b3VudCkgPSAwOworCisgICAgdmlydHVhbCB2b2lkIGFwcGVuZFVuYmFycmllcmVkKEpTVmFsdWUp
IG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBhcHBlbmRVbmJhcnJpZXJlZChKU1ZhbHVlKiwg
c2l6ZV90KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGFwcGVuZFVuYmFycmllcmVkKEpTQ2VsbCop
IG92ZXJyaWRlOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICB2b2lkIGFwcGVuZChj
b25zdCBXZWFrPFQ+JiB3ZWFrKTsKKworICAgIHZvaWQgYXBwZW5kSGlkZGVuVW5iYXJyaWVyZWQo
SlNWYWx1ZSkgb3ZlcnJpZGU7CisgICAgdm9pZCBhcHBlbmRIaWRkZW5VbmJhcnJpZXJlZChKU0Nl
bGwqKSBvdmVycmlkZTsKKworICAgIGJvb2wgYWRkT3BhcXVlUm9vdCh2b2lkKikgb3ZlcnJpZGU7
IC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgcm9vdCB3YXMgbmV3LgorICAgIGJvb2wgY29udGFpbnNP
cGFxdWVSb290KHZvaWQqKSBjb25zdCBvdmVycmlkZTsKKworICAgIGJvb2wgaXNGaXJzdFZpc2l0
KCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9pc0ZpcnN0VmlzaXQ7IH0gLy8gbWxhbSBGSVhNRQor
CisgICAgdm9pZCBtYXJrQXV4aWxpYXJ5KGNvbnN0IHZvaWQqIGJhc2UpIG92ZXJyaWRlOworCisg
ICAgdm9pZCByZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQoc2l6ZV90KSBvdmVycmlkZTsKKyNpZiBF
TkFCTEUoUkVTT1VSQ0VfVVNBR0UpCisgICAgdm9pZCByZXBvcnRFeHRlcm5hbE1lbW9yeVZpc2l0
ZWQoc2l6ZV90KSBvdmVycmlkZTsKKyNlbmRpZgorCisgICAgSGVhcFZlcnNpb24gbWFya2luZ1Zl
cnNpb24oKSBjb25zdCB7IHJldHVybiBtX21hcmtpbmdWZXJzaW9uOyB9CisKKyAgICBib29sIG11
dGF0b3JJc1N0b3BwZWQoKSBjb25zdCBvdmVycmlkZTsKKworLy8gICAgdmlydHVhbCB2b2lkIGRp
ZFJhY2UoY29uc3QgVmlzaXRSYWNlS2V5JikgPSAwOworLy8gICAgdm9pZCBkaWRSYWNlKEpTQ2Vs
bCogY2VsbCwgY29uc3QgY2hhciogcmVhc29uKSB7IGRpZFJhY2UoVmlzaXRSYWNlS2V5KGNlbGws
IHJlYXNvbikpOyB9CisgICAgdm9pZCBkaWRSYWNlKGNvbnN0IFZpc2l0UmFjZUtleSYpIG92ZXJy
aWRlOworCitwcm90ZWN0ZWQ6CisgICAgc2l6ZV90IG1fbm9uQ2VsbFZpc2l0Q291bnQgeyAwIH07
IC8vIFVzZWQgZm9yIGluY3JlbWVudGFsIGRyYWluaW5nLCBpZ25vcmVkIG90aGVyd2lzZS4KKyAg
ICBDaGVja2VkU2l6ZSBtX2V4dHJhTWVtb3J5U2l6ZSB7IDAgfTsKKworICAgIEhlYXBWZXJzaW9u
IG1fbWFya2luZ1ZlcnNpb247IC8vIG1sYW0gRklYTUUKKworLy8gICAgSGVhcCYgbV9oZWFwOwor
ICAgIENTdHJpbmcgbV9jb2RlTmFtZTsKKworICAgIGJvb2wgbV9pc0ZpcnN0VmlzaXQgeyBmYWxz
ZSB9OworLy8gICAgYm9vbCBtX211dGF0b3JJc1N0b3BwZWQgeyBmYWxzZSB9OyAvLyBtbGFtIEZJ
WE1FCit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0RlYnVnU2xvdFZpc2l0b3JJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvRGVidWdTbG90VmlzaXRvcklubGluZXMuaAkobm9uZXhpc3RlbnQp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9EZWJ1Z1Nsb3RWaXNpdG9ySW5saW5lcy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkFic3RyYWN0
U2xvdFZpc2l0b3JJbmxpbmVzLmgiCisjaW5jbHVkZSAiRGVidWdTbG90VmlzaXRvci5oIgorCitu
YW1lc3BhY2UgSlNDIHsKKworaW5saW5lIERlYnVnU2xvdFZpc2l0b3I6OkRlYnVnU2xvdFZpc2l0
b3IoSGVhcCYgaGVhcCwgQ1N0cmluZyBjb2RlTmFtZSkKKy8vICAgIDogQmFzZShUeXBlOjpEZWJ1
Z1Nsb3RWaXNpdG9yLCBoZWFwLCBjb2RlTmFtZSkKKyAgICA6IEJhc2UoaGVhcCwgY29kZU5hbWUp
Cit7Cit9CisKK2lubGluZSBIZWFwKiBEZWJ1Z1Nsb3RWaXNpdG9yOjpoZWFwKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gJm1faGVhcDsKK30KKworaW5saW5lIFZNJiBEZWJ1Z1Nsb3RWaXNpdG9yOjp2
bSgpCit7CisgICAgcmV0dXJuIG1faGVhcC52bSgpOworfQorCitpbmxpbmUgY29uc3QgVk0mIERl
YnVnU2xvdFZpc2l0b3I6OnZtKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9oZWFwLnZtKCk7Cit9
CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFRyYWl0cz4KK0FMV0FZU19JTkxJTkUg
dm9pZCBEZWJ1Z1Nsb3RWaXNpdG9yOjphcHBlbmQoY29uc3QgV3JpdGVCYXJyaWVyQmFzZTxULCBU
cmFpdHM+JiBzbG90KQoreworICAgIGFwcGVuZFVuYmFycmllcmVkKHNsb3QuZ2V0KCkpOworfQor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBUcmFpdHM+CitBTFdBWVNfSU5MSU5FIHZv
aWQgRGVidWdTbG90VmlzaXRvcjo6YXBwZW5kSGlkZGVuKGNvbnN0IFdyaXRlQmFycmllckJhc2U8
VCwgVHJhaXRzPiYgc2xvdCkKK3sKKyAgICBhcHBlbmRIaWRkZW5VbmJhcnJpZXJlZChzbG90Lmdl
dCgpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgSXRlcmF0b3I+CitBTFdBWVNfSU5MSU5FIHZv
aWQgRGVidWdTbG90VmlzaXRvcjo6YXBwZW5kKEl0ZXJhdG9yIGJlZ2luLCBJdGVyYXRvciBlbmQp
Cit7CisgICAgZm9yIChhdXRvIGl0ID0gYmVnaW47IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAg
YXBwZW5kKCppdCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitBTFdBWVNfSU5MSU5FIHZv
aWQgRGVidWdTbG90VmlzaXRvcjo6YXBwZW5kKGNvbnN0IFdlYWs8VD4mIHdlYWspCit7CisgICAg
YXBwZW5kVW5iYXJyaWVyZWQod2Vhay5nZXQoKSk7Cit9CisKK2lubGluZSB2b2lkIERlYnVnU2xv
dFZpc2l0b3I6OnJlcG9ydEV4dHJhTWVtb3J5VmlzaXRlZChzaXplX3Qgc2l6ZSkKK3sKKyAgICBp
ZiAobV9pc0ZpcnN0VmlzaXQpIHsKKyAgICAgICAgbV9ub25DZWxsVmlzaXRDb3VudCArPSBzaXpl
OworICAgICAgICAvLyBGSVhNRTogQ2hhbmdlIHRoaXMgdG8gdXNlIFNhdHVyYXRlZEFyaXRobWV0
aWMgd2hlbiBhdmFpbGFibGUuCisgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNzA0MTEKKyAgICAgICAgbV9leHRyYU1lbW9yeVNpemUgKz0gc2l6ZTsK
KyAgICB9Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvSGFuZGxlU2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9IYW5kbGVTZXQuY3BwCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9IYW5kbGVTZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Niw3ICs1Niw5
IEBAIHZvaWQgSGFuZGxlU2V0Ojpncm93KCkKICAgICB9CiB9CiAKLXZvaWQgSGFuZGxlU2V0Ojp2
aXNpdFN0cm9uZ0hhbmRsZXMoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3RlbXBsYXRlPHR5cGVu
YW1lIFZpc2l0b3I+CisvL3ZvaWQgSGFuZGxlU2V0Ojp2aXNpdFN0cm9uZ0hhbmRsZXMoVmlzaXRv
ciYgdmlzaXRvcikKK3ZvaWQgSGFuZGxlU2V0Ojp2aXNpdFN0cm9uZ0hhbmRsZXMxKEFic3RyYWN0
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgTm9kZSogZW5kID0gbV9zdHJvbmdMaXN0LmVu
ZCgpOwogICAgIGZvciAoTm9kZSogbm9kZSA9IG1fc3Ryb25nTGlzdC5iZWdpbigpOyBub2RlICE9
IGVuZDsgbm9kZSA9IG5vZGUtPm5leHQoKSkgewpAQCAtNjcsNiArNjksOSBAQCB2b2lkIEhhbmRs
ZVNldDo6dmlzaXRTdHJvbmdIYW5kbGVzKFNsb3RWCiAgICAgfQogfQogCisvL3RlbXBsYXRlIHZv
aWQgSGFuZGxlU2V0Ojp2aXNpdFN0cm9uZ0hhbmRsZXMoU2xvdFZpc2l0b3ImKTsKKy8vdGVtcGxh
dGUgdm9pZCBIYW5kbGVTZXQ6OnZpc2l0U3Ryb25nSGFuZGxlcyhEZWJ1Z1Nsb3RWaXNpdG9yJik7
CisKIHZvaWQgSGFuZGxlU2V0Ojp3cml0ZUJhcnJpZXIoSGFuZGxlU2xvdCBzbG90LCBjb25zdCBK
U1ZhbHVlJiB2YWx1ZSkKIHsKICAgICBpZiAoIXZhbHVlID09ICEqc2xvdCAmJiBzbG90LT5pc0Nl
bGwoKSA9PSB2YWx1ZS5pc0NlbGwoKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0hhbmRsZVNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hh
bmRsZVNldC5oCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9IYW5kbGVTZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsMTAgKzM1LDExIEBACiAKIG5hbWVz
cGFjZSBKU0MgewogCitjbGFzcyBBYnN0cmFjdFNsb3RWaXNpdG9yOwogY2xhc3MgSGFuZGxlU2V0
OwogY2xhc3MgVk07CiBjbGFzcyBKU1ZhbHVlOwotY2xhc3MgU2xvdFZpc2l0b3I7CisvL2NsYXNz
IFNsb3RWaXNpdG9yOwogCiBjbGFzcyBIYW5kbGVOb2RlIHsKIHB1YmxpYzoKQEAgLTczLDcgKzc0
LDggQEAgcHVibGljOgogICAgIEhhbmRsZVNsb3QgYWxsb2NhdGUoKTsKICAgICB2b2lkIGRlYWxs
b2NhdGUoSGFuZGxlU2xvdCk7CiAKLSAgICB2b2lkIHZpc2l0U3Ryb25nSGFuZGxlcyhTbG90Vmlz
aXRvciYpOworLy8gICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCB2aXNpdFN0cm9u
Z0hhbmRsZXMoVmlzaXRvciYpOworICAgIHZvaWQgdmlzaXRTdHJvbmdIYW5kbGVzMShBYnN0cmFj
dFNsb3RWaXNpdG9yJik7CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHdyaXRlQmFycmll
cihIYW5kbGVTbG90LCBjb25zdCBKU1ZhbHVlJik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0hlYXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0hlYXAuY3BwCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9IZWFwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjY5NywxMSArMjY5NywxMiBAQCB2b2lk
IEhlYXA6OmRpZEZyZWVCbG9jayhzaXplX3QgY2FwYWNpdHkpCiAjZW5kaWYKIH0KIAorLy8gbWxh
bSBGSVhNRQogdm9pZCBIZWFwOjphZGRDb3JlQ29uc3RyYWludHMoKQogewogICAgIG1fY29uc3Ry
YWludFNldC0+YWRkKAogICAgICAgICAiQ3MiLCAiQ29uc2VydmF0aXZlIFNjYW4iLAotICAgICAg
ICBbdGhpcywgbGFzdFZlcnNpb24gPSBzdGF0aWNfY2FzdDx1aW50NjRfdD4oMCldIChTbG90Vmlz
aXRvciYgc2xvdFZpc2l0b3IpIG11dGFibGUgeworICAgICAgICBbdGhpcywgbGFzdFZlcnNpb24g
PSBzdGF0aWNfY2FzdDx1aW50NjRfdD4oMCldIChBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9y
KSBtdXRhYmxlIHsKICAgICAgICAgICAgIGJvb2wgc2hvdWxkTm90UHJvZHVjZVdvcmsgPSBsYXN0
VmVyc2lvbiA9PSBtX3BoYXNlVmVyc2lvbjsKICAgICAgICAgICAgIGlmIChzaG91bGROb3RQcm9k
dWNlV29yaykKICAgICAgICAgICAgICAgICByZXR1cm47CkBAIC0yNzE4LDEzICsyNzE5LDEzIEBA
IHZvaWQgSGVhcDo6YWRkQ29yZUNvbnN0cmFpbnRzKCkKICAgICAgICAgICAgICAgICBnYXRoZXJK
U1N0YWNrUm9vdHMoY29uc2VydmF0aXZlUm9vdHMpOwogICAgICAgICAgICAgICAgIGdhdGhlclNj
cmF0Y2hCdWZmZXJSb290cyhjb25zZXJ2YXRpdmVSb290cyk7CiAKLSAgICAgICAgICAgICAgICBT
ZXRSb290TWFya1JlYXNvblNjb3BlIHJvb3RTY29wZShzbG90VmlzaXRvciwgU2xvdFZpc2l0b3I6
OlJvb3RNYXJrUmVhc29uOjpDb25zZXJ2YXRpdmVTY2FuKTsKLSAgICAgICAgICAgICAgICBzbG90
VmlzaXRvci5hcHBlbmQoY29uc2VydmF0aXZlUm9vdHMpOworICAgICAgICAgICAgICAgIFNldFJv
b3RNYXJrUmVhc29uU2NvcGUgcm9vdFNjb3BlKHZpc2l0b3IsIEFic3RyYWN0U2xvdFZpc2l0b3I6
OlJvb3RNYXJrUmVhc29uOjpDb25zZXJ2YXRpdmVTY2FuKTsKKyAgICAgICAgICAgICAgICB2aXNp
dG9yLmFwcGVuZChjb25zZXJ2YXRpdmVSb290cyk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICBpZiAoT3B0aW9uczo6dXNlSklUKCkpIHsKICAgICAgICAgICAgICAgICAvLyBKSVRTdHViUm91
dGluZXMgbXVzdCBiZSB2aXNpdGVkIGFmdGVyIHNjYW5uaW5nIENvbnNlcnZhdGl2ZVJvb3RzIHNp
bmNlIEpJVFN0dWJSb3V0aW5lcyBkZXBlbmQgb24gdGhlIGhvb2sgZXhlY3V0ZWQgZHVyaW5nIGdh
dGhlcmluZyBDb25zZXJ2YXRpdmVSb290cy4KLSAgICAgICAgICAgICAgICBTZXRSb290TWFya1Jl
YXNvblNjb3BlIHJvb3RTY29wZShzbG90VmlzaXRvciwgU2xvdFZpc2l0b3I6OlJvb3RNYXJrUmVh
c29uOjpKSVRTdHViUm91dGluZXMpOwotICAgICAgICAgICAgICAgIG1faml0U3R1YlJvdXRpbmVz
LT50cmFjZU1hcmtlZFN0dWJSb3V0aW5lcyhzbG90VmlzaXRvcik7CisgICAgICAgICAgICAgICAg
U2V0Um9vdE1hcmtSZWFzb25TY29wZSByb290U2NvcGUodmlzaXRvciwgQWJzdHJhY3RTbG90Vmlz
aXRvcjo6Um9vdE1hcmtSZWFzb246OkpJVFN0dWJSb3V0aW5lcyk7CisgICAgICAgICAgICAgICAg
bV9qaXRTdHViUm91dGluZXMtPnRyYWNlTWFya2VkU3R1YlJvdXRpbmVzMSh2aXNpdG9yKTsKICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICAgICAgbGFzdFZlcnNpb24gPSBtX3Bo
YXNlVmVyc2lvbjsKQEAgLTI3MzMsOTIgKzI3MzQsOTIgQEAgdm9pZCBIZWFwOjphZGRDb3JlQ29u
c3RyYWludHMoKQogICAgIAogICAgIG1fY29uc3RyYWludFNldC0+YWRkKAogICAgICAgICAiTXNy
IiwgIk1pc2MgU21hbGwgUm9vdHMiLAotICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiBzbG90
VmlzaXRvcikgeworICAgICAgICBbdGhpc10gKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3Ip
IHsKIAogI2lmIEpTQ19PQkpDX0FQSV9FTkFCTEVECi0gICAgICAgICAgICBzY2FuRXh0ZXJuYWxS
ZW1lbWJlcmVkU2V0KG1fdm0sIHNsb3RWaXNpdG9yKTsKKyAgICAgICAgICAgIHNjYW5FeHRlcm5h
bFJlbWVtYmVyZWRTZXQobV92bSwgdmlzaXRvcik7CiAjZW5kaWYKICAgICAgICAgICAgIGlmICht
X3ZtLnNtYWxsU3RyaW5ncy5uZWVkc1RvQmVWaXNpdGVkKCptX2NvbGxlY3Rpb25TY29wZSkpIHsK
LSAgICAgICAgICAgICAgICBTZXRSb290TWFya1JlYXNvblNjb3BlIHJvb3RTY29wZShzbG90Vmlz
aXRvciwgU2xvdFZpc2l0b3I6OlJvb3RNYXJrUmVhc29uOjpTdHJvbmdSZWZlcmVuY2VzKTsKLSAg
ICAgICAgICAgICAgICBtX3ZtLnNtYWxsU3RyaW5ncy52aXNpdFN0cm9uZ1JlZmVyZW5jZXMoc2xv
dFZpc2l0b3IpOworICAgICAgICAgICAgICAgIFNldFJvb3RNYXJrUmVhc29uU2NvcGUgcm9vdFNj
b3BlKHZpc2l0b3IsIEFic3RyYWN0U2xvdFZpc2l0b3I6OlJvb3RNYXJrUmVhc29uOjpTdHJvbmdS
ZWZlcmVuY2VzKTsKKyAgICAgICAgICAgICAgICBtX3ZtLnNtYWxsU3RyaW5ncy52aXNpdFN0cm9u
Z1JlZmVyZW5jZXModmlzaXRvcik7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICBTZXRSb290TWFya1JlYXNvblNjb3BlIHJvb3RTY29w
ZShzbG90VmlzaXRvciwgU2xvdFZpc2l0b3I6OlJvb3RNYXJrUmVhc29uOjpQcm90ZWN0ZWRWYWx1
ZXMpOworICAgICAgICAgICAgICAgIFNldFJvb3RNYXJrUmVhc29uU2NvcGUgcm9vdFNjb3BlKHZp
c2l0b3IsIEFic3RyYWN0U2xvdFZpc2l0b3I6OlJvb3RNYXJrUmVhc29uOjpQcm90ZWN0ZWRWYWx1
ZXMpOwogICAgICAgICAgICAgICAgIGZvciAoYXV0byYgcGFpciA6IG1fcHJvdGVjdGVkVmFsdWVz
KQotICAgICAgICAgICAgICAgICAgICBzbG90VmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZChwYWly
LmtleSk7CisgICAgICAgICAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQocGFp
ci5rZXkpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAobV9t
YXJrTGlzdFNldCAmJiBtX21hcmtMaXN0U2V0LT5zaXplKCkpIHsKLSAgICAgICAgICAgICAgICBT
ZXRSb290TWFya1JlYXNvblNjb3BlIHJvb3RTY29wZShzbG90VmlzaXRvciwgU2xvdFZpc2l0b3I6
OlJvb3RNYXJrUmVhc29uOjpDb25zZXJ2YXRpdmVTY2FuKTsKLSAgICAgICAgICAgICAgICBNYXJr
ZWRBcmd1bWVudEJ1ZmZlcjo6bWFya0xpc3RzKHNsb3RWaXNpdG9yLCAqbV9tYXJrTGlzdFNldCk7
CisgICAgICAgICAgICAgICAgU2V0Um9vdE1hcmtSZWFzb25TY29wZSByb290U2NvcGUodmlzaXRv
ciwgQWJzdHJhY3RTbG90VmlzaXRvcjo6Um9vdE1hcmtSZWFzb246OkNvbnNlcnZhdGl2ZVNjYW4p
OworICAgICAgICAgICAgICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyOjptYXJrTGlzdHModmlzaXRv
ciwgKm1fbWFya0xpc3RTZXQpOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBtX21hcmtl
ZEpTVmFsdWVSZWZBcnJheXMuZm9yRWFjaChbJl0gKE1hcmtlZEpTVmFsdWVSZWZBcnJheSogYXJy
YXkpIHsKLSAgICAgICAgICAgICAgICBhcnJheS0+dmlzaXRBZ2dyZWdhdGUoc2xvdFZpc2l0b3Ip
OworICAgICAgICAgICAgICAgIGFycmF5LT52aXNpdEFnZ3JlZ2F0ZTEodmlzaXRvcik7CiAgICAg
ICAgICAgICB9KTsKIAogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFNldFJvb3RNYXJr
UmVhc29uU2NvcGUgcm9vdFNjb3BlKHNsb3RWaXNpdG9yLCBTbG90VmlzaXRvcjo6Um9vdE1hcmtS
ZWFzb246OlZNRXhjZXB0aW9ucyk7Ci0gICAgICAgICAgICAgICAgc2xvdFZpc2l0b3IuYXBwZW5k
VW5iYXJyaWVyZWQobV92bS5leGNlcHRpb24oKSk7Ci0gICAgICAgICAgICAgICAgc2xvdFZpc2l0
b3IuYXBwZW5kVW5iYXJyaWVyZWQobV92bS5sYXN0RXhjZXB0aW9uKCkpOworICAgICAgICAgICAg
ICAgIFNldFJvb3RNYXJrUmVhc29uU2NvcGUgcm9vdFNjb3BlKHZpc2l0b3IsIEFic3RyYWN0U2xv
dFZpc2l0b3I6OlJvb3RNYXJrUmVhc29uOjpWTUV4Y2VwdGlvbnMpOworICAgICAgICAgICAgICAg
IHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQobV92bS5leGNlcHRpb24oKSk7CisgICAgICAgICAg
ICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZChtX3ZtLmxhc3RFeGNlcHRpb24oKSk7CiAg
ICAgICAgICAgICB9CiAgICAgICAgIH0sCiAgICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5OjpH
cmV5ZWRCeUV4ZWN1dGlvbik7CiAgICAgCiAgICAgbV9jb25zdHJhaW50U2V0LT5hZGQoCiAgICAg
ICAgICJTaCIsICJTdHJvbmcgSGFuZGxlcyIsCi0gICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3Im
IHNsb3RWaXNpdG9yKSB7Ci0gICAgICAgICAgICBTZXRSb290TWFya1JlYXNvblNjb3BlIHJvb3RT
Y29wZShzbG90VmlzaXRvciwgU2xvdFZpc2l0b3I6OlJvb3RNYXJrUmVhc29uOjpTdHJvbmdIYW5k
bGVzKTsKLSAgICAgICAgICAgIG1faGFuZGxlU2V0LnZpc2l0U3Ryb25nSGFuZGxlcyhzbG90Vmlz
aXRvcik7CisgICAgICAgIFt0aGlzXSAoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikgewor
ICAgICAgICAgICAgU2V0Um9vdE1hcmtSZWFzb25TY29wZSByb290U2NvcGUodmlzaXRvciwgQWJz
dHJhY3RTbG90VmlzaXRvcjo6Um9vdE1hcmtSZWFzb246OlN0cm9uZ0hhbmRsZXMpOworICAgICAg
ICAgICAgbV9oYW5kbGVTZXQudmlzaXRTdHJvbmdIYW5kbGVzMSh2aXNpdG9yKTsKICAgICAgICAg
fSwKICAgICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHk6OkdyZXllZEJ5RXhlY3V0aW9uKTsKICAg
ICAKICAgICBtX2NvbnN0cmFpbnRTZXQtPmFkZCgKICAgICAgICAgIkQiLCAiRGVidWdnZXIiLAot
ICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvcikgewotICAgICAgICAgICAg
U2V0Um9vdE1hcmtSZWFzb25TY29wZSByb290U2NvcGUoc2xvdFZpc2l0b3IsIFNsb3RWaXNpdG9y
OjpSb290TWFya1JlYXNvbjo6RGVidWdnZXIpOworICAgICAgICBbdGhpc10gKEFic3RyYWN0U2xv
dFZpc2l0b3ImIHZpc2l0b3IpIHsKKyAgICAgICAgICAgIFNldFJvb3RNYXJrUmVhc29uU2NvcGUg
cm9vdFNjb3BlKHZpc2l0b3IsIEFic3RyYWN0U2xvdFZpc2l0b3I6OlJvb3RNYXJrUmVhc29uOjpE
ZWJ1Z2dlcik7CiAKICNpZiBFTkFCTEUoU0FNUExJTkdfUFJPRklMRVIpCiAgICAgICAgICAgICBp
ZiAoU2FtcGxpbmdQcm9maWxlciogc2FtcGxpbmdQcm9maWxlciA9IG1fdm0uc2FtcGxpbmdQcm9m
aWxlcigpKSB7CiAgICAgICAgICAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhzYW1wbGlu
Z1Byb2ZpbGVyLT5nZXRMb2NrKCkpOwogICAgICAgICAgICAgICAgIHNhbXBsaW5nUHJvZmlsZXIt
PnByb2Nlc3NVbnZlcmlmaWVkU3RhY2tUcmFjZXMobG9ja2VyKTsKLSAgICAgICAgICAgICAgICBz
YW1wbGluZ1Byb2ZpbGVyLT52aXNpdChzbG90VmlzaXRvcik7CisgICAgICAgICAgICAgICAgc2Ft
cGxpbmdQcm9maWxlci0+dmlzaXQodmlzaXRvcik7CiAgICAgICAgICAgICAgICAgaWYgKE9wdGlv
bnM6OmxvZ0dDKCkgPT0gR0NMb2dnaW5nOjpWZXJib3NlKQotICAgICAgICAgICAgICAgICAgICBk
YXRhTG9nKCJTYW1wbGluZyBQcm9maWxlciBkYXRhOlxuIiwgc2xvdFZpc2l0b3IpOworICAgICAg
ICAgICAgICAgICAgICBkYXRhTG9nKCJTYW1wbGluZyBQcm9maWxlciBkYXRhOlxuIiwgdmlzaXRv
cik7CiAgICAgICAgICAgICB9CiAjZW5kaWYgLy8gRU5BQkxFKFNBTVBMSU5HX1BST0ZJTEVSKQog
CiAgICAgICAgICAgICBpZiAobV92bS50eXBlUHJvZmlsZXIoKSkKLSAgICAgICAgICAgICAgICBt
X3ZtLnR5cGVQcm9maWxlckxvZygpLT52aXNpdChzbG90VmlzaXRvcik7CisgICAgICAgICAgICAg
ICAgbV92bS50eXBlUHJvZmlsZXJMb2coKS0+dmlzaXQodmlzaXRvcik7CiAgICAgICAgICAgICAK
ICAgICAgICAgICAgIGlmIChhdXRvKiBzaGFkb3dDaGlja2VuID0gbV92bS5zaGFkb3dDaGlja2Vu
KCkpCi0gICAgICAgICAgICAgICAgc2hhZG93Q2hpY2tlbi0+dmlzaXRDaGlsZHJlbihzbG90Vmlz
aXRvcik7CisgICAgICAgICAgICAgICAgc2hhZG93Q2hpY2tlbi0+dmlzaXRDaGlsZHJlbih2aXNp
dG9yKTsKICAgICAgICAgfSwKICAgICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHk6OkdyZXllZEJ5
RXhlY3V0aW9uKTsKICAgICAKICAgICBtX2NvbnN0cmFpbnRTZXQtPmFkZCgKICAgICAgICAgIldz
IiwgIldlYWsgU2V0cyIsCi0gICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9y
KSB7Ci0gICAgICAgICAgICBTZXRSb290TWFya1JlYXNvblNjb3BlIHJvb3RTY29wZShzbG90Vmlz
aXRvciwgU2xvdFZpc2l0b3I6OlJvb3RNYXJrUmVhc29uOjpXZWFrU2V0cyk7Ci0gICAgICAgICAg
ICBtX29iamVjdFNwYWNlLnZpc2l0V2Vha1NldHMoc2xvdFZpc2l0b3IpOworICAgICAgICBbdGhp
c10gKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsKKyAgICAgICAgICAgIFNldFJvb3RN
YXJrUmVhc29uU2NvcGUgcm9vdFNjb3BlKHZpc2l0b3IsIEFic3RyYWN0U2xvdFZpc2l0b3I6OlJv
b3RNYXJrUmVhc29uOjpXZWFrU2V0cyk7CisgICAgICAgICAgICBtX29iamVjdFNwYWNlLnZpc2l0
V2Vha1NldHMxKHZpc2l0b3IpOwogICAgICAgICB9LAogICAgICAgICBDb25zdHJhaW50Vm9sYXRp
bGl0eTo6R3JleWVkQnlNYXJraW5nKTsKICAgICAKICAgICBtX2NvbnN0cmFpbnRTZXQtPmFkZCgK
ICAgICAgICAgIk8iLCAiT3V0cHV0IiwKLSAgICAgICAgW10gKFNsb3RWaXNpdG9yJiBzbG90Vmlz
aXRvcikgewotICAgICAgICAgICAgVk0mIHZtID0gc2xvdFZpc2l0b3Iudm0oKTsKKyAgICAgICAg
W10gKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsKKyAgICAgICAgICAgIFZNJiB2bSA9
IHZpc2l0b3Iudm0oKTsKIAotICAgICAgICAgICAgYXV0byBjYWxsT3V0cHV0Q29uc3RyYWludCA9
IFtdIChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IsIEhlYXBDZWxsKiBoZWFwQ2VsbCwgSGVhcENl
bGw6OktpbmQpIHsKLSAgICAgICAgICAgICAgICBTZXRSb290TWFya1JlYXNvblNjb3BlIHJvb3RT
Y29wZShzbG90VmlzaXRvciwgU2xvdFZpc2l0b3I6OlJvb3RNYXJrUmVhc29uOjpPdXRwdXQpOwot
ICAgICAgICAgICAgICAgIFZNJiB2bSA9IHNsb3RWaXNpdG9yLnZtKCk7CisgICAgICAgICAgICBh
dXRvIGNhbGxPdXRwdXRDb25zdHJhaW50ID0gW10gKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0
b3IsIEhlYXBDZWxsKiBoZWFwQ2VsbCwgSGVhcENlbGw6OktpbmQpIHsKKyAgICAgICAgICAgICAg
ICBTZXRSb290TWFya1JlYXNvblNjb3BlIHJvb3RTY29wZSh2aXNpdG9yLCBBYnN0cmFjdFNsb3RW
aXNpdG9yOjpSb290TWFya1JlYXNvbjo6T3V0cHV0KTsKKyAgICAgICAgICAgICAgICBWTSYgdm0g
PSB2aXNpdG9yLnZtKCk7CiAgICAgICAgICAgICAgICAgSlNDZWxsKiBjZWxsID0gc3RhdGljX2Nh
c3Q8SlNDZWxsKj4oaGVhcENlbGwpOwotICAgICAgICAgICAgICAgIGNlbGwtPm1ldGhvZFRhYmxl
KHZtKS0+dmlzaXRPdXRwdXRDb25zdHJhaW50cyhjZWxsLCBzbG90VmlzaXRvcik7CisgICAgICAg
ICAgICAgICAgY2VsbC0+bWV0aG9kVGFibGUodm0pLT52aXNpdE91dHB1dENvbnN0cmFpbnRzKGNl
bGwsIHZpc2l0b3IpOwogICAgICAgICAgICAgfTsKICAgICAgICAgICAgIAogICAgICAgICAgICAg
YXV0byBhZGQgPSBbJl0gKGF1dG8mIHNldCkgewotICAgICAgICAgICAgICAgIHNsb3RWaXNpdG9y
LmFkZFBhcmFsbGVsQ29uc3RyYWludFRhc2soc2V0LmZvckVhY2hNYXJrZWRDZWxsSW5QYXJhbGxl
bChjYWxsT3V0cHV0Q29uc3RyYWludCkpOworICAgICAgICAgICAgICAgIHZpc2l0b3IuYWRkUGFy
YWxsZWxDb25zdHJhaW50VGFzayhzZXQuZm9yRWFjaE1hcmtlZENlbGxJblBhcmFsbGVsKGNhbGxP
dXRwdXRDb25zdHJhaW50KSk7CiAgICAgICAgICAgICB9OwogICAgICAgICAgICAgCiAgICAgICAg
ICAgICBhZGQodm0uZXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZXNXaXRoQ29uc3RyYWludHMpOwpA
QCAtMjgzMiwyMiArMjgzMywyMiBAQCB2b2lkIEhlYXA6OmFkZENvcmVDb25zdHJhaW50cygpCiAg
ICAgaWYgKE9wdGlvbnM6OnVzZUpJVCgpKSB7CiAgICAgICAgIG1fY29uc3RyYWludFNldC0+YWRk
KAogICAgICAgICAgICAgIkR3IiwgIkRGRyBXb3JrbGlzdHMiLAotICAgICAgICAgICAgW3RoaXNd
IChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IpIHsKLSAgICAgICAgICAgICAgICBTZXRSb290TWFy
a1JlYXNvblNjb3BlIHJvb3RTY29wZShzbG90VmlzaXRvciwgU2xvdFZpc2l0b3I6OlJvb3RNYXJr
UmVhc29uOjpERkdXb3JrTGlzdHMpOworICAgICAgICAgICAgW3RoaXNdIChBYnN0cmFjdFNsb3RW
aXNpdG9yJiB2aXNpdG9yKSB7CisgICAgICAgICAgICAgICAgU2V0Um9vdE1hcmtSZWFzb25TY29w
ZSByb290U2NvcGUodmlzaXRvciwgQWJzdHJhY3RTbG90VmlzaXRvcjo6Um9vdE1hcmtSZWFzb246
OkRGR1dvcmtMaXN0cyk7CiAKICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBERkc6
Om51bWJlck9mV29ya2xpc3RzKCk7IGktLTspCi0gICAgICAgICAgICAgICAgICAgIERGRzo6ZXhp
c3RpbmdXb3JrbGlzdEZvckluZGV4KGkpLnZpc2l0V2Vha1JlZmVyZW5jZXMoc2xvdFZpc2l0b3Ip
OworICAgICAgICAgICAgICAgICAgICBERkc6OmV4aXN0aW5nV29ya2xpc3RGb3JJbmRleChpKS52
aXNpdFdlYWtSZWZlcmVuY2VzKHZpc2l0b3IpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAg
ICAgICAgIC8vIEZJWE1FOiBUaGlzIGlzIGFsbW9zdCBjZXJ0YWlubHkgdW5uZWNlc3NhcnkuCiAg
ICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE2NjgyOQogICAgICAgICAgICAgICAgIERGRzo6aXRlcmF0ZUNvZGVCbG9ja3NGb3JHQygKICAg
ICAgICAgICAgICAgICAgICAgbV92bSwKICAgICAgICAgICAgICAgICAgICAgWyZdIChDb2RlQmxv
Y2sqIGNvZGVCbG9jaykgewotICAgICAgICAgICAgICAgICAgICAgICAgc2xvdFZpc2l0b3IuYXBw
ZW5kVW5iYXJyaWVyZWQoY29kZUJsb2NrKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZpc2l0
b3IuYXBwZW5kVW5iYXJyaWVyZWQoY29kZUJsb2NrKTsKICAgICAgICAgICAgICAgICAgICAgfSk7
CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkg
PT0gR0NMb2dnaW5nOjpWZXJib3NlKQotICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJERkcg
V29ya2xpc3RzOlxuIiwgc2xvdFZpc2l0b3IpOworICAgICAgICAgICAgICAgICAgICBkYXRhTG9n
KCJERkcgV29ya2xpc3RzOlxuIiwgdmlzaXRvcik7CiAgICAgICAgICAgICB9LAogICAgICAgICAg
ICAgQ29uc3RyYWludFZvbGF0aWxpdHk6OkdyZXllZEJ5TWFya2luZyk7CiAgICAgfQpAQCAtMjg1
NSwxNCArMjg1NiwxNCBAQCB2b2lkIEhlYXA6OmFkZENvcmVDb25zdHJhaW50cygpCiAgICAgCiAg
ICAgbV9jb25zdHJhaW50U2V0LT5hZGQoCiAgICAgICAgICJDYiIsICJDb2RlQmxvY2tzIiwKLSAg
ICAgICAgW3RoaXNdIChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IpIHsKLSAgICAgICAgICAgIFNl
dFJvb3RNYXJrUmVhc29uU2NvcGUgcm9vdFNjb3BlKHNsb3RWaXNpdG9yLCBTbG90VmlzaXRvcjo6
Um9vdE1hcmtSZWFzb246OkNvZGVCbG9ja3MpOworICAgICAgICBbdGhpc10gKEFic3RyYWN0U2xv
dFZpc2l0b3ImIHZpc2l0b3IpIHsKKyAgICAgICAgICAgIFNldFJvb3RNYXJrUmVhc29uU2NvcGUg
cm9vdFNjb3BlKHZpc2l0b3IsIEFic3RyYWN0U2xvdFZpc2l0b3I6OlJvb3RNYXJrUmVhc29uOjpD
b2RlQmxvY2tzKTsKICAgICAgICAgICAgIGl0ZXJhdGVFeGVjdXRpbmdBbmRDb21waWxpbmdDb2Rl
QmxvY2tzV2l0aG91dEhvbGRpbmdMb2NrcygKICAgICAgICAgICAgICAgICBbJl0gKENvZGVCbG9j
ayogY29kZUJsb2NrKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIFZpc2l0IHRoZSBDb2RlQmxv
Y2sgYXMgYSBjb25zdHJhaW50IG9ubHkgaWYgaXQncyBibGFjay4KICAgICAgICAgICAgICAgICAg
ICAgaWYgKGlzTWFya2VkKGNvZGVCbG9jaykKICAgICAgICAgICAgICAgICAgICAgICAgICYmIGNv
ZGVCbG9jay0+Y2VsbFN0YXRlKCkgPT0gQ2VsbFN0YXRlOjpQb3NzaWJseUJsYWNrKQotICAgICAg
ICAgICAgICAgICAgICAgICAgc2xvdFZpc2l0b3IudmlzaXRBc0NvbnN0cmFpbnQoY29kZUJsb2Nr
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZpc2l0b3IudmlzaXRBc0NvbnN0cmFpbnQoY29k
ZUJsb2NrKTsKICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgfSwKICAgICAgICAgQ29uc3Ry
YWludFZvbGF0aWxpdHk6OlNlbGRvbUdyZXllZCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9Jc29DZWxsU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvSXNvQ2VsbFNldC5oCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9Jc29DZWxsU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDcgQEAK
IAogbmFtZXNwYWNlIEpTQyB7CiAKK2NsYXNzIEFic3RyYWN0U2xvdFZpc2l0b3I7CiBjbGFzcyBI
ZWFwQ2VsbDsKIGNsYXNzIElzb1N1YnNwYWNlOwogCkBAIC01OSw3ICs2MCw3IEBAIHB1YmxpYzoK
ICAgICB2b2lkIGZvckVhY2hNYXJrZWRDZWxsKGNvbnN0IEZ1bmMmKTsKIAogICAgIHRlbXBsYXRl
PHR5cGVuYW1lIEZ1bmM+Ci0gICAgUmVmPFNoYXJlZFRhc2s8dm9pZChTbG90VmlzaXRvciYpPj4g
Zm9yRWFjaE1hcmtlZENlbGxJblBhcmFsbGVsKGNvbnN0IEZ1bmMmKTsKKyAgICBSZWY8U2hhcmVk
VGFzazx2b2lkKEFic3RyYWN0U2xvdFZpc2l0b3ImKT4+IGZvckVhY2hNYXJrZWRDZWxsSW5QYXJh
bGxlbChjb25zdCBGdW5jJik7CiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KICAg
ICB2b2lkIGZvckVhY2hMaXZlQ2VsbChjb25zdCBGdW5jJik7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9Jc29DZWxsU2V0SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0lzb0NlbGxTZXRJbmxpbmVzLmgJKHJldmlzaW9uIDI3MTQ0MykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0lzb0NlbGxTZXRJbmxpbmVzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTkyLDkgKzkyLDkgQEAgdm9pZCBJc29DZWxsU2V0Ojpmb3JFYWNoTWFya2Vk
Q2VsbChjb25zdAogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgotUmVmPFNoYXJlZFRhc2s8
dm9pZChTbG90VmlzaXRvciYpPj4gSXNvQ2VsbFNldDo6Zm9yRWFjaE1hcmtlZENlbGxJblBhcmFs
bGVsKGNvbnN0IEZ1bmMmIGZ1bmMpCitSZWY8U2hhcmVkVGFzazx2b2lkKEFic3RyYWN0U2xvdFZp
c2l0b3ImKT4+IElzb0NlbGxTZXQ6OmZvckVhY2hNYXJrZWRDZWxsSW5QYXJhbGxlbChjb25zdCBG
dW5jJiBmdW5jKQogewotICAgIGNsYXNzIFRhc2sgZmluYWwgOiBwdWJsaWMgU2hhcmVkVGFzazx2
b2lkKFNsb3RWaXNpdG9yJik+IHsKKyAgICBjbGFzcyBUYXNrIGZpbmFsIDogcHVibGljIFNoYXJl
ZFRhc2s8dm9pZChBYnN0cmFjdFNsb3RWaXNpdG9yJik+IHsKICAgICBwdWJsaWM6CiAgICAgICAg
IFRhc2soSXNvQ2VsbFNldCYgc2V0LCBjb25zdCBGdW5jJiBmdW5jKQogICAgICAgICAgICAgOiBt
X3NldChzZXQpCkBAIC0xMDMsNyArMTAzLDcgQEAgUmVmPFNoYXJlZFRhc2s8dm9pZChTbG90Vmlz
aXRvciYpPj4gSXNvQwogICAgICAgICB7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIHZv
aWQgcnVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBmaW5hbAorICAgICAgICB2b2lkIHJ1bihBYnN0
cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBmaW5hbAogICAgICAgICB7CiAgICAgICAgICAgICB3
aGlsZSAoTWFya2VkQmxvY2s6OkhhbmRsZSogaGFuZGxlID0gbV9ibG9ja1NvdXJjZS0+cnVuKCkp
IHsKICAgICAgICAgICAgICAgICB1bnNpZ25lZCBibG9ja0luZGV4ID0gaGFuZGxlLT5pbmRleCgp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSklUU3R1YlJvdXRpbmVTZXQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0pJVFN0dWJSb3V0aW5l
U2V0LmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
SklUU3R1YlJvdXRpbmVTZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjgsMTcgKzEyOCwyMiBA
QCB2b2lkIEpJVFN0dWJSb3V0aW5lU2V0OjpkZWxldGVVbm1hcmtlZEplCiAgICAgbV9yb3V0aW5l
cy5zaHJpbmsoZHN0SW5kZXgpOwogfQogCi12b2lkIEpJVFN0dWJSb3V0aW5lU2V0Ojp0cmFjZU1h
cmtlZFN0dWJSb3V0aW5lcyhTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vdGVtcGxhdGU8dHlwZW5h
bWUgVmlzaXRvcj4KKy8vdm9pZCBKSVRTdHViUm91dGluZVNldDo6dHJhY2VNYXJrZWRTdHViUm91
dGluZXMoVmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgSklUU3R1YlJvdXRpbmVTZXQ6OnRyYWNlTWFy
a2VkU3R1YlJvdXRpbmVzMShBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGZv
ciAoYXV0byYgZW50cnkgOiBtX3JvdXRpbmVzKSB7CiAgICAgICAgIEdDQXdhcmVKSVRTdHViUm91
dGluZSogcm91dGluZSA9IGVudHJ5LnJvdXRpbmU7CiAgICAgICAgIGlmICghcm91dGluZS0+bV9t
YXlCZUV4ZWN1dGluZykKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAKLSAgICAgICAg
cm91dGluZS0+bWFya1JlcXVpcmVkT2JqZWN0cyh2aXNpdG9yKTsKKyAgICAgICAgcm91dGluZS0+
bWFya1JlcXVpcmVkT2JqZWN0czEodmlzaXRvcik7CiAgICAgfQogfQogCisvL3RlbXBsYXRlIHZv
aWQgSklUU3R1YlJvdXRpbmVTZXQ6OnRyYWNlTWFya2VkU3R1YlJvdXRpbmVzKFNsb3RWaXNpdG9y
Jik7CisvL3RlbXBsYXRlIHZvaWQgSklUU3R1YlJvdXRpbmVTZXQ6OnRyYWNlTWFya2VkU3R1YlJv
dXRpbmVzKERlYnVnU2xvdFZpc2l0b3ImKTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRp
ZiAvLyBFTkFCTEUoSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSklUU3R1
YlJvdXRpbmVTZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9K
SVRTdHViUm91dGluZVNldC5oCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9KSVRTdHViUm91dGluZVNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw4ICsz
NSw5IEBAIHVzaW5nIFdURjo6UmFuZ2U7CiAKIG5hbWVzcGFjZSBKU0MgewogCitjbGFzcyBBYnN0
cmFjdFNsb3RWaXNpdG9yOwogY2xhc3MgR0NBd2FyZUpJVFN0dWJSb3V0aW5lOwotY2xhc3MgU2xv
dFZpc2l0b3I7CisvL2NsYXNzIFNsb3RWaXNpdG9yOwogCiAjaWYgRU5BQkxFKEpJVCkKIApAQCAt
NjMsOCArNjQsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBwcmVwYXJlRm9yQ29uc2VydmF0aXZlU2Nh
bigpOwogICAgIAogICAgIHZvaWQgZGVsZXRlVW5tYXJrZWRKZXR0aXNvbmVkU3R1YlJvdXRpbmVz
KCk7Ci0gICAgCi0gICAgdm9pZCB0cmFjZU1hcmtlZFN0dWJSb3V0aW5lcyhTbG90VmlzaXRvciYp
OworCisvLyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIHRyYWNlTWFya2VkU3R1
YlJvdXRpbmVzKFZpc2l0b3ImKTsKKyAgICB2b2lkIHRyYWNlTWFya2VkU3R1YlJvdXRpbmVzMShB
YnN0cmFjdFNsb3RWaXNpdG9yJik7CiAgICAgCiBwcml2YXRlOgogICAgIHZvaWQgbWFya1Nsb3co
dWludHB0cl90IGFkZHJlc3MpOwpAQCAtOTIsNyArOTQsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBt
YXJrKHZvaWQqKSB7IH0KICAgICB2b2lkIHByZXBhcmVGb3JDb25zZXJ2YXRpdmVTY2FuKCkgeyB9
CiAgICAgdm9pZCBkZWxldGVVbm1hcmtlZEpldHRpc29uZWRTdHViUm91dGluZXMoKSB7IH0KLSAg
ICB2b2lkIHRyYWNlTWFya2VkU3R1YlJvdXRpbmVzKFNsb3RWaXNpdG9yJikgeyB9CisvLyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIHRyYWNlTWFya2VkU3R1YlJvdXRpbmVzKFZp
c2l0b3ImKSB7IH0KKyAgICB2b2lkIHRyYWNlTWFya2VkU3R1YlJvdXRpbmVzMShBYnN0cmFjdFNs
b3RWaXNpdG9yJikgeyB9CiB9OwogCiAjZW5kaWYgLy8gIUVOQUJMRShKSVQpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya1N0YWNrTWVyZ2luZ0Nv
bnN0cmFpbnQuY3BwCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9NYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1
LDcgKzI1LDYgQEAKIAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIk1hcmtTdGFja01l
cmdpbmdDb25zdHJhaW50LmgiCi0KICNpbmNsdWRlICJHQ1NlZ21lbnRlZEFycmF5SW5saW5lcy5o
IgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKIApAQCAtNDEsMTIgKzQwLDEyIEBAIE1hcmtTdGFj
a01lcmdpbmdDb25zdHJhaW50Ojp+TWFya1N0YWNrTWUKIHsKIH0KIAotZG91YmxlIE1hcmtTdGFj
a01lcmdpbmdDb25zdHJhaW50OjpxdWlja1dvcmtFc3RpbWF0ZShTbG90VmlzaXRvciYpCitkb3Vi
bGUgTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQ6OnF1aWNrV29ya0VzdGltYXRlKEFic3RyYWN0
U2xvdFZpc2l0b3ImKQogewogICAgIHJldHVybiBtX2hlYXAubV9tdXRhdG9yTWFya1N0YWNrLT5z
aXplKCkgKyBtX2hlYXAubV9yYWNlTWFya1N0YWNrLT5zaXplKCk7CiB9CiAKLXZvaWQgTWFya1N0
YWNrTWVyZ2luZ0NvbnN0cmFpbnQ6OnByZXBhcmVUb0V4ZWN1dGVJbXBsKGNvbnN0IEFic3RyYWN0
TG9ja2VyJiwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIE1hcmtTdGFja01lcmdpbmdDb25z
dHJhaW50OjpwcmVwYXJlVG9FeGVjdXRlSW1wbChjb25zdCBBYnN0cmFjdExvY2tlciYsIEFic3Ry
YWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgLy8gTG9nZ2luZyB0aGUgd29yayBoZXJl
IGVuc3VyZXMgdGhhdCB0aGUgY29uc3RyYWludCBzb2x2ZXIga25vd3MgdGhhdCBpdCBkb2Vzbid0
IG5lZWQgdG8gcHJvZHVjZQogICAgIC8vIGFueW1vcmUgd29yay4KQEAgLTU2LDcgKzU1LDcgQEAg
dm9pZCBNYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludDo6cHJlcGFyZQogICAgIGRhdGFMb2dJZihP
cHRpb25zOjpsb2dHQygpLCAiKCIsIHNpemUsICIpIik7CiB9CiAKLXZvaWQgTWFya1N0YWNrTWVy
Z2luZ0NvbnN0cmFpbnQ6OmV4ZWN1dGVJbXBsKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBN
YXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludDo6ZXhlY3V0ZUltcGwoQWJzdHJhY3RTbG90VmlzaXRv
ciYgdmlzaXRvcikKIHsKICAgICBtX2hlYXAubV9tdXRhdG9yTWFya1N0YWNrLT50cmFuc2ZlclRv
KHZpc2l0b3IubXV0YXRvck1hcmtTdGFjaygpKTsKICAgICBtX2hlYXAubV9yYWNlTWFya1N0YWNr
LT50cmFuc2ZlclRvKHZpc2l0b3IubXV0YXRvck1hcmtTdGFjaygpKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL01hcmtTdGFja01lcmdpbmdDb25zdHJhaW50LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFp
bnQuaAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFy
a1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsMTggKzMwLDE4
IEBACiBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgSGVhcDsKLWNsYXNzIFNsb3RWaXNpdG9yOwor
Y2xhc3MgQWJzdHJhY3RTbG90VmlzaXRvcjsKIAogY2xhc3MgTWFya1N0YWNrTWVyZ2luZ0NvbnN0
cmFpbnQgZmluYWwgOiBwdWJsaWMgTWFya2luZ0NvbnN0cmFpbnQgewogcHVibGljOgogICAgIE1h
cmtTdGFja01lcmdpbmdDb25zdHJhaW50KEhlYXAmKTsKICAgICB+TWFya1N0YWNrTWVyZ2luZ0Nv
bnN0cmFpbnQoKSBmaW5hbDsKICAgICAKLSAgICBkb3VibGUgcXVpY2tXb3JrRXN0aW1hdGUoU2xv
dFZpc2l0b3ImKSBmaW5hbDsKKyAgICBkb3VibGUgcXVpY2tXb3JrRXN0aW1hdGUoQWJzdHJhY3RT
bG90VmlzaXRvciYpIGZpbmFsOwogICAgIAogcHJpdmF0ZToKLSAgICB2b2lkIHByZXBhcmVUb0V4
ZWN1dGVJbXBsKGNvbnN0IEFic3RyYWN0TG9ja2VyJiBjb25zdHJhaW50U29sdmluZ0xvY2tlciwg
U2xvdFZpc2l0b3ImKSBmaW5hbDsKLSAgICB2b2lkIGV4ZWN1dGVJbXBsKFNsb3RWaXNpdG9yJikg
ZmluYWw7CisgICAgdm9pZCBwcmVwYXJlVG9FeGVjdXRlSW1wbChjb25zdCBBYnN0cmFjdExvY2tl
ciYgY29uc3RyYWludFNvbHZpbmdMb2NrZXIsIEFic3RyYWN0U2xvdFZpc2l0b3ImKSBmaW5hbDsK
KyAgICB2b2lkIGV4ZWN1dGVJbXBsKEFic3RyYWN0U2xvdFZpc2l0b3ImKSBmaW5hbDsKICAgICAK
ICAgICBIZWFwJiBtX2hlYXA7CiB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
TWFya2VkQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9N
YXJrZWRCbG9jay5oCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9NYXJrZWRCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNTEsNyArMTUxLDggQEAgcHVi
bGljOgogICAgICAgICAKICAgICAgICAgdm9pZCBzaHJpbmsoKTsKICAgICAgICAgICAgIAotICAg
ICAgICB2b2lkIHZpc2l0V2Vha1NldChTbG90VmlzaXRvciYpOworLy8gICAgICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgdmlzaXRXZWFrU2V0KFZpc2l0b3ImKTsKKyAgICAgICAg
dm9pZCB2aXNpdFdlYWtTZXQxKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKICAgICAgICAgdm9pZCBy
ZWFwV2Vha1NldCgpOwogICAgICAgICAgICAgCiAgICAgICAgIC8vIFdoaWxlIGFsbG9jYXRpbmcg
ZnJvbSBhIGZyZWUgbGlzdCwgTWFya2VkQmxvY2sgdGVtcG9yYXJpbHkgaGFzIGJvZ3VzCkBAIC00
OTgsOSArNDk5LDExIEBAIGlubGluZSB2b2lkIE1hcmtlZEJsb2NrOjpIYW5kbGU6OnNocmluaygK
ICAgICBtX3dlYWtTZXQuc2hyaW5rKCk7CiB9CiAKLWlubGluZSB2b2lkIE1hcmtlZEJsb2NrOjpI
YW5kbGU6OnZpc2l0V2Vha1NldChTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vdGVtcGxhdGU8dHlw
ZW5hbWUgVmlzaXRvcj4KKy8vaW5saW5lIHZvaWQgTWFya2VkQmxvY2s6OkhhbmRsZTo6dmlzaXRX
ZWFrU2V0KFZpc2l0b3ImIHZpc2l0b3IpCitpbmxpbmUgdm9pZCBNYXJrZWRCbG9jazo6SGFuZGxl
Ojp2aXNpdFdlYWtTZXQxKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7Ci0gICAgcmV0
dXJuIG1fd2Vha1NldC52aXNpdCh2aXNpdG9yKTsKKyAgICByZXR1cm4gbV93ZWFrU2V0LnZpc2l0
MSh2aXNpdG9yKTsKIH0KIAogaW5saW5lIHZvaWQgTWFya2VkQmxvY2s6OkhhbmRsZTo6cmVhcFdl
YWtTZXQoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkU3BhY2UuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZFNwYWNlLmNw
cAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2Vk
U3BhY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNzIsMTAgKzI3MiwxMCBAQCB2b2lkIE1hcmtl
ZFNwYWNlOjplbmFibGVQcmVjaXNlQWxsb2NhdGlvCiAgICAgICAgIG1fcHJlY2lzZUFsbG9jYXRp
b25TZXQtPmFkZChhbGxvY2F0aW9uLT5jZWxsKCkpOwogfQogCi12b2lkIE1hcmtlZFNwYWNlOjp2
aXNpdFdlYWtTZXRzKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBNYXJrZWRTcGFjZTo6dmlz
aXRXZWFrU2V0czEoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBhdXRvIHZp
c2l0ID0gWyZdIChXZWFrU2V0KiB3ZWFrU2V0KSB7Ci0gICAgICAgIHdlYWtTZXQtPnZpc2l0KHZp
c2l0b3IpOworICAgICAgICB3ZWFrU2V0LT52aXNpdDEodmlzaXRvcik7CiAgICAgfTsKICAgICAK
ICAgICBtX25ld0FjdGl2ZVdlYWtTZXRzLmZvckVhY2godmlzaXQpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkU3BhY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRTcGFjZS5oCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRTcGFjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
Nyw2ICszNyw3IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCitjbGFzcyBBYnN0cmFjdFNsb3RWaXNp
dG9yOyAvLyBtbGFtIEZJWE1FID8KIGNsYXNzIENvbXBsZXRlU3Vic3BhY2U7CiBjbGFzcyBIZWFw
OwogY2xhc3MgSGVhcENlbGw7CkBAIC0xMDUsNyArMTA2LDcgQEAgcHVibGljOgogICAgIAogICAg
IHZvaWQgcHJlcGFyZUZvckFsbG9jYXRpb24oKTsKIAotICAgIHZvaWQgdmlzaXRXZWFrU2V0cyhT
bG90VmlzaXRvciYpOworICAgIHZvaWQgdmlzaXRXZWFrU2V0czEoQWJzdHJhY3RTbG90VmlzaXRv
ciYpOwogICAgIHZvaWQgcmVhcFdlYWtTZXRzKCk7CiAKICAgICBNYXJrZWRCbG9ja1NldCYgYmxv
Y2tzKCkgeyByZXR1cm4gbV9ibG9ja3M7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL01hcmtpbmdDb25zdHJhaW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludC5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIk1h
cmtpbmdDb25zdHJhaW50LmgiCiAKKyNpbmNsdWRlICJBYnN0cmFjdFNsb3RWaXNpdG9ySW5saW5l
cy5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJWaXNpdENvdW50ZXIuaCIK
IApAQCAtNTEsNyArNTIsNyBAQCB2b2lkIE1hcmtpbmdDb25zdHJhaW50OjpyZXNldFN0YXRzKCkK
ICAgICBtX2xhc3RWaXNpdENvdW50ID0gMDsKIH0KIAotdm9pZCBNYXJraW5nQ29uc3RyYWludDo6
ZXhlY3V0ZShTbG90VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgTWFya2luZ0NvbnN0cmFpbnQ6OmV4
ZWN1dGUoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBWaXNpdENvdW50ZXIg
dmlzaXRDb3VudGVyKHZpc2l0b3IpOwogICAgIGV4ZWN1dGVJbXBsKHZpc2l0b3IpOwpAQCAtNjAs
MTcgKzYxLDE3IEBAIHZvaWQgTWFya2luZ0NvbnN0cmFpbnQ6OmV4ZWN1dGUoU2xvdFZpc2kKICAg
ICAgICAgZGF0YUxvZygiKCIsIGFiYnJldmlhdGVkTmFtZSgpLCAiIHZpc2l0ZWQgIiwgdmlzaXRD
b3VudGVyLnZpc2l0Q291bnQoKSwgIiBpbiBleGVjdXRlKSIpOwogfQogCi1kb3VibGUgTWFya2lu
Z0NvbnN0cmFpbnQ6OnF1aWNrV29ya0VzdGltYXRlKFNsb3RWaXNpdG9yJikKK2RvdWJsZSBNYXJr
aW5nQ29uc3RyYWludDo6cXVpY2tXb3JrRXN0aW1hdGUoQWJzdHJhY3RTbG90VmlzaXRvciYpCiB7
CiAgICAgcmV0dXJuIDA7CiB9CiAKLWRvdWJsZSBNYXJraW5nQ29uc3RyYWludDo6d29ya0VzdGlt
YXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorZG91YmxlIE1hcmtpbmdDb25zdHJhaW50Ojp3b3Jr
RXN0aW1hdGUoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICByZXR1cm4gbGFz
dFZpc2l0Q291bnQoKSArIHF1aWNrV29ya0VzdGltYXRlKHZpc2l0b3IpOwogfQogCi12b2lkIE1h
cmtpbmdDb25zdHJhaW50OjpwcmVwYXJlVG9FeGVjdXRlKGNvbnN0IEFic3RyYWN0TG9ja2VyJiBj
b25zdHJhaW50U29sdmluZ0xvY2tlciwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIE1hcmtp
bmdDb25zdHJhaW50OjpwcmVwYXJlVG9FeGVjdXRlKGNvbnN0IEFic3RyYWN0TG9ja2VyJiBjb25z
dHJhaW50U29sdmluZ0xvY2tlciwgQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAg
ICBkYXRhTG9nSWYoT3B0aW9uczo6bG9nR0MoKSwgYWJicmV2aWF0ZWROYW1lKCkpOwogICAgIFZp
c2l0Q291bnRlciB2aXNpdENvdW50ZXIodmlzaXRvcik7CkBAIC04MCw3ICs4MSw3IEBAIHZvaWQg
TWFya2luZ0NvbnN0cmFpbnQ6OnByZXBhcmVUb0V4ZWN1dGUKICAgICAgICAgZGF0YUxvZygiKCIs
IGFiYnJldmlhdGVkTmFtZSgpLCAiIHZpc2l0ZWQgIiwgdmlzaXRDb3VudGVyLnZpc2l0Q291bnQo
KSwgIiBpbiBwcmVwYXJlVG9FeGVjdXRlKSIpOwogfQogCi12b2lkIE1hcmtpbmdDb25zdHJhaW50
Ojpkb1BhcmFsbGVsV29yayhTbG90VmlzaXRvciYgdmlzaXRvciwgU2hhcmVkVGFzazx2b2lkKFNs
b3RWaXNpdG9yJik+JiB0YXNrKQordm9pZCBNYXJraW5nQ29uc3RyYWludDo6ZG9QYXJhbGxlbFdv
cmsoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvciwgU2hhcmVkVGFzazx2b2lkKEFic3RyYWN0
U2xvdFZpc2l0b3ImKT4mIHRhc2spCiB7CiAgICAgVmlzaXRDb3VudGVyIHZpc2l0Q291bnRlcih2
aXNpdG9yKTsKICAgICB0YXNrLnJ1bih2aXNpdG9yKTsKQEAgLTkyLDcgKzkzLDcgQEAgdm9pZCBN
YXJraW5nQ29uc3RyYWludDo6ZG9QYXJhbGxlbFdvcmsoUwogICAgIH0KIH0KIAotdm9pZCBNYXJr
aW5nQ29uc3RyYWludDo6cHJlcGFyZVRvRXhlY3V0ZUltcGwoY29uc3QgQWJzdHJhY3RMb2NrZXIm
LCBTbG90VmlzaXRvciYpCit2b2lkIE1hcmtpbmdDb25zdHJhaW50OjpwcmVwYXJlVG9FeGVjdXRl
SW1wbChjb25zdCBBYnN0cmFjdExvY2tlciYsIEFic3RyYWN0U2xvdFZpc2l0b3ImKQogewogfQog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50
LmgJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtp
bmdDb25zdHJhaW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDcgQEAKIG5hbWVzcGFj
ZSBKU0MgewogCiBjbGFzcyBNYXJraW5nQ29uc3RyYWludFNldDsKLWNsYXNzIFNsb3RWaXNpdG9y
OworY2xhc3MgQWJzdHJhY3RTbG90VmlzaXRvcjsKIAogY2xhc3MgTWFya2luZ0NvbnN0cmFpbnQg
ewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKE1hcmtpbmdDb25zdHJhaW50KTsKQEAgLTYwLDE1
ICs2MCwxNiBAQCBwdWJsaWM6CiAgICAgCiAgICAgc2l6ZV90IGxhc3RWaXNpdENvdW50KCkgY29u
c3QgeyByZXR1cm4gbV9sYXN0VmlzaXRDb3VudDsgfQogICAgIAotICAgIHZvaWQgZXhlY3V0ZShT
bG90VmlzaXRvciYpOwotICAgIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIHZpcnR1YWwgZG91Ymxl
IHF1aWNrV29ya0VzdGltYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKTsKKyAgICB2b2lkIGV4ZWN1
dGUoQWJzdHJhY3RTbG90VmlzaXRvciYpOworCisgICAgLy8gRklYTUUgbWxhbQorICAgIEpTX0VY
UE9SVF9QUklWQVRFIHZpcnR1YWwgZG91YmxlIHF1aWNrV29ya0VzdGltYXRlKEFic3RyYWN0U2xv
dFZpc2l0b3ImIHZpc2l0b3IpOwogICAgIAotICAgIGRvdWJsZSB3b3JrRXN0aW1hdGUoU2xvdFZp
c2l0b3ImIHZpc2l0b3IpOworICAgIGRvdWJsZSB3b3JrRXN0aW1hdGUoQWJzdHJhY3RTbG90Vmlz
aXRvciYgdmlzaXRvcik7CiAgICAgCi0gICAgdm9pZCBwcmVwYXJlVG9FeGVjdXRlKGNvbnN0IEFi
c3RyYWN0TG9ja2VyJiBjb25zdHJhaW50U29sdmluZ0xvY2tlciwgU2xvdFZpc2l0b3ImKTsKKyAg
ICB2b2lkIHByZXBhcmVUb0V4ZWN1dGUoY29uc3QgQWJzdHJhY3RMb2NrZXImIGNvbnN0cmFpbnRT
b2x2aW5nTG9ja2VyLCBBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAgICAgCi0gICAgdm9pZCBkb1Bh
cmFsbGVsV29yayhTbG90VmlzaXRvciYsIFNoYXJlZFRhc2s8dm9pZChTbG90VmlzaXRvciYpPiYp
OworICAgIHZvaWQgZG9QYXJhbGxlbFdvcmsoQWJzdHJhY3RTbG90VmlzaXRvciYsIFNoYXJlZFRh
c2s8dm9pZChBYnN0cmFjdFNsb3RWaXNpdG9yJik+Jik7CiAgICAgCiAgICAgQ29uc3RyYWludFZv
bGF0aWxpdHkgdm9sYXRpbGl0eSgpIGNvbnN0IHsgcmV0dXJuIG1fdm9sYXRpbGl0eTsgfQogICAg
IApAQCAtNzYsOCArNzcsOCBAQCBwdWJsaWM6CiAgICAgQ29uc3RyYWludFBhcmFsbGVsaXNtIHBh
cmFsbGVsaXNtKCkgY29uc3QgeyByZXR1cm4gbV9wYXJhbGxlbGlzbTsgfQogCiBwcm90ZWN0ZWQ6
Ci0gICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVJbXBsKFNsb3RWaXNpdG9yJikgPSAwOwotICAgIEpT
X0VYUE9SVF9QUklWQVRFIHZpcnR1YWwgdm9pZCBwcmVwYXJlVG9FeGVjdXRlSW1wbChjb25zdCBB
YnN0cmFjdExvY2tlciYgY29uc3RyYWludFNvbHZpbmdMb2NrZXIsIFNsb3RWaXNpdG9yJik7Cisg
ICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVJbXBsKEFic3RyYWN0U2xvdFZpc2l0b3ImKSA9IDA7Cisg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgdmlydHVhbCB2b2lkIHByZXBhcmVUb0V4ZWN1dGVJbXBsKGNv
bnN0IEFic3RyYWN0TG9ja2VyJiBjb25zdHJhaW50U29sdmluZ0xvY2tlciwgQWJzdHJhY3RTbG90
VmlzaXRvciYpOwogICAgIAogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgTWFya2luZ0NvbnN0
cmFpbnRTZXQ7IC8vIFNvIGl0IGNhbiBzZXQgbV9pbmRleC4KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50U2V0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludFNldC5jcHAJKHJldmlzaW9u
IDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50
U2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjMsNyArNjMsNyBAQCB2b2lkIE1hcmtpbmdDb25z
dHJhaW50U2V0OjpkaWRTdGFydE1hcmtpCiAgICAgbV9pdGVyYXRpb24gPSAxOwogfQogCi12b2lk
IE1hcmtpbmdDb25zdHJhaW50U2V0OjphZGQoQ1N0cmluZyBhYmJyZXZpYXRlZE5hbWUsIENTdHJp
bmcgbmFtZSwgOjpGdW5jdGlvbjx2b2lkKFNsb3RWaXNpdG9yJik+IGZ1bmN0aW9uLCBDb25zdHJh
aW50Vm9sYXRpbGl0eSB2b2xhdGlsaXR5LCBDb25zdHJhaW50Q29uY3VycmVuY3kgY29uY3VycmVu
Y3ksIENvbnN0cmFpbnRQYXJhbGxlbGlzbSBwYXJhbGxlbGlzbSkKK3ZvaWQgTWFya2luZ0NvbnN0
cmFpbnRTZXQ6OmFkZChDU3RyaW5nIGFiYnJldmlhdGVkTmFtZSwgQ1N0cmluZyBuYW1lLCA6OkZ1
bmN0aW9uPHZvaWQoQWJzdHJhY3RTbG90VmlzaXRvciYpPiBmdW5jdGlvbiwgQ29uc3RyYWludFZv
bGF0aWxpdHkgdm9sYXRpbGl0eSwgQ29uc3RyYWludENvbmN1cnJlbmN5IGNvbmN1cnJlbmN5LCBD
b25zdHJhaW50UGFyYWxsZWxpc20gcGFyYWxsZWxpc20pCiB7CiAgICAgYWRkKG1ha2VVbmlxdWU8
U2ltcGxlTWFya2luZ0NvbnN0cmFpbnQ+KFdURk1vdmUoYWJicmV2aWF0ZWROYW1lKSwgV1RGTW92
ZShuYW1lKSwgV1RGTW92ZShmdW5jdGlvbiksIHZvbGF0aWxpdHksIGNvbmN1cnJlbmN5LCBwYXJh
bGxlbGlzbSkpOwogfQpAQCAtNzgsMTQgKzc4LDE0IEBAIHZvaWQgTWFya2luZ0NvbnN0cmFpbnRT
ZXQ6OmFkZCgKICAgICBtX3NldC5hcHBlbmQoV1RGTW92ZShjb25zdHJhaW50KSk7CiB9CiAKLWJv
b2wgTWFya2luZ0NvbnN0cmFpbnRTZXQ6OmV4ZWN1dGVDb252ZXJnZW5jZShTbG90VmlzaXRvciYg
dmlzaXRvcikKK2Jvb2wgTWFya2luZ0NvbnN0cmFpbnRTZXQ6OmV4ZWN1dGVDb252ZXJnZW5jZShB
YnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGJvb2wgcmVzdWx0ID0gZXhlY3V0
ZUNvbnZlcmdlbmNlSW1wbCh2aXNpdG9yKTsKICAgICBkYXRhTG9nSWYoT3B0aW9uczo6bG9nR0Mo
KSwgIiAiKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1ib29sIE1hcmtpbmdDb25zdHJhaW50
U2V0Ojppc1dhdmVmcm9udEFkdmFuY2luZyhTbG90VmlzaXRvciYgdmlzaXRvcikKK2Jvb2wgTWFy
a2luZ0NvbnN0cmFpbnRTZXQ6OmlzV2F2ZWZyb250QWR2YW5jaW5nKEFic3RyYWN0U2xvdFZpc2l0
b3ImIHZpc2l0b3IpCiB7CiAgICAgZm9yIChNYXJraW5nQ29uc3RyYWludCogb3V0Z3Jvd3RoIDog
bV9vdXRncm93dGhzKSB7CiAgICAgICAgIGlmIChvdXRncm93dGgtPndvcmtFc3RpbWF0ZSh2aXNp
dG9yKSkKQEAgLTk0LDcgKzk0LDcgQEAgYm9vbCBNYXJraW5nQ29uc3RyYWludFNldDo6aXNXYXZl
ZnJvbnRBZAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBNYXJraW5nQ29uc3RyYWludFNl
dDo6ZXhlY3V0ZUNvbnZlcmdlbmNlSW1wbChTbG90VmlzaXRvciYgdmlzaXRvcikKK2Jvb2wgTWFy
a2luZ0NvbnN0cmFpbnRTZXQ6OmV4ZWN1dGVDb252ZXJnZW5jZUltcGwoQWJzdHJhY3RTbG90Vmlz
aXRvciYgdmlzaXRvcikKIHsKICAgICBTdXBlclNhbXBsZXJTY29wZSBzdXBlclNhbXBsZXJTY29w
ZShmYWxzZSk7CiAgICAgTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXIgc29sdmVyKCp0aGlzKTsKQEAg
LTE2Niw3ICsxNjYsNyBAQCBib29sIE1hcmtpbmdDb25zdHJhaW50U2V0OjpleGVjdXRlQ29udmVy
CiAgICAgcmV0dXJuICFzb2x2ZXIuZGlkVmlzaXRTb21ldGhpbmcoKTsKIH0KIAotdm9pZCBNYXJr
aW5nQ29uc3RyYWludFNldDo6ZXhlY3V0ZUFsbChTbG90VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQg
TWFya2luZ0NvbnN0cmFpbnRTZXQ6OmV4ZWN1dGVBbGwoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlz
aXRvcikKIHsKICAgICBmb3IgKGF1dG8mIGNvbnN0cmFpbnQgOiBtX3NldCkKICAgICAgICAgY29u
c3RyYWludC0+ZXhlY3V0ZSh2aXNpdG9yKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL01hcmtpbmdDb25zdHJhaW50U2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnRTZXQuaAkocmV2aXNpb24gMjcxNDQzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnRTZXQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDYsMTQgKzQ2LDE0IEBAIHB1YmxpYzoKICAgICB2b2lkIGFkZCgKICAgICAg
ICAgQ1N0cmluZyBhYmJyZXZpYXRlZE5hbWUsCiAgICAgICAgIENTdHJpbmcgbmFtZSwKLSAgICAg
ICAgOjpGdW5jdGlvbjx2b2lkKFNsb3RWaXNpdG9yJik+LAorICAgICAgICA6OkZ1bmN0aW9uPHZv
aWQoQWJzdHJhY3RTbG90VmlzaXRvciYpPiwKICAgICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHks
CiAgICAgICAgIENvbnN0cmFpbnRDb25jdXJyZW5jeSA9IENvbnN0cmFpbnRDb25jdXJyZW5jeTo6
Q29uY3VycmVudCwKICAgICAgICAgQ29uc3RyYWludFBhcmFsbGVsaXNtID0gQ29uc3RyYWludFBh
cmFsbGVsaXNtOjpTZXF1ZW50aWFsKTsKICAgICAKICAgICB2b2lkIGFkZCgKICAgICAgICAgQ1N0
cmluZyBhYmJyZXZpYXRlZE5hbWUsIENTdHJpbmcgbmFtZSwKLSAgICAgICAgOjpGdW5jdGlvbjx2
b2lkKFNsb3RWaXNpdG9yJik+IGZ1bmMsCisgICAgICAgIDo6RnVuY3Rpb248dm9pZChBYnN0cmFj
dFNsb3RWaXNpdG9yJik+IGZ1bmMsCiAgICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5IHZvbGF0
aWxpdHksCiAgICAgICAgIENvbnN0cmFpbnRQYXJhbGxlbGlzbSBwYXJhbGxlbGlzbSkKICAgICB7
CkBAIC02NCwyMCArNjQsMjAgQEAgcHVibGljOgogICAgIAogICAgIC8vIEFzc3VtaW5nIHRoYXQg
dGhlIG1hcmsgc3RhY2tzIGFyZSBhbGwgZW1wdHksIHRoaXMgd2lsbCBnaXZlIHlvdSBhIGd1ZXNz
IGFzIHRvIHdoZXRoZXIgb3IKICAgICAvLyBub3QgdGhlIHdhdmVmcm9udCBpcyBhZHZhbmNpbmcu
Ci0gICAgYm9vbCBpc1dhdmVmcm9udEFkdmFuY2luZyhTbG90VmlzaXRvciYpOwotICAgIGJvb2wg
aXNXYXZlZnJvbnRSZXRyZWF0aW5nKFNsb3RWaXNpdG9yJiB2aXNpdG9yKSB7IHJldHVybiAhaXNX
YXZlZnJvbnRBZHZhbmNpbmcodmlzaXRvcik7IH0KKyAgICBib29sIGlzV2F2ZWZyb250QWR2YW5j
aW5nKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKKyAgICBib29sIGlzV2F2ZWZyb250UmV0cmVhdGlu
ZyhBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKSB7IHJldHVybiAhaXNXYXZlZnJvbnRBZHZh
bmNpbmcodmlzaXRvcik7IH0KICAgICAKICAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhpcyBleGVj
dXRlZCBhbGwgY29uc3RyYWludHMgYW5kIG5vbmUgb2YgdGhlbSBwcm9kdWNlZCBuZXcgd29yay4g
VGhpcwogICAgIC8vIGFzc3VtZXMgdGhhdCB5b3UndmUgYWxyYWVkeSB2aXNpdGVkIHJvb3RzIGFu
ZCBkcmFpbmVkIGZyb20gdGhlcmUuCi0gICAgYm9vbCBleGVjdXRlQ29udmVyZ2VuY2UoU2xvdFZp
c2l0b3ImKTsKKyAgICBib29sIGV4ZWN1dGVDb252ZXJnZW5jZShBYnN0cmFjdFNsb3RWaXNpdG9y
Jik7CiAgICAgCiAgICAgLy8gU2ltcGx5IHJ1bnMgYWxsIGNvbnN0cmFpbnRzIHdpdGhvdXQgYW55
IHNoZW5hbmlnYW5zLgotICAgIHZvaWQgZXhlY3V0ZUFsbChTbG90VmlzaXRvciYpOworICAgIHZv
aWQgZXhlY3V0ZUFsbChBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAgICAgCiBwcml2YXRlOgogICAg
IGZyaWVuZCBjbGFzcyBNYXJraW5nQ29uc3RyYWludFNvbHZlcjsKICAgICAKLSAgICBib29sIGV4
ZWN1dGVDb252ZXJnZW5jZUltcGwoU2xvdFZpc2l0b3ImKTsKKyAgICBib29sIGV4ZWN1dGVDb252
ZXJnZW5jZUltcGwoQWJzdHJhY3RTbG90VmlzaXRvciYpOwogICAgIAogICAgIEhlYXAmIG1faGVh
cDsKICAgICBCaXRWZWN0b3IgbV91bmV4ZWN1dGVkUm9vdHM7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludFNvbHZlci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXIuY3BwCShy
ZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29u
c3RyYWludFNvbHZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDcgKzMzLDcgQEAgbmFtZXNw
YWNlIEpTQyB7IAogCiBNYXJraW5nQ29uc3RyYWludFNvbHZlcjo6TWFya2luZ0NvbnN0cmFpbnRT
b2x2ZXIoTWFya2luZ0NvbnN0cmFpbnRTZXQmIHNldCkKICAgICA6IG1faGVhcChzZXQubV9oZWFw
KQotICAgICwgbV9tYWluVmlzaXRvcihtX2hlYXAuY29sbGVjdG9yU2xvdFZpc2l0b3IoKSkKKyAg
ICAsIG1fbWFpblZpc2l0b3IobV9oZWFwLmNvbGxlY3RvclNsb3RWaXNpdG9yKCkpIC8vIG1sYW0g
RklYTUUgbmVlZCBzdXBwb3J0IGZvciBEZWJ1Z1Nsb3RWaXNpdG9yCiAgICAgLCBtX3NldChzZXQp
CiB7CiAgICAgbV9oZWFwLmZvckVhY2hTbG90VmlzaXRvcigKQEAgLTE1MCwxMyArMTUwLDEzIEBA
IHZvaWQgTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXI6OmV4ZWN1dGUoTWEKICAgICBtX2V4ZWN1dGVk
LnNldChjb25zdHJhaW50LmluZGV4KCkpOwogfQogCi12b2lkIE1hcmtpbmdDb25zdHJhaW50U29s
dmVyOjphZGRQYXJhbGxlbFRhc2soUmVmUHRyPFNoYXJlZFRhc2s8dm9pZChTbG90VmlzaXRvciYp
Pj4gdGFzaywgTWFya2luZ0NvbnN0cmFpbnQmIGNvbnN0cmFpbnQpCit2b2lkIE1hcmtpbmdDb25z
dHJhaW50U29sdmVyOjphZGRQYXJhbGxlbFRhc2soUmVmUHRyPFNoYXJlZFRhc2s8dm9pZChBYnN0
cmFjdFNsb3RWaXNpdG9yJik+PiB0YXNrLCBNYXJraW5nQ29uc3RyYWludCYgY29uc3RyYWludCkK
IHsKICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7CiAgICAgbV90b0V4ZWN1dGVJ
blBhcmFsbGVsLmFwcGVuZChUYXNrV2l0aENvbnN0cmFpbnQoV1RGTW92ZSh0YXNrKSwgJmNvbnN0
cmFpbnQpKTsKIH0KIAotdm9pZCBNYXJraW5nQ29uc3RyYWludFNvbHZlcjo6cnVuRXhlY3V0aW9u
VGhyZWFkKFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBTY2hlZHVsZXJQcmVmZXJlbmNlIHByZWZlcmVu
Y2UsIFNjb3BlZExhbWJkYTxPcHRpb25hbDx1bnNpZ25lZD4oKT4gcGlja05leHQpCit2b2lkIE1h
cmtpbmdDb25zdHJhaW50U29sdmVyOjpydW5FeGVjdXRpb25UaHJlYWQoQWJzdHJhY3RTbG90Vmlz
aXRvciYgdmlzaXRvciwgU2NoZWR1bGVyUHJlZmVyZW5jZSBwcmVmZXJlbmNlLCBTY29wZWRMYW1i
ZGE8T3B0aW9uYWw8dW5zaWduZWQ+KCk+IHBpY2tOZXh0KQogewogICAgIGZvciAoOzspIHsKICAg
ICAgICAgYm9vbCBkb1BhcmFsbGVsV29ya01vZGU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9NYXJraW5nQ29uc3RyYWludFNvbHZlci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50U29sdmVyLmgJKHJldmlzaW9uIDI3
MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50U29s
dmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTY1LDE1ICs2NSwxNSBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBleGVjdXRlKE1hcmtpbmdDb25zdHJhaW50Jik7CiAgICAgCiAgICAgLy8gUGFyYWxsZWwgY29u
c3RyYWludHMgY2FuIGFkZCBwYXJhbGxlbCB0YXNrcy4KLSAgICB2b2lkIGFkZFBhcmFsbGVsVGFz
ayhSZWZQdHI8U2hhcmVkVGFzazx2b2lkKFNsb3RWaXNpdG9yJik+PiwgTWFya2luZ0NvbnN0cmFp
bnQmKTsKKyAgICB2b2lkIGFkZFBhcmFsbGVsVGFzayhSZWZQdHI8U2hhcmVkVGFzazx2b2lkKEFi
c3RyYWN0U2xvdFZpc2l0b3ImKT4+LCBNYXJraW5nQ29uc3RyYWludCYpOwogICAgIAogcHJpdmF0
ZToKLSAgICB2b2lkIHJ1bkV4ZWN1dGlvblRocmVhZChTbG90VmlzaXRvciYsIFNjaGVkdWxlclBy
ZWZlcmVuY2UsIFNjb3BlZExhbWJkYTxPcHRpb25hbDx1bnNpZ25lZD4oKT4gcGlja05leHQpOwor
ICAgIHZvaWQgcnVuRXhlY3V0aW9uVGhyZWFkKEFic3RyYWN0U2xvdFZpc2l0b3ImLCBTY2hlZHVs
ZXJQcmVmZXJlbmNlLCBTY29wZWRMYW1iZGE8T3B0aW9uYWw8dW5zaWduZWQ+KCk+IHBpY2tOZXh0
KTsKICAgICAKICAgICBzdHJ1Y3QgVGFza1dpdGhDb25zdHJhaW50IHsKICAgICAgICAgVGFza1dp
dGhDb25zdHJhaW50KCkgeyB9CiAgICAgICAgIAotICAgICAgICBUYXNrV2l0aENvbnN0cmFpbnQo
UmVmUHRyPFNoYXJlZFRhc2s8dm9pZChTbG90VmlzaXRvciYpPj4gdGFzaywgTWFya2luZ0NvbnN0
cmFpbnQqIGNvbnN0cmFpbnQpCisgICAgICAgIFRhc2tXaXRoQ29uc3RyYWludChSZWZQdHI8U2hh
cmVkVGFzazx2b2lkKEFic3RyYWN0U2xvdFZpc2l0b3ImKT4+IHRhc2ssIE1hcmtpbmdDb25zdHJh
aW50KiBjb25zdHJhaW50KQogICAgICAgICAgICAgOiB0YXNrKFdURk1vdmUodGFzaykpCiAgICAg
ICAgICAgICAsIGNvbnN0cmFpbnQoY29uc3RyYWludCkKICAgICAgICAgewpAQCAtODUsMTIgKzg1
LDEyIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgJiYgY29uc3RyYWludCA9PSBvdGhlci5j
b25zdHJhaW50OwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBSZWZQdHI8U2hhcmVkVGFz
azx2b2lkKFNsb3RWaXNpdG9yJik+PiB0YXNrOworICAgICAgICBSZWZQdHI8U2hhcmVkVGFzazx2
b2lkKEFic3RyYWN0U2xvdFZpc2l0b3ImKT4+IHRhc2s7CiAgICAgICAgIE1hcmtpbmdDb25zdHJh
aW50KiBjb25zdHJhaW50IHsgbnVsbHB0ciB9OwogICAgIH07CiAgICAgCiAgICAgSGVhcCYgbV9o
ZWFwOwotICAgIFNsb3RWaXNpdG9yJiBtX21haW5WaXNpdG9yOworICAgIEFic3RyYWN0U2xvdFZp
c2l0b3ImIG1fbWFpblZpc2l0b3I7CiAgICAgTWFya2luZ0NvbnN0cmFpbnRTZXQmIG1fc2V0Owog
ICAgIEJpdFZlY3RvciBtX2V4ZWN1dGVkOwogICAgIERlcXVlPFRhc2tXaXRoQ29uc3RyYWludCwg
MzI+IG1fdG9FeGVjdXRlSW5QYXJhbGxlbDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL1ByZWNpc2VBbGxvY2F0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9QcmVjaXNlQWxsb2NhdGlvbi5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1ByZWNpc2VBbGxvY2F0aW9uLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjAwLDExICsyMDAsMTYgQEAgdm9pZCBQcmVjaXNlQWxsb2NhdGlvbjo6c2hyaW5r
KCkKICAgICBtX3dlYWtTZXQuc2hyaW5rKCk7CiB9CiAKLXZvaWQgUHJlY2lzZUFsbG9jYXRpb246
OnZpc2l0V2Vha1NldChTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vdGVtcGxhdGU8dHlwZW5hbWUg
VmlzaXRvcj4KKy8vdm9pZCBQcmVjaXNlQWxsb2NhdGlvbjo6dmlzaXRXZWFrU2V0KFZpc2l0b3Im
IHZpc2l0b3IpCit2b2lkIFByZWNpc2VBbGxvY2F0aW9uOjp2aXNpdFdlYWtTZXQxMDAwKEFic3Ry
YWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7Ci0gICAgbV93ZWFrU2V0LnZpc2l0KHZpc2l0b3Ip
OworICAgIG1fd2Vha1NldC52aXNpdDEodmlzaXRvcik7CiB9CiAKKy8vdGVtcGxhdGUgdm9pZCBQ
cmVjaXNlQWxsb2NhdGlvbjo6dmlzaXRXZWFrU2V0KFNsb3RWaXNpdG9yJik7CisvL3RlbXBsYXRl
IHZvaWQgUHJlY2lzZUFsbG9jYXRpb246OnZpc2l0V2Vha1NldChEZWJ1Z1Nsb3RWaXNpdG9yJik7
CisKIHZvaWQgUHJlY2lzZUFsbG9jYXRpb246OnJlYXBXZWFrU2V0KCkKIHsKICAgICByZXR1cm4g
bV93ZWFrU2V0LnJlYXAoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1ByZWNp
c2VBbGxvY2F0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
UHJlY2lzZUFsbG9jYXRpb24uaAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvUHJlY2lzZUFsbG9jYXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtODIsNyAr
ODIsOCBAQCBwdWJsaWM6CiAgICAgCiAgICAgdm9pZCBzaHJpbmsoKTsKICAgICAKLSAgICB2b2lk
IHZpc2l0V2Vha1NldChTbG90VmlzaXRvciYpOworLy8gICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlz
aXRvcj4gdm9pZCB2aXNpdFdlYWtTZXQoVmlzaXRvciYpOworICAgIHZvaWQgdmlzaXRXZWFrU2V0
MTAwMChBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAgICAgdm9pZCByZWFwV2Vha1NldCgpOwogICAg
IAogICAgIHZvaWQgY2xlYXJOZXdseUFsbG9jYXRlZCgpIHsgbV9pc05ld2x5QWxsb2NhdGVkID0g
ZmFsc2U7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1NpbXBsZU1hcmtpbmdD
b25zdHJhaW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9T
aW1wbGVNYXJraW5nQ29uc3RyYWludC5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL1NpbXBsZU1hcmtpbmdDb25zdHJhaW50LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzAsNyArMzAsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogU2ltcGxlTWFya2luZ0Nv
bnN0cmFpbnQ6OlNpbXBsZU1hcmtpbmdDb25zdHJhaW50KAogICAgIENTdHJpbmcgYWJicmV2aWF0
ZWROYW1lLCBDU3RyaW5nIG5hbWUsCi0gICAgOjpGdW5jdGlvbjx2b2lkKFNsb3RWaXNpdG9yJik+
IGV4ZWN1dGVGdW5jdGlvbiwKKyAgICA6OkZ1bmN0aW9uPHZvaWQoQWJzdHJhY3RTbG90VmlzaXRv
ciYpPiBleGVjdXRlRnVuY3Rpb24sCiAgICAgQ29uc3RyYWludFZvbGF0aWxpdHkgdm9sYXRpbGl0
eSwgQ29uc3RyYWludENvbmN1cnJlbmN5IGNvbmN1cnJlbmN5LAogICAgIENvbnN0cmFpbnRQYXJh
bGxlbGlzbSBwYXJhbGxlbGlzbSkKICAgICA6IE1hcmtpbmdDb25zdHJhaW50KFdURk1vdmUoYWJi
cmV2aWF0ZWROYW1lKSwgV1RGTW92ZShuYW1lKSwgdm9sYXRpbGl0eSwgY29uY3VycmVuY3ksIHBh
cmFsbGVsaXNtKQpAQCAtNDIsNyArNDIsNyBAQCBTaW1wbGVNYXJraW5nQ29uc3RyYWludDo6flNp
bXBsZU1hcmtpbmdDCiB7CiB9CiAKLXZvaWQgU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQ6OmV4ZWN1
dGVJbXBsKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBTaW1wbGVNYXJraW5nQ29uc3RyYWlu
dDo6ZXhlY3V0ZUltcGwoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBtX2V4
ZWN1dGVGdW5jdGlvbih2aXNpdG9yKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL1NpbXBsZU1hcmtpbmdDb25zdHJhaW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQuaAkocmV2aXNpb24gMjcxNDQz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQu
aAkod29ya2luZyBjb3B5KQpAQCAtMzcsMTQgKzM3LDE0IEBAIGNsYXNzIFNpbXBsZU1hcmtpbmdD
b25zdHJhaW50IGZpbmFsIDogcHUKIHB1YmxpYzoKICAgICBKU19FWFBPUlRfUFJJVkFURSBTaW1w
bGVNYXJraW5nQ29uc3RyYWludCgKICAgICAgICAgQ1N0cmluZyBhYmJyZXZpYXRlZE5hbWUsIENT
dHJpbmcgbmFtZSwKLSAgICAgICAgOjpGdW5jdGlvbjx2b2lkKFNsb3RWaXNpdG9yJik+LAorICAg
ICAgICA6OkZ1bmN0aW9uPHZvaWQoQWJzdHJhY3RTbG90VmlzaXRvciYpPiwKICAgICAgICAgQ29u
c3RyYWludFZvbGF0aWxpdHksCiAgICAgICAgIENvbnN0cmFpbnRDb25jdXJyZW5jeSA9IENvbnN0
cmFpbnRDb25jdXJyZW5jeTo6Q29uY3VycmVudCwKICAgICAgICAgQ29uc3RyYWludFBhcmFsbGVs
aXNtID0gQ29uc3RyYWludFBhcmFsbGVsaXNtOjpTZXF1ZW50aWFsKTsKICAgICAKICAgICBTaW1w
bGVNYXJraW5nQ29uc3RyYWludCgKICAgICAgICAgQ1N0cmluZyBhYmJyZXZpYXRlZE5hbWUsIENT
dHJpbmcgbmFtZSwKLSAgICAgICAgOjpGdW5jdGlvbjx2b2lkKFNsb3RWaXNpdG9yJik+IGZ1bmMs
CisgICAgICAgIDo6RnVuY3Rpb248dm9pZChBYnN0cmFjdFNsb3RWaXNpdG9yJik+IGZ1bmMsCiAg
ICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5IHZvbGF0aWxpdHksCiAgICAgICAgIENvbnN0cmFp
bnRQYXJhbGxlbGlzbSBwYXJhbGxlbGlzbSkKICAgICAgICAgOiBTaW1wbGVNYXJraW5nQ29uc3Ry
YWludChhYmJyZXZpYXRlZE5hbWUsIG5hbWUsIFdURk1vdmUoZnVuYyksIHZvbGF0aWxpdHksIENv
bnN0cmFpbnRDb25jdXJyZW5jeTo6Q29uY3VycmVudCwgcGFyYWxsZWxpc20pCkBAIC01NCw5ICs1
NCw5IEBAIHB1YmxpYzoKICAgICBKU19FWFBPUlRfUFJJVkFURSB+U2ltcGxlTWFya2luZ0NvbnN0
cmFpbnQoKSBmaW5hbDsKICAgICAKIHByaXZhdGU6Ci0gICAgdm9pZCBleGVjdXRlSW1wbChTbG90
VmlzaXRvciYpIGZpbmFsOworICAgIHZvaWQgZXhlY3V0ZUltcGwoQWJzdHJhY3RTbG90VmlzaXRv
ciYpIGZpbmFsOwogCi0gICAgOjpGdW5jdGlvbjx2b2lkKFNsb3RWaXNpdG9yJik+IG1fZXhlY3V0
ZUZ1bmN0aW9uOworICAgIDo6RnVuY3Rpb248dm9pZChBYnN0cmFjdFNsb3RWaXNpdG9yJik+IG1f
ZXhlY3V0ZUZ1bmN0aW9uOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuY3BwCShyZXZpc2lvbiAyNzE0NDMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJTbG90
VmlzaXRvci5oIgogCisjaW5jbHVkZSAiQWJzdHJhY3RTbG90VmlzaXRvcklubGluZXMuaCIKICNp
bmNsdWRlICJDb25zZXJ2YXRpdmVSb290cy5oIgogI2luY2x1ZGUgIkdDU2VnbWVudGVkQXJyYXlJ
bmxpbmVzLmgiCiAjaW5jbHVkZSAiSGVhcEFuYWx5emVyLmgiCkBAIC0zNSw3ICszNiw3IEBACiAj
aW5jbHVkZSAiSlNBcnJheS5oIgogI2luY2x1ZGUgIkpTQ2VsbElubGluZXMuaCIKICNpbmNsdWRl
ICJKU1N0cmluZy5oIgotI2luY2x1ZGUgIk1hcmtpbmdDb25zdHJhaW50U29sdmVyLmgiCisvLyNp
bmNsdWRlICJNYXJraW5nQ29uc3RyYWludFNvbHZlci5oIgogI2luY2x1ZGUgIlNsb3RWaXNpdG9y
SW5saW5lcy5oIgogI2luY2x1ZGUgIlN0b3BJZk5lY2Vzc2FyeVRpbWVyLmgiCiAjaW5jbHVkZSAi
Vk0uaCIKQEAgLTc3LDE2ICs3OCwxOCBAQCBzdGF0aWMgdm9pZCB2YWxpZGF0ZShKU0NlbGwqIGNl
bGwpCiAjZW5kaWYKIAogU2xvdFZpc2l0b3I6OlNsb3RWaXNpdG9yKEhlYXAmIGhlYXAsIENTdHJp
bmcgY29kZU5hbWUpCi0gICAgOiBtX2J5dGVzVmlzaXRlZCgwKQotICAgICwgbV92aXNpdENvdW50
KDApCisvLyAgICA6IEJhc2UoVHlwZTo6U2xvdFZpc2l0b3IsIGhlYXAsIGNvZGVOYW1lKQorICAg
IDogQmFzZShoZWFwLCBjb2RlTmFtZSkKKy8vICAgICwgbV9ieXRlc1Zpc2l0ZWQoMCkKKy8vICAg
ICwgbV92aXNpdENvdW50KDApCiAgICAgLCBtX2lzSW5QYXJhbGxlbE1vZGUoZmFsc2UpCi0gICAg
LCBtX21hcmtpbmdWZXJzaW9uKE1hcmtlZFNwYWNlOjppbml0aWFsVmVyc2lvbikKLSAgICAsIG1f
aGVhcChoZWFwKQotICAgICwgbV9jb2RlTmFtZShjb2RlTmFtZSkKLSNpZiBBU1NFUlRfRU5BQkxF
RAotICAgICwgbV9pc0NoZWNraW5nRm9yRGVmYXVsdE1hcmtWaW9sYXRpb24oZmFsc2UpCi0gICAg
LCBtX2lzRHJhaW5pbmcoZmFsc2UpCi0jZW5kaWYKKy8vICAgICwgbV9tYXJraW5nVmVyc2lvbihN
YXJrZWRTcGFjZTo6aW5pdGlhbFZlcnNpb24pCisvLyAgICAsIG1faGVhcChoZWFwKQorLy8gICAg
LCBtX2NvZGVOYW1lKGNvZGVOYW1lKQorLy8jaWYgQVNTRVJUX0VOQUJMRUQKKy8vICAgICwgbV9p
c0NoZWNraW5nRm9yRGVmYXVsdE1hcmtWaW9sYXRpb24oZmFsc2UpCisvLy8vICAgICwgbV9pc0Ry
YWluaW5nKGZhbHNlKQorLy8jZW5kaWYKIHsKIH0KIApAQCAtMTE3LDggKzEyMCw5IEBAIHZvaWQg
U2xvdFZpc2l0b3I6OmRpZFN0YXJ0TWFya2luZygpCiAKIHZvaWQgU2xvdFZpc2l0b3I6OnJlc2V0
KCkKIHsKLSAgICBtX2J5dGVzVmlzaXRlZCA9IDA7Ci0gICAgbV92aXNpdENvdW50ID0gMDsKKy8v
ICAgIG1fYnl0ZXNWaXNpdGVkID0gMDsKKy8vICAgIG1fdmlzaXRDb3VudCA9IDA7CisgICAgQWJz
dHJhY3RTbG90VmlzaXRvcjo6cmVzZXQoKTsKICAgICBtX2hlYXBBbmFseXplciA9IG51bGxwdHI7
CiAgICAgUkVMRUFTRV9BU1NFUlQoIW1fY3VycmVudENlbGwpOwogfQpAQCAtODA3LDEzICs4MTEs
MTMgQEAgTWFya1N0YWNrQXJyYXkmIFNsb3RWaXNpdG9yOjpjb3JyZXNwb25kaQogICAgIHJldHVy
biAqbV9oZWFwLm1fc2hhcmVkTXV0YXRvck1hcmtTdGFjazsKIH0KIAotdm9pZCBTbG90VmlzaXRv
cjo6YWRkUGFyYWxsZWxDb25zdHJhaW50VGFzayhSZWZQdHI8U2hhcmVkVGFzazx2b2lkKFNsb3RW
aXNpdG9yJik+PiB0YXNrKQotewotICAgIFJFTEVBU0VfQVNTRVJUKG1fY3VycmVudFNvbHZlcik7
Ci0gICAgUkVMRUFTRV9BU1NFUlQobV9jdXJyZW50Q29uc3RyYWludCk7Ci0gICAgUkVMRUFTRV9B
U1NFUlQodGFzayk7Ci0gICAgCi0gICAgbV9jdXJyZW50U29sdmVyLT5hZGRQYXJhbGxlbFRhc2so
dGFzaywgKm1fY3VycmVudENvbnN0cmFpbnQpOwotfQorLy92b2lkIFNsb3RWaXNpdG9yOjphZGRQ
YXJhbGxlbENvbnN0cmFpbnRUYXNrKFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoQWJzdHJhY3RTbG90
VmlzaXRvciYpPj4gdGFzaykKKy8veworLy8gICAgUkVMRUFTRV9BU1NFUlQobV9jdXJyZW50U29s
dmVyKTsKKy8vICAgIFJFTEVBU0VfQVNTRVJUKG1fY3VycmVudENvbnN0cmFpbnQpOworLy8gICAg
UkVMRUFTRV9BU1NFUlQodGFzayk7CisvLworLy8gICAgbV9jdXJyZW50U29sdmVyLT5hZGRQYXJh
bGxlbFRhc2sodGFzaywgKm1fY3VycmVudENvbnN0cmFpbnQpOworLy99CiAKIH0gLy8gbmFtZXNw
YWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5oCShy
ZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRv
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw3NCArMjUsMTAxIEBACiAKICNwcmFnbWEgb25jZQog
CisjaW5jbHVkZSAiQWJzdHJhY3RTbG90VmlzaXRvci5oIgogI2luY2x1ZGUgIkhhbmRsZVR5cGVz
LmgiCiAjaW5jbHVkZSAiSXRlcmF0aW9uU3RhdHVzLmgiCi0jaW5jbHVkZSAiTWFya1N0YWNrLmgi
Ci0jaW5jbHVkZSAiVmlzaXRSYWNlS2V5LmgiCisvLyNpbmNsdWRlICJNYXJrU3RhY2suaCIKKy8v
I2luY2x1ZGUgIlZpc2l0UmFjZUtleS5oIgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5j
bHVkZSA8d3RmL01vbm90b25pY1RpbWUuaD4KLSNpbmNsdWRlIDx3dGYvU2hhcmVkVGFzay5oPgot
I2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKy8vI2luY2x1ZGUgPHd0Zi9TaGFyZWRUYXNr
Lmg+CisvLyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBKU0Mgewog
Ci1jbGFzcyBDb25zZXJ2YXRpdmVSb290czsKKy8vY2xhc3MgQ29uc2VydmF0aXZlUm9vdHM7CiBj
bGFzcyBHQ1RocmVhZFNoYXJlZERhdGE7Ci1jbGFzcyBIZWFwOworLy9jbGFzcyBIZWFwOwogY2xh
c3MgSGVhcENlbGw7Ci1jbGFzcyBIZWFwQW5hbHl6ZXI7CisvL2NsYXNzIEhlYXBBbmFseXplcjsK
IGNsYXNzIE1hcmtlZEJsb2NrOwotY2xhc3MgTWFya2luZ0NvbnN0cmFpbnQ7Ci1jbGFzcyBNYXJr
aW5nQ29uc3RyYWludFNvbHZlcjsKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNsYXNzIFdlYWs7Ci10
ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBUcmFpdHM+IGNsYXNzIFdyaXRlQmFycmllckJh
c2U7CisvL2NsYXNzIE1hcmtpbmdDb25zdHJhaW50OworLy9jbGFzcyBNYXJraW5nQ29uc3RyYWlu
dFNvbHZlcjsKKy8vdGVtcGxhdGU8dHlwZW5hbWUgVD4gY2xhc3MgV2VhazsKKy8vdGVtcGxhdGU8
dHlwZW5hbWUgVCwgdHlwZW5hbWUgVHJhaXRzPiBjbGFzcyBXcml0ZUJhcnJpZXJCYXNlOwogCi10
eXBlZGVmIHVpbnQzMl90IEhlYXBWZXJzaW9uOworLy90eXBlZGVmIHVpbnQzMl90IEhlYXBWZXJz
aW9uOwogCi1jbGFzcyBTbG90VmlzaXRvciB7CitjbGFzcyBTbG90VmlzaXRvciBmaW5hbCA6IHB1
YmxpYyBBYnN0cmFjdFNsb3RWaXNpdG9yIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShTbG90
VmlzaXRvcik7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiAKKyAgICB1c2luZyBCYXNl
ID0gQWJzdHJhY3RTbG90VmlzaXRvcjsKKwogICAgIGZyaWVuZCBjbGFzcyBTZXRDdXJyZW50Q2Vs
bFNjb3BlOwogICAgIGZyaWVuZCBjbGFzcyBIZWFwOwogCiBwdWJsaWM6Ci0gICAgZW51bSBSb290
TWFya1JlYXNvbiB7Ci0gICAgICAgIE5vbmUsCi0gICAgICAgIENvbnNlcnZhdGl2ZVNjYW4sCi0g
ICAgICAgIFN0cm9uZ1JlZmVyZW5jZXMsCi0gICAgICAgIFByb3RlY3RlZFZhbHVlcywKLSAgICAg
ICAgTWFya0xpc3RTZXQsCi0gICAgICAgIFZNRXhjZXB0aW9ucywKLSAgICAgICAgU3Ryb25nSGFu
ZGxlcywKLSAgICAgICAgRGVidWdnZXIsCi0gICAgICAgIEpJVFN0dWJSb3V0aW5lcywKLSAgICAg
ICAgV2Vha1NldHMsCi0gICAgICAgIE91dHB1dCwKLSAgICAgICAgREZHV29ya0xpc3RzLAotICAg
ICAgICBDb2RlQmxvY2tzLAotICAgICAgICBET01HQ091dHB1dCwKKyAgICBjbGFzcyBEZWZhdWx0
TWFya2luZ1Zpb2xhdGlvbkFzc2VydGlvblNjb3BlIHsKKyAgICBwdWJsaWM6CisjaWYgQVNTRVJU
X0VOQUJMRUQKKyAgICAgICAgRGVmYXVsdE1hcmtpbmdWaW9sYXRpb25Bc3NlcnRpb25TY29wZShT
bG90VmlzaXRvciYgdmlzaXRvcikKKyAgICAgICAgICAgIDogbV92aXNpdG9yKHZpc2l0b3IpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIG1fd2FzQ2hlY2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlv
biA9IG1fdmlzaXRvci5tX2lzQ2hlY2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlvbjsKKyAgICAg
ICAgICAgIG1fdmlzaXRvci5tX2lzQ2hlY2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlvbiA9IGZh
bHNlOworICAgICAgICB9CisKKyAgICAgICAgfkRlZmF1bHRNYXJraW5nVmlvbGF0aW9uQXNzZXJ0
aW9uU2NvcGUoKQorICAgICAgICB7CisgICAgICAgICAgICBtX3Zpc2l0b3IubV9pc0NoZWNraW5n
Rm9yRGVmYXVsdE1hcmtWaW9sYXRpb24gPSBtX3dhc0NoZWNraW5nRm9yRGVmYXVsdE1hcmtWaW9s
YXRpb247CisgICAgICAgIH0KKworICAgIHByaXZhdGU6CisgICAgICAgIFNsb3RWaXNpdG9yJiBt
X3Zpc2l0b3I7CisgICAgICAgIGJvb2wgbV93YXNDaGVja2luZ0ZvckRlZmF1bHRNYXJrVmlvbGF0
aW9uOworI2Vsc2UKKyAgICAgICAgRGVmYXVsdE1hcmtpbmdWaW9sYXRpb25Bc3NlcnRpb25TY29w
ZShTbG90VmlzaXRvciYpIHsgfQorI2VuZGlmCiAgICAgfTsKIAorLy8gICAgZW51bSBSb290TWFy
a1JlYXNvbiB7CisvLyAgICAgICAgTm9uZSwKKy8vICAgICAgICBDb25zZXJ2YXRpdmVTY2FuLAor
Ly8gICAgICAgIFN0cm9uZ1JlZmVyZW5jZXMsCisvLyAgICAgICAgUHJvdGVjdGVkVmFsdWVzLAor
Ly8gICAgICAgIE1hcmtMaXN0U2V0LAorLy8gICAgICAgIFZNRXhjZXB0aW9ucywKKy8vICAgICAg
ICBTdHJvbmdIYW5kbGVzLAorLy8gICAgICAgIERlYnVnZ2VyLAorLy8gICAgICAgIEpJVFN0dWJS
b3V0aW5lcywKKy8vICAgICAgICBXZWFrU2V0cywKKy8vICAgICAgICBPdXRwdXQsCisvLyAgICAg
ICAgREZHV29ya0xpc3RzLAorLy8gICAgICAgIENvZGVCbG9ja3MsCisvLyAgICAgICAgRE9NR0NP
dXRwdXQsCisvLyAgICB9OworCiAgICAgU2xvdFZpc2l0b3IoSGVhcCYsIENTdHJpbmcgY29kZU5h
bWUpOwogICAgIH5TbG90VmlzaXRvcigpOwogCi0gICAgTWFya1N0YWNrQXJyYXkmIGNvbGxlY3Rv
ck1hcmtTdGFjaygpIHsgcmV0dXJuIG1fY29sbGVjdG9yU3RhY2s7IH0KLSAgICBNYXJrU3RhY2tB
cnJheSYgbXV0YXRvck1hcmtTdGFjaygpIHsgcmV0dXJuIG1fbXV0YXRvclN0YWNrOyB9Ci0gICAg
Y29uc3QgTWFya1N0YWNrQXJyYXkmIGNvbGxlY3Rvck1hcmtTdGFjaygpIGNvbnN0IHsgcmV0dXJu
IG1fY29sbGVjdG9yU3RhY2s7IH0KLSAgICBjb25zdCBNYXJrU3RhY2tBcnJheSYgbXV0YXRvck1h
cmtTdGFjaygpIGNvbnN0IHsgcmV0dXJuIG1fbXV0YXRvclN0YWNrOyB9Ci0gICAgCi0gICAgVk0m
IHZtKCk7Ci0gICAgY29uc3QgVk0mIHZtKCkgY29uc3Q7Ci0gICAgSGVhcCogaGVhcCgpIGNvbnN0
OwotCi0gICAgdm9pZCBhcHBlbmQoY29uc3QgQ29uc2VydmF0aXZlUm9vdHMmKTsKLSAgICAKLSAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBUcmFpdHM+IHZvaWQgYXBwZW5kKGNvbnN0
IFdyaXRlQmFycmllckJhc2U8VCwgVHJhaXRzPiYpOwotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQs
IHR5cGVuYW1lIFRyYWl0cz4gdm9pZCBhcHBlbmRIaWRkZW4oY29uc3QgV3JpdGVCYXJyaWVyQmFz
ZTxULCBUcmFpdHM+Jik7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgSXRlcmF0b3I+IHZvaWQgYXBw
ZW5kKEl0ZXJhdG9yIGJlZ2luICwgSXRlcmF0b3IgZW5kKTsKLSAgICB2b2lkIGFwcGVuZFZhbHVl
cyhjb25zdCBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24sIFJhd1ZhbHVlVHJhaXRzPFVua25vd24+
PiosIHNpemVfdCBjb3VudCk7Ci0gICAgdm9pZCBhcHBlbmRWYWx1ZXNIaWRkZW4oY29uc3QgV3Jp
dGVCYXJyaWVyQmFzZTxVbmtub3duLCBSYXdWYWx1ZVRyYWl0czxVbmtub3duPj4qLCBzaXplX3Qg
Y291bnQpOworLy8gICAgTWFya1N0YWNrQXJyYXkmIGNvbGxlY3Rvck1hcmtTdGFjaygpIHsgcmV0
dXJuIG1fY29sbGVjdG9yU3RhY2s7IH0KKy8vICAgIE1hcmtTdGFja0FycmF5JiBtdXRhdG9yTWFy
a1N0YWNrKCkgeyByZXR1cm4gbV9tdXRhdG9yU3RhY2s7IH0KKy8vICAgIGNvbnN0IE1hcmtTdGFj
a0FycmF5JiBjb2xsZWN0b3JNYXJrU3RhY2soKSBjb25zdCB7IHJldHVybiBtX2NvbGxlY3RvclN0
YWNrOyB9CisvLyAgICBjb25zdCBNYXJrU3RhY2tBcnJheSYgbXV0YXRvck1hcmtTdGFjaygpIGNv
bnN0IHsgcmV0dXJuIG1fbXV0YXRvclN0YWNrOyB9CisgICAgCisvLyAgICBWTSYgdm0oKTsKKy8v
ICAgIGNvbnN0IFZNJiB2bSgpIGNvbnN0OworLy8gICAgSGVhcCogaGVhcCgpIGNvbnN0OworCisg
ICAgdm9pZCBhcHBlbmQoY29uc3QgQ29uc2VydmF0aXZlUm9vdHMmKSBmaW5hbDsKKworICAgIHVz
aW5nIEJhc2U6OmFwcGVuZDsKKy8vICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFRy
YWl0cz4gdm9pZCBhcHBlbmQoY29uc3QgV3JpdGVCYXJyaWVyQmFzZTxULCBUcmFpdHM+Jik7Cisv
LyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBUcmFpdHM+IHZvaWQgYXBwZW5kSGlk
ZGVuKGNvbnN0IFdyaXRlQmFycmllckJhc2U8VCwgVHJhaXRzPiYpOworLy8gICAgdGVtcGxhdGU8
dHlwZW5hbWUgSXRlcmF0b3I+IHZvaWQgYXBwZW5kKEl0ZXJhdG9yIGJlZ2luICwgSXRlcmF0b3Ig
ZW5kKTsKKy8vICAgIHZvaWQgYXBwZW5kVmFsdWVzKGNvbnN0IFdyaXRlQmFycmllckJhc2U8VW5r
bm93biwgUmF3VmFsdWVUcmFpdHM8VW5rbm93bj4+Kiwgc2l6ZV90IGNvdW50KTsKKy8vICAgIHZv
aWQgYXBwZW5kVmFsdWVzSGlkZGVuKGNvbnN0IFdyaXRlQmFycmllckJhc2U8VW5rbm93biwgUmF3
VmFsdWVUcmFpdHM8VW5rbm93bj4+Kiwgc2l6ZV90IGNvdW50KTsKICAgICAKICAgICAvLyBUaGVz
ZSBkb24ndCByZXF1aXJlIHlvdSB0byBwcm92ZSB0aGF0IHlvdSBoYXZlIGEgV3JpdGVCYXJyaWVy
PD4uIFRoYXQgbWFrZXMgc2Vuc2UKICAgICAvLyBmb3I6CkBAIC0xMDMsMTkgKzEzMCwxOSBAQCBw
dWJsaWM6CiAgICAgLy8KICAgICAvLyBJZiB5b3UgYXJlIG5vdCBhIHJvb3QgYW5kIHlvdSBkb24n
dCBrbm93IHdoYXQga2luZCBvZiBiYXJyaWVyIHlvdSBoYXZlLCB0aGVuIHlvdQogICAgIC8vIHNo
b3VsZG4ndCBjYWxsIHRoZXNlIG1ldGhvZHMuCi0gICAgdm9pZCBhcHBlbmRVbmJhcnJpZXJlZChK
U1ZhbHVlKTsKKyAgICB2b2lkIGFwcGVuZFVuYmFycmllcmVkKEpTVmFsdWUpIGZpbmFsOwogICAg
IHZvaWQgYXBwZW5kVW5iYXJyaWVyZWQoSlNWYWx1ZSosIHNpemVfdCk7Ci0gICAgdm9pZCBhcHBl
bmRVbmJhcnJpZXJlZChKU0NlbGwqKTsKKyAgICB2b2lkIGFwcGVuZFVuYmFycmllcmVkKEpTQ2Vs
bCopIGZpbmFsOwogICAgIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgdm9pZCBhcHBl
bmQoY29uc3QgV2VhazxUPiYgd2Vhayk7CisvLyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorLy8g
ICAgdm9pZCBhcHBlbmQoY29uc3QgV2VhazxUPiYgd2Vhayk7CiAgICAgCi0gICAgdm9pZCBhcHBl
bmRIaWRkZW5VbmJhcnJpZXJlZChKU1ZhbHVlKTsKLSAgICB2b2lkIGFwcGVuZEhpZGRlblVuYmFy
cmllcmVkKEpTQ2VsbCopOworICAgIHZvaWQgYXBwZW5kSGlkZGVuVW5iYXJyaWVyZWQoSlNWYWx1
ZSkgZmluYWw7CisgICAgdm9pZCBhcHBlbmRIaWRkZW5VbmJhcnJpZXJlZChKU0NlbGwqKSBmaW5h
bDsKIAotICAgIGJvb2wgYWRkT3BhcXVlUm9vdCh2b2lkKik7IC8vIFJldHVybnMgdHJ1ZSBpZiB0
aGUgcm9vdCB3YXMgbmV3LgorICAgIGJvb2wgYWRkT3BhcXVlUm9vdCh2b2lkKikgZmluYWw7IC8v
IFJldHVybnMgdHJ1ZSBpZiB0aGUgcm9vdCB3YXMgbmV3LgogICAgIAotICAgIGJvb2wgY29udGFp
bnNPcGFxdWVSb290KHZvaWQqKSBjb25zdDsKKyAgICBib29sIGNvbnRhaW5zT3BhcXVlUm9vdCh2
b2lkKikgY29uc3QgZmluYWw7CiAKICAgICBib29sIGlzRW1wdHkoKSB7IHJldHVybiBtX2NvbGxl
Y3RvclN0YWNrLmlzRW1wdHkoKSAmJiBtX211dGF0b3JTdGFjay5pc0VtcHR5KCk7IH0KIApAQCAt
MTI1LDEwICsxNTIsMTAgQEAgcHVibGljOgogICAgIHZvaWQgcmVzZXQoKTsKICAgICB2b2lkIGNs
ZWFyTWFya1N0YWNrcygpOwogCi0gICAgc2l6ZV90IGJ5dGVzVmlzaXRlZCgpIGNvbnN0IHsgcmV0
dXJuIG1fYnl0ZXNWaXNpdGVkOyB9Ci0gICAgc2l6ZV90IHZpc2l0Q291bnQoKSBjb25zdCB7IHJl
dHVybiBtX3Zpc2l0Q291bnQ7IH0KLSAgICAKLSAgICB2b2lkIGFkZFRvVmlzaXRDb3VudChzaXpl
X3QgdmFsdWUpIHsgbV92aXNpdENvdW50ICs9IHZhbHVlOyB9CisvLyAgICBzaXplX3QgYnl0ZXNW
aXNpdGVkKCkgY29uc3QgeyByZXR1cm4gbV9ieXRlc1Zpc2l0ZWQ7IH0KKy8vICAgIHNpemVfdCB2
aXNpdENvdW50KCkgY29uc3QgeyByZXR1cm4gbV92aXNpdENvdW50OyB9CisvLworLy8gICAgdm9p
ZCBhZGRUb1Zpc2l0Q291bnQoc2l6ZV90IHZhbHVlKSB7IG1fdmlzaXRDb3VudCArPSB2YWx1ZTsg
fQogCiAgICAgdm9pZCBkb25hdGUoKTsKICAgICB2b2lkIGRyYWluKE1vbm90b25pY1RpbWUgdGlt
ZW91dCA9IE1vbm90b25pY1RpbWU6OmluZmluaXR5KCkpOwpAQCAtMTUxLDI0ICsxNzgsMjQgQEAg
cHVibGljOgogICAgIAogICAgIC8vIFRoaXMgaW5mb3JtcyB0aGUgR0MgYWJvdXQgYXV4aWxpYXJ5
IG9mIHNvbWUgc2l6ZSB0aGF0IHdlIGFyZSBrZWVwaW5nIGFsaXZlLiBJZiB5b3UgZG9uJ3QgZG8K
ICAgICAvLyB0aGlzIHRoZW4gdGhlIHNwYWNlIHdpbGwgYmUgZnJlZWQgYXQgZW5kIG9mIEdDLgot
ICAgIHZvaWQgbWFya0F1eGlsaWFyeShjb25zdCB2b2lkKiBiYXNlKTsKKyAgICB2b2lkIG1hcmtB
dXhpbGlhcnkoY29uc3Qgdm9pZCogYmFzZSkgZmluYWw7CiAKLSAgICB2b2lkIHJlcG9ydEV4dHJh
TWVtb3J5VmlzaXRlZChzaXplX3QpOworICAgIHZvaWQgcmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVk
KHNpemVfdCkgZmluYWw7CiAjaWYgRU5BQkxFKFJFU09VUkNFX1VTQUdFKQotICAgIHZvaWQgcmVw
b3J0RXh0ZXJuYWxNZW1vcnlWaXNpdGVkKHNpemVfdCk7CisgICAgdm9pZCByZXBvcnRFeHRlcm5h
bE1lbW9yeVZpc2l0ZWQoc2l6ZV90KSBmaW5hbDsKICNlbmRpZgogICAgIAotICAgIHZvaWQgZHVt
cChQcmludFN0cmVhbSYpIGNvbnN0OworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0
IGZpbmFsOwogCi0gICAgYm9vbCBpc0FuYWx5emluZ0hlYXAoKSBjb25zdCB7IHJldHVybiAhIW1f
aGVhcEFuYWx5emVyOyB9Ci0gICAgSGVhcEFuYWx5emVyKiBoZWFwQW5hbHl6ZXIoKSBjb25zdCB7
IHJldHVybiBtX2hlYXBBbmFseXplcjsgfQorLy8gICAgYm9vbCBpc0FuYWx5emluZ0hlYXAoKSBj
b25zdCB7IHJldHVybiAhIW1faGVhcEFuYWx5emVyOyB9CisvLyAgICBIZWFwQW5hbHl6ZXIqIGhl
YXBBbmFseXplcigpIGNvbnN0IHsgcmV0dXJuIG1faGVhcEFuYWx5emVyOyB9CiAgICAgCi0gICAg
Um9vdE1hcmtSZWFzb24gcm9vdE1hcmtSZWFzb24oKSBjb25zdCB7IHJldHVybiBtX3Jvb3RNYXJr
UmVhc29uOyB9Ci0gICAgdm9pZCBzZXRSb290TWFya1JlYXNvbihSb290TWFya1JlYXNvbiByZWFz
b24pIHsgbV9yb290TWFya1JlYXNvbiA9IHJlYXNvbjsgfQorLy8gICAgUm9vdE1hcmtSZWFzb24g
cm9vdE1hcmtSZWFzb24oKSBjb25zdCB7IHJldHVybiBtX3Jvb3RNYXJrUmVhc29uOyB9CisvLyAg
ICB2b2lkIHNldFJvb3RNYXJrUmVhc29uKFJvb3RNYXJrUmVhc29uIHJlYXNvbikgeyBtX3Jvb3RN
YXJrUmVhc29uID0gcmVhc29uOyB9CiAKLSAgICBIZWFwVmVyc2lvbiBtYXJraW5nVmVyc2lvbigp
IGNvbnN0IHsgcmV0dXJuIG1fbWFya2luZ1ZlcnNpb247IH0KKy8vICAgIEhlYXBWZXJzaW9uIG1h
cmtpbmdWZXJzaW9uKCkgY29uc3QgeyByZXR1cm4gbV9tYXJraW5nVmVyc2lvbjsgfQogCi0gICAg
Ym9vbCBtdXRhdG9ySXNTdG9wcGVkKCkgY29uc3QgeyByZXR1cm4gbV9tdXRhdG9ySXNTdG9wcGVk
OyB9CisgICAgYm9vbCBtdXRhdG9ySXNTdG9wcGVkKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9t
dXRhdG9ySXNTdG9wcGVkOyB9CiAgICAgCiAgICAgTG9jayYgcmlnaHRUb1J1bigpIHsgcmV0dXJu
IG1fcmlnaHRUb1J1bjsgfQogICAgIApAQCAtMTgwLDEwICsyMDcsMTAgQEAgcHVibGljOgogICAg
IAogICAgIHZvaWQgb3B0aW1pemVGb3JTdG9wcGVkTXV0YXRvcigpOwogICAgIAotICAgIHZvaWQg
ZGlkUmFjZShjb25zdCBWaXNpdFJhY2VLZXkmKTsKKyAgICB2b2lkIGRpZFJhY2UoY29uc3QgVmlz
aXRSYWNlS2V5JikgZmluYWw7CiAgICAgdm9pZCBkaWRSYWNlKEpTQ2VsbCogY2VsbCwgY29uc3Qg
Y2hhciogcmVhc29uKSB7IGRpZFJhY2UoVmlzaXRSYWNlS2V5KGNlbGwsIHJlYXNvbikpOyB9CiAg
ICAgCi0gICAgdm9pZCB2aXNpdEFzQ29uc3RyYWludChjb25zdCBKU0NlbGwqKTsKKyAgICB2b2lk
IHZpc2l0QXNDb25zdHJhaW50KGNvbnN0IEpTQ2VsbCopIGZpbmFsOwogICAgIAogICAgIGJvb2wg
ZGlkUmVhY2hUZXJtaW5hdGlvbigpOwogICAgIApAQCAtMTkzLDExICsyMjAsMTEgQEAgcHVibGlj
OgogICAgIAogICAgIGNvbnN0IGNoYXIqIGNvZGVOYW1lKCkgY29uc3QgeyByZXR1cm4gbV9jb2Rl
TmFtZS5kYXRhKCk7IH0KICAgICAKLSAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGFkZFBhcmFs
bGVsQ29uc3RyYWludFRhc2soUmVmUHRyPFNoYXJlZFRhc2s8dm9pZChTbG90VmlzaXRvciYpPj4p
OworLy8gICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBhZGRQYXJhbGxlbENvbnN0cmFpbnRUYXNr
KFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoQWJzdHJhY3RTbG90VmlzaXRvciYpPj4pOwogCiBwcml2
YXRlOgogICAgIGZyaWVuZCBjbGFzcyBQYXJhbGxlbE1vZGVFbmFibGVyOwotICAgIGZyaWVuZCBj
bGFzcyBNYXJraW5nQ29uc3RyYWludFNvbHZlcjsKKy8vICAgIGZyaWVuZCBjbGFzcyBNYXJraW5n
Q29uc3RyYWludFNvbHZlcjsKICAgICAKICAgICB2b2lkIGFwcGVuZEpTQ2VsbE9yQXV4aWxpYXJ5
KEhlYXBDZWxsKik7CiAKQEAgLTIzMiwzOSArMjU5LDM5IEBAIHByaXZhdGU6CiAKICAgICBNYXJr
U3RhY2tBcnJheSYgY29ycmVzcG9uZGluZ0dsb2JhbFN0YWNrKE1hcmtTdGFja0FycmF5Jik7CiAK
LSAgICBNYXJrU3RhY2tBcnJheSBtX2NvbGxlY3RvclN0YWNrOwotICAgIE1hcmtTdGFja0FycmF5
IG1fbXV0YXRvclN0YWNrOwotICAgIAotICAgIHNpemVfdCBtX2J5dGVzVmlzaXRlZDsKLSAgICBz
aXplX3QgbV92aXNpdENvdW50OworLy8gICAgTWFya1N0YWNrQXJyYXkgbV9jb2xsZWN0b3JTdGFj
azsKKy8vICAgIE1hcmtTdGFja0FycmF5IG1fbXV0YXRvclN0YWNrOworLy8KKy8vICAgIHNpemVf
dCBtX2J5dGVzVmlzaXRlZDsKKy8vICAgIHNpemVfdCBtX3Zpc2l0Q291bnQ7CiAgICAgc2l6ZV90
IG1fbm9uQ2VsbFZpc2l0Q291bnQgeyAwIH07IC8vIFVzZWQgZm9yIGluY3JlbWVudGFsIGRyYWlu
aW5nLCBpZ25vcmVkIG90aGVyd2lzZS4KICAgICBDaGVja2VkU2l6ZSBtX2V4dHJhTWVtb3J5U2l6
ZSB7IDAgfTsKICAgICBib29sIG1faXNJblBhcmFsbGVsTW9kZTsKICAgICBib29sIG1faWdub3Jl
TmV3T3BhcXVlUm9vdHMgeyBmYWxzZSB9OyAvLyBVc2VmdWwgYXMgYSBkZWJ1Z2dpbmcgbW9kZS4K
IAotICAgIEhlYXBWZXJzaW9uIG1fbWFya2luZ1ZlcnNpb247Ci0gICAgCi0gICAgSGVhcCYgbV9o
ZWFwOworLy8gICAgSGVhcFZlcnNpb24gbV9tYXJraW5nVmVyc2lvbjsKKy8vCisvLyAgICBIZWFw
JiBtX2hlYXA7CiAKLSAgICBIZWFwQW5hbHl6ZXIqIG1faGVhcEFuYWx5emVyIHsgbnVsbHB0ciB9
OworLy8gICAgSGVhcEFuYWx5emVyKiBtX2hlYXBBbmFseXplciB7IG51bGxwdHIgfTsKICAgICBK
U0NlbGwqIG1fY3VycmVudENlbGwgeyBudWxscHRyIH07Ci0gICAgUm9vdE1hcmtSZWFzb24gbV9y
b290TWFya1JlYXNvbiB7IFJvb3RNYXJrUmVhc29uOjpOb25lIH07CisvLyAgICBSb290TWFya1Jl
YXNvbiBtX3Jvb3RNYXJrUmVhc29uIHsgUm9vdE1hcmtSZWFzb246Ok5vbmUgfTsKICAgICBib29s
IG1faXNGaXJzdFZpc2l0IHsgZmFsc2UgfTsKICAgICBib29sIG1fbXV0YXRvcklzU3RvcHBlZCB7
IGZhbHNlIH07CiAgICAgYm9vbCBtX2Nhbk9wdGltaXplRm9yU3RvcHBlZE11dGF0b3IgeyBmYWxz
ZSB9OwogICAgIExvY2sgbV9yaWdodFRvUnVuOwogICAgIAotICAgIENTdHJpbmcgbV9jb2RlTmFt
ZTsKKy8vICAgIENTdHJpbmcgbV9jb2RlTmFtZTsKICAgICAKLSAgICBNYXJraW5nQ29uc3RyYWlu
dCogbV9jdXJyZW50Q29uc3RyYWludCB7IG51bGxwdHIgfTsKLSAgICBNYXJraW5nQ29uc3RyYWlu
dFNvbHZlciogbV9jdXJyZW50U29sdmVyIHsgbnVsbHB0ciB9OworLy8gICAgTWFya2luZ0NvbnN0
cmFpbnQqIG1fY3VycmVudENvbnN0cmFpbnQgeyBudWxscHRyIH07CisvLyAgICBNYXJraW5nQ29u
c3RyYWludFNvbHZlciogbV9jdXJyZW50U29sdmVyIHsgbnVsbHB0ciB9OwogICAgIAogICAgIC8v
IFB1dCBwYWRkaW5nIGhlcmUgdG8gbWl0aWdhdGUgZmFsc2Ugc2hhcmluZyBiZXR3ZWVuIG11bHRp
cGxlIFNsb3RWaXNpdG9ycy4KICAgICBjaGFyIHBhZGRpbmdbNjRdOwotcHVibGljOgorLy9wdWJs
aWM6CiAjaWYgQVNTRVJUX0VOQUJMRUQKLSAgICBib29sIG1faXNDaGVja2luZ0ZvckRlZmF1bHRN
YXJrVmlvbGF0aW9uOwotICAgIGJvb2wgbV9pc0RyYWluaW5nOworICAgIGJvb2wgbV9pc0NoZWNr
aW5nRm9yRGVmYXVsdE1hcmtWaW9sYXRpb24geyBmYWxzZSB9OworLy8gICAgYm9vbCBtX2lzRHJh
aW5pbmc7CiAjZW5kaWYKIH07CiAKQEAgLTI4NywyMyArMzE0LDIzIEBAIHByaXZhdGU6CiAgICAg
U2xvdFZpc2l0b3ImIG1fc3RhY2s7CiB9OwogCi1jbGFzcyBTZXRSb290TWFya1JlYXNvblNjb3Bl
IHsKLXB1YmxpYzoKLSAgICBTZXRSb290TWFya1JlYXNvblNjb3BlKFNsb3RWaXNpdG9yJiB2aXNp
dG9yLCBTbG90VmlzaXRvcjo6Um9vdE1hcmtSZWFzb24gcmVhc29uKQotICAgICAgICA6IG1fdmlz
aXRvcih2aXNpdG9yKQotICAgICAgICAsIG1fcHJldmlvdXNSZWFzb24odmlzaXRvci5yb290TWFy
a1JlYXNvbigpKQotICAgIHsKLSAgICAgICAgbV92aXNpdG9yLnNldFJvb3RNYXJrUmVhc29uKHJl
YXNvbik7Ci0gICAgfQotCi0gICAgflNldFJvb3RNYXJrUmVhc29uU2NvcGUoKQotICAgIHsKLSAg
ICAgICAgbV92aXNpdG9yLnNldFJvb3RNYXJrUmVhc29uKG1fcHJldmlvdXNSZWFzb24pOwotICAg
IH0KLQotcHJpdmF0ZToKLSAgICBTbG90VmlzaXRvciYgbV92aXNpdG9yOwotICAgIFNsb3RWaXNp
dG9yOjpSb290TWFya1JlYXNvbiBtX3ByZXZpb3VzUmVhc29uOwotfTsKLQorLy9jbGFzcyBTZXRS
b290TWFya1JlYXNvblNjb3BlIHsKKy8vcHVibGljOgorLy8gICAgU2V0Um9vdE1hcmtSZWFzb25T
Y29wZShTbG90VmlzaXRvciYgdmlzaXRvciwgU2xvdFZpc2l0b3I6OlJvb3RNYXJrUmVhc29uIHJl
YXNvbikKKy8vICAgICAgICA6IG1fdmlzaXRvcih2aXNpdG9yKQorLy8gICAgICAgICwgbV9wcmV2
aW91c1JlYXNvbih2aXNpdG9yLnJvb3RNYXJrUmVhc29uKCkpCisvLyAgICB7CisvLyAgICAgICAg
bV92aXNpdG9yLnNldFJvb3RNYXJrUmVhc29uKHJlYXNvbik7CisvLyAgICB9CisvLworLy8gICAg
flNldFJvb3RNYXJrUmVhc29uU2NvcGUoKQorLy8gICAgeworLy8gICAgICAgIG1fdmlzaXRvci5z
ZXRSb290TWFya1JlYXNvbihtX3ByZXZpb3VzUmVhc29uKTsKKy8vICAgIH0KKy8vCisvL3ByaXZh
dGU6CisvLyAgICBTbG90VmlzaXRvciYgbV92aXNpdG9yOworLy8gICAgU2xvdFZpc2l0b3I6OlJv
b3RNYXJrUmVhc29uIG1fcHJldmlvdXNSZWFzb247CisvL307CisvLwogfSAvLyBuYW1lc3BhY2Ug
SlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvcklubGluZXMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvcklu
bGluZXMuaAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
U2xvdFZpc2l0b3JJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDkgKzI1LDEwIEBACiAK
ICNwcmFnbWEgb25jZQogCisjaW5jbHVkZSAiQWJzdHJhY3RTbG90VmlzaXRvcklubGluZXMuaCIK
ICNpbmNsdWRlICJTbG90VmlzaXRvci5oIgotI2luY2x1ZGUgIldlYWsuaCIKLSNpbmNsdWRlICJX
ZWFrSW5saW5lcy5oIgorLy8jaW5jbHVkZSAiV2Vhay5oIgorLy8jaW5jbHVkZSAiV2Vha0lubGlu
ZXMuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAgLTk3LDQyICs5OCw0MiBAQCBBTFdBWVNfSU5M
SU5FIHZvaWQgU2xvdFZpc2l0b3I6OmFwcGVuZEhpCiAgICAgYXBwZW5kSGlkZGVuU2xvdyhjZWxs
LCBkZXBlbmRlbmN5KTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLUFMV0FZU19JTkxJTkUg
dm9pZCBTbG90VmlzaXRvcjo6YXBwZW5kKGNvbnN0IFdlYWs8VD4mIHdlYWspCi17Ci0gICAgYXBw
ZW5kVW5iYXJyaWVyZWQod2Vhay5nZXQoKSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5
cGVuYW1lIFRyYWl0cz4KLUFMV0FZU19JTkxJTkUgdm9pZCBTbG90VmlzaXRvcjo6YXBwZW5kKGNv
bnN0IFdyaXRlQmFycmllckJhc2U8VCwgVHJhaXRzPiYgc2xvdCkKLXsKLSAgICBhcHBlbmRVbmJh
cnJpZXJlZChzbG90LmdldCgpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUg
VHJhaXRzPgotQUxXQVlTX0lOTElORSB2b2lkIFNsb3RWaXNpdG9yOjphcHBlbmRIaWRkZW4oY29u
c3QgV3JpdGVCYXJyaWVyQmFzZTxULCBUcmFpdHM+JiBzbG90KQotewotICAgIGFwcGVuZEhpZGRl
blVuYmFycmllcmVkKHNsb3QuZ2V0KCkpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBJdGVyYXRv
cj4KLUFMV0FZU19JTkxJTkUgdm9pZCBTbG90VmlzaXRvcjo6YXBwZW5kKEl0ZXJhdG9yIGJlZ2lu
LCBJdGVyYXRvciBlbmQpCi17Ci0gICAgZm9yIChhdXRvIGl0ID0gYmVnaW47IGl0ICE9IGVuZDsg
KytpdCkKLSAgICAgICAgYXBwZW5kKCppdCk7Ci19Ci0KLUFMV0FZU19JTkxJTkUgdm9pZCBTbG90
VmlzaXRvcjo6YXBwZW5kVmFsdWVzKGNvbnN0IFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4qIGJh
cnJpZXJzLCBzaXplX3QgY291bnQpCi17Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3Vu
dDsgKytpKQotICAgICAgICBhcHBlbmQoYmFycmllcnNbaV0pOwotfQotCi1BTFdBWVNfSU5MSU5F
IHZvaWQgU2xvdFZpc2l0b3I6OmFwcGVuZFZhbHVlc0hpZGRlbihjb25zdCBXcml0ZUJhcnJpZXJC
YXNlPFVua25vd24+KiBiYXJyaWVycywgc2l6ZV90IGNvdW50KQotewotICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgY291bnQ7ICsraSkKLSAgICAgICAgYXBwZW5kSGlkZGVuKGJhcnJpZXJzW2ld
KTsKLX0KKy8vdGVtcGxhdGU8dHlwZW5hbWUgVD4KKy8vQUxXQVlTX0lOTElORSB2b2lkIFNsb3RW
aXNpdG9yOjphcHBlbmQoY29uc3QgV2VhazxUPiYgd2VhaykKKy8veworLy8gICAgYXBwZW5kVW5i
YXJyaWVyZWQod2Vhay5nZXQoKSk7CisvL30KKy8vCisvL3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5
cGVuYW1lIFRyYWl0cz4KKy8vQUxXQVlTX0lOTElORSB2b2lkIFNsb3RWaXNpdG9yOjphcHBlbmQo
Y29uc3QgV3JpdGVCYXJyaWVyQmFzZTxULCBUcmFpdHM+JiBzbG90KQorLy97CisvLyAgICBhcHBl
bmRVbmJhcnJpZXJlZChzbG90LmdldCgpKTsKKy8vfQorLy8KKy8vdGVtcGxhdGU8dHlwZW5hbWUg
VCwgdHlwZW5hbWUgVHJhaXRzPgorLy9BTFdBWVNfSU5MSU5FIHZvaWQgU2xvdFZpc2l0b3I6OmFw
cGVuZEhpZGRlbihjb25zdCBXcml0ZUJhcnJpZXJCYXNlPFQsIFRyYWl0cz4mIHNsb3QpCisvL3sK
Ky8vICAgIGFwcGVuZEhpZGRlblVuYmFycmllcmVkKHNsb3QuZ2V0KCkpOworLy99CisvLworLy90
ZW1wbGF0ZTx0eXBlbmFtZSBJdGVyYXRvcj4KKy8vQUxXQVlTX0lOTElORSB2b2lkIFNsb3RWaXNp
dG9yOjphcHBlbmQoSXRlcmF0b3IgYmVnaW4sIEl0ZXJhdG9yIGVuZCkKKy8veworLy8gICAgZm9y
IChhdXRvIGl0ID0gYmVnaW47IGl0ICE9IGVuZDsgKytpdCkKKy8vICAgICAgICBhcHBlbmQoKml0
KTsKKy8vfQorCisvL0FMV0FZU19JTkxJTkUgdm9pZCBTbG90VmlzaXRvcjo6YXBwZW5kVmFsdWVz
KGNvbnN0IFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4qIGJhcnJpZXJzLCBzaXplX3QgY291bnQp
CisvL3sKKy8vICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY291bnQ7ICsraSkKKy8vICAgICAg
ICBhcHBlbmQoYmFycmllcnNbaV0pOworLy99CisvLworLy9BTFdBWVNfSU5MSU5FIHZvaWQgU2xv
dFZpc2l0b3I6OmFwcGVuZFZhbHVlc0hpZGRlbihjb25zdCBXcml0ZUJhcnJpZXJCYXNlPFVua25v
d24+KiBiYXJyaWVycywgc2l6ZV90IGNvdW50KQorLy97CisvLyAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IGNvdW50OyArK2kpCisvLyAgICAgICAgYXBwZW5kSGlkZGVuKGJhcnJpZXJzW2ldKTsK
Ky8vfQogCiBpbmxpbmUgYm9vbCBTbG90VmlzaXRvcjo6YWRkT3BhcXVlUm9vdCh2b2lkKiBwdHIp
CiB7CkBAIC0xNjksMjAgKzE3MCwyMCBAQCBpbmxpbmUgdm9pZCBTbG90VmlzaXRvcjo6cmVwb3J0
RXh0ZXJuYWxNCiB9CiAjZW5kaWYKIAotaW5saW5lIEhlYXAqIFNsb3RWaXNpdG9yOjpoZWFwKCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gJm1faGVhcDsKLX0KLQotaW5saW5lIFZNJiBTbG90VmlzaXRv
cjo6dm0oKQotewotICAgIHJldHVybiBtX2hlYXAudm0oKTsKLX0KLQotaW5saW5lIGNvbnN0IFZN
JiBTbG90VmlzaXRvcjo6dm0oKSBjb25zdAotewotICAgIHJldHVybiBtX2hlYXAudm0oKTsKLX0K
Ky8vaW5saW5lIEhlYXAqIFNsb3RWaXNpdG9yOjpoZWFwKCkgY29uc3QKKy8veworLy8gICAgcmV0
dXJuICZtX2hlYXA7CisvL30KKy8vCisvL2lubGluZSBWTSYgU2xvdFZpc2l0b3I6OnZtKCkKKy8v
eworLy8gICAgcmV0dXJuIG1faGVhcC52bSgpOworLy99CisvLworLy9pbmxpbmUgY29uc3QgVk0m
IFNsb3RWaXNpdG9yOjp2bSgpIGNvbnN0CisvL3sKKy8vICAgIHJldHVybiBtX2hlYXAudm0oKTsK
Ky8vfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgogSXRlcmF0aW9uU3RhdHVzIFNsb3RWaXNp
dG9yOjpmb3JFYWNoTWFya1N0YWNrKGNvbnN0IEZ1bmMmIGZ1bmMpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvck1hY3Jvcy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yTWFjcm9zLmgJKG5vbmV4aXN0ZW50KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3JNYWNyb3MuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDExNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3Mg
QWJzdHJhY3RTbG90VmlzaXRvcjsKK2NsYXNzIEpTQ2VsbDsKK2NsYXNzIFNsb3RWaXNpdG9yOwor
CisjZGVmaW5lIERFQ0xBUkVfVU5VU0VEX1NMT1RfVklTSVRPUl9TVFJVQ1RfRVhQQU5ERVIyKGNv
dW50ZXJfKSBcCisgICAgc3RydWN0IFVudXNlZFNsb3RWaXNpdG9yU3RydWN0U29XZUNhbkhhdmVB
U2VtaWNvbG9uIyNjb3VudGVyXyB7IH0KKworI2RlZmluZSBERUNMQVJFX1VOVVNFRF9TTE9UX1ZJ
U0lUT1JfU1RSVUNUX0VYUEFOREVSKGNvdW50ZXJfKSBcCisgICAgREVDTEFSRV9VTlVTRURfU0xP
VF9WSVNJVE9SX1NUUlVDVF9FWFBBTkRFUjIoY291bnRlcl8pCisKKyNkZWZpbmUgREVDTEFSRV9V
TlVTRURfU0xPVF9WSVNJVE9SX1NUUlVDVCgpIFwKKyAgICBERUNMQVJFX1VOVVNFRF9TTE9UX1ZJ
U0lUT1JfU1RSVUNUX0VYUEFOREVSKF9fQ09VTlRFUl9fKQorCisvLyBNYWNyb3MgZm9yIGluc3Rh
bmNlIGN1c3RvbSB2aXNpdG9yIG1ldGhvZC4KKworI2RlZmluZSBERUNMQVJFX0lOU1RBTkNFX1NM
T1RfVklTSVRPUl9NRVRIT0RfSU1QTChyZXR1cm5UeXBlXywgbWV0aG9kTmFtZV8sIHBvc3RNb2Rp
Zmllcl8pIFwKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiByZXR1cm5UeXBlXyBtZXRo
b2ROYW1lXyMjSW1wbChWaXNpdG9yJiB2aXNpdG9yKTsgXAorICAgIHJldHVyblR5cGVfIG1ldGhv
ZE5hbWVfKFNsb3RWaXNpdG9yJikgcG9zdE1vZGlmaWVyXzsgXAorICAgIHJldHVyblR5cGVfIG1l
dGhvZE5hbWVfKEFic3RyYWN0U2xvdFZpc2l0b3ImKSBwb3N0TW9kaWZpZXJfOyBcCisgICAgREVD
TEFSRV9VTlVTRURfU0xPVF9WSVNJVE9SX1NUUlVDVCgpCisKKyNkZWZpbmUgREVDTEFSRV9JTlNU
QU5DRV9TTE9UX1ZJU0lUT1JfTUVUSE9EKHJldHVyblR5cGVfLCBtZXRob2ROYW1lXykgXAorICAg
IERFQ0xBUkVfSU5TVEFOQ0VfU0xPVF9WSVNJVE9SX01FVEhPRF9JTVBMKHJldHVyblR5cGVfLCBt
ZXRob2ROYW1lXywgKQorCisKKyNkZWZpbmUgREVGSU5FX0lOU1RBTkNFX1NMT1RfVklTSVRPUl9N
RVRIT0QocmV0dXJuVHlwZV8sIGNsYXNzTmFtZV8sIG1ldGhvZE5hbWVfKSBcCisgICAgcmV0dXJu
VHlwZV8gY2xhc3NOYW1lXzo6bWV0aG9kTmFtZV8oU2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsgbWV0
aG9kTmFtZV8jI0ltcGwodmlzaXRvcik7IH0gXAorICAgIHJldHVyblR5cGVfIGNsYXNzTmFtZV86
Om1ldGhvZE5hbWVfKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpICB7IG1ldGhvZE5hbWVf
IyNJbXBsKHZpc2l0b3IpOyB9IFwKKyAgICBERUNMQVJFX1VOVVNFRF9TTE9UX1ZJU0lUT1JfU1RS
VUNUKCkKKworLy8gTWFjcm9zIGZvciBpbnN0YW5jZSB2aXNpdENoaWxkcmVuKCkuCisKKyNkZWZp
bmUgREVDTEFSRV9JTlNUQU5DRV9WSVNJVF9DSElMRFJFTiBcCisgICAgREVDTEFSRV9JTlNUQU5D
RV9TTE9UX1ZJU0lUT1JfTUVUSE9EKHZvaWQsIHZpc2l0Q2hpbGRyZW4pCisKKworI2RlZmluZSBE
RUZJTkVfSU5TVEFOQ0VfVklTSVRfQ0hJTERSRU4oY2xhc3NOYW1lXykgXAorICAgIERFRklORV9J
TlNUQU5DRV9TTE9UX1ZJU0lUT1JfTUVUSE9EKHZvaWQsIGNsYXNzTmFtZV8sIHZpc2l0Q2hpbGRy
ZW4pCisKKy8vIE1hY3JvcyBmb3Igc3RhdGljIHZpc2l0Q2hpbGRyZW4oKS4KKworI2RlZmluZSBE
RUNMQVJFX1ZJU0lUX0NISUxEUkVOX0lNUEwgXAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0
b3I+IHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCosIFZpc2l0b3ImKQorCisj
ZGVmaW5lIERFQ0xBUkVfVklTSVRfQ0hJTERSRU4gXAorICAgIERFQ0xBUkVfVklTSVRfQ0hJTERS
RU5fSU1QTDsgXAorICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBB
YnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKTsgXAorICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hp
bGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKKworI2RlZmluZSBERUNM
QVJFX0VYUE9SVF9WSVNJVF9DSElMRFJFTiBcCisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTl9J
TVBMOyBcCisgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihK
U0NlbGwqLCBBYnN0cmFjdFNsb3RWaXNpdG9yJik7IFwKKyAgICBKU19FWFBPUlRfUFJJVkFURSBz
dGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJikKKworI2RlZmlu
ZSBERUNMQVJFX0lOTElORV9WSVNJVF9DSElMRFJFTiBcCisgICAgREVDTEFSRV9WSVNJVF9DSElM
RFJFTl9JTVBMOyBcCisgICAgaW5saW5lIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiwgQWJzdHJhY3RTbG90VmlzaXRvciYpOyBcCisgICAgaW5saW5lIHN0YXRpYyB2b2lkIHZpc2l0
Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKQorCisjZGVmaW5lIERFQ0xBUkVfVEVNUExB
VEVfVklTSVRfQ0hJTERSRU4gXAorICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU4KKworCisjZGVm
aW5lIERFRklORV9WSVNJVF9DSElMRFJFTihjbGFzc05hbWVfKSBcCisgICAgdm9pZCBjbGFzc05h
bWVfOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgQWJzdHJhY3RTbG90VmlzaXRvciYgdmlz
aXRvcikgeyB2aXNpdENoaWxkcmVuSW1wbChjZWxsLCB2aXNpdG9yKTsgfSBcCisgICAgdm9pZCBj
bGFzc05hbWVfOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0
b3IpIHsgdmlzaXRDaGlsZHJlbkltcGwoY2VsbCwgdmlzaXRvcik7IH0gXAorICAgIERFQ0xBUkVf
VU5VU0VEX1NMT1RfVklTSVRPUl9TVFJVQ1QoKQorCisjZGVmaW5lIERFRklORV9FWFBPUlRfVklT
SVRfQ0hJTERSRU4oY2xhc3NOYW1lXykgXAorICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgY2xh
c3NOYW1lXzo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIEFic3RyYWN0U2xvdFZpc2l0b3Im
IHZpc2l0b3IpIHsgdmlzaXRDaGlsZHJlbkltcGwoY2VsbCwgdmlzaXRvcik7IH0gXAorICAgIEpT
X0VYUE9SVF9QUklWQVRFIHZvaWQgY2xhc3NOYW1lXzo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNl
bGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKSB7IHZpc2l0Q2hpbGRyZW5JbXBsKGNlbGwsIHZpc2l0
b3IpOyB9IFwKKyAgICBERUNMQVJFX1VOVVNFRF9TTE9UX1ZJU0lUT1JfU1RSVUNUKCkKKworI2Rl
ZmluZSBERUZJTkVfSU5MSU5FX1ZJU0lUX0NISUxEUkVOKGNsYXNzTmFtZV8pIFwKKyAgICBpbmxp
bmUgdm9pZCBjbGFzc05hbWVfOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgQWJzdHJhY3RT
bG90VmlzaXRvciYgdmlzaXRvcikgeyB2aXNpdENoaWxkcmVuSW1wbChjZWxsLCB2aXNpdG9yKTsg
fSBcCisgICAgaW5saW5lIHZvaWQgY2xhc3NOYW1lXzo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNl
bGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKSB7IHZpc2l0Q2hpbGRyZW5JbXBsKGNlbGwsIHZpc2l0
b3IpOyB9IFwKKyAgICBERUNMQVJFX1VOVVNFRF9TTE9UX1ZJU0lUT1JfU1RSVUNUKCkKKworI2Rl
ZmluZSBERUZJTkVfVEVNUExBVEVfVklTSVRfQ0hJTERSRU4odGVtcGxhdGVDbGF1c2VfLCBjbGFz
c05hbWVfKSBcCisgICAgdGVtcGxhdGVDbGF1c2VfIHZvaWQgY2xhc3NOYW1lXzo6dmlzaXRDaGls
ZHJlbihKU0NlbGwqIGNlbGwsIEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsgdmlzaXRD
aGlsZHJlbkltcGwoY2VsbCwgdmlzaXRvcik7IH0gXAorICAgIHRlbXBsYXRlQ2xhdXNlXyB2b2lk
IGNsYXNzTmFtZV86OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlz
aXRvcikgeyB2aXNpdENoaWxkcmVuSW1wbChjZWxsLCB2aXNpdG9yKTsgfSBcCisgICAgREVDTEFS
RV9VTlVTRURfU0xPVF9WSVNJVE9SX1NUUlVDVCgpCisKK30gLy8gbmFtZXNwYWNlIEpTQworCit1
c2luZyBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3I7Cit1c2luZyBKU0M6OkpTQ2VsbDsKK3VzaW5n
IEpTQzo6U2xvdFZpc2l0b3I7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdWJz
cGFjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N1YnNwYWNl
LmgJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N1YnNw
YWNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7
CiAKK2NsYXNzIEFic3RyYWN0U2xvdFZpc2l0b3I7IC8vIG1sYW0KIGNsYXNzIEFsaWduZWRNZW1v
cnlBbGxvY2F0b3I7CiBjbGFzcyBIZWFwQ2VsbFR5cGU7CiAKQEAgLTg3LDcgKzg4LDcgQEAgcHVi
bGljOgogICAgIHZvaWQgZm9yRWFjaE1hcmtlZENlbGwoY29uc3QgRnVuYyYpOwogICAgIAogICAg
IHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+Ci0gICAgUmVmPFNoYXJlZFRhc2s8dm9pZChTbG90Vmlz
aXRvciYpPj4gZm9yRWFjaE1hcmtlZENlbGxJblBhcmFsbGVsKGNvbnN0IEZ1bmMmKTsKKyAgICBS
ZWY8U2hhcmVkVGFzazx2b2lkKEFic3RyYWN0U2xvdFZpc2l0b3ImKT4+IGZvckVhY2hNYXJrZWRD
ZWxsSW5QYXJhbGxlbChjb25zdCBGdW5jJik7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5j
PgogICAgIHZvaWQgZm9yRWFjaExpdmVDZWxsKGNvbnN0IEZ1bmMmKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL1N1YnNwYWNlSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N1YnNwYWNlSW5saW5lcy5oCShyZXZpc2lvbiAyNzE0NDMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdWJzcGFjZUlubGluZXMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtODYsOSArODYsOSBAQCB2b2lkIFN1YnNwYWNlOjpmb3JFYWNoTWFya2VkQ2Vs
bChjb25zdCBGCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+Ci1SZWY8U2hhcmVkVGFzazx2
b2lkKFNsb3RWaXNpdG9yJik+PiBTdWJzcGFjZTo6Zm9yRWFjaE1hcmtlZENlbGxJblBhcmFsbGVs
KGNvbnN0IEZ1bmMmIGZ1bmMpCitSZWY8U2hhcmVkVGFzazx2b2lkKEFic3RyYWN0U2xvdFZpc2l0
b3ImKT4+IFN1YnNwYWNlOjpmb3JFYWNoTWFya2VkQ2VsbEluUGFyYWxsZWwoY29uc3QgRnVuYyYg
ZnVuYykKIHsKLSAgICBjbGFzcyBUYXNrIGZpbmFsIDogcHVibGljIFNoYXJlZFRhc2s8dm9pZChT
bG90VmlzaXRvciYpPiB7CisgICAgY2xhc3MgVGFzayBmaW5hbCA6IHB1YmxpYyBTaGFyZWRUYXNr
PHZvaWQoQWJzdHJhY3RTbG90VmlzaXRvciYpPiB7CiAgICAgcHVibGljOgogICAgICAgICBUYXNr
KFN1YnNwYWNlJiBzdWJzcGFjZSwgY29uc3QgRnVuYyYgZnVuYykKICAgICAgICAgICAgIDogbV9z
dWJzcGFjZShzdWJzcGFjZSkKQEAgLTk3LDcgKzk3LDcgQEAgUmVmPFNoYXJlZFRhc2s8dm9pZChT
bG90VmlzaXRvciYpPj4gU3VicwogICAgICAgICB7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAg
ICAgIHZvaWQgcnVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBmaW5hbAorICAgICAgICB2b2lkIHJ1
bihBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBmaW5hbAogICAgICAgICB7CiAgICAgICAg
ICAgICB3aGlsZSAoTWFya2VkQmxvY2s6OkhhbmRsZSogaGFuZGxlID0gbV9ibG9ja1NvdXJjZS0+
cnVuKCkpIHsKICAgICAgICAgICAgICAgICBoYW5kbGUtPmZvckVhY2hNYXJrZWRDZWxsKApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVmlzaXRDb3VudGVyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVmlzaXRDb3VudGVyLmgJKHJldmlzaW9uIDI3
MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Zpc2l0Q291bnRlci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNSw3ICsyNSw3IEBACiAKICNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSAi
U2xvdFZpc2l0b3IuaCIKKyNpbmNsdWRlICJBYnN0cmFjdFNsb3RWaXNpdG9yLmgiCiAKIG5hbWVz
cGFjZSBKU0MgewogCkBAIC0zMywxMyArMzMsMTMgQEAgY2xhc3MgVmlzaXRDb3VudGVyIHsKIHB1
YmxpYzoKICAgICBWaXNpdENvdW50ZXIoKSB7IH0KICAgICAKLSAgICBWaXNpdENvdW50ZXIoU2xv
dFZpc2l0b3ImIHZpc2l0b3IpCisgICAgVmlzaXRDb3VudGVyKEFic3RyYWN0U2xvdFZpc2l0b3Im
IHZpc2l0b3IpCiAgICAgICAgIDogbV92aXNpdG9yKCZ2aXNpdG9yKQogICAgICAgICAsIG1faW5p
dGlhbFZpc2l0Q291bnQodmlzaXRvci52aXNpdENvdW50KCkpCiAgICAgewogICAgIH0KICAgICAK
LSAgICBTbG90VmlzaXRvciYgdmlzaXRvcigpIGNvbnN0IHsgcmV0dXJuICptX3Zpc2l0b3I7IH0K
KyAgICBBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKCkgY29uc3QgeyByZXR1cm4gKm1fdmlz
aXRvcjsgfQogICAgIAogICAgIHNpemVfdCB2aXNpdENvdW50KCkgY29uc3QKICAgICB7CkBAIC00
Nyw3ICs0Nyw3IEBAIHB1YmxpYzoKICAgICB9CiAgICAgCiBwcml2YXRlOgotICAgIFNsb3RWaXNp
dG9yKiBtX3Zpc2l0b3IgeyBudWxscHRyIH07CisgICAgQWJzdHJhY3RTbG90VmlzaXRvciogbV92
aXNpdG9yIHsgbnVsbHB0ciB9OwogICAgIHNpemVfdCBtX2luaXRpYWxWaXNpdENvdW50IHsgMCB9
OwogfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha0Jsb2NrLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrQmxvY2suY3BwCShy
ZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrQmxvY2su
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC05OCw4ICs5OCw4IEBAIHZvaWQgV2Vha0Jsb2NrOjpzd2Vl
cCgpCiAgICAgQVNTRVJUKCFtX3N3ZWVwUmVzdWx0LmlzTnVsbCgpKTsKIH0KIAotdGVtcGxhdGU8
dHlwZW5hbWUgQ29udGFpbmVyVHlwZT4KLXZvaWQgV2Vha0Jsb2NrOjpzcGVjaWFsaXplZFZpc2l0
KENvbnRhaW5lclR5cGUmIGNvbnRhaW5lciwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0
ZTx0eXBlbmFtZSBDb250YWluZXJUeXBlLCB0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBXZWFrQmxv
Y2s6OnNwZWNpYWxpemVkVmlzaXQoQ29udGFpbmVyVHlwZSYgY29udGFpbmVyLCBWaXNpdG9yJiB2
aXNpdG9yKQogewogICAgIEhlYXBWZXJzaW9uIG1hcmtpbmdWZXJzaW9uID0gdmlzaXRvci5tYXJr
aW5nVmVyc2lvbigpOwogCkBAIC0xMzQsNyArMTM0LDkgQEAgdm9pZCBXZWFrQmxvY2s6OnNwZWNp
YWxpemVkVmlzaXQoQ29udGFpbgogICAgIH0KIH0KIAotdm9pZCBXZWFrQmxvY2s6OnZpc2l0KFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQorLy90ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgorLy92b2lk
IFdlYWtCbG9jazo6dmlzaXQoVmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgV2Vha0Jsb2NrOjp2aXNp
dDEoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICAvLyBJZiBhIGJsb2NrIGlz
IGNvbXBsZXRlbHkgZW1wdHksIGEgdmlzaXQgd29uJ3QgaGF2ZSBhbnkgZWZmZWN0LgogICAgIGlm
IChpc0VtcHR5KCkpCkBAIC0xNDksNiArMTUxLDkgQEAgdm9pZCBXZWFrQmxvY2s6OnZpc2l0KFNs
b3RWaXNpdG9yJiB2aXNpdAogICAgICAgICBzcGVjaWFsaXplZFZpc2l0KG1fY29udGFpbmVyLm1h
cmtlZEJsb2NrKCksIHZpc2l0b3IpOwogfQogCisvL3RlbXBsYXRlIHZvaWQgV2Vha0Jsb2NrOjp2
aXNpdChTbG90VmlzaXRvciYpOworLy90ZW1wbGF0ZSB2b2lkIFdlYWtCbG9jazo6dmlzaXQoRGVi
dWdTbG90VmlzaXRvciYpOworCiB2b2lkIFdlYWtCbG9jazo6cmVhcCgpCiB7CiAgICAgLy8gSWYg
YSBibG9jayBpcyBjb21wbGV0ZWx5IGVtcHR5LCBhIHJlYXBpbmcgd29uJ3QgaGF2ZSBhbnkgZWZm
ZWN0LgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha0Jsb2NrLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha0Jsb2NrLmgJKHJldmlzaW9u
IDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtCbG9jay5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMiw4ICszMiw5IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCitjbGFzcyBB
YnN0cmFjdFNsb3RWaXNpdG9yOwogY2xhc3MgSGVhcDsKLWNsYXNzIFNsb3RWaXNpdG9yOworLy9j
bGFzcyBTbG90VmlzaXRvcjsKIAogREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJ
RVIoV2Vha0Jsb2NrKTsKIApAQCAtNjUsNyArNjYsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzd2Vl
cCgpOwogICAgIFN3ZWVwUmVzdWx0IHRha2VTd2VlcFJlc3VsdCgpOwogCi0gICAgdm9pZCB2aXNp
dChTbG90VmlzaXRvciYpOworLy8gICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCB2
aXNpdChWaXNpdG9yJik7CisgICAgdm9pZCB2aXNpdDEoQWJzdHJhY3RTbG90VmlzaXRvciYpOwog
CiAgICAgdm9pZCByZWFwKCk7CiAKQEAgLTc1LDggKzc3LDggQEAgcHVibGljOgogcHJpdmF0ZToK
ICAgICBzdGF0aWMgRnJlZUNlbGwqIGFzRnJlZUNlbGwoV2Vha0ltcGwqKTsKICAgICAKLSAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBDb250YWluZXJUeXBlPgotICAgIHZvaWQgc3BlY2lhbGl6ZWRWaXNp
dChDb250YWluZXJUeXBlJiwgU2xvdFZpc2l0b3ImKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBD
b250YWluZXJUeXBlLCB0eXBlbmFtZSBWaXNpdG9yPgorICAgIHZvaWQgc3BlY2lhbGl6ZWRWaXNp
dChDb250YWluZXJUeXBlJiwgVmlzaXRvciYpOwogCiAgICAgZXhwbGljaXQgV2Vha0Jsb2NrKENl
bGxDb250YWluZXIpOwogICAgIHZvaWQgZmluYWxpemUoV2Vha0ltcGwqKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtIYW5kbGVPd25lci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha0hhbmRsZU93bmVyLmNwcAkocmV2aXNpb24g
MjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha0hhbmRsZU93bmVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzUsNyArMzUsNyBAQCBXZWFrSGFuZGxlT3duZXI6On5XZWFr
SGFuZGxlT3duZXIoKQogewogfQogCi1ib29sIFdlYWtIYW5kbGVPd25lcjo6aXNSZWFjaGFibGVG
cm9tT3BhcXVlUm9vdHMoSGFuZGxlPFVua25vd24+LCB2b2lkKiwgU2xvdFZpc2l0b3ImLCBjb25z
dCBjaGFyKiopCitib29sIFdlYWtIYW5kbGVPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9v
dHMoSGFuZGxlPFVua25vd24+LCB2b2lkKiwgQWJzdHJhY3RTbG90VmlzaXRvciYsIGNvbnN0IGNo
YXIqKikKIHsKICAgICByZXR1cm4gZmFsc2U7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9XZWFrSGFuZGxlT3duZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9XZWFrSGFuZGxlT3duZXIuaAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha0hhbmRsZU93bmVyLmgJKHdvcmtpbmcgY29weSkKQEAg
LTI5LDEzICsyOSwxMyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotY2xhc3MgU2xvdFZpc2l0b3I7
CitjbGFzcyBBYnN0cmFjdFNsb3RWaXNpdG9yOwogCiBjbGFzcyBKU19FWFBPUlRfUFJJVkFURSBX
ZWFrSGFuZGxlT3duZXIgewogcHVibGljOgogICAgIHZpcnR1YWwgfldlYWtIYW5kbGVPd25lcigp
OwogICAgIC8vIHJlYXNvbiB3aWxsIG9ubHkgYmUgbm9uLW51bGwgd2hlbiBnZW5lcmF0aW5nIGEg
ZGVidWcgR0MgaGVhcCBzbmFwc2hvdC4KLSAgICB2aXJ0dWFsIGJvb2wgaXNSZWFjaGFibGVGcm9t
T3BhcXVlUm9vdHMoSGFuZGxlPFVua25vd24+LCB2b2lkKiBjb250ZXh0LCBTbG90VmlzaXRvciYs
IGNoYXIgY29uc3QqKiByZWFzb24gPSBudWxscHRyKTsKKyAgICB2aXJ0dWFsIGJvb2wgaXNSZWFj
aGFibGVGcm9tT3BhcXVlUm9vdHMoSGFuZGxlPFVua25vd24+LCB2b2lkKiBjb250ZXh0LCBBYnN0
cmFjdFNsb3RWaXNpdG9yJiwgY2hhciBjb25zdCoqIHJlYXNvbiA9IG51bGxwdHIpOwogICAgIHZp
cnR1YWwgdm9pZCBmaW5hbGl6ZShIYW5kbGU8VW5rbm93bj4sIHZvaWQqIGNvbnRleHQpOwogfTsK
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha0lubGluZXMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrSW5saW5lcy5oCShyZXZpc2lv
biAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrSW5saW5lcy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUg
IkpTQ2FzdC5oIgorI2luY2x1ZGUgIldlYWsuaCIKICNpbmNsdWRlICJXZWFrU2V0SW5saW5lcy5o
IgogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL1dlYWtTZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9XZWFrU2V0LmgJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL1dlYWtTZXQuaAkod29ya2luZyBjb3B5KQpAQCAtNTEsNyArNTEsOCBAQCBwdWJsaWM6
CiAgICAgYm9vbCBpc0VtcHR5KCkgY29uc3Q7CiAgICAgYm9vbCBpc1RyaXZpYWxseURlc3RydWN0
aWJsZSgpIGNvbnN0OwogCi0gICAgdm9pZCB2aXNpdChTbG90VmlzaXRvciYpOworLy8gICAgdGVt
cGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCB2aXNpdChWaXNpdG9yJik7CisgICAgdm9pZCB2
aXNpdDEoQWJzdHJhY3RTbG90VmlzaXRvciYpOwogCiAgICAgdm9pZCByZWFwKCk7CiAgICAgdm9p
ZCBzd2VlcCgpOwpAQCAtMTE0LDEwICsxMTUsMTIgQEAgaW5saW5lIHZvaWQgV2Vha1NldDo6bGFz
dENoYW5jZVRvRmluYWxpegogICAgICAgICBibG9jay0+bGFzdENoYW5jZVRvRmluYWxpemUoKTsK
IH0KIAotaW5saW5lIHZvaWQgV2Vha1NldDo6dmlzaXQoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisv
L3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+CisvL2lubGluZSB2b2lkIFdlYWtTZXQ6OnZpc2l0
KFZpc2l0b3ImIHZpc2l0b3IpCitpbmxpbmUgdm9pZCBXZWFrU2V0Ojp2aXNpdDEoQWJzdHJhY3RT
bG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBmb3IgKFdlYWtCbG9jayogYmxvY2sgPSBtX2Js
b2Nrcy5oZWFkKCk7IGJsb2NrOyBibG9jayA9IGJsb2NrLT5uZXh0KCkpCi0gICAgICAgIGJsb2Nr
LT52aXNpdCh2aXNpdG9yKTsKKyAgICAgICAgYmxvY2stPnZpc2l0MSh2aXNpdG9yKTsKIH0KIAog
aW5saW5lIHZvaWQgV2Vha1NldDo6cmVhcCgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW50ZXJwcmV0ZXIvU2hhZG93Q2hpY2tlbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ludGVycHJldGVyL1NoYWRvd0NoaWNrZW4uY3BwCShyZXZpc2lvbiAyNzE0NDMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU2hhZG93Q2hpY2tlbi5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQ0MCw3ICs0NDAsNyBAQCB2b2lkIFNoYWRvd0NoaWNrZW46OnVw
ZGF0ZShWTSYgdm0sIENhbGxGCiAgICAgICAgIGRhdGFMb2coIiAgICBBZnRlciBjbGVhbi11cDog
IiwgKnRoaXMsICJcbiIpOwogfQogCi12b2lkIFNoYWRvd0NoaWNrZW46OnZpc2l0Q2hpbGRyZW4o
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIFNoYWRvd0NoaWNrZW46OnZpc2l0Q2hpbGRyZW4o
QWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSBt
X2xvZ0N1cnNvciAtIG1fbG9nOyBpLS07KSB7CiAgICAgICAgIEpTT2JqZWN0KiBjYWxsZWUgPSBt
X2xvZ1tpXS5jYWxsZWU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIv
U2hhZG93Q2hpY2tlbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRl
cnByZXRlci9TaGFkb3dDaGlja2VuLmgJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnRlcnByZXRlci9TaGFkb3dDaGlja2VuLmgJKHdvcmtpbmcgY29weSkKQEAg
LTM1LDEzICszNSwxMyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAorY2xhc3MgQWJzdHJhY3RTbG90
VmlzaXRvcjsKIGNsYXNzIENhbGxGcmFtZTsKIGNsYXNzIENvZGVCbG9jazsKIGNsYXNzIEpTQXJy
YXk7CiBjbGFzcyBKU09iamVjdDsKIGNsYXNzIEpTU2NvcGU7CiBjbGFzcyBMTEludE9mZnNldHNF
eHRyYWN0b3I7Ci1jbGFzcyBTbG90VmlzaXRvcjsKIGNsYXNzIFZNOwogCiAvLyBTaGFkb3dDaGlj
a2VuIGlzIGEgbG9nIHRoYXQgY2FuIGJlIHVzZWQgdG8gcHJvZHVjZSBhIHNoYWRvdyBzdGFjayBv
ZiBDSElDS0VOLXN0eWxlIHN0YWNrIGZyYW1lcy4KQEAgLTE5Niw3ICsxOTYsNyBAQCBwdWJsaWM6
CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KICAgICB2b2lkIGl0ZXJhdGUoVk0mLCBD
YWxsRnJhbWUqLCBjb25zdCBGdW5jdG9yJik7CiAgICAgCi0gICAgdm9pZCB2aXNpdENoaWxkcmVu
KFNsb3RWaXNpdG9yJik7CisgICAgdm9pZCB2aXNpdENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0
b3ImKTsKICAgICB2b2lkIHJlc2V0KCk7CiAgICAgCiAgICAgLy8gSklUIHN1cHBvcnQuCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0dDQXdhcmVKSVRTdHViUm91dGluZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9HQ0F3YXJlSklUU3R1YlJvdXRp
bmUuY3BwCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0dD
QXdhcmVKSVRTdHViUm91dGluZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTczLDEwICs3MywxNSBA
QCB2b2lkIEdDQXdhcmVKSVRTdHViUm91dGluZTo6ZGVsZXRlRnJvbUdDCiAgICAgZGVsZXRlIHRo
aXM7CiB9CiAKLXZvaWQgR0NBd2FyZUpJVFN0dWJSb3V0aW5lOjptYXJrUmVxdWlyZWRPYmplY3Rz
SW50ZXJuYWwoU2xvdFZpc2l0b3ImKQorLy92b2lkIEdDQXdhcmVKSVRTdHViUm91dGluZTo6bWFy
a1JlcXVpcmVkT2JqZWN0c0ludGVybmFsKFNsb3RWaXNpdG9yJikKK3ZvaWQgR0NBd2FyZUpJVFN0
dWJSb3V0aW5lOjptYXJrUmVxdWlyZWRPYmplY3RzSW50ZXJuYWwxKEFic3RyYWN0U2xvdFZpc2l0
b3ImKQogewogfQogCisvL3ZvaWQgR0NBd2FyZUpJVFN0dWJSb3V0aW5lOjptYXJrUmVxdWlyZWRP
YmplY3RzSW50ZXJuYWwoRGVidWdTbG90VmlzaXRvciYpCisvL3sKKy8vfQorCiBNYXJraW5nR0NB
d2FyZUpJVFN0dWJSb3V0aW5lOjpNYXJraW5nR0NBd2FyZUpJVFN0dWJSb3V0aW5lKAogICAgIGNv
bnN0IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRTdHViUm91dGluZVB0clRhZz4mIGNvZGUsIFZN
JiB2bSwgY29uc3QgSlNDZWxsKiBvd25lciwKICAgICBjb25zdCBWZWN0b3I8SlNDZWxsKj4mIGNl
bGxzLCBCYWc8Q2FsbExpbmtJbmZvPiYmIGNhbGxMaW5rSW5mb3MpCkBAIC05MiwxMiArOTcsMTkg
QEAgTWFya2luZ0dDQXdhcmVKSVRTdHViUm91dGluZTo6fk1hcmtpbmdHQwogewogfQogCi12b2lk
IE1hcmtpbmdHQ0F3YXJlSklUU3R1YlJvdXRpbmU6Om1hcmtSZXF1aXJlZE9iamVjdHNJbnRlcm5h
bChTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vdm9pZCBNYXJraW5nR0NBd2FyZUpJVFN0dWJSb3V0
aW5lOjptYXJrUmVxdWlyZWRPYmplY3RzSW50ZXJuYWwoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2
b2lkIE1hcmtpbmdHQ0F3YXJlSklUU3R1YlJvdXRpbmU6Om1hcmtSZXF1aXJlZE9iamVjdHNJbnRl
cm5hbDEoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBmb3IgKGF1dG8mIGVu
dHJ5IDogbV9jZWxscykKICAgICAgICAgdmlzaXRvci5hcHBlbmQoZW50cnkpOwogfQogCisvLyBG
SVhNRSBkZWR1cGU/CisvL3ZvaWQgTWFya2luZ0dDQXdhcmVKSVRTdHViUm91dGluZTo6bWFya1Jl
cXVpcmVkT2JqZWN0c0ludGVybmFsKERlYnVnU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3sKKy8v
ICAgIGZvciAoYXV0byYgZW50cnkgOiBtX2NlbGxzKQorLy8gICAgICAgIHZpc2l0b3IuYXBwZW5k
KGVudHJ5KTsKKy8vfQogCiBHQ0F3YXJlSklUU3R1YlJvdXRpbmVXaXRoRXhjZXB0aW9uSGFuZGxl
cjo6R0NBd2FyZUpJVFN0dWJSb3V0aW5lV2l0aEV4Y2VwdGlvbkhhbmRsZXIoCiAgICAgY29uc3Qg
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiYgY29kZSwgVk0mIHZt
LCAgY29uc3QgSlNDZWxsKiBvd25lciwgY29uc3QgVmVjdG9yPEpTQ2VsbCo+JiBjZWxscywgQmFn
PENhbGxMaW5rSW5mbz4mJiBjYWxsTGlua0luZm9zLApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9HQ0F3YXJlSklUU3R1YlJvdXRpbmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0dDQXdhcmVKSVRTdHViUm91dGluZS5oCShyZXZpc2lvbiAyNzE0NDMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0dDQXdhcmVKSVRTdHViUm91dGluZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC02MCwxMCArNjAsMTIgQEAgcHVibGljOgogICAgIHsKICAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKCpuZXcgR0NBd2FyZUpJVFN0dWJSb3V0aW5lKGNvZGUsIHZtKSk7CiAg
ICAgfQotICAgIAotICAgIHZvaWQgbWFya1JlcXVpcmVkT2JqZWN0cyhTbG90VmlzaXRvciYgdmlz
aXRvcikKKworLy8gICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KKy8vICAgIHZvaWQgbWFy
a1JlcXVpcmVkT2JqZWN0cyhWaXNpdG9yJiB2aXNpdG9yKQorICAgIHZvaWQgbWFya1JlcXVpcmVk
T2JqZWN0czEoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKICAgICB7Ci0gICAgICAgIG1h
cmtSZXF1aXJlZE9iamVjdHNJbnRlcm5hbCh2aXNpdG9yKTsKKyAgICAgICAgbWFya1JlcXVpcmVk
T2JqZWN0c0ludGVybmFsMSh2aXNpdG9yKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBkZWxldGVG
cm9tR0MoKTsKQEAgLTcxLDcgKzczLDkgQEAgcHVibGljOgogcHJvdGVjdGVkOgogICAgIHZvaWQg
b2JzZXJ2ZVplcm9SZWZDb3VudCgpIG92ZXJyaWRlOwogICAgIAotICAgIHZpcnR1YWwgdm9pZCBt
YXJrUmVxdWlyZWRPYmplY3RzSW50ZXJuYWwoU2xvdFZpc2l0b3ImKTsKKy8vICAgIHZpcnR1YWwg
dm9pZCBtYXJrUmVxdWlyZWRPYmplY3RzSW50ZXJuYWwoU2xvdFZpc2l0b3ImKTsKKy8vICAgIHZp
cnR1YWwgdm9pZCBtYXJrUmVxdWlyZWRPYmplY3RzSW50ZXJuYWwoRGVidWdTbG90VmlzaXRvciYp
OworICAgIHZpcnR1YWwgdm9pZCBtYXJrUmVxdWlyZWRPYmplY3RzSW50ZXJuYWwxKEFic3RyYWN0
U2xvdFZpc2l0b3ImKTsKIAogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgSklUU3R1YlJvdXRp
bmVTZXQ7CkBAIC04OSw3ICs5Myw5IEBAIHB1YmxpYzoKICAgICB+TWFya2luZ0dDQXdhcmVKSVRT
dHViUm91dGluZSgpIG92ZXJyaWRlOwogICAgIAogcHJvdGVjdGVkOgotICAgIHZvaWQgbWFya1Jl
cXVpcmVkT2JqZWN0c0ludGVybmFsKFNsb3RWaXNpdG9yJikgb3ZlcnJpZGU7CisvLyAgICB2b2lk
IG1hcmtSZXF1aXJlZE9iamVjdHNJbnRlcm5hbChTbG90VmlzaXRvciYpIG92ZXJyaWRlOworLy8g
ICAgdm9pZCBtYXJrUmVxdWlyZWRPYmplY3RzSW50ZXJuYWwoRGVidWdTbG90VmlzaXRvciYpIG92
ZXJyaWRlOworICAgIHZvaWQgbWFya1JlcXVpcmVkT2JqZWN0c0ludGVybmFsMShBYnN0cmFjdFNs
b3RWaXNpdG9yJikgb3ZlcnJpZGU7CiAKIHByaXZhdGU6CiAgICAgVmVjdG9yPFdyaXRlQmFycmll
cjxKU0NlbGw+PiBtX2NlbGxzOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Qb2x5
bW9ycGhpY0NhbGxTdHViUm91dGluZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9Qb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZS5jcHAJKHJldmlzaW9uIDI3MTQ0
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRp
bmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzUsMTIgKzEzNSwyMCBAQCBib29sIFBvbHltb3Jw
aGljQ2FsbFN0dWJSb3V0aW5lOjp2aXNpdFdlCiAgICAgcmV0dXJuIGlzU3RpbGxMaXZlOwogfQog
Ci12b2lkIFBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lOjptYXJrUmVxdWlyZWRPYmplY3RzSW50
ZXJuYWwoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3ZvaWQgUG9seW1vcnBoaWNDYWxsU3R1YlJv
dXRpbmU6Om1hcmtSZXF1aXJlZE9iamVjdHNJbnRlcm5hbChTbG90VmlzaXRvciYgdmlzaXRvcikK
K3ZvaWQgUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmU6Om1hcmtSZXF1aXJlZE9iamVjdHNJbnRl
cm5hbDEoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBmb3IgKGF1dG8mIHZh
cmlhbnQgOiBtX3ZhcmlhbnRzKQogICAgICAgICB2aXNpdG9yLmFwcGVuZCh2YXJpYW50KTsKIH0K
IAorLy8vLyBtbGFtIEZJWE1FIGRlZHVwZT8/PworLy92b2lkIFBvbHltb3JwaGljQ2FsbFN0dWJS
b3V0aW5lOjptYXJrUmVxdWlyZWRPYmplY3RzSW50ZXJuYWwoRGVidWdTbG90VmlzaXRvciYgdmlz
aXRvcikKKy8veworLy8gICAgZm9yIChhdXRvJiB2YXJpYW50IDogbV92YXJpYW50cykKKy8vICAg
ICAgICB2aXNpdG9yLmFwcGVuZCh2YXJpYW50KTsKKy8vfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MK
IAogI2VuZGlmIC8vIEVOQUJMRShKSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L1BvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9Qb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZS5oCShyZXZpc2lvbiAyNzE0
NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1BvbHltb3JwaGljQ2FsbFN0dWJSb3V0
aW5lLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwNSw3ICsxMDUsOSBAQCBwdWJsaWM6CiAgICAgYm9v
bCB2aXNpdFdlYWsoVk0mKSBmaW5hbDsKIAogcHJpdmF0ZToKLSAgICB2b2lkIG1hcmtSZXF1aXJl
ZE9iamVjdHNJbnRlcm5hbChTbG90VmlzaXRvciYpIGZpbmFsOworLy8gICAgdm9pZCBtYXJrUmVx
dWlyZWRPYmplY3RzSW50ZXJuYWwoU2xvdFZpc2l0b3ImKSBmaW5hbDsKKy8vICAgIHZvaWQgbWFy
a1JlcXVpcmVkT2JqZWN0c0ludGVybmFsKERlYnVnU2xvdFZpc2l0b3ImKSBmaW5hbDsKKyAgICB2
b2lkIG1hcmtSZXF1aXJlZE9iamVjdHNJbnRlcm5hbDEoQWJzdHJhY3RTbG90VmlzaXRvciYpIGZp
bmFsOwogCiAgICAgVmVjdG9yPFdyaXRlQmFycmllcjxKU0NlbGw+LCAyPiBtX3ZhcmlhbnRzOwog
ICAgIFVuaXF1ZUFycmF5PHVpbnQzMl90PiBtX2Zhc3RDb3VudHM7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9BYnN0cmFjdE1vZHVsZVJlY29yZC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQWJzdHJhY3RNb2R1bGVSZWNvcmQuY3Bw
CShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BYnN0
cmFjdE1vZHVsZVJlY29yZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYwLDcgKzYwLDggQEAgdm9p
ZCBBYnN0cmFjdE1vZHVsZVJlY29yZDo6ZmluaXNoQ3JlYXRpbwogICAgIHB1dERpcmVjdCh2bSwg
SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImRlcGVuZGVuY2llc01hcCJfcyksIG1fZGVwZW5k
ZW5jaWVzTWFwLmdldCgpKTsKIH0KIAotdm9pZCBBYnN0cmFjdE1vZHVsZVJlY29yZDo6dmlzaXRD
aGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlw
ZW5hbWUgVmlzaXRvcj4KK3ZvaWQgQWJzdHJhY3RNb2R1bGVSZWNvcmQ6OnZpc2l0Q2hpbGRyZW5J
bXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBBYnN0cmFjdE1vZHVs
ZVJlY29yZCogdGhpc09iamVjdCA9IGpzQ2FzdDxBYnN0cmFjdE1vZHVsZVJlY29yZCo+KGNlbGwp
OwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAg
LTcwLDYgKzcxLDggQEAgdm9pZCBBYnN0cmFjdE1vZHVsZVJlY29yZDo6dmlzaXRDaGlsZHJlbgog
ICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fZGVwZW5kZW5jaWVzTWFwKTsKIH0KIAor
REVGSU5FX1ZJU0lUX0NISUxEUkVOKEFic3RyYWN0TW9kdWxlUmVjb3JkKTsKKwogdm9pZCBBYnN0
cmFjdE1vZHVsZVJlY29yZDo6YXBwZW5kUmVxdWVzdGVkTW9kdWxlKGNvbnN0IElkZW50aWZpZXIm
IG1vZHVsZU5hbWUpCiB7CiAgICAgbV9yZXF1ZXN0ZWRNb2R1bGVzLmFkZChtb2R1bGVOYW1lLmlt
cGwoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BYnN0cmFjdE1vZHVs
ZVJlY29yZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Fi
c3RyYWN0TW9kdWxlUmVjb3JkLmgJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0Fic3RyYWN0TW9kdWxlUmVjb3JkLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEzNiw3ICsxMzYsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgQWJzdHJhY3RNb2R1bGVSZWNvcmQoVk0m
LCBTdHJ1Y3R1cmUqLCBjb25zdCBJZGVudGlmaWVyJik7CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlv
bihKU0dsb2JhbE9iamVjdCosIFZNJik7CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVu
KEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAog
ICAgIHZvaWQgc2V0TW9kdWxlRW52aXJvbm1lbnQoSlNHbG9iYWxPYmplY3QqLCBKU01vZHVsZUVu
dmlyb25tZW50Kik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FyZ0xp
c3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FyZ0xp
c3QuY3BwCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9BcmdMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTEsNyArNTEsNyBAQCB2b2lkIEFyZ0xp
c3Q6OmdldFNsaWNlKGludCBzdGFydEluZGV4LCBBCiAgICAgcmVzdWx0Lm1fYXJnQ291bnQgPSAg
bV9hcmdDb3VudCAtIHN0YXJ0SW5kZXg7CiB9CiAKLXZvaWQgTWFya2VkQXJndW1lbnRCdWZmZXI6
Om1hcmtMaXN0cyhTbG90VmlzaXRvciYgdmlzaXRvciwgTGlzdFNldCYgbWFya1NldCkKK3ZvaWQg
TWFya2VkQXJndW1lbnRCdWZmZXI6Om1hcmtMaXN0cyhBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNp
dG9yLCBMaXN0U2V0JiBtYXJrU2V0KQogewogICAgIExpc3RTZXQ6Oml0ZXJhdG9yIGVuZCA9IG1h
cmtTZXQuZW5kKCk7CiAgICAgZm9yIChMaXN0U2V0OjppdGVyYXRvciBpdCA9IG1hcmtTZXQuYmVn
aW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9BcmdMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvQXJnTGlzdC5oCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9BcmdMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTExOCw3ICsxMTgsNyBAQCBwdWJs
aWM6CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogICAgICAgICAKLSAgICBzdGF0aWMg
dm9pZCBtYXJrTGlzdHMoU2xvdFZpc2l0b3ImLCBMaXN0U2V0Jik7CisgICAgc3RhdGljIHZvaWQg
bWFya0xpc3RzKEFic3RyYWN0U2xvdFZpc2l0b3ImLCBMaXN0U2V0Jik7CiAKICAgICB2b2lkIGVu
c3VyZUNhcGFjaXR5KHNpemVfdCByZXF1ZXN0ZWRDYXBhY2l0eSkKICAgICB7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWFibGVJZGVudGlmaWVyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVhYmxlSWRlbnRpZmllci5o
CShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNo
ZWFibGVJZGVudGlmaWVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDEwICszOSwxMSBAQCB1c2lu
ZyBXVEY6OlVuaXF1ZWRTdHJpbmdJbXBsOwogCiBuYW1lc3BhY2UgSlNDIHsKIAorY2xhc3MgQWJz
dHJhY3RTbG90VmlzaXRvcjsKIGNsYXNzIENvZGVCbG9jazsKIGNsYXNzIElkZW50aWZpZXI7CiBj
bGFzcyBKU0NlbGw7Ci1jbGFzcyBTbG90VmlzaXRvcjsKKy8vY2xhc3MgU2xvdFZpc2l0b3I7CiAK
IGNsYXNzIENhY2hlYWJsZUlkZW50aWZpZXIgewogcHVibGljOgpAQCAtODcsNyArODgsOCBAQCBw
dWJsaWM6CiAKICAgICB1aW50cHRyX3QgcmF3Qml0cygpIGNvbnN0IHsgcmV0dXJuIG1fYml0czsg
fQogCi0gICAgaW5saW5lIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImKSBjb25zdDsK
Ky8vICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IGlubGluZSB2b2lkIHZpc2l0QWdncmVn
YXRlKFZpc2l0b3ImKSBjb25zdDsKKyAgICBpbmxpbmUgdm9pZCB2aXNpdEFnZ3JlZ2F0ZTEoQWJz
dHJhY3RTbG90VmlzaXRvciYpIGNvbnN0OwogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBk
dW1wKFByaW50U3RyZWFtJikgY29uc3Q7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0NhY2hlYWJsZUlkZW50aWZpZXJJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVhYmxlSWRlbnRpZmllcklubGluZXMuaAkocmV2
aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVhYmxl
SWRlbnRpZmllcklubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMTM3LDEyICsxMzcsMTYgQEAg
aW5saW5lIHZvaWQgQ2FjaGVhYmxlSWRlbnRpZmllcjo6c2V0VWlkQgogICAgIG1fYml0cyA9IGJp
dHdpc2VfY2FzdDx1aW50cHRyX3Q+KHVpZCkgfCBzX3VpZFRhZzsKIH0KIAotaW5saW5lIHZvaWQg
Q2FjaGVhYmxlSWRlbnRpZmllcjo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3Ip
IGNvbnN0CisvL3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+CisvL2lubGluZSB2b2lkIENhY2hl
YWJsZUlkZW50aWZpZXI6OnZpc2l0QWdncmVnYXRlKFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0Citp
bmxpbmUgdm9pZCBDYWNoZWFibGVJZGVudGlmaWVyOjp2aXNpdEFnZ3JlZ2F0ZTEoQWJzdHJhY3RT
bG90VmlzaXRvciYgdmlzaXRvcikgY29uc3QKIHsKICAgICBpZiAobV9iaXRzICYmIGlzQ2VsbCgp
KQogICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKGNlbGwoKSk7CiB9CiAKKy8vdGVt
cGxhdGUgdm9pZCBDYWNoZWFibGVJZGVudGlmaWVyOjp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRv
ciYpIGNvbnN0OworLy90ZW1wbGF0ZSB2b2lkIENhY2hlYWJsZUlkZW50aWZpZXI6OnZpc2l0QWdn
cmVnYXRlKERlYnVnU2xvdFZpc2l0b3ImKSBjb25zdDsKIAogaW5saW5lIGJvb2wgQ2FjaGVhYmxl
SWRlbnRpZmllcjo6b3BlcmF0b3I9PShjb25zdCBDYWNoZWFibGVJZGVudGlmaWVyJiBvdGhlcikg
Y29uc3QKIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NsYXNzSW5mby5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NsYXNzSW5mby5o
CShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DbGFz
c0luZm8uaAkod29ya2luZyBjb3B5KQpAQCAtNDQsOSArNDQsNiBAQCBzdHJ1Y3QgTWV0aG9kVGFi
bGUgewogICAgIHVzaW5nIERlc3Ryb3lGdW5jdGlvblB0ciA9IHZvaWQgKCopKEpTQ2VsbCopOwog
ICAgIERlc3Ryb3lGdW5jdGlvblB0ciBNRVRIT0RfVEFCTEVfRU5UUlkoZGVzdHJveSk7CiAKLSAg
ICB1c2luZyBWaXNpdENoaWxkcmVuRnVuY3Rpb25QdHIgPSB2b2lkICgqKShKU0NlbGwqLCBTbG90
VmlzaXRvciYpOwotICAgIFZpc2l0Q2hpbGRyZW5GdW5jdGlvblB0ciBNRVRIT0RfVEFCTEVfRU5U
UlkodmlzaXRDaGlsZHJlbik7Ci0KICAgICB1c2luZyBHZXRDYWxsRGF0YUZ1bmN0aW9uUHRyID0g
Q2FsbERhdGEgKCopKEpTQ2VsbCopOwogICAgIEdldENhbGxEYXRhRnVuY3Rpb25QdHIgTUVUSE9E
X1RBQkxFX0VOVFJZKGdldENhbGxEYXRhKTsKIApAQCAtMTIwLDcgKzExNywxOCBAQCBzdHJ1Y3Qg
TWV0aG9kVGFibGUgewogICAgIHVzaW5nIEVzdGltYXRlZFNpemVGdW5jdGlvblB0ciA9IHNpemVf
dCAoKikoSlNDZWxsKiwgVk0mKTsKICAgICBFc3RpbWF0ZWRTaXplRnVuY3Rpb25QdHIgTUVUSE9E
X1RBQkxFX0VOVFJZKGVzdGltYXRlZFNpemUpOwogCi0gICAgdXNpbmcgVmlzaXRPdXRwdXRDb25z
dHJhaW50c1B0ciA9IHZvaWQgKCopKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgdXNpbmcg
VmlzaXRDaGlsZHJlbkZ1bmN0aW9uUHRyID0gdm9pZCAoKikoSlNDZWxsKiwgU2xvdFZpc2l0b3Im
KTsKKyAgICBWaXNpdENoaWxkcmVuRnVuY3Rpb25QdHIgTUVUSE9EX1RBQkxFX0VOVFJZKHZpc2l0
Q2hpbGRyZW5XaXRoU2xvdFZpc2l0b3IpOworCisvLyAgICB1c2luZyBWaXNpdENoaWxkcmVuV2l0
aERlYnVnU2xvdFZpc2l0b3JQdHIgPSB2b2lkICgqKShKU0NlbGwqLCBEZWJ1Z1Nsb3RWaXNpdG9y
Jik7CisgICAgdXNpbmcgVmlzaXRDaGlsZHJlbldpdGhBYnN0cmFjdFNsb3RWaXNpdG9yUHRyID0g
dm9pZCAoKikoSlNDZWxsKiwgQWJzdHJhY3RTbG90VmlzaXRvciYpOworICAgIFZpc2l0Q2hpbGRy
ZW5XaXRoQWJzdHJhY3RTbG90VmlzaXRvclB0ciBNRVRIT0RfVEFCTEVfRU5UUlkodmlzaXRDaGls
ZHJlbldpdGhBYnN0cmFjdFNsb3RWaXNpdG9yKTsKKworICAgIEFMV0FZU19JTkxJTkUgdm9pZCB2
aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0IHsg
dmlzaXRDaGlsZHJlbldpdGhTbG90VmlzaXRvcihjZWxsLCB2aXNpdG9yKTsgfQorLy8gICAgQUxX
QVlTX0lOTElORSB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBEZWJ1Z1Nsb3RWaXNp
dG9yJiB2aXNpdG9yKSBjb25zdCB7IHZpc2l0Q2hpbGRyZW5XaXRoRGVidWdTbG90VmlzaXRvcihj
ZWxsLCB2aXNpdG9yKTsgfQorICAgIEFMV0FZU19JTkxJTkUgdm9pZCB2aXNpdENoaWxkcmVuKEpT
Q2VsbCogY2VsbCwgQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikgY29uc3QgeyB2aXNpdENo
aWxkcmVuV2l0aEFic3RyYWN0U2xvdFZpc2l0b3IoY2VsbCwgdmlzaXRvcik7IH0KKworICAgIHVz
aW5nIFZpc2l0T3V0cHV0Q29uc3RyYWludHNQdHIgPSB2b2lkICgqKShKU0NlbGwqLCBBYnN0cmFj
dFNsb3RWaXNpdG9yJik7CiAgICAgVmlzaXRPdXRwdXRDb25zdHJhaW50c1B0ciBNRVRIT0RfVEFC
TEVfRU5UUlkodmlzaXRPdXRwdXRDb25zdHJhaW50cyk7CiB9OwogCkBAIC0xNDcsNyArMTU1LDYg
QEAgc3RydWN0IE1ldGhvZFRhYmxlIHsKICAgICBKU0Nhc3RpbmdIZWxwZXJzOjpJbmhlcml0c1Ry
YWl0czxDbGFzc05hbWU+Ojp0eXBlUmFuZ2UsIFwKICAgICB7IFwKICAgICAgICAgJkNsYXNzTmFt
ZTo6ZGVzdHJveSwgXAotICAgICAgICAmQ2xhc3NOYW1lOjp2aXNpdENoaWxkcmVuLCBcCiAgICAg
ICAgICZDbGFzc05hbWU6OmdldENhbGxEYXRhLCBcCiAgICAgICAgICZDbGFzc05hbWU6OmdldENv
bnN0cnVjdERhdGEsIFwKICAgICAgICAgJkNsYXNzTmFtZTo6cHV0LCBcCkBAIC0xNzMsNiArMTgw
LDggQEAgc3RydWN0IE1ldGhvZFRhYmxlIHsKICAgICAgICAgJkNsYXNzTmFtZTo6ZHVtcFRvU3Ry
ZWFtLCBcCiAgICAgICAgICZDbGFzc05hbWU6OmFuYWx5emVIZWFwLCBcCiAgICAgICAgICZDbGFz
c05hbWU6OmVzdGltYXRlZFNpemUsIFwKKyAgICAgICAgJkNsYXNzTmFtZTo6dmlzaXRDaGlsZHJl
biwgXAorICAgICAgICAmQ2xhc3NOYW1lOjp2aXNpdENoaWxkcmVuLCBcCiAgICAgICAgICZDbGFz
c05hbWU6OnZpc2l0T3V0cHV0Q29uc3RyYWludHMsIFwKICAgICB9LCBcCiAgICAgQ2xhc3NOYW1l
OjpUeXBlZEFycmF5U3RvcmFnZVR5cGUsIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0Nsb25lZEFyZ3VtZW50cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQ2xvbmVkQXJndW1lbnRzLmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xvbmVkQXJndW1lbnRzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjY3LDcgKzI2Nyw4IEBAIHZvaWQgQ2xvbmVkQXJndW1lbnRzOjptYXRlcmlh
bGl6ZVNwZWNpYWwKICAgICAgICAgbWF0ZXJpYWxpemVTcGVjaWFscyhnbG9iYWxPYmplY3QpOwog
fQogCi12b2lkIENsb25lZEFyZ3VtZW50czo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgQ2xv
bmVkQXJndW1lbnRzOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZp
c2l0b3IpCiB7CiAgICAgQ2xvbmVkQXJndW1lbnRzKiB0aGlzT2JqZWN0ID0ganNDYXN0PENsb25l
ZEFyZ3VtZW50cyo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09i
amVjdCwgaW5mbygpKTsKQEAgLTI3NSw1ICsyNzYsNyBAQCB2b2lkIENsb25lZEFyZ3VtZW50czo6
dmlzaXRDaGlsZHJlbihKU0NlCiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9jYWxs
ZWUpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oQ2xvbmVkQXJndW1lbnRzKTsKKwogfSAv
LyBuYW1lc3BhY2UgSlNDCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Ns
b25lZEFyZ3VtZW50cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0Nsb25lZEFyZ3VtZW50cy5oCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9DbG9uZWRBcmd1bWVudHMuaAkod29ya2luZyBjb3B5KQpAQCAtNjIs
NyArNjIsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJl
KFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlIHByb3RvdHlwZSk7CiAgICAgc3RhdGljIFN0
cnVjdHVyZSogY3JlYXRlU2xvd1B1dFN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNW
YWx1ZSBwcm90b3R5cGUpOwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwq
LCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBERUNM
QVJFX0lORk87CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVjdEFy
Z3VtZW50cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
RGlyZWN0QXJndW1lbnRzLmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvRGlyZWN0QXJndW1lbnRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTAs
NyArOTAsOCBAQCBzaXplX3QgRGlyZWN0QXJndW1lbnRzOjplc3RpbWF0ZWRTaXplKEpTCiAgICAg
cmV0dXJuIEJhc2U6OmVzdGltYXRlZFNpemUoY2VsbCwgdm0pICsgbWFwcGVkQXJndW1lbnRzU2l6
ZSArIG1vZGlmaWVkQXJndW1lbnRzU2l6ZTsKIH0KIAotdm9pZCBEaXJlY3RBcmd1bWVudHM6OnZp
c2l0Q2hpbGRyZW4oSlNDZWxsKiB0aGlzQ2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1w
bGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBEaXJlY3RBcmd1bWVudHM6OnZpc2l0Q2hpbGRy
ZW5JbXBsKEpTQ2VsbCogdGhpc0NlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgRGlyZWN0
QXJndW1lbnRzKiB0aGlzT2JqZWN0ID0gc3RhdGljX2Nhc3Q8RGlyZWN0QXJndW1lbnRzKj4odGhp
c0NlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygp
KTsKQEAgLTEwNCw2ICsxMDUsOCBAQCB2b2lkIERpcmVjdEFyZ3VtZW50czo6dmlzaXRDaGlsZHJl
bihKU0NlCiAgICAgR2VuZXJpY0FyZ3VtZW50czxEaXJlY3RBcmd1bWVudHM+Ojp2aXNpdENoaWxk
cmVuKHRoaXNDZWxsLCB2aXNpdG9yKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKERpcmVj
dEFyZ3VtZW50cyk7CisKIFN0cnVjdHVyZSogRGlyZWN0QXJndW1lbnRzOjpjcmVhdGVTdHJ1Y3R1
cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlw
ZSkKIHsKICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJv
dG90eXBlLCBUeXBlSW5mbyhEaXJlY3RBcmd1bWVudHNUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGlu
Zm8oKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EaXJlY3RBcmd1bWVu
dHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EaXJlY3RB
cmd1bWVudHMuaAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvRGlyZWN0QXJndW1lbnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTY1LDcgKzY1LDcgQEAg
cHVibGljOgogICAgIHN0YXRpYyBEaXJlY3RBcmd1bWVudHMqIGNyZWF0ZUJ5Q29weWluZyhKU0ds
b2JhbE9iamVjdCosIENhbGxGcmFtZSopOwogCiAgICAgc3RhdGljIHNpemVfdCBlc3RpbWF0ZWRT
aXplKEpTQ2VsbCosIFZNJik7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwq
LCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAgICAgCiAgICAg
dWludDMyX3QgaW50ZXJuYWxMZW5ndGgoKSBjb25zdAogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0V2YWxFeGVjdXRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FdmFsRXhlY3V0YWJsZS5jcHAJKHJldmlzaW9uIDI3
MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V2YWxFeGVjdXRhYmxlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDksNyArNDksOCBAQCBhdXRvIEV2YWxFeGVjdXRhYmxlOjpl
bnN1cmVUZW1wbGF0ZU9iamVjCiAgICAgcmV0dXJuIGVuc3VyZVRlbXBsYXRlT2JqZWN0TWFwSW1w
bChtX3RlbXBsYXRlT2JqZWN0TWFwKTsKIH0KIAotdm9pZCBFdmFsRXhlY3V0YWJsZTo6dmlzaXRD
aGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlw
ZW5hbWUgVmlzaXRvcj4KK3ZvaWQgRXZhbEV4ZWN1dGFibGU6OnZpc2l0Q2hpbGRyZW5JbXBsKEpT
Q2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBFdmFsRXhlY3V0YWJsZSogdGhp
c09iamVjdCA9IGpzQ2FzdDxFdmFsRXhlY3V0YWJsZSo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19P
QkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTYzLDQgKzY0LDYgQEAgdm9p
ZCBFdmFsRXhlY3V0YWJsZTo6dmlzaXRDaGlsZHJlbihKU0NlbAogICAgIH0KIH0KIAorREVGSU5F
X1ZJU0lUX0NISUxEUkVOKEV2YWxFeGVjdXRhYmxlKTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FdmFsRXhlY3V0YWJsZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V2YWxFeGVjdXRhYmxlLmgJ
KHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V2YWxF
eGVjdXRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTc4LDcgKzc4LDcgQEAgcHJvdGVjdGVkOgog
ICAgIHVzaW5nIEJhc2U6OmZpbmlzaENyZWF0aW9uOwogICAgIEV2YWxFeGVjdXRhYmxlKEpTR2xv
YmFsT2JqZWN0KiwgY29uc3QgU291cmNlQ29kZSYsIGJvb2wgaW5TdHJpY3RDb250ZXh0LCBEZXJp
dmVkQ29udGV4dFR5cGUsIGJvb2wgaXNBcnJvd0Z1bmN0aW9uQ29udGV4dCwgYm9vbCBpc0luc2lk
ZU9yZGluYXJ5RnVuY3Rpb24sIEV2YWxDb250ZXh0VHlwZSwgTmVlZHNDbGFzc0ZpZWxkSW5pdGlh
bGl6ZXIpOwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90Vmlz
aXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICB1bnNpZ25lZCBtX25l
ZWRzQ2xhc3NGaWVsZEluaXRpYWxpemVyIDogMTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvRXhjZXB0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9FeGNlcHRpb24uY3BwCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGNlcHRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01
Myw3ICs1Myw4IEBAIFN0cnVjdHVyZSogRXhjZXB0aW9uOjpjcmVhdGVTdHJ1Y3R1cmUoVk0KICAg
ICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBU
eXBlSW5mbyhDZWxsVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwogfQogCi12b2lkIEV4
Y2VwdGlvbjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9y
KQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgRXhjZXB0aW9uOjp2aXNpdENoaWxk
cmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgRXhjZXB0aW9u
KiB0aGlzT2JqZWN0ID0ganNDYXN0PEV4Y2VwdGlvbio+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19P
QkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTY0LDYgKzY1LDggQEAgdm9p
ZCBFeGNlcHRpb246OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZQogICAgICAgICBmcmFtZS52aXNp
dENoaWxkcmVuKHZpc2l0b3IpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oRXhjZXB0aW9u
KTsKKwogRXhjZXB0aW9uOjpFeGNlcHRpb24oVk0mIHZtKQogICAgIDogQmFzZSh2bSwgdm0uZXhj
ZXB0aW9uU3RydWN0dXJlLmdldCgpKQogewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvRXhjZXB0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvRXhjZXB0aW9uLmgJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0V4Y2VwdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC01MSw3ICs1MSw3IEBA
IHB1YmxpYzoKIAogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpT
R2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBwcm90b3R5cGUpOwogCi0gICAgc3RhdGljIHZvaWQgdmlz
aXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJ
TERSRU47CiAKICAgICBERUNMQVJFX0VYUE9SVF9JTkZPOwogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9GdW5jdGlvbkV4ZWN1dGFibGUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZS5jcHAJKHJldmlz
aW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uRXhl
Y3V0YWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY3LDcgKzY3LDggQEAgRnVuY3Rpb25Db2Rl
QmxvY2sqIEZ1bmN0aW9uRXhlY3V0YWJsZTo6YgogICAgIHJldHVybiBzdGF0aWNfY2FzdDxGdW5j
dGlvbkNvZGVCbG9jayo+KGVkZ2UtPmNvZGVCbG9jaygpLT5iYXNlbGluZUFsdGVybmF0aXZlKCkp
OwogfQogCi12b2lkIEZ1bmN0aW9uRXhlY3V0YWJsZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNl
bGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3Zv
aWQgRnVuY3Rpb25FeGVjdXRhYmxlOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZp
c2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiB0aGlzT2JqZWN0ID0g
anNDYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1Rf
SU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTg2LDYgKzg3LDggQEAgdm9pZCBGdW5j
dGlvbkV4ZWN1dGFibGU6OnZpc2l0Q2hpbGRyZW4oSgogICAgIH0KIH0KIAorREVGSU5FX1ZJU0lU
X0NISUxEUkVOKEZ1bmN0aW9uRXhlY3V0YWJsZSk7CisKIEZ1bmN0aW9uRXhlY3V0YWJsZSogRnVu
Y3Rpb25FeGVjdXRhYmxlOjpmcm9tR2xvYmFsQ29kZSgKICAgICBjb25zdCBJZGVudGlmaWVyJiBu
YW1lLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBTb3VyY2VDb2RlJiBzb3Vy
Y2UsIAogICAgIEpTT2JqZWN0KiYgZXhjZXB0aW9uLCBpbnQgb3ZlcnJpZGVMaW5lTnVtYmVyLCBP
cHRpb25hbDxpbnQ+IGZ1bmN0aW9uQ29uc3RydWN0b3JQYXJhbWV0ZXJzRW5kUG9zaXRpb24pCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvbkV4ZWN1dGFibGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvbkV4ZWN1
dGFibGUuaAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvRnVuY3Rpb25FeGVjdXRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE2Niw3ICsxNjYsNyBA
QCBwdWJsaWM6CiAgICAgSlNQYXJzZXJTY3JpcHRNb2RlIHNjcmlwdE1vZGUoKSBjb25zdCB7IHJl
dHVybiBtX3VubGlua2VkRXhlY3V0YWJsZS0+c2NyaXB0TW9kZSgpOyB9CiAgICAgU291cmNlQ29k
ZSBjbGFzc1NvdXJjZSgpIGNvbnN0IHsgcmV0dXJuIG1fdW5saW5rZWRFeGVjdXRhYmxlLT5jbGFz
c1NvdXJjZSgpOyB9CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNs
b3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKICAgICBzdGF0aWMgU3Ry
dWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBKU1ZhbHVlIHByb3RvKQogICAgIHsKICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3Jl
YXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvLCBUeXBlSW5mbyhGdW5jdGlvbkV4ZWN1dGFibGVU
eXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9GdW5jdGlvblJhcmVEYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvblJhcmVEYXRhLmNwcAkocmV2aXNpb24gMjcxNDQz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25SYXJlRGF0YS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTUxLDcgKzUxLDggQEAgU3RydWN0dXJlKiBGdW5jdGlvblJhcmVE
YXRhOjpjcmVhdGVTdHJ1YwogICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFs
T2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKENlbGxUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGlu
Zm8oKSk7CiB9CiAKLXZvaWQgRnVuY3Rpb25SYXJlRGF0YTo6dmlzaXRDaGlsZHJlbihKU0NlbGwq
IGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4K
K3ZvaWQgRnVuY3Rpb25SYXJlRGF0YTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBW
aXNpdG9yJiB2aXNpdG9yKQogewogICAgIEZ1bmN0aW9uUmFyZURhdGEqIHJhcmVEYXRhID0ganND
YXN0PEZ1bmN0aW9uUmFyZURhdGEqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVS
SVRTKGNlbGwsIGluZm8oKSk7CkBAIC02Myw2ICs2NCw4IEBAIHZvaWQgRnVuY3Rpb25SYXJlRGF0
YTo6dmlzaXRDaGlsZHJlbihKU0MKICAgICB2aXNpdG9yLmFwcGVuZChyYXJlRGF0YS0+bV9leGVj
dXRhYmxlKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEZ1bmN0aW9uUmFyZURhdGEpOwor
CiBGdW5jdGlvblJhcmVEYXRhOjpGdW5jdGlvblJhcmVEYXRhKFZNJiB2bSwgRXhlY3V0YWJsZUJh
c2UqIGV4ZWN1dGFibGUpCiAgICAgOiBCYXNlKHZtLCB2bS5mdW5jdGlvblJhcmVEYXRhU3RydWN0
dXJlLmdldCgpKQogICAgICwgbV9vYmplY3RBbGxvY2F0aW9uUHJvZmlsZSgpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvblJhcmVEYXRhLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25SYXJlRGF0YS5oCShyZXZp
c2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvblJh
cmVEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTY1LDcgKzY1LDcgQEAgcHVibGljOgogCiAgICAg
c3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBK
U1ZhbHVlIHByb3RvdHlwZSk7CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2Vs
bCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIERF
Q0xBUkVfSU5GTzsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJp
Y0FyZ3VtZW50cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0dlbmVyaWNBcmd1bWVudHMuaAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCw3
ICs0NCw3IEBAIHByb3RlY3RlZDoKICAgICB7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgdmlz
aXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVEVNUExBVEVf
VklTSVRfQ0hJTERSRU47CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTT2Jq
ZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwogICAg
IHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNPYmplY3QqLCBKU0dsb2Jh
bE9iamVjdCosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CiAgICAgc3Rh
dGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0Kiwg
UHJvcGVydHlOYW1lQXJyYXkmLCBEb250RW51bVByb3BlcnRpZXNNb2RlKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNBcmd1bWVudHNJbmxpbmVzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50c0lu
bGluZXMuaAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvR2VuZXJpY0FyZ3VtZW50c0lubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEs
OCBAQAogbmFtZXNwYWNlIEpTQyB7CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFR5cGU+Ci12b2lkIEdl
bmVyaWNBcmd1bWVudHM8VHlwZT46OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiB0aGlzQ2VsbCwgU2xv
dFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBHZW5l
cmljQXJndW1lbnRzPFR5cGU+Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIHRoaXNDZWxsLCBW
aXNpdG9yJiB2aXNpdG9yKQogewogICAgIFR5cGUqIHRoaXNPYmplY3QgPSBzdGF0aWNfY2FzdDxU
eXBlKj4odGhpc0NlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVj
dCwgaW5mbygpKTsKQEAgLTQxLDYgKzQyLDggQEAgdm9pZCBHZW5lcmljQXJndW1lbnRzPFR5cGU+
Ojp2aXNpdENoaWxkcgogICAgICAgICB2aXNpdG9yLm1hcmtBdXhpbGlhcnkodGhpc09iamVjdC0+
bV9tb2RpZmllZEFyZ3VtZW50c0Rlc2NyaXB0b3IuZ2V0VW5zYWZlKCkpOwogfQogCitERUZJTkVf
VEVNUExBVEVfVklTSVRfQ0hJTERSRU4odGVtcGxhdGU8dHlwZW5hbWUgVHlwZT4sIEdlbmVyaWNB
cmd1bWVudHM8VHlwZT4pOworCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlPgogYm9vbCBHZW5lcmlj
QXJndW1lbnRzPFR5cGU+OjpnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqIG9iamVjdCwgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lIGlkZW50LCBQcm9wZXJ0eVNs
b3QmIHNsb3QpCiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZXR0ZXJT
ZXR0ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dl
dHRlclNldHRlci5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0dldHRlclNldHRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDcgKzMzLDgg
QEAgU1RBVElDX0FTU0VSVF9JU19UUklWSUFMTFlfREVTVFJVQ1RJQkxFKAogCiBjb25zdCBDbGFz
c0luZm8gR2V0dGVyU2V0dGVyOjpzX2luZm8gPSB7ICJHZXR0ZXJTZXR0ZXIiLCBudWxscHRyLCBu
dWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEdldHRlclNldHRlcikgfTsKIAot
dm9pZCBHZXR0ZXJTZXR0ZXI6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRv
ciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEdldHRlclNldHRl
cjo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewog
ICAgIEdldHRlclNldHRlciogdGhpc09iamVjdCA9IGpzQ2FzdDxHZXR0ZXJTZXR0ZXIqPihjZWxs
KTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBA
IC00Myw2ICs0NCw4IEBAIHZvaWQgR2V0dGVyU2V0dGVyOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCoK
ICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX3NldHRlcik7CiB9CiAKK0RFRklORV9W
SVNJVF9DSElMRFJFTihHZXR0ZXJTZXR0ZXIpOworCiBKU1ZhbHVlIGNhbGxHZXR0ZXIoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBiYXNlLCBKU1ZhbHVlIGdldHRlclNldHRl
cikKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9HZXR0ZXJTZXR0ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9HZXR0ZXJTZXR0ZXIuaAkocmV2aXNpb24gMjcxNDQzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2V0dGVyU2V0dGVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTgyLDcgKzgyLDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gY3JlYXRlKHZt
LCBnbG9iYWxPYmplY3QsIGdldHRlck9iamVjdCwgc2V0dGVyT2JqZWN0KTsKICAgICB9CiAKLSAg
ICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAg
REVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIEpTT2JqZWN0KiBnZXR0ZXIoKSBjb25zdCB7
IHJldHVybiBtX2dldHRlci5nZXQoKTsgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9IYXNoTWFwSW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSGFzaE1hcEltcGwuY3BwCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9IYXNoTWFwSW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMwLDYgKzMwLDkgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKK0RFRklORV9URU1QTEFURV9WSVNJ
VF9DSElMRFJFTih0ZW1wbGF0ZTw+LCBIYXNoTWFwQnVja2V0PEhhc2hNYXBCdWNrZXREYXRhS2V5
Pik7CitERUZJTkVfVEVNUExBVEVfVklTSVRfQ0hJTERSRU4odGVtcGxhdGU8PiwgSGFzaE1hcEJ1
Y2tldDxIYXNoTWFwQnVja2V0RGF0YUtleVZhbHVlPik7CisKIHRlbXBsYXRlPD4KIGNvbnN0IENs
YXNzSW5mbyBIYXNoTWFwQnVja2V0PEhhc2hNYXBCdWNrZXREYXRhS2V5Pjo6c19pbmZvID0KICAg
ICB7ICJIYXNoTWFwQnVja2V0IiwgbnVsbHB0ciwgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01F
VEhPRF9UQUJMRShIYXNoTWFwQnVja2V0PEhhc2hNYXBCdWNrZXREYXRhS2V5PikgfTsKQEAgLTM4
LDggKzQxLDkgQEAgdGVtcGxhdGU8PgogY29uc3QgQ2xhc3NJbmZvIEhhc2hNYXBCdWNrZXQ8SGFz
aE1hcEJ1Y2tldERhdGFLZXlWYWx1ZT46OnNfaW5mbyA9CiAgICAgeyAiSGFzaE1hcEJ1Y2tldCIs
IG51bGxwdHIsIG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSGFzaE1hcEJ1
Y2tldDxIYXNoTWFwQnVja2V0RGF0YUtleVZhbHVlPikgfTsKIAotdGVtcGxhdGUgPHR5cGVuYW1l
IERhdGE+Ci12b2lkIEhhc2hNYXBCdWNrZXQ8RGF0YT46OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBj
ZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIERhdGE+Cit0ZW1w
bGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBIYXNoTWFwQnVja2V0PERhdGE+Ojp2aXNpdENo
aWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSGFzaE1h
cEJ1Y2tldCogdGhpc09iamVjdCA9IGpzQ2FzdDxIYXNoTWFwQnVja2V0Kj4oY2VsbCk7CiAgICAg
QVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNTIsOCAr
NTYsOSBAQCB2b2lkIEhhc2hNYXBCdWNrZXQ8RGF0YT46OnZpc2l0Q2hpbGRyZW4oCiAgICAgdmlz
aXRvci5hcHBlbmRWYWx1ZXMoYml0d2lzZV9jYXN0PFdyaXRlQmFycmllcjxVbmtub3duPio+KCZ0
aGlzT2JqZWN0LT5tX2RhdGEpLCBzaXplb2YoRGF0YSkgLyBzaXplb2YoV3JpdGVCYXJyaWVyPFVu
a25vd24+KSk7CiB9CiAKLXRlbXBsYXRlIDx0eXBlbmFtZSBIYXNoTWFwQnVja2V0Pgotdm9pZCBI
YXNoTWFwSW1wbDxIYXNoTWFwQnVja2V0Pjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgSGFzaE1hcEJ1Y2tldD4KK3Rl
bXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEhhc2hNYXBJbXBsPEhhc2hNYXBCdWNrZXQ+
Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAg
ICAgSGFzaE1hcEltcGwqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SGFzaE1hcEltcGwqPihjZWxsKTsK
ICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC02
Niw2ICs3MSw4IEBAIHZvaWQgSGFzaE1hcEltcGw8SGFzaE1hcEJ1Y2tldD46OnZpc2l0Q2gKICAg
ICAgICAgdmlzaXRvci5tYXJrQXV4aWxpYXJ5KGJ1ZmZlcik7CiB9CiAKK0RFRklORV9URU1QTEFU
RV9WSVNJVF9DSElMRFJFTih0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoTWFwQnVja2V0PiwgSGFzaE1h
cEltcGw8SGFzaE1hcEJ1Y2tldD4pOworCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgSGFzaE1hcEJ1Y2tl
dD4KIHNpemVfdCBIYXNoTWFwSW1wbDxIYXNoTWFwQnVja2V0Pjo6ZXN0aW1hdGVkU2l6ZShKU0Nl
bGwqIGNlbGwsIFZNJiB2bSkKIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0hhc2hNYXBJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSGFzaE1hcEltcGwuaAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSGFzaE1hcEltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtMTQ4LDcgKzE0OCw3
IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fZGF0YS52YWx1ZS5nZXQoKTsKICAgICB9CiAK
LSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7Cisg
ICAgREVDTEFSRV9URU1QTEFURV9WSVNJVF9DSElMRFJFTjsKIAogICAgIEFMV0FZU19JTkxJTkUg
SGFzaE1hcEJ1Y2tldCogbmV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fbmV4dC5nZXQoKTsgfQogICAg
IEFMV0FZU19JTkxJTkUgSGFzaE1hcEJ1Y2tldCogcHJldigpIGNvbnN0IHsgcmV0dXJuIG1fcHJl
di5nZXQoKTsgfQpAQCAtMzY0LDcgKzM2NCw3IEBAIGNsYXNzIEhhc2hNYXBJbXBsIDogcHVibGlj
IEpTTm9uRmluYWxPYmoKIHB1YmxpYzoKICAgICB1c2luZyBCdWNrZXRUeXBlID0gSGFzaE1hcEJ1
Y2tldFR5cGU7CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RW
aXNpdG9yJik7CisgICAgREVDTEFSRV9URU1QTEFURV9WSVNJVF9DSElMRFJFTjsKIAogICAgIHN0
YXRpYyBzaXplX3QgZXN0aW1hdGVkU2l6ZShKU0NlbGwqLCBWTSYpOwogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRlcm5hbEZ1bmN0aW9uLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRlcm5hbEZ1bmN0aW9uLmNwcAkocmV2
aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50ZXJuYWxG
dW5jdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY0LDcgKzY0LDggQEAgdm9pZCBJbnRlcm5h
bEZ1bmN0aW9uOjpmaW5pc2hDcmVhdGlvbihWTQogICAgIH0KIH0KIAotdm9pZCBJbnRlcm5hbEZ1
bmN0aW9uOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3Ip
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBJbnRlcm5hbEZ1bmN0aW9uOjp2aXNp
dENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSW50
ZXJuYWxGdW5jdGlvbiogdGhpc09iamVjdCA9IGpzQ2FzdDxJbnRlcm5hbEZ1bmN0aW9uKj4oY2Vs
bCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpA
QCAtNzMsNiArNzQsOCBAQCB2b2lkIEludGVybmFsRnVuY3Rpb246OnZpc2l0Q2hpbGRyZW4oSlND
CiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9vcmlnaW5hbE5hbWUpOwogfQogCitE
RUZJTkVfRVhQT1JUX1ZJU0lUX0NISUxEUkVOKEludGVybmFsRnVuY3Rpb24pOworCiBjb25zdCBT
dHJpbmcmIEludGVybmFsRnVuY3Rpb246Om5hbWUoKQogewogICAgIGNvbnN0IFN0cmluZyYgbmFt
ZSA9IG1fb3JpZ2luYWxOYW1lLT50cnlHZXRWYWx1ZSgpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSW50ZXJuYWxGdW5jdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGVybmFsRnVuY3Rpb24uaAkocmV2aXNpb24gMjcxNDQz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50ZXJuYWxGdW5jdGlvbi5oCSh3
b3JraW5nIGNvcHkpCkBAIC00Niw3ICs0Niw3IEBAIHB1YmxpYzoKIAogICAgIERFQ0xBUkVfRVhQ
T1JUX0lORk87CiAKLSAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCB2aXNpdENoaWxk
cmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9FWFBPUlRfVklTSVRfQ0hJ
TERSRU47CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSBjb25zdCBTdHJpbmcmIG5hbWUoKTsKICAg
ICBjb25zdCBTdHJpbmcgZGlzcGxheU5hbWUoVk0mKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0ludGxDb2xsYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSW50bENvbGxhdG9yLmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bENvbGxhdG9yLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNjUsNyArNjUsOCBAQCB2b2lkIEludGxDb2xsYXRvcjo6ZmluaXNoQ3JlYXRpb24o
Vk0mIHZtCiAgICAgQVNTRVJUKGluaGVyaXRzKHZtLCBpbmZvKCkpKTsKIH0KIAotdm9pZCBJbnRs
Q29sbGF0b3I6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRv
cikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEludGxDb2xsYXRvcjo6dmlzaXRD
aGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEludGxD
b2xsYXRvciogdGhpc09iamVjdCA9IGpzQ2FzdDxJbnRsQ29sbGF0b3IqPihjZWxsKTsKICAgICBB
U1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC03NSw2ICs3
Niw4IEBAIHZvaWQgSW50bENvbGxhdG9yOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCoKICAgICB2aXNp
dG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2JvdW5kQ29tcGFyZSk7CiB9CiAKK0RFRklORV9WSVNJ
VF9DSElMRFJFTihJbnRsQ29sbGF0b3IpOworCiBWZWN0b3I8U3RyaW5nPiBJbnRsQ29sbGF0b3I6
OnNvcnRMb2NhbGVEYXRhKGNvbnN0IFN0cmluZyYgbG9jYWxlLCBSZWxldmFudEV4dGVuc2lvbktl
eSBrZXkpCiB7CiAgICAgLy8gOS4xIEludGVybmFsIHNsb3RzIG9mIFNlcnZpY2UgQ29uc3RydWN0
b3JzICYgMTAuMi4zIEludGVybmFsIHNsb3RzIChFQ01BLTQwMiAyLjApCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsQ29sbGF0b3IuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsQ29sbGF0b3IuaAkocmV2aXNpb24gMjcxNDQz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bENvbGxhdG9yLmgJKHdvcmtp
bmcgY29weSkKQEAgLTgwLDcgKzgwLDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBJbnRsQ29s
bGF0b3IoVk0mLCBTdHJ1Y3R1cmUqKTsKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7Ci0g
ICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAg
IERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBib29sIHVwZGF0ZUNhbkRvQVNDSUlVQ0FE
VUNFVENvbXBhcmlzb24oKSBjb25zdDsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSW50bERhdGVUaW1lRm9ybWF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9JbnRsRGF0ZVRpbWVGb3JtYXQuY3BwCShyZXZpc2lvbiAyNzE0NDMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsRGF0ZVRpbWVGb3JtYXQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC05MCw3ICs5MCw4IEBAIHZvaWQgSW50bERhdGVUaW1lRm9ybWF0
OjpmaW5pc2hDcmVhdGlvbigKICAgICBBU1NFUlQoaW5oZXJpdHModm0sIGluZm8oKSkpOwogfQog
Ci12b2lkIEludGxEYXRlVGltZUZvcm1hdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSW50
bERhdGVUaW1lRm9ybWF0Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3Im
IHZpc2l0b3IpCiB7CiAgICAgSW50bERhdGVUaW1lRm9ybWF0KiB0aGlzT2JqZWN0ID0ganNDYXN0
PEludGxEYXRlVGltZUZvcm1hdCo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJ
VFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTEwMCw2ICsxMDEsOCBAQCB2b2lkIEludGxEYXRl
VGltZUZvcm1hdDo6dmlzaXRDaGlsZHJlbihKCiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVj
dC0+bV9ib3VuZEZvcm1hdCk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihJbnRsRGF0ZVRp
bWVGb3JtYXQpOworCiB2b2lkIEludGxEYXRlVGltZUZvcm1hdDo6c2V0Qm91bmRGb3JtYXQoVk0m
IHZtLCBKU0JvdW5kRnVuY3Rpb24qIGZvcm1hdCkKIHsKICAgICBtX2JvdW5kRm9ybWF0LnNldCh2
bSwgdGhpcywgZm9ybWF0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lu
dGxEYXRlVGltZUZvcm1hdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0ludGxEYXRlVGltZUZvcm1hdC5oCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsRGF0ZVRpbWVGb3JtYXQuaAkod29ya2luZyBjb3B5
KQpAQCAtODUsNyArODUsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIEludGxEYXRlVGltZUZv
cm1hdChWTSYsIFN0cnVjdHVyZSopOwogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKLSAg
ICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAg
REVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIHN0YXRpYyBWZWN0b3I8U3RyaW5nPiBsb2Nh
bGVEYXRhKGNvbnN0IFN0cmluZyYsIFJlbGV2YW50RXh0ZW5zaW9uS2V5KTsKIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bExvY2FsZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bExvY2FsZS5jcHAJKHJldmlzaW9uIDI3
MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxMb2NhbGUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC01OCw3ICs1OCw4IEBAIHZvaWQgSW50bExvY2FsZTo6ZmluaXNoQ3Jl
YXRpb24oVk0mIHZtKQogICAgIEFTU0VSVChpbmhlcml0cyh2bSwgaW5mbygpKSk7CiB9CiAKLXZv
aWQgSW50bExvY2FsZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSW50bExvY2FsZTo6dmlz
aXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGF1
dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SW50bExvY2FsZSo+KGNlbGwpOwogICAgIEFTU0VSVF9H
Q19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTY2LDYgKzY3LDggQEAg
dm9pZCBJbnRsTG9jYWxlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogYwogICAgIEJhc2U6OnZpc2l0
Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJF
TihJbnRsTG9jYWxlKTsKKwogY2xhc3MgTG9jYWxlSURCdWlsZGVyIGZpbmFsIHsKIHB1YmxpYzoK
ICAgICBib29sIGluaXRpYWxpemUoY29uc3QgU3RyaW5nJik7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9JbnRsTG9jYWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSW50bExvY2FsZS5oCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTG9jYWxlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTcxLDcgKzcxLDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBJbnRsTG9jYWxlKFZNJiwgU3Ry
dWN0dXJlKik7CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOwotICAgIHN0YXRpYyB2b2lk
IHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lU
X0NISUxEUkVOOwogCiAgICAgU3RyaW5nIGtleXdvcmRWYWx1ZShBU0NJSUxpdGVyYWwsIGJvb2wg
aXNCb29sZWFuID0gZmFsc2UpIGNvbnN0OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9JbnRsTnVtYmVyRm9ybWF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9JbnRsTnVtYmVyRm9ybWF0LmNwcAkocmV2aXNpb24gMjcxNDQzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE51bWJlckZvcm1hdC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTczLDcgKzczLDggQEAgdm9pZCBJbnRsTnVtYmVyRm9ybWF0OjpmaW5p
c2hDcmVhdGlvbihWTQogICAgIEFTU0VSVChpbmhlcml0cyh2bSwgaW5mbygpKSk7CiB9CiAKLXZv
aWQgSW50bE51bWJlckZvcm1hdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNp
dG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSW50bE51bWJl
ckZvcm1hdDo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9y
KQogewogICAgIEludGxOdW1iZXJGb3JtYXQqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SW50bE51bWJl
ckZvcm1hdCo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVj
dCwgaW5mbygpKTsKQEAgLTgzLDYgKzg0LDggQEAgdm9pZCBJbnRsTnVtYmVyRm9ybWF0Ojp2aXNp
dENoaWxkcmVuKEpTQwogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fYm91bmRGb3Jt
YXQpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSW50bE51bWJlckZvcm1hdCk7CisKIFZl
Y3RvcjxTdHJpbmc+IEludGxOdW1iZXJGb3JtYXQ6OmxvY2FsZURhdGEoY29uc3QgU3RyaW5nJiBs
b2NhbGUsIFJlbGV2YW50RXh0ZW5zaW9uS2V5IGtleSkKIHsKICAgICAvLyA5LjEgSW50ZXJuYWwg
c2xvdHMgb2YgU2VydmljZSBDb25zdHJ1Y3RvcnMgJiAxMS4yLjMgSW50ZXJuYWwgc2xvdHMgKEVD
TUEtNDAyIDIuMCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxOdW1i
ZXJGb3JtYXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9J
bnRsTnVtYmVyRm9ybWF0LmgJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0ludGxOdW1iZXJGb3JtYXQuaAkod29ya2luZyBjb3B5KQpAQCAtOTYsNyAr
OTYsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIEludGxOdW1iZXJGb3JtYXQoVk0mLCBTdHJ1
Y3R1cmUqKTsKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7Ci0gICAgc3RhdGljIHZvaWQg
dmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRf
Q0hJTERSRU47CiAKICAgICBzdGF0aWMgVmVjdG9yPFN0cmluZz4gbG9jYWxlRGF0YShjb25zdCBT
dHJpbmcmLCBSZWxldmFudEV4dGVuc2lvbktleSk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0ludGxQbHVyYWxSdWxlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFBsdXJhbFJ1bGVzLmNwcAkocmV2aXNpb24gMjcxNDQz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFBsdXJhbFJ1bGVzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNjEsNyArNjEsOCBAQCB2b2lkIEludGxQbHVyYWxSdWxlczo6Zmlu
aXNoQ3JlYXRpb24oVk0mCiAgICAgQVNTRVJUKGluaGVyaXRzKHZtLCBpbmZvKCkpKTsKIH0KIAot
dm9pZCBJbnRsUGx1cmFsUnVsZXM6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90Vmlz
aXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEludGxQbHVy
YWxSdWxlczo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9y
KQogewogICAgIEludGxQbHVyYWxSdWxlcyogdGhpc09iamVjdCA9IGpzQ2FzdDxJbnRsUGx1cmFs
UnVsZXMqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3Qs
IGluZm8oKSk7CkBAIC02OSw2ICs3MCw4IEBAIHZvaWQgSW50bFBsdXJhbFJ1bGVzOjp2aXNpdENo
aWxkcmVuKEpTQ2UKICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3Ip
OwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSW50bFBsdXJhbFJ1bGVzKTsKKwogVmVjdG9y
PFN0cmluZz4gSW50bFBsdXJhbFJ1bGVzOjpsb2NhbGVEYXRhKGNvbnN0IFN0cmluZyYsIFJlbGV2
YW50RXh0ZW5zaW9uS2V5KQogewogICAgIHJldHVybiB7IH07CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9JbnRsUGx1cmFsUnVsZXMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsUGx1cmFsUnVsZXMuaAkocmV2aXNpb24gMjcxNDQz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFBsdXJhbFJ1bGVzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTY2LDcgKzY2LDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBJbnRs
UGx1cmFsUnVsZXMoVk0mLCBTdHJ1Y3R1cmUqKTsKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZN
Jik7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYp
OworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBzdGF0aWMgVmVjdG9yPFN0cmlu
Zz4gbG9jYWxlRGF0YShjb25zdCBTdHJpbmcmLCBSZWxldmFudEV4dGVuc2lvbktleSk7CiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxSZWxhdGl2ZVRpbWVGb3JtYXQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxSZWxh
dGl2ZVRpbWVGb3JtYXQuY3BwCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9JbnRsUmVsYXRpdmVUaW1lRm9ybWF0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNjIsNyArNjIsOCBAQCB2b2lkIEludGxSZWxhdGl2ZVRpbWVGb3JtYXQ6OmZpbmlzaENyZWF0
CiAgICAgQVNTRVJUKGluaGVyaXRzKHZtLCBpbmZvKCkpKTsKIH0KIAotdm9pZCBJbnRsUmVsYXRp
dmVUaW1lRm9ybWF0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZp
c2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBJbnRsUmVsYXRpdmVUaW1l
Rm9ybWF0Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3Ip
CiB7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxJbnRsUmVsYXRpdmVUaW1lRm9ybWF0
Kj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZv
KCkpOwpAQCAtNzAsNiArNzEsOCBAQCB2b2lkIEludGxSZWxhdGl2ZVRpbWVGb3JtYXQ6OnZpc2l0
Q2hpbGRyCiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKIH0K
IAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEludGxSZWxhdGl2ZVRpbWVGb3JtYXQpOworCiBWZWN0
b3I8U3RyaW5nPiBJbnRsUmVsYXRpdmVUaW1lRm9ybWF0Ojpsb2NhbGVEYXRhKGNvbnN0IFN0cmlu
ZyYgbG9jYWxlLCBSZWxldmFudEV4dGVuc2lvbktleSBrZXkpCiB7CiAgICAgQVNTRVJUX1VOVVNF
RChrZXksIGtleSA9PSBSZWxldmFudEV4dGVuc2lvbktleTo6TnUpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFJlbGF0aXZlVGltZUZvcm1hdC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxSZWxhdGl2ZVRpbWVGb3JtYXQu
aAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50
bFJlbGF0aXZlVGltZUZvcm1hdC5oCSh3b3JraW5nIGNvcHkpCkBAIC02NCw3ICs2NCw3IEBAIHB1
YmxpYzoKIHByaXZhdGU6CiAgICAgSW50bFJlbGF0aXZlVGltZUZvcm1hdChWTSYsIFN0cnVjdHVy
ZSopOwogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNp
dENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElM
RFJFTjsKIAogICAgIHN0YXRpYyBWZWN0b3I8U3RyaW5nPiBsb2NhbGVEYXRhKGNvbnN0IFN0cmlu
ZyYsIFJlbGV2YW50RXh0ZW5zaW9uS2V5KTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSW50bFNlZ21lbnRJdGVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFNlZ21lbnRJdGVyYXRvci5jcHAJKHJldmlzaW9uIDI3
MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxTZWdtZW50SXRlcmF0
b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NCwxMyArNjQsMTYgQEAgdm9pZCBJbnRsU2VnbWVu
dEl0ZXJhdG9yOjpmaW5pc2hDcmVhdGlvbgogICAgIG1fc3RyaW5nLnNldCh2bSwgdGhpcywgc3Ry
aW5nKTsKIH0KIAotdm9pZCBJbnRsU2VnbWVudEl0ZXJhdG9yOjp2aXNpdENoaWxkcmVuKEpTQ2Vs
bCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
Pgordm9pZCBJbnRsU2VnbWVudEl0ZXJhdG9yOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNl
bGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxJ
bnRsU2VnbWVudEl0ZXJhdG9yKj4oY2VsbCk7CiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlz
T2JqZWN0LCB2aXNpdG9yKTsKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX3N0cmlu
Zyk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihJbnRsU2VnbWVudEl0ZXJhdG9yKTsKKwog
SlNPYmplY3QqIEludGxTZWdtZW50SXRlcmF0b3I6Om5leHQoSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCkKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsU2VnbWVudEl0ZXJhdG9yLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFNlZ21lbnRJdGVyYXRvci5o
CShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRs
U2VnbWVudEl0ZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTUzLDcgKzUzLDcgQEAgcHVibGlj
OgogCiAgICAgSlNPYmplY3QqIG5leHQoSlNHbG9iYWxPYmplY3QqKTsKIAotICAgIHN0YXRpYyB2
b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJ
U0lUX0NISUxEUkVOOwogCiBwcml2YXRlOgogICAgIEludGxTZWdtZW50SXRlcmF0b3IoVk0mLCBT
dHJ1Y3R1cmUqLCBzdGQ6OnVuaXF1ZV9wdHI8VUJyZWFrSXRlcmF0b3IsIFVCcmVha0l0ZXJhdG9y
RGVsZXRlcj4mJiwgQm94PFZlY3RvcjxVQ2hhcj4+JiYsIEludGxTZWdtZW50ZXI6OkdyYW51bGFy
aXR5KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxTZWdtZW50cy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFNlZ21l
bnRzLmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSW50bFNlZ21lbnRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA5LDExICsxMDksMTQgQEAg
SlNPYmplY3QqIEludGxTZWdtZW50czo6Y3JlYXRlU2VnbWVudEl0ZQogICAgIHJldHVybiBJbnRs
U2VnbWVudEl0ZXJhdG9yOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdC0+c2VnbWVudEl0ZXJhdG9y
U3RydWN0dXJlKCksIFdURk1vdmUoc2VnbWVudGVyKSwgbV9idWZmZXIsIG1fc3RyaW5nLmdldCgp
LCBtX2dyYW51bGFyaXR5KTsKIH0KIAotdm9pZCBJbnRsU2VnbWVudHM6OnZpc2l0Q2hpbGRyZW4o
SlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZp
c2l0b3I+Cit2b2lkIEludGxTZWdtZW50czo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxs
LCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SW50
bFNlZ21lbnRzKj4oY2VsbCk7CiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2
aXNpdG9yKTsKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX3N0cmluZyk7CiB9CiAK
K0RFRklORV9WSVNJVF9DSElMRFJFTihJbnRsU2VnbWVudHMpOworCiB9IC8vIG5hbWVzcGFjZSBK
U0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxTZWdtZW50cy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxTZWdtZW50cy5o
CShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRs
U2VnbWVudHMuaAkod29ya2luZyBjb3B5KQpAQCAtNTQsNyArNTQsNyBAQCBwdWJsaWM6CiAgICAg
SlNWYWx1ZSBjb250YWluaW5nKEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBpbmRleFZhbHVlKTsK
ICAgICBKU09iamVjdCogY3JlYXRlU2VnbWVudEl0ZXJhdG9yKEpTR2xvYmFsT2JqZWN0Kik7CiAK
LSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7Cisg
ICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogcHJpdmF0ZToKICAgICBJbnRsU2VnbWVudHMo
Vk0mLCBTdHJ1Y3R1cmUqLCBzdGQ6OnVuaXF1ZV9wdHI8VUJyZWFrSXRlcmF0b3IsIFVCcmVha0l0
ZXJhdG9yRGVsZXRlcj4mJiwgQm94PFZlY3RvcjxVQ2hhcj4+JiYsIEludGxTZWdtZW50ZXI6Okdy
YW51bGFyaXR5KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlC
dWZmZXJWaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0FycmF5QnVmZmVyVmlldy5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTU1LDcgKzE1NSw4IEBAIHZvaWQgSlNBcnJheUJ1ZmZlclZpZXc6OmZpbmlzaENyZWF0aW9u
KFYKICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCi12b2lkIEpTQXJyYXlC
dWZmZXJWaWV3Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0
b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0FycmF5QnVmZmVyVmlldzo6
dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAg
IEpTQXJyYXlCdWZmZXJWaWV3KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQXJyYXlCdWZmZXJWaWV3
Kj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZv
KCkpOwpAQCAtMTY5LDYgKzE3MCw4IEBAIHZvaWQgSlNBcnJheUJ1ZmZlclZpZXc6OnZpc2l0Q2hp
bGRyZW4oSlMKICAgICB9CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU0FycmF5QnVmZmVy
Vmlldyk7CisKIGJvb2wgSlNBcnJheUJ1ZmZlclZpZXc6OnB1dCgKICAgICBKU0NlbGwqIGNlbGws
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUs
IEpTVmFsdWUgdmFsdWUsCiAgICAgUHV0UHJvcGVydHlTbG90JiBzbG90KQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5oCShyZXZp
c2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVm
ZmVyVmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNzIsNyArMTcyLDcgQEAgcHJvdGVjdGVkOgog
ICAgIAogICAgIHN0YXRpYyBib29sIHB1dChKU0NlbGwqLCBKU0dsb2JhbE9iamVjdCosIFByb3Bl
cnR5TmFtZSwgSlNWYWx1ZSwgUHV0UHJvcGVydHlTbG90Jik7CiAKLSAgICBzdGF0aWMgdm9pZCB2
aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9D
SElMRFJFTjsKICAgICAKIHB1YmxpYzoKICAgICBUeXBlZEFycmF5TW9kZSBtb2RlKCkgY29uc3Qg
eyByZXR1cm4gbV9tb2RlOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0FycmF5SXRlcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTQXJyYXlJdGVyYXRvci5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlJdGVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTY4LDExICs2OCwxNCBAQCB2b2lkIEpTQXJyYXlJdGVyYXRvcjo6ZmluaXNoQ3JlYXRpb24o
Vk0mCiAgICAgICAgIEJhc2U6OmludGVybmFsRmllbGQoaW5kZXgpLnNldCh2bSwgdGhpcywgdmFs
dWVzW2luZGV4XSk7CiB9CiAKLXZvaWQgSlNBcnJheUl0ZXJhdG9yOjp2aXNpdENoaWxkcmVuKEpT
Q2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNp
dG9yPgordm9pZCBKU0FycmF5SXRlcmF0b3I6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2Vs
bCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpT
QXJyYXlJdGVyYXRvcio+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhp
c09iamVjdCwgaW5mbygpKTsKICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZp
c2l0b3IpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNBcnJheUl0ZXJhdG9yKTsKKwog
fSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0FycmF5SXRlcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0FycmF5SXRlcmF0b3IuaAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUl0ZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTc4
LDcgKzc4LDcgQEAgcHVibGljOgogCiAgICAgREVDTEFSRV9JTkZPOwogCi0gICAgc3RhdGljIHZv
aWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklT
SVRfQ0hJTERSRU47CiAKIHByaXZhdGU6CiAgICAgSlNBcnJheUl0ZXJhdG9yKFZNJiwgU3RydWN0
dXJlKik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FzeW5jR2VuZXJh
dG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Fz
eW5jR2VuZXJhdG9yLmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNBc3luY0dlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU5LDEx
ICs1OSwxNCBAQCB2b2lkIEpTQXN5bmNHZW5lcmF0b3I6OmZpbmlzaENyZWF0aW9uKFZNCiAgICAg
ICAgIGludGVybmFsRmllbGQoaW5kZXgpLnNldCh2bSwgdGhpcywgdmFsdWVzW2luZGV4XSk7CiB9
CiAKLXZvaWQgSlNBc3luY0dlbmVyYXRvcjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNB
c3luY0dlbmVyYXRvcjo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2
aXNpdG9yKQogewogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNBc3luY0dlbmVyYXRv
cio+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5m
bygpKTsKICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwogfQog
CitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNBc3luY0dlbmVyYXRvcik7CisKIH0gLy8gbmFtZXNw
YWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBc3luY0dlbmVy
YXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXN5
bmNHZW5lcmF0b3IuaAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNBc3luY0dlbmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC05NSw3ICs5NSw3
IEBAIHB1YmxpYzoKIAogICAgIERFQ0xBUkVfRVhQT1JUX0lORk87CiAKLSAgICBzdGF0aWMgdm9p
ZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJ
VF9DSElMRFJFTjsKIAogcHJpdmF0ZToKICAgICBKU0FzeW5jR2VuZXJhdG9yKFZNJiwgU3RydWN0
dXJlKik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JpZ0ludC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCaWdJbnQuY3Bw
CShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Jp
Z0ludC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY3LDcgKzY3LDggQEAgSlNCaWdJbnQ6OkpTQmln
SW50KFZNJiB2bSwgU3RydWN0dXJlKiBzdAogICAgICwgbV9kYXRhKHZtLCB0aGlzLCBkYXRhLCBs
ZW5ndGgpCiB7IH0KIAotdm9pZCBKU0JpZ0ludDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGws
IFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQg
SlNCaWdJbnQ6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRv
cikKIHsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQmlnSW50Kj4oY2VsbCk7CiAg
ICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNzYs
NiArNzcsOCBAQCB2b2lkIEpTQmlnSW50Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsCiAgICAg
ICAgIHZpc2l0b3IubWFya0F1eGlsaWFyeShkYXRhKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxE
UkVOKEpTQmlnSW50KTsKKwogdm9pZCBKU0JpZ0ludDo6aW5pdGlhbGl6ZShJbml0aWFsaXphdGlv
blR5cGUgaW5pdFR5cGUpCiB7CiAgICAgaWYgKGluaXRUeXBlID09IEluaXRpYWxpemF0aW9uVHlw
ZTo6V2l0aFplcm8pCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JpZ0lu
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQmlnSW50
LmgJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
QmlnSW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTUwLDcgKzUwLDcgQEAgcHVibGljOgogICAgIHN0
YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVG
bGFncyB8IFN0cnVjdHVyZUlzSW1tb3J0YWwgfCBPdmVycmlkZXNUb1RoaXM7CiAgICAgZnJpZW5k
IGNsYXNzIENhY2hlZEJpZ0ludDsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlND
ZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzPgogICAgIHN0YXRpYyBJ
c29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNCb3VuZEZ1bmN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0JvdW5kRnVuY3Rpb24uY3BwCShyZXZpc2lvbiAyNzE0NDMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JvdW5kRnVuY3Rpb24uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yNDksNyArMjQ5LDggQEAgdm9pZCBKU0JvdW5kRnVuY3Rpb246OmZp
bmlzaENyZWF0aW9uKFZNJgogICAgIEFTU0VSVChpbmhlcml0cyh2bSwgaW5mbygpKSk7CiB9CiAK
LXZvaWQgSlNCb3VuZEZ1bmN0aW9uOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZp
c2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0JvdW5k
RnVuY3Rpb246OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRv
cikKIHsKICAgICBKU0JvdW5kRnVuY3Rpb24qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNCb3VuZEZ1
bmN0aW9uKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0
LCBpbmZvKCkpOwpAQCAtMjYxLDQgKzI2Miw2IEBAIHZvaWQgSlNCb3VuZEZ1bmN0aW9uOjp2aXNp
dENoaWxkcmVuKEpTQ2UKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX25hbWVNYXlC
ZU51bGwpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNCb3VuZEZ1bmN0aW9uKTsKKwog
fSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0JvdW5kRnVuY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0JvdW5kRnVuY3Rpb24uaAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNCb3VuZEZ1bmN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTg0
LDcgKzg0LDcgQEAgcHJpdmF0ZToKICAgICBKU0JvdW5kRnVuY3Rpb24oVk0mLCBOYXRpdmVFeGVj
dXRhYmxlKiwgSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqLCBKU09iamVjdCogdGFyZ2V0RnVu
Y3Rpb24sIEpTVmFsdWUgYm91bmRUaGlzLCBKU0ltbXV0YWJsZUJ1dHRlcmZseSogYm91bmRBcmdz
LCBKU1N0cmluZyogbmFtZU1heUJlTnVsbCwgZG91YmxlIGxlbmd0aCk7CiAKICAgICB2b2lkIGZp
bmlzaENyZWF0aW9uKFZNJik7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwq
LCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBXcml0
ZUJhcnJpZXI8SlNPYmplY3Q+IG1fdGFyZ2V0RnVuY3Rpb247CiAgICAgV3JpdGVCYXJyaWVyPFVu
a25vd24+IG1fYm91bmRUaGlzOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNDYWxsZWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTQ2FsbGVlLmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNDYWxsZWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MCw3ICs1MCw4IEBAIHZv
aWQgSlNDYWxsZWU6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKICAgICBBU1NFUlQoaW5oZXJpdHMo
dm0sIGluZm8oKSkpOwogfQogCi12b2lkIEpTQ2FsbGVlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCog
Y2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgor
dm9pZCBKU0NhbGxlZTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2
aXNpdG9yKQogewogICAgIEpTQ2FsbGVlKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQ2FsbGVlKj4o
Y2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkp
OwpAQCAtNTksNCArNjAsNiBAQCB2b2lkIEpTQ2FsbGVlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCog
Y2VsCiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9zY29wZSk7CiB9CiAKK0RFRklO
RV9WSVNJVF9DSElMRFJFTihKU0NhbGxlZSk7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDYWxsZWUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NhbGxlZS5oCShyZXZpc2lvbiAyNzE0NDMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NhbGxlZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xMDAsNyArMTAwLDcgQEAgcHJvdGVjdGVkOgogICAgIHZvaWQgZmluaXNoQ3JlYXRp
b24oVk0mKTsKICAgICB1c2luZyBCYXNlOjpmaW5pc2hDcmVhdGlvbjsKIAotICAgIHN0YXRpYyB2
b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJ
U0lUX0NISUxEUkVOOwogCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNF
eHRyYWN0b3I7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAkocmV2
aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSw3IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMTk5
OS0yMDAxIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCiAgKiAgQ29weXJpZ2h0IChDKSAy
MDAxIFBldGVyIEtlbGx5IChwbWtAcG9zdC5jb20pCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIw
MTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAw
My0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICog
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiSlNMb2NrLmgiCiAjaW5jbHVkZSAiSlNU
eXBlSW5mby5oIgogI2luY2x1ZGUgIlNsb3RWaXNpdG9yLmgiCisjaW5jbHVkZSAiU2xvdFZpc2l0
b3JNYWNyb3MuaCIKICNpbmNsdWRlICJTdWJzcGFjZUFjY2Vzcy5oIgogI2luY2x1ZGUgIlR5cGVk
QXJyYXlUeXBlLmgiCiAjaW5jbHVkZSAiV3JpdGVCYXJyaWVyLmgiCkBAIC0xNjcsOCArMTY4LDgg
QEAgcHVibGljOgogICAgIHNpemVfdCBlc3RpbWF0ZWRTaXplSW5CeXRlcyhWTSYpIGNvbnN0Owog
ICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBzaXplX3QgZXN0aW1hdGVkU2l6ZShKU0NlbGwq
LCBWTSYpOwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90Vmlz
aXRvciYpOwotICAgIHN0YXRpYyB2b2lkIHZpc2l0T3V0cHV0Q29uc3RyYWludHMoSlNDZWxsKiwg
U2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX0lOTElORV9WSVNJVF9DSElMRFJFTjsKKyAgICBz
dGF0aWMgdm9pZCB2aXNpdE91dHB1dENvbnN0cmFpbnRzKEpTQ2VsbCosIEFic3RyYWN0U2xvdFZp
c2l0b3ImKTsKIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGFuYWx5emVIZWFw
KEpTQ2VsbCosIEhlYXBBbmFseXplciYpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0NlbGxJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNDZWxsSW5saW5lcy5oCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGxJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlICJDb21wbGV0ZVN1YnNwYWNlSW5saW5lcy5oIgogI2lu
Y2x1ZGUgIkNQVS5oIgogI2luY2x1ZGUgIkNhbGxGcmFtZUlubGluZXMuaCIKKyNpbmNsdWRlICJE
ZWJ1Z1Nsb3RWaXNpdG9ySW5saW5lcy5oIgogI2luY2x1ZGUgIkRlZmVyR0MuaCIKICNpbmNsdWRl
ICJGcmVlTGlzdElubGluZXMuaCIKICNpbmNsdWRlICJIYW5kbGUuaCIKQEAgLTE0MSwxMiArMTQy
LDE1IEBAIEFMV0FZU19JTkxJTkUgU3RydWN0dXJlKiBKU0NlbGw6OnN0cnVjdHUKICAgICByZXR1
cm4gdm0uZ2V0U3RydWN0dXJlKG1fc3RydWN0dXJlSUQpOwogfQogCi1pbmxpbmUgdm9pZCBKU0Nl
bGw6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3Rl
bXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+CitpbmxpbmUgdm9pZCBKU0NlbGw6OnZpc2l0Q2hpbGRy
ZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB2aXNpdG9yLmFw
cGVuZFVuYmFycmllcmVkKGNlbGwtPnN0cnVjdHVyZSh2aXNpdG9yLnZtKCkpKTsKIH0KIAotaW5s
aW5lIHZvaWQgSlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzKEpTQ2VsbCosIFNsb3RWaXNp
dG9yJikKK0RFRklORV9JTkxJTkVfVklTSVRfQ0hJTERSRU4oSlNDZWxsKTsKKworaW5saW5lIHZv
aWQgSlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzKEpTQ2VsbCosIEFic3RyYWN0U2xvdFZp
c2l0b3ImKQogewogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0N1
c3RvbUdldHRlclNldHRlckZ1bmN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0N1c3RvbUdldHRlclNldHRlckZ1bmN0aW9uLmNwcAkocmV2aXNp
b24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDdXN0b21HZXR0
ZXJTZXR0ZXJGdW5jdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg1LDcgKzg1LDggQEAgSlND
dXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbiogSlNDdXN0b21HZQogICAgIHJldHVybiBmdW5jdGlv
bjsKIH0KIAotdm9pZCBKU0N1c3RvbUdldHRlclNldHRlckZ1bmN0aW9uOjp2aXNpdENoaWxkcmVu
KEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPgordm9pZCBKU0N1c3RvbUdldHRlclNldHRlckZ1bmN0aW9uOjp2aXNpdENoaWxkcmVu
SW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNDdXN0b21HZXR0
ZXJTZXR0ZXJGdW5jdGlvbiogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0N1c3RvbUdldHRlclNldHRl
ckZ1bmN0aW9uKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2Jq
ZWN0LCBpbmZvKCkpOwpAQCAtOTQsNiArOTUsOCBAQCB2b2lkIEpTQ3VzdG9tR2V0dGVyU2V0dGVy
RnVuY3Rpb246OnZpc2l0CiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9nZXR0ZXJT
ZXR0ZXIpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNDdXN0b21HZXR0ZXJTZXR0ZXJG
dW5jdGlvbik7CisKIHZvaWQgSlNDdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbjo6ZmluaXNoQ3Jl
YXRpb24oVk0mIHZtLCBOYXRpdmVFeGVjdXRhYmxlKiBleGVjdXRhYmxlLCBDdXN0b21HZXR0ZXJT
ZXR0ZXIqIGdldHRlclNldHRlciwgY29uc3QgU3RyaW5nJiBuYW1lKQogewogICAgIEJhc2U6OmZp
bmlzaENyZWF0aW9uKHZtLCBleGVjdXRhYmxlLCBpc1NldHRlcigpLCBuYW1lKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ3VzdG9tR2V0dGVyU2V0dGVyRnVuY3Rpb24u
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0N1c3RvbUdl
dHRlclNldHRlckZ1bmN0aW9uLmgJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTQ3VzdG9tR2V0dGVyU2V0dGVyRnVuY3Rpb24uaAkod29ya2luZyBj
b3B5KQpAQCAtNjMsNyArNjMsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIEpTQ3VzdG9tR2V0
dGVyU2V0dGVyRnVuY3Rpb24oVk0mLCBOYXRpdmVFeGVjdXRhYmxlKiwgSlNHbG9iYWxPYmplY3Qq
LCBTdHJ1Y3R1cmUqLCBUeXBlLCBjb25zdCBQcm9wZXJ0eU5hbWUmKTsKICAgICB2b2lkIGZpbmlz
aENyZWF0aW9uKFZNJiwgTmF0aXZlRXhlY3V0YWJsZSosIEN1c3RvbUdldHRlclNldHRlciosIGNv
bnN0IFN0cmluZyYpOwotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xv
dFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgV3JpdGVCYXJy
aWVyPEN1c3RvbUdldHRlclNldHRlcj4gbV9nZXR0ZXJTZXR0ZXI7CiAgICAgVHlwZSBtX3R5cGU7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ZpbmFsaXphdGlvblJlZ2lz
dHJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Zp
bmFsaXphdGlvblJlZ2lzdHJ5LmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNGaW5hbGl6YXRpb25SZWdpc3RyeS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJKU0Zp
bmFsaXphdGlvblJlZ2lzdHJ5LmgiCiAKKyNpbmNsdWRlICJBYnN0cmFjdFNsb3RWaXNpdG9yLmgi
CiAjaW5jbHVkZSAiRGVmZXJyZWRXb3JrVGltZXIuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgi
CiAjaW5jbHVkZSAiSlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbElubGluZXMuaCIKQEAgLTYwLDcg
KzYxLDggQEAgdm9pZCBKU0ZpbmFsaXphdGlvblJlZ2lzdHJ5OjpmaW5pc2hDcmVhdAogICAgIGds
b2JhbE9iamVjdC0+Z2xvYmFsT2JqZWN0TWV0aG9kVGFibGUoKS0+Y3VycmVudFNjcmlwdEV4ZWN1
dGlvbk93bmVyKGdsb2JhbE9iamVjdCk7CiB9CiAKLXZvaWQgSlNGaW5hbGl6YXRpb25SZWdpc3Ry
eTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVt
cGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNGaW5hbGl6YXRpb25SZWdpc3RyeTo6dmlz
aXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEJh
c2U6OnZpc2l0Q2hpbGRyZW4oY2VsbCwgdmlzaXRvcik7CiAKQEAgLTg3LDYgKzg5LDggQEAgdm9p
ZCBKU0ZpbmFsaXphdGlvblJlZ2lzdHJ5Ojp2aXNpdENoaWxkcgogICAgIHZpc2l0b3Iudm0oKS5o
ZWFwLnJlcG9ydEV4dHJhTWVtb3J5VmlzaXRlZCh0b3RhbEJ1ZmZlclNpemVzSW5CeXRlcyk7CiB9
CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU0ZpbmFsaXphdGlvblJlZ2lzdHJ5KTsKKwogdm9p
ZCBKU0ZpbmFsaXphdGlvblJlZ2lzdHJ5OjpkZXN0cm95KEpTQ2VsbCogdGFibGUpCiB7CiAgICAg
c3RhdGljX2Nhc3Q8SlNGaW5hbGl6YXRpb25SZWdpc3RyeSo+KHRhYmxlKS0+fkpTRmluYWxpemF0
aW9uUmVnaXN0cnkoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRmlu
YWxpemF0aW9uUmVnaXN0cnkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0ZpbmFsaXphdGlvblJlZ2lzdHJ5LmgJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRmluYWxpemF0aW9uUmVnaXN0cnkuaAkod29y
a2luZyBjb3B5KQpAQCAtNzAsNyArNzAsNyBAQCBwdWJsaWM6CiAgICAgREVDTEFSRV9FWFBPUlRf
SU5GTzsKIAogICAgIHZvaWQgZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoVk0mKTsKLSAgICBzdGF0
aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFS
RV9WSVNJVF9DSElMRFJFTjsKICAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwogICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0Rlc3RydWN0aW9uID0gdHJ1ZTsKIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5jcHAJKHJldmlzaW9u
IDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yNTIsNyArMjUyLDggQEAgY29uc3QgU291cmNlQ29kZSogSlNG
dW5jdGlvbjo6c291cmNlQ29kZQogICAgIHJldHVybiAmanNFeGVjdXRhYmxlKCktPnNvdXJjZSgp
OwogfQogICAgIAotdm9pZCBKU0Z1bmN0aW9uOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwg
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBK
U0Z1bmN0aW9uOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0
b3IpCiB7CiAgICAgSlNGdW5jdGlvbiogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0Z1bmN0aW9uKj4o
Y2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkp
OwpAQCAtMjYxLDYgKzI2Miw4IEBAIHZvaWQgSlNGdW5jdGlvbjo6dmlzaXRDaGlsZHJlbihKU0Nl
bGwqIGMKICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKGJpdHdpc2VfY2FzdDxKU0NlbGwq
PihiaXR3aXNlX2Nhc3Q8dWludHB0cl90Pih0aGlzT2JqZWN0LT5tX2V4ZWN1dGFibGVPclJhcmVE
YXRhKSAmIH5yYXJlRGF0YVRhZykpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNGdW5j
dGlvbik7CisKIENhbGxEYXRhIEpTRnVuY3Rpb246OmdldENhbGxEYXRhKEpTQ2VsbCogY2VsbCkK
IHsKICAgICAvLyBLZWVwIHRoaXMgZnVuY3Rpb24gT0sgZm9yIGludm9jYXRpb24gZnJvbSBjb25j
dXJyZW50IGNvbXBpbGVycy4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
RnVuY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0Z1bmN0aW9uLmgJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTRnVuY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMTgwLDcgKzE4MCw3IEBAIHBy
b3RlY3RlZDoKIAogICAgIHN0YXRpYyBib29sIGRlbGV0ZVByb3BlcnR5KEpTQ2VsbCosIEpTR2xv
YmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBEZWxldGVQcm9wZXJ0eVNsb3QmKTsKIAotICAgIHN0
YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNM
QVJFX1ZJU0lUX0NISUxEUkVOOwogCiBwcml2YXRlOgogICAgIHN0YXRpYyBKU0Z1bmN0aW9uKiBj
cmVhdGVJbXBsKFZNJiB2bSwgRnVuY3Rpb25FeGVjdXRhYmxlKiBleGVjdXRhYmxlLCBKU1Njb3Bl
KiBzY29wZSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0dlbmVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTU5LDExICs1OSwxNCBAQCB2b2lkIEpTR2VuZXJhdG9yOjpmaW5pc2hDcmVhdGlvbihWTSYg
dm0pCiAgICAgICAgIGludGVybmFsRmllbGQoaW5kZXgpLnNldCh2bSwgdGhpcywgdmFsdWVzW2lu
ZGV4XSk7CiB9CiAKLXZvaWQgSlNHZW5lcmF0b3I6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxs
LCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lk
IEpTR2VuZXJhdG9yOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZp
c2l0b3IpCiB7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0dlbmVyYXRvcio+KGNl
bGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsK
ICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwogfQogCitERUZJ
TkVfVklTSVRfQ0hJTERSRU4oSlNHZW5lcmF0b3IpOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJhdG9yLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmF0b3IuaAkocmV2aXNp
b24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmF0b3Iu
aAkod29ya2luZyBjb3B5KQpAQCAtOTQsNyArOTQsNyBAQCBwdWJsaWM6CiAKICAgICBERUNMQVJF
X0VYUE9SVF9JTkZPOwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBT
bG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKIHByaXZhdGU6CiAg
ICAgSlNHZW5lcmF0b3IoVk0mLCBTdHJ1Y3R1cmUqKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXcuaAkocmV2
aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmlj
VHlwZWRBcnJheVZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAtMzA3LDcgKzMwNyw3IEBAIHByaXZh
dGU6CiAgICAgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCosIEpTR2xv
YmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lQXJyYXkmLCBEb250RW51bVByb3BlcnRpZXNNb2RlKTsK
IAogICAgIHN0YXRpYyBzaXplX3QgZXN0aW1hdGVkU2l6ZShKU0NlbGwqLCBWTSYpOwotICAgIHN0
YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNM
QVJFX1RFTVBMQVRFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgLy8gUmV0dXJucyB0cnVlIGlmIHN1
Y2Nlc3NmdWwsIGFuZCBmYWxzZSBvbiBlcnJvcjsgaXQgd2lsbCB0aHJvdyBvbiBlcnJvci4KICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBPdGhlckFkYXB0b3I+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmll
d0lubGluZXMuaAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTQ5MSw3ICs0OTEsOCBAQCBzaXplX3QgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46
CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+Ci12b2lkIEpTR2VuZXJpY1R5cGVkQXJy
YXlWaWV3PEFkYXB0b3I+Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3Im
IHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0dlbmVyaWNUeXBl
ZEFycmF5VmlldzxBZGFwdG9yPjo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNp
dG9yJiB2aXNpdG9yKQogewogICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiB0aGlzT2JqZWN0
ID0ganNDYXN0PEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Kj4oY2VsbCk7CiAgICAgQVNTRVJUX0dD
X09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNTI5LDQgKzUzMCw2IEBA
IHZvaWQgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OnYKICAgICB9CiB9CiAKK0RF
RklORV9URU1QTEFURV9WSVNJVF9DSElMRFJFTih0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPiwg
SlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj4pOworCiB9IC8vIG5hbWVzcGFjZSBKU0MK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVj
dC5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTR2xvYmFsT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg5NSw3ICsxODk1LDggQEAg
dm9pZCBKU0dsb2JhbE9iamVjdDo6cmVzZXRQcm90b3R5cGUoVk0mIAogICAgIHNldEdsb2JhbFRo
aXModm0sIEpTUHJveHk6OmNyZWF0ZSh2bSwgSlNQcm94eTo6Y3JlYXRlU3RydWN0dXJlKHZtLCB0
aGlzLCBwcm90b3R5cGUsIFB1cmVGb3J3YXJkaW5nUHJveHlUeXBlKSwgdGhpcykpOwogfQogCi12
b2lkIEpTR2xvYmFsT2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0
b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0dsb2JhbE9i
amVjdDo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQog
eyAKICAgICBKU0dsb2JhbE9iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0dsb2JhbE9iamVj
dCo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5m
bygpKTsKQEAgLTIwNjMsNiArMjA2NCw4IEBAIHZvaWQgSlNHbG9iYWxPYmplY3Q6OnZpc2l0Q2hp
bGRyZW4oSlNDZWwKICAgICB0aGlzT2JqZWN0LT5tX3JlZ0V4cEdsb2JhbERhdGEudmlzaXRBZ2dy
ZWdhdGUodmlzaXRvcik7CiB9CiAKK0RFRklORV9FWFBPUlRfVklTSVRfQ0hJTERSRU4oSlNHbG9i
YWxPYmplY3QpOworCiBDYWxsRnJhbWUqIEpTR2xvYmFsT2JqZWN0OjpkZXByZWNhdGVkQ2FsbEZy
YW1lRm9yRGVidWdnZXIoKQogewogICAgIHJldHVybiBDYWxsRnJhbWU6OmNyZWF0ZShtX2RlcHJl
Y2F0ZWRDYWxsRnJhbWVGb3JEZWJ1Z2dlcik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0dsb2JhbE9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgJKHdvcmtpbmcgY29weSkK
QEAgLTYwOSw3ICs2MDksNyBAQCBwdWJsaWM6CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgfkpTR2xv
YmFsT2JqZWN0KCk7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgZGVzdHJveShK
U0NlbGwqKTsKIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX0VYUE9SVF9WSVNJVF9DSElM
RFJFTjsKIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5
U2xvdChKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNs
b3QmKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgYm9vbCBwdXQoSlNDZWxsKiwgSlNH
bG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbW11dGFibGVCdXR0ZXJmbHku
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTSW1tdXRh
YmxlQnV0dGVyZmx5LmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNJbW11dGFibGVCdXR0ZXJmbHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
Miw3ICszMiw4IEBAIG5hbWVzcGFjZSBKU0MgewogCiBjb25zdCBDbGFzc0luZm8gSlNJbW11dGFi
bGVCdXR0ZXJmbHk6OnNfaW5mbyA9IHsgIkltbXV0YWJsZSBCdXR0ZXJmbHkiLCBudWxscHRyLCBu
dWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTSW1tdXRhYmxlQnV0dGVyZmx5
KSB9OwogCi12b2lkIEpTSW1tdXRhYmxlQnV0dGVyZmx5Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCog
Y2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgor
dm9pZCBKU0ltbXV0YWJsZUJ1dHRlcmZseTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxs
LCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2Vs
bCwgaW5mbygpKTsKICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKGNlbGwsIHZpc2l0b3IpOwpAQCAt
NDUsNiArNDYsOCBAQCB2b2lkIEpTSW1tdXRhYmxlQnV0dGVyZmx5Ojp2aXNpdENoaWxkcmVuCiAg
ICAgdmlzaXRvci5hcHBlbmRWYWx1ZXNIaWRkZW4oYnV0dGVyZmx5LT5jb250aWd1b3VzKCkuZGF0
YSgpLCBidXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxE
UkVOKEpTSW1tdXRhYmxlQnV0dGVyZmx5KTsKKwogdm9pZCBKU0ltbXV0YWJsZUJ1dHRlcmZseTo6
Y29weVRvQXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSogZmlyc3RFbGVtZW50RGVz
dCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCiB7CiAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0ltbXV0YWJsZUJ1dHRlcmZseS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTSW1tdXRhYmxlQnV0dGVyZmx5LmgJKHJldmlzaW9uIDI3MTQ0
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTSW1tdXRhYmxlQnV0dGVyZmx5
LmgJKHdvcmtpbmcgY29weSkKQEAgLTE0NSw3ICsxNDUsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJl
dHVybiBqc0RvdWJsZU51bWJlcih2YWx1ZSk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgdmlz
aXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJ
TERSRU47CiAKICAgICB2b2lkIGNvcHlUb0FyZ3VtZW50cyhKU0dsb2JhbE9iamVjdCosIEpTVmFs
dWUqIGZpcnN0RWxlbWVudERlc3QsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsK
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbnRlcm5hbEZpZWxkT2Jq
ZWN0SW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
SW50ZXJuYWxGaWVsZE9iamVjdEltcGwuaAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbC5oCSh3b3JraW5n
IGNvcHkpCkBAIC02Niw3ICs2Niw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgcHRyZGlmZl90IG9m
ZnNldE9mSW50ZXJuYWxGaWVsZCh1bnNpZ25lZCBpbmRleCkgeyByZXR1cm4gT0JKRUNUX09GRlNF
VE9GKEpTSW50ZXJuYWxGaWVsZE9iamVjdEltcGwsIG1faW50ZXJuYWxGaWVsZHMpICsgaW5kZXgg
KiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KTsgfQogCiBwcm90ZWN0ZWQ6Ci0gICAgc3Rh
dGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xB
UkVfVEVNUExBVEVfVklTSVRfQ0hJTERSRU47CiAKICAgICBKU0ludGVybmFsRmllbGRPYmplY3RJ
bXBsKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiAgICAgICAgIDogQmFzZSh2bSwgc3Ry
dWN0dXJlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbnRlcm5hbEZp
ZWxkT2JqZWN0SW1wbElubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0ludGVybmFsRmllbGRPYmplY3RJbXBsSW5saW5lcy5oCShyZXZpc2lvbiAy
NzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ludGVybmFsRmllbGRP
YmplY3RJbXBsSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCw4IEBACiBuYW1l
c3BhY2UgSlNDIHsKIAogdGVtcGxhdGU8dW5zaWduZWQgcGFzc2VkTnVtYmVyT2ZJbnRlcm5hbEZp
ZWxkcz4KLXZvaWQgSlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbDxwYXNzZWROdW1iZXJPZkludGVy
bmFsRmllbGRzPjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNp
dG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNJbnRlcm5hbEZpZWxkT2Jq
ZWN0SW1wbDxwYXNzZWROdW1iZXJPZkludGVybmFsRmllbGRzPjo6dmlzaXRDaGlsZHJlbkltcGwo
SlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGF1dG8qIHRoaXNPYmplY3Qg
PSBqc0Nhc3Q8SlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbCo+KGNlbGwpOwogICAgIEFTU0VSVF9H
Q19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTM4LDQgKzM5LDYgQEAg
dm9pZCBKU0ludGVybmFsRmllbGRPYmplY3RJbXBsPHBhc3NlZE51bQogICAgIHZpc2l0b3IuYXBw
ZW5kVmFsdWVzKHRoaXNPYmplY3QtPm1faW50ZXJuYWxGaWVsZHMsIG51bWJlck9mSW50ZXJuYWxG
aWVsZHMpOwogfQogCitERUZJTkVfVEVNUExBVEVfVklTSVRfQ0hJTERSRU4odGVtcGxhdGU8dW5z
aWduZWQgcGFzc2VkTnVtYmVyT2ZJbnRlcm5hbEZpZWxkcz4sIEpTSW50ZXJuYWxGaWVsZE9iamVj
dEltcGw8cGFzc2VkTnVtYmVyT2ZJbnRlcm5hbEZpZWxkcz4pOworCiB9IC8vIG5hbWVzcGFjZSBK
U0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTGV4aWNhbEVudmlyb25t
ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xl
eGljYWxFbnZpcm9ubWVudC5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTTGV4aWNhbEVudmlyb25tZW50LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzYsNyArMzYsOCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogY29uc3QgQ2xhc3NJbmZvIEpTTGV4
aWNhbEVudmlyb25tZW50OjpzX2luZm8gPSB7ICJKU0xleGljYWxFbnZpcm9ubWVudCIsICZCYXNl
OjpzX2luZm8sIG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNMZXhpY2Fs
RW52aXJvbm1lbnQpIH07CiAKLXZvaWQgSlNMZXhpY2FsRW52aXJvbm1lbnQ6OnZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1l
IFZpc2l0b3I+Cit2b2lkIEpTTGV4aWNhbEVudmlyb25tZW50Ojp2aXNpdENoaWxkcmVuSW1wbChK
U0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0byogdGhpc09iamVjdCA9
IGpzQ2FzdDxKU0xleGljYWxFbnZpcm9ubWVudCo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpF
Q1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTQ0LDYgKzQ1LDggQEAgdm9pZCBK
U0xleGljYWxFbnZpcm9ubWVudDo6dmlzaXRDaGlsZHJlbgogICAgIHZpc2l0b3IuYXBwZW5kVmFs
dWVzSGlkZGVuKHRoaXNPYmplY3QtPnZhcmlhYmxlcygpLCB0aGlzT2JqZWN0LT5zeW1ib2xUYWJs
ZSgpLT5zY29wZVNpemUoKSk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU0xleGljYWxF
bnZpcm9ubWVudCk7CisKIHZvaWQgSlNMZXhpY2FsRW52aXJvbm1lbnQ6OmFuYWx5emVIZWFwKEpT
Q2VsbCogY2VsbCwgSGVhcEFuYWx5emVyJiBhbmFseXplcikKIHsKICAgICBhdXRvKiB0aGlzT2Jq
ZWN0ID0ganNDYXN0PEpTTGV4aWNhbEVudmlyb25tZW50Kj4oY2VsbCk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xleGljYWxFbnZpcm9ubWVudC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTGV4aWNhbEVudmlyb25tZW50LmgJ
KHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTGV4
aWNhbEVudmlyb25tZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEzNCw3ICsxMzQsNyBAQCBwcm90
ZWN0ZWQ6CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVu
KEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKICAg
ICBzdGF0aWMgdm9pZCBhbmFseXplSGVhcChKU0NlbGwqLCBIZWFwQW5hbHl6ZXImKTsKIH07CiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTWFwSXRlcmF0b3IuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTWFwSXRlcmF0b3Iu
Y3BwCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U01hcEl0ZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTcsMTMgKzU3LDE2IEBAIHZvaWQg
SlNNYXBJdGVyYXRvcjo6ZmluaXNoQ3JlYXRpb24oVk0mIHYKICAgICAgICAgQmFzZTo6aW50ZXJu
YWxGaWVsZChpbmRleCkuc2V0KHZtLCB0aGlzLCB2YWx1ZXNbaW5kZXhdKTsKIH0KIAotdm9pZCBK
U01hcEl0ZXJhdG9yOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZp
c2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU01hcEl0ZXJhdG9yOjp2
aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAg
YXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU01hcEl0ZXJhdG9yKj4oY2VsbCk7CiAgICAgQVNT
RVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwogICAgIEJhc2U6OnZp
c2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CiB9CiAKK0RFRklORV9WSVNJVF9DSElM
RFJFTihKU01hcEl0ZXJhdG9yKTsKKwogSlNWYWx1ZSBKU01hcEl0ZXJhdG9yOjpjcmVhdGVQYWly
KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUga2V5LCBKU1ZhbHVlIHZhbHVl
KQogewogICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3M7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU01hcEl0ZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNYXBJdGVyYXRvci5oCShyZXZpc2lvbiAyNzE0NDMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01hcEl0ZXJhdG9yLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTE0Miw3ICsxNDIsNyBAQCBwcml2YXRlOgogICAgIEpTX0VYUE9SVF9QUklWQVRF
IHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBKU01hcCosIEl0ZXJhdGlvbktpbmQpOwogICAgIHZv
aWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKICAgICBKU1ZhbHVlIGNyZWF0ZVBhaXIoSlNHbG9iYWxP
YmplY3QqLCBKU1ZhbHVlLCBKU1ZhbHVlKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVu
KEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIH07
CiBTVEFUSUNfQVNTRVJUX0lTX1RSSVZJQUxMWV9ERVNUUlVDVElCTEUoSlNNYXBJdGVyYXRvcik7
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlRW52aXJvbm1l
bnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9k
dWxlRW52aXJvbm1lbnQuY3BwCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU01vZHVsZUVudmlyb25tZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NjUsNyArNjUsOCBAQCB2b2lkIEpTTW9kdWxlRW52aXJvbm1lbnQ6OmZpbmlzaENyZWF0aW9uCiAg
ICAgdGhpcy0+bW9kdWxlUmVjb3JkU2xvdCgpLnNldCh2bSwgdGhpcywgbW9kdWxlUmVjb3JkKTsK
IH0KIAotdm9pZCBKU01vZHVsZUVudmlyb25tZW50Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2Vs
bCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9p
ZCBKU01vZHVsZUVudmlyb25tZW50Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZp
c2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNNb2R1bGVFbnZpcm9ubWVudCogdGhpc09iamVjdCA9
IGpzQ2FzdDxKU01vZHVsZUVudmlyb25tZW50Kj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVD
VF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNzQsNiArNzUsOCBAQCB2b2lkIEpT
TW9kdWxlRW52aXJvbm1lbnQ6OnZpc2l0Q2hpbGRyZW4oCiAgICAgdmlzaXRvci5hcHBlbmQodGhp
c09iamVjdC0+bW9kdWxlUmVjb3JkU2xvdCgpKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVO
KEpTTW9kdWxlRW52aXJvbm1lbnQpOworCiBib29sIEpTTW9kdWxlRW52aXJvbm1lbnQ6OmdldE93
blByb3BlcnR5U2xvdChKU09iamVjdCogY2VsbCwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQogewogICAg
IFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTTW9kdWxlRW52aXJvbm1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZUVudmlyb25tZW50LmgJKHJldmlzaW9uIDI3MTQ0
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlRW52aXJvbm1lbnQu
aAkod29ya2luZyBjb3B5KQpAQCAtODksNyArODksNyBAQCBwcml2YXRlOgogICAgICAgICByZXR1
cm4gKmJpdHdpc2VfY2FzdDxXcml0ZUJhcnJpZXJCYXNlPEFic3RyYWN0TW9kdWxlUmVjb3JkPio+
KGJpdHdpc2VfY2FzdDxjaGFyKj4odGhpcykgKyBvZmZzZXRPZk1vZHVsZVJlY29yZChzeW1ib2xU
YWJsZSgpKSk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwq
LCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiB9OwogCiBpbmxp
bmUgSlNNb2R1bGVFbnZpcm9ubWVudDo6SlNNb2R1bGVFbnZpcm9ubWVudChWTSYgdm0sIFN0cnVj
dHVyZSogc3RydWN0dXJlLCBKU1Njb3BlKiBjdXJyZW50U2NvcGUsIFN5bWJvbFRhYmxlKiBzeW1i
b2xUYWJsZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlTmFt
ZXNwYWNlT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU01vZHVsZU5hbWVzcGFjZU9iamVjdC5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlTmFtZXNwYWNlT2JqZWN0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtODUsNyArODUsOCBAQCB2b2lkIEpTTW9kdWxlTmFtZXNwYWNlT2Jq
ZWN0OjpkZXN0cm95KEpTCiAgICAgdGhpc09iamVjdC0+SlNNb2R1bGVOYW1lc3BhY2VPYmplY3Q6
On5KU01vZHVsZU5hbWVzcGFjZU9iamVjdCgpOwogfQogCi12b2lkIEpTTW9kdWxlTmFtZXNwYWNl
T2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3Ip
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU01vZHVsZU5hbWVzcGFjZU9iamVj
dDo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewog
ICAgIEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTTW9kdWxl
TmFtZXNwYWNlT2JqZWN0Kj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0
aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtOTgsNiArOTksOCBAQCB2b2lkIEpTTW9kdWxlTmFtZXNw
YWNlT2JqZWN0Ojp2aXNpdENoaWxkCiAgICAgfQogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4o
SlNNb2R1bGVOYW1lc3BhY2VPYmplY3QpOworCiBzdGF0aWMgSlNWYWx1ZSBnZXRWYWx1ZShKU01v
ZHVsZUVudmlyb25tZW50KiBlbnZpcm9ubWVudCwgUHJvcGVydHlOYW1lIGxvY2FsTmFtZSwgU2Nv
cGVPZmZzZXQmIHNjb3BlT2Zmc2V0KQogewogICAgIFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSA9
IGVudmlyb25tZW50LT5zeW1ib2xUYWJsZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZU5hbWVzcGFjZU9iamVjdC5oCShyZXZpc2lv
biAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZU5hbWVz
cGFjZU9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC03Miw3ICs3Miw3IEBAIHB1YmxpYzoKIHBy
aXZhdGU6CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QoVk0m
LCBTdHJ1Y3R1cmUqKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGZpbmlzaENyZWF0aW9u
KEpTR2xvYmFsT2JqZWN0KiwgQWJzdHJhY3RNb2R1bGVSZWNvcmQqLCBWZWN0b3I8c3RkOjpwYWly
PElkZW50aWZpZXIsIEFic3RyYWN0TW9kdWxlUmVjb3JkOjpSZXNvbHV0aW9uPj4mJik7Ci0gICAg
c3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERF
Q0xBUkVfVklTSVRfQ0hJTERSRU47CiAgICAgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3RDb21tb24o
SlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwogCiAgICAgc3Ry
dWN0IEV4cG9ydEVudHJ5IHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
TW9kdWxlUmVjb3JkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU01vZHVsZVJlY29yZC5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlUmVjb3JkLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NzAsNyArNzAsOCBAQCB2b2lkIEpTTW9kdWxlUmVjb3JkOjpmaW5pc2hDcmVhdGlvbihKU0dsCiAg
ICAgQVNTRVJUKGluaGVyaXRzKHZtLCBpbmZvKCkpKTsKIH0KIAotdm9pZCBKU01vZHVsZVJlY29y
ZDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVt
cGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNNb2R1bGVSZWNvcmQ6OnZpc2l0Q2hpbGRy
ZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU01vZHVsZVJl
Y29yZCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU01vZHVsZVJlY29yZCo+KGNlbGwpOwogICAgIEFT
U0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTc4LDYgKzc5
LDggQEAgdm9pZCBKU01vZHVsZVJlY29yZDo6dmlzaXRDaGlsZHJlbihKU0NlbAogICAgIHZpc2l0
b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fbW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUpOwogfQogCitE
RUZJTkVfVklTSVRfQ0hJTERSRU4oSlNNb2R1bGVSZWNvcmQpOworCiB2b2lkIEpTTW9kdWxlUmVj
b3JkOjpsaW5rKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgc2NyaXB0RmV0
Y2hlcikKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZVJlY29yZC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlUmVjb3JkLmgJKHJldmlzaW9uIDI3
MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlUmVjb3JkLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTY2LDcgKzY2LDcgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgZmlu
aXNoQ3JlYXRpb24oSlNHbG9iYWxPYmplY3QqLCBWTSYpOwogCi0gICAgc3RhdGljIHZvaWQgdmlz
aXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJ
TERSRU47CiAKICAgICB2b2lkIGluc3RhbnRpYXRlRGVjbGFyYXRpb25zKEpTR2xvYmFsT2JqZWN0
KiwgTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUqLCBKU1ZhbHVlIHNjcmlwdEZldGNoZXIpOwogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU05hdGl2ZVN0ZEZ1bmN0aW9uLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU05hdGl2ZVN0
ZEZ1bmN0aW9uLmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNOYXRpdmVTdGRGdW5jdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDEz
ICs0MSwxNiBAQCBKU05hdGl2ZVN0ZEZ1bmN0aW9uOjpKU05hdGl2ZVN0ZEZ1bmN0aW9uCiB7CiB9
CiAKLXZvaWQgSlNOYXRpdmVTdGRGdW5jdGlvbjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGws
IFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQg
SlNOYXRpdmVTdGRGdW5jdGlvbjo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNp
dG9yJiB2aXNpdG9yKQogewogICAgIEpTTmF0aXZlU3RkRnVuY3Rpb24qIHRoaXNPYmplY3QgPSBq
c0Nhc3Q8SlNOYXRpdmVTdGRGdW5jdGlvbio+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1Rf
SU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRo
aXNPYmplY3QsIHZpc2l0b3IpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNOYXRpdmVT
dGRGdW5jdGlvbik7CisKIHZvaWQgSlNOYXRpdmVTdGRGdW5jdGlvbjo6ZmluaXNoQ3JlYXRpb24o
Vk0mIHZtLCBOYXRpdmVFeGVjdXRhYmxlKiBleGVjdXRhYmxlLCB1bnNpZ25lZCBsZW5ndGgsIGNv
bnN0IFN0cmluZyYgbmFtZSkKIHsKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSwgZXhlY3V0
YWJsZSwgbGVuZ3RoLCBuYW1lKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTTmF0aXZlU3RkRnVuY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU05hdGl2ZVN0ZEZ1bmN0aW9uLmgJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTmF0aXZlU3RkRnVuY3Rpb24uaAkod29ya2lu
ZyBjb3B5KQpAQCAtNjUsNyArNjUsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIEpTTmF0aXZl
U3RkRnVuY3Rpb24oVk0mLCBOYXRpdmVFeGVjdXRhYmxlKiwgSlNHbG9iYWxPYmplY3QqLCBTdHJ1
Y3R1cmUqLCBOYXRpdmVTdGRGdW5jdGlvbiYmKTsKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZN
JiwgTmF0aXZlRXhlY3V0YWJsZSosIHVuc2lnbmVkIGxlbmd0aCwgY29uc3QgU3RyaW5nJiBuYW1l
KTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7
CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIE5hdGl2ZVN0ZEZ1bmN0aW9uIG1f
ZnVuY3Rpb247CiB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmpl
Y3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2Jq
ZWN0LmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MCw3ICs5MCw4IEBAIEFMV0FZU19J
TkxJTkUgdm9pZCBKU09iamVjdDo6Z2V0Tm9uUmVpZmkKICAgICB9CiB9CiAKLUFMV0FZU19JTkxJ
TkUgdm9pZCBKU09iamVjdDo6bWFya0F1eGlsaWFyeUFuZFZpc2l0T3V0T2ZMaW5lUHJvcGVydGll
cyhTbG90VmlzaXRvciYgdmlzaXRvciwgQnV0dGVyZmx5KiBidXR0ZXJmbHksIFN0cnVjdHVyZSog
c3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBtYXhPZmZzZXQpCit0ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPgorQUxXQVlTX0lOTElORSB2b2lkIEpTT2JqZWN0OjptYXJrQXV4aWxpYXJ5QW5kVmlz
aXRPdXRPZkxpbmVQcm9wZXJ0aWVzKFZpc2l0b3ImIHZpc2l0b3IsIEJ1dHRlcmZseSogYnV0dGVy
Zmx5LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgbWF4T2Zmc2V0KQogewog
ICAgIC8vIFdlIGNhbGwgdGhpcyB3aGVuIHdlIGZvdW5kIGV2ZXJ5dGhpbmcgd2l0aG91dCByYWNl
cy4KICAgICBBU1NFUlQoc3RydWN0dXJlKTsKQEAgLTEyMSw3ICsxMjIsOCBAQCBBTFdBWVNfSU5M
SU5FIHZvaWQgSlNPYmplY3Q6Om1hcmtBdXhpbGlhCiAgICAgdmlzaXRvci5hcHBlbmRWYWx1ZXNI
aWRkZW4oYnV0dGVyZmx5LT5wcm9wZXJ0eVN0b3JhZ2UoKSAtIG91dE9mTGluZVNpemUsIG91dE9m
TGluZVNpemUpOwogfQogCi1BTFdBWVNfSU5MSU5FIFN0cnVjdHVyZSogSlNPYmplY3Q6OnZpc2l0
QnV0dGVyZmx5KFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRv
cj4KK0FMV0FZU19JTkxJTkUgU3RydWN0dXJlKiBKU09iamVjdDo6dmlzaXRCdXR0ZXJmbHkoVmlz
aXRvciYgdmlzaXRvcikKIHsKICAgICBzdGF0aWMgY29uc3QgY2hhciogY29uc3QgcmFjZVJlYXNv
biA9ICJKU09iamVjdDo6dmlzaXRCdXR0ZXJmbHkiOwogICAgIFN0cnVjdHVyZSogcmVzdWx0ID0g
dmlzaXRCdXR0ZXJmbHlJbXBsKHZpc2l0b3IpOwpAQCAtMTMwLDcgKzEzMiw4IEBAIEFMV0FZU19J
TkxJTkUgU3RydWN0dXJlKiBKU09iamVjdDo6dmlzaXQKICAgICByZXR1cm4gcmVzdWx0OwogfQog
Ci1BTFdBWVNfSU5MSU5FIFN0cnVjdHVyZSogSlNPYmplY3Q6OnZpc2l0QnV0dGVyZmx5SW1wbChT
bG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+CitBTFdBWVNf
SU5MSU5FIFN0cnVjdHVyZSogSlNPYmplY3Q6OnZpc2l0QnV0dGVyZmx5SW1wbChWaXNpdG9yJiB2
aXNpdG9yKQogewogICAgIFZNJiB2bSA9IHZpc2l0b3Iudm0oKTsKICAgICAKQEAgLTQzMCwyNCAr
NDMzLDIwIEBAIHNpemVfdCBKU09iamVjdDo6ZXN0aW1hdGVkU2l6ZShKU0NlbGwqIGMKICAgICBy
ZXR1cm4gQmFzZTo6ZXN0aW1hdGVkU2l6ZShjZWxsLCB2bSkgKyBidXR0ZXJmbHlPdXRPZkxpbmVT
aXplOwogfQogCi12b2lkIEpTT2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xv
dFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU09i
amVjdDo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQog
ewogICAgIEpTT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTT2JqZWN0Kj4oY2VsbCk7CiAg
ICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwotI2lmIEFT
U0VSVF9FTkFCTEVECi0gICAgYm9vbCB3YXNDaGVja2luZ0ZvckRlZmF1bHRNYXJrVmlvbGF0aW9u
ID0gdmlzaXRvci5tX2lzQ2hlY2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlvbjsKLSAgICB2aXNp
dG9yLm1faXNDaGVja2luZ0ZvckRlZmF1bHRNYXJrVmlvbGF0aW9uID0gZmFsc2U7Ci0jZW5kaWYK
LSAgICAKKyAgICB0eXBlbmFtZSBWaXNpdG9yOjpEZWZhdWx0TWFya2luZ1Zpb2xhdGlvbkFzc2Vy
dGlvblNjb3BlIGFzc2VydGlvblNjb3BlKHZpc2l0b3IpOworCiAgICAgSlNDZWxsOjp2aXNpdENo
aWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwotICAgIAorCiAgICAgdGhpc09iamVjdC0+dmlz
aXRCdXR0ZXJmbHkodmlzaXRvcik7Ci0gICAgCi0jaWYgQVNTRVJUX0VOQUJMRUQKLSAgICB2aXNp
dG9yLm1faXNDaGVja2luZ0ZvckRlZmF1bHRNYXJrVmlvbGF0aW9uID0gd2FzQ2hlY2tpbmdGb3JE
ZWZhdWx0TWFya1Zpb2xhdGlvbjsKLSNlbmRpZgogfQogCitERUZJTkVfRVhQT1JUX1ZJU0lUX0NI
SUxEUkVOKEpTT2JqZWN0KTsKKwogdm9pZCBKU09iamVjdDo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBj
ZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQogewogICAgIEpTT2JqZWN0KiB0aGlzT2JqZWN0
ID0ganNDYXN0PEpTT2JqZWN0Kj4oY2VsbCk7CkBAIC00ODYsMTQgKzQ4NSwxMiBAQCB2b2lkIEpT
T2JqZWN0OjphbmFseXplSGVhcChKU0NlbGwqIGNlbGwsCiAgICAgfQogfQogCi12b2lkIEpTRmlu
YWxPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRv
cikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTRmluYWxPYmplY3Q6OnZpc2l0
Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU0Zp
bmFsT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTRmluYWxPYmplY3QqPihjZWxsKTsKICAg
ICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7Ci0jaWYgQVNT
RVJUX0VOQUJMRUQKLSAgICBib29sIHdhc0NoZWNraW5nRm9yRGVmYXVsdE1hcmtWaW9sYXRpb24g
PSB2aXNpdG9yLm1faXNDaGVja2luZ0ZvckRlZmF1bHRNYXJrVmlvbGF0aW9uOwotICAgIHZpc2l0
b3IubV9pc0NoZWNraW5nRm9yRGVmYXVsdE1hcmtWaW9sYXRpb24gPSBmYWxzZTsKLSNlbmRpZgor
ICAgIHR5cGVuYW1lIFZpc2l0b3I6OkRlZmF1bHRNYXJraW5nVmlvbGF0aW9uQXNzZXJ0aW9uU2Nv
cGUgYXNzZXJ0aW9uU2NvcGUodmlzaXRvcik7CiAgICAgCiAgICAgSlNDZWxsOjp2aXNpdENoaWxk
cmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwogICAgIApAQCAtNTAxLDEyICs0OTgsMTAgQEAgdm9p
ZCBKU0ZpbmFsT2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbAogICAgICAgICBpZiAodW5zaWdu
ZWQgc3RvcmFnZVNpemUgPSBzdHJ1Y3R1cmUtPmlubGluZVNpemUoKSkKICAgICAgICAgICAgIHZp
c2l0b3IuYXBwZW5kVmFsdWVzSGlkZGVuKHRoaXNPYmplY3QtPmlubGluZVN0b3JhZ2UoKSwgc3Rv
cmFnZVNpemUpOwogICAgIH0KLSAgICAKLSNpZiBBU1NFUlRfRU5BQkxFRAotICAgIHZpc2l0b3Iu
bV9pc0NoZWNraW5nRm9yRGVmYXVsdE1hcmtWaW9sYXRpb24gPSB3YXNDaGVja2luZ0ZvckRlZmF1
bHRNYXJrVmlvbGF0aW9uOwotI2VuZGlmCiB9CiAKK0RFRklORV9FWFBPUlRfVklTSVRfQ0hJTERS
RU4oSlNGaW5hbE9iamVjdCk7CisKIFN0cmluZyBKU09iamVjdDo6Y2xhc3NOYW1lKGNvbnN0IEpT
T2JqZWN0KiBvYmplY3QsIFZNJiB2bSkKIHsKICAgICBjb25zdCBDbGFzc0luZm8qIGluZm8gPSBv
YmplY3QtPmNsYXNzSW5mbyh2bSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU09iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTT2JqZWN0LmgJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEwOCw4ICsxMDgsOSBAQCBjbGFz
cyBKU09iamVjdCA6IHB1YmxpYyBKU0NlbGwgewogcHVibGljOgogICAgIHVzaW5nIEJhc2UgPSBK
U0NlbGw7CiAKKyAgICBERUNMQVJFX0VYUE9SVF9WSVNJVF9DSElMRFJFTjsKKwogICAgIEpTX0VY
UE9SVF9QUklWQVRFIHN0YXRpYyBzaXplX3QgZXN0aW1hdGVkU2l6ZShKU0NlbGwqLCBWTSYpOwot
ICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwg
U2xvdFZpc2l0b3ImKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBhbmFseXpl
SGVhcChKU0NlbGwqLCBIZWFwQW5hbHl6ZXImKTsKIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0
YXRpYyBTdHJpbmcgY2xhc3NOYW1lKGNvbnN0IEpTT2JqZWN0KiwgVk0mKTsKQEAgLTk4MCwxMSAr
OTgxLDExIEBAIHByb3RlY3RlZDoKICAgICBKU09iamVjdChWTSYsIFN0cnVjdHVyZSosIEJ1dHRl
cmZseSogPSBudWxscHRyKTsKICAgICAKICAgICAvLyBWaXNpdHMgdGhlIGJ1dHRlcmZseSB1bmxl
c3MgdGhlcmUgaXMgYSByYWNlLiBSZXR1cm5zIHRoZSBzdHJ1Y3R1cmUgaWYgdGhlcmUgd2FzIG5v
IHJhY2UuCi0gICAgU3RydWN0dXJlKiB2aXNpdEJ1dHRlcmZseShTbG90VmlzaXRvciYpOworICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IFN0cnVjdHVyZSogdmlzaXRCdXR0ZXJmbHkoVmlz
aXRvciYpOwogICAgIAotICAgIFN0cnVjdHVyZSogdmlzaXRCdXR0ZXJmbHlJbXBsKFNsb3RWaXNp
dG9yJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gU3RydWN0dXJlKiB2aXNpdEJ1
dHRlcmZseUltcGwoVmlzaXRvciYpOwogICAgIAotICAgIHZvaWQgbWFya0F1eGlsaWFyeUFuZFZp
c2l0T3V0T2ZMaW5lUHJvcGVydGllcyhTbG90VmlzaXRvciYsIEJ1dHRlcmZseSosIFN0cnVjdHVy
ZSosIFByb3BlcnR5T2Zmc2V0IG1heE9mZnNldCk7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlz
aXRvcj4gdm9pZCBtYXJrQXV4aWxpYXJ5QW5kVmlzaXRPdXRPZkxpbmVQcm9wZXJ0aWVzKFZpc2l0
b3ImLCBCdXR0ZXJmbHkqLCBTdHJ1Y3R1cmUqLCBQcm9wZXJ0eU9mZnNldCBtYXhPZmZzZXQpOwog
CiAgICAgLy8gQ2FsbCB0aGlzIGlmIHlvdSBrbm93IHRoYXQgdGhlIG9iamVjdCBpcyBpbiBhIG1v
ZGUgd2hlcmUgaXQgaGFzIGFycmF5CiAgICAgLy8gc3RvcmFnZS4gVGhpcyB3aWxsIGFzc2VydCBv
dGhlcndpc2UuCkBAIC0xMTcyLDggKzExNzMsNiBAQCBwcm90ZWN0ZWQ6CiAgICAgfQogfTsKIAot
Y2xhc3MgSlNGaW5hbE9iamVjdDsKLQogLy8gSlNGaW5hbE9iamVjdCBpcyBhIHR5cGUgb2YgSlNP
YmplY3QgdGhhdCBjb250YWlucyBzdWZmaWNpZW50IGludGVybmFsCiAvLyBzdG9yYWdlIHRvIGZ1
bGx5IG1ha2UgdXNlIG9mIHRoZSBjb2xsZWN0b3IgY2VsbCBjb250YWluaW5nIGl0LgogY2xhc3Mg
SlNGaW5hbE9iamVjdCBmaW5hbCA6IHB1YmxpYyBKU09iamVjdCB7CkBAIC0xMjEyLDE1ICsxMjEx
LDEzIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9i
YWxPYmplY3QsIHByb3RvdHlwZSwgdHlwZUluZm8oKSwgaW5mbygpLCBkZWZhdWx0SW5kZXhpbmdU
eXBlLCBpbmxpbmVDYXBhY2l0eSk7CiAgICAgfQogCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgc3Rh
dGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xB
UkVfRVhQT1JUX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgREVDTEFSRV9FWFBPUlRfSU5GTzsKIAog
cHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwogCi0gICAg
dm9pZCB2aXNpdENoaWxkcmVuQ29tbW9uKFNsb3RWaXNpdG9yJik7Ci0KICAgICBleHBsaWNpdCBK
U0ZpbmFsT2JqZWN0KFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEJ1dHRlcmZseSogYnV0
dGVyZmx5KQogICAgICAgICA6IEpTT2JqZWN0KHZtLCBzdHJ1Y3R1cmUsIGJ1dHRlcmZseSkKICAg
ICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb21pc2UuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvbWlzZS5jcHAJ
KHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJv
bWlzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY3LDEzICs2NywxNiBAQCB2b2lkIEpTUHJvbWlz
ZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQogICAgICAgICBCYXNlOjppbnRlcm5hbEZpZWxkKGlu
ZGV4KS5zZXQodm0sIHRoaXMsIHZhbHVlc1tpbmRleF0pOwogfQogCi12b2lkIEpTUHJvbWlzZTo6
dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxh
dGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNQcm9taXNlOjp2aXNpdENoaWxkcmVuSW1wbChK
U0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0byogdGhpc09iamVjdCA9
IGpzQ2FzdDxKU1Byb21pc2UqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRT
KHRoaXNPYmplY3QsIGluZm8oKSk7CiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0
LCB2aXNpdG9yKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTUHJvbWlzZSk7CisKIGF1
dG8gSlNQcm9taXNlOjpzdGF0dXMoVk0mKSBjb25zdCAtPiBTdGF0dXMKIHsKICAgICBKU1ZhbHVl
IHZhbHVlID0gaW50ZXJuYWxGaWVsZChGaWVsZDo6RmxhZ3MpLmdldCgpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9taXNlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9taXNlLmgJKHJldmlzaW9uIDI3MTQ0MykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvbWlzZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC05Myw3ICs5Myw3IEBAIHB1YmxpYzoKICAgICB9OwogICAgIHN0YXRpYyBEZWZlcnJlZERh
dGEgY3JlYXRlRGVmZXJyZWREYXRhKEpTR2xvYmFsT2JqZWN0KiwgSlNQcm9taXNlQ29uc3RydWN0
b3IqKTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0
b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiBwcm90ZWN0ZWQ6CiAgICAgSlNQ
cm9taXNlKFZNJiwgU3RydWN0dXJlKik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVydHlOYW1lRW51bWVyYXRvci5jcHAJKHJldmlz
aW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVydHlO
YW1lRW51bWVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcwLDcgKzcwLDggQEAgdm9pZCBK
U1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmZpbmlzaENyZQogICAgIH0KIH0KIAotdm9pZCBKU1By
b3BlcnR5TmFtZUVudW1lcmF0b3I6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90Vmlz
aXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTUHJvcGVy
dHlOYW1lRW51bWVyYXRvcjo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9y
JiB2aXNpdG9yKQogewogICAgIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvciogdGhpc09iamVjdCA9
IGpzQ2FzdDxKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqPihjZWxsKTsKICAgICBBU1NFUlRfR0Nf
T0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC04Nyw2ICs4OCw4IEBAIHZv
aWQgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjp2aXNpdENoaWwKICAgICB9CiB9CiAKK0RFRklO
RV9WSVNJVF9DSElMRFJFTihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IpOworCiAvLyBGSVhNRTog
QXNzZXJ0IHRoYXQgcHJvcGVydGllcyByZXR1cm5lZCBieSBnZXRPd25Qcm9wZXJ0eU5hbWVzKCkg
YXJlIHJlcG9ydGVkIGVudW1lcmFibGUgYnkgZ2V0T3duUHJvcGVydHlTbG90KCkuCiAvLyBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE5OTI2CiB2b2lkIGdldEVudW1l
cmFibGVQcm9wZXJ0eU5hbWVzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTT2JqZWN0
KiBiYXNlLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgdWludDMyX3QmIGluZGV4
ZWRMZW5ndGgsIHVpbnQzMl90JiBzdHJ1Y3R1cmVQcm9wZXJ0eUNvdW50KQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVFbnVt
ZXJhdG9yLmgJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTUHJvcGVydHlOYW1lRW51bWVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC04NCw3ICs4
NCw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU1Byb3BlcnR5
TmFtZUVudW1lcmF0b3IsIG1fcHJvcGVydHlOYW1lcyk7CiAgICAgfQogCi0gICAgc3RhdGljIHZv
aWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklT
SVRfQ0hJTERSRU47CiAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4
dHJhY3RvcjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJveHkuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJveHkuY3Bw
CShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1By
b3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsNyArMzUsOCBAQCBTVEFUSUNfQVNTRVJUX0lT
X1RSSVZJQUxMWV9ERVNUUlVDVElCTEUoCiAKIGNvbnN0IENsYXNzSW5mbyBKU1Byb3h5OjpzX2lu
Zm8gPSB7ICJKU1Byb3h5IiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRF
X01FVEhPRF9UQUJMRShKU1Byb3h5KSB9OwogCi12b2lkIEpTUHJveHk6OnZpc2l0Q2hpbGRyZW4o
SlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZp
c2l0b3I+Cit2b2lkIEpTUHJveHk6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlz
aXRvciYgdmlzaXRvcikKIHsKICAgICBKU1Byb3h5KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTUHJv
eHkqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGlu
Zm8oKSk7CkBAIC00Myw2ICs0NCw4IEBAIHZvaWQgSlNQcm94eTo6dmlzaXRDaGlsZHJlbihKU0Nl
bGwqIGNlbGwKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX3RhcmdldCk7CiB9CiAK
K0RFRklORV9FWFBPUlRfVklTSVRfQ0hJTERSRU4oSlNQcm94eSk7CisKIHZvaWQgSlNQcm94eTo6
c2V0VGFyZ2V0KFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKIHsKICAgICBt
X3RhcmdldC5zZXQodm0sIHRoaXMsIGdsb2JhbE9iamVjdCk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU1Byb3h5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNQcm94eS5oCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3h5LmgJKHdvcmtpbmcgY29weSkKQEAgLTg1LDcgKzg1
LDcgQEAgcHJvdGVjdGVkOgogICAgICAgICBtX3RhcmdldC5zZXQodm0sIHRoaXMsIHRhcmdldCk7
CiAgICAgfQogCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJl
bihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfRVhQT1JUX1ZJU0lUX0NISUxE
UkVOOwogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFN0cmluZyBjbGFzc05hbWUoY29u
c3QgSlNPYmplY3QqLCBWTSYpOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBTdHJpbmcg
dG9TdHJpbmdOYW1lKGNvbnN0IEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2NvcGUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2NvcGUuY3BwCShyZXZpc2lvbiAyNzE0NDMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Njb3BlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzksNyArMzksOCBAQCBTVEFUSUNfQVNTRVJUX0lTX1RSSVZJQUxMWV9ERVNUUlVD
VElCTEUoCiAKIGNvbnN0IENsYXNzSW5mbyBKU1Njb3BlOjpzX2luZm8gPSB7ICJTY29wZSIsICZC
YXNlOjpzX2luZm8sIG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNTY29w
ZSkgfTsKIAotdm9pZCBKU1Njb3BlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZp
c2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1Njb3Bl
Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAg
ICAgSlNTY29wZSogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Njb3BlKj4oY2VsbCk7CiAgICAgQVNT
RVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNDcsNiArNDgs
OCBAQCB2b2lkIEpTU2NvcGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsCiAgICAgdmlzaXRv
ci5hcHBlbmQodGhpc09iamVjdC0+bV9uZXh0KTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVO
KEpTU2NvcGUpOworCiAvLyBSZXR1cm5zIHRydWUgaWYgd2UgZm91bmQgZW5vdWdoIGluZm9ybWF0
aW9uIHRvIHRlcm1pbmF0ZSBvcHRpbWl6YXRpb24uCiBzdGF0aWMgaW5saW5lIGJvb2wgYWJzdHJh
Y3RBY2Nlc3MoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNTY29wZSogc2NvcGUsIGNv
bnN0IElkZW50aWZpZXImIGlkZW50LCBHZXRPclB1dCBnZXRPclB1dCwgc2l6ZV90IGRlcHRoLCBi
b29sJiBuZWVkc1ZhckluamVjdGlvbkNoZWNrcywgUmVzb2x2ZU9wJiBvcCwgSW5pdGlhbGl6YXRp
b25Nb2RlIGluaXRpYWxpemF0aW9uTW9kZSkKIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTU2NvcGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU1Njb3BlLmgJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTU2NvcGUuaAkod29ya2luZyBjb3B5KQpAQCAtNjQsNyArNjQsNyBAQCBw
dWJsaWM6CiAKICAgICBzdGF0aWMgdm9pZCBjb2xsZWN0Q2xvc3VyZVZhcmlhYmxlc1VuZGVyVERa
KEpTU2NvcGUqLCBURFpFbnZpcm9ubWVudCYgcmVzdWx0LCBWYXJpYWJsZUVudmlyb25tZW50JiBw
cml2YXRlTmFtZXMpOwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBT
bG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBib29sIGlz
VmFyU2NvcGUoKTsKICAgICBib29sIGlzTGV4aWNhbFNjb3BlKCk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NlZ21lbnRlZFZhcmlhYmxl
T2JqZWN0LmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYy
LDE5ICs2MiwyMiBAQCBTY29wZU9mZnNldCBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0OjphCiAg
ICAgcmV0dXJuIFNjb3BlT2Zmc2V0KG9sZFNpemUpOwogfQogCi12b2lkIEpTU2VnbWVudGVkVmFy
aWFibGVPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgc2xv
dFZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1NlZ21lbnRlZFZh
cmlhYmxlT2JqZWN0Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZp
c2l0b3IpCiB7CiAgICAgSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdCogdGhpc09iamVjdCA9IGpz
Q2FzdDxKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0Kj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09C
SkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwotICAgIEJhc2U6OnZpc2l0Q2hpbGRy
ZW4odGhpc09iamVjdCwgc2xvdFZpc2l0b3IpOworICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhp
c09iamVjdCwgdmlzaXRvcik7CiAgICAgCiAgICAgLy8gRklYTUU6IFdlIGNvdWxkIGF2b2lkIGxv
Y2tpbmcgaGVyZSBpZiBTZWdtZW50ZWRWZWN0b3Igd2FzIGxvY2stZnJlZS4gSXQgY291bGQgYmUg
bWFkZSBsb2NrLWZyZWUKICAgICAvLyByZWxhdGl2ZWx5IGVhc2lseS4KICAgICBhdXRvIGxvY2tl
ciA9IGhvbGRMb2NrKHRoaXNPYmplY3QtPmNlbGxMb2NrKCkpOwogICAgIGZvciAodW5zaWduZWQg
aSA9IHRoaXNPYmplY3QtPm1fdmFyaWFibGVzLnNpemUoKTsgaS0tOykKLSAgICAgICAgc2xvdFZp
c2l0b3IuYXBwZW5kSGlkZGVuKHRoaXNPYmplY3QtPm1fdmFyaWFibGVzW2ldKTsKKyAgICAgICAg
dmlzaXRvci5hcHBlbmRIaWRkZW4odGhpc09iamVjdC0+bV92YXJpYWJsZXNbaV0pOwogfQogCitE
RUZJTkVfRVhQT1JUX1ZJU0lUX0NISUxEUkVOKEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3QpOwor
CiB2b2lkIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3Q6OmFuYWx5emVIZWFwKEpTQ2VsbCogY2Vs
bCwgSGVhcEFuYWx5emVyJiBhbmFseXplcikKIHsKICAgICBKU1NlZ21lbnRlZFZhcmlhYmxlT2Jq
ZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3QqPihjZWxs
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2VnbWVudGVkVmFyaWFi
bGVPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmgJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVPYmplY3QuaAkod29ya2lu
ZyBjb3B5KQpAQCAtODYsNyArODYsNyBAQCBwdWJsaWM6CiAgICAgLy8gdGhlIGluZGV4IG9mIHRo
ZSBmaXJzdCBvbmUgYWRkZWQuCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgU2NvcGVPZmZzZXQgYWRk
VmFyaWFibGVzKHVuc2lnbmVkIG51bWJlck9mVmFyaWFibGVzVG9BZGQsIEpTVmFsdWUpOwogICAg
IAotICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX0VYUE9SVF9WSVNJVF9DSElMRFJFTjsKICAg
ICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBhbmFseXplSGVhcChKU0NlbGwqLCBIZWFw
QW5hbHl6ZXImKTsKICAgICAKIHByb3RlY3RlZDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTU2V0SXRlcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTU2V0SXRlcmF0b3IuY3BwCShyZXZpc2lvbiAyNzE0NDMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NldEl0ZXJhdG9yLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNTcsMTMgKzU3LDE2IEBAIHZvaWQgSlNTZXRJdGVyYXRvcjo6ZmluaXNoQ3JlYXRp
b24oVk0mIHYKICAgICAgICAgQmFzZTo6aW50ZXJuYWxGaWVsZChpbmRleCkuc2V0KHZtLCB0aGlz
LCB2YWx1ZXNbaW5kZXhdKTsKIH0KIAotdm9pZCBKU1NldEl0ZXJhdG9yOjp2aXNpdENoaWxkcmVu
KEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPgordm9pZCBKU1NldEl0ZXJhdG9yOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNl
bGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxK
U1NldEl0ZXJhdG9yKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlz
T2JqZWN0LCBpbmZvKCkpOwogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlz
aXRvcik7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU1NldEl0ZXJhdG9yKTsKKwogSlNW
YWx1ZSBKU1NldEl0ZXJhdG9yOjpjcmVhdGVQYWlyKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEpTVmFsdWUga2V5LCBKU1ZhbHVlIHZhbHVlKQogewogICAgIE1hcmtlZEFyZ3VtZW50QnVm
ZmVyIGFyZ3M7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NldEl0ZXJh
dG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZXRJ
dGVyYXRvci5oCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1NldEl0ZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTEzMCw3ICsxMzAsNyBAQCBw
cml2YXRlOgogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBK
U1NldCosIEl0ZXJhdGlvbktpbmQpOwogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKICAg
ICBKU19FWFBPUlRfUFJJVkFURSBKU1ZhbHVlIGNyZWF0ZVBhaXIoSlNHbG9iYWxPYmplY3QqLCBK
U1ZhbHVlLCBKU1ZhbHVlKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCos
IFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIH07CiBTVEFUSUNf
QVNTRVJUX0lTX1RSSVZJQUxMWV9ERVNUUlVDVElCTEUoSlNTZXRJdGVyYXRvcik7CiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU291cmNlQ29kZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTb3VyY2VDb2RlLmNwcAkocmV2
aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTb3VyY2VD
b2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsOCBAQAogI2luY2x1ZGUgImNvbmZp
Zy5oIgogI2luY2x1ZGUgIkpTU291cmNlQ29kZS5oIgogCisjaW5jbHVkZSAiSlNDZWxsSW5saW5l
cy5oIiAvLyBtbGFtIFRFU1QKKwogbmFtZXNwYWNlIEpTQyB7CiAKIGNvbnN0IENsYXNzSW5mbyBK
U1NvdXJjZUNvZGU6OnNfaW5mbyA9IHsgIkpTU291cmNlQ29kZSIsIG51bGxwdHIsIG51bGxwdHIs
IG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNTb3VyY2VDb2RlKSB9OwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmNwcAkocmV2aXNpb24gMjcxNDQz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMDUsNyArMTA1LDggQEAgc2l6ZV90IEpTU3RyaW5nOjplc3RpbWF0ZWRTaXpl
KEpTQ2VsbCogYwogICAgIHJldHVybiBCYXNlOjplc3RpbWF0ZWRTaXplKGNlbGwsIHZtKSArIGJp
dHdpc2VfY2FzdDxTdHJpbmdJbXBsKj4ocG9pbnRlciktPmNvc3REdXJpbmdHQygpOwogfQogCi12
b2lkIEpTU3RyaW5nOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZp
c2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1N0cmluZzo6dmlzaXRD
aGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTU3Ry
aW5nKiB0aGlzT2JqZWN0ID0gYXNTdHJpbmcoY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9J
TkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtMTQzLDYgKzE0NCw4IEBAIHZvaWQgSlNT
dHJpbmc6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWwKICAgICAgICAgdmlzaXRvci5yZXBvcnRF
eHRyYU1lbW9yeVZpc2l0ZWQoaW1wbC0+Y29zdER1cmluZ0dDKCkpOwogfQogCitERUZJTkVfVklT
SVRfQ0hJTERSRU4oSlNTdHJpbmcpOworCiBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG1heExl
bmd0aEZvck9uU3RhY2tSZXNvbHZlID0gMjA0ODsKIAogdm9pZCBKU1JvcGVTdHJpbmc6OnJlc29s
dmVSb3BlSW50ZXJuYWw4KExDaGFyKiBidWZmZXIpIGNvbnN0CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmgJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTIxNyw3
ICsyMTcsNyBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgdm9pZCBkdW1wVG9TdHJlYW0oY29uc3Qg
SlNDZWxsKiwgUHJpbnRTdHJlYW0mKTsKICAgICBzdGF0aWMgc2l6ZV90IGVzdGltYXRlZFNpemUo
SlNDZWxsKiwgVk0mKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNs
b3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIEFMV0FZU19J
TkxJTkUgYm9vbCBpc1JvcGUoKSBjb25zdAogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTU3RyaW5nSXRlcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nSXRlcmF0b3IuY3BwCShyZXZpc2lvbiAyNzE0
NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZ0l0ZXJhdG9yLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNTEsMTEgKzUxLDE0IEBAIEpTU3RyaW5nSXRlcmF0b3IqIEpT
U3RyaW5nSXRlcmF0b3I6OmNsb24KICAgICByZXR1cm4gY2xvbmU7CiB9CiAKLXZvaWQgSlNTdHJp
bmdJdGVyYXRvcjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNp
dG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNTdHJpbmdJdGVyYXRvcjo6
dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAg
IGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNTdHJpbmdJdGVyYXRvcio+KGNlbGwpOwogICAg
IEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKICAgICBCYXNl
Ojp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwogfQogCitERUZJTkVfVklTSVRf
Q0hJTERSRU4oSlNTdHJpbmdJdGVyYXRvcik7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmdJdGVyYXRvci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nSXRlcmF0b3IuaAko
cmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJp
bmdJdGVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC03OSw3ICs3OSw3IEBAIHB1YmxpYzoKICAg
ICBKU1ZhbHVlIGluZGV4KCkgY29uc3QgeyByZXR1cm4gaW50ZXJuYWxGaWVsZChGaWVsZDo6SW5k
ZXgpLmdldCgpOyB9CiAgICAgSlNTdHJpbmdJdGVyYXRvciogY2xvbmUoSlNHbG9iYWxPYmplY3Qq
KTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3Im
KTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiBwcml2YXRlOgogICAgIEpTU3RyaW5n
SXRlcmF0b3IoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuY3BwCShy
ZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N5bWJv
bFRhYmxlT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsOCBAQCBuYW1lc3Bh
Y2UgSlNDIHsKIAogY29uc3QgQ2xhc3NJbmZvIEpTU3ltYm9sVGFibGVPYmplY3Q6OnNfaW5mbyA9
IHsgIlN5bWJvbFRhYmxlT2JqZWN0IiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwg
Q1JFQVRFX01FVEhPRF9UQUJMRShKU1N5bWJvbFRhYmxlT2JqZWN0KSB9OwogCi12b2lkIEpTU3lt
Ym9sVGFibGVPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYg
dmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTU3ltYm9sVGFibGVP
YmplY3Q6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikK
IHsKICAgICBKU1N5bWJvbFRhYmxlT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTU3ltYm9s
VGFibGVPYmplY3QqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNP
YmplY3QsIGluZm8oKSk7CkBAIC00NCw2ICs0NSw4IEBAIHZvaWQgSlNTeW1ib2xUYWJsZU9iamVj
dDo6dmlzaXRDaGlsZHJlbigKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX3N5bWJv
bFRhYmxlKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTU3ltYm9sVGFibGVPYmplY3Qp
OworCiBib29sIEpTU3ltYm9sVGFibGVPYmplY3Q6OmRlbGV0ZVByb3BlcnR5KEpTQ2VsbCogY2Vs
bCwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFt
ZSwgRGVsZXRlUHJvcGVydHlTbG90JiBzbG90KQogewogICAgIEpTU3ltYm9sVGFibGVPYmplY3Qq
IHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNTeW1ib2xUYWJsZU9iamVjdCo+KGNlbGwpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVjdC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3ltYm9sVGFibGVPYmpl
Y3QuaAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNTeW1ib2xUYWJsZU9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC03MCw3ICs3MCw3IEBAIHBy
b3RlY3RlZDoKICAgICAgICAgbV9zeW1ib2xUYWJsZS5zZXQodm0sIHRoaXMsIHN5bWJvbFRhYmxl
KTsKICAgICB9CiAgICAgCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBT
bG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAgICAgCiBwcml2YXRl
OgogICAgIFdyaXRlQmFycmllcjxTeW1ib2xUYWJsZT4gbV9zeW1ib2xUYWJsZTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTV2Vha09iamVjdFJlZi5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNXZWFrT2JqZWN0UmVmLmNwcAko
cmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNXZWFr
T2JqZWN0UmVmLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksNyArMzksOCBAQCB2b2lkIEpTV2Vh
a09iamVjdFJlZjo6ZmluaXNoQ3JlYXRpb24oVk0mCiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24o
dm0pOwogfQogCi12b2lkIEpTV2Vha09iamVjdFJlZjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNl
bGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3Zv
aWQgSlNXZWFrT2JqZWN0UmVmOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0
b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1dlYWtPYmpl
Y3RSZWYqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3Qs
IGluZm8oKSk7CkBAIC01MSw2ICs1Miw4IEBAIHZvaWQgSlNXZWFrT2JqZWN0UmVmOjp2aXNpdENo
aWxkcmVuKEpTQ2UKICAgICB9CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU1dlYWtPYmpl
Y3RSZWYpOworCiB2b2lkIEpTV2Vha09iamVjdFJlZjo6ZmluYWxpemVVbmNvbmRpdGlvbmFsbHko
Vk0mIHZtKQogewogICAgIGlmIChtX3ZhbHVlICYmICF2bS5oZWFwLmlzTWFya2VkKG1fdmFsdWUu
Z2V0KCkpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNXZWFrT2JqZWN0
UmVmLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNXZWFr
T2JqZWN0UmVmLmgJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTV2Vha09iamVjdFJlZi5oCSh3b3JraW5nIGNvcHkpCkBAIC02NSw3ICs2NSw3IEBA
IHB1YmxpYzoKICAgICB9CiAKICAgICB2b2lkIGZpbmFsaXplVW5jb25kaXRpb25hbGx5KFZNJik7
Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwor
ICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKIHByaXZhdGU6CiAgICAgSlNXZWFrT2JqZWN0
UmVmKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU1dpdGhTY29wZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNXaXRoU2NvcGUuY3BwCShyZXZpc2lvbiAyNzE0NDMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1dpdGhTY29wZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQxLDcgKzQxLDggQEAgSlNXaXRoU2NvcGUqIEpTV2l0aFNjb3BlOjpjcmVhdGUoCiAg
ICAgcmV0dXJuIHdpdGhTY29wZTsKIH0KIAotdm9pZCBKU1dpdGhTY29wZTo6dmlzaXRDaGlsZHJl
bihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUg
VmlzaXRvcj4KK3ZvaWQgSlNXaXRoU2NvcGU6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2Vs
bCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU1dpdGhTY29wZSogdGhpc09iamVjdCA9IGpz
Q2FzdDxKU1dpdGhTY29wZSo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMo
dGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTQ5LDYgKzUwLDggQEAgdm9pZCBKU1dpdGhTY29wZTo6
dmlzaXRDaGlsZHJlbihKU0NlbGwqIAogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1f
b2JqZWN0KTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTV2l0aFNjb3BlKTsKKwogU3Ry
dWN0dXJlKiBKU1dpdGhTY29wZTo6Y3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90bykKIHsKICAgICByZXR1cm4gU3RydWN0dXJl
OjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG8sIFR5cGVJbmZvKFdpdGhTY29wZVR5cGUs
IFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTV2l0aFNjb3BlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNXaXRoU2NvcGUuaAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNXaXRoU2NvcGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDMsNyAr
NDMsNyBAQCBwdWJsaWM6CiAKICAgICBKU09iamVjdCogb2JqZWN0KCkgeyByZXR1cm4gbV9vYmpl
Y3QuZ2V0KCk7IH0KIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xv
dFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgc3RhdGljIFN0
cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlIHBy
b3RvKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNXcmFwcGVyT2Jq
ZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1dy
YXBwZXJPYmplY3QuY3BwCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1dyYXBwZXJPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSwxMSAr
MjksMTQgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIFNUQVRJQ19BU1NFUlRfSVNfVFJJVklBTExZX0RF
U1RSVUNUSUJMRShKU1dyYXBwZXJPYmplY3QpOwogCi12b2lkIEpTV3JhcHBlck9iamVjdDo6dmlz
aXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8
dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNXcmFwcGVyT2JqZWN0Ojp2aXNpdENoaWxkcmVuSW1w
bChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0byogdGhpc09iamVj
dCA9IGpzQ2FzdDxKU1dyYXBwZXJPYmplY3QqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNU
X0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0
aGlzT2JqZWN0LCB2aXNpdG9yKTsKIH0KIAorREVGSU5FX0VYUE9SVF9WSVNJVF9DSElMRFJFTihK
U1dyYXBwZXJPYmplY3QpOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTV3JhcHBlck9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTV3JhcHBlck9iamVjdC5oCShyZXZpc2lvbiAyNzE0
NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1dyYXBwZXJPYmplY3QuaAko
d29ya2luZyBjb3B5KQpAQCAtNjQsNyArNjQsNyBAQCBwdWJsaWM6CiBwcm90ZWN0ZWQ6CiAgICAg
ZXhwbGljaXQgSlNXcmFwcGVyT2JqZWN0KFZNJiwgU3RydWN0dXJlKik7CiAKLSAgICBKU19FWFBP
UlRfUFJJVkFURSBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9y
Jik7CisgICAgREVDTEFSRV9FWFBPUlRfVklTSVRfQ0hJTERSRU47CiB9OwogCiBpbmxpbmUgSlNX
cmFwcGVyT2JqZWN0OjpKU1dyYXBwZXJPYmplY3QoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0xhenlDbGFzc1N0cnVjdHVy
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTGF6eUNs
YXNzU3RydWN0dXJlLmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvTGF6eUNsYXNzU3RydWN0dXJlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzIs
MTIgKzcyLDE2IEBAIHZvaWQgTGF6eUNsYXNzU3RydWN0dXJlOjpJbml0aWFsaXplcjo6c2UKICAg
ICBjbGFzc1N0cnVjdHVyZS5tX2NvbnN0cnVjdG9yLnNldCh2bSwgZ2xvYmFsLCBjb25zdHJ1Y3Rv
cik7CiB9CiAKLXZvaWQgTGF6eUNsYXNzU3RydWN0dXJlOjp2aXNpdChTbG90VmlzaXRvciYgdmlz
aXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIExhenlDbGFzc1N0cnVjdHVy
ZTo6dmlzaXQoVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBtX3N0cnVjdHVyZS52aXNpdCh2aXNp
dG9yKTsKICAgICB2aXNpdG9yLmFwcGVuZChtX2NvbnN0cnVjdG9yKTsKIH0KIAordGVtcGxhdGUg
dm9pZCBMYXp5Q2xhc3NTdHJ1Y3R1cmU6OnZpc2l0KEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3Rl
bXBsYXRlIHZvaWQgTGF6eUNsYXNzU3RydWN0dXJlOjp2aXNpdChTbG90VmlzaXRvciYpOworCiB2
b2lkIExhenlDbGFzc1N0cnVjdHVyZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAogewog
ICAgIG91dC5wcmludCgiPHN0cnVjdHVyZSA9ICIsIG1fc3RydWN0dXJlLCAiLCBjb25zdHJ1Y3Rv
ciA9ICIsIFJhd1BvaW50ZXIobV9jb25zdHJ1Y3Rvci5nZXQoKSksICI+Iik7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9MYXp5Q2xhc3NTdHJ1Y3R1cmUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9MYXp5Q2xhc3NTdHJ1Y3R1cmUuaAko
cmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTGF6eUNs
YXNzU3RydWN0dXJlLmgJKHdvcmtpbmcgY29weSkKQEAgLTExNyw3ICsxMTcsNyBAQCBwdWJsaWM6
CiAgICAgICAgIHJldHVybiBtX2NvbnN0cnVjdG9yLmdldCgpOwogICAgIH0KICAgICAKLSAgICB2
b2lkIHZpc2l0KFNsb3RWaXNpdG9yJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4g
dm9pZCB2aXNpdChWaXNpdG9yJik7CiAgICAgCiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikg
Y29uc3Q7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0xhenlQcm9wZXJ0
eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0xhenlQcm9w
ZXJ0eS5oCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9MYXp5UHJvcGVydHkuaAkod29ya2luZyBjb3B5KQpAQCAtMTAzLDcgKzEwMyw3IEBAIHB1Ymxp
YzoKICAgICB2b2lkIHNldE1heUJlTnVsbChWTSYsIGNvbnN0IE93bmVyVHlwZSogb3duZXIsIEVs
ZW1lbnRUeXBlKik7CiAgICAgdm9pZCBzZXQoVk0mLCBjb25zdCBPd25lclR5cGUqIG93bmVyLCBF
bGVtZW50VHlwZSopOwogICAgIAotICAgIHZvaWQgdmlzaXQoU2xvdFZpc2l0b3ImKTsKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIHZpc2l0KFZpc2l0b3ImKTsKICAgICAKICAg
ICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0xhenlQcm9wZXJ0eUlubGluZXMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9MYXp5UHJvcGVydHlJbmxpbmVzLmgJKHJldmlz
aW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0xhenlQcm9wZXJ0
eUlubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNjYsNyArNjYsOCBAQCB2b2lkIExhenlQcm9w
ZXJ0eTxPd25lclR5cGUsIEVsZW1lbnRUeXBlCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE93bmVy
VHlwZSwgdHlwZW5hbWUgRWxlbWVudFR5cGU+Ci12b2lkIExhenlQcm9wZXJ0eTxPd25lclR5cGUs
IEVsZW1lbnRUeXBlPjo6dmlzaXQoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBl
bmFtZSBWaXNpdG9yPgordm9pZCBMYXp5UHJvcGVydHk8T3duZXJUeXBlLCBFbGVtZW50VHlwZT46
OnZpc2l0KFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgaWYgKG1fcG9pbnRlciAmJiAhKG1fcG9p
bnRlciAmIGxhenlUYWcpKQogICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKGJpdHdp
c2VfY2FzdDxFbGVtZW50VHlwZSo+KG1fcG9pbnRlcikpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01vZHVsZVByb2dyYW1FeGVjdXRhYmxlLmNw
cAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTW9k
dWxlUHJvZ3JhbUV4ZWN1dGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03OSw3ICs3OSw4IEBA
IGF1dG8gTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGU6OmVuc3VyZVRlbXAKICAgICByZXR1cm4gZW5z
dXJlVGVtcGxhdGVPYmplY3RNYXBJbXBsKG1fdGVtcGxhdGVPYmplY3RNYXApOwogfQogCi12b2lk
IE1vZHVsZVByb2dyYW1FeGVjdXRhYmxlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xv
dFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBNb2R1
bGVQcm9ncmFtRXhlY3V0YWJsZTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNp
dG9yJiB2aXNpdG9yKQogewogICAgIE1vZHVsZVByb2dyYW1FeGVjdXRhYmxlKiB0aGlzT2JqZWN0
ID0ganNDYXN0PE1vZHVsZVByb2dyYW1FeGVjdXRhYmxlKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dD
X09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtOTQsNCArOTUsNiBAQCB2
b2lkIE1vZHVsZVByb2dyYW1FeGVjdXRhYmxlOjp2aXNpdENoaWxkCiAgICAgfQogfQogCitERUZJ
TkVfVklTSVRfQ0hJTERSRU4oTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUpOworCiB9IC8vIG5hbWVz
cGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01vZHVsZVByb2dy
YW1FeGVjdXRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUuaAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNzcsNyArNzcsNyBAQCBwcml2YXRlOgogCiAgICAgTW9kdWxlUHJvZ3JhbUV4
ZWN1dGFibGUoSlNHbG9iYWxPYmplY3QqLCBjb25zdCBTb3VyY2VDb2RlJik7CiAKLSAgICBzdGF0
aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFS
RV9WSVNJVF9DSElMRFJFTjsKIAogICAgIFdyaXRlQmFycmllcjxVbmxpbmtlZE1vZHVsZVByb2dy
YW1Db2RlQmxvY2s+IG1fdW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrOwogICAgIFdyaXRl
QmFycmllcjxTeW1ib2xUYWJsZT4gbV9tb2R1bGVFbnZpcm9ubWVudFN5bWJvbFRhYmxlOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvZ3JhbUV4ZWN1dGFibGUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb2dyYW1FeGVjdXRh
YmxlLmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvUHJvZ3JhbUV4ZWN1dGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDgsNyArMjA4LDgg
QEAgYXV0byBQcm9ncmFtRXhlY3V0YWJsZTo6ZW5zdXJlVGVtcGxhdGVPYgogICAgIHJldHVybiBl
bnN1cmVUZW1wbGF0ZU9iamVjdE1hcEltcGwobV90ZW1wbGF0ZU9iamVjdE1hcCk7CiB9CiAKLXZv
aWQgUHJvZ3JhbUV4ZWN1dGFibGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90Vmlz
aXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFByb2dyYW1F
eGVjdXRhYmxlOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0
b3IpCiB7CiAgICAgUHJvZ3JhbUV4ZWN1dGFibGUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8UHJvZ3Jh
bUV4ZWN1dGFibGUqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNP
YmplY3QsIGluZm8oKSk7CkBAIC0yMjIsNCArMjIzLDYgQEAgdm9pZCBQcm9ncmFtRXhlY3V0YWJs
ZTo6dmlzaXRDaGlsZHJlbihKUwogICAgIH0KIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKFBy
b2dyYW1FeGVjdXRhYmxlKTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9Qcm9ncmFtRXhlY3V0YWJsZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb2dyYW1FeGVjdXRhYmxlLmgJKHJldmlzaW9u
IDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb2dyYW1FeGVjdXRh
YmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTgxLDcgKzgxLDcgQEAgcHJpdmF0ZToKIAogICAgIFBy
b2dyYW1FeGVjdXRhYmxlKEpTR2xvYmFsT2JqZWN0KiwgY29uc3QgU291cmNlQ29kZSYpOwogCi0g
ICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAg
IERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBXcml0ZUJhcnJpZXI8VW5saW5rZWRQcm9n
cmFtQ29kZUJsb2NrPiBtX3VubGlua2VkUHJvZ3JhbUNvZGVCbG9jazsKICAgICBXcml0ZUJhcnJp
ZXI8RXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZT4gbV9wcm9ncmFtQ29kZUJsb2NrOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlNYXBIYXNoVGFibGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eU1hcEhhc2hU
YWJsZS5oCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9Qcm9wZXJ0eU1hcEhhc2hUYWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzMsNyArMTMzLDcg
QEAgcHVibGljOgogCiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzRGVzdHJ1Y3Rpb24g
PSB0cnVlOwogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7Ci0gICAgc3RhdGljIHZv
aWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklT
SVRfQ0hJTERSRU47CiAKICAgICBERUNMQVJFX0VYUE9SVF9JTkZPOwogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eVRhYmxlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eVRhYmxlLmNwcAkocmV2aXNpb24g
MjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlUYWJsZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTExOCw3ICsxMTgsOCBAQCB2b2lkIFByb3BlcnR5VGFibGU6
OmZpbmlzaENyZWF0aW9uKFZNJiB2CiAgICAgdm0uaGVhcC5yZXBvcnRFeHRyYU1lbW9yeUFsbG9j
YXRlZChkYXRhU2l6ZSgpKTsKIH0KIAotdm9pZCBQcm9wZXJ0eVRhYmxlOjp2aXNpdENoaWxkcmVu
KEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPgordm9pZCBQcm9wZXJ0eVRhYmxlOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNl
bGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxQ
cm9wZXJ0eVRhYmxlKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlz
T2JqZWN0LCBpbmZvKCkpOwpAQCAtMTI2LDYgKzEyNyw4IEBAIHZvaWQgUHJvcGVydHlUYWJsZTo6
dmlzaXRDaGlsZHJlbihKU0NlbGwKICAgICB2aXNpdG9yLnJlcG9ydEV4dHJhTWVtb3J5VmlzaXRl
ZCh0aGlzT2JqZWN0LT5kYXRhU2l6ZSgpKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKFBy
b3BlcnR5VGFibGUpOworCiB2b2lkIFByb3BlcnR5VGFibGU6OmRlc3Ryb3koSlNDZWxsKiBjZWxs
KQogewogICAgIHN0YXRpY19jYXN0PFByb3BlcnR5VGFibGUqPihjZWxsKS0+UHJvcGVydHlUYWJs
ZTo6flByb3BlcnR5VGFibGUoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1Byb3h5T2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9Qcm94eU9iamVjdC5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1Byb3h5T2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE1OCw3
ICsxMTU4LDggQEAgYm9vbCBQcm94eU9iamVjdDo6aXNSZXZva2VkKCkgY29uc3QKICAgICByZXR1
cm4gaGFuZGxlcigpLmlzTnVsbCgpOwogfQogCi12b2lkIFByb3h5T2JqZWN0Ojp2aXNpdENoaWxk
cmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBWaXNpdG9yPgordm9pZCBQcm94eU9iamVjdDo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBj
ZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFByb3h5T2JqZWN0KiB0aGlzT2JqZWN0ID0g
anNDYXN0PFByb3h5T2JqZWN0Kj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklU
Uyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtMTE2OCw0ICsxMTY5LDYgQEAgdm9pZCBQcm94eU9i
amVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIAogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmpl
Y3QtPm1faGFuZGxlcik7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihQcm94eU9iamVjdCk7
CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvUHJveHlPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9Qcm94eU9iamVjdC5oCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9Qcm94eU9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC05MSw3ICs5MSw3
IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVj
dCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lQXJyYXkmLCBEb250RW51bVByb3BlcnRp
ZXNNb2RlKTsKICAgICBzdGF0aWMgYm9vbCBzZXRQcm90b3R5cGUoSlNPYmplY3QqLCBKU0dsb2Jh
bE9iamVjdCosIEpTVmFsdWUgcHJvdG90eXBlLCBib29sIHNob3VsZFRocm93SWZDYW50U2V0KTsK
ICAgICBzdGF0aWMgSlNWYWx1ZSBnZXRQcm90b3R5cGUoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVj
dCopOwotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3Im
KTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgYm9vbCBnZXRPd25Qcm9wZXJ0
eVNsb3RDb21tb24oSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYp
OwogICAgIGJvb2wgcGVyZm9ybUludGVybmFsTWV0aG9kR2V0T3duUHJvcGVydHkoSlNHbG9iYWxP
YmplY3QqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvUHJveHlSZXZva2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3h5UmV2b2tlLmNwcAkocmV2aXNpb24gMjcxNDQzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJveHlSZXZva2UuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC02OSw3ICs2OSw4IEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihwZXJmb3Jt
UHJveHlSZXYKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQog
Ci12b2lkIFByb3h5UmV2b2tlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0
b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBQcm94eVJldm9r
ZTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewog
ICAgIFByb3h5UmV2b2tlKiB0aGlzT2JqZWN0ID0ganNDYXN0PFByb3h5UmV2b2tlKj4oY2VsbCk7
CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAt
NzgsNCArNzksNiBAQCB2b2lkIFByb3h5UmV2b2tlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogCiAg
ICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9wcm94eSk7CiB9CiAKK0RFRklORV9WSVNJ
VF9DSElMRFJFTihQcm94eVJldm9rZSk7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJveHlSZXZva2UuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm94eVJldm9rZS5oCShyZXZpc2lvbiAyNzE0
NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm94eVJldm9rZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC01Miw3ICs1Miw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICB2b2lkIGZp
bmlzaENyZWF0aW9uKFZNJiwgUHJveHlPYmplY3QqKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENo
aWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJF
TjsKICAgICBKU1ZhbHVlIHByb3h5KCkgeyByZXR1cm4gbV9wcm94eS5nZXQoKTsgfQogICAgIHZv
aWQgc2V0UHJveHlUb051bGwoVk0mIHZtKSB7IHJldHVybiBtX3Byb3h5LnNldCh2bSwgdGhpcywg
anNOdWxsKCkpOyB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4
cENhY2hlZFJlc3VsdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvUmVnRXhwQ2FjaGVkUmVzdWx0LmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwQ2FjaGVkUmVzdWx0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzEsNyArMzEsOCBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotdm9pZCBSZWdFeHBD
YWNoZWRSZXN1bHQ6OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxh
dGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgUmVnRXhwQ2FjaGVkUmVzdWx0Ojp2aXNpdEFnZ3Jl
Z2F0ZShWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHZpc2l0b3IuYXBwZW5kKG1fbGFzdElucHV0
KTsKICAgICB2aXNpdG9yLmFwcGVuZChtX2xhc3RSZWdFeHApOwpAQCAtNDMsNiArNDQsOSBAQCB2
b2lkIFJlZ0V4cENhY2hlZFJlc3VsdDo6dmlzaXRBZ2dyZWdhdGUoCiAgICAgfQogfQogCit0ZW1w
bGF0ZSB2b2lkIFJlZ0V4cENhY2hlZFJlc3VsdDo6dmlzaXRBZ2dyZWdhdGUoQWJzdHJhY3RTbG90
VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBSZWdFeHBDYWNoZWRSZXN1bHQ6OnZpc2l0QWdncmVn
YXRlKFNsb3RWaXNpdG9yJik7CisKIEpTQXJyYXkqIFJlZ0V4cENhY2hlZFJlc3VsdDo6bGFzdFJl
c3VsdChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU09iamVjdCogb3duZXIpCiB7CiAg
ICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvUmVnRXhwQ2FjaGVkUmVzdWx0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwQ2FjaGVkUmVzdWx0LmgJKHJldmlzaW9uIDI3MTQ0
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENhY2hlZFJlc3VsdC5o
CSh3b3JraW5nIGNvcHkpCkBAIC02NSw3ICs2NSw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJu
IG1fcmVpZmllZCA/IG1fcmVpZmllZElucHV0LmdldCgpIDogbV9sYXN0SW5wdXQuZ2V0KCk7CiAg
ICAgfQogCi0gICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYpOworICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgdmlzaXRBZ2dyZWdhdGUoVmlzaXRvciYpOwogCiAg
ICAgLy8gbV9sYXN0UmVnRXhwIHdvdWxkIGJlIG51bGxwdHIgd2hlbiBSZWdFeHBDYWNoZWRSZXN1
bHQgaXMgbm90IHJlaWZpZWQuCiAgICAgLy8gSWYgd2UgZmluZCBtX2xhc3RSZWdFeHAgaXMgbnVs
bHB0ciwgaXQgbWVhbnMgdGhpcyBzaG91bGQgaG9sZCB0aGUgZW1wdHkgUmVnRXhwLgpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwR2xvYmFsRGF0YS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwR2xvYmFsRGF0YS5j
cHAJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Jl
Z0V4cEdsb2JhbERhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCwxMSArMzAsMTUgQEAKIAog
bmFtZXNwYWNlIEpTQyB7CiAKLXZvaWQgUmVnRXhwR2xvYmFsRGF0YTo6dmlzaXRBZ2dyZWdhdGUo
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBS
ZWdFeHBHbG9iYWxEYXRhOjp2aXNpdEFnZ3JlZ2F0ZShWaXNpdG9yJiB2aXNpdG9yKQogewogICAg
IG1fY2FjaGVkUmVzdWx0LnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOwogfQogCit0ZW1wbGF0ZSB2
b2lkIFJlZ0V4cEdsb2JhbERhdGE6OnZpc2l0QWdncmVnYXRlKEFic3RyYWN0U2xvdFZpc2l0b3Im
KTsKK3RlbXBsYXRlIHZvaWQgUmVnRXhwR2xvYmFsRGF0YTo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZp
c2l0b3ImKTsKKwogSlNWYWx1ZSBSZWdFeHBHbG9iYWxEYXRhOjpnZXRCYWNrcmVmKEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIHVuc2lnbmVkIGkpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFs
T2JqZWN0LT52bSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhw
R2xvYmFsRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1JlZ0V4cEdsb2JhbERhdGEuaAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvUmVnRXhwR2xvYmFsRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSw3
ICs0MSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldElucHV0KEpTR2xvYmFsT2JqZWN0KiwgSlNT
dHJpbmcqKTsKICAgICBKU1N0cmluZyogaW5wdXQoKSB7IHJldHVybiBtX2NhY2hlZFJlc3VsdC5p
bnB1dCgpOyB9CiAKLSAgICB2b2lkIHZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJik7CisgICAg
dGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCB2aXNpdEFnZ3JlZ2F0ZShWaXNpdG9yJik7
CiAKICAgICBKU1ZhbHVlIGdldEJhY2tyZWYoSlNHbG9iYWxPYmplY3QqLCB1bnNpZ25lZCk7CiAg
ICAgSlNWYWx1ZSBnZXRMYXN0UGFyZW4oSlNHbG9iYWxPYmplY3QqKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0LmNwcAkocmV2aXNpb24gMjcx
NDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDYsNyArNDYsOCBAQCB2b2lkIFJlZ0V4cE9iamVjdDo6ZmluaXNo
Q3JlYXRpb24oVk0mIHZtCiAgICAgQVNTRVJUKHR5cGUoKSA9PSBSZWdFeHBPYmplY3RUeXBlKTsK
IH0KIAotdm9pZCBSZWdFeHBPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90
VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFJlZ0V4
cE9iamVjdDo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9y
KQogewogICAgIFJlZ0V4cE9iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxSZWdFeHBPYmplY3Qq
PihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8o
KSk7CkBAIC01NSw2ICs1Niw4IEBAIHZvaWQgUmVnRXhwT2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpT
Q2VsbCoKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2xhc3RJbmRleCk7CiB9CiAK
K0RFRklORV9WSVNJVF9DSElMRFJFTihSZWdFeHBPYmplY3QpOworCiBib29sIFJlZ0V4cE9iamVj
dDo6Z2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiBvYmplY3QsIEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xv
dCkKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBPYmplY3QuaAkocmV2aXNpb24gMjcxNDQzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEzMyw3ICsxMzMsNyBAQCBwcml2YXRlOgogICAgIEpTX0VYUE9SVF9QUklWQVRF
IFJlZ0V4cE9iamVjdChWTSYsIFN0cnVjdHVyZSosIFJlZ0V4cCopOwogICAgIEpTX0VYUE9SVF9Q
UklWQVRFIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0
Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxE
UkVOOwogCiAgICAgYm9vbCBsYXN0SW5kZXhJc1dyaXRhYmxlKCkgY29uc3QKICAgICB7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TYW1wbGluZ1Byb2ZpbGVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TYW1wbGluZ1Byb2ZpbGVy
LmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U2FtcGxpbmdQcm9maWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY1Miw3ICs2NTIsNyBAQCB2
b2lkIFNhbXBsaW5nUHJvZmlsZXI6OnByb2Nlc3NVbnZlcmlmaWVkCiAgICAgbV91bnByb2Nlc3Nl
ZFN0YWNrVHJhY2VzLmNsZWFyKCk7CiB9CiAKLXZvaWQgU2FtcGxpbmdQcm9maWxlcjo6dmlzaXQo
U2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yKQordm9pZCBTYW1wbGluZ1Byb2ZpbGVyOjp2aXNpdChB
YnN0cmFjdFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvcikKIHsKICAgICBSRUxFQVNFX0FTU0VSVCht
X2xvY2suaXNMb2NrZWQoKSk7CiAgICAgZm9yIChKU0NlbGwqIGNlbGwgOiBtX2xpdmVDZWxsUG9p
bnRlcnMpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TYW1wbGluZ1Byb2Zp
bGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2FtcGxp
bmdQcm9maWxlci5oCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TYW1wbGluZ1Byb2ZpbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTE3MSw3ICsxNzEs
NyBAQCBwdWJsaWM6CiAgICAgdm9pZCBub3RpY2VKU0xvY2tBY3F1aXNpdGlvbigpOwogICAgIHZv
aWQgbm90aWNlVk1FbnRyeSgpOwogICAgIHZvaWQgc2h1dGRvd24oKTsKLSAgICB2b2lkIHZpc2l0
KFNsb3RWaXNpdG9yJik7CisgICAgdm9pZCB2aXNpdChBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAg
ICAgTG9jayYgZ2V0TG9jaygpIHsgcmV0dXJuIG1fbG9jazsgfQogICAgIHZvaWQgc2V0VGltaW5n
SW50ZXJ2YWwoU2Vjb25kcyBpbnRlcnZhbCkgeyBtX3RpbWluZ0ludGVydmFsID0gaW50ZXJ2YWw7
IH0KICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHN0YXJ0KCk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TY29wZWRBcmd1bWVudHMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlZEFyZ3VtZW50cy5jcHAJKHJldmlzaW9u
IDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlZEFyZ3VtZW50
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk4LDcgKzk4LDggQEAgU2NvcGVkQXJndW1lbnRzKiBT
Y29wZWRBcmd1bWVudHM6OmNyZWF0ZQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQgU2Nv
cGVkQXJndW1lbnRzOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZp
c2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBTY29wZWRBcmd1bWVudHM6
OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAg
ICBTY29wZWRBcmd1bWVudHMqIHRoaXNPYmplY3QgPSBzdGF0aWNfY2FzdDxTY29wZWRBcmd1bWVu
dHMqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGlu
Zm8oKSk7CkBAIC0xMTUsNiArMTE2LDggQEAgdm9pZCBTY29wZWRBcmd1bWVudHM6OnZpc2l0Q2hp
bGRyZW4oSlNDZQogICAgIH0KIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKFNjb3BlZEFyZ3Vt
ZW50cyk7CisKIFN0cnVjdHVyZSogU2NvcGVkQXJndW1lbnRzOjpjcmVhdGVTdHJ1Y3R1cmUoVk0m
IHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKIHsK
ICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBl
LCBUeXBlSW5mbyhTY29wZWRBcmd1bWVudHNUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29wZWRBcmd1bWVudHMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29wZWRBcmd1bWVu
dHMuaAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U2NvcGVkQXJndW1lbnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTYzLDkgKzYzLDkgQEAgcHVibGlj
OgogICAgIAogICAgIC8vIENyZWF0ZXMgYW4gYXJndW1lbnRzIG9iamVjdCBieSBjb3B5aW5nIHRo
ZSBhcmd1bWVudHMgZnJvbSBhIHdlbGwtZGVmaW5lZCBzdGFjayBsb2NhdGlvbi4KICAgICBzdGF0
aWMgU2NvcGVkQXJndW1lbnRzKiBjcmVhdGVCeUNvcHlpbmdGcm9tKFZNJiwgU3RydWN0dXJlKiwg
UmVnaXN0ZXIqIGFyZ3VtZW50c1N0YXJ0LCB1bnNpZ25lZCB0b3RhbExlbmd0aCwgSlNGdW5jdGlv
biogY2FsbGVlLCBTY29wZWRBcmd1bWVudHNUYWJsZSosIEpTTGV4aWNhbEVudmlyb25tZW50Kik7
Ci0gICAgCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRv
ciYpOwotICAgIAorCisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKKwogICAgIHVpbnQzMl90
IGludGVybmFsTGVuZ3RoKCkgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiBtX3RvdGFsTGVu
Z3RoOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2ltcGxlVHlwZWRBcnJh
eUNvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1NpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyLmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Miw3ICs2Miw3IEBAIGJvb2wgU2ltcGxlVHlwZWRBcnJh
eUNvbnRyb2xsZXI6OmlzQXRvbWkKICAgICByZXR1cm4gbV9hbGxvd0F0b21pY3NXYWl0OwogfQog
Ci1ib29sIFNpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyOjpKU0FycmF5QnVmZmVyT3duZXI6Omlz
UmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxl
LCB2b2lkKiwgSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikK
K2Jvb2wgU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXI6OkpTQXJyYXlCdWZmZXJPd25lcjo6aXNS
ZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUs
IHZvaWQqLCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiBy
ZWFzb24pCiB7CiAgICAgaWYgKFVOTElLRUxZKHJlYXNvbikpCiAgICAgICAgICpyZWFzb24gPSAi
SlNBcnJheUJ1ZmZlciBpcyBvcGFxdWUgcm9vdCI7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyLmgJ
KHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NpbXBs
ZVR5cGVkQXJyYXlDb250cm9sbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTU4LDcgKzU4LDcgQEAg
cHVibGljOgogcHJpdmF0ZToKICAgICBjbGFzcyBKU0FycmF5QnVmZmVyT3duZXIgZmluYWwgOiBw
dWJsaWMgV2Vha0hhbmRsZU93bmVyIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIGJvb2wgaXNSZWFj
aGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29u
dGV4dCwgU2xvdFZpc2l0b3ImLCBjb25zdCBjaGFyKiogcmVhc29uKSBmaW5hbDsKKyAgICAgICAg
Ym9vbCBpc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+
LCB2b2lkKiBjb250ZXh0LCBBYnN0cmFjdFNsb3RWaXNpdG9yJiwgY29uc3QgY2hhcioqIHJlYXNv
bikgZmluYWw7CiAgICAgICAgIHZvaWQgZmluYWxpemUoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3du
Piwgdm9pZCogY29udGV4dCkgZmluYWw7CiAgICAgfTsKIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU21hbGxTdHJpbmdzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TbWFsbFN0cmluZ3MuY3BwCShyZXZpc2lvbiAyNzE0NDMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TbWFsbFN0cmluZ3MuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC02Niw3ICs2Niw3IEBAIHZvaWQgU21hbGxTdHJpbmdzOjppbml0aWFsaXplQ29t
bW9uU3RyaW4KICAgICBzZXRJc0luaXRpYWxpemVkKHRydWUpOwogfQogCi12b2lkIFNtYWxsU3Ry
aW5nczo6dmlzaXRTdHJvbmdSZWZlcmVuY2VzKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBT
bWFsbFN0cmluZ3M6OnZpc2l0U3Ryb25nUmVmZXJlbmNlcyhBYnN0cmFjdFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQogewogICAgIG1fbmVlZHNUb0JlVmlzaXRlZCA9IGZhbHNlOwogICAgIHZpc2l0b3Iu
YXBwZW5kVW5iYXJyaWVyZWQobV9lbXB0eVN0cmluZyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TbWFsbFN0cmluZ3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TbWFsbFN0cmluZ3MuaAkocmV2aXNpb24gMjcxNDQzKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU21hbGxTdHJpbmdzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTQ5LDkgKzQ5LDkgQEAgY2xhc3MgU3RyaW5nSW1wbDsKIAogbmFtZXNwYWNlIEpTQyB7CiAK
K2NsYXNzIEFic3RyYWN0U2xvdFZpc2l0b3I7CiBjbGFzcyBWTTsKIGNsYXNzIEpTU3RyaW5nOwot
Y2xhc3MgU2xvdFZpc2l0b3I7CiAKIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbWF4U2luZ2xl
Q2hhcmFjdGVyU3RyaW5nID0gMHhGRjsKIApAQCAtNzgsNyArNzgsNyBAQCBwdWJsaWM6CiAgICAg
SlNTdHJpbmcqKiBzaW5nbGVDaGFyYWN0ZXJTdHJpbmdzKCkgeyByZXR1cm4gJm1fc2luZ2xlQ2hh
cmFjdGVyU3RyaW5nc1swXTsgfQogCiAgICAgdm9pZCBpbml0aWFsaXplQ29tbW9uU3RyaW5ncyhW
TSYpOwotICAgIHZvaWQgdmlzaXRTdHJvbmdSZWZlcmVuY2VzKFNsb3RWaXNpdG9yJik7CisgICAg
dm9pZCB2aXNpdFN0cm9uZ1JlZmVyZW5jZXMoQWJzdHJhY3RTbG90VmlzaXRvciYpOwogCiAjZGVm
aW5lIEpTQ19DT01NT05fU1RSSU5HU19BQ0NFU1NPUl9ERUZJTklUSU9OKG5hbWUpIFwKICAgICBK
U1N0cmluZyogbmFtZSMjU3RyaW5nKCkgY29uc3QgICAgICAgICAgICAgICAgICAgXApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3BhcnNlQXJyYXlWYWx1ZU1hcC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3BhcnNlQXJyYXlWYWx1
ZU1hcC5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1NwYXJzZUFycmF5VmFsdWVNYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTAsNyArMjEw
LDggQEAgSlNWYWx1ZSBTcGFyc2VBcnJheUVudHJ5OjpnZXROb25TcGFyc2VNbwogICAgIHJldHVy
biBCYXNlOjpnZXQoKTsKIH0KIAotdm9pZCBTcGFyc2VBcnJheVZhbHVlTWFwOjp2aXNpdENoaWxk
cmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBWaXNpdG9yPgordm9pZCBTcGFyc2VBcnJheVZhbHVlTWFwOjp2aXNpdENoaWxkcmVuSW1wbChK
U0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgU3BhcnNlQXJyYXlWYWx1ZU1h
cCogdGhpc09iamVjdCA9IGpzQ2FzdDxTcGFyc2VBcnJheVZhbHVlTWFwKj4oY2VsbCk7CiAgICAg
QVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtMjIzLDUg
KzIyNCw3IEBAIHZvaWQgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6dmlzaXRDaGlsZHJlbigKICAgICB2
aXNpdG9yLnJlcG9ydEV4dHJhTWVtb3J5VmlzaXRlZCh0aGlzT2JqZWN0LT5tX3JlcG9ydGVkQ2Fw
YWNpdHkgKiBzaXplb2YoTWFwOjpLZXlWYWx1ZVBhaXJUeXBlKSk7CiB9CiAKK0RFRklORV9WSVNJ
VF9DSElMRFJFTihTcGFyc2VBcnJheVZhbHVlTWFwKTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NwYXJzZUFycmF5VmFsdWVNYXAu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TcGFyc2VBcnJh
eVZhbHVlTWFwLmgJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1NwYXJzZUFycmF5VmFsdWVNYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMTE1LDcgKzEx
NSw3IEBAIHB1YmxpYzoKICAgICAKICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1
cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUgcHJvdG90eXBlKTsKIAotICAgIHN0YXRp
YyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJF
X1ZJU0lUX0NISUxEUkVOOwogCiAgICAgYm9vbCBzcGFyc2VNb2RlKCkKICAgICB7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdGFja0ZyYW1lLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdGFja0ZyYW1lLmNwcAkocmV2aXNpb24g
MjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RhY2tGcmFtZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTE0Miw3ICsxNDIsOCBAQCBTdHJpbmcgU3RhY2tGcmFtZTo6dG9T
dHJpbmcoVk0mIHZtKSBjb25zCiAgICAgcmV0dXJuIHRyYWNlQnVpbGQudG9TdHJpbmcoKS5pbXBs
KCk7CiB9CiAKLXZvaWQgU3RhY2tGcmFtZTo6dmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYgdmlz
aXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFN0YWNrRnJhbWU6OnZpc2l0
Q2hpbGRyZW5JbXBsKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgaWYgKG1fY2FsbGVlKQogICAg
ICAgICB2aXNpdG9yLmFwcGVuZChtX2NhbGxlZSk7CkBAIC0xNTAsNSArMTUxLDcgQEAgdm9pZCBT
dGFja0ZyYW1lOjp2aXNpdENoaWxkcmVuKFNsb3RWaXNpdAogICAgICAgICB2aXNpdG9yLmFwcGVu
ZChtX2NvZGVCbG9jayk7CiB9CiAKK0RFRklORV9JTlNUQU5DRV9WSVNJVF9DSElMRFJFTihTdGFj
a0ZyYW1lKTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1N0YWNrRnJhbWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TdGFja0ZyYW1lLmgJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0YWNrRnJhbWUuaAkod29ya2luZyBjb3B5KQpAQCAtMjcs
NiArMjcsNyBAQAogCiAjaW5jbHVkZSAiSGVhcC5oIgogI2luY2x1ZGUgIlZNLmgiCisjaW5jbHVk
ZSAiU2xvdFZpc2l0b3JNYWNyb3MuaCIKICNpbmNsdWRlICJXYXNtSW5kZXhPck5hbWUuaCIKICNp
bmNsdWRlICJXcml0ZUJhcnJpZXIuaCIKICNpbmNsdWRlIDxsaW1pdHMuaD4KQEAgLTM1LDcgKzM2
LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIENvZGVCbG9jazsKIGNsYXNzIEpTT2JqZWN0
OwotY2xhc3MgU2xvdFZpc2l0b3I7CiAKIGNsYXNzIFN0YWNrRnJhbWUgewogcHVibGljOgpAQCAt
NTgsNyArNTgsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX2J5dGVjb2RlSW5kZXg7CiAg
ICAgfQogICAgIAotICAgIHZvaWQgdmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYpOworICAgIERF
Q0xBUkVfSU5TVEFOQ0VfVklTSVRfQ0hJTERSRU47CiAgICAgYm9vbCBpc01hcmtlZChWTSYgdm0p
IGNvbnN0IHsgcmV0dXJuICghbV9jYWxsZWUgfHwgdm0uaGVhcC5pc01hcmtlZChtX2NhbGxlZS5n
ZXQoKSkpICYmICghbV9jb2RlQmxvY2sgfHwgdm0uaGVhcC5pc01hcmtlZChtX2NvZGVCbG9jay5n
ZXQoKSkpOyB9CiAKIHByaXZhdGU6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TdHJ1Y3R1cmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1N0cnVjdHVyZS5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNjcsNyArMTI2
Nyw4IEBAIHZvaWQgU3RydWN0dXJlOjpkaWRUcmFuc2l0aW9uRnJvbVRoaXNTdHIKICAgICAgICAg
bV90cmFuc2l0aW9uV2F0Y2hwb2ludFNldC5maXJlQWxsKHZtKCksIFN0cnVjdHVyZUZpcmVEZXRh
aWwodGhpcykpOwogfQogCi12b2lkIFN0cnVjdHVyZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNl
bGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3Zv
aWQgU3RydWN0dXJlOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZp
c2l0b3IpCiB7CiAgICAgU3RydWN0dXJlKiB0aGlzT2JqZWN0ID0ganNDYXN0PFN0cnVjdHVyZSo+
KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygp
KTsKQEAgLTEyOTUsNiArMTI5Niw4IEBAIHZvaWQgU3RydWN0dXJlOjp2aXNpdENoaWxkcmVuKEpT
Q2VsbCogY2UKICAgICAgICAgdGhpc09iamVjdC0+bV9wcm9wZXJ0eVRhYmxlVW5zYWZlLmNsZWFy
KCk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihTdHJ1Y3R1cmUpOworCiBib29sIFN0cnVj
dHVyZTo6aXNDaGVhcER1cmluZ0dDKFZNJiB2bSkKIHsKICAgICAvLyBGSVhNRTogV2UgY291bGQg
bWFrZSB0aGlzIGV2ZW4gc2FmZXIgYnkgcmV0dXJuaW5nIGZhbHNlIGlmIHRoaXMgc3RydWN0dXJl
J3MgcHJvcGVydHkgdGFibGUKQEAgLTEzMDUsMTYgKzEzMDgsMjYgQEAgYm9vbCBTdHJ1Y3R1cmU6
OmlzQ2hlYXBEdXJpbmdHQyhWTSYgdm0pCiAgICAgICAgICYmIChoYXNQb2x5UHJvdG8oKSB8fCAh
c3RvcmVkUHJvdG90eXBlT2JqZWN0KCkgfHwgdm0uaGVhcC5pc01hcmtlZChzdG9yZWRQcm90b3R5
cGVPYmplY3QoKSkpOwogfQogCi1ib29sIFN0cnVjdHVyZTo6bWFya0lmQ2hlYXAoU2xvdFZpc2l0
b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgorYm9vbCBTdHJ1Y3R1cmU6
Om1hcmtJZkNoZWFwMShWaXNpdG9yJiB2aXNpdG9yKQorLy9ib29sIFN0cnVjdHVyZTo6bWFya0lm
Q2hlYXAxKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgVk0mIHZtID0gdmlz
aXRvci52bSgpOwogICAgIGlmICghaXNDaGVhcER1cmluZ0dDKHZtKSkKLSAgICAgICAgcmV0dXJu
IHZtLmhlYXAuaXNNYXJrZWQodGhpcyk7Ci0gICAgCisgICAgICAgIHJldHVybiB2bS5oZWFwLmlz
TWFya2VkKHRoaXMpOyAvLyBtbGFtIEZJU01FCisKICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmll
cmVkKHRoaXMpOwogICAgIHJldHVybiB0cnVlOwogfQogCisvL3RlbXBsYXRlPHR5cGVuYW1lIFZp
c2l0b3I+CisvL2Jvb2wgU3RydWN0dXJlOjptYXJrSWZDaGVhcChWaXNpdG9yJiB2aXNpdG9yKQor
Ly97CisvLyAgICByZXR1cm4gbWFya0lmQ2hlYXAxKHZpc2l0b3IpOyAvLyBtbGFtIEZJWE1FIEhB
Q0sgdG8gZ2V0IHRoaXMgY29tcGlsaW5nISEhCisvL30KK3RlbXBsYXRlIGJvb2wgU3RydWN0dXJl
OjptYXJrSWZDaGVhcDEoU2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIGJvb2wgU3RydWN0dXJlOjpt
YXJrSWZDaGVhcDEoQWJzdHJhY3RTbG90VmlzaXRvciYpOworCiBSZWY8U3RydWN0dXJlU2hhcGU+
IFN0cnVjdHVyZTo6dG9TdHJ1Y3R1cmVTaGFwZShKU1ZhbHVlIHZhbHVlLCBib29sJiBzYXdQb2x5
UHJvdG9TdHJ1Y3R1cmUpCiB7CiAgICAgUmVmPFN0cnVjdHVyZVNoYXBlPiBiYXNlU2hhcGUgPSBT
dHJ1Y3R1cmVTaGFwZTo6Y3JlYXRlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TdHJ1Y3R1cmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TdHJ1Y3R1cmUuaAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvU3RydWN0dXJlLmgJKHdvcmtpbmcgY29weSkKQEAgLTYwLDcgKzYwLDYgQEAg
Y2xhc3MgUHJvcGVydHlOYW1lQXJyYXlEYXRhOwogY2xhc3MgUHJvcGVydHlUYWJsZTsKIGNsYXNz
IFN0cnVjdHVyZUNoYWluOwogY2xhc3MgU3RydWN0dXJlU2hhcGU7Ci1jbGFzcyBTbG90VmlzaXRv
cjsKIGNsYXNzIEpTU3RyaW5nOwogc3RydWN0IER1bXBDb250ZXh0Owogc3RydWN0IEhhc2hUYWJs
ZTsKQEAgLTMwNyw3ICszMDYsNyBAQCBwdWJsaWM6CiAgICAgSlNWYWx1ZSBwcm90b3R5cGVGb3JM
b29rdXAoSlNHbG9iYWxPYmplY3QqLCBKU0NlbGwqIGJhc2UpIGNvbnN0OwogICAgIFN0cnVjdHVy
ZUNoYWluKiBwcm90b3R5cGVDaGFpbihWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNPYmplY3QqIGJh
c2UpIGNvbnN0OwogICAgIFN0cnVjdHVyZUNoYWluKiBwcm90b3R5cGVDaGFpbihKU0dsb2JhbE9i
amVjdCosIEpTT2JqZWN0KiBiYXNlKSBjb25zdDsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxk
cmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsK
ICAgICAKICAgICAvLyBBIFN0cnVjdHVyZSBpcyBjaGVhcCB0byBtYXJrIGR1cmluZyBHQyBpZiBk
b2luZyBzbyB3b3VsZCBvbmx5IGFkZCBhIHNtYWxsIGFuZCBib3VuZGVkIGFtb3VudAogICAgIC8v
IHRvIG91ciBoZWFwIGZvb3RwcmludC4gRm9yIGV4YW1wbGUsIGlmIHRoZSBzdHJ1Y3R1cmUgcmVm
ZXJzIHRvIGEgZ2xvYmFsIG9iamVjdCB0aGF0IGlzIG5vdApAQCAtMzE4LDcgKzMxNyw5IEBAIHB1
YmxpYzoKICAgICBib29sIGlzQ2hlYXBEdXJpbmdHQyhWTSYpOwogICAgIAogICAgIC8vIFJldHVy
bnMgdHJ1ZSBpZiB0aGlzIHN0cnVjdHVyZSBpcyBub3cgbWFya2VkLgotICAgIGJvb2wgbWFya0lm
Q2hlYXAoU2xvdFZpc2l0b3ImKTsKKy8vICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IGJv
b2wgbWFya0lmQ2hlYXAoVmlzaXRvciYpOworLy8gICAgYm9vbCBtYXJrSWZDaGVhcDEoQWJzdHJh
Y3RTbG90VmlzaXRvciYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IGJvb2wgbWFy
a0lmQ2hlYXAxKFZpc2l0b3ImKTsgLy8gbWxzbSBURVNUCiAgICAgCiAgICAgYm9vbCBoYXNSYXJl
RGF0YSgpIGNvbnN0CiAgICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U3RydWN0dXJlQ2hhaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1N0cnVjdHVyZUNoYWluLmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlQ2hhaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC02Niw3ICs2Niw4IEBAIHZvaWQgU3RydWN0dXJlQ2hhaW46OmZpbmlzaENyZWF0aW9uKFZNJiAK
ICAgICB9CiB9CiAKLXZvaWQgU3RydWN0dXJlQ2hhaW46OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBj
ZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2
b2lkIFN0cnVjdHVyZUNoYWluOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0
b3ImIHZpc2l0b3IpCiB7CiAgICAgU3RydWN0dXJlQ2hhaW4qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8
U3RydWN0dXJlQ2hhaW4qPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRo
aXNPYmplY3QsIGluZm8oKSk7CkBAIC04MCw0ICs4MSw2IEBAIHZvaWQgU3RydWN0dXJlQ2hhaW46
OnZpc2l0Q2hpbGRyZW4oSlNDZWwKICAgICB9CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihT
dHJ1Y3R1cmVDaGFpbik7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlQ2hhaW4uaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVDaGFpbi5oCShyZXZpc2lvbiAyNzE0NDMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVDaGFpbi5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC01MSw3ICs1MSw3IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBTdHJ1Y3R1
cmVDaGFpbiogY3JlYXRlKFZNJiwgSlNPYmplY3QqKTsKICAgICBTdHJ1Y3R1cmVJRCogaGVhZCgp
IHsgcmV0dXJuIG1fdmVjdG9yLmdldCgpOyB9Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJl
bihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAK
ICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKICAgICB7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVSYXJlRGF0YS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlUmFyZURhdGEuY3Bw
CShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1
Y3R1cmVSYXJlRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY3LDcgKzY3LDggQEAgU3RydWN0
dXJlUmFyZURhdGE6OlN0cnVjdHVyZVJhcmVEYXRhKFZNJgogICAgICAgICBtX3ByZXZpb3VzLnNl
dCh2bSwgdGhpcywgcHJldmlvdXMpOwogfQogCi12b2lkIFN0cnVjdHVyZVJhcmVEYXRhOjp2aXNp
dENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0
eXBlbmFtZSBWaXNpdG9yPgordm9pZCBTdHJ1Y3R1cmVSYXJlRGF0YTo6dmlzaXRDaGlsZHJlbklt
cGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFN0cnVjdHVyZVJhcmVE
YXRhKiB0aGlzT2JqZWN0ID0ganNDYXN0PFN0cnVjdHVyZVJhcmVEYXRhKj4oY2VsbCk7CiAgICAg
QVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtODYsNiAr
ODcsOCBAQCB2b2lkIFN0cnVjdHVyZVJhcmVEYXRhOjp2aXNpdENoaWxkcmVuKEpTCiAgICAgfQog
fQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oU3RydWN0dXJlUmFyZURhdGEpOworCiAvLyAtLS0t
LS0tLS0tLSBDYWNoZWQgc3BlY2lhbCBwcm9wZXJ0aWVzIGhlbHBlciB3YXRjaHBvaW50IGNsYXNz
ZXMgLS0tLS0tLS0tLS0KIAogY2xhc3MgQ2FjaGVkU3BlY2lhbFByb3BlcnR5QWRhcHRpdmVJbmZl
cnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50IGZpbmFsIDogcHVibGljIEFkYXB0aXZlSW5mZXJy
ZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludEJhc2UgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvU3RydWN0dXJlUmFyZURhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVSYXJlRGF0YS5oCShyZXZpc2lvbiAyNzE0NDMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVSYXJlRGF0YS5oCSh3
b3JraW5nIGNvcHkpCkBAIC02OCw3ICs2OCw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgbmVlZHNEZXN0cnVjdGlvbiA9IHRydWU7CiAgICAgc3RhdGljIHZvaWQgZGVzdHJv
eShKU0NlbGwqKTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xv
dFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgc3RhdGljIFN0
cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlIHBy
b3RvdHlwZSk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJvbFRh
YmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TeW1i
b2xUYWJsZS5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1N5bWJvbFRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTIsNyArOTIsOCBAQCB2
b2lkIFN5bWJvbFRhYmxlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCiAgICAgQmFzZTo6ZmluaXNo
Q3JlYXRpb24odm0pOwogfQogCi12b2lkIFN5bWJvbFRhYmxlOjp2aXNpdENoaWxkcmVuKEpTQ2Vs
bCogdGhpc0NlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlz
aXRvcj4KK3ZvaWQgU3ltYm9sVGFibGU6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogdGhpc0Nl
bGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgU3ltYm9sVGFibGUqIHRoaXNTeW1ib2xUYWJs
ZSA9IGpzQ2FzdDxTeW1ib2xUYWJsZSo+KHRoaXNDZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNU
X0lOSEVSSVRTKHRoaXNTeW1ib2xUYWJsZSwgaW5mbygpKTsKQEAgLTEwOCw2ICsxMDksOCBAQCB2
b2lkIFN5bWJvbFRhYmxlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogCiAgICAgdGhpc1N5bWJvbFRh
YmxlLT5tX2xvY2FsVG9FbnRyeSA9IG51bGxwdHI7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJF
TihTeW1ib2xUYWJsZSk7CisKIGNvbnN0IFN5bWJvbFRhYmxlOjpMb2NhbFRvRW50cnlWZWMmIFN5
bWJvbFRhYmxlOjpsb2NhbFRvRW50cnkoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJikKIHsKICAg
ICBpZiAoVU5MSUtFTFkoIW1fbG9jYWxUb0VudHJ5KSkgewpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TeW1ib2xUYWJsZS5oCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TeW1ib2xUYWJsZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC03MzMsNyArNzMzLDcgQEAgcHVibGljOgogICAgICAgICBtX3NpbmdsZXRvbi5ub3RpZnlXcml0
ZSh2bSwgdGhpcywgc2NvcGUsIHJlYXNvbik7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgdmlz
aXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJ
TERSRU47CiAKICAgICBERUNMQVJFX0VYUE9SVF9JTkZPOwogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9UeXBlUHJvZmlsZXJMb2cuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVQcm9maWxlckxvZy5jcHAJKHJldmlzaW9uIDI3
MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVQcm9maWxlckxvZy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNCw3ICsxMjQsNyBAQCB2b2lkIFR5cGVQcm9maWxlckxv
Zzo6cHJvY2Vzc0xvZ0VudHJpZXMoCiAgICAgfQogfQogCi12b2lkIFR5cGVQcm9maWxlckxvZzo6
dmlzaXQoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIFR5cGVQcm9maWxlckxvZzo6dmlzaXQo
QWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBmb3IgKExvZ0VudHJ5KiBlbnRy
eSA9IG1fbG9nU3RhcnRQdHI7IGVudHJ5ICE9IG1fY3VycmVudExvZ0VudHJ5UHRyOyArK2VudHJ5
KSB7CiAgICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQoZW50cnktPnZhbHVlKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVQcm9maWxlckxvZy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVQcm9maWxlckxvZy5o
CShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBl
UHJvZmlsZXJMb2cuaAkod29ya2luZyBjb3B5KQpAQCAtNTksNyArNTksNyBAQCBwdWJsaWM6CiAg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBwcm9jZXNzTG9nRW50cmllcyhWTSYsIGNvbnN0IFN0
cmluZyYpOwogICAgIExvZ0VudHJ5KiBsb2dFbmRQdHIoKSBjb25zdCB7IHJldHVybiBtX2xvZ0Vu
ZFB0cjsgfQogCi0gICAgdm9pZCB2aXNpdChTbG90VmlzaXRvciYpOworICAgIHZvaWQgdmlzaXQo
QWJzdHJhY3RTbG90VmlzaXRvciYpOwogCiAgICAgc3RhdGljIHB0cmRpZmZfdCBsb2dTdGFydE9m
ZnNldCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihUeXBlUHJvZmlsZXJMb2csIG1fbG9nU3Rh
cnRQdHIpOyB9CiAgICAgc3RhdGljIHB0cmRpZmZfdCBjdXJyZW50TG9nRW50cnlPZmZzZXQoKSB7
IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoVHlwZVByb2ZpbGVyTG9nLCBtX2N1cnJlbnRMb2dFbnRy
eVB0cik7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtNYXBJbXBs
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9XZWFrTWFw
SW1wbC5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1dlYWtNYXBJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksOCArMzksOSBAQCB2b2lk
IFdlYWtNYXBJbXBsPFdlYWtNYXBCdWNrZXQ+OjpkZXN0cm95CiAgICAgc3RhdGljX2Nhc3Q8V2Vh
a01hcEltcGwqPihjZWxsKS0+fldlYWtNYXBJbXBsKCk7CiB9CiAKLXRlbXBsYXRlIDx0eXBlbmFt
ZSBXZWFrTWFwQnVja2V0Pgotdm9pZCBXZWFrTWFwSW1wbDxXZWFrTWFwQnVja2V0Pjo6dmlzaXRD
aGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlw
ZW5hbWUgV2Vha01hcEJ1Y2tldD4KK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFdl
YWtNYXBJbXBsPFdlYWtNYXBCdWNrZXQ+Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGws
IFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgV2Vha01hcEltcGwqIHRoaXNPYmplY3QgPSBqc0Nh
c3Q8V2Vha01hcEltcGwqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRo
aXNPYmplY3QsIGluZm8oKSk7CkBAIC00OCw2ICs0OSw4IEBAIHZvaWQgV2Vha01hcEltcGw8V2Vh
a01hcEJ1Y2tldD46OnZpc2l0Q2gKICAgICB2aXNpdG9yLnJlcG9ydEV4dHJhTWVtb3J5VmlzaXRl
ZCh0aGlzT2JqZWN0LT5tX2NhcGFjaXR5ICogc2l6ZW9mKFdlYWtNYXBCdWNrZXQpKTsKIH0KIAor
REVGSU5FX1RFTVBMQVRFX1ZJU0lUX0NISUxEUkVOKHRlbXBsYXRlPHR5cGVuYW1lIFdlYWtNYXBC
dWNrZXQ+LCBXZWFrTWFwSW1wbDxXZWFrTWFwQnVja2V0Pik7CisKIHRlbXBsYXRlIDx0eXBlbmFt
ZSBXZWFrTWFwQnVja2V0Pgogc2l6ZV90IFdlYWtNYXBJbXBsPFdlYWtNYXBCdWNrZXQ+Ojplc3Rp
bWF0ZWRTaXplKEpTQ2VsbCogY2VsbCwgVk0mIHZtKQogewpAQCAtNTYsMTMgKzU5LDEzIEBAIHNp
emVfdCBXZWFrTWFwSW1wbDxXZWFrTWFwQnVja2V0Pjo6ZXN0aW0KIH0KIAogdGVtcGxhdGUgPD4K
LXZvaWQgV2Vha01hcEltcGw8V2Vha01hcEJ1Y2tldDxXZWFrTWFwQnVja2V0RGF0YUtleT4+Ojp2
aXNpdE91dHB1dENvbnN0cmFpbnRzKEpTQ2VsbCosIFNsb3RWaXNpdG9yJikKK3ZvaWQgV2Vha01h
cEltcGw8V2Vha01hcEJ1Y2tldDxXZWFrTWFwQnVja2V0RGF0YUtleT4+Ojp2aXNpdE91dHB1dENv
bnN0cmFpbnRzKEpTQ2VsbCosIEFic3RyYWN0U2xvdFZpc2l0b3ImKQogewogICAgIC8vIE9ubHkg
SlNXZWFrTWFwIG5lZWRzIHRvIGhhcnZlc3QgdmFsdWUgcmVmZXJlbmNlcwogfQogCiB0ZW1wbGF0
ZSA8Pgotdm9pZCBXZWFrTWFwSW1wbDxXZWFrTWFwQnVja2V0PFdlYWtNYXBCdWNrZXREYXRhS2V5
VmFsdWU+Pjo6dmlzaXRPdXRwdXRDb25zdHJhaW50cyhKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9y
JiB2aXNpdG9yKQordm9pZCBXZWFrTWFwSW1wbDxXZWFrTWFwQnVja2V0PFdlYWtNYXBCdWNrZXRE
YXRhS2V5VmFsdWU+Pjo6dmlzaXRPdXRwdXRDb25zdHJhaW50cyhKU0NlbGwqIGNlbGwsIEFic3Ry
YWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgVk0mIHZtID0gdmlzaXRvci52bSgpOwog
ICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8V2Vha01hcEltcGwqPihjZWxsKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtNYXBJbXBsLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha01hcEltcGwuaAkocmV2aXNpb24g
MjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha01hcEltcGwuaAko
d29ya2luZyBjb3B5KQpAQCAtMTQ0LDggKzE0NCwxMCBAQCBwdWJsaWM6CiAgICAgICAgIGNsZWFy
VmFsdWUoKTsKICAgICB9CiAKKy8vICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBWaXNpdG9yLCB0eXBl
bmFtZSBUID0gRGF0YT4KKy8vICAgIEFMV0FZU19JTkxJTkUgdHlwZW5hbWUgc3RkOjplbmFibGVf
aWY8c3RkOjppc19zYW1lPFQsIFdlYWtNYXBCdWNrZXREYXRhS2V5VmFsdWU+Ojp2YWx1ZT46OnR5
cGUgdmlzaXRBZ2dyZWdhdGUoVmlzaXRvciYgdmlzaXRvcikKICAgICB0ZW1wbGF0ZSA8dHlwZW5h
bWUgVCA9IERhdGE+Ci0gICAgQUxXQVlTX0lOTElORSB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxz
dGQ6OmlzX3NhbWU8VCwgV2Vha01hcEJ1Y2tldERhdGFLZXlWYWx1ZT46OnZhbHVlPjo6dHlwZSB2
aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYgdmlzaXRvcikKKyAgICBBTFdBWVNfSU5MSU5FIHR5
cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTxULCBXZWFrTWFwQnVja2V0RGF0YUtl
eVZhbHVlPjo6dmFsdWU+Ojp0eXBlIHZpc2l0QWdncmVnYXRlKEFic3RyYWN0U2xvdFZpc2l0b3Im
IHZpc2l0b3IpCiAgICAgewogICAgICAgICB2aXNpdG9yLmFwcGVuZChtX2RhdGEudmFsdWUpOwog
ICAgIH0KQEAgLTIwMiw3ICsyMDQsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOwogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlND
ZWxsKik7CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNp
dG9yJik7CisgICAgREVDTEFSRV9URU1QTEFURV9WSVNJVF9DSElMRFJFTjsKIAogICAgIHN0YXRp
YyBzaXplX3QgZXN0aW1hdGVkU2l6ZShKU0NlbGwqLCBWTSYpOwogCkBAIC0zMTEsNyArMzEzLDcg
QEAgcHVibGljOgogICAgICAgICByZXR1cm4gdm0ud2Vha1NldFNwYWNlPG1vZGU+KCk7CiAgICAg
fQogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRPdXRwdXRDb25zdHJhaW50cyhKU0NlbGwqLCBTbG90
VmlzaXRvciYpOworICAgIHN0YXRpYyB2b2lkIHZpc2l0T3V0cHV0Q29uc3RyYWludHMoSlNDZWxs
KiwgQWJzdHJhY3RTbG90VmlzaXRvciYpOwogICAgIHZvaWQgZmluYWxpemVVbmNvbmRpdGlvbmFs
bHkoVk0mKTsKIAogcHJpdmF0ZToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9K
U0RvbGxhclZNLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMv
SlNEb2xsYXJWTS5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS90b29scy9KU0RvbGxhclZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIyLDE0ICsyMjIsNyBA
QCBwdWJsaWM6CiAKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgUm9vdCopOwogCi0gICAg
c3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNp
dG9yKQotICAgIHsKLSAgICAgICAgRG9sbGFyVk1Bc3NlcnRTY29wZSBhc3NlcnRTY29wZTsKLSAg
ICAgICAgRWxlbWVudCogdGhpc09iamVjdCA9IGpzQ2FzdDxFbGVtZW50Kj4oY2VsbCk7Ci0gICAg
ICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKLSAgICAg
ICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKLSAgICAgICAgdmlz
aXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9yb290KTsKLSAgICB9CisgICAgREVDTEFSRV9WSVNJ
VF9DSElMRFJFTjsKIAogICAgIHN0YXRpYyBFbGVtZW50SGFuZGxlT3duZXIqIGhhbmRsZU93bmVy
KCk7CiAKQEAgLTI0NSwxMCArMjM4LDIyIEBAIHByaXZhdGU6CiAgICAgV3JpdGVCYXJyaWVyPFJv
b3Q+IG1fcm9vdDsKIH07CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEVsZW1l
bnQ6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKK3sK
KyAgICBEb2xsYXJWTUFzc2VydFNjb3BlIGFzc2VydFNjb3BlOworICAgIEVsZW1lbnQqIHRoaXNP
YmplY3QgPSBqc0Nhc3Q8RWxlbWVudCo+KGNlbGwpOworICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5I
RVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKKyAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNP
YmplY3QsIHZpc2l0b3IpOworICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fcm9vdCk7
Cit9CisKK0RFRklORV9WSVNJVF9DSElMRFJFTihFbGVtZW50KTsKKwogY2xhc3MgRWxlbWVudEhh
bmRsZU93bmVyIGZpbmFsIDogcHVibGljIFdlYWtIYW5kbGVPd25lciB7CiAgICAgV1RGX01BS0Vf
RkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgYm9vbCBpc1JlYWNoYWJsZUZyb21PcGFxdWVS
b290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIFNsb3RWaXNpdG9y
JiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKSBmaW5hbAorICAgIGJvb2wgaXNSZWFjaGFi
bGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQq
LCBBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKSBmaW5h
bAogICAgIHsKICAgICAgICAgRG9sbGFyVk1Bc3NlcnRTY29wZSBhc3NlcnRTY29wZTsKICAgICAg
ICAgaWYgKFVOTElLRUxZKHJlYXNvbikpCkBAIC0zMDIsMTggKzMwNywyMyBAQCBwdWJsaWM6CiAg
ICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5
cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKICAgICB9
CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCogdGhpc09iamVjdCwgU2xv
dFZpc2l0b3ImIHZpc2l0b3IpCi0gICAgewotICAgICAgICBEb2xsYXJWTUFzc2VydFNjb3BlIGFz
c2VydFNjb3BlOwotICAgICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3Qs
IGluZm8oKSk7Ci0gICAgICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRv
cik7Ci0gICAgICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdCh0aGlzT2JqZWN0KTsKLSAgICB9Cisg
ICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogcHJpdmF0ZToKICAgICBXZWFrPEVsZW1lbnQ+
IG1fZWxlbWVudDsKIH07CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFJvb3Q6
OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogdGhpc09iamVjdCwgVmlzaXRvciYgdmlzaXRvcikK
K3sKKyAgICBEb2xsYXJWTUFzc2VydFNjb3BlIGFzc2VydFNjb3BlOworICAgIEFTU0VSVF9HQ19P
QkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKKyAgICBCYXNlOjp2aXNpdENoaWxk
cmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOworICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdCh0aGlz
T2JqZWN0KTsKK30KKworREVGSU5FX1ZJU0lUX0NISUxEUkVOKFJvb3QpOworCiBjbGFzcyBTaW1w
bGVPYmplY3QgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7CiBwdWJsaWM6CiAgICAgU2ltcGxl
T2JqZWN0KFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCkBAIC0zMzgsMTQgKzM0OCw3IEBA
IHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHNpbXBsZU9iamVjdDsKICAgICB9CiAKLSAgICBzdGF0
aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3Ip
Ci0gICAgewotICAgICAgICBEb2xsYXJWTUFzc2VydFNjb3BlIGFzc2VydFNjb3BlOwotICAgICAg
ICBTaW1wbGVPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8U2ltcGxlT2JqZWN0Kj4oY2VsbCk7
Ci0gICAgICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsK
LSAgICAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKLSAgICAg
ICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9oaWRkZW5WYWx1ZSk7Ci0gICAgfQorICAg
IERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVT
dHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHBy
b3RvdHlwZSkKICAgICB7CkBAIC0zNzgsNiArMzgxLDE4IEBAIHByaXZhdGU6CiAgICAgV3JpdGVC
YXJyaWVyPEpTQzo6VW5rbm93bj4gbV9oaWRkZW5WYWx1ZTsKIH07CiAKK3RlbXBsYXRlPHR5cGVu
YW1lIFZpc2l0b3I+Cit2b2lkIFNpbXBsZU9iamVjdDo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxs
KiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIERvbGxhclZNQXNzZXJ0U2NvcGUgYXNz
ZXJ0U2NvcGU7CisgICAgU2ltcGxlT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PFNpbXBsZU9i
amVjdCo+KGNlbGwpOworICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwg
aW5mbygpKTsKKyAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwor
ICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1faGlkZGVuVmFsdWUpOworfQorCitERUZJ
TkVfVklTSVRfQ0hJTERSRU4oU2ltcGxlT2JqZWN0KTsKKwogY2xhc3MgSW1wdXJlR2V0dGVyIDog
cHVibGljIEpTTm9uRmluYWxPYmplY3QgewogcHVibGljOgogICAgIEltcHVyZUdldHRlcihWTSYg
dm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQpAQCAtNDM0LDE0ICs0NDksNyBAQCBwdWJsaWM6CiAg
ICAgICAgIHJldHVybiBCYXNlOjpnZXRPd25Qcm9wZXJ0eVNsb3Qob2JqZWN0LCBnbG9iYWxPYmpl
Y3QsIG5hbWUsIHNsb3QpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4o
SlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKLSAgICB7Ci0gICAgICAgIERvbGxh
clZNQXNzZXJ0U2NvcGUgYXNzZXJ0U2NvcGU7Ci0gICAgICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5I
RVJJVFMoY2VsbCwgaW5mbygpKTsKLSAgICAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbihjZWxsLCB2
aXNpdG9yKTsKLSAgICAgICAgSW1wdXJlR2V0dGVyKiB0aGlzT2JqZWN0ID0ganNDYXN0PEltcHVy
ZUdldHRlcio+KGNlbGwpOwotICAgICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2Rl
bGVnYXRlKTsKLSAgICB9CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIHZvaWQg
c2V0RGVsZWdhdGUoVk0mIHZtLCBKU09iamVjdCogZGVsZWdhdGUpCiAgICAgewpAQCAtNDUyLDYg
KzQ2MCwxOCBAQCBwcml2YXRlOgogICAgIFdyaXRlQmFycmllcjxKU09iamVjdD4gbV9kZWxlZ2F0
ZTsKIH07CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEltcHVyZUdldHRlcjo6
dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQoreworICAg
IERvbGxhclZNQXNzZXJ0U2NvcGUgYXNzZXJ0U2NvcGU7CisgICAgQVNTRVJUX0dDX09CSkVDVF9J
TkhFUklUUyhjZWxsLCBpbmZvKCkpOworICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4oY2VsbCwgdmlz
aXRvcik7CisgICAgSW1wdXJlR2V0dGVyKiB0aGlzT2JqZWN0ID0ganNDYXN0PEltcHVyZUdldHRl
cio+KGNlbGwpOworICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fZGVsZWdhdGUpOwor
fQorCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSW1wdXJlR2V0dGVyKTsKKwogc3RhdGljIEpTQ19E
RUNMQVJFX0NVU1RPTV9HRVRURVIoY3VzdG9tR2V0dGVyVmFsdWVHZXR0ZXIpOwogc3RhdGljIEpT
Q19ERUNMQVJFX0NVU1RPTV9HRVRURVIoY3VzdG9tR2V0dGVyQWNlc3NvckdldHRlcik7CiAKQEAg
LTM1NjMsMTMgKzM1ODMsMTYgQEAgdm9pZCBKU0RvbGxhclZNOjphZGRDb25zdHJ1Y3RpYmxlRnVu
Y3RpbwogICAgIHB1dERpcmVjdCh2bSwgaWRlbnRpZmllciwgSlNGdW5jdGlvbjo6Y3JlYXRlKHZt
LCBnbG9iYWxPYmplY3QsIGFyZ3VtZW50cywgaWRlbnRpZmllci5zdHJpbmcoKSwgZnVuY3Rpb24s
IE5vSW50cmluc2ljLCBmdW5jdGlvbiksIGpzRG9sbGFyVk1Qcm9wZXJ0eUF0dHJpYnV0ZXMpOwog
fQogCi12b2lkIEpTRG9sbGFyVk06OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90Vmlz
aXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTRG9sbGFy
Vk06OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsK
ICAgICBKU0RvbGxhclZNKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTRG9sbGFyVk0qPihjZWxsKTsK
ICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwogICAgIHZpc2l0
b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fb2JqZWN0RG9pbmdTaWRlRWZmZWN0UHV0V2l0aG91dENv
cnJlY3RTbG90U3RhdHVzU3RydWN0dXJlKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpT
RG9sbGFyVk0pOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogSUdOT1JFX1dBUk5JTkdTX0VORApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0pTRG9sbGFyVk0uaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvSlNEb2xsYXJWTS5oCShyZXZpc2lvbiAy
NzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvSlNEb2xsYXJWTS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC03NCw3ICs3NCw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBhZGRGdW5jdGlv
bihWTSYsIEpTR2xvYmFsT2JqZWN0KiwgY29uc3QgY2hhciogbmFtZSwgTmF0aXZlRnVuY3Rpb24s
IHVuc2lnbmVkIGFyZ3VtZW50cyk7CiAgICAgdm9pZCBhZGRDb25zdHJ1Y3RpYmxlRnVuY3Rpb24o
Vk0mLCBKU0dsb2JhbE9iamVjdCosIGNvbnN0IGNoYXIqIG5hbWUsIE5hdGl2ZUZ1bmN0aW9uLCB1
bnNpZ25lZCBhcmd1bWVudHMpOwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0Nl
bGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBX
cml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX29iamVjdERvaW5nU2lkZUVmZmVjdFB1dFdpdGhvdXRD
b3JyZWN0U2xvdFN0YXR1c1N0cnVjdHVyZTsKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtR2xvYmFsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtR2xvYmFsLmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbUdsb2JhbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMyw3ICsx
MDMsOCBAQCB2b2lkIEdsb2JhbDo6c2V0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPCiAgICAgfQog
fQogCi12b2lkIEdsb2JhbDo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0
ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBHbG9iYWw6OnZpc2l0QWdncmVnYXRlKFZp
c2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgc3dpdGNoIChtX3R5cGUpIHsKICAgICBjYXNlIFdhc206
OlR5cGU6OkV4dGVybnJlZjoKQEAgLTExNyw2ICsxMTgsOSBAQCB2b2lkIEdsb2JhbDo6dmlzaXRB
Z2dyZWdhdGUoU2xvdFZpc2l0b3ImCiAgICAgfQogfQogCit0ZW1wbGF0ZSB2b2lkIEdsb2JhbDo6
dmlzaXRBZ2dyZWdhdGUoQWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBHbG9i
YWw6OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJik7CisKIH0gfSAvLyBuYW1lc3BhY2UgSlND
OjpHbG9iYWwKIAogI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21HbG9iYWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtR2xvYmFsLmgJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21HbG9iYWwuaAkod29ya2luZyBjb3B5KQpAQCAtNTcs
NyArNTcsNyBAQCBwdWJsaWM6CiAgICAgSlNWYWx1ZSBnZXQoSlNHbG9iYWxPYmplY3QqKSBjb25z
dDsKICAgICB1aW50NjRfdCBnZXRQcmltaXRpdmUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlLm1f
cHJpbWl0aXZlOyB9CiAgICAgdm9pZCBzZXQoSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlKTsKLSAg
ICB2b2lkIHZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJik7CisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgVmlzaXRvcj4gdm9pZCB2aXNpdEFnZ3JlZ2F0ZShWaXNpdG9yJik7CiAKICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBUKiBvd25lcigpIGNvbnN0IHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8
VCo+KG1fb3duZXIpOyB9CiAgICAgdm9pZCBzZXRPd25lcihKU09iamVjdCogb3duZXIpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGFibGUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UYWJsZS5jcHAJKHJldmlzaW9uIDI3MTQ0
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UYWJsZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE2Niw3ICsxNjYsOCBAQCBKU1ZhbHVlIFRhYmxlOjpnZXQodWludDMyX3QgaW5k
ZXgpIGNvbnN0CiAgICAgcmV0dXJuIG1fanNWYWx1ZXMuZ2V0KClbaW5kZXggJiBtX21hc2tdLmdl
dCgpOwogfQogCi12b2lkIFRhYmxlOjp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYgdmlzaXRv
cikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFRhYmxlOjp2aXNpdEFnZ3JlZ2F0
ZShWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFJFTEVBU0VfQVNTRVJUKG1fb3duZXIpOwogICAg
IGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9vd25lci0+Y2VsbExvY2soKSk7CkBAIC0xNzQsNiAr
MTc1LDkgQEAgdm9pZCBUYWJsZTo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImIAogICAgICAg
ICB2aXNpdG9yLmFwcGVuZChtX2pzVmFsdWVzLmdldCgpW2ldKTsKIH0KIAordGVtcGxhdGUgdm9p
ZCBUYWJsZTo6dmlzaXRBZ2dyZWdhdGUoQWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUg
dm9pZCBUYWJsZTo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImKTsKKwogRnVuY1JlZlRhYmxl
KiBUYWJsZTo6YXNGdW5jcmVmVGFibGUoKQogewogICAgIHJldHVybiBtX3R5cGUgPT0gVGFibGVF
bGVtZW50VHlwZTo6RnVuY3JlZiA/IHN0YXRpY19jYXN0PEZ1bmNSZWZUYWJsZSo+KHRoaXMpIDog
bnVsbHB0cjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UYWJsZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UYWJsZS5oCShyZXZp
c2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGFibGUuaAko
d29ya2luZyBjb3B5KQpAQCAtNzksNyArNzksNyBAQCBwdWJsaWM6CiAgICAgT3B0aW9uYWw8dWlu
dDMyX3Q+IGdyb3codWludDMyX3QgZGVsdGEsIEpTVmFsdWUgZGVmYXVsdFZhbHVlKTsKICAgICB2
b2lkIGNvcHkoY29uc3QgVGFibGUqIHNyY1RhYmxlLCB1aW50MzJfdCBkc3RJbmRleCwgdWludDMy
X3Qgc3JjSW5kZXgpOwogCi0gICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYpOwor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgdmlzaXRBZ2dyZWdhdGUoVmlzaXRv
ciYpOwogCiBwcm90ZWN0ZWQ6CiAgICAgVGFibGUodWludDMyX3QgaW5pdGlhbCwgT3B0aW9uYWw8
dWludDMyX3Q+IG1heGltdW0sIFRhYmxlRWxlbWVudFR5cGUgPSBUYWJsZUVsZW1lbnRUeXBlOjpF
eHRlcm5yZWYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNUb1dhc21J
Q0NhbGxlZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
SlNUb1dhc21JQ0NhbGxlZS5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL0pTVG9XYXNtSUNDYWxsZWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
OSw3ICs0OSw4IEBAIFN0cnVjdHVyZSogSlNUb1dhc21JQ0NhbGxlZTo6Y3JlYXRlU3RydWMKICAg
ICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBU
eXBlSW5mbyhKU0NhbGxlZVR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKIH0KIAotdm9p
ZCBKU1RvV2FzbUlDQ2FsbGVlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0
b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1RvV2FzbUlD
Q2FsbGVlOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3Ip
CiB7CiAgICAgSlNUb1dhc21JQ0NhbGxlZSogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1RvV2FzbUlD
Q2FsbGVlKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0
LCBpbmZvKCkpOwpAQCAtNTgsNiArNTksOCBAQCB2b2lkIEpTVG9XYXNtSUNDYWxsZWU6OnZpc2l0
Q2hpbGRyZW4oSlNDCiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9mdW5jdGlvbik7
CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU1RvV2FzbUlDQ2FsbGVlKTsKKwogfSAvLyBu
YW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1RvV2FzbUlDQ2FsbGVlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNUb1dhc21JQ0NhbGxlZS5oCShyZXZp
c2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1RvV2FzbUlD
Q2FsbGVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTU2LDcgKzU2LDcgQEAgcHJpdmF0ZToKICAgICBK
U1RvV2FzbUlDQ2FsbGVlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUpCiAgICAgICAgIDogQmFzZSh2bSwgZ2xvYmFsT2JqZWN0LCBzdHJ1
Y3R1cmUpCiAgICAgeyB9Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBT
bG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBXcml0ZUJh
cnJpZXI8V2ViQXNzZW1ibHlGdW5jdGlvbj4gbV9mdW5jdGlvbjsKIH07CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJs
b2NrLmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
anMvSlNXZWJBc3NlbWJseUNvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgyLDcgKzgy
LDggQEAgdm9pZCBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrOjpjbGVhckpTQ2FsbAogICAgICAgICAo
Kml0ZXIpLT51bmxpbmsodm0pOwogfQogCi12b2lkIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6OnZp
c2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRl
PHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6OnZpc2l0Q2hp
bGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU1dlYkFz
c2VtYmx5Q29kZUJsb2NrKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTV2ViQXNzZW1ibHlDb2RlQmxv
Y2sqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGlu
Zm8oKSk7CkBAIC05MCw2ICs5MSw4IEBAIHZvaWQgSlNXZWJBc3NlbWJseUNvZGVCbG9jazo6dmlz
aXRDaGlsZHIKICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwog
fQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNXZWJBc3NlbWJseUNvZGVCbG9jayk7CisKIHZv
aWQgSlNXZWJBc3NlbWJseUNvZGVCbG9jazo6ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoVk0mIHZt
KQogewogICAgIGZvciAoYXV0byBpdGVyID0gbV9jYWxsTGlua0luZm9zLmJlZ2luKCk7ICEhaXRl
cjsgKytpdGVyKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3Nl
bWJseUNvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suaAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9jay5oCSh3b3JraW5n
IGNvcHkpCkBAIC04Niw3ICs4Niw3IEBAIHByaXZhdGU6CiAgICAgREVDTEFSRV9FWFBPUlRfSU5G
TzsKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNEZXN0cnVjdGlvbiA9IHRydWU7CiAg
ICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENo
aWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJF
TjsKIAogICAgIFJlZjxXYXNtOjpDb2RlQmxvY2s+IG1fY29kZUJsb2NrOwogICAgIFZlY3RvcjxN
YWNyb0Fzc2VtYmxlckNvZGVSZWY8V2FzbUVudHJ5UHRyVGFnPj4gbV93YXNtVG9KU0V4aXRTdHVi
czsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlHbG9i
YWwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2Vi
QXNzZW1ibHlHbG9iYWwuY3BwCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5R2xvYmFsLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NzEsNyArNzEsOCBAQCB2b2lkIEpTV2ViQXNzZW1ibHlHbG9iYWw6OmRlc3Ryb3koSlNDZWxsCiAg
ICAgc3RhdGljX2Nhc3Q8SlNXZWJBc3NlbWJseUdsb2JhbCo+KGNlbGwpLT5KU1dlYkFzc2VtYmx5
R2xvYmFsOjp+SlNXZWJBc3NlbWJseUdsb2JhbCgpOwogfQogCi12b2lkIEpTV2ViQXNzZW1ibHlH
bG9iYWw6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikK
K3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTV2ViQXNzZW1ibHlHbG9iYWw6OnZp
c2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBK
U1dlYkFzc2VtYmx5R2xvYmFsKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTV2ViQXNzZW1ibHlHbG9i
YWwqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGlu
Zm8oKSk7CkBAIC04MCw2ICs4MSw4IEBAIHZvaWQgSlNXZWJBc3NlbWJseUdsb2JhbDo6dmlzaXRD
aGlsZHJlbigKICAgICB0aGlzT2JqZWN0LT5nbG9iYWwoKS0+dmlzaXRBZ2dyZWdhdGUodmlzaXRv
cik7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU1dlYkFzc2VtYmx5R2xvYmFsKTsKKwog
fSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5R2xvYmFsLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUds
b2JhbC5oCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9KU1dlYkFzc2VtYmx5R2xvYmFsLmgJKHdvcmtpbmcgY29weSkKQEAgLTU5LDcgKzU5LDcgQEAg
cHVibGljOgogcHJpdmF0ZToKICAgICBKU1dlYkFzc2VtYmx5R2xvYmFsKFZNJiwgU3RydWN0dXJl
KiwgUmVmPFdhc206Okdsb2JhbD4mJik7CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOwot
ICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAg
ICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgUmVmPFdhc206Okdsb2JhbD4gbV9nbG9i
YWw7CiB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJs
eUluc3RhbmNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuY3BwCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC03Myw3ICs3Myw4IEBAIHZvaWQgSlNXZWJBc3NlbWJseUluc3RhbmNlOjpkZXN0
cm95KEpTQ2UKICAgICBzdGF0aWNfY2FzdDxKU1dlYkFzc2VtYmx5SW5zdGFuY2UqPihjZWxsKS0+
SlNXZWJBc3NlbWJseUluc3RhbmNlOjp+SlNXZWJBc3NlbWJseUluc3RhbmNlKCk7CiB9CiAKLXZv
aWQgSlNXZWJBc3NlbWJseUluc3RhbmNlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xv
dFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1dl
YkFzc2VtYmx5SW5zdGFuY2U6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRv
ciYgdmlzaXRvcikKIHsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTV2ViQXNzZW1i
bHlJbnN0YW5jZSo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09i
amVjdCwgaW5mbygpKTsKQEAgLTEwMiw2ICsxMDMsOCBAQCB2b2lkIEpTV2ViQXNzZW1ibHlJbnN0
YW5jZTo6dmlzaXRDaGlsZHJlCiAgICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQod3Jh
cHBlci5nZXQoKSk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU1dlYkFzc2VtYmx5SW5z
dGFuY2UpOworCiB2b2lkIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6ZmluYWxpemVDcmVhdGlvbihW
TSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZjxXYXNtOjpDb2RlQmxvY2s+
JiYgd2FzbUNvZGVCbG9jaywgSlNPYmplY3QqIGltcG9ydE9iamVjdCwgV2FzbTo6Q3JlYXRpb25N
b2RlIGNyZWF0aW9uTW9kZSkKIHsKICAgICBtX2luc3RhbmNlLT5maW5hbGl6ZUNyZWF0aW9uKHRo
aXMsIHdhc21Db2RlQmxvY2suY29weVJlZigpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5oCShyZXZpc2lvbiAy
NzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5z
dGFuY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMTA1LDcgKzEwNSw3IEBAIHB1YmxpYzoKIHByaXZh
dGU6CiAgICAgSlNXZWJBc3NlbWJseUluc3RhbmNlKFZNJiwgU3RydWN0dXJlKiwgUmVmPFdhc206
Okluc3RhbmNlPiYmKTsKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgSlNXZWJBc3NlbWJs
eU1vZHVsZSosIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkKik7Ci0gICAgc3RhdGljIHZvaWQgdmlz
aXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJ
TERSRU47CiAKICAgICBSZWY8V2FzbTo6SW5zdGFuY2U+IG1faW5zdGFuY2U7CiAgICAgVk0qIG1f
dm07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TWVt
b3J5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dl
YkFzc2VtYmx5TWVtb3J5LmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1lbW9yeS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE1OSw3ICsxNTksOCBAQCB2b2lkIEpTV2ViQXNzZW1ibHlNZW1vcnk6OmRlc3Ryb3koSlNDZWxs
CiAgICAgbWVtb3J5LT5KU1dlYkFzc2VtYmx5TWVtb3J5Ojp+SlNXZWJBc3NlbWJseU1lbW9yeSgp
OwogfQogCi12b2lkIEpTV2ViQXNzZW1ibHlNZW1vcnk6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBj
ZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2
b2lkIEpTV2ViQXNzZW1ibHlNZW1vcnk6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwg
VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTV2Vi
QXNzZW1ibHlNZW1vcnkqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRo
aXNPYmplY3QsIGluZm8oKSk7CkBAIC0xNjksNiArMTcwLDggQEAgdm9pZCBKU1dlYkFzc2VtYmx5
TWVtb3J5Ojp2aXNpdENoaWxkcmVuKAogICAgIHZpc2l0b3IucmVwb3J0RXh0cmFNZW1vcnlWaXNp
dGVkKHRoaXNPYmplY3QtPm1lbW9yeSgpLnNpemUoKSk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElM
RFJFTihKU1dlYkFzc2VtYmx5TWVtb3J5KTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRp
ZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9KU1dlYkFzc2VtYmx5TWVtb3J5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1lbW9yeS5oCShyZXZpc2lvbiAyNzE0NDMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TWVtb3J5LmgJKHdv
cmtpbmcgY29weSkKQEAgLTYzLDcgKzYzLDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBKU1dl
YkFzc2VtYmx5TWVtb3J5KFZNJiwgU3RydWN0dXJlKik7CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlv
bihWTSYpOwotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0
b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgUmVmPFdhc206Ok1lbW9y
eT4gbV9tZW1vcnk7CiAgICAgV3JpdGVCYXJyaWVyPEpTQXJyYXlCdWZmZXI+IG1fYnVmZmVyV3Jh
cHBlcjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlN
b2R1bGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pT
V2ViQXNzZW1ibHlNb2R1bGUuY3BwCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTI0LDcgKzEyNCw4IEBAIHZvaWQgSlNXZWJBc3NlbWJseU1vZHVsZTo6c2V0Q29kZUJsb2Nr
KFYKICAgICBtX2NvZGVCbG9ja3Nbc3RhdGljX2Nhc3Q8c2l6ZV90Pihtb2RlKV0uc2V0KHZtLCB0
aGlzLCBjb2RlQmxvY2spOwogfQogCi12b2lkIEpTV2ViQXNzZW1ibHlNb2R1bGU6OnZpc2l0Q2hp
bGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVu
YW1lIFZpc2l0b3I+Cit2b2lkIEpTV2ViQXNzZW1ibHlNb2R1bGU6OnZpc2l0Q2hpbGRyZW5JbXBs
KEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU1dlYkFzc2VtYmx5TW9k
dWxlKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTV2ViQXNzZW1ibHlNb2R1bGUqPihjZWxsKTsKICAg
ICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC0xMzUs
NiArMTM2LDggQEAgdm9pZCBKU1dlYkFzc2VtYmx5TW9kdWxlOjp2aXNpdENoaWxkcmVuKAogICAg
ICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2NvZGVCbG9ja3NbaV0pOwogfQogCitE
RUZJTkVfVklTSVRfQ0hJTERSRU4oSlNXZWJBc3NlbWJseU1vZHVsZSk7CisKIH0gLy8gbmFtZXNw
YWNlIEpTQwogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuaAkocmV2
aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3Nl
bWJseU1vZHVsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC04MCw3ICs4MCw3IEBAIHByaXZhdGU6CiAK
ICAgICBKU1dlYkFzc2VtYmx5TW9kdWxlKFZNJiwgU3RydWN0dXJlKiwgUmVmPFdhc206Ok1vZHVs
ZT4mJik7CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOwotICAgIHN0YXRpYyB2b2lkIHZp
c2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NI
SUxEUkVOOwogCiAgICAgUmVmPFdhc206Ok1vZHVsZT4gbV9tb2R1bGU7CiAgICAgV3JpdGVCYXJy
aWVyPFN5bWJvbFRhYmxlPiBtX2V4cG9ydFN5bWJvbFRhYmxlOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseVRhYmxlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5VGFibGUuY3BwCShyZXZp
c2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2Vt
Ymx5VGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Miw3ICs3Miw4IEBAIHZvaWQgSlNXZWJB
c3NlbWJseVRhYmxlOjpkZXN0cm95KEpTQ2VsbCoKICAgICBzdGF0aWNfY2FzdDxKU1dlYkFzc2Vt
Ymx5VGFibGUqPihjZWxsKS0+SlNXZWJBc3NlbWJseVRhYmxlOjp+SlNXZWJBc3NlbWJseVRhYmxl
KCk7CiB9CiAKLXZvaWQgSlNXZWJBc3NlbWJseVRhYmxlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCog
Y2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgor
dm9pZCBKU1dlYkFzc2VtYmx5VGFibGU6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwg
VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU1dlYkFzc2VtYmx5VGFibGUqIHRoaXNPYmplY3Qg
PSBqc0Nhc3Q8SlNXZWJBc3NlbWJseVRhYmxlKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVD
VF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtODEsNiArODIsOCBAQCB2b2lkIEpT
V2ViQXNzZW1ibHlUYWJsZTo6dmlzaXRDaGlsZHJlbihKCiAgICAgdGhpc09iamVjdC0+dGFibGUo
KS0+dmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihK
U1dlYkFzc2VtYmx5VGFibGUpOworCiBib29sIEpTV2ViQXNzZW1ibHlUYWJsZTo6Z3Jvdyh1aW50
MzJfdCBkZWx0YSwgSlNWYWx1ZSBkZWZhdWx0VmFsdWUpCiB7CiAgICAgaWYgKGRlbHRhID09IDAp
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5VGFibGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2Vt
Ymx5VGFibGUuaAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vanMvSlNXZWJBc3NlbWJseVRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTcwLDggKzcwLDgg
QEAgcHVibGljOgogcHJpdmF0ZToKICAgICBKU1dlYkFzc2VtYmx5VGFibGUoVk0mLCBTdHJ1Y3R1
cmUqLCBSZWY8V2FzbTo6VGFibGU+JiYpOwogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsK
LSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7Ci0K
KyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOworLy8KICAgICBSZWY8V2FzbTo6VGFibGU+IG1f
dGFibGU7CiB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3Nl
bWJseUZ1bmN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQ1Miw3ICs0NTIsOCBAQCBXZWJBc3NlbWJseUZ1bmN0aW9uOjpXZWJBc3NlbWJs
eUZ1bmN0aW9uCiAgICAgLCBtX2ltcG9ydGFibGVGdW5jdGlvbiB7IHNpZ25hdHVyZUluZGV4LCB3
YXNtVG9XYXNtRW50cnlwb2ludExvYWRMb2NhdGlvbiB9CiB7IH0KIAotdm9pZCBXZWJBc3NlbWJs
eUZ1bmN0aW9uOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0
b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBXZWJBc3NlbWJseUZ1bmN0aW9u
Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAg
ICAgV2ViQXNzZW1ibHlGdW5jdGlvbiogdGhpc09iamVjdCA9IGpzQ2FzdDxXZWJBc3NlbWJseUZ1
bmN0aW9uKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0
LCBpbmZvKCkpOwpAQCAtNDYxLDYgKzQ2Miw4IEBAIHZvaWQgV2ViQXNzZW1ibHlGdW5jdGlvbjo6
dmlzaXRDaGlsZHJlbigKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2pzVG9XYXNt
SUNDYWxsZWUpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oV2ViQXNzZW1ibHlGdW5jdGlv
bik7CisKIHZvaWQgV2ViQXNzZW1ibHlGdW5jdGlvbjo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCiB7
CiAgICAgc3RhdGljX2Nhc3Q8V2ViQXNzZW1ibHlGdW5jdGlvbio+KGNlbGwpLT5XZWJBc3NlbWJs
eUZ1bmN0aW9uOjp+V2ViQXNzZW1ibHlGdW5jdGlvbigpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uaAkocmV2aXNpb24g
MjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5j
dGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC05MCw3ICs5MCw3IEBAIHB1YmxpYzoKICAgICBXYXNt
OjpJbnN0YW5jZSogcHJldmlvdXNJbnN0YW5jZShDYWxsRnJhbWUqKTsKIAogcHJpdmF0ZToKLSAg
ICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAg
REVDTEFSRV9WSVNJVF9DSElMRFJFTjsKICAgICBXZWJBc3NlbWJseUZ1bmN0aW9uKFZNJiwgTmF0
aXZlRXhlY3V0YWJsZSosIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKiwgV2FzbTo6Q2FsbGVl
JiBqc0VudHJ5cG9pbnQsIFdhc21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rpb246OkxvYWRMb2NhdGlv
biBlbnRyeXBvaW50TG9hZExvY2F0aW9uLCBXYXNtOjpTaWduYXR1cmVJbmRleCk7CiAKICAgICBN
YWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4ganNDYWxsRW50cnlwb2ludFNsb3co
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rp
b25CYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9X
ZWJBc3NlbWJseUZ1bmN0aW9uQmFzZS5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb25CYXNlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDEsNyArNDEsOCBAQCBXZWJBc3NlbWJseUZ1bmN0aW9uQmFzZTo6V2ViQXNz
ZW1ibHlGdW5jCiAgICAgOiBCYXNlKHZtLCBleGVjdXRhYmxlLCBnbG9iYWxPYmplY3QsIHN0cnVj
dHVyZSkKIHsgfQogCi12b2lkIFdlYkFzc2VtYmx5RnVuY3Rpb25CYXNlOjp2aXNpdENoaWxkcmVu
KEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPgordm9pZCBXZWJBc3NlbWJseUZ1bmN0aW9uQmFzZTo6dmlzaXRDaGlsZHJlbkltcGwo
SlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFdlYkFzc2VtYmx5RnVuY3Rp
b25CYXNlKiB0aGlzT2JqZWN0ID0ganNDYXN0PFdlYkFzc2VtYmx5RnVuY3Rpb25CYXNlKj4oY2Vs
bCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpA
QCAtNDksNiArNTAsOCBAQCB2b2lkIFdlYkFzc2VtYmx5RnVuY3Rpb25CYXNlOjp2aXNpdENoaWxk
CiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9pbnN0YW5jZSk7CiB9CiAKK0RFRklO
RV9WSVNJVF9DSElMRFJFTihXZWJBc3NlbWJseUZ1bmN0aW9uQmFzZSk7CisKIHZvaWQgV2ViQXNz
ZW1ibHlGdW5jdGlvbkJhc2U6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgTmF0aXZlRXhlY3V0YWJs
ZSogZXhlY3V0YWJsZSwgdW5zaWduZWQgbGVuZ3RoLCBjb25zdCBTdHJpbmcmIG5hbWUsIEpTV2Vi
QXNzZW1ibHlJbnN0YW5jZSogaW5zdGFuY2UpCiB7CiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24o
dm0sIGV4ZWN1dGFibGUsIGxlbmd0aCwgbmFtZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uQmFzZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb25CYXNlLmgJKHJldmlz
aW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5
RnVuY3Rpb25CYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDcgKzQ2LDcgQEAgcHVibGljOgog
ICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZJbnN0YW5jZSgpIHsgcmV0dXJuIE9CSkVDVF9P
RkZTRVRPRihXZWJBc3NlbWJseUZ1bmN0aW9uQmFzZSwgbV9pbnN0YW5jZSk7IH0KIAogcHJvdGVj
dGVkOgotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3Im
KTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24o
Vk0mLCBOYXRpdmVFeGVjdXRhYmxlKiwgdW5zaWduZWQgbGVuZ3RoLCBjb25zdCBTdHJpbmcmIG5h
bWUsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSopOwogICAgIFdlYkFzc2VtYmx5RnVuY3Rpb25CYXNl
KFZNJiwgTmF0aXZlRXhlY3V0YWJsZSosIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKik7CiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVj
b3JkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJB
c3NlbWJseU1vZHVsZVJlY29yZC5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNzcsNyArNzcsOCBAQCB2b2lkIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpmaW5p
c2hDcmVhCiAgICAgfQogfQogCi12b2lkIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjp2aXNpdENo
aWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBl
bmFtZSBWaXNpdG9yPgordm9pZCBXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6dmlzaXRDaGlsZHJl
bkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFdlYkFzc2VtYmx5
TW9kdWxlUmVjb3JkKiB0aGlzT2JqZWN0ID0ganNDYXN0PFdlYkFzc2VtYmx5TW9kdWxlUmVjb3Jk
Kj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZv
KCkpOwpAQCAtODcsNiArODgsOCBAQCB2b2lkIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjp2aXNp
dENoaWxkCiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9leHBvcnRzT2JqZWN0KTsK
IH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkKTsKKwog
dm9pZCBXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6cHJlcGFyZUxpbmsoVk0mIHZtLCBKU1dlYkFz
c2VtYmx5SW5zdGFuY2UqIGluc3RhbmNlKQogewogICAgIFJFTEVBU0VfQVNTRVJUKCFtX2luc3Rh
bmNlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9k
dWxlUmVjb3JkLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
V2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuaAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuaAkod29ya2luZyBj
b3B5KQpAQCAtNjksNyArNjksNyBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBmaW5pc2hDcmVhdGlv
bihKU0dsb2JhbE9iamVjdCosIFZNJiwgY29uc3QgV2FzbTo6TW9kdWxlSW5mb3JtYXRpb24mKTsK
IAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsK
KyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgV3JpdGVCYXJyaWVyPEpTV2ViQXNz
ZW1ibHlJbnN0YW5jZT4gbV9pbnN0YW5jZTsKICAgICBXcml0ZUJhcnJpZXI8SlNPYmplY3Q+IG1f
c3RhcnRGdW5jdGlvbjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFz
c2VtYmx5V3JhcHBlckZ1bmN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5jcHAJKHJldmlzaW9uIDI3
MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5V3JhcHBl
ckZ1bmN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjcsNyArNjcsOCBAQCBTdHJ1Y3R1cmUq
IFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uOjpjCiAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3Jl
YXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oSlNGdW5jdGlvblR5cGUs
IFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKIH0KIAotdm9pZCBXZWJBc3NlbWJseVdyYXBwZXJG
dW5jdGlvbjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9y
KQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgV2ViQXNzZW1ibHlXcmFwcGVyRnVu
Y3Rpb246OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikK
IHsKICAgICBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbiogdGhpc09iamVjdCA9IGpzQ2FzdDxX
ZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbio+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1Rf
SU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTc2LDYgKzc3LDggQEAgdm9pZCBXZWJB
c3NlbWJseVdyYXBwZXJGdW5jdGlvbjo6dmlzaXRDaAogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNP
YmplY3QtPm1fZnVuY3Rpb24pOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oV2ViQXNzZW1i
bHlXcmFwcGVyRnVuY3Rpb24pOworCiBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oY2FsbFdlYkFz
c2VtYmx5V3JhcHBlckZ1bmN0aW9uLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2Fs
bEZyYW1lKiBjYWxsRnJhbWUpKQogewogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5V3JhcHBlckZ1
bmN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2Vi
QXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uaAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uaAkod29ya2lu
ZyBjb3B5KQpAQCAtNTksNyArNTksNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIFdlYkFzc2Vt
Ymx5V3JhcHBlckZ1bmN0aW9uKFZNJiwgTmF0aXZlRXhlY3V0YWJsZSosIEpTR2xvYmFsT2JqZWN0
KiwgU3RydWN0dXJlKiwgV2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbik7CiAgICAgdm9pZCBm
aW5pc2hDcmVhdGlvbihWTSYsIE5hdGl2ZUV4ZWN1dGFibGUqLCB1bnNpZ25lZCBsZW5ndGgsIGNv
bnN0IFN0cmluZyYgbmFtZSwgSlNPYmplY3QqLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqKTsKLSAg
ICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAg
REVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIFdyaXRlQmFycmllcjxKU09iamVjdD4gbV9m
dW5jdGlvbjsKICAgICAvLyBJdCdzIHNhZmUgdG8ganVzdCBob2xkIHRoZSByYXcgV2FzbVRvV2Fz
bUltcG9ydGFibGVGdW5jdGlvbiBiZWNhdXNlIHdlIGhhdmUgYSByZWZlcmVuY2UKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5j
cHAJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQk9iamVjdFN0b3JlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzI4LDcgKzcyOCw5IEBAIHZv
aWQgSURCT2JqZWN0U3RvcmU6OnJvbGxiYWNrRm9yVmVyc2lvbkMKICAgICB9CiB9CiAKLXZvaWQg
SURCT2JqZWN0U3RvcmU6OnZpc2l0UmVmZXJlbmNlZEluZGV4ZXMoU2xvdFZpc2l0b3ImIHZpc2l0
b3IpIGNvbnN0CisvL3ZvaWQgSURCT2JqZWN0U3RvcmU6OnZpc2l0UmVmZXJlbmNlZEluZGV4ZXMo
U2xvdFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgor
dm9pZCBJREJPYmplY3RTdG9yZTo6dmlzaXRSZWZlcmVuY2VkSW5kZXhlcyhWaXNpdG9yJiB2aXNp
dG9yKSBjb25zdAogewogICAgIExvY2tlcjxMb2NrPiBsb2NrZXIobV9yZWZlcmVuY2VkSW5kZXhM
b2NrKTsKICAgICBmb3IgKGF1dG8mIGluZGV4IDogbV9yZWZlcmVuY2VkSW5kZXhlcy52YWx1ZXMo
KSkKQEAgLTczNyw2ICs3MzksOSBAQCB2b2lkIElEQk9iamVjdFN0b3JlOjp2aXNpdFJlZmVyZW5j
ZWRJbmRlCiAgICAgICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChpbmRleC5nZXQoKSk7CiB9CiAK
K3RlbXBsYXRlIHZvaWQgSURCT2JqZWN0U3RvcmU6OnZpc2l0UmVmZXJlbmNlZEluZGV4ZXMoQWJz
dHJhY3RTbG90VmlzaXRvciYpIGNvbnN0OwordGVtcGxhdGUgdm9pZCBJREJPYmplY3RTdG9yZTo6
dmlzaXRSZWZlcmVuY2VkSW5kZXhlcyhTbG90VmlzaXRvciYpIGNvbnN0OworCiB2b2lkIElEQk9i
amVjdFN0b3JlOjpyZW5hbWVSZWZlcmVuY2VkSW5kZXgoSURCSW5kZXgmIGluZGV4LCBjb25zdCBT
dHJpbmcmIG5ld05hbWUpCiB7CiAgICAgTE9HKEluZGV4ZWREQiwgIklEQk9iamVjdFN0b3JlOjpy
ZW5hbWVSZWZlcmVuY2VkSW5kZXgiKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQk9iamVjdFN0b3JlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuaAkocmV2aXNpb24gMjcxNDQzKQorKysgU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuaAkod29ya2luZyBj
b3B5KQpAQCAtMTA5LDcgKzEwOSw4IEBAIHB1YmxpYzoKICAgICB2b2lkIHJlZigpOwogICAgIHZv
aWQgZGVyZWYoKTsKIAotICAgIHZvaWQgdmlzaXRSZWZlcmVuY2VkSW5kZXhlcyhKU0M6OlNsb3RW
aXNpdG9yJikgY29uc3Q7CisvLyAgICB2b2lkIHZpc2l0UmVmZXJlbmNlZEluZGV4ZXMoSlNDOjpT
bG90VmlzaXRvciYpIGNvbnN0OworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQg
dmlzaXRSZWZlcmVuY2VkSW5kZXhlcyhWaXNpdG9yJikgY29uc3Q7CiAgICAgdm9pZCByZW5hbWVS
ZWZlcmVuY2VkSW5kZXgoSURCSW5kZXgmLCBjb25zdCBTdHJpbmcmIG5ld05hbWUpOwogCiBwcml2
YXRlOgpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rp
b24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
QlRyYW5zYWN0aW9uLmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDU1
LDcgKzE0NTUsOCBAQCB2b2lkIElEQlRyYW5zYWN0aW9uOjpjb25uZWN0aW9uQ2xvc2VkRnJvCiAg
ICAgZmlyZU9uQWJvcnQoKTsKIH0KIAotdm9pZCBJREJUcmFuc2FjdGlvbjo6dmlzaXRSZWZlcmVu
Y2VkT2JqZWN0U3RvcmVzKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0Cit0ZW1wbGF0
ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBJREJUcmFuc2FjdGlvbjo6dmlzaXRSZWZlcmVuY2Vk
T2JqZWN0U3RvcmVzKFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0CiB7CiAgICAgTG9ja2VyPExvY2s+
IGxvY2tlcihtX3JlZmVyZW5jZWRPYmplY3RTdG9yZUxvY2spOwogICAgIGZvciAoYXV0byYgb2Jq
ZWN0U3RvcmUgOiBtX3JlZmVyZW5jZWRPYmplY3RTdG9yZXMudmFsdWVzKCkpCkBAIC0xNDY0LDYg
KzE0NjUsOSBAQCB2b2lkIElEQlRyYW5zYWN0aW9uOjp2aXNpdFJlZmVyZW5jZWRPYmplCiAgICAg
ICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChvYmplY3RTdG9yZS5nZXQoKSk7CiB9CiAKK3RlbXBs
YXRlIHZvaWQgSURCVHJhbnNhY3Rpb246OnZpc2l0UmVmZXJlbmNlZE9iamVjdFN0b3JlcyhKU0M6
OkFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0OwordGVtcGxhdGUgdm9pZCBJREJU
cmFuc2FjdGlvbjo6dmlzaXRSZWZlcmVuY2VkT2JqZWN0U3RvcmVzKEpTQzo6U2xvdFZpc2l0b3Im
IHZpc2l0b3IpIGNvbnN0OworCiB2b2lkIElEQlRyYW5zYWN0aW9uOjpoYW5kbGVQZW5kaW5nT3Bl
cmF0aW9ucygpCiB7CiAgICAgQVNTRVJUKGNhbkN1cnJlbnRUaHJlYWRBY2Nlc3NUaHJlYWRMb2Nh
bERhdGEobV9kYXRhYmFzZS0+b3JpZ2luVGhyZWFkKCkpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb24uaAkocmV2aXNpb24gMjcx
NDQzKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb24u
aAkod29ya2luZyBjb3B5KQpAQCAtMTQ5LDcgKzE0OSw4IEBAIHB1YmxpYzoKIAogICAgIHZvaWQg
Y29ubmVjdGlvbkNsb3NlZEZyb21TZXJ2ZXIoY29uc3QgSURCRXJyb3ImKTsKIAotICAgIHZvaWQg
dmlzaXRSZWZlcmVuY2VkT2JqZWN0U3RvcmVzKEpTQzo6U2xvdFZpc2l0b3ImKSBjb25zdDsKKy8v
ICAgIHZvaWQgdmlzaXRSZWZlcmVuY2VkT2JqZWN0U3RvcmVzKEpTQzo6U2xvdFZpc2l0b3ImKSBj
b25zdDsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIHZpc2l0UmVmZXJlbmNl
ZE9iamVjdFN0b3JlcyhWaXNpdG9yJikgY29uc3Q7CiAKICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0
aWMgc3RkOjphdG9taWM8dW5zaWduZWQ+IG51bWJlck9mSURCVHJhbnNhY3Rpb25zOwogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQnVmZmVyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQnVmZmVyLmNwcAko
cmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRp
b0J1ZmZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1NCwxMiArMTU0LDE3IEBAIEV4Y2VwdGlv
bk9yPEpTQzo6SlNWYWx1ZT4gQXVkaW9CdWZmZXI6OmcKICAgICByZXR1cm4gY29uc3RydWN0SlNB
cnJheSgpOwogfQogCi12b2lkIEF1ZGlvQnVmZmVyOjp2aXNpdENoYW5uZWxXcmFwcGVycyhKU0M6
OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy92b2lkIEF1ZGlvQnVmZmVyOjp2aXNpdENoYW5uZWxX
cmFwcGVycyhKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlz
aXRvcj4KK3ZvaWQgQXVkaW9CdWZmZXI6OnZpc2l0Q2hhbm5lbFdyYXBwZXJzKFZpc2l0b3ImIHZp
c2l0b3IpCiB7CiAgICAgZm9yIChhdXRvJiBjaGFubmVsV3JhcHBlciA6IG1fY2hhbm5lbFdyYXBw
ZXJzKQogICAgICAgICBjaGFubmVsV3JhcHBlci52aXNpdCh2aXNpdG9yKTsKIH0KIAordGVtcGxh
dGUgdm9pZCBBdWRpb0J1ZmZlcjo6dmlzaXRDaGFubmVsV3JhcHBlcnMoSlNDOjpBYnN0cmFjdFNs
b3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEF1ZGlvQnVmZmVyOjp2aXNpdENoYW5uZWxXcmFw
cGVycyhKU0M6OlNsb3RWaXNpdG9yJik7CisKIFJlZlB0cjxGbG9hdDMyQXJyYXk+IEF1ZGlvQnVm
ZmVyOjpjaGFubmVsRGF0YSh1bnNpZ25lZCBjaGFubmVsSW5kZXgpCiB7CiAgICAgaWYgKGNoYW5u
ZWxJbmRleCA+PSBtX2NoYW5uZWxzLnNpemUoKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViYXVkaW8vQXVkaW9CdWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQnVmZmVyLmgJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9CdWZmZXIuaAkod29ya2luZyBjb3B5KQpA
QCAtNzUsNyArNzUsOCBAQCBwdWJsaWM6CiAKICAgICBzaXplX3QgbWVtb3J5Q29zdCgpIGNvbnN0
OwogCi0gICAgdm9pZCB2aXNpdENoYW5uZWxXcmFwcGVycyhKU0M6OlNsb3RWaXNpdG9yJik7Cisv
LyAgICB2b2lkIHZpc2l0Q2hhbm5lbFdyYXBwZXJzKEpTQzo6U2xvdFZpc2l0b3ImKTsKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIHZpc2l0Q2hhbm5lbFdyYXBwZXJzKFZpc2l0
b3ImKTsKICAgICAKIHByaXZhdGU6CiAgICAgQXVkaW9CdWZmZXIodW5zaWduZWQgbnVtYmVyT2ZD
aGFubmVscywgc2l6ZV90IGxlbmd0aCwgZmxvYXQgc2FtcGxlUmF0ZSwgTGVnYWN5UHJldmVudERl
dGFjaGluZyA9IExlZ2FjeVByZXZlbnREZXRhY2hpbmc6Ok5vKTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0RPTUdDT3V0cHV0Q29uc3RyYWludC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvRE9NR0NPdXRwdXRDb25zdHJhaW50LmNwcAkocmV2
aXNpb24gMjcxNDQzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvRE9NR0NPdXRwdXRD
b25zdHJhaW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDksNyArNDksNyBAQCBET01HQ091dHB1
dENvbnN0cmFpbnQ6On5ET01HQ091dHB1dENvbnN0CiB7CiB9CiAKLXZvaWQgRE9NR0NPdXRwdXRD
b25zdHJhaW50OjpleGVjdXRlSW1wbChTbG90VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgRE9NR0NP
dXRwdXRDb25zdHJhaW50OjpleGVjdXRlSW1wbChBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9y
KQogewogICAgIEhlYXAmIGhlYXAgPSBtX3ZtLmhlYXA7CiAgICAgCkBAIC02MCw4ICs2MCw4IEBA
IHZvaWQgRE9NR0NPdXRwdXRDb25zdHJhaW50OjpleGVjdXRlSW1wbCgKICAgICAKICAgICBtX2Ns
aWVudERhdGEuZm9yRWFjaE91dHB1dENvbnN0cmFpbnRTcGFjZSgKICAgICAgICAgWyZdIChTdWJz
cGFjZSYgc3Vic3BhY2UpIHsKLSAgICAgICAgICAgIGF1dG8gZnVuYyA9IFtdIChTbG90VmlzaXRv
ciYgdmlzaXRvciwgSGVhcENlbGwqIGhlYXBDZWxsLCBIZWFwQ2VsbDo6S2luZCkgewotICAgICAg
ICAgICAgICAgIFNldFJvb3RNYXJrUmVhc29uU2NvcGUgcm9vdFNjb3BlKHZpc2l0b3IsIFNsb3RW
aXNpdG9yOjpSb290TWFya1JlYXNvbjo6RE9NR0NPdXRwdXQpOworICAgICAgICAgICAgYXV0byBm
dW5jID0gW10gKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIEhlYXBDZWxsKiBoZWFwQ2Vs
bCwgSGVhcENlbGw6OktpbmQpIHsKKyAgICAgICAgICAgICAgICBTZXRSb290TWFya1JlYXNvblNj
b3BlIHJvb3RTY29wZSh2aXNpdG9yLCBBYnN0cmFjdFNsb3RWaXNpdG9yOjpSb290TWFya1JlYXNv
bjo6RE9NR0NPdXRwdXQpOwogICAgICAgICAgICAgICAgIEpTQ2VsbCogY2VsbCA9IHN0YXRpY19j
YXN0PEpTQ2VsbCo+KGhlYXBDZWxsKTsKICAgICAgICAgICAgICAgICBjZWxsLT5tZXRob2RUYWJs
ZSh2aXNpdG9yLnZtKCkpLT52aXNpdE91dHB1dENvbnN0cmFpbnRzKGNlbGwsIHZpc2l0b3IpOwog
ICAgICAgICAgICAgfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0RPTUdDT3V0
cHV0Q29uc3RyYWludC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0RPTUdDT3V0cHV0Q29uc3RyYWludC5oCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9ET01HQ091dHB1dENvbnN0cmFpbnQuaAkod29ya2luZyBjb3B5KQpA
QCAtNDIsNyArNDIsNyBAQCBwdWJsaWM6CiAgICAgfkRPTUdDT3V0cHV0Q29uc3RyYWludCgpOwog
ICAgIAogcHJvdGVjdGVkOgotICAgIHZvaWQgZXhlY3V0ZUltcGwoSlNDOjpTbG90VmlzaXRvciYp
IG92ZXJyaWRlOworICAgIHZvaWQgZXhlY3V0ZUltcGwoSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9y
Jikgb3ZlcnJpZGU7CiAKIHByaXZhdGU6CiAgICAgSlNDOjpWTSYgbV92bTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQWJvcnRDb250cm9sbGVyQ3VzdG9tLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Fib3J0Q29udHJvbGxlckN1c3Rv
bS5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
QWJvcnRDb250cm9sbGVyQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsOSArMjgsMTQg
QEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIEpTQWJvcnRDb250cm9sbGVyOjp2aXNp
dEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy92b2lkIEpT
QWJvcnRDb250cm9sbGVyOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9y
JiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNBYm9ydENvbnRy
b2xsZXI6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAg
dmlzaXRvci5hZGRPcGFxdWVSb290KCZ3cmFwcGVkKCkuc2lnbmFsKCkpOwogfQogCit0ZW1wbGF0
ZSB2b2lkIEpTQWJvcnRDb250cm9sbGVyOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OkFi
c3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNBYm9ydENvbnRyb2xsZXI6OnZp
c2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImKTsKKwogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNBYm9ydFNpZ25h
bEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNB
Ym9ydFNpZ25hbEN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTQWJvcnRTaWduYWxDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
OCw3ICsyOCw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotYm9vbCBKU0Fib3J0U2lnbmFs
T3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93
bj4gaGFuZGxlLCB2b2lkKiwgSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioq
IHJlYXNvbikKK2Jvb2wgSlNBYm9ydFNpZ25hbE93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVS
b290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIEpTQzo6QWJzdHJh
Y3RTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikKIHsKICAgICBhdXRv
JiBhYm9ydFNpZ25hbCA9IEpTQzo6anNDYXN0PEpTQWJvcnRTaWduYWwqPihoYW5kbGUuc2xvdCgp
LT5hc0NlbGwoKSktPndyYXBwZWQoKTsKICAgICBpZiAoYWJvcnRTaWduYWwuaXNGaXJpbmdFdmVu
dExpc3RlbmVycygpKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0F0dHJD
dXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXR0
ckN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTQXR0ckN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDEwICszMywxNSBAQAog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgSlNBdHRyOjp2aXNpdEFkZGl0aW9uYWxDaGls
ZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy92b2lkIEpTQXR0cjo6dmlzaXRBZGRp
dGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVu
YW1lIFZpc2l0b3I+Cit2b2lkIEpTQXR0cjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRv
ciYgdmlzaXRvcikKIHsKICAgICBpZiAoRWxlbWVudCogZWxlbWVudCA9IHdyYXBwZWQoKS5vd25l
ckVsZW1lbnQoKSkKICAgICAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHJvb3QoZWxlbWVudCkp
OwogfQogCit0ZW1wbGF0ZSB2b2lkIEpTQXR0cjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlND
OjpBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTQXR0cjo6dmlzaXRBZGRp
dGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYpOworCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0F1ZGlvQnVmZmVyQ3VzdG9t
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0F1ZGlvQnVm
ZmVyQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNBdWRpb0J1ZmZlckN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDExICsz
MSwxNiBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAotdm9p
ZCBKU0F1ZGlvQnVmZmVyOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlz
aXRvcikKKy8vdm9pZCBKU0F1ZGlvQnVmZmVyOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90
VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTQXVk
aW9CdWZmZXI6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAg
ICAgd3JhcHBlZCgpLnZpc2l0Q2hhbm5lbFdyYXBwZXJzKHZpc2l0b3IpOwogfQogCit0ZW1wbGF0
ZSB2b2lkIEpTQXVkaW9CdWZmZXI6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEFic3RyYWN0U2xv
dFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNBdWRpb0J1ZmZlcjo6dmlzaXRBZGRpdGlvbmFs
Q2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5k
aWYgLy8gRU5BQkxFKFdFQl9BVURJTykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTQXVkaW9UcmFja0N1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNBdWRpb1RyYWNrQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNBdWRpb1RyYWNrQ3VzdG9tLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzUsMTEgKzM1LDE2IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1l
c3BhY2UgSlNDOwogCi12b2lkIEpTQXVkaW9UcmFjazo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4o
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3ZvaWQgSlNBdWRpb1RyYWNrOjp2aXNpdEFkZGl0aW9u
YWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0
b3I+Cit2b2lkIEpTQXVkaW9UcmFjazo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYg
dmlzaXRvcikKIHsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qocm9vdCgmd3JhcHBlZCgpKSk7
CiB9CiAKK3RlbXBsYXRlIHZvaWQgSlNBdWRpb1RyYWNrOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJl
bihBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTQXVkaW9UcmFjazo6dmlz
aXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKKwogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQogCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXVkaW9U
cmFja0xpc3RDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTQXVkaW9UcmFja0xpc3RDdXN0b20uY3BwCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0F1ZGlvVHJhY2tMaXN0Q3VzdG9tLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzYsMTEgKzM2LDE2IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBu
YW1lc3BhY2UgSlNDOwogCi12b2lkIEpTQXVkaW9UcmFja0xpc3Q6OnZpc2l0QWRkaXRpb25hbENo
aWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy92b2lkIEpTQXVkaW9UcmFja0xpc3Q6OnZp
c2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlw
ZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNBdWRpb1RyYWNrTGlzdDo6dmlzaXRBZGRpdGlvbmFsQ2hp
bGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qocm9v
dCh3cmFwcGVkKCkuZWxlbWVudCgpKSk7CiB9CiAKK3RlbXBsYXRlIHZvaWQgSlNBdWRpb1RyYWNr
TGlzdDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oQWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVt
cGxhdGUgdm9pZCBKU0F1ZGlvVHJhY2tMaXN0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90
VmlzaXRvciYpOworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZgpJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNBdWRpb1dvcmtsZXRQcm9jZXNzb3JDdXN0b20uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXVkaW9Xb3JrbGV0
UHJvY2Vzc29yQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNBdWRpb1dvcmtsZXRQcm9jZXNzb3JDdXN0b20uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zMSw3ICszMSw5IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3Bh
Y2UgSlNDOwogCi12b2lkIEpTQXVkaW9Xb3JrbGV0UHJvY2Vzc29yOjp2aXNpdEFkZGl0aW9uYWxD
aGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vdm9pZCBKU0F1ZGlvV29ya2xldFByb2Nl
c3Nvcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1w
bGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0F1ZGlvV29ya2xldFByb2Nlc3Nvcjo6dmlz
aXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBhdXRvJiBwcm9j
ZXNzb3IgPSB3cmFwcGVkKCk7CiAgICAgcHJvY2Vzc29yLmpzSW5wdXRzV3JhcHBlcigpLnZpc2l0
KHZpc2l0b3IpOwpAQCAtMzksNiArNDEsOSBAQCB2b2lkIEpTQXVkaW9Xb3JrbGV0UHJvY2Vzc29y
Ojp2aXNpdEFkZGl0CiAgICAgcHJvY2Vzc29yLmpzUGFyYW1WYWx1ZXNXcmFwcGVyKCkudmlzaXQo
dmlzaXRvcik7CiB9CiAKK3RlbXBsYXRlIHZvaWQgSlNBdWRpb1dvcmtsZXRQcm9jZXNzb3I6OnZp
c2l0QWRkaXRpb25hbENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZv
aWQgSlNBdWRpb1dvcmtsZXRQcm9jZXNzb3I6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RW
aXNpdG9yJik7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShX
RUJfQVVESU8pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NTU1J1bGVDdXN0
b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ1NTUnVs
ZUN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTQ1NTUnVsZUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUxLDExICs1MSwxNiBA
QAogbmFtZXNwYWNlIFdlYkNvcmUgewogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAotdm9pZCBKU0NT
U1J1bGU6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy92
b2lkIEpTQ1NTUnVsZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0
b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0NTU1J1bGU6OnZpc2l0QWRk
aXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgdmlzaXRvci5hZGRPcGFx
dWVSb290KHJvb3QoJndyYXBwZWQoKSkpOwogfQogCit0ZW1wbGF0ZSB2b2lkIEpTQ1NTUnVsZTo6
dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oQWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUg
dm9pZCBKU0NTU1J1bGU6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CisK
IEpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0dsb2JhbE9iamVjdCosIEpTRE9NR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIFJlZjxDU1NSdWxlPiYmIHJ1bGUpCiB7CiAgICAgc3dpdGNoIChy
dWxlLT50eXBlKCkpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ1NTUnVs
ZUxpc3RDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTQ1NTUnVsZUxpc3RDdXN0b20uY3BwCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0NTU1J1bGVMaXN0Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzYsNyArMzYsNyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogdXNpbmcgbmFtZXNwYWNlIEpT
QzsKIAotYm9vbCBKU0NTU1J1bGVMaXN0T3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3Rz
KEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgU2xvdFZpc2l0b3ImIHZp
c2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCitib29sIEpTQ1NTUnVsZUxpc3RPd25lcjo6aXNS
ZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUs
IHZvaWQqLCBBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29u
KQogewogICAgIEpTQ1NTUnVsZUxpc3QqIGpzQ1NTUnVsZUxpc3QgPSBqc0Nhc3Q8SlNDU1NSdWxl
TGlzdCo+KGhhbmRsZS5zbG90KCktPmFzQ2VsbCgpKTsKICAgICBpZiAoIWpzQ1NTUnVsZUxpc3Qt
Pmhhc0N1c3RvbVByb3BlcnRpZXMoanNDU1NSdWxlTGlzdC0+dm0oKSkpCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NTU1N0eWxlRGVjbGFyYXRpb25DdXN0b20uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ1NTU3R5bGVEZWNsYXJhdGlv
bkN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTQ1NTU3R5bGVEZWNsYXJhdGlvbkN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUx
LDkgKzUxLDE0IEBAIHZvaWQqIHJvb3QoQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUpCiAgICAg
cmV0dXJuIHN0eWxlOwogfQogCi12b2lkIEpTQ1NTU3R5bGVEZWNsYXJhdGlvbjo6dmlzaXRBZGRp
dGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3ZvaWQgSlNDU1NTdHlsZURl
Y2xhcmF0aW9uOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikK
K3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTQ1NTU3R5bGVEZWNsYXJhdGlvbjo6
dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB2aXNpdG9y
LmFkZE9wYXF1ZVJvb3Qocm9vdCgmd3JhcHBlZCgpKSk7CiB9CiAKK3RlbXBsYXRlIHZvaWQgSlND
U1NTdHlsZURlY2xhcmF0aW9uOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihBYnN0cmFjdFNsb3RW
aXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTQ1NTU3R5bGVEZWNsYXJhdGlvbjo6dmlzaXRBZGRp
dGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDYWxsYmFja0RhdGEuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2FsbGJhY2tEYXRhLmNwcAko
cmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDYWxsYmFj
a0RhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NSwxMiArOTUsMTYgQEAgSlNWYWx1ZSBKU0Nh
bGxiYWNrRGF0YTo6aW52b2tlQ2FsbGJhY2soSgogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZv
aWQgSlNDYWxsYmFja0RhdGFXZWFrOjp2aXNpdEpTRnVuY3Rpb24oSlNDOjpTbG90VmlzaXRvciYg
dmlzdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNDYWxsYmFja0RhdGFX
ZWFrOjp2aXNpdEpTRnVuY3Rpb24oVmlzaXRvciYgdmlzaXRvcikKIHsKLSAgICB2aXN0b3IuYXBw
ZW5kKG1fY2FsbGJhY2spOworICAgIHZpc2l0b3IuYXBwZW5kKG1fY2FsbGJhY2spOwogfQogCi1i
b29sIEpTQ2FsbGJhY2tEYXRhV2Vhazo6V2Vha093bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVS
b290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0LCBTbG90VmlzaXRv
ciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikKK3RlbXBsYXRlIHZvaWQgSlNDYWxsYmFj
a0RhdGFXZWFrOjp2aXNpdEpTRnVuY3Rpb24oSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0
ZW1wbGF0ZSB2b2lkIEpTQ2FsbGJhY2tEYXRhV2Vhazo6dmlzaXRKU0Z1bmN0aW9uKEpTQzo6U2xv
dFZpc2l0b3ImKTsKKworYm9vbCBKU0NhbGxiYWNrRGF0YVdlYWs6OldlYWtPd25lcjo6aXNSZWFj
aGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29u
dGV4dCwgQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikK
IHsKICAgICBpZiAoVU5MSUtFTFkocmVhc29uKSkKICAgICAgICAgKnJlYXNvbiA9ICJDb250ZXh0
IGlzIG9wYXF1ZSByb290IjsgLy8gRklYTUU6IHdoYXQgaXMgdGhlIGNvbnRleHQuCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NhbGxiYWNrRGF0YS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2FsbGJhY2tEYXRhLmgJKHJldmlzaW9uIDI3
MTQ0MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2FsbGJhY2tEYXRhLmgJKHdv
cmtpbmcgY29weSkKQEAgLTExMywxMSArMTEzLDEyIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJu
IEpTQ2FsbGJhY2tEYXRhOjppbnZva2VDYWxsYmFjaygqZ2xvYmFsT2JqZWN0LCBjYWxsYmFjaygp
LCB0aGlzVmFsdWUsIGFyZ3MsIGNhbGxiYWNrVHlwZSwgZnVuY3Rpb25OYW1lLCByZXR1cm5lZEV4
Y2VwdGlvbik7CiAgICAgfQogCi0gICAgdm9pZCB2aXNpdEpTRnVuY3Rpb24oSlNDOjpTbG90Vmlz
aXRvciYpOworLy8gICAgdm9pZCB2aXNpdEpTRnVuY3Rpb24oSlNDOjpTbG90VmlzaXRvciYpOwor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgdmlzaXRKU0Z1bmN0aW9uKFZpc2l0
b3ImKTsKIAogcHJpdmF0ZToKICAgICBjbGFzcyBXZWFrT3duZXIgOiBwdWJsaWMgSlNDOjpXZWFr
SGFuZGxlT3duZXIgewotICAgICAgICBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpT
Qzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6U2xvdFZpc2l0b3Im
LCBjb25zdCBjaGFyKiopIG92ZXJyaWRlOworICAgICAgICBib29sIGlzUmVhY2hhYmxlRnJvbU9w
YXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6
QWJzdHJhY3RTbG90VmlzaXRvciYsIGNvbnN0IGNoYXIqKikgb3ZlcnJpZGU7CiAgICAgfTsKICAg
ICBXZWFrT3duZXIgbV93ZWFrT3duZXI7CiAgICAgSlNDOjpXZWFrPEpTQzo6SlNPYmplY3Q+IG1f
Y2FsbGJhY2s7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NhbnZhc1JlbmRl
cmluZ0NvbnRleHQyREN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRDdXN0b20uY3BwCShyZXZpc2lvbiAy
NzE0NDMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyREN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0LDcgKzI0LDcgQEAKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi1ib29sIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJET3duZXI6
OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFu
ZGxlLCB2b2lkKiwgSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNv
bikKK2Jvb2wgSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRPd25lcjo6aXNSZWFjaGFibGVGcm9t
T3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBKU0M6
OkFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCiB7CiAg
ICAgaWYgKFVOTElLRUxZKHJlYXNvbikpCiAgICAgICAgICpyZWFzb24gPSAiQ2FudmFzIGlzIG9w
YXF1ZSByb290IjsKQEAgLTM0LDkgKzM0LDE0IEBAIGJvb2wgSlNDYW52YXNSZW5kZXJpbmdDb250
ZXh0MkRPd25lcjo6aXMKICAgICByZXR1cm4gdmlzaXRvci5jb250YWluc09wYXF1ZVJvb3Qocm9v
dCk7CiB9CiAKLXZvaWQgSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnZpc2l0QWRkaXRpb25h
bENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3ZvaWQgSlNDYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3Im
IHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0NhbnZhc1JlbmRl
cmluZ0NvbnRleHQyRDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikK
IHsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qocm9vdCh3cmFwcGVkKCkuY2FudmFzKCkpKTsK
IH0KIAordGVtcGxhdGUgdm9pZCBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6dmlzaXRBZGRp
dGlvbmFsQ2hpbGRyZW4oSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lk
IEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6
OlNsb3RWaXNpdG9yJik7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9tRXZlbnRDdXN0b20uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9tRXZlbnRDdXN0b20uY3BwCShyZXZp
c2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0N1c3RvbUV2ZW50
Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIsMTAgKzQyLDE1IEBAIEpTQzo6SlNWYWx1
ZSBKU0N1c3RvbUV2ZW50OjpkZXRhaWwoSlNDOjoKICAgICB9KTsKIH0KIAotdm9pZCBKU0N1c3Rv
bUV2ZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9y
KQorLy92b2lkIEpTQ3VzdG9tRXZlbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xv
dFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0N1
c3RvbUV2ZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewog
ICAgIHdyYXBwZWQoKS5kZXRhaWwoKS52aXNpdCh2aXNpdG9yKTsKICAgICB3cmFwcGVkKCkuY2Fj
aGVkRGV0YWlsKCkudmlzaXQodmlzaXRvcik7CiB9CiAKK3RlbXBsYXRlIHZvaWQgSlNDdXN0b21F
dmVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJik7
Cit0ZW1wbGF0ZSB2b2lkIEpTQ3VzdG9tRXZlbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpT
Qzo6U2xvdFZpc2l0b3ImKTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CdWlsdGluQ29uc3RydWN0b3JCYXNlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJ1aWx0aW5Db25zdHJ1
Y3RvckJhc2UuY3BwCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0RPTUJ1aWx0aW5Db25zdHJ1Y3RvckJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
NSw3ICs0NSw4IEBAIHZvaWQgSlNET01CdWlsdGluQ29uc3RydWN0b3JCYXNlOjpjYWxsRnUKICAg
ICBKU0M6OmNhbGwoJmxleGljYWxHbG9iYWxPYmplY3QsICZmdW5jdGlvbiwgY2FsbERhdGEsICZ0
aGlzT2JqZWN0LCBhcmd1bWVudHMpOwogfQogCi12b2lkIEpTRE9NQnVpbHRpbkNvbnN0cnVjdG9y
QmFzZTo6dmlzaXRDaGlsZHJlbihKU0M6OkpTQ2VsbCogY2VsbCwgSlNDOjpTbG90VmlzaXRvciYg
dmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTRE9NQnVpbHRpbkNv
bnN0cnVjdG9yQmFzZTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDOjpKU0NlbGwqIGNlbGwsIFZpc2l0
b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0RPTUJ1aWx0
aW5Db25zdHJ1Y3RvckJhc2UqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRT
KHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC01Myw2ICs1NCw4IEBAIHZvaWQgSlNET01CdWlsdGlu
Q29uc3RydWN0b3JCYXNlOjp2aXNpdEMKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5t
X2luaXRpYWxpemVGdW5jdGlvbik7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU0RPTUJ1
aWx0aW5Db25zdHJ1Y3RvckJhc2UpOworCiBKU0M6Oklzb1N1YnNwYWNlKiBKU0RPTUJ1aWx0aW5D
b25zdHJ1Y3RvckJhc2U6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKIHsKICAgICByZXR1
cm4gJnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSktPmRvbUJ1aWx0
aW5Db25zdHJ1Y3RvclNwYWNlKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0RPTUJ1aWx0aW5Db25zdHJ1Y3RvckJhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0RPTUJ1aWx0aW5Db25zdHJ1Y3RvckJhc2UuaAkocmV2aXNpb24gMjcx
NDQzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CdWlsdGluQ29uc3RydWN0
b3JCYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDcgKzQyLDcgQEAgcHJvdGVjdGVkOgogICAg
IHsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQzo6SlNDZWxsKiwg
SlNDOjpTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBK
U0M6OkpTRnVuY3Rpb24qIGluaXRpYWxpemVGdW5jdGlvbigpOwogICAgIHZvaWQgc2V0SW5pdGlh
bGl6ZUZ1bmN0aW9uKEpTQzo6Vk0mLCBKU0M6OkpTRnVuY3Rpb24mKTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5jcHAJKHJldmlzaW9u
IDI3MTQ0MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjM1LDcgKzIzNSw4IEBAIFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqIEpTRE9NR2xvYmFsT2JqZWMKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotdm9pZCBK
U0RPTUdsb2JhbE9iamVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9y
JiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNET01HbG9iYWxP
YmplY3Q6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikK
IHsKICAgICBKU0RPTUdsb2JhbE9iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0RPTUdsb2Jh
bE9iamVjdCo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVj
dCwgaW5mbygpKTsKQEAgLTI1Nyw2ICsyNTgsOCBAQCB2b2lkIEpTRE9NR2xvYmFsT2JqZWN0Ojp2
aXNpdENoaWxkcmVuKEpTCiAgICAgdGhpc09iamVjdC0+bV9idWlsdGluSW50ZXJuYWxGdW5jdGlv
bnMudmlzaXQodmlzaXRvcik7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU0RPTUdsb2Jh
bE9iamVjdCk7CisKIHZvaWQgSlNET01HbG9iYWxPYmplY3Q6OnByb21pc2VSZWplY3Rpb25UcmFj
a2VyKEpTR2xvYmFsT2JqZWN0KiBqc0dsb2JhbE9iamVjdCwgSlNQcm9taXNlKiBwcm9taXNlLCBK
U1Byb21pc2VSZWplY3Rpb25PcGVyYXRpb24gb3BlcmF0aW9uKQogewogICAgIC8vIGh0dHBzOi8v
aHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3dlYmFwcGFwaXMuaHRtbCN0aGUtaG9zdHBy
b21pc2VyZWplY3Rpb250cmFja2VyLWltcGxlbWVudGF0aW9uCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0LmgJKHJldmlzaW9uIDI3MTQ0MykK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTY5LDcgKzY5LDcgQEAgcHVibGljOgogICAgIC8vIE1ha2UgYmluZGluZyBj
b2RlIGdlbmVyYXRpb24gZWFzaWVyLgogICAgIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QoKSB7IHJldHVybiB0aGlzOyB9CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpT
Qzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERS
RU47CiAKICAgICBET01XcmFwcGVyV29ybGQmIHdvcmxkKCkgeyByZXR1cm4gbV93b3JsZC5nZXQo
KTsgfQogICAgIGJvb2wgd29ybGRJc05vcm1hbCgpIGNvbnN0IHsgcmV0dXJuIG1fd29ybGRJc05v
cm1hbDsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01HdWFyZGVkT2Jq
ZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01HdWFy
ZGVkT2JqZWN0LmgJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTRE9NR3VhcmRlZE9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw4IEBA
IHB1YmxpYzoKIAogICAgIGJvb2wgaXNTdXNwZW5kZWQoKSBjb25zdCB7IHJldHVybiAhbV9ndWFy
ZGVkIHx8ICFjYW5JbnZva2VDYWxsYmFjaygpOyB9IC8vIFRoZSB3cmFwcGVyIHdvcmxkIGhhcyBn
b25lIGF3YXkgb3IgYWN0aXZlIERPTSBvYmplY3RzIGhhdmUgYmVlbiBzdXNwZW5kZWQuCiAKLSAg
ICB2b2lkIHZpc2l0QWdncmVnYXRlKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsgdmlzaXRv
ci5hcHBlbmQobV9ndWFyZGVkKTsgfQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cisg
ICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShWaXNpdG9yJiB2aXNpdG9yKSB7IHZpc2l0b3IuYXBwZW5k
KG1fZ3VhcmRlZCk7IH0KIAogICAgIEpTQzo6SlNWYWx1ZSBndWFyZGVkT2JqZWN0KCkgY29uc3Qg
eyByZXR1cm4gbV9ndWFyZGVkLmdldCgpOyB9CiAgICAgSlNET01HbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fZ2xvYmFsT2JqZWN0LmdldCgpOyB9CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVF1YWRDdXN0b20uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NUXVhZEN1c3RvbS5jcHAJKHJldmlz
aW9uIDI3MTQ0MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NUXVhZEN1c3Rv
bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDcgKzMzLDkgQEAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKLXZvaWQgSlNET01RdWFkOjp2aXNpdEFkZGl0aW9u
YWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vdm9pZCBKU0RPTVF1YWQ6OnZpc2l0
QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5h
bWUgVmlzaXRvcj4KK3ZvaWQgSlNET01RdWFkOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNp
dG9yJiB2aXNpdG9yKQogewogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChjb25zdF9jYXN0PERP
TVBvaW50Kj4oJndyYXBwZWQoKS5wMSgpKSk7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KGNv
bnN0X2Nhc3Q8RE9NUG9pbnQqPigmd3JhcHBlZCgpLnAyKCkpKTsKQEAgLTQxLDQgKzQzLDcgQEAg
dm9pZCBKU0RPTVF1YWQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKAogICAgIHZpc2l0b3IuYWRk
T3BhcXVlUm9vdChjb25zdF9jYXN0PERPTVBvaW50Kj4oJndyYXBwZWQoKS5wNCgpKSk7CiB9CiAK
LX0KK3RlbXBsYXRlIHZvaWQgSlNET01RdWFkOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihBYnN0
cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTRE9NUXVhZDo6dmlzaXRBZGRpdGlv
bmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dDdXN0b20uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93Q3VzdG9tLmNw
cAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01X
aW5kb3dDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTYsNyArMTE2LDkgQEAgSlNDX0RF
RklORV9DVVNUT01fR0VUVEVSKGpzRE9NV2luZG93SW5zdAogICAgIHJldHVybiBub25DYWNoaW5n
U3RhdGljRnVuY3Rpb25HZXR0ZXJJbXBsPGpzRE9NV2luZG93SW5zdGFuY2VGdW5jdGlvbl9wb3N0
TWVzc2FnZSwgMj4oZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUpOwogfQogCi12b2lkIEpTRE9N
V2luZG93Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKKy8v
dm9pZCBKU0RPTVdpbmRvdzo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZp
c2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0RPTVdpbmRvdzo6dmlz
aXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBpZiAoRnJhbWUq
IGZyYW1lID0gd3JhcHBlZCgpLmZyYW1lKCkpCiAgICAgICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9v
dChmcmFtZSk7CkBAIC0xMjksNiArMTMxLDkgQEAgdm9pZCBKU0RPTVdpbmRvdzo6dmlzaXRBZGRp
dGlvbmFsQ2hpbGRyZQogICAgIHdyYXBwZWQoKS52aXNpdEpTRXZlbnRMaXN0ZW5lcnModmlzaXRv
cik7CiB9CiAKK3RlbXBsYXRlIHZvaWQgSlNET01XaW5kb3c6OnZpc2l0QWRkaXRpb25hbENoaWxk
cmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNET01XaW5kb3c6OnZp
c2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CisKICNpZiBFTkFCTEUoVVNFUl9N
RVNTQUdFX0hBTkRMRVJTKQogSlNDX0RFRklORV9DVVNUT01fR0VUVEVSKGpzRE9NV2luZG93X3dl
YmtpdCwgKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1
ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkpCiB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0RlcHJlY2F0ZWRDU1NPTVZhbHVlQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RlcHJlY2F0ZWRDU1NPTVZhbHVlQ3VzdG9tLmNw
cAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNEZXBy
ZWNhdGVkQ1NTT01WYWx1ZUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDcgKzM1LDcg
QEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKLWJvb2wgSlNE
ZXByZWNhdGVkQ1NTT01WYWx1ZU93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6
OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIFNsb3RWaXNpdG9yJiB2aXNpdG9y
LCBjb25zdCBjaGFyKiogcmVhc29uKQorYm9vbCBKU0RlcHJlY2F0ZWRDU1NPTVZhbHVlT3duZXI6
OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFu
ZGxlLCB2b2lkKiwgQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJl
YXNvbikKIHsKICAgICBKU0RlcHJlY2F0ZWRDU1NPTVZhbHVlKiBqc0NTU1ZhbHVlID0ganNDYXN0
PEpTRGVwcmVjYXRlZENTU09NVmFsdWUqPihoYW5kbGUuc2xvdCgpLT5hc0NlbGwoKSk7CiAgICAg
aWYgKCFqc0NTU1ZhbHVlLT5oYXNDdXN0b21Qcm9wZXJ0aWVzKGpzQ1NTVmFsdWUtPnZtKCkpKQpJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNEb2N1bWVudEN1c3RvbS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNEb2N1bWVudEN1c3RvbS5j
cHAJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRG9j
dW1lbnRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MSwxMSArOTEsMTYgQEAgSlNWYWx1
ZSB0b0pTKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYgogICAgIHJldHVybiB0b0pTTmV3bHlD
cmVhdGVkKGxleGljYWxHbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdCwgUmVmPERvY3VtZW50Pihk
b2N1bWVudCkpOwogfQogCi12b2lkIEpTRG9jdW1lbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVu
KFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy92b2lkIEpTRG9jdW1lbnQ6OnZpc2l0QWRkaXRpb25h
bENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRv
cj4KK3ZvaWQgSlNEb2N1bWVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlz
aXRvcikKIHsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qoc3RhdGljX2Nhc3Q8U2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCo+KCZ3cmFwcGVkKCkpKTsKIH0KIAordGVtcGxhdGUgdm9pZCBKU0RvY3Vt
ZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1w
bGF0ZSB2b2lkIEpTRG9jdW1lbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9y
Jik7CisKIHZvaWQgSlNEb2N1bWVudDo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5h
bHl6ZXImIGFuYWx5emVyKQogewogICAgIEJhc2U6OmFuYWx5emVIZWFwKGNlbGwsIGFuYWx5emVy
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXJyb3JFdmVudEN1c3RvbS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFcnJvckV2ZW50
Q3VzdG9tLmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNFcnJvckV2ZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsOSArMjgsMTQg
QEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIEpTRXJyb3JFdmVudDo6dmlzaXRBZGRp
dGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vdm9pZCBKU0Vycm9y
RXZlbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3Ip
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0Vycm9yRXZlbnQ6OnZpc2l0QWRk
aXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgd3JhcHBlZCgpLm9yaWdp
bmFsRXJyb3IoKS52aXNpdCh2aXNpdG9yKTsKIH0KIAordGVtcGxhdGUgdm9pZCBKU0Vycm9yRXZl
bnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpOwor
dGVtcGxhdGUgdm9pZCBKU0Vycm9yRXZlbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6
U2xvdFZpc2l0b3ImKTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNFdmVudExpc3RlbmVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50TGlzdGVuZXIuY3BwCShyZXZpc2lvbiAyNzE0
NDMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50TGlzdGVuZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC03OCw3ICs3OCw4IEBAIEpTT2JqZWN0KiBKU0V2ZW50TGlzdGVuZXI6
OmluaXRpYWxpemVKU0YKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotdm9pZCBKU0V2ZW50TGlz
dGVuZXI6OnZpc2l0SlNGdW5jdGlvbihTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vdm9pZCBKU0V2
ZW50TGlzdGVuZXI6OnZpc2l0SlNGdW5jdGlvbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQg
SlNFdmVudExpc3RlbmVyOjp2aXNpdEpTRnVuY3Rpb24oQWJzdHJhY3RTbG90VmlzaXRvciYgdmlz
aXRvcikKIHsKICAgICAvLyBJZiBtX3dyYXBwZXIgaXMgbnVsbCwgd2UgYXJlIG5vdCBrZWVwaW5n
IG1fanNGdW5jdGlvbiBhbGl2ZS4KICAgICBpZiAoIW1fd3JhcHBlcikKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRMaXN0ZW5lci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRMaXN0ZW5lci5oCShyZXZpc2lvbiAyNzE0NDMp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50TGlzdGVuZXIuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNjIsNyArNjIsOCBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAgICAgdmlydHVh
bCBKU0M6OkpTT2JqZWN0KiBpbml0aWFsaXplSlNGdW5jdGlvbihTY3JpcHRFeGVjdXRpb25Db250
ZXh0JikgY29uc3Q7Ci0gICAgdm9pZCB2aXNpdEpTRnVuY3Rpb24oSlNDOjpTbG90VmlzaXRvciYp
IGZpbmFsOworLy8gICAgdm9pZCB2aXNpdEpTRnVuY3Rpb24oSlNDOjpTbG90VmlzaXRvciYpIGZp
bmFsOworICAgIHZvaWQgdmlzaXRKU0Z1bmN0aW9uKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYp
IGZpbmFsOwogCiBwcm90ZWN0ZWQ6CiAgICAgSlNFdmVudExpc3RlbmVyKEpTQzo6SlNPYmplY3Qq
IGZ1bmN0aW9uLCBKU0M6OkpTT2JqZWN0KiB3cmFwcGVyLCBib29sIGlzQXR0cmlidXRlLCBET01X
cmFwcGVyV29ybGQmKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRU
YXJnZXRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTRXZlbnRUYXJnZXRDdXN0b20uY3BwCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50VGFyZ2V0Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNzIsOSArNzIsMTQgQEAgc3RkOjp1bmlxdWVfcHRyPEpTRXZlbnRUYXJnZXRXcmFwcGVyPiBq
cwogICAgIHJldHVybiBudWxscHRyOwogfQogCi12b2lkIEpTRXZlbnRUYXJnZXQ6OnZpc2l0QWRk
aXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy92b2lkIEpTRXZlbnRUYXJn
ZXQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxh
dGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNFdmVudFRhcmdldDo6dmlzaXRBZGRpdGlvbmFs
Q2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB3cmFwcGVkKCkudmlzaXRKU0V2ZW50
TGlzdGVuZXJzKHZpc2l0b3IpOwogfQogCit0ZW1wbGF0ZSB2b2lkIEpTRXZlbnRUYXJnZXQ6OnZp
c2l0QWRkaXRpb25hbENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZv
aWQgSlNFdmVudFRhcmdldDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsK
KwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNGZXRjaEV2ZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0ZldGNoRXZlbnRDdXN0b20uY3BwCShyZXZpc2lvbiAyNzE0NDMpCisrKyBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0ZldGNoRXZlbnRDdXN0b20uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zMCwxMSArMzAsMTYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lk
IEpTRmV0Y2hFdmVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYg
dmlzaXRvcikKKy8vdm9pZCBKU0ZldGNoRXZlbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpT
Qzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9p
ZCBKU0ZldGNoRXZlbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3Ip
CiB7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KCZ3cmFwcGVkKCkucmVxdWVzdCgpKTsKIH0K
IAotfQordGVtcGxhdGUgdm9pZCBKU0ZldGNoRXZlbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVu
KEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU0ZldGNoRXZlbnQ6
OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImKTsKKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQogCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTSFRNTENhbnZhc0VsZW1lbnRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTSFRNTENhbnZhc0VsZW1lbnRDdXN0b20uY3BwCShyZXZpc2lvbiAy
NzE0NDMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxDYW52YXNFbGVtZW50
Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsOSArMzEsMTQgQEAKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi12b2lkIEpTSFRNTENhbnZhc0VsZW1lbnQ6OnZpc2l0QWRkaXRpb25hbENo
aWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3ZvaWQgSlNIVE1MQ2FudmFzRWxl
bWVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikK
K3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTSFRNTENhbnZhc0VsZW1lbnQ6OnZp
c2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgdmlzaXRvci5h
ZGRPcGFxdWVSb290KHN0YXRpY19jYXN0PENhbnZhc0Jhc2UqPigmd3JhcHBlZCgpKSk7CiB9CiAK
K3RlbXBsYXRlIHZvaWQgSlNIVE1MQ2FudmFzRWxlbWVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRy
ZW4oSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTSFRNTENhbnZh
c0VsZW1lbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImKTsKKwog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNIVE1MVGVtcGxhdGVFbGVtZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0hUTUxUZW1wbGF0ZUVsZW1lbnRDdXN0b20uY3BwCShyZXZpc2lv
biAyNzE0NDMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxUZW1wbGF0ZUVs
ZW1lbnRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNywxMCArMzcsMTUgQEAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKLXZvaWQgSlNIVE1MVGVtcGxh
dGVFbGVtZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNp
dG9yKQorLy92b2lkIEpTSFRNTFRlbXBsYXRlRWxlbWVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRy
ZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+
Cit2b2lkIEpTSFRNTFRlbXBsYXRlRWxlbWVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlz
aXRvciYgdmlzaXRvcikKIHsKICAgICBpZiAoYXV0byogY29udGVudCA9IHdyYXBwZWQoKS5jb250
ZW50SWZBdmFpbGFibGUoKSkKICAgICAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHJvb3QoY29u
dGVudCkpOwogfQogCit0ZW1wbGF0ZSB2b2lkIEpTSFRNTFRlbXBsYXRlRWxlbWVudDo6dmlzaXRB
ZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2
b2lkIEpTSFRNTFRlbXBsYXRlRWxlbWVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpT
bG90VmlzaXRvciYpOworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0hpc3RvcnlDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSGlzdG9yeUN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MTQ0
MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSGlzdG9yeUN1c3RvbS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQ0LDkgKzQ0LDE0IEBAIEpTVmFsdWUgSlNIaXN0b3J5OjpzdGF0ZShK
U0dsb2JhbE9iamVjdCYKICAgICB9KTsKIH0KIAotdm9pZCBKU0hpc3Rvcnk6OnZpc2l0QWRkaXRp
b25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy92b2lkIEpTSGlzdG9yeTo6dmlz
aXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBl
bmFtZSBWaXNpdG9yPgordm9pZCBKU0hpc3Rvcnk6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZp
c2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgd3JhcHBlZCgpLmNhY2hlZFN0YXRlRm9yR0MoKS52aXNp
dCh2aXNpdG9yKTsKIH0KIAordGVtcGxhdGUgdm9pZCBKU0hpc3Rvcnk6OnZpc2l0QWRkaXRpb25h
bENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNIaXN0b3J5
Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYpOworCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQkN1cnNvckN1
c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJD
dXJzb3JDdXN0b20uY3BwCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0lEQkN1cnNvckN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUwLDcgKzUw
LDkgQEAgSlNDOjpKU1ZhbHVlIEpTSURCQ3Vyc29yOjpwcmltYXJ5S2V5KEpTQwogICAgIH0pOwog
fQogCi12b2lkIEpTSURCQ3Vyc29yOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRv
ciYgdmlzaXRvcikKKy8vdm9pZCBKU0lEQkN1cnNvcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4o
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBK
U0lEQkN1cnNvcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsK
ICAgICBhdXRvJiBjdXJzb3IgPSB3cmFwcGVkKCk7CiAgICAgaWYgKGF1dG8qIHJlcXVlc3QgPSBj
dXJzb3IucmVxdWVzdCgpKQpAQCAtNTksNiArNjEsOSBAQCB2b2lkIEpTSURCQ3Vyc29yOjp2aXNp
dEFkZGl0aW9uYWxDaGlsZHJlCiAgICAgY3Vyc29yLnByaW1hcnlLZXlXcmFwcGVyKCkudmlzaXQo
dmlzaXRvcik7CiB9CiAKK3RlbXBsYXRlIHZvaWQgSlNJREJDdXJzb3I6OnZpc2l0QWRkaXRpb25h
bENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNJREJDdXJz
b3I6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CisKIEpTVmFsdWUgdG9K
U05ld2x5Q3JlYXRlZChKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNET01HbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgUmVmPElEQkN1cnNvcj4mJiBjdXJzb3IpCiB7CiAgICAgaWYgKGlzPElEQkN1
cnNvcldpdGhWYWx1ZT4oY3Vyc29yKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTSURCQ3Vyc29yV2l0aFZhbHVlQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0lEQkN1cnNvcldpdGhWYWx1ZUN1c3RvbS5jcHAJKHJldmlzaW9u
IDI3MTQ0MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCQ3Vyc29yV2l0aFZh
bHVlQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMsMTIgKzQzLDE3IEBAIEpTQzo6SlNW
YWx1ZSBKU0lEQkN1cnNvcldpdGhWYWx1ZTo6dmFsdWUKICAgICB9KTsKIH0KIAotdm9pZCBKU0lE
QkN1cnNvcldpdGhWYWx1ZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZp
c2l0b3IpCisvL3ZvaWQgSlNJREJDdXJzb3JXaXRoVmFsdWU6OnZpc2l0QWRkaXRpb25hbENoaWxk
cmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3Zv
aWQgSlNJREJDdXJzb3JXaXRoVmFsdWU6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3Im
IHZpc2l0b3IpCiB7CiAgICAgSlNJREJDdXJzb3I6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKHZp
c2l0b3IpOwogICAgIHdyYXBwZWQoKS52YWx1ZVdyYXBwZXIoKS52aXNpdCh2aXNpdG9yKTsKIH0K
IAordGVtcGxhdGUgdm9pZCBKU0lEQkN1cnNvcldpdGhWYWx1ZTo6dmlzaXRBZGRpdGlvbmFsQ2hp
bGRyZW4oQWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU0lEQkN1cnNvcldp
dGhWYWx1ZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKKwogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQkluZGV4Q3VzdG9tLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQkluZGV4Q3VzdG9tLmNw
cAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJJ
bmRleEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDExICszNCwxNiBAQAogbmFtZXNw
YWNlIFdlYkNvcmUgewogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAotdm9pZCBKU0lEQkluZGV4Ojp2
aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vdm9pZCBKU0lE
QkluZGV4Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3Rl
bXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTSURCSW5kZXg6OnZpc2l0QWRkaXRpb25h
bENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290
KHN0YXRpY19jYXN0PElEQkluZGV4Jj4od3JhcHBlZCgpKS5vYmplY3RTdG9yZUFzT3BhcXVlUm9v
dCgpKTsKIH0KIAordGVtcGxhdGUgdm9pZCBKU0lEQkluZGV4Ojp2aXNpdEFkZGl0aW9uYWxDaGls
ZHJlbihBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTSURCSW5kZXg6OnZp
c2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CisKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQpJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJPYmplY3RTdG9yZUN1c3RvbS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJPYmplY3RTdG9yZUN1c3RvbS5j
cHAJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURC
T2JqZWN0U3RvcmVDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiwxMSArMzYsMTYgQEAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKLXZvaWQgSlNJREJP
YmplY3RTdG9yZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3Ip
CisvL3ZvaWQgSlNJREJPYmplY3RTdG9yZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZp
c2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0lEQk9i
amVjdFN0b3JlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewog
ICAgIHN0YXRpY19jYXN0PElEQk9iamVjdFN0b3JlJj4od3JhcHBlZCgpKS52aXNpdFJlZmVyZW5j
ZWRJbmRleGVzKHZpc2l0b3IpOwogfQogCi19Cit0ZW1wbGF0ZSB2b2lkIEpTSURCT2JqZWN0U3Rv
cmU6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBs
YXRlIHZvaWQgSlNJREJPYmplY3RTdG9yZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZp
c2l0b3ImKTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCUmVxdWVzdEN1c3RvbS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJSZXF1ZXN0Q3VzdG9tLmNwcAkocmV2
aXNpb24gMjcxNDQzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJSZXF1ZXN0
Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODksMTIgKzg5LDE4IEBAIEpTQzo6SlNWYWx1
ZSBKU0lEQlJlcXVlc3Q6OnJlc3VsdChKU0M6OkoKICAgICB9KTsKIH0KIAotdm9pZCBKU0lEQlJl
cXVlc3Q6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy92
b2lkIEpTSURCUmVxdWVzdDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZp
c2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0lEQlJlcXVlc3Q6OnZp
c2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0byYgcmVx
dWVzdCA9IHdyYXBwZWQoKTsKICAgICByZXF1ZXN0LnJlc3VsdFdyYXBwZXIoKS52aXNpdCh2aXNp
dG9yKTsKICAgICByZXF1ZXN0LmN1cnNvcldyYXBwZXIoKS52aXNpdCh2aXNpdG9yKTsKIH0KIAot
fQordGVtcGxhdGUgdm9pZCBKU0lEQlJlcXVlc3Q6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEFi
c3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNJREJSZXF1ZXN0Ojp2aXNpdEFk
ZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYpOworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CisKICNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTSURCVHJhbnNhY3Rpb25DdXN0b20uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCVHJhbnNhY3Rpb25DdXN0b20uY3BwCShy
ZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQlRyYW5z
YWN0aW9uQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsMTEgKzM0LDE2IEBACiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCi12b2lkIEpTSURCVHJhbnNh
Y3Rpb246OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy92
b2lkIEpTSURCVHJhbnNhY3Rpb246OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9y
JiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNJREJUcmFuc2Fj
dGlvbjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBz
dGF0aWNfY2FzdDxJREJUcmFuc2FjdGlvbiY+KHdyYXBwZWQoKSkudmlzaXRSZWZlcmVuY2VkT2Jq
ZWN0U3RvcmVzKHZpc2l0b3IpOwogfQogCi19Cit0ZW1wbGF0ZSB2b2lkIEpTSURCVHJhbnNhY3Rp
b246OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBs
YXRlIHZvaWQgSlNJREJUcmFuc2FjdGlvbjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZp
c2l0b3ImKTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW50ZXJzZWN0aW9uT2JzZXJ2ZXJDdXN0b20uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW50ZXJzZWN0aW9uT2Jz
ZXJ2ZXJDdXN0b20uY3BwCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0ludGVyc2VjdGlvbk9ic2VydmVyQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzAsMTAgKzMwLDE1IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBKU0ludGVy
c2VjdGlvbk9ic2VydmVyOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9y
JiB2aXNpdG9yKQorLy92b2lkIEpTSW50ZXJzZWN0aW9uT2JzZXJ2ZXI6OnZpc2l0QWRkaXRpb25h
bENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPgordm9pZCBKU0ludGVyc2VjdGlvbk9ic2VydmVyOjp2aXNpdEFkZGl0aW9uYWxDaGls
ZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGlmIChhdXRvKiBjYWxsYmFjayA9IHdyYXBw
ZWQoKS5jYWxsYmFja0NvbmN1cnJlbnRseSgpKQogICAgICAgICBjYWxsYmFjay0+dmlzaXRKU0Z1
bmN0aW9uKHZpc2l0b3IpOwogfQogCi19Cit0ZW1wbGF0ZSB2b2lkIEpTSW50ZXJzZWN0aW9uT2Jz
ZXJ2ZXI6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYp
OwordGVtcGxhdGUgdm9pZCBKU0ludGVyc2VjdGlvbk9ic2VydmVyOjp2aXNpdEFkZGl0aW9uYWxD
aGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJik7CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW50ZXJzZWN0aW9uT2JzZXJ2ZXJFbnRy
eUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJ
bnRlcnNlY3Rpb25PYnNlcnZlckVudHJ5Q3VzdG9tLmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJbnRlcnNlY3Rpb25PYnNlcnZlckVudHJ5Q3Vz
dG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAsOSBAQAogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLXZvaWQgSlNJbnRlcnNlY3Rpb25PYnNlcnZlckVudHJ5Ojp2aXNpdEFkZGl0aW9u
YWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy92b2lkIEpTSW50ZXJzZWN0
aW9uT2JzZXJ2ZXJFbnRyeTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRv
ciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTSW50ZXJzZWN0
aW9uT2JzZXJ2ZXJFbnRyeTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRv
cikKIHsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qocm9vdCh3cmFwcGVkKCkudGFyZ2V0KCkp
KTsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qod3JhcHBlZCgpLmJvdW5kaW5nQ2xpZW50UmVj
dCgpKTsKQEAgLTM4LDQgKzQwLDcgQEAgdm9pZCBKU0ludGVyc2VjdGlvbk9ic2VydmVyRW50cnk6
OnZpc2l0QQogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdCh3cmFwcGVkKCkucm9vdEJvdW5kcygp
KTsKIH0KIAotfQordGVtcGxhdGUgdm9pZCBKU0ludGVyc2VjdGlvbk9ic2VydmVyRW50cnk6OnZp
c2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxh
dGUgdm9pZCBKU0ludGVyc2VjdGlvbk9ic2VydmVyRW50cnk6OnZpc2l0QWRkaXRpb25hbENoaWxk
cmVuKEpTQzo6U2xvdFZpc2l0b3ImKTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDog
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNZXNzYWdlQ2hhbm5lbEN1c3RvbS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNZXNzYWdlQ2hhbm5lbEN1
c3RvbS5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTTWVzc2FnZUNoYW5uZWxDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3ICszMyw5
IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBKU01lc3NhZ2VDaGFubmVsOjp2aXNp
dEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy92b2lkIEpT
TWVzc2FnZUNoYW5uZWw6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3Im
IHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU01lc3NhZ2VDaGFu
bmVsOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGlm
IChNZXNzYWdlUG9ydCogcG9ydCA9IHdyYXBwZWQoKS5wb3J0MSgpKQogICAgICAgICB2aXNpdG9y
LmFkZE9wYXF1ZVJvb3QocG9ydCk7CkBAIC00Miw2ICs0NCw5IEBAIHZvaWQgSlNNZXNzYWdlQ2hh
bm5lbDo6dmlzaXRBZGRpdGlvbmFsQ2gKICAgICAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHBv
cnQpOwogfQogCit0ZW1wbGF0ZSB2b2lkIEpTTWVzc2FnZUNoYW5uZWw6OnZpc2l0QWRkaXRpb25h
bENoaWxkcmVuKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU01l
c3NhZ2VDaGFubmVsOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJik7
CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShDSEFOTkVMX01F
U1NBR0lORykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWVzc2FnZUV2ZW50
Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01l
c3NhZ2VFdmVudEN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTTWVzc2FnZUV2ZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NzAsNyArNzAsOSBAQCBKU0M6OkpTVmFsdWUgSlNNZXNzYWdlRXZlbnQ6OmRhdGEoSlNDOjpKCiAg
ICAgfSk7CiB9CiAKLXZvaWQgSlNNZXNzYWdlRXZlbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVu
KEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3ZvaWQgSlNNZXNzYWdlRXZlbnQ6OnZpc2l0
QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0
eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU01lc3NhZ2VFdmVudDo6dmlzaXRBZGRpdGlvbmFsQ2hp
bGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBXVEY6OnN3aXRjaE9uKHdyYXBwZWQoKS5k
YXRhKCksIFsmdmlzaXRvcl0gKGNvbnN0IEpTVmFsdWVJbldyYXBwZWRPYmplY3QmIGRhdGEpIHsK
ICAgICAgICAgZGF0YS52aXNpdCh2aXNpdG9yKTsKQEAgLTg0LDQgKzg2LDcgQEAgdm9pZCBKU01l
c3NhZ2VFdmVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbAogICAgIHdyYXBwZWQoKS5jYWNoZWRQb3J0
cygpLnZpc2l0KHZpc2l0b3IpOwogfQogCit0ZW1wbGF0ZSB2b2lkIEpTTWVzc2FnZUV2ZW50Ojp2
aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBs
YXRlIHZvaWQgSlNNZXNzYWdlRXZlbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xv
dFZpc2l0b3ImKTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNNZXNzYWdlUG9ydEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNZXNzYWdlUG9ydEN1c3RvbS5jcHAJKHJldmlzaW9u
IDI3MTQ0MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWVzc2FnZVBvcnRDdXN0
b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwxMSArMzEsMTYgQEAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKLXZvaWQgSlNNZXNzYWdlUG9ydDo6dmlzaXRB
ZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3ZvaWQgSlNNZXNzYWdl
UG9ydDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1w
bGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU01lc3NhZ2VQb3J0Ojp2aXNpdEFkZGl0aW9u
YWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIC8vIElmIHdlIGhhdmUgYSBsb2Nh
bGx5IGVudGFuZ2xlZCBwb3J0LCB3ZSBjYW4gZGlyZWN0bHkgbWFyayBpdCBhcyByZWFjaGFibGUu
IFBvcnRzIHRoYXQgYXJlIHJlbW90ZWx5IGVudGFuZ2xlZCBhcmUgbWFya2VkIGluLXVzZSBieSBt
YXJrQWN0aXZlT2JqZWN0c0ZvckNvbnRleHQoKS4KICAgICBpZiAoTWVzc2FnZVBvcnQqIHBvcnQg
PSB3cmFwcGVkKCkubG9jYWxseUVudGFuZ2xlZFBvcnQoKSkKICAgICAgICAgdmlzaXRvci5hZGRP
cGFxdWVSb290KHBvcnQpOwogfQogCit0ZW1wbGF0ZSB2b2lkIEpTTWVzc2FnZVBvcnQ6OnZpc2l0
QWRkaXRpb25hbENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQg
SlNNZXNzYWdlUG9ydDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKKwog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNNdXRhdGlvbk9ic2VydmVyQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU011dGF0aW9uT2JzZXJ2ZXJDdXN0b20uY3BwCShyZXZpc2lvbiAyNzE0
NDMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU011dGF0aW9uT2JzZXJ2ZXJDdXN0
b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSwxMiArMzksMTcgQEAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKLXZvaWQgSlNNdXRhdGlvbk9ic2VydmVyOjp2
aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy92b2lk
IEpTTXV0YXRpb25PYnNlcnZlcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90Vmlz
aXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTTXV0YXRp
b25PYnNlcnZlcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsK
ICAgICB3cmFwcGVkKCkuY2FsbGJhY2soKS52aXNpdEpTRnVuY3Rpb24odmlzaXRvcik7CiB9CiAK
LWJvb2wgSlNNdXRhdGlvbk9ic2VydmVyT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3Rz
KEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgU2xvdFZpc2l0b3ImIHZp
c2l0b3IsIGNvbnN0IGNoYXIqKnJlYXNvbikKK3RlbXBsYXRlIHZvaWQgSlNNdXRhdGlvbk9ic2Vy
dmVyOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKTsK
K3RlbXBsYXRlIHZvaWQgSlNNdXRhdGlvbk9ic2VydmVyOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJl
bihKU0M6OlNsb3RWaXNpdG9yJik7CisKK2Jvb2wgSlNNdXRhdGlvbk9ic2VydmVyT3duZXI6Omlz
UmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxl
LCB2b2lkKiwgQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqcmVhc29u
KQogewogICAgIGZvciAoYXV0byogbm9kZSA6IGpzQ2FzdDxKU011dGF0aW9uT2JzZXJ2ZXIqPiho
YW5kbGUuc2xvdCgpLT5hc0NlbGwoKSktPndyYXBwZWQoKS5vYnNlcnZlZE5vZGVzKCkpIHsKICAg
ICAgICAgaWYgKHZpc2l0b3IuY29udGFpbnNPcGFxdWVSb290KHJvb3Qobm9kZSkpKSB7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU011dGF0aW9uUmVjb3JkQ3VzdG9tLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU011dGF0aW9uUmVjb3Jk
Q3VzdG9tLmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNNdXRhdGlvblJlY29yZEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDkgKzMw
LDE0IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBKU011dGF0aW9uUmVjb3JkOjp2
aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy92b2lk
IEpTTXV0YXRpb25SZWNvcmQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0
b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU011dGF0aW9u
UmVjb3JkOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAg
IHdyYXBwZWQoKS52aXNpdE5vZGVzQ29uY3VycmVudGx5KHZpc2l0b3IpOwogfQotICAgIAorCit0
ZW1wbGF0ZSB2b2lkIEpTTXV0YXRpb25SZWNvcmQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpT
Qzo6QWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU011dGF0aW9uUmVjb3Jk
Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJik7CisKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTmF2aWdh
dG9yQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U05hdmlnYXRvckN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTTmF2aWdhdG9yQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIs
MTEgKzMyLDE2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBKU05hdmlnYXRvcjo6
dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vdm9p
ZCBKU05hdmlnYXRvcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYg
dmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTTmF2aWdhdG9yOjp2
aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHZpc2l0b3Iu
YWRkT3BhcXVlUm9vdChzdGF0aWNfY2FzdDxOYXZpZ2F0b3JCYXNlKj4oJndyYXBwZWQoKSkpOwog
fQogCit0ZW1wbGF0ZSB2b2lkIEpTTmF2aWdhdG9yOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihK
U0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNOYXZpZ2F0b3I6OnZp
c2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImKTsKKwogI2lmIEVOQUJMRShN
RURJQV9TVFJFQU0pCiBKU0M6OkpTVmFsdWUgSlNOYXZpZ2F0b3I6OmdldFVzZXJNZWRpYShKU0M6
OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OkNhbGxGcmFtZSYgY2Fs
bEZyYW1lKQogewpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlQ3VzdG9t
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVDdXN0
b20uY3BwCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U05vZGVDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NCw3ICs3NCw4IEBAIHVzaW5nIG5h
bWVzcGFjZSBKU0M7CiAKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKLXN0YXRpYyBpbmxp
bmUgYm9vbCBpc1JlYWNoYWJsZUZyb21ET00oTm9kZSogbm9kZSwgU2xvdFZpc2l0b3ImIHZpc2l0
b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCisvL3N0YXRpYyBpbmxpbmUgYm9vbCBpc1JlYWNoYWJs
ZUZyb21ET00oTm9kZSogbm9kZSwgU2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiBy
ZWFzb24pCitzdGF0aWMgaW5saW5lIGJvb2wgaXNSZWFjaGFibGVGcm9tRE9NKE5vZGUqIG5vZGUs
IEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCiB7CiAg
ICAgaWYgKCFub2RlLT5pc0Nvbm5lY3RlZCgpKSB7CiAgICAgICAgIGlmIChpczxFbGVtZW50Pigq
bm9kZSkpIHsKQEAgLTEyMyw3ICsxMjQsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaXNSZWFjaGFi
bGVGcm9tRE9NKE5vCiAgICAgcmV0dXJuIHZpc2l0b3IuY29udGFpbnNPcGFxdWVSb290KHJvb3Qo
bm9kZSkpOwogfQogCi1ib29sIEpTTm9kZU93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290
cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIFNsb3RWaXNpdG9yJiB2
aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQorYm9vbCBKU05vZGVPd25lcjo6aXNSZWFjaGFi
bGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQq
LCBBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQogewog
ICAgIEpTTm9kZSoganNOb2RlID0ganNDYXN0PEpTTm9kZSo+KGhhbmRsZS5zbG90KCktPmFzQ2Vs
bCgpKTsKICAgICByZXR1cm4gaXNSZWFjaGFibGVGcm9tRE9NKCZqc05vZGUtPndyYXBwZWQoKSwg
dmlzaXRvciwgcmVhc29uKTsKQEAgLTEzNiwxMSArMTM3LDE2IEBAIEpTU2NvcGUqIEpTTm9kZTo6
cHVzaEV2ZW50SGFuZGxlclNjb3BlKEoKICAgICByZXR1cm4gbm9kZTsKIH0KIAotdm9pZCBKU05v
ZGU6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy92b2lk
IEpTTm9kZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0
ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU05vZGU6OnZpc2l0QWRkaXRpb25hbENo
aWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHJv
b3Qod3JhcHBlZCgpKSk7CiB9CiAKK3RlbXBsYXRlIHZvaWQgSlNOb2RlOjp2aXNpdEFkZGl0aW9u
YWxDaGlsZHJlbihBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTTm9kZTo6
dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKKwogc3RhdGljIEFMV0FZU19J
TkxJTkUgSlNWYWx1ZSBjcmVhdGVXcmFwcGVySW5saW5lKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWY8Tm9kZT4m
JiBub2RlKQogewogICAgIEFTU0VSVCghZ2V0Q2FjaGVkV3JhcHBlcihnbG9iYWxPYmplY3QtPndv
cmxkKCksIG5vZGUpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUl0
ZXJhdG9yQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU05vZGVJdGVyYXRvckN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUl0ZXJhdG9yQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjUsMTAgKzI1LDE1IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBKU05v
ZGVJdGVyYXRvcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlz
aXRvcikKKy8vdm9pZCBKU05vZGVJdGVyYXRvcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlND
OjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lk
IEpTTm9kZUl0ZXJhdG9yOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9y
KQogewogICAgIGlmIChOb2RlRmlsdGVyKiBmaWx0ZXIgPSB3cmFwcGVkKCkuZmlsdGVyKCkpCiAg
ICAgICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChmaWx0ZXIpOwogfQogCi19Cit0ZW1wbGF0ZSB2
b2lkIEpTTm9kZUl0ZXJhdG9yOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OkFic3RyYWN0
U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNOb2RlSXRlcmF0b3I6OnZpc2l0QWRkaXRp
b25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImKTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlTGlzdEN1c3RvbS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlTGlzdEN1c3Rv
bS5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
Tm9kZUxpc3RDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw3ICszNyw3IEBACiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCi1ib29sIEpTTm9kZUxpc3RP
d25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3du
PiBoYW5kbGUsIHZvaWQqLCBTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNv
bikKK2Jvb2wgSlNOb2RlTGlzdE93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6
OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIEFic3RyYWN0U2xvdFZpc2l0b3Im
IHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCiB7CiAgICAgSlNOb2RlTGlzdCoganNOb2Rl
TGlzdCA9IGpzQ2FzdDxKU05vZGVMaXN0Kj4oaGFuZGxlLnNsb3QoKS0+YXNDZWxsKCkpOwogICAg
IGlmICghanNOb2RlTGlzdC0+aGFzQ3VzdG9tUHJvcGVydGllcyhqc05vZGVMaXN0LT52bSgpKSkK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTT2Zmc2NyZWVuQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJEQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU09mZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyREN1c3RvbS5jcHAJKHJl
dmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTT2Zmc2NyZWVu
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEs
NyArMzEsNyBAQCBpbmxpbmUgdm9pZCogcm9vdChPZmZzY3JlZW5DYW52YXMqIGNhbnZhCiAgICAg
cmV0dXJuIGNhbnZhczsKIH0KIAotYm9vbCBKU09mZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyRE93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVu
a25vd24+IGhhbmRsZSwgdm9pZCosIFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiog
cmVhc29uKQorYm9vbCBKU09mZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRE93bmVyOjpp
c1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRs
ZSwgdm9pZCosIEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFz
b24pCiB7CiAgICAgaWYgKFVOTElLRUxZKHJlYXNvbikpCiAgICAgICAgICpyZWFzb24gPSAiQ2Fu
dmFzIGlzIG9wYXF1ZSByb290IjsKQEAgLTQxLDExICs0MSwxNiBAQCBib29sIEpTT2Zmc2NyZWVu
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJECiAgICAgcmV0dXJuIHZpc2l0b3IuY29udGFpbnNPcGFx
dWVSb290KHJvb3QpOwogfQogCi12b2lkIEpTT2Zmc2NyZWVuQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vdm9p
ZCBKU09mZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6dmlzaXRBZGRpdGlvbmFsQ2hp
bGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgor
dm9pZCBKU09mZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6dmlzaXRBZGRpdGlvbmFs
Q2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qo
cm9vdCgmd3JhcHBlZCgpLmNhbnZhcygpKSk7CiB9CiAKK3RlbXBsYXRlIHZvaWQgSlNPZmZzY3Jl
ZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEFic3Ry
YWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNPZmZzY3JlZW5DYW52YXNSZW5kZXJp
bmdDb250ZXh0MkQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CisKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU1BhaW50UmVuZGVyaW5nQ29udGV4dDJEQ3VzdG9tLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1BhaW50UmVuZGVyaW5nQ29udGV4dDJEQ3Vz
dG9tLmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNQYWludFJlbmRlcmluZ0NvbnRleHQyREN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2
LDcgKzM2LDcgQEAgaW5saW5lIHZvaWQqIHJvb3QoQ3VzdG9tUGFpbnRDYW52YXMqIGNhbgogICAg
IHJldHVybiBjYW52YXM7CiB9CiAKLWJvb2wgSlNQYWludFJlbmRlcmluZ0NvbnRleHQyRE93bmVy
Ojppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhh
bmRsZSwgdm9pZCosIFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQor
Ym9vbCBKU1BhaW50UmVuZGVyaW5nQ29udGV4dDJET3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1
ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgQWJzdHJhY3RT
bG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikKIHsKICAgICBpZiAoVU5M
SUtFTFkocmVhc29uKSkKICAgICAgICAgKnJlYXNvbiA9ICJDYW52YXMgaXMgb3BhcXVlIHJvb3Qi
OwpAQCAtNDYsMTEgKzQ2LDE2IEBAIGJvb2wgSlNQYWludFJlbmRlcmluZ0NvbnRleHQyRE93bmVy
Ojppc1IKICAgICByZXR1cm4gdmlzaXRvci5jb250YWluc09wYXF1ZVJvb3Qocm9vdCk7CiB9CiAK
LXZvaWQgSlNQYWludFJlbmRlcmluZ0NvbnRleHQyRDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4o
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3ZvaWQgSlNQYWludFJlbmRlcmluZ0NvbnRleHQyRDo6
dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0
eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1BhaW50UmVuZGVyaW5nQ29udGV4dDJEOjp2aXNpdEFk
ZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHZpc2l0b3IuYWRkT3Bh
cXVlUm9vdChyb290KCZ3cmFwcGVkKCkuY2FudmFzKCkpKTsKIH0KIAordGVtcGxhdGUgdm9pZCBK
U1BhaW50UmVuZGVyaW5nQ29udGV4dDJEOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihBYnN0cmFj
dFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTUGFpbnRSZW5kZXJpbmdDb250ZXh0MkQ6
OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CisKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKICNlbmRpZgogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1Bh
aW50V29ya2xldEdsb2JhbFNjb3BlQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU1BhaW50V29ya2xldEdsb2JhbFNjb3BlQ3VzdG9tLmNwcAkocmV2
aXNpb24gMjcxNDQzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNQYWludFdvcmts
ZXRHbG9iYWxTY29wZUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDkgQEAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKLXZvaWQgSlNQYWlu
dFdvcmtsZXRHbG9iYWxTY29wZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90Vmlz
aXRvciYgdmlzaXRvcikKKy8vdm9pZCBKU1BhaW50V29ya2xldEdsb2JhbFNjb3BlOjp2aXNpdEFk
ZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlw
ZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNQYWludFdvcmtsZXRHbG9iYWxTY29wZTo6dmlzaXRBZGRp
dGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBhdXRvIGxvY2tlciA9IGhv
bGRMb2NrKHdyYXBwZWQoKS5wYWludERlZmluaXRpb25Mb2NrKCkpOwogICAgIGZvciAoYXV0byYg
cmVnaXN0ZXJlZCA6IHdyYXBwZWQoKS5wYWludERlZmluaXRpb25NYXAoKS52YWx1ZXMoKSkgewpA
QCAtNDAsNSArNDIsOSBAQCB2b2lkIEpTUGFpbnRXb3JrbGV0R2xvYmFsU2NvcGU6OnZpc2l0QWRk
CiAgICAgfQogfQogCi19Cit0ZW1wbGF0ZSB2b2lkIEpTUGFpbnRXb3JrbGV0R2xvYmFsU2NvcGU6
OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVt
cGxhdGUgdm9pZCBKU1BhaW50V29ya2xldEdsb2JhbFNjb3BlOjp2aXNpdEFkZGl0aW9uYWxDaGls
ZHJlbihKU0M6OlNsb3RWaXNpdG9yJik7CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwogI2Vu
ZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1BheW1lbnRNZXRob2RDaGFu
Z2VFdmVudEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNQYXltZW50TWV0aG9kQ2hhbmdlRXZlbnRDdXN0b20uY3BwCShyZXZpc2lvbiAyNzE0NDMp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1BheW1lbnRNZXRob2RDaGFuZ2VFdmVu
dEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDcgKzQxLDkgQEAgSlNDOjpKU1ZhbHVl
IEpTUGF5bWVudE1ldGhvZENoYW5nZUV2ZW50OgogICAgIH0pOwogfQogCi12b2lkIEpTUGF5bWVu
dE1ldGhvZENoYW5nZUV2ZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNp
dG9yJiB2aXNpdG9yKQorLy92b2lkIEpTUGF5bWVudE1ldGhvZENoYW5nZUV2ZW50Ojp2aXNpdEFk
ZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlw
ZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNQYXltZW50TWV0aG9kQ2hhbmdlRXZlbnQ6OnZpc2l0QWRk
aXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgV1RGOjpzd2l0Y2hPbih3
cmFwcGVkKCkubWV0aG9kRGV0YWlscygpLCBbJnZpc2l0b3JdKGNvbnN0IEpTVmFsdWVJbldyYXBw
ZWRPYmplY3QmIG1ldGhvZERldGFpbHMpIHsKICAgICAgICAgbWV0aG9kRGV0YWlscy52aXNpdCh2
aXNpdG9yKTsKQEAgLTUxLDYgKzUzLDkgQEAgdm9pZCBKU1BheW1lbnRNZXRob2RDaGFuZ2VFdmVu
dDo6dmlzaXRBZAogICAgIHdyYXBwZWQoKS5jYWNoZWRNZXRob2REZXRhaWxzKCkudmlzaXQodmlz
aXRvcik7CiB9CiAKK3RlbXBsYXRlIHZvaWQgSlNQYXltZW50TWV0aG9kQ2hhbmdlRXZlbnQ6OnZp
c2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxh
dGUgdm9pZCBKU1BheW1lbnRNZXRob2RDaGFuZ2VFdmVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRy
ZW4oSlNDOjpTbG90VmlzaXRvciYpOworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRp
ZiAvLyBFTkFCTEUoUEFZTUVOVF9SRVFVRVNUKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNQYXltZW50UmVzcG9uc2VDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTUGF5bWVudFJlc3BvbnNlQ3VzdG9tLmNwcAkocmV2aXNpb24g
MjcxNDQzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNQYXltZW50UmVzcG9uc2VD
dXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNywxMSArMzcsMTYgQEAgSlNDOjpKU1ZhbHVl
IEpTUGF5bWVudFJlc3BvbnNlOjpkZXRhaWxzKAogICAgIH0pOwogfQogCi12b2lkIEpTUGF5bWVu
dFJlc3BvbnNlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNp
dG9yKQorLy92b2lkIEpTUGF5bWVudFJlc3BvbnNlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihK
U0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3Zv
aWQgSlNQYXltZW50UmVzcG9uc2U6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZp
c2l0b3IpCiB7CiAgICAgd3JhcHBlZCgpLmNhY2hlZERldGFpbHMoKS52aXNpdCh2aXNpdG9yKTsK
IH0KIAordGVtcGxhdGUgdm9pZCBKU1BheW1lbnRSZXNwb25zZTo6dmlzaXRBZGRpdGlvbmFsQ2hp
bGRyZW4oSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTUGF5bWVu
dFJlc3BvbnNlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJik7CisK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShQQVlNRU5UX1JFUVVF
U1QpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1BlcmZvcm1hbmNlT2JzZXJ2
ZXJDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
UGVyZm9ybWFuY2VPYnNlcnZlckN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUGVyZm9ybWFuY2VPYnNlcnZlckN1c3RvbS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTMxLDEyICszMSwxNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
LXZvaWQgSlNQZXJmb3JtYW5jZU9ic2VydmVyOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6
OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy92b2lkIEpTUGVyZm9ybWFuY2VPYnNlcnZlcjo6dmlz
aXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRl
PHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTUGVyZm9ybWFuY2VPYnNlcnZlcjo6dmlzaXRBZGRp
dGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB3cmFwcGVkKCkuY2FsbGJh
Y2soKS52aXNpdEpTRnVuY3Rpb24odmlzaXRvcik7CiB9CiAKLWJvb2wgSlNQZXJmb3JtYW5jZU9i
c2VydmVyT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6
VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgSlNDOjpTbG90VmlzaXRvciYsIGNvbnN0IGNoYXIqKiBy
ZWFzb24pCit0ZW1wbGF0ZSB2b2lkIEpTUGVyZm9ybWFuY2VPYnNlcnZlcjo6dmlzaXRBZGRpdGlv
bmFsQ2hpbGRyZW4oSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpT
UGVyZm9ybWFuY2VPYnNlcnZlcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90Vmlz
aXRvciYpOworCitib29sIEpTUGVyZm9ybWFuY2VPYnNlcnZlck93bmVyOjppc1JlYWNoYWJsZUZy
b21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIEpT
Qzo6QWJzdHJhY3RTbG90VmlzaXRvciYsIGNvbnN0IGNoYXIqKiByZWFzb24pCiB7CiAgICAgaWYg
KFVOTElLRUxZKHJlYXNvbikpCiAgICAgICAgICpyZWFzb24gPSAiUmVnaXN0ZXJlZCBQZXJmb3Jt
YW5jZU9ic2VydmVyIGNhbGxiYWNrIjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTUG9wU3RhdGVFdmVudEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNQb3BTdGF0ZUV2ZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gMjcxNDQzKQor
KysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNQb3BTdGF0ZUV2ZW50Q3VzdG9tLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtOTAsOSArOTAsMTQgQEAgSlNWYWx1ZSBKU1BvcFN0YXRlRXZlbnQ6
OnN0YXRlKEpTR2xvYmFsTwogICAgIHJldHVybiBjYWNoZVN0YXRlKHJlc3VsdCk7CiB9CiAKLXZv
aWQgSlNQb3BTdGF0ZUV2ZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNp
dG9yJiB2aXNpdG9yKQorLy92b2lkIEpTUG9wU3RhdGVFdmVudDo6dmlzaXRBZGRpdGlvbmFsQ2hp
bGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0
b3I+Cit2b2lkIEpTUG9wU3RhdGVFdmVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRv
ciYgdmlzaXRvcikKIHsKICAgICB3cmFwcGVkKCkuc3RhdGUoKS52aXNpdCh2aXNpdG9yKTsKIH0K
IAordGVtcGxhdGUgdm9pZCBKU1BvcFN0YXRlRXZlbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVu
KEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU1BvcFN0YXRlRXZl
bnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImKTsKKwogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNQcm9t
aXNlUmVqZWN0aW9uRXZlbnRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTUHJvbWlzZVJlamVjdGlvbkV2ZW50Q3VzdG9tLmNwcAkocmV2aXNpb24g
MjcxNDQzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNQcm9taXNlUmVqZWN0aW9u
RXZlbnRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw5ICszMiwxNCBAQAogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgSlNQcm9taXNlUmVqZWN0aW9uRXZlbnQ6OnZpc2l0QWRk
aXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3ZvaWQgSlNQcm9t
aXNlUmVqZWN0aW9uRXZlbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0
b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1Byb21pc2VS
ZWplY3Rpb25FdmVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikK
IHsKICAgICB3cmFwcGVkKCkucmVhc29uKCkudmlzaXQodmlzaXRvcik7CiB9CiAKK3RlbXBsYXRl
IHZvaWQgSlNQcm9taXNlUmVqZWN0aW9uRXZlbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpT
Qzo6QWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU1Byb21pc2VSZWplY3Rp
b25FdmVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYpOworCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U1Jlc2l6ZU9ic2VydmVyQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU1Jlc2l6ZU9ic2VydmVyQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcxNDQzKQor
KysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNSZXNpemVPYnNlcnZlckN1c3RvbS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMwLDExICszMCwxNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLXZvaWQgSlNSZXNpemVPYnNlcnZlcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpT
bG90VmlzaXRvciYgdmlzaXRvcikKKy8vdm9pZCBKU1Jlc2l6ZU9ic2VydmVyOjp2aXNpdEFkZGl0
aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5h
bWUgVmlzaXRvcj4KK3ZvaWQgSlNSZXNpemVPYnNlcnZlcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRy
ZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBSZXNpemVPYnNlcnZlckNhbGxiYWNrKiBjYWxs
YmFjayA9IHdyYXBwZWQoKS5jYWxsYmFja0NvbmN1cnJlbnRseSgpOwogICAgIGlmIChjYWxsYmFj
aykKICAgICAgICAgY2FsbGJhY2stPnZpc2l0SlNGdW5jdGlvbih2aXNpdG9yKTsKIH0KIAotfQor
dGVtcGxhdGUgdm9pZCBKU1Jlc2l6ZU9ic2VydmVyOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihK
U0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNSZXNpemVPYnNlcnZl
cjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYpOworCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1Jlc2l6
ZU9ic2VydmVyRW50cnlDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTUmVzaXplT2JzZXJ2ZXJFbnRyeUN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MTQ0
MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUmVzaXplT2JzZXJ2ZXJFbnRyeUN1
c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDEwICszMCwxNSBAQAogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLXZvaWQgSlNSZXNpemVPYnNlcnZlckVudHJ5Ojp2aXNpdEFkZGl0aW9uYWxD
aGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy92b2lkIEpTUmVzaXplT2JzZXJ2
ZXJFbnRyeTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRv
cikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTUmVzaXplT2JzZXJ2ZXJFbnRy
eTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB2aXNp
dG9yLmFkZE9wYXF1ZVJvb3Qocm9vdCh3cmFwcGVkKCkudGFyZ2V0KCkpKTsKICAgICB2aXNpdG9y
LmFkZE9wYXF1ZVJvb3Qod3JhcHBlZCgpLmNvbnRlbnRSZWN0KCkpOwogfQogCi19Cit0ZW1wbGF0
ZSB2b2lkIEpTUmVzaXplT2JzZXJ2ZXJFbnRyeTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlND
OjpBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTUmVzaXplT2JzZXJ2ZXJF
bnRyeTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYpOworCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NW
R1ZpZXdTcGVjQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU1NWR1ZpZXdTcGVjQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNTVkdWaWV3U3BlY0N1c3RvbS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTMwLDEwICszMCwxNSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgSlNT
VkdWaWV3U3BlYzo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlz
aXRvcikKKy8vdm9pZCBKU1NWR1ZpZXdTcGVjOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6
OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQg
SlNTVkdWaWV3U3BlYzo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikK
IHsKICAgICBBU1NFUlQod3JhcHBlZCgpLmNvbnRleHRFbGVtZW50Q29uY3VycmVudGx5KCkuZ2V0
KCkpOwogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChyb290KHdyYXBwZWQoKS5jb250ZXh0RWxl
bWVudENvbmN1cnJlbnRseSgpLmdldCgpKSk7CiB9CiAKLX0KK3RlbXBsYXRlIHZvaWQgSlNTVkdW
aWV3U3BlYzo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9y
Jik7Cit0ZW1wbGF0ZSB2b2lkIEpTU1ZHVmlld1NwZWM6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVu
KEpTQzo6U2xvdFZpc2l0b3ImKTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNTZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGVDdXN0b20u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU2VydmljZVdv
cmtlckdsb2JhbFNjb3BlQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNTZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGVDdXN0b20uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zNCwxMiArMzQsMTcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiB1
c2luZyBuYW1lc3BhY2UgSlNDOwogCi12b2lkIEpTU2VydmljZVdvcmtlckdsb2JhbFNjb3BlOjp2
aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vdm9pZCBKU1Nl
cnZpY2VXb3JrZXJHbG9iYWxTY29wZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0
b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1NlcnZpY2VX
b3JrZXJHbG9iYWxTY29wZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRv
cikKIHsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QoJndyYXBwZWQoKS5jbGllbnRzKCkpOwog
ICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdCgmd3JhcHBlZCgpLnJlZ2lzdHJhdGlvbigpKTsKIH0K
IAordGVtcGxhdGUgdm9pZCBKU1NlcnZpY2VXb3JrZXJHbG9iYWxTY29wZTo6dmlzaXRBZGRpdGlv
bmFsQ2hpbGRyZW4oQWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU1NlcnZp
Y2VXb3JrZXJHbG9iYWxTY29wZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3Im
KTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTU3R5bGVTaGVldEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNTdHlsZVNoZWV0Q3VzdG9tLmNwcAkocmV2aXNpb24g
MjcxNDQzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNTdHlsZVNoZWV0Q3VzdG9t
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsMTEgKzMwLDE2IEBACiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAotdm9pZCBKU1N0eWxlU2hlZXQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3ZvaWQgSlNTdHlsZVNoZWV0Ojp2aXNpdEFkZGl0aW9u
YWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUg
VmlzaXRvcj4KK3ZvaWQgSlNTdHlsZVNoZWV0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNp
dG9yJiB2aXNpdG9yKQogewogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChyb290KCZ3cmFwcGVk
KCkpKTsKIH0KIAordGVtcGxhdGUgdm9pZCBKU1N0eWxlU2hlZXQ6OnZpc2l0QWRkaXRpb25hbENo
aWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNTdHlsZVNoZWV0
Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYpOworCiBKU0M6OkpTVmFsdWUg
dG9KU05ld2x5Q3JlYXRlZChKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNET01HbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgUmVmPFN0eWxlU2hlZXQ+JiYgc3R5bGVTaGVldCkKIHsKICAgICBpZiAo
c3R5bGVTaGVldC0+aXNDU1NTdHlsZVNoZWV0KCkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU1RleHRUcmFja0N1ZUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNUZXh0VHJhY2tDdWVDdXN0b20uY3BwCShyZXZpc2lvbiAyNzE0
NDMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1RleHRUcmFja0N1ZUN1c3RvbS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKLWJvb2wgSlNUZXh0VHJhY2tDdWVPd25lcjo6aXNSZWFj
aGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZv
aWQqLCBTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikKK2Jvb2wgSlNU
ZXh0VHJhY2tDdWVPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8
SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9y
LCBjb25zdCBjaGFyKiogcmVhc29uKQogewogICAgIEpTVGV4dFRyYWNrQ3VlKiBqc1RleHRUcmFj
a0N1ZSA9IGpzQ2FzdDxKU1RleHRUcmFja0N1ZSo+KGhhbmRsZS5zbG90KCktPmFzQ2VsbCgpKTsK
ICAgICBUZXh0VHJhY2tDdWUmIHRleHRUcmFja0N1ZSA9IGpzVGV4dFRyYWNrQ3VlLT53cmFwcGVk
KCk7CkBAIC04MiwxMiArODIsMTcgQEAgSlNWYWx1ZSB0b0pTKEpTR2xvYmFsT2JqZWN0KiBsZXhp
Y2FsR2xvYgogICAgIHJldHVybiB3cmFwKGxleGljYWxHbG9iYWxPYmplY3QsIGdsb2JhbE9iamVj
dCwgY3VlKTsKIH0KIAotdm9pZCBKU1RleHRUcmFja0N1ZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRy
ZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3ZvaWQgSlNUZXh0VHJhY2tDdWU6OnZpc2l0QWRk
aXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUg
VmlzaXRvcj4KK3ZvaWQgSlNUZXh0VHJhY2tDdWU6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZp
c2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgaWYgKFRleHRUcmFjayogdGV4dFRyYWNrID0gd3JhcHBl
ZCgpLnRyYWNrKCkpCiAgICAgICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChyb290KHRleHRUcmFj
aykpOwogfQogCit0ZW1wbGF0ZSB2b2lkIEpTVGV4dFRyYWNrQ3VlOjp2aXNpdEFkZGl0aW9uYWxD
aGlsZHJlbihBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTVGV4dFRyYWNr
Q3VlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYpOworCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCiAKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNUZXh0VHJhY2tDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTVGV4dFRyYWNrQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNUZXh0VHJhY2tDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zNiwxMSArMzYsMTYgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFj
ZSBKU0M7CiAKLXZvaWQgSlNUZXh0VHJhY2s6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQorLy92b2lkIEpTVGV4dFRyYWNrOjp2aXNpdEFkZGl0aW9uYWxDaGls
ZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2
b2lkIEpTVGV4dFRyYWNrOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9y
KQogewogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChyb290KCZ3cmFwcGVkKCkpKTsKIH0KIAor
dGVtcGxhdGUgdm9pZCBKU1RleHRUcmFjazo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oQWJzdHJh
Y3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU1RleHRUcmFjazo6dmlzaXRBZGRpdGlv
bmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAj
ZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVGV4dFRyYWNrTGlzdEN1
c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNUZXh0
VHJhY2tMaXN0Q3VzdG9tLmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNUZXh0VHJhY2tMaXN0Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzYsMTEgKzM2LDE2IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2UgSlND
OwogCi12b2lkIEpTVGV4dFRyYWNrTGlzdDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpT
bG90VmlzaXRvciYgdmlzaXRvcikKKy8vdm9pZCBKU1RleHRUcmFja0xpc3Q6OnZpc2l0QWRkaXRp
b25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBWaXNpdG9yPgordm9pZCBKU1RleHRUcmFja0xpc3Q6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVu
KFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHJvb3Qod3Jh
cHBlZCgpLmVsZW1lbnQoKSkpOwogfQogICAgIAordGVtcGxhdGUgdm9pZCBKU1RleHRUcmFja0xp
c3Q6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBs
YXRlIHZvaWQgSlNUZXh0VHJhY2tMaXN0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90Vmlz
aXRvciYpOworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZgpJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNUcmVlV2Fsa2VyQ3VzdG9tLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1RyZWVXYWxrZXJDdXN0b20uY3BwCShyZXZp
c2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1RyZWVXYWxrZXJD
dXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNSwxMCArMjUsMTUgQEAKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi12b2lkIEpTVHJlZVdhbGtlcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4o
SlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vdm9pZCBKU1RyZWVXYWxrZXI6OnZpc2l0QWRk
aXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBl
bmFtZSBWaXNpdG9yPgordm9pZCBKU1RyZWVXYWxrZXI6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVu
KFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgaWYgKE5vZGVGaWx0ZXIqIGZpbHRlciA9IHdyYXBw
ZWQoKS5maWx0ZXIoKSkKICAgICAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KGZpbHRlcik7CiB9
CiAKLX0KK3RlbXBsYXRlIHZvaWQgSlNUcmVlV2Fsa2VyOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJl
bihKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNUcmVlV2Fsa2Vy
Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJik7CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVW5kb0l0
ZW1DdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
VW5kb0l0ZW1DdXN0b20uY3BwCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU1VuZG9JdGVtQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksMTMg
KzI5LDE4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBKU1VuZG9JdGVtOjp2aXNp
dEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy92b2lkIEpT
VW5kb0l0ZW06OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0
b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1VuZG9JdGVtOjp2aXNpdEFk
ZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHdyYXBwZWQoKS51bmRv
SGFuZGxlcigpLnZpc2l0SlNGdW5jdGlvbih2aXNpdG9yKTsKICAgICB3cmFwcGVkKCkucmVkb0hh
bmRsZXIoKS52aXNpdEpTRnVuY3Rpb24odmlzaXRvcik7CiB9CiAKLWJvb2wgSlNVbmRvSXRlbU93
bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+
IGhhbmRsZSwgdm9pZCosIEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiBy
ZWFzb24pCit0ZW1wbGF0ZSB2b2lkIEpTVW5kb0l0ZW06OnZpc2l0QWRkaXRpb25hbENoaWxkcmVu
KEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU1VuZG9JdGVtOjp2
aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJik7CisKK2Jvb2wgSlNVbmRv
SXRlbU93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVu
a25vd24+IGhhbmRsZSwgdm9pZCosIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvciwg
Y29uc3QgY2hhcioqIHJlYXNvbikKIHsKICAgICBpZiAoVU5MSUtFTFkocmVhc29uKSkKICAgICAg
ICAgKnJlYXNvbiA9ICJEb2N1bWVudCBpcyBhbiBvcGFxdWUgcm9vdC4iOwpJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNWYWx1ZUluV3JhcHBlZE9iamVjdC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVmFsdWVJbldyYXBwZWRPYmplY3QuaAko
cmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNWYWx1ZUlu
V3JhcHBlZE9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw4IEBAIHB1YmxpYzoK
ICAgICBvcGVyYXRvciBKU0M6OkpTVmFsdWUoKSBjb25zdDsKICAgICBleHBsaWNpdCBvcGVyYXRv
ciBib29sKCkgY29uc3Q7CiAgICAgSlNWYWx1ZUluV3JhcHBlZE9iamVjdCYgb3BlcmF0b3I9KGNv
bnN0IEpTVmFsdWVJbldyYXBwZWRPYmplY3QmIG90aGVyKTsKLSAgICB2b2lkIHZpc2l0KEpTQzo6
U2xvdFZpc2l0b3ImKSBjb25zdDsKKy8vICAgIHZvaWQgdmlzaXQoSlNDOjpTbG90VmlzaXRvciYp
IGNvbnN0OworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgdmlzaXQoVmlzaXRv
ciYpIGNvbnN0OwogICAgIHZvaWQgY2xlYXIoKTsKIAogcHJpdmF0ZToKQEAgLTk4LDcgKzk5LDgg
QEAgaW5saW5lIEpTVmFsdWVJbldyYXBwZWRPYmplY3QmIEpTVmFsdWVJbgogICAgIHJldHVybiAq
dGhpczsKIH0KIAotaW5saW5lIHZvaWQgSlNWYWx1ZUluV3JhcHBlZE9iamVjdDo6dmlzaXQoSlND
OjpTbG90VmlzaXRvciYgdmlzaXRvcikgY29uc3QKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+
CitpbmxpbmUgdm9pZCBKU1ZhbHVlSW5XcmFwcGVkT2JqZWN0Ojp2aXNpdChWaXNpdG9yJiB2aXNp
dG9yKSBjb25zdAogewogICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKG1fdmFsdWUsIFtdIChKU0M6
OkpTVmFsdWUpIHsKICAgICAgICAgLy8gTm90aGluZyB0byB2aXNpdC4KQEAgLTEwNyw2ICsxMDks
OSBAQCBpbmxpbmUgdm9pZCBKU1ZhbHVlSW5XcmFwcGVkT2JqZWN0Ojp2aXNpCiAgICAgfSk7CiB9
CiAKK3RlbXBsYXRlIHZvaWQgSlNWYWx1ZUluV3JhcHBlZE9iamVjdDo6dmlzaXQoSlNDOjpBYnN0
cmFjdFNsb3RWaXNpdG9yJikgY29uc3Q7Cit0ZW1wbGF0ZSB2b2lkIEpTVmFsdWVJbldyYXBwZWRP
YmplY3Q6OnZpc2l0KEpTQzo6U2xvdFZpc2l0b3ImKSBjb25zdDsKKwogaW5saW5lIHZvaWQgSlNW
YWx1ZUluV3JhcHBlZE9iamVjdDo6Y2xlYXIoKQogewogICAgIFdURjo6c3dpdGNoT24obV92YWx1
ZSwgW10gKFdlYWsmIHZhbHVlKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U1ZpZGVvVHJhY2tDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTVmlkZW9UcmFja0N1c3RvbS5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVmlkZW9UcmFja0N1c3RvbS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM1LDExICszNSwxNiBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogdXNpbmcgbmFtZXNw
YWNlIEpTQzsKIAotdm9pZCBKU1ZpZGVvVHJhY2s6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQorLy92b2lkIEpTVmlkZW9UcmFjazo6dmlzaXRBZGRpdGlvbmFs
Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
Pgordm9pZCBKU1ZpZGVvVHJhY2s6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZp
c2l0b3IpCiB7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHJvb3QoJndyYXBwZWQoKSkpOwog
fQogCit0ZW1wbGF0ZSB2b2lkIEpTVmlkZW9UcmFjazo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4o
SlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTVmlkZW9UcmFjazo6
dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYpOworCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCiAKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNWaWRlb1RyYWNrTGlzdEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNWaWRlb1RyYWNrTGlzdEN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MTQ0MykK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVmlkZW9UcmFja0xpc3RDdXN0b20uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zNSwxMSArMzUsMTYgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKLXZvaWQgSlNWaWRlb1RyYWNrTGlzdDo6dmlzaXRBZGRp
dGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3ZvaWQgSlNWaWRlb1RyYWNr
TGlzdDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1w
bGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1ZpZGVvVHJhY2tMaXN0Ojp2aXNpdEFkZGl0
aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHZpc2l0b3IuYWRkT3BhcXVl
Um9vdChyb290KHdyYXBwZWQoKS5lbGVtZW50KCkpKTsKIH0KIAordGVtcGxhdGUgdm9pZCBKU1Zp
ZGVvVHJhY2tMaXN0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihBYnN0cmFjdFNsb3RWaXNpdG9y
Jik7Cit0ZW1wbGF0ZSB2b2lkIEpTVmlkZW9UcmFja0xpc3Q6OnZpc2l0QWRkaXRpb25hbENoaWxk
cmVuKFNsb3RWaXNpdG9yJik7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYkdMMlJlbmRlcmluZ0NvbnRleHRD
dXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2Vi
R0wyUmVuZGVyaW5nQ29udGV4dEN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViR0wyUmVuZGVyaW5nQ29udGV4dEN1c3RvbS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMzLDEyICszMywxNyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewog
dXNpbmcgbmFtZXNwYWNlIEpTQzsKIAotdm9pZCBKU1dlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OnZp
c2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy92b2lkIEpTV2Vi
R0wyUmVuZGVyaW5nQ29udGV4dDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3Im
IHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1dlYkdMMlJlbmRl
cmluZ0NvbnRleHQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7
CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KCZ3cmFwcGVkKCkpOwogICAgIHdyYXBwZWQoKS5h
ZGRNZW1iZXJzVG9PcGFxdWVSb290cyh2aXNpdG9yKTsKIH0KIAordGVtcGxhdGUgdm9pZCBKU1dl
YkdMMlJlbmRlcmluZ0NvbnRleHQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6QWJzdHJh
Y3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU1dlYkdMMlJlbmRlcmluZ0NvbnRleHQ6
OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImKTsKKwogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQkdMKQpJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRDdXN0b20uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViR0xSZW5kZXJpbmdDb250
ZXh0Q3VzdG9tLmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zMywxMiArMzMsMTcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBK
U0M7CiAKLXZvaWQgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZpc2l0QWRkaXRpb25hbENoaWxk
cmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy92b2lkIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0
Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRl
PHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2aXNpdEFk
ZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHZpc2l0b3IuYWRkT3Bh
cXVlUm9vdCgmd3JhcHBlZCgpKTsKICAgICB3cmFwcGVkKCkuYWRkTWVtYmVyc1RvT3BhcXVlUm9v
dHModmlzaXRvcik7CiB9CiAKK3RlbXBsYXRlIHZvaWQgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRl
IHZvaWQgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNs
b3RWaXNpdG9yJik7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJM
RShXRUJHTCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyR2xvYmFs
U2NvcGVCYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U1dvcmtlckdsb2JhbFNjb3BlQmFzZS5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyR2xvYmFsU2NvcGVCYXNlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtODcsNyArODcsOCBAQCB2b2lkIEpTV29ya2VyR2xvYmFsU2NvcGVCYXNlOjpmaW5p
c2hDcmVhCiAgICAgQVNTRVJUKGluaGVyaXRzKHZtLCBpbmZvKCkpKTsKIH0KIAotdm9pZCBKU1dv
cmtlckdsb2JhbFNjb3BlQmFzZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNp
dG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNXb3JrZXJH
bG9iYWxTY29wZUJhc2U6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYg
dmlzaXRvcikKIHsKICAgICBKU1dvcmtlckdsb2JhbFNjb3BlQmFzZSogdGhpc09iamVjdCA9IGpz
Q2FzdDxKU1dvcmtlckdsb2JhbFNjb3BlQmFzZSo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpF
Q1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTk1LDYgKzk2LDggQEAgdm9pZCBK
U1dvcmtlckdsb2JhbFNjb3BlQmFzZTo6dmlzaXRDaGlsZAogICAgIHZpc2l0b3IuYXBwZW5kKHRo
aXNPYmplY3QtPm1fcHJveHkpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNXb3JrZXJH
bG9iYWxTY29wZUJhc2UpOworCiB2b2lkIEpTV29ya2VyR2xvYmFsU2NvcGVCYXNlOjpkZXN0cm95
KEpTQ2VsbCogY2VsbCkKIHsKICAgICBzdGF0aWNfY2FzdDxKU1dvcmtlckdsb2JhbFNjb3BlQmFz
ZSo+KGNlbGwpLT5KU1dvcmtlckdsb2JhbFNjb3BlQmFzZTo6fkpTV29ya2VyR2xvYmFsU2NvcGVC
YXNlKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckdsb2JhbFNj
b3BlQmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29y
a2VyR2xvYmFsU2NvcGVCYXNlLmgJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTV29ya2VyR2xvYmFsU2NvcGVCYXNlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTc5LDcgKzc5LDcgQEAgcHJvdGVjdGVkOgogICAgIEpTV29ya2VyR2xvYmFsU2NvcGVCYXNlKEpT
Qzo6Vk0mLCBKU0M6OlN0cnVjdHVyZSosIFJlZlB0cjxXb3JrZXJHbG9iYWxTY29wZT4mJik7CiAg
ICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJiwgSlNDOjpKU1Byb3h5Kik7CiAKLSAgICBz
dGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYp
OworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKIHByaXZhdGU6CiAgICAgUmVmUHRyPFdv
cmtlckdsb2JhbFNjb3BlPiBtX3dyYXBwZWQ7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU1dvcmtlckdsb2JhbFNjb3BlQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckdsb2JhbFNjb3BlQ3VzdG9tLmNwcAkocmV2aXNp
b24gMjcxNDQzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrZXJHbG9iYWxT
Y29wZUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDcgKzMzLDkgQEAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKLXZvaWQgSlNXb3JrZXJHbG9iYWxT
Y29wZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3Zv
aWQgSlNXb3JrZXJHbG9iYWxTY29wZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0
b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1dvcmtlckds
b2JhbFNjb3BlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewog
ICAgIGlmIChhdXRvKiBsb2NhdGlvbiA9IHdyYXBwZWQoKS5vcHRpb25hbExvY2F0aW9uKCkpCiAg
ICAgICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChsb2NhdGlvbik7CkBAIC00OCw2ICs1MCw5IEBA
IHZvaWQgSlNXb3JrZXJHbG9iYWxTY29wZTo6dmlzaXRBZGRpdGlvbmEKICAgICB3cmFwcGVkKCku
dmlzaXRKU0V2ZW50TGlzdGVuZXJzKHZpc2l0b3IpOwogfQogCit0ZW1wbGF0ZSB2b2lkIEpTV29y
a2VyR2xvYmFsU2NvcGU6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0
b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNXb3JrZXJHbG9iYWxTY29wZTo6dmlzaXRBZGRpdGlvbmFs
Q2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKKwogSlNWYWx1ZSBKU1dvcmtlckdsb2JhbFNjb3BlOjpx
dWV1ZU1pY3JvdGFzayhKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZy
YW1lJiBjYWxsRnJhbWUpCiB7CiAgICAgVk0mIHZtID0gbGV4aWNhbEdsb2JhbE9iamVjdC52bSgp
OwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrZXJOYXZpZ2F0b3JDdXN0
b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2Vy
TmF2aWdhdG9yQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNXb3JrZXJOYXZpZ2F0b3JDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yOCw5ICsyOCwxNCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgSlNXb3JrZXJO
YXZpZ2F0b3I6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0
b3IpCisvL3ZvaWQgSlNXb3JrZXJOYXZpZ2F0b3I6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpT
Qzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9p
ZCBKU1dvcmtlck5hdmlnYXRvcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlz
aXRvcikKIHsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qoc3RhdGljX2Nhc3Q8TmF2aWdhdG9y
QmFzZSo+KCZ3cmFwcGVkKCkpKTsKIH0KIAotfQordGVtcGxhdGUgdm9pZCBKU1dvcmtlck5hdmln
YXRvcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJik7
Cit0ZW1wbGF0ZSB2b2lkIEpTV29ya2VyTmF2aWdhdG9yOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJl
bihKU0M6OlNsb3RWaXNpdG9yJik7CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2xldEdsb2JhbFNjb3BlQmFzZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrbGV0R2xvYmFsU2Nv
cGVCYXNlLmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNXb3JrbGV0R2xvYmFsU2NvcGVCYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzcsNyAr
NzcsOCBAQCB2b2lkIEpTV29ya2xldEdsb2JhbFNjb3BlQmFzZTo6ZmluaXNoQ3JlCiAgICAgQVNT
RVJUKGluaGVyaXRzKHZtLCBpbmZvKCkpKTsKIH0KIAotdm9pZCBKU1dvcmtsZXRHbG9iYWxTY29w
ZUJhc2U6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikK
K3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTV29ya2xldEdsb2JhbFNjb3BlQmFz
ZTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewog
ICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNXb3JrbGV0R2xvYmFsU2NvcGVCYXNlKj4o
Y2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkp
OwpAQCAtODUsNiArODYsOCBAQCB2b2lkIEpTV29ya2xldEdsb2JhbFNjb3BlQmFzZTo6dmlzaXRD
aGlsCiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9wcm94eSk7CiB9CiAKK0RFRklO
RV9WSVNJVF9DSElMRFJFTihKU1dvcmtsZXRHbG9iYWxTY29wZUJhc2UpOworCiB2b2lkIEpTV29y
a2xldEdsb2JhbFNjb3BlQmFzZTo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCiB7CiAgICAgc3RhdGlj
X2Nhc3Q8SlNXb3JrbGV0R2xvYmFsU2NvcGVCYXNlKj4oY2VsbCktPkpTV29ya2xldEdsb2JhbFNj
b3BlQmFzZTo6fkpTV29ya2xldEdsb2JhbFNjb3BlQmFzZSgpOwpJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNXb3JrbGV0R2xvYmFsU2NvcGVCYXNlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrbGV0R2xvYmFsU2NvcGVCYXNlLmgJKHJl
dmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2xldEds
b2JhbFNjb3BlQmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC02Nyw3ICs2Nyw3IEBAIHByb3RlY3Rl
ZDoKICAgICBKU1dvcmtsZXRHbG9iYWxTY29wZUJhc2UoSlNDOjpWTSYsIEpTQzo6U3RydWN0dXJl
KiwgUmVmUHRyPFdvcmtsZXRHbG9iYWxTY29wZT4mJik7CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlv
bihKU0M6OlZNJiwgSlNDOjpKU1Byb3h5Kik7CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxk
cmVuKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRf
Q0hJTERSRU47CiAKIHByaXZhdGU6CiAgICAgUmVmUHRyPFdvcmtsZXRHbG9iYWxTY29wZT4gbV93
cmFwcGVkOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNYTUxIdHRwUmVxdWVz
dEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNY
TUxIdHRwUmVxdWVzdEN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTWE1MSHR0cFJlcXVlc3RDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00MSw3ICs0MSw5IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2Ug
SlNDOwogCi12b2lkIEpTWE1MSHR0cFJlcXVlc3Q6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQorLy92b2lkIEpTWE1MSHR0cFJlcXVlc3Q6OnZpc2l0QWRkaXRp
b25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlz
aXRvcj4KK3ZvaWQgSlNYTUxIdHRwUmVxdWVzdDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlz
aXRvciYgdmlzaXRvcikKIHsKICAgICBpZiAoYXV0byogdXBsb2FkID0gd3JhcHBlZCgpLm9wdGlv
bmFsVXBsb2FkKCkpCiAgICAgICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdCh1cGxvYWQpOwpAQCAt
NTAsNiArNTIsOSBAQCB2b2lkIEpTWE1MSHR0cFJlcXVlc3Q6OnZpc2l0QWRkaXRpb25hbENoCiAg
ICAgICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChyZXNwb25zZURvY3VtZW50KTsKIH0KIAordGVt
cGxhdGUgdm9pZCBKU1hNTEh0dHBSZXF1ZXN0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihBYnN0
cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTWE1MSHR0cFJlcXVlc3Q6OnZpc2l0
QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CisKIEpTVmFsdWUgSlNYTUxIdHRwUmVx
dWVzdDo6cmVzcG9uc2UoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QpIGNvbnN0
CiB7CiAgICAgYXV0byBjYWNoZVJlc3VsdCA9IFsmXSAoSlNWYWx1ZSB2YWx1ZSkgLT4gSlNWYWx1
ZSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1hQYXRoUmVzdWx0Q3VzdG9t
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1hQYXRoUmVz
dWx0Q3VzdG9tLmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNYUGF0aFJlc3VsdEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMx
LDkgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIEpTWFBhdGhSZXN1bHQ6OnZpc2l0
QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3ZvaWQgSlNY
UGF0aFJlc3VsdDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlz
aXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTWFBhdGhSZXN1bHQ6OnZp
c2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0byYgdmFs
dWUgPSB3cmFwcGVkKCkudmFsdWUoKTsKICAgICBpZiAodmFsdWUuaXNOb2RlU2V0KCkpIHsKQEAg
LTQxLDQgKzQzLDcgQEAgdm9pZCBKU1hQYXRoUmVzdWx0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZAog
ICAgIH0KIH0KIAordGVtcGxhdGUgdm9pZCBKU1hQYXRoUmVzdWx0Ojp2aXNpdEFkZGl0aW9uYWxD
aGlsZHJlbihKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNYUGF0
aFJlc3VsdDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYpOworCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9X
ZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL1dlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlci5jcHAJKHJldmlzaW9u
IDI3MTQ0MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dlYkNvcmVUeXBlZEFycmF5
Q29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU2LDcgKzU2LDcgQEAgYm9vbCBXZWJD
b3JlVHlwZWRBcnJheUNvbnRyb2xsZXI6OmlzQXRvbQogICAgIHJldHVybiBtX2FsbG93QXRvbWlj
c1dhaXQ7CiB9CiAKLWJvb2wgV2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyOjpKU0FycmF5QnVm
ZmVyT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5r
bm93bj4gaGFuZGxlLCB2b2lkKiwgSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hh
cioqIHJlYXNvbikKK2Jvb2wgV2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyOjpKU0FycmF5QnVm
ZmVyT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5r
bm93bj4gaGFuZGxlLCB2b2lkKiwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBj
b25zdCBjaGFyKiogcmVhc29uKQogewogICAgIGlmIChVTkxJS0VMWShyZWFzb24pKQogICAgICAg
ICAqcmVhc29uID0gIkFycmF5QnVmZmVyIGlzIG9wYXF1ZSByb290IjsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL1dlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dlYkNvcmVUeXBlZEFycmF5Q29udHJv
bGxlci5oCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9X
ZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDgsNyArNDgs
NyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIGNsYXNzIEpTQXJyYXlCdWZmZXJPd25lciA6IHB1
YmxpYyBKU0M6OldlYWtIYW5kbGVPd25lciB7CiAgICAgcHVibGljOgotICAgICAgICBib29sIGlz
UmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQq
IGNvbnRleHQsIEpTQzo6U2xvdFZpc2l0b3ImLCBjb25zdCBjaGFyKiopIG92ZXJyaWRlOworICAg
ICAgICBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5r
bm93bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYsIGNvbnN0IGNo
YXIqKikgb3ZlcnJpZGU7CiAgICAgICAgIHZvaWQgZmluYWxpemUoSlNDOjpIYW5kbGU8SlNDOjpV
bmtub3duPiwgdm9pZCogY29udGV4dCkgb3ZlcnJpZGU7CiAgICAgfTsKIApJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0JKHJl
dmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdl
bmVyYXRvckpTLnBtCSh3b3JraW5nIGNvcHkpCkBAIC0zMDc4LDggKzMwNzgsMTAgQEAgc3ViIEdl
bmVyYXRlSGVhZGVyCiAKICAgICAjIHZpc2l0IGZ1bmN0aW9uCiAgICAgaWYgKCRuZWVkc1Zpc2l0
Q2hpbGRyZW4pIHsKLSAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICBzdGF0aWMgdm9p
ZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKTtcbiIpOwotICAgICAg
ICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHZvaWQgdmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4o
SlNDOjpTbG90VmlzaXRvciYpO1xuIikgaWYgJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVz
LT57SlNDdXN0b21NYXJrRnVuY3Rpb259OworICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAi
ICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47XG4iKTsKKyMgICAgICAgIHB1c2goQGhlYWRlckNv
bnRlbnQsICIgICAgdm9pZCB2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9y
Jik7XG4iKSBpZiAkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntKU0N1c3RvbU1hcmtG
dW5jdGlvbn07ICMgbWxhbQorIyAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICB2b2lk
IHZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpO1xuIikg
aWYgJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57SlNDdXN0b21NYXJrRnVuY3Rpb259
OworICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZp
c2l0b3I+IHZvaWQgdmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYpO1xuIikgaWYgJGlu
dGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57SlNDdXN0b21NYXJrRnVuY3Rpb259OwogICAg
ICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiXG4iKTsKIAogICAgICAgICBpZiAoJGludGVyZmFj
ZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57SlNDdXN0b21NYXJrRnVuY3Rpb259KSB7CkBAIC0zMDk0
LDcgKzMwOTYsOSBAQCBzdWIgR2VuZXJhdGVIZWFkZXIKICAgICAgICAgICAgICMgdGhhdCB0aGUg
R0MgY2FsbHMgdG8gYXNrIGFuIG9iamVjdCBpcyBpdCB3b3VsZCBsaWtlIHRvIG1hcmsgYW55dGhp
bmcgZWxzZSBhZnRlciB0aGUKICAgICAgICAgICAgICMgcHJvZ3JhbSByZXN1bWVkIHNpbmNlIHRo
ZSBsYXN0IGNhbGwgdG8gdmlzaXRDaGlsZHJlbiBvciB2aXNpdE91dHB1dENvbnN0cmFpbnRzLiBT
aW5jZQogICAgICAgICAgICAgIyB0aGlzIGp1c3QgY2FsbHMgdmlzaXRBZGRpdGlvbmFsQ2hpbGRy
ZW4sIHlvdSB1c3VhbGx5IGRvbid0IGhhdmUgdG8gd29ycnkgYWJvdXQgdGhpcy4KLSAgICAgICAg
ICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgc3RhdGljIHZvaWQgdmlzaXRPdXRwdXRDb25z
dHJhaW50cyhKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJik7XG4iKTsKKyAgICAgICAgICAgICMg
bWxhbSBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHN0YXRpYyB2b2lkIHZpc2l0T3V0cHV0Q29u
c3RyYWludHMoSlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpO1xuIik7CisgICAgICAgICAgICBw
dXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHN0YXRpYyB2b2lkIHZpc2l0T3V0cHV0Q29uc3RyYWlu
dHMoSlNDZWxsKiwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJik7XG4iKTsKKyAgICAgICAgICAg
ICMgbWxhbSBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIERFQ0xBUkVfVklTSVRfT1VUUFVUX0NP
TlNUUkFJTlRTO1xuIik7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTMyMTUsNyArMzIxOSw3IEBA
IHN1YiBHZW5lcmF0ZUhlYWRlcgogICAgICAgICB9CiAgICAgICAgICRoZWFkZXJJbmNsdWRlc3si
PHd0Zi9OZXZlckRlc3Ryb3llZC5oPiJ9ID0gMTsKICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVu
dCwgInB1YmxpYzpcbiIpOwotICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIGJvb2wg
aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9p
ZCogY29udGV4dCwgSlNDOjpTbG90VmlzaXRvciYsIGNvbnN0IGNoYXIqKikgJHtvdmVycmlkZURl
Y2x9O1xuIik7CisgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgYm9vbCBpc1JlYWNo
YWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250
ZXh0LCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImLCBjb25zdCBjaGFyKiopICR7b3ZlcnJpZGVE
ZWNsfTtcbiIpOwogICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHZvaWQgZmluYWxp
emUoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCkgJHtvdmVycmlkZURl
Y2x9O1xuIik7CiAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJ9O1xuIik7CiAgICAgICAg
IHB1c2goQGhlYWRlckNvbnRlbnQsICJcbiIpOwpAQCAtNDkyOCw2ICs0OTMyLDcgQEAgc3ViIEdl
bmVyYXRlSW1wbGVtZW50YXRpb24KICAgICBBZGRUb0ltcGxJbmNsdWRlcygiRE9NSXNvU3Vic3Bh
Y2VzLmgiKTsKICAgICBBZGRUb0ltcGxJbmNsdWRlcygiV2ViQ29yZUpTQ2xpZW50RGF0YS5oIik7
CiAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIjxKYXZhU2NyaXB0Q29yZS9KU0Rlc3RydWN0aWJsZU9i
amVjdEhlYXBDZWxsVHlwZS5oPiIpOworICAgIEFkZFRvSW1wbEluY2x1ZGVzKCI8SmF2YVNjcmlw
dENvcmUvU2xvdFZpc2l0b3JNYWNyb3MuaD4iKTsKICAgICBBZGRUb0ltcGxJbmNsdWRlcygiPEph
dmFTY3JpcHRDb3JlL1N1YnNwYWNlSW5saW5lcy5oPiIpOwogICAgIHB1c2goQGltcGxDb250ZW50
LCAiSlNDOjpJc29TdWJzcGFjZSogJHtjbGFzc05hbWV9OjpzdWJzcGFjZUZvckltcGwoSlNDOjpW
TSYgdm0pXG4iKTsKICAgICBwdXNoKEBpbXBsQ29udGVudCwgIntcbiIpOwpAQCAtNDk1NSw3ICs0
OTYwLDggQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIn1cblxuIik7CiAKICAgICBpZiAoJG5lZWRzVmlzaXRDaGlsZHJlbikgewotICAgICAgICBw
dXNoKEBpbXBsQ29udGVudCwgInZvaWQgJHtjbGFzc05hbWV9Ojp2aXNpdENoaWxkcmVuKEpTQ2Vs
bCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpXG4iKTsKKyAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsICJ0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPlxuIik7CisgICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAidm9pZCAke2NsYXNzTmFtZX06OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCog
Y2VsbCwgVmlzaXRvciYgdmlzaXRvcilcbiIpOwogICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwg
IntcbiIpOwogICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBhdXRvKiB0aGlzT2JqZWN0
ID0ganNDYXN0PCR7Y2xhc3NOYW1lfSo+KGNlbGwpO1xuIik7CiAgICAgICAgIHB1c2goQGltcGxD
b250ZW50LCAiICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygp
KTtcbiIpOwpAQCAtNDk4MCw4ICs0OTg2LDEwIEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9u
CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ9
XG5cbiIpOworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIkRFRklORV9WSVNJVF9DSElMRFJF
Tigke2NsYXNzTmFtZX0pO1xuXG4iKTsKKwogICAgICAgICBpZiAoJGludGVyZmFjZS0+ZXh0ZW5k
ZWRBdHRyaWJ1dGVzLT57SlNDdXN0b21NYXJrRnVuY3Rpb259KSB7Ci0gICAgICAgICAgICBwdXNo
KEBpbXBsQ29udGVudCwgInZvaWQgJHtjbGFzc05hbWV9Ojp2aXNpdE91dHB1dENvbnN0cmFpbnRz
KEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpXG4iKTsKKyAgICAgICAgICAgIHB1
c2goQGltcGxDb250ZW50LCAidm9pZCAke2NsYXNzTmFtZX06OnZpc2l0T3V0cHV0Q29uc3RyYWlu
dHMoSlNDZWxsKiBjZWxsLCBBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKVxuIik7CiAgICAg
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIntcbiIpOwogICAgICAgICAgICAgcHVzaChAaW1w
bENvbnRlbnQsICIgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDwke2NsYXNzTmFtZX0qPihj
ZWxsKTtcbiIpOwogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgQVNTRVJUX0dD
X09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpO1xuIik7CkBAIC01MDIyLDcgKzUw
MzAsNyBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgIH0KIAogICAgIGlmIChTaG91
bGRHZW5lcmF0ZVdyYXBwZXJPd25lckNvZGUoJGhhc1BhcmVudCwgJGludGVyZmFjZSkgJiYgIUdl
dEN1c3RvbUlzUmVhY2hhYmxlKCRpbnRlcmZhY2UpKSB7Ci0gICAgICAgIHB1c2goQGltcGxDb250
ZW50LCAiYm9vbCBKUyR7aW50ZXJmYWNlTmFtZX1Pd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVl
Um9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBTbG90VmlzaXRv
ciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbilcbiIpOworICAgICAgICBwdXNoKEBpbXBs
Q29udGVudCwgImJvb2wgSlMke2ludGVyZmFjZU5hbWV9T3duZXI6OmlzUmVhY2hhYmxlRnJvbU9w
YXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgQWJzdHJh
Y3RTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbilcbiIpOwogICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgIntcbiIpOwogICAgICAgICAjIEFsbCBBY3RpdmVET01PYmpl
Y3RzIGltcGxlbWVudCBoYXNQZW5kaW5nQWN0aXZpdHkoKSwgYnV0IG5vdCBhbGwgb2YgdGhlbQog
ICAgICAgICAjIGluY3JlbWVudCB0aGVpciBDKysgcmVmZXJlbmNlIGNvdW50cyB3aGVuIGhhc1Bl
bmRpbmdBY3Rpdml0eSgpIGJlY29tZXMKQEAgLTY0MjEsNyArNjQyOSw4IEBAIHN1YiBHZW5lcmF0
ZUNhbGxiYWNrSGVhZGVyQ29udGVudAogICAgICAgICBwdXNoKEAkY29udGVudFJlZiwgIiAgICBi
b29sIGhhc0NhbGxiYWNrKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9kYXRhICYmIG1fZGF0YS0+
Y2FsbGJhY2soKTsgfVxuXG4iKTsKICAgICB9CiAKLSAgICBwdXNoKEAkY29udGVudFJlZiwgIiAg
ICB2b2lkIHZpc2l0SlNGdW5jdGlvbihKU0M6OlNsb3RWaXNpdG9yJikgb3ZlcnJpZGU7XG5cbiIp
IGlmICRpbnRlcmZhY2VPckNhbGxiYWNrLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntJc1dlYWtDYWxs
YmFja307CisjICAgIHB1c2goQCRjb250ZW50UmVmLCAiICAgIHZvaWQgdmlzaXRKU0Z1bmN0aW9u
KEpTQzo6U2xvdFZpc2l0b3ImKSBvdmVycmlkZTtcblxuIikgaWYgJGludGVyZmFjZU9yQ2FsbGJh
Y2stPmV4dGVuZGVkQXR0cmlidXRlcy0+e0lzV2Vha0NhbGxiYWNrfTsKKyAgICBwdXNoKEAkY29u
dGVudFJlZiwgIiAgICB2b2lkIHZpc2l0SlNGdW5jdGlvbihKU0M6OkFic3RyYWN0U2xvdFZpc2l0
b3ImKSBvdmVycmlkZTtcblxuIikgaWYgJGludGVyZmFjZU9yQ2FsbGJhY2stPmV4dGVuZGVkQXR0
cmlidXRlcy0+e0lzV2Vha0NhbGxiYWNrfTsKIAogICAgIHB1c2goQCRjb250ZW50UmVmLCAiICAg
ICR7Y2FsbGJhY2tEYXRhVHlwZX0qIG1fZGF0YTtcbiIpOwogICAgIHB1c2goQCRjb250ZW50UmVm
LCAifTtcblxuIik7CkBAIC02NjEyLDcgKzY2MjEsOCBAQCBzdWIgR2VuZXJhdGVDYWxsYmFja0lt
cGxlbWVudGF0aW9uQ29udGVuCiAgICAgfQogCiAgICAgaWYgKCRpbnRlcmZhY2VPckNhbGxiYWNr
LT5leHRlbmRlZEF0dHJpYnV0ZXMtPntJc1dlYWtDYWxsYmFja30pIHsKLSAgICAgICAgcHVzaChA
JGNvbnRlbnRSZWYsICJ2b2lkICR7Y2xhc3NOYW1lfTo6dmlzaXRKU0Z1bmN0aW9uKEpTQzo6U2xv
dFZpc2l0b3ImIHZpc2l0b3IpXG4iKTsKKyMgICAgICAgIHB1c2goQCRjb250ZW50UmVmLCAidm9p
ZCAke2NsYXNzTmFtZX06OnZpc2l0SlNGdW5jdGlvbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9y
KVxuIik7CisgICAgICAgIHB1c2goQCRjb250ZW50UmVmLCAidm9pZCAke2NsYXNzTmFtZX06OnZp
c2l0SlNGdW5jdGlvbihKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpXG4iKTsKICAg
ICAgICAgcHVzaChAJGNvbnRlbnRSZWYsICJ7XG4iKTsKICAgICAgICAgcHVzaChAJGNvbnRlbnRS
ZWYsICIgICAgbV9kYXRhLT52aXNpdEpTRnVuY3Rpb24odmlzaXRvcik7XG4iKTsKICAgICAgICAg
cHVzaChAJGNvbnRlbnRSZWYsICJ9XG5cbiIpOwpAQCAtNjcyMyw2ICs2NzMzLDcgQEAgc3ViIEdl
bmVyYXRlSXRlcmFibGVEZWZpbml0aW9uCiAgICAgbXkgJHZpc2libGVJbnRlcmZhY2VOYW1lID0g
JGNvZGVHZW5lcmF0b3ItPkdldFZpc2libGVJbnRlcmZhY2VOYW1lKCRpbnRlcmZhY2UpOwogCiAg
ICAgQWRkVG9JbXBsSW5jbHVkZXMoIkpTRE9NSXRlcmF0b3IuaCIpOworICAgIEFkZFRvSW1wbElu
Y2x1ZGVzKCI8SmF2YVNjcmlwdENvcmUvU2xvdFZpc2l0b3JNYWNyb3MuaD4iKTsKIAogICAgIHJl
dHVybiB1bmxlc3MgSXNLZXlWYWx1ZUl0ZXJhYmxlSW50ZXJmYWNlKCRpbnRlcmZhY2UpOwogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vQWN0aXZlRE9NQ2FsbGJhY2suaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9kb20vQWN0aXZlRE9NQ2FsbGJhY2suaAkocmV2aXNpb24gMjcxNDQz
KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0FjdGl2ZURPTUNhbGxiYWNrLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJDb250ZXh0RGVzdHJ1Y3Rpb25PYnNlcnZl
ci5oIgogCiBuYW1lc3BhY2UgSlNDIHsKK2NsYXNzIEFic3RyYWN0U2xvdFZpc2l0b3I7CiBjbGFz
cyBTbG90VmlzaXRvcjsKIH0KIApAQCAtNTUsNyArNTYsOCBAQCBwdWJsaWM6CiAgICAgV0VCQ09S
RV9FWFBPUlQgYm9vbCBhY3RpdmVET01PYmplY3RzQXJlU3VzcGVuZGVkKCkgY29uc3Q7CiAgICAg
V0VCQ09SRV9FWFBPUlQgYm9vbCBhY3RpdmVET01PYmplY3RBcmVTdG9wcGVkKCkgY29uc3Q7CiAg
ICAgCi0gICAgdmlydHVhbCB2b2lkIHZpc2l0SlNGdW5jdGlvbihKU0M6OlNsb3RWaXNpdG9yJikg
eyB9CisvLyAgICB2aXJ0dWFsIHZvaWQgdmlzaXRKU0Z1bmN0aW9uKEpTQzo6U2xvdFZpc2l0b3Im
KSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXRKU0Z1bmN0aW9uKEpTQzo6QWJzdHJhY3RTbG90
VmlzaXRvciYpIHsgfQogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNl
L1dlYkNvcmUvZG9tL0V2ZW50TGlzdGVuZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9kb20vRXZlbnRMaXN0ZW5lci5oCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvV2ViQ29y
ZS9kb20vRXZlbnRMaXN0ZW5lci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw4ICsyMyw5IEBACiAj
aW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KIAogbmFtZXNwYWNlIEpTQyB7CitjbGFzcyBBYnN0
cmFjdFNsb3RWaXNpdG9yOwogY2xhc3MgSlNPYmplY3Q7Ci1jbGFzcyBTbG90VmlzaXRvcjsKKy8v
Y2xhc3MgU2xvdFZpc2l0b3I7CiB9CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTUxLDcgKzUy
LDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVFdmVudChTY3JpcHRFeGVjdXRp
b25Db250ZXh0JiwgRXZlbnQmKSA9IDA7CiAgICAgdmlydHVhbCBib29sIHdhc0NyZWF0ZWRGcm9t
TWFya3VwKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KIAotICAgIHZpcnR1YWwgdm9pZCB2aXNp
dEpTRnVuY3Rpb24oSlNDOjpTbG90VmlzaXRvciYpIHsgfQorLy8gICAgdmlydHVhbCB2b2lkIHZp
c2l0SlNGdW5jdGlvbihKU0M6OlNsb3RWaXNpdG9yJikgeyB9CisgICAgdmlydHVhbCB2b2lkIHZp
c2l0SlNGdW5jdGlvbihKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKSB7IH0KIAogICAgIHZpcnR1
YWwgYm9vbCBpc0F0dHJpYnV0ZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgVHlwZSB0
eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20v
RXZlbnRUYXJnZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9FdmVudFRh
cmdldC5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9FdmVudFRh
cmdldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3NCw3ICszNzQsOSBAQCB2b2lkIEV2ZW50VGFy
Z2V0OjpyZW1vdmVBbGxFdmVudExpc3RlbmVyCiAgICAgdGhyZWFkRGF0YS5zZXRJc0luUmVtb3Zl
QWxsRXZlbnRMaXN0ZW5lcnMoZmFsc2UpOwogfQogCi12b2lkIEV2ZW50VGFyZ2V0Ojp2aXNpdEpT
RXZlbnRMaXN0ZW5lcnMoSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vdm9pZCBFdmVudFRh
cmdldDo6dmlzaXRKU0V2ZW50TGlzdGVuZXJzKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0
ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBFdmVudFRhcmdldDo6dmlzaXRKU0V2ZW50
TGlzdGVuZXJzKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgRXZlbnRUYXJnZXREYXRhKiBkYXRh
ID0gZXZlbnRUYXJnZXREYXRhQ29uY3VycmVudGx5KCk7CiAgICAgaWYgKCFkYXRhKQpAQCAtMzg2
LDYgKzM4OCw5IEBAIHZvaWQgRXZlbnRUYXJnZXQ6OnZpc2l0SlNFdmVudExpc3RlbmVycygKICAg
ICAgICAgbGlzdGVuZXItPnZpc2l0SlNGdW5jdGlvbih2aXNpdG9yKTsKIH0KIAordGVtcGxhdGUg
dm9pZCBFdmVudFRhcmdldDo6dmlzaXRKU0V2ZW50TGlzdGVuZXJzKEpTQzo6QWJzdHJhY3RTbG90
VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBFdmVudFRhcmdldDo6dmlzaXRKU0V2ZW50TGlzdGVu
ZXJzKEpTQzo6U2xvdFZpc2l0b3ImKTsKKwogdm9pZCBFdmVudFRhcmdldDo6aW52YWxpZGF0ZUV2
ZW50TGlzdGVuZXJSZWdpb25zKCkKIHsKICAgICBpZiAoaXM8RWxlbWVudD4oKnRoaXMpKSB7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRUYXJnZXQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9kb20vRXZlbnRUYXJnZXQuaAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNl
L1dlYkNvcmUvZG9tL0V2ZW50VGFyZ2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTExMyw3ICsxMTMs
OCBAQCBwdWJsaWM6CiAgICAgdm9pZCBmaXJlRXZlbnRMaXN0ZW5lcnMoRXZlbnQmLCBFdmVudElu
dm9rZVBoYXNlKTsKICAgICBib29sIGlzRmlyaW5nRXZlbnRMaXN0ZW5lcnMoKSBjb25zdDsKIAot
ICAgIHZvaWQgdmlzaXRKU0V2ZW50TGlzdGVuZXJzKEpTQzo6U2xvdFZpc2l0b3ImKTsKKy8vICAg
IHZvaWQgdmlzaXRKU0V2ZW50TGlzdGVuZXJzKEpTQzo6U2xvdFZpc2l0b3ImKTsKKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIHZpc2l0SlNFdmVudExpc3RlbmVycyhWaXNpdG9y
Jik7CiAgICAgdm9pZCBpbnZhbGlkYXRlSlNFdmVudExpc3RlbmVycyhKU0M6OkpTT2JqZWN0Kik7
CiAKICAgICBjb25zdCBFdmVudFRhcmdldERhdGEqIGV2ZW50VGFyZ2V0RGF0YSgpIGNvbnN0OwpJ
bmRleDogU291cmNlL1dlYkNvcmUvZG9tL011dGF0aW9uUmVjb3JkLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9kb20vTXV0YXRpb25SZWNvcmQuY3BwCShyZXZpc2lvbiAyNzE0NDMp
CisrKyBTb3VyY2UvV2ViQ29yZS9kb20vTXV0YXRpb25SZWNvcmQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00MSw3ICs0MSw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogbmFtZXNwYWNlIHsKIAot
c3RhdGljIHZvaWQgdmlzaXROb2RlTGlzdChKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yLCBOb2Rl
TGlzdCYgbm9kZUxpc3QpCisvL3N0YXRpYyB2b2lkIHZpc2l0Tm9kZUxpc3QoSlNDOjpTbG90Vmlz
aXRvciYgdmlzaXRvciwgTm9kZUxpc3QmIG5vZGVMaXN0KQorc3RhdGljIHZvaWQgdmlzaXROb2Rl
TGlzdChKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIE5vZGVMaXN0JiBub2RlTGlz
dCkKIHsKICAgICBBU1NFUlQoIW5vZGVMaXN0LmlzTGl2ZU5vZGVMaXN0KCkpOwogICAgIHVuc2ln
bmVkIGxlbmd0aCA9IG5vZGVMaXN0Lmxlbmd0aCgpOwpAQCAtNjgsNyArNjksOCBAQCBwcml2YXRl
OgogICAgIE5vZGUqIHByZXZpb3VzU2libGluZygpIG92ZXJyaWRlIHsgcmV0dXJuIG1fcHJldmlv
dXNTaWJsaW5nLmdldCgpOyB9CiAgICAgTm9kZSogbmV4dFNpYmxpbmcoKSBvdmVycmlkZSB7IHJl
dHVybiBtX25leHRTaWJsaW5nLmdldCgpOyB9CiAKLSAgICB2b2lkIHZpc2l0Tm9kZXNDb25jdXJy
ZW50bHkoSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikgY29uc3QgZmluYWwKKy8vICAgIHZvaWQg
dmlzaXROb2Rlc0NvbmN1cnJlbnRseShKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKSBjb25zdCBm
aW5hbAorICAgIHZvaWQgdmlzaXROb2Rlc0NvbmN1cnJlbnRseShKU0M6OkFic3RyYWN0U2xvdFZp
c2l0b3ImIHZpc2l0b3IpIGNvbnN0IGZpbmFsCiAgICAgewogICAgICAgICB2aXNpdG9yLmFkZE9w
YXF1ZVJvb3Qocm9vdChtX3RhcmdldC5wdHIoKSkpOwogICAgICAgICBpZiAobV9hZGRlZE5vZGVz
KQpAQCAtMTA1LDcgKzEwNyw4IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiBub2RlTGlzdC5n
ZXQoKTsKICAgICB9CiAKLSAgICB2b2lkIHZpc2l0Tm9kZXNDb25jdXJyZW50bHkoSlNDOjpTbG90
VmlzaXRvciYgdmlzaXRvcikgY29uc3QgZmluYWwKKy8vICAgIHZvaWQgdmlzaXROb2Rlc0NvbmN1
cnJlbnRseShKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKSBjb25zdCBmaW5hbAorICAgIHZvaWQg
dmlzaXROb2Rlc0NvbmN1cnJlbnRseShKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3Ip
IGNvbnN0IGZpbmFsCiAgICAgewogICAgICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qocm9vdCht
X3RhcmdldC5wdHIoKSkpOwogICAgIH0KQEAgLTE2NCw3ICsxNjcsOCBAQCBwcml2YXRlOgogCiAg
ICAgU3RyaW5nIG9sZFZhbHVlKCkgb3ZlcnJpZGUgeyByZXR1cm4gU3RyaW5nKCk7IH0KIAotICAg
IHZvaWQgdmlzaXROb2Rlc0NvbmN1cnJlbnRseShKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKSBj
b25zdCBmaW5hbAorLy8gICAgdm9pZCB2aXNpdE5vZGVzQ29uY3VycmVudGx5KEpTQzo6U2xvdFZp
c2l0b3ImIHZpc2l0b3IpIGNvbnN0IGZpbmFsCisgICAgdm9pZCB2aXNpdE5vZGVzQ29uY3VycmVu
dGx5KEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikgY29uc3QgZmluYWwKICAgICB7
CiAgICAgICAgIG1fcmVjb3JkLT52aXNpdE5vZGVzQ29uY3VycmVudGx5KHZpc2l0b3IpOwogICAg
IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9NdXRhdGlvblJlY29yZC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9NdXRhdGlvblJlY29yZC5oCShyZXZpc2lvbiAyNzE0NDMp
CisrKyBTb3VyY2UvV2ViQ29yZS9kb20vTXV0YXRpb25SZWNvcmQuaAkod29ya2luZyBjb3B5KQpA
QCAtNzIsNyArNzIsOCBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIFN0cmluZyBvbGRWYWx1ZSgp
IHsgcmV0dXJuIFN0cmluZygpOyB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXROb2Rlc0NvbmN1
cnJlbnRseShKU0M6OlNsb3RWaXNpdG9yJikgY29uc3QgPSAwOworLy8gICAgdmlydHVhbCB2b2lk
IHZpc2l0Tm9kZXNDb25jdXJyZW50bHkoSlNDOjpTbG90VmlzaXRvciYpIGNvbnN0ID0gMDsKKyAg
ICB2aXJ0dWFsIHZvaWQgdmlzaXROb2Rlc0NvbmN1cnJlbnRseShKU0M6OkFic3RyYWN0U2xvdFZp
c2l0b3ImKSBjb25zdCA9IDA7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTDJSZW5kZXJpbmdDb250ZXh0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTDJSZW5kZXJpbmdDb250
ZXh0LmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
V2ViR0wyUmVuZGVyaW5nQ29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwMjgsMTggKzMw
MjgsMjAgQEAgYm9vbCBXZWJHTDJSZW5kZXJpbmdDb250ZXh0OjpjaGVja0FuZFRyYQogICAgIHJl
dHVybiB0cnVlOwogfQogCi12b2lkIFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OmFkZE1lbWJlcnNU
b09wYXF1ZVJvb3RzKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3ZvaWQgV2ViR0wyUmVu
ZGVyaW5nQ29udGV4dDo6YWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMoSlNDOjpTbG90VmlzaXRvciYg
dmlzaXRvcikKK3ZvaWQgV2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6YWRkTWVtYmVyc1RvT3BhcXVl
Um9vdHMoSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2U6OmFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKHZpc2l0b3IpOwogCiAg
ICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhvYmplY3RHcmFwaExvY2soKSk7CiAgICAgdmlzaXRv
ci5hZGRPcGFxdWVSb290KG1fcmVhZEZyYW1lYnVmZmVyQmluZGluZy5nZXQoKSk7CiAgICAgaWYg
KG1fcmVhZEZyYW1lYnVmZmVyQmluZGluZykKLSAgICAgICAgbV9yZWFkRnJhbWVidWZmZXJCaW5k
aW5nLT5hZGRNZW1iZXJzVG9PcGFxdWVSb290cyhsb2NrZXIsIHZpc2l0b3IpOworICAgICAgICBt
X3JlYWRGcmFtZWJ1ZmZlckJpbmRpbmctPmFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzMzAwKGxvY2tl
ciwgdmlzaXRvcik7CiAKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QobV9ib3VuZFRyYW5zZm9y
bUZlZWRiYWNrLmdldCgpKTsKICAgICBpZiAobV9ib3VuZFRyYW5zZm9ybUZlZWRiYWNrKQotICAg
ICAgICBtX2JvdW5kVHJhbnNmb3JtRmVlZGJhY2stPmFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKGxv
Y2tlciwgdmlzaXRvcik7CisvLyAgICAgICAgbV9ib3VuZFRyYW5zZm9ybUZlZWRiYWNrLT5hZGRN
ZW1iZXJzVG9PcGFxdWVSb290cyhsb2NrZXIsIHZpc2l0b3IpOworICAgICAgICBtX2JvdW5kVHJh
bnNmb3JtRmVlZGJhY2stPmFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzMTAwKGxvY2tlciwgdmlzaXRv
cik7CiAKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QobV9ib3VuZENvcHlSZWFkQnVmZmVyLmdl
dCgpKTsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QobV9ib3VuZENvcHlXcml0ZUJ1ZmZlci5n
ZXQoKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTDJSZW5kZXJpbmdD
b250ZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0wy
UmVuZGVyaW5nQ29udGV4dC5oCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9XZWJHTDJSZW5kZXJpbmdDb250ZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTI2
MSw3ICsyNjEsOCBAQCBwdWJsaWM6CiAKICAgICBib29sIGNoZWNrQW5kVHJhbnNsYXRlQXR0YWNo
bWVudHMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQ0dMZW51bSwgVmVjdG9yPEdDR0xlbnVt
PiYpOwogCi0gICAgdm9pZCBhZGRNZW1iZXJzVG9PcGFxdWVSb290cyhKU0M6OlNsb3RWaXNpdG9y
Jikgb3ZlcnJpZGU7CisvLyAgICB2b2lkIGFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKEpTQzo6U2xv
dFZpc2l0b3ImKSBvdmVycmlkZTsKKyAgICB2b2lkIGFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKEpT
Qzo6QWJzdHJhY3RTbG90VmlzaXRvciYpIG92ZXJyaWRlOwogCiBwcml2YXRlOgogICAgIFdlYkdM
MlJlbmRlcmluZ0NvbnRleHQoQ2FudmFzQmFzZSYsIEdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRl
cyk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEZyYW1lYnVmZmVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEZyYW1lYnVm
ZmVyLmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
V2ViR0xGcmFtZWJ1ZmZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYzLDcgKzYzLDggQEAgbmFt
ZXNwYWNlIHsKICAgICAgICAgdm9pZCBvbkRldGFjaGVkKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwg
R3JhcGhpY3NDb250ZXh0R0wqKSBvdmVycmlkZTsKICAgICAgICAgdm9pZCBhdHRhY2goR3JhcGhp
Y3NDb250ZXh0R0wqLCBHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIGF0dGFjaG1lbnQpIG92ZXJy
aWRlOwogICAgICAgICB2b2lkIHVuYXR0YWNoKEdyYXBoaWNzQ29udGV4dEdMKiwgR0NHTGVudW0g
dGFyZ2V0LCBHQ0dMZW51bSBhdHRhY2htZW50KSBvdmVycmlkZTsKLSAgICAgICAgdm9pZCBhZGRN
ZW1iZXJzVG9PcGFxdWVSb290cyhjb25zdCBBYnN0cmFjdExvY2tlciYsIEpTQzo6U2xvdFZpc2l0
b3ImKSBvdmVycmlkZTsKKy8vICAgICAgICB2b2lkIGFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKGNv
bnN0IEFic3RyYWN0TG9ja2VyJiwgSlNDOjpTbG90VmlzaXRvciYpIG92ZXJyaWRlOworICAgICAg
ICB2b2lkIGFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzNDAwKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwg
SlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJikgb3ZlcnJpZGU7CiAKICAgICAgICAgV2ViR0xSZW5k
ZXJidWZmZXJBdHRhY2htZW50KCkgeyB9OwogCkBAIC0xNDUsNyArMTQ2LDggQEAgbmFtZXNwYWNl
IHsKICAgICAgICAgICAgIGNvbnRleHQtPmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKHRhcmdldCwg
YXR0YWNobWVudCwgR3JhcGhpY3NDb250ZXh0R0w6OlJFTkRFUkJVRkZFUiwgMCk7CiAgICAgfQog
Ci0gICAgdm9pZCBXZWJHTFJlbmRlcmJ1ZmZlckF0dGFjaG1lbnQ6OmFkZE1lbWJlcnNUb09wYXF1
ZVJvb3RzKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikK
Ky8vICAgIHZvaWQgV2ViR0xSZW5kZXJidWZmZXJBdHRhY2htZW50OjphZGRNZW1iZXJzVG9PcGFx
dWVSb290cyhjb25zdCBBYnN0cmFjdExvY2tlciYsIEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3Ip
CisgICAgdm9pZCBXZWJHTFJlbmRlcmJ1ZmZlckF0dGFjaG1lbnQ6OmFkZE1lbWJlcnNUb09wYXF1
ZVJvb3RzNDAwKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9y
JiB2aXNpdG9yKQogICAgIHsKICAgICAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KG1fcmVuZGVy
YnVmZmVyLmdldCgpKTsKICAgICB9CkBAIC0xNjksNyArMTcxLDggQEAgbmFtZXNwYWNlIHsKICAg
ICAgICAgdm9pZCBvbkRldGFjaGVkKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgR3JhcGhpY3NDb250
ZXh0R0wqKSBvdmVycmlkZTsKICAgICAgICAgdm9pZCBhdHRhY2goR3JhcGhpY3NDb250ZXh0R0wq
LCBHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIGF0dGFjaG1lbnQpIG92ZXJyaWRlOwogICAgICAg
ICB2b2lkIHVuYXR0YWNoKEdyYXBoaWNzQ29udGV4dEdMKiwgR0NHTGVudW0gdGFyZ2V0LCBHQ0dM
ZW51bSBhdHRhY2htZW50KSBvdmVycmlkZTsKLSAgICAgICAgdm9pZCBhZGRNZW1iZXJzVG9PcGFx
dWVSb290cyhjb25zdCBBYnN0cmFjdExvY2tlciYsIEpTQzo6U2xvdFZpc2l0b3ImKSBvdmVycmlk
ZTsKKy8vICAgICAgICB2b2lkIGFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKGNvbnN0IEFic3RyYWN0
TG9ja2VyJiwgSlNDOjpTbG90VmlzaXRvciYpIG92ZXJyaWRlOworICAgICAgICB2b2lkIGFkZE1l
bWJlcnNUb09wYXF1ZVJvb3RzNDAwKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgSlNDOjpBYnN0cmFj
dFNsb3RWaXNpdG9yJikgb3ZlcnJpZGU7CiAKICAgICAgICAgV2ViR0xUZXh0dXJlQXR0YWNobWVu
dCgpIHsgfTsKIApAQCAtMjY3LDcgKzI3MCw4IEBAIG5hbWVzcGFjZSB7CiAjZW5kaWYKICAgICB9
CiAKLSAgICB2b2lkIFdlYkdMVGV4dHVyZUF0dGFjaG1lbnQ6OmFkZE1lbWJlcnNUb09wYXF1ZVJv
b3RzKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKKy8v
ICAgIHZvaWQgV2ViR0xUZXh0dXJlQXR0YWNobWVudDo6YWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMo
Y29uc3QgQWJzdHJhY3RMb2NrZXImLCBKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQorICAgIHZv
aWQgV2ViR0xUZXh0dXJlQXR0YWNobWVudDo6YWRkTWVtYmVyc1RvT3BhcXVlUm9vdHM0MDAoY29u
c3QgQWJzdHJhY3RMb2NrZXImLCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiAg
ICAgewogICAgICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QobV90ZXh0dXJlLmdldCgpKTsKICAg
ICB9CkBAIC03MjEsMTAgKzcyNSwxMSBAQCBHQ0dMZW51bSBXZWJHTEZyYW1lYnVmZmVyOjpnZXRE
cmF3QnVmZmVyCiAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dEdMOjpOT05FOwogfQogCi12b2lk
IFdlYkdMRnJhbWVidWZmZXI6OmFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKGNvbnN0IEFic3RyYWN0
TG9ja2VyJiBsb2NrZXIsIEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3ZvaWQgV2ViR0xG
cmFtZWJ1ZmZlcjo6YWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMoY29uc3QgQWJzdHJhY3RMb2NrZXIm
IGxvY2tlciwgSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgV2ViR0xGcmFtZWJ1ZmZl
cjo6YWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMzMDAoY29uc3QgQWJzdHJhY3RMb2NrZXImIGxvY2tl
ciwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGZvciAoYXV0byYg
ZW50cnkgOiBtX2F0dGFjaG1lbnRzKQotICAgICAgICBlbnRyeS52YWx1ZS0+YWRkTWVtYmVyc1Rv
T3BhcXVlUm9vdHMobG9ja2VyLCB2aXNpdG9yKTsKKyAgICAgICAgZW50cnkudmFsdWUtPmFkZE1l
bWJlcnNUb09wYXF1ZVJvb3RzNDAwKGxvY2tlciwgdmlzaXRvcik7CiB9CiAKIHZvaWQgV2ViR0xG
cmFtZWJ1ZmZlcjo6c2V0QXR0YWNobWVudEludGVybmFsKEdDR0xlbnVtIGF0dGFjaG1lbnQsIEdD
R0xlbnVtIHRleFRhcmdldCwgV2ViR0xUZXh0dXJlKiB0ZXh0dXJlLCBHQ0dMaW50IGxldmVsLCBH
Q0dMaW50IGxheWVyKQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xGcmFt
ZWJ1ZmZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdM
RnJhbWVidWZmZXIuaAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9j
YW52YXMvV2ViR0xGcmFtZWJ1ZmZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw4IEBA
CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgSlNDIHsKLWNsYXNzIFNsb3RW
aXNpdG9yOworLy9jbGFzcyBTbG90VmlzaXRvcjsKK2NsYXNzIEFic3RyYWN0U2xvdFZpc2l0b3I7
CiB9CiAKIG5hbWVzcGFjZSBXVEYgewpAQCAtNjUsNyArNjYsOCBAQCBwdWJsaWM6CiAgICAgICAg
IHZpcnR1YWwgdm9pZCBvbkRldGFjaGVkKGNvbnN0IFdURjo6QWJzdHJhY3RMb2NrZXImLCBHcmFw
aGljc0NvbnRleHRHTCopID0gMDsKICAgICAgICAgdmlydHVhbCB2b2lkIGF0dGFjaChHcmFwaGlj
c0NvbnRleHRHTCosIEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gYXR0YWNobWVudCkgPSAwOwog
ICAgICAgICB2aXJ0dWFsIHZvaWQgdW5hdHRhY2goR3JhcGhpY3NDb250ZXh0R0wqLCBHQ0dMZW51
bSB0YXJnZXQsIEdDR0xlbnVtIGF0dGFjaG1lbnQpID0gMDsKLSAgICAgICAgdmlydHVhbCB2b2lk
IGFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKGNvbnN0IFdURjo6QWJzdHJhY3RMb2NrZXImLCBKU0M6
OlNsb3RWaXNpdG9yJikgPSAwOworLy8gICAgICAgIHZpcnR1YWwgdm9pZCBhZGRNZW1iZXJzVG9P
cGFxdWVSb290cyhjb25zdCBXVEY6OkFic3RyYWN0TG9ja2VyJiwgSlNDOjpTbG90VmlzaXRvciYp
ID0gMDsKKyAgICAgICAgdmlydHVhbCB2b2lkIGFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzNDAwKGNv
bnN0IFdURjo6QWJzdHJhY3RMb2NrZXImLCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKSA9IDA7
CiAKICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIFdlYkdMQXR0YWNobWVudCgpOwpAQCAtMTE0LDcg
KzExNiw4IEBAIHB1YmxpYzoKIAogICAgIEdDR0xlbnVtIGdldERyYXdCdWZmZXIoR0NHTGVudW0p
OwogCi0gICAgdm9pZCBhZGRNZW1iZXJzVG9PcGFxdWVSb290cyhjb25zdCBXVEY6OkFic3RyYWN0
TG9ja2VyJiwgSlNDOjpTbG90VmlzaXRvciYpOworLy8gICAgdm9pZCBhZGRNZW1iZXJzVG9PcGFx
dWVSb290cyhjb25zdCBXVEY6OkFic3RyYWN0TG9ja2VyJiwgSlNDOjpTbG90VmlzaXRvciYpOwor
ICAgIHZvaWQgYWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMzMDAoY29uc3QgV1RGOjpBYnN0cmFjdExv
Y2tlciYsIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpOwogCiBwcml2YXRlOgogICAgIFdlYkdM
RnJhbWVidWZmZXIoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSYpOwpJbmRleDogU291cmNlL1dl
YkNvcmUvaHRtbC9jYW52YXMvV2ViR0xQcm9ncmFtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFByb2dyYW0uY3BwCShyZXZpc2lvbiAyNzE0NDMpCisr
KyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFByb2dyYW0uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yMDYsNyArMjA2LDggQEAgYm9vbCBXZWJHTFByb2dyYW06OmRldGFjaFNoYWRlcihj
b25zdCBBYgogICAgIH0KIH0KIAotdm9pZCBXZWJHTFByb2dyYW06OmFkZE1lbWJlcnNUb09wYXF1
ZVJvb3RzKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikK
Ky8vdm9pZCBXZWJHTFByb2dyYW06OmFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKGNvbnN0IEFic3Ry
YWN0TG9ja2VyJiwgSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgV2ViR0xQcm9ncmFt
OjphZGRNZW1iZXJzVG9PcGFxdWVSb290czIwMChjb25zdCBBYnN0cmFjdExvY2tlciYsIEpTQzo6
QWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJv
b3QobV92ZXJ0ZXhTaGFkZXIuZ2V0KCkpOwogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChtX2Zy
YWdtZW50U2hhZGVyLmdldCgpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dl
YkdMUHJvZ3JhbS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dl
YkdMUHJvZ3JhbS5oCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2Nh
bnZhcy9XZWJHTFByb2dyYW0uaAkod29ya2luZyBjb3B5KQpAQCAtMzUsNyArMzUsOCBAQAogI2lu
Y2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIEpTQyB7Ci1jbGFzcyBTbG90VmlzaXRv
cjsKKy8vY2xhc3MgU2xvdFZpc2l0b3I7CitjbGFzcyBBYnN0cmFjdFNsb3RWaXNpdG9yOwogfQog
CiBuYW1lc3BhY2UgV1RGIHsKQEAgLTg4LDcgKzg5LDggQEAgcHVibGljOgogICAgICAgICByZXR1
cm4gbV9yZXF1aXJlZFRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyQ291bnQ7CiAgICAgfQogCi0gICAg
dm9pZCBhZGRNZW1iZXJzVG9PcGFxdWVSb290cyhjb25zdCBXVEY6OkFic3RyYWN0TG9ja2VyJiwg
SlNDOjpTbG90VmlzaXRvciYpOworLy8gICAgdm9pZCBhZGRNZW1iZXJzVG9PcGFxdWVSb290cyhj
b25zdCBXVEY6OkFic3RyYWN0TG9ja2VyJiwgSlNDOjpTbG90VmlzaXRvciYpOworICAgIHZvaWQg
YWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMyMDAoY29uc3QgV1RGOjpBYnN0cmFjdExvY2tlciYsIEpT
Qzo6QWJzdHJhY3RTbG90VmlzaXRvciYpOwogCiBwcml2YXRlOgogICAgIFdlYkdMUHJvZ3JhbShX
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlJik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2Nh
bnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcAkocmV2aXNp
b24gMjcxNDQzKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc5MjcsMjMgKzc5MjcsMjYgQEAgdm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpkaXNwYXRjaAogICAgIHF1ZXVlVGFza1RvRGlz
cGF0Y2hFdmVudCgqY2FudmFzLCBUYXNrU291cmNlOjpXZWJHTCwgV2ViR0xDb250ZXh0RXZlbnQ6
OmNyZWF0ZShldmVudE5hbWVzKCkud2ViZ2xjb250ZXh0Y2hhbmdlZEV2ZW50LCBFdmVudDo6Q2Fu
QnViYmxlOjpObywgRXZlbnQ6OklzQ2FuY2VsYWJsZTo6WWVzLCBlbXB0eVN0cmluZygpKSk7CiB9
CiAKLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6YWRkTWVtYmVyc1RvT3BhcXVlUm9v
dHMoSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlOjphZGRNZW1iZXJzVG9PcGFxdWVSb290cyhKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9y
KQordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjphZGRNZW1iZXJzVG9PcGFxdWVSb290
cyhKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0byBsb2NrZXIg
PSBob2xkTG9jayhvYmplY3RHcmFwaExvY2soKSk7CiAKKyAgICAvLyBtbGFtIEZJWE1FOiB3aHkg
YXJlIHdlIG5vdCBhbHNvIHZpc2l0aW5nIG1fZGVmYXVsdFZlcnRleEFycmF5T2JqZWN0PworCiAg
ICAgdmlzaXRvci5hZGRPcGFxdWVSb290KG1fYm91bmRBcnJheUJ1ZmZlci5nZXQoKSk7CiAKICAg
ICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QobV9ib3VuZFZlcnRleEFycmF5T2JqZWN0LmdldCgpKTsK
ICAgICBpZiAobV9ib3VuZFZlcnRleEFycmF5T2JqZWN0KQotICAgICAgICBtX2JvdW5kVmVydGV4
QXJyYXlPYmplY3QtPmFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKGxvY2tlciwgdmlzaXRvcik7Cisg
ICAgICAgIG1fYm91bmRWZXJ0ZXhBcnJheU9iamVjdC0+YWRkTWVtYmVyc1RvT3BhcXVlUm9vdHM2
MDAobG9ja2VyLCB2aXNpdG9yKTsKIAogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChtX2N1cnJl
bnRQcm9ncmFtLmdldCgpKTsKICAgICBpZiAobV9jdXJyZW50UHJvZ3JhbSkKLSAgICAgICAgbV9j
dXJyZW50UHJvZ3JhbS0+YWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMobG9ja2VyLCB2aXNpdG9yKTsK
KyAgICAgICAgbV9jdXJyZW50UHJvZ3JhbS0+YWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMyMDAobG9j
a2VyLCB2aXNpdG9yKTsKIAogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChtX2ZyYW1lYnVmZmVy
QmluZGluZy5nZXQoKSk7CiAgICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nKQotICAgICAgICBt
X2ZyYW1lYnVmZmVyQmluZGluZy0+YWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMobG9ja2VyLCB2aXNp
dG9yKTsKKyAgICAgICAgbV9mcmFtZWJ1ZmZlckJpbmRpbmctPmFkZE1lbWJlcnNUb09wYXF1ZVJv
b3RzMzAwKGxvY2tlciwgdmlzaXRvcik7CiAKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QobV9y
ZW5kZXJidWZmZXJCaW5kaW5nLmdldCgpKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9j
YW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuaAkocmV2aXNpb24g
MjcxNDQzKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01OCw3ICs1OCw4IEBACiAjZW5kaWYKIAogbmFt
ZXNwYWNlIEpTQyB7Ci1jbGFzcyBTbG90VmlzaXRvcjsKKy8vY2xhc3MgU2xvdFZpc2l0b3I7Citj
bGFzcyBBYnN0cmFjdFNsb3RWaXNpdG9yOwogfQogCiBuYW1lc3BhY2UgV1RGIHsKQEAgLTQxMCw3
ICs0MTEsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCByZWN5Y2xlQ29udGV4dCgpIG92ZXJyaWRlOwog
ICAgIHZvaWQgZGlzcGF0Y2hDb250ZXh0Q2hhbmdlZE5vdGlmaWNhdGlvbigpIG92ZXJyaWRlOwog
Ci0gICAgdmlydHVhbCB2b2lkIGFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKEpTQzo6U2xvdFZpc2l0
b3ImKTsKKy8vICAgIHZpcnR1YWwgdm9pZCBhZGRNZW1iZXJzVG9PcGFxdWVSb290cyhKU0M6OlNs
b3RWaXNpdG9yJik7CisgICAgdmlydHVhbCB2b2lkIGFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKEpT
Qzo6QWJzdHJhY3RTbG90VmlzaXRvciYpOwogICAgIC8vIFRoaXMgbG9jayBtdXN0IGJlIGhlbGQg
YWNyb3NzIGFsbCBtdXRhdGlvbnMgb2YgY29udGFpbmVycyBsaWtlCiAgICAgLy8gVmVjdG9ycywg
SGFzaFNldHMsIGV0Yy4gd2hpY2ggY29udGFpbiBSZWZQdHI8V2ViR0xPYmplY3Q+LCBhbmQKICAg
ICAvLyB3aGljaCBhcmUgdHJhdmVyc2VkIGJ5IGFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKCkgb3Ig
YW55IG9mIHRoZQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xUcmFuc2Zv
cm1GZWVkYmFjay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
V2ViR0xUcmFuc2Zvcm1GZWVkYmFjay5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVHJhbnNmb3JtRmVlZGJhY2suY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zMCw4ICszMCw5IEBACiAKICNpbmNsdWRlICJXZWJHTENvbnRleHRHcm91cC5oIgog
I2luY2x1ZGUgIldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuaCIKLSNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9TbG90VmlzaXRvci5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1Nsb3RWaXNp
dG9ySW5saW5lcy5oPgorLy8jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvU2xvdFZpc2l0b3IuaD4K
Ky8vI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1Nsb3RWaXNpdG9ySW5saW5lcy5oPgorI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL0Fic3RyYWN0U2xvdFZpc2l0b3JJbmxpbmVzLmg+CiAjaW5jbHVk
ZSA8d3RmL0xvY2suaD4KICNpbmNsdWRlIDx3dGYvTG9ja2VyLmg+CiAKQEAgLTkzLDE0ICs5NCwx
NSBAQCBib29sIFdlYkdMVHJhbnNmb3JtRmVlZGJhY2s6Omhhc0Vub3VnaEJ1CiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKLXZvaWQgV2ViR0xUcmFuc2Zvcm1GZWVkYmFjazo6YWRkTWVtYmVyc1RvT3Bh
cXVlUm9vdHMoY29uc3QgQWJzdHJhY3RMb2NrZXImIGxvY2tlciwgSlNDOjpTbG90VmlzaXRvciYg
dmlzaXRvcikKKy8vdm9pZCBXZWJHTFRyYW5zZm9ybUZlZWRiYWNrOjphZGRNZW1iZXJzVG9PcGFx
dWVSb290cyhjb25zdCBBYnN0cmFjdExvY2tlciYgbG9ja2VyLCBKU0M6OlNsb3RWaXNpdG9yJiB2
aXNpdG9yKQordm9pZCBXZWJHTFRyYW5zZm9ybUZlZWRiYWNrOjphZGRNZW1iZXJzVG9PcGFxdWVS
b290czEwMChjb25zdCBBYnN0cmFjdExvY2tlciYgbG9ja2VyLCBKU0M6OkFic3RyYWN0U2xvdFZp
c2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgZm9yIChhdXRvJiBidWZmZXIgOiBtX2JvdW5kSW5kZXhl
ZFRyYW5zZm9ybUZlZWRiYWNrQnVmZmVycykKICAgICAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290
KGJ1ZmZlci5nZXQoKSk7CiAKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QobV9wcm9ncmFtLmdl
dCgpKTsKICAgICBpZiAobV9wcm9ncmFtKQotICAgICAgICBtX3Byb2dyYW0tPmFkZE1lbWJlcnNU
b09wYXF1ZVJvb3RzKGxvY2tlciwgdmlzaXRvcik7CisgICAgICAgIG1fcHJvZ3JhbS0+YWRkTWVt
YmVyc1RvT3BhcXVlUm9vdHMyMDAobG9ja2VyLCB2aXNpdG9yKTsKIH0KIAogdm9pZCBXZWJHTFRy
YW5zZm9ybUZlZWRiYWNrOjp1bmJpbmRCdWZmZXIoY29uc3QgQWJzdHJhY3RMb2NrZXImLCBXZWJH
TEJ1ZmZlciYgYnVmZmVyKQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xU
cmFuc2Zvcm1GZWVkYmFjay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2Fu
dmFzL1dlYkdMVHJhbnNmb3JtRmVlZGJhY2suaAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNl
L1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xUcmFuc2Zvcm1GZWVkYmFjay5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zMSw3ICszMSw4IEBACiAjaW5jbHVkZSAiV2ViR0xTaGFyZWRPYmplY3QuaCIKIAog
bmFtZXNwYWNlIEpTQyB7Ci1jbGFzcyBTbG90VmlzaXRvcjsKKy8vY2xhc3MgU2xvdFZpc2l0b3I7
CitjbGFzcyBBYnN0cmFjdFNsb3RWaXNpdG9yOwogfQogCiBuYW1lc3BhY2UgV1RGIHsKQEAgLTcw
LDcgKzcxLDggQEAgcHVibGljOgogICAgIAogICAgIGJvb2wgaGFzRW5vdWdoQnVmZmVycyhHQ0dM
dWludCBudW1SZXF1aXJlZCkgY29uc3Q7CiAKLSAgICB2b2lkIGFkZE1lbWJlcnNUb09wYXF1ZVJv
b3RzKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgSlNDOjpTbG90VmlzaXRvciYpOworLy8gICAgdm9p
ZCBhZGRNZW1iZXJzVG9PcGFxdWVSb290cyhjb25zdCBBYnN0cmFjdExvY2tlciYsIEpTQzo6U2xv
dFZpc2l0b3ImKTsKKyAgICB2b2lkIGFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzMTAwKGNvbnN0IEFi
c3RyYWN0TG9ja2VyJiwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAKIHByaXZhdGU6CiAg
ICAgV2ViR0xUcmFuc2Zvcm1GZWVkYmFjayhXZWJHTDJSZW5kZXJpbmdDb250ZXh0Jik7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFZlcnRleEFycmF5T2JqZWN0QmFzZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xWZXJ0ZXhB
cnJheU9iamVjdEJhc2UuY3BwCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9XZWJHTFZlcnRleEFycmF5T2JqZWN0QmFzZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI5LDggKzI5LDkgQEAKICNpZiBFTkFCTEUoV0VCR0wpCiAKICNpbmNsdWRlICJXZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvU2xvdFZpc2l0
b3IuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9TbG90VmlzaXRvcklubGluZXMuaD4KKy8v
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1Nsb3RWaXNpdG9yLmg+CisvLyNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9TbG90VmlzaXRvcklubGluZXMuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9BYnN0cmFjdFNsb3RWaXNpdG9ySW5saW5lcy5oPgogI2luY2x1ZGUgPHd0Zi9Mb2NrZXIuaD4K
IAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMTA4LDcgKzEwOSw4IEBAIHZvaWQgV2ViR0xWZXJ0
ZXhBcnJheU9iamVjdEJhc2U6OnNldFZlcnQKICAgICBtX3ZlcnRleEF0dHJpYlN0YXRlW2luZGV4
XS5kaXZpc29yID0gZGl2aXNvcjsKIH0KIAotdm9pZCBXZWJHTFZlcnRleEFycmF5T2JqZWN0QmFz
ZTo6YWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMoY29uc3QgQWJzdHJhY3RMb2NrZXImLCBKU0M6OlNs
b3RWaXNpdG9yJiB2aXNpdG9yKQorLy92b2lkIFdlYkdMVmVydGV4QXJyYXlPYmplY3RCYXNlOjph
ZGRNZW1iZXJzVG9PcGFxdWVSb290czYwMChjb25zdCBBYnN0cmFjdExvY2tlciYsIEpTQzo6U2xv
dFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIFdlYkdMVmVydGV4QXJyYXlPYmplY3RCYXNlOjphZGRN
ZW1iZXJzVG9PcGFxdWVSb290czYwMChjb25zdCBBYnN0cmFjdExvY2tlciYsIEpTQzo6QWJzdHJh
Y3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QobV9i
b3VuZEVsZW1lbnRBcnJheUJ1ZmZlci5nZXQoKSk7CiAgICAgZm9yIChhdXRvJiBzdGF0ZSA6IG1f
dmVydGV4QXR0cmliU3RhdGUpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJH
TFZlcnRleEFycmF5T2JqZWN0QmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0
bWwvY2FudmFzL1dlYkdMVmVydGV4QXJyYXlPYmplY3RCYXNlLmgJKHJldmlzaW9uIDI3MTQ0MykK
KysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVmVydGV4QXJyYXlPYmplY3RCYXNl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDggQEAKICNpbmNsdWRlICJXZWJHTENvbnRl
eHRPYmplY3QuaCIKIAogbmFtZXNwYWNlIEpTQyB7Ci1jbGFzcyBTbG90VmlzaXRvcjsKKy8vY2xh
c3MgU2xvdFZpc2l0b3I7CitjbGFzcyBBYnN0cmFjdFNsb3RWaXNpdG9yOwogfQogCiBuYW1lc3Bh
Y2UgV1RGIHsKQEAgLTc2LDcgKzc3LDggQEAgcHVibGljOgogCiAgICAgdm9pZCBzZXRWZXJ0ZXhB
dHRyaWJEaXZpc29yKEdDR0x1aW50IGluZGV4LCBHQ0dMdWludCBkaXZpc29yKTsKIAotICAgIHZv
aWQgYWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMoY29uc3QgV1RGOjpBYnN0cmFjdExvY2tlciYsIEpT
Qzo6U2xvdFZpc2l0b3ImKTsKKy8vICAgIHZvaWQgYWRkTWVtYmVyc1RvT3BhcXVlUm9vdHM2MDAo
Y29uc3QgV1RGOjpBYnN0cmFjdExvY2tlciYsIEpTQzo6U2xvdFZpc2l0b3ImKTsKKyAgICB2b2lk
IGFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzNjAwKGNvbnN0IFdURjo6QWJzdHJhY3RMb2NrZXImLCBK
U0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKTsKIAogcHJvdGVjdGVkOgogICAgIFdlYkdMVmVydGV4
QXJyYXlPYmplY3RCYXNlKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UmLCBUeXBlKTsK
</data>
<flag name="commit-queue"
          id="435308"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>417671</attachid>
            <date>2021-01-14 17:15:18 -0800</date>
            <delta_ts>2021-02-01 11:11:37 -0800</delta_ts>
            <desc>work in progress.</desc>
            <filename>bug-217274.patch</filename>
            <type>text/plain</type>
            <size>465138</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDI3MTQ0MykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtNjEwLDYgKzYxMCw4IEBAIHNldChKYXZhU2NyaXB0Q29yZV9QUklWQVRFX0ZSQU1FV09SS19I
RUEKICAgICBkb21qaXQvRE9NSklUSGVhcFJhbmdlLmgKICAgICBkb21qaXQvRE9NSklUU2lnbmF0
dXJlLmgKIAorICAgIGhlYXAvQWJzdHJhY3RTbG90VmlzaXRvci5oCisgICAgaGVhcC9BYnN0cmFj
dFNsb3RWaXNpdG9ySW5saW5lcy5oCiAgICAgaGVhcC9BbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmgK
ICAgICBoZWFwL0FsbG9jYXRpb25GYWlsdXJlTW9kZS5oCiAgICAgaGVhcC9BbGxvY2F0b3IuaApA
QCAtNjI5LDYgKzYzMSw4IEBAIHNldChKYXZhU2NyaXB0Q29yZV9QUklWQVRFX0ZSQU1FV09SS19I
RUEKICAgICBoZWFwL0NvbnN0cmFpbnRDb25jdXJyZW5jeS5oCiAgICAgaGVhcC9Db25zdHJhaW50
UGFyYWxsZWxpc20uaAogICAgIGhlYXAvQ29uc3RyYWludFZvbGF0aWxpdHkuaAorICAgIGhlYXAv
RGVidWdTbG90VmlzaXRvci5oCisgICAgaGVhcC9EZWJ1Z1Nsb3RWaXNpdG9ySW5saW5lcy5oCiAg
ICAgaGVhcC9EZWZlckdDLmgKICAgICBoZWFwL0RlbGV0ZUFsbENvZGVFZmZvcnQuaAogICAgIGhl
YXAvRGVzdHJ1Y3Rpb25Nb2RlLmgKQEAgLTY4Myw2ICs2ODcsNyBAQCBzZXQoSmF2YVNjcmlwdENv
cmVfUFJJVkFURV9GUkFNRVdPUktfSEVBCiAgICAgaGVhcC9TaW1wbGVNYXJraW5nQ29uc3RyYWlu
dC5oCiAgICAgaGVhcC9TbG90VmlzaXRvci5oCiAgICAgaGVhcC9TbG90VmlzaXRvcklubGluZXMu
aAorICAgIGhlYXAvU2xvdFZpc2l0b3JNYWNyb3MuaAogICAgIGhlYXAvU3Ryb25nLmgKICAgICBo
ZWFwL1N0cm9uZ0lubGluZXMuaAogICAgIGhlYXAvU3Vic3BhY2UuaApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9Tb3VyY2VzLnR4dAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL1NvdXJjZXMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC01MDMsNiArNTAzLDcgQEAgZnRsL0ZU
TFN0YXRlLmNwcAogZnRsL0ZUTFRodW5rcy5jcHAKIGZ0bC9GVExWYWx1ZVJhbmdlLmNwcAogCito
ZWFwL0Fic3RyYWN0U2xvdFZpc2l0b3IuY3BwCiBoZWFwL0FsaWduZWRNZW1vcnlBbGxvY2F0b3Iu
Y3BwCiBoZWFwL0FsbG9jYXRvci5jcHAKIGhlYXAvQmxvY2tEaXJlY3RvcnkuY3BwCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQVBJV3JhcHBlck9iamVjdC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNBUElXcmFwcGVyT2JqZWN0LmgJKHJldmlz
aW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNBUElXcmFwcGVyT2Jq
ZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00MSw3ICs0MSw3IEBAIHB1YmxpYzoKICAgICBzdGF0
aWMgdm9pZCBzdWJzcGFjZUZvcihWTSYpIHsgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsg
fQogICAgIAogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKLSAgICBzdGF0aWMgdm9pZCB2
aXNpdENoaWxkcmVuKEpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX0VY
UE9SVF9WSVNJVF9DSElMRFJFTjsKICAgICAKICAgICB2b2lkKiB3cmFwcGVkT2JqZWN0KCkgeyBy
ZXR1cm4gbV93cmFwcGVkT2JqZWN0OyB9CiAgICAgdm9pZCBzZXRXcmFwcGVkT2JqZWN0KHZvaWQq
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNBUElXcmFwcGVyT2JqZWN0Lm1t
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNBUElXcmFwcGVyT2Jq
ZWN0Lm1tCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pT
QVBJV3JhcHBlck9iamVjdC5tbQkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM3LDcgKzM3LDcgQEAKIGNs
YXNzIEpTQVBJV3JhcHBlck9iamVjdEhhbmRsZU93bmVyIGZpbmFsIDogcHVibGljIEpTQzo6V2Vh
a0hhbmRsZU93bmVyIHsKIHB1YmxpYzoKICAgICB2b2lkIGZpbmFsaXplKEpTQzo6SGFuZGxlPEpT
Qzo6VW5rbm93bj4sIHZvaWQqKSBmaW5hbDsKLSAgICBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1
ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6U2xv
dFZpc2l0b3ImLCBjb25zdCBjaGFyKiopIGZpbmFsOworICAgIGJvb2wgaXNSZWFjaGFibGVGcm9t
T3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCwgSlND
OjpBYnN0cmFjdFNsb3RWaXNpdG9yJiwgY29uc3QgY2hhcioqKSBmaW5hbDsKIH07CiAKIHN0YXRp
YyBKU0FQSVdyYXBwZXJPYmplY3RIYW5kbGVPd25lcioganNBUElXcmFwcGVyT2JqZWN0SGFuZGxl
T3duZXIoKQpAQCAtNTYsNyArNTYsNyBAQCB2b2lkIEpTQVBJV3JhcHBlck9iamVjdEhhbmRsZU93
bmVyOjpmaW5hCiAgICAgSlNDOjpXZWFrU2V0OjpkZWFsbG9jYXRlKEpTQzo6V2Vha0ltcGw6OmFz
V2Vha0ltcGwoaGFuZGxlLnNsb3QoKSkpOwogfQogCi1ib29sIEpTQVBJV3JhcHBlck9iamVjdEhh
bmRsZU93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVu
a25vd24+IGhhbmRsZSwgdm9pZCosIEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNo
YXIqKikKK2Jvb2wgSlNBUElXcmFwcGVyT2JqZWN0SGFuZGxlT3duZXI6OmlzUmVhY2hhYmxlRnJv
bU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgSlND
OjpBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiopCiB7CiAgICAgSlND
OjpKU0FQSVdyYXBwZXJPYmplY3QqIHdyYXBwZXJPYmplY3QgPSBKU0M6OmpzQ2FzdDxKU0M6OkpT
QVBJV3JhcHBlck9iamVjdCo+KGhhbmRsZS5nZXQoKS5hc0NlbGwoKSk7CiAgICAgLy8gV2UgdXNl
IHRoZSBKU0dsb2JhbE9iamVjdCB3aGVuIHByb2Nlc3Npbmcgd2VhayBoYW5kbGVzIHRvIHByZXZl
bnQgdGhlIHNpdHVhdGlvbiB3aGVyZSB1c2luZwpAQCAtNzMsNiArNzMsOCBAQCBzdGF0aWMgSlND
X0RFQ0xBUkVfSE9TVF9GVU5DVElPTihjb25zdHJ1CiBzdGF0aWMgSlNDX0RFQ0xBUkVfQ1VTVE9N
X0dFVFRFUihjYWxsYmFja0dldHRlckpTQVBJV3JhcHBlck9iamVjdENhbGxiYWNrT2JqZWN0KTsK
IHN0YXRpYyBKU0NfREVDTEFSRV9DVVNUT01fR0VUVEVSKHN0YXRpY0Z1bmN0aW9uR2V0dGVySlNB
UElXcmFwcGVyT2JqZWN0Q2FsbGJhY2tPYmplY3QpOwogCitERUZJTkVfVEVNUExBVEVfVklTSVRf
Q0hJTERSRU4odGVtcGxhdGU8PiwgSlNDYWxsYmFja09iamVjdDxKU0FQSVdyYXBwZXJPYmplY3Q+
KTsKKwogdGVtcGxhdGUgPD4gY29uc3QgQ2xhc3NJbmZvIEpTQ2FsbGJhY2tPYmplY3Q8SlNBUElX
cmFwcGVyT2JqZWN0Pjo6c19pbmZvID0geyAiSlNBUElXcmFwcGVyT2JqZWN0IiwgJkJhc2U6OnNf
aW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU0NhbGxiYWNrT2Jq
ZWN0KSB9OwogdGVtcGxhdGUgPD4gY29uc3QgYm9vbCBKU0NhbGxiYWNrT2JqZWN0PEpTQVBJV3Jh
cHBlck9iamVjdD46Om5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOwogCkBAIC0xMjMsNyArMTI1LDgg
QEAgdm9pZCBKU0FQSVdyYXBwZXJPYmplY3Q6OnNldFdyYXBwZWRPYmplYwogICAgIG1fd3JhcHBl
ZE9iamVjdCA9IFtzdGF0aWNfY2FzdDxpZD4od3JhcHBlZE9iamVjdCkgcmV0YWluXTsKIH0KIAot
dm9pZCBKU0FQSVdyYXBwZXJPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBKU0M6
OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQg
SlNBUElXcmFwcGVyT2JqZWN0Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0
b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNBUElXcmFwcGVyT2JqZWN0KiB0aGlzT2JqZWN0ID0gSlND
Ojpqc0Nhc3Q8SlNBUElXcmFwcGVyT2JqZWN0Kj4oY2VsbCk7CiAgICAgQmFzZTo6dmlzaXRDaGls
ZHJlbihjZWxsLCB2aXNpdG9yKTsKQEAgLTEzMyw2ICsxMzYsOCBAQCB2b2lkIEpTQVBJV3JhcHBl
ck9iamVjdDo6dmlzaXRDaGlsZHJlbihKCiAgICAgICAgIHNjYW5FeHRlcm5hbE9iamVjdEdyYXBo
KHZpc2l0b3Iudm0oKSwgdmlzaXRvciwgd3JhcHBlZE9iamVjdCk7CiB9CiAKK0RFRklORV9FWFBP
UlRfVklTSVRfQ0hJTERSRU4oSlNBUElXcmFwcGVyT2JqZWN0KTsKKwogdGVtcGxhdGUgPD4KIElz
b1N1YnNwYWNlKiBKU0NhbGxiYWNrT2JqZWN0PEpTQVBJV3JhcHBlck9iamVjdD46OnN1YnNwYWNl
Rm9ySW1wbChWTSYgdm0sIFN1YnNwYWNlQWNjZXNzIG1vZGUpCiB7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdC5jcHAJKHJldmlzaW9uIDI3MTQ0
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA2LTIw
MTcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAw
Ni0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykg
MjAwNyBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAt
NDEsNiArNDEsOSBAQCBzdGF0aWMgSlNDX0RFQ0xBUkVfQ1VTVE9NX0dFVFRFUihzdGF0aWNGCiBz
dGF0aWMgSlNDX0RFQ0xBUkVfQ1VTVE9NX0dFVFRFUihjYWxsYmFja0dldHRlckpTR2xvYmFsT2Jq
ZWN0Q2FsbGJhY2tPYmplY3QpOwogc3RhdGljIEpTQ19ERUNMQVJFX0NVU1RPTV9HRVRURVIoc3Rh
dGljRnVuY3Rpb25HZXR0ZXJKU0dsb2JhbE9iamVjdENhbGxiYWNrT2JqZWN0KTsKIAorREVGSU5F
X1RFTVBMQVRFX1ZJU0lUX0NISUxEUkVOKHRlbXBsYXRlPD4sIEpTQ2FsbGJhY2tPYmplY3Q8SlNO
b25GaW5hbE9iamVjdD4pOworREVGSU5FX1RFTVBMQVRFX1ZJU0lUX0NISUxEUkVOKHRlbXBsYXRl
PD4sIEpTQ2FsbGJhY2tPYmplY3Q8SlNHbG9iYWxPYmplY3Q+KTsKKwogLy8gRGVmaW5lIHRoZSB0
d28gdHlwZXMgb2YgSlNDYWxsYmFja09iamVjdHMgd2Ugc3VwcG9ydC4KIHRlbXBsYXRlIDw+IGNv
bnN0IENsYXNzSW5mbyBKU0NhbGxiYWNrT2JqZWN0PEpTTm9uRmluYWxPYmplY3Q+OjpzX2luZm8g
PSB7ICJDYWxsYmFja09iamVjdCIsICZCYXNlOjpzX2luZm8sIG51bGxwdHIsIG51bGxwdHIsIENS
RUFURV9NRVRIT0RfVEFCTEUoSlNDYWxsYmFja09iamVjdCkgfTsKIHRlbXBsYXRlIDw+IGNvbnN0
IENsYXNzSW5mbyBKU0NhbGxiYWNrT2JqZWN0PEpTR2xvYmFsT2JqZWN0Pjo6c19pbmZvID0geyAi
Q2FsbGJhY2tHbG9iYWxPYmplY3QiLCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBudWxscHRyLCBD
UkVBVEVfTUVUSE9EX1RBQkxFKEpTQ2FsbGJhY2tPYmplY3QpIH07CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3QuaAkocmV2aXNpb24gMjcxNDQzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTY5LDcgKzY5LDEwIEBAIHB1YmxpYzoKICAgICAgICAgbV9wcml2YXRlUHJvcGVy
dGllcy0+ZGVsZXRlUHJpdmF0ZVByb3BlcnR5KHByb3BlcnR5TmFtZSk7CiAgICAgfQogCi0gICAg
dm9pZCB2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorICAgIERFQ0xBUkVfVklT
SVRfQ0hJTERSRU47CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgorICAgIHZvaWQg
dmlzaXRDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogICAgIHsKICAgICAgICAgSlNQcml2YXRl
UHJvcGVydHlNYXAqIHByb3BlcnRpZXMgPSBtX3ByaXZhdGVQcm9wZXJ0aWVzLmdldCgpOwogICAg
ICAgICBpZiAoIXByb3BlcnRpZXMpCkBAIC0xMDMsNyArMTA2LDggQEAgcHVibGljOgogICAgICAg
ICAgICAgbV9wcm9wZXJ0eU1hcC5yZW1vdmUocHJvcGVydHlOYW1lLmltcGwoKSk7CiAgICAgICAg
IH0KIAotICAgICAgICB2b2lkIHZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisg
ICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+CisgICAgICAgIHZvaWQgdmlzaXRDaGls
ZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogICAgICAgICB7CiAgICAgICAgICAgICBMb2NrSG9sZGVy
IGxvY2tlcihtX2xvY2spOwogICAgICAgICAgICAgZm9yIChhdXRvJiBwYWlyIDogbV9wcm9wZXJ0
eU1hcCkgewpAQCAtMjE2LDEzICsyMjAsNyBAQCBwcml2YXRlOgogICAgIHN0YXRpYyBDYWxsRGF0
YSBnZXRDb25zdHJ1Y3REYXRhKEpTQ2VsbCopOwogICAgIHN0YXRpYyBDYWxsRGF0YSBnZXRDYWxs
RGF0YShKU0NlbGwqKTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBj
ZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKLSAgICB7Ci0gICAgICAgIEpTQ2FsbGJhY2tPYmpl
Y3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNDYWxsYmFja09iamVjdCo+KGNlbGwpOwotICAgICAg
ICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKChzdGF0aWNfY2FzdDxQYXJlbnQqPih0aGlzT2Jq
ZWN0KSksIEpTQ2FsbGJhY2tPYmplY3Q8UGFyZW50Pjo6aW5mbygpKTsKLSAgICAgICAgUGFyZW50
Ojp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwotICAgICAgICB0aGlzT2JqZWN0
LT5tX2NhbGxiYWNrT2JqZWN0RGF0YS0+dmlzaXRDaGlsZHJlbih2aXNpdG9yKTsKLSAgICB9Cisg
ICAgREVDTEFSRV9URU1QTEFURV9WSVNJVF9DSElMRFJFTjsKIAogICAgIHZvaWQgaW5pdChKU0ds
b2JhbE9iamVjdCopOwogIApAQCAtMjQ1LDYgKzI0MywxNiBAQCBwcml2YXRlOgogICAgIGNvbnN0
IENsYXNzSW5mbyogbV9jbGFzc0luZm8geyBudWxscHRyIH07CiB9OwogCit0ZW1wbGF0ZSA8Y2xh
c3MgUGFyZW50PgordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNDYWxsYmFja09i
amVjdDxQYXJlbnQ+Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZp
c2l0b3IpCit7CisgICAgSlNDYWxsYmFja09iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0Nh
bGxiYWNrT2JqZWN0Kj4oY2VsbCk7CisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUygoc3Rh
dGljX2Nhc3Q8UGFyZW50Kj4odGhpc09iamVjdCkpLCBKU0NhbGxiYWNrT2JqZWN0PFBhcmVudD46
OmluZm8oKSk7CisgICAgUGFyZW50Ojp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3Ip
OworICAgIHRoaXNPYmplY3QtPm1fY2FsbGJhY2tPYmplY3REYXRhLT52aXNpdENoaWxkcmVuKHZp
c2l0b3IpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogLy8gaW5jbHVkZSB0aGUgYWN0dWFs
IHRlbXBsYXRlIGNsYXNzIGltcGxlbWVudGF0aW9uCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvQVBJL0pTTWFuYWdlZFZhbHVlLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9BUEkvSlNNYW5hZ2VkVmFsdWUubW0JKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9BUEkvSlNNYW5hZ2VkVmFsdWUubW0JKHdvcmtpbmcgY29weSkKQEAgLTQy
LDcgKzQyLDcgQEAKIGNsYXNzIEpTTWFuYWdlZFZhbHVlSGFuZGxlT3duZXIgZmluYWwgOiBwdWJs
aWMgSlNDOjpXZWFrSGFuZGxlT3duZXIgewogcHVibGljOgogICAgIHZvaWQgZmluYWxpemUoSlND
OjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCkgZmluYWw7Ci0gICAgYm9vbCBp
c1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lk
KiBjb250ZXh0LCBKU0M6OlNsb3RWaXNpdG9yJiwgY29uc3QgY2hhcioqKSBmaW5hbDsKKyAgICBi
b29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4s
IHZvaWQqIGNvbnRleHQsIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYsIGNvbnN0IGNoYXIqKikg
ZmluYWw7CiB9OwogCiBzdGF0aWMgSlNNYW5hZ2VkVmFsdWVIYW5kbGVPd25lciYgbWFuYWdlZFZh
bHVlSGFuZGxlT3duZXIoKQpAQCAtMTgwLDcgKzE4MCw3IEBAIEBpbnRlcmZhY2UgSlNNYW5hZ2Vk
VmFsdWUgKFByaXZhdGVNZXRob2QKIC0gKHZvaWQpZGlzY29ubmVjdFZhbHVlOwogQGVuZAogCi1i
b29sIEpTTWFuYWdlZFZhbHVlSGFuZGxlT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3Rz
KEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6U2xvdFZpc2l0
b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCitib29sIEpTTWFuYWdlZFZhbHVlSGFu
ZGxlT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5r
bm93bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvciwg
Y29uc3QgY2hhcioqIHJlYXNvbikKIHsKICAgICBpZiAoVU5MSUtFTFkocmVhc29uKSkKICAgICAg
ICAgKnJlYXNvbiA9ICJKU01hbmFnZWRWYWx1ZSBpcyBvcGFxdWUgcm9vdCI7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTTWFya2luZ0NvbnN0cmFpbnRQcml2YXRlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTTWFya2luZ0NvbnN0cmFpbnRQ
cml2YXRlLmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQ
SS9KU01hcmtpbmdDb25zdHJhaW50UHJpdmF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDcg
KzM2LDcgQEAgbmFtZXNwYWNlIHsKIEF0b21pYzx1bnNpZ25lZD4gY29uc3RyYWludENvdW50ZXI7
CiAKIHN0cnVjdCBNYXJrZXIgOiBKU01hcmtlciB7Ci0gICAgU2xvdFZpc2l0b3IqIHZpc2l0b3I7
CisgICAgQWJzdHJhY3RTbG90VmlzaXRvciogdmlzaXRvcjsKIH07CiAKIGJvb2wgaXNNYXJrZWQo
SlNNYXJrZXJSZWYgbWFya2VyUmVmLCBKU09iamVjdFJlZiBvYmplY3RSZWYpCkBAIC03NCwxMSAr
NzQsMTEgQEAgdm9pZCBKU0NvbnRleHRHcm91cEFkZE1hcmtpbmdDb25zdHJhaW50KAogICAgICAg
ICB0b0NTdHJpbmcoIkFtYyIsIGNvbnN0cmFpbnRJbmRleCwgIigiLCBSYXdQb2ludGVyKGJpdHdp
c2VfY2FzdDx2b2lkKj4oY29uc3RyYWludENhbGxiYWNrKSksICIpIiksCiAgICAgICAgIHRvQ1N0
cmluZygiQVBJIE1hcmtpbmcgQ29uc3RyYWludCAjIiwgY29uc3RyYWludEluZGV4LCAiICgiLCBS
YXdQb2ludGVyKGJpdHdpc2VfY2FzdDx2b2lkKj4oY29uc3RyYWludENhbGxiYWNrKSksICIsICIs
IFJhd1BvaW50ZXIodXNlckRhdGEpLCAiKSIpLAogICAgICAgICBbY29uc3RyYWludENhbGxiYWNr
LCB1c2VyRGF0YV0KLSAgICAgICAgKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvcikgeworICAgICAg
ICAoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikgewogICAgICAgICAgICAgTWFya2VyIG1h
cmtlcjsKICAgICAgICAgICAgIG1hcmtlci5Jc01hcmtlZCA9IGlzTWFya2VkOwogICAgICAgICAg
ICAgbWFya2VyLk1hcmsgPSBtYXJrOwotICAgICAgICAgICAgbWFya2VyLnZpc2l0b3IgPSAmc2xv
dFZpc2l0b3I7CisgICAgICAgICAgICBtYXJrZXIudmlzaXRvciA9ICZ2aXNpdG9yOwogICAgICAg
ICAgICAgCiAgICAgICAgICAgICBjb25zdHJhaW50Q2FsbGJhY2soJm1hcmtlciwgdXNlckRhdGEp
OwogICAgICAgICB9LApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1ZpcnR1YWxN
YWNoaW5lLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWaXJ0
dWFsTWFjaGluZS5tbQkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L0FQSS9KU1ZpcnR1YWxNYWNoaW5lLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zMTYsNyArMzE2LDgg
QEAgKyAodm9pZClzZXRDcmFzaE9uVk1DcmVhdGlvbjooQk9PTClzaG91bAogCiBAZW5kCiAKLXN0
YXRpYyB2b2lkIHNjYW5FeHRlcm5hbE9iamVjdEdyYXBoKEpTQzo6Vk0mIHZtLCBKU0M6OlNsb3RW
aXNpdG9yJiB2aXNpdG9yLCB2b2lkKiByb290LCBib29sIGxvY2tBY3F1aXJlZCkKK3RlbXBsYXRl
PHR5cGVuYW1lIFZpc2l0b3I+CitzdGF0aWMgdm9pZCBzY2FuRXh0ZXJuYWxPYmplY3RHcmFwaChK
U0M6OlZNJiB2bSwgVmlzaXRvciYgdmlzaXRvciwgdm9pZCogcm9vdCwgYm9vbCBsb2NrQWNxdWly
ZWQpCiB7CiAgICAgQGF1dG9yZWxlYXNlcG9vbCB7CiAgICAgICAgIEpTVmlydHVhbE1hY2hpbmUg
KnZpcnR1YWxNYWNoaW5lID0gW0pTVk1XcmFwcGVyQ2FjaGUgd3JhcHBlckZvckpTQ29udGV4dEdy
b3VwUmVmOnRvUmVmKCZ2bSldOwpAQCAtMzQ4LDEzICszNDksMTcgQEAgc3RhdGljIHZvaWQgc2Nh
bkV4dGVybmFsT2JqZWN0R3JhcGgoSlNDOgogICAgIH0KIH0KIAotdm9pZCBzY2FuRXh0ZXJuYWxP
YmplY3RHcmFwaChKU0M6OlZNJiB2bSwgSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvciwgdm9pZCog
cm9vdCkKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIHNjYW5FeHRlcm5hbE9iamVj
dEdyYXBoKEpTQzo6Vk0mIHZtLCBWaXNpdG9yJiB2aXNpdG9yLCB2b2lkKiByb290KQogewogICAg
IGJvb2wgbG9ja0FjcXVpcmVkID0gZmFsc2U7CiAgICAgc2NhbkV4dGVybmFsT2JqZWN0R3JhcGgo
dm0sIHZpc2l0b3IsIHJvb3QsIGxvY2tBY3F1aXJlZCk7CiB9CiAKLXZvaWQgc2NhbkV4dGVybmFs
UmVtZW1iZXJlZFNldChKU0M6OlZNJiB2bSwgSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3Rl
bXBsYXRlIHZvaWQgc2NhbkV4dGVybmFsT2JqZWN0R3JhcGgoSlNDOjpWTSYsIEpTQzo6U2xvdFZp
c2l0b3ImLCB2b2lkKik7Cit0ZW1wbGF0ZSB2b2lkIHNjYW5FeHRlcm5hbE9iamVjdEdyYXBoKEpT
Qzo6Vk0mLCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImLCB2b2lkKik7CisKK3ZvaWQgc2NhbkV4
dGVybmFsUmVtZW1iZXJlZFNldChKU0M6OlZNJiB2bSwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9y
JiB2aXNpdG9yKQogewogICAgIEBhdXRvcmVsZWFzZXBvb2wgewogICAgICAgICBKU1ZpcnR1YWxN
YWNoaW5lICp2aXJ0dWFsTWFjaGluZSA9IFtKU1ZNV3JhcHBlckNhY2hlIHdyYXBwZXJGb3JKU0Nv
bnRleHRHcm91cFJlZjp0b1JlZigmdm0pXTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9B
UEkvSlNWaXJ0dWFsTWFjaGluZUludGVybmFsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL0FQSS9KU1ZpcnR1YWxNYWNoaW5lSW50ZXJuYWwuaAkocmV2aXNpb24gMjcxNDQz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1ZpcnR1YWxNYWNoaW5lSW50ZXJuYWwu
aAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsOCBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIGNs
YXNzIFZNOwotY2xhc3MgU2xvdFZpc2l0b3I7CisvL2NsYXNzIFNsb3RWaXNpdG9yOworY2xhc3Mg
QWJzdHJhY3RTbG90VmlzaXRvcjsKIH0KIAogI2lmIGRlZmluZWQoX19PQkpDX18pCkBAIC01NCw4
ICs1NSw4IEBAIEpTQ29udGV4dEdyb3VwUmVmIGdldEdyb3VwRnJvbVZpcnR1YWxNYWMKIAogI2Vu
ZGlmIC8vIGRlZmluZWQoX19PQkpDX18pCiAKLXZvaWQgc2NhbkV4dGVybmFsT2JqZWN0R3JhcGgo
SlNDOjpWTSYsIEpTQzo6U2xvdFZpc2l0b3ImLCB2b2lkKiByb290KTsKLXZvaWQgc2NhbkV4dGVy
bmFsUmVtZW1iZXJlZFNldChKU0M6OlZNJiwgSlNDOjpTbG90VmlzaXRvciYpOwordGVtcGxhdGU8
dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCBzY2FuRXh0ZXJuYWxPYmplY3RHcmFwaChKU0M6OlZNJiwg
VmlzaXRvciYsIHZvaWQqIHJvb3QpOwordm9pZCBzY2FuRXh0ZXJuYWxSZW1lbWJlcmVkU2V0KEpT
Qzo6Vk0mLCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKTsKIAogI2VuZGlmIC8vIEpTQ19PQkpD
X0FQSV9FTkFCTEVECiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvTWFya2VkSlNW
YWx1ZVJlZkFycmF5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJ
L01hcmtlZEpTVmFsdWVSZWZBcnJheS5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9BUEkvTWFya2VkSlNWYWx1ZVJlZkFycmF5LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDYsNyArNDYsOSBAQCBNYXJrZWRKU1ZhbHVlUmVmQXJyYXk6On5NYXJrZWRKU1ZhbHVl
UmVmCiAgICAgICAgIHJlbW92ZSgpOwogfQogCi12b2lkIE1hcmtlZEpTVmFsdWVSZWZBcnJheTo6
dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3RlbXBsYXRlPHR5cGVuYW1l
IFZpc2l0b3I+CisvL3ZvaWQgTWFya2VkSlNWYWx1ZVJlZkFycmF5Ojp2aXNpdEFnZ3JlZ2F0ZShW
aXNpdG9yJiB2aXNpdG9yKQordm9pZCBNYXJrZWRKU1ZhbHVlUmVmQXJyYXk6OnZpc2l0QWdncmVn
YXRlMShBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTVmFsdWVSZWYqIGJ1
ZmZlciA9IGRhdGEoKTsKICAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gMDsgaW5kZXggPCBtX3Np
emU7ICsraW5kZXgpIHsKQEAgLTYyLDQgKzY0LDcgQEAgdm9pZCBNYXJrZWRKU1ZhbHVlUmVmQXJy
YXk6OnZpc2l0QWdncmVnYQogICAgIH0KIH0KIAorLy90ZW1wbGF0ZSB2b2lkIE1hcmtlZEpTVmFs
dWVSZWZBcnJheTo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImKTsKKy8vdGVtcGxhdGUgdm9p
ZCBNYXJrZWRKU1ZhbHVlUmVmQXJyYXk6OnZpc2l0QWdncmVnYXRlKERlYnVnU2xvdFZpc2l0b3Im
KTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJ
L01hcmtlZEpTVmFsdWVSZWZBcnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9BUEkvTWFya2VkSlNWYWx1ZVJlZkFycmF5LmgJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvTWFya2VkSlNWYWx1ZVJlZkFycmF5LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTYyLDcgKzYyLDggQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9pbmxpbmVC
dWZmZXI7CiAgICAgfQogCi0gICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYpOwor
Ly8gICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCB2aXNpdEFnZ3JlZ2F0ZShWaXNp
dG9yJik7CisgICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZTEoQWJzdHJhY3RTbG90VmlzaXRvciYpOwog
CiBwcml2YXRlOgogICAgIHVuc2lnbmVkIG1fc2l6ZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9BUEkvZ2xpYi9KU0FQSVdyYXBwZXJHbG9iYWxPYmplY3QuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0FQSVdyYXBwZXJHbG9iYWxPYmplY3Qu
Y3BwCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIv
SlNBUElXcmFwcGVyR2xvYmFsT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTksNiArNTks
OCBAQCBzdGF0aWMgSlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElPTihjb25zdHJ1CiBzdGF0aWMgSlND
X0RFQ0xBUkVfQ1VTVE9NX0dFVFRFUihjYWxsYmFja0dldHRlckpTQVBJV3JhcHBlckdsb2JhbE9i
amVjdENhbGxiYWNrT2JqZWN0KTsKIHN0YXRpYyBKU0NfREVDTEFSRV9DVVNUT01fR0VUVEVSKHN0
YXRpY0Z1bmN0aW9uR2V0dGVySlNBUElXcmFwcGVyR2xvYmFsT2JqZWN0Q2FsbGJhY2tPYmplY3Qp
OwogCitERUZJTkVfVEVNUExBVEVfVklTSVRfQ0hJTERSRU4odGVtcGxhdGU8PiwgSlNDYWxsYmFj
a09iamVjdDxKU0FQSVdyYXBwZXJHbG9iYWxPYmplY3Q+KTsKKwogdGVtcGxhdGUgPD4gY29uc3Qg
Q2xhc3NJbmZvIEpTQ2FsbGJhY2tPYmplY3Q8SlNBUElXcmFwcGVyR2xvYmFsT2JqZWN0Pjo6c19p
bmZvID0geyAiSlNBUElXcmFwcGVyR2xvYmFsT2JqZWN0IiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0
ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU0NhbGxiYWNrT2JqZWN0KSB9OwogdGVt
cGxhdGU8PiBjb25zdCBib29sIEpTQ2FsbGJhY2tPYmplY3Q8SlNBUElXcmFwcGVyR2xvYmFsT2Jq
ZWN0Pjo6bmVlZHNEZXN0cnVjdGlvbiA9IHRydWU7CiAKQEAgLTE0NCw5ICsxNDYsOSBAQCB2b2lk
IEpTQVBJV3JhcHBlckdsb2JhbE9iamVjdDo6ZmluaXNoQ3JlCiAgICAgV2Vha1NldDo6YWxsb2Nh
dGUodGhpcywganNBUElXcmFwcGVyR2xvYmFsT2JqZWN0SGFuZGxlT3duZXIoKSwgMCk7IC8vIEJh
bGFuY2VkIGluIEpTQVBJV3JhcHBlckdsb2JhbE9iamVjdEhhbmRsZU93bmVyOjpmaW5hbGl6ZS4K
IH0KIAotdm9pZCBKU0FQSVdyYXBwZXJHbG9iYWxPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiBjZWxsLCBKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQotewotICAgIEJhc2U6OnZpc2l0Q2hp
bGRyZW4oY2VsbCwgdmlzaXRvcik7Ci19CisvL3ZvaWQgSlNBUElXcmFwcGVyR2xvYmFsT2JqZWN0
Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikK
Ky8veworLy8gICAgQmFzZTo6dmlzaXRDaGlsZHJlbihjZWxsLCB2aXNpdG9yKTsKKy8vfQogCiB9
IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9K
U0FQSVdyYXBwZXJHbG9iYWxPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvQVBJL2dsaWIvSlNBUElXcmFwcGVyR2xvYmFsT2JqZWN0LmgJKHJldmlzaW9uIDI3MTQ0
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0FQSVdyYXBwZXJHbG9iYWxP
YmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMzksNyArMzksNyBAQCBwdWJsaWM6CiAgICAgc3Rh
dGljIHZvaWQgc3Vic3BhY2VGb3IoVk0mKSB7IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
IH0KIAogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNp
dENoaWxkcmVuKEpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKTsKKyAgICAvLyBzdGF0aWMgdm9p
ZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKTsKIAogICAgIEpTQ0dM
aWJXcmFwcGVyT2JqZWN0KiB3cmFwcGVkT2JqZWN0KCkgY29uc3QgeyByZXR1cm4gbV93cmFwcGVk
T2JqZWN0OyB9CiAgICAgdm9pZCBzZXRXcmFwcGVkT2JqZWN0KEpTQ0dMaWJXcmFwcGVyT2JqZWN0
KiB3cmFwcGVkT2JqZWN0KSB7IG1fd3JhcHBlZE9iamVjdCA9IHdyYXBwZWRPYmplY3Q7IH0KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0FQSVdyYXBwZXJPYmplY3RHTGli
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNBUElX
cmFwcGVyT2JqZWN0R0xpYi5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvZ2xpYi9KU0FQSVdyYXBwZXJPYmplY3RHTGliLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkpTQVBJ
V3JhcHBlck9iamVjdC5oIgogCisjaW5jbHVkZSAiQWJzdHJhY3RTbG90VmlzaXRvci5oIgogI2lu
Y2x1ZGUgIkpTQ0dMaWJXcmFwcGVyT2JqZWN0LmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgog
I2luY2x1ZGUgIkpTQ2FsbGJhY2tPYmplY3QuaCIKQEAgLTM2LDcgKzM3LDggQEAKIGNsYXNzIEpT
QVBJV3JhcHBlck9iamVjdEhhbmRsZU93bmVyIGZpbmFsIDogcHVibGljIEpTQzo6V2Vha0hhbmRs
ZU93bmVyIHsKIHB1YmxpYzoKICAgICB2b2lkIGZpbmFsaXplKEpTQzo6SGFuZGxlPEpTQzo6VW5r
bm93bj4sIHZvaWQqKSBmaW5hbDsKLSAgICBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3Rz
KEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6U2xvdFZpc2l0
b3ImLCBjb25zdCBjaGFyKiopIGZpbmFsOworLy8gICAgIGJvb2wgaXNSZWFjaGFibGVGcm9tT3Bh
cXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCwgSlNDOjpT
bG90VmlzaXRvciYsIGNvbnN0IGNoYXIqKikgZmluYWw7CisgICAgYm9vbCBpc1JlYWNoYWJsZUZy
b21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0LCBK
U0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImLCBjb25zdCBjaGFyKiopIGZpbmFsOwogfTsKIAogc3Rh
dGljIEpTQVBJV3JhcHBlck9iamVjdEhhbmRsZU93bmVyKiBqc0FQSVdyYXBwZXJPYmplY3RIYW5k
bGVPd25lcigpCkBAIC01NSw3ICs1Nyw4IEBAIHZvaWQgSlNBUElXcmFwcGVyT2JqZWN0SGFuZGxl
T3duZXI6OmZpbmEKICAgICBKU0M6OldlYWtTZXQ6OmRlYWxsb2NhdGUoSlNDOjpXZWFrSW1wbDo6
YXNXZWFrSW1wbChoYW5kbGUuc2xvdCgpKSk7CiB9CiAKLWJvb2wgSlNBUElXcmFwcGVyT2JqZWN0
SGFuZGxlT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6
VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3Qg
Y2hhcioqKQorLy8gYm9vbCBKU0FQSVdyYXBwZXJPYmplY3RIYW5kbGVPd25lcjo6aXNSZWFjaGFi
bGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQq
LCBKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiopCitib29sIEpTQVBJV3Jh
cHBlck9iamVjdEhhbmRsZU93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6Okhh
bmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRv
ciYgdmlzaXRvciwgY29uc3QgY2hhcioqKQogewogICAgIEpTQzo6SlNBUElXcmFwcGVyT2JqZWN0
KiB3cmFwcGVyT2JqZWN0ID0gSlNDOjpqc0Nhc3Q8SlNDOjpKU0FQSVdyYXBwZXJPYmplY3QqPiho
YW5kbGUuZ2V0KCkuYXNDZWxsKCkpOwogICAgIC8vIFdlIHVzZSB0aGUgSlNHbG9iYWxPYmplY3Qg
d2hlbiBwcm9jZXNzaW5nIHdlYWsgaGFuZGxlcyB0byBwcmV2ZW50IHRoZSBzaXR1YXRpb24gd2hl
cmUgdXNpbmcKQEAgLTcyLDYgKzc1LDggQEAgc3RhdGljIEpTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJ
T04oY29uc3RydQogc3RhdGljIEpTQ19ERUNMQVJFX0NVU1RPTV9HRVRURVIoY2FsbGJhY2tHZXR0
ZXJKU0FQSVdyYXBwZXJPYmplY3RDYWxsYmFja09iamVjdCk7CiBzdGF0aWMgSlNDX0RFQ0xBUkVf
Q1VTVE9NX0dFVFRFUihzdGF0aWNGdW5jdGlvbkdldHRlckpTQVBJV3JhcHBlck9iamVjdENhbGxi
YWNrT2JqZWN0KTsKIAorREVGSU5FX1RFTVBMQVRFX1ZJU0lUX0NISUxEUkVOKHRlbXBsYXRlPD4s
IEpTQ2FsbGJhY2tPYmplY3Q8SlNBUElXcmFwcGVyT2JqZWN0Pik7CisKIHRlbXBsYXRlIDw+IGNv
bnN0IENsYXNzSW5mbyBKU0NhbGxiYWNrT2JqZWN0PEpTQVBJV3JhcHBlck9iamVjdD46OnNfaW5m
byA9IHsgIkpTQVBJV3JhcHBlck9iamVjdCIsICZCYXNlOjpzX2luZm8sIG51bGxwdHIsIG51bGxw
dHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNDYWxsYmFja09iamVjdCkgfTsKIHRlbXBsYXRlPD4g
Y29uc3QgYm9vbCBKU0NhbGxiYWNrT2JqZWN0PEpTQVBJV3JhcHBlck9iamVjdD46Om5lZWRzRGVz
dHJ1Y3Rpb24gPSB0cnVlOwogCkBAIC0xNTUsOSArMTYwLDEyIEBAIHZvaWQgSlNBUElXcmFwcGVy
T2JqZWN0OjpzZXRXcmFwcGVkT2JqZWMKICAgICBtX3dyYXBwZWRPYmplY3QgPSB3cmFwcGVkT2Jq
ZWN0OwogfQogCi12b2lkIEpTQVBJV3JhcHBlck9iamVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwq
IGNlbGwsIEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNp
dG9yPgordm9pZCBKU0FQSVdyYXBwZXJPYmplY3Q6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCog
Y2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKGNlbGws
IHZpc2l0b3IpOwogfQogCitERUZJTkVfRVhQT1JUX1ZJU0lUX0NISUxEUkVOKEpTQVBJV3JhcHBl
ck9iamVjdCk7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0x
OTA4LDYgKzE5MDgsNyBAQAogCQlFM0ZGNzUzMzFEOUNFQTE4MDBDN0UxNkQgLyogRE9NSklUR2V0
dGVyU2V0dGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBFM0ZGNzUyRjFEOUNFQTEyMDBDN0UxNkQgLyogRE9NSklUR2V0dGVyU2V0dGVyLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTQ5REMxNkMxMkVG
Mjk0RTAwMTg0QTFGIC8qIFNvdXJjZVByb3ZpZGVyQ2FjaGUuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0OURDMTUxMTJFRjI3MjIwMDE4NEExRiAvKiBT
b3VyY2VQcm92aWRlckNhY2hlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJRTQ5REMxNkQxMkVGMjk1MzAwMTg0QTFGIC8qIFNvdXJjZVByb3ZpZGVy
Q2FjaGVJdGVtLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBFNDlEQzE0OTEyRUYyNjFBMDAxODRBMUYgLyogU291cmNlUHJvdmlkZXJDYWNoZUl0ZW0uaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlGRTA0MTU1
MzI1MkVDMDczMDA5MUVCNUQgLyogU2xvdFZpc2l0b3JNYWNyb3MuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFMDQxNTUyMjUyRUMwNzMwMDkxRUI1RCAv
KiBTbG90VmlzaXRvck1hY3Jvcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCUZFMDVGQUZEMUZFNENFREEwMDA5MzIzMCAvKiBEZXByZWNhdGVkSW5z
cGVjdG9yVmFsdWVzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDk5MkQ2QTExMUZCRDQ5MUQwMDAyNDVGNCAvKiBEZXByZWNhdGVkSW5zcGVjdG9yVmFs
dWVzLmNwcCAqLzsgfTsKIAkJRkUwODZCQ0EyMTIzREVGQjAwM0YyOTI5IC8qIEVudHJ5RnJhbWUu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFMDg2QkM5
MjEyM0RFRkEwMDNGMjkyOSAvKiBFbnRyeUZyYW1lLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRkUwRDRBMDYxQUI4REQwQTAwMkY1NEJGIC8qIEV4
ZWN1dGlvblRpbWVMaW1pdFRlc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRkUwRDRBMDQxQUI4REQwQTAwMkY1NEJGIC8qIEV4ZWN1dGlvblRpbWVM
aW1pdFRlc3QuY3BwICovOyB9OwpAQCAtMTkzMCw2ICsxOTMxLDggQEAKIAkJRkUxRTJDM0YyMjQw
REQ1ODAwRjZCNzI5IC8qIE1hY3JvQXNzZW1ibGVyQVJNNjRFLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTFFMkMzRTIyNDBEMzBCMDBGNkI3MjkgLyog
TWFjcm9Bc3NlbWJsZXJBUk02NEUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQlGRTFFMkM0MDIyNDBERDYyMDBGNkI3MjkgLyogQVJNNjRFQXNzZW1i
bGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTFF
MkMzRDIyNDBEMkY2MDBGNkI3MjkgLyogQVJNNjRFQXNzZW1ibGVyLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRkUyMENFOUUxNUYwNEE5NTAwREYz
NDMwIC8qIExMSW50Q0xvb3AuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEZFMjBDRTlDMTVGMDRBOTUwMERGMzQzMCAvKiBMTEludENMb29wLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJRkUyODdEMDIyNTJG
QjJFODAwRDcyM0Y5IC8qIERlYnVnU2xvdFZpc2l0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFMjg3RDAxMjUyRkIyRTgwMEQ3MjNGOSAvKiBEZWJ1
Z1Nsb3RWaXNpdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKKwkJRkUyODdEMDQyNTJGQkZFQjAwRDcyM0Y5IC8qIERlYnVnU2xvdFZpc2l0b3JJbmxp
bmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTI4
N0QwMzI1MkZCRkVBMDBENzIzRjkgLyogRGVidWdTbG90VmlzaXRvcklubGluZXMuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlGRTJBODc2MDFGMDIz
ODE2MDBFQjMxQjIgLyogTWluaW11bVJlc2VydmVkWm9uZVNpemUuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFMkE4NzVGMUYwMjM4MTYwMEVCMzFCMiAv
KiBNaW5pbXVtUmVzZXJ2ZWRab25lU2l6ZS5oICovOyB9OwogCQlGRTMwMjJEMzFFM0Q3M0E1MDBC
QUM0OTMgLyogU2lnaWxsQ3Jhc2hBbmFseXplci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRkUzMDIyRDExRTNENzM5NjAwQkFDNDkzIC8qIFNpZ2lsbENy
YXNoQW5hbHl6ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQlGRTMwMjJENzFFNDI4NTczMDBCQUM0OTMgLyogVk1JbnNwZWN0b3IuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFMzAyMkQ1MUU0Mjg1Njcw
MEJBQzQ5MyAvKiBWTUluc3BlY3Rvci5oICovOyB9OwpAQCAtMTk2Nyw2ICsxOTcwLDggQEAKIAkJ
RkU4MEMxOTcxRDc3NUNERDAwODUxMEMwIC8qIENhdGNoU2NvcGUuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFODBDMTk2MUQ3NzVCMjcwMDg1MTBDMCAv
KiBDYXRjaFNjb3BlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJRkU4REU1NEIyM0FDMURBRDAwNUM5MTQyIC8qIENhY2hlYWJsZUlkZW50aWZpZXIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFOERFNTRB
MjNBQzFEQUQwMDVDOTE0MiAvKiBDYWNoZWFibGVJZGVudGlmaWVyLmggKi87IH07CiAJCUZFOERF
NTREMjNBQzFFODYwMDVDOTE0MiAvKiBDYWNoZWFibGVJZGVudGlmaWVySW5saW5lcy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkU4REU1NEMyM0FDMUU4
NjAwNUM5MTQyIC8qIENhY2hlYWJsZUlkZW50aWZpZXJJbmxpbmVzLmggKi87IH07CisJCUZFOTEy
QjRGMjUzMTE5MzMwMEZBQkRERiAvKiBBYnN0cmFjdFNsb3RWaXNpdG9yLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTkxMkI0RTI1MzExOTMzMDBGQUJE
REYgLyogQWJzdHJhY3RTbG90VmlzaXRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CisJCUZFOTEyQjUxMjUzMTFBRDEwMEZBQkRERiAvKiBBYnN0cmFj
dFNsb3RWaXNpdG9ySW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRkU5MTJCNTAyNTMxMUFEMTAwRkFCRERGIC8qIEFic3RyYWN0U2xvdFZpc2l0
b3JJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJRkU5OUIyNDkxQzI0QzNEMzAwQzgyMTU5IC8qIEpJVE5lZ0dlbmVyYXRvci5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkU5OUIyNDgxQzI0QjZE
MzAwQzgyMTU5IC8qIEpJVE5lZ0dlbmVyYXRvci5oICovOyB9OwogCQlGRUEwODYyMDE4MkI3QTA0
MDBGNkQ4NTEgLyogQnJlYWtwb2ludC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRkVBMDg2MUUxODJCN0EwNDAwRjZEODUxIC8qIEJyZWFrcG9pbnQuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlGRUEwODYy
MTE4MkI3QTA0MDBGNkQ4NTEgLyogRGVidWdnZXJQcmltaXRpdmVzLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRUEwODYxRjE4MkI3QTA0MDBGNkQ4NTEg
LyogRGVidWdnZXJQcmltaXRpdmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKQEAgLTUxOTcsNiArNTIwMiw3IEBACiAJCUY2OTJBODg3MDI1NTU5N0Qw
MUZGNjBGNyAvKiBKU0NKU1ZhbHVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTQ0pTVmFsdWUuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB0YWJXaWR0aCA9IDg7IH07CiAJCUY3MzkyNjkxOERDNjQzMzBBRkNERjBENyAvKiBK
U1NvdXJjZUNvZGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNT
b3VyY2VDb2RlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkUwMDI2MjIyM0Yz
QUYzMzAwM0EzNThGIC8qIFdlYkFzc2VtYmx5LmFzbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYXNtLmFzbTsgbmFtZSA9IFdlYkFz
c2VtYmx5LmFzbTsgcGF0aCA9IGxsaW50L1dlYkFzc2VtYmx5LmFzbTsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJRkUwNDE1NTIyNTJFQzA3MzAwOTFFQjVEIC8qIFNsb3RWaXNpdG9yTWFj
cm9zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNsb3RWaXNpdG9yTWFjcm9z
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFMDg2QkM5MjEyM0RFRkEwMDNGMjky
OSAvKiBFbnRyeUZyYW1lLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEVudHJ5
RnJhbWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkUwRDRBMDQxQUI4REQwQTAw
MkY1NEJGIC8qIEV4ZWN1dGlvblRpbWVMaW1pdFRlc3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBuYW1lID0gRXhlY3V0aW9uVGltZUxpbWl0VGVzdC5jcHA7IHBhdGggPSBBUEkv
dGVzdHMvRXhlY3V0aW9uVGltZUxpbWl0VGVzdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUZFMEQ0QTA1MUFCOEREMEEwMDJGNTRCRiAvKiBFeGVjdXRpb25UaW1lTGltaXRUZXN0
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEV4ZWN1dGlvblRpbWVMaW1pdFRl
c3QuaDsgcGF0aCA9IEFQSS90ZXN0cy9FeGVjdXRpb25UaW1lTGltaXRUZXN0Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01MjEwLDYgKzUyMTYsNyBAQAogCQlGRTEyMjAyNTFCRTdG
NTY0MDAzOUU2RjIgLyogSklUQWRkR2VuZXJhdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEpJVEFkZEdlbmVyYXRvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUZFMTIyMDI2MUJFN0Y1NjQwMDM5RTZGMiAvKiBKSVRBZGRHZW5lcmF0b3IuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSklUQWRkR2VuZXJhdG9yLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFMTQwOTA2MjA1NkYzRkUwMENGRTMxOCAvKiBOYXRp
dmVGdW5jdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBOYXRpdmVGdW5j
dGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRTE3OENDMzI1NUYyMDU1MDBG
RkQ2NzcgLyogQWJzdHJhY3RTbG90VmlzaXRvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBBYnN0cmFjdFNsb3RWaXNpdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJRkUxODc5RkYxQkZCQzczQzAwMzhCQkNBIC8qIEpJVE11bEdlbmVyYXRvci5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKSVRNdWxHZW5lcmF0b3Iu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTE4N0EwMDFCRkJDNzNDMDAzOEJC
Q0EgLyogSklUTXVsR2VuZXJhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEpJVE11bEdlbmVyYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTE4N0Ew
QTFDMDIyOTIzMDAzOEJCQ0EgLyogSklURGl2R2VuZXJhdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpJVERpdkdlbmVyYXRvci5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC01MjMxLDYgKzUyMzgsOCBAQAogCQlGRTFFMkMzRTIyNDBEMzBCMDBG
NkI3MjkgLyogTWFjcm9Bc3NlbWJsZXJBUk02NEUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gTWFjcm9Bc3NlbWJsZXJBUk02NEUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJRkUyMENFOUIxNUYwNEE5NTAwREYzNDMwIC8qIExMSW50Q0xvb3AuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gTExJbnRDTG9vcC5jcHA7IHBhdGggPSBsbGlu
dC9MTEludENMb29wLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkUyMENFOUMx
NUYwNEE5NTAwREYzNDMwIC8qIExMSW50Q0xvb3AuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gTExJbnRDTG9vcC5oOyBwYXRoID0gbGxpbnQvTExJbnRDTG9vcC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlGRTI4N0QwMTI1MkZCMkU4MDBENzIzRjkgLyogRGVidWdT
bG90VmlzaXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEZWJ1Z1Nsb3RW
aXNpdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZFMjg3RDAzMjUyRkJGRUEw
MEQ3MjNGOSAvKiBEZWJ1Z1Nsb3RWaXNpdG9ySW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBEZWJ1Z1Nsb3RWaXNpdG9ySW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlGRTJBODc1RjFGMDIzODE2MDBFQjMxQjIgLyogTWluaW11bVJlc2VydmVk
Wm9uZVNpemUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWluaW11bVJlc2VydmVkWm9uZVNpemUuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkUyRTZBN0ExRDZFQTVGRTAwNjBGODk2IC8qIFRo
cm93U2NvcGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVGhyb3dT
Y29wZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFMzAyMkQwMUUzRDczOTYw
MEJBQzQ5MyAvKiBTaWdpbGxDcmFzaEFuYWx5emVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFNpZ2lsbENyYXNoQW5hbHl6ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtNTMwNCw2ICs1MzEzLDggQEAKIAkJRkU4REU1NEMyM0FDMUU4NjAwNUM5
MTQyIC8qIENhY2hlYWJsZUlkZW50aWZpZXJJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IENhY2hlYWJsZUlkZW50aWZpZXJJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUZFOERFNTRFMjNBQzNBOEUwMDVDOTE0MiAvKiBDYWNoZWFibGVJZGVu
dGlmaWVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENhY2hlYWJsZUlkZW50aWZpZXIuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTkwQkIzQTFCN0NGNjRFMDA2QjNGMDMgLyog
Vk1JbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZNSW5saW5lcy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRTkxMkI0RTI1MzExOTMzMDBGQUJEREYg
LyogQWJzdHJhY3RTbG90VmlzaXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBBYnN0cmFjdFNsb3RWaXNpdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZF
OTEyQjUwMjUzMTFBRDEwMEZBQkRERiAvKiBBYnN0cmFjdFNsb3RWaXNpdG9ySW5saW5lcy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBYnN0cmFjdFNsb3RWaXNpdG9ySW5saW5l
cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTk4QjVCNjFCQjlBRTExMDA3M0U3
QTYgLyogSklUU3ViR2VuZXJhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEpJVFN1YkdlbmVyYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTk5QjI0
NzFDMjRCNkQzMDBDODIxNTkgLyogSklUTmVnR2VuZXJhdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpJVE5lZ0dlbmVyYXRvci5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUZFOTlCMjQ4MUMyNEI2RDMwMEM4MjE1OSAvKiBKSVROZWdHZW5lcmF0
b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSklUTmVnR2VuZXJhdG9yLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC02MjUzLDYgKzYyNjQsOSBAQAogCQkxNDJF
MzEyQTEzNEZGMEE2MDBBRkFEQjUgLyogaGVhcCAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwog
CQkJY2hpbGRyZW4gPSAoCisJCQkJRkUxNzhDQzMyNTVGMjA1NTAwRkZENjc3IC8qIEFic3RyYWN0
U2xvdFZpc2l0b3IuY3BwICovLAorCQkJCUZFOTEyQjRFMjUzMTE5MzMwMEZBQkRERiAvKiBBYnN0
cmFjdFNsb3RWaXNpdG9yLmggKi8sCisJCQkJRkU5MTJCNTAyNTMxMUFEMTAwRkFCRERGIC8qIEFi
c3RyYWN0U2xvdFZpc2l0b3JJbmxpbmVzLmggKi8sCiAJCQkJMEZFQzNDNTAxRjMzQTQxNjAwRjU5
QjZDIC8qIEFsaWduZWRNZW1vcnlBbGxvY2F0b3IuY3BwICovLAogCQkJCTBGRUMzQzUxMUYzM0E0
MTYwMEY1OUI2QyAvKiBBbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmggKi8sCiAJCQkJMEZBNzYyMEEx
REI5NTlGNjAwQjdBMkZEIC8qIEFsbG9jYXRpbmdTY29wZS5oICovLApAQCAtNjI4OCw2ICs2MzAy
LDggQEAKIAkJCQkwRjQxNTQ1QTFGRDIwQjFGMDAxQjU4RjYgLyogQ29uc3RyYWludENvbmN1cnJl
bmN5LmggKi8sCiAJCQkJMEY0RDhDNzMxRkM3QTk3NDAwMUQzMkFDIC8qIENvbnN0cmFpbnRQYXJh
bGxlbGlzbS5oICovLAogCQkJCTBGN0RGMTJGMUUyOTcwRDUwMDk1OTUxQiAvKiBDb25zdHJhaW50
Vm9sYXRpbGl0eS5oICovLAorCQkJCUZFMjg3RDAxMjUyRkIyRTgwMEQ3MjNGOSAvKiBEZWJ1Z1Ns
b3RWaXNpdG9yLmggKi8sCisJCQkJRkUyODdEMDMyNTJGQkZFQTAwRDcyM0Y5IC8qIERlYnVnU2xv
dFZpc2l0b3JJbmxpbmVzLmggKi8sCiAJCQkJMkE3QTU4RUUxODA4QTRDNDAwMjBCREY3IC8qIERl
ZmVyR0MuY3BwICovLAogCQkJCTBGMTM2RDRCMTc0QUQ2OUIwMDc1QjM1NCAvKiBEZWZlckdDLmgg
Ki8sCiAJCQkJMEZCQjczQkExREVGODY0NDAwMkMwMDlFIC8qIERlbGV0ZUFsbENvZGVFZmZvcnQu
aCAqLywKQEAgLTY0MDksNiArNjQyNSw3IEBACiAJCQkJQzIyNTQ5NDIxNUY3REJBQTAwNjVFODk4
IC8qIFNsb3RWaXNpdG9yLmNwcCAqLywKIAkJCQkxNEJBNzhGMDEzQUFCODhGMDA1QjdDMkMgLyog
U2xvdFZpc2l0b3IuaCAqLywKIAkJCQkwRkNCNDA4NTE1QzBBM0MzMDA0ODkzMkIgLyogU2xvdFZp
c2l0b3JJbmxpbmVzLmggKi8sCisJCQkJRkUwNDE1NTIyNTJFQzA3MzAwOTFFQjVEIC8qIFNsb3RW
aXNpdG9yTWFjcm9zLmggKi8sCiAJCQkJMEZERTg3RkExREZFNkU1MDAwNjRDMzkwIC8qIFNwYWNl
VGltZU11dGF0b3JTY2hlZHVsZXIuY3BwICovLAogCQkJCTBGREU4N0ZCMURGRTZFNTAwMDY0QzM5
MCAvKiBTcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyLmggKi8sCiAJCQkJMEY0RjgyODkxRTMxQjk3
MTAwNzUxODRDIC8qIFN0b2NoYXN0aWNTcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyLmNwcCAqLywK
QEAgLTkyNTQsNiArOTI3MSw3IEBACiAJCQkJNTI2NzhGOEYxQTAzMTAwOTAwNkEzMDZEIC8qIEJh
c2ljQmxvY2tMb2NhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQ3QjgzQUMwRTZEQjhDOTAw
NDc3NUE0IC8qIEJhdGNoZWRUcmFuc2l0aW9uT3B0aW1pemVyLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk4Njk3NkU1RjFGQTNFOEJDMDBFN0M0RTEgLyogQmlnSW50Q29uc3RydWN0b3IuaCBpbiBIZWFk
ZXJzICovLAorCQkJCUZFMDQxNTUzMjUyRUMwNzMwMDkxRUI1RCAvKiBTbG90VmlzaXRvck1hY3Jv
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODY2NzM5RDIxM0JGREU3MTAwMjNEODdDIC8qIEJpZ0lu
dGVnZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2MTgxNjc3MUZCNzkyNDIwMEVDQzRFQyAvKiBC
aWdJbnRPYmplY3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2OTc2RTVFMUZBM0U4QjYwMEU3QzRF
MSAvKiBCaWdJbnRQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovLApAQCAtOTUzMSw2ICs5NTQ5LDcg
QEAKIAkJCQkwRkQ4MkU1NzE0MURBRjEwMDAxNzlDOTQgLyogREZHT1NSRW50cnkuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGRDhBMzI2MTdENTFGNTcwMENBMkM0MCAvKiBERkdPU1JFbnRyeXBvaW50
Q3JlYXRpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZDMDk3NkExNDY4QTZGNzAwQ0Yy
NDQyIC8qIERGR09TUkV4aXQuaCBpbiBIZWFkZXJzICovLAorCQkJCUZFOTEyQjRGMjUzMTE5MzMw
MEZBQkRERiAvKiBBYnN0cmFjdFNsb3RWaXNpdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjIz
NUJFQzE3MTc4RTczMDA2OTBDN0YgLyogREZHT1NSRXhpdEJhc2UuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGRkI5MjFDMTZEMDJGMTEwMDU1QTVEQiAvKiBERkdPU1JFeGl0Q29tcGlsYXRpb25JbmZv
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjcwMjVBQTE3MTRCMEZDMDAzODJDMEUgLyogREZHT1NS
RXhpdENvbXBpbGVyQ29tbW9uLmggaW4gSGVhZGVycyAqLywKQEAgLTk4MTYsNiArOTgzNSw3IEBA
CiAJCQkJQTUxM0U1QkUxODVCRkFDQzAwN0U5NUFEIC8qIEluamVjdGVkU2NyaXB0SG9zdC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQTUxM0U1Q0IxODVGOTYyNDAwN0U5NUFEIC8qIEluamVjdGVkU2Ny
aXB0TWFuYWdlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTU4NDBFMjExODdCN0I4NjAwODQzQjEw
IC8qIEluamVjdGVkU2NyaXB0TW9kdWxlLmggaW4gSGVhZGVycyAqLywKKwkJCQlGRTI4N0QwMjI1
MkZCMkU4MDBENzIzRjkgLyogRGVidWdTbG90VmlzaXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QTUxM0U1QzcxODVGOTQ0NjAwN0U5NUFEIC8qIEluamVjdGVkU2NyaXB0U291cmNlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk5OTU5RTkzMjFCRDE4Mjc5MDAxQUE0MTMgLyogaW5saW5lLWFuZC1taW5p
Znktc3R5bGVzaGVldHMtYW5kLXNjcmlwdHMucHkgaW4gSGVhZGVycyAqLywKIAkJCQk3OTA1QkI2
OTFEMTIwNTBFMDAxOUZFNTcgLyogSW5saW5lQWNjZXNzLmggaW4gSGVhZGVycyAqLywKQEAgLTEw
MTIwLDYgKzEwMTQwLDcgQEAKIAkJCQk3OTVBQzYxODIwQTIzNTVFMDA1MkM3NkMgLyogSlNWaXJ0
dWFsTWFjaGluZVByaXZhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3Q0EzQUU4MTdEQTQxQUUw
MDY1MzhBRiAvKiBKU1dlYWtNYXAuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3NDgyRTkzMTE2QTdD
QUQwMDNCMDcxMiAvKiBKU1dlYWtPYmplY3RNYXBSZWZJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8s
CisJCQkJRkU5MTJCNTEyNTMxMUFEMTAwRkFCRERGIC8qIEFic3RyYWN0U2xvdFZpc2l0b3JJbmxp
bmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzQ4MkI5MzExNjcxMTQ3MDAzQjA3MTIgLyogSlNX
ZWFrT2JqZWN0TWFwUmVmUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTM5QkZCQjAyMkFE
M0NEQzAwMjNGNEMwIC8qIEpTV2Vha09iamVjdFJlZi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYw
QjI4NkIxRUI4RTZDRjAwMEVCNUQyIC8qIEpTV2Vha1ByaXZhdGUuaCBpbiBIZWFkZXJzICovLApA
QCAtMTAxOTEsNiArMTAyMTIsNyBAQAogCQkJCUE3NERFRjk0MTgyRDk5MTQwMDUyMkMyMiAvKiBN
YXBJdGVyYXRvclByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTcwMDg3M0UxN0NCRThE
MzAwQzNFNjQzIC8qIE1hcFByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQyRDZGMDkx
MzUzOUEyODAwQjAyRTg2IC8qIE1hcmtlZEJsb2NrLmggaW4gSGVhZGVycyAqLywKKwkJCQlGRTI4
N0QwNDI1MkZCRkVCMDBENzIzRjkgLyogRGVidWdTbG90VmlzaXRvcklubGluZXMuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGN0M1RkI4MUQ4ODhBMEMwMDQ0RjVFMiAvKiBNYXJrZWRCbG9ja0lubGlu
ZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0MTQ0OENCMTNBMTc2RUMwMEY1QkExQSAvKiBNYXJr
ZWRCbG9ja1NldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTNEMzUxNUYyNDFCODlENzAwOERDMTZF
IC8qIE1hcmtlZEpTVmFsdWVSZWZBcnJheS5oIGluIEhlYWRlcnMgKi8sCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvU2NyaXB0cy93a2J1aWx0aW5zL2J1aWx0aW5zX2dlbmVyYXRlX2ludGVy
bmFsc193cmFwcGVyX2hlYWRlci5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvU2NyaXB0cy93a2J1aWx0aW5zL2J1aWx0aW5zX2dlbmVyYXRlX2ludGVybmFsc193cmFwcGVy
X2hlYWRlci5weQkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL1Nj
cmlwdHMvd2tidWlsdGlucy9idWlsdGluc19nZW5lcmF0ZV9pbnRlcm5hbHNfd3JhcHBlcl9oZWFk
ZXIucHkJKHdvcmtpbmcgY29weSkKQEAgLTkzLDcgKzkzLDcgQEAgY2xhc3MgQnVpbHRpbnNJbnRl
cm5hbHNXcmFwcGVySGVhZGVyR2VuZQogCiAgICAgZGVmIGdlbmVyYXRlX21ldGhvZHMoc2VsZik6
CiAgICAgICAgIHJldHVybiAiIiIKLSAgICB2b2lkIHZpc2l0KEpTQzo6U2xvdFZpc2l0b3ImKTsK
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIHZpc2l0KFZpc2l0b3ImKTsKICAg
ICB2b2lkIGluaXRpYWxpemUoSlNET01HbG9iYWxPYmplY3QmKTsKICIiIgogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy93a2J1aWx0aW5zL2J1aWx0aW5zX2dlbmVyYXRlX2lu
dGVybmFsc193cmFwcGVyX2ltcGxlbWVudGF0aW9uLnB5Cj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9TY3JpcHRzL3drYnVpbHRpbnMvYnVpbHRpbnNfZ2VuZXJhdGVfaW50ZXJu
YWxzX3dyYXBwZXJfaW1wbGVtZW50YXRpb24ucHkJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL3drYnVpbHRpbnMvYnVpbHRpbnNfZ2VuZXJhdGVfaW50
ZXJuYWxzX3dyYXBwZXJfaW1wbGVtZW50YXRpb24ucHkJKHdvcmtpbmcgY29weSkKQEAgLTEyMCwx
MyArMTIwLDE2IEBAIGNsYXNzIEJ1aWx0aW5zSW50ZXJuYWxzV3JhcHBlckltcGxlbWVudGEKICAg
ICAgICAgcmV0dXJuICdcbicuam9pbihsaW5lcykKIAogICAgIGRlZiBnZW5lcmF0ZV92aXNpdF9t
ZXRob2Qoc2VsZik6Ci0gICAgICAgIGxpbmVzID0gWyJ2b2lkIEpTQnVpbHRpbkludGVybmFsRnVu
Y3Rpb25zOjp2aXNpdChKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKSIsCisgICAgICAgIGxpbmVz
ID0gWyJ0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiIsCisgICAgICAgICAgICAgICAgICJ2b2lk
IEpTQnVpbHRpbkludGVybmFsRnVuY3Rpb25zOjp2aXNpdChWaXNpdG9yJiB2aXNpdG9yKSIsCiAg
ICAgICAgICAgICAgICAgICJ7Il0KICAgICAgICAgZm9yIG9iamVjdCBpbiBzZWxmLmludGVybmFs
czoKICAgICAgICAgICAgIHZpc2l0ID0gIiAgICAlcy52aXNpdCh2aXNpdG9yKTsiICUgc2VsZi5t
ZW1iZXJfbmFtZShvYmplY3QpCiAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoQnVpbHRpbnNHZW5l
cmF0b3Iud3JhcF93aXRoX2d1YXJkKG9iamVjdC5hbm5vdGF0aW9ucy5nZXQoJ2NvbmRpdGlvbmFs
JyksIHZpc2l0KSkKICAgICAgICAgbGluZXMuYXBwZW5kKCIgICAgVU5VU0VEX1BBUkFNKHZpc2l0
b3IpOyIpCiAgICAgICAgIGxpbmVzLmFwcGVuZCgifVxuIikKKyAgICAgICAgbGluZXMuYXBwZW5k
KCJ0ZW1wbGF0ZSB2b2lkIEpTQnVpbHRpbkludGVybmFsRnVuY3Rpb25zOjp2aXNpdChBYnN0cmFj
dFNsb3RWaXNpdG9yJik7IikKKyAgICAgICAgbGluZXMuYXBwZW5kKCJ0ZW1wbGF0ZSB2b2lkIEpT
QnVpbHRpbkludGVybmFsRnVuY3Rpb25zOjp2aXNpdChTbG90VmlzaXRvciYpO1xuIikKICAgICAg
ICAgcmV0dXJuICdcbicuam9pbihsaW5lcykKIAogICAgIGRlZiBfZ2VuZXJhdGVfaW5pdGlhbGl6
ZV9zdGF0aWNfZ2xvYmFscyhzZWxmKToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3Jp
cHRzL3drYnVpbHRpbnMvYnVpbHRpbnNfdGVtcGxhdGVzLnB5Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL3drYnVpbHRpbnMvYnVpbHRpbnNfdGVtcGxhdGVzLnB5
CShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy93a2J1
aWx0aW5zL2J1aWx0aW5zX3RlbXBsYXRlcy5weQkod29ya2luZyBjb3B5KQpAQCAtMTg4LDcgKzE4
OCw4IEBAIHB1YmxpYzoKICAgICBleHBsaWNpdCAke29iamVjdE5hbWV9QnVpbHRpbkZ1bmN0aW9u
cyhKU0M6OlZNJiB2bSkgOiBtX3ZtKHZtKSB7IH0KIAogICAgIHZvaWQgaW5pdChKU0M6OkpTR2xv
YmFsT2JqZWN0Jik7Ci0gICAgdm9pZCB2aXNpdChKU0M6OlNsb3RWaXNpdG9yJik7CisgICAgLy8g
bWxhbSB2b2lkIHZpc2l0KEpTQzo6U2xvdFZpc2l0b3ImKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBWaXNpdG9yPiB2b2lkIHZpc2l0KFZpc2l0b3ImKTsKIAogcHVibGljOgogICAgIEpTQzo6Vk0m
IG1fdm07CkBAIC0yMDcsMTAgKzIwOCwxNSBAQCBpbmxpbmUgdm9pZCAke29iamVjdE5hbWV9QnVp
bHRpbkZ1bmN0aW9uCiAjdW5kZWYgRVhQT1JUX0ZVTkNUSU9OCiB9CiAKLWlubGluZSB2b2lkICR7
b2JqZWN0TmFtZX1CdWlsdGluRnVuY3Rpb25zOjp2aXNpdChKU0M6OlNsb3RWaXNpdG9yJiB2aXNp
dG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK2lubGluZSB2b2lkICR7b2JqZWN0TmFt
ZX1CdWlsdGluRnVuY3Rpb25zOjp2aXNpdChWaXNpdG9yJiB2aXNpdG9yKQogewogI2RlZmluZSBW
SVNJVF9GVU5DVElPTihuYW1lKSB2aXNpdG9yLmFwcGVuZChtXyMjbmFtZSMjRnVuY3Rpb24pOwog
ICAgICR7bWFjcm9QcmVmaXh9X0ZPUkVBQ0hfJHtvYmplY3RNYWNyb31fQlVJTFRJTl9GVU5DVElP
Tl9OQU1FKFZJU0lUX0ZVTkNUSU9OKQogI3VuZGVmIFZJU0lUX0ZVTkNUSU9OCiB9CisKK3RlbXBs
YXRlIHZvaWQgJHtvYmplY3ROYW1lfUJ1aWx0aW5GdW5jdGlvbnM6OnZpc2l0KEpTQzo6QWJzdHJh
Y3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCAke29iamVjdE5hbWV9QnVpbHRpbkZ1bmN0
aW9uczo6dmlzaXQoSlNDOjpTbG90VmlzaXRvciYpOworCiAiIiIpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCShyZXZpc2lvbiAyNzE0NDMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTcyOSwxNiArNzI5LDE3IEBAIGJvb2wgQWNjZXNzQ2FzZTo6dmlzaXRXZWFr
KFZNJiB2bSkgY29uc3QKICAgICByZXR1cm4gaXNWYWxpZDsKIH0KIAotYm9vbCBBY2Nlc3NDYXNl
Ojpwcm9wYWdhdGVUcmFuc2l0aW9ucyhTbG90VmlzaXRvciYgdmlzaXRvcikgY29uc3QKK3RlbXBs
YXRlPHR5cGVuYW1lIFZpc2l0b3I+Citib29sIEFjY2Vzc0Nhc2U6OnByb3BhZ2F0ZVRyYW5zaXRp
b25zKFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0CiB7CiAgICAgYm9vbCByZXN1bHQgPSB0cnVlOwog
CiAgICAgaWYgKG1fc3RydWN0dXJlKQotICAgICAgICByZXN1bHQgJj0gbV9zdHJ1Y3R1cmUtPm1h
cmtJZkNoZWFwKHZpc2l0b3IpOworICAgICAgICByZXN1bHQgJj0gbV9zdHJ1Y3R1cmUtPm1hcmtJ
ZkNoZWFwMSh2aXNpdG9yKTsKIAogICAgIGlmIChtX3BvbHlQcm90b0FjY2Vzc0NoYWluKSB7CiAg
ICAgICAgIGZvciAoU3RydWN0dXJlSUQgc3RydWN0dXJlSUQgOiBtX3BvbHlQcm90b0FjY2Vzc0No
YWluLT5jaGFpbigpKQotICAgICAgICAgICAgcmVzdWx0ICY9IHZpc2l0b3Iudm0oKS5nZXRTdHJ1
Y3R1cmUoc3RydWN0dXJlSUQpLT5tYXJrSWZDaGVhcCh2aXNpdG9yKTsKKyAgICAgICAgICAgIHJl
c3VsdCAmPSB2aXNpdG9yLnZtKCkuZ2V0U3RydWN0dXJlKHN0cnVjdHVyZUlEKS0+bWFya0lmQ2hl
YXAxKHZpc2l0b3IpOwogICAgIH0KIAogICAgIHN3aXRjaCAobV90eXBlKSB7CkBAIC03NTYsMTEg
Kzc1NywxOSBAQCBib29sIEFjY2Vzc0Nhc2U6OnByb3BhZ2F0ZVRyYW5zaXRpb25zKFNsCiAgICAg
cmV0dXJuIHJlc3VsdDsKIH0KIAotdm9pZCBBY2Nlc3NDYXNlOjp2aXNpdEFnZ3JlZ2F0ZShTbG90
VmlzaXRvciYgdmlzaXRvcikgY29uc3QKK3RlbXBsYXRlIGJvb2wgQWNjZXNzQ2FzZTo6cHJvcGFn
YXRlVHJhbnNpdGlvbnMoU2xvdFZpc2l0b3ImKSBjb25zdDsKK3RlbXBsYXRlIGJvb2wgQWNjZXNz
Q2FzZTo6cHJvcGFnYXRlVHJhbnNpdGlvbnMoQWJzdHJhY3RTbG90VmlzaXRvciYpIGNvbnN0Owor
CisvL3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+CisvL3ZvaWQgQWNjZXNzQ2FzZTo6dmlzaXRB
Z2dyZWdhdGUoVmlzaXRvciYgdmlzaXRvcikgY29uc3QKK3ZvaWQgQWNjZXNzQ2FzZTo6dmlzaXRB
Z2dyZWdhdGUxKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0CiB7Ci0gICAgbV9p
ZGVudGlmaWVyLnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOworICAgIG1faWRlbnRpZmllci52aXNp
dEFnZ3JlZ2F0ZTEodmlzaXRvcik7CiB9CiAKKy8vdGVtcGxhdGUgdm9pZCBBY2Nlc3NDYXNlOjp2
aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYpIGNvbnN0OworLy90ZW1wbGF0ZSB2b2lkIEFjY2Vz
c0Nhc2U6OnZpc2l0QWdncmVnYXRlKERlYnVnU2xvdFZpc2l0b3ImKSBjb25zdDsKKwogdm9pZCBB
Y2Nlc3NDYXNlOjpnZW5lcmF0ZVdpdGhHdWFyZCgKICAgICBBY2Nlc3NHZW5lcmF0aW9uU3RhdGUm
IHN0YXRlLCBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0JiBmYWxsVGhyb3VnaCkKIHsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuaAkocmV2aXNpb24gMjcx
NDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuaAkod29y
a2luZyBjb3B5KQpAQCAtMjc1LDkgKzI3NSwxMCBAQCBwcml2YXRlOgogICAgIHRlbXBsYXRlPHR5
cGVuYW1lIEZ1bmN0b3I+CiAgICAgdm9pZCBmb3JFYWNoRGVwZW5kZW50Q2VsbChWTSYsIGNvbnN0
IEZ1bmN0b3ImKSBjb25zdDsKIAotICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3Im
KSBjb25zdDsKKy8vICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgdmlzaXRBZ2dy
ZWdhdGUoVmlzaXRvciYpIGNvbnN0OworICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUxKEFic3RyYWN0
U2xvdFZpc2l0b3ImKSBjb25zdDsKICAgICBib29sIHZpc2l0V2VhayhWTSYpIGNvbnN0OwotICAg
IGJvb2wgcHJvcGFnYXRlVHJhbnNpdGlvbnMoU2xvdFZpc2l0b3ImKSBjb25zdDsKKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiBib29sIHByb3BhZ2F0ZVRyYW5zaXRpb25zKFZpc2l0b3Im
KSBjb25zdDsKIAogICAgIC8vIEZJWE1FOiBUaGlzIG9ubHkgZXhpc3RzIGJlY2F1c2Ugb2YgaG93
IEFjY2Vzc0Nhc2UgcHV0cyBwb3N0LWdlbmVyYXRpb24gdGhpbmdzIGludG8gaXRzZWxmLgogICAg
IC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTY0NTYKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeVZhbEluZm8uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeVZhbEluZm8uY3BwCShyZXZpc2lv
biAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnlWYWxJbmZvLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzIsMTEgKzMyLDE2IEBAIG5hbWVzcGFjZSBKU0MgewogCiAj
aWYgRU5BQkxFKEpJVCkKIAotdm9pZCBCeVZhbEluZm86OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNp
dG9yJiB2aXNpdG9yKQorLy90ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgorLy92b2lkIEJ5VmFs
SW5mbzo6dmlzaXRBZ2dyZWdhdGUoVmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgQnlWYWxJbmZvOjp2
aXNpdEFnZ3JlZ2F0ZTEoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKLSAgICBjYWNo
ZWRJZC52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKKyAgICBjYWNoZWRJZC52aXNpdEFnZ3JlZ2F0
ZTEodmlzaXRvcik7CiB9CiAKKy8vdGVtcGxhdGUgdm9pZCBCeVZhbEluZm86OnZpc2l0QWdncmVn
YXRlKFNsb3RWaXNpdG9yJik7CisvL3RlbXBsYXRlIHZvaWQgQnlWYWxJbmZvOjp2aXNpdEFnZ3Jl
Z2F0ZShEZWJ1Z1Nsb3RWaXNpdG9yJik7CisKICNlbmRpZiAvLyBFTkFCTEUoSklUKQogCiB9IC8v
IG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeVZh
bEluZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnlW
YWxJbmZvLmgJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9CeVZhbEluZm8uaAkod29ya2luZyBjb3B5KQpAQCAtMjQ2LDcgKzI0Niw4IEBAIHN0cnVj
dCBCeVZhbEluZm8gewogICAgICAgICB0aGlzLT5zZWVuID0gZmFsc2U7CiAgICAgfQogCi0gICAg
dm9pZCB2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYpOworLy8gICAgdGVtcGxhdGU8dHlwZW5h
bWUgVmlzaXRvcj4gdm9pZCB2aXNpdEFnZ3JlZ2F0ZShWaXNpdG9yJik7CisgICAgdm9pZCB2aXNp
dEFnZ3JlZ2F0ZTEoQWJzdHJhY3RTbG90VmlzaXRvciYpOwogCiAgICAgQ29kZUxvY2F0aW9uSnVt
cDxKU0ludGVybmFsUHRyVGFnPiBub3RJbmRleEp1bXA7CiAgICAgQ29kZUxvY2F0aW9uSnVtcDxK
U0ludGVybmFsUHRyVGFnPiBiYWRUeXBlSnVtcDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzAsNiArMzAsOSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkNvZGVCbG9jay5o
IgogCisjaW5jbHVkZSAiQWJzdHJhY3RTbG90VmlzaXRvci5oIiAvLyBtbGFtIFRFU1QKKyNpbmNs
dWRlICJQb2x5bW9ycGhpY0FjY2Vzcy5oIiAvLyBtbGFtIFRFU1QKKwogI2luY2x1ZGUgIkFyaXRo
UHJvZmlsZS5oIgogI2luY2x1ZGUgIkJhc2ljQmxvY2tMb2NhdGlvbi5oIgogI2luY2x1ZGUgIkJ5
VmFsSW5mby5oIgpAQCAtOTk4LDcgKzEwMDEsOCBAQCBzaXplX3QgQ29kZUJsb2NrOjplc3RpbWF0
ZWRTaXplKEpTQ2VsbCogCiAgICAgcmV0dXJuIEJhc2U6OmVzdGltYXRlZFNpemUoY2VsbCwgdm0p
ICsgZXh0cmFNZW1vcnlBbGxvY2F0ZWQ7CiB9CiAKLXZvaWQgQ29kZUJsb2NrOjp2aXNpdENoaWxk
cmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBWaXNpdG9yPgordm9pZCBDb2RlQmxvY2s6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2Vs
bCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBDb2RlQmxvY2sqIHRoaXNPYmplY3QgPSBqc0Nh
c3Q8Q29kZUJsb2NrKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlz
T2JqZWN0LCBpbmZvKCkpOwpAQCAtMTAwNyw3ICsxMDExLDEwIEBAIHZvaWQgQ29kZUJsb2NrOjp2
aXNpdENoaWxkcmVuKEpTQ2VsbCogY2UKICAgICB0aGlzT2JqZWN0LT52aXNpdENoaWxkcmVuKHZp
c2l0b3IpOwogfQogCi12b2lkIENvZGVCbG9jazo6dmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYg
dmlzaXRvcikKK0RFRklORV9WSVNJVF9DSElMRFJFTihDb2RlQmxvY2spOworCit0ZW1wbGF0ZTx0
eXBlbmFtZSBWaXNpdG9yPgordm9pZCBDb2RlQmxvY2s6OnZpc2l0Q2hpbGRyZW5JbXBsKFZpc2l0
b3ImIHZpc2l0b3IpCiB7CiAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2spOwog
ICAgIGlmIChDb2RlQmxvY2sqIG90aGVyQmxvY2sgPSBzcGVjaWFsT1NSRW50cnlCbG9ja09yTnVs
bCgpKQpAQCAtMTAyNiw2ICsxMDMzLDggQEAgdm9pZCBDb2RlQmxvY2s6OnZpc2l0Q2hpbGRyZW4o
U2xvdFZpc2l0bwogICAgIFZNOjpTcGFjZUFuZFNldDo6c2V0Rm9yKCpzdWJzcGFjZSgpKS5hZGQo
dGhpcyk7CiB9CiAKK0RFRklORV9JTlNUQU5DRV9WSVNJVF9DSElMRFJFTihDb2RlQmxvY2spOwor
CiBib29sIENvZGVCbG9jazo6c2hvdWxkVmlzaXRTdHJvbmdseShjb25zdCBDb25jdXJyZW50SlNM
b2NrZXImIGxvY2tlcikKIHsKICAgICBpZiAoT3B0aW9uczo6Zm9yY2VDb2RlQmxvY2tMaXZlbmVz
cygpKQpAQCAtMTA5OCw3ICsxMTA3LDkgQEAgYm9vbCBDb2RlQmxvY2s6OnNob3VsZEpldHRpc29u
RHVlVG9PbGRBZwogfQogCiAjaWYgRU5BQkxFKERGR19KSVQpCi1zdGF0aWMgYm9vbCBzaG91bGRN
YXJrVHJhbnNpdGlvbihWTSYgdm0sIERGRzo6V2Vha1JlZmVyZW5jZVRyYW5zaXRpb24mIHRyYW5z
aXRpb24pCisvLyBtbGFtIEZJWE1FOiB2bS5oZWFwLmlzTWFya2VkIG5lZWRzIHRvIGJlIGFic3Ry
YWN0ZWQuCisvL3N0YXRpYyBib29sIHNob3VsZE1hcmtUcmFuc2l0aW9uKFZNJiB2bSwgREZHOjpX
ZWFrUmVmZXJlbmNlVHJhbnNpdGlvbiYgdHJhbnNpdGlvbikKK3N0YXRpYyBpbmxpbmUgYm9vbCBz
aG91bGRNYXJrVHJhbnNpdGlvbihWTSYgdm0sIERGRzo6V2Vha1JlZmVyZW5jZVRyYW5zaXRpb24m
IHRyYW5zaXRpb24pCiB7CiAgICAgaWYgKHRyYW5zaXRpb24ubV9jb2RlT3JpZ2luICYmICF2bS5o
ZWFwLmlzTWFya2VkKHRyYW5zaXRpb24ubV9jb2RlT3JpZ2luLmdldCgpKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwpAQCAtMTExOSw3ICsxMTMwLDQwIEBAIEJ5dGVjb2RlSW5kZXggQ29kZUJsb2Nr
OjpieXRlY29kZUluZGV4Rm8KIH0KICNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKIAotdm9pZCBD
b2RlQmxvY2s6OnByb3BhZ2F0ZVRyYW5zaXRpb25zKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYs
IFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorI2lmIEVOQUJMRShKSVQpCisKKy8vdGVtcGxhdGU8dHlw
ZW5hbWUgVmlzaXRvcj4KKy8vYm9vbCBTdHJ1Y3R1cmVTdHViSW5mbzo6cHJvcGFnYXRlVHJhbnNp
dGlvbnMxKFZpc2l0b3ImIHZpc2l0b3IpCitib29sIFN0cnVjdHVyZVN0dWJJbmZvOjpwcm9wYWdh
dGVUcmFuc2l0aW9uczEoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBzd2l0
Y2ggKG1fY2FjaGVUeXBlKSB7CisgICAgY2FzZSBDYWNoZVR5cGU6OlVuc2V0OgorICAgIGNhc2Ug
Q2FjaGVUeXBlOjpBcnJheUxlbmd0aDoKKyAgICBjYXNlIENhY2hlVHlwZTo6U3RyaW5nTGVuZ3Ro
OgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBjYXNlIENhY2hlVHlwZTo6R2V0QnlJZFNlbGY6
CisgICAgY2FzZSBDYWNoZVR5cGU6OlB1dEJ5SWRSZXBsYWNlOgorICAgIGNhc2UgQ2FjaGVUeXBl
OjpJbkJ5SWRTZWxmOgorICAgICAgICByZXR1cm4gdS5ieUlkU2VsZi5iYXNlT2JqZWN0U3RydWN0
dXJlLT5tYXJrSWZDaGVhcDEodmlzaXRvcik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBj
YXNlIENhY2hlVHlwZTo6U3R1YjoKKyAgICAgICAgcmV0dXJuIHUuc3R1Yi0+cHJvcGFnYXRlVHJh
bnNpdGlvbnMxMCh2aXNpdG9yKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAK
Ky8vICAgIFVOVVNFRF9QQVJBTSh2aXNpdG9yKTsgLy8gbWxhbSBURVNUCisgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworI2VuZGlmIC8vIEVO
QUJMRShKSVQpCisKKy8vdGVtcGxhdGU8PiBib29sIFN0cnVjdHVyZVN0dWJJbmZvOjpwcm9wYWdh
dGVUcmFuc2l0aW9uczEoU2xvdFZpc2l0b3ImKTsKKy8vdGVtcGxhdGU8PiBib29sIFN0cnVjdHVy
ZVN0dWJJbmZvOjpwcm9wYWdhdGVUcmFuc2l0aW9uczEoQWJzdHJhY3RTbG90VmlzaXRvciYpOwor
CisvL3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+CisvL3ZvaWQgQ29kZUJsb2NrOjpwcm9wYWdh
dGVUcmFuc2l0aW9ucyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBWaXNpdG9yJiB2aXNpdG9y
KQordm9pZCBDb2RlQmxvY2s6OnByb3BhZ2F0ZVRyYW5zaXRpb25zMShjb25zdCBDb25jdXJyZW50
SlNMb2NrZXImLCBBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFZNJiB2bSA9
ICptX3ZtOwogCkBAIC0xMTYzLDcgKzEyMDcsNyBAQCB2b2lkIENvZGVCbG9jazo6cHJvcGFnYXRl
VHJhbnNpdGlvbnMoY29uCiAgICAgaWYgKEpJVENvZGU6OmlzSklUKGppdFR5cGUoKSkpIHsKICAg
ICAgICAgaWYgKGF1dG8qIGppdERhdGEgPSBtX2ppdERhdGEuZ2V0KCkpIHsKICAgICAgICAgICAg
IGZvciAoU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvIDogaml0RGF0YS0+bV9zdHViSW5mb3Mp
Ci0gICAgICAgICAgICAgICAgc3R1YkluZm8tPnByb3BhZ2F0ZVRyYW5zaXRpb25zKHZpc2l0b3Ip
OworICAgICAgICAgICAgICAgIHN0dWJJbmZvLT5wcm9wYWdhdGVUcmFuc2l0aW9uczEodmlzaXRv
cik7CiAgICAgICAgIH0KICAgICB9CiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKQEAgLTExNzIsMTAg
KzEyMTYsMTAgQEAgdm9pZCBDb2RlQmxvY2s6OnByb3BhZ2F0ZVRyYW5zaXRpb25zKGNvbgogICAg
IGlmIChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSgpKSkgewogICAgICAgICBERkc6
OkNvbW1vbkRhdGEqIGRmZ0NvbW1vbiA9IG1faml0Q29kZS0+ZGZnQ29tbW9uKCk7CiAgICAgICAg
IAotICAgICAgICBkZmdDb21tb24tPnJlY29yZGVkU3RhdHVzZXMubWFya0lmQ2hlYXAodmlzaXRv
cik7CisgICAgICAgIGRmZ0NvbW1vbi0+cmVjb3JkZWRTdGF0dXNlcy5tYXJrSWZDaGVhcDEodmlz
aXRvcik7CiAgICAgICAgIAogICAgICAgICBmb3IgKFN0cnVjdHVyZUlEIHN0cnVjdHVyZUlEIDog
ZGZnQ29tbW9uLT53ZWFrU3RydWN0dXJlUmVmZXJlbmNlcykKLSAgICAgICAgICAgIHZtLmdldFN0
cnVjdHVyZShzdHJ1Y3R1cmVJRCktPm1hcmtJZkNoZWFwKHZpc2l0b3IpOworICAgICAgICAgICAg
dm0uZ2V0U3RydWN0dXJlKHN0cnVjdHVyZUlEKS0+bWFya0lmQ2hlYXAxKHZpc2l0b3IpOwogCiAg
ICAgICAgIGZvciAoYXV0byYgdHJhbnNpdGlvbiA6IGRmZ0NvbW1vbi0+dHJhbnNpdGlvbnMpIHsK
ICAgICAgICAgICAgIGlmIChzaG91bGRNYXJrVHJhbnNpdGlvbih2bSwgdHJhbnNpdGlvbikpIHsK
QEAgLTEyMDUsNyArMTI0OSwxMiBAQCB2b2lkIENvZGVCbG9jazo6cHJvcGFnYXRlVHJhbnNpdGlv
bnMoY29uCiAjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCiB9CiAKLXZvaWQgQ29kZUJsb2NrOjpk
ZXRlcm1pbmVMaXZlbmVzcyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBTbG90VmlzaXRvciYg
dmlzaXRvcikKKy8vdGVtcGxhdGUgdm9pZCBDb2RlQmxvY2s6OnByb3BhZ2F0ZVRyYW5zaXRpb25z
KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIFNsb3RWaXNpdG9yJik7CisvL3RlbXBsYXRlIHZv
aWQgQ29kZUJsb2NrOjpwcm9wYWdhdGVUcmFuc2l0aW9ucyhjb25zdCBDb25jdXJyZW50SlNMb2Nr
ZXImLCBEZWJ1Z1Nsb3RWaXNpdG9yJik7CisKKy8vdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4K
Ky8vdm9pZCBDb2RlQmxvY2s6OmRldGVybWluZUxpdmVuZXNzKGNvbnN0IENvbmN1cnJlbnRKU0xv
Y2tlciYsIFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIENvZGVCbG9jazo6ZGV0ZXJtaW5lTGl2ZW5l
c3MoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRv
cikKIHsKICAgICBVTlVTRURfUEFSQU0odmlzaXRvcik7CiAgICAgCkBAIC0xMjU0LDYgKzEzMDMs
OSBAQCB2b2lkIENvZGVCbG9jazo6ZGV0ZXJtaW5lTGl2ZW5lc3MoY29uc3QgCiAjZW5kaWYgLy8g
RU5BQkxFKERGR19KSVQpCiB9CiAKKy8vdGVtcGxhdGUgdm9pZCBDb2RlQmxvY2s6OmRldGVybWlu
ZUxpdmVuZXNzKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIFNsb3RWaXNpdG9yJik7CisvL3Rl
bXBsYXRlIHZvaWQgQ29kZUJsb2NrOjpkZXRlcm1pbmVMaXZlbmVzcyhjb25zdCBDb25jdXJyZW50
SlNMb2NrZXImLCBEZWJ1Z1Nsb3RWaXNpdG9yJik7CisKIHZvaWQgQ29kZUJsb2NrOjpmaW5hbGl6
ZUxMSW50SW5saW5lQ2FjaGVzKCkKIHsKICAgICBWTSYgdm0gPSAqbV92bTsKQEAgLTE3NjIsNyAr
MTgxNCw4IEBAIHZvaWQgQ29kZUJsb2NrOjpyZXNldEpJVERhdGEoKQogfQogI2VuZGlmCiAKLXZv
aWQgQ29kZUJsb2NrOjp2aXNpdE9TUkV4aXRUYXJnZXRzKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tl
ciYsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3Zv
aWQgQ29kZUJsb2NrOjp2aXNpdE9TUkV4aXRUYXJnZXRzKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tl
ciYsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgLy8gV2Ugc3Ryb25nbHkgdmlzaXQgT1NSIGV4
aXRzIHRhcmdldHMgYmVjYXVzZSB3ZSBkb24ndCB3YW50IHRvIGRlYWwgd2l0aAogICAgIC8vIHRo
ZSBjb21wbGV4aXR5IG9mIGdlbmVyYXRpbmcgYW4gZXhpdCB0YXJnZXQgQ29kZUJsb2NrIG9uIGRl
bWFuZCBhbmQKQEAgLTE3ODIsNyArMTgzNSwxMSBAQCB2b2lkIENvZGVCbG9jazo6dmlzaXRPU1JF
eGl0VGFyZ2V0cyhjb25zCiAjZW5kaWYKIH0KIAotdm9pZCBDb2RlQmxvY2s6OnN0cm9uZ2x5Vmlz
aXRTdHJvbmdSZWZlcmVuY2VzKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYgbG9ja2VyLCBTbG90
VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlIHZvaWQgQ29kZUJsb2NrOjp2aXNpdE9TUkV4aXRU
YXJnZXRzKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0
ZSB2b2lkIENvZGVCbG9jazo6dmlzaXRPU1JFeGl0VGFyZ2V0cyhjb25zdCBDb25jdXJyZW50SlNM
b2NrZXImLCBBYnN0cmFjdFNsb3RWaXNpdG9yJik7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0
b3I+Cit2b2lkIENvZGVCbG9jazo6c3Ryb25nbHlWaXNpdFN0cm9uZ1JlZmVyZW5jZXMoY29uc3Qg
Q29uY3VycmVudEpTTG9ja2VyJiBsb2NrZXIsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgVU5V
U0VEX1BBUkFNKGxvY2tlcik7CiAgICAgCkBAIC0xODAzLDIyICsxODYwLDI2IEBAIHZvaWQgQ29k
ZUJsb2NrOjpzdHJvbmdseVZpc2l0U3Ryb25nUmVmZXIKICNpZiBFTkFCTEUoSklUKQogICAgIGlm
IChhdXRvKiBqaXREYXRhID0gbV9qaXREYXRhLmdldCgpKSB7CiAgICAgICAgIGZvciAoQnlWYWxJ
bmZvKiBieVZhbEluZm8gOiBqaXREYXRhLT5tX2J5VmFsSW5mb3MpCi0gICAgICAgICAgICBieVZh
bEluZm8tPnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOworICAgICAgICAgICAgYnlWYWxJbmZvLT52
aXNpdEFnZ3JlZ2F0ZTEodmlzaXRvcik7CiAgICAgICAgIGZvciAoU3RydWN0dXJlU3R1YkluZm8q
IHN0dWJJbmZvIDogaml0RGF0YS0+bV9zdHViSW5mb3MpCi0gICAgICAgICAgICBzdHViSW5mby0+
dmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7CisgICAgICAgICAgICBzdHViSW5mby0+dmlzaXRBZ2dy
ZWdhdGUxKHZpc2l0b3IpOwogICAgIH0KICNlbmRpZgogCiAjaWYgRU5BQkxFKERGR19KSVQpCiAg
ICAgaWYgKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRUeXBlKCkpKSB7CiAgICAgICAgIERG
Rzo6Q29tbW9uRGF0YSogZGZnQ29tbW9uID0gbV9qaXRDb2RlLT5kZmdDb21tb24oKTsKLSAgICAg
ICAgZGZnQ29tbW9uLT5yZWNvcmRlZFN0YXR1c2VzLnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOwor
ICAgICAgICBkZmdDb21tb24tPnJlY29yZGVkU3RhdHVzZXMudmlzaXRBZ2dyZWdhdGUxKHZpc2l0
b3IpOwogICAgICAgICB2aXNpdE9TUkV4aXRUYXJnZXRzKGxvY2tlciwgdmlzaXRvcik7CiAgICAg
fQogI2VuZGlmCiB9CiAKLXZvaWQgQ29kZUJsb2NrOjpzdHJvbmdseVZpc2l0V2Vha1JlZmVyZW5j
ZXMoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3Rl
bXBsYXRlIHZvaWQgQ29kZUJsb2NrOjpzdHJvbmdseVZpc2l0U3Ryb25nUmVmZXJlbmNlcyhjb25z
dCBDb25jdXJyZW50SlNMb2NrZXImLCBTbG90VmlzaXRvciYpOworLy90ZW1wbGF0ZSB2b2lkIENv
ZGVCbG9jazo6c3Ryb25nbHlWaXNpdFN0cm9uZ1JlZmVyZW5jZXMoY29uc3QgQ29uY3VycmVudEpT
TG9ja2VyJiwgRGVidWdTbG90VmlzaXRvciYpOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
Pgordm9pZCBDb2RlQmxvY2s6OnN0cm9uZ2x5VmlzaXRXZWFrUmVmZXJlbmNlcyhjb25zdCBDb25j
dXJyZW50SlNMb2NrZXImLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFVOVVNFRF9QQVJBTSh2
aXNpdG9yKTsKIApAQCAtMTg0NSw2ICsxOTA2LDkgQEAgdm9pZCBDb2RlQmxvY2s6OnN0cm9uZ2x5
VmlzaXRXZWFrUmVmZXJlbgogI2VuZGlmICAgIAogfQogCit0ZW1wbGF0ZSB2b2lkIENvZGVCbG9j
azo6c3Ryb25nbHlWaXNpdFdlYWtSZWZlcmVuY2VzKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYs
IFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIENvZGVCbG9jazo6c3Ryb25nbHlWaXNpdFdl
YWtSZWZlcmVuY2VzKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIEFic3RyYWN0U2xvdFZpc2l0
b3ImKTsKKwogQ29kZUJsb2NrKiBDb2RlQmxvY2s6OmJhc2VsaW5lQWx0ZXJuYXRpdmUoKQogewog
I2lmIEVOQUJMRShKSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29k
ZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Nv
ZGVCbG9jay5oCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTIwMSwxMCArMjAxLDExIEBAIHB1
YmxpYzoKICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIz
Njc3CiAgICAgQ29kZUJsb2NrKiBiYXNlbGluZVZlcnNpb24oKTsKIAorICAgIERFQ0xBUkVfVklT
SVRfQ0hJTERSRU47CisKICAgICBzdGF0aWMgc2l6ZV90IGVzdGltYXRlZFNpemUoSlNDZWxsKiwg
Vk0mKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9y
Jik7CiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKLSAgICB2b2lkIHZpc2l0Q2hp
bGRyZW4oU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX0lOU1RBTkNFX1ZJU0lUX0NISUxEUkVO
OwogICAgIHZvaWQgZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoVk0mKTsKIAogICAgIHZvaWQgbm90
aWZ5TGV4aWNhbEJpbmRpbmdVcGRhdGUoKTsKQEAgLTk2NywxMiArOTY4LDE0IEBAIHByaXZhdGU6
CiAgICAgYm9vbCBzaG91bGRKZXR0aXNvbkR1ZVRvV2Vha1JlZmVyZW5jZShWTSYpOwogICAgIGJv
b2wgc2hvdWxkSmV0dGlzb25EdWVUb09sZEFnZShjb25zdCBDb25jdXJyZW50SlNMb2NrZXImKTsK
ICAgICAKLSAgICB2b2lkIHByb3BhZ2F0ZVRyYW5zaXRpb25zKGNvbnN0IENvbmN1cnJlbnRKU0xv
Y2tlciYsIFNsb3RWaXNpdG9yJik7Ci0gICAgdm9pZCBkZXRlcm1pbmVMaXZlbmVzcyhjb25zdCBD
b25jdXJyZW50SlNMb2NrZXImLCBTbG90VmlzaXRvciYpOworLy8gICAgdGVtcGxhdGU8dHlwZW5h
bWUgVmlzaXRvcj4gdm9pZCBwcm9wYWdhdGVUcmFuc2l0aW9ucyhjb25zdCBDb25jdXJyZW50SlNM
b2NrZXImLCBWaXNpdG9yJik7CisgICAgdm9pZCBwcm9wYWdhdGVUcmFuc2l0aW9uczEoY29uc3Qg
Q29uY3VycmVudEpTTG9ja2VyJiwgQWJzdHJhY3RTbG90VmlzaXRvciYpOworLy8gICAgdGVtcGxh
dGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCBkZXRlcm1pbmVMaXZlbmVzcyhjb25zdCBDb25jdXJy
ZW50SlNMb2NrZXImLCBWaXNpdG9yJik7CisgICAgdm9pZCBkZXRlcm1pbmVMaXZlbmVzcyhjb25z
dCBDb25jdXJyZW50SlNMb2NrZXImLCBBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAgICAgICAgIAot
ICAgIHZvaWQgc3Ryb25nbHlWaXNpdFN0cm9uZ1JlZmVyZW5jZXMoY29uc3QgQ29uY3VycmVudEpT
TG9ja2VyJiwgU2xvdFZpc2l0b3ImKTsKLSAgICB2b2lkIHN0cm9uZ2x5VmlzaXRXZWFrUmVmZXJl
bmNlcyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBTbG90VmlzaXRvciYpOwotICAgIHZvaWQg
dmlzaXRPU1JFeGl0VGFyZ2V0cyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBTbG90VmlzaXRv
ciYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgc3Ryb25nbHlWaXNpdFN0
cm9uZ1JlZmVyZW5jZXMoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgVmlzaXRvciYpOworICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgc3Ryb25nbHlWaXNpdFdlYWtSZWZlcmVu
Y2VzKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIFZpc2l0b3ImKTsKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBWaXNpdG9yPiB2b2lkIHZpc2l0T1NSRXhpdFRhcmdldHMoY29uc3QgQ29uY3VycmVu
dEpTTG9ja2VyJiwgVmlzaXRvciYpOwogCiAgICAgdW5zaWduZWQgbnVtYmVyT2ZOb25Bcmd1bWVu
dFZhbHVlUHJvZmlsZXMoKSB7IHJldHVybiBtX251bWJlck9mTm9uQXJndW1lbnRWYWx1ZVByb2Zp
bGVzOyB9CiAgICAgdW5zaWduZWQgdG90YWxOdW1iZXJPZlZhbHVlUHJvZmlsZXMoKSB7IHJldHVy
biBudW1iZXJPZkFyZ3VtZW50VmFsdWVQcm9maWxlcygpICsgbnVtYmVyT2ZOb25Bcmd1bWVudFZh
bHVlUHJvZmlsZXMoKTsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Rl
bGV0ZUJ5SWRWYXJpYW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvRGVsZXRlQnlJZFZhcmlhbnQuY3BwCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRGVsZXRlQnlJZFZhcmlhbnQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC04OCwxOSArODgsMjkgQEAgYm9vbCBEZWxldGVCeUlkVmFyaWFudDo6d3JpdGVz
U3RydWN0dXJlcwogICAgIHJldHVybiAhIW5ld1N0cnVjdHVyZSgpOwogfQogCi12b2lkIERlbGV0
ZUJ5SWRWYXJpYW50Ojp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vdGVt
cGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KKy8vdm9pZCBEZWxldGVCeUlkVmFyaWFudDo6dmlzaXRB
Z2dyZWdhdGUoVmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgRGVsZXRlQnlJZFZhcmlhbnQ6OnZpc2l0
QWdncmVnYXRlMShBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewotICAgIG1faWRlbnRp
Zmllci52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKKyAgICBtX2lkZW50aWZpZXIudmlzaXRBZ2dy
ZWdhdGUxKHZpc2l0b3IpOwogfQogCi12b2lkIERlbGV0ZUJ5SWRWYXJpYW50OjptYXJrSWZDaGVh
cChTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vdGVtcGxhdGUgdm9pZCBEZWxldGVCeUlkVmFyaWFu
dDo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImKTsKKy8vdGVtcGxhdGUgdm9pZCBEZWxldGVC
eUlkVmFyaWFudDo6dmlzaXRBZ2dyZWdhdGUoRGVidWdTbG90VmlzaXRvciYpOworCisvL3RlbXBs
YXRlPHR5cGVuYW1lIFZpc2l0b3I+CisvL3ZvaWQgRGVsZXRlQnlJZFZhcmlhbnQ6Om1hcmtJZkNo
ZWFwKFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIERlbGV0ZUJ5SWRWYXJpYW50OjptYXJrSWZDaGVh
cDEoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBpZiAobV9vbGRTdHJ1Y3R1
cmUpCi0gICAgICAgIG1fb2xkU3RydWN0dXJlLT5tYXJrSWZDaGVhcCh2aXNpdG9yKTsKKyAgICAg
ICAgbV9vbGRTdHJ1Y3R1cmUtPm1hcmtJZkNoZWFwMSh2aXNpdG9yKTsKICAgICBpZiAobV9uZXdT
dHJ1Y3R1cmUpCi0gICAgICAgIG1fbmV3U3RydWN0dXJlLT5tYXJrSWZDaGVhcCh2aXNpdG9yKTsK
KyAgICAgICAgbV9uZXdTdHJ1Y3R1cmUtPm1hcmtJZkNoZWFwMSh2aXNpdG9yKTsKIH0KIAorLy90
ZW1wbGF0ZSB2b2lkIERlbGV0ZUJ5SWRWYXJpYW50OjptYXJrSWZDaGVhcChTbG90VmlzaXRvciYp
OworLy90ZW1wbGF0ZSB2b2lkIERlbGV0ZUJ5SWRWYXJpYW50OjptYXJrSWZDaGVhcChEZWJ1Z1Ns
b3RWaXNpdG9yJik7CisKIHZvaWQgRGVsZXRlQnlJZFZhcmlhbnQ6OmR1bXAoUHJpbnRTdHJlYW0m
IG91dCkgY29uc3QKIHsKICAgICBkdW1wSW5Db250ZXh0KG91dCwgbnVsbHB0cik7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRGVsZXRlQnlJZFZhcmlhbnQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRGVsZXRlQnlJZFZhcmlhbnQu
aAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Rl
bGV0ZUJ5SWRWYXJpYW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTYxLDggKzYxLDEwIEBAIHB1Ymxp
YzoKIAogICAgIGJvb2wgYXR0ZW1wdFRvTWVyZ2UoY29uc3QgRGVsZXRlQnlJZFZhcmlhbnQmIG90
aGVyKTsKIAotICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImKTsKLSAgICB2b2lk
IG1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJik7CisvLyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNp
dG9yPiB2b2lkIHZpc2l0QWdncmVnYXRlKFZpc2l0b3ImKTsKKy8vICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFZpc2l0b3I+IHZvaWQgbWFya0lmQ2hlYXAoVmlzaXRvciYpOworICAgIHZvaWQgdmlzaXRB
Z2dyZWdhdGUxKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKKyAgICB2b2lkIG1hcmtJZkNoZWFwMShB
YnN0cmFjdFNsb3RWaXNpdG9yJik7CiAgICAgYm9vbCBmaW5hbGl6ZShWTSYpOwogCiAgICAgdm9p
ZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvRGVsZXRlQnlTdGF0dXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9EZWxldGVCeVN0YXR1cy5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9EZWxldGVCeVN0YXR1cy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI1NCwxOCArMjU0LDI4IEBAIENhY2hlYWJsZUlkZW50aWZpZXIgRGVsZXRl
QnlTdGF0dXM6OnNpbmcKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi12b2lkIERlbGV0ZUJ5U3Rh
dHVzOjp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vdGVtcGxhdGU8dHlw
ZW5hbWUgVmlzaXRvcj4KKy8vdm9pZCBEZWxldGVCeVN0YXR1czo6dmlzaXRBZ2dyZWdhdGUoVmlz
aXRvciYgdmlzaXRvcikKK3ZvaWQgRGVsZXRlQnlTdGF0dXM6OnZpc2l0QWdncmVnYXRlMShBYnN0
cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGZvciAoRGVsZXRlQnlJZFZhcmlhbnQm
IHZhcmlhbnQgOiBtX3ZhcmlhbnRzKQotICAgICAgICB2YXJpYW50LnZpc2l0QWdncmVnYXRlKHZp
c2l0b3IpOworICAgICAgICB2YXJpYW50LnZpc2l0QWdncmVnYXRlMSh2aXNpdG9yKTsKIH0KIAot
dm9pZCBEZWxldGVCeVN0YXR1czo6bWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisv
L3RlbXBsYXRlIHZvaWQgRGVsZXRlQnlTdGF0dXM6OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9y
Jik7CisvL3RlbXBsYXRlIHZvaWQgRGVsZXRlQnlTdGF0dXM6OnZpc2l0QWdncmVnYXRlKERlYnVn
U2xvdFZpc2l0b3ImKTsKKworLy90ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgorLy92b2lkIERl
bGV0ZUJ5U3RhdHVzOjptYXJrSWZDaGVhcChWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBEZWxldGVC
eVN0YXR1czo6bWFya0lmQ2hlYXAxKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAg
ICAgZm9yIChEZWxldGVCeUlkVmFyaWFudCYgdmFyaWFudCA6IG1fdmFyaWFudHMpCi0gICAgICAg
IHZhcmlhbnQubWFya0lmQ2hlYXAodmlzaXRvcik7CisgICAgICAgIHZhcmlhbnQubWFya0lmQ2hl
YXAxKHZpc2l0b3IpOwogfQogCisvL3RlbXBsYXRlIHZvaWQgRGVsZXRlQnlTdGF0dXM6Om1hcmtJ
ZkNoZWFwKFNsb3RWaXNpdG9yJik7CisvL3RlbXBsYXRlIHZvaWQgRGVsZXRlQnlTdGF0dXM6Om1h
cmtJZkNoZWFwKERlYnVnU2xvdFZpc2l0b3ImKTsKKwogYm9vbCBEZWxldGVCeVN0YXR1czo6Zmlu
YWxpemUoVk0mIHZtKQogewogICAgIGZvciAoYXV0byYgdmFyaWFudCA6IG1fdmFyaWFudHMpIHsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9EZWxldGVCeVN0YXR1cy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9EZWxldGVCeVN0YXR1
cy5oCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
RGVsZXRlQnlTdGF0dXMuaAkod29ya2luZyBjb3B5KQpAQCAtODEsOCArODEsMTAgQEAgcHVibGlj
OgogICAgIC8vIEF0dGVtcHRzIHRvIHJlZHVjZSB0aGUgc2V0IG9mIHZhcmlhbnRzIHRvIGZpdCB0
aGUgZ2l2ZW4gc3RydWN0dXJlIHNldC4gVGhpcyBtYXkgYmUgYXBwcm94aW1hdGUuCiAgICAgdm9p
ZCBmaWx0ZXIoY29uc3QgU3RydWN0dXJlU2V0Jik7CiAKLSAgICB2b2lkIHZpc2l0QWdncmVnYXRl
KFNsb3RWaXNpdG9yJik7Ci0gICAgdm9pZCBtYXJrSWZDaGVhcChTbG90VmlzaXRvciYpOworLy8g
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCB2aXNpdEFnZ3JlZ2F0ZShWaXNpdG9y
Jik7CisvLyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIG1hcmtJZkNoZWFwKFZp
c2l0b3ImKTsKKyAgICB2b2lkIHZpc2l0QWdncmVnYXRlMShBYnN0cmFjdFNsb3RWaXNpdG9yJik7
CisgICAgdm9pZCBtYXJrSWZDaGVhcDEoQWJzdHJhY3RTbG90VmlzaXRvciYpOwogICAgIGJvb2wg
ZmluYWxpemUoVk0mKTsKIAogICAgIGJvb2wgYXBwZW5kVmFyaWFudChjb25zdCBEZWxldGVCeUlk
VmFyaWFudCYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0RpcmVjdEV2
YWxDb2RlQ2FjaGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9EaXJlY3RFdmFsQ29kZUNhY2hlLmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0RpcmVjdEV2YWxDb2RlQ2FjaGUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00NSw3ICs0NSw4IEBAIHZvaWQgRGlyZWN0RXZhbENvZGVDYWNoZTo6Y2xlYXIo
KQogICAgIG1fY2FjaGVNYXAuY2xlYXIoKTsKIH0KIAotdm9pZCBEaXJlY3RFdmFsQ29kZUNhY2hl
Ojp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1l
IFZpc2l0b3I+Cit2b2lkIERpcmVjdEV2YWxDb2RlQ2FjaGU6OnZpc2l0QWdncmVnYXRlKFZpc2l0
b3ImIHZpc2l0b3IpCiB7CiAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9sb2NrKTsKICAgICBFdmFs
Q2FjaGVNYXA6Oml0ZXJhdG9yIGVuZCA9IG1fY2FjaGVNYXAuZW5kKCk7CkBAIC01Myw1ICs1NCw3
IEBAIHZvaWQgRGlyZWN0RXZhbENvZGVDYWNoZTo6dmlzaXRBZ2dyZWdhdGUKICAgICAgICAgdmlz
aXRvci5hcHBlbmQocHRyLT52YWx1ZSk7CiB9CiAKLX0gLy8gbmFtZXNwYWNlIEpTQwordGVtcGxh
dGUgdm9pZCBEaXJlY3RFdmFsQ29kZUNhY2hlOjp2aXNpdEFnZ3JlZ2F0ZShBYnN0cmFjdFNsb3RW
aXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIERpcmVjdEV2YWxDb2RlQ2FjaGU6OnZpc2l0QWdncmVn
YXRlKFNsb3RWaXNpdG9yJik7CiAKK30gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0RpcmVjdEV2YWxDb2RlQ2FjaGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRGlyZWN0RXZhbENvZGVDYWNoZS5oCShy
ZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRGlyZWN0
RXZhbENvZGVDYWNoZS5oCSh3b3JraW5nIGNvcHkpCkBAIC05Nyw3ICs5Nyw3IEBAIG5hbWVzcGFj
ZSBKU0MgewogCiAgICAgICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fY2FjaGVN
YXAuaXNFbXB0eSgpOyB9CiAKLSAgICAgICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRv
ciYpOworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIHZpc2l0QWdncmVn
YXRlKFZpc2l0b3ImKTsKIAogICAgICAgICB2b2lkIGNsZWFyKCk7CiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhlY3V0YWJsZVRvQ29k
ZUJsb2NrRWRnZS5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9FeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMjAgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01
Myw3ICs1Myw5IEBAIHZvaWQgRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZTo6ZmluaXNoQ3IKICAg
ICBBU1NFUlQoIWlzQWN0aXZlKCkpOwogfQogCi12b2lkIEV4ZWN1dGFibGVUb0NvZGVCbG9ja0Vk
Z2U6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3Rl
bXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2U6
OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKKy8vdm9p
ZCBFeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlOjp2aXNpdENoaWxkcmVuMShKU0NlbGwqIGNlbGws
IEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgVk0mIHZtID0gdmlzaXRvci52
bSgpOwogICAgIEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UqIGVkZ2UgPSBqc0Nhc3Q8RXhlY3V0
YWJsZVRvQ29kZUJsb2NrRWRnZSo+KGNlbGwpOwpAQCAtMTE0LDE1ICsxMTYsMTcgQEAgdm9pZCBF
eGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlOjp2aXNpdENoaQogICAgIC8vIHdpbGwga2VlcCBmaXhw
b2ludGluZyB1bnRpbCB0aGUgZW5kLgogICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQoY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSk7CiAgICAgdm0uZXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRn
ZXNXaXRoQ29uc3RyYWludHMuYWRkKGVkZ2UpOwotICAgIGVkZ2UtPnJ1bkNvbnN0cmFpbnQobG9j
a2VyLCB2bSwgdmlzaXRvcik7CisgICAgZWRnZS0+cnVuQ29uc3RyYWludDEobG9ja2VyLCB2bSwg
dmlzaXRvcik7IC8vIG1sYW0gRklYTUUKIH0KIAotdm9pZCBFeGVjdXRhYmxlVG9Db2RlQmxvY2tF
ZGdlOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZp
c2l0b3IpCitERUZJTkVfVklTSVRfQ0hJTERSRU4oRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZSk7
CisKK3ZvaWQgRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZTo6dmlzaXRPdXRwdXRDb25zdHJhaW50
cyhKU0NlbGwqIGNlbGwsIEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgVk0m
IHZtID0gdmlzaXRvci52bSgpOwogICAgIEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UqIGVkZ2Ug
PSBqc0Nhc3Q8RXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZSo+KGNlbGwpOwogICAgIAotICAgIGVk
Z2UtPnJ1bkNvbnN0cmFpbnQoTm9Mb2NraW5nTmVjZXNzYXJ5LCB2bSwgdmlzaXRvcik7CisgICAg
ZWRnZS0+cnVuQ29uc3RyYWludDEoTm9Mb2NraW5nTmVjZXNzYXJ5LCB2bSwgdmlzaXRvcik7CiB9
CiAKIHZvaWQgRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZTo6ZmluYWxpemVVbmNvbmRpdGlvbmFs
bHkoVk0mIHZtKQpAQCAtMTg2LDE2ICsxOTAsMjAgQEAgRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRn
ZTo6RXhlY3V0YWJsZVRvQwogewogfQogCi12b2lkIEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2U6
OnJ1bkNvbnN0cmFpbnQoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiBsb2NrZXIsIFZNJiB2bSwg
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+CisvL3Zv
aWQgRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZTo6cnVuQ29uc3RyYWludDEoY29uc3QgQ29uY3Vy
cmVudEpTTG9ja2VyJiBsb2NrZXIsIFZNJiB2bSwgVmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgRXhl
Y3V0YWJsZVRvQ29kZUJsb2NrRWRnZTo6cnVuQ29uc3RyYWludDEoY29uc3QgQ29uY3VycmVudEpT
TG9ja2VyJiBsb2NrZXIsIFZNJiB2bSwgQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsK
ICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IG1fY29kZUJsb2NrLmdldCgpOwogICAgIAotICAg
IGNvZGVCbG9jay0+cHJvcGFnYXRlVHJhbnNpdGlvbnMobG9ja2VyLCB2aXNpdG9yKTsKKyAgICBj
b2RlQmxvY2stPnByb3BhZ2F0ZVRyYW5zaXRpb25zMShsb2NrZXIsIHZpc2l0b3IpOwogICAgIGNv
ZGVCbG9jay0+ZGV0ZXJtaW5lTGl2ZW5lc3MobG9ja2VyLCB2aXNpdG9yKTsKICAgICAKICAgICBp
ZiAodm0uaGVhcC5pc01hcmtlZChjb2RlQmxvY2spKQogICAgICAgICB2bS5leGVjdXRhYmxlVG9D
b2RlQmxvY2tFZGdlc1dpdGhDb25zdHJhaW50cy5yZW1vdmUodGhpcyk7CiB9CiAKLX0gLy8gbmFt
ZXNwYWNlIEpTQworLy90ZW1wbGF0ZSB2b2lkIEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2U6OnJ1
bkNvbnN0cmFpbnQxKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIFZNJiwgU2xvdFZpc2l0b3Im
KTsKKy8vdGVtcGxhdGUgdm9pZCBFeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlOjpydW5Db25zdHJh
aW50MShjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBWTSYsIEFic3RyYWN0U2xvdFZpc2l0b3Im
KTsKIAorfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlLmgJKHJldmlz
aW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGVjdXRhYmxl
VG9Db2RlQmxvY2tFZGdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDE4LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01Myw5ICs1MywxMCBAQCBwdWJs
aWM6CiAgICAgREVDTEFSRV9JTkZPOwogCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2soKSBjb25z
dCB7IHJldHVybiBtX2NvZGVCbG9jay5nZXQoKTsgfQotICAgIAotICAgIHN0YXRpYyB2b2lkIHZp
c2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNp
dE91dHB1dENvbnN0cmFpbnRzKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisKKyAgICBERUNMQVJF
X1ZJU0lUX0NISUxEUkVOOworLy8gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbjEoSlNDZWxs
KiwgQWJzdHJhY3RTbG90VmlzaXRvciYpOworICAgIHN0YXRpYyB2b2lkIHZpc2l0T3V0cHV0Q29u
c3RyYWludHMoSlNDZWxsKiwgQWJzdHJhY3RTbG90VmlzaXRvciYpOwogICAgIHZvaWQgZmluYWxp
emVVbmNvbmRpdGlvbmFsbHkoVk0mKTsKICAgICAKICAgICBzdGF0aWMgQ29kZUJsb2NrKiB1bndy
YXAoRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZSogZWRnZSkKQEAgLTgxLDkgKzgyLDExIEBAIHBy
aXZhdGU6CiAgICAgdm9pZCBhY3RpdmF0ZSgpOwogICAgIHZvaWQgZGVhY3RpdmF0ZSgpOwogICAg
IGJvb2wgaXNBY3RpdmUoKSBjb25zdDsKLSAgICAKLSAgICB2b2lkIHJ1bkNvbnN0cmFpbnQoY29u
c3QgQ29uY3VycmVudEpTTG9ja2VyJiwgVk0mLCBTbG90VmlzaXRvciYpOwotICAgIAorCisvLyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgorLy8gICAgdm9pZCBydW5Db25zdHJhaW50MShj
b25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBWTSYsIFZpc2l0b3ImKTsKKyAgICB2b2lkIHJ1bkNv
bnN0cmFpbnQxKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIFZNJiwgQWJzdHJhY3RTbG90Vmlz
aXRvciYpOworCiAgICAgV3JpdGVCYXJyaWVyPENvZGVCbG9jaz4gbV9jb2RlQmxvY2s7CiB9Owog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFZhcmlhbnQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkVmFy
aWFudC5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9HZXRCeUlkVmFyaWFudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1NiwxNiArMTU2LDI2
IEBAIGJvb2wgR2V0QnlJZFZhcmlhbnQ6OmF0dGVtcHRUb01lcmdlKGNvbnMKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIAotdm9pZCBHZXRCeUlkVmFyaWFudDo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0
b3ImIHZpc2l0b3IpCisvL3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+CisvL3ZvaWQgR2V0QnlJ
ZFZhcmlhbnQ6OnZpc2l0QWdncmVnYXRlKFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIEdldEJ5SWRW
YXJpYW50Ojp2aXNpdEFnZ3JlZ2F0ZTEoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsK
LSAgICBtX2lkZW50aWZpZXIudmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7CisgICAgbV9pZGVudGlm
aWVyLnZpc2l0QWdncmVnYXRlMSh2aXNpdG9yKTsKIH0KIAotdm9pZCBHZXRCeUlkVmFyaWFudDo6
bWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3RlbXBsYXRlIHZvaWQgR2V0QnlJ
ZFZhcmlhbnQ6OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJik7CisvL3RlbXBsYXRlIHZvaWQg
R2V0QnlJZFZhcmlhbnQ6OnZpc2l0QWdncmVnYXRlKERlYnVnU2xvdFZpc2l0b3ImKTsKKworLy90
ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgorLy92b2lkIEdldEJ5SWRWYXJpYW50OjptYXJrSWZD
aGVhcChWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBHZXRCeUlkVmFyaWFudDo6bWFya0lmQ2hlYXAx
KEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7Ci0gICAgbV9zdHJ1Y3R1cmVTZXQubWFy
a0lmQ2hlYXAodmlzaXRvcik7CisgICAgbV9zdHJ1Y3R1cmVTZXQubWFya0lmQ2hlYXAxKHZpc2l0
b3IpOwogfQogCisvL3RlbXBsYXRlIHZvaWQgR2V0QnlJZFZhcmlhbnQ6Om1hcmtJZkNoZWFwKFNs
b3RWaXNpdG9yJik7CisvL3RlbXBsYXRlIHZvaWQgR2V0QnlJZFZhcmlhbnQ6Om1hcmtJZkNoZWFw
KERlYnVnU2xvdFZpc2l0b3ImKTsKKwogYm9vbCBHZXRCeUlkVmFyaWFudDo6ZmluYWxpemUoVk0m
IHZtKQogewogICAgIGlmICghbV9zdHJ1Y3R1cmVTZXQuaXNTdGlsbEFsaXZlKHZtKSkKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkVmFyaWFudC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkVmFyaWFudC5oCShy
ZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJ
ZFZhcmlhbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNzcsOCArNzcsMTAgQEAgcHVibGljOgogCiAg
ICAgYm9vbCBhdHRlbXB0VG9NZXJnZShjb25zdCBHZXRCeUlkVmFyaWFudCYgb3RoZXIpOwogICAg
IAotICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImKTsKLSAgICB2b2lkIG1hcmtJ
ZkNoZWFwKFNsb3RWaXNpdG9yJik7CisvLyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2
b2lkIHZpc2l0QWdncmVnYXRlKFZpc2l0b3ImKTsKKy8vICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZp
c2l0b3I+IHZvaWQgbWFya0lmQ2hlYXAoVmlzaXRvciYpOworICAgIHZvaWQgdmlzaXRBZ2dyZWdh
dGUxKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKKyAgICB2b2lkIG1hcmtJZkNoZWFwMShBYnN0cmFj
dFNsb3RWaXNpdG9yJik7CiAgICAgYm9vbCBmaW5hbGl6ZShWTSYpOwogICAgIAogICAgIHZvaWQg
ZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0dldEJ5U3RhdHVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvR2V0QnlTdGF0dXMuY3BwCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlTdGF0dXMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC01MzAsMjAgKzUzMCwzMSBAQCB2b2lkIEdldEJ5U3RhdHVzOjpmaWx0ZXIoY29uc3QgU3RydWN0
dXJlCiAgICAgICAgIG1fc3RhdGUgPSBOb0luZm9ybWF0aW9uOwogfQogCi12b2lkIEdldEJ5U3Rh
dHVzOjp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vdGVtcGxhdGU8dHlw
ZW5hbWUgVmlzaXRvcj4KKy8vdm9pZCBHZXRCeVN0YXR1czo6dmlzaXRBZ2dyZWdhdGUoVmlzaXRv
ciYgdmlzaXRvcikKK3ZvaWQgR2V0QnlTdGF0dXM6OnZpc2l0QWdncmVnYXRlMShBYnN0cmFjdFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGlmIChpc01vZHVsZU5hbWVzcGFjZSgpKQotICAg
ICAgICBtX21vZHVsZU5hbWVzcGFjZURhdGEtPm1faWRlbnRpZmllci52aXNpdEFnZ3JlZ2F0ZSh2
aXNpdG9yKTsKKyAgICAgICAgbV9tb2R1bGVOYW1lc3BhY2VEYXRhLT5tX2lkZW50aWZpZXIudmlz
aXRBZ2dyZWdhdGUxKHZpc2l0b3IpOwogICAgIGZvciAoR2V0QnlJZFZhcmlhbnQmIHZhcmlhbnQg
OiBtX3ZhcmlhbnRzKQotICAgICAgICB2YXJpYW50LnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOwor
ICAgICAgICB2YXJpYW50LnZpc2l0QWdncmVnYXRlMSh2aXNpdG9yKTsKIH0KIAotdm9pZCBHZXRC
eVN0YXR1czo6bWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3RlbXBsYXRlIHZv
aWQgR2V0QnlTdGF0dXM6OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJik7CisvL3RlbXBsYXRl
IHZvaWQgR2V0QnlTdGF0dXM6OnZpc2l0QWdncmVnYXRlKERlYnVnU2xvdFZpc2l0b3ImKTsKKwor
Ly90ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgorLy92b2lkIEdldEJ5U3RhdHVzOjptYXJrSWZD
aGVhcChWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBHZXRCeVN0YXR1czo6bWFya0lmQ2hlYXAxKEFi
c3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgZm9yIChHZXRCeUlkVmFyaWFudCYg
dmFyaWFudCA6IG1fdmFyaWFudHMpCi0gICAgICAgIHZhcmlhbnQubWFya0lmQ2hlYXAodmlzaXRv
cik7CisgICAgICAgIHZhcmlhbnQubWFya0lmQ2hlYXAxKHZpc2l0b3IpOwogfQogCisvL3RlbXBs
YXRlIHZvaWQgR2V0QnlTdGF0dXM6Om1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJik7CisvL3RlbXBs
YXRlIHZvaWQgR2V0QnlTdGF0dXM6Om1hcmtJZkNoZWFwKERlYnVnU2xvdFZpc2l0b3ImKTsKKwor
CiBib29sIEdldEJ5U3RhdHVzOjpmaW5hbGl6ZShWTSYgdm0pCiB7CiAgICAgZm9yIChHZXRCeUlk
VmFyaWFudCYgdmFyaWFudCA6IG1fdmFyaWFudHMpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9HZXRCeVN0YXR1cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9HZXRCeVN0YXR1cy5oCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlTdGF0dXMuaAkod29ya2luZyBjb3B5KQpA
QCAtMTE4LDggKzExOCwxMCBAQCBwdWJsaWM6CiAgICAgSlNNb2R1bGVFbnZpcm9ubWVudCogbW9k
dWxlRW52aXJvbm1lbnQoKSBjb25zdCB7IHJldHVybiBtX21vZHVsZU5hbWVzcGFjZURhdGEtPm1f
bW9kdWxlRW52aXJvbm1lbnQ7IH0KICAgICBTY29wZU9mZnNldCBzY29wZU9mZnNldCgpIGNvbnN0
IHsgcmV0dXJuIG1fbW9kdWxlTmFtZXNwYWNlRGF0YS0+bV9zY29wZU9mZnNldDsgfQogICAgIAot
ICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImKTsKLSAgICB2b2lkIG1hcmtJZkNo
ZWFwKFNsb3RWaXNpdG9yJik7CisvLyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lk
IHZpc2l0QWdncmVnYXRlKFZpc2l0b3ImKTsKKy8vICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0
b3I+IHZvaWQgbWFya0lmQ2hlYXAoVmlzaXRvciYpOworICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUx
KEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKKyAgICB2b2lkIG1hcmtJZkNoZWFwMShBYnN0cmFjdFNs
b3RWaXNpdG9yJik7CiAgICAgYm9vbCBmaW5hbGl6ZShWTSYpOyAvLyBSZXR1cm4gdHJ1ZSBpZiB0
aGlzIGdldHMgdG8gbGl2ZS4KIAogICAgIGJvb2wgYXBwZW5kVmFyaWFudChjb25zdCBHZXRCeUlk
VmFyaWFudCYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luQnlJZFN0
YXR1cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lu
QnlJZFN0YXR1cy5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9JbkJ5SWRTdGF0dXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTEsMTIgKzI1
MSwxNyBAQCB2b2lkIEluQnlJZFN0YXR1czo6ZmlsdGVyKGNvbnN0IFN0cnVjdHVyCiAgICAgICAg
IG1fc3RhdGUgPSBOb0luZm9ybWF0aW9uOwogfQogCi12b2lkIEluQnlJZFN0YXR1czo6bWFya0lm
Q2hlYXAoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+
CisvL3ZvaWQgSW5CeUlkU3RhdHVzOjptYXJrSWZDaGVhcChWaXNpdG9yJiB2aXNpdG9yKQordm9p
ZCBJbkJ5SWRTdGF0dXM6Om1hcmtJZkNoZWFwMShBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9y
KQogewogICAgIGZvciAoSW5CeUlkVmFyaWFudCYgdmFyaWFudCA6IG1fdmFyaWFudHMpCi0gICAg
ICAgIHZhcmlhbnQubWFya0lmQ2hlYXAodmlzaXRvcik7CisgICAgICAgIHZhcmlhbnQubWFya0lm
Q2hlYXAxKHZpc2l0b3IpOwogfQogCisvL3RlbXBsYXRlIHZvaWQgSW5CeUlkU3RhdHVzOjptYXJr
SWZDaGVhcChTbG90VmlzaXRvciYpOworLy90ZW1wbGF0ZSB2b2lkIEluQnlJZFN0YXR1czo6bWFy
a0lmQ2hlYXAoRGVidWdTbG90VmlzaXRvciYpOworCiBib29sIEluQnlJZFN0YXR1czo6ZmluYWxp
emUoVk0mIHZtKQogewogICAgIGZvciAoSW5CeUlkVmFyaWFudCYgdmFyaWFudCA6IG1fdmFyaWFu
dHMpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbkJ5SWRTdGF0dXMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5CeUlkU3Rh
dHVzLmgJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9JbkJ5SWRTdGF0dXMuaAkod29ya2luZyBjb3B5KQpAQCAtMTA2LDcgKzEwNiw4IEBAIHB1Ymxp
YzoKICAgICAvLyBBdHRlbXB0cyB0byByZWR1Y2UgdGhlIHNldCBvZiB2YXJpYW50cyB0byBmaXQg
dGhlIGdpdmVuIHN0cnVjdHVyZSBzZXQuIFRoaXMgbWF5IGJlIGFwcHJveGltYXRlLgogICAgIHZv
aWQgZmlsdGVyKGNvbnN0IFN0cnVjdHVyZVNldCYpOwogICAgIAotICAgIHZvaWQgbWFya0lmQ2hl
YXAoU2xvdFZpc2l0b3ImKTsKKy8vICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQg
bWFya0lmQ2hlYXAoVmlzaXRvciYpOworICAgIHZvaWQgbWFya0lmQ2hlYXAxKEFic3RyYWN0U2xv
dFZpc2l0b3ImKTsKICAgICBib29sIGZpbmFsaXplKFZNJik7CiAKICAgICB2b2lkIGR1bXAoUHJp
bnRTdHJlYW0mKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9J
bkJ5SWRWYXJpYW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvSW5CeUlkVmFyaWFudC5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9JbkJ5SWRWYXJpYW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NjQsMTEgKzY0LDE2IEBAIGJvb2wgSW5CeUlkVmFyaWFudDo6YXR0ZW1wdFRvTWVyZ2UoY29uc3QK
ICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBJbkJ5SWRWYXJpYW50OjptYXJrSWZDaGVhcChT
bG90VmlzaXRvciYgdmlzaXRvcikKKy8vdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KKy8vdm9p
ZCBJbkJ5SWRWYXJpYW50OjptYXJrSWZDaGVhcChWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBJbkJ5
SWRWYXJpYW50OjptYXJrSWZDaGVhcDEoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsK
LSAgICBtX3N0cnVjdHVyZVNldC5tYXJrSWZDaGVhcCh2aXNpdG9yKTsKKyAgICBtX3N0cnVjdHVy
ZVNldC5tYXJrSWZDaGVhcDEodmlzaXRvcik7CiB9CiAKKy8vdGVtcGxhdGUgdm9pZCBJbkJ5SWRW
YXJpYW50OjptYXJrSWZDaGVhcChTbG90VmlzaXRvciYpOworLy90ZW1wbGF0ZSB2b2lkIEluQnlJ
ZFZhcmlhbnQ6Om1hcmtJZkNoZWFwKERlYnVnU2xvdFZpc2l0b3ImKTsKKwogYm9vbCBJbkJ5SWRW
YXJpYW50OjpmaW5hbGl6ZShWTSYgdm0pCiB7CiAgICAgaWYgKCFtX3N0cnVjdHVyZVNldC5pc1N0
aWxsQWxpdmUodm0pKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luQnlJ
ZFZhcmlhbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
SW5CeUlkVmFyaWFudC5oCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvSW5CeUlkVmFyaWFudC5oCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw3ICs1Nyw4
IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgYXR0ZW1wdFRvTWVyZ2UoY29uc3QgSW5CeUlkVmFyaWFu
dCYgb3RoZXIpOwogICAgIAotICAgIHZvaWQgbWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImKTsKKy8v
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgbWFya0lmQ2hlYXAoVmlzaXRvciYp
OworICAgIHZvaWQgbWFya0lmQ2hlYXAxKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKICAgICBib29s
IGZpbmFsaXplKFZNJik7CiAKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnRlcm5hbEZ1bmN0aW9uQWxsb2Nh
dGlvblByb2ZpbGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvSW50ZXJuYWxGdW5jdGlvbkFsbG9jYXRpb25Qcm9maWxlLmgJKHJldmlzaW9uIDI3MTQ0MykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnRlcm5hbEZ1bmN0aW9uQWxsb2Nh
dGlvblByb2ZpbGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzksNyArMzksNyBAQCBwdWJsaWM6CiAg
ICAgU3RydWN0dXJlKiBjcmVhdGVBbGxvY2F0aW9uU3RydWN0dXJlRnJvbUJhc2UoVk0mLCBKU0ds
b2JhbE9iamVjdCosIEpTQ2VsbCogb3duZXIsIEpTT2JqZWN0KiBwcm90b3R5cGUsIFN0cnVjdHVy
ZSogYmFzZSk7CiAKICAgICB2b2lkIGNsZWFyKCkgeyBtX3N0cnVjdHVyZS5jbGVhcigpOyB9Ci0g
ICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYgdmlzaXRvcikgeyB2aXNpdG9yLmFw
cGVuZChtX3N0cnVjdHVyZSk7IH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lk
IHZpc2l0QWdncmVnYXRlKFZpc2l0b3ImIHZpc2l0b3IpIHsgdmlzaXRvci5hcHBlbmQobV9zdHJ1
Y3R1cmUpOyB9CiAKIHByaXZhdGU6CiAgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gbV9zdHJ1
Y3R1cmU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT2JqZWN0QWxsb2Nh
dGlvblByb2ZpbGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUuaAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09iamVjdEFsbG9jYXRpb25Qcm9maWxlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTY0LDcgKzY0LDggQEAgcHJvdGVjdGVkOgogICAgICAgICBBU1NFUlQoaXNO
dWxsKCkpOwogICAgIH0KIAotICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImIHZp
c2l0b3IpCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KKyAgICB2b2lkIHZpc2l0QWdn
cmVnYXRlKFZpc2l0b3ImIHZpc2l0b3IpCiAgICAgewogICAgICAgICB2aXNpdG9yLmFwcGVuZCht
X3N0cnVjdHVyZSk7CiAgICAgfQpAQCAtMTEwLDcgKzExMSw4IEBAIHB1YmxpYzoKICAgICAgICAg
QVNTRVJUKGlzTnVsbCgpKTsKICAgICB9CiAKLSAgICB2b2lkIHZpc2l0QWdncmVnYXRlKFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+CisgICAgdm9p
ZCB2aXNpdEFnZ3JlZ2F0ZShWaXNpdG9yJiB2aXNpdG9yKQogICAgIHsKICAgICAgICAgQmFzZTo6
dmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7CiAgICAgICAgIHZpc2l0b3IuYXBwZW5kKG1fcHJvdG90
eXBlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0Fj
Y2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Bv
bHltb3JwaGljQWNjZXNzLmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzU4LDcgKzM1OCw5IEBAIGJvb2wgUG9seW1vcnBoaWNBY2Nlc3M6OnZpc2l0V2VhayhWTSYgdm0K
ICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBQb2x5bW9ycGhpY0FjY2Vzczo6cHJvcGFnYXRl
VHJhbnNpdGlvbnMoU2xvdFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0CisvL3RlbXBsYXRlPHR5cGVu
YW1lIFZpc2l0b3I+CisvL2Jvb2wgUG9seW1vcnBoaWNBY2Nlc3M6OnByb3BhZ2F0ZVRyYW5zaXRp
b25zMTAoVmlzaXRvciYgdmlzaXRvcikgY29uc3QKK2Jvb2wgUG9seW1vcnBoaWNBY2Nlc3M6OnBy
b3BhZ2F0ZVRyYW5zaXRpb25zMTAoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikgY29uc3QK
IHsKICAgICBib29sIHJlc3VsdCA9IHRydWU7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IHNpemUoKTsgKytpKQpAQCAtMzY2LDEyICszNjgsMjEgQEAgYm9vbCBQb2x5bW9ycGhpY0FjY2Vz
czo6cHJvcGFnYXRlVHJhbnNpdAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQgUG9seW1v
cnBoaWNBY2Nlc3M6OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy90ZW1w
bGF0ZTw+IGJvb2wgUG9seW1vcnBoaWNBY2Nlc3M6OnByb3BhZ2F0ZVRyYW5zaXRpb25zMTAoU2xv
dFZpc2l0b3ImKSBjb25zdDsKKy8vdGVtcGxhdGU8PiBib29sIFBvbHltb3JwaGljQWNjZXNzOjpw
cm9wYWdhdGVUcmFuc2l0aW9uczEwKEFic3RyYWN0U2xvdFZpc2l0b3ImKSBjb25zdDsKKworCisv
L3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+CisvL3ZvaWQgUG9seW1vcnBoaWNBY2Nlc3M6OnZp
c2l0QWdncmVnYXRlKFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIFBvbHltb3JwaGljQWNjZXNzOjp2
aXNpdEFnZ3JlZ2F0ZTEoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZSgpOyArK2kpCi0gICAgICAgIGF0KGkpLnZpc2l0QWdn
cmVnYXRlKHZpc2l0b3IpOworICAgICAgICBhdChpKS52aXNpdEFnZ3JlZ2F0ZTEodmlzaXRvcik7
CiB9CiAKKy8vdGVtcGxhdGUgdm9pZCBQb2x5bW9ycGhpY0FjY2Vzczo6dmlzaXRBZ2dyZWdhdGUo
U2xvdFZpc2l0b3ImKTsKKy8vdGVtcGxhdGUgdm9pZCBQb2x5bW9ycGhpY0FjY2Vzczo6dmlzaXRB
Z2dyZWdhdGUoRGVidWdTbG90VmlzaXRvciYpOworCiB2b2lkIFBvbHltb3JwaGljQWNjZXNzOjpk
dW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiB7CiAgICAgb3V0LnByaW50KFJhd1BvaW50ZXIo
dGhpcyksICI6WyIpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHlt
b3JwaGljQWNjZXNzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1BvbHltb3JwaGljQWNjZXNzLmgJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xNTIsMTQgKzE1MiwxNiBAQCBwdWJsaWM6CiAgICAgY29uc3QgQWNjZXNzQ2FzZSYgYXQodW5z
aWduZWQgaSkgY29uc3QgeyByZXR1cm4gKm1fbGlzdFtpXTsgfQogICAgIGNvbnN0IEFjY2Vzc0Nh
c2UmIG9wZXJhdG9yW10odW5zaWduZWQgaSkgY29uc3QgeyByZXR1cm4gKm1fbGlzdFtpXTsgfQog
Ci0gICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYpOworLy8gICAgdGVtcGxhdGU8
dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCB2aXNpdEFnZ3JlZ2F0ZShWaXNpdG9yJik7CisgICAgdm9p
ZCB2aXNpdEFnZ3JlZ2F0ZTEoQWJzdHJhY3RTbG90VmlzaXRvciYpOwogCiAgICAgLy8gSWYgdGhp
cyByZXR1cm5zIGZhbHNlIHRoZW4gd2UgYXJlIHJlcXVlc3RpbmcgYSByZXNldCBvZiB0aGUgb3du
aW5nIFN0cnVjdHVyZVN0dWJJbmZvLgogICAgIGJvb2wgdmlzaXRXZWFrKFZNJikgY29uc3Q7CiAg
ICAgCiAgICAgLy8gVGhpcyByZXR1cm5zIHRydWUgaWYgaXQgaGFzIG1hcmtlZCBldmVyeXRoaW5n
IGl0IHdpbGwgZXZlciBtYXJrZWQuIFRoaXMgY2FuIGJlIHVzZWQgYXMgYW4KICAgICAvLyBvcHRp
bWl6YXRpb24gdG8gdGhlbiBhdm9pZCBjYWxsaW5nIHRoaXMgbWV0aG9kIGFnYWluIGR1cmluZyB0
aGUgZml4cG9pbnQuCi0gICAgYm9vbCBwcm9wYWdhdGVUcmFuc2l0aW9ucyhTbG90VmlzaXRvciYp
IGNvbnN0OworLy8gICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gYm9vbCBwcm9wYWdhdGVU
cmFuc2l0aW9uczEwKFZpc2l0b3ImKSBjb25zdDsKKyAgICBib29sIHByb3BhZ2F0ZVRyYW5zaXRp
b25zMTAoQWJzdHJhY3RTbG90VmlzaXRvciYpIGNvbnN0OwogCiAgICAgdm9pZCBhYm91dFRvRGll
KCk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJ
ZFN0YXR1cy5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9QdXRCeUlkU3RhdHVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzk2LDEyICszOTYs
MTcgQEAgUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpzbG93VmVyc2lvbgogICAgIHJldHVy
biBQdXRCeUlkU3RhdHVzKG1ha2VzQ2FsbHMoKSA/IE1ha2VzQ2FsbHMgOiBUYWtlc1Nsb3dQYXRo
KTsKIH0KIAotdm9pZCBQdXRCeUlkU3RhdHVzOjptYXJrSWZDaGVhcChTbG90VmlzaXRvciYgdmlz
aXRvcikKKy8vdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KKy8vdm9pZCBQdXRCeUlkU3RhdHVz
OjptYXJrSWZDaGVhcChWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBQdXRCeUlkU3RhdHVzOjptYXJr
SWZDaGVhcDEoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBmb3IgKFB1dEJ5
SWRWYXJpYW50JiB2YXJpYW50IDogbV92YXJpYW50cykKLSAgICAgICAgdmFyaWFudC5tYXJrSWZD
aGVhcCh2aXNpdG9yKTsKKyAgICAgICAgdmFyaWFudC5tYXJrSWZDaGVhcDEodmlzaXRvcik7CiB9
CiAKKy8vdGVtcGxhdGUgdm9pZCBQdXRCeUlkU3RhdHVzOjptYXJrSWZDaGVhcChTbG90VmlzaXRv
ciYpOworLy90ZW1wbGF0ZSB2b2lkIFB1dEJ5SWRTdGF0dXM6Om1hcmtJZkNoZWFwKERlYnVnU2xv
dFZpc2l0b3ImKTsKKwogYm9vbCBQdXRCeUlkU3RhdHVzOjpmaW5hbGl6ZShWTSYgdm0pCiB7CiAg
ICAgZm9yIChQdXRCeUlkVmFyaWFudCYgdmFyaWFudCA6IG1fdmFyaWFudHMpIHsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuaAkocmV2aXNp
b24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0
dXMuaAkod29ya2luZyBjb3B5KQpAQCAtMTE3LDcgKzExNyw4IEBAIHB1YmxpYzoKICAgICBjb25z
dCBQdXRCeUlkVmFyaWFudCYgYXQoc2l6ZV90IGluZGV4KSBjb25zdCB7IHJldHVybiBtX3Zhcmlh
bnRzW2luZGV4XTsgfQogICAgIGNvbnN0IFB1dEJ5SWRWYXJpYW50JiBvcGVyYXRvcltdKHNpemVf
dCBpbmRleCkgY29uc3QgeyByZXR1cm4gYXQoaW5kZXgpOyB9CiAgICAgCi0gICAgdm9pZCBtYXJr
SWZDaGVhcChTbG90VmlzaXRvciYpOworLy8gICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4g
dm9pZCBtYXJrSWZDaGVhcChWaXNpdG9yJik7CisgICAgdm9pZCBtYXJrSWZDaGVhcDEoQWJzdHJh
Y3RTbG90VmlzaXRvciYpOwogICAgIGJvb2wgZmluYWxpemUoVk0mKTsKICAgICAKICAgICB2b2lk
IG1lcmdlKGNvbnN0IFB1dEJ5SWRTdGF0dXMmKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9QdXRCeUlkVmFyaWFudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmNwcAkocmV2aXNpb24gMjcxNDQzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjYyLDEzICsyNjIsMTggQEAgYm9vbCBQdXRCeUlkVmFyaWFudDo6YXR0
ZW1wdFRvTWVyZ2VUcmFucwogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIFB1dEJ5SWRWYXJp
YW50OjptYXJrSWZDaGVhcChTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vdGVtcGxhdGU8dHlwZW5h
bWUgVmlzaXRvcj4KKy8vdm9pZCBQdXRCeUlkVmFyaWFudDo6bWFya0lmQ2hlYXAoVmlzaXRvciYg
dmlzaXRvcikKK3ZvaWQgUHV0QnlJZFZhcmlhbnQ6Om1hcmtJZkNoZWFwMShBYnN0cmFjdFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQogewotICAgIG1fb2xkU3RydWN0dXJlLm1hcmtJZkNoZWFwKHZpc2l0
b3IpOworICAgIG1fb2xkU3RydWN0dXJlLm1hcmtJZkNoZWFwMSh2aXNpdG9yKTsKICAgICBpZiAo
bV9uZXdTdHJ1Y3R1cmUpCi0gICAgICAgIG1fbmV3U3RydWN0dXJlLT5tYXJrSWZDaGVhcCh2aXNp
dG9yKTsKKyAgICAgICAgbV9uZXdTdHJ1Y3R1cmUtPm1hcmtJZkNoZWFwMSh2aXNpdG9yKTsKIH0K
IAorLy90ZW1wbGF0ZSB2b2lkIFB1dEJ5SWRWYXJpYW50OjptYXJrSWZDaGVhcChTbG90VmlzaXRv
ciYpOworLy90ZW1wbGF0ZSB2b2lkIFB1dEJ5SWRWYXJpYW50OjptYXJrSWZDaGVhcChEZWJ1Z1Ns
b3RWaXNpdG9yJik7CisKIGJvb2wgUHV0QnlJZFZhcmlhbnQ6OmZpbmFsaXplKFZNJiB2bSkKIHsK
ICAgICBpZiAoIW1fb2xkU3RydWN0dXJlLmlzU3RpbGxBbGl2ZSh2bSkpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuaAkocmV2aXNpb24g
MjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEzMiw3ICsxMzIsOCBAQCBwdWJsaWM6CiAKICAgICBib29s
IGF0dGVtcHRUb01lcmdlKGNvbnN0IFB1dEJ5SWRWYXJpYW50JiBvdGhlcik7CiAgICAgCi0gICAg
dm9pZCBtYXJrSWZDaGVhcChTbG90VmlzaXRvciYpOworLy8gICAgdGVtcGxhdGU8dHlwZW5hbWUg
VmlzaXRvcj4gdm9pZCBtYXJrSWZDaGVhcChWaXNpdG9yJik7CisgICAgdm9pZCBtYXJrSWZDaGVh
cDEoQWJzdHJhY3RTbG90VmlzaXRvciYpOwogICAgIGJvb2wgZmluYWxpemUoVk0mKTsKICAgICAK
ICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9SZWNvcmRlZFN0YXR1c2VzLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUmVjb3JkZWRTdGF0dXNlcy5jcHAJKHJldmlzaW9u
IDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9SZWNvcmRlZFN0YXR1
c2VzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODQsMjYgKzg0LDM2IEBAIERlbGV0ZUJ5U3RhdHVz
KiBSZWNvcmRlZFN0YXR1c2VzOjphZGREZWwKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi12b2lk
IFJlY29yZGVkU3RhdHVzZXM6OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRv
cikKKy8vdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KKy8vdm9pZCBSZWNvcmRlZFN0YXR1c2Vz
Ojp2aXNpdEFnZ3JlZ2F0ZShWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBSZWNvcmRlZFN0YXR1c2Vz
Ojp2aXNpdEFnZ3JlZ2F0ZTEoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBm
b3IgKGF1dG8mIHBhaXIgOiBnZXRzKQotICAgICAgICBwYWlyLnNlY29uZC0+dmlzaXRBZ2dyZWdh
dGUoc2xvdFZpc2l0b3IpOworICAgICAgICBwYWlyLnNlY29uZC0+dmlzaXRBZ2dyZWdhdGUxKHZp
c2l0b3IpOwogICAgIGZvciAoYXV0byYgcGFpciA6IGRlbGV0ZXMpCi0gICAgICAgIHBhaXIuc2Vj
b25kLT52aXNpdEFnZ3JlZ2F0ZShzbG90VmlzaXRvcik7CisgICAgICAgIHBhaXIuc2Vjb25kLT52
aXNpdEFnZ3JlZ2F0ZTEodmlzaXRvcik7CiB9CiAKLXZvaWQgUmVjb3JkZWRTdGF0dXNlczo6bWFy
a0lmQ2hlYXAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yKQorLy90ZW1wbGF0ZSB2b2lkIFJlY29y
ZGVkU3RhdHVzZXM6OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJik7CisvL3RlbXBsYXRlIHZv
aWQgUmVjb3JkZWRTdGF0dXNlczo6dmlzaXRBZ2dyZWdhdGUoRGVidWdTbG90VmlzaXRvciYpOwor
CisvL3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+CisvL3ZvaWQgUmVjb3JkZWRTdGF0dXNlczo6
bWFya0lmQ2hlYXAoVmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgUmVjb3JkZWRTdGF0dXNlczo6bWFy
a0lmQ2hlYXAxKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgZm9yIChhdXRv
JiBwYWlyIDogZ2V0cykKLSAgICAgICAgcGFpci5zZWNvbmQtPm1hcmtJZkNoZWFwKHNsb3RWaXNp
dG9yKTsKKyAgICAgICAgcGFpci5zZWNvbmQtPm1hcmtJZkNoZWFwMSh2aXNpdG9yKTsKICAgICBm
b3IgKGF1dG8mIHBhaXIgOiBwdXRzKQotICAgICAgICBwYWlyLnNlY29uZC0+bWFya0lmQ2hlYXAo
c2xvdFZpc2l0b3IpOworICAgICAgICBwYWlyLnNlY29uZC0+bWFya0lmQ2hlYXAxKHZpc2l0b3Ip
OwogICAgIGZvciAoYXV0byYgcGFpciA6IGlucykKLSAgICAgICAgcGFpci5zZWNvbmQtPm1hcmtJ
ZkNoZWFwKHNsb3RWaXNpdG9yKTsKKyAgICAgICAgcGFpci5zZWNvbmQtPm1hcmtJZkNoZWFwMSh2
aXNpdG9yKTsKICAgICBmb3IgKGF1dG8mIHBhaXIgOiBkZWxldGVzKQotICAgICAgICBwYWlyLnNl
Y29uZC0+bWFya0lmQ2hlYXAoc2xvdFZpc2l0b3IpOworICAgICAgICBwYWlyLnNlY29uZC0+bWFy
a0lmQ2hlYXAxKHZpc2l0b3IpOwogfQogCisvL3RlbXBsYXRlIHZvaWQgUmVjb3JkZWRTdGF0dXNl
czo6bWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImKTsKKy8vdGVtcGxhdGUgdm9pZCBSZWNvcmRlZFN0
YXR1c2VzOjptYXJrSWZDaGVhcChEZWJ1Z1Nsb3RWaXNpdG9yJik7CisKIHZvaWQgUmVjb3JkZWRT
dGF0dXNlczo6ZmluYWxpemVXaXRob3V0RGVsZXRpbmcoVk0mIHZtKQogewogICAgIC8vIFRoaXMg
dmFyaWFudCBvZiBmaW5hbGl6ZSBnZXRzIGNhbGxlZCBmcm9tIHdpdGhpbiBncmFwaCBzYWZlcG9p
bnRzIC0tIHNvIHRoZXJlIG1heSBiZSBERkcgSVIgaW4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9SZWNvcmRlZFN0YXR1c2VzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1JlY29yZGVkU3RhdHVzZXMuaAkocmV2aXNpb24gMjcxNDQz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1JlY29yZGVkU3RhdHVzZXMuaAko
d29ya2luZyBjb3B5KQpAQCAtNTAsOCArNTAsMTAgQEAgc3RydWN0IFJlY29yZGVkU3RhdHVzZXMg
ewogICAgIEluQnlJZFN0YXR1cyogYWRkSW5CeUlkU3RhdHVzKGNvbnN0IENvZGVPcmlnaW4mLCBj
b25zdCBJbkJ5SWRTdGF0dXMmKTsKICAgICBEZWxldGVCeVN0YXR1cyogYWRkRGVsZXRlQnlTdGF0
dXMoY29uc3QgQ29kZU9yaWdpbiYsIGNvbnN0IERlbGV0ZUJ5U3RhdHVzJik7CiAgICAgCi0gICAg
dm9pZCB2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYpOwotICAgIHZvaWQgbWFya0lmQ2hlYXAo
U2xvdFZpc2l0b3ImKTsKKy8vICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgdmlz
aXRBZ2dyZWdhdGUoVmlzaXRvciYpOworLy8gICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4g
dm9pZCBtYXJrSWZDaGVhcChWaXNpdG9yJik7CisgICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZTEoQWJz
dHJhY3RTbG90VmlzaXRvciYpOworICAgIHZvaWQgbWFya0lmQ2hlYXAxKEFic3RyYWN0U2xvdFZp
c2l0b3ImKTsKICAgICAKICAgICB2b2lkIGZpbmFsaXplV2l0aG91dERlbGV0aW5nKFZNJik7CiAg
ICAgdm9pZCBmaW5hbGl6ZShWTSYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1N0cnVjdHVyZVNldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1N0cnVjdHVyZVNldC5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zMSwxMiArMzEsMTcgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLXZvaWQgU3RydWN0dXJlU2V0
OjptYXJrSWZDaGVhcChTbG90VmlzaXRvciYgdmlzaXRvcikgY29uc3QKKy8vdGVtcGxhdGU8dHlw
ZW5hbWUgVmlzaXRvcj4KKy8vdm9pZCBTdHJ1Y3R1cmVTZXQ6Om1hcmtJZkNoZWFwKFZpc2l0b3Im
IHZpc2l0b3IpIGNvbnN0Cit2b2lkIFN0cnVjdHVyZVNldDo6bWFya0lmQ2hlYXAxKEFic3RyYWN0
U2xvdFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0CiB7CiAgICAgZm9yIChTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSA6ICp0aGlzKQotICAgICAgICBzdHJ1Y3R1cmUtPm1hcmtJZkNoZWFwKHZpc2l0b3IpOwor
ICAgICAgICBzdHJ1Y3R1cmUtPm1hcmtJZkNoZWFwMSh2aXNpdG9yKTsKIH0KIAorLy90ZW1wbGF0
ZSB2b2lkIFN0cnVjdHVyZVNldDo6bWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImKSBjb25zdDsKKy8v
dGVtcGxhdGUgdm9pZCBTdHJ1Y3R1cmVTZXQ6Om1hcmtJZkNoZWFwKERlYnVnU2xvdFZpc2l0b3Im
KSBjb25zdDsKKwogYm9vbCBTdHJ1Y3R1cmVTZXQ6OmlzU3RpbGxBbGl2ZShWTSYgdm0pIGNvbnN0
CiB7CiAgICAgZm9yIChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA6ICp0aGlzKSB7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU2V0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVNldC5oCShyZXZpc2lvbiAy
NzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU2V0LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTU0LDcgKzU0LDggQEAgcHVibGljOgogICAgICAgICByZXR1cm4g
b25seUVudHJ5KCk7CiAgICAgfQogCi0gICAgdm9pZCBtYXJrSWZDaGVhcChTbG90VmlzaXRvciYp
IGNvbnN0OworLy8gICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCBtYXJrSWZDaGVh
cChWaXNpdG9yJikgY29uc3Q7CisgICAgdm9pZCBtYXJrSWZDaGVhcDEoQWJzdHJhY3RTbG90Vmlz
aXRvciYpIGNvbnN0OwogICAgIGJvb2wgaXNTdGlsbEFsaXZlKFZNJikgY29uc3Q7CiAgICAgCiAg
ICAgdm9pZCBkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiwgRHVtcENvbnRleHQqKSBjb25zdDsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVy
ZVN0dWJJbmZvLmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjkwLDEy
ICsyOTAsMTQgQEAgdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6cmVzZXQoY29uc3QgQ29uYwogICAg
IHNldENhY2hlVHlwZShsb2NrZXIsIENhY2hlVHlwZTo6VW5zZXQpOwogfQogCi12b2lkIFN0cnVj
dHVyZVN0dWJJbmZvOjp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vdGVt
cGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KKy8vdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6dmlzaXRB
Z2dyZWdhdGUoVmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgU3RydWN0dXJlU3R1YkluZm86OnZpc2l0
QWdncmVnYXRlMShBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHsKICAgICAg
ICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2J1ZmZlcmVkU3RydWN0dXJlc0xvY2spOwogICAg
ICAgICBmb3IgKGF1dG8mIGJ1ZmZlcmVkU3RydWN0dXJlIDogbV9idWZmZXJlZFN0cnVjdHVyZXMp
Ci0gICAgICAgICAgICBidWZmZXJlZFN0cnVjdHVyZS5ieVZhbElkKCkudmlzaXRBZ2dyZWdhdGUo
dmlzaXRvcik7CisgICAgICAgICAgICBidWZmZXJlZFN0cnVjdHVyZS5ieVZhbElkKCkudmlzaXRB
Z2dyZWdhdGUxKHZpc2l0b3IpOwogICAgIH0KICAgICBzd2l0Y2ggKG1fY2FjaGVUeXBlKSB7CiAg
ICAgY2FzZSBDYWNoZVR5cGU6OlVuc2V0OgpAQCAtMzA1LDEwICszMDcsMTAgQEAgdm9pZCBTdHJ1
Y3R1cmVTdHViSW5mbzo6dmlzaXRBZ2dyZWdhdGUoUwogICAgIGNhc2UgQ2FjaGVUeXBlOjpQdXRC
eUlkUmVwbGFjZToKICAgICBjYXNlIENhY2hlVHlwZTo6SW5CeUlkU2VsZjoKICAgICBjYXNlIENh
Y2hlVHlwZTo6R2V0QnlJZFNlbGY6Ci0gICAgICAgIG1faWRlbnRpZmllci52aXNpdEFnZ3JlZ2F0
ZSh2aXNpdG9yKTsKKyAgICAgICAgbV9pZGVudGlmaWVyLnZpc2l0QWdncmVnYXRlMSh2aXNpdG9y
KTsKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgQ2FjaGVUeXBlOjpTdHViOgotICAgICAgICB1
LnN0dWItPnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOworICAgICAgICB1LnN0dWItPnZpc2l0QWdn
cmVnYXRlMSh2aXNpdG9yKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKQEAgLTMxNiw2
ICszMTgsOSBAQCB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjp2aXNpdEFnZ3JlZ2F0ZShTCiAgICAg
cmV0dXJuOwogfQogCisvL3RlbXBsYXRlIHZvaWQgU3RydWN0dXJlU3R1YkluZm86OnZpc2l0QWdn
cmVnYXRlKFNsb3RWaXNpdG9yJik7CisvL3RlbXBsYXRlIHZvaWQgU3RydWN0dXJlU3R1YkluZm86
OnZpc2l0QWdncmVnYXRlKERlYnVnU2xvdFZpc2l0b3ImKTsKKwogdm9pZCBTdHJ1Y3R1cmVTdHVi
SW5mbzo6dmlzaXRXZWFrUmVmZXJlbmNlcyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXJCYXNlJiBs
b2NrZXIsIENvZGVCbG9jayogY29kZUJsb2NrKQogewogICAgIFZNJiB2bSA9IGNvZGVCbG9jay0+
dm0oKTsKQEAgLTM0NiwyNCArMzUxLDMxIEBAIHZvaWQgU3RydWN0dXJlU3R1YkluZm86OnZpc2l0
V2Vha1JlZmVyZW4KICAgICByZXNldEJ5R0MgPSB0cnVlOwogfQogCi1ib29sIFN0cnVjdHVyZVN0
dWJJbmZvOjpwcm9wYWdhdGVUcmFuc2l0aW9ucyhTbG90VmlzaXRvciYgdmlzaXRvcikKLXsKLSAg
ICBzd2l0Y2ggKG1fY2FjaGVUeXBlKSB7Ci0gICAgY2FzZSBDYWNoZVR5cGU6OlVuc2V0OgotICAg
IGNhc2UgQ2FjaGVUeXBlOjpBcnJheUxlbmd0aDoKLSAgICBjYXNlIENhY2hlVHlwZTo6U3RyaW5n
TGVuZ3RoOgotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBjYXNlIENhY2hlVHlwZTo6R2V0QnlJ
ZFNlbGY6Ci0gICAgY2FzZSBDYWNoZVR5cGU6OlB1dEJ5SWRSZXBsYWNlOgotICAgIGNhc2UgQ2Fj
aGVUeXBlOjpJbkJ5SWRTZWxmOgotICAgICAgICByZXR1cm4gdS5ieUlkU2VsZi5iYXNlT2JqZWN0
U3RydWN0dXJlLT5tYXJrSWZDaGVhcCh2aXNpdG9yKTsKLSAgICBjYXNlIENhY2hlVHlwZTo6U3R1
YjoKLSAgICAgICAgcmV0dXJuIHUuc3R1Yi0+cHJvcGFnYXRlVHJhbnNpdGlvbnModmlzaXRvcik7
Ci0gICAgfQotICAgIAotICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0
dXJuIHRydWU7Ci19CisvL3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+CisvL2Jvb2wgU3RydWN0
dXJlU3R1YkluZm86OnByb3BhZ2F0ZVRyYW5zaXRpb25zMShWaXNpdG9yJiB2aXNpdG9yKQorLy97
CisvLyAgICBzd2l0Y2ggKG1fY2FjaGVUeXBlKSB7CisvLyAgICBjYXNlIENhY2hlVHlwZTo6VW5z
ZXQ6CisvLyAgICBjYXNlIENhY2hlVHlwZTo6QXJyYXlMZW5ndGg6CisvLyAgICBjYXNlIENhY2hl
VHlwZTo6U3RyaW5nTGVuZ3RoOgorLy8gICAgICAgIHJldHVybiB0cnVlOworLy8gICAgY2FzZSBD
YWNoZVR5cGU6OkdldEJ5SWRTZWxmOgorLy8gICAgY2FzZSBDYWNoZVR5cGU6OlB1dEJ5SWRSZXBs
YWNlOgorLy8gICAgY2FzZSBDYWNoZVR5cGU6OkluQnlJZFNlbGY6CisvLyAgICAgICAgcmV0dXJu
IHUuYnlJZFNlbGYuYmFzZU9iamVjdFN0cnVjdHVyZS0+bWFya0lmQ2hlYXAxKHZpc2l0b3IpOwor
Ly8gICAgICAgIHJldHVybiBmYWxzZTsKKy8vICAgIGNhc2UgQ2FjaGVUeXBlOjpTdHViOgorLy8g
ICAgICAgIHJldHVybiB1LnN0dWItPnByb3BhZ2F0ZVRyYW5zaXRpb25zMTAodmlzaXRvcik7Cisv
LyAgICAgICAgcmV0dXJuIGZhbHNlOworLy8gICAgfQorLy8KKy8vLy8gICAgVU5VU0VEX1BBUkFN
KHZpc2l0b3IpOyAvLyBtbGFtIFRFU1QKKy8vICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisvLyAgICByZXR1cm4gdHJ1ZTsKKy8vfQorLy8KKy8vdGVtcGxhdGU8PiBib29sIFN0cnVj
dHVyZVN0dWJJbmZvOjpwcm9wYWdhdGVUcmFuc2l0aW9uczEoU2xvdFZpc2l0b3ImKTsKKy8vdGVt
cGxhdGU8PiBib29sIFN0cnVjdHVyZVN0dWJJbmZvOjpwcm9wYWdhdGVUcmFuc2l0aW9uczEoQWJz
dHJhY3RTbG90VmlzaXRvciYpOwogCiBTdHViSW5mb1N1bW1hcnkgU3RydWN0dXJlU3R1YkluZm86
OnN1bW1hcnkoVk0mIHZtKSBjb25zdAogewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgJKHJldmlzaW9uIDI3MTQ0MykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC05MSwxNCArOTEsMTYgQEAgcHVibGljOgogICAgIHZvaWQgZGVyZWYoKTsK
ICAgICB2b2lkIGFib3V0VG9EaWUoKTsKIAotICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZp
c2l0b3ImKTsKKy8vICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgdmlzaXRBZ2dy
ZWdhdGUoVmlzaXRvciYpOworICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUxKEFic3RyYWN0U2xvdFZp
c2l0b3ImKTsKIAogICAgIC8vIENoZWNrIGlmIHRoZSBzdHViIGhhcyB3ZWFrIHJlZmVyZW5jZXMg
dGhhdCBhcmUgZGVhZC4gSWYgaXQgZG9lcywgdGhlbiBpdCByZXNldHMgaXRzZWxmLAogICAgIC8v
IGVpdGhlciBlbnRpcmVseSBvciBqdXN0IGVub3VnaCB0byBlbnN1cmUgdGhhdCB0aG9zZSBkZWFk
IHBvaW50ZXJzIGRvbid0IGdldCB1c2VkIGFueW1vcmUuCiAgICAgdm9pZCB2aXNpdFdlYWtSZWZl
cmVuY2VzKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlckJhc2UmLCBDb2RlQmxvY2sqKTsKICAgICAK
ICAgICAvLyBUaGlzIHJldHVybnMgdHJ1ZSBpZiBpdCBoYXMgbWFya2VkIGV2ZXJ5dGhpbmcgdGhh
dCBpdCB3aWxsIGV2ZXIgbWFyay4KLSAgICBib29sIHByb3BhZ2F0ZVRyYW5zaXRpb25zKFNsb3RW
aXNpdG9yJik7CisvLyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiBib29sIHByb3BhZ2F0
ZVRyYW5zaXRpb25zMShWaXNpdG9yJik7CisgICAgYm9vbCBwcm9wYWdhdGVUcmFuc2l0aW9uczEo
QWJzdHJhY3RTbG90VmlzaXRvciYpOwogICAgICAgICAKICAgICBTdHViSW5mb1N1bW1hcnkgc3Vt
bWFyeShWTSYpIGNvbnN0OwogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwCShyZXZpc2lvbiAyNzE0NDMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMi0y
MDE5IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
Mi0yMDIwIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtNzEsNyArNzEsOCBAQCBVbmxpbmtlZENvZGVCbG9jazo6VW5saW5r
ZWRDb2RlQmxvY2soVk0mCiAgICAgfQogfQogCi12b2lkIFVubGlua2VkQ29kZUJsb2NrOjp2aXNp
dENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0
eXBlbmFtZSBWaXNpdG9yPgordm9pZCBVbmxpbmtlZENvZGVCbG9jazo6dmlzaXRDaGlsZHJlbklt
cGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFVubGlua2VkQ29kZUJs
b2NrKiB0aGlzT2JqZWN0ID0ganNDYXN0PFVubGlua2VkQ29kZUJsb2NrKj4oY2VsbCk7CiAgICAg
QVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtOTAsNiAr
OTEsOCBAQCB2b2lkIFVubGlua2VkQ29kZUJsb2NrOjp2aXNpdENoaWxkcmVuKEpTCiAgICAgdmlz
aXRvci5yZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQoZXh0cmFNZW1vcnkpOwogfQogCitERUZJTkVf
VklTSVRfQ0hJTERSRU4oVW5saW5rZWRDb2RlQmxvY2spOworCiBzaXplX3QgVW5saW5rZWRDb2Rl
QmxvY2s6OmVzdGltYXRlZFNpemUoSlNDZWxsKiBjZWxsLCBWTSYgdm0pCiB7CiAgICAgVW5saW5r
ZWRDb2RlQmxvY2sqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8VW5saW5rZWRDb2RlQmxvY2sqPihjZWxs
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9j
ay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Vbmxpbmtl
ZENvZGVCbG9jay5oCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxOSBBcHBsZSBJbmMuIEFsbCBSaWdodHMg
UmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMCBBcHBsZSBJbmMuIEFsbCBSaWdo
dHMgUmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQyMyw3ICs0
MjMsNyBAQCBwcml2YXRlOgogICAgIFJlZkNvdW50ZWRBcnJheTxFeHByZXNzaW9uUmFuZ2VJbmZv
PiBtX2V4cHJlc3Npb25JbmZvOwogCiBwcm90ZWN0ZWQ6Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRD
aGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERS
RU47CiAgICAgc3RhdGljIHNpemVfdCBlc3RpbWF0ZWRTaXplKEpTQ2VsbCosIFZNJik7CiAKIHB1
YmxpYzoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZEZ1bmN0
aW9uRXhlY3V0YWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1VubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlLmNwcAkocmV2aXNpb24gMjcxNDQzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkRnVuY3Rpb25FeGVjdXRh
YmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTItMjAxOSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTItMjAyMCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE0MSw3ICsxNDEsOCBAQCB2b2lkIFVubGlua2Vk
RnVuY3Rpb25FeGVjdXRhYmxlOjpkZXN0cm95CiAgICAgc3RhdGljX2Nhc3Q8VW5saW5rZWRGdW5j
dGlvbkV4ZWN1dGFibGUqPihjZWxsKS0+flVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKCk7CiB9
CiAKLXZvaWQgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+
Cit2b2lkIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlOjp2aXNpdENoaWxkcmVuSW1wbChKU0Nl
bGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgVW5saW5rZWRGdW5jdGlvbkV4ZWN1
dGFibGUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqPihj
ZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7
CkBAIC0xNjQsNiArMTY1LDggQEAgdm9pZCBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6dmlz
aXRDaAogICAgIH0KIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKFVubGlua2VkRnVuY3Rpb25F
eGVjdXRhYmxlKTsKKwogU291cmNlQ29kZSBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6bGlu
a2VkU291cmNlQ29kZShjb25zdCBTb3VyY2VDb2RlJiBwYXNzZWRQYXJlbnRTb3VyY2UpIGNvbnN0
CiB7CiAgICAgY29uc3QgU291cmNlQ29kZSYgcGFyZW50U291cmNlID0gIW1faXNCdWlsdGluRGVm
YXVsdENsYXNzQ29uc3RydWN0b3IgPyBwYXNzZWRQYXJlbnRTb3VyY2UgOiBCdWlsdGluRXhlY3V0
YWJsZXM6OmRlZmF1bHRDb25zdHJ1Y3RvclNvdXJjZUNvZGUoY29uc3RydWN0b3JLaW5kKCkpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkRnVuY3Rpb25FeGVj
dXRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Vu
bGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlLmgJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE5
IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0y
MDIwIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMjMyLDcgKzIzMiw3IEBAIHByaXZhdGU6CiAgICAgVW5saW5rZWRGdW5j
dGlvbkV4ZWN1dGFibGUoVk0mLCBTdHJ1Y3R1cmUqLCBjb25zdCBTb3VyY2VDb2RlJiwgRnVuY3Rp
b25NZXRhZGF0YU5vZGUqLCBVbmxpbmtlZEZ1bmN0aW9uS2luZCwgQ29uc3RydWN0QWJpbGl0eSwg
SlNQYXJzZXJTY3JpcHRNb2RlLCBSZWZQdHI8VERaRW52aXJvbm1lbnRMaW5rPiwgIEpTQzo6RGVy
aXZlZENvbnRleHRUeXBlLCBKU0M6Ok5lZWRzQ2xhc3NGaWVsZEluaXRpYWxpemVyLCBib29sIGlz
QnVpbHRpbkRlZmF1bHRDbGFzc0NvbnN0cnVjdG9yKTsKICAgICBVbmxpbmtlZEZ1bmN0aW9uRXhl
Y3V0YWJsZShEZWNvZGVyJiwgY29uc3QgQ2FjaGVkRnVuY3Rpb25FeGVjdXRhYmxlJik7CiAKLSAg
ICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAg
REVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIHZvaWQgZGVjb2RlQ2FjaGVkQ29kZUJsb2Nr
cyhWTSYpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXJT
Y29wZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0Rl
YnVnZ2VyU2NvcGUuY3BwCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGVidWdnZXIvRGVidWdnZXJTY29wZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01NSw3ICs1
NSw4IEBAIHZvaWQgRGVidWdnZXJTY29wZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHYKICAgICBCYXNl
OjpmaW5pc2hDcmVhdGlvbih2bSk7CiB9CiAKLXZvaWQgRGVidWdnZXJTY29wZTo6dmlzaXRDaGls
ZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5h
bWUgVmlzaXRvcj4KK3ZvaWQgRGVidWdnZXJTY29wZTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxs
KiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIERlYnVnZ2VyU2NvcGUqIHRoaXNPYmpl
Y3QgPSBqc0Nhc3Q8RGVidWdnZXJTY29wZSo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1Rf
SU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTY1LDYgKzY2LDggQEAgdm9pZCBEZWJ1
Z2dlclNjb3BlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbAogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNP
YmplY3QtPm1fbmV4dCk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihEZWJ1Z2dlclNjb3Bl
KTsKKwogU3RyaW5nIERlYnVnZ2VyU2NvcGU6OmNsYXNzTmFtZShjb25zdCBKU09iamVjdCogb2Jq
ZWN0LCBWTSYgdm0pCiB7CiAgICAgY29uc3QgRGVidWdnZXJTY29wZSogc2NvcGUgPSBqc0Nhc3Q8
Y29uc3QgRGVidWdnZXJTY29wZSo+KG9iamVjdCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGVidWdnZXIvRGVidWdnZXJTY29wZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlclNjb3BlLmgJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlclNjb3BlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQ2LDcgKzQ2LDcgQEAgcHVibGljOgogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3Rh
dGljIERlYnVnZ2VyU2NvcGUqIGNyZWF0ZShWTSYgdm0sIEpTU2NvcGUqIHNjb3BlKTsKIAotICAg
IHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBE
RUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogICAgIHN0YXRpYyBTdHJpbmcgY2xhc3NOYW1lKGNvbnN0
IEpTT2JqZWN0KiwgVk0mKTsKICAgICBzdGF0aWMgU3RyaW5nIHRvU3RyaW5nTmFtZShjb25zdCBK
U09iamVjdCosIEpTR2xvYmFsT2JqZWN0Kik7CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVy
dHlTbG90KEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5
U2xvdCYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkVHJhbnNp
dGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVz
aXJlZFRyYW5zaXRpb25zLmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdEZXNpcmVkVHJhbnNpdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01
Miw3ICs1Miw3IEBAIHZvaWQgRGVzaXJlZFRyYW5zaXRpb246OnJlYWxseUFkZChWTSYgdm0KICAg
ICAgICAgICAgIG1fb2xkU3RydWN0dXJlLCBtX25ld1N0cnVjdHVyZSkpOwogfQogCi12b2lkIERl
c2lyZWRUcmFuc2l0aW9uOjp2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordm9p
ZCBEZXNpcmVkVHJhbnNpdGlvbjo6dmlzaXRDaGlsZHJlbjIoQWJzdHJhY3RTbG90VmlzaXRvciYg
dmlzaXRvcikKIHsKICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKG1fY29kZU9yaWdpbk93
bmVyKTsKICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKG1fb2xkU3RydWN0dXJlKTsKQEAg
LTc4LDEwICs3OCwxMCBAQCB2b2lkIERlc2lyZWRUcmFuc2l0aW9uczo6cmVhbGx5QWRkKFZNJiB2
CiAgICAgICAgIG1fdHJhbnNpdGlvbnNbaV0ucmVhbGx5QWRkKHZtLCBjb21tb24pOwogfQogCi12
b2lkIERlc2lyZWRUcmFuc2l0aW9uczo6dmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRv
cikKK3ZvaWQgRGVzaXJlZFRyYW5zaXRpb25zOjp2aXNpdENoaWxkcmVuMihBYnN0cmFjdFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQogewogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3RyYW5z
aXRpb25zLnNpemUoKTsgaSsrKQotICAgICAgICBtX3RyYW5zaXRpb25zW2ldLnZpc2l0Q2hpbGRy
ZW4odmlzaXRvcik7CisgICAgICAgIG1fdHJhbnNpdGlvbnNbaV0udmlzaXRDaGlsZHJlbjIodmlz
aXRvcik7CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFRyYW5zaXRpb25zLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkVHJhbnNpdGlvbnMuaAkocmV2aXNpb24g
MjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkVHJhbnNpdGlv
bnMuaAkod29ya2luZyBjb3B5KQpAQCAtNDYsOCArNDYsNyBAQCBwdWJsaWM6CiAgICAgRGVzaXJl
ZFRyYW5zaXRpb24oQ29kZUJsb2NrKiwgQ29kZUJsb2NrKiBjb2RlT3JpZ2luT3duZXIsIFN0cnVj
dHVyZSosIFN0cnVjdHVyZSopOwogCiAgICAgdm9pZCByZWFsbHlBZGQoVk0mLCBDb21tb25EYXRh
Kik7Ci0gICAgCi0gICAgdm9pZCB2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CisgICAgdm9p
ZCB2aXNpdENoaWxkcmVuMihBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAKIHByaXZhdGU6CiAgICAg
Q29kZUJsb2NrKiBtX2NvZGVCbG9jazsKQEAgLTYzLDcgKzYyLDcgQEAgcHVibGljOgogCiAgICAg
dm9pZCBhZGRMYXppbHkoQ29kZUJsb2NrKiwgQ29kZUJsb2NrKiBjb2RlT3JpZ2luT3duZXIsIFN0
cnVjdHVyZSosIFN0cnVjdHVyZSopOwogICAgIHZvaWQgcmVhbGx5QWRkKFZNJiwgQ29tbW9uRGF0
YSopOwotICAgIHZvaWQgdmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYpOworICAgIHZvaWQgdmlz
aXRDaGlsZHJlbjIoQWJzdHJhY3RTbG90VmlzaXRvciYpOwogCiBwcml2YXRlOgogICAgIFZlY3Rv
cjxEZXNpcmVkVHJhbnNpdGlvbj4gbV90cmFuc2l0aW9uczsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHRGVzaXJlZFdlYWtSZWZlcmVuY2VzLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXZWFrUmVmZXJlbmNlcy5jcHAJKHJl
dmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFdl
YWtSZWZlcmVuY2VzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODcsNyArODcsNyBAQCB2b2lkIERl
c2lyZWRXZWFrUmVmZXJlbmNlczo6cmVhbGx5QWRkKFZNCiAgICAgfQogfQogCi12b2lkIERlc2ly
ZWRXZWFrUmVmZXJlbmNlczo6dmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3Zv
aWQgRGVzaXJlZFdlYWtSZWZlcmVuY2VzOjp2aXNpdENoaWxkcmVuMihBYnN0cmFjdFNsb3RWaXNp
dG9yJiB2aXNpdG9yKQogewogICAgIGZvciAoSlNDZWxsKiB0YXJnZXQgOiBtX3JlZmVyZW5jZXMp
CiAgICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQodGFyZ2V0KTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFdlYWtSZWZlcmVuY2VzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2Vha1JlZmVyZW5jZXMu
aAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNp
cmVkV2Vha1JlZmVyZW5jZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsMTAgKzMxLDEwIEBACiAK
IG5hbWVzcGFjZSBKU0MgeyAKIAorY2xhc3MgQWJzdHJhY3RTbG90VmlzaXRvcjsKIGNsYXNzIENv
ZGVCbG9jazsKIGNsYXNzIEpTQ2VsbDsKIGNsYXNzIEpTVmFsdWU7Ci1jbGFzcyBTbG90VmlzaXRv
cjsKIGNsYXNzIFZNOwogCiBuYW1lc3BhY2UgREZHIHsKQEAgLTUyLDggKzUyLDggQEAgcHVibGlj
OgogICAgIGJvb2wgY29udGFpbnMoSlNDZWxsKik7CiAgICAgCiAgICAgdm9pZCByZWFsbHlBZGQo
Vk0mLCBDb21tb25EYXRhKik7Ci0gICAgCi0gICAgdm9pZCB2aXNpdENoaWxkcmVuKFNsb3RWaXNp
dG9yJik7CisKKyAgICB2b2lkIHZpc2l0Q2hpbGRyZW4yKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsK
IAogcHJpdmF0ZToKICAgICBDb2RlQmxvY2sqIG1fY29kZUJsb2NrOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NzcsNyAr
OTc3LDcgQEAgQmxvY2tMaXN0IEdyYXBoOjpibG9ja3NJblBvc3RPcmRlcihib29sIAogICAgICAg
ICB9CiAgICAgfQogCi0gICAgaWYgKGlzU2FmZVRvVmFsaWRhdGUgJiYgdmFsaWRhdGlvbkVuYWJs
ZWQoKSkgeyAvLyBUaGVyZSBhcmUgdXNlcnMgb2YgdGhpcyB3aGVyZSB3ZSBoYXZlbid0IHlldCBi
dWlsdCBvZiB0aGUgQ0ZHIGVub3VnaCB0byBiZSBhYmxlIHRvIHJ1biBkb21pbmF0b3JzLgorICAg
IGlmIChpc1NhZmVUb1ZhbGlkYXRlICYmIHZhbGlkYXRpb25FbmFibGVkKCkpIHsgLy8gVGhlcmUg
YXJlIHVzZXJzIG9mIHRoaXMgd2hlcmUgd2UgaGF2ZW4ndCB5ZXQgYnVpbHQgdGhlIENGRyBlbm91
Z2ggdG8gYmUgYWJsZSB0byBydW4gZG9taW5hdG9ycy4KICAgICAgICAgYXV0byB2YWxpZGF0ZVJl
c3VsdHMgPSBbJl0gKGF1dG8mIGRvbWluYXRvcnMpIHsKICAgICAgICAgICAgIC8vIFdoZW4gaXRl
cmF0aW5nIG92ZXIgcmV2ZXJzZSBwb3N0IG9yZGVyLCB3ZSBzaG91bGQgc2VlIGRvbWluYXRvcnMK
ICAgICAgICAgICAgIC8vIGJlZm9yZSB0aGluZ3MgdGhleSBkb21pbmF0ZS4KQEAgLTE0NDgsNyAr
MTQ0OCw3IEBAIHZvaWQgR3JhcGg6OnJlZ2lzdGVyRnJvemVuVmFsdWVzKCkKICAgICBtX2NvZGVC
bG9jay0+Y29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uKCkuc2hyaW5rVG9GaXQoKTsK
IH0KIAotdm9pZCBHcmFwaDo6dmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3Zv
aWQgR3JhcGg6OnZpc2l0Q2hpbGRyZW4xKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7
CiAgICAgZm9yIChGcm96ZW5WYWx1ZSogdmFsdWUgOiBtX2Zyb3plblZhbHVlcykgewogICAgICAg
ICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKHZhbHVlLT52YWx1ZSgpKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkod29ya2luZyBjb3B5KQpAQCAtMTAwMCw5ICsx
MDAwLDkgQEAgcHVibGljOgogICAgIGJvb2wgY2FuRG9GYXN0U3ByZWFkKE5vZGUqLCBjb25zdCBB
YnN0cmFjdFZhbHVlJik7CiAgICAgCiAgICAgdm9pZCByZWdpc3RlckZyb3plblZhbHVlcygpOwot
ICAgIAotICAgIHZvaWQgdmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYpIGZpbmFsOwotICAgIAor
CisgICAgdm9pZCB2aXNpdENoaWxkcmVuMShBYnN0cmFjdFNsb3RWaXNpdG9yJikgZmluYWw7CisK
ICAgICB2b2lkIGxvZ0Fzc2VydGlvbkZhaWx1cmUoCiAgICAgICAgIHN0ZDo6bnVsbHB0cl90LCBj
b25zdCBjaGFyKiBmaWxlLCBpbnQgbGluZSwgY29uc3QgY2hhciogZnVuY3Rpb24sCiAgICAgICAg
IGNvbnN0IGNoYXIqIGFzc2VydGlvbik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1BsYW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
UGxhbi5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHUGxhbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY3Miw3ICs2NzIsNyBAQCBDb21waWxhdGlv
bktleSBQbGFuOjprZXkoKQogICAgIHJldHVybiBDb21waWxhdGlvbktleShtX2NvZGVCbG9jay0+
YWx0ZXJuYXRpdmUoKSwgbV9tb2RlKTsKIH0KIAotdm9pZCBQbGFuOjpjaGVja0xpdmVuZXNzQW5k
VmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgUGxhbjo6Y2hlY2tMaXZl
bmVzc0FuZFZpc2l0Q2hpbGRyZW4oQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAg
ICBpZiAoIWlzS25vd25Ub0JlTGl2ZUR1cmluZ0dDKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTY4
NCw4ICs2ODQsOCBAQCB2b2lkIFBsYW46OmNoZWNrTGl2ZW5lc3NBbmRWaXNpdENoaWxkcmVuCiAg
ICAgICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKHZhbHVlLnZhbHVlKCkpOwogICAg
IH0KIAotICAgIG1fcmVjb3JkZWRTdGF0dXNlcy52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKLSAg
ICBtX3JlY29yZGVkU3RhdHVzZXMubWFya0lmQ2hlYXAodmlzaXRvcik7CisgICAgbV9yZWNvcmRl
ZFN0YXR1c2VzLnZpc2l0QWdncmVnYXRlMSh2aXNpdG9yKTsKKyAgICBtX3JlY29yZGVkU3RhdHVz
ZXMubWFya0lmQ2hlYXAxKHZpc2l0b3IpOwogCiAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJl
ZChtX2NvZGVCbG9jayk7CiAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZChtX2NvZGVCbG9j
ay0+YWx0ZXJuYXRpdmUoKSk7CkBAIC02OTgsOCArNjk4LDggQEAgdm9pZCBQbGFuOjpjaGVja0xp
dmVuZXNzQW5kVmlzaXRDaGlsZHJlbgogICAgICAgICB9CiAgICAgfQogCi0gICAgbV93ZWFrUmVm
ZXJlbmNlcy52aXNpdENoaWxkcmVuKHZpc2l0b3IpOwotICAgIG1fdHJhbnNpdGlvbnMudmlzaXRD
aGlsZHJlbih2aXNpdG9yKTsKKyAgICBtX3dlYWtSZWZlcmVuY2VzLnZpc2l0Q2hpbGRyZW4yKHZp
c2l0b3IpOworICAgIG1fdHJhbnNpdGlvbnMudmlzaXRDaGlsZHJlbjIodmlzaXRvcik7CiB9CiAK
IHZvaWQgUGxhbjo6ZmluYWxpemVJbkdDKCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHUGxhbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
UGxhbi5oCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1BsYW4uaAkod29ya2luZyBjb3B5KQpAQCAtNDMsOCArNDMsOCBAQAogCiBuYW1lc3BhY2UgSlND
IHsKIAorY2xhc3MgQWJzdHJhY3RTbG90VmlzaXRvcjsKIGNsYXNzIENvZGVCbG9jazsKLWNsYXNz
IFNsb3RWaXNpdG9yOwogCiBuYW1lc3BhY2UgREZHIHsKIApAQCAtNzIsNyArNzIsNyBAQCBwdWJs
aWM6CiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KICAgICB2b2lkIGl0ZXJhdGVD
b2RlQmxvY2tzRm9yR0MoY29uc3QgRnVuYyYpOwotICAgIHZvaWQgY2hlY2tMaXZlbmVzc0FuZFZp
c2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKKyAgICB2b2lkIGNoZWNrTGl2ZW5lc3NBbmRWaXNp
dENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKICAgICBib29sIGlzS25vd25Ub0JlTGl2
ZUR1cmluZ0dDKCk7CiAgICAgdm9pZCBmaW5hbGl6ZUluR0MoKTsKICAgICB2b2lkIGNhbmNlbCgp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlcG9pbnQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZXBvaW50LmNwcAkocmV2
aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlcG9pbnQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Myw3ICs4Myw3IEBAIHZvaWQgU2FmZXBvaW50OjpiZWdp
bigpCiAgICAgfQogfQogCi12b2lkIFNhZmVwb2ludDo6Y2hlY2tMaXZlbmVzc0FuZFZpc2l0Q2hp
bGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIFNhZmVwb2ludDo6Y2hlY2tMaXZlbmVz
c0FuZFZpc2l0Q2hpbGRyZW4oQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBS
RUxFQVNFX0FTU0VSVChtX2RpZENhbGxCZWdpbik7CiAKQEAgLTk0LDcgKzk0LDcgQEAgdm9pZCBT
YWZlcG9pbnQ6OmNoZWNrTGl2ZW5lc3NBbmRWaXNpdENoaQogICAgICAgICByZXR1cm47CiAgICAg
CiAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9zY2FubmFibGVzLnNpemUoKTsgaS0tOykKLSAgICAg
ICAgbV9zY2FubmFibGVzW2ldLT52aXNpdENoaWxkcmVuKHZpc2l0b3IpOworICAgICAgICBtX3Nj
YW5uYWJsZXNbaV0tPnZpc2l0Q2hpbGRyZW4xKHZpc2l0b3IpOwogfQogCiBib29sIFNhZmVwb2lu
dDo6aXNLbm93blRvQmVMaXZlRHVyaW5nR0MoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTYWZlcG9pbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NhZmVwb2ludC5oCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NhZmVwb2ludC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw3IEBA
CiAKIG5hbWVzcGFjZSBKU0MgewogCi1jbGFzcyBTbG90VmlzaXRvcjsKK2NsYXNzIEFic3RyYWN0
U2xvdFZpc2l0b3I7CiBjbGFzcyBWTTsKIAogbmFtZXNwYWNlIERGRyB7CkBAIC02Niw4ICs2Niw4
IEBAIHB1YmxpYzoKICAgICB2b2lkIGFkZChTY2FubmFibGUqKTsKICAgICAKICAgICB2b2lkIGJl
Z2luKCk7Ci0gICAgCi0gICAgdm9pZCBjaGVja0xpdmVuZXNzQW5kVmlzaXRDaGlsZHJlbihTbG90
VmlzaXRvciYpOworCisgICAgdm9pZCBjaGVja0xpdmVuZXNzQW5kVmlzaXRDaGlsZHJlbihBYnN0
cmFjdFNsb3RWaXNpdG9yJik7CiAgICAgYm9vbCBpc0tub3duVG9CZUxpdmVEdXJpbmdHQygpOwog
ICAgIHZvaWQgY2FuY2VsKCk7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NjYW5uYWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU2Nhbm5hYmxlLmgJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU2Nhbm5hYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDcgQEAKIAog
bmFtZXNwYWNlIEpTQyB7CiAKLWNsYXNzIFNsb3RWaXNpdG9yOworY2xhc3MgQWJzdHJhY3RTbG90
VmlzaXRvcjsKIAogbmFtZXNwYWNlIERGRyB7CiAKQEAgLTM4LDcgKzM4LDcgQEAgcHVibGljOgog
ICAgIFNjYW5uYWJsZSgpIHsgfQogICAgIHZpcnR1YWwgflNjYW5uYWJsZSgpIHsgfQogICAgIAot
ICAgIHZpcnR1YWwgdm9pZCB2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJikgPSAwOworICAgIHZp
cnR1YWwgdm9pZCB2aXNpdENoaWxkcmVuMShBYnN0cmFjdFNsb3RWaXNpdG9yJikgPSAwOwogfTsK
IAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdXb3JrbGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdXb3JrbGlzdC5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHV29ya2xpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNzIsNyArMzcy
LDcgQEAgdm9pZCBXb3JrbGlzdDo6cmVzdW1lQWxsVGhyZWFkcygpCiAgICAgbV9zdXNwZW5zaW9u
TG9jay51bmxvY2soKTsKIH0KIAotdm9pZCBXb3JrbGlzdDo6dmlzaXRXZWFrUmVmZXJlbmNlcyhT
bG90VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgV29ya2xpc3Q6OnZpc2l0V2Vha1JlZmVyZW5jZXMo
QWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBWTSogdm0gPSAmdmlzaXRvci5o
ZWFwKCktPnZtKCk7CiAgICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdX
b3JrbGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV29y
a2xpc3QuaAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdXb3JrbGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw3ICszNSw3IEBACiAKIG5hbWVzcGFj
ZSBKU0MgewogCi1jbGFzcyBTbG90VmlzaXRvcjsKK2NsYXNzIEFic3RyYWN0U2xvdFZpc2l0b3I7
CiAKIG5hbWVzcGFjZSBERkcgewogCkBAIC03Myw3ICs3Myw3IEBAIHB1YmxpYzoKICAgICBib29s
IGlzQWN0aXZlRm9yVk0oVk0mKSBjb25zdDsKICAgICAKICAgICAvLyBPbmx5IGNhbGxlZCBvbiB0
aGUgbWFpbiB0aHJlYWQgYWZ0ZXIgc3VzcGVuZGluZyBhbGwgdGhyZWFkcy4KLSAgICB2b2lkIHZp
c2l0V2Vha1JlZmVyZW5jZXMoU2xvdFZpc2l0b3ImKTsKKyAgICB2b2lkIHZpc2l0V2Vha1JlZmVy
ZW5jZXMoQWJzdHJhY3RTbG90VmlzaXRvciYpOwogICAgIHZvaWQgcmVtb3ZlRGVhZFBsYW5zKFZN
Jik7CiAgICAgCiAgICAgdm9pZCByZW1vdmVOb25Db21waWxpbmdQbGFuc0ZvclZNKFZNJik7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9BYnN0cmFjdFNsb3RWaXNpdG9yLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9BYnN0cmFjdFNsb3RWaXNp
dG9yLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9BYnN0
cmFjdFNsb3RWaXNpdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQzIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFic3RyYWN0U2xvdFZpc2l0
b3IuaCIKKworI2luY2x1ZGUgIkFic3RyYWN0U2xvdFZpc2l0b3JJbmxpbmVzLmgiCisjaW5jbHVk
ZSAiTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXIuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3ZvaWQg
QWJzdHJhY3RTbG90VmlzaXRvcjo6YWRkUGFyYWxsZWxDb25zdHJhaW50VGFzayhSZWZQdHI8U2hh
cmVkVGFzazx2b2lkKEFic3RyYWN0U2xvdFZpc2l0b3ImKT4+IHRhc2spCit7CisgICAgUkVMRUFT
RV9BU1NFUlQobV9jdXJyZW50U29sdmVyKTsKKyAgICBSRUxFQVNFX0FTU0VSVChtX2N1cnJlbnRD
b25zdHJhaW50KTsKKyAgICBSRUxFQVNFX0FTU0VSVCh0YXNrKTsKKyAgICAKKyAgICBtX2N1cnJl
bnRTb2x2ZXItPmFkZFBhcmFsbGVsVGFzayh0YXNrLCAqbV9jdXJyZW50Q29uc3RyYWludCk7Cit9
CisKK30gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
QWJzdHJhY3RTbG90VmlzaXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0Fic3RyYWN0U2xvdFZpc2l0b3IuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9BYnN0cmFjdFNsb3RWaXNpdG9yLmgJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwyMDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkpTQ0pTVmFsdWUuaCIKKyNpbmNsdWRlICJN
YXJrU3RhY2suaCIKKyNpbmNsdWRlICJWaXNpdFJhY2VLZXkuaCIgLy8gbWxhbQorI2luY2x1ZGUg
PHd0Zi9TaGFyZWRUYXNrLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1l
c3BhY2UgSlNDIHsKKworY2xhc3MgQ29uc2VydmF0aXZlUm9vdHM7CitjbGFzcyBEZWJ1Z1Nsb3RW
aXNpdG9yOworY2xhc3MgSGVhcDsKK2NsYXNzIEhlYXBBbmFseXplcjsKK2NsYXNzIE1hcmtpbmdD
b25zdHJhaW50OworY2xhc3MgTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXI7CitjbGFzcyBTbG90Vmlz
aXRvcjsKK2NsYXNzIFZNOwordGVtcGxhdGU8dHlwZW5hbWUgVD4gY2xhc3MgV2VhazsKK3RlbXBs
YXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFRyYWl0cz4gY2xhc3MgV3JpdGVCYXJyaWVyQmFzZTsK
KwordHlwZWRlZiB1aW50MzJfdCBIZWFwVmVyc2lvbjsKKworY2xhc3MgQWJzdHJhY3RTbG90Vmlz
aXRvciB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQWJzdHJhY3RTbG90VmlzaXRvcik7Cisg
ICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisvLyAgICBlbnVtIGNsYXNzIFR5
cGUgeworLy8gICAgICAgIFNsb3RWaXNpdG9yLAorLy8gICAgICAgIERlYnVnU2xvdFZpc2l0b3IK
Ky8vICAgIH07CisKKyAgICBlbnVtIFJvb3RNYXJrUmVhc29uIHsKKyAgICAgICAgTm9uZSwKKyAg
ICAgICAgQ29uc2VydmF0aXZlU2NhbiwKKyAgICAgICAgU3Ryb25nUmVmZXJlbmNlcywKKyAgICAg
ICAgUHJvdGVjdGVkVmFsdWVzLAorICAgICAgICBNYXJrTGlzdFNldCwKKyAgICAgICAgVk1FeGNl
cHRpb25zLAorICAgICAgICBTdHJvbmdIYW5kbGVzLAorICAgICAgICBEZWJ1Z2dlciwKKyAgICAg
ICAgSklUU3R1YlJvdXRpbmVzLAorICAgICAgICBXZWFrU2V0cywKKyAgICAgICAgT3V0cHV0LAor
ICAgICAgICBERkdXb3JrTGlzdHMsCisgICAgICAgIENvZGVCbG9ja3MsCisgICAgICAgIERPTUdD
T3V0cHV0LAorICAgIH07CisKKyAgICBjbGFzcyBEZWZhdWx0TWFya2luZ1Zpb2xhdGlvbkFzc2Vy
dGlvblNjb3BlIHsKKyAgICBwdWJsaWM6CisgICAgICAgIERlZmF1bHRNYXJraW5nVmlvbGF0aW9u
QXNzZXJ0aW9uU2NvcGUoQWJzdHJhY3RTbG90VmlzaXRvciYpIHsgfQorICAgIH07CisKKyAgICB2
aXJ0dWFsIH5BYnN0cmFjdFNsb3RWaXNpdG9yKCkgPSBkZWZhdWx0OworCisvLyAgICBBTFdBWVNf
SU5MSU5FIGJvb2wgaXNEZWJ1Z1Nsb3RWaXNpdG9yKCkgY29uc3QgeyByZXR1cm4gbV92aXNpdG9y
VHlwZSA9PSBUeXBlOjpEZWJ1Z1Nsb3RWaXNpdG9yOyB9CisvLyAgICBBTFdBWVNfSU5MSU5FIGJv
b2wgaXNTbG90VmlzaXRvcigpIGNvbnN0IHsgcmV0dXJuIG1fdmlzaXRvclR5cGUgPT0gVHlwZTo6
U2xvdFZpc2l0b3I7IH0KKworLy8gICAgQUxXQVlTX0lOTElORSBEZWJ1Z1Nsb3RWaXNpdG9yJiBh
c0RlYnVnU2xvdFZpc2l0b3IoKSB7IHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxEZWJ1Z1Nsb3RW
aXNpdG9yKj4odGhpcyk7IH0KKy8vICAgIEFMV0FZU19JTkxJTkUgY29uc3QgRGVidWdTbG90Vmlz
aXRvciYgYXNEZWJ1Z1Nsb3RWaXNpdG9yKCkgY29uc3QgeyByZXR1cm4gKnJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgRGVidWdTbG90VmlzaXRvcio+KHRoaXMpOyB9CisKKy8vICAgIEFMV0FZU19JTkxJ
TkUgU2xvdFZpc2l0b3ImIGFzU2xvdFZpc2l0b3IoKSB7IHJldHVybiAqcmVpbnRlcnByZXRfY2Fz
dDxTbG90VmlzaXRvcio+KHRoaXMpOyB9CisvLyAgICBBTFdBWVNfSU5MSU5FIGNvbnN0IFNsb3RW
aXNpdG9yJiBhc1Nsb3RWaXNpdG9yKCkgY29uc3QgeyByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgU2xvdFZpc2l0b3IqPih0aGlzKTsgfQorCisgICAgTWFya1N0YWNrQXJyYXkmIGNvbGxl
Y3Rvck1hcmtTdGFjaygpIHsgcmV0dXJuIG1fY29sbGVjdG9yU3RhY2s7IH0KKyAgICBNYXJrU3Rh
Y2tBcnJheSYgbXV0YXRvck1hcmtTdGFjaygpIHsgcmV0dXJuIG1fbXV0YXRvclN0YWNrOyB9Cisg
ICAgY29uc3QgTWFya1N0YWNrQXJyYXkmIGNvbGxlY3Rvck1hcmtTdGFjaygpIGNvbnN0IHsgcmV0
dXJuIG1fY29sbGVjdG9yU3RhY2s7IH0KKyAgICBjb25zdCBNYXJrU3RhY2tBcnJheSYgbXV0YXRv
ck1hcmtTdGFjaygpIGNvbnN0IHsgcmV0dXJuIG1fbXV0YXRvclN0YWNrOyB9CisKKyAgICBWTSYg
dm0oKTsKKyAgICBjb25zdCBWTSYgdm0oKSBjb25zdDsKKyAgICBIZWFwKiBoZWFwKCkgY29uc3Q7
CisKKyAgICB2aXJ0dWFsIHZvaWQgYXBwZW5kKGNvbnN0IENvbnNlcnZhdGl2ZVJvb3RzJikgPSAw
OworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVHJhaXRzPiB2b2lkIGFwcGVu
ZChjb25zdCBXcml0ZUJhcnJpZXJCYXNlPFQsIFRyYWl0cz4mKTsKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBULCB0eXBlbmFtZSBUcmFpdHM+IHZvaWQgYXBwZW5kSGlkZGVuKGNvbnN0IFdyaXRlQmFy
cmllckJhc2U8VCwgVHJhaXRzPiYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEl0ZXJhdG9yPiB2
b2lkIGFwcGVuZChJdGVyYXRvciBiZWdpbiAsIEl0ZXJhdG9yIGVuZCk7CisgICAgdm9pZCBhcHBl
bmRWYWx1ZXMoY29uc3QgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duLCBSYXdWYWx1ZVRyYWl0czxV
bmtub3duPj4qLCBzaXplX3QgY291bnQpOworICAgIHZvaWQgYXBwZW5kVmFsdWVzSGlkZGVuKGNv
bnN0IFdyaXRlQmFycmllckJhc2U8VW5rbm93biwgUmF3VmFsdWVUcmFpdHM8VW5rbm93bj4+Kiwg
c2l6ZV90IGNvdW50KTsKKworICAgIHZpcnR1YWwgdm9pZCBhcHBlbmRVbmJhcnJpZXJlZChKU1Zh
bHVlKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGFwcGVuZFVuYmFycmllcmVkKEpTQ2VsbCopID0g
MDsKKworICAgIHZpcnR1YWwgYm9vbCBhZGRPcGFxdWVSb290KHZvaWQqKSA9IDA7IC8vIFJldHVy
bnMgdHJ1ZSBpZiB0aGUgcm9vdCB3YXMgbmV3LgorCisgICAgdmlydHVhbCBib29sIGlzRmlyc3RW
aXNpdCgpIGNvbnN0ID0gMDsgLy8gbWxhbSBGSVhNRQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
VD4KKyAgICB2b2lkIGFwcGVuZChjb25zdCBXZWFrPFQ+JiB3ZWFrKTsKKworICAgIHZpcnR1YWwg
dm9pZCBhcHBlbmRIaWRkZW5VbmJhcnJpZXJlZChKU1ZhbHVlKSA9IDA7CisgICAgdmlydHVhbCB2
b2lkIGFwcGVuZEhpZGRlblVuYmFycmllcmVkKEpTQ2VsbCopID0gMDsKKworICAgIHZpcnR1YWwg
Ym9vbCBjb250YWluc09wYXF1ZVJvb3Qodm9pZCopIGNvbnN0ID0gMDsKKworICAgIHNpemVfdCBi
eXRlc1Zpc2l0ZWQoKSBjb25zdCB7IHJldHVybiBtX2J5dGVzVmlzaXRlZDsgfQorICAgIHNpemVf
dCB2aXNpdENvdW50KCkgY29uc3QgeyByZXR1cm4gbV92aXNpdENvdW50OyB9CisKKyAgICB2b2lk
IGFkZFRvVmlzaXRDb3VudChzaXplX3QgdmFsdWUpIHsgbV92aXNpdENvdW50ICs9IHZhbHVlOyB9
CisKKyAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGFkZFBhcmFsbGVsQ29uc3RyYWludFRhc2so
UmVmUHRyPFNoYXJlZFRhc2s8dm9pZChBYnN0cmFjdFNsb3RWaXNpdG9yJik+Pik7CisKKyAgICB2
aXJ0dWFsIHZvaWQgbWFya0F1eGlsaWFyeShjb25zdCB2b2lkKiBiYXNlKSA9IDA7CisKKyAgICB2
aXJ0dWFsIHZvaWQgcmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKHNpemVfdCkgPSAwOworI2lmIEVO
QUJMRShSRVNPVVJDRV9VU0FHRSkKKyAgICB2aXJ0dWFsIHZvaWQgcmVwb3J0RXh0ZXJuYWxNZW1v
cnlWaXNpdGVkKHNpemVfdCkgPSAwOworI2VuZGlmCisKKyAgICB2aXJ0dWFsIHZvaWQgZHVtcChQ
cmludFN0cmVhbSYpIGNvbnN0ID0gMDsKKworICAgIGJvb2wgaXNBbmFseXppbmdIZWFwKCkgY29u
c3QgeyByZXR1cm4gISFtX2hlYXBBbmFseXplcjsgfQorICAgIEhlYXBBbmFseXplciogaGVhcEFu
YWx5emVyKCkgY29uc3QgeyByZXR1cm4gbV9oZWFwQW5hbHl6ZXI7IH0KKworICAgIFJvb3RNYXJr
UmVhc29uIHJvb3RNYXJrUmVhc29uKCkgY29uc3QgeyByZXR1cm4gbV9yb290TWFya1JlYXNvbjsg
fQorICAgIHZvaWQgc2V0Um9vdE1hcmtSZWFzb24oUm9vdE1hcmtSZWFzb24gcmVhc29uKSB7IG1f
cm9vdE1hcmtSZWFzb24gPSByZWFzb247IH0KKworICAgIEhlYXBWZXJzaW9uIG1hcmtpbmdWZXJz
aW9uKCkgY29uc3QgeyByZXR1cm4gbV9tYXJraW5nVmVyc2lvbjsgfQorCisgICAgdmlydHVhbCBi
b29sIG11dGF0b3JJc1N0b3BwZWQoKSBjb25zdCA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgZGlk
UmFjZShjb25zdCBWaXNpdFJhY2VLZXkmKSA9IDA7CisgICAgdm9pZCBkaWRSYWNlKEpTQ2VsbCog
Y2VsbCwgY29uc3QgY2hhciogcmVhc29uKSB7IGRpZFJhY2UoVmlzaXRSYWNlS2V5KGNlbGwsIHJl
YXNvbikpOyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXRBc0NvbnN0cmFpbnQoY29uc3QgSlND
ZWxsKikgPSAwOworCisgICAgLy8gSW5saW5lIGZ1bmN0aW9ucyBmb3IgZGlzYXBhdGNoaW5nIHRv
IFNsb3RWaXNpdG9yIC8gRGVidWdTbG90VmlzaXRvciB2ZXJzaW9ucy4KKworLy8gICAgdm9pZCBh
cHBlbmQoY29uc3QgQ29uc2VydmF0aXZlUm9vdHMmKTsKKy8vICAgIHZvaWQgYXBwZW5kVW5iYXJy
aWVyZWQoSlNWYWx1ZSk7CisvLyAgICB2b2lkIGFwcGVuZFVuYmFycmllcmVkKEpTQ2VsbCopOwor
Ly8gICAgdm9pZCBhcHBlbmRIaWRkZW5VbmJhcnJpZXJlZChKU0NlbGwqKTsKKy8vICAgIGJvb2wg
Y29udGFpbnNPcGFxdWVSb290KHZvaWQqKSBjb25zdDsKKy8vICAgIHZvaWQgdmlzaXRBc0NvbnN0
cmFpbnQoY29uc3QgSlNDZWxsKik7CisKK3Byb3RlY3RlZDoKKyAgICBpbmxpbmUgQWJzdHJhY3RT
bG90VmlzaXRvcihIZWFwJiwgQ1N0cmluZyBjb2RlTmFtZSk7CisKKyAgICB2b2lkIHJlc2V0KCk7
CisKKyAgICBNYXJrU3RhY2tBcnJheSBtX2NvbGxlY3RvclN0YWNrOworICAgIE1hcmtTdGFja0Fy
cmF5IG1fbXV0YXRvclN0YWNrOworCisgICAgc2l6ZV90IG1fYnl0ZXNWaXNpdGVkIHsgMCB9Owor
ICAgIHNpemVfdCBtX3Zpc2l0Q291bnQgeyAwIH07CisKKyAgICBIZWFwVmVyc2lvbiBtX21hcmtp
bmdWZXJzaW9uOyAvLyBtbGFtIEZJWE1FCisgICAgSGVhcCYgbV9oZWFwOworCisgICAgSGVhcEFu
YWx5emVyKiBtX2hlYXBBbmFseXplciB7IG51bGxwdHIgfTsKKyAgICBSb290TWFya1JlYXNvbiBt
X3Jvb3RNYXJrUmVhc29uIHsgUm9vdE1hcmtSZWFzb246Ok5vbmUgfTsKKworICAgIENTdHJpbmcg
bV9jb2RlTmFtZTsKKworICAgIE1hcmtpbmdDb25zdHJhaW50KiBtX2N1cnJlbnRDb25zdHJhaW50
IHsgbnVsbHB0ciB9OworICAgIE1hcmtpbmdDb25zdHJhaW50U29sdmVyKiBtX2N1cnJlbnRTb2x2
ZXIgeyBudWxscHRyIH07CisKKy8vICAgIFR5cGUgbV92aXNpdG9yVHlwZTsKKworICAgIGZyaWVu
ZCBjbGFzcyBNYXJraW5nQ29uc3RyYWludFNvbHZlcjsKK307CisKK2NsYXNzIFNldFJvb3RNYXJr
UmVhc29uU2NvcGUgeworcHVibGljOgorICAgIFNldFJvb3RNYXJrUmVhc29uU2NvcGUoQWJzdHJh
Y3RTbG90VmlzaXRvciYgdmlzaXRvciwgQWJzdHJhY3RTbG90VmlzaXRvcjo6Um9vdE1hcmtSZWFz
b24gcmVhc29uKQorICAgICAgICA6IG1fdmlzaXRvcih2aXNpdG9yKQorICAgICAgICAsIG1fcHJl
dmlvdXNSZWFzb24odmlzaXRvci5yb290TWFya1JlYXNvbigpKQorICAgIHsKKyAgICAgICAgbV92
aXNpdG9yLnNldFJvb3RNYXJrUmVhc29uKHJlYXNvbik7CisgICAgfQorCisgICAgflNldFJvb3RN
YXJrUmVhc29uU2NvcGUoKQorICAgIHsKKyAgICAgICAgbV92aXNpdG9yLnNldFJvb3RNYXJrUmVh
c29uKG1fcHJldmlvdXNSZWFzb24pOworICAgIH0KKworcHJpdmF0ZToKKyAgICBBYnN0cmFjdFNs
b3RWaXNpdG9yJiBtX3Zpc2l0b3I7CisgICAgQWJzdHJhY3RTbG90VmlzaXRvcjo6Um9vdE1hcmtS
ZWFzb24gbV9wcmV2aW91c1JlYXNvbjsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQWJzdHJhY3RTbG90VmlzaXRvcklubGluZXMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9BYnN0cmFjdFNsb3RWaXNp
dG9ySW5saW5lcy5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0Fic3RyYWN0U2xvdFZpc2l0b3JJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwx
MDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJh
Z21hIG9uY2UKKworI2luY2x1ZGUgIkFic3RyYWN0U2xvdFZpc2l0b3IuaCIKKy8vI2luY2x1ZGUg
IkRlYnVnU2xvdFZpc2l0b3IuaCIKKyNpbmNsdWRlICJIZWFwLmgiCisvLyNpbmNsdWRlICJTbG90
VmlzaXRvci5oIgorI2luY2x1ZGUgIldlYWtJbmxpbmVzLmgiCisjaW5jbHVkZSAiV3JpdGVCYXJy
aWVyLmgiCisKK25hbWVzcGFjZSBKU0MgeworCisvL2lubGluZSBBYnN0cmFjdFNsb3RWaXNpdG9y
OjpBYnN0cmFjdFNsb3RWaXNpdG9yKFR5cGUgdHlwZSwgSGVhcCYgaGVhcCwgQ1N0cmluZyBjb2Rl
TmFtZSkKK2lubGluZSBBYnN0cmFjdFNsb3RWaXNpdG9yOjpBYnN0cmFjdFNsb3RWaXNpdG9yKEhl
YXAmIGhlYXAsIENTdHJpbmcgY29kZU5hbWUpCisgICAgOiBtX21hcmtpbmdWZXJzaW9uKE1hcmtl
ZFNwYWNlOjppbml0aWFsVmVyc2lvbikKKyAgICAsIG1faGVhcChoZWFwKQorICAgICwgbV9jb2Rl
TmFtZShjb2RlTmFtZSkKKy8vICAgICwgbV92aXNpdG9yVHlwZSh0eXBlKQoreworfQorCitpbmxp
bmUgSGVhcCogQWJzdHJhY3RTbG90VmlzaXRvcjo6aGVhcCgpIGNvbnN0Cit7CisgICAgcmV0dXJu
ICZtX2hlYXA7Cit9CisKK2lubGluZSBWTSYgQWJzdHJhY3RTbG90VmlzaXRvcjo6dm0oKQorewor
ICAgIHJldHVybiBtX2hlYXAudm0oKTsKK30KKworaW5saW5lIGNvbnN0IFZNJiBBYnN0cmFjdFNs
b3RWaXNpdG9yOjp2bSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1faGVhcC52bSgpOworfQorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBUPgorQUxXQVlTX0lOTElORSB2b2lkIEFic3RyYWN0U2xvdFZpc2l0
b3I6OmFwcGVuZChjb25zdCBXZWFrPFQ+JiB3ZWFrKQoreworICAgIGFwcGVuZFVuYmFycmllcmVk
KHdlYWsuZ2V0KCkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBUcmFpdHM+
CitBTFdBWVNfSU5MSU5FIHZvaWQgQWJzdHJhY3RTbG90VmlzaXRvcjo6YXBwZW5kKGNvbnN0IFdy
aXRlQmFycmllckJhc2U8VCwgVHJhaXRzPiYgc2xvdCkKK3sKKyAgICBhcHBlbmRVbmJhcnJpZXJl
ZChzbG90LmdldCgpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVHJhaXRz
PgorQUxXQVlTX0lOTElORSB2b2lkIEFic3RyYWN0U2xvdFZpc2l0b3I6OmFwcGVuZEhpZGRlbihj
b25zdCBXcml0ZUJhcnJpZXJCYXNlPFQsIFRyYWl0cz4mIHNsb3QpCit7CisgICAgYXBwZW5kSGlk
ZGVuVW5iYXJyaWVyZWQoc2xvdC5nZXQoKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEl0ZXJh
dG9yPgorQUxXQVlTX0lOTElORSB2b2lkIEFic3RyYWN0U2xvdFZpc2l0b3I6OmFwcGVuZChJdGVy
YXRvciBiZWdpbiwgSXRlcmF0b3IgZW5kKQoreworICAgIGZvciAoYXV0byBpdCA9IGJlZ2luOyBp
dCAhPSBlbmQ7ICsraXQpCisgICAgICAgIGFwcGVuZCgqaXQpOworfQorCitBTFdBWVNfSU5MSU5F
IHZvaWQgQWJzdHJhY3RTbG90VmlzaXRvcjo6YXBwZW5kVmFsdWVzKGNvbnN0IFdyaXRlQmFycmll
ckJhc2U8VW5rbm93bj4qIGJhcnJpZXJzLCBzaXplX3QgY291bnQpCit7CisgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKQorICAgICAgICBhcHBlbmQoYmFycmllcnNbaV0pOwor
fQorCitBTFdBWVNfSU5MSU5FIHZvaWQgQWJzdHJhY3RTbG90VmlzaXRvcjo6YXBwZW5kVmFsdWVz
SGlkZGVuKGNvbnN0IFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4qIGJhcnJpZXJzLCBzaXplX3Qg
Y291bnQpCit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKQorICAgICAg
ICBhcHBlbmRIaWRkZW4oYmFycmllcnNbaV0pOworfQorCitBTFdBWVNfSU5MSU5FIHZvaWQgQWJz
dHJhY3RTbG90VmlzaXRvcjo6cmVzZXQoKQoreworICAgIG1fYnl0ZXNWaXNpdGVkID0gMDsKKyAg
ICBtX3Zpc2l0Q291bnQgPSAwOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0RlYnVnU2xvdFZpc2l0b3IuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9EZWJ1Z1Nsb3RWaXNpdG9yLmgJKG5vbmV4aXN0ZW50
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvRGVidWdTbG90VmlzaXRvci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMTEwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJBYnN0cmFjdFNsb3RW
aXNpdG9yLmgiCisjaW5jbHVkZSAiSlNDSlNWYWx1ZS5oIgorI2luY2x1ZGUgIlZpc2l0UmFjZUtl
eS5oIgorI2luY2x1ZGUgIldlYWsuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIENvbnNl
cnZhdGl2ZVJvb3RzOworY2xhc3MgSGVhcDsKK2NsYXNzIEpTQ2VsbDsKKworLy8gRGVidWdTbG90
VmlzaXRvcidzIG1ldGhvZHMgc2hvdWxkIG1hdGNoIFNsb3RWaXNpdG9yLgorLy8gU2VlIFNsb3RW
aXNpdG9yLmggZm9yIGRvY3VtZW50YXRpb24gb24gd2hhdCBlYWNoIG9mIHRoZSBtZXRob2RzIGRv
ZXMuCisKK2NsYXNzIERlYnVnU2xvdFZpc2l0b3IgOiBwdWJsaWMgQWJzdHJhY3RTbG90VmlzaXRv
ciB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRGVidWdTbG90VmlzaXRvcik7CisgICAgV1RG
X01BS0VfRkFTVF9BTExPQ0FURUQ7CisgICAgdXNpbmcgQmFzZSA9IEFic3RyYWN0U2xvdFZpc2l0
b3I7CitwdWJsaWM6CisvLyAgICBjbGFzcyBEZWZhdWx0TWFya2luZ1Zpb2xhdGlvbkFzc2VydGlv
blNjb3BlIHsKKy8vICAgIHB1YmxpYzoKKy8vICAgICAgICBEZWZhdWx0TWFya2luZ1Zpb2xhdGlv
bkFzc2VydGlvblNjb3BlKERlYnVnU2xvdFZpc2l0b3ImKSB7IH0KKy8vICAgIH07CisKKyAgICBp
bmxpbmUgRGVidWdTbG90VmlzaXRvcihIZWFwJiwgQ1N0cmluZyBjb2RlTmFtZSk7CisgICAgdmly
dHVhbCB+RGVidWdTbG90VmlzaXRvcigpID0gZGVmYXVsdDsKKworICAgIGlubGluZSBWTSYgdm0o
KTsKKyAgICBpbmxpbmUgY29uc3QgVk0mIHZtKCkgY29uc3Q7CisgICAgaW5saW5lIEhlYXAqIGhl
YXAoKSBjb25zdDsKKworICAgIHZpcnR1YWwgdm9pZCBhcHBlbmQoY29uc3QgQ29uc2VydmF0aXZl
Um9vdHMmKSBvdmVycmlkZTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFRy
YWl0cz4gdm9pZCBhcHBlbmQoY29uc3QgV3JpdGVCYXJyaWVyQmFzZTxULCBUcmFpdHM+Jik7Cisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVHJhaXRzPiB2b2lkIGFwcGVuZEhpZGRl
bihjb25zdCBXcml0ZUJhcnJpZXJCYXNlPFQsIFRyYWl0cz4mKTsKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBJdGVyYXRvcj4gdm9pZCBhcHBlbmQoSXRlcmF0b3IgYmVnaW4gLCBJdGVyYXRvciBlbmQp
OworICAgIHZpcnR1YWwgdm9pZCBhcHBlbmRWYWx1ZXMoY29uc3QgV3JpdGVCYXJyaWVyQmFzZTxV
bmtub3duLCBSYXdWYWx1ZVRyYWl0czxVbmtub3duPj4qLCBzaXplX3QgY291bnQpID0gMDsKKyAg
ICB2aXJ0dWFsIHZvaWQgYXBwZW5kVmFsdWVzSGlkZGVuKGNvbnN0IFdyaXRlQmFycmllckJhc2U8
VW5rbm93biwgUmF3VmFsdWVUcmFpdHM8VW5rbm93bj4+Kiwgc2l6ZV90IGNvdW50KSA9IDA7CisK
KyAgICB2aXJ0dWFsIHZvaWQgYXBwZW5kVW5iYXJyaWVyZWQoSlNWYWx1ZSkgb3ZlcnJpZGU7Cisg
ICAgdmlydHVhbCB2b2lkIGFwcGVuZFVuYmFycmllcmVkKEpTVmFsdWUqLCBzaXplX3QpID0gMDsK
KyAgICB2aXJ0dWFsIHZvaWQgYXBwZW5kVW5iYXJyaWVyZWQoSlNDZWxsKikgb3ZlcnJpZGU7CisK
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIHZvaWQgYXBwZW5kKGNvbnN0IFdlYWs8VD4m
IHdlYWspOworCisgICAgdm9pZCBhcHBlbmRIaWRkZW5VbmJhcnJpZXJlZChKU1ZhbHVlKSBvdmVy
cmlkZTsKKyAgICB2b2lkIGFwcGVuZEhpZGRlblVuYmFycmllcmVkKEpTQ2VsbCopIG92ZXJyaWRl
OworCisgICAgYm9vbCBhZGRPcGFxdWVSb290KHZvaWQqKSBvdmVycmlkZTsgLy8gUmV0dXJucyB0
cnVlIGlmIHRoZSByb290IHdhcyBuZXcuCisgICAgYm9vbCBjb250YWluc09wYXF1ZVJvb3Qodm9p
ZCopIGNvbnN0IG92ZXJyaWRlOworCisgICAgYm9vbCBpc0ZpcnN0VmlzaXQoKSBjb25zdCBmaW5h
bCB7IHJldHVybiBtX2lzRmlyc3RWaXNpdDsgfSAvLyBtbGFtIEZJWE1FCisKKyAgICB2b2lkIG1h
cmtBdXhpbGlhcnkoY29uc3Qgdm9pZCogYmFzZSkgb3ZlcnJpZGU7CisKKyAgICB2b2lkIHJlcG9y
dEV4dHJhTWVtb3J5VmlzaXRlZChzaXplX3QpIG92ZXJyaWRlOworI2lmIEVOQUJMRShSRVNPVVJD
RV9VU0FHRSkKKyAgICB2b2lkIHJlcG9ydEV4dGVybmFsTWVtb3J5VmlzaXRlZChzaXplX3QpIG92
ZXJyaWRlOworI2VuZGlmCisKKyAgICBIZWFwVmVyc2lvbiBtYXJraW5nVmVyc2lvbigpIGNvbnN0
IHsgcmV0dXJuIG1fbWFya2luZ1ZlcnNpb247IH0KKworICAgIGJvb2wgbXV0YXRvcklzU3RvcHBl
ZCgpIGNvbnN0IG92ZXJyaWRlOworCisvLyAgICB2aXJ0dWFsIHZvaWQgZGlkUmFjZShjb25zdCBW
aXNpdFJhY2VLZXkmKSA9IDA7CisvLyAgICB2b2lkIGRpZFJhY2UoSlNDZWxsKiBjZWxsLCBjb25z
dCBjaGFyKiByZWFzb24pIHsgZGlkUmFjZShWaXNpdFJhY2VLZXkoY2VsbCwgcmVhc29uKSk7IH0K
KyAgICB2b2lkIGRpZFJhY2UoY29uc3QgVmlzaXRSYWNlS2V5Jikgb3ZlcnJpZGU7CisKK3Byb3Rl
Y3RlZDoKKyAgICBzaXplX3QgbV9ub25DZWxsVmlzaXRDb3VudCB7IDAgfTsgLy8gVXNlZCBmb3Ig
aW5jcmVtZW50YWwgZHJhaW5pbmcsIGlnbm9yZWQgb3RoZXJ3aXNlLgorICAgIENoZWNrZWRTaXpl
IG1fZXh0cmFNZW1vcnlTaXplIHsgMCB9OworCisgICAgSGVhcFZlcnNpb24gbV9tYXJraW5nVmVy
c2lvbjsgLy8gbWxhbSBGSVhNRQorCisvLyAgICBIZWFwJiBtX2hlYXA7CisgICAgQ1N0cmluZyBt
X2NvZGVOYW1lOworCisgICAgYm9vbCBtX2lzRmlyc3RWaXNpdCB7IGZhbHNlIH07CisvLyAgICBi
b29sIG1fbXV0YXRvcklzU3RvcHBlZCB7IGZhbHNlIH07IC8vIG1sYW0gRklYTUUKK307CisKK30g
Ly8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvRGVidWdT
bG90VmlzaXRvcklubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9EZWJ1Z1Nsb3RWaXNpdG9ySW5saW5lcy5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0RlYnVnU2xvdFZpc2l0b3JJbmxpbmVzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw4OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQWJzdHJhY3RTbG90VmlzaXRvcklu
bGluZXMuaCIKKyNpbmNsdWRlICJEZWJ1Z1Nsb3RWaXNpdG9yLmgiCisKK25hbWVzcGFjZSBKU0Mg
eworCitpbmxpbmUgRGVidWdTbG90VmlzaXRvcjo6RGVidWdTbG90VmlzaXRvcihIZWFwJiBoZWFw
LCBDU3RyaW5nIGNvZGVOYW1lKQorLy8gICAgOiBCYXNlKFR5cGU6OkRlYnVnU2xvdFZpc2l0b3Is
IGhlYXAsIGNvZGVOYW1lKQorICAgIDogQmFzZShoZWFwLCBjb2RlTmFtZSkKK3sKK30KKworaW5s
aW5lIEhlYXAqIERlYnVnU2xvdFZpc2l0b3I6OmhlYXAoKSBjb25zdAoreworICAgIHJldHVybiAm
bV9oZWFwOworfQorCitpbmxpbmUgVk0mIERlYnVnU2xvdFZpc2l0b3I6OnZtKCkKK3sKKyAgICBy
ZXR1cm4gbV9oZWFwLnZtKCk7Cit9CisKK2lubGluZSBjb25zdCBWTSYgRGVidWdTbG90VmlzaXRv
cjo6dm0oKSBjb25zdAoreworICAgIHJldHVybiBtX2hlYXAudm0oKTsKK30KKwordGVtcGxhdGU8
dHlwZW5hbWUgVCwgdHlwZW5hbWUgVHJhaXRzPgorQUxXQVlTX0lOTElORSB2b2lkIERlYnVnU2xv
dFZpc2l0b3I6OmFwcGVuZChjb25zdCBXcml0ZUJhcnJpZXJCYXNlPFQsIFRyYWl0cz4mIHNsb3Qp
Cit7CisgICAgYXBwZW5kVW5iYXJyaWVyZWQoc2xvdC5nZXQoKSk7Cit9CisKK3RlbXBsYXRlPHR5
cGVuYW1lIFQsIHR5cGVuYW1lIFRyYWl0cz4KK0FMV0FZU19JTkxJTkUgdm9pZCBEZWJ1Z1Nsb3RW
aXNpdG9yOjphcHBlbmRIaWRkZW4oY29uc3QgV3JpdGVCYXJyaWVyQmFzZTxULCBUcmFpdHM+JiBz
bG90KQoreworICAgIGFwcGVuZEhpZGRlblVuYmFycmllcmVkKHNsb3QuZ2V0KCkpOworfQorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBJdGVyYXRvcj4KK0FMV0FZU19JTkxJTkUgdm9pZCBEZWJ1Z1Nsb3RW
aXNpdG9yOjphcHBlbmQoSXRlcmF0b3IgYmVnaW4sIEl0ZXJhdG9yIGVuZCkKK3sKKyAgICBmb3Ig
KGF1dG8gaXQgPSBiZWdpbjsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICBhcHBlbmQoKml0KTsK
K30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK0FMV0FZU19JTkxJTkUgdm9pZCBEZWJ1Z1Nsb3RW
aXNpdG9yOjphcHBlbmQoY29uc3QgV2VhazxUPiYgd2VhaykKK3sKKyAgICBhcHBlbmRVbmJhcnJp
ZXJlZCh3ZWFrLmdldCgpKTsKK30KKworaW5saW5lIHZvaWQgRGVidWdTbG90VmlzaXRvcjo6cmVw
b3J0RXh0cmFNZW1vcnlWaXNpdGVkKHNpemVfdCBzaXplKQoreworICAgIGlmIChtX2lzRmlyc3RW
aXNpdCkgeworICAgICAgICBtX25vbkNlbGxWaXNpdENvdW50ICs9IHNpemU7CisgICAgICAgIC8v
IEZJWE1FOiBDaGFuZ2UgdGhpcyB0byB1c2UgU2F0dXJhdGVkQXJpdGhtZXRpYyB3aGVuIGF2YWls
YWJsZS4KKyAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE3MDQxMQorICAgICAgICBtX2V4dHJhTWVtb3J5U2l6ZSArPSBzaXplOworICAgIH0KK30KKwor
fSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IYW5k
bGVTZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hhbmRs
ZVNldC5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0hhbmRsZVNldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU2LDcgKzU2LDkgQEAgdm9pZCBIYW5k
bGVTZXQ6Omdyb3coKQogICAgIH0KIH0KIAotdm9pZCBIYW5kbGVTZXQ6OnZpc2l0U3Ryb25nSGFu
ZGxlcyhTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4K
Ky8vdm9pZCBIYW5kbGVTZXQ6OnZpc2l0U3Ryb25nSGFuZGxlcyhWaXNpdG9yJiB2aXNpdG9yKQor
dm9pZCBIYW5kbGVTZXQ6OnZpc2l0U3Ryb25nSGFuZGxlczEoQWJzdHJhY3RTbG90VmlzaXRvciYg
dmlzaXRvcikKIHsKICAgICBOb2RlKiBlbmQgPSBtX3N0cm9uZ0xpc3QuZW5kKCk7CiAgICAgZm9y
IChOb2RlKiBub2RlID0gbV9zdHJvbmdMaXN0LmJlZ2luKCk7IG5vZGUgIT0gZW5kOyBub2RlID0g
bm9kZS0+bmV4dCgpKSB7CkBAIC02Nyw2ICs2OSw5IEBAIHZvaWQgSGFuZGxlU2V0Ojp2aXNpdFN0
cm9uZ0hhbmRsZXMoU2xvdFYKICAgICB9CiB9CiAKKy8vdGVtcGxhdGUgdm9pZCBIYW5kbGVTZXQ6
OnZpc2l0U3Ryb25nSGFuZGxlcyhTbG90VmlzaXRvciYpOworLy90ZW1wbGF0ZSB2b2lkIEhhbmRs
ZVNldDo6dmlzaXRTdHJvbmdIYW5kbGVzKERlYnVnU2xvdFZpc2l0b3ImKTsKKwogdm9pZCBIYW5k
bGVTZXQ6OndyaXRlQmFycmllcihIYW5kbGVTbG90IHNsb3QsIGNvbnN0IEpTVmFsdWUmIHZhbHVl
KQogewogICAgIGlmICghdmFsdWUgPT0gISpzbG90ICYmIHNsb3QtPmlzQ2VsbCgpID09IHZhbHVl
LmlzQ2VsbCgpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGFuZGxlU2V0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGFuZGxlU2V0LmgJKHJl
dmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hhbmRsZVNldC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zNSwxMCArMzUsMTEgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAK
K2NsYXNzIEFic3RyYWN0U2xvdFZpc2l0b3I7CiBjbGFzcyBIYW5kbGVTZXQ7CiBjbGFzcyBWTTsK
IGNsYXNzIEpTVmFsdWU7Ci1jbGFzcyBTbG90VmlzaXRvcjsKKy8vY2xhc3MgU2xvdFZpc2l0b3I7
CiAKIGNsYXNzIEhhbmRsZU5vZGUgewogcHVibGljOgpAQCAtNzMsNyArNzQsOCBAQCBwdWJsaWM6
CiAgICAgSGFuZGxlU2xvdCBhbGxvY2F0ZSgpOwogICAgIHZvaWQgZGVhbGxvY2F0ZShIYW5kbGVT
bG90KTsKIAotICAgIHZvaWQgdmlzaXRTdHJvbmdIYW5kbGVzKFNsb3RWaXNpdG9yJik7CisvLyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIHZpc2l0U3Ryb25nSGFuZGxlcyhWaXNp
dG9yJik7CisgICAgdm9pZCB2aXNpdFN0cm9uZ0hhbmRsZXMxKEFic3RyYWN0U2xvdFZpc2l0b3Im
KTsKIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgd3JpdGVCYXJyaWVyKEhhbmRsZVNsb3Qs
IGNvbnN0IEpTVmFsdWUmKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVh
cC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJ
KHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yNjk3LDExICsyNjk3LDEyIEBAIHZvaWQgSGVhcDo6ZGlkRnJl
ZUJsb2NrKHNpemVfdCBjYXBhY2l0eSkKICNlbmRpZgogfQogCisvLyBtbGFtIEZJWE1FCiB2b2lk
IEhlYXA6OmFkZENvcmVDb25zdHJhaW50cygpCiB7CiAgICAgbV9jb25zdHJhaW50U2V0LT5hZGQo
CiAgICAgICAgICJDcyIsICJDb25zZXJ2YXRpdmUgU2NhbiIsCi0gICAgICAgIFt0aGlzLCBsYXN0
VmVyc2lvbiA9IHN0YXRpY19jYXN0PHVpbnQ2NF90PigwKV0gKFNsb3RWaXNpdG9yJiBzbG90Vmlz
aXRvcikgbXV0YWJsZSB7CisgICAgICAgIFt0aGlzLCBsYXN0VmVyc2lvbiA9IHN0YXRpY19jYXN0
PHVpbnQ2NF90PigwKV0gKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpIG11dGFibGUgewog
ICAgICAgICAgICAgYm9vbCBzaG91bGROb3RQcm9kdWNlV29yayA9IGxhc3RWZXJzaW9uID09IG1f
cGhhc2VWZXJzaW9uOwogICAgICAgICAgICAgaWYgKHNob3VsZE5vdFByb2R1Y2VXb3JrKQogICAg
ICAgICAgICAgICAgIHJldHVybjsKQEAgLTI3MTgsMTMgKzI3MTksMTMgQEAgdm9pZCBIZWFwOjph
ZGRDb3JlQ29uc3RyYWludHMoKQogICAgICAgICAgICAgICAgIGdhdGhlckpTU3RhY2tSb290cyhj
b25zZXJ2YXRpdmVSb290cyk7CiAgICAgICAgICAgICAgICAgZ2F0aGVyU2NyYXRjaEJ1ZmZlclJv
b3RzKGNvbnNlcnZhdGl2ZVJvb3RzKTsKIAotICAgICAgICAgICAgICAgIFNldFJvb3RNYXJrUmVh
c29uU2NvcGUgcm9vdFNjb3BlKHNsb3RWaXNpdG9yLCBTbG90VmlzaXRvcjo6Um9vdE1hcmtSZWFz
b246OkNvbnNlcnZhdGl2ZVNjYW4pOwotICAgICAgICAgICAgICAgIHNsb3RWaXNpdG9yLmFwcGVu
ZChjb25zZXJ2YXRpdmVSb290cyk7CisgICAgICAgICAgICAgICAgU2V0Um9vdE1hcmtSZWFzb25T
Y29wZSByb290U2NvcGUodmlzaXRvciwgQWJzdHJhY3RTbG90VmlzaXRvcjo6Um9vdE1hcmtSZWFz
b246OkNvbnNlcnZhdGl2ZVNjYW4pOworICAgICAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kKGNv
bnNlcnZhdGl2ZVJvb3RzKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChPcHRpb25z
Ojp1c2VKSVQoKSkgewogICAgICAgICAgICAgICAgIC8vIEpJVFN0dWJSb3V0aW5lcyBtdXN0IGJl
IHZpc2l0ZWQgYWZ0ZXIgc2Nhbm5pbmcgQ29uc2VydmF0aXZlUm9vdHMgc2luY2UgSklUU3R1YlJv
dXRpbmVzIGRlcGVuZCBvbiB0aGUgaG9vayBleGVjdXRlZCBkdXJpbmcgZ2F0aGVyaW5nIENvbnNl
cnZhdGl2ZVJvb3RzLgotICAgICAgICAgICAgICAgIFNldFJvb3RNYXJrUmVhc29uU2NvcGUgcm9v
dFNjb3BlKHNsb3RWaXNpdG9yLCBTbG90VmlzaXRvcjo6Um9vdE1hcmtSZWFzb246OkpJVFN0dWJS
b3V0aW5lcyk7Ci0gICAgICAgICAgICAgICAgbV9qaXRTdHViUm91dGluZXMtPnRyYWNlTWFya2Vk
U3R1YlJvdXRpbmVzKHNsb3RWaXNpdG9yKTsKKyAgICAgICAgICAgICAgICBTZXRSb290TWFya1Jl
YXNvblNjb3BlIHJvb3RTY29wZSh2aXNpdG9yLCBBYnN0cmFjdFNsb3RWaXNpdG9yOjpSb290TWFy
a1JlYXNvbjo6SklUU3R1YlJvdXRpbmVzKTsKKyAgICAgICAgICAgICAgICBtX2ppdFN0dWJSb3V0
aW5lcy0+dHJhY2VNYXJrZWRTdHViUm91dGluZXMxKHZpc2l0b3IpOwogICAgICAgICAgICAgfQog
ICAgICAgICAgICAgCiAgICAgICAgICAgICBsYXN0VmVyc2lvbiA9IG1fcGhhc2VWZXJzaW9uOwpA
QCAtMjczMyw5MiArMjczNCw5MiBAQCB2b2lkIEhlYXA6OmFkZENvcmVDb25zdHJhaW50cygpCiAg
ICAgCiAgICAgbV9jb25zdHJhaW50U2V0LT5hZGQoCiAgICAgICAgICJNc3IiLCAiTWlzYyBTbWFs
bCBSb290cyIsCi0gICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yKSB7Cisg
ICAgICAgIFt0aGlzXSAoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikgewogCiAjaWYgSlND
X09CSkNfQVBJX0VOQUJMRUQKLSAgICAgICAgICAgIHNjYW5FeHRlcm5hbFJlbWVtYmVyZWRTZXQo
bV92bSwgc2xvdFZpc2l0b3IpOworICAgICAgICAgICAgc2NhbkV4dGVybmFsUmVtZW1iZXJlZFNl
dChtX3ZtLCB2aXNpdG9yKTsKICNlbmRpZgogICAgICAgICAgICAgaWYgKG1fdm0uc21hbGxTdHJp
bmdzLm5lZWRzVG9CZVZpc2l0ZWQoKm1fY29sbGVjdGlvblNjb3BlKSkgewotICAgICAgICAgICAg
ICAgIFNldFJvb3RNYXJrUmVhc29uU2NvcGUgcm9vdFNjb3BlKHNsb3RWaXNpdG9yLCBTbG90Vmlz
aXRvcjo6Um9vdE1hcmtSZWFzb246OlN0cm9uZ1JlZmVyZW5jZXMpOwotICAgICAgICAgICAgICAg
IG1fdm0uc21hbGxTdHJpbmdzLnZpc2l0U3Ryb25nUmVmZXJlbmNlcyhzbG90VmlzaXRvcik7Cisg
ICAgICAgICAgICAgICAgU2V0Um9vdE1hcmtSZWFzb25TY29wZSByb290U2NvcGUodmlzaXRvciwg
QWJzdHJhY3RTbG90VmlzaXRvcjo6Um9vdE1hcmtSZWFzb246OlN0cm9uZ1JlZmVyZW5jZXMpOwor
ICAgICAgICAgICAgICAgIG1fdm0uc21hbGxTdHJpbmdzLnZpc2l0U3Ryb25nUmVmZXJlbmNlcyh2
aXNpdG9yKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIFNldFJvb3RNYXJrUmVhc29uU2NvcGUgcm9vdFNjb3BlKHNsb3RWaXNpdG9y
LCBTbG90VmlzaXRvcjo6Um9vdE1hcmtSZWFzb246OlByb3RlY3RlZFZhbHVlcyk7CisgICAgICAg
ICAgICAgICAgU2V0Um9vdE1hcmtSZWFzb25TY29wZSByb290U2NvcGUodmlzaXRvciwgQWJzdHJh
Y3RTbG90VmlzaXRvcjo6Um9vdE1hcmtSZWFzb246OlByb3RlY3RlZFZhbHVlcyk7CiAgICAgICAg
ICAgICAgICAgZm9yIChhdXRvJiBwYWlyIDogbV9wcm90ZWN0ZWRWYWx1ZXMpCi0gICAgICAgICAg
ICAgICAgICAgIHNsb3RWaXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKHBhaXIua2V5KTsKKyAgICAg
ICAgICAgICAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZChwYWlyLmtleSk7CiAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmIChtX21hcmtMaXN0U2V0ICYm
IG1fbWFya0xpc3RTZXQtPnNpemUoKSkgewotICAgICAgICAgICAgICAgIFNldFJvb3RNYXJrUmVh
c29uU2NvcGUgcm9vdFNjb3BlKHNsb3RWaXNpdG9yLCBTbG90VmlzaXRvcjo6Um9vdE1hcmtSZWFz
b246OkNvbnNlcnZhdGl2ZVNjYW4pOwotICAgICAgICAgICAgICAgIE1hcmtlZEFyZ3VtZW50QnVm
ZmVyOjptYXJrTGlzdHMoc2xvdFZpc2l0b3IsICptX21hcmtMaXN0U2V0KTsKKyAgICAgICAgICAg
ICAgICBTZXRSb290TWFya1JlYXNvblNjb3BlIHJvb3RTY29wZSh2aXNpdG9yLCBBYnN0cmFjdFNs
b3RWaXNpdG9yOjpSb290TWFya1JlYXNvbjo6Q29uc2VydmF0aXZlU2Nhbik7CisgICAgICAgICAg
ICAgICAgTWFya2VkQXJndW1lbnRCdWZmZXI6Om1hcmtMaXN0cyh2aXNpdG9yLCAqbV9tYXJrTGlz
dFNldCk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIG1fbWFya2VkSlNWYWx1ZVJlZkFy
cmF5cy5mb3JFYWNoKFsmXSAoTWFya2VkSlNWYWx1ZVJlZkFycmF5KiBhcnJheSkgewotICAgICAg
ICAgICAgICAgIGFycmF5LT52aXNpdEFnZ3JlZ2F0ZShzbG90VmlzaXRvcik7CisgICAgICAgICAg
ICAgICAgYXJyYXktPnZpc2l0QWdncmVnYXRlMSh2aXNpdG9yKTsKICAgICAgICAgICAgIH0pOwog
CiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgU2V0Um9vdE1hcmtSZWFzb25TY29wZSBy
b290U2NvcGUoc2xvdFZpc2l0b3IsIFNsb3RWaXNpdG9yOjpSb290TWFya1JlYXNvbjo6Vk1FeGNl
cHRpb25zKTsKLSAgICAgICAgICAgICAgICBzbG90VmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZCht
X3ZtLmV4Y2VwdGlvbigpKTsKLSAgICAgICAgICAgICAgICBzbG90VmlzaXRvci5hcHBlbmRVbmJh
cnJpZXJlZChtX3ZtLmxhc3RFeGNlcHRpb24oKSk7CisgICAgICAgICAgICAgICAgU2V0Um9vdE1h
cmtSZWFzb25TY29wZSByb290U2NvcGUodmlzaXRvciwgQWJzdHJhY3RTbG90VmlzaXRvcjo6Um9v
dE1hcmtSZWFzb246OlZNRXhjZXB0aW9ucyk7CisgICAgICAgICAgICAgICAgdmlzaXRvci5hcHBl
bmRVbmJhcnJpZXJlZChtX3ZtLmV4Y2VwdGlvbigpKTsKKyAgICAgICAgICAgICAgICB2aXNpdG9y
LmFwcGVuZFVuYmFycmllcmVkKG1fdm0ubGFzdEV4Y2VwdGlvbigpKTsKICAgICAgICAgICAgIH0K
ICAgICAgICAgfSwKICAgICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHk6OkdyZXllZEJ5RXhlY3V0
aW9uKTsKICAgICAKICAgICBtX2NvbnN0cmFpbnRTZXQtPmFkZCgKICAgICAgICAgIlNoIiwgIlN0
cm9uZyBIYW5kbGVzIiwKLSAgICAgICAgW3RoaXNdIChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3Ip
IHsKLSAgICAgICAgICAgIFNldFJvb3RNYXJrUmVhc29uU2NvcGUgcm9vdFNjb3BlKHNsb3RWaXNp
dG9yLCBTbG90VmlzaXRvcjo6Um9vdE1hcmtSZWFzb246OlN0cm9uZ0hhbmRsZXMpOwotICAgICAg
ICAgICAgbV9oYW5kbGVTZXQudmlzaXRTdHJvbmdIYW5kbGVzKHNsb3RWaXNpdG9yKTsKKyAgICAg
ICAgW3RoaXNdIChBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKSB7CisgICAgICAgICAgICBT
ZXRSb290TWFya1JlYXNvblNjb3BlIHJvb3RTY29wZSh2aXNpdG9yLCBBYnN0cmFjdFNsb3RWaXNp
dG9yOjpSb290TWFya1JlYXNvbjo6U3Ryb25nSGFuZGxlcyk7CisgICAgICAgICAgICBtX2hhbmRs
ZVNldC52aXNpdFN0cm9uZ0hhbmRsZXMxKHZpc2l0b3IpOwogICAgICAgICB9LAogICAgICAgICBD
b25zdHJhaW50Vm9sYXRpbGl0eTo6R3JleWVkQnlFeGVjdXRpb24pOwogICAgIAogICAgIG1fY29u
c3RyYWludFNldC0+YWRkKAogICAgICAgICAiRCIsICJEZWJ1Z2dlciIsCi0gICAgICAgIFt0aGlz
XSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yKSB7Ci0gICAgICAgICAgICBTZXRSb290TWFya1Jl
YXNvblNjb3BlIHJvb3RTY29wZShzbG90VmlzaXRvciwgU2xvdFZpc2l0b3I6OlJvb3RNYXJrUmVh
c29uOjpEZWJ1Z2dlcik7CisgICAgICAgIFt0aGlzXSAoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlz
aXRvcikgeworICAgICAgICAgICAgU2V0Um9vdE1hcmtSZWFzb25TY29wZSByb290U2NvcGUodmlz
aXRvciwgQWJzdHJhY3RTbG90VmlzaXRvcjo6Um9vdE1hcmtSZWFzb246OkRlYnVnZ2VyKTsKIAog
I2lmIEVOQUJMRShTQU1QTElOR19QUk9GSUxFUikKICAgICAgICAgICAgIGlmIChTYW1wbGluZ1By
b2ZpbGVyKiBzYW1wbGluZ1Byb2ZpbGVyID0gbV92bS5zYW1wbGluZ1Byb2ZpbGVyKCkpIHsKICAg
ICAgICAgICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKHNhbXBsaW5nUHJvZmlsZXItPmdl
dExvY2soKSk7CiAgICAgICAgICAgICAgICAgc2FtcGxpbmdQcm9maWxlci0+cHJvY2Vzc1VudmVy
aWZpZWRTdGFja1RyYWNlcyhsb2NrZXIpOwotICAgICAgICAgICAgICAgIHNhbXBsaW5nUHJvZmls
ZXItPnZpc2l0KHNsb3RWaXNpdG9yKTsKKyAgICAgICAgICAgICAgICBzYW1wbGluZ1Byb2ZpbGVy
LT52aXNpdCh2aXNpdG9yKTsKICAgICAgICAgICAgICAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSA9
PSBHQ0xvZ2dpbmc6OlZlcmJvc2UpCi0gICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIlNhbXBs
aW5nIFByb2ZpbGVyIGRhdGE6XG4iLCBzbG90VmlzaXRvcik7CisgICAgICAgICAgICAgICAgICAg
IGRhdGFMb2coIlNhbXBsaW5nIFByb2ZpbGVyIGRhdGE6XG4iLCB2aXNpdG9yKTsKICAgICAgICAg
ICAgIH0KICNlbmRpZiAvLyBFTkFCTEUoU0FNUExJTkdfUFJPRklMRVIpCiAKICAgICAgICAgICAg
IGlmIChtX3ZtLnR5cGVQcm9maWxlcigpKQotICAgICAgICAgICAgICAgIG1fdm0udHlwZVByb2Zp
bGVyTG9nKCktPnZpc2l0KHNsb3RWaXNpdG9yKTsKKyAgICAgICAgICAgICAgICBtX3ZtLnR5cGVQ
cm9maWxlckxvZygpLT52aXNpdCh2aXNpdG9yKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAg
aWYgKGF1dG8qIHNoYWRvd0NoaWNrZW4gPSBtX3ZtLnNoYWRvd0NoaWNrZW4oKSkKLSAgICAgICAg
ICAgICAgICBzaGFkb3dDaGlja2VuLT52aXNpdENoaWxkcmVuKHNsb3RWaXNpdG9yKTsKKyAgICAg
ICAgICAgICAgICBzaGFkb3dDaGlja2VuLT52aXNpdENoaWxkcmVuKHZpc2l0b3IpOwogICAgICAg
ICB9LAogICAgICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eTo6R3JleWVkQnlFeGVjdXRpb24pOwog
ICAgIAogICAgIG1fY29uc3RyYWludFNldC0+YWRkKAogICAgICAgICAiV3MiLCAiV2VhayBTZXRz
IiwKLSAgICAgICAgW3RoaXNdIChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IpIHsKLSAgICAgICAg
ICAgIFNldFJvb3RNYXJrUmVhc29uU2NvcGUgcm9vdFNjb3BlKHNsb3RWaXNpdG9yLCBTbG90Vmlz
aXRvcjo6Um9vdE1hcmtSZWFzb246OldlYWtTZXRzKTsKLSAgICAgICAgICAgIG1fb2JqZWN0U3Bh
Y2UudmlzaXRXZWFrU2V0cyhzbG90VmlzaXRvcik7CisgICAgICAgIFt0aGlzXSAoQWJzdHJhY3RT
bG90VmlzaXRvciYgdmlzaXRvcikgeworICAgICAgICAgICAgU2V0Um9vdE1hcmtSZWFzb25TY29w
ZSByb290U2NvcGUodmlzaXRvciwgQWJzdHJhY3RTbG90VmlzaXRvcjo6Um9vdE1hcmtSZWFzb246
OldlYWtTZXRzKTsKKyAgICAgICAgICAgIG1fb2JqZWN0U3BhY2UudmlzaXRXZWFrU2V0czEodmlz
aXRvcik7CiAgICAgICAgIH0sCiAgICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5OjpHcmV5ZWRC
eU1hcmtpbmcpOwogICAgIAogICAgIG1fY29uc3RyYWludFNldC0+YWRkKAogICAgICAgICAiTyIs
ICJPdXRwdXQiLAotICAgICAgICBbXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yKSB7Ci0gICAg
ICAgICAgICBWTSYgdm0gPSBzbG90VmlzaXRvci52bSgpOworICAgICAgICBbXSAoQWJzdHJhY3RT
bG90VmlzaXRvciYgdmlzaXRvcikgeworICAgICAgICAgICAgVk0mIHZtID0gdmlzaXRvci52bSgp
OwogCi0gICAgICAgICAgICBhdXRvIGNhbGxPdXRwdXRDb25zdHJhaW50ID0gW10gKFNsb3RWaXNp
dG9yJiBzbG90VmlzaXRvciwgSGVhcENlbGwqIGhlYXBDZWxsLCBIZWFwQ2VsbDo6S2luZCkgewot
ICAgICAgICAgICAgICAgIFNldFJvb3RNYXJrUmVhc29uU2NvcGUgcm9vdFNjb3BlKHNsb3RWaXNp
dG9yLCBTbG90VmlzaXRvcjo6Um9vdE1hcmtSZWFzb246Ok91dHB1dCk7Ci0gICAgICAgICAgICAg
ICAgVk0mIHZtID0gc2xvdFZpc2l0b3Iudm0oKTsKKyAgICAgICAgICAgIGF1dG8gY2FsbE91dHB1
dENvbnN0cmFpbnQgPSBbXSAoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvciwgSGVhcENlbGwq
IGhlYXBDZWxsLCBIZWFwQ2VsbDo6S2luZCkgeworICAgICAgICAgICAgICAgIFNldFJvb3RNYXJr
UmVhc29uU2NvcGUgcm9vdFNjb3BlKHZpc2l0b3IsIEFic3RyYWN0U2xvdFZpc2l0b3I6OlJvb3RN
YXJrUmVhc29uOjpPdXRwdXQpOworICAgICAgICAgICAgICAgIFZNJiB2bSA9IHZpc2l0b3Iudm0o
KTsKICAgICAgICAgICAgICAgICBKU0NlbGwqIGNlbGwgPSBzdGF0aWNfY2FzdDxKU0NlbGwqPiho
ZWFwQ2VsbCk7Ci0gICAgICAgICAgICAgICAgY2VsbC0+bWV0aG9kVGFibGUodm0pLT52aXNpdE91
dHB1dENvbnN0cmFpbnRzKGNlbGwsIHNsb3RWaXNpdG9yKTsKKyAgICAgICAgICAgICAgICBjZWxs
LT5tZXRob2RUYWJsZSh2bSktPnZpc2l0T3V0cHV0Q29uc3RyYWludHMoY2VsbCwgdmlzaXRvcik7
CiAgICAgICAgICAgICB9OwogICAgICAgICAgICAgCiAgICAgICAgICAgICBhdXRvIGFkZCA9IFsm
XSAoYXV0byYgc2V0KSB7Ci0gICAgICAgICAgICAgICAgc2xvdFZpc2l0b3IuYWRkUGFyYWxsZWxD
b25zdHJhaW50VGFzayhzZXQuZm9yRWFjaE1hcmtlZENlbGxJblBhcmFsbGVsKGNhbGxPdXRwdXRD
b25zdHJhaW50KSk7CisgICAgICAgICAgICAgICAgdmlzaXRvci5hZGRQYXJhbGxlbENvbnN0cmFp
bnRUYXNrKHNldC5mb3JFYWNoTWFya2VkQ2VsbEluUGFyYWxsZWwoY2FsbE91dHB1dENvbnN0cmFp
bnQpKTsKICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGFkZCh2bS5l
eGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlc1dpdGhDb25zdHJhaW50cyk7CkBAIC0yODMyLDIyICsy
ODMzLDIyIEBAIHZvaWQgSGVhcDo6YWRkQ29yZUNvbnN0cmFpbnRzKCkKICAgICBpZiAoT3B0aW9u
czo6dXNlSklUKCkpIHsKICAgICAgICAgbV9jb25zdHJhaW50U2V0LT5hZGQoCiAgICAgICAgICAg
ICAiRHciLCAiREZHIFdvcmtsaXN0cyIsCi0gICAgICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9y
JiBzbG90VmlzaXRvcikgewotICAgICAgICAgICAgICAgIFNldFJvb3RNYXJrUmVhc29uU2NvcGUg
cm9vdFNjb3BlKHNsb3RWaXNpdG9yLCBTbG90VmlzaXRvcjo6Um9vdE1hcmtSZWFzb246OkRGR1dv
cmtMaXN0cyk7CisgICAgICAgICAgICBbdGhpc10gKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0
b3IpIHsKKyAgICAgICAgICAgICAgICBTZXRSb290TWFya1JlYXNvblNjb3BlIHJvb3RTY29wZSh2
aXNpdG9yLCBBYnN0cmFjdFNsb3RWaXNpdG9yOjpSb290TWFya1JlYXNvbjo6REZHV29ya0xpc3Rz
KTsKIAogICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IERGRzo6bnVtYmVyT2ZXb3Jr
bGlzdHMoKTsgaS0tOykKLSAgICAgICAgICAgICAgICAgICAgREZHOjpleGlzdGluZ1dvcmtsaXN0
Rm9ySW5kZXgoaSkudmlzaXRXZWFrUmVmZXJlbmNlcyhzbG90VmlzaXRvcik7CisgICAgICAgICAg
ICAgICAgICAgIERGRzo6ZXhpc3RpbmdXb3JrbGlzdEZvckluZGV4KGkpLnZpc2l0V2Vha1JlZmVy
ZW5jZXModmlzaXRvcik7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgLy8gRklY
TUU6IFRoaXMgaXMgYWxtb3N0IGNlcnRhaW5seSB1bm5lY2Vzc2FyeS4KICAgICAgICAgICAgICAg
ICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY2ODI5CiAgICAg
ICAgICAgICAgICAgREZHOjppdGVyYXRlQ29kZUJsb2Nrc0ZvckdDKAogICAgICAgICAgICAgICAg
ICAgICBtX3ZtLAogICAgICAgICAgICAgICAgICAgICBbJl0gKENvZGVCbG9jayogY29kZUJsb2Nr
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzbG90VmlzaXRvci5hcHBlbmRVbmJhcnJpZXJl
ZChjb2RlQmxvY2spOworICAgICAgICAgICAgICAgICAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJh
cnJpZXJlZChjb2RlQmxvY2spOwogICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAg
ICAgICAKICAgICAgICAgICAgICAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSA9PSBHQ0xvZ2dpbmc6
OlZlcmJvc2UpCi0gICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIkRGRyBXb3JrbGlzdHM6XG4i
LCBzbG90VmlzaXRvcik7CisgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIkRGRyBXb3JrbGlz
dHM6XG4iLCB2aXNpdG9yKTsKICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICBDb25zdHJhaW50
Vm9sYXRpbGl0eTo6R3JleWVkQnlNYXJraW5nKTsKICAgICB9CkBAIC0yODU1LDE0ICsyODU2LDE0
IEBAIHZvaWQgSGVhcDo6YWRkQ29yZUNvbnN0cmFpbnRzKCkKICAgICAKICAgICBtX2NvbnN0cmFp
bnRTZXQtPmFkZCgKICAgICAgICAgIkNiIiwgIkNvZGVCbG9ja3MiLAotICAgICAgICBbdGhpc10g
KFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvcikgewotICAgICAgICAgICAgU2V0Um9vdE1hcmtSZWFz
b25TY29wZSByb290U2NvcGUoc2xvdFZpc2l0b3IsIFNsb3RWaXNpdG9yOjpSb290TWFya1JlYXNv
bjo6Q29kZUJsb2Nrcyk7CisgICAgICAgIFt0aGlzXSAoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlz
aXRvcikgeworICAgICAgICAgICAgU2V0Um9vdE1hcmtSZWFzb25TY29wZSByb290U2NvcGUodmlz
aXRvciwgQWJzdHJhY3RTbG90VmlzaXRvcjo6Um9vdE1hcmtSZWFzb246OkNvZGVCbG9ja3MpOwog
ICAgICAgICAgICAgaXRlcmF0ZUV4ZWN1dGluZ0FuZENvbXBpbGluZ0NvZGVCbG9ja3NXaXRob3V0
SG9sZGluZ0xvY2tzKAogICAgICAgICAgICAgICAgIFsmXSAoQ29kZUJsb2NrKiBjb2RlQmxvY2sp
IHsKICAgICAgICAgICAgICAgICAgICAgLy8gVmlzaXQgdGhlIENvZGVCbG9jayBhcyBhIGNvbnN0
cmFpbnQgb25seSBpZiBpdCdzIGJsYWNrLgogICAgICAgICAgICAgICAgICAgICBpZiAoaXNNYXJr
ZWQoY29kZUJsb2NrKQogICAgICAgICAgICAgICAgICAgICAgICAgJiYgY29kZUJsb2NrLT5jZWxs
U3RhdGUoKSA9PSBDZWxsU3RhdGU6OlBvc3NpYmx5QmxhY2spCi0gICAgICAgICAgICAgICAgICAg
ICAgICBzbG90VmlzaXRvci52aXNpdEFzQ29uc3RyYWludChjb2RlQmxvY2spOworICAgICAgICAg
ICAgICAgICAgICAgICAgdmlzaXRvci52aXNpdEFzQ29uc3RyYWludChjb2RlQmxvY2spOwogICAg
ICAgICAgICAgICAgIH0pOwogICAgICAgICB9LAogICAgICAgICBDb25zdHJhaW50Vm9sYXRpbGl0
eTo6U2VsZG9tR3JleWVkKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0lzb0Nl
bGxTZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Jc29DZWxs
U2V0LmgJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0lz
b0NlbGxTZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsNyBAQAogCiBuYW1lc3BhY2Ug
SlNDIHsKIAorY2xhc3MgQWJzdHJhY3RTbG90VmlzaXRvcjsKIGNsYXNzIEhlYXBDZWxsOwogY2xh
c3MgSXNvU3Vic3BhY2U7CiAKQEAgLTU5LDcgKzYwLDcgQEAgcHVibGljOgogICAgIHZvaWQgZm9y
RWFjaE1hcmtlZENlbGwoY29uc3QgRnVuYyYpOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVu
Yz4KLSAgICBSZWY8U2hhcmVkVGFzazx2b2lkKFNsb3RWaXNpdG9yJik+PiBmb3JFYWNoTWFya2Vk
Q2VsbEluUGFyYWxsZWwoY29uc3QgRnVuYyYpOworICAgIFJlZjxTaGFyZWRUYXNrPHZvaWQoQWJz
dHJhY3RTbG90VmlzaXRvciYpPj4gZm9yRWFjaE1hcmtlZENlbGxJblBhcmFsbGVsKGNvbnN0IEZ1
bmMmKTsKICAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgogICAgIHZvaWQgZm9yRWFj
aExpdmVDZWxsKGNvbnN0IEZ1bmMmKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0lzb0NlbGxTZXRJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvSXNvQ2VsbFNldElubGluZXMuaAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvSXNvQ2VsbFNldElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAt
OTIsOSArOTIsOSBAQCB2b2lkIElzb0NlbGxTZXQ6OmZvckVhY2hNYXJrZWRDZWxsKGNvbnN0CiB9
CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+Ci1SZWY8U2hhcmVkVGFzazx2b2lkKFNsb3RWaXNp
dG9yJik+PiBJc29DZWxsU2V0Ojpmb3JFYWNoTWFya2VkQ2VsbEluUGFyYWxsZWwoY29uc3QgRnVu
YyYgZnVuYykKK1JlZjxTaGFyZWRUYXNrPHZvaWQoQWJzdHJhY3RTbG90VmlzaXRvciYpPj4gSXNv
Q2VsbFNldDo6Zm9yRWFjaE1hcmtlZENlbGxJblBhcmFsbGVsKGNvbnN0IEZ1bmMmIGZ1bmMpCiB7
Ci0gICAgY2xhc3MgVGFzayBmaW5hbCA6IHB1YmxpYyBTaGFyZWRUYXNrPHZvaWQoU2xvdFZpc2l0
b3ImKT4geworICAgIGNsYXNzIFRhc2sgZmluYWwgOiBwdWJsaWMgU2hhcmVkVGFzazx2b2lkKEFi
c3RyYWN0U2xvdFZpc2l0b3ImKT4gewogICAgIHB1YmxpYzoKICAgICAgICAgVGFzayhJc29DZWxs
U2V0JiBzZXQsIGNvbnN0IEZ1bmMmIGZ1bmMpCiAgICAgICAgICAgICA6IG1fc2V0KHNldCkKQEAg
LTEwMyw3ICsxMDMsNyBAQCBSZWY8U2hhcmVkVGFzazx2b2lkKFNsb3RWaXNpdG9yJik+PiBJc29D
CiAgICAgICAgIHsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgdm9pZCBydW4oU2xvdFZp
c2l0b3ImIHZpc2l0b3IpIGZpbmFsCisgICAgICAgIHZvaWQgcnVuKEFic3RyYWN0U2xvdFZpc2l0
b3ImIHZpc2l0b3IpIGZpbmFsCiAgICAgICAgIHsKICAgICAgICAgICAgIHdoaWxlIChNYXJrZWRC
bG9jazo6SGFuZGxlKiBoYW5kbGUgPSBtX2Jsb2NrU291cmNlLT5ydW4oKSkgewogICAgICAgICAg
ICAgICAgIHVuc2lnbmVkIGJsb2NrSW5kZXggPSBoYW5kbGUtPmluZGV4KCk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9KSVRTdHViUm91dGluZVNldC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSklUU3R1YlJvdXRpbmVTZXQuY3BwCShyZXZp
c2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9KSVRTdHViUm91dGlu
ZVNldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyOCwxNyArMTI4LDIyIEBAIHZvaWQgSklUU3R1
YlJvdXRpbmVTZXQ6OmRlbGV0ZVVubWFya2VkSmUKICAgICBtX3JvdXRpbmVzLnNocmluayhkc3RJ
bmRleCk7CiB9CiAKLXZvaWQgSklUU3R1YlJvdXRpbmVTZXQ6OnRyYWNlTWFya2VkU3R1YlJvdXRp
bmVzKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy90ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgor
Ly92b2lkIEpJVFN0dWJSb3V0aW5lU2V0Ojp0cmFjZU1hcmtlZFN0dWJSb3V0aW5lcyhWaXNpdG9y
JiB2aXNpdG9yKQordm9pZCBKSVRTdHViUm91dGluZVNldDo6dHJhY2VNYXJrZWRTdHViUm91dGlu
ZXMxKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgZm9yIChhdXRvJiBlbnRy
eSA6IG1fcm91dGluZXMpIHsKICAgICAgICAgR0NBd2FyZUpJVFN0dWJSb3V0aW5lKiByb3V0aW5l
ID0gZW50cnkucm91dGluZTsKICAgICAgICAgaWYgKCFyb3V0aW5lLT5tX21heUJlRXhlY3V0aW5n
KQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIAotICAgICAgICByb3V0aW5lLT5tYXJr
UmVxdWlyZWRPYmplY3RzKHZpc2l0b3IpOworICAgICAgICByb3V0aW5lLT5tYXJrUmVxdWlyZWRP
YmplY3RzMSh2aXNpdG9yKTsKICAgICB9CiB9CiAKKy8vdGVtcGxhdGUgdm9pZCBKSVRTdHViUm91
dGluZVNldDo6dHJhY2VNYXJrZWRTdHViUm91dGluZXMoU2xvdFZpc2l0b3ImKTsKKy8vdGVtcGxh
dGUgdm9pZCBKSVRTdHViUm91dGluZVNldDo6dHJhY2VNYXJrZWRTdHViUm91dGluZXMoRGVidWdT
bG90VmlzaXRvciYpOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIEVOQUJMRShK
SVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9KSVRTdHViUm91dGluZVNldC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0pJVFN0dWJSb3V0aW5l
U2V0LmgJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0pJ
VFN0dWJSb3V0aW5lU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDggKzM1LDkgQEAgdXNpbmcg
V1RGOjpSYW5nZTsKIAogbmFtZXNwYWNlIEpTQyB7CiAKK2NsYXNzIEFic3RyYWN0U2xvdFZpc2l0
b3I7CiBjbGFzcyBHQ0F3YXJlSklUU3R1YlJvdXRpbmU7Ci1jbGFzcyBTbG90VmlzaXRvcjsKKy8v
Y2xhc3MgU2xvdFZpc2l0b3I7CiAKICNpZiBFTkFCTEUoSklUKQogCkBAIC02Myw4ICs2NCw5IEBA
IHB1YmxpYzoKICAgICB2b2lkIHByZXBhcmVGb3JDb25zZXJ2YXRpdmVTY2FuKCk7CiAgICAgCiAg
ICAgdm9pZCBkZWxldGVVbm1hcmtlZEpldHRpc29uZWRTdHViUm91dGluZXMoKTsKLSAgICAKLSAg
ICB2b2lkIHRyYWNlTWFya2VkU3R1YlJvdXRpbmVzKFNsb3RWaXNpdG9yJik7CisKKy8vICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgdHJhY2VNYXJrZWRTdHViUm91dGluZXMoVmlz
aXRvciYpOworICAgIHZvaWQgdHJhY2VNYXJrZWRTdHViUm91dGluZXMxKEFic3RyYWN0U2xvdFZp
c2l0b3ImKTsKICAgICAKIHByaXZhdGU6CiAgICAgdm9pZCBtYXJrU2xvdyh1aW50cHRyX3QgYWRk
cmVzcyk7CkBAIC05Miw3ICs5NCw4IEBAIHB1YmxpYzoKICAgICB2b2lkIG1hcmsodm9pZCopIHsg
fQogICAgIHZvaWQgcHJlcGFyZUZvckNvbnNlcnZhdGl2ZVNjYW4oKSB7IH0KICAgICB2b2lkIGRl
bGV0ZVVubWFya2VkSmV0dGlzb25lZFN0dWJSb3V0aW5lcygpIHsgfQotICAgIHZvaWQgdHJhY2VN
YXJrZWRTdHViUm91dGluZXMoU2xvdFZpc2l0b3ImKSB7IH0KKy8vICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFZpc2l0b3I+IHZvaWQgdHJhY2VNYXJrZWRTdHViUm91dGluZXMoVmlzaXRvciYpIHsgfQor
ICAgIHZvaWQgdHJhY2VNYXJrZWRTdHViUm91dGluZXMxKEFic3RyYWN0U2xvdFZpc2l0b3ImKSB7
IH0KIH07CiAKICNlbmRpZiAvLyAhRU5BQkxFKEpJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL01hcmtTdGFja01lcmdpbmdDb25zdHJhaW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludC5jcHAJ
KHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtTdGFj
a01lcmdpbmdDb25zdHJhaW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUsNyArMjUsNiBAQAog
CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFp
bnQuaCIKLQogI2luY2x1ZGUgIkdDU2VnbWVudGVkQXJyYXlJbmxpbmVzLmgiCiAjaW5jbHVkZSAi
SlNDSW5saW5lcy5oIgogCkBAIC00MSwxMiArNDAsMTIgQEAgTWFya1N0YWNrTWVyZ2luZ0NvbnN0
cmFpbnQ6On5NYXJrU3RhY2tNZQogewogfQogCi1kb3VibGUgTWFya1N0YWNrTWVyZ2luZ0NvbnN0
cmFpbnQ6OnF1aWNrV29ya0VzdGltYXRlKFNsb3RWaXNpdG9yJikKK2RvdWJsZSBNYXJrU3RhY2tN
ZXJnaW5nQ29uc3RyYWludDo6cXVpY2tXb3JrRXN0aW1hdGUoQWJzdHJhY3RTbG90VmlzaXRvciYp
CiB7CiAgICAgcmV0dXJuIG1faGVhcC5tX211dGF0b3JNYXJrU3RhY2stPnNpemUoKSArIG1faGVh
cC5tX3JhY2VNYXJrU3RhY2stPnNpemUoKTsKIH0KIAotdm9pZCBNYXJrU3RhY2tNZXJnaW5nQ29u
c3RyYWludDo6cHJlcGFyZVRvRXhlY3V0ZUltcGwoY29uc3QgQWJzdHJhY3RMb2NrZXImLCBTbG90
VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQ6OnByZXBh
cmVUb0V4ZWN1dGVJbXBsKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgQWJzdHJhY3RTbG90VmlzaXRv
ciYgdmlzaXRvcikKIHsKICAgICAvLyBMb2dnaW5nIHRoZSB3b3JrIGhlcmUgZW5zdXJlcyB0aGF0
IHRoZSBjb25zdHJhaW50IHNvbHZlciBrbm93cyB0aGF0IGl0IGRvZXNuJ3QgbmVlZCB0byBwcm9k
dWNlCiAgICAgLy8gYW55bW9yZSB3b3JrLgpAQCAtNTYsNyArNTUsNyBAQCB2b2lkIE1hcmtTdGFj
a01lcmdpbmdDb25zdHJhaW50OjpwcmVwYXJlCiAgICAgZGF0YUxvZ0lmKE9wdGlvbnM6OmxvZ0dD
KCksICIoIiwgc2l6ZSwgIikiKTsKIH0KIAotdm9pZCBNYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWlu
dDo6ZXhlY3V0ZUltcGwoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIE1hcmtTdGFja01lcmdp
bmdDb25zdHJhaW50OjpleGVjdXRlSW1wbChBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQog
ewogICAgIG1faGVhcC5tX211dGF0b3JNYXJrU3RhY2stPnRyYW5zZmVyVG8odmlzaXRvci5tdXRh
dG9yTWFya1N0YWNrKCkpOwogICAgIG1faGVhcC5tX3JhY2VNYXJrU3RhY2stPnRyYW5zZmVyVG8o
dmlzaXRvci5tdXRhdG9yTWFya1N0YWNrKCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludC5oCShyZXZpc2lv
biAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3RhY2tNZXJnaW5n
Q29uc3RyYWludC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCwxOCArMzAsMTggQEAKIG5hbWVzcGFj
ZSBKU0MgewogCiBjbGFzcyBIZWFwOwotY2xhc3MgU2xvdFZpc2l0b3I7CitjbGFzcyBBYnN0cmFj
dFNsb3RWaXNpdG9yOwogCiBjbGFzcyBNYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludCBmaW5hbCA6
IHB1YmxpYyBNYXJraW5nQ29uc3RyYWludCB7CiBwdWJsaWM6CiAgICAgTWFya1N0YWNrTWVyZ2lu
Z0NvbnN0cmFpbnQoSGVhcCYpOwogICAgIH5NYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludCgpIGZp
bmFsOwogICAgIAotICAgIGRvdWJsZSBxdWlja1dvcmtFc3RpbWF0ZShTbG90VmlzaXRvciYpIGZp
bmFsOworICAgIGRvdWJsZSBxdWlja1dvcmtFc3RpbWF0ZShBYnN0cmFjdFNsb3RWaXNpdG9yJikg
ZmluYWw7CiAgICAgCiBwcml2YXRlOgotICAgIHZvaWQgcHJlcGFyZVRvRXhlY3V0ZUltcGwoY29u
c3QgQWJzdHJhY3RMb2NrZXImIGNvbnN0cmFpbnRTb2x2aW5nTG9ja2VyLCBTbG90VmlzaXRvciYp
IGZpbmFsOwotICAgIHZvaWQgZXhlY3V0ZUltcGwoU2xvdFZpc2l0b3ImKSBmaW5hbDsKKyAgICB2
b2lkIHByZXBhcmVUb0V4ZWN1dGVJbXBsKGNvbnN0IEFic3RyYWN0TG9ja2VyJiBjb25zdHJhaW50
U29sdmluZ0xvY2tlciwgQWJzdHJhY3RTbG90VmlzaXRvciYpIGZpbmFsOworICAgIHZvaWQgZXhl
Y3V0ZUltcGwoQWJzdHJhY3RTbG90VmlzaXRvciYpIGZpbmFsOwogICAgIAogICAgIEhlYXAmIG1f
aGVhcDsKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmgJ
KHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJs
b2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTE1MSw3ICsxNTEsOCBAQCBwdWJsaWM6CiAgICAgICAg
IAogICAgICAgICB2b2lkIHNocmluaygpOwogICAgICAgICAgICAgCi0gICAgICAgIHZvaWQgdmlz
aXRXZWFrU2V0KFNsb3RWaXNpdG9yJik7CisvLyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlz
aXRvcj4gdm9pZCB2aXNpdFdlYWtTZXQoVmlzaXRvciYpOworICAgICAgICB2b2lkIHZpc2l0V2Vh
a1NldDEoQWJzdHJhY3RTbG90VmlzaXRvciYpOwogICAgICAgICB2b2lkIHJlYXBXZWFrU2V0KCk7
CiAgICAgICAgICAgICAKICAgICAgICAgLy8gV2hpbGUgYWxsb2NhdGluZyBmcm9tIGEgZnJlZSBs
aXN0LCBNYXJrZWRCbG9jayB0ZW1wb3JhcmlseSBoYXMgYm9ndXMKQEAgLTQ5OCw5ICs0OTksMTEg
QEAgaW5saW5lIHZvaWQgTWFya2VkQmxvY2s6OkhhbmRsZTo6c2hyaW5rKAogICAgIG1fd2Vha1Nl
dC5zaHJpbmsoKTsKIH0KIAotaW5saW5lIHZvaWQgTWFya2VkQmxvY2s6OkhhbmRsZTo6dmlzaXRX
ZWFrU2V0KFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy90ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
PgorLy9pbmxpbmUgdm9pZCBNYXJrZWRCbG9jazo6SGFuZGxlOjp2aXNpdFdlYWtTZXQoVmlzaXRv
ciYgdmlzaXRvcikKK2lubGluZSB2b2lkIE1hcmtlZEJsb2NrOjpIYW5kbGU6OnZpc2l0V2Vha1Nl
dDEoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKLSAgICByZXR1cm4gbV93ZWFrU2V0
LnZpc2l0KHZpc2l0b3IpOworICAgIHJldHVybiBtX3dlYWtTZXQudmlzaXQxKHZpc2l0b3IpOwog
fQogCiBpbmxpbmUgdm9pZCBNYXJrZWRCbG9jazo6SGFuZGxlOjpyZWFwV2Vha1NldCgpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRTcGFjZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkU3BhY2UuY3BwCShyZXZpc2lvbiAy
NzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRTcGFjZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI3MiwxMCArMjcyLDEwIEBAIHZvaWQgTWFya2VkU3BhY2U6OmVuYWJs
ZVByZWNpc2VBbGxvY2F0aW8KICAgICAgICAgbV9wcmVjaXNlQWxsb2NhdGlvblNldC0+YWRkKGFs
bG9jYXRpb24tPmNlbGwoKSk7CiB9CiAKLXZvaWQgTWFya2VkU3BhY2U6OnZpc2l0V2Vha1NldHMo
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIE1hcmtlZFNwYWNlOjp2aXNpdFdlYWtTZXRzMShB
YnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGF1dG8gdmlzaXQgPSBbJl0gKFdl
YWtTZXQqIHdlYWtTZXQpIHsKLSAgICAgICAgd2Vha1NldC0+dmlzaXQodmlzaXRvcik7CisgICAg
ICAgIHdlYWtTZXQtPnZpc2l0MSh2aXNpdG9yKTsKICAgICB9OwogICAgIAogICAgIG1fbmV3QWN0
aXZlV2Vha1NldHMuZm9yRWFjaCh2aXNpdCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9NYXJrZWRTcGFjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL01hcmtlZFNwYWNlLmgJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL01hcmtlZFNwYWNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDYgKzM3LDcgQEAK
IAogbmFtZXNwYWNlIEpTQyB7CiAKK2NsYXNzIEFic3RyYWN0U2xvdFZpc2l0b3I7IC8vIG1sYW0g
RklYTUUgPwogY2xhc3MgQ29tcGxldGVTdWJzcGFjZTsKIGNsYXNzIEhlYXA7CiBjbGFzcyBIZWFw
Q2VsbDsKQEAgLTEwNSw3ICsxMDYsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgdm9pZCBwcmVwYXJl
Rm9yQWxsb2NhdGlvbigpOwogCi0gICAgdm9pZCB2aXNpdFdlYWtTZXRzKFNsb3RWaXNpdG9yJik7
CisgICAgdm9pZCB2aXNpdFdlYWtTZXRzMShBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAgICAgdm9p
ZCByZWFwV2Vha1NldHMoKTsKIAogICAgIE1hcmtlZEJsb2NrU2V0JiBibG9ja3MoKSB7IHJldHVy
biBtX2Jsb2NrczsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0Nv
bnN0cmFpbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01h
cmtpbmdDb25zdHJhaW50LmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2
ICsyNiw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiTWFya2luZ0NvbnN0cmFp
bnQuaCIKIAorI2luY2x1ZGUgIkFic3RyYWN0U2xvdFZpc2l0b3JJbmxpbmVzLmgiCiAjaW5jbHVk
ZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIlZpc2l0Q291bnRlci5oIgogCkBAIC01MSw3ICs1
Miw3IEBAIHZvaWQgTWFya2luZ0NvbnN0cmFpbnQ6OnJlc2V0U3RhdHMoKQogICAgIG1fbGFzdFZp
c2l0Q291bnQgPSAwOwogfQogCi12b2lkIE1hcmtpbmdDb25zdHJhaW50OjpleGVjdXRlKFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQordm9pZCBNYXJraW5nQ29uc3RyYWludDo6ZXhlY3V0ZShBYnN0cmFj
dFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFZpc2l0Q291bnRlciB2aXNpdENvdW50ZXIo
dmlzaXRvcik7CiAgICAgZXhlY3V0ZUltcGwodmlzaXRvcik7CkBAIC02MCwxNyArNjEsMTcgQEAg
dm9pZCBNYXJraW5nQ29uc3RyYWludDo6ZXhlY3V0ZShTbG90VmlzaQogICAgICAgICBkYXRhTG9n
KCIoIiwgYWJicmV2aWF0ZWROYW1lKCksICIgdmlzaXRlZCAiLCB2aXNpdENvdW50ZXIudmlzaXRD
b3VudCgpLCAiIGluIGV4ZWN1dGUpIik7CiB9CiAKLWRvdWJsZSBNYXJraW5nQ29uc3RyYWludDo6
cXVpY2tXb3JrRXN0aW1hdGUoU2xvdFZpc2l0b3ImKQorZG91YmxlIE1hcmtpbmdDb25zdHJhaW50
OjpxdWlja1dvcmtFc3RpbWF0ZShBYnN0cmFjdFNsb3RWaXNpdG9yJikKIHsKICAgICByZXR1cm4g
MDsKIH0KIAotZG91YmxlIE1hcmtpbmdDb25zdHJhaW50Ojp3b3JrRXN0aW1hdGUoU2xvdFZpc2l0
b3ImIHZpc2l0b3IpCitkb3VibGUgTWFya2luZ0NvbnN0cmFpbnQ6OndvcmtFc3RpbWF0ZShBYnN0
cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHJldHVybiBsYXN0VmlzaXRDb3VudCgp
ICsgcXVpY2tXb3JrRXN0aW1hdGUodmlzaXRvcik7CiB9CiAKLXZvaWQgTWFya2luZ0NvbnN0cmFp
bnQ6OnByZXBhcmVUb0V4ZWN1dGUoY29uc3QgQWJzdHJhY3RMb2NrZXImIGNvbnN0cmFpbnRTb2x2
aW5nTG9ja2VyLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgTWFya2luZ0NvbnN0cmFpbnQ6
OnByZXBhcmVUb0V4ZWN1dGUoY29uc3QgQWJzdHJhY3RMb2NrZXImIGNvbnN0cmFpbnRTb2x2aW5n
TG9ja2VyLCBBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGRhdGFMb2dJZihP
cHRpb25zOjpsb2dHQygpLCBhYmJyZXZpYXRlZE5hbWUoKSk7CiAgICAgVmlzaXRDb3VudGVyIHZp
c2l0Q291bnRlcih2aXNpdG9yKTsKQEAgLTgwLDcgKzgxLDcgQEAgdm9pZCBNYXJraW5nQ29uc3Ry
YWludDo6cHJlcGFyZVRvRXhlY3V0ZQogICAgICAgICBkYXRhTG9nKCIoIiwgYWJicmV2aWF0ZWRO
YW1lKCksICIgdmlzaXRlZCAiLCB2aXNpdENvdW50ZXIudmlzaXRDb3VudCgpLCAiIGluIHByZXBh
cmVUb0V4ZWN1dGUpIik7CiB9CiAKLXZvaWQgTWFya2luZ0NvbnN0cmFpbnQ6OmRvUGFyYWxsZWxX
b3JrKFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBTaGFyZWRUYXNrPHZvaWQoU2xvdFZpc2l0b3ImKT4m
IHRhc2spCit2b2lkIE1hcmtpbmdDb25zdHJhaW50Ojpkb1BhcmFsbGVsV29yayhBYnN0cmFjdFNs
b3RWaXNpdG9yJiB2aXNpdG9yLCBTaGFyZWRUYXNrPHZvaWQoQWJzdHJhY3RTbG90VmlzaXRvciYp
PiYgdGFzaykKIHsKICAgICBWaXNpdENvdW50ZXIgdmlzaXRDb3VudGVyKHZpc2l0b3IpOwogICAg
IHRhc2sucnVuKHZpc2l0b3IpOwpAQCAtOTIsNyArOTMsNyBAQCB2b2lkIE1hcmtpbmdDb25zdHJh
aW50Ojpkb1BhcmFsbGVsV29yayhTCiAgICAgfQogfQogCi12b2lkIE1hcmtpbmdDb25zdHJhaW50
OjpwcmVwYXJlVG9FeGVjdXRlSW1wbChjb25zdCBBYnN0cmFjdExvY2tlciYsIFNsb3RWaXNpdG9y
JikKK3ZvaWQgTWFya2luZ0NvbnN0cmFpbnQ6OnByZXBhcmVUb0V4ZWN1dGVJbXBsKGNvbnN0IEFi
c3RyYWN0TG9ja2VyJiwgQWJzdHJhY3RTbG90VmlzaXRvciYpCiB7CiB9CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnQuaAkocmV2aXNpb24g
MjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnQu
aAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyArMzgsNyBAQAogbmFtZXNwYWNlIEpTQyB7CiAKIGNs
YXNzIE1hcmtpbmdDb25zdHJhaW50U2V0OwotY2xhc3MgU2xvdFZpc2l0b3I7CitjbGFzcyBBYnN0
cmFjdFNsb3RWaXNpdG9yOwogCiBjbGFzcyBNYXJraW5nQ29uc3RyYWludCB7CiAgICAgV1RGX01B
S0VfTk9OQ09QWUFCTEUoTWFya2luZ0NvbnN0cmFpbnQpOwpAQCAtNjAsMTUgKzYwLDE2IEBAIHB1
YmxpYzoKICAgICAKICAgICBzaXplX3QgbGFzdFZpc2l0Q291bnQoKSBjb25zdCB7IHJldHVybiBt
X2xhc3RWaXNpdENvdW50OyB9CiAgICAgCi0gICAgdm9pZCBleGVjdXRlKFNsb3RWaXNpdG9yJik7
Ci0gICAgCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgdmlydHVhbCBkb3VibGUgcXVpY2tXb3JrRXN0
aW1hdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpOworICAgIHZvaWQgZXhlY3V0ZShBYnN0cmFjdFNs
b3RWaXNpdG9yJik7CisKKyAgICAvLyBGSVhNRSBtbGFtCisgICAgSlNfRVhQT1JUX1BSSVZBVEUg
dmlydHVhbCBkb3VibGUgcXVpY2tXb3JrRXN0aW1hdGUoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlz
aXRvcik7CiAgICAgCi0gICAgZG91YmxlIHdvcmtFc3RpbWF0ZShTbG90VmlzaXRvciYgdmlzaXRv
cik7CisgICAgZG91YmxlIHdvcmtFc3RpbWF0ZShBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9y
KTsKICAgICAKLSAgICB2b2lkIHByZXBhcmVUb0V4ZWN1dGUoY29uc3QgQWJzdHJhY3RMb2NrZXIm
IGNvbnN0cmFpbnRTb2x2aW5nTG9ja2VyLCBTbG90VmlzaXRvciYpOworICAgIHZvaWQgcHJlcGFy
ZVRvRXhlY3V0ZShjb25zdCBBYnN0cmFjdExvY2tlciYgY29uc3RyYWludFNvbHZpbmdMb2NrZXIs
IEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKICAgICAKLSAgICB2b2lkIGRvUGFyYWxsZWxXb3JrKFNs
b3RWaXNpdG9yJiwgU2hhcmVkVGFzazx2b2lkKFNsb3RWaXNpdG9yJik+Jik7CisgICAgdm9pZCBk
b1BhcmFsbGVsV29yayhBYnN0cmFjdFNsb3RWaXNpdG9yJiwgU2hhcmVkVGFzazx2b2lkKEFic3Ry
YWN0U2xvdFZpc2l0b3ImKT4mKTsKICAgICAKICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eSB2b2xh
dGlsaXR5KCkgY29uc3QgeyByZXR1cm4gbV92b2xhdGlsaXR5OyB9CiAgICAgCkBAIC03Niw4ICs3
Nyw4IEBAIHB1YmxpYzoKICAgICBDb25zdHJhaW50UGFyYWxsZWxpc20gcGFyYWxsZWxpc20oKSBj
b25zdCB7IHJldHVybiBtX3BhcmFsbGVsaXNtOyB9CiAKIHByb3RlY3RlZDoKLSAgICB2aXJ0dWFs
IHZvaWQgZXhlY3V0ZUltcGwoU2xvdFZpc2l0b3ImKSA9IDA7Ci0gICAgSlNfRVhQT1JUX1BSSVZB
VEUgdmlydHVhbCB2b2lkIHByZXBhcmVUb0V4ZWN1dGVJbXBsKGNvbnN0IEFic3RyYWN0TG9ja2Vy
JiBjb25zdHJhaW50U29sdmluZ0xvY2tlciwgU2xvdFZpc2l0b3ImKTsKKyAgICB2aXJ0dWFsIHZv
aWQgZXhlY3V0ZUltcGwoQWJzdHJhY3RTbG90VmlzaXRvciYpID0gMDsKKyAgICBKU19FWFBPUlRf
UFJJVkFURSB2aXJ0dWFsIHZvaWQgcHJlcGFyZVRvRXhlY3V0ZUltcGwoY29uc3QgQWJzdHJhY3RM
b2NrZXImIGNvbnN0cmFpbnRTb2x2aW5nTG9ja2VyLCBBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAg
ICAgCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBNYXJraW5nQ29uc3RyYWludFNldDsgLy8g
U28gaXQgY2FuIHNldCBtX2luZGV4LgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
TWFya2luZ0NvbnN0cmFpbnRTZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50U2V0LmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnRTZXQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC02Myw3ICs2Myw3IEBAIHZvaWQgTWFya2luZ0NvbnN0cmFpbnRTZXQ6OmRp
ZFN0YXJ0TWFya2kKICAgICBtX2l0ZXJhdGlvbiA9IDE7CiB9CiAKLXZvaWQgTWFya2luZ0NvbnN0
cmFpbnRTZXQ6OmFkZChDU3RyaW5nIGFiYnJldmlhdGVkTmFtZSwgQ1N0cmluZyBuYW1lLCA6OkZ1
bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3ImKT4gZnVuY3Rpb24sIENvbnN0cmFpbnRWb2xhdGlsaXR5
IHZvbGF0aWxpdHksIENvbnN0cmFpbnRDb25jdXJyZW5jeSBjb25jdXJyZW5jeSwgQ29uc3RyYWlu
dFBhcmFsbGVsaXNtIHBhcmFsbGVsaXNtKQordm9pZCBNYXJraW5nQ29uc3RyYWludFNldDo6YWRk
KENTdHJpbmcgYWJicmV2aWF0ZWROYW1lLCBDU3RyaW5nIG5hbWUsIDo6RnVuY3Rpb248dm9pZChB
YnN0cmFjdFNsb3RWaXNpdG9yJik+IGZ1bmN0aW9uLCBDb25zdHJhaW50Vm9sYXRpbGl0eSB2b2xh
dGlsaXR5LCBDb25zdHJhaW50Q29uY3VycmVuY3kgY29uY3VycmVuY3ksIENvbnN0cmFpbnRQYXJh
bGxlbGlzbSBwYXJhbGxlbGlzbSkKIHsKICAgICBhZGQobWFrZVVuaXF1ZTxTaW1wbGVNYXJraW5n
Q29uc3RyYWludD4oV1RGTW92ZShhYmJyZXZpYXRlZE5hbWUpLCBXVEZNb3ZlKG5hbWUpLCBXVEZN
b3ZlKGZ1bmN0aW9uKSwgdm9sYXRpbGl0eSwgY29uY3VycmVuY3ksIHBhcmFsbGVsaXNtKSk7CiB9
CkBAIC03OCwxNCArNzgsMTQgQEAgdm9pZCBNYXJraW5nQ29uc3RyYWludFNldDo6YWRkKAogICAg
IG1fc2V0LmFwcGVuZChXVEZNb3ZlKGNvbnN0cmFpbnQpKTsKIH0KIAotYm9vbCBNYXJraW5nQ29u
c3RyYWludFNldDo6ZXhlY3V0ZUNvbnZlcmdlbmNlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorYm9v
bCBNYXJraW5nQ29uc3RyYWludFNldDo6ZXhlY3V0ZUNvbnZlcmdlbmNlKEFic3RyYWN0U2xvdFZp
c2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgYm9vbCByZXN1bHQgPSBleGVjdXRlQ29udmVyZ2VuY2VJ
bXBsKHZpc2l0b3IpOwogICAgIGRhdGFMb2dJZihPcHRpb25zOjpsb2dHQygpLCAiICIpOwogICAg
IHJldHVybiByZXN1bHQ7CiB9CiAKLWJvb2wgTWFya2luZ0NvbnN0cmFpbnRTZXQ6OmlzV2F2ZWZy
b250QWR2YW5jaW5nKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorYm9vbCBNYXJraW5nQ29uc3RyYWlu
dFNldDo6aXNXYXZlZnJvbnRBZHZhbmNpbmcoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikK
IHsKICAgICBmb3IgKE1hcmtpbmdDb25zdHJhaW50KiBvdXRncm93dGggOiBtX291dGdyb3d0aHMp
IHsKICAgICAgICAgaWYgKG91dGdyb3d0aC0+d29ya0VzdGltYXRlKHZpc2l0b3IpKQpAQCAtOTQs
NyArOTQsNyBAQCBib29sIE1hcmtpbmdDb25zdHJhaW50U2V0Ojppc1dhdmVmcm9udEFkCiAgICAg
cmV0dXJuIGZhbHNlOwogfQogCi1ib29sIE1hcmtpbmdDb25zdHJhaW50U2V0OjpleGVjdXRlQ29u
dmVyZ2VuY2VJbXBsKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorYm9vbCBNYXJraW5nQ29uc3RyYWlu
dFNldDo6ZXhlY3V0ZUNvbnZlcmdlbmNlSW1wbChBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9y
KQogewogICAgIFN1cGVyU2FtcGxlclNjb3BlIHN1cGVyU2FtcGxlclNjb3BlKGZhbHNlKTsKICAg
ICBNYXJraW5nQ29uc3RyYWludFNvbHZlciBzb2x2ZXIoKnRoaXMpOwpAQCAtMTY2LDcgKzE2Niw3
IEBAIGJvb2wgTWFya2luZ0NvbnN0cmFpbnRTZXQ6OmV4ZWN1dGVDb252ZXIKICAgICByZXR1cm4g
IXNvbHZlci5kaWRWaXNpdFNvbWV0aGluZygpOwogfQogCi12b2lkIE1hcmtpbmdDb25zdHJhaW50
U2V0OjpleGVjdXRlQWxsKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBNYXJraW5nQ29uc3Ry
YWludFNldDo6ZXhlY3V0ZUFsbChBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAg
IGZvciAoYXV0byYgY29uc3RyYWludCA6IG1fc2V0KQogICAgICAgICBjb25zdHJhaW50LT5leGVj
dXRlKHZpc2l0b3IpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0Nv
bnN0cmFpbnRTZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9N
YXJraW5nQ29uc3RyYWludFNldC5oCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludFNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC00
NiwxNCArNDYsMTQgQEAgcHVibGljOgogICAgIHZvaWQgYWRkKAogICAgICAgICBDU3RyaW5nIGFi
YnJldmlhdGVkTmFtZSwKICAgICAgICAgQ1N0cmluZyBuYW1lLAotICAgICAgICA6OkZ1bmN0aW9u
PHZvaWQoU2xvdFZpc2l0b3ImKT4sCisgICAgICAgIDo6RnVuY3Rpb248dm9pZChBYnN0cmFjdFNs
b3RWaXNpdG9yJik+LAogICAgICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eSwKICAgICAgICAgQ29u
c3RyYWludENvbmN1cnJlbmN5ID0gQ29uc3RyYWludENvbmN1cnJlbmN5OjpDb25jdXJyZW50LAog
ICAgICAgICBDb25zdHJhaW50UGFyYWxsZWxpc20gPSBDb25zdHJhaW50UGFyYWxsZWxpc206OlNl
cXVlbnRpYWwpOwogICAgIAogICAgIHZvaWQgYWRkKAogICAgICAgICBDU3RyaW5nIGFiYnJldmlh
dGVkTmFtZSwgQ1N0cmluZyBuYW1lLAotICAgICAgICA6OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0
b3ImKT4gZnVuYywKKyAgICAgICAgOjpGdW5jdGlvbjx2b2lkKEFic3RyYWN0U2xvdFZpc2l0b3Im
KT4gZnVuYywKICAgICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHkgdm9sYXRpbGl0eSwKICAgICAg
ICAgQ29uc3RyYWludFBhcmFsbGVsaXNtIHBhcmFsbGVsaXNtKQogICAgIHsKQEAgLTY0LDIwICs2
NCwyMCBAQCBwdWJsaWM6CiAgICAgCiAgICAgLy8gQXNzdW1pbmcgdGhhdCB0aGUgbWFyayBzdGFj
a3MgYXJlIGFsbCBlbXB0eSwgdGhpcyB3aWxsIGdpdmUgeW91IGEgZ3Vlc3MgYXMgdG8gd2hldGhl
ciBvcgogICAgIC8vIG5vdCB0aGUgd2F2ZWZyb250IGlzIGFkdmFuY2luZy4KLSAgICBib29sIGlz
V2F2ZWZyb250QWR2YW5jaW5nKFNsb3RWaXNpdG9yJik7Ci0gICAgYm9vbCBpc1dhdmVmcm9udFJl
dHJlYXRpbmcoU2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsgcmV0dXJuICFpc1dhdmVmcm9udEFkdmFu
Y2luZyh2aXNpdG9yKTsgfQorICAgIGJvb2wgaXNXYXZlZnJvbnRBZHZhbmNpbmcoQWJzdHJhY3RT
bG90VmlzaXRvciYpOworICAgIGJvb2wgaXNXYXZlZnJvbnRSZXRyZWF0aW5nKEFic3RyYWN0U2xv
dFZpc2l0b3ImIHZpc2l0b3IpIHsgcmV0dXJuICFpc1dhdmVmcm9udEFkdmFuY2luZyh2aXNpdG9y
KTsgfQogICAgIAogICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGlzIGV4ZWN1dGVkIGFsbCBjb25z
dHJhaW50cyBhbmQgbm9uZSBvZiB0aGVtIHByb2R1Y2VkIG5ldyB3b3JrLiBUaGlzCiAgICAgLy8g
YXNzdW1lcyB0aGF0IHlvdSd2ZSBhbHJhZWR5IHZpc2l0ZWQgcm9vdHMgYW5kIGRyYWluZWQgZnJv
bSB0aGVyZS4KLSAgICBib29sIGV4ZWN1dGVDb252ZXJnZW5jZShTbG90VmlzaXRvciYpOworICAg
IGJvb2wgZXhlY3V0ZUNvbnZlcmdlbmNlKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKICAgICAKICAg
ICAvLyBTaW1wbHkgcnVucyBhbGwgY29uc3RyYWludHMgd2l0aG91dCBhbnkgc2hlbmFuaWdhbnMu
Ci0gICAgdm9pZCBleGVjdXRlQWxsKFNsb3RWaXNpdG9yJik7CisgICAgdm9pZCBleGVjdXRlQWxs
KEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKICAgICAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNz
IE1hcmtpbmdDb25zdHJhaW50U29sdmVyOwogICAgIAotICAgIGJvb2wgZXhlY3V0ZUNvbnZlcmdl
bmNlSW1wbChTbG90VmlzaXRvciYpOworICAgIGJvb2wgZXhlY3V0ZUNvbnZlcmdlbmNlSW1wbChB
YnN0cmFjdFNsb3RWaXNpdG9yJik7CiAgICAgCiAgICAgSGVhcCYgbV9oZWFwOwogICAgIEJpdFZl
Y3RvciBtX3VuZXhlY3V0ZWRSb290czsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L01hcmtpbmdDb25zdHJhaW50U29sdmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludFNvbHZlci5jcHAJKHJldmlzaW9uIDI3MTQ0
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50U29sdmVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNyArMzMsNyBAQCBuYW1lc3BhY2UgSlNDIHsgCiAK
IE1hcmtpbmdDb25zdHJhaW50U29sdmVyOjpNYXJraW5nQ29uc3RyYWludFNvbHZlcihNYXJraW5n
Q29uc3RyYWludFNldCYgc2V0KQogICAgIDogbV9oZWFwKHNldC5tX2hlYXApCi0gICAgLCBtX21h
aW5WaXNpdG9yKG1faGVhcC5jb2xsZWN0b3JTbG90VmlzaXRvcigpKQorICAgICwgbV9tYWluVmlz
aXRvcihtX2hlYXAuY29sbGVjdG9yU2xvdFZpc2l0b3IoKSkgLy8gbWxhbSBGSVhNRSBuZWVkIHN1
cHBvcnQgZm9yIERlYnVnU2xvdFZpc2l0b3IKICAgICAsIG1fc2V0KHNldCkKIHsKICAgICBtX2hl
YXAuZm9yRWFjaFNsb3RWaXNpdG9yKApAQCAtMTUwLDEzICsxNTAsMTMgQEAgdm9pZCBNYXJraW5n
Q29uc3RyYWludFNvbHZlcjo6ZXhlY3V0ZShNYQogICAgIG1fZXhlY3V0ZWQuc2V0KGNvbnN0cmFp
bnQuaW5kZXgoKSk7CiB9CiAKLXZvaWQgTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXI6OmFkZFBhcmFs
bGVsVGFzayhSZWZQdHI8U2hhcmVkVGFzazx2b2lkKFNsb3RWaXNpdG9yJik+PiB0YXNrLCBNYXJr
aW5nQ29uc3RyYWludCYgY29uc3RyYWludCkKK3ZvaWQgTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXI6
OmFkZFBhcmFsbGVsVGFzayhSZWZQdHI8U2hhcmVkVGFzazx2b2lkKEFic3RyYWN0U2xvdFZpc2l0
b3ImKT4+IHRhc2ssIE1hcmtpbmdDb25zdHJhaW50JiBjb25zdHJhaW50KQogewogICAgIGF1dG8g
bG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKICAgICBtX3RvRXhlY3V0ZUluUGFyYWxsZWwuYXBw
ZW5kKFRhc2tXaXRoQ29uc3RyYWludChXVEZNb3ZlKHRhc2spLCAmY29uc3RyYWludCkpOwogfQog
Ci12b2lkIE1hcmtpbmdDb25zdHJhaW50U29sdmVyOjpydW5FeGVjdXRpb25UaHJlYWQoU2xvdFZp
c2l0b3ImIHZpc2l0b3IsIFNjaGVkdWxlclByZWZlcmVuY2UgcHJlZmVyZW5jZSwgU2NvcGVkTGFt
YmRhPE9wdGlvbmFsPHVuc2lnbmVkPigpPiBwaWNrTmV4dCkKK3ZvaWQgTWFya2luZ0NvbnN0cmFp
bnRTb2x2ZXI6OnJ1bkV4ZWN1dGlvblRocmVhZChBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9y
LCBTY2hlZHVsZXJQcmVmZXJlbmNlIHByZWZlcmVuY2UsIFNjb3BlZExhbWJkYTxPcHRpb25hbDx1
bnNpZ25lZD4oKT4gcGlja05leHQpCiB7CiAgICAgZm9yICg7OykgewogICAgICAgICBib29sIGRv
UGFyYWxsZWxXb3JrTW9kZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtp
bmdDb25zdHJhaW50U29sdmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXIuaAkocmV2aXNpb24gMjcxNDQzKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXIuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNjUsMTUgKzY1LDE1IEBAIHB1YmxpYzoKICAgICB2b2lkIGV4ZWN1dGUoTWFy
a2luZ0NvbnN0cmFpbnQmKTsKICAgICAKICAgICAvLyBQYXJhbGxlbCBjb25zdHJhaW50cyBjYW4g
YWRkIHBhcmFsbGVsIHRhc2tzLgotICAgIHZvaWQgYWRkUGFyYWxsZWxUYXNrKFJlZlB0cjxTaGFy
ZWRUYXNrPHZvaWQoU2xvdFZpc2l0b3ImKT4+LCBNYXJraW5nQ29uc3RyYWludCYpOworICAgIHZv
aWQgYWRkUGFyYWxsZWxUYXNrKFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoQWJzdHJhY3RTbG90Vmlz
aXRvciYpPj4sIE1hcmtpbmdDb25zdHJhaW50Jik7CiAgICAgCiBwcml2YXRlOgotICAgIHZvaWQg
cnVuRXhlY3V0aW9uVGhyZWFkKFNsb3RWaXNpdG9yJiwgU2NoZWR1bGVyUHJlZmVyZW5jZSwgU2Nv
cGVkTGFtYmRhPE9wdGlvbmFsPHVuc2lnbmVkPigpPiBwaWNrTmV4dCk7CisgICAgdm9pZCBydW5F
eGVjdXRpb25UaHJlYWQoQWJzdHJhY3RTbG90VmlzaXRvciYsIFNjaGVkdWxlclByZWZlcmVuY2Us
IFNjb3BlZExhbWJkYTxPcHRpb25hbDx1bnNpZ25lZD4oKT4gcGlja05leHQpOwogICAgIAogICAg
IHN0cnVjdCBUYXNrV2l0aENvbnN0cmFpbnQgewogICAgICAgICBUYXNrV2l0aENvbnN0cmFpbnQo
KSB7IH0KICAgICAgICAgCi0gICAgICAgIFRhc2tXaXRoQ29uc3RyYWludChSZWZQdHI8U2hhcmVk
VGFzazx2b2lkKFNsb3RWaXNpdG9yJik+PiB0YXNrLCBNYXJraW5nQ29uc3RyYWludCogY29uc3Ry
YWludCkKKyAgICAgICAgVGFza1dpdGhDb25zdHJhaW50KFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQo
QWJzdHJhY3RTbG90VmlzaXRvciYpPj4gdGFzaywgTWFya2luZ0NvbnN0cmFpbnQqIGNvbnN0cmFp
bnQpCiAgICAgICAgICAgICA6IHRhc2soV1RGTW92ZSh0YXNrKSkKICAgICAgICAgICAgICwgY29u
c3RyYWludChjb25zdHJhaW50KQogICAgICAgICB7CkBAIC04NSwxMiArODUsMTIgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgICAgICAmJiBjb25zdHJhaW50ID09IG90aGVyLmNvbnN0cmFpbnQ7CiAg
ICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoU2xvdFZp
c2l0b3ImKT4+IHRhc2s7CisgICAgICAgIFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoQWJzdHJhY3RT
bG90VmlzaXRvciYpPj4gdGFzazsKICAgICAgICAgTWFya2luZ0NvbnN0cmFpbnQqIGNvbnN0cmFp
bnQgeyBudWxscHRyIH07CiAgICAgfTsKICAgICAKICAgICBIZWFwJiBtX2hlYXA7Ci0gICAgU2xv
dFZpc2l0b3ImIG1fbWFpblZpc2l0b3I7CisgICAgQWJzdHJhY3RTbG90VmlzaXRvciYgbV9tYWlu
VmlzaXRvcjsKICAgICBNYXJraW5nQ29uc3RyYWludFNldCYgbV9zZXQ7CiAgICAgQml0VmVjdG9y
IG1fZXhlY3V0ZWQ7CiAgICAgRGVxdWU8VGFza1dpdGhDb25zdHJhaW50LCAzMj4gbV90b0V4ZWN1
dGVJblBhcmFsbGVsOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvUHJlY2lzZUFs
bG9jYXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1By
ZWNpc2VBbGxvY2F0aW9uLmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvUHJlY2lzZUFsbG9jYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDAs
MTEgKzIwMCwxNiBAQCB2b2lkIFByZWNpc2VBbGxvY2F0aW9uOjpzaHJpbmsoKQogICAgIG1fd2Vh
a1NldC5zaHJpbmsoKTsKIH0KIAotdm9pZCBQcmVjaXNlQWxsb2NhdGlvbjo6dmlzaXRXZWFrU2V0
KFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy90ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgorLy92
b2lkIFByZWNpc2VBbGxvY2F0aW9uOjp2aXNpdFdlYWtTZXQoVmlzaXRvciYgdmlzaXRvcikKK3Zv
aWQgUHJlY2lzZUFsbG9jYXRpb246OnZpc2l0V2Vha1NldDEwMDAoQWJzdHJhY3RTbG90VmlzaXRv
ciYgdmlzaXRvcikKIHsKLSAgICBtX3dlYWtTZXQudmlzaXQodmlzaXRvcik7CisgICAgbV93ZWFr
U2V0LnZpc2l0MSh2aXNpdG9yKTsKIH0KIAorLy90ZW1wbGF0ZSB2b2lkIFByZWNpc2VBbGxvY2F0
aW9uOjp2aXNpdFdlYWtTZXQoU2xvdFZpc2l0b3ImKTsKKy8vdGVtcGxhdGUgdm9pZCBQcmVjaXNl
QWxsb2NhdGlvbjo6dmlzaXRXZWFrU2V0KERlYnVnU2xvdFZpc2l0b3ImKTsKKwogdm9pZCBQcmVj
aXNlQWxsb2NhdGlvbjo6cmVhcFdlYWtTZXQoKQogewogICAgIHJldHVybiBtX3dlYWtTZXQucmVh
cCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvUHJlY2lzZUFsbG9jYXRpb24u
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9QcmVjaXNlQWxsb2Nh
dGlvbi5oCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Q
cmVjaXNlQWxsb2NhdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC04Miw3ICs4Miw4IEBAIHB1Ymxp
YzoKICAgICAKICAgICB2b2lkIHNocmluaygpOwogICAgIAotICAgIHZvaWQgdmlzaXRXZWFrU2V0
KFNsb3RWaXNpdG9yJik7CisvLyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIHZp
c2l0V2Vha1NldChWaXNpdG9yJik7CisgICAgdm9pZCB2aXNpdFdlYWtTZXQxMDAwKEFic3RyYWN0
U2xvdFZpc2l0b3ImKTsKICAgICB2b2lkIHJlYXBXZWFrU2V0KCk7CiAgICAgCiAgICAgdm9pZCBj
bGVhck5ld2x5QWxsb2NhdGVkKCkgeyBtX2lzTmV3bHlBbGxvY2F0ZWQgPSBmYWxzZTsgfQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1NpbXBsZU1hcmtpbmdD
b25zdHJhaW50LmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3
ICszMCw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiBTaW1wbGVNYXJraW5nQ29uc3RyYWludDo6U2lt
cGxlTWFya2luZ0NvbnN0cmFpbnQoCiAgICAgQ1N0cmluZyBhYmJyZXZpYXRlZE5hbWUsIENTdHJp
bmcgbmFtZSwKLSAgICA6OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3ImKT4gZXhlY3V0ZUZ1bmN0
aW9uLAorICAgIDo6RnVuY3Rpb248dm9pZChBYnN0cmFjdFNsb3RWaXNpdG9yJik+IGV4ZWN1dGVG
dW5jdGlvbiwKICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eSB2b2xhdGlsaXR5LCBDb25zdHJhaW50
Q29uY3VycmVuY3kgY29uY3VycmVuY3ksCiAgICAgQ29uc3RyYWludFBhcmFsbGVsaXNtIHBhcmFs
bGVsaXNtKQogICAgIDogTWFya2luZ0NvbnN0cmFpbnQoV1RGTW92ZShhYmJyZXZpYXRlZE5hbWUp
LCBXVEZNb3ZlKG5hbWUpLCB2b2xhdGlsaXR5LCBjb25jdXJyZW5jeSwgcGFyYWxsZWxpc20pCkBA
IC00Miw3ICs0Miw3IEBAIFNpbXBsZU1hcmtpbmdDb25zdHJhaW50Ojp+U2ltcGxlTWFya2luZ0MK
IHsKIH0KIAotdm9pZCBTaW1wbGVNYXJraW5nQ29uc3RyYWludDo6ZXhlY3V0ZUltcGwoU2xvdFZp
c2l0b3ImIHZpc2l0b3IpCit2b2lkIFNpbXBsZU1hcmtpbmdDb25zdHJhaW50OjpleGVjdXRlSW1w
bChBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIG1fZXhlY3V0ZUZ1bmN0aW9u
KHZpc2l0b3IpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2ltcGxlTWFy
a2luZ0NvbnN0cmFpbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9TaW1wbGVNYXJraW5nQ29uc3RyYWludC5oCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9TaW1wbGVNYXJraW5nQ29uc3RyYWludC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zNywxNCArMzcsMTQgQEAgY2xhc3MgU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQgZmlu
YWwgOiBwdQogcHVibGljOgogICAgIEpTX0VYUE9SVF9QUklWQVRFIFNpbXBsZU1hcmtpbmdDb25z
dHJhaW50KAogICAgICAgICBDU3RyaW5nIGFiYnJldmlhdGVkTmFtZSwgQ1N0cmluZyBuYW1lLAot
ICAgICAgICA6OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3ImKT4sCisgICAgICAgIDo6RnVuY3Rp
b248dm9pZChBYnN0cmFjdFNsb3RWaXNpdG9yJik+LAogICAgICAgICBDb25zdHJhaW50Vm9sYXRp
bGl0eSwKICAgICAgICAgQ29uc3RyYWludENvbmN1cnJlbmN5ID0gQ29uc3RyYWludENvbmN1cnJl
bmN5OjpDb25jdXJyZW50LAogICAgICAgICBDb25zdHJhaW50UGFyYWxsZWxpc20gPSBDb25zdHJh
aW50UGFyYWxsZWxpc206OlNlcXVlbnRpYWwpOwogICAgIAogICAgIFNpbXBsZU1hcmtpbmdDb25z
dHJhaW50KAogICAgICAgICBDU3RyaW5nIGFiYnJldmlhdGVkTmFtZSwgQ1N0cmluZyBuYW1lLAot
ICAgICAgICA6OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3ImKT4gZnVuYywKKyAgICAgICAgOjpG
dW5jdGlvbjx2b2lkKEFic3RyYWN0U2xvdFZpc2l0b3ImKT4gZnVuYywKICAgICAgICAgQ29uc3Ry
YWludFZvbGF0aWxpdHkgdm9sYXRpbGl0eSwKICAgICAgICAgQ29uc3RyYWludFBhcmFsbGVsaXNt
IHBhcmFsbGVsaXNtKQogICAgICAgICA6IFNpbXBsZU1hcmtpbmdDb25zdHJhaW50KGFiYnJldmlh
dGVkTmFtZSwgbmFtZSwgV1RGTW92ZShmdW5jKSwgdm9sYXRpbGl0eSwgQ29uc3RyYWludENvbmN1
cnJlbmN5OjpDb25jdXJyZW50LCBwYXJhbGxlbGlzbSkKQEAgLTU0LDkgKzU0LDkgQEAgcHVibGlj
OgogICAgIEpTX0VYUE9SVF9QUklWQVRFIH5TaW1wbGVNYXJraW5nQ29uc3RyYWludCgpIGZpbmFs
OwogICAgIAogcHJpdmF0ZToKLSAgICB2b2lkIGV4ZWN1dGVJbXBsKFNsb3RWaXNpdG9yJikgZmlu
YWw7CisgICAgdm9pZCBleGVjdXRlSW1wbChBYnN0cmFjdFNsb3RWaXNpdG9yJikgZmluYWw7CiAK
LSAgICA6OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3ImKT4gbV9leGVjdXRlRnVuY3Rpb247Cisg
ICAgOjpGdW5jdGlvbjx2b2lkKEFic3RyYWN0U2xvdFZpc2l0b3ImKT4gbV9leGVjdXRlRnVuY3Rp
b247CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL1Nsb3RWaXNpdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9TbG90VmlzaXRvci5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiAr
MjYsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlNsb3RWaXNpdG9yLmgiCiAK
KyNpbmNsdWRlICJBYnN0cmFjdFNsb3RWaXNpdG9ySW5saW5lcy5oIgogI2luY2x1ZGUgIkNvbnNl
cnZhdGl2ZVJvb3RzLmgiCiAjaW5jbHVkZSAiR0NTZWdtZW50ZWRBcnJheUlubGluZXMuaCIKICNp
bmNsdWRlICJIZWFwQW5hbHl6ZXIuaCIKQEAgLTM1LDcgKzM2LDcgQEAKICNpbmNsdWRlICJKU0Fy
cmF5LmgiCiAjaW5jbHVkZSAiSlNDZWxsSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTU3RyaW5nLmgi
Ci0jaW5jbHVkZSAiTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXIuaCIKKy8vI2luY2x1ZGUgIk1hcmtp
bmdDb25zdHJhaW50U29sdmVyLmgiCiAjaW5jbHVkZSAiU2xvdFZpc2l0b3JJbmxpbmVzLmgiCiAj
aW5jbHVkZSAiU3RvcElmTmVjZXNzYXJ5VGltZXIuaCIKICNpbmNsdWRlICJWTS5oIgpAQCAtNzcs
MTYgKzc4LDE4IEBAIHN0YXRpYyB2b2lkIHZhbGlkYXRlKEpTQ2VsbCogY2VsbCkKICNlbmRpZgog
CiBTbG90VmlzaXRvcjo6U2xvdFZpc2l0b3IoSGVhcCYgaGVhcCwgQ1N0cmluZyBjb2RlTmFtZSkK
LSAgICA6IG1fYnl0ZXNWaXNpdGVkKDApCi0gICAgLCBtX3Zpc2l0Q291bnQoMCkKKy8vICAgIDog
QmFzZShUeXBlOjpTbG90VmlzaXRvciwgaGVhcCwgY29kZU5hbWUpCisgICAgOiBCYXNlKGhlYXAs
IGNvZGVOYW1lKQorLy8gICAgLCBtX2J5dGVzVmlzaXRlZCgwKQorLy8gICAgLCBtX3Zpc2l0Q291
bnQoMCkKICAgICAsIG1faXNJblBhcmFsbGVsTW9kZShmYWxzZSkKLSAgICAsIG1fbWFya2luZ1Zl
cnNpb24oTWFya2VkU3BhY2U6OmluaXRpYWxWZXJzaW9uKQotICAgICwgbV9oZWFwKGhlYXApCi0g
ICAgLCBtX2NvZGVOYW1lKGNvZGVOYW1lKQotI2lmIEFTU0VSVF9FTkFCTEVECi0gICAgLCBtX2lz
Q2hlY2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlvbihmYWxzZSkKLSAgICAsIG1faXNEcmFpbmlu
ZyhmYWxzZSkKLSNlbmRpZgorLy8gICAgLCBtX21hcmtpbmdWZXJzaW9uKE1hcmtlZFNwYWNlOjpp
bml0aWFsVmVyc2lvbikKKy8vICAgICwgbV9oZWFwKGhlYXApCisvLyAgICAsIG1fY29kZU5hbWUo
Y29kZU5hbWUpCisvLyNpZiBBU1NFUlRfRU5BQkxFRAorLy8gICAgLCBtX2lzQ2hlY2tpbmdGb3JE
ZWZhdWx0TWFya1Zpb2xhdGlvbihmYWxzZSkKKy8vLy8gICAgLCBtX2lzRHJhaW5pbmcoZmFsc2Up
CisvLyNlbmRpZgogewogfQogCkBAIC0xMTcsOCArMTIwLDkgQEAgdm9pZCBTbG90VmlzaXRvcjo6
ZGlkU3RhcnRNYXJraW5nKCkKIAogdm9pZCBTbG90VmlzaXRvcjo6cmVzZXQoKQogewotICAgIG1f
Ynl0ZXNWaXNpdGVkID0gMDsKLSAgICBtX3Zpc2l0Q291bnQgPSAwOworLy8gICAgbV9ieXRlc1Zp
c2l0ZWQgPSAwOworLy8gICAgbV92aXNpdENvdW50ID0gMDsKKyAgICBBYnN0cmFjdFNsb3RWaXNp
dG9yOjpyZXNldCgpOwogICAgIG1faGVhcEFuYWx5emVyID0gbnVsbHB0cjsKICAgICBSRUxFQVNF
X0FTU0VSVCghbV9jdXJyZW50Q2VsbCk7CiB9CkBAIC04MDcsMTMgKzgxMSwxMyBAQCBNYXJrU3Rh
Y2tBcnJheSYgU2xvdFZpc2l0b3I6OmNvcnJlc3BvbmRpCiAgICAgcmV0dXJuICptX2hlYXAubV9z
aGFyZWRNdXRhdG9yTWFya1N0YWNrOwogfQogCi12b2lkIFNsb3RWaXNpdG9yOjphZGRQYXJhbGxl
bENvbnN0cmFpbnRUYXNrKFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoU2xvdFZpc2l0b3ImKT4+IHRh
c2spCi17Ci0gICAgUkVMRUFTRV9BU1NFUlQobV9jdXJyZW50U29sdmVyKTsKLSAgICBSRUxFQVNF
X0FTU0VSVChtX2N1cnJlbnRDb25zdHJhaW50KTsKLSAgICBSRUxFQVNFX0FTU0VSVCh0YXNrKTsK
LSAgICAKLSAgICBtX2N1cnJlbnRTb2x2ZXItPmFkZFBhcmFsbGVsVGFzayh0YXNrLCAqbV9jdXJy
ZW50Q29uc3RyYWludCk7Ci19CisvL3ZvaWQgU2xvdFZpc2l0b3I6OmFkZFBhcmFsbGVsQ29uc3Ry
YWludFRhc2soUmVmUHRyPFNoYXJlZFRhc2s8dm9pZChBYnN0cmFjdFNsb3RWaXNpdG9yJik+PiB0
YXNrKQorLy97CisvLyAgICBSRUxFQVNFX0FTU0VSVChtX2N1cnJlbnRTb2x2ZXIpOworLy8gICAg
UkVMRUFTRV9BU1NFUlQobV9jdXJyZW50Q29uc3RyYWludCk7CisvLyAgICBSRUxFQVNFX0FTU0VS
VCh0YXNrKTsKKy8vCisvLyAgICBtX2N1cnJlbnRTb2x2ZXItPmFkZFBhcmFsbGVsVGFzayh0YXNr
LCAqbV9jdXJyZW50Q29uc3RyYWludCk7CisvL30KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmgJKHJldmlzaW9uIDI3MTQ0
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTI1LDc0ICsyNSwxMDEgQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRlICJB
YnN0cmFjdFNsb3RWaXNpdG9yLmgiCiAjaW5jbHVkZSAiSGFuZGxlVHlwZXMuaCIKICNpbmNsdWRl
ICJJdGVyYXRpb25TdGF0dXMuaCIKLSNpbmNsdWRlICJNYXJrU3RhY2suaCIKLSNpbmNsdWRlICJW
aXNpdFJhY2VLZXkuaCIKKy8vI2luY2x1ZGUgIk1hcmtTdGFjay5oIgorLy8jaW5jbHVkZSAiVmlz
aXRSYWNlS2V5LmgiCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3dGYvTW9u
b3RvbmljVGltZS5oPgotI2luY2x1ZGUgPHd0Zi9TaGFyZWRUYXNrLmg+Ci0jaW5jbHVkZSA8d3Rm
L3RleHQvQ1N0cmluZy5oPgorLy8jaW5jbHVkZSA8d3RmL1NoYXJlZFRhc2suaD4KKy8vI2luY2x1
ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKLWNsYXNzIENvbnNl
cnZhdGl2ZVJvb3RzOworLy9jbGFzcyBDb25zZXJ2YXRpdmVSb290czsKIGNsYXNzIEdDVGhyZWFk
U2hhcmVkRGF0YTsKLWNsYXNzIEhlYXA7CisvL2NsYXNzIEhlYXA7CiBjbGFzcyBIZWFwQ2VsbDsK
LWNsYXNzIEhlYXBBbmFseXplcjsKKy8vY2xhc3MgSGVhcEFuYWx5emVyOwogY2xhc3MgTWFya2Vk
QmxvY2s7Ci1jbGFzcyBNYXJraW5nQ29uc3RyYWludDsKLWNsYXNzIE1hcmtpbmdDb25zdHJhaW50
U29sdmVyOwotdGVtcGxhdGU8dHlwZW5hbWUgVD4gY2xhc3MgV2VhazsKLXRlbXBsYXRlPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIFRyYWl0cz4gY2xhc3MgV3JpdGVCYXJyaWVyQmFzZTsKKy8vY2xhc3Mg
TWFya2luZ0NvbnN0cmFpbnQ7CisvL2NsYXNzIE1hcmtpbmdDb25zdHJhaW50U29sdmVyOworLy90
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjbGFzcyBXZWFrOworLy90ZW1wbGF0ZTx0eXBlbmFtZSBULCB0
eXBlbmFtZSBUcmFpdHM+IGNsYXNzIFdyaXRlQmFycmllckJhc2U7CiAKLXR5cGVkZWYgdWludDMy
X3QgSGVhcFZlcnNpb247CisvL3R5cGVkZWYgdWludDMyX3QgSGVhcFZlcnNpb247CiAKLWNsYXNz
IFNsb3RWaXNpdG9yIHsKK2NsYXNzIFNsb3RWaXNpdG9yIGZpbmFsIDogcHVibGljIEFic3RyYWN0
U2xvdFZpc2l0b3IgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFNsb3RWaXNpdG9yKTsKICAg
ICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIAorICAgIHVzaW5nIEJhc2UgPSBBYnN0cmFjdFNs
b3RWaXNpdG9yOworCiAgICAgZnJpZW5kIGNsYXNzIFNldEN1cnJlbnRDZWxsU2NvcGU7CiAgICAg
ZnJpZW5kIGNsYXNzIEhlYXA7CiAKIHB1YmxpYzoKLSAgICBlbnVtIFJvb3RNYXJrUmVhc29uIHsK
LSAgICAgICAgTm9uZSwKLSAgICAgICAgQ29uc2VydmF0aXZlU2NhbiwKLSAgICAgICAgU3Ryb25n
UmVmZXJlbmNlcywKLSAgICAgICAgUHJvdGVjdGVkVmFsdWVzLAotICAgICAgICBNYXJrTGlzdFNl
dCwKLSAgICAgICAgVk1FeGNlcHRpb25zLAotICAgICAgICBTdHJvbmdIYW5kbGVzLAotICAgICAg
ICBEZWJ1Z2dlciwKLSAgICAgICAgSklUU3R1YlJvdXRpbmVzLAotICAgICAgICBXZWFrU2V0cywK
LSAgICAgICAgT3V0cHV0LAotICAgICAgICBERkdXb3JrTGlzdHMsCi0gICAgICAgIENvZGVCbG9j
a3MsCi0gICAgICAgIERPTUdDT3V0cHV0LAorICAgIGNsYXNzIERlZmF1bHRNYXJraW5nVmlvbGF0
aW9uQXNzZXJ0aW9uU2NvcGUgeworICAgIHB1YmxpYzoKKyNpZiBBU1NFUlRfRU5BQkxFRAorICAg
ICAgICBEZWZhdWx0TWFya2luZ1Zpb2xhdGlvbkFzc2VydGlvblNjb3BlKFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQorICAgICAgICAgICAgOiBtX3Zpc2l0b3IodmlzaXRvcikKKyAgICAgICAgeworICAg
ICAgICAgICAgbV93YXNDaGVja2luZ0ZvckRlZmF1bHRNYXJrVmlvbGF0aW9uID0gbV92aXNpdG9y
Lm1faXNDaGVja2luZ0ZvckRlZmF1bHRNYXJrVmlvbGF0aW9uOworICAgICAgICAgICAgbV92aXNp
dG9yLm1faXNDaGVja2luZ0ZvckRlZmF1bHRNYXJrVmlvbGF0aW9uID0gZmFsc2U7CisgICAgICAg
IH0KKworICAgICAgICB+RGVmYXVsdE1hcmtpbmdWaW9sYXRpb25Bc3NlcnRpb25TY29wZSgpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIG1fdmlzaXRvci5tX2lzQ2hlY2tpbmdGb3JEZWZhdWx0TWFy
a1Zpb2xhdGlvbiA9IG1fd2FzQ2hlY2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlvbjsKKyAgICAg
ICAgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgU2xvdFZpc2l0b3ImIG1fdmlzaXRvcjsKKyAg
ICAgICAgYm9vbCBtX3dhc0NoZWNraW5nRm9yRGVmYXVsdE1hcmtWaW9sYXRpb247CisjZWxzZQor
ICAgICAgICBEZWZhdWx0TWFya2luZ1Zpb2xhdGlvbkFzc2VydGlvblNjb3BlKFNsb3RWaXNpdG9y
JikgeyB9CisjZW5kaWYKICAgICB9OwogCisvLyAgICBlbnVtIFJvb3RNYXJrUmVhc29uIHsKKy8v
ICAgICAgICBOb25lLAorLy8gICAgICAgIENvbnNlcnZhdGl2ZVNjYW4sCisvLyAgICAgICAgU3Ry
b25nUmVmZXJlbmNlcywKKy8vICAgICAgICBQcm90ZWN0ZWRWYWx1ZXMsCisvLyAgICAgICAgTWFy
a0xpc3RTZXQsCisvLyAgICAgICAgVk1FeGNlcHRpb25zLAorLy8gICAgICAgIFN0cm9uZ0hhbmRs
ZXMsCisvLyAgICAgICAgRGVidWdnZXIsCisvLyAgICAgICAgSklUU3R1YlJvdXRpbmVzLAorLy8g
ICAgICAgIFdlYWtTZXRzLAorLy8gICAgICAgIE91dHB1dCwKKy8vICAgICAgICBERkdXb3JrTGlz
dHMsCisvLyAgICAgICAgQ29kZUJsb2NrcywKKy8vICAgICAgICBET01HQ091dHB1dCwKKy8vICAg
IH07CisKICAgICBTbG90VmlzaXRvcihIZWFwJiwgQ1N0cmluZyBjb2RlTmFtZSk7CiAgICAgflNs
b3RWaXNpdG9yKCk7CiAKLSAgICBNYXJrU3RhY2tBcnJheSYgY29sbGVjdG9yTWFya1N0YWNrKCkg
eyByZXR1cm4gbV9jb2xsZWN0b3JTdGFjazsgfQotICAgIE1hcmtTdGFja0FycmF5JiBtdXRhdG9y
TWFya1N0YWNrKCkgeyByZXR1cm4gbV9tdXRhdG9yU3RhY2s7IH0KLSAgICBjb25zdCBNYXJrU3Rh
Y2tBcnJheSYgY29sbGVjdG9yTWFya1N0YWNrKCkgY29uc3QgeyByZXR1cm4gbV9jb2xsZWN0b3JT
dGFjazsgfQotICAgIGNvbnN0IE1hcmtTdGFja0FycmF5JiBtdXRhdG9yTWFya1N0YWNrKCkgY29u
c3QgeyByZXR1cm4gbV9tdXRhdG9yU3RhY2s7IH0KLSAgICAKLSAgICBWTSYgdm0oKTsKLSAgICBj
b25zdCBWTSYgdm0oKSBjb25zdDsKLSAgICBIZWFwKiBoZWFwKCkgY29uc3Q7Ci0KLSAgICB2b2lk
IGFwcGVuZChjb25zdCBDb25zZXJ2YXRpdmVSb290cyYpOwotICAgIAotICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFQsIHR5cGVuYW1lIFRyYWl0cz4gdm9pZCBhcHBlbmQoY29uc3QgV3JpdGVCYXJyaWVy
QmFzZTxULCBUcmFpdHM+Jik7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVHJh
aXRzPiB2b2lkIGFwcGVuZEhpZGRlbihjb25zdCBXcml0ZUJhcnJpZXJCYXNlPFQsIFRyYWl0cz4m
KTsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJdGVyYXRvcj4gdm9pZCBhcHBlbmQoSXRlcmF0b3Ig
YmVnaW4gLCBJdGVyYXRvciBlbmQpOwotICAgIHZvaWQgYXBwZW5kVmFsdWVzKGNvbnN0IFdyaXRl
QmFycmllckJhc2U8VW5rbm93biwgUmF3VmFsdWVUcmFpdHM8VW5rbm93bj4+Kiwgc2l6ZV90IGNv
dW50KTsKLSAgICB2b2lkIGFwcGVuZFZhbHVlc0hpZGRlbihjb25zdCBXcml0ZUJhcnJpZXJCYXNl
PFVua25vd24sIFJhd1ZhbHVlVHJhaXRzPFVua25vd24+PiosIHNpemVfdCBjb3VudCk7CisvLyAg
ICBNYXJrU3RhY2tBcnJheSYgY29sbGVjdG9yTWFya1N0YWNrKCkgeyByZXR1cm4gbV9jb2xsZWN0
b3JTdGFjazsgfQorLy8gICAgTWFya1N0YWNrQXJyYXkmIG11dGF0b3JNYXJrU3RhY2soKSB7IHJl
dHVybiBtX211dGF0b3JTdGFjazsgfQorLy8gICAgY29uc3QgTWFya1N0YWNrQXJyYXkmIGNvbGxl
Y3Rvck1hcmtTdGFjaygpIGNvbnN0IHsgcmV0dXJuIG1fY29sbGVjdG9yU3RhY2s7IH0KKy8vICAg
IGNvbnN0IE1hcmtTdGFja0FycmF5JiBtdXRhdG9yTWFya1N0YWNrKCkgY29uc3QgeyByZXR1cm4g
bV9tdXRhdG9yU3RhY2s7IH0KKyAgICAKKy8vICAgIFZNJiB2bSgpOworLy8gICAgY29uc3QgVk0m
IHZtKCkgY29uc3Q7CisvLyAgICBIZWFwKiBoZWFwKCkgY29uc3Q7CisKKyAgICB2b2lkIGFwcGVu
ZChjb25zdCBDb25zZXJ2YXRpdmVSb290cyYpIGZpbmFsOworCisgICAgdXNpbmcgQmFzZTo6YXBw
ZW5kOworLy8gICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVHJhaXRzPiB2b2lkIGFw
cGVuZChjb25zdCBXcml0ZUJhcnJpZXJCYXNlPFQsIFRyYWl0cz4mKTsKKy8vICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFQsIHR5cGVuYW1lIFRyYWl0cz4gdm9pZCBhcHBlbmRIaWRkZW4oY29uc3QgV3Jp
dGVCYXJyaWVyQmFzZTxULCBUcmFpdHM+Jik7CisvLyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJdGVy
YXRvcj4gdm9pZCBhcHBlbmQoSXRlcmF0b3IgYmVnaW4gLCBJdGVyYXRvciBlbmQpOworLy8gICAg
dm9pZCBhcHBlbmRWYWx1ZXMoY29uc3QgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duLCBSYXdWYWx1
ZVRyYWl0czxVbmtub3duPj4qLCBzaXplX3QgY291bnQpOworLy8gICAgdm9pZCBhcHBlbmRWYWx1
ZXNIaWRkZW4oY29uc3QgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duLCBSYXdWYWx1ZVRyYWl0czxV
bmtub3duPj4qLCBzaXplX3QgY291bnQpOwogICAgIAogICAgIC8vIFRoZXNlIGRvbid0IHJlcXVp
cmUgeW91IHRvIHByb3ZlIHRoYXQgeW91IGhhdmUgYSBXcml0ZUJhcnJpZXI8Pi4gVGhhdCBtYWtl
cyBzZW5zZQogICAgIC8vIGZvcjoKQEAgLTEwMywxOSArMTMwLDE5IEBAIHB1YmxpYzoKICAgICAv
LwogICAgIC8vIElmIHlvdSBhcmUgbm90IGEgcm9vdCBhbmQgeW91IGRvbid0IGtub3cgd2hhdCBr
aW5kIG9mIGJhcnJpZXIgeW91IGhhdmUsIHRoZW4geW91CiAgICAgLy8gc2hvdWxkbid0IGNhbGwg
dGhlc2UgbWV0aG9kcy4KLSAgICB2b2lkIGFwcGVuZFVuYmFycmllcmVkKEpTVmFsdWUpOworICAg
IHZvaWQgYXBwZW5kVW5iYXJyaWVyZWQoSlNWYWx1ZSkgZmluYWw7CiAgICAgdm9pZCBhcHBlbmRV
bmJhcnJpZXJlZChKU1ZhbHVlKiwgc2l6ZV90KTsKLSAgICB2b2lkIGFwcGVuZFVuYmFycmllcmVk
KEpTQ2VsbCopOworICAgIHZvaWQgYXBwZW5kVW5iYXJyaWVyZWQoSlNDZWxsKikgZmluYWw7CiAg
ICAgCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICB2b2lkIGFwcGVuZChjb25zdCBXZWFr
PFQ+JiB3ZWFrKTsKKy8vICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisvLyAgICB2b2lkIGFwcGVu
ZChjb25zdCBXZWFrPFQ+JiB3ZWFrKTsKICAgICAKLSAgICB2b2lkIGFwcGVuZEhpZGRlblVuYmFy
cmllcmVkKEpTVmFsdWUpOwotICAgIHZvaWQgYXBwZW5kSGlkZGVuVW5iYXJyaWVyZWQoSlNDZWxs
Kik7CisgICAgdm9pZCBhcHBlbmRIaWRkZW5VbmJhcnJpZXJlZChKU1ZhbHVlKSBmaW5hbDsKKyAg
ICB2b2lkIGFwcGVuZEhpZGRlblVuYmFycmllcmVkKEpTQ2VsbCopIGZpbmFsOwogCi0gICAgYm9v
bCBhZGRPcGFxdWVSb290KHZvaWQqKTsgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSByb290IHdhcyBu
ZXcuCisgICAgYm9vbCBhZGRPcGFxdWVSb290KHZvaWQqKSBmaW5hbDsgLy8gUmV0dXJucyB0cnVl
IGlmIHRoZSByb290IHdhcyBuZXcuCiAgICAgCi0gICAgYm9vbCBjb250YWluc09wYXF1ZVJvb3Qo
dm9pZCopIGNvbnN0OworICAgIGJvb2wgY29udGFpbnNPcGFxdWVSb290KHZvaWQqKSBjb25zdCBm
aW5hbDsKIAogICAgIGJvb2wgaXNFbXB0eSgpIHsgcmV0dXJuIG1fY29sbGVjdG9yU3RhY2suaXNF
bXB0eSgpICYmIG1fbXV0YXRvclN0YWNrLmlzRW1wdHkoKTsgfQogCkBAIC0xMjUsMTAgKzE1Miwx
MCBAQCBwdWJsaWM6CiAgICAgdm9pZCByZXNldCgpOwogICAgIHZvaWQgY2xlYXJNYXJrU3RhY2tz
KCk7CiAKLSAgICBzaXplX3QgYnl0ZXNWaXNpdGVkKCkgY29uc3QgeyByZXR1cm4gbV9ieXRlc1Zp
c2l0ZWQ7IH0KLSAgICBzaXplX3QgdmlzaXRDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fdmlzaXRD
b3VudDsgfQotICAgIAotICAgIHZvaWQgYWRkVG9WaXNpdENvdW50KHNpemVfdCB2YWx1ZSkgeyBt
X3Zpc2l0Q291bnQgKz0gdmFsdWU7IH0KKy8vICAgIHNpemVfdCBieXRlc1Zpc2l0ZWQoKSBjb25z
dCB7IHJldHVybiBtX2J5dGVzVmlzaXRlZDsgfQorLy8gICAgc2l6ZV90IHZpc2l0Q291bnQoKSBj
b25zdCB7IHJldHVybiBtX3Zpc2l0Q291bnQ7IH0KKy8vCisvLyAgICB2b2lkIGFkZFRvVmlzaXRD
b3VudChzaXplX3QgdmFsdWUpIHsgbV92aXNpdENvdW50ICs9IHZhbHVlOyB9CiAKICAgICB2b2lk
IGRvbmF0ZSgpOwogICAgIHZvaWQgZHJhaW4oTW9ub3RvbmljVGltZSB0aW1lb3V0ID0gTW9ub3Rv
bmljVGltZTo6aW5maW5pdHkoKSk7CkBAIC0xNTEsMjQgKzE3OCwyNCBAQCBwdWJsaWM6CiAgICAg
CiAgICAgLy8gVGhpcyBpbmZvcm1zIHRoZSBHQyBhYm91dCBhdXhpbGlhcnkgb2Ygc29tZSBzaXpl
IHRoYXQgd2UgYXJlIGtlZXBpbmcgYWxpdmUuIElmIHlvdSBkb24ndCBkbwogICAgIC8vIHRoaXMg
dGhlbiB0aGUgc3BhY2Ugd2lsbCBiZSBmcmVlZCBhdCBlbmQgb2YgR0MuCi0gICAgdm9pZCBtYXJr
QXV4aWxpYXJ5KGNvbnN0IHZvaWQqIGJhc2UpOworICAgIHZvaWQgbWFya0F1eGlsaWFyeShjb25z
dCB2b2lkKiBiYXNlKSBmaW5hbDsKIAotICAgIHZvaWQgcmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVk
KHNpemVfdCk7CisgICAgdm9pZCByZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQoc2l6ZV90KSBmaW5h
bDsKICNpZiBFTkFCTEUoUkVTT1VSQ0VfVVNBR0UpCi0gICAgdm9pZCByZXBvcnRFeHRlcm5hbE1l
bW9yeVZpc2l0ZWQoc2l6ZV90KTsKKyAgICB2b2lkIHJlcG9ydEV4dGVybmFsTWVtb3J5VmlzaXRl
ZChzaXplX3QpIGZpbmFsOwogI2VuZGlmCiAgICAgCi0gICAgdm9pZCBkdW1wKFByaW50U3RyZWFt
JikgY29uc3Q7CisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3QgZmluYWw7CiAKLSAg
ICBib29sIGlzQW5hbHl6aW5nSGVhcCgpIGNvbnN0IHsgcmV0dXJuICEhbV9oZWFwQW5hbHl6ZXI7
IH0KLSAgICBIZWFwQW5hbHl6ZXIqIGhlYXBBbmFseXplcigpIGNvbnN0IHsgcmV0dXJuIG1faGVh
cEFuYWx5emVyOyB9CisvLyAgICBib29sIGlzQW5hbHl6aW5nSGVhcCgpIGNvbnN0IHsgcmV0dXJu
ICEhbV9oZWFwQW5hbHl6ZXI7IH0KKy8vICAgIEhlYXBBbmFseXplciogaGVhcEFuYWx5emVyKCkg
Y29uc3QgeyByZXR1cm4gbV9oZWFwQW5hbHl6ZXI7IH0KICAgICAKLSAgICBSb290TWFya1JlYXNv
biByb290TWFya1JlYXNvbigpIGNvbnN0IHsgcmV0dXJuIG1fcm9vdE1hcmtSZWFzb247IH0KLSAg
ICB2b2lkIHNldFJvb3RNYXJrUmVhc29uKFJvb3RNYXJrUmVhc29uIHJlYXNvbikgeyBtX3Jvb3RN
YXJrUmVhc29uID0gcmVhc29uOyB9CisvLyAgICBSb290TWFya1JlYXNvbiByb290TWFya1JlYXNv
bigpIGNvbnN0IHsgcmV0dXJuIG1fcm9vdE1hcmtSZWFzb247IH0KKy8vICAgIHZvaWQgc2V0Um9v
dE1hcmtSZWFzb24oUm9vdE1hcmtSZWFzb24gcmVhc29uKSB7IG1fcm9vdE1hcmtSZWFzb24gPSBy
ZWFzb247IH0KIAotICAgIEhlYXBWZXJzaW9uIG1hcmtpbmdWZXJzaW9uKCkgY29uc3QgeyByZXR1
cm4gbV9tYXJraW5nVmVyc2lvbjsgfQorLy8gICAgSGVhcFZlcnNpb24gbWFya2luZ1ZlcnNpb24o
KSBjb25zdCB7IHJldHVybiBtX21hcmtpbmdWZXJzaW9uOyB9CiAKLSAgICBib29sIG11dGF0b3JJ
c1N0b3BwZWQoKSBjb25zdCB7IHJldHVybiBtX211dGF0b3JJc1N0b3BwZWQ7IH0KKyAgICBib29s
IG11dGF0b3JJc1N0b3BwZWQoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX211dGF0b3JJc1N0b3Bw
ZWQ7IH0KICAgICAKICAgICBMb2NrJiByaWdodFRvUnVuKCkgeyByZXR1cm4gbV9yaWdodFRvUnVu
OyB9CiAgICAgCkBAIC0xODAsMTAgKzIwNywxMCBAQCBwdWJsaWM6CiAgICAgCiAgICAgdm9pZCBv
cHRpbWl6ZUZvclN0b3BwZWRNdXRhdG9yKCk7CiAgICAgCi0gICAgdm9pZCBkaWRSYWNlKGNvbnN0
IFZpc2l0UmFjZUtleSYpOworICAgIHZvaWQgZGlkUmFjZShjb25zdCBWaXNpdFJhY2VLZXkmKSBm
aW5hbDsKICAgICB2b2lkIGRpZFJhY2UoSlNDZWxsKiBjZWxsLCBjb25zdCBjaGFyKiByZWFzb24p
IHsgZGlkUmFjZShWaXNpdFJhY2VLZXkoY2VsbCwgcmVhc29uKSk7IH0KICAgICAKLSAgICB2b2lk
IHZpc2l0QXNDb25zdHJhaW50KGNvbnN0IEpTQ2VsbCopOworICAgIHZvaWQgdmlzaXRBc0NvbnN0
cmFpbnQoY29uc3QgSlNDZWxsKikgZmluYWw7CiAgICAgCiAgICAgYm9vbCBkaWRSZWFjaFRlcm1p
bmF0aW9uKCk7CiAgICAgCkBAIC0xOTMsMTEgKzIyMCwxMSBAQCBwdWJsaWM6CiAgICAgCiAgICAg
Y29uc3QgY2hhciogY29kZU5hbWUoKSBjb25zdCB7IHJldHVybiBtX2NvZGVOYW1lLmRhdGEoKTsg
fQogICAgIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgYWRkUGFyYWxsZWxDb25zdHJhaW50
VGFzayhSZWZQdHI8U2hhcmVkVGFzazx2b2lkKFNsb3RWaXNpdG9yJik+Pik7CisvLyAgICBKU19F
WFBPUlRfUFJJVkFURSB2b2lkIGFkZFBhcmFsbGVsQ29uc3RyYWludFRhc2soUmVmUHRyPFNoYXJl
ZFRhc2s8dm9pZChBYnN0cmFjdFNsb3RWaXNpdG9yJik+Pik7CiAKIHByaXZhdGU6CiAgICAgZnJp
ZW5kIGNsYXNzIFBhcmFsbGVsTW9kZUVuYWJsZXI7Ci0gICAgZnJpZW5kIGNsYXNzIE1hcmtpbmdD
b25zdHJhaW50U29sdmVyOworLy8gICAgZnJpZW5kIGNsYXNzIE1hcmtpbmdDb25zdHJhaW50U29s
dmVyOwogICAgIAogICAgIHZvaWQgYXBwZW5kSlNDZWxsT3JBdXhpbGlhcnkoSGVhcENlbGwqKTsK
IApAQCAtMjMyLDM5ICsyNTksMzkgQEAgcHJpdmF0ZToKIAogICAgIE1hcmtTdGFja0FycmF5JiBj
b3JyZXNwb25kaW5nR2xvYmFsU3RhY2soTWFya1N0YWNrQXJyYXkmKTsKIAotICAgIE1hcmtTdGFj
a0FycmF5IG1fY29sbGVjdG9yU3RhY2s7Ci0gICAgTWFya1N0YWNrQXJyYXkgbV9tdXRhdG9yU3Rh
Y2s7Ci0gICAgCi0gICAgc2l6ZV90IG1fYnl0ZXNWaXNpdGVkOwotICAgIHNpemVfdCBtX3Zpc2l0
Q291bnQ7CisvLyAgICBNYXJrU3RhY2tBcnJheSBtX2NvbGxlY3RvclN0YWNrOworLy8gICAgTWFy
a1N0YWNrQXJyYXkgbV9tdXRhdG9yU3RhY2s7CisvLworLy8gICAgc2l6ZV90IG1fYnl0ZXNWaXNp
dGVkOworLy8gICAgc2l6ZV90IG1fdmlzaXRDb3VudDsKICAgICBzaXplX3QgbV9ub25DZWxsVmlz
aXRDb3VudCB7IDAgfTsgLy8gVXNlZCBmb3IgaW5jcmVtZW50YWwgZHJhaW5pbmcsIGlnbm9yZWQg
b3RoZXJ3aXNlLgogICAgIENoZWNrZWRTaXplIG1fZXh0cmFNZW1vcnlTaXplIHsgMCB9OwogICAg
IGJvb2wgbV9pc0luUGFyYWxsZWxNb2RlOwogICAgIGJvb2wgbV9pZ25vcmVOZXdPcGFxdWVSb290
cyB7IGZhbHNlIH07IC8vIFVzZWZ1bCBhcyBhIGRlYnVnZ2luZyBtb2RlLgogCi0gICAgSGVhcFZl
cnNpb24gbV9tYXJraW5nVmVyc2lvbjsKLSAgICAKLSAgICBIZWFwJiBtX2hlYXA7CisvLyAgICBI
ZWFwVmVyc2lvbiBtX21hcmtpbmdWZXJzaW9uOworLy8KKy8vICAgIEhlYXAmIG1faGVhcDsKIAot
ICAgIEhlYXBBbmFseXplciogbV9oZWFwQW5hbHl6ZXIgeyBudWxscHRyIH07CisvLyAgICBIZWFw
QW5hbHl6ZXIqIG1faGVhcEFuYWx5emVyIHsgbnVsbHB0ciB9OwogICAgIEpTQ2VsbCogbV9jdXJy
ZW50Q2VsbCB7IG51bGxwdHIgfTsKLSAgICBSb290TWFya1JlYXNvbiBtX3Jvb3RNYXJrUmVhc29u
IHsgUm9vdE1hcmtSZWFzb246Ok5vbmUgfTsKKy8vICAgIFJvb3RNYXJrUmVhc29uIG1fcm9vdE1h
cmtSZWFzb24geyBSb290TWFya1JlYXNvbjo6Tm9uZSB9OwogICAgIGJvb2wgbV9pc0ZpcnN0Vmlz
aXQgeyBmYWxzZSB9OwogICAgIGJvb2wgbV9tdXRhdG9ySXNTdG9wcGVkIHsgZmFsc2UgfTsKICAg
ICBib29sIG1fY2FuT3B0aW1pemVGb3JTdG9wcGVkTXV0YXRvciB7IGZhbHNlIH07CiAgICAgTG9j
ayBtX3JpZ2h0VG9SdW47CiAgICAgCi0gICAgQ1N0cmluZyBtX2NvZGVOYW1lOworLy8gICAgQ1N0
cmluZyBtX2NvZGVOYW1lOwogICAgIAotICAgIE1hcmtpbmdDb25zdHJhaW50KiBtX2N1cnJlbnRD
b25zdHJhaW50IHsgbnVsbHB0ciB9OwotICAgIE1hcmtpbmdDb25zdHJhaW50U29sdmVyKiBtX2N1
cnJlbnRTb2x2ZXIgeyBudWxscHRyIH07CisvLyAgICBNYXJraW5nQ29uc3RyYWludCogbV9jdXJy
ZW50Q29uc3RyYWludCB7IG51bGxwdHIgfTsKKy8vICAgIE1hcmtpbmdDb25zdHJhaW50U29sdmVy
KiBtX2N1cnJlbnRTb2x2ZXIgeyBudWxscHRyIH07CiAgICAgCiAgICAgLy8gUHV0IHBhZGRpbmcg
aGVyZSB0byBtaXRpZ2F0ZSBmYWxzZSBzaGFyaW5nIGJldHdlZW4gbXVsdGlwbGUgU2xvdFZpc2l0
b3JzLgogICAgIGNoYXIgcGFkZGluZ1s2NF07Ci1wdWJsaWM6CisvL3B1YmxpYzoKICNpZiBBU1NF
UlRfRU5BQkxFRAotICAgIGJvb2wgbV9pc0NoZWNraW5nRm9yRGVmYXVsdE1hcmtWaW9sYXRpb247
Ci0gICAgYm9vbCBtX2lzRHJhaW5pbmc7CisgICAgYm9vbCBtX2lzQ2hlY2tpbmdGb3JEZWZhdWx0
TWFya1Zpb2xhdGlvbiB7IGZhbHNlIH07CisvLyAgICBib29sIG1faXNEcmFpbmluZzsKICNlbmRp
ZgogfTsKIApAQCAtMjg3LDIzICszMTQsMjMgQEAgcHJpdmF0ZToKICAgICBTbG90VmlzaXRvciYg
bV9zdGFjazsKIH07CiAKLWNsYXNzIFNldFJvb3RNYXJrUmVhc29uU2NvcGUgewotcHVibGljOgot
ICAgIFNldFJvb3RNYXJrUmVhc29uU2NvcGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IsIFNsb3RWaXNp
dG9yOjpSb290TWFya1JlYXNvbiByZWFzb24pCi0gICAgICAgIDogbV92aXNpdG9yKHZpc2l0b3Ip
Ci0gICAgICAgICwgbV9wcmV2aW91c1JlYXNvbih2aXNpdG9yLnJvb3RNYXJrUmVhc29uKCkpCi0g
ICAgewotICAgICAgICBtX3Zpc2l0b3Iuc2V0Um9vdE1hcmtSZWFzb24ocmVhc29uKTsKLSAgICB9
Ci0KLSAgICB+U2V0Um9vdE1hcmtSZWFzb25TY29wZSgpCi0gICAgewotICAgICAgICBtX3Zpc2l0
b3Iuc2V0Um9vdE1hcmtSZWFzb24obV9wcmV2aW91c1JlYXNvbik7Ci0gICAgfQotCi1wcml2YXRl
OgotICAgIFNsb3RWaXNpdG9yJiBtX3Zpc2l0b3I7Ci0gICAgU2xvdFZpc2l0b3I6OlJvb3RNYXJr
UmVhc29uIG1fcHJldmlvdXNSZWFzb247Ci19OwotCisvL2NsYXNzIFNldFJvb3RNYXJrUmVhc29u
U2NvcGUgeworLy9wdWJsaWM6CisvLyAgICBTZXRSb290TWFya1JlYXNvblNjb3BlKFNsb3RWaXNp
dG9yJiB2aXNpdG9yLCBTbG90VmlzaXRvcjo6Um9vdE1hcmtSZWFzb24gcmVhc29uKQorLy8gICAg
ICAgIDogbV92aXNpdG9yKHZpc2l0b3IpCisvLyAgICAgICAgLCBtX3ByZXZpb3VzUmVhc29uKHZp
c2l0b3Iucm9vdE1hcmtSZWFzb24oKSkKKy8vICAgIHsKKy8vICAgICAgICBtX3Zpc2l0b3Iuc2V0
Um9vdE1hcmtSZWFzb24ocmVhc29uKTsKKy8vICAgIH0KKy8vCisvLyAgICB+U2V0Um9vdE1hcmtS
ZWFzb25TY29wZSgpCisvLyAgICB7CisvLyAgICAgICAgbV92aXNpdG9yLnNldFJvb3RNYXJrUmVh
c29uKG1fcHJldmlvdXNSZWFzb24pOworLy8gICAgfQorLy8KKy8vcHJpdmF0ZToKKy8vICAgIFNs
b3RWaXNpdG9yJiBtX3Zpc2l0b3I7CisvLyAgICBTbG90VmlzaXRvcjo6Um9vdE1hcmtSZWFzb24g
bV9wcmV2aW91c1JlYXNvbjsKKy8vfTsKKy8vCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9ySW5saW5lcy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9ySW5saW5lcy5oCShyZXZp
c2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvcklu
bGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMjUsOSArMjUsMTAgQEAKIAogI3ByYWdtYSBvbmNl
CiAKKyNpbmNsdWRlICJBYnN0cmFjdFNsb3RWaXNpdG9ySW5saW5lcy5oIgogI2luY2x1ZGUgIlNs
b3RWaXNpdG9yLmgiCi0jaW5jbHVkZSAiV2Vhay5oIgotI2luY2x1ZGUgIldlYWtJbmxpbmVzLmgi
CisvLyNpbmNsdWRlICJXZWFrLmgiCisvLyNpbmNsdWRlICJXZWFrSW5saW5lcy5oIgogCiBuYW1l
c3BhY2UgSlNDIHsKIApAQCAtOTcsNDIgKzk4LDQyIEBAIEFMV0FZU19JTkxJTkUgdm9pZCBTbG90
VmlzaXRvcjo6YXBwZW5kSGkKICAgICBhcHBlbmRIaWRkZW5TbG93KGNlbGwsIGRlcGVuZGVuY3kp
OwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotQUxXQVlTX0lOTElORSB2b2lkIFNsb3RWaXNp
dG9yOjphcHBlbmQoY29uc3QgV2VhazxUPiYgd2VhaykKLXsKLSAgICBhcHBlbmRVbmJhcnJpZXJl
ZCh3ZWFrLmdldCgpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVHJhaXRz
PgotQUxXQVlTX0lOTElORSB2b2lkIFNsb3RWaXNpdG9yOjphcHBlbmQoY29uc3QgV3JpdGVCYXJy
aWVyQmFzZTxULCBUcmFpdHM+JiBzbG90KQotewotICAgIGFwcGVuZFVuYmFycmllcmVkKHNsb3Qu
Z2V0KCkpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBUcmFpdHM+Ci1BTFdB
WVNfSU5MSU5FIHZvaWQgU2xvdFZpc2l0b3I6OmFwcGVuZEhpZGRlbihjb25zdCBXcml0ZUJhcnJp
ZXJCYXNlPFQsIFRyYWl0cz4mIHNsb3QpCi17Ci0gICAgYXBwZW5kSGlkZGVuVW5iYXJyaWVyZWQo
c2xvdC5nZXQoKSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIEl0ZXJhdG9yPgotQUxXQVlTX0lO
TElORSB2b2lkIFNsb3RWaXNpdG9yOjphcHBlbmQoSXRlcmF0b3IgYmVnaW4sIEl0ZXJhdG9yIGVu
ZCkKLXsKLSAgICBmb3IgKGF1dG8gaXQgPSBiZWdpbjsgaXQgIT0gZW5kOyArK2l0KQotICAgICAg
ICBhcHBlbmQoKml0KTsKLX0KLQotQUxXQVlTX0lOTElORSB2b2lkIFNsb3RWaXNpdG9yOjphcHBl
bmRWYWx1ZXMoY29uc3QgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiogYmFycmllcnMsIHNpemVf
dCBjb3VudCkKLXsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpCi0gICAg
ICAgIGFwcGVuZChiYXJyaWVyc1tpXSk7Ci19Ci0KLUFMV0FZU19JTkxJTkUgdm9pZCBTbG90Vmlz
aXRvcjo6YXBwZW5kVmFsdWVzSGlkZGVuKGNvbnN0IFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4q
IGJhcnJpZXJzLCBzaXplX3QgY291bnQpCi17Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBj
b3VudDsgKytpKQotICAgICAgICBhcHBlbmRIaWRkZW4oYmFycmllcnNbaV0pOwotfQorLy90ZW1w
bGF0ZTx0eXBlbmFtZSBUPgorLy9BTFdBWVNfSU5MSU5FIHZvaWQgU2xvdFZpc2l0b3I6OmFwcGVu
ZChjb25zdCBXZWFrPFQ+JiB3ZWFrKQorLy97CisvLyAgICBhcHBlbmRVbmJhcnJpZXJlZCh3ZWFr
LmdldCgpKTsKKy8vfQorLy8KKy8vdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVHJhaXRz
PgorLy9BTFdBWVNfSU5MSU5FIHZvaWQgU2xvdFZpc2l0b3I6OmFwcGVuZChjb25zdCBXcml0ZUJh
cnJpZXJCYXNlPFQsIFRyYWl0cz4mIHNsb3QpCisvL3sKKy8vICAgIGFwcGVuZFVuYmFycmllcmVk
KHNsb3QuZ2V0KCkpOworLy99CisvLworLy90ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBU
cmFpdHM+CisvL0FMV0FZU19JTkxJTkUgdm9pZCBTbG90VmlzaXRvcjo6YXBwZW5kSGlkZGVuKGNv
bnN0IFdyaXRlQmFycmllckJhc2U8VCwgVHJhaXRzPiYgc2xvdCkKKy8veworLy8gICAgYXBwZW5k
SGlkZGVuVW5iYXJyaWVyZWQoc2xvdC5nZXQoKSk7CisvL30KKy8vCisvL3RlbXBsYXRlPHR5cGVu
YW1lIEl0ZXJhdG9yPgorLy9BTFdBWVNfSU5MSU5FIHZvaWQgU2xvdFZpc2l0b3I6OmFwcGVuZChJ
dGVyYXRvciBiZWdpbiwgSXRlcmF0b3IgZW5kKQorLy97CisvLyAgICBmb3IgKGF1dG8gaXQgPSBi
ZWdpbjsgaXQgIT0gZW5kOyArK2l0KQorLy8gICAgICAgIGFwcGVuZCgqaXQpOworLy99CisKKy8v
QUxXQVlTX0lOTElORSB2b2lkIFNsb3RWaXNpdG9yOjphcHBlbmRWYWx1ZXMoY29uc3QgV3JpdGVC
YXJyaWVyQmFzZTxVbmtub3duPiogYmFycmllcnMsIHNpemVfdCBjb3VudCkKKy8veworLy8gICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKQorLy8gICAgICAgIGFwcGVuZChiYXJy
aWVyc1tpXSk7CisvL30KKy8vCisvL0FMV0FZU19JTkxJTkUgdm9pZCBTbG90VmlzaXRvcjo6YXBw
ZW5kVmFsdWVzSGlkZGVuKGNvbnN0IFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4qIGJhcnJpZXJz
LCBzaXplX3QgY291bnQpCisvL3sKKy8vICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY291bnQ7
ICsraSkKKy8vICAgICAgICBhcHBlbmRIaWRkZW4oYmFycmllcnNbaV0pOworLy99CiAKIGlubGlu
ZSBib29sIFNsb3RWaXNpdG9yOjphZGRPcGFxdWVSb290KHZvaWQqIHB0cikKIHsKQEAgLTE2OSwy
MCArMTcwLDIwIEBAIGlubGluZSB2b2lkIFNsb3RWaXNpdG9yOjpyZXBvcnRFeHRlcm5hbE0KIH0K
ICNlbmRpZgogCi1pbmxpbmUgSGVhcCogU2xvdFZpc2l0b3I6OmhlYXAoKSBjb25zdAotewotICAg
IHJldHVybiAmbV9oZWFwOwotfQotCi1pbmxpbmUgVk0mIFNsb3RWaXNpdG9yOjp2bSgpCi17Ci0g
ICAgcmV0dXJuIG1faGVhcC52bSgpOwotfQotCi1pbmxpbmUgY29uc3QgVk0mIFNsb3RWaXNpdG9y
Ojp2bSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1faGVhcC52bSgpOwotfQorLy9pbmxpbmUgSGVh
cCogU2xvdFZpc2l0b3I6OmhlYXAoKSBjb25zdAorLy97CisvLyAgICByZXR1cm4gJm1faGVhcDsK
Ky8vfQorLy8KKy8vaW5saW5lIFZNJiBTbG90VmlzaXRvcjo6dm0oKQorLy97CisvLyAgICByZXR1
cm4gbV9oZWFwLnZtKCk7CisvL30KKy8vCisvL2lubGluZSBjb25zdCBWTSYgU2xvdFZpc2l0b3I6
OnZtKCkgY29uc3QKKy8veworLy8gICAgcmV0dXJuIG1faGVhcC52bSgpOworLy99CiAKIHRlbXBs
YXRlPHR5cGVuYW1lIEZ1bmM+CiBJdGVyYXRpb25TdGF0dXMgU2xvdFZpc2l0b3I6OmZvckVhY2hN
YXJrU3RhY2soY29uc3QgRnVuYyYgZnVuYykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL1Nsb3RWaXNpdG9yTWFjcm9zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvU2xvdFZpc2l0b3JNYWNyb3MuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvck1hY3Jvcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMTE3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI3ByYWdtYSBvbmNlCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBBYnN0cmFjdFNsb3RW
aXNpdG9yOworY2xhc3MgSlNDZWxsOworY2xhc3MgU2xvdFZpc2l0b3I7CisKKyNkZWZpbmUgREVD
TEFSRV9VTlVTRURfU0xPVF9WSVNJVE9SX1NUUlVDVF9FWFBBTkRFUjIoY291bnRlcl8pIFwKKyAg
ICBzdHJ1Y3QgVW51c2VkU2xvdFZpc2l0b3JTdHJ1Y3RTb1dlQ2FuSGF2ZUFTZW1pY29sb24jI2Nv
dW50ZXJfIHsgfQorCisjZGVmaW5lIERFQ0xBUkVfVU5VU0VEX1NMT1RfVklTSVRPUl9TVFJVQ1Rf
RVhQQU5ERVIoY291bnRlcl8pIFwKKyAgICBERUNMQVJFX1VOVVNFRF9TTE9UX1ZJU0lUT1JfU1RS
VUNUX0VYUEFOREVSMihjb3VudGVyXykKKworI2RlZmluZSBERUNMQVJFX1VOVVNFRF9TTE9UX1ZJ
U0lUT1JfU1RSVUNUKCkgXAorICAgIERFQ0xBUkVfVU5VU0VEX1NMT1RfVklTSVRPUl9TVFJVQ1Rf
RVhQQU5ERVIoX19DT1VOVEVSX18pCisKKy8vIE1hY3JvcyBmb3IgaW5zdGFuY2UgY3VzdG9tIHZp
c2l0b3IgbWV0aG9kLgorCisjZGVmaW5lIERFQ0xBUkVfSU5TVEFOQ0VfU0xPVF9WSVNJVE9SX01F
VEhPRF9JTVBMKHJldHVyblR5cGVfLCBtZXRob2ROYW1lXywgcG9zdE1vZGlmaWVyXykgXAorICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHJldHVyblR5cGVfIG1ldGhvZE5hbWVfIyNJbXBs
KFZpc2l0b3ImIHZpc2l0b3IpOyBcCisgICAgcmV0dXJuVHlwZV8gbWV0aG9kTmFtZV8oU2xvdFZp
c2l0b3ImKSBwb3N0TW9kaWZpZXJfOyBcCisgICAgcmV0dXJuVHlwZV8gbWV0aG9kTmFtZV8oQWJz
dHJhY3RTbG90VmlzaXRvciYpIHBvc3RNb2RpZmllcl87IFwKKyAgICBERUNMQVJFX1VOVVNFRF9T
TE9UX1ZJU0lUT1JfU1RSVUNUKCkKKworI2RlZmluZSBERUNMQVJFX0lOU1RBTkNFX1NMT1RfVklT
SVRPUl9NRVRIT0QocmV0dXJuVHlwZV8sIG1ldGhvZE5hbWVfKSBcCisgICAgREVDTEFSRV9JTlNU
QU5DRV9TTE9UX1ZJU0lUT1JfTUVUSE9EX0lNUEwocmV0dXJuVHlwZV8sIG1ldGhvZE5hbWVfLCAp
CisKKworI2RlZmluZSBERUZJTkVfSU5TVEFOQ0VfU0xPVF9WSVNJVE9SX01FVEhPRChyZXR1cm5U
eXBlXywgY2xhc3NOYW1lXywgbWV0aG9kTmFtZV8pIFwKKyAgICByZXR1cm5UeXBlXyBjbGFzc05h
bWVfOjptZXRob2ROYW1lXyhTbG90VmlzaXRvciYgdmlzaXRvcikgeyBtZXRob2ROYW1lXyMjSW1w
bCh2aXNpdG9yKTsgfSBcCisgICAgcmV0dXJuVHlwZV8gY2xhc3NOYW1lXzo6bWV0aG9kTmFtZV8o
QWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikgIHsgbWV0aG9kTmFtZV8jI0ltcGwodmlzaXRv
cik7IH0gXAorICAgIERFQ0xBUkVfVU5VU0VEX1NMT1RfVklTSVRPUl9TVFJVQ1QoKQorCisvLyBN
YWNyb3MgZm9yIGluc3RhbmNlIHZpc2l0Q2hpbGRyZW4oKS4KKworI2RlZmluZSBERUNMQVJFX0lO
U1RBTkNFX1ZJU0lUX0NISUxEUkVOIFwKKyAgICBERUNMQVJFX0lOU1RBTkNFX1NMT1RfVklTSVRP
Ul9NRVRIT0Qodm9pZCwgdmlzaXRDaGlsZHJlbikKKworCisjZGVmaW5lIERFRklORV9JTlNUQU5D
RV9WSVNJVF9DSElMRFJFTihjbGFzc05hbWVfKSBcCisgICAgREVGSU5FX0lOU1RBTkNFX1NMT1Rf
VklTSVRPUl9NRVRIT0Qodm9pZCwgY2xhc3NOYW1lXywgdmlzaXRDaGlsZHJlbikKKworLy8gTWFj
cm9zIGZvciBzdGF0aWMgdmlzaXRDaGlsZHJlbigpLgorCisjZGVmaW5lIERFQ0xBUkVfVklTSVRf
Q0hJTERSRU5fSU1QTCBcCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gc3RhdGljIHZv
aWQgdmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiwgVmlzaXRvciYpCisKKyNkZWZpbmUgREVDTEFS
RV9WSVNJVF9DSElMRFJFTiBcCisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTl9JTVBMOyBcCisg
ICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIEFic3RyYWN0U2xvdFZp
c2l0b3ImIHZpc2l0b3IpOyBcCisgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwq
IGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorCisjZGVmaW5lIERFQ0xBUkVfRVhQT1JUX1ZJ
U0lUX0NISUxEUkVOIFwKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOX0lNUEw7IFwKKyAgICBK
U19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIEFic3Ry
YWN0U2xvdFZpc2l0b3ImKTsgXAorICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIHZp
c2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKQorCisjZGVmaW5lIERFQ0xBUkVfSU5M
SU5FX1ZJU0lUX0NISUxEUkVOIFwKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOX0lNUEw7IFwK
KyAgICBpbmxpbmUgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBBYnN0cmFjdFNs
b3RWaXNpdG9yJik7IFwKKyAgICBpbmxpbmUgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0Nl
bGwqLCBTbG90VmlzaXRvciYpCisKKyNkZWZpbmUgREVDTEFSRV9URU1QTEFURV9WSVNJVF9DSElM
RFJFTiBcCisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTgorCisKKyNkZWZpbmUgREVGSU5FX1ZJ
U0lUX0NISUxEUkVOKGNsYXNzTmFtZV8pIFwKKyAgICB2b2lkIGNsYXNzTmFtZV86OnZpc2l0Q2hp
bGRyZW4oSlNDZWxsKiBjZWxsLCBBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKSB7IHZpc2l0
Q2hpbGRyZW5JbXBsKGNlbGwsIHZpc2l0b3IpOyB9IFwKKyAgICB2b2lkIGNsYXNzTmFtZV86OnZp
c2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikgeyB2aXNpdENo
aWxkcmVuSW1wbChjZWxsLCB2aXNpdG9yKTsgfSBcCisgICAgREVDTEFSRV9VTlVTRURfU0xPVF9W
SVNJVE9SX1NUUlVDVCgpCisKKyNkZWZpbmUgREVGSU5FX0VYUE9SVF9WSVNJVF9DSElMRFJFTihj
bGFzc05hbWVfKSBcCisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBjbGFzc05hbWVfOjp2aXNp
dENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikgeyB2
aXNpdENoaWxkcmVuSW1wbChjZWxsLCB2aXNpdG9yKTsgfSBcCisgICAgSlNfRVhQT1JUX1BSSVZB
VEUgdm9pZCBjbGFzc05hbWVfOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0
b3ImIHZpc2l0b3IpIHsgdmlzaXRDaGlsZHJlbkltcGwoY2VsbCwgdmlzaXRvcik7IH0gXAorICAg
IERFQ0xBUkVfVU5VU0VEX1NMT1RfVklTSVRPUl9TVFJVQ1QoKQorCisjZGVmaW5lIERFRklORV9J
TkxJTkVfVklTSVRfQ0hJTERSRU4oY2xhc3NOYW1lXykgXAorICAgIGlubGluZSB2b2lkIGNsYXNz
TmFtZV86OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBBYnN0cmFjdFNsb3RWaXNpdG9yJiB2
aXNpdG9yKSB7IHZpc2l0Q2hpbGRyZW5JbXBsKGNlbGwsIHZpc2l0b3IpOyB9IFwKKyAgICBpbmxp
bmUgdm9pZCBjbGFzc05hbWVfOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0
b3ImIHZpc2l0b3IpIHsgdmlzaXRDaGlsZHJlbkltcGwoY2VsbCwgdmlzaXRvcik7IH0gXAorICAg
IERFQ0xBUkVfVU5VU0VEX1NMT1RfVklTSVRPUl9TVFJVQ1QoKQorCisjZGVmaW5lIERFRklORV9U
RU1QTEFURV9WSVNJVF9DSElMRFJFTih0ZW1wbGF0ZUNsYXVzZV8sIGNsYXNzTmFtZV8pIFwKKyAg
ICB0ZW1wbGF0ZUNsYXVzZV8gdm9pZCBjbGFzc05hbWVfOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCog
Y2VsbCwgQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikgeyB2aXNpdENoaWxkcmVuSW1wbChj
ZWxsLCB2aXNpdG9yKTsgfSBcCisgICAgdGVtcGxhdGVDbGF1c2VfIHZvaWQgY2xhc3NOYW1lXzo6
dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKSB7IHZpc2l0
Q2hpbGRyZW5JbXBsKGNlbGwsIHZpc2l0b3IpOyB9IFwKKyAgICBERUNMQVJFX1VOVVNFRF9TTE9U
X1ZJU0lUT1JfU1RSVUNUKCkKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKK3VzaW5nIEpTQzo6QWJz
dHJhY3RTbG90VmlzaXRvcjsKK3VzaW5nIEpTQzo6SlNDZWxsOwordXNpbmcgSlNDOjpTbG90Vmlz
aXRvcjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N1YnNwYWNlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3Vic3BhY2UuaAkocmV2aXNpb24g
MjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3Vic3BhY2UuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzQsNiArMzQsNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAorY2xhc3MgQWJz
dHJhY3RTbG90VmlzaXRvcjsgLy8gbWxhbQogY2xhc3MgQWxpZ25lZE1lbW9yeUFsbG9jYXRvcjsK
IGNsYXNzIEhlYXBDZWxsVHlwZTsKIApAQCAtODcsNyArODgsNyBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBmb3JFYWNoTWFya2VkQ2VsbChjb25zdCBGdW5jJik7CiAgICAgCiAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgRnVuYz4KLSAgICBSZWY8U2hhcmVkVGFzazx2b2lkKFNsb3RWaXNpdG9yJik+PiBmb3JF
YWNoTWFya2VkQ2VsbEluUGFyYWxsZWwoY29uc3QgRnVuYyYpOworICAgIFJlZjxTaGFyZWRUYXNr
PHZvaWQoQWJzdHJhY3RTbG90VmlzaXRvciYpPj4gZm9yRWFjaE1hcmtlZENlbGxJblBhcmFsbGVs
KGNvbnN0IEZ1bmMmKTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CiAgICAgdm9pZCBm
b3JFYWNoTGl2ZUNlbGwoY29uc3QgRnVuYyYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvU3Vic3BhY2VJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvU3Vic3BhY2VJbmxpbmVzLmgJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL1N1YnNwYWNlSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC04
Niw5ICs4Niw5IEBAIHZvaWQgU3Vic3BhY2U6OmZvckVhY2hNYXJrZWRDZWxsKGNvbnN0IEYKIH0K
IAogdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KLVJlZjxTaGFyZWRUYXNrPHZvaWQoU2xvdFZpc2l0
b3ImKT4+IFN1YnNwYWNlOjpmb3JFYWNoTWFya2VkQ2VsbEluUGFyYWxsZWwoY29uc3QgRnVuYyYg
ZnVuYykKK1JlZjxTaGFyZWRUYXNrPHZvaWQoQWJzdHJhY3RTbG90VmlzaXRvciYpPj4gU3Vic3Bh
Y2U6OmZvckVhY2hNYXJrZWRDZWxsSW5QYXJhbGxlbChjb25zdCBGdW5jJiBmdW5jKQogewotICAg
IGNsYXNzIFRhc2sgZmluYWwgOiBwdWJsaWMgU2hhcmVkVGFzazx2b2lkKFNsb3RWaXNpdG9yJik+
IHsKKyAgICBjbGFzcyBUYXNrIGZpbmFsIDogcHVibGljIFNoYXJlZFRhc2s8dm9pZChBYnN0cmFj
dFNsb3RWaXNpdG9yJik+IHsKICAgICBwdWJsaWM6CiAgICAgICAgIFRhc2soU3Vic3BhY2UmIHN1
YnNwYWNlLCBjb25zdCBGdW5jJiBmdW5jKQogICAgICAgICAgICAgOiBtX3N1YnNwYWNlKHN1YnNw
YWNlKQpAQCAtOTcsNyArOTcsNyBAQCBSZWY8U2hhcmVkVGFzazx2b2lkKFNsb3RWaXNpdG9yJik+
PiBTdWJzCiAgICAgICAgIHsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgdm9pZCBydW4o
U2xvdFZpc2l0b3ImIHZpc2l0b3IpIGZpbmFsCisgICAgICAgIHZvaWQgcnVuKEFic3RyYWN0U2xv
dFZpc2l0b3ImIHZpc2l0b3IpIGZpbmFsCiAgICAgICAgIHsKICAgICAgICAgICAgIHdoaWxlIChN
YXJrZWRCbG9jazo6SGFuZGxlKiBoYW5kbGUgPSBtX2Jsb2NrU291cmNlLT5ydW4oKSkgewogICAg
ICAgICAgICAgICAgIGhhbmRsZS0+Zm9yRWFjaE1hcmtlZENlbGwoCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9WaXNpdENvdW50ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9WaXNpdENvdW50ZXIuaAkocmV2aXNpb24gMjcxNDQzKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVmlzaXRDb3VudGVyLmgJKHdvcmtpbmcgY29weSkKQEAg
LTI1LDcgKzI1LDcgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlICJTbG90VmlzaXRvci5o
IgorI2luY2x1ZGUgIkFic3RyYWN0U2xvdFZpc2l0b3IuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAK
QEAgLTMzLDEzICszMywxMyBAQCBjbGFzcyBWaXNpdENvdW50ZXIgewogcHVibGljOgogICAgIFZp
c2l0Q291bnRlcigpIHsgfQogICAgIAotICAgIFZpc2l0Q291bnRlcihTbG90VmlzaXRvciYgdmlz
aXRvcikKKyAgICBWaXNpdENvdW50ZXIoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKICAg
ICAgICAgOiBtX3Zpc2l0b3IoJnZpc2l0b3IpCiAgICAgICAgICwgbV9pbml0aWFsVmlzaXRDb3Vu
dCh2aXNpdG9yLnZpc2l0Q291bnQoKSkKICAgICB7CiAgICAgfQogICAgIAotICAgIFNsb3RWaXNp
dG9yJiB2aXNpdG9yKCkgY29uc3QgeyByZXR1cm4gKm1fdmlzaXRvcjsgfQorICAgIEFic3RyYWN0
U2xvdFZpc2l0b3ImIHZpc2l0b3IoKSBjb25zdCB7IHJldHVybiAqbV92aXNpdG9yOyB9CiAgICAg
CiAgICAgc2l6ZV90IHZpc2l0Q291bnQoKSBjb25zdAogICAgIHsKQEAgLTQ3LDcgKzQ3LDcgQEAg
cHVibGljOgogICAgIH0KICAgICAKIHByaXZhdGU6Ci0gICAgU2xvdFZpc2l0b3IqIG1fdmlzaXRv
ciB7IG51bGxwdHIgfTsKKyAgICBBYnN0cmFjdFNsb3RWaXNpdG9yKiBtX3Zpc2l0b3IgeyBudWxs
cHRyIH07CiAgICAgc2l6ZV90IG1faW5pdGlhbFZpc2l0Q291bnQgeyAwIH07CiB9OwogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrQmxvY2suY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtCbG9jay5jcHAJKHJldmlzaW9uIDI3MTQ0
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtCbG9jay5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTk4LDggKzk4LDggQEAgdm9pZCBXZWFrQmxvY2s6OnN3ZWVwKCkKICAgICBBU1NF
UlQoIW1fc3dlZXBSZXN1bHQuaXNOdWxsKCkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBDb250
YWluZXJUeXBlPgotdm9pZCBXZWFrQmxvY2s6OnNwZWNpYWxpemVkVmlzaXQoQ29udGFpbmVyVHlw
ZSYgY29udGFpbmVyLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIENv
bnRhaW5lclR5cGUsIHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFdlYWtCbG9jazo6c3BlY2lhbGl6
ZWRWaXNpdChDb250YWluZXJUeXBlJiBjb250YWluZXIsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAg
ICAgSGVhcFZlcnNpb24gbWFya2luZ1ZlcnNpb24gPSB2aXNpdG9yLm1hcmtpbmdWZXJzaW9uKCk7
CiAKQEAgLTEzNCw3ICsxMzQsOSBAQCB2b2lkIFdlYWtCbG9jazo6c3BlY2lhbGl6ZWRWaXNpdChD
b250YWluCiAgICAgfQogfQogCi12b2lkIFdlYWtCbG9jazo6dmlzaXQoU2xvdFZpc2l0b3ImIHZp
c2l0b3IpCisvL3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+CisvL3ZvaWQgV2Vha0Jsb2NrOjp2
aXNpdChWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBXZWFrQmxvY2s6OnZpc2l0MShBYnN0cmFjdFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIC8vIElmIGEgYmxvY2sgaXMgY29tcGxldGVseSBl
bXB0eSwgYSB2aXNpdCB3b24ndCBoYXZlIGFueSBlZmZlY3QuCiAgICAgaWYgKGlzRW1wdHkoKSkK
QEAgLTE0OSw2ICsxNTEsOSBAQCB2b2lkIFdlYWtCbG9jazo6dmlzaXQoU2xvdFZpc2l0b3ImIHZp
c2l0CiAgICAgICAgIHNwZWNpYWxpemVkVmlzaXQobV9jb250YWluZXIubWFya2VkQmxvY2soKSwg
dmlzaXRvcik7CiB9CiAKKy8vdGVtcGxhdGUgdm9pZCBXZWFrQmxvY2s6OnZpc2l0KFNsb3RWaXNp
dG9yJik7CisvL3RlbXBsYXRlIHZvaWQgV2Vha0Jsb2NrOjp2aXNpdChEZWJ1Z1Nsb3RWaXNpdG9y
Jik7CisKIHZvaWQgV2Vha0Jsb2NrOjpyZWFwKCkKIHsKICAgICAvLyBJZiBhIGJsb2NrIGlzIGNv
bXBsZXRlbHkgZW1wdHksIGEgcmVhcGluZyB3b24ndCBoYXZlIGFueSBlZmZlY3QuCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrQmxvY2suaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrQmxvY2suaAkocmV2aXNpb24gMjcxNDQzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha0Jsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAg
LTMyLDggKzMyLDkgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKK2NsYXNzIEFic3RyYWN0U2xvdFZp
c2l0b3I7CiBjbGFzcyBIZWFwOwotY2xhc3MgU2xvdFZpc2l0b3I7CisvL2NsYXNzIFNsb3RWaXNp
dG9yOwogCiBERUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihXZWFrQmxvY2sp
OwogCkBAIC02NSw3ICs2Niw4IEBAIHB1YmxpYzoKICAgICB2b2lkIHN3ZWVwKCk7CiAgICAgU3dl
ZXBSZXN1bHQgdGFrZVN3ZWVwUmVzdWx0KCk7CiAKLSAgICB2b2lkIHZpc2l0KFNsb3RWaXNpdG9y
Jik7CisvLyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIHZpc2l0KFZpc2l0b3Im
KTsKKyAgICB2b2lkIHZpc2l0MShBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAKICAgICB2b2lkIHJl
YXAoKTsKIApAQCAtNzUsOCArNzcsOCBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIHN0YXRpYyBG
cmVlQ2VsbCogYXNGcmVlQ2VsbChXZWFrSW1wbCopOwogICAgIAotICAgIHRlbXBsYXRlPHR5cGVu
YW1lIENvbnRhaW5lclR5cGU+Ci0gICAgdm9pZCBzcGVjaWFsaXplZFZpc2l0KENvbnRhaW5lclR5
cGUmLCBTbG90VmlzaXRvciYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIENvbnRhaW5lclR5cGUs
IHR5cGVuYW1lIFZpc2l0b3I+CisgICAgdm9pZCBzcGVjaWFsaXplZFZpc2l0KENvbnRhaW5lclR5
cGUmLCBWaXNpdG9yJik7CiAKICAgICBleHBsaWNpdCBXZWFrQmxvY2soQ2VsbENvbnRhaW5lcik7
CiAgICAgdm9pZCBmaW5hbGl6ZShXZWFrSW1wbCopOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvV2Vha0hhbmRsZU93bmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9XZWFrSGFuZGxlT3duZXIuY3BwCShyZXZpc2lvbiAyNzE0NDMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrSGFuZGxlT3duZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zNSw3ICszNSw3IEBAIFdlYWtIYW5kbGVPd25lcjo6fldlYWtIYW5kbGVPd25lcigp
CiB7CiB9CiAKLWJvb2wgV2Vha0hhbmRsZU93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290
cyhIYW5kbGU8VW5rbm93bj4sIHZvaWQqLCBTbG90VmlzaXRvciYsIGNvbnN0IGNoYXIqKikKK2Jv
b2wgV2Vha0hhbmRsZU93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhIYW5kbGU8VW5r
bm93bj4sIHZvaWQqLCBBYnN0cmFjdFNsb3RWaXNpdG9yJiwgY29uc3QgY2hhcioqKQogewogICAg
IHJldHVybiBmYWxzZTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtI
YW5kbGVPd25lci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dl
YWtIYW5kbGVPd25lci5oCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9XZWFrSGFuZGxlT3duZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjksMTMgKzI5LDEz
IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1jbGFzcyBTbG90VmlzaXRvcjsKK2NsYXNzIEFic3Ry
YWN0U2xvdFZpc2l0b3I7CiAKIGNsYXNzIEpTX0VYUE9SVF9QUklWQVRFIFdlYWtIYW5kbGVPd25l
ciB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+V2Vha0hhbmRsZU93bmVyKCk7CiAgICAgLy8gcmVh
c29uIHdpbGwgb25seSBiZSBub24tbnVsbCB3aGVuIGdlbmVyYXRpbmcgYSBkZWJ1ZyBHQyBoZWFw
IHNuYXBzaG90LgotICAgIHZpcnR1YWwgYm9vbCBpc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhI
YW5kbGU8VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIFNsb3RWaXNpdG9yJiwgY2hhciBjb25zdCoq
IHJlYXNvbiA9IG51bGxwdHIpOworICAgIHZpcnR1YWwgYm9vbCBpc1JlYWNoYWJsZUZyb21PcGFx
dWVSb290cyhIYW5kbGU8VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIEFic3RyYWN0U2xvdFZpc2l0
b3ImLCBjaGFyIGNvbnN0KiogcmVhc29uID0gbnVsbHB0cik7CiAgICAgdmlydHVhbCB2b2lkIGZp
bmFsaXplKEhhbmRsZTxVbmtub3duPiwgdm9pZCogY29udGV4dCk7CiB9OwogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtJbmxpbmVzLmgJKHJldmlzaW9uIDI3MTQ0MykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTI2LDYgKzI2LDcgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiSlNDYXN0LmgiCisj
aW5jbHVkZSAiV2Vhay5oIgogI2luY2x1ZGUgIldlYWtTZXRJbmxpbmVzLmgiCiAjaW5jbHVkZSA8
d3RmL0Fzc2VydGlvbnMuaD4KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vh
a1NldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtTZXQu
aAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha1Nl
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC01MSw3ICs1MSw4IEBAIHB1YmxpYzoKICAgICBib29sIGlz
RW1wdHkoKSBjb25zdDsKICAgICBib29sIGlzVHJpdmlhbGx5RGVzdHJ1Y3RpYmxlKCkgY29uc3Q7
CiAKLSAgICB2b2lkIHZpc2l0KFNsb3RWaXNpdG9yJik7CisvLyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBWaXNpdG9yPiB2b2lkIHZpc2l0KFZpc2l0b3ImKTsKKyAgICB2b2lkIHZpc2l0MShBYnN0cmFj
dFNsb3RWaXNpdG9yJik7CiAKICAgICB2b2lkIHJlYXAoKTsKICAgICB2b2lkIHN3ZWVwKCk7CkBA
IC0xMTQsMTAgKzExNSwxMiBAQCBpbmxpbmUgdm9pZCBXZWFrU2V0OjpsYXN0Q2hhbmNlVG9GaW5h
bGl6CiAgICAgICAgIGJsb2NrLT5sYXN0Q2hhbmNlVG9GaW5hbGl6ZSgpOwogfQogCi1pbmxpbmUg
dm9pZCBXZWFrU2V0Ojp2aXNpdChTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vdGVtcGxhdGU8dHlw
ZW5hbWUgVmlzaXRvcj4KKy8vaW5saW5lIHZvaWQgV2Vha1NldDo6dmlzaXQoVmlzaXRvciYgdmlz
aXRvcikKK2lubGluZSB2b2lkIFdlYWtTZXQ6OnZpc2l0MShBYnN0cmFjdFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQogewogICAgIGZvciAoV2Vha0Jsb2NrKiBibG9jayA9IG1fYmxvY2tzLmhlYWQoKTsg
YmxvY2s7IGJsb2NrID0gYmxvY2stPm5leHQoKSkKLSAgICAgICAgYmxvY2stPnZpc2l0KHZpc2l0
b3IpOworICAgICAgICBibG9jay0+dmlzaXQxKHZpc2l0b3IpOwogfQogCiBpbmxpbmUgdm9pZCBX
ZWFrU2V0OjpyZWFwKCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9T
aGFkb3dDaGlja2VuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50
ZXJwcmV0ZXIvU2hhZG93Q2hpY2tlbi5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TaGFkb3dDaGlja2VuLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDQwLDcgKzQ0MCw3IEBAIHZvaWQgU2hhZG93Q2hpY2tlbjo6dXBkYXRlKFZNJiB2bSwg
Q2FsbEYKICAgICAgICAgZGF0YUxvZygiICAgIEFmdGVyIGNsZWFuLXVwOiAiLCAqdGhpcywgIlxu
Iik7CiB9CiAKLXZvaWQgU2hhZG93Q2hpY2tlbjo6dmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYg
dmlzaXRvcikKK3ZvaWQgU2hhZG93Q2hpY2tlbjo6dmlzaXRDaGlsZHJlbihBYnN0cmFjdFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQogewogICAgIGZvciAodW5zaWduZWQgaSA9IG1fbG9nQ3Vyc29yIC0g
bV9sb2c7IGktLTspIHsKICAgICAgICAgSlNPYmplY3QqIGNhbGxlZSA9IG1fbG9nW2ldLmNhbGxl
ZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TaGFkb3dDaGlja2Vu
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1NoYWRv
d0NoaWNrZW4uaAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
dGVycHJldGVyL1NoYWRvd0NoaWNrZW4uaAkod29ya2luZyBjb3B5KQpAQCAtMzUsMTMgKzM1LDEz
IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCitjbGFzcyBBYnN0cmFjdFNsb3RWaXNpdG9yOwogY2xh
c3MgQ2FsbEZyYW1lOwogY2xhc3MgQ29kZUJsb2NrOwogY2xhc3MgSlNBcnJheTsKIGNsYXNzIEpT
T2JqZWN0OwogY2xhc3MgSlNTY29wZTsKIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKLWNs
YXNzIFNsb3RWaXNpdG9yOwogY2xhc3MgVk07CiAKIC8vIFNoYWRvd0NoaWNrZW4gaXMgYSBsb2cg
dGhhdCBjYW4gYmUgdXNlZCB0byBwcm9kdWNlIGEgc2hhZG93IHN0YWNrIG9mIENISUNLRU4tc3R5
bGUgc3RhY2sgZnJhbWVzLgpAQCAtMTk2LDcgKzE5Niw3IEBAIHB1YmxpYzoKICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBGdW5jdG9yPgogICAgIHZvaWQgaXRlcmF0ZShWTSYsIENhbGxGcmFtZSosIGNv
bnN0IEZ1bmN0b3ImKTsKICAgICAKLSAgICB2b2lkIHZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3Im
KTsKKyAgICB2b2lkIHZpc2l0Q2hpbGRyZW4oQWJzdHJhY3RTbG90VmlzaXRvciYpOwogICAgIHZv
aWQgcmVzZXQoKTsKICAgICAKICAgICAvLyBKSVQgc3VwcG9ydC4KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvR0NBd2FyZUpJVFN0dWJSb3V0aW5lLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0dDQXdhcmVKSVRTdHViUm91dGluZS5jcHAJKHJldmlz
aW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvR0NBd2FyZUpJVFN0dWJS
b3V0aW5lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzMsMTAgKzczLDE1IEBAIHZvaWQgR0NBd2Fy
ZUpJVFN0dWJSb3V0aW5lOjpkZWxldGVGcm9tR0MKICAgICBkZWxldGUgdGhpczsKIH0KIAotdm9p
ZCBHQ0F3YXJlSklUU3R1YlJvdXRpbmU6Om1hcmtSZXF1aXJlZE9iamVjdHNJbnRlcm5hbChTbG90
VmlzaXRvciYpCisvL3ZvaWQgR0NBd2FyZUpJVFN0dWJSb3V0aW5lOjptYXJrUmVxdWlyZWRPYmpl
Y3RzSW50ZXJuYWwoU2xvdFZpc2l0b3ImKQordm9pZCBHQ0F3YXJlSklUU3R1YlJvdXRpbmU6Om1h
cmtSZXF1aXJlZE9iamVjdHNJbnRlcm5hbDEoQWJzdHJhY3RTbG90VmlzaXRvciYpCiB7CiB9CiAK
Ky8vdm9pZCBHQ0F3YXJlSklUU3R1YlJvdXRpbmU6Om1hcmtSZXF1aXJlZE9iamVjdHNJbnRlcm5h
bChEZWJ1Z1Nsb3RWaXNpdG9yJikKKy8veworLy99CisKIE1hcmtpbmdHQ0F3YXJlSklUU3R1YlJv
dXRpbmU6Ok1hcmtpbmdHQ0F3YXJlSklUU3R1YlJvdXRpbmUoCiAgICAgY29uc3QgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiYgY29kZSwgVk0mIHZtLCBjb25zdCBK
U0NlbGwqIG93bmVyLAogICAgIGNvbnN0IFZlY3RvcjxKU0NlbGwqPiYgY2VsbHMsIEJhZzxDYWxs
TGlua0luZm8+JiYgY2FsbExpbmtJbmZvcykKQEAgLTkyLDEyICs5NywxOSBAQCBNYXJraW5nR0NB
d2FyZUpJVFN0dWJSb3V0aW5lOjp+TWFya2luZ0dDCiB7CiB9CiAKLXZvaWQgTWFya2luZ0dDQXdh
cmVKSVRTdHViUm91dGluZTo6bWFya1JlcXVpcmVkT2JqZWN0c0ludGVybmFsKFNsb3RWaXNpdG9y
JiB2aXNpdG9yKQorLy92b2lkIE1hcmtpbmdHQ0F3YXJlSklUU3R1YlJvdXRpbmU6Om1hcmtSZXF1
aXJlZE9iamVjdHNJbnRlcm5hbChTbG90VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgTWFya2luZ0dD
QXdhcmVKSVRTdHViUm91dGluZTo6bWFya1JlcXVpcmVkT2JqZWN0c0ludGVybmFsMShBYnN0cmFj
dFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGZvciAoYXV0byYgZW50cnkgOiBtX2NlbGxz
KQogICAgICAgICB2aXNpdG9yLmFwcGVuZChlbnRyeSk7CiB9CiAKKy8vIEZJWE1FIGRlZHVwZT8K
Ky8vdm9pZCBNYXJraW5nR0NBd2FyZUpJVFN0dWJSb3V0aW5lOjptYXJrUmVxdWlyZWRPYmplY3Rz
SW50ZXJuYWwoRGVidWdTbG90VmlzaXRvciYgdmlzaXRvcikKKy8veworLy8gICAgZm9yIChhdXRv
JiBlbnRyeSA6IG1fY2VsbHMpCisvLyAgICAgICAgdmlzaXRvci5hcHBlbmQoZW50cnkpOworLy99
CiAKIEdDQXdhcmVKSVRTdHViUm91dGluZVdpdGhFeGNlcHRpb25IYW5kbGVyOjpHQ0F3YXJlSklU
U3R1YlJvdXRpbmVXaXRoRXhjZXB0aW9uSGFuZGxlcigKICAgICBjb25zdCBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY8SklUU3R1YlJvdXRpbmVQdHJUYWc+JiBjb2RlLCBWTSYgdm0sICBjb25zdCBKU0Nl
bGwqIG93bmVyLCBjb25zdCBWZWN0b3I8SlNDZWxsKj4mIGNlbGxzLCBCYWc8Q2FsbExpbmtJbmZv
PiYmIGNhbGxMaW5rSW5mb3MsCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0dDQXdh
cmVKSVRTdHViUm91dGluZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvR0NBd2FyZUpJVFN0dWJSb3V0aW5lLmgJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvR0NBd2FyZUpJVFN0dWJSb3V0aW5lLmgJKHdvcmtpbmcgY29weSkK
QEAgLTYwLDEwICs2MCwxMiBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBHQ0F3YXJlSklUU3R1YlJvdXRpbmUoY29kZSwgdm0pKTsKICAgICB9Ci0gICAgCi0g
ICAgdm9pZCBtYXJrUmVxdWlyZWRPYmplY3RzKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorCisvLyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgorLy8gICAgdm9pZCBtYXJrUmVxdWlyZWRPYmpl
Y3RzKFZpc2l0b3ImIHZpc2l0b3IpCisgICAgdm9pZCBtYXJrUmVxdWlyZWRPYmplY3RzMShBYnN0
cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogICAgIHsKLSAgICAgICAgbWFya1JlcXVpcmVkT2Jq
ZWN0c0ludGVybmFsKHZpc2l0b3IpOworICAgICAgICBtYXJrUmVxdWlyZWRPYmplY3RzSW50ZXJu
YWwxKHZpc2l0b3IpOwogICAgIH0KICAgICAKICAgICB2b2lkIGRlbGV0ZUZyb21HQygpOwpAQCAt
NzEsNyArNzMsOSBAQCBwdWJsaWM6CiBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBvYnNlcnZlWmVyb1Jl
ZkNvdW50KCkgb3ZlcnJpZGU7CiAgICAgCi0gICAgdmlydHVhbCB2b2lkIG1hcmtSZXF1aXJlZE9i
amVjdHNJbnRlcm5hbChTbG90VmlzaXRvciYpOworLy8gICAgdmlydHVhbCB2b2lkIG1hcmtSZXF1
aXJlZE9iamVjdHNJbnRlcm5hbChTbG90VmlzaXRvciYpOworLy8gICAgdmlydHVhbCB2b2lkIG1h
cmtSZXF1aXJlZE9iamVjdHNJbnRlcm5hbChEZWJ1Z1Nsb3RWaXNpdG9yJik7CisgICAgdmlydHVh
bCB2b2lkIG1hcmtSZXF1aXJlZE9iamVjdHNJbnRlcm5hbDEoQWJzdHJhY3RTbG90VmlzaXRvciYp
OwogCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBKSVRTdHViUm91dGluZVNldDsKQEAgLTg5
LDcgKzkzLDkgQEAgcHVibGljOgogICAgIH5NYXJraW5nR0NBd2FyZUpJVFN0dWJSb3V0aW5lKCkg
b3ZlcnJpZGU7CiAgICAgCiBwcm90ZWN0ZWQ6Ci0gICAgdm9pZCBtYXJrUmVxdWlyZWRPYmplY3Rz
SW50ZXJuYWwoU2xvdFZpc2l0b3ImKSBvdmVycmlkZTsKKy8vICAgIHZvaWQgbWFya1JlcXVpcmVk
T2JqZWN0c0ludGVybmFsKFNsb3RWaXNpdG9yJikgb3ZlcnJpZGU7CisvLyAgICB2b2lkIG1hcmtS
ZXF1aXJlZE9iamVjdHNJbnRlcm5hbChEZWJ1Z1Nsb3RWaXNpdG9yJikgb3ZlcnJpZGU7CisgICAg
dm9pZCBtYXJrUmVxdWlyZWRPYmplY3RzSW50ZXJuYWwxKEFic3RyYWN0U2xvdFZpc2l0b3ImKSBv
dmVycmlkZTsKIAogcHJpdmF0ZToKICAgICBWZWN0b3I8V3JpdGVCYXJyaWVyPEpTQ2VsbD4+IG1f
Y2VsbHM7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1BvbHltb3JwaGljQ2FsbFN0
dWJSb3V0aW5lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Bv
bHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lLmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9Qb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEzNSwxMiArMTM1LDIwIEBAIGJvb2wgUG9seW1vcnBoaWNDYWxsU3R1YlJv
dXRpbmU6OnZpc2l0V2UKICAgICByZXR1cm4gaXNTdGlsbExpdmU7CiB9CiAKLXZvaWQgUG9seW1v
cnBoaWNDYWxsU3R1YlJvdXRpbmU6Om1hcmtSZXF1aXJlZE9iamVjdHNJbnRlcm5hbChTbG90Vmlz
aXRvciYgdmlzaXRvcikKKy8vdm9pZCBQb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZTo6bWFya1Jl
cXVpcmVkT2JqZWN0c0ludGVybmFsKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBQb2x5bW9y
cGhpY0NhbGxTdHViUm91dGluZTo6bWFya1JlcXVpcmVkT2JqZWN0c0ludGVybmFsMShBYnN0cmFj
dFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGZvciAoYXV0byYgdmFyaWFudCA6IG1fdmFy
aWFudHMpCiAgICAgICAgIHZpc2l0b3IuYXBwZW5kKHZhcmlhbnQpOwogfQogCisvLy8vIG1sYW0g
RklYTUUgZGVkdXBlPz8/CisvL3ZvaWQgUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmU6Om1hcmtS
ZXF1aXJlZE9iamVjdHNJbnRlcm5hbChEZWJ1Z1Nsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy97Cisv
LyAgICBmb3IgKGF1dG8mIHZhcmlhbnQgOiBtX3ZhcmlhbnRzKQorLy8gICAgICAgIHZpc2l0b3Iu
YXBwZW5kKHZhcmlhbnQpOworLy99CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8g
RU5BQkxFKEpJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUG9seW1vcnBoaWND
YWxsU3R1YlJvdXRpbmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L1BvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lLmgJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTA1LDcgKzEwNSw5IEBAIHB1YmxpYzoKICAgICBib29sIHZpc2l0V2VhayhW
TSYpIGZpbmFsOwogCiBwcml2YXRlOgotICAgIHZvaWQgbWFya1JlcXVpcmVkT2JqZWN0c0ludGVy
bmFsKFNsb3RWaXNpdG9yJikgZmluYWw7CisvLyAgICB2b2lkIG1hcmtSZXF1aXJlZE9iamVjdHNJ
bnRlcm5hbChTbG90VmlzaXRvciYpIGZpbmFsOworLy8gICAgdm9pZCBtYXJrUmVxdWlyZWRPYmpl
Y3RzSW50ZXJuYWwoRGVidWdTbG90VmlzaXRvciYpIGZpbmFsOworICAgIHZvaWQgbWFya1JlcXVp
cmVkT2JqZWN0c0ludGVybmFsMShBYnN0cmFjdFNsb3RWaXNpdG9yJikgZmluYWw7CiAKICAgICBW
ZWN0b3I8V3JpdGVCYXJyaWVyPEpTQ2VsbD4sIDI+IG1fdmFyaWFudHM7CiAgICAgVW5pcXVlQXJy
YXk8dWludDMyX3Q+IG1fZmFzdENvdW50czsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0Fic3RyYWN0TW9kdWxlUmVjb3JkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9BYnN0cmFjdE1vZHVsZVJlY29yZC5jcHAJKHJldmlzaW9uIDI3
MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Fic3RyYWN0TW9kdWxlUmVj
b3JkLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjAsNyArNjAsOCBAQCB2b2lkIEFic3RyYWN0TW9k
dWxlUmVjb3JkOjpmaW5pc2hDcmVhdGlvCiAgICAgcHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKHZtLCAiZGVwZW5kZW5jaWVzTWFwIl9zKSwgbV9kZXBlbmRlbmNpZXNNYXAuZ2V0
KCkpOwogfQogCi12b2lkIEFic3RyYWN0TW9kdWxlUmVjb3JkOjp2aXNpdENoaWxkcmVuKEpTQ2Vs
bCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
Pgordm9pZCBBYnN0cmFjdE1vZHVsZVJlY29yZDo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBj
ZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEFic3RyYWN0TW9kdWxlUmVjb3JkKiB0aGlz
T2JqZWN0ID0ganNDYXN0PEFic3RyYWN0TW9kdWxlUmVjb3JkKj4oY2VsbCk7CiAgICAgQVNTRVJU
X0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNzAsNiArNzEsOCBA
QCB2b2lkIEFic3RyYWN0TW9kdWxlUmVjb3JkOjp2aXNpdENoaWxkcmVuCiAgICAgdmlzaXRvci5h
cHBlbmQodGhpc09iamVjdC0+bV9kZXBlbmRlbmNpZXNNYXApOwogfQogCitERUZJTkVfVklTSVRf
Q0hJTERSRU4oQWJzdHJhY3RNb2R1bGVSZWNvcmQpOworCiB2b2lkIEFic3RyYWN0TW9kdWxlUmVj
b3JkOjphcHBlbmRSZXF1ZXN0ZWRNb2R1bGUoY29uc3QgSWRlbnRpZmllciYgbW9kdWxlTmFtZSkK
IHsKICAgICBtX3JlcXVlc3RlZE1vZHVsZXMuYWRkKG1vZHVsZU5hbWUuaW1wbCgpKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Fic3RyYWN0TW9kdWxlUmVjb3JkLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQWJzdHJhY3RNb2R1bGVS
ZWNvcmQuaAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvQWJzdHJhY3RNb2R1bGVSZWNvcmQuaAkod29ya2luZyBjb3B5KQpAQCAtMTM2LDcgKzEzNiw3
IEBAIHByb3RlY3RlZDoKICAgICBBYnN0cmFjdE1vZHVsZVJlY29yZChWTSYsIFN0cnVjdHVyZSos
IGNvbnN0IElkZW50aWZpZXImKTsKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTR2xvYmFsT2Jq
ZWN0KiwgVk0mKTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xv
dFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgdm9pZCBzZXRN
b2R1bGVFbnZpcm9ubWVudChKU0dsb2JhbE9iamVjdCosIEpTTW9kdWxlRW52aXJvbm1lbnQqKTsK
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJnTGlzdC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJnTGlzdC5jcHAJKHJldmlz
aW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FyZ0xpc3QuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC01MSw3ICs1MSw3IEBAIHZvaWQgQXJnTGlzdDo6Z2V0U2xpY2Uo
aW50IHN0YXJ0SW5kZXgsIEEKICAgICByZXN1bHQubV9hcmdDb3VudCA9ICBtX2FyZ0NvdW50IC0g
c3RhcnRJbmRleDsKIH0KIAotdm9pZCBNYXJrZWRBcmd1bWVudEJ1ZmZlcjo6bWFya0xpc3RzKFNs
b3RWaXNpdG9yJiB2aXNpdG9yLCBMaXN0U2V0JiBtYXJrU2V0KQordm9pZCBNYXJrZWRBcmd1bWVu
dEJ1ZmZlcjo6bWFya0xpc3RzKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIExpc3RTZXQm
IG1hcmtTZXQpCiB7CiAgICAgTGlzdFNldDo6aXRlcmF0b3IgZW5kID0gbWFya1NldC5lbmQoKTsK
ICAgICBmb3IgKExpc3RTZXQ6Oml0ZXJhdG9yIGl0ID0gbWFya1NldC5iZWdpbigpOyBpdCAhPSBl
bmQ7ICsraXQpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FyZ0xpc3Qu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcmdMaXN0LmgJ
KHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FyZ0xp
c3QuaAkod29ya2luZyBjb3B5KQpAQCAtMTE4LDcgKzExOCw3IEBAIHB1YmxpYzoKICAgICAgICAg
cmV0dXJuIHJlc3VsdDsKICAgICB9CiAgICAgICAgIAotICAgIHN0YXRpYyB2b2lkIG1hcmtMaXN0
cyhTbG90VmlzaXRvciYsIExpc3RTZXQmKTsKKyAgICBzdGF0aWMgdm9pZCBtYXJrTGlzdHMoQWJz
dHJhY3RTbG90VmlzaXRvciYsIExpc3RTZXQmKTsKIAogICAgIHZvaWQgZW5zdXJlQ2FwYWNpdHko
c2l6ZV90IHJlcXVlc3RlZENhcGFjaXR5KQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0NhY2hlYWJsZUlkZW50aWZpZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWFibGVJZGVudGlmaWVyLmgJKHJldmlzaW9uIDI3
MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlYWJsZUlkZW50aWZp
ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzksMTAgKzM5LDExIEBAIHVzaW5nIFdURjo6VW5pcXVl
ZFN0cmluZ0ltcGw7CiAKIG5hbWVzcGFjZSBKU0MgewogCitjbGFzcyBBYnN0cmFjdFNsb3RWaXNp
dG9yOwogY2xhc3MgQ29kZUJsb2NrOwogY2xhc3MgSWRlbnRpZmllcjsKIGNsYXNzIEpTQ2VsbDsK
LWNsYXNzIFNsb3RWaXNpdG9yOworLy9jbGFzcyBTbG90VmlzaXRvcjsKIAogY2xhc3MgQ2FjaGVh
YmxlSWRlbnRpZmllciB7CiBwdWJsaWM6CkBAIC04Nyw3ICs4OCw4IEBAIHB1YmxpYzoKIAogICAg
IHVpbnRwdHJfdCByYXdCaXRzKCkgY29uc3QgeyByZXR1cm4gbV9iaXRzOyB9CiAKLSAgICBpbmxp
bmUgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYpIGNvbnN0OworLy8gICAgdGVtcGxh
dGU8dHlwZW5hbWUgVmlzaXRvcj4gaW5saW5lIHZvaWQgdmlzaXRBZ2dyZWdhdGUoVmlzaXRvciYp
IGNvbnN0OworICAgIGlubGluZSB2b2lkIHZpc2l0QWdncmVnYXRlMShBYnN0cmFjdFNsb3RWaXNp
dG9yJikgY29uc3Q7CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGR1bXAoUHJpbnRTdHJl
YW0mKSBjb25zdDsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVh
YmxlSWRlbnRpZmllcklubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9DYWNoZWFibGVJZGVudGlmaWVySW5saW5lcy5oCShyZXZpc2lvbiAyNzE0NDMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWFibGVJZGVudGlmaWVySW5s
aW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzcsMTIgKzEzNywxNiBAQCBpbmxpbmUgdm9pZCBD
YWNoZWFibGVJZGVudGlmaWVyOjpzZXRVaWRCCiAgICAgbV9iaXRzID0gYml0d2lzZV9jYXN0PHVp
bnRwdHJfdD4odWlkKSB8IHNfdWlkVGFnOwogfQogCi1pbmxpbmUgdm9pZCBDYWNoZWFibGVJZGVu
dGlmaWVyOjp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYgdmlzaXRvcikgY29uc3QKKy8vdGVt
cGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KKy8vaW5saW5lIHZvaWQgQ2FjaGVhYmxlSWRlbnRpZmll
cjo6dmlzaXRBZ2dyZWdhdGUoVmlzaXRvciYgdmlzaXRvcikgY29uc3QKK2lubGluZSB2b2lkIENh
Y2hlYWJsZUlkZW50aWZpZXI6OnZpc2l0QWdncmVnYXRlMShBYnN0cmFjdFNsb3RWaXNpdG9yJiB2
aXNpdG9yKSBjb25zdAogewogICAgIGlmIChtX2JpdHMgJiYgaXNDZWxsKCkpCiAgICAgICAgIHZp
c2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQoY2VsbCgpKTsKIH0KIAorLy90ZW1wbGF0ZSB2b2lkIENh
Y2hlYWJsZUlkZW50aWZpZXI6OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJikgY29uc3Q7Cisv
L3RlbXBsYXRlIHZvaWQgQ2FjaGVhYmxlSWRlbnRpZmllcjo6dmlzaXRBZ2dyZWdhdGUoRGVidWdT
bG90VmlzaXRvciYpIGNvbnN0OwogCiBpbmxpbmUgYm9vbCBDYWNoZWFibGVJZGVudGlmaWVyOjpv
cGVyYXRvcj09KGNvbnN0IENhY2hlYWJsZUlkZW50aWZpZXImIG90aGVyKSBjb25zdAogewpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xhc3NJbmZvLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xhc3NJbmZvLmgJKHJldmlzaW9uIDI3
MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NsYXNzSW5mby5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00NCw5ICs0NCw2IEBAIHN0cnVjdCBNZXRob2RUYWJsZSB7CiAgICAgdXNp
bmcgRGVzdHJveUZ1bmN0aW9uUHRyID0gdm9pZCAoKikoSlNDZWxsKik7CiAgICAgRGVzdHJveUZ1
bmN0aW9uUHRyIE1FVEhPRF9UQUJMRV9FTlRSWShkZXN0cm95KTsKIAotICAgIHVzaW5nIFZpc2l0
Q2hpbGRyZW5GdW5jdGlvblB0ciA9IHZvaWQgKCopKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7Ci0g
ICAgVmlzaXRDaGlsZHJlbkZ1bmN0aW9uUHRyIE1FVEhPRF9UQUJMRV9FTlRSWSh2aXNpdENoaWxk
cmVuKTsKLQogICAgIHVzaW5nIEdldENhbGxEYXRhRnVuY3Rpb25QdHIgPSBDYWxsRGF0YSAoKiko
SlNDZWxsKik7CiAgICAgR2V0Q2FsbERhdGFGdW5jdGlvblB0ciBNRVRIT0RfVEFCTEVfRU5UUlko
Z2V0Q2FsbERhdGEpOwogCkBAIC0xMjAsNyArMTE3LDE4IEBAIHN0cnVjdCBNZXRob2RUYWJsZSB7
CiAgICAgdXNpbmcgRXN0aW1hdGVkU2l6ZUZ1bmN0aW9uUHRyID0gc2l6ZV90ICgqKShKU0NlbGwq
LCBWTSYpOwogICAgIEVzdGltYXRlZFNpemVGdW5jdGlvblB0ciBNRVRIT0RfVEFCTEVfRU5UUlko
ZXN0aW1hdGVkU2l6ZSk7CiAKLSAgICB1c2luZyBWaXNpdE91dHB1dENvbnN0cmFpbnRzUHRyID0g
dm9pZCAoKikoSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICB1c2luZyBWaXNpdENoaWxkcmVu
RnVuY3Rpb25QdHIgPSB2b2lkICgqKShKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIFZpc2l0
Q2hpbGRyZW5GdW5jdGlvblB0ciBNRVRIT0RfVEFCTEVfRU5UUlkodmlzaXRDaGlsZHJlbldpdGhT
bG90VmlzaXRvcik7CisKKy8vICAgIHVzaW5nIFZpc2l0Q2hpbGRyZW5XaXRoRGVidWdTbG90Vmlz
aXRvclB0ciA9IHZvaWQgKCopKEpTQ2VsbCosIERlYnVnU2xvdFZpc2l0b3ImKTsKKyAgICB1c2lu
ZyBWaXNpdENoaWxkcmVuV2l0aEFic3RyYWN0U2xvdFZpc2l0b3JQdHIgPSB2b2lkICgqKShKU0Nl
bGwqLCBBYnN0cmFjdFNsb3RWaXNpdG9yJik7CisgICAgVmlzaXRDaGlsZHJlbldpdGhBYnN0cmFj
dFNsb3RWaXNpdG9yUHRyIE1FVEhPRF9UQUJMRV9FTlRSWSh2aXNpdENoaWxkcmVuV2l0aEFic3Ry
YWN0U2xvdFZpc2l0b3IpOworCisgICAgQUxXQVlTX0lOTElORSB2b2lkIHZpc2l0Q2hpbGRyZW4o
SlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikgY29uc3QgeyB2aXNpdENoaWxkcmVu
V2l0aFNsb3RWaXNpdG9yKGNlbGwsIHZpc2l0b3IpOyB9CisvLyAgICBBTFdBWVNfSU5MSU5FIHZv
aWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIERlYnVnU2xvdFZpc2l0b3ImIHZpc2l0b3Ip
IGNvbnN0IHsgdmlzaXRDaGlsZHJlbldpdGhEZWJ1Z1Nsb3RWaXNpdG9yKGNlbGwsIHZpc2l0b3Ip
OyB9CisgICAgQUxXQVlTX0lOTElORSB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBB
YnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBjb25zdCB7IHZpc2l0Q2hpbGRyZW5XaXRoQWJz
dHJhY3RTbG90VmlzaXRvcihjZWxsLCB2aXNpdG9yKTsgfQorCisgICAgdXNpbmcgVmlzaXRPdXRw
dXRDb25zdHJhaW50c1B0ciA9IHZvaWQgKCopKEpTQ2VsbCosIEFic3RyYWN0U2xvdFZpc2l0b3Im
KTsKICAgICBWaXNpdE91dHB1dENvbnN0cmFpbnRzUHRyIE1FVEhPRF9UQUJMRV9FTlRSWSh2aXNp
dE91dHB1dENvbnN0cmFpbnRzKTsKIH07CiAKQEAgLTE0Nyw3ICsxNTUsNiBAQCBzdHJ1Y3QgTWV0
aG9kVGFibGUgewogICAgIEpTQ2FzdGluZ0hlbHBlcnM6OkluaGVyaXRzVHJhaXRzPENsYXNzTmFt
ZT46OnR5cGVSYW5nZSwgXAogICAgIHsgXAogICAgICAgICAmQ2xhc3NOYW1lOjpkZXN0cm95LCBc
Ci0gICAgICAgICZDbGFzc05hbWU6OnZpc2l0Q2hpbGRyZW4sIFwKICAgICAgICAgJkNsYXNzTmFt
ZTo6Z2V0Q2FsbERhdGEsIFwKICAgICAgICAgJkNsYXNzTmFtZTo6Z2V0Q29uc3RydWN0RGF0YSwg
XAogICAgICAgICAmQ2xhc3NOYW1lOjpwdXQsIFwKQEAgLTE3Myw2ICsxODAsOCBAQCBzdHJ1Y3Qg
TWV0aG9kVGFibGUgewogICAgICAgICAmQ2xhc3NOYW1lOjpkdW1wVG9TdHJlYW0sIFwKICAgICAg
ICAgJkNsYXNzTmFtZTo6YW5hbHl6ZUhlYXAsIFwKICAgICAgICAgJkNsYXNzTmFtZTo6ZXN0aW1h
dGVkU2l6ZSwgXAorICAgICAgICAmQ2xhc3NOYW1lOjp2aXNpdENoaWxkcmVuLCBcCisgICAgICAg
ICZDbGFzc05hbWU6OnZpc2l0Q2hpbGRyZW4sIFwKICAgICAgICAgJkNsYXNzTmFtZTo6dmlzaXRP
dXRwdXRDb25zdHJhaW50cywgXAogICAgIH0sIFwKICAgICBDbGFzc05hbWU6OlR5cGVkQXJyYXlT
dG9yYWdlVHlwZSwgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xvbmVk
QXJndW1lbnRzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9DbG9uZWRBcmd1bWVudHMuY3BwCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9DbG9uZWRBcmd1bWVudHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
NjcsNyArMjY3LDggQEAgdm9pZCBDbG9uZWRBcmd1bWVudHM6Om1hdGVyaWFsaXplU3BlY2lhbAog
ICAgICAgICBtYXRlcmlhbGl6ZVNwZWNpYWxzKGdsb2JhbE9iamVjdCk7CiB9CiAKLXZvaWQgQ2xv
bmVkQXJndW1lbnRzOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZp
c2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBDbG9uZWRBcmd1bWVudHM6
OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAg
ICBDbG9uZWRBcmd1bWVudHMqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8Q2xvbmVkQXJndW1lbnRzKj4o
Y2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkp
OwpAQCAtMjc1LDUgKzI3Niw3IEBAIHZvaWQgQ2xvbmVkQXJndW1lbnRzOjp2aXNpdENoaWxkcmVu
KEpTQ2UKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2NhbGxlZSk7CiB9CiAKK0RF
RklORV9WSVNJVF9DSElMRFJFTihDbG9uZWRBcmd1bWVudHMpOworCiB9IC8vIG5hbWVzcGFjZSBK
U0MKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xvbmVkQXJndW1lbnRz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xvbmVkQXJn
dW1lbnRzLmgJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0Nsb25lZEFyZ3VtZW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC02Miw3ICs2Miw3IEBAIHB1
YmxpYzoKICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2Jh
bE9iamVjdCosIEpTVmFsdWUgcHJvdG90eXBlKTsKICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVh
dGVTbG93UHV0U3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlIHByb3RvdHlw
ZSk7CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9y
Jik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIERFQ0xBUkVfSU5GTzsKIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGlyZWN0QXJndW1lbnRzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EaXJlY3RBcmd1bWVu
dHMuY3BwCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9EaXJlY3RBcmd1bWVudHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MCw3ICs5MCw4IEBAIHNp
emVfdCBEaXJlY3RBcmd1bWVudHM6OmVzdGltYXRlZFNpemUoSlMKICAgICByZXR1cm4gQmFzZTo6
ZXN0aW1hdGVkU2l6ZShjZWxsLCB2bSkgKyBtYXBwZWRBcmd1bWVudHNTaXplICsgbW9kaWZpZWRB
cmd1bWVudHNTaXplOwogfQogCi12b2lkIERpcmVjdEFyZ3VtZW50czo6dmlzaXRDaGlsZHJlbihK
U0NlbGwqIHRoaXNDZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1l
IFZpc2l0b3I+Cit2b2lkIERpcmVjdEFyZ3VtZW50czo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxs
KiB0aGlzQ2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBEaXJlY3RBcmd1bWVudHMqIHRo
aXNPYmplY3QgPSBzdGF0aWNfY2FzdDxEaXJlY3RBcmd1bWVudHMqPih0aGlzQ2VsbCk7CiAgICAg
QVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtMTA0LDYg
KzEwNSw4IEBAIHZvaWQgRGlyZWN0QXJndW1lbnRzOjp2aXNpdENoaWxkcmVuKEpTQ2UKICAgICBH
ZW5lcmljQXJndW1lbnRzPERpcmVjdEFyZ3VtZW50cz46OnZpc2l0Q2hpbGRyZW4odGhpc0NlbGws
IHZpc2l0b3IpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oRGlyZWN0QXJndW1lbnRzKTsK
KwogU3RydWN0dXJlKiBEaXJlY3RBcmd1bWVudHM6OmNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQogewogICAgIHJl
dHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJ
bmZvKERpcmVjdEFyZ3VtZW50c1R5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5oCShy
ZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EaXJlY3RB
cmd1bWVudHMuaAkod29ya2luZyBjb3B5KQpAQCAtNjUsNyArNjUsNyBAQCBwdWJsaWM6CiAgICAg
c3RhdGljIERpcmVjdEFyZ3VtZW50cyogY3JlYXRlQnlDb3B5aW5nKEpTR2xvYmFsT2JqZWN0Kiwg
Q2FsbEZyYW1lKik7CiAKICAgICBzdGF0aWMgc2l6ZV90IGVzdGltYXRlZFNpemUoSlNDZWxsKiwg
Vk0mKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9y
Jik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKICAgICAKICAgICB1aW50MzJfdCBpbnRl
cm5hbExlbmd0aCgpIGNvbnN0CiAgICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvRXZhbEV4ZWN1dGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0V2YWxFeGVjdXRhYmxlLmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXZhbEV4ZWN1dGFibGUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00OSw3ICs0OSw4IEBAIGF1dG8gRXZhbEV4ZWN1dGFibGU6OmVuc3VyZVRlbXBsYXRl
T2JqZWMKICAgICByZXR1cm4gZW5zdXJlVGVtcGxhdGVPYmplY3RNYXBJbXBsKG1fdGVtcGxhdGVP
YmplY3RNYXApOwogfQogCi12b2lkIEV2YWxFeGVjdXRhYmxlOjp2aXNpdENoaWxkcmVuKEpTQ2Vs
bCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
Pgordm9pZCBFdmFsRXhlY3V0YWJsZTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBW
aXNpdG9yJiB2aXNpdG9yKQogewogICAgIEV2YWxFeGVjdXRhYmxlKiB0aGlzT2JqZWN0ID0ganND
YXN0PEV2YWxFeGVjdXRhYmxlKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklU
Uyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNjMsNCArNjQsNiBAQCB2b2lkIEV2YWxFeGVjdXRh
YmxlOjp2aXNpdENoaWxkcmVuKEpTQ2VsCiAgICAgfQogfQogCitERUZJTkVfVklTSVRfQ0hJTERS
RU4oRXZhbEV4ZWN1dGFibGUpOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0V2YWxFeGVjdXRhYmxlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXZhbEV4ZWN1dGFibGUuaAkocmV2aXNpb24gMjcx
NDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXZhbEV4ZWN1dGFibGUuaAko
d29ya2luZyBjb3B5KQpAQCAtNzgsNyArNzgsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgdXNpbmcgQmFz
ZTo6ZmluaXNoQ3JlYXRpb247CiAgICAgRXZhbEV4ZWN1dGFibGUoSlNHbG9iYWxPYmplY3QqLCBj
b25zdCBTb3VyY2VDb2RlJiwgYm9vbCBpblN0cmljdENvbnRleHQsIERlcml2ZWRDb250ZXh0VHlw
ZSwgYm9vbCBpc0Fycm93RnVuY3Rpb25Db250ZXh0LCBib29sIGlzSW5zaWRlT3JkaW5hcnlGdW5j
dGlvbiwgRXZhbENvbnRleHRUeXBlLCBOZWVkc0NsYXNzRmllbGRJbml0aWFsaXplcik7CiAKLSAg
ICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAg
REVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIHVuc2lnbmVkIG1fbmVlZHNDbGFzc0ZpZWxk
SW5pdGlhbGl6ZXIgOiAxOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9F
eGNlcHRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0V4Y2VwdGlvbi5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0V4Y2VwdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUzLDcgKzUzLDggQEAg
U3RydWN0dXJlKiBFeGNlcHRpb246OmNyZWF0ZVN0cnVjdHVyZShWTQogICAgIHJldHVybiBTdHJ1
Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKENlbGxU
eXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CiB9CiAKLXZvaWQgRXhjZXB0aW9uOjp2aXNp
dENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0
eXBlbmFtZSBWaXNpdG9yPgordm9pZCBFeGNlcHRpb246OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2Vs
bCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBFeGNlcHRpb24qIHRoaXNPYmplY3Qg
PSBqc0Nhc3Q8RXhjZXB0aW9uKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklU
Uyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNjQsNiArNjUsOCBAQCB2b2lkIEV4Y2VwdGlvbjo6
dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlCiAgICAgICAgIGZyYW1lLnZpc2l0Q2hpbGRyZW4odmlz
aXRvcik7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihFeGNlcHRpb24pOworCiBFeGNlcHRp
b246OkV4Y2VwdGlvbihWTSYgdm0pCiAgICAgOiBCYXNlKHZtLCB2bS5leGNlcHRpb25TdHJ1Y3R1
cmUuZ2V0KCkpCiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGNlcHRp
b24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGNlcHRp
b24uaAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
RXhjZXB0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxLDcgKzUxLDcgQEAgcHVibGljOgogCiAg
ICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3Qq
LCBKU1ZhbHVlIHByb3RvdHlwZSk7CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpT
Q2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAg
IERFQ0xBUkVfRVhQT1JUX0lORk87CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25FeGVjdXRhYmxlLmNwcAkocmV2aXNpb24gMjcxNDQzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25FeGVjdXRhYmxlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNjcsNyArNjcsOCBAQCBGdW5jdGlvbkNvZGVCbG9jayogRnVuY3Rp
b25FeGVjdXRhYmxlOjpiCiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEZ1bmN0aW9uQ29kZUJsb2Nr
Kj4oZWRnZS0+Y29kZUJsb2NrKCktPmJhc2VsaW5lQWx0ZXJuYXRpdmUoKSk7CiB9CiAKLXZvaWQg
RnVuY3Rpb25FeGVjdXRhYmxlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0
b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBGdW5jdGlvbkV4
ZWN1dGFibGU6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRv
cikKIHsKICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8RnVuY3Rp
b25FeGVjdXRhYmxlKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlz
T2JqZWN0LCBpbmZvKCkpOwpAQCAtODYsNiArODcsOCBAQCB2b2lkIEZ1bmN0aW9uRXhlY3V0YWJs
ZTo6dmlzaXRDaGlsZHJlbihKCiAgICAgfQogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oRnVu
Y3Rpb25FeGVjdXRhYmxlKTsKKwogRnVuY3Rpb25FeGVjdXRhYmxlKiBGdW5jdGlvbkV4ZWN1dGFi
bGU6OmZyb21HbG9iYWxDb2RlKAogICAgIGNvbnN0IElkZW50aWZpZXImIG5hbWUsIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgCiAgICAgSlNP
YmplY3QqJiBleGNlcHRpb24sIGludCBvdmVycmlkZUxpbmVOdW1iZXIsIE9wdGlvbmFsPGludD4g
ZnVuY3Rpb25Db25zdHJ1Y3RvclBhcmFtZXRlcnNFbmRQb3NpdGlvbikKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZS5oCShyZXZp
c2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvbkV4
ZWN1dGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTY2LDcgKzE2Niw3IEBAIHB1YmxpYzoKICAg
ICBKU1BhcnNlclNjcmlwdE1vZGUgc2NyaXB0TW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fdW5saW5r
ZWRFeGVjdXRhYmxlLT5zY3JpcHRNb2RlKCk7IH0KICAgICBTb3VyY2VDb2RlIGNsYXNzU291cmNl
KCkgY29uc3QgeyByZXR1cm4gbV91bmxpbmtlZEV4ZWN1dGFibGUtPmNsYXNzU291cmNlKCk7IH0K
IAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsK
KyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0
ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUg
cHJvdG8pCiAgICAgewogICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2Jh
bE9iamVjdCwgcHJvdG8sIFR5cGVJbmZvKEZ1bmN0aW9uRXhlY3V0YWJsZVR5cGUsIFN0cnVjdHVy
ZUZsYWdzKSwgaW5mbygpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1
bmN0aW9uUmFyZURhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0Z1bmN0aW9uUmFyZURhdGEuY3BwCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvblJhcmVEYXRhLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNTEsNyArNTEsOCBAQCBTdHJ1Y3R1cmUqIEZ1bmN0aW9uUmFyZURhdGE6OmNyZWF0ZVN0
cnVjCiAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3Rv
dHlwZSwgVHlwZUluZm8oQ2VsbFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKIH0KIAot
dm9pZCBGdW5jdGlvblJhcmVEYXRhOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZp
c2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBGdW5jdGlv
blJhcmVEYXRhOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0
b3IpCiB7CiAgICAgRnVuY3Rpb25SYXJlRGF0YSogcmFyZURhdGEgPSBqc0Nhc3Q8RnVuY3Rpb25S
YXJlRGF0YSo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2VsbCwgaW5m
bygpKTsKQEAgLTYzLDYgKzY0LDggQEAgdm9pZCBGdW5jdGlvblJhcmVEYXRhOjp2aXNpdENoaWxk
cmVuKEpTQwogICAgIHZpc2l0b3IuYXBwZW5kKHJhcmVEYXRhLT5tX2V4ZWN1dGFibGUpOwogfQog
CitERUZJTkVfVklTSVRfQ0hJTERSRU4oRnVuY3Rpb25SYXJlRGF0YSk7CisKIEZ1bmN0aW9uUmFy
ZURhdGE6OkZ1bmN0aW9uUmFyZURhdGEoVk0mIHZtLCBFeGVjdXRhYmxlQmFzZSogZXhlY3V0YWJs
ZSkKICAgICA6IEJhc2Uodm0sIHZtLmZ1bmN0aW9uUmFyZURhdGFTdHJ1Y3R1cmUuZ2V0KCkpCiAg
ICAgLCBtX29iamVjdEFsbG9jYXRpb25Qcm9maWxlKCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0Z1bmN0aW9uUmFyZURhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvblJhcmVEYXRhLmgJKHJldmlzaW9uIDI3MTQ0MykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uUmFyZURhdGEuaAkod29y
a2luZyBjb3B5KQpAQCAtNjUsNyArNjUsNyBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgU3RydWN0
dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUgcHJvdG90
eXBlKTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0
b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgREVDTEFSRV9JTkZPOwog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljQXJndW1lbnRzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3Vt
ZW50cy5oCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9HZW5lcmljQXJndW1lbnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDcgKzQ0LDcgQEAgcHJv
dGVjdGVkOgogICAgIHsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpT
Q2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9URU1QTEFURV9WSVNJVF9DSElMRFJF
TjsKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqLCBKU0dsb2Jh
bE9iamVjdCosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CiAgICAgc3RhdGljIGJvb2wg
Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgdW5z
aWduZWQgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKICAgICBzdGF0aWMgdm9pZCBnZXRP
d25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWVB
cnJheSYsIERvbnRFbnVtUHJvcGVydGllc01vZGUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50c0lubGluZXMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljQXJndW1lbnRzSW5saW5lcy5oCShyZXZp
c2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljQXJn
dW1lbnRzSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw4IEBACiBuYW1lc3Bh
Y2UgSlNDIHsKIAogdGVtcGxhdGU8dHlwZW5hbWUgVHlwZT4KLXZvaWQgR2VuZXJpY0FyZ3VtZW50
czxUeXBlPjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIHRoaXNDZWxsLCBTbG90VmlzaXRvciYgdmlz
aXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEdlbmVyaWNBcmd1bWVudHM8
VHlwZT46OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogdGhpc0NlbGwsIFZpc2l0b3ImIHZpc2l0
b3IpCiB7CiAgICAgVHlwZSogdGhpc09iamVjdCA9IHN0YXRpY19jYXN0PFR5cGUqPih0aGlzQ2Vs
bCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpA
QCAtNDEsNiArNDIsOCBAQCB2b2lkIEdlbmVyaWNBcmd1bWVudHM8VHlwZT46OnZpc2l0Q2hpbGRy
CiAgICAgICAgIHZpc2l0b3IubWFya0F1eGlsaWFyeSh0aGlzT2JqZWN0LT5tX21vZGlmaWVkQXJn
dW1lbnRzRGVzY3JpcHRvci5nZXRVbnNhZmUoKSk7CiB9CiAKK0RFRklORV9URU1QTEFURV9WSVNJ
VF9DSElMRFJFTih0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlPiwgR2VuZXJpY0FyZ3VtZW50czxUeXBl
Pik7CisKIHRlbXBsYXRlPHR5cGVuYW1lIFR5cGU+CiBib29sIEdlbmVyaWNBcmd1bWVudHM8VHlw
ZT46OmdldE93blByb3BlcnR5U2xvdChKU09iamVjdCogb2JqZWN0LCBKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWUgaWRlbnQsIFByb3BlcnR5U2xvdCYgc2xvdCkKIHsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dldHRlclNldHRlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2V0dGVyU2V0dGVyLmNw
cAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2V0
dGVyU2V0dGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNyArMzMsOCBAQCBTVEFUSUNfQVNT
RVJUX0lTX1RSSVZJQUxMWV9ERVNUUlVDVElCTEUoCiAKIGNvbnN0IENsYXNzSW5mbyBHZXR0ZXJT
ZXR0ZXI6OnNfaW5mbyA9IHsgIkdldHRlclNldHRlciIsIG51bGxwdHIsIG51bGxwdHIsIG51bGxw
dHIsIENSRUFURV9NRVRIT0RfVEFCTEUoR2V0dGVyU2V0dGVyKSB9OwogCi12b2lkIEdldHRlclNl
dHRlcjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQor
dGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgR2V0dGVyU2V0dGVyOjp2aXNpdENoaWxk
cmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgR2V0dGVyU2V0
dGVyKiB0aGlzT2JqZWN0ID0ganNDYXN0PEdldHRlclNldHRlcio+KGNlbGwpOwogICAgIEFTU0VS
VF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTQzLDYgKzQ0LDgg
QEAgdm9pZCBHZXR0ZXJTZXR0ZXI6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKgogICAgIHZpc2l0b3Iu
YXBwZW5kKHRoaXNPYmplY3QtPm1fc2V0dGVyKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVO
KEdldHRlclNldHRlcik7CisKIEpTVmFsdWUgY2FsbEdldHRlcihKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBKU1ZhbHVlIGJhc2UsIEpTVmFsdWUgZ2V0dGVyU2V0dGVyKQogewogICAgIFZN
JiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0dldHRlclNldHRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0dldHRlclNldHRlci5oCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9HZXR0ZXJTZXR0ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtODIs
NyArODIsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBjcmVhdGUodm0sIGdsb2JhbE9iamVj
dCwgZ2V0dGVyT2JqZWN0LCBzZXR0ZXJPYmplY3QpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lk
IHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lU
X0NISUxEUkVOOwogCiAgICAgSlNPYmplY3QqIGdldHRlcigpIGNvbnN0IHsgcmV0dXJuIG1fZ2V0
dGVyLmdldCgpOyB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0hhc2hN
YXBJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9I
YXNoTWFwSW1wbC5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0hhc2hNYXBJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsOSBA
QAogCiBuYW1lc3BhY2UgSlNDIHsKIAorREVGSU5FX1RFTVBMQVRFX1ZJU0lUX0NISUxEUkVOKHRl
bXBsYXRlPD4sIEhhc2hNYXBCdWNrZXQ8SGFzaE1hcEJ1Y2tldERhdGFLZXk+KTsKK0RFRklORV9U
RU1QTEFURV9WSVNJVF9DSElMRFJFTih0ZW1wbGF0ZTw+LCBIYXNoTWFwQnVja2V0PEhhc2hNYXBC
dWNrZXREYXRhS2V5VmFsdWU+KTsKKwogdGVtcGxhdGU8PgogY29uc3QgQ2xhc3NJbmZvIEhhc2hN
YXBCdWNrZXQ8SGFzaE1hcEJ1Y2tldERhdGFLZXk+OjpzX2luZm8gPQogICAgIHsgIkhhc2hNYXBC
dWNrZXQiLCBudWxscHRyLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEhh
c2hNYXBCdWNrZXQ8SGFzaE1hcEJ1Y2tldERhdGFLZXk+KSB9OwpAQCAtMzgsOCArNDEsOSBAQCB0
ZW1wbGF0ZTw+CiBjb25zdCBDbGFzc0luZm8gSGFzaE1hcEJ1Y2tldDxIYXNoTWFwQnVja2V0RGF0
YUtleVZhbHVlPjo6c19pbmZvID0KICAgICB7ICJIYXNoTWFwQnVja2V0IiwgbnVsbHB0ciwgbnVs
bHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShIYXNoTWFwQnVja2V0PEhhc2hNYXBC
dWNrZXREYXRhS2V5VmFsdWU+KSB9OwogCi10ZW1wbGF0ZSA8dHlwZW5hbWUgRGF0YT4KLXZvaWQg
SGFzaE1hcEJ1Y2tldDxEYXRhPjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNp
dG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgRGF0YT4KK3RlbXBsYXRlPHR5cGVuYW1l
IFZpc2l0b3I+Cit2b2lkIEhhc2hNYXBCdWNrZXQ8RGF0YT46OnZpc2l0Q2hpbGRyZW5JbXBsKEpT
Q2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBIYXNoTWFwQnVja2V0KiB0aGlz
T2JqZWN0ID0ganNDYXN0PEhhc2hNYXBCdWNrZXQqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JK
RUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC01Miw4ICs1Niw5IEBAIHZvaWQg
SGFzaE1hcEJ1Y2tldDxEYXRhPjo6dmlzaXRDaGlsZHJlbigKICAgICB2aXNpdG9yLmFwcGVuZFZh
bHVlcyhiaXR3aXNlX2Nhc3Q8V3JpdGVCYXJyaWVyPFVua25vd24+Kj4oJnRoaXNPYmplY3QtPm1f
ZGF0YSksIHNpemVvZihEYXRhKSAvIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKTsKIH0K
IAotdGVtcGxhdGUgPHR5cGVuYW1lIEhhc2hNYXBCdWNrZXQ+Ci12b2lkIEhhc2hNYXBJbXBsPEhh
c2hNYXBCdWNrZXQ+Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZp
c2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoTWFwQnVja2V0PgordGVtcGxhdGU8dHlwZW5h
bWUgVmlzaXRvcj4KK3ZvaWQgSGFzaE1hcEltcGw8SGFzaE1hcEJ1Y2tldD46OnZpc2l0Q2hpbGRy
ZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBIYXNoTWFwSW1w
bCogdGhpc09iamVjdCA9IGpzQ2FzdDxIYXNoTWFwSW1wbCo+KGNlbGwpOwogICAgIEFTU0VSVF9H
Q19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTY2LDYgKzcxLDggQEAg
dm9pZCBIYXNoTWFwSW1wbDxIYXNoTWFwQnVja2V0Pjo6dmlzaXRDaAogICAgICAgICB2aXNpdG9y
Lm1hcmtBdXhpbGlhcnkoYnVmZmVyKTsKIH0KIAorREVGSU5FX1RFTVBMQVRFX1ZJU0lUX0NISUxE
UkVOKHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hNYXBCdWNrZXQ+LCBIYXNoTWFwSW1wbDxIYXNoTWFw
QnVja2V0Pik7CisKIHRlbXBsYXRlIDx0eXBlbmFtZSBIYXNoTWFwQnVja2V0Pgogc2l6ZV90IEhh
c2hNYXBJbXBsPEhhc2hNYXBCdWNrZXQ+Ojplc3RpbWF0ZWRTaXplKEpTQ2VsbCogY2VsbCwgVk0m
IHZtKQogewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSGFzaE1hcEltcGwu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9IYXNoTWFwSW1w
bC5oCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9I
YXNoTWFwSW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDgsNyArMTQ4LDcgQEAgcHVibGljOgog
ICAgICAgICByZXR1cm4gbV9kYXRhLnZhbHVlLmdldCgpOwogICAgIH0KIAotICAgIHN0YXRpYyB2
b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1RF
TVBMQVRFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgQUxXQVlTX0lOTElORSBIYXNoTWFwQnVja2V0
KiBuZXh0KCkgY29uc3QgeyByZXR1cm4gbV9uZXh0LmdldCgpOyB9CiAgICAgQUxXQVlTX0lOTElO
RSBIYXNoTWFwQnVja2V0KiBwcmV2KCkgY29uc3QgeyByZXR1cm4gbV9wcmV2LmdldCgpOyB9CkBA
IC0zNjQsNyArMzY0LDcgQEAgY2xhc3MgSGFzaE1hcEltcGwgOiBwdWJsaWMgSlNOb25GaW5hbE9i
agogcHVibGljOgogICAgIHVzaW5nIEJ1Y2tldFR5cGUgPSBIYXNoTWFwQnVja2V0VHlwZTsKIAot
ICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAg
ICBERUNMQVJFX1RFTVBMQVRFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgc3RhdGljIHNpemVfdCBl
c3RpbWF0ZWRTaXplKEpTQ2VsbCosIFZNJik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0ludGVybmFsRnVuY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0ludGVybmFsRnVuY3Rpb24uY3BwCShyZXZpc2lvbiAyNzE0NDMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRlcm5hbEZ1bmN0aW9uLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNjQsNyArNjQsOCBAQCB2b2lkIEludGVybmFsRnVuY3Rpb246OmZp
bmlzaENyZWF0aW9uKFZNCiAgICAgfQogfQogCi12b2lkIEludGVybmFsRnVuY3Rpb246OnZpc2l0
Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5
cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEludGVybmFsRnVuY3Rpb246OnZpc2l0Q2hpbGRyZW5JbXBs
KEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBJbnRlcm5hbEZ1bmN0aW9u
KiB0aGlzT2JqZWN0ID0ganNDYXN0PEludGVybmFsRnVuY3Rpb24qPihjZWxsKTsKICAgICBBU1NF
UlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC03Myw2ICs3NCw4
IEBAIHZvaWQgSW50ZXJuYWxGdW5jdGlvbjo6dmlzaXRDaGlsZHJlbihKU0MKICAgICB2aXNpdG9y
LmFwcGVuZCh0aGlzT2JqZWN0LT5tX29yaWdpbmFsTmFtZSk7CiB9CiAKK0RFRklORV9FWFBPUlRf
VklTSVRfQ0hJTERSRU4oSW50ZXJuYWxGdW5jdGlvbik7CisKIGNvbnN0IFN0cmluZyYgSW50ZXJu
YWxGdW5jdGlvbjo6bmFtZSgpCiB7CiAgICAgY29uc3QgU3RyaW5nJiBuYW1lID0gbV9vcmlnaW5h
bE5hbWUtPnRyeUdldFZhbHVlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9JbnRlcm5hbEZ1bmN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSW50ZXJuYWxGdW5jdGlvbi5oCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRlcm5hbEZ1bmN0aW9uLmgJKHdvcmtpbmcgY29weSkK
QEAgLTQ2LDcgKzQ2LDcgQEAgcHVibGljOgogCiAgICAgREVDTEFSRV9FWFBPUlRfSU5GTzsKIAot
ICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwg
U2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX0VYUE9SVF9WSVNJVF9DSElMRFJFTjsKIAogICAg
IEpTX0VYUE9SVF9QUklWQVRFIGNvbnN0IFN0cmluZyYgbmFtZSgpOwogICAgIGNvbnN0IFN0cmlu
ZyBkaXNwbGF5TmFtZShWTSYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SW50bENvbGxhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9JbnRsQ29sbGF0b3IuY3BwCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9JbnRsQ29sbGF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NSw3
ICs2NSw4IEBAIHZvaWQgSW50bENvbGxhdG9yOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0KICAgICBB
U1NFUlQoaW5oZXJpdHModm0sIGluZm8oKSkpOwogfQogCi12b2lkIEludGxDb2xsYXRvcjo6dmlz
aXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8
dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSW50bENvbGxhdG9yOjp2aXNpdENoaWxkcmVuSW1wbChK
U0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSW50bENvbGxhdG9yKiB0aGlz
T2JqZWN0ID0ganNDYXN0PEludGxDb2xsYXRvcio+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpF
Q1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTc1LDYgKzc2LDggQEAgdm9pZCBJ
bnRsQ29sbGF0b3I6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKgogICAgIHZpc2l0b3IuYXBwZW5kKHRo
aXNPYmplY3QtPm1fYm91bmRDb21wYXJlKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKElu
dGxDb2xsYXRvcik7CisKIFZlY3RvcjxTdHJpbmc+IEludGxDb2xsYXRvcjo6c29ydExvY2FsZURh
dGEoY29uc3QgU3RyaW5nJiBsb2NhbGUsIFJlbGV2YW50RXh0ZW5zaW9uS2V5IGtleSkKIHsKICAg
ICAvLyA5LjEgSW50ZXJuYWwgc2xvdHMgb2YgU2VydmljZSBDb25zdHJ1Y3RvcnMgJiAxMC4yLjMg
SW50ZXJuYWwgc2xvdHMgKEVDTUEtNDAyIDIuMCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0ludGxDb2xsYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0ludGxDb2xsYXRvci5oCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsQ29sbGF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAt
ODAsNyArODAsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIEludGxDb2xsYXRvcihWTSYsIFN0
cnVjdHVyZSopOwogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKLSAgICBzdGF0aWMgdm9p
ZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJ
VF9DSElMRFJFTjsKIAogICAgIGJvb2wgdXBkYXRlQ2FuRG9BU0NJSVVDQURVQ0VUQ29tcGFyaXNv
bigpIGNvbnN0OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsRGF0
ZVRpbWVGb3JtYXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0ludGxEYXRlVGltZUZvcm1hdC5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxEYXRlVGltZUZvcm1hdC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTkwLDcgKzkwLDggQEAgdm9pZCBJbnRsRGF0ZVRpbWVGb3JtYXQ6OmZpbmlzaENyZWF0
aW9uKAogICAgIEFTU0VSVChpbmhlcml0cyh2bSwgaW5mbygpKSk7CiB9CiAKLXZvaWQgSW50bERh
dGVUaW1lRm9ybWF0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZp
c2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBJbnRsRGF0ZVRpbWVGb3Jt
YXQ6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsK
ICAgICBJbnRsRGF0ZVRpbWVGb3JtYXQqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SW50bERhdGVUaW1l
Rm9ybWF0Kj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0
LCBpbmZvKCkpOwpAQCAtMTAwLDYgKzEwMSw4IEBAIHZvaWQgSW50bERhdGVUaW1lRm9ybWF0Ojp2
aXNpdENoaWxkcmVuKEoKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2JvdW5kRm9y
bWF0KTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEludGxEYXRlVGltZUZvcm1hdCk7CisK
IHZvaWQgSW50bERhdGVUaW1lRm9ybWF0OjpzZXRCb3VuZEZvcm1hdChWTSYgdm0sIEpTQm91bmRG
dW5jdGlvbiogZm9ybWF0KQogewogICAgIG1fYm91bmRGb3JtYXQuc2V0KHZtLCB0aGlzLCBmb3Jt
YXQpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERhdGVUaW1lRm9y
bWF0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERh
dGVUaW1lRm9ybWF0LmgJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0ludGxEYXRlVGltZUZvcm1hdC5oCSh3b3JraW5nIGNvcHkpCkBAIC04NSw3ICs4
NSw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgSW50bERhdGVUaW1lRm9ybWF0KFZNJiwgU3Ry
dWN0dXJlKik7CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOwotICAgIHN0YXRpYyB2b2lk
IHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lU
X0NISUxEUkVOOwogCiAgICAgc3RhdGljIFZlY3RvcjxTdHJpbmc+IGxvY2FsZURhdGEoY29uc3Qg
U3RyaW5nJiwgUmVsZXZhbnRFeHRlbnNpb25LZXkpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9JbnRsTG9jYWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9JbnRsTG9jYWxlLmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bExvY2FsZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTU4LDcgKzU4LDggQEAgdm9pZCBJbnRsTG9jYWxlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0p
CiAgICAgQVNTRVJUKGluaGVyaXRzKHZtLCBpbmZvKCkpKTsKIH0KIAotdm9pZCBJbnRsTG9jYWxl
Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1w
bGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBJbnRsTG9jYWxlOjp2aXNpdENoaWxkcmVuSW1w
bChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0byogdGhpc09iamVj
dCA9IGpzQ2FzdDxJbnRsTG9jYWxlKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhF
UklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNjYsNiArNjcsOCBAQCB2b2lkIEludGxMb2Nh
bGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjCiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlz
T2JqZWN0LCB2aXNpdG9yKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEludGxMb2NhbGUp
OworCiBjbGFzcyBMb2NhbGVJREJ1aWxkZXIgZmluYWwgewogcHVibGljOgogICAgIGJvb2wgaW5p
dGlhbGl6ZShjb25zdCBTdHJpbmcmKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0ludGxMb2NhbGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9JbnRsTG9jYWxlLmgJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0ludGxMb2NhbGUuaAkod29ya2luZyBjb3B5KQpAQCAtNzEsNyArNzEsNyBA
QCBwdWJsaWM6CiBwcml2YXRlOgogICAgIEludGxMb2NhbGUoVk0mLCBTdHJ1Y3R1cmUqKTsKICAg
ICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJl
bihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAK
ICAgICBTdHJpbmcga2V5d29yZFZhbHVlKEFTQ0lJTGl0ZXJhbCwgYm9vbCBpc0Jvb2xlYW4gPSBm
YWxzZSkgY29uc3Q7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxO
dW1iZXJGb3JtYXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0ludGxOdW1iZXJGb3JtYXQuY3BwCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTnVtYmVyRm9ybWF0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNzMsNyArNzMsOCBAQCB2b2lkIEludGxOdW1iZXJGb3JtYXQ6OmZpbmlzaENyZWF0aW9uKFZN
CiAgICAgQVNTRVJUKGluaGVyaXRzKHZtLCBpbmZvKCkpKTsKIH0KIAotdm9pZCBJbnRsTnVtYmVy
Rm9ybWF0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3Ip
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBJbnRsTnVtYmVyRm9ybWF0Ojp2aXNp
dENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSW50
bE51bWJlckZvcm1hdCogdGhpc09iamVjdCA9IGpzQ2FzdDxJbnRsTnVtYmVyRm9ybWF0Kj4oY2Vs
bCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpA
QCAtODMsNiArODQsOCBAQCB2b2lkIEludGxOdW1iZXJGb3JtYXQ6OnZpc2l0Q2hpbGRyZW4oSlND
CiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9ib3VuZEZvcm1hdCk7CiB9CiAKK0RF
RklORV9WSVNJVF9DSElMRFJFTihJbnRsTnVtYmVyRm9ybWF0KTsKKwogVmVjdG9yPFN0cmluZz4g
SW50bE51bWJlckZvcm1hdDo6bG9jYWxlRGF0YShjb25zdCBTdHJpbmcmIGxvY2FsZSwgUmVsZXZh
bnRFeHRlbnNpb25LZXkga2V5KQogewogICAgIC8vIDkuMSBJbnRlcm5hbCBzbG90cyBvZiBTZXJ2
aWNlIENvbnN0cnVjdG9ycyAmIDExLjIuMyBJbnRlcm5hbCBzbG90cyAoRUNNQS00MDIgMi4wKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE51bWJlckZvcm1hdC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxOdW1iZXJGb3Jt
YXQuaAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SW50bE51bWJlckZvcm1hdC5oCSh3b3JraW5nIGNvcHkpCkBAIC05Niw3ICs5Niw3IEBAIHB1Ymxp
YzoKIHByaXZhdGU6CiAgICAgSW50bE51bWJlckZvcm1hdChWTSYsIFN0cnVjdHVyZSopOwogICAg
IHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVu
KEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAog
ICAgIHN0YXRpYyBWZWN0b3I8U3RyaW5nPiBsb2NhbGVEYXRhKGNvbnN0IFN0cmluZyYsIFJlbGV2
YW50RXh0ZW5zaW9uS2V5KTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SW50bFBsdXJhbFJ1bGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9JbnRsUGx1cmFsUnVsZXMuY3BwCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsUGx1cmFsUnVsZXMuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC02MSw3ICs2MSw4IEBAIHZvaWQgSW50bFBsdXJhbFJ1bGVzOjpmaW5pc2hDcmVhdGlvbihW
TSYKICAgICBBU1NFUlQoaW5oZXJpdHModm0sIGluZm8oKSkpOwogfQogCi12b2lkIEludGxQbHVy
YWxSdWxlczo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9y
KQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSW50bFBsdXJhbFJ1bGVzOjp2aXNp
dENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSW50
bFBsdXJhbFJ1bGVzKiB0aGlzT2JqZWN0ID0ganNDYXN0PEludGxQbHVyYWxSdWxlcyo+KGNlbGwp
OwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAg
LTY5LDYgKzcwLDggQEAgdm9pZCBJbnRsUGx1cmFsUnVsZXM6OnZpc2l0Q2hpbGRyZW4oSlNDZQog
ICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CiB9CiAKK0RFRklO
RV9WSVNJVF9DSElMRFJFTihJbnRsUGx1cmFsUnVsZXMpOworCiBWZWN0b3I8U3RyaW5nPiBJbnRs
UGx1cmFsUnVsZXM6OmxvY2FsZURhdGEoY29uc3QgU3RyaW5nJiwgUmVsZXZhbnRFeHRlbnNpb25L
ZXkpCiB7CiAgICAgcmV0dXJuIHsgfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0ludGxQbHVyYWxSdWxlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0ludGxQbHVyYWxSdWxlcy5oCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsUGx1cmFsUnVsZXMuaAkod29ya2luZyBjb3B5KQpA
QCAtNjYsNyArNjYsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIEludGxQbHVyYWxSdWxlcyhW
TSYsIFN0cnVjdHVyZSopOwogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKLSAgICBzdGF0
aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFS
RV9WSVNJVF9DSElMRFJFTjsKIAogICAgIHN0YXRpYyBWZWN0b3I8U3RyaW5nPiBsb2NhbGVEYXRh
KGNvbnN0IFN0cmluZyYsIFJlbGV2YW50RXh0ZW5zaW9uS2V5KTsKIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFJlbGF0aXZlVGltZUZvcm1hdC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFJlbGF0aXZlVGltZUZvcm1h
dC5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0ludGxSZWxhdGl2ZVRpbWVGb3JtYXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Miw3ICs2Miw4
IEBAIHZvaWQgSW50bFJlbGF0aXZlVGltZUZvcm1hdDo6ZmluaXNoQ3JlYXQKICAgICBBU1NFUlQo
aW5oZXJpdHModm0sIGluZm8oKSkpOwogfQogCi12b2lkIEludGxSZWxhdGl2ZVRpbWVGb3JtYXQ6
OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBs
YXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEludGxSZWxhdGl2ZVRpbWVGb3JtYXQ6OnZpc2l0
Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBhdXRv
KiB0aGlzT2JqZWN0ID0ganNDYXN0PEludGxSZWxhdGl2ZVRpbWVGb3JtYXQqPihjZWxsKTsKICAg
ICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC03MCw2
ICs3MSw4IEBAIHZvaWQgSW50bFJlbGF0aXZlVGltZUZvcm1hdDo6dmlzaXRDaGlsZHIKICAgICBC
YXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwogfQogCitERUZJTkVfVklT
SVRfQ0hJTERSRU4oSW50bFJlbGF0aXZlVGltZUZvcm1hdCk7CisKIFZlY3RvcjxTdHJpbmc+IElu
dGxSZWxhdGl2ZVRpbWVGb3JtYXQ6OmxvY2FsZURhdGEoY29uc3QgU3RyaW5nJiBsb2NhbGUsIFJl
bGV2YW50RXh0ZW5zaW9uS2V5IGtleSkKIHsKICAgICBBU1NFUlRfVU5VU0VEKGtleSwga2V5ID09
IFJlbGV2YW50RXh0ZW5zaW9uS2V5OjpOdSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9JbnRsUmVsYXRpdmVUaW1lRm9ybWF0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFJlbGF0aXZlVGltZUZvcm1hdC5oCShyZXZpc2lvbiAy
NzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsUmVsYXRpdmVUaW1l
Rm9ybWF0LmgJKHdvcmtpbmcgY29weSkKQEAgLTY0LDcgKzY0LDcgQEAgcHVibGljOgogcHJpdmF0
ZToKICAgICBJbnRsUmVsYXRpdmVUaW1lRm9ybWF0KFZNJiwgU3RydWN0dXJlKik7CiAgICAgdm9p
ZCBmaW5pc2hDcmVhdGlvbihWTSYpOwotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlND
ZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAg
c3RhdGljIFZlY3RvcjxTdHJpbmc+IGxvY2FsZURhdGEoY29uc3QgU3RyaW5nJiwgUmVsZXZhbnRF
eHRlbnNpb25LZXkpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRs
U2VnbWVudEl0ZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9JbnRsU2VnbWVudEl0ZXJhdG9yLmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFNlZ21lbnRJdGVyYXRvci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTY0LDEzICs2NCwxNiBAQCB2b2lkIEludGxTZWdtZW50SXRlcmF0b3I6OmZp
bmlzaENyZWF0aW9uCiAgICAgbV9zdHJpbmcuc2V0KHZtLCB0aGlzLCBzdHJpbmcpOwogfQogCi12
b2lkIEludGxTZWdtZW50SXRlcmF0b3I6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90
VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEludGxT
ZWdtZW50SXRlcmF0b3I6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYg
dmlzaXRvcikKIHsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEludGxTZWdtZW50SXRl
cmF0b3IqPihjZWxsKTsKICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0
b3IpOwogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fc3RyaW5nKTsKIH0KIAorREVG
SU5FX1ZJU0lUX0NISUxEUkVOKEludGxTZWdtZW50SXRlcmF0b3IpOworCiBKU09iamVjdCogSW50
bFNlZ21lbnRJdGVyYXRvcjo6bmV4dChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQogewog
ICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0ludGxTZWdtZW50SXRlcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsU2VnbWVudEl0ZXJhdG9yLmgJKHJldmlzaW9uIDI3
MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxTZWdtZW50SXRlcmF0
b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNTMsNyArNTMsNyBAQCBwdWJsaWM6CiAKICAgICBKU09i
amVjdCogbmV4dChKU0dsb2JhbE9iamVjdCopOwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGls
ZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47
CiAKIHByaXZhdGU6CiAgICAgSW50bFNlZ21lbnRJdGVyYXRvcihWTSYsIFN0cnVjdHVyZSosIHN0
ZDo6dW5pcXVlX3B0cjxVQnJlYWtJdGVyYXRvciwgVUJyZWFrSXRlcmF0b3JEZWxldGVyPiYmLCBC
b3g8VmVjdG9yPFVDaGFyPj4mJiwgSW50bFNlZ21lbnRlcjo6R3JhbnVsYXJpdHkpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFNlZ21lbnRzLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsU2VnbWVudHMuY3BwCShyZXZp
c2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsU2VnbWVu
dHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDksMTEgKzEwOSwxNCBAQCBKU09iamVjdCogSW50
bFNlZ21lbnRzOjpjcmVhdGVTZWdtZW50SXRlCiAgICAgcmV0dXJuIEludGxTZWdtZW50SXRlcmF0
b3I6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LT5zZWdtZW50SXRlcmF0b3JTdHJ1Y3R1cmUoKSwg
V1RGTW92ZShzZWdtZW50ZXIpLCBtX2J1ZmZlciwgbV9zdHJpbmcuZ2V0KCksIG1fZ3JhbnVsYXJp
dHkpOwogfQogCi12b2lkIEludGxTZWdtZW50czo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGws
IFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQg
SW50bFNlZ21lbnRzOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZp
c2l0b3IpCiB7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxJbnRsU2VnbWVudHMqPihj
ZWxsKTsKICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwogICAg
IHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fc3RyaW5nKTsKIH0KIAorREVGSU5FX1ZJU0lU
X0NISUxEUkVOKEludGxTZWdtZW50cyk7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFNlZ21lbnRzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFNlZ21lbnRzLmgJKHJldmlzaW9uIDI3
MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxTZWdtZW50cy5oCSh3
b3JraW5nIGNvcHkpCkBAIC01NCw3ICs1NCw3IEBAIHB1YmxpYzoKICAgICBKU1ZhbHVlIGNvbnRh
aW5pbmcoSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlIGluZGV4VmFsdWUpOwogICAgIEpTT2JqZWN0
KiBjcmVhdGVTZWdtZW50SXRlcmF0b3IoSlNHbG9iYWxPYmplY3QqKTsKIAotICAgIHN0YXRpYyB2
b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJ
U0lUX0NISUxEUkVOOwogCiBwcml2YXRlOgogICAgIEludGxTZWdtZW50cyhWTSYsIFN0cnVjdHVy
ZSosIHN0ZDo6dW5pcXVlX3B0cjxVQnJlYWtJdGVyYXRvciwgVUJyZWFrSXRlcmF0b3JEZWxldGVy
PiYmLCBCb3g8VmVjdG9yPFVDaGFyPj4mJiwgSW50bFNlZ21lbnRlcjo6R3JhbnVsYXJpdHkpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZm
ZXJWaWV3LmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTUsNyArMTU1
LDggQEAgdm9pZCBKU0FycmF5QnVmZmVyVmlldzo6ZmluaXNoQ3JlYXRpb24oVgogICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKLXZvaWQgSlNBcnJheUJ1ZmZlclZpZXc6OnZp
c2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRl
PHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTQXJyYXlCdWZmZXJWaWV3Ojp2aXNpdENoaWxkcmVu
SW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNBcnJheUJ1ZmZl
clZpZXcqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNBcnJheUJ1ZmZlclZpZXcqPihjZWxsKTsKICAg
ICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC0xNjks
NiArMTcwLDggQEAgdm9pZCBKU0FycmF5QnVmZmVyVmlldzo6dmlzaXRDaGlsZHJlbihKUwogICAg
IH0KIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTQXJyYXlCdWZmZXJWaWV3KTsKKwogYm9v
bCBKU0FycmF5QnVmZmVyVmlldzo6cHV0KAogICAgIEpTQ2VsbCogY2VsbCwgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1
ZSwKICAgICBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3LmgJKHJldmlzaW9uIDI3MTQ0MykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3LmgJKHdv
cmtpbmcgY29weSkKQEAgLTE3Miw3ICsxNzIsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgCiAgICAgc3Rh
dGljIGJvb2wgcHV0KEpTQ2VsbCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBKU1Zh
bHVlLCBQdXRQcm9wZXJ0eVNsb3QmKTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4o
SlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogICAg
IAogcHVibGljOgogICAgIFR5cGVkQXJyYXlNb2RlIG1vZGUoKSBjb25zdCB7IHJldHVybiBtX21v
ZGU7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlJdGVyYXRv
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJh
eUl0ZXJhdG9yLmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNBcnJheUl0ZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjgsMTEgKzY4
LDE0IEBAIHZvaWQgSlNBcnJheUl0ZXJhdG9yOjpmaW5pc2hDcmVhdGlvbihWTSYKICAgICAgICAg
QmFzZTo6aW50ZXJuYWxGaWVsZChpbmRleCkuc2V0KHZtLCB0aGlzLCB2YWx1ZXNbaW5kZXhdKTsK
IH0KIAotdm9pZCBKU0FycmF5SXRlcmF0b3I6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBT
bG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpT
QXJyYXlJdGVyYXRvcjo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2
aXNpdG9yKQogewogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNBcnJheUl0ZXJhdG9y
Kj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZv
KCkpOwogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CiB9CiAK
K0RFRklORV9WSVNJVF9DSElMRFJFTihKU0FycmF5SXRlcmF0b3IpOworCiB9IC8vIG5hbWVzcGFj
ZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlJdGVyYXRv
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlJ
dGVyYXRvci5oCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0FycmF5SXRlcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNzgsNyArNzgsNyBAQCBw
dWJsaWM6CiAKICAgICBERUNMQVJFX0lORk87CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxk
cmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsK
IAogcHJpdmF0ZToKICAgICBKU0FycmF5SXRlcmF0b3IoVk0mLCBTdHJ1Y3R1cmUqKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXN5bmNHZW5lcmF0b3IuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXN5bmNHZW5lcmF0b3Iu
Y3BwCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0FzeW5jR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTksMTEgKzU5LDE0IEBAIHZv
aWQgSlNBc3luY0dlbmVyYXRvcjo6ZmluaXNoQ3JlYXRpb24oVk0KICAgICAgICAgaW50ZXJuYWxG
aWVsZChpbmRleCkuc2V0KHZtLCB0aGlzLCB2YWx1ZXNbaW5kZXhdKTsKIH0KIAotdm9pZCBKU0Fz
eW5jR2VuZXJhdG9yOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZp
c2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0FzeW5jR2VuZXJhdG9y
Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAg
ICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0FzeW5jR2VuZXJhdG9yKj4oY2VsbCk7CiAg
ICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwogICAgIEJh
c2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CiB9CiAKK0RFRklORV9WSVNJ
VF9DSElMRFJFTihKU0FzeW5jR2VuZXJhdG9yKTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FzeW5jR2VuZXJhdG9yLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBc3luY0dlbmVyYXRvci5o
CShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Fz
eW5jR2VuZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTk1LDcgKzk1LDcgQEAgcHVibGljOgog
CiAgICAgREVDTEFSRV9FWFBPUlRfSU5GTzsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwog
CiBwcml2YXRlOgogICAgIEpTQXN5bmNHZW5lcmF0b3IoVk0mLCBTdHJ1Y3R1cmUqKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQmlnSW50LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JpZ0ludC5jcHAJKHJldmlzaW9uIDI3
MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQmlnSW50LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNjcsNyArNjcsOCBAQCBKU0JpZ0ludDo6SlNCaWdJbnQoVk0mIHZtLCBT
dHJ1Y3R1cmUqIHN0CiAgICAgLCBtX2RhdGEodm0sIHRoaXMsIGRhdGEsIGxlbmd0aCkKIHsgfQog
Ci12b2lkIEpTQmlnSW50Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3Im
IHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0JpZ0ludDo6dmlz
aXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGF1
dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNCaWdJbnQqPihjZWxsKTsKICAgICBBU1NFUlRfR0Nf
T0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC03Niw2ICs3Nyw4IEBAIHZv
aWQgSlNCaWdJbnQ6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWwKICAgICAgICAgdmlzaXRvci5t
YXJrQXV4aWxpYXJ5KGRhdGEpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNCaWdJbnQp
OworCiB2b2lkIEpTQmlnSW50Ojppbml0aWFsaXplKEluaXRpYWxpemF0aW9uVHlwZSBpbml0VHlw
ZSkKIHsKICAgICBpZiAoaW5pdFR5cGUgPT0gSW5pdGlhbGl6YXRpb25UeXBlOjpXaXRoWmVybykK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQmlnSW50LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCaWdJbnQuaAkocmV2aXNpb24g
MjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCaWdJbnQuaAkod29y
a2luZyBjb3B5KQpAQCAtNTAsNyArNTAsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhw
ciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgU3RydWN0
dXJlSXNJbW1vcnRhbCB8IE92ZXJyaWRlc1RvVGhpczsKICAgICBmcmllbmQgY2xhc3MgQ2FjaGVk
QmlnSW50OwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90Vmlz
aXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3M+CiAgICAgc3RhdGljIElzb1N1YnNwYWNlKiBz
dWJzcGFjZUZvcihWTSYgdm0pCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0JvdW5kRnVuY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTQm91bmRGdW5jdGlvbi5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQm91bmRGdW5jdGlvbi5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI0OSw3ICsyNDksOCBAQCB2b2lkIEpTQm91bmRGdW5jdGlvbjo6ZmluaXNoQ3JlYXRpb24o
Vk0mCiAgICAgQVNTRVJUKGluaGVyaXRzKHZtLCBpbmZvKCkpKTsKIH0KIAotdm9pZCBKU0JvdW5k
RnVuY3Rpb246OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRv
cikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTQm91bmRGdW5jdGlvbjo6dmlz
aXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpT
Qm91bmRGdW5jdGlvbiogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0JvdW5kRnVuY3Rpb24qPihjZWxs
KTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBA
IC0yNjEsNCArMjYyLDYgQEAgdm9pZCBKU0JvdW5kRnVuY3Rpb246OnZpc2l0Q2hpbGRyZW4oSlND
ZQogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fbmFtZU1heUJlTnVsbCk7CiB9CiAK
K0RFRklORV9WSVNJVF9DSElMRFJFTihKU0JvdW5kRnVuY3Rpb24pOworCiB9IC8vIG5hbWVzcGFj
ZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQm91bmRGdW5jdGlv
bi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQm91bmRG
dW5jdGlvbi5oCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0JvdW5kRnVuY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtODQsNyArODQsNyBAQCBw
cml2YXRlOgogICAgIEpTQm91bmRGdW5jdGlvbihWTSYsIE5hdGl2ZUV4ZWN1dGFibGUqLCBKU0ds
b2JhbE9iamVjdCosIFN0cnVjdHVyZSosIEpTT2JqZWN0KiB0YXJnZXRGdW5jdGlvbiwgSlNWYWx1
ZSBib3VuZFRoaXMsIEpTSW1tdXRhYmxlQnV0dGVyZmx5KiBib3VuZEFyZ3MsIEpTU3RyaW5nKiBu
YW1lTWF5QmVOdWxsLCBkb3VibGUgbGVuZ3RoKTsKIAogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24o
Vk0mKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9y
Jik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIFdyaXRlQmFycmllcjxKU09i
amVjdD4gbV90YXJnZXRGdW5jdGlvbjsKICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4gbV9ib3Vu
ZFRoaXM7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NhbGxlZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDYWxsZWUuY3Bw
CShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Nh
bGxlZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUwLDcgKzUwLDggQEAgdm9pZCBKU0NhbGxlZTo6
ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQogICAgIEFTU0VSVChpbmhlcml0cyh2bSwgaW5mbygpKSk7
CiB9CiAKLXZvaWQgSlNDYWxsZWU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90Vmlz
aXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTQ2FsbGVl
Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAg
ICAgSlNDYWxsZWUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNDYWxsZWUqPihjZWxsKTsKICAgICBB
U1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC01OSw0ICs2
MCw2IEBAIHZvaWQgSlNDYWxsZWU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWwKICAgICB2aXNp
dG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX3Njb3BlKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxE
UkVOKEpTQ2FsbGVlKTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0NhbGxlZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTQ2FsbGVlLmgJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2FsbGVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMCw3
ICsxMDAsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOwogICAg
IHVzaW5nIEJhc2U6OmZpbmlzaENyZWF0aW9uOwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGls
ZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47
CiAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCShyZXZpc2lvbiAyNzE0NDMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDEgSGFycmkg
UG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKICAqICBDb3B5cmlnaHQgKEMpIDIwMDEgUGV0ZXIgS2Vs
bHkgKHBta0Bwb3N0LmNvbSkKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAxOSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMjAgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTMyLDYg
KzMyLDcgQEAKICNpbmNsdWRlICJKU0xvY2suaCIKICNpbmNsdWRlICJKU1R5cGVJbmZvLmgiCiAj
aW5jbHVkZSAiU2xvdFZpc2l0b3IuaCIKKyNpbmNsdWRlICJTbG90VmlzaXRvck1hY3Jvcy5oIgog
I2luY2x1ZGUgIlN1YnNwYWNlQWNjZXNzLmgiCiAjaW5jbHVkZSAiVHlwZWRBcnJheVR5cGUuaCIK
ICNpbmNsdWRlICJXcml0ZUJhcnJpZXIuaCIKQEAgLTE2Nyw4ICsxNjgsOCBAQCBwdWJsaWM6CiAg
ICAgc2l6ZV90IGVzdGltYXRlZFNpemVJbkJ5dGVzKFZNJikgY29uc3Q7CiAgICAgSlNfRVhQT1JU
X1BSSVZBVEUgc3RhdGljIHNpemVfdCBlc3RpbWF0ZWRTaXplKEpTQ2VsbCosIFZNJik7CiAKLSAg
ICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7Ci0gICAg
c3RhdGljIHZvaWQgdmlzaXRPdXRwdXRDb25zdHJhaW50cyhKU0NlbGwqLCBTbG90VmlzaXRvciYp
OworICAgIERFQ0xBUkVfSU5MSU5FX1ZJU0lUX0NISUxEUkVOOworICAgIHN0YXRpYyB2b2lkIHZp
c2l0T3V0cHV0Q29uc3RyYWludHMoSlNDZWxsKiwgQWJzdHJhY3RTbG90VmlzaXRvciYpOwogCiAg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgYW5hbHl6ZUhlYXAoSlNDZWxsKiwgSGVh
cEFuYWx5emVyJik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2Vs
bElubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0NlbGxJbmxpbmVzLmgJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQ2VsbElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBA
QAogI2luY2x1ZGUgIkNvbXBsZXRlU3Vic3BhY2VJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQ1BVLmgi
CiAjaW5jbHVkZSAiQ2FsbEZyYW1lSW5saW5lcy5oIgorI2luY2x1ZGUgIkRlYnVnU2xvdFZpc2l0
b3JJbmxpbmVzLmgiCiAjaW5jbHVkZSAiRGVmZXJHQy5oIgogI2luY2x1ZGUgIkZyZWVMaXN0SW5s
aW5lcy5oIgogI2luY2x1ZGUgIkhhbmRsZS5oIgpAQCAtMTQxLDEyICsxNDIsMTUgQEAgQUxXQVlT
X0lOTElORSBTdHJ1Y3R1cmUqIEpTQ2VsbDo6c3RydWN0dQogICAgIHJldHVybiB2bS5nZXRTdHJ1
Y3R1cmUobV9zdHJ1Y3R1cmVJRCk7CiB9CiAKLWlubGluZSB2b2lkIEpTQ2VsbDo6dmlzaXRDaGls
ZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5h
bWUgVmlzaXRvcj4KK2lubGluZSB2b2lkIEpTQ2VsbDo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxs
KiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVy
ZWQoY2VsbC0+c3RydWN0dXJlKHZpc2l0b3Iudm0oKSkpOwogfQogCi1pbmxpbmUgdm9pZCBKU0Nl
bGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHMoSlNDZWxsKiwgU2xvdFZpc2l0b3ImKQorREVGSU5F
X0lOTElORV9WSVNJVF9DSElMRFJFTihKU0NlbGwpOworCitpbmxpbmUgdm9pZCBKU0NlbGw6OnZp
c2l0T3V0cHV0Q29uc3RyYWludHMoSlNDZWxsKiwgQWJzdHJhY3RTbG90VmlzaXRvciYpCiB7CiB9
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ3VzdG9tR2V0dGVyU2V0
dGVyRnVuY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTQ3VzdG9tR2V0dGVyU2V0dGVyRnVuY3Rpb24uY3BwCShyZXZpc2lvbiAyNzE0NDMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0N1c3RvbUdldHRlclNldHRlckZ1bmN0
aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODUsNyArODUsOCBAQCBKU0N1c3RvbUdldHRlclNl
dHRlckZ1bmN0aW9uKiBKU0N1c3RvbUdlCiAgICAgcmV0dXJuIGZ1bmN0aW9uOwogfQogCi12b2lk
IEpTQ3VzdG9tR2V0dGVyU2V0dGVyRnVuY3Rpb246OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxs
LCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lk
IEpTQ3VzdG9tR2V0dGVyU2V0dGVyRnVuY3Rpb246OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCog
Y2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU0N1c3RvbUdldHRlclNldHRlckZ1bmN0
aW9uKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQ3VzdG9tR2V0dGVyU2V0dGVyRnVuY3Rpb24qPihj
ZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7
CkBAIC05NCw2ICs5NSw4IEBAIHZvaWQgSlNDdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbjo6dmlz
aXQKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2dldHRlclNldHRlcik7CiB9CiAK
K0RFRklORV9WSVNJVF9DSElMRFJFTihKU0N1c3RvbUdldHRlclNldHRlckZ1bmN0aW9uKTsKKwog
dm9pZCBKU0N1c3RvbUdldHRlclNldHRlckZ1bmN0aW9uOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0s
IE5hdGl2ZUV4ZWN1dGFibGUqIGV4ZWN1dGFibGUsIEN1c3RvbUdldHRlclNldHRlciogZ2V0dGVy
U2V0dGVyLCBjb25zdCBTdHJpbmcmIG5hbWUpCiB7CiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24o
dm0sIGV4ZWN1dGFibGUsIGlzU2V0dGVyKCksIG5hbWUpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNDdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbi5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ3VzdG9tR2V0dGVyU2V0dGVyRnVu
Y3Rpb24uaAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNDdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC02Myw3
ICs2Myw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgSlNDdXN0b21HZXR0ZXJTZXR0ZXJGdW5j
dGlvbihWTSYsIE5hdGl2ZUV4ZWN1dGFibGUqLCBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSos
IFR5cGUsIGNvbnN0IFByb3BlcnR5TmFtZSYpOwogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0m
LCBOYXRpdmVFeGVjdXRhYmxlKiwgQ3VzdG9tR2V0dGVyU2V0dGVyKiwgY29uc3QgU3RyaW5nJik7
Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwor
ICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBXcml0ZUJhcnJpZXI8Q3VzdG9tR2V0
dGVyU2V0dGVyPiBtX2dldHRlclNldHRlcjsKICAgICBUeXBlIG1fdHlwZTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRmluYWxpemF0aW9uUmVnaXN0cnkuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRmluYWxpemF0aW9uUmVn
aXN0cnkuY3BwCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0ZpbmFsaXphdGlvblJlZ2lzdHJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiAr
MjYsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkpTRmluYWxpemF0aW9uUmVn
aXN0cnkuaCIKIAorI2luY2x1ZGUgIkFic3RyYWN0U2xvdFZpc2l0b3IuaCIKICNpbmNsdWRlICJE
ZWZlcnJlZFdvcmtUaW1lci5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJK
U0ludGVybmFsRmllbGRPYmplY3RJbXBsSW5saW5lcy5oIgpAQCAtNjAsNyArNjEsOCBAQCB2b2lk
IEpTRmluYWxpemF0aW9uUmVnaXN0cnk6OmZpbmlzaENyZWF0CiAgICAgZ2xvYmFsT2JqZWN0LT5n
bG9iYWxPYmplY3RNZXRob2RUYWJsZSgpLT5jdXJyZW50U2NyaXB0RXhlY3V0aW9uT3duZXIoZ2xv
YmFsT2JqZWN0KTsKIH0KIAotdm9pZCBKU0ZpbmFsaXphdGlvblJlZ2lzdHJ5Ojp2aXNpdENoaWxk
cmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBWaXNpdG9yPgordm9pZCBKU0ZpbmFsaXphdGlvblJlZ2lzdHJ5Ojp2aXNpdENoaWxkcmVuSW1w
bChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgQmFzZTo6dmlzaXRDaGls
ZHJlbihjZWxsLCB2aXNpdG9yKTsKIApAQCAtODAsMTMgKzgyLDE1IEBAIHZvaWQgSlNGaW5hbGl6
YXRpb25SZWdpc3RyeTo6dmlzaXRDaGlsZHIKICAgICBmb3IgKGF1dG8mIGhvbGRpbmdzIDogdGhp
c09iamVjdC0+bV9ub1VucmVnaXN0cmF0aW9uRGVhZCkKICAgICAgICAgdmlzaXRvci5hcHBlbmQo
aG9sZGluZ3MpOwogCi0gICAgc2l6ZV90IHRvdGFsQnVmZmVyU2l6ZXNJbkJ5dGVzID0gdGhpc09i
amVjdC0+bV9kZWFkUmVnaXN0cmF0aW9ucy5jYXBhY2l0eSgpICogc2l6ZW9mKGRlY2x0eXBlKHRo
aXNPYmplY3QtPm1fZGVhZFJlZ2lzdHJhdGlvbnMpOjpLZXlWYWx1ZVBhaXJUeXBlKTsKLSAgICB0
b3RhbEJ1ZmZlclNpemVzSW5CeXRlcyArPSB0aGlzT2JqZWN0LT5tX2xpdmVSZWdpc3RyYXRpb25z
LmNhcGFjaXR5KCkgKiBzaXplb2YoZGVjbHR5cGUodGhpc09iamVjdC0+bV9kZWFkUmVnaXN0cmF0
aW9ucyk6OktleVZhbHVlUGFpclR5cGUpOworICAgIHNpemVfdCB0b3RhbEJ1ZmZlclNpemVzSW5C
eXRlcyA9IHRoaXNPYmplY3QtPm1fZGVhZFJlZ2lzdHJhdGlvbnMuY2FwYWNpdHkoKSAqIHNpemVv
Zih0eXBlbmFtZSBkZWNsdHlwZSh0aGlzT2JqZWN0LT5tX2RlYWRSZWdpc3RyYXRpb25zKTo6S2V5
VmFsdWVQYWlyVHlwZSk7CisgICAgdG90YWxCdWZmZXJTaXplc0luQnl0ZXMgKz0gdGhpc09iamVj
dC0+bV9saXZlUmVnaXN0cmF0aW9ucy5jYXBhY2l0eSgpICogc2l6ZW9mKHR5cGVuYW1lIGRlY2x0
eXBlKHRoaXNPYmplY3QtPm1fZGVhZFJlZ2lzdHJhdGlvbnMpOjpLZXlWYWx1ZVBhaXJUeXBlKTsK
ICAgICB0b3RhbEJ1ZmZlclNpemVzSW5CeXRlcyArPSB0aGlzT2JqZWN0LT5tX25vVW5yZWdpc3Ry
YXRpb25MaXZlLmNhcGFjaXR5KCkgKiBzaXplb2YoZGVjbHR5cGUodGhpc09iamVjdC0+bV9ub1Vu
cmVnaXN0cmF0aW9uTGl2ZS50YWtlTGFzdCgpKSk7CiAgICAgdG90YWxCdWZmZXJTaXplc0luQnl0
ZXMgKz0gdGhpc09iamVjdC0+bV9ub1VucmVnaXN0cmF0aW9uRGVhZC5jYXBhY2l0eSgpICogc2l6
ZW9mKGRlY2x0eXBlKHRoaXNPYmplY3QtPm1fbm9VbnJlZ2lzdHJhdGlvbkxpdmUudGFrZUxhc3Qo
KSkpOwogICAgIHZpc2l0b3Iudm0oKS5oZWFwLnJlcG9ydEV4dHJhTWVtb3J5VmlzaXRlZCh0b3Rh
bEJ1ZmZlclNpemVzSW5CeXRlcyk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU0ZpbmFs
aXphdGlvblJlZ2lzdHJ5KTsKKwogdm9pZCBKU0ZpbmFsaXphdGlvblJlZ2lzdHJ5OjpkZXN0cm95
KEpTQ2VsbCogdGFibGUpCiB7CiAgICAgc3RhdGljX2Nhc3Q8SlNGaW5hbGl6YXRpb25SZWdpc3Ry
eSo+KHRhYmxlKS0+fkpTRmluYWxpemF0aW9uUmVnaXN0cnkoKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTRmluYWxpemF0aW9uUmVnaXN0cnkuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ZpbmFsaXphdGlvblJlZ2lzdHJ5LmgJ
KHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRmlu
YWxpemF0aW9uUmVnaXN0cnkuaAkod29ya2luZyBjb3B5KQpAQCAtNzAsNyArNzAsNyBAQCBwdWJs
aWM6CiAgICAgREVDTEFSRV9FWFBPUlRfSU5GTzsKIAogICAgIHZvaWQgZmluYWxpemVVbmNvbmRp
dGlvbmFsbHkoVk0mKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNs
b3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKICAgICBzdGF0aWMgdm9p
ZCBkZXN0cm95KEpTQ2VsbCopOwogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0Rlc3Ry
dWN0aW9uID0gdHJ1ZTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNG
dW5jdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNGdW5jdGlvbi5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTRnVuY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTIsNyArMjUyLDgg
QEAgY29uc3QgU291cmNlQ29kZSogSlNGdW5jdGlvbjo6c291cmNlQ29kZQogICAgIHJldHVybiAm
anNFeGVjdXRhYmxlKCktPnNvdXJjZSgpOwogfQogICAgIAotdm9pZCBKU0Z1bmN0aW9uOjp2aXNp
dENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0
eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0Z1bmN0aW9uOjp2aXNpdENoaWxkcmVuSW1wbChKU0Nl
bGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNGdW5jdGlvbiogdGhpc09iamVj
dCA9IGpzQ2FzdDxKU0Z1bmN0aW9uKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhF
UklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtMjYxLDYgKzI2Miw4IEBAIHZvaWQgSlNGdW5j
dGlvbjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGMKICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmll
cmVkKGJpdHdpc2VfY2FzdDxKU0NlbGwqPihiaXR3aXNlX2Nhc3Q8dWludHB0cl90Pih0aGlzT2Jq
ZWN0LT5tX2V4ZWN1dGFibGVPclJhcmVEYXRhKSAmIH5yYXJlRGF0YVRhZykpOwogfQogCitERUZJ
TkVfVklTSVRfQ0hJTERSRU4oSlNGdW5jdGlvbik7CisKIENhbGxEYXRhIEpTRnVuY3Rpb246Omdl
dENhbGxEYXRhKEpTQ2VsbCogY2VsbCkKIHsKICAgICAvLyBLZWVwIHRoaXMgZnVuY3Rpb24gT0sg
Zm9yIGludm9jYXRpb24gZnJvbSBjb25jdXJyZW50IGNvbXBpbGVycy4KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmgJKHJldmlzaW9uIDI3MTQ0MykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uaAkod29ya2luZyBjb3B5
KQpAQCAtMTgwLDcgKzE4MCw3IEBAIHByb3RlY3RlZDoKIAogICAgIHN0YXRpYyBib29sIGRlbGV0
ZVByb3BlcnR5KEpTQ2VsbCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBEZWxldGVQ
cm9wZXJ0eVNsb3QmKTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwg
U2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiBwcml2YXRlOgog
ICAgIHN0YXRpYyBKU0Z1bmN0aW9uKiBjcmVhdGVJbXBsKFZNJiB2bSwgRnVuY3Rpb25FeGVjdXRh
YmxlKiBleGVjdXRhYmxlLCBKU1Njb3BlKiBzY29wZSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyYXRvci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmF0b3IuY3BwCShy
ZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVy
YXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU5LDExICs1OSwxNCBAQCB2b2lkIEpTR2VuZXJh
dG9yOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCiAgICAgICAgIGludGVybmFsRmllbGQoaW5kZXgp
LnNldCh2bSwgdGhpcywgdmFsdWVzW2luZGV4XSk7CiB9CiAKLXZvaWQgSlNHZW5lcmF0b3I6OnZp
c2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRl
PHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTR2VuZXJhdG9yOjp2aXNpdENoaWxkcmVuSW1wbChK
U0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0byogdGhpc09iamVjdCA9
IGpzQ2FzdDxKU0dlbmVyYXRvcio+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJ
VFModGhpc09iamVjdCwgaW5mbygpKTsKICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmpl
Y3QsIHZpc2l0b3IpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNHZW5lcmF0b3IpOwor
CiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTR2VuZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNHZW5lcmF0b3IuaAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNHZW5lcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtOTQsNyArOTQsNyBA
QCBwdWJsaWM6CiAKICAgICBERUNMQVJFX0VYUE9SVF9JTkZPOwogCi0gICAgc3RhdGljIHZvaWQg
dmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRf
Q0hJTERSRU47CiAKIHByaXZhdGU6CiAgICAgSlNHZW5lcmF0b3IoVk0mLCBTdHJ1Y3R1cmUqKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlW
aWV3LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5l
cmljVHlwZWRBcnJheVZpZXcuaAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXcuaAkod29ya2luZyBjb3B5KQpA
QCAtMzA3LDcgKzMwNyw3IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVy
dHlOYW1lcyhKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lQXJyYXkmLCBE
b250RW51bVByb3BlcnRpZXNNb2RlKTsKIAogICAgIHN0YXRpYyBzaXplX3QgZXN0aW1hdGVkU2l6
ZShKU0NlbGwqLCBWTSYpOwotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwg
U2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1RFTVBMQVRFX1ZJU0lUX0NISUxEUkVOOwogCiAg
ICAgLy8gUmV0dXJucyB0cnVlIGlmIHN1Y2Nlc3NmdWwsIGFuZCBmYWxzZSBvbiBlcnJvcjsgaXQg
d2lsbCB0aHJvdyBvbiBlcnJvci4KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPdGhlckFkYXB0b3I+
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5
Vmlld0lubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaAkocmV2aXNpb24gMjcxNDQzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxp
bmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5MSw3ICs0OTEsOCBAQCBzaXplX3QgSlNHZW5lcmlj
VHlwZWRBcnJheVZpZXc8QWRhcHRvcj46CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+
Ci12b2lkIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+Ojp2aXNpdENoaWxkcmVuKEpT
Q2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNp
dG9yPgordm9pZCBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6dmlzaXRDaGlsZHJl
bkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTR2VuZXJpY1R5
cGVkQXJyYXlWaWV3KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3
Kj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZv
KCkpOwpAQCAtNTI5LDQgKzUzMCw2IEBAIHZvaWQgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRh
cHRvcj46OnYKICAgICB9CiB9CiAKK0RFRklORV9URU1QTEFURV9WSVNJVF9DSElMRFJFTih0ZW1w
bGF0ZTx0eXBlbmFtZSBBZGFwdG9yPiwgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj4p
OworCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTg5NSw3ICsxODk1LDggQEAgdm9pZCBKU0dsb2JhbE9iamVjdDo6cmVzZXRQcm90b3R5
cGUoVk0mIAogICAgIHNldEdsb2JhbFRoaXModm0sIEpTUHJveHk6OmNyZWF0ZSh2bSwgSlNQcm94
eTo6Y3JlYXRlU3RydWN0dXJlKHZtLCB0aGlzLCBwcm90b3R5cGUsIFB1cmVGb3J3YXJkaW5nUHJv
eHlUeXBlKSwgdGhpcykpOwogfQogCi12b2lkIEpTR2xvYmFsT2JqZWN0Ojp2aXNpdENoaWxkcmVu
KEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPgordm9pZCBKU0dsb2JhbE9iamVjdDo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBj
ZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogeyAKICAgICBKU0dsb2JhbE9iamVjdCogdGhpc09iamVj
dCA9IGpzQ2FzdDxKU0dsb2JhbE9iamVjdCo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1Rf
SU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTIwNjMsNiArMjA2NCw4IEBAIHZvaWQg
SlNHbG9iYWxPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWwKICAgICB0aGlzT2JqZWN0LT5tX3Jl
Z0V4cEdsb2JhbERhdGEudmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7CiB9CiAKK0RFRklORV9FWFBP
UlRfVklTSVRfQ0hJTERSRU4oSlNHbG9iYWxPYmplY3QpOworCiBDYWxsRnJhbWUqIEpTR2xvYmFs
T2JqZWN0OjpkZXByZWNhdGVkQ2FsbEZyYW1lRm9yRGVidWdnZXIoKQogewogICAgIHJldHVybiBD
YWxsRnJhbWU6OmNyZWF0ZShtX2RlcHJlY2F0ZWRDYWxsRnJhbWVGb3JEZWJ1Z2dlcik7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgJKHJl
dmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFs
T2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTYwOSw3ICs2MDksNyBAQCBwdWJsaWM6CiAgICAg
SlNfRVhQT1JUX1BSSVZBVEUgfkpTR2xvYmFsT2JqZWN0KCk7CiAgICAgSlNfRVhQT1JUX1BSSVZB
VEUgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKIAotICAgIEpTX0VYUE9SVF9QUklWQVRF
IHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBE
RUNMQVJFX0VYUE9SVF9WSVNJVF9DSElMRFJFTjsKIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0
YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0Kiwg
UHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0
aWMgYm9vbCBwdXQoSlNDZWxsKiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIEpTVmFs
dWUsIFB1dFByb3BlcnR5U2xvdCYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNJbW11dGFibGVCdXR0ZXJmbHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTSW1tdXRhYmxlQnV0dGVyZmx5LmNwcAkocmV2aXNpb24gMjcxNDQz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbW11dGFibGVCdXR0ZXJmbHku
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw4IEBAIG5hbWVzcGFjZSBKU0MgewogCiBj
b25zdCBDbGFzc0luZm8gSlNJbW11dGFibGVCdXR0ZXJmbHk6OnNfaW5mbyA9IHsgIkltbXV0YWJs
ZSBCdXR0ZXJmbHkiLCBudWxscHRyLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RB
QkxFKEpTSW1tdXRhYmxlQnV0dGVyZmx5KSB9OwogCi12b2lkIEpTSW1tdXRhYmxlQnV0dGVyZmx5
Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1w
bGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0ltbXV0YWJsZUJ1dHRlcmZseTo6dmlzaXRD
aGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEFTU0VS
VF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2VsbCwgaW5mbygpKTsKICAgICBCYXNlOjp2aXNpdENoaWxk
cmVuKGNlbGwsIHZpc2l0b3IpOwpAQCAtNDUsNiArNDYsOCBAQCB2b2lkIEpTSW1tdXRhYmxlQnV0
dGVyZmx5Ojp2aXNpdENoaWxkcmVuCiAgICAgdmlzaXRvci5hcHBlbmRWYWx1ZXNIaWRkZW4oYnV0
dGVyZmx5LT5jb250aWd1b3VzKCkuZGF0YSgpLCBidXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpKTsK
IH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTSW1tdXRhYmxlQnV0dGVyZmx5KTsKKwogdm9p
ZCBKU0ltbXV0YWJsZUJ1dHRlcmZseTo6Y29weVRvQXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0Kiwg
SlNWYWx1ZSogZmlyc3RFbGVtZW50RGVzdCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5n
dGgpCiB7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ltbXV0YWJsZUJ1dHRlcmZseS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTSW1tdXRhYmxlQnV0
dGVyZmx5LmgJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTSW1tdXRhYmxlQnV0dGVyZmx5LmgJKHdvcmtpbmcgY29weSkKQEAgLTE0NSw3ICsxNDUs
NyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBqc0RvdWJsZU51bWJlcih2YWx1ZSk7CiAgICAg
fQogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYp
OworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICB2b2lkIGNvcHlUb0FyZ3VtZW50
cyhKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUqIGZpcnN0RWxlbWVudERlc3QsIHVuc2lnbmVkIG9m
ZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTSW50ZXJuYWxGaWVsZE9iamVjdEltcGwuaAkocmV2aXNp
b24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbnRlcm5hbEZp
ZWxkT2JqZWN0SW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC02Niw3ICs2Niw3IEBAIHB1YmxpYzoK
ICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mSW50ZXJuYWxGaWVsZCh1bnNpZ25lZCBpbmRl
eCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTSW50ZXJuYWxGaWVsZE9iamVjdEltcGwsIG1f
aW50ZXJuYWxGaWVsZHMpICsgaW5kZXggKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KTsg
fQogCiBwcm90ZWN0ZWQ6Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBT
bG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVEVNUExBVEVfVklTSVRfQ0hJTERSRU47CiAKICAg
ICBKU0ludGVybmFsRmllbGRPYmplY3RJbXBsKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUp
CiAgICAgICAgIDogQmFzZSh2bSwgc3RydWN0dXJlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbElubGluZXMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ludGVybmFsRmllbGRPYmplY3RJ
bXBsSW5saW5lcy5oCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0ludGVybmFsRmllbGRPYmplY3RJbXBsSW5saW5lcy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zMCw3ICszMCw4IEBACiBuYW1lc3BhY2UgSlNDIHsKIAogdGVtcGxhdGU8dW5zaWduZWQg
cGFzc2VkTnVtYmVyT2ZJbnRlcm5hbEZpZWxkcz4KLXZvaWQgSlNJbnRlcm5hbEZpZWxkT2JqZWN0
SW1wbDxwYXNzZWROdW1iZXJPZkludGVybmFsRmllbGRzPjo6dmlzaXRDaGlsZHJlbihKU0NlbGwq
IGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4K
K3ZvaWQgSlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbDxwYXNzZWROdW1iZXJPZkludGVybmFsRmll
bGRzPjo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQog
ewogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1w
bCo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5m
bygpKTsKQEAgLTM4LDQgKzM5LDYgQEAgdm9pZCBKU0ludGVybmFsRmllbGRPYmplY3RJbXBsPHBh
c3NlZE51bQogICAgIHZpc2l0b3IuYXBwZW5kVmFsdWVzKHRoaXNPYmplY3QtPm1faW50ZXJuYWxG
aWVsZHMsIG51bWJlck9mSW50ZXJuYWxGaWVsZHMpOwogfQogCitERUZJTkVfVEVNUExBVEVfVklT
SVRfQ0hJTERSRU4odGVtcGxhdGU8dW5zaWduZWQgcGFzc2VkTnVtYmVyT2ZJbnRlcm5hbEZpZWxk
cz4sIEpTSW50ZXJuYWxGaWVsZE9iamVjdEltcGw8cGFzc2VkTnVtYmVyT2ZJbnRlcm5hbEZpZWxk
cz4pOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTTGV4aWNhbEVudmlyb25tZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0xleGljYWxFbnZpcm9ubWVudC5jcHAJKHJldmlzaW9uIDI3
MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTGV4aWNhbEVudmlyb25t
ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsOCBAQCBuYW1lc3BhY2UgSlNDIHsK
IAogY29uc3QgQ2xhc3NJbmZvIEpTTGV4aWNhbEVudmlyb25tZW50OjpzX2luZm8gPSB7ICJKU0xl
eGljYWxFbnZpcm9ubWVudCIsICZCYXNlOjpzX2luZm8sIG51bGxwdHIsIG51bGxwdHIsIENSRUFU
RV9NRVRIT0RfVEFCTEUoSlNMZXhpY2FsRW52aXJvbm1lbnQpIH07CiAKLXZvaWQgSlNMZXhpY2Fs
RW52aXJvbm1lbnQ6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlz
aXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTTGV4aWNhbEVudmlyb25t
ZW50Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7
CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0xleGljYWxFbnZpcm9ubWVudCo+KGNl
bGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsK
QEAgLTQ0LDYgKzQ1LDggQEAgdm9pZCBKU0xleGljYWxFbnZpcm9ubWVudDo6dmlzaXRDaGlsZHJl
bgogICAgIHZpc2l0b3IuYXBwZW5kVmFsdWVzSGlkZGVuKHRoaXNPYmplY3QtPnZhcmlhYmxlcygp
LCB0aGlzT2JqZWN0LT5zeW1ib2xUYWJsZSgpLT5zY29wZVNpemUoKSk7CiB9CiAKK0RFRklORV9W
SVNJVF9DSElMRFJFTihKU0xleGljYWxFbnZpcm9ubWVudCk7CisKIHZvaWQgSlNMZXhpY2FsRW52
aXJvbm1lbnQ6OmFuYWx5emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFuYWx5emVyJiBhbmFseXpl
cikKIHsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTTGV4aWNhbEVudmlyb25tZW50
Kj4oY2VsbCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xleGljYWxF
bnZpcm9ubWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTTGV4aWNhbEVudmlyb25tZW50LmgJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTTGV4aWNhbEVudmlyb25tZW50LmgJKHdvcmtpbmcgY29weSkK
QEAgLTEzNCw3ICsxMzQsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBz
dGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVD
TEFSRV9WSVNJVF9DSElMRFJFTjsKICAgICBzdGF0aWMgdm9pZCBhbmFseXplSGVhcChKU0NlbGwq
LCBIZWFwQW5hbHl6ZXImKTsKIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTTWFwSXRlcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTTWFwSXRlcmF0b3IuY3BwCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01hcEl0ZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNTcsMTMgKzU3LDE2IEBAIHZvaWQgSlNNYXBJdGVyYXRvcjo6ZmluaXNoQ3JlYXRpb24oVk0m
IHYKICAgICAgICAgQmFzZTo6aW50ZXJuYWxGaWVsZChpbmRleCkuc2V0KHZtLCB0aGlzLCB2YWx1
ZXNbaW5kZXhdKTsKIH0KIAotdm9pZCBKU01hcEl0ZXJhdG9yOjp2aXNpdENoaWxkcmVuKEpTQ2Vs
bCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
Pgordm9pZCBKU01hcEl0ZXJhdG9yOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZp
c2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU01hcEl0
ZXJhdG9yKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0
LCBpbmZvKCkpOwogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7
CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU01hcEl0ZXJhdG9yKTsKKwogSlNWYWx1ZSBK
U01hcEl0ZXJhdG9yOjpjcmVhdGVQYWlyKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpT
VmFsdWUga2V5LCBKU1ZhbHVlIHZhbHVlKQogewogICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFy
Z3M7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01hcEl0ZXJhdG9yLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNYXBJdGVyYXRv
ci5oCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U01hcEl0ZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0Miw3ICsxNDIsNyBAQCBwcml2YXRl
OgogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBKU01hcCos
IEl0ZXJhdGlvbktpbmQpOwogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKICAgICBKU1Zh
bHVlIGNyZWF0ZVBhaXIoSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlLCBKU1ZhbHVlKTsKLSAgICBz
dGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVD
TEFSRV9WSVNJVF9DSElMRFJFTjsKIH07CiBTVEFUSUNfQVNTRVJUX0lTX1RSSVZJQUxMWV9ERVNU
UlVDVElCTEUoSlNNYXBJdGVyYXRvcik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTTW9kdWxlRW52aXJvbm1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlRW52aXJvbm1lbnQuY3BwCShyZXZpc2lvbiAyNzE0
NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZUVudmlyb25tZW50
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjUsNyArNjUsOCBAQCB2b2lkIEpTTW9kdWxlRW52aXJv
bm1lbnQ6OmZpbmlzaENyZWF0aW9uCiAgICAgdGhpcy0+bW9kdWxlUmVjb3JkU2xvdCgpLnNldCh2
bSwgdGhpcywgbW9kdWxlUmVjb3JkKTsKIH0KIAotdm9pZCBKU01vZHVsZUVudmlyb25tZW50Ojp2
aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0
ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU01vZHVsZUVudmlyb25tZW50Ojp2aXNpdENoaWxk
cmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNNb2R1bGVF
bnZpcm9ubWVudCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU01vZHVsZUVudmlyb25tZW50Kj4oY2Vs
bCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpA
QCAtNzQsNiArNzUsOCBAQCB2b2lkIEpTTW9kdWxlRW52aXJvbm1lbnQ6OnZpc2l0Q2hpbGRyZW4o
CiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bW9kdWxlUmVjb3JkU2xvdCgpKTsKIH0K
IAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTTW9kdWxlRW52aXJvbm1lbnQpOworCiBib29sIEpT
TW9kdWxlRW52aXJvbm1lbnQ6OmdldE93blByb3BlcnR5U2xvdChKU09iamVjdCogY2VsbCwgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJv
cGVydHlTbG90JiBzbG90KQogewogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlRW52aXJvbm1lbnQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZUVudmly
b25tZW50LmgJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTTW9kdWxlRW52aXJvbm1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtODksNyArODksNyBA
QCBwcml2YXRlOgogICAgICAgICByZXR1cm4gKmJpdHdpc2VfY2FzdDxXcml0ZUJhcnJpZXJCYXNl
PEFic3RyYWN0TW9kdWxlUmVjb3JkPio+KGJpdHdpc2VfY2FzdDxjaGFyKj4odGhpcykgKyBvZmZz
ZXRPZk1vZHVsZVJlY29yZChzeW1ib2xUYWJsZSgpKSk7CiAgICAgfQogCi0gICAgc3RhdGljIHZv
aWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklT
SVRfQ0hJTERSRU47CiB9OwogCiBpbmxpbmUgSlNNb2R1bGVFbnZpcm9ubWVudDo6SlNNb2R1bGVF
bnZpcm9ubWVudChWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU1Njb3BlKiBjdXJyZW50
U2NvcGUsIFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTTW9kdWxlTmFtZXNwYWNlT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZU5hbWVzcGFjZU9iamVjdC5jcHAJ
KHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9k
dWxlTmFtZXNwYWNlT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODUsNyArODUsOCBAQCB2
b2lkIEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0OjpkZXN0cm95KEpTCiAgICAgdGhpc09iamVjdC0+
SlNNb2R1bGVOYW1lc3BhY2VPYmplY3Q6On5KU01vZHVsZU5hbWVzcGFjZU9iamVjdCgpOwogfQog
Ci12b2lkIEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2Vs
bCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9p
ZCBKU01vZHVsZU5hbWVzcGFjZU9iamVjdDo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxs
LCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0KiB0aGlz
T2JqZWN0ID0ganNDYXN0PEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0Kj4oY2VsbCk7CiAgICAgQVNT
RVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtOTgsNiArOTks
OCBAQCB2b2lkIEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0Ojp2aXNpdENoaWxkCiAgICAgfQogfQog
CitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QpOworCiBzdGF0
aWMgSlNWYWx1ZSBnZXRWYWx1ZShKU01vZHVsZUVudmlyb25tZW50KiBlbnZpcm9ubWVudCwgUHJv
cGVydHlOYW1lIGxvY2FsTmFtZSwgU2NvcGVPZmZzZXQmIHNjb3BlT2Zmc2V0KQogewogICAgIFN5
bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSA9IGVudmlyb25tZW50LT5zeW1ib2xUYWJsZSgpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVOYW1lc3BhY2VPYmplY3Qu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZU5h
bWVzcGFjZU9iamVjdC5oCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU01vZHVsZU5hbWVzcGFjZU9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC03
Miw3ICs3Miw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgSlNN
b2R1bGVOYW1lc3BhY2VPYmplY3QoVk0mLCBTdHJ1Y3R1cmUqKTsKICAgICBKU19FWFBPUlRfUFJJ
VkFURSB2b2lkIGZpbmlzaENyZWF0aW9uKEpTR2xvYmFsT2JqZWN0KiwgQWJzdHJhY3RNb2R1bGVS
ZWNvcmQqLCBWZWN0b3I8c3RkOjpwYWlyPElkZW50aWZpZXIsIEFic3RyYWN0TW9kdWxlUmVjb3Jk
OjpSZXNvbHV0aW9uPj4mJik7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwq
LCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAgICAgYm9vbCBn
ZXRPd25Qcm9wZXJ0eVNsb3RDb21tb24oSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIFBy
b3BlcnR5U2xvdCYpOwogCiAgICAgc3RydWN0IEV4cG9ydEVudHJ5IHsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlUmVjb3JkLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZVJlY29yZC5jcHAJKHJldmlzaW9u
IDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlUmVjb3Jk
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzAsNyArNzAsOCBAQCB2b2lkIEpTTW9kdWxlUmVjb3Jk
OjpmaW5pc2hDcmVhdGlvbihKU0dsCiAgICAgQVNTRVJUKGluaGVyaXRzKHZtLCBpbmZvKCkpKTsK
IH0KIAotdm9pZCBKU01vZHVsZVJlY29yZDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNN
b2R1bGVSZWNvcmQ6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlz
aXRvcikKIHsKICAgICBKU01vZHVsZVJlY29yZCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU01vZHVs
ZVJlY29yZCo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVj
dCwgaW5mbygpKTsKQEAgLTc4LDYgKzc5LDggQEAgdm9pZCBKU01vZHVsZVJlY29yZDo6dmlzaXRD
aGlsZHJlbihKU0NlbAogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fbW9kdWxlUHJv
Z3JhbUV4ZWN1dGFibGUpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNNb2R1bGVSZWNv
cmQpOworCiB2b2lkIEpTTW9kdWxlUmVjb3JkOjpsaW5rKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEpTVmFsdWUgc2NyaXB0RmV0Y2hlcikKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmpl
Y3QtPnZtKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZVJl
Y29yZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9k
dWxlUmVjb3JkLmgJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTTW9kdWxlUmVjb3JkLmgJKHdvcmtpbmcgY29weSkKQEAgLTY2LDcgKzY2LDcgQEAg
cHJpdmF0ZToKIAogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxPYmplY3QqLCBWTSYp
OwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYp
OworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICB2b2lkIGluc3RhbnRpYXRlRGVj
bGFyYXRpb25zKEpTR2xvYmFsT2JqZWN0KiwgTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUqLCBKU1Zh
bHVlIHNjcmlwdEZldGNoZXIpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU05hdGl2ZVN0ZEZ1bmN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU05hdGl2ZVN0ZEZ1bmN0aW9uLmNwcAkocmV2aXNpb24gMjcxNDQzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNOYXRpdmVTdGRGdW5jdGlvbi5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQxLDEzICs0MSwxNiBAQCBKU05hdGl2ZVN0ZEZ1bmN0aW9uOjpK
U05hdGl2ZVN0ZEZ1bmN0aW9uCiB7CiB9CiAKLXZvaWQgSlNOYXRpdmVTdGRGdW5jdGlvbjo6dmlz
aXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8
dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNOYXRpdmVTdGRGdW5jdGlvbjo6dmlzaXRDaGlsZHJl
bkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTTmF0aXZlU3Rk
RnVuY3Rpb24qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNOYXRpdmVTdGRGdW5jdGlvbio+KGNlbGwp
OwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKICAg
ICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwogfQogCitERUZJTkVf
VklTSVRfQ0hJTERSRU4oSlNOYXRpdmVTdGRGdW5jdGlvbik7CisKIHZvaWQgSlNOYXRpdmVTdGRG
dW5jdGlvbjo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBOYXRpdmVFeGVjdXRhYmxlKiBleGVjdXRh
YmxlLCB1bnNpZ25lZCBsZW5ndGgsIGNvbnN0IFN0cmluZyYgbmFtZSkKIHsKICAgICBCYXNlOjpm
aW5pc2hDcmVhdGlvbih2bSwgZXhlY3V0YWJsZSwgbGVuZ3RoLCBuYW1lKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTmF0aXZlU3RkRnVuY3Rpb24uaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU05hdGl2ZVN0ZEZ1bmN0aW9uLmgJ
KHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTmF0
aXZlU3RkRnVuY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtNjUsNyArNjUsNyBAQCBwdWJsaWM6
CiBwcml2YXRlOgogICAgIEpTTmF0aXZlU3RkRnVuY3Rpb24oVk0mLCBOYXRpdmVFeGVjdXRhYmxl
KiwgSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqLCBOYXRpdmVTdGRGdW5jdGlvbiYmKTsKICAg
ICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgTmF0aXZlRXhlY3V0YWJsZSosIHVuc2lnbmVkIGxl
bmd0aCwgY29uc3QgU3RyaW5nJiBuYW1lKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVu
KEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAog
ICAgIE5hdGl2ZVN0ZEZ1bmN0aW9uIG1fZnVuY3Rpb247CiB9OwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC05MCw3ICs5MCw4IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKU09iamVjdDo6Z2V0Tm9uUmVpZmkK
ICAgICB9CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKU09iamVjdDo6bWFya0F1eGlsaWFyeUFu
ZFZpc2l0T3V0T2ZMaW5lUHJvcGVydGllcyhTbG90VmlzaXRvciYgdmlzaXRvciwgQnV0dGVyZmx5
KiBidXR0ZXJmbHksIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBtYXhPZmZz
ZXQpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgorQUxXQVlTX0lOTElORSB2b2lkIEpTT2Jq
ZWN0OjptYXJrQXV4aWxpYXJ5QW5kVmlzaXRPdXRPZkxpbmVQcm9wZXJ0aWVzKFZpc2l0b3ImIHZp
c2l0b3IsIEJ1dHRlcmZseSogYnV0dGVyZmx5LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUHJvcGVy
dHlPZmZzZXQgbWF4T2Zmc2V0KQogewogICAgIC8vIFdlIGNhbGwgdGhpcyB3aGVuIHdlIGZvdW5k
IGV2ZXJ5dGhpbmcgd2l0aG91dCByYWNlcy4KICAgICBBU1NFUlQoc3RydWN0dXJlKTsKQEAgLTEy
MSw3ICsxMjIsOCBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSlNPYmplY3Q6Om1hcmtBdXhpbGlhCiAg
ICAgdmlzaXRvci5hcHBlbmRWYWx1ZXNIaWRkZW4oYnV0dGVyZmx5LT5wcm9wZXJ0eVN0b3JhZ2Uo
KSAtIG91dE9mTGluZVNpemUsIG91dE9mTGluZVNpemUpOwogfQogCi1BTFdBWVNfSU5MSU5FIFN0
cnVjdHVyZSogSlNPYmplY3Q6OnZpc2l0QnV0dGVyZmx5KFNsb3RWaXNpdG9yJiB2aXNpdG9yKQor
dGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK0FMV0FZU19JTkxJTkUgU3RydWN0dXJlKiBKU09i
amVjdDo6dmlzaXRCdXR0ZXJmbHkoVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBzdGF0aWMgY29u
c3QgY2hhciogY29uc3QgcmFjZVJlYXNvbiA9ICJKU09iamVjdDo6dmlzaXRCdXR0ZXJmbHkiOwog
ICAgIFN0cnVjdHVyZSogcmVzdWx0ID0gdmlzaXRCdXR0ZXJmbHlJbXBsKHZpc2l0b3IpOwpAQCAt
MTMwLDcgKzEzMiw4IEBAIEFMV0FZU19JTkxJTkUgU3RydWN0dXJlKiBKU09iamVjdDo6dmlzaXQK
ICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1BTFdBWVNfSU5MSU5FIFN0cnVjdHVyZSogSlNPYmpl
Y3Q6OnZpc2l0QnV0dGVyZmx5SW1wbChTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5
cGVuYW1lIFZpc2l0b3I+CitBTFdBWVNfSU5MSU5FIFN0cnVjdHVyZSogSlNPYmplY3Q6OnZpc2l0
QnV0dGVyZmx5SW1wbChWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFZNJiB2bSA9IHZpc2l0b3Iu
dm0oKTsKICAgICAKQEAgLTQzMCwyNCArNDMzLDIwIEBAIHNpemVfdCBKU09iamVjdDo6ZXN0aW1h
dGVkU2l6ZShKU0NlbGwqIGMKICAgICByZXR1cm4gQmFzZTo6ZXN0aW1hdGVkU2l6ZShjZWxsLCB2
bSkgKyBidXR0ZXJmbHlPdXRPZkxpbmVTaXplOwogfQogCi12b2lkIEpTT2JqZWN0Ojp2aXNpdENo
aWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBl
bmFtZSBWaXNpdG9yPgordm9pZCBKU09iamVjdDo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBj
ZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTT2JqZWN0KiB0aGlzT2JqZWN0ID0ganND
YXN0PEpTT2JqZWN0Kj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlz
T2JqZWN0LCBpbmZvKCkpOwotI2lmIEFTU0VSVF9FTkFCTEVECi0gICAgYm9vbCB3YXNDaGVja2lu
Z0ZvckRlZmF1bHRNYXJrVmlvbGF0aW9uID0gdmlzaXRvci5tX2lzQ2hlY2tpbmdGb3JEZWZhdWx0
TWFya1Zpb2xhdGlvbjsKLSAgICB2aXNpdG9yLm1faXNDaGVja2luZ0ZvckRlZmF1bHRNYXJrVmlv
bGF0aW9uID0gZmFsc2U7Ci0jZW5kaWYKLSAgICAKKyAgICB0eXBlbmFtZSBWaXNpdG9yOjpEZWZh
dWx0TWFya2luZ1Zpb2xhdGlvbkFzc2VydGlvblNjb3BlIGFzc2VydGlvblNjb3BlKHZpc2l0b3Ip
OworCiAgICAgSlNDZWxsOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwotICAg
IAorCiAgICAgdGhpc09iamVjdC0+dmlzaXRCdXR0ZXJmbHkodmlzaXRvcik7Ci0gICAgCi0jaWYg
QVNTRVJUX0VOQUJMRUQKLSAgICB2aXNpdG9yLm1faXNDaGVja2luZ0ZvckRlZmF1bHRNYXJrVmlv
bGF0aW9uID0gd2FzQ2hlY2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlvbjsKLSNlbmRpZgogfQog
CitERUZJTkVfRVhQT1JUX1ZJU0lUX0NISUxEUkVOKEpTT2JqZWN0KTsKKwogdm9pZCBKU09iamVj
dDo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQogewog
ICAgIEpTT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTT2JqZWN0Kj4oY2VsbCk7CkBAIC00
ODYsMTQgKzQ4NSwxMiBAQCB2b2lkIEpTT2JqZWN0OjphbmFseXplSGVhcChKU0NlbGwqIGNlbGws
CiAgICAgfQogfQogCi12b2lkIEpTRmluYWxPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBj
ZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2
b2lkIEpTRmluYWxPYmplY3Q6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRv
ciYgdmlzaXRvcikKIHsKICAgICBKU0ZpbmFsT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpT
RmluYWxPYmplY3QqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNP
YmplY3QsIGluZm8oKSk7Ci0jaWYgQVNTRVJUX0VOQUJMRUQKLSAgICBib29sIHdhc0NoZWNraW5n
Rm9yRGVmYXVsdE1hcmtWaW9sYXRpb24gPSB2aXNpdG9yLm1faXNDaGVja2luZ0ZvckRlZmF1bHRN
YXJrVmlvbGF0aW9uOwotICAgIHZpc2l0b3IubV9pc0NoZWNraW5nRm9yRGVmYXVsdE1hcmtWaW9s
YXRpb24gPSBmYWxzZTsKLSNlbmRpZgorICAgIHR5cGVuYW1lIFZpc2l0b3I6OkRlZmF1bHRNYXJr
aW5nVmlvbGF0aW9uQXNzZXJ0aW9uU2NvcGUgYXNzZXJ0aW9uU2NvcGUodmlzaXRvcik7CiAgICAg
CiAgICAgSlNDZWxsOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwogICAgIApA
QCAtNTAxLDEyICs0OTgsMTAgQEAgdm9pZCBKU0ZpbmFsT2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpT
Q2VsbAogICAgICAgICBpZiAodW5zaWduZWQgc3RvcmFnZVNpemUgPSBzdHJ1Y3R1cmUtPmlubGlu
ZVNpemUoKSkKICAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kVmFsdWVzSGlkZGVuKHRoaXNPYmpl
Y3QtPmlubGluZVN0b3JhZ2UoKSwgc3RvcmFnZVNpemUpOwogICAgIH0KLSAgICAKLSNpZiBBU1NF
UlRfRU5BQkxFRAotICAgIHZpc2l0b3IubV9pc0NoZWNraW5nRm9yRGVmYXVsdE1hcmtWaW9sYXRp
b24gPSB3YXNDaGVja2luZ0ZvckRlZmF1bHRNYXJrVmlvbGF0aW9uOwotI2VuZGlmCiB9CiAKK0RF
RklORV9FWFBPUlRfVklTSVRfQ0hJTERSRU4oSlNGaW5hbE9iamVjdCk7CisKIFN0cmluZyBKU09i
amVjdDo6Y2xhc3NOYW1lKGNvbnN0IEpTT2JqZWN0KiBvYmplY3QsIFZNJiB2bSkKIHsKICAgICBj
b25zdCBDbGFzc0luZm8qIGluZm8gPSBvYmplY3QtPmNsYXNzSW5mbyh2bSk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJKHJldmlzaW9uIDI3MTQ0MykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJKHdvcmtpbmcgY29weSkK
QEAgLTEwOCw4ICsxMDgsOSBAQCBjbGFzcyBKU09iamVjdCA6IHB1YmxpYyBKU0NlbGwgewogcHVi
bGljOgogICAgIHVzaW5nIEJhc2UgPSBKU0NlbGw7CiAKKyAgICBERUNMQVJFX0VYUE9SVF9WSVNJ
VF9DSElMRFJFTjsKKwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBzaXplX3QgZXN0aW1h
dGVkU2l6ZShKU0NlbGwqLCBWTSYpOwotICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lk
IHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKICAgICBKU19FWFBPUlRfUFJJ
VkFURSBzdGF0aWMgdm9pZCBhbmFseXplSGVhcChKU0NlbGwqLCBIZWFwQW5hbHl6ZXImKTsKIAog
ICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBTdHJpbmcgY2xhc3NOYW1lKGNvbnN0IEpTT2Jq
ZWN0KiwgVk0mKTsKQEAgLTk4MCwxMSArOTgxLDExIEBAIHByb3RlY3RlZDoKICAgICBKU09iamVj
dChWTSYsIFN0cnVjdHVyZSosIEJ1dHRlcmZseSogPSBudWxscHRyKTsKICAgICAKICAgICAvLyBW
aXNpdHMgdGhlIGJ1dHRlcmZseSB1bmxlc3MgdGhlcmUgaXMgYSByYWNlLiBSZXR1cm5zIHRoZSBz
dHJ1Y3R1cmUgaWYgdGhlcmUgd2FzIG5vIHJhY2UuCi0gICAgU3RydWN0dXJlKiB2aXNpdEJ1dHRl
cmZseShTbG90VmlzaXRvciYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IFN0cnVj
dHVyZSogdmlzaXRCdXR0ZXJmbHkoVmlzaXRvciYpOwogICAgIAotICAgIFN0cnVjdHVyZSogdmlz
aXRCdXR0ZXJmbHlJbXBsKFNsb3RWaXNpdG9yJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlz
aXRvcj4gU3RydWN0dXJlKiB2aXNpdEJ1dHRlcmZseUltcGwoVmlzaXRvciYpOwogICAgIAotICAg
IHZvaWQgbWFya0F1eGlsaWFyeUFuZFZpc2l0T3V0T2ZMaW5lUHJvcGVydGllcyhTbG90VmlzaXRv
ciYsIEJ1dHRlcmZseSosIFN0cnVjdHVyZSosIFByb3BlcnR5T2Zmc2V0IG1heE9mZnNldCk7Cisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCBtYXJrQXV4aWxpYXJ5QW5kVmlzaXRP
dXRPZkxpbmVQcm9wZXJ0aWVzKFZpc2l0b3ImLCBCdXR0ZXJmbHkqLCBTdHJ1Y3R1cmUqLCBQcm9w
ZXJ0eU9mZnNldCBtYXhPZmZzZXQpOwogCiAgICAgLy8gQ2FsbCB0aGlzIGlmIHlvdSBrbm93IHRo
YXQgdGhlIG9iamVjdCBpcyBpbiBhIG1vZGUgd2hlcmUgaXQgaGFzIGFycmF5CiAgICAgLy8gc3Rv
cmFnZS4gVGhpcyB3aWxsIGFzc2VydCBvdGhlcndpc2UuCkBAIC0xMTcyLDggKzExNzMsNiBAQCBw
cm90ZWN0ZWQ6CiAgICAgfQogfTsKIAotY2xhc3MgSlNGaW5hbE9iamVjdDsKLQogLy8gSlNGaW5h
bE9iamVjdCBpcyBhIHR5cGUgb2YgSlNPYmplY3QgdGhhdCBjb250YWlucyBzdWZmaWNpZW50IGlu
dGVybmFsCiAvLyBzdG9yYWdlIHRvIGZ1bGx5IG1ha2UgdXNlIG9mIHRoZSBjb2xsZWN0b3IgY2Vs
bCBjb250YWluaW5nIGl0LgogY2xhc3MgSlNGaW5hbE9iamVjdCBmaW5hbCA6IHB1YmxpYyBKU09i
amVjdCB7CkBAIC0xMjEyLDE1ICsxMjExLDEzIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIFN0
cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgdHlwZUluZm8oKSwg
aW5mbygpLCBkZWZhdWx0SW5kZXhpbmdUeXBlLCBpbmxpbmVDYXBhY2l0eSk7CiAgICAgfQogCi0g
ICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBT
bG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfRVhQT1JUX1ZJU0lUX0NISUxEUkVOOwogCiAgICAg
REVDTEFSRV9FWFBPUlRfSU5GTzsKIAogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgTExJbnRP
ZmZzZXRzRXh0cmFjdG9yOwogCi0gICAgdm9pZCB2aXNpdENoaWxkcmVuQ29tbW9uKFNsb3RWaXNp
dG9yJik7Ci0KICAgICBleHBsaWNpdCBKU0ZpbmFsT2JqZWN0KFZNJiB2bSwgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUsIEJ1dHRlcmZseSogYnV0dGVyZmx5KQogICAgICAgICA6IEpTT2JqZWN0KHZtLCBz
dHJ1Y3R1cmUsIGJ1dHRlcmZseSkKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU1Byb21pc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTUHJvbWlzZS5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvbWlzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY3LDEz
ICs2NywxNiBAQCB2b2lkIEpTUHJvbWlzZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQogICAgICAg
ICBCYXNlOjppbnRlcm5hbEZpZWxkKGluZGV4KS5zZXQodm0sIHRoaXMsIHZhbHVlc1tpbmRleF0p
OwogfQogCi12b2lkIEpTUHJvbWlzZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNQcm9t
aXNlOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7
CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Byb21pc2UqPihjZWxsKTsKICAgICBB
U1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAgICAgQmFzZTo6
dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NI
SUxEUkVOKEpTUHJvbWlzZSk7CisKIGF1dG8gSlNQcm9taXNlOjpzdGF0dXMoVk0mKSBjb25zdCAt
PiBTdGF0dXMKIHsKICAgICBKU1ZhbHVlIHZhbHVlID0gaW50ZXJuYWxGaWVsZChGaWVsZDo6Rmxh
Z3MpLmdldCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9taXNl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9taXNl
LmgJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
UHJvbWlzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC05Myw3ICs5Myw3IEBAIHB1YmxpYzoKICAgICB9
OwogICAgIHN0YXRpYyBEZWZlcnJlZERhdGEgY3JlYXRlRGVmZXJyZWREYXRhKEpTR2xvYmFsT2Jq
ZWN0KiwgSlNQcm9taXNlQ29uc3RydWN0b3IqKTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hp
bGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVO
OwogCiBwcm90ZWN0ZWQ6CiAgICAgSlNQcm9taXNlKFZNJiwgU3RydWN0dXJlKik7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVydHlO
YW1lRW51bWVyYXRvci5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTUHJvcGVydHlOYW1lRW51bWVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTcwLDcgKzcwLDggQEAgdm9pZCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmZpbmlzaENy
ZQogICAgIH0KIH0KIAotdm9pZCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OnZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1l
IFZpc2l0b3I+Cit2b2lkIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6dmlzaXRDaGlsZHJlbklt
cGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTUHJvcGVydHlOYW1l
RW51bWVyYXRvciogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3Iq
PihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8o
KSk7CkBAIC04Nyw2ICs4OCw4IEBAIHZvaWQgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjp2aXNp
dENoaWwKICAgICB9CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU1Byb3BlcnR5TmFtZUVu
dW1lcmF0b3IpOworCiAvLyBGSVhNRTogQXNzZXJ0IHRoYXQgcHJvcGVydGllcyByZXR1cm5lZCBi
eSBnZXRPd25Qcm9wZXJ0eU5hbWVzKCkgYXJlIHJlcG9ydGVkIGVudW1lcmFibGUgYnkgZ2V0T3du
UHJvcGVydHlTbG90KCkuCiAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjE5OTI2CiB2b2lkIGdldEVudW1lcmFibGVQcm9wZXJ0eU5hbWVzKEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEpTT2JqZWN0KiBiYXNlLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVy
dHlOYW1lcywgdWludDMyX3QmIGluZGV4ZWRMZW5ndGgsIHVpbnQzMl90JiBzdHJ1Y3R1cmVQcm9w
ZXJ0eUNvdW50KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmgJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVydHlOYW1lRW51bWVyYXRvci5oCSh3
b3JraW5nIGNvcHkpCkBAIC04NCw3ICs4NCw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIE9C
SkVDVF9PRkZTRVRPRihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IsIG1fcHJvcGVydHlOYW1lcyk7
CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90Vmlz
aXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKIHByaXZhdGU6CiAgICAgZnJp
ZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTUHJveHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTUHJveHkuY3BwCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsNyAr
MzUsOCBAQCBTVEFUSUNfQVNTRVJUX0lTX1RSSVZJQUxMWV9ERVNUUlVDVElCTEUoCiAKIGNvbnN0
IENsYXNzSW5mbyBKU1Byb3h5OjpzX2luZm8gPSB7ICJKU1Byb3h5IiwgJkJhc2U6OnNfaW5mbywg
bnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1Byb3h5KSB9OwogCi12b2lk
IEpTUHJveHk6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRv
cikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTUHJveHk6OnZpc2l0Q2hpbGRy
ZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU1Byb3h5KiB0
aGlzT2JqZWN0ID0ganNDYXN0PEpTUHJveHkqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNU
X0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC00Myw2ICs0NCw4IEBAIHZvaWQgSlNQ
cm94eTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlz
T2JqZWN0LT5tX3RhcmdldCk7CiB9CiAKK0RFRklORV9FWFBPUlRfVklTSVRfQ0hJTERSRU4oSlNQ
cm94eSk7CisKIHZvaWQgSlNQcm94eTo6c2V0VGFyZ2V0KFZNJiB2bSwgSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCkKIHsKICAgICBtX3RhcmdldC5zZXQodm0sIHRoaXMsIGdsb2JhbE9iamVj
dCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3h5LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm94eS5oCShyZXZpc2lv
biAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3h5LmgJKHdv
cmtpbmcgY29weSkKQEAgLTg1LDcgKzg1LDcgQEAgcHJvdGVjdGVkOgogICAgICAgICBtX3Rhcmdl
dC5zZXQodm0sIHRoaXMsIHRhcmdldCk7CiAgICAgfQogCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUg
c3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERF
Q0xBUkVfRVhQT1JUX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3Rh
dGljIFN0cmluZyBjbGFzc05hbWUoY29uc3QgSlNPYmplY3QqLCBWTSYpOwogICAgIEpTX0VYUE9S
VF9QUklWQVRFIHN0YXRpYyBTdHJpbmcgdG9TdHJpbmdOYW1lKGNvbnN0IEpTT2JqZWN0KiwgSlNH
bG9iYWxPYmplY3QqKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2Nv
cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2Nv
cGUuY3BwCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU1Njb3BlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksNyArMzksOCBAQCBTVEFUSUNfQVNT
RVJUX0lTX1RSSVZJQUxMWV9ERVNUUlVDVElCTEUoCiAKIGNvbnN0IENsYXNzSW5mbyBKU1Njb3Bl
OjpzX2luZm8gPSB7ICJTY29wZSIsICZCYXNlOjpzX2luZm8sIG51bGxwdHIsIG51bGxwdHIsIENS
RUFURV9NRVRIT0RfVEFCTEUoSlNTY29wZSkgfTsKIAotdm9pZCBKU1Njb3BlOjp2aXNpdENoaWxk
cmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBWaXNpdG9yPgordm9pZCBKU1Njb3BlOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGws
IFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNTY29wZSogdGhpc09iamVjdCA9IGpzQ2FzdDxK
U1Njb3BlKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0
LCBpbmZvKCkpOwpAQCAtNDcsNiArNDgsOCBAQCB2b2lkIEpTU2NvcGU6OnZpc2l0Q2hpbGRyZW4o
SlNDZWxsKiBjZWxsCiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9uZXh0KTsKIH0K
IAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTU2NvcGUpOworCiAvLyBSZXR1cm5zIHRydWUgaWYg
d2UgZm91bmQgZW5vdWdoIGluZm9ybWF0aW9uIHRvIHRlcm1pbmF0ZSBvcHRpbWl6YXRpb24uCiBz
dGF0aWMgaW5saW5lIGJvb2wgYWJzdHJhY3RBY2Nlc3MoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgSlNTY29wZSogc2NvcGUsIGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBHZXRPclB1dCBn
ZXRPclB1dCwgc2l6ZV90IGRlcHRoLCBib29sJiBuZWVkc1ZhckluamVjdGlvbkNoZWNrcywgUmVz
b2x2ZU9wJiBvcCwgSW5pdGlhbGl6YXRpb25Nb2RlIGluaXRpYWxpemF0aW9uTW9kZSkKIHsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2NvcGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Njb3BlLmgJKHJldmlzaW9uIDI3MTQ0
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2NvcGUuaAkod29ya2luZyBj
b3B5KQpAQCAtNjQsNyArNjQsNyBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgdm9pZCBjb2xsZWN0
Q2xvc3VyZVZhcmlhYmxlc1VuZGVyVERaKEpTU2NvcGUqLCBURFpFbnZpcm9ubWVudCYgcmVzdWx0
LCBWYXJpYWJsZUVudmlyb25tZW50JiBwcml2YXRlTmFtZXMpOwogCi0gICAgc3RhdGljIHZvaWQg
dmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRf
Q0hJTERSRU47CiAKICAgICBib29sIGlzVmFyU2NvcGUoKTsKICAgICBib29sIGlzTGV4aWNhbFNj
b3BlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NlZ21lbnRlZFZh
cmlhYmxlT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTYyLDE5ICs2MiwyMiBAQCBTY29wZU9mZnNldCBKU1NlZ21l
bnRlZFZhcmlhYmxlT2JqZWN0OjphCiAgICAgcmV0dXJuIFNjb3BlT2Zmc2V0KG9sZFNpemUpOwog
fQogCi12b2lkIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiBjZWxsLCBTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNp
dG9yPgordm9pZCBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0Ojp2aXNpdENoaWxkcmVuSW1wbChK
U0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNTZWdtZW50ZWRWYXJpYWJs
ZU9iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0Kj4o
Y2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkp
OwotICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgc2xvdFZpc2l0b3IpOworICAg
IEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CiAgICAgCiAgICAgLy8g
RklYTUU6IFdlIGNvdWxkIGF2b2lkIGxvY2tpbmcgaGVyZSBpZiBTZWdtZW50ZWRWZWN0b3Igd2Fz
IGxvY2stZnJlZS4gSXQgY291bGQgYmUgbWFkZSBsb2NrLWZyZWUKICAgICAvLyByZWxhdGl2ZWx5
IGVhc2lseS4KICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKHRoaXNPYmplY3QtPmNlbGxMb2Nr
KCkpOwogICAgIGZvciAodW5zaWduZWQgaSA9IHRoaXNPYmplY3QtPm1fdmFyaWFibGVzLnNpemUo
KTsgaS0tOykKLSAgICAgICAgc2xvdFZpc2l0b3IuYXBwZW5kSGlkZGVuKHRoaXNPYmplY3QtPm1f
dmFyaWFibGVzW2ldKTsKKyAgICAgICAgdmlzaXRvci5hcHBlbmRIaWRkZW4odGhpc09iamVjdC0+
bV92YXJpYWJsZXNbaV0pOwogfQogCitERUZJTkVfRVhQT1JUX1ZJU0lUX0NISUxEUkVOKEpTU2Vn
bWVudGVkVmFyaWFibGVPYmplY3QpOworCiB2b2lkIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3Q6
OmFuYWx5emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFuYWx5emVyJiBhbmFseXplcikKIHsKICAg
ICBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTU2VnbWVu
dGVkVmFyaWFibGVPYmplY3QqPihjZWxsKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmgJKHJldmlz
aW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2VnbWVudGVk
VmFyaWFibGVPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtODYsNyArODYsNyBAQCBwdWJsaWM6
CiAgICAgLy8gdGhlIGluZGV4IG9mIHRoZSBmaXJzdCBvbmUgYWRkZWQuCiAgICAgSlNfRVhQT1JU
X1BSSVZBVEUgU2NvcGVPZmZzZXQgYWRkVmFyaWFibGVzKHVuc2lnbmVkIG51bWJlck9mVmFyaWFi
bGVzVG9BZGQsIEpTVmFsdWUpOwogICAgIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2
b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX0VY
UE9SVF9WSVNJVF9DSElMRFJFTjsKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBh
bmFseXplSGVhcChKU0NlbGwqLCBIZWFwQW5hbHl6ZXImKTsKICAgICAKIHByb3RlY3RlZDoKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2V0SXRlcmF0b3IuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2V0SXRlcmF0b3IuY3Bw
CShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Nl
dEl0ZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTcsMTMgKzU3LDE2IEBAIHZvaWQgSlNT
ZXRJdGVyYXRvcjo6ZmluaXNoQ3JlYXRpb24oVk0mIHYKICAgICAgICAgQmFzZTo6aW50ZXJuYWxG
aWVsZChpbmRleCkuc2V0KHZtLCB0aGlzLCB2YWx1ZXNbaW5kZXhdKTsKIH0KIAotdm9pZCBKU1Nl
dEl0ZXJhdG9yOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0
b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1NldEl0ZXJhdG9yOjp2aXNp
dENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0
byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1NldEl0ZXJhdG9yKj4oY2VsbCk7CiAgICAgQVNTRVJU
X0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwogICAgIEJhc2U6OnZpc2l0
Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJF
TihKU1NldEl0ZXJhdG9yKTsKKwogSlNWYWx1ZSBKU1NldEl0ZXJhdG9yOjpjcmVhdGVQYWlyKEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUga2V5LCBKU1ZhbHVlIHZhbHVlKQog
ewogICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3M7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU1NldEl0ZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNTZXRJdGVyYXRvci5oCShyZXZpc2lvbiAyNzE0NDMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NldEl0ZXJhdG9yLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEzMCw3ICsxMzAsNyBAQCBwcml2YXRlOgogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZv
aWQgZmluaXNoQ3JlYXRpb24oVk0mLCBKU1NldCosIEl0ZXJhdGlvbktpbmQpOwogICAgIHZvaWQg
ZmluaXNoQ3JlYXRpb24oVk0mKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBKU1ZhbHVlIGNyZWF0
ZVBhaXIoSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlLCBKU1ZhbHVlKTsKLSAgICBzdGF0aWMgdm9p
ZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJ
VF9DSElMRFJFTjsKIH07CiBTVEFUSUNfQVNTRVJUX0lTX1RSSVZJQUxMWV9ERVNUUlVDVElCTEUo
SlNTZXRJdGVyYXRvcik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
U291cmNlQ29kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNTb3VyY2VDb2RlLmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNTb3VyY2VDb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiAr
MjYsOCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkpTU291cmNlQ29kZS5oIgog
CisjaW5jbHVkZSAiSlNDZWxsSW5saW5lcy5oIiAvLyBtbGFtIFRFU1QKKwogbmFtZXNwYWNlIEpT
QyB7CiAKIGNvbnN0IENsYXNzSW5mbyBKU1NvdXJjZUNvZGU6OnNfaW5mbyA9IHsgIkpTU291cmNl
Q29kZSIsIG51bGxwdHIsIG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNT
b3VyY2VDb2RlKSB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJp
bmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3Ry
aW5nLmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNTdHJpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDUsNyArMTA1LDggQEAgc2l6ZV90
IEpTU3RyaW5nOjplc3RpbWF0ZWRTaXplKEpTQ2VsbCogYwogICAgIHJldHVybiBCYXNlOjplc3Rp
bWF0ZWRTaXplKGNlbGwsIHZtKSArIGJpdHdpc2VfY2FzdDxTdHJpbmdJbXBsKj4ocG9pbnRlcikt
PmNvc3REdXJpbmdHQygpOwogfQogCi12b2lkIEpTU3RyaW5nOjp2aXNpdENoaWxkcmVuKEpTQ2Vs
bCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
Pgordm9pZCBKU1N0cmluZzo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9y
JiB2aXNpdG9yKQogewogICAgIEpTU3RyaW5nKiB0aGlzT2JqZWN0ID0gYXNTdHJpbmcoY2VsbCk7
CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAt
MTQzLDYgKzE0NCw4IEBAIHZvaWQgSlNTdHJpbmc6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWwK
ICAgICAgICAgdmlzaXRvci5yZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQoaW1wbC0+Y29zdER1cmlu
Z0dDKCkpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNTdHJpbmcpOworCiBzdGF0aWMg
Y29uc3RleHByIHVuc2lnbmVkIG1heExlbmd0aEZvck9uU3RhY2tSZXNvbHZlID0gMjA0ODsKIAog
dm9pZCBKU1JvcGVTdHJpbmc6OnJlc29sdmVSb3BlSW50ZXJuYWw4KExDaGFyKiBidWZmZXIpIGNv
bnN0CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmgJKHJldmlz
aW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTIxNyw3ICsyMTcsNyBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMg
dm9pZCBkdW1wVG9TdHJlYW0oY29uc3QgSlNDZWxsKiwgUHJpbnRTdHJlYW0mKTsKICAgICBzdGF0
aWMgc2l6ZV90IGVzdGltYXRlZFNpemUoSlNDZWxsKiwgVk0mKTsKLSAgICBzdGF0aWMgdm9pZCB2
aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9D
SElMRFJFTjsKIAogICAgIEFMV0FZU19JTkxJTkUgYm9vbCBpc1JvcGUoKSBjb25zdAogICAgIHsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nSXRlcmF0b3IuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nSXRl
cmF0b3IuY3BwCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1N0cmluZ0l0ZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTEsMTEgKzUxLDE0
IEBAIEpTU3RyaW5nSXRlcmF0b3IqIEpTU3RyaW5nSXRlcmF0b3I6OmNsb24KICAgICByZXR1cm4g
Y2xvbmU7CiB9CiAKLXZvaWQgSlNTdHJpbmdJdGVyYXRvcjo6dmlzaXRDaGlsZHJlbihKU0NlbGwq
IGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4K
K3ZvaWQgSlNTdHJpbmdJdGVyYXRvcjo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBW
aXNpdG9yJiB2aXNpdG9yKQogewogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNTdHJp
bmdJdGVyYXRvcio+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09i
amVjdCwgaW5mbygpKTsKICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0
b3IpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNTdHJpbmdJdGVyYXRvcik7CisKIH0g
Ly8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNT
dHJpbmdJdGVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTU3RyaW5nSXRlcmF0b3IuaAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmdJdGVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC03
OSw3ICs3OSw3IEBAIHB1YmxpYzoKICAgICBKU1ZhbHVlIGluZGV4KCkgY29uc3QgeyByZXR1cm4g
aW50ZXJuYWxGaWVsZChGaWVsZDo6SW5kZXgpLmdldCgpOyB9CiAgICAgSlNTdHJpbmdJdGVyYXRv
ciogY2xvbmUoSlNHbG9iYWxPYmplY3QqKTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwog
CiBwcml2YXRlOgogICAgIEpTU3RyaW5nSXRlcmF0b3IoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3ltYm9sVGFibGVP
YmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
U3ltYm9sVGFibGVPYmplY3QuY3BwCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzYsNyArMzYsOCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogY29uc3QgQ2xhc3NJbmZvIEpTU3lt
Ym9sVGFibGVPYmplY3Q6OnNfaW5mbyA9IHsgIlN5bWJvbFRhYmxlT2JqZWN0IiwgJkJhc2U6OnNf
aW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1N5bWJvbFRhYmxl
T2JqZWN0KSB9OwogCi12b2lkIEpTU3ltYm9sVGFibGVPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlND
ZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0
b3I+Cit2b2lkIEpTU3ltYm9sVGFibGVPYmplY3Q6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCog
Y2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU1N5bWJvbFRhYmxlT2JqZWN0KiB0aGlz
T2JqZWN0ID0ganNDYXN0PEpTU3ltYm9sVGFibGVPYmplY3QqPihjZWxsKTsKICAgICBBU1NFUlRf
R0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC00NCw2ICs0NSw4IEBA
IHZvaWQgSlNTeW1ib2xUYWJsZU9iamVjdDo6dmlzaXRDaGlsZHJlbigKICAgICB2aXNpdG9yLmFw
cGVuZCh0aGlzT2JqZWN0LT5tX3N5bWJvbFRhYmxlKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxE
UkVOKEpTU3ltYm9sVGFibGVPYmplY3QpOworCiBib29sIEpTU3ltYm9sVGFibGVPYmplY3Q6OmRl
bGV0ZVByb3BlcnR5KEpTQ2VsbCogY2VsbCwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
UHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgRGVsZXRlUHJvcGVydHlTbG90JiBzbG90KQogewog
ICAgIEpTU3ltYm9sVGFibGVPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNTeW1ib2xUYWJs
ZU9iamVjdCo+KGNlbGwpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNT
eW1ib2xUYWJsZU9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuaAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVjdC5oCSh3b3JraW5nIGNv
cHkpCkBAIC03MCw3ICs3MCw3IEBAIHByb3RlY3RlZDoKICAgICAgICAgbV9zeW1ib2xUYWJsZS5z
ZXQodm0sIHRoaXMsIHN5bWJvbFRhYmxlKTsKICAgICB9CiAgICAgCi0gICAgc3RhdGljIHZvaWQg
dmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRf
Q0hJTERSRU47CiAgICAgCiBwcml2YXRlOgogICAgIFdyaXRlQmFycmllcjxTeW1ib2xUYWJsZT4g
bV9zeW1ib2xUYWJsZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTV2Vh
a09iamVjdFJlZi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNXZWFrT2JqZWN0UmVmLmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNXZWFrT2JqZWN0UmVmLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzksNyArMzksOCBAQCB2b2lkIEpTV2Vha09iamVjdFJlZjo6ZmluaXNoQ3JlYXRpb24oVk0mCiAg
ICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwogfQogCi12b2lkIEpTV2Vha09iamVjdFJlZjo6
dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxh
dGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNXZWFrT2JqZWN0UmVmOjp2aXNpdENoaWxkcmVu
SW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0byogdGhpc09i
amVjdCA9IGpzQ2FzdDxKU1dlYWtPYmplY3RSZWYqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JK
RUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC01MSw2ICs1Miw4IEBAIHZvaWQg
SlNXZWFrT2JqZWN0UmVmOjp2aXNpdENoaWxkcmVuKEpTQ2UKICAgICB9CiB9CiAKK0RFRklORV9W
SVNJVF9DSElMRFJFTihKU1dlYWtPYmplY3RSZWYpOworCiB2b2lkIEpTV2Vha09iamVjdFJlZjo6
ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoVk0mIHZtKQogewogICAgIGlmIChtX3ZhbHVlICYmICF2
bS5oZWFwLmlzTWFya2VkKG1fdmFsdWUuZ2V0KCkpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNXZWFrT2JqZWN0UmVmLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNXZWFrT2JqZWN0UmVmLmgJKHJldmlzaW9uIDI3MTQ0MykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTV2Vha09iamVjdFJlZi5oCSh3b3JraW5n
IGNvcHkpCkBAIC02NSw3ICs2NSw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICB2b2lkIGZpbmFs
aXplVW5jb25kaXRpb25hbGx5KFZNJik7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihK
U0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKIHBy
aXZhdGU6CiAgICAgSlNXZWFrT2JqZWN0UmVmKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUp
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1dpdGhTY29wZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNXaXRoU2NvcGUuY3Bw
CShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1dp
dGhTY29wZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDcgKzQxLDggQEAgSlNXaXRoU2NvcGUq
IEpTV2l0aFNjb3BlOjpjcmVhdGUoCiAgICAgcmV0dXJuIHdpdGhTY29wZTsKIH0KIAotdm9pZCBK
U1dpdGhTY29wZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNp
dG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNXaXRoU2NvcGU6OnZpc2l0
Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU1dp
dGhTY29wZSogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1dpdGhTY29wZSo+KGNlbGwpOwogICAgIEFT
U0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTQ5LDYgKzUw
LDggQEAgdm9pZCBKU1dpdGhTY29wZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIAogICAgIHZpc2l0
b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fb2JqZWN0KTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxE
UkVOKEpTV2l0aFNjb3BlKTsKKwogU3RydWN0dXJlKiBKU1dpdGhTY29wZTo6Y3JlYXRlU3RydWN0
dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90bykK
IHsKICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG8s
IFR5cGVJbmZvKFdpdGhTY29wZVR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTV2l0aFNjb3BlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNXaXRoU2NvcGUuaAkocmV2aXNpb24g
MjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNXaXRoU2NvcGUuaAko
d29ya2luZyBjb3B5KQpAQCAtNDMsNyArNDMsNyBAQCBwdWJsaWM6CiAKICAgICBKU09iamVjdCog
b2JqZWN0KCkgeyByZXR1cm4gbV9vYmplY3QuZ2V0KCk7IH0KIAotICAgIHN0YXRpYyB2b2lkIHZp
c2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NI
SUxEUkVOOwogCiAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiwgSlNH
bG9iYWxPYmplY3QqLCBKU1ZhbHVlIHByb3RvKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNXcmFwcGVyT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU1dyYXBwZXJPYmplY3QuY3BwCShyZXZpc2lvbiAyNzE0NDMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1dyYXBwZXJPYmplY3QuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yOSwxMSArMjksMTQgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIFNUQVRJ
Q19BU1NFUlRfSVNfVFJJVklBTExZX0RFU1RSVUNUSUJMRShKU1dyYXBwZXJPYmplY3QpOwogCi12
b2lkIEpTV3JhcHBlck9iamVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNp
dG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNXcmFwcGVy
T2JqZWN0Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3Ip
CiB7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1dyYXBwZXJPYmplY3QqPihjZWxs
KTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAg
ICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKIH0KIAorREVGSU5F
X0VYUE9SVF9WSVNJVF9DSElMRFJFTihKU1dyYXBwZXJPYmplY3QpOworCiB9IC8vIG5hbWVzcGFj
ZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTV3JhcHBlck9iamVj
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTV3JhcHBl
ck9iamVjdC5oCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1dyYXBwZXJPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtNjQsNyArNjQsNyBAQCBw
dWJsaWM6CiBwcm90ZWN0ZWQ6CiAgICAgZXhwbGljaXQgSlNXcmFwcGVyT2JqZWN0KFZNJiwgU3Ry
dWN0dXJlKik7CiAKLSAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCB2aXNpdENoaWxk
cmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9FWFBPUlRfVklTSVRfQ0hJ
TERSRU47CiB9OwogCiBpbmxpbmUgSlNXcmFwcGVyT2JqZWN0OjpKU1dyYXBwZXJPYmplY3QoVk0m
IHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0xhenlDbGFzc1N0cnVjdHVyZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvTGF6eUNsYXNzU3RydWN0dXJlLmNwcAkocmV2aXNpb24gMjcxNDQz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTGF6eUNsYXNzU3RydWN0dXJlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNzIsMTIgKzcyLDE2IEBAIHZvaWQgTGF6eUNsYXNzU3RydWN0
dXJlOjpJbml0aWFsaXplcjo6c2UKICAgICBjbGFzc1N0cnVjdHVyZS5tX2NvbnN0cnVjdG9yLnNl
dCh2bSwgZ2xvYmFsLCBjb25zdHJ1Y3Rvcik7CiB9CiAKLXZvaWQgTGF6eUNsYXNzU3RydWN0dXJl
Ojp2aXNpdChTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+
Cit2b2lkIExhenlDbGFzc1N0cnVjdHVyZTo6dmlzaXQoVmlzaXRvciYgdmlzaXRvcikKIHsKICAg
ICBtX3N0cnVjdHVyZS52aXNpdCh2aXNpdG9yKTsKICAgICB2aXNpdG9yLmFwcGVuZChtX2NvbnN0
cnVjdG9yKTsKIH0KIAordGVtcGxhdGUgdm9pZCBMYXp5Q2xhc3NTdHJ1Y3R1cmU6OnZpc2l0KEFi
c3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgTGF6eUNsYXNzU3RydWN0dXJlOjp2
aXNpdChTbG90VmlzaXRvciYpOworCiB2b2lkIExhenlDbGFzc1N0cnVjdHVyZTo6ZHVtcChQcmlu
dFN0cmVhbSYgb3V0KSBjb25zdAogewogICAgIG91dC5wcmludCgiPHN0cnVjdHVyZSA9ICIsIG1f
c3RydWN0dXJlLCAiLCBjb25zdHJ1Y3RvciA9ICIsIFJhd1BvaW50ZXIobV9jb25zdHJ1Y3Rvci5n
ZXQoKSksICI+Iik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9MYXp5Q2xh
c3NTdHJ1Y3R1cmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9MYXp5Q2xhc3NTdHJ1Y3R1cmUuaAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvTGF6eUNsYXNzU3RydWN0dXJlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTExNyw3ICsxMTcsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX2NvbnN0cnVjdG9yLmdl
dCgpOwogICAgIH0KICAgICAKLSAgICB2b2lkIHZpc2l0KFNsb3RWaXNpdG9yJik7CisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCB2aXNpdChWaXNpdG9yJik7CiAgICAgCiAgICAg
dm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0xhenlQcm9wZXJ0eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0xhenlQcm9wZXJ0eS5oCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9MYXp5UHJvcGVydHkuaAkod29ya2luZyBjb3B5KQpA
QCAtMTAzLDcgKzEwMyw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldE1heUJlTnVsbChWTSYsIGNv
bnN0IE93bmVyVHlwZSogb3duZXIsIEVsZW1lbnRUeXBlKik7CiAgICAgdm9pZCBzZXQoVk0mLCBj
b25zdCBPd25lclR5cGUqIG93bmVyLCBFbGVtZW50VHlwZSopOwogICAgIAotICAgIHZvaWQgdmlz
aXQoU2xvdFZpc2l0b3ImKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIHZp
c2l0KFZpc2l0b3ImKTsKICAgICAKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsK
ICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0xhenlQcm9wZXJ0eUlu
bGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9MYXp5
UHJvcGVydHlJbmxpbmVzLmgJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0xhenlQcm9wZXJ0eUlubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNjYs
NyArNjYsOCBAQCB2b2lkIExhenlQcm9wZXJ0eTxPd25lclR5cGUsIEVsZW1lbnRUeXBlCiB9CiAK
IHRlbXBsYXRlPHR5cGVuYW1lIE93bmVyVHlwZSwgdHlwZW5hbWUgRWxlbWVudFR5cGU+Ci12b2lk
IExhenlQcm9wZXJ0eTxPd25lclR5cGUsIEVsZW1lbnRUeXBlPjo6dmlzaXQoU2xvdFZpc2l0b3Im
IHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBMYXp5UHJvcGVydHk8
T3duZXJUeXBlLCBFbGVtZW50VHlwZT46OnZpc2l0KFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAg
aWYgKG1fcG9pbnRlciAmJiAhKG1fcG9pbnRlciAmIGxhenlUYWcpKQogICAgICAgICB2aXNpdG9y
LmFwcGVuZFVuYmFycmllcmVkKGJpdHdpc2VfY2FzdDxFbGVtZW50VHlwZSo+KG1fcG9pbnRlcikp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTW9kdWxlUHJvZ3JhbUV4ZWN1
dGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01v
ZHVsZVByb2dyYW1FeGVjdXRhYmxlLmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC03OSw3ICs3OSw4IEBAIGF1dG8gTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGU6OmVu
c3VyZVRlbXAKICAgICByZXR1cm4gZW5zdXJlVGVtcGxhdGVPYmplY3RNYXBJbXBsKG1fdGVtcGxh
dGVPYmplY3RNYXApOwogfQogCi12b2lkIE1vZHVsZVByb2dyYW1FeGVjdXRhYmxlOjp2aXNpdENo
aWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBl
bmFtZSBWaXNpdG9yPgordm9pZCBNb2R1bGVQcm9ncmFtRXhlY3V0YWJsZTo6dmlzaXRDaGlsZHJl
bkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIE1vZHVsZVByb2dy
YW1FeGVjdXRhYmxlKiB0aGlzT2JqZWN0ID0ganNDYXN0PE1vZHVsZVByb2dyYW1FeGVjdXRhYmxl
Kj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZv
KCkpOwpAQCAtOTQsNCArOTUsNiBAQCB2b2lkIE1vZHVsZVByb2dyYW1FeGVjdXRhYmxlOjp2aXNp
dENoaWxkCiAgICAgfQogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oTW9kdWxlUHJvZ3JhbUV4
ZWN1dGFibGUpOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL01vZHVsZVByb2dyYW1FeGVjdXRhYmxlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUuaAkocmV2
aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTW9kdWxlUHJv
Z3JhbUV4ZWN1dGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtNzcsNyArNzcsNyBAQCBwcml2YXRl
OgogCiAgICAgTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUoSlNHbG9iYWxPYmplY3QqLCBjb25zdCBT
b3VyY2VDb2RlJik7CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNs
b3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIFdyaXRlQmFy
cmllcjxVbmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2s+IG1fdW5saW5rZWRNb2R1bGVQcm9n
cmFtQ29kZUJsb2NrOwogICAgIFdyaXRlQmFycmllcjxTeW1ib2xUYWJsZT4gbV9tb2R1bGVFbnZp
cm9ubWVudFN5bWJvbFRhYmxlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
UHJvZ3JhbUV4ZWN1dGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1Byb2dyYW1FeGVjdXRhYmxlLmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvZ3JhbUV4ZWN1dGFibGUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yMDgsNyArMjA4LDggQEAgYXV0byBQcm9ncmFtRXhlY3V0YWJsZTo6ZW5zdXJl
VGVtcGxhdGVPYgogICAgIHJldHVybiBlbnN1cmVUZW1wbGF0ZU9iamVjdE1hcEltcGwobV90ZW1w
bGF0ZU9iamVjdE1hcCk7CiB9CiAKLXZvaWQgUHJvZ3JhbUV4ZWN1dGFibGU6OnZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1l
IFZpc2l0b3I+Cit2b2lkIFByb2dyYW1FeGVjdXRhYmxlOjp2aXNpdENoaWxkcmVuSW1wbChKU0Nl
bGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgUHJvZ3JhbUV4ZWN1dGFibGUqIHRo
aXNPYmplY3QgPSBqc0Nhc3Q8UHJvZ3JhbUV4ZWN1dGFibGUqPihjZWxsKTsKICAgICBBU1NFUlRf
R0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC0yMjIsNCArMjIzLDYg
QEAgdm9pZCBQcm9ncmFtRXhlY3V0YWJsZTo6dmlzaXRDaGlsZHJlbihKUwogICAgIH0KIH0KIAor
REVGSU5FX1ZJU0lUX0NISUxEUkVOKFByb2dyYW1FeGVjdXRhYmxlKTsKKwogfSAvLyBuYW1lc3Bh
Y2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9ncmFtRXhlY3V0
YWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb2dy
YW1FeGVjdXRhYmxlLmgJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1Byb2dyYW1FeGVjdXRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTgxLDcgKzgx
LDcgQEAgcHJpdmF0ZToKIAogICAgIFByb2dyYW1FeGVjdXRhYmxlKEpTR2xvYmFsT2JqZWN0Kiwg
Y29uc3QgU291cmNlQ29kZSYpOwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0Nl
bGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBX
cml0ZUJhcnJpZXI8VW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrPiBtX3VubGlua2VkUHJvZ3JhbUNv
ZGVCbG9jazsKICAgICBXcml0ZUJhcnJpZXI8RXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZT4gbV9w
cm9ncmFtQ29kZUJsb2NrOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJv
cGVydHlNYXBIYXNoVGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9Qcm9wZXJ0eU1hcEhhc2hUYWJsZS5oCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eU1hcEhhc2hUYWJsZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xMzMsNyArMTMzLDcgQEAgcHVibGljOgogCiAgICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOwogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3ko
SlNDZWxsKik7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90Vmlz
aXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBERUNMQVJFX0VYUE9S
VF9JTkZPOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eVRh
YmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9w
ZXJ0eVRhYmxlLmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvUHJvcGVydHlUYWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExOCw3ICsxMTgs
OCBAQCB2b2lkIFByb3BlcnR5VGFibGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2CiAgICAgdm0uaGVh
cC5yZXBvcnRFeHRyYU1lbW9yeUFsbG9jYXRlZChkYXRhU2l6ZSgpKTsKIH0KIAotdm9pZCBQcm9w
ZXJ0eVRhYmxlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0
b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBQcm9wZXJ0eVRhYmxlOjp2aXNp
dENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0
byogdGhpc09iamVjdCA9IGpzQ2FzdDxQcm9wZXJ0eVRhYmxlKj4oY2VsbCk7CiAgICAgQVNTRVJU
X0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtMTI2LDYgKzEyNyw4
IEBAIHZvaWQgUHJvcGVydHlUYWJsZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwKICAgICB2aXNpdG9y
LnJlcG9ydEV4dHJhTWVtb3J5VmlzaXRlZCh0aGlzT2JqZWN0LT5kYXRhU2l6ZSgpKTsKIH0KIAor
REVGSU5FX1ZJU0lUX0NISUxEUkVOKFByb3BlcnR5VGFibGUpOworCiB2b2lkIFByb3BlcnR5VGFi
bGU6OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQogewogICAgIHN0YXRpY19jYXN0PFByb3BlcnR5VGFi
bGUqPihjZWxsKS0+UHJvcGVydHlUYWJsZTo6flByb3BlcnR5VGFibGUoKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3h5T2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm94eU9iamVjdC5jcHAJKHJldmlzaW9uIDI3
MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3h5T2JqZWN0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTE1OCw3ICsxMTU4LDggQEAgYm9vbCBQcm94eU9iamVjdDo6aXNS
ZXZva2VkKCkgY29uc3QKICAgICByZXR1cm4gaGFuZGxlcigpLmlzTnVsbCgpOwogfQogCi12b2lk
IFByb3h5T2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZp
c2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBQcm94eU9iamVjdDo6dmlz
aXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFBy
b3h5T2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PFByb3h5T2JqZWN0Kj4oY2VsbCk7CiAgICAg
QVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtMTE2OCw0
ICsxMTY5LDYgQEAgdm9pZCBQcm94eU9iamVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIAogICAg
IHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1faGFuZGxlcik7CiB9CiAKK0RFRklORV9WSVNJ
VF9DSElMRFJFTihQcm94eU9iamVjdCk7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJveHlPYmplY3QuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm94eU9iamVjdC5oCShyZXZpc2lvbiAyNzE0
NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm94eU9iamVjdC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC05MSw3ICs5MSw3IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIHZvaWQgZ2V0
T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1l
QXJyYXkmLCBEb250RW51bVByb3BlcnRpZXNNb2RlKTsKICAgICBzdGF0aWMgYm9vbCBzZXRQcm90
b3R5cGUoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUgcHJvdG90eXBlLCBib29s
IHNob3VsZFRocm93SWZDYW50U2V0KTsKICAgICBzdGF0aWMgSlNWYWx1ZSBnZXRQcm90b3R5cGUo
SlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCopOwotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwog
CiAgICAgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3RDb21tb24oSlNHbG9iYWxPYmplY3QqLCBQcm9w
ZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwogICAgIGJvb2wgcGVyZm9ybUludGVybmFsTWV0aG9k
R2V0T3duUHJvcGVydHkoSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xv
dCYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJveHlSZXZva2UuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3h5UmV2b2tl
LmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
UHJveHlSZXZva2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OSw3ICs2OSw4IEBAIEpTQ19ERUZJ
TkVfSE9TVF9GVU5DVElPTihwZXJmb3JtUHJveHlSZXYKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCi12b2lkIFByb3h5UmV2b2tlOjp2aXNpdENoaWxkcmVu
KEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPgordm9pZCBQcm94eVJldm9rZTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxs
LCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFByb3h5UmV2b2tlKiB0aGlzT2JqZWN0ID0ganND
YXN0PFByb3h5UmV2b2tlKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0
aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNzgsNCArNzksNiBAQCB2b2lkIFByb3h5UmV2b2tlOjp2
aXNpdENoaWxkcmVuKEpTQ2VsbCogCiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9w
cm94eSk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihQcm94eVJldm9rZSk7CisKIH0gLy8g
bmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJveHlS
ZXZva2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm94
eVJldm9rZS5oCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9Qcm94eVJldm9rZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01Miw3ICs1Miw3IEBAIHB1Ymxp
YzoKICAgICB9CiAKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgUHJveHlPYmplY3QqKTsK
LSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7Cisg
ICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKICAgICBKU1ZhbHVlIHByb3h5KCkgeyByZXR1cm4g
bV9wcm94eS5nZXQoKTsgfQogICAgIHZvaWQgc2V0UHJveHlUb051bGwoVk0mIHZtKSB7IHJldHVy
biBtX3Byb3h5LnNldCh2bSwgdGhpcywganNOdWxsKCkpOyB9CiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENhY2hlZFJlc3VsdC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwQ2FjaGVkUmVzdWx0LmNwcAkocmV2
aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwQ2Fj
aGVkUmVzdWx0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsOCBAQAogCiBuYW1lc3Bh
Y2UgSlNDIHsKIAotdm9pZCBSZWdFeHBDYWNoZWRSZXN1bHQ6OnZpc2l0QWdncmVnYXRlKFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgUmVnRXhw
Q2FjaGVkUmVzdWx0Ojp2aXNpdEFnZ3JlZ2F0ZShWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHZp
c2l0b3IuYXBwZW5kKG1fbGFzdElucHV0KTsKICAgICB2aXNpdG9yLmFwcGVuZChtX2xhc3RSZWdF
eHApOwpAQCAtNDMsNiArNDQsOSBAQCB2b2lkIFJlZ0V4cENhY2hlZFJlc3VsdDo6dmlzaXRBZ2dy
ZWdhdGUoCiAgICAgfQogfQogCit0ZW1wbGF0ZSB2b2lkIFJlZ0V4cENhY2hlZFJlc3VsdDo6dmlz
aXRBZ2dyZWdhdGUoQWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBSZWdFeHBD
YWNoZWRSZXN1bHQ6OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJik7CisKIEpTQXJyYXkqIFJl
Z0V4cENhY2hlZFJlc3VsdDo6bGFzdFJlc3VsdChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBKU09iamVjdCogb3duZXIpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwQ2FjaGVkUmVzdWx0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwQ2FjaGVk
UmVzdWx0LmgJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1JlZ0V4cENhY2hlZFJlc3VsdC5oCSh3b3JraW5nIGNvcHkpCkBAIC02NSw3ICs2NSw3IEBA
IHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fcmVpZmllZCA/IG1fcmVpZmllZElucHV0LmdldCgp
IDogbV9sYXN0SW5wdXQuZ2V0KCk7CiAgICAgfQogCi0gICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShT
bG90VmlzaXRvciYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgdmlzaXRB
Z2dyZWdhdGUoVmlzaXRvciYpOwogCiAgICAgLy8gbV9sYXN0UmVnRXhwIHdvdWxkIGJlIG51bGxw
dHIgd2hlbiBSZWdFeHBDYWNoZWRSZXN1bHQgaXMgbm90IHJlaWZpZWQuCiAgICAgLy8gSWYgd2Ug
ZmluZCBtX2xhc3RSZWdFeHAgaXMgbnVsbHB0ciwgaXQgbWVhbnMgdGhpcyBzaG91bGQgaG9sZCB0
aGUgZW1wdHkgUmVnRXhwLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVn
RXhwR2xvYmFsRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvUmVnRXhwR2xvYmFsRGF0YS5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cEdsb2JhbERhdGEuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zMCwxMSArMzAsMTUgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLXZvaWQgUmVnRXhwR2xv
YmFsRGF0YTo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0
eXBlbmFtZSBWaXNpdG9yPgordm9pZCBSZWdFeHBHbG9iYWxEYXRhOjp2aXNpdEFnZ3JlZ2F0ZShW
aXNpdG9yJiB2aXNpdG9yKQogewogICAgIG1fY2FjaGVkUmVzdWx0LnZpc2l0QWdncmVnYXRlKHZp
c2l0b3IpOwogfQogCit0ZW1wbGF0ZSB2b2lkIFJlZ0V4cEdsb2JhbERhdGE6OnZpc2l0QWdncmVn
YXRlKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgUmVnRXhwR2xvYmFsRGF0
YTo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImKTsKKwogSlNWYWx1ZSBSZWdFeHBHbG9iYWxE
YXRhOjpnZXRCYWNrcmVmKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIHVuc2lnbmVkIGkp
CiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwR2xvYmFsRGF0YS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cEdsb2JhbERhdGEuaAkocmV2aXNpb24gMjcx
NDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwR2xvYmFsRGF0YS5o
CSh3b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0MSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldElu
cHV0KEpTR2xvYmFsT2JqZWN0KiwgSlNTdHJpbmcqKTsKICAgICBKU1N0cmluZyogaW5wdXQoKSB7
IHJldHVybiBtX2NhY2hlZFJlc3VsdC5pbnB1dCgpOyB9CiAKLSAgICB2b2lkIHZpc2l0QWdncmVn
YXRlKFNsb3RWaXNpdG9yJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCB2
aXNpdEFnZ3JlZ2F0ZShWaXNpdG9yJik7CiAKICAgICBKU1ZhbHVlIGdldEJhY2tyZWYoSlNHbG9i
YWxPYmplY3QqLCB1bnNpZ25lZCk7CiAgICAgSlNWYWx1ZSBnZXRMYXN0UGFyZW4oSlNHbG9iYWxP
YmplY3QqKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE9iamVj
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhw
T2JqZWN0LmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvUmVnRXhwT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYsNyArNDYsOCBAQCB2
b2lkIFJlZ0V4cE9iamVjdDo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtCiAgICAgQVNTRVJUKHR5cGUo
KSA9PSBSZWdFeHBPYmplY3RUeXBlKTsKIH0KIAotdm9pZCBSZWdFeHBPYmplY3Q6OnZpc2l0Q2hp
bGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVu
YW1lIFZpc2l0b3I+Cit2b2lkIFJlZ0V4cE9iamVjdDo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxs
KiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFJlZ0V4cE9iamVjdCogdGhpc09iamVj
dCA9IGpzQ2FzdDxSZWdFeHBPYmplY3QqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lO
SEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC01NSw2ICs1Niw4IEBAIHZvaWQgUmVnRXhw
T2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCoKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2Jq
ZWN0LT5tX2xhc3RJbmRleCk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihSZWdFeHBPYmpl
Y3QpOworCiBib29sIFJlZ0V4cE9iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiBv
YmplY3QsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0
eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3Qt
PnZtKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBPYmplY3Qu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBPYmpl
Y3QuaAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
UmVnRXhwT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEzMyw3ICsxMzMsNyBAQCBwcml2YXRl
OgogICAgIEpTX0VYUE9SVF9QUklWQVRFIFJlZ0V4cE9iamVjdChWTSYsIFN0cnVjdHVyZSosIFJl
Z0V4cCopOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsK
IAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsK
KyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgYm9vbCBsYXN0SW5kZXhJc1dyaXRh
YmxlKCkgY29uc3QKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
YW1wbGluZ1Byb2ZpbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TYW1wbGluZ1Byb2ZpbGVyLmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTY1Miw3ICs2NTIsNyBAQCB2b2lkIFNhbXBsaW5nUHJvZmlsZXI6OnByb2Nlc3NVbnZl
cmlmaWVkCiAgICAgbV91bnByb2Nlc3NlZFN0YWNrVHJhY2VzLmNsZWFyKCk7CiB9CiAKLXZvaWQg
U2FtcGxpbmdQcm9maWxlcjo6dmlzaXQoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yKQordm9pZCBT
YW1wbGluZ1Byb2ZpbGVyOjp2aXNpdChBYnN0cmFjdFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvcikK
IHsKICAgICBSRUxFQVNFX0FTU0VSVChtX2xvY2suaXNMb2NrZWQoKSk7CiAgICAgZm9yIChKU0Nl
bGwqIGNlbGwgOiBtX2xpdmVDZWxsUG9pbnRlcnMpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TYW1wbGluZ1Byb2ZpbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5oCShyZXZpc2lvbiAyNzE0NDMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TYW1wbGluZ1Byb2ZpbGVyLmgJKHdvcmtp
bmcgY29weSkKQEAgLTE3MSw3ICsxNzEsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBub3RpY2VKU0xv
Y2tBY3F1aXNpdGlvbigpOwogICAgIHZvaWQgbm90aWNlVk1FbnRyeSgpOwogICAgIHZvaWQgc2h1
dGRvd24oKTsKLSAgICB2b2lkIHZpc2l0KFNsb3RWaXNpdG9yJik7CisgICAgdm9pZCB2aXNpdChB
YnN0cmFjdFNsb3RWaXNpdG9yJik7CiAgICAgTG9jayYgZ2V0TG9jaygpIHsgcmV0dXJuIG1fbG9j
azsgfQogICAgIHZvaWQgc2V0VGltaW5nSW50ZXJ2YWwoU2Vjb25kcyBpbnRlcnZhbCkgeyBtX3Rp
bWluZ0ludGVydmFsID0gaW50ZXJ2YWw7IH0KICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHN0
YXJ0KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29wZWRBcmd1bWVu
dHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3Bl
ZEFyZ3VtZW50cy5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1Njb3BlZEFyZ3VtZW50cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk4LDcgKzk4
LDggQEAgU2NvcGVkQXJndW1lbnRzKiBTY29wZWRBcmd1bWVudHM6OmNyZWF0ZQogICAgIHJldHVy
biByZXN1bHQ7CiB9CiAKLXZvaWQgU2NvcGVkQXJndW1lbnRzOjp2aXNpdENoaWxkcmVuKEpTQ2Vs
bCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
Pgordm9pZCBTY29wZWRBcmd1bWVudHM6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwg
VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBTY29wZWRBcmd1bWVudHMqIHRoaXNPYmplY3QgPSBz
dGF0aWNfY2FzdDxTY29wZWRBcmd1bWVudHMqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNU
X0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC0xMTUsNiArMTE2LDggQEAgdm9pZCBT
Y29wZWRBcmd1bWVudHM6OnZpc2l0Q2hpbGRyZW4oSlNDZQogICAgIH0KIH0KIAorREVGSU5FX1ZJ
U0lUX0NISUxEUkVOKFNjb3BlZEFyZ3VtZW50cyk7CisKIFN0cnVjdHVyZSogU2NvcGVkQXJndW1l
bnRzOjpjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBKU1ZhbHVlIHByb3RvdHlwZSkKIHsKICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0s
IGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhTY29wZWRBcmd1bWVudHNUeXBlLCBT
dHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TY29wZWRBcmd1bWVudHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TY29wZWRBcmd1bWVudHMuaAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVkQXJndW1lbnRzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTYzLDkgKzYzLDkgQEAgcHVibGljOgogICAgIAogICAgIC8vIENyZWF0ZXMgYW4gYXJndW1l
bnRzIG9iamVjdCBieSBjb3B5aW5nIHRoZSBhcmd1bWVudHMgZnJvbSBhIHdlbGwtZGVmaW5lZCBz
dGFjayBsb2NhdGlvbi4KICAgICBzdGF0aWMgU2NvcGVkQXJndW1lbnRzKiBjcmVhdGVCeUNvcHlp
bmdGcm9tKFZNJiwgU3RydWN0dXJlKiwgUmVnaXN0ZXIqIGFyZ3VtZW50c1N0YXJ0LCB1bnNpZ25l
ZCB0b3RhbExlbmd0aCwgSlNGdW5jdGlvbiogY2FsbGVlLCBTY29wZWRBcmd1bWVudHNUYWJsZSos
IEpTTGV4aWNhbEVudmlyb25tZW50Kik7Ci0gICAgCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGls
ZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwotICAgIAorCisgICAgREVDTEFSRV9WSVNJVF9D
SElMRFJFTjsKKwogICAgIHVpbnQzMl90IGludGVybmFsTGVuZ3RoKCkgY29uc3QKICAgICB7CiAg
ICAgICAgIHJldHVybiBtX3RvdGFsTGVuZ3RoOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyLmNw
cAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2lt
cGxlVHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Miw3ICs2Miw3
IEBAIGJvb2wgU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXI6OmlzQXRvbWkKICAgICByZXR1cm4g
bV9hbGxvd0F0b21pY3NXYWl0OwogfQogCi1ib29sIFNpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVy
OjpKU0FycmF5QnVmZmVyT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFu
ZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgSlNDOjpTbG90VmlzaXRvciYgdmlzaXRv
ciwgY29uc3QgY2hhcioqIHJlYXNvbikKK2Jvb2wgU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXI6
OkpTQXJyYXlCdWZmZXJPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5k
bGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3Im
IHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCiB7CiAgICAgaWYgKFVOTElLRUxZKHJlYXNv
bikpCiAgICAgICAgICpyZWFzb24gPSAiSlNBcnJheUJ1ZmZlciBpcyBvcGFxdWUgcm9vdCI7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TaW1wbGVUeXBlZEFycmF5Q29udHJv
bGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NpbXBs
ZVR5cGVkQXJyYXlDb250cm9sbGVyLmgJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1NpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTU4LDcgKzU4LDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBjbGFzcyBKU0Fy
cmF5QnVmZmVyT3duZXIgZmluYWwgOiBwdWJsaWMgV2Vha0hhbmRsZU93bmVyIHsKICAgICBwdWJs
aWM6Ci0gICAgICAgIGJvb2wgaXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8
SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCwgU2xvdFZpc2l0b3ImLCBjb25zdCBjaGFyKiog
cmVhc29uKSBmaW5hbDsKKyAgICAgICAgYm9vbCBpc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhK
U0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0LCBBYnN0cmFjdFNsb3RWaXNp
dG9yJiwgY29uc3QgY2hhcioqIHJlYXNvbikgZmluYWw7CiAgICAgICAgIHZvaWQgZmluYWxpemUo
SlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCkgZmluYWw7CiAgICAgfTsK
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU21hbGxTdHJpbmdzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TbWFsbFN0cmluZ3Mu
Y3BwCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
bWFsbFN0cmluZ3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Niw3ICs2Niw3IEBAIHZvaWQgU21h
bGxTdHJpbmdzOjppbml0aWFsaXplQ29tbW9uU3RyaW4KICAgICBzZXRJc0luaXRpYWxpemVkKHRy
dWUpOwogfQogCi12b2lkIFNtYWxsU3RyaW5nczo6dmlzaXRTdHJvbmdSZWZlcmVuY2VzKFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQordm9pZCBTbWFsbFN0cmluZ3M6OnZpc2l0U3Ryb25nUmVmZXJlbmNl
cyhBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIG1fbmVlZHNUb0JlVmlzaXRl
ZCA9IGZhbHNlOwogICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQobV9lbXB0eVN0cmluZyk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TbWFsbFN0cmluZ3MuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TbWFsbFN0cmluZ3MuaAko
cmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU21hbGxT
dHJpbmdzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDkgKzQ5LDkgQEAgY2xhc3MgU3RyaW5nSW1w
bDsKIAogbmFtZXNwYWNlIEpTQyB7CiAKK2NsYXNzIEFic3RyYWN0U2xvdFZpc2l0b3I7CiBjbGFz
cyBWTTsKIGNsYXNzIEpTU3RyaW5nOwotY2xhc3MgU2xvdFZpc2l0b3I7CiAKIHN0YXRpYyBjb25z
dGV4cHIgdW5zaWduZWQgbWF4U2luZ2xlQ2hhcmFjdGVyU3RyaW5nID0gMHhGRjsKIApAQCAtNzgs
NyArNzgsNyBAQCBwdWJsaWM6CiAgICAgSlNTdHJpbmcqKiBzaW5nbGVDaGFyYWN0ZXJTdHJpbmdz
KCkgeyByZXR1cm4gJm1fc2luZ2xlQ2hhcmFjdGVyU3RyaW5nc1swXTsgfQogCiAgICAgdm9pZCBp
bml0aWFsaXplQ29tbW9uU3RyaW5ncyhWTSYpOwotICAgIHZvaWQgdmlzaXRTdHJvbmdSZWZlcmVu
Y2VzKFNsb3RWaXNpdG9yJik7CisgICAgdm9pZCB2aXNpdFN0cm9uZ1JlZmVyZW5jZXMoQWJzdHJh
Y3RTbG90VmlzaXRvciYpOwogCiAjZGVmaW5lIEpTQ19DT01NT05fU1RSSU5HU19BQ0NFU1NPUl9E
RUZJTklUSU9OKG5hbWUpIFwKICAgICBKU1N0cmluZyogbmFtZSMjU3RyaW5nKCkgY29uc3QgICAg
ICAgICAgICAgICAgICAgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3Bh
cnNlQXJyYXlWYWx1ZU1hcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU3BhcnNlQXJyYXlWYWx1ZU1hcC5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NwYXJzZUFycmF5VmFsdWVNYXAuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMTAsNyArMjEwLDggQEAgSlNWYWx1ZSBTcGFyc2VBcnJheUVudHJ5Ojpn
ZXROb25TcGFyc2VNbwogICAgIHJldHVybiBCYXNlOjpnZXQoKTsKIH0KIAotdm9pZCBTcGFyc2VB
cnJheVZhbHVlTWFwOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZp
c2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBTcGFyc2VBcnJheVZhbHVl
TWFwOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7
CiAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCogdGhpc09iamVjdCA9IGpzQ2FzdDxTcGFyc2VBcnJh
eVZhbHVlTWFwKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2Jq
ZWN0LCBpbmZvKCkpOwpAQCAtMjIzLDUgKzIyNCw3IEBAIHZvaWQgU3BhcnNlQXJyYXlWYWx1ZU1h
cDo6dmlzaXRDaGlsZHJlbigKICAgICB2aXNpdG9yLnJlcG9ydEV4dHJhTWVtb3J5VmlzaXRlZCh0
aGlzT2JqZWN0LT5tX3JlcG9ydGVkQ2FwYWNpdHkgKiBzaXplb2YoTWFwOjpLZXlWYWx1ZVBhaXJU
eXBlKSk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihTcGFyc2VBcnJheVZhbHVlTWFwKTsK
KwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1NwYXJzZUFycmF5VmFsdWVNYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TcGFyc2VBcnJheVZhbHVlTWFwLmgJKHJldmlzaW9uIDI3MTQ0MykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NwYXJzZUFycmF5VmFsdWVNYXAuaAkod29y
a2luZyBjb3B5KQpAQCAtMTE1LDcgKzExNSw3IEBAIHB1YmxpYzoKICAgICAKICAgICBzdGF0aWMg
U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUg
cHJvdG90eXBlKTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xv
dFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgYm9vbCBzcGFy
c2VNb2RlKCkKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdGFj
a0ZyYW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
dGFja0ZyYW1lLmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU3RhY2tGcmFtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0Miw3ICsxNDIsOCBA
QCBTdHJpbmcgU3RhY2tGcmFtZTo6dG9TdHJpbmcoVk0mIHZtKSBjb25zCiAgICAgcmV0dXJuIHRy
YWNlQnVpbGQudG9TdHJpbmcoKS5pbXBsKCk7CiB9CiAKLXZvaWQgU3RhY2tGcmFtZTo6dmlzaXRD
aGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+
Cit2b2lkIFN0YWNrRnJhbWU6OnZpc2l0Q2hpbGRyZW5JbXBsKFZpc2l0b3ImIHZpc2l0b3IpCiB7
CiAgICAgaWYgKG1fY2FsbGVlKQogICAgICAgICB2aXNpdG9yLmFwcGVuZChtX2NhbGxlZSk7CkBA
IC0xNTAsNSArMTUxLDcgQEAgdm9pZCBTdGFja0ZyYW1lOjp2aXNpdENoaWxkcmVuKFNsb3RWaXNp
dAogICAgICAgICB2aXNpdG9yLmFwcGVuZChtX2NvZGVCbG9jayk7CiB9CiAKK0RFRklORV9JTlNU
QU5DRV9WSVNJVF9DSElMRFJFTihTdGFja0ZyYW1lKTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0YWNrRnJhbWUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdGFja0ZyYW1lLmgJKHJldmlz
aW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0YWNrRnJhbWUu
aAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogCiAjaW5jbHVkZSAiSGVhcC5oIgog
I2luY2x1ZGUgIlZNLmgiCisjaW5jbHVkZSAiU2xvdFZpc2l0b3JNYWNyb3MuaCIKICNpbmNsdWRl
ICJXYXNtSW5kZXhPck5hbWUuaCIKICNpbmNsdWRlICJXcml0ZUJhcnJpZXIuaCIKICNpbmNsdWRl
IDxsaW1pdHMuaD4KQEAgLTM1LDcgKzM2LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIENv
ZGVCbG9jazsKIGNsYXNzIEpTT2JqZWN0OwotY2xhc3MgU2xvdFZpc2l0b3I7CiAKIGNsYXNzIFN0
YWNrRnJhbWUgewogcHVibGljOgpAQCAtNTgsNyArNTgsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJl
dHVybiBtX2J5dGVjb2RlSW5kZXg7CiAgICAgfQogICAgIAotICAgIHZvaWQgdmlzaXRDaGlsZHJl
bihTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfSU5TVEFOQ0VfVklTSVRfQ0hJTERSRU47CiAg
ICAgYm9vbCBpc01hcmtlZChWTSYgdm0pIGNvbnN0IHsgcmV0dXJuICghbV9jYWxsZWUgfHwgdm0u
aGVhcC5pc01hcmtlZChtX2NhbGxlZS5nZXQoKSkpICYmICghbV9jb2RlQmxvY2sgfHwgdm0uaGVh
cC5pc01hcmtlZChtX2NvZGVCbG9jay5nZXQoKSkpOyB9CiAKIHByaXZhdGU6CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAJKHJldmlzaW9uIDI3MTQ0
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEyNjcsNyArMTI2Nyw4IEBAIHZvaWQgU3RydWN0dXJlOjpkaWRUcmFuc2l0
aW9uRnJvbVRoaXNTdHIKICAgICAgICAgbV90cmFuc2l0aW9uV2F0Y2hwb2ludFNldC5maXJlQWxs
KHZtKCksIFN0cnVjdHVyZUZpcmVEZXRhaWwodGhpcykpOwogfQogCi12b2lkIFN0cnVjdHVyZTo6
dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxh
dGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgU3RydWN0dXJlOjp2aXNpdENoaWxkcmVuSW1wbChK
U0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgU3RydWN0dXJlKiB0aGlzT2Jq
ZWN0ID0ganNDYXN0PFN0cnVjdHVyZSo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5I
RVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTEyOTUsNiArMTI5Niw4IEBAIHZvaWQgU3Ry
dWN0dXJlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2UKICAgICAgICAgdGhpc09iamVjdC0+bV9w
cm9wZXJ0eVRhYmxlVW5zYWZlLmNsZWFyKCk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihT
dHJ1Y3R1cmUpOworCiBib29sIFN0cnVjdHVyZTo6aXNDaGVhcER1cmluZ0dDKFZNJiB2bSkKIHsK
ICAgICAvLyBGSVhNRTogV2UgY291bGQgbWFrZSB0aGlzIGV2ZW4gc2FmZXIgYnkgcmV0dXJuaW5n
IGZhbHNlIGlmIHRoaXMgc3RydWN0dXJlJ3MgcHJvcGVydHkgdGFibGUKQEAgLTEzMDUsMTYgKzEz
MDgsMjYgQEAgYm9vbCBTdHJ1Y3R1cmU6OmlzQ2hlYXBEdXJpbmdHQyhWTSYgdm0pCiAgICAgICAg
ICYmIChoYXNQb2x5UHJvdG8oKSB8fCAhc3RvcmVkUHJvdG90eXBlT2JqZWN0KCkgfHwgdm0uaGVh
cC5pc01hcmtlZChzdG9yZWRQcm90b3R5cGVPYmplY3QoKSkpOwogfQogCi1ib29sIFN0cnVjdHVy
ZTo6bWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPgorYm9vbCBTdHJ1Y3R1cmU6Om1hcmtJZkNoZWFwMShWaXNpdG9yJiB2aXNpdG9yKQor
Ly9ib29sIFN0cnVjdHVyZTo6bWFya0lmQ2hlYXAxKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0
b3IpCiB7CiAgICAgVk0mIHZtID0gdmlzaXRvci52bSgpOwogICAgIGlmICghaXNDaGVhcER1cmlu
Z0dDKHZtKSkKLSAgICAgICAgcmV0dXJuIHZtLmhlYXAuaXNNYXJrZWQodGhpcyk7Ci0gICAgCisg
ICAgICAgIHJldHVybiB2bS5oZWFwLmlzTWFya2VkKHRoaXMpOyAvLyBtbGFtIEZJU01FCisKICAg
ICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKHRoaXMpOwogICAgIHJldHVybiB0cnVlOwogfQog
CisvL3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+CisvL2Jvb2wgU3RydWN0dXJlOjptYXJrSWZD
aGVhcChWaXNpdG9yJiB2aXNpdG9yKQorLy97CisvLyAgICByZXR1cm4gbWFya0lmQ2hlYXAxKHZp
c2l0b3IpOyAvLyBtbGFtIEZJWE1FIEhBQ0sgdG8gZ2V0IHRoaXMgY29tcGlsaW5nISEhCisvL30K
K3RlbXBsYXRlIGJvb2wgU3RydWN0dXJlOjptYXJrSWZDaGVhcDEoU2xvdFZpc2l0b3ImKTsKK3Rl
bXBsYXRlIGJvb2wgU3RydWN0dXJlOjptYXJrSWZDaGVhcDEoQWJzdHJhY3RTbG90VmlzaXRvciYp
OworCiBSZWY8U3RydWN0dXJlU2hhcGU+IFN0cnVjdHVyZTo6dG9TdHJ1Y3R1cmVTaGFwZShKU1Zh
bHVlIHZhbHVlLCBib29sJiBzYXdQb2x5UHJvdG9TdHJ1Y3R1cmUpCiB7CiAgICAgUmVmPFN0cnVj
dHVyZVNoYXBlPiBiYXNlU2hhcGUgPSBTdHJ1Y3R1cmVTaGFwZTo6Y3JlYXRlKCk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAkocmV2aXNpb24gMjcxNDQz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTYwLDcgKzYwLDYgQEAgY2xhc3MgUHJvcGVydHlOYW1lQXJyYXlEYXRhOwogY2xh
c3MgUHJvcGVydHlUYWJsZTsKIGNsYXNzIFN0cnVjdHVyZUNoYWluOwogY2xhc3MgU3RydWN0dXJl
U2hhcGU7Ci1jbGFzcyBTbG90VmlzaXRvcjsKIGNsYXNzIEpTU3RyaW5nOwogc3RydWN0IER1bXBD
b250ZXh0Owogc3RydWN0IEhhc2hUYWJsZTsKQEAgLTMwNyw3ICszMDYsNyBAQCBwdWJsaWM6CiAg
ICAgSlNWYWx1ZSBwcm90b3R5cGVGb3JMb29rdXAoSlNHbG9iYWxPYmplY3QqLCBKU0NlbGwqIGJh
c2UpIGNvbnN0OwogICAgIFN0cnVjdHVyZUNoYWluKiBwcm90b3R5cGVDaGFpbihWTSYsIEpTR2xv
YmFsT2JqZWN0KiwgSlNPYmplY3QqIGJhc2UpIGNvbnN0OwogICAgIFN0cnVjdHVyZUNoYWluKiBw
cm90b3R5cGVDaGFpbihKU0dsb2JhbE9iamVjdCosIEpTT2JqZWN0KiBiYXNlKSBjb25zdDsKLSAg
ICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAg
REVDTEFSRV9WSVNJVF9DSElMRFJFTjsKICAgICAKICAgICAvLyBBIFN0cnVjdHVyZSBpcyBjaGVh
cCB0byBtYXJrIGR1cmluZyBHQyBpZiBkb2luZyBzbyB3b3VsZCBvbmx5IGFkZCBhIHNtYWxsIGFu
ZCBib3VuZGVkIGFtb3VudAogICAgIC8vIHRvIG91ciBoZWFwIGZvb3RwcmludC4gRm9yIGV4YW1w
bGUsIGlmIHRoZSBzdHJ1Y3R1cmUgcmVmZXJzIHRvIGEgZ2xvYmFsIG9iamVjdCB0aGF0IGlzIG5v
dApAQCAtMzE4LDcgKzMxNyw5IEBAIHB1YmxpYzoKICAgICBib29sIGlzQ2hlYXBEdXJpbmdHQyhW
TSYpOwogICAgIAogICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGlzIHN0cnVjdHVyZSBpcyBub3cg
bWFya2VkLgotICAgIGJvb2wgbWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImKTsKKy8vICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFZpc2l0b3I+IGJvb2wgbWFya0lmQ2hlYXAoVmlzaXRvciYpOworLy8gICAg
Ym9vbCBtYXJrSWZDaGVhcDEoQWJzdHJhY3RTbG90VmlzaXRvciYpOworICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFZpc2l0b3I+IGJvb2wgbWFya0lmQ2hlYXAxKFZpc2l0b3ImKTsgLy8gbWxzbSBURVNU
CiAgICAgCiAgICAgYm9vbCBoYXNSYXJlRGF0YSgpIGNvbnN0CiAgICAgewpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlQ2hhaW4uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUNoYWluLmNwcAkocmV2aXNp
b24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlQ2hh
aW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Niw3ICs2Niw4IEBAIHZvaWQgU3RydWN0dXJlQ2hh
aW46OmZpbmlzaENyZWF0aW9uKFZNJiAKICAgICB9CiB9CiAKLXZvaWQgU3RydWN0dXJlQ2hhaW46
OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBs
YXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFN0cnVjdHVyZUNoYWluOjp2aXNpdENoaWxkcmVu
SW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgU3RydWN0dXJlQ2hh
aW4qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8U3RydWN0dXJlQ2hhaW4qPihjZWxsKTsKICAgICBBU1NF
UlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC04MCw0ICs4MSw2
IEBAIHZvaWQgU3RydWN0dXJlQ2hhaW46OnZpc2l0Q2hpbGRyZW4oSlNDZWwKICAgICB9CiB9CiAK
K0RFRklORV9WSVNJVF9DSElMRFJFTihTdHJ1Y3R1cmVDaGFpbik7CisKIH0gLy8gbmFtZXNwYWNl
IEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlQ2hhaW4u
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVD
aGFpbi5oCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TdHJ1Y3R1cmVDaGFpbi5oCSh3b3JraW5nIGNvcHkpCkBAIC01MSw3ICs1MSw3IEBAIHB1Ymxp
YzoKIAogICAgIHN0YXRpYyBTdHJ1Y3R1cmVDaGFpbiogY3JlYXRlKFZNJiwgSlNPYmplY3QqKTsK
ICAgICBTdHJ1Y3R1cmVJRCogaGVhZCgpIHsgcmV0dXJuIG1fdmVjdG9yLmdldCgpOyB9Ci0gICAg
c3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERF
Q0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1
Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3Rv
dHlwZSkKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1
cmVSYXJlRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU3RydWN0dXJlUmFyZURhdGEuY3BwCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVSYXJlRGF0YS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTY3LDcgKzY3LDggQEAgU3RydWN0dXJlUmFyZURhdGE6OlN0cnVjdHVyZVJhcmVEYXRhKFZN
JgogICAgICAgICBtX3ByZXZpb3VzLnNldCh2bSwgdGhpcywgcHJldmlvdXMpOwogfQogCi12b2lk
IFN0cnVjdHVyZVJhcmVEYXRhOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0
b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBTdHJ1Y3R1cmVS
YXJlRGF0YTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9y
KQogewogICAgIFN0cnVjdHVyZVJhcmVEYXRhKiB0aGlzT2JqZWN0ID0ganNDYXN0PFN0cnVjdHVy
ZVJhcmVEYXRhKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2Jq
ZWN0LCBpbmZvKCkpOwpAQCAtODYsNiArODcsOCBAQCB2b2lkIFN0cnVjdHVyZVJhcmVEYXRhOjp2
aXNpdENoaWxkcmVuKEpTCiAgICAgfQogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oU3RydWN0
dXJlUmFyZURhdGEpOworCiAvLyAtLS0tLS0tLS0tLSBDYWNoZWQgc3BlY2lhbCBwcm9wZXJ0aWVz
IGhlbHBlciB3YXRjaHBvaW50IGNsYXNzZXMgLS0tLS0tLS0tLS0KIAogY2xhc3MgQ2FjaGVkU3Bl
Y2lhbFByb3BlcnR5QWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50IGZpbmFs
IDogcHVibGljIEFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludEJhc2UgewpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlUmFyZURhdGEuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVSYXJl
RGF0YS5oCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TdHJ1Y3R1cmVSYXJlRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC02OCw3ICs2OCw3IEBAIHB1
YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNEZXN0cnVjdGlvbiA9IHRydWU7
CiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKIAotICAgIHN0YXRpYyB2b2lkIHZp
c2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NI
SUxEUkVOOwogCiAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiwgSlNH
bG9iYWxPYmplY3QqLCBKU1ZhbHVlIHByb3RvdHlwZSk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1N5bWJvbFRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TeW1ib2xUYWJsZS5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJvbFRhYmxlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtOTIsNyArOTIsOCBAQCB2b2lkIFN5bWJvbFRhYmxlOjpmaW5pc2hDcmVhdGlvbihW
TSYgdm0pCiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwogfQogCi12b2lkIFN5bWJvbFRh
YmxlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogdGhpc0NlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9y
KQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgU3ltYm9sVGFibGU6OnZpc2l0Q2hp
bGRyZW5JbXBsKEpTQ2VsbCogdGhpc0NlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgU3lt
Ym9sVGFibGUqIHRoaXNTeW1ib2xUYWJsZSA9IGpzQ2FzdDxTeW1ib2xUYWJsZSo+KHRoaXNDZWxs
KTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNTeW1ib2xUYWJsZSwgaW5mbygp
KTsKQEAgLTEwOCw2ICsxMDksOCBAQCB2b2lkIFN5bWJvbFRhYmxlOjp2aXNpdENoaWxkcmVuKEpT
Q2VsbCogCiAgICAgdGhpc1N5bWJvbFRhYmxlLT5tX2xvY2FsVG9FbnRyeSA9IG51bGxwdHI7CiB9
CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihTeW1ib2xUYWJsZSk7CisKIGNvbnN0IFN5bWJvbFRh
YmxlOjpMb2NhbFRvRW50cnlWZWMmIFN5bWJvbFRhYmxlOjpsb2NhbFRvRW50cnkoY29uc3QgQ29u
Y3VycmVudEpTTG9ja2VyJikKIHsKICAgICBpZiAoVU5MSUtFTFkoIW1fbG9jYWxUb0VudHJ5KSkg
ewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFibGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TeW1ib2xUYWJsZS5oCShy
ZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TeW1ib2xU
YWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03MzMsNyArNzMzLDcgQEAgcHVibGljOgogICAgICAg
ICBtX3NpbmdsZXRvbi5ub3RpZnlXcml0ZSh2bSwgdGhpcywgc2NvcGUsIHJlYXNvbik7CiAgICAg
fQogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYp
OworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBERUNMQVJFX0VYUE9SVF9JTkZP
OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlUHJvZmlsZXJMb2cu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVQcm9m
aWxlckxvZy5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1R5cGVQcm9maWxlckxvZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNCw3ICsxMjQs
NyBAQCB2b2lkIFR5cGVQcm9maWxlckxvZzo6cHJvY2Vzc0xvZ0VudHJpZXMoCiAgICAgfQogfQog
Ci12b2lkIFR5cGVQcm9maWxlckxvZzo6dmlzaXQoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2b2lk
IFR5cGVQcm9maWxlckxvZzo6dmlzaXQoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsK
ICAgICBmb3IgKExvZ0VudHJ5KiBlbnRyeSA9IG1fbG9nU3RhcnRQdHI7IGVudHJ5ICE9IG1fY3Vy
cmVudExvZ0VudHJ5UHRyOyArK2VudHJ5KSB7CiAgICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJy
aWVyZWQoZW50cnktPnZhbHVlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1R5cGVQcm9maWxlckxvZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1R5cGVQcm9maWxlckxvZy5oCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9UeXBlUHJvZmlsZXJMb2cuaAkod29ya2luZyBjb3B5KQpAQCAt
NTksNyArNTksNyBAQCBwdWJsaWM6CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBwcm9jZXNz
TG9nRW50cmllcyhWTSYsIGNvbnN0IFN0cmluZyYpOwogICAgIExvZ0VudHJ5KiBsb2dFbmRQdHIo
KSBjb25zdCB7IHJldHVybiBtX2xvZ0VuZFB0cjsgfQogCi0gICAgdm9pZCB2aXNpdChTbG90Vmlz
aXRvciYpOworICAgIHZvaWQgdmlzaXQoQWJzdHJhY3RTbG90VmlzaXRvciYpOwogCiAgICAgc3Rh
dGljIHB0cmRpZmZfdCBsb2dTdGFydE9mZnNldCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihU
eXBlUHJvZmlsZXJMb2csIG1fbG9nU3RhcnRQdHIpOyB9CiAgICAgc3RhdGljIHB0cmRpZmZfdCBj
dXJyZW50TG9nRW50cnlPZmZzZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoVHlwZVByb2Zp
bGVyTG9nLCBtX2N1cnJlbnRMb2dFbnRyeVB0cik7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1dlYWtNYXBJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9XZWFrTWFwSW1wbC5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtNYXBJbXBsLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzksOCArMzksOSBAQCB2b2lkIFdlYWtNYXBJbXBsPFdlYWtNYXBCdWNrZXQ+OjpkZXN0
cm95CiAgICAgc3RhdGljX2Nhc3Q8V2Vha01hcEltcGwqPihjZWxsKS0+fldlYWtNYXBJbXBsKCk7
CiB9CiAKLXRlbXBsYXRlIDx0eXBlbmFtZSBXZWFrTWFwQnVja2V0Pgotdm9pZCBXZWFrTWFwSW1w
bDxXZWFrTWFwQnVja2V0Pjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9y
JiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgV2Vha01hcEJ1Y2tldD4KK3RlbXBsYXRlPHR5
cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFdlYWtNYXBJbXBsPFdlYWtNYXBCdWNrZXQ+Ojp2aXNpdENo
aWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgV2Vha01h
cEltcGwqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8V2Vha01hcEltcGwqPihjZWxsKTsKICAgICBBU1NF
UlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC00OCw2ICs0OSw4
IEBAIHZvaWQgV2Vha01hcEltcGw8V2Vha01hcEJ1Y2tldD46OnZpc2l0Q2gKICAgICB2aXNpdG9y
LnJlcG9ydEV4dHJhTWVtb3J5VmlzaXRlZCh0aGlzT2JqZWN0LT5tX2NhcGFjaXR5ICogc2l6ZW9m
KFdlYWtNYXBCdWNrZXQpKTsKIH0KIAorREVGSU5FX1RFTVBMQVRFX1ZJU0lUX0NISUxEUkVOKHRl
bXBsYXRlPHR5cGVuYW1lIFdlYWtNYXBCdWNrZXQ+LCBXZWFrTWFwSW1wbDxXZWFrTWFwQnVja2V0
Pik7CisKIHRlbXBsYXRlIDx0eXBlbmFtZSBXZWFrTWFwQnVja2V0Pgogc2l6ZV90IFdlYWtNYXBJ
bXBsPFdlYWtNYXBCdWNrZXQ+Ojplc3RpbWF0ZWRTaXplKEpTQ2VsbCogY2VsbCwgVk0mIHZtKQog
ewpAQCAtNTYsMTMgKzU5LDEzIEBAIHNpemVfdCBXZWFrTWFwSW1wbDxXZWFrTWFwQnVja2V0Pjo6
ZXN0aW0KIH0KIAogdGVtcGxhdGUgPD4KLXZvaWQgV2Vha01hcEltcGw8V2Vha01hcEJ1Y2tldDxX
ZWFrTWFwQnVja2V0RGF0YUtleT4+Ojp2aXNpdE91dHB1dENvbnN0cmFpbnRzKEpTQ2VsbCosIFNs
b3RWaXNpdG9yJikKK3ZvaWQgV2Vha01hcEltcGw8V2Vha01hcEJ1Y2tldDxXZWFrTWFwQnVja2V0
RGF0YUtleT4+Ojp2aXNpdE91dHB1dENvbnN0cmFpbnRzKEpTQ2VsbCosIEFic3RyYWN0U2xvdFZp
c2l0b3ImKQogewogICAgIC8vIE9ubHkgSlNXZWFrTWFwIG5lZWRzIHRvIGhhcnZlc3QgdmFsdWUg
cmVmZXJlbmNlcwogfQogCiB0ZW1wbGF0ZSA8Pgotdm9pZCBXZWFrTWFwSW1wbDxXZWFrTWFwQnVj
a2V0PFdlYWtNYXBCdWNrZXREYXRhS2V5VmFsdWU+Pjo6dmlzaXRPdXRwdXRDb25zdHJhaW50cyhK
U0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBXZWFrTWFwSW1wbDxXZWFr
TWFwQnVja2V0PFdlYWtNYXBCdWNrZXREYXRhS2V5VmFsdWU+Pjo6dmlzaXRPdXRwdXRDb25zdHJh
aW50cyhKU0NlbGwqIGNlbGwsIEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAg
Vk0mIHZtID0gdmlzaXRvci52bSgpOwogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8V2Vh
a01hcEltcGwqPihjZWxsKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dl
YWtNYXBJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
V2Vha01hcEltcGwuaAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvV2Vha01hcEltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtMTQ0LDggKzE0NCwxMCBA
QCBwdWJsaWM6CiAgICAgICAgIGNsZWFyVmFsdWUoKTsKICAgICB9CiAKKy8vICAgIHRlbXBsYXRl
IDx0eXBlbmFtZSBWaXNpdG9yLCB0eXBlbmFtZSBUID0gRGF0YT4KKy8vICAgIEFMV0FZU19JTkxJ
TkUgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19zYW1lPFQsIFdlYWtNYXBCdWNrZXRE
YXRhS2V5VmFsdWU+Ojp2YWx1ZT46OnR5cGUgdmlzaXRBZ2dyZWdhdGUoVmlzaXRvciYgdmlzaXRv
cikKICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVCA9IERhdGE+Ci0gICAgQUxXQVlTX0lOTElORSB0
eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8VCwgV2Vha01hcEJ1Y2tldERhdGFL
ZXlWYWx1ZT46OnZhbHVlPjo6dHlwZSB2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYgdmlzaXRv
cikKKyAgICBBTFdBWVNfSU5MSU5FIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfc2Ft
ZTxULCBXZWFrTWFwQnVja2V0RGF0YUtleVZhbHVlPjo6dmFsdWU+Ojp0eXBlIHZpc2l0QWdncmVn
YXRlKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiAgICAgewogICAgICAgICB2aXNpdG9y
LmFwcGVuZChtX2RhdGEudmFsdWUpOwogICAgIH0KQEAgLTIwMiw3ICsyMDQsNyBAQCBwdWJsaWM6
CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOwogICAg
IHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENo
aWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9URU1QTEFURV9WSVNJ
VF9DSElMRFJFTjsKIAogICAgIHN0YXRpYyBzaXplX3QgZXN0aW1hdGVkU2l6ZShKU0NlbGwqLCBW
TSYpOwogCkBAIC0zMTEsNyArMzEzLDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gdm0ud2Vh
a1NldFNwYWNlPG1vZGU+KCk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRPdXRwdXRD
b25zdHJhaW50cyhKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIHN0YXRpYyB2b2lkIHZpc2l0
T3V0cHV0Q29uc3RyYWludHMoSlNDZWxsKiwgQWJzdHJhY3RTbG90VmlzaXRvciYpOwogICAgIHZv
aWQgZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoVk0mKTsKIAogcHJpdmF0ZToKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS90b29scy9KU0RvbGxhclZNLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvSlNEb2xsYXJWTS5jcHAJKHJldmlzaW9uIDI3MTQ0MykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9KU0RvbGxhclZNLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjIyLDE0ICsyMjIsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGZpbmlzaENyZWF0
aW9uKFZNJiwgUm9vdCopOwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwq
IGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQotICAgIHsKLSAgICAgICAgRG9sbGFyVk1Bc3Nl
cnRTY29wZSBhc3NlcnRTY29wZTsKLSAgICAgICAgRWxlbWVudCogdGhpc09iamVjdCA9IGpzQ2Fz
dDxFbGVtZW50Kj4oY2VsbCk7Ci0gICAgICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhp
c09iamVjdCwgaW5mbygpKTsKLSAgICAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0
LCB2aXNpdG9yKTsKLSAgICAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9yb290KTsK
LSAgICB9CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIHN0YXRpYyBFbGVtZW50
SGFuZGxlT3duZXIqIGhhbmRsZU93bmVyKCk7CiAKQEAgLTI0NSwxMCArMjM4LDIyIEBAIHByaXZh
dGU6CiAgICAgV3JpdGVCYXJyaWVyPFJvb3Q+IG1fcm9vdDsKIH07CiAKK3RlbXBsYXRlPHR5cGVu
YW1lIFZpc2l0b3I+Cit2b2lkIEVsZW1lbnQ6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2Vs
bCwgVmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBEb2xsYXJWTUFzc2VydFNjb3BlIGFzc2VydFNj
b3BlOworICAgIEVsZW1lbnQqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8RWxlbWVudCo+KGNlbGwpOwor
ICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKKyAgICBC
YXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOworICAgIHZpc2l0b3IuYXBw
ZW5kKHRoaXNPYmplY3QtPm1fcm9vdCk7Cit9CisKK0RFRklORV9WSVNJVF9DSElMRFJFTihFbGVt
ZW50KTsKKwogY2xhc3MgRWxlbWVudEhhbmRsZU93bmVyIGZpbmFsIDogcHVibGljIFdlYWtIYW5k
bGVPd25lciB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgYm9v
bCBpc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhh
bmRsZSwgdm9pZCosIFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKSBm
aW5hbAorICAgIGJvb2wgaXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlND
OjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBj
b25zdCBjaGFyKiogcmVhc29uKSBmaW5hbAogICAgIHsKICAgICAgICAgRG9sbGFyVk1Bc3NlcnRT
Y29wZSBhc3NlcnRTY29wZTsKICAgICAgICAgaWYgKFVOTElLRUxZKHJlYXNvbikpCkBAIC0zMDIs
MTggKzMwNywyMyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2
bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVy
ZUZsYWdzKSwgaW5mbygpKTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVu
KEpTQ2VsbCogdGhpc09iamVjdCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCi0gICAgewotICAgICAg
ICBEb2xsYXJWTUFzc2VydFNjb3BlIGFzc2VydFNjb3BlOwotICAgICAgICBBU1NFUlRfR0NfT0JK
RUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7Ci0gICAgICAgIEJhc2U6OnZpc2l0Q2hp
bGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7Ci0gICAgICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9v
dCh0aGlzT2JqZWN0KTsKLSAgICB9CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogcHJp
dmF0ZToKICAgICBXZWFrPEVsZW1lbnQ+IG1fZWxlbWVudDsKIH07CiAKK3RlbXBsYXRlPHR5cGVu
YW1lIFZpc2l0b3I+Cit2b2lkIFJvb3Q6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogdGhpc09i
amVjdCwgVmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBEb2xsYXJWTUFzc2VydFNjb3BlIGFzc2Vy
dFNjb3BlOworICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygp
KTsKKyAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOworICAgIHZp
c2l0b3IuYWRkT3BhcXVlUm9vdCh0aGlzT2JqZWN0KTsKK30KKworREVGSU5FX1ZJU0lUX0NISUxE
UkVOKFJvb3QpOworCiBjbGFzcyBTaW1wbGVPYmplY3QgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVj
dCB7CiBwdWJsaWM6CiAgICAgU2ltcGxlT2JqZWN0KFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUpCkBAIC0zMzgsMTQgKzM0OCw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHNpbXBsZU9i
amVjdDsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2Vs
bCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCi0gICAgewotICAgICAgICBEb2xsYXJWTUFzc2VydFNj
b3BlIGFzc2VydFNjb3BlOwotICAgICAgICBTaW1wbGVPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nh
c3Q8U2ltcGxlT2JqZWN0Kj4oY2VsbCk7Ci0gICAgICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJ
VFModGhpc09iamVjdCwgaW5mbygpKTsKLSAgICAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlz
T2JqZWN0LCB2aXNpdG9yKTsKLSAgICAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9o
aWRkZW5WYWx1ZSk7Ci0gICAgfQorICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBz
dGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKICAgICB7CkBAIC0zNzgsNiArMzgxLDE4
IEBAIHByaXZhdGU6CiAgICAgV3JpdGVCYXJyaWVyPEpTQzo6VW5rbm93bj4gbV9oaWRkZW5WYWx1
ZTsKIH07CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFNpbXBsZU9iamVjdDo6
dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQoreworICAg
IERvbGxhclZNQXNzZXJ0U2NvcGUgYXNzZXJ0U2NvcGU7CisgICAgU2ltcGxlT2JqZWN0KiB0aGlz
T2JqZWN0ID0ganNDYXN0PFNpbXBsZU9iamVjdCo+KGNlbGwpOworICAgIEFTU0VSVF9HQ19PQkpF
Q1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKKyAgICBCYXNlOjp2aXNpdENoaWxkcmVu
KHRoaXNPYmplY3QsIHZpc2l0b3IpOworICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1f
aGlkZGVuVmFsdWUpOworfQorCitERUZJTkVfVklTSVRfQ0hJTERSRU4oU2ltcGxlT2JqZWN0KTsK
KwogY2xhc3MgSW1wdXJlR2V0dGVyIDogcHVibGljIEpTTm9uRmluYWxPYmplY3QgewogcHVibGlj
OgogICAgIEltcHVyZUdldHRlcihWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQpAQCAtNDM0
LDE0ICs0NDksNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBCYXNlOjpnZXRPd25Qcm9wZXJ0
eVNsb3Qob2JqZWN0LCBnbG9iYWxPYmplY3QsIG5hbWUsIHNsb3QpOwogICAgIH0KIAotICAgIHN0
YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRv
cikKLSAgICB7Ci0gICAgICAgIERvbGxhclZNQXNzZXJ0U2NvcGUgYXNzZXJ0U2NvcGU7Ci0gICAg
ICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2VsbCwgaW5mbygpKTsKLSAgICAgICAgQmFz
ZTo6dmlzaXRDaGlsZHJlbihjZWxsLCB2aXNpdG9yKTsKLSAgICAgICAgSW1wdXJlR2V0dGVyKiB0
aGlzT2JqZWN0ID0ganNDYXN0PEltcHVyZUdldHRlcio+KGNlbGwpOwotICAgICAgICB2aXNpdG9y
LmFwcGVuZCh0aGlzT2JqZWN0LT5tX2RlbGVnYXRlKTsKLSAgICB9CisgICAgREVDTEFSRV9WSVNJ
VF9DSElMRFJFTjsKIAogICAgIHZvaWQgc2V0RGVsZWdhdGUoVk0mIHZtLCBKU09iamVjdCogZGVs
ZWdhdGUpCiAgICAgewpAQCAtNDUyLDYgKzQ2MCwxOCBAQCBwcml2YXRlOgogICAgIFdyaXRlQmFy
cmllcjxKU09iamVjdD4gbV9kZWxlZ2F0ZTsKIH07CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0
b3I+Cit2b2lkIEltcHVyZUdldHRlcjo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBW
aXNpdG9yJiB2aXNpdG9yKQoreworICAgIERvbGxhclZNQXNzZXJ0U2NvcGUgYXNzZXJ0U2NvcGU7
CisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjZWxsLCBpbmZvKCkpOworICAgIEJhc2U6
OnZpc2l0Q2hpbGRyZW4oY2VsbCwgdmlzaXRvcik7CisgICAgSW1wdXJlR2V0dGVyKiB0aGlzT2Jq
ZWN0ID0ganNDYXN0PEltcHVyZUdldHRlcio+KGNlbGwpOworICAgIHZpc2l0b3IuYXBwZW5kKHRo
aXNPYmplY3QtPm1fZGVsZWdhdGUpOworfQorCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSW1wdXJl
R2V0dGVyKTsKKwogc3RhdGljIEpTQ19ERUNMQVJFX0NVU1RPTV9HRVRURVIoY3VzdG9tR2V0dGVy
VmFsdWVHZXR0ZXIpOwogc3RhdGljIEpTQ19ERUNMQVJFX0NVU1RPTV9HRVRURVIoY3VzdG9tR2V0
dGVyQWNlc3NvckdldHRlcik7CiAKQEAgLTM1NjMsMTMgKzM1ODMsMTYgQEAgdm9pZCBKU0RvbGxh
clZNOjphZGRDb25zdHJ1Y3RpYmxlRnVuY3RpbwogICAgIHB1dERpcmVjdCh2bSwgaWRlbnRpZmll
ciwgSlNGdW5jdGlvbjo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIGFyZ3VtZW50cywgaWRlbnRp
Zmllci5zdHJpbmcoKSwgZnVuY3Rpb24sIE5vSW50cmluc2ljLCBmdW5jdGlvbiksIGpzRG9sbGFy
Vk1Qcm9wZXJ0eUF0dHJpYnV0ZXMpOwogfQogCi12b2lkIEpTRG9sbGFyVk06OnZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1l
IFZpc2l0b3I+Cit2b2lkIEpTRG9sbGFyVk06OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2Vs
bCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU0RvbGxhclZNKiB0aGlzT2JqZWN0ID0ganND
YXN0PEpTRG9sbGFyVk0qPihjZWxsKTsKICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmpl
Y3QsIHZpc2l0b3IpOwogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fb2JqZWN0RG9p
bmdTaWRlRWZmZWN0UHV0V2l0aG91dENvcnJlY3RTbG90U3RhdHVzU3RydWN0dXJlKTsKIH0KIAor
REVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTRG9sbGFyVk0pOworCiB9IC8vIG5hbWVzcGFjZSBKU0MK
IAogSUdOT1JFX1dBUk5JTkdTX0VORApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xz
L0pTRG9sbGFyVk0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMv
SlNEb2xsYXJWTS5oCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
dG9vbHMvSlNEb2xsYXJWTS5oCSh3b3JraW5nIGNvcHkpCkBAIC03NCw3ICs3NCw3IEBAIHByaXZh
dGU6CiAgICAgdm9pZCBhZGRGdW5jdGlvbihWTSYsIEpTR2xvYmFsT2JqZWN0KiwgY29uc3QgY2hh
ciogbmFtZSwgTmF0aXZlRnVuY3Rpb24sIHVuc2lnbmVkIGFyZ3VtZW50cyk7CiAgICAgdm9pZCBh
ZGRDb25zdHJ1Y3RpYmxlRnVuY3Rpb24oVk0mLCBKU0dsb2JhbE9iamVjdCosIGNvbnN0IGNoYXIq
IG5hbWUsIE5hdGl2ZUZ1bmN0aW9uLCB1bnNpZ25lZCBhcmd1bWVudHMpOwogCi0gICAgc3RhdGlj
IHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVf
VklTSVRfQ0hJTERSRU47CiAKICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX29iamVjdERv
aW5nU2lkZUVmZmVjdFB1dFdpdGhvdXRDb3JyZWN0U2xvdFN0YXR1c1N0cnVjdHVyZTsKIH07Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtR2xvYmFsLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtR2xvYmFsLmNwcAkocmV2aXNpb24g
MjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUdsb2JhbC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEwMyw3ICsxMDMsOCBAQCB2b2lkIEdsb2JhbDo6c2V0KEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPCiAgICAgfQogfQogCi12b2lkIEdsb2JhbDo6dmlzaXRBZ2dyZWdhdGUo
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBH
bG9iYWw6OnZpc2l0QWdncmVnYXRlKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgc3dpdGNoICht
X3R5cGUpIHsKICAgICBjYXNlIFdhc206OlR5cGU6OkV4dGVybnJlZjoKQEAgLTExNyw2ICsxMTgs
OSBAQCB2b2lkIEdsb2JhbDo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImCiAgICAgfQogfQog
Cit0ZW1wbGF0ZSB2b2lkIEdsb2JhbDo6dmlzaXRBZ2dyZWdhdGUoQWJzdHJhY3RTbG90VmlzaXRv
ciYpOwordGVtcGxhdGUgdm9pZCBHbG9iYWw6OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJik7
CisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpHbG9iYWwKIAogI2VuZGlmIC8vIEVOQUJMRShXRUJB
U1NFTUJMWSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21HbG9iYWwuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtR2xvYmFsLmgJKHJl
dmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21HbG9iYWwu
aAkod29ya2luZyBjb3B5KQpAQCAtNTcsNyArNTcsNyBAQCBwdWJsaWM6CiAgICAgSlNWYWx1ZSBn
ZXQoSlNHbG9iYWxPYmplY3QqKSBjb25zdDsKICAgICB1aW50NjRfdCBnZXRQcmltaXRpdmUoKSBj
b25zdCB7IHJldHVybiBtX3ZhbHVlLm1fcHJpbWl0aXZlOyB9CiAgICAgdm9pZCBzZXQoSlNHbG9i
YWxPYmplY3QqLCBKU1ZhbHVlKTsKLSAgICB2b2lkIHZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9y
Jik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCB2aXNpdEFnZ3JlZ2F0ZShW
aXNpdG9yJik7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBUKiBvd25lcigpIGNvbnN0IHsg
cmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8VCo+KG1fb3duZXIpOyB9CiAgICAgdm9pZCBzZXRPd25l
cihKU09iamVjdCogb3duZXIpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
VGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21U
YWJsZS5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21UYWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2Niw3ICsxNjYsOCBAQCBKU1ZhbHVl
IFRhYmxlOjpnZXQodWludDMyX3QgaW5kZXgpIGNvbnN0CiAgICAgcmV0dXJuIG1fanNWYWx1ZXMu
Z2V0KClbaW5kZXggJiBtX21hc2tdLmdldCgpOwogfQogCi12b2lkIFRhYmxlOjp2aXNpdEFnZ3Jl
Z2F0ZShTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2
b2lkIFRhYmxlOjp2aXNpdEFnZ3JlZ2F0ZShWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFJFTEVB
U0VfQVNTRVJUKG1fb3duZXIpOwogICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9vd25lci0+
Y2VsbExvY2soKSk7CkBAIC0xNzQsNiArMTc1LDkgQEAgdm9pZCBUYWJsZTo6dmlzaXRBZ2dyZWdh
dGUoU2xvdFZpc2l0b3ImIAogICAgICAgICB2aXNpdG9yLmFwcGVuZChtX2pzVmFsdWVzLmdldCgp
W2ldKTsKIH0KIAordGVtcGxhdGUgdm9pZCBUYWJsZTo6dmlzaXRBZ2dyZWdhdGUoQWJzdHJhY3RT
bG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBUYWJsZTo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZp
c2l0b3ImKTsKKwogRnVuY1JlZlRhYmxlKiBUYWJsZTo6YXNGdW5jcmVmVGFibGUoKQogewogICAg
IHJldHVybiBtX3R5cGUgPT0gVGFibGVFbGVtZW50VHlwZTo6RnVuY3JlZiA/IHN0YXRpY19jYXN0
PEZ1bmNSZWZUYWJsZSo+KHRoaXMpIDogbnVsbHB0cjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21UYWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21UYWJsZS5oCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtVGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtNzksNyArNzksNyBAQCBw
dWJsaWM6CiAgICAgT3B0aW9uYWw8dWludDMyX3Q+IGdyb3codWludDMyX3QgZGVsdGEsIEpTVmFs
dWUgZGVmYXVsdFZhbHVlKTsKICAgICB2b2lkIGNvcHkoY29uc3QgVGFibGUqIHNyY1RhYmxlLCB1
aW50MzJfdCBkc3RJbmRleCwgdWludDMyX3Qgc3JjSW5kZXgpOwogCi0gICAgdm9pZCB2aXNpdEFn
Z3JlZ2F0ZShTbG90VmlzaXRvciYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZv
aWQgdmlzaXRBZ2dyZWdhdGUoVmlzaXRvciYpOwogCiBwcm90ZWN0ZWQ6CiAgICAgVGFibGUodWlu
dDMyX3QgaW5pdGlhbCwgT3B0aW9uYWw8dWludDMyX3Q+IG1heGltdW0sIFRhYmxlRWxlbWVudFR5
cGUgPSBUYWJsZUVsZW1lbnRUeXBlOjpFeHRlcm5yZWYpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvSlNUb1dhc21JQ0NhbGxlZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNUb1dhc21JQ0NhbGxlZS5jcHAJKHJldmlzaW9uIDI3
MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTVG9XYXNtSUNDYWxsZWUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OSw3ICs0OSw4IEBAIFN0cnVjdHVyZSogSlNUb1dhc21J
Q0NhbGxlZTo6Y3JlYXRlU3RydWMKICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGds
b2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhKU0NhbGxlZVR5cGUsIFN0cnVjdHVyZUZs
YWdzKSwgaW5mbygpKTsKIH0KIAotdm9pZCBKU1RvV2FzbUlDQ2FsbGVlOjp2aXNpdENoaWxkcmVu
KEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPgordm9pZCBKU1RvV2FzbUlDQ2FsbGVlOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwq
IGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNUb1dhc21JQ0NhbGxlZSogdGhpc09i
amVjdCA9IGpzQ2FzdDxKU1RvV2FzbUlDQ2FsbGVlKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09C
SkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNTgsNiArNTksOCBAQCB2b2lk
IEpTVG9XYXNtSUNDYWxsZWU6OnZpc2l0Q2hpbGRyZW4oSlNDCiAgICAgdmlzaXRvci5hcHBlbmQo
dGhpc09iamVjdC0+bV9mdW5jdGlvbik7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU1Rv
V2FzbUlDQ2FsbGVlKTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBFTkFCTEUo
V0VCQVNTRU1CTFkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1RvV2Fz
bUlDQ2FsbGVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
SlNUb1dhc21JQ0NhbGxlZS5oCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9KU1RvV2FzbUlDQ2FsbGVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTU2LDcg
KzU2LDcgQEAgcHJpdmF0ZToKICAgICBKU1RvV2FzbUlDQ2FsbGVlKFZNJiB2bSwgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiAgICAgICAgIDogQmFz
ZSh2bSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUpCiAgICAgeyB9Ci0gICAgc3RhdGljIHZvaWQg
dmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRf
Q0hJTERSRU47CiAKICAgICBXcml0ZUJhcnJpZXI8V2ViQXNzZW1ibHlGdW5jdGlvbj4gbV9mdW5j
dGlvbjsKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2Vt
Ymx5Q29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9jay5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTgyLDcgKzgyLDggQEAgdm9pZCBKU1dlYkFzc2VtYmx5Q29kZUJsb2Nr
OjpjbGVhckpTQ2FsbAogICAgICAgICAoKml0ZXIpLT51bmxpbmsodm0pOwogfQogCi12b2lkIEpT
V2ViQXNzZW1ibHlDb2RlQmxvY2s6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90Vmlz
aXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTV2ViQXNz
ZW1ibHlDb2RlQmxvY2s6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYg
dmlzaXRvcikKIHsKICAgICBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKiB0aGlzT2JqZWN0ID0ganND
YXN0PEpTV2ViQXNzZW1ibHlDb2RlQmxvY2sqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNU
X0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC05MCw2ICs5MSw4IEBAIHZvaWQgSlNX
ZWJBc3NlbWJseUNvZGVCbG9jazo6dmlzaXRDaGlsZHIKICAgICBCYXNlOjp2aXNpdENoaWxkcmVu
KHRoaXNPYmplY3QsIHZpc2l0b3IpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNXZWJB
c3NlbWJseUNvZGVCbG9jayk7CisKIHZvaWQgSlNXZWJBc3NlbWJseUNvZGVCbG9jazo6ZmluYWxp
emVVbmNvbmRpdGlvbmFsbHkoVk0mIHZtKQogewogICAgIGZvciAoYXV0byBpdGVyID0gbV9jYWxs
TGlua0luZm9zLmJlZ2luKCk7ICEhaXRlcjsgKytpdGVyKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suaAkocmV2
aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3Nl
bWJseUNvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC04Niw3ICs4Niw3IEBAIHByaXZhdGU6
CiAgICAgREVDTEFSRV9FWFBPUlRfSU5GTzsKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVl
ZHNEZXN0cnVjdGlvbiA9IHRydWU7CiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsK
LSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7Cisg
ICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIFJlZjxXYXNtOjpDb2RlQmxvY2s+IG1f
Y29kZUJsb2NrOwogICAgIFZlY3RvcjxNYWNyb0Fzc2VtYmxlckNvZGVSZWY8V2FzbUVudHJ5UHRy
VGFnPj4gbV93YXNtVG9KU0V4aXRTdHViczsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL2pzL0pTV2ViQXNzZW1ibHlHbG9iYWwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlHbG9iYWwuY3BwCShyZXZpc2lvbiAyNzE0
NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5R2xvYmFs
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzEsNyArNzEsOCBAQCB2b2lkIEpTV2ViQXNzZW1ibHlH
bG9iYWw6OmRlc3Ryb3koSlNDZWxsCiAgICAgc3RhdGljX2Nhc3Q8SlNXZWJBc3NlbWJseUdsb2Jh
bCo+KGNlbGwpLT5KU1dlYkFzc2VtYmx5R2xvYmFsOjp+SlNXZWJBc3NlbWJseUdsb2JhbCgpOwog
fQogCi12b2lkIEpTV2ViQXNzZW1ibHlHbG9iYWw6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxs
LCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lk
IEpTV2ViQXNzZW1ibHlHbG9iYWw6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlz
aXRvciYgdmlzaXRvcikKIHsKICAgICBKU1dlYkFzc2VtYmx5R2xvYmFsKiB0aGlzT2JqZWN0ID0g
anNDYXN0PEpTV2ViQXNzZW1ibHlHbG9iYWwqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNU
X0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC04MCw2ICs4MSw4IEBAIHZvaWQgSlNX
ZWJBc3NlbWJseUdsb2JhbDo6dmlzaXRDaGlsZHJlbigKICAgICB0aGlzT2JqZWN0LT5nbG9iYWwo
KS0+dmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihK
U1dlYkFzc2VtYmx5R2xvYmFsKTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBF
TkFCTEUoV0VCQVNTRU1CTFkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9K
U1dlYkFzc2VtYmx5R2xvYmFsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvSlNXZWJBc3NlbWJseUdsb2JhbC5oCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5R2xvYmFsLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTU5LDcgKzU5LDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBKU1dlYkFzc2Vt
Ymx5R2xvYmFsKFZNJiwgU3RydWN0dXJlKiwgUmVmPFdhc206Okdsb2JhbD4mJik7CiAgICAgdm9p
ZCBmaW5pc2hDcmVhdGlvbihWTSYpOwotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlND
ZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAg
UmVmPFdhc206Okdsb2JhbD4gbV9nbG9iYWw7CiB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuY3BwCShyZXZp
c2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2Vt
Ymx5SW5zdGFuY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Myw3ICs3Myw4IEBAIHZvaWQgSlNX
ZWJBc3NlbWJseUluc3RhbmNlOjpkZXN0cm95KEpTQ2UKICAgICBzdGF0aWNfY2FzdDxKU1dlYkFz
c2VtYmx5SW5zdGFuY2UqPihjZWxsKS0+SlNXZWJBc3NlbWJseUluc3RhbmNlOjp+SlNXZWJBc3Nl
bWJseUluc3RhbmNlKCk7CiB9CiAKLXZvaWQgSlNXZWJBc3NlbWJseUluc3RhbmNlOjp2aXNpdENo
aWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBl
bmFtZSBWaXNpdG9yPgordm9pZCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OnZpc2l0Q2hpbGRyZW5J
bXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBhdXRvKiB0aGlzT2Jq
ZWN0ID0ganNDYXN0PEpTV2ViQXNzZW1ibHlJbnN0YW5jZSo+KGNlbGwpOwogICAgIEFTU0VSVF9H
Q19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTEwMiw2ICsxMDMsOCBA
QCB2b2lkIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6dmlzaXRDaGlsZHJlCiAgICAgICAgIHZpc2l0
b3IuYXBwZW5kVW5iYXJyaWVyZWQod3JhcHBlci5nZXQoKSk7CiB9CiAKK0RFRklORV9WSVNJVF9D
SElMRFJFTihKU1dlYkFzc2VtYmx5SW5zdGFuY2UpOworCiB2b2lkIEpTV2ViQXNzZW1ibHlJbnN0
YW5jZTo6ZmluYWxpemVDcmVhdGlvbihWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIFJlZjxXYXNtOjpDb2RlQmxvY2s+JiYgd2FzbUNvZGVCbG9jaywgSlNPYmplY3QqIGltcG9y
dE9iamVjdCwgV2FzbTo6Q3JlYXRpb25Nb2RlIGNyZWF0aW9uTW9kZSkKIHsKICAgICBtX2luc3Rh
bmNlLT5maW5hbGl6ZUNyZWF0aW9uKHRoaXMsIHdhc21Db2RlQmxvY2suY29weVJlZigpKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1i
bHlJbnN0YW5jZS5oCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMTA1LDcg
KzEwNSw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgSlNXZWJBc3NlbWJseUluc3RhbmNlKFZN
JiwgU3RydWN0dXJlKiwgUmVmPFdhc206Okluc3RhbmNlPiYmKTsKICAgICB2b2lkIGZpbmlzaENy
ZWF0aW9uKFZNJiwgSlNXZWJBc3NlbWJseU1vZHVsZSosIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3Jk
Kik7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYp
OworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBSZWY8V2FzbTo6SW5zdGFuY2U+
IG1faW5zdGFuY2U7CiAgICAgVk0qIG1fdm07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9qcy9KU1dlYkFzc2VtYmx5TWVtb3J5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TWVtb3J5LmNwcAkocmV2aXNpb24gMjcx
NDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1lbW9y
eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1OSw3ICsxNTksOCBAQCB2b2lkIEpTV2ViQXNzZW1i
bHlNZW1vcnk6OmRlc3Ryb3koSlNDZWxsCiAgICAgbWVtb3J5LT5KU1dlYkFzc2VtYmx5TWVtb3J5
Ojp+SlNXZWJBc3NlbWJseU1lbW9yeSgpOwogfQogCi12b2lkIEpTV2ViQXNzZW1ibHlNZW1vcnk6
OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBs
YXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTV2ViQXNzZW1ibHlNZW1vcnk6OnZpc2l0Q2hp
bGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBhdXRvKiB0
aGlzT2JqZWN0ID0ganNDYXN0PEpTV2ViQXNzZW1ibHlNZW1vcnkqPihjZWxsKTsKICAgICBBU1NF
UlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC0xNjksNiArMTcw
LDggQEAgdm9pZCBKU1dlYkFzc2VtYmx5TWVtb3J5Ojp2aXNpdENoaWxkcmVuKAogICAgIHZpc2l0
b3IucmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKHRoaXNPYmplY3QtPm1lbW9yeSgpLnNpemUoKSk7
CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU1dlYkFzc2VtYmx5TWVtb3J5KTsKKwogfSAv
LyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TWVtb3J5LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1lbW9y
eS5oCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9K
U1dlYkFzc2VtYmx5TWVtb3J5LmgJKHdvcmtpbmcgY29weSkKQEAgLTYzLDcgKzYzLDcgQEAgcHVi
bGljOgogcHJpdmF0ZToKICAgICBKU1dlYkFzc2VtYmx5TWVtb3J5KFZNJiwgU3RydWN0dXJlKik7
CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOwotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hp
bGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVO
OwogCiAgICAgUmVmPFdhc206Ok1lbW9yeT4gbV9tZW1vcnk7CiAgICAgV3JpdGVCYXJyaWVyPEpT
QXJyYXlCdWZmZXI+IG1fYnVmZmVyV3JhcHBlcjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuY3BwCShyZXZpc2lvbiAy
NzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9k
dWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI0LDcgKzEyNCw4IEBAIHZvaWQgSlNXZWJBc3Nl
bWJseU1vZHVsZTo6c2V0Q29kZUJsb2NrKFYKICAgICBtX2NvZGVCbG9ja3Nbc3RhdGljX2Nhc3Q8
c2l6ZV90Pihtb2RlKV0uc2V0KHZtLCB0aGlzLCBjb2RlQmxvY2spOwogfQogCi12b2lkIEpTV2Vi
QXNzZW1ibHlNb2R1bGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYg
dmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTV2ViQXNzZW1ibHlN
b2R1bGU6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikK
IHsKICAgICBKU1dlYkFzc2VtYmx5TW9kdWxlKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTV2ViQXNz
ZW1ibHlNb2R1bGUqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNP
YmplY3QsIGluZm8oKSk7CkBAIC0xMzUsNiArMTM2LDggQEAgdm9pZCBKU1dlYkFzc2VtYmx5TW9k
dWxlOjp2aXNpdENoaWxkcmVuKAogICAgICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5t
X2NvZGVCbG9ja3NbaV0pOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNXZWJBc3NlbWJs
eU1vZHVsZSk7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQkFT
U0VNQkxZKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJs
eU1vZHVsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pT
V2ViQXNzZW1ibHlNb2R1bGUuaAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC04
MCw3ICs4MCw3IEBAIHByaXZhdGU6CiAKICAgICBKU1dlYkFzc2VtYmx5TW9kdWxlKFZNJiwgU3Ry
dWN0dXJlKiwgUmVmPFdhc206Ok1vZHVsZT4mJik7CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihW
TSYpOwotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3Im
KTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgUmVmPFdhc206Ok1vZHVsZT4g
bV9tb2R1bGU7CiAgICAgV3JpdGVCYXJyaWVyPFN5bWJvbFRhYmxlPiBtX2V4cG9ydFN5bWJvbFRh
YmxlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseVRh
YmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dl
YkFzc2VtYmx5VGFibGUuY3BwCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5VGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03
Miw3ICs3Miw4IEBAIHZvaWQgSlNXZWJBc3NlbWJseVRhYmxlOjpkZXN0cm95KEpTQ2VsbCoKICAg
ICBzdGF0aWNfY2FzdDxKU1dlYkFzc2VtYmx5VGFibGUqPihjZWxsKS0+SlNXZWJBc3NlbWJseVRh
YmxlOjp+SlNXZWJBc3NlbWJseVRhYmxlKCk7CiB9CiAKLXZvaWQgSlNXZWJBc3NlbWJseVRhYmxl
Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1w
bGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1dlYkFzc2VtYmx5VGFibGU6OnZpc2l0Q2hp
bGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU1dlYkFz
c2VtYmx5VGFibGUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNXZWJBc3NlbWJseVRhYmxlKj4oY2Vs
bCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpA
QCAtODEsNiArODIsOCBAQCB2b2lkIEpTV2ViQXNzZW1ibHlUYWJsZTo6dmlzaXRDaGlsZHJlbihK
CiAgICAgdGhpc09iamVjdC0+dGFibGUoKS0+dmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7CiB9CiAK
K0RFRklORV9WSVNJVF9DSElMRFJFTihKU1dlYkFzc2VtYmx5VGFibGUpOworCiBib29sIEpTV2Vi
QXNzZW1ibHlUYWJsZTo6Z3Jvdyh1aW50MzJfdCBkZWx0YSwgSlNWYWx1ZSBkZWZhdWx0VmFsdWUp
CiB7CiAgICAgaWYgKGRlbHRhID09IDApCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9KU1dlYkFzc2VtYmx5VGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5VGFibGUuaAkocmV2aXNpb24gMjcxNDQzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseVRhYmxlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTcwLDggKzcwLDggQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBKU1dlYkFz
c2VtYmx5VGFibGUoVk0mLCBTdHJ1Y3R1cmUqLCBSZWY8V2FzbTo6VGFibGU+JiYpOwogICAgIHZv
aWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpT
Q2VsbCosIFNsb3RWaXNpdG9yJik7Ci0KKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOworLy8K
ICAgICBSZWY8V2FzbTo6VGFibGU+IG1fdGFibGU7CiB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmNwcAkocmV2
aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1i
bHlGdW5jdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1Miw3ICs0NTIsOCBAQCBXZWJBc3Nl
bWJseUZ1bmN0aW9uOjpXZWJBc3NlbWJseUZ1bmN0aW9uCiAgICAgLCBtX2ltcG9ydGFibGVGdW5j
dGlvbiB7IHNpZ25hdHVyZUluZGV4LCB3YXNtVG9XYXNtRW50cnlwb2ludExvYWRMb2NhdGlvbiB9
CiB7IH0KIAotdm9pZCBXZWJBc3NlbWJseUZ1bmN0aW9uOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCog
Y2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgor
dm9pZCBXZWJBc3NlbWJseUZ1bmN0aW9uOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGws
IFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgV2ViQXNzZW1ibHlGdW5jdGlvbiogdGhpc09iamVj
dCA9IGpzQ2FzdDxXZWJBc3NlbWJseUZ1bmN0aW9uKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09C
SkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNDYxLDYgKzQ2Miw4IEBAIHZv
aWQgV2ViQXNzZW1ibHlGdW5jdGlvbjo6dmlzaXRDaGlsZHJlbigKICAgICB2aXNpdG9yLmFwcGVu
ZCh0aGlzT2JqZWN0LT5tX2pzVG9XYXNtSUNDYWxsZWUpOwogfQogCitERUZJTkVfVklTSVRfQ0hJ
TERSRU4oV2ViQXNzZW1ibHlGdW5jdGlvbik7CisKIHZvaWQgV2ViQXNzZW1ibHlGdW5jdGlvbjo6
ZGVzdHJveShKU0NlbGwqIGNlbGwpCiB7CiAgICAgc3RhdGljX2Nhc3Q8V2ViQXNzZW1ibHlGdW5j
dGlvbio+KGNlbGwpLT5XZWJBc3NlbWJseUZ1bmN0aW9uOjp+V2ViQXNzZW1ibHlGdW5jdGlvbigp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlv
bi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2Vt
Ymx5RnVuY3Rpb24uaAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC05MCw3ICs5
MCw3IEBAIHB1YmxpYzoKICAgICBXYXNtOjpJbnN0YW5jZSogcHJldmlvdXNJbnN0YW5jZShDYWxs
RnJhbWUqKTsKIAogcHJpdmF0ZToKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2Vs
bCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKICAgICBXZWJB
c3NlbWJseUZ1bmN0aW9uKFZNJiwgTmF0aXZlRXhlY3V0YWJsZSosIEpTR2xvYmFsT2JqZWN0Kiwg
U3RydWN0dXJlKiwgV2FzbTo6Q2FsbGVlJiBqc0VudHJ5cG9pbnQsIFdhc21Ub1dhc21JbXBvcnRh
YmxlRnVuY3Rpb246OkxvYWRMb2NhdGlvbiBlbnRyeXBvaW50TG9hZExvY2F0aW9uLCBXYXNtOjpT
aWduYXR1cmVJbmRleCk7CiAKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRh
Zz4ganNDYWxsRW50cnlwb2ludFNsb3coKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb25CYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uQmFzZS5jcHAJKHJldmlz
aW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5
RnVuY3Rpb25CYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEsNyArNDEsOCBAQCBXZWJBc3Nl
bWJseUZ1bmN0aW9uQmFzZTo6V2ViQXNzZW1ibHlGdW5jCiAgICAgOiBCYXNlKHZtLCBleGVjdXRh
YmxlLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSkKIHsgfQogCi12b2lkIFdlYkFzc2VtYmx5RnVu
Y3Rpb25CYXNlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0
b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBXZWJBc3NlbWJseUZ1bmN0aW9u
QmFzZTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQog
ewogICAgIFdlYkFzc2VtYmx5RnVuY3Rpb25CYXNlKiB0aGlzT2JqZWN0ID0ganNDYXN0PFdlYkFz
c2VtYmx5RnVuY3Rpb25CYXNlKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklU
Uyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNDksNiArNTAsOCBAQCB2b2lkIFdlYkFzc2VtYmx5
RnVuY3Rpb25CYXNlOjp2aXNpdENoaWxkCiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+
bV9pbnN0YW5jZSk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihXZWJBc3NlbWJseUZ1bmN0
aW9uQmFzZSk7CisKIHZvaWQgV2ViQXNzZW1ibHlGdW5jdGlvbkJhc2U6OmZpbmlzaENyZWF0aW9u
KFZNJiB2bSwgTmF0aXZlRXhlY3V0YWJsZSogZXhlY3V0YWJsZSwgdW5zaWduZWQgbGVuZ3RoLCBj
b25zdCBTdHJpbmcmIG5hbWUsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogaW5zdGFuY2UpCiB7CiAg
ICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0sIGV4ZWN1dGFibGUsIGxlbmd0aCwgbmFtZSk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uQmFz
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2Vt
Ymx5RnVuY3Rpb25CYXNlLmgJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb25CYXNlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTQ2LDcgKzQ2LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZJbnN0
YW5jZSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihXZWJBc3NlbWJseUZ1bmN0aW9uQmFzZSwg
bV9pbnN0YW5jZSk7IH0KIAogcHJvdGVjdGVkOgotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwog
ICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBOYXRpdmVFeGVjdXRhYmxlKiwgdW5zaWduZWQg
bGVuZ3RoLCBjb25zdCBTdHJpbmcmIG5hbWUsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSopOwogICAg
IFdlYkFzc2VtYmx5RnVuY3Rpb25CYXNlKFZNJiwgTmF0aXZlRXhlY3V0YWJsZSosIEpTR2xvYmFs
T2JqZWN0KiwgU3RydWN0dXJlKik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZVJlY29yZC5jcHAJKHJldmlzaW9u
IDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9k
dWxlUmVjb3JkLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzcsNyArNzcsOCBAQCB2b2lkIFdlYkFz
c2VtYmx5TW9kdWxlUmVjb3JkOjpmaW5pc2hDcmVhCiAgICAgfQogfQogCi12b2lkIFdlYkFzc2Vt
Ymx5TW9kdWxlUmVjb3JkOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3Im
IHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBXZWJBc3NlbWJseU1v
ZHVsZVJlY29yZDo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNp
dG9yKQogewogICAgIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkKiB0aGlzT2JqZWN0ID0ganNDYXN0
PFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9J
TkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtODcsNiArODgsOCBAQCB2b2lkIFdlYkFz
c2VtYmx5TW9kdWxlUmVjb3JkOjp2aXNpdENoaWxkCiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09i
amVjdC0+bV9leHBvcnRzT2JqZWN0KTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKFdlYkFz
c2VtYmx5TW9kdWxlUmVjb3JkKTsKKwogdm9pZCBXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6cHJl
cGFyZUxpbmsoVk0mIHZtLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGluc3RhbmNlKQogewogICAg
IFJFTEVBU0VfQVNTRVJUKCFtX2luc3RhbmNlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuaAkocmV2aXNp
b24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlN
b2R1bGVSZWNvcmQuaAkod29ya2luZyBjb3B5KQpAQCAtNjksNyArNjksNyBAQCBwcml2YXRlOgog
CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0dsb2JhbE9iamVjdCosIFZNJiwgY29uc3QgV2Fz
bTo6TW9kdWxlSW5mb3JtYXRpb24mKTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4o
SlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAg
ICAgV3JpdGVCYXJyaWVyPEpTV2ViQXNzZW1ibHlJbnN0YW5jZT4gbV9pbnN0YW5jZTsKICAgICBX
cml0ZUJhcnJpZXI8SlNPYmplY3Q+IG1fc3RhcnRGdW5jdGlvbjsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVdyYXBwZXJG
dW5jdGlvbi5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL2pzL1dlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NjcsNyArNjcsOCBAQCBTdHJ1Y3R1cmUqIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uOjpjCiAg
ICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwg
VHlwZUluZm8oSlNGdW5jdGlvblR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKIH0KIAot
dm9pZCBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNl
bGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3Zv
aWQgV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb246OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCog
Y2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlv
biogdGhpc09iamVjdCA9IGpzQ2FzdDxXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbio+KGNlbGwp
OwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAg
LTc2LDYgKzc3LDggQEAgdm9pZCBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbjo6dmlzaXRDaAog
ICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fZnVuY3Rpb24pOwogfQogCitERUZJTkVf
VklTSVRfQ0hJTERSRU4oV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24pOworCiBKU0NfREVGSU5F
X0hPU1RfRlVOQ1RJT04oY2FsbFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLCAoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpKQogewogICAgIFZNJiB2
bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL1dlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uaAkocmV2aXNp
b24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlX
cmFwcGVyRnVuY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtNTksNyArNTksNyBAQCBwdWJsaWM6
CiBwcml2YXRlOgogICAgIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uKFZNJiwgTmF0aXZlRXhl
Y3V0YWJsZSosIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKiwgV2FzbVRvV2FzbUltcG9ydGFi
bGVGdW5jdGlvbik7CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIE5hdGl2ZUV4ZWN1dGFi
bGUqLCB1bnNpZ25lZCBsZW5ndGgsIGNvbnN0IFN0cmluZyYgbmFtZSwgSlNPYmplY3QqLCBKU1dl
YkFzc2VtYmx5SW5zdGFuY2UqKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2Vs
bCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIFdy
aXRlQmFycmllcjxKU09iamVjdD4gbV9mdW5jdGlvbjsKICAgICAvLyBJdCdzIHNhZmUgdG8ganVz
dCBob2xkIHRoZSByYXcgV2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbiBiZWNhdXNlIHdlIGhh
dmUgYSByZWZlcmVuY2UKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
Qk9iamVjdFN0b3JlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNzI4LDcgKzcyOCw5IEBAIHZvaWQgSURCT2JqZWN0U3RvcmU6OnJvbGxiYWNrRm9yVmVy
c2lvbkMKICAgICB9CiB9CiAKLXZvaWQgSURCT2JqZWN0U3RvcmU6OnZpc2l0UmVmZXJlbmNlZElu
ZGV4ZXMoU2xvdFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0CisvL3ZvaWQgSURCT2JqZWN0U3RvcmU6
OnZpc2l0UmVmZXJlbmNlZEluZGV4ZXMoU2xvdFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0Cit0ZW1w
bGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBJREJPYmplY3RTdG9yZTo6dmlzaXRSZWZlcmVu
Y2VkSW5kZXhlcyhWaXNpdG9yJiB2aXNpdG9yKSBjb25zdAogewogICAgIExvY2tlcjxMb2NrPiBs
b2NrZXIobV9yZWZlcmVuY2VkSW5kZXhMb2NrKTsKICAgICBmb3IgKGF1dG8mIGluZGV4IDogbV9y
ZWZlcmVuY2VkSW5kZXhlcy52YWx1ZXMoKSkKQEAgLTczNyw2ICs3MzksOSBAQCB2b2lkIElEQk9i
amVjdFN0b3JlOjp2aXNpdFJlZmVyZW5jZWRJbmRlCiAgICAgICAgIHZpc2l0b3IuYWRkT3BhcXVl
Um9vdChpbmRleC5nZXQoKSk7CiB9CiAKK3RlbXBsYXRlIHZvaWQgSURCT2JqZWN0U3RvcmU6OnZp
c2l0UmVmZXJlbmNlZEluZGV4ZXMoQWJzdHJhY3RTbG90VmlzaXRvciYpIGNvbnN0OwordGVtcGxh
dGUgdm9pZCBJREJPYmplY3RTdG9yZTo6dmlzaXRSZWZlcmVuY2VkSW5kZXhlcyhTbG90VmlzaXRv
ciYpIGNvbnN0OworCiB2b2lkIElEQk9iamVjdFN0b3JlOjpyZW5hbWVSZWZlcmVuY2VkSW5kZXgo
SURCSW5kZXgmIGluZGV4LCBjb25zdCBTdHJpbmcmIG5ld05hbWUpCiB7CiAgICAgTE9HKEluZGV4
ZWREQiwgIklEQk9iamVjdFN0b3JlOjpyZW5hbWVSZWZlcmVuY2VkSW5kZXgiKTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuaAko
cmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
T2JqZWN0U3RvcmUuaAkod29ya2luZyBjb3B5KQpAQCAtMTA5LDcgKzEwOSw4IEBAIHB1YmxpYzoK
ICAgICB2b2lkIHJlZigpOwogICAgIHZvaWQgZGVyZWYoKTsKIAotICAgIHZvaWQgdmlzaXRSZWZl
cmVuY2VkSW5kZXhlcyhKU0M6OlNsb3RWaXNpdG9yJikgY29uc3Q7CisvLyAgICB2b2lkIHZpc2l0
UmVmZXJlbmNlZEluZGV4ZXMoSlNDOjpTbG90VmlzaXRvciYpIGNvbnN0OworICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgdmlzaXRSZWZlcmVuY2VkSW5kZXhlcyhWaXNpdG9yJikg
Y29uc3Q7CiAgICAgdm9pZCByZW5hbWVSZWZlcmVuY2VkSW5kZXgoSURCSW5kZXgmLCBjb25zdCBT
dHJpbmcmIG5ld05hbWUpOwogCiBwcml2YXRlOgpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmNwcAkocmV2aXNpb24gMjcxNDQz
KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb24uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xNDU1LDcgKzE0NTUsOCBAQCB2b2lkIElEQlRyYW5zYWN0aW9u
Ojpjb25uZWN0aW9uQ2xvc2VkRnJvCiAgICAgZmlyZU9uQWJvcnQoKTsKIH0KIAotdm9pZCBJREJU
cmFuc2FjdGlvbjo6dmlzaXRSZWZlcmVuY2VkT2JqZWN0U3RvcmVzKEpTQzo6U2xvdFZpc2l0b3Im
IHZpc2l0b3IpIGNvbnN0Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBJREJUcmFu
c2FjdGlvbjo6dmlzaXRSZWZlcmVuY2VkT2JqZWN0U3RvcmVzKFZpc2l0b3ImIHZpc2l0b3IpIGNv
bnN0CiB7CiAgICAgTG9ja2VyPExvY2s+IGxvY2tlcihtX3JlZmVyZW5jZWRPYmplY3RTdG9yZUxv
Y2spOwogICAgIGZvciAoYXV0byYgb2JqZWN0U3RvcmUgOiBtX3JlZmVyZW5jZWRPYmplY3RTdG9y
ZXMudmFsdWVzKCkpCkBAIC0xNDY0LDYgKzE0NjUsOSBAQCB2b2lkIElEQlRyYW5zYWN0aW9uOjp2
aXNpdFJlZmVyZW5jZWRPYmplCiAgICAgICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChvYmplY3RT
dG9yZS5nZXQoKSk7CiB9CiAKK3RlbXBsYXRlIHZvaWQgSURCVHJhbnNhY3Rpb246OnZpc2l0UmVm
ZXJlbmNlZE9iamVjdFN0b3JlcyhKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpIGNv
bnN0OwordGVtcGxhdGUgdm9pZCBJREJUcmFuc2FjdGlvbjo6dmlzaXRSZWZlcmVuY2VkT2JqZWN0
U3RvcmVzKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0OworCiB2b2lkIElEQlRyYW5z
YWN0aW9uOjpoYW5kbGVQZW5kaW5nT3BlcmF0aW9ucygpCiB7CiAgICAgQVNTRVJUKGNhbkN1cnJl
bnRUaHJlYWRBY2Nlc3NUaHJlYWRMb2NhbERhdGEobV9kYXRhYmFzZS0+b3JpZ2luVGhyZWFkKCkp
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9u
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJh
bnNhY3Rpb24uaAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCVHJhbnNhY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMTQ5LDcgKzE0OSw4
IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgY29ubmVjdGlvbkNsb3NlZEZyb21TZXJ2ZXIoY29uc3Qg
SURCRXJyb3ImKTsKIAotICAgIHZvaWQgdmlzaXRSZWZlcmVuY2VkT2JqZWN0U3RvcmVzKEpTQzo6
U2xvdFZpc2l0b3ImKSBjb25zdDsKKy8vICAgIHZvaWQgdmlzaXRSZWZlcmVuY2VkT2JqZWN0U3Rv
cmVzKEpTQzo6U2xvdFZpc2l0b3ImKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNp
dG9yPiB2b2lkIHZpc2l0UmVmZXJlbmNlZE9iamVjdFN0b3JlcyhWaXNpdG9yJikgY29uc3Q7CiAK
ICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgc3RkOjphdG9taWM8dW5zaWduZWQ+IG51bWJlck9m
SURCVHJhbnNhY3Rpb25zOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlv
L0F1ZGlvQnVmZmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmF1ZGlvL0F1ZGlvQnVmZmVyLmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0J1ZmZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1
NCwxMiArMTU0LDE3IEBAIEV4Y2VwdGlvbk9yPEpTQzo6SlNWYWx1ZT4gQXVkaW9CdWZmZXI6OmcK
ICAgICByZXR1cm4gY29uc3RydWN0SlNBcnJheSgpOwogfQogCi12b2lkIEF1ZGlvQnVmZmVyOjp2
aXNpdENoYW5uZWxXcmFwcGVycyhKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy92b2lkIEF1
ZGlvQnVmZmVyOjp2aXNpdENoYW5uZWxXcmFwcGVycyhKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9y
KQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgQXVkaW9CdWZmZXI6OnZpc2l0Q2hh
bm5lbFdyYXBwZXJzKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgZm9yIChhdXRvJiBjaGFubmVs
V3JhcHBlciA6IG1fY2hhbm5lbFdyYXBwZXJzKQogICAgICAgICBjaGFubmVsV3JhcHBlci52aXNp
dCh2aXNpdG9yKTsKIH0KIAordGVtcGxhdGUgdm9pZCBBdWRpb0J1ZmZlcjo6dmlzaXRDaGFubmVs
V3JhcHBlcnMoSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEF1ZGlv
QnVmZmVyOjp2aXNpdENoYW5uZWxXcmFwcGVycyhKU0M6OlNsb3RWaXNpdG9yJik7CisKIFJlZlB0
cjxGbG9hdDMyQXJyYXk+IEF1ZGlvQnVmZmVyOjpjaGFubmVsRGF0YSh1bnNpZ25lZCBjaGFubmVs
SW5kZXgpCiB7CiAgICAgaWYgKGNoYW5uZWxJbmRleCA+PSBtX2NoYW5uZWxzLnNpemUoKSkKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9CdWZmZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQnVmZmVyLmgJKHJl
dmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9C
dWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNzUsNyArNzUsOCBAQCBwdWJsaWM6CiAKICAgICBz
aXplX3QgbWVtb3J5Q29zdCgpIGNvbnN0OwogCi0gICAgdm9pZCB2aXNpdENoYW5uZWxXcmFwcGVy
cyhKU0M6OlNsb3RWaXNpdG9yJik7CisvLyAgICB2b2lkIHZpc2l0Q2hhbm5lbFdyYXBwZXJzKEpT
Qzo6U2xvdFZpc2l0b3ImKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIHZp
c2l0Q2hhbm5lbFdyYXBwZXJzKFZpc2l0b3ImKTsKICAgICAKIHByaXZhdGU6CiAgICAgQXVkaW9C
dWZmZXIodW5zaWduZWQgbnVtYmVyT2ZDaGFubmVscywgc2l6ZV90IGxlbmd0aCwgZmxvYXQgc2Ft
cGxlUmF0ZSwgTGVnYWN5UHJldmVudERldGFjaGluZyA9IExlZ2FjeVByZXZlbnREZXRhY2hpbmc6
Ok5vKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0RPTUdDT3V0cHV0Q29uc3Ry
YWludC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvRE9NR0NP
dXRwdXRDb25zdHJhaW50LmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvRE9NR0NPdXRwdXRDb25zdHJhaW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDksNyArNDksNyBAQCBET01HQ091dHB1dENvbnN0cmFpbnQ6On5ET01HQ091dHB1dENvbnN0CiB7
CiB9CiAKLXZvaWQgRE9NR0NPdXRwdXRDb25zdHJhaW50OjpleGVjdXRlSW1wbChTbG90VmlzaXRv
ciYgdmlzaXRvcikKK3ZvaWQgRE9NR0NPdXRwdXRDb25zdHJhaW50OjpleGVjdXRlSW1wbChBYnN0
cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEhlYXAmIGhlYXAgPSBtX3ZtLmhlYXA7
CiAgICAgCkBAIC02MCw4ICs2MCw4IEBAIHZvaWQgRE9NR0NPdXRwdXRDb25zdHJhaW50OjpleGVj
dXRlSW1wbCgKICAgICAKICAgICBtX2NsaWVudERhdGEuZm9yRWFjaE91dHB1dENvbnN0cmFpbnRT
cGFjZSgKICAgICAgICAgWyZdIChTdWJzcGFjZSYgc3Vic3BhY2UpIHsKLSAgICAgICAgICAgIGF1
dG8gZnVuYyA9IFtdIChTbG90VmlzaXRvciYgdmlzaXRvciwgSGVhcENlbGwqIGhlYXBDZWxsLCBI
ZWFwQ2VsbDo6S2luZCkgewotICAgICAgICAgICAgICAgIFNldFJvb3RNYXJrUmVhc29uU2NvcGUg
cm9vdFNjb3BlKHZpc2l0b3IsIFNsb3RWaXNpdG9yOjpSb290TWFya1JlYXNvbjo6RE9NR0NPdXRw
dXQpOworICAgICAgICAgICAgYXV0byBmdW5jID0gW10gKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZp
c2l0b3IsIEhlYXBDZWxsKiBoZWFwQ2VsbCwgSGVhcENlbGw6OktpbmQpIHsKKyAgICAgICAgICAg
ICAgICBTZXRSb290TWFya1JlYXNvblNjb3BlIHJvb3RTY29wZSh2aXNpdG9yLCBBYnN0cmFjdFNs
b3RWaXNpdG9yOjpSb290TWFya1JlYXNvbjo6RE9NR0NPdXRwdXQpOwogICAgICAgICAgICAgICAg
IEpTQ2VsbCogY2VsbCA9IHN0YXRpY19jYXN0PEpTQ2VsbCo+KGhlYXBDZWxsKTsKICAgICAgICAg
ICAgICAgICBjZWxsLT5tZXRob2RUYWJsZSh2aXNpdG9yLnZtKCkpLT52aXNpdE91dHB1dENvbnN0
cmFpbnRzKGNlbGwsIHZpc2l0b3IpOwogICAgICAgICAgICAgfTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0RPTUdDT3V0cHV0Q29uc3RyYWludC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0RPTUdDT3V0cHV0Q29uc3RyYWludC5oCShyZXZpc2lv
biAyNzE0NDMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9ET01HQ091dHB1dENvbnN0
cmFpbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNDIsNyArNDIsNyBAQCBwdWJsaWM6CiAgICAgfkRP
TUdDT3V0cHV0Q29uc3RyYWludCgpOwogICAgIAogcHJvdGVjdGVkOgotICAgIHZvaWQgZXhlY3V0
ZUltcGwoSlNDOjpTbG90VmlzaXRvciYpIG92ZXJyaWRlOworICAgIHZvaWQgZXhlY3V0ZUltcGwo
SlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJikgb3ZlcnJpZGU7CiAKIHByaXZhdGU6CiAgICAgSlND
OjpWTSYgbV92bTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQWJvcnRDb250
cm9sbGVyQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0Fib3J0Q29udHJvbGxlckN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQWJvcnRDb250cm9sbGVyQ3VzdG9tLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjgsOSArMjgsMTQgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lk
IEpTQWJvcnRDb250cm9sbGVyOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNp
dG9yJiB2aXNpdG9yKQorLy92b2lkIEpTQWJvcnRDb250cm9sbGVyOjp2aXNpdEFkZGl0aW9uYWxD
aGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlz
aXRvcj4KK3ZvaWQgSlNBYm9ydENvbnRyb2xsZXI6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZp
c2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KCZ3cmFwcGVkKCku
c2lnbmFsKCkpOwogfQogCit0ZW1wbGF0ZSB2b2lkIEpTQWJvcnRDb250cm9sbGVyOjp2aXNpdEFk
ZGl0aW9uYWxDaGlsZHJlbihKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZv
aWQgSlNBYm9ydENvbnRyb2xsZXI6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZp
c2l0b3ImKTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNBYm9ydFNpZ25hbEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNBYm9ydFNpZ25hbEN1c3RvbS5jcHAJKHJldmlzaW9uIDI3
MTQ0MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQWJvcnRTaWduYWxDdXN0b20u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotYm9vbCBKU0Fib3J0U2lnbmFsT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3Rz
KEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgSlNDOjpTbG90VmlzaXRv
ciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikKK2Jvb2wgSlNBYm9ydFNpZ25hbE93bmVy
Ojppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhh
bmRsZSwgdm9pZCosIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hh
cioqIHJlYXNvbikKIHsKICAgICBhdXRvJiBhYm9ydFNpZ25hbCA9IEpTQzo6anNDYXN0PEpTQWJv
cnRTaWduYWwqPihoYW5kbGUuc2xvdCgpLT5hc0NlbGwoKSktPndyYXBwZWQoKTsKICAgICBpZiAo
YWJvcnRTaWduYWwuaXNGaXJpbmdFdmVudExpc3RlbmVycygpKSB7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0F0dHJDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXR0ckN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXR0ckN1c3RvbS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTMzLDEwICszMywxNSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgSlNB
dHRyOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQor
Ly92b2lkIEpTQXR0cjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYg
dmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTQXR0cjo6dmlzaXRB
ZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBpZiAoRWxlbWVudCog
ZWxlbWVudCA9IHdyYXBwZWQoKS5vd25lckVsZW1lbnQoKSkKICAgICAgICAgdmlzaXRvci5hZGRP
cGFxdWVSb290KHJvb3QoZWxlbWVudCkpOwogfQogCit0ZW1wbGF0ZSB2b2lkIEpTQXR0cjo6dmlz
aXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0
ZSB2b2lkIEpTQXR0cjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYp
OworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0F1ZGlvQnVmZmVyQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0F1ZGlvQnVmZmVyQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcxNDQzKQor
KysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNBdWRpb0J1ZmZlckN1c3RvbS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTMxLDExICszMSwxNiBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogdXNp
bmcgbmFtZXNwYWNlIEpTQzsKIAotdm9pZCBKU0F1ZGlvQnVmZmVyOjp2aXNpdEFkZGl0aW9uYWxD
aGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vdm9pZCBKU0F1ZGlvQnVmZmVyOjp2aXNp
dEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVu
YW1lIFZpc2l0b3I+Cit2b2lkIEpTQXVkaW9CdWZmZXI6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVu
KFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgd3JhcHBlZCgpLnZpc2l0Q2hhbm5lbFdyYXBwZXJz
KHZpc2l0b3IpOwogfQogCit0ZW1wbGF0ZSB2b2lkIEpTQXVkaW9CdWZmZXI6OnZpc2l0QWRkaXRp
b25hbENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNBdWRp
b0J1ZmZlcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKKwogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQl9BVURJTykKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXVkaW9UcmFja0N1c3RvbS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNBdWRpb1RyYWNrQ3VzdG9tLmNwcAko
cmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNBdWRpb1Ry
YWNrQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsMTEgKzM1LDE2IEBACiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCi12b2lkIEpTQXVkaW9UcmFjazo6
dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3ZvaWQgSlNB
dWRpb1RyYWNrOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikK
K3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTQXVkaW9UcmFjazo6dmlzaXRBZGRp
dGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB2aXNpdG9yLmFkZE9wYXF1
ZVJvb3Qocm9vdCgmd3JhcHBlZCgpKSk7CiB9CiAKK3RlbXBsYXRlIHZvaWQgSlNBdWRpb1RyYWNr
Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0
ZSB2b2lkIEpTQXVkaW9UcmFjazo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3Im
KTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTQXVkaW9UcmFja0xpc3RDdXN0b20uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXVkaW9UcmFja0xpc3RDdXN0b20uY3BwCShy
ZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0F1ZGlvVHJh
Y2tMaXN0Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsMTEgKzM2LDE2IEBACiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCi12b2lkIEpTQXVkaW9UcmFj
a0xpc3Q6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy92
b2lkIEpTQXVkaW9UcmFja0xpc3Q6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9y
JiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNBdWRpb1RyYWNr
TGlzdDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB2
aXNpdG9yLmFkZE9wYXF1ZVJvb3Qocm9vdCh3cmFwcGVkKCkuZWxlbWVudCgpKSk7CiB9CiAKK3Rl
bXBsYXRlIHZvaWQgSlNBdWRpb1RyYWNrTGlzdDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oQWJz
dHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU0F1ZGlvVHJhY2tMaXN0Ojp2aXNp
dEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYpOworCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCiAKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNBdWRpb1dv
cmtsZXRQcm9jZXNzb3JDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTQXVkaW9Xb3JrbGV0UHJvY2Vzc29yQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcx
NDQzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNBdWRpb1dvcmtsZXRQcm9jZXNz
b3JDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw5IEBACiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCi12b2lkIEpTQXVkaW9Xb3JrbGV0UHJv
Y2Vzc29yOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKKy8v
dm9pZCBKU0F1ZGlvV29ya2xldFByb2Nlc3Nvcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xv
dFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0F1
ZGlvV29ya2xldFByb2Nlc3Nvcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlz
aXRvcikKIHsKICAgICBhdXRvJiBwcm9jZXNzb3IgPSB3cmFwcGVkKCk7CiAgICAgcHJvY2Vzc29y
LmpzSW5wdXRzV3JhcHBlcigpLnZpc2l0KHZpc2l0b3IpOwpAQCAtMzksNiArNDEsOSBAQCB2b2lk
IEpTQXVkaW9Xb3JrbGV0UHJvY2Vzc29yOjp2aXNpdEFkZGl0CiAgICAgcHJvY2Vzc29yLmpzUGFy
YW1WYWx1ZXNXcmFwcGVyKCkudmlzaXQodmlzaXRvcik7CiB9CiAKK3RlbXBsYXRlIHZvaWQgSlNB
dWRpb1dvcmtsZXRQcm9jZXNzb3I6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEFic3RyYWN0U2xv
dFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNBdWRpb1dvcmtsZXRQcm9jZXNzb3I6OnZpc2l0
QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKIAogI2VuZGlmIC8vIEVOQUJMRShXRUJfQVVESU8pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0NTU1J1bGVDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTQ1NTUnVsZUN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ1NTUnVsZUN1c3RvbS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTUxLDExICs1MSwxNiBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogdXNpbmcgbmFt
ZXNwYWNlIEpTQzsKIAotdm9pZCBKU0NTU1J1bGU6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQorLy92b2lkIEpTQ1NTUnVsZTo6dmlzaXRBZGRpdGlvbmFsQ2hp
bGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgor
dm9pZCBKU0NTU1J1bGU6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3Ip
CiB7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHJvb3QoJndyYXBwZWQoKSkpOwogfQogCit0
ZW1wbGF0ZSB2b2lkIEpTQ1NTUnVsZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oQWJzdHJhY3RT
bG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU0NTU1J1bGU6OnZpc2l0QWRkaXRpb25hbENo
aWxkcmVuKFNsb3RWaXNpdG9yJik7CisKIEpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0dsb2Jh
bE9iamVjdCosIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZjxDU1NSdWxlPiYm
IHJ1bGUpCiB7CiAgICAgc3dpdGNoIChydWxlLT50eXBlKCkpIHsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTQ1NTUnVsZUxpc3RDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ1NTUnVsZUxpc3RDdXN0b20uY3BwCShyZXZpc2lv
biAyNzE0NDMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NTU1J1bGVMaXN0Q3Vz
dG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsNyBAQAogbmFtZXNwYWNlIFdlYkNv
cmUgewogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAotYm9vbCBKU0NTU1J1bGVMaXN0T3duZXI6Omlz
UmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxl
LCB2b2lkKiwgU2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCitib29s
IEpTQ1NTUnVsZUxpc3RPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5k
bGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNp
dG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQogewogICAgIEpTQ1NTUnVsZUxpc3QqIGpzQ1NTUnVs
ZUxpc3QgPSBqc0Nhc3Q8SlNDU1NSdWxlTGlzdCo+KGhhbmRsZS5zbG90KCktPmFzQ2VsbCgpKTsK
ICAgICBpZiAoIWpzQ1NTUnVsZUxpc3QtPmhhc0N1c3RvbVByb3BlcnRpZXMoanNDU1NSdWxlTGlz
dC0+dm0oKSkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NTU1N0eWxlRGVj
bGFyYXRpb25DdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTQ1NTU3R5bGVEZWNsYXJhdGlvbkN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ1NTU3R5bGVEZWNsYXJhdGlvbkN1c3RvbS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTUxLDkgKzUxLDE0IEBAIHZvaWQqIHJvb3QoQ1NTU3R5bGVE
ZWNsYXJhdGlvbiogc3R5bGUpCiAgICAgcmV0dXJuIHN0eWxlOwogfQogCi12b2lkIEpTQ1NTU3R5
bGVEZWNsYXJhdGlvbjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0
b3IpCisvL3ZvaWQgSlNDU1NTdHlsZURlY2xhcmF0aW9uOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJl
bihTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lk
IEpTQ1NTU3R5bGVEZWNsYXJhdGlvbjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYg
dmlzaXRvcikKIHsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qocm9vdCgmd3JhcHBlZCgpKSk7
CiB9CiAKK3RlbXBsYXRlIHZvaWQgSlNDU1NTdHlsZURlY2xhcmF0aW9uOjp2aXNpdEFkZGl0aW9u
YWxDaGlsZHJlbihBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTQ1NTU3R5
bGVEZWNsYXJhdGlvbjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKKwog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNDYWxsYmFja0RhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTQ2FsbGJhY2tEYXRhLmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNDYWxsYmFja0RhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NSwx
MiArOTUsMTYgQEAgSlNWYWx1ZSBKU0NhbGxiYWNrRGF0YTo6aW52b2tlQ2FsbGJhY2soSgogICAg
IHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQgSlNDYWxsYmFja0RhdGFXZWFrOjp2aXNpdEpTRnVu
Y3Rpb24oSlNDOjpTbG90VmlzaXRvciYgdmlzdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRv
cj4KK3ZvaWQgSlNDYWxsYmFja0RhdGFXZWFrOjp2aXNpdEpTRnVuY3Rpb24oVmlzaXRvciYgdmlz
aXRvcikKIHsKLSAgICB2aXN0b3IuYXBwZW5kKG1fY2FsbGJhY2spOworICAgIHZpc2l0b3IuYXBw
ZW5kKG1fY2FsbGJhY2spOwogfQogCi1ib29sIEpTQ2FsbGJhY2tEYXRhV2Vhazo6V2Vha093bmVy
Ojppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2
b2lkKiBjb250ZXh0LCBTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikK
K3RlbXBsYXRlIHZvaWQgSlNDYWxsYmFja0RhdGFXZWFrOjp2aXNpdEpTRnVuY3Rpb24oSlNDOjpB
YnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTQ2FsbGJhY2tEYXRhV2Vhazo6
dmlzaXRKU0Z1bmN0aW9uKEpTQzo6U2xvdFZpc2l0b3ImKTsKKworYm9vbCBKU0NhbGxiYWNrRGF0
YVdlYWs6OldlYWtPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8
SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCwgQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRv
ciwgY29uc3QgY2hhcioqIHJlYXNvbikKIHsKICAgICBpZiAoVU5MSUtFTFkocmVhc29uKSkKICAg
ICAgICAgKnJlYXNvbiA9ICJDb250ZXh0IGlzIG9wYXF1ZSByb290IjsgLy8gRklYTUU6IHdoYXQg
aXMgdGhlIGNvbnRleHQuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NhbGxi
YWNrRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2Fs
bGJhY2tEYXRhLmgJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTQ2FsbGJhY2tEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTExMywxMSArMTEzLDEyIEBA
IHB1YmxpYzoKICAgICAgICAgcmV0dXJuIEpTQ2FsbGJhY2tEYXRhOjppbnZva2VDYWxsYmFjaygq
Z2xvYmFsT2JqZWN0LCBjYWxsYmFjaygpLCB0aGlzVmFsdWUsIGFyZ3MsIGNhbGxiYWNrVHlwZSwg
ZnVuY3Rpb25OYW1lLCByZXR1cm5lZEV4Y2VwdGlvbik7CiAgICAgfQogCi0gICAgdm9pZCB2aXNp
dEpTRnVuY3Rpb24oSlNDOjpTbG90VmlzaXRvciYpOworLy8gICAgdm9pZCB2aXNpdEpTRnVuY3Rp
b24oSlNDOjpTbG90VmlzaXRvciYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZv
aWQgdmlzaXRKU0Z1bmN0aW9uKFZpc2l0b3ImKTsKIAogcHJpdmF0ZToKICAgICBjbGFzcyBXZWFr
T3duZXIgOiBwdWJsaWMgSlNDOjpXZWFrSGFuZGxlT3duZXIgewotICAgICAgICBib29sIGlzUmVh
Y2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNv
bnRleHQsIEpTQzo6U2xvdFZpc2l0b3ImLCBjb25zdCBjaGFyKiopIG92ZXJyaWRlOworICAgICAg
ICBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93
bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYsIGNvbnN0IGNoYXIq
Kikgb3ZlcnJpZGU7CiAgICAgfTsKICAgICBXZWFrT3duZXIgbV93ZWFrT3duZXI7CiAgICAgSlND
OjpXZWFrPEpTQzo6SlNPYmplY3Q+IG1fY2FsbGJhY2s7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREN1c3RvbS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0
MkRDdXN0b20uY3BwCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI0LDcgKzI0LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1ib29sIEpTQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJET3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6
SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgSlNDOjpTbG90VmlzaXRvciYgdmlz
aXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikKK2Jvb2wgSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0
MkRPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtu
b3duPiBoYW5kbGUsIHZvaWQqLCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNv
bnN0IGNoYXIqKiByZWFzb24pCiB7CiAgICAgaWYgKFVOTElLRUxZKHJlYXNvbikpCiAgICAgICAg
ICpyZWFzb24gPSAiQ2FudmFzIGlzIG9wYXF1ZSByb290IjsKQEAgLTM0LDkgKzM0LDE0IEBAIGJv
b2wgSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRPd25lcjo6aXMKICAgICByZXR1cm4gdmlzaXRv
ci5jb250YWluc09wYXF1ZVJvb3Qocm9vdCk7CiB9CiAKLXZvaWQgSlNDYW52YXNSZW5kZXJpbmdD
b250ZXh0MkQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0
b3IpCisvL3ZvaWQgSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnZpc2l0QWRkaXRpb25hbENo
aWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNp
dG9yPgordm9pZCBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6dmlzaXRBZGRpdGlvbmFsQ2hp
bGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qocm9v
dCh3cmFwcGVkKCkuY2FudmFzKCkpKTsKIH0KIAordGVtcGxhdGUgdm9pZCBKU0NhbnZhc1JlbmRl
cmluZ0NvbnRleHQyRDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpBYnN0cmFjdFNsb3RW
aXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjp2aXNp
dEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJik7CisKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9tRXZlbnRD
dXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3Vz
dG9tRXZlbnRDdXN0b20uY3BwCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0N1c3RvbUV2ZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIs
MTAgKzQyLDE1IEBAIEpTQzo6SlNWYWx1ZSBKU0N1c3RvbUV2ZW50OjpkZXRhaWwoSlNDOjoKICAg
ICB9KTsKIH0KIAotdm9pZCBKU0N1c3RvbUV2ZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihK
U0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy92b2lkIEpTQ3VzdG9tRXZlbnQ6OnZpc2l0QWRk
aXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBl
bmFtZSBWaXNpdG9yPgordm9pZCBKU0N1c3RvbUV2ZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJl
bihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHdyYXBwZWQoKS5kZXRhaWwoKS52aXNpdCh2aXNp
dG9yKTsKICAgICB3cmFwcGVkKCkuY2FjaGVkRGV0YWlsKCkudmlzaXQodmlzaXRvcik7CiB9CiAK
K3RlbXBsYXRlIHZvaWQgSlNDdXN0b21FdmVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlND
OjpBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTQ3VzdG9tRXZlbnQ6OnZp
c2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImKTsKKwogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CdWlsdGlu
Q29uc3RydWN0b3JCYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0RPTUJ1aWx0aW5Db25zdHJ1Y3RvckJhc2UuY3BwCShyZXZpc2lvbiAyNzE0NDMpCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJ1aWx0aW5Db25zdHJ1Y3RvckJhc2Uu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSw3ICs0NSw4IEBAIHZvaWQgSlNET01CdWlsdGluQ29u
c3RydWN0b3JCYXNlOjpjYWxsRnUKICAgICBKU0M6OmNhbGwoJmxleGljYWxHbG9iYWxPYmplY3Qs
ICZmdW5jdGlvbiwgY2FsbERhdGEsICZ0aGlzT2JqZWN0LCBhcmd1bWVudHMpOwogfQogCi12b2lk
IEpTRE9NQnVpbHRpbkNvbnN0cnVjdG9yQmFzZTo6dmlzaXRDaGlsZHJlbihKU0M6OkpTQ2VsbCog
Y2VsbCwgSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0
b3I+Cit2b2lkIEpTRE9NQnVpbHRpbkNvbnN0cnVjdG9yQmFzZTo6dmlzaXRDaGlsZHJlbkltcGwo
SlNDOjpKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0byogdGhpc09i
amVjdCA9IGpzQ2FzdDxKU0RPTUJ1aWx0aW5Db25zdHJ1Y3RvckJhc2UqPihjZWxsKTsKICAgICBB
U1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC01Myw2ICs1
NCw4IEBAIHZvaWQgSlNET01CdWlsdGluQ29uc3RydWN0b3JCYXNlOjp2aXNpdEMKICAgICB2aXNp
dG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2luaXRpYWxpemVGdW5jdGlvbik7CiB9CiAKK0RFRklO
RV9WSVNJVF9DSElMRFJFTihKU0RPTUJ1aWx0aW5Db25zdHJ1Y3RvckJhc2UpOworCiBKU0M6Oklz
b1N1YnNwYWNlKiBKU0RPTUJ1aWx0aW5Db25zdHJ1Y3RvckJhc2U6OnN1YnNwYWNlRm9ySW1wbChK
U0M6OlZNJiB2bSkKIHsKICAgICByZXR1cm4gJnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4o
dm0uY2xpZW50RGF0YSktPmRvbUJ1aWx0aW5Db25zdHJ1Y3RvclNwYWNlKCk7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJ1aWx0aW5Db25zdHJ1Y3RvckJhc2UuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJ1aWx0aW5Db25zdHJ1
Y3RvckJhc2UuaAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNET01CdWlsdGluQ29uc3RydWN0b3JCYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDcg
KzQyLDcgQEAgcHJvdGVjdGVkOgogICAgIHsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNp
dENoaWxkcmVuKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVf
VklTSVRfQ0hJTERSRU47CiAKICAgICBKU0M6OkpTRnVuY3Rpb24qIGluaXRpYWxpemVGdW5jdGlv
bigpOwogICAgIHZvaWQgc2V0SW5pdGlhbGl6ZUZ1bmN0aW9uKEpTQzo6Vk0mLCBKU0M6OkpTRnVu
Y3Rpb24mKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2Jq
ZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUds
b2JhbE9iamVjdC5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjM1LDcgKzIz
NSw4IEBAIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIEpTRE9NR2xvYmFsT2JqZWMKICAgICByZXR1
cm4gbnVsbHB0cjsKIH0KIAotdm9pZCBKU0RPTUdsb2JhbE9iamVjdDo6dmlzaXRDaGlsZHJlbihK
U0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlz
aXRvcj4KK3ZvaWQgSlNET01HbG9iYWxPYmplY3Q6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCog
Y2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU0RPTUdsb2JhbE9iamVjdCogdGhpc09i
amVjdCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19P
QkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTI1Nyw2ICsyNTgsOCBAQCB2
b2lkIEpTRE9NR2xvYmFsT2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTCiAgICAgdGhpc09iamVjdC0+
bV9idWlsdGluSW50ZXJuYWxGdW5jdGlvbnMudmlzaXQodmlzaXRvcik7CiB9CiAKK0RFRklORV9W
SVNJVF9DSElMRFJFTihKU0RPTUdsb2JhbE9iamVjdCk7CisKIHZvaWQgSlNET01HbG9iYWxPYmpl
Y3Q6OnByb21pc2VSZWplY3Rpb25UcmFja2VyKEpTR2xvYmFsT2JqZWN0KiBqc0dsb2JhbE9iamVj
dCwgSlNQcm9taXNlKiBwcm9taXNlLCBKU1Byb21pc2VSZWplY3Rpb25PcGVyYXRpb24gb3BlcmF0
aW9uKQogewogICAgIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3dl
YmFwcGFwaXMuaHRtbCN0aGUtaG9zdHByb21pc2VyZWplY3Rpb250cmFja2VyLWltcGxlbWVudGF0
aW9uCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2Jq
ZWN0LmgJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
RE9NR2xvYmFsT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTY5LDcgKzY5LDcgQEAgcHVibGlj
OgogICAgIC8vIE1ha2UgYmluZGluZyBjb2RlIGdlbmVyYXRpb24gZWFzaWVyLgogICAgIEpTRE9N
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QoKSB7IHJldHVybiB0aGlzOyB9CiAKLSAgICBzdGF0
aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpOwor
ICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBET01XcmFwcGVyV29ybGQmIHdvcmxk
KCkgeyByZXR1cm4gbV93b3JsZC5nZXQoKTsgfQogICAgIGJvb2wgd29ybGRJc05vcm1hbCgpIGNv
bnN0IHsgcmV0dXJuIG1fd29ybGRJc05vcm1hbDsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNET01HdWFyZGVkT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNET01HdWFyZGVkT2JqZWN0LmgJKHJldmlzaW9uIDI3MTQ0MykKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR3VhcmRlZE9iamVjdC5oCSh3b3JraW5n
IGNvcHkpCkBAIC00MCw3ICs0MCw4IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaXNTdXNwZW5kZWQo
KSBjb25zdCB7IHJldHVybiAhbV9ndWFyZGVkIHx8ICFjYW5JbnZva2VDYWxsYmFjaygpOyB9IC8v
IFRoZSB3cmFwcGVyIHdvcmxkIGhhcyBnb25lIGF3YXkgb3IgYWN0aXZlIERPTSBvYmplY3RzIGhh
dmUgYmVlbiBzdXNwZW5kZWQuCiAKLSAgICB2b2lkIHZpc2l0QWdncmVnYXRlKEpTQzo6U2xvdFZp
c2l0b3ImIHZpc2l0b3IpIHsgdmlzaXRvci5hcHBlbmQobV9ndWFyZGVkKTsgfQorICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFZpc2l0b3I+CisgICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShWaXNpdG9yJiB2
aXNpdG9yKSB7IHZpc2l0b3IuYXBwZW5kKG1fZ3VhcmRlZCk7IH0KIAogICAgIEpTQzo6SlNWYWx1
ZSBndWFyZGVkT2JqZWN0KCkgY29uc3QgeyByZXR1cm4gbV9ndWFyZGVkLmdldCgpOyB9CiAgICAg
SlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fZ2xvYmFs
T2JqZWN0LmdldCgpOyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVF1
YWRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
RE9NUXVhZEN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTRE9NUXVhZEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDcgKzMz
LDkgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKLXZvaWQg
SlNET01RdWFkOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikK
Ky8vdm9pZCBKU0RPTVF1YWQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNET01RdWFkOjp2aXNp
dEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHZpc2l0b3IuYWRk
T3BhcXVlUm9vdChjb25zdF9jYXN0PERPTVBvaW50Kj4oJndyYXBwZWQoKS5wMSgpKSk7CiAgICAg
dmlzaXRvci5hZGRPcGFxdWVSb290KGNvbnN0X2Nhc3Q8RE9NUG9pbnQqPigmd3JhcHBlZCgpLnAy
KCkpKTsKQEAgLTQxLDQgKzQzLDcgQEAgdm9pZCBKU0RPTVF1YWQ6OnZpc2l0QWRkaXRpb25hbENo
aWxkcmVuKAogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChjb25zdF9jYXN0PERPTVBvaW50Kj4o
JndyYXBwZWQoKS5wNCgpKSk7CiB9CiAKLX0KK3RlbXBsYXRlIHZvaWQgSlNET01RdWFkOjp2aXNp
dEFkZGl0aW9uYWxDaGlsZHJlbihBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lk
IEpTRE9NUXVhZDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNE
T01XaW5kb3dDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTRE9NV2luZG93Q3VzdG9tLmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMTYsNyArMTE2LDkgQEAgSlNDX0RFRklORV9DVVNUT01fR0VUVEVSKGpzRE9NV2luZG93SW5z
dAogICAgIHJldHVybiBub25DYWNoaW5nU3RhdGljRnVuY3Rpb25HZXR0ZXJJbXBsPGpzRE9NV2lu
ZG93SW5zdGFuY2VGdW5jdGlvbl9wb3N0TWVzc2FnZSwgMj4oZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0
eU5hbWUpOwogfQogCi12b2lkIEpTRE9NV2luZG93Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihT
bG90VmlzaXRvciYgdmlzaXRvcikKKy8vdm9pZCBKU0RPTVdpbmRvdzo6dmlzaXRBZGRpdGlvbmFs
Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
Pgordm9pZCBKU0RPTVdpbmRvdzo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlz
aXRvcikKIHsKICAgICBpZiAoRnJhbWUqIGZyYW1lID0gd3JhcHBlZCgpLmZyYW1lKCkpCiAgICAg
ICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChmcmFtZSk7CkBAIC0xMjksNiArMTMxLDkgQEAgdm9p
ZCBKU0RPTVdpbmRvdzo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZQogICAgIHdyYXBwZWQoKS52aXNp
dEpTRXZlbnRMaXN0ZW5lcnModmlzaXRvcik7CiB9CiAKK3RlbXBsYXRlIHZvaWQgSlNET01XaW5k
b3c6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBs
YXRlIHZvaWQgSlNET01XaW5kb3c6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9y
Jik7CisKICNpZiBFTkFCTEUoVVNFUl9NRVNTQUdFX0hBTkRMRVJTKQogSlNDX0RFRklORV9DVVNU
T01fR0VUVEVSKGpzRE9NV2luZG93X3dlYmtpdCwgKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xv
YmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkpCiB7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RlcHJlY2F0ZWRDU1NPTVZhbHVlQ3Vz
dG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RlcHJl
Y2F0ZWRDU1NPTVZhbHVlQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNEZXByZWNhdGVkQ1NTT01WYWx1ZUN1c3RvbS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM1LDcgKzM1LDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5h
bWVzcGFjZSBKU0M7CiAKLWJvb2wgSlNEZXByZWNhdGVkQ1NTT01WYWx1ZU93bmVyOjppc1JlYWNo
YWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9p
ZCosIFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQorYm9vbCBKU0Rl
cHJlY2F0ZWRDU1NPTVZhbHVlT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6
SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgQWJzdHJhY3RTbG90VmlzaXRvciYg
dmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikKIHsKICAgICBKU0RlcHJlY2F0ZWRDU1NPTVZh
bHVlKiBqc0NTU1ZhbHVlID0ganNDYXN0PEpTRGVwcmVjYXRlZENTU09NVmFsdWUqPihoYW5kbGUu
c2xvdCgpLT5hc0NlbGwoKSk7CiAgICAgaWYgKCFqc0NTU1ZhbHVlLT5oYXNDdXN0b21Qcm9wZXJ0
aWVzKGpzQ1NTVmFsdWUtPnZtKCkpKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNEb2N1bWVudEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNEb2N1bWVudEN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTRG9jdW1lbnRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC05MSwxMSArOTEsMTYgQEAgSlNWYWx1ZSB0b0pTKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xv
YgogICAgIHJldHVybiB0b0pTTmV3bHlDcmVhdGVkKGxleGljYWxHbG9iYWxPYmplY3QsIGdsb2Jh
bE9iamVjdCwgUmVmPERvY3VtZW50Pihkb2N1bWVudCkpOwogfQogCi12b2lkIEpTRG9jdW1lbnQ6
OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy92b2lkIEpT
RG9jdW1lbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQor
dGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNEb2N1bWVudDo6dmlzaXRBZGRpdGlv
bmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJv
b3Qoc3RhdGljX2Nhc3Q8U2NyaXB0RXhlY3V0aW9uQ29udGV4dCo+KCZ3cmFwcGVkKCkpKTsKIH0K
IAordGVtcGxhdGUgdm9pZCBKU0RvY3VtZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihBYnN0
cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTRG9jdW1lbnQ6OnZpc2l0QWRkaXRp
b25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CisKIHZvaWQgSlNEb2N1bWVudDo6YW5hbHl6ZUhl
YXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQogewogICAgIEJhc2U6OmFu
YWx5emVIZWFwKGNlbGwsIGFuYWx5emVyKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTRXJyb3JFdmVudEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNFcnJvckV2ZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFcnJvckV2ZW50Q3VzdG9tLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjgsOSArMjgsMTQgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lk
IEpTRXJyb3JFdmVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYg
dmlzaXRvcikKKy8vdm9pZCBKU0Vycm9yRXZlbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpT
Qzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9p
ZCBKU0Vycm9yRXZlbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3Ip
CiB7CiAgICAgd3JhcHBlZCgpLm9yaWdpbmFsRXJyb3IoKS52aXNpdCh2aXNpdG9yKTsKIH0KIAor
dGVtcGxhdGUgdm9pZCBKU0Vycm9yRXZlbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6
QWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU0Vycm9yRXZlbnQ6OnZpc2l0
QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImKTsKKwogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudExpc3RlbmVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50TGlz
dGVuZXIuY3BwCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0V2ZW50TGlzdGVuZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03OCw3ICs3OCw4IEBAIEpT
T2JqZWN0KiBKU0V2ZW50TGlzdGVuZXI6OmluaXRpYWxpemVKU0YKICAgICByZXR1cm4gbnVsbHB0
cjsKIH0KIAotdm9pZCBKU0V2ZW50TGlzdGVuZXI6OnZpc2l0SlNGdW5jdGlvbihTbG90VmlzaXRv
ciYgdmlzaXRvcikKKy8vdm9pZCBKU0V2ZW50TGlzdGVuZXI6OnZpc2l0SlNGdW5jdGlvbihTbG90
VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgSlNFdmVudExpc3RlbmVyOjp2aXNpdEpTRnVuY3Rpb24o
QWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICAvLyBJZiBtX3dyYXBwZXIgaXMg
bnVsbCwgd2UgYXJlIG5vdCBrZWVwaW5nIG1fanNGdW5jdGlvbiBhbGl2ZS4KICAgICBpZiAoIW1f
d3JhcHBlcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRMaXN0ZW5l
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRMaXN0
ZW5lci5oCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0V2ZW50TGlzdGVuZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNjIsNyArNjIsOCBAQCBwdWJsaWM6
CiAKIHByaXZhdGU6CiAgICAgdmlydHVhbCBKU0M6OkpTT2JqZWN0KiBpbml0aWFsaXplSlNGdW5j
dGlvbihTY3JpcHRFeGVjdXRpb25Db250ZXh0JikgY29uc3Q7Ci0gICAgdm9pZCB2aXNpdEpTRnVu
Y3Rpb24oSlNDOjpTbG90VmlzaXRvciYpIGZpbmFsOworLy8gICAgdm9pZCB2aXNpdEpTRnVuY3Rp
b24oSlNDOjpTbG90VmlzaXRvciYpIGZpbmFsOworICAgIHZvaWQgdmlzaXRKU0Z1bmN0aW9uKEpT
Qzo6QWJzdHJhY3RTbG90VmlzaXRvciYpIGZpbmFsOwogCiBwcm90ZWN0ZWQ6CiAgICAgSlNFdmVu
dExpc3RlbmVyKEpTQzo6SlNPYmplY3QqIGZ1bmN0aW9uLCBKU0M6OkpTT2JqZWN0KiB3cmFwcGVy
LCBib29sIGlzQXR0cmlidXRlLCBET01XcmFwcGVyV29ybGQmKTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRUYXJnZXRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRUYXJnZXRDdXN0b20uY3BwCShyZXZpc2lv
biAyNzE0NDMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50VGFyZ2V0Q3Vz
dG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzIsOSArNzIsMTQgQEAgc3RkOjp1bmlxdWVfcHRy
PEpTRXZlbnRUYXJnZXRXcmFwcGVyPiBqcwogICAgIHJldHVybiBudWxscHRyOwogfQogCi12b2lk
IEpTRXZlbnRUYXJnZXQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNp
dG9yKQorLy92b2lkIEpTRXZlbnRUYXJnZXQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNFdmVu
dFRhcmdldDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAg
ICB3cmFwcGVkKCkudmlzaXRKU0V2ZW50TGlzdGVuZXJzKHZpc2l0b3IpOwogfQogCit0ZW1wbGF0
ZSB2b2lkIEpTRXZlbnRUYXJnZXQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEFic3RyYWN0U2xv
dFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNFdmVudFRhcmdldDo6dmlzaXRBZGRpdGlvbmFs
Q2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDog
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNGZXRjaEV2ZW50Q3VzdG9tLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0ZldGNoRXZlbnRDdXN0b20uY3Bw
CShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0ZldGNo
RXZlbnRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCwxMSArMzAsMTYgQEAKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIEpTRmV0Y2hFdmVudDo6dmlzaXRBZGRpdGlvbmFsQ2hp
bGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vdm9pZCBKU0ZldGNoRXZlbnQ6OnZp
c2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0
ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0ZldGNoRXZlbnQ6OnZpc2l0QWRkaXRpb25hbENo
aWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KCZ3
cmFwcGVkKCkucmVxdWVzdCgpKTsKIH0KIAotfQordGVtcGxhdGUgdm9pZCBKU0ZldGNoRXZlbnQ6
OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVt
cGxhdGUgdm9pZCBKU0ZldGNoRXZlbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xv
dFZpc2l0b3ImKTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTENhbnZhc0VsZW1lbnRDdXN0b20uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTENhbnZhc0VsZW1l
bnRDdXN0b20uY3BwCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0hUTUxDYW52YXNFbGVtZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEs
OSArMzEsMTQgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIEpTSFRNTENhbnZhc0Vs
ZW1lbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3Ip
CisvL3ZvaWQgSlNIVE1MQ2FudmFzRWxlbWVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlND
OjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lk
IEpTSFRNTENhbnZhc0VsZW1lbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZp
c2l0b3IpCiB7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHN0YXRpY19jYXN0PENhbnZhc0Jh
c2UqPigmd3JhcHBlZCgpKSk7CiB9CiAKK3RlbXBsYXRlIHZvaWQgSlNIVE1MQ2FudmFzRWxlbWVu
dDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0
ZW1wbGF0ZSB2b2lkIEpTSFRNTENhbnZhc0VsZW1lbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVu
KEpTQzo6U2xvdFZpc2l0b3ImKTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MVGVtcGxhdGVFbGVtZW50Q3VzdG9tLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxUZW1wbGF0ZUVs
ZW1lbnRDdXN0b20uY3BwCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0hUTUxUZW1wbGF0ZUVsZW1lbnRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zNywxMCArMzcsMTUgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBK
U0M7CiAKLXZvaWQgSlNIVE1MVGVtcGxhdGVFbGVtZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJl
bihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy92b2lkIEpTSFRNTFRlbXBsYXRlRWxlbWVu
dDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3Rl
bXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTSFRNTFRlbXBsYXRlRWxlbWVudDo6dmlz
aXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBpZiAoYXV0byog
Y29udGVudCA9IHdyYXBwZWQoKS5jb250ZW50SWZBdmFpbGFibGUoKSkKICAgICAgICAgdmlzaXRv
ci5hZGRPcGFxdWVSb290KHJvb3QoY29udGVudCkpOwogfQogCit0ZW1wbGF0ZSB2b2lkIEpTSFRN
TFRlbXBsYXRlRWxlbWVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpBYnN0cmFjdFNs
b3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTSFRNTFRlbXBsYXRlRWxlbWVudDo6dmlzaXRB
ZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYpOworCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hpc3RvcnlDdXN0b20u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSGlzdG9yeUN1
c3RvbS5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTSGlzdG9yeUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDkgKzQ0LDE0IEBAIEpT
VmFsdWUgSlNIaXN0b3J5OjpzdGF0ZShKU0dsb2JhbE9iamVjdCYKICAgICB9KTsKIH0KIAotdm9p
ZCBKU0hpc3Rvcnk6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9y
KQorLy92b2lkIEpTSGlzdG9yeTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3Im
IHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0hpc3Rvcnk6OnZp
c2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgd3JhcHBlZCgp
LmNhY2hlZFN0YXRlRm9yR0MoKS52aXNpdCh2aXNpdG9yKTsKIH0KIAordGVtcGxhdGUgdm9pZCBK
U0hpc3Rvcnk6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsK
K3RlbXBsYXRlIHZvaWQgSlNIaXN0b3J5Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90Vmlz
aXRvciYpOworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0lEQkN1cnNvckN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNJREJDdXJzb3JDdXN0b20uY3BwCShyZXZpc2lvbiAyNzE0NDMp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQkN1cnNvckN1c3RvbS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTUwLDcgKzUwLDkgQEAgSlNDOjpKU1ZhbHVlIEpTSURCQ3Vyc29yOjpw
cmltYXJ5S2V5KEpTQwogICAgIH0pOwogfQogCi12b2lkIEpTSURCQ3Vyc29yOjp2aXNpdEFkZGl0
aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vdm9pZCBKU0lEQkN1cnNvcjo6
dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0
eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0lEQkN1cnNvcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRy
ZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBhdXRvJiBjdXJzb3IgPSB3cmFwcGVkKCk7CiAg
ICAgaWYgKGF1dG8qIHJlcXVlc3QgPSBjdXJzb3IucmVxdWVzdCgpKQpAQCAtNTksNiArNjEsOSBA
QCB2b2lkIEpTSURCQ3Vyc29yOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlCiAgICAgY3Vyc29yLnBy
aW1hcnlLZXlXcmFwcGVyKCkudmlzaXQodmlzaXRvcik7CiB9CiAKK3RlbXBsYXRlIHZvaWQgSlNJ
REJDdXJzb3I6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsK
K3RlbXBsYXRlIHZvaWQgSlNJREJDdXJzb3I6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RW
aXNpdG9yJik7CisKIEpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkpTR2xvYmFsT2JqZWN0
KiwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmPElEQkN1cnNvcj4mJiBjdXJz
b3IpCiB7CiAgICAgaWYgKGlzPElEQkN1cnNvcldpdGhWYWx1ZT4oY3Vyc29yKSkKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCQ3Vyc29yV2l0aFZhbHVlQ3VzdG9tLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQkN1cnNvcldpdGhW
YWx1ZUN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTSURCQ3Vyc29yV2l0aFZhbHVlQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDMsMTIgKzQzLDE3IEBAIEpTQzo6SlNWYWx1ZSBKU0lEQkN1cnNvcldpdGhWYWx1ZTo6dmFsdWUK
ICAgICB9KTsKIH0KIAotdm9pZCBKU0lEQkN1cnNvcldpdGhWYWx1ZTo6dmlzaXRBZGRpdGlvbmFs
Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3ZvaWQgSlNJREJDdXJzb3JXaXRoVmFs
dWU6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxh
dGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNJREJDdXJzb3JXaXRoVmFsdWU6OnZpc2l0QWRk
aXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNJREJDdXJzb3I6OnZp
c2l0QWRkaXRpb25hbENoaWxkcmVuKHZpc2l0b3IpOwogICAgIHdyYXBwZWQoKS52YWx1ZVdyYXBw
ZXIoKS52aXNpdCh2aXNpdG9yKTsKIH0KIAordGVtcGxhdGUgdm9pZCBKU0lEQkN1cnNvcldpdGhW
YWx1ZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oQWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVt
cGxhdGUgdm9pZCBKU0lEQkN1cnNvcldpdGhWYWx1ZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4o
U2xvdFZpc2l0b3ImKTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5B
QkxFKElOREVYRURfREFUQUJBU0UpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0lEQkluZGV4Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0lEQkluZGV4Q3VzdG9tLmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNJREJJbmRleEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM0LDExICszNCwxNiBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogdXNpbmcgbmFtZXNwYWNlIEpT
QzsKIAotdm9pZCBKU0lEQkluZGV4Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRv
ciYgdmlzaXRvcikKKy8vdm9pZCBKU0lEQkluZGV4Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihT
bG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpT
SURCSW5kZXg6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAg
ICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHN0YXRpY19jYXN0PElEQkluZGV4Jj4od3JhcHBlZCgp
KS5vYmplY3RTdG9yZUFzT3BhcXVlUm9vdCgpKTsKIH0KIAordGVtcGxhdGUgdm9pZCBKU0lEQklu
ZGV4Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1w
bGF0ZSB2b2lkIEpTSURCSW5kZXg6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9y
Jik7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVE
X0RBVEFCQVNFKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJPYmplY3RT
dG9yZUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNJREJPYmplY3RTdG9yZUN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCT2JqZWN0U3RvcmVDdXN0b20uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zNiwxMSArMzYsMTYgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVz
cGFjZSBKU0M7CiAKLXZvaWQgSlNJREJPYmplY3RTdG9yZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRy
ZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3ZvaWQgSlNJREJPYmplY3RTdG9yZTo6dmlzaXRB
ZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBWaXNpdG9yPgordm9pZCBKU0lEQk9iamVjdFN0b3JlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJl
bihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHN0YXRpY19jYXN0PElEQk9iamVjdFN0b3JlJj4o
d3JhcHBlZCgpKS52aXNpdFJlZmVyZW5jZWRJbmRleGVzKHZpc2l0b3IpOwogfQogCi19Cit0ZW1w
bGF0ZSB2b2lkIEpTSURCT2JqZWN0U3RvcmU6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEFic3Ry
YWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNJREJPYmplY3RTdG9yZTo6dmlzaXRB
ZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQogCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCUmVxdWVz
dEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJ
REJSZXF1ZXN0Q3VzdG9tLmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNJREJSZXF1ZXN0Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODks
MTIgKzg5LDE4IEBAIEpTQzo6SlNWYWx1ZSBKU0lEQlJlcXVlc3Q6OnJlc3VsdChKU0M6OkoKICAg
ICB9KTsKIH0KIAotdm9pZCBKU0lEQlJlcXVlc3Q6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQorLy92b2lkIEpTSURCUmVxdWVzdDo6dmlzaXRBZGRpdGlvbmFs
Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
Pgordm9pZCBKU0lEQlJlcXVlc3Q6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZp
c2l0b3IpCiB7CiAgICAgYXV0byYgcmVxdWVzdCA9IHdyYXBwZWQoKTsKICAgICByZXF1ZXN0LnJl
c3VsdFdyYXBwZXIoKS52aXNpdCh2aXNpdG9yKTsKICAgICByZXF1ZXN0LmN1cnNvcldyYXBwZXIo
KS52aXNpdCh2aXNpdG9yKTsKIH0KIAotfQordGVtcGxhdGUgdm9pZCBKU0lEQlJlcXVlc3Q6OnZp
c2l0QWRkaXRpb25hbENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZv
aWQgSlNJREJSZXF1ZXN0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYpOwor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKICNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRB
QkFTRSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCVHJhbnNhY3Rpb25D
dXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURC
VHJhbnNhY3Rpb25DdXN0b20uY3BwCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0lEQlRyYW5zYWN0aW9uQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzQsMTEgKzM0LDE2IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2Ug
SlNDOwogCi12b2lkIEpTSURCVHJhbnNhY3Rpb246OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQorLy92b2lkIEpTSURCVHJhbnNhY3Rpb246OnZpc2l0QWRkaXRp
b25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlz
aXRvcj4KK3ZvaWQgSlNJREJUcmFuc2FjdGlvbjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlz
aXRvciYgdmlzaXRvcikKIHsKICAgICBzdGF0aWNfY2FzdDxJREJUcmFuc2FjdGlvbiY+KHdyYXBw
ZWQoKSkudmlzaXRSZWZlcmVuY2VkT2JqZWN0U3RvcmVzKHZpc2l0b3IpOwogfQogCi19Cit0ZW1w
bGF0ZSB2b2lkIEpTSURCVHJhbnNhY3Rpb246OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEFic3Ry
YWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNJREJUcmFuc2FjdGlvbjo6dmlzaXRB
ZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQogCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW50ZXJzZWN0
aW9uT2JzZXJ2ZXJDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTSW50ZXJzZWN0aW9uT2JzZXJ2ZXJDdXN0b20uY3BwCShyZXZpc2lvbiAyNzE0NDMp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0ludGVyc2VjdGlvbk9ic2VydmVyQ3Vz
dG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsMTAgKzMwLDE1IEBACiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotdm9pZCBKU0ludGVyc2VjdGlvbk9ic2VydmVyOjp2aXNpdEFkZGl0aW9uYWxD
aGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy92b2lkIEpTSW50ZXJzZWN0aW9u
T2JzZXJ2ZXI6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0
b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0ludGVyc2VjdGlvbk9ic2Vy
dmVyOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGlm
IChhdXRvKiBjYWxsYmFjayA9IHdyYXBwZWQoKS5jYWxsYmFja0NvbmN1cnJlbnRseSgpKQogICAg
ICAgICBjYWxsYmFjay0+dmlzaXRKU0Z1bmN0aW9uKHZpc2l0b3IpOwogfQogCi19Cit0ZW1wbGF0
ZSB2b2lkIEpTSW50ZXJzZWN0aW9uT2JzZXJ2ZXI6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpT
Qzo6QWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU0ludGVyc2VjdGlvbk9i
c2VydmVyOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJik7CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
SW50ZXJzZWN0aW9uT2JzZXJ2ZXJFbnRyeUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNJbnRlcnNlY3Rpb25PYnNlcnZlckVudHJ5Q3VzdG9tLmNw
cAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJbnRl
cnNlY3Rpb25PYnNlcnZlckVudHJ5Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyAr
MzAsOSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgSlNJbnRlcnNlY3Rpb25PYnNl
cnZlckVudHJ5Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNp
dG9yKQorLy92b2lkIEpTSW50ZXJzZWN0aW9uT2JzZXJ2ZXJFbnRyeTo6dmlzaXRBZGRpdGlvbmFs
Q2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZp
c2l0b3I+Cit2b2lkIEpTSW50ZXJzZWN0aW9uT2JzZXJ2ZXJFbnRyeTo6dmlzaXRBZGRpdGlvbmFs
Q2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qo
cm9vdCh3cmFwcGVkKCkudGFyZ2V0KCkpKTsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qod3Jh
cHBlZCgpLmJvdW5kaW5nQ2xpZW50UmVjdCgpKTsKQEAgLTM4LDQgKzQwLDcgQEAgdm9pZCBKU0lu
dGVyc2VjdGlvbk9ic2VydmVyRW50cnk6OnZpc2l0QQogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9v
dCh3cmFwcGVkKCkucm9vdEJvdW5kcygpKTsKIH0KIAotfQordGVtcGxhdGUgdm9pZCBKU0ludGVy
c2VjdGlvbk9ic2VydmVyRW50cnk6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6QWJzdHJh
Y3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU0ludGVyc2VjdGlvbk9ic2VydmVyRW50
cnk6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImKTsKKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNZXNz
YWdlQ2hhbm5lbEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNNZXNzYWdlQ2hhbm5lbEN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWVzc2FnZUNoYW5uZWxDdXN0b20uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMyw3ICszMyw5IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9p
ZCBKU01lc3NhZ2VDaGFubmVsOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNp
dG9yJiB2aXNpdG9yKQorLy92b2lkIEpTTWVzc2FnZUNoYW5uZWw6OnZpc2l0QWRkaXRpb25hbENo
aWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNp
dG9yPgordm9pZCBKU01lc3NhZ2VDaGFubmVsOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNp
dG9yJiB2aXNpdG9yKQogewogICAgIGlmIChNZXNzYWdlUG9ydCogcG9ydCA9IHdyYXBwZWQoKS5w
b3J0MSgpKQogICAgICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QocG9ydCk7CkBAIC00Miw2ICs0
NCw5IEBAIHZvaWQgSlNNZXNzYWdlQ2hhbm5lbDo6dmlzaXRBZGRpdGlvbmFsQ2gKICAgICAgICAg
dmlzaXRvci5hZGRPcGFxdWVSb290KHBvcnQpOwogfQogCit0ZW1wbGF0ZSB2b2lkIEpTTWVzc2Fn
ZUNoYW5uZWw6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRv
ciYpOwordGVtcGxhdGUgdm9pZCBKU01lc3NhZ2VDaGFubmVsOjp2aXNpdEFkZGl0aW9uYWxDaGls
ZHJlbihKU0M6OlNsb3RWaXNpdG9yJik7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2Vu
ZGlmIC8vIEVOQUJMRShDSEFOTkVMX01FU1NBR0lORykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTTWVzc2FnZUV2ZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU01lc3NhZ2VFdmVudEN1c3RvbS5jcHAJKHJldmlzaW9uIDI3
MTQ0MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWVzc2FnZUV2ZW50Q3VzdG9t
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzAsNyArNzAsOSBAQCBKU0M6OkpTVmFsdWUgSlNNZXNz
YWdlRXZlbnQ6OmRhdGEoSlNDOjpKCiAgICAgfSk7CiB9CiAKLXZvaWQgSlNNZXNzYWdlRXZlbnQ6
OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3Zv
aWQgSlNNZXNzYWdlRXZlbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0
b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU01lc3NhZ2VF
dmVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBX
VEY6OnN3aXRjaE9uKHdyYXBwZWQoKS5kYXRhKCksIFsmdmlzaXRvcl0gKGNvbnN0IEpTVmFsdWVJ
bldyYXBwZWRPYmplY3QmIGRhdGEpIHsKICAgICAgICAgZGF0YS52aXNpdCh2aXNpdG9yKTsKQEAg
LTg0LDQgKzg2LDcgQEAgdm9pZCBKU01lc3NhZ2VFdmVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbAog
ICAgIHdyYXBwZWQoKS5jYWNoZWRQb3J0cygpLnZpc2l0KHZpc2l0b3IpOwogfQogCit0ZW1wbGF0
ZSB2b2lkIEpTTWVzc2FnZUV2ZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OkFic3Ry
YWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNNZXNzYWdlRXZlbnQ6OnZpc2l0QWRk
aXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImKTsKKwogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNZXNzYWdlUG9ydEN1c3Rv
bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNZXNzYWdl
UG9ydEN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTTWVzc2FnZVBvcnRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwxMSAr
MzEsMTYgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKLXZv
aWQgSlNNZXNzYWdlUG9ydDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZp
c2l0b3IpCisvL3ZvaWQgSlNNZXNzYWdlUG9ydDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xv
dFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU01l
c3NhZ2VQb3J0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewog
ICAgIC8vIElmIHdlIGhhdmUgYSBsb2NhbGx5IGVudGFuZ2xlZCBwb3J0LCB3ZSBjYW4gZGlyZWN0
bHkgbWFyayBpdCBhcyByZWFjaGFibGUuIFBvcnRzIHRoYXQgYXJlIHJlbW90ZWx5IGVudGFuZ2xl
ZCBhcmUgbWFya2VkIGluLXVzZSBieSBtYXJrQWN0aXZlT2JqZWN0c0ZvckNvbnRleHQoKS4KICAg
ICBpZiAoTWVzc2FnZVBvcnQqIHBvcnQgPSB3cmFwcGVkKCkubG9jYWxseUVudGFuZ2xlZFBvcnQo
KSkKICAgICAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHBvcnQpOwogfQogCit0ZW1wbGF0ZSB2
b2lkIEpTTWVzc2FnZVBvcnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEFic3RyYWN0U2xvdFZp
c2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNNZXNzYWdlUG9ydDo6dmlzaXRBZGRpdGlvbmFsQ2hp
bGRyZW4oU2xvdFZpc2l0b3ImKTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNdXRhdGlvbk9ic2VydmVyQ3VzdG9tLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU011dGF0aW9uT2JzZXJ2ZXJD
dXN0b20uY3BwCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU011dGF0aW9uT2JzZXJ2ZXJDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSwxMiAr
MzksMTcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKLXZv
aWQgSlNNdXRhdGlvbk9ic2VydmVyOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RW
aXNpdG9yJiB2aXNpdG9yKQorLy92b2lkIEpTTXV0YXRpb25PYnNlcnZlcjo6dmlzaXRBZGRpdGlv
bmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1l
IFZpc2l0b3I+Cit2b2lkIEpTTXV0YXRpb25PYnNlcnZlcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRy
ZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB3cmFwcGVkKCkuY2FsbGJhY2soKS52aXNpdEpT
RnVuY3Rpb24odmlzaXRvcik7CiB9CiAKLWJvb2wgSlNNdXRhdGlvbk9ic2VydmVyT3duZXI6Omlz
UmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxl
LCB2b2lkKiwgU2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKnJlYXNvbikKK3RlbXBs
YXRlIHZvaWQgSlNNdXRhdGlvbk9ic2VydmVyOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6
OkFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNNdXRhdGlvbk9ic2VydmVy
Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJik7CisKK2Jvb2wgSlNN
dXRhdGlvbk9ic2VydmVyT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFu
ZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgQWJzdHJhY3RTbG90VmlzaXRvciYgdmlz
aXRvciwgY29uc3QgY2hhcioqcmVhc29uKQogewogICAgIGZvciAoYXV0byogbm9kZSA6IGpzQ2Fz
dDxKU011dGF0aW9uT2JzZXJ2ZXIqPihoYW5kbGUuc2xvdCgpLT5hc0NlbGwoKSktPndyYXBwZWQo
KS5vYnNlcnZlZE5vZGVzKCkpIHsKICAgICAgICAgaWYgKHZpc2l0b3IuY29udGFpbnNPcGFxdWVS
b290KHJvb3Qobm9kZSkpKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU011
dGF0aW9uUmVjb3JkQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU011dGF0aW9uUmVjb3JkQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNdXRhdGlvblJlY29yZEN1c3RvbS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTMwLDkgKzMwLDE0IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAot
dm9pZCBKU011dGF0aW9uUmVjb3JkOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RW
aXNpdG9yJiB2aXNpdG9yKQorLy92b2lkIEpTTXV0YXRpb25SZWNvcmQ6OnZpc2l0QWRkaXRpb25h
bENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPgordm9pZCBKU011dGF0aW9uUmVjb3JkOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihW
aXNpdG9yJiB2aXNpdG9yKQogewogICAgIHdyYXBwZWQoKS52aXNpdE5vZGVzQ29uY3VycmVudGx5
KHZpc2l0b3IpOwogfQotICAgIAorCit0ZW1wbGF0ZSB2b2lkIEpTTXV0YXRpb25SZWNvcmQ6OnZp
c2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxh
dGUgdm9pZCBKU011dGF0aW9uUmVjb3JkOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNs
b3RWaXNpdG9yJik7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTTmF2aWdhdG9yQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05hdmlnYXRvckN1c3RvbS5jcHAJKHJldmlzaW9uIDI3
MTQ0MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTmF2aWdhdG9yQ3VzdG9tLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzIsMTEgKzMyLDE2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotdm9pZCBKU05hdmlnYXRvcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90
VmlzaXRvciYgdmlzaXRvcikKKy8vdm9pZCBKU05hdmlnYXRvcjo6dmlzaXRBZGRpdGlvbmFsQ2hp
bGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0
b3I+Cit2b2lkIEpTTmF2aWdhdG9yOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2
aXNpdG9yKQogewogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChzdGF0aWNfY2FzdDxOYXZpZ2F0
b3JCYXNlKj4oJndyYXBwZWQoKSkpOwogfQogCit0ZW1wbGF0ZSB2b2lkIEpTTmF2aWdhdG9yOjp2
aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBs
YXRlIHZvaWQgSlNOYXZpZ2F0b3I6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZp
c2l0b3ImKTsKKwogI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCiBKU0M6OkpTVmFsdWUgSlNOYXZp
Z2F0b3I6OmdldFVzZXJNZWRpYShKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBKU0M6OkNhbGxGcmFtZSYgY2FsbEZyYW1lKQogewpJbmRleDogU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNOb2RlQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU05vZGVDdXN0b20uY3BwCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC03NCw3ICs3NCw4IEBAIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKIHVzaW5nIG5hbWVzcGFjZSBI
VE1MTmFtZXM7CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBpc1JlYWNoYWJsZUZyb21ET00oTm9kZSog
bm9kZSwgU2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCisvL3N0YXRp
YyBpbmxpbmUgYm9vbCBpc1JlYWNoYWJsZUZyb21ET00oTm9kZSogbm9kZSwgU2xvdFZpc2l0b3Im
IHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCitzdGF0aWMgaW5saW5lIGJvb2wgaXNSZWFj
aGFibGVGcm9tRE9NKE5vZGUqIG5vZGUsIEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNv
bnN0IGNoYXIqKiByZWFzb24pCiB7CiAgICAgaWYgKCFub2RlLT5pc0Nvbm5lY3RlZCgpKSB7CiAg
ICAgICAgIGlmIChpczxFbGVtZW50Pigqbm9kZSkpIHsKQEAgLTEyMyw3ICsxMjQsNyBAQCBzdGF0
aWMgaW5saW5lIGJvb2wgaXNSZWFjaGFibGVGcm9tRE9NKE5vCiAgICAgcmV0dXJuIHZpc2l0b3Iu
Y29udGFpbnNPcGFxdWVSb290KHJvb3Qobm9kZSkpOwogfQogCi1ib29sIEpTTm9kZU93bmVyOjpp
c1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRs
ZSwgdm9pZCosIFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQorYm9v
bCBKU05vZGVPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlND
OjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBj
b25zdCBjaGFyKiogcmVhc29uKQogewogICAgIEpTTm9kZSoganNOb2RlID0ganNDYXN0PEpTTm9k
ZSo+KGhhbmRsZS5zbG90KCktPmFzQ2VsbCgpKTsKICAgICByZXR1cm4gaXNSZWFjaGFibGVGcm9t
RE9NKCZqc05vZGUtPndyYXBwZWQoKSwgdmlzaXRvciwgcmVhc29uKTsKQEAgLTEzNiwxMSArMTM3
LDE2IEBAIEpTU2NvcGUqIEpTTm9kZTo6cHVzaEV2ZW50SGFuZGxlclNjb3BlKEoKICAgICByZXR1
cm4gbm9kZTsKIH0KIAotdm9pZCBKU05vZGU6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQorLy92b2lkIEpTTm9kZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4o
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBK
U05vZGU6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAg
dmlzaXRvci5hZGRPcGFxdWVSb290KHJvb3Qod3JhcHBlZCgpKSk7CiB9CiAKK3RlbXBsYXRlIHZv
aWQgSlNOb2RlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihBYnN0cmFjdFNsb3RWaXNpdG9yJik7
Cit0ZW1wbGF0ZSB2b2lkIEpTTm9kZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0
b3ImKTsKKwogc3RhdGljIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBjcmVhdGVXcmFwcGVySW5saW5l
KEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0RPTUdsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBSZWY8Tm9kZT4mJiBub2RlKQogewogICAgIEFTU0VSVCghZ2V0Q2FjaGVk
V3JhcHBlcihnbG9iYWxPYmplY3QtPndvcmxkKCksIG5vZGUpKTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTTm9kZUl0ZXJhdG9yQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVJdGVyYXRvckN1c3RvbS5jcHAJKHJldmlz
aW9uIDI3MTQ0MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUl0ZXJhdG9y
Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUsMTAgKzI1LDE1IEBACiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotdm9pZCBKU05vZGVJdGVyYXRvcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRy
ZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vdm9pZCBKU05vZGVJdGVyYXRvcjo6dmlz
aXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRl
PHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTTm9kZUl0ZXJhdG9yOjp2aXNpdEFkZGl0aW9uYWxD
aGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGlmIChOb2RlRmlsdGVyKiBmaWx0ZXIg
PSB3cmFwcGVkKCkuZmlsdGVyKCkpCiAgICAgICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChmaWx0
ZXIpOwogfQogCi19Cit0ZW1wbGF0ZSB2b2lkIEpTTm9kZUl0ZXJhdG9yOjp2aXNpdEFkZGl0aW9u
YWxDaGlsZHJlbihKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNO
b2RlSXRlcmF0b3I6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImKTsK
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNOb2RlTGlzdEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNOb2RlTGlzdEN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUxpc3RDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zNyw3ICszNyw3IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2Ug
SlNDOwogCi1ib29sIEpTTm9kZUxpc3RPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMo
SlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBTbG90VmlzaXRvciYgdmlz
aXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikKK2Jvb2wgSlNOb2RlTGlzdE93bmVyOjppc1JlYWNo
YWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9p
ZCosIEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCiB7
CiAgICAgSlNOb2RlTGlzdCoganNOb2RlTGlzdCA9IGpzQ2FzdDxKU05vZGVMaXN0Kj4oaGFuZGxl
LnNsb3QoKS0+YXNDZWxsKCkpOwogICAgIGlmICghanNOb2RlTGlzdC0+aGFzQ3VzdG9tUHJvcGVy
dGllcyhqc05vZGVMaXN0LT52bSgpKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTT2Zmc2NyZWVuQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQ3VzdG9tLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU09mZnNjcmVlbkNhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyREN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTT2Zmc2NyZWVuQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQ3VzdG9tLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsNyBAQCBpbmxpbmUgdm9pZCogcm9vdChPZmZz
Y3JlZW5DYW52YXMqIGNhbnZhCiAgICAgcmV0dXJuIGNhbnZhczsKIH0KIAotYm9vbCBKU09mZnNj
cmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRE93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVS
b290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIFNsb3RWaXNpdG9y
JiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQorYm9vbCBKU09mZnNjcmVlbkNhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyRE93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6Okhh
bmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIEFic3RyYWN0U2xvdFZpc2l0b3ImIHZp
c2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCiB7CiAgICAgaWYgKFVOTElLRUxZKHJlYXNvbikp
CiAgICAgICAgICpyZWFzb24gPSAiQ2FudmFzIGlzIG9wYXF1ZSByb290IjsKQEAgLTQxLDExICs0
MSwxNiBAQCBib29sIEpTT2Zmc2NyZWVuQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJECiAgICAgcmV0
dXJuIHZpc2l0b3IuY29udGFpbnNPcGFxdWVSb290KHJvb3QpOwogfQogCi12b2lkIEpTT2Zmc2Ny
ZWVuQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90
VmlzaXRvciYgdmlzaXRvcikKKy8vdm9pZCBKU09mZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyRDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1w
bGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU09mZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyRDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAg
ICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qocm9vdCgmd3JhcHBlZCgpLmNhbnZhcygpKSk7CiB9CiAK
K3RlbXBsYXRlIHZvaWQgSlNPZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnZpc2l0
QWRkaXRpb25hbENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQg
SlNPZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnZpc2l0QWRkaXRpb25hbENoaWxk
cmVuKFNsb3RWaXNpdG9yJik7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1BhaW50UmVuZGVyaW5nQ29udGV4dDJE
Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1Bh
aW50UmVuZGVyaW5nQ29udGV4dDJEQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNQYWludFJlbmRlcmluZ0NvbnRleHQyREN1c3RvbS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDcgKzM2LDcgQEAgaW5saW5lIHZvaWQqIHJvb3QoQ3Vz
dG9tUGFpbnRDYW52YXMqIGNhbgogICAgIHJldHVybiBjYW52YXM7CiB9CiAKLWJvb2wgSlNQYWlu
dFJlbmRlcmluZ0NvbnRleHQyRE93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6
OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIFNsb3RWaXNpdG9yJiB2aXNpdG9y
LCBjb25zdCBjaGFyKiogcmVhc29uKQorYm9vbCBKU1BhaW50UmVuZGVyaW5nQ29udGV4dDJET3du
ZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4g
aGFuZGxlLCB2b2lkKiwgQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioq
IHJlYXNvbikKIHsKICAgICBpZiAoVU5MSUtFTFkocmVhc29uKSkKICAgICAgICAgKnJlYXNvbiA9
ICJDYW52YXMgaXMgb3BhcXVlIHJvb3QiOwpAQCAtNDYsMTEgKzQ2LDE2IEBAIGJvb2wgSlNQYWlu
dFJlbmRlcmluZ0NvbnRleHQyRE93bmVyOjppc1IKICAgICByZXR1cm4gdmlzaXRvci5jb250YWlu
c09wYXF1ZVJvb3Qocm9vdCk7CiB9CiAKLXZvaWQgSlNQYWludFJlbmRlcmluZ0NvbnRleHQyRDo6
dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3ZvaWQgSlNQ
YWludFJlbmRlcmluZ0NvbnRleHQyRDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0
b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1BhaW50UmVu
ZGVyaW5nQ29udGV4dDJEOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9y
KQogewogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChyb290KCZ3cmFwcGVkKCkuY2FudmFzKCkp
KTsKIH0KIAordGVtcGxhdGUgdm9pZCBKU1BhaW50UmVuZGVyaW5nQ29udGV4dDJEOjp2aXNpdEFk
ZGl0aW9uYWxDaGlsZHJlbihBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpT
UGFpbnRSZW5kZXJpbmdDb250ZXh0MkQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNp
dG9yJik7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKICNlbmRpZgogCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU1BhaW50V29ya2xldEdsb2JhbFNjb3BlQ3VzdG9tLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1BhaW50V29ya2xldEds
b2JhbFNjb3BlQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNQYWludFdvcmtsZXRHbG9iYWxTY29wZUN1c3RvbS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTMxLDcgKzMxLDkgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVz
cGFjZSBKU0M7CiAKLXZvaWQgSlNQYWludFdvcmtsZXRHbG9iYWxTY29wZTo6dmlzaXRBZGRpdGlv
bmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vdm9pZCBKU1BhaW50V29y
a2xldEdsb2JhbFNjb3BlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9y
JiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNQYWludFdvcmts
ZXRHbG9iYWxTY29wZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikK
IHsKICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKHdyYXBwZWQoKS5wYWludERlZmluaXRpb25M
b2NrKCkpOwogICAgIGZvciAoYXV0byYgcmVnaXN0ZXJlZCA6IHdyYXBwZWQoKS5wYWludERlZmlu
aXRpb25NYXAoKS52YWx1ZXMoKSkgewpAQCAtNDAsNSArNDIsOSBAQCB2b2lkIEpTUGFpbnRXb3Jr
bGV0R2xvYmFsU2NvcGU6OnZpc2l0QWRkCiAgICAgfQogfQogCi19Cit0ZW1wbGF0ZSB2b2lkIEpT
UGFpbnRXb3JrbGV0R2xvYmFsU2NvcGU6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6QWJz
dHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU1BhaW50V29ya2xldEdsb2JhbFNj
b3BlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJik7CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKKwogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU1BheW1lbnRNZXRob2RDaGFuZ2VFdmVudEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNQYXltZW50TWV0aG9kQ2hhbmdlRXZlbnRDdXN0
b20uY3BwCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U1BheW1lbnRNZXRob2RDaGFuZ2VFdmVudEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQx
LDcgKzQxLDkgQEAgSlNDOjpKU1ZhbHVlIEpTUGF5bWVudE1ldGhvZENoYW5nZUV2ZW50OgogICAg
IH0pOwogfQogCi12b2lkIEpTUGF5bWVudE1ldGhvZENoYW5nZUV2ZW50Ojp2aXNpdEFkZGl0aW9u
YWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy92b2lkIEpTUGF5bWVudE1l
dGhvZENoYW5nZUV2ZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9y
JiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNQYXltZW50TWV0
aG9kQ2hhbmdlRXZlbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3Ip
CiB7CiAgICAgV1RGOjpzd2l0Y2hPbih3cmFwcGVkKCkubWV0aG9kRGV0YWlscygpLCBbJnZpc2l0
b3JdKGNvbnN0IEpTVmFsdWVJbldyYXBwZWRPYmplY3QmIG1ldGhvZERldGFpbHMpIHsKICAgICAg
ICAgbWV0aG9kRGV0YWlscy52aXNpdCh2aXNpdG9yKTsKQEAgLTUxLDYgKzUzLDkgQEAgdm9pZCBK
U1BheW1lbnRNZXRob2RDaGFuZ2VFdmVudDo6dmlzaXRBZAogICAgIHdyYXBwZWQoKS5jYWNoZWRN
ZXRob2REZXRhaWxzKCkudmlzaXQodmlzaXRvcik7CiB9CiAKK3RlbXBsYXRlIHZvaWQgSlNQYXlt
ZW50TWV0aG9kQ2hhbmdlRXZlbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6QWJzdHJh
Y3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU1BheW1lbnRNZXRob2RDaGFuZ2VFdmVu
dDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYpOworCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoUEFZTUVOVF9SRVFVRVNUKQpJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNQYXltZW50UmVzcG9uc2VDdXN0b20uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUGF5bWVudFJlc3Bv
bnNlQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNQYXltZW50UmVzcG9uc2VDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNywx
MSArMzcsMTYgQEAgSlNDOjpKU1ZhbHVlIEpTUGF5bWVudFJlc3BvbnNlOjpkZXRhaWxzKAogICAg
IH0pOwogfQogCi12b2lkIEpTUGF5bWVudFJlc3BvbnNlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJl
bihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy92b2lkIEpTUGF5bWVudFJlc3BvbnNlOjp2
aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxh
dGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNQYXltZW50UmVzcG9uc2U6OnZpc2l0QWRkaXRp
b25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgd3JhcHBlZCgpLmNhY2hlZERl
dGFpbHMoKS52aXNpdCh2aXNpdG9yKTsKIH0KIAordGVtcGxhdGUgdm9pZCBKU1BheW1lbnRSZXNw
b25zZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJik7
Cit0ZW1wbGF0ZSB2b2lkIEpTUGF5bWVudFJlc3BvbnNlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJl
bihKU0M6OlNsb3RWaXNpdG9yJik7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlm
IC8vIEVOQUJMRShQQVlNRU5UX1JFUVVFU1QpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU1BlcmZvcm1hbmNlT2JzZXJ2ZXJDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUGVyZm9ybWFuY2VPYnNlcnZlckN1c3RvbS5jcHAJKHJl
dmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUGVyZm9ybWFu
Y2VPYnNlcnZlckN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDEyICszMSwxNyBAQAog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgSlNQZXJmb3JtYW5jZU9ic2VydmVyOjp2aXNp
dEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy92b2lkIEpT
UGVyZm9ybWFuY2VPYnNlcnZlcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90Vmlz
aXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTUGVyZm9y
bWFuY2VPYnNlcnZlcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikK
IHsKICAgICB3cmFwcGVkKCkuY2FsbGJhY2soKS52aXNpdEpTRnVuY3Rpb24odmlzaXRvcik7CiB9
CiAKLWJvb2wgSlNQZXJmb3JtYW5jZU9ic2VydmVyT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1
ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgSlNDOjpTbG90
VmlzaXRvciYsIGNvbnN0IGNoYXIqKiByZWFzb24pCit0ZW1wbGF0ZSB2b2lkIEpTUGVyZm9ybWFu
Y2VPYnNlcnZlcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpBYnN0cmFjdFNsb3RWaXNp
dG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTUGVyZm9ybWFuY2VPYnNlcnZlcjo6dmlzaXRBZGRpdGlv
bmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYpOworCitib29sIEpTUGVyZm9ybWFuY2VPYnNl
cnZlck93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVu
a25vd24+IGhhbmRsZSwgdm9pZCosIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYsIGNvbnN0IGNo
YXIqKiByZWFzb24pCiB7CiAgICAgaWYgKFVOTElLRUxZKHJlYXNvbikpCiAgICAgICAgICpyZWFz
b24gPSAiUmVnaXN0ZXJlZCBQZXJmb3JtYW5jZU9ic2VydmVyIGNhbGxiYWNrIjsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUG9wU3RhdGVFdmVudEN1c3RvbS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNQb3BTdGF0ZUV2ZW50Q3VzdG9t
LmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNQ
b3BTdGF0ZUV2ZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTAsOSArOTAsMTQgQEAg
SlNWYWx1ZSBKU1BvcFN0YXRlRXZlbnQ6OnN0YXRlKEpTR2xvYmFsTwogICAgIHJldHVybiBjYWNo
ZVN0YXRlKHJlc3VsdCk7CiB9CiAKLXZvaWQgSlNQb3BTdGF0ZUV2ZW50Ojp2aXNpdEFkZGl0aW9u
YWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy92b2lkIEpTUG9wU3RhdGVF
dmVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikK
K3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTUG9wU3RhdGVFdmVudDo6dmlzaXRB
ZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB3cmFwcGVkKCkuc3Rh
dGUoKS52aXNpdCh2aXNpdG9yKTsKIH0KIAordGVtcGxhdGUgdm9pZCBKU1BvcFN0YXRlRXZlbnQ6
OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVt
cGxhdGUgdm9pZCBKU1BvcFN0YXRlRXZlbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6
U2xvdFZpc2l0b3ImKTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNQcm9taXNlUmVqZWN0aW9uRXZlbnRDdXN0b20uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUHJvbWlzZVJlamVjdGlvbkV2
ZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNQcm9taXNlUmVqZWN0aW9uRXZlbnRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zMiw5ICszMiwxNCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgSlNQcm9taXNl
UmVqZWN0aW9uRXZlbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3Im
IHZpc2l0b3IpCisvL3ZvaWQgSlNQcm9taXNlUmVqZWN0aW9uRXZlbnQ6OnZpc2l0QWRkaXRpb25h
bENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPgordm9pZCBKU1Byb21pc2VSZWplY3Rpb25FdmVudDo6dmlzaXRBZGRpdGlvbmFsQ2hp
bGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB3cmFwcGVkKCkucmVhc29uKCkudmlzaXQo
dmlzaXRvcik7CiB9CiAKK3RlbXBsYXRlIHZvaWQgSlNQcm9taXNlUmVqZWN0aW9uRXZlbnQ6OnZp
c2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxh
dGUgdm9pZCBKU1Byb21pc2VSZWplY3Rpb25FdmVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4o
SlNDOjpTbG90VmlzaXRvciYpOworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1Jlc2l6ZU9ic2VydmVyQ3VzdG9tLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1Jlc2l6ZU9ic2VydmVyQ3VzdG9t
LmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNS
ZXNpemVPYnNlcnZlckN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDExICszMCwxNiBA
QAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgSlNSZXNpemVPYnNlcnZlcjo6dmlzaXRB
ZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vdm9pZCBKU1Jl
c2l6ZU9ic2VydmVyOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2
aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNSZXNpemVPYnNlcnZl
cjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBSZXNp
emVPYnNlcnZlckNhbGxiYWNrKiBjYWxsYmFjayA9IHdyYXBwZWQoKS5jYWxsYmFja0NvbmN1cnJl
bnRseSgpOwogICAgIGlmIChjYWxsYmFjaykKICAgICAgICAgY2FsbGJhY2stPnZpc2l0SlNGdW5j
dGlvbih2aXNpdG9yKTsKIH0KIAotfQordGVtcGxhdGUgdm9pZCBKU1Jlc2l6ZU9ic2VydmVyOjp2
aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBs
YXRlIHZvaWQgSlNSZXNpemVPYnNlcnZlcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpT
bG90VmlzaXRvciYpOworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU1Jlc2l6ZU9ic2VydmVyRW50cnlDdXN0b20uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUmVzaXplT2JzZXJ2ZXJFbnRyeUN1
c3RvbS5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTUmVzaXplT2JzZXJ2ZXJFbnRyeUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDEw
ICszMCwxNSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgSlNSZXNpemVPYnNlcnZl
ckVudHJ5Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9y
KQorLy92b2lkIEpTUmVzaXplT2JzZXJ2ZXJFbnRyeTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4o
SlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2
b2lkIEpTUmVzaXplT2JzZXJ2ZXJFbnRyeTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRv
ciYgdmlzaXRvcikKIHsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qocm9vdCh3cmFwcGVkKCku
dGFyZ2V0KCkpKTsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qod3JhcHBlZCgpLmNvbnRlbnRS
ZWN0KCkpOwogfQogCi19Cit0ZW1wbGF0ZSB2b2lkIEpTUmVzaXplT2JzZXJ2ZXJFbnRyeTo6dmlz
aXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0
ZSB2b2lkIEpTUmVzaXplT2JzZXJ2ZXJFbnRyeTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlND
OjpTbG90VmlzaXRvciYpOworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NWR1ZpZXdTcGVjQ3VzdG9tLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NWR1ZpZXdTcGVjQ3VzdG9tLmNwcAkocmV2
aXNpb24gMjcxNDQzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNTVkdWaWV3U3Bl
Y0N1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDEwICszMCwxNSBAQAogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLXZvaWQgSlNTVkdWaWV3U3BlYzo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRy
ZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vdm9pZCBKU1NWR1ZpZXdTcGVjOjp2aXNp
dEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8
dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNTVkdWaWV3U3BlYzo6dmlzaXRBZGRpdGlvbmFsQ2hp
bGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBBU1NFUlQod3JhcHBlZCgpLmNvbnRleHRF
bGVtZW50Q29uY3VycmVudGx5KCkuZ2V0KCkpOwogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChy
b290KHdyYXBwZWQoKS5jb250ZXh0RWxlbWVudENvbmN1cnJlbnRseSgpLmdldCgpKSk7CiB9CiAK
LX0KK3RlbXBsYXRlIHZvaWQgSlNTVkdWaWV3U3BlYzo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4o
SlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTU1ZHVmlld1NwZWM6
OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImKTsKKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNTZXJ2aWNl
V29ya2VyR2xvYmFsU2NvcGVDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTU2VydmljZVdvcmtlckdsb2JhbFNjb3BlQ3VzdG9tLmNwcAkocmV2aXNp
b24gMjcxNDQzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNTZXJ2aWNlV29ya2Vy
R2xvYmFsU2NvcGVDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCwxMiArMzQsMTcgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCi12b2lkIEpTU2Vy
dmljZVdvcmtlckdsb2JhbFNjb3BlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRv
ciYgdmlzaXRvcikKKy8vdm9pZCBKU1NlcnZpY2VXb3JrZXJHbG9iYWxTY29wZTo6dmlzaXRBZGRp
dGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPgordm9pZCBKU1NlcnZpY2VXb3JrZXJHbG9iYWxTY29wZTo6dmlzaXRBZGRpdGlvbmFs
Q2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qo
JndyYXBwZWQoKS5jbGllbnRzKCkpOwogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdCgmd3JhcHBl
ZCgpLnJlZ2lzdHJhdGlvbigpKTsKIH0KIAordGVtcGxhdGUgdm9pZCBKU1NlcnZpY2VXb3JrZXJH
bG9iYWxTY29wZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oQWJzdHJhY3RTbG90VmlzaXRvciYp
OwordGVtcGxhdGUgdm9pZCBKU1NlcnZpY2VXb3JrZXJHbG9iYWxTY29wZTo6dmlzaXRBZGRpdGlv
bmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAj
ZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU3R5bGVTaGVldEN1c3Rv
bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNTdHlsZVNo
ZWV0Q3VzdG9tLmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNTdHlsZVNoZWV0Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsMTEgKzMw
LDE2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBKU1N0eWxlU2hlZXQ6OnZpc2l0
QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3ZvaWQgSlNT
dHlsZVNoZWV0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNp
dG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNTdHlsZVNoZWV0Ojp2aXNp
dEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHZpc2l0b3IuYWRk
T3BhcXVlUm9vdChyb290KCZ3cmFwcGVkKCkpKTsKIH0KIAordGVtcGxhdGUgdm9pZCBKU1N0eWxl
U2hlZXQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3Rl
bXBsYXRlIHZvaWQgSlNTdHlsZVNoZWV0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90Vmlz
aXRvciYpOworCiBKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkpTR2xvYmFsT2Jq
ZWN0KiwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmPFN0eWxlU2hlZXQ+JiYg
c3R5bGVTaGVldCkKIHsKICAgICBpZiAoc3R5bGVTaGVldC0+aXNDU1NTdHlsZVNoZWV0KCkpCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1RleHRUcmFja0N1ZUN1c3RvbS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNUZXh0VHJhY2tDdWVD
dXN0b20uY3BwCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU1RleHRUcmFja0N1ZUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDcg
QEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKLWJvb2wgSlNU
ZXh0VHJhY2tDdWVPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8
SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3Qg
Y2hhcioqIHJlYXNvbikKK2Jvb2wgSlNUZXh0VHJhY2tDdWVPd25lcjo6aXNSZWFjaGFibGVGcm9t
T3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBBYnN0
cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQogewogICAgIEpT
VGV4dFRyYWNrQ3VlKiBqc1RleHRUcmFja0N1ZSA9IGpzQ2FzdDxKU1RleHRUcmFja0N1ZSo+KGhh
bmRsZS5zbG90KCktPmFzQ2VsbCgpKTsKICAgICBUZXh0VHJhY2tDdWUmIHRleHRUcmFja0N1ZSA9
IGpzVGV4dFRyYWNrQ3VlLT53cmFwcGVkKCk7CkBAIC04MiwxMiArODIsMTcgQEAgSlNWYWx1ZSB0
b0pTKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYgogICAgIHJldHVybiB3cmFwKGxleGljYWxH
bG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdCwgY3VlKTsKIH0KIAotdm9pZCBKU1RleHRUcmFja0N1
ZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3ZvaWQg
SlNUZXh0VHJhY2tDdWU6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNp
dG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNUZXh0VHJhY2tDdWU6OnZp
c2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgaWYgKFRleHRU
cmFjayogdGV4dFRyYWNrID0gd3JhcHBlZCgpLnRyYWNrKCkpCiAgICAgICAgIHZpc2l0b3IuYWRk
T3BhcXVlUm9vdChyb290KHRleHRUcmFjaykpOwogfQogCit0ZW1wbGF0ZSB2b2lkIEpTVGV4dFRy
YWNrQ3VlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0
ZW1wbGF0ZSB2b2lkIEpTVGV4dFRyYWNrQ3VlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90
VmlzaXRvciYpOworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZgpJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNUZXh0VHJhY2tDdXN0b20uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVGV4dFRyYWNrQ3VzdG9tLmNwcAkocmV2
aXNpb24gMjcxNDQzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNUZXh0VHJhY2tD
dXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiwxMSArMzYsMTYgQEAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKLXZvaWQgSlNUZXh0VHJhY2s6OnZpc2l0
QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy92b2lkIEpTVGV4dFRy
YWNrOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBs
YXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTVGV4dFRyYWNrOjp2aXNpdEFkZGl0aW9uYWxD
aGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChy
b290KCZ3cmFwcGVkKCkpKTsKIH0KIAordGVtcGxhdGUgdm9pZCBKU1RleHRUcmFjazo6dmlzaXRB
ZGRpdGlvbmFsQ2hpbGRyZW4oQWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBK
U1RleHRUcmFjazo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKKwogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTVGV4dFRyYWNrTGlzdEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNUZXh0VHJhY2tMaXN0Q3VzdG9tLmNwcAkocmV2aXNpb24gMjcx
NDQzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNUZXh0VHJhY2tMaXN0Q3VzdG9t
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsMTEgKzM2LDE2IEBACiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCi12b2lkIEpTVGV4dFRyYWNrTGlzdDo6dmlzaXRB
ZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vdm9pZCBKU1Rl
eHRUcmFja0xpc3Q6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZp
c2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1RleHRUcmFja0xpc3Q6
OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgdmlzaXRv
ci5hZGRPcGFxdWVSb290KHJvb3Qod3JhcHBlZCgpLmVsZW1lbnQoKSkpOwogfQogICAgIAordGVt
cGxhdGUgdm9pZCBKU1RleHRUcmFja0xpc3Q6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEFic3Ry
YWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNUZXh0VHJhY2tMaXN0Ojp2aXNpdEFk
ZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYpOworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CiAKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNUcmVlV2Fsa2Vy
Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1Ry
ZWVXYWxrZXJDdXN0b20uY3BwCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU1RyZWVXYWxrZXJDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNSwx
MCArMjUsMTUgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIEpTVHJlZVdhbGtlcjo6
dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vdm9p
ZCBKU1RyZWVXYWxrZXI6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3Im
IHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1RyZWVXYWxrZXI6
OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgaWYgKE5v
ZGVGaWx0ZXIqIGZpbHRlciA9IHdyYXBwZWQoKS5maWx0ZXIoKSkKICAgICAgICAgdmlzaXRvci5h
ZGRPcGFxdWVSb290KGZpbHRlcik7CiB9CiAKLX0KK3RlbXBsYXRlIHZvaWQgSlNUcmVlV2Fsa2Vy
Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3Rl
bXBsYXRlIHZvaWQgSlNUcmVlV2Fsa2VyOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNs
b3RWaXNpdG9yJik7CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTVW5kb0l0ZW1DdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVW5kb0l0ZW1DdXN0b20uY3BwCShyZXZpc2lvbiAyNzE0
NDMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1VuZG9JdGVtQ3VzdG9tLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjksMTMgKzI5LDE4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAotdm9pZCBKU1VuZG9JdGVtOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNp
dG9yJiB2aXNpdG9yKQorLy92b2lkIEpTVW5kb0l0ZW06OnZpc2l0QWRkaXRpb25hbENoaWxkcmVu
KEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgor
dm9pZCBKU1VuZG9JdGVtOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9y
KQogewogICAgIHdyYXBwZWQoKS51bmRvSGFuZGxlcigpLnZpc2l0SlNGdW5jdGlvbih2aXNpdG9y
KTsKICAgICB3cmFwcGVkKCkucmVkb0hhbmRsZXIoKS52aXNpdEpTRnVuY3Rpb24odmlzaXRvcik7
CiB9CiAKLWJvb2wgSlNVbmRvSXRlbU93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhK
U0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIEpTQzo6U2xvdFZpc2l0b3Im
IHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCit0ZW1wbGF0ZSB2b2lkIEpTVW5kb0l0ZW06
OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVt
cGxhdGUgdm9pZCBKU1VuZG9JdGVtOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RW
aXNpdG9yJik7CisKK2Jvb2wgSlNVbmRvSXRlbU93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVS
b290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIEpTQzo6QWJzdHJh
Y3RTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikKIHsKICAgICBpZiAo
VU5MSUtFTFkocmVhc29uKSkKICAgICAgICAgKnJlYXNvbiA9ICJEb2N1bWVudCBpcyBhbiBvcGFx
dWUgcm9vdC4iOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNWYWx1ZUluV3Jh
cHBlZE9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
VmFsdWVJbldyYXBwZWRPYmplY3QuaAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNWYWx1ZUluV3JhcHBlZE9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBA
IC00MCw3ICs0MCw4IEBAIHB1YmxpYzoKICAgICBvcGVyYXRvciBKU0M6OkpTVmFsdWUoKSBjb25z
dDsKICAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3Q7CiAgICAgSlNWYWx1ZUluV3Jh
cHBlZE9iamVjdCYgb3BlcmF0b3I9KGNvbnN0IEpTVmFsdWVJbldyYXBwZWRPYmplY3QmIG90aGVy
KTsKLSAgICB2b2lkIHZpc2l0KEpTQzo6U2xvdFZpc2l0b3ImKSBjb25zdDsKKy8vICAgIHZvaWQg
dmlzaXQoSlNDOjpTbG90VmlzaXRvciYpIGNvbnN0OworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZp
c2l0b3I+IHZvaWQgdmlzaXQoVmlzaXRvciYpIGNvbnN0OwogICAgIHZvaWQgY2xlYXIoKTsKIAog
cHJpdmF0ZToKQEAgLTk4LDcgKzk5LDggQEAgaW5saW5lIEpTVmFsdWVJbldyYXBwZWRPYmplY3Qm
IEpTVmFsdWVJbgogICAgIHJldHVybiAqdGhpczsKIH0KIAotaW5saW5lIHZvaWQgSlNWYWx1ZUlu
V3JhcHBlZE9iamVjdDo6dmlzaXQoSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikgY29uc3QKK3Rl
bXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+CitpbmxpbmUgdm9pZCBKU1ZhbHVlSW5XcmFwcGVkT2Jq
ZWN0Ojp2aXNpdChWaXNpdG9yJiB2aXNpdG9yKSBjb25zdAogewogICAgIHJldHVybiBXVEY6OnN3
aXRjaE9uKG1fdmFsdWUsIFtdIChKU0M6OkpTVmFsdWUpIHsKICAgICAgICAgLy8gTm90aGluZyB0
byB2aXNpdC4KQEAgLTEwNyw2ICsxMDksOSBAQCBpbmxpbmUgdm9pZCBKU1ZhbHVlSW5XcmFwcGVk
T2JqZWN0Ojp2aXNpCiAgICAgfSk7CiB9CiAKK3RlbXBsYXRlIHZvaWQgSlNWYWx1ZUluV3JhcHBl
ZE9iamVjdDo6dmlzaXQoSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJikgY29uc3Q7Cit0ZW1wbGF0
ZSB2b2lkIEpTVmFsdWVJbldyYXBwZWRPYmplY3Q6OnZpc2l0KEpTQzo6U2xvdFZpc2l0b3ImKSBj
b25zdDsKKwogaW5saW5lIHZvaWQgSlNWYWx1ZUluV3JhcHBlZE9iamVjdDo6Y2xlYXIoKQogewog
ICAgIFdURjo6c3dpdGNoT24obV92YWx1ZSwgW10gKFdlYWsmIHZhbHVlKSB7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1ZpZGVvVHJhY2tDdXN0b20uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVmlkZW9UcmFja0N1c3RvbS5jcHAJKHJl
dmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVmlkZW9UcmFj
a0N1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDExICszNSwxNiBAQAogbmFtZXNwYWNl
IFdlYkNvcmUgewogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAotdm9pZCBKU1ZpZGVvVHJhY2s6OnZp
c2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy92b2lkIEpTVmlk
ZW9UcmFjazo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0
ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1ZpZGVvVHJhY2s6OnZpc2l0QWRkaXRp
b25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVS
b290KHJvb3QoJndyYXBwZWQoKSkpOwogfQogCit0ZW1wbGF0ZSB2b2lkIEpTVmlkZW9UcmFjazo6
dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1w
bGF0ZSB2b2lkIEpTVmlkZW9UcmFjazo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90
VmlzaXRvciYpOworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZgpJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNWaWRlb1RyYWNrTGlzdEN1c3RvbS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNWaWRlb1RyYWNrTGlzdEN1c3Rv
bS5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
VmlkZW9UcmFja0xpc3RDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSwxMSArMzUsMTYg
QEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKLXZvaWQgSlNW
aWRlb1RyYWNrTGlzdDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0
b3IpCisvL3ZvaWQgSlNWaWRlb1RyYWNrTGlzdDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xv
dFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1Zp
ZGVvVHJhY2tMaXN0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQog
ewogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChyb290KHdyYXBwZWQoKS5lbGVtZW50KCkpKTsK
IH0KIAordGVtcGxhdGUgdm9pZCBKU1ZpZGVvVHJhY2tMaXN0Ojp2aXNpdEFkZGl0aW9uYWxDaGls
ZHJlbihBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTVmlkZW9UcmFja0xp
c3Q6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CisKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKIAogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U1dlYkdMMlJlbmRlcmluZ0NvbnRleHRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViR0wyUmVuZGVyaW5nQ29udGV4dEN1c3RvbS5jcHAJKHJl
dmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViR0wyUmVu
ZGVyaW5nQ29udGV4dEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDEyICszMywxNyBA
QAogbmFtZXNwYWNlIFdlYkNvcmUgewogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAotdm9pZCBKU1dl
YkdMMlJlbmRlcmluZ0NvbnRleHQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9y
JiB2aXNpdG9yKQorLy92b2lkIEpTV2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6dmlzaXRBZGRpdGlv
bmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNp
dG9yPgordm9pZCBKU1dlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OnZpc2l0QWRkaXRpb25hbENoaWxk
cmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KCZ3cmFw
cGVkKCkpOwogICAgIHdyYXBwZWQoKS5hZGRNZW1iZXJzVG9PcGFxdWVSb290cyh2aXNpdG9yKTsK
IH0KIAordGVtcGxhdGUgdm9pZCBKU1dlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OnZpc2l0QWRkaXRp
b25hbENoaWxkcmVuKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBK
U1dlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xv
dFZpc2l0b3ImKTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxF
KFdFQkdMKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJHTFJlbmRlcmlu
Z0NvbnRleHRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTV2ViR0xSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcAkocmV2aXNpb24gMjcxNDQzKQor
KysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRDdXN0
b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMywxMiArMzMsMTcgQEAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKLXZvaWQgSlNXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy92b2lk
IEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90Vmlz
aXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTV2ViR0xS
ZW5kZXJpbmdDb250ZXh0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9y
KQogewogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdCgmd3JhcHBlZCgpKTsKICAgICB3cmFwcGVk
KCkuYWRkTWVtYmVyc1RvT3BhcXVlUm9vdHModmlzaXRvcik7CiB9CiAKK3RlbXBsYXRlIHZvaWQg
SlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEFic3RyYWN0
U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZp
c2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CisKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShXRUJHTCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTV29ya2VyR2xvYmFsU2NvcGVCYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckdsb2JhbFNjb3BlQmFzZS5jcHAJKHJldmlz
aW9uIDI3MTQ0MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyR2xvYmFs
U2NvcGVCYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODcsNyArODcsOCBAQCB2b2lkIEpTV29y
a2VyR2xvYmFsU2NvcGVCYXNlOjpmaW5pc2hDcmVhCiAgICAgQVNTRVJUKGluaGVyaXRzKHZtLCBp
bmZvKCkpKTsKIH0KIAotdm9pZCBKU1dvcmtlckdsb2JhbFNjb3BlQmFzZTo6dmlzaXRDaGlsZHJl
bihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUg
VmlzaXRvcj4KK3ZvaWQgSlNXb3JrZXJHbG9iYWxTY29wZUJhc2U6OnZpc2l0Q2hpbGRyZW5JbXBs
KEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU1dvcmtlckdsb2JhbFNj
b3BlQmFzZSogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1dvcmtlckdsb2JhbFNjb3BlQmFzZSo+KGNl
bGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsK
QEAgLTk1LDYgKzk2LDggQEAgdm9pZCBKU1dvcmtlckdsb2JhbFNjb3BlQmFzZTo6dmlzaXRDaGls
ZAogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fcHJveHkpOwogfQogCitERUZJTkVf
VklTSVRfQ0hJTERSRU4oSlNXb3JrZXJHbG9iYWxTY29wZUJhc2UpOworCiB2b2lkIEpTV29ya2Vy
R2xvYmFsU2NvcGVCYXNlOjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKIHsKICAgICBzdGF0aWNfY2Fz
dDxKU1dvcmtlckdsb2JhbFNjb3BlQmFzZSo+KGNlbGwpLT5KU1dvcmtlckdsb2JhbFNjb3BlQmFz
ZTo6fkpTV29ya2VyR2xvYmFsU2NvcGVCYXNlKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU1dvcmtlckdsb2JhbFNjb3BlQmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyR2xvYmFsU2NvcGVCYXNlLmgJKHJldmlzaW9uIDI3
MTQ0MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyR2xvYmFsU2NvcGVC
YXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTc5LDcgKzc5LDcgQEAgcHJvdGVjdGVkOgogICAgIEpT
V29ya2VyR2xvYmFsU2NvcGVCYXNlKEpTQzo6Vk0mLCBKU0M6OlN0cnVjdHVyZSosIFJlZlB0cjxX
b3JrZXJHbG9iYWxTY29wZT4mJik7CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJiwg
SlNDOjpKU1Byb3h5Kik7CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQzo6SlND
ZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAK
IHByaXZhdGU6CiAgICAgUmVmUHRyPFdvcmtlckdsb2JhbFNjb3BlPiBtX3dyYXBwZWQ7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckdsb2JhbFNjb3BlQ3VzdG9tLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckdsb2Jh
bFNjb3BlQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNXb3JrZXJHbG9iYWxTY29wZUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMzLDcgKzMzLDkgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBKU0M7
CiAKLXZvaWQgSlNXb3JrZXJHbG9iYWxTY29wZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xv
dFZpc2l0b3ImIHZpc2l0b3IpCisvL3ZvaWQgSlNXb3JrZXJHbG9iYWxTY29wZTo6dmlzaXRBZGRp
dGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPgordm9pZCBKU1dvcmtlckdsb2JhbFNjb3BlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJl
bihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGlmIChhdXRvKiBsb2NhdGlvbiA9IHdyYXBwZWQo
KS5vcHRpb25hbExvY2F0aW9uKCkpCiAgICAgICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChsb2Nh
dGlvbik7CkBAIC00OCw2ICs1MCw5IEBAIHZvaWQgSlNXb3JrZXJHbG9iYWxTY29wZTo6dmlzaXRB
ZGRpdGlvbmEKICAgICB3cmFwcGVkKCkudmlzaXRKU0V2ZW50TGlzdGVuZXJzKHZpc2l0b3IpOwog
fQogCit0ZW1wbGF0ZSB2b2lkIEpTV29ya2VyR2xvYmFsU2NvcGU6OnZpc2l0QWRkaXRpb25hbENo
aWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNXb3JrZXJHbG9i
YWxTY29wZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKKwogSlNWYWx1
ZSBKU1dvcmtlckdsb2JhbFNjb3BlOjpxdWV1ZU1pY3JvdGFzayhKU0dsb2JhbE9iamVjdCYgbGV4
aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lJiBjYWxsRnJhbWUpCiB7CiAgICAgVk0mIHZtID0g
bGV4aWNhbEdsb2JhbE9iamVjdC52bSgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNXb3JrZXJOYXZpZ2F0b3JDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyTmF2aWdhdG9yQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcx
NDQzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrZXJOYXZpZ2F0b3JDdXN0
b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw5ICsyOCwxNCBAQAogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLXZvaWQgSlNXb3JrZXJOYXZpZ2F0b3I6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVu
KEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3ZvaWQgSlNXb3JrZXJOYXZpZ2F0b3I6OnZp
c2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0
ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1dvcmtlck5hdmlnYXRvcjo6dmlzaXRBZGRpdGlv
bmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJv
b3Qoc3RhdGljX2Nhc3Q8TmF2aWdhdG9yQmFzZSo+KCZ3cmFwcGVkKCkpKTsKIH0KIAotfQordGVt
cGxhdGUgdm9pZCBKU1dvcmtlck5hdmlnYXRvcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlND
OjpBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTV29ya2VyTmF2aWdhdG9y
Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJik7CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2xl
dEdsb2JhbFNjb3BlQmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNXb3JrbGV0R2xvYmFsU2NvcGVCYXNlLmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrbGV0R2xvYmFsU2NvcGVCYXNlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNzcsNyArNzcsOCBAQCB2b2lkIEpTV29ya2xldEdsb2JhbFNjb3Bl
QmFzZTo6ZmluaXNoQ3JlCiAgICAgQVNTRVJUKGluaGVyaXRzKHZtLCBpbmZvKCkpKTsKIH0KIAot
dm9pZCBKU1dvcmtsZXRHbG9iYWxTY29wZUJhc2U6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxs
LCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lk
IEpTV29ya2xldEdsb2JhbFNjb3BlQmFzZTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxs
LCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNX
b3JrbGV0R2xvYmFsU2NvcGVCYXNlKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhF
UklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtODUsNiArODYsOCBAQCB2b2lkIEpTV29ya2xl
dEdsb2JhbFNjb3BlQmFzZTo6dmlzaXRDaGlsCiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVj
dC0+bV9wcm94eSk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU1dvcmtsZXRHbG9iYWxT
Y29wZUJhc2UpOworCiB2b2lkIEpTV29ya2xldEdsb2JhbFNjb3BlQmFzZTo6ZGVzdHJveShKU0Nl
bGwqIGNlbGwpCiB7CiAgICAgc3RhdGljX2Nhc3Q8SlNXb3JrbGV0R2xvYmFsU2NvcGVCYXNlKj4o
Y2VsbCktPkpTV29ya2xldEdsb2JhbFNjb3BlQmFzZTo6fkpTV29ya2xldEdsb2JhbFNjb3BlQmFz
ZSgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrbGV0R2xvYmFsU2Nv
cGVCYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXb3Jr
bGV0R2xvYmFsU2NvcGVCYXNlLmgJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTV29ya2xldEdsb2JhbFNjb3BlQmFzZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC02Nyw3ICs2Nyw3IEBAIHByb3RlY3RlZDoKICAgICBKU1dvcmtsZXRHbG9iYWxTY29wZUJhc2Uo
SlNDOjpWTSYsIEpTQzo6U3RydWN0dXJlKiwgUmVmUHRyPFdvcmtsZXRHbG9iYWxTY29wZT4mJik7
CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJiwgSlNDOjpKU1Byb3h5Kik7CiAKLSAg
ICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRv
ciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKIHByaXZhdGU6CiAgICAgUmVmUHRy
PFdvcmtsZXRHbG9iYWxTY29wZT4gbV93cmFwcGVkOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNYTUxIdHRwUmVxdWVzdEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNYTUxIdHRwUmVxdWVzdEN1c3RvbS5jcHAJKHJldmlzaW9u
IDI3MTQ0MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTWE1MSHR0cFJlcXVlc3RD
dXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0MSw5IEBACiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCi12b2lkIEpTWE1MSHR0cFJlcXVlc3Q6OnZp
c2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy92b2lkIEpTWE1M
SHR0cFJlcXVlc3Q6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9y
KQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNYTUxIdHRwUmVxdWVzdDo6dmlz
aXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBpZiAoYXV0byog
dXBsb2FkID0gd3JhcHBlZCgpLm9wdGlvbmFsVXBsb2FkKCkpCiAgICAgICAgIHZpc2l0b3IuYWRk
T3BhcXVlUm9vdCh1cGxvYWQpOwpAQCAtNTAsNiArNTIsOSBAQCB2b2lkIEpTWE1MSHR0cFJlcXVl
c3Q6OnZpc2l0QWRkaXRpb25hbENoCiAgICAgICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChyZXNw
b25zZURvY3VtZW50KTsKIH0KIAordGVtcGxhdGUgdm9pZCBKU1hNTEh0dHBSZXF1ZXN0Ojp2aXNp
dEFkZGl0aW9uYWxDaGlsZHJlbihBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lk
IEpTWE1MSHR0cFJlcXVlc3Q6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJik7
CisKIEpTVmFsdWUgSlNYTUxIdHRwUmVxdWVzdDo6cmVzcG9uc2UoSlNHbG9iYWxPYmplY3QmIGxl
eGljYWxHbG9iYWxPYmplY3QpIGNvbnN0CiB7CiAgICAgYXV0byBjYWNoZVJlc3VsdCA9IFsmXSAo
SlNWYWx1ZSB2YWx1ZSkgLT4gSlNWYWx1ZSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU1hQYXRoUmVzdWx0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU1hQYXRoUmVzdWx0Q3VzdG9tLmNwcAkocmV2aXNpb24gMjcxNDQzKQor
KysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNYUGF0aFJlc3VsdEN1c3RvbS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDkgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12
b2lkIEpTWFBhdGhSZXN1bHQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0
b3ImIHZpc2l0b3IpCisvL3ZvaWQgSlNYUGF0aFJlc3VsdDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRy
ZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+
Cit2b2lkIEpTWFBhdGhSZXN1bHQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZp
c2l0b3IpCiB7CiAgICAgYXV0byYgdmFsdWUgPSB3cmFwcGVkKCkudmFsdWUoKTsKICAgICBpZiAo
dmFsdWUuaXNOb2RlU2V0KCkpIHsKQEAgLTQxLDQgKzQzLDcgQEAgdm9pZCBKU1hQYXRoUmVzdWx0
Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZAogICAgIH0KIH0KIAordGVtcGxhdGUgdm9pZCBKU1hQYXRo
UmVzdWx0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3Im
KTsKK3RlbXBsYXRlIHZvaWQgSlNYUGF0aFJlc3VsdDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4o
SlNDOjpTbG90VmlzaXRvciYpOworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dlYkNvcmVUeXBlZEFycmF5
Q29udHJvbGxlci5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL1dlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTU2LDcgKzU2LDcgQEAgYm9vbCBXZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXI6OmlzQXRvbQog
ICAgIHJldHVybiBtX2FsbG93QXRvbWljc1dhaXQ7CiB9CiAKLWJvb2wgV2ViQ29yZVR5cGVkQXJy
YXlDb250cm9sbGVyOjpKU0FycmF5QnVmZmVyT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJv
b3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgSlNDOjpTbG90Vmlz
aXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikKK2Jvb2wgV2ViQ29yZVR5cGVkQXJy
YXlDb250cm9sbGVyOjpKU0FycmF5QnVmZmVyT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJv
b3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgSlNDOjpBYnN0cmFj
dFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQogewogICAgIGlmIChV
TkxJS0VMWShyZWFzb24pKQogICAgICAgICAqcmVhc29uID0gIkFycmF5QnVmZmVyIGlzIG9wYXF1
ZSByb290IjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dlYkNvcmVUeXBlZEFy
cmF5Q29udHJvbGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L1dlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlci5oCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXIuaAkod29y
a2luZyBjb3B5KQpAQCAtNDgsNyArNDgsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIGNsYXNz
IEpTQXJyYXlCdWZmZXJPd25lciA6IHB1YmxpYyBKU0M6OldlYWtIYW5kbGVPd25lciB7CiAgICAg
cHVibGljOgotICAgICAgICBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFu
ZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6U2xvdFZpc2l0b3ImLCBjb25z
dCBjaGFyKiopIG92ZXJyaWRlOworICAgICAgICBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJv
b3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6QWJzdHJh
Y3RTbG90VmlzaXRvciYsIGNvbnN0IGNoYXIqKikgb3ZlcnJpZGU7CiAgICAgICAgIHZvaWQgZmlu
YWxpemUoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCkgb3ZlcnJpZGU7
CiAgICAgfTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2Vu
ZXJhdG9ySlMucG0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy9Db2RlR2VuZXJhdG9ySlMucG0JKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCSh3b3JraW5nIGNvcHkpCkBAIC0z
MDc4LDggKzMwNzgsMTAgQEAgc3ViIEdlbmVyYXRlSGVhZGVyCiAKICAgICAjIHZpc2l0IGZ1bmN0
aW9uCiAgICAgaWYgKCRuZWVkc1Zpc2l0Q2hpbGRyZW4pIHsKLSAgICAgICAgcHVzaChAaGVhZGVy
Q29udGVudCwgIiAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIEpTQzo6U2xv
dFZpc2l0b3ImKTtcbiIpOwotICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHZvaWQg
dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYpO1xuIikgaWYgJGludGVy
ZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57SlNDdXN0b21NYXJrRnVuY3Rpb259OworICAgICAg
ICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47XG4iKTsK
KyMgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgdm9pZCB2aXNpdEFkZGl0aW9uYWxD
aGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJik7XG4iKSBpZiAkaW50ZXJmYWNlLT5leHRlbmRlZEF0
dHJpYnV0ZXMtPntKU0N1c3RvbU1hcmtGdW5jdGlvbn07ICMgbWxhbQorIyAgICAgICAgcHVzaChA
aGVhZGVyQ29udGVudCwgIiAgICB2b2lkIHZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6QWJz
dHJhY3RTbG90VmlzaXRvciYpO1xuIikgaWYgJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVz
LT57SlNDdXN0b21NYXJrRnVuY3Rpb259OworICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAi
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgdmlzaXRBZGRpdGlvbmFsQ2hpbGRy
ZW4oVmlzaXRvciYpO1xuIikgaWYgJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57SlND
dXN0b21NYXJrRnVuY3Rpb259OwogICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiXG4iKTsK
IAogICAgICAgICBpZiAoJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57SlNDdXN0b21N
YXJrRnVuY3Rpb259KSB7CkBAIC0zMDk0LDcgKzMwOTYsOSBAQCBzdWIgR2VuZXJhdGVIZWFkZXIK
ICAgICAgICAgICAgICMgdGhhdCB0aGUgR0MgY2FsbHMgdG8gYXNrIGFuIG9iamVjdCBpcyBpdCB3
b3VsZCBsaWtlIHRvIG1hcmsgYW55dGhpbmcgZWxzZSBhZnRlciB0aGUKICAgICAgICAgICAgICMg
cHJvZ3JhbSByZXN1bWVkIHNpbmNlIHRoZSBsYXN0IGNhbGwgdG8gdmlzaXRDaGlsZHJlbiBvciB2
aXNpdE91dHB1dENvbnN0cmFpbnRzLiBTaW5jZQogICAgICAgICAgICAgIyB0aGlzIGp1c3QgY2Fs
bHMgdmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4sIHlvdSB1c3VhbGx5IGRvbid0IGhhdmUgdG8gd29y
cnkgYWJvdXQgdGhpcy4KLSAgICAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgc3Rh
dGljIHZvaWQgdmlzaXRPdXRwdXRDb25zdHJhaW50cyhKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9y
Jik7XG4iKTsKKyAgICAgICAgICAgICMgbWxhbSBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHN0
YXRpYyB2b2lkIHZpc2l0T3V0cHV0Q29uc3RyYWludHMoSlNDZWxsKiwgSlNDOjpTbG90VmlzaXRv
ciYpO1xuIik7CisgICAgICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHN0YXRpYyB2
b2lkIHZpc2l0T3V0cHV0Q29uc3RyYWludHMoSlNDZWxsKiwgSlNDOjpBYnN0cmFjdFNsb3RWaXNp
dG9yJik7XG4iKTsKKyAgICAgICAgICAgICMgbWxhbSBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAg
IERFQ0xBUkVfVklTSVRfT1VUUFVUX0NPTlNUUkFJTlRTO1xuIik7CiAgICAgICAgIH0KICAgICB9
CiAKQEAgLTMyMTUsNyArMzIxOSw3IEBAIHN1YiBHZW5lcmF0ZUhlYWRlcgogICAgICAgICB9CiAg
ICAgICAgICRoZWFkZXJJbmNsdWRlc3siPHd0Zi9OZXZlckRlc3Ryb3llZC5oPiJ9ID0gMTsKICAg
ICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgInB1YmxpYzpcbiIpOwotICAgICAgICBwdXNoKEBo
ZWFkZXJDb250ZW50LCAiICAgIGJvb2wgaXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpI
YW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCwgSlNDOjpTbG90VmlzaXRvciYsIGNv
bnN0IGNoYXIqKikgJHtvdmVycmlkZURlY2x9O1xuIik7CisgICAgICAgIHB1c2goQGhlYWRlckNv
bnRlbnQsICIgICAgYm9vbCBpc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxK
U0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0LCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImLCBj
b25zdCBjaGFyKiopICR7b3ZlcnJpZGVEZWNsfTtcbiIpOwogICAgICAgICBwdXNoKEBoZWFkZXJD
b250ZW50LCAiICAgIHZvaWQgZmluYWxpemUoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9p
ZCogY29udGV4dCkgJHtvdmVycmlkZURlY2x9O1xuIik7CiAgICAgICAgIHB1c2goQGhlYWRlckNv
bnRlbnQsICJ9O1xuIik7CiAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJcbiIpOwpAQCAt
NDkyOCw2ICs0OTMyLDcgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICBBZGRUb0lt
cGxJbmNsdWRlcygiRE9NSXNvU3Vic3BhY2VzLmgiKTsKICAgICBBZGRUb0ltcGxJbmNsdWRlcygi
V2ViQ29yZUpTQ2xpZW50RGF0YS5oIik7CiAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIjxKYXZhU2Ny
aXB0Q29yZS9KU0Rlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZS5oPiIpOworICAgIEFkZFRv
SW1wbEluY2x1ZGVzKCI8SmF2YVNjcmlwdENvcmUvU2xvdFZpc2l0b3JNYWNyb3MuaD4iKTsKICAg
ICBBZGRUb0ltcGxJbmNsdWRlcygiPEphdmFTY3JpcHRDb3JlL1N1YnNwYWNlSW5saW5lcy5oPiIp
OwogICAgIHB1c2goQGltcGxDb250ZW50LCAiSlNDOjpJc29TdWJzcGFjZSogJHtjbGFzc05hbWV9
OjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pXG4iKTsKICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIntcbiIpOwpAQCAtNDk1NSw3ICs0OTYwLDggQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRp
b24KICAgICBwdXNoKEBpbXBsQ29udGVudCwgIn1cblxuIik7CiAKICAgICBpZiAoJG5lZWRzVmlz
aXRDaGlsZHJlbikgewotICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgInZvaWQgJHtjbGFzc05h
bWV9Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpXG4i
KTsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
PlxuIik7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAidm9pZCAke2NsYXNzTmFtZX06OnZp
c2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcilcbiIpOwogICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgIntcbiIpOwogICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIiAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PCR7Y2xhc3NOYW1lfSo+KGNlbGwpO1xu
Iik7CiAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5I
RVJJVFModGhpc09iamVjdCwgaW5mbygpKTtcbiIpOwpAQCAtNDk4MCw4ICs0OTg2LDEwIEBAIHN1
YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICJ9XG5cbiIpOworICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIkRFRklORV9WSVNJVF9DSElMRFJFTigke2NsYXNzTmFtZX0pO1xuXG4iKTsKKwogICAgICAg
ICBpZiAoJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57SlNDdXN0b21NYXJrRnVuY3Rp
b259KSB7Ci0gICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgInZvaWQgJHtjbGFzc05hbWV9
Ojp2aXNpdE91dHB1dENvbnN0cmFpbnRzKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0
b3IpXG4iKTsKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAidm9pZCAke2NsYXNzTmFt
ZX06OnZpc2l0T3V0cHV0Q29uc3RyYWludHMoSlNDZWxsKiBjZWxsLCBBYnN0cmFjdFNsb3RWaXNp
dG9yJiB2aXNpdG9yKVxuIik7CiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIntcbiIp
OwogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgYXV0byogdGhpc09iamVjdCA9
IGpzQ2FzdDwke2NsYXNzTmFtZX0qPihjZWxsKTtcbiIpOwogICAgICAgICAgICAgcHVzaChAaW1w
bENvbnRlbnQsICIgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZv
KCkpO1xuIik7CkBAIC01MDIyLDcgKzUwMzAsNyBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlv
bgogICAgIH0KIAogICAgIGlmIChTaG91bGRHZW5lcmF0ZVdyYXBwZXJPd25lckNvZGUoJGhhc1Bh
cmVudCwgJGludGVyZmFjZSkgJiYgIUdldEN1c3RvbUlzUmVhY2hhYmxlKCRpbnRlcmZhY2UpKSB7
Ci0gICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiYm9vbCBKUyR7aW50ZXJmYWNlTmFtZX1Pd25l
cjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBo
YW5kbGUsIHZvaWQqLCBTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbilc
biIpOworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgImJvb2wgSlMke2ludGVyZmFjZU5hbWV9
T3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93
bj4gaGFuZGxlLCB2b2lkKiwgQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hh
cioqIHJlYXNvbilcbiIpOwogICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIntcbiIpOwogICAg
ICAgICAjIEFsbCBBY3RpdmVET01PYmplY3RzIGltcGxlbWVudCBoYXNQZW5kaW5nQWN0aXZpdHko
KSwgYnV0IG5vdCBhbGwgb2YgdGhlbQogICAgICAgICAjIGluY3JlbWVudCB0aGVpciBDKysgcmVm
ZXJlbmNlIGNvdW50cyB3aGVuIGhhc1BlbmRpbmdBY3Rpdml0eSgpIGJlY29tZXMKQEAgLTY0MjEs
NyArNjQyOSw4IEBAIHN1YiBHZW5lcmF0ZUNhbGxiYWNrSGVhZGVyQ29udGVudAogICAgICAgICBw
dXNoKEAkY29udGVudFJlZiwgIiAgICBib29sIGhhc0NhbGxiYWNrKCkgY29uc3QgZmluYWwgeyBy
ZXR1cm4gbV9kYXRhICYmIG1fZGF0YS0+Y2FsbGJhY2soKTsgfVxuXG4iKTsKICAgICB9CiAKLSAg
ICBwdXNoKEAkY29udGVudFJlZiwgIiAgICB2b2lkIHZpc2l0SlNGdW5jdGlvbihKU0M6OlNsb3RW
aXNpdG9yJikgb3ZlcnJpZGU7XG5cbiIpIGlmICRpbnRlcmZhY2VPckNhbGxiYWNrLT5leHRlbmRl
ZEF0dHJpYnV0ZXMtPntJc1dlYWtDYWxsYmFja307CisjICAgIHB1c2goQCRjb250ZW50UmVmLCAi
ICAgIHZvaWQgdmlzaXRKU0Z1bmN0aW9uKEpTQzo6U2xvdFZpc2l0b3ImKSBvdmVycmlkZTtcblxu
IikgaWYgJGludGVyZmFjZU9yQ2FsbGJhY2stPmV4dGVuZGVkQXR0cmlidXRlcy0+e0lzV2Vha0Nh
bGxiYWNrfTsKKyAgICBwdXNoKEAkY29udGVudFJlZiwgIiAgICB2b2lkIHZpc2l0SlNGdW5jdGlv
bihKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKSBvdmVycmlkZTtcblxuIikgaWYgJGludGVyZmFj
ZU9yQ2FsbGJhY2stPmV4dGVuZGVkQXR0cmlidXRlcy0+e0lzV2Vha0NhbGxiYWNrfTsKIAogICAg
IHB1c2goQCRjb250ZW50UmVmLCAiICAgICR7Y2FsbGJhY2tEYXRhVHlwZX0qIG1fZGF0YTtcbiIp
OwogICAgIHB1c2goQCRjb250ZW50UmVmLCAifTtcblxuIik7CkBAIC02NjEyLDcgKzY2MjEsOCBA
QCBzdWIgR2VuZXJhdGVDYWxsYmFja0ltcGxlbWVudGF0aW9uQ29udGVuCiAgICAgfQogCiAgICAg
aWYgKCRpbnRlcmZhY2VPckNhbGxiYWNrLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntJc1dlYWtDYWxs
YmFja30pIHsKLSAgICAgICAgcHVzaChAJGNvbnRlbnRSZWYsICJ2b2lkICR7Y2xhc3NOYW1lfTo6
dmlzaXRKU0Z1bmN0aW9uKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpXG4iKTsKKyMgICAgICAg
IHB1c2goQCRjb250ZW50UmVmLCAidm9pZCAke2NsYXNzTmFtZX06OnZpc2l0SlNGdW5jdGlvbihK
U0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKVxuIik7CisgICAgICAgIHB1c2goQCRjb250ZW50UmVm
LCAidm9pZCAke2NsYXNzTmFtZX06OnZpc2l0SlNGdW5jdGlvbihKU0M6OkFic3RyYWN0U2xvdFZp
c2l0b3ImIHZpc2l0b3IpXG4iKTsKICAgICAgICAgcHVzaChAJGNvbnRlbnRSZWYsICJ7XG4iKTsK
ICAgICAgICAgcHVzaChAJGNvbnRlbnRSZWYsICIgICAgbV9kYXRhLT52aXNpdEpTRnVuY3Rpb24o
dmlzaXRvcik7XG4iKTsKICAgICAgICAgcHVzaChAJGNvbnRlbnRSZWYsICJ9XG5cbiIpOwpAQCAt
NjcyMyw2ICs2NzMzLDcgQEAgc3ViIEdlbmVyYXRlSXRlcmFibGVEZWZpbml0aW9uCiAgICAgbXkg
JHZpc2libGVJbnRlcmZhY2VOYW1lID0gJGNvZGVHZW5lcmF0b3ItPkdldFZpc2libGVJbnRlcmZh
Y2VOYW1lKCRpbnRlcmZhY2UpOwogCiAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIkpTRE9NSXRlcmF0
b3IuaCIpOworICAgIEFkZFRvSW1wbEluY2x1ZGVzKCI8SmF2YVNjcmlwdENvcmUvU2xvdFZpc2l0
b3JNYWNyb3MuaD4iKTsKIAogICAgIHJldHVybiB1bmxlc3MgSXNLZXlWYWx1ZUl0ZXJhYmxlSW50
ZXJmYWNlKCRpbnRlcmZhY2UpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vQWN0aXZlRE9N
Q2FsbGJhY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vQWN0aXZlRE9NQ2Fs
bGJhY2suaAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL1dlYkNvcmUvZG9tL0FjdGl2ZURP
TUNhbGxiYWNrLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJD
b250ZXh0RGVzdHJ1Y3Rpb25PYnNlcnZlci5oIgogCiBuYW1lc3BhY2UgSlNDIHsKK2NsYXNzIEFi
c3RyYWN0U2xvdFZpc2l0b3I7CiBjbGFzcyBTbG90VmlzaXRvcjsKIH0KIApAQCAtNTUsNyArNTYs
OCBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBhY3RpdmVET01PYmplY3RzQXJl
U3VzcGVuZGVkKCkgY29uc3Q7CiAgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBhY3RpdmVET01PYmpl
Y3RBcmVTdG9wcGVkKCkgY29uc3Q7CiAgICAgCi0gICAgdmlydHVhbCB2b2lkIHZpc2l0SlNGdW5j
dGlvbihKU0M6OlNsb3RWaXNpdG9yJikgeyB9CisvLyAgICB2aXJ0dWFsIHZvaWQgdmlzaXRKU0Z1
bmN0aW9uKEpTQzo6U2xvdFZpc2l0b3ImKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXRKU0Z1
bmN0aW9uKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpIHsgfQogfTsKIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50TGlzdGVuZXIuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRMaXN0ZW5lci5oCShyZXZpc2lvbiAy
NzE0NDMpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRMaXN0ZW5lci5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yMyw4ICsyMyw5IEBACiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KIAogbmFt
ZXNwYWNlIEpTQyB7CitjbGFzcyBBYnN0cmFjdFNsb3RWaXNpdG9yOwogY2xhc3MgSlNPYmplY3Q7
Ci1jbGFzcyBTbG90VmlzaXRvcjsKKy8vY2xhc3MgU2xvdFZpc2l0b3I7CiB9CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKQEAgLTUxLDcgKzUyLDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBo
YW5kbGVFdmVudChTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgRXZlbnQmKSA9IDA7CiAgICAgdmly
dHVhbCBib29sIHdhc0NyZWF0ZWRGcm9tTWFya3VwKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0K
IAotICAgIHZpcnR1YWwgdm9pZCB2aXNpdEpTRnVuY3Rpb24oSlNDOjpTbG90VmlzaXRvciYpIHsg
fQorLy8gICAgdmlydHVhbCB2b2lkIHZpc2l0SlNGdW5jdGlvbihKU0M6OlNsb3RWaXNpdG9yJikg
eyB9CisgICAgdmlydHVhbCB2b2lkIHZpc2l0SlNGdW5jdGlvbihKU0M6OkFic3RyYWN0U2xvdFZp
c2l0b3ImKSB7IH0KIAogICAgIHZpcnR1YWwgYm9vbCBpc0F0dHJpYnV0ZSgpIGNvbnN0IHsgcmV0
dXJuIGZhbHNlOyB9CiAgICAgVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRUYXJnZXQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2RvbS9FdmVudFRhcmdldC5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNv
dXJjZS9XZWJDb3JlL2RvbS9FdmVudFRhcmdldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3NCw3
ICszNzQsOSBAQCB2b2lkIEV2ZW50VGFyZ2V0OjpyZW1vdmVBbGxFdmVudExpc3RlbmVyCiAgICAg
dGhyZWFkRGF0YS5zZXRJc0luUmVtb3ZlQWxsRXZlbnRMaXN0ZW5lcnMoZmFsc2UpOwogfQogCi12
b2lkIEV2ZW50VGFyZ2V0Ojp2aXNpdEpTRXZlbnRMaXN0ZW5lcnMoSlNDOjpTbG90VmlzaXRvciYg
dmlzaXRvcikKKy8vdm9pZCBFdmVudFRhcmdldDo6dmlzaXRKU0V2ZW50TGlzdGVuZXJzKEpTQzo6
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBF
dmVudFRhcmdldDo6dmlzaXRKU0V2ZW50TGlzdGVuZXJzKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAg
ICAgRXZlbnRUYXJnZXREYXRhKiBkYXRhID0gZXZlbnRUYXJnZXREYXRhQ29uY3VycmVudGx5KCk7
CiAgICAgaWYgKCFkYXRhKQpAQCAtMzg2LDYgKzM4OCw5IEBAIHZvaWQgRXZlbnRUYXJnZXQ6OnZp
c2l0SlNFdmVudExpc3RlbmVycygKICAgICAgICAgbGlzdGVuZXItPnZpc2l0SlNGdW5jdGlvbih2
aXNpdG9yKTsKIH0KIAordGVtcGxhdGUgdm9pZCBFdmVudFRhcmdldDo6dmlzaXRKU0V2ZW50TGlz
dGVuZXJzKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBFdmVudFRh
cmdldDo6dmlzaXRKU0V2ZW50TGlzdGVuZXJzKEpTQzo6U2xvdFZpc2l0b3ImKTsKKwogdm9pZCBF
dmVudFRhcmdldDo6aW52YWxpZGF0ZUV2ZW50TGlzdGVuZXJSZWdpb25zKCkKIHsKICAgICBpZiAo
aXM8RWxlbWVudD4oKnRoaXMpKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRUYXJn
ZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRUYXJnZXQuaAkocmV2
aXNpb24gMjcxNDQzKQorKysgU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50VGFyZ2V0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTExMyw3ICsxMTMsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBmaXJlRXZlbnRM
aXN0ZW5lcnMoRXZlbnQmLCBFdmVudEludm9rZVBoYXNlKTsKICAgICBib29sIGlzRmlyaW5nRXZl
bnRMaXN0ZW5lcnMoKSBjb25zdDsKIAotICAgIHZvaWQgdmlzaXRKU0V2ZW50TGlzdGVuZXJzKEpT
Qzo6U2xvdFZpc2l0b3ImKTsKKy8vICAgIHZvaWQgdmlzaXRKU0V2ZW50TGlzdGVuZXJzKEpTQzo6
U2xvdFZpc2l0b3ImKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIHZpc2l0
SlNFdmVudExpc3RlbmVycyhWaXNpdG9yJik7CiAgICAgdm9pZCBpbnZhbGlkYXRlSlNFdmVudExp
c3RlbmVycyhKU0M6OkpTT2JqZWN0Kik7CiAKICAgICBjb25zdCBFdmVudFRhcmdldERhdGEqIGV2
ZW50VGFyZ2V0RGF0YSgpIGNvbnN0OwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL011dGF0aW9u
UmVjb3JkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vTXV0YXRpb25SZWNv
cmQuY3BwCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vTXV0YXRpb25S
ZWNvcmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0MSw4IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogbmFtZXNwYWNlIHsKIAotc3RhdGljIHZvaWQgdmlzaXROb2RlTGlzdChKU0M6OlNs
b3RWaXNpdG9yJiB2aXNpdG9yLCBOb2RlTGlzdCYgbm9kZUxpc3QpCisvL3N0YXRpYyB2b2lkIHZp
c2l0Tm9kZUxpc3QoSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvciwgTm9kZUxpc3QmIG5vZGVMaXN0
KQorc3RhdGljIHZvaWQgdmlzaXROb2RlTGlzdChKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImIHZp
c2l0b3IsIE5vZGVMaXN0JiBub2RlTGlzdCkKIHsKICAgICBBU1NFUlQoIW5vZGVMaXN0LmlzTGl2
ZU5vZGVMaXN0KCkpOwogICAgIHVuc2lnbmVkIGxlbmd0aCA9IG5vZGVMaXN0Lmxlbmd0aCgpOwpA
QCAtNjgsNyArNjksOCBAQCBwcml2YXRlOgogICAgIE5vZGUqIHByZXZpb3VzU2libGluZygpIG92
ZXJyaWRlIHsgcmV0dXJuIG1fcHJldmlvdXNTaWJsaW5nLmdldCgpOyB9CiAgICAgTm9kZSogbmV4
dFNpYmxpbmcoKSBvdmVycmlkZSB7IHJldHVybiBtX25leHRTaWJsaW5nLmdldCgpOyB9CiAKLSAg
ICB2b2lkIHZpc2l0Tm9kZXNDb25jdXJyZW50bHkoSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikg
Y29uc3QgZmluYWwKKy8vICAgIHZvaWQgdmlzaXROb2Rlc0NvbmN1cnJlbnRseShKU0M6OlNsb3RW
aXNpdG9yJiB2aXNpdG9yKSBjb25zdCBmaW5hbAorICAgIHZvaWQgdmlzaXROb2Rlc0NvbmN1cnJl
bnRseShKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0IGZpbmFsCiAgICAg
ewogICAgICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qocm9vdChtX3RhcmdldC5wdHIoKSkpOwog
ICAgICAgICBpZiAobV9hZGRlZE5vZGVzKQpAQCAtMTA1LDcgKzEwNyw4IEBAIHByaXZhdGU6CiAg
ICAgICAgIHJldHVybiBub2RlTGlzdC5nZXQoKTsKICAgICB9CiAKLSAgICB2b2lkIHZpc2l0Tm9k
ZXNDb25jdXJyZW50bHkoSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikgY29uc3QgZmluYWwKKy8v
ICAgIHZvaWQgdmlzaXROb2Rlc0NvbmN1cnJlbnRseShKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9y
KSBjb25zdCBmaW5hbAorICAgIHZvaWQgdmlzaXROb2Rlc0NvbmN1cnJlbnRseShKU0M6OkFic3Ry
YWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0IGZpbmFsCiAgICAgewogICAgICAgICB2aXNp
dG9yLmFkZE9wYXF1ZVJvb3Qocm9vdChtX3RhcmdldC5wdHIoKSkpOwogICAgIH0KQEAgLTE2NCw3
ICsxNjcsOCBAQCBwcml2YXRlOgogCiAgICAgU3RyaW5nIG9sZFZhbHVlKCkgb3ZlcnJpZGUgeyBy
ZXR1cm4gU3RyaW5nKCk7IH0KIAotICAgIHZvaWQgdmlzaXROb2Rlc0NvbmN1cnJlbnRseShKU0M6
OlNsb3RWaXNpdG9yJiB2aXNpdG9yKSBjb25zdCBmaW5hbAorLy8gICAgdm9pZCB2aXNpdE5vZGVz
Q29uY3VycmVudGx5KEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0IGZpbmFsCisgICAg
dm9pZCB2aXNpdE5vZGVzQ29uY3VycmVudGx5KEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYgdmlz
aXRvcikgY29uc3QgZmluYWwKICAgICB7CiAgICAgICAgIG1fcmVjb3JkLT52aXNpdE5vZGVzQ29u
Y3VycmVudGx5KHZpc2l0b3IpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9NdXRh
dGlvblJlY29yZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9NdXRhdGlvblJl
Y29yZC5oCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vTXV0YXRpb25S
ZWNvcmQuaAkod29ya2luZyBjb3B5KQpAQCAtNzIsNyArNzIsOCBAQCBwdWJsaWM6CiAKICAgICB2
aXJ0dWFsIFN0cmluZyBvbGRWYWx1ZSgpIHsgcmV0dXJuIFN0cmluZygpOyB9CiAKLSAgICB2aXJ0
dWFsIHZvaWQgdmlzaXROb2Rlc0NvbmN1cnJlbnRseShKU0M6OlNsb3RWaXNpdG9yJikgY29uc3Qg
PSAwOworLy8gICAgdmlydHVhbCB2b2lkIHZpc2l0Tm9kZXNDb25jdXJyZW50bHkoSlNDOjpTbG90
VmlzaXRvciYpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXROb2Rlc0NvbmN1cnJl
bnRseShKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKSBjb25zdCA9IDA7CiB9OwogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTDJS
ZW5kZXJpbmdDb250ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2Nh
bnZhcy9XZWJHTDJSZW5kZXJpbmdDb250ZXh0LmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysgU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTMwMjgsMTggKzMwMjgsMjAgQEAgYm9vbCBXZWJHTDJSZW5kZXJpbmdDb250
ZXh0OjpjaGVja0FuZFRyYQogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIFdlYkdMMlJlbmRl
cmluZ0NvbnRleHQ6OmFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKEpTQzo6U2xvdFZpc2l0b3ImIHZp
c2l0b3IpCisvL3ZvaWQgV2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6YWRkTWVtYmVyc1RvT3BhcXVl
Um9vdHMoSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgV2ViR0wyUmVuZGVyaW5nQ29u
dGV4dDo6YWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMoSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQogewogICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmFkZE1lbWJlcnNUb09w
YXF1ZVJvb3RzKHZpc2l0b3IpOwogCiAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhvYmplY3RH
cmFwaExvY2soKSk7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KG1fcmVhZEZyYW1lYnVmZmVy
QmluZGluZy5nZXQoKSk7CiAgICAgaWYgKG1fcmVhZEZyYW1lYnVmZmVyQmluZGluZykKLSAgICAg
ICAgbV9yZWFkRnJhbWVidWZmZXJCaW5kaW5nLT5hZGRNZW1iZXJzVG9PcGFxdWVSb290cyhsb2Nr
ZXIsIHZpc2l0b3IpOworICAgICAgICBtX3JlYWRGcmFtZWJ1ZmZlckJpbmRpbmctPmFkZE1lbWJl
cnNUb09wYXF1ZVJvb3RzMzAwKGxvY2tlciwgdmlzaXRvcik7CiAKICAgICB2aXNpdG9yLmFkZE9w
YXF1ZVJvb3QobV9ib3VuZFRyYW5zZm9ybUZlZWRiYWNrLmdldCgpKTsKICAgICBpZiAobV9ib3Vu
ZFRyYW5zZm9ybUZlZWRiYWNrKQotICAgICAgICBtX2JvdW5kVHJhbnNmb3JtRmVlZGJhY2stPmFk
ZE1lbWJlcnNUb09wYXF1ZVJvb3RzKGxvY2tlciwgdmlzaXRvcik7CisvLyAgICAgICAgbV9ib3Vu
ZFRyYW5zZm9ybUZlZWRiYWNrLT5hZGRNZW1iZXJzVG9PcGFxdWVSb290cyhsb2NrZXIsIHZpc2l0
b3IpOworICAgICAgICBtX2JvdW5kVHJhbnNmb3JtRmVlZGJhY2stPmFkZE1lbWJlcnNUb09wYXF1
ZVJvb3RzMTAwKGxvY2tlciwgdmlzaXRvcik7CiAKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qo
bV9ib3VuZENvcHlSZWFkQnVmZmVyLmdldCgpKTsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qo
bV9ib3VuZENvcHlXcml0ZUJ1ZmZlci5nZXQoKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9XZWJHTDJSZW5kZXJpbmdDb250ZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvaHRtbC9jYW52YXMvV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5oCShyZXZpc2lvbiAyNzE0
NDMpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTDJSZW5kZXJpbmdDb250ZXh0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTI2MSw3ICsyNjEsOCBAQCBwdWJsaWM6CiAKICAgICBib29s
IGNoZWNrQW5kVHJhbnNsYXRlQXR0YWNobWVudHMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBH
Q0dMZW51bSwgVmVjdG9yPEdDR0xlbnVtPiYpOwogCi0gICAgdm9pZCBhZGRNZW1iZXJzVG9PcGFx
dWVSb290cyhKU0M6OlNsb3RWaXNpdG9yJikgb3ZlcnJpZGU7CisvLyAgICB2b2lkIGFkZE1lbWJl
cnNUb09wYXF1ZVJvb3RzKEpTQzo6U2xvdFZpc2l0b3ImKSBvdmVycmlkZTsKKyAgICB2b2lkIGFk
ZE1lbWJlcnNUb09wYXF1ZVJvb3RzKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpIG92ZXJyaWRl
OwogCiBwcml2YXRlOgogICAgIFdlYkdMMlJlbmRlcmluZ0NvbnRleHQoQ2FudmFzQmFzZSYsIEdy
YXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcyk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2Nh
bnZhcy9XZWJHTEZyYW1lYnVmZmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9XZWJHTEZyYW1lYnVmZmVyLmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysgU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xGcmFtZWJ1ZmZlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTYzLDcgKzYzLDggQEAgbmFtZXNwYWNlIHsKICAgICAgICAgdm9pZCBvbkRldGFjaGVk
KGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgR3JhcGhpY3NDb250ZXh0R0wqKSBvdmVycmlkZTsKICAg
ICAgICAgdm9pZCBhdHRhY2goR3JhcGhpY3NDb250ZXh0R0wqLCBHQ0dMZW51bSB0YXJnZXQsIEdD
R0xlbnVtIGF0dGFjaG1lbnQpIG92ZXJyaWRlOwogICAgICAgICB2b2lkIHVuYXR0YWNoKEdyYXBo
aWNzQ29udGV4dEdMKiwgR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBhdHRhY2htZW50KSBvdmVy
cmlkZTsKLSAgICAgICAgdm9pZCBhZGRNZW1iZXJzVG9PcGFxdWVSb290cyhjb25zdCBBYnN0cmFj
dExvY2tlciYsIEpTQzo6U2xvdFZpc2l0b3ImKSBvdmVycmlkZTsKKy8vICAgICAgICB2b2lkIGFk
ZE1lbWJlcnNUb09wYXF1ZVJvb3RzKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgSlNDOjpTbG90Vmlz
aXRvciYpIG92ZXJyaWRlOworICAgICAgICB2b2lkIGFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzNDAw
KGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJikgb3ZlcnJp
ZGU7CiAKICAgICAgICAgV2ViR0xSZW5kZXJidWZmZXJBdHRhY2htZW50KCkgeyB9OwogCkBAIC0x
NDUsNyArMTQ2LDggQEAgbmFtZXNwYWNlIHsKICAgICAgICAgICAgIGNvbnRleHQtPmZyYW1lYnVm
ZmVyUmVuZGVyYnVmZmVyKHRhcmdldCwgYXR0YWNobWVudCwgR3JhcGhpY3NDb250ZXh0R0w6OlJF
TkRFUkJVRkZFUiwgMCk7CiAgICAgfQogCi0gICAgdm9pZCBXZWJHTFJlbmRlcmJ1ZmZlckF0dGFj
aG1lbnQ6OmFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgSlND
OjpTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vICAgIHZvaWQgV2ViR0xSZW5kZXJidWZmZXJBdHRh
Y2htZW50OjphZGRNZW1iZXJzVG9PcGFxdWVSb290cyhjb25zdCBBYnN0cmFjdExvY2tlciYsIEpT
Qzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCisgICAgdm9pZCBXZWJHTFJlbmRlcmJ1ZmZlckF0dGFj
aG1lbnQ6OmFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzNDAwKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwg
SlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogICAgIHsKICAgICAgICAgdmlzaXRv
ci5hZGRPcGFxdWVSb290KG1fcmVuZGVyYnVmZmVyLmdldCgpKTsKICAgICB9CkBAIC0xNjksNyAr
MTcxLDggQEAgbmFtZXNwYWNlIHsKICAgICAgICAgdm9pZCBvbkRldGFjaGVkKGNvbnN0IEFic3Ry
YWN0TG9ja2VyJiwgR3JhcGhpY3NDb250ZXh0R0wqKSBvdmVycmlkZTsKICAgICAgICAgdm9pZCBh
dHRhY2goR3JhcGhpY3NDb250ZXh0R0wqLCBHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIGF0dGFj
aG1lbnQpIG92ZXJyaWRlOwogICAgICAgICB2b2lkIHVuYXR0YWNoKEdyYXBoaWNzQ29udGV4dEdM
KiwgR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBhdHRhY2htZW50KSBvdmVycmlkZTsKLSAgICAg
ICAgdm9pZCBhZGRNZW1iZXJzVG9PcGFxdWVSb290cyhjb25zdCBBYnN0cmFjdExvY2tlciYsIEpT
Qzo6U2xvdFZpc2l0b3ImKSBvdmVycmlkZTsKKy8vICAgICAgICB2b2lkIGFkZE1lbWJlcnNUb09w
YXF1ZVJvb3RzKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgSlNDOjpTbG90VmlzaXRvciYpIG92ZXJy
aWRlOworICAgICAgICB2b2lkIGFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzNDAwKGNvbnN0IEFic3Ry
YWN0TG9ja2VyJiwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJikgb3ZlcnJpZGU7CiAKICAgICAg
ICAgV2ViR0xUZXh0dXJlQXR0YWNobWVudCgpIHsgfTsKIApAQCAtMjY3LDcgKzI3MCw4IEBAIG5h
bWVzcGFjZSB7CiAjZW5kaWYKICAgICB9CiAKLSAgICB2b2lkIFdlYkdMVGV4dHVyZUF0dGFjaG1l
bnQ6OmFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgSlNDOjpT
bG90VmlzaXRvciYgdmlzaXRvcikKKy8vICAgIHZvaWQgV2ViR0xUZXh0dXJlQXR0YWNobWVudDo6
YWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMoY29uc3QgQWJzdHJhY3RMb2NrZXImLCBKU0M6OlNsb3RW
aXNpdG9yJiB2aXNpdG9yKQorICAgIHZvaWQgV2ViR0xUZXh0dXJlQXR0YWNobWVudDo6YWRkTWVt
YmVyc1RvT3BhcXVlUm9vdHM0MDAoY29uc3QgQWJzdHJhY3RMb2NrZXImLCBKU0M6OkFic3RyYWN0
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiAgICAgewogICAgICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJv
b3QobV90ZXh0dXJlLmdldCgpKTsKICAgICB9CkBAIC03MjEsMTAgKzcyNSwxMSBAQCBHQ0dMZW51
bSBXZWJHTEZyYW1lYnVmZmVyOjpnZXREcmF3QnVmZmVyCiAgICAgcmV0dXJuIEdyYXBoaWNzQ29u
dGV4dEdMOjpOT05FOwogfQogCi12b2lkIFdlYkdMRnJhbWVidWZmZXI6OmFkZE1lbWJlcnNUb09w
YXF1ZVJvb3RzKGNvbnN0IEFic3RyYWN0TG9ja2VyJiBsb2NrZXIsIEpTQzo6U2xvdFZpc2l0b3Im
IHZpc2l0b3IpCisvL3ZvaWQgV2ViR0xGcmFtZWJ1ZmZlcjo6YWRkTWVtYmVyc1RvT3BhcXVlUm9v
dHMoY29uc3QgQWJzdHJhY3RMb2NrZXImIGxvY2tlciwgSlNDOjpTbG90VmlzaXRvciYgdmlzaXRv
cikKK3ZvaWQgV2ViR0xGcmFtZWJ1ZmZlcjo6YWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMzMDAoY29u
c3QgQWJzdHJhY3RMb2NrZXImIGxvY2tlciwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNp
dG9yKQogewogICAgIGZvciAoYXV0byYgZW50cnkgOiBtX2F0dGFjaG1lbnRzKQotICAgICAgICBl
bnRyeS52YWx1ZS0+YWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMobG9ja2VyLCB2aXNpdG9yKTsKKyAg
ICAgICAgZW50cnkudmFsdWUtPmFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzNDAwKGxvY2tlciwgdmlz
aXRvcik7CiB9CiAKIHZvaWQgV2ViR0xGcmFtZWJ1ZmZlcjo6c2V0QXR0YWNobWVudEludGVybmFs
KEdDR0xlbnVtIGF0dGFjaG1lbnQsIEdDR0xlbnVtIHRleFRhcmdldCwgV2ViR0xUZXh0dXJlKiB0
ZXh0dXJlLCBHQ0dMaW50IGxldmVsLCBHQ0dMaW50IGxheWVyKQpJbmRleDogU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvV2ViR0xGcmFtZWJ1ZmZlci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRnJhbWVidWZmZXIuaAkocmV2aXNpb24gMjcxNDQzKQor
KysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xGcmFtZWJ1ZmZlci5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zNCw3ICszNCw4IEBACiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1l
c3BhY2UgSlNDIHsKLWNsYXNzIFNsb3RWaXNpdG9yOworLy9jbGFzcyBTbG90VmlzaXRvcjsKK2Ns
YXNzIEFic3RyYWN0U2xvdFZpc2l0b3I7CiB9CiAKIG5hbWVzcGFjZSBXVEYgewpAQCAtNjUsNyAr
NjYsOCBAQCBwdWJsaWM6CiAgICAgICAgIHZpcnR1YWwgdm9pZCBvbkRldGFjaGVkKGNvbnN0IFdU
Rjo6QWJzdHJhY3RMb2NrZXImLCBHcmFwaGljc0NvbnRleHRHTCopID0gMDsKICAgICAgICAgdmly
dHVhbCB2b2lkIGF0dGFjaChHcmFwaGljc0NvbnRleHRHTCosIEdDR0xlbnVtIHRhcmdldCwgR0NH
TGVudW0gYXR0YWNobWVudCkgPSAwOwogICAgICAgICB2aXJ0dWFsIHZvaWQgdW5hdHRhY2goR3Jh
cGhpY3NDb250ZXh0R0wqLCBHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIGF0dGFjaG1lbnQpID0g
MDsKLSAgICAgICAgdmlydHVhbCB2b2lkIGFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKGNvbnN0IFdU
Rjo6QWJzdHJhY3RMb2NrZXImLCBKU0M6OlNsb3RWaXNpdG9yJikgPSAwOworLy8gICAgICAgIHZp
cnR1YWwgdm9pZCBhZGRNZW1iZXJzVG9PcGFxdWVSb290cyhjb25zdCBXVEY6OkFic3RyYWN0TG9j
a2VyJiwgSlNDOjpTbG90VmlzaXRvciYpID0gMDsKKyAgICAgICAgdmlydHVhbCB2b2lkIGFkZE1l
bWJlcnNUb09wYXF1ZVJvb3RzNDAwKGNvbnN0IFdURjo6QWJzdHJhY3RMb2NrZXImLCBKU0M6OkFi
c3RyYWN0U2xvdFZpc2l0b3ImKSA9IDA7CiAKICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIFdlYkdM
QXR0YWNobWVudCgpOwpAQCAtMTE0LDcgKzExNiw4IEBAIHB1YmxpYzoKIAogICAgIEdDR0xlbnVt
IGdldERyYXdCdWZmZXIoR0NHTGVudW0pOwogCi0gICAgdm9pZCBhZGRNZW1iZXJzVG9PcGFxdWVS
b290cyhjb25zdCBXVEY6OkFic3RyYWN0TG9ja2VyJiwgSlNDOjpTbG90VmlzaXRvciYpOworLy8g
ICAgdm9pZCBhZGRNZW1iZXJzVG9PcGFxdWVSb290cyhjb25zdCBXVEY6OkFic3RyYWN0TG9ja2Vy
JiwgSlNDOjpTbG90VmlzaXRvciYpOworICAgIHZvaWQgYWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMz
MDAoY29uc3QgV1RGOjpBYnN0cmFjdExvY2tlciYsIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYp
OwogCiBwcml2YXRlOgogICAgIFdlYkdMRnJhbWVidWZmZXIoV2ViR0xSZW5kZXJpbmdDb250ZXh0
QmFzZSYpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xQcm9ncmFtLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFByb2dyYW0u
Y3BwCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJH
TFByb2dyYW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDYsNyArMjA2LDggQEAgYm9vbCBXZWJH
TFByb2dyYW06OmRldGFjaFNoYWRlcihjb25zdCBBYgogICAgIH0KIH0KIAotdm9pZCBXZWJHTFBy
b2dyYW06OmFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgSlND
OjpTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vdm9pZCBXZWJHTFByb2dyYW06OmFkZE1lbWJlcnNU
b09wYXF1ZVJvb3RzKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgSlNDOjpTbG90VmlzaXRvciYgdmlz
aXRvcikKK3ZvaWQgV2ViR0xQcm9ncmFtOjphZGRNZW1iZXJzVG9PcGFxdWVSb290czIwMChjb25z
dCBBYnN0cmFjdExvY2tlciYsIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsK
ICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QobV92ZXJ0ZXhTaGFkZXIuZ2V0KCkpOwogICAgIHZp
c2l0b3IuYWRkT3BhcXVlUm9vdChtX2ZyYWdtZW50U2hhZGVyLmdldCgpKTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUHJvZ3JhbS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUHJvZ3JhbS5oCShyZXZpc2lvbiAyNzE0NDMpCisr
KyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFByb2dyYW0uaAkod29ya2luZyBjb3B5
KQpAQCAtMzUsNyArMzUsOCBAQAogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNl
IEpTQyB7Ci1jbGFzcyBTbG90VmlzaXRvcjsKKy8vY2xhc3MgU2xvdFZpc2l0b3I7CitjbGFzcyBB
YnN0cmFjdFNsb3RWaXNpdG9yOwogfQogCiBuYW1lc3BhY2UgV1RGIHsKQEAgLTg4LDcgKzg5LDgg
QEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9yZXF1aXJlZFRyYW5zZm9ybUZlZWRiYWNrQnVm
ZmVyQ291bnQ7CiAgICAgfQogCi0gICAgdm9pZCBhZGRNZW1iZXJzVG9PcGFxdWVSb290cyhjb25z
dCBXVEY6OkFic3RyYWN0TG9ja2VyJiwgSlNDOjpTbG90VmlzaXRvciYpOworLy8gICAgdm9pZCBh
ZGRNZW1iZXJzVG9PcGFxdWVSb290cyhjb25zdCBXVEY6OkFic3RyYWN0TG9ja2VyJiwgSlNDOjpT
bG90VmlzaXRvciYpOworICAgIHZvaWQgYWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMyMDAoY29uc3Qg
V1RGOjpBYnN0cmFjdExvY2tlciYsIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpOwogCiBwcml2
YXRlOgogICAgIFdlYkdMUHJvZ3JhbShXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlJik7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlLmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTc5MjcsMjMgKzc5MjcsMjYgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpkaXNw
YXRjaAogICAgIHF1ZXVlVGFza1RvRGlzcGF0Y2hFdmVudCgqY2FudmFzLCBUYXNrU291cmNlOjpX
ZWJHTCwgV2ViR0xDb250ZXh0RXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkud2ViZ2xjb250ZXh0
Y2hhbmdlZEV2ZW50LCBFdmVudDo6Q2FuQnViYmxlOjpObywgRXZlbnQ6OklzQ2FuY2VsYWJsZTo6
WWVzLCBlbXB0eVN0cmluZygpKSk7CiB9CiAKLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZTo6YWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMoSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKKy8v
dm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjphZGRNZW1iZXJzVG9PcGFxdWVSb290cyhK
U0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
OjphZGRNZW1iZXJzVG9PcGFxdWVSb290cyhKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0
b3IpCiB7CiAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhvYmplY3RHcmFwaExvY2soKSk7CiAK
KyAgICAvLyBtbGFtIEZJWE1FOiB3aHkgYXJlIHdlIG5vdCBhbHNvIHZpc2l0aW5nIG1fZGVmYXVs
dFZlcnRleEFycmF5T2JqZWN0PworCiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KG1fYm91bmRB
cnJheUJ1ZmZlci5nZXQoKSk7CiAKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QobV9ib3VuZFZl
cnRleEFycmF5T2JqZWN0LmdldCgpKTsKICAgICBpZiAobV9ib3VuZFZlcnRleEFycmF5T2JqZWN0
KQotICAgICAgICBtX2JvdW5kVmVydGV4QXJyYXlPYmplY3QtPmFkZE1lbWJlcnNUb09wYXF1ZVJv
b3RzKGxvY2tlciwgdmlzaXRvcik7CisgICAgICAgIG1fYm91bmRWZXJ0ZXhBcnJheU9iamVjdC0+
YWRkTWVtYmVyc1RvT3BhcXVlUm9vdHM2MDAobG9ja2VyLCB2aXNpdG9yKTsKIAogICAgIHZpc2l0
b3IuYWRkT3BhcXVlUm9vdChtX2N1cnJlbnRQcm9ncmFtLmdldCgpKTsKICAgICBpZiAobV9jdXJy
ZW50UHJvZ3JhbSkKLSAgICAgICAgbV9jdXJyZW50UHJvZ3JhbS0+YWRkTWVtYmVyc1RvT3BhcXVl
Um9vdHMobG9ja2VyLCB2aXNpdG9yKTsKKyAgICAgICAgbV9jdXJyZW50UHJvZ3JhbS0+YWRkTWVt
YmVyc1RvT3BhcXVlUm9vdHMyMDAobG9ja2VyLCB2aXNpdG9yKTsKIAogICAgIHZpc2l0b3IuYWRk
T3BhcXVlUm9vdChtX2ZyYW1lYnVmZmVyQmluZGluZy5nZXQoKSk7CiAgICAgaWYgKG1fZnJhbWVi
dWZmZXJCaW5kaW5nKQotICAgICAgICBtX2ZyYW1lYnVmZmVyQmluZGluZy0+YWRkTWVtYmVyc1Rv
T3BhcXVlUm9vdHMobG9ja2VyLCB2aXNpdG9yKTsKKyAgICAgICAgbV9mcmFtZWJ1ZmZlckJpbmRp
bmctPmFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzMzAwKGxvY2tlciwgdmlzaXRvcik7CiAKICAgICB2
aXNpdG9yLmFkZE9wYXF1ZVJvb3QobV9yZW5kZXJidWZmZXJCaW5kaW5nLmdldCgpKTsKIApJbmRl
eDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2UuaAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9j
YW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01OCw3
ICs1OCw4IEBACiAjZW5kaWYKIAogbmFtZXNwYWNlIEpTQyB7Ci1jbGFzcyBTbG90VmlzaXRvcjsK
Ky8vY2xhc3MgU2xvdFZpc2l0b3I7CitjbGFzcyBBYnN0cmFjdFNsb3RWaXNpdG9yOwogfQogCiBu
YW1lc3BhY2UgV1RGIHsKQEAgLTQxMCw3ICs0MTEsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCByZWN5
Y2xlQ29udGV4dCgpIG92ZXJyaWRlOwogICAgIHZvaWQgZGlzcGF0Y2hDb250ZXh0Q2hhbmdlZE5v
dGlmaWNhdGlvbigpIG92ZXJyaWRlOwogCi0gICAgdmlydHVhbCB2b2lkIGFkZE1lbWJlcnNUb09w
YXF1ZVJvb3RzKEpTQzo6U2xvdFZpc2l0b3ImKTsKKy8vICAgIHZpcnR1YWwgdm9pZCBhZGRNZW1i
ZXJzVG9PcGFxdWVSb290cyhKU0M6OlNsb3RWaXNpdG9yJik7CisgICAgdmlydHVhbCB2b2lkIGFk
ZE1lbWJlcnNUb09wYXF1ZVJvb3RzKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpOwogICAgIC8v
IFRoaXMgbG9jayBtdXN0IGJlIGhlbGQgYWNyb3NzIGFsbCBtdXRhdGlvbnMgb2YgY29udGFpbmVy
cyBsaWtlCiAgICAgLy8gVmVjdG9ycywgSGFzaFNldHMsIGV0Yy4gd2hpY2ggY29udGFpbiBSZWZQ
dHI8V2ViR0xPYmplY3Q+LCBhbmQKICAgICAvLyB3aGljaCBhcmUgdHJhdmVyc2VkIGJ5IGFkZE1l
bWJlcnNUb09wYXF1ZVJvb3RzKCkgb3IgYW55IG9mIHRoZQpJbmRleDogU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvV2ViR0xUcmFuc2Zvcm1GZWVkYmFjay5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xUcmFuc2Zvcm1GZWVkYmFjay5jcHAJKHJldmlz
aW9uIDI3MTQ0MykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVHJhbnNmb3Jt
RmVlZGJhY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw4ICszMCw5IEBACiAKICNpbmNsdWRl
ICJXZWJHTENvbnRleHRHcm91cC5oIgogI2luY2x1ZGUgIldlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2UuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9TbG90VmlzaXRvci5oPgotI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL1Nsb3RWaXNpdG9ySW5saW5lcy5oPgorLy8jaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvU2xvdFZpc2l0b3IuaD4KKy8vI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1Nsb3RW
aXNpdG9ySW5saW5lcy5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0Fic3RyYWN0U2xvdFZp
c2l0b3JJbmxpbmVzLmg+CiAjaW5jbHVkZSA8d3RmL0xvY2suaD4KICNpbmNsdWRlIDx3dGYvTG9j
a2VyLmg+CiAKQEAgLTkzLDE0ICs5NCwxNSBAQCBib29sIFdlYkdMVHJhbnNmb3JtRmVlZGJhY2s6
Omhhc0Vub3VnaEJ1CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgV2ViR0xUcmFuc2Zvcm1G
ZWVkYmFjazo6YWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMoY29uc3QgQWJzdHJhY3RMb2NrZXImIGxv
Y2tlciwgSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vdm9pZCBXZWJHTFRyYW5zZm9ybUZl
ZWRiYWNrOjphZGRNZW1iZXJzVG9PcGFxdWVSb290cyhjb25zdCBBYnN0cmFjdExvY2tlciYgbG9j
a2VyLCBKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBXZWJHTFRyYW5zZm9ybUZlZWRi
YWNrOjphZGRNZW1iZXJzVG9PcGFxdWVSb290czEwMChjb25zdCBBYnN0cmFjdExvY2tlciYgbG9j
a2VyLCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgZm9yIChhdXRv
JiBidWZmZXIgOiBtX2JvdW5kSW5kZXhlZFRyYW5zZm9ybUZlZWRiYWNrQnVmZmVycykKICAgICAg
ICAgdmlzaXRvci5hZGRPcGFxdWVSb290KGJ1ZmZlci5nZXQoKSk7CiAKICAgICB2aXNpdG9yLmFk
ZE9wYXF1ZVJvb3QobV9wcm9ncmFtLmdldCgpKTsKICAgICBpZiAobV9wcm9ncmFtKQotICAgICAg
ICBtX3Byb2dyYW0tPmFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKGxvY2tlciwgdmlzaXRvcik7Cisg
ICAgICAgIG1fcHJvZ3JhbS0+YWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMyMDAobG9ja2VyLCB2aXNp
dG9yKTsKIH0KIAogdm9pZCBXZWJHTFRyYW5zZm9ybUZlZWRiYWNrOjp1bmJpbmRCdWZmZXIoY29u
c3QgQWJzdHJhY3RMb2NrZXImLCBXZWJHTEJ1ZmZlciYgYnVmZmVyKQpJbmRleDogU291cmNlL1dl
YkNvcmUvaHRtbC9jYW52YXMvV2ViR0xUcmFuc2Zvcm1GZWVkYmFjay5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVHJhbnNmb3JtRmVlZGJhY2suaAkocmV2
aXNpb24gMjcxNDQzKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xUcmFuc2Zv
cm1GZWVkYmFjay5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw4IEBACiAjaW5jbHVkZSAi
V2ViR0xTaGFyZWRPYmplY3QuaCIKIAogbmFtZXNwYWNlIEpTQyB7Ci1jbGFzcyBTbG90VmlzaXRv
cjsKKy8vY2xhc3MgU2xvdFZpc2l0b3I7CitjbGFzcyBBYnN0cmFjdFNsb3RWaXNpdG9yOwogfQog
CiBuYW1lc3BhY2UgV1RGIHsKQEAgLTcwLDcgKzcxLDggQEAgcHVibGljOgogICAgIAogICAgIGJv
b2wgaGFzRW5vdWdoQnVmZmVycyhHQ0dMdWludCBudW1SZXF1aXJlZCkgY29uc3Q7CiAKLSAgICB2
b2lkIGFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgSlNDOjpT
bG90VmlzaXRvciYpOworLy8gICAgdm9pZCBhZGRNZW1iZXJzVG9PcGFxdWVSb290cyhjb25zdCBB
YnN0cmFjdExvY2tlciYsIEpTQzo6U2xvdFZpc2l0b3ImKTsKKyAgICB2b2lkIGFkZE1lbWJlcnNU
b09wYXF1ZVJvb3RzMTAwKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgSlNDOjpBYnN0cmFjdFNsb3RW
aXNpdG9yJik7CiAKIHByaXZhdGU6CiAgICAgV2ViR0xUcmFuc2Zvcm1GZWVkYmFjayhXZWJHTDJS
ZW5kZXJpbmdDb250ZXh0Jik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJH
TFZlcnRleEFycmF5T2JqZWN0QmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvV2ViR0xWZXJ0ZXhBcnJheU9iamVjdEJhc2UuY3BwCShyZXZpc2lvbiAyNzE0
NDMpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFZlcnRleEFycmF5T2JqZWN0
QmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDggKzI5LDkgQEAKICNpZiBFTkFCTEUoV0VC
R0wpCiAKICNpbmNsdWRlICJXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmgiCi0jaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvU2xvdFZpc2l0b3IuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9T
bG90VmlzaXRvcklubGluZXMuaD4KKy8vI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1Nsb3RWaXNp
dG9yLmg+CisvLyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9TbG90VmlzaXRvcklubGluZXMuaD4K
KyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9BYnN0cmFjdFNsb3RWaXNpdG9ySW5saW5lcy5oPgog
I2luY2x1ZGUgPHd0Zi9Mb2NrZXIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMTA4LDcg
KzEwOSw4IEBAIHZvaWQgV2ViR0xWZXJ0ZXhBcnJheU9iamVjdEJhc2U6OnNldFZlcnQKICAgICBt
X3ZlcnRleEF0dHJpYlN0YXRlW2luZGV4XS5kaXZpc29yID0gZGl2aXNvcjsKIH0KIAotdm9pZCBX
ZWJHTFZlcnRleEFycmF5T2JqZWN0QmFzZTo6YWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMoY29uc3Qg
QWJzdHJhY3RMb2NrZXImLCBKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy92b2lkIFdlYkdM
VmVydGV4QXJyYXlPYmplY3RCYXNlOjphZGRNZW1iZXJzVG9PcGFxdWVSb290czYwMChjb25zdCBB
YnN0cmFjdExvY2tlciYsIEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIFdlYkdMVmVy
dGV4QXJyYXlPYmplY3RCYXNlOjphZGRNZW1iZXJzVG9PcGFxdWVSb290czYwMChjb25zdCBBYnN0
cmFjdExvY2tlciYsIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB2
aXNpdG9yLmFkZE9wYXF1ZVJvb3QobV9ib3VuZEVsZW1lbnRBcnJheUJ1ZmZlci5nZXQoKSk7CiAg
ICAgZm9yIChhdXRvJiBzdGF0ZSA6IG1fdmVydGV4QXR0cmliU3RhdGUpCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFZlcnRleEFycmF5T2JqZWN0QmFzZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVmVydGV4QXJyYXlPYmplY3RC
YXNlLmgJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dl
YkdMVmVydGV4QXJyYXlPYmplY3RCYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDgg
QEAKICNpbmNsdWRlICJXZWJHTENvbnRleHRPYmplY3QuaCIKIAogbmFtZXNwYWNlIEpTQyB7Ci1j
bGFzcyBTbG90VmlzaXRvcjsKKy8vY2xhc3MgU2xvdFZpc2l0b3I7CitjbGFzcyBBYnN0cmFjdFNs
b3RWaXNpdG9yOwogfQogCiBuYW1lc3BhY2UgV1RGIHsKQEAgLTc2LDcgKzc3LDggQEAgcHVibGlj
OgogCiAgICAgdm9pZCBzZXRWZXJ0ZXhBdHRyaWJEaXZpc29yKEdDR0x1aW50IGluZGV4LCBHQ0dM
dWludCBkaXZpc29yKTsKIAotICAgIHZvaWQgYWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMoY29uc3Qg
V1RGOjpBYnN0cmFjdExvY2tlciYsIEpTQzo6U2xvdFZpc2l0b3ImKTsKKy8vICAgIHZvaWQgYWRk
TWVtYmVyc1RvT3BhcXVlUm9vdHM2MDAoY29uc3QgV1RGOjpBYnN0cmFjdExvY2tlciYsIEpTQzo6
U2xvdFZpc2l0b3ImKTsKKyAgICB2b2lkIGFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzNjAwKGNvbnN0
IFdURjo6QWJzdHJhY3RMb2NrZXImLCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKTsKIAogcHJv
dGVjdGVkOgogICAgIFdlYkdMVmVydGV4QXJyYXlPYmplY3RCYXNlKFdlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2UmLCBUeXBlKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>418900</attachid>
            <date>2021-02-01 11:11:37 -0800</date>
            <delta_ts>2021-02-01 21:53:52 -0800</delta_ts>
            <desc>work in progress.</desc>
            <filename>bug-217274.patch</filename>
            <type>text/plain</type>
            <size>465138</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDI3MTQ0MykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtNjEwLDYgKzYxMCw4IEBAIHNldChKYXZhU2NyaXB0Q29yZV9QUklWQVRFX0ZSQU1FV09SS19I
RUEKICAgICBkb21qaXQvRE9NSklUSGVhcFJhbmdlLmgKICAgICBkb21qaXQvRE9NSklUU2lnbmF0
dXJlLmgKIAorICAgIGhlYXAvQWJzdHJhY3RTbG90VmlzaXRvci5oCisgICAgaGVhcC9BYnN0cmFj
dFNsb3RWaXNpdG9ySW5saW5lcy5oCiAgICAgaGVhcC9BbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmgK
ICAgICBoZWFwL0FsbG9jYXRpb25GYWlsdXJlTW9kZS5oCiAgICAgaGVhcC9BbGxvY2F0b3IuaApA
QCAtNjI5LDYgKzYzMSw4IEBAIHNldChKYXZhU2NyaXB0Q29yZV9QUklWQVRFX0ZSQU1FV09SS19I
RUEKICAgICBoZWFwL0NvbnN0cmFpbnRDb25jdXJyZW5jeS5oCiAgICAgaGVhcC9Db25zdHJhaW50
UGFyYWxsZWxpc20uaAogICAgIGhlYXAvQ29uc3RyYWludFZvbGF0aWxpdHkuaAorICAgIGhlYXAv
RGVidWdTbG90VmlzaXRvci5oCisgICAgaGVhcC9EZWJ1Z1Nsb3RWaXNpdG9ySW5saW5lcy5oCiAg
ICAgaGVhcC9EZWZlckdDLmgKICAgICBoZWFwL0RlbGV0ZUFsbENvZGVFZmZvcnQuaAogICAgIGhl
YXAvRGVzdHJ1Y3Rpb25Nb2RlLmgKQEAgLTY4Myw2ICs2ODcsNyBAQCBzZXQoSmF2YVNjcmlwdENv
cmVfUFJJVkFURV9GUkFNRVdPUktfSEVBCiAgICAgaGVhcC9TaW1wbGVNYXJraW5nQ29uc3RyYWlu
dC5oCiAgICAgaGVhcC9TbG90VmlzaXRvci5oCiAgICAgaGVhcC9TbG90VmlzaXRvcklubGluZXMu
aAorICAgIGhlYXAvU2xvdFZpc2l0b3JNYWNyb3MuaAogICAgIGhlYXAvU3Ryb25nLmgKICAgICBo
ZWFwL1N0cm9uZ0lubGluZXMuaAogICAgIGhlYXAvU3Vic3BhY2UuaApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9Tb3VyY2VzLnR4dAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL1NvdXJjZXMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC01MDMsNiArNTAzLDcgQEAgZnRsL0ZU
TFN0YXRlLmNwcAogZnRsL0ZUTFRodW5rcy5jcHAKIGZ0bC9GVExWYWx1ZVJhbmdlLmNwcAogCito
ZWFwL0Fic3RyYWN0U2xvdFZpc2l0b3IuY3BwCiBoZWFwL0FsaWduZWRNZW1vcnlBbGxvY2F0b3Iu
Y3BwCiBoZWFwL0FsbG9jYXRvci5jcHAKIGhlYXAvQmxvY2tEaXJlY3RvcnkuY3BwCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQVBJV3JhcHBlck9iamVjdC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNBUElXcmFwcGVyT2JqZWN0LmgJKHJldmlz
aW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNBUElXcmFwcGVyT2Jq
ZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00MSw3ICs0MSw3IEBAIHB1YmxpYzoKICAgICBzdGF0
aWMgdm9pZCBzdWJzcGFjZUZvcihWTSYpIHsgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsg
fQogICAgIAogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKLSAgICBzdGF0aWMgdm9pZCB2
aXNpdENoaWxkcmVuKEpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX0VY
UE9SVF9WSVNJVF9DSElMRFJFTjsKICAgICAKICAgICB2b2lkKiB3cmFwcGVkT2JqZWN0KCkgeyBy
ZXR1cm4gbV93cmFwcGVkT2JqZWN0OyB9CiAgICAgdm9pZCBzZXRXcmFwcGVkT2JqZWN0KHZvaWQq
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNBUElXcmFwcGVyT2JqZWN0Lm1t
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNBUElXcmFwcGVyT2Jq
ZWN0Lm1tCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pT
QVBJV3JhcHBlck9iamVjdC5tbQkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM3LDcgKzM3LDcgQEAKIGNs
YXNzIEpTQVBJV3JhcHBlck9iamVjdEhhbmRsZU93bmVyIGZpbmFsIDogcHVibGljIEpTQzo6V2Vh
a0hhbmRsZU93bmVyIHsKIHB1YmxpYzoKICAgICB2b2lkIGZpbmFsaXplKEpTQzo6SGFuZGxlPEpT
Qzo6VW5rbm93bj4sIHZvaWQqKSBmaW5hbDsKLSAgICBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1
ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6U2xv
dFZpc2l0b3ImLCBjb25zdCBjaGFyKiopIGZpbmFsOworICAgIGJvb2wgaXNSZWFjaGFibGVGcm9t
T3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCwgSlND
OjpBYnN0cmFjdFNsb3RWaXNpdG9yJiwgY29uc3QgY2hhcioqKSBmaW5hbDsKIH07CiAKIHN0YXRp
YyBKU0FQSVdyYXBwZXJPYmplY3RIYW5kbGVPd25lcioganNBUElXcmFwcGVyT2JqZWN0SGFuZGxl
T3duZXIoKQpAQCAtNTYsNyArNTYsNyBAQCB2b2lkIEpTQVBJV3JhcHBlck9iamVjdEhhbmRsZU93
bmVyOjpmaW5hCiAgICAgSlNDOjpXZWFrU2V0OjpkZWFsbG9jYXRlKEpTQzo6V2Vha0ltcGw6OmFz
V2Vha0ltcGwoaGFuZGxlLnNsb3QoKSkpOwogfQogCi1ib29sIEpTQVBJV3JhcHBlck9iamVjdEhh
bmRsZU93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVu
a25vd24+IGhhbmRsZSwgdm9pZCosIEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNo
YXIqKikKK2Jvb2wgSlNBUElXcmFwcGVyT2JqZWN0SGFuZGxlT3duZXI6OmlzUmVhY2hhYmxlRnJv
bU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgSlND
OjpBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiopCiB7CiAgICAgSlND
OjpKU0FQSVdyYXBwZXJPYmplY3QqIHdyYXBwZXJPYmplY3QgPSBKU0M6OmpzQ2FzdDxKU0M6OkpT
QVBJV3JhcHBlck9iamVjdCo+KGhhbmRsZS5nZXQoKS5hc0NlbGwoKSk7CiAgICAgLy8gV2UgdXNl
IHRoZSBKU0dsb2JhbE9iamVjdCB3aGVuIHByb2Nlc3Npbmcgd2VhayBoYW5kbGVzIHRvIHByZXZl
bnQgdGhlIHNpdHVhdGlvbiB3aGVyZSB1c2luZwpAQCAtNzMsNiArNzMsOCBAQCBzdGF0aWMgSlND
X0RFQ0xBUkVfSE9TVF9GVU5DVElPTihjb25zdHJ1CiBzdGF0aWMgSlNDX0RFQ0xBUkVfQ1VTVE9N
X0dFVFRFUihjYWxsYmFja0dldHRlckpTQVBJV3JhcHBlck9iamVjdENhbGxiYWNrT2JqZWN0KTsK
IHN0YXRpYyBKU0NfREVDTEFSRV9DVVNUT01fR0VUVEVSKHN0YXRpY0Z1bmN0aW9uR2V0dGVySlNB
UElXcmFwcGVyT2JqZWN0Q2FsbGJhY2tPYmplY3QpOwogCitERUZJTkVfVEVNUExBVEVfVklTSVRf
Q0hJTERSRU4odGVtcGxhdGU8PiwgSlNDYWxsYmFja09iamVjdDxKU0FQSVdyYXBwZXJPYmplY3Q+
KTsKKwogdGVtcGxhdGUgPD4gY29uc3QgQ2xhc3NJbmZvIEpTQ2FsbGJhY2tPYmplY3Q8SlNBUElX
cmFwcGVyT2JqZWN0Pjo6c19pbmZvID0geyAiSlNBUElXcmFwcGVyT2JqZWN0IiwgJkJhc2U6OnNf
aW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU0NhbGxiYWNrT2Jq
ZWN0KSB9OwogdGVtcGxhdGUgPD4gY29uc3QgYm9vbCBKU0NhbGxiYWNrT2JqZWN0PEpTQVBJV3Jh
cHBlck9iamVjdD46Om5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOwogCkBAIC0xMjMsNyArMTI1LDgg
QEAgdm9pZCBKU0FQSVdyYXBwZXJPYmplY3Q6OnNldFdyYXBwZWRPYmplYwogICAgIG1fd3JhcHBl
ZE9iamVjdCA9IFtzdGF0aWNfY2FzdDxpZD4od3JhcHBlZE9iamVjdCkgcmV0YWluXTsKIH0KIAot
dm9pZCBKU0FQSVdyYXBwZXJPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBKU0M6
OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQg
SlNBUElXcmFwcGVyT2JqZWN0Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0
b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNBUElXcmFwcGVyT2JqZWN0KiB0aGlzT2JqZWN0ID0gSlND
Ojpqc0Nhc3Q8SlNBUElXcmFwcGVyT2JqZWN0Kj4oY2VsbCk7CiAgICAgQmFzZTo6dmlzaXRDaGls
ZHJlbihjZWxsLCB2aXNpdG9yKTsKQEAgLTEzMyw2ICsxMzYsOCBAQCB2b2lkIEpTQVBJV3JhcHBl
ck9iamVjdDo6dmlzaXRDaGlsZHJlbihKCiAgICAgICAgIHNjYW5FeHRlcm5hbE9iamVjdEdyYXBo
KHZpc2l0b3Iudm0oKSwgdmlzaXRvciwgd3JhcHBlZE9iamVjdCk7CiB9CiAKK0RFRklORV9FWFBP
UlRfVklTSVRfQ0hJTERSRU4oSlNBUElXcmFwcGVyT2JqZWN0KTsKKwogdGVtcGxhdGUgPD4KIElz
b1N1YnNwYWNlKiBKU0NhbGxiYWNrT2JqZWN0PEpTQVBJV3JhcHBlck9iamVjdD46OnN1YnNwYWNl
Rm9ySW1wbChWTSYgdm0sIFN1YnNwYWNlQWNjZXNzIG1vZGUpCiB7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdC5jcHAJKHJldmlzaW9uIDI3MTQ0
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA2LTIw
MTcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAw
Ni0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykg
MjAwNyBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAt
NDEsNiArNDEsOSBAQCBzdGF0aWMgSlNDX0RFQ0xBUkVfQ1VTVE9NX0dFVFRFUihzdGF0aWNGCiBz
dGF0aWMgSlNDX0RFQ0xBUkVfQ1VTVE9NX0dFVFRFUihjYWxsYmFja0dldHRlckpTR2xvYmFsT2Jq
ZWN0Q2FsbGJhY2tPYmplY3QpOwogc3RhdGljIEpTQ19ERUNMQVJFX0NVU1RPTV9HRVRURVIoc3Rh
dGljRnVuY3Rpb25HZXR0ZXJKU0dsb2JhbE9iamVjdENhbGxiYWNrT2JqZWN0KTsKIAorREVGSU5F
X1RFTVBMQVRFX1ZJU0lUX0NISUxEUkVOKHRlbXBsYXRlPD4sIEpTQ2FsbGJhY2tPYmplY3Q8SlNO
b25GaW5hbE9iamVjdD4pOworREVGSU5FX1RFTVBMQVRFX1ZJU0lUX0NISUxEUkVOKHRlbXBsYXRl
PD4sIEpTQ2FsbGJhY2tPYmplY3Q8SlNHbG9iYWxPYmplY3Q+KTsKKwogLy8gRGVmaW5lIHRoZSB0
d28gdHlwZXMgb2YgSlNDYWxsYmFja09iamVjdHMgd2Ugc3VwcG9ydC4KIHRlbXBsYXRlIDw+IGNv
bnN0IENsYXNzSW5mbyBKU0NhbGxiYWNrT2JqZWN0PEpTTm9uRmluYWxPYmplY3Q+OjpzX2luZm8g
PSB7ICJDYWxsYmFja09iamVjdCIsICZCYXNlOjpzX2luZm8sIG51bGxwdHIsIG51bGxwdHIsIENS
RUFURV9NRVRIT0RfVEFCTEUoSlNDYWxsYmFja09iamVjdCkgfTsKIHRlbXBsYXRlIDw+IGNvbnN0
IENsYXNzSW5mbyBKU0NhbGxiYWNrT2JqZWN0PEpTR2xvYmFsT2JqZWN0Pjo6c19pbmZvID0geyAi
Q2FsbGJhY2tHbG9iYWxPYmplY3QiLCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBudWxscHRyLCBD
UkVBVEVfTUVUSE9EX1RBQkxFKEpTQ2FsbGJhY2tPYmplY3QpIH07CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3QuaAkocmV2aXNpb24gMjcxNDQzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTY5LDcgKzY5LDEwIEBAIHB1YmxpYzoKICAgICAgICAgbV9wcml2YXRlUHJvcGVy
dGllcy0+ZGVsZXRlUHJpdmF0ZVByb3BlcnR5KHByb3BlcnR5TmFtZSk7CiAgICAgfQogCi0gICAg
dm9pZCB2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorICAgIERFQ0xBUkVfVklT
SVRfQ0hJTERSRU47CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgorICAgIHZvaWQg
dmlzaXRDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogICAgIHsKICAgICAgICAgSlNQcml2YXRl
UHJvcGVydHlNYXAqIHByb3BlcnRpZXMgPSBtX3ByaXZhdGVQcm9wZXJ0aWVzLmdldCgpOwogICAg
ICAgICBpZiAoIXByb3BlcnRpZXMpCkBAIC0xMDMsNyArMTA2LDggQEAgcHVibGljOgogICAgICAg
ICAgICAgbV9wcm9wZXJ0eU1hcC5yZW1vdmUocHJvcGVydHlOYW1lLmltcGwoKSk7CiAgICAgICAg
IH0KIAotICAgICAgICB2b2lkIHZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisg
ICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+CisgICAgICAgIHZvaWQgdmlzaXRDaGls
ZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogICAgICAgICB7CiAgICAgICAgICAgICBMb2NrSG9sZGVy
IGxvY2tlcihtX2xvY2spOwogICAgICAgICAgICAgZm9yIChhdXRvJiBwYWlyIDogbV9wcm9wZXJ0
eU1hcCkgewpAQCAtMjE2LDEzICsyMjAsNyBAQCBwcml2YXRlOgogICAgIHN0YXRpYyBDYWxsRGF0
YSBnZXRDb25zdHJ1Y3REYXRhKEpTQ2VsbCopOwogICAgIHN0YXRpYyBDYWxsRGF0YSBnZXRDYWxs
RGF0YShKU0NlbGwqKTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBj
ZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKLSAgICB7Ci0gICAgICAgIEpTQ2FsbGJhY2tPYmpl
Y3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNDYWxsYmFja09iamVjdCo+KGNlbGwpOwotICAgICAg
ICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKChzdGF0aWNfY2FzdDxQYXJlbnQqPih0aGlzT2Jq
ZWN0KSksIEpTQ2FsbGJhY2tPYmplY3Q8UGFyZW50Pjo6aW5mbygpKTsKLSAgICAgICAgUGFyZW50
Ojp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwotICAgICAgICB0aGlzT2JqZWN0
LT5tX2NhbGxiYWNrT2JqZWN0RGF0YS0+dmlzaXRDaGlsZHJlbih2aXNpdG9yKTsKLSAgICB9Cisg
ICAgREVDTEFSRV9URU1QTEFURV9WSVNJVF9DSElMRFJFTjsKIAogICAgIHZvaWQgaW5pdChKU0ds
b2JhbE9iamVjdCopOwogIApAQCAtMjQ1LDYgKzI0MywxNiBAQCBwcml2YXRlOgogICAgIGNvbnN0
IENsYXNzSW5mbyogbV9jbGFzc0luZm8geyBudWxscHRyIH07CiB9OwogCit0ZW1wbGF0ZSA8Y2xh
c3MgUGFyZW50PgordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNDYWxsYmFja09i
amVjdDxQYXJlbnQ+Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZp
c2l0b3IpCit7CisgICAgSlNDYWxsYmFja09iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0Nh
bGxiYWNrT2JqZWN0Kj4oY2VsbCk7CisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUygoc3Rh
dGljX2Nhc3Q8UGFyZW50Kj4odGhpc09iamVjdCkpLCBKU0NhbGxiYWNrT2JqZWN0PFBhcmVudD46
OmluZm8oKSk7CisgICAgUGFyZW50Ojp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3Ip
OworICAgIHRoaXNPYmplY3QtPm1fY2FsbGJhY2tPYmplY3REYXRhLT52aXNpdENoaWxkcmVuKHZp
c2l0b3IpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogLy8gaW5jbHVkZSB0aGUgYWN0dWFs
IHRlbXBsYXRlIGNsYXNzIGltcGxlbWVudGF0aW9uCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvQVBJL0pTTWFuYWdlZFZhbHVlLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9BUEkvSlNNYW5hZ2VkVmFsdWUubW0JKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9BUEkvSlNNYW5hZ2VkVmFsdWUubW0JKHdvcmtpbmcgY29weSkKQEAgLTQy
LDcgKzQyLDcgQEAKIGNsYXNzIEpTTWFuYWdlZFZhbHVlSGFuZGxlT3duZXIgZmluYWwgOiBwdWJs
aWMgSlNDOjpXZWFrSGFuZGxlT3duZXIgewogcHVibGljOgogICAgIHZvaWQgZmluYWxpemUoSlND
OjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCkgZmluYWw7Ci0gICAgYm9vbCBp
c1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lk
KiBjb250ZXh0LCBKU0M6OlNsb3RWaXNpdG9yJiwgY29uc3QgY2hhcioqKSBmaW5hbDsKKyAgICBi
b29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4s
IHZvaWQqIGNvbnRleHQsIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYsIGNvbnN0IGNoYXIqKikg
ZmluYWw7CiB9OwogCiBzdGF0aWMgSlNNYW5hZ2VkVmFsdWVIYW5kbGVPd25lciYgbWFuYWdlZFZh
bHVlSGFuZGxlT3duZXIoKQpAQCAtMTgwLDcgKzE4MCw3IEBAIEBpbnRlcmZhY2UgSlNNYW5hZ2Vk
VmFsdWUgKFByaXZhdGVNZXRob2QKIC0gKHZvaWQpZGlzY29ubmVjdFZhbHVlOwogQGVuZAogCi1i
b29sIEpTTWFuYWdlZFZhbHVlSGFuZGxlT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3Rz
KEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6U2xvdFZpc2l0
b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCitib29sIEpTTWFuYWdlZFZhbHVlSGFu
ZGxlT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5r
bm93bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvciwg
Y29uc3QgY2hhcioqIHJlYXNvbikKIHsKICAgICBpZiAoVU5MSUtFTFkocmVhc29uKSkKICAgICAg
ICAgKnJlYXNvbiA9ICJKU01hbmFnZWRWYWx1ZSBpcyBvcGFxdWUgcm9vdCI7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTTWFya2luZ0NvbnN0cmFpbnRQcml2YXRlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTTWFya2luZ0NvbnN0cmFpbnRQ
cml2YXRlLmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQ
SS9KU01hcmtpbmdDb25zdHJhaW50UHJpdmF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDcg
KzM2LDcgQEAgbmFtZXNwYWNlIHsKIEF0b21pYzx1bnNpZ25lZD4gY29uc3RyYWludENvdW50ZXI7
CiAKIHN0cnVjdCBNYXJrZXIgOiBKU01hcmtlciB7Ci0gICAgU2xvdFZpc2l0b3IqIHZpc2l0b3I7
CisgICAgQWJzdHJhY3RTbG90VmlzaXRvciogdmlzaXRvcjsKIH07CiAKIGJvb2wgaXNNYXJrZWQo
SlNNYXJrZXJSZWYgbWFya2VyUmVmLCBKU09iamVjdFJlZiBvYmplY3RSZWYpCkBAIC03NCwxMSAr
NzQsMTEgQEAgdm9pZCBKU0NvbnRleHRHcm91cEFkZE1hcmtpbmdDb25zdHJhaW50KAogICAgICAg
ICB0b0NTdHJpbmcoIkFtYyIsIGNvbnN0cmFpbnRJbmRleCwgIigiLCBSYXdQb2ludGVyKGJpdHdp
c2VfY2FzdDx2b2lkKj4oY29uc3RyYWludENhbGxiYWNrKSksICIpIiksCiAgICAgICAgIHRvQ1N0
cmluZygiQVBJIE1hcmtpbmcgQ29uc3RyYWludCAjIiwgY29uc3RyYWludEluZGV4LCAiICgiLCBS
YXdQb2ludGVyKGJpdHdpc2VfY2FzdDx2b2lkKj4oY29uc3RyYWludENhbGxiYWNrKSksICIsICIs
IFJhd1BvaW50ZXIodXNlckRhdGEpLCAiKSIpLAogICAgICAgICBbY29uc3RyYWludENhbGxiYWNr
LCB1c2VyRGF0YV0KLSAgICAgICAgKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvcikgeworICAgICAg
ICAoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikgewogICAgICAgICAgICAgTWFya2VyIG1h
cmtlcjsKICAgICAgICAgICAgIG1hcmtlci5Jc01hcmtlZCA9IGlzTWFya2VkOwogICAgICAgICAg
ICAgbWFya2VyLk1hcmsgPSBtYXJrOwotICAgICAgICAgICAgbWFya2VyLnZpc2l0b3IgPSAmc2xv
dFZpc2l0b3I7CisgICAgICAgICAgICBtYXJrZXIudmlzaXRvciA9ICZ2aXNpdG9yOwogICAgICAg
ICAgICAgCiAgICAgICAgICAgICBjb25zdHJhaW50Q2FsbGJhY2soJm1hcmtlciwgdXNlckRhdGEp
OwogICAgICAgICB9LApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1ZpcnR1YWxN
YWNoaW5lLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWaXJ0
dWFsTWFjaGluZS5tbQkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L0FQSS9KU1ZpcnR1YWxNYWNoaW5lLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zMTYsNyArMzE2LDgg
QEAgKyAodm9pZClzZXRDcmFzaE9uVk1DcmVhdGlvbjooQk9PTClzaG91bAogCiBAZW5kCiAKLXN0
YXRpYyB2b2lkIHNjYW5FeHRlcm5hbE9iamVjdEdyYXBoKEpTQzo6Vk0mIHZtLCBKU0M6OlNsb3RW
aXNpdG9yJiB2aXNpdG9yLCB2b2lkKiByb290LCBib29sIGxvY2tBY3F1aXJlZCkKK3RlbXBsYXRl
PHR5cGVuYW1lIFZpc2l0b3I+CitzdGF0aWMgdm9pZCBzY2FuRXh0ZXJuYWxPYmplY3RHcmFwaChK
U0M6OlZNJiB2bSwgVmlzaXRvciYgdmlzaXRvciwgdm9pZCogcm9vdCwgYm9vbCBsb2NrQWNxdWly
ZWQpCiB7CiAgICAgQGF1dG9yZWxlYXNlcG9vbCB7CiAgICAgICAgIEpTVmlydHVhbE1hY2hpbmUg
KnZpcnR1YWxNYWNoaW5lID0gW0pTVk1XcmFwcGVyQ2FjaGUgd3JhcHBlckZvckpTQ29udGV4dEdy
b3VwUmVmOnRvUmVmKCZ2bSldOwpAQCAtMzQ4LDEzICszNDksMTcgQEAgc3RhdGljIHZvaWQgc2Nh
bkV4dGVybmFsT2JqZWN0R3JhcGgoSlNDOgogICAgIH0KIH0KIAotdm9pZCBzY2FuRXh0ZXJuYWxP
YmplY3RHcmFwaChKU0M6OlZNJiB2bSwgSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvciwgdm9pZCog
cm9vdCkKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIHNjYW5FeHRlcm5hbE9iamVj
dEdyYXBoKEpTQzo6Vk0mIHZtLCBWaXNpdG9yJiB2aXNpdG9yLCB2b2lkKiByb290KQogewogICAg
IGJvb2wgbG9ja0FjcXVpcmVkID0gZmFsc2U7CiAgICAgc2NhbkV4dGVybmFsT2JqZWN0R3JhcGgo
dm0sIHZpc2l0b3IsIHJvb3QsIGxvY2tBY3F1aXJlZCk7CiB9CiAKLXZvaWQgc2NhbkV4dGVybmFs
UmVtZW1iZXJlZFNldChKU0M6OlZNJiB2bSwgSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3Rl
bXBsYXRlIHZvaWQgc2NhbkV4dGVybmFsT2JqZWN0R3JhcGgoSlNDOjpWTSYsIEpTQzo6U2xvdFZp
c2l0b3ImLCB2b2lkKik7Cit0ZW1wbGF0ZSB2b2lkIHNjYW5FeHRlcm5hbE9iamVjdEdyYXBoKEpT
Qzo6Vk0mLCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImLCB2b2lkKik7CisKK3ZvaWQgc2NhbkV4
dGVybmFsUmVtZW1iZXJlZFNldChKU0M6OlZNJiB2bSwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9y
JiB2aXNpdG9yKQogewogICAgIEBhdXRvcmVsZWFzZXBvb2wgewogICAgICAgICBKU1ZpcnR1YWxN
YWNoaW5lICp2aXJ0dWFsTWFjaGluZSA9IFtKU1ZNV3JhcHBlckNhY2hlIHdyYXBwZXJGb3JKU0Nv
bnRleHRHcm91cFJlZjp0b1JlZigmdm0pXTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9B
UEkvSlNWaXJ0dWFsTWFjaGluZUludGVybmFsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL0FQSS9KU1ZpcnR1YWxNYWNoaW5lSW50ZXJuYWwuaAkocmV2aXNpb24gMjcxNDQz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1ZpcnR1YWxNYWNoaW5lSW50ZXJuYWwu
aAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsOCBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIGNs
YXNzIFZNOwotY2xhc3MgU2xvdFZpc2l0b3I7CisvL2NsYXNzIFNsb3RWaXNpdG9yOworY2xhc3Mg
QWJzdHJhY3RTbG90VmlzaXRvcjsKIH0KIAogI2lmIGRlZmluZWQoX19PQkpDX18pCkBAIC01NCw4
ICs1NSw4IEBAIEpTQ29udGV4dEdyb3VwUmVmIGdldEdyb3VwRnJvbVZpcnR1YWxNYWMKIAogI2Vu
ZGlmIC8vIGRlZmluZWQoX19PQkpDX18pCiAKLXZvaWQgc2NhbkV4dGVybmFsT2JqZWN0R3JhcGgo
SlNDOjpWTSYsIEpTQzo6U2xvdFZpc2l0b3ImLCB2b2lkKiByb290KTsKLXZvaWQgc2NhbkV4dGVy
bmFsUmVtZW1iZXJlZFNldChKU0M6OlZNJiwgSlNDOjpTbG90VmlzaXRvciYpOwordGVtcGxhdGU8
dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCBzY2FuRXh0ZXJuYWxPYmplY3RHcmFwaChKU0M6OlZNJiwg
VmlzaXRvciYsIHZvaWQqIHJvb3QpOwordm9pZCBzY2FuRXh0ZXJuYWxSZW1lbWJlcmVkU2V0KEpT
Qzo6Vk0mLCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKTsKIAogI2VuZGlmIC8vIEpTQ19PQkpD
X0FQSV9FTkFCTEVECiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvTWFya2VkSlNW
YWx1ZVJlZkFycmF5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJ
L01hcmtlZEpTVmFsdWVSZWZBcnJheS5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9BUEkvTWFya2VkSlNWYWx1ZVJlZkFycmF5LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDYsNyArNDYsOSBAQCBNYXJrZWRKU1ZhbHVlUmVmQXJyYXk6On5NYXJrZWRKU1ZhbHVl
UmVmCiAgICAgICAgIHJlbW92ZSgpOwogfQogCi12b2lkIE1hcmtlZEpTVmFsdWVSZWZBcnJheTo6
dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3RlbXBsYXRlPHR5cGVuYW1l
IFZpc2l0b3I+CisvL3ZvaWQgTWFya2VkSlNWYWx1ZVJlZkFycmF5Ojp2aXNpdEFnZ3JlZ2F0ZShW
aXNpdG9yJiB2aXNpdG9yKQordm9pZCBNYXJrZWRKU1ZhbHVlUmVmQXJyYXk6OnZpc2l0QWdncmVn
YXRlMShBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTVmFsdWVSZWYqIGJ1
ZmZlciA9IGRhdGEoKTsKICAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gMDsgaW5kZXggPCBtX3Np
emU7ICsraW5kZXgpIHsKQEAgLTYyLDQgKzY0LDcgQEAgdm9pZCBNYXJrZWRKU1ZhbHVlUmVmQXJy
YXk6OnZpc2l0QWdncmVnYQogICAgIH0KIH0KIAorLy90ZW1wbGF0ZSB2b2lkIE1hcmtlZEpTVmFs
dWVSZWZBcnJheTo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImKTsKKy8vdGVtcGxhdGUgdm9p
ZCBNYXJrZWRKU1ZhbHVlUmVmQXJyYXk6OnZpc2l0QWdncmVnYXRlKERlYnVnU2xvdFZpc2l0b3Im
KTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJ
L01hcmtlZEpTVmFsdWVSZWZBcnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9BUEkvTWFya2VkSlNWYWx1ZVJlZkFycmF5LmgJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvTWFya2VkSlNWYWx1ZVJlZkFycmF5LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTYyLDcgKzYyLDggQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9pbmxpbmVC
dWZmZXI7CiAgICAgfQogCi0gICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYpOwor
Ly8gICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCB2aXNpdEFnZ3JlZ2F0ZShWaXNp
dG9yJik7CisgICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZTEoQWJzdHJhY3RTbG90VmlzaXRvciYpOwog
CiBwcml2YXRlOgogICAgIHVuc2lnbmVkIG1fc2l6ZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9BUEkvZ2xpYi9KU0FQSVdyYXBwZXJHbG9iYWxPYmplY3QuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0FQSVdyYXBwZXJHbG9iYWxPYmplY3Qu
Y3BwCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIv
SlNBUElXcmFwcGVyR2xvYmFsT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTksNiArNTks
OCBAQCBzdGF0aWMgSlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElPTihjb25zdHJ1CiBzdGF0aWMgSlND
X0RFQ0xBUkVfQ1VTVE9NX0dFVFRFUihjYWxsYmFja0dldHRlckpTQVBJV3JhcHBlckdsb2JhbE9i
amVjdENhbGxiYWNrT2JqZWN0KTsKIHN0YXRpYyBKU0NfREVDTEFSRV9DVVNUT01fR0VUVEVSKHN0
YXRpY0Z1bmN0aW9uR2V0dGVySlNBUElXcmFwcGVyR2xvYmFsT2JqZWN0Q2FsbGJhY2tPYmplY3Qp
OwogCitERUZJTkVfVEVNUExBVEVfVklTSVRfQ0hJTERSRU4odGVtcGxhdGU8PiwgSlNDYWxsYmFj
a09iamVjdDxKU0FQSVdyYXBwZXJHbG9iYWxPYmplY3Q+KTsKKwogdGVtcGxhdGUgPD4gY29uc3Qg
Q2xhc3NJbmZvIEpTQ2FsbGJhY2tPYmplY3Q8SlNBUElXcmFwcGVyR2xvYmFsT2JqZWN0Pjo6c19p
bmZvID0geyAiSlNBUElXcmFwcGVyR2xvYmFsT2JqZWN0IiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0
ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU0NhbGxiYWNrT2JqZWN0KSB9OwogdGVt
cGxhdGU8PiBjb25zdCBib29sIEpTQ2FsbGJhY2tPYmplY3Q8SlNBUElXcmFwcGVyR2xvYmFsT2Jq
ZWN0Pjo6bmVlZHNEZXN0cnVjdGlvbiA9IHRydWU7CiAKQEAgLTE0NCw5ICsxNDYsOSBAQCB2b2lk
IEpTQVBJV3JhcHBlckdsb2JhbE9iamVjdDo6ZmluaXNoQ3JlCiAgICAgV2Vha1NldDo6YWxsb2Nh
dGUodGhpcywganNBUElXcmFwcGVyR2xvYmFsT2JqZWN0SGFuZGxlT3duZXIoKSwgMCk7IC8vIEJh
bGFuY2VkIGluIEpTQVBJV3JhcHBlckdsb2JhbE9iamVjdEhhbmRsZU93bmVyOjpmaW5hbGl6ZS4K
IH0KIAotdm9pZCBKU0FQSVdyYXBwZXJHbG9iYWxPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiBjZWxsLCBKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQotewotICAgIEJhc2U6OnZpc2l0Q2hp
bGRyZW4oY2VsbCwgdmlzaXRvcik7Ci19CisvL3ZvaWQgSlNBUElXcmFwcGVyR2xvYmFsT2JqZWN0
Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikK
Ky8veworLy8gICAgQmFzZTo6dmlzaXRDaGlsZHJlbihjZWxsLCB2aXNpdG9yKTsKKy8vfQogCiB9
IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9K
U0FQSVdyYXBwZXJHbG9iYWxPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvQVBJL2dsaWIvSlNBUElXcmFwcGVyR2xvYmFsT2JqZWN0LmgJKHJldmlzaW9uIDI3MTQ0
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0FQSVdyYXBwZXJHbG9iYWxP
YmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMzksNyArMzksNyBAQCBwdWJsaWM6CiAgICAgc3Rh
dGljIHZvaWQgc3Vic3BhY2VGb3IoVk0mKSB7IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
IH0KIAogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNp
dENoaWxkcmVuKEpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKTsKKyAgICAvLyBzdGF0aWMgdm9p
ZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKTsKIAogICAgIEpTQ0dM
aWJXcmFwcGVyT2JqZWN0KiB3cmFwcGVkT2JqZWN0KCkgY29uc3QgeyByZXR1cm4gbV93cmFwcGVk
T2JqZWN0OyB9CiAgICAgdm9pZCBzZXRXcmFwcGVkT2JqZWN0KEpTQ0dMaWJXcmFwcGVyT2JqZWN0
KiB3cmFwcGVkT2JqZWN0KSB7IG1fd3JhcHBlZE9iamVjdCA9IHdyYXBwZWRPYmplY3Q7IH0KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0FQSVdyYXBwZXJPYmplY3RHTGli
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNBUElX
cmFwcGVyT2JqZWN0R0xpYi5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvZ2xpYi9KU0FQSVdyYXBwZXJPYmplY3RHTGliLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkpTQVBJ
V3JhcHBlck9iamVjdC5oIgogCisjaW5jbHVkZSAiQWJzdHJhY3RTbG90VmlzaXRvci5oIgogI2lu
Y2x1ZGUgIkpTQ0dMaWJXcmFwcGVyT2JqZWN0LmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgog
I2luY2x1ZGUgIkpTQ2FsbGJhY2tPYmplY3QuaCIKQEAgLTM2LDcgKzM3LDggQEAKIGNsYXNzIEpT
QVBJV3JhcHBlck9iamVjdEhhbmRsZU93bmVyIGZpbmFsIDogcHVibGljIEpTQzo6V2Vha0hhbmRs
ZU93bmVyIHsKIHB1YmxpYzoKICAgICB2b2lkIGZpbmFsaXplKEpTQzo6SGFuZGxlPEpTQzo6VW5r
bm93bj4sIHZvaWQqKSBmaW5hbDsKLSAgICBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3Rz
KEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6U2xvdFZpc2l0
b3ImLCBjb25zdCBjaGFyKiopIGZpbmFsOworLy8gICAgIGJvb2wgaXNSZWFjaGFibGVGcm9tT3Bh
cXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCwgSlNDOjpT
bG90VmlzaXRvciYsIGNvbnN0IGNoYXIqKikgZmluYWw7CisgICAgYm9vbCBpc1JlYWNoYWJsZUZy
b21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0LCBK
U0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImLCBjb25zdCBjaGFyKiopIGZpbmFsOwogfTsKIAogc3Rh
dGljIEpTQVBJV3JhcHBlck9iamVjdEhhbmRsZU93bmVyKiBqc0FQSVdyYXBwZXJPYmplY3RIYW5k
bGVPd25lcigpCkBAIC01NSw3ICs1Nyw4IEBAIHZvaWQgSlNBUElXcmFwcGVyT2JqZWN0SGFuZGxl
T3duZXI6OmZpbmEKICAgICBKU0M6OldlYWtTZXQ6OmRlYWxsb2NhdGUoSlNDOjpXZWFrSW1wbDo6
YXNXZWFrSW1wbChoYW5kbGUuc2xvdCgpKSk7CiB9CiAKLWJvb2wgSlNBUElXcmFwcGVyT2JqZWN0
SGFuZGxlT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6
VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3Qg
Y2hhcioqKQorLy8gYm9vbCBKU0FQSVdyYXBwZXJPYmplY3RIYW5kbGVPd25lcjo6aXNSZWFjaGFi
bGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQq
LCBKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiopCitib29sIEpTQVBJV3Jh
cHBlck9iamVjdEhhbmRsZU93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6Okhh
bmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRv
ciYgdmlzaXRvciwgY29uc3QgY2hhcioqKQogewogICAgIEpTQzo6SlNBUElXcmFwcGVyT2JqZWN0
KiB3cmFwcGVyT2JqZWN0ID0gSlNDOjpqc0Nhc3Q8SlNDOjpKU0FQSVdyYXBwZXJPYmplY3QqPiho
YW5kbGUuZ2V0KCkuYXNDZWxsKCkpOwogICAgIC8vIFdlIHVzZSB0aGUgSlNHbG9iYWxPYmplY3Qg
d2hlbiBwcm9jZXNzaW5nIHdlYWsgaGFuZGxlcyB0byBwcmV2ZW50IHRoZSBzaXR1YXRpb24gd2hl
cmUgdXNpbmcKQEAgLTcyLDYgKzc1LDggQEAgc3RhdGljIEpTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJ
T04oY29uc3RydQogc3RhdGljIEpTQ19ERUNMQVJFX0NVU1RPTV9HRVRURVIoY2FsbGJhY2tHZXR0
ZXJKU0FQSVdyYXBwZXJPYmplY3RDYWxsYmFja09iamVjdCk7CiBzdGF0aWMgSlNDX0RFQ0xBUkVf
Q1VTVE9NX0dFVFRFUihzdGF0aWNGdW5jdGlvbkdldHRlckpTQVBJV3JhcHBlck9iamVjdENhbGxi
YWNrT2JqZWN0KTsKIAorREVGSU5FX1RFTVBMQVRFX1ZJU0lUX0NISUxEUkVOKHRlbXBsYXRlPD4s
IEpTQ2FsbGJhY2tPYmplY3Q8SlNBUElXcmFwcGVyT2JqZWN0Pik7CisKIHRlbXBsYXRlIDw+IGNv
bnN0IENsYXNzSW5mbyBKU0NhbGxiYWNrT2JqZWN0PEpTQVBJV3JhcHBlck9iamVjdD46OnNfaW5m
byA9IHsgIkpTQVBJV3JhcHBlck9iamVjdCIsICZCYXNlOjpzX2luZm8sIG51bGxwdHIsIG51bGxw
dHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNDYWxsYmFja09iamVjdCkgfTsKIHRlbXBsYXRlPD4g
Y29uc3QgYm9vbCBKU0NhbGxiYWNrT2JqZWN0PEpTQVBJV3JhcHBlck9iamVjdD46Om5lZWRzRGVz
dHJ1Y3Rpb24gPSB0cnVlOwogCkBAIC0xNTUsOSArMTYwLDEyIEBAIHZvaWQgSlNBUElXcmFwcGVy
T2JqZWN0OjpzZXRXcmFwcGVkT2JqZWMKICAgICBtX3dyYXBwZWRPYmplY3QgPSB3cmFwcGVkT2Jq
ZWN0OwogfQogCi12b2lkIEpTQVBJV3JhcHBlck9iamVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwq
IGNlbGwsIEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNp
dG9yPgordm9pZCBKU0FQSVdyYXBwZXJPYmplY3Q6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCog
Y2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKGNlbGws
IHZpc2l0b3IpOwogfQogCitERUZJTkVfRVhQT1JUX1ZJU0lUX0NISUxEUkVOKEpTQVBJV3JhcHBl
ck9iamVjdCk7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0x
OTA4LDYgKzE5MDgsNyBAQAogCQlFM0ZGNzUzMzFEOUNFQTE4MDBDN0UxNkQgLyogRE9NSklUR2V0
dGVyU2V0dGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBFM0ZGNzUyRjFEOUNFQTEyMDBDN0UxNkQgLyogRE9NSklUR2V0dGVyU2V0dGVyLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTQ5REMxNkMxMkVG
Mjk0RTAwMTg0QTFGIC8qIFNvdXJjZVByb3ZpZGVyQ2FjaGUuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0OURDMTUxMTJFRjI3MjIwMDE4NEExRiAvKiBT
b3VyY2VQcm92aWRlckNhY2hlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJRTQ5REMxNkQxMkVGMjk1MzAwMTg0QTFGIC8qIFNvdXJjZVByb3ZpZGVy
Q2FjaGVJdGVtLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBFNDlEQzE0OTEyRUYyNjFBMDAxODRBMUYgLyogU291cmNlUHJvdmlkZXJDYWNoZUl0ZW0uaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlGRTA0MTU1
MzI1MkVDMDczMDA5MUVCNUQgLyogU2xvdFZpc2l0b3JNYWNyb3MuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFMDQxNTUyMjUyRUMwNzMwMDkxRUI1RCAv
KiBTbG90VmlzaXRvck1hY3Jvcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCUZFMDVGQUZEMUZFNENFREEwMDA5MzIzMCAvKiBEZXByZWNhdGVkSW5z
cGVjdG9yVmFsdWVzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDk5MkQ2QTExMUZCRDQ5MUQwMDAyNDVGNCAvKiBEZXByZWNhdGVkSW5zcGVjdG9yVmFs
dWVzLmNwcCAqLzsgfTsKIAkJRkUwODZCQ0EyMTIzREVGQjAwM0YyOTI5IC8qIEVudHJ5RnJhbWUu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFMDg2QkM5
MjEyM0RFRkEwMDNGMjkyOSAvKiBFbnRyeUZyYW1lLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRkUwRDRBMDYxQUI4REQwQTAwMkY1NEJGIC8qIEV4
ZWN1dGlvblRpbWVMaW1pdFRlc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRkUwRDRBMDQxQUI4REQwQTAwMkY1NEJGIC8qIEV4ZWN1dGlvblRpbWVM
aW1pdFRlc3QuY3BwICovOyB9OwpAQCAtMTkzMCw2ICsxOTMxLDggQEAKIAkJRkUxRTJDM0YyMjQw
REQ1ODAwRjZCNzI5IC8qIE1hY3JvQXNzZW1ibGVyQVJNNjRFLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTFFMkMzRTIyNDBEMzBCMDBGNkI3MjkgLyog
TWFjcm9Bc3NlbWJsZXJBUk02NEUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQlGRTFFMkM0MDIyNDBERDYyMDBGNkI3MjkgLyogQVJNNjRFQXNzZW1i
bGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTFF
MkMzRDIyNDBEMkY2MDBGNkI3MjkgLyogQVJNNjRFQXNzZW1ibGVyLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRkUyMENFOUUxNUYwNEE5NTAwREYz
NDMwIC8qIExMSW50Q0xvb3AuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEZFMjBDRTlDMTVGMDRBOTUwMERGMzQzMCAvKiBMTEludENMb29wLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJRkUyODdEMDIyNTJG
QjJFODAwRDcyM0Y5IC8qIERlYnVnU2xvdFZpc2l0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFMjg3RDAxMjUyRkIyRTgwMEQ3MjNGOSAvKiBEZWJ1
Z1Nsb3RWaXNpdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKKwkJRkUyODdEMDQyNTJGQkZFQjAwRDcyM0Y5IC8qIERlYnVnU2xvdFZpc2l0b3JJbmxp
bmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTI4
N0QwMzI1MkZCRkVBMDBENzIzRjkgLyogRGVidWdTbG90VmlzaXRvcklubGluZXMuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlGRTJBODc2MDFGMDIz
ODE2MDBFQjMxQjIgLyogTWluaW11bVJlc2VydmVkWm9uZVNpemUuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFMkE4NzVGMUYwMjM4MTYwMEVCMzFCMiAv
KiBNaW5pbXVtUmVzZXJ2ZWRab25lU2l6ZS5oICovOyB9OwogCQlGRTMwMjJEMzFFM0Q3M0E1MDBC
QUM0OTMgLyogU2lnaWxsQ3Jhc2hBbmFseXplci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRkUzMDIyRDExRTNENzM5NjAwQkFDNDkzIC8qIFNpZ2lsbENy
YXNoQW5hbHl6ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQlGRTMwMjJENzFFNDI4NTczMDBCQUM0OTMgLyogVk1JbnNwZWN0b3IuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFMzAyMkQ1MUU0Mjg1Njcw
MEJBQzQ5MyAvKiBWTUluc3BlY3Rvci5oICovOyB9OwpAQCAtMTk2Nyw2ICsxOTcwLDggQEAKIAkJ
RkU4MEMxOTcxRDc3NUNERDAwODUxMEMwIC8qIENhdGNoU2NvcGUuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFODBDMTk2MUQ3NzVCMjcwMDg1MTBDMCAv
KiBDYXRjaFNjb3BlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJRkU4REU1NEIyM0FDMURBRDAwNUM5MTQyIC8qIENhY2hlYWJsZUlkZW50aWZpZXIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFOERFNTRB
MjNBQzFEQUQwMDVDOTE0MiAvKiBDYWNoZWFibGVJZGVudGlmaWVyLmggKi87IH07CiAJCUZFOERF
NTREMjNBQzFFODYwMDVDOTE0MiAvKiBDYWNoZWFibGVJZGVudGlmaWVySW5saW5lcy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkU4REU1NEMyM0FDMUU4
NjAwNUM5MTQyIC8qIENhY2hlYWJsZUlkZW50aWZpZXJJbmxpbmVzLmggKi87IH07CisJCUZFOTEy
QjRGMjUzMTE5MzMwMEZBQkRERiAvKiBBYnN0cmFjdFNsb3RWaXNpdG9yLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTkxMkI0RTI1MzExOTMzMDBGQUJE
REYgLyogQWJzdHJhY3RTbG90VmlzaXRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CisJCUZFOTEyQjUxMjUzMTFBRDEwMEZBQkRERiAvKiBBYnN0cmFj
dFNsb3RWaXNpdG9ySW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRkU5MTJCNTAyNTMxMUFEMTAwRkFCRERGIC8qIEFic3RyYWN0U2xvdFZpc2l0
b3JJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJRkU5OUIyNDkxQzI0QzNEMzAwQzgyMTU5IC8qIEpJVE5lZ0dlbmVyYXRvci5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkU5OUIyNDgxQzI0QjZE
MzAwQzgyMTU5IC8qIEpJVE5lZ0dlbmVyYXRvci5oICovOyB9OwogCQlGRUEwODYyMDE4MkI3QTA0
MDBGNkQ4NTEgLyogQnJlYWtwb2ludC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRkVBMDg2MUUxODJCN0EwNDAwRjZEODUxIC8qIEJyZWFrcG9pbnQuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlGRUEwODYy
MTE4MkI3QTA0MDBGNkQ4NTEgLyogRGVidWdnZXJQcmltaXRpdmVzLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRUEwODYxRjE4MkI3QTA0MDBGNkQ4NTEg
LyogRGVidWdnZXJQcmltaXRpdmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKQEAgLTUxOTcsNiArNTIwMiw3IEBACiAJCUY2OTJBODg3MDI1NTU5N0Qw
MUZGNjBGNyAvKiBKU0NKU1ZhbHVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTQ0pTVmFsdWUuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB0YWJXaWR0aCA9IDg7IH07CiAJCUY3MzkyNjkxOERDNjQzMzBBRkNERjBENyAvKiBK
U1NvdXJjZUNvZGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNT
b3VyY2VDb2RlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkUwMDI2MjIyM0Yz
QUYzMzAwM0EzNThGIC8qIFdlYkFzc2VtYmx5LmFzbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYXNtLmFzbTsgbmFtZSA9IFdlYkFz
c2VtYmx5LmFzbTsgcGF0aCA9IGxsaW50L1dlYkFzc2VtYmx5LmFzbTsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJRkUwNDE1NTIyNTJFQzA3MzAwOTFFQjVEIC8qIFNsb3RWaXNpdG9yTWFj
cm9zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNsb3RWaXNpdG9yTWFjcm9z
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFMDg2QkM5MjEyM0RFRkEwMDNGMjky
OSAvKiBFbnRyeUZyYW1lLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEVudHJ5
RnJhbWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkUwRDRBMDQxQUI4REQwQTAw
MkY1NEJGIC8qIEV4ZWN1dGlvblRpbWVMaW1pdFRlc3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBuYW1lID0gRXhlY3V0aW9uVGltZUxpbWl0VGVzdC5jcHA7IHBhdGggPSBBUEkv
dGVzdHMvRXhlY3V0aW9uVGltZUxpbWl0VGVzdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUZFMEQ0QTA1MUFCOEREMEEwMDJGNTRCRiAvKiBFeGVjdXRpb25UaW1lTGltaXRUZXN0
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEV4ZWN1dGlvblRpbWVMaW1pdFRl
c3QuaDsgcGF0aCA9IEFQSS90ZXN0cy9FeGVjdXRpb25UaW1lTGltaXRUZXN0Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01MjEwLDYgKzUyMTYsNyBAQAogCQlGRTEyMjAyNTFCRTdG
NTY0MDAzOUU2RjIgLyogSklUQWRkR2VuZXJhdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEpJVEFkZEdlbmVyYXRvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUZFMTIyMDI2MUJFN0Y1NjQwMDM5RTZGMiAvKiBKSVRBZGRHZW5lcmF0b3IuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSklUQWRkR2VuZXJhdG9yLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFMTQwOTA2MjA1NkYzRkUwMENGRTMxOCAvKiBOYXRp
dmVGdW5jdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBOYXRpdmVGdW5j
dGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRTE3OENDMzI1NUYyMDU1MDBG
RkQ2NzcgLyogQWJzdHJhY3RTbG90VmlzaXRvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBBYnN0cmFjdFNsb3RWaXNpdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJRkUxODc5RkYxQkZCQzczQzAwMzhCQkNBIC8qIEpJVE11bEdlbmVyYXRvci5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKSVRNdWxHZW5lcmF0b3Iu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTE4N0EwMDFCRkJDNzNDMDAzOEJC
Q0EgLyogSklUTXVsR2VuZXJhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEpJVE11bEdlbmVyYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTE4N0Ew
QTFDMDIyOTIzMDAzOEJCQ0EgLyogSklURGl2R2VuZXJhdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpJVERpdkdlbmVyYXRvci5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC01MjMxLDYgKzUyMzgsOCBAQAogCQlGRTFFMkMzRTIyNDBEMzBCMDBG
NkI3MjkgLyogTWFjcm9Bc3NlbWJsZXJBUk02NEUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gTWFjcm9Bc3NlbWJsZXJBUk02NEUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJRkUyMENFOUIxNUYwNEE5NTAwREYzNDMwIC8qIExMSW50Q0xvb3AuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gTExJbnRDTG9vcC5jcHA7IHBhdGggPSBsbGlu
dC9MTEludENMb29wLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkUyMENFOUMx
NUYwNEE5NTAwREYzNDMwIC8qIExMSW50Q0xvb3AuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gTExJbnRDTG9vcC5oOyBwYXRoID0gbGxpbnQvTExJbnRDTG9vcC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlGRTI4N0QwMTI1MkZCMkU4MDBENzIzRjkgLyogRGVidWdT
bG90VmlzaXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEZWJ1Z1Nsb3RW
aXNpdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZFMjg3RDAzMjUyRkJGRUEw
MEQ3MjNGOSAvKiBEZWJ1Z1Nsb3RWaXNpdG9ySW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBEZWJ1Z1Nsb3RWaXNpdG9ySW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlGRTJBODc1RjFGMDIzODE2MDBFQjMxQjIgLyogTWluaW11bVJlc2VydmVk
Wm9uZVNpemUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWluaW11bVJlc2VydmVkWm9uZVNpemUuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkUyRTZBN0ExRDZFQTVGRTAwNjBGODk2IC8qIFRo
cm93U2NvcGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVGhyb3dT
Y29wZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFMzAyMkQwMUUzRDczOTYw
MEJBQzQ5MyAvKiBTaWdpbGxDcmFzaEFuYWx5emVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFNpZ2lsbENyYXNoQW5hbHl6ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtNTMwNCw2ICs1MzEzLDggQEAKIAkJRkU4REU1NEMyM0FDMUU4NjAwNUM5
MTQyIC8qIENhY2hlYWJsZUlkZW50aWZpZXJJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IENhY2hlYWJsZUlkZW50aWZpZXJJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUZFOERFNTRFMjNBQzNBOEUwMDVDOTE0MiAvKiBDYWNoZWFibGVJZGVu
dGlmaWVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENhY2hlYWJsZUlkZW50aWZpZXIuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTkwQkIzQTFCN0NGNjRFMDA2QjNGMDMgLyog
Vk1JbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZNSW5saW5lcy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRTkxMkI0RTI1MzExOTMzMDBGQUJEREYg
LyogQWJzdHJhY3RTbG90VmlzaXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBBYnN0cmFjdFNsb3RWaXNpdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZF
OTEyQjUwMjUzMTFBRDEwMEZBQkRERiAvKiBBYnN0cmFjdFNsb3RWaXNpdG9ySW5saW5lcy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBYnN0cmFjdFNsb3RWaXNpdG9ySW5saW5l
cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTk4QjVCNjFCQjlBRTExMDA3M0U3
QTYgLyogSklUU3ViR2VuZXJhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEpJVFN1YkdlbmVyYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTk5QjI0
NzFDMjRCNkQzMDBDODIxNTkgLyogSklUTmVnR2VuZXJhdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpJVE5lZ0dlbmVyYXRvci5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUZFOTlCMjQ4MUMyNEI2RDMwMEM4MjE1OSAvKiBKSVROZWdHZW5lcmF0
b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSklUTmVnR2VuZXJhdG9yLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC02MjUzLDYgKzYyNjQsOSBAQAogCQkxNDJF
MzEyQTEzNEZGMEE2MDBBRkFEQjUgLyogaGVhcCAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwog
CQkJY2hpbGRyZW4gPSAoCisJCQkJRkUxNzhDQzMyNTVGMjA1NTAwRkZENjc3IC8qIEFic3RyYWN0
U2xvdFZpc2l0b3IuY3BwICovLAorCQkJCUZFOTEyQjRFMjUzMTE5MzMwMEZBQkRERiAvKiBBYnN0
cmFjdFNsb3RWaXNpdG9yLmggKi8sCisJCQkJRkU5MTJCNTAyNTMxMUFEMTAwRkFCRERGIC8qIEFi
c3RyYWN0U2xvdFZpc2l0b3JJbmxpbmVzLmggKi8sCiAJCQkJMEZFQzNDNTAxRjMzQTQxNjAwRjU5
QjZDIC8qIEFsaWduZWRNZW1vcnlBbGxvY2F0b3IuY3BwICovLAogCQkJCTBGRUMzQzUxMUYzM0E0
MTYwMEY1OUI2QyAvKiBBbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmggKi8sCiAJCQkJMEZBNzYyMEEx
REI5NTlGNjAwQjdBMkZEIC8qIEFsbG9jYXRpbmdTY29wZS5oICovLApAQCAtNjI4OCw2ICs2MzAy
LDggQEAKIAkJCQkwRjQxNTQ1QTFGRDIwQjFGMDAxQjU4RjYgLyogQ29uc3RyYWludENvbmN1cnJl
bmN5LmggKi8sCiAJCQkJMEY0RDhDNzMxRkM3QTk3NDAwMUQzMkFDIC8qIENvbnN0cmFpbnRQYXJh
bGxlbGlzbS5oICovLAogCQkJCTBGN0RGMTJGMUUyOTcwRDUwMDk1OTUxQiAvKiBDb25zdHJhaW50
Vm9sYXRpbGl0eS5oICovLAorCQkJCUZFMjg3RDAxMjUyRkIyRTgwMEQ3MjNGOSAvKiBEZWJ1Z1Ns
b3RWaXNpdG9yLmggKi8sCisJCQkJRkUyODdEMDMyNTJGQkZFQTAwRDcyM0Y5IC8qIERlYnVnU2xv
dFZpc2l0b3JJbmxpbmVzLmggKi8sCiAJCQkJMkE3QTU4RUUxODA4QTRDNDAwMjBCREY3IC8qIERl
ZmVyR0MuY3BwICovLAogCQkJCTBGMTM2RDRCMTc0QUQ2OUIwMDc1QjM1NCAvKiBEZWZlckdDLmgg
Ki8sCiAJCQkJMEZCQjczQkExREVGODY0NDAwMkMwMDlFIC8qIERlbGV0ZUFsbENvZGVFZmZvcnQu
aCAqLywKQEAgLTY0MDksNiArNjQyNSw3IEBACiAJCQkJQzIyNTQ5NDIxNUY3REJBQTAwNjVFODk4
IC8qIFNsb3RWaXNpdG9yLmNwcCAqLywKIAkJCQkxNEJBNzhGMDEzQUFCODhGMDA1QjdDMkMgLyog
U2xvdFZpc2l0b3IuaCAqLywKIAkJCQkwRkNCNDA4NTE1QzBBM0MzMDA0ODkzMkIgLyogU2xvdFZp
c2l0b3JJbmxpbmVzLmggKi8sCisJCQkJRkUwNDE1NTIyNTJFQzA3MzAwOTFFQjVEIC8qIFNsb3RW
aXNpdG9yTWFjcm9zLmggKi8sCiAJCQkJMEZERTg3RkExREZFNkU1MDAwNjRDMzkwIC8qIFNwYWNl
VGltZU11dGF0b3JTY2hlZHVsZXIuY3BwICovLAogCQkJCTBGREU4N0ZCMURGRTZFNTAwMDY0QzM5
MCAvKiBTcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyLmggKi8sCiAJCQkJMEY0RjgyODkxRTMxQjk3
MTAwNzUxODRDIC8qIFN0b2NoYXN0aWNTcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyLmNwcCAqLywK
QEAgLTkyNTQsNiArOTI3MSw3IEBACiAJCQkJNTI2NzhGOEYxQTAzMTAwOTAwNkEzMDZEIC8qIEJh
c2ljQmxvY2tMb2NhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQ3QjgzQUMwRTZEQjhDOTAw
NDc3NUE0IC8qIEJhdGNoZWRUcmFuc2l0aW9uT3B0aW1pemVyLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk4Njk3NkU1RjFGQTNFOEJDMDBFN0M0RTEgLyogQmlnSW50Q29uc3RydWN0b3IuaCBpbiBIZWFk
ZXJzICovLAorCQkJCUZFMDQxNTUzMjUyRUMwNzMwMDkxRUI1RCAvKiBTbG90VmlzaXRvck1hY3Jv
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODY2NzM5RDIxM0JGREU3MTAwMjNEODdDIC8qIEJpZ0lu
dGVnZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2MTgxNjc3MUZCNzkyNDIwMEVDQzRFQyAvKiBC
aWdJbnRPYmplY3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2OTc2RTVFMUZBM0U4QjYwMEU3QzRF
MSAvKiBCaWdJbnRQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovLApAQCAtOTUzMSw2ICs5NTQ5LDcg
QEAKIAkJCQkwRkQ4MkU1NzE0MURBRjEwMDAxNzlDOTQgLyogREZHT1NSRW50cnkuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGRDhBMzI2MTdENTFGNTcwMENBMkM0MCAvKiBERkdPU1JFbnRyeXBvaW50
Q3JlYXRpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZDMDk3NkExNDY4QTZGNzAwQ0Yy
NDQyIC8qIERGR09TUkV4aXQuaCBpbiBIZWFkZXJzICovLAorCQkJCUZFOTEyQjRGMjUzMTE5MzMw
MEZBQkRERiAvKiBBYnN0cmFjdFNsb3RWaXNpdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjIz
NUJFQzE3MTc4RTczMDA2OTBDN0YgLyogREZHT1NSRXhpdEJhc2UuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGRkI5MjFDMTZEMDJGMTEwMDU1QTVEQiAvKiBERkdPU1JFeGl0Q29tcGlsYXRpb25JbmZv
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjcwMjVBQTE3MTRCMEZDMDAzODJDMEUgLyogREZHT1NS
RXhpdENvbXBpbGVyQ29tbW9uLmggaW4gSGVhZGVycyAqLywKQEAgLTk4MTYsNiArOTgzNSw3IEBA
CiAJCQkJQTUxM0U1QkUxODVCRkFDQzAwN0U5NUFEIC8qIEluamVjdGVkU2NyaXB0SG9zdC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQTUxM0U1Q0IxODVGOTYyNDAwN0U5NUFEIC8qIEluamVjdGVkU2Ny
aXB0TWFuYWdlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTU4NDBFMjExODdCN0I4NjAwODQzQjEw
IC8qIEluamVjdGVkU2NyaXB0TW9kdWxlLmggaW4gSGVhZGVycyAqLywKKwkJCQlGRTI4N0QwMjI1
MkZCMkU4MDBENzIzRjkgLyogRGVidWdTbG90VmlzaXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QTUxM0U1QzcxODVGOTQ0NjAwN0U5NUFEIC8qIEluamVjdGVkU2NyaXB0U291cmNlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk5OTU5RTkzMjFCRDE4Mjc5MDAxQUE0MTMgLyogaW5saW5lLWFuZC1taW5p
Znktc3R5bGVzaGVldHMtYW5kLXNjcmlwdHMucHkgaW4gSGVhZGVycyAqLywKIAkJCQk3OTA1QkI2
OTFEMTIwNTBFMDAxOUZFNTcgLyogSW5saW5lQWNjZXNzLmggaW4gSGVhZGVycyAqLywKQEAgLTEw
MTIwLDYgKzEwMTQwLDcgQEAKIAkJCQk3OTVBQzYxODIwQTIzNTVFMDA1MkM3NkMgLyogSlNWaXJ0
dWFsTWFjaGluZVByaXZhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3Q0EzQUU4MTdEQTQxQUUw
MDY1MzhBRiAvKiBKU1dlYWtNYXAuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3NDgyRTkzMTE2QTdD
QUQwMDNCMDcxMiAvKiBKU1dlYWtPYmplY3RNYXBSZWZJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8s
CisJCQkJRkU5MTJCNTEyNTMxMUFEMTAwRkFCRERGIC8qIEFic3RyYWN0U2xvdFZpc2l0b3JJbmxp
bmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzQ4MkI5MzExNjcxMTQ3MDAzQjA3MTIgLyogSlNX
ZWFrT2JqZWN0TWFwUmVmUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTM5QkZCQjAyMkFE
M0NEQzAwMjNGNEMwIC8qIEpTV2Vha09iamVjdFJlZi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYw
QjI4NkIxRUI4RTZDRjAwMEVCNUQyIC8qIEpTV2Vha1ByaXZhdGUuaCBpbiBIZWFkZXJzICovLApA
QCAtMTAxOTEsNiArMTAyMTIsNyBAQAogCQkJCUE3NERFRjk0MTgyRDk5MTQwMDUyMkMyMiAvKiBN
YXBJdGVyYXRvclByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTcwMDg3M0UxN0NCRThE
MzAwQzNFNjQzIC8qIE1hcFByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQyRDZGMDkx
MzUzOUEyODAwQjAyRTg2IC8qIE1hcmtlZEJsb2NrLmggaW4gSGVhZGVycyAqLywKKwkJCQlGRTI4
N0QwNDI1MkZCRkVCMDBENzIzRjkgLyogRGVidWdTbG90VmlzaXRvcklubGluZXMuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGN0M1RkI4MUQ4ODhBMEMwMDQ0RjVFMiAvKiBNYXJrZWRCbG9ja0lubGlu
ZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0MTQ0OENCMTNBMTc2RUMwMEY1QkExQSAvKiBNYXJr
ZWRCbG9ja1NldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTNEMzUxNUYyNDFCODlENzAwOERDMTZF
IC8qIE1hcmtlZEpTVmFsdWVSZWZBcnJheS5oIGluIEhlYWRlcnMgKi8sCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvU2NyaXB0cy93a2J1aWx0aW5zL2J1aWx0aW5zX2dlbmVyYXRlX2ludGVy
bmFsc193cmFwcGVyX2hlYWRlci5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvU2NyaXB0cy93a2J1aWx0aW5zL2J1aWx0aW5zX2dlbmVyYXRlX2ludGVybmFsc193cmFwcGVy
X2hlYWRlci5weQkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL1Nj
cmlwdHMvd2tidWlsdGlucy9idWlsdGluc19nZW5lcmF0ZV9pbnRlcm5hbHNfd3JhcHBlcl9oZWFk
ZXIucHkJKHdvcmtpbmcgY29weSkKQEAgLTkzLDcgKzkzLDcgQEAgY2xhc3MgQnVpbHRpbnNJbnRl
cm5hbHNXcmFwcGVySGVhZGVyR2VuZQogCiAgICAgZGVmIGdlbmVyYXRlX21ldGhvZHMoc2VsZik6
CiAgICAgICAgIHJldHVybiAiIiIKLSAgICB2b2lkIHZpc2l0KEpTQzo6U2xvdFZpc2l0b3ImKTsK
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIHZpc2l0KFZpc2l0b3ImKTsKICAg
ICB2b2lkIGluaXRpYWxpemUoSlNET01HbG9iYWxPYmplY3QmKTsKICIiIgogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy93a2J1aWx0aW5zL2J1aWx0aW5zX2dlbmVyYXRlX2lu
dGVybmFsc193cmFwcGVyX2ltcGxlbWVudGF0aW9uLnB5Cj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9TY3JpcHRzL3drYnVpbHRpbnMvYnVpbHRpbnNfZ2VuZXJhdGVfaW50ZXJu
YWxzX3dyYXBwZXJfaW1wbGVtZW50YXRpb24ucHkJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL3drYnVpbHRpbnMvYnVpbHRpbnNfZ2VuZXJhdGVfaW50
ZXJuYWxzX3dyYXBwZXJfaW1wbGVtZW50YXRpb24ucHkJKHdvcmtpbmcgY29weSkKQEAgLTEyMCwx
MyArMTIwLDE2IEBAIGNsYXNzIEJ1aWx0aW5zSW50ZXJuYWxzV3JhcHBlckltcGxlbWVudGEKICAg
ICAgICAgcmV0dXJuICdcbicuam9pbihsaW5lcykKIAogICAgIGRlZiBnZW5lcmF0ZV92aXNpdF9t
ZXRob2Qoc2VsZik6Ci0gICAgICAgIGxpbmVzID0gWyJ2b2lkIEpTQnVpbHRpbkludGVybmFsRnVu
Y3Rpb25zOjp2aXNpdChKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKSIsCisgICAgICAgIGxpbmVz
ID0gWyJ0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiIsCisgICAgICAgICAgICAgICAgICJ2b2lk
IEpTQnVpbHRpbkludGVybmFsRnVuY3Rpb25zOjp2aXNpdChWaXNpdG9yJiB2aXNpdG9yKSIsCiAg
ICAgICAgICAgICAgICAgICJ7Il0KICAgICAgICAgZm9yIG9iamVjdCBpbiBzZWxmLmludGVybmFs
czoKICAgICAgICAgICAgIHZpc2l0ID0gIiAgICAlcy52aXNpdCh2aXNpdG9yKTsiICUgc2VsZi5t
ZW1iZXJfbmFtZShvYmplY3QpCiAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoQnVpbHRpbnNHZW5l
cmF0b3Iud3JhcF93aXRoX2d1YXJkKG9iamVjdC5hbm5vdGF0aW9ucy5nZXQoJ2NvbmRpdGlvbmFs
JyksIHZpc2l0KSkKICAgICAgICAgbGluZXMuYXBwZW5kKCIgICAgVU5VU0VEX1BBUkFNKHZpc2l0
b3IpOyIpCiAgICAgICAgIGxpbmVzLmFwcGVuZCgifVxuIikKKyAgICAgICAgbGluZXMuYXBwZW5k
KCJ0ZW1wbGF0ZSB2b2lkIEpTQnVpbHRpbkludGVybmFsRnVuY3Rpb25zOjp2aXNpdChBYnN0cmFj
dFNsb3RWaXNpdG9yJik7IikKKyAgICAgICAgbGluZXMuYXBwZW5kKCJ0ZW1wbGF0ZSB2b2lkIEpT
QnVpbHRpbkludGVybmFsRnVuY3Rpb25zOjp2aXNpdChTbG90VmlzaXRvciYpO1xuIikKICAgICAg
ICAgcmV0dXJuICdcbicuam9pbihsaW5lcykKIAogICAgIGRlZiBfZ2VuZXJhdGVfaW5pdGlhbGl6
ZV9zdGF0aWNfZ2xvYmFscyhzZWxmKToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3Jp
cHRzL3drYnVpbHRpbnMvYnVpbHRpbnNfdGVtcGxhdGVzLnB5Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL3drYnVpbHRpbnMvYnVpbHRpbnNfdGVtcGxhdGVzLnB5
CShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy93a2J1
aWx0aW5zL2J1aWx0aW5zX3RlbXBsYXRlcy5weQkod29ya2luZyBjb3B5KQpAQCAtMTg4LDcgKzE4
OCw4IEBAIHB1YmxpYzoKICAgICBleHBsaWNpdCAke29iamVjdE5hbWV9QnVpbHRpbkZ1bmN0aW9u
cyhKU0M6OlZNJiB2bSkgOiBtX3ZtKHZtKSB7IH0KIAogICAgIHZvaWQgaW5pdChKU0M6OkpTR2xv
YmFsT2JqZWN0Jik7Ci0gICAgdm9pZCB2aXNpdChKU0M6OlNsb3RWaXNpdG9yJik7CisgICAgLy8g
bWxhbSB2b2lkIHZpc2l0KEpTQzo6U2xvdFZpc2l0b3ImKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBWaXNpdG9yPiB2b2lkIHZpc2l0KFZpc2l0b3ImKTsKIAogcHVibGljOgogICAgIEpTQzo6Vk0m
IG1fdm07CkBAIC0yMDcsMTAgKzIwOCwxNSBAQCBpbmxpbmUgdm9pZCAke29iamVjdE5hbWV9QnVp
bHRpbkZ1bmN0aW9uCiAjdW5kZWYgRVhQT1JUX0ZVTkNUSU9OCiB9CiAKLWlubGluZSB2b2lkICR7
b2JqZWN0TmFtZX1CdWlsdGluRnVuY3Rpb25zOjp2aXNpdChKU0M6OlNsb3RWaXNpdG9yJiB2aXNp
dG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK2lubGluZSB2b2lkICR7b2JqZWN0TmFt
ZX1CdWlsdGluRnVuY3Rpb25zOjp2aXNpdChWaXNpdG9yJiB2aXNpdG9yKQogewogI2RlZmluZSBW
SVNJVF9GVU5DVElPTihuYW1lKSB2aXNpdG9yLmFwcGVuZChtXyMjbmFtZSMjRnVuY3Rpb24pOwog
ICAgICR7bWFjcm9QcmVmaXh9X0ZPUkVBQ0hfJHtvYmplY3RNYWNyb31fQlVJTFRJTl9GVU5DVElP
Tl9OQU1FKFZJU0lUX0ZVTkNUSU9OKQogI3VuZGVmIFZJU0lUX0ZVTkNUSU9OCiB9CisKK3RlbXBs
YXRlIHZvaWQgJHtvYmplY3ROYW1lfUJ1aWx0aW5GdW5jdGlvbnM6OnZpc2l0KEpTQzo6QWJzdHJh
Y3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCAke29iamVjdE5hbWV9QnVpbHRpbkZ1bmN0
aW9uczo6dmlzaXQoSlNDOjpTbG90VmlzaXRvciYpOworCiAiIiIpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCShyZXZpc2lvbiAyNzE0NDMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTcyOSwxNiArNzI5LDE3IEBAIGJvb2wgQWNjZXNzQ2FzZTo6dmlzaXRXZWFr
KFZNJiB2bSkgY29uc3QKICAgICByZXR1cm4gaXNWYWxpZDsKIH0KIAotYm9vbCBBY2Nlc3NDYXNl
Ojpwcm9wYWdhdGVUcmFuc2l0aW9ucyhTbG90VmlzaXRvciYgdmlzaXRvcikgY29uc3QKK3RlbXBs
YXRlPHR5cGVuYW1lIFZpc2l0b3I+Citib29sIEFjY2Vzc0Nhc2U6OnByb3BhZ2F0ZVRyYW5zaXRp
b25zKFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0CiB7CiAgICAgYm9vbCByZXN1bHQgPSB0cnVlOwog
CiAgICAgaWYgKG1fc3RydWN0dXJlKQotICAgICAgICByZXN1bHQgJj0gbV9zdHJ1Y3R1cmUtPm1h
cmtJZkNoZWFwKHZpc2l0b3IpOworICAgICAgICByZXN1bHQgJj0gbV9zdHJ1Y3R1cmUtPm1hcmtJ
ZkNoZWFwMSh2aXNpdG9yKTsKIAogICAgIGlmIChtX3BvbHlQcm90b0FjY2Vzc0NoYWluKSB7CiAg
ICAgICAgIGZvciAoU3RydWN0dXJlSUQgc3RydWN0dXJlSUQgOiBtX3BvbHlQcm90b0FjY2Vzc0No
YWluLT5jaGFpbigpKQotICAgICAgICAgICAgcmVzdWx0ICY9IHZpc2l0b3Iudm0oKS5nZXRTdHJ1
Y3R1cmUoc3RydWN0dXJlSUQpLT5tYXJrSWZDaGVhcCh2aXNpdG9yKTsKKyAgICAgICAgICAgIHJl
c3VsdCAmPSB2aXNpdG9yLnZtKCkuZ2V0U3RydWN0dXJlKHN0cnVjdHVyZUlEKS0+bWFya0lmQ2hl
YXAxKHZpc2l0b3IpOwogICAgIH0KIAogICAgIHN3aXRjaCAobV90eXBlKSB7CkBAIC03NTYsMTEg
Kzc1NywxOSBAQCBib29sIEFjY2Vzc0Nhc2U6OnByb3BhZ2F0ZVRyYW5zaXRpb25zKFNsCiAgICAg
cmV0dXJuIHJlc3VsdDsKIH0KIAotdm9pZCBBY2Nlc3NDYXNlOjp2aXNpdEFnZ3JlZ2F0ZShTbG90
VmlzaXRvciYgdmlzaXRvcikgY29uc3QKK3RlbXBsYXRlIGJvb2wgQWNjZXNzQ2FzZTo6cHJvcGFn
YXRlVHJhbnNpdGlvbnMoU2xvdFZpc2l0b3ImKSBjb25zdDsKK3RlbXBsYXRlIGJvb2wgQWNjZXNz
Q2FzZTo6cHJvcGFnYXRlVHJhbnNpdGlvbnMoQWJzdHJhY3RTbG90VmlzaXRvciYpIGNvbnN0Owor
CisvL3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+CisvL3ZvaWQgQWNjZXNzQ2FzZTo6dmlzaXRB
Z2dyZWdhdGUoVmlzaXRvciYgdmlzaXRvcikgY29uc3QKK3ZvaWQgQWNjZXNzQ2FzZTo6dmlzaXRB
Z2dyZWdhdGUxKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0CiB7Ci0gICAgbV9p
ZGVudGlmaWVyLnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOworICAgIG1faWRlbnRpZmllci52aXNp
dEFnZ3JlZ2F0ZTEodmlzaXRvcik7CiB9CiAKKy8vdGVtcGxhdGUgdm9pZCBBY2Nlc3NDYXNlOjp2
aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYpIGNvbnN0OworLy90ZW1wbGF0ZSB2b2lkIEFjY2Vz
c0Nhc2U6OnZpc2l0QWdncmVnYXRlKERlYnVnU2xvdFZpc2l0b3ImKSBjb25zdDsKKwogdm9pZCBB
Y2Nlc3NDYXNlOjpnZW5lcmF0ZVdpdGhHdWFyZCgKICAgICBBY2Nlc3NHZW5lcmF0aW9uU3RhdGUm
IHN0YXRlLCBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0JiBmYWxsVGhyb3VnaCkKIHsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuaAkocmV2aXNpb24gMjcx
NDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuaAkod29y
a2luZyBjb3B5KQpAQCAtMjc1LDkgKzI3NSwxMCBAQCBwcml2YXRlOgogICAgIHRlbXBsYXRlPHR5
cGVuYW1lIEZ1bmN0b3I+CiAgICAgdm9pZCBmb3JFYWNoRGVwZW5kZW50Q2VsbChWTSYsIGNvbnN0
IEZ1bmN0b3ImKSBjb25zdDsKIAotICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3Im
KSBjb25zdDsKKy8vICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgdmlzaXRBZ2dy
ZWdhdGUoVmlzaXRvciYpIGNvbnN0OworICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUxKEFic3RyYWN0
U2xvdFZpc2l0b3ImKSBjb25zdDsKICAgICBib29sIHZpc2l0V2VhayhWTSYpIGNvbnN0OwotICAg
IGJvb2wgcHJvcGFnYXRlVHJhbnNpdGlvbnMoU2xvdFZpc2l0b3ImKSBjb25zdDsKKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiBib29sIHByb3BhZ2F0ZVRyYW5zaXRpb25zKFZpc2l0b3Im
KSBjb25zdDsKIAogICAgIC8vIEZJWE1FOiBUaGlzIG9ubHkgZXhpc3RzIGJlY2F1c2Ugb2YgaG93
IEFjY2Vzc0Nhc2UgcHV0cyBwb3N0LWdlbmVyYXRpb24gdGhpbmdzIGludG8gaXRzZWxmLgogICAg
IC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTY0NTYKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeVZhbEluZm8uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeVZhbEluZm8uY3BwCShyZXZpc2lv
biAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnlWYWxJbmZvLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzIsMTEgKzMyLDE2IEBAIG5hbWVzcGFjZSBKU0MgewogCiAj
aWYgRU5BQkxFKEpJVCkKIAotdm9pZCBCeVZhbEluZm86OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNp
dG9yJiB2aXNpdG9yKQorLy90ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgorLy92b2lkIEJ5VmFs
SW5mbzo6dmlzaXRBZ2dyZWdhdGUoVmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgQnlWYWxJbmZvOjp2
aXNpdEFnZ3JlZ2F0ZTEoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKLSAgICBjYWNo
ZWRJZC52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKKyAgICBjYWNoZWRJZC52aXNpdEFnZ3JlZ2F0
ZTEodmlzaXRvcik7CiB9CiAKKy8vdGVtcGxhdGUgdm9pZCBCeVZhbEluZm86OnZpc2l0QWdncmVn
YXRlKFNsb3RWaXNpdG9yJik7CisvL3RlbXBsYXRlIHZvaWQgQnlWYWxJbmZvOjp2aXNpdEFnZ3Jl
Z2F0ZShEZWJ1Z1Nsb3RWaXNpdG9yJik7CisKICNlbmRpZiAvLyBFTkFCTEUoSklUKQogCiB9IC8v
IG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeVZh
bEluZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnlW
YWxJbmZvLmgJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9CeVZhbEluZm8uaAkod29ya2luZyBjb3B5KQpAQCAtMjQ2LDcgKzI0Niw4IEBAIHN0cnVj
dCBCeVZhbEluZm8gewogICAgICAgICB0aGlzLT5zZWVuID0gZmFsc2U7CiAgICAgfQogCi0gICAg
dm9pZCB2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYpOworLy8gICAgdGVtcGxhdGU8dHlwZW5h
bWUgVmlzaXRvcj4gdm9pZCB2aXNpdEFnZ3JlZ2F0ZShWaXNpdG9yJik7CisgICAgdm9pZCB2aXNp
dEFnZ3JlZ2F0ZTEoQWJzdHJhY3RTbG90VmlzaXRvciYpOwogCiAgICAgQ29kZUxvY2F0aW9uSnVt
cDxKU0ludGVybmFsUHRyVGFnPiBub3RJbmRleEp1bXA7CiAgICAgQ29kZUxvY2F0aW9uSnVtcDxK
U0ludGVybmFsUHRyVGFnPiBiYWRUeXBlSnVtcDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzAsNiArMzAsOSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkNvZGVCbG9jay5o
IgogCisjaW5jbHVkZSAiQWJzdHJhY3RTbG90VmlzaXRvci5oIiAvLyBtbGFtIFRFU1QKKyNpbmNs
dWRlICJQb2x5bW9ycGhpY0FjY2Vzcy5oIiAvLyBtbGFtIFRFU1QKKwogI2luY2x1ZGUgIkFyaXRo
UHJvZmlsZS5oIgogI2luY2x1ZGUgIkJhc2ljQmxvY2tMb2NhdGlvbi5oIgogI2luY2x1ZGUgIkJ5
VmFsSW5mby5oIgpAQCAtOTk4LDcgKzEwMDEsOCBAQCBzaXplX3QgQ29kZUJsb2NrOjplc3RpbWF0
ZWRTaXplKEpTQ2VsbCogCiAgICAgcmV0dXJuIEJhc2U6OmVzdGltYXRlZFNpemUoY2VsbCwgdm0p
ICsgZXh0cmFNZW1vcnlBbGxvY2F0ZWQ7CiB9CiAKLXZvaWQgQ29kZUJsb2NrOjp2aXNpdENoaWxk
cmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBWaXNpdG9yPgordm9pZCBDb2RlQmxvY2s6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2Vs
bCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBDb2RlQmxvY2sqIHRoaXNPYmplY3QgPSBqc0Nh
c3Q8Q29kZUJsb2NrKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlz
T2JqZWN0LCBpbmZvKCkpOwpAQCAtMTAwNyw3ICsxMDExLDEwIEBAIHZvaWQgQ29kZUJsb2NrOjp2
aXNpdENoaWxkcmVuKEpTQ2VsbCogY2UKICAgICB0aGlzT2JqZWN0LT52aXNpdENoaWxkcmVuKHZp
c2l0b3IpOwogfQogCi12b2lkIENvZGVCbG9jazo6dmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYg
dmlzaXRvcikKK0RFRklORV9WSVNJVF9DSElMRFJFTihDb2RlQmxvY2spOworCit0ZW1wbGF0ZTx0
eXBlbmFtZSBWaXNpdG9yPgordm9pZCBDb2RlQmxvY2s6OnZpc2l0Q2hpbGRyZW5JbXBsKFZpc2l0
b3ImIHZpc2l0b3IpCiB7CiAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2spOwog
ICAgIGlmIChDb2RlQmxvY2sqIG90aGVyQmxvY2sgPSBzcGVjaWFsT1NSRW50cnlCbG9ja09yTnVs
bCgpKQpAQCAtMTAyNiw2ICsxMDMzLDggQEAgdm9pZCBDb2RlQmxvY2s6OnZpc2l0Q2hpbGRyZW4o
U2xvdFZpc2l0bwogICAgIFZNOjpTcGFjZUFuZFNldDo6c2V0Rm9yKCpzdWJzcGFjZSgpKS5hZGQo
dGhpcyk7CiB9CiAKK0RFRklORV9JTlNUQU5DRV9WSVNJVF9DSElMRFJFTihDb2RlQmxvY2spOwor
CiBib29sIENvZGVCbG9jazo6c2hvdWxkVmlzaXRTdHJvbmdseShjb25zdCBDb25jdXJyZW50SlNM
b2NrZXImIGxvY2tlcikKIHsKICAgICBpZiAoT3B0aW9uczo6Zm9yY2VDb2RlQmxvY2tMaXZlbmVz
cygpKQpAQCAtMTA5OCw3ICsxMTA3LDkgQEAgYm9vbCBDb2RlQmxvY2s6OnNob3VsZEpldHRpc29u
RHVlVG9PbGRBZwogfQogCiAjaWYgRU5BQkxFKERGR19KSVQpCi1zdGF0aWMgYm9vbCBzaG91bGRN
YXJrVHJhbnNpdGlvbihWTSYgdm0sIERGRzo6V2Vha1JlZmVyZW5jZVRyYW5zaXRpb24mIHRyYW5z
aXRpb24pCisvLyBtbGFtIEZJWE1FOiB2bS5oZWFwLmlzTWFya2VkIG5lZWRzIHRvIGJlIGFic3Ry
YWN0ZWQuCisvL3N0YXRpYyBib29sIHNob3VsZE1hcmtUcmFuc2l0aW9uKFZNJiB2bSwgREZHOjpX
ZWFrUmVmZXJlbmNlVHJhbnNpdGlvbiYgdHJhbnNpdGlvbikKK3N0YXRpYyBpbmxpbmUgYm9vbCBz
aG91bGRNYXJrVHJhbnNpdGlvbihWTSYgdm0sIERGRzo6V2Vha1JlZmVyZW5jZVRyYW5zaXRpb24m
IHRyYW5zaXRpb24pCiB7CiAgICAgaWYgKHRyYW5zaXRpb24ubV9jb2RlT3JpZ2luICYmICF2bS5o
ZWFwLmlzTWFya2VkKHRyYW5zaXRpb24ubV9jb2RlT3JpZ2luLmdldCgpKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwpAQCAtMTExOSw3ICsxMTMwLDQwIEBAIEJ5dGVjb2RlSW5kZXggQ29kZUJsb2Nr
OjpieXRlY29kZUluZGV4Rm8KIH0KICNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKIAotdm9pZCBD
b2RlQmxvY2s6OnByb3BhZ2F0ZVRyYW5zaXRpb25zKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYs
IFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorI2lmIEVOQUJMRShKSVQpCisKKy8vdGVtcGxhdGU8dHlw
ZW5hbWUgVmlzaXRvcj4KKy8vYm9vbCBTdHJ1Y3R1cmVTdHViSW5mbzo6cHJvcGFnYXRlVHJhbnNp
dGlvbnMxKFZpc2l0b3ImIHZpc2l0b3IpCitib29sIFN0cnVjdHVyZVN0dWJJbmZvOjpwcm9wYWdh
dGVUcmFuc2l0aW9uczEoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBzd2l0
Y2ggKG1fY2FjaGVUeXBlKSB7CisgICAgY2FzZSBDYWNoZVR5cGU6OlVuc2V0OgorICAgIGNhc2Ug
Q2FjaGVUeXBlOjpBcnJheUxlbmd0aDoKKyAgICBjYXNlIENhY2hlVHlwZTo6U3RyaW5nTGVuZ3Ro
OgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBjYXNlIENhY2hlVHlwZTo6R2V0QnlJZFNlbGY6
CisgICAgY2FzZSBDYWNoZVR5cGU6OlB1dEJ5SWRSZXBsYWNlOgorICAgIGNhc2UgQ2FjaGVUeXBl
OjpJbkJ5SWRTZWxmOgorICAgICAgICByZXR1cm4gdS5ieUlkU2VsZi5iYXNlT2JqZWN0U3RydWN0
dXJlLT5tYXJrSWZDaGVhcDEodmlzaXRvcik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBj
YXNlIENhY2hlVHlwZTo6U3R1YjoKKyAgICAgICAgcmV0dXJuIHUuc3R1Yi0+cHJvcGFnYXRlVHJh
bnNpdGlvbnMxMCh2aXNpdG9yKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAK
Ky8vICAgIFVOVVNFRF9QQVJBTSh2aXNpdG9yKTsgLy8gbWxhbSBURVNUCisgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworI2VuZGlmIC8vIEVO
QUJMRShKSVQpCisKKy8vdGVtcGxhdGU8PiBib29sIFN0cnVjdHVyZVN0dWJJbmZvOjpwcm9wYWdh
dGVUcmFuc2l0aW9uczEoU2xvdFZpc2l0b3ImKTsKKy8vdGVtcGxhdGU8PiBib29sIFN0cnVjdHVy
ZVN0dWJJbmZvOjpwcm9wYWdhdGVUcmFuc2l0aW9uczEoQWJzdHJhY3RTbG90VmlzaXRvciYpOwor
CisvL3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+CisvL3ZvaWQgQ29kZUJsb2NrOjpwcm9wYWdh
dGVUcmFuc2l0aW9ucyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBWaXNpdG9yJiB2aXNpdG9y
KQordm9pZCBDb2RlQmxvY2s6OnByb3BhZ2F0ZVRyYW5zaXRpb25zMShjb25zdCBDb25jdXJyZW50
SlNMb2NrZXImLCBBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFZNJiB2bSA9
ICptX3ZtOwogCkBAIC0xMTYzLDcgKzEyMDcsNyBAQCB2b2lkIENvZGVCbG9jazo6cHJvcGFnYXRl
VHJhbnNpdGlvbnMoY29uCiAgICAgaWYgKEpJVENvZGU6OmlzSklUKGppdFR5cGUoKSkpIHsKICAg
ICAgICAgaWYgKGF1dG8qIGppdERhdGEgPSBtX2ppdERhdGEuZ2V0KCkpIHsKICAgICAgICAgICAg
IGZvciAoU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvIDogaml0RGF0YS0+bV9zdHViSW5mb3Mp
Ci0gICAgICAgICAgICAgICAgc3R1YkluZm8tPnByb3BhZ2F0ZVRyYW5zaXRpb25zKHZpc2l0b3Ip
OworICAgICAgICAgICAgICAgIHN0dWJJbmZvLT5wcm9wYWdhdGVUcmFuc2l0aW9uczEodmlzaXRv
cik7CiAgICAgICAgIH0KICAgICB9CiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKQEAgLTExNzIsMTAg
KzEyMTYsMTAgQEAgdm9pZCBDb2RlQmxvY2s6OnByb3BhZ2F0ZVRyYW5zaXRpb25zKGNvbgogICAg
IGlmIChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSgpKSkgewogICAgICAgICBERkc6
OkNvbW1vbkRhdGEqIGRmZ0NvbW1vbiA9IG1faml0Q29kZS0+ZGZnQ29tbW9uKCk7CiAgICAgICAg
IAotICAgICAgICBkZmdDb21tb24tPnJlY29yZGVkU3RhdHVzZXMubWFya0lmQ2hlYXAodmlzaXRv
cik7CisgICAgICAgIGRmZ0NvbW1vbi0+cmVjb3JkZWRTdGF0dXNlcy5tYXJrSWZDaGVhcDEodmlz
aXRvcik7CiAgICAgICAgIAogICAgICAgICBmb3IgKFN0cnVjdHVyZUlEIHN0cnVjdHVyZUlEIDog
ZGZnQ29tbW9uLT53ZWFrU3RydWN0dXJlUmVmZXJlbmNlcykKLSAgICAgICAgICAgIHZtLmdldFN0
cnVjdHVyZShzdHJ1Y3R1cmVJRCktPm1hcmtJZkNoZWFwKHZpc2l0b3IpOworICAgICAgICAgICAg
dm0uZ2V0U3RydWN0dXJlKHN0cnVjdHVyZUlEKS0+bWFya0lmQ2hlYXAxKHZpc2l0b3IpOwogCiAg
ICAgICAgIGZvciAoYXV0byYgdHJhbnNpdGlvbiA6IGRmZ0NvbW1vbi0+dHJhbnNpdGlvbnMpIHsK
ICAgICAgICAgICAgIGlmIChzaG91bGRNYXJrVHJhbnNpdGlvbih2bSwgdHJhbnNpdGlvbikpIHsK
QEAgLTEyMDUsNyArMTI0OSwxMiBAQCB2b2lkIENvZGVCbG9jazo6cHJvcGFnYXRlVHJhbnNpdGlv
bnMoY29uCiAjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCiB9CiAKLXZvaWQgQ29kZUJsb2NrOjpk
ZXRlcm1pbmVMaXZlbmVzcyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBTbG90VmlzaXRvciYg
dmlzaXRvcikKKy8vdGVtcGxhdGUgdm9pZCBDb2RlQmxvY2s6OnByb3BhZ2F0ZVRyYW5zaXRpb25z
KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIFNsb3RWaXNpdG9yJik7CisvL3RlbXBsYXRlIHZv
aWQgQ29kZUJsb2NrOjpwcm9wYWdhdGVUcmFuc2l0aW9ucyhjb25zdCBDb25jdXJyZW50SlNMb2Nr
ZXImLCBEZWJ1Z1Nsb3RWaXNpdG9yJik7CisKKy8vdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4K
Ky8vdm9pZCBDb2RlQmxvY2s6OmRldGVybWluZUxpdmVuZXNzKGNvbnN0IENvbmN1cnJlbnRKU0xv
Y2tlciYsIFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIENvZGVCbG9jazo6ZGV0ZXJtaW5lTGl2ZW5l
c3MoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRv
cikKIHsKICAgICBVTlVTRURfUEFSQU0odmlzaXRvcik7CiAgICAgCkBAIC0xMjU0LDYgKzEzMDMs
OSBAQCB2b2lkIENvZGVCbG9jazo6ZGV0ZXJtaW5lTGl2ZW5lc3MoY29uc3QgCiAjZW5kaWYgLy8g
RU5BQkxFKERGR19KSVQpCiB9CiAKKy8vdGVtcGxhdGUgdm9pZCBDb2RlQmxvY2s6OmRldGVybWlu
ZUxpdmVuZXNzKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIFNsb3RWaXNpdG9yJik7CisvL3Rl
bXBsYXRlIHZvaWQgQ29kZUJsb2NrOjpkZXRlcm1pbmVMaXZlbmVzcyhjb25zdCBDb25jdXJyZW50
SlNMb2NrZXImLCBEZWJ1Z1Nsb3RWaXNpdG9yJik7CisKIHZvaWQgQ29kZUJsb2NrOjpmaW5hbGl6
ZUxMSW50SW5saW5lQ2FjaGVzKCkKIHsKICAgICBWTSYgdm0gPSAqbV92bTsKQEAgLTE3NjIsNyAr
MTgxNCw4IEBAIHZvaWQgQ29kZUJsb2NrOjpyZXNldEpJVERhdGEoKQogfQogI2VuZGlmCiAKLXZv
aWQgQ29kZUJsb2NrOjp2aXNpdE9TUkV4aXRUYXJnZXRzKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tl
ciYsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3Zv
aWQgQ29kZUJsb2NrOjp2aXNpdE9TUkV4aXRUYXJnZXRzKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tl
ciYsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgLy8gV2Ugc3Ryb25nbHkgdmlzaXQgT1NSIGV4
aXRzIHRhcmdldHMgYmVjYXVzZSB3ZSBkb24ndCB3YW50IHRvIGRlYWwgd2l0aAogICAgIC8vIHRo
ZSBjb21wbGV4aXR5IG9mIGdlbmVyYXRpbmcgYW4gZXhpdCB0YXJnZXQgQ29kZUJsb2NrIG9uIGRl
bWFuZCBhbmQKQEAgLTE3ODIsNyArMTgzNSwxMSBAQCB2b2lkIENvZGVCbG9jazo6dmlzaXRPU1JF
eGl0VGFyZ2V0cyhjb25zCiAjZW5kaWYKIH0KIAotdm9pZCBDb2RlQmxvY2s6OnN0cm9uZ2x5Vmlz
aXRTdHJvbmdSZWZlcmVuY2VzKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYgbG9ja2VyLCBTbG90
VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlIHZvaWQgQ29kZUJsb2NrOjp2aXNpdE9TUkV4aXRU
YXJnZXRzKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0
ZSB2b2lkIENvZGVCbG9jazo6dmlzaXRPU1JFeGl0VGFyZ2V0cyhjb25zdCBDb25jdXJyZW50SlNM
b2NrZXImLCBBYnN0cmFjdFNsb3RWaXNpdG9yJik7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0
b3I+Cit2b2lkIENvZGVCbG9jazo6c3Ryb25nbHlWaXNpdFN0cm9uZ1JlZmVyZW5jZXMoY29uc3Qg
Q29uY3VycmVudEpTTG9ja2VyJiBsb2NrZXIsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgVU5V
U0VEX1BBUkFNKGxvY2tlcik7CiAgICAgCkBAIC0xODAzLDIyICsxODYwLDI2IEBAIHZvaWQgQ29k
ZUJsb2NrOjpzdHJvbmdseVZpc2l0U3Ryb25nUmVmZXIKICNpZiBFTkFCTEUoSklUKQogICAgIGlm
IChhdXRvKiBqaXREYXRhID0gbV9qaXREYXRhLmdldCgpKSB7CiAgICAgICAgIGZvciAoQnlWYWxJ
bmZvKiBieVZhbEluZm8gOiBqaXREYXRhLT5tX2J5VmFsSW5mb3MpCi0gICAgICAgICAgICBieVZh
bEluZm8tPnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOworICAgICAgICAgICAgYnlWYWxJbmZvLT52
aXNpdEFnZ3JlZ2F0ZTEodmlzaXRvcik7CiAgICAgICAgIGZvciAoU3RydWN0dXJlU3R1YkluZm8q
IHN0dWJJbmZvIDogaml0RGF0YS0+bV9zdHViSW5mb3MpCi0gICAgICAgICAgICBzdHViSW5mby0+
dmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7CisgICAgICAgICAgICBzdHViSW5mby0+dmlzaXRBZ2dy
ZWdhdGUxKHZpc2l0b3IpOwogICAgIH0KICNlbmRpZgogCiAjaWYgRU5BQkxFKERGR19KSVQpCiAg
ICAgaWYgKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRUeXBlKCkpKSB7CiAgICAgICAgIERG
Rzo6Q29tbW9uRGF0YSogZGZnQ29tbW9uID0gbV9qaXRDb2RlLT5kZmdDb21tb24oKTsKLSAgICAg
ICAgZGZnQ29tbW9uLT5yZWNvcmRlZFN0YXR1c2VzLnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOwor
ICAgICAgICBkZmdDb21tb24tPnJlY29yZGVkU3RhdHVzZXMudmlzaXRBZ2dyZWdhdGUxKHZpc2l0
b3IpOwogICAgICAgICB2aXNpdE9TUkV4aXRUYXJnZXRzKGxvY2tlciwgdmlzaXRvcik7CiAgICAg
fQogI2VuZGlmCiB9CiAKLXZvaWQgQ29kZUJsb2NrOjpzdHJvbmdseVZpc2l0V2Vha1JlZmVyZW5j
ZXMoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3Rl
bXBsYXRlIHZvaWQgQ29kZUJsb2NrOjpzdHJvbmdseVZpc2l0U3Ryb25nUmVmZXJlbmNlcyhjb25z
dCBDb25jdXJyZW50SlNMb2NrZXImLCBTbG90VmlzaXRvciYpOworLy90ZW1wbGF0ZSB2b2lkIENv
ZGVCbG9jazo6c3Ryb25nbHlWaXNpdFN0cm9uZ1JlZmVyZW5jZXMoY29uc3QgQ29uY3VycmVudEpT
TG9ja2VyJiwgRGVidWdTbG90VmlzaXRvciYpOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
Pgordm9pZCBDb2RlQmxvY2s6OnN0cm9uZ2x5VmlzaXRXZWFrUmVmZXJlbmNlcyhjb25zdCBDb25j
dXJyZW50SlNMb2NrZXImLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFVOVVNFRF9QQVJBTSh2
aXNpdG9yKTsKIApAQCAtMTg0NSw2ICsxOTA2LDkgQEAgdm9pZCBDb2RlQmxvY2s6OnN0cm9uZ2x5
VmlzaXRXZWFrUmVmZXJlbgogI2VuZGlmICAgIAogfQogCit0ZW1wbGF0ZSB2b2lkIENvZGVCbG9j
azo6c3Ryb25nbHlWaXNpdFdlYWtSZWZlcmVuY2VzKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYs
IFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIENvZGVCbG9jazo6c3Ryb25nbHlWaXNpdFdl
YWtSZWZlcmVuY2VzKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIEFic3RyYWN0U2xvdFZpc2l0
b3ImKTsKKwogQ29kZUJsb2NrKiBDb2RlQmxvY2s6OmJhc2VsaW5lQWx0ZXJuYXRpdmUoKQogewog
I2lmIEVOQUJMRShKSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29k
ZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Nv
ZGVCbG9jay5oCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTIwMSwxMCArMjAxLDExIEBAIHB1
YmxpYzoKICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIz
Njc3CiAgICAgQ29kZUJsb2NrKiBiYXNlbGluZVZlcnNpb24oKTsKIAorICAgIERFQ0xBUkVfVklT
SVRfQ0hJTERSRU47CisKICAgICBzdGF0aWMgc2l6ZV90IGVzdGltYXRlZFNpemUoSlNDZWxsKiwg
Vk0mKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9y
Jik7CiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKLSAgICB2b2lkIHZpc2l0Q2hp
bGRyZW4oU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX0lOU1RBTkNFX1ZJU0lUX0NISUxEUkVO
OwogICAgIHZvaWQgZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoVk0mKTsKIAogICAgIHZvaWQgbm90
aWZ5TGV4aWNhbEJpbmRpbmdVcGRhdGUoKTsKQEAgLTk2NywxMiArOTY4LDE0IEBAIHByaXZhdGU6
CiAgICAgYm9vbCBzaG91bGRKZXR0aXNvbkR1ZVRvV2Vha1JlZmVyZW5jZShWTSYpOwogICAgIGJv
b2wgc2hvdWxkSmV0dGlzb25EdWVUb09sZEFnZShjb25zdCBDb25jdXJyZW50SlNMb2NrZXImKTsK
ICAgICAKLSAgICB2b2lkIHByb3BhZ2F0ZVRyYW5zaXRpb25zKGNvbnN0IENvbmN1cnJlbnRKU0xv
Y2tlciYsIFNsb3RWaXNpdG9yJik7Ci0gICAgdm9pZCBkZXRlcm1pbmVMaXZlbmVzcyhjb25zdCBD
b25jdXJyZW50SlNMb2NrZXImLCBTbG90VmlzaXRvciYpOworLy8gICAgdGVtcGxhdGU8dHlwZW5h
bWUgVmlzaXRvcj4gdm9pZCBwcm9wYWdhdGVUcmFuc2l0aW9ucyhjb25zdCBDb25jdXJyZW50SlNM
b2NrZXImLCBWaXNpdG9yJik7CisgICAgdm9pZCBwcm9wYWdhdGVUcmFuc2l0aW9uczEoY29uc3Qg
Q29uY3VycmVudEpTTG9ja2VyJiwgQWJzdHJhY3RTbG90VmlzaXRvciYpOworLy8gICAgdGVtcGxh
dGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCBkZXRlcm1pbmVMaXZlbmVzcyhjb25zdCBDb25jdXJy
ZW50SlNMb2NrZXImLCBWaXNpdG9yJik7CisgICAgdm9pZCBkZXRlcm1pbmVMaXZlbmVzcyhjb25z
dCBDb25jdXJyZW50SlNMb2NrZXImLCBBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAgICAgICAgIAot
ICAgIHZvaWQgc3Ryb25nbHlWaXNpdFN0cm9uZ1JlZmVyZW5jZXMoY29uc3QgQ29uY3VycmVudEpT
TG9ja2VyJiwgU2xvdFZpc2l0b3ImKTsKLSAgICB2b2lkIHN0cm9uZ2x5VmlzaXRXZWFrUmVmZXJl
bmNlcyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBTbG90VmlzaXRvciYpOwotICAgIHZvaWQg
dmlzaXRPU1JFeGl0VGFyZ2V0cyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBTbG90VmlzaXRv
ciYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgc3Ryb25nbHlWaXNpdFN0
cm9uZ1JlZmVyZW5jZXMoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgVmlzaXRvciYpOworICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgc3Ryb25nbHlWaXNpdFdlYWtSZWZlcmVu
Y2VzKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIFZpc2l0b3ImKTsKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBWaXNpdG9yPiB2b2lkIHZpc2l0T1NSRXhpdFRhcmdldHMoY29uc3QgQ29uY3VycmVu
dEpTTG9ja2VyJiwgVmlzaXRvciYpOwogCiAgICAgdW5zaWduZWQgbnVtYmVyT2ZOb25Bcmd1bWVu
dFZhbHVlUHJvZmlsZXMoKSB7IHJldHVybiBtX251bWJlck9mTm9uQXJndW1lbnRWYWx1ZVByb2Zp
bGVzOyB9CiAgICAgdW5zaWduZWQgdG90YWxOdW1iZXJPZlZhbHVlUHJvZmlsZXMoKSB7IHJldHVy
biBudW1iZXJPZkFyZ3VtZW50VmFsdWVQcm9maWxlcygpICsgbnVtYmVyT2ZOb25Bcmd1bWVudFZh
bHVlUHJvZmlsZXMoKTsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Rl
bGV0ZUJ5SWRWYXJpYW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvRGVsZXRlQnlJZFZhcmlhbnQuY3BwCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRGVsZXRlQnlJZFZhcmlhbnQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC04OCwxOSArODgsMjkgQEAgYm9vbCBEZWxldGVCeUlkVmFyaWFudDo6d3JpdGVz
U3RydWN0dXJlcwogICAgIHJldHVybiAhIW5ld1N0cnVjdHVyZSgpOwogfQogCi12b2lkIERlbGV0
ZUJ5SWRWYXJpYW50Ojp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vdGVt
cGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KKy8vdm9pZCBEZWxldGVCeUlkVmFyaWFudDo6dmlzaXRB
Z2dyZWdhdGUoVmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgRGVsZXRlQnlJZFZhcmlhbnQ6OnZpc2l0
QWdncmVnYXRlMShBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewotICAgIG1faWRlbnRp
Zmllci52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKKyAgICBtX2lkZW50aWZpZXIudmlzaXRBZ2dy
ZWdhdGUxKHZpc2l0b3IpOwogfQogCi12b2lkIERlbGV0ZUJ5SWRWYXJpYW50OjptYXJrSWZDaGVh
cChTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vdGVtcGxhdGUgdm9pZCBEZWxldGVCeUlkVmFyaWFu
dDo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImKTsKKy8vdGVtcGxhdGUgdm9pZCBEZWxldGVC
eUlkVmFyaWFudDo6dmlzaXRBZ2dyZWdhdGUoRGVidWdTbG90VmlzaXRvciYpOworCisvL3RlbXBs
YXRlPHR5cGVuYW1lIFZpc2l0b3I+CisvL3ZvaWQgRGVsZXRlQnlJZFZhcmlhbnQ6Om1hcmtJZkNo
ZWFwKFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIERlbGV0ZUJ5SWRWYXJpYW50OjptYXJrSWZDaGVh
cDEoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBpZiAobV9vbGRTdHJ1Y3R1
cmUpCi0gICAgICAgIG1fb2xkU3RydWN0dXJlLT5tYXJrSWZDaGVhcCh2aXNpdG9yKTsKKyAgICAg
ICAgbV9vbGRTdHJ1Y3R1cmUtPm1hcmtJZkNoZWFwMSh2aXNpdG9yKTsKICAgICBpZiAobV9uZXdT
dHJ1Y3R1cmUpCi0gICAgICAgIG1fbmV3U3RydWN0dXJlLT5tYXJrSWZDaGVhcCh2aXNpdG9yKTsK
KyAgICAgICAgbV9uZXdTdHJ1Y3R1cmUtPm1hcmtJZkNoZWFwMSh2aXNpdG9yKTsKIH0KIAorLy90
ZW1wbGF0ZSB2b2lkIERlbGV0ZUJ5SWRWYXJpYW50OjptYXJrSWZDaGVhcChTbG90VmlzaXRvciYp
OworLy90ZW1wbGF0ZSB2b2lkIERlbGV0ZUJ5SWRWYXJpYW50OjptYXJrSWZDaGVhcChEZWJ1Z1Ns
b3RWaXNpdG9yJik7CisKIHZvaWQgRGVsZXRlQnlJZFZhcmlhbnQ6OmR1bXAoUHJpbnRTdHJlYW0m
IG91dCkgY29uc3QKIHsKICAgICBkdW1wSW5Db250ZXh0KG91dCwgbnVsbHB0cik7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRGVsZXRlQnlJZFZhcmlhbnQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRGVsZXRlQnlJZFZhcmlhbnQu
aAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Rl
bGV0ZUJ5SWRWYXJpYW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTYxLDggKzYxLDEwIEBAIHB1Ymxp
YzoKIAogICAgIGJvb2wgYXR0ZW1wdFRvTWVyZ2UoY29uc3QgRGVsZXRlQnlJZFZhcmlhbnQmIG90
aGVyKTsKIAotICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImKTsKLSAgICB2b2lk
IG1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJik7CisvLyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNp
dG9yPiB2b2lkIHZpc2l0QWdncmVnYXRlKFZpc2l0b3ImKTsKKy8vICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFZpc2l0b3I+IHZvaWQgbWFya0lmQ2hlYXAoVmlzaXRvciYpOworICAgIHZvaWQgdmlzaXRB
Z2dyZWdhdGUxKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKKyAgICB2b2lkIG1hcmtJZkNoZWFwMShB
YnN0cmFjdFNsb3RWaXNpdG9yJik7CiAgICAgYm9vbCBmaW5hbGl6ZShWTSYpOwogCiAgICAgdm9p
ZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvRGVsZXRlQnlTdGF0dXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9EZWxldGVCeVN0YXR1cy5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9EZWxldGVCeVN0YXR1cy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI1NCwxOCArMjU0LDI4IEBAIENhY2hlYWJsZUlkZW50aWZpZXIgRGVsZXRl
QnlTdGF0dXM6OnNpbmcKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi12b2lkIERlbGV0ZUJ5U3Rh
dHVzOjp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vdGVtcGxhdGU8dHlw
ZW5hbWUgVmlzaXRvcj4KKy8vdm9pZCBEZWxldGVCeVN0YXR1czo6dmlzaXRBZ2dyZWdhdGUoVmlz
aXRvciYgdmlzaXRvcikKK3ZvaWQgRGVsZXRlQnlTdGF0dXM6OnZpc2l0QWdncmVnYXRlMShBYnN0
cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGZvciAoRGVsZXRlQnlJZFZhcmlhbnQm
IHZhcmlhbnQgOiBtX3ZhcmlhbnRzKQotICAgICAgICB2YXJpYW50LnZpc2l0QWdncmVnYXRlKHZp
c2l0b3IpOworICAgICAgICB2YXJpYW50LnZpc2l0QWdncmVnYXRlMSh2aXNpdG9yKTsKIH0KIAot
dm9pZCBEZWxldGVCeVN0YXR1czo6bWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisv
L3RlbXBsYXRlIHZvaWQgRGVsZXRlQnlTdGF0dXM6OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9y
Jik7CisvL3RlbXBsYXRlIHZvaWQgRGVsZXRlQnlTdGF0dXM6OnZpc2l0QWdncmVnYXRlKERlYnVn
U2xvdFZpc2l0b3ImKTsKKworLy90ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgorLy92b2lkIERl
bGV0ZUJ5U3RhdHVzOjptYXJrSWZDaGVhcChWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBEZWxldGVC
eVN0YXR1czo6bWFya0lmQ2hlYXAxKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAg
ICAgZm9yIChEZWxldGVCeUlkVmFyaWFudCYgdmFyaWFudCA6IG1fdmFyaWFudHMpCi0gICAgICAg
IHZhcmlhbnQubWFya0lmQ2hlYXAodmlzaXRvcik7CisgICAgICAgIHZhcmlhbnQubWFya0lmQ2hl
YXAxKHZpc2l0b3IpOwogfQogCisvL3RlbXBsYXRlIHZvaWQgRGVsZXRlQnlTdGF0dXM6Om1hcmtJ
ZkNoZWFwKFNsb3RWaXNpdG9yJik7CisvL3RlbXBsYXRlIHZvaWQgRGVsZXRlQnlTdGF0dXM6Om1h
cmtJZkNoZWFwKERlYnVnU2xvdFZpc2l0b3ImKTsKKwogYm9vbCBEZWxldGVCeVN0YXR1czo6Zmlu
YWxpemUoVk0mIHZtKQogewogICAgIGZvciAoYXV0byYgdmFyaWFudCA6IG1fdmFyaWFudHMpIHsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9EZWxldGVCeVN0YXR1cy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9EZWxldGVCeVN0YXR1
cy5oCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
RGVsZXRlQnlTdGF0dXMuaAkod29ya2luZyBjb3B5KQpAQCAtODEsOCArODEsMTAgQEAgcHVibGlj
OgogICAgIC8vIEF0dGVtcHRzIHRvIHJlZHVjZSB0aGUgc2V0IG9mIHZhcmlhbnRzIHRvIGZpdCB0
aGUgZ2l2ZW4gc3RydWN0dXJlIHNldC4gVGhpcyBtYXkgYmUgYXBwcm94aW1hdGUuCiAgICAgdm9p
ZCBmaWx0ZXIoY29uc3QgU3RydWN0dXJlU2V0Jik7CiAKLSAgICB2b2lkIHZpc2l0QWdncmVnYXRl
KFNsb3RWaXNpdG9yJik7Ci0gICAgdm9pZCBtYXJrSWZDaGVhcChTbG90VmlzaXRvciYpOworLy8g
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCB2aXNpdEFnZ3JlZ2F0ZShWaXNpdG9y
Jik7CisvLyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIG1hcmtJZkNoZWFwKFZp
c2l0b3ImKTsKKyAgICB2b2lkIHZpc2l0QWdncmVnYXRlMShBYnN0cmFjdFNsb3RWaXNpdG9yJik7
CisgICAgdm9pZCBtYXJrSWZDaGVhcDEoQWJzdHJhY3RTbG90VmlzaXRvciYpOwogICAgIGJvb2wg
ZmluYWxpemUoVk0mKTsKIAogICAgIGJvb2wgYXBwZW5kVmFyaWFudChjb25zdCBEZWxldGVCeUlk
VmFyaWFudCYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0RpcmVjdEV2
YWxDb2RlQ2FjaGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9EaXJlY3RFdmFsQ29kZUNhY2hlLmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0RpcmVjdEV2YWxDb2RlQ2FjaGUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00NSw3ICs0NSw4IEBAIHZvaWQgRGlyZWN0RXZhbENvZGVDYWNoZTo6Y2xlYXIo
KQogICAgIG1fY2FjaGVNYXAuY2xlYXIoKTsKIH0KIAotdm9pZCBEaXJlY3RFdmFsQ29kZUNhY2hl
Ojp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1l
IFZpc2l0b3I+Cit2b2lkIERpcmVjdEV2YWxDb2RlQ2FjaGU6OnZpc2l0QWdncmVnYXRlKFZpc2l0
b3ImIHZpc2l0b3IpCiB7CiAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9sb2NrKTsKICAgICBFdmFs
Q2FjaGVNYXA6Oml0ZXJhdG9yIGVuZCA9IG1fY2FjaGVNYXAuZW5kKCk7CkBAIC01Myw1ICs1NCw3
IEBAIHZvaWQgRGlyZWN0RXZhbENvZGVDYWNoZTo6dmlzaXRBZ2dyZWdhdGUKICAgICAgICAgdmlz
aXRvci5hcHBlbmQocHRyLT52YWx1ZSk7CiB9CiAKLX0gLy8gbmFtZXNwYWNlIEpTQwordGVtcGxh
dGUgdm9pZCBEaXJlY3RFdmFsQ29kZUNhY2hlOjp2aXNpdEFnZ3JlZ2F0ZShBYnN0cmFjdFNsb3RW
aXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIERpcmVjdEV2YWxDb2RlQ2FjaGU6OnZpc2l0QWdncmVn
YXRlKFNsb3RWaXNpdG9yJik7CiAKK30gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0RpcmVjdEV2YWxDb2RlQ2FjaGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRGlyZWN0RXZhbENvZGVDYWNoZS5oCShy
ZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRGlyZWN0
RXZhbENvZGVDYWNoZS5oCSh3b3JraW5nIGNvcHkpCkBAIC05Nyw3ICs5Nyw3IEBAIG5hbWVzcGFj
ZSBKU0MgewogCiAgICAgICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fY2FjaGVN
YXAuaXNFbXB0eSgpOyB9CiAKLSAgICAgICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRv
ciYpOworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIHZpc2l0QWdncmVn
YXRlKFZpc2l0b3ImKTsKIAogICAgICAgICB2b2lkIGNsZWFyKCk7CiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhlY3V0YWJsZVRvQ29k
ZUJsb2NrRWRnZS5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9FeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMjAgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01
Myw3ICs1Myw5IEBAIHZvaWQgRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZTo6ZmluaXNoQ3IKICAg
ICBBU1NFUlQoIWlzQWN0aXZlKCkpOwogfQogCi12b2lkIEV4ZWN1dGFibGVUb0NvZGVCbG9ja0Vk
Z2U6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3Rl
bXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2U6
OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKKy8vdm9p
ZCBFeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlOjp2aXNpdENoaWxkcmVuMShKU0NlbGwqIGNlbGws
IEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgVk0mIHZtID0gdmlzaXRvci52
bSgpOwogICAgIEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UqIGVkZ2UgPSBqc0Nhc3Q8RXhlY3V0
YWJsZVRvQ29kZUJsb2NrRWRnZSo+KGNlbGwpOwpAQCAtMTE0LDE1ICsxMTYsMTcgQEAgdm9pZCBF
eGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlOjp2aXNpdENoaQogICAgIC8vIHdpbGwga2VlcCBmaXhw
b2ludGluZyB1bnRpbCB0aGUgZW5kLgogICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQoY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSk7CiAgICAgdm0uZXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRn
ZXNXaXRoQ29uc3RyYWludHMuYWRkKGVkZ2UpOwotICAgIGVkZ2UtPnJ1bkNvbnN0cmFpbnQobG9j
a2VyLCB2bSwgdmlzaXRvcik7CisgICAgZWRnZS0+cnVuQ29uc3RyYWludDEobG9ja2VyLCB2bSwg
dmlzaXRvcik7IC8vIG1sYW0gRklYTUUKIH0KIAotdm9pZCBFeGVjdXRhYmxlVG9Db2RlQmxvY2tF
ZGdlOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZp
c2l0b3IpCitERUZJTkVfVklTSVRfQ0hJTERSRU4oRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZSk7
CisKK3ZvaWQgRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZTo6dmlzaXRPdXRwdXRDb25zdHJhaW50
cyhKU0NlbGwqIGNlbGwsIEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgVk0m
IHZtID0gdmlzaXRvci52bSgpOwogICAgIEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UqIGVkZ2Ug
PSBqc0Nhc3Q8RXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZSo+KGNlbGwpOwogICAgIAotICAgIGVk
Z2UtPnJ1bkNvbnN0cmFpbnQoTm9Mb2NraW5nTmVjZXNzYXJ5LCB2bSwgdmlzaXRvcik7CisgICAg
ZWRnZS0+cnVuQ29uc3RyYWludDEoTm9Mb2NraW5nTmVjZXNzYXJ5LCB2bSwgdmlzaXRvcik7CiB9
CiAKIHZvaWQgRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZTo6ZmluYWxpemVVbmNvbmRpdGlvbmFs
bHkoVk0mIHZtKQpAQCAtMTg2LDE2ICsxOTAsMjAgQEAgRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRn
ZTo6RXhlY3V0YWJsZVRvQwogewogfQogCi12b2lkIEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2U6
OnJ1bkNvbnN0cmFpbnQoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiBsb2NrZXIsIFZNJiB2bSwg
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+CisvL3Zv
aWQgRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZTo6cnVuQ29uc3RyYWludDEoY29uc3QgQ29uY3Vy
cmVudEpTTG9ja2VyJiBsb2NrZXIsIFZNJiB2bSwgVmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgRXhl
Y3V0YWJsZVRvQ29kZUJsb2NrRWRnZTo6cnVuQ29uc3RyYWludDEoY29uc3QgQ29uY3VycmVudEpT
TG9ja2VyJiBsb2NrZXIsIFZNJiB2bSwgQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsK
ICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IG1fY29kZUJsb2NrLmdldCgpOwogICAgIAotICAg
IGNvZGVCbG9jay0+cHJvcGFnYXRlVHJhbnNpdGlvbnMobG9ja2VyLCB2aXNpdG9yKTsKKyAgICBj
b2RlQmxvY2stPnByb3BhZ2F0ZVRyYW5zaXRpb25zMShsb2NrZXIsIHZpc2l0b3IpOwogICAgIGNv
ZGVCbG9jay0+ZGV0ZXJtaW5lTGl2ZW5lc3MobG9ja2VyLCB2aXNpdG9yKTsKICAgICAKICAgICBp
ZiAodm0uaGVhcC5pc01hcmtlZChjb2RlQmxvY2spKQogICAgICAgICB2bS5leGVjdXRhYmxlVG9D
b2RlQmxvY2tFZGdlc1dpdGhDb25zdHJhaW50cy5yZW1vdmUodGhpcyk7CiB9CiAKLX0gLy8gbmFt
ZXNwYWNlIEpTQworLy90ZW1wbGF0ZSB2b2lkIEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2U6OnJ1
bkNvbnN0cmFpbnQxKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIFZNJiwgU2xvdFZpc2l0b3Im
KTsKKy8vdGVtcGxhdGUgdm9pZCBFeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlOjpydW5Db25zdHJh
aW50MShjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBWTSYsIEFic3RyYWN0U2xvdFZpc2l0b3Im
KTsKIAorfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlLmgJKHJldmlz
aW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGVjdXRhYmxl
VG9Db2RlQmxvY2tFZGdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDE4LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01Myw5ICs1MywxMCBAQCBwdWJs
aWM6CiAgICAgREVDTEFSRV9JTkZPOwogCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2soKSBjb25z
dCB7IHJldHVybiBtX2NvZGVCbG9jay5nZXQoKTsgfQotICAgIAotICAgIHN0YXRpYyB2b2lkIHZp
c2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNp
dE91dHB1dENvbnN0cmFpbnRzKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisKKyAgICBERUNMQVJF
X1ZJU0lUX0NISUxEUkVOOworLy8gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbjEoSlNDZWxs
KiwgQWJzdHJhY3RTbG90VmlzaXRvciYpOworICAgIHN0YXRpYyB2b2lkIHZpc2l0T3V0cHV0Q29u
c3RyYWludHMoSlNDZWxsKiwgQWJzdHJhY3RTbG90VmlzaXRvciYpOwogICAgIHZvaWQgZmluYWxp
emVVbmNvbmRpdGlvbmFsbHkoVk0mKTsKICAgICAKICAgICBzdGF0aWMgQ29kZUJsb2NrKiB1bndy
YXAoRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZSogZWRnZSkKQEAgLTgxLDkgKzgyLDExIEBAIHBy
aXZhdGU6CiAgICAgdm9pZCBhY3RpdmF0ZSgpOwogICAgIHZvaWQgZGVhY3RpdmF0ZSgpOwogICAg
IGJvb2wgaXNBY3RpdmUoKSBjb25zdDsKLSAgICAKLSAgICB2b2lkIHJ1bkNvbnN0cmFpbnQoY29u
c3QgQ29uY3VycmVudEpTTG9ja2VyJiwgVk0mLCBTbG90VmlzaXRvciYpOwotICAgIAorCisvLyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgorLy8gICAgdm9pZCBydW5Db25zdHJhaW50MShj
b25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBWTSYsIFZpc2l0b3ImKTsKKyAgICB2b2lkIHJ1bkNv
bnN0cmFpbnQxKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIFZNJiwgQWJzdHJhY3RTbG90Vmlz
aXRvciYpOworCiAgICAgV3JpdGVCYXJyaWVyPENvZGVCbG9jaz4gbV9jb2RlQmxvY2s7CiB9Owog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFZhcmlhbnQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkVmFy
aWFudC5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9HZXRCeUlkVmFyaWFudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1NiwxNiArMTU2LDI2
IEBAIGJvb2wgR2V0QnlJZFZhcmlhbnQ6OmF0dGVtcHRUb01lcmdlKGNvbnMKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIAotdm9pZCBHZXRCeUlkVmFyaWFudDo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0
b3ImIHZpc2l0b3IpCisvL3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+CisvL3ZvaWQgR2V0QnlJ
ZFZhcmlhbnQ6OnZpc2l0QWdncmVnYXRlKFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIEdldEJ5SWRW
YXJpYW50Ojp2aXNpdEFnZ3JlZ2F0ZTEoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsK
LSAgICBtX2lkZW50aWZpZXIudmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7CisgICAgbV9pZGVudGlm
aWVyLnZpc2l0QWdncmVnYXRlMSh2aXNpdG9yKTsKIH0KIAotdm9pZCBHZXRCeUlkVmFyaWFudDo6
bWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3RlbXBsYXRlIHZvaWQgR2V0QnlJ
ZFZhcmlhbnQ6OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJik7CisvL3RlbXBsYXRlIHZvaWQg
R2V0QnlJZFZhcmlhbnQ6OnZpc2l0QWdncmVnYXRlKERlYnVnU2xvdFZpc2l0b3ImKTsKKworLy90
ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgorLy92b2lkIEdldEJ5SWRWYXJpYW50OjptYXJrSWZD
aGVhcChWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBHZXRCeUlkVmFyaWFudDo6bWFya0lmQ2hlYXAx
KEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7Ci0gICAgbV9zdHJ1Y3R1cmVTZXQubWFy
a0lmQ2hlYXAodmlzaXRvcik7CisgICAgbV9zdHJ1Y3R1cmVTZXQubWFya0lmQ2hlYXAxKHZpc2l0
b3IpOwogfQogCisvL3RlbXBsYXRlIHZvaWQgR2V0QnlJZFZhcmlhbnQ6Om1hcmtJZkNoZWFwKFNs
b3RWaXNpdG9yJik7CisvL3RlbXBsYXRlIHZvaWQgR2V0QnlJZFZhcmlhbnQ6Om1hcmtJZkNoZWFw
KERlYnVnU2xvdFZpc2l0b3ImKTsKKwogYm9vbCBHZXRCeUlkVmFyaWFudDo6ZmluYWxpemUoVk0m
IHZtKQogewogICAgIGlmICghbV9zdHJ1Y3R1cmVTZXQuaXNTdGlsbEFsaXZlKHZtKSkKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkVmFyaWFudC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkVmFyaWFudC5oCShy
ZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJ
ZFZhcmlhbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNzcsOCArNzcsMTAgQEAgcHVibGljOgogCiAg
ICAgYm9vbCBhdHRlbXB0VG9NZXJnZShjb25zdCBHZXRCeUlkVmFyaWFudCYgb3RoZXIpOwogICAg
IAotICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImKTsKLSAgICB2b2lkIG1hcmtJ
ZkNoZWFwKFNsb3RWaXNpdG9yJik7CisvLyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2
b2lkIHZpc2l0QWdncmVnYXRlKFZpc2l0b3ImKTsKKy8vICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZp
c2l0b3I+IHZvaWQgbWFya0lmQ2hlYXAoVmlzaXRvciYpOworICAgIHZvaWQgdmlzaXRBZ2dyZWdh
dGUxKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKKyAgICB2b2lkIG1hcmtJZkNoZWFwMShBYnN0cmFj
dFNsb3RWaXNpdG9yJik7CiAgICAgYm9vbCBmaW5hbGl6ZShWTSYpOwogICAgIAogICAgIHZvaWQg
ZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0dldEJ5U3RhdHVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvR2V0QnlTdGF0dXMuY3BwCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlTdGF0dXMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC01MzAsMjAgKzUzMCwzMSBAQCB2b2lkIEdldEJ5U3RhdHVzOjpmaWx0ZXIoY29uc3QgU3RydWN0
dXJlCiAgICAgICAgIG1fc3RhdGUgPSBOb0luZm9ybWF0aW9uOwogfQogCi12b2lkIEdldEJ5U3Rh
dHVzOjp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vdGVtcGxhdGU8dHlw
ZW5hbWUgVmlzaXRvcj4KKy8vdm9pZCBHZXRCeVN0YXR1czo6dmlzaXRBZ2dyZWdhdGUoVmlzaXRv
ciYgdmlzaXRvcikKK3ZvaWQgR2V0QnlTdGF0dXM6OnZpc2l0QWdncmVnYXRlMShBYnN0cmFjdFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGlmIChpc01vZHVsZU5hbWVzcGFjZSgpKQotICAg
ICAgICBtX21vZHVsZU5hbWVzcGFjZURhdGEtPm1faWRlbnRpZmllci52aXNpdEFnZ3JlZ2F0ZSh2
aXNpdG9yKTsKKyAgICAgICAgbV9tb2R1bGVOYW1lc3BhY2VEYXRhLT5tX2lkZW50aWZpZXIudmlz
aXRBZ2dyZWdhdGUxKHZpc2l0b3IpOwogICAgIGZvciAoR2V0QnlJZFZhcmlhbnQmIHZhcmlhbnQg
OiBtX3ZhcmlhbnRzKQotICAgICAgICB2YXJpYW50LnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOwor
ICAgICAgICB2YXJpYW50LnZpc2l0QWdncmVnYXRlMSh2aXNpdG9yKTsKIH0KIAotdm9pZCBHZXRC
eVN0YXR1czo6bWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3RlbXBsYXRlIHZv
aWQgR2V0QnlTdGF0dXM6OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJik7CisvL3RlbXBsYXRl
IHZvaWQgR2V0QnlTdGF0dXM6OnZpc2l0QWdncmVnYXRlKERlYnVnU2xvdFZpc2l0b3ImKTsKKwor
Ly90ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgorLy92b2lkIEdldEJ5U3RhdHVzOjptYXJrSWZD
aGVhcChWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBHZXRCeVN0YXR1czo6bWFya0lmQ2hlYXAxKEFi
c3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgZm9yIChHZXRCeUlkVmFyaWFudCYg
dmFyaWFudCA6IG1fdmFyaWFudHMpCi0gICAgICAgIHZhcmlhbnQubWFya0lmQ2hlYXAodmlzaXRv
cik7CisgICAgICAgIHZhcmlhbnQubWFya0lmQ2hlYXAxKHZpc2l0b3IpOwogfQogCisvL3RlbXBs
YXRlIHZvaWQgR2V0QnlTdGF0dXM6Om1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJik7CisvL3RlbXBs
YXRlIHZvaWQgR2V0QnlTdGF0dXM6Om1hcmtJZkNoZWFwKERlYnVnU2xvdFZpc2l0b3ImKTsKKwor
CiBib29sIEdldEJ5U3RhdHVzOjpmaW5hbGl6ZShWTSYgdm0pCiB7CiAgICAgZm9yIChHZXRCeUlk
VmFyaWFudCYgdmFyaWFudCA6IG1fdmFyaWFudHMpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9HZXRCeVN0YXR1cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9HZXRCeVN0YXR1cy5oCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlTdGF0dXMuaAkod29ya2luZyBjb3B5KQpA
QCAtMTE4LDggKzExOCwxMCBAQCBwdWJsaWM6CiAgICAgSlNNb2R1bGVFbnZpcm9ubWVudCogbW9k
dWxlRW52aXJvbm1lbnQoKSBjb25zdCB7IHJldHVybiBtX21vZHVsZU5hbWVzcGFjZURhdGEtPm1f
bW9kdWxlRW52aXJvbm1lbnQ7IH0KICAgICBTY29wZU9mZnNldCBzY29wZU9mZnNldCgpIGNvbnN0
IHsgcmV0dXJuIG1fbW9kdWxlTmFtZXNwYWNlRGF0YS0+bV9zY29wZU9mZnNldDsgfQogICAgIAot
ICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImKTsKLSAgICB2b2lkIG1hcmtJZkNo
ZWFwKFNsb3RWaXNpdG9yJik7CisvLyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lk
IHZpc2l0QWdncmVnYXRlKFZpc2l0b3ImKTsKKy8vICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0
b3I+IHZvaWQgbWFya0lmQ2hlYXAoVmlzaXRvciYpOworICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUx
KEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKKyAgICB2b2lkIG1hcmtJZkNoZWFwMShBYnN0cmFjdFNs
b3RWaXNpdG9yJik7CiAgICAgYm9vbCBmaW5hbGl6ZShWTSYpOyAvLyBSZXR1cm4gdHJ1ZSBpZiB0
aGlzIGdldHMgdG8gbGl2ZS4KIAogICAgIGJvb2wgYXBwZW5kVmFyaWFudChjb25zdCBHZXRCeUlk
VmFyaWFudCYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luQnlJZFN0
YXR1cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lu
QnlJZFN0YXR1cy5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9JbkJ5SWRTdGF0dXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTEsMTIgKzI1
MSwxNyBAQCB2b2lkIEluQnlJZFN0YXR1czo6ZmlsdGVyKGNvbnN0IFN0cnVjdHVyCiAgICAgICAg
IG1fc3RhdGUgPSBOb0luZm9ybWF0aW9uOwogfQogCi12b2lkIEluQnlJZFN0YXR1czo6bWFya0lm
Q2hlYXAoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+
CisvL3ZvaWQgSW5CeUlkU3RhdHVzOjptYXJrSWZDaGVhcChWaXNpdG9yJiB2aXNpdG9yKQordm9p
ZCBJbkJ5SWRTdGF0dXM6Om1hcmtJZkNoZWFwMShBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9y
KQogewogICAgIGZvciAoSW5CeUlkVmFyaWFudCYgdmFyaWFudCA6IG1fdmFyaWFudHMpCi0gICAg
ICAgIHZhcmlhbnQubWFya0lmQ2hlYXAodmlzaXRvcik7CisgICAgICAgIHZhcmlhbnQubWFya0lm
Q2hlYXAxKHZpc2l0b3IpOwogfQogCisvL3RlbXBsYXRlIHZvaWQgSW5CeUlkU3RhdHVzOjptYXJr
SWZDaGVhcChTbG90VmlzaXRvciYpOworLy90ZW1wbGF0ZSB2b2lkIEluQnlJZFN0YXR1czo6bWFy
a0lmQ2hlYXAoRGVidWdTbG90VmlzaXRvciYpOworCiBib29sIEluQnlJZFN0YXR1czo6ZmluYWxp
emUoVk0mIHZtKQogewogICAgIGZvciAoSW5CeUlkVmFyaWFudCYgdmFyaWFudCA6IG1fdmFyaWFu
dHMpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbkJ5SWRTdGF0dXMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5CeUlkU3Rh
dHVzLmgJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9JbkJ5SWRTdGF0dXMuaAkod29ya2luZyBjb3B5KQpAQCAtMTA2LDcgKzEwNiw4IEBAIHB1Ymxp
YzoKICAgICAvLyBBdHRlbXB0cyB0byByZWR1Y2UgdGhlIHNldCBvZiB2YXJpYW50cyB0byBmaXQg
dGhlIGdpdmVuIHN0cnVjdHVyZSBzZXQuIFRoaXMgbWF5IGJlIGFwcHJveGltYXRlLgogICAgIHZv
aWQgZmlsdGVyKGNvbnN0IFN0cnVjdHVyZVNldCYpOwogICAgIAotICAgIHZvaWQgbWFya0lmQ2hl
YXAoU2xvdFZpc2l0b3ImKTsKKy8vICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQg
bWFya0lmQ2hlYXAoVmlzaXRvciYpOworICAgIHZvaWQgbWFya0lmQ2hlYXAxKEFic3RyYWN0U2xv
dFZpc2l0b3ImKTsKICAgICBib29sIGZpbmFsaXplKFZNJik7CiAKICAgICB2b2lkIGR1bXAoUHJp
bnRTdHJlYW0mKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9J
bkJ5SWRWYXJpYW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvSW5CeUlkVmFyaWFudC5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9JbkJ5SWRWYXJpYW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NjQsMTEgKzY0LDE2IEBAIGJvb2wgSW5CeUlkVmFyaWFudDo6YXR0ZW1wdFRvTWVyZ2UoY29uc3QK
ICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBJbkJ5SWRWYXJpYW50OjptYXJrSWZDaGVhcChT
bG90VmlzaXRvciYgdmlzaXRvcikKKy8vdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KKy8vdm9p
ZCBJbkJ5SWRWYXJpYW50OjptYXJrSWZDaGVhcChWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBJbkJ5
SWRWYXJpYW50OjptYXJrSWZDaGVhcDEoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsK
LSAgICBtX3N0cnVjdHVyZVNldC5tYXJrSWZDaGVhcCh2aXNpdG9yKTsKKyAgICBtX3N0cnVjdHVy
ZVNldC5tYXJrSWZDaGVhcDEodmlzaXRvcik7CiB9CiAKKy8vdGVtcGxhdGUgdm9pZCBJbkJ5SWRW
YXJpYW50OjptYXJrSWZDaGVhcChTbG90VmlzaXRvciYpOworLy90ZW1wbGF0ZSB2b2lkIEluQnlJ
ZFZhcmlhbnQ6Om1hcmtJZkNoZWFwKERlYnVnU2xvdFZpc2l0b3ImKTsKKwogYm9vbCBJbkJ5SWRW
YXJpYW50OjpmaW5hbGl6ZShWTSYgdm0pCiB7CiAgICAgaWYgKCFtX3N0cnVjdHVyZVNldC5pc1N0
aWxsQWxpdmUodm0pKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luQnlJ
ZFZhcmlhbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
SW5CeUlkVmFyaWFudC5oCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvSW5CeUlkVmFyaWFudC5oCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw3ICs1Nyw4
IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgYXR0ZW1wdFRvTWVyZ2UoY29uc3QgSW5CeUlkVmFyaWFu
dCYgb3RoZXIpOwogICAgIAotICAgIHZvaWQgbWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImKTsKKy8v
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgbWFya0lmQ2hlYXAoVmlzaXRvciYp
OworICAgIHZvaWQgbWFya0lmQ2hlYXAxKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKICAgICBib29s
IGZpbmFsaXplKFZNJik7CiAKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnRlcm5hbEZ1bmN0aW9uQWxsb2Nh
dGlvblByb2ZpbGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvSW50ZXJuYWxGdW5jdGlvbkFsbG9jYXRpb25Qcm9maWxlLmgJKHJldmlzaW9uIDI3MTQ0MykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnRlcm5hbEZ1bmN0aW9uQWxsb2Nh
dGlvblByb2ZpbGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzksNyArMzksNyBAQCBwdWJsaWM6CiAg
ICAgU3RydWN0dXJlKiBjcmVhdGVBbGxvY2F0aW9uU3RydWN0dXJlRnJvbUJhc2UoVk0mLCBKU0ds
b2JhbE9iamVjdCosIEpTQ2VsbCogb3duZXIsIEpTT2JqZWN0KiBwcm90b3R5cGUsIFN0cnVjdHVy
ZSogYmFzZSk7CiAKICAgICB2b2lkIGNsZWFyKCkgeyBtX3N0cnVjdHVyZS5jbGVhcigpOyB9Ci0g
ICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYgdmlzaXRvcikgeyB2aXNpdG9yLmFw
cGVuZChtX3N0cnVjdHVyZSk7IH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lk
IHZpc2l0QWdncmVnYXRlKFZpc2l0b3ImIHZpc2l0b3IpIHsgdmlzaXRvci5hcHBlbmQobV9zdHJ1
Y3R1cmUpOyB9CiAKIHByaXZhdGU6CiAgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gbV9zdHJ1
Y3R1cmU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT2JqZWN0QWxsb2Nh
dGlvblByb2ZpbGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUuaAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09iamVjdEFsbG9jYXRpb25Qcm9maWxlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTY0LDcgKzY0LDggQEAgcHJvdGVjdGVkOgogICAgICAgICBBU1NFUlQoaXNO
dWxsKCkpOwogICAgIH0KIAotICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImIHZp
c2l0b3IpCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KKyAgICB2b2lkIHZpc2l0QWdn
cmVnYXRlKFZpc2l0b3ImIHZpc2l0b3IpCiAgICAgewogICAgICAgICB2aXNpdG9yLmFwcGVuZCht
X3N0cnVjdHVyZSk7CiAgICAgfQpAQCAtMTEwLDcgKzExMSw4IEBAIHB1YmxpYzoKICAgICAgICAg
QVNTRVJUKGlzTnVsbCgpKTsKICAgICB9CiAKLSAgICB2b2lkIHZpc2l0QWdncmVnYXRlKFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+CisgICAgdm9p
ZCB2aXNpdEFnZ3JlZ2F0ZShWaXNpdG9yJiB2aXNpdG9yKQogICAgIHsKICAgICAgICAgQmFzZTo6
dmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7CiAgICAgICAgIHZpc2l0b3IuYXBwZW5kKG1fcHJvdG90
eXBlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0Fj
Y2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Bv
bHltb3JwaGljQWNjZXNzLmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzU4LDcgKzM1OCw5IEBAIGJvb2wgUG9seW1vcnBoaWNBY2Nlc3M6OnZpc2l0V2VhayhWTSYgdm0K
ICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBQb2x5bW9ycGhpY0FjY2Vzczo6cHJvcGFnYXRl
VHJhbnNpdGlvbnMoU2xvdFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0CisvL3RlbXBsYXRlPHR5cGVu
YW1lIFZpc2l0b3I+CisvL2Jvb2wgUG9seW1vcnBoaWNBY2Nlc3M6OnByb3BhZ2F0ZVRyYW5zaXRp
b25zMTAoVmlzaXRvciYgdmlzaXRvcikgY29uc3QKK2Jvb2wgUG9seW1vcnBoaWNBY2Nlc3M6OnBy
b3BhZ2F0ZVRyYW5zaXRpb25zMTAoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikgY29uc3QK
IHsKICAgICBib29sIHJlc3VsdCA9IHRydWU7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IHNpemUoKTsgKytpKQpAQCAtMzY2LDEyICszNjgsMjEgQEAgYm9vbCBQb2x5bW9ycGhpY0FjY2Vz
czo6cHJvcGFnYXRlVHJhbnNpdAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQgUG9seW1v
cnBoaWNBY2Nlc3M6OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy90ZW1w
bGF0ZTw+IGJvb2wgUG9seW1vcnBoaWNBY2Nlc3M6OnByb3BhZ2F0ZVRyYW5zaXRpb25zMTAoU2xv
dFZpc2l0b3ImKSBjb25zdDsKKy8vdGVtcGxhdGU8PiBib29sIFBvbHltb3JwaGljQWNjZXNzOjpw
cm9wYWdhdGVUcmFuc2l0aW9uczEwKEFic3RyYWN0U2xvdFZpc2l0b3ImKSBjb25zdDsKKworCisv
L3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+CisvL3ZvaWQgUG9seW1vcnBoaWNBY2Nlc3M6OnZp
c2l0QWdncmVnYXRlKFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIFBvbHltb3JwaGljQWNjZXNzOjp2
aXNpdEFnZ3JlZ2F0ZTEoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZSgpOyArK2kpCi0gICAgICAgIGF0KGkpLnZpc2l0QWdn
cmVnYXRlKHZpc2l0b3IpOworICAgICAgICBhdChpKS52aXNpdEFnZ3JlZ2F0ZTEodmlzaXRvcik7
CiB9CiAKKy8vdGVtcGxhdGUgdm9pZCBQb2x5bW9ycGhpY0FjY2Vzczo6dmlzaXRBZ2dyZWdhdGUo
U2xvdFZpc2l0b3ImKTsKKy8vdGVtcGxhdGUgdm9pZCBQb2x5bW9ycGhpY0FjY2Vzczo6dmlzaXRB
Z2dyZWdhdGUoRGVidWdTbG90VmlzaXRvciYpOworCiB2b2lkIFBvbHltb3JwaGljQWNjZXNzOjpk
dW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiB7CiAgICAgb3V0LnByaW50KFJhd1BvaW50ZXIo
dGhpcyksICI6WyIpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHlt
b3JwaGljQWNjZXNzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1BvbHltb3JwaGljQWNjZXNzLmgJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xNTIsMTQgKzE1MiwxNiBAQCBwdWJsaWM6CiAgICAgY29uc3QgQWNjZXNzQ2FzZSYgYXQodW5z
aWduZWQgaSkgY29uc3QgeyByZXR1cm4gKm1fbGlzdFtpXTsgfQogICAgIGNvbnN0IEFjY2Vzc0Nh
c2UmIG9wZXJhdG9yW10odW5zaWduZWQgaSkgY29uc3QgeyByZXR1cm4gKm1fbGlzdFtpXTsgfQog
Ci0gICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYpOworLy8gICAgdGVtcGxhdGU8
dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCB2aXNpdEFnZ3JlZ2F0ZShWaXNpdG9yJik7CisgICAgdm9p
ZCB2aXNpdEFnZ3JlZ2F0ZTEoQWJzdHJhY3RTbG90VmlzaXRvciYpOwogCiAgICAgLy8gSWYgdGhp
cyByZXR1cm5zIGZhbHNlIHRoZW4gd2UgYXJlIHJlcXVlc3RpbmcgYSByZXNldCBvZiB0aGUgb3du
aW5nIFN0cnVjdHVyZVN0dWJJbmZvLgogICAgIGJvb2wgdmlzaXRXZWFrKFZNJikgY29uc3Q7CiAg
ICAgCiAgICAgLy8gVGhpcyByZXR1cm5zIHRydWUgaWYgaXQgaGFzIG1hcmtlZCBldmVyeXRoaW5n
IGl0IHdpbGwgZXZlciBtYXJrZWQuIFRoaXMgY2FuIGJlIHVzZWQgYXMgYW4KICAgICAvLyBvcHRp
bWl6YXRpb24gdG8gdGhlbiBhdm9pZCBjYWxsaW5nIHRoaXMgbWV0aG9kIGFnYWluIGR1cmluZyB0
aGUgZml4cG9pbnQuCi0gICAgYm9vbCBwcm9wYWdhdGVUcmFuc2l0aW9ucyhTbG90VmlzaXRvciYp
IGNvbnN0OworLy8gICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gYm9vbCBwcm9wYWdhdGVU
cmFuc2l0aW9uczEwKFZpc2l0b3ImKSBjb25zdDsKKyAgICBib29sIHByb3BhZ2F0ZVRyYW5zaXRp
b25zMTAoQWJzdHJhY3RTbG90VmlzaXRvciYpIGNvbnN0OwogCiAgICAgdm9pZCBhYm91dFRvRGll
KCk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJ
ZFN0YXR1cy5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9QdXRCeUlkU3RhdHVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzk2LDEyICszOTYs
MTcgQEAgUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpzbG93VmVyc2lvbgogICAgIHJldHVy
biBQdXRCeUlkU3RhdHVzKG1ha2VzQ2FsbHMoKSA/IE1ha2VzQ2FsbHMgOiBUYWtlc1Nsb3dQYXRo
KTsKIH0KIAotdm9pZCBQdXRCeUlkU3RhdHVzOjptYXJrSWZDaGVhcChTbG90VmlzaXRvciYgdmlz
aXRvcikKKy8vdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KKy8vdm9pZCBQdXRCeUlkU3RhdHVz
OjptYXJrSWZDaGVhcChWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBQdXRCeUlkU3RhdHVzOjptYXJr
SWZDaGVhcDEoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBmb3IgKFB1dEJ5
SWRWYXJpYW50JiB2YXJpYW50IDogbV92YXJpYW50cykKLSAgICAgICAgdmFyaWFudC5tYXJrSWZD
aGVhcCh2aXNpdG9yKTsKKyAgICAgICAgdmFyaWFudC5tYXJrSWZDaGVhcDEodmlzaXRvcik7CiB9
CiAKKy8vdGVtcGxhdGUgdm9pZCBQdXRCeUlkU3RhdHVzOjptYXJrSWZDaGVhcChTbG90VmlzaXRv
ciYpOworLy90ZW1wbGF0ZSB2b2lkIFB1dEJ5SWRTdGF0dXM6Om1hcmtJZkNoZWFwKERlYnVnU2xv
dFZpc2l0b3ImKTsKKwogYm9vbCBQdXRCeUlkU3RhdHVzOjpmaW5hbGl6ZShWTSYgdm0pCiB7CiAg
ICAgZm9yIChQdXRCeUlkVmFyaWFudCYgdmFyaWFudCA6IG1fdmFyaWFudHMpIHsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuaAkocmV2aXNp
b24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0
dXMuaAkod29ya2luZyBjb3B5KQpAQCAtMTE3LDcgKzExNyw4IEBAIHB1YmxpYzoKICAgICBjb25z
dCBQdXRCeUlkVmFyaWFudCYgYXQoc2l6ZV90IGluZGV4KSBjb25zdCB7IHJldHVybiBtX3Zhcmlh
bnRzW2luZGV4XTsgfQogICAgIGNvbnN0IFB1dEJ5SWRWYXJpYW50JiBvcGVyYXRvcltdKHNpemVf
dCBpbmRleCkgY29uc3QgeyByZXR1cm4gYXQoaW5kZXgpOyB9CiAgICAgCi0gICAgdm9pZCBtYXJr
SWZDaGVhcChTbG90VmlzaXRvciYpOworLy8gICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4g
dm9pZCBtYXJrSWZDaGVhcChWaXNpdG9yJik7CisgICAgdm9pZCBtYXJrSWZDaGVhcDEoQWJzdHJh
Y3RTbG90VmlzaXRvciYpOwogICAgIGJvb2wgZmluYWxpemUoVk0mKTsKICAgICAKICAgICB2b2lk
IG1lcmdlKGNvbnN0IFB1dEJ5SWRTdGF0dXMmKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9QdXRCeUlkVmFyaWFudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmNwcAkocmV2aXNpb24gMjcxNDQzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjYyLDEzICsyNjIsMTggQEAgYm9vbCBQdXRCeUlkVmFyaWFudDo6YXR0
ZW1wdFRvTWVyZ2VUcmFucwogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIFB1dEJ5SWRWYXJp
YW50OjptYXJrSWZDaGVhcChTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vdGVtcGxhdGU8dHlwZW5h
bWUgVmlzaXRvcj4KKy8vdm9pZCBQdXRCeUlkVmFyaWFudDo6bWFya0lmQ2hlYXAoVmlzaXRvciYg
dmlzaXRvcikKK3ZvaWQgUHV0QnlJZFZhcmlhbnQ6Om1hcmtJZkNoZWFwMShBYnN0cmFjdFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQogewotICAgIG1fb2xkU3RydWN0dXJlLm1hcmtJZkNoZWFwKHZpc2l0
b3IpOworICAgIG1fb2xkU3RydWN0dXJlLm1hcmtJZkNoZWFwMSh2aXNpdG9yKTsKICAgICBpZiAo
bV9uZXdTdHJ1Y3R1cmUpCi0gICAgICAgIG1fbmV3U3RydWN0dXJlLT5tYXJrSWZDaGVhcCh2aXNp
dG9yKTsKKyAgICAgICAgbV9uZXdTdHJ1Y3R1cmUtPm1hcmtJZkNoZWFwMSh2aXNpdG9yKTsKIH0K
IAorLy90ZW1wbGF0ZSB2b2lkIFB1dEJ5SWRWYXJpYW50OjptYXJrSWZDaGVhcChTbG90VmlzaXRv
ciYpOworLy90ZW1wbGF0ZSB2b2lkIFB1dEJ5SWRWYXJpYW50OjptYXJrSWZDaGVhcChEZWJ1Z1Ns
b3RWaXNpdG9yJik7CisKIGJvb2wgUHV0QnlJZFZhcmlhbnQ6OmZpbmFsaXplKFZNJiB2bSkKIHsK
ICAgICBpZiAoIW1fb2xkU3RydWN0dXJlLmlzU3RpbGxBbGl2ZSh2bSkpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuaAkocmV2aXNpb24g
MjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEzMiw3ICsxMzIsOCBAQCBwdWJsaWM6CiAKICAgICBib29s
IGF0dGVtcHRUb01lcmdlKGNvbnN0IFB1dEJ5SWRWYXJpYW50JiBvdGhlcik7CiAgICAgCi0gICAg
dm9pZCBtYXJrSWZDaGVhcChTbG90VmlzaXRvciYpOworLy8gICAgdGVtcGxhdGU8dHlwZW5hbWUg
VmlzaXRvcj4gdm9pZCBtYXJrSWZDaGVhcChWaXNpdG9yJik7CisgICAgdm9pZCBtYXJrSWZDaGVh
cDEoQWJzdHJhY3RTbG90VmlzaXRvciYpOwogICAgIGJvb2wgZmluYWxpemUoVk0mKTsKICAgICAK
ICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9SZWNvcmRlZFN0YXR1c2VzLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUmVjb3JkZWRTdGF0dXNlcy5jcHAJKHJldmlzaW9u
IDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9SZWNvcmRlZFN0YXR1
c2VzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODQsMjYgKzg0LDM2IEBAIERlbGV0ZUJ5U3RhdHVz
KiBSZWNvcmRlZFN0YXR1c2VzOjphZGREZWwKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi12b2lk
IFJlY29yZGVkU3RhdHVzZXM6OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRv
cikKKy8vdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KKy8vdm9pZCBSZWNvcmRlZFN0YXR1c2Vz
Ojp2aXNpdEFnZ3JlZ2F0ZShWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBSZWNvcmRlZFN0YXR1c2Vz
Ojp2aXNpdEFnZ3JlZ2F0ZTEoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBm
b3IgKGF1dG8mIHBhaXIgOiBnZXRzKQotICAgICAgICBwYWlyLnNlY29uZC0+dmlzaXRBZ2dyZWdh
dGUoc2xvdFZpc2l0b3IpOworICAgICAgICBwYWlyLnNlY29uZC0+dmlzaXRBZ2dyZWdhdGUxKHZp
c2l0b3IpOwogICAgIGZvciAoYXV0byYgcGFpciA6IGRlbGV0ZXMpCi0gICAgICAgIHBhaXIuc2Vj
b25kLT52aXNpdEFnZ3JlZ2F0ZShzbG90VmlzaXRvcik7CisgICAgICAgIHBhaXIuc2Vjb25kLT52
aXNpdEFnZ3JlZ2F0ZTEodmlzaXRvcik7CiB9CiAKLXZvaWQgUmVjb3JkZWRTdGF0dXNlczo6bWFy
a0lmQ2hlYXAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yKQorLy90ZW1wbGF0ZSB2b2lkIFJlY29y
ZGVkU3RhdHVzZXM6OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJik7CisvL3RlbXBsYXRlIHZv
aWQgUmVjb3JkZWRTdGF0dXNlczo6dmlzaXRBZ2dyZWdhdGUoRGVidWdTbG90VmlzaXRvciYpOwor
CisvL3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+CisvL3ZvaWQgUmVjb3JkZWRTdGF0dXNlczo6
bWFya0lmQ2hlYXAoVmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgUmVjb3JkZWRTdGF0dXNlczo6bWFy
a0lmQ2hlYXAxKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgZm9yIChhdXRv
JiBwYWlyIDogZ2V0cykKLSAgICAgICAgcGFpci5zZWNvbmQtPm1hcmtJZkNoZWFwKHNsb3RWaXNp
dG9yKTsKKyAgICAgICAgcGFpci5zZWNvbmQtPm1hcmtJZkNoZWFwMSh2aXNpdG9yKTsKICAgICBm
b3IgKGF1dG8mIHBhaXIgOiBwdXRzKQotICAgICAgICBwYWlyLnNlY29uZC0+bWFya0lmQ2hlYXAo
c2xvdFZpc2l0b3IpOworICAgICAgICBwYWlyLnNlY29uZC0+bWFya0lmQ2hlYXAxKHZpc2l0b3Ip
OwogICAgIGZvciAoYXV0byYgcGFpciA6IGlucykKLSAgICAgICAgcGFpci5zZWNvbmQtPm1hcmtJ
ZkNoZWFwKHNsb3RWaXNpdG9yKTsKKyAgICAgICAgcGFpci5zZWNvbmQtPm1hcmtJZkNoZWFwMSh2
aXNpdG9yKTsKICAgICBmb3IgKGF1dG8mIHBhaXIgOiBkZWxldGVzKQotICAgICAgICBwYWlyLnNl
Y29uZC0+bWFya0lmQ2hlYXAoc2xvdFZpc2l0b3IpOworICAgICAgICBwYWlyLnNlY29uZC0+bWFy
a0lmQ2hlYXAxKHZpc2l0b3IpOwogfQogCisvL3RlbXBsYXRlIHZvaWQgUmVjb3JkZWRTdGF0dXNl
czo6bWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImKTsKKy8vdGVtcGxhdGUgdm9pZCBSZWNvcmRlZFN0
YXR1c2VzOjptYXJrSWZDaGVhcChEZWJ1Z1Nsb3RWaXNpdG9yJik7CisKIHZvaWQgUmVjb3JkZWRT
dGF0dXNlczo6ZmluYWxpemVXaXRob3V0RGVsZXRpbmcoVk0mIHZtKQogewogICAgIC8vIFRoaXMg
dmFyaWFudCBvZiBmaW5hbGl6ZSBnZXRzIGNhbGxlZCBmcm9tIHdpdGhpbiBncmFwaCBzYWZlcG9p
bnRzIC0tIHNvIHRoZXJlIG1heSBiZSBERkcgSVIgaW4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9SZWNvcmRlZFN0YXR1c2VzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1JlY29yZGVkU3RhdHVzZXMuaAkocmV2aXNpb24gMjcxNDQz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1JlY29yZGVkU3RhdHVzZXMuaAko
d29ya2luZyBjb3B5KQpAQCAtNTAsOCArNTAsMTAgQEAgc3RydWN0IFJlY29yZGVkU3RhdHVzZXMg
ewogICAgIEluQnlJZFN0YXR1cyogYWRkSW5CeUlkU3RhdHVzKGNvbnN0IENvZGVPcmlnaW4mLCBj
b25zdCBJbkJ5SWRTdGF0dXMmKTsKICAgICBEZWxldGVCeVN0YXR1cyogYWRkRGVsZXRlQnlTdGF0
dXMoY29uc3QgQ29kZU9yaWdpbiYsIGNvbnN0IERlbGV0ZUJ5U3RhdHVzJik7CiAgICAgCi0gICAg
dm9pZCB2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYpOwotICAgIHZvaWQgbWFya0lmQ2hlYXAo
U2xvdFZpc2l0b3ImKTsKKy8vICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgdmlz
aXRBZ2dyZWdhdGUoVmlzaXRvciYpOworLy8gICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4g
dm9pZCBtYXJrSWZDaGVhcChWaXNpdG9yJik7CisgICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZTEoQWJz
dHJhY3RTbG90VmlzaXRvciYpOworICAgIHZvaWQgbWFya0lmQ2hlYXAxKEFic3RyYWN0U2xvdFZp
c2l0b3ImKTsKICAgICAKICAgICB2b2lkIGZpbmFsaXplV2l0aG91dERlbGV0aW5nKFZNJik7CiAg
ICAgdm9pZCBmaW5hbGl6ZShWTSYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1N0cnVjdHVyZVNldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1N0cnVjdHVyZVNldC5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zMSwxMiArMzEsMTcgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLXZvaWQgU3RydWN0dXJlU2V0
OjptYXJrSWZDaGVhcChTbG90VmlzaXRvciYgdmlzaXRvcikgY29uc3QKKy8vdGVtcGxhdGU8dHlw
ZW5hbWUgVmlzaXRvcj4KKy8vdm9pZCBTdHJ1Y3R1cmVTZXQ6Om1hcmtJZkNoZWFwKFZpc2l0b3Im
IHZpc2l0b3IpIGNvbnN0Cit2b2lkIFN0cnVjdHVyZVNldDo6bWFya0lmQ2hlYXAxKEFic3RyYWN0
U2xvdFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0CiB7CiAgICAgZm9yIChTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSA6ICp0aGlzKQotICAgICAgICBzdHJ1Y3R1cmUtPm1hcmtJZkNoZWFwKHZpc2l0b3IpOwor
ICAgICAgICBzdHJ1Y3R1cmUtPm1hcmtJZkNoZWFwMSh2aXNpdG9yKTsKIH0KIAorLy90ZW1wbGF0
ZSB2b2lkIFN0cnVjdHVyZVNldDo6bWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImKSBjb25zdDsKKy8v
dGVtcGxhdGUgdm9pZCBTdHJ1Y3R1cmVTZXQ6Om1hcmtJZkNoZWFwKERlYnVnU2xvdFZpc2l0b3Im
KSBjb25zdDsKKwogYm9vbCBTdHJ1Y3R1cmVTZXQ6OmlzU3RpbGxBbGl2ZShWTSYgdm0pIGNvbnN0
CiB7CiAgICAgZm9yIChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA6ICp0aGlzKSB7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU2V0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVNldC5oCShyZXZpc2lvbiAy
NzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU2V0LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTU0LDcgKzU0LDggQEAgcHVibGljOgogICAgICAgICByZXR1cm4g
b25seUVudHJ5KCk7CiAgICAgfQogCi0gICAgdm9pZCBtYXJrSWZDaGVhcChTbG90VmlzaXRvciYp
IGNvbnN0OworLy8gICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCBtYXJrSWZDaGVh
cChWaXNpdG9yJikgY29uc3Q7CisgICAgdm9pZCBtYXJrSWZDaGVhcDEoQWJzdHJhY3RTbG90Vmlz
aXRvciYpIGNvbnN0OwogICAgIGJvb2wgaXNTdGlsbEFsaXZlKFZNJikgY29uc3Q7CiAgICAgCiAg
ICAgdm9pZCBkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiwgRHVtcENvbnRleHQqKSBjb25zdDsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVy
ZVN0dWJJbmZvLmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjkwLDEy
ICsyOTAsMTQgQEAgdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6cmVzZXQoY29uc3QgQ29uYwogICAg
IHNldENhY2hlVHlwZShsb2NrZXIsIENhY2hlVHlwZTo6VW5zZXQpOwogfQogCi12b2lkIFN0cnVj
dHVyZVN0dWJJbmZvOjp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vdGVt
cGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KKy8vdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6dmlzaXRB
Z2dyZWdhdGUoVmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgU3RydWN0dXJlU3R1YkluZm86OnZpc2l0
QWdncmVnYXRlMShBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHsKICAgICAg
ICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2J1ZmZlcmVkU3RydWN0dXJlc0xvY2spOwogICAg
ICAgICBmb3IgKGF1dG8mIGJ1ZmZlcmVkU3RydWN0dXJlIDogbV9idWZmZXJlZFN0cnVjdHVyZXMp
Ci0gICAgICAgICAgICBidWZmZXJlZFN0cnVjdHVyZS5ieVZhbElkKCkudmlzaXRBZ2dyZWdhdGUo
dmlzaXRvcik7CisgICAgICAgICAgICBidWZmZXJlZFN0cnVjdHVyZS5ieVZhbElkKCkudmlzaXRB
Z2dyZWdhdGUxKHZpc2l0b3IpOwogICAgIH0KICAgICBzd2l0Y2ggKG1fY2FjaGVUeXBlKSB7CiAg
ICAgY2FzZSBDYWNoZVR5cGU6OlVuc2V0OgpAQCAtMzA1LDEwICszMDcsMTAgQEAgdm9pZCBTdHJ1
Y3R1cmVTdHViSW5mbzo6dmlzaXRBZ2dyZWdhdGUoUwogICAgIGNhc2UgQ2FjaGVUeXBlOjpQdXRC
eUlkUmVwbGFjZToKICAgICBjYXNlIENhY2hlVHlwZTo6SW5CeUlkU2VsZjoKICAgICBjYXNlIENh
Y2hlVHlwZTo6R2V0QnlJZFNlbGY6Ci0gICAgICAgIG1faWRlbnRpZmllci52aXNpdEFnZ3JlZ2F0
ZSh2aXNpdG9yKTsKKyAgICAgICAgbV9pZGVudGlmaWVyLnZpc2l0QWdncmVnYXRlMSh2aXNpdG9y
KTsKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgQ2FjaGVUeXBlOjpTdHViOgotICAgICAgICB1
LnN0dWItPnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOworICAgICAgICB1LnN0dWItPnZpc2l0QWdn
cmVnYXRlMSh2aXNpdG9yKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKQEAgLTMxNiw2
ICszMTgsOSBAQCB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjp2aXNpdEFnZ3JlZ2F0ZShTCiAgICAg
cmV0dXJuOwogfQogCisvL3RlbXBsYXRlIHZvaWQgU3RydWN0dXJlU3R1YkluZm86OnZpc2l0QWdn
cmVnYXRlKFNsb3RWaXNpdG9yJik7CisvL3RlbXBsYXRlIHZvaWQgU3RydWN0dXJlU3R1YkluZm86
OnZpc2l0QWdncmVnYXRlKERlYnVnU2xvdFZpc2l0b3ImKTsKKwogdm9pZCBTdHJ1Y3R1cmVTdHVi
SW5mbzo6dmlzaXRXZWFrUmVmZXJlbmNlcyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXJCYXNlJiBs
b2NrZXIsIENvZGVCbG9jayogY29kZUJsb2NrKQogewogICAgIFZNJiB2bSA9IGNvZGVCbG9jay0+
dm0oKTsKQEAgLTM0NiwyNCArMzUxLDMxIEBAIHZvaWQgU3RydWN0dXJlU3R1YkluZm86OnZpc2l0
V2Vha1JlZmVyZW4KICAgICByZXNldEJ5R0MgPSB0cnVlOwogfQogCi1ib29sIFN0cnVjdHVyZVN0
dWJJbmZvOjpwcm9wYWdhdGVUcmFuc2l0aW9ucyhTbG90VmlzaXRvciYgdmlzaXRvcikKLXsKLSAg
ICBzd2l0Y2ggKG1fY2FjaGVUeXBlKSB7Ci0gICAgY2FzZSBDYWNoZVR5cGU6OlVuc2V0OgotICAg
IGNhc2UgQ2FjaGVUeXBlOjpBcnJheUxlbmd0aDoKLSAgICBjYXNlIENhY2hlVHlwZTo6U3RyaW5n
TGVuZ3RoOgotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBjYXNlIENhY2hlVHlwZTo6R2V0QnlJ
ZFNlbGY6Ci0gICAgY2FzZSBDYWNoZVR5cGU6OlB1dEJ5SWRSZXBsYWNlOgotICAgIGNhc2UgQ2Fj
aGVUeXBlOjpJbkJ5SWRTZWxmOgotICAgICAgICByZXR1cm4gdS5ieUlkU2VsZi5iYXNlT2JqZWN0
U3RydWN0dXJlLT5tYXJrSWZDaGVhcCh2aXNpdG9yKTsKLSAgICBjYXNlIENhY2hlVHlwZTo6U3R1
YjoKLSAgICAgICAgcmV0dXJuIHUuc3R1Yi0+cHJvcGFnYXRlVHJhbnNpdGlvbnModmlzaXRvcik7
Ci0gICAgfQotICAgIAotICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0
dXJuIHRydWU7Ci19CisvL3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+CisvL2Jvb2wgU3RydWN0
dXJlU3R1YkluZm86OnByb3BhZ2F0ZVRyYW5zaXRpb25zMShWaXNpdG9yJiB2aXNpdG9yKQorLy97
CisvLyAgICBzd2l0Y2ggKG1fY2FjaGVUeXBlKSB7CisvLyAgICBjYXNlIENhY2hlVHlwZTo6VW5z
ZXQ6CisvLyAgICBjYXNlIENhY2hlVHlwZTo6QXJyYXlMZW5ndGg6CisvLyAgICBjYXNlIENhY2hl
VHlwZTo6U3RyaW5nTGVuZ3RoOgorLy8gICAgICAgIHJldHVybiB0cnVlOworLy8gICAgY2FzZSBD
YWNoZVR5cGU6OkdldEJ5SWRTZWxmOgorLy8gICAgY2FzZSBDYWNoZVR5cGU6OlB1dEJ5SWRSZXBs
YWNlOgorLy8gICAgY2FzZSBDYWNoZVR5cGU6OkluQnlJZFNlbGY6CisvLyAgICAgICAgcmV0dXJu
IHUuYnlJZFNlbGYuYmFzZU9iamVjdFN0cnVjdHVyZS0+bWFya0lmQ2hlYXAxKHZpc2l0b3IpOwor
Ly8gICAgICAgIHJldHVybiBmYWxzZTsKKy8vICAgIGNhc2UgQ2FjaGVUeXBlOjpTdHViOgorLy8g
ICAgICAgIHJldHVybiB1LnN0dWItPnByb3BhZ2F0ZVRyYW5zaXRpb25zMTAodmlzaXRvcik7Cisv
LyAgICAgICAgcmV0dXJuIGZhbHNlOworLy8gICAgfQorLy8KKy8vLy8gICAgVU5VU0VEX1BBUkFN
KHZpc2l0b3IpOyAvLyBtbGFtIFRFU1QKKy8vICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisvLyAgICByZXR1cm4gdHJ1ZTsKKy8vfQorLy8KKy8vdGVtcGxhdGU8PiBib29sIFN0cnVj
dHVyZVN0dWJJbmZvOjpwcm9wYWdhdGVUcmFuc2l0aW9uczEoU2xvdFZpc2l0b3ImKTsKKy8vdGVt
cGxhdGU8PiBib29sIFN0cnVjdHVyZVN0dWJJbmZvOjpwcm9wYWdhdGVUcmFuc2l0aW9uczEoQWJz
dHJhY3RTbG90VmlzaXRvciYpOwogCiBTdHViSW5mb1N1bW1hcnkgU3RydWN0dXJlU3R1YkluZm86
OnN1bW1hcnkoVk0mIHZtKSBjb25zdAogewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgJKHJldmlzaW9uIDI3MTQ0MykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC05MSwxNCArOTEsMTYgQEAgcHVibGljOgogICAgIHZvaWQgZGVyZWYoKTsK
ICAgICB2b2lkIGFib3V0VG9EaWUoKTsKIAotICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZp
c2l0b3ImKTsKKy8vICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgdmlzaXRBZ2dy
ZWdhdGUoVmlzaXRvciYpOworICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUxKEFic3RyYWN0U2xvdFZp
c2l0b3ImKTsKIAogICAgIC8vIENoZWNrIGlmIHRoZSBzdHViIGhhcyB3ZWFrIHJlZmVyZW5jZXMg
dGhhdCBhcmUgZGVhZC4gSWYgaXQgZG9lcywgdGhlbiBpdCByZXNldHMgaXRzZWxmLAogICAgIC8v
IGVpdGhlciBlbnRpcmVseSBvciBqdXN0IGVub3VnaCB0byBlbnN1cmUgdGhhdCB0aG9zZSBkZWFk
IHBvaW50ZXJzIGRvbid0IGdldCB1c2VkIGFueW1vcmUuCiAgICAgdm9pZCB2aXNpdFdlYWtSZWZl
cmVuY2VzKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlckJhc2UmLCBDb2RlQmxvY2sqKTsKICAgICAK
ICAgICAvLyBUaGlzIHJldHVybnMgdHJ1ZSBpZiBpdCBoYXMgbWFya2VkIGV2ZXJ5dGhpbmcgdGhh
dCBpdCB3aWxsIGV2ZXIgbWFyay4KLSAgICBib29sIHByb3BhZ2F0ZVRyYW5zaXRpb25zKFNsb3RW
aXNpdG9yJik7CisvLyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiBib29sIHByb3BhZ2F0
ZVRyYW5zaXRpb25zMShWaXNpdG9yJik7CisgICAgYm9vbCBwcm9wYWdhdGVUcmFuc2l0aW9uczEo
QWJzdHJhY3RTbG90VmlzaXRvciYpOwogICAgICAgICAKICAgICBTdHViSW5mb1N1bW1hcnkgc3Vt
bWFyeShWTSYpIGNvbnN0OwogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwCShyZXZpc2lvbiAyNzE0NDMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMi0y
MDE5IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
Mi0yMDIwIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtNzEsNyArNzEsOCBAQCBVbmxpbmtlZENvZGVCbG9jazo6VW5saW5r
ZWRDb2RlQmxvY2soVk0mCiAgICAgfQogfQogCi12b2lkIFVubGlua2VkQ29kZUJsb2NrOjp2aXNp
dENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0
eXBlbmFtZSBWaXNpdG9yPgordm9pZCBVbmxpbmtlZENvZGVCbG9jazo6dmlzaXRDaGlsZHJlbklt
cGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFVubGlua2VkQ29kZUJs
b2NrKiB0aGlzT2JqZWN0ID0ganNDYXN0PFVubGlua2VkQ29kZUJsb2NrKj4oY2VsbCk7CiAgICAg
QVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtOTAsNiAr
OTEsOCBAQCB2b2lkIFVubGlua2VkQ29kZUJsb2NrOjp2aXNpdENoaWxkcmVuKEpTCiAgICAgdmlz
aXRvci5yZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQoZXh0cmFNZW1vcnkpOwogfQogCitERUZJTkVf
VklTSVRfQ0hJTERSRU4oVW5saW5rZWRDb2RlQmxvY2spOworCiBzaXplX3QgVW5saW5rZWRDb2Rl
QmxvY2s6OmVzdGltYXRlZFNpemUoSlNDZWxsKiBjZWxsLCBWTSYgdm0pCiB7CiAgICAgVW5saW5r
ZWRDb2RlQmxvY2sqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8VW5saW5rZWRDb2RlQmxvY2sqPihjZWxs
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9j
ay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Vbmxpbmtl
ZENvZGVCbG9jay5oCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxOSBBcHBsZSBJbmMuIEFsbCBSaWdodHMg
UmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMCBBcHBsZSBJbmMuIEFsbCBSaWdo
dHMgUmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQyMyw3ICs0
MjMsNyBAQCBwcml2YXRlOgogICAgIFJlZkNvdW50ZWRBcnJheTxFeHByZXNzaW9uUmFuZ2VJbmZv
PiBtX2V4cHJlc3Npb25JbmZvOwogCiBwcm90ZWN0ZWQ6Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRD
aGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERS
RU47CiAgICAgc3RhdGljIHNpemVfdCBlc3RpbWF0ZWRTaXplKEpTQ2VsbCosIFZNJik7CiAKIHB1
YmxpYzoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZEZ1bmN0
aW9uRXhlY3V0YWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1VubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlLmNwcAkocmV2aXNpb24gMjcxNDQzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkRnVuY3Rpb25FeGVjdXRh
YmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTItMjAxOSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTItMjAyMCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE0MSw3ICsxNDEsOCBAQCB2b2lkIFVubGlua2Vk
RnVuY3Rpb25FeGVjdXRhYmxlOjpkZXN0cm95CiAgICAgc3RhdGljX2Nhc3Q8VW5saW5rZWRGdW5j
dGlvbkV4ZWN1dGFibGUqPihjZWxsKS0+flVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKCk7CiB9
CiAKLXZvaWQgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+
Cit2b2lkIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlOjp2aXNpdENoaWxkcmVuSW1wbChKU0Nl
bGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgVW5saW5rZWRGdW5jdGlvbkV4ZWN1
dGFibGUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqPihj
ZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7
CkBAIC0xNjQsNiArMTY1LDggQEAgdm9pZCBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6dmlz
aXRDaAogICAgIH0KIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKFVubGlua2VkRnVuY3Rpb25F
eGVjdXRhYmxlKTsKKwogU291cmNlQ29kZSBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6bGlu
a2VkU291cmNlQ29kZShjb25zdCBTb3VyY2VDb2RlJiBwYXNzZWRQYXJlbnRTb3VyY2UpIGNvbnN0
CiB7CiAgICAgY29uc3QgU291cmNlQ29kZSYgcGFyZW50U291cmNlID0gIW1faXNCdWlsdGluRGVm
YXVsdENsYXNzQ29uc3RydWN0b3IgPyBwYXNzZWRQYXJlbnRTb3VyY2UgOiBCdWlsdGluRXhlY3V0
YWJsZXM6OmRlZmF1bHRDb25zdHJ1Y3RvclNvdXJjZUNvZGUoY29uc3RydWN0b3JLaW5kKCkpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkRnVuY3Rpb25FeGVj
dXRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Vu
bGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlLmgJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE5
IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0y
MDIwIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMjMyLDcgKzIzMiw3IEBAIHByaXZhdGU6CiAgICAgVW5saW5rZWRGdW5j
dGlvbkV4ZWN1dGFibGUoVk0mLCBTdHJ1Y3R1cmUqLCBjb25zdCBTb3VyY2VDb2RlJiwgRnVuY3Rp
b25NZXRhZGF0YU5vZGUqLCBVbmxpbmtlZEZ1bmN0aW9uS2luZCwgQ29uc3RydWN0QWJpbGl0eSwg
SlNQYXJzZXJTY3JpcHRNb2RlLCBSZWZQdHI8VERaRW52aXJvbm1lbnRMaW5rPiwgIEpTQzo6RGVy
aXZlZENvbnRleHRUeXBlLCBKU0M6Ok5lZWRzQ2xhc3NGaWVsZEluaXRpYWxpemVyLCBib29sIGlz
QnVpbHRpbkRlZmF1bHRDbGFzc0NvbnN0cnVjdG9yKTsKICAgICBVbmxpbmtlZEZ1bmN0aW9uRXhl
Y3V0YWJsZShEZWNvZGVyJiwgY29uc3QgQ2FjaGVkRnVuY3Rpb25FeGVjdXRhYmxlJik7CiAKLSAg
ICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAg
REVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIHZvaWQgZGVjb2RlQ2FjaGVkQ29kZUJsb2Nr
cyhWTSYpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXJT
Y29wZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0Rl
YnVnZ2VyU2NvcGUuY3BwCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGVidWdnZXIvRGVidWdnZXJTY29wZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01NSw3ICs1
NSw4IEBAIHZvaWQgRGVidWdnZXJTY29wZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHYKICAgICBCYXNl
OjpmaW5pc2hDcmVhdGlvbih2bSk7CiB9CiAKLXZvaWQgRGVidWdnZXJTY29wZTo6dmlzaXRDaGls
ZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5h
bWUgVmlzaXRvcj4KK3ZvaWQgRGVidWdnZXJTY29wZTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxs
KiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIERlYnVnZ2VyU2NvcGUqIHRoaXNPYmpl
Y3QgPSBqc0Nhc3Q8RGVidWdnZXJTY29wZSo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1Rf
SU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTY1LDYgKzY2LDggQEAgdm9pZCBEZWJ1
Z2dlclNjb3BlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbAogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNP
YmplY3QtPm1fbmV4dCk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihEZWJ1Z2dlclNjb3Bl
KTsKKwogU3RyaW5nIERlYnVnZ2VyU2NvcGU6OmNsYXNzTmFtZShjb25zdCBKU09iamVjdCogb2Jq
ZWN0LCBWTSYgdm0pCiB7CiAgICAgY29uc3QgRGVidWdnZXJTY29wZSogc2NvcGUgPSBqc0Nhc3Q8
Y29uc3QgRGVidWdnZXJTY29wZSo+KG9iamVjdCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGVidWdnZXIvRGVidWdnZXJTY29wZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlclNjb3BlLmgJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlclNjb3BlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQ2LDcgKzQ2LDcgQEAgcHVibGljOgogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3Rh
dGljIERlYnVnZ2VyU2NvcGUqIGNyZWF0ZShWTSYgdm0sIEpTU2NvcGUqIHNjb3BlKTsKIAotICAg
IHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBE
RUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogICAgIHN0YXRpYyBTdHJpbmcgY2xhc3NOYW1lKGNvbnN0
IEpTT2JqZWN0KiwgVk0mKTsKICAgICBzdGF0aWMgU3RyaW5nIHRvU3RyaW5nTmFtZShjb25zdCBK
U09iamVjdCosIEpTR2xvYmFsT2JqZWN0Kik7CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVy
dHlTbG90KEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5
U2xvdCYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkVHJhbnNp
dGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVz
aXJlZFRyYW5zaXRpb25zLmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdEZXNpcmVkVHJhbnNpdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01
Miw3ICs1Miw3IEBAIHZvaWQgRGVzaXJlZFRyYW5zaXRpb246OnJlYWxseUFkZChWTSYgdm0KICAg
ICAgICAgICAgIG1fb2xkU3RydWN0dXJlLCBtX25ld1N0cnVjdHVyZSkpOwogfQogCi12b2lkIERl
c2lyZWRUcmFuc2l0aW9uOjp2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordm9p
ZCBEZXNpcmVkVHJhbnNpdGlvbjo6dmlzaXRDaGlsZHJlbjIoQWJzdHJhY3RTbG90VmlzaXRvciYg
dmlzaXRvcikKIHsKICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKG1fY29kZU9yaWdpbk93
bmVyKTsKICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKG1fb2xkU3RydWN0dXJlKTsKQEAg
LTc4LDEwICs3OCwxMCBAQCB2b2lkIERlc2lyZWRUcmFuc2l0aW9uczo6cmVhbGx5QWRkKFZNJiB2
CiAgICAgICAgIG1fdHJhbnNpdGlvbnNbaV0ucmVhbGx5QWRkKHZtLCBjb21tb24pOwogfQogCi12
b2lkIERlc2lyZWRUcmFuc2l0aW9uczo6dmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRv
cikKK3ZvaWQgRGVzaXJlZFRyYW5zaXRpb25zOjp2aXNpdENoaWxkcmVuMihBYnN0cmFjdFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQogewogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3RyYW5z
aXRpb25zLnNpemUoKTsgaSsrKQotICAgICAgICBtX3RyYW5zaXRpb25zW2ldLnZpc2l0Q2hpbGRy
ZW4odmlzaXRvcik7CisgICAgICAgIG1fdHJhbnNpdGlvbnNbaV0udmlzaXRDaGlsZHJlbjIodmlz
aXRvcik7CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFRyYW5zaXRpb25zLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkVHJhbnNpdGlvbnMuaAkocmV2aXNpb24g
MjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkVHJhbnNpdGlv
bnMuaAkod29ya2luZyBjb3B5KQpAQCAtNDYsOCArNDYsNyBAQCBwdWJsaWM6CiAgICAgRGVzaXJl
ZFRyYW5zaXRpb24oQ29kZUJsb2NrKiwgQ29kZUJsb2NrKiBjb2RlT3JpZ2luT3duZXIsIFN0cnVj
dHVyZSosIFN0cnVjdHVyZSopOwogCiAgICAgdm9pZCByZWFsbHlBZGQoVk0mLCBDb21tb25EYXRh
Kik7Ci0gICAgCi0gICAgdm9pZCB2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CisgICAgdm9p
ZCB2aXNpdENoaWxkcmVuMihBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAKIHByaXZhdGU6CiAgICAg
Q29kZUJsb2NrKiBtX2NvZGVCbG9jazsKQEAgLTYzLDcgKzYyLDcgQEAgcHVibGljOgogCiAgICAg
dm9pZCBhZGRMYXppbHkoQ29kZUJsb2NrKiwgQ29kZUJsb2NrKiBjb2RlT3JpZ2luT3duZXIsIFN0
cnVjdHVyZSosIFN0cnVjdHVyZSopOwogICAgIHZvaWQgcmVhbGx5QWRkKFZNJiwgQ29tbW9uRGF0
YSopOwotICAgIHZvaWQgdmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYpOworICAgIHZvaWQgdmlz
aXRDaGlsZHJlbjIoQWJzdHJhY3RTbG90VmlzaXRvciYpOwogCiBwcml2YXRlOgogICAgIFZlY3Rv
cjxEZXNpcmVkVHJhbnNpdGlvbj4gbV90cmFuc2l0aW9uczsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHRGVzaXJlZFdlYWtSZWZlcmVuY2VzLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXZWFrUmVmZXJlbmNlcy5jcHAJKHJl
dmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFdl
YWtSZWZlcmVuY2VzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODcsNyArODcsNyBAQCB2b2lkIERl
c2lyZWRXZWFrUmVmZXJlbmNlczo6cmVhbGx5QWRkKFZNCiAgICAgfQogfQogCi12b2lkIERlc2ly
ZWRXZWFrUmVmZXJlbmNlczo6dmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3Zv
aWQgRGVzaXJlZFdlYWtSZWZlcmVuY2VzOjp2aXNpdENoaWxkcmVuMihBYnN0cmFjdFNsb3RWaXNp
dG9yJiB2aXNpdG9yKQogewogICAgIGZvciAoSlNDZWxsKiB0YXJnZXQgOiBtX3JlZmVyZW5jZXMp
CiAgICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQodGFyZ2V0KTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFdlYWtSZWZlcmVuY2VzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2Vha1JlZmVyZW5jZXMu
aAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNp
cmVkV2Vha1JlZmVyZW5jZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsMTAgKzMxLDEwIEBACiAK
IG5hbWVzcGFjZSBKU0MgeyAKIAorY2xhc3MgQWJzdHJhY3RTbG90VmlzaXRvcjsKIGNsYXNzIENv
ZGVCbG9jazsKIGNsYXNzIEpTQ2VsbDsKIGNsYXNzIEpTVmFsdWU7Ci1jbGFzcyBTbG90VmlzaXRv
cjsKIGNsYXNzIFZNOwogCiBuYW1lc3BhY2UgREZHIHsKQEAgLTUyLDggKzUyLDggQEAgcHVibGlj
OgogICAgIGJvb2wgY29udGFpbnMoSlNDZWxsKik7CiAgICAgCiAgICAgdm9pZCByZWFsbHlBZGQo
Vk0mLCBDb21tb25EYXRhKik7Ci0gICAgCi0gICAgdm9pZCB2aXNpdENoaWxkcmVuKFNsb3RWaXNp
dG9yJik7CisKKyAgICB2b2lkIHZpc2l0Q2hpbGRyZW4yKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsK
IAogcHJpdmF0ZToKICAgICBDb2RlQmxvY2sqIG1fY29kZUJsb2NrOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NzcsNyAr
OTc3LDcgQEAgQmxvY2tMaXN0IEdyYXBoOjpibG9ja3NJblBvc3RPcmRlcihib29sIAogICAgICAg
ICB9CiAgICAgfQogCi0gICAgaWYgKGlzU2FmZVRvVmFsaWRhdGUgJiYgdmFsaWRhdGlvbkVuYWJs
ZWQoKSkgeyAvLyBUaGVyZSBhcmUgdXNlcnMgb2YgdGhpcyB3aGVyZSB3ZSBoYXZlbid0IHlldCBi
dWlsdCBvZiB0aGUgQ0ZHIGVub3VnaCB0byBiZSBhYmxlIHRvIHJ1biBkb21pbmF0b3JzLgorICAg
IGlmIChpc1NhZmVUb1ZhbGlkYXRlICYmIHZhbGlkYXRpb25FbmFibGVkKCkpIHsgLy8gVGhlcmUg
YXJlIHVzZXJzIG9mIHRoaXMgd2hlcmUgd2UgaGF2ZW4ndCB5ZXQgYnVpbHQgdGhlIENGRyBlbm91
Z2ggdG8gYmUgYWJsZSB0byBydW4gZG9taW5hdG9ycy4KICAgICAgICAgYXV0byB2YWxpZGF0ZVJl
c3VsdHMgPSBbJl0gKGF1dG8mIGRvbWluYXRvcnMpIHsKICAgICAgICAgICAgIC8vIFdoZW4gaXRl
cmF0aW5nIG92ZXIgcmV2ZXJzZSBwb3N0IG9yZGVyLCB3ZSBzaG91bGQgc2VlIGRvbWluYXRvcnMK
ICAgICAgICAgICAgIC8vIGJlZm9yZSB0aGluZ3MgdGhleSBkb21pbmF0ZS4KQEAgLTE0NDgsNyAr
MTQ0OCw3IEBAIHZvaWQgR3JhcGg6OnJlZ2lzdGVyRnJvemVuVmFsdWVzKCkKICAgICBtX2NvZGVC
bG9jay0+Y29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uKCkuc2hyaW5rVG9GaXQoKTsK
IH0KIAotdm9pZCBHcmFwaDo6dmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3Zv
aWQgR3JhcGg6OnZpc2l0Q2hpbGRyZW4xKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7
CiAgICAgZm9yIChGcm96ZW5WYWx1ZSogdmFsdWUgOiBtX2Zyb3plblZhbHVlcykgewogICAgICAg
ICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKHZhbHVlLT52YWx1ZSgpKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkod29ya2luZyBjb3B5KQpAQCAtMTAwMCw5ICsx
MDAwLDkgQEAgcHVibGljOgogICAgIGJvb2wgY2FuRG9GYXN0U3ByZWFkKE5vZGUqLCBjb25zdCBB
YnN0cmFjdFZhbHVlJik7CiAgICAgCiAgICAgdm9pZCByZWdpc3RlckZyb3plblZhbHVlcygpOwot
ICAgIAotICAgIHZvaWQgdmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYpIGZpbmFsOwotICAgIAor
CisgICAgdm9pZCB2aXNpdENoaWxkcmVuMShBYnN0cmFjdFNsb3RWaXNpdG9yJikgZmluYWw7CisK
ICAgICB2b2lkIGxvZ0Fzc2VydGlvbkZhaWx1cmUoCiAgICAgICAgIHN0ZDo6bnVsbHB0cl90LCBj
b25zdCBjaGFyKiBmaWxlLCBpbnQgbGluZSwgY29uc3QgY2hhciogZnVuY3Rpb24sCiAgICAgICAg
IGNvbnN0IGNoYXIqIGFzc2VydGlvbik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1BsYW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
UGxhbi5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHUGxhbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY3Miw3ICs2NzIsNyBAQCBDb21waWxhdGlv
bktleSBQbGFuOjprZXkoKQogICAgIHJldHVybiBDb21waWxhdGlvbktleShtX2NvZGVCbG9jay0+
YWx0ZXJuYXRpdmUoKSwgbV9tb2RlKTsKIH0KIAotdm9pZCBQbGFuOjpjaGVja0xpdmVuZXNzQW5k
VmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgUGxhbjo6Y2hlY2tMaXZl
bmVzc0FuZFZpc2l0Q2hpbGRyZW4oQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAg
ICBpZiAoIWlzS25vd25Ub0JlTGl2ZUR1cmluZ0dDKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTY4
NCw4ICs2ODQsOCBAQCB2b2lkIFBsYW46OmNoZWNrTGl2ZW5lc3NBbmRWaXNpdENoaWxkcmVuCiAg
ICAgICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKHZhbHVlLnZhbHVlKCkpOwogICAg
IH0KIAotICAgIG1fcmVjb3JkZWRTdGF0dXNlcy52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKLSAg
ICBtX3JlY29yZGVkU3RhdHVzZXMubWFya0lmQ2hlYXAodmlzaXRvcik7CisgICAgbV9yZWNvcmRl
ZFN0YXR1c2VzLnZpc2l0QWdncmVnYXRlMSh2aXNpdG9yKTsKKyAgICBtX3JlY29yZGVkU3RhdHVz
ZXMubWFya0lmQ2hlYXAxKHZpc2l0b3IpOwogCiAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJl
ZChtX2NvZGVCbG9jayk7CiAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZChtX2NvZGVCbG9j
ay0+YWx0ZXJuYXRpdmUoKSk7CkBAIC02OTgsOCArNjk4LDggQEAgdm9pZCBQbGFuOjpjaGVja0xp
dmVuZXNzQW5kVmlzaXRDaGlsZHJlbgogICAgICAgICB9CiAgICAgfQogCi0gICAgbV93ZWFrUmVm
ZXJlbmNlcy52aXNpdENoaWxkcmVuKHZpc2l0b3IpOwotICAgIG1fdHJhbnNpdGlvbnMudmlzaXRD
aGlsZHJlbih2aXNpdG9yKTsKKyAgICBtX3dlYWtSZWZlcmVuY2VzLnZpc2l0Q2hpbGRyZW4yKHZp
c2l0b3IpOworICAgIG1fdHJhbnNpdGlvbnMudmlzaXRDaGlsZHJlbjIodmlzaXRvcik7CiB9CiAK
IHZvaWQgUGxhbjo6ZmluYWxpemVJbkdDKCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHUGxhbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
UGxhbi5oCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1BsYW4uaAkod29ya2luZyBjb3B5KQpAQCAtNDMsOCArNDMsOCBAQAogCiBuYW1lc3BhY2UgSlND
IHsKIAorY2xhc3MgQWJzdHJhY3RTbG90VmlzaXRvcjsKIGNsYXNzIENvZGVCbG9jazsKLWNsYXNz
IFNsb3RWaXNpdG9yOwogCiBuYW1lc3BhY2UgREZHIHsKIApAQCAtNzIsNyArNzIsNyBAQCBwdWJs
aWM6CiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KICAgICB2b2lkIGl0ZXJhdGVD
b2RlQmxvY2tzRm9yR0MoY29uc3QgRnVuYyYpOwotICAgIHZvaWQgY2hlY2tMaXZlbmVzc0FuZFZp
c2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKKyAgICB2b2lkIGNoZWNrTGl2ZW5lc3NBbmRWaXNp
dENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKICAgICBib29sIGlzS25vd25Ub0JlTGl2
ZUR1cmluZ0dDKCk7CiAgICAgdm9pZCBmaW5hbGl6ZUluR0MoKTsKICAgICB2b2lkIGNhbmNlbCgp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlcG9pbnQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZXBvaW50LmNwcAkocmV2
aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlcG9pbnQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Myw3ICs4Myw3IEBAIHZvaWQgU2FmZXBvaW50OjpiZWdp
bigpCiAgICAgfQogfQogCi12b2lkIFNhZmVwb2ludDo6Y2hlY2tMaXZlbmVzc0FuZFZpc2l0Q2hp
bGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIFNhZmVwb2ludDo6Y2hlY2tMaXZlbmVz
c0FuZFZpc2l0Q2hpbGRyZW4oQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBS
RUxFQVNFX0FTU0VSVChtX2RpZENhbGxCZWdpbik7CiAKQEAgLTk0LDcgKzk0LDcgQEAgdm9pZCBT
YWZlcG9pbnQ6OmNoZWNrTGl2ZW5lc3NBbmRWaXNpdENoaQogICAgICAgICByZXR1cm47CiAgICAg
CiAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9zY2FubmFibGVzLnNpemUoKTsgaS0tOykKLSAgICAg
ICAgbV9zY2FubmFibGVzW2ldLT52aXNpdENoaWxkcmVuKHZpc2l0b3IpOworICAgICAgICBtX3Nj
YW5uYWJsZXNbaV0tPnZpc2l0Q2hpbGRyZW4xKHZpc2l0b3IpOwogfQogCiBib29sIFNhZmVwb2lu
dDo6aXNLbm93blRvQmVMaXZlRHVyaW5nR0MoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTYWZlcG9pbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NhZmVwb2ludC5oCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NhZmVwb2ludC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw3IEBA
CiAKIG5hbWVzcGFjZSBKU0MgewogCi1jbGFzcyBTbG90VmlzaXRvcjsKK2NsYXNzIEFic3RyYWN0
U2xvdFZpc2l0b3I7CiBjbGFzcyBWTTsKIAogbmFtZXNwYWNlIERGRyB7CkBAIC02Niw4ICs2Niw4
IEBAIHB1YmxpYzoKICAgICB2b2lkIGFkZChTY2FubmFibGUqKTsKICAgICAKICAgICB2b2lkIGJl
Z2luKCk7Ci0gICAgCi0gICAgdm9pZCBjaGVja0xpdmVuZXNzQW5kVmlzaXRDaGlsZHJlbihTbG90
VmlzaXRvciYpOworCisgICAgdm9pZCBjaGVja0xpdmVuZXNzQW5kVmlzaXRDaGlsZHJlbihBYnN0
cmFjdFNsb3RWaXNpdG9yJik7CiAgICAgYm9vbCBpc0tub3duVG9CZUxpdmVEdXJpbmdHQygpOwog
ICAgIHZvaWQgY2FuY2VsKCk7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NjYW5uYWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU2Nhbm5hYmxlLmgJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU2Nhbm5hYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDcgQEAKIAog
bmFtZXNwYWNlIEpTQyB7CiAKLWNsYXNzIFNsb3RWaXNpdG9yOworY2xhc3MgQWJzdHJhY3RTbG90
VmlzaXRvcjsKIAogbmFtZXNwYWNlIERGRyB7CiAKQEAgLTM4LDcgKzM4LDcgQEAgcHVibGljOgog
ICAgIFNjYW5uYWJsZSgpIHsgfQogICAgIHZpcnR1YWwgflNjYW5uYWJsZSgpIHsgfQogICAgIAot
ICAgIHZpcnR1YWwgdm9pZCB2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJikgPSAwOworICAgIHZp
cnR1YWwgdm9pZCB2aXNpdENoaWxkcmVuMShBYnN0cmFjdFNsb3RWaXNpdG9yJikgPSAwOwogfTsK
IAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdXb3JrbGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdXb3JrbGlzdC5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHV29ya2xpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNzIsNyArMzcy
LDcgQEAgdm9pZCBXb3JrbGlzdDo6cmVzdW1lQWxsVGhyZWFkcygpCiAgICAgbV9zdXNwZW5zaW9u
TG9jay51bmxvY2soKTsKIH0KIAotdm9pZCBXb3JrbGlzdDo6dmlzaXRXZWFrUmVmZXJlbmNlcyhT
bG90VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgV29ya2xpc3Q6OnZpc2l0V2Vha1JlZmVyZW5jZXMo
QWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBWTSogdm0gPSAmdmlzaXRvci5o
ZWFwKCktPnZtKCk7CiAgICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdX
b3JrbGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV29y
a2xpc3QuaAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdXb3JrbGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw3ICszNSw3IEBACiAKIG5hbWVzcGFj
ZSBKU0MgewogCi1jbGFzcyBTbG90VmlzaXRvcjsKK2NsYXNzIEFic3RyYWN0U2xvdFZpc2l0b3I7
CiAKIG5hbWVzcGFjZSBERkcgewogCkBAIC03Myw3ICs3Myw3IEBAIHB1YmxpYzoKICAgICBib29s
IGlzQWN0aXZlRm9yVk0oVk0mKSBjb25zdDsKICAgICAKICAgICAvLyBPbmx5IGNhbGxlZCBvbiB0
aGUgbWFpbiB0aHJlYWQgYWZ0ZXIgc3VzcGVuZGluZyBhbGwgdGhyZWFkcy4KLSAgICB2b2lkIHZp
c2l0V2Vha1JlZmVyZW5jZXMoU2xvdFZpc2l0b3ImKTsKKyAgICB2b2lkIHZpc2l0V2Vha1JlZmVy
ZW5jZXMoQWJzdHJhY3RTbG90VmlzaXRvciYpOwogICAgIHZvaWQgcmVtb3ZlRGVhZFBsYW5zKFZN
Jik7CiAgICAgCiAgICAgdm9pZCByZW1vdmVOb25Db21waWxpbmdQbGFuc0ZvclZNKFZNJik7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9BYnN0cmFjdFNsb3RWaXNpdG9yLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9BYnN0cmFjdFNsb3RWaXNp
dG9yLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9BYnN0
cmFjdFNsb3RWaXNpdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQzIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFic3RyYWN0U2xvdFZpc2l0
b3IuaCIKKworI2luY2x1ZGUgIkFic3RyYWN0U2xvdFZpc2l0b3JJbmxpbmVzLmgiCisjaW5jbHVk
ZSAiTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXIuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3ZvaWQg
QWJzdHJhY3RTbG90VmlzaXRvcjo6YWRkUGFyYWxsZWxDb25zdHJhaW50VGFzayhSZWZQdHI8U2hh
cmVkVGFzazx2b2lkKEFic3RyYWN0U2xvdFZpc2l0b3ImKT4+IHRhc2spCit7CisgICAgUkVMRUFT
RV9BU1NFUlQobV9jdXJyZW50U29sdmVyKTsKKyAgICBSRUxFQVNFX0FTU0VSVChtX2N1cnJlbnRD
b25zdHJhaW50KTsKKyAgICBSRUxFQVNFX0FTU0VSVCh0YXNrKTsKKyAgICAKKyAgICBtX2N1cnJl
bnRTb2x2ZXItPmFkZFBhcmFsbGVsVGFzayh0YXNrLCAqbV9jdXJyZW50Q29uc3RyYWludCk7Cit9
CisKK30gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
QWJzdHJhY3RTbG90VmlzaXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0Fic3RyYWN0U2xvdFZpc2l0b3IuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9BYnN0cmFjdFNsb3RWaXNpdG9yLmgJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwyMDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkpTQ0pTVmFsdWUuaCIKKyNpbmNsdWRlICJN
YXJrU3RhY2suaCIKKyNpbmNsdWRlICJWaXNpdFJhY2VLZXkuaCIgLy8gbWxhbQorI2luY2x1ZGUg
PHd0Zi9TaGFyZWRUYXNrLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1l
c3BhY2UgSlNDIHsKKworY2xhc3MgQ29uc2VydmF0aXZlUm9vdHM7CitjbGFzcyBEZWJ1Z1Nsb3RW
aXNpdG9yOworY2xhc3MgSGVhcDsKK2NsYXNzIEhlYXBBbmFseXplcjsKK2NsYXNzIE1hcmtpbmdD
b25zdHJhaW50OworY2xhc3MgTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXI7CitjbGFzcyBTbG90Vmlz
aXRvcjsKK2NsYXNzIFZNOwordGVtcGxhdGU8dHlwZW5hbWUgVD4gY2xhc3MgV2VhazsKK3RlbXBs
YXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFRyYWl0cz4gY2xhc3MgV3JpdGVCYXJyaWVyQmFzZTsK
KwordHlwZWRlZiB1aW50MzJfdCBIZWFwVmVyc2lvbjsKKworY2xhc3MgQWJzdHJhY3RTbG90Vmlz
aXRvciB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQWJzdHJhY3RTbG90VmlzaXRvcik7Cisg
ICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisvLyAgICBlbnVtIGNsYXNzIFR5
cGUgeworLy8gICAgICAgIFNsb3RWaXNpdG9yLAorLy8gICAgICAgIERlYnVnU2xvdFZpc2l0b3IK
Ky8vICAgIH07CisKKyAgICBlbnVtIFJvb3RNYXJrUmVhc29uIHsKKyAgICAgICAgTm9uZSwKKyAg
ICAgICAgQ29uc2VydmF0aXZlU2NhbiwKKyAgICAgICAgU3Ryb25nUmVmZXJlbmNlcywKKyAgICAg
ICAgUHJvdGVjdGVkVmFsdWVzLAorICAgICAgICBNYXJrTGlzdFNldCwKKyAgICAgICAgVk1FeGNl
cHRpb25zLAorICAgICAgICBTdHJvbmdIYW5kbGVzLAorICAgICAgICBEZWJ1Z2dlciwKKyAgICAg
ICAgSklUU3R1YlJvdXRpbmVzLAorICAgICAgICBXZWFrU2V0cywKKyAgICAgICAgT3V0cHV0LAor
ICAgICAgICBERkdXb3JrTGlzdHMsCisgICAgICAgIENvZGVCbG9ja3MsCisgICAgICAgIERPTUdD
T3V0cHV0LAorICAgIH07CisKKyAgICBjbGFzcyBEZWZhdWx0TWFya2luZ1Zpb2xhdGlvbkFzc2Vy
dGlvblNjb3BlIHsKKyAgICBwdWJsaWM6CisgICAgICAgIERlZmF1bHRNYXJraW5nVmlvbGF0aW9u
QXNzZXJ0aW9uU2NvcGUoQWJzdHJhY3RTbG90VmlzaXRvciYpIHsgfQorICAgIH07CisKKyAgICB2
aXJ0dWFsIH5BYnN0cmFjdFNsb3RWaXNpdG9yKCkgPSBkZWZhdWx0OworCisvLyAgICBBTFdBWVNf
SU5MSU5FIGJvb2wgaXNEZWJ1Z1Nsb3RWaXNpdG9yKCkgY29uc3QgeyByZXR1cm4gbV92aXNpdG9y
VHlwZSA9PSBUeXBlOjpEZWJ1Z1Nsb3RWaXNpdG9yOyB9CisvLyAgICBBTFdBWVNfSU5MSU5FIGJv
b2wgaXNTbG90VmlzaXRvcigpIGNvbnN0IHsgcmV0dXJuIG1fdmlzaXRvclR5cGUgPT0gVHlwZTo6
U2xvdFZpc2l0b3I7IH0KKworLy8gICAgQUxXQVlTX0lOTElORSBEZWJ1Z1Nsb3RWaXNpdG9yJiBh
c0RlYnVnU2xvdFZpc2l0b3IoKSB7IHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxEZWJ1Z1Nsb3RW
aXNpdG9yKj4odGhpcyk7IH0KKy8vICAgIEFMV0FZU19JTkxJTkUgY29uc3QgRGVidWdTbG90Vmlz
aXRvciYgYXNEZWJ1Z1Nsb3RWaXNpdG9yKCkgY29uc3QgeyByZXR1cm4gKnJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgRGVidWdTbG90VmlzaXRvcio+KHRoaXMpOyB9CisKKy8vICAgIEFMV0FZU19JTkxJ
TkUgU2xvdFZpc2l0b3ImIGFzU2xvdFZpc2l0b3IoKSB7IHJldHVybiAqcmVpbnRlcnByZXRfY2Fz
dDxTbG90VmlzaXRvcio+KHRoaXMpOyB9CisvLyAgICBBTFdBWVNfSU5MSU5FIGNvbnN0IFNsb3RW
aXNpdG9yJiBhc1Nsb3RWaXNpdG9yKCkgY29uc3QgeyByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgU2xvdFZpc2l0b3IqPih0aGlzKTsgfQorCisgICAgTWFya1N0YWNrQXJyYXkmIGNvbGxl
Y3Rvck1hcmtTdGFjaygpIHsgcmV0dXJuIG1fY29sbGVjdG9yU3RhY2s7IH0KKyAgICBNYXJrU3Rh
Y2tBcnJheSYgbXV0YXRvck1hcmtTdGFjaygpIHsgcmV0dXJuIG1fbXV0YXRvclN0YWNrOyB9Cisg
ICAgY29uc3QgTWFya1N0YWNrQXJyYXkmIGNvbGxlY3Rvck1hcmtTdGFjaygpIGNvbnN0IHsgcmV0
dXJuIG1fY29sbGVjdG9yU3RhY2s7IH0KKyAgICBjb25zdCBNYXJrU3RhY2tBcnJheSYgbXV0YXRv
ck1hcmtTdGFjaygpIGNvbnN0IHsgcmV0dXJuIG1fbXV0YXRvclN0YWNrOyB9CisKKyAgICBWTSYg
dm0oKTsKKyAgICBjb25zdCBWTSYgdm0oKSBjb25zdDsKKyAgICBIZWFwKiBoZWFwKCkgY29uc3Q7
CisKKyAgICB2aXJ0dWFsIHZvaWQgYXBwZW5kKGNvbnN0IENvbnNlcnZhdGl2ZVJvb3RzJikgPSAw
OworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVHJhaXRzPiB2b2lkIGFwcGVu
ZChjb25zdCBXcml0ZUJhcnJpZXJCYXNlPFQsIFRyYWl0cz4mKTsKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBULCB0eXBlbmFtZSBUcmFpdHM+IHZvaWQgYXBwZW5kSGlkZGVuKGNvbnN0IFdyaXRlQmFy
cmllckJhc2U8VCwgVHJhaXRzPiYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEl0ZXJhdG9yPiB2
b2lkIGFwcGVuZChJdGVyYXRvciBiZWdpbiAsIEl0ZXJhdG9yIGVuZCk7CisgICAgdm9pZCBhcHBl
bmRWYWx1ZXMoY29uc3QgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duLCBSYXdWYWx1ZVRyYWl0czxV
bmtub3duPj4qLCBzaXplX3QgY291bnQpOworICAgIHZvaWQgYXBwZW5kVmFsdWVzSGlkZGVuKGNv
bnN0IFdyaXRlQmFycmllckJhc2U8VW5rbm93biwgUmF3VmFsdWVUcmFpdHM8VW5rbm93bj4+Kiwg
c2l6ZV90IGNvdW50KTsKKworICAgIHZpcnR1YWwgdm9pZCBhcHBlbmRVbmJhcnJpZXJlZChKU1Zh
bHVlKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGFwcGVuZFVuYmFycmllcmVkKEpTQ2VsbCopID0g
MDsKKworICAgIHZpcnR1YWwgYm9vbCBhZGRPcGFxdWVSb290KHZvaWQqKSA9IDA7IC8vIFJldHVy
bnMgdHJ1ZSBpZiB0aGUgcm9vdCB3YXMgbmV3LgorCisgICAgdmlydHVhbCBib29sIGlzRmlyc3RW
aXNpdCgpIGNvbnN0ID0gMDsgLy8gbWxhbSBGSVhNRQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
VD4KKyAgICB2b2lkIGFwcGVuZChjb25zdCBXZWFrPFQ+JiB3ZWFrKTsKKworICAgIHZpcnR1YWwg
dm9pZCBhcHBlbmRIaWRkZW5VbmJhcnJpZXJlZChKU1ZhbHVlKSA9IDA7CisgICAgdmlydHVhbCB2
b2lkIGFwcGVuZEhpZGRlblVuYmFycmllcmVkKEpTQ2VsbCopID0gMDsKKworICAgIHZpcnR1YWwg
Ym9vbCBjb250YWluc09wYXF1ZVJvb3Qodm9pZCopIGNvbnN0ID0gMDsKKworICAgIHNpemVfdCBi
eXRlc1Zpc2l0ZWQoKSBjb25zdCB7IHJldHVybiBtX2J5dGVzVmlzaXRlZDsgfQorICAgIHNpemVf
dCB2aXNpdENvdW50KCkgY29uc3QgeyByZXR1cm4gbV92aXNpdENvdW50OyB9CisKKyAgICB2b2lk
IGFkZFRvVmlzaXRDb3VudChzaXplX3QgdmFsdWUpIHsgbV92aXNpdENvdW50ICs9IHZhbHVlOyB9
CisKKyAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGFkZFBhcmFsbGVsQ29uc3RyYWludFRhc2so
UmVmUHRyPFNoYXJlZFRhc2s8dm9pZChBYnN0cmFjdFNsb3RWaXNpdG9yJik+Pik7CisKKyAgICB2
aXJ0dWFsIHZvaWQgbWFya0F1eGlsaWFyeShjb25zdCB2b2lkKiBiYXNlKSA9IDA7CisKKyAgICB2
aXJ0dWFsIHZvaWQgcmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKHNpemVfdCkgPSAwOworI2lmIEVO
QUJMRShSRVNPVVJDRV9VU0FHRSkKKyAgICB2aXJ0dWFsIHZvaWQgcmVwb3J0RXh0ZXJuYWxNZW1v
cnlWaXNpdGVkKHNpemVfdCkgPSAwOworI2VuZGlmCisKKyAgICB2aXJ0dWFsIHZvaWQgZHVtcChQ
cmludFN0cmVhbSYpIGNvbnN0ID0gMDsKKworICAgIGJvb2wgaXNBbmFseXppbmdIZWFwKCkgY29u
c3QgeyByZXR1cm4gISFtX2hlYXBBbmFseXplcjsgfQorICAgIEhlYXBBbmFseXplciogaGVhcEFu
YWx5emVyKCkgY29uc3QgeyByZXR1cm4gbV9oZWFwQW5hbHl6ZXI7IH0KKworICAgIFJvb3RNYXJr
UmVhc29uIHJvb3RNYXJrUmVhc29uKCkgY29uc3QgeyByZXR1cm4gbV9yb290TWFya1JlYXNvbjsg
fQorICAgIHZvaWQgc2V0Um9vdE1hcmtSZWFzb24oUm9vdE1hcmtSZWFzb24gcmVhc29uKSB7IG1f
cm9vdE1hcmtSZWFzb24gPSByZWFzb247IH0KKworICAgIEhlYXBWZXJzaW9uIG1hcmtpbmdWZXJz
aW9uKCkgY29uc3QgeyByZXR1cm4gbV9tYXJraW5nVmVyc2lvbjsgfQorCisgICAgdmlydHVhbCBi
b29sIG11dGF0b3JJc1N0b3BwZWQoKSBjb25zdCA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgZGlk
UmFjZShjb25zdCBWaXNpdFJhY2VLZXkmKSA9IDA7CisgICAgdm9pZCBkaWRSYWNlKEpTQ2VsbCog
Y2VsbCwgY29uc3QgY2hhciogcmVhc29uKSB7IGRpZFJhY2UoVmlzaXRSYWNlS2V5KGNlbGwsIHJl
YXNvbikpOyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXRBc0NvbnN0cmFpbnQoY29uc3QgSlND
ZWxsKikgPSAwOworCisgICAgLy8gSW5saW5lIGZ1bmN0aW9ucyBmb3IgZGlzYXBhdGNoaW5nIHRv
IFNsb3RWaXNpdG9yIC8gRGVidWdTbG90VmlzaXRvciB2ZXJzaW9ucy4KKworLy8gICAgdm9pZCBh
cHBlbmQoY29uc3QgQ29uc2VydmF0aXZlUm9vdHMmKTsKKy8vICAgIHZvaWQgYXBwZW5kVW5iYXJy
aWVyZWQoSlNWYWx1ZSk7CisvLyAgICB2b2lkIGFwcGVuZFVuYmFycmllcmVkKEpTQ2VsbCopOwor
Ly8gICAgdm9pZCBhcHBlbmRIaWRkZW5VbmJhcnJpZXJlZChKU0NlbGwqKTsKKy8vICAgIGJvb2wg
Y29udGFpbnNPcGFxdWVSb290KHZvaWQqKSBjb25zdDsKKy8vICAgIHZvaWQgdmlzaXRBc0NvbnN0
cmFpbnQoY29uc3QgSlNDZWxsKik7CisKK3Byb3RlY3RlZDoKKyAgICBpbmxpbmUgQWJzdHJhY3RT
bG90VmlzaXRvcihIZWFwJiwgQ1N0cmluZyBjb2RlTmFtZSk7CisKKyAgICB2b2lkIHJlc2V0KCk7
CisKKyAgICBNYXJrU3RhY2tBcnJheSBtX2NvbGxlY3RvclN0YWNrOworICAgIE1hcmtTdGFja0Fy
cmF5IG1fbXV0YXRvclN0YWNrOworCisgICAgc2l6ZV90IG1fYnl0ZXNWaXNpdGVkIHsgMCB9Owor
ICAgIHNpemVfdCBtX3Zpc2l0Q291bnQgeyAwIH07CisKKyAgICBIZWFwVmVyc2lvbiBtX21hcmtp
bmdWZXJzaW9uOyAvLyBtbGFtIEZJWE1FCisgICAgSGVhcCYgbV9oZWFwOworCisgICAgSGVhcEFu
YWx5emVyKiBtX2hlYXBBbmFseXplciB7IG51bGxwdHIgfTsKKyAgICBSb290TWFya1JlYXNvbiBt
X3Jvb3RNYXJrUmVhc29uIHsgUm9vdE1hcmtSZWFzb246Ok5vbmUgfTsKKworICAgIENTdHJpbmcg
bV9jb2RlTmFtZTsKKworICAgIE1hcmtpbmdDb25zdHJhaW50KiBtX2N1cnJlbnRDb25zdHJhaW50
IHsgbnVsbHB0ciB9OworICAgIE1hcmtpbmdDb25zdHJhaW50U29sdmVyKiBtX2N1cnJlbnRTb2x2
ZXIgeyBudWxscHRyIH07CisKKy8vICAgIFR5cGUgbV92aXNpdG9yVHlwZTsKKworICAgIGZyaWVu
ZCBjbGFzcyBNYXJraW5nQ29uc3RyYWludFNvbHZlcjsKK307CisKK2NsYXNzIFNldFJvb3RNYXJr
UmVhc29uU2NvcGUgeworcHVibGljOgorICAgIFNldFJvb3RNYXJrUmVhc29uU2NvcGUoQWJzdHJh
Y3RTbG90VmlzaXRvciYgdmlzaXRvciwgQWJzdHJhY3RTbG90VmlzaXRvcjo6Um9vdE1hcmtSZWFz
b24gcmVhc29uKQorICAgICAgICA6IG1fdmlzaXRvcih2aXNpdG9yKQorICAgICAgICAsIG1fcHJl
dmlvdXNSZWFzb24odmlzaXRvci5yb290TWFya1JlYXNvbigpKQorICAgIHsKKyAgICAgICAgbV92
aXNpdG9yLnNldFJvb3RNYXJrUmVhc29uKHJlYXNvbik7CisgICAgfQorCisgICAgflNldFJvb3RN
YXJrUmVhc29uU2NvcGUoKQorICAgIHsKKyAgICAgICAgbV92aXNpdG9yLnNldFJvb3RNYXJrUmVh
c29uKG1fcHJldmlvdXNSZWFzb24pOworICAgIH0KKworcHJpdmF0ZToKKyAgICBBYnN0cmFjdFNs
b3RWaXNpdG9yJiBtX3Zpc2l0b3I7CisgICAgQWJzdHJhY3RTbG90VmlzaXRvcjo6Um9vdE1hcmtS
ZWFzb24gbV9wcmV2aW91c1JlYXNvbjsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQWJzdHJhY3RTbG90VmlzaXRvcklubGluZXMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9BYnN0cmFjdFNsb3RWaXNp
dG9ySW5saW5lcy5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0Fic3RyYWN0U2xvdFZpc2l0b3JJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwx
MDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJh
Z21hIG9uY2UKKworI2luY2x1ZGUgIkFic3RyYWN0U2xvdFZpc2l0b3IuaCIKKy8vI2luY2x1ZGUg
IkRlYnVnU2xvdFZpc2l0b3IuaCIKKyNpbmNsdWRlICJIZWFwLmgiCisvLyNpbmNsdWRlICJTbG90
VmlzaXRvci5oIgorI2luY2x1ZGUgIldlYWtJbmxpbmVzLmgiCisjaW5jbHVkZSAiV3JpdGVCYXJy
aWVyLmgiCisKK25hbWVzcGFjZSBKU0MgeworCisvL2lubGluZSBBYnN0cmFjdFNsb3RWaXNpdG9y
OjpBYnN0cmFjdFNsb3RWaXNpdG9yKFR5cGUgdHlwZSwgSGVhcCYgaGVhcCwgQ1N0cmluZyBjb2Rl
TmFtZSkKK2lubGluZSBBYnN0cmFjdFNsb3RWaXNpdG9yOjpBYnN0cmFjdFNsb3RWaXNpdG9yKEhl
YXAmIGhlYXAsIENTdHJpbmcgY29kZU5hbWUpCisgICAgOiBtX21hcmtpbmdWZXJzaW9uKE1hcmtl
ZFNwYWNlOjppbml0aWFsVmVyc2lvbikKKyAgICAsIG1faGVhcChoZWFwKQorICAgICwgbV9jb2Rl
TmFtZShjb2RlTmFtZSkKKy8vICAgICwgbV92aXNpdG9yVHlwZSh0eXBlKQoreworfQorCitpbmxp
bmUgSGVhcCogQWJzdHJhY3RTbG90VmlzaXRvcjo6aGVhcCgpIGNvbnN0Cit7CisgICAgcmV0dXJu
ICZtX2hlYXA7Cit9CisKK2lubGluZSBWTSYgQWJzdHJhY3RTbG90VmlzaXRvcjo6dm0oKQorewor
ICAgIHJldHVybiBtX2hlYXAudm0oKTsKK30KKworaW5saW5lIGNvbnN0IFZNJiBBYnN0cmFjdFNs
b3RWaXNpdG9yOjp2bSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1faGVhcC52bSgpOworfQorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBUPgorQUxXQVlTX0lOTElORSB2b2lkIEFic3RyYWN0U2xvdFZpc2l0
b3I6OmFwcGVuZChjb25zdCBXZWFrPFQ+JiB3ZWFrKQoreworICAgIGFwcGVuZFVuYmFycmllcmVk
KHdlYWsuZ2V0KCkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBUcmFpdHM+
CitBTFdBWVNfSU5MSU5FIHZvaWQgQWJzdHJhY3RTbG90VmlzaXRvcjo6YXBwZW5kKGNvbnN0IFdy
aXRlQmFycmllckJhc2U8VCwgVHJhaXRzPiYgc2xvdCkKK3sKKyAgICBhcHBlbmRVbmJhcnJpZXJl
ZChzbG90LmdldCgpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVHJhaXRz
PgorQUxXQVlTX0lOTElORSB2b2lkIEFic3RyYWN0U2xvdFZpc2l0b3I6OmFwcGVuZEhpZGRlbihj
b25zdCBXcml0ZUJhcnJpZXJCYXNlPFQsIFRyYWl0cz4mIHNsb3QpCit7CisgICAgYXBwZW5kSGlk
ZGVuVW5iYXJyaWVyZWQoc2xvdC5nZXQoKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEl0ZXJh
dG9yPgorQUxXQVlTX0lOTElORSB2b2lkIEFic3RyYWN0U2xvdFZpc2l0b3I6OmFwcGVuZChJdGVy
YXRvciBiZWdpbiwgSXRlcmF0b3IgZW5kKQoreworICAgIGZvciAoYXV0byBpdCA9IGJlZ2luOyBp
dCAhPSBlbmQ7ICsraXQpCisgICAgICAgIGFwcGVuZCgqaXQpOworfQorCitBTFdBWVNfSU5MSU5F
IHZvaWQgQWJzdHJhY3RTbG90VmlzaXRvcjo6YXBwZW5kVmFsdWVzKGNvbnN0IFdyaXRlQmFycmll
ckJhc2U8VW5rbm93bj4qIGJhcnJpZXJzLCBzaXplX3QgY291bnQpCit7CisgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKQorICAgICAgICBhcHBlbmQoYmFycmllcnNbaV0pOwor
fQorCitBTFdBWVNfSU5MSU5FIHZvaWQgQWJzdHJhY3RTbG90VmlzaXRvcjo6YXBwZW5kVmFsdWVz
SGlkZGVuKGNvbnN0IFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4qIGJhcnJpZXJzLCBzaXplX3Qg
Y291bnQpCit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKQorICAgICAg
ICBhcHBlbmRIaWRkZW4oYmFycmllcnNbaV0pOworfQorCitBTFdBWVNfSU5MSU5FIHZvaWQgQWJz
dHJhY3RTbG90VmlzaXRvcjo6cmVzZXQoKQoreworICAgIG1fYnl0ZXNWaXNpdGVkID0gMDsKKyAg
ICBtX3Zpc2l0Q291bnQgPSAwOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0RlYnVnU2xvdFZpc2l0b3IuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9EZWJ1Z1Nsb3RWaXNpdG9yLmgJKG5vbmV4aXN0ZW50
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvRGVidWdTbG90VmlzaXRvci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMTEwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJBYnN0cmFjdFNsb3RW
aXNpdG9yLmgiCisjaW5jbHVkZSAiSlNDSlNWYWx1ZS5oIgorI2luY2x1ZGUgIlZpc2l0UmFjZUtl
eS5oIgorI2luY2x1ZGUgIldlYWsuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIENvbnNl
cnZhdGl2ZVJvb3RzOworY2xhc3MgSGVhcDsKK2NsYXNzIEpTQ2VsbDsKKworLy8gRGVidWdTbG90
VmlzaXRvcidzIG1ldGhvZHMgc2hvdWxkIG1hdGNoIFNsb3RWaXNpdG9yLgorLy8gU2VlIFNsb3RW
aXNpdG9yLmggZm9yIGRvY3VtZW50YXRpb24gb24gd2hhdCBlYWNoIG9mIHRoZSBtZXRob2RzIGRv
ZXMuCisKK2NsYXNzIERlYnVnU2xvdFZpc2l0b3IgOiBwdWJsaWMgQWJzdHJhY3RTbG90VmlzaXRv
ciB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRGVidWdTbG90VmlzaXRvcik7CisgICAgV1RG
X01BS0VfRkFTVF9BTExPQ0FURUQ7CisgICAgdXNpbmcgQmFzZSA9IEFic3RyYWN0U2xvdFZpc2l0
b3I7CitwdWJsaWM6CisvLyAgICBjbGFzcyBEZWZhdWx0TWFya2luZ1Zpb2xhdGlvbkFzc2VydGlv
blNjb3BlIHsKKy8vICAgIHB1YmxpYzoKKy8vICAgICAgICBEZWZhdWx0TWFya2luZ1Zpb2xhdGlv
bkFzc2VydGlvblNjb3BlKERlYnVnU2xvdFZpc2l0b3ImKSB7IH0KKy8vICAgIH07CisKKyAgICBp
bmxpbmUgRGVidWdTbG90VmlzaXRvcihIZWFwJiwgQ1N0cmluZyBjb2RlTmFtZSk7CisgICAgdmly
dHVhbCB+RGVidWdTbG90VmlzaXRvcigpID0gZGVmYXVsdDsKKworICAgIGlubGluZSBWTSYgdm0o
KTsKKyAgICBpbmxpbmUgY29uc3QgVk0mIHZtKCkgY29uc3Q7CisgICAgaW5saW5lIEhlYXAqIGhl
YXAoKSBjb25zdDsKKworICAgIHZpcnR1YWwgdm9pZCBhcHBlbmQoY29uc3QgQ29uc2VydmF0aXZl
Um9vdHMmKSBvdmVycmlkZTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFRy
YWl0cz4gdm9pZCBhcHBlbmQoY29uc3QgV3JpdGVCYXJyaWVyQmFzZTxULCBUcmFpdHM+Jik7Cisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVHJhaXRzPiB2b2lkIGFwcGVuZEhpZGRl
bihjb25zdCBXcml0ZUJhcnJpZXJCYXNlPFQsIFRyYWl0cz4mKTsKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBJdGVyYXRvcj4gdm9pZCBhcHBlbmQoSXRlcmF0b3IgYmVnaW4gLCBJdGVyYXRvciBlbmQp
OworICAgIHZpcnR1YWwgdm9pZCBhcHBlbmRWYWx1ZXMoY29uc3QgV3JpdGVCYXJyaWVyQmFzZTxV
bmtub3duLCBSYXdWYWx1ZVRyYWl0czxVbmtub3duPj4qLCBzaXplX3QgY291bnQpID0gMDsKKyAg
ICB2aXJ0dWFsIHZvaWQgYXBwZW5kVmFsdWVzSGlkZGVuKGNvbnN0IFdyaXRlQmFycmllckJhc2U8
VW5rbm93biwgUmF3VmFsdWVUcmFpdHM8VW5rbm93bj4+Kiwgc2l6ZV90IGNvdW50KSA9IDA7CisK
KyAgICB2aXJ0dWFsIHZvaWQgYXBwZW5kVW5iYXJyaWVyZWQoSlNWYWx1ZSkgb3ZlcnJpZGU7Cisg
ICAgdmlydHVhbCB2b2lkIGFwcGVuZFVuYmFycmllcmVkKEpTVmFsdWUqLCBzaXplX3QpID0gMDsK
KyAgICB2aXJ0dWFsIHZvaWQgYXBwZW5kVW5iYXJyaWVyZWQoSlNDZWxsKikgb3ZlcnJpZGU7CisK
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIHZvaWQgYXBwZW5kKGNvbnN0IFdlYWs8VD4m
IHdlYWspOworCisgICAgdm9pZCBhcHBlbmRIaWRkZW5VbmJhcnJpZXJlZChKU1ZhbHVlKSBvdmVy
cmlkZTsKKyAgICB2b2lkIGFwcGVuZEhpZGRlblVuYmFycmllcmVkKEpTQ2VsbCopIG92ZXJyaWRl
OworCisgICAgYm9vbCBhZGRPcGFxdWVSb290KHZvaWQqKSBvdmVycmlkZTsgLy8gUmV0dXJucyB0
cnVlIGlmIHRoZSByb290IHdhcyBuZXcuCisgICAgYm9vbCBjb250YWluc09wYXF1ZVJvb3Qodm9p
ZCopIGNvbnN0IG92ZXJyaWRlOworCisgICAgYm9vbCBpc0ZpcnN0VmlzaXQoKSBjb25zdCBmaW5h
bCB7IHJldHVybiBtX2lzRmlyc3RWaXNpdDsgfSAvLyBtbGFtIEZJWE1FCisKKyAgICB2b2lkIG1h
cmtBdXhpbGlhcnkoY29uc3Qgdm9pZCogYmFzZSkgb3ZlcnJpZGU7CisKKyAgICB2b2lkIHJlcG9y
dEV4dHJhTWVtb3J5VmlzaXRlZChzaXplX3QpIG92ZXJyaWRlOworI2lmIEVOQUJMRShSRVNPVVJD
RV9VU0FHRSkKKyAgICB2b2lkIHJlcG9ydEV4dGVybmFsTWVtb3J5VmlzaXRlZChzaXplX3QpIG92
ZXJyaWRlOworI2VuZGlmCisKKyAgICBIZWFwVmVyc2lvbiBtYXJraW5nVmVyc2lvbigpIGNvbnN0
IHsgcmV0dXJuIG1fbWFya2luZ1ZlcnNpb247IH0KKworICAgIGJvb2wgbXV0YXRvcklzU3RvcHBl
ZCgpIGNvbnN0IG92ZXJyaWRlOworCisvLyAgICB2aXJ0dWFsIHZvaWQgZGlkUmFjZShjb25zdCBW
aXNpdFJhY2VLZXkmKSA9IDA7CisvLyAgICB2b2lkIGRpZFJhY2UoSlNDZWxsKiBjZWxsLCBjb25z
dCBjaGFyKiByZWFzb24pIHsgZGlkUmFjZShWaXNpdFJhY2VLZXkoY2VsbCwgcmVhc29uKSk7IH0K
KyAgICB2b2lkIGRpZFJhY2UoY29uc3QgVmlzaXRSYWNlS2V5Jikgb3ZlcnJpZGU7CisKK3Byb3Rl
Y3RlZDoKKyAgICBzaXplX3QgbV9ub25DZWxsVmlzaXRDb3VudCB7IDAgfTsgLy8gVXNlZCBmb3Ig
aW5jcmVtZW50YWwgZHJhaW5pbmcsIGlnbm9yZWQgb3RoZXJ3aXNlLgorICAgIENoZWNrZWRTaXpl
IG1fZXh0cmFNZW1vcnlTaXplIHsgMCB9OworCisgICAgSGVhcFZlcnNpb24gbV9tYXJraW5nVmVy
c2lvbjsgLy8gbWxhbSBGSVhNRQorCisvLyAgICBIZWFwJiBtX2hlYXA7CisgICAgQ1N0cmluZyBt
X2NvZGVOYW1lOworCisgICAgYm9vbCBtX2lzRmlyc3RWaXNpdCB7IGZhbHNlIH07CisvLyAgICBi
b29sIG1fbXV0YXRvcklzU3RvcHBlZCB7IGZhbHNlIH07IC8vIG1sYW0gRklYTUUKK307CisKK30g
Ly8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvRGVidWdT
bG90VmlzaXRvcklubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9EZWJ1Z1Nsb3RWaXNpdG9ySW5saW5lcy5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0RlYnVnU2xvdFZpc2l0b3JJbmxpbmVzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw4OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQWJzdHJhY3RTbG90VmlzaXRvcklu
bGluZXMuaCIKKyNpbmNsdWRlICJEZWJ1Z1Nsb3RWaXNpdG9yLmgiCisKK25hbWVzcGFjZSBKU0Mg
eworCitpbmxpbmUgRGVidWdTbG90VmlzaXRvcjo6RGVidWdTbG90VmlzaXRvcihIZWFwJiBoZWFw
LCBDU3RyaW5nIGNvZGVOYW1lKQorLy8gICAgOiBCYXNlKFR5cGU6OkRlYnVnU2xvdFZpc2l0b3Is
IGhlYXAsIGNvZGVOYW1lKQorICAgIDogQmFzZShoZWFwLCBjb2RlTmFtZSkKK3sKK30KKworaW5s
aW5lIEhlYXAqIERlYnVnU2xvdFZpc2l0b3I6OmhlYXAoKSBjb25zdAoreworICAgIHJldHVybiAm
bV9oZWFwOworfQorCitpbmxpbmUgVk0mIERlYnVnU2xvdFZpc2l0b3I6OnZtKCkKK3sKKyAgICBy
ZXR1cm4gbV9oZWFwLnZtKCk7Cit9CisKK2lubGluZSBjb25zdCBWTSYgRGVidWdTbG90VmlzaXRv
cjo6dm0oKSBjb25zdAoreworICAgIHJldHVybiBtX2hlYXAudm0oKTsKK30KKwordGVtcGxhdGU8
dHlwZW5hbWUgVCwgdHlwZW5hbWUgVHJhaXRzPgorQUxXQVlTX0lOTElORSB2b2lkIERlYnVnU2xv
dFZpc2l0b3I6OmFwcGVuZChjb25zdCBXcml0ZUJhcnJpZXJCYXNlPFQsIFRyYWl0cz4mIHNsb3Qp
Cit7CisgICAgYXBwZW5kVW5iYXJyaWVyZWQoc2xvdC5nZXQoKSk7Cit9CisKK3RlbXBsYXRlPHR5
cGVuYW1lIFQsIHR5cGVuYW1lIFRyYWl0cz4KK0FMV0FZU19JTkxJTkUgdm9pZCBEZWJ1Z1Nsb3RW
aXNpdG9yOjphcHBlbmRIaWRkZW4oY29uc3QgV3JpdGVCYXJyaWVyQmFzZTxULCBUcmFpdHM+JiBz
bG90KQoreworICAgIGFwcGVuZEhpZGRlblVuYmFycmllcmVkKHNsb3QuZ2V0KCkpOworfQorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBJdGVyYXRvcj4KK0FMV0FZU19JTkxJTkUgdm9pZCBEZWJ1Z1Nsb3RW
aXNpdG9yOjphcHBlbmQoSXRlcmF0b3IgYmVnaW4sIEl0ZXJhdG9yIGVuZCkKK3sKKyAgICBmb3Ig
KGF1dG8gaXQgPSBiZWdpbjsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICBhcHBlbmQoKml0KTsK
K30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK0FMV0FZU19JTkxJTkUgdm9pZCBEZWJ1Z1Nsb3RW
aXNpdG9yOjphcHBlbmQoY29uc3QgV2VhazxUPiYgd2VhaykKK3sKKyAgICBhcHBlbmRVbmJhcnJp
ZXJlZCh3ZWFrLmdldCgpKTsKK30KKworaW5saW5lIHZvaWQgRGVidWdTbG90VmlzaXRvcjo6cmVw
b3J0RXh0cmFNZW1vcnlWaXNpdGVkKHNpemVfdCBzaXplKQoreworICAgIGlmIChtX2lzRmlyc3RW
aXNpdCkgeworICAgICAgICBtX25vbkNlbGxWaXNpdENvdW50ICs9IHNpemU7CisgICAgICAgIC8v
IEZJWE1FOiBDaGFuZ2UgdGhpcyB0byB1c2UgU2F0dXJhdGVkQXJpdGhtZXRpYyB3aGVuIGF2YWls
YWJsZS4KKyAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE3MDQxMQorICAgICAgICBtX2V4dHJhTWVtb3J5U2l6ZSArPSBzaXplOworICAgIH0KK30KKwor
fSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IYW5k
bGVTZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hhbmRs
ZVNldC5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0hhbmRsZVNldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU2LDcgKzU2LDkgQEAgdm9pZCBIYW5k
bGVTZXQ6Omdyb3coKQogICAgIH0KIH0KIAotdm9pZCBIYW5kbGVTZXQ6OnZpc2l0U3Ryb25nSGFu
ZGxlcyhTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4K
Ky8vdm9pZCBIYW5kbGVTZXQ6OnZpc2l0U3Ryb25nSGFuZGxlcyhWaXNpdG9yJiB2aXNpdG9yKQor
dm9pZCBIYW5kbGVTZXQ6OnZpc2l0U3Ryb25nSGFuZGxlczEoQWJzdHJhY3RTbG90VmlzaXRvciYg
dmlzaXRvcikKIHsKICAgICBOb2RlKiBlbmQgPSBtX3N0cm9uZ0xpc3QuZW5kKCk7CiAgICAgZm9y
IChOb2RlKiBub2RlID0gbV9zdHJvbmdMaXN0LmJlZ2luKCk7IG5vZGUgIT0gZW5kOyBub2RlID0g
bm9kZS0+bmV4dCgpKSB7CkBAIC02Nyw2ICs2OSw5IEBAIHZvaWQgSGFuZGxlU2V0Ojp2aXNpdFN0
cm9uZ0hhbmRsZXMoU2xvdFYKICAgICB9CiB9CiAKKy8vdGVtcGxhdGUgdm9pZCBIYW5kbGVTZXQ6
OnZpc2l0U3Ryb25nSGFuZGxlcyhTbG90VmlzaXRvciYpOworLy90ZW1wbGF0ZSB2b2lkIEhhbmRs
ZVNldDo6dmlzaXRTdHJvbmdIYW5kbGVzKERlYnVnU2xvdFZpc2l0b3ImKTsKKwogdm9pZCBIYW5k
bGVTZXQ6OndyaXRlQmFycmllcihIYW5kbGVTbG90IHNsb3QsIGNvbnN0IEpTVmFsdWUmIHZhbHVl
KQogewogICAgIGlmICghdmFsdWUgPT0gISpzbG90ICYmIHNsb3QtPmlzQ2VsbCgpID09IHZhbHVl
LmlzQ2VsbCgpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGFuZGxlU2V0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGFuZGxlU2V0LmgJKHJl
dmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hhbmRsZVNldC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zNSwxMCArMzUsMTEgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAK
K2NsYXNzIEFic3RyYWN0U2xvdFZpc2l0b3I7CiBjbGFzcyBIYW5kbGVTZXQ7CiBjbGFzcyBWTTsK
IGNsYXNzIEpTVmFsdWU7Ci1jbGFzcyBTbG90VmlzaXRvcjsKKy8vY2xhc3MgU2xvdFZpc2l0b3I7
CiAKIGNsYXNzIEhhbmRsZU5vZGUgewogcHVibGljOgpAQCAtNzMsNyArNzQsOCBAQCBwdWJsaWM6
CiAgICAgSGFuZGxlU2xvdCBhbGxvY2F0ZSgpOwogICAgIHZvaWQgZGVhbGxvY2F0ZShIYW5kbGVT
bG90KTsKIAotICAgIHZvaWQgdmlzaXRTdHJvbmdIYW5kbGVzKFNsb3RWaXNpdG9yJik7CisvLyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIHZpc2l0U3Ryb25nSGFuZGxlcyhWaXNp
dG9yJik7CisgICAgdm9pZCB2aXNpdFN0cm9uZ0hhbmRsZXMxKEFic3RyYWN0U2xvdFZpc2l0b3Im
KTsKIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgd3JpdGVCYXJyaWVyKEhhbmRsZVNsb3Qs
IGNvbnN0IEpTVmFsdWUmKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVh
cC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJ
KHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yNjk3LDExICsyNjk3LDEyIEBAIHZvaWQgSGVhcDo6ZGlkRnJl
ZUJsb2NrKHNpemVfdCBjYXBhY2l0eSkKICNlbmRpZgogfQogCisvLyBtbGFtIEZJWE1FCiB2b2lk
IEhlYXA6OmFkZENvcmVDb25zdHJhaW50cygpCiB7CiAgICAgbV9jb25zdHJhaW50U2V0LT5hZGQo
CiAgICAgICAgICJDcyIsICJDb25zZXJ2YXRpdmUgU2NhbiIsCi0gICAgICAgIFt0aGlzLCBsYXN0
VmVyc2lvbiA9IHN0YXRpY19jYXN0PHVpbnQ2NF90PigwKV0gKFNsb3RWaXNpdG9yJiBzbG90Vmlz
aXRvcikgbXV0YWJsZSB7CisgICAgICAgIFt0aGlzLCBsYXN0VmVyc2lvbiA9IHN0YXRpY19jYXN0
PHVpbnQ2NF90PigwKV0gKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpIG11dGFibGUgewog
ICAgICAgICAgICAgYm9vbCBzaG91bGROb3RQcm9kdWNlV29yayA9IGxhc3RWZXJzaW9uID09IG1f
cGhhc2VWZXJzaW9uOwogICAgICAgICAgICAgaWYgKHNob3VsZE5vdFByb2R1Y2VXb3JrKQogICAg
ICAgICAgICAgICAgIHJldHVybjsKQEAgLTI3MTgsMTMgKzI3MTksMTMgQEAgdm9pZCBIZWFwOjph
ZGRDb3JlQ29uc3RyYWludHMoKQogICAgICAgICAgICAgICAgIGdhdGhlckpTU3RhY2tSb290cyhj
b25zZXJ2YXRpdmVSb290cyk7CiAgICAgICAgICAgICAgICAgZ2F0aGVyU2NyYXRjaEJ1ZmZlclJv
b3RzKGNvbnNlcnZhdGl2ZVJvb3RzKTsKIAotICAgICAgICAgICAgICAgIFNldFJvb3RNYXJrUmVh
c29uU2NvcGUgcm9vdFNjb3BlKHNsb3RWaXNpdG9yLCBTbG90VmlzaXRvcjo6Um9vdE1hcmtSZWFz
b246OkNvbnNlcnZhdGl2ZVNjYW4pOwotICAgICAgICAgICAgICAgIHNsb3RWaXNpdG9yLmFwcGVu
ZChjb25zZXJ2YXRpdmVSb290cyk7CisgICAgICAgICAgICAgICAgU2V0Um9vdE1hcmtSZWFzb25T
Y29wZSByb290U2NvcGUodmlzaXRvciwgQWJzdHJhY3RTbG90VmlzaXRvcjo6Um9vdE1hcmtSZWFz
b246OkNvbnNlcnZhdGl2ZVNjYW4pOworICAgICAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kKGNv
bnNlcnZhdGl2ZVJvb3RzKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChPcHRpb25z
Ojp1c2VKSVQoKSkgewogICAgICAgICAgICAgICAgIC8vIEpJVFN0dWJSb3V0aW5lcyBtdXN0IGJl
IHZpc2l0ZWQgYWZ0ZXIgc2Nhbm5pbmcgQ29uc2VydmF0aXZlUm9vdHMgc2luY2UgSklUU3R1YlJv
dXRpbmVzIGRlcGVuZCBvbiB0aGUgaG9vayBleGVjdXRlZCBkdXJpbmcgZ2F0aGVyaW5nIENvbnNl
cnZhdGl2ZVJvb3RzLgotICAgICAgICAgICAgICAgIFNldFJvb3RNYXJrUmVhc29uU2NvcGUgcm9v
dFNjb3BlKHNsb3RWaXNpdG9yLCBTbG90VmlzaXRvcjo6Um9vdE1hcmtSZWFzb246OkpJVFN0dWJS
b3V0aW5lcyk7Ci0gICAgICAgICAgICAgICAgbV9qaXRTdHViUm91dGluZXMtPnRyYWNlTWFya2Vk
U3R1YlJvdXRpbmVzKHNsb3RWaXNpdG9yKTsKKyAgICAgICAgICAgICAgICBTZXRSb290TWFya1Jl
YXNvblNjb3BlIHJvb3RTY29wZSh2aXNpdG9yLCBBYnN0cmFjdFNsb3RWaXNpdG9yOjpSb290TWFy
a1JlYXNvbjo6SklUU3R1YlJvdXRpbmVzKTsKKyAgICAgICAgICAgICAgICBtX2ppdFN0dWJSb3V0
aW5lcy0+dHJhY2VNYXJrZWRTdHViUm91dGluZXMxKHZpc2l0b3IpOwogICAgICAgICAgICAgfQog
ICAgICAgICAgICAgCiAgICAgICAgICAgICBsYXN0VmVyc2lvbiA9IG1fcGhhc2VWZXJzaW9uOwpA
QCAtMjczMyw5MiArMjczNCw5MiBAQCB2b2lkIEhlYXA6OmFkZENvcmVDb25zdHJhaW50cygpCiAg
ICAgCiAgICAgbV9jb25zdHJhaW50U2V0LT5hZGQoCiAgICAgICAgICJNc3IiLCAiTWlzYyBTbWFs
bCBSb290cyIsCi0gICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yKSB7Cisg
ICAgICAgIFt0aGlzXSAoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikgewogCiAjaWYgSlND
X09CSkNfQVBJX0VOQUJMRUQKLSAgICAgICAgICAgIHNjYW5FeHRlcm5hbFJlbWVtYmVyZWRTZXQo
bV92bSwgc2xvdFZpc2l0b3IpOworICAgICAgICAgICAgc2NhbkV4dGVybmFsUmVtZW1iZXJlZFNl
dChtX3ZtLCB2aXNpdG9yKTsKICNlbmRpZgogICAgICAgICAgICAgaWYgKG1fdm0uc21hbGxTdHJp
bmdzLm5lZWRzVG9CZVZpc2l0ZWQoKm1fY29sbGVjdGlvblNjb3BlKSkgewotICAgICAgICAgICAg
ICAgIFNldFJvb3RNYXJrUmVhc29uU2NvcGUgcm9vdFNjb3BlKHNsb3RWaXNpdG9yLCBTbG90Vmlz
aXRvcjo6Um9vdE1hcmtSZWFzb246OlN0cm9uZ1JlZmVyZW5jZXMpOwotICAgICAgICAgICAgICAg
IG1fdm0uc21hbGxTdHJpbmdzLnZpc2l0U3Ryb25nUmVmZXJlbmNlcyhzbG90VmlzaXRvcik7Cisg
ICAgICAgICAgICAgICAgU2V0Um9vdE1hcmtSZWFzb25TY29wZSByb290U2NvcGUodmlzaXRvciwg
QWJzdHJhY3RTbG90VmlzaXRvcjo6Um9vdE1hcmtSZWFzb246OlN0cm9uZ1JlZmVyZW5jZXMpOwor
ICAgICAgICAgICAgICAgIG1fdm0uc21hbGxTdHJpbmdzLnZpc2l0U3Ryb25nUmVmZXJlbmNlcyh2
aXNpdG9yKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIFNldFJvb3RNYXJrUmVhc29uU2NvcGUgcm9vdFNjb3BlKHNsb3RWaXNpdG9y
LCBTbG90VmlzaXRvcjo6Um9vdE1hcmtSZWFzb246OlByb3RlY3RlZFZhbHVlcyk7CisgICAgICAg
ICAgICAgICAgU2V0Um9vdE1hcmtSZWFzb25TY29wZSByb290U2NvcGUodmlzaXRvciwgQWJzdHJh
Y3RTbG90VmlzaXRvcjo6Um9vdE1hcmtSZWFzb246OlByb3RlY3RlZFZhbHVlcyk7CiAgICAgICAg
ICAgICAgICAgZm9yIChhdXRvJiBwYWlyIDogbV9wcm90ZWN0ZWRWYWx1ZXMpCi0gICAgICAgICAg
ICAgICAgICAgIHNsb3RWaXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKHBhaXIua2V5KTsKKyAgICAg
ICAgICAgICAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZChwYWlyLmtleSk7CiAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmIChtX21hcmtMaXN0U2V0ICYm
IG1fbWFya0xpc3RTZXQtPnNpemUoKSkgewotICAgICAgICAgICAgICAgIFNldFJvb3RNYXJrUmVh
c29uU2NvcGUgcm9vdFNjb3BlKHNsb3RWaXNpdG9yLCBTbG90VmlzaXRvcjo6Um9vdE1hcmtSZWFz
b246OkNvbnNlcnZhdGl2ZVNjYW4pOwotICAgICAgICAgICAgICAgIE1hcmtlZEFyZ3VtZW50QnVm
ZmVyOjptYXJrTGlzdHMoc2xvdFZpc2l0b3IsICptX21hcmtMaXN0U2V0KTsKKyAgICAgICAgICAg
ICAgICBTZXRSb290TWFya1JlYXNvblNjb3BlIHJvb3RTY29wZSh2aXNpdG9yLCBBYnN0cmFjdFNs
b3RWaXNpdG9yOjpSb290TWFya1JlYXNvbjo6Q29uc2VydmF0aXZlU2Nhbik7CisgICAgICAgICAg
ICAgICAgTWFya2VkQXJndW1lbnRCdWZmZXI6Om1hcmtMaXN0cyh2aXNpdG9yLCAqbV9tYXJrTGlz
dFNldCk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIG1fbWFya2VkSlNWYWx1ZVJlZkFy
cmF5cy5mb3JFYWNoKFsmXSAoTWFya2VkSlNWYWx1ZVJlZkFycmF5KiBhcnJheSkgewotICAgICAg
ICAgICAgICAgIGFycmF5LT52aXNpdEFnZ3JlZ2F0ZShzbG90VmlzaXRvcik7CisgICAgICAgICAg
ICAgICAgYXJyYXktPnZpc2l0QWdncmVnYXRlMSh2aXNpdG9yKTsKICAgICAgICAgICAgIH0pOwog
CiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgU2V0Um9vdE1hcmtSZWFzb25TY29wZSBy
b290U2NvcGUoc2xvdFZpc2l0b3IsIFNsb3RWaXNpdG9yOjpSb290TWFya1JlYXNvbjo6Vk1FeGNl
cHRpb25zKTsKLSAgICAgICAgICAgICAgICBzbG90VmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZCht
X3ZtLmV4Y2VwdGlvbigpKTsKLSAgICAgICAgICAgICAgICBzbG90VmlzaXRvci5hcHBlbmRVbmJh
cnJpZXJlZChtX3ZtLmxhc3RFeGNlcHRpb24oKSk7CisgICAgICAgICAgICAgICAgU2V0Um9vdE1h
cmtSZWFzb25TY29wZSByb290U2NvcGUodmlzaXRvciwgQWJzdHJhY3RTbG90VmlzaXRvcjo6Um9v
dE1hcmtSZWFzb246OlZNRXhjZXB0aW9ucyk7CisgICAgICAgICAgICAgICAgdmlzaXRvci5hcHBl
bmRVbmJhcnJpZXJlZChtX3ZtLmV4Y2VwdGlvbigpKTsKKyAgICAgICAgICAgICAgICB2aXNpdG9y
LmFwcGVuZFVuYmFycmllcmVkKG1fdm0ubGFzdEV4Y2VwdGlvbigpKTsKICAgICAgICAgICAgIH0K
ICAgICAgICAgfSwKICAgICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHk6OkdyZXllZEJ5RXhlY3V0
aW9uKTsKICAgICAKICAgICBtX2NvbnN0cmFpbnRTZXQtPmFkZCgKICAgICAgICAgIlNoIiwgIlN0
cm9uZyBIYW5kbGVzIiwKLSAgICAgICAgW3RoaXNdIChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3Ip
IHsKLSAgICAgICAgICAgIFNldFJvb3RNYXJrUmVhc29uU2NvcGUgcm9vdFNjb3BlKHNsb3RWaXNp
dG9yLCBTbG90VmlzaXRvcjo6Um9vdE1hcmtSZWFzb246OlN0cm9uZ0hhbmRsZXMpOwotICAgICAg
ICAgICAgbV9oYW5kbGVTZXQudmlzaXRTdHJvbmdIYW5kbGVzKHNsb3RWaXNpdG9yKTsKKyAgICAg
ICAgW3RoaXNdIChBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKSB7CisgICAgICAgICAgICBT
ZXRSb290TWFya1JlYXNvblNjb3BlIHJvb3RTY29wZSh2aXNpdG9yLCBBYnN0cmFjdFNsb3RWaXNp
dG9yOjpSb290TWFya1JlYXNvbjo6U3Ryb25nSGFuZGxlcyk7CisgICAgICAgICAgICBtX2hhbmRs
ZVNldC52aXNpdFN0cm9uZ0hhbmRsZXMxKHZpc2l0b3IpOwogICAgICAgICB9LAogICAgICAgICBD
b25zdHJhaW50Vm9sYXRpbGl0eTo6R3JleWVkQnlFeGVjdXRpb24pOwogICAgIAogICAgIG1fY29u
c3RyYWludFNldC0+YWRkKAogICAgICAgICAiRCIsICJEZWJ1Z2dlciIsCi0gICAgICAgIFt0aGlz
XSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yKSB7Ci0gICAgICAgICAgICBTZXRSb290TWFya1Jl
YXNvblNjb3BlIHJvb3RTY29wZShzbG90VmlzaXRvciwgU2xvdFZpc2l0b3I6OlJvb3RNYXJrUmVh
c29uOjpEZWJ1Z2dlcik7CisgICAgICAgIFt0aGlzXSAoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlz
aXRvcikgeworICAgICAgICAgICAgU2V0Um9vdE1hcmtSZWFzb25TY29wZSByb290U2NvcGUodmlz
aXRvciwgQWJzdHJhY3RTbG90VmlzaXRvcjo6Um9vdE1hcmtSZWFzb246OkRlYnVnZ2VyKTsKIAog
I2lmIEVOQUJMRShTQU1QTElOR19QUk9GSUxFUikKICAgICAgICAgICAgIGlmIChTYW1wbGluZ1By
b2ZpbGVyKiBzYW1wbGluZ1Byb2ZpbGVyID0gbV92bS5zYW1wbGluZ1Byb2ZpbGVyKCkpIHsKICAg
ICAgICAgICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKHNhbXBsaW5nUHJvZmlsZXItPmdl
dExvY2soKSk7CiAgICAgICAgICAgICAgICAgc2FtcGxpbmdQcm9maWxlci0+cHJvY2Vzc1VudmVy
aWZpZWRTdGFja1RyYWNlcyhsb2NrZXIpOwotICAgICAgICAgICAgICAgIHNhbXBsaW5nUHJvZmls
ZXItPnZpc2l0KHNsb3RWaXNpdG9yKTsKKyAgICAgICAgICAgICAgICBzYW1wbGluZ1Byb2ZpbGVy
LT52aXNpdCh2aXNpdG9yKTsKICAgICAgICAgICAgICAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSA9
PSBHQ0xvZ2dpbmc6OlZlcmJvc2UpCi0gICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIlNhbXBs
aW5nIFByb2ZpbGVyIGRhdGE6XG4iLCBzbG90VmlzaXRvcik7CisgICAgICAgICAgICAgICAgICAg
IGRhdGFMb2coIlNhbXBsaW5nIFByb2ZpbGVyIGRhdGE6XG4iLCB2aXNpdG9yKTsKICAgICAgICAg
ICAgIH0KICNlbmRpZiAvLyBFTkFCTEUoU0FNUExJTkdfUFJPRklMRVIpCiAKICAgICAgICAgICAg
IGlmIChtX3ZtLnR5cGVQcm9maWxlcigpKQotICAgICAgICAgICAgICAgIG1fdm0udHlwZVByb2Zp
bGVyTG9nKCktPnZpc2l0KHNsb3RWaXNpdG9yKTsKKyAgICAgICAgICAgICAgICBtX3ZtLnR5cGVQ
cm9maWxlckxvZygpLT52aXNpdCh2aXNpdG9yKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAg
aWYgKGF1dG8qIHNoYWRvd0NoaWNrZW4gPSBtX3ZtLnNoYWRvd0NoaWNrZW4oKSkKLSAgICAgICAg
ICAgICAgICBzaGFkb3dDaGlja2VuLT52aXNpdENoaWxkcmVuKHNsb3RWaXNpdG9yKTsKKyAgICAg
ICAgICAgICAgICBzaGFkb3dDaGlja2VuLT52aXNpdENoaWxkcmVuKHZpc2l0b3IpOwogICAgICAg
ICB9LAogICAgICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eTo6R3JleWVkQnlFeGVjdXRpb24pOwog
ICAgIAogICAgIG1fY29uc3RyYWludFNldC0+YWRkKAogICAgICAgICAiV3MiLCAiV2VhayBTZXRz
IiwKLSAgICAgICAgW3RoaXNdIChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IpIHsKLSAgICAgICAg
ICAgIFNldFJvb3RNYXJrUmVhc29uU2NvcGUgcm9vdFNjb3BlKHNsb3RWaXNpdG9yLCBTbG90Vmlz
aXRvcjo6Um9vdE1hcmtSZWFzb246OldlYWtTZXRzKTsKLSAgICAgICAgICAgIG1fb2JqZWN0U3Bh
Y2UudmlzaXRXZWFrU2V0cyhzbG90VmlzaXRvcik7CisgICAgICAgIFt0aGlzXSAoQWJzdHJhY3RT
bG90VmlzaXRvciYgdmlzaXRvcikgeworICAgICAgICAgICAgU2V0Um9vdE1hcmtSZWFzb25TY29w
ZSByb290U2NvcGUodmlzaXRvciwgQWJzdHJhY3RTbG90VmlzaXRvcjo6Um9vdE1hcmtSZWFzb246
OldlYWtTZXRzKTsKKyAgICAgICAgICAgIG1fb2JqZWN0U3BhY2UudmlzaXRXZWFrU2V0czEodmlz
aXRvcik7CiAgICAgICAgIH0sCiAgICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5OjpHcmV5ZWRC
eU1hcmtpbmcpOwogICAgIAogICAgIG1fY29uc3RyYWludFNldC0+YWRkKAogICAgICAgICAiTyIs
ICJPdXRwdXQiLAotICAgICAgICBbXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yKSB7Ci0gICAg
ICAgICAgICBWTSYgdm0gPSBzbG90VmlzaXRvci52bSgpOworICAgICAgICBbXSAoQWJzdHJhY3RT
bG90VmlzaXRvciYgdmlzaXRvcikgeworICAgICAgICAgICAgVk0mIHZtID0gdmlzaXRvci52bSgp
OwogCi0gICAgICAgICAgICBhdXRvIGNhbGxPdXRwdXRDb25zdHJhaW50ID0gW10gKFNsb3RWaXNp
dG9yJiBzbG90VmlzaXRvciwgSGVhcENlbGwqIGhlYXBDZWxsLCBIZWFwQ2VsbDo6S2luZCkgewot
ICAgICAgICAgICAgICAgIFNldFJvb3RNYXJrUmVhc29uU2NvcGUgcm9vdFNjb3BlKHNsb3RWaXNp
dG9yLCBTbG90VmlzaXRvcjo6Um9vdE1hcmtSZWFzb246Ok91dHB1dCk7Ci0gICAgICAgICAgICAg
ICAgVk0mIHZtID0gc2xvdFZpc2l0b3Iudm0oKTsKKyAgICAgICAgICAgIGF1dG8gY2FsbE91dHB1
dENvbnN0cmFpbnQgPSBbXSAoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvciwgSGVhcENlbGwq
IGhlYXBDZWxsLCBIZWFwQ2VsbDo6S2luZCkgeworICAgICAgICAgICAgICAgIFNldFJvb3RNYXJr
UmVhc29uU2NvcGUgcm9vdFNjb3BlKHZpc2l0b3IsIEFic3RyYWN0U2xvdFZpc2l0b3I6OlJvb3RN
YXJrUmVhc29uOjpPdXRwdXQpOworICAgICAgICAgICAgICAgIFZNJiB2bSA9IHZpc2l0b3Iudm0o
KTsKICAgICAgICAgICAgICAgICBKU0NlbGwqIGNlbGwgPSBzdGF0aWNfY2FzdDxKU0NlbGwqPiho
ZWFwQ2VsbCk7Ci0gICAgICAgICAgICAgICAgY2VsbC0+bWV0aG9kVGFibGUodm0pLT52aXNpdE91
dHB1dENvbnN0cmFpbnRzKGNlbGwsIHNsb3RWaXNpdG9yKTsKKyAgICAgICAgICAgICAgICBjZWxs
LT5tZXRob2RUYWJsZSh2bSktPnZpc2l0T3V0cHV0Q29uc3RyYWludHMoY2VsbCwgdmlzaXRvcik7
CiAgICAgICAgICAgICB9OwogICAgICAgICAgICAgCiAgICAgICAgICAgICBhdXRvIGFkZCA9IFsm
XSAoYXV0byYgc2V0KSB7Ci0gICAgICAgICAgICAgICAgc2xvdFZpc2l0b3IuYWRkUGFyYWxsZWxD
b25zdHJhaW50VGFzayhzZXQuZm9yRWFjaE1hcmtlZENlbGxJblBhcmFsbGVsKGNhbGxPdXRwdXRD
b25zdHJhaW50KSk7CisgICAgICAgICAgICAgICAgdmlzaXRvci5hZGRQYXJhbGxlbENvbnN0cmFp
bnRUYXNrKHNldC5mb3JFYWNoTWFya2VkQ2VsbEluUGFyYWxsZWwoY2FsbE91dHB1dENvbnN0cmFp
bnQpKTsKICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGFkZCh2bS5l
eGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlc1dpdGhDb25zdHJhaW50cyk7CkBAIC0yODMyLDIyICsy
ODMzLDIyIEBAIHZvaWQgSGVhcDo6YWRkQ29yZUNvbnN0cmFpbnRzKCkKICAgICBpZiAoT3B0aW9u
czo6dXNlSklUKCkpIHsKICAgICAgICAgbV9jb25zdHJhaW50U2V0LT5hZGQoCiAgICAgICAgICAg
ICAiRHciLCAiREZHIFdvcmtsaXN0cyIsCi0gICAgICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9y
JiBzbG90VmlzaXRvcikgewotICAgICAgICAgICAgICAgIFNldFJvb3RNYXJrUmVhc29uU2NvcGUg
cm9vdFNjb3BlKHNsb3RWaXNpdG9yLCBTbG90VmlzaXRvcjo6Um9vdE1hcmtSZWFzb246OkRGR1dv
cmtMaXN0cyk7CisgICAgICAgICAgICBbdGhpc10gKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0
b3IpIHsKKyAgICAgICAgICAgICAgICBTZXRSb290TWFya1JlYXNvblNjb3BlIHJvb3RTY29wZSh2
aXNpdG9yLCBBYnN0cmFjdFNsb3RWaXNpdG9yOjpSb290TWFya1JlYXNvbjo6REZHV29ya0xpc3Rz
KTsKIAogICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IERGRzo6bnVtYmVyT2ZXb3Jr
bGlzdHMoKTsgaS0tOykKLSAgICAgICAgICAgICAgICAgICAgREZHOjpleGlzdGluZ1dvcmtsaXN0
Rm9ySW5kZXgoaSkudmlzaXRXZWFrUmVmZXJlbmNlcyhzbG90VmlzaXRvcik7CisgICAgICAgICAg
ICAgICAgICAgIERGRzo6ZXhpc3RpbmdXb3JrbGlzdEZvckluZGV4KGkpLnZpc2l0V2Vha1JlZmVy
ZW5jZXModmlzaXRvcik7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgLy8gRklY
TUU6IFRoaXMgaXMgYWxtb3N0IGNlcnRhaW5seSB1bm5lY2Vzc2FyeS4KICAgICAgICAgICAgICAg
ICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY2ODI5CiAgICAg
ICAgICAgICAgICAgREZHOjppdGVyYXRlQ29kZUJsb2Nrc0ZvckdDKAogICAgICAgICAgICAgICAg
ICAgICBtX3ZtLAogICAgICAgICAgICAgICAgICAgICBbJl0gKENvZGVCbG9jayogY29kZUJsb2Nr
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzbG90VmlzaXRvci5hcHBlbmRVbmJhcnJpZXJl
ZChjb2RlQmxvY2spOworICAgICAgICAgICAgICAgICAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJh
cnJpZXJlZChjb2RlQmxvY2spOwogICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAg
ICAgICAKICAgICAgICAgICAgICAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSA9PSBHQ0xvZ2dpbmc6
OlZlcmJvc2UpCi0gICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIkRGRyBXb3JrbGlzdHM6XG4i
LCBzbG90VmlzaXRvcik7CisgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIkRGRyBXb3JrbGlz
dHM6XG4iLCB2aXNpdG9yKTsKICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICBDb25zdHJhaW50
Vm9sYXRpbGl0eTo6R3JleWVkQnlNYXJraW5nKTsKICAgICB9CkBAIC0yODU1LDE0ICsyODU2LDE0
IEBAIHZvaWQgSGVhcDo6YWRkQ29yZUNvbnN0cmFpbnRzKCkKICAgICAKICAgICBtX2NvbnN0cmFp
bnRTZXQtPmFkZCgKICAgICAgICAgIkNiIiwgIkNvZGVCbG9ja3MiLAotICAgICAgICBbdGhpc10g
KFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvcikgewotICAgICAgICAgICAgU2V0Um9vdE1hcmtSZWFz
b25TY29wZSByb290U2NvcGUoc2xvdFZpc2l0b3IsIFNsb3RWaXNpdG9yOjpSb290TWFya1JlYXNv
bjo6Q29kZUJsb2Nrcyk7CisgICAgICAgIFt0aGlzXSAoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlz
aXRvcikgeworICAgICAgICAgICAgU2V0Um9vdE1hcmtSZWFzb25TY29wZSByb290U2NvcGUodmlz
aXRvciwgQWJzdHJhY3RTbG90VmlzaXRvcjo6Um9vdE1hcmtSZWFzb246OkNvZGVCbG9ja3MpOwog
ICAgICAgICAgICAgaXRlcmF0ZUV4ZWN1dGluZ0FuZENvbXBpbGluZ0NvZGVCbG9ja3NXaXRob3V0
SG9sZGluZ0xvY2tzKAogICAgICAgICAgICAgICAgIFsmXSAoQ29kZUJsb2NrKiBjb2RlQmxvY2sp
IHsKICAgICAgICAgICAgICAgICAgICAgLy8gVmlzaXQgdGhlIENvZGVCbG9jayBhcyBhIGNvbnN0
cmFpbnQgb25seSBpZiBpdCdzIGJsYWNrLgogICAgICAgICAgICAgICAgICAgICBpZiAoaXNNYXJr
ZWQoY29kZUJsb2NrKQogICAgICAgICAgICAgICAgICAgICAgICAgJiYgY29kZUJsb2NrLT5jZWxs
U3RhdGUoKSA9PSBDZWxsU3RhdGU6OlBvc3NpYmx5QmxhY2spCi0gICAgICAgICAgICAgICAgICAg
ICAgICBzbG90VmlzaXRvci52aXNpdEFzQ29uc3RyYWludChjb2RlQmxvY2spOworICAgICAgICAg
ICAgICAgICAgICAgICAgdmlzaXRvci52aXNpdEFzQ29uc3RyYWludChjb2RlQmxvY2spOwogICAg
ICAgICAgICAgICAgIH0pOwogICAgICAgICB9LAogICAgICAgICBDb25zdHJhaW50Vm9sYXRpbGl0
eTo6U2VsZG9tR3JleWVkKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0lzb0Nl
bGxTZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Jc29DZWxs
U2V0LmgJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0lz
b0NlbGxTZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsNyBAQAogCiBuYW1lc3BhY2Ug
SlNDIHsKIAorY2xhc3MgQWJzdHJhY3RTbG90VmlzaXRvcjsKIGNsYXNzIEhlYXBDZWxsOwogY2xh
c3MgSXNvU3Vic3BhY2U7CiAKQEAgLTU5LDcgKzYwLDcgQEAgcHVibGljOgogICAgIHZvaWQgZm9y
RWFjaE1hcmtlZENlbGwoY29uc3QgRnVuYyYpOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVu
Yz4KLSAgICBSZWY8U2hhcmVkVGFzazx2b2lkKFNsb3RWaXNpdG9yJik+PiBmb3JFYWNoTWFya2Vk
Q2VsbEluUGFyYWxsZWwoY29uc3QgRnVuYyYpOworICAgIFJlZjxTaGFyZWRUYXNrPHZvaWQoQWJz
dHJhY3RTbG90VmlzaXRvciYpPj4gZm9yRWFjaE1hcmtlZENlbGxJblBhcmFsbGVsKGNvbnN0IEZ1
bmMmKTsKICAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgogICAgIHZvaWQgZm9yRWFj
aExpdmVDZWxsKGNvbnN0IEZ1bmMmKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0lzb0NlbGxTZXRJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvSXNvQ2VsbFNldElubGluZXMuaAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvSXNvQ2VsbFNldElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAt
OTIsOSArOTIsOSBAQCB2b2lkIElzb0NlbGxTZXQ6OmZvckVhY2hNYXJrZWRDZWxsKGNvbnN0CiB9
CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+Ci1SZWY8U2hhcmVkVGFzazx2b2lkKFNsb3RWaXNp
dG9yJik+PiBJc29DZWxsU2V0Ojpmb3JFYWNoTWFya2VkQ2VsbEluUGFyYWxsZWwoY29uc3QgRnVu
YyYgZnVuYykKK1JlZjxTaGFyZWRUYXNrPHZvaWQoQWJzdHJhY3RTbG90VmlzaXRvciYpPj4gSXNv
Q2VsbFNldDo6Zm9yRWFjaE1hcmtlZENlbGxJblBhcmFsbGVsKGNvbnN0IEZ1bmMmIGZ1bmMpCiB7
Ci0gICAgY2xhc3MgVGFzayBmaW5hbCA6IHB1YmxpYyBTaGFyZWRUYXNrPHZvaWQoU2xvdFZpc2l0
b3ImKT4geworICAgIGNsYXNzIFRhc2sgZmluYWwgOiBwdWJsaWMgU2hhcmVkVGFzazx2b2lkKEFi
c3RyYWN0U2xvdFZpc2l0b3ImKT4gewogICAgIHB1YmxpYzoKICAgICAgICAgVGFzayhJc29DZWxs
U2V0JiBzZXQsIGNvbnN0IEZ1bmMmIGZ1bmMpCiAgICAgICAgICAgICA6IG1fc2V0KHNldCkKQEAg
LTEwMyw3ICsxMDMsNyBAQCBSZWY8U2hhcmVkVGFzazx2b2lkKFNsb3RWaXNpdG9yJik+PiBJc29D
CiAgICAgICAgIHsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgdm9pZCBydW4oU2xvdFZp
c2l0b3ImIHZpc2l0b3IpIGZpbmFsCisgICAgICAgIHZvaWQgcnVuKEFic3RyYWN0U2xvdFZpc2l0
b3ImIHZpc2l0b3IpIGZpbmFsCiAgICAgICAgIHsKICAgICAgICAgICAgIHdoaWxlIChNYXJrZWRC
bG9jazo6SGFuZGxlKiBoYW5kbGUgPSBtX2Jsb2NrU291cmNlLT5ydW4oKSkgewogICAgICAgICAg
ICAgICAgIHVuc2lnbmVkIGJsb2NrSW5kZXggPSBoYW5kbGUtPmluZGV4KCk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9KSVRTdHViUm91dGluZVNldC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSklUU3R1YlJvdXRpbmVTZXQuY3BwCShyZXZp
c2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9KSVRTdHViUm91dGlu
ZVNldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyOCwxNyArMTI4LDIyIEBAIHZvaWQgSklUU3R1
YlJvdXRpbmVTZXQ6OmRlbGV0ZVVubWFya2VkSmUKICAgICBtX3JvdXRpbmVzLnNocmluayhkc3RJ
bmRleCk7CiB9CiAKLXZvaWQgSklUU3R1YlJvdXRpbmVTZXQ6OnRyYWNlTWFya2VkU3R1YlJvdXRp
bmVzKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy90ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgor
Ly92b2lkIEpJVFN0dWJSb3V0aW5lU2V0Ojp0cmFjZU1hcmtlZFN0dWJSb3V0aW5lcyhWaXNpdG9y
JiB2aXNpdG9yKQordm9pZCBKSVRTdHViUm91dGluZVNldDo6dHJhY2VNYXJrZWRTdHViUm91dGlu
ZXMxKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgZm9yIChhdXRvJiBlbnRy
eSA6IG1fcm91dGluZXMpIHsKICAgICAgICAgR0NBd2FyZUpJVFN0dWJSb3V0aW5lKiByb3V0aW5l
ID0gZW50cnkucm91dGluZTsKICAgICAgICAgaWYgKCFyb3V0aW5lLT5tX21heUJlRXhlY3V0aW5n
KQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIAotICAgICAgICByb3V0aW5lLT5tYXJr
UmVxdWlyZWRPYmplY3RzKHZpc2l0b3IpOworICAgICAgICByb3V0aW5lLT5tYXJrUmVxdWlyZWRP
YmplY3RzMSh2aXNpdG9yKTsKICAgICB9CiB9CiAKKy8vdGVtcGxhdGUgdm9pZCBKSVRTdHViUm91
dGluZVNldDo6dHJhY2VNYXJrZWRTdHViUm91dGluZXMoU2xvdFZpc2l0b3ImKTsKKy8vdGVtcGxh
dGUgdm9pZCBKSVRTdHViUm91dGluZVNldDo6dHJhY2VNYXJrZWRTdHViUm91dGluZXMoRGVidWdT
bG90VmlzaXRvciYpOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIEVOQUJMRShK
SVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9KSVRTdHViUm91dGluZVNldC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0pJVFN0dWJSb3V0aW5l
U2V0LmgJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0pJ
VFN0dWJSb3V0aW5lU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDggKzM1LDkgQEAgdXNpbmcg
V1RGOjpSYW5nZTsKIAogbmFtZXNwYWNlIEpTQyB7CiAKK2NsYXNzIEFic3RyYWN0U2xvdFZpc2l0
b3I7CiBjbGFzcyBHQ0F3YXJlSklUU3R1YlJvdXRpbmU7Ci1jbGFzcyBTbG90VmlzaXRvcjsKKy8v
Y2xhc3MgU2xvdFZpc2l0b3I7CiAKICNpZiBFTkFCTEUoSklUKQogCkBAIC02Myw4ICs2NCw5IEBA
IHB1YmxpYzoKICAgICB2b2lkIHByZXBhcmVGb3JDb25zZXJ2YXRpdmVTY2FuKCk7CiAgICAgCiAg
ICAgdm9pZCBkZWxldGVVbm1hcmtlZEpldHRpc29uZWRTdHViUm91dGluZXMoKTsKLSAgICAKLSAg
ICB2b2lkIHRyYWNlTWFya2VkU3R1YlJvdXRpbmVzKFNsb3RWaXNpdG9yJik7CisKKy8vICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgdHJhY2VNYXJrZWRTdHViUm91dGluZXMoVmlz
aXRvciYpOworICAgIHZvaWQgdHJhY2VNYXJrZWRTdHViUm91dGluZXMxKEFic3RyYWN0U2xvdFZp
c2l0b3ImKTsKICAgICAKIHByaXZhdGU6CiAgICAgdm9pZCBtYXJrU2xvdyh1aW50cHRyX3QgYWRk
cmVzcyk7CkBAIC05Miw3ICs5NCw4IEBAIHB1YmxpYzoKICAgICB2b2lkIG1hcmsodm9pZCopIHsg
fQogICAgIHZvaWQgcHJlcGFyZUZvckNvbnNlcnZhdGl2ZVNjYW4oKSB7IH0KICAgICB2b2lkIGRl
bGV0ZVVubWFya2VkSmV0dGlzb25lZFN0dWJSb3V0aW5lcygpIHsgfQotICAgIHZvaWQgdHJhY2VN
YXJrZWRTdHViUm91dGluZXMoU2xvdFZpc2l0b3ImKSB7IH0KKy8vICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFZpc2l0b3I+IHZvaWQgdHJhY2VNYXJrZWRTdHViUm91dGluZXMoVmlzaXRvciYpIHsgfQor
ICAgIHZvaWQgdHJhY2VNYXJrZWRTdHViUm91dGluZXMxKEFic3RyYWN0U2xvdFZpc2l0b3ImKSB7
IH0KIH07CiAKICNlbmRpZiAvLyAhRU5BQkxFKEpJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL01hcmtTdGFja01lcmdpbmdDb25zdHJhaW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludC5jcHAJ
KHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtTdGFj
a01lcmdpbmdDb25zdHJhaW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUsNyArMjUsNiBAQAog
CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFp
bnQuaCIKLQogI2luY2x1ZGUgIkdDU2VnbWVudGVkQXJyYXlJbmxpbmVzLmgiCiAjaW5jbHVkZSAi
SlNDSW5saW5lcy5oIgogCkBAIC00MSwxMiArNDAsMTIgQEAgTWFya1N0YWNrTWVyZ2luZ0NvbnN0
cmFpbnQ6On5NYXJrU3RhY2tNZQogewogfQogCi1kb3VibGUgTWFya1N0YWNrTWVyZ2luZ0NvbnN0
cmFpbnQ6OnF1aWNrV29ya0VzdGltYXRlKFNsb3RWaXNpdG9yJikKK2RvdWJsZSBNYXJrU3RhY2tN
ZXJnaW5nQ29uc3RyYWludDo6cXVpY2tXb3JrRXN0aW1hdGUoQWJzdHJhY3RTbG90VmlzaXRvciYp
CiB7CiAgICAgcmV0dXJuIG1faGVhcC5tX211dGF0b3JNYXJrU3RhY2stPnNpemUoKSArIG1faGVh
cC5tX3JhY2VNYXJrU3RhY2stPnNpemUoKTsKIH0KIAotdm9pZCBNYXJrU3RhY2tNZXJnaW5nQ29u
c3RyYWludDo6cHJlcGFyZVRvRXhlY3V0ZUltcGwoY29uc3QgQWJzdHJhY3RMb2NrZXImLCBTbG90
VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQ6OnByZXBh
cmVUb0V4ZWN1dGVJbXBsKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgQWJzdHJhY3RTbG90VmlzaXRv
ciYgdmlzaXRvcikKIHsKICAgICAvLyBMb2dnaW5nIHRoZSB3b3JrIGhlcmUgZW5zdXJlcyB0aGF0
IHRoZSBjb25zdHJhaW50IHNvbHZlciBrbm93cyB0aGF0IGl0IGRvZXNuJ3QgbmVlZCB0byBwcm9k
dWNlCiAgICAgLy8gYW55bW9yZSB3b3JrLgpAQCAtNTYsNyArNTUsNyBAQCB2b2lkIE1hcmtTdGFj
a01lcmdpbmdDb25zdHJhaW50OjpwcmVwYXJlCiAgICAgZGF0YUxvZ0lmKE9wdGlvbnM6OmxvZ0dD
KCksICIoIiwgc2l6ZSwgIikiKTsKIH0KIAotdm9pZCBNYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWlu
dDo6ZXhlY3V0ZUltcGwoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIE1hcmtTdGFja01lcmdp
bmdDb25zdHJhaW50OjpleGVjdXRlSW1wbChBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQog
ewogICAgIG1faGVhcC5tX211dGF0b3JNYXJrU3RhY2stPnRyYW5zZmVyVG8odmlzaXRvci5tdXRh
dG9yTWFya1N0YWNrKCkpOwogICAgIG1faGVhcC5tX3JhY2VNYXJrU3RhY2stPnRyYW5zZmVyVG8o
dmlzaXRvci5tdXRhdG9yTWFya1N0YWNrKCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludC5oCShyZXZpc2lv
biAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3RhY2tNZXJnaW5n
Q29uc3RyYWludC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCwxOCArMzAsMTggQEAKIG5hbWVzcGFj
ZSBKU0MgewogCiBjbGFzcyBIZWFwOwotY2xhc3MgU2xvdFZpc2l0b3I7CitjbGFzcyBBYnN0cmFj
dFNsb3RWaXNpdG9yOwogCiBjbGFzcyBNYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludCBmaW5hbCA6
IHB1YmxpYyBNYXJraW5nQ29uc3RyYWludCB7CiBwdWJsaWM6CiAgICAgTWFya1N0YWNrTWVyZ2lu
Z0NvbnN0cmFpbnQoSGVhcCYpOwogICAgIH5NYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludCgpIGZp
bmFsOwogICAgIAotICAgIGRvdWJsZSBxdWlja1dvcmtFc3RpbWF0ZShTbG90VmlzaXRvciYpIGZp
bmFsOworICAgIGRvdWJsZSBxdWlja1dvcmtFc3RpbWF0ZShBYnN0cmFjdFNsb3RWaXNpdG9yJikg
ZmluYWw7CiAgICAgCiBwcml2YXRlOgotICAgIHZvaWQgcHJlcGFyZVRvRXhlY3V0ZUltcGwoY29u
c3QgQWJzdHJhY3RMb2NrZXImIGNvbnN0cmFpbnRTb2x2aW5nTG9ja2VyLCBTbG90VmlzaXRvciYp
IGZpbmFsOwotICAgIHZvaWQgZXhlY3V0ZUltcGwoU2xvdFZpc2l0b3ImKSBmaW5hbDsKKyAgICB2
b2lkIHByZXBhcmVUb0V4ZWN1dGVJbXBsKGNvbnN0IEFic3RyYWN0TG9ja2VyJiBjb25zdHJhaW50
U29sdmluZ0xvY2tlciwgQWJzdHJhY3RTbG90VmlzaXRvciYpIGZpbmFsOworICAgIHZvaWQgZXhl
Y3V0ZUltcGwoQWJzdHJhY3RTbG90VmlzaXRvciYpIGZpbmFsOwogICAgIAogICAgIEhlYXAmIG1f
aGVhcDsKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmgJ
KHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJs
b2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTE1MSw3ICsxNTEsOCBAQCBwdWJsaWM6CiAgICAgICAg
IAogICAgICAgICB2b2lkIHNocmluaygpOwogICAgICAgICAgICAgCi0gICAgICAgIHZvaWQgdmlz
aXRXZWFrU2V0KFNsb3RWaXNpdG9yJik7CisvLyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlz
aXRvcj4gdm9pZCB2aXNpdFdlYWtTZXQoVmlzaXRvciYpOworICAgICAgICB2b2lkIHZpc2l0V2Vh
a1NldDEoQWJzdHJhY3RTbG90VmlzaXRvciYpOwogICAgICAgICB2b2lkIHJlYXBXZWFrU2V0KCk7
CiAgICAgICAgICAgICAKICAgICAgICAgLy8gV2hpbGUgYWxsb2NhdGluZyBmcm9tIGEgZnJlZSBs
aXN0LCBNYXJrZWRCbG9jayB0ZW1wb3JhcmlseSBoYXMgYm9ndXMKQEAgLTQ5OCw5ICs0OTksMTEg
QEAgaW5saW5lIHZvaWQgTWFya2VkQmxvY2s6OkhhbmRsZTo6c2hyaW5rKAogICAgIG1fd2Vha1Nl
dC5zaHJpbmsoKTsKIH0KIAotaW5saW5lIHZvaWQgTWFya2VkQmxvY2s6OkhhbmRsZTo6dmlzaXRX
ZWFrU2V0KFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy90ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
PgorLy9pbmxpbmUgdm9pZCBNYXJrZWRCbG9jazo6SGFuZGxlOjp2aXNpdFdlYWtTZXQoVmlzaXRv
ciYgdmlzaXRvcikKK2lubGluZSB2b2lkIE1hcmtlZEJsb2NrOjpIYW5kbGU6OnZpc2l0V2Vha1Nl
dDEoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKLSAgICByZXR1cm4gbV93ZWFrU2V0
LnZpc2l0KHZpc2l0b3IpOworICAgIHJldHVybiBtX3dlYWtTZXQudmlzaXQxKHZpc2l0b3IpOwog
fQogCiBpbmxpbmUgdm9pZCBNYXJrZWRCbG9jazo6SGFuZGxlOjpyZWFwV2Vha1NldCgpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRTcGFjZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkU3BhY2UuY3BwCShyZXZpc2lvbiAy
NzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRTcGFjZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI3MiwxMCArMjcyLDEwIEBAIHZvaWQgTWFya2VkU3BhY2U6OmVuYWJs
ZVByZWNpc2VBbGxvY2F0aW8KICAgICAgICAgbV9wcmVjaXNlQWxsb2NhdGlvblNldC0+YWRkKGFs
bG9jYXRpb24tPmNlbGwoKSk7CiB9CiAKLXZvaWQgTWFya2VkU3BhY2U6OnZpc2l0V2Vha1NldHMo
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIE1hcmtlZFNwYWNlOjp2aXNpdFdlYWtTZXRzMShB
YnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGF1dG8gdmlzaXQgPSBbJl0gKFdl
YWtTZXQqIHdlYWtTZXQpIHsKLSAgICAgICAgd2Vha1NldC0+dmlzaXQodmlzaXRvcik7CisgICAg
ICAgIHdlYWtTZXQtPnZpc2l0MSh2aXNpdG9yKTsKICAgICB9OwogICAgIAogICAgIG1fbmV3QWN0
aXZlV2Vha1NldHMuZm9yRWFjaCh2aXNpdCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9NYXJrZWRTcGFjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL01hcmtlZFNwYWNlLmgJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL01hcmtlZFNwYWNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDYgKzM3LDcgQEAK
IAogbmFtZXNwYWNlIEpTQyB7CiAKK2NsYXNzIEFic3RyYWN0U2xvdFZpc2l0b3I7IC8vIG1sYW0g
RklYTUUgPwogY2xhc3MgQ29tcGxldGVTdWJzcGFjZTsKIGNsYXNzIEhlYXA7CiBjbGFzcyBIZWFw
Q2VsbDsKQEAgLTEwNSw3ICsxMDYsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgdm9pZCBwcmVwYXJl
Rm9yQWxsb2NhdGlvbigpOwogCi0gICAgdm9pZCB2aXNpdFdlYWtTZXRzKFNsb3RWaXNpdG9yJik7
CisgICAgdm9pZCB2aXNpdFdlYWtTZXRzMShBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAgICAgdm9p
ZCByZWFwV2Vha1NldHMoKTsKIAogICAgIE1hcmtlZEJsb2NrU2V0JiBibG9ja3MoKSB7IHJldHVy
biBtX2Jsb2NrczsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0Nv
bnN0cmFpbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01h
cmtpbmdDb25zdHJhaW50LmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2
ICsyNiw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiTWFya2luZ0NvbnN0cmFp
bnQuaCIKIAorI2luY2x1ZGUgIkFic3RyYWN0U2xvdFZpc2l0b3JJbmxpbmVzLmgiCiAjaW5jbHVk
ZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIlZpc2l0Q291bnRlci5oIgogCkBAIC01MSw3ICs1
Miw3IEBAIHZvaWQgTWFya2luZ0NvbnN0cmFpbnQ6OnJlc2V0U3RhdHMoKQogICAgIG1fbGFzdFZp
c2l0Q291bnQgPSAwOwogfQogCi12b2lkIE1hcmtpbmdDb25zdHJhaW50OjpleGVjdXRlKFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQordm9pZCBNYXJraW5nQ29uc3RyYWludDo6ZXhlY3V0ZShBYnN0cmFj
dFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFZpc2l0Q291bnRlciB2aXNpdENvdW50ZXIo
dmlzaXRvcik7CiAgICAgZXhlY3V0ZUltcGwodmlzaXRvcik7CkBAIC02MCwxNyArNjEsMTcgQEAg
dm9pZCBNYXJraW5nQ29uc3RyYWludDo6ZXhlY3V0ZShTbG90VmlzaQogICAgICAgICBkYXRhTG9n
KCIoIiwgYWJicmV2aWF0ZWROYW1lKCksICIgdmlzaXRlZCAiLCB2aXNpdENvdW50ZXIudmlzaXRD
b3VudCgpLCAiIGluIGV4ZWN1dGUpIik7CiB9CiAKLWRvdWJsZSBNYXJraW5nQ29uc3RyYWludDo6
cXVpY2tXb3JrRXN0aW1hdGUoU2xvdFZpc2l0b3ImKQorZG91YmxlIE1hcmtpbmdDb25zdHJhaW50
OjpxdWlja1dvcmtFc3RpbWF0ZShBYnN0cmFjdFNsb3RWaXNpdG9yJikKIHsKICAgICByZXR1cm4g
MDsKIH0KIAotZG91YmxlIE1hcmtpbmdDb25zdHJhaW50Ojp3b3JrRXN0aW1hdGUoU2xvdFZpc2l0
b3ImIHZpc2l0b3IpCitkb3VibGUgTWFya2luZ0NvbnN0cmFpbnQ6OndvcmtFc3RpbWF0ZShBYnN0
cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHJldHVybiBsYXN0VmlzaXRDb3VudCgp
ICsgcXVpY2tXb3JrRXN0aW1hdGUodmlzaXRvcik7CiB9CiAKLXZvaWQgTWFya2luZ0NvbnN0cmFp
bnQ6OnByZXBhcmVUb0V4ZWN1dGUoY29uc3QgQWJzdHJhY3RMb2NrZXImIGNvbnN0cmFpbnRTb2x2
aW5nTG9ja2VyLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgTWFya2luZ0NvbnN0cmFpbnQ6
OnByZXBhcmVUb0V4ZWN1dGUoY29uc3QgQWJzdHJhY3RMb2NrZXImIGNvbnN0cmFpbnRTb2x2aW5n
TG9ja2VyLCBBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGRhdGFMb2dJZihP
cHRpb25zOjpsb2dHQygpLCBhYmJyZXZpYXRlZE5hbWUoKSk7CiAgICAgVmlzaXRDb3VudGVyIHZp
c2l0Q291bnRlcih2aXNpdG9yKTsKQEAgLTgwLDcgKzgxLDcgQEAgdm9pZCBNYXJraW5nQ29uc3Ry
YWludDo6cHJlcGFyZVRvRXhlY3V0ZQogICAgICAgICBkYXRhTG9nKCIoIiwgYWJicmV2aWF0ZWRO
YW1lKCksICIgdmlzaXRlZCAiLCB2aXNpdENvdW50ZXIudmlzaXRDb3VudCgpLCAiIGluIHByZXBh
cmVUb0V4ZWN1dGUpIik7CiB9CiAKLXZvaWQgTWFya2luZ0NvbnN0cmFpbnQ6OmRvUGFyYWxsZWxX
b3JrKFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBTaGFyZWRUYXNrPHZvaWQoU2xvdFZpc2l0b3ImKT4m
IHRhc2spCit2b2lkIE1hcmtpbmdDb25zdHJhaW50Ojpkb1BhcmFsbGVsV29yayhBYnN0cmFjdFNs
b3RWaXNpdG9yJiB2aXNpdG9yLCBTaGFyZWRUYXNrPHZvaWQoQWJzdHJhY3RTbG90VmlzaXRvciYp
PiYgdGFzaykKIHsKICAgICBWaXNpdENvdW50ZXIgdmlzaXRDb3VudGVyKHZpc2l0b3IpOwogICAg
IHRhc2sucnVuKHZpc2l0b3IpOwpAQCAtOTIsNyArOTMsNyBAQCB2b2lkIE1hcmtpbmdDb25zdHJh
aW50Ojpkb1BhcmFsbGVsV29yayhTCiAgICAgfQogfQogCi12b2lkIE1hcmtpbmdDb25zdHJhaW50
OjpwcmVwYXJlVG9FeGVjdXRlSW1wbChjb25zdCBBYnN0cmFjdExvY2tlciYsIFNsb3RWaXNpdG9y
JikKK3ZvaWQgTWFya2luZ0NvbnN0cmFpbnQ6OnByZXBhcmVUb0V4ZWN1dGVJbXBsKGNvbnN0IEFi
c3RyYWN0TG9ja2VyJiwgQWJzdHJhY3RTbG90VmlzaXRvciYpCiB7CiB9CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnQuaAkocmV2aXNpb24g
MjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnQu
aAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyArMzgsNyBAQAogbmFtZXNwYWNlIEpTQyB7CiAKIGNs
YXNzIE1hcmtpbmdDb25zdHJhaW50U2V0OwotY2xhc3MgU2xvdFZpc2l0b3I7CitjbGFzcyBBYnN0
cmFjdFNsb3RWaXNpdG9yOwogCiBjbGFzcyBNYXJraW5nQ29uc3RyYWludCB7CiAgICAgV1RGX01B
S0VfTk9OQ09QWUFCTEUoTWFya2luZ0NvbnN0cmFpbnQpOwpAQCAtNjAsMTUgKzYwLDE2IEBAIHB1
YmxpYzoKICAgICAKICAgICBzaXplX3QgbGFzdFZpc2l0Q291bnQoKSBjb25zdCB7IHJldHVybiBt
X2xhc3RWaXNpdENvdW50OyB9CiAgICAgCi0gICAgdm9pZCBleGVjdXRlKFNsb3RWaXNpdG9yJik7
Ci0gICAgCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgdmlydHVhbCBkb3VibGUgcXVpY2tXb3JrRXN0
aW1hdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpOworICAgIHZvaWQgZXhlY3V0ZShBYnN0cmFjdFNs
b3RWaXNpdG9yJik7CisKKyAgICAvLyBGSVhNRSBtbGFtCisgICAgSlNfRVhQT1JUX1BSSVZBVEUg
dmlydHVhbCBkb3VibGUgcXVpY2tXb3JrRXN0aW1hdGUoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlz
aXRvcik7CiAgICAgCi0gICAgZG91YmxlIHdvcmtFc3RpbWF0ZShTbG90VmlzaXRvciYgdmlzaXRv
cik7CisgICAgZG91YmxlIHdvcmtFc3RpbWF0ZShBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9y
KTsKICAgICAKLSAgICB2b2lkIHByZXBhcmVUb0V4ZWN1dGUoY29uc3QgQWJzdHJhY3RMb2NrZXIm
IGNvbnN0cmFpbnRTb2x2aW5nTG9ja2VyLCBTbG90VmlzaXRvciYpOworICAgIHZvaWQgcHJlcGFy
ZVRvRXhlY3V0ZShjb25zdCBBYnN0cmFjdExvY2tlciYgY29uc3RyYWludFNvbHZpbmdMb2NrZXIs
IEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKICAgICAKLSAgICB2b2lkIGRvUGFyYWxsZWxXb3JrKFNs
b3RWaXNpdG9yJiwgU2hhcmVkVGFzazx2b2lkKFNsb3RWaXNpdG9yJik+Jik7CisgICAgdm9pZCBk
b1BhcmFsbGVsV29yayhBYnN0cmFjdFNsb3RWaXNpdG9yJiwgU2hhcmVkVGFzazx2b2lkKEFic3Ry
YWN0U2xvdFZpc2l0b3ImKT4mKTsKICAgICAKICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eSB2b2xh
dGlsaXR5KCkgY29uc3QgeyByZXR1cm4gbV92b2xhdGlsaXR5OyB9CiAgICAgCkBAIC03Niw4ICs3
Nyw4IEBAIHB1YmxpYzoKICAgICBDb25zdHJhaW50UGFyYWxsZWxpc20gcGFyYWxsZWxpc20oKSBj
b25zdCB7IHJldHVybiBtX3BhcmFsbGVsaXNtOyB9CiAKIHByb3RlY3RlZDoKLSAgICB2aXJ0dWFs
IHZvaWQgZXhlY3V0ZUltcGwoU2xvdFZpc2l0b3ImKSA9IDA7Ci0gICAgSlNfRVhQT1JUX1BSSVZB
VEUgdmlydHVhbCB2b2lkIHByZXBhcmVUb0V4ZWN1dGVJbXBsKGNvbnN0IEFic3RyYWN0TG9ja2Vy
JiBjb25zdHJhaW50U29sdmluZ0xvY2tlciwgU2xvdFZpc2l0b3ImKTsKKyAgICB2aXJ0dWFsIHZv
aWQgZXhlY3V0ZUltcGwoQWJzdHJhY3RTbG90VmlzaXRvciYpID0gMDsKKyAgICBKU19FWFBPUlRf
UFJJVkFURSB2aXJ0dWFsIHZvaWQgcHJlcGFyZVRvRXhlY3V0ZUltcGwoY29uc3QgQWJzdHJhY3RM
b2NrZXImIGNvbnN0cmFpbnRTb2x2aW5nTG9ja2VyLCBBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAg
ICAgCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBNYXJraW5nQ29uc3RyYWludFNldDsgLy8g
U28gaXQgY2FuIHNldCBtX2luZGV4LgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
TWFya2luZ0NvbnN0cmFpbnRTZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50U2V0LmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnRTZXQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC02Myw3ICs2Myw3IEBAIHZvaWQgTWFya2luZ0NvbnN0cmFpbnRTZXQ6OmRp
ZFN0YXJ0TWFya2kKICAgICBtX2l0ZXJhdGlvbiA9IDE7CiB9CiAKLXZvaWQgTWFya2luZ0NvbnN0
cmFpbnRTZXQ6OmFkZChDU3RyaW5nIGFiYnJldmlhdGVkTmFtZSwgQ1N0cmluZyBuYW1lLCA6OkZ1
bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3ImKT4gZnVuY3Rpb24sIENvbnN0cmFpbnRWb2xhdGlsaXR5
IHZvbGF0aWxpdHksIENvbnN0cmFpbnRDb25jdXJyZW5jeSBjb25jdXJyZW5jeSwgQ29uc3RyYWlu
dFBhcmFsbGVsaXNtIHBhcmFsbGVsaXNtKQordm9pZCBNYXJraW5nQ29uc3RyYWludFNldDo6YWRk
KENTdHJpbmcgYWJicmV2aWF0ZWROYW1lLCBDU3RyaW5nIG5hbWUsIDo6RnVuY3Rpb248dm9pZChB
YnN0cmFjdFNsb3RWaXNpdG9yJik+IGZ1bmN0aW9uLCBDb25zdHJhaW50Vm9sYXRpbGl0eSB2b2xh
dGlsaXR5LCBDb25zdHJhaW50Q29uY3VycmVuY3kgY29uY3VycmVuY3ksIENvbnN0cmFpbnRQYXJh
bGxlbGlzbSBwYXJhbGxlbGlzbSkKIHsKICAgICBhZGQobWFrZVVuaXF1ZTxTaW1wbGVNYXJraW5n
Q29uc3RyYWludD4oV1RGTW92ZShhYmJyZXZpYXRlZE5hbWUpLCBXVEZNb3ZlKG5hbWUpLCBXVEZN
b3ZlKGZ1bmN0aW9uKSwgdm9sYXRpbGl0eSwgY29uY3VycmVuY3ksIHBhcmFsbGVsaXNtKSk7CiB9
CkBAIC03OCwxNCArNzgsMTQgQEAgdm9pZCBNYXJraW5nQ29uc3RyYWludFNldDo6YWRkKAogICAg
IG1fc2V0LmFwcGVuZChXVEZNb3ZlKGNvbnN0cmFpbnQpKTsKIH0KIAotYm9vbCBNYXJraW5nQ29u
c3RyYWludFNldDo6ZXhlY3V0ZUNvbnZlcmdlbmNlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorYm9v
bCBNYXJraW5nQ29uc3RyYWludFNldDo6ZXhlY3V0ZUNvbnZlcmdlbmNlKEFic3RyYWN0U2xvdFZp
c2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgYm9vbCByZXN1bHQgPSBleGVjdXRlQ29udmVyZ2VuY2VJ
bXBsKHZpc2l0b3IpOwogICAgIGRhdGFMb2dJZihPcHRpb25zOjpsb2dHQygpLCAiICIpOwogICAg
IHJldHVybiByZXN1bHQ7CiB9CiAKLWJvb2wgTWFya2luZ0NvbnN0cmFpbnRTZXQ6OmlzV2F2ZWZy
b250QWR2YW5jaW5nKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorYm9vbCBNYXJraW5nQ29uc3RyYWlu
dFNldDo6aXNXYXZlZnJvbnRBZHZhbmNpbmcoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikK
IHsKICAgICBmb3IgKE1hcmtpbmdDb25zdHJhaW50KiBvdXRncm93dGggOiBtX291dGdyb3d0aHMp
IHsKICAgICAgICAgaWYgKG91dGdyb3d0aC0+d29ya0VzdGltYXRlKHZpc2l0b3IpKQpAQCAtOTQs
NyArOTQsNyBAQCBib29sIE1hcmtpbmdDb25zdHJhaW50U2V0Ojppc1dhdmVmcm9udEFkCiAgICAg
cmV0dXJuIGZhbHNlOwogfQogCi1ib29sIE1hcmtpbmdDb25zdHJhaW50U2V0OjpleGVjdXRlQ29u
dmVyZ2VuY2VJbXBsKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorYm9vbCBNYXJraW5nQ29uc3RyYWlu
dFNldDo6ZXhlY3V0ZUNvbnZlcmdlbmNlSW1wbChBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9y
KQogewogICAgIFN1cGVyU2FtcGxlclNjb3BlIHN1cGVyU2FtcGxlclNjb3BlKGZhbHNlKTsKICAg
ICBNYXJraW5nQ29uc3RyYWludFNvbHZlciBzb2x2ZXIoKnRoaXMpOwpAQCAtMTY2LDcgKzE2Niw3
IEBAIGJvb2wgTWFya2luZ0NvbnN0cmFpbnRTZXQ6OmV4ZWN1dGVDb252ZXIKICAgICByZXR1cm4g
IXNvbHZlci5kaWRWaXNpdFNvbWV0aGluZygpOwogfQogCi12b2lkIE1hcmtpbmdDb25zdHJhaW50
U2V0OjpleGVjdXRlQWxsKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBNYXJraW5nQ29uc3Ry
YWludFNldDo6ZXhlY3V0ZUFsbChBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAg
IGZvciAoYXV0byYgY29uc3RyYWludCA6IG1fc2V0KQogICAgICAgICBjb25zdHJhaW50LT5leGVj
dXRlKHZpc2l0b3IpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0Nv
bnN0cmFpbnRTZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9N
YXJraW5nQ29uc3RyYWludFNldC5oCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludFNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC00
NiwxNCArNDYsMTQgQEAgcHVibGljOgogICAgIHZvaWQgYWRkKAogICAgICAgICBDU3RyaW5nIGFi
YnJldmlhdGVkTmFtZSwKICAgICAgICAgQ1N0cmluZyBuYW1lLAotICAgICAgICA6OkZ1bmN0aW9u
PHZvaWQoU2xvdFZpc2l0b3ImKT4sCisgICAgICAgIDo6RnVuY3Rpb248dm9pZChBYnN0cmFjdFNs
b3RWaXNpdG9yJik+LAogICAgICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eSwKICAgICAgICAgQ29u
c3RyYWludENvbmN1cnJlbmN5ID0gQ29uc3RyYWludENvbmN1cnJlbmN5OjpDb25jdXJyZW50LAog
ICAgICAgICBDb25zdHJhaW50UGFyYWxsZWxpc20gPSBDb25zdHJhaW50UGFyYWxsZWxpc206OlNl
cXVlbnRpYWwpOwogICAgIAogICAgIHZvaWQgYWRkKAogICAgICAgICBDU3RyaW5nIGFiYnJldmlh
dGVkTmFtZSwgQ1N0cmluZyBuYW1lLAotICAgICAgICA6OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0
b3ImKT4gZnVuYywKKyAgICAgICAgOjpGdW5jdGlvbjx2b2lkKEFic3RyYWN0U2xvdFZpc2l0b3Im
KT4gZnVuYywKICAgICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHkgdm9sYXRpbGl0eSwKICAgICAg
ICAgQ29uc3RyYWludFBhcmFsbGVsaXNtIHBhcmFsbGVsaXNtKQogICAgIHsKQEAgLTY0LDIwICs2
NCwyMCBAQCBwdWJsaWM6CiAgICAgCiAgICAgLy8gQXNzdW1pbmcgdGhhdCB0aGUgbWFyayBzdGFj
a3MgYXJlIGFsbCBlbXB0eSwgdGhpcyB3aWxsIGdpdmUgeW91IGEgZ3Vlc3MgYXMgdG8gd2hldGhl
ciBvcgogICAgIC8vIG5vdCB0aGUgd2F2ZWZyb250IGlzIGFkdmFuY2luZy4KLSAgICBib29sIGlz
V2F2ZWZyb250QWR2YW5jaW5nKFNsb3RWaXNpdG9yJik7Ci0gICAgYm9vbCBpc1dhdmVmcm9udFJl
dHJlYXRpbmcoU2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsgcmV0dXJuICFpc1dhdmVmcm9udEFkdmFu
Y2luZyh2aXNpdG9yKTsgfQorICAgIGJvb2wgaXNXYXZlZnJvbnRBZHZhbmNpbmcoQWJzdHJhY3RT
bG90VmlzaXRvciYpOworICAgIGJvb2wgaXNXYXZlZnJvbnRSZXRyZWF0aW5nKEFic3RyYWN0U2xv
dFZpc2l0b3ImIHZpc2l0b3IpIHsgcmV0dXJuICFpc1dhdmVmcm9udEFkdmFuY2luZyh2aXNpdG9y
KTsgfQogICAgIAogICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGlzIGV4ZWN1dGVkIGFsbCBjb25z
dHJhaW50cyBhbmQgbm9uZSBvZiB0aGVtIHByb2R1Y2VkIG5ldyB3b3JrLiBUaGlzCiAgICAgLy8g
YXNzdW1lcyB0aGF0IHlvdSd2ZSBhbHJhZWR5IHZpc2l0ZWQgcm9vdHMgYW5kIGRyYWluZWQgZnJv
bSB0aGVyZS4KLSAgICBib29sIGV4ZWN1dGVDb252ZXJnZW5jZShTbG90VmlzaXRvciYpOworICAg
IGJvb2wgZXhlY3V0ZUNvbnZlcmdlbmNlKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKICAgICAKICAg
ICAvLyBTaW1wbHkgcnVucyBhbGwgY29uc3RyYWludHMgd2l0aG91dCBhbnkgc2hlbmFuaWdhbnMu
Ci0gICAgdm9pZCBleGVjdXRlQWxsKFNsb3RWaXNpdG9yJik7CisgICAgdm9pZCBleGVjdXRlQWxs
KEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKICAgICAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNz
IE1hcmtpbmdDb25zdHJhaW50U29sdmVyOwogICAgIAotICAgIGJvb2wgZXhlY3V0ZUNvbnZlcmdl
bmNlSW1wbChTbG90VmlzaXRvciYpOworICAgIGJvb2wgZXhlY3V0ZUNvbnZlcmdlbmNlSW1wbChB
YnN0cmFjdFNsb3RWaXNpdG9yJik7CiAgICAgCiAgICAgSGVhcCYgbV9oZWFwOwogICAgIEJpdFZl
Y3RvciBtX3VuZXhlY3V0ZWRSb290czsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L01hcmtpbmdDb25zdHJhaW50U29sdmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludFNvbHZlci5jcHAJKHJldmlzaW9uIDI3MTQ0
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50U29sdmVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNyArMzMsNyBAQCBuYW1lc3BhY2UgSlNDIHsgCiAK
IE1hcmtpbmdDb25zdHJhaW50U29sdmVyOjpNYXJraW5nQ29uc3RyYWludFNvbHZlcihNYXJraW5n
Q29uc3RyYWludFNldCYgc2V0KQogICAgIDogbV9oZWFwKHNldC5tX2hlYXApCi0gICAgLCBtX21h
aW5WaXNpdG9yKG1faGVhcC5jb2xsZWN0b3JTbG90VmlzaXRvcigpKQorICAgICwgbV9tYWluVmlz
aXRvcihtX2hlYXAuY29sbGVjdG9yU2xvdFZpc2l0b3IoKSkgLy8gbWxhbSBGSVhNRSBuZWVkIHN1
cHBvcnQgZm9yIERlYnVnU2xvdFZpc2l0b3IKICAgICAsIG1fc2V0KHNldCkKIHsKICAgICBtX2hl
YXAuZm9yRWFjaFNsb3RWaXNpdG9yKApAQCAtMTUwLDEzICsxNTAsMTMgQEAgdm9pZCBNYXJraW5n
Q29uc3RyYWludFNvbHZlcjo6ZXhlY3V0ZShNYQogICAgIG1fZXhlY3V0ZWQuc2V0KGNvbnN0cmFp
bnQuaW5kZXgoKSk7CiB9CiAKLXZvaWQgTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXI6OmFkZFBhcmFs
bGVsVGFzayhSZWZQdHI8U2hhcmVkVGFzazx2b2lkKFNsb3RWaXNpdG9yJik+PiB0YXNrLCBNYXJr
aW5nQ29uc3RyYWludCYgY29uc3RyYWludCkKK3ZvaWQgTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXI6
OmFkZFBhcmFsbGVsVGFzayhSZWZQdHI8U2hhcmVkVGFzazx2b2lkKEFic3RyYWN0U2xvdFZpc2l0
b3ImKT4+IHRhc2ssIE1hcmtpbmdDb25zdHJhaW50JiBjb25zdHJhaW50KQogewogICAgIGF1dG8g
bG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKICAgICBtX3RvRXhlY3V0ZUluUGFyYWxsZWwuYXBw
ZW5kKFRhc2tXaXRoQ29uc3RyYWludChXVEZNb3ZlKHRhc2spLCAmY29uc3RyYWludCkpOwogfQog
Ci12b2lkIE1hcmtpbmdDb25zdHJhaW50U29sdmVyOjpydW5FeGVjdXRpb25UaHJlYWQoU2xvdFZp
c2l0b3ImIHZpc2l0b3IsIFNjaGVkdWxlclByZWZlcmVuY2UgcHJlZmVyZW5jZSwgU2NvcGVkTGFt
YmRhPE9wdGlvbmFsPHVuc2lnbmVkPigpPiBwaWNrTmV4dCkKK3ZvaWQgTWFya2luZ0NvbnN0cmFp
bnRTb2x2ZXI6OnJ1bkV4ZWN1dGlvblRocmVhZChBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9y
LCBTY2hlZHVsZXJQcmVmZXJlbmNlIHByZWZlcmVuY2UsIFNjb3BlZExhbWJkYTxPcHRpb25hbDx1
bnNpZ25lZD4oKT4gcGlja05leHQpCiB7CiAgICAgZm9yICg7OykgewogICAgICAgICBib29sIGRv
UGFyYWxsZWxXb3JrTW9kZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtp
bmdDb25zdHJhaW50U29sdmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXIuaAkocmV2aXNpb24gMjcxNDQzKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXIuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNjUsMTUgKzY1LDE1IEBAIHB1YmxpYzoKICAgICB2b2lkIGV4ZWN1dGUoTWFy
a2luZ0NvbnN0cmFpbnQmKTsKICAgICAKICAgICAvLyBQYXJhbGxlbCBjb25zdHJhaW50cyBjYW4g
YWRkIHBhcmFsbGVsIHRhc2tzLgotICAgIHZvaWQgYWRkUGFyYWxsZWxUYXNrKFJlZlB0cjxTaGFy
ZWRUYXNrPHZvaWQoU2xvdFZpc2l0b3ImKT4+LCBNYXJraW5nQ29uc3RyYWludCYpOworICAgIHZv
aWQgYWRkUGFyYWxsZWxUYXNrKFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoQWJzdHJhY3RTbG90Vmlz
aXRvciYpPj4sIE1hcmtpbmdDb25zdHJhaW50Jik7CiAgICAgCiBwcml2YXRlOgotICAgIHZvaWQg
cnVuRXhlY3V0aW9uVGhyZWFkKFNsb3RWaXNpdG9yJiwgU2NoZWR1bGVyUHJlZmVyZW5jZSwgU2Nv
cGVkTGFtYmRhPE9wdGlvbmFsPHVuc2lnbmVkPigpPiBwaWNrTmV4dCk7CisgICAgdm9pZCBydW5F
eGVjdXRpb25UaHJlYWQoQWJzdHJhY3RTbG90VmlzaXRvciYsIFNjaGVkdWxlclByZWZlcmVuY2Us
IFNjb3BlZExhbWJkYTxPcHRpb25hbDx1bnNpZ25lZD4oKT4gcGlja05leHQpOwogICAgIAogICAg
IHN0cnVjdCBUYXNrV2l0aENvbnN0cmFpbnQgewogICAgICAgICBUYXNrV2l0aENvbnN0cmFpbnQo
KSB7IH0KICAgICAgICAgCi0gICAgICAgIFRhc2tXaXRoQ29uc3RyYWludChSZWZQdHI8U2hhcmVk
VGFzazx2b2lkKFNsb3RWaXNpdG9yJik+PiB0YXNrLCBNYXJraW5nQ29uc3RyYWludCogY29uc3Ry
YWludCkKKyAgICAgICAgVGFza1dpdGhDb25zdHJhaW50KFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQo
QWJzdHJhY3RTbG90VmlzaXRvciYpPj4gdGFzaywgTWFya2luZ0NvbnN0cmFpbnQqIGNvbnN0cmFp
bnQpCiAgICAgICAgICAgICA6IHRhc2soV1RGTW92ZSh0YXNrKSkKICAgICAgICAgICAgICwgY29u
c3RyYWludChjb25zdHJhaW50KQogICAgICAgICB7CkBAIC04NSwxMiArODUsMTIgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgICAgICAmJiBjb25zdHJhaW50ID09IG90aGVyLmNvbnN0cmFpbnQ7CiAg
ICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoU2xvdFZp
c2l0b3ImKT4+IHRhc2s7CisgICAgICAgIFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoQWJzdHJhY3RT
bG90VmlzaXRvciYpPj4gdGFzazsKICAgICAgICAgTWFya2luZ0NvbnN0cmFpbnQqIGNvbnN0cmFp
bnQgeyBudWxscHRyIH07CiAgICAgfTsKICAgICAKICAgICBIZWFwJiBtX2hlYXA7Ci0gICAgU2xv
dFZpc2l0b3ImIG1fbWFpblZpc2l0b3I7CisgICAgQWJzdHJhY3RTbG90VmlzaXRvciYgbV9tYWlu
VmlzaXRvcjsKICAgICBNYXJraW5nQ29uc3RyYWludFNldCYgbV9zZXQ7CiAgICAgQml0VmVjdG9y
IG1fZXhlY3V0ZWQ7CiAgICAgRGVxdWU8VGFza1dpdGhDb25zdHJhaW50LCAzMj4gbV90b0V4ZWN1
dGVJblBhcmFsbGVsOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvUHJlY2lzZUFs
bG9jYXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1By
ZWNpc2VBbGxvY2F0aW9uLmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvUHJlY2lzZUFsbG9jYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDAs
MTEgKzIwMCwxNiBAQCB2b2lkIFByZWNpc2VBbGxvY2F0aW9uOjpzaHJpbmsoKQogICAgIG1fd2Vh
a1NldC5zaHJpbmsoKTsKIH0KIAotdm9pZCBQcmVjaXNlQWxsb2NhdGlvbjo6dmlzaXRXZWFrU2V0
KFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy90ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgorLy92
b2lkIFByZWNpc2VBbGxvY2F0aW9uOjp2aXNpdFdlYWtTZXQoVmlzaXRvciYgdmlzaXRvcikKK3Zv
aWQgUHJlY2lzZUFsbG9jYXRpb246OnZpc2l0V2Vha1NldDEwMDAoQWJzdHJhY3RTbG90VmlzaXRv
ciYgdmlzaXRvcikKIHsKLSAgICBtX3dlYWtTZXQudmlzaXQodmlzaXRvcik7CisgICAgbV93ZWFr
U2V0LnZpc2l0MSh2aXNpdG9yKTsKIH0KIAorLy90ZW1wbGF0ZSB2b2lkIFByZWNpc2VBbGxvY2F0
aW9uOjp2aXNpdFdlYWtTZXQoU2xvdFZpc2l0b3ImKTsKKy8vdGVtcGxhdGUgdm9pZCBQcmVjaXNl
QWxsb2NhdGlvbjo6dmlzaXRXZWFrU2V0KERlYnVnU2xvdFZpc2l0b3ImKTsKKwogdm9pZCBQcmVj
aXNlQWxsb2NhdGlvbjo6cmVhcFdlYWtTZXQoKQogewogICAgIHJldHVybiBtX3dlYWtTZXQucmVh
cCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvUHJlY2lzZUFsbG9jYXRpb24u
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9QcmVjaXNlQWxsb2Nh
dGlvbi5oCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Q
cmVjaXNlQWxsb2NhdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC04Miw3ICs4Miw4IEBAIHB1Ymxp
YzoKICAgICAKICAgICB2b2lkIHNocmluaygpOwogICAgIAotICAgIHZvaWQgdmlzaXRXZWFrU2V0
KFNsb3RWaXNpdG9yJik7CisvLyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIHZp
c2l0V2Vha1NldChWaXNpdG9yJik7CisgICAgdm9pZCB2aXNpdFdlYWtTZXQxMDAwKEFic3RyYWN0
U2xvdFZpc2l0b3ImKTsKICAgICB2b2lkIHJlYXBXZWFrU2V0KCk7CiAgICAgCiAgICAgdm9pZCBj
bGVhck5ld2x5QWxsb2NhdGVkKCkgeyBtX2lzTmV3bHlBbGxvY2F0ZWQgPSBmYWxzZTsgfQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1NpbXBsZU1hcmtpbmdD
b25zdHJhaW50LmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3
ICszMCw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiBTaW1wbGVNYXJraW5nQ29uc3RyYWludDo6U2lt
cGxlTWFya2luZ0NvbnN0cmFpbnQoCiAgICAgQ1N0cmluZyBhYmJyZXZpYXRlZE5hbWUsIENTdHJp
bmcgbmFtZSwKLSAgICA6OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3ImKT4gZXhlY3V0ZUZ1bmN0
aW9uLAorICAgIDo6RnVuY3Rpb248dm9pZChBYnN0cmFjdFNsb3RWaXNpdG9yJik+IGV4ZWN1dGVG
dW5jdGlvbiwKICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eSB2b2xhdGlsaXR5LCBDb25zdHJhaW50
Q29uY3VycmVuY3kgY29uY3VycmVuY3ksCiAgICAgQ29uc3RyYWludFBhcmFsbGVsaXNtIHBhcmFs
bGVsaXNtKQogICAgIDogTWFya2luZ0NvbnN0cmFpbnQoV1RGTW92ZShhYmJyZXZpYXRlZE5hbWUp
LCBXVEZNb3ZlKG5hbWUpLCB2b2xhdGlsaXR5LCBjb25jdXJyZW5jeSwgcGFyYWxsZWxpc20pCkBA
IC00Miw3ICs0Miw3IEBAIFNpbXBsZU1hcmtpbmdDb25zdHJhaW50Ojp+U2ltcGxlTWFya2luZ0MK
IHsKIH0KIAotdm9pZCBTaW1wbGVNYXJraW5nQ29uc3RyYWludDo6ZXhlY3V0ZUltcGwoU2xvdFZp
c2l0b3ImIHZpc2l0b3IpCit2b2lkIFNpbXBsZU1hcmtpbmdDb25zdHJhaW50OjpleGVjdXRlSW1w
bChBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIG1fZXhlY3V0ZUZ1bmN0aW9u
KHZpc2l0b3IpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2ltcGxlTWFy
a2luZ0NvbnN0cmFpbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9TaW1wbGVNYXJraW5nQ29uc3RyYWludC5oCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9TaW1wbGVNYXJraW5nQ29uc3RyYWludC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zNywxNCArMzcsMTQgQEAgY2xhc3MgU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQgZmlu
YWwgOiBwdQogcHVibGljOgogICAgIEpTX0VYUE9SVF9QUklWQVRFIFNpbXBsZU1hcmtpbmdDb25z
dHJhaW50KAogICAgICAgICBDU3RyaW5nIGFiYnJldmlhdGVkTmFtZSwgQ1N0cmluZyBuYW1lLAot
ICAgICAgICA6OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3ImKT4sCisgICAgICAgIDo6RnVuY3Rp
b248dm9pZChBYnN0cmFjdFNsb3RWaXNpdG9yJik+LAogICAgICAgICBDb25zdHJhaW50Vm9sYXRp
bGl0eSwKICAgICAgICAgQ29uc3RyYWludENvbmN1cnJlbmN5ID0gQ29uc3RyYWludENvbmN1cnJl
bmN5OjpDb25jdXJyZW50LAogICAgICAgICBDb25zdHJhaW50UGFyYWxsZWxpc20gPSBDb25zdHJh
aW50UGFyYWxsZWxpc206OlNlcXVlbnRpYWwpOwogICAgIAogICAgIFNpbXBsZU1hcmtpbmdDb25z
dHJhaW50KAogICAgICAgICBDU3RyaW5nIGFiYnJldmlhdGVkTmFtZSwgQ1N0cmluZyBuYW1lLAot
ICAgICAgICA6OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3ImKT4gZnVuYywKKyAgICAgICAgOjpG
dW5jdGlvbjx2b2lkKEFic3RyYWN0U2xvdFZpc2l0b3ImKT4gZnVuYywKICAgICAgICAgQ29uc3Ry
YWludFZvbGF0aWxpdHkgdm9sYXRpbGl0eSwKICAgICAgICAgQ29uc3RyYWludFBhcmFsbGVsaXNt
IHBhcmFsbGVsaXNtKQogICAgICAgICA6IFNpbXBsZU1hcmtpbmdDb25zdHJhaW50KGFiYnJldmlh
dGVkTmFtZSwgbmFtZSwgV1RGTW92ZShmdW5jKSwgdm9sYXRpbGl0eSwgQ29uc3RyYWludENvbmN1
cnJlbmN5OjpDb25jdXJyZW50LCBwYXJhbGxlbGlzbSkKQEAgLTU0LDkgKzU0LDkgQEAgcHVibGlj
OgogICAgIEpTX0VYUE9SVF9QUklWQVRFIH5TaW1wbGVNYXJraW5nQ29uc3RyYWludCgpIGZpbmFs
OwogICAgIAogcHJpdmF0ZToKLSAgICB2b2lkIGV4ZWN1dGVJbXBsKFNsb3RWaXNpdG9yJikgZmlu
YWw7CisgICAgdm9pZCBleGVjdXRlSW1wbChBYnN0cmFjdFNsb3RWaXNpdG9yJikgZmluYWw7CiAK
LSAgICA6OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3ImKT4gbV9leGVjdXRlRnVuY3Rpb247Cisg
ICAgOjpGdW5jdGlvbjx2b2lkKEFic3RyYWN0U2xvdFZpc2l0b3ImKT4gbV9leGVjdXRlRnVuY3Rp
b247CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL1Nsb3RWaXNpdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9TbG90VmlzaXRvci5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiAr
MjYsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlNsb3RWaXNpdG9yLmgiCiAK
KyNpbmNsdWRlICJBYnN0cmFjdFNsb3RWaXNpdG9ySW5saW5lcy5oIgogI2luY2x1ZGUgIkNvbnNl
cnZhdGl2ZVJvb3RzLmgiCiAjaW5jbHVkZSAiR0NTZWdtZW50ZWRBcnJheUlubGluZXMuaCIKICNp
bmNsdWRlICJIZWFwQW5hbHl6ZXIuaCIKQEAgLTM1LDcgKzM2LDcgQEAKICNpbmNsdWRlICJKU0Fy
cmF5LmgiCiAjaW5jbHVkZSAiSlNDZWxsSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTU3RyaW5nLmgi
Ci0jaW5jbHVkZSAiTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXIuaCIKKy8vI2luY2x1ZGUgIk1hcmtp
bmdDb25zdHJhaW50U29sdmVyLmgiCiAjaW5jbHVkZSAiU2xvdFZpc2l0b3JJbmxpbmVzLmgiCiAj
aW5jbHVkZSAiU3RvcElmTmVjZXNzYXJ5VGltZXIuaCIKICNpbmNsdWRlICJWTS5oIgpAQCAtNzcs
MTYgKzc4LDE4IEBAIHN0YXRpYyB2b2lkIHZhbGlkYXRlKEpTQ2VsbCogY2VsbCkKICNlbmRpZgog
CiBTbG90VmlzaXRvcjo6U2xvdFZpc2l0b3IoSGVhcCYgaGVhcCwgQ1N0cmluZyBjb2RlTmFtZSkK
LSAgICA6IG1fYnl0ZXNWaXNpdGVkKDApCi0gICAgLCBtX3Zpc2l0Q291bnQoMCkKKy8vICAgIDog
QmFzZShUeXBlOjpTbG90VmlzaXRvciwgaGVhcCwgY29kZU5hbWUpCisgICAgOiBCYXNlKGhlYXAs
IGNvZGVOYW1lKQorLy8gICAgLCBtX2J5dGVzVmlzaXRlZCgwKQorLy8gICAgLCBtX3Zpc2l0Q291
bnQoMCkKICAgICAsIG1faXNJblBhcmFsbGVsTW9kZShmYWxzZSkKLSAgICAsIG1fbWFya2luZ1Zl
cnNpb24oTWFya2VkU3BhY2U6OmluaXRpYWxWZXJzaW9uKQotICAgICwgbV9oZWFwKGhlYXApCi0g
ICAgLCBtX2NvZGVOYW1lKGNvZGVOYW1lKQotI2lmIEFTU0VSVF9FTkFCTEVECi0gICAgLCBtX2lz
Q2hlY2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlvbihmYWxzZSkKLSAgICAsIG1faXNEcmFpbmlu
ZyhmYWxzZSkKLSNlbmRpZgorLy8gICAgLCBtX21hcmtpbmdWZXJzaW9uKE1hcmtlZFNwYWNlOjpp
bml0aWFsVmVyc2lvbikKKy8vICAgICwgbV9oZWFwKGhlYXApCisvLyAgICAsIG1fY29kZU5hbWUo
Y29kZU5hbWUpCisvLyNpZiBBU1NFUlRfRU5BQkxFRAorLy8gICAgLCBtX2lzQ2hlY2tpbmdGb3JE
ZWZhdWx0TWFya1Zpb2xhdGlvbihmYWxzZSkKKy8vLy8gICAgLCBtX2lzRHJhaW5pbmcoZmFsc2Up
CisvLyNlbmRpZgogewogfQogCkBAIC0xMTcsOCArMTIwLDkgQEAgdm9pZCBTbG90VmlzaXRvcjo6
ZGlkU3RhcnRNYXJraW5nKCkKIAogdm9pZCBTbG90VmlzaXRvcjo6cmVzZXQoKQogewotICAgIG1f
Ynl0ZXNWaXNpdGVkID0gMDsKLSAgICBtX3Zpc2l0Q291bnQgPSAwOworLy8gICAgbV9ieXRlc1Zp
c2l0ZWQgPSAwOworLy8gICAgbV92aXNpdENvdW50ID0gMDsKKyAgICBBYnN0cmFjdFNsb3RWaXNp
dG9yOjpyZXNldCgpOwogICAgIG1faGVhcEFuYWx5emVyID0gbnVsbHB0cjsKICAgICBSRUxFQVNF
X0FTU0VSVCghbV9jdXJyZW50Q2VsbCk7CiB9CkBAIC04MDcsMTMgKzgxMSwxMyBAQCBNYXJrU3Rh
Y2tBcnJheSYgU2xvdFZpc2l0b3I6OmNvcnJlc3BvbmRpCiAgICAgcmV0dXJuICptX2hlYXAubV9z
aGFyZWRNdXRhdG9yTWFya1N0YWNrOwogfQogCi12b2lkIFNsb3RWaXNpdG9yOjphZGRQYXJhbGxl
bENvbnN0cmFpbnRUYXNrKFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoU2xvdFZpc2l0b3ImKT4+IHRh
c2spCi17Ci0gICAgUkVMRUFTRV9BU1NFUlQobV9jdXJyZW50U29sdmVyKTsKLSAgICBSRUxFQVNF
X0FTU0VSVChtX2N1cnJlbnRDb25zdHJhaW50KTsKLSAgICBSRUxFQVNFX0FTU0VSVCh0YXNrKTsK
LSAgICAKLSAgICBtX2N1cnJlbnRTb2x2ZXItPmFkZFBhcmFsbGVsVGFzayh0YXNrLCAqbV9jdXJy
ZW50Q29uc3RyYWludCk7Ci19CisvL3ZvaWQgU2xvdFZpc2l0b3I6OmFkZFBhcmFsbGVsQ29uc3Ry
YWludFRhc2soUmVmUHRyPFNoYXJlZFRhc2s8dm9pZChBYnN0cmFjdFNsb3RWaXNpdG9yJik+PiB0
YXNrKQorLy97CisvLyAgICBSRUxFQVNFX0FTU0VSVChtX2N1cnJlbnRTb2x2ZXIpOworLy8gICAg
UkVMRUFTRV9BU1NFUlQobV9jdXJyZW50Q29uc3RyYWludCk7CisvLyAgICBSRUxFQVNFX0FTU0VS
VCh0YXNrKTsKKy8vCisvLyAgICBtX2N1cnJlbnRTb2x2ZXItPmFkZFBhcmFsbGVsVGFzayh0YXNr
LCAqbV9jdXJyZW50Q29uc3RyYWludCk7CisvL30KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmgJKHJldmlzaW9uIDI3MTQ0
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTI1LDc0ICsyNSwxMDEgQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRlICJB
YnN0cmFjdFNsb3RWaXNpdG9yLmgiCiAjaW5jbHVkZSAiSGFuZGxlVHlwZXMuaCIKICNpbmNsdWRl
ICJJdGVyYXRpb25TdGF0dXMuaCIKLSNpbmNsdWRlICJNYXJrU3RhY2suaCIKLSNpbmNsdWRlICJW
aXNpdFJhY2VLZXkuaCIKKy8vI2luY2x1ZGUgIk1hcmtTdGFjay5oIgorLy8jaW5jbHVkZSAiVmlz
aXRSYWNlS2V5LmgiCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3dGYvTW9u
b3RvbmljVGltZS5oPgotI2luY2x1ZGUgPHd0Zi9TaGFyZWRUYXNrLmg+Ci0jaW5jbHVkZSA8d3Rm
L3RleHQvQ1N0cmluZy5oPgorLy8jaW5jbHVkZSA8d3RmL1NoYXJlZFRhc2suaD4KKy8vI2luY2x1
ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKLWNsYXNzIENvbnNl
cnZhdGl2ZVJvb3RzOworLy9jbGFzcyBDb25zZXJ2YXRpdmVSb290czsKIGNsYXNzIEdDVGhyZWFk
U2hhcmVkRGF0YTsKLWNsYXNzIEhlYXA7CisvL2NsYXNzIEhlYXA7CiBjbGFzcyBIZWFwQ2VsbDsK
LWNsYXNzIEhlYXBBbmFseXplcjsKKy8vY2xhc3MgSGVhcEFuYWx5emVyOwogY2xhc3MgTWFya2Vk
QmxvY2s7Ci1jbGFzcyBNYXJraW5nQ29uc3RyYWludDsKLWNsYXNzIE1hcmtpbmdDb25zdHJhaW50
U29sdmVyOwotdGVtcGxhdGU8dHlwZW5hbWUgVD4gY2xhc3MgV2VhazsKLXRlbXBsYXRlPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIFRyYWl0cz4gY2xhc3MgV3JpdGVCYXJyaWVyQmFzZTsKKy8vY2xhc3Mg
TWFya2luZ0NvbnN0cmFpbnQ7CisvL2NsYXNzIE1hcmtpbmdDb25zdHJhaW50U29sdmVyOworLy90
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjbGFzcyBXZWFrOworLy90ZW1wbGF0ZTx0eXBlbmFtZSBULCB0
eXBlbmFtZSBUcmFpdHM+IGNsYXNzIFdyaXRlQmFycmllckJhc2U7CiAKLXR5cGVkZWYgdWludDMy
X3QgSGVhcFZlcnNpb247CisvL3R5cGVkZWYgdWludDMyX3QgSGVhcFZlcnNpb247CiAKLWNsYXNz
IFNsb3RWaXNpdG9yIHsKK2NsYXNzIFNsb3RWaXNpdG9yIGZpbmFsIDogcHVibGljIEFic3RyYWN0
U2xvdFZpc2l0b3IgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFNsb3RWaXNpdG9yKTsKICAg
ICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIAorICAgIHVzaW5nIEJhc2UgPSBBYnN0cmFjdFNs
b3RWaXNpdG9yOworCiAgICAgZnJpZW5kIGNsYXNzIFNldEN1cnJlbnRDZWxsU2NvcGU7CiAgICAg
ZnJpZW5kIGNsYXNzIEhlYXA7CiAKIHB1YmxpYzoKLSAgICBlbnVtIFJvb3RNYXJrUmVhc29uIHsK
LSAgICAgICAgTm9uZSwKLSAgICAgICAgQ29uc2VydmF0aXZlU2NhbiwKLSAgICAgICAgU3Ryb25n
UmVmZXJlbmNlcywKLSAgICAgICAgUHJvdGVjdGVkVmFsdWVzLAotICAgICAgICBNYXJrTGlzdFNl
dCwKLSAgICAgICAgVk1FeGNlcHRpb25zLAotICAgICAgICBTdHJvbmdIYW5kbGVzLAotICAgICAg
ICBEZWJ1Z2dlciwKLSAgICAgICAgSklUU3R1YlJvdXRpbmVzLAotICAgICAgICBXZWFrU2V0cywK
LSAgICAgICAgT3V0cHV0LAotICAgICAgICBERkdXb3JrTGlzdHMsCi0gICAgICAgIENvZGVCbG9j
a3MsCi0gICAgICAgIERPTUdDT3V0cHV0LAorICAgIGNsYXNzIERlZmF1bHRNYXJraW5nVmlvbGF0
aW9uQXNzZXJ0aW9uU2NvcGUgeworICAgIHB1YmxpYzoKKyNpZiBBU1NFUlRfRU5BQkxFRAorICAg
ICAgICBEZWZhdWx0TWFya2luZ1Zpb2xhdGlvbkFzc2VydGlvblNjb3BlKFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQorICAgICAgICAgICAgOiBtX3Zpc2l0b3IodmlzaXRvcikKKyAgICAgICAgeworICAg
ICAgICAgICAgbV93YXNDaGVja2luZ0ZvckRlZmF1bHRNYXJrVmlvbGF0aW9uID0gbV92aXNpdG9y
Lm1faXNDaGVja2luZ0ZvckRlZmF1bHRNYXJrVmlvbGF0aW9uOworICAgICAgICAgICAgbV92aXNp
dG9yLm1faXNDaGVja2luZ0ZvckRlZmF1bHRNYXJrVmlvbGF0aW9uID0gZmFsc2U7CisgICAgICAg
IH0KKworICAgICAgICB+RGVmYXVsdE1hcmtpbmdWaW9sYXRpb25Bc3NlcnRpb25TY29wZSgpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIG1fdmlzaXRvci5tX2lzQ2hlY2tpbmdGb3JEZWZhdWx0TWFy
a1Zpb2xhdGlvbiA9IG1fd2FzQ2hlY2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlvbjsKKyAgICAg
ICAgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgU2xvdFZpc2l0b3ImIG1fdmlzaXRvcjsKKyAg
ICAgICAgYm9vbCBtX3dhc0NoZWNraW5nRm9yRGVmYXVsdE1hcmtWaW9sYXRpb247CisjZWxzZQor
ICAgICAgICBEZWZhdWx0TWFya2luZ1Zpb2xhdGlvbkFzc2VydGlvblNjb3BlKFNsb3RWaXNpdG9y
JikgeyB9CisjZW5kaWYKICAgICB9OwogCisvLyAgICBlbnVtIFJvb3RNYXJrUmVhc29uIHsKKy8v
ICAgICAgICBOb25lLAorLy8gICAgICAgIENvbnNlcnZhdGl2ZVNjYW4sCisvLyAgICAgICAgU3Ry
b25nUmVmZXJlbmNlcywKKy8vICAgICAgICBQcm90ZWN0ZWRWYWx1ZXMsCisvLyAgICAgICAgTWFy
a0xpc3RTZXQsCisvLyAgICAgICAgVk1FeGNlcHRpb25zLAorLy8gICAgICAgIFN0cm9uZ0hhbmRs
ZXMsCisvLyAgICAgICAgRGVidWdnZXIsCisvLyAgICAgICAgSklUU3R1YlJvdXRpbmVzLAorLy8g
ICAgICAgIFdlYWtTZXRzLAorLy8gICAgICAgIE91dHB1dCwKKy8vICAgICAgICBERkdXb3JrTGlz
dHMsCisvLyAgICAgICAgQ29kZUJsb2NrcywKKy8vICAgICAgICBET01HQ091dHB1dCwKKy8vICAg
IH07CisKICAgICBTbG90VmlzaXRvcihIZWFwJiwgQ1N0cmluZyBjb2RlTmFtZSk7CiAgICAgflNs
b3RWaXNpdG9yKCk7CiAKLSAgICBNYXJrU3RhY2tBcnJheSYgY29sbGVjdG9yTWFya1N0YWNrKCkg
eyByZXR1cm4gbV9jb2xsZWN0b3JTdGFjazsgfQotICAgIE1hcmtTdGFja0FycmF5JiBtdXRhdG9y
TWFya1N0YWNrKCkgeyByZXR1cm4gbV9tdXRhdG9yU3RhY2s7IH0KLSAgICBjb25zdCBNYXJrU3Rh
Y2tBcnJheSYgY29sbGVjdG9yTWFya1N0YWNrKCkgY29uc3QgeyByZXR1cm4gbV9jb2xsZWN0b3JT
dGFjazsgfQotICAgIGNvbnN0IE1hcmtTdGFja0FycmF5JiBtdXRhdG9yTWFya1N0YWNrKCkgY29u
c3QgeyByZXR1cm4gbV9tdXRhdG9yU3RhY2s7IH0KLSAgICAKLSAgICBWTSYgdm0oKTsKLSAgICBj
b25zdCBWTSYgdm0oKSBjb25zdDsKLSAgICBIZWFwKiBoZWFwKCkgY29uc3Q7Ci0KLSAgICB2b2lk
IGFwcGVuZChjb25zdCBDb25zZXJ2YXRpdmVSb290cyYpOwotICAgIAotICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFQsIHR5cGVuYW1lIFRyYWl0cz4gdm9pZCBhcHBlbmQoY29uc3QgV3JpdGVCYXJyaWVy
QmFzZTxULCBUcmFpdHM+Jik7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVHJh
aXRzPiB2b2lkIGFwcGVuZEhpZGRlbihjb25zdCBXcml0ZUJhcnJpZXJCYXNlPFQsIFRyYWl0cz4m
KTsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJdGVyYXRvcj4gdm9pZCBhcHBlbmQoSXRlcmF0b3Ig
YmVnaW4gLCBJdGVyYXRvciBlbmQpOwotICAgIHZvaWQgYXBwZW5kVmFsdWVzKGNvbnN0IFdyaXRl
QmFycmllckJhc2U8VW5rbm93biwgUmF3VmFsdWVUcmFpdHM8VW5rbm93bj4+Kiwgc2l6ZV90IGNv
dW50KTsKLSAgICB2b2lkIGFwcGVuZFZhbHVlc0hpZGRlbihjb25zdCBXcml0ZUJhcnJpZXJCYXNl
PFVua25vd24sIFJhd1ZhbHVlVHJhaXRzPFVua25vd24+PiosIHNpemVfdCBjb3VudCk7CisvLyAg
ICBNYXJrU3RhY2tBcnJheSYgY29sbGVjdG9yTWFya1N0YWNrKCkgeyByZXR1cm4gbV9jb2xsZWN0
b3JTdGFjazsgfQorLy8gICAgTWFya1N0YWNrQXJyYXkmIG11dGF0b3JNYXJrU3RhY2soKSB7IHJl
dHVybiBtX211dGF0b3JTdGFjazsgfQorLy8gICAgY29uc3QgTWFya1N0YWNrQXJyYXkmIGNvbGxl
Y3Rvck1hcmtTdGFjaygpIGNvbnN0IHsgcmV0dXJuIG1fY29sbGVjdG9yU3RhY2s7IH0KKy8vICAg
IGNvbnN0IE1hcmtTdGFja0FycmF5JiBtdXRhdG9yTWFya1N0YWNrKCkgY29uc3QgeyByZXR1cm4g
bV9tdXRhdG9yU3RhY2s7IH0KKyAgICAKKy8vICAgIFZNJiB2bSgpOworLy8gICAgY29uc3QgVk0m
IHZtKCkgY29uc3Q7CisvLyAgICBIZWFwKiBoZWFwKCkgY29uc3Q7CisKKyAgICB2b2lkIGFwcGVu
ZChjb25zdCBDb25zZXJ2YXRpdmVSb290cyYpIGZpbmFsOworCisgICAgdXNpbmcgQmFzZTo6YXBw
ZW5kOworLy8gICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVHJhaXRzPiB2b2lkIGFw
cGVuZChjb25zdCBXcml0ZUJhcnJpZXJCYXNlPFQsIFRyYWl0cz4mKTsKKy8vICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFQsIHR5cGVuYW1lIFRyYWl0cz4gdm9pZCBhcHBlbmRIaWRkZW4oY29uc3QgV3Jp
dGVCYXJyaWVyQmFzZTxULCBUcmFpdHM+Jik7CisvLyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJdGVy
YXRvcj4gdm9pZCBhcHBlbmQoSXRlcmF0b3IgYmVnaW4gLCBJdGVyYXRvciBlbmQpOworLy8gICAg
dm9pZCBhcHBlbmRWYWx1ZXMoY29uc3QgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duLCBSYXdWYWx1
ZVRyYWl0czxVbmtub3duPj4qLCBzaXplX3QgY291bnQpOworLy8gICAgdm9pZCBhcHBlbmRWYWx1
ZXNIaWRkZW4oY29uc3QgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duLCBSYXdWYWx1ZVRyYWl0czxV
bmtub3duPj4qLCBzaXplX3QgY291bnQpOwogICAgIAogICAgIC8vIFRoZXNlIGRvbid0IHJlcXVp
cmUgeW91IHRvIHByb3ZlIHRoYXQgeW91IGhhdmUgYSBXcml0ZUJhcnJpZXI8Pi4gVGhhdCBtYWtl
cyBzZW5zZQogICAgIC8vIGZvcjoKQEAgLTEwMywxOSArMTMwLDE5IEBAIHB1YmxpYzoKICAgICAv
LwogICAgIC8vIElmIHlvdSBhcmUgbm90IGEgcm9vdCBhbmQgeW91IGRvbid0IGtub3cgd2hhdCBr
aW5kIG9mIGJhcnJpZXIgeW91IGhhdmUsIHRoZW4geW91CiAgICAgLy8gc2hvdWxkbid0IGNhbGwg
dGhlc2UgbWV0aG9kcy4KLSAgICB2b2lkIGFwcGVuZFVuYmFycmllcmVkKEpTVmFsdWUpOworICAg
IHZvaWQgYXBwZW5kVW5iYXJyaWVyZWQoSlNWYWx1ZSkgZmluYWw7CiAgICAgdm9pZCBhcHBlbmRV
bmJhcnJpZXJlZChKU1ZhbHVlKiwgc2l6ZV90KTsKLSAgICB2b2lkIGFwcGVuZFVuYmFycmllcmVk
KEpTQ2VsbCopOworICAgIHZvaWQgYXBwZW5kVW5iYXJyaWVyZWQoSlNDZWxsKikgZmluYWw7CiAg
ICAgCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICB2b2lkIGFwcGVuZChjb25zdCBXZWFr
PFQ+JiB3ZWFrKTsKKy8vICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisvLyAgICB2b2lkIGFwcGVu
ZChjb25zdCBXZWFrPFQ+JiB3ZWFrKTsKICAgICAKLSAgICB2b2lkIGFwcGVuZEhpZGRlblVuYmFy
cmllcmVkKEpTVmFsdWUpOwotICAgIHZvaWQgYXBwZW5kSGlkZGVuVW5iYXJyaWVyZWQoSlNDZWxs
Kik7CisgICAgdm9pZCBhcHBlbmRIaWRkZW5VbmJhcnJpZXJlZChKU1ZhbHVlKSBmaW5hbDsKKyAg
ICB2b2lkIGFwcGVuZEhpZGRlblVuYmFycmllcmVkKEpTQ2VsbCopIGZpbmFsOwogCi0gICAgYm9v
bCBhZGRPcGFxdWVSb290KHZvaWQqKTsgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSByb290IHdhcyBu
ZXcuCisgICAgYm9vbCBhZGRPcGFxdWVSb290KHZvaWQqKSBmaW5hbDsgLy8gUmV0dXJucyB0cnVl
IGlmIHRoZSByb290IHdhcyBuZXcuCiAgICAgCi0gICAgYm9vbCBjb250YWluc09wYXF1ZVJvb3Qo
dm9pZCopIGNvbnN0OworICAgIGJvb2wgY29udGFpbnNPcGFxdWVSb290KHZvaWQqKSBjb25zdCBm
aW5hbDsKIAogICAgIGJvb2wgaXNFbXB0eSgpIHsgcmV0dXJuIG1fY29sbGVjdG9yU3RhY2suaXNF
bXB0eSgpICYmIG1fbXV0YXRvclN0YWNrLmlzRW1wdHkoKTsgfQogCkBAIC0xMjUsMTAgKzE1Miwx
MCBAQCBwdWJsaWM6CiAgICAgdm9pZCByZXNldCgpOwogICAgIHZvaWQgY2xlYXJNYXJrU3RhY2tz
KCk7CiAKLSAgICBzaXplX3QgYnl0ZXNWaXNpdGVkKCkgY29uc3QgeyByZXR1cm4gbV9ieXRlc1Zp
c2l0ZWQ7IH0KLSAgICBzaXplX3QgdmlzaXRDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fdmlzaXRD
b3VudDsgfQotICAgIAotICAgIHZvaWQgYWRkVG9WaXNpdENvdW50KHNpemVfdCB2YWx1ZSkgeyBt
X3Zpc2l0Q291bnQgKz0gdmFsdWU7IH0KKy8vICAgIHNpemVfdCBieXRlc1Zpc2l0ZWQoKSBjb25z
dCB7IHJldHVybiBtX2J5dGVzVmlzaXRlZDsgfQorLy8gICAgc2l6ZV90IHZpc2l0Q291bnQoKSBj
b25zdCB7IHJldHVybiBtX3Zpc2l0Q291bnQ7IH0KKy8vCisvLyAgICB2b2lkIGFkZFRvVmlzaXRD
b3VudChzaXplX3QgdmFsdWUpIHsgbV92aXNpdENvdW50ICs9IHZhbHVlOyB9CiAKICAgICB2b2lk
IGRvbmF0ZSgpOwogICAgIHZvaWQgZHJhaW4oTW9ub3RvbmljVGltZSB0aW1lb3V0ID0gTW9ub3Rv
bmljVGltZTo6aW5maW5pdHkoKSk7CkBAIC0xNTEsMjQgKzE3OCwyNCBAQCBwdWJsaWM6CiAgICAg
CiAgICAgLy8gVGhpcyBpbmZvcm1zIHRoZSBHQyBhYm91dCBhdXhpbGlhcnkgb2Ygc29tZSBzaXpl
IHRoYXQgd2UgYXJlIGtlZXBpbmcgYWxpdmUuIElmIHlvdSBkb24ndCBkbwogICAgIC8vIHRoaXMg
dGhlbiB0aGUgc3BhY2Ugd2lsbCBiZSBmcmVlZCBhdCBlbmQgb2YgR0MuCi0gICAgdm9pZCBtYXJr
QXV4aWxpYXJ5KGNvbnN0IHZvaWQqIGJhc2UpOworICAgIHZvaWQgbWFya0F1eGlsaWFyeShjb25z
dCB2b2lkKiBiYXNlKSBmaW5hbDsKIAotICAgIHZvaWQgcmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVk
KHNpemVfdCk7CisgICAgdm9pZCByZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQoc2l6ZV90KSBmaW5h
bDsKICNpZiBFTkFCTEUoUkVTT1VSQ0VfVVNBR0UpCi0gICAgdm9pZCByZXBvcnRFeHRlcm5hbE1l
bW9yeVZpc2l0ZWQoc2l6ZV90KTsKKyAgICB2b2lkIHJlcG9ydEV4dGVybmFsTWVtb3J5VmlzaXRl
ZChzaXplX3QpIGZpbmFsOwogI2VuZGlmCiAgICAgCi0gICAgdm9pZCBkdW1wKFByaW50U3RyZWFt
JikgY29uc3Q7CisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3QgZmluYWw7CiAKLSAg
ICBib29sIGlzQW5hbHl6aW5nSGVhcCgpIGNvbnN0IHsgcmV0dXJuICEhbV9oZWFwQW5hbHl6ZXI7
IH0KLSAgICBIZWFwQW5hbHl6ZXIqIGhlYXBBbmFseXplcigpIGNvbnN0IHsgcmV0dXJuIG1faGVh
cEFuYWx5emVyOyB9CisvLyAgICBib29sIGlzQW5hbHl6aW5nSGVhcCgpIGNvbnN0IHsgcmV0dXJu
ICEhbV9oZWFwQW5hbHl6ZXI7IH0KKy8vICAgIEhlYXBBbmFseXplciogaGVhcEFuYWx5emVyKCkg
Y29uc3QgeyByZXR1cm4gbV9oZWFwQW5hbHl6ZXI7IH0KICAgICAKLSAgICBSb290TWFya1JlYXNv
biByb290TWFya1JlYXNvbigpIGNvbnN0IHsgcmV0dXJuIG1fcm9vdE1hcmtSZWFzb247IH0KLSAg
ICB2b2lkIHNldFJvb3RNYXJrUmVhc29uKFJvb3RNYXJrUmVhc29uIHJlYXNvbikgeyBtX3Jvb3RN
YXJrUmVhc29uID0gcmVhc29uOyB9CisvLyAgICBSb290TWFya1JlYXNvbiByb290TWFya1JlYXNv
bigpIGNvbnN0IHsgcmV0dXJuIG1fcm9vdE1hcmtSZWFzb247IH0KKy8vICAgIHZvaWQgc2V0Um9v
dE1hcmtSZWFzb24oUm9vdE1hcmtSZWFzb24gcmVhc29uKSB7IG1fcm9vdE1hcmtSZWFzb24gPSBy
ZWFzb247IH0KIAotICAgIEhlYXBWZXJzaW9uIG1hcmtpbmdWZXJzaW9uKCkgY29uc3QgeyByZXR1
cm4gbV9tYXJraW5nVmVyc2lvbjsgfQorLy8gICAgSGVhcFZlcnNpb24gbWFya2luZ1ZlcnNpb24o
KSBjb25zdCB7IHJldHVybiBtX21hcmtpbmdWZXJzaW9uOyB9CiAKLSAgICBib29sIG11dGF0b3JJ
c1N0b3BwZWQoKSBjb25zdCB7IHJldHVybiBtX211dGF0b3JJc1N0b3BwZWQ7IH0KKyAgICBib29s
IG11dGF0b3JJc1N0b3BwZWQoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX211dGF0b3JJc1N0b3Bw
ZWQ7IH0KICAgICAKICAgICBMb2NrJiByaWdodFRvUnVuKCkgeyByZXR1cm4gbV9yaWdodFRvUnVu
OyB9CiAgICAgCkBAIC0xODAsMTAgKzIwNywxMCBAQCBwdWJsaWM6CiAgICAgCiAgICAgdm9pZCBv
cHRpbWl6ZUZvclN0b3BwZWRNdXRhdG9yKCk7CiAgICAgCi0gICAgdm9pZCBkaWRSYWNlKGNvbnN0
IFZpc2l0UmFjZUtleSYpOworICAgIHZvaWQgZGlkUmFjZShjb25zdCBWaXNpdFJhY2VLZXkmKSBm
aW5hbDsKICAgICB2b2lkIGRpZFJhY2UoSlNDZWxsKiBjZWxsLCBjb25zdCBjaGFyKiByZWFzb24p
IHsgZGlkUmFjZShWaXNpdFJhY2VLZXkoY2VsbCwgcmVhc29uKSk7IH0KICAgICAKLSAgICB2b2lk
IHZpc2l0QXNDb25zdHJhaW50KGNvbnN0IEpTQ2VsbCopOworICAgIHZvaWQgdmlzaXRBc0NvbnN0
cmFpbnQoY29uc3QgSlNDZWxsKikgZmluYWw7CiAgICAgCiAgICAgYm9vbCBkaWRSZWFjaFRlcm1p
bmF0aW9uKCk7CiAgICAgCkBAIC0xOTMsMTEgKzIyMCwxMSBAQCBwdWJsaWM6CiAgICAgCiAgICAg
Y29uc3QgY2hhciogY29kZU5hbWUoKSBjb25zdCB7IHJldHVybiBtX2NvZGVOYW1lLmRhdGEoKTsg
fQogICAgIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgYWRkUGFyYWxsZWxDb25zdHJhaW50
VGFzayhSZWZQdHI8U2hhcmVkVGFzazx2b2lkKFNsb3RWaXNpdG9yJik+Pik7CisvLyAgICBKU19F
WFBPUlRfUFJJVkFURSB2b2lkIGFkZFBhcmFsbGVsQ29uc3RyYWludFRhc2soUmVmUHRyPFNoYXJl
ZFRhc2s8dm9pZChBYnN0cmFjdFNsb3RWaXNpdG9yJik+Pik7CiAKIHByaXZhdGU6CiAgICAgZnJp
ZW5kIGNsYXNzIFBhcmFsbGVsTW9kZUVuYWJsZXI7Ci0gICAgZnJpZW5kIGNsYXNzIE1hcmtpbmdD
b25zdHJhaW50U29sdmVyOworLy8gICAgZnJpZW5kIGNsYXNzIE1hcmtpbmdDb25zdHJhaW50U29s
dmVyOwogICAgIAogICAgIHZvaWQgYXBwZW5kSlNDZWxsT3JBdXhpbGlhcnkoSGVhcENlbGwqKTsK
IApAQCAtMjMyLDM5ICsyNTksMzkgQEAgcHJpdmF0ZToKIAogICAgIE1hcmtTdGFja0FycmF5JiBj
b3JyZXNwb25kaW5nR2xvYmFsU3RhY2soTWFya1N0YWNrQXJyYXkmKTsKIAotICAgIE1hcmtTdGFj
a0FycmF5IG1fY29sbGVjdG9yU3RhY2s7Ci0gICAgTWFya1N0YWNrQXJyYXkgbV9tdXRhdG9yU3Rh
Y2s7Ci0gICAgCi0gICAgc2l6ZV90IG1fYnl0ZXNWaXNpdGVkOwotICAgIHNpemVfdCBtX3Zpc2l0
Q291bnQ7CisvLyAgICBNYXJrU3RhY2tBcnJheSBtX2NvbGxlY3RvclN0YWNrOworLy8gICAgTWFy
a1N0YWNrQXJyYXkgbV9tdXRhdG9yU3RhY2s7CisvLworLy8gICAgc2l6ZV90IG1fYnl0ZXNWaXNp
dGVkOworLy8gICAgc2l6ZV90IG1fdmlzaXRDb3VudDsKICAgICBzaXplX3QgbV9ub25DZWxsVmlz
aXRDb3VudCB7IDAgfTsgLy8gVXNlZCBmb3IgaW5jcmVtZW50YWwgZHJhaW5pbmcsIGlnbm9yZWQg
b3RoZXJ3aXNlLgogICAgIENoZWNrZWRTaXplIG1fZXh0cmFNZW1vcnlTaXplIHsgMCB9OwogICAg
IGJvb2wgbV9pc0luUGFyYWxsZWxNb2RlOwogICAgIGJvb2wgbV9pZ25vcmVOZXdPcGFxdWVSb290
cyB7IGZhbHNlIH07IC8vIFVzZWZ1bCBhcyBhIGRlYnVnZ2luZyBtb2RlLgogCi0gICAgSGVhcFZl
cnNpb24gbV9tYXJraW5nVmVyc2lvbjsKLSAgICAKLSAgICBIZWFwJiBtX2hlYXA7CisvLyAgICBI
ZWFwVmVyc2lvbiBtX21hcmtpbmdWZXJzaW9uOworLy8KKy8vICAgIEhlYXAmIG1faGVhcDsKIAot
ICAgIEhlYXBBbmFseXplciogbV9oZWFwQW5hbHl6ZXIgeyBudWxscHRyIH07CisvLyAgICBIZWFw
QW5hbHl6ZXIqIG1faGVhcEFuYWx5emVyIHsgbnVsbHB0ciB9OwogICAgIEpTQ2VsbCogbV9jdXJy
ZW50Q2VsbCB7IG51bGxwdHIgfTsKLSAgICBSb290TWFya1JlYXNvbiBtX3Jvb3RNYXJrUmVhc29u
IHsgUm9vdE1hcmtSZWFzb246Ok5vbmUgfTsKKy8vICAgIFJvb3RNYXJrUmVhc29uIG1fcm9vdE1h
cmtSZWFzb24geyBSb290TWFya1JlYXNvbjo6Tm9uZSB9OwogICAgIGJvb2wgbV9pc0ZpcnN0Vmlz
aXQgeyBmYWxzZSB9OwogICAgIGJvb2wgbV9tdXRhdG9ySXNTdG9wcGVkIHsgZmFsc2UgfTsKICAg
ICBib29sIG1fY2FuT3B0aW1pemVGb3JTdG9wcGVkTXV0YXRvciB7IGZhbHNlIH07CiAgICAgTG9j
ayBtX3JpZ2h0VG9SdW47CiAgICAgCi0gICAgQ1N0cmluZyBtX2NvZGVOYW1lOworLy8gICAgQ1N0
cmluZyBtX2NvZGVOYW1lOwogICAgIAotICAgIE1hcmtpbmdDb25zdHJhaW50KiBtX2N1cnJlbnRD
b25zdHJhaW50IHsgbnVsbHB0ciB9OwotICAgIE1hcmtpbmdDb25zdHJhaW50U29sdmVyKiBtX2N1
cnJlbnRTb2x2ZXIgeyBudWxscHRyIH07CisvLyAgICBNYXJraW5nQ29uc3RyYWludCogbV9jdXJy
ZW50Q29uc3RyYWludCB7IG51bGxwdHIgfTsKKy8vICAgIE1hcmtpbmdDb25zdHJhaW50U29sdmVy
KiBtX2N1cnJlbnRTb2x2ZXIgeyBudWxscHRyIH07CiAgICAgCiAgICAgLy8gUHV0IHBhZGRpbmcg
aGVyZSB0byBtaXRpZ2F0ZSBmYWxzZSBzaGFyaW5nIGJldHdlZW4gbXVsdGlwbGUgU2xvdFZpc2l0
b3JzLgogICAgIGNoYXIgcGFkZGluZ1s2NF07Ci1wdWJsaWM6CisvL3B1YmxpYzoKICNpZiBBU1NF
UlRfRU5BQkxFRAotICAgIGJvb2wgbV9pc0NoZWNraW5nRm9yRGVmYXVsdE1hcmtWaW9sYXRpb247
Ci0gICAgYm9vbCBtX2lzRHJhaW5pbmc7CisgICAgYm9vbCBtX2lzQ2hlY2tpbmdGb3JEZWZhdWx0
TWFya1Zpb2xhdGlvbiB7IGZhbHNlIH07CisvLyAgICBib29sIG1faXNEcmFpbmluZzsKICNlbmRp
ZgogfTsKIApAQCAtMjg3LDIzICszMTQsMjMgQEAgcHJpdmF0ZToKICAgICBTbG90VmlzaXRvciYg
bV9zdGFjazsKIH07CiAKLWNsYXNzIFNldFJvb3RNYXJrUmVhc29uU2NvcGUgewotcHVibGljOgot
ICAgIFNldFJvb3RNYXJrUmVhc29uU2NvcGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IsIFNsb3RWaXNp
dG9yOjpSb290TWFya1JlYXNvbiByZWFzb24pCi0gICAgICAgIDogbV92aXNpdG9yKHZpc2l0b3Ip
Ci0gICAgICAgICwgbV9wcmV2aW91c1JlYXNvbih2aXNpdG9yLnJvb3RNYXJrUmVhc29uKCkpCi0g
ICAgewotICAgICAgICBtX3Zpc2l0b3Iuc2V0Um9vdE1hcmtSZWFzb24ocmVhc29uKTsKLSAgICB9
Ci0KLSAgICB+U2V0Um9vdE1hcmtSZWFzb25TY29wZSgpCi0gICAgewotICAgICAgICBtX3Zpc2l0
b3Iuc2V0Um9vdE1hcmtSZWFzb24obV9wcmV2aW91c1JlYXNvbik7Ci0gICAgfQotCi1wcml2YXRl
OgotICAgIFNsb3RWaXNpdG9yJiBtX3Zpc2l0b3I7Ci0gICAgU2xvdFZpc2l0b3I6OlJvb3RNYXJr
UmVhc29uIG1fcHJldmlvdXNSZWFzb247Ci19OwotCisvL2NsYXNzIFNldFJvb3RNYXJrUmVhc29u
U2NvcGUgeworLy9wdWJsaWM6CisvLyAgICBTZXRSb290TWFya1JlYXNvblNjb3BlKFNsb3RWaXNp
dG9yJiB2aXNpdG9yLCBTbG90VmlzaXRvcjo6Um9vdE1hcmtSZWFzb24gcmVhc29uKQorLy8gICAg
ICAgIDogbV92aXNpdG9yKHZpc2l0b3IpCisvLyAgICAgICAgLCBtX3ByZXZpb3VzUmVhc29uKHZp
c2l0b3Iucm9vdE1hcmtSZWFzb24oKSkKKy8vICAgIHsKKy8vICAgICAgICBtX3Zpc2l0b3Iuc2V0
Um9vdE1hcmtSZWFzb24ocmVhc29uKTsKKy8vICAgIH0KKy8vCisvLyAgICB+U2V0Um9vdE1hcmtS
ZWFzb25TY29wZSgpCisvLyAgICB7CisvLyAgICAgICAgbV92aXNpdG9yLnNldFJvb3RNYXJrUmVh
c29uKG1fcHJldmlvdXNSZWFzb24pOworLy8gICAgfQorLy8KKy8vcHJpdmF0ZToKKy8vICAgIFNs
b3RWaXNpdG9yJiBtX3Zpc2l0b3I7CisvLyAgICBTbG90VmlzaXRvcjo6Um9vdE1hcmtSZWFzb24g
bV9wcmV2aW91c1JlYXNvbjsKKy8vfTsKKy8vCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9ySW5saW5lcy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9ySW5saW5lcy5oCShyZXZp
c2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvcklu
bGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMjUsOSArMjUsMTAgQEAKIAogI3ByYWdtYSBvbmNl
CiAKKyNpbmNsdWRlICJBYnN0cmFjdFNsb3RWaXNpdG9ySW5saW5lcy5oIgogI2luY2x1ZGUgIlNs
b3RWaXNpdG9yLmgiCi0jaW5jbHVkZSAiV2Vhay5oIgotI2luY2x1ZGUgIldlYWtJbmxpbmVzLmgi
CisvLyNpbmNsdWRlICJXZWFrLmgiCisvLyNpbmNsdWRlICJXZWFrSW5saW5lcy5oIgogCiBuYW1l
c3BhY2UgSlNDIHsKIApAQCAtOTcsNDIgKzk4LDQyIEBAIEFMV0FZU19JTkxJTkUgdm9pZCBTbG90
VmlzaXRvcjo6YXBwZW5kSGkKICAgICBhcHBlbmRIaWRkZW5TbG93KGNlbGwsIGRlcGVuZGVuY3kp
OwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotQUxXQVlTX0lOTElORSB2b2lkIFNsb3RWaXNp
dG9yOjphcHBlbmQoY29uc3QgV2VhazxUPiYgd2VhaykKLXsKLSAgICBhcHBlbmRVbmJhcnJpZXJl
ZCh3ZWFrLmdldCgpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVHJhaXRz
PgotQUxXQVlTX0lOTElORSB2b2lkIFNsb3RWaXNpdG9yOjphcHBlbmQoY29uc3QgV3JpdGVCYXJy
aWVyQmFzZTxULCBUcmFpdHM+JiBzbG90KQotewotICAgIGFwcGVuZFVuYmFycmllcmVkKHNsb3Qu
Z2V0KCkpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBUcmFpdHM+Ci1BTFdB
WVNfSU5MSU5FIHZvaWQgU2xvdFZpc2l0b3I6OmFwcGVuZEhpZGRlbihjb25zdCBXcml0ZUJhcnJp
ZXJCYXNlPFQsIFRyYWl0cz4mIHNsb3QpCi17Ci0gICAgYXBwZW5kSGlkZGVuVW5iYXJyaWVyZWQo
c2xvdC5nZXQoKSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIEl0ZXJhdG9yPgotQUxXQVlTX0lO
TElORSB2b2lkIFNsb3RWaXNpdG9yOjphcHBlbmQoSXRlcmF0b3IgYmVnaW4sIEl0ZXJhdG9yIGVu
ZCkKLXsKLSAgICBmb3IgKGF1dG8gaXQgPSBiZWdpbjsgaXQgIT0gZW5kOyArK2l0KQotICAgICAg
ICBhcHBlbmQoKml0KTsKLX0KLQotQUxXQVlTX0lOTElORSB2b2lkIFNsb3RWaXNpdG9yOjphcHBl
bmRWYWx1ZXMoY29uc3QgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiogYmFycmllcnMsIHNpemVf
dCBjb3VudCkKLXsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpCi0gICAg
ICAgIGFwcGVuZChiYXJyaWVyc1tpXSk7Ci19Ci0KLUFMV0FZU19JTkxJTkUgdm9pZCBTbG90Vmlz
aXRvcjo6YXBwZW5kVmFsdWVzSGlkZGVuKGNvbnN0IFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4q
IGJhcnJpZXJzLCBzaXplX3QgY291bnQpCi17Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBj
b3VudDsgKytpKQotICAgICAgICBhcHBlbmRIaWRkZW4oYmFycmllcnNbaV0pOwotfQorLy90ZW1w
bGF0ZTx0eXBlbmFtZSBUPgorLy9BTFdBWVNfSU5MSU5FIHZvaWQgU2xvdFZpc2l0b3I6OmFwcGVu
ZChjb25zdCBXZWFrPFQ+JiB3ZWFrKQorLy97CisvLyAgICBhcHBlbmRVbmJhcnJpZXJlZCh3ZWFr
LmdldCgpKTsKKy8vfQorLy8KKy8vdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVHJhaXRz
PgorLy9BTFdBWVNfSU5MSU5FIHZvaWQgU2xvdFZpc2l0b3I6OmFwcGVuZChjb25zdCBXcml0ZUJh
cnJpZXJCYXNlPFQsIFRyYWl0cz4mIHNsb3QpCisvL3sKKy8vICAgIGFwcGVuZFVuYmFycmllcmVk
KHNsb3QuZ2V0KCkpOworLy99CisvLworLy90ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBU
cmFpdHM+CisvL0FMV0FZU19JTkxJTkUgdm9pZCBTbG90VmlzaXRvcjo6YXBwZW5kSGlkZGVuKGNv
bnN0IFdyaXRlQmFycmllckJhc2U8VCwgVHJhaXRzPiYgc2xvdCkKKy8veworLy8gICAgYXBwZW5k
SGlkZGVuVW5iYXJyaWVyZWQoc2xvdC5nZXQoKSk7CisvL30KKy8vCisvL3RlbXBsYXRlPHR5cGVu
YW1lIEl0ZXJhdG9yPgorLy9BTFdBWVNfSU5MSU5FIHZvaWQgU2xvdFZpc2l0b3I6OmFwcGVuZChJ
dGVyYXRvciBiZWdpbiwgSXRlcmF0b3IgZW5kKQorLy97CisvLyAgICBmb3IgKGF1dG8gaXQgPSBi
ZWdpbjsgaXQgIT0gZW5kOyArK2l0KQorLy8gICAgICAgIGFwcGVuZCgqaXQpOworLy99CisKKy8v
QUxXQVlTX0lOTElORSB2b2lkIFNsb3RWaXNpdG9yOjphcHBlbmRWYWx1ZXMoY29uc3QgV3JpdGVC
YXJyaWVyQmFzZTxVbmtub3duPiogYmFycmllcnMsIHNpemVfdCBjb3VudCkKKy8veworLy8gICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKQorLy8gICAgICAgIGFwcGVuZChiYXJy
aWVyc1tpXSk7CisvL30KKy8vCisvL0FMV0FZU19JTkxJTkUgdm9pZCBTbG90VmlzaXRvcjo6YXBw
ZW5kVmFsdWVzSGlkZGVuKGNvbnN0IFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4qIGJhcnJpZXJz
LCBzaXplX3QgY291bnQpCisvL3sKKy8vICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY291bnQ7
ICsraSkKKy8vICAgICAgICBhcHBlbmRIaWRkZW4oYmFycmllcnNbaV0pOworLy99CiAKIGlubGlu
ZSBib29sIFNsb3RWaXNpdG9yOjphZGRPcGFxdWVSb290KHZvaWQqIHB0cikKIHsKQEAgLTE2OSwy
MCArMTcwLDIwIEBAIGlubGluZSB2b2lkIFNsb3RWaXNpdG9yOjpyZXBvcnRFeHRlcm5hbE0KIH0K
ICNlbmRpZgogCi1pbmxpbmUgSGVhcCogU2xvdFZpc2l0b3I6OmhlYXAoKSBjb25zdAotewotICAg
IHJldHVybiAmbV9oZWFwOwotfQotCi1pbmxpbmUgVk0mIFNsb3RWaXNpdG9yOjp2bSgpCi17Ci0g
ICAgcmV0dXJuIG1faGVhcC52bSgpOwotfQotCi1pbmxpbmUgY29uc3QgVk0mIFNsb3RWaXNpdG9y
Ojp2bSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1faGVhcC52bSgpOwotfQorLy9pbmxpbmUgSGVh
cCogU2xvdFZpc2l0b3I6OmhlYXAoKSBjb25zdAorLy97CisvLyAgICByZXR1cm4gJm1faGVhcDsK
Ky8vfQorLy8KKy8vaW5saW5lIFZNJiBTbG90VmlzaXRvcjo6dm0oKQorLy97CisvLyAgICByZXR1
cm4gbV9oZWFwLnZtKCk7CisvL30KKy8vCisvL2lubGluZSBjb25zdCBWTSYgU2xvdFZpc2l0b3I6
OnZtKCkgY29uc3QKKy8veworLy8gICAgcmV0dXJuIG1faGVhcC52bSgpOworLy99CiAKIHRlbXBs
YXRlPHR5cGVuYW1lIEZ1bmM+CiBJdGVyYXRpb25TdGF0dXMgU2xvdFZpc2l0b3I6OmZvckVhY2hN
YXJrU3RhY2soY29uc3QgRnVuYyYgZnVuYykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL1Nsb3RWaXNpdG9yTWFjcm9zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvU2xvdFZpc2l0b3JNYWNyb3MuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvck1hY3Jvcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMTE3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI3ByYWdtYSBvbmNlCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBBYnN0cmFjdFNsb3RW
aXNpdG9yOworY2xhc3MgSlNDZWxsOworY2xhc3MgU2xvdFZpc2l0b3I7CisKKyNkZWZpbmUgREVD
TEFSRV9VTlVTRURfU0xPVF9WSVNJVE9SX1NUUlVDVF9FWFBBTkRFUjIoY291bnRlcl8pIFwKKyAg
ICBzdHJ1Y3QgVW51c2VkU2xvdFZpc2l0b3JTdHJ1Y3RTb1dlQ2FuSGF2ZUFTZW1pY29sb24jI2Nv
dW50ZXJfIHsgfQorCisjZGVmaW5lIERFQ0xBUkVfVU5VU0VEX1NMT1RfVklTSVRPUl9TVFJVQ1Rf
RVhQQU5ERVIoY291bnRlcl8pIFwKKyAgICBERUNMQVJFX1VOVVNFRF9TTE9UX1ZJU0lUT1JfU1RS
VUNUX0VYUEFOREVSMihjb3VudGVyXykKKworI2RlZmluZSBERUNMQVJFX1VOVVNFRF9TTE9UX1ZJ
U0lUT1JfU1RSVUNUKCkgXAorICAgIERFQ0xBUkVfVU5VU0VEX1NMT1RfVklTSVRPUl9TVFJVQ1Rf
RVhQQU5ERVIoX19DT1VOVEVSX18pCisKKy8vIE1hY3JvcyBmb3IgaW5zdGFuY2UgY3VzdG9tIHZp
c2l0b3IgbWV0aG9kLgorCisjZGVmaW5lIERFQ0xBUkVfSU5TVEFOQ0VfU0xPVF9WSVNJVE9SX01F
VEhPRF9JTVBMKHJldHVyblR5cGVfLCBtZXRob2ROYW1lXywgcG9zdE1vZGlmaWVyXykgXAorICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHJldHVyblR5cGVfIG1ldGhvZE5hbWVfIyNJbXBs
KFZpc2l0b3ImIHZpc2l0b3IpOyBcCisgICAgcmV0dXJuVHlwZV8gbWV0aG9kTmFtZV8oU2xvdFZp
c2l0b3ImKSBwb3N0TW9kaWZpZXJfOyBcCisgICAgcmV0dXJuVHlwZV8gbWV0aG9kTmFtZV8oQWJz
dHJhY3RTbG90VmlzaXRvciYpIHBvc3RNb2RpZmllcl87IFwKKyAgICBERUNMQVJFX1VOVVNFRF9T
TE9UX1ZJU0lUT1JfU1RSVUNUKCkKKworI2RlZmluZSBERUNMQVJFX0lOU1RBTkNFX1NMT1RfVklT
SVRPUl9NRVRIT0QocmV0dXJuVHlwZV8sIG1ldGhvZE5hbWVfKSBcCisgICAgREVDTEFSRV9JTlNU
QU5DRV9TTE9UX1ZJU0lUT1JfTUVUSE9EX0lNUEwocmV0dXJuVHlwZV8sIG1ldGhvZE5hbWVfLCAp
CisKKworI2RlZmluZSBERUZJTkVfSU5TVEFOQ0VfU0xPVF9WSVNJVE9SX01FVEhPRChyZXR1cm5U
eXBlXywgY2xhc3NOYW1lXywgbWV0aG9kTmFtZV8pIFwKKyAgICByZXR1cm5UeXBlXyBjbGFzc05h
bWVfOjptZXRob2ROYW1lXyhTbG90VmlzaXRvciYgdmlzaXRvcikgeyBtZXRob2ROYW1lXyMjSW1w
bCh2aXNpdG9yKTsgfSBcCisgICAgcmV0dXJuVHlwZV8gY2xhc3NOYW1lXzo6bWV0aG9kTmFtZV8o
QWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikgIHsgbWV0aG9kTmFtZV8jI0ltcGwodmlzaXRv
cik7IH0gXAorICAgIERFQ0xBUkVfVU5VU0VEX1NMT1RfVklTSVRPUl9TVFJVQ1QoKQorCisvLyBN
YWNyb3MgZm9yIGluc3RhbmNlIHZpc2l0Q2hpbGRyZW4oKS4KKworI2RlZmluZSBERUNMQVJFX0lO
U1RBTkNFX1ZJU0lUX0NISUxEUkVOIFwKKyAgICBERUNMQVJFX0lOU1RBTkNFX1NMT1RfVklTSVRP
Ul9NRVRIT0Qodm9pZCwgdmlzaXRDaGlsZHJlbikKKworCisjZGVmaW5lIERFRklORV9JTlNUQU5D
RV9WSVNJVF9DSElMRFJFTihjbGFzc05hbWVfKSBcCisgICAgREVGSU5FX0lOU1RBTkNFX1NMT1Rf
VklTSVRPUl9NRVRIT0Qodm9pZCwgY2xhc3NOYW1lXywgdmlzaXRDaGlsZHJlbikKKworLy8gTWFj
cm9zIGZvciBzdGF0aWMgdmlzaXRDaGlsZHJlbigpLgorCisjZGVmaW5lIERFQ0xBUkVfVklTSVRf
Q0hJTERSRU5fSU1QTCBcCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gc3RhdGljIHZv
aWQgdmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiwgVmlzaXRvciYpCisKKyNkZWZpbmUgREVDTEFS
RV9WSVNJVF9DSElMRFJFTiBcCisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTl9JTVBMOyBcCisg
ICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIEFic3RyYWN0U2xvdFZp
c2l0b3ImIHZpc2l0b3IpOyBcCisgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwq
IGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorCisjZGVmaW5lIERFQ0xBUkVfRVhQT1JUX1ZJ
U0lUX0NISUxEUkVOIFwKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOX0lNUEw7IFwKKyAgICBK
U19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIEFic3Ry
YWN0U2xvdFZpc2l0b3ImKTsgXAorICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIHZp
c2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKQorCisjZGVmaW5lIERFQ0xBUkVfSU5M
SU5FX1ZJU0lUX0NISUxEUkVOIFwKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOX0lNUEw7IFwK
KyAgICBpbmxpbmUgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBBYnN0cmFjdFNs
b3RWaXNpdG9yJik7IFwKKyAgICBpbmxpbmUgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0Nl
bGwqLCBTbG90VmlzaXRvciYpCisKKyNkZWZpbmUgREVDTEFSRV9URU1QTEFURV9WSVNJVF9DSElM
RFJFTiBcCisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTgorCisKKyNkZWZpbmUgREVGSU5FX1ZJ
U0lUX0NISUxEUkVOKGNsYXNzTmFtZV8pIFwKKyAgICB2b2lkIGNsYXNzTmFtZV86OnZpc2l0Q2hp
bGRyZW4oSlNDZWxsKiBjZWxsLCBBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKSB7IHZpc2l0
Q2hpbGRyZW5JbXBsKGNlbGwsIHZpc2l0b3IpOyB9IFwKKyAgICB2b2lkIGNsYXNzTmFtZV86OnZp
c2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikgeyB2aXNpdENo
aWxkcmVuSW1wbChjZWxsLCB2aXNpdG9yKTsgfSBcCisgICAgREVDTEFSRV9VTlVTRURfU0xPVF9W
SVNJVE9SX1NUUlVDVCgpCisKKyNkZWZpbmUgREVGSU5FX0VYUE9SVF9WSVNJVF9DSElMRFJFTihj
bGFzc05hbWVfKSBcCisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBjbGFzc05hbWVfOjp2aXNp
dENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikgeyB2
aXNpdENoaWxkcmVuSW1wbChjZWxsLCB2aXNpdG9yKTsgfSBcCisgICAgSlNfRVhQT1JUX1BSSVZB
VEUgdm9pZCBjbGFzc05hbWVfOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0
b3ImIHZpc2l0b3IpIHsgdmlzaXRDaGlsZHJlbkltcGwoY2VsbCwgdmlzaXRvcik7IH0gXAorICAg
IERFQ0xBUkVfVU5VU0VEX1NMT1RfVklTSVRPUl9TVFJVQ1QoKQorCisjZGVmaW5lIERFRklORV9J
TkxJTkVfVklTSVRfQ0hJTERSRU4oY2xhc3NOYW1lXykgXAorICAgIGlubGluZSB2b2lkIGNsYXNz
TmFtZV86OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBBYnN0cmFjdFNsb3RWaXNpdG9yJiB2
aXNpdG9yKSB7IHZpc2l0Q2hpbGRyZW5JbXBsKGNlbGwsIHZpc2l0b3IpOyB9IFwKKyAgICBpbmxp
bmUgdm9pZCBjbGFzc05hbWVfOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0
b3ImIHZpc2l0b3IpIHsgdmlzaXRDaGlsZHJlbkltcGwoY2VsbCwgdmlzaXRvcik7IH0gXAorICAg
IERFQ0xBUkVfVU5VU0VEX1NMT1RfVklTSVRPUl9TVFJVQ1QoKQorCisjZGVmaW5lIERFRklORV9U
RU1QTEFURV9WSVNJVF9DSElMRFJFTih0ZW1wbGF0ZUNsYXVzZV8sIGNsYXNzTmFtZV8pIFwKKyAg
ICB0ZW1wbGF0ZUNsYXVzZV8gdm9pZCBjbGFzc05hbWVfOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCog
Y2VsbCwgQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikgeyB2aXNpdENoaWxkcmVuSW1wbChj
ZWxsLCB2aXNpdG9yKTsgfSBcCisgICAgdGVtcGxhdGVDbGF1c2VfIHZvaWQgY2xhc3NOYW1lXzo6
dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKSB7IHZpc2l0
Q2hpbGRyZW5JbXBsKGNlbGwsIHZpc2l0b3IpOyB9IFwKKyAgICBERUNMQVJFX1VOVVNFRF9TTE9U
X1ZJU0lUT1JfU1RSVUNUKCkKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKK3VzaW5nIEpTQzo6QWJz
dHJhY3RTbG90VmlzaXRvcjsKK3VzaW5nIEpTQzo6SlNDZWxsOwordXNpbmcgSlNDOjpTbG90Vmlz
aXRvcjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N1YnNwYWNlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3Vic3BhY2UuaAkocmV2aXNpb24g
MjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3Vic3BhY2UuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzQsNiArMzQsNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAorY2xhc3MgQWJz
dHJhY3RTbG90VmlzaXRvcjsgLy8gbWxhbQogY2xhc3MgQWxpZ25lZE1lbW9yeUFsbG9jYXRvcjsK
IGNsYXNzIEhlYXBDZWxsVHlwZTsKIApAQCAtODcsNyArODgsNyBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBmb3JFYWNoTWFya2VkQ2VsbChjb25zdCBGdW5jJik7CiAgICAgCiAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgRnVuYz4KLSAgICBSZWY8U2hhcmVkVGFzazx2b2lkKFNsb3RWaXNpdG9yJik+PiBmb3JF
YWNoTWFya2VkQ2VsbEluUGFyYWxsZWwoY29uc3QgRnVuYyYpOworICAgIFJlZjxTaGFyZWRUYXNr
PHZvaWQoQWJzdHJhY3RTbG90VmlzaXRvciYpPj4gZm9yRWFjaE1hcmtlZENlbGxJblBhcmFsbGVs
KGNvbnN0IEZ1bmMmKTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CiAgICAgdm9pZCBm
b3JFYWNoTGl2ZUNlbGwoY29uc3QgRnVuYyYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvU3Vic3BhY2VJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvU3Vic3BhY2VJbmxpbmVzLmgJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL1N1YnNwYWNlSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC04
Niw5ICs4Niw5IEBAIHZvaWQgU3Vic3BhY2U6OmZvckVhY2hNYXJrZWRDZWxsKGNvbnN0IEYKIH0K
IAogdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KLVJlZjxTaGFyZWRUYXNrPHZvaWQoU2xvdFZpc2l0
b3ImKT4+IFN1YnNwYWNlOjpmb3JFYWNoTWFya2VkQ2VsbEluUGFyYWxsZWwoY29uc3QgRnVuYyYg
ZnVuYykKK1JlZjxTaGFyZWRUYXNrPHZvaWQoQWJzdHJhY3RTbG90VmlzaXRvciYpPj4gU3Vic3Bh
Y2U6OmZvckVhY2hNYXJrZWRDZWxsSW5QYXJhbGxlbChjb25zdCBGdW5jJiBmdW5jKQogewotICAg
IGNsYXNzIFRhc2sgZmluYWwgOiBwdWJsaWMgU2hhcmVkVGFzazx2b2lkKFNsb3RWaXNpdG9yJik+
IHsKKyAgICBjbGFzcyBUYXNrIGZpbmFsIDogcHVibGljIFNoYXJlZFRhc2s8dm9pZChBYnN0cmFj
dFNsb3RWaXNpdG9yJik+IHsKICAgICBwdWJsaWM6CiAgICAgICAgIFRhc2soU3Vic3BhY2UmIHN1
YnNwYWNlLCBjb25zdCBGdW5jJiBmdW5jKQogICAgICAgICAgICAgOiBtX3N1YnNwYWNlKHN1YnNw
YWNlKQpAQCAtOTcsNyArOTcsNyBAQCBSZWY8U2hhcmVkVGFzazx2b2lkKFNsb3RWaXNpdG9yJik+
PiBTdWJzCiAgICAgICAgIHsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgdm9pZCBydW4o
U2xvdFZpc2l0b3ImIHZpc2l0b3IpIGZpbmFsCisgICAgICAgIHZvaWQgcnVuKEFic3RyYWN0U2xv
dFZpc2l0b3ImIHZpc2l0b3IpIGZpbmFsCiAgICAgICAgIHsKICAgICAgICAgICAgIHdoaWxlIChN
YXJrZWRCbG9jazo6SGFuZGxlKiBoYW5kbGUgPSBtX2Jsb2NrU291cmNlLT5ydW4oKSkgewogICAg
ICAgICAgICAgICAgIGhhbmRsZS0+Zm9yRWFjaE1hcmtlZENlbGwoCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9WaXNpdENvdW50ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9WaXNpdENvdW50ZXIuaAkocmV2aXNpb24gMjcxNDQzKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVmlzaXRDb3VudGVyLmgJKHdvcmtpbmcgY29weSkKQEAg
LTI1LDcgKzI1LDcgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlICJTbG90VmlzaXRvci5o
IgorI2luY2x1ZGUgIkFic3RyYWN0U2xvdFZpc2l0b3IuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAK
QEAgLTMzLDEzICszMywxMyBAQCBjbGFzcyBWaXNpdENvdW50ZXIgewogcHVibGljOgogICAgIFZp
c2l0Q291bnRlcigpIHsgfQogICAgIAotICAgIFZpc2l0Q291bnRlcihTbG90VmlzaXRvciYgdmlz
aXRvcikKKyAgICBWaXNpdENvdW50ZXIoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKICAg
ICAgICAgOiBtX3Zpc2l0b3IoJnZpc2l0b3IpCiAgICAgICAgICwgbV9pbml0aWFsVmlzaXRDb3Vu
dCh2aXNpdG9yLnZpc2l0Q291bnQoKSkKICAgICB7CiAgICAgfQogICAgIAotICAgIFNsb3RWaXNp
dG9yJiB2aXNpdG9yKCkgY29uc3QgeyByZXR1cm4gKm1fdmlzaXRvcjsgfQorICAgIEFic3RyYWN0
U2xvdFZpc2l0b3ImIHZpc2l0b3IoKSBjb25zdCB7IHJldHVybiAqbV92aXNpdG9yOyB9CiAgICAg
CiAgICAgc2l6ZV90IHZpc2l0Q291bnQoKSBjb25zdAogICAgIHsKQEAgLTQ3LDcgKzQ3LDcgQEAg
cHVibGljOgogICAgIH0KICAgICAKIHByaXZhdGU6Ci0gICAgU2xvdFZpc2l0b3IqIG1fdmlzaXRv
ciB7IG51bGxwdHIgfTsKKyAgICBBYnN0cmFjdFNsb3RWaXNpdG9yKiBtX3Zpc2l0b3IgeyBudWxs
cHRyIH07CiAgICAgc2l6ZV90IG1faW5pdGlhbFZpc2l0Q291bnQgeyAwIH07CiB9OwogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrQmxvY2suY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtCbG9jay5jcHAJKHJldmlzaW9uIDI3MTQ0
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtCbG9jay5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTk4LDggKzk4LDggQEAgdm9pZCBXZWFrQmxvY2s6OnN3ZWVwKCkKICAgICBBU1NF
UlQoIW1fc3dlZXBSZXN1bHQuaXNOdWxsKCkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBDb250
YWluZXJUeXBlPgotdm9pZCBXZWFrQmxvY2s6OnNwZWNpYWxpemVkVmlzaXQoQ29udGFpbmVyVHlw
ZSYgY29udGFpbmVyLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIENv
bnRhaW5lclR5cGUsIHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFdlYWtCbG9jazo6c3BlY2lhbGl6
ZWRWaXNpdChDb250YWluZXJUeXBlJiBjb250YWluZXIsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAg
ICAgSGVhcFZlcnNpb24gbWFya2luZ1ZlcnNpb24gPSB2aXNpdG9yLm1hcmtpbmdWZXJzaW9uKCk7
CiAKQEAgLTEzNCw3ICsxMzQsOSBAQCB2b2lkIFdlYWtCbG9jazo6c3BlY2lhbGl6ZWRWaXNpdChD
b250YWluCiAgICAgfQogfQogCi12b2lkIFdlYWtCbG9jazo6dmlzaXQoU2xvdFZpc2l0b3ImIHZp
c2l0b3IpCisvL3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+CisvL3ZvaWQgV2Vha0Jsb2NrOjp2
aXNpdChWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBXZWFrQmxvY2s6OnZpc2l0MShBYnN0cmFjdFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIC8vIElmIGEgYmxvY2sgaXMgY29tcGxldGVseSBl
bXB0eSwgYSB2aXNpdCB3b24ndCBoYXZlIGFueSBlZmZlY3QuCiAgICAgaWYgKGlzRW1wdHkoKSkK
QEAgLTE0OSw2ICsxNTEsOSBAQCB2b2lkIFdlYWtCbG9jazo6dmlzaXQoU2xvdFZpc2l0b3ImIHZp
c2l0CiAgICAgICAgIHNwZWNpYWxpemVkVmlzaXQobV9jb250YWluZXIubWFya2VkQmxvY2soKSwg
dmlzaXRvcik7CiB9CiAKKy8vdGVtcGxhdGUgdm9pZCBXZWFrQmxvY2s6OnZpc2l0KFNsb3RWaXNp
dG9yJik7CisvL3RlbXBsYXRlIHZvaWQgV2Vha0Jsb2NrOjp2aXNpdChEZWJ1Z1Nsb3RWaXNpdG9y
Jik7CisKIHZvaWQgV2Vha0Jsb2NrOjpyZWFwKCkKIHsKICAgICAvLyBJZiBhIGJsb2NrIGlzIGNv
bXBsZXRlbHkgZW1wdHksIGEgcmVhcGluZyB3b24ndCBoYXZlIGFueSBlZmZlY3QuCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrQmxvY2suaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrQmxvY2suaAkocmV2aXNpb24gMjcxNDQzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha0Jsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAg
LTMyLDggKzMyLDkgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKK2NsYXNzIEFic3RyYWN0U2xvdFZp
c2l0b3I7CiBjbGFzcyBIZWFwOwotY2xhc3MgU2xvdFZpc2l0b3I7CisvL2NsYXNzIFNsb3RWaXNp
dG9yOwogCiBERUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihXZWFrQmxvY2sp
OwogCkBAIC02NSw3ICs2Niw4IEBAIHB1YmxpYzoKICAgICB2b2lkIHN3ZWVwKCk7CiAgICAgU3dl
ZXBSZXN1bHQgdGFrZVN3ZWVwUmVzdWx0KCk7CiAKLSAgICB2b2lkIHZpc2l0KFNsb3RWaXNpdG9y
Jik7CisvLyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIHZpc2l0KFZpc2l0b3Im
KTsKKyAgICB2b2lkIHZpc2l0MShBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAKICAgICB2b2lkIHJl
YXAoKTsKIApAQCAtNzUsOCArNzcsOCBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIHN0YXRpYyBG
cmVlQ2VsbCogYXNGcmVlQ2VsbChXZWFrSW1wbCopOwogICAgIAotICAgIHRlbXBsYXRlPHR5cGVu
YW1lIENvbnRhaW5lclR5cGU+Ci0gICAgdm9pZCBzcGVjaWFsaXplZFZpc2l0KENvbnRhaW5lclR5
cGUmLCBTbG90VmlzaXRvciYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIENvbnRhaW5lclR5cGUs
IHR5cGVuYW1lIFZpc2l0b3I+CisgICAgdm9pZCBzcGVjaWFsaXplZFZpc2l0KENvbnRhaW5lclR5
cGUmLCBWaXNpdG9yJik7CiAKICAgICBleHBsaWNpdCBXZWFrQmxvY2soQ2VsbENvbnRhaW5lcik7
CiAgICAgdm9pZCBmaW5hbGl6ZShXZWFrSW1wbCopOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvV2Vha0hhbmRsZU93bmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9XZWFrSGFuZGxlT3duZXIuY3BwCShyZXZpc2lvbiAyNzE0NDMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrSGFuZGxlT3duZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zNSw3ICszNSw3IEBAIFdlYWtIYW5kbGVPd25lcjo6fldlYWtIYW5kbGVPd25lcigp
CiB7CiB9CiAKLWJvb2wgV2Vha0hhbmRsZU93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290
cyhIYW5kbGU8VW5rbm93bj4sIHZvaWQqLCBTbG90VmlzaXRvciYsIGNvbnN0IGNoYXIqKikKK2Jv
b2wgV2Vha0hhbmRsZU93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhIYW5kbGU8VW5r
bm93bj4sIHZvaWQqLCBBYnN0cmFjdFNsb3RWaXNpdG9yJiwgY29uc3QgY2hhcioqKQogewogICAg
IHJldHVybiBmYWxzZTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtI
YW5kbGVPd25lci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dl
YWtIYW5kbGVPd25lci5oCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9XZWFrSGFuZGxlT3duZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjksMTMgKzI5LDEz
IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1jbGFzcyBTbG90VmlzaXRvcjsKK2NsYXNzIEFic3Ry
YWN0U2xvdFZpc2l0b3I7CiAKIGNsYXNzIEpTX0VYUE9SVF9QUklWQVRFIFdlYWtIYW5kbGVPd25l
ciB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+V2Vha0hhbmRsZU93bmVyKCk7CiAgICAgLy8gcmVh
c29uIHdpbGwgb25seSBiZSBub24tbnVsbCB3aGVuIGdlbmVyYXRpbmcgYSBkZWJ1ZyBHQyBoZWFw
IHNuYXBzaG90LgotICAgIHZpcnR1YWwgYm9vbCBpc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhI
YW5kbGU8VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIFNsb3RWaXNpdG9yJiwgY2hhciBjb25zdCoq
IHJlYXNvbiA9IG51bGxwdHIpOworICAgIHZpcnR1YWwgYm9vbCBpc1JlYWNoYWJsZUZyb21PcGFx
dWVSb290cyhIYW5kbGU8VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIEFic3RyYWN0U2xvdFZpc2l0
b3ImLCBjaGFyIGNvbnN0KiogcmVhc29uID0gbnVsbHB0cik7CiAgICAgdmlydHVhbCB2b2lkIGZp
bmFsaXplKEhhbmRsZTxVbmtub3duPiwgdm9pZCogY29udGV4dCk7CiB9OwogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtJbmxpbmVzLmgJKHJldmlzaW9uIDI3MTQ0MykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTI2LDYgKzI2LDcgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiSlNDYXN0LmgiCisj
aW5jbHVkZSAiV2Vhay5oIgogI2luY2x1ZGUgIldlYWtTZXRJbmxpbmVzLmgiCiAjaW5jbHVkZSA8
d3RmL0Fzc2VydGlvbnMuaD4KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vh
a1NldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtTZXQu
aAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha1Nl
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC01MSw3ICs1MSw4IEBAIHB1YmxpYzoKICAgICBib29sIGlz
RW1wdHkoKSBjb25zdDsKICAgICBib29sIGlzVHJpdmlhbGx5RGVzdHJ1Y3RpYmxlKCkgY29uc3Q7
CiAKLSAgICB2b2lkIHZpc2l0KFNsb3RWaXNpdG9yJik7CisvLyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBWaXNpdG9yPiB2b2lkIHZpc2l0KFZpc2l0b3ImKTsKKyAgICB2b2lkIHZpc2l0MShBYnN0cmFj
dFNsb3RWaXNpdG9yJik7CiAKICAgICB2b2lkIHJlYXAoKTsKICAgICB2b2lkIHN3ZWVwKCk7CkBA
IC0xMTQsMTAgKzExNSwxMiBAQCBpbmxpbmUgdm9pZCBXZWFrU2V0OjpsYXN0Q2hhbmNlVG9GaW5h
bGl6CiAgICAgICAgIGJsb2NrLT5sYXN0Q2hhbmNlVG9GaW5hbGl6ZSgpOwogfQogCi1pbmxpbmUg
dm9pZCBXZWFrU2V0Ojp2aXNpdChTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vdGVtcGxhdGU8dHlw
ZW5hbWUgVmlzaXRvcj4KKy8vaW5saW5lIHZvaWQgV2Vha1NldDo6dmlzaXQoVmlzaXRvciYgdmlz
aXRvcikKK2lubGluZSB2b2lkIFdlYWtTZXQ6OnZpc2l0MShBYnN0cmFjdFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQogewogICAgIGZvciAoV2Vha0Jsb2NrKiBibG9jayA9IG1fYmxvY2tzLmhlYWQoKTsg
YmxvY2s7IGJsb2NrID0gYmxvY2stPm5leHQoKSkKLSAgICAgICAgYmxvY2stPnZpc2l0KHZpc2l0
b3IpOworICAgICAgICBibG9jay0+dmlzaXQxKHZpc2l0b3IpOwogfQogCiBpbmxpbmUgdm9pZCBX
ZWFrU2V0OjpyZWFwKCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9T
aGFkb3dDaGlja2VuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50
ZXJwcmV0ZXIvU2hhZG93Q2hpY2tlbi5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TaGFkb3dDaGlja2VuLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDQwLDcgKzQ0MCw3IEBAIHZvaWQgU2hhZG93Q2hpY2tlbjo6dXBkYXRlKFZNJiB2bSwg
Q2FsbEYKICAgICAgICAgZGF0YUxvZygiICAgIEFmdGVyIGNsZWFuLXVwOiAiLCAqdGhpcywgIlxu
Iik7CiB9CiAKLXZvaWQgU2hhZG93Q2hpY2tlbjo6dmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYg
dmlzaXRvcikKK3ZvaWQgU2hhZG93Q2hpY2tlbjo6dmlzaXRDaGlsZHJlbihBYnN0cmFjdFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQogewogICAgIGZvciAodW5zaWduZWQgaSA9IG1fbG9nQ3Vyc29yIC0g
bV9sb2c7IGktLTspIHsKICAgICAgICAgSlNPYmplY3QqIGNhbGxlZSA9IG1fbG9nW2ldLmNhbGxl
ZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TaGFkb3dDaGlja2Vu
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1NoYWRv
d0NoaWNrZW4uaAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
dGVycHJldGVyL1NoYWRvd0NoaWNrZW4uaAkod29ya2luZyBjb3B5KQpAQCAtMzUsMTMgKzM1LDEz
IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCitjbGFzcyBBYnN0cmFjdFNsb3RWaXNpdG9yOwogY2xh
c3MgQ2FsbEZyYW1lOwogY2xhc3MgQ29kZUJsb2NrOwogY2xhc3MgSlNBcnJheTsKIGNsYXNzIEpT
T2JqZWN0OwogY2xhc3MgSlNTY29wZTsKIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKLWNs
YXNzIFNsb3RWaXNpdG9yOwogY2xhc3MgVk07CiAKIC8vIFNoYWRvd0NoaWNrZW4gaXMgYSBsb2cg
dGhhdCBjYW4gYmUgdXNlZCB0byBwcm9kdWNlIGEgc2hhZG93IHN0YWNrIG9mIENISUNLRU4tc3R5
bGUgc3RhY2sgZnJhbWVzLgpAQCAtMTk2LDcgKzE5Niw3IEBAIHB1YmxpYzoKICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBGdW5jdG9yPgogICAgIHZvaWQgaXRlcmF0ZShWTSYsIENhbGxGcmFtZSosIGNv
bnN0IEZ1bmN0b3ImKTsKICAgICAKLSAgICB2b2lkIHZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3Im
KTsKKyAgICB2b2lkIHZpc2l0Q2hpbGRyZW4oQWJzdHJhY3RTbG90VmlzaXRvciYpOwogICAgIHZv
aWQgcmVzZXQoKTsKICAgICAKICAgICAvLyBKSVQgc3VwcG9ydC4KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvR0NBd2FyZUpJVFN0dWJSb3V0aW5lLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0dDQXdhcmVKSVRTdHViUm91dGluZS5jcHAJKHJldmlz
aW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvR0NBd2FyZUpJVFN0dWJS
b3V0aW5lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzMsMTAgKzczLDE1IEBAIHZvaWQgR0NBd2Fy
ZUpJVFN0dWJSb3V0aW5lOjpkZWxldGVGcm9tR0MKICAgICBkZWxldGUgdGhpczsKIH0KIAotdm9p
ZCBHQ0F3YXJlSklUU3R1YlJvdXRpbmU6Om1hcmtSZXF1aXJlZE9iamVjdHNJbnRlcm5hbChTbG90
VmlzaXRvciYpCisvL3ZvaWQgR0NBd2FyZUpJVFN0dWJSb3V0aW5lOjptYXJrUmVxdWlyZWRPYmpl
Y3RzSW50ZXJuYWwoU2xvdFZpc2l0b3ImKQordm9pZCBHQ0F3YXJlSklUU3R1YlJvdXRpbmU6Om1h
cmtSZXF1aXJlZE9iamVjdHNJbnRlcm5hbDEoQWJzdHJhY3RTbG90VmlzaXRvciYpCiB7CiB9CiAK
Ky8vdm9pZCBHQ0F3YXJlSklUU3R1YlJvdXRpbmU6Om1hcmtSZXF1aXJlZE9iamVjdHNJbnRlcm5h
bChEZWJ1Z1Nsb3RWaXNpdG9yJikKKy8veworLy99CisKIE1hcmtpbmdHQ0F3YXJlSklUU3R1YlJv
dXRpbmU6Ok1hcmtpbmdHQ0F3YXJlSklUU3R1YlJvdXRpbmUoCiAgICAgY29uc3QgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiYgY29kZSwgVk0mIHZtLCBjb25zdCBK
U0NlbGwqIG93bmVyLAogICAgIGNvbnN0IFZlY3RvcjxKU0NlbGwqPiYgY2VsbHMsIEJhZzxDYWxs
TGlua0luZm8+JiYgY2FsbExpbmtJbmZvcykKQEAgLTkyLDEyICs5NywxOSBAQCBNYXJraW5nR0NB
d2FyZUpJVFN0dWJSb3V0aW5lOjp+TWFya2luZ0dDCiB7CiB9CiAKLXZvaWQgTWFya2luZ0dDQXdh
cmVKSVRTdHViUm91dGluZTo6bWFya1JlcXVpcmVkT2JqZWN0c0ludGVybmFsKFNsb3RWaXNpdG9y
JiB2aXNpdG9yKQorLy92b2lkIE1hcmtpbmdHQ0F3YXJlSklUU3R1YlJvdXRpbmU6Om1hcmtSZXF1
aXJlZE9iamVjdHNJbnRlcm5hbChTbG90VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgTWFya2luZ0dD
QXdhcmVKSVRTdHViUm91dGluZTo6bWFya1JlcXVpcmVkT2JqZWN0c0ludGVybmFsMShBYnN0cmFj
dFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGZvciAoYXV0byYgZW50cnkgOiBtX2NlbGxz
KQogICAgICAgICB2aXNpdG9yLmFwcGVuZChlbnRyeSk7CiB9CiAKKy8vIEZJWE1FIGRlZHVwZT8K
Ky8vdm9pZCBNYXJraW5nR0NBd2FyZUpJVFN0dWJSb3V0aW5lOjptYXJrUmVxdWlyZWRPYmplY3Rz
SW50ZXJuYWwoRGVidWdTbG90VmlzaXRvciYgdmlzaXRvcikKKy8veworLy8gICAgZm9yIChhdXRv
JiBlbnRyeSA6IG1fY2VsbHMpCisvLyAgICAgICAgdmlzaXRvci5hcHBlbmQoZW50cnkpOworLy99
CiAKIEdDQXdhcmVKSVRTdHViUm91dGluZVdpdGhFeGNlcHRpb25IYW5kbGVyOjpHQ0F3YXJlSklU
U3R1YlJvdXRpbmVXaXRoRXhjZXB0aW9uSGFuZGxlcigKICAgICBjb25zdCBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY8SklUU3R1YlJvdXRpbmVQdHJUYWc+JiBjb2RlLCBWTSYgdm0sICBjb25zdCBKU0Nl
bGwqIG93bmVyLCBjb25zdCBWZWN0b3I8SlNDZWxsKj4mIGNlbGxzLCBCYWc8Q2FsbExpbmtJbmZv
PiYmIGNhbGxMaW5rSW5mb3MsCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0dDQXdh
cmVKSVRTdHViUm91dGluZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvR0NBd2FyZUpJVFN0dWJSb3V0aW5lLmgJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvR0NBd2FyZUpJVFN0dWJSb3V0aW5lLmgJKHdvcmtpbmcgY29weSkK
QEAgLTYwLDEwICs2MCwxMiBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBHQ0F3YXJlSklUU3R1YlJvdXRpbmUoY29kZSwgdm0pKTsKICAgICB9Ci0gICAgCi0g
ICAgdm9pZCBtYXJrUmVxdWlyZWRPYmplY3RzKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorCisvLyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgorLy8gICAgdm9pZCBtYXJrUmVxdWlyZWRPYmpl
Y3RzKFZpc2l0b3ImIHZpc2l0b3IpCisgICAgdm9pZCBtYXJrUmVxdWlyZWRPYmplY3RzMShBYnN0
cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogICAgIHsKLSAgICAgICAgbWFya1JlcXVpcmVkT2Jq
ZWN0c0ludGVybmFsKHZpc2l0b3IpOworICAgICAgICBtYXJrUmVxdWlyZWRPYmplY3RzSW50ZXJu
YWwxKHZpc2l0b3IpOwogICAgIH0KICAgICAKICAgICB2b2lkIGRlbGV0ZUZyb21HQygpOwpAQCAt
NzEsNyArNzMsOSBAQCBwdWJsaWM6CiBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBvYnNlcnZlWmVyb1Jl
ZkNvdW50KCkgb3ZlcnJpZGU7CiAgICAgCi0gICAgdmlydHVhbCB2b2lkIG1hcmtSZXF1aXJlZE9i
amVjdHNJbnRlcm5hbChTbG90VmlzaXRvciYpOworLy8gICAgdmlydHVhbCB2b2lkIG1hcmtSZXF1
aXJlZE9iamVjdHNJbnRlcm5hbChTbG90VmlzaXRvciYpOworLy8gICAgdmlydHVhbCB2b2lkIG1h
cmtSZXF1aXJlZE9iamVjdHNJbnRlcm5hbChEZWJ1Z1Nsb3RWaXNpdG9yJik7CisgICAgdmlydHVh
bCB2b2lkIG1hcmtSZXF1aXJlZE9iamVjdHNJbnRlcm5hbDEoQWJzdHJhY3RTbG90VmlzaXRvciYp
OwogCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBKSVRTdHViUm91dGluZVNldDsKQEAgLTg5
LDcgKzkzLDkgQEAgcHVibGljOgogICAgIH5NYXJraW5nR0NBd2FyZUpJVFN0dWJSb3V0aW5lKCkg
b3ZlcnJpZGU7CiAgICAgCiBwcm90ZWN0ZWQ6Ci0gICAgdm9pZCBtYXJrUmVxdWlyZWRPYmplY3Rz
SW50ZXJuYWwoU2xvdFZpc2l0b3ImKSBvdmVycmlkZTsKKy8vICAgIHZvaWQgbWFya1JlcXVpcmVk
T2JqZWN0c0ludGVybmFsKFNsb3RWaXNpdG9yJikgb3ZlcnJpZGU7CisvLyAgICB2b2lkIG1hcmtS
ZXF1aXJlZE9iamVjdHNJbnRlcm5hbChEZWJ1Z1Nsb3RWaXNpdG9yJikgb3ZlcnJpZGU7CisgICAg
dm9pZCBtYXJrUmVxdWlyZWRPYmplY3RzSW50ZXJuYWwxKEFic3RyYWN0U2xvdFZpc2l0b3ImKSBv
dmVycmlkZTsKIAogcHJpdmF0ZToKICAgICBWZWN0b3I8V3JpdGVCYXJyaWVyPEpTQ2VsbD4+IG1f
Y2VsbHM7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1BvbHltb3JwaGljQ2FsbFN0
dWJSb3V0aW5lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Bv
bHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lLmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9Qb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEzNSwxMiArMTM1LDIwIEBAIGJvb2wgUG9seW1vcnBoaWNDYWxsU3R1YlJv
dXRpbmU6OnZpc2l0V2UKICAgICByZXR1cm4gaXNTdGlsbExpdmU7CiB9CiAKLXZvaWQgUG9seW1v
cnBoaWNDYWxsU3R1YlJvdXRpbmU6Om1hcmtSZXF1aXJlZE9iamVjdHNJbnRlcm5hbChTbG90Vmlz
aXRvciYgdmlzaXRvcikKKy8vdm9pZCBQb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZTo6bWFya1Jl
cXVpcmVkT2JqZWN0c0ludGVybmFsKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBQb2x5bW9y
cGhpY0NhbGxTdHViUm91dGluZTo6bWFya1JlcXVpcmVkT2JqZWN0c0ludGVybmFsMShBYnN0cmFj
dFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGZvciAoYXV0byYgdmFyaWFudCA6IG1fdmFy
aWFudHMpCiAgICAgICAgIHZpc2l0b3IuYXBwZW5kKHZhcmlhbnQpOwogfQogCisvLy8vIG1sYW0g
RklYTUUgZGVkdXBlPz8/CisvL3ZvaWQgUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmU6Om1hcmtS
ZXF1aXJlZE9iamVjdHNJbnRlcm5hbChEZWJ1Z1Nsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy97Cisv
LyAgICBmb3IgKGF1dG8mIHZhcmlhbnQgOiBtX3ZhcmlhbnRzKQorLy8gICAgICAgIHZpc2l0b3Iu
YXBwZW5kKHZhcmlhbnQpOworLy99CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8g
RU5BQkxFKEpJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUG9seW1vcnBoaWND
YWxsU3R1YlJvdXRpbmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L1BvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lLmgJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTA1LDcgKzEwNSw5IEBAIHB1YmxpYzoKICAgICBib29sIHZpc2l0V2VhayhW
TSYpIGZpbmFsOwogCiBwcml2YXRlOgotICAgIHZvaWQgbWFya1JlcXVpcmVkT2JqZWN0c0ludGVy
bmFsKFNsb3RWaXNpdG9yJikgZmluYWw7CisvLyAgICB2b2lkIG1hcmtSZXF1aXJlZE9iamVjdHNJ
bnRlcm5hbChTbG90VmlzaXRvciYpIGZpbmFsOworLy8gICAgdm9pZCBtYXJrUmVxdWlyZWRPYmpl
Y3RzSW50ZXJuYWwoRGVidWdTbG90VmlzaXRvciYpIGZpbmFsOworICAgIHZvaWQgbWFya1JlcXVp
cmVkT2JqZWN0c0ludGVybmFsMShBYnN0cmFjdFNsb3RWaXNpdG9yJikgZmluYWw7CiAKICAgICBW
ZWN0b3I8V3JpdGVCYXJyaWVyPEpTQ2VsbD4sIDI+IG1fdmFyaWFudHM7CiAgICAgVW5pcXVlQXJy
YXk8dWludDMyX3Q+IG1fZmFzdENvdW50czsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0Fic3RyYWN0TW9kdWxlUmVjb3JkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9BYnN0cmFjdE1vZHVsZVJlY29yZC5jcHAJKHJldmlzaW9uIDI3
MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Fic3RyYWN0TW9kdWxlUmVj
b3JkLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjAsNyArNjAsOCBAQCB2b2lkIEFic3RyYWN0TW9k
dWxlUmVjb3JkOjpmaW5pc2hDcmVhdGlvCiAgICAgcHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKHZtLCAiZGVwZW5kZW5jaWVzTWFwIl9zKSwgbV9kZXBlbmRlbmNpZXNNYXAuZ2V0
KCkpOwogfQogCi12b2lkIEFic3RyYWN0TW9kdWxlUmVjb3JkOjp2aXNpdENoaWxkcmVuKEpTQ2Vs
bCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
Pgordm9pZCBBYnN0cmFjdE1vZHVsZVJlY29yZDo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBj
ZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEFic3RyYWN0TW9kdWxlUmVjb3JkKiB0aGlz
T2JqZWN0ID0ganNDYXN0PEFic3RyYWN0TW9kdWxlUmVjb3JkKj4oY2VsbCk7CiAgICAgQVNTRVJU
X0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNzAsNiArNzEsOCBA
QCB2b2lkIEFic3RyYWN0TW9kdWxlUmVjb3JkOjp2aXNpdENoaWxkcmVuCiAgICAgdmlzaXRvci5h
cHBlbmQodGhpc09iamVjdC0+bV9kZXBlbmRlbmNpZXNNYXApOwogfQogCitERUZJTkVfVklTSVRf
Q0hJTERSRU4oQWJzdHJhY3RNb2R1bGVSZWNvcmQpOworCiB2b2lkIEFic3RyYWN0TW9kdWxlUmVj
b3JkOjphcHBlbmRSZXF1ZXN0ZWRNb2R1bGUoY29uc3QgSWRlbnRpZmllciYgbW9kdWxlTmFtZSkK
IHsKICAgICBtX3JlcXVlc3RlZE1vZHVsZXMuYWRkKG1vZHVsZU5hbWUuaW1wbCgpKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Fic3RyYWN0TW9kdWxlUmVjb3JkLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQWJzdHJhY3RNb2R1bGVS
ZWNvcmQuaAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvQWJzdHJhY3RNb2R1bGVSZWNvcmQuaAkod29ya2luZyBjb3B5KQpAQCAtMTM2LDcgKzEzNiw3
IEBAIHByb3RlY3RlZDoKICAgICBBYnN0cmFjdE1vZHVsZVJlY29yZChWTSYsIFN0cnVjdHVyZSos
IGNvbnN0IElkZW50aWZpZXImKTsKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTR2xvYmFsT2Jq
ZWN0KiwgVk0mKTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xv
dFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgdm9pZCBzZXRN
b2R1bGVFbnZpcm9ubWVudChKU0dsb2JhbE9iamVjdCosIEpTTW9kdWxlRW52aXJvbm1lbnQqKTsK
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJnTGlzdC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJnTGlzdC5jcHAJKHJldmlz
aW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FyZ0xpc3QuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC01MSw3ICs1MSw3IEBAIHZvaWQgQXJnTGlzdDo6Z2V0U2xpY2Uo
aW50IHN0YXJ0SW5kZXgsIEEKICAgICByZXN1bHQubV9hcmdDb3VudCA9ICBtX2FyZ0NvdW50IC0g
c3RhcnRJbmRleDsKIH0KIAotdm9pZCBNYXJrZWRBcmd1bWVudEJ1ZmZlcjo6bWFya0xpc3RzKFNs
b3RWaXNpdG9yJiB2aXNpdG9yLCBMaXN0U2V0JiBtYXJrU2V0KQordm9pZCBNYXJrZWRBcmd1bWVu
dEJ1ZmZlcjo6bWFya0xpc3RzKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIExpc3RTZXQm
IG1hcmtTZXQpCiB7CiAgICAgTGlzdFNldDo6aXRlcmF0b3IgZW5kID0gbWFya1NldC5lbmQoKTsK
ICAgICBmb3IgKExpc3RTZXQ6Oml0ZXJhdG9yIGl0ID0gbWFya1NldC5iZWdpbigpOyBpdCAhPSBl
bmQ7ICsraXQpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FyZ0xpc3Qu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcmdMaXN0LmgJ
KHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FyZ0xp
c3QuaAkod29ya2luZyBjb3B5KQpAQCAtMTE4LDcgKzExOCw3IEBAIHB1YmxpYzoKICAgICAgICAg
cmV0dXJuIHJlc3VsdDsKICAgICB9CiAgICAgICAgIAotICAgIHN0YXRpYyB2b2lkIG1hcmtMaXN0
cyhTbG90VmlzaXRvciYsIExpc3RTZXQmKTsKKyAgICBzdGF0aWMgdm9pZCBtYXJrTGlzdHMoQWJz
dHJhY3RTbG90VmlzaXRvciYsIExpc3RTZXQmKTsKIAogICAgIHZvaWQgZW5zdXJlQ2FwYWNpdHko
c2l6ZV90IHJlcXVlc3RlZENhcGFjaXR5KQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0NhY2hlYWJsZUlkZW50aWZpZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWFibGVJZGVudGlmaWVyLmgJKHJldmlzaW9uIDI3
MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlYWJsZUlkZW50aWZp
ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzksMTAgKzM5LDExIEBAIHVzaW5nIFdURjo6VW5pcXVl
ZFN0cmluZ0ltcGw7CiAKIG5hbWVzcGFjZSBKU0MgewogCitjbGFzcyBBYnN0cmFjdFNsb3RWaXNp
dG9yOwogY2xhc3MgQ29kZUJsb2NrOwogY2xhc3MgSWRlbnRpZmllcjsKIGNsYXNzIEpTQ2VsbDsK
LWNsYXNzIFNsb3RWaXNpdG9yOworLy9jbGFzcyBTbG90VmlzaXRvcjsKIAogY2xhc3MgQ2FjaGVh
YmxlSWRlbnRpZmllciB7CiBwdWJsaWM6CkBAIC04Nyw3ICs4OCw4IEBAIHB1YmxpYzoKIAogICAg
IHVpbnRwdHJfdCByYXdCaXRzKCkgY29uc3QgeyByZXR1cm4gbV9iaXRzOyB9CiAKLSAgICBpbmxp
bmUgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYpIGNvbnN0OworLy8gICAgdGVtcGxh
dGU8dHlwZW5hbWUgVmlzaXRvcj4gaW5saW5lIHZvaWQgdmlzaXRBZ2dyZWdhdGUoVmlzaXRvciYp
IGNvbnN0OworICAgIGlubGluZSB2b2lkIHZpc2l0QWdncmVnYXRlMShBYnN0cmFjdFNsb3RWaXNp
dG9yJikgY29uc3Q7CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGR1bXAoUHJpbnRTdHJl
YW0mKSBjb25zdDsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVh
YmxlSWRlbnRpZmllcklubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9DYWNoZWFibGVJZGVudGlmaWVySW5saW5lcy5oCShyZXZpc2lvbiAyNzE0NDMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWFibGVJZGVudGlmaWVySW5s
aW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzcsMTIgKzEzNywxNiBAQCBpbmxpbmUgdm9pZCBD
YWNoZWFibGVJZGVudGlmaWVyOjpzZXRVaWRCCiAgICAgbV9iaXRzID0gYml0d2lzZV9jYXN0PHVp
bnRwdHJfdD4odWlkKSB8IHNfdWlkVGFnOwogfQogCi1pbmxpbmUgdm9pZCBDYWNoZWFibGVJZGVu
dGlmaWVyOjp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYgdmlzaXRvcikgY29uc3QKKy8vdGVt
cGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KKy8vaW5saW5lIHZvaWQgQ2FjaGVhYmxlSWRlbnRpZmll
cjo6dmlzaXRBZ2dyZWdhdGUoVmlzaXRvciYgdmlzaXRvcikgY29uc3QKK2lubGluZSB2b2lkIENh
Y2hlYWJsZUlkZW50aWZpZXI6OnZpc2l0QWdncmVnYXRlMShBYnN0cmFjdFNsb3RWaXNpdG9yJiB2
aXNpdG9yKSBjb25zdAogewogICAgIGlmIChtX2JpdHMgJiYgaXNDZWxsKCkpCiAgICAgICAgIHZp
c2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQoY2VsbCgpKTsKIH0KIAorLy90ZW1wbGF0ZSB2b2lkIENh
Y2hlYWJsZUlkZW50aWZpZXI6OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJikgY29uc3Q7Cisv
L3RlbXBsYXRlIHZvaWQgQ2FjaGVhYmxlSWRlbnRpZmllcjo6dmlzaXRBZ2dyZWdhdGUoRGVidWdT
bG90VmlzaXRvciYpIGNvbnN0OwogCiBpbmxpbmUgYm9vbCBDYWNoZWFibGVJZGVudGlmaWVyOjpv
cGVyYXRvcj09KGNvbnN0IENhY2hlYWJsZUlkZW50aWZpZXImIG90aGVyKSBjb25zdAogewpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xhc3NJbmZvLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xhc3NJbmZvLmgJKHJldmlzaW9uIDI3
MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NsYXNzSW5mby5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00NCw5ICs0NCw2IEBAIHN0cnVjdCBNZXRob2RUYWJsZSB7CiAgICAgdXNp
bmcgRGVzdHJveUZ1bmN0aW9uUHRyID0gdm9pZCAoKikoSlNDZWxsKik7CiAgICAgRGVzdHJveUZ1
bmN0aW9uUHRyIE1FVEhPRF9UQUJMRV9FTlRSWShkZXN0cm95KTsKIAotICAgIHVzaW5nIFZpc2l0
Q2hpbGRyZW5GdW5jdGlvblB0ciA9IHZvaWQgKCopKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7Ci0g
ICAgVmlzaXRDaGlsZHJlbkZ1bmN0aW9uUHRyIE1FVEhPRF9UQUJMRV9FTlRSWSh2aXNpdENoaWxk
cmVuKTsKLQogICAgIHVzaW5nIEdldENhbGxEYXRhRnVuY3Rpb25QdHIgPSBDYWxsRGF0YSAoKiko
SlNDZWxsKik7CiAgICAgR2V0Q2FsbERhdGFGdW5jdGlvblB0ciBNRVRIT0RfVEFCTEVfRU5UUlko
Z2V0Q2FsbERhdGEpOwogCkBAIC0xMjAsNyArMTE3LDE4IEBAIHN0cnVjdCBNZXRob2RUYWJsZSB7
CiAgICAgdXNpbmcgRXN0aW1hdGVkU2l6ZUZ1bmN0aW9uUHRyID0gc2l6ZV90ICgqKShKU0NlbGwq
LCBWTSYpOwogICAgIEVzdGltYXRlZFNpemVGdW5jdGlvblB0ciBNRVRIT0RfVEFCTEVfRU5UUlko
ZXN0aW1hdGVkU2l6ZSk7CiAKLSAgICB1c2luZyBWaXNpdE91dHB1dENvbnN0cmFpbnRzUHRyID0g
dm9pZCAoKikoSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICB1c2luZyBWaXNpdENoaWxkcmVu
RnVuY3Rpb25QdHIgPSB2b2lkICgqKShKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIFZpc2l0
Q2hpbGRyZW5GdW5jdGlvblB0ciBNRVRIT0RfVEFCTEVfRU5UUlkodmlzaXRDaGlsZHJlbldpdGhT
bG90VmlzaXRvcik7CisKKy8vICAgIHVzaW5nIFZpc2l0Q2hpbGRyZW5XaXRoRGVidWdTbG90Vmlz
aXRvclB0ciA9IHZvaWQgKCopKEpTQ2VsbCosIERlYnVnU2xvdFZpc2l0b3ImKTsKKyAgICB1c2lu
ZyBWaXNpdENoaWxkcmVuV2l0aEFic3RyYWN0U2xvdFZpc2l0b3JQdHIgPSB2b2lkICgqKShKU0Nl
bGwqLCBBYnN0cmFjdFNsb3RWaXNpdG9yJik7CisgICAgVmlzaXRDaGlsZHJlbldpdGhBYnN0cmFj
dFNsb3RWaXNpdG9yUHRyIE1FVEhPRF9UQUJMRV9FTlRSWSh2aXNpdENoaWxkcmVuV2l0aEFic3Ry
YWN0U2xvdFZpc2l0b3IpOworCisgICAgQUxXQVlTX0lOTElORSB2b2lkIHZpc2l0Q2hpbGRyZW4o
SlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikgY29uc3QgeyB2aXNpdENoaWxkcmVu
V2l0aFNsb3RWaXNpdG9yKGNlbGwsIHZpc2l0b3IpOyB9CisvLyAgICBBTFdBWVNfSU5MSU5FIHZv
aWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIERlYnVnU2xvdFZpc2l0b3ImIHZpc2l0b3Ip
IGNvbnN0IHsgdmlzaXRDaGlsZHJlbldpdGhEZWJ1Z1Nsb3RWaXNpdG9yKGNlbGwsIHZpc2l0b3Ip
OyB9CisgICAgQUxXQVlTX0lOTElORSB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBB
YnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBjb25zdCB7IHZpc2l0Q2hpbGRyZW5XaXRoQWJz
dHJhY3RTbG90VmlzaXRvcihjZWxsLCB2aXNpdG9yKTsgfQorCisgICAgdXNpbmcgVmlzaXRPdXRw
dXRDb25zdHJhaW50c1B0ciA9IHZvaWQgKCopKEpTQ2VsbCosIEFic3RyYWN0U2xvdFZpc2l0b3Im
KTsKICAgICBWaXNpdE91dHB1dENvbnN0cmFpbnRzUHRyIE1FVEhPRF9UQUJMRV9FTlRSWSh2aXNp
dE91dHB1dENvbnN0cmFpbnRzKTsKIH07CiAKQEAgLTE0Nyw3ICsxNTUsNiBAQCBzdHJ1Y3QgTWV0
aG9kVGFibGUgewogICAgIEpTQ2FzdGluZ0hlbHBlcnM6OkluaGVyaXRzVHJhaXRzPENsYXNzTmFt
ZT46OnR5cGVSYW5nZSwgXAogICAgIHsgXAogICAgICAgICAmQ2xhc3NOYW1lOjpkZXN0cm95LCBc
Ci0gICAgICAgICZDbGFzc05hbWU6OnZpc2l0Q2hpbGRyZW4sIFwKICAgICAgICAgJkNsYXNzTmFt
ZTo6Z2V0Q2FsbERhdGEsIFwKICAgICAgICAgJkNsYXNzTmFtZTo6Z2V0Q29uc3RydWN0RGF0YSwg
XAogICAgICAgICAmQ2xhc3NOYW1lOjpwdXQsIFwKQEAgLTE3Myw2ICsxODAsOCBAQCBzdHJ1Y3Qg
TWV0aG9kVGFibGUgewogICAgICAgICAmQ2xhc3NOYW1lOjpkdW1wVG9TdHJlYW0sIFwKICAgICAg
ICAgJkNsYXNzTmFtZTo6YW5hbHl6ZUhlYXAsIFwKICAgICAgICAgJkNsYXNzTmFtZTo6ZXN0aW1h
dGVkU2l6ZSwgXAorICAgICAgICAmQ2xhc3NOYW1lOjp2aXNpdENoaWxkcmVuLCBcCisgICAgICAg
ICZDbGFzc05hbWU6OnZpc2l0Q2hpbGRyZW4sIFwKICAgICAgICAgJkNsYXNzTmFtZTo6dmlzaXRP
dXRwdXRDb25zdHJhaW50cywgXAogICAgIH0sIFwKICAgICBDbGFzc05hbWU6OlR5cGVkQXJyYXlT
dG9yYWdlVHlwZSwgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xvbmVk
QXJndW1lbnRzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9DbG9uZWRBcmd1bWVudHMuY3BwCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9DbG9uZWRBcmd1bWVudHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
NjcsNyArMjY3LDggQEAgdm9pZCBDbG9uZWRBcmd1bWVudHM6Om1hdGVyaWFsaXplU3BlY2lhbAog
ICAgICAgICBtYXRlcmlhbGl6ZVNwZWNpYWxzKGdsb2JhbE9iamVjdCk7CiB9CiAKLXZvaWQgQ2xv
bmVkQXJndW1lbnRzOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZp
c2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBDbG9uZWRBcmd1bWVudHM6
OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAg
ICBDbG9uZWRBcmd1bWVudHMqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8Q2xvbmVkQXJndW1lbnRzKj4o
Y2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkp
OwpAQCAtMjc1LDUgKzI3Niw3IEBAIHZvaWQgQ2xvbmVkQXJndW1lbnRzOjp2aXNpdENoaWxkcmVu
KEpTQ2UKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2NhbGxlZSk7CiB9CiAKK0RF
RklORV9WSVNJVF9DSElMRFJFTihDbG9uZWRBcmd1bWVudHMpOworCiB9IC8vIG5hbWVzcGFjZSBK
U0MKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xvbmVkQXJndW1lbnRz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xvbmVkQXJn
dW1lbnRzLmgJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0Nsb25lZEFyZ3VtZW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC02Miw3ICs2Miw3IEBAIHB1
YmxpYzoKICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2Jh
bE9iamVjdCosIEpTVmFsdWUgcHJvdG90eXBlKTsKICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVh
dGVTbG93UHV0U3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlIHByb3RvdHlw
ZSk7CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9y
Jik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIERFQ0xBUkVfSU5GTzsKIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGlyZWN0QXJndW1lbnRzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EaXJlY3RBcmd1bWVu
dHMuY3BwCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9EaXJlY3RBcmd1bWVudHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MCw3ICs5MCw4IEBAIHNp
emVfdCBEaXJlY3RBcmd1bWVudHM6OmVzdGltYXRlZFNpemUoSlMKICAgICByZXR1cm4gQmFzZTo6
ZXN0aW1hdGVkU2l6ZShjZWxsLCB2bSkgKyBtYXBwZWRBcmd1bWVudHNTaXplICsgbW9kaWZpZWRB
cmd1bWVudHNTaXplOwogfQogCi12b2lkIERpcmVjdEFyZ3VtZW50czo6dmlzaXRDaGlsZHJlbihK
U0NlbGwqIHRoaXNDZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1l
IFZpc2l0b3I+Cit2b2lkIERpcmVjdEFyZ3VtZW50czo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxs
KiB0aGlzQ2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBEaXJlY3RBcmd1bWVudHMqIHRo
aXNPYmplY3QgPSBzdGF0aWNfY2FzdDxEaXJlY3RBcmd1bWVudHMqPih0aGlzQ2VsbCk7CiAgICAg
QVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtMTA0LDYg
KzEwNSw4IEBAIHZvaWQgRGlyZWN0QXJndW1lbnRzOjp2aXNpdENoaWxkcmVuKEpTQ2UKICAgICBH
ZW5lcmljQXJndW1lbnRzPERpcmVjdEFyZ3VtZW50cz46OnZpc2l0Q2hpbGRyZW4odGhpc0NlbGws
IHZpc2l0b3IpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oRGlyZWN0QXJndW1lbnRzKTsK
KwogU3RydWN0dXJlKiBEaXJlY3RBcmd1bWVudHM6OmNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQogewogICAgIHJl
dHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJ
bmZvKERpcmVjdEFyZ3VtZW50c1R5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5oCShy
ZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EaXJlY3RB
cmd1bWVudHMuaAkod29ya2luZyBjb3B5KQpAQCAtNjUsNyArNjUsNyBAQCBwdWJsaWM6CiAgICAg
c3RhdGljIERpcmVjdEFyZ3VtZW50cyogY3JlYXRlQnlDb3B5aW5nKEpTR2xvYmFsT2JqZWN0Kiwg
Q2FsbEZyYW1lKik7CiAKICAgICBzdGF0aWMgc2l6ZV90IGVzdGltYXRlZFNpemUoSlNDZWxsKiwg
Vk0mKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9y
Jik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKICAgICAKICAgICB1aW50MzJfdCBpbnRl
cm5hbExlbmd0aCgpIGNvbnN0CiAgICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvRXZhbEV4ZWN1dGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0V2YWxFeGVjdXRhYmxlLmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXZhbEV4ZWN1dGFibGUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00OSw3ICs0OSw4IEBAIGF1dG8gRXZhbEV4ZWN1dGFibGU6OmVuc3VyZVRlbXBsYXRl
T2JqZWMKICAgICByZXR1cm4gZW5zdXJlVGVtcGxhdGVPYmplY3RNYXBJbXBsKG1fdGVtcGxhdGVP
YmplY3RNYXApOwogfQogCi12b2lkIEV2YWxFeGVjdXRhYmxlOjp2aXNpdENoaWxkcmVuKEpTQ2Vs
bCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
Pgordm9pZCBFdmFsRXhlY3V0YWJsZTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBW
aXNpdG9yJiB2aXNpdG9yKQogewogICAgIEV2YWxFeGVjdXRhYmxlKiB0aGlzT2JqZWN0ID0ganND
YXN0PEV2YWxFeGVjdXRhYmxlKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklU
Uyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNjMsNCArNjQsNiBAQCB2b2lkIEV2YWxFeGVjdXRh
YmxlOjp2aXNpdENoaWxkcmVuKEpTQ2VsCiAgICAgfQogfQogCitERUZJTkVfVklTSVRfQ0hJTERS
RU4oRXZhbEV4ZWN1dGFibGUpOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0V2YWxFeGVjdXRhYmxlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXZhbEV4ZWN1dGFibGUuaAkocmV2aXNpb24gMjcx
NDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXZhbEV4ZWN1dGFibGUuaAko
d29ya2luZyBjb3B5KQpAQCAtNzgsNyArNzgsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgdXNpbmcgQmFz
ZTo6ZmluaXNoQ3JlYXRpb247CiAgICAgRXZhbEV4ZWN1dGFibGUoSlNHbG9iYWxPYmplY3QqLCBj
b25zdCBTb3VyY2VDb2RlJiwgYm9vbCBpblN0cmljdENvbnRleHQsIERlcml2ZWRDb250ZXh0VHlw
ZSwgYm9vbCBpc0Fycm93RnVuY3Rpb25Db250ZXh0LCBib29sIGlzSW5zaWRlT3JkaW5hcnlGdW5j
dGlvbiwgRXZhbENvbnRleHRUeXBlLCBOZWVkc0NsYXNzRmllbGRJbml0aWFsaXplcik7CiAKLSAg
ICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAg
REVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIHVuc2lnbmVkIG1fbmVlZHNDbGFzc0ZpZWxk
SW5pdGlhbGl6ZXIgOiAxOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9F
eGNlcHRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0V4Y2VwdGlvbi5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0V4Y2VwdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUzLDcgKzUzLDggQEAg
U3RydWN0dXJlKiBFeGNlcHRpb246OmNyZWF0ZVN0cnVjdHVyZShWTQogICAgIHJldHVybiBTdHJ1
Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKENlbGxU
eXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CiB9CiAKLXZvaWQgRXhjZXB0aW9uOjp2aXNp
dENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0
eXBlbmFtZSBWaXNpdG9yPgordm9pZCBFeGNlcHRpb246OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2Vs
bCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBFeGNlcHRpb24qIHRoaXNPYmplY3Qg
PSBqc0Nhc3Q8RXhjZXB0aW9uKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklU
Uyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNjQsNiArNjUsOCBAQCB2b2lkIEV4Y2VwdGlvbjo6
dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlCiAgICAgICAgIGZyYW1lLnZpc2l0Q2hpbGRyZW4odmlz
aXRvcik7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihFeGNlcHRpb24pOworCiBFeGNlcHRp
b246OkV4Y2VwdGlvbihWTSYgdm0pCiAgICAgOiBCYXNlKHZtLCB2bS5leGNlcHRpb25TdHJ1Y3R1
cmUuZ2V0KCkpCiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGNlcHRp
b24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGNlcHRp
b24uaAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
RXhjZXB0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxLDcgKzUxLDcgQEAgcHVibGljOgogCiAg
ICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3Qq
LCBKU1ZhbHVlIHByb3RvdHlwZSk7CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpT
Q2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAg
IERFQ0xBUkVfRVhQT1JUX0lORk87CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25FeGVjdXRhYmxlLmNwcAkocmV2aXNpb24gMjcxNDQzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25FeGVjdXRhYmxlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNjcsNyArNjcsOCBAQCBGdW5jdGlvbkNvZGVCbG9jayogRnVuY3Rp
b25FeGVjdXRhYmxlOjpiCiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEZ1bmN0aW9uQ29kZUJsb2Nr
Kj4oZWRnZS0+Y29kZUJsb2NrKCktPmJhc2VsaW5lQWx0ZXJuYXRpdmUoKSk7CiB9CiAKLXZvaWQg
RnVuY3Rpb25FeGVjdXRhYmxlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0
b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBGdW5jdGlvbkV4
ZWN1dGFibGU6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRv
cikKIHsKICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8RnVuY3Rp
b25FeGVjdXRhYmxlKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlz
T2JqZWN0LCBpbmZvKCkpOwpAQCAtODYsNiArODcsOCBAQCB2b2lkIEZ1bmN0aW9uRXhlY3V0YWJs
ZTo6dmlzaXRDaGlsZHJlbihKCiAgICAgfQogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oRnVu
Y3Rpb25FeGVjdXRhYmxlKTsKKwogRnVuY3Rpb25FeGVjdXRhYmxlKiBGdW5jdGlvbkV4ZWN1dGFi
bGU6OmZyb21HbG9iYWxDb2RlKAogICAgIGNvbnN0IElkZW50aWZpZXImIG5hbWUsIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgCiAgICAgSlNP
YmplY3QqJiBleGNlcHRpb24sIGludCBvdmVycmlkZUxpbmVOdW1iZXIsIE9wdGlvbmFsPGludD4g
ZnVuY3Rpb25Db25zdHJ1Y3RvclBhcmFtZXRlcnNFbmRQb3NpdGlvbikKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZS5oCShyZXZp
c2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvbkV4
ZWN1dGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTY2LDcgKzE2Niw3IEBAIHB1YmxpYzoKICAg
ICBKU1BhcnNlclNjcmlwdE1vZGUgc2NyaXB0TW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fdW5saW5r
ZWRFeGVjdXRhYmxlLT5zY3JpcHRNb2RlKCk7IH0KICAgICBTb3VyY2VDb2RlIGNsYXNzU291cmNl
KCkgY29uc3QgeyByZXR1cm4gbV91bmxpbmtlZEV4ZWN1dGFibGUtPmNsYXNzU291cmNlKCk7IH0K
IAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsK
KyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0
ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUg
cHJvdG8pCiAgICAgewogICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2Jh
bE9iamVjdCwgcHJvdG8sIFR5cGVJbmZvKEZ1bmN0aW9uRXhlY3V0YWJsZVR5cGUsIFN0cnVjdHVy
ZUZsYWdzKSwgaW5mbygpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1
bmN0aW9uUmFyZURhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0Z1bmN0aW9uUmFyZURhdGEuY3BwCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvblJhcmVEYXRhLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNTEsNyArNTEsOCBAQCBTdHJ1Y3R1cmUqIEZ1bmN0aW9uUmFyZURhdGE6OmNyZWF0ZVN0
cnVjCiAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3Rv
dHlwZSwgVHlwZUluZm8oQ2VsbFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKIH0KIAot
dm9pZCBGdW5jdGlvblJhcmVEYXRhOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZp
c2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBGdW5jdGlv
blJhcmVEYXRhOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0
b3IpCiB7CiAgICAgRnVuY3Rpb25SYXJlRGF0YSogcmFyZURhdGEgPSBqc0Nhc3Q8RnVuY3Rpb25S
YXJlRGF0YSo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2VsbCwgaW5m
bygpKTsKQEAgLTYzLDYgKzY0LDggQEAgdm9pZCBGdW5jdGlvblJhcmVEYXRhOjp2aXNpdENoaWxk
cmVuKEpTQwogICAgIHZpc2l0b3IuYXBwZW5kKHJhcmVEYXRhLT5tX2V4ZWN1dGFibGUpOwogfQog
CitERUZJTkVfVklTSVRfQ0hJTERSRU4oRnVuY3Rpb25SYXJlRGF0YSk7CisKIEZ1bmN0aW9uUmFy
ZURhdGE6OkZ1bmN0aW9uUmFyZURhdGEoVk0mIHZtLCBFeGVjdXRhYmxlQmFzZSogZXhlY3V0YWJs
ZSkKICAgICA6IEJhc2Uodm0sIHZtLmZ1bmN0aW9uUmFyZURhdGFTdHJ1Y3R1cmUuZ2V0KCkpCiAg
ICAgLCBtX29iamVjdEFsbG9jYXRpb25Qcm9maWxlKCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0Z1bmN0aW9uUmFyZURhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvblJhcmVEYXRhLmgJKHJldmlzaW9uIDI3MTQ0MykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uUmFyZURhdGEuaAkod29y
a2luZyBjb3B5KQpAQCAtNjUsNyArNjUsNyBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgU3RydWN0
dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUgcHJvdG90
eXBlKTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0
b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgREVDTEFSRV9JTkZPOwog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljQXJndW1lbnRzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3Vt
ZW50cy5oCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9HZW5lcmljQXJndW1lbnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDcgKzQ0LDcgQEAgcHJv
dGVjdGVkOgogICAgIHsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpT
Q2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9URU1QTEFURV9WSVNJVF9DSElMRFJF
TjsKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqLCBKU0dsb2Jh
bE9iamVjdCosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CiAgICAgc3RhdGljIGJvb2wg
Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgdW5z
aWduZWQgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKICAgICBzdGF0aWMgdm9pZCBnZXRP
d25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWVB
cnJheSYsIERvbnRFbnVtUHJvcGVydGllc01vZGUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50c0lubGluZXMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljQXJndW1lbnRzSW5saW5lcy5oCShyZXZp
c2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljQXJn
dW1lbnRzSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw4IEBACiBuYW1lc3Bh
Y2UgSlNDIHsKIAogdGVtcGxhdGU8dHlwZW5hbWUgVHlwZT4KLXZvaWQgR2VuZXJpY0FyZ3VtZW50
czxUeXBlPjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIHRoaXNDZWxsLCBTbG90VmlzaXRvciYgdmlz
aXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEdlbmVyaWNBcmd1bWVudHM8
VHlwZT46OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogdGhpc0NlbGwsIFZpc2l0b3ImIHZpc2l0
b3IpCiB7CiAgICAgVHlwZSogdGhpc09iamVjdCA9IHN0YXRpY19jYXN0PFR5cGUqPih0aGlzQ2Vs
bCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpA
QCAtNDEsNiArNDIsOCBAQCB2b2lkIEdlbmVyaWNBcmd1bWVudHM8VHlwZT46OnZpc2l0Q2hpbGRy
CiAgICAgICAgIHZpc2l0b3IubWFya0F1eGlsaWFyeSh0aGlzT2JqZWN0LT5tX21vZGlmaWVkQXJn
dW1lbnRzRGVzY3JpcHRvci5nZXRVbnNhZmUoKSk7CiB9CiAKK0RFRklORV9URU1QTEFURV9WSVNJ
VF9DSElMRFJFTih0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlPiwgR2VuZXJpY0FyZ3VtZW50czxUeXBl
Pik7CisKIHRlbXBsYXRlPHR5cGVuYW1lIFR5cGU+CiBib29sIEdlbmVyaWNBcmd1bWVudHM8VHlw
ZT46OmdldE93blByb3BlcnR5U2xvdChKU09iamVjdCogb2JqZWN0LCBKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWUgaWRlbnQsIFByb3BlcnR5U2xvdCYgc2xvdCkKIHsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dldHRlclNldHRlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2V0dGVyU2V0dGVyLmNw
cAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2V0
dGVyU2V0dGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNyArMzMsOCBAQCBTVEFUSUNfQVNT
RVJUX0lTX1RSSVZJQUxMWV9ERVNUUlVDVElCTEUoCiAKIGNvbnN0IENsYXNzSW5mbyBHZXR0ZXJT
ZXR0ZXI6OnNfaW5mbyA9IHsgIkdldHRlclNldHRlciIsIG51bGxwdHIsIG51bGxwdHIsIG51bGxw
dHIsIENSRUFURV9NRVRIT0RfVEFCTEUoR2V0dGVyU2V0dGVyKSB9OwogCi12b2lkIEdldHRlclNl
dHRlcjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQor
dGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgR2V0dGVyU2V0dGVyOjp2aXNpdENoaWxk
cmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgR2V0dGVyU2V0
dGVyKiB0aGlzT2JqZWN0ID0ganNDYXN0PEdldHRlclNldHRlcio+KGNlbGwpOwogICAgIEFTU0VS
VF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTQzLDYgKzQ0LDgg
QEAgdm9pZCBHZXR0ZXJTZXR0ZXI6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKgogICAgIHZpc2l0b3Iu
YXBwZW5kKHRoaXNPYmplY3QtPm1fc2V0dGVyKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVO
KEdldHRlclNldHRlcik7CisKIEpTVmFsdWUgY2FsbEdldHRlcihKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBKU1ZhbHVlIGJhc2UsIEpTVmFsdWUgZ2V0dGVyU2V0dGVyKQogewogICAgIFZN
JiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0dldHRlclNldHRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0dldHRlclNldHRlci5oCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9HZXR0ZXJTZXR0ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtODIs
NyArODIsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBjcmVhdGUodm0sIGdsb2JhbE9iamVj
dCwgZ2V0dGVyT2JqZWN0LCBzZXR0ZXJPYmplY3QpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lk
IHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lU
X0NISUxEUkVOOwogCiAgICAgSlNPYmplY3QqIGdldHRlcigpIGNvbnN0IHsgcmV0dXJuIG1fZ2V0
dGVyLmdldCgpOyB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0hhc2hN
YXBJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9I
YXNoTWFwSW1wbC5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0hhc2hNYXBJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsOSBA
QAogCiBuYW1lc3BhY2UgSlNDIHsKIAorREVGSU5FX1RFTVBMQVRFX1ZJU0lUX0NISUxEUkVOKHRl
bXBsYXRlPD4sIEhhc2hNYXBCdWNrZXQ8SGFzaE1hcEJ1Y2tldERhdGFLZXk+KTsKK0RFRklORV9U
RU1QTEFURV9WSVNJVF9DSElMRFJFTih0ZW1wbGF0ZTw+LCBIYXNoTWFwQnVja2V0PEhhc2hNYXBC
dWNrZXREYXRhS2V5VmFsdWU+KTsKKwogdGVtcGxhdGU8PgogY29uc3QgQ2xhc3NJbmZvIEhhc2hN
YXBCdWNrZXQ8SGFzaE1hcEJ1Y2tldERhdGFLZXk+OjpzX2luZm8gPQogICAgIHsgIkhhc2hNYXBC
dWNrZXQiLCBudWxscHRyLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEhh
c2hNYXBCdWNrZXQ8SGFzaE1hcEJ1Y2tldERhdGFLZXk+KSB9OwpAQCAtMzgsOCArNDEsOSBAQCB0
ZW1wbGF0ZTw+CiBjb25zdCBDbGFzc0luZm8gSGFzaE1hcEJ1Y2tldDxIYXNoTWFwQnVja2V0RGF0
YUtleVZhbHVlPjo6c19pbmZvID0KICAgICB7ICJIYXNoTWFwQnVja2V0IiwgbnVsbHB0ciwgbnVs
bHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShIYXNoTWFwQnVja2V0PEhhc2hNYXBC
dWNrZXREYXRhS2V5VmFsdWU+KSB9OwogCi10ZW1wbGF0ZSA8dHlwZW5hbWUgRGF0YT4KLXZvaWQg
SGFzaE1hcEJ1Y2tldDxEYXRhPjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNp
dG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgRGF0YT4KK3RlbXBsYXRlPHR5cGVuYW1l
IFZpc2l0b3I+Cit2b2lkIEhhc2hNYXBCdWNrZXQ8RGF0YT46OnZpc2l0Q2hpbGRyZW5JbXBsKEpT
Q2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBIYXNoTWFwQnVja2V0KiB0aGlz
T2JqZWN0ID0ganNDYXN0PEhhc2hNYXBCdWNrZXQqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JK
RUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC01Miw4ICs1Niw5IEBAIHZvaWQg
SGFzaE1hcEJ1Y2tldDxEYXRhPjo6dmlzaXRDaGlsZHJlbigKICAgICB2aXNpdG9yLmFwcGVuZFZh
bHVlcyhiaXR3aXNlX2Nhc3Q8V3JpdGVCYXJyaWVyPFVua25vd24+Kj4oJnRoaXNPYmplY3QtPm1f
ZGF0YSksIHNpemVvZihEYXRhKSAvIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKTsKIH0K
IAotdGVtcGxhdGUgPHR5cGVuYW1lIEhhc2hNYXBCdWNrZXQ+Ci12b2lkIEhhc2hNYXBJbXBsPEhh
c2hNYXBCdWNrZXQ+Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZp
c2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoTWFwQnVja2V0PgordGVtcGxhdGU8dHlwZW5h
bWUgVmlzaXRvcj4KK3ZvaWQgSGFzaE1hcEltcGw8SGFzaE1hcEJ1Y2tldD46OnZpc2l0Q2hpbGRy
ZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBIYXNoTWFwSW1w
bCogdGhpc09iamVjdCA9IGpzQ2FzdDxIYXNoTWFwSW1wbCo+KGNlbGwpOwogICAgIEFTU0VSVF9H
Q19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTY2LDYgKzcxLDggQEAg
dm9pZCBIYXNoTWFwSW1wbDxIYXNoTWFwQnVja2V0Pjo6dmlzaXRDaAogICAgICAgICB2aXNpdG9y
Lm1hcmtBdXhpbGlhcnkoYnVmZmVyKTsKIH0KIAorREVGSU5FX1RFTVBMQVRFX1ZJU0lUX0NISUxE
UkVOKHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hNYXBCdWNrZXQ+LCBIYXNoTWFwSW1wbDxIYXNoTWFw
QnVja2V0Pik7CisKIHRlbXBsYXRlIDx0eXBlbmFtZSBIYXNoTWFwQnVja2V0Pgogc2l6ZV90IEhh
c2hNYXBJbXBsPEhhc2hNYXBCdWNrZXQ+Ojplc3RpbWF0ZWRTaXplKEpTQ2VsbCogY2VsbCwgVk0m
IHZtKQogewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSGFzaE1hcEltcGwu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9IYXNoTWFwSW1w
bC5oCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9I
YXNoTWFwSW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDgsNyArMTQ4LDcgQEAgcHVibGljOgog
ICAgICAgICByZXR1cm4gbV9kYXRhLnZhbHVlLmdldCgpOwogICAgIH0KIAotICAgIHN0YXRpYyB2
b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1RF
TVBMQVRFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgQUxXQVlTX0lOTElORSBIYXNoTWFwQnVja2V0
KiBuZXh0KCkgY29uc3QgeyByZXR1cm4gbV9uZXh0LmdldCgpOyB9CiAgICAgQUxXQVlTX0lOTElO
RSBIYXNoTWFwQnVja2V0KiBwcmV2KCkgY29uc3QgeyByZXR1cm4gbV9wcmV2LmdldCgpOyB9CkBA
IC0zNjQsNyArMzY0LDcgQEAgY2xhc3MgSGFzaE1hcEltcGwgOiBwdWJsaWMgSlNOb25GaW5hbE9i
agogcHVibGljOgogICAgIHVzaW5nIEJ1Y2tldFR5cGUgPSBIYXNoTWFwQnVja2V0VHlwZTsKIAot
ICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAg
ICBERUNMQVJFX1RFTVBMQVRFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgc3RhdGljIHNpemVfdCBl
c3RpbWF0ZWRTaXplKEpTQ2VsbCosIFZNJik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0ludGVybmFsRnVuY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0ludGVybmFsRnVuY3Rpb24uY3BwCShyZXZpc2lvbiAyNzE0NDMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRlcm5hbEZ1bmN0aW9uLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNjQsNyArNjQsOCBAQCB2b2lkIEludGVybmFsRnVuY3Rpb246OmZp
bmlzaENyZWF0aW9uKFZNCiAgICAgfQogfQogCi12b2lkIEludGVybmFsRnVuY3Rpb246OnZpc2l0
Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5
cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEludGVybmFsRnVuY3Rpb246OnZpc2l0Q2hpbGRyZW5JbXBs
KEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBJbnRlcm5hbEZ1bmN0aW9u
KiB0aGlzT2JqZWN0ID0ganNDYXN0PEludGVybmFsRnVuY3Rpb24qPihjZWxsKTsKICAgICBBU1NF
UlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC03Myw2ICs3NCw4
IEBAIHZvaWQgSW50ZXJuYWxGdW5jdGlvbjo6dmlzaXRDaGlsZHJlbihKU0MKICAgICB2aXNpdG9y
LmFwcGVuZCh0aGlzT2JqZWN0LT5tX29yaWdpbmFsTmFtZSk7CiB9CiAKK0RFRklORV9FWFBPUlRf
VklTSVRfQ0hJTERSRU4oSW50ZXJuYWxGdW5jdGlvbik7CisKIGNvbnN0IFN0cmluZyYgSW50ZXJu
YWxGdW5jdGlvbjo6bmFtZSgpCiB7CiAgICAgY29uc3QgU3RyaW5nJiBuYW1lID0gbV9vcmlnaW5h
bE5hbWUtPnRyeUdldFZhbHVlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9JbnRlcm5hbEZ1bmN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSW50ZXJuYWxGdW5jdGlvbi5oCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRlcm5hbEZ1bmN0aW9uLmgJKHdvcmtpbmcgY29weSkK
QEAgLTQ2LDcgKzQ2LDcgQEAgcHVibGljOgogCiAgICAgREVDTEFSRV9FWFBPUlRfSU5GTzsKIAot
ICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwg
U2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX0VYUE9SVF9WSVNJVF9DSElMRFJFTjsKIAogICAg
IEpTX0VYUE9SVF9QUklWQVRFIGNvbnN0IFN0cmluZyYgbmFtZSgpOwogICAgIGNvbnN0IFN0cmlu
ZyBkaXNwbGF5TmFtZShWTSYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SW50bENvbGxhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9JbnRsQ29sbGF0b3IuY3BwCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9JbnRsQ29sbGF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NSw3
ICs2NSw4IEBAIHZvaWQgSW50bENvbGxhdG9yOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0KICAgICBB
U1NFUlQoaW5oZXJpdHModm0sIGluZm8oKSkpOwogfQogCi12b2lkIEludGxDb2xsYXRvcjo6dmlz
aXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8
dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSW50bENvbGxhdG9yOjp2aXNpdENoaWxkcmVuSW1wbChK
U0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSW50bENvbGxhdG9yKiB0aGlz
T2JqZWN0ID0ganNDYXN0PEludGxDb2xsYXRvcio+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpF
Q1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTc1LDYgKzc2LDggQEAgdm9pZCBJ
bnRsQ29sbGF0b3I6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKgogICAgIHZpc2l0b3IuYXBwZW5kKHRo
aXNPYmplY3QtPm1fYm91bmRDb21wYXJlKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKElu
dGxDb2xsYXRvcik7CisKIFZlY3RvcjxTdHJpbmc+IEludGxDb2xsYXRvcjo6c29ydExvY2FsZURh
dGEoY29uc3QgU3RyaW5nJiBsb2NhbGUsIFJlbGV2YW50RXh0ZW5zaW9uS2V5IGtleSkKIHsKICAg
ICAvLyA5LjEgSW50ZXJuYWwgc2xvdHMgb2YgU2VydmljZSBDb25zdHJ1Y3RvcnMgJiAxMC4yLjMg
SW50ZXJuYWwgc2xvdHMgKEVDTUEtNDAyIDIuMCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0ludGxDb2xsYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0ludGxDb2xsYXRvci5oCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsQ29sbGF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAt
ODAsNyArODAsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIEludGxDb2xsYXRvcihWTSYsIFN0
cnVjdHVyZSopOwogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKLSAgICBzdGF0aWMgdm9p
ZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJ
VF9DSElMRFJFTjsKIAogICAgIGJvb2wgdXBkYXRlQ2FuRG9BU0NJSVVDQURVQ0VUQ29tcGFyaXNv
bigpIGNvbnN0OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsRGF0
ZVRpbWVGb3JtYXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0ludGxEYXRlVGltZUZvcm1hdC5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxEYXRlVGltZUZvcm1hdC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTkwLDcgKzkwLDggQEAgdm9pZCBJbnRsRGF0ZVRpbWVGb3JtYXQ6OmZpbmlzaENyZWF0
aW9uKAogICAgIEFTU0VSVChpbmhlcml0cyh2bSwgaW5mbygpKSk7CiB9CiAKLXZvaWQgSW50bERh
dGVUaW1lRm9ybWF0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZp
c2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBJbnRsRGF0ZVRpbWVGb3Jt
YXQ6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsK
ICAgICBJbnRsRGF0ZVRpbWVGb3JtYXQqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SW50bERhdGVUaW1l
Rm9ybWF0Kj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0
LCBpbmZvKCkpOwpAQCAtMTAwLDYgKzEwMSw4IEBAIHZvaWQgSW50bERhdGVUaW1lRm9ybWF0Ojp2
aXNpdENoaWxkcmVuKEoKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2JvdW5kRm9y
bWF0KTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEludGxEYXRlVGltZUZvcm1hdCk7CisK
IHZvaWQgSW50bERhdGVUaW1lRm9ybWF0OjpzZXRCb3VuZEZvcm1hdChWTSYgdm0sIEpTQm91bmRG
dW5jdGlvbiogZm9ybWF0KQogewogICAgIG1fYm91bmRGb3JtYXQuc2V0KHZtLCB0aGlzLCBmb3Jt
YXQpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERhdGVUaW1lRm9y
bWF0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERh
dGVUaW1lRm9ybWF0LmgJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0ludGxEYXRlVGltZUZvcm1hdC5oCSh3b3JraW5nIGNvcHkpCkBAIC04NSw3ICs4
NSw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgSW50bERhdGVUaW1lRm9ybWF0KFZNJiwgU3Ry
dWN0dXJlKik7CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOwotICAgIHN0YXRpYyB2b2lk
IHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lU
X0NISUxEUkVOOwogCiAgICAgc3RhdGljIFZlY3RvcjxTdHJpbmc+IGxvY2FsZURhdGEoY29uc3Qg
U3RyaW5nJiwgUmVsZXZhbnRFeHRlbnNpb25LZXkpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9JbnRsTG9jYWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9JbnRsTG9jYWxlLmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bExvY2FsZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTU4LDcgKzU4LDggQEAgdm9pZCBJbnRsTG9jYWxlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0p
CiAgICAgQVNTRVJUKGluaGVyaXRzKHZtLCBpbmZvKCkpKTsKIH0KIAotdm9pZCBJbnRsTG9jYWxl
Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1w
bGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBJbnRsTG9jYWxlOjp2aXNpdENoaWxkcmVuSW1w
bChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0byogdGhpc09iamVj
dCA9IGpzQ2FzdDxJbnRsTG9jYWxlKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhF
UklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNjYsNiArNjcsOCBAQCB2b2lkIEludGxMb2Nh
bGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjCiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlz
T2JqZWN0LCB2aXNpdG9yKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEludGxMb2NhbGUp
OworCiBjbGFzcyBMb2NhbGVJREJ1aWxkZXIgZmluYWwgewogcHVibGljOgogICAgIGJvb2wgaW5p
dGlhbGl6ZShjb25zdCBTdHJpbmcmKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0ludGxMb2NhbGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9JbnRsTG9jYWxlLmgJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0ludGxMb2NhbGUuaAkod29ya2luZyBjb3B5KQpAQCAtNzEsNyArNzEsNyBA
QCBwdWJsaWM6CiBwcml2YXRlOgogICAgIEludGxMb2NhbGUoVk0mLCBTdHJ1Y3R1cmUqKTsKICAg
ICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJl
bihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAK
ICAgICBTdHJpbmcga2V5d29yZFZhbHVlKEFTQ0lJTGl0ZXJhbCwgYm9vbCBpc0Jvb2xlYW4gPSBm
YWxzZSkgY29uc3Q7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxO
dW1iZXJGb3JtYXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0ludGxOdW1iZXJGb3JtYXQuY3BwCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTnVtYmVyRm9ybWF0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNzMsNyArNzMsOCBAQCB2b2lkIEludGxOdW1iZXJGb3JtYXQ6OmZpbmlzaENyZWF0aW9uKFZN
CiAgICAgQVNTRVJUKGluaGVyaXRzKHZtLCBpbmZvKCkpKTsKIH0KIAotdm9pZCBJbnRsTnVtYmVy
Rm9ybWF0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3Ip
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBJbnRsTnVtYmVyRm9ybWF0Ojp2aXNp
dENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSW50
bE51bWJlckZvcm1hdCogdGhpc09iamVjdCA9IGpzQ2FzdDxJbnRsTnVtYmVyRm9ybWF0Kj4oY2Vs
bCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpA
QCAtODMsNiArODQsOCBAQCB2b2lkIEludGxOdW1iZXJGb3JtYXQ6OnZpc2l0Q2hpbGRyZW4oSlND
CiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9ib3VuZEZvcm1hdCk7CiB9CiAKK0RF
RklORV9WSVNJVF9DSElMRFJFTihJbnRsTnVtYmVyRm9ybWF0KTsKKwogVmVjdG9yPFN0cmluZz4g
SW50bE51bWJlckZvcm1hdDo6bG9jYWxlRGF0YShjb25zdCBTdHJpbmcmIGxvY2FsZSwgUmVsZXZh
bnRFeHRlbnNpb25LZXkga2V5KQogewogICAgIC8vIDkuMSBJbnRlcm5hbCBzbG90cyBvZiBTZXJ2
aWNlIENvbnN0cnVjdG9ycyAmIDExLjIuMyBJbnRlcm5hbCBzbG90cyAoRUNNQS00MDIgMi4wKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE51bWJlckZvcm1hdC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxOdW1iZXJGb3Jt
YXQuaAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SW50bE51bWJlckZvcm1hdC5oCSh3b3JraW5nIGNvcHkpCkBAIC05Niw3ICs5Niw3IEBAIHB1Ymxp
YzoKIHByaXZhdGU6CiAgICAgSW50bE51bWJlckZvcm1hdChWTSYsIFN0cnVjdHVyZSopOwogICAg
IHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVu
KEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAog
ICAgIHN0YXRpYyBWZWN0b3I8U3RyaW5nPiBsb2NhbGVEYXRhKGNvbnN0IFN0cmluZyYsIFJlbGV2
YW50RXh0ZW5zaW9uS2V5KTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SW50bFBsdXJhbFJ1bGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9JbnRsUGx1cmFsUnVsZXMuY3BwCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsUGx1cmFsUnVsZXMuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC02MSw3ICs2MSw4IEBAIHZvaWQgSW50bFBsdXJhbFJ1bGVzOjpmaW5pc2hDcmVhdGlvbihW
TSYKICAgICBBU1NFUlQoaW5oZXJpdHModm0sIGluZm8oKSkpOwogfQogCi12b2lkIEludGxQbHVy
YWxSdWxlczo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9y
KQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSW50bFBsdXJhbFJ1bGVzOjp2aXNp
dENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSW50
bFBsdXJhbFJ1bGVzKiB0aGlzT2JqZWN0ID0ganNDYXN0PEludGxQbHVyYWxSdWxlcyo+KGNlbGwp
OwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAg
LTY5LDYgKzcwLDggQEAgdm9pZCBJbnRsUGx1cmFsUnVsZXM6OnZpc2l0Q2hpbGRyZW4oSlNDZQog
ICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CiB9CiAKK0RFRklO
RV9WSVNJVF9DSElMRFJFTihJbnRsUGx1cmFsUnVsZXMpOworCiBWZWN0b3I8U3RyaW5nPiBJbnRs
UGx1cmFsUnVsZXM6OmxvY2FsZURhdGEoY29uc3QgU3RyaW5nJiwgUmVsZXZhbnRFeHRlbnNpb25L
ZXkpCiB7CiAgICAgcmV0dXJuIHsgfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0ludGxQbHVyYWxSdWxlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0ludGxQbHVyYWxSdWxlcy5oCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsUGx1cmFsUnVsZXMuaAkod29ya2luZyBjb3B5KQpA
QCAtNjYsNyArNjYsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIEludGxQbHVyYWxSdWxlcyhW
TSYsIFN0cnVjdHVyZSopOwogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKLSAgICBzdGF0
aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFS
RV9WSVNJVF9DSElMRFJFTjsKIAogICAgIHN0YXRpYyBWZWN0b3I8U3RyaW5nPiBsb2NhbGVEYXRh
KGNvbnN0IFN0cmluZyYsIFJlbGV2YW50RXh0ZW5zaW9uS2V5KTsKIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFJlbGF0aXZlVGltZUZvcm1hdC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFJlbGF0aXZlVGltZUZvcm1h
dC5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0ludGxSZWxhdGl2ZVRpbWVGb3JtYXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Miw3ICs2Miw4
IEBAIHZvaWQgSW50bFJlbGF0aXZlVGltZUZvcm1hdDo6ZmluaXNoQ3JlYXQKICAgICBBU1NFUlQo
aW5oZXJpdHModm0sIGluZm8oKSkpOwogfQogCi12b2lkIEludGxSZWxhdGl2ZVRpbWVGb3JtYXQ6
OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBs
YXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEludGxSZWxhdGl2ZVRpbWVGb3JtYXQ6OnZpc2l0
Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBhdXRv
KiB0aGlzT2JqZWN0ID0ganNDYXN0PEludGxSZWxhdGl2ZVRpbWVGb3JtYXQqPihjZWxsKTsKICAg
ICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC03MCw2
ICs3MSw4IEBAIHZvaWQgSW50bFJlbGF0aXZlVGltZUZvcm1hdDo6dmlzaXRDaGlsZHIKICAgICBC
YXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwogfQogCitERUZJTkVfVklT
SVRfQ0hJTERSRU4oSW50bFJlbGF0aXZlVGltZUZvcm1hdCk7CisKIFZlY3RvcjxTdHJpbmc+IElu
dGxSZWxhdGl2ZVRpbWVGb3JtYXQ6OmxvY2FsZURhdGEoY29uc3QgU3RyaW5nJiBsb2NhbGUsIFJl
bGV2YW50RXh0ZW5zaW9uS2V5IGtleSkKIHsKICAgICBBU1NFUlRfVU5VU0VEKGtleSwga2V5ID09
IFJlbGV2YW50RXh0ZW5zaW9uS2V5OjpOdSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9JbnRsUmVsYXRpdmVUaW1lRm9ybWF0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFJlbGF0aXZlVGltZUZvcm1hdC5oCShyZXZpc2lvbiAy
NzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsUmVsYXRpdmVUaW1l
Rm9ybWF0LmgJKHdvcmtpbmcgY29weSkKQEAgLTY0LDcgKzY0LDcgQEAgcHVibGljOgogcHJpdmF0
ZToKICAgICBJbnRsUmVsYXRpdmVUaW1lRm9ybWF0KFZNJiwgU3RydWN0dXJlKik7CiAgICAgdm9p
ZCBmaW5pc2hDcmVhdGlvbihWTSYpOwotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlND
ZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAg
c3RhdGljIFZlY3RvcjxTdHJpbmc+IGxvY2FsZURhdGEoY29uc3QgU3RyaW5nJiwgUmVsZXZhbnRF
eHRlbnNpb25LZXkpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRs
U2VnbWVudEl0ZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9JbnRsU2VnbWVudEl0ZXJhdG9yLmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFNlZ21lbnRJdGVyYXRvci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTY0LDEzICs2NCwxNiBAQCB2b2lkIEludGxTZWdtZW50SXRlcmF0b3I6OmZp
bmlzaENyZWF0aW9uCiAgICAgbV9zdHJpbmcuc2V0KHZtLCB0aGlzLCBzdHJpbmcpOwogfQogCi12
b2lkIEludGxTZWdtZW50SXRlcmF0b3I6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90
VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEludGxT
ZWdtZW50SXRlcmF0b3I6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYg
dmlzaXRvcikKIHsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEludGxTZWdtZW50SXRl
cmF0b3IqPihjZWxsKTsKICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0
b3IpOwogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fc3RyaW5nKTsKIH0KIAorREVG
SU5FX1ZJU0lUX0NISUxEUkVOKEludGxTZWdtZW50SXRlcmF0b3IpOworCiBKU09iamVjdCogSW50
bFNlZ21lbnRJdGVyYXRvcjo6bmV4dChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQogewog
ICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0ludGxTZWdtZW50SXRlcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsU2VnbWVudEl0ZXJhdG9yLmgJKHJldmlzaW9uIDI3
MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxTZWdtZW50SXRlcmF0
b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNTMsNyArNTMsNyBAQCBwdWJsaWM6CiAKICAgICBKU09i
amVjdCogbmV4dChKU0dsb2JhbE9iamVjdCopOwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGls
ZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47
CiAKIHByaXZhdGU6CiAgICAgSW50bFNlZ21lbnRJdGVyYXRvcihWTSYsIFN0cnVjdHVyZSosIHN0
ZDo6dW5pcXVlX3B0cjxVQnJlYWtJdGVyYXRvciwgVUJyZWFrSXRlcmF0b3JEZWxldGVyPiYmLCBC
b3g8VmVjdG9yPFVDaGFyPj4mJiwgSW50bFNlZ21lbnRlcjo6R3JhbnVsYXJpdHkpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFNlZ21lbnRzLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsU2VnbWVudHMuY3BwCShyZXZp
c2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsU2VnbWVu
dHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDksMTEgKzEwOSwxNCBAQCBKU09iamVjdCogSW50
bFNlZ21lbnRzOjpjcmVhdGVTZWdtZW50SXRlCiAgICAgcmV0dXJuIEludGxTZWdtZW50SXRlcmF0
b3I6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LT5zZWdtZW50SXRlcmF0b3JTdHJ1Y3R1cmUoKSwg
V1RGTW92ZShzZWdtZW50ZXIpLCBtX2J1ZmZlciwgbV9zdHJpbmcuZ2V0KCksIG1fZ3JhbnVsYXJp
dHkpOwogfQogCi12b2lkIEludGxTZWdtZW50czo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGws
IFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQg
SW50bFNlZ21lbnRzOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZp
c2l0b3IpCiB7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxJbnRsU2VnbWVudHMqPihj
ZWxsKTsKICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwogICAg
IHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fc3RyaW5nKTsKIH0KIAorREVGSU5FX1ZJU0lU
X0NISUxEUkVOKEludGxTZWdtZW50cyk7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFNlZ21lbnRzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFNlZ21lbnRzLmgJKHJldmlzaW9uIDI3
MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxTZWdtZW50cy5oCSh3
b3JraW5nIGNvcHkpCkBAIC01NCw3ICs1NCw3IEBAIHB1YmxpYzoKICAgICBKU1ZhbHVlIGNvbnRh
aW5pbmcoSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlIGluZGV4VmFsdWUpOwogICAgIEpTT2JqZWN0
KiBjcmVhdGVTZWdtZW50SXRlcmF0b3IoSlNHbG9iYWxPYmplY3QqKTsKIAotICAgIHN0YXRpYyB2
b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJ
U0lUX0NISUxEUkVOOwogCiBwcml2YXRlOgogICAgIEludGxTZWdtZW50cyhWTSYsIFN0cnVjdHVy
ZSosIHN0ZDo6dW5pcXVlX3B0cjxVQnJlYWtJdGVyYXRvciwgVUJyZWFrSXRlcmF0b3JEZWxldGVy
PiYmLCBCb3g8VmVjdG9yPFVDaGFyPj4mJiwgSW50bFNlZ21lbnRlcjo6R3JhbnVsYXJpdHkpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZm
ZXJWaWV3LmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTUsNyArMTU1
LDggQEAgdm9pZCBKU0FycmF5QnVmZmVyVmlldzo6ZmluaXNoQ3JlYXRpb24oVgogICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKLXZvaWQgSlNBcnJheUJ1ZmZlclZpZXc6OnZp
c2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRl
PHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTQXJyYXlCdWZmZXJWaWV3Ojp2aXNpdENoaWxkcmVu
SW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNBcnJheUJ1ZmZl
clZpZXcqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNBcnJheUJ1ZmZlclZpZXcqPihjZWxsKTsKICAg
ICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC0xNjks
NiArMTcwLDggQEAgdm9pZCBKU0FycmF5QnVmZmVyVmlldzo6dmlzaXRDaGlsZHJlbihKUwogICAg
IH0KIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTQXJyYXlCdWZmZXJWaWV3KTsKKwogYm9v
bCBKU0FycmF5QnVmZmVyVmlldzo6cHV0KAogICAgIEpTQ2VsbCogY2VsbCwgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1
ZSwKICAgICBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3LmgJKHJldmlzaW9uIDI3MTQ0MykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3LmgJKHdv
cmtpbmcgY29weSkKQEAgLTE3Miw3ICsxNzIsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgCiAgICAgc3Rh
dGljIGJvb2wgcHV0KEpTQ2VsbCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBKU1Zh
bHVlLCBQdXRQcm9wZXJ0eVNsb3QmKTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4o
SlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogICAg
IAogcHVibGljOgogICAgIFR5cGVkQXJyYXlNb2RlIG1vZGUoKSBjb25zdCB7IHJldHVybiBtX21v
ZGU7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlJdGVyYXRv
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJh
eUl0ZXJhdG9yLmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNBcnJheUl0ZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjgsMTEgKzY4
LDE0IEBAIHZvaWQgSlNBcnJheUl0ZXJhdG9yOjpmaW5pc2hDcmVhdGlvbihWTSYKICAgICAgICAg
QmFzZTo6aW50ZXJuYWxGaWVsZChpbmRleCkuc2V0KHZtLCB0aGlzLCB2YWx1ZXNbaW5kZXhdKTsK
IH0KIAotdm9pZCBKU0FycmF5SXRlcmF0b3I6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBT
bG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpT
QXJyYXlJdGVyYXRvcjo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2
aXNpdG9yKQogewogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNBcnJheUl0ZXJhdG9y
Kj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZv
KCkpOwogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CiB9CiAK
K0RFRklORV9WSVNJVF9DSElMRFJFTihKU0FycmF5SXRlcmF0b3IpOworCiB9IC8vIG5hbWVzcGFj
ZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlJdGVyYXRv
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlJ
dGVyYXRvci5oCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0FycmF5SXRlcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNzgsNyArNzgsNyBAQCBw
dWJsaWM6CiAKICAgICBERUNMQVJFX0lORk87CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxk
cmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsK
IAogcHJpdmF0ZToKICAgICBKU0FycmF5SXRlcmF0b3IoVk0mLCBTdHJ1Y3R1cmUqKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXN5bmNHZW5lcmF0b3IuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXN5bmNHZW5lcmF0b3Iu
Y3BwCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0FzeW5jR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTksMTEgKzU5LDE0IEBAIHZv
aWQgSlNBc3luY0dlbmVyYXRvcjo6ZmluaXNoQ3JlYXRpb24oVk0KICAgICAgICAgaW50ZXJuYWxG
aWVsZChpbmRleCkuc2V0KHZtLCB0aGlzLCB2YWx1ZXNbaW5kZXhdKTsKIH0KIAotdm9pZCBKU0Fz
eW5jR2VuZXJhdG9yOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZp
c2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0FzeW5jR2VuZXJhdG9y
Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAg
ICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0FzeW5jR2VuZXJhdG9yKj4oY2VsbCk7CiAg
ICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwogICAgIEJh
c2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CiB9CiAKK0RFRklORV9WSVNJ
VF9DSElMRFJFTihKU0FzeW5jR2VuZXJhdG9yKTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FzeW5jR2VuZXJhdG9yLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBc3luY0dlbmVyYXRvci5o
CShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Fz
eW5jR2VuZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTk1LDcgKzk1LDcgQEAgcHVibGljOgog
CiAgICAgREVDTEFSRV9FWFBPUlRfSU5GTzsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwog
CiBwcml2YXRlOgogICAgIEpTQXN5bmNHZW5lcmF0b3IoVk0mLCBTdHJ1Y3R1cmUqKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQmlnSW50LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JpZ0ludC5jcHAJKHJldmlzaW9uIDI3
MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQmlnSW50LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNjcsNyArNjcsOCBAQCBKU0JpZ0ludDo6SlNCaWdJbnQoVk0mIHZtLCBT
dHJ1Y3R1cmUqIHN0CiAgICAgLCBtX2RhdGEodm0sIHRoaXMsIGRhdGEsIGxlbmd0aCkKIHsgfQog
Ci12b2lkIEpTQmlnSW50Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3Im
IHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0JpZ0ludDo6dmlz
aXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGF1
dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNCaWdJbnQqPihjZWxsKTsKICAgICBBU1NFUlRfR0Nf
T0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC03Niw2ICs3Nyw4IEBAIHZv
aWQgSlNCaWdJbnQ6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWwKICAgICAgICAgdmlzaXRvci5t
YXJrQXV4aWxpYXJ5KGRhdGEpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNCaWdJbnQp
OworCiB2b2lkIEpTQmlnSW50Ojppbml0aWFsaXplKEluaXRpYWxpemF0aW9uVHlwZSBpbml0VHlw
ZSkKIHsKICAgICBpZiAoaW5pdFR5cGUgPT0gSW5pdGlhbGl6YXRpb25UeXBlOjpXaXRoWmVybykK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQmlnSW50LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCaWdJbnQuaAkocmV2aXNpb24g
MjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCaWdJbnQuaAkod29y
a2luZyBjb3B5KQpAQCAtNTAsNyArNTAsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhw
ciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgU3RydWN0
dXJlSXNJbW1vcnRhbCB8IE92ZXJyaWRlc1RvVGhpczsKICAgICBmcmllbmQgY2xhc3MgQ2FjaGVk
QmlnSW50OwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90Vmlz
aXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3M+CiAgICAgc3RhdGljIElzb1N1YnNwYWNlKiBz
dWJzcGFjZUZvcihWTSYgdm0pCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0JvdW5kRnVuY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTQm91bmRGdW5jdGlvbi5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQm91bmRGdW5jdGlvbi5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI0OSw3ICsyNDksOCBAQCB2b2lkIEpTQm91bmRGdW5jdGlvbjo6ZmluaXNoQ3JlYXRpb24o
Vk0mCiAgICAgQVNTRVJUKGluaGVyaXRzKHZtLCBpbmZvKCkpKTsKIH0KIAotdm9pZCBKU0JvdW5k
RnVuY3Rpb246OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRv
cikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTQm91bmRGdW5jdGlvbjo6dmlz
aXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpT
Qm91bmRGdW5jdGlvbiogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0JvdW5kRnVuY3Rpb24qPihjZWxs
KTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBA
IC0yNjEsNCArMjYyLDYgQEAgdm9pZCBKU0JvdW5kRnVuY3Rpb246OnZpc2l0Q2hpbGRyZW4oSlND
ZQogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fbmFtZU1heUJlTnVsbCk7CiB9CiAK
K0RFRklORV9WSVNJVF9DSElMRFJFTihKU0JvdW5kRnVuY3Rpb24pOworCiB9IC8vIG5hbWVzcGFj
ZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQm91bmRGdW5jdGlv
bi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQm91bmRG
dW5jdGlvbi5oCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0JvdW5kRnVuY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtODQsNyArODQsNyBAQCBw
cml2YXRlOgogICAgIEpTQm91bmRGdW5jdGlvbihWTSYsIE5hdGl2ZUV4ZWN1dGFibGUqLCBKU0ds
b2JhbE9iamVjdCosIFN0cnVjdHVyZSosIEpTT2JqZWN0KiB0YXJnZXRGdW5jdGlvbiwgSlNWYWx1
ZSBib3VuZFRoaXMsIEpTSW1tdXRhYmxlQnV0dGVyZmx5KiBib3VuZEFyZ3MsIEpTU3RyaW5nKiBu
YW1lTWF5QmVOdWxsLCBkb3VibGUgbGVuZ3RoKTsKIAogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24o
Vk0mKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9y
Jik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIFdyaXRlQmFycmllcjxKU09i
amVjdD4gbV90YXJnZXRGdW5jdGlvbjsKICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4gbV9ib3Vu
ZFRoaXM7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NhbGxlZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDYWxsZWUuY3Bw
CShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Nh
bGxlZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUwLDcgKzUwLDggQEAgdm9pZCBKU0NhbGxlZTo6
ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQogICAgIEFTU0VSVChpbmhlcml0cyh2bSwgaW5mbygpKSk7
CiB9CiAKLXZvaWQgSlNDYWxsZWU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90Vmlz
aXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTQ2FsbGVl
Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAg
ICAgSlNDYWxsZWUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNDYWxsZWUqPihjZWxsKTsKICAgICBB
U1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC01OSw0ICs2
MCw2IEBAIHZvaWQgSlNDYWxsZWU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWwKICAgICB2aXNp
dG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX3Njb3BlKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxE
UkVOKEpTQ2FsbGVlKTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0NhbGxlZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTQ2FsbGVlLmgJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2FsbGVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMCw3
ICsxMDAsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOwogICAg
IHVzaW5nIEJhc2U6OmZpbmlzaENyZWF0aW9uOwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGls
ZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47
CiAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCShyZXZpc2lvbiAyNzE0NDMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDEgSGFycmkg
UG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKICAqICBDb3B5cmlnaHQgKEMpIDIwMDEgUGV0ZXIgS2Vs
bHkgKHBta0Bwb3N0LmNvbSkKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAxOSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMjAgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTMyLDYg
KzMyLDcgQEAKICNpbmNsdWRlICJKU0xvY2suaCIKICNpbmNsdWRlICJKU1R5cGVJbmZvLmgiCiAj
aW5jbHVkZSAiU2xvdFZpc2l0b3IuaCIKKyNpbmNsdWRlICJTbG90VmlzaXRvck1hY3Jvcy5oIgog
I2luY2x1ZGUgIlN1YnNwYWNlQWNjZXNzLmgiCiAjaW5jbHVkZSAiVHlwZWRBcnJheVR5cGUuaCIK
ICNpbmNsdWRlICJXcml0ZUJhcnJpZXIuaCIKQEAgLTE2Nyw4ICsxNjgsOCBAQCBwdWJsaWM6CiAg
ICAgc2l6ZV90IGVzdGltYXRlZFNpemVJbkJ5dGVzKFZNJikgY29uc3Q7CiAgICAgSlNfRVhQT1JU
X1BSSVZBVEUgc3RhdGljIHNpemVfdCBlc3RpbWF0ZWRTaXplKEpTQ2VsbCosIFZNJik7CiAKLSAg
ICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7Ci0gICAg
c3RhdGljIHZvaWQgdmlzaXRPdXRwdXRDb25zdHJhaW50cyhKU0NlbGwqLCBTbG90VmlzaXRvciYp
OworICAgIERFQ0xBUkVfSU5MSU5FX1ZJU0lUX0NISUxEUkVOOworICAgIHN0YXRpYyB2b2lkIHZp
c2l0T3V0cHV0Q29uc3RyYWludHMoSlNDZWxsKiwgQWJzdHJhY3RTbG90VmlzaXRvciYpOwogCiAg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgYW5hbHl6ZUhlYXAoSlNDZWxsKiwgSGVh
cEFuYWx5emVyJik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2Vs
bElubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0NlbGxJbmxpbmVzLmgJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQ2VsbElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBA
QAogI2luY2x1ZGUgIkNvbXBsZXRlU3Vic3BhY2VJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQ1BVLmgi
CiAjaW5jbHVkZSAiQ2FsbEZyYW1lSW5saW5lcy5oIgorI2luY2x1ZGUgIkRlYnVnU2xvdFZpc2l0
b3JJbmxpbmVzLmgiCiAjaW5jbHVkZSAiRGVmZXJHQy5oIgogI2luY2x1ZGUgIkZyZWVMaXN0SW5s
aW5lcy5oIgogI2luY2x1ZGUgIkhhbmRsZS5oIgpAQCAtMTQxLDEyICsxNDIsMTUgQEAgQUxXQVlT
X0lOTElORSBTdHJ1Y3R1cmUqIEpTQ2VsbDo6c3RydWN0dQogICAgIHJldHVybiB2bS5nZXRTdHJ1
Y3R1cmUobV9zdHJ1Y3R1cmVJRCk7CiB9CiAKLWlubGluZSB2b2lkIEpTQ2VsbDo6dmlzaXRDaGls
ZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5h
bWUgVmlzaXRvcj4KK2lubGluZSB2b2lkIEpTQ2VsbDo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxs
KiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVy
ZWQoY2VsbC0+c3RydWN0dXJlKHZpc2l0b3Iudm0oKSkpOwogfQogCi1pbmxpbmUgdm9pZCBKU0Nl
bGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHMoSlNDZWxsKiwgU2xvdFZpc2l0b3ImKQorREVGSU5F
X0lOTElORV9WSVNJVF9DSElMRFJFTihKU0NlbGwpOworCitpbmxpbmUgdm9pZCBKU0NlbGw6OnZp
c2l0T3V0cHV0Q29uc3RyYWludHMoSlNDZWxsKiwgQWJzdHJhY3RTbG90VmlzaXRvciYpCiB7CiB9
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ3VzdG9tR2V0dGVyU2V0
dGVyRnVuY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTQ3VzdG9tR2V0dGVyU2V0dGVyRnVuY3Rpb24uY3BwCShyZXZpc2lvbiAyNzE0NDMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0N1c3RvbUdldHRlclNldHRlckZ1bmN0
aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODUsNyArODUsOCBAQCBKU0N1c3RvbUdldHRlclNl
dHRlckZ1bmN0aW9uKiBKU0N1c3RvbUdlCiAgICAgcmV0dXJuIGZ1bmN0aW9uOwogfQogCi12b2lk
IEpTQ3VzdG9tR2V0dGVyU2V0dGVyRnVuY3Rpb246OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxs
LCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lk
IEpTQ3VzdG9tR2V0dGVyU2V0dGVyRnVuY3Rpb246OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCog
Y2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU0N1c3RvbUdldHRlclNldHRlckZ1bmN0
aW9uKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQ3VzdG9tR2V0dGVyU2V0dGVyRnVuY3Rpb24qPihj
ZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7
CkBAIC05NCw2ICs5NSw4IEBAIHZvaWQgSlNDdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbjo6dmlz
aXQKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2dldHRlclNldHRlcik7CiB9CiAK
K0RFRklORV9WSVNJVF9DSElMRFJFTihKU0N1c3RvbUdldHRlclNldHRlckZ1bmN0aW9uKTsKKwog
dm9pZCBKU0N1c3RvbUdldHRlclNldHRlckZ1bmN0aW9uOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0s
IE5hdGl2ZUV4ZWN1dGFibGUqIGV4ZWN1dGFibGUsIEN1c3RvbUdldHRlclNldHRlciogZ2V0dGVy
U2V0dGVyLCBjb25zdCBTdHJpbmcmIG5hbWUpCiB7CiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24o
dm0sIGV4ZWN1dGFibGUsIGlzU2V0dGVyKCksIG5hbWUpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNDdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbi5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ3VzdG9tR2V0dGVyU2V0dGVyRnVu
Y3Rpb24uaAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNDdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC02Myw3
ICs2Myw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgSlNDdXN0b21HZXR0ZXJTZXR0ZXJGdW5j
dGlvbihWTSYsIE5hdGl2ZUV4ZWN1dGFibGUqLCBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSos
IFR5cGUsIGNvbnN0IFByb3BlcnR5TmFtZSYpOwogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0m
LCBOYXRpdmVFeGVjdXRhYmxlKiwgQ3VzdG9tR2V0dGVyU2V0dGVyKiwgY29uc3QgU3RyaW5nJik7
Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwor
ICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBXcml0ZUJhcnJpZXI8Q3VzdG9tR2V0
dGVyU2V0dGVyPiBtX2dldHRlclNldHRlcjsKICAgICBUeXBlIG1fdHlwZTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRmluYWxpemF0aW9uUmVnaXN0cnkuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRmluYWxpemF0aW9uUmVn
aXN0cnkuY3BwCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0ZpbmFsaXphdGlvblJlZ2lzdHJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiAr
MjYsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkpTRmluYWxpemF0aW9uUmVn
aXN0cnkuaCIKIAorI2luY2x1ZGUgIkFic3RyYWN0U2xvdFZpc2l0b3IuaCIKICNpbmNsdWRlICJE
ZWZlcnJlZFdvcmtUaW1lci5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJK
U0ludGVybmFsRmllbGRPYmplY3RJbXBsSW5saW5lcy5oIgpAQCAtNjAsNyArNjEsOCBAQCB2b2lk
IEpTRmluYWxpemF0aW9uUmVnaXN0cnk6OmZpbmlzaENyZWF0CiAgICAgZ2xvYmFsT2JqZWN0LT5n
bG9iYWxPYmplY3RNZXRob2RUYWJsZSgpLT5jdXJyZW50U2NyaXB0RXhlY3V0aW9uT3duZXIoZ2xv
YmFsT2JqZWN0KTsKIH0KIAotdm9pZCBKU0ZpbmFsaXphdGlvblJlZ2lzdHJ5Ojp2aXNpdENoaWxk
cmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBWaXNpdG9yPgordm9pZCBKU0ZpbmFsaXphdGlvblJlZ2lzdHJ5Ojp2aXNpdENoaWxkcmVuSW1w
bChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgQmFzZTo6dmlzaXRDaGls
ZHJlbihjZWxsLCB2aXNpdG9yKTsKIApAQCAtODAsMTMgKzgyLDE1IEBAIHZvaWQgSlNGaW5hbGl6
YXRpb25SZWdpc3RyeTo6dmlzaXRDaGlsZHIKICAgICBmb3IgKGF1dG8mIGhvbGRpbmdzIDogdGhp
c09iamVjdC0+bV9ub1VucmVnaXN0cmF0aW9uRGVhZCkKICAgICAgICAgdmlzaXRvci5hcHBlbmQo
aG9sZGluZ3MpOwogCi0gICAgc2l6ZV90IHRvdGFsQnVmZmVyU2l6ZXNJbkJ5dGVzID0gdGhpc09i
amVjdC0+bV9kZWFkUmVnaXN0cmF0aW9ucy5jYXBhY2l0eSgpICogc2l6ZW9mKGRlY2x0eXBlKHRo
aXNPYmplY3QtPm1fZGVhZFJlZ2lzdHJhdGlvbnMpOjpLZXlWYWx1ZVBhaXJUeXBlKTsKLSAgICB0
b3RhbEJ1ZmZlclNpemVzSW5CeXRlcyArPSB0aGlzT2JqZWN0LT5tX2xpdmVSZWdpc3RyYXRpb25z
LmNhcGFjaXR5KCkgKiBzaXplb2YoZGVjbHR5cGUodGhpc09iamVjdC0+bV9kZWFkUmVnaXN0cmF0
aW9ucyk6OktleVZhbHVlUGFpclR5cGUpOworICAgIHNpemVfdCB0b3RhbEJ1ZmZlclNpemVzSW5C
eXRlcyA9IHRoaXNPYmplY3QtPm1fZGVhZFJlZ2lzdHJhdGlvbnMuY2FwYWNpdHkoKSAqIHNpemVv
Zih0eXBlbmFtZSBkZWNsdHlwZSh0aGlzT2JqZWN0LT5tX2RlYWRSZWdpc3RyYXRpb25zKTo6S2V5
VmFsdWVQYWlyVHlwZSk7CisgICAgdG90YWxCdWZmZXJTaXplc0luQnl0ZXMgKz0gdGhpc09iamVj
dC0+bV9saXZlUmVnaXN0cmF0aW9ucy5jYXBhY2l0eSgpICogc2l6ZW9mKHR5cGVuYW1lIGRlY2x0
eXBlKHRoaXNPYmplY3QtPm1fZGVhZFJlZ2lzdHJhdGlvbnMpOjpLZXlWYWx1ZVBhaXJUeXBlKTsK
ICAgICB0b3RhbEJ1ZmZlclNpemVzSW5CeXRlcyArPSB0aGlzT2JqZWN0LT5tX25vVW5yZWdpc3Ry
YXRpb25MaXZlLmNhcGFjaXR5KCkgKiBzaXplb2YoZGVjbHR5cGUodGhpc09iamVjdC0+bV9ub1Vu
cmVnaXN0cmF0aW9uTGl2ZS50YWtlTGFzdCgpKSk7CiAgICAgdG90YWxCdWZmZXJTaXplc0luQnl0
ZXMgKz0gdGhpc09iamVjdC0+bV9ub1VucmVnaXN0cmF0aW9uRGVhZC5jYXBhY2l0eSgpICogc2l6
ZW9mKGRlY2x0eXBlKHRoaXNPYmplY3QtPm1fbm9VbnJlZ2lzdHJhdGlvbkxpdmUudGFrZUxhc3Qo
KSkpOwogICAgIHZpc2l0b3Iudm0oKS5oZWFwLnJlcG9ydEV4dHJhTWVtb3J5VmlzaXRlZCh0b3Rh
bEJ1ZmZlclNpemVzSW5CeXRlcyk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU0ZpbmFs
aXphdGlvblJlZ2lzdHJ5KTsKKwogdm9pZCBKU0ZpbmFsaXphdGlvblJlZ2lzdHJ5OjpkZXN0cm95
KEpTQ2VsbCogdGFibGUpCiB7CiAgICAgc3RhdGljX2Nhc3Q8SlNGaW5hbGl6YXRpb25SZWdpc3Ry
eSo+KHRhYmxlKS0+fkpTRmluYWxpemF0aW9uUmVnaXN0cnkoKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTRmluYWxpemF0aW9uUmVnaXN0cnkuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ZpbmFsaXphdGlvblJlZ2lzdHJ5LmgJ
KHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRmlu
YWxpemF0aW9uUmVnaXN0cnkuaAkod29ya2luZyBjb3B5KQpAQCAtNzAsNyArNzAsNyBAQCBwdWJs
aWM6CiAgICAgREVDTEFSRV9FWFBPUlRfSU5GTzsKIAogICAgIHZvaWQgZmluYWxpemVVbmNvbmRp
dGlvbmFsbHkoVk0mKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNs
b3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKICAgICBzdGF0aWMgdm9p
ZCBkZXN0cm95KEpTQ2VsbCopOwogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0Rlc3Ry
dWN0aW9uID0gdHJ1ZTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNG
dW5jdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNGdW5jdGlvbi5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTRnVuY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTIsNyArMjUyLDgg
QEAgY29uc3QgU291cmNlQ29kZSogSlNGdW5jdGlvbjo6c291cmNlQ29kZQogICAgIHJldHVybiAm
anNFeGVjdXRhYmxlKCktPnNvdXJjZSgpOwogfQogICAgIAotdm9pZCBKU0Z1bmN0aW9uOjp2aXNp
dENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0
eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0Z1bmN0aW9uOjp2aXNpdENoaWxkcmVuSW1wbChKU0Nl
bGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNGdW5jdGlvbiogdGhpc09iamVj
dCA9IGpzQ2FzdDxKU0Z1bmN0aW9uKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhF
UklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtMjYxLDYgKzI2Miw4IEBAIHZvaWQgSlNGdW5j
dGlvbjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGMKICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmll
cmVkKGJpdHdpc2VfY2FzdDxKU0NlbGwqPihiaXR3aXNlX2Nhc3Q8dWludHB0cl90Pih0aGlzT2Jq
ZWN0LT5tX2V4ZWN1dGFibGVPclJhcmVEYXRhKSAmIH5yYXJlRGF0YVRhZykpOwogfQogCitERUZJ
TkVfVklTSVRfQ0hJTERSRU4oSlNGdW5jdGlvbik7CisKIENhbGxEYXRhIEpTRnVuY3Rpb246Omdl
dENhbGxEYXRhKEpTQ2VsbCogY2VsbCkKIHsKICAgICAvLyBLZWVwIHRoaXMgZnVuY3Rpb24gT0sg
Zm9yIGludm9jYXRpb24gZnJvbSBjb25jdXJyZW50IGNvbXBpbGVycy4KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmgJKHJldmlzaW9uIDI3MTQ0MykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uaAkod29ya2luZyBjb3B5
KQpAQCAtMTgwLDcgKzE4MCw3IEBAIHByb3RlY3RlZDoKIAogICAgIHN0YXRpYyBib29sIGRlbGV0
ZVByb3BlcnR5KEpTQ2VsbCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBEZWxldGVQ
cm9wZXJ0eVNsb3QmKTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwg
U2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiBwcml2YXRlOgog
ICAgIHN0YXRpYyBKU0Z1bmN0aW9uKiBjcmVhdGVJbXBsKFZNJiB2bSwgRnVuY3Rpb25FeGVjdXRh
YmxlKiBleGVjdXRhYmxlLCBKU1Njb3BlKiBzY29wZSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyYXRvci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmF0b3IuY3BwCShy
ZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVy
YXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU5LDExICs1OSwxNCBAQCB2b2lkIEpTR2VuZXJh
dG9yOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCiAgICAgICAgIGludGVybmFsRmllbGQoaW5kZXgp
LnNldCh2bSwgdGhpcywgdmFsdWVzW2luZGV4XSk7CiB9CiAKLXZvaWQgSlNHZW5lcmF0b3I6OnZp
c2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRl
PHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTR2VuZXJhdG9yOjp2aXNpdENoaWxkcmVuSW1wbChK
U0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0byogdGhpc09iamVjdCA9
IGpzQ2FzdDxKU0dlbmVyYXRvcio+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJ
VFModGhpc09iamVjdCwgaW5mbygpKTsKICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmpl
Y3QsIHZpc2l0b3IpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNHZW5lcmF0b3IpOwor
CiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTR2VuZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNHZW5lcmF0b3IuaAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNHZW5lcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtOTQsNyArOTQsNyBA
QCBwdWJsaWM6CiAKICAgICBERUNMQVJFX0VYUE9SVF9JTkZPOwogCi0gICAgc3RhdGljIHZvaWQg
dmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRf
Q0hJTERSRU47CiAKIHByaXZhdGU6CiAgICAgSlNHZW5lcmF0b3IoVk0mLCBTdHJ1Y3R1cmUqKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlW
aWV3LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5l
cmljVHlwZWRBcnJheVZpZXcuaAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXcuaAkod29ya2luZyBjb3B5KQpA
QCAtMzA3LDcgKzMwNyw3IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVy
dHlOYW1lcyhKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lQXJyYXkmLCBE
b250RW51bVByb3BlcnRpZXNNb2RlKTsKIAogICAgIHN0YXRpYyBzaXplX3QgZXN0aW1hdGVkU2l6
ZShKU0NlbGwqLCBWTSYpOwotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwg
U2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1RFTVBMQVRFX1ZJU0lUX0NISUxEUkVOOwogCiAg
ICAgLy8gUmV0dXJucyB0cnVlIGlmIHN1Y2Nlc3NmdWwsIGFuZCBmYWxzZSBvbiBlcnJvcjsgaXQg
d2lsbCB0aHJvdyBvbiBlcnJvci4KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPdGhlckFkYXB0b3I+
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5
Vmlld0lubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaAkocmV2aXNpb24gMjcxNDQzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxp
bmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5MSw3ICs0OTEsOCBAQCBzaXplX3QgSlNHZW5lcmlj
VHlwZWRBcnJheVZpZXc8QWRhcHRvcj46CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+
Ci12b2lkIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+Ojp2aXNpdENoaWxkcmVuKEpT
Q2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNp
dG9yPgordm9pZCBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6dmlzaXRDaGlsZHJl
bkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTR2VuZXJpY1R5
cGVkQXJyYXlWaWV3KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3
Kj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZv
KCkpOwpAQCAtNTI5LDQgKzUzMCw2IEBAIHZvaWQgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRh
cHRvcj46OnYKICAgICB9CiB9CiAKK0RFRklORV9URU1QTEFURV9WSVNJVF9DSElMRFJFTih0ZW1w
bGF0ZTx0eXBlbmFtZSBBZGFwdG9yPiwgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj4p
OworCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTg5NSw3ICsxODk1LDggQEAgdm9pZCBKU0dsb2JhbE9iamVjdDo6cmVzZXRQcm90b3R5
cGUoVk0mIAogICAgIHNldEdsb2JhbFRoaXModm0sIEpTUHJveHk6OmNyZWF0ZSh2bSwgSlNQcm94
eTo6Y3JlYXRlU3RydWN0dXJlKHZtLCB0aGlzLCBwcm90b3R5cGUsIFB1cmVGb3J3YXJkaW5nUHJv
eHlUeXBlKSwgdGhpcykpOwogfQogCi12b2lkIEpTR2xvYmFsT2JqZWN0Ojp2aXNpdENoaWxkcmVu
KEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPgordm9pZCBKU0dsb2JhbE9iamVjdDo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBj
ZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogeyAKICAgICBKU0dsb2JhbE9iamVjdCogdGhpc09iamVj
dCA9IGpzQ2FzdDxKU0dsb2JhbE9iamVjdCo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1Rf
SU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTIwNjMsNiArMjA2NCw4IEBAIHZvaWQg
SlNHbG9iYWxPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWwKICAgICB0aGlzT2JqZWN0LT5tX3Jl
Z0V4cEdsb2JhbERhdGEudmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7CiB9CiAKK0RFRklORV9FWFBP
UlRfVklTSVRfQ0hJTERSRU4oSlNHbG9iYWxPYmplY3QpOworCiBDYWxsRnJhbWUqIEpTR2xvYmFs
T2JqZWN0OjpkZXByZWNhdGVkQ2FsbEZyYW1lRm9yRGVidWdnZXIoKQogewogICAgIHJldHVybiBD
YWxsRnJhbWU6OmNyZWF0ZShtX2RlcHJlY2F0ZWRDYWxsRnJhbWVGb3JEZWJ1Z2dlcik7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgJKHJl
dmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFs
T2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTYwOSw3ICs2MDksNyBAQCBwdWJsaWM6CiAgICAg
SlNfRVhQT1JUX1BSSVZBVEUgfkpTR2xvYmFsT2JqZWN0KCk7CiAgICAgSlNfRVhQT1JUX1BSSVZB
VEUgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKIAotICAgIEpTX0VYUE9SVF9QUklWQVRF
IHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBE
RUNMQVJFX0VYUE9SVF9WSVNJVF9DSElMRFJFTjsKIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0
YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0Kiwg
UHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0
aWMgYm9vbCBwdXQoSlNDZWxsKiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIEpTVmFs
dWUsIFB1dFByb3BlcnR5U2xvdCYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNJbW11dGFibGVCdXR0ZXJmbHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTSW1tdXRhYmxlQnV0dGVyZmx5LmNwcAkocmV2aXNpb24gMjcxNDQz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbW11dGFibGVCdXR0ZXJmbHku
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw4IEBAIG5hbWVzcGFjZSBKU0MgewogCiBj
b25zdCBDbGFzc0luZm8gSlNJbW11dGFibGVCdXR0ZXJmbHk6OnNfaW5mbyA9IHsgIkltbXV0YWJs
ZSBCdXR0ZXJmbHkiLCBudWxscHRyLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RB
QkxFKEpTSW1tdXRhYmxlQnV0dGVyZmx5KSB9OwogCi12b2lkIEpTSW1tdXRhYmxlQnV0dGVyZmx5
Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1w
bGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0ltbXV0YWJsZUJ1dHRlcmZseTo6dmlzaXRD
aGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEFTU0VS
VF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2VsbCwgaW5mbygpKTsKICAgICBCYXNlOjp2aXNpdENoaWxk
cmVuKGNlbGwsIHZpc2l0b3IpOwpAQCAtNDUsNiArNDYsOCBAQCB2b2lkIEpTSW1tdXRhYmxlQnV0
dGVyZmx5Ojp2aXNpdENoaWxkcmVuCiAgICAgdmlzaXRvci5hcHBlbmRWYWx1ZXNIaWRkZW4oYnV0
dGVyZmx5LT5jb250aWd1b3VzKCkuZGF0YSgpLCBidXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpKTsK
IH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTSW1tdXRhYmxlQnV0dGVyZmx5KTsKKwogdm9p
ZCBKU0ltbXV0YWJsZUJ1dHRlcmZseTo6Y29weVRvQXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0Kiwg
SlNWYWx1ZSogZmlyc3RFbGVtZW50RGVzdCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5n
dGgpCiB7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ltbXV0YWJsZUJ1dHRlcmZseS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTSW1tdXRhYmxlQnV0
dGVyZmx5LmgJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTSW1tdXRhYmxlQnV0dGVyZmx5LmgJKHdvcmtpbmcgY29weSkKQEAgLTE0NSw3ICsxNDUs
NyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBqc0RvdWJsZU51bWJlcih2YWx1ZSk7CiAgICAg
fQogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYp
OworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICB2b2lkIGNvcHlUb0FyZ3VtZW50
cyhKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUqIGZpcnN0RWxlbWVudERlc3QsIHVuc2lnbmVkIG9m
ZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTSW50ZXJuYWxGaWVsZE9iamVjdEltcGwuaAkocmV2aXNp
b24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbnRlcm5hbEZp
ZWxkT2JqZWN0SW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC02Niw3ICs2Niw3IEBAIHB1YmxpYzoK
ICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mSW50ZXJuYWxGaWVsZCh1bnNpZ25lZCBpbmRl
eCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTSW50ZXJuYWxGaWVsZE9iamVjdEltcGwsIG1f
aW50ZXJuYWxGaWVsZHMpICsgaW5kZXggKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KTsg
fQogCiBwcm90ZWN0ZWQ6Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBT
bG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVEVNUExBVEVfVklTSVRfQ0hJTERSRU47CiAKICAg
ICBKU0ludGVybmFsRmllbGRPYmplY3RJbXBsKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUp
CiAgICAgICAgIDogQmFzZSh2bSwgc3RydWN0dXJlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbElubGluZXMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ludGVybmFsRmllbGRPYmplY3RJ
bXBsSW5saW5lcy5oCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0ludGVybmFsRmllbGRPYmplY3RJbXBsSW5saW5lcy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zMCw3ICszMCw4IEBACiBuYW1lc3BhY2UgSlNDIHsKIAogdGVtcGxhdGU8dW5zaWduZWQg
cGFzc2VkTnVtYmVyT2ZJbnRlcm5hbEZpZWxkcz4KLXZvaWQgSlNJbnRlcm5hbEZpZWxkT2JqZWN0
SW1wbDxwYXNzZWROdW1iZXJPZkludGVybmFsRmllbGRzPjo6dmlzaXRDaGlsZHJlbihKU0NlbGwq
IGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4K
K3ZvaWQgSlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbDxwYXNzZWROdW1iZXJPZkludGVybmFsRmll
bGRzPjo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQog
ewogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1w
bCo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5m
bygpKTsKQEAgLTM4LDQgKzM5LDYgQEAgdm9pZCBKU0ludGVybmFsRmllbGRPYmplY3RJbXBsPHBh
c3NlZE51bQogICAgIHZpc2l0b3IuYXBwZW5kVmFsdWVzKHRoaXNPYmplY3QtPm1faW50ZXJuYWxG
aWVsZHMsIG51bWJlck9mSW50ZXJuYWxGaWVsZHMpOwogfQogCitERUZJTkVfVEVNUExBVEVfVklT
SVRfQ0hJTERSRU4odGVtcGxhdGU8dW5zaWduZWQgcGFzc2VkTnVtYmVyT2ZJbnRlcm5hbEZpZWxk
cz4sIEpTSW50ZXJuYWxGaWVsZE9iamVjdEltcGw8cGFzc2VkTnVtYmVyT2ZJbnRlcm5hbEZpZWxk
cz4pOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTTGV4aWNhbEVudmlyb25tZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0xleGljYWxFbnZpcm9ubWVudC5jcHAJKHJldmlzaW9uIDI3
MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTGV4aWNhbEVudmlyb25t
ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsOCBAQCBuYW1lc3BhY2UgSlNDIHsK
IAogY29uc3QgQ2xhc3NJbmZvIEpTTGV4aWNhbEVudmlyb25tZW50OjpzX2luZm8gPSB7ICJKU0xl
eGljYWxFbnZpcm9ubWVudCIsICZCYXNlOjpzX2luZm8sIG51bGxwdHIsIG51bGxwdHIsIENSRUFU
RV9NRVRIT0RfVEFCTEUoSlNMZXhpY2FsRW52aXJvbm1lbnQpIH07CiAKLXZvaWQgSlNMZXhpY2Fs
RW52aXJvbm1lbnQ6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlz
aXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTTGV4aWNhbEVudmlyb25t
ZW50Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7
CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0xleGljYWxFbnZpcm9ubWVudCo+KGNl
bGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsK
QEAgLTQ0LDYgKzQ1LDggQEAgdm9pZCBKU0xleGljYWxFbnZpcm9ubWVudDo6dmlzaXRDaGlsZHJl
bgogICAgIHZpc2l0b3IuYXBwZW5kVmFsdWVzSGlkZGVuKHRoaXNPYmplY3QtPnZhcmlhYmxlcygp
LCB0aGlzT2JqZWN0LT5zeW1ib2xUYWJsZSgpLT5zY29wZVNpemUoKSk7CiB9CiAKK0RFRklORV9W
SVNJVF9DSElMRFJFTihKU0xleGljYWxFbnZpcm9ubWVudCk7CisKIHZvaWQgSlNMZXhpY2FsRW52
aXJvbm1lbnQ6OmFuYWx5emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFuYWx5emVyJiBhbmFseXpl
cikKIHsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTTGV4aWNhbEVudmlyb25tZW50
Kj4oY2VsbCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xleGljYWxF
bnZpcm9ubWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTTGV4aWNhbEVudmlyb25tZW50LmgJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTTGV4aWNhbEVudmlyb25tZW50LmgJKHdvcmtpbmcgY29weSkK
QEAgLTEzNCw3ICsxMzQsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBz
dGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVD
TEFSRV9WSVNJVF9DSElMRFJFTjsKICAgICBzdGF0aWMgdm9pZCBhbmFseXplSGVhcChKU0NlbGwq
LCBIZWFwQW5hbHl6ZXImKTsKIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTTWFwSXRlcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTTWFwSXRlcmF0b3IuY3BwCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01hcEl0ZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNTcsMTMgKzU3LDE2IEBAIHZvaWQgSlNNYXBJdGVyYXRvcjo6ZmluaXNoQ3JlYXRpb24oVk0m
IHYKICAgICAgICAgQmFzZTo6aW50ZXJuYWxGaWVsZChpbmRleCkuc2V0KHZtLCB0aGlzLCB2YWx1
ZXNbaW5kZXhdKTsKIH0KIAotdm9pZCBKU01hcEl0ZXJhdG9yOjp2aXNpdENoaWxkcmVuKEpTQ2Vs
bCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
Pgordm9pZCBKU01hcEl0ZXJhdG9yOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZp
c2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU01hcEl0
ZXJhdG9yKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0
LCBpbmZvKCkpOwogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7
CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU01hcEl0ZXJhdG9yKTsKKwogSlNWYWx1ZSBK
U01hcEl0ZXJhdG9yOjpjcmVhdGVQYWlyKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpT
VmFsdWUga2V5LCBKU1ZhbHVlIHZhbHVlKQogewogICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFy
Z3M7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01hcEl0ZXJhdG9yLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNYXBJdGVyYXRv
ci5oCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U01hcEl0ZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0Miw3ICsxNDIsNyBAQCBwcml2YXRl
OgogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBKU01hcCos
IEl0ZXJhdGlvbktpbmQpOwogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKICAgICBKU1Zh
bHVlIGNyZWF0ZVBhaXIoSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlLCBKU1ZhbHVlKTsKLSAgICBz
dGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVD
TEFSRV9WSVNJVF9DSElMRFJFTjsKIH07CiBTVEFUSUNfQVNTRVJUX0lTX1RSSVZJQUxMWV9ERVNU
UlVDVElCTEUoSlNNYXBJdGVyYXRvcik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTTW9kdWxlRW52aXJvbm1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlRW52aXJvbm1lbnQuY3BwCShyZXZpc2lvbiAyNzE0
NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZUVudmlyb25tZW50
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjUsNyArNjUsOCBAQCB2b2lkIEpTTW9kdWxlRW52aXJv
bm1lbnQ6OmZpbmlzaENyZWF0aW9uCiAgICAgdGhpcy0+bW9kdWxlUmVjb3JkU2xvdCgpLnNldCh2
bSwgdGhpcywgbW9kdWxlUmVjb3JkKTsKIH0KIAotdm9pZCBKU01vZHVsZUVudmlyb25tZW50Ojp2
aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0
ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU01vZHVsZUVudmlyb25tZW50Ojp2aXNpdENoaWxk
cmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNNb2R1bGVF
bnZpcm9ubWVudCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU01vZHVsZUVudmlyb25tZW50Kj4oY2Vs
bCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpA
QCAtNzQsNiArNzUsOCBAQCB2b2lkIEpTTW9kdWxlRW52aXJvbm1lbnQ6OnZpc2l0Q2hpbGRyZW4o
CiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bW9kdWxlUmVjb3JkU2xvdCgpKTsKIH0K
IAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTTW9kdWxlRW52aXJvbm1lbnQpOworCiBib29sIEpT
TW9kdWxlRW52aXJvbm1lbnQ6OmdldE93blByb3BlcnR5U2xvdChKU09iamVjdCogY2VsbCwgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJv
cGVydHlTbG90JiBzbG90KQogewogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlRW52aXJvbm1lbnQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZUVudmly
b25tZW50LmgJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTTW9kdWxlRW52aXJvbm1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtODksNyArODksNyBA
QCBwcml2YXRlOgogICAgICAgICByZXR1cm4gKmJpdHdpc2VfY2FzdDxXcml0ZUJhcnJpZXJCYXNl
PEFic3RyYWN0TW9kdWxlUmVjb3JkPio+KGJpdHdpc2VfY2FzdDxjaGFyKj4odGhpcykgKyBvZmZz
ZXRPZk1vZHVsZVJlY29yZChzeW1ib2xUYWJsZSgpKSk7CiAgICAgfQogCi0gICAgc3RhdGljIHZv
aWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklT
SVRfQ0hJTERSRU47CiB9OwogCiBpbmxpbmUgSlNNb2R1bGVFbnZpcm9ubWVudDo6SlNNb2R1bGVF
bnZpcm9ubWVudChWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU1Njb3BlKiBjdXJyZW50
U2NvcGUsIFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTTW9kdWxlTmFtZXNwYWNlT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZU5hbWVzcGFjZU9iamVjdC5jcHAJ
KHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9k
dWxlTmFtZXNwYWNlT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODUsNyArODUsOCBAQCB2
b2lkIEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0OjpkZXN0cm95KEpTCiAgICAgdGhpc09iamVjdC0+
SlNNb2R1bGVOYW1lc3BhY2VPYmplY3Q6On5KU01vZHVsZU5hbWVzcGFjZU9iamVjdCgpOwogfQog
Ci12b2lkIEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2Vs
bCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9p
ZCBKU01vZHVsZU5hbWVzcGFjZU9iamVjdDo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxs
LCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0KiB0aGlz
T2JqZWN0ID0ganNDYXN0PEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0Kj4oY2VsbCk7CiAgICAgQVNT
RVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtOTgsNiArOTks
OCBAQCB2b2lkIEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0Ojp2aXNpdENoaWxkCiAgICAgfQogfQog
CitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QpOworCiBzdGF0
aWMgSlNWYWx1ZSBnZXRWYWx1ZShKU01vZHVsZUVudmlyb25tZW50KiBlbnZpcm9ubWVudCwgUHJv
cGVydHlOYW1lIGxvY2FsTmFtZSwgU2NvcGVPZmZzZXQmIHNjb3BlT2Zmc2V0KQogewogICAgIFN5
bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSA9IGVudmlyb25tZW50LT5zeW1ib2xUYWJsZSgpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVOYW1lc3BhY2VPYmplY3Qu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZU5h
bWVzcGFjZU9iamVjdC5oCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU01vZHVsZU5hbWVzcGFjZU9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC03
Miw3ICs3Miw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgSlNN
b2R1bGVOYW1lc3BhY2VPYmplY3QoVk0mLCBTdHJ1Y3R1cmUqKTsKICAgICBKU19FWFBPUlRfUFJJ
VkFURSB2b2lkIGZpbmlzaENyZWF0aW9uKEpTR2xvYmFsT2JqZWN0KiwgQWJzdHJhY3RNb2R1bGVS
ZWNvcmQqLCBWZWN0b3I8c3RkOjpwYWlyPElkZW50aWZpZXIsIEFic3RyYWN0TW9kdWxlUmVjb3Jk
OjpSZXNvbHV0aW9uPj4mJik7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwq
LCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAgICAgYm9vbCBn
ZXRPd25Qcm9wZXJ0eVNsb3RDb21tb24oSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIFBy
b3BlcnR5U2xvdCYpOwogCiAgICAgc3RydWN0IEV4cG9ydEVudHJ5IHsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlUmVjb3JkLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZVJlY29yZC5jcHAJKHJldmlzaW9u
IDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlUmVjb3Jk
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzAsNyArNzAsOCBAQCB2b2lkIEpTTW9kdWxlUmVjb3Jk
OjpmaW5pc2hDcmVhdGlvbihKU0dsCiAgICAgQVNTRVJUKGluaGVyaXRzKHZtLCBpbmZvKCkpKTsK
IH0KIAotdm9pZCBKU01vZHVsZVJlY29yZDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNN
b2R1bGVSZWNvcmQ6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlz
aXRvcikKIHsKICAgICBKU01vZHVsZVJlY29yZCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU01vZHVs
ZVJlY29yZCo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVj
dCwgaW5mbygpKTsKQEAgLTc4LDYgKzc5LDggQEAgdm9pZCBKU01vZHVsZVJlY29yZDo6dmlzaXRD
aGlsZHJlbihKU0NlbAogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fbW9kdWxlUHJv
Z3JhbUV4ZWN1dGFibGUpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNNb2R1bGVSZWNv
cmQpOworCiB2b2lkIEpTTW9kdWxlUmVjb3JkOjpsaW5rKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEpTVmFsdWUgc2NyaXB0RmV0Y2hlcikKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmpl
Y3QtPnZtKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZVJl
Y29yZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9k
dWxlUmVjb3JkLmgJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTTW9kdWxlUmVjb3JkLmgJKHdvcmtpbmcgY29weSkKQEAgLTY2LDcgKzY2LDcgQEAg
cHJpdmF0ZToKIAogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxPYmplY3QqLCBWTSYp
OwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYp
OworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICB2b2lkIGluc3RhbnRpYXRlRGVj
bGFyYXRpb25zKEpTR2xvYmFsT2JqZWN0KiwgTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUqLCBKU1Zh
bHVlIHNjcmlwdEZldGNoZXIpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU05hdGl2ZVN0ZEZ1bmN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU05hdGl2ZVN0ZEZ1bmN0aW9uLmNwcAkocmV2aXNpb24gMjcxNDQzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNOYXRpdmVTdGRGdW5jdGlvbi5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQxLDEzICs0MSwxNiBAQCBKU05hdGl2ZVN0ZEZ1bmN0aW9uOjpK
U05hdGl2ZVN0ZEZ1bmN0aW9uCiB7CiB9CiAKLXZvaWQgSlNOYXRpdmVTdGRGdW5jdGlvbjo6dmlz
aXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8
dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNOYXRpdmVTdGRGdW5jdGlvbjo6dmlzaXRDaGlsZHJl
bkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTTmF0aXZlU3Rk
RnVuY3Rpb24qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNOYXRpdmVTdGRGdW5jdGlvbio+KGNlbGwp
OwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKICAg
ICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwogfQogCitERUZJTkVf
VklTSVRfQ0hJTERSRU4oSlNOYXRpdmVTdGRGdW5jdGlvbik7CisKIHZvaWQgSlNOYXRpdmVTdGRG
dW5jdGlvbjo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBOYXRpdmVFeGVjdXRhYmxlKiBleGVjdXRh
YmxlLCB1bnNpZ25lZCBsZW5ndGgsIGNvbnN0IFN0cmluZyYgbmFtZSkKIHsKICAgICBCYXNlOjpm
aW5pc2hDcmVhdGlvbih2bSwgZXhlY3V0YWJsZSwgbGVuZ3RoLCBuYW1lKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTmF0aXZlU3RkRnVuY3Rpb24uaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU05hdGl2ZVN0ZEZ1bmN0aW9uLmgJ
KHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTmF0
aXZlU3RkRnVuY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtNjUsNyArNjUsNyBAQCBwdWJsaWM6
CiBwcml2YXRlOgogICAgIEpTTmF0aXZlU3RkRnVuY3Rpb24oVk0mLCBOYXRpdmVFeGVjdXRhYmxl
KiwgSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqLCBOYXRpdmVTdGRGdW5jdGlvbiYmKTsKICAg
ICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgTmF0aXZlRXhlY3V0YWJsZSosIHVuc2lnbmVkIGxl
bmd0aCwgY29uc3QgU3RyaW5nJiBuYW1lKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVu
KEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAog
ICAgIE5hdGl2ZVN0ZEZ1bmN0aW9uIG1fZnVuY3Rpb247CiB9OwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC05MCw3ICs5MCw4IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKU09iamVjdDo6Z2V0Tm9uUmVpZmkK
ICAgICB9CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKU09iamVjdDo6bWFya0F1eGlsaWFyeUFu
ZFZpc2l0T3V0T2ZMaW5lUHJvcGVydGllcyhTbG90VmlzaXRvciYgdmlzaXRvciwgQnV0dGVyZmx5
KiBidXR0ZXJmbHksIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBtYXhPZmZz
ZXQpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgorQUxXQVlTX0lOTElORSB2b2lkIEpTT2Jq
ZWN0OjptYXJrQXV4aWxpYXJ5QW5kVmlzaXRPdXRPZkxpbmVQcm9wZXJ0aWVzKFZpc2l0b3ImIHZp
c2l0b3IsIEJ1dHRlcmZseSogYnV0dGVyZmx5LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUHJvcGVy
dHlPZmZzZXQgbWF4T2Zmc2V0KQogewogICAgIC8vIFdlIGNhbGwgdGhpcyB3aGVuIHdlIGZvdW5k
IGV2ZXJ5dGhpbmcgd2l0aG91dCByYWNlcy4KICAgICBBU1NFUlQoc3RydWN0dXJlKTsKQEAgLTEy
MSw3ICsxMjIsOCBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSlNPYmplY3Q6Om1hcmtBdXhpbGlhCiAg
ICAgdmlzaXRvci5hcHBlbmRWYWx1ZXNIaWRkZW4oYnV0dGVyZmx5LT5wcm9wZXJ0eVN0b3JhZ2Uo
KSAtIG91dE9mTGluZVNpemUsIG91dE9mTGluZVNpemUpOwogfQogCi1BTFdBWVNfSU5MSU5FIFN0
cnVjdHVyZSogSlNPYmplY3Q6OnZpc2l0QnV0dGVyZmx5KFNsb3RWaXNpdG9yJiB2aXNpdG9yKQor
dGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK0FMV0FZU19JTkxJTkUgU3RydWN0dXJlKiBKU09i
amVjdDo6dmlzaXRCdXR0ZXJmbHkoVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBzdGF0aWMgY29u
c3QgY2hhciogY29uc3QgcmFjZVJlYXNvbiA9ICJKU09iamVjdDo6dmlzaXRCdXR0ZXJmbHkiOwog
ICAgIFN0cnVjdHVyZSogcmVzdWx0ID0gdmlzaXRCdXR0ZXJmbHlJbXBsKHZpc2l0b3IpOwpAQCAt
MTMwLDcgKzEzMiw4IEBAIEFMV0FZU19JTkxJTkUgU3RydWN0dXJlKiBKU09iamVjdDo6dmlzaXQK
ICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1BTFdBWVNfSU5MSU5FIFN0cnVjdHVyZSogSlNPYmpl
Y3Q6OnZpc2l0QnV0dGVyZmx5SW1wbChTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5
cGVuYW1lIFZpc2l0b3I+CitBTFdBWVNfSU5MSU5FIFN0cnVjdHVyZSogSlNPYmplY3Q6OnZpc2l0
QnV0dGVyZmx5SW1wbChWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFZNJiB2bSA9IHZpc2l0b3Iu
dm0oKTsKICAgICAKQEAgLTQzMCwyNCArNDMzLDIwIEBAIHNpemVfdCBKU09iamVjdDo6ZXN0aW1h
dGVkU2l6ZShKU0NlbGwqIGMKICAgICByZXR1cm4gQmFzZTo6ZXN0aW1hdGVkU2l6ZShjZWxsLCB2
bSkgKyBidXR0ZXJmbHlPdXRPZkxpbmVTaXplOwogfQogCi12b2lkIEpTT2JqZWN0Ojp2aXNpdENo
aWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBl
bmFtZSBWaXNpdG9yPgordm9pZCBKU09iamVjdDo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBj
ZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTT2JqZWN0KiB0aGlzT2JqZWN0ID0ganND
YXN0PEpTT2JqZWN0Kj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlz
T2JqZWN0LCBpbmZvKCkpOwotI2lmIEFTU0VSVF9FTkFCTEVECi0gICAgYm9vbCB3YXNDaGVja2lu
Z0ZvckRlZmF1bHRNYXJrVmlvbGF0aW9uID0gdmlzaXRvci5tX2lzQ2hlY2tpbmdGb3JEZWZhdWx0
TWFya1Zpb2xhdGlvbjsKLSAgICB2aXNpdG9yLm1faXNDaGVja2luZ0ZvckRlZmF1bHRNYXJrVmlv
bGF0aW9uID0gZmFsc2U7Ci0jZW5kaWYKLSAgICAKKyAgICB0eXBlbmFtZSBWaXNpdG9yOjpEZWZh
dWx0TWFya2luZ1Zpb2xhdGlvbkFzc2VydGlvblNjb3BlIGFzc2VydGlvblNjb3BlKHZpc2l0b3Ip
OworCiAgICAgSlNDZWxsOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwotICAg
IAorCiAgICAgdGhpc09iamVjdC0+dmlzaXRCdXR0ZXJmbHkodmlzaXRvcik7Ci0gICAgCi0jaWYg
QVNTRVJUX0VOQUJMRUQKLSAgICB2aXNpdG9yLm1faXNDaGVja2luZ0ZvckRlZmF1bHRNYXJrVmlv
bGF0aW9uID0gd2FzQ2hlY2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlvbjsKLSNlbmRpZgogfQog
CitERUZJTkVfRVhQT1JUX1ZJU0lUX0NISUxEUkVOKEpTT2JqZWN0KTsKKwogdm9pZCBKU09iamVj
dDo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQogewog
ICAgIEpTT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTT2JqZWN0Kj4oY2VsbCk7CkBAIC00
ODYsMTQgKzQ4NSwxMiBAQCB2b2lkIEpTT2JqZWN0OjphbmFseXplSGVhcChKU0NlbGwqIGNlbGws
CiAgICAgfQogfQogCi12b2lkIEpTRmluYWxPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBj
ZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2
b2lkIEpTRmluYWxPYmplY3Q6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRv
ciYgdmlzaXRvcikKIHsKICAgICBKU0ZpbmFsT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpT
RmluYWxPYmplY3QqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNP
YmplY3QsIGluZm8oKSk7Ci0jaWYgQVNTRVJUX0VOQUJMRUQKLSAgICBib29sIHdhc0NoZWNraW5n
Rm9yRGVmYXVsdE1hcmtWaW9sYXRpb24gPSB2aXNpdG9yLm1faXNDaGVja2luZ0ZvckRlZmF1bHRN
YXJrVmlvbGF0aW9uOwotICAgIHZpc2l0b3IubV9pc0NoZWNraW5nRm9yRGVmYXVsdE1hcmtWaW9s
YXRpb24gPSBmYWxzZTsKLSNlbmRpZgorICAgIHR5cGVuYW1lIFZpc2l0b3I6OkRlZmF1bHRNYXJr
aW5nVmlvbGF0aW9uQXNzZXJ0aW9uU2NvcGUgYXNzZXJ0aW9uU2NvcGUodmlzaXRvcik7CiAgICAg
CiAgICAgSlNDZWxsOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwogICAgIApA
QCAtNTAxLDEyICs0OTgsMTAgQEAgdm9pZCBKU0ZpbmFsT2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpT
Q2VsbAogICAgICAgICBpZiAodW5zaWduZWQgc3RvcmFnZVNpemUgPSBzdHJ1Y3R1cmUtPmlubGlu
ZVNpemUoKSkKICAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kVmFsdWVzSGlkZGVuKHRoaXNPYmpl
Y3QtPmlubGluZVN0b3JhZ2UoKSwgc3RvcmFnZVNpemUpOwogICAgIH0KLSAgICAKLSNpZiBBU1NF
UlRfRU5BQkxFRAotICAgIHZpc2l0b3IubV9pc0NoZWNraW5nRm9yRGVmYXVsdE1hcmtWaW9sYXRp
b24gPSB3YXNDaGVja2luZ0ZvckRlZmF1bHRNYXJrVmlvbGF0aW9uOwotI2VuZGlmCiB9CiAKK0RF
RklORV9FWFBPUlRfVklTSVRfQ0hJTERSRU4oSlNGaW5hbE9iamVjdCk7CisKIFN0cmluZyBKU09i
amVjdDo6Y2xhc3NOYW1lKGNvbnN0IEpTT2JqZWN0KiBvYmplY3QsIFZNJiB2bSkKIHsKICAgICBj
b25zdCBDbGFzc0luZm8qIGluZm8gPSBvYmplY3QtPmNsYXNzSW5mbyh2bSk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJKHJldmlzaW9uIDI3MTQ0MykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJKHdvcmtpbmcgY29weSkK
QEAgLTEwOCw4ICsxMDgsOSBAQCBjbGFzcyBKU09iamVjdCA6IHB1YmxpYyBKU0NlbGwgewogcHVi
bGljOgogICAgIHVzaW5nIEJhc2UgPSBKU0NlbGw7CiAKKyAgICBERUNMQVJFX0VYUE9SVF9WSVNJ
VF9DSElMRFJFTjsKKwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBzaXplX3QgZXN0aW1h
dGVkU2l6ZShKU0NlbGwqLCBWTSYpOwotICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lk
IHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKICAgICBKU19FWFBPUlRfUFJJ
VkFURSBzdGF0aWMgdm9pZCBhbmFseXplSGVhcChKU0NlbGwqLCBIZWFwQW5hbHl6ZXImKTsKIAog
ICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBTdHJpbmcgY2xhc3NOYW1lKGNvbnN0IEpTT2Jq
ZWN0KiwgVk0mKTsKQEAgLTk4MCwxMSArOTgxLDExIEBAIHByb3RlY3RlZDoKICAgICBKU09iamVj
dChWTSYsIFN0cnVjdHVyZSosIEJ1dHRlcmZseSogPSBudWxscHRyKTsKICAgICAKICAgICAvLyBW
aXNpdHMgdGhlIGJ1dHRlcmZseSB1bmxlc3MgdGhlcmUgaXMgYSByYWNlLiBSZXR1cm5zIHRoZSBz
dHJ1Y3R1cmUgaWYgdGhlcmUgd2FzIG5vIHJhY2UuCi0gICAgU3RydWN0dXJlKiB2aXNpdEJ1dHRl
cmZseShTbG90VmlzaXRvciYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IFN0cnVj
dHVyZSogdmlzaXRCdXR0ZXJmbHkoVmlzaXRvciYpOwogICAgIAotICAgIFN0cnVjdHVyZSogdmlz
aXRCdXR0ZXJmbHlJbXBsKFNsb3RWaXNpdG9yJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlz
aXRvcj4gU3RydWN0dXJlKiB2aXNpdEJ1dHRlcmZseUltcGwoVmlzaXRvciYpOwogICAgIAotICAg
IHZvaWQgbWFya0F1eGlsaWFyeUFuZFZpc2l0T3V0T2ZMaW5lUHJvcGVydGllcyhTbG90VmlzaXRv
ciYsIEJ1dHRlcmZseSosIFN0cnVjdHVyZSosIFByb3BlcnR5T2Zmc2V0IG1heE9mZnNldCk7Cisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCBtYXJrQXV4aWxpYXJ5QW5kVmlzaXRP
dXRPZkxpbmVQcm9wZXJ0aWVzKFZpc2l0b3ImLCBCdXR0ZXJmbHkqLCBTdHJ1Y3R1cmUqLCBQcm9w
ZXJ0eU9mZnNldCBtYXhPZmZzZXQpOwogCiAgICAgLy8gQ2FsbCB0aGlzIGlmIHlvdSBrbm93IHRo
YXQgdGhlIG9iamVjdCBpcyBpbiBhIG1vZGUgd2hlcmUgaXQgaGFzIGFycmF5CiAgICAgLy8gc3Rv
cmFnZS4gVGhpcyB3aWxsIGFzc2VydCBvdGhlcndpc2UuCkBAIC0xMTcyLDggKzExNzMsNiBAQCBw
cm90ZWN0ZWQ6CiAgICAgfQogfTsKIAotY2xhc3MgSlNGaW5hbE9iamVjdDsKLQogLy8gSlNGaW5h
bE9iamVjdCBpcyBhIHR5cGUgb2YgSlNPYmplY3QgdGhhdCBjb250YWlucyBzdWZmaWNpZW50IGlu
dGVybmFsCiAvLyBzdG9yYWdlIHRvIGZ1bGx5IG1ha2UgdXNlIG9mIHRoZSBjb2xsZWN0b3IgY2Vs
bCBjb250YWluaW5nIGl0LgogY2xhc3MgSlNGaW5hbE9iamVjdCBmaW5hbCA6IHB1YmxpYyBKU09i
amVjdCB7CkBAIC0xMjEyLDE1ICsxMjExLDEzIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIFN0
cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgdHlwZUluZm8oKSwg
aW5mbygpLCBkZWZhdWx0SW5kZXhpbmdUeXBlLCBpbmxpbmVDYXBhY2l0eSk7CiAgICAgfQogCi0g
ICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBT
bG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfRVhQT1JUX1ZJU0lUX0NISUxEUkVOOwogCiAgICAg
REVDTEFSRV9FWFBPUlRfSU5GTzsKIAogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgTExJbnRP
ZmZzZXRzRXh0cmFjdG9yOwogCi0gICAgdm9pZCB2aXNpdENoaWxkcmVuQ29tbW9uKFNsb3RWaXNp
dG9yJik7Ci0KICAgICBleHBsaWNpdCBKU0ZpbmFsT2JqZWN0KFZNJiB2bSwgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUsIEJ1dHRlcmZseSogYnV0dGVyZmx5KQogICAgICAgICA6IEpTT2JqZWN0KHZtLCBz
dHJ1Y3R1cmUsIGJ1dHRlcmZseSkKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU1Byb21pc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTUHJvbWlzZS5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvbWlzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY3LDEz
ICs2NywxNiBAQCB2b2lkIEpTUHJvbWlzZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQogICAgICAg
ICBCYXNlOjppbnRlcm5hbEZpZWxkKGluZGV4KS5zZXQodm0sIHRoaXMsIHZhbHVlc1tpbmRleF0p
OwogfQogCi12b2lkIEpTUHJvbWlzZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNQcm9t
aXNlOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7
CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Byb21pc2UqPihjZWxsKTsKICAgICBB
U1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAgICAgQmFzZTo6
dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NI
SUxEUkVOKEpTUHJvbWlzZSk7CisKIGF1dG8gSlNQcm9taXNlOjpzdGF0dXMoVk0mKSBjb25zdCAt
PiBTdGF0dXMKIHsKICAgICBKU1ZhbHVlIHZhbHVlID0gaW50ZXJuYWxGaWVsZChGaWVsZDo6Rmxh
Z3MpLmdldCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9taXNl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9taXNl
LmgJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
UHJvbWlzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC05Myw3ICs5Myw3IEBAIHB1YmxpYzoKICAgICB9
OwogICAgIHN0YXRpYyBEZWZlcnJlZERhdGEgY3JlYXRlRGVmZXJyZWREYXRhKEpTR2xvYmFsT2Jq
ZWN0KiwgSlNQcm9taXNlQ29uc3RydWN0b3IqKTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hp
bGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVO
OwogCiBwcm90ZWN0ZWQ6CiAgICAgSlNQcm9taXNlKFZNJiwgU3RydWN0dXJlKik7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVydHlO
YW1lRW51bWVyYXRvci5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTUHJvcGVydHlOYW1lRW51bWVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTcwLDcgKzcwLDggQEAgdm9pZCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmZpbmlzaENy
ZQogICAgIH0KIH0KIAotdm9pZCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OnZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1l
IFZpc2l0b3I+Cit2b2lkIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6dmlzaXRDaGlsZHJlbklt
cGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTUHJvcGVydHlOYW1l
RW51bWVyYXRvciogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3Iq
PihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8o
KSk7CkBAIC04Nyw2ICs4OCw4IEBAIHZvaWQgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjp2aXNp
dENoaWwKICAgICB9CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU1Byb3BlcnR5TmFtZUVu
dW1lcmF0b3IpOworCiAvLyBGSVhNRTogQXNzZXJ0IHRoYXQgcHJvcGVydGllcyByZXR1cm5lZCBi
eSBnZXRPd25Qcm9wZXJ0eU5hbWVzKCkgYXJlIHJlcG9ydGVkIGVudW1lcmFibGUgYnkgZ2V0T3du
UHJvcGVydHlTbG90KCkuCiAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjE5OTI2CiB2b2lkIGdldEVudW1lcmFibGVQcm9wZXJ0eU5hbWVzKEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEpTT2JqZWN0KiBiYXNlLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVy
dHlOYW1lcywgdWludDMyX3QmIGluZGV4ZWRMZW5ndGgsIHVpbnQzMl90JiBzdHJ1Y3R1cmVQcm9w
ZXJ0eUNvdW50KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmgJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVydHlOYW1lRW51bWVyYXRvci5oCSh3
b3JraW5nIGNvcHkpCkBAIC04NCw3ICs4NCw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIE9C
SkVDVF9PRkZTRVRPRihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IsIG1fcHJvcGVydHlOYW1lcyk7
CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90Vmlz
aXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKIHByaXZhdGU6CiAgICAgZnJp
ZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTUHJveHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTUHJveHkuY3BwCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsNyAr
MzUsOCBAQCBTVEFUSUNfQVNTRVJUX0lTX1RSSVZJQUxMWV9ERVNUUlVDVElCTEUoCiAKIGNvbnN0
IENsYXNzSW5mbyBKU1Byb3h5OjpzX2luZm8gPSB7ICJKU1Byb3h5IiwgJkJhc2U6OnNfaW5mbywg
bnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1Byb3h5KSB9OwogCi12b2lk
IEpTUHJveHk6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRv
cikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTUHJveHk6OnZpc2l0Q2hpbGRy
ZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU1Byb3h5KiB0
aGlzT2JqZWN0ID0ganNDYXN0PEpTUHJveHkqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNU
X0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC00Myw2ICs0NCw4IEBAIHZvaWQgSlNQ
cm94eTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlz
T2JqZWN0LT5tX3RhcmdldCk7CiB9CiAKK0RFRklORV9FWFBPUlRfVklTSVRfQ0hJTERSRU4oSlNQ
cm94eSk7CisKIHZvaWQgSlNQcm94eTo6c2V0VGFyZ2V0KFZNJiB2bSwgSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCkKIHsKICAgICBtX3RhcmdldC5zZXQodm0sIHRoaXMsIGdsb2JhbE9iamVj
dCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3h5LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm94eS5oCShyZXZpc2lv
biAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3h5LmgJKHdv
cmtpbmcgY29weSkKQEAgLTg1LDcgKzg1LDcgQEAgcHJvdGVjdGVkOgogICAgICAgICBtX3Rhcmdl
dC5zZXQodm0sIHRoaXMsIHRhcmdldCk7CiAgICAgfQogCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUg
c3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERF
Q0xBUkVfRVhQT1JUX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3Rh
dGljIFN0cmluZyBjbGFzc05hbWUoY29uc3QgSlNPYmplY3QqLCBWTSYpOwogICAgIEpTX0VYUE9S
VF9QUklWQVRFIHN0YXRpYyBTdHJpbmcgdG9TdHJpbmdOYW1lKGNvbnN0IEpTT2JqZWN0KiwgSlNH
bG9iYWxPYmplY3QqKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2Nv
cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2Nv
cGUuY3BwCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU1Njb3BlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksNyArMzksOCBAQCBTVEFUSUNfQVNT
RVJUX0lTX1RSSVZJQUxMWV9ERVNUUlVDVElCTEUoCiAKIGNvbnN0IENsYXNzSW5mbyBKU1Njb3Bl
OjpzX2luZm8gPSB7ICJTY29wZSIsICZCYXNlOjpzX2luZm8sIG51bGxwdHIsIG51bGxwdHIsIENS
RUFURV9NRVRIT0RfVEFCTEUoSlNTY29wZSkgfTsKIAotdm9pZCBKU1Njb3BlOjp2aXNpdENoaWxk
cmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBWaXNpdG9yPgordm9pZCBKU1Njb3BlOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGws
IFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNTY29wZSogdGhpc09iamVjdCA9IGpzQ2FzdDxK
U1Njb3BlKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0
LCBpbmZvKCkpOwpAQCAtNDcsNiArNDgsOCBAQCB2b2lkIEpTU2NvcGU6OnZpc2l0Q2hpbGRyZW4o
SlNDZWxsKiBjZWxsCiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9uZXh0KTsKIH0K
IAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTU2NvcGUpOworCiAvLyBSZXR1cm5zIHRydWUgaWYg
d2UgZm91bmQgZW5vdWdoIGluZm9ybWF0aW9uIHRvIHRlcm1pbmF0ZSBvcHRpbWl6YXRpb24uCiBz
dGF0aWMgaW5saW5lIGJvb2wgYWJzdHJhY3RBY2Nlc3MoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgSlNTY29wZSogc2NvcGUsIGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBHZXRPclB1dCBn
ZXRPclB1dCwgc2l6ZV90IGRlcHRoLCBib29sJiBuZWVkc1ZhckluamVjdGlvbkNoZWNrcywgUmVz
b2x2ZU9wJiBvcCwgSW5pdGlhbGl6YXRpb25Nb2RlIGluaXRpYWxpemF0aW9uTW9kZSkKIHsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2NvcGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Njb3BlLmgJKHJldmlzaW9uIDI3MTQ0
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2NvcGUuaAkod29ya2luZyBj
b3B5KQpAQCAtNjQsNyArNjQsNyBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgdm9pZCBjb2xsZWN0
Q2xvc3VyZVZhcmlhYmxlc1VuZGVyVERaKEpTU2NvcGUqLCBURFpFbnZpcm9ubWVudCYgcmVzdWx0
LCBWYXJpYWJsZUVudmlyb25tZW50JiBwcml2YXRlTmFtZXMpOwogCi0gICAgc3RhdGljIHZvaWQg
dmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRf
Q0hJTERSRU47CiAKICAgICBib29sIGlzVmFyU2NvcGUoKTsKICAgICBib29sIGlzTGV4aWNhbFNj
b3BlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NlZ21lbnRlZFZh
cmlhYmxlT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTYyLDE5ICs2MiwyMiBAQCBTY29wZU9mZnNldCBKU1NlZ21l
bnRlZFZhcmlhYmxlT2JqZWN0OjphCiAgICAgcmV0dXJuIFNjb3BlT2Zmc2V0KG9sZFNpemUpOwog
fQogCi12b2lkIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiBjZWxsLCBTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNp
dG9yPgordm9pZCBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0Ojp2aXNpdENoaWxkcmVuSW1wbChK
U0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNTZWdtZW50ZWRWYXJpYWJs
ZU9iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0Kj4o
Y2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkp
OwotICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgc2xvdFZpc2l0b3IpOworICAg
IEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CiAgICAgCiAgICAgLy8g
RklYTUU6IFdlIGNvdWxkIGF2b2lkIGxvY2tpbmcgaGVyZSBpZiBTZWdtZW50ZWRWZWN0b3Igd2Fz
IGxvY2stZnJlZS4gSXQgY291bGQgYmUgbWFkZSBsb2NrLWZyZWUKICAgICAvLyByZWxhdGl2ZWx5
IGVhc2lseS4KICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKHRoaXNPYmplY3QtPmNlbGxMb2Nr
KCkpOwogICAgIGZvciAodW5zaWduZWQgaSA9IHRoaXNPYmplY3QtPm1fdmFyaWFibGVzLnNpemUo
KTsgaS0tOykKLSAgICAgICAgc2xvdFZpc2l0b3IuYXBwZW5kSGlkZGVuKHRoaXNPYmplY3QtPm1f
dmFyaWFibGVzW2ldKTsKKyAgICAgICAgdmlzaXRvci5hcHBlbmRIaWRkZW4odGhpc09iamVjdC0+
bV92YXJpYWJsZXNbaV0pOwogfQogCitERUZJTkVfRVhQT1JUX1ZJU0lUX0NISUxEUkVOKEpTU2Vn
bWVudGVkVmFyaWFibGVPYmplY3QpOworCiB2b2lkIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3Q6
OmFuYWx5emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFuYWx5emVyJiBhbmFseXplcikKIHsKICAg
ICBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTU2VnbWVu
dGVkVmFyaWFibGVPYmplY3QqPihjZWxsKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmgJKHJldmlz
aW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2VnbWVudGVk
VmFyaWFibGVPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtODYsNyArODYsNyBAQCBwdWJsaWM6
CiAgICAgLy8gdGhlIGluZGV4IG9mIHRoZSBmaXJzdCBvbmUgYWRkZWQuCiAgICAgSlNfRVhQT1JU
X1BSSVZBVEUgU2NvcGVPZmZzZXQgYWRkVmFyaWFibGVzKHVuc2lnbmVkIG51bWJlck9mVmFyaWFi
bGVzVG9BZGQsIEpTVmFsdWUpOwogICAgIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2
b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX0VY
UE9SVF9WSVNJVF9DSElMRFJFTjsKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBh
bmFseXplSGVhcChKU0NlbGwqLCBIZWFwQW5hbHl6ZXImKTsKICAgICAKIHByb3RlY3RlZDoKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2V0SXRlcmF0b3IuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2V0SXRlcmF0b3IuY3Bw
CShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Nl
dEl0ZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTcsMTMgKzU3LDE2IEBAIHZvaWQgSlNT
ZXRJdGVyYXRvcjo6ZmluaXNoQ3JlYXRpb24oVk0mIHYKICAgICAgICAgQmFzZTo6aW50ZXJuYWxG
aWVsZChpbmRleCkuc2V0KHZtLCB0aGlzLCB2YWx1ZXNbaW5kZXhdKTsKIH0KIAotdm9pZCBKU1Nl
dEl0ZXJhdG9yOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0
b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1NldEl0ZXJhdG9yOjp2aXNp
dENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0
byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1NldEl0ZXJhdG9yKj4oY2VsbCk7CiAgICAgQVNTRVJU
X0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwogICAgIEJhc2U6OnZpc2l0
Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJF
TihKU1NldEl0ZXJhdG9yKTsKKwogSlNWYWx1ZSBKU1NldEl0ZXJhdG9yOjpjcmVhdGVQYWlyKEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUga2V5LCBKU1ZhbHVlIHZhbHVlKQog
ewogICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3M7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU1NldEl0ZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNTZXRJdGVyYXRvci5oCShyZXZpc2lvbiAyNzE0NDMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NldEl0ZXJhdG9yLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEzMCw3ICsxMzAsNyBAQCBwcml2YXRlOgogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZv
aWQgZmluaXNoQ3JlYXRpb24oVk0mLCBKU1NldCosIEl0ZXJhdGlvbktpbmQpOwogICAgIHZvaWQg
ZmluaXNoQ3JlYXRpb24oVk0mKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBKU1ZhbHVlIGNyZWF0
ZVBhaXIoSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlLCBKU1ZhbHVlKTsKLSAgICBzdGF0aWMgdm9p
ZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJ
VF9DSElMRFJFTjsKIH07CiBTVEFUSUNfQVNTRVJUX0lTX1RSSVZJQUxMWV9ERVNUUlVDVElCTEUo
SlNTZXRJdGVyYXRvcik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
U291cmNlQ29kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNTb3VyY2VDb2RlLmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNTb3VyY2VDb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiAr
MjYsOCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkpTU291cmNlQ29kZS5oIgog
CisjaW5jbHVkZSAiSlNDZWxsSW5saW5lcy5oIiAvLyBtbGFtIFRFU1QKKwogbmFtZXNwYWNlIEpT
QyB7CiAKIGNvbnN0IENsYXNzSW5mbyBKU1NvdXJjZUNvZGU6OnNfaW5mbyA9IHsgIkpTU291cmNl
Q29kZSIsIG51bGxwdHIsIG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNT
b3VyY2VDb2RlKSB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJp
bmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3Ry
aW5nLmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNTdHJpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDUsNyArMTA1LDggQEAgc2l6ZV90
IEpTU3RyaW5nOjplc3RpbWF0ZWRTaXplKEpTQ2VsbCogYwogICAgIHJldHVybiBCYXNlOjplc3Rp
bWF0ZWRTaXplKGNlbGwsIHZtKSArIGJpdHdpc2VfY2FzdDxTdHJpbmdJbXBsKj4ocG9pbnRlcikt
PmNvc3REdXJpbmdHQygpOwogfQogCi12b2lkIEpTU3RyaW5nOjp2aXNpdENoaWxkcmVuKEpTQ2Vs
bCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
Pgordm9pZCBKU1N0cmluZzo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9y
JiB2aXNpdG9yKQogewogICAgIEpTU3RyaW5nKiB0aGlzT2JqZWN0ID0gYXNTdHJpbmcoY2VsbCk7
CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAt
MTQzLDYgKzE0NCw4IEBAIHZvaWQgSlNTdHJpbmc6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWwK
ICAgICAgICAgdmlzaXRvci5yZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQoaW1wbC0+Y29zdER1cmlu
Z0dDKCkpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNTdHJpbmcpOworCiBzdGF0aWMg
Y29uc3RleHByIHVuc2lnbmVkIG1heExlbmd0aEZvck9uU3RhY2tSZXNvbHZlID0gMjA0ODsKIAog
dm9pZCBKU1JvcGVTdHJpbmc6OnJlc29sdmVSb3BlSW50ZXJuYWw4KExDaGFyKiBidWZmZXIpIGNv
bnN0CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmgJKHJldmlz
aW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTIxNyw3ICsyMTcsNyBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMg
dm9pZCBkdW1wVG9TdHJlYW0oY29uc3QgSlNDZWxsKiwgUHJpbnRTdHJlYW0mKTsKICAgICBzdGF0
aWMgc2l6ZV90IGVzdGltYXRlZFNpemUoSlNDZWxsKiwgVk0mKTsKLSAgICBzdGF0aWMgdm9pZCB2
aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9D
SElMRFJFTjsKIAogICAgIEFMV0FZU19JTkxJTkUgYm9vbCBpc1JvcGUoKSBjb25zdAogICAgIHsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nSXRlcmF0b3IuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nSXRl
cmF0b3IuY3BwCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1N0cmluZ0l0ZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTEsMTEgKzUxLDE0
IEBAIEpTU3RyaW5nSXRlcmF0b3IqIEpTU3RyaW5nSXRlcmF0b3I6OmNsb24KICAgICByZXR1cm4g
Y2xvbmU7CiB9CiAKLXZvaWQgSlNTdHJpbmdJdGVyYXRvcjo6dmlzaXRDaGlsZHJlbihKU0NlbGwq
IGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4K
K3ZvaWQgSlNTdHJpbmdJdGVyYXRvcjo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBW
aXNpdG9yJiB2aXNpdG9yKQogewogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNTdHJp
bmdJdGVyYXRvcio+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09i
amVjdCwgaW5mbygpKTsKICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0
b3IpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNTdHJpbmdJdGVyYXRvcik7CisKIH0g
Ly8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNT
dHJpbmdJdGVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTU3RyaW5nSXRlcmF0b3IuaAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmdJdGVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC03
OSw3ICs3OSw3IEBAIHB1YmxpYzoKICAgICBKU1ZhbHVlIGluZGV4KCkgY29uc3QgeyByZXR1cm4g
aW50ZXJuYWxGaWVsZChGaWVsZDo6SW5kZXgpLmdldCgpOyB9CiAgICAgSlNTdHJpbmdJdGVyYXRv
ciogY2xvbmUoSlNHbG9iYWxPYmplY3QqKTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwog
CiBwcml2YXRlOgogICAgIEpTU3RyaW5nSXRlcmF0b3IoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3ltYm9sVGFibGVP
YmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
U3ltYm9sVGFibGVPYmplY3QuY3BwCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzYsNyArMzYsOCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogY29uc3QgQ2xhc3NJbmZvIEpTU3lt
Ym9sVGFibGVPYmplY3Q6OnNfaW5mbyA9IHsgIlN5bWJvbFRhYmxlT2JqZWN0IiwgJkJhc2U6OnNf
aW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1N5bWJvbFRhYmxl
T2JqZWN0KSB9OwogCi12b2lkIEpTU3ltYm9sVGFibGVPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlND
ZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0
b3I+Cit2b2lkIEpTU3ltYm9sVGFibGVPYmplY3Q6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCog
Y2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU1N5bWJvbFRhYmxlT2JqZWN0KiB0aGlz
T2JqZWN0ID0ganNDYXN0PEpTU3ltYm9sVGFibGVPYmplY3QqPihjZWxsKTsKICAgICBBU1NFUlRf
R0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC00NCw2ICs0NSw4IEBA
IHZvaWQgSlNTeW1ib2xUYWJsZU9iamVjdDo6dmlzaXRDaGlsZHJlbigKICAgICB2aXNpdG9yLmFw
cGVuZCh0aGlzT2JqZWN0LT5tX3N5bWJvbFRhYmxlKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxE
UkVOKEpTU3ltYm9sVGFibGVPYmplY3QpOworCiBib29sIEpTU3ltYm9sVGFibGVPYmplY3Q6OmRl
bGV0ZVByb3BlcnR5KEpTQ2VsbCogY2VsbCwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
UHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgRGVsZXRlUHJvcGVydHlTbG90JiBzbG90KQogewog
ICAgIEpTU3ltYm9sVGFibGVPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNTeW1ib2xUYWJs
ZU9iamVjdCo+KGNlbGwpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNT
eW1ib2xUYWJsZU9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuaAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVjdC5oCSh3b3JraW5nIGNv
cHkpCkBAIC03MCw3ICs3MCw3IEBAIHByb3RlY3RlZDoKICAgICAgICAgbV9zeW1ib2xUYWJsZS5z
ZXQodm0sIHRoaXMsIHN5bWJvbFRhYmxlKTsKICAgICB9CiAgICAgCi0gICAgc3RhdGljIHZvaWQg
dmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRf
Q0hJTERSRU47CiAgICAgCiBwcml2YXRlOgogICAgIFdyaXRlQmFycmllcjxTeW1ib2xUYWJsZT4g
bV9zeW1ib2xUYWJsZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTV2Vh
a09iamVjdFJlZi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNXZWFrT2JqZWN0UmVmLmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNXZWFrT2JqZWN0UmVmLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzksNyArMzksOCBAQCB2b2lkIEpTV2Vha09iamVjdFJlZjo6ZmluaXNoQ3JlYXRpb24oVk0mCiAg
ICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwogfQogCi12b2lkIEpTV2Vha09iamVjdFJlZjo6
dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxh
dGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNXZWFrT2JqZWN0UmVmOjp2aXNpdENoaWxkcmVu
SW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0byogdGhpc09i
amVjdCA9IGpzQ2FzdDxKU1dlYWtPYmplY3RSZWYqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JK
RUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC01MSw2ICs1Miw4IEBAIHZvaWQg
SlNXZWFrT2JqZWN0UmVmOjp2aXNpdENoaWxkcmVuKEpTQ2UKICAgICB9CiB9CiAKK0RFRklORV9W
SVNJVF9DSElMRFJFTihKU1dlYWtPYmplY3RSZWYpOworCiB2b2lkIEpTV2Vha09iamVjdFJlZjo6
ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoVk0mIHZtKQogewogICAgIGlmIChtX3ZhbHVlICYmICF2
bS5oZWFwLmlzTWFya2VkKG1fdmFsdWUuZ2V0KCkpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNXZWFrT2JqZWN0UmVmLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNXZWFrT2JqZWN0UmVmLmgJKHJldmlzaW9uIDI3MTQ0MykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTV2Vha09iamVjdFJlZi5oCSh3b3JraW5n
IGNvcHkpCkBAIC02NSw3ICs2NSw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICB2b2lkIGZpbmFs
aXplVW5jb25kaXRpb25hbGx5KFZNJik7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihK
U0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKIHBy
aXZhdGU6CiAgICAgSlNXZWFrT2JqZWN0UmVmKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUp
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1dpdGhTY29wZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNXaXRoU2NvcGUuY3Bw
CShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1dp
dGhTY29wZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDcgKzQxLDggQEAgSlNXaXRoU2NvcGUq
IEpTV2l0aFNjb3BlOjpjcmVhdGUoCiAgICAgcmV0dXJuIHdpdGhTY29wZTsKIH0KIAotdm9pZCBK
U1dpdGhTY29wZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNp
dG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNXaXRoU2NvcGU6OnZpc2l0
Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU1dp
dGhTY29wZSogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1dpdGhTY29wZSo+KGNlbGwpOwogICAgIEFT
U0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTQ5LDYgKzUw
LDggQEAgdm9pZCBKU1dpdGhTY29wZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIAogICAgIHZpc2l0
b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fb2JqZWN0KTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxE
UkVOKEpTV2l0aFNjb3BlKTsKKwogU3RydWN0dXJlKiBKU1dpdGhTY29wZTo6Y3JlYXRlU3RydWN0
dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90bykK
IHsKICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG8s
IFR5cGVJbmZvKFdpdGhTY29wZVR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTV2l0aFNjb3BlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNXaXRoU2NvcGUuaAkocmV2aXNpb24g
MjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNXaXRoU2NvcGUuaAko
d29ya2luZyBjb3B5KQpAQCAtNDMsNyArNDMsNyBAQCBwdWJsaWM6CiAKICAgICBKU09iamVjdCog
b2JqZWN0KCkgeyByZXR1cm4gbV9vYmplY3QuZ2V0KCk7IH0KIAotICAgIHN0YXRpYyB2b2lkIHZp
c2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NI
SUxEUkVOOwogCiAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiwgSlNH
bG9iYWxPYmplY3QqLCBKU1ZhbHVlIHByb3RvKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNXcmFwcGVyT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU1dyYXBwZXJPYmplY3QuY3BwCShyZXZpc2lvbiAyNzE0NDMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1dyYXBwZXJPYmplY3QuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yOSwxMSArMjksMTQgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIFNUQVRJ
Q19BU1NFUlRfSVNfVFJJVklBTExZX0RFU1RSVUNUSUJMRShKU1dyYXBwZXJPYmplY3QpOwogCi12
b2lkIEpTV3JhcHBlck9iamVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNp
dG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNXcmFwcGVy
T2JqZWN0Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3Ip
CiB7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1dyYXBwZXJPYmplY3QqPihjZWxs
KTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAg
ICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKIH0KIAorREVGSU5F
X0VYUE9SVF9WSVNJVF9DSElMRFJFTihKU1dyYXBwZXJPYmplY3QpOworCiB9IC8vIG5hbWVzcGFj
ZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTV3JhcHBlck9iamVj
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTV3JhcHBl
ck9iamVjdC5oCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1dyYXBwZXJPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtNjQsNyArNjQsNyBAQCBw
dWJsaWM6CiBwcm90ZWN0ZWQ6CiAgICAgZXhwbGljaXQgSlNXcmFwcGVyT2JqZWN0KFZNJiwgU3Ry
dWN0dXJlKik7CiAKLSAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCB2aXNpdENoaWxk
cmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9FWFBPUlRfVklTSVRfQ0hJ
TERSRU47CiB9OwogCiBpbmxpbmUgSlNXcmFwcGVyT2JqZWN0OjpKU1dyYXBwZXJPYmplY3QoVk0m
IHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0xhenlDbGFzc1N0cnVjdHVyZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvTGF6eUNsYXNzU3RydWN0dXJlLmNwcAkocmV2aXNpb24gMjcxNDQz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTGF6eUNsYXNzU3RydWN0dXJlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNzIsMTIgKzcyLDE2IEBAIHZvaWQgTGF6eUNsYXNzU3RydWN0
dXJlOjpJbml0aWFsaXplcjo6c2UKICAgICBjbGFzc1N0cnVjdHVyZS5tX2NvbnN0cnVjdG9yLnNl
dCh2bSwgZ2xvYmFsLCBjb25zdHJ1Y3Rvcik7CiB9CiAKLXZvaWQgTGF6eUNsYXNzU3RydWN0dXJl
Ojp2aXNpdChTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+
Cit2b2lkIExhenlDbGFzc1N0cnVjdHVyZTo6dmlzaXQoVmlzaXRvciYgdmlzaXRvcikKIHsKICAg
ICBtX3N0cnVjdHVyZS52aXNpdCh2aXNpdG9yKTsKICAgICB2aXNpdG9yLmFwcGVuZChtX2NvbnN0
cnVjdG9yKTsKIH0KIAordGVtcGxhdGUgdm9pZCBMYXp5Q2xhc3NTdHJ1Y3R1cmU6OnZpc2l0KEFi
c3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgTGF6eUNsYXNzU3RydWN0dXJlOjp2
aXNpdChTbG90VmlzaXRvciYpOworCiB2b2lkIExhenlDbGFzc1N0cnVjdHVyZTo6ZHVtcChQcmlu
dFN0cmVhbSYgb3V0KSBjb25zdAogewogICAgIG91dC5wcmludCgiPHN0cnVjdHVyZSA9ICIsIG1f
c3RydWN0dXJlLCAiLCBjb25zdHJ1Y3RvciA9ICIsIFJhd1BvaW50ZXIobV9jb25zdHJ1Y3Rvci5n
ZXQoKSksICI+Iik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9MYXp5Q2xh
c3NTdHJ1Y3R1cmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9MYXp5Q2xhc3NTdHJ1Y3R1cmUuaAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvTGF6eUNsYXNzU3RydWN0dXJlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTExNyw3ICsxMTcsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX2NvbnN0cnVjdG9yLmdl
dCgpOwogICAgIH0KICAgICAKLSAgICB2b2lkIHZpc2l0KFNsb3RWaXNpdG9yJik7CisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCB2aXNpdChWaXNpdG9yJik7CiAgICAgCiAgICAg
dm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0xhenlQcm9wZXJ0eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0xhenlQcm9wZXJ0eS5oCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9MYXp5UHJvcGVydHkuaAkod29ya2luZyBjb3B5KQpA
QCAtMTAzLDcgKzEwMyw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldE1heUJlTnVsbChWTSYsIGNv
bnN0IE93bmVyVHlwZSogb3duZXIsIEVsZW1lbnRUeXBlKik7CiAgICAgdm9pZCBzZXQoVk0mLCBj
b25zdCBPd25lclR5cGUqIG93bmVyLCBFbGVtZW50VHlwZSopOwogICAgIAotICAgIHZvaWQgdmlz
aXQoU2xvdFZpc2l0b3ImKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIHZp
c2l0KFZpc2l0b3ImKTsKICAgICAKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsK
ICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0xhenlQcm9wZXJ0eUlu
bGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9MYXp5
UHJvcGVydHlJbmxpbmVzLmgJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0xhenlQcm9wZXJ0eUlubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNjYs
NyArNjYsOCBAQCB2b2lkIExhenlQcm9wZXJ0eTxPd25lclR5cGUsIEVsZW1lbnRUeXBlCiB9CiAK
IHRlbXBsYXRlPHR5cGVuYW1lIE93bmVyVHlwZSwgdHlwZW5hbWUgRWxlbWVudFR5cGU+Ci12b2lk
IExhenlQcm9wZXJ0eTxPd25lclR5cGUsIEVsZW1lbnRUeXBlPjo6dmlzaXQoU2xvdFZpc2l0b3Im
IHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBMYXp5UHJvcGVydHk8
T3duZXJUeXBlLCBFbGVtZW50VHlwZT46OnZpc2l0KFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAg
aWYgKG1fcG9pbnRlciAmJiAhKG1fcG9pbnRlciAmIGxhenlUYWcpKQogICAgICAgICB2aXNpdG9y
LmFwcGVuZFVuYmFycmllcmVkKGJpdHdpc2VfY2FzdDxFbGVtZW50VHlwZSo+KG1fcG9pbnRlcikp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTW9kdWxlUHJvZ3JhbUV4ZWN1
dGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01v
ZHVsZVByb2dyYW1FeGVjdXRhYmxlLmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC03OSw3ICs3OSw4IEBAIGF1dG8gTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGU6OmVu
c3VyZVRlbXAKICAgICByZXR1cm4gZW5zdXJlVGVtcGxhdGVPYmplY3RNYXBJbXBsKG1fdGVtcGxh
dGVPYmplY3RNYXApOwogfQogCi12b2lkIE1vZHVsZVByb2dyYW1FeGVjdXRhYmxlOjp2aXNpdENo
aWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBl
bmFtZSBWaXNpdG9yPgordm9pZCBNb2R1bGVQcm9ncmFtRXhlY3V0YWJsZTo6dmlzaXRDaGlsZHJl
bkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIE1vZHVsZVByb2dy
YW1FeGVjdXRhYmxlKiB0aGlzT2JqZWN0ID0ganNDYXN0PE1vZHVsZVByb2dyYW1FeGVjdXRhYmxl
Kj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZv
KCkpOwpAQCAtOTQsNCArOTUsNiBAQCB2b2lkIE1vZHVsZVByb2dyYW1FeGVjdXRhYmxlOjp2aXNp
dENoaWxkCiAgICAgfQogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oTW9kdWxlUHJvZ3JhbUV4
ZWN1dGFibGUpOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL01vZHVsZVByb2dyYW1FeGVjdXRhYmxlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUuaAkocmV2
aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTW9kdWxlUHJv
Z3JhbUV4ZWN1dGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtNzcsNyArNzcsNyBAQCBwcml2YXRl
OgogCiAgICAgTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUoSlNHbG9iYWxPYmplY3QqLCBjb25zdCBT
b3VyY2VDb2RlJik7CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNs
b3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIFdyaXRlQmFy
cmllcjxVbmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2s+IG1fdW5saW5rZWRNb2R1bGVQcm9n
cmFtQ29kZUJsb2NrOwogICAgIFdyaXRlQmFycmllcjxTeW1ib2xUYWJsZT4gbV9tb2R1bGVFbnZp
cm9ubWVudFN5bWJvbFRhYmxlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
UHJvZ3JhbUV4ZWN1dGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1Byb2dyYW1FeGVjdXRhYmxlLmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvZ3JhbUV4ZWN1dGFibGUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yMDgsNyArMjA4LDggQEAgYXV0byBQcm9ncmFtRXhlY3V0YWJsZTo6ZW5zdXJl
VGVtcGxhdGVPYgogICAgIHJldHVybiBlbnN1cmVUZW1wbGF0ZU9iamVjdE1hcEltcGwobV90ZW1w
bGF0ZU9iamVjdE1hcCk7CiB9CiAKLXZvaWQgUHJvZ3JhbUV4ZWN1dGFibGU6OnZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1l
IFZpc2l0b3I+Cit2b2lkIFByb2dyYW1FeGVjdXRhYmxlOjp2aXNpdENoaWxkcmVuSW1wbChKU0Nl
bGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgUHJvZ3JhbUV4ZWN1dGFibGUqIHRo
aXNPYmplY3QgPSBqc0Nhc3Q8UHJvZ3JhbUV4ZWN1dGFibGUqPihjZWxsKTsKICAgICBBU1NFUlRf
R0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC0yMjIsNCArMjIzLDYg
QEAgdm9pZCBQcm9ncmFtRXhlY3V0YWJsZTo6dmlzaXRDaGlsZHJlbihKUwogICAgIH0KIH0KIAor
REVGSU5FX1ZJU0lUX0NISUxEUkVOKFByb2dyYW1FeGVjdXRhYmxlKTsKKwogfSAvLyBuYW1lc3Bh
Y2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9ncmFtRXhlY3V0
YWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb2dy
YW1FeGVjdXRhYmxlLmgJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1Byb2dyYW1FeGVjdXRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTgxLDcgKzgx
LDcgQEAgcHJpdmF0ZToKIAogICAgIFByb2dyYW1FeGVjdXRhYmxlKEpTR2xvYmFsT2JqZWN0Kiwg
Y29uc3QgU291cmNlQ29kZSYpOwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0Nl
bGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBX
cml0ZUJhcnJpZXI8VW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrPiBtX3VubGlua2VkUHJvZ3JhbUNv
ZGVCbG9jazsKICAgICBXcml0ZUJhcnJpZXI8RXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZT4gbV9w
cm9ncmFtQ29kZUJsb2NrOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJv
cGVydHlNYXBIYXNoVGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9Qcm9wZXJ0eU1hcEhhc2hUYWJsZS5oCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eU1hcEhhc2hUYWJsZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xMzMsNyArMTMzLDcgQEAgcHVibGljOgogCiAgICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOwogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3ko
SlNDZWxsKik7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90Vmlz
aXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBERUNMQVJFX0VYUE9S
VF9JTkZPOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eVRh
YmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9w
ZXJ0eVRhYmxlLmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvUHJvcGVydHlUYWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExOCw3ICsxMTgs
OCBAQCB2b2lkIFByb3BlcnR5VGFibGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2CiAgICAgdm0uaGVh
cC5yZXBvcnRFeHRyYU1lbW9yeUFsbG9jYXRlZChkYXRhU2l6ZSgpKTsKIH0KIAotdm9pZCBQcm9w
ZXJ0eVRhYmxlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0
b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBQcm9wZXJ0eVRhYmxlOjp2aXNp
dENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0
byogdGhpc09iamVjdCA9IGpzQ2FzdDxQcm9wZXJ0eVRhYmxlKj4oY2VsbCk7CiAgICAgQVNTRVJU
X0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtMTI2LDYgKzEyNyw4
IEBAIHZvaWQgUHJvcGVydHlUYWJsZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwKICAgICB2aXNpdG9y
LnJlcG9ydEV4dHJhTWVtb3J5VmlzaXRlZCh0aGlzT2JqZWN0LT5kYXRhU2l6ZSgpKTsKIH0KIAor
REVGSU5FX1ZJU0lUX0NISUxEUkVOKFByb3BlcnR5VGFibGUpOworCiB2b2lkIFByb3BlcnR5VGFi
bGU6OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQogewogICAgIHN0YXRpY19jYXN0PFByb3BlcnR5VGFi
bGUqPihjZWxsKS0+UHJvcGVydHlUYWJsZTo6flByb3BlcnR5VGFibGUoKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3h5T2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm94eU9iamVjdC5jcHAJKHJldmlzaW9uIDI3
MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3h5T2JqZWN0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTE1OCw3ICsxMTU4LDggQEAgYm9vbCBQcm94eU9iamVjdDo6aXNS
ZXZva2VkKCkgY29uc3QKICAgICByZXR1cm4gaGFuZGxlcigpLmlzTnVsbCgpOwogfQogCi12b2lk
IFByb3h5T2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZp
c2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBQcm94eU9iamVjdDo6dmlz
aXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFBy
b3h5T2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PFByb3h5T2JqZWN0Kj4oY2VsbCk7CiAgICAg
QVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtMTE2OCw0
ICsxMTY5LDYgQEAgdm9pZCBQcm94eU9iamVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIAogICAg
IHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1faGFuZGxlcik7CiB9CiAKK0RFRklORV9WSVNJ
VF9DSElMRFJFTihQcm94eU9iamVjdCk7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJveHlPYmplY3QuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm94eU9iamVjdC5oCShyZXZpc2lvbiAyNzE0
NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm94eU9iamVjdC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC05MSw3ICs5MSw3IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIHZvaWQgZ2V0
T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1l
QXJyYXkmLCBEb250RW51bVByb3BlcnRpZXNNb2RlKTsKICAgICBzdGF0aWMgYm9vbCBzZXRQcm90
b3R5cGUoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUgcHJvdG90eXBlLCBib29s
IHNob3VsZFRocm93SWZDYW50U2V0KTsKICAgICBzdGF0aWMgSlNWYWx1ZSBnZXRQcm90b3R5cGUo
SlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCopOwotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwog
CiAgICAgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3RDb21tb24oSlNHbG9iYWxPYmplY3QqLCBQcm9w
ZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwogICAgIGJvb2wgcGVyZm9ybUludGVybmFsTWV0aG9k
R2V0T3duUHJvcGVydHkoSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xv
dCYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJveHlSZXZva2UuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3h5UmV2b2tl
LmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
UHJveHlSZXZva2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OSw3ICs2OSw4IEBAIEpTQ19ERUZJ
TkVfSE9TVF9GVU5DVElPTihwZXJmb3JtUHJveHlSZXYKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCi12b2lkIFByb3h5UmV2b2tlOjp2aXNpdENoaWxkcmVu
KEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPgordm9pZCBQcm94eVJldm9rZTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxs
LCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFByb3h5UmV2b2tlKiB0aGlzT2JqZWN0ID0ganND
YXN0PFByb3h5UmV2b2tlKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0
aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNzgsNCArNzksNiBAQCB2b2lkIFByb3h5UmV2b2tlOjp2
aXNpdENoaWxkcmVuKEpTQ2VsbCogCiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9w
cm94eSk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihQcm94eVJldm9rZSk7CisKIH0gLy8g
bmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJveHlS
ZXZva2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm94
eVJldm9rZS5oCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9Qcm94eVJldm9rZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01Miw3ICs1Miw3IEBAIHB1Ymxp
YzoKICAgICB9CiAKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgUHJveHlPYmplY3QqKTsK
LSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7Cisg
ICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKICAgICBKU1ZhbHVlIHByb3h5KCkgeyByZXR1cm4g
bV9wcm94eS5nZXQoKTsgfQogICAgIHZvaWQgc2V0UHJveHlUb051bGwoVk0mIHZtKSB7IHJldHVy
biBtX3Byb3h5LnNldCh2bSwgdGhpcywganNOdWxsKCkpOyB9CiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENhY2hlZFJlc3VsdC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwQ2FjaGVkUmVzdWx0LmNwcAkocmV2
aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwQ2Fj
aGVkUmVzdWx0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsOCBAQAogCiBuYW1lc3Bh
Y2UgSlNDIHsKIAotdm9pZCBSZWdFeHBDYWNoZWRSZXN1bHQ6OnZpc2l0QWdncmVnYXRlKFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgUmVnRXhw
Q2FjaGVkUmVzdWx0Ojp2aXNpdEFnZ3JlZ2F0ZShWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHZp
c2l0b3IuYXBwZW5kKG1fbGFzdElucHV0KTsKICAgICB2aXNpdG9yLmFwcGVuZChtX2xhc3RSZWdF
eHApOwpAQCAtNDMsNiArNDQsOSBAQCB2b2lkIFJlZ0V4cENhY2hlZFJlc3VsdDo6dmlzaXRBZ2dy
ZWdhdGUoCiAgICAgfQogfQogCit0ZW1wbGF0ZSB2b2lkIFJlZ0V4cENhY2hlZFJlc3VsdDo6dmlz
aXRBZ2dyZWdhdGUoQWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBSZWdFeHBD
YWNoZWRSZXN1bHQ6OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJik7CisKIEpTQXJyYXkqIFJl
Z0V4cENhY2hlZFJlc3VsdDo6bGFzdFJlc3VsdChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBKU09iamVjdCogb3duZXIpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwQ2FjaGVkUmVzdWx0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwQ2FjaGVk
UmVzdWx0LmgJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1JlZ0V4cENhY2hlZFJlc3VsdC5oCSh3b3JraW5nIGNvcHkpCkBAIC02NSw3ICs2NSw3IEBA
IHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fcmVpZmllZCA/IG1fcmVpZmllZElucHV0LmdldCgp
IDogbV9sYXN0SW5wdXQuZ2V0KCk7CiAgICAgfQogCi0gICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShT
bG90VmlzaXRvciYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgdmlzaXRB
Z2dyZWdhdGUoVmlzaXRvciYpOwogCiAgICAgLy8gbV9sYXN0UmVnRXhwIHdvdWxkIGJlIG51bGxw
dHIgd2hlbiBSZWdFeHBDYWNoZWRSZXN1bHQgaXMgbm90IHJlaWZpZWQuCiAgICAgLy8gSWYgd2Ug
ZmluZCBtX2xhc3RSZWdFeHAgaXMgbnVsbHB0ciwgaXQgbWVhbnMgdGhpcyBzaG91bGQgaG9sZCB0
aGUgZW1wdHkgUmVnRXhwLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVn
RXhwR2xvYmFsRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvUmVnRXhwR2xvYmFsRGF0YS5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cEdsb2JhbERhdGEuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zMCwxMSArMzAsMTUgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLXZvaWQgUmVnRXhwR2xv
YmFsRGF0YTo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0
eXBlbmFtZSBWaXNpdG9yPgordm9pZCBSZWdFeHBHbG9iYWxEYXRhOjp2aXNpdEFnZ3JlZ2F0ZShW
aXNpdG9yJiB2aXNpdG9yKQogewogICAgIG1fY2FjaGVkUmVzdWx0LnZpc2l0QWdncmVnYXRlKHZp
c2l0b3IpOwogfQogCit0ZW1wbGF0ZSB2b2lkIFJlZ0V4cEdsb2JhbERhdGE6OnZpc2l0QWdncmVn
YXRlKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgUmVnRXhwR2xvYmFsRGF0
YTo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImKTsKKwogSlNWYWx1ZSBSZWdFeHBHbG9iYWxE
YXRhOjpnZXRCYWNrcmVmKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIHVuc2lnbmVkIGkp
CiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwR2xvYmFsRGF0YS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cEdsb2JhbERhdGEuaAkocmV2aXNpb24gMjcx
NDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwR2xvYmFsRGF0YS5o
CSh3b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0MSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldElu
cHV0KEpTR2xvYmFsT2JqZWN0KiwgSlNTdHJpbmcqKTsKICAgICBKU1N0cmluZyogaW5wdXQoKSB7
IHJldHVybiBtX2NhY2hlZFJlc3VsdC5pbnB1dCgpOyB9CiAKLSAgICB2b2lkIHZpc2l0QWdncmVn
YXRlKFNsb3RWaXNpdG9yJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCB2
aXNpdEFnZ3JlZ2F0ZShWaXNpdG9yJik7CiAKICAgICBKU1ZhbHVlIGdldEJhY2tyZWYoSlNHbG9i
YWxPYmplY3QqLCB1bnNpZ25lZCk7CiAgICAgSlNWYWx1ZSBnZXRMYXN0UGFyZW4oSlNHbG9iYWxP
YmplY3QqKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE9iamVj
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhw
T2JqZWN0LmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvUmVnRXhwT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYsNyArNDYsOCBAQCB2
b2lkIFJlZ0V4cE9iamVjdDo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtCiAgICAgQVNTRVJUKHR5cGUo
KSA9PSBSZWdFeHBPYmplY3RUeXBlKTsKIH0KIAotdm9pZCBSZWdFeHBPYmplY3Q6OnZpc2l0Q2hp
bGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVu
YW1lIFZpc2l0b3I+Cit2b2lkIFJlZ0V4cE9iamVjdDo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxs
KiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFJlZ0V4cE9iamVjdCogdGhpc09iamVj
dCA9IGpzQ2FzdDxSZWdFeHBPYmplY3QqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lO
SEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC01NSw2ICs1Niw4IEBAIHZvaWQgUmVnRXhw
T2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCoKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2Jq
ZWN0LT5tX2xhc3RJbmRleCk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihSZWdFeHBPYmpl
Y3QpOworCiBib29sIFJlZ0V4cE9iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiBv
YmplY3QsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0
eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3Qt
PnZtKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBPYmplY3Qu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBPYmpl
Y3QuaAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
UmVnRXhwT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEzMyw3ICsxMzMsNyBAQCBwcml2YXRl
OgogICAgIEpTX0VYUE9SVF9QUklWQVRFIFJlZ0V4cE9iamVjdChWTSYsIFN0cnVjdHVyZSosIFJl
Z0V4cCopOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsK
IAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsK
KyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgYm9vbCBsYXN0SW5kZXhJc1dyaXRh
YmxlKCkgY29uc3QKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
YW1wbGluZ1Byb2ZpbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TYW1wbGluZ1Byb2ZpbGVyLmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTY1Miw3ICs2NTIsNyBAQCB2b2lkIFNhbXBsaW5nUHJvZmlsZXI6OnByb2Nlc3NVbnZl
cmlmaWVkCiAgICAgbV91bnByb2Nlc3NlZFN0YWNrVHJhY2VzLmNsZWFyKCk7CiB9CiAKLXZvaWQg
U2FtcGxpbmdQcm9maWxlcjo6dmlzaXQoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yKQordm9pZCBT
YW1wbGluZ1Byb2ZpbGVyOjp2aXNpdChBYnN0cmFjdFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvcikK
IHsKICAgICBSRUxFQVNFX0FTU0VSVChtX2xvY2suaXNMb2NrZWQoKSk7CiAgICAgZm9yIChKU0Nl
bGwqIGNlbGwgOiBtX2xpdmVDZWxsUG9pbnRlcnMpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TYW1wbGluZ1Byb2ZpbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5oCShyZXZpc2lvbiAyNzE0NDMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TYW1wbGluZ1Byb2ZpbGVyLmgJKHdvcmtp
bmcgY29weSkKQEAgLTE3MSw3ICsxNzEsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBub3RpY2VKU0xv
Y2tBY3F1aXNpdGlvbigpOwogICAgIHZvaWQgbm90aWNlVk1FbnRyeSgpOwogICAgIHZvaWQgc2h1
dGRvd24oKTsKLSAgICB2b2lkIHZpc2l0KFNsb3RWaXNpdG9yJik7CisgICAgdm9pZCB2aXNpdChB
YnN0cmFjdFNsb3RWaXNpdG9yJik7CiAgICAgTG9jayYgZ2V0TG9jaygpIHsgcmV0dXJuIG1fbG9j
azsgfQogICAgIHZvaWQgc2V0VGltaW5nSW50ZXJ2YWwoU2Vjb25kcyBpbnRlcnZhbCkgeyBtX3Rp
bWluZ0ludGVydmFsID0gaW50ZXJ2YWw7IH0KICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHN0
YXJ0KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29wZWRBcmd1bWVu
dHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3Bl
ZEFyZ3VtZW50cy5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1Njb3BlZEFyZ3VtZW50cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk4LDcgKzk4
LDggQEAgU2NvcGVkQXJndW1lbnRzKiBTY29wZWRBcmd1bWVudHM6OmNyZWF0ZQogICAgIHJldHVy
biByZXN1bHQ7CiB9CiAKLXZvaWQgU2NvcGVkQXJndW1lbnRzOjp2aXNpdENoaWxkcmVuKEpTQ2Vs
bCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
Pgordm9pZCBTY29wZWRBcmd1bWVudHM6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwg
VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBTY29wZWRBcmd1bWVudHMqIHRoaXNPYmplY3QgPSBz
dGF0aWNfY2FzdDxTY29wZWRBcmd1bWVudHMqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNU
X0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC0xMTUsNiArMTE2LDggQEAgdm9pZCBT
Y29wZWRBcmd1bWVudHM6OnZpc2l0Q2hpbGRyZW4oSlNDZQogICAgIH0KIH0KIAorREVGSU5FX1ZJ
U0lUX0NISUxEUkVOKFNjb3BlZEFyZ3VtZW50cyk7CisKIFN0cnVjdHVyZSogU2NvcGVkQXJndW1l
bnRzOjpjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBKU1ZhbHVlIHByb3RvdHlwZSkKIHsKICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0s
IGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhTY29wZWRBcmd1bWVudHNUeXBlLCBT
dHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TY29wZWRBcmd1bWVudHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TY29wZWRBcmd1bWVudHMuaAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVkQXJndW1lbnRzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTYzLDkgKzYzLDkgQEAgcHVibGljOgogICAgIAogICAgIC8vIENyZWF0ZXMgYW4gYXJndW1l
bnRzIG9iamVjdCBieSBjb3B5aW5nIHRoZSBhcmd1bWVudHMgZnJvbSBhIHdlbGwtZGVmaW5lZCBz
dGFjayBsb2NhdGlvbi4KICAgICBzdGF0aWMgU2NvcGVkQXJndW1lbnRzKiBjcmVhdGVCeUNvcHlp
bmdGcm9tKFZNJiwgU3RydWN0dXJlKiwgUmVnaXN0ZXIqIGFyZ3VtZW50c1N0YXJ0LCB1bnNpZ25l
ZCB0b3RhbExlbmd0aCwgSlNGdW5jdGlvbiogY2FsbGVlLCBTY29wZWRBcmd1bWVudHNUYWJsZSos
IEpTTGV4aWNhbEVudmlyb25tZW50Kik7Ci0gICAgCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGls
ZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwotICAgIAorCisgICAgREVDTEFSRV9WSVNJVF9D
SElMRFJFTjsKKwogICAgIHVpbnQzMl90IGludGVybmFsTGVuZ3RoKCkgY29uc3QKICAgICB7CiAg
ICAgICAgIHJldHVybiBtX3RvdGFsTGVuZ3RoOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyLmNw
cAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2lt
cGxlVHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Miw3ICs2Miw3
IEBAIGJvb2wgU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXI6OmlzQXRvbWkKICAgICByZXR1cm4g
bV9hbGxvd0F0b21pY3NXYWl0OwogfQogCi1ib29sIFNpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVy
OjpKU0FycmF5QnVmZmVyT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFu
ZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgSlNDOjpTbG90VmlzaXRvciYgdmlzaXRv
ciwgY29uc3QgY2hhcioqIHJlYXNvbikKK2Jvb2wgU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXI6
OkpTQXJyYXlCdWZmZXJPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5k
bGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3Im
IHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCiB7CiAgICAgaWYgKFVOTElLRUxZKHJlYXNv
bikpCiAgICAgICAgICpyZWFzb24gPSAiSlNBcnJheUJ1ZmZlciBpcyBvcGFxdWUgcm9vdCI7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TaW1wbGVUeXBlZEFycmF5Q29udHJv
bGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NpbXBs
ZVR5cGVkQXJyYXlDb250cm9sbGVyLmgJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1NpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTU4LDcgKzU4LDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBjbGFzcyBKU0Fy
cmF5QnVmZmVyT3duZXIgZmluYWwgOiBwdWJsaWMgV2Vha0hhbmRsZU93bmVyIHsKICAgICBwdWJs
aWM6Ci0gICAgICAgIGJvb2wgaXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8
SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCwgU2xvdFZpc2l0b3ImLCBjb25zdCBjaGFyKiog
cmVhc29uKSBmaW5hbDsKKyAgICAgICAgYm9vbCBpc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhK
U0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0LCBBYnN0cmFjdFNsb3RWaXNp
dG9yJiwgY29uc3QgY2hhcioqIHJlYXNvbikgZmluYWw7CiAgICAgICAgIHZvaWQgZmluYWxpemUo
SlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCkgZmluYWw7CiAgICAgfTsK
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU21hbGxTdHJpbmdzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TbWFsbFN0cmluZ3Mu
Y3BwCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
bWFsbFN0cmluZ3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Niw3ICs2Niw3IEBAIHZvaWQgU21h
bGxTdHJpbmdzOjppbml0aWFsaXplQ29tbW9uU3RyaW4KICAgICBzZXRJc0luaXRpYWxpemVkKHRy
dWUpOwogfQogCi12b2lkIFNtYWxsU3RyaW5nczo6dmlzaXRTdHJvbmdSZWZlcmVuY2VzKFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQordm9pZCBTbWFsbFN0cmluZ3M6OnZpc2l0U3Ryb25nUmVmZXJlbmNl
cyhBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIG1fbmVlZHNUb0JlVmlzaXRl
ZCA9IGZhbHNlOwogICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQobV9lbXB0eVN0cmluZyk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TbWFsbFN0cmluZ3MuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TbWFsbFN0cmluZ3MuaAko
cmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU21hbGxT
dHJpbmdzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDkgKzQ5LDkgQEAgY2xhc3MgU3RyaW5nSW1w
bDsKIAogbmFtZXNwYWNlIEpTQyB7CiAKK2NsYXNzIEFic3RyYWN0U2xvdFZpc2l0b3I7CiBjbGFz
cyBWTTsKIGNsYXNzIEpTU3RyaW5nOwotY2xhc3MgU2xvdFZpc2l0b3I7CiAKIHN0YXRpYyBjb25z
dGV4cHIgdW5zaWduZWQgbWF4U2luZ2xlQ2hhcmFjdGVyU3RyaW5nID0gMHhGRjsKIApAQCAtNzgs
NyArNzgsNyBAQCBwdWJsaWM6CiAgICAgSlNTdHJpbmcqKiBzaW5nbGVDaGFyYWN0ZXJTdHJpbmdz
KCkgeyByZXR1cm4gJm1fc2luZ2xlQ2hhcmFjdGVyU3RyaW5nc1swXTsgfQogCiAgICAgdm9pZCBp
bml0aWFsaXplQ29tbW9uU3RyaW5ncyhWTSYpOwotICAgIHZvaWQgdmlzaXRTdHJvbmdSZWZlcmVu
Y2VzKFNsb3RWaXNpdG9yJik7CisgICAgdm9pZCB2aXNpdFN0cm9uZ1JlZmVyZW5jZXMoQWJzdHJh
Y3RTbG90VmlzaXRvciYpOwogCiAjZGVmaW5lIEpTQ19DT01NT05fU1RSSU5HU19BQ0NFU1NPUl9E
RUZJTklUSU9OKG5hbWUpIFwKICAgICBKU1N0cmluZyogbmFtZSMjU3RyaW5nKCkgY29uc3QgICAg
ICAgICAgICAgICAgICAgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3Bh
cnNlQXJyYXlWYWx1ZU1hcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU3BhcnNlQXJyYXlWYWx1ZU1hcC5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NwYXJzZUFycmF5VmFsdWVNYXAuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMTAsNyArMjEwLDggQEAgSlNWYWx1ZSBTcGFyc2VBcnJheUVudHJ5Ojpn
ZXROb25TcGFyc2VNbwogICAgIHJldHVybiBCYXNlOjpnZXQoKTsKIH0KIAotdm9pZCBTcGFyc2VB
cnJheVZhbHVlTWFwOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZp
c2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBTcGFyc2VBcnJheVZhbHVl
TWFwOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7
CiAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCogdGhpc09iamVjdCA9IGpzQ2FzdDxTcGFyc2VBcnJh
eVZhbHVlTWFwKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2Jq
ZWN0LCBpbmZvKCkpOwpAQCAtMjIzLDUgKzIyNCw3IEBAIHZvaWQgU3BhcnNlQXJyYXlWYWx1ZU1h
cDo6dmlzaXRDaGlsZHJlbigKICAgICB2aXNpdG9yLnJlcG9ydEV4dHJhTWVtb3J5VmlzaXRlZCh0
aGlzT2JqZWN0LT5tX3JlcG9ydGVkQ2FwYWNpdHkgKiBzaXplb2YoTWFwOjpLZXlWYWx1ZVBhaXJU
eXBlKSk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihTcGFyc2VBcnJheVZhbHVlTWFwKTsK
KwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1NwYXJzZUFycmF5VmFsdWVNYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TcGFyc2VBcnJheVZhbHVlTWFwLmgJKHJldmlzaW9uIDI3MTQ0MykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NwYXJzZUFycmF5VmFsdWVNYXAuaAkod29y
a2luZyBjb3B5KQpAQCAtMTE1LDcgKzExNSw3IEBAIHB1YmxpYzoKICAgICAKICAgICBzdGF0aWMg
U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUg
cHJvdG90eXBlKTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xv
dFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgYm9vbCBzcGFy
c2VNb2RlKCkKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdGFj
a0ZyYW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
dGFja0ZyYW1lLmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU3RhY2tGcmFtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0Miw3ICsxNDIsOCBA
QCBTdHJpbmcgU3RhY2tGcmFtZTo6dG9TdHJpbmcoVk0mIHZtKSBjb25zCiAgICAgcmV0dXJuIHRy
YWNlQnVpbGQudG9TdHJpbmcoKS5pbXBsKCk7CiB9CiAKLXZvaWQgU3RhY2tGcmFtZTo6dmlzaXRD
aGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+
Cit2b2lkIFN0YWNrRnJhbWU6OnZpc2l0Q2hpbGRyZW5JbXBsKFZpc2l0b3ImIHZpc2l0b3IpCiB7
CiAgICAgaWYgKG1fY2FsbGVlKQogICAgICAgICB2aXNpdG9yLmFwcGVuZChtX2NhbGxlZSk7CkBA
IC0xNTAsNSArMTUxLDcgQEAgdm9pZCBTdGFja0ZyYW1lOjp2aXNpdENoaWxkcmVuKFNsb3RWaXNp
dAogICAgICAgICB2aXNpdG9yLmFwcGVuZChtX2NvZGVCbG9jayk7CiB9CiAKK0RFRklORV9JTlNU
QU5DRV9WSVNJVF9DSElMRFJFTihTdGFja0ZyYW1lKTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0YWNrRnJhbWUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdGFja0ZyYW1lLmgJKHJldmlz
aW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0YWNrRnJhbWUu
aAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogCiAjaW5jbHVkZSAiSGVhcC5oIgog
I2luY2x1ZGUgIlZNLmgiCisjaW5jbHVkZSAiU2xvdFZpc2l0b3JNYWNyb3MuaCIKICNpbmNsdWRl
ICJXYXNtSW5kZXhPck5hbWUuaCIKICNpbmNsdWRlICJXcml0ZUJhcnJpZXIuaCIKICNpbmNsdWRl
IDxsaW1pdHMuaD4KQEAgLTM1LDcgKzM2LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIENv
ZGVCbG9jazsKIGNsYXNzIEpTT2JqZWN0OwotY2xhc3MgU2xvdFZpc2l0b3I7CiAKIGNsYXNzIFN0
YWNrRnJhbWUgewogcHVibGljOgpAQCAtNTgsNyArNTgsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJl
dHVybiBtX2J5dGVjb2RlSW5kZXg7CiAgICAgfQogICAgIAotICAgIHZvaWQgdmlzaXRDaGlsZHJl
bihTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfSU5TVEFOQ0VfVklTSVRfQ0hJTERSRU47CiAg
ICAgYm9vbCBpc01hcmtlZChWTSYgdm0pIGNvbnN0IHsgcmV0dXJuICghbV9jYWxsZWUgfHwgdm0u
aGVhcC5pc01hcmtlZChtX2NhbGxlZS5nZXQoKSkpICYmICghbV9jb2RlQmxvY2sgfHwgdm0uaGVh
cC5pc01hcmtlZChtX2NvZGVCbG9jay5nZXQoKSkpOyB9CiAKIHByaXZhdGU6CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAJKHJldmlzaW9uIDI3MTQ0
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEyNjcsNyArMTI2Nyw4IEBAIHZvaWQgU3RydWN0dXJlOjpkaWRUcmFuc2l0
aW9uRnJvbVRoaXNTdHIKICAgICAgICAgbV90cmFuc2l0aW9uV2F0Y2hwb2ludFNldC5maXJlQWxs
KHZtKCksIFN0cnVjdHVyZUZpcmVEZXRhaWwodGhpcykpOwogfQogCi12b2lkIFN0cnVjdHVyZTo6
dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxh
dGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgU3RydWN0dXJlOjp2aXNpdENoaWxkcmVuSW1wbChK
U0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgU3RydWN0dXJlKiB0aGlzT2Jq
ZWN0ID0ganNDYXN0PFN0cnVjdHVyZSo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5I
RVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTEyOTUsNiArMTI5Niw4IEBAIHZvaWQgU3Ry
dWN0dXJlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2UKICAgICAgICAgdGhpc09iamVjdC0+bV9w
cm9wZXJ0eVRhYmxlVW5zYWZlLmNsZWFyKCk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihT
dHJ1Y3R1cmUpOworCiBib29sIFN0cnVjdHVyZTo6aXNDaGVhcER1cmluZ0dDKFZNJiB2bSkKIHsK
ICAgICAvLyBGSVhNRTogV2UgY291bGQgbWFrZSB0aGlzIGV2ZW4gc2FmZXIgYnkgcmV0dXJuaW5n
IGZhbHNlIGlmIHRoaXMgc3RydWN0dXJlJ3MgcHJvcGVydHkgdGFibGUKQEAgLTEzMDUsMTYgKzEz
MDgsMjYgQEAgYm9vbCBTdHJ1Y3R1cmU6OmlzQ2hlYXBEdXJpbmdHQyhWTSYgdm0pCiAgICAgICAg
ICYmIChoYXNQb2x5UHJvdG8oKSB8fCAhc3RvcmVkUHJvdG90eXBlT2JqZWN0KCkgfHwgdm0uaGVh
cC5pc01hcmtlZChzdG9yZWRQcm90b3R5cGVPYmplY3QoKSkpOwogfQogCi1ib29sIFN0cnVjdHVy
ZTo6bWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPgorYm9vbCBTdHJ1Y3R1cmU6Om1hcmtJZkNoZWFwMShWaXNpdG9yJiB2aXNpdG9yKQor
Ly9ib29sIFN0cnVjdHVyZTo6bWFya0lmQ2hlYXAxKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0
b3IpCiB7CiAgICAgVk0mIHZtID0gdmlzaXRvci52bSgpOwogICAgIGlmICghaXNDaGVhcER1cmlu
Z0dDKHZtKSkKLSAgICAgICAgcmV0dXJuIHZtLmhlYXAuaXNNYXJrZWQodGhpcyk7Ci0gICAgCisg
ICAgICAgIHJldHVybiB2bS5oZWFwLmlzTWFya2VkKHRoaXMpOyAvLyBtbGFtIEZJU01FCisKICAg
ICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKHRoaXMpOwogICAgIHJldHVybiB0cnVlOwogfQog
CisvL3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+CisvL2Jvb2wgU3RydWN0dXJlOjptYXJrSWZD
aGVhcChWaXNpdG9yJiB2aXNpdG9yKQorLy97CisvLyAgICByZXR1cm4gbWFya0lmQ2hlYXAxKHZp
c2l0b3IpOyAvLyBtbGFtIEZJWE1FIEhBQ0sgdG8gZ2V0IHRoaXMgY29tcGlsaW5nISEhCisvL30K
K3RlbXBsYXRlIGJvb2wgU3RydWN0dXJlOjptYXJrSWZDaGVhcDEoU2xvdFZpc2l0b3ImKTsKK3Rl
bXBsYXRlIGJvb2wgU3RydWN0dXJlOjptYXJrSWZDaGVhcDEoQWJzdHJhY3RTbG90VmlzaXRvciYp
OworCiBSZWY8U3RydWN0dXJlU2hhcGU+IFN0cnVjdHVyZTo6dG9TdHJ1Y3R1cmVTaGFwZShKU1Zh
bHVlIHZhbHVlLCBib29sJiBzYXdQb2x5UHJvdG9TdHJ1Y3R1cmUpCiB7CiAgICAgUmVmPFN0cnVj
dHVyZVNoYXBlPiBiYXNlU2hhcGUgPSBTdHJ1Y3R1cmVTaGFwZTo6Y3JlYXRlKCk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAkocmV2aXNpb24gMjcxNDQz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTYwLDcgKzYwLDYgQEAgY2xhc3MgUHJvcGVydHlOYW1lQXJyYXlEYXRhOwogY2xh
c3MgUHJvcGVydHlUYWJsZTsKIGNsYXNzIFN0cnVjdHVyZUNoYWluOwogY2xhc3MgU3RydWN0dXJl
U2hhcGU7Ci1jbGFzcyBTbG90VmlzaXRvcjsKIGNsYXNzIEpTU3RyaW5nOwogc3RydWN0IER1bXBD
b250ZXh0Owogc3RydWN0IEhhc2hUYWJsZTsKQEAgLTMwNyw3ICszMDYsNyBAQCBwdWJsaWM6CiAg
ICAgSlNWYWx1ZSBwcm90b3R5cGVGb3JMb29rdXAoSlNHbG9iYWxPYmplY3QqLCBKU0NlbGwqIGJh
c2UpIGNvbnN0OwogICAgIFN0cnVjdHVyZUNoYWluKiBwcm90b3R5cGVDaGFpbihWTSYsIEpTR2xv
YmFsT2JqZWN0KiwgSlNPYmplY3QqIGJhc2UpIGNvbnN0OwogICAgIFN0cnVjdHVyZUNoYWluKiBw
cm90b3R5cGVDaGFpbihKU0dsb2JhbE9iamVjdCosIEpTT2JqZWN0KiBiYXNlKSBjb25zdDsKLSAg
ICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAg
REVDTEFSRV9WSVNJVF9DSElMRFJFTjsKICAgICAKICAgICAvLyBBIFN0cnVjdHVyZSBpcyBjaGVh
cCB0byBtYXJrIGR1cmluZyBHQyBpZiBkb2luZyBzbyB3b3VsZCBvbmx5IGFkZCBhIHNtYWxsIGFu
ZCBib3VuZGVkIGFtb3VudAogICAgIC8vIHRvIG91ciBoZWFwIGZvb3RwcmludC4gRm9yIGV4YW1w
bGUsIGlmIHRoZSBzdHJ1Y3R1cmUgcmVmZXJzIHRvIGEgZ2xvYmFsIG9iamVjdCB0aGF0IGlzIG5v
dApAQCAtMzE4LDcgKzMxNyw5IEBAIHB1YmxpYzoKICAgICBib29sIGlzQ2hlYXBEdXJpbmdHQyhW
TSYpOwogICAgIAogICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGlzIHN0cnVjdHVyZSBpcyBub3cg
bWFya2VkLgotICAgIGJvb2wgbWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImKTsKKy8vICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFZpc2l0b3I+IGJvb2wgbWFya0lmQ2hlYXAoVmlzaXRvciYpOworLy8gICAg
Ym9vbCBtYXJrSWZDaGVhcDEoQWJzdHJhY3RTbG90VmlzaXRvciYpOworICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFZpc2l0b3I+IGJvb2wgbWFya0lmQ2hlYXAxKFZpc2l0b3ImKTsgLy8gbWxzbSBURVNU
CiAgICAgCiAgICAgYm9vbCBoYXNSYXJlRGF0YSgpIGNvbnN0CiAgICAgewpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlQ2hhaW4uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUNoYWluLmNwcAkocmV2aXNp
b24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlQ2hh
aW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Niw3ICs2Niw4IEBAIHZvaWQgU3RydWN0dXJlQ2hh
aW46OmZpbmlzaENyZWF0aW9uKFZNJiAKICAgICB9CiB9CiAKLXZvaWQgU3RydWN0dXJlQ2hhaW46
OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBs
YXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFN0cnVjdHVyZUNoYWluOjp2aXNpdENoaWxkcmVu
SW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgU3RydWN0dXJlQ2hh
aW4qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8U3RydWN0dXJlQ2hhaW4qPihjZWxsKTsKICAgICBBU1NF
UlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC04MCw0ICs4MSw2
IEBAIHZvaWQgU3RydWN0dXJlQ2hhaW46OnZpc2l0Q2hpbGRyZW4oSlNDZWwKICAgICB9CiB9CiAK
K0RFRklORV9WSVNJVF9DSElMRFJFTihTdHJ1Y3R1cmVDaGFpbik7CisKIH0gLy8gbmFtZXNwYWNl
IEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlQ2hhaW4u
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVD
aGFpbi5oCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TdHJ1Y3R1cmVDaGFpbi5oCSh3b3JraW5nIGNvcHkpCkBAIC01MSw3ICs1MSw3IEBAIHB1Ymxp
YzoKIAogICAgIHN0YXRpYyBTdHJ1Y3R1cmVDaGFpbiogY3JlYXRlKFZNJiwgSlNPYmplY3QqKTsK
ICAgICBTdHJ1Y3R1cmVJRCogaGVhZCgpIHsgcmV0dXJuIG1fdmVjdG9yLmdldCgpOyB9Ci0gICAg
c3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERF
Q0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1
Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3Rv
dHlwZSkKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1
cmVSYXJlRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU3RydWN0dXJlUmFyZURhdGEuY3BwCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVSYXJlRGF0YS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTY3LDcgKzY3LDggQEAgU3RydWN0dXJlUmFyZURhdGE6OlN0cnVjdHVyZVJhcmVEYXRhKFZN
JgogICAgICAgICBtX3ByZXZpb3VzLnNldCh2bSwgdGhpcywgcHJldmlvdXMpOwogfQogCi12b2lk
IFN0cnVjdHVyZVJhcmVEYXRhOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0
b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBTdHJ1Y3R1cmVS
YXJlRGF0YTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9y
KQogewogICAgIFN0cnVjdHVyZVJhcmVEYXRhKiB0aGlzT2JqZWN0ID0ganNDYXN0PFN0cnVjdHVy
ZVJhcmVEYXRhKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2Jq
ZWN0LCBpbmZvKCkpOwpAQCAtODYsNiArODcsOCBAQCB2b2lkIFN0cnVjdHVyZVJhcmVEYXRhOjp2
aXNpdENoaWxkcmVuKEpTCiAgICAgfQogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oU3RydWN0
dXJlUmFyZURhdGEpOworCiAvLyAtLS0tLS0tLS0tLSBDYWNoZWQgc3BlY2lhbCBwcm9wZXJ0aWVz
IGhlbHBlciB3YXRjaHBvaW50IGNsYXNzZXMgLS0tLS0tLS0tLS0KIAogY2xhc3MgQ2FjaGVkU3Bl
Y2lhbFByb3BlcnR5QWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50IGZpbmFs
IDogcHVibGljIEFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludEJhc2UgewpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlUmFyZURhdGEuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVSYXJl
RGF0YS5oCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TdHJ1Y3R1cmVSYXJlRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC02OCw3ICs2OCw3IEBAIHB1
YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNEZXN0cnVjdGlvbiA9IHRydWU7
CiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKIAotICAgIHN0YXRpYyB2b2lkIHZp
c2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NI
SUxEUkVOOwogCiAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiwgSlNH
bG9iYWxPYmplY3QqLCBKU1ZhbHVlIHByb3RvdHlwZSk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1N5bWJvbFRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TeW1ib2xUYWJsZS5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJvbFRhYmxlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtOTIsNyArOTIsOCBAQCB2b2lkIFN5bWJvbFRhYmxlOjpmaW5pc2hDcmVhdGlvbihW
TSYgdm0pCiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwogfQogCi12b2lkIFN5bWJvbFRh
YmxlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogdGhpc0NlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9y
KQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgU3ltYm9sVGFibGU6OnZpc2l0Q2hp
bGRyZW5JbXBsKEpTQ2VsbCogdGhpc0NlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgU3lt
Ym9sVGFibGUqIHRoaXNTeW1ib2xUYWJsZSA9IGpzQ2FzdDxTeW1ib2xUYWJsZSo+KHRoaXNDZWxs
KTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNTeW1ib2xUYWJsZSwgaW5mbygp
KTsKQEAgLTEwOCw2ICsxMDksOCBAQCB2b2lkIFN5bWJvbFRhYmxlOjp2aXNpdENoaWxkcmVuKEpT
Q2VsbCogCiAgICAgdGhpc1N5bWJvbFRhYmxlLT5tX2xvY2FsVG9FbnRyeSA9IG51bGxwdHI7CiB9
CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihTeW1ib2xUYWJsZSk7CisKIGNvbnN0IFN5bWJvbFRh
YmxlOjpMb2NhbFRvRW50cnlWZWMmIFN5bWJvbFRhYmxlOjpsb2NhbFRvRW50cnkoY29uc3QgQ29u
Y3VycmVudEpTTG9ja2VyJikKIHsKICAgICBpZiAoVU5MSUtFTFkoIW1fbG9jYWxUb0VudHJ5KSkg
ewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFibGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TeW1ib2xUYWJsZS5oCShy
ZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TeW1ib2xU
YWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03MzMsNyArNzMzLDcgQEAgcHVibGljOgogICAgICAg
ICBtX3NpbmdsZXRvbi5ub3RpZnlXcml0ZSh2bSwgdGhpcywgc2NvcGUsIHJlYXNvbik7CiAgICAg
fQogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYp
OworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBERUNMQVJFX0VYUE9SVF9JTkZP
OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlUHJvZmlsZXJMb2cu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVQcm9m
aWxlckxvZy5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1R5cGVQcm9maWxlckxvZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNCw3ICsxMjQs
NyBAQCB2b2lkIFR5cGVQcm9maWxlckxvZzo6cHJvY2Vzc0xvZ0VudHJpZXMoCiAgICAgfQogfQog
Ci12b2lkIFR5cGVQcm9maWxlckxvZzo6dmlzaXQoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2b2lk
IFR5cGVQcm9maWxlckxvZzo6dmlzaXQoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsK
ICAgICBmb3IgKExvZ0VudHJ5KiBlbnRyeSA9IG1fbG9nU3RhcnRQdHI7IGVudHJ5ICE9IG1fY3Vy
cmVudExvZ0VudHJ5UHRyOyArK2VudHJ5KSB7CiAgICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJy
aWVyZWQoZW50cnktPnZhbHVlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1R5cGVQcm9maWxlckxvZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1R5cGVQcm9maWxlckxvZy5oCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9UeXBlUHJvZmlsZXJMb2cuaAkod29ya2luZyBjb3B5KQpAQCAt
NTksNyArNTksNyBAQCBwdWJsaWM6CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBwcm9jZXNz
TG9nRW50cmllcyhWTSYsIGNvbnN0IFN0cmluZyYpOwogICAgIExvZ0VudHJ5KiBsb2dFbmRQdHIo
KSBjb25zdCB7IHJldHVybiBtX2xvZ0VuZFB0cjsgfQogCi0gICAgdm9pZCB2aXNpdChTbG90Vmlz
aXRvciYpOworICAgIHZvaWQgdmlzaXQoQWJzdHJhY3RTbG90VmlzaXRvciYpOwogCiAgICAgc3Rh
dGljIHB0cmRpZmZfdCBsb2dTdGFydE9mZnNldCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihU
eXBlUHJvZmlsZXJMb2csIG1fbG9nU3RhcnRQdHIpOyB9CiAgICAgc3RhdGljIHB0cmRpZmZfdCBj
dXJyZW50TG9nRW50cnlPZmZzZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoVHlwZVByb2Zp
bGVyTG9nLCBtX2N1cnJlbnRMb2dFbnRyeVB0cik7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1dlYWtNYXBJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9XZWFrTWFwSW1wbC5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtNYXBJbXBsLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzksOCArMzksOSBAQCB2b2lkIFdlYWtNYXBJbXBsPFdlYWtNYXBCdWNrZXQ+OjpkZXN0
cm95CiAgICAgc3RhdGljX2Nhc3Q8V2Vha01hcEltcGwqPihjZWxsKS0+fldlYWtNYXBJbXBsKCk7
CiB9CiAKLXRlbXBsYXRlIDx0eXBlbmFtZSBXZWFrTWFwQnVja2V0Pgotdm9pZCBXZWFrTWFwSW1w
bDxXZWFrTWFwQnVja2V0Pjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9y
JiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgV2Vha01hcEJ1Y2tldD4KK3RlbXBsYXRlPHR5
cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFdlYWtNYXBJbXBsPFdlYWtNYXBCdWNrZXQ+Ojp2aXNpdENo
aWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgV2Vha01h
cEltcGwqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8V2Vha01hcEltcGwqPihjZWxsKTsKICAgICBBU1NF
UlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC00OCw2ICs0OSw4
IEBAIHZvaWQgV2Vha01hcEltcGw8V2Vha01hcEJ1Y2tldD46OnZpc2l0Q2gKICAgICB2aXNpdG9y
LnJlcG9ydEV4dHJhTWVtb3J5VmlzaXRlZCh0aGlzT2JqZWN0LT5tX2NhcGFjaXR5ICogc2l6ZW9m
KFdlYWtNYXBCdWNrZXQpKTsKIH0KIAorREVGSU5FX1RFTVBMQVRFX1ZJU0lUX0NISUxEUkVOKHRl
bXBsYXRlPHR5cGVuYW1lIFdlYWtNYXBCdWNrZXQ+LCBXZWFrTWFwSW1wbDxXZWFrTWFwQnVja2V0
Pik7CisKIHRlbXBsYXRlIDx0eXBlbmFtZSBXZWFrTWFwQnVja2V0Pgogc2l6ZV90IFdlYWtNYXBJ
bXBsPFdlYWtNYXBCdWNrZXQ+Ojplc3RpbWF0ZWRTaXplKEpTQ2VsbCogY2VsbCwgVk0mIHZtKQog
ewpAQCAtNTYsMTMgKzU5LDEzIEBAIHNpemVfdCBXZWFrTWFwSW1wbDxXZWFrTWFwQnVja2V0Pjo6
ZXN0aW0KIH0KIAogdGVtcGxhdGUgPD4KLXZvaWQgV2Vha01hcEltcGw8V2Vha01hcEJ1Y2tldDxX
ZWFrTWFwQnVja2V0RGF0YUtleT4+Ojp2aXNpdE91dHB1dENvbnN0cmFpbnRzKEpTQ2VsbCosIFNs
b3RWaXNpdG9yJikKK3ZvaWQgV2Vha01hcEltcGw8V2Vha01hcEJ1Y2tldDxXZWFrTWFwQnVja2V0
RGF0YUtleT4+Ojp2aXNpdE91dHB1dENvbnN0cmFpbnRzKEpTQ2VsbCosIEFic3RyYWN0U2xvdFZp
c2l0b3ImKQogewogICAgIC8vIE9ubHkgSlNXZWFrTWFwIG5lZWRzIHRvIGhhcnZlc3QgdmFsdWUg
cmVmZXJlbmNlcwogfQogCiB0ZW1wbGF0ZSA8Pgotdm9pZCBXZWFrTWFwSW1wbDxXZWFrTWFwQnVj
a2V0PFdlYWtNYXBCdWNrZXREYXRhS2V5VmFsdWU+Pjo6dmlzaXRPdXRwdXRDb25zdHJhaW50cyhK
U0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBXZWFrTWFwSW1wbDxXZWFr
TWFwQnVja2V0PFdlYWtNYXBCdWNrZXREYXRhS2V5VmFsdWU+Pjo6dmlzaXRPdXRwdXRDb25zdHJh
aW50cyhKU0NlbGwqIGNlbGwsIEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAg
Vk0mIHZtID0gdmlzaXRvci52bSgpOwogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8V2Vh
a01hcEltcGwqPihjZWxsKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dl
YWtNYXBJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
V2Vha01hcEltcGwuaAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvV2Vha01hcEltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtMTQ0LDggKzE0NCwxMCBA
QCBwdWJsaWM6CiAgICAgICAgIGNsZWFyVmFsdWUoKTsKICAgICB9CiAKKy8vICAgIHRlbXBsYXRl
IDx0eXBlbmFtZSBWaXNpdG9yLCB0eXBlbmFtZSBUID0gRGF0YT4KKy8vICAgIEFMV0FZU19JTkxJ
TkUgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19zYW1lPFQsIFdlYWtNYXBCdWNrZXRE
YXRhS2V5VmFsdWU+Ojp2YWx1ZT46OnR5cGUgdmlzaXRBZ2dyZWdhdGUoVmlzaXRvciYgdmlzaXRv
cikKICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVCA9IERhdGE+Ci0gICAgQUxXQVlTX0lOTElORSB0
eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8VCwgV2Vha01hcEJ1Y2tldERhdGFL
ZXlWYWx1ZT46OnZhbHVlPjo6dHlwZSB2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYgdmlzaXRv
cikKKyAgICBBTFdBWVNfSU5MSU5FIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfc2Ft
ZTxULCBXZWFrTWFwQnVja2V0RGF0YUtleVZhbHVlPjo6dmFsdWU+Ojp0eXBlIHZpc2l0QWdncmVn
YXRlKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiAgICAgewogICAgICAgICB2aXNpdG9y
LmFwcGVuZChtX2RhdGEudmFsdWUpOwogICAgIH0KQEAgLTIwMiw3ICsyMDQsNyBAQCBwdWJsaWM6
CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOwogICAg
IHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENo
aWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9URU1QTEFURV9WSVNJ
VF9DSElMRFJFTjsKIAogICAgIHN0YXRpYyBzaXplX3QgZXN0aW1hdGVkU2l6ZShKU0NlbGwqLCBW
TSYpOwogCkBAIC0zMTEsNyArMzEzLDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gdm0ud2Vh
a1NldFNwYWNlPG1vZGU+KCk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRPdXRwdXRD
b25zdHJhaW50cyhKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIHN0YXRpYyB2b2lkIHZpc2l0
T3V0cHV0Q29uc3RyYWludHMoSlNDZWxsKiwgQWJzdHJhY3RTbG90VmlzaXRvciYpOwogICAgIHZv
aWQgZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoVk0mKTsKIAogcHJpdmF0ZToKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS90b29scy9KU0RvbGxhclZNLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvSlNEb2xsYXJWTS5jcHAJKHJldmlzaW9uIDI3MTQ0MykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9KU0RvbGxhclZNLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjIyLDE0ICsyMjIsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGZpbmlzaENyZWF0
aW9uKFZNJiwgUm9vdCopOwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwq
IGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQotICAgIHsKLSAgICAgICAgRG9sbGFyVk1Bc3Nl
cnRTY29wZSBhc3NlcnRTY29wZTsKLSAgICAgICAgRWxlbWVudCogdGhpc09iamVjdCA9IGpzQ2Fz
dDxFbGVtZW50Kj4oY2VsbCk7Ci0gICAgICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhp
c09iamVjdCwgaW5mbygpKTsKLSAgICAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0
LCB2aXNpdG9yKTsKLSAgICAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9yb290KTsK
LSAgICB9CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIHN0YXRpYyBFbGVtZW50
SGFuZGxlT3duZXIqIGhhbmRsZU93bmVyKCk7CiAKQEAgLTI0NSwxMCArMjM4LDIyIEBAIHByaXZh
dGU6CiAgICAgV3JpdGVCYXJyaWVyPFJvb3Q+IG1fcm9vdDsKIH07CiAKK3RlbXBsYXRlPHR5cGVu
YW1lIFZpc2l0b3I+Cit2b2lkIEVsZW1lbnQ6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2Vs
bCwgVmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBEb2xsYXJWTUFzc2VydFNjb3BlIGFzc2VydFNj
b3BlOworICAgIEVsZW1lbnQqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8RWxlbWVudCo+KGNlbGwpOwor
ICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKKyAgICBC
YXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOworICAgIHZpc2l0b3IuYXBw
ZW5kKHRoaXNPYmplY3QtPm1fcm9vdCk7Cit9CisKK0RFRklORV9WSVNJVF9DSElMRFJFTihFbGVt
ZW50KTsKKwogY2xhc3MgRWxlbWVudEhhbmRsZU93bmVyIGZpbmFsIDogcHVibGljIFdlYWtIYW5k
bGVPd25lciB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgYm9v
bCBpc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhh
bmRsZSwgdm9pZCosIFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKSBm
aW5hbAorICAgIGJvb2wgaXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlND
OjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBj
b25zdCBjaGFyKiogcmVhc29uKSBmaW5hbAogICAgIHsKICAgICAgICAgRG9sbGFyVk1Bc3NlcnRT
Y29wZSBhc3NlcnRTY29wZTsKICAgICAgICAgaWYgKFVOTElLRUxZKHJlYXNvbikpCkBAIC0zMDIs
MTggKzMwNywyMyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2
bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVy
ZUZsYWdzKSwgaW5mbygpKTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVu
KEpTQ2VsbCogdGhpc09iamVjdCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCi0gICAgewotICAgICAg
ICBEb2xsYXJWTUFzc2VydFNjb3BlIGFzc2VydFNjb3BlOwotICAgICAgICBBU1NFUlRfR0NfT0JK
RUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7Ci0gICAgICAgIEJhc2U6OnZpc2l0Q2hp
bGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7Ci0gICAgICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9v
dCh0aGlzT2JqZWN0KTsKLSAgICB9CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogcHJp
dmF0ZToKICAgICBXZWFrPEVsZW1lbnQ+IG1fZWxlbWVudDsKIH07CiAKK3RlbXBsYXRlPHR5cGVu
YW1lIFZpc2l0b3I+Cit2b2lkIFJvb3Q6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogdGhpc09i
amVjdCwgVmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBEb2xsYXJWTUFzc2VydFNjb3BlIGFzc2Vy
dFNjb3BlOworICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygp
KTsKKyAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOworICAgIHZp
c2l0b3IuYWRkT3BhcXVlUm9vdCh0aGlzT2JqZWN0KTsKK30KKworREVGSU5FX1ZJU0lUX0NISUxE
UkVOKFJvb3QpOworCiBjbGFzcyBTaW1wbGVPYmplY3QgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVj
dCB7CiBwdWJsaWM6CiAgICAgU2ltcGxlT2JqZWN0KFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUpCkBAIC0zMzgsMTQgKzM0OCw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHNpbXBsZU9i
amVjdDsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2Vs
bCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCi0gICAgewotICAgICAgICBEb2xsYXJWTUFzc2VydFNj
b3BlIGFzc2VydFNjb3BlOwotICAgICAgICBTaW1wbGVPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nh
c3Q8U2ltcGxlT2JqZWN0Kj4oY2VsbCk7Ci0gICAgICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJ
VFModGhpc09iamVjdCwgaW5mbygpKTsKLSAgICAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlz
T2JqZWN0LCB2aXNpdG9yKTsKLSAgICAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9o
aWRkZW5WYWx1ZSk7Ci0gICAgfQorICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBz
dGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKICAgICB7CkBAIC0zNzgsNiArMzgxLDE4
IEBAIHByaXZhdGU6CiAgICAgV3JpdGVCYXJyaWVyPEpTQzo6VW5rbm93bj4gbV9oaWRkZW5WYWx1
ZTsKIH07CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFNpbXBsZU9iamVjdDo6
dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQoreworICAg
IERvbGxhclZNQXNzZXJ0U2NvcGUgYXNzZXJ0U2NvcGU7CisgICAgU2ltcGxlT2JqZWN0KiB0aGlz
T2JqZWN0ID0ganNDYXN0PFNpbXBsZU9iamVjdCo+KGNlbGwpOworICAgIEFTU0VSVF9HQ19PQkpF
Q1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKKyAgICBCYXNlOjp2aXNpdENoaWxkcmVu
KHRoaXNPYmplY3QsIHZpc2l0b3IpOworICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1f
aGlkZGVuVmFsdWUpOworfQorCitERUZJTkVfVklTSVRfQ0hJTERSRU4oU2ltcGxlT2JqZWN0KTsK
KwogY2xhc3MgSW1wdXJlR2V0dGVyIDogcHVibGljIEpTTm9uRmluYWxPYmplY3QgewogcHVibGlj
OgogICAgIEltcHVyZUdldHRlcihWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQpAQCAtNDM0
LDE0ICs0NDksNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBCYXNlOjpnZXRPd25Qcm9wZXJ0
eVNsb3Qob2JqZWN0LCBnbG9iYWxPYmplY3QsIG5hbWUsIHNsb3QpOwogICAgIH0KIAotICAgIHN0
YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRv
cikKLSAgICB7Ci0gICAgICAgIERvbGxhclZNQXNzZXJ0U2NvcGUgYXNzZXJ0U2NvcGU7Ci0gICAg
ICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2VsbCwgaW5mbygpKTsKLSAgICAgICAgQmFz
ZTo6dmlzaXRDaGlsZHJlbihjZWxsLCB2aXNpdG9yKTsKLSAgICAgICAgSW1wdXJlR2V0dGVyKiB0
aGlzT2JqZWN0ID0ganNDYXN0PEltcHVyZUdldHRlcio+KGNlbGwpOwotICAgICAgICB2aXNpdG9y
LmFwcGVuZCh0aGlzT2JqZWN0LT5tX2RlbGVnYXRlKTsKLSAgICB9CisgICAgREVDTEFSRV9WSVNJ
VF9DSElMRFJFTjsKIAogICAgIHZvaWQgc2V0RGVsZWdhdGUoVk0mIHZtLCBKU09iamVjdCogZGVs
ZWdhdGUpCiAgICAgewpAQCAtNDUyLDYgKzQ2MCwxOCBAQCBwcml2YXRlOgogICAgIFdyaXRlQmFy
cmllcjxKU09iamVjdD4gbV9kZWxlZ2F0ZTsKIH07CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0
b3I+Cit2b2lkIEltcHVyZUdldHRlcjo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBW
aXNpdG9yJiB2aXNpdG9yKQoreworICAgIERvbGxhclZNQXNzZXJ0U2NvcGUgYXNzZXJ0U2NvcGU7
CisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjZWxsLCBpbmZvKCkpOworICAgIEJhc2U6
OnZpc2l0Q2hpbGRyZW4oY2VsbCwgdmlzaXRvcik7CisgICAgSW1wdXJlR2V0dGVyKiB0aGlzT2Jq
ZWN0ID0ganNDYXN0PEltcHVyZUdldHRlcio+KGNlbGwpOworICAgIHZpc2l0b3IuYXBwZW5kKHRo
aXNPYmplY3QtPm1fZGVsZWdhdGUpOworfQorCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSW1wdXJl
R2V0dGVyKTsKKwogc3RhdGljIEpTQ19ERUNMQVJFX0NVU1RPTV9HRVRURVIoY3VzdG9tR2V0dGVy
VmFsdWVHZXR0ZXIpOwogc3RhdGljIEpTQ19ERUNMQVJFX0NVU1RPTV9HRVRURVIoY3VzdG9tR2V0
dGVyQWNlc3NvckdldHRlcik7CiAKQEAgLTM1NjMsMTMgKzM1ODMsMTYgQEAgdm9pZCBKU0RvbGxh
clZNOjphZGRDb25zdHJ1Y3RpYmxlRnVuY3RpbwogICAgIHB1dERpcmVjdCh2bSwgaWRlbnRpZmll
ciwgSlNGdW5jdGlvbjo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIGFyZ3VtZW50cywgaWRlbnRp
Zmllci5zdHJpbmcoKSwgZnVuY3Rpb24sIE5vSW50cmluc2ljLCBmdW5jdGlvbiksIGpzRG9sbGFy
Vk1Qcm9wZXJ0eUF0dHJpYnV0ZXMpOwogfQogCi12b2lkIEpTRG9sbGFyVk06OnZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1l
IFZpc2l0b3I+Cit2b2lkIEpTRG9sbGFyVk06OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2Vs
bCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU0RvbGxhclZNKiB0aGlzT2JqZWN0ID0ganND
YXN0PEpTRG9sbGFyVk0qPihjZWxsKTsKICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmpl
Y3QsIHZpc2l0b3IpOwogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fb2JqZWN0RG9p
bmdTaWRlRWZmZWN0UHV0V2l0aG91dENvcnJlY3RTbG90U3RhdHVzU3RydWN0dXJlKTsKIH0KIAor
REVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTRG9sbGFyVk0pOworCiB9IC8vIG5hbWVzcGFjZSBKU0MK
IAogSUdOT1JFX1dBUk5JTkdTX0VORApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xz
L0pTRG9sbGFyVk0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMv
SlNEb2xsYXJWTS5oCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
dG9vbHMvSlNEb2xsYXJWTS5oCSh3b3JraW5nIGNvcHkpCkBAIC03NCw3ICs3NCw3IEBAIHByaXZh
dGU6CiAgICAgdm9pZCBhZGRGdW5jdGlvbihWTSYsIEpTR2xvYmFsT2JqZWN0KiwgY29uc3QgY2hh
ciogbmFtZSwgTmF0aXZlRnVuY3Rpb24sIHVuc2lnbmVkIGFyZ3VtZW50cyk7CiAgICAgdm9pZCBh
ZGRDb25zdHJ1Y3RpYmxlRnVuY3Rpb24oVk0mLCBKU0dsb2JhbE9iamVjdCosIGNvbnN0IGNoYXIq
IG5hbWUsIE5hdGl2ZUZ1bmN0aW9uLCB1bnNpZ25lZCBhcmd1bWVudHMpOwogCi0gICAgc3RhdGlj
IHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVf
VklTSVRfQ0hJTERSRU47CiAKICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX29iamVjdERv
aW5nU2lkZUVmZmVjdFB1dFdpdGhvdXRDb3JyZWN0U2xvdFN0YXR1c1N0cnVjdHVyZTsKIH07Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtR2xvYmFsLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtR2xvYmFsLmNwcAkocmV2aXNpb24g
MjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUdsb2JhbC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEwMyw3ICsxMDMsOCBAQCB2b2lkIEdsb2JhbDo6c2V0KEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPCiAgICAgfQogfQogCi12b2lkIEdsb2JhbDo6dmlzaXRBZ2dyZWdhdGUo
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBH
bG9iYWw6OnZpc2l0QWdncmVnYXRlKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgc3dpdGNoICht
X3R5cGUpIHsKICAgICBjYXNlIFdhc206OlR5cGU6OkV4dGVybnJlZjoKQEAgLTExNyw2ICsxMTgs
OSBAQCB2b2lkIEdsb2JhbDo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImCiAgICAgfQogfQog
Cit0ZW1wbGF0ZSB2b2lkIEdsb2JhbDo6dmlzaXRBZ2dyZWdhdGUoQWJzdHJhY3RTbG90VmlzaXRv
ciYpOwordGVtcGxhdGUgdm9pZCBHbG9iYWw6OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJik7
CisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpHbG9iYWwKIAogI2VuZGlmIC8vIEVOQUJMRShXRUJB
U1NFTUJMWSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21HbG9iYWwuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtR2xvYmFsLmgJKHJl
dmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21HbG9iYWwu
aAkod29ya2luZyBjb3B5KQpAQCAtNTcsNyArNTcsNyBAQCBwdWJsaWM6CiAgICAgSlNWYWx1ZSBn
ZXQoSlNHbG9iYWxPYmplY3QqKSBjb25zdDsKICAgICB1aW50NjRfdCBnZXRQcmltaXRpdmUoKSBj
b25zdCB7IHJldHVybiBtX3ZhbHVlLm1fcHJpbWl0aXZlOyB9CiAgICAgdm9pZCBzZXQoSlNHbG9i
YWxPYmplY3QqLCBKU1ZhbHVlKTsKLSAgICB2b2lkIHZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9y
Jik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCB2aXNpdEFnZ3JlZ2F0ZShW
aXNpdG9yJik7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBUKiBvd25lcigpIGNvbnN0IHsg
cmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8VCo+KG1fb3duZXIpOyB9CiAgICAgdm9pZCBzZXRPd25l
cihKU09iamVjdCogb3duZXIpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
VGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21U
YWJsZS5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21UYWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2Niw3ICsxNjYsOCBAQCBKU1ZhbHVl
IFRhYmxlOjpnZXQodWludDMyX3QgaW5kZXgpIGNvbnN0CiAgICAgcmV0dXJuIG1fanNWYWx1ZXMu
Z2V0KClbaW5kZXggJiBtX21hc2tdLmdldCgpOwogfQogCi12b2lkIFRhYmxlOjp2aXNpdEFnZ3Jl
Z2F0ZShTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2
b2lkIFRhYmxlOjp2aXNpdEFnZ3JlZ2F0ZShWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFJFTEVB
U0VfQVNTRVJUKG1fb3duZXIpOwogICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9vd25lci0+
Y2VsbExvY2soKSk7CkBAIC0xNzQsNiArMTc1LDkgQEAgdm9pZCBUYWJsZTo6dmlzaXRBZ2dyZWdh
dGUoU2xvdFZpc2l0b3ImIAogICAgICAgICB2aXNpdG9yLmFwcGVuZChtX2pzVmFsdWVzLmdldCgp
W2ldKTsKIH0KIAordGVtcGxhdGUgdm9pZCBUYWJsZTo6dmlzaXRBZ2dyZWdhdGUoQWJzdHJhY3RT
bG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBUYWJsZTo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZp
c2l0b3ImKTsKKwogRnVuY1JlZlRhYmxlKiBUYWJsZTo6YXNGdW5jcmVmVGFibGUoKQogewogICAg
IHJldHVybiBtX3R5cGUgPT0gVGFibGVFbGVtZW50VHlwZTo6RnVuY3JlZiA/IHN0YXRpY19jYXN0
PEZ1bmNSZWZUYWJsZSo+KHRoaXMpIDogbnVsbHB0cjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21UYWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21UYWJsZS5oCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtVGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtNzksNyArNzksNyBAQCBw
dWJsaWM6CiAgICAgT3B0aW9uYWw8dWludDMyX3Q+IGdyb3codWludDMyX3QgZGVsdGEsIEpTVmFs
dWUgZGVmYXVsdFZhbHVlKTsKICAgICB2b2lkIGNvcHkoY29uc3QgVGFibGUqIHNyY1RhYmxlLCB1
aW50MzJfdCBkc3RJbmRleCwgdWludDMyX3Qgc3JjSW5kZXgpOwogCi0gICAgdm9pZCB2aXNpdEFn
Z3JlZ2F0ZShTbG90VmlzaXRvciYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZv
aWQgdmlzaXRBZ2dyZWdhdGUoVmlzaXRvciYpOwogCiBwcm90ZWN0ZWQ6CiAgICAgVGFibGUodWlu
dDMyX3QgaW5pdGlhbCwgT3B0aW9uYWw8dWludDMyX3Q+IG1heGltdW0sIFRhYmxlRWxlbWVudFR5
cGUgPSBUYWJsZUVsZW1lbnRUeXBlOjpFeHRlcm5yZWYpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvSlNUb1dhc21JQ0NhbGxlZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNUb1dhc21JQ0NhbGxlZS5jcHAJKHJldmlzaW9uIDI3
MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTVG9XYXNtSUNDYWxsZWUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OSw3ICs0OSw4IEBAIFN0cnVjdHVyZSogSlNUb1dhc21J
Q0NhbGxlZTo6Y3JlYXRlU3RydWMKICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGds
b2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhKU0NhbGxlZVR5cGUsIFN0cnVjdHVyZUZs
YWdzKSwgaW5mbygpKTsKIH0KIAotdm9pZCBKU1RvV2FzbUlDQ2FsbGVlOjp2aXNpdENoaWxkcmVu
KEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPgordm9pZCBKU1RvV2FzbUlDQ2FsbGVlOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwq
IGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNUb1dhc21JQ0NhbGxlZSogdGhpc09i
amVjdCA9IGpzQ2FzdDxKU1RvV2FzbUlDQ2FsbGVlKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09C
SkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNTgsNiArNTksOCBAQCB2b2lk
IEpTVG9XYXNtSUNDYWxsZWU6OnZpc2l0Q2hpbGRyZW4oSlNDCiAgICAgdmlzaXRvci5hcHBlbmQo
dGhpc09iamVjdC0+bV9mdW5jdGlvbik7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU1Rv
V2FzbUlDQ2FsbGVlKTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBFTkFCTEUo
V0VCQVNTRU1CTFkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1RvV2Fz
bUlDQ2FsbGVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
SlNUb1dhc21JQ0NhbGxlZS5oCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9KU1RvV2FzbUlDQ2FsbGVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTU2LDcg
KzU2LDcgQEAgcHJpdmF0ZToKICAgICBKU1RvV2FzbUlDQ2FsbGVlKFZNJiB2bSwgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiAgICAgICAgIDogQmFz
ZSh2bSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUpCiAgICAgeyB9Ci0gICAgc3RhdGljIHZvaWQg
dmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRf
Q0hJTERSRU47CiAKICAgICBXcml0ZUJhcnJpZXI8V2ViQXNzZW1ibHlGdW5jdGlvbj4gbV9mdW5j
dGlvbjsKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2Vt
Ymx5Q29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9jay5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTgyLDcgKzgyLDggQEAgdm9pZCBKU1dlYkFzc2VtYmx5Q29kZUJsb2Nr
OjpjbGVhckpTQ2FsbAogICAgICAgICAoKml0ZXIpLT51bmxpbmsodm0pOwogfQogCi12b2lkIEpT
V2ViQXNzZW1ibHlDb2RlQmxvY2s6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90Vmlz
aXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTV2ViQXNz
ZW1ibHlDb2RlQmxvY2s6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYg
dmlzaXRvcikKIHsKICAgICBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKiB0aGlzT2JqZWN0ID0ganND
YXN0PEpTV2ViQXNzZW1ibHlDb2RlQmxvY2sqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNU
X0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC05MCw2ICs5MSw4IEBAIHZvaWQgSlNX
ZWJBc3NlbWJseUNvZGVCbG9jazo6dmlzaXRDaGlsZHIKICAgICBCYXNlOjp2aXNpdENoaWxkcmVu
KHRoaXNPYmplY3QsIHZpc2l0b3IpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNXZWJB
c3NlbWJseUNvZGVCbG9jayk7CisKIHZvaWQgSlNXZWJBc3NlbWJseUNvZGVCbG9jazo6ZmluYWxp
emVVbmNvbmRpdGlvbmFsbHkoVk0mIHZtKQogewogICAgIGZvciAoYXV0byBpdGVyID0gbV9jYWxs
TGlua0luZm9zLmJlZ2luKCk7ICEhaXRlcjsgKytpdGVyKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suaAkocmV2
aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3Nl
bWJseUNvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC04Niw3ICs4Niw3IEBAIHByaXZhdGU6
CiAgICAgREVDTEFSRV9FWFBPUlRfSU5GTzsKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVl
ZHNEZXN0cnVjdGlvbiA9IHRydWU7CiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsK
LSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7Cisg
ICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIFJlZjxXYXNtOjpDb2RlQmxvY2s+IG1f
Y29kZUJsb2NrOwogICAgIFZlY3RvcjxNYWNyb0Fzc2VtYmxlckNvZGVSZWY8V2FzbUVudHJ5UHRy
VGFnPj4gbV93YXNtVG9KU0V4aXRTdHViczsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL2pzL0pTV2ViQXNzZW1ibHlHbG9iYWwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlHbG9iYWwuY3BwCShyZXZpc2lvbiAyNzE0
NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5R2xvYmFs
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzEsNyArNzEsOCBAQCB2b2lkIEpTV2ViQXNzZW1ibHlH
bG9iYWw6OmRlc3Ryb3koSlNDZWxsCiAgICAgc3RhdGljX2Nhc3Q8SlNXZWJBc3NlbWJseUdsb2Jh
bCo+KGNlbGwpLT5KU1dlYkFzc2VtYmx5R2xvYmFsOjp+SlNXZWJBc3NlbWJseUdsb2JhbCgpOwog
fQogCi12b2lkIEpTV2ViQXNzZW1ibHlHbG9iYWw6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxs
LCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lk
IEpTV2ViQXNzZW1ibHlHbG9iYWw6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlz
aXRvciYgdmlzaXRvcikKIHsKICAgICBKU1dlYkFzc2VtYmx5R2xvYmFsKiB0aGlzT2JqZWN0ID0g
anNDYXN0PEpTV2ViQXNzZW1ibHlHbG9iYWwqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNU
X0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC04MCw2ICs4MSw4IEBAIHZvaWQgSlNX
ZWJBc3NlbWJseUdsb2JhbDo6dmlzaXRDaGlsZHJlbigKICAgICB0aGlzT2JqZWN0LT5nbG9iYWwo
KS0+dmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihK
U1dlYkFzc2VtYmx5R2xvYmFsKTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBF
TkFCTEUoV0VCQVNTRU1CTFkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9K
U1dlYkFzc2VtYmx5R2xvYmFsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvSlNXZWJBc3NlbWJseUdsb2JhbC5oCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5R2xvYmFsLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTU5LDcgKzU5LDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBKU1dlYkFzc2Vt
Ymx5R2xvYmFsKFZNJiwgU3RydWN0dXJlKiwgUmVmPFdhc206Okdsb2JhbD4mJik7CiAgICAgdm9p
ZCBmaW5pc2hDcmVhdGlvbihWTSYpOwotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlND
ZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAg
UmVmPFdhc206Okdsb2JhbD4gbV9nbG9iYWw7CiB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuY3BwCShyZXZp
c2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2Vt
Ymx5SW5zdGFuY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Myw3ICs3Myw4IEBAIHZvaWQgSlNX
ZWJBc3NlbWJseUluc3RhbmNlOjpkZXN0cm95KEpTQ2UKICAgICBzdGF0aWNfY2FzdDxKU1dlYkFz
c2VtYmx5SW5zdGFuY2UqPihjZWxsKS0+SlNXZWJBc3NlbWJseUluc3RhbmNlOjp+SlNXZWJBc3Nl
bWJseUluc3RhbmNlKCk7CiB9CiAKLXZvaWQgSlNXZWJBc3NlbWJseUluc3RhbmNlOjp2aXNpdENo
aWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBl
bmFtZSBWaXNpdG9yPgordm9pZCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OnZpc2l0Q2hpbGRyZW5J
bXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBhdXRvKiB0aGlzT2Jq
ZWN0ID0ganNDYXN0PEpTV2ViQXNzZW1ibHlJbnN0YW5jZSo+KGNlbGwpOwogICAgIEFTU0VSVF9H
Q19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTEwMiw2ICsxMDMsOCBA
QCB2b2lkIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6dmlzaXRDaGlsZHJlCiAgICAgICAgIHZpc2l0
b3IuYXBwZW5kVW5iYXJyaWVyZWQod3JhcHBlci5nZXQoKSk7CiB9CiAKK0RFRklORV9WSVNJVF9D
SElMRFJFTihKU1dlYkFzc2VtYmx5SW5zdGFuY2UpOworCiB2b2lkIEpTV2ViQXNzZW1ibHlJbnN0
YW5jZTo6ZmluYWxpemVDcmVhdGlvbihWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIFJlZjxXYXNtOjpDb2RlQmxvY2s+JiYgd2FzbUNvZGVCbG9jaywgSlNPYmplY3QqIGltcG9y
dE9iamVjdCwgV2FzbTo6Q3JlYXRpb25Nb2RlIGNyZWF0aW9uTW9kZSkKIHsKICAgICBtX2luc3Rh
bmNlLT5maW5hbGl6ZUNyZWF0aW9uKHRoaXMsIHdhc21Db2RlQmxvY2suY29weVJlZigpKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1i
bHlJbnN0YW5jZS5oCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMTA1LDcg
KzEwNSw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgSlNXZWJBc3NlbWJseUluc3RhbmNlKFZN
JiwgU3RydWN0dXJlKiwgUmVmPFdhc206Okluc3RhbmNlPiYmKTsKICAgICB2b2lkIGZpbmlzaENy
ZWF0aW9uKFZNJiwgSlNXZWJBc3NlbWJseU1vZHVsZSosIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3Jk
Kik7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYp
OworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBSZWY8V2FzbTo6SW5zdGFuY2U+
IG1faW5zdGFuY2U7CiAgICAgVk0qIG1fdm07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9qcy9KU1dlYkFzc2VtYmx5TWVtb3J5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TWVtb3J5LmNwcAkocmV2aXNpb24gMjcx
NDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1lbW9y
eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1OSw3ICsxNTksOCBAQCB2b2lkIEpTV2ViQXNzZW1i
bHlNZW1vcnk6OmRlc3Ryb3koSlNDZWxsCiAgICAgbWVtb3J5LT5KU1dlYkFzc2VtYmx5TWVtb3J5
Ojp+SlNXZWJBc3NlbWJseU1lbW9yeSgpOwogfQogCi12b2lkIEpTV2ViQXNzZW1ibHlNZW1vcnk6
OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBs
YXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTV2ViQXNzZW1ibHlNZW1vcnk6OnZpc2l0Q2hp
bGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBhdXRvKiB0
aGlzT2JqZWN0ID0ganNDYXN0PEpTV2ViQXNzZW1ibHlNZW1vcnkqPihjZWxsKTsKICAgICBBU1NF
UlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC0xNjksNiArMTcw
LDggQEAgdm9pZCBKU1dlYkFzc2VtYmx5TWVtb3J5Ojp2aXNpdENoaWxkcmVuKAogICAgIHZpc2l0
b3IucmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKHRoaXNPYmplY3QtPm1lbW9yeSgpLnNpemUoKSk7
CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU1dlYkFzc2VtYmx5TWVtb3J5KTsKKwogfSAv
LyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TWVtb3J5LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1lbW9y
eS5oCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9K
U1dlYkFzc2VtYmx5TWVtb3J5LmgJKHdvcmtpbmcgY29weSkKQEAgLTYzLDcgKzYzLDcgQEAgcHVi
bGljOgogcHJpdmF0ZToKICAgICBKU1dlYkFzc2VtYmx5TWVtb3J5KFZNJiwgU3RydWN0dXJlKik7
CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOwotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hp
bGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVO
OwogCiAgICAgUmVmPFdhc206Ok1lbW9yeT4gbV9tZW1vcnk7CiAgICAgV3JpdGVCYXJyaWVyPEpT
QXJyYXlCdWZmZXI+IG1fYnVmZmVyV3JhcHBlcjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuY3BwCShyZXZpc2lvbiAy
NzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9k
dWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI0LDcgKzEyNCw4IEBAIHZvaWQgSlNXZWJBc3Nl
bWJseU1vZHVsZTo6c2V0Q29kZUJsb2NrKFYKICAgICBtX2NvZGVCbG9ja3Nbc3RhdGljX2Nhc3Q8
c2l6ZV90Pihtb2RlKV0uc2V0KHZtLCB0aGlzLCBjb2RlQmxvY2spOwogfQogCi12b2lkIEpTV2Vi
QXNzZW1ibHlNb2R1bGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYg
dmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTV2ViQXNzZW1ibHlN
b2R1bGU6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikK
IHsKICAgICBKU1dlYkFzc2VtYmx5TW9kdWxlKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTV2ViQXNz
ZW1ibHlNb2R1bGUqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNP
YmplY3QsIGluZm8oKSk7CkBAIC0xMzUsNiArMTM2LDggQEAgdm9pZCBKU1dlYkFzc2VtYmx5TW9k
dWxlOjp2aXNpdENoaWxkcmVuKAogICAgICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5t
X2NvZGVCbG9ja3NbaV0pOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNXZWJBc3NlbWJs
eU1vZHVsZSk7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQkFT
U0VNQkxZKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJs
eU1vZHVsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pT
V2ViQXNzZW1ibHlNb2R1bGUuaAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC04
MCw3ICs4MCw3IEBAIHByaXZhdGU6CiAKICAgICBKU1dlYkFzc2VtYmx5TW9kdWxlKFZNJiwgU3Ry
dWN0dXJlKiwgUmVmPFdhc206Ok1vZHVsZT4mJik7CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihW
TSYpOwotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3Im
KTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgUmVmPFdhc206Ok1vZHVsZT4g
bV9tb2R1bGU7CiAgICAgV3JpdGVCYXJyaWVyPFN5bWJvbFRhYmxlPiBtX2V4cG9ydFN5bWJvbFRh
YmxlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseVRh
YmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dl
YkFzc2VtYmx5VGFibGUuY3BwCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5VGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03
Miw3ICs3Miw4IEBAIHZvaWQgSlNXZWJBc3NlbWJseVRhYmxlOjpkZXN0cm95KEpTQ2VsbCoKICAg
ICBzdGF0aWNfY2FzdDxKU1dlYkFzc2VtYmx5VGFibGUqPihjZWxsKS0+SlNXZWJBc3NlbWJseVRh
YmxlOjp+SlNXZWJBc3NlbWJseVRhYmxlKCk7CiB9CiAKLXZvaWQgSlNXZWJBc3NlbWJseVRhYmxl
Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1w
bGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1dlYkFzc2VtYmx5VGFibGU6OnZpc2l0Q2hp
bGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU1dlYkFz
c2VtYmx5VGFibGUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNXZWJBc3NlbWJseVRhYmxlKj4oY2Vs
bCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpA
QCAtODEsNiArODIsOCBAQCB2b2lkIEpTV2ViQXNzZW1ibHlUYWJsZTo6dmlzaXRDaGlsZHJlbihK
CiAgICAgdGhpc09iamVjdC0+dGFibGUoKS0+dmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7CiB9CiAK
K0RFRklORV9WSVNJVF9DSElMRFJFTihKU1dlYkFzc2VtYmx5VGFibGUpOworCiBib29sIEpTV2Vi
QXNzZW1ibHlUYWJsZTo6Z3Jvdyh1aW50MzJfdCBkZWx0YSwgSlNWYWx1ZSBkZWZhdWx0VmFsdWUp
CiB7CiAgICAgaWYgKGRlbHRhID09IDApCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9KU1dlYkFzc2VtYmx5VGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5VGFibGUuaAkocmV2aXNpb24gMjcxNDQzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseVRhYmxlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTcwLDggKzcwLDggQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBKU1dlYkFz
c2VtYmx5VGFibGUoVk0mLCBTdHJ1Y3R1cmUqLCBSZWY8V2FzbTo6VGFibGU+JiYpOwogICAgIHZv
aWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpT
Q2VsbCosIFNsb3RWaXNpdG9yJik7Ci0KKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOworLy8K
ICAgICBSZWY8V2FzbTo6VGFibGU+IG1fdGFibGU7CiB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmNwcAkocmV2
aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1i
bHlGdW5jdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1Miw3ICs0NTIsOCBAQCBXZWJBc3Nl
bWJseUZ1bmN0aW9uOjpXZWJBc3NlbWJseUZ1bmN0aW9uCiAgICAgLCBtX2ltcG9ydGFibGVGdW5j
dGlvbiB7IHNpZ25hdHVyZUluZGV4LCB3YXNtVG9XYXNtRW50cnlwb2ludExvYWRMb2NhdGlvbiB9
CiB7IH0KIAotdm9pZCBXZWJBc3NlbWJseUZ1bmN0aW9uOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCog
Y2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgor
dm9pZCBXZWJBc3NlbWJseUZ1bmN0aW9uOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGws
IFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgV2ViQXNzZW1ibHlGdW5jdGlvbiogdGhpc09iamVj
dCA9IGpzQ2FzdDxXZWJBc3NlbWJseUZ1bmN0aW9uKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09C
SkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNDYxLDYgKzQ2Miw4IEBAIHZv
aWQgV2ViQXNzZW1ibHlGdW5jdGlvbjo6dmlzaXRDaGlsZHJlbigKICAgICB2aXNpdG9yLmFwcGVu
ZCh0aGlzT2JqZWN0LT5tX2pzVG9XYXNtSUNDYWxsZWUpOwogfQogCitERUZJTkVfVklTSVRfQ0hJ
TERSRU4oV2ViQXNzZW1ibHlGdW5jdGlvbik7CisKIHZvaWQgV2ViQXNzZW1ibHlGdW5jdGlvbjo6
ZGVzdHJveShKU0NlbGwqIGNlbGwpCiB7CiAgICAgc3RhdGljX2Nhc3Q8V2ViQXNzZW1ibHlGdW5j
dGlvbio+KGNlbGwpLT5XZWJBc3NlbWJseUZ1bmN0aW9uOjp+V2ViQXNzZW1ibHlGdW5jdGlvbigp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlv
bi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2Vt
Ymx5RnVuY3Rpb24uaAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC05MCw3ICs5
MCw3IEBAIHB1YmxpYzoKICAgICBXYXNtOjpJbnN0YW5jZSogcHJldmlvdXNJbnN0YW5jZShDYWxs
RnJhbWUqKTsKIAogcHJpdmF0ZToKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2Vs
bCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKICAgICBXZWJB
c3NlbWJseUZ1bmN0aW9uKFZNJiwgTmF0aXZlRXhlY3V0YWJsZSosIEpTR2xvYmFsT2JqZWN0Kiwg
U3RydWN0dXJlKiwgV2FzbTo6Q2FsbGVlJiBqc0VudHJ5cG9pbnQsIFdhc21Ub1dhc21JbXBvcnRh
YmxlRnVuY3Rpb246OkxvYWRMb2NhdGlvbiBlbnRyeXBvaW50TG9hZExvY2F0aW9uLCBXYXNtOjpT
aWduYXR1cmVJbmRleCk7CiAKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRh
Zz4ganNDYWxsRW50cnlwb2ludFNsb3coKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb25CYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uQmFzZS5jcHAJKHJldmlz
aW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5
RnVuY3Rpb25CYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEsNyArNDEsOCBAQCBXZWJBc3Nl
bWJseUZ1bmN0aW9uQmFzZTo6V2ViQXNzZW1ibHlGdW5jCiAgICAgOiBCYXNlKHZtLCBleGVjdXRh
YmxlLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSkKIHsgfQogCi12b2lkIFdlYkFzc2VtYmx5RnVu
Y3Rpb25CYXNlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0
b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBXZWJBc3NlbWJseUZ1bmN0aW9u
QmFzZTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQog
ewogICAgIFdlYkFzc2VtYmx5RnVuY3Rpb25CYXNlKiB0aGlzT2JqZWN0ID0ganNDYXN0PFdlYkFz
c2VtYmx5RnVuY3Rpb25CYXNlKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklU
Uyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNDksNiArNTAsOCBAQCB2b2lkIFdlYkFzc2VtYmx5
RnVuY3Rpb25CYXNlOjp2aXNpdENoaWxkCiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+
bV9pbnN0YW5jZSk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihXZWJBc3NlbWJseUZ1bmN0
aW9uQmFzZSk7CisKIHZvaWQgV2ViQXNzZW1ibHlGdW5jdGlvbkJhc2U6OmZpbmlzaENyZWF0aW9u
KFZNJiB2bSwgTmF0aXZlRXhlY3V0YWJsZSogZXhlY3V0YWJsZSwgdW5zaWduZWQgbGVuZ3RoLCBj
b25zdCBTdHJpbmcmIG5hbWUsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogaW5zdGFuY2UpCiB7CiAg
ICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0sIGV4ZWN1dGFibGUsIGxlbmd0aCwgbmFtZSk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uQmFz
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2Vt
Ymx5RnVuY3Rpb25CYXNlLmgJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb25CYXNlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTQ2LDcgKzQ2LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZJbnN0
YW5jZSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihXZWJBc3NlbWJseUZ1bmN0aW9uQmFzZSwg
bV9pbnN0YW5jZSk7IH0KIAogcHJvdGVjdGVkOgotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwog
ICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBOYXRpdmVFeGVjdXRhYmxlKiwgdW5zaWduZWQg
bGVuZ3RoLCBjb25zdCBTdHJpbmcmIG5hbWUsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSopOwogICAg
IFdlYkFzc2VtYmx5RnVuY3Rpb25CYXNlKFZNJiwgTmF0aXZlRXhlY3V0YWJsZSosIEpTR2xvYmFs
T2JqZWN0KiwgU3RydWN0dXJlKik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZVJlY29yZC5jcHAJKHJldmlzaW9u
IDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9k
dWxlUmVjb3JkLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzcsNyArNzcsOCBAQCB2b2lkIFdlYkFz
c2VtYmx5TW9kdWxlUmVjb3JkOjpmaW5pc2hDcmVhCiAgICAgfQogfQogCi12b2lkIFdlYkFzc2Vt
Ymx5TW9kdWxlUmVjb3JkOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3Im
IHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBXZWJBc3NlbWJseU1v
ZHVsZVJlY29yZDo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNp
dG9yKQogewogICAgIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkKiB0aGlzT2JqZWN0ID0ganNDYXN0
PFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9J
TkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtODcsNiArODgsOCBAQCB2b2lkIFdlYkFz
c2VtYmx5TW9kdWxlUmVjb3JkOjp2aXNpdENoaWxkCiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09i
amVjdC0+bV9leHBvcnRzT2JqZWN0KTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKFdlYkFz
c2VtYmx5TW9kdWxlUmVjb3JkKTsKKwogdm9pZCBXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6cHJl
cGFyZUxpbmsoVk0mIHZtLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGluc3RhbmNlKQogewogICAg
IFJFTEVBU0VfQVNTRVJUKCFtX2luc3RhbmNlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuaAkocmV2aXNp
b24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlN
b2R1bGVSZWNvcmQuaAkod29ya2luZyBjb3B5KQpAQCAtNjksNyArNjksNyBAQCBwcml2YXRlOgog
CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0dsb2JhbE9iamVjdCosIFZNJiwgY29uc3QgV2Fz
bTo6TW9kdWxlSW5mb3JtYXRpb24mKTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4o
SlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAg
ICAgV3JpdGVCYXJyaWVyPEpTV2ViQXNzZW1ibHlJbnN0YW5jZT4gbV9pbnN0YW5jZTsKICAgICBX
cml0ZUJhcnJpZXI8SlNPYmplY3Q+IG1fc3RhcnRGdW5jdGlvbjsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVdyYXBwZXJG
dW5jdGlvbi5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL2pzL1dlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NjcsNyArNjcsOCBAQCBTdHJ1Y3R1cmUqIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uOjpjCiAg
ICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwg
VHlwZUluZm8oSlNGdW5jdGlvblR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKIH0KIAot
dm9pZCBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNl
bGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3Zv
aWQgV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb246OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCog
Y2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlv
biogdGhpc09iamVjdCA9IGpzQ2FzdDxXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbio+KGNlbGwp
OwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAg
LTc2LDYgKzc3LDggQEAgdm9pZCBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbjo6dmlzaXRDaAog
ICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fZnVuY3Rpb24pOwogfQogCitERUZJTkVf
VklTSVRfQ0hJTERSRU4oV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24pOworCiBKU0NfREVGSU5F
X0hPU1RfRlVOQ1RJT04oY2FsbFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLCAoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpKQogewogICAgIFZNJiB2
bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL1dlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uaAkocmV2aXNp
b24gMjcxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlX
cmFwcGVyRnVuY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtNTksNyArNTksNyBAQCBwdWJsaWM6
CiBwcml2YXRlOgogICAgIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uKFZNJiwgTmF0aXZlRXhl
Y3V0YWJsZSosIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKiwgV2FzbVRvV2FzbUltcG9ydGFi
bGVGdW5jdGlvbik7CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIE5hdGl2ZUV4ZWN1dGFi
bGUqLCB1bnNpZ25lZCBsZW5ndGgsIGNvbnN0IFN0cmluZyYgbmFtZSwgSlNPYmplY3QqLCBKU1dl
YkFzc2VtYmx5SW5zdGFuY2UqKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2Vs
bCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIFdy
aXRlQmFycmllcjxKU09iamVjdD4gbV9mdW5jdGlvbjsKICAgICAvLyBJdCdzIHNhZmUgdG8ganVz
dCBob2xkIHRoZSByYXcgV2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbiBiZWNhdXNlIHdlIGhh
dmUgYSByZWZlcmVuY2UKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
Qk9iamVjdFN0b3JlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNzI4LDcgKzcyOCw5IEBAIHZvaWQgSURCT2JqZWN0U3RvcmU6OnJvbGxiYWNrRm9yVmVy
c2lvbkMKICAgICB9CiB9CiAKLXZvaWQgSURCT2JqZWN0U3RvcmU6OnZpc2l0UmVmZXJlbmNlZElu
ZGV4ZXMoU2xvdFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0CisvL3ZvaWQgSURCT2JqZWN0U3RvcmU6
OnZpc2l0UmVmZXJlbmNlZEluZGV4ZXMoU2xvdFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0Cit0ZW1w
bGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBJREJPYmplY3RTdG9yZTo6dmlzaXRSZWZlcmVu
Y2VkSW5kZXhlcyhWaXNpdG9yJiB2aXNpdG9yKSBjb25zdAogewogICAgIExvY2tlcjxMb2NrPiBs
b2NrZXIobV9yZWZlcmVuY2VkSW5kZXhMb2NrKTsKICAgICBmb3IgKGF1dG8mIGluZGV4IDogbV9y
ZWZlcmVuY2VkSW5kZXhlcy52YWx1ZXMoKSkKQEAgLTczNyw2ICs3MzksOSBAQCB2b2lkIElEQk9i
amVjdFN0b3JlOjp2aXNpdFJlZmVyZW5jZWRJbmRlCiAgICAgICAgIHZpc2l0b3IuYWRkT3BhcXVl
Um9vdChpbmRleC5nZXQoKSk7CiB9CiAKK3RlbXBsYXRlIHZvaWQgSURCT2JqZWN0U3RvcmU6OnZp
c2l0UmVmZXJlbmNlZEluZGV4ZXMoQWJzdHJhY3RTbG90VmlzaXRvciYpIGNvbnN0OwordGVtcGxh
dGUgdm9pZCBJREJPYmplY3RTdG9yZTo6dmlzaXRSZWZlcmVuY2VkSW5kZXhlcyhTbG90VmlzaXRv
ciYpIGNvbnN0OworCiB2b2lkIElEQk9iamVjdFN0b3JlOjpyZW5hbWVSZWZlcmVuY2VkSW5kZXgo
SURCSW5kZXgmIGluZGV4LCBjb25zdCBTdHJpbmcmIG5ld05hbWUpCiB7CiAgICAgTE9HKEluZGV4
ZWREQiwgIklEQk9iamVjdFN0b3JlOjpyZW5hbWVSZWZlcmVuY2VkSW5kZXgiKTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuaAko
cmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
T2JqZWN0U3RvcmUuaAkod29ya2luZyBjb3B5KQpAQCAtMTA5LDcgKzEwOSw4IEBAIHB1YmxpYzoK
ICAgICB2b2lkIHJlZigpOwogICAgIHZvaWQgZGVyZWYoKTsKIAotICAgIHZvaWQgdmlzaXRSZWZl
cmVuY2VkSW5kZXhlcyhKU0M6OlNsb3RWaXNpdG9yJikgY29uc3Q7CisvLyAgICB2b2lkIHZpc2l0
UmVmZXJlbmNlZEluZGV4ZXMoSlNDOjpTbG90VmlzaXRvciYpIGNvbnN0OworICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgdmlzaXRSZWZlcmVuY2VkSW5kZXhlcyhWaXNpdG9yJikg
Y29uc3Q7CiAgICAgdm9pZCByZW5hbWVSZWZlcmVuY2VkSW5kZXgoSURCSW5kZXgmLCBjb25zdCBT
dHJpbmcmIG5ld05hbWUpOwogCiBwcml2YXRlOgpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmNwcAkocmV2aXNpb24gMjcxNDQz
KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb24uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xNDU1LDcgKzE0NTUsOCBAQCB2b2lkIElEQlRyYW5zYWN0aW9u
Ojpjb25uZWN0aW9uQ2xvc2VkRnJvCiAgICAgZmlyZU9uQWJvcnQoKTsKIH0KIAotdm9pZCBJREJU
cmFuc2FjdGlvbjo6dmlzaXRSZWZlcmVuY2VkT2JqZWN0U3RvcmVzKEpTQzo6U2xvdFZpc2l0b3Im
IHZpc2l0b3IpIGNvbnN0Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBJREJUcmFu
c2FjdGlvbjo6dmlzaXRSZWZlcmVuY2VkT2JqZWN0U3RvcmVzKFZpc2l0b3ImIHZpc2l0b3IpIGNv
bnN0CiB7CiAgICAgTG9ja2VyPExvY2s+IGxvY2tlcihtX3JlZmVyZW5jZWRPYmplY3RTdG9yZUxv
Y2spOwogICAgIGZvciAoYXV0byYgb2JqZWN0U3RvcmUgOiBtX3JlZmVyZW5jZWRPYmplY3RTdG9y
ZXMudmFsdWVzKCkpCkBAIC0xNDY0LDYgKzE0NjUsOSBAQCB2b2lkIElEQlRyYW5zYWN0aW9uOjp2
aXNpdFJlZmVyZW5jZWRPYmplCiAgICAgICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChvYmplY3RT
dG9yZS5nZXQoKSk7CiB9CiAKK3RlbXBsYXRlIHZvaWQgSURCVHJhbnNhY3Rpb246OnZpc2l0UmVm
ZXJlbmNlZE9iamVjdFN0b3JlcyhKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpIGNv
bnN0OwordGVtcGxhdGUgdm9pZCBJREJUcmFuc2FjdGlvbjo6dmlzaXRSZWZlcmVuY2VkT2JqZWN0
U3RvcmVzKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0OworCiB2b2lkIElEQlRyYW5z
YWN0aW9uOjpoYW5kbGVQZW5kaW5nT3BlcmF0aW9ucygpCiB7CiAgICAgQVNTRVJUKGNhbkN1cnJl
bnRUaHJlYWRBY2Nlc3NUaHJlYWRMb2NhbERhdGEobV9kYXRhYmFzZS0+b3JpZ2luVGhyZWFkKCkp
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9u
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJh
bnNhY3Rpb24uaAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCVHJhbnNhY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMTQ5LDcgKzE0OSw4
IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgY29ubmVjdGlvbkNsb3NlZEZyb21TZXJ2ZXIoY29uc3Qg
SURCRXJyb3ImKTsKIAotICAgIHZvaWQgdmlzaXRSZWZlcmVuY2VkT2JqZWN0U3RvcmVzKEpTQzo6
U2xvdFZpc2l0b3ImKSBjb25zdDsKKy8vICAgIHZvaWQgdmlzaXRSZWZlcmVuY2VkT2JqZWN0U3Rv
cmVzKEpTQzo6U2xvdFZpc2l0b3ImKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNp
dG9yPiB2b2lkIHZpc2l0UmVmZXJlbmNlZE9iamVjdFN0b3JlcyhWaXNpdG9yJikgY29uc3Q7CiAK
ICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgc3RkOjphdG9taWM8dW5zaWduZWQ+IG51bWJlck9m
SURCVHJhbnNhY3Rpb25zOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlv
L0F1ZGlvQnVmZmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmF1ZGlvL0F1ZGlvQnVmZmVyLmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0J1ZmZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1
NCwxMiArMTU0LDE3IEBAIEV4Y2VwdGlvbk9yPEpTQzo6SlNWYWx1ZT4gQXVkaW9CdWZmZXI6OmcK
ICAgICByZXR1cm4gY29uc3RydWN0SlNBcnJheSgpOwogfQogCi12b2lkIEF1ZGlvQnVmZmVyOjp2
aXNpdENoYW5uZWxXcmFwcGVycyhKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy92b2lkIEF1
ZGlvQnVmZmVyOjp2aXNpdENoYW5uZWxXcmFwcGVycyhKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9y
KQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgQXVkaW9CdWZmZXI6OnZpc2l0Q2hh
bm5lbFdyYXBwZXJzKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgZm9yIChhdXRvJiBjaGFubmVs
V3JhcHBlciA6IG1fY2hhbm5lbFdyYXBwZXJzKQogICAgICAgICBjaGFubmVsV3JhcHBlci52aXNp
dCh2aXNpdG9yKTsKIH0KIAordGVtcGxhdGUgdm9pZCBBdWRpb0J1ZmZlcjo6dmlzaXRDaGFubmVs
V3JhcHBlcnMoSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEF1ZGlv
QnVmZmVyOjp2aXNpdENoYW5uZWxXcmFwcGVycyhKU0M6OlNsb3RWaXNpdG9yJik7CisKIFJlZlB0
cjxGbG9hdDMyQXJyYXk+IEF1ZGlvQnVmZmVyOjpjaGFubmVsRGF0YSh1bnNpZ25lZCBjaGFubmVs
SW5kZXgpCiB7CiAgICAgaWYgKGNoYW5uZWxJbmRleCA+PSBtX2NoYW5uZWxzLnNpemUoKSkKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9CdWZmZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQnVmZmVyLmgJKHJl
dmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9C
dWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNzUsNyArNzUsOCBAQCBwdWJsaWM6CiAKICAgICBz
aXplX3QgbWVtb3J5Q29zdCgpIGNvbnN0OwogCi0gICAgdm9pZCB2aXNpdENoYW5uZWxXcmFwcGVy
cyhKU0M6OlNsb3RWaXNpdG9yJik7CisvLyAgICB2b2lkIHZpc2l0Q2hhbm5lbFdyYXBwZXJzKEpT
Qzo6U2xvdFZpc2l0b3ImKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIHZp
c2l0Q2hhbm5lbFdyYXBwZXJzKFZpc2l0b3ImKTsKICAgICAKIHByaXZhdGU6CiAgICAgQXVkaW9C
dWZmZXIodW5zaWduZWQgbnVtYmVyT2ZDaGFubmVscywgc2l6ZV90IGxlbmd0aCwgZmxvYXQgc2Ft
cGxlUmF0ZSwgTGVnYWN5UHJldmVudERldGFjaGluZyA9IExlZ2FjeVByZXZlbnREZXRhY2hpbmc6
Ok5vKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0RPTUdDT3V0cHV0Q29uc3Ry
YWludC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvRE9NR0NP
dXRwdXRDb25zdHJhaW50LmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvRE9NR0NPdXRwdXRDb25zdHJhaW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDksNyArNDksNyBAQCBET01HQ091dHB1dENvbnN0cmFpbnQ6On5ET01HQ091dHB1dENvbnN0CiB7
CiB9CiAKLXZvaWQgRE9NR0NPdXRwdXRDb25zdHJhaW50OjpleGVjdXRlSW1wbChTbG90VmlzaXRv
ciYgdmlzaXRvcikKK3ZvaWQgRE9NR0NPdXRwdXRDb25zdHJhaW50OjpleGVjdXRlSW1wbChBYnN0
cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEhlYXAmIGhlYXAgPSBtX3ZtLmhlYXA7
CiAgICAgCkBAIC02MCw4ICs2MCw4IEBAIHZvaWQgRE9NR0NPdXRwdXRDb25zdHJhaW50OjpleGVj
dXRlSW1wbCgKICAgICAKICAgICBtX2NsaWVudERhdGEuZm9yRWFjaE91dHB1dENvbnN0cmFpbnRT
cGFjZSgKICAgICAgICAgWyZdIChTdWJzcGFjZSYgc3Vic3BhY2UpIHsKLSAgICAgICAgICAgIGF1
dG8gZnVuYyA9IFtdIChTbG90VmlzaXRvciYgdmlzaXRvciwgSGVhcENlbGwqIGhlYXBDZWxsLCBI
ZWFwQ2VsbDo6S2luZCkgewotICAgICAgICAgICAgICAgIFNldFJvb3RNYXJrUmVhc29uU2NvcGUg
cm9vdFNjb3BlKHZpc2l0b3IsIFNsb3RWaXNpdG9yOjpSb290TWFya1JlYXNvbjo6RE9NR0NPdXRw
dXQpOworICAgICAgICAgICAgYXV0byBmdW5jID0gW10gKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZp
c2l0b3IsIEhlYXBDZWxsKiBoZWFwQ2VsbCwgSGVhcENlbGw6OktpbmQpIHsKKyAgICAgICAgICAg
ICAgICBTZXRSb290TWFya1JlYXNvblNjb3BlIHJvb3RTY29wZSh2aXNpdG9yLCBBYnN0cmFjdFNs
b3RWaXNpdG9yOjpSb290TWFya1JlYXNvbjo6RE9NR0NPdXRwdXQpOwogICAgICAgICAgICAgICAg
IEpTQ2VsbCogY2VsbCA9IHN0YXRpY19jYXN0PEpTQ2VsbCo+KGhlYXBDZWxsKTsKICAgICAgICAg
ICAgICAgICBjZWxsLT5tZXRob2RUYWJsZSh2aXNpdG9yLnZtKCkpLT52aXNpdE91dHB1dENvbnN0
cmFpbnRzKGNlbGwsIHZpc2l0b3IpOwogICAgICAgICAgICAgfTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0RPTUdDT3V0cHV0Q29uc3RyYWludC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0RPTUdDT3V0cHV0Q29uc3RyYWludC5oCShyZXZpc2lv
biAyNzE0NDMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9ET01HQ091dHB1dENvbnN0
cmFpbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNDIsNyArNDIsNyBAQCBwdWJsaWM6CiAgICAgfkRP
TUdDT3V0cHV0Q29uc3RyYWludCgpOwogICAgIAogcHJvdGVjdGVkOgotICAgIHZvaWQgZXhlY3V0
ZUltcGwoSlNDOjpTbG90VmlzaXRvciYpIG92ZXJyaWRlOworICAgIHZvaWQgZXhlY3V0ZUltcGwo
SlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJikgb3ZlcnJpZGU7CiAKIHByaXZhdGU6CiAgICAgSlND
OjpWTSYgbV92bTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQWJvcnRDb250
cm9sbGVyQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0Fib3J0Q29udHJvbGxlckN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQWJvcnRDb250cm9sbGVyQ3VzdG9tLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjgsOSArMjgsMTQgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lk
IEpTQWJvcnRDb250cm9sbGVyOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNp
dG9yJiB2aXNpdG9yKQorLy92b2lkIEpTQWJvcnRDb250cm9sbGVyOjp2aXNpdEFkZGl0aW9uYWxD
aGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlz
aXRvcj4KK3ZvaWQgSlNBYm9ydENvbnRyb2xsZXI6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZp
c2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KCZ3cmFwcGVkKCku
c2lnbmFsKCkpOwogfQogCit0ZW1wbGF0ZSB2b2lkIEpTQWJvcnRDb250cm9sbGVyOjp2aXNpdEFk
ZGl0aW9uYWxDaGlsZHJlbihKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZv
aWQgSlNBYm9ydENvbnRyb2xsZXI6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZp
c2l0b3ImKTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNBYm9ydFNpZ25hbEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNBYm9ydFNpZ25hbEN1c3RvbS5jcHAJKHJldmlzaW9uIDI3
MTQ0MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQWJvcnRTaWduYWxDdXN0b20u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotYm9vbCBKU0Fib3J0U2lnbmFsT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3Rz
KEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgSlNDOjpTbG90VmlzaXRv
ciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikKK2Jvb2wgSlNBYm9ydFNpZ25hbE93bmVy
Ojppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhh
bmRsZSwgdm9pZCosIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hh
cioqIHJlYXNvbikKIHsKICAgICBhdXRvJiBhYm9ydFNpZ25hbCA9IEpTQzo6anNDYXN0PEpTQWJv
cnRTaWduYWwqPihoYW5kbGUuc2xvdCgpLT5hc0NlbGwoKSktPndyYXBwZWQoKTsKICAgICBpZiAo
YWJvcnRTaWduYWwuaXNGaXJpbmdFdmVudExpc3RlbmVycygpKSB7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0F0dHJDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXR0ckN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXR0ckN1c3RvbS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTMzLDEwICszMywxNSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgSlNB
dHRyOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQor
Ly92b2lkIEpTQXR0cjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYg
dmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTQXR0cjo6dmlzaXRB
ZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBpZiAoRWxlbWVudCog
ZWxlbWVudCA9IHdyYXBwZWQoKS5vd25lckVsZW1lbnQoKSkKICAgICAgICAgdmlzaXRvci5hZGRP
cGFxdWVSb290KHJvb3QoZWxlbWVudCkpOwogfQogCit0ZW1wbGF0ZSB2b2lkIEpTQXR0cjo6dmlz
aXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0
ZSB2b2lkIEpTQXR0cjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYp
OworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0F1ZGlvQnVmZmVyQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0F1ZGlvQnVmZmVyQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcxNDQzKQor
KysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNBdWRpb0J1ZmZlckN1c3RvbS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTMxLDExICszMSwxNiBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogdXNp
bmcgbmFtZXNwYWNlIEpTQzsKIAotdm9pZCBKU0F1ZGlvQnVmZmVyOjp2aXNpdEFkZGl0aW9uYWxD
aGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vdm9pZCBKU0F1ZGlvQnVmZmVyOjp2aXNp
dEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVu
YW1lIFZpc2l0b3I+Cit2b2lkIEpTQXVkaW9CdWZmZXI6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVu
KFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgd3JhcHBlZCgpLnZpc2l0Q2hhbm5lbFdyYXBwZXJz
KHZpc2l0b3IpOwogfQogCit0ZW1wbGF0ZSB2b2lkIEpTQXVkaW9CdWZmZXI6OnZpc2l0QWRkaXRp
b25hbENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNBdWRp
b0J1ZmZlcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKKwogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQl9BVURJTykKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXVkaW9UcmFja0N1c3RvbS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNBdWRpb1RyYWNrQ3VzdG9tLmNwcAko
cmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNBdWRpb1Ry
YWNrQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsMTEgKzM1LDE2IEBACiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCi12b2lkIEpTQXVkaW9UcmFjazo6
dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3ZvaWQgSlNB
dWRpb1RyYWNrOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikK
K3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTQXVkaW9UcmFjazo6dmlzaXRBZGRp
dGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB2aXNpdG9yLmFkZE9wYXF1
ZVJvb3Qocm9vdCgmd3JhcHBlZCgpKSk7CiB9CiAKK3RlbXBsYXRlIHZvaWQgSlNBdWRpb1RyYWNr
Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0
ZSB2b2lkIEpTQXVkaW9UcmFjazo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3Im
KTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTQXVkaW9UcmFja0xpc3RDdXN0b20uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXVkaW9UcmFja0xpc3RDdXN0b20uY3BwCShy
ZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0F1ZGlvVHJh
Y2tMaXN0Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsMTEgKzM2LDE2IEBACiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCi12b2lkIEpTQXVkaW9UcmFj
a0xpc3Q6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy92
b2lkIEpTQXVkaW9UcmFja0xpc3Q6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9y
JiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNBdWRpb1RyYWNr
TGlzdDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB2
aXNpdG9yLmFkZE9wYXF1ZVJvb3Qocm9vdCh3cmFwcGVkKCkuZWxlbWVudCgpKSk7CiB9CiAKK3Rl
bXBsYXRlIHZvaWQgSlNBdWRpb1RyYWNrTGlzdDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oQWJz
dHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU0F1ZGlvVHJhY2tMaXN0Ojp2aXNp
dEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYpOworCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCiAKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNBdWRpb1dv
cmtsZXRQcm9jZXNzb3JDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTQXVkaW9Xb3JrbGV0UHJvY2Vzc29yQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcx
NDQzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNBdWRpb1dvcmtsZXRQcm9jZXNz
b3JDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw5IEBACiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCi12b2lkIEpTQXVkaW9Xb3JrbGV0UHJv
Y2Vzc29yOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKKy8v
dm9pZCBKU0F1ZGlvV29ya2xldFByb2Nlc3Nvcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xv
dFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0F1
ZGlvV29ya2xldFByb2Nlc3Nvcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlz
aXRvcikKIHsKICAgICBhdXRvJiBwcm9jZXNzb3IgPSB3cmFwcGVkKCk7CiAgICAgcHJvY2Vzc29y
LmpzSW5wdXRzV3JhcHBlcigpLnZpc2l0KHZpc2l0b3IpOwpAQCAtMzksNiArNDEsOSBAQCB2b2lk
IEpTQXVkaW9Xb3JrbGV0UHJvY2Vzc29yOjp2aXNpdEFkZGl0CiAgICAgcHJvY2Vzc29yLmpzUGFy
YW1WYWx1ZXNXcmFwcGVyKCkudmlzaXQodmlzaXRvcik7CiB9CiAKK3RlbXBsYXRlIHZvaWQgSlNB
dWRpb1dvcmtsZXRQcm9jZXNzb3I6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEFic3RyYWN0U2xv
dFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNBdWRpb1dvcmtsZXRQcm9jZXNzb3I6OnZpc2l0
QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKIAogI2VuZGlmIC8vIEVOQUJMRShXRUJfQVVESU8pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0NTU1J1bGVDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTQ1NTUnVsZUN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ1NTUnVsZUN1c3RvbS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTUxLDExICs1MSwxNiBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogdXNpbmcgbmFt
ZXNwYWNlIEpTQzsKIAotdm9pZCBKU0NTU1J1bGU6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQorLy92b2lkIEpTQ1NTUnVsZTo6dmlzaXRBZGRpdGlvbmFsQ2hp
bGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgor
dm9pZCBKU0NTU1J1bGU6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3Ip
CiB7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHJvb3QoJndyYXBwZWQoKSkpOwogfQogCit0
ZW1wbGF0ZSB2b2lkIEpTQ1NTUnVsZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oQWJzdHJhY3RT
bG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU0NTU1J1bGU6OnZpc2l0QWRkaXRpb25hbENo
aWxkcmVuKFNsb3RWaXNpdG9yJik7CisKIEpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0dsb2Jh
bE9iamVjdCosIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZjxDU1NSdWxlPiYm
IHJ1bGUpCiB7CiAgICAgc3dpdGNoIChydWxlLT50eXBlKCkpIHsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTQ1NTUnVsZUxpc3RDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ1NTUnVsZUxpc3RDdXN0b20uY3BwCShyZXZpc2lv
biAyNzE0NDMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NTU1J1bGVMaXN0Q3Vz
dG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsNyBAQAogbmFtZXNwYWNlIFdlYkNv
cmUgewogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAotYm9vbCBKU0NTU1J1bGVMaXN0T3duZXI6Omlz
UmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxl
LCB2b2lkKiwgU2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCitib29s
IEpTQ1NTUnVsZUxpc3RPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5k
bGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNp
dG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQogewogICAgIEpTQ1NTUnVsZUxpc3QqIGpzQ1NTUnVs
ZUxpc3QgPSBqc0Nhc3Q8SlNDU1NSdWxlTGlzdCo+KGhhbmRsZS5zbG90KCktPmFzQ2VsbCgpKTsK
ICAgICBpZiAoIWpzQ1NTUnVsZUxpc3QtPmhhc0N1c3RvbVByb3BlcnRpZXMoanNDU1NSdWxlTGlz
dC0+dm0oKSkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NTU1N0eWxlRGVj
bGFyYXRpb25DdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTQ1NTU3R5bGVEZWNsYXJhdGlvbkN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ1NTU3R5bGVEZWNsYXJhdGlvbkN1c3RvbS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTUxLDkgKzUxLDE0IEBAIHZvaWQqIHJvb3QoQ1NTU3R5bGVE
ZWNsYXJhdGlvbiogc3R5bGUpCiAgICAgcmV0dXJuIHN0eWxlOwogfQogCi12b2lkIEpTQ1NTU3R5
bGVEZWNsYXJhdGlvbjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0
b3IpCisvL3ZvaWQgSlNDU1NTdHlsZURlY2xhcmF0aW9uOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJl
bihTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lk
IEpTQ1NTU3R5bGVEZWNsYXJhdGlvbjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYg
dmlzaXRvcikKIHsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qocm9vdCgmd3JhcHBlZCgpKSk7
CiB9CiAKK3RlbXBsYXRlIHZvaWQgSlNDU1NTdHlsZURlY2xhcmF0aW9uOjp2aXNpdEFkZGl0aW9u
YWxDaGlsZHJlbihBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTQ1NTU3R5
bGVEZWNsYXJhdGlvbjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKKwog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNDYWxsYmFja0RhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTQ2FsbGJhY2tEYXRhLmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNDYWxsYmFja0RhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NSwx
MiArOTUsMTYgQEAgSlNWYWx1ZSBKU0NhbGxiYWNrRGF0YTo6aW52b2tlQ2FsbGJhY2soSgogICAg
IHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQgSlNDYWxsYmFja0RhdGFXZWFrOjp2aXNpdEpTRnVu
Y3Rpb24oSlNDOjpTbG90VmlzaXRvciYgdmlzdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRv
cj4KK3ZvaWQgSlNDYWxsYmFja0RhdGFXZWFrOjp2aXNpdEpTRnVuY3Rpb24oVmlzaXRvciYgdmlz
aXRvcikKIHsKLSAgICB2aXN0b3IuYXBwZW5kKG1fY2FsbGJhY2spOworICAgIHZpc2l0b3IuYXBw
ZW5kKG1fY2FsbGJhY2spOwogfQogCi1ib29sIEpTQ2FsbGJhY2tEYXRhV2Vhazo6V2Vha093bmVy
Ojppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2
b2lkKiBjb250ZXh0LCBTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikK
K3RlbXBsYXRlIHZvaWQgSlNDYWxsYmFja0RhdGFXZWFrOjp2aXNpdEpTRnVuY3Rpb24oSlNDOjpB
YnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTQ2FsbGJhY2tEYXRhV2Vhazo6
dmlzaXRKU0Z1bmN0aW9uKEpTQzo6U2xvdFZpc2l0b3ImKTsKKworYm9vbCBKU0NhbGxiYWNrRGF0
YVdlYWs6OldlYWtPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8
SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCwgQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRv
ciwgY29uc3QgY2hhcioqIHJlYXNvbikKIHsKICAgICBpZiAoVU5MSUtFTFkocmVhc29uKSkKICAg
ICAgICAgKnJlYXNvbiA9ICJDb250ZXh0IGlzIG9wYXF1ZSByb290IjsgLy8gRklYTUU6IHdoYXQg
aXMgdGhlIGNvbnRleHQuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NhbGxi
YWNrRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2Fs
bGJhY2tEYXRhLmgJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTQ2FsbGJhY2tEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTExMywxMSArMTEzLDEyIEBA
IHB1YmxpYzoKICAgICAgICAgcmV0dXJuIEpTQ2FsbGJhY2tEYXRhOjppbnZva2VDYWxsYmFjaygq
Z2xvYmFsT2JqZWN0LCBjYWxsYmFjaygpLCB0aGlzVmFsdWUsIGFyZ3MsIGNhbGxiYWNrVHlwZSwg
ZnVuY3Rpb25OYW1lLCByZXR1cm5lZEV4Y2VwdGlvbik7CiAgICAgfQogCi0gICAgdm9pZCB2aXNp
dEpTRnVuY3Rpb24oSlNDOjpTbG90VmlzaXRvciYpOworLy8gICAgdm9pZCB2aXNpdEpTRnVuY3Rp
b24oSlNDOjpTbG90VmlzaXRvciYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZv
aWQgdmlzaXRKU0Z1bmN0aW9uKFZpc2l0b3ImKTsKIAogcHJpdmF0ZToKICAgICBjbGFzcyBXZWFr
T3duZXIgOiBwdWJsaWMgSlNDOjpXZWFrSGFuZGxlT3duZXIgewotICAgICAgICBib29sIGlzUmVh
Y2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNv
bnRleHQsIEpTQzo6U2xvdFZpc2l0b3ImLCBjb25zdCBjaGFyKiopIG92ZXJyaWRlOworICAgICAg
ICBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93
bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYsIGNvbnN0IGNoYXIq
Kikgb3ZlcnJpZGU7CiAgICAgfTsKICAgICBXZWFrT3duZXIgbV93ZWFrT3duZXI7CiAgICAgSlND
OjpXZWFrPEpTQzo6SlNPYmplY3Q+IG1fY2FsbGJhY2s7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREN1c3RvbS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0
MkRDdXN0b20uY3BwCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI0LDcgKzI0LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1ib29sIEpTQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJET3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6
SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgSlNDOjpTbG90VmlzaXRvciYgdmlz
aXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikKK2Jvb2wgSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0
MkRPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtu
b3duPiBoYW5kbGUsIHZvaWQqLCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNv
bnN0IGNoYXIqKiByZWFzb24pCiB7CiAgICAgaWYgKFVOTElLRUxZKHJlYXNvbikpCiAgICAgICAg
ICpyZWFzb24gPSAiQ2FudmFzIGlzIG9wYXF1ZSByb290IjsKQEAgLTM0LDkgKzM0LDE0IEBAIGJv
b2wgSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRPd25lcjo6aXMKICAgICByZXR1cm4gdmlzaXRv
ci5jb250YWluc09wYXF1ZVJvb3Qocm9vdCk7CiB9CiAKLXZvaWQgSlNDYW52YXNSZW5kZXJpbmdD
b250ZXh0MkQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0
b3IpCisvL3ZvaWQgSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnZpc2l0QWRkaXRpb25hbENo
aWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNp
dG9yPgordm9pZCBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6dmlzaXRBZGRpdGlvbmFsQ2hp
bGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qocm9v
dCh3cmFwcGVkKCkuY2FudmFzKCkpKTsKIH0KIAordGVtcGxhdGUgdm9pZCBKU0NhbnZhc1JlbmRl
cmluZ0NvbnRleHQyRDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpBYnN0cmFjdFNsb3RW
aXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjp2aXNp
dEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJik7CisKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9tRXZlbnRD
dXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3Vz
dG9tRXZlbnRDdXN0b20uY3BwCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0N1c3RvbUV2ZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIs
MTAgKzQyLDE1IEBAIEpTQzo6SlNWYWx1ZSBKU0N1c3RvbUV2ZW50OjpkZXRhaWwoSlNDOjoKICAg
ICB9KTsKIH0KIAotdm9pZCBKU0N1c3RvbUV2ZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihK
U0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy92b2lkIEpTQ3VzdG9tRXZlbnQ6OnZpc2l0QWRk
aXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBl
bmFtZSBWaXNpdG9yPgordm9pZCBKU0N1c3RvbUV2ZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJl
bihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHdyYXBwZWQoKS5kZXRhaWwoKS52aXNpdCh2aXNp
dG9yKTsKICAgICB3cmFwcGVkKCkuY2FjaGVkRGV0YWlsKCkudmlzaXQodmlzaXRvcik7CiB9CiAK
K3RlbXBsYXRlIHZvaWQgSlNDdXN0b21FdmVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlND
OjpBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTQ3VzdG9tRXZlbnQ6OnZp
c2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImKTsKKwogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CdWlsdGlu
Q29uc3RydWN0b3JCYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0RPTUJ1aWx0aW5Db25zdHJ1Y3RvckJhc2UuY3BwCShyZXZpc2lvbiAyNzE0NDMpCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJ1aWx0aW5Db25zdHJ1Y3RvckJhc2Uu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSw3ICs0NSw4IEBAIHZvaWQgSlNET01CdWlsdGluQ29u
c3RydWN0b3JCYXNlOjpjYWxsRnUKICAgICBKU0M6OmNhbGwoJmxleGljYWxHbG9iYWxPYmplY3Qs
ICZmdW5jdGlvbiwgY2FsbERhdGEsICZ0aGlzT2JqZWN0LCBhcmd1bWVudHMpOwogfQogCi12b2lk
IEpTRE9NQnVpbHRpbkNvbnN0cnVjdG9yQmFzZTo6dmlzaXRDaGlsZHJlbihKU0M6OkpTQ2VsbCog
Y2VsbCwgSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0
b3I+Cit2b2lkIEpTRE9NQnVpbHRpbkNvbnN0cnVjdG9yQmFzZTo6dmlzaXRDaGlsZHJlbkltcGwo
SlNDOjpKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0byogdGhpc09i
amVjdCA9IGpzQ2FzdDxKU0RPTUJ1aWx0aW5Db25zdHJ1Y3RvckJhc2UqPihjZWxsKTsKICAgICBB
U1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC01Myw2ICs1
NCw4IEBAIHZvaWQgSlNET01CdWlsdGluQ29uc3RydWN0b3JCYXNlOjp2aXNpdEMKICAgICB2aXNp
dG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2luaXRpYWxpemVGdW5jdGlvbik7CiB9CiAKK0RFRklO
RV9WSVNJVF9DSElMRFJFTihKU0RPTUJ1aWx0aW5Db25zdHJ1Y3RvckJhc2UpOworCiBKU0M6Oklz
b1N1YnNwYWNlKiBKU0RPTUJ1aWx0aW5Db25zdHJ1Y3RvckJhc2U6OnN1YnNwYWNlRm9ySW1wbChK
U0M6OlZNJiB2bSkKIHsKICAgICByZXR1cm4gJnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4o
dm0uY2xpZW50RGF0YSktPmRvbUJ1aWx0aW5Db25zdHJ1Y3RvclNwYWNlKCk7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJ1aWx0aW5Db25zdHJ1Y3RvckJhc2UuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJ1aWx0aW5Db25zdHJ1
Y3RvckJhc2UuaAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNET01CdWlsdGluQ29uc3RydWN0b3JCYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDcg
KzQyLDcgQEAgcHJvdGVjdGVkOgogICAgIHsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNp
dENoaWxkcmVuKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVf
VklTSVRfQ0hJTERSRU47CiAKICAgICBKU0M6OkpTRnVuY3Rpb24qIGluaXRpYWxpemVGdW5jdGlv
bigpOwogICAgIHZvaWQgc2V0SW5pdGlhbGl6ZUZ1bmN0aW9uKEpTQzo6Vk0mLCBKU0M6OkpTRnVu
Y3Rpb24mKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2Jq
ZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUds
b2JhbE9iamVjdC5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjM1LDcgKzIz
NSw4IEBAIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIEpTRE9NR2xvYmFsT2JqZWMKICAgICByZXR1
cm4gbnVsbHB0cjsKIH0KIAotdm9pZCBKU0RPTUdsb2JhbE9iamVjdDo6dmlzaXRDaGlsZHJlbihK
U0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlz
aXRvcj4KK3ZvaWQgSlNET01HbG9iYWxPYmplY3Q6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCog
Y2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU0RPTUdsb2JhbE9iamVjdCogdGhpc09i
amVjdCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19P
QkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTI1Nyw2ICsyNTgsOCBAQCB2
b2lkIEpTRE9NR2xvYmFsT2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTCiAgICAgdGhpc09iamVjdC0+
bV9idWlsdGluSW50ZXJuYWxGdW5jdGlvbnMudmlzaXQodmlzaXRvcik7CiB9CiAKK0RFRklORV9W
SVNJVF9DSElMRFJFTihKU0RPTUdsb2JhbE9iamVjdCk7CisKIHZvaWQgSlNET01HbG9iYWxPYmpl
Y3Q6OnByb21pc2VSZWplY3Rpb25UcmFja2VyKEpTR2xvYmFsT2JqZWN0KiBqc0dsb2JhbE9iamVj
dCwgSlNQcm9taXNlKiBwcm9taXNlLCBKU1Byb21pc2VSZWplY3Rpb25PcGVyYXRpb24gb3BlcmF0
aW9uKQogewogICAgIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3dl
YmFwcGFwaXMuaHRtbCN0aGUtaG9zdHByb21pc2VyZWplY3Rpb250cmFja2VyLWltcGxlbWVudGF0
aW9uCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2Jq
ZWN0LmgJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
RE9NR2xvYmFsT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTY5LDcgKzY5LDcgQEAgcHVibGlj
OgogICAgIC8vIE1ha2UgYmluZGluZyBjb2RlIGdlbmVyYXRpb24gZWFzaWVyLgogICAgIEpTRE9N
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QoKSB7IHJldHVybiB0aGlzOyB9CiAKLSAgICBzdGF0
aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpOwor
ICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBET01XcmFwcGVyV29ybGQmIHdvcmxk
KCkgeyByZXR1cm4gbV93b3JsZC5nZXQoKTsgfQogICAgIGJvb2wgd29ybGRJc05vcm1hbCgpIGNv
bnN0IHsgcmV0dXJuIG1fd29ybGRJc05vcm1hbDsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNET01HdWFyZGVkT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNET01HdWFyZGVkT2JqZWN0LmgJKHJldmlzaW9uIDI3MTQ0MykKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR3VhcmRlZE9iamVjdC5oCSh3b3JraW5n
IGNvcHkpCkBAIC00MCw3ICs0MCw4IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaXNTdXNwZW5kZWQo
KSBjb25zdCB7IHJldHVybiAhbV9ndWFyZGVkIHx8ICFjYW5JbnZva2VDYWxsYmFjaygpOyB9IC8v
IFRoZSB3cmFwcGVyIHdvcmxkIGhhcyBnb25lIGF3YXkgb3IgYWN0aXZlIERPTSBvYmplY3RzIGhh
dmUgYmVlbiBzdXNwZW5kZWQuCiAKLSAgICB2b2lkIHZpc2l0QWdncmVnYXRlKEpTQzo6U2xvdFZp
c2l0b3ImIHZpc2l0b3IpIHsgdmlzaXRvci5hcHBlbmQobV9ndWFyZGVkKTsgfQorICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFZpc2l0b3I+CisgICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShWaXNpdG9yJiB2
aXNpdG9yKSB7IHZpc2l0b3IuYXBwZW5kKG1fZ3VhcmRlZCk7IH0KIAogICAgIEpTQzo6SlNWYWx1
ZSBndWFyZGVkT2JqZWN0KCkgY29uc3QgeyByZXR1cm4gbV9ndWFyZGVkLmdldCgpOyB9CiAgICAg
SlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fZ2xvYmFs
T2JqZWN0LmdldCgpOyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVF1
YWRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
RE9NUXVhZEN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTRE9NUXVhZEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDcgKzMz
LDkgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKLXZvaWQg
SlNET01RdWFkOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikK
Ky8vdm9pZCBKU0RPTVF1YWQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNET01RdWFkOjp2aXNp
dEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHZpc2l0b3IuYWRk
T3BhcXVlUm9vdChjb25zdF9jYXN0PERPTVBvaW50Kj4oJndyYXBwZWQoKS5wMSgpKSk7CiAgICAg
dmlzaXRvci5hZGRPcGFxdWVSb290KGNvbnN0X2Nhc3Q8RE9NUG9pbnQqPigmd3JhcHBlZCgpLnAy
KCkpKTsKQEAgLTQxLDQgKzQzLDcgQEAgdm9pZCBKU0RPTVF1YWQ6OnZpc2l0QWRkaXRpb25hbENo
aWxkcmVuKAogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChjb25zdF9jYXN0PERPTVBvaW50Kj4o
JndyYXBwZWQoKS5wNCgpKSk7CiB9CiAKLX0KK3RlbXBsYXRlIHZvaWQgSlNET01RdWFkOjp2aXNp
dEFkZGl0aW9uYWxDaGlsZHJlbihBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lk
IEpTRE9NUXVhZDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNE
T01XaW5kb3dDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTRE9NV2luZG93Q3VzdG9tLmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMTYsNyArMTE2LDkgQEAgSlNDX0RFRklORV9DVVNUT01fR0VUVEVSKGpzRE9NV2luZG93SW5z
dAogICAgIHJldHVybiBub25DYWNoaW5nU3RhdGljRnVuY3Rpb25HZXR0ZXJJbXBsPGpzRE9NV2lu
ZG93SW5zdGFuY2VGdW5jdGlvbl9wb3N0TWVzc2FnZSwgMj4oZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0
eU5hbWUpOwogfQogCi12b2lkIEpTRE9NV2luZG93Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihT
bG90VmlzaXRvciYgdmlzaXRvcikKKy8vdm9pZCBKU0RPTVdpbmRvdzo6dmlzaXRBZGRpdGlvbmFs
Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
Pgordm9pZCBKU0RPTVdpbmRvdzo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlz
aXRvcikKIHsKICAgICBpZiAoRnJhbWUqIGZyYW1lID0gd3JhcHBlZCgpLmZyYW1lKCkpCiAgICAg
ICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChmcmFtZSk7CkBAIC0xMjksNiArMTMxLDkgQEAgdm9p
ZCBKU0RPTVdpbmRvdzo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZQogICAgIHdyYXBwZWQoKS52aXNp
dEpTRXZlbnRMaXN0ZW5lcnModmlzaXRvcik7CiB9CiAKK3RlbXBsYXRlIHZvaWQgSlNET01XaW5k
b3c6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBs
YXRlIHZvaWQgSlNET01XaW5kb3c6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9y
Jik7CisKICNpZiBFTkFCTEUoVVNFUl9NRVNTQUdFX0hBTkRMRVJTKQogSlNDX0RFRklORV9DVVNU
T01fR0VUVEVSKGpzRE9NV2luZG93X3dlYmtpdCwgKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xv
YmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkpCiB7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RlcHJlY2F0ZWRDU1NPTVZhbHVlQ3Vz
dG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RlcHJl
Y2F0ZWRDU1NPTVZhbHVlQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNEZXByZWNhdGVkQ1NTT01WYWx1ZUN1c3RvbS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM1LDcgKzM1LDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5h
bWVzcGFjZSBKU0M7CiAKLWJvb2wgSlNEZXByZWNhdGVkQ1NTT01WYWx1ZU93bmVyOjppc1JlYWNo
YWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9p
ZCosIFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQorYm9vbCBKU0Rl
cHJlY2F0ZWRDU1NPTVZhbHVlT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6
SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgQWJzdHJhY3RTbG90VmlzaXRvciYg
dmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikKIHsKICAgICBKU0RlcHJlY2F0ZWRDU1NPTVZh
bHVlKiBqc0NTU1ZhbHVlID0ganNDYXN0PEpTRGVwcmVjYXRlZENTU09NVmFsdWUqPihoYW5kbGUu
c2xvdCgpLT5hc0NlbGwoKSk7CiAgICAgaWYgKCFqc0NTU1ZhbHVlLT5oYXNDdXN0b21Qcm9wZXJ0
aWVzKGpzQ1NTVmFsdWUtPnZtKCkpKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNEb2N1bWVudEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNEb2N1bWVudEN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTRG9jdW1lbnRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC05MSwxMSArOTEsMTYgQEAgSlNWYWx1ZSB0b0pTKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xv
YgogICAgIHJldHVybiB0b0pTTmV3bHlDcmVhdGVkKGxleGljYWxHbG9iYWxPYmplY3QsIGdsb2Jh
bE9iamVjdCwgUmVmPERvY3VtZW50Pihkb2N1bWVudCkpOwogfQogCi12b2lkIEpTRG9jdW1lbnQ6
OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy92b2lkIEpT
RG9jdW1lbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQor
dGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNEb2N1bWVudDo6dmlzaXRBZGRpdGlv
bmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJv
b3Qoc3RhdGljX2Nhc3Q8U2NyaXB0RXhlY3V0aW9uQ29udGV4dCo+KCZ3cmFwcGVkKCkpKTsKIH0K
IAordGVtcGxhdGUgdm9pZCBKU0RvY3VtZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihBYnN0
cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTRG9jdW1lbnQ6OnZpc2l0QWRkaXRp
b25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CisKIHZvaWQgSlNEb2N1bWVudDo6YW5hbHl6ZUhl
YXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQogewogICAgIEJhc2U6OmFu
YWx5emVIZWFwKGNlbGwsIGFuYWx5emVyKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTRXJyb3JFdmVudEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNFcnJvckV2ZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFcnJvckV2ZW50Q3VzdG9tLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjgsOSArMjgsMTQgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lk
IEpTRXJyb3JFdmVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYg
dmlzaXRvcikKKy8vdm9pZCBKU0Vycm9yRXZlbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpT
Qzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9p
ZCBKU0Vycm9yRXZlbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3Ip
CiB7CiAgICAgd3JhcHBlZCgpLm9yaWdpbmFsRXJyb3IoKS52aXNpdCh2aXNpdG9yKTsKIH0KIAor
dGVtcGxhdGUgdm9pZCBKU0Vycm9yRXZlbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6
QWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU0Vycm9yRXZlbnQ6OnZpc2l0
QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImKTsKKwogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudExpc3RlbmVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50TGlz
dGVuZXIuY3BwCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0V2ZW50TGlzdGVuZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03OCw3ICs3OCw4IEBAIEpT
T2JqZWN0KiBKU0V2ZW50TGlzdGVuZXI6OmluaXRpYWxpemVKU0YKICAgICByZXR1cm4gbnVsbHB0
cjsKIH0KIAotdm9pZCBKU0V2ZW50TGlzdGVuZXI6OnZpc2l0SlNGdW5jdGlvbihTbG90VmlzaXRv
ciYgdmlzaXRvcikKKy8vdm9pZCBKU0V2ZW50TGlzdGVuZXI6OnZpc2l0SlNGdW5jdGlvbihTbG90
VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgSlNFdmVudExpc3RlbmVyOjp2aXNpdEpTRnVuY3Rpb24o
QWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICAvLyBJZiBtX3dyYXBwZXIgaXMg
bnVsbCwgd2UgYXJlIG5vdCBrZWVwaW5nIG1fanNGdW5jdGlvbiBhbGl2ZS4KICAgICBpZiAoIW1f
d3JhcHBlcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRMaXN0ZW5l
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRMaXN0
ZW5lci5oCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0V2ZW50TGlzdGVuZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNjIsNyArNjIsOCBAQCBwdWJsaWM6
CiAKIHByaXZhdGU6CiAgICAgdmlydHVhbCBKU0M6OkpTT2JqZWN0KiBpbml0aWFsaXplSlNGdW5j
dGlvbihTY3JpcHRFeGVjdXRpb25Db250ZXh0JikgY29uc3Q7Ci0gICAgdm9pZCB2aXNpdEpTRnVu
Y3Rpb24oSlNDOjpTbG90VmlzaXRvciYpIGZpbmFsOworLy8gICAgdm9pZCB2aXNpdEpTRnVuY3Rp
b24oSlNDOjpTbG90VmlzaXRvciYpIGZpbmFsOworICAgIHZvaWQgdmlzaXRKU0Z1bmN0aW9uKEpT
Qzo6QWJzdHJhY3RTbG90VmlzaXRvciYpIGZpbmFsOwogCiBwcm90ZWN0ZWQ6CiAgICAgSlNFdmVu
dExpc3RlbmVyKEpTQzo6SlNPYmplY3QqIGZ1bmN0aW9uLCBKU0M6OkpTT2JqZWN0KiB3cmFwcGVy
LCBib29sIGlzQXR0cmlidXRlLCBET01XcmFwcGVyV29ybGQmKTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRUYXJnZXRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRUYXJnZXRDdXN0b20uY3BwCShyZXZpc2lv
biAyNzE0NDMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50VGFyZ2V0Q3Vz
dG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzIsOSArNzIsMTQgQEAgc3RkOjp1bmlxdWVfcHRy
PEpTRXZlbnRUYXJnZXRXcmFwcGVyPiBqcwogICAgIHJldHVybiBudWxscHRyOwogfQogCi12b2lk
IEpTRXZlbnRUYXJnZXQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNp
dG9yKQorLy92b2lkIEpTRXZlbnRUYXJnZXQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNFdmVu
dFRhcmdldDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAg
ICB3cmFwcGVkKCkudmlzaXRKU0V2ZW50TGlzdGVuZXJzKHZpc2l0b3IpOwogfQogCit0ZW1wbGF0
ZSB2b2lkIEpTRXZlbnRUYXJnZXQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEFic3RyYWN0U2xv
dFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNFdmVudFRhcmdldDo6dmlzaXRBZGRpdGlvbmFs
Q2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDog
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNGZXRjaEV2ZW50Q3VzdG9tLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0ZldGNoRXZlbnRDdXN0b20uY3Bw
CShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0ZldGNo
RXZlbnRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCwxMSArMzAsMTYgQEAKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIEpTRmV0Y2hFdmVudDo6dmlzaXRBZGRpdGlvbmFsQ2hp
bGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vdm9pZCBKU0ZldGNoRXZlbnQ6OnZp
c2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0
ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0ZldGNoRXZlbnQ6OnZpc2l0QWRkaXRpb25hbENo
aWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KCZ3
cmFwcGVkKCkucmVxdWVzdCgpKTsKIH0KIAotfQordGVtcGxhdGUgdm9pZCBKU0ZldGNoRXZlbnQ6
OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVt
cGxhdGUgdm9pZCBKU0ZldGNoRXZlbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xv
dFZpc2l0b3ImKTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTENhbnZhc0VsZW1lbnRDdXN0b20uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTENhbnZhc0VsZW1l
bnRDdXN0b20uY3BwCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0hUTUxDYW52YXNFbGVtZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEs
OSArMzEsMTQgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIEpTSFRNTENhbnZhc0Vs
ZW1lbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3Ip
CisvL3ZvaWQgSlNIVE1MQ2FudmFzRWxlbWVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlND
OjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lk
IEpTSFRNTENhbnZhc0VsZW1lbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZp
c2l0b3IpCiB7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHN0YXRpY19jYXN0PENhbnZhc0Jh
c2UqPigmd3JhcHBlZCgpKSk7CiB9CiAKK3RlbXBsYXRlIHZvaWQgSlNIVE1MQ2FudmFzRWxlbWVu
dDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0
ZW1wbGF0ZSB2b2lkIEpTSFRNTENhbnZhc0VsZW1lbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVu
KEpTQzo6U2xvdFZpc2l0b3ImKTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MVGVtcGxhdGVFbGVtZW50Q3VzdG9tLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxUZW1wbGF0ZUVs
ZW1lbnRDdXN0b20uY3BwCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0hUTUxUZW1wbGF0ZUVsZW1lbnRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zNywxMCArMzcsMTUgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBK
U0M7CiAKLXZvaWQgSlNIVE1MVGVtcGxhdGVFbGVtZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJl
bihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy92b2lkIEpTSFRNTFRlbXBsYXRlRWxlbWVu
dDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3Rl
bXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTSFRNTFRlbXBsYXRlRWxlbWVudDo6dmlz
aXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBpZiAoYXV0byog
Y29udGVudCA9IHdyYXBwZWQoKS5jb250ZW50SWZBdmFpbGFibGUoKSkKICAgICAgICAgdmlzaXRv
ci5hZGRPcGFxdWVSb290KHJvb3QoY29udGVudCkpOwogfQogCit0ZW1wbGF0ZSB2b2lkIEpTSFRN
TFRlbXBsYXRlRWxlbWVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpBYnN0cmFjdFNs
b3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTSFRNTFRlbXBsYXRlRWxlbWVudDo6dmlzaXRB
ZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYpOworCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hpc3RvcnlDdXN0b20u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSGlzdG9yeUN1
c3RvbS5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTSGlzdG9yeUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDkgKzQ0LDE0IEBAIEpT
VmFsdWUgSlNIaXN0b3J5OjpzdGF0ZShKU0dsb2JhbE9iamVjdCYKICAgICB9KTsKIH0KIAotdm9p
ZCBKU0hpc3Rvcnk6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9y
KQorLy92b2lkIEpTSGlzdG9yeTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3Im
IHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0hpc3Rvcnk6OnZp
c2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgd3JhcHBlZCgp
LmNhY2hlZFN0YXRlRm9yR0MoKS52aXNpdCh2aXNpdG9yKTsKIH0KIAordGVtcGxhdGUgdm9pZCBK
U0hpc3Rvcnk6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsK
K3RlbXBsYXRlIHZvaWQgSlNIaXN0b3J5Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90Vmlz
aXRvciYpOworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0lEQkN1cnNvckN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNJREJDdXJzb3JDdXN0b20uY3BwCShyZXZpc2lvbiAyNzE0NDMp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQkN1cnNvckN1c3RvbS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTUwLDcgKzUwLDkgQEAgSlNDOjpKU1ZhbHVlIEpTSURCQ3Vyc29yOjpw
cmltYXJ5S2V5KEpTQwogICAgIH0pOwogfQogCi12b2lkIEpTSURCQ3Vyc29yOjp2aXNpdEFkZGl0
aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vdm9pZCBKU0lEQkN1cnNvcjo6
dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0
eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0lEQkN1cnNvcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRy
ZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBhdXRvJiBjdXJzb3IgPSB3cmFwcGVkKCk7CiAg
ICAgaWYgKGF1dG8qIHJlcXVlc3QgPSBjdXJzb3IucmVxdWVzdCgpKQpAQCAtNTksNiArNjEsOSBA
QCB2b2lkIEpTSURCQ3Vyc29yOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlCiAgICAgY3Vyc29yLnBy
aW1hcnlLZXlXcmFwcGVyKCkudmlzaXQodmlzaXRvcik7CiB9CiAKK3RlbXBsYXRlIHZvaWQgSlNJ
REJDdXJzb3I6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsK
K3RlbXBsYXRlIHZvaWQgSlNJREJDdXJzb3I6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RW
aXNpdG9yJik7CisKIEpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkpTR2xvYmFsT2JqZWN0
KiwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmPElEQkN1cnNvcj4mJiBjdXJz
b3IpCiB7CiAgICAgaWYgKGlzPElEQkN1cnNvcldpdGhWYWx1ZT4oY3Vyc29yKSkKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCQ3Vyc29yV2l0aFZhbHVlQ3VzdG9tLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQkN1cnNvcldpdGhW
YWx1ZUN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTSURCQ3Vyc29yV2l0aFZhbHVlQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDMsMTIgKzQzLDE3IEBAIEpTQzo6SlNWYWx1ZSBKU0lEQkN1cnNvcldpdGhWYWx1ZTo6dmFsdWUK
ICAgICB9KTsKIH0KIAotdm9pZCBKU0lEQkN1cnNvcldpdGhWYWx1ZTo6dmlzaXRBZGRpdGlvbmFs
Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3ZvaWQgSlNJREJDdXJzb3JXaXRoVmFs
dWU6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxh
dGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNJREJDdXJzb3JXaXRoVmFsdWU6OnZpc2l0QWRk
aXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNJREJDdXJzb3I6OnZp
c2l0QWRkaXRpb25hbENoaWxkcmVuKHZpc2l0b3IpOwogICAgIHdyYXBwZWQoKS52YWx1ZVdyYXBw
ZXIoKS52aXNpdCh2aXNpdG9yKTsKIH0KIAordGVtcGxhdGUgdm9pZCBKU0lEQkN1cnNvcldpdGhW
YWx1ZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oQWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVt
cGxhdGUgdm9pZCBKU0lEQkN1cnNvcldpdGhWYWx1ZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4o
U2xvdFZpc2l0b3ImKTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5B
QkxFKElOREVYRURfREFUQUJBU0UpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0lEQkluZGV4Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0lEQkluZGV4Q3VzdG9tLmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNJREJJbmRleEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM0LDExICszNCwxNiBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogdXNpbmcgbmFtZXNwYWNlIEpT
QzsKIAotdm9pZCBKU0lEQkluZGV4Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRv
ciYgdmlzaXRvcikKKy8vdm9pZCBKU0lEQkluZGV4Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihT
bG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpT
SURCSW5kZXg6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAg
ICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHN0YXRpY19jYXN0PElEQkluZGV4Jj4od3JhcHBlZCgp
KS5vYmplY3RTdG9yZUFzT3BhcXVlUm9vdCgpKTsKIH0KIAordGVtcGxhdGUgdm9pZCBKU0lEQklu
ZGV4Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1w
bGF0ZSB2b2lkIEpTSURCSW5kZXg6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9y
Jik7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVE
X0RBVEFCQVNFKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJPYmplY3RT
dG9yZUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNJREJPYmplY3RTdG9yZUN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCT2JqZWN0U3RvcmVDdXN0b20uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zNiwxMSArMzYsMTYgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVz
cGFjZSBKU0M7CiAKLXZvaWQgSlNJREJPYmplY3RTdG9yZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRy
ZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3ZvaWQgSlNJREJPYmplY3RTdG9yZTo6dmlzaXRB
ZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBWaXNpdG9yPgordm9pZCBKU0lEQk9iamVjdFN0b3JlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJl
bihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHN0YXRpY19jYXN0PElEQk9iamVjdFN0b3JlJj4o
d3JhcHBlZCgpKS52aXNpdFJlZmVyZW5jZWRJbmRleGVzKHZpc2l0b3IpOwogfQogCi19Cit0ZW1w
bGF0ZSB2b2lkIEpTSURCT2JqZWN0U3RvcmU6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEFic3Ry
YWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNJREJPYmplY3RTdG9yZTo6dmlzaXRB
ZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQogCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCUmVxdWVz
dEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJ
REJSZXF1ZXN0Q3VzdG9tLmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNJREJSZXF1ZXN0Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODks
MTIgKzg5LDE4IEBAIEpTQzo6SlNWYWx1ZSBKU0lEQlJlcXVlc3Q6OnJlc3VsdChKU0M6OkoKICAg
ICB9KTsKIH0KIAotdm9pZCBKU0lEQlJlcXVlc3Q6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQorLy92b2lkIEpTSURCUmVxdWVzdDo6dmlzaXRBZGRpdGlvbmFs
Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
Pgordm9pZCBKU0lEQlJlcXVlc3Q6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZp
c2l0b3IpCiB7CiAgICAgYXV0byYgcmVxdWVzdCA9IHdyYXBwZWQoKTsKICAgICByZXF1ZXN0LnJl
c3VsdFdyYXBwZXIoKS52aXNpdCh2aXNpdG9yKTsKICAgICByZXF1ZXN0LmN1cnNvcldyYXBwZXIo
KS52aXNpdCh2aXNpdG9yKTsKIH0KIAotfQordGVtcGxhdGUgdm9pZCBKU0lEQlJlcXVlc3Q6OnZp
c2l0QWRkaXRpb25hbENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZv
aWQgSlNJREJSZXF1ZXN0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYpOwor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKICNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRB
QkFTRSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCVHJhbnNhY3Rpb25D
dXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURC
VHJhbnNhY3Rpb25DdXN0b20uY3BwCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0lEQlRyYW5zYWN0aW9uQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzQsMTEgKzM0LDE2IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2Ug
SlNDOwogCi12b2lkIEpTSURCVHJhbnNhY3Rpb246OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQorLy92b2lkIEpTSURCVHJhbnNhY3Rpb246OnZpc2l0QWRkaXRp
b25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlz
aXRvcj4KK3ZvaWQgSlNJREJUcmFuc2FjdGlvbjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlz
aXRvciYgdmlzaXRvcikKIHsKICAgICBzdGF0aWNfY2FzdDxJREJUcmFuc2FjdGlvbiY+KHdyYXBw
ZWQoKSkudmlzaXRSZWZlcmVuY2VkT2JqZWN0U3RvcmVzKHZpc2l0b3IpOwogfQogCi19Cit0ZW1w
bGF0ZSB2b2lkIEpTSURCVHJhbnNhY3Rpb246OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEFic3Ry
YWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNJREJUcmFuc2FjdGlvbjo6dmlzaXRB
ZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQogCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW50ZXJzZWN0
aW9uT2JzZXJ2ZXJDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTSW50ZXJzZWN0aW9uT2JzZXJ2ZXJDdXN0b20uY3BwCShyZXZpc2lvbiAyNzE0NDMp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0ludGVyc2VjdGlvbk9ic2VydmVyQ3Vz
dG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsMTAgKzMwLDE1IEBACiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotdm9pZCBKU0ludGVyc2VjdGlvbk9ic2VydmVyOjp2aXNpdEFkZGl0aW9uYWxD
aGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy92b2lkIEpTSW50ZXJzZWN0aW9u
T2JzZXJ2ZXI6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0
b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0ludGVyc2VjdGlvbk9ic2Vy
dmVyOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGlm
IChhdXRvKiBjYWxsYmFjayA9IHdyYXBwZWQoKS5jYWxsYmFja0NvbmN1cnJlbnRseSgpKQogICAg
ICAgICBjYWxsYmFjay0+dmlzaXRKU0Z1bmN0aW9uKHZpc2l0b3IpOwogfQogCi19Cit0ZW1wbGF0
ZSB2b2lkIEpTSW50ZXJzZWN0aW9uT2JzZXJ2ZXI6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpT
Qzo6QWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU0ludGVyc2VjdGlvbk9i
c2VydmVyOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJik7CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
SW50ZXJzZWN0aW9uT2JzZXJ2ZXJFbnRyeUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNJbnRlcnNlY3Rpb25PYnNlcnZlckVudHJ5Q3VzdG9tLmNw
cAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJbnRl
cnNlY3Rpb25PYnNlcnZlckVudHJ5Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyAr
MzAsOSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgSlNJbnRlcnNlY3Rpb25PYnNl
cnZlckVudHJ5Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNp
dG9yKQorLy92b2lkIEpTSW50ZXJzZWN0aW9uT2JzZXJ2ZXJFbnRyeTo6dmlzaXRBZGRpdGlvbmFs
Q2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZp
c2l0b3I+Cit2b2lkIEpTSW50ZXJzZWN0aW9uT2JzZXJ2ZXJFbnRyeTo6dmlzaXRBZGRpdGlvbmFs
Q2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qo
cm9vdCh3cmFwcGVkKCkudGFyZ2V0KCkpKTsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qod3Jh
cHBlZCgpLmJvdW5kaW5nQ2xpZW50UmVjdCgpKTsKQEAgLTM4LDQgKzQwLDcgQEAgdm9pZCBKU0lu
dGVyc2VjdGlvbk9ic2VydmVyRW50cnk6OnZpc2l0QQogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9v
dCh3cmFwcGVkKCkucm9vdEJvdW5kcygpKTsKIH0KIAotfQordGVtcGxhdGUgdm9pZCBKU0ludGVy
c2VjdGlvbk9ic2VydmVyRW50cnk6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6QWJzdHJh
Y3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU0ludGVyc2VjdGlvbk9ic2VydmVyRW50
cnk6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImKTsKKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNZXNz
YWdlQ2hhbm5lbEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNNZXNzYWdlQ2hhbm5lbEN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWVzc2FnZUNoYW5uZWxDdXN0b20uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMyw3ICszMyw5IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9p
ZCBKU01lc3NhZ2VDaGFubmVsOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNp
dG9yJiB2aXNpdG9yKQorLy92b2lkIEpTTWVzc2FnZUNoYW5uZWw6OnZpc2l0QWRkaXRpb25hbENo
aWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNp
dG9yPgordm9pZCBKU01lc3NhZ2VDaGFubmVsOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNp
dG9yJiB2aXNpdG9yKQogewogICAgIGlmIChNZXNzYWdlUG9ydCogcG9ydCA9IHdyYXBwZWQoKS5w
b3J0MSgpKQogICAgICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QocG9ydCk7CkBAIC00Miw2ICs0
NCw5IEBAIHZvaWQgSlNNZXNzYWdlQ2hhbm5lbDo6dmlzaXRBZGRpdGlvbmFsQ2gKICAgICAgICAg
dmlzaXRvci5hZGRPcGFxdWVSb290KHBvcnQpOwogfQogCit0ZW1wbGF0ZSB2b2lkIEpTTWVzc2Fn
ZUNoYW5uZWw6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRv
ciYpOwordGVtcGxhdGUgdm9pZCBKU01lc3NhZ2VDaGFubmVsOjp2aXNpdEFkZGl0aW9uYWxDaGls
ZHJlbihKU0M6OlNsb3RWaXNpdG9yJik7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2Vu
ZGlmIC8vIEVOQUJMRShDSEFOTkVMX01FU1NBR0lORykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTTWVzc2FnZUV2ZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU01lc3NhZ2VFdmVudEN1c3RvbS5jcHAJKHJldmlzaW9uIDI3
MTQ0MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWVzc2FnZUV2ZW50Q3VzdG9t
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzAsNyArNzAsOSBAQCBKU0M6OkpTVmFsdWUgSlNNZXNz
YWdlRXZlbnQ6OmRhdGEoSlNDOjpKCiAgICAgfSk7CiB9CiAKLXZvaWQgSlNNZXNzYWdlRXZlbnQ6
OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3Zv
aWQgSlNNZXNzYWdlRXZlbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0
b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU01lc3NhZ2VF
dmVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBX
VEY6OnN3aXRjaE9uKHdyYXBwZWQoKS5kYXRhKCksIFsmdmlzaXRvcl0gKGNvbnN0IEpTVmFsdWVJ
bldyYXBwZWRPYmplY3QmIGRhdGEpIHsKICAgICAgICAgZGF0YS52aXNpdCh2aXNpdG9yKTsKQEAg
LTg0LDQgKzg2LDcgQEAgdm9pZCBKU01lc3NhZ2VFdmVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbAog
ICAgIHdyYXBwZWQoKS5jYWNoZWRQb3J0cygpLnZpc2l0KHZpc2l0b3IpOwogfQogCit0ZW1wbGF0
ZSB2b2lkIEpTTWVzc2FnZUV2ZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OkFic3Ry
YWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNNZXNzYWdlRXZlbnQ6OnZpc2l0QWRk
aXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImKTsKKwogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNZXNzYWdlUG9ydEN1c3Rv
bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNZXNzYWdl
UG9ydEN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTTWVzc2FnZVBvcnRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwxMSAr
MzEsMTYgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKLXZv
aWQgSlNNZXNzYWdlUG9ydDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZp
c2l0b3IpCisvL3ZvaWQgSlNNZXNzYWdlUG9ydDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xv
dFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU01l
c3NhZ2VQb3J0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewog
ICAgIC8vIElmIHdlIGhhdmUgYSBsb2NhbGx5IGVudGFuZ2xlZCBwb3J0LCB3ZSBjYW4gZGlyZWN0
bHkgbWFyayBpdCBhcyByZWFjaGFibGUuIFBvcnRzIHRoYXQgYXJlIHJlbW90ZWx5IGVudGFuZ2xl
ZCBhcmUgbWFya2VkIGluLXVzZSBieSBtYXJrQWN0aXZlT2JqZWN0c0ZvckNvbnRleHQoKS4KICAg
ICBpZiAoTWVzc2FnZVBvcnQqIHBvcnQgPSB3cmFwcGVkKCkubG9jYWxseUVudGFuZ2xlZFBvcnQo
KSkKICAgICAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHBvcnQpOwogfQogCit0ZW1wbGF0ZSB2
b2lkIEpTTWVzc2FnZVBvcnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEFic3RyYWN0U2xvdFZp
c2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNNZXNzYWdlUG9ydDo6dmlzaXRBZGRpdGlvbmFsQ2hp
bGRyZW4oU2xvdFZpc2l0b3ImKTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNdXRhdGlvbk9ic2VydmVyQ3VzdG9tLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU011dGF0aW9uT2JzZXJ2ZXJD
dXN0b20uY3BwCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU011dGF0aW9uT2JzZXJ2ZXJDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSwxMiAr
MzksMTcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKLXZv
aWQgSlNNdXRhdGlvbk9ic2VydmVyOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RW
aXNpdG9yJiB2aXNpdG9yKQorLy92b2lkIEpTTXV0YXRpb25PYnNlcnZlcjo6dmlzaXRBZGRpdGlv
bmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1l
IFZpc2l0b3I+Cit2b2lkIEpTTXV0YXRpb25PYnNlcnZlcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRy
ZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB3cmFwcGVkKCkuY2FsbGJhY2soKS52aXNpdEpT
RnVuY3Rpb24odmlzaXRvcik7CiB9CiAKLWJvb2wgSlNNdXRhdGlvbk9ic2VydmVyT3duZXI6Omlz
UmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxl
LCB2b2lkKiwgU2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKnJlYXNvbikKK3RlbXBs
YXRlIHZvaWQgSlNNdXRhdGlvbk9ic2VydmVyOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6
OkFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNNdXRhdGlvbk9ic2VydmVy
Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJik7CisKK2Jvb2wgSlNN
dXRhdGlvbk9ic2VydmVyT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFu
ZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgQWJzdHJhY3RTbG90VmlzaXRvciYgdmlz
aXRvciwgY29uc3QgY2hhcioqcmVhc29uKQogewogICAgIGZvciAoYXV0byogbm9kZSA6IGpzQ2Fz
dDxKU011dGF0aW9uT2JzZXJ2ZXIqPihoYW5kbGUuc2xvdCgpLT5hc0NlbGwoKSktPndyYXBwZWQo
KS5vYnNlcnZlZE5vZGVzKCkpIHsKICAgICAgICAgaWYgKHZpc2l0b3IuY29udGFpbnNPcGFxdWVS
b290KHJvb3Qobm9kZSkpKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU011
dGF0aW9uUmVjb3JkQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU011dGF0aW9uUmVjb3JkQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNdXRhdGlvblJlY29yZEN1c3RvbS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTMwLDkgKzMwLDE0IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAot
dm9pZCBKU011dGF0aW9uUmVjb3JkOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RW
aXNpdG9yJiB2aXNpdG9yKQorLy92b2lkIEpTTXV0YXRpb25SZWNvcmQ6OnZpc2l0QWRkaXRpb25h
bENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPgordm9pZCBKU011dGF0aW9uUmVjb3JkOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihW
aXNpdG9yJiB2aXNpdG9yKQogewogICAgIHdyYXBwZWQoKS52aXNpdE5vZGVzQ29uY3VycmVudGx5
KHZpc2l0b3IpOwogfQotICAgIAorCit0ZW1wbGF0ZSB2b2lkIEpTTXV0YXRpb25SZWNvcmQ6OnZp
c2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxh
dGUgdm9pZCBKU011dGF0aW9uUmVjb3JkOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNs
b3RWaXNpdG9yJik7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTTmF2aWdhdG9yQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05hdmlnYXRvckN1c3RvbS5jcHAJKHJldmlzaW9uIDI3
MTQ0MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTmF2aWdhdG9yQ3VzdG9tLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzIsMTEgKzMyLDE2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotdm9pZCBKU05hdmlnYXRvcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90
VmlzaXRvciYgdmlzaXRvcikKKy8vdm9pZCBKU05hdmlnYXRvcjo6dmlzaXRBZGRpdGlvbmFsQ2hp
bGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0
b3I+Cit2b2lkIEpTTmF2aWdhdG9yOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2
aXNpdG9yKQogewogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChzdGF0aWNfY2FzdDxOYXZpZ2F0
b3JCYXNlKj4oJndyYXBwZWQoKSkpOwogfQogCit0ZW1wbGF0ZSB2b2lkIEpTTmF2aWdhdG9yOjp2
aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBs
YXRlIHZvaWQgSlNOYXZpZ2F0b3I6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZp
c2l0b3ImKTsKKwogI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCiBKU0M6OkpTVmFsdWUgSlNOYXZp
Z2F0b3I6OmdldFVzZXJNZWRpYShKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBKU0M6OkNhbGxGcmFtZSYgY2FsbEZyYW1lKQogewpJbmRleDogU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNOb2RlQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU05vZGVDdXN0b20uY3BwCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC03NCw3ICs3NCw4IEBAIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKIHVzaW5nIG5hbWVzcGFjZSBI
VE1MTmFtZXM7CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBpc1JlYWNoYWJsZUZyb21ET00oTm9kZSog
bm9kZSwgU2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCisvL3N0YXRp
YyBpbmxpbmUgYm9vbCBpc1JlYWNoYWJsZUZyb21ET00oTm9kZSogbm9kZSwgU2xvdFZpc2l0b3Im
IHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCitzdGF0aWMgaW5saW5lIGJvb2wgaXNSZWFj
aGFibGVGcm9tRE9NKE5vZGUqIG5vZGUsIEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNv
bnN0IGNoYXIqKiByZWFzb24pCiB7CiAgICAgaWYgKCFub2RlLT5pc0Nvbm5lY3RlZCgpKSB7CiAg
ICAgICAgIGlmIChpczxFbGVtZW50Pigqbm9kZSkpIHsKQEAgLTEyMyw3ICsxMjQsNyBAQCBzdGF0
aWMgaW5saW5lIGJvb2wgaXNSZWFjaGFibGVGcm9tRE9NKE5vCiAgICAgcmV0dXJuIHZpc2l0b3Iu
Y29udGFpbnNPcGFxdWVSb290KHJvb3Qobm9kZSkpOwogfQogCi1ib29sIEpTTm9kZU93bmVyOjpp
c1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRs
ZSwgdm9pZCosIFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQorYm9v
bCBKU05vZGVPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlND
OjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBj
b25zdCBjaGFyKiogcmVhc29uKQogewogICAgIEpTTm9kZSoganNOb2RlID0ganNDYXN0PEpTTm9k
ZSo+KGhhbmRsZS5zbG90KCktPmFzQ2VsbCgpKTsKICAgICByZXR1cm4gaXNSZWFjaGFibGVGcm9t
RE9NKCZqc05vZGUtPndyYXBwZWQoKSwgdmlzaXRvciwgcmVhc29uKTsKQEAgLTEzNiwxMSArMTM3
LDE2IEBAIEpTU2NvcGUqIEpTTm9kZTo6cHVzaEV2ZW50SGFuZGxlclNjb3BlKEoKICAgICByZXR1
cm4gbm9kZTsKIH0KIAotdm9pZCBKU05vZGU6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQorLy92b2lkIEpTTm9kZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4o
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBK
U05vZGU6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAg
dmlzaXRvci5hZGRPcGFxdWVSb290KHJvb3Qod3JhcHBlZCgpKSk7CiB9CiAKK3RlbXBsYXRlIHZv
aWQgSlNOb2RlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihBYnN0cmFjdFNsb3RWaXNpdG9yJik7
Cit0ZW1wbGF0ZSB2b2lkIEpTTm9kZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0
b3ImKTsKKwogc3RhdGljIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBjcmVhdGVXcmFwcGVySW5saW5l
KEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0RPTUdsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBSZWY8Tm9kZT4mJiBub2RlKQogewogICAgIEFTU0VSVCghZ2V0Q2FjaGVk
V3JhcHBlcihnbG9iYWxPYmplY3QtPndvcmxkKCksIG5vZGUpKTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTTm9kZUl0ZXJhdG9yQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVJdGVyYXRvckN1c3RvbS5jcHAJKHJldmlz
aW9uIDI3MTQ0MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUl0ZXJhdG9y
Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUsMTAgKzI1LDE1IEBACiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotdm9pZCBKU05vZGVJdGVyYXRvcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRy
ZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vdm9pZCBKU05vZGVJdGVyYXRvcjo6dmlz
aXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRl
PHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTTm9kZUl0ZXJhdG9yOjp2aXNpdEFkZGl0aW9uYWxD
aGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGlmIChOb2RlRmlsdGVyKiBmaWx0ZXIg
PSB3cmFwcGVkKCkuZmlsdGVyKCkpCiAgICAgICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChmaWx0
ZXIpOwogfQogCi19Cit0ZW1wbGF0ZSB2b2lkIEpTTm9kZUl0ZXJhdG9yOjp2aXNpdEFkZGl0aW9u
YWxDaGlsZHJlbihKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNO
b2RlSXRlcmF0b3I6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImKTsK
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNOb2RlTGlzdEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNOb2RlTGlzdEN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUxpc3RDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zNyw3ICszNyw3IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2Ug
SlNDOwogCi1ib29sIEpTTm9kZUxpc3RPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMo
SlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBTbG90VmlzaXRvciYgdmlz
aXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikKK2Jvb2wgSlNOb2RlTGlzdE93bmVyOjppc1JlYWNo
YWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9p
ZCosIEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCiB7
CiAgICAgSlNOb2RlTGlzdCoganNOb2RlTGlzdCA9IGpzQ2FzdDxKU05vZGVMaXN0Kj4oaGFuZGxl
LnNsb3QoKS0+YXNDZWxsKCkpOwogICAgIGlmICghanNOb2RlTGlzdC0+aGFzQ3VzdG9tUHJvcGVy
dGllcyhqc05vZGVMaXN0LT52bSgpKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTT2Zmc2NyZWVuQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQ3VzdG9tLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU09mZnNjcmVlbkNhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyREN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTT2Zmc2NyZWVuQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQ3VzdG9tLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsNyBAQCBpbmxpbmUgdm9pZCogcm9vdChPZmZz
Y3JlZW5DYW52YXMqIGNhbnZhCiAgICAgcmV0dXJuIGNhbnZhczsKIH0KIAotYm9vbCBKU09mZnNj
cmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRE93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVS
b290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIFNsb3RWaXNpdG9y
JiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQorYm9vbCBKU09mZnNjcmVlbkNhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyRE93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6Okhh
bmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIEFic3RyYWN0U2xvdFZpc2l0b3ImIHZp
c2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCiB7CiAgICAgaWYgKFVOTElLRUxZKHJlYXNvbikp
CiAgICAgICAgICpyZWFzb24gPSAiQ2FudmFzIGlzIG9wYXF1ZSByb290IjsKQEAgLTQxLDExICs0
MSwxNiBAQCBib29sIEpTT2Zmc2NyZWVuQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJECiAgICAgcmV0
dXJuIHZpc2l0b3IuY29udGFpbnNPcGFxdWVSb290KHJvb3QpOwogfQogCi12b2lkIEpTT2Zmc2Ny
ZWVuQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90
VmlzaXRvciYgdmlzaXRvcikKKy8vdm9pZCBKU09mZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyRDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1w
bGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU09mZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyRDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAg
ICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qocm9vdCgmd3JhcHBlZCgpLmNhbnZhcygpKSk7CiB9CiAK
K3RlbXBsYXRlIHZvaWQgSlNPZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnZpc2l0
QWRkaXRpb25hbENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQg
SlNPZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnZpc2l0QWRkaXRpb25hbENoaWxk
cmVuKFNsb3RWaXNpdG9yJik7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1BhaW50UmVuZGVyaW5nQ29udGV4dDJE
Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1Bh
aW50UmVuZGVyaW5nQ29udGV4dDJEQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNQYWludFJlbmRlcmluZ0NvbnRleHQyREN1c3RvbS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDcgKzM2LDcgQEAgaW5saW5lIHZvaWQqIHJvb3QoQ3Vz
dG9tUGFpbnRDYW52YXMqIGNhbgogICAgIHJldHVybiBjYW52YXM7CiB9CiAKLWJvb2wgSlNQYWlu
dFJlbmRlcmluZ0NvbnRleHQyRE93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6
OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIFNsb3RWaXNpdG9yJiB2aXNpdG9y
LCBjb25zdCBjaGFyKiogcmVhc29uKQorYm9vbCBKU1BhaW50UmVuZGVyaW5nQ29udGV4dDJET3du
ZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4g
aGFuZGxlLCB2b2lkKiwgQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioq
IHJlYXNvbikKIHsKICAgICBpZiAoVU5MSUtFTFkocmVhc29uKSkKICAgICAgICAgKnJlYXNvbiA9
ICJDYW52YXMgaXMgb3BhcXVlIHJvb3QiOwpAQCAtNDYsMTEgKzQ2LDE2IEBAIGJvb2wgSlNQYWlu
dFJlbmRlcmluZ0NvbnRleHQyRE93bmVyOjppc1IKICAgICByZXR1cm4gdmlzaXRvci5jb250YWlu
c09wYXF1ZVJvb3Qocm9vdCk7CiB9CiAKLXZvaWQgSlNQYWludFJlbmRlcmluZ0NvbnRleHQyRDo6
dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3ZvaWQgSlNQ
YWludFJlbmRlcmluZ0NvbnRleHQyRDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0
b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1BhaW50UmVu
ZGVyaW5nQ29udGV4dDJEOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9y
KQogewogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChyb290KCZ3cmFwcGVkKCkuY2FudmFzKCkp
KTsKIH0KIAordGVtcGxhdGUgdm9pZCBKU1BhaW50UmVuZGVyaW5nQ29udGV4dDJEOjp2aXNpdEFk
ZGl0aW9uYWxDaGlsZHJlbihBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpT
UGFpbnRSZW5kZXJpbmdDb250ZXh0MkQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNp
dG9yJik7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKICNlbmRpZgogCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU1BhaW50V29ya2xldEdsb2JhbFNjb3BlQ3VzdG9tLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1BhaW50V29ya2xldEds
b2JhbFNjb3BlQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNQYWludFdvcmtsZXRHbG9iYWxTY29wZUN1c3RvbS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTMxLDcgKzMxLDkgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVz
cGFjZSBKU0M7CiAKLXZvaWQgSlNQYWludFdvcmtsZXRHbG9iYWxTY29wZTo6dmlzaXRBZGRpdGlv
bmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vdm9pZCBKU1BhaW50V29y
a2xldEdsb2JhbFNjb3BlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9y
JiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNQYWludFdvcmts
ZXRHbG9iYWxTY29wZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikK
IHsKICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKHdyYXBwZWQoKS5wYWludERlZmluaXRpb25M
b2NrKCkpOwogICAgIGZvciAoYXV0byYgcmVnaXN0ZXJlZCA6IHdyYXBwZWQoKS5wYWludERlZmlu
aXRpb25NYXAoKS52YWx1ZXMoKSkgewpAQCAtNDAsNSArNDIsOSBAQCB2b2lkIEpTUGFpbnRXb3Jr
bGV0R2xvYmFsU2NvcGU6OnZpc2l0QWRkCiAgICAgfQogfQogCi19Cit0ZW1wbGF0ZSB2b2lkIEpT
UGFpbnRXb3JrbGV0R2xvYmFsU2NvcGU6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6QWJz
dHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU1BhaW50V29ya2xldEdsb2JhbFNj
b3BlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJik7CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKKwogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU1BheW1lbnRNZXRob2RDaGFuZ2VFdmVudEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNQYXltZW50TWV0aG9kQ2hhbmdlRXZlbnRDdXN0
b20uY3BwCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U1BheW1lbnRNZXRob2RDaGFuZ2VFdmVudEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQx
LDcgKzQxLDkgQEAgSlNDOjpKU1ZhbHVlIEpTUGF5bWVudE1ldGhvZENoYW5nZUV2ZW50OgogICAg
IH0pOwogfQogCi12b2lkIEpTUGF5bWVudE1ldGhvZENoYW5nZUV2ZW50Ojp2aXNpdEFkZGl0aW9u
YWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy92b2lkIEpTUGF5bWVudE1l
dGhvZENoYW5nZUV2ZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9y
JiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNQYXltZW50TWV0
aG9kQ2hhbmdlRXZlbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3Ip
CiB7CiAgICAgV1RGOjpzd2l0Y2hPbih3cmFwcGVkKCkubWV0aG9kRGV0YWlscygpLCBbJnZpc2l0
b3JdKGNvbnN0IEpTVmFsdWVJbldyYXBwZWRPYmplY3QmIG1ldGhvZERldGFpbHMpIHsKICAgICAg
ICAgbWV0aG9kRGV0YWlscy52aXNpdCh2aXNpdG9yKTsKQEAgLTUxLDYgKzUzLDkgQEAgdm9pZCBK
U1BheW1lbnRNZXRob2RDaGFuZ2VFdmVudDo6dmlzaXRBZAogICAgIHdyYXBwZWQoKS5jYWNoZWRN
ZXRob2REZXRhaWxzKCkudmlzaXQodmlzaXRvcik7CiB9CiAKK3RlbXBsYXRlIHZvaWQgSlNQYXlt
ZW50TWV0aG9kQ2hhbmdlRXZlbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6QWJzdHJh
Y3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU1BheW1lbnRNZXRob2RDaGFuZ2VFdmVu
dDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYpOworCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoUEFZTUVOVF9SRVFVRVNUKQpJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNQYXltZW50UmVzcG9uc2VDdXN0b20uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUGF5bWVudFJlc3Bv
bnNlQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNQYXltZW50UmVzcG9uc2VDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNywx
MSArMzcsMTYgQEAgSlNDOjpKU1ZhbHVlIEpTUGF5bWVudFJlc3BvbnNlOjpkZXRhaWxzKAogICAg
IH0pOwogfQogCi12b2lkIEpTUGF5bWVudFJlc3BvbnNlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJl
bihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy92b2lkIEpTUGF5bWVudFJlc3BvbnNlOjp2
aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxh
dGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNQYXltZW50UmVzcG9uc2U6OnZpc2l0QWRkaXRp
b25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgd3JhcHBlZCgpLmNhY2hlZERl
dGFpbHMoKS52aXNpdCh2aXNpdG9yKTsKIH0KIAordGVtcGxhdGUgdm9pZCBKU1BheW1lbnRSZXNw
b25zZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJik7
Cit0ZW1wbGF0ZSB2b2lkIEpTUGF5bWVudFJlc3BvbnNlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJl
bihKU0M6OlNsb3RWaXNpdG9yJik7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlm
IC8vIEVOQUJMRShQQVlNRU5UX1JFUVVFU1QpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU1BlcmZvcm1hbmNlT2JzZXJ2ZXJDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUGVyZm9ybWFuY2VPYnNlcnZlckN1c3RvbS5jcHAJKHJl
dmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUGVyZm9ybWFu
Y2VPYnNlcnZlckN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDEyICszMSwxNyBAQAog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgSlNQZXJmb3JtYW5jZU9ic2VydmVyOjp2aXNp
dEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy92b2lkIEpT
UGVyZm9ybWFuY2VPYnNlcnZlcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90Vmlz
aXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTUGVyZm9y
bWFuY2VPYnNlcnZlcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikK
IHsKICAgICB3cmFwcGVkKCkuY2FsbGJhY2soKS52aXNpdEpTRnVuY3Rpb24odmlzaXRvcik7CiB9
CiAKLWJvb2wgSlNQZXJmb3JtYW5jZU9ic2VydmVyT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1
ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgSlNDOjpTbG90
VmlzaXRvciYsIGNvbnN0IGNoYXIqKiByZWFzb24pCit0ZW1wbGF0ZSB2b2lkIEpTUGVyZm9ybWFu
Y2VPYnNlcnZlcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpBYnN0cmFjdFNsb3RWaXNp
dG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTUGVyZm9ybWFuY2VPYnNlcnZlcjo6dmlzaXRBZGRpdGlv
bmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYpOworCitib29sIEpTUGVyZm9ybWFuY2VPYnNl
cnZlck93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVu
a25vd24+IGhhbmRsZSwgdm9pZCosIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYsIGNvbnN0IGNo
YXIqKiByZWFzb24pCiB7CiAgICAgaWYgKFVOTElLRUxZKHJlYXNvbikpCiAgICAgICAgICpyZWFz
b24gPSAiUmVnaXN0ZXJlZCBQZXJmb3JtYW5jZU9ic2VydmVyIGNhbGxiYWNrIjsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUG9wU3RhdGVFdmVudEN1c3RvbS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNQb3BTdGF0ZUV2ZW50Q3VzdG9t
LmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNQ
b3BTdGF0ZUV2ZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTAsOSArOTAsMTQgQEAg
SlNWYWx1ZSBKU1BvcFN0YXRlRXZlbnQ6OnN0YXRlKEpTR2xvYmFsTwogICAgIHJldHVybiBjYWNo
ZVN0YXRlKHJlc3VsdCk7CiB9CiAKLXZvaWQgSlNQb3BTdGF0ZUV2ZW50Ojp2aXNpdEFkZGl0aW9u
YWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy92b2lkIEpTUG9wU3RhdGVF
dmVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikK
K3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTUG9wU3RhdGVFdmVudDo6dmlzaXRB
ZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB3cmFwcGVkKCkuc3Rh
dGUoKS52aXNpdCh2aXNpdG9yKTsKIH0KIAordGVtcGxhdGUgdm9pZCBKU1BvcFN0YXRlRXZlbnQ6
OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVt
cGxhdGUgdm9pZCBKU1BvcFN0YXRlRXZlbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6
U2xvdFZpc2l0b3ImKTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNQcm9taXNlUmVqZWN0aW9uRXZlbnRDdXN0b20uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUHJvbWlzZVJlamVjdGlvbkV2
ZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNQcm9taXNlUmVqZWN0aW9uRXZlbnRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zMiw5ICszMiwxNCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgSlNQcm9taXNl
UmVqZWN0aW9uRXZlbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3Im
IHZpc2l0b3IpCisvL3ZvaWQgSlNQcm9taXNlUmVqZWN0aW9uRXZlbnQ6OnZpc2l0QWRkaXRpb25h
bENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPgordm9pZCBKU1Byb21pc2VSZWplY3Rpb25FdmVudDo6dmlzaXRBZGRpdGlvbmFsQ2hp
bGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB3cmFwcGVkKCkucmVhc29uKCkudmlzaXQo
dmlzaXRvcik7CiB9CiAKK3RlbXBsYXRlIHZvaWQgSlNQcm9taXNlUmVqZWN0aW9uRXZlbnQ6OnZp
c2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxh
dGUgdm9pZCBKU1Byb21pc2VSZWplY3Rpb25FdmVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4o
SlNDOjpTbG90VmlzaXRvciYpOworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1Jlc2l6ZU9ic2VydmVyQ3VzdG9tLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1Jlc2l6ZU9ic2VydmVyQ3VzdG9t
LmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNS
ZXNpemVPYnNlcnZlckN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDExICszMCwxNiBA
QAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgSlNSZXNpemVPYnNlcnZlcjo6dmlzaXRB
ZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vdm9pZCBKU1Jl
c2l6ZU9ic2VydmVyOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2
aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNSZXNpemVPYnNlcnZl
cjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBSZXNp
emVPYnNlcnZlckNhbGxiYWNrKiBjYWxsYmFjayA9IHdyYXBwZWQoKS5jYWxsYmFja0NvbmN1cnJl
bnRseSgpOwogICAgIGlmIChjYWxsYmFjaykKICAgICAgICAgY2FsbGJhY2stPnZpc2l0SlNGdW5j
dGlvbih2aXNpdG9yKTsKIH0KIAotfQordGVtcGxhdGUgdm9pZCBKU1Jlc2l6ZU9ic2VydmVyOjp2
aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBs
YXRlIHZvaWQgSlNSZXNpemVPYnNlcnZlcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpT
bG90VmlzaXRvciYpOworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU1Jlc2l6ZU9ic2VydmVyRW50cnlDdXN0b20uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUmVzaXplT2JzZXJ2ZXJFbnRyeUN1
c3RvbS5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTUmVzaXplT2JzZXJ2ZXJFbnRyeUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDEw
ICszMCwxNSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgSlNSZXNpemVPYnNlcnZl
ckVudHJ5Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9y
KQorLy92b2lkIEpTUmVzaXplT2JzZXJ2ZXJFbnRyeTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4o
SlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2
b2lkIEpTUmVzaXplT2JzZXJ2ZXJFbnRyeTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRv
ciYgdmlzaXRvcikKIHsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qocm9vdCh3cmFwcGVkKCku
dGFyZ2V0KCkpKTsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qod3JhcHBlZCgpLmNvbnRlbnRS
ZWN0KCkpOwogfQogCi19Cit0ZW1wbGF0ZSB2b2lkIEpTUmVzaXplT2JzZXJ2ZXJFbnRyeTo6dmlz
aXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0
ZSB2b2lkIEpTUmVzaXplT2JzZXJ2ZXJFbnRyeTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlND
OjpTbG90VmlzaXRvciYpOworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NWR1ZpZXdTcGVjQ3VzdG9tLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NWR1ZpZXdTcGVjQ3VzdG9tLmNwcAkocmV2
aXNpb24gMjcxNDQzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNTVkdWaWV3U3Bl
Y0N1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDEwICszMCwxNSBAQAogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLXZvaWQgSlNTVkdWaWV3U3BlYzo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRy
ZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vdm9pZCBKU1NWR1ZpZXdTcGVjOjp2aXNp
dEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8
dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNTVkdWaWV3U3BlYzo6dmlzaXRBZGRpdGlvbmFsQ2hp
bGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBBU1NFUlQod3JhcHBlZCgpLmNvbnRleHRF
bGVtZW50Q29uY3VycmVudGx5KCkuZ2V0KCkpOwogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChy
b290KHdyYXBwZWQoKS5jb250ZXh0RWxlbWVudENvbmN1cnJlbnRseSgpLmdldCgpKSk7CiB9CiAK
LX0KK3RlbXBsYXRlIHZvaWQgSlNTVkdWaWV3U3BlYzo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4o
SlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTU1ZHVmlld1NwZWM6
OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImKTsKKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNTZXJ2aWNl
V29ya2VyR2xvYmFsU2NvcGVDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTU2VydmljZVdvcmtlckdsb2JhbFNjb3BlQ3VzdG9tLmNwcAkocmV2aXNp
b24gMjcxNDQzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNTZXJ2aWNlV29ya2Vy
R2xvYmFsU2NvcGVDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCwxMiArMzQsMTcgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCi12b2lkIEpTU2Vy
dmljZVdvcmtlckdsb2JhbFNjb3BlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRv
ciYgdmlzaXRvcikKKy8vdm9pZCBKU1NlcnZpY2VXb3JrZXJHbG9iYWxTY29wZTo6dmlzaXRBZGRp
dGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPgordm9pZCBKU1NlcnZpY2VXb3JrZXJHbG9iYWxTY29wZTo6dmlzaXRBZGRpdGlvbmFs
Q2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qo
JndyYXBwZWQoKS5jbGllbnRzKCkpOwogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdCgmd3JhcHBl
ZCgpLnJlZ2lzdHJhdGlvbigpKTsKIH0KIAordGVtcGxhdGUgdm9pZCBKU1NlcnZpY2VXb3JrZXJH
bG9iYWxTY29wZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oQWJzdHJhY3RTbG90VmlzaXRvciYp
OwordGVtcGxhdGUgdm9pZCBKU1NlcnZpY2VXb3JrZXJHbG9iYWxTY29wZTo6dmlzaXRBZGRpdGlv
bmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAj
ZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU3R5bGVTaGVldEN1c3Rv
bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNTdHlsZVNo
ZWV0Q3VzdG9tLmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNTdHlsZVNoZWV0Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsMTEgKzMw
LDE2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBKU1N0eWxlU2hlZXQ6OnZpc2l0
QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3ZvaWQgSlNT
dHlsZVNoZWV0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNp
dG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNTdHlsZVNoZWV0Ojp2aXNp
dEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHZpc2l0b3IuYWRk
T3BhcXVlUm9vdChyb290KCZ3cmFwcGVkKCkpKTsKIH0KIAordGVtcGxhdGUgdm9pZCBKU1N0eWxl
U2hlZXQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3Rl
bXBsYXRlIHZvaWQgSlNTdHlsZVNoZWV0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90Vmlz
aXRvciYpOworCiBKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkpTR2xvYmFsT2Jq
ZWN0KiwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmPFN0eWxlU2hlZXQ+JiYg
c3R5bGVTaGVldCkKIHsKICAgICBpZiAoc3R5bGVTaGVldC0+aXNDU1NTdHlsZVNoZWV0KCkpCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1RleHRUcmFja0N1ZUN1c3RvbS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNUZXh0VHJhY2tDdWVD
dXN0b20uY3BwCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU1RleHRUcmFja0N1ZUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDcg
QEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKLWJvb2wgSlNU
ZXh0VHJhY2tDdWVPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8
SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3Qg
Y2hhcioqIHJlYXNvbikKK2Jvb2wgSlNUZXh0VHJhY2tDdWVPd25lcjo6aXNSZWFjaGFibGVGcm9t
T3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBBYnN0
cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQogewogICAgIEpT
VGV4dFRyYWNrQ3VlKiBqc1RleHRUcmFja0N1ZSA9IGpzQ2FzdDxKU1RleHRUcmFja0N1ZSo+KGhh
bmRsZS5zbG90KCktPmFzQ2VsbCgpKTsKICAgICBUZXh0VHJhY2tDdWUmIHRleHRUcmFja0N1ZSA9
IGpzVGV4dFRyYWNrQ3VlLT53cmFwcGVkKCk7CkBAIC04MiwxMiArODIsMTcgQEAgSlNWYWx1ZSB0
b0pTKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYgogICAgIHJldHVybiB3cmFwKGxleGljYWxH
bG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdCwgY3VlKTsKIH0KIAotdm9pZCBKU1RleHRUcmFja0N1
ZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3ZvaWQg
SlNUZXh0VHJhY2tDdWU6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNp
dG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNUZXh0VHJhY2tDdWU6OnZp
c2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgaWYgKFRleHRU
cmFjayogdGV4dFRyYWNrID0gd3JhcHBlZCgpLnRyYWNrKCkpCiAgICAgICAgIHZpc2l0b3IuYWRk
T3BhcXVlUm9vdChyb290KHRleHRUcmFjaykpOwogfQogCit0ZW1wbGF0ZSB2b2lkIEpTVGV4dFRy
YWNrQ3VlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0
ZW1wbGF0ZSB2b2lkIEpTVGV4dFRyYWNrQ3VlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90
VmlzaXRvciYpOworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZgpJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNUZXh0VHJhY2tDdXN0b20uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVGV4dFRyYWNrQ3VzdG9tLmNwcAkocmV2
aXNpb24gMjcxNDQzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNUZXh0VHJhY2tD
dXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiwxMSArMzYsMTYgQEAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKLXZvaWQgSlNUZXh0VHJhY2s6OnZpc2l0
QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy92b2lkIEpTVGV4dFRy
YWNrOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBs
YXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTVGV4dFRyYWNrOjp2aXNpdEFkZGl0aW9uYWxD
aGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChy
b290KCZ3cmFwcGVkKCkpKTsKIH0KIAordGVtcGxhdGUgdm9pZCBKU1RleHRUcmFjazo6dmlzaXRB
ZGRpdGlvbmFsQ2hpbGRyZW4oQWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBK
U1RleHRUcmFjazo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKKwogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTVGV4dFRyYWNrTGlzdEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNUZXh0VHJhY2tMaXN0Q3VzdG9tLmNwcAkocmV2aXNpb24gMjcx
NDQzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNUZXh0VHJhY2tMaXN0Q3VzdG9t
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsMTEgKzM2LDE2IEBACiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCi12b2lkIEpTVGV4dFRyYWNrTGlzdDo6dmlzaXRB
ZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vdm9pZCBKU1Rl
eHRUcmFja0xpc3Q6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZp
c2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1RleHRUcmFja0xpc3Q6
OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgdmlzaXRv
ci5hZGRPcGFxdWVSb290KHJvb3Qod3JhcHBlZCgpLmVsZW1lbnQoKSkpOwogfQogICAgIAordGVt
cGxhdGUgdm9pZCBKU1RleHRUcmFja0xpc3Q6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEFic3Ry
YWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNUZXh0VHJhY2tMaXN0Ojp2aXNpdEFk
ZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYpOworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CiAKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNUcmVlV2Fsa2Vy
Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1Ry
ZWVXYWxrZXJDdXN0b20uY3BwCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU1RyZWVXYWxrZXJDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNSwx
MCArMjUsMTUgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIEpTVHJlZVdhbGtlcjo6
dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vdm9p
ZCBKU1RyZWVXYWxrZXI6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3Im
IHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1RyZWVXYWxrZXI6
OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgaWYgKE5v
ZGVGaWx0ZXIqIGZpbHRlciA9IHdyYXBwZWQoKS5maWx0ZXIoKSkKICAgICAgICAgdmlzaXRvci5h
ZGRPcGFxdWVSb290KGZpbHRlcik7CiB9CiAKLX0KK3RlbXBsYXRlIHZvaWQgSlNUcmVlV2Fsa2Vy
Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3Rl
bXBsYXRlIHZvaWQgSlNUcmVlV2Fsa2VyOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNs
b3RWaXNpdG9yJik7CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTVW5kb0l0ZW1DdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVW5kb0l0ZW1DdXN0b20uY3BwCShyZXZpc2lvbiAyNzE0
NDMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1VuZG9JdGVtQ3VzdG9tLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjksMTMgKzI5LDE4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAotdm9pZCBKU1VuZG9JdGVtOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNp
dG9yJiB2aXNpdG9yKQorLy92b2lkIEpTVW5kb0l0ZW06OnZpc2l0QWRkaXRpb25hbENoaWxkcmVu
KEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgor
dm9pZCBKU1VuZG9JdGVtOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9y
KQogewogICAgIHdyYXBwZWQoKS51bmRvSGFuZGxlcigpLnZpc2l0SlNGdW5jdGlvbih2aXNpdG9y
KTsKICAgICB3cmFwcGVkKCkucmVkb0hhbmRsZXIoKS52aXNpdEpTRnVuY3Rpb24odmlzaXRvcik7
CiB9CiAKLWJvb2wgSlNVbmRvSXRlbU93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhK
U0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIEpTQzo6U2xvdFZpc2l0b3Im
IHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCit0ZW1wbGF0ZSB2b2lkIEpTVW5kb0l0ZW06
OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVt
cGxhdGUgdm9pZCBKU1VuZG9JdGVtOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RW
aXNpdG9yJik7CisKK2Jvb2wgSlNVbmRvSXRlbU93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVS
b290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIEpTQzo6QWJzdHJh
Y3RTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikKIHsKICAgICBpZiAo
VU5MSUtFTFkocmVhc29uKSkKICAgICAgICAgKnJlYXNvbiA9ICJEb2N1bWVudCBpcyBhbiBvcGFx
dWUgcm9vdC4iOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNWYWx1ZUluV3Jh
cHBlZE9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
VmFsdWVJbldyYXBwZWRPYmplY3QuaAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNWYWx1ZUluV3JhcHBlZE9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBA
IC00MCw3ICs0MCw4IEBAIHB1YmxpYzoKICAgICBvcGVyYXRvciBKU0M6OkpTVmFsdWUoKSBjb25z
dDsKICAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3Q7CiAgICAgSlNWYWx1ZUluV3Jh
cHBlZE9iamVjdCYgb3BlcmF0b3I9KGNvbnN0IEpTVmFsdWVJbldyYXBwZWRPYmplY3QmIG90aGVy
KTsKLSAgICB2b2lkIHZpc2l0KEpTQzo6U2xvdFZpc2l0b3ImKSBjb25zdDsKKy8vICAgIHZvaWQg
dmlzaXQoSlNDOjpTbG90VmlzaXRvciYpIGNvbnN0OworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZp
c2l0b3I+IHZvaWQgdmlzaXQoVmlzaXRvciYpIGNvbnN0OwogICAgIHZvaWQgY2xlYXIoKTsKIAog
cHJpdmF0ZToKQEAgLTk4LDcgKzk5LDggQEAgaW5saW5lIEpTVmFsdWVJbldyYXBwZWRPYmplY3Qm
IEpTVmFsdWVJbgogICAgIHJldHVybiAqdGhpczsKIH0KIAotaW5saW5lIHZvaWQgSlNWYWx1ZUlu
V3JhcHBlZE9iamVjdDo6dmlzaXQoSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikgY29uc3QKK3Rl
bXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+CitpbmxpbmUgdm9pZCBKU1ZhbHVlSW5XcmFwcGVkT2Jq
ZWN0Ojp2aXNpdChWaXNpdG9yJiB2aXNpdG9yKSBjb25zdAogewogICAgIHJldHVybiBXVEY6OnN3
aXRjaE9uKG1fdmFsdWUsIFtdIChKU0M6OkpTVmFsdWUpIHsKICAgICAgICAgLy8gTm90aGluZyB0
byB2aXNpdC4KQEAgLTEwNyw2ICsxMDksOSBAQCBpbmxpbmUgdm9pZCBKU1ZhbHVlSW5XcmFwcGVk
T2JqZWN0Ojp2aXNpCiAgICAgfSk7CiB9CiAKK3RlbXBsYXRlIHZvaWQgSlNWYWx1ZUluV3JhcHBl
ZE9iamVjdDo6dmlzaXQoSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJikgY29uc3Q7Cit0ZW1wbGF0
ZSB2b2lkIEpTVmFsdWVJbldyYXBwZWRPYmplY3Q6OnZpc2l0KEpTQzo6U2xvdFZpc2l0b3ImKSBj
b25zdDsKKwogaW5saW5lIHZvaWQgSlNWYWx1ZUluV3JhcHBlZE9iamVjdDo6Y2xlYXIoKQogewog
ICAgIFdURjo6c3dpdGNoT24obV92YWx1ZSwgW10gKFdlYWsmIHZhbHVlKSB7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1ZpZGVvVHJhY2tDdXN0b20uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVmlkZW9UcmFja0N1c3RvbS5jcHAJKHJl
dmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVmlkZW9UcmFj
a0N1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDExICszNSwxNiBAQAogbmFtZXNwYWNl
IFdlYkNvcmUgewogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAotdm9pZCBKU1ZpZGVvVHJhY2s6OnZp
c2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy92b2lkIEpTVmlk
ZW9UcmFjazo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0
ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1ZpZGVvVHJhY2s6OnZpc2l0QWRkaXRp
b25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVS
b290KHJvb3QoJndyYXBwZWQoKSkpOwogfQogCit0ZW1wbGF0ZSB2b2lkIEpTVmlkZW9UcmFjazo6
dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1w
bGF0ZSB2b2lkIEpTVmlkZW9UcmFjazo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90
VmlzaXRvciYpOworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZgpJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNWaWRlb1RyYWNrTGlzdEN1c3RvbS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNWaWRlb1RyYWNrTGlzdEN1c3Rv
bS5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
VmlkZW9UcmFja0xpc3RDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSwxMSArMzUsMTYg
QEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKLXZvaWQgSlNW
aWRlb1RyYWNrTGlzdDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0
b3IpCisvL3ZvaWQgSlNWaWRlb1RyYWNrTGlzdDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xv
dFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1Zp
ZGVvVHJhY2tMaXN0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQog
ewogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChyb290KHdyYXBwZWQoKS5lbGVtZW50KCkpKTsK
IH0KIAordGVtcGxhdGUgdm9pZCBKU1ZpZGVvVHJhY2tMaXN0Ojp2aXNpdEFkZGl0aW9uYWxDaGls
ZHJlbihBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTVmlkZW9UcmFja0xp
c3Q6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CisKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKIAogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U1dlYkdMMlJlbmRlcmluZ0NvbnRleHRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViR0wyUmVuZGVyaW5nQ29udGV4dEN1c3RvbS5jcHAJKHJl
dmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViR0wyUmVu
ZGVyaW5nQ29udGV4dEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDEyICszMywxNyBA
QAogbmFtZXNwYWNlIFdlYkNvcmUgewogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAotdm9pZCBKU1dl
YkdMMlJlbmRlcmluZ0NvbnRleHQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9y
JiB2aXNpdG9yKQorLy92b2lkIEpTV2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6dmlzaXRBZGRpdGlv
bmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNp
dG9yPgordm9pZCBKU1dlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OnZpc2l0QWRkaXRpb25hbENoaWxk
cmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KCZ3cmFw
cGVkKCkpOwogICAgIHdyYXBwZWQoKS5hZGRNZW1iZXJzVG9PcGFxdWVSb290cyh2aXNpdG9yKTsK
IH0KIAordGVtcGxhdGUgdm9pZCBKU1dlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OnZpc2l0QWRkaXRp
b25hbENoaWxkcmVuKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBK
U1dlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xv
dFZpc2l0b3ImKTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxF
KFdFQkdMKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJHTFJlbmRlcmlu
Z0NvbnRleHRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTV2ViR0xSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcAkocmV2aXNpb24gMjcxNDQzKQor
KysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRDdXN0
b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMywxMiArMzMsMTcgQEAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKLXZvaWQgSlNXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy92b2lk
IEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90Vmlz
aXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTV2ViR0xS
ZW5kZXJpbmdDb250ZXh0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9y
KQogewogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdCgmd3JhcHBlZCgpKTsKICAgICB3cmFwcGVk
KCkuYWRkTWVtYmVyc1RvT3BhcXVlUm9vdHModmlzaXRvcik7CiB9CiAKK3RlbXBsYXRlIHZvaWQg
SlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEFic3RyYWN0
U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZp
c2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CisKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShXRUJHTCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTV29ya2VyR2xvYmFsU2NvcGVCYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckdsb2JhbFNjb3BlQmFzZS5jcHAJKHJldmlz
aW9uIDI3MTQ0MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyR2xvYmFs
U2NvcGVCYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODcsNyArODcsOCBAQCB2b2lkIEpTV29y
a2VyR2xvYmFsU2NvcGVCYXNlOjpmaW5pc2hDcmVhCiAgICAgQVNTRVJUKGluaGVyaXRzKHZtLCBp
bmZvKCkpKTsKIH0KIAotdm9pZCBKU1dvcmtlckdsb2JhbFNjb3BlQmFzZTo6dmlzaXRDaGlsZHJl
bihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUg
VmlzaXRvcj4KK3ZvaWQgSlNXb3JrZXJHbG9iYWxTY29wZUJhc2U6OnZpc2l0Q2hpbGRyZW5JbXBs
KEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU1dvcmtlckdsb2JhbFNj
b3BlQmFzZSogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1dvcmtlckdsb2JhbFNjb3BlQmFzZSo+KGNl
bGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsK
QEAgLTk1LDYgKzk2LDggQEAgdm9pZCBKU1dvcmtlckdsb2JhbFNjb3BlQmFzZTo6dmlzaXRDaGls
ZAogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fcHJveHkpOwogfQogCitERUZJTkVf
VklTSVRfQ0hJTERSRU4oSlNXb3JrZXJHbG9iYWxTY29wZUJhc2UpOworCiB2b2lkIEpTV29ya2Vy
R2xvYmFsU2NvcGVCYXNlOjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKIHsKICAgICBzdGF0aWNfY2Fz
dDxKU1dvcmtlckdsb2JhbFNjb3BlQmFzZSo+KGNlbGwpLT5KU1dvcmtlckdsb2JhbFNjb3BlQmFz
ZTo6fkpTV29ya2VyR2xvYmFsU2NvcGVCYXNlKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU1dvcmtlckdsb2JhbFNjb3BlQmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyR2xvYmFsU2NvcGVCYXNlLmgJKHJldmlzaW9uIDI3
MTQ0MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyR2xvYmFsU2NvcGVC
YXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTc5LDcgKzc5LDcgQEAgcHJvdGVjdGVkOgogICAgIEpT
V29ya2VyR2xvYmFsU2NvcGVCYXNlKEpTQzo6Vk0mLCBKU0M6OlN0cnVjdHVyZSosIFJlZlB0cjxX
b3JrZXJHbG9iYWxTY29wZT4mJik7CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJiwg
SlNDOjpKU1Byb3h5Kik7CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQzo6SlND
ZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAK
IHByaXZhdGU6CiAgICAgUmVmUHRyPFdvcmtlckdsb2JhbFNjb3BlPiBtX3dyYXBwZWQ7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckdsb2JhbFNjb3BlQ3VzdG9tLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckdsb2Jh
bFNjb3BlQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNXb3JrZXJHbG9iYWxTY29wZUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMzLDcgKzMzLDkgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBKU0M7
CiAKLXZvaWQgSlNXb3JrZXJHbG9iYWxTY29wZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xv
dFZpc2l0b3ImIHZpc2l0b3IpCisvL3ZvaWQgSlNXb3JrZXJHbG9iYWxTY29wZTo6dmlzaXRBZGRp
dGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPgordm9pZCBKU1dvcmtlckdsb2JhbFNjb3BlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJl
bihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGlmIChhdXRvKiBsb2NhdGlvbiA9IHdyYXBwZWQo
KS5vcHRpb25hbExvY2F0aW9uKCkpCiAgICAgICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChsb2Nh
dGlvbik7CkBAIC00OCw2ICs1MCw5IEBAIHZvaWQgSlNXb3JrZXJHbG9iYWxTY29wZTo6dmlzaXRB
ZGRpdGlvbmEKICAgICB3cmFwcGVkKCkudmlzaXRKU0V2ZW50TGlzdGVuZXJzKHZpc2l0b3IpOwog
fQogCit0ZW1wbGF0ZSB2b2lkIEpTV29ya2VyR2xvYmFsU2NvcGU6OnZpc2l0QWRkaXRpb25hbENo
aWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNXb3JrZXJHbG9i
YWxTY29wZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKKwogSlNWYWx1
ZSBKU1dvcmtlckdsb2JhbFNjb3BlOjpxdWV1ZU1pY3JvdGFzayhKU0dsb2JhbE9iamVjdCYgbGV4
aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lJiBjYWxsRnJhbWUpCiB7CiAgICAgVk0mIHZtID0g
bGV4aWNhbEdsb2JhbE9iamVjdC52bSgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNXb3JrZXJOYXZpZ2F0b3JDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyTmF2aWdhdG9yQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcx
NDQzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrZXJOYXZpZ2F0b3JDdXN0
b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw5ICsyOCwxNCBAQAogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLXZvaWQgSlNXb3JrZXJOYXZpZ2F0b3I6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVu
KEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3ZvaWQgSlNXb3JrZXJOYXZpZ2F0b3I6OnZp
c2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0
ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1dvcmtlck5hdmlnYXRvcjo6dmlzaXRBZGRpdGlv
bmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJv
b3Qoc3RhdGljX2Nhc3Q8TmF2aWdhdG9yQmFzZSo+KCZ3cmFwcGVkKCkpKTsKIH0KIAotfQordGVt
cGxhdGUgdm9pZCBKU1dvcmtlck5hdmlnYXRvcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlND
OjpBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTV29ya2VyTmF2aWdhdG9y
Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJik7CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2xl
dEdsb2JhbFNjb3BlQmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNXb3JrbGV0R2xvYmFsU2NvcGVCYXNlLmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrbGV0R2xvYmFsU2NvcGVCYXNlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNzcsNyArNzcsOCBAQCB2b2lkIEpTV29ya2xldEdsb2JhbFNjb3Bl
QmFzZTo6ZmluaXNoQ3JlCiAgICAgQVNTRVJUKGluaGVyaXRzKHZtLCBpbmZvKCkpKTsKIH0KIAot
dm9pZCBKU1dvcmtsZXRHbG9iYWxTY29wZUJhc2U6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxs
LCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lk
IEpTV29ya2xldEdsb2JhbFNjb3BlQmFzZTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxs
LCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNX
b3JrbGV0R2xvYmFsU2NvcGVCYXNlKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhF
UklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtODUsNiArODYsOCBAQCB2b2lkIEpTV29ya2xl
dEdsb2JhbFNjb3BlQmFzZTo6dmlzaXRDaGlsCiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVj
dC0+bV9wcm94eSk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU1dvcmtsZXRHbG9iYWxT
Y29wZUJhc2UpOworCiB2b2lkIEpTV29ya2xldEdsb2JhbFNjb3BlQmFzZTo6ZGVzdHJveShKU0Nl
bGwqIGNlbGwpCiB7CiAgICAgc3RhdGljX2Nhc3Q8SlNXb3JrbGV0R2xvYmFsU2NvcGVCYXNlKj4o
Y2VsbCktPkpTV29ya2xldEdsb2JhbFNjb3BlQmFzZTo6fkpTV29ya2xldEdsb2JhbFNjb3BlQmFz
ZSgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrbGV0R2xvYmFsU2Nv
cGVCYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXb3Jr
bGV0R2xvYmFsU2NvcGVCYXNlLmgJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTV29ya2xldEdsb2JhbFNjb3BlQmFzZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC02Nyw3ICs2Nyw3IEBAIHByb3RlY3RlZDoKICAgICBKU1dvcmtsZXRHbG9iYWxTY29wZUJhc2Uo
SlNDOjpWTSYsIEpTQzo6U3RydWN0dXJlKiwgUmVmUHRyPFdvcmtsZXRHbG9iYWxTY29wZT4mJik7
CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJiwgSlNDOjpKU1Byb3h5Kik7CiAKLSAg
ICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRv
ciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKIHByaXZhdGU6CiAgICAgUmVmUHRy
PFdvcmtsZXRHbG9iYWxTY29wZT4gbV93cmFwcGVkOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNYTUxIdHRwUmVxdWVzdEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNYTUxIdHRwUmVxdWVzdEN1c3RvbS5jcHAJKHJldmlzaW9u
IDI3MTQ0MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTWE1MSHR0cFJlcXVlc3RD
dXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0MSw5IEBACiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCi12b2lkIEpTWE1MSHR0cFJlcXVlc3Q6OnZp
c2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy92b2lkIEpTWE1M
SHR0cFJlcXVlc3Q6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9y
KQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNYTUxIdHRwUmVxdWVzdDo6dmlz
aXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBpZiAoYXV0byog
dXBsb2FkID0gd3JhcHBlZCgpLm9wdGlvbmFsVXBsb2FkKCkpCiAgICAgICAgIHZpc2l0b3IuYWRk
T3BhcXVlUm9vdCh1cGxvYWQpOwpAQCAtNTAsNiArNTIsOSBAQCB2b2lkIEpTWE1MSHR0cFJlcXVl
c3Q6OnZpc2l0QWRkaXRpb25hbENoCiAgICAgICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChyZXNw
b25zZURvY3VtZW50KTsKIH0KIAordGVtcGxhdGUgdm9pZCBKU1hNTEh0dHBSZXF1ZXN0Ojp2aXNp
dEFkZGl0aW9uYWxDaGlsZHJlbihBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lk
IEpTWE1MSHR0cFJlcXVlc3Q6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJik7
CisKIEpTVmFsdWUgSlNYTUxIdHRwUmVxdWVzdDo6cmVzcG9uc2UoSlNHbG9iYWxPYmplY3QmIGxl
eGljYWxHbG9iYWxPYmplY3QpIGNvbnN0CiB7CiAgICAgYXV0byBjYWNoZVJlc3VsdCA9IFsmXSAo
SlNWYWx1ZSB2YWx1ZSkgLT4gSlNWYWx1ZSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU1hQYXRoUmVzdWx0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU1hQYXRoUmVzdWx0Q3VzdG9tLmNwcAkocmV2aXNpb24gMjcxNDQzKQor
KysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNYUGF0aFJlc3VsdEN1c3RvbS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDkgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12
b2lkIEpTWFBhdGhSZXN1bHQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0
b3ImIHZpc2l0b3IpCisvL3ZvaWQgSlNYUGF0aFJlc3VsdDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRy
ZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+
Cit2b2lkIEpTWFBhdGhSZXN1bHQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZp
c2l0b3IpCiB7CiAgICAgYXV0byYgdmFsdWUgPSB3cmFwcGVkKCkudmFsdWUoKTsKICAgICBpZiAo
dmFsdWUuaXNOb2RlU2V0KCkpIHsKQEAgLTQxLDQgKzQzLDcgQEAgdm9pZCBKU1hQYXRoUmVzdWx0
Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZAogICAgIH0KIH0KIAordGVtcGxhdGUgdm9pZCBKU1hQYXRo
UmVzdWx0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3Im
KTsKK3RlbXBsYXRlIHZvaWQgSlNYUGF0aFJlc3VsdDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4o
SlNDOjpTbG90VmlzaXRvciYpOworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dlYkNvcmVUeXBlZEFycmF5
Q29udHJvbGxlci5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL1dlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTU2LDcgKzU2LDcgQEAgYm9vbCBXZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXI6OmlzQXRvbQog
ICAgIHJldHVybiBtX2FsbG93QXRvbWljc1dhaXQ7CiB9CiAKLWJvb2wgV2ViQ29yZVR5cGVkQXJy
YXlDb250cm9sbGVyOjpKU0FycmF5QnVmZmVyT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJv
b3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgSlNDOjpTbG90Vmlz
aXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikKK2Jvb2wgV2ViQ29yZVR5cGVkQXJy
YXlDb250cm9sbGVyOjpKU0FycmF5QnVmZmVyT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJv
b3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgSlNDOjpBYnN0cmFj
dFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQogewogICAgIGlmIChV
TkxJS0VMWShyZWFzb24pKQogICAgICAgICAqcmVhc29uID0gIkFycmF5QnVmZmVyIGlzIG9wYXF1
ZSByb290IjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dlYkNvcmVUeXBlZEFy
cmF5Q29udHJvbGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L1dlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlci5oCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXIuaAkod29y
a2luZyBjb3B5KQpAQCAtNDgsNyArNDgsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIGNsYXNz
IEpTQXJyYXlCdWZmZXJPd25lciA6IHB1YmxpYyBKU0M6OldlYWtIYW5kbGVPd25lciB7CiAgICAg
cHVibGljOgotICAgICAgICBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFu
ZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6U2xvdFZpc2l0b3ImLCBjb25z
dCBjaGFyKiopIG92ZXJyaWRlOworICAgICAgICBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJv
b3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6QWJzdHJh
Y3RTbG90VmlzaXRvciYsIGNvbnN0IGNoYXIqKikgb3ZlcnJpZGU7CiAgICAgICAgIHZvaWQgZmlu
YWxpemUoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCkgb3ZlcnJpZGU7
CiAgICAgfTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2Vu
ZXJhdG9ySlMucG0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy9Db2RlR2VuZXJhdG9ySlMucG0JKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCSh3b3JraW5nIGNvcHkpCkBAIC0z
MDc4LDggKzMwNzgsMTAgQEAgc3ViIEdlbmVyYXRlSGVhZGVyCiAKICAgICAjIHZpc2l0IGZ1bmN0
aW9uCiAgICAgaWYgKCRuZWVkc1Zpc2l0Q2hpbGRyZW4pIHsKLSAgICAgICAgcHVzaChAaGVhZGVy
Q29udGVudCwgIiAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIEpTQzo6U2xv
dFZpc2l0b3ImKTtcbiIpOwotICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHZvaWQg
dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYpO1xuIikgaWYgJGludGVy
ZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57SlNDdXN0b21NYXJrRnVuY3Rpb259OworICAgICAg
ICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47XG4iKTsK
KyMgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgdm9pZCB2aXNpdEFkZGl0aW9uYWxD
aGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJik7XG4iKSBpZiAkaW50ZXJmYWNlLT5leHRlbmRlZEF0
dHJpYnV0ZXMtPntKU0N1c3RvbU1hcmtGdW5jdGlvbn07ICMgbWxhbQorIyAgICAgICAgcHVzaChA
aGVhZGVyQ29udGVudCwgIiAgICB2b2lkIHZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6QWJz
dHJhY3RTbG90VmlzaXRvciYpO1xuIikgaWYgJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVz
LT57SlNDdXN0b21NYXJrRnVuY3Rpb259OworICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAi
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgdmlzaXRBZGRpdGlvbmFsQ2hpbGRy
ZW4oVmlzaXRvciYpO1xuIikgaWYgJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57SlND
dXN0b21NYXJrRnVuY3Rpb259OwogICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiXG4iKTsK
IAogICAgICAgICBpZiAoJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57SlNDdXN0b21N
YXJrRnVuY3Rpb259KSB7CkBAIC0zMDk0LDcgKzMwOTYsOSBAQCBzdWIgR2VuZXJhdGVIZWFkZXIK
ICAgICAgICAgICAgICMgdGhhdCB0aGUgR0MgY2FsbHMgdG8gYXNrIGFuIG9iamVjdCBpcyBpdCB3
b3VsZCBsaWtlIHRvIG1hcmsgYW55dGhpbmcgZWxzZSBhZnRlciB0aGUKICAgICAgICAgICAgICMg
cHJvZ3JhbSByZXN1bWVkIHNpbmNlIHRoZSBsYXN0IGNhbGwgdG8gdmlzaXRDaGlsZHJlbiBvciB2
aXNpdE91dHB1dENvbnN0cmFpbnRzLiBTaW5jZQogICAgICAgICAgICAgIyB0aGlzIGp1c3QgY2Fs
bHMgdmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4sIHlvdSB1c3VhbGx5IGRvbid0IGhhdmUgdG8gd29y
cnkgYWJvdXQgdGhpcy4KLSAgICAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgc3Rh
dGljIHZvaWQgdmlzaXRPdXRwdXRDb25zdHJhaW50cyhKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9y
Jik7XG4iKTsKKyAgICAgICAgICAgICMgbWxhbSBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHN0
YXRpYyB2b2lkIHZpc2l0T3V0cHV0Q29uc3RyYWludHMoSlNDZWxsKiwgSlNDOjpTbG90VmlzaXRv
ciYpO1xuIik7CisgICAgICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHN0YXRpYyB2
b2lkIHZpc2l0T3V0cHV0Q29uc3RyYWludHMoSlNDZWxsKiwgSlNDOjpBYnN0cmFjdFNsb3RWaXNp
dG9yJik7XG4iKTsKKyAgICAgICAgICAgICMgbWxhbSBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAg
IERFQ0xBUkVfVklTSVRfT1VUUFVUX0NPTlNUUkFJTlRTO1xuIik7CiAgICAgICAgIH0KICAgICB9
CiAKQEAgLTMyMTUsNyArMzIxOSw3IEBAIHN1YiBHZW5lcmF0ZUhlYWRlcgogICAgICAgICB9CiAg
ICAgICAgICRoZWFkZXJJbmNsdWRlc3siPHd0Zi9OZXZlckRlc3Ryb3llZC5oPiJ9ID0gMTsKICAg
ICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgInB1YmxpYzpcbiIpOwotICAgICAgICBwdXNoKEBo
ZWFkZXJDb250ZW50LCAiICAgIGJvb2wgaXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpI
YW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCwgSlNDOjpTbG90VmlzaXRvciYsIGNv
bnN0IGNoYXIqKikgJHtvdmVycmlkZURlY2x9O1xuIik7CisgICAgICAgIHB1c2goQGhlYWRlckNv
bnRlbnQsICIgICAgYm9vbCBpc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxK
U0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0LCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImLCBj
b25zdCBjaGFyKiopICR7b3ZlcnJpZGVEZWNsfTtcbiIpOwogICAgICAgICBwdXNoKEBoZWFkZXJD
b250ZW50LCAiICAgIHZvaWQgZmluYWxpemUoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9p
ZCogY29udGV4dCkgJHtvdmVycmlkZURlY2x9O1xuIik7CiAgICAgICAgIHB1c2goQGhlYWRlckNv
bnRlbnQsICJ9O1xuIik7CiAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJcbiIpOwpAQCAt
NDkyOCw2ICs0OTMyLDcgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICBBZGRUb0lt
cGxJbmNsdWRlcygiRE9NSXNvU3Vic3BhY2VzLmgiKTsKICAgICBBZGRUb0ltcGxJbmNsdWRlcygi
V2ViQ29yZUpTQ2xpZW50RGF0YS5oIik7CiAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIjxKYXZhU2Ny
aXB0Q29yZS9KU0Rlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZS5oPiIpOworICAgIEFkZFRv
SW1wbEluY2x1ZGVzKCI8SmF2YVNjcmlwdENvcmUvU2xvdFZpc2l0b3JNYWNyb3MuaD4iKTsKICAg
ICBBZGRUb0ltcGxJbmNsdWRlcygiPEphdmFTY3JpcHRDb3JlL1N1YnNwYWNlSW5saW5lcy5oPiIp
OwogICAgIHB1c2goQGltcGxDb250ZW50LCAiSlNDOjpJc29TdWJzcGFjZSogJHtjbGFzc05hbWV9
OjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pXG4iKTsKICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIntcbiIpOwpAQCAtNDk1NSw3ICs0OTYwLDggQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRp
b24KICAgICBwdXNoKEBpbXBsQ29udGVudCwgIn1cblxuIik7CiAKICAgICBpZiAoJG5lZWRzVmlz
aXRDaGlsZHJlbikgewotICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgInZvaWQgJHtjbGFzc05h
bWV9Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpXG4i
KTsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
PlxuIik7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAidm9pZCAke2NsYXNzTmFtZX06OnZp
c2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcilcbiIpOwogICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgIntcbiIpOwogICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIiAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PCR7Y2xhc3NOYW1lfSo+KGNlbGwpO1xu
Iik7CiAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5I
RVJJVFModGhpc09iamVjdCwgaW5mbygpKTtcbiIpOwpAQCAtNDk4MCw4ICs0OTg2LDEwIEBAIHN1
YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICJ9XG5cbiIpOworICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIkRFRklORV9WSVNJVF9DSElMRFJFTigke2NsYXNzTmFtZX0pO1xuXG4iKTsKKwogICAgICAg
ICBpZiAoJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57SlNDdXN0b21NYXJrRnVuY3Rp
b259KSB7Ci0gICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgInZvaWQgJHtjbGFzc05hbWV9
Ojp2aXNpdE91dHB1dENvbnN0cmFpbnRzKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0
b3IpXG4iKTsKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAidm9pZCAke2NsYXNzTmFt
ZX06OnZpc2l0T3V0cHV0Q29uc3RyYWludHMoSlNDZWxsKiBjZWxsLCBBYnN0cmFjdFNsb3RWaXNp
dG9yJiB2aXNpdG9yKVxuIik7CiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIntcbiIp
OwogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgYXV0byogdGhpc09iamVjdCA9
IGpzQ2FzdDwke2NsYXNzTmFtZX0qPihjZWxsKTtcbiIpOwogICAgICAgICAgICAgcHVzaChAaW1w
bENvbnRlbnQsICIgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZv
KCkpO1xuIik7CkBAIC01MDIyLDcgKzUwMzAsNyBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlv
bgogICAgIH0KIAogICAgIGlmIChTaG91bGRHZW5lcmF0ZVdyYXBwZXJPd25lckNvZGUoJGhhc1Bh
cmVudCwgJGludGVyZmFjZSkgJiYgIUdldEN1c3RvbUlzUmVhY2hhYmxlKCRpbnRlcmZhY2UpKSB7
Ci0gICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiYm9vbCBKUyR7aW50ZXJmYWNlTmFtZX1Pd25l
cjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBo
YW5kbGUsIHZvaWQqLCBTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbilc
biIpOworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgImJvb2wgSlMke2ludGVyZmFjZU5hbWV9
T3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93
bj4gaGFuZGxlLCB2b2lkKiwgQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hh
cioqIHJlYXNvbilcbiIpOwogICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIntcbiIpOwogICAg
ICAgICAjIEFsbCBBY3RpdmVET01PYmplY3RzIGltcGxlbWVudCBoYXNQZW5kaW5nQWN0aXZpdHko
KSwgYnV0IG5vdCBhbGwgb2YgdGhlbQogICAgICAgICAjIGluY3JlbWVudCB0aGVpciBDKysgcmVm
ZXJlbmNlIGNvdW50cyB3aGVuIGhhc1BlbmRpbmdBY3Rpdml0eSgpIGJlY29tZXMKQEAgLTY0MjEs
NyArNjQyOSw4IEBAIHN1YiBHZW5lcmF0ZUNhbGxiYWNrSGVhZGVyQ29udGVudAogICAgICAgICBw
dXNoKEAkY29udGVudFJlZiwgIiAgICBib29sIGhhc0NhbGxiYWNrKCkgY29uc3QgZmluYWwgeyBy
ZXR1cm4gbV9kYXRhICYmIG1fZGF0YS0+Y2FsbGJhY2soKTsgfVxuXG4iKTsKICAgICB9CiAKLSAg
ICBwdXNoKEAkY29udGVudFJlZiwgIiAgICB2b2lkIHZpc2l0SlNGdW5jdGlvbihKU0M6OlNsb3RW
aXNpdG9yJikgb3ZlcnJpZGU7XG5cbiIpIGlmICRpbnRlcmZhY2VPckNhbGxiYWNrLT5leHRlbmRl
ZEF0dHJpYnV0ZXMtPntJc1dlYWtDYWxsYmFja307CisjICAgIHB1c2goQCRjb250ZW50UmVmLCAi
ICAgIHZvaWQgdmlzaXRKU0Z1bmN0aW9uKEpTQzo6U2xvdFZpc2l0b3ImKSBvdmVycmlkZTtcblxu
IikgaWYgJGludGVyZmFjZU9yQ2FsbGJhY2stPmV4dGVuZGVkQXR0cmlidXRlcy0+e0lzV2Vha0Nh
bGxiYWNrfTsKKyAgICBwdXNoKEAkY29udGVudFJlZiwgIiAgICB2b2lkIHZpc2l0SlNGdW5jdGlv
bihKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKSBvdmVycmlkZTtcblxuIikgaWYgJGludGVyZmFj
ZU9yQ2FsbGJhY2stPmV4dGVuZGVkQXR0cmlidXRlcy0+e0lzV2Vha0NhbGxiYWNrfTsKIAogICAg
IHB1c2goQCRjb250ZW50UmVmLCAiICAgICR7Y2FsbGJhY2tEYXRhVHlwZX0qIG1fZGF0YTtcbiIp
OwogICAgIHB1c2goQCRjb250ZW50UmVmLCAifTtcblxuIik7CkBAIC02NjEyLDcgKzY2MjEsOCBA
QCBzdWIgR2VuZXJhdGVDYWxsYmFja0ltcGxlbWVudGF0aW9uQ29udGVuCiAgICAgfQogCiAgICAg
aWYgKCRpbnRlcmZhY2VPckNhbGxiYWNrLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntJc1dlYWtDYWxs
YmFja30pIHsKLSAgICAgICAgcHVzaChAJGNvbnRlbnRSZWYsICJ2b2lkICR7Y2xhc3NOYW1lfTo6
dmlzaXRKU0Z1bmN0aW9uKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpXG4iKTsKKyMgICAgICAg
IHB1c2goQCRjb250ZW50UmVmLCAidm9pZCAke2NsYXNzTmFtZX06OnZpc2l0SlNGdW5jdGlvbihK
U0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKVxuIik7CisgICAgICAgIHB1c2goQCRjb250ZW50UmVm
LCAidm9pZCAke2NsYXNzTmFtZX06OnZpc2l0SlNGdW5jdGlvbihKU0M6OkFic3RyYWN0U2xvdFZp
c2l0b3ImIHZpc2l0b3IpXG4iKTsKICAgICAgICAgcHVzaChAJGNvbnRlbnRSZWYsICJ7XG4iKTsK
ICAgICAgICAgcHVzaChAJGNvbnRlbnRSZWYsICIgICAgbV9kYXRhLT52aXNpdEpTRnVuY3Rpb24o
dmlzaXRvcik7XG4iKTsKICAgICAgICAgcHVzaChAJGNvbnRlbnRSZWYsICJ9XG5cbiIpOwpAQCAt
NjcyMyw2ICs2NzMzLDcgQEAgc3ViIEdlbmVyYXRlSXRlcmFibGVEZWZpbml0aW9uCiAgICAgbXkg
JHZpc2libGVJbnRlcmZhY2VOYW1lID0gJGNvZGVHZW5lcmF0b3ItPkdldFZpc2libGVJbnRlcmZh
Y2VOYW1lKCRpbnRlcmZhY2UpOwogCiAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIkpTRE9NSXRlcmF0
b3IuaCIpOworICAgIEFkZFRvSW1wbEluY2x1ZGVzKCI8SmF2YVNjcmlwdENvcmUvU2xvdFZpc2l0
b3JNYWNyb3MuaD4iKTsKIAogICAgIHJldHVybiB1bmxlc3MgSXNLZXlWYWx1ZUl0ZXJhYmxlSW50
ZXJmYWNlKCRpbnRlcmZhY2UpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vQWN0aXZlRE9N
Q2FsbGJhY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vQWN0aXZlRE9NQ2Fs
bGJhY2suaAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL1dlYkNvcmUvZG9tL0FjdGl2ZURP
TUNhbGxiYWNrLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJD
b250ZXh0RGVzdHJ1Y3Rpb25PYnNlcnZlci5oIgogCiBuYW1lc3BhY2UgSlNDIHsKK2NsYXNzIEFi
c3RyYWN0U2xvdFZpc2l0b3I7CiBjbGFzcyBTbG90VmlzaXRvcjsKIH0KIApAQCAtNTUsNyArNTYs
OCBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBhY3RpdmVET01PYmplY3RzQXJl
U3VzcGVuZGVkKCkgY29uc3Q7CiAgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBhY3RpdmVET01PYmpl
Y3RBcmVTdG9wcGVkKCkgY29uc3Q7CiAgICAgCi0gICAgdmlydHVhbCB2b2lkIHZpc2l0SlNGdW5j
dGlvbihKU0M6OlNsb3RWaXNpdG9yJikgeyB9CisvLyAgICB2aXJ0dWFsIHZvaWQgdmlzaXRKU0Z1
bmN0aW9uKEpTQzo6U2xvdFZpc2l0b3ImKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXRKU0Z1
bmN0aW9uKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpIHsgfQogfTsKIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50TGlzdGVuZXIuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRMaXN0ZW5lci5oCShyZXZpc2lvbiAy
NzE0NDMpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRMaXN0ZW5lci5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yMyw4ICsyMyw5IEBACiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KIAogbmFt
ZXNwYWNlIEpTQyB7CitjbGFzcyBBYnN0cmFjdFNsb3RWaXNpdG9yOwogY2xhc3MgSlNPYmplY3Q7
Ci1jbGFzcyBTbG90VmlzaXRvcjsKKy8vY2xhc3MgU2xvdFZpc2l0b3I7CiB9CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKQEAgLTUxLDcgKzUyLDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBo
YW5kbGVFdmVudChTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgRXZlbnQmKSA9IDA7CiAgICAgdmly
dHVhbCBib29sIHdhc0NyZWF0ZWRGcm9tTWFya3VwKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0K
IAotICAgIHZpcnR1YWwgdm9pZCB2aXNpdEpTRnVuY3Rpb24oSlNDOjpTbG90VmlzaXRvciYpIHsg
fQorLy8gICAgdmlydHVhbCB2b2lkIHZpc2l0SlNGdW5jdGlvbihKU0M6OlNsb3RWaXNpdG9yJikg
eyB9CisgICAgdmlydHVhbCB2b2lkIHZpc2l0SlNGdW5jdGlvbihKU0M6OkFic3RyYWN0U2xvdFZp
c2l0b3ImKSB7IH0KIAogICAgIHZpcnR1YWwgYm9vbCBpc0F0dHJpYnV0ZSgpIGNvbnN0IHsgcmV0
dXJuIGZhbHNlOyB9CiAgICAgVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRUYXJnZXQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2RvbS9FdmVudFRhcmdldC5jcHAJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNv
dXJjZS9XZWJDb3JlL2RvbS9FdmVudFRhcmdldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3NCw3
ICszNzQsOSBAQCB2b2lkIEV2ZW50VGFyZ2V0OjpyZW1vdmVBbGxFdmVudExpc3RlbmVyCiAgICAg
dGhyZWFkRGF0YS5zZXRJc0luUmVtb3ZlQWxsRXZlbnRMaXN0ZW5lcnMoZmFsc2UpOwogfQogCi12
b2lkIEV2ZW50VGFyZ2V0Ojp2aXNpdEpTRXZlbnRMaXN0ZW5lcnMoSlNDOjpTbG90VmlzaXRvciYg
dmlzaXRvcikKKy8vdm9pZCBFdmVudFRhcmdldDo6dmlzaXRKU0V2ZW50TGlzdGVuZXJzKEpTQzo6
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBF
dmVudFRhcmdldDo6dmlzaXRKU0V2ZW50TGlzdGVuZXJzKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAg
ICAgRXZlbnRUYXJnZXREYXRhKiBkYXRhID0gZXZlbnRUYXJnZXREYXRhQ29uY3VycmVudGx5KCk7
CiAgICAgaWYgKCFkYXRhKQpAQCAtMzg2LDYgKzM4OCw5IEBAIHZvaWQgRXZlbnRUYXJnZXQ6OnZp
c2l0SlNFdmVudExpc3RlbmVycygKICAgICAgICAgbGlzdGVuZXItPnZpc2l0SlNGdW5jdGlvbih2
aXNpdG9yKTsKIH0KIAordGVtcGxhdGUgdm9pZCBFdmVudFRhcmdldDo6dmlzaXRKU0V2ZW50TGlz
dGVuZXJzKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBFdmVudFRh
cmdldDo6dmlzaXRKU0V2ZW50TGlzdGVuZXJzKEpTQzo6U2xvdFZpc2l0b3ImKTsKKwogdm9pZCBF
dmVudFRhcmdldDo6aW52YWxpZGF0ZUV2ZW50TGlzdGVuZXJSZWdpb25zKCkKIHsKICAgICBpZiAo
aXM8RWxlbWVudD4oKnRoaXMpKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRUYXJn
ZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRUYXJnZXQuaAkocmV2
aXNpb24gMjcxNDQzKQorKysgU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50VGFyZ2V0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTExMyw3ICsxMTMsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBmaXJlRXZlbnRM
aXN0ZW5lcnMoRXZlbnQmLCBFdmVudEludm9rZVBoYXNlKTsKICAgICBib29sIGlzRmlyaW5nRXZl
bnRMaXN0ZW5lcnMoKSBjb25zdDsKIAotICAgIHZvaWQgdmlzaXRKU0V2ZW50TGlzdGVuZXJzKEpT
Qzo6U2xvdFZpc2l0b3ImKTsKKy8vICAgIHZvaWQgdmlzaXRKU0V2ZW50TGlzdGVuZXJzKEpTQzo6
U2xvdFZpc2l0b3ImKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIHZpc2l0
SlNFdmVudExpc3RlbmVycyhWaXNpdG9yJik7CiAgICAgdm9pZCBpbnZhbGlkYXRlSlNFdmVudExp
c3RlbmVycyhKU0M6OkpTT2JqZWN0Kik7CiAKICAgICBjb25zdCBFdmVudFRhcmdldERhdGEqIGV2
ZW50VGFyZ2V0RGF0YSgpIGNvbnN0OwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL011dGF0aW9u
UmVjb3JkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vTXV0YXRpb25SZWNv
cmQuY3BwCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vTXV0YXRpb25S
ZWNvcmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0MSw4IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogbmFtZXNwYWNlIHsKIAotc3RhdGljIHZvaWQgdmlzaXROb2RlTGlzdChKU0M6OlNs
b3RWaXNpdG9yJiB2aXNpdG9yLCBOb2RlTGlzdCYgbm9kZUxpc3QpCisvL3N0YXRpYyB2b2lkIHZp
c2l0Tm9kZUxpc3QoSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvciwgTm9kZUxpc3QmIG5vZGVMaXN0
KQorc3RhdGljIHZvaWQgdmlzaXROb2RlTGlzdChKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImIHZp
c2l0b3IsIE5vZGVMaXN0JiBub2RlTGlzdCkKIHsKICAgICBBU1NFUlQoIW5vZGVMaXN0LmlzTGl2
ZU5vZGVMaXN0KCkpOwogICAgIHVuc2lnbmVkIGxlbmd0aCA9IG5vZGVMaXN0Lmxlbmd0aCgpOwpA
QCAtNjgsNyArNjksOCBAQCBwcml2YXRlOgogICAgIE5vZGUqIHByZXZpb3VzU2libGluZygpIG92
ZXJyaWRlIHsgcmV0dXJuIG1fcHJldmlvdXNTaWJsaW5nLmdldCgpOyB9CiAgICAgTm9kZSogbmV4
dFNpYmxpbmcoKSBvdmVycmlkZSB7IHJldHVybiBtX25leHRTaWJsaW5nLmdldCgpOyB9CiAKLSAg
ICB2b2lkIHZpc2l0Tm9kZXNDb25jdXJyZW50bHkoSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikg
Y29uc3QgZmluYWwKKy8vICAgIHZvaWQgdmlzaXROb2Rlc0NvbmN1cnJlbnRseShKU0M6OlNsb3RW
aXNpdG9yJiB2aXNpdG9yKSBjb25zdCBmaW5hbAorICAgIHZvaWQgdmlzaXROb2Rlc0NvbmN1cnJl
bnRseShKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0IGZpbmFsCiAgICAg
ewogICAgICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qocm9vdChtX3RhcmdldC5wdHIoKSkpOwog
ICAgICAgICBpZiAobV9hZGRlZE5vZGVzKQpAQCAtMTA1LDcgKzEwNyw4IEBAIHByaXZhdGU6CiAg
ICAgICAgIHJldHVybiBub2RlTGlzdC5nZXQoKTsKICAgICB9CiAKLSAgICB2b2lkIHZpc2l0Tm9k
ZXNDb25jdXJyZW50bHkoSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikgY29uc3QgZmluYWwKKy8v
ICAgIHZvaWQgdmlzaXROb2Rlc0NvbmN1cnJlbnRseShKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9y
KSBjb25zdCBmaW5hbAorICAgIHZvaWQgdmlzaXROb2Rlc0NvbmN1cnJlbnRseShKU0M6OkFic3Ry
YWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0IGZpbmFsCiAgICAgewogICAgICAgICB2aXNp
dG9yLmFkZE9wYXF1ZVJvb3Qocm9vdChtX3RhcmdldC5wdHIoKSkpOwogICAgIH0KQEAgLTE2NCw3
ICsxNjcsOCBAQCBwcml2YXRlOgogCiAgICAgU3RyaW5nIG9sZFZhbHVlKCkgb3ZlcnJpZGUgeyBy
ZXR1cm4gU3RyaW5nKCk7IH0KIAotICAgIHZvaWQgdmlzaXROb2Rlc0NvbmN1cnJlbnRseShKU0M6
OlNsb3RWaXNpdG9yJiB2aXNpdG9yKSBjb25zdCBmaW5hbAorLy8gICAgdm9pZCB2aXNpdE5vZGVz
Q29uY3VycmVudGx5KEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0IGZpbmFsCisgICAg
dm9pZCB2aXNpdE5vZGVzQ29uY3VycmVudGx5KEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYgdmlz
aXRvcikgY29uc3QgZmluYWwKICAgICB7CiAgICAgICAgIG1fcmVjb3JkLT52aXNpdE5vZGVzQ29u
Y3VycmVudGx5KHZpc2l0b3IpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9NdXRh
dGlvblJlY29yZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9NdXRhdGlvblJl
Y29yZC5oCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vTXV0YXRpb25S
ZWNvcmQuaAkod29ya2luZyBjb3B5KQpAQCAtNzIsNyArNzIsOCBAQCBwdWJsaWM6CiAKICAgICB2
aXJ0dWFsIFN0cmluZyBvbGRWYWx1ZSgpIHsgcmV0dXJuIFN0cmluZygpOyB9CiAKLSAgICB2aXJ0
dWFsIHZvaWQgdmlzaXROb2Rlc0NvbmN1cnJlbnRseShKU0M6OlNsb3RWaXNpdG9yJikgY29uc3Qg
PSAwOworLy8gICAgdmlydHVhbCB2b2lkIHZpc2l0Tm9kZXNDb25jdXJyZW50bHkoSlNDOjpTbG90
VmlzaXRvciYpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXROb2Rlc0NvbmN1cnJl
bnRseShKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKSBjb25zdCA9IDA7CiB9OwogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTDJS
ZW5kZXJpbmdDb250ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2Nh
bnZhcy9XZWJHTDJSZW5kZXJpbmdDb250ZXh0LmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysgU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTMwMjgsMTggKzMwMjgsMjAgQEAgYm9vbCBXZWJHTDJSZW5kZXJpbmdDb250
ZXh0OjpjaGVja0FuZFRyYQogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIFdlYkdMMlJlbmRl
cmluZ0NvbnRleHQ6OmFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKEpTQzo6U2xvdFZpc2l0b3ImIHZp
c2l0b3IpCisvL3ZvaWQgV2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6YWRkTWVtYmVyc1RvT3BhcXVl
Um9vdHMoSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgV2ViR0wyUmVuZGVyaW5nQ29u
dGV4dDo6YWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMoSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQogewogICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmFkZE1lbWJlcnNUb09w
YXF1ZVJvb3RzKHZpc2l0b3IpOwogCiAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhvYmplY3RH
cmFwaExvY2soKSk7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KG1fcmVhZEZyYW1lYnVmZmVy
QmluZGluZy5nZXQoKSk7CiAgICAgaWYgKG1fcmVhZEZyYW1lYnVmZmVyQmluZGluZykKLSAgICAg
ICAgbV9yZWFkRnJhbWVidWZmZXJCaW5kaW5nLT5hZGRNZW1iZXJzVG9PcGFxdWVSb290cyhsb2Nr
ZXIsIHZpc2l0b3IpOworICAgICAgICBtX3JlYWRGcmFtZWJ1ZmZlckJpbmRpbmctPmFkZE1lbWJl
cnNUb09wYXF1ZVJvb3RzMzAwKGxvY2tlciwgdmlzaXRvcik7CiAKICAgICB2aXNpdG9yLmFkZE9w
YXF1ZVJvb3QobV9ib3VuZFRyYW5zZm9ybUZlZWRiYWNrLmdldCgpKTsKICAgICBpZiAobV9ib3Vu
ZFRyYW5zZm9ybUZlZWRiYWNrKQotICAgICAgICBtX2JvdW5kVHJhbnNmb3JtRmVlZGJhY2stPmFk
ZE1lbWJlcnNUb09wYXF1ZVJvb3RzKGxvY2tlciwgdmlzaXRvcik7CisvLyAgICAgICAgbV9ib3Vu
ZFRyYW5zZm9ybUZlZWRiYWNrLT5hZGRNZW1iZXJzVG9PcGFxdWVSb290cyhsb2NrZXIsIHZpc2l0
b3IpOworICAgICAgICBtX2JvdW5kVHJhbnNmb3JtRmVlZGJhY2stPmFkZE1lbWJlcnNUb09wYXF1
ZVJvb3RzMTAwKGxvY2tlciwgdmlzaXRvcik7CiAKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qo
bV9ib3VuZENvcHlSZWFkQnVmZmVyLmdldCgpKTsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qo
bV9ib3VuZENvcHlXcml0ZUJ1ZmZlci5nZXQoKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9XZWJHTDJSZW5kZXJpbmdDb250ZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvaHRtbC9jYW52YXMvV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5oCShyZXZpc2lvbiAyNzE0
NDMpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTDJSZW5kZXJpbmdDb250ZXh0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTI2MSw3ICsyNjEsOCBAQCBwdWJsaWM6CiAKICAgICBib29s
IGNoZWNrQW5kVHJhbnNsYXRlQXR0YWNobWVudHMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBH
Q0dMZW51bSwgVmVjdG9yPEdDR0xlbnVtPiYpOwogCi0gICAgdm9pZCBhZGRNZW1iZXJzVG9PcGFx
dWVSb290cyhKU0M6OlNsb3RWaXNpdG9yJikgb3ZlcnJpZGU7CisvLyAgICB2b2lkIGFkZE1lbWJl
cnNUb09wYXF1ZVJvb3RzKEpTQzo6U2xvdFZpc2l0b3ImKSBvdmVycmlkZTsKKyAgICB2b2lkIGFk
ZE1lbWJlcnNUb09wYXF1ZVJvb3RzKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpIG92ZXJyaWRl
OwogCiBwcml2YXRlOgogICAgIFdlYkdMMlJlbmRlcmluZ0NvbnRleHQoQ2FudmFzQmFzZSYsIEdy
YXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcyk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2Nh
bnZhcy9XZWJHTEZyYW1lYnVmZmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9XZWJHTEZyYW1lYnVmZmVyLmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysgU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xGcmFtZWJ1ZmZlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTYzLDcgKzYzLDggQEAgbmFtZXNwYWNlIHsKICAgICAgICAgdm9pZCBvbkRldGFjaGVk
KGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgR3JhcGhpY3NDb250ZXh0R0wqKSBvdmVycmlkZTsKICAg
ICAgICAgdm9pZCBhdHRhY2goR3JhcGhpY3NDb250ZXh0R0wqLCBHQ0dMZW51bSB0YXJnZXQsIEdD
R0xlbnVtIGF0dGFjaG1lbnQpIG92ZXJyaWRlOwogICAgICAgICB2b2lkIHVuYXR0YWNoKEdyYXBo
aWNzQ29udGV4dEdMKiwgR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBhdHRhY2htZW50KSBvdmVy
cmlkZTsKLSAgICAgICAgdm9pZCBhZGRNZW1iZXJzVG9PcGFxdWVSb290cyhjb25zdCBBYnN0cmFj
dExvY2tlciYsIEpTQzo6U2xvdFZpc2l0b3ImKSBvdmVycmlkZTsKKy8vICAgICAgICB2b2lkIGFk
ZE1lbWJlcnNUb09wYXF1ZVJvb3RzKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgSlNDOjpTbG90Vmlz
aXRvciYpIG92ZXJyaWRlOworICAgICAgICB2b2lkIGFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzNDAw
KGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJikgb3ZlcnJp
ZGU7CiAKICAgICAgICAgV2ViR0xSZW5kZXJidWZmZXJBdHRhY2htZW50KCkgeyB9OwogCkBAIC0x
NDUsNyArMTQ2LDggQEAgbmFtZXNwYWNlIHsKICAgICAgICAgICAgIGNvbnRleHQtPmZyYW1lYnVm
ZmVyUmVuZGVyYnVmZmVyKHRhcmdldCwgYXR0YWNobWVudCwgR3JhcGhpY3NDb250ZXh0R0w6OlJF
TkRFUkJVRkZFUiwgMCk7CiAgICAgfQogCi0gICAgdm9pZCBXZWJHTFJlbmRlcmJ1ZmZlckF0dGFj
aG1lbnQ6OmFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgSlND
OjpTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vICAgIHZvaWQgV2ViR0xSZW5kZXJidWZmZXJBdHRh
Y2htZW50OjphZGRNZW1iZXJzVG9PcGFxdWVSb290cyhjb25zdCBBYnN0cmFjdExvY2tlciYsIEpT
Qzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCisgICAgdm9pZCBXZWJHTFJlbmRlcmJ1ZmZlckF0dGFj
aG1lbnQ6OmFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzNDAwKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwg
SlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogICAgIHsKICAgICAgICAgdmlzaXRv
ci5hZGRPcGFxdWVSb290KG1fcmVuZGVyYnVmZmVyLmdldCgpKTsKICAgICB9CkBAIC0xNjksNyAr
MTcxLDggQEAgbmFtZXNwYWNlIHsKICAgICAgICAgdm9pZCBvbkRldGFjaGVkKGNvbnN0IEFic3Ry
YWN0TG9ja2VyJiwgR3JhcGhpY3NDb250ZXh0R0wqKSBvdmVycmlkZTsKICAgICAgICAgdm9pZCBh
dHRhY2goR3JhcGhpY3NDb250ZXh0R0wqLCBHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIGF0dGFj
aG1lbnQpIG92ZXJyaWRlOwogICAgICAgICB2b2lkIHVuYXR0YWNoKEdyYXBoaWNzQ29udGV4dEdM
KiwgR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBhdHRhY2htZW50KSBvdmVycmlkZTsKLSAgICAg
ICAgdm9pZCBhZGRNZW1iZXJzVG9PcGFxdWVSb290cyhjb25zdCBBYnN0cmFjdExvY2tlciYsIEpT
Qzo6U2xvdFZpc2l0b3ImKSBvdmVycmlkZTsKKy8vICAgICAgICB2b2lkIGFkZE1lbWJlcnNUb09w
YXF1ZVJvb3RzKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgSlNDOjpTbG90VmlzaXRvciYpIG92ZXJy
aWRlOworICAgICAgICB2b2lkIGFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzNDAwKGNvbnN0IEFic3Ry
YWN0TG9ja2VyJiwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJikgb3ZlcnJpZGU7CiAKICAgICAg
ICAgV2ViR0xUZXh0dXJlQXR0YWNobWVudCgpIHsgfTsKIApAQCAtMjY3LDcgKzI3MCw4IEBAIG5h
bWVzcGFjZSB7CiAjZW5kaWYKICAgICB9CiAKLSAgICB2b2lkIFdlYkdMVGV4dHVyZUF0dGFjaG1l
bnQ6OmFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgSlNDOjpT
bG90VmlzaXRvciYgdmlzaXRvcikKKy8vICAgIHZvaWQgV2ViR0xUZXh0dXJlQXR0YWNobWVudDo6
YWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMoY29uc3QgQWJzdHJhY3RMb2NrZXImLCBKU0M6OlNsb3RW
aXNpdG9yJiB2aXNpdG9yKQorICAgIHZvaWQgV2ViR0xUZXh0dXJlQXR0YWNobWVudDo6YWRkTWVt
YmVyc1RvT3BhcXVlUm9vdHM0MDAoY29uc3QgQWJzdHJhY3RMb2NrZXImLCBKU0M6OkFic3RyYWN0
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiAgICAgewogICAgICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJv
b3QobV90ZXh0dXJlLmdldCgpKTsKICAgICB9CkBAIC03MjEsMTAgKzcyNSwxMSBAQCBHQ0dMZW51
bSBXZWJHTEZyYW1lYnVmZmVyOjpnZXREcmF3QnVmZmVyCiAgICAgcmV0dXJuIEdyYXBoaWNzQ29u
dGV4dEdMOjpOT05FOwogfQogCi12b2lkIFdlYkdMRnJhbWVidWZmZXI6OmFkZE1lbWJlcnNUb09w
YXF1ZVJvb3RzKGNvbnN0IEFic3RyYWN0TG9ja2VyJiBsb2NrZXIsIEpTQzo6U2xvdFZpc2l0b3Im
IHZpc2l0b3IpCisvL3ZvaWQgV2ViR0xGcmFtZWJ1ZmZlcjo6YWRkTWVtYmVyc1RvT3BhcXVlUm9v
dHMoY29uc3QgQWJzdHJhY3RMb2NrZXImIGxvY2tlciwgSlNDOjpTbG90VmlzaXRvciYgdmlzaXRv
cikKK3ZvaWQgV2ViR0xGcmFtZWJ1ZmZlcjo6YWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMzMDAoY29u
c3QgQWJzdHJhY3RMb2NrZXImIGxvY2tlciwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNp
dG9yKQogewogICAgIGZvciAoYXV0byYgZW50cnkgOiBtX2F0dGFjaG1lbnRzKQotICAgICAgICBl
bnRyeS52YWx1ZS0+YWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMobG9ja2VyLCB2aXNpdG9yKTsKKyAg
ICAgICAgZW50cnkudmFsdWUtPmFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzNDAwKGxvY2tlciwgdmlz
aXRvcik7CiB9CiAKIHZvaWQgV2ViR0xGcmFtZWJ1ZmZlcjo6c2V0QXR0YWNobWVudEludGVybmFs
KEdDR0xlbnVtIGF0dGFjaG1lbnQsIEdDR0xlbnVtIHRleFRhcmdldCwgV2ViR0xUZXh0dXJlKiB0
ZXh0dXJlLCBHQ0dMaW50IGxldmVsLCBHQ0dMaW50IGxheWVyKQpJbmRleDogU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvV2ViR0xGcmFtZWJ1ZmZlci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRnJhbWVidWZmZXIuaAkocmV2aXNpb24gMjcxNDQzKQor
KysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xGcmFtZWJ1ZmZlci5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zNCw3ICszNCw4IEBACiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1l
c3BhY2UgSlNDIHsKLWNsYXNzIFNsb3RWaXNpdG9yOworLy9jbGFzcyBTbG90VmlzaXRvcjsKK2Ns
YXNzIEFic3RyYWN0U2xvdFZpc2l0b3I7CiB9CiAKIG5hbWVzcGFjZSBXVEYgewpAQCAtNjUsNyAr
NjYsOCBAQCBwdWJsaWM6CiAgICAgICAgIHZpcnR1YWwgdm9pZCBvbkRldGFjaGVkKGNvbnN0IFdU
Rjo6QWJzdHJhY3RMb2NrZXImLCBHcmFwaGljc0NvbnRleHRHTCopID0gMDsKICAgICAgICAgdmly
dHVhbCB2b2lkIGF0dGFjaChHcmFwaGljc0NvbnRleHRHTCosIEdDR0xlbnVtIHRhcmdldCwgR0NH
TGVudW0gYXR0YWNobWVudCkgPSAwOwogICAgICAgICB2aXJ0dWFsIHZvaWQgdW5hdHRhY2goR3Jh
cGhpY3NDb250ZXh0R0wqLCBHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIGF0dGFjaG1lbnQpID0g
MDsKLSAgICAgICAgdmlydHVhbCB2b2lkIGFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKGNvbnN0IFdU
Rjo6QWJzdHJhY3RMb2NrZXImLCBKU0M6OlNsb3RWaXNpdG9yJikgPSAwOworLy8gICAgICAgIHZp
cnR1YWwgdm9pZCBhZGRNZW1iZXJzVG9PcGFxdWVSb290cyhjb25zdCBXVEY6OkFic3RyYWN0TG9j
a2VyJiwgSlNDOjpTbG90VmlzaXRvciYpID0gMDsKKyAgICAgICAgdmlydHVhbCB2b2lkIGFkZE1l
bWJlcnNUb09wYXF1ZVJvb3RzNDAwKGNvbnN0IFdURjo6QWJzdHJhY3RMb2NrZXImLCBKU0M6OkFi
c3RyYWN0U2xvdFZpc2l0b3ImKSA9IDA7CiAKICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIFdlYkdM
QXR0YWNobWVudCgpOwpAQCAtMTE0LDcgKzExNiw4IEBAIHB1YmxpYzoKIAogICAgIEdDR0xlbnVt
IGdldERyYXdCdWZmZXIoR0NHTGVudW0pOwogCi0gICAgdm9pZCBhZGRNZW1iZXJzVG9PcGFxdWVS
b290cyhjb25zdCBXVEY6OkFic3RyYWN0TG9ja2VyJiwgSlNDOjpTbG90VmlzaXRvciYpOworLy8g
ICAgdm9pZCBhZGRNZW1iZXJzVG9PcGFxdWVSb290cyhjb25zdCBXVEY6OkFic3RyYWN0TG9ja2Vy
JiwgSlNDOjpTbG90VmlzaXRvciYpOworICAgIHZvaWQgYWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMz
MDAoY29uc3QgV1RGOjpBYnN0cmFjdExvY2tlciYsIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYp
OwogCiBwcml2YXRlOgogICAgIFdlYkdMRnJhbWVidWZmZXIoV2ViR0xSZW5kZXJpbmdDb250ZXh0
QmFzZSYpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xQcm9ncmFtLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFByb2dyYW0u
Y3BwCShyZXZpc2lvbiAyNzE0NDMpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJH
TFByb2dyYW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDYsNyArMjA2LDggQEAgYm9vbCBXZWJH
TFByb2dyYW06OmRldGFjaFNoYWRlcihjb25zdCBBYgogICAgIH0KIH0KIAotdm9pZCBXZWJHTFBy
b2dyYW06OmFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgSlND
OjpTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vdm9pZCBXZWJHTFByb2dyYW06OmFkZE1lbWJlcnNU
b09wYXF1ZVJvb3RzKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgSlNDOjpTbG90VmlzaXRvciYgdmlz
aXRvcikKK3ZvaWQgV2ViR0xQcm9ncmFtOjphZGRNZW1iZXJzVG9PcGFxdWVSb290czIwMChjb25z
dCBBYnN0cmFjdExvY2tlciYsIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsK
ICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QobV92ZXJ0ZXhTaGFkZXIuZ2V0KCkpOwogICAgIHZp
c2l0b3IuYWRkT3BhcXVlUm9vdChtX2ZyYWdtZW50U2hhZGVyLmdldCgpKTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUHJvZ3JhbS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUHJvZ3JhbS5oCShyZXZpc2lvbiAyNzE0NDMpCisr
KyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFByb2dyYW0uaAkod29ya2luZyBjb3B5
KQpAQCAtMzUsNyArMzUsOCBAQAogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNl
IEpTQyB7Ci1jbGFzcyBTbG90VmlzaXRvcjsKKy8vY2xhc3MgU2xvdFZpc2l0b3I7CitjbGFzcyBB
YnN0cmFjdFNsb3RWaXNpdG9yOwogfQogCiBuYW1lc3BhY2UgV1RGIHsKQEAgLTg4LDcgKzg5LDgg
QEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9yZXF1aXJlZFRyYW5zZm9ybUZlZWRiYWNrQnVm
ZmVyQ291bnQ7CiAgICAgfQogCi0gICAgdm9pZCBhZGRNZW1iZXJzVG9PcGFxdWVSb290cyhjb25z
dCBXVEY6OkFic3RyYWN0TG9ja2VyJiwgSlNDOjpTbG90VmlzaXRvciYpOworLy8gICAgdm9pZCBh
ZGRNZW1iZXJzVG9PcGFxdWVSb290cyhjb25zdCBXVEY6OkFic3RyYWN0TG9ja2VyJiwgSlNDOjpT
bG90VmlzaXRvciYpOworICAgIHZvaWQgYWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMyMDAoY29uc3Qg
V1RGOjpBYnN0cmFjdExvY2tlciYsIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpOwogCiBwcml2
YXRlOgogICAgIFdlYkdMUHJvZ3JhbShXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlJik7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlLmNwcAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTc5MjcsMjMgKzc5MjcsMjYgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpkaXNw
YXRjaAogICAgIHF1ZXVlVGFza1RvRGlzcGF0Y2hFdmVudCgqY2FudmFzLCBUYXNrU291cmNlOjpX
ZWJHTCwgV2ViR0xDb250ZXh0RXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkud2ViZ2xjb250ZXh0
Y2hhbmdlZEV2ZW50LCBFdmVudDo6Q2FuQnViYmxlOjpObywgRXZlbnQ6OklzQ2FuY2VsYWJsZTo6
WWVzLCBlbXB0eVN0cmluZygpKSk7CiB9CiAKLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZTo6YWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMoSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKKy8v
dm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjphZGRNZW1iZXJzVG9PcGFxdWVSb290cyhK
U0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
OjphZGRNZW1iZXJzVG9PcGFxdWVSb290cyhKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0
b3IpCiB7CiAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhvYmplY3RHcmFwaExvY2soKSk7CiAK
KyAgICAvLyBtbGFtIEZJWE1FOiB3aHkgYXJlIHdlIG5vdCBhbHNvIHZpc2l0aW5nIG1fZGVmYXVs
dFZlcnRleEFycmF5T2JqZWN0PworCiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KG1fYm91bmRB
cnJheUJ1ZmZlci5nZXQoKSk7CiAKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QobV9ib3VuZFZl
cnRleEFycmF5T2JqZWN0LmdldCgpKTsKICAgICBpZiAobV9ib3VuZFZlcnRleEFycmF5T2JqZWN0
KQotICAgICAgICBtX2JvdW5kVmVydGV4QXJyYXlPYmplY3QtPmFkZE1lbWJlcnNUb09wYXF1ZVJv
b3RzKGxvY2tlciwgdmlzaXRvcik7CisgICAgICAgIG1fYm91bmRWZXJ0ZXhBcnJheU9iamVjdC0+
YWRkTWVtYmVyc1RvT3BhcXVlUm9vdHM2MDAobG9ja2VyLCB2aXNpdG9yKTsKIAogICAgIHZpc2l0
b3IuYWRkT3BhcXVlUm9vdChtX2N1cnJlbnRQcm9ncmFtLmdldCgpKTsKICAgICBpZiAobV9jdXJy
ZW50UHJvZ3JhbSkKLSAgICAgICAgbV9jdXJyZW50UHJvZ3JhbS0+YWRkTWVtYmVyc1RvT3BhcXVl
Um9vdHMobG9ja2VyLCB2aXNpdG9yKTsKKyAgICAgICAgbV9jdXJyZW50UHJvZ3JhbS0+YWRkTWVt
YmVyc1RvT3BhcXVlUm9vdHMyMDAobG9ja2VyLCB2aXNpdG9yKTsKIAogICAgIHZpc2l0b3IuYWRk
T3BhcXVlUm9vdChtX2ZyYW1lYnVmZmVyQmluZGluZy5nZXQoKSk7CiAgICAgaWYgKG1fZnJhbWVi
dWZmZXJCaW5kaW5nKQotICAgICAgICBtX2ZyYW1lYnVmZmVyQmluZGluZy0+YWRkTWVtYmVyc1Rv
T3BhcXVlUm9vdHMobG9ja2VyLCB2aXNpdG9yKTsKKyAgICAgICAgbV9mcmFtZWJ1ZmZlckJpbmRp
bmctPmFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzMzAwKGxvY2tlciwgdmlzaXRvcik7CiAKICAgICB2
aXNpdG9yLmFkZE9wYXF1ZVJvb3QobV9yZW5kZXJidWZmZXJCaW5kaW5nLmdldCgpKTsKIApJbmRl
eDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2UuaAkocmV2aXNpb24gMjcxNDQzKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9j
YW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01OCw3
ICs1OCw4IEBACiAjZW5kaWYKIAogbmFtZXNwYWNlIEpTQyB7Ci1jbGFzcyBTbG90VmlzaXRvcjsK
Ky8vY2xhc3MgU2xvdFZpc2l0b3I7CitjbGFzcyBBYnN0cmFjdFNsb3RWaXNpdG9yOwogfQogCiBu
YW1lc3BhY2UgV1RGIHsKQEAgLTQxMCw3ICs0MTEsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCByZWN5
Y2xlQ29udGV4dCgpIG92ZXJyaWRlOwogICAgIHZvaWQgZGlzcGF0Y2hDb250ZXh0Q2hhbmdlZE5v
dGlmaWNhdGlvbigpIG92ZXJyaWRlOwogCi0gICAgdmlydHVhbCB2b2lkIGFkZE1lbWJlcnNUb09w
YXF1ZVJvb3RzKEpTQzo6U2xvdFZpc2l0b3ImKTsKKy8vICAgIHZpcnR1YWwgdm9pZCBhZGRNZW1i
ZXJzVG9PcGFxdWVSb290cyhKU0M6OlNsb3RWaXNpdG9yJik7CisgICAgdmlydHVhbCB2b2lkIGFk
ZE1lbWJlcnNUb09wYXF1ZVJvb3RzKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpOwogICAgIC8v
IFRoaXMgbG9jayBtdXN0IGJlIGhlbGQgYWNyb3NzIGFsbCBtdXRhdGlvbnMgb2YgY29udGFpbmVy
cyBsaWtlCiAgICAgLy8gVmVjdG9ycywgSGFzaFNldHMsIGV0Yy4gd2hpY2ggY29udGFpbiBSZWZQ
dHI8V2ViR0xPYmplY3Q+LCBhbmQKICAgICAvLyB3aGljaCBhcmUgdHJhdmVyc2VkIGJ5IGFkZE1l
bWJlcnNUb09wYXF1ZVJvb3RzKCkgb3IgYW55IG9mIHRoZQpJbmRleDogU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvV2ViR0xUcmFuc2Zvcm1GZWVkYmFjay5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xUcmFuc2Zvcm1GZWVkYmFjay5jcHAJKHJldmlz
aW9uIDI3MTQ0MykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVHJhbnNmb3Jt
RmVlZGJhY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw4ICszMCw5IEBACiAKICNpbmNsdWRl
ICJXZWJHTENvbnRleHRHcm91cC5oIgogI2luY2x1ZGUgIldlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2UuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9TbG90VmlzaXRvci5oPgotI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL1Nsb3RWaXNpdG9ySW5saW5lcy5oPgorLy8jaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvU2xvdFZpc2l0b3IuaD4KKy8vI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1Nsb3RW
aXNpdG9ySW5saW5lcy5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0Fic3RyYWN0U2xvdFZp
c2l0b3JJbmxpbmVzLmg+CiAjaW5jbHVkZSA8d3RmL0xvY2suaD4KICNpbmNsdWRlIDx3dGYvTG9j
a2VyLmg+CiAKQEAgLTkzLDE0ICs5NCwxNSBAQCBib29sIFdlYkdMVHJhbnNmb3JtRmVlZGJhY2s6
Omhhc0Vub3VnaEJ1CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgV2ViR0xUcmFuc2Zvcm1G
ZWVkYmFjazo6YWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMoY29uc3QgQWJzdHJhY3RMb2NrZXImIGxv
Y2tlciwgSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vdm9pZCBXZWJHTFRyYW5zZm9ybUZl
ZWRiYWNrOjphZGRNZW1iZXJzVG9PcGFxdWVSb290cyhjb25zdCBBYnN0cmFjdExvY2tlciYgbG9j
a2VyLCBKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBXZWJHTFRyYW5zZm9ybUZlZWRi
YWNrOjphZGRNZW1iZXJzVG9PcGFxdWVSb290czEwMChjb25zdCBBYnN0cmFjdExvY2tlciYgbG9j
a2VyLCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgZm9yIChhdXRv
JiBidWZmZXIgOiBtX2JvdW5kSW5kZXhlZFRyYW5zZm9ybUZlZWRiYWNrQnVmZmVycykKICAgICAg
ICAgdmlzaXRvci5hZGRPcGFxdWVSb290KGJ1ZmZlci5nZXQoKSk7CiAKICAgICB2aXNpdG9yLmFk
ZE9wYXF1ZVJvb3QobV9wcm9ncmFtLmdldCgpKTsKICAgICBpZiAobV9wcm9ncmFtKQotICAgICAg
ICBtX3Byb2dyYW0tPmFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKGxvY2tlciwgdmlzaXRvcik7Cisg
ICAgICAgIG1fcHJvZ3JhbS0+YWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMyMDAobG9ja2VyLCB2aXNp
dG9yKTsKIH0KIAogdm9pZCBXZWJHTFRyYW5zZm9ybUZlZWRiYWNrOjp1bmJpbmRCdWZmZXIoY29u
c3QgQWJzdHJhY3RMb2NrZXImLCBXZWJHTEJ1ZmZlciYgYnVmZmVyKQpJbmRleDogU291cmNlL1dl
YkNvcmUvaHRtbC9jYW52YXMvV2ViR0xUcmFuc2Zvcm1GZWVkYmFjay5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVHJhbnNmb3JtRmVlZGJhY2suaAkocmV2
aXNpb24gMjcxNDQzKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xUcmFuc2Zv
cm1GZWVkYmFjay5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw4IEBACiAjaW5jbHVkZSAi
V2ViR0xTaGFyZWRPYmplY3QuaCIKIAogbmFtZXNwYWNlIEpTQyB7Ci1jbGFzcyBTbG90VmlzaXRv
cjsKKy8vY2xhc3MgU2xvdFZpc2l0b3I7CitjbGFzcyBBYnN0cmFjdFNsb3RWaXNpdG9yOwogfQog
CiBuYW1lc3BhY2UgV1RGIHsKQEAgLTcwLDcgKzcxLDggQEAgcHVibGljOgogICAgIAogICAgIGJv
b2wgaGFzRW5vdWdoQnVmZmVycyhHQ0dMdWludCBudW1SZXF1aXJlZCkgY29uc3Q7CiAKLSAgICB2
b2lkIGFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgSlNDOjpT
bG90VmlzaXRvciYpOworLy8gICAgdm9pZCBhZGRNZW1iZXJzVG9PcGFxdWVSb290cyhjb25zdCBB
YnN0cmFjdExvY2tlciYsIEpTQzo6U2xvdFZpc2l0b3ImKTsKKyAgICB2b2lkIGFkZE1lbWJlcnNU
b09wYXF1ZVJvb3RzMTAwKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgSlNDOjpBYnN0cmFjdFNsb3RW
aXNpdG9yJik7CiAKIHByaXZhdGU6CiAgICAgV2ViR0xUcmFuc2Zvcm1GZWVkYmFjayhXZWJHTDJS
ZW5kZXJpbmdDb250ZXh0Jik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJH
TFZlcnRleEFycmF5T2JqZWN0QmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvV2ViR0xWZXJ0ZXhBcnJheU9iamVjdEJhc2UuY3BwCShyZXZpc2lvbiAyNzE0
NDMpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFZlcnRleEFycmF5T2JqZWN0
QmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDggKzI5LDkgQEAKICNpZiBFTkFCTEUoV0VC
R0wpCiAKICNpbmNsdWRlICJXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmgiCi0jaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvU2xvdFZpc2l0b3IuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9T
bG90VmlzaXRvcklubGluZXMuaD4KKy8vI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1Nsb3RWaXNp
dG9yLmg+CisvLyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9TbG90VmlzaXRvcklubGluZXMuaD4K
KyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9BYnN0cmFjdFNsb3RWaXNpdG9ySW5saW5lcy5oPgog
I2luY2x1ZGUgPHd0Zi9Mb2NrZXIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMTA4LDcg
KzEwOSw4IEBAIHZvaWQgV2ViR0xWZXJ0ZXhBcnJheU9iamVjdEJhc2U6OnNldFZlcnQKICAgICBt
X3ZlcnRleEF0dHJpYlN0YXRlW2luZGV4XS5kaXZpc29yID0gZGl2aXNvcjsKIH0KIAotdm9pZCBX
ZWJHTFZlcnRleEFycmF5T2JqZWN0QmFzZTo6YWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMoY29uc3Qg
QWJzdHJhY3RMb2NrZXImLCBKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy92b2lkIFdlYkdM
VmVydGV4QXJyYXlPYmplY3RCYXNlOjphZGRNZW1iZXJzVG9PcGFxdWVSb290czYwMChjb25zdCBB
YnN0cmFjdExvY2tlciYsIEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIFdlYkdMVmVy
dGV4QXJyYXlPYmplY3RCYXNlOjphZGRNZW1iZXJzVG9PcGFxdWVSb290czYwMChjb25zdCBBYnN0
cmFjdExvY2tlciYsIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB2
aXNpdG9yLmFkZE9wYXF1ZVJvb3QobV9ib3VuZEVsZW1lbnRBcnJheUJ1ZmZlci5nZXQoKSk7CiAg
ICAgZm9yIChhdXRvJiBzdGF0ZSA6IG1fdmVydGV4QXR0cmliU3RhdGUpCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFZlcnRleEFycmF5T2JqZWN0QmFzZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVmVydGV4QXJyYXlPYmplY3RC
YXNlLmgJKHJldmlzaW9uIDI3MTQ0MykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dl
YkdMVmVydGV4QXJyYXlPYmplY3RCYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDgg
QEAKICNpbmNsdWRlICJXZWJHTENvbnRleHRPYmplY3QuaCIKIAogbmFtZXNwYWNlIEpTQyB7Ci1j
bGFzcyBTbG90VmlzaXRvcjsKKy8vY2xhc3MgU2xvdFZpc2l0b3I7CitjbGFzcyBBYnN0cmFjdFNs
b3RWaXNpdG9yOwogfQogCiBuYW1lc3BhY2UgV1RGIHsKQEAgLTc2LDcgKzc3LDggQEAgcHVibGlj
OgogCiAgICAgdm9pZCBzZXRWZXJ0ZXhBdHRyaWJEaXZpc29yKEdDR0x1aW50IGluZGV4LCBHQ0dM
dWludCBkaXZpc29yKTsKIAotICAgIHZvaWQgYWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMoY29uc3Qg
V1RGOjpBYnN0cmFjdExvY2tlciYsIEpTQzo6U2xvdFZpc2l0b3ImKTsKKy8vICAgIHZvaWQgYWRk
TWVtYmVyc1RvT3BhcXVlUm9vdHM2MDAoY29uc3QgV1RGOjpBYnN0cmFjdExvY2tlciYsIEpTQzo6
U2xvdFZpc2l0b3ImKTsKKyAgICB2b2lkIGFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzNjAwKGNvbnN0
IFdURjo6QWJzdHJhY3RMb2NrZXImLCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKTsKIAogcHJv
dGVjdGVkOgogICAgIFdlYkdMVmVydGV4QXJyYXlPYmplY3RCYXNlKFdlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2UmLCBUeXBlKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>418958</attachid>
            <date>2021-02-01 21:53:52 -0800</date>
            <delta_ts>2021-02-01 23:14:39 -0800</delta_ts>
            <desc>work in progress.</desc>
            <filename>bug-217274d.patch</filename>
            <type>text/plain</type>
            <size>493387</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDI3MTc4NikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtNjA5LDYgKzYwOSw4IEBAIHNldChKYXZhU2NyaXB0Q29yZV9QUklWQVRFX0ZSQU1FV09SS19I
RUEKICAgICBkb21qaXQvRE9NSklUSGVhcFJhbmdlLmgKICAgICBkb21qaXQvRE9NSklUU2lnbmF0
dXJlLmgKIAorICAgIGhlYXAvQWJzdHJhY3RTbG90VmlzaXRvci5oCisgICAgaGVhcC9BYnN0cmFj
dFNsb3RWaXNpdG9ySW5saW5lcy5oCiAgICAgaGVhcC9BbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmgK
ICAgICBoZWFwL0FsbG9jYXRpb25GYWlsdXJlTW9kZS5oCiAgICAgaGVhcC9BbGxvY2F0b3IuaApA
QCAtNjgyLDEyICs2ODQsMTQgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1BSSVZBVEVfRlJBTUVXT1JL
X0hFQQogICAgIGhlYXAvU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQuaAogICAgIGhlYXAvU2xvdFZp
c2l0b3IuaAogICAgIGhlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmgKKyAgICBoZWFwL1Nsb3RWaXNp
dG9yTWFjcm9zLmgKICAgICBoZWFwL1N0cm9uZy5oCiAgICAgaGVhcC9TdHJvbmdJbmxpbmVzLmgK
ICAgICBoZWFwL1N1YnNwYWNlLmgKICAgICBoZWFwL1N1YnNwYWNlSW5saW5lcy5oCiAgICAgaGVh
cC9TeW5jaHJvbm91c25lc3MuaAogICAgIGhlYXAvVGlueUJsb29tRmlsdGVyLmgKKyAgICBoZWFw
L1ZlcmlmaWVyU2xvdFZpc2l0b3IuaAogICAgIGhlYXAvVmlzaXRSYWNlS2V5LmgKICAgICBoZWFw
L1dlYWsuaAogICAgIGhlYXAvV2Vha0Jsb2NrLmgKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9Tb3VyY2VzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNl
cy50eHQJKHJldmlzaW9uIDI3MTc4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2Vz
LnR4dAkod29ya2luZyBjb3B5KQpAQCAtNTAxLDYgKzUwMSw3IEBAIGZ0bC9GVExTdGF0ZS5jcHAK
IGZ0bC9GVExUaHVua3MuY3BwCiBmdGwvRlRMVmFsdWVSYW5nZS5jcHAKIAoraGVhcC9BYnN0cmFj
dFNsb3RWaXNpdG9yLmNwcAogaGVhcC9BbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmNwcAogaGVhcC9B
bGxvY2F0b3IuY3BwCiBoZWFwL0Jsb2NrRGlyZWN0b3J5LmNwcApAQCAtNTU5LDYgKzU2MCw3IEBA
IGhlYXAvU3RvcElmTmVjZXNzYXJ5VGltZXIuY3BwCiBoZWFwL1N1YnNwYWNlLmNwcAogaGVhcC9T
eW5jaHJvbm91c1N0b3BUaGVXb3JsZE11dGF0b3JTY2hlZHVsZXIuY3BwCiBoZWFwL1N5bmNocm9u
b3VzbmVzcy5jcHAKK2hlYXAvVmVyaWZpZXJTbG90VmlzaXRvci5jcHAKIGhlYXAvVmlzaXRSYWNl
S2V5LmNwcAogaGVhcC9XZWFrLmNwcAogaGVhcC9XZWFrQmxvY2suY3BwCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQVBJL0pTQVBJV3JhcHBlck9iamVjdC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNBUElXcmFwcGVyT2JqZWN0LmgJKHJldmlzaW9uIDI3
MTc4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNBUElXcmFwcGVyT2JqZWN0LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC00MSw3ICs0MSw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9p
ZCBzdWJzcGFjZUZvcihWTSYpIHsgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQogICAg
IAogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENo
aWxkcmVuKEpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX0VYUE9SVF9W
SVNJVF9DSElMRFJFTjsKICAgICAKICAgICB2b2lkKiB3cmFwcGVkT2JqZWN0KCkgeyByZXR1cm4g
bV93cmFwcGVkT2JqZWN0OyB9CiAgICAgdm9pZCBzZXRXcmFwcGVkT2JqZWN0KHZvaWQqKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNBUElXcmFwcGVyT2JqZWN0Lm1tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNBUElXcmFwcGVyT2JqZWN0Lm1t
CShyZXZpc2lvbiAyNzE3ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQVBJV3Jh
cHBlck9iamVjdC5tbQkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM3LDcgKzM3LDcgQEAKIGNsYXNzIEpT
QVBJV3JhcHBlck9iamVjdEhhbmRsZU93bmVyIGZpbmFsIDogcHVibGljIEpTQzo6V2Vha0hhbmRs
ZU93bmVyIHsKIHB1YmxpYzoKICAgICB2b2lkIGZpbmFsaXplKEpTQzo6SGFuZGxlPEpTQzo6VW5r
bm93bj4sIHZvaWQqKSBmaW5hbDsKLSAgICBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3Rz
KEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6U2xvdFZpc2l0
b3ImLCBjb25zdCBjaGFyKiopIGZpbmFsOworICAgIGJvb2wgaXNSZWFjaGFibGVGcm9tT3BhcXVl
Um9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCwgSlNDOjpBYnN0
cmFjdFNsb3RWaXNpdG9yJiwgY29uc3QgY2hhcioqKSBmaW5hbDsKIH07CiAKIHN0YXRpYyBKU0FQ
SVdyYXBwZXJPYmplY3RIYW5kbGVPd25lcioganNBUElXcmFwcGVyT2JqZWN0SGFuZGxlT3duZXIo
KQpAQCAtNTYsMTQgKzU2LDE1IEBAIHZvaWQgSlNBUElXcmFwcGVyT2JqZWN0SGFuZGxlT3duZXI6
OmZpbmEKICAgICBKU0M6OldlYWtTZXQ6OmRlYWxsb2NhdGUoSlNDOjpXZWFrSW1wbDo6YXNXZWFr
SW1wbChoYW5kbGUuc2xvdCgpKSk7CiB9CiAKLWJvb2wgSlNBUElXcmFwcGVyT2JqZWN0SGFuZGxl
T3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93
bj4gaGFuZGxlLCB2b2lkKiwgSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioq
KQorYm9vbCBKU0FQSVdyYXBwZXJPYmplY3RIYW5kbGVPd25lcjo6aXNSZWFjaGFibGVGcm9tT3Bh
cXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBKU0M6OkFi
c3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKikKIHsKICAgICBKU0M6OkpT
QVBJV3JhcHBlck9iamVjdCogd3JhcHBlck9iamVjdCA9IEpTQzo6anNDYXN0PEpTQzo6SlNBUElX
cmFwcGVyT2JqZWN0Kj4oaGFuZGxlLmdldCgpLmFzQ2VsbCgpKTsKICAgICAvLyBXZSB1c2UgdGhl
IEpTR2xvYmFsT2JqZWN0IHdoZW4gcHJvY2Vzc2luZyB3ZWFrIGhhbmRsZXMgdG8gcHJldmVudCB0
aGUgc2l0dWF0aW9uIHdoZXJlIHVzaW5nCiAgICAgLy8gdGhlIHNhbWUgT2JqZWN0aXZlLUMgb2Jq
ZWN0IGluIG11bHRpcGxlIGdsb2JhbCBvYmplY3RzIGtlZXBzIGFsbCBvZiB0aGUgZ2xvYmFsIG9i
amVjdHMgYWxpdmUuCiAgICAgaWYgKCF3cmFwcGVyT2JqZWN0LT53cmFwcGVkT2JqZWN0KCkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gdmlzaXRvci52bSgpLmhlYXAuaXNNYXJr
ZWQod3JhcHBlck9iamVjdC0+c3RydWN0dXJlKCktPmdsb2JhbE9iamVjdCgpKSAmJiB2aXNpdG9y
LmNvbnRhaW5zT3BhcXVlUm9vdCh3cmFwcGVyT2JqZWN0LT53cmFwcGVkT2JqZWN0KCkpOworLy8g
ICAgcmV0dXJuIHZpc2l0b3Iudm0oKS5oZWFwLmlzTWFya2VkKHdyYXBwZXJPYmplY3QtPnN0cnVj
dHVyZSgpLT5nbG9iYWxPYmplY3QoKSkgJiYgdmlzaXRvci5jb250YWluc09wYXF1ZVJvb3Qod3Jh
cHBlck9iamVjdC0+d3JhcHBlZE9iamVjdCgpKTsKKyAgICByZXR1cm4gdmlzaXRvci5pc01hcmtl
ZCh3cmFwcGVyT2JqZWN0LT5zdHJ1Y3R1cmUoKS0+Z2xvYmFsT2JqZWN0KCkpICYmIHZpc2l0b3Iu
Y29udGFpbnNPcGFxdWVSb290KHdyYXBwZXJPYmplY3QtPndyYXBwZWRPYmplY3QoKSk7CiB9CiAK
IG5hbWVzcGFjZSBKU0MgewpAQCAtNzMsNiArNzQsOCBAQCBzdGF0aWMgSlNDX0RFQ0xBUkVfSE9T
VF9GVU5DVElPTihjb25zdHJ1CiBzdGF0aWMgSlNDX0RFQ0xBUkVfQ1VTVE9NX0dFVFRFUihjYWxs
YmFja0dldHRlckpTQVBJV3JhcHBlck9iamVjdENhbGxiYWNrT2JqZWN0KTsKIHN0YXRpYyBKU0Nf
REVDTEFSRV9DVVNUT01fR0VUVEVSKHN0YXRpY0Z1bmN0aW9uR2V0dGVySlNBUElXcmFwcGVyT2Jq
ZWN0Q2FsbGJhY2tPYmplY3QpOwogCitERUZJTkVfVEVNUExBVEVfVklTSVRfQ0hJTERSRU4odGVt
cGxhdGU8PiwgSlNDYWxsYmFja09iamVjdDxKU0FQSVdyYXBwZXJPYmplY3Q+KTsKKwogdGVtcGxh
dGUgPD4gY29uc3QgQ2xhc3NJbmZvIEpTQ2FsbGJhY2tPYmplY3Q8SlNBUElXcmFwcGVyT2JqZWN0
Pjo6c19pbmZvID0geyAiSlNBUElXcmFwcGVyT2JqZWN0IiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0
ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU0NhbGxiYWNrT2JqZWN0KSB9OwogdGVt
cGxhdGUgPD4gY29uc3QgYm9vbCBKU0NhbGxiYWNrT2JqZWN0PEpTQVBJV3JhcHBlck9iamVjdD46
Om5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOwogCkBAIC0xMjMsNyArMTI2LDggQEAgdm9pZCBKU0FQ
SVdyYXBwZXJPYmplY3Q6OnNldFdyYXBwZWRPYmplYwogICAgIG1fd3JhcHBlZE9iamVjdCA9IFtz
dGF0aWNfY2FzdDxpZD4od3JhcHBlZE9iamVjdCkgcmV0YWluXTsKIH0KIAotdm9pZCBKU0FQSVdy
YXBwZXJPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBKU0M6OlNsb3RWaXNpdG9y
JiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNBUElXcmFwcGVy
T2JqZWN0Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3Ip
CiB7CiAgICAgSlNBUElXcmFwcGVyT2JqZWN0KiB0aGlzT2JqZWN0ID0gSlNDOjpqc0Nhc3Q8SlNB
UElXcmFwcGVyT2JqZWN0Kj4oY2VsbCk7CiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbihjZWxsLCB2
aXNpdG9yKTsKQEAgLTEzMyw2ICsxMzcsOCBAQCB2b2lkIEpTQVBJV3JhcHBlck9iamVjdDo6dmlz
aXRDaGlsZHJlbihKCiAgICAgICAgIHNjYW5FeHRlcm5hbE9iamVjdEdyYXBoKHZpc2l0b3Iudm0o
KSwgdmlzaXRvciwgd3JhcHBlZE9iamVjdCk7CiB9CiAKK0RFRklORV9FWFBPUlRfVklTSVRfQ0hJ
TERSRU4oSlNBUElXcmFwcGVyT2JqZWN0KTsKKwogdGVtcGxhdGUgPD4KIElzb1N1YnNwYWNlKiBK
U0NhbGxiYWNrT2JqZWN0PEpTQVBJV3JhcHBlck9iamVjdD46OnN1YnNwYWNlRm9ySW1wbChWTSYg
dm0sIFN1YnNwYWNlQWNjZXNzIG1vZGUpCiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
QVBJL0pTQ2FsbGJhY2tPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdC5jcHAJKHJldmlzaW9uIDI3MTc4NikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMTcgQXBwbGUgSW5j
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIwIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwNyBFcmljIFNl
aWRlbCA8ZXJpY0B3ZWJraXQub3JnPgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtNDEsNiArNDEsOSBA
QCBzdGF0aWMgSlNDX0RFQ0xBUkVfQ1VTVE9NX0dFVFRFUihzdGF0aWNGCiBzdGF0aWMgSlNDX0RF
Q0xBUkVfQ1VTVE9NX0dFVFRFUihjYWxsYmFja0dldHRlckpTR2xvYmFsT2JqZWN0Q2FsbGJhY2tP
YmplY3QpOwogc3RhdGljIEpTQ19ERUNMQVJFX0NVU1RPTV9HRVRURVIoc3RhdGljRnVuY3Rpb25H
ZXR0ZXJKU0dsb2JhbE9iamVjdENhbGxiYWNrT2JqZWN0KTsKIAorREVGSU5FX1RFTVBMQVRFX1ZJ
U0lUX0NISUxEUkVOKHRlbXBsYXRlPD4sIEpTQ2FsbGJhY2tPYmplY3Q8SlNOb25GaW5hbE9iamVj
dD4pOworREVGSU5FX1RFTVBMQVRFX1ZJU0lUX0NISUxEUkVOKHRlbXBsYXRlPD4sIEpTQ2FsbGJh
Y2tPYmplY3Q8SlNHbG9iYWxPYmplY3Q+KTsKKwogLy8gRGVmaW5lIHRoZSB0d28gdHlwZXMgb2Yg
SlNDYWxsYmFja09iamVjdHMgd2Ugc3VwcG9ydC4KIHRlbXBsYXRlIDw+IGNvbnN0IENsYXNzSW5m
byBKU0NhbGxiYWNrT2JqZWN0PEpTTm9uRmluYWxPYmplY3Q+OjpzX2luZm8gPSB7ICJDYWxsYmFj
a09iamVjdCIsICZCYXNlOjpzX2luZm8sIG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0Rf
VEFCTEUoSlNDYWxsYmFja09iamVjdCkgfTsKIHRlbXBsYXRlIDw+IGNvbnN0IENsYXNzSW5mbyBK
U0NhbGxiYWNrT2JqZWN0PEpTR2xvYmFsT2JqZWN0Pjo6c19pbmZvID0geyAiQ2FsbGJhY2tHbG9i
YWxPYmplY3QiLCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9E
X1RBQkxFKEpTQ2FsbGJhY2tPYmplY3QpIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
QVBJL0pTQ2FsbGJhY2tPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvQVBJL0pTQ2FsbGJhY2tPYmplY3QuaAkocmV2aXNpb24gMjcxNzg2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTY5
LDcgKzY5LDEwIEBAIHB1YmxpYzoKICAgICAgICAgbV9wcml2YXRlUHJvcGVydGllcy0+ZGVsZXRl
UHJpdmF0ZVByb3BlcnR5KHByb3BlcnR5TmFtZSk7CiAgICAgfQogCi0gICAgdm9pZCB2aXNpdENo
aWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47
CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgorICAgIHZvaWQgdmlzaXRDaGlsZHJl
bihWaXNpdG9yJiB2aXNpdG9yKQogICAgIHsKICAgICAgICAgSlNQcml2YXRlUHJvcGVydHlNYXAq
IHByb3BlcnRpZXMgPSBtX3ByaXZhdGVQcm9wZXJ0aWVzLmdldCgpOwogICAgICAgICBpZiAoIXBy
b3BlcnRpZXMpCkBAIC0xMDMsNyArMTA2LDggQEAgcHVibGljOgogICAgICAgICAgICAgbV9wcm9w
ZXJ0eU1hcC5yZW1vdmUocHJvcGVydHlOYW1lLmltcGwoKSk7CiAgICAgICAgIH0KIAotICAgICAg
ICB2b2lkIHZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisgICAgICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFZpc2l0b3I+CisgICAgICAgIHZvaWQgdmlzaXRDaGlsZHJlbihWaXNpdG9y
JiB2aXNpdG9yKQogICAgICAgICB7CiAgICAgICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2xv
Y2spOwogICAgICAgICAgICAgZm9yIChhdXRvJiBwYWlyIDogbV9wcm9wZXJ0eU1hcCkgewpAQCAt
MjE2LDEzICsyMjAsNyBAQCBwcml2YXRlOgogICAgIHN0YXRpYyBDYWxsRGF0YSBnZXRDb25zdHJ1
Y3REYXRhKEpTQ2VsbCopOwogICAgIHN0YXRpYyBDYWxsRGF0YSBnZXRDYWxsRGF0YShKU0NlbGwq
KTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90Vmlz
aXRvciYgdmlzaXRvcikKLSAgICB7Ci0gICAgICAgIEpTQ2FsbGJhY2tPYmplY3QqIHRoaXNPYmpl
Y3QgPSBqc0Nhc3Q8SlNDYWxsYmFja09iamVjdCo+KGNlbGwpOwotICAgICAgICBBU1NFUlRfR0Nf
T0JKRUNUX0lOSEVSSVRTKChzdGF0aWNfY2FzdDxQYXJlbnQqPih0aGlzT2JqZWN0KSksIEpTQ2Fs
bGJhY2tPYmplY3Q8UGFyZW50Pjo6aW5mbygpKTsKLSAgICAgICAgUGFyZW50Ojp2aXNpdENoaWxk
cmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwotICAgICAgICB0aGlzT2JqZWN0LT5tX2NhbGxiYWNr
T2JqZWN0RGF0YS0+dmlzaXRDaGlsZHJlbih2aXNpdG9yKTsKLSAgICB9CisgICAgREVDTEFSRV9U
RU1QTEFURV9WSVNJVF9DSElMRFJFTjsKIAogICAgIHZvaWQgaW5pdChKU0dsb2JhbE9iamVjdCop
OwogIApAQCAtMjQ1LDYgKzI0MywxNiBAQCBwcml2YXRlOgogICAgIGNvbnN0IENsYXNzSW5mbyog
bV9jbGFzc0luZm8geyBudWxscHRyIH07CiB9OwogCit0ZW1wbGF0ZSA8Y2xhc3MgUGFyZW50Pgor
dGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNDYWxsYmFja09iamVjdDxQYXJlbnQ+
Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCit7Cisg
ICAgSlNDYWxsYmFja09iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0NhbGxiYWNrT2JqZWN0
Kj4oY2VsbCk7CisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUygoc3RhdGljX2Nhc3Q8UGFy
ZW50Kj4odGhpc09iamVjdCkpLCBKU0NhbGxiYWNrT2JqZWN0PFBhcmVudD46OmluZm8oKSk7Cisg
ICAgUGFyZW50Ojp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOworICAgIHRoaXNP
YmplY3QtPm1fY2FsbGJhY2tPYmplY3REYXRhLT52aXNpdENoaWxkcmVuKHZpc2l0b3IpOworfQor
CiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogLy8gaW5jbHVkZSB0aGUgYWN0dWFsIHRlbXBsYXRlIGNs
YXNzIGltcGxlbWVudGF0aW9uCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTTWFu
YWdlZFZhbHVlLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNN
YW5hZ2VkVmFsdWUubW0JKHJldmlzaW9uIDI3MTc4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9BUEkvSlNNYW5hZ2VkVmFsdWUubW0JKHdvcmtpbmcgY29weSkKQEAgLTQyLDcgKzQyLDcgQEAK
IGNsYXNzIEpTTWFuYWdlZFZhbHVlSGFuZGxlT3duZXIgZmluYWwgOiBwdWJsaWMgSlNDOjpXZWFr
SGFuZGxlT3duZXIgewogcHVibGljOgogICAgIHZvaWQgZmluYWxpemUoSlNDOjpIYW5kbGU8SlND
OjpVbmtub3duPiwgdm9pZCogY29udGV4dCkgZmluYWw7Ci0gICAgYm9vbCBpc1JlYWNoYWJsZUZy
b21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0LCBK
U0M6OlNsb3RWaXNpdG9yJiwgY29uc3QgY2hhcioqKSBmaW5hbDsKKyAgICBib29sIGlzUmVhY2hh
YmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRl
eHQsIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYsIGNvbnN0IGNoYXIqKikgZmluYWw7CiB9Owog
CiBzdGF0aWMgSlNNYW5hZ2VkVmFsdWVIYW5kbGVPd25lciYgbWFuYWdlZFZhbHVlSGFuZGxlT3du
ZXIoKQpAQCAtMTgwLDcgKzE4MCw3IEBAIEBpbnRlcmZhY2UgSlNNYW5hZ2VkVmFsdWUgKFByaXZh
dGVNZXRob2QKIC0gKHZvaWQpZGlzY29ubmVjdFZhbHVlOwogQGVuZAogCi1ib29sIEpTTWFuYWdl
ZFZhbHVlSGFuZGxlT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxl
PEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3Is
IGNvbnN0IGNoYXIqKiByZWFzb24pCitib29sIEpTTWFuYWdlZFZhbHVlSGFuZGxlT3duZXI6Omlz
UmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQq
IGNvbnRleHQsIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioq
IHJlYXNvbikKIHsKICAgICBpZiAoVU5MSUtFTFkocmVhc29uKSkKICAgICAgICAgKnJlYXNvbiA9
ICJKU01hbmFnZWRWYWx1ZSBpcyBvcGFxdWUgcm9vdCI7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvQVBJL0pTTWFya2luZ0NvbnN0cmFpbnRQcml2YXRlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTTWFya2luZ0NvbnN0cmFpbnRQcml2YXRlLmNwcAko
cmV2aXNpb24gMjcxNzg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU01hcmtpbmdD
b25zdHJhaW50UHJpdmF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDcgKzM2LDcgQEAgbmFt
ZXNwYWNlIHsKIEF0b21pYzx1bnNpZ25lZD4gY29uc3RyYWludENvdW50ZXI7CiAKIHN0cnVjdCBN
YXJrZXIgOiBKU01hcmtlciB7Ci0gICAgU2xvdFZpc2l0b3IqIHZpc2l0b3I7CisgICAgQWJzdHJh
Y3RTbG90VmlzaXRvciogdmlzaXRvcjsKIH07CiAKIGJvb2wgaXNNYXJrZWQoSlNNYXJrZXJSZWYg
bWFya2VyUmVmLCBKU09iamVjdFJlZiBvYmplY3RSZWYpCkBAIC00NCw3ICs0NCw4IEBAIGJvb2wg
aXNNYXJrZWQoSlNNYXJrZXJSZWYgbWFya2VyUmVmLCBKU08KICAgICBpZiAoIW9iamVjdFJlZikK
ICAgICAgICAgcmV0dXJuIHRydWU7IC8vIE51bGwgaXMgYW4gaW1tb3J0YWwgb2JqZWN0LgogICAg
IAotICAgIHJldHVybiBzdGF0aWNfY2FzdDxNYXJrZXIqPihtYXJrZXJSZWYpLT52aXNpdG9yLT52
bSgpLmhlYXAuaXNNYXJrZWQodG9KUyhvYmplY3RSZWYpKTsKKy8vICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxNYXJrZXIqPihtYXJrZXJSZWYpLT52aXNpdG9yLT52bSgpLmhlYXAuaXNNYXJrZWQodG9K
UyhvYmplY3RSZWYpKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8TWFya2VyKj4obWFya2VyUmVm
KS0+dmlzaXRvci0+aXNNYXJrZWQodG9KUyhvYmplY3RSZWYpKTsKIH0KIAogdm9pZCBtYXJrKEpT
TWFya2VyUmVmIG1hcmtlclJlZiwgSlNPYmplY3RSZWYgb2JqZWN0UmVmKQpAQCAtNzQsMTEgKzc1
LDExIEBAIHZvaWQgSlNDb250ZXh0R3JvdXBBZGRNYXJraW5nQ29uc3RyYWludCgKICAgICAgICAg
dG9DU3RyaW5nKCJBbWMiLCBjb25zdHJhaW50SW5kZXgsICIoIiwgUmF3UG9pbnRlcihiaXR3aXNl
X2Nhc3Q8dm9pZCo+KGNvbnN0cmFpbnRDYWxsYmFjaykpLCAiKSIpLAogICAgICAgICB0b0NTdHJp
bmcoIkFQSSBNYXJraW5nIENvbnN0cmFpbnQgIyIsIGNvbnN0cmFpbnRJbmRleCwgIiAoIiwgUmF3
UG9pbnRlcihiaXR3aXNlX2Nhc3Q8dm9pZCo+KGNvbnN0cmFpbnRDYWxsYmFjaykpLCAiLCAiLCBS
YXdQb2ludGVyKHVzZXJEYXRhKSwgIikiKSwKICAgICAgICAgW2NvbnN0cmFpbnRDYWxsYmFjaywg
dXNlckRhdGFdCi0gICAgICAgIChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IpIHsKKyAgICAgICAg
KEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsKICAgICAgICAgICAgIE1hcmtlciBtYXJr
ZXI7CiAgICAgICAgICAgICBtYXJrZXIuSXNNYXJrZWQgPSBpc01hcmtlZDsKICAgICAgICAgICAg
IG1hcmtlci5NYXJrID0gbWFyazsKLSAgICAgICAgICAgIG1hcmtlci52aXNpdG9yID0gJnNsb3RW
aXNpdG9yOworICAgICAgICAgICAgbWFya2VyLnZpc2l0b3IgPSAmdmlzaXRvcjsKICAgICAgICAg
ICAgIAogICAgICAgICAgICAgY29uc3RyYWludENhbGxiYWNrKCZtYXJrZXIsIHVzZXJEYXRhKTsK
ICAgICAgICAgfSwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWaXJ0dWFsTWFj
aGluZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmlydHVh
bE1hY2hpbmUubW0JKHJldmlzaW9uIDI3MTc4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9B
UEkvSlNWaXJ0dWFsTWFjaGluZS5tbQkod29ya2luZyBjb3B5KQpAQCAtMzE2LDcgKzMxNiw4IEBA
ICsgKHZvaWQpc2V0Q3Jhc2hPblZNQ3JlYXRpb246KEJPT0wpc2hvdWwKIAogQGVuZAogCi1zdGF0
aWMgdm9pZCBzY2FuRXh0ZXJuYWxPYmplY3RHcmFwaChKU0M6OlZNJiB2bSwgSlNDOjpTbG90Vmlz
aXRvciYgdmlzaXRvciwgdm9pZCogcm9vdCwgYm9vbCBsb2NrQWNxdWlyZWQpCit0ZW1wbGF0ZTx0
eXBlbmFtZSBWaXNpdG9yPgorc3RhdGljIHZvaWQgc2NhbkV4dGVybmFsT2JqZWN0R3JhcGgoSlND
OjpWTSYgdm0sIFZpc2l0b3ImIHZpc2l0b3IsIHZvaWQqIHJvb3QsIGJvb2wgbG9ja0FjcXVpcmVk
KQogewogICAgIEBhdXRvcmVsZWFzZXBvb2wgewogICAgICAgICBKU1ZpcnR1YWxNYWNoaW5lICp2
aXJ0dWFsTWFjaGluZSA9IFtKU1ZNV3JhcHBlckNhY2hlIHdyYXBwZXJGb3JKU0NvbnRleHRHcm91
cFJlZjp0b1JlZigmdm0pXTsKQEAgLTM0OCwxMyArMzQ5LDE3IEBAIHN0YXRpYyB2b2lkIHNjYW5F
eHRlcm5hbE9iamVjdEdyYXBoKEpTQzoKICAgICB9CiB9CiAKLXZvaWQgc2NhbkV4dGVybmFsT2Jq
ZWN0R3JhcGgoSlNDOjpWTSYgdm0sIEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IsIHZvaWQqIHJv
b3QpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBzY2FuRXh0ZXJuYWxPYmplY3RH
cmFwaChKU0M6OlZNJiB2bSwgVmlzaXRvciYgdmlzaXRvciwgdm9pZCogcm9vdCkKIHsKICAgICBi
b29sIGxvY2tBY3F1aXJlZCA9IGZhbHNlOwogICAgIHNjYW5FeHRlcm5hbE9iamVjdEdyYXBoKHZt
LCB2aXNpdG9yLCByb290LCBsb2NrQWNxdWlyZWQpOwogfQogCi12b2lkIHNjYW5FeHRlcm5hbFJl
bWVtYmVyZWRTZXQoSlNDOjpWTSYgdm0sIEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1w
bGF0ZSB2b2lkIHNjYW5FeHRlcm5hbE9iamVjdEdyYXBoKEpTQzo6Vk0mLCBKU0M6OlNsb3RWaXNp
dG9yJiwgdm9pZCopOwordGVtcGxhdGUgdm9pZCBzY2FuRXh0ZXJuYWxPYmplY3RHcmFwaChKU0M6
OlZNJiwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiwgdm9pZCopOworCit2b2lkIHNjYW5FeHRl
cm5hbFJlbWVtYmVyZWRTZXQoSlNDOjpWTSYgdm0sIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYg
dmlzaXRvcikKIHsKICAgICBAYXV0b3JlbGVhc2Vwb29sIHsKICAgICAgICAgSlNWaXJ0dWFsTWFj
aGluZSAqdmlydHVhbE1hY2hpbmUgPSBbSlNWTVdyYXBwZXJDYWNoZSB3cmFwcGVyRm9ySlNDb250
ZXh0R3JvdXBSZWY6dG9SZWYoJnZtKV07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJ
L0pTVmlydHVhbE1hY2hpbmVJbnRlcm5hbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvSlNWaXJ0dWFsTWFjaGluZUludGVybmFsLmgJKHJldmlzaW9uIDI3MTc4NikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWaXJ0dWFsTWFjaGluZUludGVybmFsLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDggQEAKIAogbmFtZXNwYWNlIEpTQyB7CiBjbGFz
cyBWTTsKLWNsYXNzIFNsb3RWaXNpdG9yOworLy9jbGFzcyBTbG90VmlzaXRvcjsKK2NsYXNzIEFi
c3RyYWN0U2xvdFZpc2l0b3I7CiB9CiAKICNpZiBkZWZpbmVkKF9fT0JKQ19fKQpAQCAtNTQsOCAr
NTUsOCBAQCBKU0NvbnRleHRHcm91cFJlZiBnZXRHcm91cEZyb21WaXJ0dWFsTWFjCiAKICNlbmRp
ZiAvLyBkZWZpbmVkKF9fT0JKQ19fKQogCi12b2lkIHNjYW5FeHRlcm5hbE9iamVjdEdyYXBoKEpT
Qzo6Vk0mLCBKU0M6OlNsb3RWaXNpdG9yJiwgdm9pZCogcm9vdCk7Ci12b2lkIHNjYW5FeHRlcm5h
bFJlbWVtYmVyZWRTZXQoSlNDOjpWTSYsIEpTQzo6U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlPHR5
cGVuYW1lIFZpc2l0b3I+IHZvaWQgc2NhbkV4dGVybmFsT2JqZWN0R3JhcGgoSlNDOjpWTSYsIFZp
c2l0b3ImLCB2b2lkKiByb290KTsKK3ZvaWQgc2NhbkV4dGVybmFsUmVtZW1iZXJlZFNldChKU0M6
OlZNJiwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAKICNlbmRpZiAvLyBKU0NfT0JKQ19B
UElfRU5BQkxFRAogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL01hcmtlZEpTVmFs
dWVSZWZBcnJheS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9N
YXJrZWRKU1ZhbHVlUmVmQXJyYXkuY3BwCShyZXZpc2lvbiAyNzE3ODYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvQVBJL01hcmtlZEpTVmFsdWVSZWZBcnJheS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQ2LDcgKzQ2LDkgQEAgTWFya2VkSlNWYWx1ZVJlZkFycmF5Ojp+TWFya2VkSlNWYWx1ZVJl
ZgogICAgICAgICByZW1vdmUoKTsKIH0KIAotdm9pZCBNYXJrZWRKU1ZhbHVlUmVmQXJyYXk6OnZp
c2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy90ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPgorLy92b2lkIE1hcmtlZEpTVmFsdWVSZWZBcnJheTo6dmlzaXRBZ2dyZWdhdGUoVmlz
aXRvciYgdmlzaXRvcikKK3ZvaWQgTWFya2VkSlNWYWx1ZVJlZkFycmF5Ojp2aXNpdEFnZ3JlZ2F0
ZTEoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU1ZhbHVlUmVmKiBidWZm
ZXIgPSBkYXRhKCk7CiAgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IDA7IGluZGV4IDwgbV9zaXpl
OyArK2luZGV4KSB7CkBAIC02Miw0ICs2NCw3IEBAIHZvaWQgTWFya2VkSlNWYWx1ZVJlZkFycmF5
Ojp2aXNpdEFnZ3JlZ2EKICAgICB9CiB9CiAKKy8vdGVtcGxhdGUgdm9pZCBNYXJrZWRKU1ZhbHVl
UmVmQXJyYXk6OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJik7CisvL3RlbXBsYXRlIHZvaWQg
TWFya2VkSlNWYWx1ZVJlZkFycmF5Ojp2aXNpdEFnZ3JlZ2F0ZShWZXJpZmllclNsb3RWaXNpdG9y
Jik7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQ
SS9NYXJrZWRKU1ZhbHVlUmVmQXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvQVBJL01hcmtlZEpTVmFsdWVSZWZBcnJheS5oCShyZXZpc2lvbiAyNzE3ODYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL01hcmtlZEpTVmFsdWVSZWZBcnJheS5oCSh3b3JraW5n
IGNvcHkpCkBAIC02Miw3ICs2Miw4IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1faW5saW5l
QnVmZmVyOwogICAgIH0KIAotICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImKTsK
Ky8vICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgdmlzaXRBZ2dyZWdhdGUoVmlz
aXRvciYpOworICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUxKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsK
IAogcHJpdmF0ZToKICAgICB1bnNpZ25lZCBtX3NpemU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvQVBJL2dsaWIvSlNBUElXcmFwcGVyR2xvYmFsT2JqZWN0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNBUElXcmFwcGVyR2xvYmFsT2JqZWN0
LmNwcAkocmV2aXNpb24gMjcxNzg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGli
L0pTQVBJV3JhcHBlckdsb2JhbE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU5LDYgKzU5
LDggQEAgc3RhdGljIEpTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJT04oY29uc3RydQogc3RhdGljIEpT
Q19ERUNMQVJFX0NVU1RPTV9HRVRURVIoY2FsbGJhY2tHZXR0ZXJKU0FQSVdyYXBwZXJHbG9iYWxP
YmplY3RDYWxsYmFja09iamVjdCk7CiBzdGF0aWMgSlNDX0RFQ0xBUkVfQ1VTVE9NX0dFVFRFUihz
dGF0aWNGdW5jdGlvbkdldHRlckpTQVBJV3JhcHBlckdsb2JhbE9iamVjdENhbGxiYWNrT2JqZWN0
KTsKIAorREVGSU5FX1RFTVBMQVRFX1ZJU0lUX0NISUxEUkVOKHRlbXBsYXRlPD4sIEpTQ2FsbGJh
Y2tPYmplY3Q8SlNBUElXcmFwcGVyR2xvYmFsT2JqZWN0Pik7CisKIHRlbXBsYXRlIDw+IGNvbnN0
IENsYXNzSW5mbyBKU0NhbGxiYWNrT2JqZWN0PEpTQVBJV3JhcHBlckdsb2JhbE9iamVjdD46OnNf
aW5mbyA9IHsgIkpTQVBJV3JhcHBlckdsb2JhbE9iamVjdCIsICZCYXNlOjpzX2luZm8sIG51bGxw
dHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNDYWxsYmFja09iamVjdCkgfTsKIHRl
bXBsYXRlPD4gY29uc3QgYm9vbCBKU0NhbGxiYWNrT2JqZWN0PEpTQVBJV3JhcHBlckdsb2JhbE9i
amVjdD46Om5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOwogCkBAIC0xNDQsOSArMTQ2LDkgQEAgdm9p
ZCBKU0FQSVdyYXBwZXJHbG9iYWxPYmplY3Q6OmZpbmlzaENyZQogICAgIFdlYWtTZXQ6OmFsbG9j
YXRlKHRoaXMsIGpzQVBJV3JhcHBlckdsb2JhbE9iamVjdEhhbmRsZU93bmVyKCksIDApOyAvLyBC
YWxhbmNlZCBpbiBKU0FQSVdyYXBwZXJHbG9iYWxPYmplY3RIYW5kbGVPd25lcjo6ZmluYWxpemUu
CiB9CiAKLXZvaWQgSlNBUElXcmFwcGVyR2xvYmFsT2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2Vs
bCogY2VsbCwgSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKLXsKLSAgICBCYXNlOjp2aXNpdENo
aWxkcmVuKGNlbGwsIHZpc2l0b3IpOwotfQorLy92b2lkIEpTQVBJV3JhcHBlckdsb2JhbE9iamVj
dDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3Ip
CisvL3sKKy8vICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4oY2VsbCwgdmlzaXRvcik7CisvL30KIAog
fSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIv
SlNBUElXcmFwcGVyR2xvYmFsT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL0FQSS9nbGliL0pTQVBJV3JhcHBlckdsb2JhbE9iamVjdC5oCShyZXZpc2lvbiAyNzE3
ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNBUElXcmFwcGVyR2xvYmFs
T2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDcgKzM5LDcgQEAgcHVibGljOgogICAgIHN0
YXRpYyB2b2lkIHN1YnNwYWNlRm9yKFZNJikgeyBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OyB9CiAKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7Ci0gICAgc3RhdGljIHZvaWQgdmlz
aXRDaGlsZHJlbihKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJik7CisgICAgLy8gc3RhdGljIHZv
aWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJik7CiAKICAgICBKU0NH
TGliV3JhcHBlck9iamVjdCogd3JhcHBlZE9iamVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fd3JhcHBl
ZE9iamVjdDsgfQogICAgIHZvaWQgc2V0V3JhcHBlZE9iamVjdChKU0NHTGliV3JhcHBlck9iamVj
dCogd3JhcHBlZE9iamVjdCkgeyBtX3dyYXBwZWRPYmplY3QgPSB3cmFwcGVkT2JqZWN0OyB9Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNBUElXcmFwcGVyT2JqZWN0R0xp
Yi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQVBJ
V3JhcHBlck9iamVjdEdMaWIuY3BwCShyZXZpc2lvbiAyNzE3ODYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvQVBJL2dsaWIvSlNBUElXcmFwcGVyT2JqZWN0R0xpYi5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJKU0FQ
SVdyYXBwZXJPYmplY3QuaCIKIAorI2luY2x1ZGUgIkFic3RyYWN0U2xvdFZpc2l0b3IuaCIKICNp
bmNsdWRlICJKU0NHTGliV3JhcHBlck9iamVjdC5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIK
ICNpbmNsdWRlICJKU0NhbGxiYWNrT2JqZWN0LmgiCkBAIC0zNiw3ICszNyw4IEBACiBjbGFzcyBK
U0FQSVdyYXBwZXJPYmplY3RIYW5kbGVPd25lciBmaW5hbCA6IHB1YmxpYyBKU0M6OldlYWtIYW5k
bGVPd25lciB7CiBwdWJsaWM6CiAgICAgdm9pZCBmaW5hbGl6ZShKU0M6OkhhbmRsZTxKU0M6OlVu
a25vd24+LCB2b2lkKikgZmluYWw7Ci0gICAgYm9vbCBpc1JlYWNoYWJsZUZyb21PcGFxdWVSb290
cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0LCBKU0M6OlNsb3RWaXNp
dG9yJiwgY29uc3QgY2hhcioqKSBmaW5hbDsKKy8vICAgICBib29sIGlzUmVhY2hhYmxlRnJvbU9w
YXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6
U2xvdFZpc2l0b3ImLCBjb25zdCBjaGFyKiopIGZpbmFsOworICAgIGJvb2wgaXNSZWFjaGFibGVG
cm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCwg
SlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiwgY29uc3QgY2hhcioqKSBmaW5hbDsKIH07CiAKIHN0
YXRpYyBKU0FQSVdyYXBwZXJPYmplY3RIYW5kbGVPd25lcioganNBUElXcmFwcGVyT2JqZWN0SGFu
ZGxlT3duZXIoKQpAQCAtNTUsNyArNTcsOCBAQCB2b2lkIEpTQVBJV3JhcHBlck9iamVjdEhhbmRs
ZU93bmVyOjpmaW5hCiAgICAgSlNDOjpXZWFrU2V0OjpkZWFsbG9jYXRlKEpTQzo6V2Vha0ltcGw6
OmFzV2Vha0ltcGwoaGFuZGxlLnNsb3QoKSkpOwogfQogCi1ib29sIEpTQVBJV3JhcHBlck9iamVj
dEhhbmRsZU93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6
OlVua25vd24+IGhhbmRsZSwgdm9pZCosIEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0
IGNoYXIqKikKKy8vIGJvb2wgSlNBUElXcmFwcGVyT2JqZWN0SGFuZGxlT3duZXI6OmlzUmVhY2hh
YmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lk
KiwgSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqKQorYm9vbCBKU0FQSVdy
YXBwZXJPYmplY3RIYW5kbGVPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpI
YW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0
b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKikKIHsKICAgICBKU0M6OkpTQVBJV3JhcHBlck9iamVj
dCogd3JhcHBlck9iamVjdCA9IEpTQzo6anNDYXN0PEpTQzo6SlNBUElXcmFwcGVyT2JqZWN0Kj4o
aGFuZGxlLmdldCgpLmFzQ2VsbCgpKTsKICAgICAvLyBXZSB1c2UgdGhlIEpTR2xvYmFsT2JqZWN0
IHdoZW4gcHJvY2Vzc2luZyB3ZWFrIGhhbmRsZXMgdG8gcHJldmVudCB0aGUgc2l0dWF0aW9uIHdo
ZXJlIHVzaW5nCkBAIC03Miw2ICs3NSw4IEBAIHN0YXRpYyBKU0NfREVDTEFSRV9IT1NUX0ZVTkNU
SU9OKGNvbnN0cnUKIHN0YXRpYyBKU0NfREVDTEFSRV9DVVNUT01fR0VUVEVSKGNhbGxiYWNrR2V0
dGVySlNBUElXcmFwcGVyT2JqZWN0Q2FsbGJhY2tPYmplY3QpOwogc3RhdGljIEpTQ19ERUNMQVJF
X0NVU1RPTV9HRVRURVIoc3RhdGljRnVuY3Rpb25HZXR0ZXJKU0FQSVdyYXBwZXJPYmplY3RDYWxs
YmFja09iamVjdCk7CiAKK0RFRklORV9URU1QTEFURV9WSVNJVF9DSElMRFJFTih0ZW1wbGF0ZTw+
LCBKU0NhbGxiYWNrT2JqZWN0PEpTQVBJV3JhcHBlck9iamVjdD4pOworCiB0ZW1wbGF0ZSA8PiBj
b25zdCBDbGFzc0luZm8gSlNDYWxsYmFja09iamVjdDxKU0FQSVdyYXBwZXJPYmplY3Q+OjpzX2lu
Zm8gPSB7ICJKU0FQSVdyYXBwZXJPYmplY3QiLCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBudWxs
cHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTQ2FsbGJhY2tPYmplY3QpIH07CiB0ZW1wbGF0ZTw+
IGNvbnN0IGJvb2wgSlNDYWxsYmFja09iamVjdDxKU0FQSVdyYXBwZXJPYmplY3Q+OjpuZWVkc0Rl
c3RydWN0aW9uID0gdHJ1ZTsKIApAQCAtMTU1LDkgKzE2MCwxMiBAQCB2b2lkIEpTQVBJV3JhcHBl
ck9iamVjdDo6c2V0V3JhcHBlZE9iamVjCiAgICAgbV93cmFwcGVkT2JqZWN0ID0gd3JhcHBlZE9i
amVjdDsKIH0KIAotdm9pZCBKU0FQSVdyYXBwZXJPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiBjZWxsLCBKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlz
aXRvcj4KK3ZvaWQgSlNBUElXcmFwcGVyT2JqZWN0Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwq
IGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbihjZWxs
LCB2aXNpdG9yKTsKIH0KIAorREVGSU5FX0VYUE9SVF9WSVNJVF9DSElMRFJFTihKU0FQSVdyYXBw
ZXJPYmplY3QpOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCShyZXZpc2lvbiAyNzE3ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAt
MTkwOSw2ICsxOTA5LDcgQEAKIAkJRTNGRjc1MzMxRDlDRUExODAwQzdFMTZEIC8qIERPTUpJVEdl
dHRlclNldHRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRTNGRjc1MkYxRDlDRUExMjAwQzdFMTZEIC8qIERPTUpJVEdldHRlclNldHRlci5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUU0OURDMTZDMTJF
RjI5NEUwMDE4NEExRiAvKiBTb3VyY2VQcm92aWRlckNhY2hlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDlEQzE1MTEyRUYyNzIyMDAxODRBMUYgLyog
U291cmNlUHJvdmlkZXJDYWNoZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCUU0OURDMTZEMTJFRjI5NTMwMDE4NEExRiAvKiBTb3VyY2VQcm92aWRl
ckNhY2hlSXRlbS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRTQ5REMxNDkxMkVGMjYxQTAwMTg0QTFGIC8qIFNvdXJjZVByb3ZpZGVyQ2FjaGVJdGVtLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJRkUwNDE1
NTMyNTJFQzA3MzAwOTFFQjVEIC8qIFNsb3RWaXNpdG9yTWFjcm9zLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTA0MTU1MjI1MkVDMDczMDA5MUVCNUQg
LyogU2xvdFZpc2l0b3JNYWNyb3MuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQlGRTA1RkFGRDFGRTRDRURBMDAwOTMyMzAgLyogRGVwcmVjYXRlZElu
c3BlY3RvclZhbHVlcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA5OTJENkExMTFGQkQ0OTFEMDAwMjQ1RjQgLyogRGVwcmVjYXRlZEluc3BlY3RvclZh
bHVlcy5jcHAgKi87IH07CiAJCUZFMDg2QkNBMjEyM0RFRkIwMDNGMjkyOSAvKiBFbnRyeUZyYW1l
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTA4NkJD
OTIxMjNERUZBMDAzRjI5MjkgLyogRW50cnlGcmFtZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUZFMEQ0QTA2MUFCOEREMEEwMDJGNTRCRiAvKiBF
eGVjdXRpb25UaW1lTGltaXRUZXN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEZFMEQ0QTA0MUFCOEREMEEwMDJGNTRCRiAvKiBFeGVjdXRpb25UaW1l
TGltaXRUZXN0LmNwcCAqLzsgfTsKQEAgLTE5MzEsNiArMTkzMiw3IEBACiAJCUZFMUUyQzNGMjI0
MERENTgwMEY2QjcyOSAvKiBNYWNyb0Fzc2VtYmxlckFSTTY0RS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUxRTJDM0UyMjQwRDMwQjAwRjZCNzI5IC8q
IE1hY3JvQXNzZW1ibGVyQVJNNjRFLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJRkUxRTJDNDAyMjQwREQ2MjAwRjZCNzI5IC8qIEFSTTY0RUFzc2Vt
Ymxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUx
RTJDM0QyMjQwRDJGNjAwRjZCNzI5IC8qIEFSTTY0RUFzc2VtYmxlci5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUZFMjBDRTlFMTVGMDRBOTUwMERG
MzQzMCAvKiBMTEludENMb29wLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBGRTIwQ0U5QzE1RjA0QTk1MDBERjM0MzAgLyogTExJbnRDTG9vcC5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUZFMjg3RDAyMjUy
RkIyRTgwMEQ3MjNGOSAvKiBWZXJpZmllclNsb3RWaXNpdG9yLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTI4N0QwMTI1MkZCMkU4MDBENzIzRjkgLyog
VmVyaWZpZXJTbG90VmlzaXRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCUZFMkE4NzYwMUYwMjM4MTYwMEVCMzFCMiAvKiBNaW5pbXVtUmVzZXJ2
ZWRab25lU2l6ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRkUyQTg3NUYxRjAyMzgxNjAwRUIzMUIyIC8qIE1pbmltdW1SZXNlcnZlZFpvbmVTaXplLmgg
Ki87IH07CiAJCUZFMzAyMkQzMUUzRDczQTUwMEJBQzQ5MyAvKiBTaWdpbGxDcmFzaEFuYWx5emVy
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTMwMjJE
MTFFM0Q3Mzk2MDBCQUM0OTMgLyogU2lnaWxsQ3Jhc2hBbmFseXplci5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUZFMzAyMkQ3MUU0Mjg1NzMwMEJB
QzQ5MyAvKiBWTUluc3BlY3Rvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRkUzMDIyRDUxRTQyODU2NzAwQkFDNDkzIC8qIFZNSW5zcGVjdG9yLmggKi87
IH07CkBAIC0xOTY4LDYgKzE5NzAsOCBAQAogCQlGRTgwQzE5NzFENzc1Q0REMDA4NTEwQzAgLyog
Q2F0Y2hTY29wZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRkU4MEMxOTYxRDc3NUIyNzAwODUxMEMwIC8qIENhdGNoU2NvcGUuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlGRThERTU0QjIzQUMxREFEMDA1
QzkxNDIgLyogQ2FjaGVhYmxlSWRlbnRpZmllci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRkU4REU1NEEyM0FDMURBRDAwNUM5MTQyIC8qIENhY2hlYWJs
ZUlkZW50aWZpZXIuaCAqLzsgfTsKIAkJRkU4REU1NEQyM0FDMUU4NjAwNUM5MTQyIC8qIENhY2hl
YWJsZUlkZW50aWZpZXJJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBGRThERTU0QzIzQUMxRTg2MDA1QzkxNDIgLyogQ2FjaGVhYmxlSWRlbnRp
ZmllcklubGluZXMuaCAqLzsgfTsKKwkJRkU5MTJCNEYyNTMxMTkzMzAwRkFCRERGIC8qIEFic3Ry
YWN0U2xvdFZpc2l0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEZFOTEyQjRFMjUzMTE5MzMwMEZBQkRERiAvKiBBYnN0cmFjdFNsb3RWaXNpdG9yLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJRkU5MTJC
NTEyNTMxMUFEMTAwRkFCRERGIC8qIEFic3RyYWN0U2xvdFZpc2l0b3JJbmxpbmVzLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTkxMkI1MDI1MzExQUQx
MDBGQUJEREYgLyogQWJzdHJhY3RTbG90VmlzaXRvcklubGluZXMuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlGRTk5QjI0OTFDMjRDM0QzMDBDODIx
NTkgLyogSklUTmVnR2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBGRTk5QjI0ODFDMjRCNkQzMDBDODIxNTkgLyogSklUTmVnR2VuZXJhdG9y
LmggKi87IH07CiAJCUZFQTA4NjIwMTgyQjdBMDQwMEY2RDg1MSAvKiBCcmVha3BvaW50LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRUEwODYxRTE4MkI3
QTA0MDBGNkQ4NTEgLyogQnJlYWtwb2ludC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCUZFQTA4NjIxMTgyQjdBMDQwMEY2RDg1MSAvKiBEZWJ1Z2dl
clByaW1pdGl2ZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEZFQTA4NjFGMTgyQjdBMDQwMEY2RDg1MSAvKiBEZWJ1Z2dlclByaW1pdGl2ZXMuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtNTIwMCw2ICs1
MjA0LDcgQEAKIAkJRjY5MkE4ODcwMjU1NTk3RDAxRkY2MEY3IC8qIEpTQ0pTVmFsdWUuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0
aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlND
SlNWYWx1ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgfTsKIAkJ
RjczOTI2OTE4REM2NDMzMEFGQ0RGMEQ3IC8qIEpTU291cmNlQ29kZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1NvdXJjZUNvZGUuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlGRTAwMjYyMjIzRjNBRjMzMDAzQTM1OEYgLyogV2ViQXNzZW1ibHku
YXNtICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5hc20uYXNtOyBuYW1lID0gV2ViQXNzZW1ibHkuYXNtOyBwYXRoID0gbGxpbnQvV2Vi
QXNzZW1ibHkuYXNtOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRTA0MTU1MjI1MkVD
MDczMDA5MUVCNUQgLyogU2xvdFZpc2l0b3JNYWNyb3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gU2xvdFZpc2l0b3JNYWNyb3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJRkUwODZCQzkyMTIzREVGQTAwM0YyOTI5IC8qIEVudHJ5RnJhbWUuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRW50cnlGcmFtZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlGRTBENEEwNDFBQjhERDBBMDAyRjU0QkYgLyogRXhlY3V0aW9uVGltZUxpbWl0
VGVzdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBFeGVjdXRpb25U
aW1lTGltaXRUZXN0LmNwcDsgcGF0aCA9IEFQSS90ZXN0cy9FeGVjdXRpb25UaW1lTGltaXRUZXN0
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkUwRDRBMDUxQUI4REQwQTAwMkY1
NEJGIC8qIEV4ZWN1dGlvblRpbWVMaW1pdFRlc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gRXhlY3V0aW9uVGltZUxpbWl0VGVzdC5oOyBwYXRoID0gQVBJL3Rlc3RzL0V4ZWN1
dGlvblRpbWVMaW1pdFRlc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTUyMTMs
NiArNTIxOCw3IEBACiAJCUZFMTIyMDI1MUJFN0Y1NjQwMDM5RTZGMiAvKiBKSVRBZGRHZW5lcmF0
b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSklUQWRkR2VuZXJh
dG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkUxMjIwMjYxQkU3RjU2NDAw
MzlFNkYyIC8qIEpJVEFkZEdlbmVyYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBKSVRBZGRHZW5lcmF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkUx
NDA5MDYyMDU2RjNGRTAwQ0ZFMzE4IC8qIE5hdGl2ZUZ1bmN0aW9uLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IE5hdGl2ZUZ1bmN0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUZFMTc4Q0MzMjU1RjIwNTUwMEZGRDY3NyAvKiBBYnN0cmFjdFNsb3RWaXNpdG9y
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEFic3RyYWN0U2xvdFZp
c2l0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTE4NzlGRjFCRkJDNzND
MDAzOEJCQ0EgLyogSklUTXVsR2VuZXJhdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEpJVE11bEdlbmVyYXRvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUZFMTg3QTAwMUJGQkM3M0MwMDM4QkJDQSAvKiBKSVRNdWxHZW5lcmF0b3IuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSklUTXVsR2VuZXJhdG9yLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFMTg3QTBBMUMwMjI5MjMwMDM4QkJDQSAvKiBKSVREaXZH
ZW5lcmF0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSklURGl2
R2VuZXJhdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTUyMzQsNyArNTI0
MCw5IEBACiAJCUZFMUUyQzNFMjI0MEQzMEIwMEY2QjcyOSAvKiBNYWNyb0Fzc2VtYmxlckFSTTY0
RS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNYWNyb0Fzc2VtYmxlckFSTTY0
RS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTIwQ0U5QjE1RjA0QTk1MDBERjM0
MzAgLyogTExJbnRDTG9vcC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUg
PSBMTEludENMb29wLmNwcDsgcGF0aCA9IGxsaW50L0xMSW50Q0xvb3AuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlGRTIwQ0U5QzE1RjA0QTk1MDBERjM0MzAgLyogTExJbnRDTG9v
cC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBMTEludENMb29wLmg7IHBhdGgg
PSBsbGludC9MTEludENMb29wLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZFMjg3
RDAxMjUyRkIyRTgwMEQ3MjNGOSAvKiBWZXJpZmllclNsb3RWaXNpdG9yLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZlcmlmaWVyU2xvdFZpc2l0b3IuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJRkUyQTg3NUYxRjAyMzgxNjAwRUIzMUIyIC8qIE1pbmltdW1SZXNl
cnZlZFpvbmVTaXplLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1pbmltdW1SZXNlcnZlZFpvbmVTaXplLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZFMkJENjZFMjVDMERDODIwMDk5OUQzQiAv
KiBWZXJpZmllclNsb3RWaXNpdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFZlcmlmaWVyU2xvdFZpc2l0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlGRTJFNkE3QTFENkVBNUZFMDA2MEY4OTYgLyogVGhyb3dTY29wZS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUaHJvd1Njb3BlLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJRkUzMDIyRDAxRTNENzM5NjAwQkFDNDkzIC8qIFNpZ2lsbENyYXNo
QW5hbHl6ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2lnaWxs
Q3Jhc2hBbmFseXplci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFMzAyMkQx
MUUzRDczOTYwMEJBQzQ5MyAvKiBTaWdpbGxDcmFzaEFuYWx5emVyLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFNpZ2lsbENyYXNoQW5hbHl6ZXIuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTUzMDcsNiArNTMxNSw4IEBACiAJCUZFOERFNTRDMjNBQzFFODYwMDVD
OTE0MiAvKiBDYWNoZWFibGVJZGVudGlmaWVySW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBDYWNoZWFibGVJZGVudGlmaWVySW5saW5lcy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlGRThERTU0RTIzQUMzQThFMDA1QzkxNDIgLyogQ2FjaGVhYmxlSWRl
bnRpZmllci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDYWNoZWFibGVJZGVudGlmaWVyLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkU5MEJCM0ExQjdDRjY0RTAwNkIzRjAzIC8q
IFZNSW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBWTUlubGluZXMu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkU5MTJCNEUyNTMxMTkzMzAwRkFCRERG
IC8qIEFic3RyYWN0U2xvdFZpc2l0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gQWJzdHJhY3RTbG90VmlzaXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlG
RTkxMkI1MDI1MzExQUQxMDBGQUJEREYgLyogQWJzdHJhY3RTbG90VmlzaXRvcklubGluZXMuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQWJzdHJhY3RTbG90VmlzaXRvcklubGlu
ZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkU5OEI1QjYxQkI5QUUxMTAwNzNF
N0E2IC8qIEpJVFN1YkdlbmVyYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBKSVRTdWJHZW5lcmF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkU5OUIy
NDcxQzI0QjZEMzAwQzgyMTU5IC8qIEpJVE5lZ0dlbmVyYXRvci5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKSVROZWdHZW5lcmF0b3IuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlGRTk5QjI0ODFDMjRCNkQzMDBDODIxNTkgLyogSklUTmVnR2VuZXJh
dG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpJVE5lZ0dlbmVyYXRvci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNjI1Niw2ICs2MjY2LDkgQEAKIAkJMTQy
RTMxMkExMzRGRjBBNjAwQUZBREI1IC8qIGhlYXAgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsK
IAkJCWNoaWxkcmVuID0gKAorCQkJCUZFMTc4Q0MzMjU1RjIwNTUwMEZGRDY3NyAvKiBBYnN0cmFj
dFNsb3RWaXNpdG9yLmNwcCAqLywKKwkJCQlGRTkxMkI0RTI1MzExOTMzMDBGQUJEREYgLyogQWJz
dHJhY3RTbG90VmlzaXRvci5oICovLAorCQkJCUZFOTEyQjUwMjUzMTFBRDEwMEZBQkRERiAvKiBB
YnN0cmFjdFNsb3RWaXNpdG9ySW5saW5lcy5oICovLAogCQkJCTBGRUMzQzUwMUYzM0E0MTYwMEY1
OUI2QyAvKiBBbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmNwcCAqLywKIAkJCQkwRkVDM0M1MTFGMzNB
NDE2MDBGNTlCNkMgLyogQWxpZ25lZE1lbW9yeUFsbG9jYXRvci5oICovLAogCQkJCTBGQTc2MjBB
MURCOTU5RjYwMEI3QTJGRCAvKiBBbGxvY2F0aW5nU2NvcGUuaCAqLywKQEAgLTY0MTIsNiArNjQy
NSw3IEBACiAJCQkJQzIyNTQ5NDIxNUY3REJBQTAwNjVFODk4IC8qIFNsb3RWaXNpdG9yLmNwcCAq
LywKIAkJCQkxNEJBNzhGMDEzQUFCODhGMDA1QjdDMkMgLyogU2xvdFZpc2l0b3IuaCAqLywKIAkJ
CQkwRkNCNDA4NTE1QzBBM0MzMDA0ODkzMkIgLyogU2xvdFZpc2l0b3JJbmxpbmVzLmggKi8sCisJ
CQkJRkUwNDE1NTIyNTJFQzA3MzAwOTFFQjVEIC8qIFNsb3RWaXNpdG9yTWFjcm9zLmggKi8sCiAJ
CQkJMEZERTg3RkExREZFNkU1MDAwNjRDMzkwIC8qIFNwYWNlVGltZU11dGF0b3JTY2hlZHVsZXIu
Y3BwICovLAogCQkJCTBGREU4N0ZCMURGRTZFNTAwMDY0QzM5MCAvKiBTcGFjZVRpbWVNdXRhdG9y
U2NoZWR1bGVyLmggKi8sCiAJCQkJMEY0RjgyODkxRTMxQjk3MTAwNzUxODRDIC8qIFN0b2NoYXN0
aWNTcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyLmNwcCAqLywKQEAgLTY0MjksNiArNjQ0Myw4IEBA
CiAJCQkJMEYxRkIzOEExRTE3M0E2MjAwQTlCRTUwIC8qIFN5bmNocm9ub3VzU3RvcFRoZVdvcmxk
TXV0YXRvclNjaGVkdWxlci5jcHAgKi8sCiAJCQkJMEYxRkIzOEIxRTE3M0E2MjAwQTlCRTUwIC8q
IFN5bmNocm9ub3VzU3RvcFRoZVdvcmxkTXV0YXRvclNjaGVkdWxlci5oICovLAogCQkJCTE0MTQ0
OENDMTNBMTc4MzcwMEY1QkExQSAvKiBUaW55Qmxvb21GaWx0ZXIuaCAqLywKKwkJCQlGRTJCRDY2
RTI1QzBEQzgyMDA5OTlEM0IgLyogVmVyaWZpZXJTbG90VmlzaXRvci5jcHAgKi8sCisJCQkJRkUy
ODdEMDEyNTJGQjJFODAwRDcyM0Y5IC8qIFZlcmlmaWVyU2xvdFZpc2l0b3IuaCAqLywKIAkJCQkw
RjREOEM3MjFGQzdBOTczMDAxRDMyQUMgLyogVmlzaXRDb3VudGVyLmggKi8sCiAJCQkJMEY5NTJB
OUYxREY3ODYwNzAwRTA2RkJEIC8qIFZpc2l0UmFjZUtleS5jcHAgKi8sCiAJCQkJMEY5NTJBQTAx
REY3ODYwNzAwRTA2RkJEIC8qIFZpc2l0UmFjZUtleS5oICovLApAQCAtOTI1Nyw2ICs5MjczLDcg
QEAKIAkJCQk1MjY3OEY4RjFBMDMxMDA5MDA2QTMwNkQgLyogQmFzaWNCbG9ja0xvY2F0aW9uLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkxNDdCODNBQzBFNkRCOEM5MDA0Nzc1QTQgLyogQmF0Y2hlZFRy
YW5zaXRpb25PcHRpbWl6ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2OTc2RTVGMUZBM0U4QkMw
MEU3QzRFMSAvKiBCaWdJbnRDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCisJCQkJRkUwNDE1
NTMyNTJFQzA3MzAwOTFFQjVEIC8qIFNsb3RWaXNpdG9yTWFjcm9zLmggaW4gSGVhZGVycyAqLywK
IAkJCQk4NjY3MzlEMjEzQkZERTcxMDAyM0Q4N0MgLyogQmlnSW50ZWdlci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJODYxODE2NzcxRkI3OTI0MjAwRUNDNEVDIC8qIEJpZ0ludE9iamVjdC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJODY5NzZFNUUxRkEzRThCNjAwRTdDNEUxIC8qIEJpZ0ludFByb3RvdHlw
ZS5oIGluIEhlYWRlcnMgKi8sCkBAIC05NTM0LDYgKzk1NTEsNyBAQAogCQkJCTBGRDgyRTU3MTQx
REFGMTAwMDE3OUM5NCAvKiBERkdPU1JFbnRyeS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEOEEz
MjYxN0Q1MUY1NzAwQ0EyQzQwIC8qIERGR09TUkVudHJ5cG9pbnRDcmVhdGlvblBoYXNlLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRkMwOTc2QTE0NjhBNkY3MDBDRjI0NDIgLyogREZHT1NSRXhpdC5o
IGluIEhlYWRlcnMgKi8sCisJCQkJRkU5MTJCNEYyNTMxMTkzMzAwRkFCRERGIC8qIEFic3RyYWN0
U2xvdFZpc2l0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMjM1QkVDMTcxNzhFNzMwMDY5MEM3
RiAvKiBERkdPU1JFeGl0QmFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGQjkyMUMxNkQwMkYx
MTAwNTVBNURCIC8qIERGR09TUkV4aXRDb21waWxhdGlvbkluZm8uaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGNzAyNUFBMTcxNEIwRkMwMDM4MkMwRSAvKiBERkdPU1JFeGl0Q29tcGlsZXJDb21tb24u
aCBpbiBIZWFkZXJzICovLApAQCAtOTgyMCw2ICs5ODM4LDcgQEAKIAkJCQlBNTEzRTVCRTE4NUJG
QUNDMDA3RTk1QUQgLyogSW5qZWN0ZWRTY3JpcHRIb3N0LmggaW4gSGVhZGVycyAqLywKIAkJCQlB
NTEzRTVDQjE4NUY5NjI0MDA3RTk1QUQgLyogSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlBNTg0MEUyMTE4N0I3Qjg2MDA4NDNCMTAgLyogSW5qZWN0ZWRTY3JpcHRN
b2R1bGUuaCBpbiBIZWFkZXJzICovLAorCQkJCUZFMjg3RDAyMjUyRkIyRTgwMEQ3MjNGOSAvKiBW
ZXJpZmllclNsb3RWaXNpdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNTEzRTVDNzE4NUY5NDQ2
MDA3RTk1QUQgLyogSW5qZWN0ZWRTY3JpcHRTb3VyY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTk5
NTlFOTMyMUJEMTgyNzkwMDFBQTQxMyAvKiBpbmxpbmUtYW5kLW1pbmlmeS1zdHlsZXNoZWV0cy1h
bmQtc2NyaXB0cy5weSBpbiBIZWFkZXJzICovLAogCQkJCTc5MDVCQjY5MUQxMjA1MEUwMDE5RkU1
NyAvKiBJbmxpbmVBY2Nlc3MuaCBpbiBIZWFkZXJzICovLApAQCAtMTAxMjQsNiArMTAxNDMsNyBA
QAogCQkJCTc5NUFDNjE4MjBBMjM1NUUwMDUyQzc2QyAvKiBKU1ZpcnR1YWxNYWNoaW5lUHJpdmF0
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdDQTNBRTgxN0RBNDFBRTAwNjUzOEFGIC8qIEpTV2Vh
a01hcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc0ODJFOTMxMTZBN0NBRDAwM0IwNzEyIC8qIEpT
V2Vha09iamVjdE1hcFJlZkludGVybmFsLmggaW4gSGVhZGVycyAqLywKKwkJCQlGRTkxMkI1MTI1
MzExQUQxMDBGQUJEREYgLyogQWJzdHJhY3RTbG90VmlzaXRvcklubGluZXMuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUE3NDgyQjkzMTE2NzExNDcwMDNCMDcxMiAvKiBKU1dlYWtPYmplY3RNYXBSZWZQ
cml2YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MzlCRkJCMDIyQUQzQ0RDMDAyM0Y0QzAgLyog
SlNXZWFrT2JqZWN0UmVmLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjBCMjg2QjFFQjhFNkNGMDAw
RUI1RDIgLyogSlNXZWFrUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvU2NyaXB0cy93a2J1aWx0aW5zL2J1aWx0aW5zX2dlbmVyYXRlX2ludGVybmFs
c193cmFwcGVyX2hlYWRlci5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
U2NyaXB0cy93a2J1aWx0aW5zL2J1aWx0aW5zX2dlbmVyYXRlX2ludGVybmFsc193cmFwcGVyX2hl
YWRlci5weQkocmV2aXNpb24gMjcxNzg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL1Njcmlw
dHMvd2tidWlsdGlucy9idWlsdGluc19nZW5lcmF0ZV9pbnRlcm5hbHNfd3JhcHBlcl9oZWFkZXIu
cHkJKHdvcmtpbmcgY29weSkKQEAgLTkzLDcgKzkzLDcgQEAgY2xhc3MgQnVpbHRpbnNJbnRlcm5h
bHNXcmFwcGVySGVhZGVyR2VuZQogCiAgICAgZGVmIGdlbmVyYXRlX21ldGhvZHMoc2VsZik6CiAg
ICAgICAgIHJldHVybiAiIiIKLSAgICB2b2lkIHZpc2l0KEpTQzo6U2xvdFZpc2l0b3ImKTsKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIHZpc2l0KFZpc2l0b3ImKTsKICAgICB2
b2lkIGluaXRpYWxpemUoSlNET01HbG9iYWxPYmplY3QmKTsKICIiIgogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvU2NyaXB0cy93a2J1aWx0aW5zL2J1aWx0aW5zX2dlbmVyYXRlX2ludGVy
bmFsc193cmFwcGVyX2ltcGxlbWVudGF0aW9uLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9TY3JpcHRzL3drYnVpbHRpbnMvYnVpbHRpbnNfZ2VuZXJhdGVfaW50ZXJuYWxz
X3dyYXBwZXJfaW1wbGVtZW50YXRpb24ucHkJKHJldmlzaW9uIDI3MTc4NikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9TY3JpcHRzL3drYnVpbHRpbnMvYnVpbHRpbnNfZ2VuZXJhdGVfaW50ZXJu
YWxzX3dyYXBwZXJfaW1wbGVtZW50YXRpb24ucHkJKHdvcmtpbmcgY29weSkKQEAgLTEyMCwxMyAr
MTIwLDE2IEBAIGNsYXNzIEJ1aWx0aW5zSW50ZXJuYWxzV3JhcHBlckltcGxlbWVudGEKICAgICAg
ICAgcmV0dXJuICdcbicuam9pbihsaW5lcykKIAogICAgIGRlZiBnZW5lcmF0ZV92aXNpdF9tZXRo
b2Qoc2VsZik6Ci0gICAgICAgIGxpbmVzID0gWyJ2b2lkIEpTQnVpbHRpbkludGVybmFsRnVuY3Rp
b25zOjp2aXNpdChKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKSIsCisgICAgICAgIGxpbmVzID0g
WyJ0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiIsCisgICAgICAgICAgICAgICAgICJ2b2lkIEpT
QnVpbHRpbkludGVybmFsRnVuY3Rpb25zOjp2aXNpdChWaXNpdG9yJiB2aXNpdG9yKSIsCiAgICAg
ICAgICAgICAgICAgICJ7Il0KICAgICAgICAgZm9yIG9iamVjdCBpbiBzZWxmLmludGVybmFsczoK
ICAgICAgICAgICAgIHZpc2l0ID0gIiAgICAlcy52aXNpdCh2aXNpdG9yKTsiICUgc2VsZi5tZW1i
ZXJfbmFtZShvYmplY3QpCiAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoQnVpbHRpbnNHZW5lcmF0
b3Iud3JhcF93aXRoX2d1YXJkKG9iamVjdC5hbm5vdGF0aW9ucy5nZXQoJ2NvbmRpdGlvbmFsJyks
IHZpc2l0KSkKICAgICAgICAgbGluZXMuYXBwZW5kKCIgICAgVU5VU0VEX1BBUkFNKHZpc2l0b3Ip
OyIpCiAgICAgICAgIGxpbmVzLmFwcGVuZCgifVxuIikKKyAgICAgICAgbGluZXMuYXBwZW5kKCJ0
ZW1wbGF0ZSB2b2lkIEpTQnVpbHRpbkludGVybmFsRnVuY3Rpb25zOjp2aXNpdChBYnN0cmFjdFNs
b3RWaXNpdG9yJik7IikKKyAgICAgICAgbGluZXMuYXBwZW5kKCJ0ZW1wbGF0ZSB2b2lkIEpTQnVp
bHRpbkludGVybmFsRnVuY3Rpb25zOjp2aXNpdChTbG90VmlzaXRvciYpO1xuIikKICAgICAgICAg
cmV0dXJuICdcbicuam9pbihsaW5lcykKIAogICAgIGRlZiBfZ2VuZXJhdGVfaW5pdGlhbGl6ZV9z
dGF0aWNfZ2xvYmFscyhzZWxmKToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRz
L3drYnVpbHRpbnMvYnVpbHRpbnNfdGVtcGxhdGVzLnB5Cj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9TY3JpcHRzL3drYnVpbHRpbnMvYnVpbHRpbnNfdGVtcGxhdGVzLnB5CShy
ZXZpc2lvbiAyNzE3ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy93a2J1aWx0
aW5zL2J1aWx0aW5zX3RlbXBsYXRlcy5weQkod29ya2luZyBjb3B5KQpAQCAtMTg4LDcgKzE4OCw4
IEBAIHB1YmxpYzoKICAgICBleHBsaWNpdCAke29iamVjdE5hbWV9QnVpbHRpbkZ1bmN0aW9ucyhK
U0M6OlZNJiB2bSkgOiBtX3ZtKHZtKSB7IH0KIAogICAgIHZvaWQgaW5pdChKU0M6OkpTR2xvYmFs
T2JqZWN0Jik7Ci0gICAgdm9pZCB2aXNpdChKU0M6OlNsb3RWaXNpdG9yJik7CisgICAgLy8gbWxh
bSB2b2lkIHZpc2l0KEpTQzo6U2xvdFZpc2l0b3ImKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPiB2b2lkIHZpc2l0KFZpc2l0b3ImKTsKIAogcHVibGljOgogICAgIEpTQzo6Vk0mIG1f
dm07CkBAIC0yMDcsMTAgKzIwOCwxNSBAQCBpbmxpbmUgdm9pZCAke29iamVjdE5hbWV9QnVpbHRp
bkZ1bmN0aW9uCiAjdW5kZWYgRVhQT1JUX0ZVTkNUSU9OCiB9CiAKLWlubGluZSB2b2lkICR7b2Jq
ZWN0TmFtZX1CdWlsdGluRnVuY3Rpb25zOjp2aXNpdChKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9y
KQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK2lubGluZSB2b2lkICR7b2JqZWN0TmFtZX1C
dWlsdGluRnVuY3Rpb25zOjp2aXNpdChWaXNpdG9yJiB2aXNpdG9yKQogewogI2RlZmluZSBWSVNJ
VF9GVU5DVElPTihuYW1lKSB2aXNpdG9yLmFwcGVuZChtXyMjbmFtZSMjRnVuY3Rpb24pOwogICAg
ICR7bWFjcm9QcmVmaXh9X0ZPUkVBQ0hfJHtvYmplY3RNYWNyb31fQlVJTFRJTl9GVU5DVElPTl9O
QU1FKFZJU0lUX0ZVTkNUSU9OKQogI3VuZGVmIFZJU0lUX0ZVTkNUSU9OCiB9CisKK3RlbXBsYXRl
IHZvaWQgJHtvYmplY3ROYW1lfUJ1aWx0aW5GdW5jdGlvbnM6OnZpc2l0KEpTQzo6QWJzdHJhY3RT
bG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCAke29iamVjdE5hbWV9QnVpbHRpbkZ1bmN0aW9u
czo6dmlzaXQoSlNDOjpTbG90VmlzaXRvciYpOworCiAiIiIpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCShyZXZpc2lvbiAyNzE3ODYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTcyOSwyMiArNzI5LDI0IEBAIGJvb2wgQWNjZXNzQ2FzZTo6dmlzaXRXZWFrKFZN
JiB2bSkgY29uc3QKICAgICByZXR1cm4gaXNWYWxpZDsKIH0KIAotYm9vbCBBY2Nlc3NDYXNlOjpw
cm9wYWdhdGVUcmFuc2l0aW9ucyhTbG90VmlzaXRvciYgdmlzaXRvcikgY29uc3QKK3RlbXBsYXRl
PHR5cGVuYW1lIFZpc2l0b3I+Citib29sIEFjY2Vzc0Nhc2U6OnByb3BhZ2F0ZVRyYW5zaXRpb25z
KFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0CiB7CiAgICAgYm9vbCByZXN1bHQgPSB0cnVlOwogCiAg
ICAgaWYgKG1fc3RydWN0dXJlKQotICAgICAgICByZXN1bHQgJj0gbV9zdHJ1Y3R1cmUtPm1hcmtJ
ZkNoZWFwKHZpc2l0b3IpOworICAgICAgICByZXN1bHQgJj0gbV9zdHJ1Y3R1cmUtPm1hcmtJZkNo
ZWFwMSh2aXNpdG9yKTsKIAogICAgIGlmIChtX3BvbHlQcm90b0FjY2Vzc0NoYWluKSB7CiAgICAg
ICAgIGZvciAoU3RydWN0dXJlSUQgc3RydWN0dXJlSUQgOiBtX3BvbHlQcm90b0FjY2Vzc0NoYWlu
LT5jaGFpbigpKQotICAgICAgICAgICAgcmVzdWx0ICY9IHZpc2l0b3Iudm0oKS5nZXRTdHJ1Y3R1
cmUoc3RydWN0dXJlSUQpLT5tYXJrSWZDaGVhcCh2aXNpdG9yKTsKKyAgICAgICAgICAgIHJlc3Vs
dCAmPSB2aXNpdG9yLnZtKCkuZ2V0U3RydWN0dXJlKHN0cnVjdHVyZUlEKS0+bWFya0lmQ2hlYXAx
KHZpc2l0b3IpOwogICAgIH0KIAogICAgIHN3aXRjaCAobV90eXBlKSB7CiAgICAgY2FzZSBUcmFu
c2l0aW9uOgogICAgIGNhc2UgRGVsZXRlOgotICAgICAgICBpZiAodmlzaXRvci52bSgpLmhlYXAu
aXNNYXJrZWQobV9zdHJ1Y3R1cmUtPnByZXZpb3VzSUQoKSkpCisvLyAgICAgICAgaWYgKHZpc2l0
b3Iudm0oKS5oZWFwLmlzTWFya2VkKG1fc3RydWN0dXJlLT5wcmV2aW91c0lEKCkpKQorICAgICAg
ICBpZiAodmlzaXRvci5pc01hcmtlZChtX3N0cnVjdHVyZS0+cHJldmlvdXNJRCgpKSkKICAgICAg
ICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQobV9zdHJ1Y3R1cmUuZ2V0KCkpOwogICAg
ICAgICBlbHNlCiAgICAgICAgICAgICByZXN1bHQgPSBmYWxzZTsKQEAgLTc1NiwxMSArNzU4LDE5
IEBAIGJvb2wgQWNjZXNzQ2FzZTo6cHJvcGFnYXRlVHJhbnNpdGlvbnMoU2wKICAgICByZXR1cm4g
cmVzdWx0OwogfQogCi12b2lkIEFjY2Vzc0Nhc2U6OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9y
JiB2aXNpdG9yKSBjb25zdAordGVtcGxhdGUgYm9vbCBBY2Nlc3NDYXNlOjpwcm9wYWdhdGVUcmFu
c2l0aW9ucyhTbG90VmlzaXRvciYpIGNvbnN0OwordGVtcGxhdGUgYm9vbCBBY2Nlc3NDYXNlOjpw
cm9wYWdhdGVUcmFuc2l0aW9ucyhBYnN0cmFjdFNsb3RWaXNpdG9yJikgY29uc3Q7CisKKy8vdGVt
cGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KKy8vdm9pZCBBY2Nlc3NDYXNlOjp2aXNpdEFnZ3JlZ2F0
ZShWaXNpdG9yJiB2aXNpdG9yKSBjb25zdAordm9pZCBBY2Nlc3NDYXNlOjp2aXNpdEFnZ3JlZ2F0
ZTEoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikgY29uc3QKIHsKLSAgICBtX2lkZW50aWZp
ZXIudmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7CisgICAgbV9pZGVudGlmaWVyLnZpc2l0QWdncmVn
YXRlMSh2aXNpdG9yKTsKIH0KIAorLy90ZW1wbGF0ZSB2b2lkIEFjY2Vzc0Nhc2U6OnZpc2l0QWdn
cmVnYXRlKFNsb3RWaXNpdG9yJikgY29uc3Q7CisvL3RlbXBsYXRlIHZvaWQgQWNjZXNzQ2FzZTo6
dmlzaXRBZ2dyZWdhdGUoVmVyaWZpZXJTbG90VmlzaXRvciYpIGNvbnN0OworCiB2b2lkIEFjY2Vz
c0Nhc2U6OmdlbmVyYXRlV2l0aEd1YXJkKAogICAgIEFjY2Vzc0dlbmVyYXRpb25TdGF0ZSYgc3Rh
dGUsIENDYWxsSGVscGVyczo6SnVtcExpc3QmIGZhbGxUaHJvdWdoKQogewpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5oCShyZXZpc2lvbiAyNzE3ODYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yNzUsOSArMjc1LDEwIEBAIHByaXZhdGU6CiAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgRnVuY3Rvcj4KICAgICB2b2lkIGZvckVhY2hEZXBlbmRlbnRDZWxsKFZNJiwgY29uc3QgRnVu
Y3RvciYpIGNvbnN0OwogCi0gICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYpIGNv
bnN0OworLy8gICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCB2aXNpdEFnZ3JlZ2F0
ZShWaXNpdG9yJikgY29uc3Q7CisgICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZTEoQWJzdHJhY3RTbG90
VmlzaXRvciYpIGNvbnN0OwogICAgIGJvb2wgdmlzaXRXZWFrKFZNJikgY29uc3Q7Ci0gICAgYm9v
bCBwcm9wYWdhdGVUcmFuc2l0aW9ucyhTbG90VmlzaXRvciYpIGNvbnN0OworICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFZpc2l0b3I+IGJvb2wgcHJvcGFnYXRlVHJhbnNpdGlvbnMoVmlzaXRvciYpIGNv
bnN0OwogCiAgICAgLy8gRklYTUU6IFRoaXMgb25seSBleGlzdHMgYmVjYXVzZSBvZiBob3cgQWNj
ZXNzQ2FzZSBwdXRzIHBvc3QtZ2VuZXJhdGlvbiB0aGluZ3MgaW50byBpdHNlbGYuCiAgICAgLy8g
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NjQ1NgpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5VmFsSW5mby5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5VmFsSW5mby5jcHAJKHJldmlzaW9uIDI3
MTc4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeVZhbEluZm8uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00LDcgKzQsNyBAQAogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
ICAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogMS4gUmVkaXN0cmlidXRWZXJpZmllclNsb3RW
aXNpdG9yaW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CiAgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCiAgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAogICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQpAQCAtMzIsMTEg
KzMyLDE2IEBAIG5hbWVzcGFjZSBKU0MgewogCiAjaWYgRU5BQkxFKEpJVCkKIAotdm9pZCBCeVZh
bEluZm86OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy90ZW1wbGF0ZTx0
eXBlbmFtZSBWaXNpdG9yPgorLy92b2lkIEJ5VmFsSW5mbzo6dmlzaXRBZ2dyZWdhdGUoVmlzaXRv
ciYgdmlzaXRvcikKK3ZvaWQgQnlWYWxJbmZvOjp2aXNpdEFnZ3JlZ2F0ZTEoQWJzdHJhY3RTbG90
VmlzaXRvciYgdmlzaXRvcikKIHsKLSAgICBjYWNoZWRJZC52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9y
KTsKKyAgICBjYWNoZWRJZC52aXNpdEFnZ3JlZ2F0ZTEodmlzaXRvcik7CiB9CiAKKy8vdGVtcGxh
dGUgdm9pZCBCeVZhbEluZm86OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJik7CisvL3RlbXBs
YXRlIHZvaWQgQnlWYWxJbmZvOjp2aXNpdEFnZ3JlZ2F0ZShWZXJpZmllclNsb3RWaXNpdG9yJik7
CisKICNlbmRpZiAvLyBFTkFCTEUoSklUKQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeVZhbEluZm8uaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnlWYWxJbmZvLmgJKHJldmlzaW9uIDI3MTc4
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeVZhbEluZm8uaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjQ2LDcgKzI0Niw4IEBAIHN0cnVjdCBCeVZhbEluZm8gewogICAgICAgICB0
aGlzLT5zZWVuID0gZmFsc2U7CiAgICAgfQogCi0gICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShTbG90
VmlzaXRvciYpOworLy8gICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCB2aXNpdEFn
Z3JlZ2F0ZShWaXNpdG9yJik7CisgICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZTEoQWJzdHJhY3RTbG90
VmlzaXRvciYpOwogCiAgICAgQ29kZUxvY2F0aW9uSnVtcDxKU0ludGVybmFsUHRyVGFnPiBub3RJ
bmRleEp1bXA7CiAgICAgQ29kZUxvY2F0aW9uSnVtcDxKU0ludGVybmFsUHRyVGFnPiBiYWRUeXBl
SnVtcDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2su
Y3BwCShyZXZpc2lvbiAyNzE3ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Q29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsOSBAQAogI2luY2x1ZGUg
ImNvbmZpZy5oIgogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgogCisjaW5jbHVkZSAiQWJzdHJhY3RT
bG90VmlzaXRvci5oIiAvLyBtbGFtIFRFU1QKKyNpbmNsdWRlICJQb2x5bW9ycGhpY0FjY2Vzcy5o
IiAvLyBtbGFtIFRFU1QKKwogI2luY2x1ZGUgIkFyaXRoUHJvZmlsZS5oIgogI2luY2x1ZGUgIkJh
c2ljQmxvY2tMb2NhdGlvbi5oIgogI2luY2x1ZGUgIkJ5VmFsSW5mby5oIgpAQCAtOTk4LDcgKzEw
MDEsOCBAQCBzaXplX3QgQ29kZUJsb2NrOjplc3RpbWF0ZWRTaXplKEpTQ2VsbCogCiAgICAgcmV0
dXJuIEJhc2U6OmVzdGltYXRlZFNpemUoY2VsbCwgdm0pICsgZXh0cmFNZW1vcnlBbGxvY2F0ZWQ7
CiB9CiAKLXZvaWQgQ29kZUJsb2NrOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZp
c2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBDb2RlQmxv
Y2s6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsK
ICAgICBDb2RlQmxvY2sqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8Q29kZUJsb2NrKj4oY2VsbCk7CiAg
ICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtMTAw
Nyw3ICsxMDExLDEwIEBAIHZvaWQgQ29kZUJsb2NrOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2UK
ICAgICB0aGlzT2JqZWN0LT52aXNpdENoaWxkcmVuKHZpc2l0b3IpOwogfQogCi12b2lkIENvZGVC
bG9jazo6dmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK0RFRklORV9WSVNJVF9D
SElMRFJFTihDb2RlQmxvY2spOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBD
b2RlQmxvY2s6OnZpc2l0Q2hpbGRyZW5JbXBsKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgQ29u
Y3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2spOwogICAgIGlmIChDb2RlQmxvY2sqIG90aGVy
QmxvY2sgPSBzcGVjaWFsT1NSRW50cnlCbG9ja09yTnVsbCgpKQpAQCAtMTAyNiw2ICsxMDMzLDgg
QEAgdm9pZCBDb2RlQmxvY2s6OnZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0bwogICAgIFZNOjpTcGFj
ZUFuZFNldDo6c2V0Rm9yKCpzdWJzcGFjZSgpKS5hZGQodGhpcyk7CiB9CiAKK0RFRklORV9JTlNU
QU5DRV9WSVNJVF9DSElMRFJFTihDb2RlQmxvY2spOworCiBib29sIENvZGVCbG9jazo6c2hvdWxk
VmlzaXRTdHJvbmdseShjb25zdCBDb25jdXJyZW50SlNMb2NrZXImIGxvY2tlcikKIHsKICAgICBp
ZiAoT3B0aW9uczo6Zm9yY2VDb2RlQmxvY2tMaXZlbmVzcygpKQpAQCAtMTA5OCw3ICsxMTA3LDkg
QEAgYm9vbCBDb2RlQmxvY2s6OnNob3VsZEpldHRpc29uRHVlVG9PbGRBZwogfQogCiAjaWYgRU5B
QkxFKERGR19KSVQpCi1zdGF0aWMgYm9vbCBzaG91bGRNYXJrVHJhbnNpdGlvbihWTSYgdm0sIERG
Rzo6V2Vha1JlZmVyZW5jZVRyYW5zaXRpb24mIHRyYW5zaXRpb24pCisvLyBtbGFtIEZJWE1FOiB2
bS5oZWFwLmlzTWFya2VkIG5lZWRzIHRvIGJlIGFic3RyYWN0ZWQuCisvL3N0YXRpYyBib29sIHNo
b3VsZE1hcmtUcmFuc2l0aW9uKFZNJiB2bSwgREZHOjpXZWFrUmVmZXJlbmNlVHJhbnNpdGlvbiYg
dHJhbnNpdGlvbikKK3N0YXRpYyBpbmxpbmUgYm9vbCBzaG91bGRNYXJrVHJhbnNpdGlvbihWTSYg
dm0sIERGRzo6V2Vha1JlZmVyZW5jZVRyYW5zaXRpb24mIHRyYW5zaXRpb24pCiB7CiAgICAgaWYg
KHRyYW5zaXRpb24ubV9jb2RlT3JpZ2luICYmICF2bS5oZWFwLmlzTWFya2VkKHRyYW5zaXRpb24u
bV9jb2RlT3JpZ2luLmdldCgpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTExOSw3ICsx
MTMwLDQwIEBAIEJ5dGVjb2RlSW5kZXggQ29kZUJsb2NrOjpieXRlY29kZUluZGV4Rm8KIH0KICNl
bmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKIAotdm9pZCBDb2RlQmxvY2s6OnByb3BhZ2F0ZVRyYW5z
aXRpb25zKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQor
I2lmIEVOQUJMRShKSVQpCisKKy8vdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KKy8vYm9vbCBT
dHJ1Y3R1cmVTdHViSW5mbzo6cHJvcGFnYXRlVHJhbnNpdGlvbnMxKFZpc2l0b3ImIHZpc2l0b3Ip
Citib29sIFN0cnVjdHVyZVN0dWJJbmZvOjpwcm9wYWdhdGVUcmFuc2l0aW9uczEoQWJzdHJhY3RT
bG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBzd2l0Y2ggKG1fY2FjaGVUeXBlKSB7CisgICAg
Y2FzZSBDYWNoZVR5cGU6OlVuc2V0OgorICAgIGNhc2UgQ2FjaGVUeXBlOjpBcnJheUxlbmd0aDoK
KyAgICBjYXNlIENhY2hlVHlwZTo6U3RyaW5nTGVuZ3RoOgorICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICBjYXNlIENhY2hlVHlwZTo6R2V0QnlJZFNlbGY6CisgICAgY2FzZSBDYWNoZVR5cGU6OlB1
dEJ5SWRSZXBsYWNlOgorICAgIGNhc2UgQ2FjaGVUeXBlOjpJbkJ5SWRTZWxmOgorICAgICAgICBy
ZXR1cm4gdS5ieUlkU2VsZi5iYXNlT2JqZWN0U3RydWN0dXJlLT5tYXJrSWZDaGVhcDEodmlzaXRv
cik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBjYXNlIENhY2hlVHlwZTo6U3R1YjoKKyAg
ICAgICAgcmV0dXJuIHUuc3R1Yi0+cHJvcGFnYXRlVHJhbnNpdGlvbnMxMCh2aXNpdG9yKTsKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAKKy8vICAgIFVOVVNFRF9QQVJBTSh2aXNp
dG9yKTsgLy8gbWxhbSBURVNUCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKworI2VuZGlmIC8vIEVOQUJMRShKSVQpCisKKy8vdGVtcGxhdGU8
PiBib29sIFN0cnVjdHVyZVN0dWJJbmZvOjpwcm9wYWdhdGVUcmFuc2l0aW9uczEoU2xvdFZpc2l0
b3ImKTsKKy8vdGVtcGxhdGU8PiBib29sIFN0cnVjdHVyZVN0dWJJbmZvOjpwcm9wYWdhdGVUcmFu
c2l0aW9uczEoQWJzdHJhY3RTbG90VmlzaXRvciYpOworCisvL3RlbXBsYXRlPHR5cGVuYW1lIFZp
c2l0b3I+CisvL3ZvaWQgQ29kZUJsb2NrOjpwcm9wYWdhdGVUcmFuc2l0aW9ucyhjb25zdCBDb25j
dXJyZW50SlNMb2NrZXImLCBWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBDb2RlQmxvY2s6OnByb3Bh
Z2F0ZVRyYW5zaXRpb25zMShjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBBYnN0cmFjdFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQogewogICAgIFZNJiB2bSA9ICptX3ZtOwogCkBAIC0xMTM0LDcgKzEx
NzgsOCBAQCB2b2lkIENvZGVCbG9jazo6cHJvcGFnYXRlVHJhbnNpdGlvbnMoY29uCiAgICAgICAg
ICAgICAgICAgICAgIHZtLmhlYXAuc3RydWN0dXJlSURUYWJsZSgpLmdldChvbGRTdHJ1Y3R1cmVJ
RCk7CiAgICAgICAgICAgICAgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPQogICAgICAgICAg
ICAgICAgICAgICB2bS5oZWFwLnN0cnVjdHVyZUlEVGFibGUoKS5nZXQobmV3U3RydWN0dXJlSUQp
OwotICAgICAgICAgICAgICAgIGlmICh2bS5oZWFwLmlzTWFya2VkKG9sZFN0cnVjdHVyZSkpCisv
LyAgICAgICAgICAgICAgICBpZiAodm0uaGVhcC5pc01hcmtlZChvbGRTdHJ1Y3R1cmUpKSAvLyBt
bGFtCisgICAgICAgICAgICAgICAgaWYgKHZpc2l0b3IuaXNNYXJrZWQob2xkU3RydWN0dXJlKSkK
ICAgICAgICAgICAgICAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZChuZXdTdHJ1Y3R1
cmUpOwogICAgICAgICAgICAgfSk7CiAKQEAgLTExNDYsMTQgKzExOTEsMTYgQEAgdm9pZCBDb2Rl
QmxvY2s6OnByb3BhZ2F0ZVRyYW5zaXRpb25zKGNvbgogCiAgICAgICAgICAgICAgICAgSlNDZWxs
KiBwcm9wZXJ0eSA9IG1ldGFkYXRhLm1fcHJvcGVydHkuZ2V0KCk7CiAgICAgICAgICAgICAgICAg
QVNTRVJUKHByb3BlcnR5KTsKLSAgICAgICAgICAgICAgICBpZiAoIXZtLmhlYXAuaXNNYXJrZWQo
cHJvcGVydHkpKQorLy8gICAgICAgICAgICAgICAgaWYgKCF2bS5oZWFwLmlzTWFya2VkKHByb3Bl
cnR5KSkgLy8gbWxhbQorICAgICAgICAgICAgICAgIGlmICghdmlzaXRvci5pc01hcmtlZChwcm9w
ZXJ0eSkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICAgICAgICAgIFN0
cnVjdHVyZSogb2xkU3RydWN0dXJlID0KICAgICAgICAgICAgICAgICAgICAgdm0uaGVhcC5zdHJ1
Y3R1cmVJRFRhYmxlKCkuZ2V0KG9sZFN0cnVjdHVyZUlEKTsKICAgICAgICAgICAgICAgICBTdHJ1
Y3R1cmUqIG5ld1N0cnVjdHVyZSA9CiAgICAgICAgICAgICAgICAgICAgIHZtLmhlYXAuc3RydWN0
dXJlSURUYWJsZSgpLmdldChuZXdTdHJ1Y3R1cmVJRCk7Ci0gICAgICAgICAgICAgICAgaWYgKHZt
LmhlYXAuaXNNYXJrZWQob2xkU3RydWN0dXJlKSkKKy8vICAgICAgICAgICAgICAgIGlmICh2bS5o
ZWFwLmlzTWFya2VkKG9sZFN0cnVjdHVyZSkpIC8vIG1sYW0KKyAgICAgICAgICAgICAgICBpZiAo
dmlzaXRvci5pc01hcmtlZChvbGRTdHJ1Y3R1cmUpKQogICAgICAgICAgICAgICAgICAgICB2aXNp
dG9yLmFwcGVuZFVuYmFycmllcmVkKG5ld1N0cnVjdHVyZSk7CiAgICAgICAgICAgICB9KTsKICAg
ICAgICAgfQpAQCAtMTE2Myw3ICsxMjEwLDcgQEAgdm9pZCBDb2RlQmxvY2s6OnByb3BhZ2F0ZVRy
YW5zaXRpb25zKGNvbgogICAgIGlmIChKSVRDb2RlOjppc0pJVChqaXRUeXBlKCkpKSB7CiAgICAg
ICAgIGlmIChhdXRvKiBqaXREYXRhID0gbV9qaXREYXRhLmdldCgpKSB7CiAgICAgICAgICAgICBm
b3IgKFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA6IGppdERhdGEtPm1fc3R1YkluZm9zKQot
ICAgICAgICAgICAgICAgIHN0dWJJbmZvLT5wcm9wYWdhdGVUcmFuc2l0aW9ucyh2aXNpdG9yKTsK
KyAgICAgICAgICAgICAgICBzdHViSW5mby0+cHJvcGFnYXRlVHJhbnNpdGlvbnMxKHZpc2l0b3Ip
OwogICAgICAgICB9CiAgICAgfQogI2VuZGlmIC8vIEVOQUJMRShKSVQpCkBAIC0xMTcyLDEwICsx
MjE5LDEwIEBAIHZvaWQgQ29kZUJsb2NrOjpwcm9wYWdhdGVUcmFuc2l0aW9ucyhjb24KICAgICBp
ZiAoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGppdFR5cGUoKSkpIHsKICAgICAgICAgREZHOjpD
b21tb25EYXRhKiBkZmdDb21tb24gPSBtX2ppdENvZGUtPmRmZ0NvbW1vbigpOwogICAgICAgICAK
LSAgICAgICAgZGZnQ29tbW9uLT5yZWNvcmRlZFN0YXR1c2VzLm1hcmtJZkNoZWFwKHZpc2l0b3Ip
OworICAgICAgICBkZmdDb21tb24tPnJlY29yZGVkU3RhdHVzZXMubWFya0lmQ2hlYXAxKHZpc2l0
b3IpOwogICAgICAgICAKICAgICAgICAgZm9yIChTdHJ1Y3R1cmVJRCBzdHJ1Y3R1cmVJRCA6IGRm
Z0NvbW1vbi0+d2Vha1N0cnVjdHVyZVJlZmVyZW5jZXMpCi0gICAgICAgICAgICB2bS5nZXRTdHJ1
Y3R1cmUoc3RydWN0dXJlSUQpLT5tYXJrSWZDaGVhcCh2aXNpdG9yKTsKKyAgICAgICAgICAgIHZt
LmdldFN0cnVjdHVyZShzdHJ1Y3R1cmVJRCktPm1hcmtJZkNoZWFwMSh2aXNpdG9yKTsKIAogICAg
ICAgICBmb3IgKGF1dG8mIHRyYW5zaXRpb24gOiBkZmdDb21tb24tPnRyYW5zaXRpb25zKSB7CiAg
ICAgICAgICAgICBpZiAoc2hvdWxkTWFya1RyYW5zaXRpb24odm0sIHRyYW5zaXRpb24pKSB7CkBA
IC0xMjA1LDEzICsxMjUyLDE5IEBAIHZvaWQgQ29kZUJsb2NrOjpwcm9wYWdhdGVUcmFuc2l0aW9u
cyhjb24KICNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKIH0KIAotdm9pZCBDb2RlQmxvY2s6OmRl
dGVybWluZUxpdmVuZXNzKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQorLy90ZW1wbGF0ZSB2b2lkIENvZGVCbG9jazo6cHJvcGFnYXRlVHJhbnNpdGlvbnMo
Y29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgU2xvdFZpc2l0b3ImKTsKKy8vdGVtcGxhdGUgdm9p
ZCBDb2RlQmxvY2s6OnByb3BhZ2F0ZVRyYW5zaXRpb25zKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tl
ciYsIFZlcmlmaWVyU2xvdFZpc2l0b3ImKTsKKworLy90ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
PgorLy92b2lkIENvZGVCbG9jazo6ZGV0ZXJtaW5lTGl2ZW5lc3MoY29uc3QgQ29uY3VycmVudEpT
TG9ja2VyJiwgVmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgQ29kZUJsb2NrOjpkZXRlcm1pbmVMaXZl
bmVzcyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNp
dG9yKQogewogICAgIFVOVVNFRF9QQVJBTSh2aXNpdG9yKTsKICAgICAKICNpZiBFTkFCTEUoREZH
X0pJVCkKICAgICBWTSYgdm0gPSAqbV92bTsKLSAgICBpZiAodm0uaGVhcC5pc01hcmtlZCh0aGlz
KSkKKy8vICAgIGlmICh2bS5oZWFwLmlzTWFya2VkKHRoaXMpKSAvLyBtbGFtCisgICAgaWYgKHZp
c2l0b3IuaXNNYXJrZWQodGhpcykpCiAgICAgICAgIHJldHVybjsKICAgICAKICAgICAvLyBJbiBy
YXJlIGFuZCB3ZWlyZCBjYXNlcywgdGhpcyBjb3VsZCBiZSBjYWxsZWQgb24gYSBiYXNlbGluZSBD
b2RlQmxvY2suIE9uZSB0aGF0IEkgZm91bmQgd2FzCkBAIC0xMjI4LDcgKzEyODEsOCBAQCB2b2lk
IENvZGVCbG9jazo6ZGV0ZXJtaW5lTGl2ZW5lc3MoY29uc3QgCiAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGRmZ0NvbW1vbi0+d2Vha1JlZmVyZW5jZXMuc2l6ZSgpOyArK2kpIHsKICAgICAg
ICAgSlNDZWxsKiByZWZlcmVuY2UgPSBkZmdDb21tb24tPndlYWtSZWZlcmVuY2VzW2ldLmdldCgp
OwogICAgICAgICBBU1NFUlQoIWpzRHluYW1pY0Nhc3Q8Q29kZUJsb2NrKj4odm0sIHJlZmVyZW5j
ZSkpOwotICAgICAgICBpZiAoIXZtLmhlYXAuaXNNYXJrZWQocmVmZXJlbmNlKSkgeworLy8gICAg
ICAgIGlmICghdm0uaGVhcC5pc01hcmtlZChyZWZlcmVuY2UpKSB7IC8vIG1sYW0KKyAgICAgICAg
aWYgKCF2aXNpdG9yLmlzTWFya2VkKHJlZmVyZW5jZSkpIHsKICAgICAgICAgICAgIGFsbEFyZUxp
dmVTb0ZhciA9IGZhbHNlOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTEyMzYs
NyArMTI5MCw4IEBAIHZvaWQgQ29kZUJsb2NrOjpkZXRlcm1pbmVMaXZlbmVzcyhjb25zdCAKICAg
ICBpZiAoYWxsQXJlTGl2ZVNvRmFyKSB7CiAgICAgICAgIGZvciAoU3RydWN0dXJlSUQgc3RydWN0
dXJlSUQgOiBkZmdDb21tb24tPndlYWtTdHJ1Y3R1cmVSZWZlcmVuY2VzKSB7CiAgICAgICAgICAg
ICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHZtLmdldFN0cnVjdHVyZShzdHJ1Y3R1cmVJRCk7Ci0g
ICAgICAgICAgICBpZiAoIXZtLmhlYXAuaXNNYXJrZWQoc3RydWN0dXJlKSkgeworLy8gICAgICAg
ICAgICBpZiAoIXZtLmhlYXAuaXNNYXJrZWQoc3RydWN0dXJlKSkgeworICAgICAgICAgICAgaWYg
KCF2aXNpdG9yLmlzTWFya2VkKHN0cnVjdHVyZSkpIHsKICAgICAgICAgICAgICAgICBhbGxBcmVM
aXZlU29GYXIgPSBmYWxzZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0K
QEAgLTEyNTQsNiArMTMwOSw5IEBAIHZvaWQgQ29kZUJsb2NrOjpkZXRlcm1pbmVMaXZlbmVzcyhj
b25zdCAKICNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKIH0KIAorLy90ZW1wbGF0ZSB2b2lkIENv
ZGVCbG9jazo6ZGV0ZXJtaW5lTGl2ZW5lc3MoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgU2xv
dFZpc2l0b3ImKTsKKy8vdGVtcGxhdGUgdm9pZCBDb2RlQmxvY2s6OmRldGVybWluZUxpdmVuZXNz
KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIFZlcmlmaWVyU2xvdFZpc2l0b3ImKTsKKwogdm9p
ZCBDb2RlQmxvY2s6OmZpbmFsaXplTExJbnRJbmxpbmVDYWNoZXMoKQogewogICAgIFZNJiB2bSA9
ICptX3ZtOwpAQCAtMTc2Miw3ICsxODIwLDggQEAgdm9pZCBDb2RlQmxvY2s6OnJlc2V0SklURGF0
YSgpCiB9CiAjZW5kaWYKIAotdm9pZCBDb2RlQmxvY2s6OnZpc2l0T1NSRXhpdFRhcmdldHMoY29u
c3QgQ29uY3VycmVudEpTTG9ja2VyJiwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0
eXBlbmFtZSBWaXNpdG9yPgordm9pZCBDb2RlQmxvY2s6OnZpc2l0T1NSRXhpdFRhcmdldHMoY29u
c3QgQ29uY3VycmVudEpTTG9ja2VyJiwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICAvLyBXZSBz
dHJvbmdseSB2aXNpdCBPU1IgZXhpdHMgdGFyZ2V0cyBiZWNhdXNlIHdlIGRvbid0IHdhbnQgdG8g
ZGVhbCB3aXRoCiAgICAgLy8gdGhlIGNvbXBsZXhpdHkgb2YgZ2VuZXJhdGluZyBhbiBleGl0IHRh
cmdldCBDb2RlQmxvY2sgb24gZGVtYW5kIGFuZApAQCAtMTc4Miw3ICsxODQxLDExIEBAIHZvaWQg
Q29kZUJsb2NrOjp2aXNpdE9TUkV4aXRUYXJnZXRzKGNvbnMKICNlbmRpZgogfQogCi12b2lkIENv
ZGVCbG9jazo6c3Ryb25nbHlWaXNpdFN0cm9uZ1JlZmVyZW5jZXMoY29uc3QgQ29uY3VycmVudEpT
TG9ja2VyJiBsb2NrZXIsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGUgdm9pZCBDb2Rl
QmxvY2s6OnZpc2l0T1NSRXhpdFRhcmdldHMoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgU2xv
dFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgQ29kZUJsb2NrOjp2aXNpdE9TUkV4aXRUYXJnZXRz
KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKKwordGVt
cGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgQ29kZUJsb2NrOjpzdHJvbmdseVZpc2l0U3Ry
b25nUmVmZXJlbmNlcyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImIGxvY2tlciwgVmlzaXRvciYg
dmlzaXRvcikKIHsKICAgICBVTlVTRURfUEFSQU0obG9ja2VyKTsKICAgICAKQEAgLTE4MDMsMjIg
KzE4NjYsMjYgQEAgdm9pZCBDb2RlQmxvY2s6OnN0cm9uZ2x5VmlzaXRTdHJvbmdSZWZlcgogI2lm
IEVOQUJMRShKSVQpCiAgICAgaWYgKGF1dG8qIGppdERhdGEgPSBtX2ppdERhdGEuZ2V0KCkpIHsK
ICAgICAgICAgZm9yIChCeVZhbEluZm8qIGJ5VmFsSW5mbyA6IGppdERhdGEtPm1fYnlWYWxJbmZv
cykKLSAgICAgICAgICAgIGJ5VmFsSW5mby0+dmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7CisgICAg
ICAgICAgICBieVZhbEluZm8tPnZpc2l0QWdncmVnYXRlMSh2aXNpdG9yKTsKICAgICAgICAgZm9y
IChTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gOiBqaXREYXRhLT5tX3N0dWJJbmZvcykKLSAg
ICAgICAgICAgIHN0dWJJbmZvLT52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKKyAgICAgICAgICAg
IHN0dWJJbmZvLT52aXNpdEFnZ3JlZ2F0ZTEodmlzaXRvcik7CiAgICAgfQogI2VuZGlmCiAKICNp
ZiBFTkFCTEUoREZHX0pJVCkKICAgICBpZiAoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGppdFR5
cGUoKSkpIHsKICAgICAgICAgREZHOjpDb21tb25EYXRhKiBkZmdDb21tb24gPSBtX2ppdENvZGUt
PmRmZ0NvbW1vbigpOwotICAgICAgICBkZmdDb21tb24tPnJlY29yZGVkU3RhdHVzZXMudmlzaXRB
Z2dyZWdhdGUodmlzaXRvcik7CisgICAgICAgIGRmZ0NvbW1vbi0+cmVjb3JkZWRTdGF0dXNlcy52
aXNpdEFnZ3JlZ2F0ZTEodmlzaXRvcik7CiAgICAgICAgIHZpc2l0T1NSRXhpdFRhcmdldHMobG9j
a2VyLCB2aXNpdG9yKTsKICAgICB9CiAjZW5kaWYKIH0KIAotdm9pZCBDb2RlQmxvY2s6OnN0cm9u
Z2x5VmlzaXRXZWFrUmVmZXJlbmNlcyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBTbG90Vmlz
aXRvciYgdmlzaXRvcikKKy8vdGVtcGxhdGUgdm9pZCBDb2RlQmxvY2s6OnN0cm9uZ2x5VmlzaXRT
dHJvbmdSZWZlcmVuY2VzKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIFNsb3RWaXNpdG9yJik7
CisvL3RlbXBsYXRlIHZvaWQgQ29kZUJsb2NrOjpzdHJvbmdseVZpc2l0U3Ryb25nUmVmZXJlbmNl
cyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBWZXJpZmllclNsb3RWaXNpdG9yJik7CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIENvZGVCbG9jazo6c3Ryb25nbHlWaXNpdFdl
YWtSZWZlcmVuY2VzKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIFZpc2l0b3ImIHZpc2l0b3Ip
CiB7CiAgICAgVU5VU0VEX1BBUkFNKHZpc2l0b3IpOwogCkBAIC0xODQ1LDYgKzE5MTIsOSBAQCB2
b2lkIENvZGVCbG9jazo6c3Ryb25nbHlWaXNpdFdlYWtSZWZlcmVuCiAjZW5kaWYgICAgCiB9CiAK
K3RlbXBsYXRlIHZvaWQgQ29kZUJsb2NrOjpzdHJvbmdseVZpc2l0V2Vha1JlZmVyZW5jZXMoY29u
c3QgQ29uY3VycmVudEpTTG9ja2VyJiwgU2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgQ29k
ZUJsb2NrOjpzdHJvbmdseVZpc2l0V2Vha1JlZmVyZW5jZXMoY29uc3QgQ29uY3VycmVudEpTTG9j
a2VyJiwgQWJzdHJhY3RTbG90VmlzaXRvciYpOworCiBDb2RlQmxvY2sqIENvZGVCbG9jazo6YmFz
ZWxpbmVBbHRlcm5hdGl2ZSgpCiB7CiAjaWYgRU5BQkxFKEpJVCkKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9uIDI3MTc4NikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpA
QCAtMjAxLDEwICsyMDEsMTEgQEAgcHVibGljOgogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xMjM2NzcKICAgICBDb2RlQmxvY2sqIGJhc2VsaW5lVmVyc2lv
bigpOwogCisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKKwogICAgIHN0YXRpYyBzaXplX3Qg
ZXN0aW1hdGVkU2l6ZShKU0NlbGwqLCBWTSYpOwotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKICAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2Vs
bCopOwotICAgIHZvaWQgdmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVf
SU5TVEFOQ0VfVklTSVRfQ0hJTERSRU47CiAgICAgdm9pZCBmaW5hbGl6ZVVuY29uZGl0aW9uYWxs
eShWTSYpOwogCiAgICAgdm9pZCBub3RpZnlMZXhpY2FsQmluZGluZ1VwZGF0ZSgpOwpAQCAtOTY3
LDEyICs5NjgsMTQgQEAgcHJpdmF0ZToKICAgICBib29sIHNob3VsZEpldHRpc29uRHVlVG9XZWFr
UmVmZXJlbmNlKFZNJik7CiAgICAgYm9vbCBzaG91bGRKZXR0aXNvbkR1ZVRvT2xkQWdlKGNvbnN0
IENvbmN1cnJlbnRKU0xvY2tlciYpOwogICAgIAotICAgIHZvaWQgcHJvcGFnYXRlVHJhbnNpdGlv
bnMoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgU2xvdFZpc2l0b3ImKTsKLSAgICB2b2lkIGRl
dGVybWluZUxpdmVuZXNzKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIFNsb3RWaXNpdG9yJik7
CisvLyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIHByb3BhZ2F0ZVRyYW5zaXRp
b25zKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIFZpc2l0b3ImKTsKKyAgICB2b2lkIHByb3Bh
Z2F0ZVRyYW5zaXRpb25zMShjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBBYnN0cmFjdFNsb3RW
aXNpdG9yJik7CisvLyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIGRldGVybWlu
ZUxpdmVuZXNzKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIFZpc2l0b3ImKTsKKyAgICB2b2lk
IGRldGVybWluZUxpdmVuZXNzKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIEFic3RyYWN0U2xv
dFZpc2l0b3ImKTsKICAgICAgICAgCi0gICAgdm9pZCBzdHJvbmdseVZpc2l0U3Ryb25nUmVmZXJl
bmNlcyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBTbG90VmlzaXRvciYpOwotICAgIHZvaWQg
c3Ryb25nbHlWaXNpdFdlYWtSZWZlcmVuY2VzKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIFNs
b3RWaXNpdG9yJik7Ci0gICAgdm9pZCB2aXNpdE9TUkV4aXRUYXJnZXRzKGNvbnN0IENvbmN1cnJl
bnRKU0xvY2tlciYsIFNsb3RWaXNpdG9yJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRv
cj4gdm9pZCBzdHJvbmdseVZpc2l0U3Ryb25nUmVmZXJlbmNlcyhjb25zdCBDb25jdXJyZW50SlNM
b2NrZXImLCBWaXNpdG9yJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCBz
dHJvbmdseVZpc2l0V2Vha1JlZmVyZW5jZXMoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgVmlz
aXRvciYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgdmlzaXRPU1JFeGl0
VGFyZ2V0cyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBWaXNpdG9yJik7CiAKICAgICB1bnNp
Z25lZCBudW1iZXJPZk5vbkFyZ3VtZW50VmFsdWVQcm9maWxlcygpIHsgcmV0dXJuIG1fbnVtYmVy
T2ZOb25Bcmd1bWVudFZhbHVlUHJvZmlsZXM7IH0KICAgICB1bnNpZ25lZCB0b3RhbE51bWJlck9m
VmFsdWVQcm9maWxlcygpIHsgcmV0dXJuIG51bWJlck9mQXJndW1lbnRWYWx1ZVByb2ZpbGVzKCkg
KyBudW1iZXJPZk5vbkFyZ3VtZW50VmFsdWVQcm9maWxlcygpOyB9CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvRGVsZXRlQnlJZFZhcmlhbnQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9EZWxldGVCeUlkVmFyaWFudC5jcHAJKHJl
dmlzaW9uIDI3MTc4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9EZWxldGVC
eUlkVmFyaWFudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg4LDE5ICs4OCwyOSBAQCBib29sIERl
bGV0ZUJ5SWRWYXJpYW50Ojp3cml0ZXNTdHJ1Y3R1cmVzCiAgICAgcmV0dXJuICEhbmV3U3RydWN0
dXJlKCk7CiB9CiAKLXZvaWQgRGVsZXRlQnlJZFZhcmlhbnQ6OnZpc2l0QWdncmVnYXRlKFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQorLy90ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgorLy92b2lkIERl
bGV0ZUJ5SWRWYXJpYW50Ojp2aXNpdEFnZ3JlZ2F0ZShWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBE
ZWxldGVCeUlkVmFyaWFudDo6dmlzaXRBZ2dyZWdhdGUxKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZp
c2l0b3IpCiB7Ci0gICAgbV9pZGVudGlmaWVyLnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOworICAg
IG1faWRlbnRpZmllci52aXNpdEFnZ3JlZ2F0ZTEodmlzaXRvcik7CiB9CiAKLXZvaWQgRGVsZXRl
QnlJZFZhcmlhbnQ6Om1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy90ZW1wbGF0
ZSB2b2lkIERlbGV0ZUJ5SWRWYXJpYW50Ojp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYpOwor
Ly90ZW1wbGF0ZSB2b2lkIERlbGV0ZUJ5SWRWYXJpYW50Ojp2aXNpdEFnZ3JlZ2F0ZShWZXJpZmll
clNsb3RWaXNpdG9yJik7CisKKy8vdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KKy8vdm9pZCBE
ZWxldGVCeUlkVmFyaWFudDo6bWFya0lmQ2hlYXAoVmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgRGVs
ZXRlQnlJZFZhcmlhbnQ6Om1hcmtJZkNoZWFwMShBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9y
KQogewogICAgIGlmIChtX29sZFN0cnVjdHVyZSkKLSAgICAgICAgbV9vbGRTdHJ1Y3R1cmUtPm1h
cmtJZkNoZWFwKHZpc2l0b3IpOworICAgICAgICBtX29sZFN0cnVjdHVyZS0+bWFya0lmQ2hlYXAx
KHZpc2l0b3IpOwogICAgIGlmIChtX25ld1N0cnVjdHVyZSkKLSAgICAgICAgbV9uZXdTdHJ1Y3R1
cmUtPm1hcmtJZkNoZWFwKHZpc2l0b3IpOworICAgICAgICBtX25ld1N0cnVjdHVyZS0+bWFya0lm
Q2hlYXAxKHZpc2l0b3IpOwogfQogCisvL3RlbXBsYXRlIHZvaWQgRGVsZXRlQnlJZFZhcmlhbnQ6
Om1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJik7CisvL3RlbXBsYXRlIHZvaWQgRGVsZXRlQnlJZFZh
cmlhbnQ6Om1hcmtJZkNoZWFwKFZlcmlmaWVyU2xvdFZpc2l0b3ImKTsKKwogdm9pZCBEZWxldGVC
eUlkVmFyaWFudDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAogewogICAgIGR1bXBJbkNv
bnRleHQob3V0LCBudWxscHRyKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9EZWxldGVCeUlkVmFyaWFudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9EZWxldGVCeUlkVmFyaWFudC5oCShyZXZpc2lvbiAyNzE3ODYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRGVsZXRlQnlJZFZhcmlhbnQuaAkod29ya2luZyBj
b3B5KQpAQCAtNjEsOCArNjEsMTAgQEAgcHVibGljOgogCiAgICAgYm9vbCBhdHRlbXB0VG9NZXJn
ZShjb25zdCBEZWxldGVCeUlkVmFyaWFudCYgb3RoZXIpOwogCi0gICAgdm9pZCB2aXNpdEFnZ3Jl
Z2F0ZShTbG90VmlzaXRvciYpOwotICAgIHZvaWQgbWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImKTsK
Ky8vICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgdmlzaXRBZ2dyZWdhdGUoVmlz
aXRvciYpOworLy8gICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCBtYXJrSWZDaGVh
cChWaXNpdG9yJik7CisgICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZTEoQWJzdHJhY3RTbG90VmlzaXRv
ciYpOworICAgIHZvaWQgbWFya0lmQ2hlYXAxKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKICAgICBi
b29sIGZpbmFsaXplKFZNJik7CiAKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9EZWxldGVCeVN0YXR1cy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0RlbGV0ZUJ5U3Rh
dHVzLmNwcAkocmV2aXNpb24gMjcxNzg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0RlbGV0ZUJ5U3RhdHVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjU0LDE4ICsyNTQsMjgg
QEAgQ2FjaGVhYmxlSWRlbnRpZmllciBEZWxldGVCeVN0YXR1czo6c2luZwogICAgIHJldHVybiBy
ZXN1bHQ7CiB9CiAKLXZvaWQgRGVsZXRlQnlTdGF0dXM6OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNp
dG9yJiB2aXNpdG9yKQorLy90ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgorLy92b2lkIERlbGV0
ZUJ5U3RhdHVzOjp2aXNpdEFnZ3JlZ2F0ZShWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBEZWxldGVC
eVN0YXR1czo6dmlzaXRBZ2dyZWdhdGUxKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7
CiAgICAgZm9yIChEZWxldGVCeUlkVmFyaWFudCYgdmFyaWFudCA6IG1fdmFyaWFudHMpCi0gICAg
ICAgIHZhcmlhbnQudmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7CisgICAgICAgIHZhcmlhbnQudmlz
aXRBZ2dyZWdhdGUxKHZpc2l0b3IpOwogfQogCi12b2lkIERlbGV0ZUJ5U3RhdHVzOjptYXJrSWZD
aGVhcChTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vdGVtcGxhdGUgdm9pZCBEZWxldGVCeVN0YXR1
czo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImKTsKKy8vdGVtcGxhdGUgdm9pZCBEZWxldGVC
eVN0YXR1czo6dmlzaXRBZ2dyZWdhdGUoVmVyaWZpZXJTbG90VmlzaXRvciYpOworCisvL3RlbXBs
YXRlPHR5cGVuYW1lIFZpc2l0b3I+CisvL3ZvaWQgRGVsZXRlQnlTdGF0dXM6Om1hcmtJZkNoZWFw
KFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIERlbGV0ZUJ5U3RhdHVzOjptYXJrSWZDaGVhcDEoQWJz
dHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBmb3IgKERlbGV0ZUJ5SWRWYXJpYW50
JiB2YXJpYW50IDogbV92YXJpYW50cykKLSAgICAgICAgdmFyaWFudC5tYXJrSWZDaGVhcCh2aXNp
dG9yKTsKKyAgICAgICAgdmFyaWFudC5tYXJrSWZDaGVhcDEodmlzaXRvcik7CiB9CiAKKy8vdGVt
cGxhdGUgdm9pZCBEZWxldGVCeVN0YXR1czo6bWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImKTsKKy8v
dGVtcGxhdGUgdm9pZCBEZWxldGVCeVN0YXR1czo6bWFya0lmQ2hlYXAoVmVyaWZpZXJTbG90Vmlz
aXRvciYpOworCiBib29sIERlbGV0ZUJ5U3RhdHVzOjpmaW5hbGl6ZShWTSYgdm0pCiB7CiAgICAg
Zm9yIChhdXRvJiB2YXJpYW50IDogbV92YXJpYW50cykgewpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0RlbGV0ZUJ5U3RhdHVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0RlbGV0ZUJ5U3RhdHVzLmgJKHJldmlzaW9uIDI3MTc4NikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9EZWxldGVCeVN0YXR1cy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC04MSw4ICs4MSwxMCBAQCBwdWJsaWM6CiAgICAgLy8gQXR0ZW1wdHMgdG8g
cmVkdWNlIHRoZSBzZXQgb2YgdmFyaWFudHMgdG8gZml0IHRoZSBnaXZlbiBzdHJ1Y3R1cmUgc2V0
LiBUaGlzIG1heSBiZSBhcHByb3hpbWF0ZS4KICAgICB2b2lkIGZpbHRlcihjb25zdCBTdHJ1Y3R1
cmVTZXQmKTsKIAotICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImKTsKLSAgICB2
b2lkIG1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJik7CisvLyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPiB2b2lkIHZpc2l0QWdncmVnYXRlKFZpc2l0b3ImKTsKKy8vICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFZpc2l0b3I+IHZvaWQgbWFya0lmQ2hlYXAoVmlzaXRvciYpOworICAgIHZvaWQgdmlz
aXRBZ2dyZWdhdGUxKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKKyAgICB2b2lkIG1hcmtJZkNoZWFw
MShBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAgICAgYm9vbCBmaW5hbGl6ZShWTSYpOwogCiAgICAg
Ym9vbCBhcHBlbmRWYXJpYW50KGNvbnN0IERlbGV0ZUJ5SWRWYXJpYW50Jik7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRGlyZWN0RXZhbENvZGVDYWNoZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0RpcmVjdEV2YWxDb2RlQ2Fj
aGUuY3BwCShyZXZpc2lvbiAyNzE3ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvRGlyZWN0RXZhbENvZGVDYWNoZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDcgKzQ1LDgg
QEAgdm9pZCBEaXJlY3RFdmFsQ29kZUNhY2hlOjpjbGVhcigpCiAgICAgbV9jYWNoZU1hcC5jbGVh
cigpOwogfQogCi12b2lkIERpcmVjdEV2YWxDb2RlQ2FjaGU6OnZpc2l0QWdncmVnYXRlKFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgRGlyZWN0
RXZhbENvZGVDYWNoZTo6dmlzaXRBZ2dyZWdhdGUoVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBM
b2NrSG9sZGVyIGxvY2tlcihtX2xvY2spOwogICAgIEV2YWxDYWNoZU1hcDo6aXRlcmF0b3IgZW5k
ID0gbV9jYWNoZU1hcC5lbmQoKTsKQEAgLTUzLDUgKzU0LDcgQEAgdm9pZCBEaXJlY3RFdmFsQ29k
ZUNhY2hlOjp2aXNpdEFnZ3JlZ2F0ZQogICAgICAgICB2aXNpdG9yLmFwcGVuZChwdHItPnZhbHVl
KTsKIH0KIAotfSAvLyBuYW1lc3BhY2UgSlNDCit0ZW1wbGF0ZSB2b2lkIERpcmVjdEV2YWxDb2Rl
Q2FjaGU6OnZpc2l0QWdncmVnYXRlKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZv
aWQgRGlyZWN0RXZhbENvZGVDYWNoZTo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImKTsKIAor
fSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
RGlyZWN0RXZhbENvZGVDYWNoZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9EaXJlY3RFdmFsQ29kZUNhY2hlLmgJKHJldmlzaW9uIDI3MTc4NikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9EaXJlY3RFdmFsQ29kZUNhY2hlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTk3LDcgKzk3LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgYm9v
bCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gbV9jYWNoZU1hcC5pc0VtcHR5KCk7IH0KIAotICAg
ICAgICB2b2lkIHZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJik7CisgICAgICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgdmlzaXRBZ2dyZWdhdGUoVmlzaXRvciYpOwogCiAgICAg
ICAgIHZvaWQgY2xlYXIoKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0V4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9FeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlLmNwcAkocmV2aXNp
b24gMjcxNzg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGFibGVU
b0NvZGVCbG9ja0VkZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTgtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTUzLDcgKzUzLDkgQEAgdm9pZCBFeGVj
dXRhYmxlVG9Db2RlQmxvY2tFZGdlOjpmaW5pc2hDcgogICAgIEFTU0VSVCghaXNBY3RpdmUoKSk7
CiB9CiAKLXZvaWQgRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZTo6dmlzaXRDaGlsZHJlbihKU0Nl
bGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRv
cj4KK3ZvaWQgRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZTo6dmlzaXRDaGlsZHJlbkltcGwoSlND
ZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQorLy92b2lkIEV4ZWN1dGFibGVUb0NvZGVCbG9j
a0VkZ2U6OnZpc2l0Q2hpbGRyZW4xKEpTQ2VsbCogY2VsbCwgQWJzdHJhY3RTbG90VmlzaXRvciYg
dmlzaXRvcikKIHsKICAgICBWTSYgdm0gPSB2aXNpdG9yLnZtKCk7CiAgICAgRXhlY3V0YWJsZVRv
Q29kZUJsb2NrRWRnZSogZWRnZSA9IGpzQ2FzdDxFeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlKj4o
Y2VsbCk7CkBAIC03OSw3ICs4MSw4IEBAIHZvaWQgRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZTo6
dmlzaXRDaGkKICAgICBpZiAoY29kZUJsb2NrLT5zaG91bGRWaXNpdFN0cm9uZ2x5KGxvY2tlcikp
CiAgICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQoY29kZUJsb2NrKTsKICAgICAKLSAg
ICBpZiAoIXZtLmhlYXAuaXNNYXJrZWQoY29kZUJsb2NrKSkKKy8vICAgIGlmICghdm0uaGVhcC5p
c01hcmtlZChjb2RlQmxvY2spKSAvLyBtbGFtCisgICAgaWYgKCF2aXNpdG9yLmlzTWFya2VkKGNv
ZGVCbG9jaykpCiAgICAgICAgIHZtLmV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2VzV2l0aEZpbmFs
aXplcnMuYWRkKGVkZ2UpOwogICAgIAogICAgIGlmIChKSVRDb2RlOjppc09wdGltaXppbmdKSVQo
Y29kZUJsb2NrLT5qaXRUeXBlKCkpKSB7CkBAIC0xMTQsMTUgKzExNywxNyBAQCB2b2lkIEV4ZWN1
dGFibGVUb0NvZGVCbG9ja0VkZ2U6OnZpc2l0Q2hpCiAgICAgLy8gd2lsbCBrZWVwIGZpeHBvaW50
aW5nIHVudGlsIHRoZSBlbmQuCiAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZChjb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKTsKICAgICB2bS5leGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlc1dp
dGhDb25zdHJhaW50cy5hZGQoZWRnZSk7Ci0gICAgZWRnZS0+cnVuQ29uc3RyYWludChsb2NrZXIs
IHZtLCB2aXNpdG9yKTsKKyAgICBlZGdlLT5ydW5Db25zdHJhaW50MShsb2NrZXIsIHZtLCB2aXNp
dG9yKTsgLy8gbWxhbSBGSVhNRQogfQogCi12b2lkIEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2U6
OnZpc2l0T3V0cHV0Q29uc3RyYWludHMoSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRv
cikKK0RFRklORV9WSVNJVF9DSElMRFJFTihFeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlKTsKKwor
dm9pZCBFeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzKEpT
Q2VsbCogY2VsbCwgQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBWTSYgdm0g
PSB2aXNpdG9yLnZtKCk7CiAgICAgRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZSogZWRnZSA9IGpz
Q2FzdDxFeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlKj4oY2VsbCk7CiAgICAgCi0gICAgZWRnZS0+
cnVuQ29uc3RyYWludChOb0xvY2tpbmdOZWNlc3NhcnksIHZtLCB2aXNpdG9yKTsKKyAgICBlZGdl
LT5ydW5Db25zdHJhaW50MShOb0xvY2tpbmdOZWNlc3NhcnksIHZtLCB2aXNpdG9yKTsKIH0KIAog
dm9pZCBFeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxseShW
TSYgdm0pCkBAIC0xODYsMTYgKzE5MSwyMSBAQCBFeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlOjpF
eGVjdXRhYmxlVG9DCiB7CiB9CiAKLXZvaWQgRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZTo6cnVu
Q29uc3RyYWludChjb25zdCBDb25jdXJyZW50SlNMb2NrZXImIGxvY2tlciwgVk0mIHZtLCBTbG90
VmlzaXRvciYgdmlzaXRvcikKKy8vdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KKy8vdm9pZCBF
eGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlOjpydW5Db25zdHJhaW50MShjb25zdCBDb25jdXJyZW50
SlNMb2NrZXImIGxvY2tlciwgVk0mIHZtLCBWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBFeGVjdXRh
YmxlVG9Db2RlQmxvY2tFZGdlOjpydW5Db25zdHJhaW50MShjb25zdCBDb25jdXJyZW50SlNMb2Nr
ZXImIGxvY2tlciwgVk0mIHZtLCBBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAg
IENvZGVCbG9jayogY29kZUJsb2NrID0gbV9jb2RlQmxvY2suZ2V0KCk7CiAgICAgCi0gICAgY29k
ZUJsb2NrLT5wcm9wYWdhdGVUcmFuc2l0aW9ucyhsb2NrZXIsIHZpc2l0b3IpOworICAgIGNvZGVC
bG9jay0+cHJvcGFnYXRlVHJhbnNpdGlvbnMxKGxvY2tlciwgdmlzaXRvcik7CiAgICAgY29kZUJs
b2NrLT5kZXRlcm1pbmVMaXZlbmVzcyhsb2NrZXIsIHZpc2l0b3IpOwogICAgIAotICAgIGlmICh2
bS5oZWFwLmlzTWFya2VkKGNvZGVCbG9jaykpCisvLyAgICBpZiAodm0uaGVhcC5pc01hcmtlZChj
b2RlQmxvY2spKQorICAgIGlmICh2aXNpdG9yLmlzTWFya2VkKGNvZGVCbG9jaykpCiAgICAgICAg
IHZtLmV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2VzV2l0aENvbnN0cmFpbnRzLnJlbW92ZSh0aGlz
KTsKIH0KIAotfSAvLyBuYW1lc3BhY2UgSlNDCisvL3RlbXBsYXRlIHZvaWQgRXhlY3V0YWJsZVRv
Q29kZUJsb2NrRWRnZTo6cnVuQ29uc3RyYWludDEoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwg
Vk0mLCBTbG90VmlzaXRvciYpOworLy90ZW1wbGF0ZSB2b2lkIEV4ZWN1dGFibGVUb0NvZGVCbG9j
a0VkZ2U6OnJ1bkNvbnN0cmFpbnQxKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIFZNJiwgQWJz
dHJhY3RTbG90VmlzaXRvciYpOwogCit9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGFibGVUb0NvZGVC
bG9ja0VkZ2UuaAkocmV2aXNpb24gMjcxNzg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0V4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAxOSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAyMCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTUz
LDkgKzUzLDEwIEBAIHB1YmxpYzoKICAgICBERUNMQVJFX0lORk87CiAKICAgICBDb2RlQmxvY2sq
IGNvZGVCbG9jaygpIGNvbnN0IHsgcmV0dXJuIG1fY29kZUJsb2NrLmdldCgpOyB9Ci0gICAgCi0g
ICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwotICAg
IHN0YXRpYyB2b2lkIHZpc2l0T3V0cHV0Q29uc3RyYWludHMoSlNDZWxsKiwgU2xvdFZpc2l0b3Im
KTsKKworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CisvLyAgICBzdGF0aWMgdm9pZCB2aXNp
dENoaWxkcmVuMShKU0NlbGwqLCBBYnN0cmFjdFNsb3RWaXNpdG9yJik7CisgICAgc3RhdGljIHZv
aWQgdmlzaXRPdXRwdXRDb25zdHJhaW50cyhKU0NlbGwqLCBBYnN0cmFjdFNsb3RWaXNpdG9yJik7
CiAgICAgdm9pZCBmaW5hbGl6ZVVuY29uZGl0aW9uYWxseShWTSYpOwogICAgIAogICAgIHN0YXRp
YyBDb2RlQmxvY2sqIHVud3JhcChFeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlKiBlZGdlKQpAQCAt
ODEsOSArODIsMTEgQEAgcHJpdmF0ZToKICAgICB2b2lkIGFjdGl2YXRlKCk7CiAgICAgdm9pZCBk
ZWFjdGl2YXRlKCk7CiAgICAgYm9vbCBpc0FjdGl2ZSgpIGNvbnN0OwotICAgIAotICAgIHZvaWQg
cnVuQ29uc3RyYWludChjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBWTSYsIFNsb3RWaXNpdG9y
Jik7Ci0gICAgCisKKy8vICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+CisvLyAgICB2b2lk
IHJ1bkNvbnN0cmFpbnQxKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIFZNJiwgVmlzaXRvciYp
OworICAgIHZvaWQgcnVuQ29uc3RyYWludDEoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgVk0m
LCBBYnN0cmFjdFNsb3RWaXNpdG9yJik7CisKICAgICBXcml0ZUJhcnJpZXI8Q29kZUJsb2NrPiBt
X2NvZGVCbG9jazsKIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9H
ZXRCeUlkVmFyaWFudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0dldEJ5SWRWYXJpYW50LmNwcAkocmV2aXNpb24gMjcxNzg2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRWYXJpYW50LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTU2LDE2ICsxNTYsMjYgQEAgYm9vbCBHZXRCeUlkVmFyaWFudDo6YXR0ZW1wdFRvTWVyZ2Uo
Y29ucwogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIEdldEJ5SWRWYXJpYW50Ojp2aXNpdEFn
Z3JlZ2F0ZShTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRv
cj4KKy8vdm9pZCBHZXRCeUlkVmFyaWFudDo6dmlzaXRBZ2dyZWdhdGUoVmlzaXRvciYgdmlzaXRv
cikKK3ZvaWQgR2V0QnlJZFZhcmlhbnQ6OnZpc2l0QWdncmVnYXRlMShBYnN0cmFjdFNsb3RWaXNp
dG9yJiB2aXNpdG9yKQogewotICAgIG1faWRlbnRpZmllci52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9y
KTsKKyAgICBtX2lkZW50aWZpZXIudmlzaXRBZ2dyZWdhdGUxKHZpc2l0b3IpOwogfQogCi12b2lk
IEdldEJ5SWRWYXJpYW50OjptYXJrSWZDaGVhcChTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vdGVt
cGxhdGUgdm9pZCBHZXRCeUlkVmFyaWFudDo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImKTsK
Ky8vdGVtcGxhdGUgdm9pZCBHZXRCeUlkVmFyaWFudDo6dmlzaXRBZ2dyZWdhdGUoVmVyaWZpZXJT
bG90VmlzaXRvciYpOworCisvL3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+CisvL3ZvaWQgR2V0
QnlJZFZhcmlhbnQ6Om1hcmtJZkNoZWFwKFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIEdldEJ5SWRW
YXJpYW50OjptYXJrSWZDaGVhcDEoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKLSAg
ICBtX3N0cnVjdHVyZVNldC5tYXJrSWZDaGVhcCh2aXNpdG9yKTsKKyAgICBtX3N0cnVjdHVyZVNl
dC5tYXJrSWZDaGVhcDEodmlzaXRvcik7CiB9CiAKKy8vdGVtcGxhdGUgdm9pZCBHZXRCeUlkVmFy
aWFudDo6bWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImKTsKKy8vdGVtcGxhdGUgdm9pZCBHZXRCeUlk
VmFyaWFudDo6bWFya0lmQ2hlYXAoVmVyaWZpZXJTbG90VmlzaXRvciYpOworCiBib29sIEdldEJ5
SWRWYXJpYW50OjpmaW5hbGl6ZShWTSYgdm0pCiB7CiAgICAgaWYgKCFtX3N0cnVjdHVyZVNldC5p
c1N0aWxsQWxpdmUodm0pKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dl
dEJ5SWRWYXJpYW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0dldEJ5SWRWYXJpYW50LmgJKHJldmlzaW9uIDI3MTc4NikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkVmFyaWFudC5oCSh3b3JraW5nIGNvcHkpCkBAIC03Nyw4
ICs3NywxMCBAQCBwdWJsaWM6CiAKICAgICBib29sIGF0dGVtcHRUb01lcmdlKGNvbnN0IEdldEJ5
SWRWYXJpYW50JiBvdGhlcik7CiAgICAgCi0gICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShTbG90Vmlz
aXRvciYpOwotICAgIHZvaWQgbWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImKTsKKy8vICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgdmlzaXRBZ2dyZWdhdGUoVmlzaXRvciYpOworLy8g
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCBtYXJrSWZDaGVhcChWaXNpdG9yJik7
CisgICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZTEoQWJzdHJhY3RTbG90VmlzaXRvciYpOworICAgIHZv
aWQgbWFya0lmQ2hlYXAxKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKICAgICBib29sIGZpbmFsaXpl
KFZNJik7CiAgICAgCiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlTdGF0dXMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeVN0YXR1cy5jcHAJKHJldmlz
aW9uIDI3MTc4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeVN0YXR1
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUzMCwyMCArNTMwLDMxIEBAIHZvaWQgR2V0QnlTdGF0
dXM6OmZpbHRlcihjb25zdCBTdHJ1Y3R1cmUKICAgICAgICAgbV9zdGF0ZSA9IE5vSW5mb3JtYXRp
b247CiB9CiAKLXZvaWQgR2V0QnlTdGF0dXM6OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQorLy90ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgorLy92b2lkIEdldEJ5U3RhdHVz
Ojp2aXNpdEFnZ3JlZ2F0ZShWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBHZXRCeVN0YXR1czo6dmlz
aXRBZ2dyZWdhdGUxKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgaWYgKGlz
TW9kdWxlTmFtZXNwYWNlKCkpCi0gICAgICAgIG1fbW9kdWxlTmFtZXNwYWNlRGF0YS0+bV9pZGVu
dGlmaWVyLnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOworICAgICAgICBtX21vZHVsZU5hbWVzcGFj
ZURhdGEtPm1faWRlbnRpZmllci52aXNpdEFnZ3JlZ2F0ZTEodmlzaXRvcik7CiAgICAgZm9yIChH
ZXRCeUlkVmFyaWFudCYgdmFyaWFudCA6IG1fdmFyaWFudHMpCi0gICAgICAgIHZhcmlhbnQudmlz
aXRBZ2dyZWdhdGUodmlzaXRvcik7CisgICAgICAgIHZhcmlhbnQudmlzaXRBZ2dyZWdhdGUxKHZp
c2l0b3IpOwogfQogCi12b2lkIEdldEJ5U3RhdHVzOjptYXJrSWZDaGVhcChTbG90VmlzaXRvciYg
dmlzaXRvcikKKy8vdGVtcGxhdGUgdm9pZCBHZXRCeVN0YXR1czo6dmlzaXRBZ2dyZWdhdGUoU2xv
dFZpc2l0b3ImKTsKKy8vdGVtcGxhdGUgdm9pZCBHZXRCeVN0YXR1czo6dmlzaXRBZ2dyZWdhdGUo
VmVyaWZpZXJTbG90VmlzaXRvciYpOworCisvL3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cisv
L3ZvaWQgR2V0QnlTdGF0dXM6Om1hcmtJZkNoZWFwKFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIEdl
dEJ5U3RhdHVzOjptYXJrSWZDaGVhcDEoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsK
ICAgICBmb3IgKEdldEJ5SWRWYXJpYW50JiB2YXJpYW50IDogbV92YXJpYW50cykKLSAgICAgICAg
dmFyaWFudC5tYXJrSWZDaGVhcCh2aXNpdG9yKTsKKyAgICAgICAgdmFyaWFudC5tYXJrSWZDaGVh
cDEodmlzaXRvcik7CiB9CiAKKy8vdGVtcGxhdGUgdm9pZCBHZXRCeVN0YXR1czo6bWFya0lmQ2hl
YXAoU2xvdFZpc2l0b3ImKTsKKy8vdGVtcGxhdGUgdm9pZCBHZXRCeVN0YXR1czo6bWFya0lmQ2hl
YXAoVmVyaWZpZXJTbG90VmlzaXRvciYpOworCisKIGJvb2wgR2V0QnlTdGF0dXM6OmZpbmFsaXpl
KFZNJiB2bSkKIHsKICAgICBmb3IgKEdldEJ5SWRWYXJpYW50JiB2YXJpYW50IDogbV92YXJpYW50
cykgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5U3RhdHVzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5U3RhdHVz
LmgJKHJldmlzaW9uIDI3MTc4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9H
ZXRCeVN0YXR1cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTgsOCArMTE4LDEwIEBAIHB1YmxpYzoK
ICAgICBKU01vZHVsZUVudmlyb25tZW50KiBtb2R1bGVFbnZpcm9ubWVudCgpIGNvbnN0IHsgcmV0
dXJuIG1fbW9kdWxlTmFtZXNwYWNlRGF0YS0+bV9tb2R1bGVFbnZpcm9ubWVudDsgfQogICAgIFNj
b3BlT2Zmc2V0IHNjb3BlT2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9tb2R1bGVOYW1lc3BhY2VE
YXRhLT5tX3Njb3BlT2Zmc2V0OyB9CiAgICAgCi0gICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShTbG90
VmlzaXRvciYpOwotICAgIHZvaWQgbWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImKTsKKy8vICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgdmlzaXRBZ2dyZWdhdGUoVmlzaXRvciYpOwor
Ly8gICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCBtYXJrSWZDaGVhcChWaXNpdG9y
Jik7CisgICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZTEoQWJzdHJhY3RTbG90VmlzaXRvciYpOworICAg
IHZvaWQgbWFya0lmQ2hlYXAxKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKICAgICBib29sIGZpbmFs
aXplKFZNJik7IC8vIFJldHVybiB0cnVlIGlmIHRoaXMgZ2V0cyB0byBsaXZlLgogCiAgICAgYm9v
bCBhcHBlbmRWYXJpYW50KGNvbnN0IEdldEJ5SWRWYXJpYW50Jik7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5CeUlkU3RhdHVzLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5CeUlkU3RhdHVzLmNwcAkocmV2aXNpb24gMjcx
Nzg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luQnlJZFN0YXR1cy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI1MSwxMiArMjUxLDE3IEBAIHZvaWQgSW5CeUlkU3RhdHVzOjpm
aWx0ZXIoY29uc3QgU3RydWN0dXIKICAgICAgICAgbV9zdGF0ZSA9IE5vSW5mb3JtYXRpb247CiB9
CiAKLXZvaWQgSW5CeUlkU3RhdHVzOjptYXJrSWZDaGVhcChTbG90VmlzaXRvciYgdmlzaXRvcikK
Ky8vdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KKy8vdm9pZCBJbkJ5SWRTdGF0dXM6Om1hcmtJ
ZkNoZWFwKFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIEluQnlJZFN0YXR1czo6bWFya0lmQ2hlYXAx
KEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgZm9yIChJbkJ5SWRWYXJpYW50
JiB2YXJpYW50IDogbV92YXJpYW50cykKLSAgICAgICAgdmFyaWFudC5tYXJrSWZDaGVhcCh2aXNp
dG9yKTsKKyAgICAgICAgdmFyaWFudC5tYXJrSWZDaGVhcDEodmlzaXRvcik7CiB9CiAKKy8vdGVt
cGxhdGUgdm9pZCBJbkJ5SWRTdGF0dXM6Om1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJik7CisvL3Rl
bXBsYXRlIHZvaWQgSW5CeUlkU3RhdHVzOjptYXJrSWZDaGVhcChWZXJpZmllclNsb3RWaXNpdG9y
Jik7CisKIGJvb2wgSW5CeUlkU3RhdHVzOjpmaW5hbGl6ZShWTSYgdm0pCiB7CiAgICAgZm9yIChJ
bkJ5SWRWYXJpYW50JiB2YXJpYW50IDogbV92YXJpYW50cykgewpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0luQnlJZFN0YXR1cy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbkJ5SWRTdGF0dXMuaAkocmV2aXNpb24gMjcxNzg2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luQnlJZFN0YXR1cy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xMDYsNyArMTA2LDggQEAgcHVibGljOgogICAgIC8vIEF0dGVtcHRzIHRvIHJl
ZHVjZSB0aGUgc2V0IG9mIHZhcmlhbnRzIHRvIGZpdCB0aGUgZ2l2ZW4gc3RydWN0dXJlIHNldC4g
VGhpcyBtYXkgYmUgYXBwcm94aW1hdGUuCiAgICAgdm9pZCBmaWx0ZXIoY29uc3QgU3RydWN0dXJl
U2V0Jik7CiAgICAgCi0gICAgdm9pZCBtYXJrSWZDaGVhcChTbG90VmlzaXRvciYpOworLy8gICAg
dGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCBtYXJrSWZDaGVhcChWaXNpdG9yJik7Cisg
ICAgdm9pZCBtYXJrSWZDaGVhcDEoQWJzdHJhY3RTbG90VmlzaXRvciYpOwogICAgIGJvb2wgZmlu
YWxpemUoVk0mKTsKIAogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luQnlJZFZhcmlhbnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbkJ5SWRWYXJpYW50LmNwcAko
cmV2aXNpb24gMjcxNzg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luQnlJ
ZFZhcmlhbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NCwxMSArNjQsMTYgQEAgYm9vbCBJbkJ5
SWRWYXJpYW50OjphdHRlbXB0VG9NZXJnZShjb25zdAogICAgIHJldHVybiB0cnVlOwogfQogCi12
b2lkIEluQnlJZFZhcmlhbnQ6Om1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy90
ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgorLy92b2lkIEluQnlJZFZhcmlhbnQ6Om1hcmtJZkNo
ZWFwKFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIEluQnlJZFZhcmlhbnQ6Om1hcmtJZkNoZWFwMShB
YnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewotICAgIG1fc3RydWN0dXJlU2V0Lm1hcmtJ
ZkNoZWFwKHZpc2l0b3IpOworICAgIG1fc3RydWN0dXJlU2V0Lm1hcmtJZkNoZWFwMSh2aXNpdG9y
KTsKIH0KIAorLy90ZW1wbGF0ZSB2b2lkIEluQnlJZFZhcmlhbnQ6Om1hcmtJZkNoZWFwKFNsb3RW
aXNpdG9yJik7CisvL3RlbXBsYXRlIHZvaWQgSW5CeUlkVmFyaWFudDo6bWFya0lmQ2hlYXAoVmVy
aWZpZXJTbG90VmlzaXRvciYpOworCiBib29sIEluQnlJZFZhcmlhbnQ6OmZpbmFsaXplKFZNJiB2
bSkKIHsKICAgICBpZiAoIW1fc3RydWN0dXJlU2V0LmlzU3RpbGxBbGl2ZSh2bSkpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5CeUlkVmFyaWFudC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbkJ5SWRWYXJpYW50LmgJKHJldmlz
aW9uIDI3MTc4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbkJ5SWRWYXJp
YW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTU3LDcgKzU3LDggQEAgcHVibGljOgogCiAgICAgYm9v
bCBhdHRlbXB0VG9NZXJnZShjb25zdCBJbkJ5SWRWYXJpYW50JiBvdGhlcik7CiAgICAgCi0gICAg
dm9pZCBtYXJrSWZDaGVhcChTbG90VmlzaXRvciYpOworLy8gICAgdGVtcGxhdGU8dHlwZW5hbWUg
VmlzaXRvcj4gdm9pZCBtYXJrSWZDaGVhcChWaXNpdG9yJik7CisgICAgdm9pZCBtYXJrSWZDaGVh
cDEoQWJzdHJhY3RTbG90VmlzaXRvciYpOwogICAgIGJvb2wgZmluYWxpemUoVk0mKTsKIAogICAg
IHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0ludGVybmFsRnVuY3Rpb25BbGxvY2F0aW9uUHJvZmlsZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnRlcm5hbEZ1bmN0aW9uQWxs
b2NhdGlvblByb2ZpbGUuaAkocmV2aXNpb24gMjcxNzg2KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0ludGVybmFsRnVuY3Rpb25BbGxvY2F0aW9uUHJvZmlsZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zOSw3ICszOSw3IEBAIHB1YmxpYzoKICAgICBTdHJ1Y3R1cmUqIGNyZWF0ZUFs
bG9jYXRpb25TdHJ1Y3R1cmVGcm9tQmFzZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNDZWxsKiBv
d25lciwgSlNPYmplY3QqIHByb3RvdHlwZSwgU3RydWN0dXJlKiBiYXNlKTsKIAogICAgIHZvaWQg
Y2xlYXIoKSB7IG1fc3RydWN0dXJlLmNsZWFyKCk7IH0KLSAgICB2b2lkIHZpc2l0QWdncmVnYXRl
KFNsb3RWaXNpdG9yJiB2aXNpdG9yKSB7IHZpc2l0b3IuYXBwZW5kKG1fc3RydWN0dXJlKTsgfQor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgdmlzaXRBZ2dyZWdhdGUoVmlzaXRv
ciYgdmlzaXRvcikgeyB2aXNpdG9yLmFwcGVuZChtX3N0cnVjdHVyZSk7IH0KIAogcHJpdmF0ZToK
ICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX3N0cnVjdHVyZTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PYmplY3RBbGxvY2F0aW9uUHJvZmlsZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PYmplY3RBbGxvY2F0aW9uUHJv
ZmlsZS5oCShyZXZpc2lvbiAyNzE3ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUuaAkod29ya2luZyBjb3B5KQpAQCAtNjQsNyArNjQs
OCBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIEFTU0VSVChpc051bGwoKSk7CiAgICAgfQogCi0gICAg
dm9pZCB2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYgdmlzaXRvcikKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBWaXNpdG9yPgorICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoVmlzaXRvciYgdmlzaXRv
cikKICAgICB7CiAgICAgICAgIHZpc2l0b3IuYXBwZW5kKG1fc3RydWN0dXJlKTsKICAgICB9CkBA
IC0xMTAsNyArMTExLDggQEAgcHVibGljOgogICAgICAgICBBU1NFUlQoaXNOdWxsKCkpOwogICAg
IH0KIAotICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisgICAg
dGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KKyAgICB2b2lkIHZpc2l0QWdncmVnYXRlKFZpc2l0
b3ImIHZpc2l0b3IpCiAgICAgewogICAgICAgICBCYXNlOjp2aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9y
KTsKICAgICAgICAgdmlzaXRvci5hcHBlbmQobV9wcm90b3R5cGUpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwCShy
ZXZpc2lvbiAyNzE3ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1v
cnBoaWNBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNTgsNyArMzU4LDkgQEAgYm9vbCBQ
b2x5bW9ycGhpY0FjY2Vzczo6dmlzaXRXZWFrKFZNJiB2bQogICAgIHJldHVybiB0cnVlOwogfQog
Ci1ib29sIFBvbHltb3JwaGljQWNjZXNzOjpwcm9wYWdhdGVUcmFuc2l0aW9ucyhTbG90VmlzaXRv
ciYgdmlzaXRvcikgY29uc3QKKy8vdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KKy8vYm9vbCBQ
b2x5bW9ycGhpY0FjY2Vzczo6cHJvcGFnYXRlVHJhbnNpdGlvbnMxMChWaXNpdG9yJiB2aXNpdG9y
KSBjb25zdAorYm9vbCBQb2x5bW9ycGhpY0FjY2Vzczo6cHJvcGFnYXRlVHJhbnNpdGlvbnMxMChB
YnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBjb25zdAogewogICAgIGJvb2wgcmVzdWx0ID0g
dHJ1ZTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZSgpOyArK2kpCkBAIC0zNjYs
MTIgKzM2OCwyMSBAQCBib29sIFBvbHltb3JwaGljQWNjZXNzOjpwcm9wYWdhdGVUcmFuc2l0CiAg
ICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotdm9pZCBQb2x5bW9ycGhpY0FjY2Vzczo6dmlzaXRBZ2dy
ZWdhdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3RlbXBsYXRlPD4gYm9vbCBQb2x5bW9ycGhp
Y0FjY2Vzczo6cHJvcGFnYXRlVHJhbnNpdGlvbnMxMChTbG90VmlzaXRvciYpIGNvbnN0OworLy90
ZW1wbGF0ZTw+IGJvb2wgUG9seW1vcnBoaWNBY2Nlc3M6OnByb3BhZ2F0ZVRyYW5zaXRpb25zMTAo
QWJzdHJhY3RTbG90VmlzaXRvciYpIGNvbnN0OworCisKKy8vdGVtcGxhdGU8dHlwZW5hbWUgVmlz
aXRvcj4KKy8vdm9pZCBQb2x5bW9ycGhpY0FjY2Vzczo6dmlzaXRBZ2dyZWdhdGUoVmlzaXRvciYg
dmlzaXRvcikKK3ZvaWQgUG9seW1vcnBoaWNBY2Nlc3M6OnZpc2l0QWdncmVnYXRlMShBYnN0cmFj
dFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBz
aXplKCk7ICsraSkKLSAgICAgICAgYXQoaSkudmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7CisgICAg
ICAgIGF0KGkpLnZpc2l0QWdncmVnYXRlMSh2aXNpdG9yKTsKIH0KIAorLy90ZW1wbGF0ZSB2b2lk
IFBvbHltb3JwaGljQWNjZXNzOjp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYpOworLy90ZW1w
bGF0ZSB2b2lkIFBvbHltb3JwaGljQWNjZXNzOjp2aXNpdEFnZ3JlZ2F0ZShWZXJpZmllclNsb3RW
aXNpdG9yJik7CisKIHZvaWQgUG9seW1vcnBoaWNBY2Nlc3M6OmR1bXAoUHJpbnRTdHJlYW0mIG91
dCkgY29uc3QKIHsKICAgICBvdXQucHJpbnQoUmF3UG9pbnRlcih0aGlzKSwgIjpbIik7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nl
c3MuaAkocmV2aXNpb24gMjcxNzg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1BvbHltb3JwaGljQWNjZXNzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE1MiwxNCArMTUyLDE2IEBA
IHB1YmxpYzoKICAgICBjb25zdCBBY2Nlc3NDYXNlJiBhdCh1bnNpZ25lZCBpKSBjb25zdCB7IHJl
dHVybiAqbV9saXN0W2ldOyB9CiAgICAgY29uc3QgQWNjZXNzQ2FzZSYgb3BlcmF0b3JbXSh1bnNp
Z25lZCBpKSBjb25zdCB7IHJldHVybiAqbV9saXN0W2ldOyB9CiAKLSAgICB2b2lkIHZpc2l0QWdn
cmVnYXRlKFNsb3RWaXNpdG9yJik7CisvLyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2
b2lkIHZpc2l0QWdncmVnYXRlKFZpc2l0b3ImKTsKKyAgICB2b2lkIHZpc2l0QWdncmVnYXRlMShB
YnN0cmFjdFNsb3RWaXNpdG9yJik7CiAKICAgICAvLyBJZiB0aGlzIHJldHVybnMgZmFsc2UgdGhl
biB3ZSBhcmUgcmVxdWVzdGluZyBhIHJlc2V0IG9mIHRoZSBvd25pbmcgU3RydWN0dXJlU3R1Yklu
Zm8uCiAgICAgYm9vbCB2aXNpdFdlYWsoVk0mKSBjb25zdDsKICAgICAKICAgICAvLyBUaGlzIHJl
dHVybnMgdHJ1ZSBpZiBpdCBoYXMgbWFya2VkIGV2ZXJ5dGhpbmcgaXQgd2lsbCBldmVyIG1hcmtl
ZC4gVGhpcyBjYW4gYmUgdXNlZCBhcyBhbgogICAgIC8vIG9wdGltaXphdGlvbiB0byB0aGVuIGF2
b2lkIGNhbGxpbmcgdGhpcyBtZXRob2QgYWdhaW4gZHVyaW5nIHRoZSBmaXhwb2ludC4KLSAgICBi
b29sIHByb3BhZ2F0ZVRyYW5zaXRpb25zKFNsb3RWaXNpdG9yJikgY29uc3Q7CisvLyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiBib29sIHByb3BhZ2F0ZVRyYW5zaXRpb25zMTAoVmlzaXRv
ciYpIGNvbnN0OworICAgIGJvb2wgcHJvcGFnYXRlVHJhbnNpdGlvbnMxMChBYnN0cmFjdFNsb3RW
aXNpdG9yJikgY29uc3Q7CiAKICAgICB2b2lkIGFib3V0VG9EaWUoKTsKIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmNwcAkocmV2aXNp
b24gMjcxNzg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0
dXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOTYsMTIgKzM5NiwxNyBAQCBQdXRCeUlkU3RhdHVz
IFB1dEJ5SWRTdGF0dXM6OnNsb3dWZXJzaW9uCiAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMobWFr
ZXNDYWxscygpID8gTWFrZXNDYWxscyA6IFRha2VzU2xvd1BhdGgpOwogfQogCi12b2lkIFB1dEJ5
SWRTdGF0dXM6Om1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy90ZW1wbGF0ZTx0
eXBlbmFtZSBWaXNpdG9yPgorLy92b2lkIFB1dEJ5SWRTdGF0dXM6Om1hcmtJZkNoZWFwKFZpc2l0
b3ImIHZpc2l0b3IpCit2b2lkIFB1dEJ5SWRTdGF0dXM6Om1hcmtJZkNoZWFwMShBYnN0cmFjdFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGZvciAoUHV0QnlJZFZhcmlhbnQmIHZhcmlhbnQg
OiBtX3ZhcmlhbnRzKQotICAgICAgICB2YXJpYW50Lm1hcmtJZkNoZWFwKHZpc2l0b3IpOworICAg
ICAgICB2YXJpYW50Lm1hcmtJZkNoZWFwMSh2aXNpdG9yKTsKIH0KIAorLy90ZW1wbGF0ZSB2b2lk
IFB1dEJ5SWRTdGF0dXM6Om1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJik7CisvL3RlbXBsYXRlIHZv
aWQgUHV0QnlJZFN0YXR1czo6bWFya0lmQ2hlYXAoVmVyaWZpZXJTbG90VmlzaXRvciYpOworCiBi
b29sIFB1dEJ5SWRTdGF0dXM6OmZpbmFsaXplKFZNJiB2bSkKIHsKICAgICBmb3IgKFB1dEJ5SWRW
YXJpYW50JiB2YXJpYW50IDogbV92YXJpYW50cykgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5oCShyZXZpc2lvbiAyNzE3ODYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xMTcsNyArMTE3LDggQEAgcHVibGljOgogICAgIGNvbnN0IFB1dEJ5SWRWYXJpYW50
JiBhdChzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fdmFyaWFudHNbaW5kZXhdOyB9CiAg
ICAgY29uc3QgUHV0QnlJZFZhcmlhbnQmIG9wZXJhdG9yW10oc2l6ZV90IGluZGV4KSBjb25zdCB7
IHJldHVybiBhdChpbmRleCk7IH0KICAgICAKLSAgICB2b2lkIG1hcmtJZkNoZWFwKFNsb3RWaXNp
dG9yJik7CisvLyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIG1hcmtJZkNoZWFw
KFZpc2l0b3ImKTsKKyAgICB2b2lkIG1hcmtJZkNoZWFwMShBYnN0cmFjdFNsb3RWaXNpdG9yJik7
CiAgICAgYm9vbCBmaW5hbGl6ZShWTSYpOwogICAgIAogICAgIHZvaWQgbWVyZ2UoY29uc3QgUHV0
QnlJZFN0YXR1cyYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5
SWRWYXJpYW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvUHV0QnlJZFZhcmlhbnQuY3BwCShyZXZpc2lvbiAyNzE3ODYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
NjIsMTMgKzI2MiwxOCBAQCBib29sIFB1dEJ5SWRWYXJpYW50OjphdHRlbXB0VG9NZXJnZVRyYW5z
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgUHV0QnlJZFZhcmlhbnQ6Om1hcmtJZkNoZWFw
KFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy90ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgorLy92
b2lkIFB1dEJ5SWRWYXJpYW50OjptYXJrSWZDaGVhcChWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBQ
dXRCeUlkVmFyaWFudDo6bWFya0lmQ2hlYXAxKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3Ip
CiB7Ci0gICAgbV9vbGRTdHJ1Y3R1cmUubWFya0lmQ2hlYXAodmlzaXRvcik7CisgICAgbV9vbGRT
dHJ1Y3R1cmUubWFya0lmQ2hlYXAxKHZpc2l0b3IpOwogICAgIGlmIChtX25ld1N0cnVjdHVyZSkK
LSAgICAgICAgbV9uZXdTdHJ1Y3R1cmUtPm1hcmtJZkNoZWFwKHZpc2l0b3IpOworICAgICAgICBt
X25ld1N0cnVjdHVyZS0+bWFya0lmQ2hlYXAxKHZpc2l0b3IpOwogfQogCisvL3RlbXBsYXRlIHZv
aWQgUHV0QnlJZFZhcmlhbnQ6Om1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJik7CisvL3RlbXBsYXRl
IHZvaWQgUHV0QnlJZFZhcmlhbnQ6Om1hcmtJZkNoZWFwKFZlcmlmaWVyU2xvdFZpc2l0b3ImKTsK
KwogYm9vbCBQdXRCeUlkVmFyaWFudDo6ZmluYWxpemUoVk0mIHZtKQogewogICAgIGlmICghbV9v
bGRTdHJ1Y3R1cmUuaXNTdGlsbEFsaXZlKHZtKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9QdXRCeUlkVmFyaWFudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkVmFyaWFudC5oCShyZXZpc2lvbiAyNzE3ODYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuaAkod29ya2luZyBj
b3B5KQpAQCAtMTMyLDcgKzEzMiw4IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgYXR0ZW1wdFRvTWVy
Z2UoY29uc3QgUHV0QnlJZFZhcmlhbnQmIG90aGVyKTsKICAgICAKLSAgICB2b2lkIG1hcmtJZkNo
ZWFwKFNsb3RWaXNpdG9yJik7CisvLyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lk
IG1hcmtJZkNoZWFwKFZpc2l0b3ImKTsKKyAgICB2b2lkIG1hcmtJZkNoZWFwMShBYnN0cmFjdFNs
b3RWaXNpdG9yJik7CiAgICAgYm9vbCBmaW5hbGl6ZShWTSYpOwogICAgIAogICAgIHZvaWQgZHVt
cChQcmludFN0cmVhbSYpIGNvbnN0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1JlY29yZGVkU3RhdHVzZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9SZWNvcmRlZFN0YXR1c2VzLmNwcAkocmV2aXNpb24gMjcxNzg2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1JlY29yZGVkU3RhdHVzZXMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC04NCwyNiArODQsMzYgQEAgRGVsZXRlQnlTdGF0dXMqIFJlY29yZGVkU3Rh
dHVzZXM6OmFkZERlbAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQgUmVjb3JkZWRTdGF0
dXNlczo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yKQorLy90ZW1wbGF0
ZTx0eXBlbmFtZSBWaXNpdG9yPgorLy92b2lkIFJlY29yZGVkU3RhdHVzZXM6OnZpc2l0QWdncmVn
YXRlKFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIFJlY29yZGVkU3RhdHVzZXM6OnZpc2l0QWdncmVn
YXRlMShBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGZvciAoYXV0byYgcGFp
ciA6IGdldHMpCi0gICAgICAgIHBhaXIuc2Vjb25kLT52aXNpdEFnZ3JlZ2F0ZShzbG90VmlzaXRv
cik7CisgICAgICAgIHBhaXIuc2Vjb25kLT52aXNpdEFnZ3JlZ2F0ZTEodmlzaXRvcik7CiAgICAg
Zm9yIChhdXRvJiBwYWlyIDogZGVsZXRlcykKLSAgICAgICAgcGFpci5zZWNvbmQtPnZpc2l0QWdn
cmVnYXRlKHNsb3RWaXNpdG9yKTsKKyAgICAgICAgcGFpci5zZWNvbmQtPnZpc2l0QWdncmVnYXRl
MSh2aXNpdG9yKTsKIH0KIAotdm9pZCBSZWNvcmRlZFN0YXR1c2VzOjptYXJrSWZDaGVhcChTbG90
VmlzaXRvciYgc2xvdFZpc2l0b3IpCisvL3RlbXBsYXRlIHZvaWQgUmVjb3JkZWRTdGF0dXNlczo6
dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImKTsKKy8vdGVtcGxhdGUgdm9pZCBSZWNvcmRlZFN0
YXR1c2VzOjp2aXNpdEFnZ3JlZ2F0ZShWZXJpZmllclNsb3RWaXNpdG9yJik7CisKKy8vdGVtcGxh
dGU8dHlwZW5hbWUgVmlzaXRvcj4KKy8vdm9pZCBSZWNvcmRlZFN0YXR1c2VzOjptYXJrSWZDaGVh
cChWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBSZWNvcmRlZFN0YXR1c2VzOjptYXJrSWZDaGVhcDEo
QWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBmb3IgKGF1dG8mIHBhaXIgOiBn
ZXRzKQotICAgICAgICBwYWlyLnNlY29uZC0+bWFya0lmQ2hlYXAoc2xvdFZpc2l0b3IpOworICAg
ICAgICBwYWlyLnNlY29uZC0+bWFya0lmQ2hlYXAxKHZpc2l0b3IpOwogICAgIGZvciAoYXV0byYg
cGFpciA6IHB1dHMpCi0gICAgICAgIHBhaXIuc2Vjb25kLT5tYXJrSWZDaGVhcChzbG90VmlzaXRv
cik7CisgICAgICAgIHBhaXIuc2Vjb25kLT5tYXJrSWZDaGVhcDEodmlzaXRvcik7CiAgICAgZm9y
IChhdXRvJiBwYWlyIDogaW5zKQotICAgICAgICBwYWlyLnNlY29uZC0+bWFya0lmQ2hlYXAoc2xv
dFZpc2l0b3IpOworICAgICAgICBwYWlyLnNlY29uZC0+bWFya0lmQ2hlYXAxKHZpc2l0b3IpOwog
ICAgIGZvciAoYXV0byYgcGFpciA6IGRlbGV0ZXMpCi0gICAgICAgIHBhaXIuc2Vjb25kLT5tYXJr
SWZDaGVhcChzbG90VmlzaXRvcik7CisgICAgICAgIHBhaXIuc2Vjb25kLT5tYXJrSWZDaGVhcDEo
dmlzaXRvcik7CiB9CiAKKy8vdGVtcGxhdGUgdm9pZCBSZWNvcmRlZFN0YXR1c2VzOjptYXJrSWZD
aGVhcChTbG90VmlzaXRvciYpOworLy90ZW1wbGF0ZSB2b2lkIFJlY29yZGVkU3RhdHVzZXM6Om1h
cmtJZkNoZWFwKFZlcmlmaWVyU2xvdFZpc2l0b3ImKTsKKwogdm9pZCBSZWNvcmRlZFN0YXR1c2Vz
OjpmaW5hbGl6ZVdpdGhvdXREZWxldGluZyhWTSYgdm0pCiB7CiAgICAgLy8gVGhpcyB2YXJpYW50
IG9mIGZpbmFsaXplIGdldHMgY2FsbGVkIGZyb20gd2l0aGluIGdyYXBoIHNhZmVwb2ludHMgLS0g
c28gdGhlcmUgbWF5IGJlIERGRyBJUiBpbgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1JlY29yZGVkU3RhdHVzZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvUmVjb3JkZWRTdGF0dXNlcy5oCShyZXZpc2lvbiAyNzE3ODYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUmVjb3JkZWRTdGF0dXNlcy5oCSh3b3JraW5n
IGNvcHkpCkBAIC01MCw4ICs1MCwxMCBAQCBzdHJ1Y3QgUmVjb3JkZWRTdGF0dXNlcyB7CiAgICAg
SW5CeUlkU3RhdHVzKiBhZGRJbkJ5SWRTdGF0dXMoY29uc3QgQ29kZU9yaWdpbiYsIGNvbnN0IElu
QnlJZFN0YXR1cyYpOwogICAgIERlbGV0ZUJ5U3RhdHVzKiBhZGREZWxldGVCeVN0YXR1cyhjb25z
dCBDb2RlT3JpZ2luJiwgY29uc3QgRGVsZXRlQnlTdGF0dXMmKTsKICAgICAKLSAgICB2b2lkIHZp
c2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJik7Ci0gICAgdm9pZCBtYXJrSWZDaGVhcChTbG90Vmlz
aXRvciYpOworLy8gICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCB2aXNpdEFnZ3Jl
Z2F0ZShWaXNpdG9yJik7CisvLyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIG1h
cmtJZkNoZWFwKFZpc2l0b3ImKTsKKyAgICB2b2lkIHZpc2l0QWdncmVnYXRlMShBYnN0cmFjdFNs
b3RWaXNpdG9yJik7CisgICAgdm9pZCBtYXJrSWZDaGVhcDEoQWJzdHJhY3RTbG90VmlzaXRvciYp
OwogICAgIAogICAgIHZvaWQgZmluYWxpemVXaXRob3V0RGVsZXRpbmcoVk0mKTsKICAgICB2b2lk
IGZpbmFsaXplKFZNJik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3Ry
dWN0dXJlU2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvU3RydWN0dXJlU2V0LmNwcAkocmV2aXNpb24gMjcxNzg2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVNldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDEy
ICszMSwxNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotdm9pZCBTdHJ1Y3R1cmVTZXQ6Om1hcmtJ
ZkNoZWFwKFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBjb25zdAorLy90ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPgorLy92b2lkIFN0cnVjdHVyZVNldDo6bWFya0lmQ2hlYXAoVmlzaXRvciYgdmlzaXRv
cikgY29uc3QKK3ZvaWQgU3RydWN0dXJlU2V0OjptYXJrSWZDaGVhcDEoQWJzdHJhY3RTbG90Vmlz
aXRvciYgdmlzaXRvcikgY29uc3QKIHsKICAgICBmb3IgKFN0cnVjdHVyZSogc3RydWN0dXJlIDog
KnRoaXMpCi0gICAgICAgIHN0cnVjdHVyZS0+bWFya0lmQ2hlYXAodmlzaXRvcik7CisgICAgICAg
IHN0cnVjdHVyZS0+bWFya0lmQ2hlYXAxKHZpc2l0b3IpOwogfQogCisvL3RlbXBsYXRlIHZvaWQg
U3RydWN0dXJlU2V0OjptYXJrSWZDaGVhcChTbG90VmlzaXRvciYpIGNvbnN0OworLy90ZW1wbGF0
ZSB2b2lkIFN0cnVjdHVyZVNldDo6bWFya0lmQ2hlYXAoVmVyaWZpZXJTbG90VmlzaXRvciYpIGNv
bnN0OworCiBib29sIFN0cnVjdHVyZVNldDo6aXNTdGlsbEFsaXZlKFZNJiB2bSkgY29uc3QKIHsK
ICAgICBmb3IgKFN0cnVjdHVyZSogc3RydWN0dXJlIDogKnRoaXMpIHsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTZXQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU2V0LmgJKHJldmlzaW9uIDI3MTc4
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTZXQuaAkod29y
a2luZyBjb3B5KQpAQCAtNTQsNyArNTQsOCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBvbmx5
RW50cnkoKTsKICAgICB9CiAKLSAgICB2b2lkIG1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJikgY29u
c3Q7CisvLyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIG1hcmtJZkNoZWFwKFZp
c2l0b3ImKSBjb25zdDsKKyAgICB2b2lkIG1hcmtJZkNoZWFwMShBYnN0cmFjdFNsb3RWaXNpdG9y
JikgY29uc3Q7CiAgICAgYm9vbCBpc1N0aWxsQWxpdmUoVk0mKSBjb25zdDsKICAgICAKICAgICB2
b2lkIGR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mLCBEdW1wQ29udGV4dCopIGNvbnN0OwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1
YkluZm8uY3BwCShyZXZpc2lvbiAyNzE3ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOTAsMTIgKzI5
MCwxNCBAQCB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjpyZXNldChjb25zdCBDb25jCiAgICAgc2V0
Q2FjaGVUeXBlKGxvY2tlciwgQ2FjaGVUeXBlOjpVbnNldCk7CiB9CiAKLXZvaWQgU3RydWN0dXJl
U3R1YkluZm86OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy90ZW1wbGF0
ZTx0eXBlbmFtZSBWaXNpdG9yPgorLy92b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjp2aXNpdEFnZ3Jl
Z2F0ZShWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6dmlzaXRBZ2dy
ZWdhdGUxKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgewogICAgICAgICBh
dXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fYnVmZmVyZWRTdHJ1Y3R1cmVzTG9jayk7CiAgICAgICAg
IGZvciAoYXV0byYgYnVmZmVyZWRTdHJ1Y3R1cmUgOiBtX2J1ZmZlcmVkU3RydWN0dXJlcykKLSAg
ICAgICAgICAgIGJ1ZmZlcmVkU3RydWN0dXJlLmJ5VmFsSWQoKS52aXNpdEFnZ3JlZ2F0ZSh2aXNp
dG9yKTsKKyAgICAgICAgICAgIGJ1ZmZlcmVkU3RydWN0dXJlLmJ5VmFsSWQoKS52aXNpdEFnZ3Jl
Z2F0ZTEodmlzaXRvcik7CiAgICAgfQogICAgIHN3aXRjaCAobV9jYWNoZVR5cGUpIHsKICAgICBj
YXNlIENhY2hlVHlwZTo6VW5zZXQ6CkBAIC0zMDUsMTAgKzMwNywxMCBAQCB2b2lkIFN0cnVjdHVy
ZVN0dWJJbmZvOjp2aXNpdEFnZ3JlZ2F0ZShTCiAgICAgY2FzZSBDYWNoZVR5cGU6OlB1dEJ5SWRS
ZXBsYWNlOgogICAgIGNhc2UgQ2FjaGVUeXBlOjpJbkJ5SWRTZWxmOgogICAgIGNhc2UgQ2FjaGVU
eXBlOjpHZXRCeUlkU2VsZjoKLSAgICAgICAgbV9pZGVudGlmaWVyLnZpc2l0QWdncmVnYXRlKHZp
c2l0b3IpOworICAgICAgICBtX2lkZW50aWZpZXIudmlzaXRBZ2dyZWdhdGUxKHZpc2l0b3IpOwog
ICAgICAgICByZXR1cm47CiAgICAgY2FzZSBDYWNoZVR5cGU6OlN0dWI6Ci0gICAgICAgIHUuc3R1
Yi0+dmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7CisgICAgICAgIHUuc3R1Yi0+dmlzaXRBZ2dyZWdh
dGUxKHZpc2l0b3IpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIApAQCAtMzE2LDYgKzMx
OCw5IEBAIHZvaWQgU3RydWN0dXJlU3R1YkluZm86OnZpc2l0QWdncmVnYXRlKFMKICAgICByZXR1
cm47CiB9CiAKKy8vdGVtcGxhdGUgdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6dmlzaXRBZ2dyZWdh
dGUoU2xvdFZpc2l0b3ImKTsKKy8vdGVtcGxhdGUgdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6dmlz
aXRBZ2dyZWdhdGUoVmVyaWZpZXJTbG90VmlzaXRvciYpOworCiB2b2lkIFN0cnVjdHVyZVN0dWJJ
bmZvOjp2aXNpdFdlYWtSZWZlcmVuY2VzKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlckJhc2UmIGxv
Y2tlciwgQ29kZUJsb2NrKiBjb2RlQmxvY2spCiB7CiAgICAgVk0mIHZtID0gY29kZUJsb2NrLT52
bSgpOwpAQCAtMzQ2LDI0ICszNTEsMzEgQEAgdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6dmlzaXRX
ZWFrUmVmZXJlbgogICAgIHJlc2V0QnlHQyA9IHRydWU7CiB9CiAKLWJvb2wgU3RydWN0dXJlU3R1
YkluZm86OnByb3BhZ2F0ZVRyYW5zaXRpb25zKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQotewotICAg
IHN3aXRjaCAobV9jYWNoZVR5cGUpIHsKLSAgICBjYXNlIENhY2hlVHlwZTo6VW5zZXQ6Ci0gICAg
Y2FzZSBDYWNoZVR5cGU6OkFycmF5TGVuZ3RoOgotICAgIGNhc2UgQ2FjaGVUeXBlOjpTdHJpbmdM
ZW5ndGg6Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIGNhc2UgQ2FjaGVUeXBlOjpHZXRCeUlk
U2VsZjoKLSAgICBjYXNlIENhY2hlVHlwZTo6UHV0QnlJZFJlcGxhY2U6Ci0gICAgY2FzZSBDYWNo
ZVR5cGU6OkluQnlJZFNlbGY6Ci0gICAgICAgIHJldHVybiB1LmJ5SWRTZWxmLmJhc2VPYmplY3RT
dHJ1Y3R1cmUtPm1hcmtJZkNoZWFwKHZpc2l0b3IpOwotICAgIGNhc2UgQ2FjaGVUeXBlOjpTdHVi
OgotICAgICAgICByZXR1cm4gdS5zdHViLT5wcm9wYWdhdGVUcmFuc2l0aW9ucyh2aXNpdG9yKTsK
LSAgICB9Ci0gICAgCi0gICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1
cm4gdHJ1ZTsKLX0KKy8vdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KKy8vYm9vbCBTdHJ1Y3R1
cmVTdHViSW5mbzo6cHJvcGFnYXRlVHJhbnNpdGlvbnMxKFZpc2l0b3ImIHZpc2l0b3IpCisvL3sK
Ky8vICAgIHN3aXRjaCAobV9jYWNoZVR5cGUpIHsKKy8vICAgIGNhc2UgQ2FjaGVUeXBlOjpVbnNl
dDoKKy8vICAgIGNhc2UgQ2FjaGVUeXBlOjpBcnJheUxlbmd0aDoKKy8vICAgIGNhc2UgQ2FjaGVU
eXBlOjpTdHJpbmdMZW5ndGg6CisvLyAgICAgICAgcmV0dXJuIHRydWU7CisvLyAgICBjYXNlIENh
Y2hlVHlwZTo6R2V0QnlJZFNlbGY6CisvLyAgICBjYXNlIENhY2hlVHlwZTo6UHV0QnlJZFJlcGxh
Y2U6CisvLyAgICBjYXNlIENhY2hlVHlwZTo6SW5CeUlkU2VsZjoKKy8vICAgICAgICByZXR1cm4g
dS5ieUlkU2VsZi5iYXNlT2JqZWN0U3RydWN0dXJlLT5tYXJrSWZDaGVhcDEodmlzaXRvcik7Cisv
LyAgICAgICAgcmV0dXJuIGZhbHNlOworLy8gICAgY2FzZSBDYWNoZVR5cGU6OlN0dWI6CisvLyAg
ICAgICAgcmV0dXJuIHUuc3R1Yi0+cHJvcGFnYXRlVHJhbnNpdGlvbnMxMCh2aXNpdG9yKTsKKy8v
ICAgICAgICByZXR1cm4gZmFsc2U7CisvLyAgICB9CisvLworLy8vLyAgICBVTlVTRURfUEFSQU0o
dmlzaXRvcik7IC8vIG1sYW0gVEVTVAorLy8gICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKy8vICAgIHJldHVybiB0cnVlOworLy99CisvLworLy90ZW1wbGF0ZTw+IGJvb2wgU3RydWN0
dXJlU3R1YkluZm86OnByb3BhZ2F0ZVRyYW5zaXRpb25zMShTbG90VmlzaXRvciYpOworLy90ZW1w
bGF0ZTw+IGJvb2wgU3RydWN0dXJlU3R1YkluZm86OnByb3BhZ2F0ZVRyYW5zaXRpb25zMShBYnN0
cmFjdFNsb3RWaXNpdG9yJik7CiAKIFN0dWJJbmZvU3VtbWFyeSBTdHJ1Y3R1cmVTdHViSW5mbzo6
c3VtbWFyeShWTSYgdm0pIGNvbnN0CiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaAkocmV2aXNpb24gMjcxNzg2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgJKHdvcmtp
bmcgY29weSkKQEAgLTkxLDE0ICs5MSwxNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBkZXJlZigpOwog
ICAgIHZvaWQgYWJvdXRUb0RpZSgpOwogCi0gICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShTbG90Vmlz
aXRvciYpOworLy8gICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCB2aXNpdEFnZ3Jl
Z2F0ZShWaXNpdG9yJik7CisgICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZTEoQWJzdHJhY3RTbG90Vmlz
aXRvciYpOwogCiAgICAgLy8gQ2hlY2sgaWYgdGhlIHN0dWIgaGFzIHdlYWsgcmVmZXJlbmNlcyB0
aGF0IGFyZSBkZWFkLiBJZiBpdCBkb2VzLCB0aGVuIGl0IHJlc2V0cyBpdHNlbGYsCiAgICAgLy8g
ZWl0aGVyIGVudGlyZWx5IG9yIGp1c3QgZW5vdWdoIHRvIGVuc3VyZSB0aGF0IHRob3NlIGRlYWQg
cG9pbnRlcnMgZG9uJ3QgZ2V0IHVzZWQgYW55bW9yZS4KICAgICB2b2lkIHZpc2l0V2Vha1JlZmVy
ZW5jZXMoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyQmFzZSYsIENvZGVCbG9jayopOwogICAgIAog
ICAgIC8vIFRoaXMgcmV0dXJucyB0cnVlIGlmIGl0IGhhcyBtYXJrZWQgZXZlcnl0aGluZyB0aGF0
IGl0IHdpbGwgZXZlciBtYXJrLgotICAgIGJvb2wgcHJvcGFnYXRlVHJhbnNpdGlvbnMoU2xvdFZp
c2l0b3ImKTsKKy8vICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IGJvb2wgcHJvcGFnYXRl
VHJhbnNpdGlvbnMxKFZpc2l0b3ImKTsKKyAgICBib29sIHByb3BhZ2F0ZVRyYW5zaXRpb25zMShB
YnN0cmFjdFNsb3RWaXNpdG9yJik7CiAgICAgICAgIAogICAgIFN0dWJJbmZvU3VtbWFyeSBzdW1t
YXJ5KFZNJikgY29uc3Q7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAJKHJldmlzaW9uIDI3MTc4NikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIw
MTkgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEy
LTIwMjAgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC03MSw3ICs3MSw4IEBAIFVubGlua2VkQ29kZUJsb2NrOjpVbmxpbmtl
ZENvZGVCbG9jayhWTSYKICAgICB9CiB9CiAKLXZvaWQgVW5saW5rZWRDb2RlQmxvY2s6OnZpc2l0
Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5
cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFVubGlua2VkQ29kZUJsb2NrOjp2aXNpdENoaWxkcmVuSW1w
bChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgVW5saW5rZWRDb2RlQmxv
Y2sqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8VW5saW5rZWRDb2RlQmxvY2sqPihjZWxsKTsKICAgICBB
U1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC05MCw2ICs5
MSw4IEBAIHZvaWQgVW5saW5rZWRDb2RlQmxvY2s6OnZpc2l0Q2hpbGRyZW4oSlMKICAgICB2aXNp
dG9yLnJlcG9ydEV4dHJhTWVtb3J5VmlzaXRlZChleHRyYU1lbW9yeSk7CiB9CiAKK0RFRklORV9W
SVNJVF9DSElMRFJFTihVbmxpbmtlZENvZGVCbG9jayk7CisKIHNpemVfdCBVbmxpbmtlZENvZGVC
bG9jazo6ZXN0aW1hdGVkU2l6ZShKU0NlbGwqIGNlbGwsIFZNJiB2bSkKIHsKICAgICBVbmxpbmtl
ZENvZGVCbG9jayogdGhpc09iamVjdCA9IGpzQ2FzdDxVbmxpbmtlZENvZGVCbG9jayo+KGNlbGwp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2Nr
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2Vk
Q29kZUJsb2NrLmgJKHJldmlzaW9uIDI3MTc4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE5IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBS
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDIwIEFwcGxlIEluYy4gQWxsIFJpZ2h0
cyBSZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDIzLDcgKzQy
Myw3IEBAIHByaXZhdGU6CiAgICAgUmVmQ291bnRlZEFycmF5PEV4cHJlc3Npb25SYW5nZUluZm8+
IG1fZXhwcmVzc2lvbkluZm87CiAKIHByb3RlY3RlZDoKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENo
aWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJF
TjsKICAgICBzdGF0aWMgc2l6ZV90IGVzdGltYXRlZFNpemUoSlNDZWxsKiwgVk0mKTsKIAogcHVi
bGljOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkRnVuY3Rp
b25FeGVjdXRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUuY3BwCShyZXZpc2lvbiAyNzE3ODYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFi
bGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMi0yMDE5IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMi0yMDIwIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTQxLDcgKzE0MSw4IEBAIHZvaWQgVW5saW5rZWRG
dW5jdGlvbkV4ZWN1dGFibGU6OmRlc3Ryb3kKICAgICBzdGF0aWNfY2FzdDxVbmxpbmtlZEZ1bmN0
aW9uRXhlY3V0YWJsZSo+KGNlbGwpLT5+VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUoKTsKIH0K
IAotdm9pZCBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwq
IGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4K
K3ZvaWQgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2Vs
bCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0
YWJsZSogdGhpc09iamVjdCA9IGpzQ2FzdDxVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGNl
bGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsK
QEAgLTE2NCw2ICsxNjUsOCBAQCB2b2lkIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlOjp2aXNp
dENoCiAgICAgfQogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oVW5saW5rZWRGdW5jdGlvbkV4
ZWN1dGFibGUpOworCiBTb3VyY2VDb2RlIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlOjpsaW5r
ZWRTb3VyY2VDb2RlKGNvbnN0IFNvdXJjZUNvZGUmIHBhc3NlZFBhcmVudFNvdXJjZSkgY29uc3QK
IHsKICAgICBjb25zdCBTb3VyY2VDb2RlJiBwYXJlbnRTb3VyY2UgPSAhbV9pc0J1aWx0aW5EZWZh
dWx0Q2xhc3NDb25zdHJ1Y3RvciA/IHBhc3NlZFBhcmVudFNvdXJjZSA6IEJ1aWx0aW5FeGVjdXRh
Ymxlczo6ZGVmYXVsdENvbnN0cnVjdG9yU291cmNlQ29kZShjb25zdHJ1Y3RvcktpbmQoKSk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRGdW5jdGlvbkV4ZWN1
dGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5s
aW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUuaAkocmV2aXNpb24gMjcxNzg2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTkg
QXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIw
MjAgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0yMzIsNyArMjMyLDcgQEAgcHJpdmF0ZToKICAgICBVbmxpbmtlZEZ1bmN0
aW9uRXhlY3V0YWJsZShWTSYsIFN0cnVjdHVyZSosIGNvbnN0IFNvdXJjZUNvZGUmLCBGdW5jdGlv
bk1ldGFkYXRhTm9kZSosIFVubGlua2VkRnVuY3Rpb25LaW5kLCBDb25zdHJ1Y3RBYmlsaXR5LCBK
U1BhcnNlclNjcmlwdE1vZGUsIFJlZlB0cjxURFpFbnZpcm9ubWVudExpbms+LCAgSlNDOjpEZXJp
dmVkQ29udGV4dFR5cGUsIEpTQzo6TmVlZHNDbGFzc0ZpZWxkSW5pdGlhbGl6ZXIsIGJvb2wgaXNC
dWlsdGluRGVmYXVsdENsYXNzQ29uc3RydWN0b3IpOwogICAgIFVubGlua2VkRnVuY3Rpb25FeGVj
dXRhYmxlKERlY29kZXImLCBjb25zdCBDYWNoZWRGdW5jdGlvbkV4ZWN1dGFibGUmKTsKIAotICAg
IHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBE
RUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgdm9pZCBkZWNvZGVDYWNoZWRDb2RlQmxvY2tz
KFZNJik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlclNj
b3BlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVi
dWdnZXJTY29wZS5jcHAJKHJldmlzaW9uIDI3MTc4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZWJ1Z2dlci9EZWJ1Z2dlclNjb3BlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU1LDcgKzU1
LDggQEAgdm9pZCBEZWJ1Z2dlclNjb3BlOjpmaW5pc2hDcmVhdGlvbihWTSYgdgogICAgIEJhc2U6
OmZpbmlzaENyZWF0aW9uKHZtKTsKIH0KIAotdm9pZCBEZWJ1Z2dlclNjb3BlOjp2aXNpdENoaWxk
cmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBWaXNpdG9yPgordm9pZCBEZWJ1Z2dlclNjb3BlOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwq
IGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgRGVidWdnZXJTY29wZSogdGhpc09iamVj
dCA9IGpzQ2FzdDxEZWJ1Z2dlclNjb3BlKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9J
TkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNjUsNiArNjYsOCBAQCB2b2lkIERlYnVn
Z2VyU2NvcGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsCiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09i
amVjdC0+bV9uZXh0KTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKERlYnVnZ2VyU2NvcGUp
OworCiBTdHJpbmcgRGVidWdnZXJTY29wZTo6Y2xhc3NOYW1lKGNvbnN0IEpTT2JqZWN0KiBvYmpl
Y3QsIFZNJiB2bSkKIHsKICAgICBjb25zdCBEZWJ1Z2dlclNjb3BlKiBzY29wZSA9IGpzQ2FzdDxj
b25zdCBEZWJ1Z2dlclNjb3BlKj4ob2JqZWN0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZWJ1Z2dlci9EZWJ1Z2dlclNjb3BlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyU2NvcGUuaAkocmV2aXNpb24gMjcxNzg2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyU2NvcGUuaAkod29ya2luZyBjb3B5
KQpAQCAtNDYsNyArNDYsNyBAQCBwdWJsaWM6CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0
aWMgRGVidWdnZXJTY29wZSogY3JlYXRlKFZNJiB2bSwgSlNTY29wZSogc2NvcGUpOwogCi0gICAg
c3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERF
Q0xBUkVfVklTSVRfQ0hJTERSRU47CiAgICAgc3RhdGljIFN0cmluZyBjbGFzc05hbWUoY29uc3Qg
SlNPYmplY3QqLCBWTSYpOwogICAgIHN0YXRpYyBTdHJpbmcgdG9TdHJpbmdOYW1lKGNvbnN0IEpT
T2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqKTsKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0
eVNsb3QoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlT
bG90Jik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRUcmFuc2l0
aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNp
cmVkVHJhbnNpdGlvbnMuY3BwCShyZXZpc2lvbiAyNzE3ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Rlc2lyZWRUcmFuc2l0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUy
LDcgKzUyLDcgQEAgdm9pZCBEZXNpcmVkVHJhbnNpdGlvbjo6cmVhbGx5QWRkKFZNJiB2bQogICAg
ICAgICAgICAgbV9vbGRTdHJ1Y3R1cmUsIG1fbmV3U3RydWN0dXJlKSk7CiB9CiAKLXZvaWQgRGVz
aXJlZFRyYW5zaXRpb246OnZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2b2lk
IERlc2lyZWRUcmFuc2l0aW9uOjp2aXNpdENoaWxkcmVuMihBYnN0cmFjdFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQogewogICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQobV9jb2RlT3JpZ2luT3du
ZXIpOwogICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQobV9vbGRTdHJ1Y3R1cmUpOwpAQCAt
NzgsMTAgKzc4LDEwIEBAIHZvaWQgRGVzaXJlZFRyYW5zaXRpb25zOjpyZWFsbHlBZGQoVk0mIHYK
ICAgICAgICAgbV90cmFuc2l0aW9uc1tpXS5yZWFsbHlBZGQodm0sIGNvbW1vbik7CiB9CiAKLXZv
aWQgRGVzaXJlZFRyYW5zaXRpb25zOjp2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9y
KQordm9pZCBEZXNpcmVkVHJhbnNpdGlvbnM6OnZpc2l0Q2hpbGRyZW4yKEFic3RyYWN0U2xvdFZp
c2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fdHJhbnNp
dGlvbnMuc2l6ZSgpOyBpKyspCi0gICAgICAgIG1fdHJhbnNpdGlvbnNbaV0udmlzaXRDaGlsZHJl
bih2aXNpdG9yKTsKKyAgICAgICAgbV90cmFuc2l0aW9uc1tpXS52aXNpdENoaWxkcmVuMih2aXNp
dG9yKTsKIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkVHJhbnNpdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRUcmFuc2l0aW9ucy5oCShyZXZpc2lvbiAy
NzE3ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRUcmFuc2l0aW9u
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC00Niw4ICs0Niw3IEBAIHB1YmxpYzoKICAgICBEZXNpcmVk
VHJhbnNpdGlvbihDb2RlQmxvY2sqLCBDb2RlQmxvY2sqIGNvZGVPcmlnaW5Pd25lciwgU3RydWN0
dXJlKiwgU3RydWN0dXJlKik7CiAKICAgICB2b2lkIHJlYWxseUFkZChWTSYsIENvbW1vbkRhdGEq
KTsKLSAgICAKLSAgICB2b2lkIHZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKKyAgICB2b2lk
IHZpc2l0Q2hpbGRyZW4yKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKIAogcHJpdmF0ZToKICAgICBD
b2RlQmxvY2sqIG1fY29kZUJsb2NrOwpAQCAtNjMsNyArNjIsNyBAQCBwdWJsaWM6CiAKICAgICB2
b2lkIGFkZExhemlseShDb2RlQmxvY2sqLCBDb2RlQmxvY2sqIGNvZGVPcmlnaW5Pd25lciwgU3Ry
dWN0dXJlKiwgU3RydWN0dXJlKik7CiAgICAgdm9pZCByZWFsbHlBZGQoVk0mLCBDb21tb25EYXRh
Kik7Ci0gICAgdm9pZCB2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CisgICAgdm9pZCB2aXNp
dENoaWxkcmVuMihBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAKIHByaXZhdGU6CiAgICAgVmVjdG9y
PERlc2lyZWRUcmFuc2l0aW9uPiBtX3RyYW5zaXRpb25zOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdEZXNpcmVkV2Vha1JlZmVyZW5jZXMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFdlYWtSZWZlcmVuY2VzLmNwcAkocmV2
aXNpb24gMjcxNzg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2Vh
a1JlZmVyZW5jZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Nyw3ICs4Nyw3IEBAIHZvaWQgRGVz
aXJlZFdlYWtSZWZlcmVuY2VzOjpyZWFsbHlBZGQoVk0KICAgICB9CiB9CiAKLXZvaWQgRGVzaXJl
ZFdlYWtSZWZlcmVuY2VzOjp2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordm9p
ZCBEZXNpcmVkV2Vha1JlZmVyZW5jZXM6OnZpc2l0Q2hpbGRyZW4yKEFic3RyYWN0U2xvdFZpc2l0
b3ImIHZpc2l0b3IpCiB7CiAgICAgZm9yIChKU0NlbGwqIHRhcmdldCA6IG1fcmVmZXJlbmNlcykK
ICAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZCh0YXJnZXQpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2Vha1JlZmVyZW5jZXMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXZWFrUmVmZXJlbmNlcy5o
CShyZXZpc2lvbiAyNzE3ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2ly
ZWRXZWFrUmVmZXJlbmNlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwxMCArMzEsMTAgQEAKIAog
bmFtZXNwYWNlIEpTQyB7IAogCitjbGFzcyBBYnN0cmFjdFNsb3RWaXNpdG9yOwogY2xhc3MgQ29k
ZUJsb2NrOwogY2xhc3MgSlNDZWxsOwogY2xhc3MgSlNWYWx1ZTsKLWNsYXNzIFNsb3RWaXNpdG9y
OwogY2xhc3MgVk07CiAKIG5hbWVzcGFjZSBERkcgewpAQCAtNTIsOCArNTIsOCBAQCBwdWJsaWM6
CiAgICAgYm9vbCBjb250YWlucyhKU0NlbGwqKTsKICAgICAKICAgICB2b2lkIHJlYWxseUFkZChW
TSYsIENvbW1vbkRhdGEqKTsKLSAgICAKLSAgICB2b2lkIHZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0
b3ImKTsKKworICAgIHZvaWQgdmlzaXRDaGlsZHJlbjIoQWJzdHJhY3RTbG90VmlzaXRvciYpOwog
CiBwcml2YXRlOgogICAgIENvZGVCbG9jayogbV9jb2RlQmxvY2s7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkocmV2aXNpb24gMjcxNzg2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk3Nyw3ICs5
NzcsNyBAQCBCbG9ja0xpc3QgR3JhcGg6OmJsb2Nrc0luUG9zdE9yZGVyKGJvb2wgCiAgICAgICAg
IH0KICAgICB9CiAKLSAgICBpZiAoaXNTYWZlVG9WYWxpZGF0ZSAmJiB2YWxpZGF0aW9uRW5hYmxl
ZCgpKSB7IC8vIFRoZXJlIGFyZSB1c2VycyBvZiB0aGlzIHdoZXJlIHdlIGhhdmVuJ3QgeWV0IGJ1
aWx0IG9mIHRoZSBDRkcgZW5vdWdoIHRvIGJlIGFibGUgdG8gcnVuIGRvbWluYXRvcnMuCisgICAg
aWYgKGlzU2FmZVRvVmFsaWRhdGUgJiYgdmFsaWRhdGlvbkVuYWJsZWQoKSkgeyAvLyBUaGVyZSBh
cmUgdXNlcnMgb2YgdGhpcyB3aGVyZSB3ZSBoYXZlbid0IHlldCBidWlsdCB0aGUgQ0ZHIGVub3Vn
aCB0byBiZSBhYmxlIHRvIHJ1biBkb21pbmF0b3JzLgogICAgICAgICBhdXRvIHZhbGlkYXRlUmVz
dWx0cyA9IFsmXSAoYXV0byYgZG9taW5hdG9ycykgewogICAgICAgICAgICAgLy8gV2hlbiBpdGVy
YXRpbmcgb3ZlciByZXZlcnNlIHBvc3Qgb3JkZXIsIHdlIHNob3VsZCBzZWUgZG9taW5hdG9ycwog
ICAgICAgICAgICAgLy8gYmVmb3JlIHRoaW5ncyB0aGV5IGRvbWluYXRlLgpAQCAtMTQ0OCw3ICsx
NDQ4LDcgQEAgdm9pZCBHcmFwaDo6cmVnaXN0ZXJGcm96ZW5WYWx1ZXMoKQogICAgIG1fY29kZUJs
b2NrLT5jb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oKS5zaHJpbmtUb0ZpdCgpOwog
fQogCi12b2lkIEdyYXBoOjp2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordm9p
ZCBHcmFwaDo6dmlzaXRDaGlsZHJlbjEoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsK
ICAgICBmb3IgKEZyb3plblZhbHVlKiB2YWx1ZSA6IG1fZnJvemVuVmFsdWVzKSB7CiAgICAgICAg
IHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQodmFsdWUtPnZhbHVlKCkpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkocmV2aXNpb24gMjcxNzg2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDAwLDkgKzEw
MDAsOSBAQCBwdWJsaWM6CiAgICAgYm9vbCBjYW5Eb0Zhc3RTcHJlYWQoTm9kZSosIGNvbnN0IEFi
c3RyYWN0VmFsdWUmKTsKICAgICAKICAgICB2b2lkIHJlZ2lzdGVyRnJvemVuVmFsdWVzKCk7Ci0g
ICAgCi0gICAgdm9pZCB2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJikgZmluYWw7Ci0gICAgCisK
KyAgICB2b2lkIHZpc2l0Q2hpbGRyZW4xKEFic3RyYWN0U2xvdFZpc2l0b3ImKSBmaW5hbDsKKwog
ICAgIHZvaWQgbG9nQXNzZXJ0aW9uRmFpbHVyZSgKICAgICAgICAgc3RkOjpudWxscHRyX3QsIGNv
bnN0IGNoYXIqIGZpbGUsIGludCBsaW5lLCBjb25zdCBjaGFyKiBmdW5jdGlvbiwKICAgICAgICAg
Y29uc3QgY2hhciogYXNzZXJ0aW9uKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHUGxhbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQ
bGFuLmNwcAkocmV2aXNpb24gMjcxNzg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdQbGFuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjcyLDcgKzY3Miw3IEBAIENvbXBpbGF0aW9u
S2V5IFBsYW46OmtleSgpCiAgICAgcmV0dXJuIENvbXBpbGF0aW9uS2V5KG1fY29kZUJsb2NrLT5h
bHRlcm5hdGl2ZSgpLCBtX21vZGUpOwogfQogCi12b2lkIFBsYW46OmNoZWNrTGl2ZW5lc3NBbmRW
aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBQbGFuOjpjaGVja0xpdmVu
ZXNzQW5kVmlzaXRDaGlsZHJlbihBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAg
IGlmICghaXNLbm93blRvQmVMaXZlRHVyaW5nR0MoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtNjg0
LDggKzY4NCw4IEBAIHZvaWQgUGxhbjo6Y2hlY2tMaXZlbmVzc0FuZFZpc2l0Q2hpbGRyZW4KICAg
ICAgICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQodmFsdWUudmFsdWUoKSk7CiAgICAg
fQogCi0gICAgbV9yZWNvcmRlZFN0YXR1c2VzLnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOwotICAg
IG1fcmVjb3JkZWRTdGF0dXNlcy5tYXJrSWZDaGVhcCh2aXNpdG9yKTsKKyAgICBtX3JlY29yZGVk
U3RhdHVzZXMudmlzaXRBZ2dyZWdhdGUxKHZpc2l0b3IpOworICAgIG1fcmVjb3JkZWRTdGF0dXNl
cy5tYXJrSWZDaGVhcDEodmlzaXRvcik7CiAKICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVk
KG1fY29kZUJsb2NrKTsKICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKG1fY29kZUJsb2Nr
LT5hbHRlcm5hdGl2ZSgpKTsKQEAgLTY5OCw4ICs2OTgsOCBAQCB2b2lkIFBsYW46OmNoZWNrTGl2
ZW5lc3NBbmRWaXNpdENoaWxkcmVuCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBtX3dlYWtSZWZl
cmVuY2VzLnZpc2l0Q2hpbGRyZW4odmlzaXRvcik7Ci0gICAgbV90cmFuc2l0aW9ucy52aXNpdENo
aWxkcmVuKHZpc2l0b3IpOworICAgIG1fd2Vha1JlZmVyZW5jZXMudmlzaXRDaGlsZHJlbjIodmlz
aXRvcik7CisgICAgbV90cmFuc2l0aW9ucy52aXNpdENoaWxkcmVuMih2aXNpdG9yKTsKIH0KIAog
dm9pZCBQbGFuOjpmaW5hbGl6ZUluR0MoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdQbGFuLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQ
bGFuLmgJKHJldmlzaW9uIDI3MTc4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
UGxhbi5oCSh3b3JraW5nIGNvcHkpCkBAIC00Myw4ICs0Myw4IEBACiAKIG5hbWVzcGFjZSBKU0Mg
ewogCitjbGFzcyBBYnN0cmFjdFNsb3RWaXNpdG9yOwogY2xhc3MgQ29kZUJsb2NrOwotY2xhc3Mg
U2xvdFZpc2l0b3I7CiAKIG5hbWVzcGFjZSBERkcgewogCkBAIC03Miw3ICs3Miw3IEBAIHB1Ymxp
YzoKICAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgogICAgIHZvaWQgaXRlcmF0ZUNv
ZGVCbG9ja3NGb3JHQyhjb25zdCBGdW5jJik7Ci0gICAgdm9pZCBjaGVja0xpdmVuZXNzQW5kVmlz
aXRDaGlsZHJlbihTbG90VmlzaXRvciYpOworICAgIHZvaWQgY2hlY2tMaXZlbmVzc0FuZFZpc2l0
Q2hpbGRyZW4oQWJzdHJhY3RTbG90VmlzaXRvciYpOwogICAgIGJvb2wgaXNLbm93blRvQmVMaXZl
RHVyaW5nR0MoKTsKICAgICB2b2lkIGZpbmFsaXplSW5HQygpOwogICAgIHZvaWQgY2FuY2VsKCk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVwb2ludC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlcG9pbnQuY3BwCShyZXZp
c2lvbiAyNzE3ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVwb2ludC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTgzLDcgKzgzLDcgQEAgdm9pZCBTYWZlcG9pbnQ6OmJlZ2lu
KCkKICAgICB9CiB9CiAKLXZvaWQgU2FmZXBvaW50OjpjaGVja0xpdmVuZXNzQW5kVmlzaXRDaGls
ZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgU2FmZXBvaW50OjpjaGVja0xpdmVuZXNz
QW5kVmlzaXRDaGlsZHJlbihBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFJF
TEVBU0VfQVNTRVJUKG1fZGlkQ2FsbEJlZ2luKTsKIApAQCAtOTQsNyArOTQsNyBAQCB2b2lkIFNh
ZmVwb2ludDo6Y2hlY2tMaXZlbmVzc0FuZFZpc2l0Q2hpCiAgICAgICAgIHJldHVybjsKICAgICAK
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX3NjYW5uYWJsZXMuc2l6ZSgpOyBpLS07KQotICAgICAg
ICBtX3NjYW5uYWJsZXNbaV0tPnZpc2l0Q2hpbGRyZW4odmlzaXRvcik7CisgICAgICAgIG1fc2Nh
bm5hYmxlc1tpXS0+dmlzaXRDaGlsZHJlbjEodmlzaXRvcik7CiB9CiAKIGJvb2wgU2FmZXBvaW50
Ojppc0tub3duVG9CZUxpdmVEdXJpbmdHQygpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NhZmVwb2ludC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU2FmZXBvaW50LmgJKHJldmlzaW9uIDI3MTc4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU2FmZXBvaW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDcgQEAK
IAogbmFtZXNwYWNlIEpTQyB7CiAKLWNsYXNzIFNsb3RWaXNpdG9yOworY2xhc3MgQWJzdHJhY3RT
bG90VmlzaXRvcjsKIGNsYXNzIFZNOwogCiBuYW1lc3BhY2UgREZHIHsKQEAgLTY2LDggKzY2LDgg
QEAgcHVibGljOgogICAgIHZvaWQgYWRkKFNjYW5uYWJsZSopOwogICAgIAogICAgIHZvaWQgYmVn
aW4oKTsKLSAgICAKLSAgICB2b2lkIGNoZWNrTGl2ZW5lc3NBbmRWaXNpdENoaWxkcmVuKFNsb3RW
aXNpdG9yJik7CisKKyAgICB2b2lkIGNoZWNrTGl2ZW5lc3NBbmRWaXNpdENoaWxkcmVuKEFic3Ry
YWN0U2xvdFZpc2l0b3ImKTsKICAgICBib29sIGlzS25vd25Ub0JlTGl2ZUR1cmluZ0dDKCk7CiAg
ICAgdm9pZCBjYW5jZWwoKTsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU2Nhbm5hYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTY2FubmFibGUuaAkocmV2aXNpb24gMjcxNzg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTY2FubmFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjksNyArMjksNyBAQAogCiBu
YW1lc3BhY2UgSlNDIHsKIAotY2xhc3MgU2xvdFZpc2l0b3I7CitjbGFzcyBBYnN0cmFjdFNsb3RW
aXNpdG9yOwogCiBuYW1lc3BhY2UgREZHIHsKIApAQCAtMzgsNyArMzgsNyBAQCBwdWJsaWM6CiAg
ICAgU2Nhbm5hYmxlKCkgeyB9CiAgICAgdmlydHVhbCB+U2Nhbm5hYmxlKCkgeyB9CiAgICAgCi0g
ICAgdmlydHVhbCB2b2lkIHZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImKSA9IDA7CisgICAgdmly
dHVhbCB2b2lkIHZpc2l0Q2hpbGRyZW4xKEFic3RyYWN0U2xvdFZpc2l0b3ImKSA9IDA7CiB9Owog
CiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1dvcmtsaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1dvcmtsaXN0LmNwcAkocmV2aXNpb24gMjcxNzg2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3Miw3ICszNzIs
NyBAQCB2b2lkIFdvcmtsaXN0OjpyZXN1bWVBbGxUaHJlYWRzKCkKICAgICBtX3N1c3BlbnNpb25M
b2NrLnVubG9jaygpOwogfQogCi12b2lkIFdvcmtsaXN0Ojp2aXNpdFdlYWtSZWZlcmVuY2VzKFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBXb3JrbGlzdDo6dmlzaXRXZWFrUmVmZXJlbmNlcyhB
YnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFZNKiB2bSA9ICZ2aXNpdG9yLmhl
YXAoKS0+dm0oKTsKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dv
cmtsaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3Jr
bGlzdC5oCShyZXZpc2lvbiAyNzE3ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1dvcmtsaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDcgKzM1LDcgQEAKIAogbmFtZXNwYWNl
IEpTQyB7CiAKLWNsYXNzIFNsb3RWaXNpdG9yOworY2xhc3MgQWJzdHJhY3RTbG90VmlzaXRvcjsK
IAogbmFtZXNwYWNlIERGRyB7CiAKQEAgLTczLDcgKzczLDcgQEAgcHVibGljOgogICAgIGJvb2wg
aXNBY3RpdmVGb3JWTShWTSYpIGNvbnN0OwogICAgIAogICAgIC8vIE9ubHkgY2FsbGVkIG9uIHRo
ZSBtYWluIHRocmVhZCBhZnRlciBzdXNwZW5kaW5nIGFsbCB0aHJlYWRzLgotICAgIHZvaWQgdmlz
aXRXZWFrUmVmZXJlbmNlcyhTbG90VmlzaXRvciYpOworICAgIHZvaWQgdmlzaXRXZWFrUmVmZXJl
bmNlcyhBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAgICAgdm9pZCByZW1vdmVEZWFkUGxhbnMoVk0m
KTsKICAgICAKICAgICB2b2lkIHJlbW92ZU5vbkNvbXBpbGluZ1BsYW5zRm9yVk0oVk0mKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Fic3RyYWN0U2xvdFZpc2l0b3IuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Fic3RyYWN0U2xvdFZpc2l0
b3IuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Fic3Ry
YWN0U2xvdFZpc2l0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDMgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQWJzdHJhY3RTbG90VmlzaXRv
ci5oIgorCisjaW5jbHVkZSAiQWJzdHJhY3RTbG90VmlzaXRvcklubGluZXMuaCIKKyNpbmNsdWRl
ICJNYXJraW5nQ29uc3RyYWludFNvbHZlci5oIgorCituYW1lc3BhY2UgSlNDIHsKKwordm9pZCBB
YnN0cmFjdFNsb3RWaXNpdG9yOjphZGRQYXJhbGxlbENvbnN0cmFpbnRUYXNrKFJlZlB0cjxTaGFy
ZWRUYXNrPHZvaWQoQWJzdHJhY3RTbG90VmlzaXRvciYpPj4gdGFzaykKK3sKKyAgICBSRUxFQVNF
X0FTU0VSVChtX2N1cnJlbnRTb2x2ZXIpOworICAgIFJFTEVBU0VfQVNTRVJUKG1fY3VycmVudENv
bnN0cmFpbnQpOworICAgIFJFTEVBU0VfQVNTRVJUKHRhc2spOworICAgIAorICAgIG1fY3VycmVu
dFNvbHZlci0+YWRkUGFyYWxsZWxUYXNrKHRhc2ssICptX2N1cnJlbnRDb25zdHJhaW50KTsKK30K
KworfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9B
YnN0cmFjdFNsb3RWaXNpdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvQWJzdHJhY3RTbG90VmlzaXRvci5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0Fic3RyYWN0U2xvdFZpc2l0b3IuaAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDIxMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiSlNDSlNWYWx1ZS5oIgorI2luY2x1ZGUgIk1h
cmtTdGFjay5oIgorI2luY2x1ZGUgIlZpc2l0UmFjZUtleS5oIiAvLyBtbGFtCisjaW5jbHVkZSA8
d3RmL1NoYXJlZFRhc2suaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVz
cGFjZSBKU0MgeworCitjbGFzcyBDb25zZXJ2YXRpdmVSb290czsKK2NsYXNzIEhlYXA7CitjbGFz
cyBIZWFwQ2VsbDsKK2NsYXNzIEpTQ2VsbDsKK2NsYXNzIE1hcmtlZEJsb2NrOworY2xhc3MgTWFy
a2luZ0NvbnN0cmFpbnQ7CitjbGFzcyBNYXJraW5nQ29uc3RyYWludFNvbHZlcjsKK2NsYXNzIFBy
ZWNpc2VBbGxvY2F0aW9uOworY2xhc3MgU2xvdFZpc2l0b3I7CitjbGFzcyBWTTsKK2NsYXNzIFZl
cmlmaWVyU2xvdFZpc2l0b3I7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjbGFzcyBXZWFrOwordGVt
cGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVHJhaXRzPiBjbGFzcyBXcml0ZUJhcnJpZXJCYXNl
OworCitjbGFzcyBBYnN0cmFjdFNsb3RWaXNpdG9yIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJM
RShBYnN0cmFjdFNsb3RWaXNpdG9yKTsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1
YmxpYzoKKyAgICBlbnVtIFJvb3RNYXJrUmVhc29uIHsKKyAgICAgICAgTm9uZSwKKyAgICAgICAg
Q29uc2VydmF0aXZlU2NhbiwKKyAgICAgICAgU3Ryb25nUmVmZXJlbmNlcywKKyAgICAgICAgUHJv
dGVjdGVkVmFsdWVzLAorICAgICAgICBNYXJrTGlzdFNldCwKKyAgICAgICAgVk1FeGNlcHRpb25z
LAorICAgICAgICBTdHJvbmdIYW5kbGVzLAorICAgICAgICBEZWJ1Z2dlciwKKyAgICAgICAgSklU
U3R1YlJvdXRpbmVzLAorICAgICAgICBXZWFrU2V0cywKKyAgICAgICAgT3V0cHV0LAorICAgICAg
ICBERkdXb3JrTGlzdHMsCisgICAgICAgIENvZGVCbG9ja3MsCisgICAgICAgIERPTUdDT3V0cHV0
LAorICAgIH07CisKKyAgICBjbGFzcyBEZWZhdWx0TWFya2luZ1Zpb2xhdGlvbkFzc2VydGlvblNj
b3BlIHsKKyAgICBwdWJsaWM6CisgICAgICAgIERlZmF1bHRNYXJraW5nVmlvbGF0aW9uQXNzZXJ0
aW9uU2NvcGUoQWJzdHJhY3RTbG90VmlzaXRvciYpIHsgfQorICAgIH07CisKKyAgICB2aXJ0dWFs
IH5BYnN0cmFjdFNsb3RWaXNpdG9yKCkgPSBkZWZhdWx0OworCisgICAgTWFya1N0YWNrQXJyYXkm
IGNvbGxlY3Rvck1hcmtTdGFjaygpIHsgcmV0dXJuIG1fY29sbGVjdG9yU3RhY2s7IH0KKyAgICBN
YXJrU3RhY2tBcnJheSYgbXV0YXRvck1hcmtTdGFjaygpIHsgcmV0dXJuIG1fbXV0YXRvclN0YWNr
OyB9CisgICAgY29uc3QgTWFya1N0YWNrQXJyYXkmIGNvbGxlY3Rvck1hcmtTdGFjaygpIGNvbnN0
IHsgcmV0dXJuIG1fY29sbGVjdG9yU3RhY2s7IH0KKyAgICBjb25zdCBNYXJrU3RhY2tBcnJheSYg
bXV0YXRvck1hcmtTdGFjaygpIGNvbnN0IHsgcmV0dXJuIG1fbXV0YXRvclN0YWNrOyB9CisKKyAg
ICBib29sIGlzRW1wdHkoKSB7IHJldHVybiBtX2NvbGxlY3RvclN0YWNrLmlzRW1wdHkoKSAmJiBt
X211dGF0b3JTdGFjay5pc0VtcHR5KCk7IH0KKworICAgIFZNJiB2bSgpOworICAgIGNvbnN0IFZN
JiB2bSgpIGNvbnN0OworICAgIEhlYXAqIGhlYXAoKSBjb25zdDsKKworICAgIHZpcnR1YWwgdm9p
ZCBhcHBlbmRfQ29uc2VydmF0aXZlUm9vdHMoY29uc3QgQ29uc2VydmF0aXZlUm9vdHMmKSA9IDA7
CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBUcmFpdHM+IHZvaWQgYXBwZW5k
KGNvbnN0IFdyaXRlQmFycmllckJhc2U8VCwgVHJhaXRzPiYpOworICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIFRyYWl0cz4gdm9pZCBhcHBlbmRIaWRkZW4oY29uc3QgV3JpdGVCYXJy
aWVyQmFzZTxULCBUcmFpdHM+Jik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSXRlcmF0b3I+IHZv
aWQgYXBwZW5kKEl0ZXJhdG9yIGJlZ2luICwgSXRlcmF0b3IgZW5kKTsKKyAgICBBTFdBWVNfSU5M
SU5FIHZvaWQgYXBwZW5kVmFsdWVzKGNvbnN0IFdyaXRlQmFycmllckJhc2U8VW5rbm93biwgUmF3
VmFsdWVUcmFpdHM8VW5rbm93bj4+Kiwgc2l6ZV90IGNvdW50KTsKKyAgICBBTFdBWVNfSU5MSU5F
IHZvaWQgYXBwZW5kVmFsdWVzSGlkZGVuKGNvbnN0IFdyaXRlQmFycmllckJhc2U8VW5rbm93biwg
UmF3VmFsdWVUcmFpdHM8VW5rbm93bj4+Kiwgc2l6ZV90IGNvdW50KTsKKworICAgIC8vIFRoZXNl
IGRvbid0IHJlcXVpcmUgeW91IHRvIHByb3ZlIHRoYXQgeW91IGhhdmUgYSBXcml0ZUJhcnJpZXI8
Pi4gVGhhdCBtYWtlcyBzZW5zZQorICAgIC8vIGZvcjoKKyAgICAvLworICAgIC8vIC0gcm9vdHMu
CisgICAgLy8gLSBzb3BoaXN0aWNhdGVkIGRhdGEgc3RydWN0dXJlcyB0aGF0IGJhcnJpZXIgdGhy
b3VnaCBvdGhlciBtZWFucyAobGlrZSBERkc6OlBsYW4gYW5kCisgICAgLy8gICBmcmllbmRzKS4K
KyAgICAvLworICAgIC8vIElmIHlvdSBhcmUgbm90IGEgcm9vdCBhbmQgeW91IGRvbid0IGtub3cg
d2hhdCBraW5kIG9mIGJhcnJpZXIgeW91IGhhdmUsIHRoZW4geW91CisgICAgLy8gc2hvdWxkbid0
IGNhbGwgdGhlc2UgbWV0aG9kcy4KKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgYXBwZW5kVW5iYXJy
aWVyZWQoSlNWYWx1ZSk7CisgICAgQUxXQVlTX0lOTElORSB2b2lkIGFwcGVuZFVuYmFycmllcmVk
KEpTVmFsdWUqLCBzaXplX3QpOworICAgIEFMV0FZU19JTkxJTkUgdm9pZCBhcHBlbmRVbmJhcnJp
ZXJlZChKU0NlbGwqIGNlbGwpCisgICAgeworICAgICAgICBpZiAoIWNlbGwpCisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIGFwcGVuZFVuYmFycmllcmVkSW1wbChjZWxsKTsKKyAgICB9Cisg
ICAgdmlydHVhbCB2b2lkIGFwcGVuZFVuYmFycmllcmVkSW1wbChKU0NlbGwqKSA9IDA7CisKKyAg
ICB2aXJ0dWFsIGJvb2wgYWRkT3BhcXVlUm9vdCh2b2lkKikgPSAwOyAvLyBSZXR1cm5zIHRydWUg
aWYgdGhlIHJvb3Qgd2FzIG5ldy4KKyAgICB2aXJ0dWFsIGJvb2wgY29udGFpbnNPcGFxdWVSb290
KHZvaWQqKSBjb25zdCA9IDA7CisKKyAgICB2aXJ0dWFsIGJvb2wgaXNGaXJzdFZpc2l0KCkgY29u
c3QgPSAwOyAvLyBtbGFtIEZJWE1FCisKKyAgICB2aXJ0dWFsIGJvb2wgaXNNYXJrZWQoY29uc3Qg
dm9pZCopIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNNYXJrZWQoTWFya2VkQmxvY2sm
LCBIZWFwQ2VsbCopIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNNYXJrZWQoUHJlY2lz
ZUFsbG9jYXRpb24mLCBIZWFwQ2VsbCopIGNvbnN0ID0gMDsKKworICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFQ+CisgICAgdm9pZCBhcHBlbmQoY29uc3QgV2VhazxUPiYgd2Vhayk7CisKKyAgICBBTFdB
WVNfSU5MSU5FIHZvaWQgYXBwZW5kSGlkZGVuVW5iYXJyaWVyZWQoSlNWYWx1ZSk7CisgICAgQUxX
QVlTX0lOTElORSB2b2lkIGFwcGVuZEhpZGRlblVuYmFycmllcmVkKEpTQ2VsbCogY2VsbCkKKyAg
ICB7CisgICAgICAgIGlmICghY2VsbCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgYXBw
ZW5kSGlkZGVuVW5iYXJyaWVyZWRJbXBsKGNlbGwpOworICAgIH0KKyAgICB2aXJ0dWFsIHZvaWQg
YXBwZW5kSGlkZGVuVW5iYXJyaWVyZWRJbXBsKEpTQ2VsbCopID0gMDsKKworICAgIHNpemVfdCB2
aXNpdENvdW50KCkgY29uc3QgeyByZXR1cm4gbV92aXNpdENvdW50OyB9CisKKyAgICB2b2lkIGFk
ZFRvVmlzaXRDb3VudChzaXplX3QgdmFsdWUpIHsgbV92aXNpdENvdW50ICs9IHZhbHVlOyB9CisK
KyAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGFkZFBhcmFsbGVsQ29uc3RyYWludFRhc2soUmVm
UHRyPFNoYXJlZFRhc2s8dm9pZChBYnN0cmFjdFNsb3RWaXNpdG9yJik+Pik7CisKKyAgICB2aXJ0
dWFsIHZvaWQgbWFya0F1eGlsaWFyeShjb25zdCB2b2lkKiBiYXNlKSA9IDA7CisKKyAgICB2aXJ0
dWFsIHZvaWQgcmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKHNpemVfdCkgPSAwOworI2lmIEVOQUJM
RShSRVNPVVJDRV9VU0FHRSkKKyAgICB2aXJ0dWFsIHZvaWQgcmVwb3J0RXh0ZXJuYWxNZW1vcnlW
aXNpdGVkKHNpemVfdCkgPSAwOworI2VuZGlmCisKKyAgICB2aXJ0dWFsIHZvaWQgZHVtcChQcmlu
dFN0cmVhbSYpIGNvbnN0ID0gMDsKKworICAgIFJvb3RNYXJrUmVhc29uIHJvb3RNYXJrUmVhc29u
KCkgY29uc3QgeyByZXR1cm4gbV9yb290TWFya1JlYXNvbjsgfQorICAgIHZvaWQgc2V0Um9vdE1h
cmtSZWFzb24oUm9vdE1hcmtSZWFzb24gcmVhc29uKSB7IG1fcm9vdE1hcmtSZWFzb24gPSByZWFz
b247IH0KKworICAgIHZpcnR1YWwgYm9vbCBtdXRhdG9ySXNTdG9wcGVkKCkgY29uc3QgPSAwOwor
CisgICAgdmlydHVhbCB2b2lkIGRpZFJhY2UoY29uc3QgVmlzaXRSYWNlS2V5JikgPSAwOworICAg
IHZvaWQgZGlkUmFjZShKU0NlbGwqIGNlbGwsIGNvbnN0IGNoYXIqIHJlYXNvbikgeyBkaWRSYWNl
KFZpc2l0UmFjZUtleShjZWxsLCByZWFzb24pKTsgfQorCisgICAgdmlydHVhbCB2b2lkIHZpc2l0
QXNDb25zdHJhaW50KGNvbnN0IEpTQ2VsbCopID0gMDsKKworICAgIC8vIElubGluZSBmdW5jdGlv
bnMgZm9yIGRpc2FwYXRjaGluZyB0byBTbG90VmlzaXRvciAvIFZlcmlmaWVyU2xvdFZpc2l0b3Ig
dmVyc2lvbnMuCisKKy8vICAgIHZvaWQgYXBwZW5kKGNvbnN0IENvbnNlcnZhdGl2ZVJvb3RzJik7
CisvLyAgICB2b2lkIGFwcGVuZFVuYmFycmllcmVkKEpTVmFsdWUpOworLy8gICAgdm9pZCBhcHBl
bmRVbmJhcnJpZXJlZChKU0NlbGwqKTsKKy8vICAgIHZvaWQgYXBwZW5kSGlkZGVuVW5iYXJyaWVy
ZWQoSlNDZWxsKik7CisvLyAgICBib29sIGNvbnRhaW5zT3BhcXVlUm9vdCh2b2lkKikgY29uc3Q7
CisvLyAgICB2b2lkIHZpc2l0QXNDb25zdHJhaW50KGNvbnN0IEpTQ2VsbCopOworCitwcm90ZWN0
ZWQ6CisgICAgaW5saW5lIEFic3RyYWN0U2xvdFZpc2l0b3IoSGVhcCYpOworCisgICAgdm9pZCBy
ZXNldCgpOworCisgICAgTWFya1N0YWNrQXJyYXkgbV9jb2xsZWN0b3JTdGFjazsKKyAgICBNYXJr
U3RhY2tBcnJheSBtX211dGF0b3JTdGFjazsKKworICAgIHNpemVfdCBtX3Zpc2l0Q291bnQgeyAw
IH07CisKKyAgICBIZWFwJiBtX2hlYXA7CisKKyAgICBSb290TWFya1JlYXNvbiBtX3Jvb3RNYXJr
UmVhc29uIHsgUm9vdE1hcmtSZWFzb246Ok5vbmUgfTsKKworICAgIE1hcmtpbmdDb25zdHJhaW50
KiBtX2N1cnJlbnRDb25zdHJhaW50IHsgbnVsbHB0ciB9OworICAgIE1hcmtpbmdDb25zdHJhaW50
U29sdmVyKiBtX2N1cnJlbnRTb2x2ZXIgeyBudWxscHRyIH07CisKKyAgICBmcmllbmQgY2xhc3Mg
TWFya2luZ0NvbnN0cmFpbnRTb2x2ZXI7Cit9OworCitjbGFzcyBTZXRSb290TWFya1JlYXNvblNj
b3BlIHsKK3B1YmxpYzoKKyAgICBTZXRSb290TWFya1JlYXNvblNjb3BlKEFic3RyYWN0U2xvdFZp
c2l0b3ImIHZpc2l0b3IsIEFic3RyYWN0U2xvdFZpc2l0b3I6OlJvb3RNYXJrUmVhc29uIHJlYXNv
bikKKyAgICAgICAgOiBtX3Zpc2l0b3IodmlzaXRvcikKKyAgICAgICAgLCBtX3ByZXZpb3VzUmVh
c29uKHZpc2l0b3Iucm9vdE1hcmtSZWFzb24oKSkKKyAgICB7CisgICAgICAgIG1fdmlzaXRvci5z
ZXRSb290TWFya1JlYXNvbihyZWFzb24pOworICAgIH0KKworICAgIH5TZXRSb290TWFya1JlYXNv
blNjb3BlKCkKKyAgICB7CisgICAgICAgIG1fdmlzaXRvci5zZXRSb290TWFya1JlYXNvbihtX3By
ZXZpb3VzUmVhc29uKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgQWJzdHJhY3RTbG90VmlzaXRv
ciYgbV92aXNpdG9yOworICAgIEFic3RyYWN0U2xvdFZpc2l0b3I6OlJvb3RNYXJrUmVhc29uIG1f
cHJldmlvdXNSZWFzb247Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0Fic3RyYWN0U2xvdFZpc2l0b3JJbmxpbmVzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQWJzdHJhY3RTbG90VmlzaXRvcklubGlu
ZXMuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9BYnN0cmFj
dFNsb3RWaXNpdG9ySW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTE1IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNl
CisKKyNpbmNsdWRlICJBYnN0cmFjdFNsb3RWaXNpdG9yLmgiCisjaW5jbHVkZSAiSGVhcC5oIgor
I2luY2x1ZGUgIldlYWtJbmxpbmVzLmgiCisjaW5jbHVkZSAiV3JpdGVCYXJyaWVyLmgiCisKK25h
bWVzcGFjZSBKU0MgeworCitpbmxpbmUgQWJzdHJhY3RTbG90VmlzaXRvcjo6QWJzdHJhY3RTbG90
VmlzaXRvcihIZWFwJiBoZWFwKQorICAgIDogbV9oZWFwKGhlYXApCit7Cit9CisKK2lubGluZSBI
ZWFwKiBBYnN0cmFjdFNsb3RWaXNpdG9yOjpoZWFwKCkgY29uc3QKK3sKKyAgICByZXR1cm4gJm1f
aGVhcDsKK30KKworaW5saW5lIFZNJiBBYnN0cmFjdFNsb3RWaXNpdG9yOjp2bSgpCit7CisgICAg
cmV0dXJuIG1faGVhcC52bSgpOworfQorCitpbmxpbmUgY29uc3QgVk0mIEFic3RyYWN0U2xvdFZp
c2l0b3I6OnZtKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9oZWFwLnZtKCk7Cit9CisKK3RlbXBs
YXRlPHR5cGVuYW1lIFQ+CitBTFdBWVNfSU5MSU5FIHZvaWQgQWJzdHJhY3RTbG90VmlzaXRvcjo6
YXBwZW5kKGNvbnN0IFdlYWs8VD4mIHdlYWspCit7CisgICAgYXBwZW5kVW5iYXJyaWVyZWQod2Vh
ay5nZXQoKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFRyYWl0cz4KK0FM
V0FZU19JTkxJTkUgdm9pZCBBYnN0cmFjdFNsb3RWaXNpdG9yOjphcHBlbmQoY29uc3QgV3JpdGVC
YXJyaWVyQmFzZTxULCBUcmFpdHM+JiBzbG90KQoreworICAgIGFwcGVuZFVuYmFycmllcmVkKHNs
b3QuZ2V0KCkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBUcmFpdHM+CitB
TFdBWVNfSU5MSU5FIHZvaWQgQWJzdHJhY3RTbG90VmlzaXRvcjo6YXBwZW5kSGlkZGVuKGNvbnN0
IFdyaXRlQmFycmllckJhc2U8VCwgVHJhaXRzPiYgc2xvdCkKK3sKKyAgICBhcHBlbmRIaWRkZW5V
bmJhcnJpZXJlZChzbG90LmdldCgpKTsKK30KKworQUxXQVlTX0lOTElORSB2b2lkIEFic3RyYWN0
U2xvdFZpc2l0b3I6OmFwcGVuZEhpZGRlblVuYmFycmllcmVkKEpTVmFsdWUgdmFsdWUpCit7Cisg
ICAgaWYgKHZhbHVlLmlzQ2VsbCgpKQorICAgICAgICBhcHBlbmRIaWRkZW5VbmJhcnJpZXJlZCh2
YWx1ZS5hc0NlbGwoKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEl0ZXJhdG9yPgorQUxXQVlT
X0lOTElORSB2b2lkIEFic3RyYWN0U2xvdFZpc2l0b3I6OmFwcGVuZChJdGVyYXRvciBiZWdpbiwg
SXRlcmF0b3IgZW5kKQoreworICAgIGZvciAoYXV0byBpdCA9IGJlZ2luOyBpdCAhPSBlbmQ7ICsr
aXQpCisgICAgICAgIGFwcGVuZCgqaXQpOworfQorCitBTFdBWVNfSU5MSU5FIHZvaWQgQWJzdHJh
Y3RTbG90VmlzaXRvcjo6YXBwZW5kVmFsdWVzKGNvbnN0IFdyaXRlQmFycmllckJhc2U8VW5rbm93
bj4qIGJhcnJpZXJzLCBzaXplX3QgY291bnQpCit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBjb3VudDsgKytpKQorICAgICAgICBhcHBlbmQoYmFycmllcnNbaV0pOworfQorCitBTFdBWVNf
SU5MSU5FIHZvaWQgQWJzdHJhY3RTbG90VmlzaXRvcjo6YXBwZW5kVmFsdWVzSGlkZGVuKGNvbnN0
IFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4qIGJhcnJpZXJzLCBzaXplX3QgY291bnQpCit7Cisg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKQorICAgICAgICBhcHBlbmRIaWRk
ZW4oYmFycmllcnNbaV0pOworfQorCitBTFdBWVNfSU5MSU5FIHZvaWQgQWJzdHJhY3RTbG90Vmlz
aXRvcjo6YXBwZW5kVW5iYXJyaWVyZWQoSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUu
aXNDZWxsKCkpCisgICAgICAgIGFwcGVuZFVuYmFycmllcmVkKHZhbHVlLmFzQ2VsbCgpKTsKK30K
KworQUxXQVlTX0lOTElORSB2b2lkIEFic3RyYWN0U2xvdFZpc2l0b3I6OmFwcGVuZFVuYmFycmll
cmVkKEpTVmFsdWUqIHNsb3QsIHNpemVfdCBjb3VudCkKK3sKKyAgICBmb3IgKHNpemVfdCBpID0g
Y291bnQ7IGktLTspCisgICAgICAgIGFwcGVuZFVuYmFycmllcmVkKHNsb3RbaV0pOworfQorCitB
TFdBWVNfSU5MSU5FIHZvaWQgQWJzdHJhY3RTbG90VmlzaXRvcjo6cmVzZXQoKQoreworICAgIG1f
dmlzaXRDb3VudCA9IDA7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvSGFuZGxlU2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9IYW5kbGVTZXQuY3BwCShyZXZpc2lvbiAyNzE3ODYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IYW5kbGVTZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01
Niw3ICs1Niw5IEBAIHZvaWQgSGFuZGxlU2V0Ojpncm93KCkKICAgICB9CiB9CiAKLXZvaWQgSGFu
ZGxlU2V0Ojp2aXNpdFN0cm9uZ0hhbmRsZXMoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3RlbXBs
YXRlPHR5cGVuYW1lIFZpc2l0b3I+CisvL3ZvaWQgSGFuZGxlU2V0Ojp2aXNpdFN0cm9uZ0hhbmRs
ZXMoVmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgSGFuZGxlU2V0Ojp2aXNpdFN0cm9uZ0hhbmRsZXMx
KEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgTm9kZSogZW5kID0gbV9zdHJv
bmdMaXN0LmVuZCgpOwogICAgIGZvciAoTm9kZSogbm9kZSA9IG1fc3Ryb25nTGlzdC5iZWdpbigp
OyBub2RlICE9IGVuZDsgbm9kZSA9IG5vZGUtPm5leHQoKSkgewpAQCAtNjcsNiArNjksOSBAQCB2
b2lkIEhhbmRsZVNldDo6dmlzaXRTdHJvbmdIYW5kbGVzKFNsb3RWCiAgICAgfQogfQogCisvL3Rl
bXBsYXRlIHZvaWQgSGFuZGxlU2V0Ojp2aXNpdFN0cm9uZ0hhbmRsZXMoU2xvdFZpc2l0b3ImKTsK
Ky8vdGVtcGxhdGUgdm9pZCBIYW5kbGVTZXQ6OnZpc2l0U3Ryb25nSGFuZGxlcyhWZXJpZmllclNs
b3RWaXNpdG9yJik7CisKIHZvaWQgSGFuZGxlU2V0Ojp3cml0ZUJhcnJpZXIoSGFuZGxlU2xvdCBz
bG90LCBjb25zdCBKU1ZhbHVlJiB2YWx1ZSkKIHsKICAgICBpZiAoIXZhbHVlID09ICEqc2xvdCAm
JiBzbG90LT5pc0NlbGwoKSA9PSB2YWx1ZS5pc0NlbGwoKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0hhbmRsZVNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0hhbmRsZVNldC5oCShyZXZpc2lvbiAyNzE3ODYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9IYW5kbGVTZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsMTAgKzM1LDEx
IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCitjbGFzcyBBYnN0cmFjdFNsb3RWaXNpdG9yOwogY2xh
c3MgSGFuZGxlU2V0OwogY2xhc3MgVk07CiBjbGFzcyBKU1ZhbHVlOwotY2xhc3MgU2xvdFZpc2l0
b3I7CisvL2NsYXNzIFNsb3RWaXNpdG9yOwogCiBjbGFzcyBIYW5kbGVOb2RlIHsKIHB1YmxpYzoK
QEAgLTczLDcgKzc0LDggQEAgcHVibGljOgogICAgIEhhbmRsZVNsb3QgYWxsb2NhdGUoKTsKICAg
ICB2b2lkIGRlYWxsb2NhdGUoSGFuZGxlU2xvdCk7CiAKLSAgICB2b2lkIHZpc2l0U3Ryb25nSGFu
ZGxlcyhTbG90VmlzaXRvciYpOworLy8gICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9p
ZCB2aXNpdFN0cm9uZ0hhbmRsZXMoVmlzaXRvciYpOworICAgIHZvaWQgdmlzaXRTdHJvbmdIYW5k
bGVzMShBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lk
IHdyaXRlQmFycmllcihIYW5kbGVTbG90LCBjb25zdCBKU1ZhbHVlJik7CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCShyZXZpc2lvbiAyNzE3ODYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzIsNiArNzIsNyBA
QAogI2luY2x1ZGUgIlR5cGVQcm9maWxlci5oIgogI2luY2x1ZGUgIlR5cGVQcm9maWxlckxvZy5o
IgogI2luY2x1ZGUgIlZNLmgiCisjaW5jbHVkZSAiVmVyaWZpZXJTbG90VmlzaXRvci5oIgogI2lu
Y2x1ZGUgIldlYWtNYXBJbXBsSW5saW5lcy5oIgogI2luY2x1ZGUgIldlYWtTZXRJbmxpbmVzLmgi
CiAjaW5jbHVkZSA8YWxnb3JpdGhtPgpAQCAtNzMzLDEzICs3MzQsMjEgQEAgdm9pZCBIZWFwOjpy
ZW1vdmVEZWFkQ29tcGlsZXJXb3JrbGlzdEVudAogI2VuZGlmCiB9CiAKLWJvb2wgSGVhcDo6aXNB
bmFseXppbmdIZWFwKCkgY29uc3QKLXsKLSAgICBIZWFwUHJvZmlsZXIqIGhlYXBQcm9maWxlciA9
IG1fdm0uaGVhcFByb2ZpbGVyKCk7Ci0gICAgaWYgKFVOTElLRUxZKGhlYXBQcm9maWxlcikpCi0g
ICAgICAgIHJldHVybiBoZWFwUHJvZmlsZXItPmFjdGl2ZUhlYXBBbmFseXplcigpOwotICAgIHJl
dHVybiBmYWxzZTsKLX0KKy8vYm9vbCBIZWFwOjppc0FuYWx5emluZ0hlYXAoKSBjb25zdAorLy97
CisvLyAgICBIZWFwUHJvZmlsZXIqIGhlYXBQcm9maWxlciA9IG1fdm0uaGVhcFByb2ZpbGVyKCk7
CisvLyAgICBpZiAoVU5MSUtFTFkoaGVhcFByb2ZpbGVyKSkKKy8vICAgICAgICByZXR1cm4gaGVh
cFByb2ZpbGVyLT5hY3RpdmVIZWFwQW5hbHl6ZXIoKTsKKy8vICAgIHJldHVybiBmYWxzZTsKKy8v
fQorCisvL0hlYXBBbmFseXplciogSGVhcDo6aGVhcEFuYWx5emVyKCkgY29uc3QKKy8veworLy8g
ICAgSGVhcFByb2ZpbGVyKiBoZWFwUHJvZmlsZXIgPSBtX3ZtLmhlYXBQcm9maWxlcigpOworLy8g
ICAgaWYgKFVOTElLRUxZKGhlYXBQcm9maWxlcikpCisvLyAgICAgICAgcmV0dXJuIGhlYXBQcm9m
aWxlci0+YWN0aXZlSGVhcEFuYWx5emVyKCk7CisvLyAgICByZXR1cm4gbnVsbHB0cjsKKy8vfQog
CiBzdHJ1Y3QgR2F0aGVyRXh0cmFIZWFwRGF0YSA6IE1hcmtlZEJsb2NrOjpDb3VudEZ1bmN0b3Ig
ewogICAgIEdhdGhlckV4dHJhSGVhcERhdGEoVk0mIHZtLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVy
KQpAQCAtMTQxMyw3ICsxNDIyLDcgQEAgTkVWRVJfSU5MSU5FIGJvb2wgSGVhcDo6cnVuRml4cG9p
bnRQaGFzZQogICAgIC8vIFRoaXMgZG9lc24ndCBoYXZlIHRvIGNoZWNrIHRoZSBtdXRhdG9yIFNs
b3RWaXNpdG9yIGJlY2F1c2UgdGhhdCBvbmUgYmVjb21lcyBlbXB0eSBhZnRlciBldmVyeSBHQwog
ICAgIC8vIHdvcmsgaW5jcmVtZW50LCBzbyBpdCBtdXN0IGJlIGVtcHR5IG5vdy4KICAgICBpZiAo
c2xvdFZpc2l0b3IuZGlkUmVhY2hUZXJtaW5hdGlvbigpKQotICAgICAgICByZXR1cm4gdHJ1ZTsg
Ly8gVGhpcyBpcyBsaWtlIHJlbG9vcGluZyB0byB0aGUgdG9wIGlmIHJ1bkZpeHBvaW50UGhhc2Uo
KS4KKyAgICAgICAgcmV0dXJuIHRydWU7IC8vIFRoaXMgaXMgbGlrZSByZWxvb3BpbmcgdG8gdGhl
IHRvcCBvZiBydW5GaXhwb2ludFBoYXNlKCkuCiAgICAgICAgIAogICAgIGlmICghbV9zY2hlZHVs
ZXItPnNob3VsZFJlc3VtZSgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTE0OTMsNiArMTUw
MiwxMSBAQCBORVZFUl9JTkxJTkUgYm9vbCBIZWFwOjpydW5FbmRQaGFzZShHQ0NvCiAgICAgdXBk
YXRlT2JqZWN0Q291bnRzKCk7CiAgICAgZW5kTWFya2luZygpOwogCisgICAgLy8gbWxhbQorICAg
IGlmIChVTkxJS0VMWShPcHRpb25zOjp2ZXJpZnlHQygpKSkKKyAgICAgICAgdmVyaWZ5R0MoKTsK
KyAgICAvLyBtbGFtICovCisKICAgICBpZiAoVU5MSUtFTFkobV92ZXJpZmllcikpIHsKICAgICAg
ICAgbV92ZXJpZmllci0+Z2F0aGVyTGl2ZUNlbGxzKEhlYXBWZXJpZmllcjo6UGhhc2U6OkFmdGVy
TWFya2luZyk7CiAgICAgICAgIG1fdmVyaWZpZXItPnZlcmlmeShIZWFwVmVyaWZpZXI6OlBoYXNl
OjpBZnRlck1hcmtpbmcpOwpAQCAtMjE3MCw2ICsyMTg0LDEzIEBAIHZvaWQgSGVhcDo6c3VzcGVu
ZENvbXBpbGVyVGhyZWFkcygpCiAKIHZvaWQgSGVhcDo6d2lsbFN0YXJ0Q29sbGVjdGlvbigpCiB7
CisgICAgLy8gbWxhbQorICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjp2ZXJpZnlHQygpKSkgewor
ICAgICAgICBtX3ZlcmlmaWVyU2xvdFZpc2l0b3IgPSBtYWtlVW5pcXVlPFZlcmlmaWVyU2xvdFZp
c2l0b3I+KCp0aGlzKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoIW1faXNWZXJpZnlpbmdHQyk7
IC8vIG1sYW0gVEVTVCBzYW5pdHkgY2hlY2suCisgICAgfQorICAgIC8vIG1sYW0gKi8KKwogICAg
IGRhdGFMb2dJZihPcHRpb25zOjpsb2dHQygpLCAiPT4gIik7CiAgICAgCiAgICAgaWYgKHNob3Vs
ZERvRnVsbENvbGxlY3Rpb24oKSkgewpAQCAtMjY5NywxMyArMjcxOCwxOSBAQCB2b2lkIEhlYXA6
OmRpZEZyZWVCbG9jayhzaXplX3QgY2FwYWNpdHkpCiAjZW5kaWYKIH0KIAorLy8gbWxhbSBGSVhN
RQogdm9pZCBIZWFwOjphZGRDb3JlQ29uc3RyYWludHMoKQogewogICAgIG1fY29uc3RyYWludFNl
dC0+YWRkKAogICAgICAgICAiQ3MiLCAiQ29uc2VydmF0aXZlIFNjYW4iLAotICAgICAgICBbdGhp
cywgbGFzdFZlcnNpb24gPSBzdGF0aWNfY2FzdDx1aW50NjRfdD4oMCldIChTbG90VmlzaXRvciYg
c2xvdFZpc2l0b3IpIG11dGFibGUgeworICAgICAgICBbdGhpcywgbGFzdFZlcnNpb24gPSBzdGF0
aWNfY2FzdDx1aW50NjRfdD4oMCldIChBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBtdXRh
YmxlIHsKICAgICAgICAgICAgIGJvb2wgc2hvdWxkTm90UHJvZHVjZVdvcmsgPSBsYXN0VmVyc2lv
biA9PSBtX3BoYXNlVmVyc2lvbjsKLSAgICAgICAgICAgIGlmIChzaG91bGROb3RQcm9kdWNlV29y
aykKKworICAgICAgICAgICAgLy8gRm9yIHRoZSBHQyBWZXJmaWVyLCB3ZSB3b3VsZCBsaWtlIHRv
IHVzZSB0aGUgaWRlbnRpY2FsIHNldCBvZiBjb25zZXJ2YXRpdmUgcm9vdHMKKyAgICAgICAgICAg
IC8vIGFzIHRoZSByZWFsIEdDLiBPdGhlcndpc2UsIHRoZSBHQyB2ZXJpZmllciBtYXkgcmVwb3J0
IGZhbHNlIG5lZ2F0aXZlcyBkdWUgdG8KKyAgICAgICAgICAgIC8vIHZhcmlhdGlvbnMgaW4gc3Rh
Y2sgdmFsdWVzLiBGb3IgdGhpcyBzYW1lIHJlYXNvbiwgd2Ugd2lsbCBza2lwIHRoaXMgY29uc3Ry
YWludAorICAgICAgICAgICAgLy8gd2hlbiB3ZSdyZSBydW5uaW5nIHRoZSBHQyB2ZXJpZmljYXRp
b24gaW4gdGhlIEVuZCBwaGFzZS4KKyAgICAgICAgICAgIGlmIChzaG91bGROb3RQcm9kdWNlV29y
ayB8fCBtX2lzVmVyaWZ5aW5nR0MpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAg
ICAgCiAgICAgICAgICAgICBUaW1pbmdTY29wZSBwcmVDb252ZXJnZW5jZVRpbWluZ1Njb3BlKCp0
aGlzLCAiQ29uc3RyYWludDogY29uc2VydmF0aXZlIHNjYW4iKTsKQEAgLTI3MTgsMTMgKzI3NDUs
MTcgQEAgdm9pZCBIZWFwOjphZGRDb3JlQ29uc3RyYWludHMoKQogICAgICAgICAgICAgICAgIGdh
dGhlckpTU3RhY2tSb290cyhjb25zZXJ2YXRpdmVSb290cyk7CiAgICAgICAgICAgICAgICAgZ2F0
aGVyU2NyYXRjaEJ1ZmZlclJvb3RzKGNvbnNlcnZhdGl2ZVJvb3RzKTsKIAotICAgICAgICAgICAg
ICAgIFNldFJvb3RNYXJrUmVhc29uU2NvcGUgcm9vdFNjb3BlKHNsb3RWaXNpdG9yLCBTbG90Vmlz
aXRvcjo6Um9vdE1hcmtSZWFzb246OkNvbnNlcnZhdGl2ZVNjYW4pOwotICAgICAgICAgICAgICAg
IHNsb3RWaXNpdG9yLmFwcGVuZChjb25zZXJ2YXRpdmVSb290cyk7CisgICAgICAgICAgICAgICAg
U2V0Um9vdE1hcmtSZWFzb25TY29wZSByb290U2NvcGUodmlzaXRvciwgQWJzdHJhY3RTbG90Vmlz
aXRvcjo6Um9vdE1hcmtSZWFzb246OkNvbnNlcnZhdGl2ZVNjYW4pOworICAgICAgICAgICAgICAg
IHZpc2l0b3IuYXBwZW5kX0NvbnNlcnZhdGl2ZVJvb3RzKGNvbnNlcnZhdGl2ZVJvb3RzKTsKKyAg
ICAgICAgICAgICAgICBpZiAoVU5MSUtFTFkobV92ZXJpZmllclNsb3RWaXNpdG9yKSkKKyAgICAg
ICAgICAgICAgICAgICAgbV92ZXJpZmllclNsb3RWaXNpdG9yLT5hcHBlbmRfQ29uc2VydmF0aXZl
Um9vdHMoY29uc2VydmF0aXZlUm9vdHMpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYg
KE9wdGlvbnM6OnVzZUpJVCgpKSB7CiAgICAgICAgICAgICAgICAgLy8gSklUU3R1YlJvdXRpbmVz
IG11c3QgYmUgdmlzaXRlZCBhZnRlciBzY2FubmluZyBDb25zZXJ2YXRpdmVSb290cyBzaW5jZSBK
SVRTdHViUm91dGluZXMgZGVwZW5kIG9uIHRoZSBob29rIGV4ZWN1dGVkIGR1cmluZyBnYXRoZXJp
bmcgQ29uc2VydmF0aXZlUm9vdHMuCi0gICAgICAgICAgICAgICAgU2V0Um9vdE1hcmtSZWFzb25T
Y29wZSByb290U2NvcGUoc2xvdFZpc2l0b3IsIFNsb3RWaXNpdG9yOjpSb290TWFya1JlYXNvbjo6
SklUU3R1YlJvdXRpbmVzKTsKLSAgICAgICAgICAgICAgICBtX2ppdFN0dWJSb3V0aW5lcy0+dHJh
Y2VNYXJrZWRTdHViUm91dGluZXMoc2xvdFZpc2l0b3IpOworICAgICAgICAgICAgICAgIFNldFJv
b3RNYXJrUmVhc29uU2NvcGUgcm9vdFNjb3BlKHZpc2l0b3IsIEFic3RyYWN0U2xvdFZpc2l0b3I6
OlJvb3RNYXJrUmVhc29uOjpKSVRTdHViUm91dGluZXMpOworICAgICAgICAgICAgICAgIG1faml0
U3R1YlJvdXRpbmVzLT50cmFjZU1hcmtlZFN0dWJSb3V0aW5lczEodmlzaXRvcik7CisgICAgICAg
ICAgICAgICAgaWYgKFVOTElLRUxZKG1fdmVyaWZpZXJTbG90VmlzaXRvcikpCisgICAgICAgICAg
ICAgICAgICAgIG1faml0U3R1YlJvdXRpbmVzLT50cmFjZU1hcmtlZFN0dWJSb3V0aW5lczEoKm1f
dmVyaWZpZXJTbG90VmlzaXRvcik7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAg
ICAgICAgIGxhc3RWZXJzaW9uID0gbV9waGFzZVZlcnNpb247CkBAIC0yNzMzLDkyICsyNzY0LDky
IEBAIHZvaWQgSGVhcDo6YWRkQ29yZUNvbnN0cmFpbnRzKCkKICAgICAKICAgICBtX2NvbnN0cmFp
bnRTZXQtPmFkZCgKICAgICAgICAgIk1zciIsICJNaXNjIFNtYWxsIFJvb3RzIiwKLSAgICAgICAg
W3RoaXNdIChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IpIHsKKyAgICAgICAgW3RoaXNdIChBYnN0
cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKSB7CiAKICNpZiBKU0NfT0JKQ19BUElfRU5BQkxFRAot
ICAgICAgICAgICAgc2NhbkV4dGVybmFsUmVtZW1iZXJlZFNldChtX3ZtLCBzbG90VmlzaXRvcik7
CisgICAgICAgICAgICBzY2FuRXh0ZXJuYWxSZW1lbWJlcmVkU2V0KG1fdm0sIHZpc2l0b3IpOwog
I2VuZGlmCiAgICAgICAgICAgICBpZiAobV92bS5zbWFsbFN0cmluZ3MubmVlZHNUb0JlVmlzaXRl
ZCgqbV9jb2xsZWN0aW9uU2NvcGUpKSB7Ci0gICAgICAgICAgICAgICAgU2V0Um9vdE1hcmtSZWFz
b25TY29wZSByb290U2NvcGUoc2xvdFZpc2l0b3IsIFNsb3RWaXNpdG9yOjpSb290TWFya1JlYXNv
bjo6U3Ryb25nUmVmZXJlbmNlcyk7Ci0gICAgICAgICAgICAgICAgbV92bS5zbWFsbFN0cmluZ3Mu
dmlzaXRTdHJvbmdSZWZlcmVuY2VzKHNsb3RWaXNpdG9yKTsKKyAgICAgICAgICAgICAgICBTZXRS
b290TWFya1JlYXNvblNjb3BlIHJvb3RTY29wZSh2aXNpdG9yLCBBYnN0cmFjdFNsb3RWaXNpdG9y
OjpSb290TWFya1JlYXNvbjo6U3Ryb25nUmVmZXJlbmNlcyk7CisgICAgICAgICAgICAgICAgbV92
bS5zbWFsbFN0cmluZ3MudmlzaXRTdHJvbmdSZWZlcmVuY2VzKHZpc2l0b3IpOwogICAgICAgICAg
ICAgfQogICAgICAgICAgICAgCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgU2V0Um9v
dE1hcmtSZWFzb25TY29wZSByb290U2NvcGUoc2xvdFZpc2l0b3IsIFNsb3RWaXNpdG9yOjpSb290
TWFya1JlYXNvbjo6UHJvdGVjdGVkVmFsdWVzKTsKKyAgICAgICAgICAgICAgICBTZXRSb290TWFy
a1JlYXNvblNjb3BlIHJvb3RTY29wZSh2aXNpdG9yLCBBYnN0cmFjdFNsb3RWaXNpdG9yOjpSb290
TWFya1JlYXNvbjo6UHJvdGVjdGVkVmFsdWVzKTsKICAgICAgICAgICAgICAgICBmb3IgKGF1dG8m
IHBhaXIgOiBtX3Byb3RlY3RlZFZhbHVlcykKLSAgICAgICAgICAgICAgICAgICAgc2xvdFZpc2l0
b3IuYXBwZW5kVW5iYXJyaWVyZWQocGFpci5rZXkpOworICAgICAgICAgICAgICAgICAgICB2aXNp
dG9yLmFwcGVuZFVuYmFycmllcmVkKHBhaXIua2V5KTsKICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIAogICAgICAgICAgICAgaWYgKG1fbWFya0xpc3RTZXQgJiYgbV9tYXJrTGlzdFNldC0+c2l6
ZSgpKSB7Ci0gICAgICAgICAgICAgICAgU2V0Um9vdE1hcmtSZWFzb25TY29wZSByb290U2NvcGUo
c2xvdFZpc2l0b3IsIFNsb3RWaXNpdG9yOjpSb290TWFya1JlYXNvbjo6Q29uc2VydmF0aXZlU2Nh
bik7Ci0gICAgICAgICAgICAgICAgTWFya2VkQXJndW1lbnRCdWZmZXI6Om1hcmtMaXN0cyhzbG90
VmlzaXRvciwgKm1fbWFya0xpc3RTZXQpOworICAgICAgICAgICAgICAgIFNldFJvb3RNYXJrUmVh
c29uU2NvcGUgcm9vdFNjb3BlKHZpc2l0b3IsIEFic3RyYWN0U2xvdFZpc2l0b3I6OlJvb3RNYXJr
UmVhc29uOjpDb25zZXJ2YXRpdmVTY2FuKTsKKyAgICAgICAgICAgICAgICBNYXJrZWRBcmd1bWVu
dEJ1ZmZlcjo6bWFya0xpc3RzKHZpc2l0b3IsICptX21hcmtMaXN0U2V0KTsKICAgICAgICAgICAg
IH0KIAogICAgICAgICAgICAgbV9tYXJrZWRKU1ZhbHVlUmVmQXJyYXlzLmZvckVhY2goWyZdIChN
YXJrZWRKU1ZhbHVlUmVmQXJyYXkqIGFycmF5KSB7Ci0gICAgICAgICAgICAgICAgYXJyYXktPnZp
c2l0QWdncmVnYXRlKHNsb3RWaXNpdG9yKTsKKyAgICAgICAgICAgICAgICBhcnJheS0+dmlzaXRB
Z2dyZWdhdGUxKHZpc2l0b3IpOwogICAgICAgICAgICAgfSk7CiAKICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICBTZXRSb290TWFya1JlYXNvblNjb3BlIHJvb3RTY29wZShzbG90VmlzaXRv
ciwgU2xvdFZpc2l0b3I6OlJvb3RNYXJrUmVhc29uOjpWTUV4Y2VwdGlvbnMpOwotICAgICAgICAg
ICAgICAgIHNsb3RWaXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKG1fdm0uZXhjZXB0aW9uKCkpOwot
ICAgICAgICAgICAgICAgIHNsb3RWaXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKG1fdm0ubGFzdEV4
Y2VwdGlvbigpKTsKKyAgICAgICAgICAgICAgICBTZXRSb290TWFya1JlYXNvblNjb3BlIHJvb3RT
Y29wZSh2aXNpdG9yLCBBYnN0cmFjdFNsb3RWaXNpdG9yOjpSb290TWFya1JlYXNvbjo6Vk1FeGNl
cHRpb25zKTsKKyAgICAgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKG1fdm0u
ZXhjZXB0aW9uKCkpOworICAgICAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQo
bV92bS5sYXN0RXhjZXB0aW9uKCkpOwogICAgICAgICAgICAgfQogICAgICAgICB9LAogICAgICAg
ICBDb25zdHJhaW50Vm9sYXRpbGl0eTo6R3JleWVkQnlFeGVjdXRpb24pOwogICAgIAogICAgIG1f
Y29uc3RyYWludFNldC0+YWRkKAogICAgICAgICAiU2giLCAiU3Ryb25nIEhhbmRsZXMiLAotICAg
ICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvcikgewotICAgICAgICAgICAgU2V0
Um9vdE1hcmtSZWFzb25TY29wZSByb290U2NvcGUoc2xvdFZpc2l0b3IsIFNsb3RWaXNpdG9yOjpS
b290TWFya1JlYXNvbjo6U3Ryb25nSGFuZGxlcyk7Ci0gICAgICAgICAgICBtX2hhbmRsZVNldC52
aXNpdFN0cm9uZ0hhbmRsZXMoc2xvdFZpc2l0b3IpOworICAgICAgICBbdGhpc10gKEFic3RyYWN0
U2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsKKyAgICAgICAgICAgIFNldFJvb3RNYXJrUmVhc29uU2Nv
cGUgcm9vdFNjb3BlKHZpc2l0b3IsIEFic3RyYWN0U2xvdFZpc2l0b3I6OlJvb3RNYXJrUmVhc29u
OjpTdHJvbmdIYW5kbGVzKTsKKyAgICAgICAgICAgIG1faGFuZGxlU2V0LnZpc2l0U3Ryb25nSGFu
ZGxlczEodmlzaXRvcik7CiAgICAgICAgIH0sCiAgICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5
OjpHcmV5ZWRCeUV4ZWN1dGlvbik7CiAgICAgCiAgICAgbV9jb25zdHJhaW50U2V0LT5hZGQoCiAg
ICAgICAgICJEIiwgIkRlYnVnZ2VyIiwKLSAgICAgICAgW3RoaXNdIChTbG90VmlzaXRvciYgc2xv
dFZpc2l0b3IpIHsKLSAgICAgICAgICAgIFNldFJvb3RNYXJrUmVhc29uU2NvcGUgcm9vdFNjb3Bl
KHNsb3RWaXNpdG9yLCBTbG90VmlzaXRvcjo6Um9vdE1hcmtSZWFzb246OkRlYnVnZ2VyKTsKKyAg
ICAgICAgW3RoaXNdIChBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKSB7CisgICAgICAgICAg
ICBTZXRSb290TWFya1JlYXNvblNjb3BlIHJvb3RTY29wZSh2aXNpdG9yLCBBYnN0cmFjdFNsb3RW
aXNpdG9yOjpSb290TWFya1JlYXNvbjo6RGVidWdnZXIpOwogCiAjaWYgRU5BQkxFKFNBTVBMSU5H
X1BST0ZJTEVSKQogICAgICAgICAgICAgaWYgKFNhbXBsaW5nUHJvZmlsZXIqIHNhbXBsaW5nUHJv
ZmlsZXIgPSBtX3ZtLnNhbXBsaW5nUHJvZmlsZXIoKSkgewogICAgICAgICAgICAgICAgIGF1dG8g
bG9ja2VyID0gaG9sZExvY2soc2FtcGxpbmdQcm9maWxlci0+Z2V0TG9jaygpKTsKICAgICAgICAg
ICAgICAgICBzYW1wbGluZ1Byb2ZpbGVyLT5wcm9jZXNzVW52ZXJpZmllZFN0YWNrVHJhY2VzKGxv
Y2tlcik7Ci0gICAgICAgICAgICAgICAgc2FtcGxpbmdQcm9maWxlci0+dmlzaXQoc2xvdFZpc2l0
b3IpOworICAgICAgICAgICAgICAgIHNhbXBsaW5nUHJvZmlsZXItPnZpc2l0KHZpc2l0b3IpOwog
ICAgICAgICAgICAgICAgIGlmIChPcHRpb25zOjpsb2dHQygpID09IEdDTG9nZ2luZzo6VmVyYm9z
ZSkKLSAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiU2FtcGxpbmcgUHJvZmlsZXIgZGF0YTpc
biIsIHNsb3RWaXNpdG9yKTsKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiU2FtcGxpbmcg
UHJvZmlsZXIgZGF0YTpcbiIsIHZpc2l0b3IpOwogICAgICAgICAgICAgfQogI2VuZGlmIC8vIEVO
QUJMRShTQU1QTElOR19QUk9GSUxFUikKIAogICAgICAgICAgICAgaWYgKG1fdm0udHlwZVByb2Zp
bGVyKCkpCi0gICAgICAgICAgICAgICAgbV92bS50eXBlUHJvZmlsZXJMb2coKS0+dmlzaXQoc2xv
dFZpc2l0b3IpOworICAgICAgICAgICAgICAgIG1fdm0udHlwZVByb2ZpbGVyTG9nKCktPnZpc2l0
KHZpc2l0b3IpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAoYXV0byogc2hhZG93Q2hp
Y2tlbiA9IG1fdm0uc2hhZG93Q2hpY2tlbigpKQotICAgICAgICAgICAgICAgIHNoYWRvd0NoaWNr
ZW4tPnZpc2l0Q2hpbGRyZW4oc2xvdFZpc2l0b3IpOworICAgICAgICAgICAgICAgIHNoYWRvd0No
aWNrZW4tPnZpc2l0Q2hpbGRyZW4odmlzaXRvcik7CiAgICAgICAgIH0sCiAgICAgICAgIENvbnN0
cmFpbnRWb2xhdGlsaXR5OjpHcmV5ZWRCeUV4ZWN1dGlvbik7CiAgICAgCiAgICAgbV9jb25zdHJh
aW50U2V0LT5hZGQoCiAgICAgICAgICJXcyIsICJXZWFrIFNldHMiLAotICAgICAgICBbdGhpc10g
KFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvcikgewotICAgICAgICAgICAgU2V0Um9vdE1hcmtSZWFz
b25TY29wZSByb290U2NvcGUoc2xvdFZpc2l0b3IsIFNsb3RWaXNpdG9yOjpSb290TWFya1JlYXNv
bjo6V2Vha1NldHMpOwotICAgICAgICAgICAgbV9vYmplY3RTcGFjZS52aXNpdFdlYWtTZXRzKHNs
b3RWaXNpdG9yKTsKKyAgICAgICAgW3RoaXNdIChBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9y
KSB7CisgICAgICAgICAgICBTZXRSb290TWFya1JlYXNvblNjb3BlIHJvb3RTY29wZSh2aXNpdG9y
LCBBYnN0cmFjdFNsb3RWaXNpdG9yOjpSb290TWFya1JlYXNvbjo6V2Vha1NldHMpOworICAgICAg
ICAgICAgbV9vYmplY3RTcGFjZS52aXNpdFdlYWtTZXRzMSh2aXNpdG9yKTsKICAgICAgICAgfSwK
ICAgICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHk6OkdyZXllZEJ5TWFya2luZyk7CiAgICAgCiAg
ICAgbV9jb25zdHJhaW50U2V0LT5hZGQoCiAgICAgICAgICJPIiwgIk91dHB1dCIsCi0gICAgICAg
IFtdIChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IpIHsKLSAgICAgICAgICAgIFZNJiB2bSA9IHNs
b3RWaXNpdG9yLnZtKCk7CisgICAgICAgIFtdIChBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9y
KSB7CisgICAgICAgICAgICBWTSYgdm0gPSB2aXNpdG9yLnZtKCk7CiAKLSAgICAgICAgICAgIGF1
dG8gY2FsbE91dHB1dENvbnN0cmFpbnQgPSBbXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yLCBI
ZWFwQ2VsbCogaGVhcENlbGwsIEhlYXBDZWxsOjpLaW5kKSB7Ci0gICAgICAgICAgICAgICAgU2V0
Um9vdE1hcmtSZWFzb25TY29wZSByb290U2NvcGUoc2xvdFZpc2l0b3IsIFNsb3RWaXNpdG9yOjpS
b290TWFya1JlYXNvbjo6T3V0cHV0KTsKLSAgICAgICAgICAgICAgICBWTSYgdm0gPSBzbG90Vmlz
aXRvci52bSgpOworICAgICAgICAgICAgYXV0byBjYWxsT3V0cHV0Q29uc3RyYWludCA9IFtdIChB
YnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBIZWFwQ2VsbCogaGVhcENlbGwsIEhlYXBDZWxs
OjpLaW5kKSB7CisgICAgICAgICAgICAgICAgU2V0Um9vdE1hcmtSZWFzb25TY29wZSByb290U2Nv
cGUodmlzaXRvciwgQWJzdHJhY3RTbG90VmlzaXRvcjo6Um9vdE1hcmtSZWFzb246Ok91dHB1dCk7
CisgICAgICAgICAgICAgICAgVk0mIHZtID0gdmlzaXRvci52bSgpOwogICAgICAgICAgICAgICAg
IEpTQ2VsbCogY2VsbCA9IHN0YXRpY19jYXN0PEpTQ2VsbCo+KGhlYXBDZWxsKTsKLSAgICAgICAg
ICAgICAgICBjZWxsLT5tZXRob2RUYWJsZSh2bSktPnZpc2l0T3V0cHV0Q29uc3RyYWludHMoY2Vs
bCwgc2xvdFZpc2l0b3IpOworICAgICAgICAgICAgICAgIGNlbGwtPm1ldGhvZFRhYmxlKHZtKS0+
dmlzaXRPdXRwdXRDb25zdHJhaW50cyhjZWxsLCB2aXNpdG9yKTsKICAgICAgICAgICAgIH07CiAg
ICAgICAgICAgICAKICAgICAgICAgICAgIGF1dG8gYWRkID0gWyZdIChhdXRvJiBzZXQpIHsKLSAg
ICAgICAgICAgICAgICBzbG90VmlzaXRvci5hZGRQYXJhbGxlbENvbnN0cmFpbnRUYXNrKHNldC5m
b3JFYWNoTWFya2VkQ2VsbEluUGFyYWxsZWwoY2FsbE91dHB1dENvbnN0cmFpbnQpKTsKKyAgICAg
ICAgICAgICAgICB2aXNpdG9yLmFkZFBhcmFsbGVsQ29uc3RyYWludFRhc2soc2V0LmZvckVhY2hN
YXJrZWRDZWxsSW5QYXJhbGxlbChjYWxsT3V0cHV0Q29uc3RyYWludCkpOwogICAgICAgICAgICAg
fTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgYWRkKHZtLmV4ZWN1dGFibGVUb0NvZGVCbG9j
a0VkZ2VzV2l0aENvbnN0cmFpbnRzKTsKQEAgLTI4MzIsMjIgKzI4NjMsMjIgQEAgdm9pZCBIZWFw
OjphZGRDb3JlQ29uc3RyYWludHMoKQogICAgIGlmIChPcHRpb25zOjp1c2VKSVQoKSkgewogICAg
ICAgICBtX2NvbnN0cmFpbnRTZXQtPmFkZCgKICAgICAgICAgICAgICJEdyIsICJERkcgV29ya2xp
c3RzIiwKLSAgICAgICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yKSB7Ci0g
ICAgICAgICAgICAgICAgU2V0Um9vdE1hcmtSZWFzb25TY29wZSByb290U2NvcGUoc2xvdFZpc2l0
b3IsIFNsb3RWaXNpdG9yOjpSb290TWFya1JlYXNvbjo6REZHV29ya0xpc3RzKTsKKyAgICAgICAg
ICAgIFt0aGlzXSAoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikgeworICAgICAgICAgICAg
ICAgIFNldFJvb3RNYXJrUmVhc29uU2NvcGUgcm9vdFNjb3BlKHZpc2l0b3IsIEFic3RyYWN0U2xv
dFZpc2l0b3I6OlJvb3RNYXJrUmVhc29uOjpERkdXb3JrTGlzdHMpOwogCiAgICAgICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gREZHOjpudW1iZXJPZldvcmtsaXN0cygpOyBpLS07KQotICAg
ICAgICAgICAgICAgICAgICBERkc6OmV4aXN0aW5nV29ya2xpc3RGb3JJbmRleChpKS52aXNpdFdl
YWtSZWZlcmVuY2VzKHNsb3RWaXNpdG9yKTsKKyAgICAgICAgICAgICAgICAgICAgREZHOjpleGlz
dGluZ1dvcmtsaXN0Rm9ySW5kZXgoaSkudmlzaXRXZWFrUmVmZXJlbmNlcyh2aXNpdG9yKTsKICAg
ICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAvLyBGSVhNRTogVGhpcyBpcyBhbG1vc3Qg
Y2VydGFpbmx5IHVubmVjZXNzYXJ5LgogICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjY4MjkKICAgICAgICAgICAgICAgICBERkc6Oml0
ZXJhdGVDb2RlQmxvY2tzRm9yR0MoCiAgICAgICAgICAgICAgICAgICAgIG1fdm0sCiAgICAgICAg
ICAgICAgICAgICAgIFsmXSAoQ29kZUJsb2NrKiBjb2RlQmxvY2spIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHNsb3RWaXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKGNvZGVCbG9jayk7CisgICAg
ICAgICAgICAgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKGNvZGVCbG9jayk7
CiAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg
ICAgIGlmIChPcHRpb25zOjpsb2dHQygpID09IEdDTG9nZ2luZzo6VmVyYm9zZSkKLSAgICAgICAg
ICAgICAgICAgICAgZGF0YUxvZygiREZHIFdvcmtsaXN0czpcbiIsIHNsb3RWaXNpdG9yKTsKKyAg
ICAgICAgICAgICAgICAgICAgZGF0YUxvZygiREZHIFdvcmtsaXN0czpcbiIsIHZpc2l0b3IpOwog
ICAgICAgICAgICAgfSwKICAgICAgICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5OjpHcmV5ZWRC
eU1hcmtpbmcpOwogICAgIH0KQEAgLTI4NTUsMTQgKzI4ODYsMTQgQEAgdm9pZCBIZWFwOjphZGRD
b3JlQ29uc3RyYWludHMoKQogICAgIAogICAgIG1fY29uc3RyYWludFNldC0+YWRkKAogICAgICAg
ICAiQ2IiLCAiQ29kZUJsb2NrcyIsCi0gICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RW
aXNpdG9yKSB7Ci0gICAgICAgICAgICBTZXRSb290TWFya1JlYXNvblNjb3BlIHJvb3RTY29wZShz
bG90VmlzaXRvciwgU2xvdFZpc2l0b3I6OlJvb3RNYXJrUmVhc29uOjpDb2RlQmxvY2tzKTsKKyAg
ICAgICAgW3RoaXNdIChBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKSB7CisgICAgICAgICAg
ICBTZXRSb290TWFya1JlYXNvblNjb3BlIHJvb3RTY29wZSh2aXNpdG9yLCBBYnN0cmFjdFNsb3RW
aXNpdG9yOjpSb290TWFya1JlYXNvbjo6Q29kZUJsb2Nrcyk7CiAgICAgICAgICAgICBpdGVyYXRl
RXhlY3V0aW5nQW5kQ29tcGlsaW5nQ29kZUJsb2Nrc1dpdGhvdXRIb2xkaW5nTG9ja3MoCiAgICAg
ICAgICAgICAgICAgWyZdIChDb2RlQmxvY2sqIGNvZGVCbG9jaykgewogICAgICAgICAgICAgICAg
ICAgICAvLyBWaXNpdCB0aGUgQ29kZUJsb2NrIGFzIGEgY29uc3RyYWludCBvbmx5IGlmIGl0J3Mg
YmxhY2suCiAgICAgICAgICAgICAgICAgICAgIGlmIChpc01hcmtlZChjb2RlQmxvY2spCiAgICAg
ICAgICAgICAgICAgICAgICAgICAmJiBjb2RlQmxvY2stPmNlbGxTdGF0ZSgpID09IENlbGxTdGF0
ZTo6UG9zc2libHlCbGFjaykKLSAgICAgICAgICAgICAgICAgICAgICAgIHNsb3RWaXNpdG9yLnZp
c2l0QXNDb25zdHJhaW50KGNvZGVCbG9jayk7CisgICAgICAgICAgICAgICAgICAgICAgICB2aXNp
dG9yLnZpc2l0QXNDb25zdHJhaW50KGNvZGVCbG9jayk7CiAgICAgICAgICAgICAgICAgfSk7CiAg
ICAgICAgIH0sCiAgICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5OjpTZWxkb21HcmV5ZWQpOwpA
QCAtMzAyMyw0ICszMDU0LDI1IEBAIHZvaWQgSGVhcDo6cnVuVGFza0luUGFyYWxsZWwoUmVmUHRy
PFNoYXIKICAgICB9CiB9CiAKKy8vIG1sYW0KK3ZvaWQgSGVhcDo6dmVyaWZ5R0MoKQoreworICAg
IFJFTEVBU0VfQVNTRVJUKG1fdmVyaWZpZXJTbG90VmlzaXRvcik7CisgICAgUkVMRUFTRV9BU1NF
UlQoIW1faXNWZXJpZnlpbmdHQyk7CisgICAgbV9pc1ZlcmlmeWluZ0dDID0gdHJ1ZTsKKworICAg
IFZlcmlmaWVyU2xvdFZpc2l0b3ImIHZpc2l0b3IgPSAqbV92ZXJpZmllclNsb3RWaXNpdG9yOwor
CisgICAgUkVMRUFTRV9BU1NFUlQobV9tdXRhdG9yTWFya1N0YWNrLT5pc0VtcHR5KCkpOworICAg
IFJFTEVBU0VfQVNTRVJUKG1fcmFjZU1hcmtTdGFjay0+aXNFbXB0eSgpKTsKKyAgICBkbyB7Cisg
ICAgICAgIHZpc2l0b3IuZHJhaW4oKTsKKyAgICAgICAgbV9jb25zdHJhaW50U2V0LT5leGVjdXRl
QWxsKHZpc2l0b3IpOworICAgIH0gd2hpbGUgKCF2aXNpdG9yLmlzRW1wdHkoKSk7CisKKyAgICBt
X3ZlcmlmaWVyU2xvdFZpc2l0b3IgPSBudWxscHRyOworICAgIG1faXNWZXJpZnlpbmdHQyA9IGZh
bHNlOworfQorLy8gbWxhbSAqLworCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9IZWFwLmgJKHJldmlzaW9uIDI3MTc4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0hlYXAuaAkod29ya2luZyBjb3B5KQpAQCAtODYsNiArODYsNyBAQCBjbGFzcyBT
cGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyOwogY2xhc3MgU3RvcElmTmVjZXNzYXJ5VGltZXI7CiBj
bGFzcyBTd2VlcGluZ1Njb3BlOwogY2xhc3MgVk07CitjbGFzcyBWZXJpZmllclNsb3RWaXNpdG9y
OwogY2xhc3MgV2Vha0dDTWFwQmFzZTsKIHN0cnVjdCBDdXJyZW50VGhyZWFkU3RhdGU7CiAKQEAg
LTE4NCw3ICsxODUsOSBAQCBwdWJsaWM6CiAgICAgCiAgICAgYm9vbCBpc1NodXR0aW5nRG93bigp
IGNvbnN0IHsgcmV0dXJuIG1faXNTaHV0dGluZ0Rvd247IH0KIAotICAgIEpTX0VYUE9SVF9QUklW
QVRFIGJvb2wgaXNBbmFseXppbmdIZWFwKCkgY29uc3Q7CisvLyAgICBKU19FWFBPUlRfUFJJVkFU
RSBib29sIGlzQW5hbHl6aW5nSGVhcCgpIGNvbnN0OworLy8gICAgYm9vbCBpc0FuYWx5emluZ0hl
YXAoKSBjb25zdCB7IHJldHVybiBtX2hlYXBBbmFseXplcjsgfQorLy8gICAgSGVhcEFuYWx5emVy
KiBoZWFwQW5hbHl6ZXIoKSBjb25zdCB7IHJldHVybiBtX2hlYXBBbmFseXplcjsgfQogCiAgICAg
SlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBzd2VlcFN5bmNocm9ub3VzbHkoKTsKIApAQCAtMzg1LDgg
KzM4OCw4IEBAIHB1YmxpYzoKICAgICAKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGFkZE1h
cmtpbmdDb25zdHJhaW50KHN0ZDo6dW5pcXVlX3B0cjxNYXJraW5nQ29uc3RyYWludD4pOwogICAg
IAotICAgIHNpemVfdCBudW1PcGFxdWVSb290cygpIGNvbnN0IHsgcmV0dXJuIG1fb3BhcXVlUm9v
dHMuc2l6ZSgpOyB9Ci0KKy8vICAgIHNpemVfdCBudW1PcGFxdWVSb290cygpIGNvbnN0IHsgcmV0
dXJuIG1fb3BhcXVlUm9vdHMuc2l6ZSgpOyB9IC8vIG1sYW0gVU5VU0VECisvLwogICAgIEhlYXBW
ZXJpZmllciogdmVyaWZpZXIoKSBjb25zdCB7IHJldHVybiBtX3ZlcmlmaWVyLmdldCgpOyB9CiAg
ICAgCiAgICAgdm9pZCBhZGRIZWFwRmluYWxpemVyQ2FsbGJhY2soY29uc3QgSGVhcEZpbmFsaXpl
ckNhbGxiYWNrJik7CkBAIC01OTAsNiArNTkzLDggQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgYm9v
bCB1c2VHZW5lcmF0aW9uYWxHQygpOwogICAgIHN0YXRpYyBib29sIHNob3VsZFN3ZWVwU3luY2hy
b25vdXNseSgpOwogICAgIAorICAgIHZvaWQgdmVyaWZ5R0MoKTsKKwogICAgIGNvbnN0IEhlYXBU
eXBlIG1faGVhcFR5cGU7CiAgICAgTXV0YXRvclN0YXRlIG1fbXV0YXRvclN0YXRlIHsgTXV0YXRv
clN0YXRlOjpSdW5uaW5nIH07CiAgICAgY29uc3Qgc2l6ZV90IG1fcmFtU2l6ZTsKQEAgLTYzNiw2
ICs2NDEsNyBAQCBwcml2YXRlOgogICAgIHN0ZDo6dW5pcXVlX3B0cjxNYXJrU3RhY2tBcnJheT4g
bV9tdXRhdG9yTWFya1N0YWNrOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxNYXJrU3RhY2tBcnJheT4g
bV9yYWNlTWFya1N0YWNrOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxNYXJraW5nQ29uc3RyYWludFNl
dD4gbV9jb25zdHJhaW50U2V0OworICAgIHN0ZDo6dW5pcXVlX3B0cjxWZXJpZmllclNsb3RWaXNp
dG9yPiBtX3ZlcmlmaWVyU2xvdFZpc2l0b3I7CiAKICAgICAvLyBXZSBwb29sIHRoZSBzbG90IHZp
c2l0b3JzIHVzZWQgYnkgcGFyYWxsZWwgbWFya2luZyB0aHJlYWRzLiBJdCdzIHVzZWZ1bCB0byBi
ZSBhYmxlIHRvCiAgICAgLy8gZW51bWVyYXRlIG92ZXIgdGhlbSwgYW5kIGl0J3MgdXNlZnVsIHRv
IGhhdmUgdGhlbSBjYWNoZSBzb21lIHNtYWxsIGFtb3VudCBvZiBtZW1vcnkgZnJvbQpAQCAtNjU0
LDYgKzY2MCw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2lzU2FmZVRvQ29sbGVjdCB7IGZhbHNl
IH07CiAgICAgYm9vbCBtX2lzU2h1dHRpbmdEb3duIHsgZmFsc2UgfTsKICAgICBib29sIG1fbXV0
YXRvclNob3VsZEJlRmVuY2VkIHsgT3B0aW9uczo6Zm9yY2VGZW5jZWRCYXJyaWVyKCkgfTsKKyAg
ICBib29sIG1faXNWZXJpZnlpbmdHQyB7IGZhbHNlIH07CiAKICAgICB1bnNpZ25lZCBtX2JhcnJp
ZXJUaHJlc2hvbGQgeyBPcHRpb25zOjpmb3JjZUZlbmNlZEJhcnJpZXIoKSA/IHRhdXRvbG9naWNh
bFRocmVzaG9sZCA6IGJsYWNrVGhyZXNob2xkIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0hlYXBJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvSGVhcElubGluZXMuaAkocmV2aXNpb24gMjcxNzg2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvSGVhcElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNjksNiArNjks
OCBAQCBpbmxpbmUgYm9vbCBIZWFwOjp3b3JsZElzU3RvcHBlZCgpIGNvbnN0CiAKIEFMV0FZU19J
TkxJTkUgYm9vbCBIZWFwOjppc01hcmtlZChjb25zdCB2b2lkKiByYXdDZWxsKQogeworICAgIFJF
TEVBU0VfQVNTRVJUKCFtX2lzVmVyaWZ5aW5nR0MpOyAvLyBtbGFtIFRFU1Qgb25seQorCiAgICAg
SGVhcENlbGwqIGNlbGwgPSBiaXR3aXNlX2Nhc3Q8SGVhcENlbGwqPihyYXdDZWxsKTsKICAgICBp
ZiAoY2VsbC0+aXNQcmVjaXNlQWxsb2NhdGlvbigpKQogICAgICAgICByZXR1cm4gY2VsbC0+cHJl
Y2lzZUFsbG9jYXRpb24oKS5pc01hcmtlZCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvSGVhcFByb2ZpbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9IZWFwUHJvZmlsZXIuY3BwCShyZXZpc2lvbiAyNzE3ODYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9IZWFwUHJvZmlsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MCw2
ICs2MCw3IEBAIHZvaWQgSGVhcFByb2ZpbGVyOjpzZXRBY3RpdmVIZWFwQW5hbHl6ZXIKIHsKICAg
ICBBU1NFUlQoISFtX2FjdGl2ZUFuYWx5emVyICE9ICEhYW5hbHl6ZXIpOwogICAgIG1fYWN0aXZl
QW5hbHl6ZXIgPSBhbmFseXplcjsKKyAgICBtX3ZtLnNldEFjdGl2ZUhlYXBBbmFseXplcihhbmFs
eXplcik7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvSXNvQ2VsbFNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0lzb0NlbGxTZXQuaAkocmV2aXNpb24gMjcxNzg2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvSXNvQ2VsbFNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCw3IEBA
CiAKIG5hbWVzcGFjZSBKU0MgewogCitjbGFzcyBBYnN0cmFjdFNsb3RWaXNpdG9yOwogY2xhc3Mg
SGVhcENlbGw7CiBjbGFzcyBJc29TdWJzcGFjZTsKIApAQCAtNTksNyArNjAsNyBAQCBwdWJsaWM6
CiAgICAgdm9pZCBmb3JFYWNoTWFya2VkQ2VsbChjb25zdCBGdW5jJik7CiAKICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBGdW5jPgotICAgIFJlZjxTaGFyZWRUYXNrPHZvaWQoU2xvdFZpc2l0b3ImKT4+
IGZvckVhY2hNYXJrZWRDZWxsSW5QYXJhbGxlbChjb25zdCBGdW5jJik7CisgICAgUmVmPFNoYXJl
ZFRhc2s8dm9pZChBYnN0cmFjdFNsb3RWaXNpdG9yJik+PiBmb3JFYWNoTWFya2VkQ2VsbEluUGFy
YWxsZWwoY29uc3QgRnVuYyYpOwogICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CiAg
ICAgdm9pZCBmb3JFYWNoTGl2ZUNlbGwoY29uc3QgRnVuYyYpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvSXNvQ2VsbFNldElubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9Jc29DZWxsU2V0SW5saW5lcy5oCShyZXZpc2lvbiAyNzE3ODYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Jc29DZWxsU2V0SW5saW5lcy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC05Miw5ICs5Miw5IEBAIHZvaWQgSXNvQ2VsbFNldDo6Zm9yRWFjaE1hcmtl
ZENlbGwoY29uc3QKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KLVJlZjxTaGFyZWRUYXNr
PHZvaWQoU2xvdFZpc2l0b3ImKT4+IElzb0NlbGxTZXQ6OmZvckVhY2hNYXJrZWRDZWxsSW5QYXJh
bGxlbChjb25zdCBGdW5jJiBmdW5jKQorUmVmPFNoYXJlZFRhc2s8dm9pZChBYnN0cmFjdFNsb3RW
aXNpdG9yJik+PiBJc29DZWxsU2V0Ojpmb3JFYWNoTWFya2VkQ2VsbEluUGFyYWxsZWwoY29uc3Qg
RnVuYyYgZnVuYykKIHsKLSAgICBjbGFzcyBUYXNrIGZpbmFsIDogcHVibGljIFNoYXJlZFRhc2s8
dm9pZChTbG90VmlzaXRvciYpPiB7CisgICAgY2xhc3MgVGFzayBmaW5hbCA6IHB1YmxpYyBTaGFy
ZWRUYXNrPHZvaWQoQWJzdHJhY3RTbG90VmlzaXRvciYpPiB7CiAgICAgcHVibGljOgogICAgICAg
ICBUYXNrKElzb0NlbGxTZXQmIHNldCwgY29uc3QgRnVuYyYgZnVuYykKICAgICAgICAgICAgIDog
bV9zZXQoc2V0KQpAQCAtMTAzLDcgKzEwMyw3IEBAIFJlZjxTaGFyZWRUYXNrPHZvaWQoU2xvdFZp
c2l0b3ImKT4+IElzb0MKICAgICAgICAgewogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICB2
b2lkIHJ1bihTbG90VmlzaXRvciYgdmlzaXRvcikgZmluYWwKKyAgICAgICAgdm9pZCBydW4oQWJz
dHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikgZmluYWwKICAgICAgICAgewogICAgICAgICAgICAg
d2hpbGUgKE1hcmtlZEJsb2NrOjpIYW5kbGUqIGhhbmRsZSA9IG1fYmxvY2tTb3VyY2UtPnJ1bigp
KSB7CiAgICAgICAgICAgICAgICAgdW5zaWduZWQgYmxvY2tJbmRleCA9IGhhbmRsZS0+aW5kZXgo
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0pJVFN0dWJSb3V0aW5lU2V0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9KSVRTdHViUm91dGlu
ZVNldC5jcHAJKHJldmlzaW9uIDI3MTc4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0pJVFN0dWJSb3V0aW5lU2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI4LDE3ICsxMjgsMjIg
QEAgdm9pZCBKSVRTdHViUm91dGluZVNldDo6ZGVsZXRlVW5tYXJrZWRKZQogICAgIG1fcm91dGlu
ZXMuc2hyaW5rKGRzdEluZGV4KTsKIH0KIAotdm9pZCBKSVRTdHViUm91dGluZVNldDo6dHJhY2VN
YXJrZWRTdHViUm91dGluZXMoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3RlbXBsYXRlPHR5cGVu
YW1lIFZpc2l0b3I+CisvL3ZvaWQgSklUU3R1YlJvdXRpbmVTZXQ6OnRyYWNlTWFya2VkU3R1YlJv
dXRpbmVzKFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIEpJVFN0dWJSb3V0aW5lU2V0Ojp0cmFjZU1h
cmtlZFN0dWJSb3V0aW5lczEoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBm
b3IgKGF1dG8mIGVudHJ5IDogbV9yb3V0aW5lcykgewogICAgICAgICBHQ0F3YXJlSklUU3R1YlJv
dXRpbmUqIHJvdXRpbmUgPSBlbnRyeS5yb3V0aW5lOwogICAgICAgICBpZiAoIXJvdXRpbmUtPm1f
bWF5QmVFeGVjdXRpbmcpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgCi0gICAgICAg
IHJvdXRpbmUtPm1hcmtSZXF1aXJlZE9iamVjdHModmlzaXRvcik7CisgICAgICAgIHJvdXRpbmUt
Pm1hcmtSZXF1aXJlZE9iamVjdHMxKHZpc2l0b3IpOwogICAgIH0KIH0KIAorLy90ZW1wbGF0ZSB2
b2lkIEpJVFN0dWJSb3V0aW5lU2V0Ojp0cmFjZU1hcmtlZFN0dWJSb3V0aW5lcyhTbG90VmlzaXRv
ciYpOworLy90ZW1wbGF0ZSB2b2lkIEpJVFN0dWJSb3V0aW5lU2V0Ojp0cmFjZU1hcmtlZFN0dWJS
b3V0aW5lcyhWZXJpZmllclNsb3RWaXNpdG9yJik7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAj
ZW5kaWYgLy8gRU5BQkxFKEpJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0pJ
VFN0dWJSb3V0aW5lU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvSklUU3R1YlJvdXRpbmVTZXQuaAkocmV2aXNpb24gMjcxNzg2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvSklUU3R1YlJvdXRpbmVTZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMzUs
OCArMzUsOSBAQCB1c2luZyBXVEY6OlJhbmdlOwogCiBuYW1lc3BhY2UgSlNDIHsKIAorY2xhc3Mg
QWJzdHJhY3RTbG90VmlzaXRvcjsKIGNsYXNzIEdDQXdhcmVKSVRTdHViUm91dGluZTsKLWNsYXNz
IFNsb3RWaXNpdG9yOworLy9jbGFzcyBTbG90VmlzaXRvcjsKIAogI2lmIEVOQUJMRShKSVQpCiAK
QEAgLTYzLDggKzY0LDkgQEAgcHVibGljOgogICAgIHZvaWQgcHJlcGFyZUZvckNvbnNlcnZhdGl2
ZVNjYW4oKTsKICAgICAKICAgICB2b2lkIGRlbGV0ZVVubWFya2VkSmV0dGlzb25lZFN0dWJSb3V0
aW5lcygpOwotICAgIAotICAgIHZvaWQgdHJhY2VNYXJrZWRTdHViUm91dGluZXMoU2xvdFZpc2l0
b3ImKTsKKworLy8gICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCB0cmFjZU1hcmtl
ZFN0dWJSb3V0aW5lcyhWaXNpdG9yJik7CisgICAgdm9pZCB0cmFjZU1hcmtlZFN0dWJSb3V0aW5l
czEoQWJzdHJhY3RTbG90VmlzaXRvciYpOwogICAgIAogcHJpdmF0ZToKICAgICB2b2lkIG1hcmtT
bG93KHVpbnRwdHJfdCBhZGRyZXNzKTsKQEAgLTkyLDcgKzk0LDggQEAgcHVibGljOgogICAgIHZv
aWQgbWFyayh2b2lkKikgeyB9CiAgICAgdm9pZCBwcmVwYXJlRm9yQ29uc2VydmF0aXZlU2Nhbigp
IHsgfQogICAgIHZvaWQgZGVsZXRlVW5tYXJrZWRKZXR0aXNvbmVkU3R1YlJvdXRpbmVzKCkgeyB9
Ci0gICAgdm9pZCB0cmFjZU1hcmtlZFN0dWJSb3V0aW5lcyhTbG90VmlzaXRvciYpIHsgfQorLy8g
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCB0cmFjZU1hcmtlZFN0dWJSb3V0aW5l
cyhWaXNpdG9yJikgeyB9CisgICAgdm9pZCB0cmFjZU1hcmtlZFN0dWJSb3V0aW5lczEoQWJzdHJh
Y3RTbG90VmlzaXRvciYpIHsgfQogfTsKIAogI2VuZGlmIC8vICFFTkFCTEUoSklUKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtTdGFja01lcmdp
bmdDb25zdHJhaW50LmNwcAkocmV2aXNpb24gMjcxNzg2KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yNSw3ICsyNSw2IEBACiAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJNYXJrU3Rh
Y2tNZXJnaW5nQ29uc3RyYWludC5oIgotCiAjaW5jbHVkZSAiR0NTZWdtZW50ZWRBcnJheUlubGlu
ZXMuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAKQEAgLTQxLDEyICs0MCwxMiBAQCBNYXJr
U3RhY2tNZXJnaW5nQ29uc3RyYWludDo6fk1hcmtTdGFja01lCiB7CiB9CiAKLWRvdWJsZSBNYXJr
U3RhY2tNZXJnaW5nQ29uc3RyYWludDo6cXVpY2tXb3JrRXN0aW1hdGUoU2xvdFZpc2l0b3ImKQor
ZG91YmxlIE1hcmtTdGFja01lcmdpbmdDb25zdHJhaW50OjpxdWlja1dvcmtFc3RpbWF0ZShBYnN0
cmFjdFNsb3RWaXNpdG9yJikKIHsKICAgICByZXR1cm4gbV9oZWFwLm1fbXV0YXRvck1hcmtTdGFj
ay0+c2l6ZSgpICsgbV9oZWFwLm1fcmFjZU1hcmtTdGFjay0+c2l6ZSgpOwogfQogCi12b2lkIE1h
cmtTdGFja01lcmdpbmdDb25zdHJhaW50OjpwcmVwYXJlVG9FeGVjdXRlSW1wbChjb25zdCBBYnN0
cmFjdExvY2tlciYsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBNYXJrU3RhY2tNZXJnaW5n
Q29uc3RyYWludDo6cHJlcGFyZVRvRXhlY3V0ZUltcGwoY29uc3QgQWJzdHJhY3RMb2NrZXImLCBB
YnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIC8vIExvZ2dpbmcgdGhlIHdvcmsg
aGVyZSBlbnN1cmVzIHRoYXQgdGhlIGNvbnN0cmFpbnQgc29sdmVyIGtub3dzIHRoYXQgaXQgZG9l
c24ndCBuZWVkIHRvIHByb2R1Y2UKICAgICAvLyBhbnltb3JlIHdvcmsuCkBAIC01Niw3ICs1NSw3
IEBAIHZvaWQgTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQ6OnByZXBhcmUKICAgICBkYXRhTG9n
SWYoT3B0aW9uczo6bG9nR0MoKSwgIigiLCBzaXplLCAiKSIpOwogfQogCi12b2lkIE1hcmtTdGFj
a01lcmdpbmdDb25zdHJhaW50OjpleGVjdXRlSW1wbChTbG90VmlzaXRvciYgdmlzaXRvcikKK3Zv
aWQgTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQ6OmV4ZWN1dGVJbXBsKEFic3RyYWN0U2xvdFZp
c2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgbV9oZWFwLm1fbXV0YXRvck1hcmtTdGFjay0+dHJhbnNm
ZXJUbyh2aXNpdG9yLm11dGF0b3JNYXJrU3RhY2soKSk7CiAgICAgbV9oZWFwLm1fcmFjZU1hcmtT
dGFjay0+dHJhbnNmZXJUbyh2aXNpdG9yLm11dGF0b3JNYXJrU3RhY2soKSk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtTdGFja01lcmdpbmdDb25z
dHJhaW50LmgJKHJldmlzaW9uIDI3MTc4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L01hcmtTdGFja01lcmdpbmdDb25zdHJhaW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDE4ICsz
MCwxOCBAQAogbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIEhlYXA7Ci1jbGFzcyBTbG90VmlzaXRv
cjsKK2NsYXNzIEFic3RyYWN0U2xvdFZpc2l0b3I7CiAKIGNsYXNzIE1hcmtTdGFja01lcmdpbmdD
b25zdHJhaW50IGZpbmFsIDogcHVibGljIE1hcmtpbmdDb25zdHJhaW50IHsKIHB1YmxpYzoKICAg
ICBNYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludChIZWFwJik7CiAgICAgfk1hcmtTdGFja01lcmdp
bmdDb25zdHJhaW50KCkgZmluYWw7CiAgICAgCi0gICAgZG91YmxlIHF1aWNrV29ya0VzdGltYXRl
KFNsb3RWaXNpdG9yJikgZmluYWw7CisgICAgZG91YmxlIHF1aWNrV29ya0VzdGltYXRlKEFic3Ry
YWN0U2xvdFZpc2l0b3ImKSBmaW5hbDsKICAgICAKIHByaXZhdGU6Ci0gICAgdm9pZCBwcmVwYXJl
VG9FeGVjdXRlSW1wbChjb25zdCBBYnN0cmFjdExvY2tlciYgY29uc3RyYWludFNvbHZpbmdMb2Nr
ZXIsIFNsb3RWaXNpdG9yJikgZmluYWw7Ci0gICAgdm9pZCBleGVjdXRlSW1wbChTbG90VmlzaXRv
ciYpIGZpbmFsOworICAgIHZvaWQgcHJlcGFyZVRvRXhlY3V0ZUltcGwoY29uc3QgQWJzdHJhY3RM
b2NrZXImIGNvbnN0cmFpbnRTb2x2aW5nTG9ja2VyLCBBYnN0cmFjdFNsb3RWaXNpdG9yJikgZmlu
YWw7CisgICAgdm9pZCBleGVjdXRlSW1wbChBYnN0cmFjdFNsb3RWaXNpdG9yJikgZmluYWw7CiAg
ICAgCiAgICAgSGVhcCYgbV9oZWFwOwogfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL01hcmtlZEJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvTWFya2VkQmxvY2suaAkocmV2aXNpb24gMjcxNzg2KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvTWFya2VkQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMSw3ICsxLDcgQEAKIC8q
CiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDAgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9y
ZykKICAqICBDb3B5cmlnaHQgKEMpIDIwMDEgUGV0ZXIgS2VsbHkgKHBta0Bwb3N0LmNvbSkKLSAq
ICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwpAQCAtMTUxLDcgKzE1MSw4IEBAIHB1YmxpYzoKICAg
ICAgICAgCiAgICAgICAgIHZvaWQgc2hyaW5rKCk7CiAgICAgICAgICAgICAKLSAgICAgICAgdm9p
ZCB2aXNpdFdlYWtTZXQoU2xvdFZpc2l0b3ImKTsKKy8vICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBWaXNpdG9yPiB2b2lkIHZpc2l0V2Vha1NldChWaXNpdG9yJik7CisgICAgICAgIHZvaWQgdmlz
aXRXZWFrU2V0MShBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAgICAgICAgIHZvaWQgcmVhcFdlYWtT
ZXQoKTsKICAgICAgICAgICAgIAogICAgICAgICAvLyBXaGlsZSBhbGxvY2F0aW5nIGZyb20gYSBm
cmVlIGxpc3QsIE1hcmtlZEJsb2NrIHRlbXBvcmFyaWx5IGhhcyBib2d1cwpAQCAtMjAzLDYgKzIw
NCw3IEBAIHB1YmxpYzoKICAgICAgICAgCiAgICAgICAgIHZvaWQqIHN0YXJ0KCkgY29uc3QgeyBy
ZXR1cm4gJm1fYmxvY2stPmF0b21zKClbMF07IH0KICAgICAgICAgdm9pZCogZW5kKCkgY29uc3Qg
eyByZXR1cm4gJm1fYmxvY2stPmF0b21zKClbbV9lbmRBdG9tXTsgfQorICAgICAgICB2b2lkKiBh
dG9tQXQoc2l6ZV90IGkpIGNvbnN0IHsgcmV0dXJuICZtX2Jsb2NrLT5hdG9tcygpW2ldOyB9CiAg
ICAgICAgIGJvb2wgY29udGFpbnModm9pZCogcCkgY29uc3QgeyByZXR1cm4gc3RhcnQoKSA8PSBw
ICYmIHAgPCBlbmQoKTsgfQogCiAgICAgICAgIHZvaWQgZHVtcFN0YXRlKFByaW50U3RyZWFtJik7
CkBAIC00OTgsOSArNTAwLDExIEBAIGlubGluZSB2b2lkIE1hcmtlZEJsb2NrOjpIYW5kbGU6OnNo
cmluaygKICAgICBtX3dlYWtTZXQuc2hyaW5rKCk7CiB9CiAKLWlubGluZSB2b2lkIE1hcmtlZEJs
b2NrOjpIYW5kbGU6OnZpc2l0V2Vha1NldChTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vdGVtcGxh
dGU8dHlwZW5hbWUgVmlzaXRvcj4KKy8vaW5saW5lIHZvaWQgTWFya2VkQmxvY2s6OkhhbmRsZTo6
dmlzaXRXZWFrU2V0KFZpc2l0b3ImIHZpc2l0b3IpCitpbmxpbmUgdm9pZCBNYXJrZWRCbG9jazo6
SGFuZGxlOjp2aXNpdFdlYWtTZXQxKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7Ci0g
ICAgcmV0dXJuIG1fd2Vha1NldC52aXNpdCh2aXNpdG9yKTsKKyAgICByZXR1cm4gbV93ZWFrU2V0
LnZpc2l0MSh2aXNpdG9yKTsKIH0KIAogaW5saW5lIHZvaWQgTWFya2VkQmxvY2s6OkhhbmRsZTo6
cmVhcFdlYWtTZXQoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkU3Bh
Y2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZFNw
YWNlLmNwcAkocmV2aXNpb24gMjcxNzg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
TWFya2VkU3BhY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNzIsMTAgKzI3MiwxMCBAQCB2b2lk
IE1hcmtlZFNwYWNlOjplbmFibGVQcmVjaXNlQWxsb2NhdGlvCiAgICAgICAgIG1fcHJlY2lzZUFs
bG9jYXRpb25TZXQtPmFkZChhbGxvY2F0aW9uLT5jZWxsKCkpOwogfQogCi12b2lkIE1hcmtlZFNw
YWNlOjp2aXNpdFdlYWtTZXRzKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBNYXJrZWRTcGFj
ZTo6dmlzaXRXZWFrU2V0czEoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBh
dXRvIHZpc2l0ID0gWyZdIChXZWFrU2V0KiB3ZWFrU2V0KSB7Ci0gICAgICAgIHdlYWtTZXQtPnZp
c2l0KHZpc2l0b3IpOworICAgICAgICB3ZWFrU2V0LT52aXNpdDEodmlzaXRvcik7CiAgICAgfTsK
ICAgICAKICAgICBtX25ld0FjdGl2ZVdlYWtTZXRzLmZvckVhY2godmlzaXQpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkU3BhY2UuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRTcGFjZS5oCShyZXZpc2lvbiAyNzE3ODYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRTcGFjZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zNyw2ICszNyw3IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCitjbGFzcyBBYnN0cmFjdFNs
b3RWaXNpdG9yOyAvLyBtbGFtIEZJWE1FID8KIGNsYXNzIENvbXBsZXRlU3Vic3BhY2U7CiBjbGFz
cyBIZWFwOwogY2xhc3MgSGVhcENlbGw7CkBAIC0xMDUsNyArMTA2LDcgQEAgcHVibGljOgogICAg
IAogICAgIHZvaWQgcHJlcGFyZUZvckFsbG9jYXRpb24oKTsKIAotICAgIHZvaWQgdmlzaXRXZWFr
U2V0cyhTbG90VmlzaXRvciYpOworICAgIHZvaWQgdmlzaXRXZWFrU2V0czEoQWJzdHJhY3RTbG90
VmlzaXRvciYpOwogICAgIHZvaWQgcmVhcFdlYWtTZXRzKCk7CiAKICAgICBNYXJrZWRCbG9ja1Nl
dCYgYmxvY2tzKCkgeyByZXR1cm4gbV9ibG9ja3M7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludC5jcHAJKHJldmlzaW9uIDI3MTc4NikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1
ZGUgIk1hcmtpbmdDb25zdHJhaW50LmgiCiAKKyNpbmNsdWRlICJBYnN0cmFjdFNsb3RWaXNpdG9y
SW5saW5lcy5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJWaXNpdENvdW50
ZXIuaCIKIApAQCAtNTEsNyArNTIsNyBAQCB2b2lkIE1hcmtpbmdDb25zdHJhaW50OjpyZXNldFN0
YXRzKCkKICAgICBtX2xhc3RWaXNpdENvdW50ID0gMDsKIH0KIAotdm9pZCBNYXJraW5nQ29uc3Ry
YWludDo6ZXhlY3V0ZShTbG90VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgTWFya2luZ0NvbnN0cmFp
bnQ6OmV4ZWN1dGUoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBWaXNpdENv
dW50ZXIgdmlzaXRDb3VudGVyKHZpc2l0b3IpOwogICAgIGV4ZWN1dGVJbXBsKHZpc2l0b3IpOwpA
QCAtNjAsMTcgKzYxLDE3IEBAIHZvaWQgTWFya2luZ0NvbnN0cmFpbnQ6OmV4ZWN1dGUoU2xvdFZp
c2kKICAgICAgICAgZGF0YUxvZygiKCIsIGFiYnJldmlhdGVkTmFtZSgpLCAiIHZpc2l0ZWQgIiwg
dmlzaXRDb3VudGVyLnZpc2l0Q291bnQoKSwgIiBpbiBleGVjdXRlKSIpOwogfQogCi1kb3VibGUg
TWFya2luZ0NvbnN0cmFpbnQ6OnF1aWNrV29ya0VzdGltYXRlKFNsb3RWaXNpdG9yJikKK2RvdWJs
ZSBNYXJraW5nQ29uc3RyYWludDo6cXVpY2tXb3JrRXN0aW1hdGUoQWJzdHJhY3RTbG90VmlzaXRv
ciYpCiB7CiAgICAgcmV0dXJuIDA7CiB9CiAKLWRvdWJsZSBNYXJraW5nQ29uc3RyYWludDo6d29y
a0VzdGltYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorZG91YmxlIE1hcmtpbmdDb25zdHJhaW50
Ojp3b3JrRXN0aW1hdGUoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICByZXR1
cm4gbGFzdFZpc2l0Q291bnQoKSArIHF1aWNrV29ya0VzdGltYXRlKHZpc2l0b3IpOwogfQogCi12
b2lkIE1hcmtpbmdDb25zdHJhaW50OjpwcmVwYXJlVG9FeGVjdXRlKGNvbnN0IEFic3RyYWN0TG9j
a2VyJiBjb25zdHJhaW50U29sdmluZ0xvY2tlciwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2b2lk
IE1hcmtpbmdDb25zdHJhaW50OjpwcmVwYXJlVG9FeGVjdXRlKGNvbnN0IEFic3RyYWN0TG9ja2Vy
JiBjb25zdHJhaW50U29sdmluZ0xvY2tlciwgQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikK
IHsKICAgICBkYXRhTG9nSWYoT3B0aW9uczo6bG9nR0MoKSwgYWJicmV2aWF0ZWROYW1lKCkpOwog
ICAgIFZpc2l0Q291bnRlciB2aXNpdENvdW50ZXIodmlzaXRvcik7CkBAIC04MCw3ICs4MSw3IEBA
IHZvaWQgTWFya2luZ0NvbnN0cmFpbnQ6OnByZXBhcmVUb0V4ZWN1dGUKICAgICAgICAgZGF0YUxv
ZygiKCIsIGFiYnJldmlhdGVkTmFtZSgpLCAiIHZpc2l0ZWQgIiwgdmlzaXRDb3VudGVyLnZpc2l0
Q291bnQoKSwgIiBpbiBwcmVwYXJlVG9FeGVjdXRlKSIpOwogfQogCi12b2lkIE1hcmtpbmdDb25z
dHJhaW50Ojpkb1BhcmFsbGVsV29yayhTbG90VmlzaXRvciYgdmlzaXRvciwgU2hhcmVkVGFzazx2
b2lkKFNsb3RWaXNpdG9yJik+JiB0YXNrKQordm9pZCBNYXJraW5nQ29uc3RyYWludDo6ZG9QYXJh
bGxlbFdvcmsoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvciwgU2hhcmVkVGFzazx2b2lkKEFi
c3RyYWN0U2xvdFZpc2l0b3ImKT4mIHRhc2spCiB7CiAgICAgVmlzaXRDb3VudGVyIHZpc2l0Q291
bnRlcih2aXNpdG9yKTsKICAgICB0YXNrLnJ1bih2aXNpdG9yKTsKQEAgLTkyLDcgKzkzLDcgQEAg
dm9pZCBNYXJraW5nQ29uc3RyYWludDo6ZG9QYXJhbGxlbFdvcmsoUwogICAgIH0KIH0KIAotdm9p
ZCBNYXJraW5nQ29uc3RyYWludDo6cHJlcGFyZVRvRXhlY3V0ZUltcGwoY29uc3QgQWJzdHJhY3RM
b2NrZXImLCBTbG90VmlzaXRvciYpCit2b2lkIE1hcmtpbmdDb25zdHJhaW50OjpwcmVwYXJlVG9F
eGVjdXRlSW1wbChjb25zdCBBYnN0cmFjdExvY2tlciYsIEFic3RyYWN0U2xvdFZpc2l0b3ImKQog
ewogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWlu
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25z
dHJhaW50LmgJKHJldmlzaW9uIDI3MTc4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L01hcmtpbmdDb25zdHJhaW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDcgQEAKIG5h
bWVzcGFjZSBKU0MgewogCiBjbGFzcyBNYXJraW5nQ29uc3RyYWludFNldDsKLWNsYXNzIFNsb3RW
aXNpdG9yOworY2xhc3MgQWJzdHJhY3RTbG90VmlzaXRvcjsKIAogY2xhc3MgTWFya2luZ0NvbnN0
cmFpbnQgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKE1hcmtpbmdDb25zdHJhaW50KTsKQEAg
LTYwLDE1ICs2MCwxNiBAQCBwdWJsaWM6CiAgICAgCiAgICAgc2l6ZV90IGxhc3RWaXNpdENvdW50
KCkgY29uc3QgeyByZXR1cm4gbV9sYXN0VmlzaXRDb3VudDsgfQogICAgIAotICAgIHZvaWQgZXhl
Y3V0ZShTbG90VmlzaXRvciYpOwotICAgIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIHZpcnR1YWwg
ZG91YmxlIHF1aWNrV29ya0VzdGltYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKTsKKyAgICB2b2lk
IGV4ZWN1dGUoQWJzdHJhY3RTbG90VmlzaXRvciYpOworCisgICAgLy8gRklYTUUgbWxhbQorICAg
IEpTX0VYUE9SVF9QUklWQVRFIHZpcnR1YWwgZG91YmxlIHF1aWNrV29ya0VzdGltYXRlKEFic3Ry
YWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpOwogICAgIAotICAgIGRvdWJsZSB3b3JrRXN0aW1hdGUo
U2xvdFZpc2l0b3ImIHZpc2l0b3IpOworICAgIGRvdWJsZSB3b3JrRXN0aW1hdGUoQWJzdHJhY3RT
bG90VmlzaXRvciYgdmlzaXRvcik7CiAgICAgCi0gICAgdm9pZCBwcmVwYXJlVG9FeGVjdXRlKGNv
bnN0IEFic3RyYWN0TG9ja2VyJiBjb25zdHJhaW50U29sdmluZ0xvY2tlciwgU2xvdFZpc2l0b3Im
KTsKKyAgICB2b2lkIHByZXBhcmVUb0V4ZWN1dGUoY29uc3QgQWJzdHJhY3RMb2NrZXImIGNvbnN0
cmFpbnRTb2x2aW5nTG9ja2VyLCBBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAgICAgCi0gICAgdm9p
ZCBkb1BhcmFsbGVsV29yayhTbG90VmlzaXRvciYsIFNoYXJlZFRhc2s8dm9pZChTbG90VmlzaXRv
ciYpPiYpOworICAgIHZvaWQgZG9QYXJhbGxlbFdvcmsoQWJzdHJhY3RTbG90VmlzaXRvciYsIFNo
YXJlZFRhc2s8dm9pZChBYnN0cmFjdFNsb3RWaXNpdG9yJik+Jik7CiAgICAgCiAgICAgQ29uc3Ry
YWludFZvbGF0aWxpdHkgdm9sYXRpbGl0eSgpIGNvbnN0IHsgcmV0dXJuIG1fdm9sYXRpbGl0eTsg
fQogICAgIApAQCAtNzYsOCArNzcsOCBAQCBwdWJsaWM6CiAgICAgQ29uc3RyYWludFBhcmFsbGVs
aXNtIHBhcmFsbGVsaXNtKCkgY29uc3QgeyByZXR1cm4gbV9wYXJhbGxlbGlzbTsgfQogCiBwcm90
ZWN0ZWQ6Ci0gICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVJbXBsKFNsb3RWaXNpdG9yJikgPSAwOwot
ICAgIEpTX0VYUE9SVF9QUklWQVRFIHZpcnR1YWwgdm9pZCBwcmVwYXJlVG9FeGVjdXRlSW1wbChj
b25zdCBBYnN0cmFjdExvY2tlciYgY29uc3RyYWludFNvbHZpbmdMb2NrZXIsIFNsb3RWaXNpdG9y
Jik7CisgICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVJbXBsKEFic3RyYWN0U2xvdFZpc2l0b3ImKSA9
IDA7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdmlydHVhbCB2b2lkIHByZXBhcmVUb0V4ZWN1dGVJ
bXBsKGNvbnN0IEFic3RyYWN0TG9ja2VyJiBjb25zdHJhaW50U29sdmluZ0xvY2tlciwgQWJzdHJh
Y3RTbG90VmlzaXRvciYpOwogICAgIAogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgTWFya2lu
Z0NvbnN0cmFpbnRTZXQ7IC8vIFNvIGl0IGNhbiBzZXQgbV9pbmRleC4KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50U2V0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludFNldC5jcHAJKHJl
dmlzaW9uIDI3MTc4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25z
dHJhaW50U2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjMsNyArNjMsNyBAQCB2b2lkIE1hcmtp
bmdDb25zdHJhaW50U2V0OjpkaWRTdGFydE1hcmtpCiAgICAgbV9pdGVyYXRpb24gPSAxOwogfQog
Ci12b2lkIE1hcmtpbmdDb25zdHJhaW50U2V0OjphZGQoQ1N0cmluZyBhYmJyZXZpYXRlZE5hbWUs
IENTdHJpbmcgbmFtZSwgOjpGdW5jdGlvbjx2b2lkKFNsb3RWaXNpdG9yJik+IGZ1bmN0aW9uLCBD
b25zdHJhaW50Vm9sYXRpbGl0eSB2b2xhdGlsaXR5LCBDb25zdHJhaW50Q29uY3VycmVuY3kgY29u
Y3VycmVuY3ksIENvbnN0cmFpbnRQYXJhbGxlbGlzbSBwYXJhbGxlbGlzbSkKK3ZvaWQgTWFya2lu
Z0NvbnN0cmFpbnRTZXQ6OmFkZChDU3RyaW5nIGFiYnJldmlhdGVkTmFtZSwgQ1N0cmluZyBuYW1l
LCA6OkZ1bmN0aW9uPHZvaWQoQWJzdHJhY3RTbG90VmlzaXRvciYpPiBmdW5jdGlvbiwgQ29uc3Ry
YWludFZvbGF0aWxpdHkgdm9sYXRpbGl0eSwgQ29uc3RyYWludENvbmN1cnJlbmN5IGNvbmN1cnJl
bmN5LCBDb25zdHJhaW50UGFyYWxsZWxpc20gcGFyYWxsZWxpc20pCiB7CiAgICAgYWRkKG1ha2VV
bmlxdWU8U2ltcGxlTWFya2luZ0NvbnN0cmFpbnQ+KFdURk1vdmUoYWJicmV2aWF0ZWROYW1lKSwg
V1RGTW92ZShuYW1lKSwgV1RGTW92ZShmdW5jdGlvbiksIHZvbGF0aWxpdHksIGNvbmN1cnJlbmN5
LCBwYXJhbGxlbGlzbSkpOwogfQpAQCAtNzgsMTQgKzc4LDE0IEBAIHZvaWQgTWFya2luZ0NvbnN0
cmFpbnRTZXQ6OmFkZCgKICAgICBtX3NldC5hcHBlbmQoV1RGTW92ZShjb25zdHJhaW50KSk7CiB9
CiAKLWJvb2wgTWFya2luZ0NvbnN0cmFpbnRTZXQ6OmV4ZWN1dGVDb252ZXJnZW5jZShTbG90Vmlz
aXRvciYgdmlzaXRvcikKK2Jvb2wgTWFya2luZ0NvbnN0cmFpbnRTZXQ6OmV4ZWN1dGVDb252ZXJn
ZW5jZShBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGJvb2wgcmVzdWx0ID0g
ZXhlY3V0ZUNvbnZlcmdlbmNlSW1wbCh2aXNpdG9yKTsKICAgICBkYXRhTG9nSWYoT3B0aW9uczo6
bG9nR0MoKSwgIiAiKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1ib29sIE1hcmtpbmdDb25z
dHJhaW50U2V0Ojppc1dhdmVmcm9udEFkdmFuY2luZyhTbG90VmlzaXRvciYgdmlzaXRvcikKK2Jv
b2wgTWFya2luZ0NvbnN0cmFpbnRTZXQ6OmlzV2F2ZWZyb250QWR2YW5jaW5nKEFic3RyYWN0U2xv
dFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgZm9yIChNYXJraW5nQ29uc3RyYWludCogb3V0Z3Jv
d3RoIDogbV9vdXRncm93dGhzKSB7CiAgICAgICAgIGlmIChvdXRncm93dGgtPndvcmtFc3RpbWF0
ZSh2aXNpdG9yKSkKQEAgLTk0LDcgKzk0LDcgQEAgYm9vbCBNYXJraW5nQ29uc3RyYWludFNldDo6
aXNXYXZlZnJvbnRBZAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBNYXJraW5nQ29uc3Ry
YWludFNldDo6ZXhlY3V0ZUNvbnZlcmdlbmNlSW1wbChTbG90VmlzaXRvciYgdmlzaXRvcikKK2Jv
b2wgTWFya2luZ0NvbnN0cmFpbnRTZXQ6OmV4ZWN1dGVDb252ZXJnZW5jZUltcGwoQWJzdHJhY3RT
bG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBTdXBlclNhbXBsZXJTY29wZSBzdXBlclNhbXBs
ZXJTY29wZShmYWxzZSk7CiAgICAgTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXIgc29sdmVyKCp0aGlz
KTsKQEAgLTE2Niw3ICsxNjYsNyBAQCBib29sIE1hcmtpbmdDb25zdHJhaW50U2V0OjpleGVjdXRl
Q29udmVyCiAgICAgcmV0dXJuICFzb2x2ZXIuZGlkVmlzaXRTb21ldGhpbmcoKTsKIH0KIAotdm9p
ZCBNYXJraW5nQ29uc3RyYWludFNldDo6ZXhlY3V0ZUFsbChTbG90VmlzaXRvciYgdmlzaXRvcikK
K3ZvaWQgTWFya2luZ0NvbnN0cmFpbnRTZXQ6OmV4ZWN1dGVBbGwoQWJzdHJhY3RTbG90VmlzaXRv
ciYgdmlzaXRvcikKIHsKICAgICBmb3IgKGF1dG8mIGNvbnN0cmFpbnQgOiBtX3NldCkKICAgICAg
ICAgY29uc3RyYWludC0+ZXhlY3V0ZSh2aXNpdG9yKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50U2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnRTZXQuaAkocmV2aXNpb24gMjcxNzg2
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnRTZXQuaAko
d29ya2luZyBjb3B5KQpAQCAtNDYsMTQgKzQ2LDE0IEBAIHB1YmxpYzoKICAgICB2b2lkIGFkZCgK
ICAgICAgICAgQ1N0cmluZyBhYmJyZXZpYXRlZE5hbWUsCiAgICAgICAgIENTdHJpbmcgbmFtZSwK
LSAgICAgICAgOjpGdW5jdGlvbjx2b2lkKFNsb3RWaXNpdG9yJik+LAorICAgICAgICA6OkZ1bmN0
aW9uPHZvaWQoQWJzdHJhY3RTbG90VmlzaXRvciYpPiwKICAgICAgICAgQ29uc3RyYWludFZvbGF0
aWxpdHksCiAgICAgICAgIENvbnN0cmFpbnRDb25jdXJyZW5jeSA9IENvbnN0cmFpbnRDb25jdXJy
ZW5jeTo6Q29uY3VycmVudCwKICAgICAgICAgQ29uc3RyYWludFBhcmFsbGVsaXNtID0gQ29uc3Ry
YWludFBhcmFsbGVsaXNtOjpTZXF1ZW50aWFsKTsKICAgICAKICAgICB2b2lkIGFkZCgKICAgICAg
ICAgQ1N0cmluZyBhYmJyZXZpYXRlZE5hbWUsIENTdHJpbmcgbmFtZSwKLSAgICAgICAgOjpGdW5j
dGlvbjx2b2lkKFNsb3RWaXNpdG9yJik+IGZ1bmMsCisgICAgICAgIDo6RnVuY3Rpb248dm9pZChB
YnN0cmFjdFNsb3RWaXNpdG9yJik+IGZ1bmMsCiAgICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5
IHZvbGF0aWxpdHksCiAgICAgICAgIENvbnN0cmFpbnRQYXJhbGxlbGlzbSBwYXJhbGxlbGlzbSkK
ICAgICB7CkBAIC02NCwyMCArNjQsMjAgQEAgcHVibGljOgogICAgIAogICAgIC8vIEFzc3VtaW5n
IHRoYXQgdGhlIG1hcmsgc3RhY2tzIGFyZSBhbGwgZW1wdHksIHRoaXMgd2lsbCBnaXZlIHlvdSBh
IGd1ZXNzIGFzIHRvIHdoZXRoZXIgb3IKICAgICAvLyBub3QgdGhlIHdhdmVmcm9udCBpcyBhZHZh
bmNpbmcuCi0gICAgYm9vbCBpc1dhdmVmcm9udEFkdmFuY2luZyhTbG90VmlzaXRvciYpOwotICAg
IGJvb2wgaXNXYXZlZnJvbnRSZXRyZWF0aW5nKFNsb3RWaXNpdG9yJiB2aXNpdG9yKSB7IHJldHVy
biAhaXNXYXZlZnJvbnRBZHZhbmNpbmcodmlzaXRvcik7IH0KKyAgICBib29sIGlzV2F2ZWZyb250
QWR2YW5jaW5nKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKKyAgICBib29sIGlzV2F2ZWZyb250UmV0
cmVhdGluZyhBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKSB7IHJldHVybiAhaXNXYXZlZnJv
bnRBZHZhbmNpbmcodmlzaXRvcik7IH0KICAgICAKICAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhp
cyBleGVjdXRlZCBhbGwgY29uc3RyYWludHMgYW5kIG5vbmUgb2YgdGhlbSBwcm9kdWNlZCBuZXcg
d29yay4gVGhpcwogICAgIC8vIGFzc3VtZXMgdGhhdCB5b3UndmUgYWxyYWVkeSB2aXNpdGVkIHJv
b3RzIGFuZCBkcmFpbmVkIGZyb20gdGhlcmUuCi0gICAgYm9vbCBleGVjdXRlQ29udmVyZ2VuY2Uo
U2xvdFZpc2l0b3ImKTsKKyAgICBib29sIGV4ZWN1dGVDb252ZXJnZW5jZShBYnN0cmFjdFNsb3RW
aXNpdG9yJik7CiAgICAgCiAgICAgLy8gU2ltcGx5IHJ1bnMgYWxsIGNvbnN0cmFpbnRzIHdpdGhv
dXQgYW55IHNoZW5hbmlnYW5zLgotICAgIHZvaWQgZXhlY3V0ZUFsbChTbG90VmlzaXRvciYpOwor
ICAgIHZvaWQgZXhlY3V0ZUFsbChBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAgICAgCiBwcml2YXRl
OgogICAgIGZyaWVuZCBjbGFzcyBNYXJraW5nQ29uc3RyYWludFNvbHZlcjsKICAgICAKLSAgICBi
b29sIGV4ZWN1dGVDb252ZXJnZW5jZUltcGwoU2xvdFZpc2l0b3ImKTsKKyAgICBib29sIGV4ZWN1
dGVDb252ZXJnZW5jZUltcGwoQWJzdHJhY3RTbG90VmlzaXRvciYpOwogICAgIAogICAgIEhlYXAm
IG1faGVhcDsKICAgICBCaXRWZWN0b3IgbV91bmV4ZWN1dGVkUm9vdHM7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludFNvbHZlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXIu
Y3BwCShyZXZpc2lvbiAyNzE3ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJr
aW5nQ29uc3RyYWludFNvbHZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDcgKzMzLDcgQEAg
bmFtZXNwYWNlIEpTQyB7IAogCiBNYXJraW5nQ29uc3RyYWludFNvbHZlcjo6TWFya2luZ0NvbnN0
cmFpbnRTb2x2ZXIoTWFya2luZ0NvbnN0cmFpbnRTZXQmIHNldCkKICAgICA6IG1faGVhcChzZXQu
bV9oZWFwKQotICAgICwgbV9tYWluVmlzaXRvcihtX2hlYXAuY29sbGVjdG9yU2xvdFZpc2l0b3Io
KSkKKyAgICAsIG1fbWFpblZpc2l0b3IobV9oZWFwLmNvbGxlY3RvclNsb3RWaXNpdG9yKCkpIC8v
IG1sYW0gRklYTUUgbmVlZCBzdXBwb3J0IGZvciBWZXJpZmllclNsb3RWaXNpdG9yCiAgICAgLCBt
X3NldChzZXQpCiB7CiAgICAgbV9oZWFwLmZvckVhY2hTbG90VmlzaXRvcigKQEAgLTE1MCwxMyAr
MTUwLDEzIEBAIHZvaWQgTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXI6OmV4ZWN1dGUoTWEKICAgICBt
X2V4ZWN1dGVkLnNldChjb25zdHJhaW50LmluZGV4KCkpOwogfQogCi12b2lkIE1hcmtpbmdDb25z
dHJhaW50U29sdmVyOjphZGRQYXJhbGxlbFRhc2soUmVmUHRyPFNoYXJlZFRhc2s8dm9pZChTbG90
VmlzaXRvciYpPj4gdGFzaywgTWFya2luZ0NvbnN0cmFpbnQmIGNvbnN0cmFpbnQpCit2b2lkIE1h
cmtpbmdDb25zdHJhaW50U29sdmVyOjphZGRQYXJhbGxlbFRhc2soUmVmUHRyPFNoYXJlZFRhc2s8
dm9pZChBYnN0cmFjdFNsb3RWaXNpdG9yJik+PiB0YXNrLCBNYXJraW5nQ29uc3RyYWludCYgY29u
c3RyYWludCkKIHsKICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7CiAgICAgbV90
b0V4ZWN1dGVJblBhcmFsbGVsLmFwcGVuZChUYXNrV2l0aENvbnN0cmFpbnQoV1RGTW92ZSh0YXNr
KSwgJmNvbnN0cmFpbnQpKTsKIH0KIAotdm9pZCBNYXJraW5nQ29uc3RyYWludFNvbHZlcjo6cnVu
RXhlY3V0aW9uVGhyZWFkKFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBTY2hlZHVsZXJQcmVmZXJlbmNl
IHByZWZlcmVuY2UsIFNjb3BlZExhbWJkYTxPcHRpb25hbDx1bnNpZ25lZD4oKT4gcGlja05leHQp
Cit2b2lkIE1hcmtpbmdDb25zdHJhaW50U29sdmVyOjpydW5FeGVjdXRpb25UaHJlYWQoQWJzdHJh
Y3RTbG90VmlzaXRvciYgdmlzaXRvciwgU2NoZWR1bGVyUHJlZmVyZW5jZSBwcmVmZXJlbmNlLCBT
Y29wZWRMYW1iZGE8T3B0aW9uYWw8dW5zaWduZWQ+KCk+IHBpY2tOZXh0KQogewogICAgIGZvciAo
OzspIHsKICAgICAgICAgYm9vbCBkb1BhcmFsbGVsV29ya01vZGU7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludFNvbHZlci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50U29sdmVyLmgJKHJl
dmlzaW9uIDI3MTc4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25z
dHJhaW50U29sdmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTY1LDE1ICs2NSwxNSBAQCBwdWJsaWM6
CiAgICAgdm9pZCBleGVjdXRlKE1hcmtpbmdDb25zdHJhaW50Jik7CiAgICAgCiAgICAgLy8gUGFy
YWxsZWwgY29uc3RyYWludHMgY2FuIGFkZCBwYXJhbGxlbCB0YXNrcy4KLSAgICB2b2lkIGFkZFBh
cmFsbGVsVGFzayhSZWZQdHI8U2hhcmVkVGFzazx2b2lkKFNsb3RWaXNpdG9yJik+PiwgTWFya2lu
Z0NvbnN0cmFpbnQmKTsKKyAgICB2b2lkIGFkZFBhcmFsbGVsVGFzayhSZWZQdHI8U2hhcmVkVGFz
azx2b2lkKEFic3RyYWN0U2xvdFZpc2l0b3ImKT4+LCBNYXJraW5nQ29uc3RyYWludCYpOwogICAg
IAogcHJpdmF0ZToKLSAgICB2b2lkIHJ1bkV4ZWN1dGlvblRocmVhZChTbG90VmlzaXRvciYsIFNj
aGVkdWxlclByZWZlcmVuY2UsIFNjb3BlZExhbWJkYTxPcHRpb25hbDx1bnNpZ25lZD4oKT4gcGlj
a05leHQpOworICAgIHZvaWQgcnVuRXhlY3V0aW9uVGhyZWFkKEFic3RyYWN0U2xvdFZpc2l0b3Im
LCBTY2hlZHVsZXJQcmVmZXJlbmNlLCBTY29wZWRMYW1iZGE8T3B0aW9uYWw8dW5zaWduZWQ+KCk+
IHBpY2tOZXh0KTsKICAgICAKICAgICBzdHJ1Y3QgVGFza1dpdGhDb25zdHJhaW50IHsKICAgICAg
ICAgVGFza1dpdGhDb25zdHJhaW50KCkgeyB9CiAgICAgICAgIAotICAgICAgICBUYXNrV2l0aENv
bnN0cmFpbnQoUmVmUHRyPFNoYXJlZFRhc2s8dm9pZChTbG90VmlzaXRvciYpPj4gdGFzaywgTWFy
a2luZ0NvbnN0cmFpbnQqIGNvbnN0cmFpbnQpCisgICAgICAgIFRhc2tXaXRoQ29uc3RyYWludChS
ZWZQdHI8U2hhcmVkVGFzazx2b2lkKEFic3RyYWN0U2xvdFZpc2l0b3ImKT4+IHRhc2ssIE1hcmtp
bmdDb25zdHJhaW50KiBjb25zdHJhaW50KQogICAgICAgICAgICAgOiB0YXNrKFdURk1vdmUodGFz
aykpCiAgICAgICAgICAgICAsIGNvbnN0cmFpbnQoY29uc3RyYWludCkKICAgICAgICAgewpAQCAt
ODUsMTIgKzg1LDEyIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgJiYgY29uc3RyYWludCA9
PSBvdGhlci5jb25zdHJhaW50OwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBSZWZQdHI8
U2hhcmVkVGFzazx2b2lkKFNsb3RWaXNpdG9yJik+PiB0YXNrOworICAgICAgICBSZWZQdHI8U2hh
cmVkVGFzazx2b2lkKEFic3RyYWN0U2xvdFZpc2l0b3ImKT4+IHRhc2s7CiAgICAgICAgIE1hcmtp
bmdDb25zdHJhaW50KiBjb25zdHJhaW50IHsgbnVsbHB0ciB9OwogICAgIH07CiAgICAgCiAgICAg
SGVhcCYgbV9oZWFwOwotICAgIFNsb3RWaXNpdG9yJiBtX21haW5WaXNpdG9yOworICAgIEFic3Ry
YWN0U2xvdFZpc2l0b3ImIG1fbWFpblZpc2l0b3I7CiAgICAgTWFya2luZ0NvbnN0cmFpbnRTZXQm
IG1fc2V0OwogICAgIEJpdFZlY3RvciBtX2V4ZWN1dGVkOwogICAgIERlcXVlPFRhc2tXaXRoQ29u
c3RyYWludCwgMzI+IG1fdG9FeGVjdXRlSW5QYXJhbGxlbDsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL1ByZWNpc2VBbGxvY2F0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9QcmVjaXNlQWxsb2NhdGlvbi5jcHAJKHJldmlzaW9uIDI3MTc4
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1ByZWNpc2VBbGxvY2F0aW9uLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjAwLDExICsyMDAsMTYgQEAgdm9pZCBQcmVjaXNlQWxsb2NhdGlv
bjo6c2hyaW5rKCkKICAgICBtX3dlYWtTZXQuc2hyaW5rKCk7CiB9CiAKLXZvaWQgUHJlY2lzZUFs
bG9jYXRpb246OnZpc2l0V2Vha1NldChTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vdGVtcGxhdGU8
dHlwZW5hbWUgVmlzaXRvcj4KKy8vdm9pZCBQcmVjaXNlQWxsb2NhdGlvbjo6dmlzaXRXZWFrU2V0
KFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIFByZWNpc2VBbGxvY2F0aW9uOjp2aXNpdFdlYWtTZXQx
MDAwKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7Ci0gICAgbV93ZWFrU2V0LnZpc2l0
KHZpc2l0b3IpOworICAgIG1fd2Vha1NldC52aXNpdDEodmlzaXRvcik7CiB9CiAKKy8vdGVtcGxh
dGUgdm9pZCBQcmVjaXNlQWxsb2NhdGlvbjo6dmlzaXRXZWFrU2V0KFNsb3RWaXNpdG9yJik7Cisv
L3RlbXBsYXRlIHZvaWQgUHJlY2lzZUFsbG9jYXRpb246OnZpc2l0V2Vha1NldChWZXJpZmllclNs
b3RWaXNpdG9yJik7CisKIHZvaWQgUHJlY2lzZUFsbG9jYXRpb246OnJlYXBXZWFrU2V0KCkKIHsK
ICAgICByZXR1cm4gbV93ZWFrU2V0LnJlYXAoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL1ByZWNpc2VBbGxvY2F0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvUHJlY2lzZUFsbG9jYXRpb24uaAkocmV2aXNpb24gMjcxNzg2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvUHJlY2lzZUFsbG9jYXRpb24uaAkod29ya2luZyBjb3B5
KQpAQCAtODIsNyArODIsOCBAQCBwdWJsaWM6CiAgICAgCiAgICAgdm9pZCBzaHJpbmsoKTsKICAg
ICAKLSAgICB2b2lkIHZpc2l0V2Vha1NldChTbG90VmlzaXRvciYpOworLy8gICAgdGVtcGxhdGU8
dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCB2aXNpdFdlYWtTZXQoVmlzaXRvciYpOworICAgIHZvaWQg
dmlzaXRXZWFrU2V0MTAwMChBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAgICAgdm9pZCByZWFwV2Vh
a1NldCgpOwogICAgIAogICAgIHZvaWQgY2xlYXJOZXdseUFsbG9jYXRlZCgpIHsgbV9pc05ld2x5
QWxsb2NhdGVkID0gZmFsc2U7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Np
bXBsZU1hcmtpbmdDb25zdHJhaW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9TaW1wbGVNYXJraW5nQ29uc3RyYWludC5jcHAJKHJldmlzaW9uIDI3MTc4NikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1NpbXBsZU1hcmtpbmdDb25zdHJhaW50LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogU2lt
cGxlTWFya2luZ0NvbnN0cmFpbnQ6OlNpbXBsZU1hcmtpbmdDb25zdHJhaW50KAogICAgIENTdHJp
bmcgYWJicmV2aWF0ZWROYW1lLCBDU3RyaW5nIG5hbWUsCi0gICAgOjpGdW5jdGlvbjx2b2lkKFNs
b3RWaXNpdG9yJik+IGV4ZWN1dGVGdW5jdGlvbiwKKyAgICA6OkZ1bmN0aW9uPHZvaWQoQWJzdHJh
Y3RTbG90VmlzaXRvciYpPiBleGVjdXRlRnVuY3Rpb24sCiAgICAgQ29uc3RyYWludFZvbGF0aWxp
dHkgdm9sYXRpbGl0eSwgQ29uc3RyYWludENvbmN1cnJlbmN5IGNvbmN1cnJlbmN5LAogICAgIENv
bnN0cmFpbnRQYXJhbGxlbGlzbSBwYXJhbGxlbGlzbSkKICAgICA6IE1hcmtpbmdDb25zdHJhaW50
KFdURk1vdmUoYWJicmV2aWF0ZWROYW1lKSwgV1RGTW92ZShuYW1lKSwgdm9sYXRpbGl0eSwgY29u
Y3VycmVuY3ksIHBhcmFsbGVsaXNtKQpAQCAtNDIsNyArNDIsNyBAQCBTaW1wbGVNYXJraW5nQ29u
c3RyYWludDo6flNpbXBsZU1hcmtpbmdDCiB7CiB9CiAKLXZvaWQgU2ltcGxlTWFya2luZ0NvbnN0
cmFpbnQ6OmV4ZWN1dGVJbXBsKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBTaW1wbGVNYXJr
aW5nQ29uc3RyYWludDo6ZXhlY3V0ZUltcGwoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikK
IHsKICAgICBtX2V4ZWN1dGVGdW5jdGlvbih2aXNpdG9yKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL1NpbXBsZU1hcmtpbmdDb25zdHJhaW50LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQuaAkocmV2
aXNpb24gMjcxNzg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2ltcGxlTWFya2lu
Z0NvbnN0cmFpbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsMTQgKzM3LDE0IEBAIGNsYXNzIFNp
bXBsZU1hcmtpbmdDb25zdHJhaW50IGZpbmFsIDogcHUKIHB1YmxpYzoKICAgICBKU19FWFBPUlRf
UFJJVkFURSBTaW1wbGVNYXJraW5nQ29uc3RyYWludCgKICAgICAgICAgQ1N0cmluZyBhYmJyZXZp
YXRlZE5hbWUsIENTdHJpbmcgbmFtZSwKLSAgICAgICAgOjpGdW5jdGlvbjx2b2lkKFNsb3RWaXNp
dG9yJik+LAorICAgICAgICA6OkZ1bmN0aW9uPHZvaWQoQWJzdHJhY3RTbG90VmlzaXRvciYpPiwK
ICAgICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHksCiAgICAgICAgIENvbnN0cmFpbnRDb25jdXJy
ZW5jeSA9IENvbnN0cmFpbnRDb25jdXJyZW5jeTo6Q29uY3VycmVudCwKICAgICAgICAgQ29uc3Ry
YWludFBhcmFsbGVsaXNtID0gQ29uc3RyYWludFBhcmFsbGVsaXNtOjpTZXF1ZW50aWFsKTsKICAg
ICAKICAgICBTaW1wbGVNYXJraW5nQ29uc3RyYWludCgKICAgICAgICAgQ1N0cmluZyBhYmJyZXZp
YXRlZE5hbWUsIENTdHJpbmcgbmFtZSwKLSAgICAgICAgOjpGdW5jdGlvbjx2b2lkKFNsb3RWaXNp
dG9yJik+IGZ1bmMsCisgICAgICAgIDo6RnVuY3Rpb248dm9pZChBYnN0cmFjdFNsb3RWaXNpdG9y
Jik+IGZ1bmMsCiAgICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5IHZvbGF0aWxpdHksCiAgICAg
ICAgIENvbnN0cmFpbnRQYXJhbGxlbGlzbSBwYXJhbGxlbGlzbSkKICAgICAgICAgOiBTaW1wbGVN
YXJraW5nQ29uc3RyYWludChhYmJyZXZpYXRlZE5hbWUsIG5hbWUsIFdURk1vdmUoZnVuYyksIHZv
bGF0aWxpdHksIENvbnN0cmFpbnRDb25jdXJyZW5jeTo6Q29uY3VycmVudCwgcGFyYWxsZWxpc20p
CkBAIC01NCw5ICs1NCw5IEBAIHB1YmxpYzoKICAgICBKU19FWFBPUlRfUFJJVkFURSB+U2ltcGxl
TWFya2luZ0NvbnN0cmFpbnQoKSBmaW5hbDsKICAgICAKIHByaXZhdGU6Ci0gICAgdm9pZCBleGVj
dXRlSW1wbChTbG90VmlzaXRvciYpIGZpbmFsOworICAgIHZvaWQgZXhlY3V0ZUltcGwoQWJzdHJh
Y3RTbG90VmlzaXRvciYpIGZpbmFsOwogCi0gICAgOjpGdW5jdGlvbjx2b2lkKFNsb3RWaXNpdG9y
Jik+IG1fZXhlY3V0ZUZ1bmN0aW9uOworICAgIDo6RnVuY3Rpb248dm9pZChBYnN0cmFjdFNsb3RW
aXNpdG9yJik+IG1fZXhlY3V0ZUZ1bmN0aW9uOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuY3BwCShyZXZpc2lv
biAyNzE3ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNp
bmNsdWRlICJTbG90VmlzaXRvci5oIgogCisjaW5jbHVkZSAiQWJzdHJhY3RTbG90VmlzaXRvcklu
bGluZXMuaCIKICNpbmNsdWRlICJDb25zZXJ2YXRpdmVSb290cy5oIgogI2luY2x1ZGUgIkdDU2Vn
bWVudGVkQXJyYXlJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSGVhcEFuYWx5emVyLmgiCkBAIC0zNSw3
ICszNiw2IEBACiAjaW5jbHVkZSAiSlNBcnJheS5oIgogI2luY2x1ZGUgIkpTQ2VsbElubGluZXMu
aCIKICNpbmNsdWRlICJKU1N0cmluZy5oIgotI2luY2x1ZGUgIk1hcmtpbmdDb25zdHJhaW50U29s
dmVyLmgiCiAjaW5jbHVkZSAiU2xvdFZpc2l0b3JJbmxpbmVzLmgiCiAjaW5jbHVkZSAiU3RvcElm
TmVjZXNzYXJ5VGltZXIuaCIKICNpbmNsdWRlICJWTS5oIgpAQCAtNzcsMTUgKzc3LDE4IEBAIHN0
YXRpYyB2b2lkIHZhbGlkYXRlKEpTQ2VsbCogY2VsbCkKICNlbmRpZgogCiBTbG90VmlzaXRvcjo6
U2xvdFZpc2l0b3IoSGVhcCYgaGVhcCwgQ1N0cmluZyBjb2RlTmFtZSkKLSAgICA6IG1fYnl0ZXNW
aXNpdGVkKDApCi0gICAgLCBtX3Zpc2l0Q291bnQoMCkKKy8vICAgIDogQmFzZShUeXBlOjpTbG90
VmlzaXRvciwgaGVhcCwgY29kZU5hbWUpCisvLyAgICA6IEJhc2UoaGVhcCwgY29kZU5hbWUpCisg
ICAgOiBCYXNlKGhlYXApCisgICAgLCBtX2J5dGVzVmlzaXRlZCgwKQorLy8gICAgLCBtX3Zpc2l0
Q291bnQoMCkKICAgICAsIG1faXNJblBhcmFsbGVsTW9kZShmYWxzZSkKICAgICAsIG1fbWFya2lu
Z1ZlcnNpb24oTWFya2VkU3BhY2U6OmluaXRpYWxWZXJzaW9uKQotICAgICwgbV9oZWFwKGhlYXAp
CisvLyAgICAsIG1faGVhcChoZWFwKQogICAgICwgbV9jb2RlTmFtZShjb2RlTmFtZSkKICNpZiBB
U1NFUlRfRU5BQkxFRAogICAgICwgbV9pc0NoZWNraW5nRm9yRGVmYXVsdE1hcmtWaW9sYXRpb24o
ZmFsc2UpCi0gICAgLCBtX2lzRHJhaW5pbmcoZmFsc2UpCisvLy8vICAgICwgbV9pc0RyYWluaW5n
KGZhbHNlKQogI2VuZGlmCiB7CiB9CkBAIC0xMTcsOCArMTIwLDkgQEAgdm9pZCBTbG90VmlzaXRv
cjo6ZGlkU3RhcnRNYXJraW5nKCkKIAogdm9pZCBTbG90VmlzaXRvcjo6cmVzZXQoKQogeworICAg
IEFic3RyYWN0U2xvdFZpc2l0b3I6OnJlc2V0KCk7CiAgICAgbV9ieXRlc1Zpc2l0ZWQgPSAwOwot
ICAgIG1fdmlzaXRDb3VudCA9IDA7CisvLyAgICBtX3Zpc2l0Q291bnQgPSAwOwogICAgIG1faGVh
cEFuYWx5emVyID0gbnVsbHB0cjsKICAgICBSRUxFQVNFX0FTU0VSVCghbV9jdXJyZW50Q2VsbCk7
CiB9CkBAIC0xMzIsNyArMTM2LDcgQEAgdm9pZCBTbG90VmlzaXRvcjo6Y2xlYXJNYXJrU3RhY2tz
KCkKICAgICAgICAgfSk7CiB9CiAKLXZvaWQgU2xvdFZpc2l0b3I6OmFwcGVuZChjb25zdCBDb25z
ZXJ2YXRpdmVSb290cyYgY29uc2VydmF0aXZlUm9vdHMpCit2b2lkIFNsb3RWaXNpdG9yOjphcHBl
bmRfQ29uc2VydmF0aXZlUm9vdHMoY29uc3QgQ29uc2VydmF0aXZlUm9vdHMmIGNvbnNlcnZhdGl2
ZVJvb3RzKQogewogICAgIEhlYXBDZWxsKiogcm9vdHMgPSBjb25zZXJ2YXRpdmVSb290cy5yb290
cygpOwogICAgIHNpemVfdCBzaXplID0gY29uc2VydmF0aXZlUm9vdHMuc2l6ZSgpOwpAQCAtODA3
LDEzICs4MTEsMTMgQEAgTWFya1N0YWNrQXJyYXkmIFNsb3RWaXNpdG9yOjpjb3JyZXNwb25kaQog
ICAgIHJldHVybiAqbV9oZWFwLm1fc2hhcmVkTXV0YXRvck1hcmtTdGFjazsKIH0KIAotdm9pZCBT
bG90VmlzaXRvcjo6YWRkUGFyYWxsZWxDb25zdHJhaW50VGFzayhSZWZQdHI8U2hhcmVkVGFzazx2
b2lkKFNsb3RWaXNpdG9yJik+PiB0YXNrKQotewotICAgIFJFTEVBU0VfQVNTRVJUKG1fY3VycmVu
dFNvbHZlcik7Ci0gICAgUkVMRUFTRV9BU1NFUlQobV9jdXJyZW50Q29uc3RyYWludCk7Ci0gICAg
UkVMRUFTRV9BU1NFUlQodGFzayk7Ci0gICAgCi0gICAgbV9jdXJyZW50U29sdmVyLT5hZGRQYXJh
bGxlbFRhc2sodGFzaywgKm1fY3VycmVudENvbnN0cmFpbnQpOwotfQorLy92b2lkIFNsb3RWaXNp
dG9yOjphZGRQYXJhbGxlbENvbnN0cmFpbnRUYXNrKFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoQWJz
dHJhY3RTbG90VmlzaXRvciYpPj4gdGFzaykKKy8veworLy8gICAgUkVMRUFTRV9BU1NFUlQobV9j
dXJyZW50U29sdmVyKTsKKy8vICAgIFJFTEVBU0VfQVNTRVJUKG1fY3VycmVudENvbnN0cmFpbnQp
OworLy8gICAgUkVMRUFTRV9BU1NFUlQodGFzayk7CisvLworLy8gICAgbV9jdXJyZW50U29sdmVy
LT5hZGRQYXJhbGxlbFRhc2sodGFzaywgKm1fY3VycmVudENvbnN0cmFpbnQpOworLy99CiAKIH0g
Ly8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZp
c2l0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90Vmlz
aXRvci5oCShyZXZpc2lvbiAyNzE3ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9T
bG90VmlzaXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMS0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjUsNzQgKzI1LDEwMCBAQAogCiAjcHJh
Z21hIG9uY2UKIAorI2luY2x1ZGUgIkFic3RyYWN0U2xvdFZpc2l0b3IuaCIKICNpbmNsdWRlICJI
YW5kbGVUeXBlcy5oIgogI2luY2x1ZGUgIkl0ZXJhdGlvblN0YXR1cy5oIgotI2luY2x1ZGUgIk1h
cmtTdGFjay5oIgotI2luY2x1ZGUgIlZpc2l0UmFjZUtleS5oIgorLy8jaW5jbHVkZSAiTWFya1N0
YWNrLmgiCisvLyNpbmNsdWRlICJWaXNpdFJhY2VLZXkuaCIKICNpbmNsdWRlIDx3dGYvRm9yd2Fy
ZC5oPgogI2luY2x1ZGUgPHd0Zi9Nb25vdG9uaWNUaW1lLmg+Ci0jaW5jbHVkZSA8d3RmL1NoYXJl
ZFRhc2suaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisvLyNpbmNsdWRlIDx3dGYv
U2hhcmVkVGFzay5oPgorLy8jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCiBuYW1lc3Bh
Y2UgSlNDIHsKIAotY2xhc3MgQ29uc2VydmF0aXZlUm9vdHM7CisvL2NsYXNzIENvbnNlcnZhdGl2
ZVJvb3RzOwogY2xhc3MgR0NUaHJlYWRTaGFyZWREYXRhOwotY2xhc3MgSGVhcDsKKy8vY2xhc3Mg
SGVhcDsKIGNsYXNzIEhlYXBDZWxsOwogY2xhc3MgSGVhcEFuYWx5emVyOwotY2xhc3MgTWFya2Vk
QmxvY2s7Ci1jbGFzcyBNYXJraW5nQ29uc3RyYWludDsKLWNsYXNzIE1hcmtpbmdDb25zdHJhaW50
U29sdmVyOwotdGVtcGxhdGU8dHlwZW5hbWUgVD4gY2xhc3MgV2VhazsKLXRlbXBsYXRlPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIFRyYWl0cz4gY2xhc3MgV3JpdGVCYXJyaWVyQmFzZTsKKy8vY2xhc3Mg
TWFya2luZ0NvbnN0cmFpbnQ7CisvL2NsYXNzIE1hcmtpbmdDb25zdHJhaW50U29sdmVyOworLy90
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjbGFzcyBXZWFrOworLy90ZW1wbGF0ZTx0eXBlbmFtZSBULCB0
eXBlbmFtZSBUcmFpdHM+IGNsYXNzIFdyaXRlQmFycmllckJhc2U7CiAKIHR5cGVkZWYgdWludDMy
X3QgSGVhcFZlcnNpb247CiAKLWNsYXNzIFNsb3RWaXNpdG9yIHsKK2NsYXNzIFNsb3RWaXNpdG9y
IGZpbmFsIDogcHVibGljIEFic3RyYWN0U2xvdFZpc2l0b3IgewogICAgIFdURl9NQUtFX05PTkNP
UFlBQkxFKFNsb3RWaXNpdG9yKTsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIAorICAg
IHVzaW5nIEJhc2UgPSBBYnN0cmFjdFNsb3RWaXNpdG9yOworCiAgICAgZnJpZW5kIGNsYXNzIFNl
dEN1cnJlbnRDZWxsU2NvcGU7CiAgICAgZnJpZW5kIGNsYXNzIEhlYXA7CiAKIHB1YmxpYzoKLSAg
ICBlbnVtIFJvb3RNYXJrUmVhc29uIHsKLSAgICAgICAgTm9uZSwKLSAgICAgICAgQ29uc2VydmF0
aXZlU2NhbiwKLSAgICAgICAgU3Ryb25nUmVmZXJlbmNlcywKLSAgICAgICAgUHJvdGVjdGVkVmFs
dWVzLAotICAgICAgICBNYXJrTGlzdFNldCwKLSAgICAgICAgVk1FeGNlcHRpb25zLAotICAgICAg
ICBTdHJvbmdIYW5kbGVzLAotICAgICAgICBEZWJ1Z2dlciwKLSAgICAgICAgSklUU3R1YlJvdXRp
bmVzLAotICAgICAgICBXZWFrU2V0cywKLSAgICAgICAgT3V0cHV0LAotICAgICAgICBERkdXb3Jr
TGlzdHMsCi0gICAgICAgIENvZGVCbG9ja3MsCi0gICAgICAgIERPTUdDT3V0cHV0LAorICAgIGNs
YXNzIERlZmF1bHRNYXJraW5nVmlvbGF0aW9uQXNzZXJ0aW9uU2NvcGUgeworICAgIHB1YmxpYzoK
KyNpZiBBU1NFUlRfRU5BQkxFRAorICAgICAgICBEZWZhdWx0TWFya2luZ1Zpb2xhdGlvbkFzc2Vy
dGlvblNjb3BlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorICAgICAgICAgICAgOiBtX3Zpc2l0b3Io
dmlzaXRvcikKKyAgICAgICAgeworICAgICAgICAgICAgbV93YXNDaGVja2luZ0ZvckRlZmF1bHRN
YXJrVmlvbGF0aW9uID0gbV92aXNpdG9yLm1faXNDaGVja2luZ0ZvckRlZmF1bHRNYXJrVmlvbGF0
aW9uOworICAgICAgICAgICAgbV92aXNpdG9yLm1faXNDaGVja2luZ0ZvckRlZmF1bHRNYXJrVmlv
bGF0aW9uID0gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICB+RGVmYXVsdE1hcmtpbmdWaW9s
YXRpb25Bc3NlcnRpb25TY29wZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1fdmlzaXRvci5t
X2lzQ2hlY2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlvbiA9IG1fd2FzQ2hlY2tpbmdGb3JEZWZh
dWx0TWFya1Zpb2xhdGlvbjsKKyAgICAgICAgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgU2xv
dFZpc2l0b3ImIG1fdmlzaXRvcjsKKyAgICAgICAgYm9vbCBtX3dhc0NoZWNraW5nRm9yRGVmYXVs
dE1hcmtWaW9sYXRpb247CisjZWxzZQorICAgICAgICBEZWZhdWx0TWFya2luZ1Zpb2xhdGlvbkFz
c2VydGlvblNjb3BlKFNsb3RWaXNpdG9yJikgeyB9CisjZW5kaWYKICAgICB9OwogCisvLyAgICBl
bnVtIFJvb3RNYXJrUmVhc29uIHsKKy8vICAgICAgICBOb25lLAorLy8gICAgICAgIENvbnNlcnZh
dGl2ZVNjYW4sCisvLyAgICAgICAgU3Ryb25nUmVmZXJlbmNlcywKKy8vICAgICAgICBQcm90ZWN0
ZWRWYWx1ZXMsCisvLyAgICAgICAgTWFya0xpc3RTZXQsCisvLyAgICAgICAgVk1FeGNlcHRpb25z
LAorLy8gICAgICAgIFN0cm9uZ0hhbmRsZXMsCisvLyAgICAgICAgRGVidWdnZXIsCisvLyAgICAg
ICAgSklUU3R1YlJvdXRpbmVzLAorLy8gICAgICAgIFdlYWtTZXRzLAorLy8gICAgICAgIE91dHB1
dCwKKy8vICAgICAgICBERkdXb3JrTGlzdHMsCisvLyAgICAgICAgQ29kZUJsb2NrcywKKy8vICAg
ICAgICBET01HQ091dHB1dCwKKy8vICAgIH07CisKICAgICBTbG90VmlzaXRvcihIZWFwJiwgQ1N0
cmluZyBjb2RlTmFtZSk7CiAgICAgflNsb3RWaXNpdG9yKCk7CiAKLSAgICBNYXJrU3RhY2tBcnJh
eSYgY29sbGVjdG9yTWFya1N0YWNrKCkgeyByZXR1cm4gbV9jb2xsZWN0b3JTdGFjazsgfQotICAg
IE1hcmtTdGFja0FycmF5JiBtdXRhdG9yTWFya1N0YWNrKCkgeyByZXR1cm4gbV9tdXRhdG9yU3Rh
Y2s7IH0KLSAgICBjb25zdCBNYXJrU3RhY2tBcnJheSYgY29sbGVjdG9yTWFya1N0YWNrKCkgY29u
c3QgeyByZXR1cm4gbV9jb2xsZWN0b3JTdGFjazsgfQotICAgIGNvbnN0IE1hcmtTdGFja0FycmF5
JiBtdXRhdG9yTWFya1N0YWNrKCkgY29uc3QgeyByZXR1cm4gbV9tdXRhdG9yU3RhY2s7IH0KLSAg
ICAKLSAgICBWTSYgdm0oKTsKLSAgICBjb25zdCBWTSYgdm0oKSBjb25zdDsKLSAgICBIZWFwKiBo
ZWFwKCkgY29uc3Q7Ci0KLSAgICB2b2lkIGFwcGVuZChjb25zdCBDb25zZXJ2YXRpdmVSb290cyYp
OwotICAgIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFRyYWl0cz4gdm9pZCBh
cHBlbmQoY29uc3QgV3JpdGVCYXJyaWVyQmFzZTxULCBUcmFpdHM+Jik7Ci0gICAgdGVtcGxhdGU8
dHlwZW5hbWUgVCwgdHlwZW5hbWUgVHJhaXRzPiB2b2lkIGFwcGVuZEhpZGRlbihjb25zdCBXcml0
ZUJhcnJpZXJCYXNlPFQsIFRyYWl0cz4mKTsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJdGVyYXRv
cj4gdm9pZCBhcHBlbmQoSXRlcmF0b3IgYmVnaW4gLCBJdGVyYXRvciBlbmQpOwotICAgIHZvaWQg
YXBwZW5kVmFsdWVzKGNvbnN0IFdyaXRlQmFycmllckJhc2U8VW5rbm93biwgUmF3VmFsdWVUcmFp
dHM8VW5rbm93bj4+Kiwgc2l6ZV90IGNvdW50KTsKLSAgICB2b2lkIGFwcGVuZFZhbHVlc0hpZGRl
bihjb25zdCBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24sIFJhd1ZhbHVlVHJhaXRzPFVua25vd24+
PiosIHNpemVfdCBjb3VudCk7CisvLyAgICBNYXJrU3RhY2tBcnJheSYgY29sbGVjdG9yTWFya1N0
YWNrKCkgeyByZXR1cm4gbV9jb2xsZWN0b3JTdGFjazsgfQorLy8gICAgTWFya1N0YWNrQXJyYXkm
IG11dGF0b3JNYXJrU3RhY2soKSB7IHJldHVybiBtX211dGF0b3JTdGFjazsgfQorLy8gICAgY29u
c3QgTWFya1N0YWNrQXJyYXkmIGNvbGxlY3Rvck1hcmtTdGFjaygpIGNvbnN0IHsgcmV0dXJuIG1f
Y29sbGVjdG9yU3RhY2s7IH0KKy8vICAgIGNvbnN0IE1hcmtTdGFja0FycmF5JiBtdXRhdG9yTWFy
a1N0YWNrKCkgY29uc3QgeyByZXR1cm4gbV9tdXRhdG9yU3RhY2s7IH0KKyAgICAKKy8vICAgIFZN
JiB2bSgpOworLy8gICAgY29uc3QgVk0mIHZtKCkgY29uc3Q7CisvLyAgICBIZWFwKiBoZWFwKCkg
Y29uc3Q7CisKKyAgICB2b2lkIGFwcGVuZF9Db25zZXJ2YXRpdmVSb290cyhjb25zdCBDb25zZXJ2
YXRpdmVSb290cyYpIGZpbmFsOworCisgICAgdXNpbmcgQmFzZTo6YXBwZW5kOworLy8gICAgdGVt
cGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVHJhaXRzPiB2b2lkIGFwcGVuZChjb25zdCBXcml0
ZUJhcnJpZXJCYXNlPFQsIFRyYWl0cz4mKTsKKy8vICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5
cGVuYW1lIFRyYWl0cz4gdm9pZCBhcHBlbmRIaWRkZW4oY29uc3QgV3JpdGVCYXJyaWVyQmFzZTxU
LCBUcmFpdHM+Jik7CisvLyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJdGVyYXRvcj4gdm9pZCBhcHBl
bmQoSXRlcmF0b3IgYmVnaW4gLCBJdGVyYXRvciBlbmQpOworLy8gICAgdm9pZCBhcHBlbmRWYWx1
ZXMoY29uc3QgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duLCBSYXdWYWx1ZVRyYWl0czxVbmtub3du
Pj4qLCBzaXplX3QgY291bnQpOworLy8gICAgdm9pZCBhcHBlbmRWYWx1ZXNIaWRkZW4oY29uc3Qg
V3JpdGVCYXJyaWVyQmFzZTxVbmtub3duLCBSYXdWYWx1ZVRyYWl0czxVbmtub3duPj4qLCBzaXpl
X3QgY291bnQpOwogICAgIAogICAgIC8vIFRoZXNlIGRvbid0IHJlcXVpcmUgeW91IHRvIHByb3Zl
IHRoYXQgeW91IGhhdmUgYSBXcml0ZUJhcnJpZXI8Pi4gVGhhdCBtYWtlcyBzZW5zZQogICAgIC8v
IGZvcjoKQEAgLTEwMywzMiArMTI5LDM2IEBAIHB1YmxpYzoKICAgICAvLwogICAgIC8vIElmIHlv
dSBhcmUgbm90IGEgcm9vdCBhbmQgeW91IGRvbid0IGtub3cgd2hhdCBraW5kIG9mIGJhcnJpZXIg
eW91IGhhdmUsIHRoZW4geW91CiAgICAgLy8gc2hvdWxkbid0IGNhbGwgdGhlc2UgbWV0aG9kcy4K
LSAgICB2b2lkIGFwcGVuZFVuYmFycmllcmVkKEpTVmFsdWUpOwotICAgIHZvaWQgYXBwZW5kVW5i
YXJyaWVyZWQoSlNWYWx1ZSosIHNpemVfdCk7Ci0gICAgdm9pZCBhcHBlbmRVbmJhcnJpZXJlZChK
U0NlbGwqKTsKKy8vICAgIHZvaWQgYXBwZW5kVW5iYXJyaWVyZWQoSlNWYWx1ZSkgZmluYWw7Cisv
LyAgICB2b2lkIGFwcGVuZFVuYmFycmllcmVkKEpTVmFsdWUqLCBzaXplX3QpOworICAgIHZvaWQg
YXBwZW5kVW5iYXJyaWVyZWRJbXBsKEpTQ2VsbCopIGZpbmFsOwogICAgIAotICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFQ+Ci0gICAgdm9pZCBhcHBlbmQoY29uc3QgV2VhazxUPiYgd2Vhayk7CisvLyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorLy8gICAgdm9pZCBhcHBlbmQoY29uc3QgV2VhazxUPiYg
d2Vhayk7CiAgICAgCi0gICAgdm9pZCBhcHBlbmRIaWRkZW5VbmJhcnJpZXJlZChKU1ZhbHVlKTsK
LSAgICB2b2lkIGFwcGVuZEhpZGRlblVuYmFycmllcmVkKEpTQ2VsbCopOworLy8gICAgdm9pZCBh
cHBlbmRIaWRkZW5VbmJhcnJpZXJlZChKU1ZhbHVlKSBmaW5hbDsKKyAgICB2b2lkIGFwcGVuZEhp
ZGRlblVuYmFycmllcmVkSW1wbChKU0NlbGwqKSBmaW5hbDsKIAotICAgIGJvb2wgYWRkT3BhcXVl
Um9vdCh2b2lkKik7IC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgcm9vdCB3YXMgbmV3LgorICAgIGJv
b2wgYWRkT3BhcXVlUm9vdCh2b2lkKikgZmluYWw7IC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgcm9v
dCB3YXMgbmV3LgogICAgIAotICAgIGJvb2wgY29udGFpbnNPcGFxdWVSb290KHZvaWQqKSBjb25z
dDsKKyAgICBib29sIGNvbnRhaW5zT3BhcXVlUm9vdCh2b2lkKikgY29uc3QgZmluYWw7CiAKLSAg
ICBib29sIGlzRW1wdHkoKSB7IHJldHVybiBtX2NvbGxlY3RvclN0YWNrLmlzRW1wdHkoKSAmJiBt
X211dGF0b3JTdGFjay5pc0VtcHR5KCk7IH0KKy8vICAgIGJvb2wgaXNFbXB0eSgpIHsgcmV0dXJu
IG1fY29sbGVjdG9yU3RhY2suaXNFbXB0eSgpICYmIG1fbXV0YXRvclN0YWNrLmlzRW1wdHkoKTsg
fQogCiAgICAgYm9vbCBpc0ZpcnN0VmlzaXQoKSBjb25zdCB7IHJldHVybiBtX2lzRmlyc3RWaXNp
dDsgfQogCisgICAgYm9vbCBpc01hcmtlZChjb25zdCB2b2lkKikgY29uc3QgZmluYWw7CisgICAg
Ym9vbCBpc01hcmtlZChNYXJrZWRCbG9jayYsIEhlYXBDZWxsKikgY29uc3QgZmluYWw7CisgICAg
Ym9vbCBpc01hcmtlZChQcmVjaXNlQWxsb2NhdGlvbiYsIEhlYXBDZWxsKikgY29uc3QgZmluYWw7
CisKICAgICB2b2lkIGRpZFN0YXJ0TWFya2luZygpOwogICAgIHZvaWQgcmVzZXQoKTsKICAgICB2
b2lkIGNsZWFyTWFya1N0YWNrcygpOwogCiAgICAgc2l6ZV90IGJ5dGVzVmlzaXRlZCgpIGNvbnN0
IHsgcmV0dXJuIG1fYnl0ZXNWaXNpdGVkOyB9Ci0gICAgc2l6ZV90IHZpc2l0Q291bnQoKSBjb25z
dCB7IHJldHVybiBtX3Zpc2l0Q291bnQ7IH0KLSAgICAKLSAgICB2b2lkIGFkZFRvVmlzaXRDb3Vu
dChzaXplX3QgdmFsdWUpIHsgbV92aXNpdENvdW50ICs9IHZhbHVlOyB9CisvLyAgICBzaXplX3Qg
dmlzaXRDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fdmlzaXRDb3VudDsgfQorCisvLyAgICB2b2lk
IGFkZFRvVmlzaXRDb3VudChzaXplX3QgdmFsdWUpIHsgbV92aXNpdENvdW50ICs9IHZhbHVlOyB9
CiAKICAgICB2b2lkIGRvbmF0ZSgpOwogICAgIHZvaWQgZHJhaW4oTW9ub3RvbmljVGltZSB0aW1l
b3V0ID0gTW9ub3RvbmljVGltZTo6aW5maW5pdHkoKSk7CkBAIC0xNTEsMjQgKzE4MSwyNCBAQCBw
dWJsaWM6CiAgICAgCiAgICAgLy8gVGhpcyBpbmZvcm1zIHRoZSBHQyBhYm91dCBhdXhpbGlhcnkg
b2Ygc29tZSBzaXplIHRoYXQgd2UgYXJlIGtlZXBpbmcgYWxpdmUuIElmIHlvdSBkb24ndCBkbwog
ICAgIC8vIHRoaXMgdGhlbiB0aGUgc3BhY2Ugd2lsbCBiZSBmcmVlZCBhdCBlbmQgb2YgR0MuCi0g
ICAgdm9pZCBtYXJrQXV4aWxpYXJ5KGNvbnN0IHZvaWQqIGJhc2UpOworICAgIHZvaWQgbWFya0F1
eGlsaWFyeShjb25zdCB2b2lkKiBiYXNlKSBmaW5hbDsKIAotICAgIHZvaWQgcmVwb3J0RXh0cmFN
ZW1vcnlWaXNpdGVkKHNpemVfdCk7CisgICAgdm9pZCByZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQo
c2l6ZV90KSBmaW5hbDsKICNpZiBFTkFCTEUoUkVTT1VSQ0VfVVNBR0UpCi0gICAgdm9pZCByZXBv
cnRFeHRlcm5hbE1lbW9yeVZpc2l0ZWQoc2l6ZV90KTsKKyAgICB2b2lkIHJlcG9ydEV4dGVybmFs
TWVtb3J5VmlzaXRlZChzaXplX3QpIGZpbmFsOwogI2VuZGlmCiAgICAgCi0gICAgdm9pZCBkdW1w
KFByaW50U3RyZWFtJikgY29uc3Q7CisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Qg
ZmluYWw7CiAKLSAgICBib29sIGlzQW5hbHl6aW5nSGVhcCgpIGNvbnN0IHsgcmV0dXJuICEhbV9o
ZWFwQW5hbHl6ZXI7IH0KLSAgICBIZWFwQW5hbHl6ZXIqIGhlYXBBbmFseXplcigpIGNvbnN0IHsg
cmV0dXJuIG1faGVhcEFuYWx5emVyOyB9CisvLyAgICBib29sIGlzQW5hbHl6aW5nSGVhcCgpIGNv
bnN0IHsgcmV0dXJuICEhbV9oZWFwQW5hbHl6ZXI7IH0KKy8vICAgIEhlYXBBbmFseXplciogaGVh
cEFuYWx5emVyKCkgY29uc3QgeyByZXR1cm4gbV9oZWFwQW5hbHl6ZXI7IH0KICAgICAKLSAgICBS
b290TWFya1JlYXNvbiByb290TWFya1JlYXNvbigpIGNvbnN0IHsgcmV0dXJuIG1fcm9vdE1hcmtS
ZWFzb247IH0KLSAgICB2b2lkIHNldFJvb3RNYXJrUmVhc29uKFJvb3RNYXJrUmVhc29uIHJlYXNv
bikgeyBtX3Jvb3RNYXJrUmVhc29uID0gcmVhc29uOyB9CisvLyAgICBSb290TWFya1JlYXNvbiBy
b290TWFya1JlYXNvbigpIGNvbnN0IHsgcmV0dXJuIG1fcm9vdE1hcmtSZWFzb247IH0KKy8vICAg
IHZvaWQgc2V0Um9vdE1hcmtSZWFzb24oUm9vdE1hcmtSZWFzb24gcmVhc29uKSB7IG1fcm9vdE1h
cmtSZWFzb24gPSByZWFzb247IH0KIAogICAgIEhlYXBWZXJzaW9uIG1hcmtpbmdWZXJzaW9uKCkg
Y29uc3QgeyByZXR1cm4gbV9tYXJraW5nVmVyc2lvbjsgfQogCi0gICAgYm9vbCBtdXRhdG9ySXNT
dG9wcGVkKCkgY29uc3QgeyByZXR1cm4gbV9tdXRhdG9ySXNTdG9wcGVkOyB9CisgICAgYm9vbCBt
dXRhdG9ySXNTdG9wcGVkKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9tdXRhdG9ySXNTdG9wcGVk
OyB9CiAgICAgCiAgICAgTG9jayYgcmlnaHRUb1J1bigpIHsgcmV0dXJuIG1fcmlnaHRUb1J1bjsg
fQogICAgIApAQCAtMTgwLDEwICsyMTAsMTAgQEAgcHVibGljOgogICAgIAogICAgIHZvaWQgb3B0
aW1pemVGb3JTdG9wcGVkTXV0YXRvcigpOwogICAgIAotICAgIHZvaWQgZGlkUmFjZShjb25zdCBW
aXNpdFJhY2VLZXkmKTsKKyAgICB2b2lkIGRpZFJhY2UoY29uc3QgVmlzaXRSYWNlS2V5JikgZmlu
YWw7CiAgICAgdm9pZCBkaWRSYWNlKEpTQ2VsbCogY2VsbCwgY29uc3QgY2hhciogcmVhc29uKSB7
IGRpZFJhY2UoVmlzaXRSYWNlS2V5KGNlbGwsIHJlYXNvbikpOyB9CiAgICAgCi0gICAgdm9pZCB2
aXNpdEFzQ29uc3RyYWludChjb25zdCBKU0NlbGwqKTsKKyAgICB2b2lkIHZpc2l0QXNDb25zdHJh
aW50KGNvbnN0IEpTQ2VsbCopIGZpbmFsOwogICAgIAogICAgIGJvb2wgZGlkUmVhY2hUZXJtaW5h
dGlvbigpOwogICAgIApAQCAtMTkzLDExICsyMjMsMTEgQEAgcHVibGljOgogICAgIAogICAgIGNv
bnN0IGNoYXIqIGNvZGVOYW1lKCkgY29uc3QgeyByZXR1cm4gbV9jb2RlTmFtZS5kYXRhKCk7IH0K
ICAgICAKLSAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGFkZFBhcmFsbGVsQ29uc3RyYWludFRh
c2soUmVmUHRyPFNoYXJlZFRhc2s8dm9pZChTbG90VmlzaXRvciYpPj4pOworLy8gICAgSlNfRVhQ
T1JUX1BSSVZBVEUgdm9pZCBhZGRQYXJhbGxlbENvbnN0cmFpbnRUYXNrKFJlZlB0cjxTaGFyZWRU
YXNrPHZvaWQoQWJzdHJhY3RTbG90VmlzaXRvciYpPj4pOwogCiBwcml2YXRlOgogICAgIGZyaWVu
ZCBjbGFzcyBQYXJhbGxlbE1vZGVFbmFibGVyOwotICAgIGZyaWVuZCBjbGFzcyBNYXJraW5nQ29u
c3RyYWludFNvbHZlcjsKKy8vICAgIGZyaWVuZCBjbGFzcyBNYXJraW5nQ29uc3RyYWludFNvbHZl
cjsKICAgICAKICAgICB2b2lkIGFwcGVuZEpTQ2VsbE9yQXV4aWxpYXJ5KEhlYXBDZWxsKik7CiAK
QEAgLTIzMiwyMyArMjYyLDIzIEBAIHByaXZhdGU6CiAKICAgICBNYXJrU3RhY2tBcnJheSYgY29y
cmVzcG9uZGluZ0dsb2JhbFN0YWNrKE1hcmtTdGFja0FycmF5Jik7CiAKLSAgICBNYXJrU3RhY2tB
cnJheSBtX2NvbGxlY3RvclN0YWNrOwotICAgIE1hcmtTdGFja0FycmF5IG1fbXV0YXRvclN0YWNr
OwotICAgIAorLy8gICAgTWFya1N0YWNrQXJyYXkgbV9jb2xsZWN0b3JTdGFjazsKKy8vICAgIE1h
cmtTdGFja0FycmF5IG1fbXV0YXRvclN0YWNrOworCiAgICAgc2l6ZV90IG1fYnl0ZXNWaXNpdGVk
OwotICAgIHNpemVfdCBtX3Zpc2l0Q291bnQ7CisvLyAgICBzaXplX3QgbV92aXNpdENvdW50Owog
ICAgIHNpemVfdCBtX25vbkNlbGxWaXNpdENvdW50IHsgMCB9OyAvLyBVc2VkIGZvciBpbmNyZW1l
bnRhbCBkcmFpbmluZywgaWdub3JlZCBvdGhlcndpc2UuCiAgICAgQ2hlY2tlZFNpemUgbV9leHRy
YU1lbW9yeVNpemUgeyAwIH07CiAgICAgYm9vbCBtX2lzSW5QYXJhbGxlbE1vZGU7CiAgICAgYm9v
bCBtX2lnbm9yZU5ld09wYXF1ZVJvb3RzIHsgZmFsc2UgfTsgLy8gVXNlZnVsIGFzIGEgZGVidWdn
aW5nIG1vZGUuCiAKICAgICBIZWFwVmVyc2lvbiBtX21hcmtpbmdWZXJzaW9uOwotICAgIAotICAg
IEhlYXAmIG1faGVhcDsKKworLy8gICAgSGVhcCYgbV9oZWFwOwogCiAgICAgSGVhcEFuYWx5emVy
KiBtX2hlYXBBbmFseXplciB7IG51bGxwdHIgfTsKICAgICBKU0NlbGwqIG1fY3VycmVudENlbGwg
eyBudWxscHRyIH07Ci0gICAgUm9vdE1hcmtSZWFzb24gbV9yb290TWFya1JlYXNvbiB7IFJvb3RN
YXJrUmVhc29uOjpOb25lIH07CisvLyAgICBSb290TWFya1JlYXNvbiBtX3Jvb3RNYXJrUmVhc29u
IHsgUm9vdE1hcmtSZWFzb246Ok5vbmUgfTsKICAgICBib29sIG1faXNGaXJzdFZpc2l0IHsgZmFs
c2UgfTsKICAgICBib29sIG1fbXV0YXRvcklzU3RvcHBlZCB7IGZhbHNlIH07CiAgICAgYm9vbCBt
X2Nhbk9wdGltaXplRm9yU3RvcHBlZE11dGF0b3IgeyBmYWxzZSB9OwpAQCAtMjU2LDE1ICsyODYs
MTUgQEAgcHJpdmF0ZToKICAgICAKICAgICBDU3RyaW5nIG1fY29kZU5hbWU7CiAgICAgCi0gICAg
TWFya2luZ0NvbnN0cmFpbnQqIG1fY3VycmVudENvbnN0cmFpbnQgeyBudWxscHRyIH07Ci0gICAg
TWFya2luZ0NvbnN0cmFpbnRTb2x2ZXIqIG1fY3VycmVudFNvbHZlciB7IG51bGxwdHIgfTsKKy8v
ICAgIE1hcmtpbmdDb25zdHJhaW50KiBtX2N1cnJlbnRDb25zdHJhaW50IHsgbnVsbHB0ciB9Owor
Ly8gICAgTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXIqIG1fY3VycmVudFNvbHZlciB7IG51bGxwdHIg
fTsKICAgICAKICAgICAvLyBQdXQgcGFkZGluZyBoZXJlIHRvIG1pdGlnYXRlIGZhbHNlIHNoYXJp
bmcgYmV0d2VlbiBtdWx0aXBsZSBTbG90VmlzaXRvcnMuCiAgICAgY2hhciBwYWRkaW5nWzY0XTsK
LXB1YmxpYzoKKy8vcHVibGljOgogI2lmIEFTU0VSVF9FTkFCTEVECi0gICAgYm9vbCBtX2lzQ2hl
Y2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlvbjsKLSAgICBib29sIG1faXNEcmFpbmluZzsKKyAg
ICBib29sIG1faXNDaGVja2luZ0ZvckRlZmF1bHRNYXJrVmlvbGF0aW9uIHsgZmFsc2UgfTsKKy8v
ICAgIGJvb2wgbV9pc0RyYWluaW5nOwogI2VuZGlmCiB9OwogCkBAIC0yODcsMjMgKzMxNywyMyBA
QCBwcml2YXRlOgogICAgIFNsb3RWaXNpdG9yJiBtX3N0YWNrOwogfTsKIAotY2xhc3MgU2V0Um9v
dE1hcmtSZWFzb25TY29wZSB7Ci1wdWJsaWM6Ci0gICAgU2V0Um9vdE1hcmtSZWFzb25TY29wZShT
bG90VmlzaXRvciYgdmlzaXRvciwgU2xvdFZpc2l0b3I6OlJvb3RNYXJrUmVhc29uIHJlYXNvbikK
LSAgICAgICAgOiBtX3Zpc2l0b3IodmlzaXRvcikKLSAgICAgICAgLCBtX3ByZXZpb3VzUmVhc29u
KHZpc2l0b3Iucm9vdE1hcmtSZWFzb24oKSkKLSAgICB7Ci0gICAgICAgIG1fdmlzaXRvci5zZXRS
b290TWFya1JlYXNvbihyZWFzb24pOwotICAgIH0KLQotICAgIH5TZXRSb290TWFya1JlYXNvblNj
b3BlKCkKLSAgICB7Ci0gICAgICAgIG1fdmlzaXRvci5zZXRSb290TWFya1JlYXNvbihtX3ByZXZp
b3VzUmVhc29uKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgU2xvdFZpc2l0b3ImIG1fdmlzaXRv
cjsKLSAgICBTbG90VmlzaXRvcjo6Um9vdE1hcmtSZWFzb24gbV9wcmV2aW91c1JlYXNvbjsKLX07
Ci0KKy8vY2xhc3MgU2V0Um9vdE1hcmtSZWFzb25TY29wZSB7CisvL3B1YmxpYzoKKy8vICAgIFNl
dFJvb3RNYXJrUmVhc29uU2NvcGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IsIFNsb3RWaXNpdG9yOjpS
b290TWFya1JlYXNvbiByZWFzb24pCisvLyAgICAgICAgOiBtX3Zpc2l0b3IodmlzaXRvcikKKy8v
ICAgICAgICAsIG1fcHJldmlvdXNSZWFzb24odmlzaXRvci5yb290TWFya1JlYXNvbigpKQorLy8g
ICAgeworLy8gICAgICAgIG1fdmlzaXRvci5zZXRSb290TWFya1JlYXNvbihyZWFzb24pOworLy8g
ICAgfQorLy8KKy8vICAgIH5TZXRSb290TWFya1JlYXNvblNjb3BlKCkKKy8vICAgIHsKKy8vICAg
ICAgICBtX3Zpc2l0b3Iuc2V0Um9vdE1hcmtSZWFzb24obV9wcmV2aW91c1JlYXNvbik7CisvLyAg
ICB9CisvLworLy9wcml2YXRlOgorLy8gICAgU2xvdFZpc2l0b3ImIG1fdmlzaXRvcjsKKy8vICAg
IFNsb3RWaXNpdG9yOjpSb290TWFya1JlYXNvbiBtX3ByZXZpb3VzUmVhc29uOworLy99OworLy8K
IH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xv
dFZpc2l0b3JJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvU2xvdFZpc2l0b3JJbmxpbmVzLmgJKHJldmlzaW9uIDI3MTc4NikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9ySW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE5IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MjUsMjYgKzI1LDI5IEBACiAKICNwcmFnbWEgb25jZQogCisjaW5jbHVkZSAiQWJzdHJhY3RTbG90
VmlzaXRvcklubGluZXMuaCIKICNpbmNsdWRlICJTbG90VmlzaXRvci5oIgotI2luY2x1ZGUgIldl
YWsuaCIKLSNpbmNsdWRlICJXZWFrSW5saW5lcy5oIgorI2luY2x1ZGUgIk1hcmtlZEJsb2NrLmgi
CisjaW5jbHVkZSAiUHJlY2lzZUFsbG9jYXRpb24uaCIKKy8vI2luY2x1ZGUgIldlYWsuaCIKKy8v
I2luY2x1ZGUgIldlYWtJbmxpbmVzLmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCi1BTFdBWVNfSU5M
SU5FIHZvaWQgU2xvdFZpc2l0b3I6OmFwcGVuZFVuYmFycmllcmVkKEpTVmFsdWUqIHNsb3QsIHNp
emVfdCBjb3VudCkKLXsKLSAgICBmb3IgKHNpemVfdCBpID0gY291bnQ7IGktLTspCi0gICAgICAg
IGFwcGVuZFVuYmFycmllcmVkKHNsb3RbaV0pOwotfQorLy9BTFdBWVNfSU5MSU5FIHZvaWQgU2xv
dFZpc2l0b3I6OmFwcGVuZFVuYmFycmllcmVkKEpTVmFsdWUqIHNsb3QsIHNpemVfdCBjb3VudCkK
Ky8veworLy8gICAgZm9yIChzaXplX3QgaSA9IGNvdW50OyBpLS07KQorLy8gICAgICAgIGFwcGVu
ZFVuYmFycmllcmVkKHNsb3RbaV0pOworLy99CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBTbG90Vmlz
aXRvcjo6YXBwZW5kVW5iYXJyaWVyZWQoSlNDZWxsKiBjZWxsKQorQUxXQVlTX0lOTElORSB2b2lk
IFNsb3RWaXNpdG9yOjphcHBlbmRVbmJhcnJpZXJlZEltcGwoSlNDZWxsKiBjZWxsKQogewogICAg
IC8vIFRoaXMgbmVlZHMgdG8gYmUgd3JpdHRlbiBpbiBhIHZlcnkgc3BlY2lmaWMgd2F5IHRvIGVu
c3VyZSB0aGF0IGl0IGdldHMgaW5saW5lZAogICAgIC8vIHByb3Blcmx5LiBJbiBwYXJ0aWN1bGFy
LCBpdCBhcHBlYXJzIHRoYXQgdXNpbmcgdGVtcGxhdGVzIGhlcmUgYnJlYWtzIEFMV0FZU19JTkxJ
TkUuCiAgICAgCi0gICAgaWYgKCFjZWxsKQotICAgICAgICByZXR1cm47Ci0gICAgCisvLyAgICBp
ZiAoIWNlbGwpCisvLyAgICAgICAgcmV0dXJuOworLy8KICAgICBEZXBlbmRlbmN5IGRlcGVuZGVu
Y3k7CiAgICAgaWYgKFVOTElLRUxZKGNlbGwtPmlzUHJlY2lzZUFsbG9jYXRpb24oKSkpIHsKICAg
ICAgICAgaWYgKExJS0VMWShjZWxsLT5wcmVjaXNlQWxsb2NhdGlvbigpLmlzTWFya2VkKCkpKSB7
CkBAIC02MywyNSArNjYsMjUgQEAgQUxXQVlTX0lOTElORSB2b2lkIFNsb3RWaXNpdG9yOjphcHBl
bmRVbgogICAgIGFwcGVuZFNsb3coY2VsbCwgZGVwZW5kZW5jeSk7CiB9CiAKLUFMV0FZU19JTkxJ
TkUgdm9pZCBTbG90VmlzaXRvcjo6YXBwZW5kVW5iYXJyaWVyZWQoSlNWYWx1ZSB2YWx1ZSkKLXsK
LSAgICBpZiAodmFsdWUuaXNDZWxsKCkpCi0gICAgICAgIGFwcGVuZFVuYmFycmllcmVkKHZhbHVl
LmFzQ2VsbCgpKTsKLX0KKy8vQUxXQVlTX0lOTElORSB2b2lkIFNsb3RWaXNpdG9yOjphcHBlbmRV
bmJhcnJpZXJlZChKU1ZhbHVlIHZhbHVlKQorLy97CisvLyAgICBpZiAodmFsdWUuaXNDZWxsKCkp
CisvLyAgICAgICAgYXBwZW5kVW5iYXJyaWVyZWQodmFsdWUuYXNDZWxsKCkpOworLy99CisKKy8v
QUxXQVlTX0lOTElORSB2b2lkIFNsb3RWaXNpdG9yOjphcHBlbmRIaWRkZW5VbmJhcnJpZXJlZChK
U1ZhbHVlIHZhbHVlKQorLy97CisvLyAgICBpZiAodmFsdWUuaXNDZWxsKCkpCisvLyAgICAgICAg
YXBwZW5kSGlkZGVuVW5iYXJyaWVyZWQodmFsdWUuYXNDZWxsKCkpOworLy99CiAKLUFMV0FZU19J
TkxJTkUgdm9pZCBTbG90VmlzaXRvcjo6YXBwZW5kSGlkZGVuVW5iYXJyaWVyZWQoSlNWYWx1ZSB2
YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUuaXNDZWxsKCkpCi0gICAgICAgIGFwcGVuZEhpZGRlblVu
YmFycmllcmVkKHZhbHVlLmFzQ2VsbCgpKTsKLX0KLQotQUxXQVlTX0lOTElORSB2b2lkIFNsb3RW
aXNpdG9yOjphcHBlbmRIaWRkZW5VbmJhcnJpZXJlZChKU0NlbGwqIGNlbGwpCitBTFdBWVNfSU5M
SU5FIHZvaWQgU2xvdFZpc2l0b3I6OmFwcGVuZEhpZGRlblVuYmFycmllcmVkSW1wbChKU0NlbGwq
IGNlbGwpCiB7CiAgICAgLy8gVGhpcyBuZWVkcyB0byBiZSB3cml0dGVuIGluIGEgdmVyeSBzcGVj
aWZpYyB3YXkgdG8gZW5zdXJlIHRoYXQgaXQgZ2V0cyBpbmxpbmVkCiAgICAgLy8gcHJvcGVybHku
IEluIHBhcnRpY3VsYXIsIGl0IGFwcGVhcnMgdGhhdCB1c2luZyB0ZW1wbGF0ZXMgaGVyZSBicmVh
a3MgQUxXQVlTX0lOTElORS4KICAgICAKLSAgICBpZiAoIWNlbGwpCi0gICAgICAgIHJldHVybjsK
Ky8vICAgIGlmICghY2VsbCkKKy8vICAgICAgICByZXR1cm47CiAgICAgCiAgICAgRGVwZW5kZW5j
eSBkZXBlbmRlbmN5OwogICAgIGlmIChVTkxJS0VMWShjZWxsLT5pc1ByZWNpc2VBbGxvY2F0aW9u
KCkpKSB7CkBAIC05Nyw0MiArMTAwLDQyIEBAIEFMV0FZU19JTkxJTkUgdm9pZCBTbG90VmlzaXRv
cjo6YXBwZW5kSGkKICAgICBhcHBlbmRIaWRkZW5TbG93KGNlbGwsIGRlcGVuZGVuY3kpOwogfQog
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotQUxXQVlTX0lOTElORSB2b2lkIFNsb3RWaXNpdG9yOjph
cHBlbmQoY29uc3QgV2VhazxUPiYgd2VhaykKLXsKLSAgICBhcHBlbmRVbmJhcnJpZXJlZCh3ZWFr
LmdldCgpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVHJhaXRzPgotQUxX
QVlTX0lOTElORSB2b2lkIFNsb3RWaXNpdG9yOjphcHBlbmQoY29uc3QgV3JpdGVCYXJyaWVyQmFz
ZTxULCBUcmFpdHM+JiBzbG90KQotewotICAgIGFwcGVuZFVuYmFycmllcmVkKHNsb3QuZ2V0KCkp
OwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBUcmFpdHM+Ci1BTFdBWVNfSU5M
SU5FIHZvaWQgU2xvdFZpc2l0b3I6OmFwcGVuZEhpZGRlbihjb25zdCBXcml0ZUJhcnJpZXJCYXNl
PFQsIFRyYWl0cz4mIHNsb3QpCi17Ci0gICAgYXBwZW5kSGlkZGVuVW5iYXJyaWVyZWQoc2xvdC5n
ZXQoKSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIEl0ZXJhdG9yPgotQUxXQVlTX0lOTElORSB2
b2lkIFNsb3RWaXNpdG9yOjphcHBlbmQoSXRlcmF0b3IgYmVnaW4sIEl0ZXJhdG9yIGVuZCkKLXsK
LSAgICBmb3IgKGF1dG8gaXQgPSBiZWdpbjsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBhcHBl
bmQoKml0KTsKLX0KLQotQUxXQVlTX0lOTElORSB2b2lkIFNsb3RWaXNpdG9yOjphcHBlbmRWYWx1
ZXMoY29uc3QgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiogYmFycmllcnMsIHNpemVfdCBjb3Vu
dCkKLXsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpCi0gICAgICAgIGFw
cGVuZChiYXJyaWVyc1tpXSk7Ci19Ci0KLUFMV0FZU19JTkxJTkUgdm9pZCBTbG90VmlzaXRvcjo6
YXBwZW5kVmFsdWVzSGlkZGVuKGNvbnN0IFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4qIGJhcnJp
ZXJzLCBzaXplX3QgY291bnQpCi17Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3VudDsg
KytpKQotICAgICAgICBhcHBlbmRIaWRkZW4oYmFycmllcnNbaV0pOwotfQorLy90ZW1wbGF0ZTx0
eXBlbmFtZSBUPgorLy9BTFdBWVNfSU5MSU5FIHZvaWQgU2xvdFZpc2l0b3I6OmFwcGVuZChjb25z
dCBXZWFrPFQ+JiB3ZWFrKQorLy97CisvLyAgICBhcHBlbmRVbmJhcnJpZXJlZCh3ZWFrLmdldCgp
KTsKKy8vfQorLy8KKy8vdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVHJhaXRzPgorLy9B
TFdBWVNfSU5MSU5FIHZvaWQgU2xvdFZpc2l0b3I6OmFwcGVuZChjb25zdCBXcml0ZUJhcnJpZXJC
YXNlPFQsIFRyYWl0cz4mIHNsb3QpCisvL3sKKy8vICAgIGFwcGVuZFVuYmFycmllcmVkKHNsb3Qu
Z2V0KCkpOworLy99CisvLworLy90ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBUcmFpdHM+
CisvL0FMV0FZU19JTkxJTkUgdm9pZCBTbG90VmlzaXRvcjo6YXBwZW5kSGlkZGVuKGNvbnN0IFdy
aXRlQmFycmllckJhc2U8VCwgVHJhaXRzPiYgc2xvdCkKKy8veworLy8gICAgYXBwZW5kSGlkZGVu
VW5iYXJyaWVyZWQoc2xvdC5nZXQoKSk7CisvL30KKy8vCisvL3RlbXBsYXRlPHR5cGVuYW1lIEl0
ZXJhdG9yPgorLy9BTFdBWVNfSU5MSU5FIHZvaWQgU2xvdFZpc2l0b3I6OmFwcGVuZChJdGVyYXRv
ciBiZWdpbiwgSXRlcmF0b3IgZW5kKQorLy97CisvLyAgICBmb3IgKGF1dG8gaXQgPSBiZWdpbjsg
aXQgIT0gZW5kOyArK2l0KQorLy8gICAgICAgIGFwcGVuZCgqaXQpOworLy99CisKKy8vQUxXQVlT
X0lOTElORSB2b2lkIFNsb3RWaXNpdG9yOjphcHBlbmRWYWx1ZXMoY29uc3QgV3JpdGVCYXJyaWVy
QmFzZTxVbmtub3duPiogYmFycmllcnMsIHNpemVfdCBjb3VudCkKKy8veworLy8gICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKQorLy8gICAgICAgIGFwcGVuZChiYXJyaWVyc1tp
XSk7CisvL30KKy8vCisvL0FMV0FZU19JTkxJTkUgdm9pZCBTbG90VmlzaXRvcjo6YXBwZW5kVmFs
dWVzSGlkZGVuKGNvbnN0IFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4qIGJhcnJpZXJzLCBzaXpl
X3QgY291bnQpCisvL3sKKy8vICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY291bnQ7ICsraSkK
Ky8vICAgICAgICBhcHBlbmRIaWRkZW4oYmFycmllcnNbaV0pOworLy99CiAKIGlubGluZSBib29s
IFNsb3RWaXNpdG9yOjphZGRPcGFxdWVSb290KHZvaWQqIHB0cikKIHsKQEAgLTE1MSw2ICsxNTQs
MjEgQEAgaW5saW5lIGJvb2wgU2xvdFZpc2l0b3I6OmNvbnRhaW5zT3BhcXVlUgogICAgIHJldHVy
biBoZWFwKCktPm1fb3BhcXVlUm9vdHMuY29udGFpbnMocHRyKTsKIH0KIAoraW5saW5lIGJvb2wg
U2xvdFZpc2l0b3I6OmlzTWFya2VkKGNvbnN0IHZvaWQqIHApIGNvbnN0Cit7CisgICAgcmV0dXJu
IGhlYXAoKS0+aXNNYXJrZWQocCk7Cit9CisKK2lubGluZSBib29sIFNsb3RWaXNpdG9yOjppc01h
cmtlZChNYXJrZWRCbG9jayYgY29udGFpbmVyLCBIZWFwQ2VsbCogY2VsbCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gY29udGFpbmVyLmlzTWFya2VkKG1hcmtpbmdWZXJzaW9uKCksIGNlbGwpOworfQor
CitpbmxpbmUgYm9vbCBTbG90VmlzaXRvcjo6aXNNYXJrZWQoUHJlY2lzZUFsbG9jYXRpb24mIGNv
bnRhaW5lciwgSGVhcENlbGwqIGNlbGwpIGNvbnN0Cit7CisgICAgcmV0dXJuIGNvbnRhaW5lci5p
c01hcmtlZChtYXJraW5nVmVyc2lvbigpLCBjZWxsKTsKK30KKwogaW5saW5lIHZvaWQgU2xvdFZp
c2l0b3I6OnJlcG9ydEV4dHJhTWVtb3J5VmlzaXRlZChzaXplX3Qgc2l6ZSkKIHsKICAgICBpZiAo
bV9pc0ZpcnN0VmlzaXQpIHsKQEAgLTE2OSwyMCArMTg3LDIwIEBAIGlubGluZSB2b2lkIFNsb3RW
aXNpdG9yOjpyZXBvcnRFeHRlcm5hbE0KIH0KICNlbmRpZgogCi1pbmxpbmUgSGVhcCogU2xvdFZp
c2l0b3I6OmhlYXAoKSBjb25zdAotewotICAgIHJldHVybiAmbV9oZWFwOwotfQotCi1pbmxpbmUg
Vk0mIFNsb3RWaXNpdG9yOjp2bSgpCi17Ci0gICAgcmV0dXJuIG1faGVhcC52bSgpOwotfQotCi1p
bmxpbmUgY29uc3QgVk0mIFNsb3RWaXNpdG9yOjp2bSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1f
aGVhcC52bSgpOwotfQorLy9pbmxpbmUgSGVhcCogU2xvdFZpc2l0b3I6OmhlYXAoKSBjb25zdAor
Ly97CisvLyAgICByZXR1cm4gJm1faGVhcDsKKy8vfQorLy8KKy8vaW5saW5lIFZNJiBTbG90Vmlz
aXRvcjo6dm0oKQorLy97CisvLyAgICByZXR1cm4gbV9oZWFwLnZtKCk7CisvL30KKy8vCisvL2lu
bGluZSBjb25zdCBWTSYgU2xvdFZpc2l0b3I6OnZtKCkgY29uc3QKKy8veworLy8gICAgcmV0dXJu
IG1faGVhcC52bSgpOworLy99CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CiBJdGVyYXRpb25T
dGF0dXMgU2xvdFZpc2l0b3I6OmZvckVhY2hNYXJrU3RhY2soY29uc3QgRnVuYyYgZnVuYykKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yTWFjcm9zLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3JNYWNyb3MuaAko
bm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvck1h
Y3Jvcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTE3IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKK25hbWVzcGFjZSBK
U0MgeworCitjbGFzcyBBYnN0cmFjdFNsb3RWaXNpdG9yOworY2xhc3MgSlNDZWxsOworY2xhc3Mg
U2xvdFZpc2l0b3I7CisKKyNkZWZpbmUgREVDTEFSRV9VTlVTRURfU0xPVF9WSVNJVE9SX1NUUlVD
VF9FWFBBTkRFUjIoY291bnRlcl8pIFwKKyAgICBzdHJ1Y3QgVW51c2VkU2xvdFZpc2l0b3JTdHJ1
Y3RTb1dlQ2FuSGF2ZUFTZW1pY29sb24jI2NvdW50ZXJfIHsgfQorCisjZGVmaW5lIERFQ0xBUkVf
VU5VU0VEX1NMT1RfVklTSVRPUl9TVFJVQ1RfRVhQQU5ERVIoY291bnRlcl8pIFwKKyAgICBERUNM
QVJFX1VOVVNFRF9TTE9UX1ZJU0lUT1JfU1RSVUNUX0VYUEFOREVSMihjb3VudGVyXykKKworI2Rl
ZmluZSBERUNMQVJFX1VOVVNFRF9TTE9UX1ZJU0lUT1JfU1RSVUNUKCkgXAorICAgIERFQ0xBUkVf
VU5VU0VEX1NMT1RfVklTSVRPUl9TVFJVQ1RfRVhQQU5ERVIoX19DT1VOVEVSX18pCisKKy8vIE1h
Y3JvcyBmb3IgaW5zdGFuY2UgY3VzdG9tIHZpc2l0b3IgbWV0aG9kLgorCisjZGVmaW5lIERFQ0xB
UkVfSU5TVEFOQ0VfU0xPVF9WSVNJVE9SX01FVEhPRF9JTVBMKHJldHVyblR5cGVfLCBtZXRob2RO
YW1lXywgcG9zdE1vZGlmaWVyXykgXAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHJl
dHVyblR5cGVfIG1ldGhvZE5hbWVfIyNJbXBsKFZpc2l0b3ImIHZpc2l0b3IpOyBcCisgICAgcmV0
dXJuVHlwZV8gbWV0aG9kTmFtZV8oU2xvdFZpc2l0b3ImKSBwb3N0TW9kaWZpZXJfOyBcCisgICAg
cmV0dXJuVHlwZV8gbWV0aG9kTmFtZV8oQWJzdHJhY3RTbG90VmlzaXRvciYpIHBvc3RNb2RpZmll
cl87IFwKKyAgICBERUNMQVJFX1VOVVNFRF9TTE9UX1ZJU0lUT1JfU1RSVUNUKCkKKworI2RlZmlu
ZSBERUNMQVJFX0lOU1RBTkNFX1NMT1RfVklTSVRPUl9NRVRIT0QocmV0dXJuVHlwZV8sIG1ldGhv
ZE5hbWVfKSBcCisgICAgREVDTEFSRV9JTlNUQU5DRV9TTE9UX1ZJU0lUT1JfTUVUSE9EX0lNUEwo
cmV0dXJuVHlwZV8sIG1ldGhvZE5hbWVfLCApCisKKworI2RlZmluZSBERUZJTkVfSU5TVEFOQ0Vf
U0xPVF9WSVNJVE9SX01FVEhPRChyZXR1cm5UeXBlXywgY2xhc3NOYW1lXywgbWV0aG9kTmFtZV8p
IFwKKyAgICByZXR1cm5UeXBlXyBjbGFzc05hbWVfOjptZXRob2ROYW1lXyhTbG90VmlzaXRvciYg
dmlzaXRvcikgeyBtZXRob2ROYW1lXyMjSW1wbCh2aXNpdG9yKTsgfSBcCisgICAgcmV0dXJuVHlw
ZV8gY2xhc3NOYW1lXzo6bWV0aG9kTmFtZV8oQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikg
IHsgbWV0aG9kTmFtZV8jI0ltcGwodmlzaXRvcik7IH0gXAorICAgIERFQ0xBUkVfVU5VU0VEX1NM
T1RfVklTSVRPUl9TVFJVQ1QoKQorCisvLyBNYWNyb3MgZm9yIGluc3RhbmNlIHZpc2l0Q2hpbGRy
ZW4oKS4KKworI2RlZmluZSBERUNMQVJFX0lOU1RBTkNFX1ZJU0lUX0NISUxEUkVOIFwKKyAgICBE
RUNMQVJFX0lOU1RBTkNFX1NMT1RfVklTSVRPUl9NRVRIT0Qodm9pZCwgdmlzaXRDaGlsZHJlbikK
KworCisjZGVmaW5lIERFRklORV9JTlNUQU5DRV9WSVNJVF9DSElMRFJFTihjbGFzc05hbWVfKSBc
CisgICAgREVGSU5FX0lOU1RBTkNFX1NMT1RfVklTSVRPUl9NRVRIT0Qodm9pZCwgY2xhc3NOYW1l
XywgdmlzaXRDaGlsZHJlbikKKworLy8gTWFjcm9zIGZvciBzdGF0aWMgdmlzaXRDaGlsZHJlbigp
LgorCisjZGVmaW5lIERFQ0xBUkVfVklTSVRfQ0hJTERSRU5fSU1QTCBcCisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgVmlzaXRvcj4gc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiwg
VmlzaXRvciYpCisKKyNkZWZpbmUgREVDTEFSRV9WSVNJVF9DSElMRFJFTiBcCisgICAgREVDTEFS
RV9WSVNJVF9DSElMRFJFTl9JTVBMOyBcCisgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihK
U0NlbGwqIGNlbGwsIEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpOyBcCisgICAgc3RhdGlj
IHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQor
CisjZGVmaW5lIERFQ0xBUkVfRVhQT1JUX1ZJU0lUX0NISUxEUkVOIFwKKyAgICBERUNMQVJFX1ZJ
U0lUX0NISUxEUkVOX0lNUEw7IFwKKyAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCB2
aXNpdENoaWxkcmVuKEpTQ2VsbCosIEFic3RyYWN0U2xvdFZpc2l0b3ImKTsgXAorICAgIEpTX0VY
UE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0
b3ImKQorCisjZGVmaW5lIERFQ0xBUkVfSU5MSU5FX1ZJU0lUX0NISUxEUkVOIFwKKyAgICBERUNM
QVJFX1ZJU0lUX0NISUxEUkVOX0lNUEw7IFwKKyAgICBpbmxpbmUgc3RhdGljIHZvaWQgdmlzaXRD
aGlsZHJlbihKU0NlbGwqLCBBYnN0cmFjdFNsb3RWaXNpdG9yJik7IFwKKyAgICBpbmxpbmUgc3Rh
dGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpCisKKyNkZWZpbmUg
REVDTEFSRV9URU1QTEFURV9WSVNJVF9DSElMRFJFTiBcCisgICAgREVDTEFSRV9WSVNJVF9DSElM
RFJFTgorCisKKyNkZWZpbmUgREVGSU5FX1ZJU0lUX0NISUxEUkVOKGNsYXNzTmFtZV8pIFwKKyAg
ICB2b2lkIGNsYXNzTmFtZV86OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBBYnN0cmFjdFNs
b3RWaXNpdG9yJiB2aXNpdG9yKSB7IHZpc2l0Q2hpbGRyZW5JbXBsKGNlbGwsIHZpc2l0b3IpOyB9
IFwKKyAgICB2b2lkIGNsYXNzTmFtZV86OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90
VmlzaXRvciYgdmlzaXRvcikgeyB2aXNpdENoaWxkcmVuSW1wbChjZWxsLCB2aXNpdG9yKTsgfSBc
CisgICAgREVDTEFSRV9VTlVTRURfU0xPVF9WSVNJVE9SX1NUUlVDVCgpCisKKyNkZWZpbmUgREVG
SU5FX0VYUE9SVF9WSVNJVF9DSElMRFJFTihjbGFzc05hbWVfKSBcCisgICAgSlNfRVhQT1JUX1BS
SVZBVEUgdm9pZCBjbGFzc05hbWVfOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgQWJzdHJh
Y3RTbG90VmlzaXRvciYgdmlzaXRvcikgeyB2aXNpdENoaWxkcmVuSW1wbChjZWxsLCB2aXNpdG9y
KTsgfSBcCisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBjbGFzc05hbWVfOjp2aXNpdENoaWxk
cmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsgdmlzaXRDaGlsZHJlbklt
cGwoY2VsbCwgdmlzaXRvcik7IH0gXAorICAgIERFQ0xBUkVfVU5VU0VEX1NMT1RfVklTSVRPUl9T
VFJVQ1QoKQorCisjZGVmaW5lIERFRklORV9JTkxJTkVfVklTSVRfQ0hJTERSRU4oY2xhc3NOYW1l
XykgXAorICAgIGlubGluZSB2b2lkIGNsYXNzTmFtZV86OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBj
ZWxsLCBBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKSB7IHZpc2l0Q2hpbGRyZW5JbXBsKGNl
bGwsIHZpc2l0b3IpOyB9IFwKKyAgICBpbmxpbmUgdm9pZCBjbGFzc05hbWVfOjp2aXNpdENoaWxk
cmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsgdmlzaXRDaGlsZHJlbklt
cGwoY2VsbCwgdmlzaXRvcik7IH0gXAorICAgIERFQ0xBUkVfVU5VU0VEX1NMT1RfVklTSVRPUl9T
VFJVQ1QoKQorCisjZGVmaW5lIERFRklORV9URU1QTEFURV9WSVNJVF9DSElMRFJFTih0ZW1wbGF0
ZUNsYXVzZV8sIGNsYXNzTmFtZV8pIFwKKyAgICB0ZW1wbGF0ZUNsYXVzZV8gdm9pZCBjbGFzc05h
bWVfOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgQWJzdHJhY3RTbG90VmlzaXRvciYgdmlz
aXRvcikgeyB2aXNpdENoaWxkcmVuSW1wbChjZWxsLCB2aXNpdG9yKTsgfSBcCisgICAgdGVtcGxh
dGVDbGF1c2VfIHZvaWQgY2xhc3NOYW1lXzo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNs
b3RWaXNpdG9yJiB2aXNpdG9yKSB7IHZpc2l0Q2hpbGRyZW5JbXBsKGNlbGwsIHZpc2l0b3IpOyB9
IFwKKyAgICBERUNMQVJFX1VOVVNFRF9TTE9UX1ZJU0lUT1JfU1RSVUNUKCkKKworfSAvLyBuYW1l
c3BhY2UgSlNDCisKK3VzaW5nIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvcjsKK3VzaW5nIEpTQzo6
SlNDZWxsOwordXNpbmcgSlNDOjpTbG90VmlzaXRvcjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL1N1YnNwYWNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvU3Vic3BhY2UuaAkocmV2aXNpb24gMjcxNzg2KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvU3Vic3BhY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsNyBAQAogCiBu
YW1lc3BhY2UgSlNDIHsKIAorY2xhc3MgQWJzdHJhY3RTbG90VmlzaXRvcjsgLy8gbWxhbQogY2xh
c3MgQWxpZ25lZE1lbW9yeUFsbG9jYXRvcjsKIGNsYXNzIEhlYXBDZWxsVHlwZTsKIApAQCAtODcs
NyArODgsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBmb3JFYWNoTWFya2VkQ2VsbChjb25zdCBGdW5j
Jik7CiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KLSAgICBSZWY8U2hhcmVkVGFz
azx2b2lkKFNsb3RWaXNpdG9yJik+PiBmb3JFYWNoTWFya2VkQ2VsbEluUGFyYWxsZWwoY29uc3Qg
RnVuYyYpOworICAgIFJlZjxTaGFyZWRUYXNrPHZvaWQoQWJzdHJhY3RTbG90VmlzaXRvciYpPj4g
Zm9yRWFjaE1hcmtlZENlbGxJblBhcmFsbGVsKGNvbnN0IEZ1bmMmKTsKIAogICAgIHRlbXBsYXRl
PHR5cGVuYW1lIEZ1bmM+CiAgICAgdm9pZCBmb3JFYWNoTGl2ZUNlbGwoY29uc3QgRnVuYyYpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3Vic3BhY2VJbmxpbmVzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3Vic3BhY2VJbmxpbmVzLmgJKHJl
dmlzaW9uIDI3MTc4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N1YnNwYWNlSW5s
aW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC04Niw5ICs4Niw5IEBAIHZvaWQgU3Vic3BhY2U6OmZv
ckVhY2hNYXJrZWRDZWxsKGNvbnN0IEYKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KLVJl
ZjxTaGFyZWRUYXNrPHZvaWQoU2xvdFZpc2l0b3ImKT4+IFN1YnNwYWNlOjpmb3JFYWNoTWFya2Vk
Q2VsbEluUGFyYWxsZWwoY29uc3QgRnVuYyYgZnVuYykKK1JlZjxTaGFyZWRUYXNrPHZvaWQoQWJz
dHJhY3RTbG90VmlzaXRvciYpPj4gU3Vic3BhY2U6OmZvckVhY2hNYXJrZWRDZWxsSW5QYXJhbGxl
bChjb25zdCBGdW5jJiBmdW5jKQogewotICAgIGNsYXNzIFRhc2sgZmluYWwgOiBwdWJsaWMgU2hh
cmVkVGFzazx2b2lkKFNsb3RWaXNpdG9yJik+IHsKKyAgICBjbGFzcyBUYXNrIGZpbmFsIDogcHVi
bGljIFNoYXJlZFRhc2s8dm9pZChBYnN0cmFjdFNsb3RWaXNpdG9yJik+IHsKICAgICBwdWJsaWM6
CiAgICAgICAgIFRhc2soU3Vic3BhY2UmIHN1YnNwYWNlLCBjb25zdCBGdW5jJiBmdW5jKQogICAg
ICAgICAgICAgOiBtX3N1YnNwYWNlKHN1YnNwYWNlKQpAQCAtOTcsNyArOTcsNyBAQCBSZWY8U2hh
cmVkVGFzazx2b2lkKFNsb3RWaXNpdG9yJik+PiBTdWJzCiAgICAgICAgIHsKICAgICAgICAgfQog
ICAgICAgICAKLSAgICAgICAgdm9pZCBydW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpIGZpbmFsCisg
ICAgICAgIHZvaWQgcnVuKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpIGZpbmFsCiAgICAg
ICAgIHsKICAgICAgICAgICAgIHdoaWxlIChNYXJrZWRCbG9jazo6SGFuZGxlKiBoYW5kbGUgPSBt
X2Jsb2NrU291cmNlLT5ydW4oKSkgewogICAgICAgICAgICAgICAgIGhhbmRsZS0+Zm9yRWFjaE1h
cmtlZENlbGwoCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9WZXJpZmllclNsb3RW
aXNpdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9WZXJp
ZmllclNsb3RWaXNpdG9yLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9WZXJpZmllclNsb3RWaXNpdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDI2NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJWZXJp
ZmllclNsb3RWaXNpdG9yLmgiCisKKyNpbmNsdWRlICJDb25zZXJ2YXRpdmVSb290cy5oIgorI2lu
Y2x1ZGUgIkdDU2VnbWVudGVkQXJyYXlJbmxpbmVzLmgiCisjaW5jbHVkZSAiSGVhcENlbGwuaCIK
KyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAiVk0uaCIKKworbmFtZXNwYWNlIEpT
QyB7CisKK1ZlcmlmaWVyU2xvdFZpc2l0b3I6Ok1hcmtlZEJsb2NrRGF0YTo6TWFya2VkQmxvY2tE
YXRhKE1hcmtlZEJsb2NrKiBibG9jaykKKyAgICA6IG1fYmxvY2soYmxvY2spCisgICAgLCBtX2F0
b21zKE1hcmtlZEJsb2NrOjphdG9tc1BlckJsb2NrKQoreworfQorCitWZXJpZmllclNsb3RWaXNp
dG9yOjpWZXJpZmllclNsb3RWaXNpdG9yKEhlYXAmIGhlYXApCisgICAgOiBCYXNlKGhlYXApCit7
Cit9CisKK1ZlcmlmaWVyU2xvdFZpc2l0b3I6On5WZXJpZmllclNsb3RWaXNpdG9yKCkKK3sKK30K
Kwordm9pZCBWZXJpZmllclNsb3RWaXNpdG9yOjphcHBlbmRfQ29uc2VydmF0aXZlUm9vdHMoY29u
c3QgQ29uc2VydmF0aXZlUm9vdHMmIGNvbnNlcnZhdGl2ZVJvb3RzKQoreworICAgIGF1dG8gYXBw
ZW5kSlNDZWxsT3JBdXhpbGlhcnkgPSBbJl0gKEhlYXBDZWxsKiBoZWFwQ2VsbCkKKyAgICB7Cisg
ICAgICAgIGlmICghaGVhcENlbGwpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgaWYg
KHRlc3RBbmRTZXRNYXJrZWQoaGVhcENlbGwpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAg
ICAgIHN3aXRjaCAoaGVhcENlbGwtPmNlbGxLaW5kKCkpIHsKKyAgICAgICAgY2FzZSBIZWFwQ2Vs
bDo6SlNDZWxsOgorICAgICAgICBjYXNlIEhlYXBDZWxsOjpKU0NlbGxXaXRoSW5kZXhpbmdIZWFk
ZXI6IHsKKyAgICAgICAgICAgIEpTQ2VsbCoganNDZWxsID0gc3RhdGljX2Nhc3Q8SlNDZWxsKj4o
aGVhcENlbGwpOworICAgICAgICAgICAgYXBwZW5kVG9NYXJrU3RhY2soanNDZWxsKTsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgSGVhcENlbGw6OkF1eGls
aWFyeToKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH07CisKKyAgICBIZWFw
Q2VsbCoqIHJvb3RzID0gY29uc2VydmF0aXZlUm9vdHMucm9vdHMoKTsKKyAgICBzaXplX3Qgc2l6
ZSA9IGNvbnNlcnZhdGl2ZVJvb3RzLnNpemUoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IHNpemU7ICsraSkKKyAgICAgICAgYXBwZW5kSlNDZWxsT3JBdXhpbGlhcnkocm9vdHNbaV0pOwor
fQorCit2b2lkIFZlcmlmaWVyU2xvdFZpc2l0b3I6OmFwcGVuZFRvTWFya1N0YWNrKEpTQ2VsbCog
Y2VsbCkKK3sKKyAgICBBU1NFUlQobV9oZWFwLmlzTWFya2VkKGNlbGwpKTsgLy8gbWxhbSBURVNU
IHNhbml0eSBjaGVjay4KKyAgICBBU1NFUlQoIWNlbGwtPmlzWmFwcGVkKCkpOworICAgIG1fY29s
bGVjdG9yU3RhY2suYXBwZW5kKGNlbGwpOworfQorCit2b2lkIFZlcmlmaWVyU2xvdFZpc2l0b3I6
OmFwcGVuZFVuYmFycmllcmVkSW1wbChKU0NlbGwqIGNlbGwpCit7CisgICAgaWYgKFVOTElLRUxZ
KGNlbGwtPmlzUHJlY2lzZUFsbG9jYXRpb24oKSkpIHsKKyAgICAgICAgaWYgKExJS0VMWShpc01h
cmtlZChjZWxsLT5wcmVjaXNlQWxsb2NhdGlvbigpLCBjZWxsKSkpCisgICAgICAgICAgICByZXR1
cm47CisgICAgfSBlbHNlIHsKKyAgICAgICAgTWFya2VkQmxvY2smIGJsb2NrID0gY2VsbC0+bWFy
a2VkQmxvY2soKTsKKyAgICAgICAgaWYgKExJS0VMWShpc01hcmtlZChibG9jaywgY2VsbCkpKQor
ICAgICAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGFwcGVuZFNsb3coY2VsbCk7Cit9CisK
K3ZvaWQgVmVyaWZpZXJTbG90VmlzaXRvcjo6YXBwZW5kSGlkZGVuVW5iYXJyaWVyZWRJbXBsKEpT
Q2VsbCogY2VsbCkKK3sKKyAgICBhcHBlbmRVbmJhcnJpZXJlZEltcGwoY2VsbCk7Cit9CisKK2Jv
b2wgVmVyaWZpZXJTbG90VmlzaXRvcjo6YWRkT3BhcXVlUm9vdCh2b2lkKiBwdHIpCit7CisgICAg
aWYgKCFwdHIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIW1fb3BhcXVlUm9vdHMu
YWRkKHB0cikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
Ym9vbCBWZXJpZmllclNsb3RWaXNpdG9yOjpjb250YWluc09wYXF1ZVJvb3Qodm9pZCogcHRyKSBj
b25zdAoreworICAgIHJldHVybiBtX29wYXF1ZVJvb3RzLmNvbnRhaW5zKHB0cik7Cit9CisKK3Zv
aWQgVmVyaWZpZXJTbG90VmlzaXRvcjo6ZHJhaW4oKQoreworICAgIFJFTEVBU0VfQVNTRVJUKG1f
Y29sbGVjdG9yU3RhY2suaXNFbXB0eSgpKTsKKworICAgIE1hcmtTdGFja0FycmF5JiBzdGFjayA9
IG1fbXV0YXRvclN0YWNrOworICAgIGlmIChzdGFjay5pc0VtcHR5KCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIHN0YWNrLnJlZmlsbCgpOworICAgIHdoaWxlIChzdGFjay5jYW5SZW1vdmVMYXN0
KCkpIHsKKyAgICAgICAgdmlzaXRDaGlsZHJlbihzdGFjay5yZW1vdmVMYXN0KCkpOworICAgIH0K
K30KKwordGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KK3ZvaWQgVmVyaWZpZXJTbG90VmlzaXRv
cjo6Zm9yRWFjaENlbGwoY29uc3QgRnVuY3RvciYgZnVuY3RvcikKK3sKKyAgICBmb3JFYWNoUHJl
Y2lzZUFsbG9jYXRpb24oZnVuY3Rvcik7CisgICAgZm9yRWFjaE1hcmtlZEJsb2NrQ2VsbChmdW5j
dG9yKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KK3ZvaWQgVmVyaWZpZXJTbG90
VmlzaXRvcjo6Zm9yRWFjaFByZWNpc2VBbGxvY2F0aW9uKGNvbnN0IEZ1bmN0b3ImIGZ1bmMpCit7
CisgICAgZm9yIChhdXRvJiBlbnRyeSA6IG1fcHJlY2lzZUFsbG9jYXRpb25NYXApIHsKKyAgICAg
ICAgUHJlY2lzZUFsbG9jYXRpb24qIGFsbG9jYXRpb24gPSBlbnRyeS52YWx1ZTsKKyAgICAgICAg
ZnVuYyhhbGxvY2F0aW9uLT5jZWxsKCkpOworICAgIH0KK30KKwordGVtcGxhdGU8dHlwZW5hbWUg
RnVuY3Rvcj4KK3ZvaWQgVmVyaWZpZXJTbG90VmlzaXRvcjo6Zm9yRWFjaE1hcmtlZEJsb2NrQ2Vs
bChjb25zdCBGdW5jdG9yJiBmdW5jKQoreworICAgIGZvciAoYXV0byYgZW50cnkgOiBtX21hcmtl
ZEJsb2NrTWFwKSB7CisgICAgICAgIGF1dG8mIGRhdGEgPSBlbnRyeS52YWx1ZTsKKyAgICAgICAg
TWFya2VkQmxvY2sqIGJsb2NrID0gZGF0YS0+YmxvY2soKTsKKyAgICAgICAgY29uc3QgQml0VmVj
dG9yJiBhdG9tcyA9ICBkYXRhLT5hdG9tcygpOworICAgICAgICBmb3IgKGF1dG8gYXRvbU51bWJl
ciA6IGF0b21zKSB7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChhdG9tcy5xdWlja0dldChh
dG9tTnVtYmVyKSk7IC8vIG1sYW0gVEVTVCBTYW5pdHkgQ2hlY2sKKyAgICAgICAgICAgIGZ1bmMo
Yml0d2lzZV9jYXN0PEhlYXBDZWxsKj4oYmxvY2stPmhhbmRsZSgpLmF0b21BdChhdG9tTnVtYmVy
KSkpOworICAgICAgICB9CisgICAgfQorfQorCitib29sIFZlcmlmaWVyU2xvdFZpc2l0b3I6Omlz
Rmlyc3RWaXNpdCgpIGNvbnN0Cit7CisgICAgLy8gV2UgbmVlZCB0byBhbHdheXMgcmV0dXJuIGZh
bHNlIGJlY2F1c2UgdGhpcyBpcyB1c2VkIHRvIGFnZWQgYW4gVW5saW5rZWRDb2RlQmxvY2sKKyAg
ICAvLyBpbiB0aGUgcmVndWxhciBHQzogc2VlIFVubGlua2VkQ29kZUJsb2NrOjp2aXNpdENoaWxk
cmVuSW1wbCgpLiBXZSBzaG91bGQgbm90CisgICAgLy8gc2hvdWxkIGRvIHRoYXQgYWdpbmcgYWN0
aW9uLgorICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBWZXJpZmllclNsb3RWaXNpdG9yOjpp
c01hcmtlZChjb25zdCB2b2lkKiByYXdDZWxsKSBjb25zdAoreworICAgIEhlYXBDZWxsKiBjZWxs
ID0gYml0d2lzZV9jYXN0PEhlYXBDZWxsKj4ocmF3Q2VsbCk7CisgICAgaWYgKGNlbGwtPmlzUHJl
Y2lzZUFsbG9jYXRpb24oKSkKKyAgICAgICAgcmV0dXJuIGlzTWFya2VkKGNlbGwtPnByZWNpc2VB
bGxvY2F0aW9uKCksIGNlbGwpOworICAgIHJldHVybiBpc01hcmtlZChjZWxsLT5tYXJrZWRCbG9j
aygpLCBjZWxsKTsKK30KKworYm9vbCBWZXJpZmllclNsb3RWaXNpdG9yOjppc01hcmtlZChQcmVj
aXNlQWxsb2NhdGlvbiYgYWxsb2NhdGlvbiwgSGVhcENlbGwqKSBjb25zdAoreworICAgIHJldHVy
biBtX3ByZWNpc2VBbGxvY2F0aW9uTWFwLmNvbnRhaW5zKCZhbGxvY2F0aW9uKTsKK30KKworYm9v
bCBWZXJpZmllclNsb3RWaXNpdG9yOjppc01hcmtlZChNYXJrZWRCbG9jayYgYmxvY2ssIEhlYXBD
ZWxsKiBjZWxsKSBjb25zdAoreworICAgIGF1dG8gZW50cnkgPSBtX21hcmtlZEJsb2NrTWFwLmZp
bmQoJmJsb2NrKTsKKyAgICBpZiAoZW50cnkgPT0gbV9tYXJrZWRCbG9ja01hcC5lbmQoKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYXV0byYgZGF0YSA9IGVudHJ5LT52YWx1ZTsKKyAg
ICB1bnNpZ25lZCBhdG9tTnVtYmVyID0gYmxvY2suYXRvbU51bWJlcihjZWxsKTsKKyAgICByZXR1
cm4gZGF0YS0+aXNNYXJrZWQoYXRvbU51bWJlcik7Cit9CisKK3ZvaWQgVmVyaWZpZXJTbG90Vmlz
aXRvcjo6bWFya0F1eGlsaWFyeShjb25zdCB2b2lkKiBiYXNlKQoreworICAgIEhlYXBDZWxsKiBj
ZWxsID0gYml0d2lzZV9jYXN0PEhlYXBDZWxsKj4oYmFzZSk7CisKKyAgICBBU1NFUlQoY2VsbC0+
aGVhcCgpID09IGhlYXAoKSk7CisgICAgdGVzdEFuZFNldE1hcmtlZChjZWxsKTsKK30KKworYm9v
bCBWZXJpZmllclNsb3RWaXNpdG9yOjptdXRhdG9ySXNTdG9wcGVkKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBWZXJpZmllclNsb3RWaXNpdG9yOjp0ZXN0QW5kU2V0TWFy
a2VkKGNvbnN0IHZvaWQqIHJhd0NlbGwpCit7CisgICAgSGVhcENlbGwqIGNlbGwgPSBiaXR3aXNl
X2Nhc3Q8SGVhcENlbGwqPihyYXdDZWxsKTsKKyAgICBpZiAoY2VsbC0+aXNQcmVjaXNlQWxsb2Nh
dGlvbigpKQorICAgICAgICByZXR1cm4gdGVzdEFuZFNldE1hcmtlZChjZWxsLT5wcmVjaXNlQWxs
b2NhdGlvbigpKTsKKyAgICByZXR1cm4gdGVzdEFuZFNldE1hcmtlZChjZWxsLT5tYXJrZWRCbG9j
aygpLCBjZWxsKTsKK30KKworYm9vbCBWZXJpZmllclNsb3RWaXNpdG9yOjp0ZXN0QW5kU2V0TWFy
a2VkKFByZWNpc2VBbGxvY2F0aW9uJiBhbGxvY2F0aW9uKQoreworICAgIGF1dG8gcmVzdWx0ID0g
bV9wcmVjaXNlQWxsb2NhdGlvbk1hcC5hZGQoJmFsbG9jYXRpb24sICZhbGxvY2F0aW9uKTsKKyAg
ICByZXR1cm4gcmVzdWx0LmlzTmV3RW50cnk7Cit9CisKK2Jvb2wgVmVyaWZpZXJTbG90VmlzaXRv
cjo6dGVzdEFuZFNldE1hcmtlZChNYXJrZWRCbG9jayYgYmxvY2ssIEhlYXBDZWxsKiBjZWxsKQor
eworICAgIHN0ZDo6dW5pcXVlX3B0cjxNYXJrZWRCbG9ja0RhdGE+JiBkYXRhID0gbV9tYXJrZWRC
bG9ja01hcC5hZGQoJmJsb2NrLCBudWxscHRyKS5pdGVyYXRvci0+dmFsdWU7CisgICAgaWYgKCFk
YXRhKQorICAgICAgICBkYXRhID0gbWFrZVVuaXF1ZTxNYXJrZWRCbG9ja0RhdGE+KCZibG9jayk7
CisKKyAgICB1bnNpZ25lZCBhdG9tTnVtYmVyID0gYmxvY2suYXRvbU51bWJlcihjZWxsKTsKKyAg
ICByZXR1cm4gZGF0YS0+dGVzdEFuZFNldE1hcmtlZChhdG9tTnVtYmVyKTsKK30KKwordm9pZCBW
ZXJpZmllclNsb3RWaXNpdG9yOjpzZXRNYXJrZWRBbmRBcHBlbmRUb01hcmtTdGFjayhKU0NlbGwq
IGNlbGwpCit7CisgICAgaWYgKHRlc3RBbmRTZXRNYXJrZWQoY2VsbCkpCisgICAgICAgIHJldHVy
bjsKKyAgICBhcHBlbmRUb01hcmtTdGFjayhjZWxsKTsKK30KKwordm9pZCBWZXJpZmllclNsb3RW
aXNpdG9yOjp2aXNpdENoaWxkcmVuKGNvbnN0IEpTQ2VsbCogY2VsbCkKK3sKKyAgICBSRUxFQVNF
X0FTU0VSVChpc01hcmtlZChjZWxsKSk7IC8vIG1sYW0gTUFLRSBpbnRvIEFTU0VSVAorICAgIAor
ICAgIHN3aXRjaCAoY2VsbC0+dHlwZSgpKSB7CisgICAgY2FzZSBTdHJpbmdUeXBlOgorICAgICAg
ICBKU1N0cmluZzo6dmlzaXRDaGlsZHJlbihjb25zdF9jYXN0PEpTQ2VsbCo+KGNlbGwpLCAqdGhp
cyk7CisgICAgICAgIGJyZWFrOworICAgICAgICAKKyAgICBjYXNlIEZpbmFsT2JqZWN0VHlwZToK
KyAgICAgICAgSlNGaW5hbE9iamVjdDo6dmlzaXRDaGlsZHJlbihjb25zdF9jYXN0PEpTQ2VsbCo+
KGNlbGwpLCAqdGhpcyk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBBcnJheVR5cGU6Cisg
ICAgICAgIEpTQXJyYXk6OnZpc2l0Q2hpbGRyZW4oY29uc3RfY2FzdDxKU0NlbGwqPihjZWxsKSwg
KnRoaXMpOworICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAg
Ly8gRklYTUU6IFRoaXMgY291bGQgYmUgc28gbXVjaCBiZXR0ZXIuCisgICAgICAgIC8vIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjI0NjIKKyAgICAgICAgY2VsbC0+
bWV0aG9kVGFibGUodm0oKSktPnZpc2l0Q2hpbGRyZW4oY29uc3RfY2FzdDxKU0NlbGwqPihjZWxs
KSwgKnRoaXMpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK30gLy8gbmFtZXNwYWNlIEpT
QwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVmVyaWZpZXJTbG90VmlzaXRvci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1ZlcmlmaWVyU2xvdFZp
c2l0b3IuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9WZXJp
ZmllclNsb3RWaXNpdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMjIgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKwor
I2luY2x1ZGUgIkFic3RyYWN0U2xvdFZpc2l0b3IuaCIKKyNpbmNsdWRlICJKU0NKU1ZhbHVlLmgi
CisjaW5jbHVkZSAiVmlzaXRSYWNlS2V5LmgiCisjaW5jbHVkZSAiV2Vhay5oIgorI2luY2x1ZGUg
PG1lbW9yeT4KKyNpbmNsdWRlIDx3dGYvQml0VmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL0NvbmN1
cnJlbnRQdHJIYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KKyNpbmNsdWRl
IDx3dGYvSGFzaE1hcC5oPgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgQ29uc2VydmF0aXZl
Um9vdHM7CitjbGFzcyBIZWFwOworY2xhc3MgSGVhcENlbGw7CitjbGFzcyBQcmVjaXNlQWxsb2Nh
dGlvbjsKK2NsYXNzIE1hcmtlZEJsb2NrOworCitjbGFzcyBWZXJpZmllclNsb3RWaXNpdG9yIDog
cHVibGljIEFic3RyYWN0U2xvdFZpc2l0b3IgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFZl
cmlmaWVyU2xvdFZpc2l0b3IpOworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworICAgIHVz
aW5nIEJhc2UgPSBBYnN0cmFjdFNsb3RWaXNpdG9yOworcHVibGljOgorCisgICAgVmVyaWZpZXJT
bG90VmlzaXRvcihIZWFwJik7CisgICAgflZlcmlmaWVyU2xvdFZpc2l0b3IoKTsKKworICAgIHZv
aWQgYXBwZW5kX0NvbnNlcnZhdGl2ZVJvb3RzKGNvbnN0IENvbnNlcnZhdGl2ZVJvb3RzJikgZmlu
YWw7CisgICAgdm9pZCBhcHBlbmRVbmJhcnJpZXJlZEltcGwoSlNDZWxsKikgZmluYWw7CisgICAg
dm9pZCBhcHBlbmRIaWRkZW5VbmJhcnJpZXJlZEltcGwoSlNDZWxsKikgZmluYWw7CisKKyAgICBi
b29sIGFkZE9wYXF1ZVJvb3Qodm9pZCopIGZpbmFsOyAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIHJv
b3Qgd2FzIG5ldy4KKyAgICBib29sIGNvbnRhaW5zT3BhcXVlUm9vdCh2b2lkKikgY29uc3QgZmlu
YWw7CisKKyAgICBib29sIGlzRmlyc3RWaXNpdCgpIGNvbnN0IGZpbmFsOworICAgIGJvb2wgaXNN
YXJrZWQoY29uc3Qgdm9pZCopIGNvbnN0IGZpbmFsOworICAgIGJvb2wgaXNNYXJrZWQoTWFya2Vk
QmxvY2smLCBIZWFwQ2VsbCopIGNvbnN0IGZpbmFsOworICAgIGJvb2wgaXNNYXJrZWQoUHJlY2lz
ZUFsbG9jYXRpb24mLCBIZWFwQ2VsbCopIGNvbnN0IGZpbmFsOworCisgICAgdm9pZCBtYXJrQXV4
aWxpYXJ5KGNvbnN0IHZvaWQqKSBmaW5hbDsKKworICAgIHZvaWQgcmVwb3J0RXh0cmFNZW1vcnlW
aXNpdGVkKHNpemVfdCkgZmluYWwgeyB9CisjaWYgRU5BQkxFKFJFU09VUkNFX1VTQUdFKQorICAg
IHZvaWQgcmVwb3J0RXh0ZXJuYWxNZW1vcnlWaXNpdGVkKHNpemVfdCkgZmluYWwgeyB9CisjZW5k
aWYKKworICAgIGJvb2wgbXV0YXRvcklzU3RvcHBlZCgpIGNvbnN0IGZpbmFsOworCisgICAgdm9p
ZCBkaWRSYWNlKGNvbnN0IFZpc2l0UmFjZUtleSYpIGZpbmFsIHsgfQorICAgIHZvaWQgZHVtcChQ
cmludFN0cmVhbSYpIGNvbnN0IGZpbmFsIHsgfQorICAgIHZvaWQgdmlzaXRBc0NvbnN0cmFpbnQo
Y29uc3QgSlNDZWxsKikgZmluYWwgeyB9CisKKyAgICB2b2lkIGRyYWluKCk7CisKK3ByaXZhdGU6
CisgICAgY2xhc3MgTWFya2VkQmxvY2tEYXRhIHsKKyAgICAgICAgV1RGX01BS0VfRkFTVF9BTExP
Q0FURUQ7CisgICAgICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKE1hcmtlZEJsb2NrRGF0YSk7Cisg
ICAgcHVibGljOgorICAgICAgICBNYXJrZWRCbG9ja0RhdGEoTWFya2VkQmxvY2sqKTsKKworICAg
ICAgICBNYXJrZWRCbG9jayogYmxvY2soKSBjb25zdCB7IHJldHVybiBtX2Jsb2NrOyB9CisgICAg
ICAgIGNvbnN0IEJpdFZlY3RvciYgYXRvbXMoKSBjb25zdCB7IHJldHVybiBtX2F0b21zOyB9CisK
KyAgICAgICAgYm9vbCBpc01hcmtlZCh1bnNpZ25lZCBhdG9tTnVtYmVyKSB7IHJldHVybiBtX2F0
b21zLnF1aWNrR2V0KGF0b21OdW1iZXIpOyB9CisgICAgICAgIGJvb2wgdGVzdEFuZFNldE1hcmtl
ZCh1bnNpZ25lZCBhdG9tTnVtYmVyKSB7IHJldHVybiBtX2F0b21zLnF1aWNrU2V0KGF0b21OdW1i
ZXIpOyB9CisgICAgcHJpdmF0ZToKKyAgICAgICAgTWFya2VkQmxvY2sqIG1fYmxvY2sgeyBudWxs
cHRyIH07CisgICAgICAgIEJpdFZlY3RvciBtX2F0b21zOworICAgIH07CisKKyAgICB1c2luZyBQ
cmVjaXNlQWxsb2NhdGlvbk1hcCA9IEhhc2hNYXA8UHJlY2lzZUFsbG9jYXRpb24qLCBQcmVjaXNl
QWxsb2NhdGlvbio+OworICAgIHVzaW5nIE1hcmtlZEJsb2NrTWFwID0gSGFzaE1hcDxNYXJrZWRC
bG9jayosIHN0ZDo6dW5pcXVlX3B0cjxNYXJrZWRCbG9ja0RhdGE+PjsKKworICAgIHRlbXBsYXRl
PHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaENlbGwoY29uc3QgRnVuY3RvciYpOworICAg
IHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaFByZWNpc2VBbGxvY2F0aW9u
KGNvbnN0IEZ1bmN0b3ImKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGZv
ckVhY2hNYXJrZWRCbG9ja0NlbGwoY29uc3QgRnVuY3RvciYpOworCisgICAgdm9pZCBhcHBlbmRU
b01hcmtTdGFjayhKU0NlbGwqKTsKKyAgICB2b2lkIGFwcGVuZFNsb3coSlNDZWxsKiBjZWxsKSB7
IHNldE1hcmtlZEFuZEFwcGVuZFRvTWFya1N0YWNrKGNlbGwpOyB9CisKKyAgICBib29sIHRlc3RB
bmRTZXRNYXJrZWQoY29uc3Qgdm9pZCogcmF3Q2VsbCk7CisgICAgYm9vbCB0ZXN0QW5kU2V0TWFy
a2VkKFByZWNpc2VBbGxvY2F0aW9uJik7CisgICAgYm9vbCB0ZXN0QW5kU2V0TWFya2VkKE1hcmtl
ZEJsb2NrJiwgSGVhcENlbGwqKTsKKworICAgIHZvaWQgc2V0TWFya2VkQW5kQXBwZW5kVG9NYXJr
U3RhY2soSlNDZWxsKik7CisKKyAgICB2b2lkIHZpc2l0Q2hpbGRyZW4oY29uc3QgSlNDZWxsKik7
CisKKyAgICBQcmVjaXNlQWxsb2NhdGlvbk1hcCBtX3ByZWNpc2VBbGxvY2F0aW9uTWFwOworICAg
IE1hcmtlZEJsb2NrTWFwIG1fbWFya2VkQmxvY2tNYXA7CisgICAgQ29uY3VycmVudFB0ckhhc2hT
ZXQgbV9vcGFxdWVSb290czsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvVmlzaXRDb3VudGVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvVmlzaXRDb3VudGVyLmgJKHJldmlzaW9uIDI3MTc4NikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Zpc2l0Q291bnRlci5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yNSw3ICsyNSw3IEBACiAKICNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSAiU2xvdFZpc2l0
b3IuaCIKKyNpbmNsdWRlICJBYnN0cmFjdFNsb3RWaXNpdG9yLmgiCiAKIG5hbWVzcGFjZSBKU0Mg
ewogCkBAIC0zMywxMyArMzMsMTMgQEAgY2xhc3MgVmlzaXRDb3VudGVyIHsKIHB1YmxpYzoKICAg
ICBWaXNpdENvdW50ZXIoKSB7IH0KICAgICAKLSAgICBWaXNpdENvdW50ZXIoU2xvdFZpc2l0b3Im
IHZpc2l0b3IpCisgICAgVmlzaXRDb3VudGVyKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3Ip
CiAgICAgICAgIDogbV92aXNpdG9yKCZ2aXNpdG9yKQogICAgICAgICAsIG1faW5pdGlhbFZpc2l0
Q291bnQodmlzaXRvci52aXNpdENvdW50KCkpCiAgICAgewogICAgIH0KICAgICAKLSAgICBTbG90
VmlzaXRvciYgdmlzaXRvcigpIGNvbnN0IHsgcmV0dXJuICptX3Zpc2l0b3I7IH0KKyAgICBBYnN0
cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKCkgY29uc3QgeyByZXR1cm4gKm1fdmlzaXRvcjsgfQog
ICAgIAogICAgIHNpemVfdCB2aXNpdENvdW50KCkgY29uc3QKICAgICB7CkBAIC00Nyw3ICs0Nyw3
IEBAIHB1YmxpYzoKICAgICB9CiAgICAgCiBwcml2YXRlOgotICAgIFNsb3RWaXNpdG9yKiBtX3Zp
c2l0b3IgeyBudWxscHRyIH07CisgICAgQWJzdHJhY3RTbG90VmlzaXRvciogbV92aXNpdG9yIHsg
bnVsbHB0ciB9OwogICAgIHNpemVfdCBtX2luaXRpYWxWaXNpdENvdW50IHsgMCB9OwogfTsKIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha0Jsb2NrLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrQmxvY2suY3BwCShyZXZpc2lvbiAy
NzE3ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrQmxvY2suY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC05OCwxMiArOTgsMTMgQEAgdm9pZCBXZWFrQmxvY2s6OnN3ZWVwKCkKICAg
ICBBU1NFUlQoIW1fc3dlZXBSZXN1bHQuaXNOdWxsKCkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBDb250YWluZXJUeXBlPgotdm9pZCBXZWFrQmxvY2s6OnNwZWNpYWxpemVkVmlzaXQoQ29udGFp
bmVyVHlwZSYgY29udGFpbmVyLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVu
YW1lIENvbnRhaW5lclR5cGUsIHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFdlYWtCbG9jazo6c3Bl
Y2lhbGl6ZWRWaXNpdChDb250YWluZXJUeXBlJiBjb250YWluZXIsIFZpc2l0b3ImIHZpc2l0b3Ip
CiB7Ci0gICAgSGVhcFZlcnNpb24gbWFya2luZ1ZlcnNpb24gPSB2aXNpdG9yLm1hcmtpbmdWZXJz
aW9uKCk7CisvLyAgICBIZWFwVmVyc2lvbiBtYXJraW5nVmVyc2lvbiA9IHZpc2l0b3IubWFya2lu
Z1ZlcnNpb24oKTsKIAogICAgIHNpemVfdCBjb3VudCA9IHdlYWtJbXBsQ291bnQoKTsKKyAgICBI
ZWFwQW5hbHl6ZXIqIGhlYXBBbmFseXplciA9IHZpc2l0b3Iudm0oKS5hY3RpdmVIZWFwQW5hbHl6
ZXIoKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKICAgICAgICAg
V2Vha0ltcGwqIHdlYWtJbXBsID0gJndlYWtJbXBscygpW2ldOwogICAgICAgICBpZiAod2Vha0lt
cGwtPnN0YXRlKCkgIT0gV2Vha0ltcGw6OkxpdmUpCkBAIC0xMTQsMTIgKzExNSwxMyBAQCB2b2lk
IFdlYWtCbG9jazo6c3BlY2lhbGl6ZWRWaXNpdChDb250YWluCiAgICAgICAgICAgICBjb250aW51
ZTsKIAogICAgICAgICBKU1ZhbHVlIGpzVmFsdWUgPSB3ZWFrSW1wbC0+anNWYWx1ZSgpOwotICAg
ICAgICBpZiAoY29udGFpbmVyLmlzTWFya2VkKG1hcmtpbmdWZXJzaW9uLCBqc1ZhbHVlLmFzQ2Vs
bCgpKSkKKy8vICAgICAgICBpZiAoY29udGFpbmVyLmlzTWFya2VkKG1hcmtpbmdWZXJzaW9uLCBq
c1ZhbHVlLmFzQ2VsbCgpKSkKKyAgICAgICAgaWYgKHZpc2l0b3IuaXNNYXJrZWQoY29udGFpbmVy
LCBqc1ZhbHVlLmFzQ2VsbCgpKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAKICAg
ICAgICAgY29uc3QgY2hhciogcmVhc29uID0gIiI7CiAgICAgICAgIGNvbnN0IGNoYXIqKiByZWFz
b25QdHIgPSBudWxscHRyOwotICAgICAgICBpZiAoVU5MSUtFTFkodmlzaXRvci5pc0FuYWx5emlu
Z0hlYXAoKSkpCisgICAgICAgIGlmIChVTkxJS0VMWShoZWFwQW5hbHl6ZXIpKQogICAgICAgICAg
ICAgcmVhc29uUHRyID0gJnJlYXNvbjsKIAogICAgICAgICBpZiAoIXdlYWtIYW5kbGVPd25lci0+
aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSGFuZGxlPFVua25vd24+Ojp3cmFwU2xvdCgmY29u
c3RfY2FzdDxKU1ZhbHVlJj4oanNWYWx1ZSkpLCB3ZWFrSW1wbC0+Y29udGV4dCgpLCB2aXNpdG9y
LCByZWFzb25QdHIpKQpAQCAtMTI3LDE0ICsxMjksMTYgQEAgdm9pZCBXZWFrQmxvY2s6OnNwZWNp
YWxpemVkVmlzaXQoQ29udGFpbgogCiAgICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQo
anNWYWx1ZSk7CiAKLSAgICAgICAgaWYgKFVOTElLRUxZKHZpc2l0b3IuaXNBbmFseXppbmdIZWFw
KCkpKSB7CisgICAgICAgIGlmIChVTkxJS0VMWShoZWFwQW5hbHl6ZXIpKSB7CiAgICAgICAgICAg
ICBpZiAoanNWYWx1ZS5pc0NlbGwoKSkKLSAgICAgICAgICAgICAgICB2aXNpdG9yLmhlYXBBbmFs
eXplcigpLT5zZXRPcGFxdWVSb290UmVhY2hhYmlsaXR5UmVhc29uRm9yQ2VsbChqc1ZhbHVlLmFz
Q2VsbCgpLCAqcmVhc29uUHRyKTsKKyAgICAgICAgICAgICAgICBoZWFwQW5hbHl6ZXItPnNldE9w
YXF1ZVJvb3RSZWFjaGFiaWxpdHlSZWFzb25Gb3JDZWxsKGpzVmFsdWUuYXNDZWxsKCksICpyZWFz
b25QdHIpOwogICAgICAgICB9CiAgICAgfQogfQogCi12b2lkIFdlYWtCbG9jazo6dmlzaXQoU2xv
dFZpc2l0b3ImIHZpc2l0b3IpCisvL3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+CisvL3ZvaWQg
V2Vha0Jsb2NrOjp2aXNpdChWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBXZWFrQmxvY2s6OnZpc2l0
MShBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIC8vIElmIGEgYmxvY2sgaXMg
Y29tcGxldGVseSBlbXB0eSwgYSB2aXNpdCB3b24ndCBoYXZlIGFueSBlZmZlY3QuCiAgICAgaWYg
KGlzRW1wdHkoKSkKQEAgLTE0OSw2ICsxNTMsOSBAQCB2b2lkIFdlYWtCbG9jazo6dmlzaXQoU2xv
dFZpc2l0b3ImIHZpc2l0CiAgICAgICAgIHNwZWNpYWxpemVkVmlzaXQobV9jb250YWluZXIubWFy
a2VkQmxvY2soKSwgdmlzaXRvcik7CiB9CiAKKy8vdGVtcGxhdGUgdm9pZCBXZWFrQmxvY2s6OnZp
c2l0KFNsb3RWaXNpdG9yJik7CisvL3RlbXBsYXRlIHZvaWQgV2Vha0Jsb2NrOjp2aXNpdChWZXJp
ZmllclNsb3RWaXNpdG9yJik7CisKIHZvaWQgV2Vha0Jsb2NrOjpyZWFwKCkKIHsKICAgICAvLyBJ
ZiBhIGJsb2NrIGlzIGNvbXBsZXRlbHkgZW1wdHksIGEgcmVhcGluZyB3b24ndCBoYXZlIGFueSBl
ZmZlY3QuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrQmxvY2suaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrQmxvY2suaAkocmV2aXNp
b24gMjcxNzg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha0Jsb2NrLmgJKHdv
cmtpbmcgY29weSkKQEAgLTMyLDggKzMyLDkgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKK2NsYXNz
IEFic3RyYWN0U2xvdFZpc2l0b3I7CiBjbGFzcyBIZWFwOwotY2xhc3MgU2xvdFZpc2l0b3I7Cisv
L2NsYXNzIFNsb3RWaXNpdG9yOwogCiBERUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJ
RklFUihXZWFrQmxvY2spOwogCkBAIC02NSw3ICs2Niw4IEBAIHB1YmxpYzoKICAgICB2b2lkIHN3
ZWVwKCk7CiAgICAgU3dlZXBSZXN1bHQgdGFrZVN3ZWVwUmVzdWx0KCk7CiAKLSAgICB2b2lkIHZp
c2l0KFNsb3RWaXNpdG9yJik7CisvLyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lk
IHZpc2l0KFZpc2l0b3ImKTsKKyAgICB2b2lkIHZpc2l0MShBYnN0cmFjdFNsb3RWaXNpdG9yJik7
CiAKICAgICB2b2lkIHJlYXAoKTsKIApAQCAtNzUsOCArNzcsOCBAQCBwdWJsaWM6CiBwcml2YXRl
OgogICAgIHN0YXRpYyBGcmVlQ2VsbCogYXNGcmVlQ2VsbChXZWFrSW1wbCopOwogICAgIAotICAg
IHRlbXBsYXRlPHR5cGVuYW1lIENvbnRhaW5lclR5cGU+Ci0gICAgdm9pZCBzcGVjaWFsaXplZFZp
c2l0KENvbnRhaW5lclR5cGUmLCBTbG90VmlzaXRvciYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1l
IENvbnRhaW5lclR5cGUsIHR5cGVuYW1lIFZpc2l0b3I+CisgICAgdm9pZCBzcGVjaWFsaXplZFZp
c2l0KENvbnRhaW5lclR5cGUmLCBWaXNpdG9yJik7CiAKICAgICBleHBsaWNpdCBXZWFrQmxvY2so
Q2VsbENvbnRhaW5lcik7CiAgICAgdm9pZCBmaW5hbGl6ZShXZWFrSW1wbCopOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha0hhbmRsZU93bmVyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrSGFuZGxlT3duZXIuY3BwCShyZXZpc2lv
biAyNzE3ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrSGFuZGxlT3duZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw3ICszNSw3IEBAIFdlYWtIYW5kbGVPd25lcjo6fldl
YWtIYW5kbGVPd25lcigpCiB7CiB9CiAKLWJvb2wgV2Vha0hhbmRsZU93bmVyOjppc1JlYWNoYWJs
ZUZyb21PcGFxdWVSb290cyhIYW5kbGU8VW5rbm93bj4sIHZvaWQqLCBTbG90VmlzaXRvciYsIGNv
bnN0IGNoYXIqKikKK2Jvb2wgV2Vha0hhbmRsZU93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVS
b290cyhIYW5kbGU8VW5rbm93bj4sIHZvaWQqLCBBYnN0cmFjdFNsb3RWaXNpdG9yJiwgY29uc3Qg
Y2hhcioqKQogewogICAgIHJldHVybiBmYWxzZTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL1dlYWtIYW5kbGVPd25lci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL1dlYWtIYW5kbGVPd25lci5oCShyZXZpc2lvbiAyNzE3ODYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrSGFuZGxlT3duZXIuaAkod29ya2luZyBjb3B5KQpA
QCAtMjksMTMgKzI5LDEzIEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1jbGFzcyBTbG90VmlzaXRv
cjsKK2NsYXNzIEFic3RyYWN0U2xvdFZpc2l0b3I7CiAKIGNsYXNzIEpTX0VYUE9SVF9QUklWQVRF
IFdlYWtIYW5kbGVPd25lciB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+V2Vha0hhbmRsZU93bmVy
KCk7CiAgICAgLy8gcmVhc29uIHdpbGwgb25seSBiZSBub24tbnVsbCB3aGVuIGdlbmVyYXRpbmcg
YSBkZWJ1ZyBHQyBoZWFwIHNuYXBzaG90LgotICAgIHZpcnR1YWwgYm9vbCBpc1JlYWNoYWJsZUZy
b21PcGFxdWVSb290cyhIYW5kbGU8VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIFNsb3RWaXNpdG9y
JiwgY2hhciBjb25zdCoqIHJlYXNvbiA9IG51bGxwdHIpOworICAgIHZpcnR1YWwgYm9vbCBpc1Jl
YWNoYWJsZUZyb21PcGFxdWVSb290cyhIYW5kbGU8VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIEFi
c3RyYWN0U2xvdFZpc2l0b3ImLCBjaGFyIGNvbnN0KiogcmVhc29uID0gbnVsbHB0cik7CiAgICAg
dmlydHVhbCB2b2lkIGZpbmFsaXplKEhhbmRsZTxVbmtub3duPiwgdm9pZCogY29udGV4dCk7CiB9
OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrSW5saW5lcy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtJbmxpbmVzLmgJKHJldmlz
aW9uIDI3MTc4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtJbmxpbmVzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVk
ZSAiSlNDYXN0LmgiCisjaW5jbHVkZSAiV2Vhay5oIgogI2luY2x1ZGUgIldlYWtTZXRJbmxpbmVz
LmgiCiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvV2Vha1NldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL1dlYWtTZXQuaAkocmV2aXNpb24gMjcxNzg2KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvV2Vha1NldC5oCSh3b3JraW5nIGNvcHkpCkBAIC01MSw3ICs1MSw4IEBAIHB1Ymxp
YzoKICAgICBib29sIGlzRW1wdHkoKSBjb25zdDsKICAgICBib29sIGlzVHJpdmlhbGx5RGVzdHJ1
Y3RpYmxlKCkgY29uc3Q7CiAKLSAgICB2b2lkIHZpc2l0KFNsb3RWaXNpdG9yJik7CisvLyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIHZpc2l0KFZpc2l0b3ImKTsKKyAgICB2b2lk
IHZpc2l0MShBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAKICAgICB2b2lkIHJlYXAoKTsKICAgICB2
b2lkIHN3ZWVwKCk7CkBAIC0xMTQsMTAgKzExNSwxMiBAQCBpbmxpbmUgdm9pZCBXZWFrU2V0Ojps
YXN0Q2hhbmNlVG9GaW5hbGl6CiAgICAgICAgIGJsb2NrLT5sYXN0Q2hhbmNlVG9GaW5hbGl6ZSgp
OwogfQogCi1pbmxpbmUgdm9pZCBXZWFrU2V0Ojp2aXNpdChTbG90VmlzaXRvciYgdmlzaXRvcikK
Ky8vdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KKy8vaW5saW5lIHZvaWQgV2Vha1NldDo6dmlz
aXQoVmlzaXRvciYgdmlzaXRvcikKK2lubGluZSB2b2lkIFdlYWtTZXQ6OnZpc2l0MShBYnN0cmFj
dFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGZvciAoV2Vha0Jsb2NrKiBibG9jayA9IG1f
YmxvY2tzLmhlYWQoKTsgYmxvY2s7IGJsb2NrID0gYmxvY2stPm5leHQoKSkKLSAgICAgICAgYmxv
Y2stPnZpc2l0KHZpc2l0b3IpOworICAgICAgICBibG9jay0+dmlzaXQxKHZpc2l0b3IpOwogfQog
CiBpbmxpbmUgdm9pZCBXZWFrU2V0OjpyZWFwKCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnRlcnByZXRlci9TaGFkb3dDaGlja2VuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU2hhZG93Q2hpY2tlbi5jcHAJKHJldmlzaW9uIDI3MTc4
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TaGFkb3dDaGlja2VuLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDQwLDcgKzQ0MCw3IEBAIHZvaWQgU2hhZG93Q2hpY2tlbjo6
dXBkYXRlKFZNJiB2bSwgQ2FsbEYKICAgICAgICAgZGF0YUxvZygiICAgIEFmdGVyIGNsZWFuLXVw
OiAiLCAqdGhpcywgIlxuIik7CiB9CiAKLXZvaWQgU2hhZG93Q2hpY2tlbjo6dmlzaXRDaGlsZHJl
bihTbG90VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgU2hhZG93Q2hpY2tlbjo6dmlzaXRDaGlsZHJl
bihBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGZvciAodW5zaWduZWQgaSA9
IG1fbG9nQ3Vyc29yIC0gbV9sb2c7IGktLTspIHsKICAgICAgICAgSlNPYmplY3QqIGNhbGxlZSA9
IG1fbG9nW2ldLmNhbGxlZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRl
ci9TaGFkb3dDaGlja2VuLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
dGVycHJldGVyL1NoYWRvd0NoaWNrZW4uaAkocmV2aXNpb24gMjcxNzg2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1NoYWRvd0NoaWNrZW4uaAkod29ya2luZyBjb3B5KQpA
QCAtMzUsMTMgKzM1LDEzIEBACiAKIG5hbWVzcGFjZSBKU0MgewogCitjbGFzcyBBYnN0cmFjdFNs
b3RWaXNpdG9yOwogY2xhc3MgQ2FsbEZyYW1lOwogY2xhc3MgQ29kZUJsb2NrOwogY2xhc3MgSlNB
cnJheTsKIGNsYXNzIEpTT2JqZWN0OwogY2xhc3MgSlNTY29wZTsKIGNsYXNzIExMSW50T2Zmc2V0
c0V4dHJhY3RvcjsKLWNsYXNzIFNsb3RWaXNpdG9yOwogY2xhc3MgVk07CiAKIC8vIFNoYWRvd0No
aWNrZW4gaXMgYSBsb2cgdGhhdCBjYW4gYmUgdXNlZCB0byBwcm9kdWNlIGEgc2hhZG93IHN0YWNr
IG9mIENISUNLRU4tc3R5bGUgc3RhY2sgZnJhbWVzLgpAQCAtMTk2LDcgKzE5Niw3IEBAIHB1Ymxp
YzoKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgogICAgIHZvaWQgaXRlcmF0ZShWTSYs
IENhbGxGcmFtZSosIGNvbnN0IEZ1bmN0b3ImKTsKICAgICAKLSAgICB2b2lkIHZpc2l0Q2hpbGRy
ZW4oU2xvdFZpc2l0b3ImKTsKKyAgICB2b2lkIHZpc2l0Q2hpbGRyZW4oQWJzdHJhY3RTbG90Vmlz
aXRvciYpOwogICAgIHZvaWQgcmVzZXQoKTsKICAgICAKICAgICAvLyBKSVQgc3VwcG9ydC4KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvR0NBd2FyZUpJVFN0dWJSb3V0aW5lLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0dDQXdhcmVKSVRTdHViUm91
dGluZS5jcHAJKHJldmlzaW9uIDI3MTc4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
R0NBd2FyZUpJVFN0dWJSb3V0aW5lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzMsMTAgKzczLDE1
IEBAIHZvaWQgR0NBd2FyZUpJVFN0dWJSb3V0aW5lOjpkZWxldGVGcm9tR0MKICAgICBkZWxldGUg
dGhpczsKIH0KIAotdm9pZCBHQ0F3YXJlSklUU3R1YlJvdXRpbmU6Om1hcmtSZXF1aXJlZE9iamVj
dHNJbnRlcm5hbChTbG90VmlzaXRvciYpCisvL3ZvaWQgR0NBd2FyZUpJVFN0dWJSb3V0aW5lOjpt
YXJrUmVxdWlyZWRPYmplY3RzSW50ZXJuYWwoU2xvdFZpc2l0b3ImKQordm9pZCBHQ0F3YXJlSklU
U3R1YlJvdXRpbmU6Om1hcmtSZXF1aXJlZE9iamVjdHNJbnRlcm5hbDEoQWJzdHJhY3RTbG90Vmlz
aXRvciYpCiB7CiB9CiAKKy8vdm9pZCBHQ0F3YXJlSklUU3R1YlJvdXRpbmU6Om1hcmtSZXF1aXJl
ZE9iamVjdHNJbnRlcm5hbChWZXJpZmllclNsb3RWaXNpdG9yJikKKy8veworLy99CisKIE1hcmtp
bmdHQ0F3YXJlSklUU3R1YlJvdXRpbmU6Ok1hcmtpbmdHQ0F3YXJlSklUU3R1YlJvdXRpbmUoCiAg
ICAgY29uc3QgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiYgY29k
ZSwgVk0mIHZtLCBjb25zdCBKU0NlbGwqIG93bmVyLAogICAgIGNvbnN0IFZlY3RvcjxKU0NlbGwq
PiYgY2VsbHMsIEJhZzxDYWxsTGlua0luZm8+JiYgY2FsbExpbmtJbmZvcykKQEAgLTkyLDEyICs5
NywxOSBAQCBNYXJraW5nR0NBd2FyZUpJVFN0dWJSb3V0aW5lOjp+TWFya2luZ0dDCiB7CiB9CiAK
LXZvaWQgTWFya2luZ0dDQXdhcmVKSVRTdHViUm91dGluZTo6bWFya1JlcXVpcmVkT2JqZWN0c0lu
dGVybmFsKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy92b2lkIE1hcmtpbmdHQ0F3YXJlSklUU3R1
YlJvdXRpbmU6Om1hcmtSZXF1aXJlZE9iamVjdHNJbnRlcm5hbChTbG90VmlzaXRvciYgdmlzaXRv
cikKK3ZvaWQgTWFya2luZ0dDQXdhcmVKSVRTdHViUm91dGluZTo6bWFya1JlcXVpcmVkT2JqZWN0
c0ludGVybmFsMShBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGZvciAoYXV0
byYgZW50cnkgOiBtX2NlbGxzKQogICAgICAgICB2aXNpdG9yLmFwcGVuZChlbnRyeSk7CiB9CiAK
Ky8vIEZJWE1FIGRlZHVwZT8KKy8vdm9pZCBNYXJraW5nR0NBd2FyZUpJVFN0dWJSb3V0aW5lOjpt
YXJrUmVxdWlyZWRPYmplY3RzSW50ZXJuYWwoVmVyaWZpZXJTbG90VmlzaXRvciYgdmlzaXRvcikK
Ky8veworLy8gICAgZm9yIChhdXRvJiBlbnRyeSA6IG1fY2VsbHMpCisvLyAgICAgICAgdmlzaXRv
ci5hcHBlbmQoZW50cnkpOworLy99CiAKIEdDQXdhcmVKSVRTdHViUm91dGluZVdpdGhFeGNlcHRp
b25IYW5kbGVyOjpHQ0F3YXJlSklUU3R1YlJvdXRpbmVXaXRoRXhjZXB0aW9uSGFuZGxlcigKICAg
ICBjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUU3R1YlJvdXRpbmVQdHJUYWc+JiBjb2Rl
LCBWTSYgdm0sICBjb25zdCBKU0NlbGwqIG93bmVyLCBjb25zdCBWZWN0b3I8SlNDZWxsKj4mIGNl
bGxzLCBCYWc8Q2FsbExpbmtJbmZvPiYmIGNhbGxMaW5rSW5mb3MsCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0dDQXdhcmVKSVRTdHViUm91dGluZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvR0NBd2FyZUpJVFN0dWJSb3V0aW5lLmgJKHJldmlzaW9u
IDI3MTc4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvR0NBd2FyZUpJVFN0dWJSb3V0
aW5lLmgJKHdvcmtpbmcgY29weSkKQEAgLTYwLDEwICs2MCwxMiBAQCBwdWJsaWM6CiAgICAgewog
ICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBHQ0F3YXJlSklUU3R1YlJvdXRpbmUoY29kZSwg
dm0pKTsKICAgICB9Ci0gICAgCi0gICAgdm9pZCBtYXJrUmVxdWlyZWRPYmplY3RzKFNsb3RWaXNp
dG9yJiB2aXNpdG9yKQorCisvLyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgorLy8gICAg
dm9pZCBtYXJrUmVxdWlyZWRPYmplY3RzKFZpc2l0b3ImIHZpc2l0b3IpCisgICAgdm9pZCBtYXJr
UmVxdWlyZWRPYmplY3RzMShBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogICAgIHsKLSAg
ICAgICAgbWFya1JlcXVpcmVkT2JqZWN0c0ludGVybmFsKHZpc2l0b3IpOworICAgICAgICBtYXJr
UmVxdWlyZWRPYmplY3RzSW50ZXJuYWwxKHZpc2l0b3IpOwogICAgIH0KICAgICAKICAgICB2b2lk
IGRlbGV0ZUZyb21HQygpOwpAQCAtNzEsNyArNzMsOSBAQCBwdWJsaWM6CiBwcm90ZWN0ZWQ6CiAg
ICAgdm9pZCBvYnNlcnZlWmVyb1JlZkNvdW50KCkgb3ZlcnJpZGU7CiAgICAgCi0gICAgdmlydHVh
bCB2b2lkIG1hcmtSZXF1aXJlZE9iamVjdHNJbnRlcm5hbChTbG90VmlzaXRvciYpOworLy8gICAg
dmlydHVhbCB2b2lkIG1hcmtSZXF1aXJlZE9iamVjdHNJbnRlcm5hbChTbG90VmlzaXRvciYpOwor
Ly8gICAgdmlydHVhbCB2b2lkIG1hcmtSZXF1aXJlZE9iamVjdHNJbnRlcm5hbChWZXJpZmllclNs
b3RWaXNpdG9yJik7CisgICAgdmlydHVhbCB2b2lkIG1hcmtSZXF1aXJlZE9iamVjdHNJbnRlcm5h
bDEoQWJzdHJhY3RTbG90VmlzaXRvciYpOwogCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBK
SVRTdHViUm91dGluZVNldDsKQEAgLTg5LDcgKzkzLDkgQEAgcHVibGljOgogICAgIH5NYXJraW5n
R0NBd2FyZUpJVFN0dWJSb3V0aW5lKCkgb3ZlcnJpZGU7CiAgICAgCiBwcm90ZWN0ZWQ6Ci0gICAg
dm9pZCBtYXJrUmVxdWlyZWRPYmplY3RzSW50ZXJuYWwoU2xvdFZpc2l0b3ImKSBvdmVycmlkZTsK
Ky8vICAgIHZvaWQgbWFya1JlcXVpcmVkT2JqZWN0c0ludGVybmFsKFNsb3RWaXNpdG9yJikgb3Zl
cnJpZGU7CisvLyAgICB2b2lkIG1hcmtSZXF1aXJlZE9iamVjdHNJbnRlcm5hbChWZXJpZmllclNs
b3RWaXNpdG9yJikgb3ZlcnJpZGU7CisgICAgdm9pZCBtYXJrUmVxdWlyZWRPYmplY3RzSW50ZXJu
YWwxKEFic3RyYWN0U2xvdFZpc2l0b3ImKSBvdmVycmlkZTsKIAogcHJpdmF0ZToKICAgICBWZWN0
b3I8V3JpdGVCYXJyaWVyPEpTQ2VsbD4+IG1fY2VsbHM7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L1BvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1BvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lLmNwcAko
cmV2aXNpb24gMjcxNzg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Qb2x5bW9ycGhp
Y0NhbGxTdHViUm91dGluZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzNSwxMiArMTM1LDIwIEBA
IGJvb2wgUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmU6OnZpc2l0V2UKICAgICByZXR1cm4gaXNT
dGlsbExpdmU7CiB9CiAKLXZvaWQgUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmU6Om1hcmtSZXF1
aXJlZE9iamVjdHNJbnRlcm5hbChTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vdm9pZCBQb2x5bW9y
cGhpY0NhbGxTdHViUm91dGluZTo6bWFya1JlcXVpcmVkT2JqZWN0c0ludGVybmFsKFNsb3RWaXNp
dG9yJiB2aXNpdG9yKQordm9pZCBQb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZTo6bWFya1JlcXVp
cmVkT2JqZWN0c0ludGVybmFsMShBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAg
IGZvciAoYXV0byYgdmFyaWFudCA6IG1fdmFyaWFudHMpCiAgICAgICAgIHZpc2l0b3IuYXBwZW5k
KHZhcmlhbnQpOwogfQogCisvLy8vIG1sYW0gRklYTUUgZGVkdXBlPz8/CisvL3ZvaWQgUG9seW1v
cnBoaWNDYWxsU3R1YlJvdXRpbmU6Om1hcmtSZXF1aXJlZE9iamVjdHNJbnRlcm5hbChWZXJpZmll
clNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy97CisvLyAgICBmb3IgKGF1dG8mIHZhcmlhbnQgOiBt
X3ZhcmlhbnRzKQorLy8gICAgICAgIHZpc2l0b3IuYXBwZW5kKHZhcmlhbnQpOworLy99CisKIH0g
Ly8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1BvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5l
LmgJKHJldmlzaW9uIDI3MTc4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUG9seW1v
cnBoaWNDYWxsU3R1YlJvdXRpbmUuaAkod29ya2luZyBjb3B5KQpAQCAtMTA1LDcgKzEwNSw5IEBA
IHB1YmxpYzoKICAgICBib29sIHZpc2l0V2VhayhWTSYpIGZpbmFsOwogCiBwcml2YXRlOgotICAg
IHZvaWQgbWFya1JlcXVpcmVkT2JqZWN0c0ludGVybmFsKFNsb3RWaXNpdG9yJikgZmluYWw7Cisv
LyAgICB2b2lkIG1hcmtSZXF1aXJlZE9iamVjdHNJbnRlcm5hbChTbG90VmlzaXRvciYpIGZpbmFs
OworLy8gICAgdm9pZCBtYXJrUmVxdWlyZWRPYmplY3RzSW50ZXJuYWwoVmVyaWZpZXJTbG90Vmlz
aXRvciYpIGZpbmFsOworICAgIHZvaWQgbWFya1JlcXVpcmVkT2JqZWN0c0ludGVybmFsMShBYnN0
cmFjdFNsb3RWaXNpdG9yJikgZmluYWw7CiAKICAgICBWZWN0b3I8V3JpdGVCYXJyaWVyPEpTQ2Vs
bD4sIDI+IG1fdmFyaWFudHM7CiAgICAgVW5pcXVlQXJyYXk8dWludDMyX3Q+IG1fZmFzdENvdW50
czsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Fic3RyYWN0TW9kdWxlUmVj
b3JkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BYnN0
cmFjdE1vZHVsZVJlY29yZC5jcHAJKHJldmlzaW9uIDI3MTc4NikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0Fic3RyYWN0TW9kdWxlUmVjb3JkLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNjAsNyArNjAsOCBAQCB2b2lkIEFic3RyYWN0TW9kdWxlUmVjb3JkOjpmaW5pc2hDcmVhdGlv
CiAgICAgcHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiZGVwZW5kZW5j
aWVzTWFwIl9zKSwgbV9kZXBlbmRlbmNpZXNNYXAuZ2V0KCkpOwogfQogCi12b2lkIEFic3RyYWN0
TW9kdWxlUmVjb3JkOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZp
c2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBBYnN0cmFjdE1vZHVsZVJl
Y29yZDo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQog
ewogICAgIEFic3RyYWN0TW9kdWxlUmVjb3JkKiB0aGlzT2JqZWN0ID0ganNDYXN0PEFic3RyYWN0
TW9kdWxlUmVjb3JkKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlz
T2JqZWN0LCBpbmZvKCkpOwpAQCAtNzAsNiArNzEsOCBAQCB2b2lkIEFic3RyYWN0TW9kdWxlUmVj
b3JkOjp2aXNpdENoaWxkcmVuCiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9kZXBl
bmRlbmNpZXNNYXApOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oQWJzdHJhY3RNb2R1bGVS
ZWNvcmQpOworCiB2b2lkIEFic3RyYWN0TW9kdWxlUmVjb3JkOjphcHBlbmRSZXF1ZXN0ZWRNb2R1
bGUoY29uc3QgSWRlbnRpZmllciYgbW9kdWxlTmFtZSkKIHsKICAgICBtX3JlcXVlc3RlZE1vZHVs
ZXMuYWRkKG1vZHVsZU5hbWUuaW1wbCgpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0Fic3RyYWN0TW9kdWxlUmVjb3JkLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQWJzdHJhY3RNb2R1bGVSZWNvcmQuaAkocmV2aXNpb24gMjcxNzg2
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQWJzdHJhY3RNb2R1bGVSZWNvcmQu
aAkod29ya2luZyBjb3B5KQpAQCAtMTM2LDcgKzEzNiw3IEBAIHByb3RlY3RlZDoKICAgICBBYnN0
cmFjdE1vZHVsZVJlY29yZChWTSYsIFN0cnVjdHVyZSosIGNvbnN0IElkZW50aWZpZXImKTsKICAg
ICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTR2xvYmFsT2JqZWN0KiwgVk0mKTsKIAotICAgIHN0YXRp
YyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJF
X1ZJU0lUX0NISUxEUkVOOwogCiAgICAgdm9pZCBzZXRNb2R1bGVFbnZpcm9ubWVudChKU0dsb2Jh
bE9iamVjdCosIEpTTW9kdWxlRW52aXJvbm1lbnQqKTsKIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQXJnTGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQXJnTGlzdC5jcHAJKHJldmlzaW9uIDI3MTc4NikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0FyZ0xpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MSw3
ICs1MSw3IEBAIHZvaWQgQXJnTGlzdDo6Z2V0U2xpY2UoaW50IHN0YXJ0SW5kZXgsIEEKICAgICBy
ZXN1bHQubV9hcmdDb3VudCA9ICBtX2FyZ0NvdW50IC0gc3RhcnRJbmRleDsKIH0KIAotdm9pZCBN
YXJrZWRBcmd1bWVudEJ1ZmZlcjo6bWFya0xpc3RzKFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBMaXN0
U2V0JiBtYXJrU2V0KQordm9pZCBNYXJrZWRBcmd1bWVudEJ1ZmZlcjo6bWFya0xpc3RzKEFic3Ry
YWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIExpc3RTZXQmIG1hcmtTZXQpCiB7CiAgICAgTGlzdFNl
dDo6aXRlcmF0b3IgZW5kID0gbWFya1NldC5lbmQoKTsKICAgICBmb3IgKExpc3RTZXQ6Oml0ZXJh
dG9yIGl0ID0gbWFya1NldC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FyZ0xpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9BcmdMaXN0LmgJKHJldmlzaW9uIDI3MTc4NikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FyZ0xpc3QuaAkod29ya2luZyBjb3B5KQpAQCAt
MTE4LDcgKzExOCw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAg
ICAgICAgIAotICAgIHN0YXRpYyB2b2lkIG1hcmtMaXN0cyhTbG90VmlzaXRvciYsIExpc3RTZXQm
KTsKKyAgICBzdGF0aWMgdm9pZCBtYXJrTGlzdHMoQWJzdHJhY3RTbG90VmlzaXRvciYsIExpc3RT
ZXQmKTsKIAogICAgIHZvaWQgZW5zdXJlQ2FwYWNpdHkoc2l6ZV90IHJlcXVlc3RlZENhcGFjaXR5
KQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlYWJsZUlk
ZW50aWZpZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9D
YWNoZWFibGVJZGVudGlmaWVyLmgJKHJldmlzaW9uIDI3MTc4NikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0NhY2hlYWJsZUlkZW50aWZpZXIuaAkod29ya2luZyBjb3B5KQpAQCAt
MzksMTAgKzM5LDExIEBAIHVzaW5nIFdURjo6VW5pcXVlZFN0cmluZ0ltcGw7CiAKIG5hbWVzcGFj
ZSBKU0MgewogCitjbGFzcyBBYnN0cmFjdFNsb3RWaXNpdG9yOwogY2xhc3MgQ29kZUJsb2NrOwog
Y2xhc3MgSWRlbnRpZmllcjsKIGNsYXNzIEpTQ2VsbDsKLWNsYXNzIFNsb3RWaXNpdG9yOworLy9j
bGFzcyBTbG90VmlzaXRvcjsKIAogY2xhc3MgQ2FjaGVhYmxlSWRlbnRpZmllciB7CiBwdWJsaWM6
CkBAIC04Nyw3ICs4OCw4IEBAIHB1YmxpYzoKIAogICAgIHVpbnRwdHJfdCByYXdCaXRzKCkgY29u
c3QgeyByZXR1cm4gbV9iaXRzOyB9CiAKLSAgICBpbmxpbmUgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShT
bG90VmlzaXRvciYpIGNvbnN0OworLy8gICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gaW5s
aW5lIHZvaWQgdmlzaXRBZ2dyZWdhdGUoVmlzaXRvciYpIGNvbnN0OworICAgIGlubGluZSB2b2lk
IHZpc2l0QWdncmVnYXRlMShBYnN0cmFjdFNsb3RWaXNpdG9yJikgY29uc3Q7CiAKICAgICBKU19F
WFBPUlRfUFJJVkFURSB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVhYmxlSWRlbnRpZmllcklubGluZXMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWFibGVJZGVu
dGlmaWVySW5saW5lcy5oCShyZXZpc2lvbiAyNzE3ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9DYWNoZWFibGVJZGVudGlmaWVySW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xMzcsMTIgKzEzNywxNiBAQCBpbmxpbmUgdm9pZCBDYWNoZWFibGVJZGVudGlmaWVyOjpzZXRV
aWRCCiAgICAgbV9iaXRzID0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4odWlkKSB8IHNfdWlkVGFn
OwogfQogCi1pbmxpbmUgdm9pZCBDYWNoZWFibGVJZGVudGlmaWVyOjp2aXNpdEFnZ3JlZ2F0ZShT
bG90VmlzaXRvciYgdmlzaXRvcikgY29uc3QKKy8vdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4K
Ky8vaW5saW5lIHZvaWQgQ2FjaGVhYmxlSWRlbnRpZmllcjo6dmlzaXRBZ2dyZWdhdGUoVmlzaXRv
ciYgdmlzaXRvcikgY29uc3QKK2lubGluZSB2b2lkIENhY2hlYWJsZUlkZW50aWZpZXI6OnZpc2l0
QWdncmVnYXRlMShBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBjb25zdAogewogICAgIGlm
IChtX2JpdHMgJiYgaXNDZWxsKCkpCiAgICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQo
Y2VsbCgpKTsKIH0KIAorLy90ZW1wbGF0ZSB2b2lkIENhY2hlYWJsZUlkZW50aWZpZXI6OnZpc2l0
QWdncmVnYXRlKFNsb3RWaXNpdG9yJikgY29uc3Q7CisvL3RlbXBsYXRlIHZvaWQgQ2FjaGVhYmxl
SWRlbnRpZmllcjo6dmlzaXRBZ2dyZWdhdGUoVmVyaWZpZXJTbG90VmlzaXRvciYpIGNvbnN0Owog
CiBpbmxpbmUgYm9vbCBDYWNoZWFibGVJZGVudGlmaWVyOjpvcGVyYXRvcj09KGNvbnN0IENhY2hl
YWJsZUlkZW50aWZpZXImIG90aGVyKSBjb25zdAogewpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQ2xhc3NJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQ2xhc3NJbmZvLmgJKHJldmlzaW9uIDI3MTc4NikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0NsYXNzSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCw5ICs0
NCw2IEBAIHN0cnVjdCBNZXRob2RUYWJsZSB7CiAgICAgdXNpbmcgRGVzdHJveUZ1bmN0aW9uUHRy
ID0gdm9pZCAoKikoSlNDZWxsKik7CiAgICAgRGVzdHJveUZ1bmN0aW9uUHRyIE1FVEhPRF9UQUJM
RV9FTlRSWShkZXN0cm95KTsKIAotICAgIHVzaW5nIFZpc2l0Q2hpbGRyZW5GdW5jdGlvblB0ciA9
IHZvaWQgKCopKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7Ci0gICAgVmlzaXRDaGlsZHJlbkZ1bmN0
aW9uUHRyIE1FVEhPRF9UQUJMRV9FTlRSWSh2aXNpdENoaWxkcmVuKTsKLQogICAgIHVzaW5nIEdl
dENhbGxEYXRhRnVuY3Rpb25QdHIgPSBDYWxsRGF0YSAoKikoSlNDZWxsKik7CiAgICAgR2V0Q2Fs
bERhdGFGdW5jdGlvblB0ciBNRVRIT0RfVEFCTEVfRU5UUlkoZ2V0Q2FsbERhdGEpOwogCkBAIC0x
MjAsNyArMTE3LDE4IEBAIHN0cnVjdCBNZXRob2RUYWJsZSB7CiAgICAgdXNpbmcgRXN0aW1hdGVk
U2l6ZUZ1bmN0aW9uUHRyID0gc2l6ZV90ICgqKShKU0NlbGwqLCBWTSYpOwogICAgIEVzdGltYXRl
ZFNpemVGdW5jdGlvblB0ciBNRVRIT0RfVEFCTEVfRU5UUlkoZXN0aW1hdGVkU2l6ZSk7CiAKLSAg
ICB1c2luZyBWaXNpdE91dHB1dENvbnN0cmFpbnRzUHRyID0gdm9pZCAoKikoSlNDZWxsKiwgU2xv
dFZpc2l0b3ImKTsKKyAgICB1c2luZyBWaXNpdENoaWxkcmVuRnVuY3Rpb25QdHIgPSB2b2lkICgq
KShKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIFZpc2l0Q2hpbGRyZW5GdW5jdGlvblB0ciBN
RVRIT0RfVEFCTEVfRU5UUlkodmlzaXRDaGlsZHJlbldpdGhTbG90VmlzaXRvcik7CisKKy8vICAg
IHVzaW5nIFZpc2l0Q2hpbGRyZW5XaXRoVmVyaWZpZXJTbG90VmlzaXRvclB0ciA9IHZvaWQgKCop
KEpTQ2VsbCosIFZlcmlmaWVyU2xvdFZpc2l0b3ImKTsKKyAgICB1c2luZyBWaXNpdENoaWxkcmVu
V2l0aEFic3RyYWN0U2xvdFZpc2l0b3JQdHIgPSB2b2lkICgqKShKU0NlbGwqLCBBYnN0cmFjdFNs
b3RWaXNpdG9yJik7CisgICAgVmlzaXRDaGlsZHJlbldpdGhBYnN0cmFjdFNsb3RWaXNpdG9yUHRy
IE1FVEhPRF9UQUJMRV9FTlRSWSh2aXNpdENoaWxkcmVuV2l0aEFic3RyYWN0U2xvdFZpc2l0b3Ip
OworCisgICAgQUxXQVlTX0lOTElORSB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBT
bG90VmlzaXRvciYgdmlzaXRvcikgY29uc3QgeyB2aXNpdENoaWxkcmVuV2l0aFNsb3RWaXNpdG9y
KGNlbGwsIHZpc2l0b3IpOyB9CisvLyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgdmlzaXRDaGlsZHJl
bihKU0NlbGwqIGNlbGwsIFZlcmlmaWVyU2xvdFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0IHsgdmlz
aXRDaGlsZHJlbldpdGhWZXJpZmllclNsb3RWaXNpdG9yKGNlbGwsIHZpc2l0b3IpOyB9CisgICAg
QUxXQVlTX0lOTElORSB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBBYnN0cmFjdFNs
b3RWaXNpdG9yJiB2aXNpdG9yKSBjb25zdCB7IHZpc2l0Q2hpbGRyZW5XaXRoQWJzdHJhY3RTbG90
VmlzaXRvcihjZWxsLCB2aXNpdG9yKTsgfQorCisgICAgdXNpbmcgVmlzaXRPdXRwdXRDb25zdHJh
aW50c1B0ciA9IHZvaWQgKCopKEpTQ2VsbCosIEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKICAgICBW
aXNpdE91dHB1dENvbnN0cmFpbnRzUHRyIE1FVEhPRF9UQUJMRV9FTlRSWSh2aXNpdE91dHB1dENv
bnN0cmFpbnRzKTsKIH07CiAKQEAgLTE0Nyw3ICsxNTUsNiBAQCBzdHJ1Y3QgTWV0aG9kVGFibGUg
ewogICAgIEpTQ2FzdGluZ0hlbHBlcnM6OkluaGVyaXRzVHJhaXRzPENsYXNzTmFtZT46OnR5cGVS
YW5nZSwgXAogICAgIHsgXAogICAgICAgICAmQ2xhc3NOYW1lOjpkZXN0cm95LCBcCi0gICAgICAg
ICZDbGFzc05hbWU6OnZpc2l0Q2hpbGRyZW4sIFwKICAgICAgICAgJkNsYXNzTmFtZTo6Z2V0Q2Fs
bERhdGEsIFwKICAgICAgICAgJkNsYXNzTmFtZTo6Z2V0Q29uc3RydWN0RGF0YSwgXAogICAgICAg
ICAmQ2xhc3NOYW1lOjpwdXQsIFwKQEAgLTE3Myw2ICsxODAsOCBAQCBzdHJ1Y3QgTWV0aG9kVGFi
bGUgewogICAgICAgICAmQ2xhc3NOYW1lOjpkdW1wVG9TdHJlYW0sIFwKICAgICAgICAgJkNsYXNz
TmFtZTo6YW5hbHl6ZUhlYXAsIFwKICAgICAgICAgJkNsYXNzTmFtZTo6ZXN0aW1hdGVkU2l6ZSwg
XAorICAgICAgICAmQ2xhc3NOYW1lOjp2aXNpdENoaWxkcmVuLCBcCisgICAgICAgICZDbGFzc05h
bWU6OnZpc2l0Q2hpbGRyZW4sIFwKICAgICAgICAgJkNsYXNzTmFtZTo6dmlzaXRPdXRwdXRDb25z
dHJhaW50cywgXAogICAgIH0sIFwKICAgICBDbGFzc05hbWU6OlR5cGVkQXJyYXlTdG9yYWdlVHlw
ZSwgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xvbmVkQXJndW1lbnRz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DbG9uZWRB
cmd1bWVudHMuY3BwCShyZXZpc2lvbiAyNzE3ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9DbG9uZWRBcmd1bWVudHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNjcsNyArMjY3
LDggQEAgdm9pZCBDbG9uZWRBcmd1bWVudHM6Om1hdGVyaWFsaXplU3BlY2lhbAogICAgICAgICBt
YXRlcmlhbGl6ZVNwZWNpYWxzKGdsb2JhbE9iamVjdCk7CiB9CiAKLXZvaWQgQ2xvbmVkQXJndW1l
bnRzOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0
ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBDbG9uZWRBcmd1bWVudHM6OnZpc2l0Q2hp
bGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBDbG9uZWRB
cmd1bWVudHMqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8Q2xvbmVkQXJndW1lbnRzKj4oY2VsbCk7CiAg
ICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtMjc1
LDUgKzI3Niw3IEBAIHZvaWQgQ2xvbmVkQXJndW1lbnRzOjp2aXNpdENoaWxkcmVuKEpTQ2UKICAg
ICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2NhbGxlZSk7CiB9CiAKK0RFRklORV9WSVNJ
VF9DSElMRFJFTihDbG9uZWRBcmd1bWVudHMpOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xvbmVkQXJndW1lbnRzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xvbmVkQXJndW1lbnRzLmgJ
KHJldmlzaW9uIDI3MTc4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Nsb25l
ZEFyZ3VtZW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC02Miw3ICs2Miw3IEBAIHB1YmxpYzoKICAg
ICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCos
IEpTVmFsdWUgcHJvdG90eXBlKTsKICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTbG93UHV0
U3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlIHByb3RvdHlwZSk7CiAKLSAg
ICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAg
REVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIERFQ0xBUkVfSU5GTzsKIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGlyZWN0QXJndW1lbnRzLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EaXJlY3RBcmd1bWVudHMuY3BwCShy
ZXZpc2lvbiAyNzE3ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EaXJlY3RB
cmd1bWVudHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MCw3ICs5MCw4IEBAIHNpemVfdCBEaXJl
Y3RBcmd1bWVudHM6OmVzdGltYXRlZFNpemUoSlMKICAgICByZXR1cm4gQmFzZTo6ZXN0aW1hdGVk
U2l6ZShjZWxsLCB2bSkgKyBtYXBwZWRBcmd1bWVudHNTaXplICsgbW9kaWZpZWRBcmd1bWVudHNT
aXplOwogfQogCi12b2lkIERpcmVjdEFyZ3VtZW50czo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIHRo
aXNDZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+
Cit2b2lkIERpcmVjdEFyZ3VtZW50czo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiB0aGlzQ2Vs
bCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBEaXJlY3RBcmd1bWVudHMqIHRoaXNPYmplY3Qg
PSBzdGF0aWNfY2FzdDxEaXJlY3RBcmd1bWVudHMqPih0aGlzQ2VsbCk7CiAgICAgQVNTRVJUX0dD
X09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtMTA0LDYgKzEwNSw4IEBA
IHZvaWQgRGlyZWN0QXJndW1lbnRzOjp2aXNpdENoaWxkcmVuKEpTQ2UKICAgICBHZW5lcmljQXJn
dW1lbnRzPERpcmVjdEFyZ3VtZW50cz46OnZpc2l0Q2hpbGRyZW4odGhpc0NlbGwsIHZpc2l0b3Ip
OwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oRGlyZWN0QXJndW1lbnRzKTsKKwogU3RydWN0
dXJlKiBEaXJlY3RBcmd1bWVudHM6OmNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQogewogICAgIHJldHVybiBTdHJ1
Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKERpcmVj
dEFyZ3VtZW50c1R5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5oCShyZXZpc2lvbiAy
NzE3ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EaXJlY3RBcmd1bWVudHMu
aAkod29ya2luZyBjb3B5KQpAQCAtNjUsNyArNjUsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIERp
cmVjdEFyZ3VtZW50cyogY3JlYXRlQnlDb3B5aW5nKEpTR2xvYmFsT2JqZWN0KiwgQ2FsbEZyYW1l
Kik7CiAKICAgICBzdGF0aWMgc2l6ZV90IGVzdGltYXRlZFNpemUoSlNDZWxsKiwgVk0mKTsKLSAg
ICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAg
REVDTEFSRV9WSVNJVF9DSElMRFJFTjsKICAgICAKICAgICB1aW50MzJfdCBpbnRlcm5hbExlbmd0
aCgpIGNvbnN0CiAgICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXZh
bEV4ZWN1dGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0V2YWxFeGVjdXRhYmxlLmNwcAkocmV2aXNpb24gMjcxNzg2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvRXZhbEV4ZWN1dGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
OSw3ICs0OSw4IEBAIGF1dG8gRXZhbEV4ZWN1dGFibGU6OmVuc3VyZVRlbXBsYXRlT2JqZWMKICAg
ICByZXR1cm4gZW5zdXJlVGVtcGxhdGVPYmplY3RNYXBJbXBsKG1fdGVtcGxhdGVPYmplY3RNYXAp
OwogfQogCi12b2lkIEV2YWxFeGVjdXRhYmxlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwg
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBF
dmFsRXhlY3V0YWJsZTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2
aXNpdG9yKQogewogICAgIEV2YWxFeGVjdXRhYmxlKiB0aGlzT2JqZWN0ID0ganNDYXN0PEV2YWxF
eGVjdXRhYmxlKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2Jq
ZWN0LCBpbmZvKCkpOwpAQCAtNjMsNCArNjQsNiBAQCB2b2lkIEV2YWxFeGVjdXRhYmxlOjp2aXNp
dENoaWxkcmVuKEpTQ2VsCiAgICAgfQogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oRXZhbEV4
ZWN1dGFibGUpOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0V2YWxFeGVjdXRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvRXZhbEV4ZWN1dGFibGUuaAkocmV2aXNpb24gMjcxNzg2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXZhbEV4ZWN1dGFibGUuaAkod29ya2luZyBj
b3B5KQpAQCAtNzgsNyArNzgsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgdXNpbmcgQmFzZTo6ZmluaXNo
Q3JlYXRpb247CiAgICAgRXZhbEV4ZWN1dGFibGUoSlNHbG9iYWxPYmplY3QqLCBjb25zdCBTb3Vy
Y2VDb2RlJiwgYm9vbCBpblN0cmljdENvbnRleHQsIERlcml2ZWRDb250ZXh0VHlwZSwgYm9vbCBp
c0Fycm93RnVuY3Rpb25Db250ZXh0LCBib29sIGlzSW5zaWRlT3JkaW5hcnlGdW5jdGlvbiwgRXZh
bENvbnRleHRUeXBlLCBOZWVkc0NsYXNzRmllbGRJbml0aWFsaXplcik7CiAKLSAgICBzdGF0aWMg
dm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9W
SVNJVF9DSElMRFJFTjsKIAogICAgIHVuc2lnbmVkIG1fbmVlZHNDbGFzc0ZpZWxkSW5pdGlhbGl6
ZXIgOiAxOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGNlcHRpb24u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlv
bi5jcHAJKHJldmlzaW9uIDI3MTc4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0V4Y2VwdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUzLDcgKzUzLDggQEAgU3RydWN0dXJl
KiBFeGNlcHRpb246OmNyZWF0ZVN0cnVjdHVyZShWTQogICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNy
ZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKENlbGxUeXBlLCBTdHJ1
Y3R1cmVGbGFncyksIGluZm8oKSk7CiB9CiAKLXZvaWQgRXhjZXB0aW9uOjp2aXNpdENoaWxkcmVu
KEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPgordm9pZCBFeGNlcHRpb246OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwg
VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBFeGNlcHRpb24qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8
RXhjZXB0aW9uKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2Jq
ZWN0LCBpbmZvKCkpOwpAQCAtNjQsNiArNjUsOCBAQCB2b2lkIEV4Y2VwdGlvbjo6dmlzaXRDaGls
ZHJlbihKU0NlbGwqIGNlCiAgICAgICAgIGZyYW1lLnZpc2l0Q2hpbGRyZW4odmlzaXRvcik7CiB9
CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihFeGNlcHRpb24pOworCiBFeGNlcHRpb246OkV4Y2Vw
dGlvbihWTSYgdm0pCiAgICAgOiBCYXNlKHZtLCB2bS5leGNlcHRpb25TdHJ1Y3R1cmUuZ2V0KCkp
CiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGNlcHRpb24uaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGNlcHRpb24uaAkocmV2
aXNpb24gMjcxNzg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9u
LmgJKHdvcmtpbmcgY29weSkKQEAgLTUxLDcgKzUxLDcgQEAgcHVibGljOgogCiAgICAgc3RhdGlj
IFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVl
IHByb3RvdHlwZSk7CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNs
b3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIERFQ0xBUkVf
RVhQT1JUX0lORk87CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0
aW9uRXhlY3V0YWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvRnVuY3Rpb25FeGVjdXRhYmxlLmNwcAkocmV2aXNpb24gMjcxNzg2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25FeGVjdXRhYmxlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNjcsNyArNjcsOCBAQCBGdW5jdGlvbkNvZGVCbG9jayogRnVuY3Rpb25FeGVjdXRh
YmxlOjpiCiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEZ1bmN0aW9uQ29kZUJsb2NrKj4oZWRnZS0+
Y29kZUJsb2NrKCktPmJhc2VsaW5lQWx0ZXJuYXRpdmUoKSk7CiB9CiAKLXZvaWQgRnVuY3Rpb25F
eGVjdXRhYmxlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0
b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBGdW5jdGlvbkV4ZWN1dGFibGU6
OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAg
ICBGdW5jdGlvbkV4ZWN1dGFibGUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8RnVuY3Rpb25FeGVjdXRh
YmxlKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBp
bmZvKCkpOwpAQCAtODYsNiArODcsOCBAQCB2b2lkIEZ1bmN0aW9uRXhlY3V0YWJsZTo6dmlzaXRD
aGlsZHJlbihKCiAgICAgfQogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oRnVuY3Rpb25FeGVj
dXRhYmxlKTsKKwogRnVuY3Rpb25FeGVjdXRhYmxlKiBGdW5jdGlvbkV4ZWN1dGFibGU6OmZyb21H
bG9iYWxDb2RlKAogICAgIGNvbnN0IElkZW50aWZpZXImIG5hbWUsIEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgCiAgICAgSlNPYmplY3QqJiBl
eGNlcHRpb24sIGludCBvdmVycmlkZUxpbmVOdW1iZXIsIE9wdGlvbmFsPGludD4gZnVuY3Rpb25D
b25zdHJ1Y3RvclBhcmFtZXRlcnNFbmRQb3NpdGlvbikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZS5oCShyZXZpc2lvbiAyNzE3
ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvbkV4ZWN1dGFibGUu
aAkod29ya2luZyBjb3B5KQpAQCAtMTY2LDcgKzE2Niw3IEBAIHB1YmxpYzoKICAgICBKU1BhcnNl
clNjcmlwdE1vZGUgc2NyaXB0TW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fdW5saW5rZWRFeGVjdXRh
YmxlLT5zY3JpcHRNb2RlKCk7IH0KICAgICBTb3VyY2VDb2RlIGNsYXNzU291cmNlKCkgY29uc3Qg
eyByZXR1cm4gbV91bmxpbmtlZEV4ZWN1dGFibGUtPmNsYXNzU291cmNlKCk7IH0KIAotICAgIHN0
YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNM
QVJFX1ZJU0lUX0NISUxEUkVOOwogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVy
ZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG8pCiAg
ICAgewogICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwg
cHJvdG8sIFR5cGVJbmZvKEZ1bmN0aW9uRXhlY3V0YWJsZVR5cGUsIFN0cnVjdHVyZUZsYWdzKSwg
aW5mbygpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uUmFy
ZURhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1
bmN0aW9uUmFyZURhdGEuY3BwCShyZXZpc2lvbiAyNzE3ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9GdW5jdGlvblJhcmVEYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTEs
NyArNTEsOCBAQCBTdHJ1Y3R1cmUqIEZ1bmN0aW9uUmFyZURhdGE6OmNyZWF0ZVN0cnVjCiAgICAg
cmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlw
ZUluZm8oQ2VsbFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKIH0KIAotdm9pZCBGdW5j
dGlvblJhcmVEYXRhOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZp
c2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBGdW5jdGlvblJhcmVEYXRh
Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAg
ICAgRnVuY3Rpb25SYXJlRGF0YSogcmFyZURhdGEgPSBqc0Nhc3Q8RnVuY3Rpb25SYXJlRGF0YSo+
KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2VsbCwgaW5mbygpKTsKQEAg
LTYzLDYgKzY0LDggQEAgdm9pZCBGdW5jdGlvblJhcmVEYXRhOjp2aXNpdENoaWxkcmVuKEpTQwog
ICAgIHZpc2l0b3IuYXBwZW5kKHJhcmVEYXRhLT5tX2V4ZWN1dGFibGUpOwogfQogCitERUZJTkVf
VklTSVRfQ0hJTERSRU4oRnVuY3Rpb25SYXJlRGF0YSk7CisKIEZ1bmN0aW9uUmFyZURhdGE6OkZ1
bmN0aW9uUmFyZURhdGEoVk0mIHZtLCBFeGVjdXRhYmxlQmFzZSogZXhlY3V0YWJsZSkKICAgICA6
IEJhc2Uodm0sIHZtLmZ1bmN0aW9uUmFyZURhdGFTdHJ1Y3R1cmUuZ2V0KCkpCiAgICAgLCBtX29i
amVjdEFsbG9jYXRpb25Qcm9maWxlKCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0Z1bmN0aW9uUmFyZURhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9GdW5jdGlvblJhcmVEYXRhLmgJKHJldmlzaW9uIDI3MTc4NikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uUmFyZURhdGEuaAkod29ya2luZyBjb3B5
KQpAQCAtNjUsNyArNjUsNyBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVh
dGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUgcHJvdG90eXBlKTsKIAot
ICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAg
ICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgREVDTEFSRV9JTkZPOwogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljQXJndW1lbnRzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50cy5oCShy
ZXZpc2lvbiAyNzE3ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmlj
QXJndW1lbnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDcgKzQ0LDcgQEAgcHJvdGVjdGVkOgog
ICAgIHsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNs
b3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9URU1QTEFURV9WSVNJVF9DSElMRFJFTjsKICAgICBz
dGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCos
IFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJv
cGVydHlTbG90QnlJbmRleChKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgdW5zaWduZWQgcHJv
cGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKICAgICBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0
eU5hbWVzKEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIERv
bnRFbnVtUHJvcGVydGllc01vZGUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvR2VuZXJpY0FyZ3VtZW50c0lubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9HZW5lcmljQXJndW1lbnRzSW5saW5lcy5oCShyZXZpc2lvbiAyNzE3
ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljQXJndW1lbnRzSW5s
aW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw4IEBACiBuYW1lc3BhY2UgSlNDIHsK
IAogdGVtcGxhdGU8dHlwZW5hbWUgVHlwZT4KLXZvaWQgR2VuZXJpY0FyZ3VtZW50czxUeXBlPjo6
dmlzaXRDaGlsZHJlbihKU0NlbGwqIHRoaXNDZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3Rl
bXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEdlbmVyaWNBcmd1bWVudHM8VHlwZT46OnZp
c2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogdGhpc0NlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAg
ICAgVHlwZSogdGhpc09iamVjdCA9IHN0YXRpY19jYXN0PFR5cGUqPih0aGlzQ2VsbCk7CiAgICAg
QVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNDEsNiAr
NDIsOCBAQCB2b2lkIEdlbmVyaWNBcmd1bWVudHM8VHlwZT46OnZpc2l0Q2hpbGRyCiAgICAgICAg
IHZpc2l0b3IubWFya0F1eGlsaWFyeSh0aGlzT2JqZWN0LT5tX21vZGlmaWVkQXJndW1lbnRzRGVz
Y3JpcHRvci5nZXRVbnNhZmUoKSk7CiB9CiAKK0RFRklORV9URU1QTEFURV9WSVNJVF9DSElMRFJF
Tih0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlPiwgR2VuZXJpY0FyZ3VtZW50czxUeXBlPik7CisKIHRl
bXBsYXRlPHR5cGVuYW1lIFR5cGU+CiBib29sIEdlbmVyaWNBcmd1bWVudHM8VHlwZT46OmdldE93
blByb3BlcnR5U2xvdChKU09iamVjdCogb2JqZWN0LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBQcm9wZXJ0eU5hbWUgaWRlbnQsIFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dldHRlclNldHRlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2V0dGVyU2V0dGVyLmNwcAkocmV2aXNp
b24gMjcxNzg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2V0dGVyU2V0dGVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNyArMzMsOCBAQCBTVEFUSUNfQVNTRVJUX0lTX1RS
SVZJQUxMWV9ERVNUUlVDVElCTEUoCiAKIGNvbnN0IENsYXNzSW5mbyBHZXR0ZXJTZXR0ZXI6OnNf
aW5mbyA9IHsgIkdldHRlclNldHRlciIsIG51bGxwdHIsIG51bGxwdHIsIG51bGxwdHIsIENSRUFU
RV9NRVRIT0RfVEFCTEUoR2V0dGVyU2V0dGVyKSB9OwogCi12b2lkIEdldHRlclNldHRlcjo6dmlz
aXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8
dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgR2V0dGVyU2V0dGVyOjp2aXNpdENoaWxkcmVuSW1wbChK
U0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgR2V0dGVyU2V0dGVyKiB0aGlz
T2JqZWN0ID0ganNDYXN0PEdldHRlclNldHRlcio+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpF
Q1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTQzLDYgKzQ0LDggQEAgdm9pZCBH
ZXR0ZXJTZXR0ZXI6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKgogICAgIHZpc2l0b3IuYXBwZW5kKHRo
aXNPYmplY3QtPm1fc2V0dGVyKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEdldHRlclNl
dHRlcik7CisKIEpTVmFsdWUgY2FsbEdldHRlcihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBKU1ZhbHVlIGJhc2UsIEpTVmFsdWUgZ2V0dGVyU2V0dGVyKQogewogICAgIFZNJiB2bSA9IGds
b2JhbE9iamVjdC0+dm0oKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dl
dHRlclNldHRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0dldHRlclNldHRlci5oCShyZXZpc2lvbiAyNzE3ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9HZXR0ZXJTZXR0ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtODIsNyArODIsNyBA
QCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgZ2V0dGVy
T2JqZWN0LCBzZXR0ZXJPYmplY3QpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hp
bGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVO
OwogCiAgICAgSlNPYmplY3QqIGdldHRlcigpIGNvbnN0IHsgcmV0dXJuIG1fZ2V0dGVyLmdldCgp
OyB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0hhc2hNYXBJbXBsLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9IYXNoTWFwSW1w
bC5jcHAJKHJldmlzaW9uIDI3MTc4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0hhc2hNYXBJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsOSBAQAogCiBuYW1l
c3BhY2UgSlNDIHsKIAorREVGSU5FX1RFTVBMQVRFX1ZJU0lUX0NISUxEUkVOKHRlbXBsYXRlPD4s
IEhhc2hNYXBCdWNrZXQ8SGFzaE1hcEJ1Y2tldERhdGFLZXk+KTsKK0RFRklORV9URU1QTEFURV9W
SVNJVF9DSElMRFJFTih0ZW1wbGF0ZTw+LCBIYXNoTWFwQnVja2V0PEhhc2hNYXBCdWNrZXREYXRh
S2V5VmFsdWU+KTsKKwogdGVtcGxhdGU8PgogY29uc3QgQ2xhc3NJbmZvIEhhc2hNYXBCdWNrZXQ8
SGFzaE1hcEJ1Y2tldERhdGFLZXk+OjpzX2luZm8gPQogICAgIHsgIkhhc2hNYXBCdWNrZXQiLCBu
dWxscHRyLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEhhc2hNYXBCdWNr
ZXQ8SGFzaE1hcEJ1Y2tldERhdGFLZXk+KSB9OwpAQCAtMzgsOCArNDEsOSBAQCB0ZW1wbGF0ZTw+
CiBjb25zdCBDbGFzc0luZm8gSGFzaE1hcEJ1Y2tldDxIYXNoTWFwQnVja2V0RGF0YUtleVZhbHVl
Pjo6c19pbmZvID0KICAgICB7ICJIYXNoTWFwQnVja2V0IiwgbnVsbHB0ciwgbnVsbHB0ciwgbnVs
bHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShIYXNoTWFwQnVja2V0PEhhc2hNYXBCdWNrZXREYXRh
S2V5VmFsdWU+KSB9OwogCi10ZW1wbGF0ZSA8dHlwZW5hbWUgRGF0YT4KLXZvaWQgSGFzaE1hcEJ1
Y2tldDxEYXRhPjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNp
dG9yKQordGVtcGxhdGU8dHlwZW5hbWUgRGF0YT4KK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+
Cit2b2lkIEhhc2hNYXBCdWNrZXQ8RGF0YT46OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2Vs
bCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBIYXNoTWFwQnVja2V0KiB0aGlzT2JqZWN0ID0g
anNDYXN0PEhhc2hNYXBCdWNrZXQqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVS
SVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC01Miw4ICs1Niw5IEBAIHZvaWQgSGFzaE1hcEJ1
Y2tldDxEYXRhPjo6dmlzaXRDaGlsZHJlbigKICAgICB2aXNpdG9yLmFwcGVuZFZhbHVlcyhiaXR3
aXNlX2Nhc3Q8V3JpdGVCYXJyaWVyPFVua25vd24+Kj4oJnRoaXNPYmplY3QtPm1fZGF0YSksIHNp
emVvZihEYXRhKSAvIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKTsKIH0KIAotdGVtcGxh
dGUgPHR5cGVuYW1lIEhhc2hNYXBCdWNrZXQ+Ci12b2lkIEhhc2hNYXBJbXBsPEhhc2hNYXBCdWNr
ZXQ+Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0
ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoTWFwQnVja2V0PgordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRv
cj4KK3ZvaWQgSGFzaE1hcEltcGw8SGFzaE1hcEJ1Y2tldD46OnZpc2l0Q2hpbGRyZW5JbXBsKEpT
Q2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBIYXNoTWFwSW1wbCogdGhpc09i
amVjdCA9IGpzQ2FzdDxIYXNoTWFwSW1wbCo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1Rf
SU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTY2LDYgKzcxLDggQEAgdm9pZCBIYXNo
TWFwSW1wbDxIYXNoTWFwQnVja2V0Pjo6dmlzaXRDaAogICAgICAgICB2aXNpdG9yLm1hcmtBdXhp
bGlhcnkoYnVmZmVyKTsKIH0KIAorREVGSU5FX1RFTVBMQVRFX1ZJU0lUX0NISUxEUkVOKHRlbXBs
YXRlPHR5cGVuYW1lIEhhc2hNYXBCdWNrZXQ+LCBIYXNoTWFwSW1wbDxIYXNoTWFwQnVja2V0Pik7
CisKIHRlbXBsYXRlIDx0eXBlbmFtZSBIYXNoTWFwQnVja2V0Pgogc2l6ZV90IEhhc2hNYXBJbXBs
PEhhc2hNYXBCdWNrZXQ+Ojplc3RpbWF0ZWRTaXplKEpTQ2VsbCogY2VsbCwgVk0mIHZtKQogewpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSGFzaE1hcEltcGwuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9IYXNoTWFwSW1wbC5oCShyZXZp
c2lvbiAyNzE3ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9IYXNoTWFwSW1w
bC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDgsNyArMTQ4LDcgQEAgcHVibGljOgogICAgICAgICBy
ZXR1cm4gbV9kYXRhLnZhbHVlLmdldCgpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0
Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1RFTVBMQVRFX1ZJ
U0lUX0NISUxEUkVOOwogCiAgICAgQUxXQVlTX0lOTElORSBIYXNoTWFwQnVja2V0KiBuZXh0KCkg
Y29uc3QgeyByZXR1cm4gbV9uZXh0LmdldCgpOyB9CiAgICAgQUxXQVlTX0lOTElORSBIYXNoTWFw
QnVja2V0KiBwcmV2KCkgY29uc3QgeyByZXR1cm4gbV9wcmV2LmdldCgpOyB9CkBAIC0zNjQsNyAr
MzY0LDcgQEAgY2xhc3MgSGFzaE1hcEltcGwgOiBwdWJsaWMgSlNOb25GaW5hbE9iagogcHVibGlj
OgogICAgIHVzaW5nIEJ1Y2tldFR5cGUgPSBIYXNoTWFwQnVja2V0VHlwZTsKIAotICAgIHN0YXRp
YyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJF
X1RFTVBMQVRFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgc3RhdGljIHNpemVfdCBlc3RpbWF0ZWRT
aXplKEpTQ2VsbCosIFZNJik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0ludGVybmFsRnVuY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0ludGVybmFsRnVuY3Rpb24uY3BwCShyZXZpc2lvbiAyNzE3ODYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRlcm5hbEZ1bmN0aW9uLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNjQsNyArNjQsOCBAQCB2b2lkIEludGVybmFsRnVuY3Rpb246OmZpbmlzaENyZWF0
aW9uKFZNCiAgICAgfQogfQogCi12b2lkIEludGVybmFsRnVuY3Rpb246OnZpc2l0Q2hpbGRyZW4o
SlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZp
c2l0b3I+Cit2b2lkIEludGVybmFsRnVuY3Rpb246OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCog
Y2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBJbnRlcm5hbEZ1bmN0aW9uKiB0aGlzT2Jq
ZWN0ID0ganNDYXN0PEludGVybmFsRnVuY3Rpb24qPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JK
RUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC03Myw2ICs3NCw4IEBAIHZvaWQg
SW50ZXJuYWxGdW5jdGlvbjo6dmlzaXRDaGlsZHJlbihKU0MKICAgICB2aXNpdG9yLmFwcGVuZCh0
aGlzT2JqZWN0LT5tX29yaWdpbmFsTmFtZSk7CiB9CiAKK0RFRklORV9FWFBPUlRfVklTSVRfQ0hJ
TERSRU4oSW50ZXJuYWxGdW5jdGlvbik7CisKIGNvbnN0IFN0cmluZyYgSW50ZXJuYWxGdW5jdGlv
bjo6bmFtZSgpCiB7CiAgICAgY29uc3QgU3RyaW5nJiBuYW1lID0gbV9vcmlnaW5hbE5hbWUtPnRy
eUdldFZhbHVlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRlcm5h
bEZ1bmN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SW50ZXJuYWxGdW5jdGlvbi5oCShyZXZpc2lvbiAyNzE3ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9JbnRlcm5hbEZ1bmN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDcg
KzQ2LDcgQEAgcHVibGljOgogCiAgICAgREVDTEFSRV9FWFBPUlRfSU5GTzsKIAotICAgIEpTX0VY
UE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0
b3ImKTsKKyAgICBERUNMQVJFX0VYUE9SVF9WSVNJVF9DSElMRFJFTjsKIAogICAgIEpTX0VYUE9S
VF9QUklWQVRFIGNvbnN0IFN0cmluZyYgbmFtZSgpOwogICAgIGNvbnN0IFN0cmluZyBkaXNwbGF5
TmFtZShWTSYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bENvbGxh
dG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRs
Q29sbGF0b3IuY3BwCShyZXZpc2lvbiAyNzE3ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9JbnRsQ29sbGF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NSw3ICs2NSw4IEBA
IHZvaWQgSW50bENvbGxhdG9yOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0KICAgICBBU1NFUlQoaW5o
ZXJpdHModm0sIGluZm8oKSkpOwogfQogCi12b2lkIEludGxDb2xsYXRvcjo6dmlzaXRDaGlsZHJl
bihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUg
VmlzaXRvcj4KK3ZvaWQgSW50bENvbGxhdG9yOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNl
bGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSW50bENvbGxhdG9yKiB0aGlzT2JqZWN0ID0g
anNDYXN0PEludGxDb2xsYXRvcio+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJ
VFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTc1LDYgKzc2LDggQEAgdm9pZCBJbnRsQ29sbGF0
b3I6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKgogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3Qt
Pm1fYm91bmRDb21wYXJlKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEludGxDb2xsYXRv
cik7CisKIFZlY3RvcjxTdHJpbmc+IEludGxDb2xsYXRvcjo6c29ydExvY2FsZURhdGEoY29uc3Qg
U3RyaW5nJiBsb2NhbGUsIFJlbGV2YW50RXh0ZW5zaW9uS2V5IGtleSkKIHsKICAgICAvLyA5LjEg
SW50ZXJuYWwgc2xvdHMgb2YgU2VydmljZSBDb25zdHJ1Y3RvcnMgJiAxMC4yLjMgSW50ZXJuYWwg
c2xvdHMgKEVDTUEtNDAyIDIuMCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0ludGxDb2xsYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0ludGxDb2xsYXRvci5oCShyZXZpc2lvbiAyNzE3ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9JbnRsQ29sbGF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtODAsNyArODAs
NyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIEludGxDb2xsYXRvcihWTSYsIFN0cnVjdHVyZSop
OwogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENo
aWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJF
TjsKIAogICAgIGJvb2wgdXBkYXRlQ2FuRG9BU0NJSVVDQURVQ0VUQ29tcGFyaXNvbigpIGNvbnN0
OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsRGF0ZVRpbWVGb3Jt
YXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxE
YXRlVGltZUZvcm1hdC5jcHAJKHJldmlzaW9uIDI3MTc4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0ludGxEYXRlVGltZUZvcm1hdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkw
LDcgKzkwLDggQEAgdm9pZCBJbnRsRGF0ZVRpbWVGb3JtYXQ6OmZpbmlzaENyZWF0aW9uKAogICAg
IEFTU0VSVChpbmhlcml0cyh2bSwgaW5mbygpKSk7CiB9CiAKLXZvaWQgSW50bERhdGVUaW1lRm9y
bWF0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0
ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBJbnRsRGF0ZVRpbWVGb3JtYXQ6OnZpc2l0
Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBJbnRs
RGF0ZVRpbWVGb3JtYXQqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SW50bERhdGVUaW1lRm9ybWF0Kj4o
Y2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkp
OwpAQCAtMTAwLDYgKzEwMSw4IEBAIHZvaWQgSW50bERhdGVUaW1lRm9ybWF0Ojp2aXNpdENoaWxk
cmVuKEoKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2JvdW5kRm9ybWF0KTsKIH0K
IAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEludGxEYXRlVGltZUZvcm1hdCk7CisKIHZvaWQgSW50
bERhdGVUaW1lRm9ybWF0OjpzZXRCb3VuZEZvcm1hdChWTSYgdm0sIEpTQm91bmRGdW5jdGlvbiog
Zm9ybWF0KQogewogICAgIG1fYm91bmRGb3JtYXQuc2V0KHZtLCB0aGlzLCBmb3JtYXQpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERhdGVUaW1lRm9ybWF0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERhdGVUaW1lRm9y
bWF0LmgJKHJldmlzaW9uIDI3MTc4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0ludGxEYXRlVGltZUZvcm1hdC5oCSh3b3JraW5nIGNvcHkpCkBAIC04NSw3ICs4NSw3IEBAIHB1
YmxpYzoKIHByaXZhdGU6CiAgICAgSW50bERhdGVUaW1lRm9ybWF0KFZNJiwgU3RydWN0dXJlKik7
CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOwotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hp
bGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVO
OwogCiAgICAgc3RhdGljIFZlY3RvcjxTdHJpbmc+IGxvY2FsZURhdGEoY29uc3QgU3RyaW5nJiwg
UmVsZXZhbnRFeHRlbnNpb25LZXkpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9JbnRsTG9jYWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9JbnRsTG9jYWxlLmNwcAkocmV2aXNpb24gMjcxNzg2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSW50bExvY2FsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU4LDcg
KzU4LDggQEAgdm9pZCBJbnRsTG9jYWxlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCiAgICAgQVNT
RVJUKGluaGVyaXRzKHZtLCBpbmZvKCkpKTsKIH0KIAotdm9pZCBJbnRsTG9jYWxlOjp2aXNpdENo
aWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBl
bmFtZSBWaXNpdG9yPgordm9pZCBJbnRsTG9jYWxlOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwq
IGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2Fz
dDxJbnRsTG9jYWxlKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlz
T2JqZWN0LCBpbmZvKCkpOwpAQCAtNjYsNiArNjcsOCBAQCB2b2lkIEludGxMb2NhbGU6OnZpc2l0
Q2hpbGRyZW4oSlNDZWxsKiBjCiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2
aXNpdG9yKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEludGxMb2NhbGUpOworCiBjbGFz
cyBMb2NhbGVJREJ1aWxkZXIgZmluYWwgewogcHVibGljOgogICAgIGJvb2wgaW5pdGlhbGl6ZShj
b25zdCBTdHJpbmcmKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxM
b2NhbGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRs
TG9jYWxlLmgJKHJldmlzaW9uIDI3MTc4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0ludGxMb2NhbGUuaAkod29ya2luZyBjb3B5KQpAQCAtNzEsNyArNzEsNyBAQCBwdWJsaWM6
CiBwcml2YXRlOgogICAgIEludGxMb2NhbGUoVk0mLCBTdHJ1Y3R1cmUqKTsKICAgICB2b2lkIGZp
bmlzaENyZWF0aW9uKFZNJik7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwq
LCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBTdHJp
bmcga2V5d29yZFZhbHVlKEFTQ0lJTGl0ZXJhbCwgYm9vbCBpc0Jvb2xlYW4gPSBmYWxzZSkgY29u
c3Q7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxOdW1iZXJGb3Jt
YXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxO
dW1iZXJGb3JtYXQuY3BwCShyZXZpc2lvbiAyNzE3ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9JbnRsTnVtYmVyRm9ybWF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzMsNyAr
NzMsOCBAQCB2b2lkIEludGxOdW1iZXJGb3JtYXQ6OmZpbmlzaENyZWF0aW9uKFZNCiAgICAgQVNT
RVJUKGluaGVyaXRzKHZtLCBpbmZvKCkpKTsKIH0KIAotdm9pZCBJbnRsTnVtYmVyRm9ybWF0Ojp2
aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0
ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBJbnRsTnVtYmVyRm9ybWF0Ojp2aXNpdENoaWxkcmVu
SW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSW50bE51bWJlckZv
cm1hdCogdGhpc09iamVjdCA9IGpzQ2FzdDxJbnRsTnVtYmVyRm9ybWF0Kj4oY2VsbCk7CiAgICAg
QVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtODMsNiAr
ODQsOCBAQCB2b2lkIEludGxOdW1iZXJGb3JtYXQ6OnZpc2l0Q2hpbGRyZW4oSlNDCiAgICAgdmlz
aXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9ib3VuZEZvcm1hdCk7CiB9CiAKK0RFRklORV9WSVNJ
VF9DSElMRFJFTihJbnRsTnVtYmVyRm9ybWF0KTsKKwogVmVjdG9yPFN0cmluZz4gSW50bE51bWJl
ckZvcm1hdDo6bG9jYWxlRGF0YShjb25zdCBTdHJpbmcmIGxvY2FsZSwgUmVsZXZhbnRFeHRlbnNp
b25LZXkga2V5KQogewogICAgIC8vIDkuMSBJbnRlcm5hbCBzbG90cyBvZiBTZXJ2aWNlIENvbnN0
cnVjdG9ycyAmIDExLjIuMyBJbnRlcm5hbCBzbG90cyAoRUNNQS00MDIgMi4wKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE51bWJlckZvcm1hdC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxOdW1iZXJGb3JtYXQuaAkocmV2
aXNpb24gMjcxNzg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE51bWJl
ckZvcm1hdC5oCSh3b3JraW5nIGNvcHkpCkBAIC05Niw3ICs5Niw3IEBAIHB1YmxpYzoKIHByaXZh
dGU6CiAgICAgSW50bE51bWJlckZvcm1hdChWTSYsIFN0cnVjdHVyZSopOwogICAgIHZvaWQgZmlu
aXNoQ3JlYXRpb24oVk0mKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCos
IFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIHN0YXRp
YyBWZWN0b3I8U3RyaW5nPiBsb2NhbGVEYXRhKGNvbnN0IFN0cmluZyYsIFJlbGV2YW50RXh0ZW5z
aW9uS2V5KTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFBsdXJh
bFJ1bGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9J
bnRsUGx1cmFsUnVsZXMuY3BwCShyZXZpc2lvbiAyNzE3ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9JbnRsUGx1cmFsUnVsZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MSw3
ICs2MSw4IEBAIHZvaWQgSW50bFBsdXJhbFJ1bGVzOjpmaW5pc2hDcmVhdGlvbihWTSYKICAgICBB
U1NFUlQoaW5oZXJpdHModm0sIGluZm8oKSkpOwogfQogCi12b2lkIEludGxQbHVyYWxSdWxlczo6
dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxh
dGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSW50bFBsdXJhbFJ1bGVzOjp2aXNpdENoaWxkcmVu
SW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSW50bFBsdXJhbFJ1
bGVzKiB0aGlzT2JqZWN0ID0ganNDYXN0PEludGxQbHVyYWxSdWxlcyo+KGNlbGwpOwogICAgIEFT
U0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTY5LDYgKzcw
LDggQEAgdm9pZCBJbnRsUGx1cmFsUnVsZXM6OnZpc2l0Q2hpbGRyZW4oSlNDZQogICAgIEJhc2U6
OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CiB9CiAKK0RFRklORV9WSVNJVF9D
SElMRFJFTihJbnRsUGx1cmFsUnVsZXMpOworCiBWZWN0b3I8U3RyaW5nPiBJbnRsUGx1cmFsUnVs
ZXM6OmxvY2FsZURhdGEoY29uc3QgU3RyaW5nJiwgUmVsZXZhbnRFeHRlbnNpb25LZXkpCiB7CiAg
ICAgcmV0dXJuIHsgfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxQ
bHVyYWxSdWxlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0ludGxQbHVyYWxSdWxlcy5oCShyZXZpc2lvbiAyNzE3ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9JbnRsUGx1cmFsUnVsZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNjYsNyAr
NjYsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIEludGxQbHVyYWxSdWxlcyhWTSYsIFN0cnVj
dHVyZSopOwogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKLSAgICBzdGF0aWMgdm9pZCB2
aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9D
SElMRFJFTjsKIAogICAgIHN0YXRpYyBWZWN0b3I8U3RyaW5nPiBsb2NhbGVEYXRhKGNvbnN0IFN0
cmluZyYsIFJlbGV2YW50RXh0ZW5zaW9uS2V5KTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSW50bFJlbGF0aXZlVGltZUZvcm1hdC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFJlbGF0aXZlVGltZUZvcm1hdC5jcHAJKHJl
dmlzaW9uIDI3MTc4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxSZWxh
dGl2ZVRpbWVGb3JtYXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Miw3ICs2Miw4IEBAIHZvaWQg
SW50bFJlbGF0aXZlVGltZUZvcm1hdDo6ZmluaXNoQ3JlYXQKICAgICBBU1NFUlQoaW5oZXJpdHMo
dm0sIGluZm8oKSkpOwogfQogCi12b2lkIEludGxSZWxhdGl2ZVRpbWVGb3JtYXQ6OnZpc2l0Q2hp
bGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVu
YW1lIFZpc2l0b3I+Cit2b2lkIEludGxSZWxhdGl2ZVRpbWVGb3JtYXQ6OnZpc2l0Q2hpbGRyZW5J
bXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBhdXRvKiB0aGlzT2Jq
ZWN0ID0ganNDYXN0PEludGxSZWxhdGl2ZVRpbWVGb3JtYXQqPihjZWxsKTsKICAgICBBU1NFUlRf
R0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC03MCw2ICs3MSw4IEBA
IHZvaWQgSW50bFJlbGF0aXZlVGltZUZvcm1hdDo6dmlzaXRDaGlsZHIKICAgICBCYXNlOjp2aXNp
dENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERS
RU4oSW50bFJlbGF0aXZlVGltZUZvcm1hdCk7CisKIFZlY3RvcjxTdHJpbmc+IEludGxSZWxhdGl2
ZVRpbWVGb3JtYXQ6OmxvY2FsZURhdGEoY29uc3QgU3RyaW5nJiBsb2NhbGUsIFJlbGV2YW50RXh0
ZW5zaW9uS2V5IGtleSkKIHsKICAgICBBU1NFUlRfVU5VU0VEKGtleSwga2V5ID09IFJlbGV2YW50
RXh0ZW5zaW9uS2V5OjpOdSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9J
bnRsUmVsYXRpdmVUaW1lRm9ybWF0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSW50bFJlbGF0aXZlVGltZUZvcm1hdC5oCShyZXZpc2lvbiAyNzE3ODYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsUmVsYXRpdmVUaW1lRm9ybWF0LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTY0LDcgKzY0LDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBJ
bnRsUmVsYXRpdmVUaW1lRm9ybWF0KFZNJiwgU3RydWN0dXJlKik7CiAgICAgdm9pZCBmaW5pc2hD
cmVhdGlvbihWTSYpOwotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xv
dFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgc3RhdGljIFZl
Y3RvcjxTdHJpbmc+IGxvY2FsZURhdGEoY29uc3QgU3RyaW5nJiwgUmVsZXZhbnRFeHRlbnNpb25L
ZXkpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsU2VnbWVudEl0
ZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9J
bnRsU2VnbWVudEl0ZXJhdG9yLmNwcAkocmV2aXNpb24gMjcxNzg2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSW50bFNlZ21lbnRJdGVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTY0LDEzICs2NCwxNiBAQCB2b2lkIEludGxTZWdtZW50SXRlcmF0b3I6OmZpbmlzaENyZWF0
aW9uCiAgICAgbV9zdHJpbmcuc2V0KHZtLCB0aGlzLCBzdHJpbmcpOwogfQogCi12b2lkIEludGxT
ZWdtZW50SXRlcmF0b3I6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYg
dmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEludGxTZWdtZW50SXRl
cmF0b3I6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikK
IHsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEludGxTZWdtZW50SXRlcmF0b3IqPihj
ZWxsKTsKICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwogICAg
IHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fc3RyaW5nKTsKIH0KIAorREVGSU5FX1ZJU0lU
X0NISUxEUkVOKEludGxTZWdtZW50SXRlcmF0b3IpOworCiBKU09iamVjdCogSW50bFNlZ21lbnRJ
dGVyYXRvcjo6bmV4dChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQogewogICAgIFZNJiB2
bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0ludGxTZWdtZW50SXRlcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9JbnRsU2VnbWVudEl0ZXJhdG9yLmgJKHJldmlzaW9uIDI3MTc4NikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxTZWdtZW50SXRlcmF0b3IuaAkod29y
a2luZyBjb3B5KQpAQCAtNTMsNyArNTMsNyBAQCBwdWJsaWM6CiAKICAgICBKU09iamVjdCogbmV4
dChKU0dsb2JhbE9iamVjdCopOwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0Nl
bGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKIHByaXZh
dGU6CiAgICAgSW50bFNlZ21lbnRJdGVyYXRvcihWTSYsIFN0cnVjdHVyZSosIHN0ZDo6dW5pcXVl
X3B0cjxVQnJlYWtJdGVyYXRvciwgVUJyZWFrSXRlcmF0b3JEZWxldGVyPiYmLCBCb3g8VmVjdG9y
PFVDaGFyPj4mJiwgSW50bFNlZ21lbnRlcjo6R3JhbnVsYXJpdHkpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFNlZ21lbnRzLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsU2VnbWVudHMuY3BwCShyZXZpc2lvbiAyNzE3
ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsU2VnbWVudHMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMDksMTEgKzEwOSwxNCBAQCBKU09iamVjdCogSW50bFNlZ21lbnRz
OjpjcmVhdGVTZWdtZW50SXRlCiAgICAgcmV0dXJuIEludGxTZWdtZW50SXRlcmF0b3I6OmNyZWF0
ZSh2bSwgZ2xvYmFsT2JqZWN0LT5zZWdtZW50SXRlcmF0b3JTdHJ1Y3R1cmUoKSwgV1RGTW92ZShz
ZWdtZW50ZXIpLCBtX2J1ZmZlciwgbV9zdHJpbmcuZ2V0KCksIG1fZ3JhbnVsYXJpdHkpOwogfQog
Ci12b2lkIEludGxTZWdtZW50czo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNp
dG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSW50bFNlZ21l
bnRzOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7
CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxJbnRsU2VnbWVudHMqPihjZWxsKTsKICAg
ICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwogICAgIHZpc2l0b3Iu
YXBwZW5kKHRoaXNPYmplY3QtPm1fc3RyaW5nKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVO
KEludGxTZWdtZW50cyk7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSW50bFNlZ21lbnRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFNlZ21lbnRzLmgJKHJldmlzaW9uIDI3MTc4NikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxTZWdtZW50cy5oCSh3b3JraW5nIGNv
cHkpCkBAIC01NCw3ICs1NCw3IEBAIHB1YmxpYzoKICAgICBKU1ZhbHVlIGNvbnRhaW5pbmcoSlNH
bG9iYWxPYmplY3QqLCBKU1ZhbHVlIGluZGV4VmFsdWUpOwogICAgIEpTT2JqZWN0KiBjcmVhdGVT
ZWdtZW50SXRlcmF0b3IoSlNHbG9iYWxPYmplY3QqKTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0
Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxE
UkVOOwogCiBwcml2YXRlOgogICAgIEludGxTZWdtZW50cyhWTSYsIFN0cnVjdHVyZSosIHN0ZDo6
dW5pcXVlX3B0cjxVQnJlYWtJdGVyYXRvciwgVUJyZWFrSXRlcmF0b3JEZWxldGVyPiYmLCBCb3g8
VmVjdG9yPFVDaGFyPj4mJiwgSW50bFNlZ21lbnRlcjo6R3JhbnVsYXJpdHkpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3LmNw
cAkocmV2aXNpb24gMjcxNzg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNB
cnJheUJ1ZmZlclZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTUsNyArMTU1LDggQEAgdm9p
ZCBKU0FycmF5QnVmZmVyVmlldzo6ZmluaXNoQ3JlYXRpb24oVgogICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CiB9CiAKLXZvaWQgSlNBcnJheUJ1ZmZlclZpZXc6OnZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1l
IFZpc2l0b3I+Cit2b2lkIEpTQXJyYXlCdWZmZXJWaWV3Ojp2aXNpdENoaWxkcmVuSW1wbChKU0Nl
bGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNBcnJheUJ1ZmZlclZpZXcqIHRo
aXNPYmplY3QgPSBqc0Nhc3Q8SlNBcnJheUJ1ZmZlclZpZXcqPihjZWxsKTsKICAgICBBU1NFUlRf
R0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC0xNjksNiArMTcwLDgg
QEAgdm9pZCBKU0FycmF5QnVmZmVyVmlldzo6dmlzaXRDaGlsZHJlbihKUwogICAgIH0KIH0KIAor
REVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTQXJyYXlCdWZmZXJWaWV3KTsKKwogYm9vbCBKU0FycmF5
QnVmZmVyVmlldzo6cHV0KAogICAgIEpTQ2VsbCogY2VsbCwgSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwKICAgICBQ
dXRQcm9wZXJ0eVNsb3QmIHNsb3QpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0FycmF5QnVmZmVyVmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3LmgJKHJldmlzaW9uIDI3MTc4NikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTE3Miw3ICsxNzIsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgCiAgICAgc3RhdGljIGJvb2wg
cHV0KEpTQ2VsbCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBQdXRQ
cm9wZXJ0eVNsb3QmKTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwg
U2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogICAgIAogcHVibGlj
OgogICAgIFR5cGVkQXJyYXlNb2RlIG1vZGUoKSBjb25zdCB7IHJldHVybiBtX21vZGU7IH0KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlJdGVyYXRvci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUl0ZXJhdG9y
LmNwcAkocmV2aXNpb24gMjcxNzg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNBcnJheUl0ZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjgsMTEgKzY4LDE0IEBAIHZv
aWQgSlNBcnJheUl0ZXJhdG9yOjpmaW5pc2hDcmVhdGlvbihWTSYKICAgICAgICAgQmFzZTo6aW50
ZXJuYWxGaWVsZChpbmRleCkuc2V0KHZtLCB0aGlzLCB2YWx1ZXNbaW5kZXhdKTsKIH0KIAotdm9p
ZCBKU0FycmF5SXRlcmF0b3I6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRv
ciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTQXJyYXlJdGVy
YXRvcjo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQog
ewogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNBcnJheUl0ZXJhdG9yKj4oY2VsbCk7
CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwogICAg
IEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CiB9CiAKK0RFRklORV9W
SVNJVF9DSElMRFJFTihKU0FycmF5SXRlcmF0b3IpOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlJdGVyYXRvci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlJdGVyYXRvci5o
CShyZXZpc2lvbiAyNzE3ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Fy
cmF5SXRlcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNzgsNyArNzgsNyBAQCBwdWJsaWM6CiAK
ICAgICBERUNMQVJFX0lORk87CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2Vs
bCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogcHJpdmF0
ZToKICAgICBKU0FycmF5SXRlcmF0b3IoVk0mLCBTdHJ1Y3R1cmUqKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXN5bmNHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXN5bmNHZW5lcmF0b3IuY3BwCShyZXZp
c2lvbiAyNzE3ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FzeW5jR2Vu
ZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTksMTEgKzU5LDE0IEBAIHZvaWQgSlNBc3lu
Y0dlbmVyYXRvcjo6ZmluaXNoQ3JlYXRpb24oVk0KICAgICAgICAgaW50ZXJuYWxGaWVsZChpbmRl
eCkuc2V0KHZtLCB0aGlzLCB2YWx1ZXNbaW5kZXhdKTsKIH0KIAotdm9pZCBKU0FzeW5jR2VuZXJh
dG9yOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0
ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0FzeW5jR2VuZXJhdG9yOjp2aXNpdENo
aWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0byog
dGhpc09iamVjdCA9IGpzQ2FzdDxKU0FzeW5jR2VuZXJhdG9yKj4oY2VsbCk7CiAgICAgQVNTRVJU
X0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwogICAgIEJhc2U6OnZpc2l0
Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJF
TihKU0FzeW5jR2VuZXJhdG9yKTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FzeW5jR2VuZXJhdG9yLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBc3luY0dlbmVyYXRvci5oCShyZXZpc2lv
biAyNzE3ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FzeW5jR2VuZXJh
dG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTk1LDcgKzk1LDcgQEAgcHVibGljOgogCiAgICAgREVD
TEFSRV9FWFBPUlRfSU5GTzsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiBwcml2YXRl
OgogICAgIEpTQXN5bmNHZW5lcmF0b3IoVk0mLCBTdHJ1Y3R1cmUqKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQmlnSW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JpZ0ludC5jcHAJKHJldmlzaW9uIDI3MTc4NikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQmlnSW50LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNjcsNyArNjcsOCBAQCBKU0JpZ0ludDo6SlNCaWdJbnQoVk0mIHZtLCBTdHJ1Y3R1cmUq
IHN0CiAgICAgLCBtX2RhdGEodm0sIHRoaXMsIGRhdGEsIGxlbmd0aCkKIHsgfQogCi12b2lkIEpT
QmlnSW50Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3Ip
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0JpZ0ludDo6dmlzaXRDaGlsZHJl
bkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGF1dG8qIHRoaXNP
YmplY3QgPSBqc0Nhc3Q8SlNCaWdJbnQqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lO
SEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC03Niw2ICs3Nyw4IEBAIHZvaWQgSlNCaWdJ
bnQ6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWwKICAgICAgICAgdmlzaXRvci5tYXJrQXV4aWxp
YXJ5KGRhdGEpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNCaWdJbnQpOworCiB2b2lk
IEpTQmlnSW50Ojppbml0aWFsaXplKEluaXRpYWxpemF0aW9uVHlwZSBpbml0VHlwZSkKIHsKICAg
ICBpZiAoaW5pdFR5cGUgPT0gSW5pdGlhbGl6YXRpb25UeXBlOjpXaXRoWmVybykKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQmlnSW50LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCaWdJbnQuaAkocmV2aXNpb24gMjcxNzg2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCaWdJbnQuaAkod29ya2luZyBjb3B5
KQpAQCAtNTAsNyArNTAsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25l
ZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgU3RydWN0dXJlSXNJbW1v
cnRhbCB8IE92ZXJyaWRlc1RvVGhpczsKICAgICBmcmllbmQgY2xhc3MgQ2FjaGVkQmlnSW50Owog
Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwor
ICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxs
VHlwZSwgU3Vic3BhY2VBY2Nlc3M+CiAgICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZv
cihWTSYgdm0pCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JvdW5kRnVu
Y3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
Qm91bmRGdW5jdGlvbi5jcHAJKHJldmlzaW9uIDI3MTc4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTQm91bmRGdW5jdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0OSw3
ICsyNDksOCBAQCB2b2lkIEpTQm91bmRGdW5jdGlvbjo6ZmluaXNoQ3JlYXRpb24oVk0mCiAgICAg
QVNTRVJUKGluaGVyaXRzKHZtLCBpbmZvKCkpKTsKIH0KIAotdm9pZCBKU0JvdW5kRnVuY3Rpb246
OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBs
YXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTQm91bmRGdW5jdGlvbjo6dmlzaXRDaGlsZHJl
bkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTQm91bmRGdW5j
dGlvbiogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0JvdW5kRnVuY3Rpb24qPihjZWxsKTsKICAgICBB
U1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC0yNjEsNCAr
MjYyLDYgQEAgdm9pZCBKU0JvdW5kRnVuY3Rpb246OnZpc2l0Q2hpbGRyZW4oSlNDZQogICAgIHZp
c2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fbmFtZU1heUJlTnVsbCk7CiB9CiAKK0RFRklORV9W
SVNJVF9DSElMRFJFTihKU0JvdW5kRnVuY3Rpb24pOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQm91bmRGdW5jdGlvbi5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQm91bmRGdW5jdGlvbi5o
CShyZXZpc2lvbiAyNzE3ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Jv
dW5kRnVuY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtODQsNyArODQsNyBAQCBwcml2YXRlOgog
ICAgIEpTQm91bmRGdW5jdGlvbihWTSYsIE5hdGl2ZUV4ZWN1dGFibGUqLCBKU0dsb2JhbE9iamVj
dCosIFN0cnVjdHVyZSosIEpTT2JqZWN0KiB0YXJnZXRGdW5jdGlvbiwgSlNWYWx1ZSBib3VuZFRo
aXMsIEpTSW1tdXRhYmxlQnV0dGVyZmx5KiBib3VuZEFyZ3MsIEpTU3RyaW5nKiBuYW1lTWF5QmVO
dWxsLCBkb3VibGUgbGVuZ3RoKTsKIAogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKLSAg
ICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAg
REVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIFdyaXRlQmFycmllcjxKU09iamVjdD4gbV90
YXJnZXRGdW5jdGlvbjsKICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4gbV9ib3VuZFRoaXM7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NhbGxlZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDYWxsZWUuY3BwCShyZXZpc2lv
biAyNzE3ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NhbGxlZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTUwLDcgKzUwLDggQEAgdm9pZCBKU0NhbGxlZTo6ZmluaXNoQ3Jl
YXRpb24oVk0mIHZtKQogICAgIEFTU0VSVChpbmhlcml0cyh2bSwgaW5mbygpKSk7CiB9CiAKLXZv
aWQgSlNDYWxsZWU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlz
aXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTQ2FsbGVlOjp2aXNpdENo
aWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNDYWxs
ZWUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNDYWxsZWUqPihjZWxsKTsKICAgICBBU1NFUlRfR0Nf
T0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC01OSw0ICs2MCw2IEBAIHZv
aWQgSlNDYWxsZWU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWwKICAgICB2aXNpdG9yLmFwcGVu
ZCh0aGlzT2JqZWN0LT5tX3Njb3BlKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTQ2Fs
bGVlKTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0NhbGxlZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTQ2FsbGVlLmgJKHJldmlzaW9uIDI3MTc4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTQ2FsbGVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMCw3ICsxMDAsNyBA
QCBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOwogICAgIHVzaW5nIEJh
c2U6OmZpbmlzaENyZWF0aW9uOwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0Nl
bGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKIHByaXZh
dGU6CiAgICAgZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCShyZXZpc2lvbiAyNzE3ODYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAkod29ya2luZyBjb3B5KQpAQCAtMSw3
ICsxLDcgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDEgSGFycmkgUG9ydGVuIChw
b3J0ZW5Aa2RlLm9yZykKICAqICBDb3B5cmlnaHQgKEMpIDIwMDEgUGV0ZXIgS2VsbHkgKHBta0Bw
b3N0LmNvbSkKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMjAgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTMyLDYgKzMyLDcgQEAK
ICNpbmNsdWRlICJKU0xvY2suaCIKICNpbmNsdWRlICJKU1R5cGVJbmZvLmgiCiAjaW5jbHVkZSAi
U2xvdFZpc2l0b3IuaCIKKyNpbmNsdWRlICJTbG90VmlzaXRvck1hY3Jvcy5oIgogI2luY2x1ZGUg
IlN1YnNwYWNlQWNjZXNzLmgiCiAjaW5jbHVkZSAiVHlwZWRBcnJheVR5cGUuaCIKICNpbmNsdWRl
ICJXcml0ZUJhcnJpZXIuaCIKQEAgLTE2Nyw4ICsxNjgsOCBAQCBwdWJsaWM6CiAgICAgc2l6ZV90
IGVzdGltYXRlZFNpemVJbkJ5dGVzKFZNJikgY29uc3Q7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUg
c3RhdGljIHNpemVfdCBlc3RpbWF0ZWRTaXplKEpTQ2VsbCosIFZNJik7CiAKLSAgICBzdGF0aWMg
dm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7Ci0gICAgc3RhdGljIHZv
aWQgdmlzaXRPdXRwdXRDb25zdHJhaW50cyhKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERF
Q0xBUkVfSU5MSU5FX1ZJU0lUX0NISUxEUkVOOworICAgIHN0YXRpYyB2b2lkIHZpc2l0T3V0cHV0
Q29uc3RyYWludHMoSlNDZWxsKiwgQWJzdHJhY3RTbG90VmlzaXRvciYpOwogCiAgICAgSlNfRVhQ
T1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgYW5hbHl6ZUhlYXAoSlNDZWxsKiwgSGVhcEFuYWx5emVy
Jik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbElubGluZXMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGxJbmxp
bmVzLmgJKHJldmlzaW9uIDI3MTc4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTQ2VsbElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMjUsNiArMjUsNyBAQAogCiAjcHJh
Z21hIG9uY2UKIAorI2luY2x1ZGUgIkFic3RyYWN0U2xvdFZpc2l0b3JJbmxpbmVzLmgiCiAjaW5j
bHVkZSAiQWxsb2NhdG9yRm9yTW9kZS5oIgogI2luY2x1ZGUgIkFsbG9jYXRvcklubGluZXMuaCIK
ICNpbmNsdWRlICJDb21wbGV0ZVN1YnNwYWNlSW5saW5lcy5oIgpAQCAtMTQxLDEyICsxNDIsMTUg
QEAgQUxXQVlTX0lOTElORSBTdHJ1Y3R1cmUqIEpTQ2VsbDo6c3RydWN0dQogICAgIHJldHVybiB2
bS5nZXRTdHJ1Y3R1cmUobV9zdHJ1Y3R1cmVJRCk7CiB9CiAKLWlubGluZSB2b2lkIEpTQ2VsbDo6
dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxh
dGU8dHlwZW5hbWUgVmlzaXRvcj4KK2lubGluZSB2b2lkIEpTQ2VsbDo6dmlzaXRDaGlsZHJlbklt
cGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHZpc2l0b3IuYXBwZW5k
VW5iYXJyaWVyZWQoY2VsbC0+c3RydWN0dXJlKHZpc2l0b3Iudm0oKSkpOwogfQogCi1pbmxpbmUg
dm9pZCBKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHMoSlNDZWxsKiwgU2xvdFZpc2l0b3Im
KQorREVGSU5FX0lOTElORV9WSVNJVF9DSElMRFJFTihKU0NlbGwpOworCitpbmxpbmUgdm9pZCBK
U0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHMoSlNDZWxsKiwgQWJzdHJhY3RTbG90VmlzaXRv
ciYpCiB7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ3VzdG9t
R2V0dGVyU2V0dGVyRnVuY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTQ3VzdG9tR2V0dGVyU2V0dGVyRnVuY3Rpb24uY3BwCShyZXZpc2lvbiAy
NzE3ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0N1c3RvbUdldHRlclNl
dHRlckZ1bmN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODUsNyArODUsOCBAQCBKU0N1c3Rv
bUdldHRlclNldHRlckZ1bmN0aW9uKiBKU0N1c3RvbUdlCiAgICAgcmV0dXJuIGZ1bmN0aW9uOwog
fQogCi12b2lkIEpTQ3VzdG9tR2V0dGVyU2V0dGVyRnVuY3Rpb246OnZpc2l0Q2hpbGRyZW4oSlND
ZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0
b3I+Cit2b2lkIEpTQ3VzdG9tR2V0dGVyU2V0dGVyRnVuY3Rpb246OnZpc2l0Q2hpbGRyZW5JbXBs
KEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU0N1c3RvbUdldHRlclNl
dHRlckZ1bmN0aW9uKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQ3VzdG9tR2V0dGVyU2V0dGVyRnVu
Y3Rpb24qPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3Qs
IGluZm8oKSk7CkBAIC05NCw2ICs5NSw4IEBAIHZvaWQgSlNDdXN0b21HZXR0ZXJTZXR0ZXJGdW5j
dGlvbjo6dmlzaXQKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2dldHRlclNldHRl
cik7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU0N1c3RvbUdldHRlclNldHRlckZ1bmN0
aW9uKTsKKwogdm9pZCBKU0N1c3RvbUdldHRlclNldHRlckZ1bmN0aW9uOjpmaW5pc2hDcmVhdGlv
bihWTSYgdm0sIE5hdGl2ZUV4ZWN1dGFibGUqIGV4ZWN1dGFibGUsIEN1c3RvbUdldHRlclNldHRl
ciogZ2V0dGVyU2V0dGVyLCBjb25zdCBTdHJpbmcmIG5hbWUpCiB7CiAgICAgQmFzZTo6ZmluaXNo
Q3JlYXRpb24odm0sIGV4ZWN1dGFibGUsIGlzU2V0dGVyKCksIG5hbWUpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbi5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ3VzdG9tR2V0dGVy
U2V0dGVyRnVuY3Rpb24uaAkocmV2aXNpb24gMjcxNzg2KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNDdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbi5oCSh3b3JraW5nIGNvcHkp
CkBAIC02Myw3ICs2Myw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgSlNDdXN0b21HZXR0ZXJT
ZXR0ZXJGdW5jdGlvbihWTSYsIE5hdGl2ZUV4ZWN1dGFibGUqLCBKU0dsb2JhbE9iamVjdCosIFN0
cnVjdHVyZSosIFR5cGUsIGNvbnN0IFByb3BlcnR5TmFtZSYpOwogICAgIHZvaWQgZmluaXNoQ3Jl
YXRpb24oVk0mLCBOYXRpdmVFeGVjdXRhYmxlKiwgQ3VzdG9tR2V0dGVyU2V0dGVyKiwgY29uc3Qg
U3RyaW5nJik7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90Vmlz
aXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBXcml0ZUJhcnJpZXI8
Q3VzdG9tR2V0dGVyU2V0dGVyPiBtX2dldHRlclNldHRlcjsKICAgICBUeXBlIG1fdHlwZTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRmluYWxpemF0aW9uUmVnaXN0cnku
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRmluYWxp
emF0aW9uUmVnaXN0cnkuY3BwCShyZXZpc2lvbiAyNzE3ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0ZpbmFsaXphdGlvblJlZ2lzdHJ5LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkpTRmluYWxp
emF0aW9uUmVnaXN0cnkuaCIKIAorI2luY2x1ZGUgIkFic3RyYWN0U2xvdFZpc2l0b3IuaCIKICNp
bmNsdWRlICJEZWZlcnJlZFdvcmtUaW1lci5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNp
bmNsdWRlICJKU0ludGVybmFsRmllbGRPYmplY3RJbXBsSW5saW5lcy5oIgpAQCAtNjAsNyArNjEs
OCBAQCB2b2lkIEpTRmluYWxpemF0aW9uUmVnaXN0cnk6OmZpbmlzaENyZWF0CiAgICAgZ2xvYmFs
T2JqZWN0LT5nbG9iYWxPYmplY3RNZXRob2RUYWJsZSgpLT5jdXJyZW50U2NyaXB0RXhlY3V0aW9u
T3duZXIoZ2xvYmFsT2JqZWN0KTsKIH0KIAotdm9pZCBKU0ZpbmFsaXphdGlvblJlZ2lzdHJ5Ojp2
aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0
ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0ZpbmFsaXphdGlvblJlZ2lzdHJ5Ojp2aXNpdENo
aWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgQmFzZTo6
dmlzaXRDaGlsZHJlbihjZWxsLCB2aXNpdG9yKTsKIApAQCAtODAsMTMgKzgyLDE1IEBAIHZvaWQg
SlNGaW5hbGl6YXRpb25SZWdpc3RyeTo6dmlzaXRDaGlsZHIKICAgICBmb3IgKGF1dG8mIGhvbGRp
bmdzIDogdGhpc09iamVjdC0+bV9ub1VucmVnaXN0cmF0aW9uRGVhZCkKICAgICAgICAgdmlzaXRv
ci5hcHBlbmQoaG9sZGluZ3MpOwogCi0gICAgc2l6ZV90IHRvdGFsQnVmZmVyU2l6ZXNJbkJ5dGVz
ID0gdGhpc09iamVjdC0+bV9kZWFkUmVnaXN0cmF0aW9ucy5jYXBhY2l0eSgpICogc2l6ZW9mKGRl
Y2x0eXBlKHRoaXNPYmplY3QtPm1fZGVhZFJlZ2lzdHJhdGlvbnMpOjpLZXlWYWx1ZVBhaXJUeXBl
KTsKLSAgICB0b3RhbEJ1ZmZlclNpemVzSW5CeXRlcyArPSB0aGlzT2JqZWN0LT5tX2xpdmVSZWdp
c3RyYXRpb25zLmNhcGFjaXR5KCkgKiBzaXplb2YoZGVjbHR5cGUodGhpc09iamVjdC0+bV9kZWFk
UmVnaXN0cmF0aW9ucyk6OktleVZhbHVlUGFpclR5cGUpOworICAgIHNpemVfdCB0b3RhbEJ1ZmZl
clNpemVzSW5CeXRlcyA9IHRoaXNPYmplY3QtPm1fZGVhZFJlZ2lzdHJhdGlvbnMuY2FwYWNpdHko
KSAqIHNpemVvZih0eXBlbmFtZSBkZWNsdHlwZSh0aGlzT2JqZWN0LT5tX2RlYWRSZWdpc3RyYXRp
b25zKTo6S2V5VmFsdWVQYWlyVHlwZSk7CisgICAgdG90YWxCdWZmZXJTaXplc0luQnl0ZXMgKz0g
dGhpc09iamVjdC0+bV9saXZlUmVnaXN0cmF0aW9ucy5jYXBhY2l0eSgpICogc2l6ZW9mKHR5cGVu
YW1lIGRlY2x0eXBlKHRoaXNPYmplY3QtPm1fZGVhZFJlZ2lzdHJhdGlvbnMpOjpLZXlWYWx1ZVBh
aXJUeXBlKTsKICAgICB0b3RhbEJ1ZmZlclNpemVzSW5CeXRlcyArPSB0aGlzT2JqZWN0LT5tX25v
VW5yZWdpc3RyYXRpb25MaXZlLmNhcGFjaXR5KCkgKiBzaXplb2YoZGVjbHR5cGUodGhpc09iamVj
dC0+bV9ub1VucmVnaXN0cmF0aW9uTGl2ZS50YWtlTGFzdCgpKSk7CiAgICAgdG90YWxCdWZmZXJT
aXplc0luQnl0ZXMgKz0gdGhpc09iamVjdC0+bV9ub1VucmVnaXN0cmF0aW9uRGVhZC5jYXBhY2l0
eSgpICogc2l6ZW9mKGRlY2x0eXBlKHRoaXNPYmplY3QtPm1fbm9VbnJlZ2lzdHJhdGlvbkxpdmUu
dGFrZUxhc3QoKSkpOwogICAgIHZpc2l0b3Iudm0oKS5oZWFwLnJlcG9ydEV4dHJhTWVtb3J5Vmlz
aXRlZCh0b3RhbEJ1ZmZlclNpemVzSW5CeXRlcyk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJF
TihKU0ZpbmFsaXphdGlvblJlZ2lzdHJ5KTsKKwogdm9pZCBKU0ZpbmFsaXphdGlvblJlZ2lzdHJ5
OjpkZXN0cm95KEpTQ2VsbCogdGFibGUpCiB7CiAgICAgc3RhdGljX2Nhc3Q8SlNGaW5hbGl6YXRp
b25SZWdpc3RyeSo+KHRhYmxlKS0+fkpTRmluYWxpemF0aW9uUmVnaXN0cnkoKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRmluYWxpemF0aW9uUmVnaXN0cnkuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ZpbmFsaXphdGlvblJl
Z2lzdHJ5LmgJKHJldmlzaW9uIDI3MTc4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTRmluYWxpemF0aW9uUmVnaXN0cnkuaAkod29ya2luZyBjb3B5KQpAQCAtNzAsNyArNzAs
NyBAQCBwdWJsaWM6CiAgICAgREVDTEFSRV9FWFBPUlRfSU5GTzsKIAogICAgIHZvaWQgZmluYWxp
emVVbmNvbmRpdGlvbmFsbHkoVk0mKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpT
Q2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKICAgICBz
dGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBu
ZWVkc0Rlc3RydWN0aW9uID0gdHJ1ZTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNGdW5jdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNGdW5jdGlvbi5jcHAJKHJldmlzaW9uIDI3MTc4NikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTIs
NyArMjUyLDggQEAgY29uc3QgU291cmNlQ29kZSogSlNGdW5jdGlvbjo6c291cmNlQ29kZQogICAg
IHJldHVybiAmanNFeGVjdXRhYmxlKCktPnNvdXJjZSgpOwogfQogICAgIAotdm9pZCBKU0Z1bmN0
aW9uOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0
ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0Z1bmN0aW9uOjp2aXNpdENoaWxkcmVu
SW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNGdW5jdGlvbiog
dGhpc09iamVjdCA9IGpzQ2FzdDxKU0Z1bmN0aW9uKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09C
SkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtMjYxLDYgKzI2Miw4IEBAIHZv
aWQgSlNGdW5jdGlvbjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGMKICAgICB2aXNpdG9yLmFwcGVu
ZFVuYmFycmllcmVkKGJpdHdpc2VfY2FzdDxKU0NlbGwqPihiaXR3aXNlX2Nhc3Q8dWludHB0cl90
Pih0aGlzT2JqZWN0LT5tX2V4ZWN1dGFibGVPclJhcmVEYXRhKSAmIH5yYXJlRGF0YVRhZykpOwog
fQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNGdW5jdGlvbik7CisKIENhbGxEYXRhIEpTRnVu
Y3Rpb246OmdldENhbGxEYXRhKEpTQ2VsbCogY2VsbCkKIHsKICAgICAvLyBLZWVwIHRoaXMgZnVu
Y3Rpb24gT0sgZm9yIGludm9jYXRpb24gZnJvbSBjb25jdXJyZW50IGNvbXBpbGVycy4KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmgJKHJldmlzaW9uIDI3
MTc4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uaAkod29y
a2luZyBjb3B5KQpAQCAtMTgwLDcgKzE4MCw3IEBAIHByb3RlY3RlZDoKIAogICAgIHN0YXRpYyBi
b29sIGRlbGV0ZVByb3BlcnR5KEpTQ2VsbCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1l
LCBEZWxldGVQcm9wZXJ0eVNsb3QmKTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4o
SlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiBw
cml2YXRlOgogICAgIHN0YXRpYyBKU0Z1bmN0aW9uKiBjcmVhdGVJbXBsKFZNJiB2bSwgRnVuY3Rp
b25FeGVjdXRhYmxlKiBleGVjdXRhYmxlLCBKU1Njb3BlKiBzY29wZSwgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyYXRvci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmF0
b3IuY3BwCShyZXZpc2lvbiAyNzE3ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0dlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU5LDExICs1OSwxNCBAQCB2b2lk
IEpTR2VuZXJhdG9yOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCiAgICAgICAgIGludGVybmFsRmll
bGQoaW5kZXgpLnNldCh2bSwgdGhpcywgdmFsdWVzW2luZGV4XSk7CiB9CiAKLXZvaWQgSlNHZW5l
cmF0b3I6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikK
K3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTR2VuZXJhdG9yOjp2aXNpdENoaWxk
cmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0byogdGhp
c09iamVjdCA9IGpzQ2FzdDxKU0dlbmVyYXRvcio+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpF
Q1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKICAgICBCYXNlOjp2aXNpdENoaWxkcmVu
KHRoaXNPYmplY3QsIHZpc2l0b3IpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNHZW5l
cmF0b3IpOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTR2VuZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNHZW5lcmF0b3IuaAkocmV2aXNpb24gMjcxNzg2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtOTQs
NyArOTQsNyBAQCBwdWJsaWM6CiAKICAgICBERUNMQVJFX0VYUE9SVF9JTkZPOwogCi0gICAgc3Rh
dGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xB
UkVfVklTSVRfQ0hJTERSRU47CiAKIHByaXZhdGU6CiAgICAgSlNHZW5lcmF0b3IoVk0mLCBTdHJ1
Y3R1cmUqKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5
cGVkQXJyYXlWaWV3LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXcuaAkocmV2aXNpb24gMjcxNzg2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXcuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzA3LDcgKzMwNyw3IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIHZvaWQgZ2V0
T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1l
QXJyYXkmLCBEb250RW51bVByb3BlcnRpZXNNb2RlKTsKIAogICAgIHN0YXRpYyBzaXplX3QgZXN0
aW1hdGVkU2l6ZShKU0NlbGwqLCBWTSYpOwotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4o
SlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1RFTVBMQVRFX1ZJU0lUX0NISUxE
UkVOOwogCiAgICAgLy8gUmV0dXJucyB0cnVlIGlmIHN1Y2Nlc3NmdWwsIGFuZCBmYWxzZSBvbiBl
cnJvcjsgaXQgd2lsbCB0aHJvdyBvbiBlcnJvci4KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPdGhl
ckFkYXB0b3I+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNU
eXBlZEFycmF5Vmlld0lubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaAkocmV2aXNpb24gMjcx
Nzg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJh
eVZpZXdJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5MSw3ICs0OTEsOCBAQCBzaXplX3Qg
SlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1l
IEFkYXB0b3I+Ci12b2lkIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+Ojp2aXNpdENo
aWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBl
bmFtZSBWaXNpdG9yPgordm9pZCBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6dmlz
aXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpT
R2VuZXJpY1R5cGVkQXJyYXlWaWV3KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTR2VuZXJpY1R5cGVk
QXJyYXlWaWV3Kj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2Jq
ZWN0LCBpbmZvKCkpOwpAQCAtNTI5LDQgKzUzMCw2IEBAIHZvaWQgSlNHZW5lcmljVHlwZWRBcnJh
eVZpZXc8QWRhcHRvcj46OnYKICAgICB9CiB9CiAKK0RFRklORV9URU1QTEFURV9WSVNJVF9DSElM
RFJFTih0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPiwgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8
QWRhcHRvcj4pOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAJKHJldmlzaW9uIDI3MTc4NikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTg5NSw3ICsxODk1LDggQEAgdm9pZCBKU0dsb2JhbE9iamVjdDo6cmVz
ZXRQcm90b3R5cGUoVk0mIAogICAgIHNldEdsb2JhbFRoaXModm0sIEpTUHJveHk6OmNyZWF0ZSh2
bSwgSlNQcm94eTo6Y3JlYXRlU3RydWN0dXJlKHZtLCB0aGlzLCBwcm90b3R5cGUsIFB1cmVGb3J3
YXJkaW5nUHJveHlUeXBlKSwgdGhpcykpOwogfQogCi12b2lkIEpTR2xvYmFsT2JqZWN0Ojp2aXNp
dENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0
eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0dsb2JhbE9iamVjdDo6dmlzaXRDaGlsZHJlbkltcGwo
SlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogeyAKICAgICBKU0dsb2JhbE9iamVjdCog
dGhpc09iamVjdCA9IGpzQ2FzdDxKU0dsb2JhbE9iamVjdCo+KGNlbGwpOwogICAgIEFTU0VSVF9H
Q19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTIwNjMsNiArMjA2NCw4
IEBAIHZvaWQgSlNHbG9iYWxPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWwKICAgICB0aGlzT2Jq
ZWN0LT5tX3JlZ0V4cEdsb2JhbERhdGEudmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7CiB9CiAKK0RF
RklORV9FWFBPUlRfVklTSVRfQ0hJTERSRU4oSlNHbG9iYWxPYmplY3QpOworCiBDYWxsRnJhbWUq
IEpTR2xvYmFsT2JqZWN0OjpkZXByZWNhdGVkQ2FsbEZyYW1lRm9yRGVidWdnZXIoKQogewogICAg
IHJldHVybiBDYWxsRnJhbWU6OmNyZWF0ZShtX2RlcHJlY2F0ZWRDYWxsRnJhbWVGb3JEZWJ1Z2dl
cik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2Jq
ZWN0LmgJKHJldmlzaW9uIDI3MTc4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTR2xvYmFsT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTYwOSw3ICs2MDksNyBAQCBwdWJs
aWM6CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgfkpTR2xvYmFsT2JqZWN0KCk7CiAgICAgSlNfRVhQ
T1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKIAotICAgIEpTX0VYUE9S
VF9QUklWQVRFIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3Im
KTsKKyAgICBERUNMQVJFX0VYUE9SVF9WSVNJVF9DSElMRFJFTjsKIAogICAgIEpTX0VYUE9SVF9Q
UklWQVRFIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU09iamVjdCosIEpTR2xvYmFs
T2JqZWN0KiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKICAgICBKU19FWFBPUlRfUFJJ
VkFURSBzdGF0aWMgYm9vbCBwdXQoSlNDZWxsKiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5h
bWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNJbW11dGFibGVCdXR0ZXJmbHkuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTSW1tdXRhYmxlQnV0dGVyZmx5LmNwcAkocmV2aXNp
b24gMjcxNzg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbW11dGFibGVC
dXR0ZXJmbHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw4IEBAIG5hbWVzcGFjZSBK
U0MgewogCiBjb25zdCBDbGFzc0luZm8gSlNJbW11dGFibGVCdXR0ZXJmbHk6OnNfaW5mbyA9IHsg
IkltbXV0YWJsZSBCdXR0ZXJmbHkiLCBudWxscHRyLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVf
TUVUSE9EX1RBQkxFKEpTSW1tdXRhYmxlQnV0dGVyZmx5KSB9OwogCi12b2lkIEpTSW1tdXRhYmxl
QnV0dGVyZmx5Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0
b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0ltbXV0YWJsZUJ1dHRlcmZs
eTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewog
ICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2VsbCwgaW5mbygpKTsKICAgICBCYXNlOjp2
aXNpdENoaWxkcmVuKGNlbGwsIHZpc2l0b3IpOwpAQCAtNDUsNiArNDYsOCBAQCB2b2lkIEpTSW1t
dXRhYmxlQnV0dGVyZmx5Ojp2aXNpdENoaWxkcmVuCiAgICAgdmlzaXRvci5hcHBlbmRWYWx1ZXNI
aWRkZW4oYnV0dGVyZmx5LT5jb250aWd1b3VzKCkuZGF0YSgpLCBidXR0ZXJmbHktPnB1YmxpY0xl
bmd0aCgpKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTSW1tdXRhYmxlQnV0dGVyZmx5
KTsKKwogdm9pZCBKU0ltbXV0YWJsZUJ1dHRlcmZseTo6Y29weVRvQXJndW1lbnRzKEpTR2xvYmFs
T2JqZWN0KiwgSlNWYWx1ZSogZmlyc3RFbGVtZW50RGVzdCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNp
Z25lZCBsZW5ndGgpCiB7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytp
KSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ltbXV0YWJsZUJ1dHRl
cmZseS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTSW1t
dXRhYmxlQnV0dGVyZmx5LmgJKHJldmlzaW9uIDI3MTc4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTSW1tdXRhYmxlQnV0dGVyZmx5LmgJKHdvcmtpbmcgY29weSkKQEAgLTE0
NSw3ICsxNDUsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBqc0RvdWJsZU51bWJlcih2YWx1
ZSk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90
VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICB2b2lkIGNvcHlU
b0FyZ3VtZW50cyhKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUqIGZpcnN0RWxlbWVudERlc3QsIHVu
c2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTSW50ZXJuYWxGaWVsZE9iamVjdEltcGwu
aAkocmV2aXNpb24gMjcxNzg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJ
bnRlcm5hbEZpZWxkT2JqZWN0SW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC02Niw3ICs2Niw3IEBA
IHB1YmxpYzoKICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mSW50ZXJuYWxGaWVsZCh1bnNp
Z25lZCBpbmRleCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTSW50ZXJuYWxGaWVsZE9iamVj
dEltcGwsIG1faW50ZXJuYWxGaWVsZHMpICsgaW5kZXggKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVu
a25vd24+KTsgfQogCiBwcm90ZWN0ZWQ6Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihK
U0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVEVNUExBVEVfVklTSVRfQ0hJTERS
RU47CiAKICAgICBKU0ludGVybmFsRmllbGRPYmplY3RJbXBsKFZNJiB2bSwgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUpCiAgICAgICAgIDogQmFzZSh2bSwgc3RydWN0dXJlKQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbElubGluZXMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ludGVybmFsRmll
bGRPYmplY3RJbXBsSW5saW5lcy5oCShyZXZpc2lvbiAyNzE3ODYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0ludGVybmFsRmllbGRPYmplY3RJbXBsSW5saW5lcy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMCw3ICszMCw4IEBACiBuYW1lc3BhY2UgSlNDIHsKIAogdGVtcGxhdGU8
dW5zaWduZWQgcGFzc2VkTnVtYmVyT2ZJbnRlcm5hbEZpZWxkcz4KLXZvaWQgSlNJbnRlcm5hbEZp
ZWxkT2JqZWN0SW1wbDxwYXNzZWROdW1iZXJPZkludGVybmFsRmllbGRzPjo6dmlzaXRDaGlsZHJl
bihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUg
VmlzaXRvcj4KK3ZvaWQgSlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbDxwYXNzZWROdW1iZXJPZklu
dGVybmFsRmllbGRzPjo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2
aXNpdG9yKQogewogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNJbnRlcm5hbEZpZWxk
T2JqZWN0SW1wbCo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09i
amVjdCwgaW5mbygpKTsKQEAgLTM4LDQgKzM5LDYgQEAgdm9pZCBKU0ludGVybmFsRmllbGRPYmpl
Y3RJbXBsPHBhc3NlZE51bQogICAgIHZpc2l0b3IuYXBwZW5kVmFsdWVzKHRoaXNPYmplY3QtPm1f
aW50ZXJuYWxGaWVsZHMsIG51bWJlck9mSW50ZXJuYWxGaWVsZHMpOwogfQogCitERUZJTkVfVEVN
UExBVEVfVklTSVRfQ0hJTERSRU4odGVtcGxhdGU8dW5zaWduZWQgcGFzc2VkTnVtYmVyT2ZJbnRl
cm5hbEZpZWxkcz4sIEpTSW50ZXJuYWxGaWVsZE9iamVjdEltcGw8cGFzc2VkTnVtYmVyT2ZJbnRl
cm5hbEZpZWxkcz4pOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTTGV4aWNhbEVudmlyb25tZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xleGljYWxFbnZpcm9ubWVudC5jcHAJKHJl
dmlzaW9uIDI3MTc4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTGV4aWNh
bEVudmlyb25tZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsOCBAQCBuYW1lc3Bh
Y2UgSlNDIHsKIAogY29uc3QgQ2xhc3NJbmZvIEpTTGV4aWNhbEVudmlyb25tZW50OjpzX2luZm8g
PSB7ICJKU0xleGljYWxFbnZpcm9ubWVudCIsICZCYXNlOjpzX2luZm8sIG51bGxwdHIsIG51bGxw
dHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNMZXhpY2FsRW52aXJvbm1lbnQpIH07CiAKLXZvaWQg
SlNMZXhpY2FsRW52aXJvbm1lbnQ6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90Vmlz
aXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTTGV4aWNh
bEVudmlyb25tZW50Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZp
c2l0b3IpCiB7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0xleGljYWxFbnZpcm9u
bWVudCo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwg
aW5mbygpKTsKQEAgLTQ0LDYgKzQ1LDggQEAgdm9pZCBKU0xleGljYWxFbnZpcm9ubWVudDo6dmlz
aXRDaGlsZHJlbgogICAgIHZpc2l0b3IuYXBwZW5kVmFsdWVzSGlkZGVuKHRoaXNPYmplY3QtPnZh
cmlhYmxlcygpLCB0aGlzT2JqZWN0LT5zeW1ib2xUYWJsZSgpLT5zY29wZVNpemUoKSk7CiB9CiAK
K0RFRklORV9WSVNJVF9DSElMRFJFTihKU0xleGljYWxFbnZpcm9ubWVudCk7CisKIHZvaWQgSlNM
ZXhpY2FsRW52aXJvbm1lbnQ6OmFuYWx5emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFuYWx5emVy
JiBhbmFseXplcikKIHsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTTGV4aWNhbEVu
dmlyb25tZW50Kj4oY2VsbCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0xleGljYWxFbnZpcm9ubWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTTGV4aWNhbEVudmlyb25tZW50LmgJKHJldmlzaW9uIDI3MTc4NikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTGV4aWNhbEVudmlyb25tZW50LmgJKHdvcmtp
bmcgY29weSkKQEAgLTEzNCw3ICsxMzQsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIH0KICAgICB9
CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7
CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKICAgICBzdGF0aWMgdm9pZCBhbmFseXplSGVh
cChKU0NlbGwqLCBIZWFwQW5hbHl6ZXImKTsKIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTTWFwSXRlcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTTWFwSXRlcmF0b3IuY3BwCShyZXZpc2lvbiAyNzE3ODYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01hcEl0ZXJhdG9yLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTcsMTMgKzU3LDE2IEBAIHZvaWQgSlNNYXBJdGVyYXRvcjo6ZmluaXNoQ3Jl
YXRpb24oVk0mIHYKICAgICAgICAgQmFzZTo6aW50ZXJuYWxGaWVsZChpbmRleCkuc2V0KHZtLCB0
aGlzLCB2YWx1ZXNbaW5kZXhdKTsKIH0KIAotdm9pZCBKU01hcEl0ZXJhdG9yOjp2aXNpdENoaWxk
cmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBWaXNpdG9yPgordm9pZCBKU01hcEl0ZXJhdG9yOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwq
IGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2Fz
dDxKU01hcEl0ZXJhdG9yKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0
aGlzT2JqZWN0LCBpbmZvKCkpOwogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwg
dmlzaXRvcik7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU01hcEl0ZXJhdG9yKTsKKwog
SlNWYWx1ZSBKU01hcEl0ZXJhdG9yOjpjcmVhdGVQYWlyKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEpTVmFsdWUga2V5LCBKU1ZhbHVlIHZhbHVlKQogewogICAgIE1hcmtlZEFyZ3VtZW50
QnVmZmVyIGFyZ3M7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01hcEl0
ZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNN
YXBJdGVyYXRvci5oCShyZXZpc2lvbiAyNzE3ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU01hcEl0ZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0Miw3ICsxNDIsNyBA
QCBwcml2YXRlOgogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0m
LCBKU01hcCosIEl0ZXJhdGlvbktpbmQpOwogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsK
ICAgICBKU1ZhbHVlIGNyZWF0ZVBhaXIoSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlLCBKU1ZhbHVl
KTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7
CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIH07CiBTVEFUSUNfQVNTRVJUX0lTX1RSSVZJ
QUxMWV9ERVNUUlVDVElCTEUoSlNNYXBJdGVyYXRvcik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlRW52aXJvbm1lbnQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlRW52aXJvbm1lbnQuY3BwCShyZXZp
c2lvbiAyNzE3ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZUVu
dmlyb25tZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjUsNyArNjUsOCBAQCB2b2lkIEpTTW9k
dWxlRW52aXJvbm1lbnQ6OmZpbmlzaENyZWF0aW9uCiAgICAgdGhpcy0+bW9kdWxlUmVjb3JkU2xv
dCgpLnNldCh2bSwgdGhpcywgbW9kdWxlUmVjb3JkKTsKIH0KIAotdm9pZCBKU01vZHVsZUVudmly
b25tZW50Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3Ip
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU01vZHVsZUVudmlyb25tZW50Ojp2
aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAg
SlNNb2R1bGVFbnZpcm9ubWVudCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU01vZHVsZUVudmlyb25t
ZW50Kj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBp
bmZvKCkpOwpAQCAtNzQsNiArNzUsOCBAQCB2b2lkIEpTTW9kdWxlRW52aXJvbm1lbnQ6OnZpc2l0
Q2hpbGRyZW4oCiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bW9kdWxlUmVjb3JkU2xv
dCgpKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTTW9kdWxlRW52aXJvbm1lbnQpOwor
CiBib29sIEpTTW9kdWxlRW52aXJvbm1lbnQ6OmdldE93blByb3BlcnR5U2xvdChKU09iamVjdCog
Y2VsbCwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5
TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQogewogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+
dm0oKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlRW52aXJv
bm1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01v
ZHVsZUVudmlyb25tZW50LmgJKHJldmlzaW9uIDI3MTc4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTTW9kdWxlRW52aXJvbm1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtODks
NyArODksNyBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gKmJpdHdpc2VfY2FzdDxXcml0ZUJh
cnJpZXJCYXNlPEFic3RyYWN0TW9kdWxlUmVjb3JkPio+KGJpdHdpc2VfY2FzdDxjaGFyKj4odGhp
cykgKyBvZmZzZXRPZk1vZHVsZVJlY29yZChzeW1ib2xUYWJsZSgpKSk7CiAgICAgfQogCi0gICAg
c3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERF
Q0xBUkVfVklTSVRfQ0hJTERSRU47CiB9OwogCiBpbmxpbmUgSlNNb2R1bGVFbnZpcm9ubWVudDo6
SlNNb2R1bGVFbnZpcm9ubWVudChWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU1Njb3Bl
KiBjdXJyZW50U2NvcGUsIFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSkKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlTmFtZXNwYWNlT2JqZWN0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZU5hbWVzcGFjZU9i
amVjdC5jcHAJKHJldmlzaW9uIDI3MTc4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTTW9kdWxlTmFtZXNwYWNlT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODUsNyAr
ODUsOCBAQCB2b2lkIEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0OjpkZXN0cm95KEpTCiAgICAgdGhp
c09iamVjdC0+SlNNb2R1bGVOYW1lc3BhY2VPYmplY3Q6On5KU01vZHVsZU5hbWVzcGFjZU9iamVj
dCgpOwogfQogCi12b2lkIEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpT
Q2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNp
dG9yPgordm9pZCBKU01vZHVsZU5hbWVzcGFjZU9iamVjdDo6dmlzaXRDaGlsZHJlbkltcGwoSlND
ZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTTW9kdWxlTmFtZXNwYWNlT2Jq
ZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0Kj4oY2VsbCk7
CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAt
OTgsNiArOTksOCBAQCB2b2lkIEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0Ojp2aXNpdENoaWxkCiAg
ICAgfQogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNNb2R1bGVOYW1lc3BhY2VPYmplY3Qp
OworCiBzdGF0aWMgSlNWYWx1ZSBnZXRWYWx1ZShKU01vZHVsZUVudmlyb25tZW50KiBlbnZpcm9u
bWVudCwgUHJvcGVydHlOYW1lIGxvY2FsTmFtZSwgU2NvcGVPZmZzZXQmIHNjb3BlT2Zmc2V0KQog
ewogICAgIFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSA9IGVudmlyb25tZW50LT5zeW1ib2xUYWJs
ZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVOYW1lc3Bh
Y2VPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U01vZHVsZU5hbWVzcGFjZU9iamVjdC5oCShyZXZpc2lvbiAyNzE3ODYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZU5hbWVzcGFjZU9iamVjdC5oCSh3b3JraW5nIGNv
cHkpCkBAIC03Miw3ICs3Miw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgSlNfRVhQT1JUX1BS
SVZBVEUgSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QoVk0mLCBTdHJ1Y3R1cmUqKTsKICAgICBKU19F
WFBPUlRfUFJJVkFURSB2b2lkIGZpbmlzaENyZWF0aW9uKEpTR2xvYmFsT2JqZWN0KiwgQWJzdHJh
Y3RNb2R1bGVSZWNvcmQqLCBWZWN0b3I8c3RkOjpwYWlyPElkZW50aWZpZXIsIEFic3RyYWN0TW9k
dWxlUmVjb3JkOjpSZXNvbHV0aW9uPj4mJik7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJl
bihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAg
ICAgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3RDb21tb24oSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0
eU5hbWUsIFByb3BlcnR5U2xvdCYpOwogCiAgICAgc3RydWN0IEV4cG9ydEVudHJ5IHsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlUmVjb3JkLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZVJlY29yZC5jcHAJ
KHJldmlzaW9uIDI3MTc4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9k
dWxlUmVjb3JkLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzAsNyArNzAsOCBAQCB2b2lkIEpTTW9k
dWxlUmVjb3JkOjpmaW5pc2hDcmVhdGlvbihKU0dsCiAgICAgQVNTRVJUKGluaGVyaXRzKHZtLCBp
bmZvKCkpKTsKIH0KIAotdm9pZCBKU01vZHVsZVJlY29yZDo6dmlzaXRDaGlsZHJlbihKU0NlbGwq
IGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4K
K3ZvaWQgSlNNb2R1bGVSZWNvcmQ6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlz
aXRvciYgdmlzaXRvcikKIHsKICAgICBKU01vZHVsZVJlY29yZCogdGhpc09iamVjdCA9IGpzQ2Fz
dDxKU01vZHVsZVJlY29yZCo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMo
dGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTc4LDYgKzc5LDggQEAgdm9pZCBKU01vZHVsZVJlY29y
ZDo6dmlzaXRDaGlsZHJlbihKU0NlbAogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1f
bW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNN
b2R1bGVSZWNvcmQpOworCiB2b2lkIEpTTW9kdWxlUmVjb3JkOjpsaW5rKEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgc2NyaXB0RmV0Y2hlcikKIHsKICAgICBWTSYgdm0gPSBn
bG9iYWxPYmplY3QtPnZtKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U01vZHVsZVJlY29yZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTTW9kdWxlUmVjb3JkLmgJKHJldmlzaW9uIDI3MTc4NikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlUmVjb3JkLmgJKHdvcmtpbmcgY29weSkKQEAgLTY2LDcg
KzY2LDcgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxPYmpl
Y3QqLCBWTSYpOwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90
VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICB2b2lkIGluc3Rh
bnRpYXRlRGVjbGFyYXRpb25zKEpTR2xvYmFsT2JqZWN0KiwgTW9kdWxlUHJvZ3JhbUV4ZWN1dGFi
bGUqLCBKU1ZhbHVlIHNjcmlwdEZldGNoZXIpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU05hdGl2ZVN0ZEZ1bmN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU05hdGl2ZVN0ZEZ1bmN0aW9uLmNwcAkocmV2aXNpb24g
MjcxNzg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNOYXRpdmVTdGRGdW5j
dGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDEzICs0MSwxNiBAQCBKU05hdGl2ZVN0ZEZ1
bmN0aW9uOjpKU05hdGl2ZVN0ZEZ1bmN0aW9uCiB7CiB9CiAKLXZvaWQgSlNOYXRpdmVTdGRGdW5j
dGlvbjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQor
dGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNOYXRpdmVTdGRGdW5jdGlvbjo6dmlz
aXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpT
TmF0aXZlU3RkRnVuY3Rpb24qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNOYXRpdmVTdGRGdW5jdGlv
bio+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5m
bygpKTsKICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwogfQog
CitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNOYXRpdmVTdGRGdW5jdGlvbik7CisKIHZvaWQgSlNO
YXRpdmVTdGRGdW5jdGlvbjo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBOYXRpdmVFeGVjdXRhYmxl
KiBleGVjdXRhYmxlLCB1bnNpZ25lZCBsZW5ndGgsIGNvbnN0IFN0cmluZyYgbmFtZSkKIHsKICAg
ICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSwgZXhlY3V0YWJsZSwgbGVuZ3RoLCBuYW1lKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTmF0aXZlU3RkRnVuY3Rpb24uaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU05hdGl2ZVN0ZEZ1
bmN0aW9uLmgJKHJldmlzaW9uIDI3MTc4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTTmF0aXZlU3RkRnVuY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtNjUsNyArNjUsNyBA
QCBwdWJsaWM6CiBwcml2YXRlOgogICAgIEpTTmF0aXZlU3RkRnVuY3Rpb24oVk0mLCBOYXRpdmVF
eGVjdXRhYmxlKiwgSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqLCBOYXRpdmVTdGRGdW5jdGlv
biYmKTsKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgTmF0aXZlRXhlY3V0YWJsZSosIHVu
c2lnbmVkIGxlbmd0aCwgY29uc3QgU3RyaW5nJiBuYW1lKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNp
dENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElM
RFJFTjsKIAogICAgIE5hdGl2ZVN0ZEZ1bmN0aW9uIG1fZnVuY3Rpb247CiB9OwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAkocmV2aXNpb24gMjcxNzg2
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC03Miw3ICs3Miw4IEBAIGNvbnN0IENsYXNzSW5mbyBKU09iamVjdDo6c19pbmZv
ID0geyAiT2IKIAogY29uc3QgQ2xhc3NJbmZvIEpTRmluYWxPYmplY3Q6OnNfaW5mbyA9IHsgIk9i
amVjdCIsICZCYXNlOjpzX2luZm8sIG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFC
TEUoSlNGaW5hbE9iamVjdCkgfTsKIAotQUxXQVlTX0lOTElORSB2b2lkIEpTT2JqZWN0OjptYXJr
QXV4aWxpYXJ5QW5kVmlzaXRPdXRPZkxpbmVQcm9wZXJ0aWVzKFNsb3RWaXNpdG9yJiB2aXNpdG9y
LCBCdXR0ZXJmbHkqIGJ1dHRlcmZseSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFByb3BlcnR5T2Zm
c2V0IG1heE9mZnNldCkKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+CitBTFdBWVNfSU5MSU5F
IHZvaWQgSlNPYmplY3Q6Om1hcmtBdXhpbGlhcnlBbmRWaXNpdE91dE9mTGluZVByb3BlcnRpZXMo
VmlzaXRvciYgdmlzaXRvciwgQnV0dGVyZmx5KiBidXR0ZXJmbHksIFN0cnVjdHVyZSogc3RydWN0
dXJlLCBQcm9wZXJ0eU9mZnNldCBtYXhPZmZzZXQpCiB7CiAgICAgLy8gV2UgY2FsbCB0aGlzIHdo
ZW4gd2UgZm91bmQgZXZlcnl0aGluZyB3aXRob3V0IHJhY2VzLgogICAgIEFTU0VSVChzdHJ1Y3R1
cmUpOwpAQCAtMTAzLDcgKzEwNCw4IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKU09iamVjdDo6bWFy
a0F1eGlsaWEKICAgICB2aXNpdG9yLmFwcGVuZFZhbHVlc0hpZGRlbihidXR0ZXJmbHktPnByb3Bl
cnR5U3RvcmFnZSgpIC0gb3V0T2ZMaW5lU2l6ZSwgb3V0T2ZMaW5lU2l6ZSk7CiB9CiAKLUFMV0FZ
U19JTkxJTkUgU3RydWN0dXJlKiBKU09iamVjdDo6dmlzaXRCdXR0ZXJmbHkoU2xvdFZpc2l0b3Im
IHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgorQUxXQVlTX0lOTElORSBTdHJ1
Y3R1cmUqIEpTT2JqZWN0Ojp2aXNpdEJ1dHRlcmZseShWaXNpdG9yJiB2aXNpdG9yKQogewogICAg
IHN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCByYWNlUmVhc29uID0gIkpTT2JqZWN0Ojp2aXNpdEJ1
dHRlcmZseSI7CiAgICAgU3RydWN0dXJlKiByZXN1bHQgPSB2aXNpdEJ1dHRlcmZseUltcGwodmlz
aXRvcik7CkBAIC0xMTIsNyArMTE0LDggQEAgQUxXQVlTX0lOTElORSBTdHJ1Y3R1cmUqIEpTT2Jq
ZWN0Ojp2aXNpdAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUFMV0FZU19JTkxJTkUgU3RydWN0
dXJlKiBKU09iamVjdDo6dmlzaXRCdXR0ZXJmbHlJbXBsKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQor
dGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK0FMV0FZU19JTkxJTkUgU3RydWN0dXJlKiBKU09i
amVjdDo6dmlzaXRCdXR0ZXJmbHlJbXBsKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgVk0mIHZt
ID0gdmlzaXRvci52bSgpOwogICAgIApAQCAtNDEyLDI0ICs0MTUsMjAgQEAgc2l6ZV90IEpTT2Jq
ZWN0Ojplc3RpbWF0ZWRTaXplKEpTQ2VsbCogYwogICAgIHJldHVybiBCYXNlOjplc3RpbWF0ZWRT
aXplKGNlbGwsIHZtKSArIGJ1dHRlcmZseU91dE9mTGluZVNpemU7CiB9CiAKLXZvaWQgSlNPYmpl
Y3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3Rl
bXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTT2JqZWN0Ojp2aXNpdENoaWxkcmVuSW1w
bChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNPYmplY3QqIHRoaXNP
YmplY3QgPSBqc0Nhc3Q8SlNPYmplY3QqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lO
SEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7Ci0jaWYgQVNTRVJUX0VOQUJMRUQKLSAgICBib29s
IHdhc0NoZWNraW5nRm9yRGVmYXVsdE1hcmtWaW9sYXRpb24gPSB2aXNpdG9yLm1faXNDaGVja2lu
Z0ZvckRlZmF1bHRNYXJrVmlvbGF0aW9uOwotICAgIHZpc2l0b3IubV9pc0NoZWNraW5nRm9yRGVm
YXVsdE1hcmtWaW9sYXRpb24gPSBmYWxzZTsKLSNlbmRpZgotICAgIAorICAgIHR5cGVuYW1lIFZp
c2l0b3I6OkRlZmF1bHRNYXJraW5nVmlvbGF0aW9uQXNzZXJ0aW9uU2NvcGUgYXNzZXJ0aW9uU2Nv
cGUodmlzaXRvcik7CisKICAgICBKU0NlbGw6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlz
aXRvcik7Ci0gICAgCisKICAgICB0aGlzT2JqZWN0LT52aXNpdEJ1dHRlcmZseSh2aXNpdG9yKTsK
LSAgICAKLSNpZiBBU1NFUlRfRU5BQkxFRAotICAgIHZpc2l0b3IubV9pc0NoZWNraW5nRm9yRGVm
YXVsdE1hcmtWaW9sYXRpb24gPSB3YXNDaGVja2luZ0ZvckRlZmF1bHRNYXJrVmlvbGF0aW9uOwot
I2VuZGlmCiB9CiAKK0RFRklORV9FWFBPUlRfVklTSVRfQ0hJTERSRU4oSlNPYmplY3QpOworCiB2
b2lkIEpTT2JqZWN0OjphbmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5h
bHl6ZXIpCiB7CiAgICAgSlNPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNPYmplY3QqPihj
ZWxsKTsKQEAgLTQ2OCwxNCArNDY3LDEyIEBAIHZvaWQgSlNPYmplY3Q6OmFuYWx5emVIZWFwKEpT
Q2VsbCogY2VsbCwKICAgICB9CiB9CiAKLXZvaWQgSlNGaW5hbE9iamVjdDo6dmlzaXRDaGlsZHJl
bihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUg
VmlzaXRvcj4KK3ZvaWQgSlNGaW5hbE9iamVjdDo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBj
ZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTRmluYWxPYmplY3QqIHRoaXNPYmplY3Qg
PSBqc0Nhc3Q8SlNGaW5hbE9iamVjdCo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5I
RVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKLSNpZiBBU1NFUlRfRU5BQkxFRAotICAgIGJvb2wg
d2FzQ2hlY2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlvbiA9IHZpc2l0b3IubV9pc0NoZWNraW5n
Rm9yRGVmYXVsdE1hcmtWaW9sYXRpb247Ci0gICAgdmlzaXRvci5tX2lzQ2hlY2tpbmdGb3JEZWZh
dWx0TWFya1Zpb2xhdGlvbiA9IGZhbHNlOwotI2VuZGlmCisgICAgdHlwZW5hbWUgVmlzaXRvcjo6
RGVmYXVsdE1hcmtpbmdWaW9sYXRpb25Bc3NlcnRpb25TY29wZSBhc3NlcnRpb25TY29wZSh2aXNp
dG9yKTsKICAgICAKICAgICBKU0NlbGw6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRv
cik7CiAgICAgCkBAIC00ODMsMTIgKzQ4MCwxMCBAQCB2b2lkIEpTRmluYWxPYmplY3Q6OnZpc2l0
Q2hpbGRyZW4oSlNDZWxsCiAgICAgICAgIGlmICh1bnNpZ25lZCBzdG9yYWdlU2l6ZSA9IHN0cnVj
dHVyZS0+aW5saW5lU2l6ZSgpKQogICAgICAgICAgICAgdmlzaXRvci5hcHBlbmRWYWx1ZXNIaWRk
ZW4odGhpc09iamVjdC0+aW5saW5lU3RvcmFnZSgpLCBzdG9yYWdlU2l6ZSk7CiAgICAgfQotICAg
IAotI2lmIEFTU0VSVF9FTkFCTEVECi0gICAgdmlzaXRvci5tX2lzQ2hlY2tpbmdGb3JEZWZhdWx0
TWFya1Zpb2xhdGlvbiA9IHdhc0NoZWNraW5nRm9yRGVmYXVsdE1hcmtWaW9sYXRpb247Ci0jZW5k
aWYKIH0KIAorREVGSU5FX0VYUE9SVF9WSVNJVF9DSElMRFJFTihKU0ZpbmFsT2JqZWN0KTsKKwog
U3RyaW5nIEpTT2JqZWN0OjpjbGFzc05hbWUoY29uc3QgSlNPYmplY3QqIG9iamVjdCwgVk0mIHZt
KQogewogICAgIGNvbnN0IENsYXNzSW5mbyogaW5mbyA9IG9iamVjdC0+Y2xhc3NJbmZvKHZtKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAkocmV2aXNpb24g
MjcxNzg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAkod29y
a2luZyBjb3B5KQpAQCAtMTA4LDggKzEwOCw5IEBAIGNsYXNzIEpTT2JqZWN0IDogcHVibGljIEpT
Q2VsbCB7CiBwdWJsaWM6CiAgICAgdXNpbmcgQmFzZSA9IEpTQ2VsbDsKIAorICAgIERFQ0xBUkVf
RVhQT1JUX1ZJU0lUX0NISUxEUkVOOworCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHNp
emVfdCBlc3RpbWF0ZWRTaXplKEpTQ2VsbCosIFZNJik7Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUg
c3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwogICAgIEpT
X0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGFuYWx5emVIZWFwKEpTQ2VsbCosIEhlYXBBbmFs
eXplciYpOwogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFN0cmluZyBjbGFzc05hbWUo
Y29uc3QgSlNPYmplY3QqLCBWTSYpOwpAQCAtOTgwLDExICs5ODEsMTEgQEAgcHJvdGVjdGVkOgog
ICAgIEpTT2JqZWN0KFZNJiwgU3RydWN0dXJlKiwgQnV0dGVyZmx5KiA9IG51bGxwdHIpOwogICAg
IAogICAgIC8vIFZpc2l0cyB0aGUgYnV0dGVyZmx5IHVubGVzcyB0aGVyZSBpcyBhIHJhY2UuIFJl
dHVybnMgdGhlIHN0cnVjdHVyZSBpZiB0aGVyZSB3YXMgbm8gcmFjZS4KLSAgICBTdHJ1Y3R1cmUq
IHZpc2l0QnV0dGVyZmx5KFNsb3RWaXNpdG9yJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlz
aXRvcj4gU3RydWN0dXJlKiB2aXNpdEJ1dHRlcmZseShWaXNpdG9yJik7CiAgICAgCi0gICAgU3Ry
dWN0dXJlKiB2aXNpdEJ1dHRlcmZseUltcGwoU2xvdFZpc2l0b3ImKTsKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBWaXNpdG9yPiBTdHJ1Y3R1cmUqIHZpc2l0QnV0dGVyZmx5SW1wbChWaXNpdG9yJik7
CiAgICAgCi0gICAgdm9pZCBtYXJrQXV4aWxpYXJ5QW5kVmlzaXRPdXRPZkxpbmVQcm9wZXJ0aWVz
KFNsb3RWaXNpdG9yJiwgQnV0dGVyZmx5KiwgU3RydWN0dXJlKiwgUHJvcGVydHlPZmZzZXQgbWF4
T2Zmc2V0KTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIG1hcmtBdXhpbGlh
cnlBbmRWaXNpdE91dE9mTGluZVByb3BlcnRpZXMoVmlzaXRvciYsIEJ1dHRlcmZseSosIFN0cnVj
dHVyZSosIFByb3BlcnR5T2Zmc2V0IG1heE9mZnNldCk7CiAKICAgICAvLyBDYWxsIHRoaXMgaWYg
eW91IGtub3cgdGhhdCB0aGUgb2JqZWN0IGlzIGluIGEgbW9kZSB3aGVyZSBpdCBoYXMgYXJyYXkK
ICAgICAvLyBzdG9yYWdlLiBUaGlzIHdpbGwgYXNzZXJ0IG90aGVyd2lzZS4KQEAgLTExNzIsOCAr
MTE3Myw2IEBAIHByb3RlY3RlZDoKICAgICB9CiB9OwogCi1jbGFzcyBKU0ZpbmFsT2JqZWN0Owot
CiAvLyBKU0ZpbmFsT2JqZWN0IGlzIGEgdHlwZSBvZiBKU09iamVjdCB0aGF0IGNvbnRhaW5zIHN1
ZmZpY2llbnQgaW50ZXJuYWwKIC8vIHN0b3JhZ2UgdG8gZnVsbHkgbWFrZSB1c2Ugb2YgdGhlIGNv
bGxlY3RvciBjZWxsIGNvbnRhaW5pbmcgaXQuCiBjbGFzcyBKU0ZpbmFsT2JqZWN0IGZpbmFsIDog
cHVibGljIEpTT2JqZWN0IHsKQEAgLTEyMTIsMTUgKzEyMTEsMTMgQEAgcHVibGljOgogICAgICAg
ICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCB0
eXBlSW5mbygpLCBpbmZvKCksIGRlZmF1bHRJbmRleGluZ1R5cGUsIGlubGluZUNhcGFjaXR5KTsK
ICAgICB9CiAKLSAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVu
KEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9FWFBPUlRfVklTSVRfQ0hJTERS
RU47CiAKICAgICBERUNMQVJFX0VYUE9SVF9JTkZPOwogCiBwcml2YXRlOgogICAgIGZyaWVuZCBj
bGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CiAKLSAgICB2b2lkIHZpc2l0Q2hpbGRyZW5Db21t
b24oU2xvdFZpc2l0b3ImKTsKLQogICAgIGV4cGxpY2l0IEpTRmluYWxPYmplY3QoVk0mIHZtLCBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSwgQnV0dGVyZmx5KiBidXR0ZXJmbHkpCiAgICAgICAgIDogSlNP
YmplY3Qodm0sIHN0cnVjdHVyZSwgYnV0dGVyZmx5KQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvbWlzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9taXNlLmNwcAkocmV2aXNpb24gMjcxNzg2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9taXNlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNjcsMTMgKzY3LDE2IEBAIHZvaWQgSlNQcm9taXNlOjpmaW5pc2hDcmVhdGlvbihWTSYg
dm0pCiAgICAgICAgIEJhc2U6OmludGVybmFsRmllbGQoaW5kZXgpLnNldCh2bSwgdGhpcywgdmFs
dWVzW2luZGV4XSk7CiB9CiAKLXZvaWQgSlNQcm9taXNlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCog
Y2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgor
dm9pZCBKU1Byb21pc2U6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYg
dmlzaXRvcikKIHsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTUHJvbWlzZSo+KGNl
bGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsK
ICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwogfQogCitERUZJ
TkVfVklTSVRfQ0hJTERSRU4oSlNQcm9taXNlKTsKKwogYXV0byBKU1Byb21pc2U6OnN0YXR1cyhW
TSYpIGNvbnN0IC0+IFN0YXR1cwogewogICAgIEpTVmFsdWUgdmFsdWUgPSBpbnRlcm5hbEZpZWxk
KEZpZWxkOjpGbGFncykuZ2V0KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU1Byb21pc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU1Byb21pc2UuaAkocmV2aXNpb24gMjcxNzg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNQcm9taXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTk1LDcgKzk1LDcgQEAgcHVi
bGljOgogICAgIH07CiAgICAgc3RhdGljIERlZmVycmVkRGF0YSBjcmVhdGVEZWZlcnJlZERhdGEo
SlNHbG9iYWxPYmplY3QqLCBKU1Byb21pc2VDb25zdHJ1Y3RvciopOwogCi0gICAgc3RhdGljIHZv
aWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklT
SVRfQ0hJTERSRU47CiAKIHByb3RlY3RlZDoKICAgICBKU1Byb21pc2UoVk0mLCBTdHJ1Y3R1cmUq
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVydHlOYW1lRW51
bWVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmNwcAkocmV2aXNpb24gMjcxNzg2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNzAsNyArNzAsOCBAQCB2b2lkIEpTUHJvcGVydHlOYW1lRW51bWVyYXRv
cjo6ZmluaXNoQ3JlCiAgICAgfQogfQogCi12b2lkIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6
dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxh
dGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjp2aXNp
dENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNQ
cm9wZXJ0eU5hbWVFbnVtZXJhdG9yKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTUHJvcGVydHlOYW1l
RW51bWVyYXRvcio+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09i
amVjdCwgaW5mbygpKTsKQEAgLTg3LDYgKzg4LDggQEAgdm9pZCBKU1Byb3BlcnR5TmFtZUVudW1l
cmF0b3I6OnZpc2l0Q2hpbAogICAgIH0KIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTUHJv
cGVydHlOYW1lRW51bWVyYXRvcik7CisKIC8vIEZJWE1FOiBBc3NlcnQgdGhhdCBwcm9wZXJ0aWVz
IHJldHVybmVkIGJ5IGdldE93blByb3BlcnR5TmFtZXMoKSBhcmUgcmVwb3J0ZWQgZW51bWVyYWJs
ZSBieSBnZXRPd25Qcm9wZXJ0eVNsb3QoKS4KIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yMTk5MjYKIHZvaWQgZ2V0RW51bWVyYWJsZVByb3BlcnR5TmFtZXMoSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNPYmplY3QqIGJhc2UsIFByb3BlcnR5TmFtZUFy
cmF5JiBwcm9wZXJ0eU5hbWVzLCB1aW50MzJfdCYgaW5kZXhlZExlbmd0aCwgdWludDMyX3QmIHN0
cnVjdHVyZVByb3BlcnR5Q291bnQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaAkocmV2aXNpb24gMjcx
Nzg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVFbnVt
ZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTg0LDcgKzg0LDcgQEAgcHVibGljOgogICAgICAg
ICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvciwgbV9wcm9w
ZXJ0eU5hbWVzKTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2Vs
bCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogcHJpdmF0
ZToKICAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm94eS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm94eS5jcHAJKHJldmlzaW9uIDI3MTc4NikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJveHkuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zNSw3ICszNSw4IEBAIFNUQVRJQ19BU1NFUlRfSVNfVFJJVklBTExZX0RFU1RSVUNUSUJM
RSgKIAogY29uc3QgQ2xhc3NJbmZvIEpTUHJveHk6OnNfaW5mbyA9IHsgIkpTUHJveHkiLCAmQmFz
ZTo6c19pbmZvLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTUHJveHkp
IH07CiAKLXZvaWQgSlNQcm94eTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNp
dG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNQcm94eTo6
dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAg
IEpTUHJveHkqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNQcm94eSo+KGNlbGwpOwogICAgIEFTU0VS
VF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTQzLDYgKzQ0LDgg
QEAgdm9pZCBKU1Byb3h5Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbAogICAgIHZpc2l0b3Iu
YXBwZW5kKHRoaXNPYmplY3QtPm1fdGFyZ2V0KTsKIH0KIAorREVGSU5FX0VYUE9SVF9WSVNJVF9D
SElMRFJFTihKU1Byb3h5KTsKKwogdm9pZCBKU1Byb3h5OjpzZXRUYXJnZXQoVk0mIHZtLCBKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQogewogICAgIG1fdGFyZ2V0LnNldCh2bSwgdGhpcywg
Z2xvYmFsT2JqZWN0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJv
eHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3h5
LmgJKHJldmlzaW9uIDI3MTc4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
UHJveHkuaAkod29ya2luZyBjb3B5KQpAQCAtODUsNyArODUsNyBAQCBwcm90ZWN0ZWQ6CiAgICAg
ICAgIG1fdGFyZ2V0LnNldCh2bSwgdGhpcywgdGFyZ2V0KTsKICAgICB9CiAKLSAgICBKU19FWFBP
UlRfUFJJVkFURSBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9y
Jik7CisgICAgREVDTEFSRV9FWFBPUlRfVklTSVRfQ0hJTERSRU47CiAKICAgICBKU19FWFBPUlRf
UFJJVkFURSBzdGF0aWMgU3RyaW5nIGNsYXNzTmFtZShjb25zdCBKU09iamVjdCosIFZNJik7CiAg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFN0cmluZyB0b1N0cmluZ05hbWUoY29uc3QgSlNP
YmplY3QqLCBKU0dsb2JhbE9iamVjdCopOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNTY29wZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNTY29wZS5jcHAJKHJldmlzaW9uIDI3MTc4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTU2NvcGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw3ICszOSw4IEBA
IFNUQVRJQ19BU1NFUlRfSVNfVFJJVklBTExZX0RFU1RSVUNUSUJMRSgKIAogY29uc3QgQ2xhc3NJ
bmZvIEpTU2NvcGU6OnNfaW5mbyA9IHsgIlNjb3BlIiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwg
bnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1Njb3BlKSB9OwogCi12b2lkIEpTU2NvcGU6
OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBs
YXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTU2NvcGU6OnZpc2l0Q2hpbGRyZW5JbXBsKEpT
Q2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU1Njb3BlKiB0aGlzT2JqZWN0
ID0ganNDYXN0PEpTU2NvcGUqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRT
KHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC00Nyw2ICs0OCw4IEBAIHZvaWQgSlNTY29wZTo6dmlz
aXRDaGlsZHJlbihKU0NlbGwqIGNlbGwKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5t
X25leHQpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNTY29wZSk7CisKIC8vIFJldHVy
bnMgdHJ1ZSBpZiB3ZSBmb3VuZCBlbm91Z2ggaW5mb3JtYXRpb24gdG8gdGVybWluYXRlIG9wdGlt
aXphdGlvbi4KIHN0YXRpYyBpbmxpbmUgYm9vbCBhYnN0cmFjdEFjY2VzcyhKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBKU1Njb3BlKiBzY29wZSwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQs
IEdldE9yUHV0IGdldE9yUHV0LCBzaXplX3QgZGVwdGgsIGJvb2wmIG5lZWRzVmFySW5qZWN0aW9u
Q2hlY2tzLCBSZXNvbHZlT3AmIG9wLCBJbml0aWFsaXphdGlvbk1vZGUgaW5pdGlhbGl6YXRpb25N
b2RlKQogewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTY29wZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2NvcGUuaAkocmV2
aXNpb24gMjcxNzg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTY29wZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC02NCw3ICs2NCw3IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyB2
b2lkIGNvbGxlY3RDbG9zdXJlVmFyaWFibGVzVW5kZXJURFooSlNTY29wZSosIFREWkVudmlyb25t
ZW50JiByZXN1bHQsIFZhcmlhYmxlRW52aXJvbm1lbnQmIHByaXZhdGVOYW1lcyk7CiAKLSAgICBz
dGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVD
TEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIGJvb2wgaXNWYXJTY29wZSgpOwogICAgIGJvb2wg
aXNMZXhpY2FsU2NvcGUoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
U2VnbWVudGVkVmFyaWFibGVPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVPYmplY3QuY3BwCShyZXZpc2lvbiAy
NzE3ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NlZ21lbnRlZFZhcmlh
YmxlT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjIsMTkgKzYyLDIyIEBAIFNjb3BlT2Zm
c2V0IEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3Q6OmEKICAgICByZXR1cm4gU2NvcGVPZmZzZXQo
b2xkU2l6ZSk7CiB9CiAKLXZvaWQgSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdDo6dmlzaXRDaGls
ZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvcikKK3RlbXBsYXRlPHR5
cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3Q6OnZpc2l0Q2hp
bGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU1NlZ21l
bnRlZFZhcmlhYmxlT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTU2VnbWVudGVkVmFyaWFi
bGVPYmplY3QqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmpl
Y3QsIGluZm8oKSk7Ci0gICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCBzbG90Vmlz
aXRvcik7CisgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKICAg
ICAKICAgICAvLyBGSVhNRTogV2UgY291bGQgYXZvaWQgbG9ja2luZyBoZXJlIGlmIFNlZ21lbnRl
ZFZlY3RvciB3YXMgbG9jay1mcmVlLiBJdCBjb3VsZCBiZSBtYWRlIGxvY2stZnJlZQogICAgIC8v
IHJlbGF0aXZlbHkgZWFzaWx5LgogICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sodGhpc09iamVj
dC0+Y2VsbExvY2soKSk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gdGhpc09iamVjdC0+bV92YXJp
YWJsZXMuc2l6ZSgpOyBpLS07KQotICAgICAgICBzbG90VmlzaXRvci5hcHBlbmRIaWRkZW4odGhp
c09iamVjdC0+bV92YXJpYWJsZXNbaV0pOworICAgICAgICB2aXNpdG9yLmFwcGVuZEhpZGRlbih0
aGlzT2JqZWN0LT5tX3ZhcmlhYmxlc1tpXSk7CiB9CiAKK0RFRklORV9FWFBPUlRfVklTSVRfQ0hJ
TERSRU4oSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdCk7CisKIHZvaWQgSlNTZWdtZW50ZWRWYXJp
YWJsZU9iamVjdDo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5
emVyKQogewogICAgIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nh
c3Q8SlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdCo+KGNlbGwpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVPYmpl
Y3QuaAkocmV2aXNpb24gMjcxNzg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC04Niw3ICs4Niw3
IEBAIHB1YmxpYzoKICAgICAvLyB0aGUgaW5kZXggb2YgdGhlIGZpcnN0IG9uZSBhZGRlZC4KICAg
ICBKU19FWFBPUlRfUFJJVkFURSBTY29wZU9mZnNldCBhZGRWYXJpYWJsZXModW5zaWduZWQgbnVt
YmVyT2ZWYXJpYWJsZXNUb0FkZCwgSlNWYWx1ZSk7CiAgICAgCi0gICAgSlNfRVhQT1JUX1BSSVZB
VEUgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAg
IERFQ0xBUkVfRVhQT1JUX1ZJU0lUX0NISUxEUkVOOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0
YXRpYyB2b2lkIGFuYWx5emVIZWFwKEpTQ2VsbCosIEhlYXBBbmFseXplciYpOwogICAgIAogcHJv
dGVjdGVkOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZXRJdGVyYXRv
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZXRJ
dGVyYXRvci5jcHAJKHJldmlzaW9uIDI3MTc4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTU2V0SXRlcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NywxMyArNTcsMTYg
QEAgdm9pZCBKU1NldEl0ZXJhdG9yOjpmaW5pc2hDcmVhdGlvbihWTSYgdgogICAgICAgICBCYXNl
OjppbnRlcm5hbEZpZWxkKGluZGV4KS5zZXQodm0sIHRoaXMsIHZhbHVlc1tpbmRleF0pOwogfQog
Ci12b2lkIEpTU2V0SXRlcmF0b3I6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90Vmlz
aXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTU2V0SXRl
cmF0b3I6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikK
IHsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTU2V0SXRlcmF0b3IqPihjZWxsKTsK
ICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAgICAg
QmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKIH0KIAorREVGSU5FX1ZJ
U0lUX0NISUxEUkVOKEpTU2V0SXRlcmF0b3IpOworCiBKU1ZhbHVlIEpTU2V0SXRlcmF0b3I6OmNy
ZWF0ZVBhaXIoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBrZXksIEpTVmFs
dWUgdmFsdWUpCiB7CiAgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgYXJnczsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2V0SXRlcmF0b3IuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NldEl0ZXJhdG9yLmgJKHJldmlzaW9uIDI3
MTc4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2V0SXRlcmF0b3IuaAko
d29ya2luZyBjb3B5KQpAQCAtMTMwLDcgKzEzMCw3IEBAIHByaXZhdGU6CiAgICAgSlNfRVhQT1JU
X1BSSVZBVEUgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIEpTU2V0KiwgSXRlcmF0aW9uS2luZCk7
CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIEpT
VmFsdWUgY3JlYXRlUGFpcihKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUsIEpTVmFsdWUpOwotICAg
IHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBE
RUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogfTsKIFNUQVRJQ19BU1NFUlRfSVNfVFJJVklBTExZX0RF
U1RSVUNUSUJMRShKU1NldEl0ZXJhdG9yKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNTb3VyY2VDb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU1NvdXJjZUNvZGUuY3BwCShyZXZpc2lvbiAyNzE3ODYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NvdXJjZUNvZGUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yNiw2ICsyNiw4IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSlNTb3Vy
Y2VDb2RlLmgiCiAKKyNpbmNsdWRlICJKU0NlbGxJbmxpbmVzLmgiIC8vIG1sYW0gVEVTVAorCiBu
YW1lc3BhY2UgSlNDIHsKIAogY29uc3QgQ2xhc3NJbmZvIEpTU291cmNlQ29kZTo6c19pbmZvID0g
eyAiSlNTb3VyY2VDb2RlIiwgbnVsbHB0ciwgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhP
RF9UQUJMRShKU1NvdXJjZUNvZGUpIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1N0cmluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNTdHJpbmcuY3BwCShyZXZpc2lvbiAyNzE3ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU1N0cmluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNSw3ICsxMDUs
OCBAQCBzaXplX3QgSlNTdHJpbmc6OmVzdGltYXRlZFNpemUoSlNDZWxsKiBjCiAgICAgcmV0dXJu
IEJhc2U6OmVzdGltYXRlZFNpemUoY2VsbCwgdm0pICsgYml0d2lzZV9jYXN0PFN0cmluZ0ltcGwq
Pihwb2ludGVyKS0+Y29zdER1cmluZ0dDKCk7CiB9CiAKLXZvaWQgSlNTdHJpbmc6OnZpc2l0Q2hp
bGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVu
YW1lIFZpc2l0b3I+Cit2b2lkIEpTU3RyaW5nOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNl
bGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNTdHJpbmcqIHRoaXNPYmplY3QgPSBhc1N0
cmluZyhjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGlu
Zm8oKSk7CkBAIC0xNDMsNiArMTQ0LDggQEAgdm9pZCBKU1N0cmluZzo6dmlzaXRDaGlsZHJlbihK
U0NlbGwqIGNlbAogICAgICAgICB2aXNpdG9yLnJlcG9ydEV4dHJhTWVtb3J5VmlzaXRlZChpbXBs
LT5jb3N0RHVyaW5nR0MoKSk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU1N0cmluZyk7
CisKIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbWF4TGVuZ3RoRm9yT25TdGFja1Jlc29sdmUg
PSAyMDQ4OwogCiB2b2lkIEpTUm9wZVN0cmluZzo6cmVzb2x2ZVJvcGVJbnRlcm5hbDgoTENoYXIq
IGJ1ZmZlcikgY29uc3QKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3Ry
aW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJp
bmcuaAkocmV2aXNpb24gMjcxNzg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNTdHJpbmcuaAkod29ya2luZyBjb3B5KQpAQCAtMjE3LDcgKzIxNyw3IEBAIHB1YmxpYzoKIAog
ICAgIHN0YXRpYyB2b2lkIGR1bXBUb1N0cmVhbShjb25zdCBKU0NlbGwqLCBQcmludFN0cmVhbSYp
OwogICAgIHN0YXRpYyBzaXplX3QgZXN0aW1hdGVkU2l6ZShKU0NlbGwqLCBWTSYpOwotICAgIHN0
YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNM
QVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgQUxXQVlTX0lOTElORSBib29sIGlzUm9wZSgpIGNv
bnN0CiAgICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmdJ
dGVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNTdHJpbmdJdGVyYXRvci5jcHAJKHJldmlzaW9uIDI3MTc4NikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nSXRlcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01
MSwxMSArNTEsMTQgQEAgSlNTdHJpbmdJdGVyYXRvciogSlNTdHJpbmdJdGVyYXRvcjo6Y2xvbgog
ICAgIHJldHVybiBjbG9uZTsKIH0KIAotdm9pZCBKU1N0cmluZ0l0ZXJhdG9yOjp2aXNpdENoaWxk
cmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBWaXNpdG9yPgordm9pZCBKU1N0cmluZ0l0ZXJhdG9yOjp2aXNpdENoaWxkcmVuSW1wbChKU0Nl
bGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpz
Q2FzdDxKU1N0cmluZ0l0ZXJhdG9yKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhF
UklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09i
amVjdCwgdmlzaXRvcik7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU1N0cmluZ0l0ZXJh
dG9yKTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU1N0cmluZ0l0ZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNTdHJpbmdJdGVyYXRvci5oCShyZXZpc2lvbiAyNzE3ODYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZ0l0ZXJhdG9yLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTc5LDcgKzc5LDcgQEAgcHVibGljOgogICAgIEpTVmFsdWUgaW5kZXgoKSBjb25z
dCB7IHJldHVybiBpbnRlcm5hbEZpZWxkKEZpZWxkOjpJbmRleCkuZ2V0KCk7IH0KICAgICBKU1N0
cmluZ0l0ZXJhdG9yKiBjbG9uZShKU0dsb2JhbE9iamVjdCopOwogCi0gICAgc3RhdGljIHZvaWQg
dmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRf
Q0hJTERSRU47CiAKIHByaXZhdGU6CiAgICAgSlNTdHJpbmdJdGVyYXRvcihWTSYgdm0sIFN0cnVj
dHVyZSogc3RydWN0dXJlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNT
eW1ib2xUYWJsZU9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVjdC5jcHAJKHJldmlzaW9uIDI3MTc4NikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNiw3ICszNiw4IEBAIG5hbWVzcGFjZSBKU0MgewogCiBjb25zdCBDbGFz
c0luZm8gSlNTeW1ib2xUYWJsZU9iamVjdDo6c19pbmZvID0geyAiU3ltYm9sVGFibGVPYmplY3Qi
LCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpT
U3ltYm9sVGFibGVPYmplY3QpIH07CiAKLXZvaWQgSlNTeW1ib2xUYWJsZU9iamVjdDo6dmlzaXRD
aGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlw
ZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNTeW1ib2xUYWJsZU9iamVjdDo6dmlzaXRDaGlsZHJlbklt
cGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTU3ltYm9sVGFibGVP
YmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNTeW1ib2xUYWJsZU9iamVjdCo+KGNlbGwpOwog
ICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTQ0
LDYgKzQ1LDggQEAgdm9pZCBKU1N5bWJvbFRhYmxlT2JqZWN0Ojp2aXNpdENoaWxkcmVuKAogICAg
IHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fc3ltYm9sVGFibGUpOwogfQogCitERUZJTkVf
VklTSVRfQ0hJTERSRU4oSlNTeW1ib2xUYWJsZU9iamVjdCk7CisKIGJvb2wgSlNTeW1ib2xUYWJs
ZU9iamVjdDo6ZGVsZXRlUHJvcGVydHkoSlNDZWxsKiBjZWxsLCBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBEZWxldGVQcm9wZXJ0eVNsb3Qm
IHNsb3QpCiB7CiAgICAgSlNTeW1ib2xUYWJsZU9iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxK
U1N5bWJvbFRhYmxlT2JqZWN0Kj4oY2VsbCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVjdC5oCShyZXZpc2lvbiAyNzE3ODYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTcwLDcgKzcwLDcgQEAgcHJvdGVjdGVkOgogICAgICAgICBtX3N5
bWJvbFRhYmxlLnNldCh2bSwgdGhpcywgc3ltYm9sVGFibGUpOwogICAgIH0KICAgICAKLSAgICBz
dGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVD
TEFSRV9WSVNJVF9DSElMRFJFTjsKICAgICAKIHByaXZhdGU6CiAgICAgV3JpdGVCYXJyaWVyPFN5
bWJvbFRhYmxlPiBtX3N5bWJvbFRhYmxlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNXZWFrT2JqZWN0UmVmLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU1dlYWtPYmplY3RSZWYuY3BwCShyZXZpc2lvbiAyNzE3ODYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1dlYWtPYmplY3RSZWYuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zOSw3ICszOSw4IEBAIHZvaWQgSlNXZWFrT2JqZWN0UmVmOjpmaW5pc2hDcmVh
dGlvbihWTSYKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CiB9CiAKLXZvaWQgSlNXZWFr
T2JqZWN0UmVmOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0
b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1dlYWtPYmplY3RSZWY6OnZp
c2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBh
dXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTV2Vha09iamVjdFJlZio+KGNlbGwpOwogICAgIEFT
U0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTUxLDYgKzUy
LDggQEAgdm9pZCBKU1dlYWtPYmplY3RSZWY6OnZpc2l0Q2hpbGRyZW4oSlNDZQogICAgIH0KIH0K
IAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTV2Vha09iamVjdFJlZik7CisKIHZvaWQgSlNXZWFr
T2JqZWN0UmVmOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxseShWTSYgdm0pCiB7CiAgICAgaWYgKG1f
dmFsdWUgJiYgIXZtLmhlYXAuaXNNYXJrZWQobV92YWx1ZS5nZXQoKSkpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1dlYWtPYmplY3RSZWYuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1dlYWtPYmplY3RSZWYuaAkocmV2aXNpb24g
MjcxNzg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNXZWFrT2JqZWN0UmVm
LmgJKHdvcmtpbmcgY29weSkKQEAgLTY1LDcgKzY1LDcgQEAgcHVibGljOgogICAgIH0KIAogICAg
IHZvaWQgZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoVk0mKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNp
dENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElM
RFJFTjsKIAogcHJpdmF0ZToKICAgICBKU1dlYWtPYmplY3RSZWYoVk0mIHZtLCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTV2l0aFNj
b3BlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1dp
dGhTY29wZS5jcHAJKHJldmlzaW9uIDI3MTc4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTV2l0aFNjb3BlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEsNyArNDEsOCBAQCBK
U1dpdGhTY29wZSogSlNXaXRoU2NvcGU6OmNyZWF0ZSgKICAgICByZXR1cm4gd2l0aFNjb3BlOwog
fQogCi12b2lkIEpTV2l0aFNjb3BlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZp
c2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1dpdGhT
Y29wZTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQog
ewogICAgIEpTV2l0aFNjb3BlKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTV2l0aFNjb3BlKj4oY2Vs
bCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpA
QCAtNDksNiArNTAsOCBAQCB2b2lkIEpTV2l0aFNjb3BlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCog
CiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9vYmplY3QpOwogfQogCitERUZJTkVf
VklTSVRfQ0hJTERSRU4oSlNXaXRoU2NvcGUpOworCiBTdHJ1Y3R1cmUqIEpTV2l0aFNjb3BlOjpj
cmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1Zh
bHVlIHByb3RvKQogewogICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2Jq
ZWN0LCBwcm90bywgVHlwZUluZm8oV2l0aFNjb3BlVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZv
KCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNXaXRoU2NvcGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1dpdGhTY29wZS5o
CShyZXZpc2lvbiAyNzE3ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1dp
dGhTY29wZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00Myw3ICs0Myw3IEBAIHB1YmxpYzoKIAogICAg
IEpTT2JqZWN0KiBvYmplY3QoKSB7IHJldHVybiBtX29iamVjdC5nZXQoKTsgfQogCi0gICAgc3Rh
dGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xB
UkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1
cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUgcHJvdG8pOwogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1dyYXBwZXJPYmplY3QuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTV3JhcHBlck9iamVjdC5jcHAJKHJldmlz
aW9uIDI3MTc4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTV3JhcHBlck9i
amVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDExICsyOSwxNCBAQCBuYW1lc3BhY2UgSlND
IHsKIAogU1RBVElDX0FTU0VSVF9JU19UUklWSUFMTFlfREVTVFJVQ1RJQkxFKEpTV3JhcHBlck9i
amVjdCk7CiAKLXZvaWQgSlNXcmFwcGVyT2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2Vs
bCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9p
ZCBKU1dyYXBwZXJPYmplY3Q6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRv
ciYgdmlzaXRvcikKIHsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTV3JhcHBlck9i
amVjdCo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwg
aW5mbygpKTsKICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwog
fQogCitERUZJTkVfRVhQT1JUX1ZJU0lUX0NISUxEUkVOKEpTV3JhcHBlck9iamVjdCk7CisKIH0g
Ly8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNX
cmFwcGVyT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNXcmFwcGVyT2JqZWN0LmgJKHJldmlzaW9uIDI3MTc4NikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTV3JhcHBlck9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC02NCw3
ICs2NCw3IEBAIHB1YmxpYzoKIHByb3RlY3RlZDoKICAgICBleHBsaWNpdCBKU1dyYXBwZXJPYmpl
Y3QoVk0mLCBTdHJ1Y3R1cmUqKTsKIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lk
IHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX0VYUE9S
VF9WSVNJVF9DSElMRFJFTjsKIH07CiAKIGlubGluZSBKU1dyYXBwZXJPYmplY3Q6OkpTV3JhcHBl
ck9iamVjdChWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvTGF6eUNsYXNzU3RydWN0dXJlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9MYXp5Q2xhc3NTdHJ1Y3R1cmUuY3BwCShyZXZp
c2lvbiAyNzE3ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9MYXp5Q2xhc3NT
dHJ1Y3R1cmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MiwxMiArNzIsMTYgQEAgdm9pZCBMYXp5
Q2xhc3NTdHJ1Y3R1cmU6OkluaXRpYWxpemVyOjpzZQogICAgIGNsYXNzU3RydWN0dXJlLm1fY29u
c3RydWN0b3Iuc2V0KHZtLCBnbG9iYWwsIGNvbnN0cnVjdG9yKTsKIH0KIAotdm9pZCBMYXp5Q2xh
c3NTdHJ1Y3R1cmU6OnZpc2l0KFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5h
bWUgVmlzaXRvcj4KK3ZvaWQgTGF6eUNsYXNzU3RydWN0dXJlOjp2aXNpdChWaXNpdG9yJiB2aXNp
dG9yKQogewogICAgIG1fc3RydWN0dXJlLnZpc2l0KHZpc2l0b3IpOwogICAgIHZpc2l0b3IuYXBw
ZW5kKG1fY29uc3RydWN0b3IpOwogfQogCit0ZW1wbGF0ZSB2b2lkIExhenlDbGFzc1N0cnVjdHVy
ZTo6dmlzaXQoQWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBMYXp5Q2xhc3NT
dHJ1Y3R1cmU6OnZpc2l0KFNsb3RWaXNpdG9yJik7CisKIHZvaWQgTGF6eUNsYXNzU3RydWN0dXJl
OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiB7CiAgICAgb3V0LnByaW50KCI8c3RydWN0
dXJlID0gIiwgbV9zdHJ1Y3R1cmUsICIsIGNvbnN0cnVjdG9yID0gIiwgUmF3UG9pbnRlcihtX2Nv
bnN0cnVjdG9yLmdldCgpKSwgIj4iKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0xhenlDbGFzc1N0cnVjdHVyZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0xhenlDbGFzc1N0cnVjdHVyZS5oCShyZXZpc2lvbiAyNzE3ODYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9MYXp5Q2xhc3NTdHJ1Y3R1cmUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTE3LDcgKzExNyw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fY29u
c3RydWN0b3IuZ2V0KCk7CiAgICAgfQogICAgIAotICAgIHZvaWQgdmlzaXQoU2xvdFZpc2l0b3Im
KTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIHZpc2l0KFZpc2l0b3ImKTsK
ICAgICAKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTGF6eVByb3BlcnR5LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTGF6eVByb3BlcnR5LmgJKHJldmlzaW9uIDI3MTc4
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0xhenlQcm9wZXJ0eS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMDMsNyArMTAzLDcgQEAgcHVibGljOgogICAgIHZvaWQgc2V0TWF5QmVO
dWxsKFZNJiwgY29uc3QgT3duZXJUeXBlKiBvd25lciwgRWxlbWVudFR5cGUqKTsKICAgICB2b2lk
IHNldChWTSYsIGNvbnN0IE93bmVyVHlwZSogb3duZXIsIEVsZW1lbnRUeXBlKik7CiAgICAgCi0g
ICAgdm9pZCB2aXNpdChTbG90VmlzaXRvciYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0
b3I+IHZvaWQgdmlzaXQoVmlzaXRvciYpOwogICAgIAogICAgIHZvaWQgZHVtcChQcmludFN0cmVh
bSYpIGNvbnN0OwogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTGF6
eVByb3BlcnR5SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0xhenlQcm9wZXJ0eUlubGluZXMuaAkocmV2aXNpb24gMjcxNzg2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTGF6eVByb3BlcnR5SW5saW5lcy5oCSh3b3JraW5nIGNv
cHkpCkBAIC02Niw3ICs2Niw4IEBAIHZvaWQgTGF6eVByb3BlcnR5PE93bmVyVHlwZSwgRWxlbWVu
dFR5cGUKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3duZXJUeXBlLCB0eXBlbmFtZSBFbGVtZW50
VHlwZT4KLXZvaWQgTGF6eVByb3BlcnR5PE93bmVyVHlwZSwgRWxlbWVudFR5cGU+Ojp2aXNpdChT
bG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIExh
enlQcm9wZXJ0eTxPd25lclR5cGUsIEVsZW1lbnRUeXBlPjo6dmlzaXQoVmlzaXRvciYgdmlzaXRv
cikKIHsKICAgICBpZiAobV9wb2ludGVyICYmICEobV9wb2ludGVyICYgbGF6eVRhZykpCiAgICAg
ICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQoYml0d2lzZV9jYXN0PEVsZW1lbnRUeXBlKj4o
bV9wb2ludGVyKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Nb2R1bGVQ
cm9ncmFtRXhlY3V0YWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUuY3BwCShyZXZpc2lvbiAyNzE3ODYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Nb2R1bGVQcm9ncmFtRXhlY3V0YWJsZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTc5LDcgKzc5LDggQEAgYXV0byBNb2R1bGVQcm9ncmFtRXhl
Y3V0YWJsZTo6ZW5zdXJlVGVtcAogICAgIHJldHVybiBlbnN1cmVUZW1wbGF0ZU9iamVjdE1hcElt
cGwobV90ZW1wbGF0ZU9iamVjdE1hcCk7CiB9CiAKLXZvaWQgTW9kdWxlUHJvZ3JhbUV4ZWN1dGFi
bGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3Rl
bXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIE1vZHVsZVByb2dyYW1FeGVjdXRhYmxlOjp2
aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAg
TW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8TW9kdWxlUHJvZ3Jh
bUV4ZWN1dGFibGUqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNP
YmplY3QsIGluZm8oKSk7CkBAIC05NCw0ICs5NSw2IEBAIHZvaWQgTW9kdWxlUHJvZ3JhbUV4ZWN1
dGFibGU6OnZpc2l0Q2hpbGQKICAgICB9CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihNb2R1
bGVQcm9ncmFtRXhlY3V0YWJsZSk7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Nb2R1bGVQcm9ncmFtRXhlY3V0
YWJsZS5oCShyZXZpc2lvbiAyNzE3ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9Nb2R1bGVQcm9ncmFtRXhlY3V0YWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03Nyw3ICs3Nyw3
IEBAIHByaXZhdGU6CiAKICAgICBNb2R1bGVQcm9ncmFtRXhlY3V0YWJsZShKU0dsb2JhbE9iamVj
dCosIGNvbnN0IFNvdXJjZUNvZGUmKTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4o
SlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAg
ICAgV3JpdGVCYXJyaWVyPFVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jaz4gbV91bmxpbmtl
ZE1vZHVsZVByb2dyYW1Db2RlQmxvY2s7CiAgICAgV3JpdGVCYXJyaWVyPFN5bWJvbFRhYmxlPiBt
X21vZHVsZUVudmlyb25tZW50U3ltYm9sVGFibGU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9PcHRpb25zTGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0LmgJKHJldmlzaW9uIDI3MTc4NikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTM3
NSw2ICszNzUsNyBAQCBKU19FWFBPUlRfUFJJVkFURSBib29sIGNhblVzZUpJVENhZ2UoKTsKICAg
ICB2KEJvb2wsIGFsd2F5c0dlbmVyYXRlUENUb0NvZGVPcmlnaW5NYXAsIGZhbHNlLCBOb3JtYWws
ICJUaGlzIHdpbGwgbWFrZSBzdXJlIHdlIGFsd2F5cyBnZW5lcmF0ZSBhIFBDVG9Db2RlT3JpZ2lu
TWFwIGZvciBKSVRlZCBjb2RlLiIpIFwKICAgICBcCiAgICAgdihEb3VibGUsIHJhbmRvbUludGVn
cml0eUF1ZGl0UmF0ZSwgMC4wNSwgTm9ybWFsLCAiUHJvYmFiaWxpdHkgb2YgcmFuZG9tIGludGVn
cml0eSBhdWRpdHMgWzAuMCAtIDEuMF0iKSBcCisgICAgdihCb29sLCB2ZXJpZnlHQywgZmFsc2Us
IE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoQm9vbCwgdmVyaWZ5SGVhcCwgZmFsc2UsIE5vcm1h
bCwgbnVsbHB0cikgXAogICAgIHYoVW5zaWduZWQsIG51bWJlck9mR0NDeWNsZXNUb1JlY29yZEZv
clZlcmlmaWNhdGlvbiwgMywgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgXApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvZ3JhbUV4ZWN1dGFibGUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb2dyYW1FeGVjdXRhYmxlLmNwcAko
cmV2aXNpb24gMjcxNzg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvZ3Jh
bUV4ZWN1dGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDgsNyArMjA4LDggQEAgYXV0byBQ
cm9ncmFtRXhlY3V0YWJsZTo6ZW5zdXJlVGVtcGxhdGVPYgogICAgIHJldHVybiBlbnN1cmVUZW1w
bGF0ZU9iamVjdE1hcEltcGwobV90ZW1wbGF0ZU9iamVjdE1hcCk7CiB9CiAKLXZvaWQgUHJvZ3Jh
bUV4ZWN1dGFibGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlz
aXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFByb2dyYW1FeGVjdXRhYmxl
Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAg
ICAgUHJvZ3JhbUV4ZWN1dGFibGUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8UHJvZ3JhbUV4ZWN1dGFi
bGUqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGlu
Zm8oKSk7CkBAIC0yMjIsNCArMjIzLDYgQEAgdm9pZCBQcm9ncmFtRXhlY3V0YWJsZTo6dmlzaXRD
aGlsZHJlbihKUwogICAgIH0KIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKFByb2dyYW1FeGVj
dXRhYmxlKTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9Qcm9ncmFtRXhlY3V0YWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1Byb2dyYW1FeGVjdXRhYmxlLmgJKHJldmlzaW9uIDI3MTc4NikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb2dyYW1FeGVjdXRhYmxlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTgxLDcgKzgxLDcgQEAgcHJpdmF0ZToKIAogICAgIFByb2dyYW1FeGVj
dXRhYmxlKEpTR2xvYmFsT2JqZWN0KiwgY29uc3QgU291cmNlQ29kZSYpOwogCi0gICAgc3RhdGlj
IHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVf
VklTSVRfQ0hJTERSRU47CiAKICAgICBXcml0ZUJhcnJpZXI8VW5saW5rZWRQcm9ncmFtQ29kZUJs
b2NrPiBtX3VubGlua2VkUHJvZ3JhbUNvZGVCbG9jazsKICAgICBXcml0ZUJhcnJpZXI8RXhlY3V0
YWJsZVRvQ29kZUJsb2NrRWRnZT4gbV9wcm9ncmFtQ29kZUJsb2NrOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlNYXBIYXNoVGFibGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eU1hcEhhc2hUYWJsZS5oCShy
ZXZpc2lvbiAyNzE3ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0
eU1hcEhhc2hUYWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzMsNyArMTMzLDcgQEAgcHVibGlj
OgogCiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOwog
ICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRD
aGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERS
RU47CiAKICAgICBERUNMQVJFX0VYUE9SVF9JTkZPOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9Qcm9wZXJ0eVRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eVRhYmxlLmNwcAkocmV2aXNpb24gMjcxNzg2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlUYWJsZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTExOCw3ICsxMTgsOCBAQCB2b2lkIFByb3BlcnR5VGFibGU6OmZpbmlzaENy
ZWF0aW9uKFZNJiB2CiAgICAgdm0uaGVhcC5yZXBvcnRFeHRyYU1lbW9yeUFsbG9jYXRlZChkYXRh
U2l6ZSgpKTsKIH0KIAotdm9pZCBQcm9wZXJ0eVRhYmxlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCog
Y2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgor
dm9pZCBQcm9wZXJ0eVRhYmxlOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0
b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxQcm9wZXJ0eVRh
YmxlKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBp
bmZvKCkpOwpAQCAtMTI2LDYgKzEyNyw4IEBAIHZvaWQgUHJvcGVydHlUYWJsZTo6dmlzaXRDaGls
ZHJlbihKU0NlbGwKICAgICB2aXNpdG9yLnJlcG9ydEV4dHJhTWVtb3J5VmlzaXRlZCh0aGlzT2Jq
ZWN0LT5kYXRhU2l6ZSgpKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKFByb3BlcnR5VGFi
bGUpOworCiB2b2lkIFByb3BlcnR5VGFibGU6OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQogewogICAg
IHN0YXRpY19jYXN0PFByb3BlcnR5VGFibGUqPihjZWxsKS0+UHJvcGVydHlUYWJsZTo6flByb3Bl
cnR5VGFibGUoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3h5T2Jq
ZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm94
eU9iamVjdC5jcHAJKHJldmlzaW9uIDI3MTc4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1Byb3h5T2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE1OCw3ICsxMTU4LDgg
QEAgYm9vbCBQcm94eU9iamVjdDo6aXNSZXZva2VkKCkgY29uc3QKICAgICByZXR1cm4gaGFuZGxl
cigpLmlzTnVsbCgpOwogfQogCi12b2lkIFByb3h5T2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2Vs
bCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
Pgordm9pZCBQcm94eU9iamVjdDo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNp
dG9yJiB2aXNpdG9yKQogewogICAgIFByb3h5T2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PFBy
b3h5T2JqZWN0Kj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2Jq
ZWN0LCBpbmZvKCkpOwpAQCAtMTE2OCw0ICsxMTY5LDYgQEAgdm9pZCBQcm94eU9iamVjdDo6dmlz
aXRDaGlsZHJlbihKU0NlbGwqIAogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1faGFu
ZGxlcik7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihQcm94eU9iamVjdCk7CisKIH0gLy8g
bmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJveHlP
YmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm94
eU9iamVjdC5oCShyZXZpc2lvbiAyNzE3ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9Qcm94eU9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC05MSw3ICs5MSw3IEBAIHByaXZh
dGU6CiAgICAgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCosIEpTR2xv
YmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lQXJyYXkmLCBEb250RW51bVByb3BlcnRpZXNNb2RlKTsK
ICAgICBzdGF0aWMgYm9vbCBzZXRQcm90b3R5cGUoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCos
IEpTVmFsdWUgcHJvdG90eXBlLCBib29sIHNob3VsZFRocm93SWZDYW50U2V0KTsKICAgICBzdGF0
aWMgSlNWYWx1ZSBnZXRQcm90b3R5cGUoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCopOwotICAg
IHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBE
RUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3RDb21t
b24oSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwogICAgIGJv
b2wgcGVyZm9ybUludGVybmFsTWV0aG9kR2V0T3duUHJvcGVydHkoSlNHbG9iYWxPYmplY3QqLCBQ
cm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvUHJveHlSZXZva2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1Byb3h5UmV2b2tlLmNwcAkocmV2aXNpb24gMjcxNzg2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJveHlSZXZva2UuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC02OSw3ICs2OSw4IEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihwZXJmb3JtUHJveHlSZXYK
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCi12b2lkIFBy
b3h5UmV2b2tlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0
b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBQcm94eVJldm9rZTo6dmlzaXRD
aGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFByb3h5
UmV2b2tlKiB0aGlzT2JqZWN0ID0ganNDYXN0PFByb3h5UmV2b2tlKj4oY2VsbCk7CiAgICAgQVNT
RVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNzgsNCArNzks
NiBAQCB2b2lkIFByb3h5UmV2b2tlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogCiAgICAgdmlzaXRv
ci5hcHBlbmQodGhpc09iamVjdC0+bV9wcm94eSk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJF
TihQcm94eVJldm9rZSk7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvUHJveHlSZXZva2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9Qcm94eVJldm9rZS5oCShyZXZpc2lvbiAyNzE3ODYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm94eVJldm9rZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC01Miw3ICs1Miw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICB2b2lkIGZpbmlzaENyZWF0
aW9uKFZNJiwgUHJveHlPYmplY3QqKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpT
Q2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKICAgICBK
U1ZhbHVlIHByb3h5KCkgeyByZXR1cm4gbV9wcm94eS5nZXQoKTsgfQogICAgIHZvaWQgc2V0UHJv
eHlUb051bGwoVk0mIHZtKSB7IHJldHVybiBtX3Byb3h5LnNldCh2bSwgdGhpcywganNOdWxsKCkp
OyB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENhY2hlZFJl
c3VsdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVn
RXhwQ2FjaGVkUmVzdWx0LmNwcAkocmV2aXNpb24gMjcxNzg2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvUmVnRXhwQ2FjaGVkUmVzdWx0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzEsNyArMzEsOCBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotdm9pZCBSZWdFeHBDYWNoZWRSZXN1
bHQ6OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5h
bWUgVmlzaXRvcj4KK3ZvaWQgUmVnRXhwQ2FjaGVkUmVzdWx0Ojp2aXNpdEFnZ3JlZ2F0ZShWaXNp
dG9yJiB2aXNpdG9yKQogewogICAgIHZpc2l0b3IuYXBwZW5kKG1fbGFzdElucHV0KTsKICAgICB2
aXNpdG9yLmFwcGVuZChtX2xhc3RSZWdFeHApOwpAQCAtNDMsNiArNDQsOSBAQCB2b2lkIFJlZ0V4
cENhY2hlZFJlc3VsdDo6dmlzaXRBZ2dyZWdhdGUoCiAgICAgfQogfQogCit0ZW1wbGF0ZSB2b2lk
IFJlZ0V4cENhY2hlZFJlc3VsdDo6dmlzaXRBZ2dyZWdhdGUoQWJzdHJhY3RTbG90VmlzaXRvciYp
OwordGVtcGxhdGUgdm9pZCBSZWdFeHBDYWNoZWRSZXN1bHQ6OnZpc2l0QWdncmVnYXRlKFNsb3RW
aXNpdG9yJik7CisKIEpTQXJyYXkqIFJlZ0V4cENhY2hlZFJlc3VsdDo6bGFzdFJlc3VsdChKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU09iamVjdCogb3duZXIpCiB7CiAgICAgVk0mIHZt
ID0gZ2xvYmFsT2JqZWN0LT52bSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvUmVnRXhwQ2FjaGVkUmVzdWx0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvUmVnRXhwQ2FjaGVkUmVzdWx0LmgJKHJldmlzaW9uIDI3MTc4NikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENhY2hlZFJlc3VsdC5oCSh3b3JraW5n
IGNvcHkpCkBAIC02NSw3ICs2NSw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fcmVpZmll
ZCA/IG1fcmVpZmllZElucHV0LmdldCgpIDogbV9sYXN0SW5wdXQuZ2V0KCk7CiAgICAgfQogCi0g
ICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYpOworICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFZpc2l0b3I+IHZvaWQgdmlzaXRBZ2dyZWdhdGUoVmlzaXRvciYpOwogCiAgICAgLy8gbV9s
YXN0UmVnRXhwIHdvdWxkIGJlIG51bGxwdHIgd2hlbiBSZWdFeHBDYWNoZWRSZXN1bHQgaXMgbm90
IHJlaWZpZWQuCiAgICAgLy8gSWYgd2UgZmluZCBtX2xhc3RSZWdFeHAgaXMgbnVsbHB0ciwgaXQg
bWVhbnMgdGhpcyBzaG91bGQgaG9sZCB0aGUgZW1wdHkgUmVnRXhwLgpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwR2xvYmFsRGF0YS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwR2xvYmFsRGF0YS5jcHAJKHJldmlz
aW9uIDI3MTc4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cEdsb2Jh
bERhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCwxMSArMzAsMTUgQEAKIAogbmFtZXNwYWNl
IEpTQyB7CiAKLXZvaWQgUmVnRXhwR2xvYmFsRGF0YTo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0
b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBSZWdFeHBHbG9i
YWxEYXRhOjp2aXNpdEFnZ3JlZ2F0ZShWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIG1fY2FjaGVk
UmVzdWx0LnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOwogfQogCit0ZW1wbGF0ZSB2b2lkIFJlZ0V4
cEdsb2JhbERhdGE6OnZpc2l0QWdncmVnYXRlKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBs
YXRlIHZvaWQgUmVnRXhwR2xvYmFsRGF0YTo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImKTsK
KwogSlNWYWx1ZSBSZWdFeHBHbG9iYWxEYXRhOjpnZXRCYWNrcmVmKEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIHVuc2lnbmVkIGkpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52
bSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwR2xvYmFsRGF0
YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cEds
b2JhbERhdGEuaAkocmV2aXNpb24gMjcxNzg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvUmVnRXhwR2xvYmFsRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0MSw3IEBA
IHB1YmxpYzoKICAgICB2b2lkIHNldElucHV0KEpTR2xvYmFsT2JqZWN0KiwgSlNTdHJpbmcqKTsK
ICAgICBKU1N0cmluZyogaW5wdXQoKSB7IHJldHVybiBtX2NhY2hlZFJlc3VsdC5pbnB1dCgpOyB9
CiAKLSAgICB2b2lkIHZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJik7CisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCB2aXNpdEFnZ3JlZ2F0ZShWaXNpdG9yJik7CiAKICAgICBK
U1ZhbHVlIGdldEJhY2tyZWYoSlNHbG9iYWxPYmplY3QqLCB1bnNpZ25lZCk7CiAgICAgSlNWYWx1
ZSBnZXRMYXN0UGFyZW4oSlNHbG9iYWxPYmplY3QqKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1JlZ0V4cE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0LmNwcAkocmV2aXNpb24gMjcxNzg2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDYsNyArNDYsOCBAQCB2b2lkIFJlZ0V4cE9iamVjdDo6ZmluaXNoQ3JlYXRpb24o
Vk0mIHZtCiAgICAgQVNTRVJUKHR5cGUoKSA9PSBSZWdFeHBPYmplY3RUeXBlKTsKIH0KIAotdm9p
ZCBSZWdFeHBPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYg
dmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFJlZ0V4cE9iamVjdDo6
dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAg
IFJlZ0V4cE9iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxSZWdFeHBPYmplY3QqPihjZWxsKTsK
ICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC01
NSw2ICs1Niw4IEBAIHZvaWQgUmVnRXhwT2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCoKICAg
ICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2xhc3RJbmRleCk7CiB9CiAKK0RFRklORV9W
SVNJVF9DSElMRFJFTihSZWdFeHBPYmplY3QpOworCiBib29sIFJlZ0V4cE9iamVjdDo6Z2V0T3du
UHJvcGVydHlTbG90KEpTT2JqZWN0KiBvYmplY3QsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAg
ICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9SZWdFeHBPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9SZWdFeHBPYmplY3QuaAkocmV2aXNpb24gMjcxNzg2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAg
LTEzMyw3ICsxMzMsNyBAQCBwcml2YXRlOgogICAgIEpTX0VYUE9SVF9QUklWQVRFIFJlZ0V4cE9i
amVjdChWTSYsIFN0cnVjdHVyZSosIFJlZ0V4cCopOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZv
aWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4o
SlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAg
ICAgYm9vbCBsYXN0SW5kZXhJc1dyaXRhYmxlKCkgY29uc3QKICAgICB7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TYW1wbGluZ1Byb2ZpbGVyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TYW1wbGluZ1Byb2ZpbGVyLmNwcAkocmV2
aXNpb24gMjcxNzg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2FtcGxpbmdQ
cm9maWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY1Miw3ICs2NTIsNyBAQCB2b2lkIFNhbXBs
aW5nUHJvZmlsZXI6OnByb2Nlc3NVbnZlcmlmaWVkCiAgICAgbV91bnByb2Nlc3NlZFN0YWNrVHJh
Y2VzLmNsZWFyKCk7CiB9CiAKLXZvaWQgU2FtcGxpbmdQcm9maWxlcjo6dmlzaXQoU2xvdFZpc2l0
b3ImIHNsb3RWaXNpdG9yKQordm9pZCBTYW1wbGluZ1Byb2ZpbGVyOjp2aXNpdChBYnN0cmFjdFNs
b3RWaXNpdG9yJiBzbG90VmlzaXRvcikKIHsKICAgICBSRUxFQVNFX0FTU0VSVChtX2xvY2suaXNM
b2NrZWQoKSk7CiAgICAgZm9yIChKU0NlbGwqIGNlbGwgOiBtX2xpdmVDZWxsUG9pbnRlcnMpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TYW1wbGluZ1Byb2ZpbGVyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2FtcGxpbmdQcm9maWxl
ci5oCShyZXZpc2lvbiAyNzE3ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
YW1wbGluZ1Byb2ZpbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTE3MSw3ICsxNzEsNyBAQCBwdWJs
aWM6CiAgICAgdm9pZCBub3RpY2VKU0xvY2tBY3F1aXNpdGlvbigpOwogICAgIHZvaWQgbm90aWNl
Vk1FbnRyeSgpOwogICAgIHZvaWQgc2h1dGRvd24oKTsKLSAgICB2b2lkIHZpc2l0KFNsb3RWaXNp
dG9yJik7CisgICAgdm9pZCB2aXNpdChBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAgICAgTG9jayYg
Z2V0TG9jaygpIHsgcmV0dXJuIG1fbG9jazsgfQogICAgIHZvaWQgc2V0VGltaW5nSW50ZXJ2YWwo
U2Vjb25kcyBpbnRlcnZhbCkgeyBtX3RpbWluZ0ludGVydmFsID0gaW50ZXJ2YWw7IH0KICAgICBK
U19FWFBPUlRfUFJJVkFURSB2b2lkIHN0YXJ0KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TY29wZWRBcmd1bWVudHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlZEFyZ3VtZW50cy5jcHAJKHJldmlzaW9uIDI3MTc4NikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlZEFyZ3VtZW50cy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTk4LDcgKzk4LDggQEAgU2NvcGVkQXJndW1lbnRzKiBTY29wZWRBcmd1
bWVudHM6OmNyZWF0ZQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQgU2NvcGVkQXJndW1l
bnRzOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0
ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBTY29wZWRBcmd1bWVudHM6OnZpc2l0Q2hp
bGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBTY29wZWRB
cmd1bWVudHMqIHRoaXNPYmplY3QgPSBzdGF0aWNfY2FzdDxTY29wZWRBcmd1bWVudHMqPihjZWxs
KTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBA
IC0xMTUsNiArMTE2LDggQEAgdm9pZCBTY29wZWRBcmd1bWVudHM6OnZpc2l0Q2hpbGRyZW4oSlND
ZQogICAgIH0KIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKFNjb3BlZEFyZ3VtZW50cyk7CisK
IFN0cnVjdHVyZSogU2NvcGVkQXJndW1lbnRzOjpjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKIHsKICAgICByZXR1
cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5m
byhTY29wZWRBcmd1bWVudHNUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29wZWRBcmd1bWVudHMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29wZWRBcmd1bWVudHMuaAkocmV2
aXNpb24gMjcxNzg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVkQXJn
dW1lbnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTYzLDkgKzYzLDkgQEAgcHVibGljOgogICAgIAog
ICAgIC8vIENyZWF0ZXMgYW4gYXJndW1lbnRzIG9iamVjdCBieSBjb3B5aW5nIHRoZSBhcmd1bWVu
dHMgZnJvbSBhIHdlbGwtZGVmaW5lZCBzdGFjayBsb2NhdGlvbi4KICAgICBzdGF0aWMgU2NvcGVk
QXJndW1lbnRzKiBjcmVhdGVCeUNvcHlpbmdGcm9tKFZNJiwgU3RydWN0dXJlKiwgUmVnaXN0ZXIq
IGFyZ3VtZW50c1N0YXJ0LCB1bnNpZ25lZCB0b3RhbExlbmd0aCwgSlNGdW5jdGlvbiogY2FsbGVl
LCBTY29wZWRBcmd1bWVudHNUYWJsZSosIEpTTGV4aWNhbEVudmlyb25tZW50Kik7Ci0gICAgCi0g
ICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwotICAg
IAorCisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKKwogICAgIHVpbnQzMl90IGludGVybmFs
TGVuZ3RoKCkgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiBtX3RvdGFsTGVuZ3RoOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xs
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NpbXBs
ZVR5cGVkQXJyYXlDb250cm9sbGVyLmNwcAkocmV2aXNpb24gMjcxNzg2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC02Miw3ICs2Miw3IEBAIGJvb2wgU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xs
ZXI6OmlzQXRvbWkKICAgICByZXR1cm4gbV9hbGxvd0F0b21pY3NXYWl0OwogfQogCi1ib29sIFNp
bXBsZVR5cGVkQXJyYXlDb250cm9sbGVyOjpKU0FycmF5QnVmZmVyT3duZXI6OmlzUmVhY2hhYmxl
RnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwg
SlNDOjpTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikKK2Jvb2wgU2lt
cGxlVHlwZWRBcnJheUNvbnRyb2xsZXI6OkpTQXJyYXlCdWZmZXJPd25lcjo6aXNSZWFjaGFibGVG
cm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBK
U0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCiB7
CiAgICAgaWYgKFVOTElLRUxZKHJlYXNvbikpCiAgICAgICAgICpyZWFzb24gPSAiSlNBcnJheUJ1
ZmZlciBpcyBvcGFxdWUgcm9vdCI7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1NpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyLmgJKHJldmlzaW9u
IDI3MTc4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NpbXBsZVR5cGVkQXJy
YXlDb250cm9sbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTU4LDcgKzU4LDcgQEAgcHVibGljOgog
cHJpdmF0ZToKICAgICBjbGFzcyBKU0FycmF5QnVmZmVyT3duZXIgZmluYWwgOiBwdWJsaWMgV2Vh
a0hhbmRsZU93bmVyIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIGJvb2wgaXNSZWFjaGFibGVGcm9t
T3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCwgU2xv
dFZpc2l0b3ImLCBjb25zdCBjaGFyKiogcmVhc29uKSBmaW5hbDsKKyAgICAgICAgYm9vbCBpc1Jl
YWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBj
b250ZXh0LCBBYnN0cmFjdFNsb3RWaXNpdG9yJiwgY29uc3QgY2hhcioqIHJlYXNvbikgZmluYWw7
CiAgICAgICAgIHZvaWQgZmluYWxpemUoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCog
Y29udGV4dCkgZmluYWw7CiAgICAgfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU21hbGxTdHJpbmdzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TbWFsbFN0cmluZ3MuY3BwCShyZXZpc2lvbiAyNzE3ODYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TbWFsbFN0cmluZ3MuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC02Niw3ICs2Niw3IEBAIHZvaWQgU21hbGxTdHJpbmdzOjppbml0aWFsaXplQ29tbW9uU3RyaW4K
ICAgICBzZXRJc0luaXRpYWxpemVkKHRydWUpOwogfQogCi12b2lkIFNtYWxsU3RyaW5nczo6dmlz
aXRTdHJvbmdSZWZlcmVuY2VzKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBTbWFsbFN0cmlu
Z3M6OnZpc2l0U3Ryb25nUmVmZXJlbmNlcyhBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQog
ewogICAgIG1fbmVlZHNUb0JlVmlzaXRlZCA9IGZhbHNlOwogICAgIHZpc2l0b3IuYXBwZW5kVW5i
YXJyaWVyZWQobV9lbXB0eVN0cmluZyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TbWFsbFN0cmluZ3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TbWFsbFN0cmluZ3MuaAkocmV2aXNpb24gMjcxNzg2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU21hbGxTdHJpbmdzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDkg
KzQ5LDkgQEAgY2xhc3MgU3RyaW5nSW1wbDsKIAogbmFtZXNwYWNlIEpTQyB7CiAKK2NsYXNzIEFi
c3RyYWN0U2xvdFZpc2l0b3I7CiBjbGFzcyBWTTsKIGNsYXNzIEpTU3RyaW5nOwotY2xhc3MgU2xv
dFZpc2l0b3I7CiAKIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbWF4U2luZ2xlQ2hhcmFjdGVy
U3RyaW5nID0gMHhGRjsKIApAQCAtNzgsNyArNzgsNyBAQCBwdWJsaWM6CiAgICAgSlNTdHJpbmcq
KiBzaW5nbGVDaGFyYWN0ZXJTdHJpbmdzKCkgeyByZXR1cm4gJm1fc2luZ2xlQ2hhcmFjdGVyU3Ry
aW5nc1swXTsgfQogCiAgICAgdm9pZCBpbml0aWFsaXplQ29tbW9uU3RyaW5ncyhWTSYpOwotICAg
IHZvaWQgdmlzaXRTdHJvbmdSZWZlcmVuY2VzKFNsb3RWaXNpdG9yJik7CisgICAgdm9pZCB2aXNp
dFN0cm9uZ1JlZmVyZW5jZXMoQWJzdHJhY3RTbG90VmlzaXRvciYpOwogCiAjZGVmaW5lIEpTQ19D
T01NT05fU1RSSU5HU19BQ0NFU1NPUl9ERUZJTklUSU9OKG5hbWUpIFwKICAgICBKU1N0cmluZyog
bmFtZSMjU3RyaW5nKCkgY29uc3QgICAgICAgICAgICAgICAgICAgXApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU3BhcnNlQXJyYXlWYWx1ZU1hcC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3BhcnNlQXJyYXlWYWx1ZU1hcC5jcHAJ
KHJldmlzaW9uIDI3MTc4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NwYXJz
ZUFycmF5VmFsdWVNYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTAsNyArMjEwLDggQEAgSlNW
YWx1ZSBTcGFyc2VBcnJheUVudHJ5OjpnZXROb25TcGFyc2VNbwogICAgIHJldHVybiBCYXNlOjpn
ZXQoKTsKIH0KIAotdm9pZCBTcGFyc2VBcnJheVZhbHVlTWFwOjp2aXNpdENoaWxkcmVuKEpTQ2Vs
bCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
Pgordm9pZCBTcGFyc2VBcnJheVZhbHVlTWFwOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNl
bGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCogdGhpc09i
amVjdCA9IGpzQ2FzdDxTcGFyc2VBcnJheVZhbHVlTWFwKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dD
X09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtMjIzLDUgKzIyNCw3IEBA
IHZvaWQgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6dmlzaXRDaGlsZHJlbigKICAgICB2aXNpdG9yLnJl
cG9ydEV4dHJhTWVtb3J5VmlzaXRlZCh0aGlzT2JqZWN0LT5tX3JlcG9ydGVkQ2FwYWNpdHkgKiBz
aXplb2YoTWFwOjpLZXlWYWx1ZVBhaXJUeXBlKSk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJF
TihTcGFyc2VBcnJheVZhbHVlTWFwKTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NwYXJzZUFycmF5VmFsdWVNYXAuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TcGFyc2VBcnJheVZhbHVlTWFw
LmgJKHJldmlzaW9uIDI3MTc4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Nw
YXJzZUFycmF5VmFsdWVNYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMTE1LDcgKzExNSw3IEBAIHB1
YmxpYzoKICAgICAKICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBK
U0dsb2JhbE9iamVjdCosIEpTVmFsdWUgcHJvdG90eXBlKTsKIAotICAgIHN0YXRpYyB2b2lkIHZp
c2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NI
SUxEUkVOOwogCiAgICAgYm9vbCBzcGFyc2VNb2RlKCkKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TdGFja0ZyYW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TdGFja0ZyYW1lLmNwcAkocmV2aXNpb24gMjcxNzg2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RhY2tGcmFtZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE0Miw3ICsxNDIsOCBAQCBTdHJpbmcgU3RhY2tGcmFtZTo6dG9TdHJpbmcoVk0m
IHZtKSBjb25zCiAgICAgcmV0dXJuIHRyYWNlQnVpbGQudG9TdHJpbmcoKS5pbXBsKCk7CiB9CiAK
LXZvaWQgU3RhY2tGcmFtZTo6dmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3Rl
bXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFN0YWNrRnJhbWU6OnZpc2l0Q2hpbGRyZW5J
bXBsKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgaWYgKG1fY2FsbGVlKQogICAgICAgICB2aXNp
dG9yLmFwcGVuZChtX2NhbGxlZSk7CkBAIC0xNTAsNSArMTUxLDcgQEAgdm9pZCBTdGFja0ZyYW1l
Ojp2aXNpdENoaWxkcmVuKFNsb3RWaXNpdAogICAgICAgICB2aXNpdG9yLmFwcGVuZChtX2NvZGVC
bG9jayk7CiB9CiAKK0RFRklORV9JTlNUQU5DRV9WSVNJVF9DSElMRFJFTihTdGFja0ZyYW1lKTsK
KwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1N0YWNrRnJhbWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TdGFja0ZyYW1lLmgJKHJldmlzaW9uIDI3MTc4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1N0YWNrRnJhbWUuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBA
QAogCiAjaW5jbHVkZSAiSGVhcC5oIgogI2luY2x1ZGUgIlZNLmgiCisjaW5jbHVkZSAiU2xvdFZp
c2l0b3JNYWNyb3MuaCIKICNpbmNsdWRlICJXYXNtSW5kZXhPck5hbWUuaCIKICNpbmNsdWRlICJX
cml0ZUJhcnJpZXIuaCIKICNpbmNsdWRlIDxsaW1pdHMuaD4KQEAgLTM1LDcgKzM2LDYgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAKIGNsYXNzIENvZGVCbG9jazsKIGNsYXNzIEpTT2JqZWN0OwotY2xhc3Mg
U2xvdFZpc2l0b3I7CiAKIGNsYXNzIFN0YWNrRnJhbWUgewogcHVibGljOgpAQCAtNTgsNyArNTgs
NyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX2J5dGVjb2RlSW5kZXg7CiAgICAgfQogICAg
IAotICAgIHZvaWQgdmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfSU5T
VEFOQ0VfVklTSVRfQ0hJTERSRU47CiAgICAgYm9vbCBpc01hcmtlZChWTSYgdm0pIGNvbnN0IHsg
cmV0dXJuICghbV9jYWxsZWUgfHwgdm0uaGVhcC5pc01hcmtlZChtX2NhbGxlZS5nZXQoKSkpICYm
ICghbV9jb2RlQmxvY2sgfHwgdm0uaGVhcC5pc01hcmtlZChtX2NvZGVCbG9jay5nZXQoKSkpOyB9
CiAKIHByaXZhdGU6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1
cmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVj
dHVyZS5jcHAJKHJldmlzaW9uIDI3MTc4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1N0cnVjdHVyZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNjcsNyArMTI2Nyw4IEBAIHZv
aWQgU3RydWN0dXJlOjpkaWRUcmFuc2l0aW9uRnJvbVRoaXNTdHIKICAgICAgICAgbV90cmFuc2l0
aW9uV2F0Y2hwb2ludFNldC5maXJlQWxsKHZtKCksIFN0cnVjdHVyZUZpcmVEZXRhaWwodGhpcykp
OwogfQogCi12b2lkIFN0cnVjdHVyZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgU3RydWN0
dXJlOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7
CiAgICAgU3RydWN0dXJlKiB0aGlzT2JqZWN0ID0ganNDYXN0PFN0cnVjdHVyZSo+KGNlbGwpOwog
ICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTEy
ODksMzIgKzEyOTAsNDYgQEAgdm9pZCBTdHJ1Y3R1cmU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBj
ZQogICAgICAgICAvLyBOT1RFOiBUaGlzIGNhbiBpbnRlcmxlYXZlIGluIHBpbigpLCBpbiB3aGlj
aCBjYXNlIGl0IG1heSBzZWUgYSBudWxsIHByb3BlcnR5IHRhYmxlLgogICAgICAgICAvLyBUaGF0
J3MgZmluZSwgYmVjYXVzZSB0aGVuIHRoZSBiYXJyaWVyIHdpbGwgZmlyZSBhbmQgd2Ugd2lsbCBz
Y2FuIHRoaXMgYWdhaW4uCiAgICAgICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fcHJv
cGVydHlUYWJsZVVuc2FmZSk7Ci0gICAgfSBlbHNlIGlmICh2aXNpdG9yLmlzQW5hbHl6aW5nSGVh
cCgpKQorICAgIH0gZWxzZSBpZiAodmlzaXRvci52bSgpLmlzQW5hbHl6aW5nSGVhcCgpKQogICAg
ICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX3Byb3BlcnR5VGFibGVVbnNhZmUpOwog
ICAgIGVsc2UgaWYgKHRoaXNPYmplY3QtPm1fcHJvcGVydHlUYWJsZVVuc2FmZSkKICAgICAgICAg
dGhpc09iamVjdC0+bV9wcm9wZXJ0eVRhYmxlVW5zYWZlLmNsZWFyKCk7CiB9CiAKLWJvb2wgU3Ry
dWN0dXJlOjppc0NoZWFwRHVyaW5nR0MoVk0mIHZtKQorREVGSU5FX1ZJU0lUX0NISUxEUkVOKFN0
cnVjdHVyZSk7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Citib29sIFN0cnVjdHVyZTo6
aXNDaGVhcER1cmluZ0dDKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgLy8gRklYTUU6IFdlIGNv
dWxkIG1ha2UgdGhpcyBldmVuIHNhZmVyIGJ5IHJldHVybmluZyBmYWxzZSBpZiB0aGlzIHN0cnVj
dHVyZSdzIHByb3BlcnR5IHRhYmxlCiAgICAgLy8gaGFzIGFueSBsYXJnZSBwcm9wZXJ0eSBuYW1l
cy4KICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU3MzM0
CiAgICAgCi0gICAgcmV0dXJuICghbV9nbG9iYWxPYmplY3QgfHwgdm0uaGVhcC5pc01hcmtlZCht
X2dsb2JhbE9iamVjdC5nZXQoKSkpCi0gICAgICAgICYmIChoYXNQb2x5UHJvdG8oKSB8fCAhc3Rv
cmVkUHJvdG90eXBlT2JqZWN0KCkgfHwgdm0uaGVhcC5pc01hcmtlZChzdG9yZWRQcm90b3R5cGVP
YmplY3QoKSkpOworICAgIHJldHVybiAoIW1fZ2xvYmFsT2JqZWN0IHx8IHZpc2l0b3IuaXNNYXJr
ZWQobV9nbG9iYWxPYmplY3QuZ2V0KCkpKQorICAgICAgICAmJiAoaGFzUG9seVByb3RvKCkgfHwg
IXN0b3JlZFByb3RvdHlwZU9iamVjdCgpIHx8IHZpc2l0b3IuaXNNYXJrZWQoc3RvcmVkUHJvdG90
eXBlT2JqZWN0KCkpKTsKIH0KIAotYm9vbCBTdHJ1Y3R1cmU6Om1hcmtJZkNoZWFwKFNsb3RWaXNp
dG9yJiB2aXNpdG9yKQotewotICAgIFZNJiB2bSA9IHZpc2l0b3Iudm0oKTsKLSAgICBpZiAoIWlz
Q2hlYXBEdXJpbmdHQyh2bSkpCi0gICAgICAgIHJldHVybiB2bS5oZWFwLmlzTWFya2VkKHRoaXMp
OwotICAgIAordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK2Jvb2wgU3RydWN0dXJlOjptYXJr
SWZDaGVhcDEoVmlzaXRvciYgdmlzaXRvcikKKy8vYm9vbCBTdHJ1Y3R1cmU6Om1hcmtJZkNoZWFw
MShBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworLy8gICAgVk0mIHZtID0gdmlzaXRv
ci52bSgpOworICAgIGlmICghaXNDaGVhcER1cmluZ0dDKHZpc2l0b3IpKQorLy8gICAgICAgIHJl
dHVybiB2bS5oZWFwLmlzTWFya2VkKHRoaXMpOyAvLyBtbGFtIEZJWE1FCisgICAgICAgIHJldHVy
biB2aXNpdG9yLmlzTWFya2VkKHRoaXMpOyAvLyBtbGFtIEZJWE1FCisKICAgICB2aXNpdG9yLmFw
cGVuZFVuYmFycmllcmVkKHRoaXMpOwogICAgIHJldHVybiB0cnVlOwogfQogCisvL3RlbXBsYXRl
PHR5cGVuYW1lIFZpc2l0b3I+CisvL2Jvb2wgU3RydWN0dXJlOjptYXJrSWZDaGVhcChWaXNpdG9y
JiB2aXNpdG9yKQorLy97CisvLyAgICByZXR1cm4gbWFya0lmQ2hlYXAxKHZpc2l0b3IpOyAvLyBt
bGFtIEZJWE1FIEhBQ0sgdG8gZ2V0IHRoaXMgY29tcGlsaW5nISEhCisvL30KK3RlbXBsYXRlIGJv
b2wgU3RydWN0dXJlOjptYXJrSWZDaGVhcDEoU2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIGJvb2wg
U3RydWN0dXJlOjptYXJrSWZDaGVhcDEoQWJzdHJhY3RTbG90VmlzaXRvciYpOworCiBSZWY8U3Ry
dWN0dXJlU2hhcGU+IFN0cnVjdHVyZTo6dG9TdHJ1Y3R1cmVTaGFwZShKU1ZhbHVlIHZhbHVlLCBi
b29sJiBzYXdQb2x5UHJvdG9TdHJ1Y3R1cmUpCiB7CiAgICAgUmVmPFN0cnVjdHVyZVNoYXBlPiBi
YXNlU2hhcGUgPSBTdHJ1Y3R1cmVTaGFwZTo6Y3JlYXRlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAkocmV2aXNpb24gMjcxNzg2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgJKHdvcmtpbmcgY29weSkKQEAgLTYw
LDcgKzYwLDYgQEAgY2xhc3MgUHJvcGVydHlOYW1lQXJyYXlEYXRhOwogY2xhc3MgUHJvcGVydHlU
YWJsZTsKIGNsYXNzIFN0cnVjdHVyZUNoYWluOwogY2xhc3MgU3RydWN0dXJlU2hhcGU7Ci1jbGFz
cyBTbG90VmlzaXRvcjsKIGNsYXNzIEpTU3RyaW5nOwogc3RydWN0IER1bXBDb250ZXh0Owogc3Ry
dWN0IEhhc2hUYWJsZTsKQEAgLTMwNyw3ICszMDYsNyBAQCBwdWJsaWM6CiAgICAgSlNWYWx1ZSBw
cm90b3R5cGVGb3JMb29rdXAoSlNHbG9iYWxPYmplY3QqLCBKU0NlbGwqIGJhc2UpIGNvbnN0Owog
ICAgIFN0cnVjdHVyZUNoYWluKiBwcm90b3R5cGVDaGFpbihWTSYsIEpTR2xvYmFsT2JqZWN0Kiwg
SlNPYmplY3QqIGJhc2UpIGNvbnN0OwogICAgIFN0cnVjdHVyZUNoYWluKiBwcm90b3R5cGVDaGFp
bihKU0dsb2JhbE9iamVjdCosIEpTT2JqZWN0KiBiYXNlKSBjb25zdDsKLSAgICBzdGF0aWMgdm9p
ZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJ
VF9DSElMRFJFTjsKICAgICAKICAgICAvLyBBIFN0cnVjdHVyZSBpcyBjaGVhcCB0byBtYXJrIGR1
cmluZyBHQyBpZiBkb2luZyBzbyB3b3VsZCBvbmx5IGFkZCBhIHNtYWxsIGFuZCBib3VuZGVkIGFt
b3VudAogICAgIC8vIHRvIG91ciBoZWFwIGZvb3RwcmludC4gRm9yIGV4YW1wbGUsIGlmIHRoZSBz
dHJ1Y3R1cmUgcmVmZXJzIHRvIGEgZ2xvYmFsIG9iamVjdCB0aGF0IGlzIG5vdApAQCAtMzE1LDEw
ICszMTQsMTIgQEAgcHVibGljOgogICAgIC8vIGluY3JlYXNlIGluIGZvb3RwcmludCBiZWNhdXNl
IG5vIG90aGVyIG9iamVjdCByZWZlcnMgdG8gdGhhdCBnbG9iYWwgb2JqZWN0LiBUaGlzIG1ldGhv
ZAogICAgIC8vIHJldHVybnMgdHJ1ZSBpZiBhbGwgdXNlci1jb250cm9sbGVkIChhbmQgaGVuY2Ug
dW5ib3VuZGVkIGluIHNpemUpIG9iamVjdHMgcmVmZXJlbmNlZCBmcm9tIHRoZQogICAgIC8vIFN0
cnVjdHVyZSBhcmUgYWxyZWFkeSBtYXJrZWQuCi0gICAgYm9vbCBpc0NoZWFwRHVyaW5nR0MoVk0m
KTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiBib29sIGlzQ2hlYXBEdXJpbmdHQyhW
aXNpdG9yJik7CiAgICAgCiAgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoaXMgc3RydWN0dXJlIGlz
IG5vdyBtYXJrZWQuCi0gICAgYm9vbCBtYXJrSWZDaGVhcChTbG90VmlzaXRvciYpOworLy8gICAg
dGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gYm9vbCBtYXJrSWZDaGVhcChWaXNpdG9yJik7Cisv
LyAgICBib29sIG1hcmtJZkNoZWFwMShBYnN0cmFjdFNsb3RWaXNpdG9yJik7CisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgVmlzaXRvcj4gYm9vbCBtYXJrSWZDaGVhcDEoVmlzaXRvciYpOyAvLyBtbGFt
IFRFU1QKICAgICAKICAgICBib29sIGhhc1JhcmVEYXRhKCkgY29uc3QKICAgICB7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVDaGFpbi5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlQ2hhaW4uY3BwCShy
ZXZpc2lvbiAyNzE3ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1
cmVDaGFpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY2LDcgKzY2LDggQEAgdm9pZCBTdHJ1Y3R1
cmVDaGFpbjo6ZmluaXNoQ3JlYXRpb24oVk0mIAogICAgIH0KIH0KIAotdm9pZCBTdHJ1Y3R1cmVD
aGFpbjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQor
dGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgU3RydWN0dXJlQ2hhaW46OnZpc2l0Q2hp
bGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBTdHJ1Y3R1
cmVDaGFpbiogdGhpc09iamVjdCA9IGpzQ2FzdDxTdHJ1Y3R1cmVDaGFpbio+KGNlbGwpOwogICAg
IEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTgwLDQg
KzgxLDYgQEAgdm9pZCBTdHJ1Y3R1cmVDaGFpbjo6dmlzaXRDaGlsZHJlbihKU0NlbAogICAgIH0K
IH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKFN0cnVjdHVyZUNoYWluKTsKKwogfSAvLyBuYW1l
c3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVD
aGFpbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVj
dHVyZUNoYWluLmgJKHJldmlzaW9uIDI3MTc4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1N0cnVjdHVyZUNoYWluLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxLDcgKzUxLDcgQEAg
cHVibGljOgogCiAgICAgc3RhdGljIFN0cnVjdHVyZUNoYWluKiBjcmVhdGUoVk0mLCBKU09iamVj
dCopOwogICAgIFN0cnVjdHVyZUlEKiBoZWFkKCkgeyByZXR1cm4gbV92ZWN0b3IuZ2V0KCk7IH0K
LSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7Cisg
ICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0
ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUg
cHJvdG90eXBlKQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0
cnVjdHVyZVJhcmVEYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TdHJ1Y3R1cmVSYXJlRGF0YS5jcHAJKHJldmlzaW9uIDI3MTc4NikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZVJhcmVEYXRhLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNjcsNyArNjcsOCBAQCBTdHJ1Y3R1cmVSYXJlRGF0YTo6U3RydWN0dXJlUmFyZURh
dGEoVk0mCiAgICAgICAgIG1fcHJldmlvdXMuc2V0KHZtLCB0aGlzLCBwcmV2aW91cyk7CiB9CiAK
LXZvaWQgU3RydWN0dXJlUmFyZURhdGE6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90
VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFN0cnVj
dHVyZVJhcmVEYXRhOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZp
c2l0b3IpCiB7CiAgICAgU3RydWN0dXJlUmFyZURhdGEqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8U3Ry
dWN0dXJlUmFyZURhdGEqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRo
aXNPYmplY3QsIGluZm8oKSk7CkBAIC04Niw2ICs4Nyw4IEBAIHZvaWQgU3RydWN0dXJlUmFyZURh
dGE6OnZpc2l0Q2hpbGRyZW4oSlMKICAgICB9CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihT
dHJ1Y3R1cmVSYXJlRGF0YSk7CisKIC8vIC0tLS0tLS0tLS0tIENhY2hlZCBzcGVjaWFsIHByb3Bl
cnRpZXMgaGVscGVyIHdhdGNocG9pbnQgY2xhc3NlcyAtLS0tLS0tLS0tLQogCiBjbGFzcyBDYWNo
ZWRTcGVjaWFsUHJvcGVydHlBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQg
ZmluYWwgOiBwdWJsaWMgQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50QmFz
ZSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVSYXJlRGF0
YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVy
ZVJhcmVEYXRhLmgJKHJldmlzaW9uIDI3MTc4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1N0cnVjdHVyZVJhcmVEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTY4LDcgKzY4LDcg
QEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0Rlc3RydWN0aW9uID0g
dHJ1ZTsKICAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwogCi0gICAgc3RhdGljIHZv
aWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklT
SVRfQ0hJTERSRU47CiAKICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0m
LCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUgcHJvdG90eXBlKTsKIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJvbFRhYmxlLmNwcAkocmV2aXNpb24gMjcxNzg2
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFibGUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC05Miw3ICs5Miw4IEBAIHZvaWQgU3ltYm9sVGFibGU6OmZpbmlzaENyZWF0
aW9uKFZNJiB2bSkKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CiB9CiAKLXZvaWQgU3lt
Ym9sVGFibGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiB0aGlzQ2VsbCwgU2xvdFZpc2l0b3ImIHZp
c2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBTeW1ib2xUYWJsZTo6dmlz
aXRDaGlsZHJlbkltcGwoSlNDZWxsKiB0aGlzQ2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAg
ICBTeW1ib2xUYWJsZSogdGhpc1N5bWJvbFRhYmxlID0ganNDYXN0PFN5bWJvbFRhYmxlKj4odGhp
c0NlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc1N5bWJvbFRhYmxlLCBp
bmZvKCkpOwpAQCAtMTA4LDYgKzEwOSw4IEBAIHZvaWQgU3ltYm9sVGFibGU6OnZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKiAKICAgICB0aGlzU3ltYm9sVGFibGUtPm1fbG9jYWxUb0VudHJ5ID0gbnVsbHB0
cjsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKFN5bWJvbFRhYmxlKTsKKwogY29uc3QgU3lt
Ym9sVGFibGU6OkxvY2FsVG9FbnRyeVZlYyYgU3ltYm9sVGFibGU6OmxvY2FsVG9FbnRyeShjb25z
dCBDb25jdXJyZW50SlNMb2NrZXImKQogewogICAgIGlmIChVTkxJS0VMWSghbV9sb2NhbFRvRW50
cnkpKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TeW1ib2xUYWJsZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJvbFRhYmxl
LmgJKHJldmlzaW9uIDI3MTc4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5
bWJvbFRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTczMyw3ICs3MzMsNyBAQCBwdWJsaWM6CiAg
ICAgICAgIG1fc2luZ2xldG9uLm5vdGlmeVdyaXRlKHZtLCB0aGlzLCBzY29wZSwgcmVhc29uKTsK
ICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNp
dG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIERFQ0xBUkVfRVhQT1JU
X0lORk87CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVQcm9maWxl
ckxvZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlw
ZVByb2ZpbGVyTG9nLmNwcAkocmV2aXNpb24gMjcxNzg2KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvVHlwZVByb2ZpbGVyTG9nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI0LDcg
KzEyNCw3IEBAIHZvaWQgVHlwZVByb2ZpbGVyTG9nOjpwcm9jZXNzTG9nRW50cmllcygKICAgICB9
CiB9CiAKLXZvaWQgVHlwZVByb2ZpbGVyTG9nOjp2aXNpdChTbG90VmlzaXRvciYgdmlzaXRvcikK
K3ZvaWQgVHlwZVByb2ZpbGVyTG9nOjp2aXNpdChBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9y
KQogewogICAgIGZvciAoTG9nRW50cnkqIGVudHJ5ID0gbV9sb2dTdGFydFB0cjsgZW50cnkgIT0g
bV9jdXJyZW50TG9nRW50cnlQdHI7ICsrZW50cnkpIHsKICAgICAgICAgdmlzaXRvci5hcHBlbmRV
bmJhcnJpZXJlZChlbnRyeS0+dmFsdWUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvVHlwZVByb2ZpbGVyTG9nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvVHlwZVByb2ZpbGVyTG9nLmgJKHJldmlzaW9uIDI3MTc4NikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVQcm9maWxlckxvZy5oCSh3b3JraW5nIGNvcHkp
CkBAIC01OSw3ICs1OSw3IEBAIHB1YmxpYzoKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHBy
b2Nlc3NMb2dFbnRyaWVzKFZNJiwgY29uc3QgU3RyaW5nJik7CiAgICAgTG9nRW50cnkqIGxvZ0Vu
ZFB0cigpIGNvbnN0IHsgcmV0dXJuIG1fbG9nRW5kUHRyOyB9CiAKLSAgICB2b2lkIHZpc2l0KFNs
b3RWaXNpdG9yJik7CisgICAgdm9pZCB2aXNpdChBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAKICAg
ICBzdGF0aWMgcHRyZGlmZl90IGxvZ1N0YXJ0T2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNF
VE9GKFR5cGVQcm9maWxlckxvZywgbV9sb2dTdGFydFB0cik7IH0KICAgICBzdGF0aWMgcHRyZGlm
Zl90IGN1cnJlbnRMb2dFbnRyeU9mZnNldCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihUeXBl
UHJvZmlsZXJMb2csIG1fY3VycmVudExvZ0VudHJ5UHRyKTsgfQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvVk0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9WTS5oCShyZXZpc2lvbiAyNzE3ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9WTS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjEsNiArMTIxLDcgQEAgY2xhc3Mg
RmFzdE1hbGxvY0FsaWduZWRNZW1vcnlBbGxvY2F0b3I7CiBjbGFzcyBHaWdhY2FnZUFsaWduZWRN
ZW1vcnlBbGxvY2F0b3I7CiBjbGFzcyBIYW5kbGVTdGFjazsKIGNsYXNzIEhhc093blByb3BlcnR5
Q2FjaGU7CitjbGFzcyBIZWFwQW5hbHl6ZXI7CiBjbGFzcyBIZWFwUHJvZmlsZXI7CiBjbGFzcyBJ
ZGVudGlmaWVyOwogY2xhc3MgSW50ZXJwcmV0ZXI7CkBAIC0zMTAsNiArMzExLDEwIEBAIHB1Ymxp
YzoKICAgICBIZWFwUHJvZmlsZXIqIGhlYXBQcm9maWxlcigpIGNvbnN0IHsgcmV0dXJuIG1faGVh
cFByb2ZpbGVyLmdldCgpOyB9CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgSGVhcFByb2ZpbGVyJiBl
bnN1cmVIZWFwUHJvZmlsZXIoKTsKIAorICAgIGJvb2wgaXNBbmFseXppbmdIZWFwKCkgY29uc3Qg
eyByZXR1cm4gbV9hY3RpdmVIZWFwQW5hbHl6ZXI7IH0KKyAgICBIZWFwQW5hbHl6ZXIqIGFjdGl2
ZUhlYXBBbmFseXplcigpIGNvbnN0IHsgcmV0dXJuIG1fYWN0aXZlSGVhcEFuYWx5emVyOyB9Cisg
ICAgdm9pZCBzZXRBY3RpdmVIZWFwQW5hbHl6ZXIoSGVhcEFuYWx5emVyKiBhbmFseXplcikgeyBt
X2FjdGl2ZUhlYXBBbmFseXplciA9IGFuYWx5emVyOyB9CisKICNpZiBFTkFCTEUoU0FNUExJTkdf
UFJPRklMRVIpCiAgICAgU2FtcGxpbmdQcm9maWxlciogc2FtcGxpbmdQcm9maWxlcigpIHsgcmV0
dXJuIG1fc2FtcGxpbmdQcm9maWxlci5nZXQoKTsgfQogICAgIEpTX0VYUE9SVF9QUklWQVRFIFNh
bXBsaW5nUHJvZmlsZXImIGVuc3VyZVNhbXBsaW5nUHJvZmlsZXIoUmVmPFN0b3B3YXRjaD4mJik7
CkBAIC0xMTkyLDkgKzExOTcsMTAgQEAgcHVibGljOgogICAgIGJvb2wgZGlkRW50ZXJWTSB7IGZh
bHNlIH07CiBwcml2YXRlOgogICAgIGJvb2wgbV9mYWlsTmV4dE5ld0NvZGVCbG9jayB7IGZhbHNl
IH07Ci0gICAgRGVsZXRlUHJvcGVydHlNb2RlIG1fZGVsZXRlUHJvcGVydHlNb2RlIHsgRGVsZXRl
UHJvcGVydHlNb2RlOjpEZWZhdWx0IH07CiAgICAgYm9vbCBtX2dsb2JhbENvbnN0UmVkZWNsYXJh
dGlvblNob3VsZFRocm93IHsgdHJ1ZSB9OwogICAgIGJvb2wgbV9zaG91bGRCdWlsZFBDVG9Db2Rl
T3JpZ2luTWFwcGluZyB7IGZhbHNlIH07CisgICAgRGVsZXRlUHJvcGVydHlNb2RlIG1fZGVsZXRl
UHJvcGVydHlNb2RlIHsgRGVsZXRlUHJvcGVydHlNb2RlOjpEZWZhdWx0IH07CisgICAgSGVhcEFu
YWx5emVyKiBtX2FjdGl2ZUhlYXBBbmFseXplciB7IG51bGxwdHIgfTsKICAgICBzdGQ6OnVuaXF1
ZV9wdHI8Q29kZUNhY2hlPiBtX2NvZGVDYWNoZTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SW50bENh
Y2hlPiBtX2ludGxDYWNoZTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8QnVpbHRpbkV4ZWN1dGFibGVz
PiBtX2J1aWx0aW5FeGVjdXRhYmxlczsKQEAgLTEyMzUsNiArMTI0MSw3IEBAIHByaXZhdGU6CiAg
ICAgVk0qIG1fcHJldjsgLy8gUmVxdWlyZWQgYnkgRG91Ymx5TGlua2VkTGlzdE5vZGUuCiAgICAg
Vk0qIG1fbmV4dDsgLy8gUmVxdWlyZWQgYnkgRG91Ymx5TGlua2VkTGlzdE5vZGUuCiAKK3B1Ymxp
YzoKICAgICAvLyBGcmllbmRzIGZvciBleGNlcHRpb24gY2hlY2tpbmcgcHVycG9zZSBvbmx5Lgog
ICAgIGZyaWVuZCBjbGFzcyBIZWFwOwogICAgIGZyaWVuZCBjbGFzcyBDYXRjaFNjb3BlOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha01hcEltcGwuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtNYXBJbXBsLmNwcAkocmV2
aXNpb24gMjcxNzg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha01hcElt
cGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw4ICszOSw5IEBAIHZvaWQgV2Vha01hcEltcGw8
V2Vha01hcEJ1Y2tldD46OmRlc3Ryb3kKICAgICBzdGF0aWNfY2FzdDxXZWFrTWFwSW1wbCo+KGNl
bGwpLT5+V2Vha01hcEltcGwoKTsKIH0KIAotdGVtcGxhdGUgPHR5cGVuYW1lIFdlYWtNYXBCdWNr
ZXQ+Ci12b2lkIFdlYWtNYXBJbXBsPFdlYWtNYXBCdWNrZXQ+Ojp2aXNpdENoaWxkcmVuKEpTQ2Vs
bCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBXZWFrTWFw
QnVja2V0PgordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgV2Vha01hcEltcGw8V2Vh
a01hcEJ1Y2tldD46OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlz
aXRvcikKIHsKICAgICBXZWFrTWFwSW1wbCogdGhpc09iamVjdCA9IGpzQ2FzdDxXZWFrTWFwSW1w
bCo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5m
bygpKTsKQEAgLTQ4LDYgKzQ5LDggQEAgdm9pZCBXZWFrTWFwSW1wbDxXZWFrTWFwQnVja2V0Pjo6
dmlzaXRDaAogICAgIHZpc2l0b3IucmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKHRoaXNPYmplY3Qt
Pm1fY2FwYWNpdHkgKiBzaXplb2YoV2Vha01hcEJ1Y2tldCkpOwogfQogCitERUZJTkVfVEVNUExB
VEVfVklTSVRfQ0hJTERSRU4odGVtcGxhdGU8dHlwZW5hbWUgV2Vha01hcEJ1Y2tldD4sIFdlYWtN
YXBJbXBsPFdlYWtNYXBCdWNrZXQ+KTsKKwogdGVtcGxhdGUgPHR5cGVuYW1lIFdlYWtNYXBCdWNr
ZXQ+CiBzaXplX3QgV2Vha01hcEltcGw8V2Vha01hcEJ1Y2tldD46OmVzdGltYXRlZFNpemUoSlND
ZWxsKiBjZWxsLCBWTSYgdm0pCiB7CkBAIC01NiwxNSArNTksMTUgQEAgc2l6ZV90IFdlYWtNYXBJ
bXBsPFdlYWtNYXBCdWNrZXQ+Ojplc3RpbQogfQogCiB0ZW1wbGF0ZSA8Pgotdm9pZCBXZWFrTWFw
SW1wbDxXZWFrTWFwQnVja2V0PFdlYWtNYXBCdWNrZXREYXRhS2V5Pj46OnZpc2l0T3V0cHV0Q29u
c3RyYWludHMoSlNDZWxsKiwgU2xvdFZpc2l0b3ImKQordm9pZCBXZWFrTWFwSW1wbDxXZWFrTWFw
QnVja2V0PFdlYWtNYXBCdWNrZXREYXRhS2V5Pj46OnZpc2l0T3V0cHV0Q29uc3RyYWludHMoSlND
ZWxsKiwgQWJzdHJhY3RTbG90VmlzaXRvciYpCiB7CiAgICAgLy8gT25seSBKU1dlYWtNYXAgbmVl
ZHMgdG8gaGFydmVzdCB2YWx1ZSByZWZlcmVuY2VzCiB9CiAKIHRlbXBsYXRlIDw+Ci12b2lkIFdl
YWtNYXBJbXBsPFdlYWtNYXBCdWNrZXQ8V2Vha01hcEJ1Y2tldERhdGFLZXlWYWx1ZT4+Ojp2aXNp
dE91dHB1dENvbnN0cmFpbnRzKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2
b2lkIFdlYWtNYXBJbXBsPFdlYWtNYXBCdWNrZXQ8V2Vha01hcEJ1Y2tldERhdGFLZXlWYWx1ZT4+
Ojp2aXNpdE91dHB1dENvbnN0cmFpbnRzKEpTQ2VsbCogY2VsbCwgQWJzdHJhY3RTbG90VmlzaXRv
ciYgdmlzaXRvcikKIHsKLSAgICBWTSYgdm0gPSB2aXNpdG9yLnZtKCk7CisvLyAgICBWTSYgdm0g
PSB2aXNpdG9yLnZtKCk7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxXZWFrTWFwSW1w
bCo+KGNlbGwpOwogICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sodGhpc09iamVjdC0+Y2VsbExv
Y2soKSk7CiAgICAgYXV0byogYnVmZmVyID0gdGhpc09iamVjdC0+YnVmZmVyKCk7CkBAIC03Miw3
ICs3NSw4IEBAIHZvaWQgV2Vha01hcEltcGw8V2Vha01hcEJ1Y2tldDxXZWFrTWFwQnUKICAgICAg
ICAgYXV0byogYnVja2V0ID0gYnVmZmVyICsgaW5kZXg7CiAgICAgICAgIGlmIChidWNrZXQtPmlz
RW1wdHkoKSB8fCBidWNrZXQtPmlzRGVsZXRlZCgpKQogICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgIGlmICghdm0uaGVhcC5pc01hcmtlZChidWNrZXQtPmtleSgpKSkKKy8vICAgICAgICBp
ZiAoIXZtLmhlYXAuaXNNYXJrZWQoYnVja2V0LT5rZXkoKSkpIC8vIG1sYW0KKyAgICAgICAgaWYg
KCF2aXNpdG9yLmlzTWFya2VkKGJ1Y2tldC0+a2V5KCkpKQogICAgICAgICAgICAgY29udGludWU7
CiAgICAgICAgIGJ1Y2tldC0+dmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7CiAgICAgfQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha01hcEltcGwuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9XZWFrTWFwSW1wbC5oCShyZXZpc2lvbiAy
NzE3ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9XZWFrTWFwSW1wbC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xNDQsOCArMTQ0LDEwIEBAIHB1YmxpYzoKICAgICAgICAgY2xlYXJW
YWx1ZSgpOwogICAgIH0KIAorLy8gICAgdGVtcGxhdGUgPHR5cGVuYW1lIFZpc2l0b3IsIHR5cGVu
YW1lIFQgPSBEYXRhPgorLy8gICAgQUxXQVlTX0lOTElORSB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9p
ZjxzdGQ6OmlzX3NhbWU8VCwgV2Vha01hcEJ1Y2tldERhdGFLZXlWYWx1ZT46OnZhbHVlPjo6dHlw
ZSB2aXNpdEFnZ3JlZ2F0ZShWaXNpdG9yJiB2aXNpdG9yKQogICAgIHRlbXBsYXRlIDx0eXBlbmFt
ZSBUID0gRGF0YT4KLSAgICBBTFdBWVNfSU5MSU5FIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0
ZDo6aXNfc2FtZTxULCBXZWFrTWFwQnVja2V0RGF0YUtleVZhbHVlPjo6dmFsdWU+Ojp0eXBlIHZp
c2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorICAgIEFMV0FZU19JTkxJTkUgdHlw
ZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19zYW1lPFQsIFdlYWtNYXBCdWNrZXREYXRhS2V5
VmFsdWU+Ojp2YWx1ZT46OnR5cGUgdmlzaXRBZ2dyZWdhdGUoQWJzdHJhY3RTbG90VmlzaXRvciYg
dmlzaXRvcikKICAgICB7CiAgICAgICAgIHZpc2l0b3IuYXBwZW5kKG1fZGF0YS52YWx1ZSk7CiAg
ICAgfQpAQCAtMjAyLDcgKzIwNCw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgbmVlZHNEZXN0cnVjdGlvbiA9IHRydWU7CiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0Nl
bGwqKTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0
b3ImKTsKKyAgICBERUNMQVJFX1RFTVBMQVRFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgc3RhdGlj
IHNpemVfdCBlc3RpbWF0ZWRTaXplKEpTQ2VsbCosIFZNJik7CiAKQEAgLTMxMSw3ICszMTMsNyBA
QCBwdWJsaWM6CiAgICAgICAgIHJldHVybiB2bS53ZWFrU2V0U3BhY2U8bW9kZT4oKTsKICAgICB9
CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdE91dHB1dENvbnN0cmFpbnRzKEpTQ2VsbCosIFNsb3RW
aXNpdG9yJik7CisgICAgc3RhdGljIHZvaWQgdmlzaXRPdXRwdXRDb25zdHJhaW50cyhKU0NlbGwq
LCBBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAgICAgdm9pZCBmaW5hbGl6ZVVuY29uZGl0aW9uYWxs
eShWTSYpOwogCiBwcml2YXRlOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0pT
RG9sbGFyVk0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9K
U0RvbGxhclZNLmNwcAkocmV2aXNpb24gMjcxNzg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3Rvb2xzL0pTRG9sbGFyVk0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjIsMTQgKzIyMiw3IEBA
IHB1YmxpYzoKIAogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBSb290Kik7CiAKLSAgICBz
dGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0
b3IpCi0gICAgewotICAgICAgICBEb2xsYXJWTUFzc2VydFNjb3BlIGFzc2VydFNjb3BlOwotICAg
ICAgICBFbGVtZW50KiB0aGlzT2JqZWN0ID0ganNDYXN0PEVsZW1lbnQqPihjZWxsKTsKLSAgICAg
ICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwotICAgICAg
ICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwotICAgICAgICB2aXNp
dG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX3Jvb3QpOwotICAgIH0KKyAgICBERUNMQVJFX1ZJU0lU
X0NISUxEUkVOOwogCiAgICAgc3RhdGljIEVsZW1lbnRIYW5kbGVPd25lciogaGFuZGxlT3duZXIo
KTsKIApAQCAtMjQ1LDEwICsyMzgsMjIgQEAgcHJpdmF0ZToKICAgICBXcml0ZUJhcnJpZXI8Um9v
dD4gbV9yb290OwogfTsKIAordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgRWxlbWVu
dDo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQorewor
ICAgIERvbGxhclZNQXNzZXJ0U2NvcGUgYXNzZXJ0U2NvcGU7CisgICAgRWxlbWVudCogdGhpc09i
amVjdCA9IGpzQ2FzdDxFbGVtZW50Kj4oY2VsbCk7CisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhF
UklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOworICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09i
amVjdCwgdmlzaXRvcik7CisgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9yb290KTsK
K30KKworREVGSU5FX1ZJU0lUX0NISUxEUkVOKEVsZW1lbnQpOworCiBjbGFzcyBFbGVtZW50SGFu
ZGxlT3duZXIgZmluYWwgOiBwdWJsaWMgV2Vha0hhbmRsZU93bmVyIHsKICAgICBXVEZfTUFLRV9G
QVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJv
b3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgU2xvdFZpc2l0b3Im
IHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pIGZpbmFsCisgICAgYm9vbCBpc1JlYWNoYWJs
ZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCos
IEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pIGZpbmFs
CiAgICAgewogICAgICAgICBEb2xsYXJWTUFzc2VydFNjb3BlIGFzc2VydFNjb3BlOwogICAgICAg
ICBpZiAoVU5MSUtFTFkocmVhc29uKSkKQEAgLTMwMiwxOCArMzA3LDIzIEBAIHB1YmxpYzoKICAg
ICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlw
ZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwogICAgIH0K
IAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiB0aGlzT2JqZWN0LCBTbG90
VmlzaXRvciYgdmlzaXRvcikKLSAgICB7Ci0gICAgICAgIERvbGxhclZNQXNzZXJ0U2NvcGUgYXNz
ZXJ0U2NvcGU7Ci0gICAgICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwg
aW5mbygpKTsKLSAgICAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9y
KTsKLSAgICAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHRoaXNPYmplY3QpOwotICAgIH0KKyAg
ICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiBwcml2YXRlOgogICAgIFdlYWs8RWxlbWVudD4g
bV9lbGVtZW50OwogfTsKIAordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgUm9vdDo6
dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiB0aGlzT2JqZWN0LCBWaXNpdG9yJiB2aXNpdG9yKQor
eworICAgIERvbGxhclZNQXNzZXJ0U2NvcGUgYXNzZXJ0U2NvcGU7CisgICAgQVNTRVJUX0dDX09C
SkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOworICAgIEJhc2U6OnZpc2l0Q2hpbGRy
ZW4odGhpc09iamVjdCwgdmlzaXRvcik7CisgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHRoaXNP
YmplY3QpOworfQorCitERUZJTkVfVklTSVRfQ0hJTERSRU4oUm9vdCk7CisKIGNsYXNzIFNpbXBs
ZU9iamVjdCA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKIHB1YmxpYzoKICAgICBTaW1wbGVP
YmplY3QoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKQEAgLTMzOCwxNCArMzQ4LDcgQEAg
cHVibGljOgogICAgICAgICByZXR1cm4gc2ltcGxlT2JqZWN0OwogICAgIH0KIAotICAgIHN0YXRp
YyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikK
LSAgICB7Ci0gICAgICAgIERvbGxhclZNQXNzZXJ0U2NvcGUgYXNzZXJ0U2NvcGU7Ci0gICAgICAg
IFNpbXBsZU9iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxTaW1wbGVPYmplY3QqPihjZWxsKTsK
LSAgICAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwot
ICAgICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwotICAgICAg
ICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2hpZGRlblZhbHVlKTsKLSAgICB9CisgICAg
REVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0
cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJv
dG90eXBlKQogICAgIHsKQEAgLTM3OCw2ICszODEsMTggQEAgcHJpdmF0ZToKICAgICBXcml0ZUJh
cnJpZXI8SlNDOjpVbmtub3duPiBtX2hpZGRlblZhbHVlOwogfTsKIAordGVtcGxhdGU8dHlwZW5h
bWUgVmlzaXRvcj4KK3ZvaWQgU2ltcGxlT2JqZWN0Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwq
IGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgRG9sbGFyVk1Bc3NlcnRTY29wZSBhc3Nl
cnRTY29wZTsKKyAgICBTaW1wbGVPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8U2ltcGxlT2Jq
ZWN0Kj4oY2VsbCk7CisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBp
bmZvKCkpOworICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7Cisg
ICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9oaWRkZW5WYWx1ZSk7Cit9CisKK0RFRklO
RV9WSVNJVF9DSElMRFJFTihTaW1wbGVPYmplY3QpOworCiBjbGFzcyBJbXB1cmVHZXR0ZXIgOiBw
dWJsaWMgSlNOb25GaW5hbE9iamVjdCB7CiBwdWJsaWM6CiAgICAgSW1wdXJlR2V0dGVyKFZNJiB2
bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCkBAIC00MzQsMTQgKzQ0OSw3IEBAIHB1YmxpYzoKICAg
ICAgICAgcmV0dXJuIEJhc2U6OmdldE93blByb3BlcnR5U2xvdChvYmplY3QsIGdsb2JhbE9iamVj
dCwgbmFtZSwgc2xvdCk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihK
U0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQotICAgIHsKLSAgICAgICAgRG9sbGFy
Vk1Bc3NlcnRTY29wZSBhc3NlcnRTY29wZTsKLSAgICAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhF
UklUUyhjZWxsLCBpbmZvKCkpOwotICAgICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKGNlbGwsIHZp
c2l0b3IpOwotICAgICAgICBJbXB1cmVHZXR0ZXIqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SW1wdXJl
R2V0dGVyKj4oY2VsbCk7Ci0gICAgICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fZGVs
ZWdhdGUpOwotICAgIH0KKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgdm9pZCBz
ZXREZWxlZ2F0ZShWTSYgdm0sIEpTT2JqZWN0KiBkZWxlZ2F0ZSkKICAgICB7CkBAIC00NTIsNiAr
NDYwLDE4IEBAIHByaXZhdGU6CiAgICAgV3JpdGVCYXJyaWVyPEpTT2JqZWN0PiBtX2RlbGVnYXRl
OwogfTsKIAordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSW1wdXJlR2V0dGVyOjp2
aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAg
RG9sbGFyVk1Bc3NlcnRTY29wZSBhc3NlcnRTY29wZTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lO
SEVSSVRTKGNlbGwsIGluZm8oKSk7CisgICAgQmFzZTo6dmlzaXRDaGlsZHJlbihjZWxsLCB2aXNp
dG9yKTsKKyAgICBJbXB1cmVHZXR0ZXIqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SW1wdXJlR2V0dGVy
Kj4oY2VsbCk7CisgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9kZWxlZ2F0ZSk7Cit9
CisKK0RFRklORV9WSVNJVF9DSElMRFJFTihJbXB1cmVHZXR0ZXIpOworCiBzdGF0aWMgSlNDX0RF
Q0xBUkVfQ1VTVE9NX0dFVFRFUihjdXN0b21HZXR0ZXJWYWx1ZUdldHRlcik7CiBzdGF0aWMgSlND
X0RFQ0xBUkVfQ1VTVE9NX0dFVFRFUihjdXN0b21HZXR0ZXJBY2Vzc29yR2V0dGVyKTsKIApAQCAt
MzU2MywxMyArMzU4MywxNiBAQCB2b2lkIEpTRG9sbGFyVk06OmFkZENvbnN0cnVjdGlibGVGdW5j
dGlvCiAgICAgcHV0RGlyZWN0KHZtLCBpZGVudGlmaWVyLCBKU0Z1bmN0aW9uOjpjcmVhdGUodm0s
IGdsb2JhbE9iamVjdCwgYXJndW1lbnRzLCBpZGVudGlmaWVyLnN0cmluZygpLCBmdW5jdGlvbiwg
Tm9JbnRyaW5zaWMsIGZ1bmN0aW9uKSwganNEb2xsYXJWTVByb3BlcnR5QXR0cmlidXRlcyk7CiB9
CiAKLXZvaWQgSlNEb2xsYXJWTTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNp
dG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNEb2xsYXJW
TTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewog
ICAgIEpTRG9sbGFyVk0qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNEb2xsYXJWTSo+KGNlbGwpOwog
ICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CiAgICAgdmlzaXRv
ci5hcHBlbmQodGhpc09iamVjdC0+bV9vYmplY3REb2luZ1NpZGVFZmZlY3RQdXRXaXRob3V0Q29y
cmVjdFNsb3RTdGF0dXNTdHJ1Y3R1cmUpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNE
b2xsYXJWTSk7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiBJR05PUkVfV0FSTklOR1NfRU5ECklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvSlNEb2xsYXJWTS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9KU0RvbGxhclZNLmgJKHJldmlzaW9uIDI3
MTc4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9KU0RvbGxhclZNLmgJKHdvcmtp
bmcgY29weSkKQEAgLTc0LDcgKzc0LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGFkZEZ1bmN0aW9u
KFZNJiwgSlNHbG9iYWxPYmplY3QqLCBjb25zdCBjaGFyKiBuYW1lLCBOYXRpdmVGdW5jdGlvbiwg
dW5zaWduZWQgYXJndW1lbnRzKTsKICAgICB2b2lkIGFkZENvbnN0cnVjdGlibGVGdW5jdGlvbihW
TSYsIEpTR2xvYmFsT2JqZWN0KiwgY29uc3QgY2hhciogbmFtZSwgTmF0aXZlRnVuY3Rpb24sIHVu
c2lnbmVkIGFyZ3VtZW50cyk7CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2Vs
bCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIFdy
aXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1fb2JqZWN0RG9pbmdTaWRlRWZmZWN0UHV0V2l0aG91dENv
cnJlY3RTbG90U3RhdHVzU3RydWN0dXJlOwogfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21HbG9iYWwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21HbG9iYWwuY3BwCShyZXZpc2lvbiAyNzE3ODYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtR2xvYmFsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAzLDcgKzEw
Myw4IEBAIHZvaWQgR2xvYmFsOjpzZXQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE8KICAgICB9CiB9
CiAKLXZvaWQgR2xvYmFsOjp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYgdmlzaXRvcikKK3Rl
bXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEdsb2JhbDo6dmlzaXRBZ2dyZWdhdGUoVmlz
aXRvciYgdmlzaXRvcikKIHsKICAgICBzd2l0Y2ggKG1fdHlwZSkgewogICAgIGNhc2UgV2FzbTo6
VHlwZTo6RXh0ZXJucmVmOgpAQCAtMTE3LDYgKzExOCw5IEBAIHZvaWQgR2xvYmFsOjp2aXNpdEFn
Z3JlZ2F0ZShTbG90VmlzaXRvciYKICAgICB9CiB9CiAKK3RlbXBsYXRlIHZvaWQgR2xvYmFsOjp2
aXNpdEFnZ3JlZ2F0ZShBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEdsb2Jh
bDo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImKTsKKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6
Okdsb2JhbAogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbUdsb2JhbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21HbG9iYWwuaAkocmV2aXNpb24gMjcxNzg2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUdsb2JhbC5oCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw3
ICs1Nyw3IEBAIHB1YmxpYzoKICAgICBKU1ZhbHVlIGdldChKU0dsb2JhbE9iamVjdCopIGNvbnN0
OwogICAgIHVpbnQ2NF90IGdldFByaW1pdGl2ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWUubV9w
cmltaXRpdmU7IH0KICAgICB2b2lkIHNldChKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUpOwotICAg
IHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBWaXNpdG9yPiB2b2lkIHZpc2l0QWdncmVnYXRlKFZpc2l0b3ImKTsKIAogICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFQ+IFQqIG93bmVyKCkgY29uc3QgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxU
Kj4obV9vd25lcik7IH0KICAgICB2b2lkIHNldE93bmVyKEpTT2JqZWN0KiBvd25lcikKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UYWJsZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRhYmxlLmNwcAkocmV2aXNpb24gMjcxNzg2
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRhYmxlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTY2LDcgKzE2Niw4IEBAIEpTVmFsdWUgVGFibGU6OmdldCh1aW50MzJfdCBpbmRl
eCkgY29uc3QKICAgICByZXR1cm4gbV9qc1ZhbHVlcy5nZXQoKVtpbmRleCAmIG1fbWFza10uZ2V0
KCk7CiB9CiAKLXZvaWQgVGFibGU6OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9y
KQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgVGFibGU6OnZpc2l0QWdncmVnYXRl
KFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQobV9vd25lcik7CiAgICAg
YXV0byBsb2NrZXIgPSBob2xkTG9jayhtX293bmVyLT5jZWxsTG9jaygpKTsKQEAgLTE3NCw2ICsx
NzUsOSBAQCB2b2lkIFRhYmxlOjp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYgCiAgICAgICAg
IHZpc2l0b3IuYXBwZW5kKG1fanNWYWx1ZXMuZ2V0KClbaV0pOwogfQogCit0ZW1wbGF0ZSB2b2lk
IFRhYmxlOjp2aXNpdEFnZ3JlZ2F0ZShBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2
b2lkIFRhYmxlOjp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYpOworCiBGdW5jUmVmVGFibGUq
IFRhYmxlOjphc0Z1bmNyZWZUYWJsZSgpCiB7CiAgICAgcmV0dXJuIG1fdHlwZSA9PSBUYWJsZUVs
ZW1lbnRUeXBlOjpGdW5jcmVmID8gc3RhdGljX2Nhc3Q8RnVuY1JlZlRhYmxlKj4odGhpcykgOiBu
dWxscHRyOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRhYmxlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRhYmxlLmgJKHJldmlz
aW9uIDI3MTc4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UYWJsZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC03OSw3ICs3OSw3IEBAIHB1YmxpYzoKICAgICBPcHRpb25hbDx1aW50
MzJfdD4gZ3Jvdyh1aW50MzJfdCBkZWx0YSwgSlNWYWx1ZSBkZWZhdWx0VmFsdWUpOwogICAgIHZv
aWQgY29weShjb25zdCBUYWJsZSogc3JjVGFibGUsIHVpbnQzMl90IGRzdEluZGV4LCB1aW50MzJf
dCBzcmNJbmRleCk7CiAKLSAgICB2b2lkIHZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJik7Cisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCB2aXNpdEFnZ3JlZ2F0ZShWaXNpdG9y
Jik7CiAKIHByb3RlY3RlZDoKICAgICBUYWJsZSh1aW50MzJfdCBpbml0aWFsLCBPcHRpb25hbDx1
aW50MzJfdD4gbWF4aW11bSwgVGFibGVFbGVtZW50VHlwZSA9IFRhYmxlRWxlbWVudFR5cGU6OkV4
dGVybnJlZik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1RvV2FzbUlD
Q2FsbGVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9K
U1RvV2FzbUlDQ2FsbGVlLmNwcAkocmV2aXNpb24gMjcxNzg2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvSlNUb1dhc21JQ0NhbGxlZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5
LDcgKzQ5LDggQEAgU3RydWN0dXJlKiBKU1RvV2FzbUlDQ2FsbGVlOjpjcmVhdGVTdHJ1YwogICAg
IHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5
cGVJbmZvKEpTQ2FsbGVlVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwogfQogCi12b2lk
IEpTVG9XYXNtSUNDYWxsZWU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRv
ciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTVG9XYXNtSUND
YWxsZWU6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikK
IHsKICAgICBKU1RvV2FzbUlDQ2FsbGVlKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVG9XYXNtSUND
YWxsZWUqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3Qs
IGluZm8oKSk7CkBAIC01OCw2ICs1OSw4IEBAIHZvaWQgSlNUb1dhc21JQ0NhbGxlZTo6dmlzaXRD
aGlsZHJlbihKU0MKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2Z1bmN0aW9uKTsK
IH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTVG9XYXNtSUNDYWxsZWUpOworCiB9IC8vIG5h
bWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTVG9XYXNtSUNDYWxsZWUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1RvV2FzbUlDQ2FsbGVlLmgJKHJldmlz
aW9uIDI3MTc4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTVG9XYXNtSUND
YWxsZWUuaAkod29ya2luZyBjb3B5KQpAQCAtNTYsNyArNTYsNyBAQCBwcml2YXRlOgogICAgIEpT
VG9XYXNtSUNDYWxsZWUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSkKICAgICAgICAgOiBCYXNlKHZtLCBnbG9iYWxPYmplY3QsIHN0cnVj
dHVyZSkKICAgICB7IH0KLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNs
b3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIFdyaXRlQmFy
cmllcjxXZWJBc3NlbWJseUZ1bmN0aW9uPiBtX2Z1bmN0aW9uOwogfTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxv
Y2suY3BwCShyZXZpc2lvbiAyNzE3ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODIsNyArODIs
OCBAQCB2b2lkIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6OmNsZWFySlNDYWxsCiAgICAgICAgICgq
aXRlciktPnVubGluayh2bSk7CiB9CiAKLXZvaWQgSlNXZWJBc3NlbWJseUNvZGVCbG9jazo6dmlz
aXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8
dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNXZWJBc3NlbWJseUNvZGVCbG9jazo6dmlzaXRDaGls
ZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTV2ViQXNz
ZW1ibHlDb2RlQmxvY2sqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNXZWJBc3NlbWJseUNvZGVCbG9j
ayo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5m
bygpKTsKQEAgLTkwLDYgKzkxLDggQEAgdm9pZCBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrOjp2aXNp
dENoaWxkcgogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CiB9
CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKTsKKwogdm9p
ZCBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxseShWTSYgdm0p
CiB7CiAgICAgZm9yIChhdXRvIGl0ZXIgPSBtX2NhbGxMaW5rSW5mb3MuYmVnaW4oKTsgISFpdGVy
OyArK2l0ZXIpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2Vt
Ymx5Q29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
anMvSlNXZWJBc3NlbWJseUNvZGVCbG9jay5oCShyZXZpc2lvbiAyNzE3ODYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTg2LDcgKzg2LDcgQEAgcHJpdmF0ZToKICAgICBERUNMQVJFX0VYUE9SVF9JTkZP
OwogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0Rlc3RydWN0aW9uID0gdHJ1ZTsKICAg
ICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hp
bGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVO
OwogCiAgICAgUmVmPFdhc206OkNvZGVCbG9jaz4gbV9jb2RlQmxvY2s7CiAgICAgVmVjdG9yPE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxXYXNtRW50cnlQdHJUYWc+PiBtX3dhc21Ub0pTRXhpdFN0dWJz
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUdsb2Jh
bC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJB
c3NlbWJseUdsb2JhbC5jcHAJKHJldmlzaW9uIDI3MTc4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlHbG9iYWwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03
MSw3ICs3MSw4IEBAIHZvaWQgSlNXZWJBc3NlbWJseUdsb2JhbDo6ZGVzdHJveShKU0NlbGwKICAg
ICBzdGF0aWNfY2FzdDxKU1dlYkFzc2VtYmx5R2xvYmFsKj4oY2VsbCktPkpTV2ViQXNzZW1ibHlH
bG9iYWw6On5KU1dlYkFzc2VtYmx5R2xvYmFsKCk7CiB9CiAKLXZvaWQgSlNXZWJBc3NlbWJseUds
b2JhbDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQor
dGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNXZWJBc3NlbWJseUdsb2JhbDo6dmlz
aXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpT
V2ViQXNzZW1ibHlHbG9iYWwqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNXZWJBc3NlbWJseUdsb2Jh
bCo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5m
bygpKTsKQEAgLTgwLDYgKzgxLDggQEAgdm9pZCBKU1dlYkFzc2VtYmx5R2xvYmFsOjp2aXNpdENo
aWxkcmVuKAogICAgIHRoaXNPYmplY3QtPmdsb2JhbCgpLT52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9y
KTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTV2ViQXNzZW1ibHlHbG9iYWwpOworCiB9
IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlHbG9iYWwuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5R2xv
YmFsLmgJKHJldmlzaW9uIDI3MTc4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L0pTV2ViQXNzZW1ibHlHbG9iYWwuaAkod29ya2luZyBjb3B5KQpAQCAtNTksNyArNTksNyBAQCBw
dWJsaWM6CiBwcml2YXRlOgogICAgIEpTV2ViQXNzZW1ibHlHbG9iYWwoVk0mLCBTdHJ1Y3R1cmUq
LCBSZWY8V2FzbTo6R2xvYmFsPiYmKTsKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7Ci0g
ICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAg
IERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBSZWY8V2FzbTo6R2xvYmFsPiBtX2dsb2Jh
bDsKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5
SW5zdGFuY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5jcHAJKHJldmlzaW9uIDI3MTc4NikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTczLDcgKzczLDggQEAgdm9pZCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OmRlc3Ry
b3koSlNDZQogICAgIHN0YXRpY19jYXN0PEpTV2ViQXNzZW1ibHlJbnN0YW5jZSo+KGNlbGwpLT5K
U1dlYkFzc2VtYmx5SW5zdGFuY2U6On5KU1dlYkFzc2VtYmx5SW5zdGFuY2UoKTsKIH0KIAotdm9p
ZCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90
VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTV2Vi
QXNzZW1ibHlJbnN0YW5jZTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9y
JiB2aXNpdG9yKQogewogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNXZWJBc3NlbWJs
eUluc3RhbmNlKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2Jq
ZWN0LCBpbmZvKCkpOwpAQCAtMTAyLDYgKzEwMyw4IEBAIHZvaWQgSlNXZWJBc3NlbWJseUluc3Rh
bmNlOjp2aXNpdENoaWxkcmUKICAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZCh3cmFw
cGVyLmdldCgpKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTV2ViQXNzZW1ibHlJbnN0
YW5jZSk7CisKIHZvaWQgSlNXZWJBc3NlbWJseUluc3RhbmNlOjpmaW5hbGl6ZUNyZWF0aW9uKFZN
JiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmPFdhc206OkNvZGVCbG9jaz4m
JiB3YXNtQ29kZUJsb2NrLCBKU09iamVjdCogaW1wb3J0T2JqZWN0LCBXYXNtOjpDcmVhdGlvbk1v
ZGUgY3JlYXRpb25Nb2RlKQogewogICAgIG1faW5zdGFuY2UtPmZpbmFsaXplQ3JlYXRpb24odGhp
cywgd2FzbUNvZGVCbG9jay5jb3B5UmVmKCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmgJKHJldmlzaW9uIDI3
MTc4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0
YW5jZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDUsNyArMTA1LDcgQEAgcHVibGljOgogcHJpdmF0
ZToKICAgICBKU1dlYkFzc2VtYmx5SW5zdGFuY2UoVk0mLCBTdHJ1Y3R1cmUqLCBSZWY8V2FzbTo6
SW5zdGFuY2U+JiYpOwogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBKU1dlYkFzc2VtYmx5
TW9kdWxlKiwgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQqKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNp
dENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElM
RFJFTjsKIAogICAgIFJlZjxXYXNtOjpJbnN0YW5jZT4gbV9pbnN0YW5jZTsKICAgICBWTSogbV92
bTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNZW1v
cnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2Vi
QXNzZW1ibHlNZW1vcnkuY3BwCShyZXZpc2lvbiAyNzE3ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TWVtb3J5LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTU5LDcgKzE1OSw4IEBAIHZvaWQgSlNXZWJBc3NlbWJseU1lbW9yeTo6ZGVzdHJveShKU0NlbGwK
ICAgICBtZW1vcnktPkpTV2ViQXNzZW1ibHlNZW1vcnk6On5KU1dlYkFzc2VtYmx5TWVtb3J5KCk7
CiB9CiAKLXZvaWQgSlNXZWJBc3NlbWJseU1lbW9yeTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNl
bGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3Zv
aWQgSlNXZWJBc3NlbWJseU1lbW9yeTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBW
aXNpdG9yJiB2aXNpdG9yKQogewogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNXZWJB
c3NlbWJseU1lbW9yeSo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhp
c09iamVjdCwgaW5mbygpKTsKQEAgLTE2OSw2ICsxNzAsOCBAQCB2b2lkIEpTV2ViQXNzZW1ibHlN
ZW1vcnk6OnZpc2l0Q2hpbGRyZW4oCiAgICAgdmlzaXRvci5yZXBvcnRFeHRyYU1lbW9yeVZpc2l0
ZWQodGhpc09iamVjdC0+bWVtb3J5KCkuc2l6ZSgpKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxE
UkVOKEpTV2ViQXNzZW1ibHlNZW1vcnkpOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlm
IC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL0pTV2ViQXNzZW1ibHlNZW1vcnkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TWVtb3J5LmgJKHJldmlzaW9uIDI3MTc4NikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNZW1vcnkuaAkod29y
a2luZyBjb3B5KQpAQCAtNjMsNyArNjMsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIEpTV2Vi
QXNzZW1ibHlNZW1vcnkoVk0mLCBTdHJ1Y3R1cmUqKTsKICAgICB2b2lkIGZpbmlzaENyZWF0aW9u
KFZNJik7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRv
ciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBSZWY8V2FzbTo6TWVtb3J5
PiBtX21lbW9yeTsKICAgICBXcml0ZUJhcnJpZXI8SlNBcnJheUJ1ZmZlcj4gbV9idWZmZXJXcmFw
cGVyOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1v
ZHVsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNX
ZWJBc3NlbWJseU1vZHVsZS5jcHAJKHJldmlzaW9uIDI3MTc4NikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMjQsNyArMTI0LDggQEAgdm9pZCBKU1dlYkFzc2VtYmx5TW9kdWxlOjpzZXRDb2RlQmxvY2so
VgogICAgIG1fY29kZUJsb2Nrc1tzdGF0aWNfY2FzdDxzaXplX3Q+KG1vZGUpXS5zZXQodm0sIHRo
aXMsIGNvZGVCbG9jayk7CiB9CiAKLXZvaWQgSlNXZWJBc3NlbWJseU1vZHVsZTo6dmlzaXRDaGls
ZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5h
bWUgVmlzaXRvcj4KK3ZvaWQgSlNXZWJBc3NlbWJseU1vZHVsZTo6dmlzaXRDaGlsZHJlbkltcGwo
SlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTV2ViQXNzZW1ibHlNb2R1
bGUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNXZWJBc3NlbWJseU1vZHVsZSo+KGNlbGwpOwogICAg
IEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTEzNSw2
ICsxMzYsOCBAQCB2b2lkIEpTV2ViQXNzZW1ibHlNb2R1bGU6OnZpc2l0Q2hpbGRyZW4oCiAgICAg
ICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fY29kZUJsb2Nrc1tpXSk7CiB9CiAKK0RF
RklORV9WSVNJVF9DSElMRFJFTihKU1dlYkFzc2VtYmx5TW9kdWxlKTsKKwogfSAvLyBuYW1lc3Bh
Y2UgSlNDCiAKICNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5oCShyZXZp
c2lvbiAyNzE3ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2Vt
Ymx5TW9kdWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTgwLDcgKzgwLDcgQEAgcHJpdmF0ZToKIAog
ICAgIEpTV2ViQXNzZW1ibHlNb2R1bGUoVk0mLCBTdHJ1Y3R1cmUqLCBSZWY8V2FzbTo6TW9kdWxl
PiYmKTsKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7Ci0gICAgc3RhdGljIHZvaWQgdmlz
aXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJ
TERSRU47CiAKICAgICBSZWY8V2FzbTo6TW9kdWxlPiBtX21vZHVsZTsKICAgICBXcml0ZUJhcnJp
ZXI8U3ltYm9sVGFibGU+IG1fZXhwb3J0U3ltYm9sVGFibGU7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5VGFibGUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlUYWJsZS5jcHAJKHJldmlz
aW9uIDI3MTc4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1i
bHlUYWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcyLDcgKzcyLDggQEAgdm9pZCBKU1dlYkFz
c2VtYmx5VGFibGU6OmRlc3Ryb3koSlNDZWxsKgogICAgIHN0YXRpY19jYXN0PEpTV2ViQXNzZW1i
bHlUYWJsZSo+KGNlbGwpLT5KU1dlYkFzc2VtYmx5VGFibGU6On5KU1dlYkFzc2VtYmx5VGFibGUo
KTsKIH0KIAotdm9pZCBKU1dlYkFzc2VtYmx5VGFibGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBj
ZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2
b2lkIEpTV2ViQXNzZW1ibHlUYWJsZTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBW
aXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTV2ViQXNzZW1ibHlUYWJsZSogdGhpc09iamVjdCA9
IGpzQ2FzdDxKU1dlYkFzc2VtYmx5VGFibGUqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNU
X0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC04MSw2ICs4Miw4IEBAIHZvaWQgSlNX
ZWJBc3NlbWJseVRhYmxlOjp2aXNpdENoaWxkcmVuKEoKICAgICB0aGlzT2JqZWN0LT50YWJsZSgp
LT52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpT
V2ViQXNzZW1ibHlUYWJsZSk7CisKIGJvb2wgSlNXZWJBc3NlbWJseVRhYmxlOjpncm93KHVpbnQz
Ml90IGRlbHRhLCBKU1ZhbHVlIGRlZmF1bHRWYWx1ZSkKIHsKICAgICBpZiAoZGVsdGEgPT0gMCkK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlUYWJsZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1i
bHlUYWJsZS5oCShyZXZpc2lvbiAyNzE3ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9KU1dlYkFzc2VtYmx5VGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtNzAsOCArNzAsOCBA
QCBwdWJsaWM6CiBwcml2YXRlOgogICAgIEpTV2ViQXNzZW1ibHlUYWJsZShWTSYsIFN0cnVjdHVy
ZSosIFJlZjxXYXNtOjpUYWJsZT4mJik7CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOwot
ICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKLQor
ICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CisvLwogICAgIFJlZjxXYXNtOjpUYWJsZT4gbV90
YWJsZTsKIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2Vt
Ymx5RnVuY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uY3BwCShyZXZpc2lvbiAyNzE3ODYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDUyLDcgKzQ1Miw4IEBAIFdlYkFzc2VtYmx5RnVuY3Rpb246OldlYkFzc2VtYmx5
RnVuY3Rpb24KICAgICAsIG1faW1wb3J0YWJsZUZ1bmN0aW9uIHsgc2lnbmF0dXJlSW5kZXgsIHdh
c21Ub1dhc21FbnRyeXBvaW50TG9hZExvY2F0aW9uIH0KIHsgfQogCi12b2lkIFdlYkFzc2VtYmx5
RnVuY3Rpb246OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRv
cikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFdlYkFzc2VtYmx5RnVuY3Rpb246
OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAg
ICBXZWJBc3NlbWJseUZ1bmN0aW9uKiB0aGlzT2JqZWN0ID0ganNDYXN0PFdlYkFzc2VtYmx5RnVu
Y3Rpb24qPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3Qs
IGluZm8oKSk7CkBAIC00NjEsNiArNDYyLDggQEAgdm9pZCBXZWJBc3NlbWJseUZ1bmN0aW9uOjp2
aXNpdENoaWxkcmVuKAogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fanNUb1dhc21J
Q0NhbGxlZSk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihXZWJBc3NlbWJseUZ1bmN0aW9u
KTsKKwogdm9pZCBXZWJBc3NlbWJseUZ1bmN0aW9uOjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKIHsK
ICAgICBzdGF0aWNfY2FzdDxXZWJBc3NlbWJseUZ1bmN0aW9uKj4oY2VsbCktPldlYkFzc2VtYmx5
RnVuY3Rpb246On5XZWJBc3NlbWJseUZ1bmN0aW9uKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5oCShyZXZpc2lvbiAy
NzE3ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0
aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTg2LDcgKzg2LDcgQEAgcHVibGljOgogICAgIFdhc206
Okluc3RhbmNlKiBwcmV2aW91c0luc3RhbmNlKENhbGxGcmFtZSopOwogCiBwcml2YXRlOgotICAg
IHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBE
RUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogICAgIFdlYkFzc2VtYmx5RnVuY3Rpb24oVk0mLCBOYXRp
dmVFeGVjdXRhYmxlKiwgSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqLCBXYXNtOjpDYWxsZWUm
IGpzRW50cnlwb2ludCwgV2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbjo6TG9hZExvY2F0aW9u
IGVudHJ5cG9pbnRMb2FkTG9jYXRpb24sIFdhc206OlNpZ25hdHVyZUluZGV4KTsKIAogICAgIE1h
Y3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBqc0NhbGxFbnRyeXBvaW50U2xvdygp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlv
bkJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dl
YkFzc2VtYmx5RnVuY3Rpb25CYXNlLmNwcAkocmV2aXNpb24gMjcxNzg2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbkJhc2UuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00MSw3ICs0MSw4IEBAIFdlYkFzc2VtYmx5RnVuY3Rpb25CYXNlOjpXZWJBc3Nl
bWJseUZ1bmMKICAgICA6IEJhc2Uodm0sIGV4ZWN1dGFibGUsIGdsb2JhbE9iamVjdCwgc3RydWN0
dXJlKQogeyB9CiAKLXZvaWQgV2ViQXNzZW1ibHlGdW5jdGlvbkJhc2U6OnZpc2l0Q2hpbGRyZW4o
SlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZp
c2l0b3I+Cit2b2lkIFdlYkFzc2VtYmx5RnVuY3Rpb25CYXNlOjp2aXNpdENoaWxkcmVuSW1wbChK
U0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgV2ViQXNzZW1ibHlGdW5jdGlv
bkJhc2UqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8V2ViQXNzZW1ibHlGdW5jdGlvbkJhc2UqPihjZWxs
KTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBA
IC00OSw2ICs1MCw4IEBAIHZvaWQgV2ViQXNzZW1ibHlGdW5jdGlvbkJhc2U6OnZpc2l0Q2hpbGQK
ICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2luc3RhbmNlKTsKIH0KIAorREVGSU5F
X1ZJU0lUX0NISUxEUkVOKFdlYkFzc2VtYmx5RnVuY3Rpb25CYXNlKTsKKwogdm9pZCBXZWJBc3Nl
bWJseUZ1bmN0aW9uQmFzZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBOYXRpdmVFeGVjdXRhYmxl
KiBleGVjdXRhYmxlLCB1bnNpZ25lZCBsZW5ndGgsIGNvbnN0IFN0cmluZyYgbmFtZSwgSlNXZWJB
c3NlbWJseUluc3RhbmNlKiBpbnN0YW5jZSkKIHsKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2
bSwgZXhlY3V0YWJsZSwgbGVuZ3RoLCBuYW1lKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb25CYXNlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbkJhc2UuaAkocmV2aXNp
b24gMjcxNzg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlG
dW5jdGlvbkJhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtNDYsNyArNDYsNyBAQCBwdWJsaWM6CiAg
ICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkluc3RhbmNlKCkgeyByZXR1cm4gT0JKRUNUX09G
RlNFVE9GKFdlYkFzc2VtYmx5RnVuY3Rpb25CYXNlLCBtX2luc3RhbmNlKTsgfQogCiBwcm90ZWN0
ZWQ6Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYp
OworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihW
TSYsIE5hdGl2ZUV4ZWN1dGFibGUqLCB1bnNpZ25lZCBsZW5ndGgsIGNvbnN0IFN0cmluZyYgbmFt
ZSwgSlNXZWJBc3NlbWJseUluc3RhbmNlKik7CiAgICAgV2ViQXNzZW1ibHlGdW5jdGlvbkJhc2Uo
Vk0mLCBOYXRpdmVFeGVjdXRhYmxlKiwgSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqKTsKIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNv
cmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFz
c2VtYmx5TW9kdWxlUmVjb3JkLmNwcAkocmV2aXNpb24gMjcxNzg2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC03OCw3ICs3OCw4IEBAIHZvaWQgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmZpbmlz
aENyZWEKICAgICB9CiB9CiAKLXZvaWQgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OnZpc2l0Q2hp
bGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVu
YW1lIFZpc2l0b3I+Cit2b2lkIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjp2aXNpdENoaWxkcmVu
SW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgV2ViQXNzZW1ibHlN
b2R1bGVSZWNvcmQqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8V2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQq
PihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8o
KSk7CkBAIC04OCw2ICs4OSw4IEBAIHZvaWQgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OnZpc2l0
Q2hpbGQKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2V4cG9ydHNPYmplY3QpOwog
fQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQpOworCiB2
b2lkIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpwcmVwYXJlTGluayhWTSYgdm0sIEpTV2ViQXNz
ZW1ibHlJbnN0YW5jZSogaW5zdGFuY2UpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoIW1faW5zdGFu
Y2UpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1
bGVSZWNvcmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9X
ZWJBc3NlbWJseU1vZHVsZVJlY29yZC5oCShyZXZpc2lvbiAyNzE3ODYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZVJlY29yZC5oCSh3b3JraW5nIGNv
cHkpCkBAIC02OSw3ICs2OSw3IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGZpbmlzaENyZWF0aW9u
KEpTR2xvYmFsT2JqZWN0KiwgVk0mLCBjb25zdCBXYXNtOjpNb2R1bGVJbmZvcm1hdGlvbiYpOwog
Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwor
ICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBXcml0ZUJhcnJpZXI8SlNXZWJBc3Nl
bWJseUluc3RhbmNlPiBtX2luc3RhbmNlOwogICAgIFdyaXRlQmFycmllcjxKU09iamVjdD4gbV9z
dGFydEZ1bmN0aW9uOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNz
ZW1ibHlXcmFwcGVyRnVuY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmNwcAkocmV2aXNpb24gMjcx
Nzg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlXcmFwcGVy
RnVuY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Nyw3ICs2Nyw4IEBAIFN0cnVjdHVyZSog
V2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb246OmMKICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVh
dGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhKU0Z1bmN0aW9uVHlwZSwg
U3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwogfQogCi12b2lkIFdlYkFzc2VtYmx5V3JhcHBlckZ1
bmN0aW9uOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3Ip
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBXZWJBc3NlbWJseVdyYXBwZXJGdW5j
dGlvbjo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQog
ewogICAgIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uKiB0aGlzT2JqZWN0ID0ganNDYXN0PFdl
YkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9J
TkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNzYsNiArNzcsOCBAQCB2b2lkIFdlYkFz
c2VtYmx5V3JhcHBlckZ1bmN0aW9uOjp2aXNpdENoCiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09i
amVjdC0+bV9mdW5jdGlvbik7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihXZWJBc3NlbWJs
eVdyYXBwZXJGdW5jdGlvbik7CisKIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihjYWxsV2ViQXNz
ZW1ibHlXcmFwcGVyRnVuY3Rpb24sIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxs
RnJhbWUqIGNhbGxGcmFtZSkpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlXcmFwcGVyRnVu
Y3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJB
c3NlbWJseVdyYXBwZXJGdW5jdGlvbi5oCShyZXZpc2lvbiAyNzE3ODYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5oCSh3b3JraW5n
IGNvcHkpCkBAIC01OSw3ICs1OSw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgV2ViQXNzZW1i
bHlXcmFwcGVyRnVuY3Rpb24oVk0mLCBOYXRpdmVFeGVjdXRhYmxlKiwgSlNHbG9iYWxPYmplY3Qq
LCBTdHJ1Y3R1cmUqLCBXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9uKTsKICAgICB2b2lkIGZp
bmlzaENyZWF0aW9uKFZNJiwgTmF0aXZlRXhlY3V0YWJsZSosIHVuc2lnbmVkIGxlbmd0aCwgY29u
c3QgU3RyaW5nJiBuYW1lLCBKU09iamVjdCosIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSopOwotICAg
IHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBE
RUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgV3JpdGVCYXJyaWVyPEpTT2JqZWN0PiBtX2Z1
bmN0aW9uOwogICAgIC8vIEl0J3Mgc2FmZSB0byBqdXN0IGhvbGQgdGhlIHJhdyBXYXNtVG9XYXNt
SW1wb3J0YWJsZUZ1bmN0aW9uIGJlY2F1c2Ugd2UgaGF2ZSBhIHJlZmVyZW5jZQpJbmRleDogU291
cmNlL1dURi93dGYvQ29uY3VycmVudFB0ckhhc2hTZXQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V1RGL3d0Zi9Db25jdXJyZW50UHRySGFzaFNldC5oCShyZXZpc2lvbiAyNzE3ODYpCisrKyBTb3Vy
Y2UvV1RGL3d0Zi9Db25jdXJyZW50UHRySGFzaFNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTYxLDcgKzYx
LDcgQEAgcHVibGljOgogICAgIFdURl9FWFBPUlRfUFJJVkFURSB+Q29uY3VycmVudFB0ckhhc2hT
ZXQoKTsKICAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIGJvb2wgY29udGFpbnMo
VCB2YWx1ZSkKKyAgICBib29sIGNvbnRhaW5zKFQgdmFsdWUpIGNvbnN0CiAgICAgewogICAgICAg
ICByZXR1cm4gY29udGFpbnNJbXBsKGNhc3QodmFsdWUpKTsKICAgICB9CkBAIC0xMDcsNyArMTA3
LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGluaXRpYWxpemUoKTsKICAgICAKICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBUPgotICAgIHZvaWQqIGNhc3QoVCB2YWx1ZSkKKyAgICBzdGF0aWMgdm9pZCog
Y2FzdChUIHZhbHVlKQogICAgIHsKICAgICAgICAgc3RhdGljX2Fzc2VydChzaXplb2YoVCkgPD0g
c2l6ZW9mKHZvaWQqKSwgInR5cGUgdG9vIGJpZyIpOwogICAgICAgICB1bmlvbiB7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUu
Y3BwCShyZXZpc2lvbiAyNzE3ODYpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJPYmplY3RTdG9yZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcyOCw3ICs3MjgsOSBAQCB2
b2lkIElEQk9iamVjdFN0b3JlOjpyb2xsYmFja0ZvclZlcnNpb25DCiAgICAgfQogfQogCi12b2lk
IElEQk9iamVjdFN0b3JlOjp2aXNpdFJlZmVyZW5jZWRJbmRleGVzKFNsb3RWaXNpdG9yJiB2aXNp
dG9yKSBjb25zdAorLy92b2lkIElEQk9iamVjdFN0b3JlOjp2aXNpdFJlZmVyZW5jZWRJbmRleGVz
KFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBjb25zdAordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4K
K3ZvaWQgSURCT2JqZWN0U3RvcmU6OnZpc2l0UmVmZXJlbmNlZEluZGV4ZXMoVmlzaXRvciYgdmlz
aXRvcikgY29uc3QKIHsKICAgICBMb2NrZXI8TG9jaz4gbG9ja2VyKG1fcmVmZXJlbmNlZEluZGV4
TG9jayk7CiAgICAgZm9yIChhdXRvJiBpbmRleCA6IG1fcmVmZXJlbmNlZEluZGV4ZXMudmFsdWVz
KCkpCkBAIC03MzcsNiArNzM5LDkgQEAgdm9pZCBJREJPYmplY3RTdG9yZTo6dmlzaXRSZWZlcmVu
Y2VkSW5kZQogICAgICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QoaW5kZXguZ2V0KCkpOwogfQog
Cit0ZW1wbGF0ZSB2b2lkIElEQk9iamVjdFN0b3JlOjp2aXNpdFJlZmVyZW5jZWRJbmRleGVzKEFi
c3RyYWN0U2xvdFZpc2l0b3ImKSBjb25zdDsKK3RlbXBsYXRlIHZvaWQgSURCT2JqZWN0U3RvcmU6
OnZpc2l0UmVmZXJlbmNlZEluZGV4ZXMoU2xvdFZpc2l0b3ImKSBjb25zdDsKKwogdm9pZCBJREJP
YmplY3RTdG9yZTo6cmVuYW1lUmVmZXJlbmNlZEluZGV4KElEQkluZGV4JiBpbmRleCwgY29uc3Qg
U3RyaW5nJiBuZXdOYW1lKQogewogICAgIExPRyhJbmRleGVkREIsICJJREJPYmplY3RTdG9yZTo6
cmVuYW1lUmVmZXJlbmNlZEluZGV4Iik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmgJKHJldmlzaW9uIDI3MTc4NikKKysrIFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEwOSw3ICsxMDksOCBAQCBwdWJsaWM6CiAgICAgdm9pZCByZWYoKTsKICAgICB2
b2lkIGRlcmVmKCk7CiAKLSAgICB2b2lkIHZpc2l0UmVmZXJlbmNlZEluZGV4ZXMoSlNDOjpTbG90
VmlzaXRvciYpIGNvbnN0OworLy8gICAgdm9pZCB2aXNpdFJlZmVyZW5jZWRJbmRleGVzKEpTQzo6
U2xvdFZpc2l0b3ImKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lk
IHZpc2l0UmVmZXJlbmNlZEluZGV4ZXMoVmlzaXRvciYpIGNvbnN0OwogICAgIHZvaWQgcmVuYW1l
UmVmZXJlbmNlZEluZGV4KElEQkluZGV4JiwgY29uc3QgU3RyaW5nJiBuZXdOYW1lKTsKIAogcHJp
dmF0ZToKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0
aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJUcmFuc2FjdGlvbi5jcHAJKHJldmlzaW9uIDI3MTc4NikKKysrIFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ1
NSw3ICsxNDU1LDggQEAgdm9pZCBJREJUcmFuc2FjdGlvbjo6Y29ubmVjdGlvbkNsb3NlZEZybwog
ICAgIGZpcmVPbkFib3J0KCk7CiB9CiAKLXZvaWQgSURCVHJhbnNhY3Rpb246OnZpc2l0UmVmZXJl
bmNlZE9iamVjdFN0b3JlcyhKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKSBjb25zdAordGVtcGxh
dGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSURCVHJhbnNhY3Rpb246OnZpc2l0UmVmZXJlbmNl
ZE9iamVjdFN0b3JlcyhWaXNpdG9yJiB2aXNpdG9yKSBjb25zdAogewogICAgIExvY2tlcjxMb2Nr
PiBsb2NrZXIobV9yZWZlcmVuY2VkT2JqZWN0U3RvcmVMb2NrKTsKICAgICBmb3IgKGF1dG8mIG9i
amVjdFN0b3JlIDogbV9yZWZlcmVuY2VkT2JqZWN0U3RvcmVzLnZhbHVlcygpKQpAQCAtMTQ2NCw2
ICsxNDY1LDkgQEAgdm9pZCBJREJUcmFuc2FjdGlvbjo6dmlzaXRSZWZlcmVuY2VkT2JqZQogICAg
ICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qob2JqZWN0U3RvcmUuZ2V0KCkpOwogfQogCit0ZW1w
bGF0ZSB2b2lkIElEQlRyYW5zYWN0aW9uOjp2aXNpdFJlZmVyZW5jZWRPYmplY3RTdG9yZXMoSlND
OjpBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBjb25zdDsKK3RlbXBsYXRlIHZvaWQgSURC
VHJhbnNhY3Rpb246OnZpc2l0UmVmZXJlbmNlZE9iamVjdFN0b3JlcyhKU0M6OlNsb3RWaXNpdG9y
JiB2aXNpdG9yKSBjb25zdDsKKwogdm9pZCBJREJUcmFuc2FjdGlvbjo6aGFuZGxlUGVuZGluZ09w
ZXJhdGlvbnMoKQogewogICAgIEFTU0VSVChjYW5DdXJyZW50VGhyZWFkQWNjZXNzVGhyZWFkTG9j
YWxEYXRhKG1fZGF0YWJhc2UtPm9yaWdpblRocmVhZCgpKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmgJKHJldmlzaW9uIDI3
MTc4NikKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9u
LmgJKHdvcmtpbmcgY29weSkKQEAgLTE0OSw3ICsxNDksOCBAQCBwdWJsaWM6CiAKICAgICB2b2lk
IGNvbm5lY3Rpb25DbG9zZWRGcm9tU2VydmVyKGNvbnN0IElEQkVycm9yJik7CiAKLSAgICB2b2lk
IHZpc2l0UmVmZXJlbmNlZE9iamVjdFN0b3JlcyhKU0M6OlNsb3RWaXNpdG9yJikgY29uc3Q7Cisv
LyAgICB2b2lkIHZpc2l0UmVmZXJlbmNlZE9iamVjdFN0b3JlcyhKU0M6OlNsb3RWaXNpdG9yJikg
Y29uc3Q7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCB2aXNpdFJlZmVyZW5j
ZWRPYmplY3RTdG9yZXMoVmlzaXRvciYpIGNvbnN0OwogCiAgICAgV0VCQ09SRV9FWFBPUlQgc3Rh
dGljIHN0ZDo6YXRvbWljPHVuc2lnbmVkPiBudW1iZXJPZklEQlRyYW5zYWN0aW9uczsKIApJbmRl
eDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0J1ZmZlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0J1ZmZlci5jcHAJ
KHJldmlzaW9uIDI3MTc4NikKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVk
aW9CdWZmZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTQsMTIgKzE1NCwxNyBAQCBFeGNlcHRp
b25PcjxKU0M6OkpTVmFsdWU+IEF1ZGlvQnVmZmVyOjpnCiAgICAgcmV0dXJuIGNvbnN0cnVjdEpT
QXJyYXkoKTsKIH0KIAotdm9pZCBBdWRpb0J1ZmZlcjo6dmlzaXRDaGFubmVsV3JhcHBlcnMoSlND
OjpTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vdm9pZCBBdWRpb0J1ZmZlcjo6dmlzaXRDaGFubmVs
V3JhcHBlcnMoSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZp
c2l0b3I+Cit2b2lkIEF1ZGlvQnVmZmVyOjp2aXNpdENoYW5uZWxXcmFwcGVycyhWaXNpdG9yJiB2
aXNpdG9yKQogewogICAgIGZvciAoYXV0byYgY2hhbm5lbFdyYXBwZXIgOiBtX2NoYW5uZWxXcmFw
cGVycykKICAgICAgICAgY2hhbm5lbFdyYXBwZXIudmlzaXQodmlzaXRvcik7CiB9CiAKK3RlbXBs
YXRlIHZvaWQgQXVkaW9CdWZmZXI6OnZpc2l0Q2hhbm5lbFdyYXBwZXJzKEpTQzo6QWJzdHJhY3RT
bG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBBdWRpb0J1ZmZlcjo6dmlzaXRDaGFubmVsV3Jh
cHBlcnMoSlNDOjpTbG90VmlzaXRvciYpOworCiBSZWZQdHI8RmxvYXQzMkFycmF5PiBBdWRpb0J1
ZmZlcjo6Y2hhbm5lbERhdGEodW5zaWduZWQgY2hhbm5lbEluZGV4KQogewogICAgIGlmIChjaGFu
bmVsSW5kZXggPj0gbV9jaGFubmVscy5zaXplKCkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmF1ZGlvL0F1ZGlvQnVmZmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJhdWRpby9BdWRpb0J1ZmZlci5oCShyZXZpc2lvbiAyNzE3ODYpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQnVmZmVyLmgJKHdvcmtpbmcgY29weSkK
QEAgLTc1LDcgKzc1LDggQEAgcHVibGljOgogCiAgICAgc2l6ZV90IG1lbW9yeUNvc3QoKSBjb25z
dDsKIAotICAgIHZvaWQgdmlzaXRDaGFubmVsV3JhcHBlcnMoSlNDOjpTbG90VmlzaXRvciYpOwor
Ly8gICAgdm9pZCB2aXNpdENoYW5uZWxXcmFwcGVycyhKU0M6OlNsb3RWaXNpdG9yJik7CisgICAg
dGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCB2aXNpdENoYW5uZWxXcmFwcGVycyhWaXNp
dG9yJik7CiAgICAgCiBwcml2YXRlOgogICAgIEF1ZGlvQnVmZmVyKHVuc2lnbmVkIG51bWJlck9m
Q2hhbm5lbHMsIHNpemVfdCBsZW5ndGgsIGZsb2F0IHNhbXBsZVJhdGUsIExlZ2FjeVByZXZlbnRE
ZXRhY2hpbmcgPSBMZWdhY3lQcmV2ZW50RGV0YWNoaW5nOjpObyk7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9ET01HQ091dHB1dENvbnN0cmFpbnQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0RPTUdDT3V0cHV0Q29uc3RyYWludC5jcHAJKHJl
dmlzaW9uIDI3MTc4NikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0RPTUdDT3V0cHV0
Q29uc3RyYWludC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDcgKzQ5LDcgQEAgRE9NR0NPdXRw
dXRDb25zdHJhaW50Ojp+RE9NR0NPdXRwdXRDb25zdAogewogfQogCi12b2lkIERPTUdDT3V0cHV0
Q29uc3RyYWludDo6ZXhlY3V0ZUltcGwoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIERPTUdD
T3V0cHV0Q29uc3RyYWludDo6ZXhlY3V0ZUltcGwoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRv
cikKIHsKICAgICBIZWFwJiBoZWFwID0gbV92bS5oZWFwOwogICAgIApAQCAtNjAsOCArNjAsOCBA
QCB2b2lkIERPTUdDT3V0cHV0Q29uc3RyYWludDo6ZXhlY3V0ZUltcGwoCiAgICAgCiAgICAgbV9j
bGllbnREYXRhLmZvckVhY2hPdXRwdXRDb25zdHJhaW50U3BhY2UoCiAgICAgICAgIFsmXSAoU3Vi
c3BhY2UmIHN1YnNwYWNlKSB7Ci0gICAgICAgICAgICBhdXRvIGZ1bmMgPSBbXSAoU2xvdFZpc2l0
b3ImIHZpc2l0b3IsIEhlYXBDZWxsKiBoZWFwQ2VsbCwgSGVhcENlbGw6OktpbmQpIHsKLSAgICAg
ICAgICAgICAgICBTZXRSb290TWFya1JlYXNvblNjb3BlIHJvb3RTY29wZSh2aXNpdG9yLCBTbG90
VmlzaXRvcjo6Um9vdE1hcmtSZWFzb246OkRPTUdDT3V0cHV0KTsKKyAgICAgICAgICAgIGF1dG8g
ZnVuYyA9IFtdIChBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBIZWFwQ2VsbCogaGVhcENl
bGwsIEhlYXBDZWxsOjpLaW5kKSB7CisgICAgICAgICAgICAgICAgU2V0Um9vdE1hcmtSZWFzb25T
Y29wZSByb290U2NvcGUodmlzaXRvciwgQWJzdHJhY3RTbG90VmlzaXRvcjo6Um9vdE1hcmtSZWFz
b246OkRPTUdDT3V0cHV0KTsKICAgICAgICAgICAgICAgICBKU0NlbGwqIGNlbGwgPSBzdGF0aWNf
Y2FzdDxKU0NlbGwqPihoZWFwQ2VsbCk7CiAgICAgICAgICAgICAgICAgY2VsbC0+bWV0aG9kVGFi
bGUodmlzaXRvci52bSgpKS0+dmlzaXRPdXRwdXRDb25zdHJhaW50cyhjZWxsLCB2aXNpdG9yKTsK
ICAgICAgICAgICAgIH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9ET01HQ091
dHB1dENvbnN0cmFpbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9ET01HQ091dHB1dENvbnN0cmFpbnQuaAkocmV2aXNpb24gMjcxNzg2KQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvRE9NR0NPdXRwdXRDb25zdHJhaW50LmgJKHdvcmtpbmcgY29weSkK
QEAgLTQyLDcgKzQyLDcgQEAgcHVibGljOgogICAgIH5ET01HQ091dHB1dENvbnN0cmFpbnQoKTsK
ICAgICAKIHByb3RlY3RlZDoKLSAgICB2b2lkIGV4ZWN1dGVJbXBsKEpTQzo6U2xvdFZpc2l0b3Im
KSBvdmVycmlkZTsKKyAgICB2b2lkIGV4ZWN1dGVJbXBsKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRv
ciYpIG92ZXJyaWRlOwogCiBwcml2YXRlOgogICAgIEpTQzo6Vk0mIG1fdm07CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Fib3J0Q29udHJvbGxlckN1c3RvbS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNBYm9ydENvbnRyb2xsZXJDdXN0
b20uY3BwCShyZXZpc2lvbiAyNzE3ODYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0Fib3J0Q29udHJvbGxlckN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDkgKzI4LDE0
IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBKU0Fib3J0Q29udHJvbGxlcjo6dmlz
aXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vdm9pZCBK
U0Fib3J0Q29udHJvbGxlcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRv
ciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTQWJvcnRDb250
cm9sbGVyOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAg
IHZpc2l0b3IuYWRkT3BhcXVlUm9vdCgmd3JhcHBlZCgpLnNpZ25hbCgpKTsKIH0KIAordGVtcGxh
dGUgdm9pZCBKU0Fib3J0Q29udHJvbGxlcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpB
YnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTQWJvcnRDb250cm9sbGVyOjp2
aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJik7CisKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQWJvcnRTaWdu
YWxDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
QWJvcnRTaWduYWxDdXN0b20uY3BwCShyZXZpc2lvbiAyNzE3ODYpCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0Fib3J0U2lnbmFsQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjgsNyArMjgsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWJvb2wgSlNBYm9ydFNpZ25h
bE93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25v
d24+IGhhbmRsZSwgdm9pZCosIEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIq
KiByZWFzb24pCitib29sIEpTQWJvcnRTaWduYWxPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVl
Um9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBKU0M6OkFic3Ry
YWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCiB7CiAgICAgYXV0
byYgYWJvcnRTaWduYWwgPSBKU0M6OmpzQ2FzdDxKU0Fib3J0U2lnbmFsKj4oaGFuZGxlLnNsb3Qo
KS0+YXNDZWxsKCkpLT53cmFwcGVkKCk7CiAgICAgaWYgKGFib3J0U2lnbmFsLmlzRmlyaW5nRXZl
bnRMaXN0ZW5lcnMoKSkgewpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNBdHRy
Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0F0
dHJDdXN0b20uY3BwCShyZXZpc2lvbiAyNzE3ODYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0F0dHJDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMywxMCArMzMsMTUgQEAK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIEpTQXR0cjo6dmlzaXRBZGRpdGlvbmFsQ2hp
bGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vdm9pZCBKU0F0dHI6OnZpc2l0QWRk
aXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBl
bmFtZSBWaXNpdG9yPgordm9pZCBKU0F0dHI6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0
b3ImIHZpc2l0b3IpCiB7CiAgICAgaWYgKEVsZW1lbnQqIGVsZW1lbnQgPSB3cmFwcGVkKCkub3du
ZXJFbGVtZW50KCkpCiAgICAgICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChyb290KGVsZW1lbnQp
KTsKIH0KIAordGVtcGxhdGUgdm9pZCBKU0F0dHI6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpT
Qzo6QWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU0F0dHI6OnZpc2l0QWRk
aXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImKTsKKwogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNBdWRpb0J1ZmZlckN1c3Rv
bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNBdWRpb0J1
ZmZlckN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MTc4NikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTQXVkaW9CdWZmZXJDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwxMSAr
MzEsMTYgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKLXZv
aWQgSlNBdWRpb0J1ZmZlcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZp
c2l0b3IpCisvL3ZvaWQgSlNBdWRpb0J1ZmZlcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xv
dFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0F1
ZGlvQnVmZmVyOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewog
ICAgIHdyYXBwZWQoKS52aXNpdENoYW5uZWxXcmFwcGVycyh2aXNpdG9yKTsKIH0KIAordGVtcGxh
dGUgdm9pZCBKU0F1ZGlvQnVmZmVyOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihBYnN0cmFjdFNs
b3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTQXVkaW9CdWZmZXI6OnZpc2l0QWRkaXRpb25h
bENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2Vu
ZGlmIC8vIEVOQUJMRShXRUJfQVVESU8pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0F1ZGlvVHJhY2tDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTQXVkaW9UcmFja0N1c3RvbS5jcHAJKHJldmlzaW9uIDI3MTc4NikKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXVkaW9UcmFja0N1c3RvbS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM1LDExICszNSwxNiBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogdXNpbmcgbmFt
ZXNwYWNlIEpTQzsKIAotdm9pZCBKU0F1ZGlvVHJhY2s6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVu
KFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy92b2lkIEpTQXVkaW9UcmFjazo6dmlzaXRBZGRpdGlv
bmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNp
dG9yPgordm9pZCBKU0F1ZGlvVHJhY2s6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3Im
IHZpc2l0b3IpCiB7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHJvb3QoJndyYXBwZWQoKSkp
OwogfQogCit0ZW1wbGF0ZSB2b2lkIEpTQXVkaW9UcmFjazo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRy
ZW4oQWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU0F1ZGlvVHJhY2s6OnZp
c2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CisKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKIAogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0F1ZGlv
VHJhY2tMaXN0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0F1ZGlvVHJhY2tMaXN0Q3VzdG9tLmNwcAkocmV2aXNpb24gMjcxNzg2KQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNBdWRpb1RyYWNrTGlzdEN1c3RvbS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM2LDExICszNiwxNiBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogdXNpbmcg
bmFtZXNwYWNlIEpTQzsKIAotdm9pZCBKU0F1ZGlvVHJhY2tMaXN0Ojp2aXNpdEFkZGl0aW9uYWxD
aGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vdm9pZCBKU0F1ZGlvVHJhY2tMaXN0Ojp2
aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5
cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTQXVkaW9UcmFja0xpc3Q6OnZpc2l0QWRkaXRpb25hbENo
aWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHJv
b3Qod3JhcHBlZCgpLmVsZW1lbnQoKSkpOwogfQogCit0ZW1wbGF0ZSB2b2lkIEpTQXVkaW9UcmFj
a0xpc3Q6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3Rl
bXBsYXRlIHZvaWQgSlNBdWRpb1RyYWNrTGlzdDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xv
dFZpc2l0b3ImKTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXVkaW9Xb3JrbGV0UHJvY2Vzc29yQ3VzdG9tLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0F1ZGlvV29ya2xl
dFByb2Nlc3NvckN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MTc4NikKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTQXVkaW9Xb3JrbGV0UHJvY2Vzc29yQ3VzdG9tLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzEsNyArMzEsOSBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogdXNpbmcgbmFtZXNw
YWNlIEpTQzsKIAotdm9pZCBKU0F1ZGlvV29ya2xldFByb2Nlc3Nvcjo6dmlzaXRBZGRpdGlvbmFs
Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3ZvaWQgSlNBdWRpb1dvcmtsZXRQcm9j
ZXNzb3I6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVt
cGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNBdWRpb1dvcmtsZXRQcm9jZXNzb3I6OnZp
c2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0byYgcHJv
Y2Vzc29yID0gd3JhcHBlZCgpOwogICAgIHByb2Nlc3Nvci5qc0lucHV0c1dyYXBwZXIoKS52aXNp
dCh2aXNpdG9yKTsKQEAgLTM5LDYgKzQxLDkgQEAgdm9pZCBKU0F1ZGlvV29ya2xldFByb2Nlc3Nv
cjo6dmlzaXRBZGRpdAogICAgIHByb2Nlc3Nvci5qc1BhcmFtVmFsdWVzV3JhcHBlcigpLnZpc2l0
KHZpc2l0b3IpOwogfQogCit0ZW1wbGF0ZSB2b2lkIEpTQXVkaW9Xb3JrbGV0UHJvY2Vzc29yOjp2
aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2
b2lkIEpTQXVkaW9Xb3JrbGV0UHJvY2Vzc29yOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90
VmlzaXRvciYpOworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUo
V0VCX0FVRElPKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDU1NSdWxlQ3Vz
dG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NTU1J1
bGVDdXN0b20uY3BwCShyZXZpc2lvbiAyNzE3ODYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0NTU1J1bGVDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MSwxMSArNTEsMTYg
QEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKLXZvaWQgSlND
U1NSdWxlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKKy8v
dm9pZCBKU0NTU1J1bGU6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNp
dG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNDU1NSdWxlOjp2aXNpdEFk
ZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHZpc2l0b3IuYWRkT3Bh
cXVlUm9vdChyb290KCZ3cmFwcGVkKCkpKTsKIH0KIAordGVtcGxhdGUgdm9pZCBKU0NTU1J1bGU6
OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRl
IHZvaWQgSlNDU1NSdWxlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYpOwor
CiBKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNHbG9iYWxPYmplY3QqLCBKU0RPTUdsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBSZWY8Q1NTUnVsZT4mJiBydWxlKQogewogICAgIHN3aXRjaCAo
cnVsZS0+dHlwZSgpKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NTU1J1
bGVMaXN0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0NTU1J1bGVMaXN0Q3VzdG9tLmNwcAkocmV2aXNpb24gMjcxNzg2KQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNDU1NSdWxlTGlzdEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM2LDcgKzM2LDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBK
U0M7CiAKLWJvb2wgSlNDU1NSdWxlTGlzdE93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290
cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIFNsb3RWaXNpdG9yJiB2
aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQorYm9vbCBKU0NTU1J1bGVMaXN0T3duZXI6Omlz
UmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxl
LCB2b2lkKiwgQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNv
bikKIHsKICAgICBKU0NTU1J1bGVMaXN0KiBqc0NTU1J1bGVMaXN0ID0ganNDYXN0PEpTQ1NTUnVs
ZUxpc3QqPihoYW5kbGUuc2xvdCgpLT5hc0NlbGwoKSk7CiAgICAgaWYgKCFqc0NTU1J1bGVMaXN0
LT5oYXNDdXN0b21Qcm9wZXJ0aWVzKGpzQ1NTUnVsZUxpc3QtPnZtKCkpKQpJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNDU1NTdHlsZURlY2xhcmF0aW9uQ3VzdG9tLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NTU1N0eWxlRGVjbGFyYXRp
b25DdXN0b20uY3BwCShyZXZpc2lvbiAyNzE3ODYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0NTU1N0eWxlRGVjbGFyYXRpb25DdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01
MSw5ICs1MSwxNCBAQCB2b2lkKiByb290KENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlKQogICAg
IHJldHVybiBzdHlsZTsKIH0KIAotdm9pZCBKU0NTU1N0eWxlRGVjbGFyYXRpb246OnZpc2l0QWRk
aXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy92b2lkIEpTQ1NTU3R5bGVE
ZWNsYXJhdGlvbjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3Ip
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0NTU1N0eWxlRGVjbGFyYXRpb246
OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgdmlzaXRv
ci5hZGRPcGFxdWVSb290KHJvb3QoJndyYXBwZWQoKSkpOwogfQogCit0ZW1wbGF0ZSB2b2lkIEpT
Q1NTU3R5bGVEZWNsYXJhdGlvbjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oQWJzdHJhY3RTbG90
VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU0NTU1N0eWxlRGVjbGFyYXRpb246OnZpc2l0QWRk
aXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2FsbGJhY2tEYXRhLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NhbGxiYWNrRGF0YS5jcHAJ
KHJldmlzaW9uIDI3MTc4NikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2FsbGJh
Y2tEYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTUsMTIgKzk1LDE2IEBAIEpTVmFsdWUgSlND
YWxsYmFja0RhdGE6Omludm9rZUNhbGxiYWNrKEoKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi12
b2lkIEpTQ2FsbGJhY2tEYXRhV2Vhazo6dmlzaXRKU0Z1bmN0aW9uKEpTQzo6U2xvdFZpc2l0b3Im
IHZpc3RvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTQ2FsbGJhY2tEYXRh
V2Vhazo6dmlzaXRKU0Z1bmN0aW9uKFZpc2l0b3ImIHZpc2l0b3IpCiB7Ci0gICAgdmlzdG9yLmFw
cGVuZChtX2NhbGxiYWNrKTsKKyAgICB2aXNpdG9yLmFwcGVuZChtX2NhbGxiYWNrKTsKIH0KIAot
Ym9vbCBKU0NhbGxiYWNrRGF0YVdlYWs6OldlYWtPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVl
Um9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCwgU2xvdFZpc2l0
b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCit0ZW1wbGF0ZSB2b2lkIEpTQ2FsbGJh
Y2tEYXRhV2Vhazo6dmlzaXRKU0Z1bmN0aW9uKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpOwor
dGVtcGxhdGUgdm9pZCBKU0NhbGxiYWNrRGF0YVdlYWs6OnZpc2l0SlNGdW5jdGlvbihKU0M6OlNs
b3RWaXNpdG9yJik7CisKK2Jvb2wgSlNDYWxsYmFja0RhdGFXZWFrOjpXZWFrT3duZXI6OmlzUmVh
Y2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNv
bnRleHQsIEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24p
CiB7CiAgICAgaWYgKFVOTElLRUxZKHJlYXNvbikpCiAgICAgICAgICpyZWFzb24gPSAiQ29udGV4
dCBpcyBvcGFxdWUgcm9vdCI7IC8vIEZJWE1FOiB3aGF0IGlzIHRoZSBjb250ZXh0LgpJbmRleDog
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDYWxsYmFja0RhdGEuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NhbGxiYWNrRGF0YS5oCShyZXZpc2lvbiAy
NzE3ODYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NhbGxiYWNrRGF0YS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xMTMsMTEgKzExMywxMiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVy
biBKU0NhbGxiYWNrRGF0YTo6aW52b2tlQ2FsbGJhY2soKmdsb2JhbE9iamVjdCwgY2FsbGJhY2so
KSwgdGhpc1ZhbHVlLCBhcmdzLCBjYWxsYmFja1R5cGUsIGZ1bmN0aW9uTmFtZSwgcmV0dXJuZWRF
eGNlcHRpb24pOwogICAgIH0KIAotICAgIHZvaWQgdmlzaXRKU0Z1bmN0aW9uKEpTQzo6U2xvdFZp
c2l0b3ImKTsKKy8vICAgIHZvaWQgdmlzaXRKU0Z1bmN0aW9uKEpTQzo6U2xvdFZpc2l0b3ImKTsK
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIHZpc2l0SlNGdW5jdGlvbihWaXNp
dG9yJik7CiAKIHByaXZhdGU6CiAgICAgY2xhc3MgV2Vha093bmVyIDogcHVibGljIEpTQzo6V2Vh
a0hhbmRsZU93bmVyIHsKLSAgICAgICAgYm9vbCBpc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhK
U0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0LCBKU0M6OlNsb3RWaXNpdG9y
JiwgY29uc3QgY2hhcioqKSBvdmVycmlkZTsKKyAgICAgICAgYm9vbCBpc1JlYWNoYWJsZUZyb21P
cGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0LCBKU0M6
OkFic3RyYWN0U2xvdFZpc2l0b3ImLCBjb25zdCBjaGFyKiopIG92ZXJyaWRlOwogICAgIH07CiAg
ICAgV2Vha093bmVyIG1fd2Vha093bmVyOwogICAgIEpTQzo6V2VhazxKU0M6OkpTT2JqZWN0PiBt
X2NhbGxiYWNrOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQ3VzdG9tLmNwcAkocmV2aXNpb24g
MjcxNzg2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDYW52YXNSZW5kZXJpbmdD
b250ZXh0MkRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNCw3ICsyNCw3IEBACiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotYm9vbCBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRE93bmVy
Ojppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhh
bmRsZSwgdm9pZCosIEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFz
b24pCitib29sIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJET3duZXI6OmlzUmVhY2hhYmxlRnJv
bU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgSlND
OjpBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQogewog
ICAgIGlmIChVTkxJS0VMWShyZWFzb24pKQogICAgICAgICAqcmVhc29uID0gIkNhbnZhcyBpcyBv
cGFxdWUgcm9vdCI7CkBAIC0zNCw5ICszNCwxNCBAQCBib29sIEpTQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJET3duZXI6OmlzCiAgICAgcmV0dXJuIHZpc2l0b3IuY29udGFpbnNPcGFxdWVSb290KHJv
b3QpOwogfQogCi12b2lkIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjp2aXNpdEFkZGl0aW9u
YWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy92b2lkIEpTQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9y
JiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNDYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3Ip
CiB7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHJvb3Qod3JhcHBlZCgpLmNhbnZhcygpKSk7
CiB9CiAKK3RlbXBsYXRlIHZvaWQgSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnZpc2l0QWRk
aXRpb25hbENoaWxkcmVuKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9p
ZCBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlND
OjpTbG90VmlzaXRvciYpOworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0N1c3RvbUV2ZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0N1c3RvbUV2ZW50Q3VzdG9tLmNwcAkocmV2
aXNpb24gMjcxNzg2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDdXN0b21FdmVu
dEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyLDEwICs0MiwxNSBAQCBKU0M6OkpTVmFs
dWUgSlNDdXN0b21FdmVudDo6ZGV0YWlsKEpTQzo6CiAgICAgfSk7CiB9CiAKLXZvaWQgSlNDdXN0
b21FdmVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRv
cikKKy8vdm9pZCBKU0N1c3RvbUV2ZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNs
b3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlND
dXN0b21FdmVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsK
ICAgICB3cmFwcGVkKCkuZGV0YWlsKCkudmlzaXQodmlzaXRvcik7CiAgICAgd3JhcHBlZCgpLmNh
Y2hlZERldGFpbCgpLnZpc2l0KHZpc2l0b3IpOwogfQogCit0ZW1wbGF0ZSB2b2lkIEpTQ3VzdG9t
RXZlbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYp
OwordGVtcGxhdGUgdm9pZCBKU0N1c3RvbUV2ZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihK
U0M6OlNsb3RWaXNpdG9yJik7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQnVpbHRpbkNvbnN0cnVjdG9yQmFzZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CdWlsdGluQ29uc3Ry
dWN0b3JCYXNlLmNwcAkocmV2aXNpb24gMjcxNzg2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNET01CdWlsdGluQ29uc3RydWN0b3JCYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDUsNyArNDUsOCBAQCB2b2lkIEpTRE9NQnVpbHRpbkNvbnN0cnVjdG9yQmFzZTo6Y2FsbEZ1CiAg
ICAgSlNDOjpjYWxsKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAmZnVuY3Rpb24sIGNhbGxEYXRhLCAm
dGhpc09iamVjdCwgYXJndW1lbnRzKTsKIH0KIAotdm9pZCBKU0RPTUJ1aWx0aW5Db25zdHJ1Y3Rv
ckJhc2U6OnZpc2l0Q2hpbGRyZW4oSlNDOjpKU0NlbGwqIGNlbGwsIEpTQzo6U2xvdFZpc2l0b3Im
IHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0RPTUJ1aWx0aW5D
b25zdHJ1Y3RvckJhc2U6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQzo6SlNDZWxsKiBjZWxsLCBWaXNp
dG9yJiB2aXNpdG9yKQogewogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNET01CdWls
dGluQ29uc3RydWN0b3JCYXNlKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklU
Uyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNTMsNiArNTQsOCBAQCB2b2lkIEpTRE9NQnVpbHRp
bkNvbnN0cnVjdG9yQmFzZTo6dmlzaXRDCiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+
bV9pbml0aWFsaXplRnVuY3Rpb24pOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNET01C
dWlsdGluQ29uc3RydWN0b3JCYXNlKTsKKwogSlNDOjpJc29TdWJzcGFjZSogSlNET01CdWlsdGlu
Q29uc3RydWN0b3JCYXNlOjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCiB7CiAgICAgcmV0
dXJuICZzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpLT5kb21CdWls
dGluQ29uc3RydWN0b3JTcGFjZSgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNET01CdWlsdGluQ29uc3RydWN0b3JCYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNET01CdWlsdGluQ29uc3RydWN0b3JCYXNlLmgJKHJldmlzaW9uIDI3
MTc4NikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQnVpbHRpbkNvbnN0cnVj
dG9yQmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00Miw3ICs0Miw3IEBAIHByb3RlY3RlZDoKICAg
ICB7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0M6OkpTQ2VsbCos
IEpTQzo6U2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAg
SlNDOjpKU0Z1bmN0aW9uKiBpbml0aWFsaXplRnVuY3Rpb24oKTsKICAgICB2b2lkIHNldEluaXRp
YWxpemVGdW5jdGlvbihKU0M6OlZNJiwgSlNDOjpKU0Z1bmN0aW9uJik7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01HbG9iYWxPYmplY3QuY3BwCShyZXZpc2lv
biAyNzE3ODYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVj
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzNSw3ICsyMzUsOCBAQCBTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiBKU0RPTUdsb2JhbE9iamVjCiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLXZvaWQg
SlNET01HbG9iYWxPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRv
ciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTRE9NR2xvYmFs
T2JqZWN0Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3Ip
CiB7CiAgICAgSlNET01HbG9iYWxPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNET01HbG9i
YWxPYmplY3QqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmpl
Y3QsIGluZm8oKSk7CkBAIC0yNTcsNiArMjU4LDggQEAgdm9pZCBKU0RPTUdsb2JhbE9iamVjdDo6
dmlzaXRDaGlsZHJlbihKUwogICAgIHRoaXNPYmplY3QtPm1fYnVpbHRpbkludGVybmFsRnVuY3Rp
b25zLnZpc2l0KHZpc2l0b3IpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNET01HbG9i
YWxPYmplY3QpOworCiB2b2lkIEpTRE9NR2xvYmFsT2JqZWN0Ojpwcm9taXNlUmVqZWN0aW9uVHJh
Y2tlcihKU0dsb2JhbE9iamVjdCoganNHbG9iYWxPYmplY3QsIEpTUHJvbWlzZSogcHJvbWlzZSwg
SlNQcm9taXNlUmVqZWN0aW9uT3BlcmF0aW9uIG9wZXJhdGlvbikKIHsKICAgICAvLyBodHRwczov
L2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS93ZWJhcHBhcGlzLmh0bWwjdGhlLWhvc3Rw
cm9taXNlcmVqZWN0aW9udHJhY2tlci1pbXBsZW1lbnRhdGlvbgpJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNET01HbG9iYWxPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5oCShyZXZpc2lvbiAyNzE3ODYp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC02OSw3ICs2OSw3IEBAIHB1YmxpYzoKICAgICAvLyBNYWtlIGJpbmRpbmcg
Y29kZSBnZW5lcmF0aW9uIGVhc2llci4KICAgICBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0KCkgeyByZXR1cm4gdGhpczsgfQogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihK
U0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxE
UkVOOwogCiAgICAgRE9NV3JhcHBlcldvcmxkJiB3b3JsZCgpIHsgcmV0dXJuIG1fd29ybGQuZ2V0
KCk7IH0KICAgICBib29sIHdvcmxkSXNOb3JtYWwoKSBjb25zdCB7IHJldHVybiBtX3dvcmxkSXNO
b3JtYWw7IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR3VhcmRlZE9i
amVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR3Vh
cmRlZE9iamVjdC5oCShyZXZpc2lvbiAyNzE3ODYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0RPTUd1YXJkZWRPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtNDAsNyArNDAsOCBA
QCBwdWJsaWM6CiAKICAgICBib29sIGlzU3VzcGVuZGVkKCkgY29uc3QgeyByZXR1cm4gIW1fZ3Vh
cmRlZCB8fCAhY2FuSW52b2tlQ2FsbGJhY2soKTsgfSAvLyBUaGUgd3JhcHBlciB3b3JsZCBoYXMg
Z29uZSBhd2F5IG9yIGFjdGl2ZSBET00gb2JqZWN0cyBoYXZlIGJlZW4gc3VzcGVuZGVkLgogCi0g
ICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKSB7IHZpc2l0
b3IuYXBwZW5kKG1fZ3VhcmRlZCk7IH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgor
ICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoVmlzaXRvciYgdmlzaXRvcikgeyB2aXNpdG9yLmFwcGVu
ZChtX2d1YXJkZWQpOyB9CiAKICAgICBKU0M6OkpTVmFsdWUgZ3VhcmRlZE9iamVjdCgpIGNvbnN0
IHsgcmV0dXJuIG1fZ3VhcmRlZC5nZXQoKTsgfQogICAgIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QoKSBjb25zdCB7IHJldHVybiBtX2dsb2JhbE9iamVjdC5nZXQoKTsgfQpJbmRleDog
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01RdWFkQ3VzdG9tLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVF1YWRDdXN0b20uY3BwCShyZXZp
c2lvbiAyNzE3ODYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVF1YWRDdXN0
b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3ICszMyw5IEBACiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCi12b2lkIEpTRE9NUXVhZDo6dmlzaXRBZGRpdGlv
bmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3ZvaWQgSlNET01RdWFkOjp2aXNp
dEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVu
YW1lIFZpc2l0b3I+Cit2b2lkIEpTRE9NUXVhZDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlz
aXRvciYgdmlzaXRvcikKIHsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QoY29uc3RfY2FzdDxE
T01Qb2ludCo+KCZ3cmFwcGVkKCkucDEoKSkpOwogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChj
b25zdF9jYXN0PERPTVBvaW50Kj4oJndyYXBwZWQoKS5wMigpKSk7CkBAIC00MSw0ICs0Myw3IEBA
IHZvaWQgSlNET01RdWFkOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbigKICAgICB2aXNpdG9yLmFk
ZE9wYXF1ZVJvb3QoY29uc3RfY2FzdDxET01Qb2ludCo+KCZ3cmFwcGVkKCkucDQoKSkpOwogfQog
Ci19Cit0ZW1wbGF0ZSB2b2lkIEpTRE9NUXVhZDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oQWJz
dHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU0RPTVF1YWQ6OnZpc2l0QWRkaXRp
b25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93Q3VzdG9tLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0N1c3RvbS5j
cHAJKHJldmlzaW9uIDI3MTc4NikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9N
V2luZG93Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE2LDcgKzExNiw5IEBAIEpTQ19E
RUZJTkVfQ1VTVE9NX0dFVFRFUihqc0RPTVdpbmRvd0luc3QKICAgICByZXR1cm4gbm9uQ2FjaGlu
Z1N0YXRpY0Z1bmN0aW9uR2V0dGVySW1wbDxqc0RPTVdpbmRvd0luc3RhbmNlRnVuY3Rpb25fcG9z
dE1lc3NhZ2UsIDI+KGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lKTsKIH0KIAotdm9pZCBKU0RP
TVdpbmRvdzo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisv
L3ZvaWQgSlNET01XaW5kb3c6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNET01XaW5kb3c6OnZp
c2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgaWYgKEZyYW1l
KiBmcmFtZSA9IHdyYXBwZWQoKS5mcmFtZSgpKQogICAgICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJv
b3QoZnJhbWUpOwpAQCAtMTI5LDYgKzEzMSw5IEBAIHZvaWQgSlNET01XaW5kb3c6OnZpc2l0QWRk
aXRpb25hbENoaWxkcmUKICAgICB3cmFwcGVkKCkudmlzaXRKU0V2ZW50TGlzdGVuZXJzKHZpc2l0
b3IpOwogfQogCit0ZW1wbGF0ZSB2b2lkIEpTRE9NV2luZG93Ojp2aXNpdEFkZGl0aW9uYWxDaGls
ZHJlbihBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTRE9NV2luZG93Ojp2
aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYpOworCiAjaWYgRU5BQkxFKFVTRVJf
TUVTU0FHRV9IQU5ETEVSUykKIEpTQ19ERUZJTkVfQ1VTVE9NX0dFVFRFUihqc0RPTVdpbmRvd193
ZWJraXQsIChKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFs
dWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpKQogewpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNEZXByZWNhdGVkQ1NTT01WYWx1ZUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNEZXByZWNhdGVkQ1NTT01WYWx1ZUN1c3RvbS5j
cHAJKHJldmlzaW9uIDI3MTc4NikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGVw
cmVjYXRlZENTU09NVmFsdWVDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw3ICszNSw3
IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCi1ib29sIEpT
RGVwcmVjYXRlZENTU09NVmFsdWVPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlND
OjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBTbG90VmlzaXRvciYgdmlzaXRv
ciwgY29uc3QgY2hhcioqIHJlYXNvbikKK2Jvb2wgSlNEZXByZWNhdGVkQ1NTT01WYWx1ZU93bmVy
Ojppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhh
bmRsZSwgdm9pZCosIEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiBy
ZWFzb24pCiB7CiAgICAgSlNEZXByZWNhdGVkQ1NTT01WYWx1ZSoganNDU1NWYWx1ZSA9IGpzQ2Fz
dDxKU0RlcHJlY2F0ZWRDU1NPTVZhbHVlKj4oaGFuZGxlLnNsb3QoKS0+YXNDZWxsKCkpOwogICAg
IGlmICghanNDU1NWYWx1ZS0+aGFzQ3VzdG9tUHJvcGVydGllcyhqc0NTU1ZhbHVlLT52bSgpKSkK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRG9jdW1lbnRDdXN0b20uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRG9jdW1lbnRDdXN0b20u
Y3BwCShyZXZpc2lvbiAyNzE3ODYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Rv
Y3VtZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTEsMTEgKzkxLDE2IEBAIEpTVmFs
dWUgdG9KUyhKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2IKICAgICByZXR1cm4gdG9KU05ld2x5
Q3JlYXRlZChsZXhpY2FsR2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QsIFJlZjxEb2N1bWVudD4o
ZG9jdW1lbnQpKTsKIH0KIAotdm9pZCBKU0RvY3VtZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJl
bihTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vdm9pZCBKU0RvY3VtZW50Ojp2aXNpdEFkZGl0aW9u
YWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0
b3I+Cit2b2lkIEpTRG9jdW1lbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZp
c2l0b3IpCiB7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHN0YXRpY19jYXN0PFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqPigmd3JhcHBlZCgpKSk7CiB9CiAKK3RlbXBsYXRlIHZvaWQgSlNEb2N1
bWVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oQWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVt
cGxhdGUgdm9pZCBKU0RvY3VtZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRv
ciYpOworCiB2b2lkIEpTRG9jdW1lbnQ6OmFuYWx5emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFu
YWx5emVyJiBhbmFseXplcikKIHsKICAgICBCYXNlOjphbmFseXplSGVhcChjZWxsLCBhbmFseXpl
cik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Vycm9yRXZlbnRDdXN0b20u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXJyb3JFdmVu
dEN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MTc4NikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTRXJyb3JFdmVudEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDkgKzI4LDE0
IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBKU0Vycm9yRXZlbnQ6OnZpc2l0QWRk
aXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3ZvaWQgSlNFcnJv
ckV2ZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9y
KQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNFcnJvckV2ZW50Ojp2aXNpdEFk
ZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHdyYXBwZWQoKS5vcmln
aW5hbEVycm9yKCkudmlzaXQodmlzaXRvcik7CiB9CiAKK3RlbXBsYXRlIHZvaWQgSlNFcnJvckV2
ZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKTsK
K3RlbXBsYXRlIHZvaWQgSlNFcnJvckV2ZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6
OlNsb3RWaXNpdG9yJik7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRMaXN0ZW5lci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudExpc3RlbmVyLmNwcAkocmV2aXNpb24gMjcx
Nzg2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudExpc3RlbmVyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNzgsNyArNzgsOCBAQCBKU09iamVjdCogSlNFdmVudExpc3RlbmVy
Ojppbml0aWFsaXplSlNGCiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLXZvaWQgSlNFdmVudExp
c3RlbmVyOjp2aXNpdEpTRnVuY3Rpb24oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3ZvaWQgSlNF
dmVudExpc3RlbmVyOjp2aXNpdEpTRnVuY3Rpb24oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2b2lk
IEpTRXZlbnRMaXN0ZW5lcjo6dmlzaXRKU0Z1bmN0aW9uKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZp
c2l0b3IpCiB7CiAgICAgLy8gSWYgbV93cmFwcGVyIGlzIG51bGwsIHdlIGFyZSBub3Qga2VlcGlu
ZyBtX2pzRnVuY3Rpb24gYWxpdmUuCiAgICAgaWYgKCFtX3dyYXBwZXIpCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50TGlzdGVuZXIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50TGlzdGVuZXIuaAkocmV2aXNpb24gMjcxNzg2
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudExpc3RlbmVyLmgJKHdvcmtp
bmcgY29weSkKQEAgLTYyLDcgKzYyLDggQEAgcHVibGljOgogCiBwcml2YXRlOgogICAgIHZpcnR1
YWwgSlNDOjpKU09iamVjdCogaW5pdGlhbGl6ZUpTRnVuY3Rpb24oU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCYpIGNvbnN0OwotICAgIHZvaWQgdmlzaXRKU0Z1bmN0aW9uKEpTQzo6U2xvdFZpc2l0b3Im
KSBmaW5hbDsKKy8vICAgIHZvaWQgdmlzaXRKU0Z1bmN0aW9uKEpTQzo6U2xvdFZpc2l0b3ImKSBm
aW5hbDsKKyAgICB2b2lkIHZpc2l0SlNGdW5jdGlvbihKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3Im
KSBmaW5hbDsKIAogcHJvdGVjdGVkOgogICAgIEpTRXZlbnRMaXN0ZW5lcihKU0M6OkpTT2JqZWN0
KiBmdW5jdGlvbiwgSlNDOjpKU09iamVjdCogd3JhcHBlciwgYm9vbCBpc0F0dHJpYnV0ZSwgRE9N
V3JhcHBlcldvcmxkJik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50
VGFyZ2V0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0V2ZW50VGFyZ2V0Q3VzdG9tLmNwcAkocmV2aXNpb24gMjcxNzg2KQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNFdmVudFRhcmdldEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTcyLDkgKzcyLDE0IEBAIHN0ZDo6dW5pcXVlX3B0cjxKU0V2ZW50VGFyZ2V0V3JhcHBlcj4g
anMKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotdm9pZCBKU0V2ZW50VGFyZ2V0Ojp2aXNpdEFk
ZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vdm9pZCBKU0V2ZW50VGFy
Z2V0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBs
YXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTRXZlbnRUYXJnZXQ6OnZpc2l0QWRkaXRpb25h
bENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgd3JhcHBlZCgpLnZpc2l0SlNFdmVu
dExpc3RlbmVycyh2aXNpdG9yKTsKIH0KIAordGVtcGxhdGUgdm9pZCBKU0V2ZW50VGFyZ2V0Ojp2
aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2
b2lkIEpTRXZlbnRUYXJnZXQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJik7
CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTRmV0Y2hFdmVudEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNGZXRjaEV2ZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gMjcxNzg2KQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNGZXRjaEV2ZW50Q3VzdG9tLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzAsMTEgKzMwLDE2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9p
ZCBKU0ZldGNoRXZlbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3Im
IHZpc2l0b3IpCisvL3ZvaWQgSlNGZXRjaEV2ZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihK
U0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3Zv
aWQgSlNGZXRjaEV2ZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9y
KQogewogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdCgmd3JhcHBlZCgpLnJlcXVlc3QoKSk7CiB9
CiAKLX0KK3RlbXBsYXRlIHZvaWQgSlNGZXRjaEV2ZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJl
bihKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNGZXRjaEV2ZW50
Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJik7CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0hUTUxDYW52YXNFbGVtZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0hUTUxDYW52YXNFbGVtZW50Q3VzdG9tLmNwcAkocmV2aXNpb24g
MjcxNzg2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MQ2FudmFzRWxlbWVu
dEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDkgKzMxLDE0IEBACiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotdm9pZCBKU0hUTUxDYW52YXNFbGVtZW50Ojp2aXNpdEFkZGl0aW9uYWxD
aGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy92b2lkIEpTSFRNTENhbnZhc0Vs
ZW1lbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3Ip
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0hUTUxDYW52YXNFbGVtZW50Ojp2
aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHZpc2l0b3Iu
YWRkT3BhcXVlUm9vdChzdGF0aWNfY2FzdDxDYW52YXNCYXNlKj4oJndyYXBwZWQoKSkpOwogfQog
Cit0ZW1wbGF0ZSB2b2lkIEpTSFRNTENhbnZhc0VsZW1lbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxk
cmVuKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU0hUTUxDYW52
YXNFbGVtZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJik7CisK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTSFRNTFRlbXBsYXRlRWxlbWVudEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNIVE1MVGVtcGxhdGVFbGVtZW50Q3VzdG9tLmNwcAkocmV2aXNp
b24gMjcxNzg2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MVGVtcGxhdGVF
bGVtZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsMTAgKzM3LDE1IEBACiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCi12b2lkIEpTSFRNTFRlbXBs
YXRlRWxlbWVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlz
aXRvcikKKy8vdm9pZCBKU0hUTUxUZW1wbGF0ZUVsZW1lbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxk
cmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
Pgordm9pZCBKU0hUTUxUZW1wbGF0ZUVsZW1lbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZp
c2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgaWYgKGF1dG8qIGNvbnRlbnQgPSB3cmFwcGVkKCkuY29u
dGVudElmQXZhaWxhYmxlKCkpCiAgICAgICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChyb290KGNv
bnRlbnQpKTsKIH0KIAordGVtcGxhdGUgdm9pZCBKU0hUTUxUZW1wbGF0ZUVsZW1lbnQ6OnZpc2l0
QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUg
dm9pZCBKU0hUTUxUZW1wbGF0ZUVsZW1lbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6
U2xvdFZpc2l0b3ImKTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNIaXN0b3J5Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hpc3RvcnlDdXN0b20uY3BwCShyZXZpc2lvbiAyNzE3
ODYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hpc3RvcnlDdXN0b20uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00NCw5ICs0NCwxNCBAQCBKU1ZhbHVlIEpTSGlzdG9yeTo6c3RhdGUo
SlNHbG9iYWxPYmplY3QmCiAgICAgfSk7CiB9CiAKLXZvaWQgSlNIaXN0b3J5Ojp2aXNpdEFkZGl0
aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vdm9pZCBKU0hpc3Rvcnk6OnZp
c2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlw
ZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNIaXN0b3J5Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihW
aXNpdG9yJiB2aXNpdG9yKQogewogICAgIHdyYXBwZWQoKS5jYWNoZWRTdGF0ZUZvckdDKCkudmlz
aXQodmlzaXRvcik7CiB9CiAKK3RlbXBsYXRlIHZvaWQgSlNIaXN0b3J5Ojp2aXNpdEFkZGl0aW9u
YWxDaGlsZHJlbihBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTSGlzdG9y
eTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKKwogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJDdXJzb3JD
dXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURC
Q3Vyc29yQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcxNzg2KQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNJREJDdXJzb3JDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MCw3ICs1
MCw5IEBAIEpTQzo6SlNWYWx1ZSBKU0lEQkN1cnNvcjo6cHJpbWFyeUtleShKU0MKICAgICB9KTsK
IH0KIAotdm9pZCBKU0lEQkN1cnNvcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0
b3ImIHZpc2l0b3IpCisvL3ZvaWQgSlNJREJDdXJzb3I6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVu
KFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQg
SlNJREJDdXJzb3I6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7
CiAgICAgYXV0byYgY3Vyc29yID0gd3JhcHBlZCgpOwogICAgIGlmIChhdXRvKiByZXF1ZXN0ID0g
Y3Vyc29yLnJlcXVlc3QoKSkKQEAgLTU5LDYgKzYxLDkgQEAgdm9pZCBKU0lEQkN1cnNvcjo6dmlz
aXRBZGRpdGlvbmFsQ2hpbGRyZQogICAgIGN1cnNvci5wcmltYXJ5S2V5V3JhcHBlcigpLnZpc2l0
KHZpc2l0b3IpOwogfQogCit0ZW1wbGF0ZSB2b2lkIEpTSURCQ3Vyc29yOjp2aXNpdEFkZGl0aW9u
YWxDaGlsZHJlbihBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTSURCQ3Vy
c29yOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYpOworCiBKU1ZhbHVlIHRv
SlNOZXdseUNyZWF0ZWQoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTRE9NR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIFJlZjxJREJDdXJzb3I+JiYgY3Vyc29yKQogewogICAgIGlmIChpczxJREJD
dXJzb3JXaXRoVmFsdWU+KGN1cnNvcikpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0lEQkN1cnNvcldpdGhWYWx1ZUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNJREJDdXJzb3JXaXRoVmFsdWVDdXN0b20uY3BwCShyZXZpc2lv
biAyNzE3ODYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQkN1cnNvcldpdGhW
YWx1ZUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzLDEyICs0MywxNyBAQCBKU0M6OkpT
VmFsdWUgSlNJREJDdXJzb3JXaXRoVmFsdWU6OnZhbHVlCiAgICAgfSk7CiB9CiAKLXZvaWQgSlNJ
REJDdXJzb3JXaXRoVmFsdWU6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQorLy92b2lkIEpTSURCQ3Vyc29yV2l0aFZhbHVlOjp2aXNpdEFkZGl0aW9uYWxDaGls
ZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2
b2lkIEpTSURCQ3Vyc29yV2l0aFZhbHVlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9y
JiB2aXNpdG9yKQogewogICAgIEpTSURCQ3Vyc29yOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbih2
aXNpdG9yKTsKICAgICB3cmFwcGVkKCkudmFsdWVXcmFwcGVyKCkudmlzaXQodmlzaXRvcik7CiB9
CiAKK3RlbXBsYXRlIHZvaWQgSlNJREJDdXJzb3JXaXRoVmFsdWU6OnZpc2l0QWRkaXRpb25hbENo
aWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNJREJDdXJzb3JX
aXRoVmFsdWU6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CisKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQpJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJJbmRleEN1c3RvbS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJJbmRleEN1c3RvbS5j
cHAJKHJldmlzaW9uIDI3MTc4NikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURC
SW5kZXhDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCwxMSArMzQsMTYgQEAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKLXZvaWQgSlNJREJJbmRleDo6
dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3ZvaWQgSlNJ
REJJbmRleDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0
ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0lEQkluZGV4Ojp2aXNpdEFkZGl0aW9u
YWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9v
dChzdGF0aWNfY2FzdDxJREJJbmRleCY+KHdyYXBwZWQoKSkub2JqZWN0U3RvcmVBc09wYXF1ZVJv
b3QoKSk7CiB9CiAKK3RlbXBsYXRlIHZvaWQgSlNJREJJbmRleDo6dmlzaXRBZGRpdGlvbmFsQ2hp
bGRyZW4oQWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU0lEQkluZGV4Ojp2
aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYpOworCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCT2JqZWN0U3RvcmVDdXN0b20uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCT2JqZWN0U3RvcmVDdXN0b20u
Y3BwCShyZXZpc2lvbiAyNzE3ODYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lE
Qk9iamVjdFN0b3JlQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsMTEgKzM2LDE2IEBA
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCi12b2lkIEpTSURC
T2JqZWN0U3RvcmU6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9y
KQorLy92b2lkIEpTSURCT2JqZWN0U3RvcmU6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNJREJP
YmplY3RTdG9yZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsK
ICAgICBzdGF0aWNfY2FzdDxJREJPYmplY3RTdG9yZSY+KHdyYXBwZWQoKSkudmlzaXRSZWZlcmVu
Y2VkSW5kZXhlcyh2aXNpdG9yKTsKIH0KIAotfQordGVtcGxhdGUgdm9pZCBKU0lEQk9iamVjdFN0
b3JlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1w
bGF0ZSB2b2lkIEpTSURCT2JqZWN0U3RvcmU6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RW
aXNpdG9yJik7CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQlJlcXVlc3RDdXN0b20uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCUmVxdWVzdEN1c3RvbS5jcHAJKHJl
dmlzaW9uIDI3MTc4NikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCUmVxdWVz
dEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg5LDEyICs4OSwxOCBAQCBKU0M6OkpTVmFs
dWUgSlNJREJSZXF1ZXN0OjpyZXN1bHQoSlNDOjpKCiAgICAgfSk7CiB9CiAKLXZvaWQgSlNJREJS
ZXF1ZXN0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKKy8v
dm9pZCBKU0lEQlJlcXVlc3Q6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNJREJSZXF1ZXN0Ojp2
aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGF1dG8mIHJl
cXVlc3QgPSB3cmFwcGVkKCk7CiAgICAgcmVxdWVzdC5yZXN1bHRXcmFwcGVyKCkudmlzaXQodmlz
aXRvcik7CiAgICAgcmVxdWVzdC5jdXJzb3JXcmFwcGVyKCkudmlzaXQodmlzaXRvcik7CiB9CiAK
LX0KK3RlbXBsYXRlIHZvaWQgSlNJREJSZXF1ZXN0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihB
YnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTSURCUmVxdWVzdDo6dmlzaXRB
ZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCiAjZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0lEQlRyYW5zYWN0aW9uQ3VzdG9tLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQlRyYW5zYWN0aW9uQ3VzdG9tLmNwcAko
cmV2aXNpb24gMjcxNzg2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJUcmFu
c2FjdGlvbkN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDExICszNCwxNiBAQAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAotdm9pZCBKU0lEQlRyYW5z
YWN0aW9uOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKKy8v
dm9pZCBKU0lEQlRyYW5zYWN0aW9uOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRv
ciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTSURCVHJhbnNh
Y3Rpb246OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAg
c3RhdGljX2Nhc3Q8SURCVHJhbnNhY3Rpb24mPih3cmFwcGVkKCkpLnZpc2l0UmVmZXJlbmNlZE9i
amVjdFN0b3Jlcyh2aXNpdG9yKTsKIH0KIAotfQordGVtcGxhdGUgdm9pZCBKU0lEQlRyYW5zYWN0
aW9uOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1w
bGF0ZSB2b2lkIEpTSURCVHJhbnNhY3Rpb246OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RW
aXNpdG9yJik7CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0ludGVyc2VjdGlvbk9ic2VydmVyQ3VzdG9tLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0ludGVyc2VjdGlvbk9i
c2VydmVyQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcxNzg2KQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNJbnRlcnNlY3Rpb25PYnNlcnZlckN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMwLDEwICszMCwxNSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgSlNJbnRl
cnNlY3Rpb25PYnNlcnZlcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRv
ciYgdmlzaXRvcikKKy8vdm9pZCBKU0ludGVyc2VjdGlvbk9ic2VydmVyOjp2aXNpdEFkZGl0aW9u
YWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUg
VmlzaXRvcj4KK3ZvaWQgSlNJbnRlcnNlY3Rpb25PYnNlcnZlcjo6dmlzaXRBZGRpdGlvbmFsQ2hp
bGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBpZiAoYXV0byogY2FsbGJhY2sgPSB3cmFw
cGVkKCkuY2FsbGJhY2tDb25jdXJyZW50bHkoKSkKICAgICAgICAgY2FsbGJhY2stPnZpc2l0SlNG
dW5jdGlvbih2aXNpdG9yKTsKIH0KIAotfQordGVtcGxhdGUgdm9pZCBKU0ludGVyc2VjdGlvbk9i
c2VydmVyOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3Im
KTsKK3RlbXBsYXRlIHZvaWQgSlNJbnRlcnNlY3Rpb25PYnNlcnZlcjo6dmlzaXRBZGRpdGlvbmFs
Q2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYpOworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0ludGVyc2VjdGlvbk9ic2VydmVyRW50
cnlDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
SW50ZXJzZWN0aW9uT2JzZXJ2ZXJFbnRyeUN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MTc4NikKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW50ZXJzZWN0aW9uT2JzZXJ2ZXJFbnRyeUN1
c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDkgQEAKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi12b2lkIEpTSW50ZXJzZWN0aW9uT2JzZXJ2ZXJFbnRyeTo6dmlzaXRBZGRpdGlv
bmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vdm9pZCBKU0ludGVyc2Vj
dGlvbk9ic2VydmVyRW50cnk6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0
b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0ludGVyc2Vj
dGlvbk9ic2VydmVyRW50cnk6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0
b3IpCiB7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHJvb3Qod3JhcHBlZCgpLnRhcmdldCgp
KSk7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHdyYXBwZWQoKS5ib3VuZGluZ0NsaWVudFJl
Y3QoKSk7CkBAIC0zOCw0ICs0MCw3IEBAIHZvaWQgSlNJbnRlcnNlY3Rpb25PYnNlcnZlckVudHJ5
Ojp2aXNpdEEKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qod3JhcHBlZCgpLnJvb3RCb3VuZHMo
KSk7CiB9CiAKLX0KK3RlbXBsYXRlIHZvaWQgSlNJbnRlcnNlY3Rpb25PYnNlcnZlckVudHJ5Ojp2
aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBs
YXRlIHZvaWQgSlNJbnRlcnNlY3Rpb25PYnNlcnZlckVudHJ5Ojp2aXNpdEFkZGl0aW9uYWxDaGls
ZHJlbihKU0M6OlNsb3RWaXNpdG9yJik7CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWVzc2FnZUNoYW5uZWxDdXN0b20uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWVzc2FnZUNoYW5uZWxD
dXN0b20uY3BwCShyZXZpc2lvbiAyNzE3ODYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU01lc3NhZ2VDaGFubmVsQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNyArMzMs
OSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgSlNNZXNzYWdlQ2hhbm5lbDo6dmlz
aXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vdm9pZCBK
U01lc3NhZ2VDaGFubmVsOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9y
JiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNNZXNzYWdlQ2hh
bm5lbDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBp
ZiAoTWVzc2FnZVBvcnQqIHBvcnQgPSB3cmFwcGVkKCkucG9ydDEoKSkKICAgICAgICAgdmlzaXRv
ci5hZGRPcGFxdWVSb290KHBvcnQpOwpAQCAtNDIsNiArNDQsOSBAQCB2b2lkIEpTTWVzc2FnZUNo
YW5uZWw6OnZpc2l0QWRkaXRpb25hbENoCiAgICAgICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChw
b3J0KTsKIH0KIAordGVtcGxhdGUgdm9pZCBKU01lc3NhZ2VDaGFubmVsOjp2aXNpdEFkZGl0aW9u
YWxDaGlsZHJlbihKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNN
ZXNzYWdlQ2hhbm5lbDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYp
OworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoQ0hBTk5FTF9N
RVNTQUdJTkcpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01lc3NhZ2VFdmVu
dEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNN
ZXNzYWdlRXZlbnRDdXN0b20uY3BwCShyZXZpc2lvbiAyNzE3ODYpCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU01lc3NhZ2VFdmVudEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTcwLDcgKzcwLDkgQEAgSlNDOjpKU1ZhbHVlIEpTTWVzc2FnZUV2ZW50OjpkYXRhKEpTQzo6Sgog
ICAgIH0pOwogfQogCi12b2lkIEpTTWVzc2FnZUV2ZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJl
bihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy92b2lkIEpTTWVzc2FnZUV2ZW50Ojp2aXNp
dEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8
dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNNZXNzYWdlRXZlbnQ6OnZpc2l0QWRkaXRpb25hbENo
aWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgV1RGOjpzd2l0Y2hPbih3cmFwcGVkKCku
ZGF0YSgpLCBbJnZpc2l0b3JdIChjb25zdCBKU1ZhbHVlSW5XcmFwcGVkT2JqZWN0JiBkYXRhKSB7
CiAgICAgICAgIGRhdGEudmlzaXQodmlzaXRvcik7CkBAIC04NCw0ICs4Niw3IEBAIHZvaWQgSlNN
ZXNzYWdlRXZlbnQ6OnZpc2l0QWRkaXRpb25hbENoaWwKICAgICB3cmFwcGVkKCkuY2FjaGVkUG9y
dHMoKS52aXNpdCh2aXNpdG9yKTsKIH0KIAordGVtcGxhdGUgdm9pZCBKU01lc3NhZ2VFdmVudDo6
dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1w
bGF0ZSB2b2lkIEpTTWVzc2FnZUV2ZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNs
b3RWaXNpdG9yJik7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTTWVzc2FnZVBvcnRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWVzc2FnZVBvcnRDdXN0b20uY3BwCShyZXZpc2lv
biAyNzE3ODYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01lc3NhZ2VQb3J0Q3Vz
dG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsMTEgKzMxLDE2IEBACiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCi12b2lkIEpTTWVzc2FnZVBvcnQ6OnZpc2l0
QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy92b2lkIEpTTWVzc2Fn
ZVBvcnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVt
cGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNNZXNzYWdlUG9ydDo6dmlzaXRBZGRpdGlv
bmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICAvLyBJZiB3ZSBoYXZlIGEgbG9j
YWxseSBlbnRhbmdsZWQgcG9ydCwgd2UgY2FuIGRpcmVjdGx5IG1hcmsgaXQgYXMgcmVhY2hhYmxl
LiBQb3J0cyB0aGF0IGFyZSByZW1vdGVseSBlbnRhbmdsZWQgYXJlIG1hcmtlZCBpbi11c2UgYnkg
bWFya0FjdGl2ZU9iamVjdHNGb3JDb250ZXh0KCkuCiAgICAgaWYgKE1lc3NhZ2VQb3J0KiBwb3J0
ID0gd3JhcHBlZCgpLmxvY2FsbHlFbnRhbmdsZWRQb3J0KCkpCiAgICAgICAgIHZpc2l0b3IuYWRk
T3BhcXVlUm9vdChwb3J0KTsKIH0KIAordGVtcGxhdGUgdm9pZCBKU01lc3NhZ2VQb3J0Ojp2aXNp
dEFkZGl0aW9uYWxDaGlsZHJlbihBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lk
IEpTTWVzc2FnZVBvcnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CisK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTTXV0YXRpb25PYnNlcnZlckN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNNdXRhdGlvbk9ic2VydmVyQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcx
Nzg2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNdXRhdGlvbk9ic2VydmVyQ3Vz
dG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksMTIgKzM5LDE3IEBACiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCi12b2lkIEpTTXV0YXRpb25PYnNlcnZlcjo6
dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vdm9p
ZCBKU011dGF0aW9uT2JzZXJ2ZXI6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZp
c2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU011dGF0
aW9uT2JzZXJ2ZXI6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7
CiAgICAgd3JhcHBlZCgpLmNhbGxiYWNrKCkudmlzaXRKU0Z1bmN0aW9uKHZpc2l0b3IpOwogfQog
Ci1ib29sIEpTTXV0YXRpb25PYnNlcnZlck93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290
cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIFNsb3RWaXNpdG9yJiB2
aXNpdG9yLCBjb25zdCBjaGFyKipyZWFzb24pCit0ZW1wbGF0ZSB2b2lkIEpTTXV0YXRpb25PYnNl
cnZlcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJik7
Cit0ZW1wbGF0ZSB2b2lkIEpTTXV0YXRpb25PYnNlcnZlcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRy
ZW4oSlNDOjpTbG90VmlzaXRvciYpOworCitib29sIEpTTXV0YXRpb25PYnNlcnZlck93bmVyOjpp
c1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRs
ZSwgdm9pZCosIEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKnJlYXNv
bikKIHsKICAgICBmb3IgKGF1dG8qIG5vZGUgOiBqc0Nhc3Q8SlNNdXRhdGlvbk9ic2VydmVyKj4o
aGFuZGxlLnNsb3QoKS0+YXNDZWxsKCkpLT53cmFwcGVkKCkub2JzZXJ2ZWROb2RlcygpKSB7CiAg
ICAgICAgIGlmICh2aXNpdG9yLmNvbnRhaW5zT3BhcXVlUm9vdChyb290KG5vZGUpKSkgewpJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNdXRhdGlvblJlY29yZEN1c3RvbS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNdXRhdGlvblJlY29y
ZEN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MTc4NikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTTXV0YXRpb25SZWNvcmRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw5ICsz
MCwxNCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgSlNNdXRhdGlvblJlY29yZDo6
dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vdm9p
ZCBKU011dGF0aW9uUmVjb3JkOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNp
dG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNNdXRhdGlv
blJlY29yZDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAg
ICB3cmFwcGVkKCkudmlzaXROb2Rlc0NvbmN1cnJlbnRseSh2aXNpdG9yKTsKIH0KLSAgICAKKwor
dGVtcGxhdGUgdm9pZCBKU011dGF0aW9uUmVjb3JkOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihK
U0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNNdXRhdGlvblJlY29y
ZDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYpOworCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05hdmln
YXRvckN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNOYXZpZ2F0b3JDdXN0b20uY3BwCShyZXZpc2lvbiAyNzE3ODYpCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU05hdmlnYXRvckN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMy
LDExICszMiwxNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgSlNOYXZpZ2F0b3I6
OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3Zv
aWQgSlNOYXZpZ2F0b3I6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3Im
IHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU05hdmlnYXRvcjo6
dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB2aXNpdG9y
LmFkZE9wYXF1ZVJvb3Qoc3RhdGljX2Nhc3Q8TmF2aWdhdG9yQmFzZSo+KCZ3cmFwcGVkKCkpKTsK
IH0KIAordGVtcGxhdGUgdm9pZCBKU05hdmlnYXRvcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4o
SlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTTmF2aWdhdG9yOjp2
aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJik7CisKICNpZiBFTkFCTEUo
TUVESUFfU1RSRUFNKQogSlNDOjpKU1ZhbHVlIEpTTmF2aWdhdG9yOjpnZXRVc2VyTWVkaWEoSlND
OjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpDYWxsRnJhbWUmIGNh
bGxGcmFtZSkKIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUN1c3Rv
bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlQ3Vz
dG9tLmNwcAkocmV2aXNpb24gMjcxNzg2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNOb2RlQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzQsNyArNzQsOCBAQCB1c2luZyBu
YW1lc3BhY2UgSlNDOwogCiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCi1zdGF0aWMgaW5s
aW5lIGJvb2wgaXNSZWFjaGFibGVGcm9tRE9NKE5vZGUqIG5vZGUsIFNsb3RWaXNpdG9yJiB2aXNp
dG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQorLy9zdGF0aWMgaW5saW5lIGJvb2wgaXNSZWFjaGFi
bGVGcm9tRE9NKE5vZGUqIG5vZGUsIFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiog
cmVhc29uKQorc3RhdGljIGlubGluZSBib29sIGlzUmVhY2hhYmxlRnJvbURPTShOb2RlKiBub2Rl
LCBBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQogewog
ICAgIGlmICghbm9kZS0+aXNDb25uZWN0ZWQoKSkgewogICAgICAgICBpZiAoaXM8RWxlbWVudD4o
Km5vZGUpKSB7CkBAIC0xMjMsNyArMTI0LDcgQEAgc3RhdGljIGlubGluZSBib29sIGlzUmVhY2hh
YmxlRnJvbURPTShObwogICAgIHJldHVybiB2aXNpdG9yLmNvbnRhaW5zT3BhcXVlUm9vdChyb290
KG5vZGUpKTsKIH0KIAotYm9vbCBKU05vZGVPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9v
dHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBTbG90VmlzaXRvciYg
dmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikKK2Jvb2wgSlNOb2RlT3duZXI6OmlzUmVhY2hh
YmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lk
KiwgQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikKIHsK
ICAgICBKU05vZGUqIGpzTm9kZSA9IGpzQ2FzdDxKU05vZGUqPihoYW5kbGUuc2xvdCgpLT5hc0Nl
bGwoKSk7CiAgICAgcmV0dXJuIGlzUmVhY2hhYmxlRnJvbURPTSgmanNOb2RlLT53cmFwcGVkKCks
IHZpc2l0b3IsIHJlYXNvbik7CkBAIC0xMzYsMTEgKzEzNywxNiBAQCBKU1Njb3BlKiBKU05vZGU6
OnB1c2hFdmVudEhhbmRsZXJTY29wZShKCiAgICAgcmV0dXJuIG5vZGU7CiB9CiAKLXZvaWQgSlNO
b2RlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vdm9p
ZCBKU05vZGU6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQor
dGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNOb2RlOjp2aXNpdEFkZGl0aW9uYWxD
aGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChy
b290KHdyYXBwZWQoKSkpOwogfQogCit0ZW1wbGF0ZSB2b2lkIEpTTm9kZTo6dmlzaXRBZGRpdGlv
bmFsQ2hpbGRyZW4oQWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU05vZGU6
OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CisKIHN0YXRpYyBBTFdBWVNf
SU5MSU5FIEpTVmFsdWUgY3JlYXRlV3JhcHBlcklubGluZShKU0dsb2JhbE9iamVjdCogbGV4aWNh
bEdsb2JhbE9iamVjdCwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmPE5vZGU+
JiYgbm9kZSkKIHsKICAgICBBU1NFUlQoIWdldENhY2hlZFdyYXBwZXIoZ2xvYmFsT2JqZWN0LT53
b3JsZCgpLCBub2RlKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVJ
dGVyYXRvckN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNOb2RlSXRlcmF0b3JDdXN0b20uY3BwCShyZXZpc2lvbiAyNzE3ODYpCisrKyBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVJdGVyYXRvckN1c3RvbS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI1LDEwICsyNSwxNSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgSlNO
b2RlSXRlcmF0b3I6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZp
c2l0b3IpCisvL3ZvaWQgSlNOb2RlSXRlcmF0b3I6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpT
Qzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9p
ZCBKU05vZGVJdGVyYXRvcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRv
cikKIHsKICAgICBpZiAoTm9kZUZpbHRlciogZmlsdGVyID0gd3JhcHBlZCgpLmZpbHRlcigpKQog
ICAgICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QoZmlsdGVyKTsKIH0KIAotfQordGVtcGxhdGUg
dm9pZCBKU05vZGVJdGVyYXRvcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpBYnN0cmFj
dFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTTm9kZUl0ZXJhdG9yOjp2aXNpdEFkZGl0
aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJik7CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUxpc3RDdXN0b20uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUxpc3RDdXN0
b20uY3BwCShyZXZpc2lvbiAyNzE3ODYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U05vZGVMaXN0Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsNyArMzcsNyBAQAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAotYm9vbCBKU05vZGVMaXN0
T3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93
bj4gaGFuZGxlLCB2b2lkKiwgU2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFz
b24pCitib29sIEpTTm9kZUxpc3RPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlND
OjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBBYnN0cmFjdFNsb3RWaXNpdG9y
JiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQogewogICAgIEpTTm9kZUxpc3QqIGpzTm9k
ZUxpc3QgPSBqc0Nhc3Q8SlNOb2RlTGlzdCo+KGhhbmRsZS5zbG90KCktPmFzQ2VsbCgpKTsKICAg
ICBpZiAoIWpzTm9kZUxpc3QtPmhhc0N1c3RvbVByb3BlcnRpZXMoanNOb2RlTGlzdC0+dm0oKSkp
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU09mZnNjcmVlbkNhbnZhc1JlbmRl
cmluZ0NvbnRleHQyREN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNPZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRDdXN0b20uY3BwCShy
ZXZpc2lvbiAyNzE3ODYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU09mZnNjcmVl
bkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyREN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMx
LDcgKzMxLDcgQEAgaW5saW5lIHZvaWQqIHJvb3QoT2Zmc2NyZWVuQ2FudmFzKiBjYW52YQogICAg
IHJldHVybiBjYW52YXM7CiB9CiAKLWJvb2wgSlNPZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdDb250
ZXh0MkRPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpV
bmtub3duPiBoYW5kbGUsIHZvaWQqLCBTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioq
IHJlYXNvbikKK2Jvb2wgSlNPZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRPd25lcjo6
aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5k
bGUsIHZvaWQqLCBBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVh
c29uKQogewogICAgIGlmIChVTkxJS0VMWShyZWFzb24pKQogICAgICAgICAqcmVhc29uID0gIkNh
bnZhcyBpcyBvcGFxdWUgcm9vdCI7CkBAIC00MSwxMSArNDEsMTYgQEAgYm9vbCBKU09mZnNjcmVl
bkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRAogICAgIHJldHVybiB2aXNpdG9yLmNvbnRhaW5zT3Bh
cXVlUm9vdChyb290KTsKIH0KIAotdm9pZCBKU09mZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyRDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3Zv
aWQgSlNPZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnZpc2l0QWRkaXRpb25hbENo
aWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4K
K3ZvaWQgSlNPZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnZpc2l0QWRkaXRpb25h
bENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290
KHJvb3QoJndyYXBwZWQoKS5jYW52YXMoKSkpOwogfQogCit0ZW1wbGF0ZSB2b2lkIEpTT2Zmc2Ny
ZWVuQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihBYnN0
cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTT2Zmc2NyZWVuQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJEOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYpOworCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNQYWludFJlbmRlcmluZ0NvbnRleHQyREN1c3RvbS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNQYWludFJlbmRlcmluZ0NvbnRleHQyREN1
c3RvbS5jcHAJKHJldmlzaW9uIDI3MTc4NikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTUGFpbnRSZW5kZXJpbmdDb250ZXh0MkRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
Niw3ICszNiw3IEBAIGlubGluZSB2b2lkKiByb290KEN1c3RvbVBhaW50Q2FudmFzKiBjYW4KICAg
ICByZXR1cm4gY2FudmFzOwogfQogCi1ib29sIEpTUGFpbnRSZW5kZXJpbmdDb250ZXh0MkRPd25l
cjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBo
YW5kbGUsIHZvaWQqLCBTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikK
K2Jvb2wgSlNQYWludFJlbmRlcmluZ0NvbnRleHQyRE93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFx
dWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIEFic3RyYWN0
U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCiB7CiAgICAgaWYgKFVO
TElLRUxZKHJlYXNvbikpCiAgICAgICAgICpyZWFzb24gPSAiQ2FudmFzIGlzIG9wYXF1ZSByb290
IjsKQEAgLTQ2LDExICs0NiwxNiBAQCBib29sIEpTUGFpbnRSZW5kZXJpbmdDb250ZXh0MkRPd25l
cjo6aXNSCiAgICAgcmV0dXJuIHZpc2l0b3IuY29udGFpbnNPcGFxdWVSb290KHJvb3QpOwogfQog
Ci12b2lkIEpTUGFpbnRSZW5kZXJpbmdDb250ZXh0MkQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVu
KFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy92b2lkIEpTUGFpbnRSZW5kZXJpbmdDb250ZXh0MkQ6
OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8
dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNQYWludFJlbmRlcmluZ0NvbnRleHQyRDo6dmlzaXRB
ZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB2aXNpdG9yLmFkZE9w
YXF1ZVJvb3Qocm9vdCgmd3JhcHBlZCgpLmNhbnZhcygpKSk7CiB9CiAKK3RlbXBsYXRlIHZvaWQg
SlNQYWludFJlbmRlcmluZ0NvbnRleHQyRDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oQWJzdHJh
Y3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU1BhaW50UmVuZGVyaW5nQ29udGV4dDJE
Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYpOworCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCiAjZW5kaWYKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNQ
YWludFdvcmtsZXRHbG9iYWxTY29wZUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNQYWludFdvcmtsZXRHbG9iYWxTY29wZUN1c3RvbS5jcHAJKHJl
dmlzaW9uIDI3MTc4NikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUGFpbnRXb3Jr
bGV0R2xvYmFsU2NvcGVDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw5IEBA
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCi12b2lkIEpTUGFp
bnRXb3JrbGV0R2xvYmFsU2NvcGU6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZp
c2l0b3ImIHZpc2l0b3IpCisvL3ZvaWQgSlNQYWludFdvcmtsZXRHbG9iYWxTY29wZTo6dmlzaXRB
ZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5
cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTUGFpbnRXb3JrbGV0R2xvYmFsU2NvcGU6OnZpc2l0QWRk
aXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0byBsb2NrZXIgPSBo
b2xkTG9jayh3cmFwcGVkKCkucGFpbnREZWZpbml0aW9uTG9jaygpKTsKICAgICBmb3IgKGF1dG8m
IHJlZ2lzdGVyZWQgOiB3cmFwcGVkKCkucGFpbnREZWZpbml0aW9uTWFwKCkudmFsdWVzKCkpIHsK
QEAgLTQwLDUgKzQyLDkgQEAgdm9pZCBKU1BhaW50V29ya2xldEdsb2JhbFNjb3BlOjp2aXNpdEFk
ZAogICAgIH0KIH0KIAotfQordGVtcGxhdGUgdm9pZCBKU1BhaW50V29ya2xldEdsb2JhbFNjb3Bl
Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3Rl
bXBsYXRlIHZvaWQgSlNQYWludFdvcmtsZXRHbG9iYWxTY29wZTo6dmlzaXRBZGRpdGlvbmFsQ2hp
bGRyZW4oSlNDOjpTbG90VmlzaXRvciYpOworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKICNl
bmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNQYXltZW50TWV0aG9kQ2hh
bmdlRXZlbnRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTUGF5bWVudE1ldGhvZENoYW5nZUV2ZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gMjcxNzg2
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNQYXltZW50TWV0aG9kQ2hhbmdlRXZl
bnRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0MSw5IEBAIEpTQzo6SlNWYWx1
ZSBKU1BheW1lbnRNZXRob2RDaGFuZ2VFdmVudDoKICAgICB9KTsKIH0KIAotdm9pZCBKU1BheW1l
bnRNZXRob2RDaGFuZ2VFdmVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90Vmlz
aXRvciYgdmlzaXRvcikKKy8vdm9pZCBKU1BheW1lbnRNZXRob2RDaGFuZ2VFdmVudDo6dmlzaXRB
ZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5
cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTUGF5bWVudE1ldGhvZENoYW5nZUV2ZW50Ojp2aXNpdEFk
ZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFdURjo6c3dpdGNoT24o
d3JhcHBlZCgpLm1ldGhvZERldGFpbHMoKSwgWyZ2aXNpdG9yXShjb25zdCBKU1ZhbHVlSW5XcmFw
cGVkT2JqZWN0JiBtZXRob2REZXRhaWxzKSB7CiAgICAgICAgIG1ldGhvZERldGFpbHMudmlzaXQo
dmlzaXRvcik7CkBAIC01MSw2ICs1Myw5IEBAIHZvaWQgSlNQYXltZW50TWV0aG9kQ2hhbmdlRXZl
bnQ6OnZpc2l0QWQKICAgICB3cmFwcGVkKCkuY2FjaGVkTWV0aG9kRGV0YWlscygpLnZpc2l0KHZp
c2l0b3IpOwogfQogCit0ZW1wbGF0ZSB2b2lkIEpTUGF5bWVudE1ldGhvZENoYW5nZUV2ZW50Ojp2
aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBs
YXRlIHZvaWQgSlNQYXltZW50TWV0aG9kQ2hhbmdlRXZlbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxk
cmVuKEpTQzo6U2xvdFZpc2l0b3ImKTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5k
aWYgLy8gRU5BQkxFKFBBWU1FTlRfUkVRVUVTVCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTUGF5bWVudFJlc3BvbnNlQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU1BheW1lbnRSZXNwb25zZUN1c3RvbS5jcHAJKHJldmlzaW9u
IDI3MTc4NikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUGF5bWVudFJlc3BvbnNl
Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsMTEgKzM3LDE2IEBAIEpTQzo6SlNWYWx1
ZSBKU1BheW1lbnRSZXNwb25zZTo6ZGV0YWlscygKICAgICB9KTsKIH0KIAotdm9pZCBKU1BheW1l
bnRSZXNwb25zZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlz
aXRvcikKKy8vdm9pZCBKU1BheW1lbnRSZXNwb25zZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4o
SlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2
b2lkIEpTUGF5bWVudFJlc3BvbnNlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2
aXNpdG9yKQogewogICAgIHdyYXBwZWQoKS5jYWNoZWREZXRhaWxzKCkudmlzaXQodmlzaXRvcik7
CiB9CiAKK3RlbXBsYXRlIHZvaWQgSlNQYXltZW50UmVzcG9uc2U6OnZpc2l0QWRkaXRpb25hbENo
aWxkcmVuKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU1BheW1l
bnRSZXNwb25zZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYpOwor
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoUEFZTUVOVF9SRVFV
RVNUKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNQZXJmb3JtYW5jZU9ic2Vy
dmVyQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U1BlcmZvcm1hbmNlT2JzZXJ2ZXJDdXN0b20uY3BwCShyZXZpc2lvbiAyNzE3ODYpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1BlcmZvcm1hbmNlT2JzZXJ2ZXJDdXN0b20uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zMSwxMiArMzEsMTcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci12b2lkIEpTUGVyZm9ybWFuY2VPYnNlcnZlcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlND
OjpTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vdm9pZCBKU1BlcmZvcm1hbmNlT2JzZXJ2ZXI6OnZp
c2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0
ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1BlcmZvcm1hbmNlT2JzZXJ2ZXI6OnZpc2l0QWRk
aXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgd3JhcHBlZCgpLmNhbGxi
YWNrKCkudmlzaXRKU0Z1bmN0aW9uKHZpc2l0b3IpOwogfQogCi1ib29sIEpTUGVyZm9ybWFuY2VP
YnNlcnZlck93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6
OlVua25vd24+IGhhbmRsZSwgdm9pZCosIEpTQzo6U2xvdFZpc2l0b3ImLCBjb25zdCBjaGFyKiog
cmVhc29uKQordGVtcGxhdGUgdm9pZCBKU1BlcmZvcm1hbmNlT2JzZXJ2ZXI6OnZpc2l0QWRkaXRp
b25hbENoaWxkcmVuKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBK
U1BlcmZvcm1hbmNlT2JzZXJ2ZXI6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZp
c2l0b3ImKTsKKworYm9vbCBKU1BlcmZvcm1hbmNlT2JzZXJ2ZXJPd25lcjo6aXNSZWFjaGFibGVG
cm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBK
U0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImLCBjb25zdCBjaGFyKiogcmVhc29uKQogewogICAgIGlm
IChVTkxJS0VMWShyZWFzb24pKQogICAgICAgICAqcmVhc29uID0gIlJlZ2lzdGVyZWQgUGVyZm9y
bWFuY2VPYnNlcnZlciBjYWxsYmFjayI7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU1BvcFN0YXRlRXZlbnRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTUG9wU3RhdGVFdmVudEN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MTc4NikK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUG9wU3RhdGVFdmVudEN1c3RvbS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTkwLDkgKzkwLDE0IEBAIEpTVmFsdWUgSlNQb3BTdGF0ZUV2ZW50
OjpzdGF0ZShKU0dsb2JhbE8KICAgICByZXR1cm4gY2FjaGVTdGF0ZShyZXN1bHQpOwogfQogCi12
b2lkIEpTUG9wU3RhdGVFdmVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90Vmlz
aXRvciYgdmlzaXRvcikKKy8vdm9pZCBKU1BvcFN0YXRlRXZlbnQ6OnZpc2l0QWRkaXRpb25hbENo
aWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNp
dG9yPgordm9pZCBKU1BvcFN0YXRlRXZlbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0
b3ImIHZpc2l0b3IpCiB7CiAgICAgd3JhcHBlZCgpLnN0YXRlKCkudmlzaXQodmlzaXRvcik7CiB9
CiAKK3RlbXBsYXRlIHZvaWQgSlNQb3BTdGF0ZUV2ZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJl
bihKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNQb3BTdGF0ZUV2
ZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJik7CisKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUHJv
bWlzZVJlamVjdGlvbkV2ZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU1Byb21pc2VSZWplY3Rpb25FdmVudEN1c3RvbS5jcHAJKHJldmlzaW9u
IDI3MTc4NikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUHJvbWlzZVJlamVjdGlv
bkV2ZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsOSArMzIsMTQgQEAKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIEpTUHJvbWlzZVJlamVjdGlvbkV2ZW50Ojp2aXNpdEFk
ZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy92b2lkIEpTUHJv
bWlzZVJlamVjdGlvbkV2ZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNp
dG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNQcm9taXNl
UmVqZWN0aW9uRXZlbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3Ip
CiB7CiAgICAgd3JhcHBlZCgpLnJlYXNvbigpLnZpc2l0KHZpc2l0b3IpOwogfQogCit0ZW1wbGF0
ZSB2b2lkIEpTUHJvbWlzZVJlamVjdGlvbkV2ZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihK
U0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNQcm9taXNlUmVqZWN0
aW9uRXZlbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImKTsKKwog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNSZXNpemVPYnNlcnZlckN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNSZXNpemVPYnNlcnZlckN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MTc4NikK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUmVzaXplT2JzZXJ2ZXJDdXN0b20uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zMCwxMSArMzAsMTYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCi12b2lkIEpTUmVzaXplT2JzZXJ2ZXI6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3ZvaWQgSlNSZXNpemVPYnNlcnZlcjo6dmlzaXRBZGRp
dGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVu
YW1lIFZpc2l0b3I+Cit2b2lkIEpTUmVzaXplT2JzZXJ2ZXI6OnZpc2l0QWRkaXRpb25hbENoaWxk
cmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgUmVzaXplT2JzZXJ2ZXJDYWxsYmFjayogY2Fs
bGJhY2sgPSB3cmFwcGVkKCkuY2FsbGJhY2tDb25jdXJyZW50bHkoKTsKICAgICBpZiAoY2FsbGJh
Y2spCiAgICAgICAgIGNhbGxiYWNrLT52aXNpdEpTRnVuY3Rpb24odmlzaXRvcik7CiB9CiAKLX0K
K3RlbXBsYXRlIHZvaWQgSlNSZXNpemVPYnNlcnZlcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4o
SlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTUmVzaXplT2JzZXJ2
ZXI6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImKTsKKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNSZXNp
emVPYnNlcnZlckVudHJ5Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU1Jlc2l6ZU9ic2VydmVyRW50cnlDdXN0b20uY3BwCShyZXZpc2lvbiAyNzE3
ODYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1Jlc2l6ZU9ic2VydmVyRW50cnlD
dXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCwxMCArMzAsMTUgQEAKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi12b2lkIEpTUmVzaXplT2JzZXJ2ZXJFbnRyeTo6dmlzaXRBZGRpdGlvbmFs
Q2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vdm9pZCBKU1Jlc2l6ZU9ic2Vy
dmVyRW50cnk6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0
b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1Jlc2l6ZU9ic2VydmVyRW50
cnk6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgdmlz
aXRvci5hZGRPcGFxdWVSb290KHJvb3Qod3JhcHBlZCgpLnRhcmdldCgpKSk7CiAgICAgdmlzaXRv
ci5hZGRPcGFxdWVSb290KHdyYXBwZWQoKS5jb250ZW50UmVjdCgpKTsKIH0KIAotfQordGVtcGxh
dGUgdm9pZCBKU1Jlc2l6ZU9ic2VydmVyRW50cnk6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpT
Qzo6QWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU1Jlc2l6ZU9ic2VydmVy
RW50cnk6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImKTsKKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNT
VkdWaWV3U3BlY0N1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNTVkdWaWV3U3BlY0N1c3RvbS5jcHAJKHJldmlzaW9uIDI3MTc4NikKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU1ZHVmlld1NwZWNDdXN0b20uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zMCwxMCArMzAsMTUgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIEpT
U1ZHVmlld1NwZWM6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZp
c2l0b3IpCisvL3ZvaWQgSlNTVkdWaWV3U3BlYzo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlND
OjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lk
IEpTU1ZHVmlld1NwZWM6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3Ip
CiB7CiAgICAgQVNTRVJUKHdyYXBwZWQoKS5jb250ZXh0RWxlbWVudENvbmN1cnJlbnRseSgpLmdl
dCgpKTsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qocm9vdCh3cmFwcGVkKCkuY29udGV4dEVs
ZW1lbnRDb25jdXJyZW50bHkoKS5nZXQoKSkpOwogfQogCi19Cit0ZW1wbGF0ZSB2b2lkIEpTU1ZH
Vmlld1NwZWM6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRv
ciYpOwordGVtcGxhdGUgdm9pZCBKU1NWR1ZpZXdTcGVjOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJl
bihKU0M6OlNsb3RWaXNpdG9yJik7CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU2VydmljZVdvcmtlckdsb2JhbFNjb3BlQ3VzdG9t
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NlcnZpY2VX
b3JrZXJHbG9iYWxTY29wZUN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MTc4NikKKysrIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTU2VydmljZVdvcmtlckdsb2JhbFNjb3BlQ3VzdG9tLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzQsMTIgKzM0LDE3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
dXNpbmcgbmFtZXNwYWNlIEpTQzsKIAotdm9pZCBKU1NlcnZpY2VXb3JrZXJHbG9iYWxTY29wZTo6
dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3ZvaWQgSlNT
ZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGU6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNp
dG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNTZXJ2aWNl
V29ya2VyR2xvYmFsU2NvcGU6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0
b3IpCiB7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KCZ3cmFwcGVkKCkuY2xpZW50cygpKTsK
ICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QoJndyYXBwZWQoKS5yZWdpc3RyYXRpb24oKSk7CiB9
CiAKK3RlbXBsYXRlIHZvaWQgSlNTZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGU6OnZpc2l0QWRkaXRp
b25hbENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNTZXJ2
aWNlV29ya2VyR2xvYmFsU2NvcGU6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9y
Jik7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU1N0eWxlU2hlZXRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU3R5bGVTaGVldEN1c3RvbS5jcHAJKHJldmlzaW9u
IDI3MTc4NikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU3R5bGVTaGVldEN1c3Rv
bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDExICszMCwxNiBAQAogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLXZvaWQgSlNTdHlsZVNoZWV0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6
OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy92b2lkIEpTU3R5bGVTaGVldDo6dmlzaXRBZGRpdGlv
bmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1l
IFZpc2l0b3I+Cit2b2lkIEpTU3R5bGVTaGVldDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlz
aXRvciYgdmlzaXRvcikKIHsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qocm9vdCgmd3JhcHBl
ZCgpKSk7CiB9CiAKK3RlbXBsYXRlIHZvaWQgSlNTdHlsZVNoZWV0Ojp2aXNpdEFkZGl0aW9uYWxD
aGlsZHJlbihBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTU3R5bGVTaGVl
dDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKKwogSlNDOjpKU1ZhbHVl
IHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTRE9NR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIFJlZjxTdHlsZVNoZWV0PiYmIHN0eWxlU2hlZXQpCiB7CiAgICAgaWYg
KHN0eWxlU2hlZXQtPmlzQ1NTU3R5bGVTaGVldCgpKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNUZXh0VHJhY2tDdWVDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTVGV4dFRyYWNrQ3VlQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcx
Nzg2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNUZXh0VHJhY2tDdWVDdXN0b20u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3ICszOCw3IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCi1ib29sIEpTVGV4dFRyYWNrQ3VlT3duZXI6OmlzUmVh
Y2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2
b2lkKiwgU2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCitib29sIEpT
VGV4dFRyYWNrQ3VlT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxl
PEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRv
ciwgY29uc3QgY2hhcioqIHJlYXNvbikKIHsKICAgICBKU1RleHRUcmFja0N1ZSoganNUZXh0VHJh
Y2tDdWUgPSBqc0Nhc3Q8SlNUZXh0VHJhY2tDdWUqPihoYW5kbGUuc2xvdCgpLT5hc0NlbGwoKSk7
CiAgICAgVGV4dFRyYWNrQ3VlJiB0ZXh0VHJhY2tDdWUgPSBqc1RleHRUcmFja0N1ZS0+d3JhcHBl
ZCgpOwpAQCAtODIsMTIgKzgyLDE3IEBAIEpTVmFsdWUgdG9KUyhKU0dsb2JhbE9iamVjdCogbGV4
aWNhbEdsb2IKICAgICByZXR1cm4gd3JhcChsZXhpY2FsR2xvYmFsT2JqZWN0LCBnbG9iYWxPYmpl
Y3QsIGN1ZSk7CiB9CiAKLXZvaWQgSlNUZXh0VHJhY2tDdWU6OnZpc2l0QWRkaXRpb25hbENoaWxk
cmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy92b2lkIEpTVGV4dFRyYWNrQ3VlOjp2aXNpdEFk
ZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1l
IFZpc2l0b3I+Cit2b2lkIEpTVGV4dFRyYWNrQ3VlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihW
aXNpdG9yJiB2aXNpdG9yKQogewogICAgIGlmIChUZXh0VHJhY2sqIHRleHRUcmFjayA9IHdyYXBw
ZWQoKS50cmFjaygpKQogICAgICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qocm9vdCh0ZXh0VHJh
Y2spKTsKIH0KIAordGVtcGxhdGUgdm9pZCBKU1RleHRUcmFja0N1ZTo6dmlzaXRBZGRpdGlvbmFs
Q2hpbGRyZW4oQWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU1RleHRUcmFj
a0N1ZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKKwogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQogCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTVGV4dFRyYWNrQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU1RleHRUcmFja0N1c3RvbS5jcHAJKHJldmlzaW9uIDI3MTc4NikKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVGV4dFRyYWNrQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzYsMTEgKzM2LDE2IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3Bh
Y2UgSlNDOwogCi12b2lkIEpTVGV4dFRyYWNrOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90
VmlzaXRvciYgdmlzaXRvcikKKy8vdm9pZCBKU1RleHRUcmFjazo6dmlzaXRBZGRpdGlvbmFsQ2hp
bGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgor
dm9pZCBKU1RleHRUcmFjazo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRv
cikKIHsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qocm9vdCgmd3JhcHBlZCgpKSk7CiB9CiAK
K3RlbXBsYXRlIHZvaWQgSlNUZXh0VHJhY2s6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEFic3Ry
YWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNUZXh0VHJhY2s6OnZpc2l0QWRkaXRp
b25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAog
I2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1RleHRUcmFja0xpc3RD
dXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVGV4
dFRyYWNrTGlzdEN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MTc4NikKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTVGV4dFRyYWNrTGlzdEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM2LDExICszNiwxNiBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogdXNpbmcgbmFtZXNwYWNlIEpT
QzsKIAotdm9pZCBKU1RleHRUcmFja0xpc3Q6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3ZvaWQgSlNUZXh0VHJhY2tMaXN0Ojp2aXNpdEFkZGl0
aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5h
bWUgVmlzaXRvcj4KK3ZvaWQgSlNUZXh0VHJhY2tMaXN0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJl
bihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChyb290KHdy
YXBwZWQoKS5lbGVtZW50KCkpKTsKIH0KICAgICAKK3RlbXBsYXRlIHZvaWQgSlNUZXh0VHJhY2tM
aXN0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1w
bGF0ZSB2b2lkIEpTVGV4dFRyYWNrTGlzdDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZp
c2l0b3ImKTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVHJlZVdhbGtlckN1c3RvbS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNUcmVlV2Fsa2VyQ3VzdG9tLmNwcAkocmV2
aXNpb24gMjcxNzg2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNUcmVlV2Fsa2Vy
Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUsMTAgKzI1LDE1IEBACiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotdm9pZCBKU1RyZWVXYWxrZXI6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVu
KEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3ZvaWQgSlNUcmVlV2Fsa2VyOjp2aXNpdEFk
ZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlw
ZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNUcmVlV2Fsa2VyOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJl
bihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGlmIChOb2RlRmlsdGVyKiBmaWx0ZXIgPSB3cmFw
cGVkKCkuZmlsdGVyKCkpCiAgICAgICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChmaWx0ZXIpOwog
fQogCi19Cit0ZW1wbGF0ZSB2b2lkIEpTVHJlZVdhbGtlcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRy
ZW4oSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTVHJlZVdhbGtl
cjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYpOworCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1VuZG9J
dGVtQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U1VuZG9JdGVtQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcxNzg2KQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNVbmRvSXRlbUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDEz
ICsyOSwxOCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgSlNVbmRvSXRlbTo6dmlz
aXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vdm9pZCBK
U1VuZG9JdGVtOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNp
dG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNVbmRvSXRlbTo6dmlzaXRB
ZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB3cmFwcGVkKCkudW5k
b0hhbmRsZXIoKS52aXNpdEpTRnVuY3Rpb24odmlzaXRvcik7CiAgICAgd3JhcHBlZCgpLnJlZG9I
YW5kbGVyKCkudmlzaXRKU0Z1bmN0aW9uKHZpc2l0b3IpOwogfQogCi1ib29sIEpTVW5kb0l0ZW1P
d25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3du
PiBoYW5kbGUsIHZvaWQqLCBKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiog
cmVhc29uKQordGVtcGxhdGUgdm9pZCBKU1VuZG9JdGVtOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJl
bihKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNVbmRvSXRlbTo6
dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYpOworCitib29sIEpTVW5k
b0l0ZW1Pd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpV
bmtub3duPiBoYW5kbGUsIHZvaWQqLCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3Is
IGNvbnN0IGNoYXIqKiByZWFzb24pCiB7CiAgICAgaWYgKFVOTElLRUxZKHJlYXNvbikpCiAgICAg
ICAgICpyZWFzb24gPSAiRG9jdW1lbnQgaXMgYW4gb3BhcXVlIHJvb3QuIjsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVmFsdWVJbldyYXBwZWRPYmplY3QuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1ZhbHVlSW5XcmFwcGVkT2JqZWN0LmgJ
KHJldmlzaW9uIDI3MTc4NikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVmFsdWVJ
bldyYXBwZWRPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtNDAsNyArNDAsOCBAQCBwdWJsaWM6
CiAgICAgb3BlcmF0b3IgSlNDOjpKU1ZhbHVlKCkgY29uc3Q7CiAgICAgZXhwbGljaXQgb3BlcmF0
b3IgYm9vbCgpIGNvbnN0OwogICAgIEpTVmFsdWVJbldyYXBwZWRPYmplY3QmIG9wZXJhdG9yPShj
b25zdCBKU1ZhbHVlSW5XcmFwcGVkT2JqZWN0JiBvdGhlcik7Ci0gICAgdm9pZCB2aXNpdChKU0M6
OlNsb3RWaXNpdG9yJikgY29uc3Q7CisvLyAgICB2b2lkIHZpc2l0KEpTQzo6U2xvdFZpc2l0b3Im
KSBjb25zdDsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIHZpc2l0KFZpc2l0
b3ImKSBjb25zdDsKICAgICB2b2lkIGNsZWFyKCk7CiAKIHByaXZhdGU6CkBAIC05OCw3ICs5OSw4
IEBAIGlubGluZSBKU1ZhbHVlSW5XcmFwcGVkT2JqZWN0JiBKU1ZhbHVlSW4KICAgICByZXR1cm4g
KnRoaXM7CiB9CiAKLWlubGluZSB2b2lkIEpTVmFsdWVJbldyYXBwZWRPYmplY3Q6OnZpc2l0KEpT
Qzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
PgoraW5saW5lIHZvaWQgSlNWYWx1ZUluV3JhcHBlZE9iamVjdDo6dmlzaXQoVmlzaXRvciYgdmlz
aXRvcikgY29uc3QKIHsKICAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbihtX3ZhbHVlLCBbXSAoSlND
OjpKU1ZhbHVlKSB7CiAgICAgICAgIC8vIE5vdGhpbmcgdG8gdmlzaXQuCkBAIC0xMDcsNiArMTA5
LDkgQEAgaW5saW5lIHZvaWQgSlNWYWx1ZUluV3JhcHBlZE9iamVjdDo6dmlzaQogICAgIH0pOwog
fQogCit0ZW1wbGF0ZSB2b2lkIEpTVmFsdWVJbldyYXBwZWRPYmplY3Q6OnZpc2l0KEpTQzo6QWJz
dHJhY3RTbG90VmlzaXRvciYpIGNvbnN0OwordGVtcGxhdGUgdm9pZCBKU1ZhbHVlSW5XcmFwcGVk
T2JqZWN0Ojp2aXNpdChKU0M6OlNsb3RWaXNpdG9yJikgY29uc3Q7CisKIGlubGluZSB2b2lkIEpT
VmFsdWVJbldyYXBwZWRPYmplY3Q6OmNsZWFyKCkKIHsKICAgICBXVEY6OnN3aXRjaE9uKG1fdmFs
dWUsIFtdIChXZWFrJiB2YWx1ZSkgewpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNWaWRlb1RyYWNrQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU1ZpZGVvVHJhY2tDdXN0b20uY3BwCShyZXZpc2lvbiAyNzE3ODYpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1ZpZGVvVHJhY2tDdXN0b20uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zNSwxMSArMzUsMTYgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVz
cGFjZSBKU0M7CiAKLXZvaWQgSlNWaWRlb1RyYWNrOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihT
bG90VmlzaXRvciYgdmlzaXRvcikKKy8vdm9pZCBKU1ZpZGVvVHJhY2s6OnZpc2l0QWRkaXRpb25h
bENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRv
cj4KK3ZvaWQgSlNWaWRlb1RyYWNrOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2
aXNpdG9yKQogewogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChyb290KCZ3cmFwcGVkKCkpKTsK
IH0KIAordGVtcGxhdGUgdm9pZCBKU1ZpZGVvVHJhY2s6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVu
KEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU1ZpZGVvVHJhY2s6
OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImKTsKKwogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQogCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTVmlkZW9UcmFja0xpc3RDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTVmlkZW9UcmFja0xpc3RDdXN0b20uY3BwCShyZXZpc2lvbiAyNzE3ODYp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1ZpZGVvVHJhY2tMaXN0Q3VzdG9tLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzUsMTEgKzM1LDE2IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCi12b2lkIEpTVmlkZW9UcmFja0xpc3Q6OnZpc2l0QWRk
aXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy92b2lkIEpTVmlkZW9UcmFj
a0xpc3Q6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVt
cGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNWaWRlb1RyYWNrTGlzdDo6dmlzaXRBZGRp
dGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB2aXNpdG9yLmFkZE9wYXF1
ZVJvb3Qocm9vdCh3cmFwcGVkKCkuZWxlbWVudCgpKSk7CiB9CiAKK3RlbXBsYXRlIHZvaWQgSlNW
aWRlb1RyYWNrTGlzdDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oQWJzdHJhY3RTbG90VmlzaXRv
ciYpOwordGVtcGxhdGUgdm9pZCBKU1ZpZGVvVHJhY2tMaXN0Ojp2aXNpdEFkZGl0aW9uYWxDaGls
ZHJlbihTbG90VmlzaXRvciYpOworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZgpJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJHTDJSZW5kZXJpbmdDb250ZXh0
Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dl
YkdMMlJlbmRlcmluZ0NvbnRleHRDdXN0b20uY3BwCShyZXZpc2lvbiAyNzE3ODYpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYkdMMlJlbmRlcmluZ0NvbnRleHRDdXN0b20uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zMywxMiArMzMsMTcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKLXZvaWQgSlNXZWJHTDJSZW5kZXJpbmdDb250ZXh0Ojp2
aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vdm9pZCBKU1dl
YkdMMlJlbmRlcmluZ0NvbnRleHQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9y
JiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNXZWJHTDJSZW5k
ZXJpbmdDb250ZXh0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQog
ewogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdCgmd3JhcHBlZCgpKTsKICAgICB3cmFwcGVkKCku
YWRkTWVtYmVyc1RvT3BhcXVlUm9vdHModmlzaXRvcik7CiB9CiAKK3RlbXBsYXRlIHZvaWQgSlNX
ZWJHTDJSZW5kZXJpbmdDb250ZXh0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OkFic3Ry
YWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNXZWJHTDJSZW5kZXJpbmdDb250ZXh0
Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJik7CisKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShXRUJHTCkKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViR0xSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYkdMUmVuZGVyaW5nQ29u
dGV4dEN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MTc4NikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTV2ViR0xSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzMsMTIgKzMzLDE3IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2Ug
SlNDOwogCi12b2lkIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2aXNpdEFkZGl0aW9uYWxDaGls
ZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vdm9pZCBKU1dlYkdMUmVuZGVyaW5nQ29udGV4
dDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0
ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmlzaXRB
ZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB2aXNpdG9yLmFkZE9w
YXF1ZVJvb3QoJndyYXBwZWQoKSk7CiAgICAgd3JhcHBlZCgpLmFkZE1lbWJlcnNUb09wYXF1ZVJv
b3RzKHZpc2l0b3IpOwogfQogCit0ZW1wbGF0ZSB2b2lkIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0
Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0
ZSB2b2lkIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihT
bG90VmlzaXRvciYpOworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFC
TEUoV0VCR0wpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckdsb2Jh
bFNjb3BlQmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNXb3JrZXJHbG9iYWxTY29wZUJhc2UuY3BwCShyZXZpc2lvbiAyNzE3ODYpCisrKyBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckdsb2JhbFNjb3BlQmFzZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTg3LDcgKzg3LDggQEAgdm9pZCBKU1dvcmtlckdsb2JhbFNjb3BlQmFzZTo6Zmlu
aXNoQ3JlYQogICAgIEFTU0VSVChpbmhlcml0cyh2bSwgaW5mbygpKSk7CiB9CiAKLXZvaWQgSlNX
b3JrZXJHbG9iYWxTY29wZUJhc2U6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90Vmlz
aXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTV29ya2Vy
R2xvYmFsU2NvcGVCYXNlOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3Im
IHZpc2l0b3IpCiB7CiAgICAgSlNXb3JrZXJHbG9iYWxTY29wZUJhc2UqIHRoaXNPYmplY3QgPSBq
c0Nhc3Q8SlNXb3JrZXJHbG9iYWxTY29wZUJhc2UqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JK
RUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC05NSw2ICs5Niw4IEBAIHZvaWQg
SlNXb3JrZXJHbG9iYWxTY29wZUJhc2U6OnZpc2l0Q2hpbGQKICAgICB2aXNpdG9yLmFwcGVuZCh0
aGlzT2JqZWN0LT5tX3Byb3h5KTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTV29ya2Vy
R2xvYmFsU2NvcGVCYXNlKTsKKwogdm9pZCBKU1dvcmtlckdsb2JhbFNjb3BlQmFzZTo6ZGVzdHJv
eShKU0NlbGwqIGNlbGwpCiB7CiAgICAgc3RhdGljX2Nhc3Q8SlNXb3JrZXJHbG9iYWxTY29wZUJh
c2UqPihjZWxsKS0+SlNXb3JrZXJHbG9iYWxTY29wZUJhc2U6On5KU1dvcmtlckdsb2JhbFNjb3Bl
QmFzZSgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrZXJHbG9iYWxT
Y29wZUJhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dv
cmtlckdsb2JhbFNjb3BlQmFzZS5oCShyZXZpc2lvbiAyNzE3ODYpCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU1dvcmtlckdsb2JhbFNjb3BlQmFzZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC03OSw3ICs3OSw3IEBAIHByb3RlY3RlZDoKICAgICBKU1dvcmtlckdsb2JhbFNjb3BlQmFzZShK
U0M6OlZNJiwgSlNDOjpTdHJ1Y3R1cmUqLCBSZWZQdHI8V29ya2VyR2xvYmFsU2NvcGU+JiYpOwog
ICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYsIEpTQzo6SlNQcm94eSopOwogCi0gICAg
c3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3Im
KTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiBwcml2YXRlOgogICAgIFJlZlB0cjxX
b3JrZXJHbG9iYWxTY29wZT4gbV93cmFwcGVkOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNXb3JrZXJHbG9iYWxTY29wZUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrZXJHbG9iYWxTY29wZUN1c3RvbS5jcHAJKHJldmlz
aW9uIDI3MTc4NikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyR2xvYmFs
U2NvcGVDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3ICszMyw5IEBACiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCi12b2lkIEpTV29ya2VyR2xvYmFs
U2NvcGU6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy92
b2lkIEpTV29ya2VyR2xvYmFsU2NvcGU6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNp
dG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNXb3JrZXJH
bG9iYWxTY29wZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsK
ICAgICBpZiAoYXV0byogbG9jYXRpb24gPSB3cmFwcGVkKCkub3B0aW9uYWxMb2NhdGlvbigpKQog
ICAgICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QobG9jYXRpb24pOwpAQCAtNDgsNiArNTAsOSBA
QCB2b2lkIEpTV29ya2VyR2xvYmFsU2NvcGU6OnZpc2l0QWRkaXRpb25hCiAgICAgd3JhcHBlZCgp
LnZpc2l0SlNFdmVudExpc3RlbmVycyh2aXNpdG9yKTsKIH0KIAordGVtcGxhdGUgdm9pZCBKU1dv
cmtlckdsb2JhbFNjb3BlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihBYnN0cmFjdFNsb3RWaXNp
dG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTV29ya2VyR2xvYmFsU2NvcGU6OnZpc2l0QWRkaXRpb25h
bENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CisKIEpTVmFsdWUgSlNXb3JrZXJHbG9iYWxTY29wZTo6
cXVldWVNaWNyb3Rhc2soSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIENhbGxG
cmFtZSYgY2FsbEZyYW1lKQogewogICAgIFZNJiB2bSA9IGxleGljYWxHbG9iYWxPYmplY3Qudm0o
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyTmF2aWdhdG9yQ3Vz
dG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtl
ck5hdmlnYXRvckN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MTc4NikKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTV29ya2VyTmF2aWdhdG9yQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjgsOSArMjgsMTQgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIEpTV29ya2Vy
TmF2aWdhdG9yOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNp
dG9yKQorLy92b2lkIEpTV29ya2VyTmF2aWdhdG9yOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihK
U0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3Zv
aWQgSlNXb3JrZXJOYXZpZ2F0b3I6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZp
c2l0b3IpCiB7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHN0YXRpY19jYXN0PE5hdmlnYXRv
ckJhc2UqPigmd3JhcHBlZCgpKSk7CiB9CiAKLX0KK3RlbXBsYXRlIHZvaWQgSlNXb3JrZXJOYXZp
Z2F0b3I6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYp
OwordGVtcGxhdGUgdm9pZCBKU1dvcmtlck5hdmlnYXRvcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRy
ZW4oSlNDOjpTbG90VmlzaXRvciYpOworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtsZXRHbG9iYWxTY29wZUJhc2UuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2xldEdsb2JhbFNj
b3BlQmFzZS5jcHAJKHJldmlzaW9uIDI3MTc4NikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTV29ya2xldEdsb2JhbFNjb3BlQmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc3LDcg
Kzc3LDggQEAgdm9pZCBKU1dvcmtsZXRHbG9iYWxTY29wZUJhc2U6OmZpbmlzaENyZQogICAgIEFT
U0VSVChpbmhlcml0cyh2bSwgaW5mbygpKSk7CiB9CiAKLXZvaWQgSlNXb3JrbGV0R2xvYmFsU2Nv
cGVCYXNlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3Ip
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1dvcmtsZXRHbG9iYWxTY29wZUJh
c2U6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsK
ICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTV29ya2xldEdsb2JhbFNjb3BlQmFzZSo+
KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygp
KTsKQEAgLTg1LDYgKzg2LDggQEAgdm9pZCBKU1dvcmtsZXRHbG9iYWxTY29wZUJhc2U6OnZpc2l0
Q2hpbAogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fcHJveHkpOwogfQogCitERUZJ
TkVfVklTSVRfQ0hJTERSRU4oSlNXb3JrbGV0R2xvYmFsU2NvcGVCYXNlKTsKKwogdm9pZCBKU1dv
cmtsZXRHbG9iYWxTY29wZUJhc2U6OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQogewogICAgIHN0YXRp
Y19jYXN0PEpTV29ya2xldEdsb2JhbFNjb3BlQmFzZSo+KGNlbGwpLT5KU1dvcmtsZXRHbG9iYWxT
Y29wZUJhc2U6On5KU1dvcmtsZXRHbG9iYWxTY29wZUJhc2UoKTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTV29ya2xldEdsb2JhbFNjb3BlQmFzZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2xldEdsb2JhbFNjb3BlQmFzZS5oCShy
ZXZpc2lvbiAyNzE3ODYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtsZXRH
bG9iYWxTY29wZUJhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtNjcsNyArNjcsNyBAQCBwcm90ZWN0
ZWQ6CiAgICAgSlNXb3JrbGV0R2xvYmFsU2NvcGVCYXNlKEpTQzo6Vk0mLCBKU0M6OlN0cnVjdHVy
ZSosIFJlZlB0cjxXb3JrbGV0R2xvYmFsU2NvcGU+JiYpOwogICAgIHZvaWQgZmluaXNoQ3JlYXRp
b24oSlNDOjpWTSYsIEpTQzo6SlNQcm94eSopOwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGls
ZHJlbihKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lU
X0NISUxEUkVOOwogCiBwcml2YXRlOgogICAgIFJlZlB0cjxXb3JrbGV0R2xvYmFsU2NvcGU+IG1f
d3JhcHBlZDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTWE1MSHR0cFJlcXVl
c3RDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
WE1MSHR0cFJlcXVlc3RDdXN0b20uY3BwCShyZXZpc2lvbiAyNzE3ODYpCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU1hNTEh0dHBSZXF1ZXN0Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDEsNyArNDEsOSBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogdXNpbmcgbmFtZXNwYWNl
IEpTQzsKIAotdm9pZCBKU1hNTEh0dHBSZXF1ZXN0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihT
bG90VmlzaXRvciYgdmlzaXRvcikKKy8vdm9pZCBKU1hNTEh0dHBSZXF1ZXN0Ojp2aXNpdEFkZGl0
aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZp
c2l0b3I+Cit2b2lkIEpTWE1MSHR0cFJlcXVlc3Q6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZp
c2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgaWYgKGF1dG8qIHVwbG9hZCA9IHdyYXBwZWQoKS5vcHRp
b25hbFVwbG9hZCgpKQogICAgICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QodXBsb2FkKTsKQEAg
LTUwLDYgKzUyLDkgQEAgdm9pZCBKU1hNTEh0dHBSZXF1ZXN0Ojp2aXNpdEFkZGl0aW9uYWxDaAog
ICAgICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QocmVzcG9uc2VEb2N1bWVudCk7CiB9CiAKK3Rl
bXBsYXRlIHZvaWQgSlNYTUxIdHRwUmVxdWVzdDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oQWJz
dHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU1hNTEh0dHBSZXF1ZXN0Ojp2aXNp
dEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYpOworCiBKU1ZhbHVlIEpTWE1MSHR0cFJl
cXVlc3Q6OnJlc3BvbnNlKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0KSBjb25z
dAogewogICAgIGF1dG8gY2FjaGVSZXN1bHQgPSBbJl0gKEpTVmFsdWUgdmFsdWUpIC0+IEpTVmFs
dWUgewpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNYUGF0aFJlc3VsdEN1c3Rv
bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNYUGF0aFJl
c3VsdEN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MTc4NikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTWFBhdGhSZXN1bHRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICsz
MSw5IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBKU1hQYXRoUmVzdWx0Ojp2aXNp
dEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy92b2lkIEpT
WFBhdGhSZXN1bHQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZp
c2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1hQYXRoUmVzdWx0Ojp2
aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGF1dG8mIHZh
bHVlID0gd3JhcHBlZCgpLnZhbHVlKCk7CiAgICAgaWYgKHZhbHVlLmlzTm9kZVNldCgpKSB7CkBA
IC00MSw0ICs0Myw3IEBAIHZvaWQgSlNYUGF0aFJlc3VsdDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGQK
ICAgICB9CiB9CiAKK3RlbXBsYXRlIHZvaWQgSlNYUGF0aFJlc3VsdDo6dmlzaXRBZGRpdGlvbmFs
Q2hpbGRyZW4oSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTWFBh
dGhSZXN1bHQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImKTsKKwog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
V2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwCShyZXZpc2lv
biAyNzE3ODYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlVHlwZWRBcnJh
eUNvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Niw3ICs1Niw3IEBAIGJvb2wgV2Vi
Q29yZVR5cGVkQXJyYXlDb250cm9sbGVyOjppc0F0b20KICAgICByZXR1cm4gbV9hbGxvd0F0b21p
Y3NXYWl0OwogfQogCi1ib29sIFdlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlcjo6SlNBcnJheUJ1
ZmZlck93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVu
a25vd24+IGhhbmRsZSwgdm9pZCosIEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNo
YXIqKiByZWFzb24pCitib29sIFdlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlcjo6SlNBcnJheUJ1
ZmZlck93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVu
a25vd24+IGhhbmRsZSwgdm9pZCosIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvciwg
Y29uc3QgY2hhcioqIHJlYXNvbikKIHsKICAgICBpZiAoVU5MSUtFTFkocmVhc29uKSkKICAgICAg
ICAgKnJlYXNvbiA9ICJBcnJheUJ1ZmZlciBpcyBvcGFxdWUgcm9vdCI7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlVHlwZWRBcnJheUNvbnRy
b2xsZXIuaAkocmV2aXNpb24gMjcxNzg2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
V2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDcgKzQ4
LDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBjbGFzcyBKU0FycmF5QnVmZmVyT3duZXIgOiBw
dWJsaWMgSlNDOjpXZWFrSGFuZGxlT3duZXIgewogICAgIHB1YmxpYzoKLSAgICAgICAgYm9vbCBp
c1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lk
KiBjb250ZXh0LCBKU0M6OlNsb3RWaXNpdG9yJiwgY29uc3QgY2hhcioqKSBvdmVycmlkZTsKKyAg
ICAgICAgYm9vbCBpc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVu
a25vd24+LCB2b2lkKiBjb250ZXh0LCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImLCBjb25zdCBj
aGFyKiopIG92ZXJyaWRlOwogICAgICAgICB2b2lkIGZpbmFsaXplKEpTQzo6SGFuZGxlPEpTQzo6
VW5rbm93bj4sIHZvaWQqIGNvbnRleHQpIG92ZXJyaWRlOwogICAgIH07CiAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCShy
ZXZpc2lvbiAyNzE3ODYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVH
ZW5lcmF0b3JKUy5wbQkod29ya2luZyBjb3B5KQpAQCAtMzA3OCw4ICszMDc4LDEwIEBAIHN1YiBH
ZW5lcmF0ZUhlYWRlcgogCiAgICAgIyB2aXNpdCBmdW5jdGlvbgogICAgIGlmICgkbmVlZHNWaXNp
dENoaWxkcmVuKSB7Ci0gICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgc3RhdGljIHZv
aWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJik7XG4iKTsKLSAgICAg
ICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICB2b2lkIHZpc2l0QWRkaXRpb25hbENoaWxkcmVu
KEpTQzo6U2xvdFZpc2l0b3ImKTtcbiIpIGlmICRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRl
cy0+e0pTQ3VzdG9tTWFya0Z1bmN0aW9ufTsKKyAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwg
IiAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOO1xuIik7CisjICAgICAgICBwdXNoKEBoZWFkZXJD
b250ZW50LCAiICAgIHZvaWQgdmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRv
ciYpO1xuIikgaWYgJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57SlNDdXN0b21NYXJr
RnVuY3Rpb259OyAjIG1sYW0KKyMgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgdm9p
ZCB2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKTtcbiIp
IGlmICRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+e0pTQ3VzdG9tTWFya0Z1bmN0aW9u
fTsKKyAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPiB2b2lkIHZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImKTtcbiIpIGlmICRp
bnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+e0pTQ3VzdG9tTWFya0Z1bmN0aW9ufTsKICAg
ICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIlxuIik7CiAKICAgICAgICAgaWYgKCRpbnRlcmZh
Y2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+e0pTQ3VzdG9tTWFya0Z1bmN0aW9ufSkgewpAQCAtMzA5
NCw3ICszMDk2LDkgQEAgc3ViIEdlbmVyYXRlSGVhZGVyCiAgICAgICAgICAgICAjIHRoYXQgdGhl
IEdDIGNhbGxzIHRvIGFzayBhbiBvYmplY3QgaXMgaXQgd291bGQgbGlrZSB0byBtYXJrIGFueXRo
aW5nIGVsc2UgYWZ0ZXIgdGhlCiAgICAgICAgICAgICAjIHByb2dyYW0gcmVzdW1lZCBzaW5jZSB0
aGUgbGFzdCBjYWxsIHRvIHZpc2l0Q2hpbGRyZW4gb3IgdmlzaXRPdXRwdXRDb25zdHJhaW50cy4g
U2luY2UKICAgICAgICAgICAgICMgdGhpcyBqdXN0IGNhbGxzIHZpc2l0QWRkaXRpb25hbENoaWxk
cmVuLCB5b3UgdXN1YWxseSBkb24ndCBoYXZlIHRvIHdvcnJ5IGFib3V0IHRoaXMuCi0gICAgICAg
ICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHN0YXRpYyB2b2lkIHZpc2l0T3V0cHV0Q29u
c3RyYWludHMoSlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpO1xuIik7CisgICAgICAgICAgICAj
IG1sYW0gcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICBzdGF0aWMgdm9pZCB2aXNpdE91dHB1dENv
bnN0cmFpbnRzKEpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKTtcbiIpOworICAgICAgICAgICAg
cHVzaChAaGVhZGVyQ29udGVudCwgIiAgICBzdGF0aWMgdm9pZCB2aXNpdE91dHB1dENvbnN0cmFp
bnRzKEpTQ2VsbCosIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpO1xuIik7CisgICAgICAgICAg
ICAjIG1sYW0gcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICBERUNMQVJFX1ZJU0lUX09VVFBVVF9D
T05TVFJBSU5UUztcbiIpOwogICAgICAgICB9CiAgICAgfQogCkBAIC0zMjE1LDcgKzMyMTksNyBA
QCBzdWIgR2VuZXJhdGVIZWFkZXIKICAgICAgICAgfQogICAgICAgICAkaGVhZGVySW5jbHVkZXN7
Ijx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4ifSA9IDE7CiAgICAgICAgIHB1c2goQGhlYWRlckNvbnRl
bnQsICJwdWJsaWM6XG4iKTsKLSAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICBib29s
IGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZv
aWQqIGNvbnRleHQsIEpTQzo6U2xvdFZpc2l0b3ImLCBjb25zdCBjaGFyKiopICR7b3ZlcnJpZGVE
ZWNsfTtcbiIpOworICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIGJvb2wgaXNSZWFj
aGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29u
dGV4dCwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiwgY29uc3QgY2hhcioqKSAke292ZXJyaWRl
RGVjbH07XG4iKTsKICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICB2b2lkIGZpbmFs
aXplKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQpICR7b3ZlcnJpZGVE
ZWNsfTtcbiIpOwogICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAifTtcbiIpOwogICAgICAg
ICBwdXNoKEBoZWFkZXJDb250ZW50LCAiXG4iKTsKQEAgLTQ5MjgsNiArNDkzMiw3IEBAIHN1YiBH
ZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIkRPTUlzb1N1YnNw
YWNlcy5oIik7CiAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIldlYkNvcmVKU0NsaWVudERhdGEuaCIp
OwogICAgIEFkZFRvSW1wbEluY2x1ZGVzKCI8SmF2YVNjcmlwdENvcmUvSlNEZXN0cnVjdGlibGVP
YmplY3RIZWFwQ2VsbFR5cGUuaD4iKTsKKyAgICBBZGRUb0ltcGxJbmNsdWRlcygiPEphdmFTY3Jp
cHRDb3JlL1Nsb3RWaXNpdG9yTWFjcm9zLmg+Iik7CiAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIjxK
YXZhU2NyaXB0Q29yZS9TdWJzcGFjZUlubGluZXMuaD4iKTsKICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIkpTQzo6SXNvU3Vic3BhY2UqICR7Y2xhc3NOYW1lfTo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6
Vk0mIHZtKVxuIik7CiAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ7XG4iKTsKQEAgLTQ5NTUsNyAr
NDk2MCw4IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgcHVzaChAaW1wbENvbnRl
bnQsICJ9XG5cbiIpOwogCiAgICAgaWYgKCRuZWVkc1Zpc2l0Q2hpbGRyZW4pIHsKLSAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICJ2b2lkICR7Y2xhc3NOYW1lfTo6dmlzaXRDaGlsZHJlbihKU0Nl
bGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKVxuIik7CisgICAgICAgIHB1c2goQGltcGxD
b250ZW50LCAidGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj5cbiIpOworICAgICAgICBwdXNoKEBp
bXBsQ29udGVudCwgInZvaWQgJHtjbGFzc05hbWV9Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwq
IGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpXG4iKTsKICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICJ7XG4iKTsKICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgYXV0byogdGhpc09iamVj
dCA9IGpzQ2FzdDwke2NsYXNzTmFtZX0qPihjZWxsKTtcbiIpOwogICAgICAgICBwdXNoKEBpbXBs
Q29udGVudCwgIiAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8o
KSk7XG4iKTsKQEAgLTQ5ODAsOCArNDk4NiwxMCBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlv
bgogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
fVxuXG4iKTsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJERUZJTkVfVklTSVRfQ0hJTERS
RU4oJHtjbGFzc05hbWV9KTtcblxuIik7CisKICAgICAgICAgaWYgKCRpbnRlcmZhY2UtPmV4dGVu
ZGVkQXR0cmlidXRlcy0+e0pTQ3VzdG9tTWFya0Z1bmN0aW9ufSkgewotICAgICAgICAgICAgcHVz
aChAaW1wbENvbnRlbnQsICJ2b2lkICR7Y2xhc3NOYW1lfTo6dmlzaXRPdXRwdXRDb25zdHJhaW50
cyhKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKVxuIik7CisgICAgICAgICAgICBw
dXNoKEBpbXBsQ29udGVudCwgInZvaWQgJHtjbGFzc05hbWV9Ojp2aXNpdE91dHB1dENvbnN0cmFp
bnRzKEpTQ2VsbCogY2VsbCwgQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcilcbiIpOwogICAg
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ7XG4iKTsKICAgICAgICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAiICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8JHtjbGFzc05hbWV9Kj4o
Y2VsbCk7XG4iKTsKICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIEFTU0VSVF9H
Q19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTtcbiIpOwpAQCAtNTAyMiw3ICs1
MDMwLDcgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICB9CiAKICAgICBpZiAoU2hv
dWxkR2VuZXJhdGVXcmFwcGVyT3duZXJDb2RlKCRoYXNQYXJlbnQsICRpbnRlcmZhY2UpICYmICFH
ZXRDdXN0b21Jc1JlYWNoYWJsZSgkaW50ZXJmYWNlKSkgewotICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudCwgImJvb2wgSlMke2ludGVyZmFjZU5hbWV9T3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1
ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgU2xvdFZpc2l0
b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pXG4iKTsKKyAgICAgICAgcHVzaChAaW1w
bENvbnRlbnQsICJib29sIEpTJHtpbnRlcmZhY2VOYW1lfU93bmVyOjppc1JlYWNoYWJsZUZyb21P
cGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIEFic3Ry
YWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pXG4iKTsKICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICJ7XG4iKTsKICAgICAgICAgIyBBbGwgQWN0aXZlRE9NT2Jq
ZWN0cyBpbXBsZW1lbnQgaGFzUGVuZGluZ0FjdGl2aXR5KCksIGJ1dCBub3QgYWxsIG9mIHRoZW0K
ICAgICAgICAgIyBpbmNyZW1lbnQgdGhlaXIgQysrIHJlZmVyZW5jZSBjb3VudHMgd2hlbiBoYXNQ
ZW5kaW5nQWN0aXZpdHkoKSBiZWNvbWVzCkBAIC02NDIxLDcgKzY0MjksOCBAQCBzdWIgR2VuZXJh
dGVDYWxsYmFja0hlYWRlckNvbnRlbnQKICAgICAgICAgcHVzaChAJGNvbnRlbnRSZWYsICIgICAg
Ym9vbCBoYXNDYWxsYmFjaygpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fZGF0YSAmJiBtX2RhdGEt
PmNhbGxiYWNrKCk7IH1cblxuIik7CiAgICAgfQogCi0gICAgcHVzaChAJGNvbnRlbnRSZWYsICIg
ICAgdm9pZCB2aXNpdEpTRnVuY3Rpb24oSlNDOjpTbG90VmlzaXRvciYpIG92ZXJyaWRlO1xuXG4i
KSBpZiAkaW50ZXJmYWNlT3JDYWxsYmFjay0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57SXNXZWFrQ2Fs
bGJhY2t9OworIyAgICBwdXNoKEAkY29udGVudFJlZiwgIiAgICB2b2lkIHZpc2l0SlNGdW5jdGlv
bihKU0M6OlNsb3RWaXNpdG9yJikgb3ZlcnJpZGU7XG5cbiIpIGlmICRpbnRlcmZhY2VPckNhbGxi
YWNrLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntJc1dlYWtDYWxsYmFja307CisgICAgcHVzaChAJGNv
bnRlbnRSZWYsICIgICAgdm9pZCB2aXNpdEpTRnVuY3Rpb24oSlNDOjpBYnN0cmFjdFNsb3RWaXNp
dG9yJikgb3ZlcnJpZGU7XG5cbiIpIGlmICRpbnRlcmZhY2VPckNhbGxiYWNrLT5leHRlbmRlZEF0
dHJpYnV0ZXMtPntJc1dlYWtDYWxsYmFja307CiAKICAgICBwdXNoKEAkY29udGVudFJlZiwgIiAg
ICAke2NhbGxiYWNrRGF0YVR5cGV9KiBtX2RhdGE7XG4iKTsKICAgICBwdXNoKEAkY29udGVudFJl
ZiwgIn07XG5cbiIpOwpAQCAtNjYxMiw3ICs2NjIxLDggQEAgc3ViIEdlbmVyYXRlQ2FsbGJhY2tJ
bXBsZW1lbnRhdGlvbkNvbnRlbgogICAgIH0KIAogICAgIGlmICgkaW50ZXJmYWNlT3JDYWxsYmFj
ay0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57SXNXZWFrQ2FsbGJhY2t9KSB7Ci0gICAgICAgIHB1c2go
QCRjb250ZW50UmVmLCAidm9pZCAke2NsYXNzTmFtZX06OnZpc2l0SlNGdW5jdGlvbihKU0M6OlNs
b3RWaXNpdG9yJiB2aXNpdG9yKVxuIik7CisjICAgICAgICBwdXNoKEAkY29udGVudFJlZiwgInZv
aWQgJHtjbGFzc05hbWV9Ojp2aXNpdEpTRnVuY3Rpb24oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRv
cilcbiIpOworICAgICAgICBwdXNoKEAkY29udGVudFJlZiwgInZvaWQgJHtjbGFzc05hbWV9Ojp2
aXNpdEpTRnVuY3Rpb24oSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKVxuIik7CiAg
ICAgICAgIHB1c2goQCRjb250ZW50UmVmLCAie1xuIik7CiAgICAgICAgIHB1c2goQCRjb250ZW50
UmVmLCAiICAgIG1fZGF0YS0+dmlzaXRKU0Z1bmN0aW9uKHZpc2l0b3IpO1xuIik7CiAgICAgICAg
IHB1c2goQCRjb250ZW50UmVmLCAifVxuXG4iKTsKQEAgLTY3MjMsNiArNjczMyw3IEBAIHN1YiBH
ZW5lcmF0ZUl0ZXJhYmxlRGVmaW5pdGlvbgogICAgIG15ICR2aXNpYmxlSW50ZXJmYWNlTmFtZSA9
ICRjb2RlR2VuZXJhdG9yLT5HZXRWaXNpYmxlSW50ZXJmYWNlTmFtZSgkaW50ZXJmYWNlKTsKIAog
ICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJKU0RPTUl0ZXJhdG9yLmgiKTsKKyAgICBBZGRUb0ltcGxJ
bmNsdWRlcygiPEphdmFTY3JpcHRDb3JlL1Nsb3RWaXNpdG9yTWFjcm9zLmg+Iik7CiAKICAgICBy
ZXR1cm4gdW5sZXNzIElzS2V5VmFsdWVJdGVyYWJsZUludGVyZmFjZSgkaW50ZXJmYWNlKTsKIApJ
bmRleDogU291cmNlL1dlYkNvcmUvZG9tL0FjdGl2ZURPTUNhbGxiYWNrLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvZG9tL0FjdGl2ZURPTUNhbGxiYWNrLmgJKHJldmlzaW9uIDI3MTc4
NikKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9BY3RpdmVET01DYWxsYmFjay5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiQ29udGV4dERlc3RydWN0aW9uT2JzZXJ2
ZXIuaCIKIAogbmFtZXNwYWNlIEpTQyB7CitjbGFzcyBBYnN0cmFjdFNsb3RWaXNpdG9yOwogY2xh
c3MgU2xvdFZpc2l0b3I7CiB9CiAKQEAgLTU1LDcgKzU2LDggQEAgcHVibGljOgogICAgIFdFQkNP
UkVfRVhQT1JUIGJvb2wgYWN0aXZlRE9NT2JqZWN0c0FyZVN1c3BlbmRlZCgpIGNvbnN0OwogICAg
IFdFQkNPUkVfRVhQT1JUIGJvb2wgYWN0aXZlRE9NT2JqZWN0QXJlU3RvcHBlZCgpIGNvbnN0Owog
ICAgIAotICAgIHZpcnR1YWwgdm9pZCB2aXNpdEpTRnVuY3Rpb24oSlNDOjpTbG90VmlzaXRvciYp
IHsgfQorLy8gICAgdmlydHVhbCB2b2lkIHZpc2l0SlNGdW5jdGlvbihKU0M6OlNsb3RWaXNpdG9y
JikgeyB9CisgICAgdmlydHVhbCB2b2lkIHZpc2l0SlNGdW5jdGlvbihKU0M6OkFic3RyYWN0U2xv
dFZpc2l0b3ImKSB7IH0KIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2RvbS9FdmVudExpc3RlbmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvZG9tL0V2ZW50TGlzdGVuZXIuaAkocmV2aXNpb24gMjcxNzg2KQorKysgU291cmNlL1dlYkNv
cmUvZG9tL0V2ZW50TGlzdGVuZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjMsOCArMjMsOSBAQAog
I2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAKIG5hbWVzcGFjZSBKU0MgeworY2xhc3MgQWJz
dHJhY3RTbG90VmlzaXRvcjsKIGNsYXNzIEpTT2JqZWN0OwotY2xhc3MgU2xvdFZpc2l0b3I7Cisv
L2NsYXNzIFNsb3RWaXNpdG9yOwogfQogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC01MSw3ICs1
Miw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlRXZlbnQoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCYsIEV2ZW50JikgPSAwOwogICAgIHZpcnR1YWwgYm9vbCB3YXNDcmVhdGVkRnJv
bU1hcmt1cCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgdmlz
aXRKU0Z1bmN0aW9uKEpTQzo6U2xvdFZpc2l0b3ImKSB7IH0KKy8vICAgIHZpcnR1YWwgdm9pZCB2
aXNpdEpTRnVuY3Rpb24oSlNDOjpTbG90VmlzaXRvciYpIHsgfQorICAgIHZpcnR1YWwgdm9pZCB2
aXNpdEpTRnVuY3Rpb24oSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJikgeyB9CiAKICAgICB2aXJ0
dWFsIGJvb2wgaXNBdHRyaWJ1dGUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIFR5cGUg
dHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9t
L0V2ZW50VGFyZ2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRU
YXJnZXQuY3BwCShyZXZpc2lvbiAyNzE3ODYpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRU
YXJnZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNzQsNyArMzc0LDkgQEAgdm9pZCBFdmVudFRh
cmdldDo6cmVtb3ZlQWxsRXZlbnRMaXN0ZW5lcgogICAgIHRocmVhZERhdGEuc2V0SXNJblJlbW92
ZUFsbEV2ZW50TGlzdGVuZXJzKGZhbHNlKTsKIH0KIAotdm9pZCBFdmVudFRhcmdldDo6dmlzaXRK
U0V2ZW50TGlzdGVuZXJzKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3ZvaWQgRXZlbnRU
YXJnZXQ6OnZpc2l0SlNFdmVudExpc3RlbmVycyhKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQor
dGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgRXZlbnRUYXJnZXQ6OnZpc2l0SlNFdmVu
dExpc3RlbmVycyhWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEV2ZW50VGFyZ2V0RGF0YSogZGF0
YSA9IGV2ZW50VGFyZ2V0RGF0YUNvbmN1cnJlbnRseSgpOwogICAgIGlmICghZGF0YSkKQEAgLTM4
Niw2ICszODgsOSBAQCB2b2lkIEV2ZW50VGFyZ2V0Ojp2aXNpdEpTRXZlbnRMaXN0ZW5lcnMoCiAg
ICAgICAgIGxpc3RlbmVyLT52aXNpdEpTRnVuY3Rpb24odmlzaXRvcik7CiB9CiAKK3RlbXBsYXRl
IHZvaWQgRXZlbnRUYXJnZXQ6OnZpc2l0SlNFdmVudExpc3RlbmVycyhKU0M6OkFic3RyYWN0U2xv
dFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgRXZlbnRUYXJnZXQ6OnZpc2l0SlNFdmVudExpc3Rl
bmVycyhKU0M6OlNsb3RWaXNpdG9yJik7CisKIHZvaWQgRXZlbnRUYXJnZXQ6OmludmFsaWRhdGVF
dmVudExpc3RlbmVyUmVnaW9ucygpCiB7CiAgICAgaWYgKGlzPEVsZW1lbnQ+KCp0aGlzKSkgewpJ
bmRleDogU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50VGFyZ2V0LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvZG9tL0V2ZW50VGFyZ2V0LmgJKHJldmlzaW9uIDI3MTc4NikKKysrIFNvdXJj
ZS9XZWJDb3JlL2RvbS9FdmVudFRhcmdldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTMsNyArMTEz
LDggQEAgcHVibGljOgogICAgIHZvaWQgZmlyZUV2ZW50TGlzdGVuZXJzKEV2ZW50JiwgRXZlbnRJ
bnZva2VQaGFzZSk7CiAgICAgYm9vbCBpc0ZpcmluZ0V2ZW50TGlzdGVuZXJzKCkgY29uc3Q7CiAK
LSAgICB2b2lkIHZpc2l0SlNFdmVudExpc3RlbmVycyhKU0M6OlNsb3RWaXNpdG9yJik7CisvLyAg
ICB2b2lkIHZpc2l0SlNFdmVudExpc3RlbmVycyhKU0M6OlNsb3RWaXNpdG9yJik7CisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCB2aXNpdEpTRXZlbnRMaXN0ZW5lcnMoVmlzaXRv
ciYpOwogICAgIHZvaWQgaW52YWxpZGF0ZUpTRXZlbnRMaXN0ZW5lcnMoSlNDOjpKU09iamVjdCop
OwogCiAgICAgY29uc3QgRXZlbnRUYXJnZXREYXRhKiBldmVudFRhcmdldERhdGEoKSBjb25zdDsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9NdXRhdGlvblJlY29yZC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvZG9tL011dGF0aW9uUmVjb3JkLmNwcAkocmV2aXNpb24gMjcxNzg2
KQorKysgU291cmNlL1dlYkNvcmUvZG9tL011dGF0aW9uUmVjb3JkLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDEsNyArNDEsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIG5hbWVzcGFjZSB7CiAK
LXN0YXRpYyB2b2lkIHZpc2l0Tm9kZUxpc3QoSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvciwgTm9k
ZUxpc3QmIG5vZGVMaXN0KQorLy9zdGF0aWMgdm9pZCB2aXNpdE5vZGVMaXN0KEpTQzo6U2xvdFZp
c2l0b3ImIHZpc2l0b3IsIE5vZGVMaXN0JiBub2RlTGlzdCkKK3N0YXRpYyB2b2lkIHZpc2l0Tm9k
ZUxpc3QoSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBOb2RlTGlzdCYgbm9kZUxp
c3QpCiB7CiAgICAgQVNTRVJUKCFub2RlTGlzdC5pc0xpdmVOb2RlTGlzdCgpKTsKICAgICB1bnNp
Z25lZCBsZW5ndGggPSBub2RlTGlzdC5sZW5ndGgoKTsKQEAgLTY4LDcgKzY5LDggQEAgcHJpdmF0
ZToKICAgICBOb2RlKiBwcmV2aW91c1NpYmxpbmcoKSBvdmVycmlkZSB7IHJldHVybiBtX3ByZXZp
b3VzU2libGluZy5nZXQoKTsgfQogICAgIE5vZGUqIG5leHRTaWJsaW5nKCkgb3ZlcnJpZGUgeyBy
ZXR1cm4gbV9uZXh0U2libGluZy5nZXQoKTsgfQogCi0gICAgdm9pZCB2aXNpdE5vZGVzQ29uY3Vy
cmVudGx5KEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0IGZpbmFsCisvLyAgICB2b2lk
IHZpc2l0Tm9kZXNDb25jdXJyZW50bHkoSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikgY29uc3Qg
ZmluYWwKKyAgICB2b2lkIHZpc2l0Tm9kZXNDb25jdXJyZW50bHkoSlNDOjpBYnN0cmFjdFNsb3RW
aXNpdG9yJiB2aXNpdG9yKSBjb25zdCBmaW5hbAogICAgIHsKICAgICAgICAgdmlzaXRvci5hZGRP
cGFxdWVSb290KHJvb3QobV90YXJnZXQucHRyKCkpKTsKICAgICAgICAgaWYgKG1fYWRkZWROb2Rl
cykKQEAgLTEwNSw3ICsxMDcsOCBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gbm9kZUxpc3Qu
Z2V0KCk7CiAgICAgfQogCi0gICAgdm9pZCB2aXNpdE5vZGVzQ29uY3VycmVudGx5KEpTQzo6U2xv
dFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0IGZpbmFsCisvLyAgICB2b2lkIHZpc2l0Tm9kZXNDb25j
dXJyZW50bHkoSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikgY29uc3QgZmluYWwKKyAgICB2b2lk
IHZpc2l0Tm9kZXNDb25jdXJyZW50bHkoSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9y
KSBjb25zdCBmaW5hbAogICAgIHsKICAgICAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHJvb3Qo
bV90YXJnZXQucHRyKCkpKTsKICAgICB9CkBAIC0xNjQsNyArMTY3LDggQEAgcHJpdmF0ZToKIAog
ICAgIFN0cmluZyBvbGRWYWx1ZSgpIG92ZXJyaWRlIHsgcmV0dXJuIFN0cmluZygpOyB9CiAKLSAg
ICB2b2lkIHZpc2l0Tm9kZXNDb25jdXJyZW50bHkoSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikg
Y29uc3QgZmluYWwKKy8vICAgIHZvaWQgdmlzaXROb2Rlc0NvbmN1cnJlbnRseShKU0M6OlNsb3RW
aXNpdG9yJiB2aXNpdG9yKSBjb25zdCBmaW5hbAorICAgIHZvaWQgdmlzaXROb2Rlc0NvbmN1cnJl
bnRseShKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0IGZpbmFsCiAgICAg
ewogICAgICAgICBtX3JlY29yZC0+dmlzaXROb2Rlc0NvbmN1cnJlbnRseSh2aXNpdG9yKTsKICAg
ICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vTXV0YXRpb25SZWNvcmQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vTXV0YXRpb25SZWNvcmQuaAkocmV2aXNpb24gMjcxNzg2
KQorKysgU291cmNlL1dlYkNvcmUvZG9tL011dGF0aW9uUmVjb3JkLmgJKHdvcmtpbmcgY29weSkK
QEAgLTcyLDcgKzcyLDggQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBTdHJpbmcgb2xkVmFsdWUo
KSB7IHJldHVybiBTdHJpbmcoKTsgfQogCi0gICAgdmlydHVhbCB2b2lkIHZpc2l0Tm9kZXNDb25j
dXJyZW50bHkoSlNDOjpTbG90VmlzaXRvciYpIGNvbnN0ID0gMDsKKy8vICAgIHZpcnR1YWwgdm9p
ZCB2aXNpdE5vZGVzQ29uY3VycmVudGx5KEpTQzo6U2xvdFZpc2l0b3ImKSBjb25zdCA9IDA7Cisg
ICAgdmlydHVhbCB2b2lkIHZpc2l0Tm9kZXNDb25jdXJyZW50bHkoSlNDOjpBYnN0cmFjdFNsb3RW
aXNpdG9yJikgY29uc3QgPSAwOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDog
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0wyUmVuZGVyaW5nQ29u
dGV4dC5jcHAJKHJldmlzaW9uIDI3MTc4NikKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L1dlYkdMMlJlbmRlcmluZ0NvbnRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMDc4LDE4ICsz
MDc4LDIwIEBAIGJvb2wgV2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6Y2hlY2tBbmRUcmEKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBXZWJHTDJSZW5kZXJpbmdDb250ZXh0OjphZGRNZW1iZXJz
VG9PcGFxdWVSb290cyhKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy92b2lkIFdlYkdMMlJl
bmRlcmluZ0NvbnRleHQ6OmFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKEpTQzo6U2xvdFZpc2l0b3Im
IHZpc2l0b3IpCit2b2lkIFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OmFkZE1lbWJlcnNUb09wYXF1
ZVJvb3RzKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBXZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlOjphZGRNZW1iZXJzVG9PcGFxdWVSb290cyh2aXNpdG9yKTsKIAog
ICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sob2JqZWN0R3JhcGhMb2NrKCkpOwogICAgIHZpc2l0
b3IuYWRkT3BhcXVlUm9vdChtX3JlYWRGcmFtZWJ1ZmZlckJpbmRpbmcuZ2V0KCkpOwogICAgIGlm
IChtX3JlYWRGcmFtZWJ1ZmZlckJpbmRpbmcpCi0gICAgICAgIG1fcmVhZEZyYW1lYnVmZmVyQmlu
ZGluZy0+YWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMobG9ja2VyLCB2aXNpdG9yKTsKKyAgICAgICAg
bV9yZWFkRnJhbWVidWZmZXJCaW5kaW5nLT5hZGRNZW1iZXJzVG9PcGFxdWVSb290czMwMChsb2Nr
ZXIsIHZpc2l0b3IpOwogCiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KG1fYm91bmRUcmFuc2Zv
cm1GZWVkYmFjay5nZXQoKSk7CiAgICAgaWYgKG1fYm91bmRUcmFuc2Zvcm1GZWVkYmFjaykKLSAg
ICAgICAgbV9ib3VuZFRyYW5zZm9ybUZlZWRiYWNrLT5hZGRNZW1iZXJzVG9PcGFxdWVSb290cyhs
b2NrZXIsIHZpc2l0b3IpOworLy8gICAgICAgIG1fYm91bmRUcmFuc2Zvcm1GZWVkYmFjay0+YWRk
TWVtYmVyc1RvT3BhcXVlUm9vdHMobG9ja2VyLCB2aXNpdG9yKTsKKyAgICAgICAgbV9ib3VuZFRy
YW5zZm9ybUZlZWRiYWNrLT5hZGRNZW1iZXJzVG9PcGFxdWVSb290czEwMChsb2NrZXIsIHZpc2l0
b3IpOwogCiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KG1fYm91bmRDb3B5UmVhZEJ1ZmZlci5n
ZXQoKSk7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KG1fYm91bmRDb3B5V3JpdGVCdWZmZXIu
Z2V0KCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0wyUmVuZGVyaW5n
Q29udGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdM
MlJlbmRlcmluZ0NvbnRleHQuaAkocmV2aXNpb24gMjcxNzg2KQorKysgU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
NjEsNyArMjYxLDggQEAgcHVibGljOgogCiAgICAgYm9vbCBjaGVja0FuZFRyYW5zbGF0ZUF0dGFj
aG1lbnRzKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0NHTGVudW0sIFZlY3RvcjxHQ0dMZW51
bT4mKTsKIAotICAgIHZvaWQgYWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMoSlNDOjpTbG90VmlzaXRv
ciYpIG92ZXJyaWRlOworLy8gICAgdm9pZCBhZGRNZW1iZXJzVG9PcGFxdWVSb290cyhKU0M6OlNs
b3RWaXNpdG9yJikgb3ZlcnJpZGU7CisgICAgdm9pZCBhZGRNZW1iZXJzVG9PcGFxdWVSb290cyhK
U0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKSBvdmVycmlkZTsKIAogcHJpdmF0ZToKICAgICBXZWJH
TDJSZW5kZXJpbmdDb250ZXh0KENhbnZhc0Jhc2UmLCBHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0
ZXMpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xGcmFtZWJ1ZmZlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xGcmFtZWJ1
ZmZlci5jcHAJKHJldmlzaW9uIDI3MTc4NikKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L1dlYkdMRnJhbWVidWZmZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Myw3ICs2Myw4IEBAIG5h
bWVzcGFjZSB7CiAgICAgICAgIHZvaWQgb25EZXRhY2hlZChjb25zdCBBYnN0cmFjdExvY2tlciYs
IEdyYXBoaWNzQ29udGV4dEdMKikgb3ZlcnJpZGU7CiAgICAgICAgIHZvaWQgYXR0YWNoKEdyYXBo
aWNzQ29udGV4dEdMKiwgR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBhdHRhY2htZW50KSBvdmVy
cmlkZTsKICAgICAgICAgdm9pZCB1bmF0dGFjaChHcmFwaGljc0NvbnRleHRHTCosIEdDR0xlbnVt
IHRhcmdldCwgR0NHTGVudW0gYXR0YWNobWVudCkgb3ZlcnJpZGU7Ci0gICAgICAgIHZvaWQgYWRk
TWVtYmVyc1RvT3BhcXVlUm9vdHMoY29uc3QgQWJzdHJhY3RMb2NrZXImLCBKU0M6OlNsb3RWaXNp
dG9yJikgb3ZlcnJpZGU7CisvLyAgICAgICAgdm9pZCBhZGRNZW1iZXJzVG9PcGFxdWVSb290cyhj
b25zdCBBYnN0cmFjdExvY2tlciYsIEpTQzo6U2xvdFZpc2l0b3ImKSBvdmVycmlkZTsKKyAgICAg
ICAgdm9pZCBhZGRNZW1iZXJzVG9PcGFxdWVSb290czQwMChjb25zdCBBYnN0cmFjdExvY2tlciYs
IEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpIG92ZXJyaWRlOwogCiAgICAgICAgIFdlYkdMUmVu
ZGVyYnVmZmVyQXR0YWNobWVudCgpIHsgfTsKIApAQCAtMTQ1LDcgKzE0Niw4IEBAIG5hbWVzcGFj
ZSB7CiAgICAgICAgICAgICBjb250ZXh0LT5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcih0YXJnZXQs
IGF0dGFjaG1lbnQsIEdyYXBoaWNzQ29udGV4dEdMOjpSRU5ERVJCVUZGRVIsIDApOwogICAgIH0K
IAotICAgIHZvaWQgV2ViR0xSZW5kZXJidWZmZXJBdHRhY2htZW50OjphZGRNZW1iZXJzVG9PcGFx
dWVSb290cyhjb25zdCBBYnN0cmFjdExvY2tlciYsIEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3Ip
CisvLyAgICB2b2lkIFdlYkdMUmVuZGVyYnVmZmVyQXR0YWNobWVudDo6YWRkTWVtYmVyc1RvT3Bh
cXVlUm9vdHMoY29uc3QgQWJzdHJhY3RMb2NrZXImLCBKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9y
KQorICAgIHZvaWQgV2ViR0xSZW5kZXJidWZmZXJBdHRhY2htZW50OjphZGRNZW1iZXJzVG9PcGFx
dWVSb290czQwMChjb25zdCBBYnN0cmFjdExvY2tlciYsIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRv
ciYgdmlzaXRvcikKICAgICB7CiAgICAgICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChtX3JlbmRl
cmJ1ZmZlci5nZXQoKSk7CiAgICAgfQpAQCAtMTY5LDcgKzE3MSw4IEBAIG5hbWVzcGFjZSB7CiAg
ICAgICAgIHZvaWQgb25EZXRhY2hlZChjb25zdCBBYnN0cmFjdExvY2tlciYsIEdyYXBoaWNzQ29u
dGV4dEdMKikgb3ZlcnJpZGU7CiAgICAgICAgIHZvaWQgYXR0YWNoKEdyYXBoaWNzQ29udGV4dEdM
KiwgR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBhdHRhY2htZW50KSBvdmVycmlkZTsKICAgICAg
ICAgdm9pZCB1bmF0dGFjaChHcmFwaGljc0NvbnRleHRHTCosIEdDR0xlbnVtIHRhcmdldCwgR0NH
TGVudW0gYXR0YWNobWVudCkgb3ZlcnJpZGU7Ci0gICAgICAgIHZvaWQgYWRkTWVtYmVyc1RvT3Bh
cXVlUm9vdHMoY29uc3QgQWJzdHJhY3RMb2NrZXImLCBKU0M6OlNsb3RWaXNpdG9yJikgb3ZlcnJp
ZGU7CisvLyAgICAgICAgdm9pZCBhZGRNZW1iZXJzVG9PcGFxdWVSb290cyhjb25zdCBBYnN0cmFj
dExvY2tlciYsIEpTQzo6U2xvdFZpc2l0b3ImKSBvdmVycmlkZTsKKyAgICAgICAgdm9pZCBhZGRN
ZW1iZXJzVG9PcGFxdWVSb290czQwMChjb25zdCBBYnN0cmFjdExvY2tlciYsIEpTQzo6QWJzdHJh
Y3RTbG90VmlzaXRvciYpIG92ZXJyaWRlOwogCiAgICAgICAgIFdlYkdMVGV4dHVyZUF0dGFjaG1l
bnQoKSB7IH07CiAKQEAgLTI2Nyw3ICsyNzAsOCBAQCBuYW1lc3BhY2UgewogI2VuZGlmCiAgICAg
fQogCi0gICAgdm9pZCBXZWJHTFRleHR1cmVBdHRhY2htZW50OjphZGRNZW1iZXJzVG9PcGFxdWVS
b290cyhjb25zdCBBYnN0cmFjdExvY2tlciYsIEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCisv
LyAgICB2b2lkIFdlYkdMVGV4dHVyZUF0dGFjaG1lbnQ6OmFkZE1lbWJlcnNUb09wYXF1ZVJvb3Rz
KGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKKyAgICB2
b2lkIFdlYkdMVGV4dHVyZUF0dGFjaG1lbnQ6OmFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzNDAwKGNv
bnN0IEFic3RyYWN0TG9ja2VyJiwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQog
ICAgIHsKICAgICAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KG1fdGV4dHVyZS5nZXQoKSk7CiAg
ICAgfQpAQCAtNzIxLDEwICs3MjUsMTEgQEAgR0NHTGVudW0gV2ViR0xGcmFtZWJ1ZmZlcjo6Z2V0
RHJhd0J1ZmZlcgogICAgIHJldHVybiBHcmFwaGljc0NvbnRleHRHTDo6Tk9ORTsKIH0KIAotdm9p
ZCBXZWJHTEZyYW1lYnVmZmVyOjphZGRNZW1iZXJzVG9PcGFxdWVSb290cyhjb25zdCBBYnN0cmFj
dExvY2tlciYgbG9ja2VyLCBKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy92b2lkIFdlYkdM
RnJhbWVidWZmZXI6OmFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKGNvbnN0IEFic3RyYWN0TG9ja2Vy
JiBsb2NrZXIsIEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIFdlYkdMRnJhbWVidWZm
ZXI6OmFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzMzAwKGNvbnN0IEFic3RyYWN0TG9ja2VyJiBsb2Nr
ZXIsIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBmb3IgKGF1dG8m
IGVudHJ5IDogbV9hdHRhY2htZW50cykKLSAgICAgICAgZW50cnkudmFsdWUtPmFkZE1lbWJlcnNU
b09wYXF1ZVJvb3RzKGxvY2tlciwgdmlzaXRvcik7CisgICAgICAgIGVudHJ5LnZhbHVlLT5hZGRN
ZW1iZXJzVG9PcGFxdWVSb290czQwMChsb2NrZXIsIHZpc2l0b3IpOwogfQogCiB2b2lkIFdlYkdM
RnJhbWVidWZmZXI6OnNldEF0dGFjaG1lbnRJbnRlcm5hbChHQ0dMZW51bSBhdHRhY2htZW50LCBH
Q0dMZW51bSB0ZXhUYXJnZXQsIFdlYkdMVGV4dHVyZSogdGV4dHVyZSwgR0NHTGludCBsZXZlbCwg
R0NHTGludCBsYXllcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRnJh
bWVidWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJH
TEZyYW1lYnVmZmVyLmgJKHJldmlzaW9uIDI3MTc4NikKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL1dlYkdMRnJhbWVidWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQsOCBA
QAogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIEpTQyB7Ci1jbGFzcyBTbG90
VmlzaXRvcjsKKy8vY2xhc3MgU2xvdFZpc2l0b3I7CitjbGFzcyBBYnN0cmFjdFNsb3RWaXNpdG9y
OwogfQogCiBuYW1lc3BhY2UgV1RGIHsKQEAgLTY1LDcgKzY2LDggQEAgcHVibGljOgogICAgICAg
ICB2aXJ0dWFsIHZvaWQgb25EZXRhY2hlZChjb25zdCBXVEY6OkFic3RyYWN0TG9ja2VyJiwgR3Jh
cGhpY3NDb250ZXh0R0wqKSA9IDA7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBhdHRhY2goR3JhcGhp
Y3NDb250ZXh0R0wqLCBHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIGF0dGFjaG1lbnQpID0gMDsK
ICAgICAgICAgdmlydHVhbCB2b2lkIHVuYXR0YWNoKEdyYXBoaWNzQ29udGV4dEdMKiwgR0NHTGVu
dW0gdGFyZ2V0LCBHQ0dMZW51bSBhdHRhY2htZW50KSA9IDA7Ci0gICAgICAgIHZpcnR1YWwgdm9p
ZCBhZGRNZW1iZXJzVG9PcGFxdWVSb290cyhjb25zdCBXVEY6OkFic3RyYWN0TG9ja2VyJiwgSlND
OjpTbG90VmlzaXRvciYpID0gMDsKKy8vICAgICAgICB2aXJ0dWFsIHZvaWQgYWRkTWVtYmVyc1Rv
T3BhcXVlUm9vdHMoY29uc3QgV1RGOjpBYnN0cmFjdExvY2tlciYsIEpTQzo6U2xvdFZpc2l0b3Im
KSA9IDA7CisgICAgICAgIHZpcnR1YWwgdm9pZCBhZGRNZW1iZXJzVG9PcGFxdWVSb290czQwMChj
b25zdCBXVEY6OkFic3RyYWN0TG9ja2VyJiwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJikgPSAw
OwogCiAgICAgcHJvdGVjdGVkOgogICAgICAgICBXZWJHTEF0dGFjaG1lbnQoKTsKQEAgLTExNCw3
ICsxMTYsOCBAQCBwdWJsaWM6CiAKICAgICBHQ0dMZW51bSBnZXREcmF3QnVmZmVyKEdDR0xlbnVt
KTsKIAotICAgIHZvaWQgYWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMoY29uc3QgV1RGOjpBYnN0cmFj
dExvY2tlciYsIEpTQzo6U2xvdFZpc2l0b3ImKTsKKy8vICAgIHZvaWQgYWRkTWVtYmVyc1RvT3Bh
cXVlUm9vdHMoY29uc3QgV1RGOjpBYnN0cmFjdExvY2tlciYsIEpTQzo6U2xvdFZpc2l0b3ImKTsK
KyAgICB2b2lkIGFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzMzAwKGNvbnN0IFdURjo6QWJzdHJhY3RM
b2NrZXImLCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKTsKIAogcHJpdmF0ZToKICAgICBXZWJH
TEZyYW1lYnVmZmVyKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UmKTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUHJvZ3JhbS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xQcm9ncmFtLmNwcAkocmV2aXNpb24gMjcxNzg2KQor
KysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xQcm9ncmFtLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjA2LDcgKzIwNiw4IEBAIGJvb2wgV2ViR0xQcm9ncmFtOjpkZXRhY2hTaGFkZXIo
Y29uc3QgQWIKICAgICB9CiB9CiAKLXZvaWQgV2ViR0xQcm9ncmFtOjphZGRNZW1iZXJzVG9PcGFx
dWVSb290cyhjb25zdCBBYnN0cmFjdExvY2tlciYsIEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3Ip
CisvL3ZvaWQgV2ViR0xQcm9ncmFtOjphZGRNZW1iZXJzVG9PcGFxdWVSb290cyhjb25zdCBBYnN0
cmFjdExvY2tlciYsIEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIFdlYkdMUHJvZ3Jh
bTo6YWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMyMDAoY29uc3QgQWJzdHJhY3RMb2NrZXImLCBKU0M6
OkFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVS
b290KG1fdmVydGV4U2hhZGVyLmdldCgpKTsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QobV9m
cmFnbWVudFNoYWRlci5nZXQoKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9X
ZWJHTFByb2dyYW0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9X
ZWJHTFByb2dyYW0uaAkocmV2aXNpb24gMjcxNzg2KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9j
YW52YXMvV2ViR0xQcm9ncmFtLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDcgKzM1LDggQEAKICNp
bmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBKU0MgewotY2xhc3MgU2xvdFZpc2l0
b3I7CisvL2NsYXNzIFNsb3RWaXNpdG9yOworY2xhc3MgQWJzdHJhY3RTbG90VmlzaXRvcjsKIH0K
IAogbmFtZXNwYWNlIFdURiB7CkBAIC04OCw3ICs4OSw4IEBAIHB1YmxpYzoKICAgICAgICAgcmV0
dXJuIG1fcmVxdWlyZWRUcmFuc2Zvcm1GZWVkYmFja0J1ZmZlckNvdW50OwogICAgIH0KIAotICAg
IHZvaWQgYWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMoY29uc3QgV1RGOjpBYnN0cmFjdExvY2tlciYs
IEpTQzo6U2xvdFZpc2l0b3ImKTsKKy8vICAgIHZvaWQgYWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMo
Y29uc3QgV1RGOjpBYnN0cmFjdExvY2tlciYsIEpTQzo6U2xvdFZpc2l0b3ImKTsKKyAgICB2b2lk
IGFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzMjAwKGNvbnN0IFdURjo6QWJzdHJhY3RMb2NrZXImLCBK
U0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKTsKIAogcHJpdmF0ZToKICAgICBXZWJHTFByb2dyYW0o
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSYpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9j
YW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHAJKHJldmlz
aW9uIDI3MTc4NikKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03OTM0LDIzICs3OTM0LDI2IEBAIHZv
aWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6ZGlzcGF0Y2gKICAgICBxdWV1ZVRhc2tUb0Rp
c3BhdGNoRXZlbnQoKmNhbnZhcywgVGFza1NvdXJjZTo6V2ViR0wsIFdlYkdMQ29udGV4dEV2ZW50
OjpjcmVhdGUoZXZlbnROYW1lcygpLndlYmdsY29udGV4dGNoYW5nZWRFdmVudCwgRXZlbnQ6OkNh
bkJ1YmJsZTo6Tm8sIEV2ZW50OjpJc0NhbmNlbGFibGU6OlllcywgZW1wdHlTdHJpbmcoKSkpOwog
fQogCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmFkZE1lbWJlcnNUb09wYXF1ZVJv
b3RzKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZTo6YWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMoSlNDOjpTbG90VmlzaXRvciYgdmlzaXRv
cikKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6YWRkTWVtYmVyc1RvT3BhcXVlUm9v
dHMoSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGF1dG8gbG9ja2Vy
ID0gaG9sZExvY2sob2JqZWN0R3JhcGhMb2NrKCkpOwogCisgICAgLy8gbWxhbSBGSVhNRTogd2h5
IGFyZSB3ZSBub3QgYWxzbyB2aXNpdGluZyBtX2RlZmF1bHRWZXJ0ZXhBcnJheU9iamVjdD8KKwog
ICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChtX2JvdW5kQXJyYXlCdWZmZXIuZ2V0KCkpOwogCiAg
ICAgdmlzaXRvci5hZGRPcGFxdWVSb290KG1fYm91bmRWZXJ0ZXhBcnJheU9iamVjdC5nZXQoKSk7
CiAgICAgaWYgKG1fYm91bmRWZXJ0ZXhBcnJheU9iamVjdCkKLSAgICAgICAgbV9ib3VuZFZlcnRl
eEFycmF5T2JqZWN0LT5hZGRNZW1iZXJzVG9PcGFxdWVSb290cyhsb2NrZXIsIHZpc2l0b3IpOwor
ICAgICAgICBtX2JvdW5kVmVydGV4QXJyYXlPYmplY3QtPmFkZE1lbWJlcnNUb09wYXF1ZVJvb3Rz
NjAwKGxvY2tlciwgdmlzaXRvcik7CiAKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QobV9jdXJy
ZW50UHJvZ3JhbS5nZXQoKSk7CiAgICAgaWYgKG1fY3VycmVudFByb2dyYW0pCi0gICAgICAgIG1f
Y3VycmVudFByb2dyYW0tPmFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKGxvY2tlciwgdmlzaXRvcik7
CisgICAgICAgIG1fY3VycmVudFByb2dyYW0tPmFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzMjAwKGxv
Y2tlciwgdmlzaXRvcik7CiAKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QobV9mcmFtZWJ1ZmZl
ckJpbmRpbmcuZ2V0KCkpOwogICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZykKLSAgICAgICAg
bV9mcmFtZWJ1ZmZlckJpbmRpbmctPmFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKGxvY2tlciwgdmlz
aXRvcik7CisgICAgICAgIG1fZnJhbWVidWZmZXJCaW5kaW5nLT5hZGRNZW1iZXJzVG9PcGFxdWVS
b290czMwMChsb2NrZXIsIHZpc2l0b3IpOwogCiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KG1f
cmVuZGVyYnVmZmVyQmluZGluZy5nZXQoKSk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmgJKHJldmlzaW9u
IDI3MTc4NikKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtNTgsNyArNTgsOCBAQAogI2VuZGlmCiAKIG5h
bWVzcGFjZSBKU0MgewotY2xhc3MgU2xvdFZpc2l0b3I7CisvL2NsYXNzIFNsb3RWaXNpdG9yOwor
Y2xhc3MgQWJzdHJhY3RTbG90VmlzaXRvcjsKIH0KIAogbmFtZXNwYWNlIFdURiB7CkBAIC00MTEs
NyArNDEyLDggQEAgcHVibGljOgogICAgIHZvaWQgcmVjeWNsZUNvbnRleHQoKSBvdmVycmlkZTsK
ICAgICB2b2lkIGRpc3BhdGNoQ29udGV4dENoYW5nZWROb3RpZmljYXRpb24oKSBvdmVycmlkZTsK
IAotICAgIHZpcnR1YWwgdm9pZCBhZGRNZW1iZXJzVG9PcGFxdWVSb290cyhKU0M6OlNsb3RWaXNp
dG9yJik7CisvLyAgICB2aXJ0dWFsIHZvaWQgYWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMoSlNDOjpT
bG90VmlzaXRvciYpOworICAgIHZpcnR1YWwgdm9pZCBhZGRNZW1iZXJzVG9PcGFxdWVSb290cyhK
U0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKTsKICAgICAvLyBUaGlzIGxvY2sgbXVzdCBiZSBoZWxk
IGFjcm9zcyBhbGwgbXV0YXRpb25zIG9mIGNvbnRhaW5lcnMgbGlrZQogICAgIC8vIFZlY3RvcnMs
IEhhc2hTZXRzLCBldGMuIHdoaWNoIGNvbnRhaW4gUmVmUHRyPFdlYkdMT2JqZWN0PiwgYW5kCiAg
ICAgLy8gd2hpY2ggYXJlIHRyYXZlcnNlZCBieSBhZGRNZW1iZXJzVG9PcGFxdWVSb290cygpIG9y
IGFueSBvZiB0aGUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVHJhbnNm
b3JtRmVlZGJhY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L1dlYkdMVHJhbnNmb3JtRmVlZGJhY2suY3BwCShyZXZpc2lvbiAyNzE3ODYpCisrKyBTb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFRyYW5zZm9ybUZlZWRiYWNrLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzAsOCArMzAsOSBAQAogCiAjaW5jbHVkZSAiV2ViR0xDb250ZXh0R3JvdXAuaCIK
ICNpbmNsdWRlICJXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmgiCi0jaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvU2xvdFZpc2l0b3IuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9TbG90Vmlz
aXRvcklubGluZXMuaD4KKy8vI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1Nsb3RWaXNpdG9yLmg+
CisvLyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9TbG90VmlzaXRvcklubGluZXMuaD4KKyNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9BYnN0cmFjdFNsb3RWaXNpdG9ySW5saW5lcy5oPgogI2luY2x1
ZGUgPHd0Zi9Mb2NrLmg+CiAjaW5jbHVkZSA8d3RmL0xvY2tlci5oPgogCkBAIC05MywxNCArOTQs
MTUgQEAgYm9vbCBXZWJHTFRyYW5zZm9ybUZlZWRiYWNrOjpoYXNFbm91Z2hCdQogICAgIHJldHVy
biB0cnVlOwogfQogCi12b2lkIFdlYkdMVHJhbnNmb3JtRmVlZGJhY2s6OmFkZE1lbWJlcnNUb09w
YXF1ZVJvb3RzKGNvbnN0IEFic3RyYWN0TG9ja2VyJiBsb2NrZXIsIEpTQzo6U2xvdFZpc2l0b3Im
IHZpc2l0b3IpCisvL3ZvaWQgV2ViR0xUcmFuc2Zvcm1GZWVkYmFjazo6YWRkTWVtYmVyc1RvT3Bh
cXVlUm9vdHMoY29uc3QgQWJzdHJhY3RMb2NrZXImIGxvY2tlciwgSlNDOjpTbG90VmlzaXRvciYg
dmlzaXRvcikKK3ZvaWQgV2ViR0xUcmFuc2Zvcm1GZWVkYmFjazo6YWRkTWVtYmVyc1RvT3BhcXVl
Um9vdHMxMDAoY29uc3QgQWJzdHJhY3RMb2NrZXImIGxvY2tlciwgSlNDOjpBYnN0cmFjdFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQogewogICAgIGZvciAoYXV0byYgYnVmZmVyIDogbV9ib3VuZEluZGV4
ZWRUcmFuc2Zvcm1GZWVkYmFja0J1ZmZlcnMpCiAgICAgICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9v
dChidWZmZXIuZ2V0KCkpOwogCiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KG1fcHJvZ3JhbS5n
ZXQoKSk7CiAgICAgaWYgKG1fcHJvZ3JhbSkKLSAgICAgICAgbV9wcm9ncmFtLT5hZGRNZW1iZXJz
VG9PcGFxdWVSb290cyhsb2NrZXIsIHZpc2l0b3IpOworICAgICAgICBtX3Byb2dyYW0tPmFkZE1l
bWJlcnNUb09wYXF1ZVJvb3RzMjAwKGxvY2tlciwgdmlzaXRvcik7CiB9CiAKIHZvaWQgV2ViR0xU
cmFuc2Zvcm1GZWVkYmFjazo6dW5iaW5kQnVmZmVyKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgV2Vi
R0xCdWZmZXImIGJ1ZmZlcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdM
VHJhbnNmb3JtRmVlZGJhY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2Nh
bnZhcy9XZWJHTFRyYW5zZm9ybUZlZWRiYWNrLmgJKHJldmlzaW9uIDI3MTc4NikKKysrIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVHJhbnNmb3JtRmVlZGJhY2suaAkod29ya2luZyBj
b3B5KQpAQCAtMzEsNyArMzEsOCBAQAogI2luY2x1ZGUgIldlYkdMU2hhcmVkT2JqZWN0LmgiCiAK
IG5hbWVzcGFjZSBKU0MgewotY2xhc3MgU2xvdFZpc2l0b3I7CisvL2NsYXNzIFNsb3RWaXNpdG9y
OworY2xhc3MgQWJzdHJhY3RTbG90VmlzaXRvcjsKIH0KIAogbmFtZXNwYWNlIFdURiB7CkBAIC03
MCw3ICs3MSw4IEBAIHB1YmxpYzoKICAgICAKICAgICBib29sIGhhc0Vub3VnaEJ1ZmZlcnMoR0NH
THVpbnQgbnVtUmVxdWlyZWQpIGNvbnN0OwogCi0gICAgdm9pZCBhZGRNZW1iZXJzVG9PcGFxdWVS
b290cyhjb25zdCBBYnN0cmFjdExvY2tlciYsIEpTQzo6U2xvdFZpc2l0b3ImKTsKKy8vICAgIHZv
aWQgYWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMoY29uc3QgQWJzdHJhY3RMb2NrZXImLCBKU0M6OlNs
b3RWaXNpdG9yJik7CisgICAgdm9pZCBhZGRNZW1iZXJzVG9PcGFxdWVSb290czEwMChjb25zdCBB
YnN0cmFjdExvY2tlciYsIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpOwogCiBwcml2YXRlOgog
ICAgIFdlYkdMVHJhbnNmb3JtRmVlZGJhY2soV2ViR0wyUmVuZGVyaW5nQ29udGV4dCYpOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xWZXJ0ZXhBcnJheU9iamVjdEJhc2Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVmVydGV4
QXJyYXlPYmplY3RCYXNlLmNwcAkocmV2aXNpb24gMjcxNzg2KQorKysgU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvV2ViR0xWZXJ0ZXhBcnJheU9iamVjdEJhc2UuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yOSw4ICsyOSw5IEBACiAjaWYgRU5BQkxFKFdFQkdMKQogCiAjaW5jbHVkZSAiV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZS5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1Nsb3RWaXNp
dG9yLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvU2xvdFZpc2l0b3JJbmxpbmVzLmg+Cisv
LyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9TbG90VmlzaXRvci5oPgorLy8jaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvU2xvdFZpc2l0b3JJbmxpbmVzLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvQWJzdHJhY3RTbG90VmlzaXRvcklubGluZXMuaD4KICNpbmNsdWRlIDx3dGYvTG9ja2VyLmg+
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTEwOSw3ICsxMTAsOCBAQCB2b2lkIFdlYkdMVmVy
dGV4QXJyYXlPYmplY3RCYXNlOjpzZXRWZXJ0CiAgICAgbV92ZXJ0ZXhBdHRyaWJTdGF0ZVtpbmRl
eF0uZGl2aXNvciA9IGRpdmlzb3I7CiB9CiAKLXZvaWQgV2ViR0xWZXJ0ZXhBcnJheU9iamVjdEJh
c2U6OmFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgSlNDOjpT
bG90VmlzaXRvciYgdmlzaXRvcikKKy8vdm9pZCBXZWJHTFZlcnRleEFycmF5T2JqZWN0QmFzZTo6
YWRkTWVtYmVyc1RvT3BhcXVlUm9vdHM2MDAoY29uc3QgQWJzdHJhY3RMb2NrZXImLCBKU0M6OlNs
b3RWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBXZWJHTFZlcnRleEFycmF5T2JqZWN0QmFzZTo6YWRk
TWVtYmVyc1RvT3BhcXVlUm9vdHM2MDAoY29uc3QgQWJzdHJhY3RMb2NrZXImLCBKU0M6OkFic3Ry
YWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KG1f
Ym91bmRFbGVtZW50QXJyYXlCdWZmZXIuZ2V0KCkpOwogICAgIGZvciAoYXV0byYgc3RhdGUgOiBt
X3ZlcnRleEF0dHJpYlN0YXRlKQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2Vi
R0xWZXJ0ZXhBcnJheU9iamVjdEJhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9XZWJHTFZlcnRleEFycmF5T2JqZWN0QmFzZS5oCShyZXZpc2lvbiAyNzE3ODYp
CisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFZlcnRleEFycmF5T2JqZWN0QmFz
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw4IEBACiAjaW5jbHVkZSAiV2ViR0xDb250
ZXh0T2JqZWN0LmgiCiAKIG5hbWVzcGFjZSBKU0MgewotY2xhc3MgU2xvdFZpc2l0b3I7CisvL2Ns
YXNzIFNsb3RWaXNpdG9yOworY2xhc3MgQWJzdHJhY3RTbG90VmlzaXRvcjsKIH0KIAogbmFtZXNw
YWNlIFdURiB7CkBAIC03Nyw3ICs3OCw4IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgc2V0VmVydGV4
QXR0cmliRGl2aXNvcihHQ0dMdWludCBpbmRleCwgR0NHTHVpbnQgZGl2aXNvcik7CiAKLSAgICB2
b2lkIGFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKGNvbnN0IFdURjo6QWJzdHJhY3RMb2NrZXImLCBK
U0M6OlNsb3RWaXNpdG9yJik7CisvLyAgICB2b2lkIGFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzNjAw
KGNvbnN0IFdURjo6QWJzdHJhY3RMb2NrZXImLCBKU0M6OlNsb3RWaXNpdG9yJik7CisgICAgdm9p
ZCBhZGRNZW1iZXJzVG9PcGFxdWVSb290czYwMChjb25zdCBXVEY6OkFic3RyYWN0TG9ja2VyJiwg
SlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAKIHByb3RlY3RlZDoKICAgICBXZWJHTFZlcnRl
eEFycmF5T2JqZWN0QmFzZShXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlJiwgVHlwZSk7Cg==
</data>
<flag name="commit-queue"
          id="437075"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>419038</attachid>
            <date>2021-02-02 11:41:11 -0800</date>
            <delta_ts>2021-02-08 15:15:45 -0800</delta_ts>
            <desc>work in progress.</desc>
            <filename>bug-217274e.patch</filename>
            <type>text/plain</type>
            <size>502683</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDI3MjE5MikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtNjA4LDYgKzYwOCw4IEBAIHNldChKYXZhU2NyaXB0Q29yZV9QUklWQVRFX0ZSQU1FV09SS19I
RUEKICAgICBkb21qaXQvRE9NSklUSGVhcFJhbmdlLmgKICAgICBkb21qaXQvRE9NSklUU2lnbmF0
dXJlLmgKIAorICAgIGhlYXAvQWJzdHJhY3RTbG90VmlzaXRvci5oCisgICAgaGVhcC9BYnN0cmFj
dFNsb3RWaXNpdG9ySW5saW5lcy5oCiAgICAgaGVhcC9BbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmgK
ICAgICBoZWFwL0FsbG9jYXRpb25GYWlsdXJlTW9kZS5oCiAgICAgaGVhcC9BbGxvY2F0b3IuaApA
QCAtNjgxLDEyICs2ODMsMTQgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1BSSVZBVEVfRlJBTUVXT1JL
X0hFQQogICAgIGhlYXAvU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQuaAogICAgIGhlYXAvU2xvdFZp
c2l0b3IuaAogICAgIGhlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmgKKyAgICBoZWFwL1Nsb3RWaXNp
dG9yTWFjcm9zLmgKICAgICBoZWFwL1N0cm9uZy5oCiAgICAgaGVhcC9TdHJvbmdJbmxpbmVzLmgK
ICAgICBoZWFwL1N1YnNwYWNlLmgKICAgICBoZWFwL1N1YnNwYWNlSW5saW5lcy5oCiAgICAgaGVh
cC9TeW5jaHJvbm91c25lc3MuaAogICAgIGhlYXAvVGlueUJsb29tRmlsdGVyLmgKKyAgICBoZWFw
L1ZlcmlmaWVyU2xvdFZpc2l0b3IuaAogICAgIGhlYXAvVmlzaXRSYWNlS2V5LmgKICAgICBoZWFw
L1dlYWsuaAogICAgIGhlYXAvV2Vha0Jsb2NrLmgKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9Tb3VyY2VzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNl
cy50eHQJKHJldmlzaW9uIDI3MjE5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2Vz
LnR4dAkod29ya2luZyBjb3B5KQpAQCAtNTAxLDYgKzUwMSw3IEBAIGZ0bC9GVExTdGF0ZS5jcHAK
IGZ0bC9GVExUaHVua3MuY3BwCiBmdGwvRlRMVmFsdWVSYW5nZS5jcHAKIAoraGVhcC9BYnN0cmFj
dFNsb3RWaXNpdG9yLmNwcAogaGVhcC9BbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmNwcAogaGVhcC9B
bGxvY2F0b3IuY3BwCiBoZWFwL0Jsb2NrRGlyZWN0b3J5LmNwcApAQCAtNTU5LDYgKzU2MCw3IEBA
IGhlYXAvU3RvcElmTmVjZXNzYXJ5VGltZXIuY3BwCiBoZWFwL1N1YnNwYWNlLmNwcAogaGVhcC9T
eW5jaHJvbm91c1N0b3BUaGVXb3JsZE11dGF0b3JTY2hlZHVsZXIuY3BwCiBoZWFwL1N5bmNocm9u
b3VzbmVzcy5jcHAKK2hlYXAvVmVyaWZpZXJTbG90VmlzaXRvci5jcHAKIGhlYXAvVmlzaXRSYWNl
S2V5LmNwcAogaGVhcC9XZWFrLmNwcAogaGVhcC9XZWFrQmxvY2suY3BwCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQVBJL0pTQVBJV3JhcHBlck9iamVjdC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNBUElXcmFwcGVyT2JqZWN0LmgJKHJldmlzaW9uIDI3
MjE5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNBUElXcmFwcGVyT2JqZWN0LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC00MSw3ICs0MSw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9p
ZCBzdWJzcGFjZUZvcihWTSYpIHsgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQogICAg
IAogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENo
aWxkcmVuKEpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX0VYUE9SVF9W
SVNJVF9DSElMRFJFTjsKICAgICAKICAgICB2b2lkKiB3cmFwcGVkT2JqZWN0KCkgeyByZXR1cm4g
bV93cmFwcGVkT2JqZWN0OyB9CiAgICAgdm9pZCBzZXRXcmFwcGVkT2JqZWN0KHZvaWQqKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNBUElXcmFwcGVyT2JqZWN0Lm1tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNBUElXcmFwcGVyT2JqZWN0Lm1t
CShyZXZpc2lvbiAyNzIxOTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQVBJV3Jh
cHBlck9iamVjdC5tbQkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM3LDcgKzM3LDcgQEAKIGNsYXNzIEpT
QVBJV3JhcHBlck9iamVjdEhhbmRsZU93bmVyIGZpbmFsIDogcHVibGljIEpTQzo6V2Vha0hhbmRs
ZU93bmVyIHsKIHB1YmxpYzoKICAgICB2b2lkIGZpbmFsaXplKEpTQzo6SGFuZGxlPEpTQzo6VW5r
bm93bj4sIHZvaWQqKSBmaW5hbDsKLSAgICBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3Rz
KEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6U2xvdFZpc2l0
b3ImLCBjb25zdCBjaGFyKiopIGZpbmFsOworICAgIGJvb2wgaXNSZWFjaGFibGVGcm9tT3BhcXVl
Um9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCwgSlNDOjpBYnN0
cmFjdFNsb3RWaXNpdG9yJiwgY29uc3QgY2hhcioqKSBmaW5hbDsKIH07CiAKIHN0YXRpYyBKU0FQ
SVdyYXBwZXJPYmplY3RIYW5kbGVPd25lcioganNBUElXcmFwcGVyT2JqZWN0SGFuZGxlT3duZXIo
KQpAQCAtNTYsMTQgKzU2LDE1IEBAIHZvaWQgSlNBUElXcmFwcGVyT2JqZWN0SGFuZGxlT3duZXI6
OmZpbmEKICAgICBKU0M6OldlYWtTZXQ6OmRlYWxsb2NhdGUoSlNDOjpXZWFrSW1wbDo6YXNXZWFr
SW1wbChoYW5kbGUuc2xvdCgpKSk7CiB9CiAKLWJvb2wgSlNBUElXcmFwcGVyT2JqZWN0SGFuZGxl
T3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93
bj4gaGFuZGxlLCB2b2lkKiwgSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioq
KQorYm9vbCBKU0FQSVdyYXBwZXJPYmplY3RIYW5kbGVPd25lcjo6aXNSZWFjaGFibGVGcm9tT3Bh
cXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBKU0M6OkFi
c3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKikKIHsKICAgICBKU0M6OkpT
QVBJV3JhcHBlck9iamVjdCogd3JhcHBlck9iamVjdCA9IEpTQzo6anNDYXN0PEpTQzo6SlNBUElX
cmFwcGVyT2JqZWN0Kj4oaGFuZGxlLmdldCgpLmFzQ2VsbCgpKTsKICAgICAvLyBXZSB1c2UgdGhl
IEpTR2xvYmFsT2JqZWN0IHdoZW4gcHJvY2Vzc2luZyB3ZWFrIGhhbmRsZXMgdG8gcHJldmVudCB0
aGUgc2l0dWF0aW9uIHdoZXJlIHVzaW5nCiAgICAgLy8gdGhlIHNhbWUgT2JqZWN0aXZlLUMgb2Jq
ZWN0IGluIG11bHRpcGxlIGdsb2JhbCBvYmplY3RzIGtlZXBzIGFsbCBvZiB0aGUgZ2xvYmFsIG9i
amVjdHMgYWxpdmUuCiAgICAgaWYgKCF3cmFwcGVyT2JqZWN0LT53cmFwcGVkT2JqZWN0KCkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gdmlzaXRvci52bSgpLmhlYXAuaXNNYXJr
ZWQod3JhcHBlck9iamVjdC0+c3RydWN0dXJlKCktPmdsb2JhbE9iamVjdCgpKSAmJiB2aXNpdG9y
LmNvbnRhaW5zT3BhcXVlUm9vdCh3cmFwcGVyT2JqZWN0LT53cmFwcGVkT2JqZWN0KCkpOworLy8g
ICAgcmV0dXJuIHZpc2l0b3Iudm0oKS5oZWFwLmlzTWFya2VkKHdyYXBwZXJPYmplY3QtPnN0cnVj
dHVyZSgpLT5nbG9iYWxPYmplY3QoKSkgJiYgdmlzaXRvci5jb250YWluc09wYXF1ZVJvb3Qod3Jh
cHBlck9iamVjdC0+d3JhcHBlZE9iamVjdCgpKTsKKyAgICByZXR1cm4gdmlzaXRvci5pc01hcmtl
ZCh3cmFwcGVyT2JqZWN0LT5zdHJ1Y3R1cmUoKS0+Z2xvYmFsT2JqZWN0KCkpICYmIHZpc2l0b3Iu
Y29udGFpbnNPcGFxdWVSb290KHdyYXBwZXJPYmplY3QtPndyYXBwZWRPYmplY3QoKSk7CiB9CiAK
IG5hbWVzcGFjZSBKU0MgewpAQCAtNzMsNiArNzQsOCBAQCBzdGF0aWMgSlNDX0RFQ0xBUkVfSE9T
VF9GVU5DVElPTihjb25zdHJ1CiBzdGF0aWMgSlNDX0RFQ0xBUkVfQ1VTVE9NX0dFVFRFUihjYWxs
YmFja0dldHRlckpTQVBJV3JhcHBlck9iamVjdENhbGxiYWNrT2JqZWN0KTsKIHN0YXRpYyBKU0Nf
REVDTEFSRV9DVVNUT01fR0VUVEVSKHN0YXRpY0Z1bmN0aW9uR2V0dGVySlNBUElXcmFwcGVyT2Jq
ZWN0Q2FsbGJhY2tPYmplY3QpOwogCitERUZJTkVfVEVNUExBVEVfVklTSVRfQ0hJTERSRU4odGVt
cGxhdGU8PiwgSlNDYWxsYmFja09iamVjdDxKU0FQSVdyYXBwZXJPYmplY3Q+KTsKKwogdGVtcGxh
dGUgPD4gY29uc3QgQ2xhc3NJbmZvIEpTQ2FsbGJhY2tPYmplY3Q8SlNBUElXcmFwcGVyT2JqZWN0
Pjo6c19pbmZvID0geyAiSlNBUElXcmFwcGVyT2JqZWN0IiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0
ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU0NhbGxiYWNrT2JqZWN0KSB9OwogdGVt
cGxhdGUgPD4gY29uc3QgYm9vbCBKU0NhbGxiYWNrT2JqZWN0PEpTQVBJV3JhcHBlck9iamVjdD46
Om5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOwogCkBAIC0xMjMsNyArMTI2LDggQEAgdm9pZCBKU0FQ
SVdyYXBwZXJPYmplY3Q6OnNldFdyYXBwZWRPYmplYwogICAgIG1fd3JhcHBlZE9iamVjdCA9IFtz
dGF0aWNfY2FzdDxpZD4od3JhcHBlZE9iamVjdCkgcmV0YWluXTsKIH0KIAotdm9pZCBKU0FQSVdy
YXBwZXJPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBKU0M6OlNsb3RWaXNpdG9y
JiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNBUElXcmFwcGVy
T2JqZWN0Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3Ip
CiB7CiAgICAgSlNBUElXcmFwcGVyT2JqZWN0KiB0aGlzT2JqZWN0ID0gSlNDOjpqc0Nhc3Q8SlNB
UElXcmFwcGVyT2JqZWN0Kj4oY2VsbCk7CiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbihjZWxsLCB2
aXNpdG9yKTsKQEAgLTEzMyw2ICsxMzcsOCBAQCB2b2lkIEpTQVBJV3JhcHBlck9iamVjdDo6dmlz
aXRDaGlsZHJlbihKCiAgICAgICAgIHNjYW5FeHRlcm5hbE9iamVjdEdyYXBoKHZpc2l0b3Iudm0o
KSwgdmlzaXRvciwgd3JhcHBlZE9iamVjdCk7CiB9CiAKK0RFRklORV9FWFBPUlRfVklTSVRfQ0hJ
TERSRU4oSlNBUElXcmFwcGVyT2JqZWN0KTsKKwogdGVtcGxhdGUgPD4KIElzb1N1YnNwYWNlKiBK
U0NhbGxiYWNrT2JqZWN0PEpTQVBJV3JhcHBlck9iamVjdD46OnN1YnNwYWNlRm9ySW1wbChWTSYg
dm0sIFN1YnNwYWNlQWNjZXNzIG1vZGUpCiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
QVBJL0pTQ2FsbGJhY2tPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdC5jcHAJKHJldmlzaW9uIDI3MjE5MikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMTcgQXBwbGUgSW5j
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIwIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwNyBFcmljIFNl
aWRlbCA8ZXJpY0B3ZWJraXQub3JnPgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtNDEsNiArNDEsOSBA
QCBzdGF0aWMgSlNDX0RFQ0xBUkVfQ1VTVE9NX0dFVFRFUihzdGF0aWNGCiBzdGF0aWMgSlNDX0RF
Q0xBUkVfQ1VTVE9NX0dFVFRFUihjYWxsYmFja0dldHRlckpTR2xvYmFsT2JqZWN0Q2FsbGJhY2tP
YmplY3QpOwogc3RhdGljIEpTQ19ERUNMQVJFX0NVU1RPTV9HRVRURVIoc3RhdGljRnVuY3Rpb25H
ZXR0ZXJKU0dsb2JhbE9iamVjdENhbGxiYWNrT2JqZWN0KTsKIAorREVGSU5FX1RFTVBMQVRFX1ZJ
U0lUX0NISUxEUkVOKHRlbXBsYXRlPD4sIEpTQ2FsbGJhY2tPYmplY3Q8SlNOb25GaW5hbE9iamVj
dD4pOworREVGSU5FX1RFTVBMQVRFX1ZJU0lUX0NISUxEUkVOKHRlbXBsYXRlPD4sIEpTQ2FsbGJh
Y2tPYmplY3Q8SlNHbG9iYWxPYmplY3Q+KTsKKwogLy8gRGVmaW5lIHRoZSB0d28gdHlwZXMgb2Yg
SlNDYWxsYmFja09iamVjdHMgd2Ugc3VwcG9ydC4KIHRlbXBsYXRlIDw+IGNvbnN0IENsYXNzSW5m
byBKU0NhbGxiYWNrT2JqZWN0PEpTTm9uRmluYWxPYmplY3Q+OjpzX2luZm8gPSB7ICJDYWxsYmFj
a09iamVjdCIsICZCYXNlOjpzX2luZm8sIG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0Rf
VEFCTEUoSlNDYWxsYmFja09iamVjdCkgfTsKIHRlbXBsYXRlIDw+IGNvbnN0IENsYXNzSW5mbyBK
U0NhbGxiYWNrT2JqZWN0PEpTR2xvYmFsT2JqZWN0Pjo6c19pbmZvID0geyAiQ2FsbGJhY2tHbG9i
YWxPYmplY3QiLCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9E
X1RBQkxFKEpTQ2FsbGJhY2tPYmplY3QpIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
QVBJL0pTQ2FsbGJhY2tPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvQVBJL0pTQ2FsbGJhY2tPYmplY3QuaAkocmV2aXNpb24gMjcyMTkyKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTY5
LDcgKzY5LDEwIEBAIHB1YmxpYzoKICAgICAgICAgbV9wcml2YXRlUHJvcGVydGllcy0+ZGVsZXRl
UHJpdmF0ZVByb3BlcnR5KHByb3BlcnR5TmFtZSk7CiAgICAgfQogCi0gICAgdm9pZCB2aXNpdENo
aWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47
CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgorICAgIHZvaWQgdmlzaXRDaGlsZHJl
bihWaXNpdG9yJiB2aXNpdG9yKQogICAgIHsKICAgICAgICAgSlNQcml2YXRlUHJvcGVydHlNYXAq
IHByb3BlcnRpZXMgPSBtX3ByaXZhdGVQcm9wZXJ0aWVzLmdldCgpOwogICAgICAgICBpZiAoIXBy
b3BlcnRpZXMpCkBAIC0xMDMsNyArMTA2LDggQEAgcHVibGljOgogICAgICAgICAgICAgbV9wcm9w
ZXJ0eU1hcC5yZW1vdmUocHJvcGVydHlOYW1lLmltcGwoKSk7CiAgICAgICAgIH0KIAotICAgICAg
ICB2b2lkIHZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisgICAgICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFZpc2l0b3I+CisgICAgICAgIHZvaWQgdmlzaXRDaGlsZHJlbihWaXNpdG9y
JiB2aXNpdG9yKQogICAgICAgICB7CiAgICAgICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2xv
Y2spOwogICAgICAgICAgICAgZm9yIChhdXRvJiBwYWlyIDogbV9wcm9wZXJ0eU1hcCkgewpAQCAt
MjE2LDEzICsyMjAsNyBAQCBwcml2YXRlOgogICAgIHN0YXRpYyBDYWxsRGF0YSBnZXRDb25zdHJ1
Y3REYXRhKEpTQ2VsbCopOwogICAgIHN0YXRpYyBDYWxsRGF0YSBnZXRDYWxsRGF0YShKU0NlbGwq
KTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90Vmlz
aXRvciYgdmlzaXRvcikKLSAgICB7Ci0gICAgICAgIEpTQ2FsbGJhY2tPYmplY3QqIHRoaXNPYmpl
Y3QgPSBqc0Nhc3Q8SlNDYWxsYmFja09iamVjdCo+KGNlbGwpOwotICAgICAgICBBU1NFUlRfR0Nf
T0JKRUNUX0lOSEVSSVRTKChzdGF0aWNfY2FzdDxQYXJlbnQqPih0aGlzT2JqZWN0KSksIEpTQ2Fs
bGJhY2tPYmplY3Q8UGFyZW50Pjo6aW5mbygpKTsKLSAgICAgICAgUGFyZW50Ojp2aXNpdENoaWxk
cmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwotICAgICAgICB0aGlzT2JqZWN0LT5tX2NhbGxiYWNr
T2JqZWN0RGF0YS0+dmlzaXRDaGlsZHJlbih2aXNpdG9yKTsKLSAgICB9CisgICAgREVDTEFSRV9U
RU1QTEFURV9WSVNJVF9DSElMRFJFTjsKIAogICAgIHZvaWQgaW5pdChKU0dsb2JhbE9iamVjdCop
OwogIApAQCAtMjQ1LDYgKzI0MywxNiBAQCBwcml2YXRlOgogICAgIGNvbnN0IENsYXNzSW5mbyog
bV9jbGFzc0luZm8geyBudWxscHRyIH07CiB9OwogCit0ZW1wbGF0ZSA8Y2xhc3MgUGFyZW50Pgor
dGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNDYWxsYmFja09iamVjdDxQYXJlbnQ+
Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCit7Cisg
ICAgSlNDYWxsYmFja09iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0NhbGxiYWNrT2JqZWN0
Kj4oY2VsbCk7CisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUygoc3RhdGljX2Nhc3Q8UGFy
ZW50Kj4odGhpc09iamVjdCkpLCBKU0NhbGxiYWNrT2JqZWN0PFBhcmVudD46OmluZm8oKSk7Cisg
ICAgUGFyZW50Ojp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOworICAgIHRoaXNP
YmplY3QtPm1fY2FsbGJhY2tPYmplY3REYXRhLT52aXNpdENoaWxkcmVuKHZpc2l0b3IpOworfQor
CiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogLy8gaW5jbHVkZSB0aGUgYWN0dWFsIHRlbXBsYXRlIGNs
YXNzIGltcGxlbWVudGF0aW9uCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTTWFu
YWdlZFZhbHVlLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNN
YW5hZ2VkVmFsdWUubW0JKHJldmlzaW9uIDI3MjE5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9BUEkvSlNNYW5hZ2VkVmFsdWUubW0JKHdvcmtpbmcgY29weSkKQEAgLTQyLDcgKzQyLDcgQEAK
IGNsYXNzIEpTTWFuYWdlZFZhbHVlSGFuZGxlT3duZXIgZmluYWwgOiBwdWJsaWMgSlNDOjpXZWFr
SGFuZGxlT3duZXIgewogcHVibGljOgogICAgIHZvaWQgZmluYWxpemUoSlNDOjpIYW5kbGU8SlND
OjpVbmtub3duPiwgdm9pZCogY29udGV4dCkgZmluYWw7Ci0gICAgYm9vbCBpc1JlYWNoYWJsZUZy
b21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0LCBK
U0M6OlNsb3RWaXNpdG9yJiwgY29uc3QgY2hhcioqKSBmaW5hbDsKKyAgICBib29sIGlzUmVhY2hh
YmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRl
eHQsIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYsIGNvbnN0IGNoYXIqKikgZmluYWw7CiB9Owog
CiBzdGF0aWMgSlNNYW5hZ2VkVmFsdWVIYW5kbGVPd25lciYgbWFuYWdlZFZhbHVlSGFuZGxlT3du
ZXIoKQpAQCAtMTgwLDcgKzE4MCw3IEBAIEBpbnRlcmZhY2UgSlNNYW5hZ2VkVmFsdWUgKFByaXZh
dGVNZXRob2QKIC0gKHZvaWQpZGlzY29ubmVjdFZhbHVlOwogQGVuZAogCi1ib29sIEpTTWFuYWdl
ZFZhbHVlSGFuZGxlT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxl
PEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3Is
IGNvbnN0IGNoYXIqKiByZWFzb24pCitib29sIEpTTWFuYWdlZFZhbHVlSGFuZGxlT3duZXI6Omlz
UmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQq
IGNvbnRleHQsIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioq
IHJlYXNvbikKIHsKICAgICBpZiAoVU5MSUtFTFkocmVhc29uKSkKICAgICAgICAgKnJlYXNvbiA9
ICJKU01hbmFnZWRWYWx1ZSBpcyBvcGFxdWUgcm9vdCI7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvQVBJL0pTTWFya2luZ0NvbnN0cmFpbnRQcml2YXRlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTTWFya2luZ0NvbnN0cmFpbnRQcml2YXRlLmNwcAko
cmV2aXNpb24gMjcyMTkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU01hcmtpbmdD
b25zdHJhaW50UHJpdmF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDcgKzM2LDcgQEAgbmFt
ZXNwYWNlIHsKIEF0b21pYzx1bnNpZ25lZD4gY29uc3RyYWludENvdW50ZXI7CiAKIHN0cnVjdCBN
YXJrZXIgOiBKU01hcmtlciB7Ci0gICAgU2xvdFZpc2l0b3IqIHZpc2l0b3I7CisgICAgQWJzdHJh
Y3RTbG90VmlzaXRvciogdmlzaXRvcjsKIH07CiAKIGJvb2wgaXNNYXJrZWQoSlNNYXJrZXJSZWYg
bWFya2VyUmVmLCBKU09iamVjdFJlZiBvYmplY3RSZWYpCkBAIC00NCw3ICs0NCw4IEBAIGJvb2wg
aXNNYXJrZWQoSlNNYXJrZXJSZWYgbWFya2VyUmVmLCBKU08KICAgICBpZiAoIW9iamVjdFJlZikK
ICAgICAgICAgcmV0dXJuIHRydWU7IC8vIE51bGwgaXMgYW4gaW1tb3J0YWwgb2JqZWN0LgogICAg
IAotICAgIHJldHVybiBzdGF0aWNfY2FzdDxNYXJrZXIqPihtYXJrZXJSZWYpLT52aXNpdG9yLT52
bSgpLmhlYXAuaXNNYXJrZWQodG9KUyhvYmplY3RSZWYpKTsKKy8vICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxNYXJrZXIqPihtYXJrZXJSZWYpLT52aXNpdG9yLT52bSgpLmhlYXAuaXNNYXJrZWQodG9K
UyhvYmplY3RSZWYpKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8TWFya2VyKj4obWFya2VyUmVm
KS0+dmlzaXRvci0+aXNNYXJrZWQodG9KUyhvYmplY3RSZWYpKTsKIH0KIAogdm9pZCBtYXJrKEpT
TWFya2VyUmVmIG1hcmtlclJlZiwgSlNPYmplY3RSZWYgb2JqZWN0UmVmKQpAQCAtNzQsMTEgKzc1
LDExIEBAIHZvaWQgSlNDb250ZXh0R3JvdXBBZGRNYXJraW5nQ29uc3RyYWludCgKICAgICAgICAg
dG9DU3RyaW5nKCJBbWMiLCBjb25zdHJhaW50SW5kZXgsICIoIiwgUmF3UG9pbnRlcihiaXR3aXNl
X2Nhc3Q8dm9pZCo+KGNvbnN0cmFpbnRDYWxsYmFjaykpLCAiKSIpLAogICAgICAgICB0b0NTdHJp
bmcoIkFQSSBNYXJraW5nIENvbnN0cmFpbnQgIyIsIGNvbnN0cmFpbnRJbmRleCwgIiAoIiwgUmF3
UG9pbnRlcihiaXR3aXNlX2Nhc3Q8dm9pZCo+KGNvbnN0cmFpbnRDYWxsYmFjaykpLCAiLCAiLCBS
YXdQb2ludGVyKHVzZXJEYXRhKSwgIikiKSwKICAgICAgICAgW2NvbnN0cmFpbnRDYWxsYmFjaywg
dXNlckRhdGFdCi0gICAgICAgIChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IpIHsKKyAgICAgICAg
KEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsKICAgICAgICAgICAgIE1hcmtlciBtYXJr
ZXI7CiAgICAgICAgICAgICBtYXJrZXIuSXNNYXJrZWQgPSBpc01hcmtlZDsKICAgICAgICAgICAg
IG1hcmtlci5NYXJrID0gbWFyazsKLSAgICAgICAgICAgIG1hcmtlci52aXNpdG9yID0gJnNsb3RW
aXNpdG9yOworICAgICAgICAgICAgbWFya2VyLnZpc2l0b3IgPSAmdmlzaXRvcjsKICAgICAgICAg
ICAgIAogICAgICAgICAgICAgY29uc3RyYWludENhbGxiYWNrKCZtYXJrZXIsIHVzZXJEYXRhKTsK
ICAgICAgICAgfSwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWaXJ0dWFsTWFj
aGluZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmlydHVh
bE1hY2hpbmUubW0JKHJldmlzaW9uIDI3MjE5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9B
UEkvSlNWaXJ0dWFsTWFjaGluZS5tbQkod29ya2luZyBjb3B5KQpAQCAtMzE1LDcgKzMxNSw4IEBA
ICsgKHZvaWQpc2V0Q3Jhc2hPblZNQ3JlYXRpb246KEJPT0wpc2hvdWwKIAogQGVuZAogCi1zdGF0
aWMgdm9pZCBzY2FuRXh0ZXJuYWxPYmplY3RHcmFwaChKU0M6OlZNJiB2bSwgSlNDOjpTbG90Vmlz
aXRvciYgdmlzaXRvciwgdm9pZCogcm9vdCwgYm9vbCBsb2NrQWNxdWlyZWQpCit0ZW1wbGF0ZTx0
eXBlbmFtZSBWaXNpdG9yPgorc3RhdGljIHZvaWQgc2NhbkV4dGVybmFsT2JqZWN0R3JhcGgoSlND
OjpWTSYgdm0sIFZpc2l0b3ImIHZpc2l0b3IsIHZvaWQqIHJvb3QsIGJvb2wgbG9ja0FjcXVpcmVk
KQogewogICAgIEBhdXRvcmVsZWFzZXBvb2wgewogICAgICAgICBKU1ZpcnR1YWxNYWNoaW5lICp2
aXJ0dWFsTWFjaGluZSA9IFtKU1ZNV3JhcHBlckNhY2hlIHdyYXBwZXJGb3JKU0NvbnRleHRHcm91
cFJlZjp0b1JlZigmdm0pXTsKQEAgLTM0NywxMyArMzQ4LDE3IEBAIHN0YXRpYyB2b2lkIHNjYW5F
eHRlcm5hbE9iamVjdEdyYXBoKEpTQzoKICAgICB9CiB9CiAKLXZvaWQgc2NhbkV4dGVybmFsT2Jq
ZWN0R3JhcGgoSlNDOjpWTSYgdm0sIEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IsIHZvaWQqIHJv
b3QpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBzY2FuRXh0ZXJuYWxPYmplY3RH
cmFwaChKU0M6OlZNJiB2bSwgVmlzaXRvciYgdmlzaXRvciwgdm9pZCogcm9vdCkKIHsKICAgICBi
b29sIGxvY2tBY3F1aXJlZCA9IGZhbHNlOwogICAgIHNjYW5FeHRlcm5hbE9iamVjdEdyYXBoKHZt
LCB2aXNpdG9yLCByb290LCBsb2NrQWNxdWlyZWQpOwogfQogCi12b2lkIHNjYW5FeHRlcm5hbFJl
bWVtYmVyZWRTZXQoSlNDOjpWTSYgdm0sIEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1w
bGF0ZSB2b2lkIHNjYW5FeHRlcm5hbE9iamVjdEdyYXBoKEpTQzo6Vk0mLCBKU0M6OlNsb3RWaXNp
dG9yJiwgdm9pZCopOwordGVtcGxhdGUgdm9pZCBzY2FuRXh0ZXJuYWxPYmplY3RHcmFwaChKU0M6
OlZNJiwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiwgdm9pZCopOworCit2b2lkIHNjYW5FeHRl
cm5hbFJlbWVtYmVyZWRTZXQoSlNDOjpWTSYgdm0sIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYg
dmlzaXRvcikKIHsKICAgICBAYXV0b3JlbGVhc2Vwb29sIHsKICAgICAgICAgSlNWaXJ0dWFsTWFj
aGluZSAqdmlydHVhbE1hY2hpbmUgPSBbSlNWTVdyYXBwZXJDYWNoZSB3cmFwcGVyRm9ySlNDb250
ZXh0R3JvdXBSZWY6dG9SZWYoJnZtKV07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJ
L0pTVmlydHVhbE1hY2hpbmVJbnRlcm5hbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvSlNWaXJ0dWFsTWFjaGluZUludGVybmFsLmgJKHJldmlzaW9uIDI3MjE5MikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWaXJ0dWFsTWFjaGluZUludGVybmFsLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDggQEAKIAogbmFtZXNwYWNlIEpTQyB7CiBjbGFz
cyBWTTsKLWNsYXNzIFNsb3RWaXNpdG9yOworLy9jbGFzcyBTbG90VmlzaXRvcjsKK2NsYXNzIEFi
c3RyYWN0U2xvdFZpc2l0b3I7CiB9CiAKICNpZiBkZWZpbmVkKF9fT0JKQ19fKQpAQCAtNTQsOCAr
NTUsOCBAQCBKU0NvbnRleHRHcm91cFJlZiBnZXRHcm91cEZyb21WaXJ0dWFsTWFjCiAKICNlbmRp
ZiAvLyBkZWZpbmVkKF9fT0JKQ19fKQogCi12b2lkIHNjYW5FeHRlcm5hbE9iamVjdEdyYXBoKEpT
Qzo6Vk0mLCBKU0M6OlNsb3RWaXNpdG9yJiwgdm9pZCogcm9vdCk7Ci12b2lkIHNjYW5FeHRlcm5h
bFJlbWVtYmVyZWRTZXQoSlNDOjpWTSYsIEpTQzo6U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlPHR5
cGVuYW1lIFZpc2l0b3I+IHZvaWQgc2NhbkV4dGVybmFsT2JqZWN0R3JhcGgoSlNDOjpWTSYsIFZp
c2l0b3ImLCB2b2lkKiByb290KTsKK3ZvaWQgc2NhbkV4dGVybmFsUmVtZW1iZXJlZFNldChKU0M6
OlZNJiwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAKICNlbmRpZiAvLyBKU0NfT0JKQ19B
UElfRU5BQkxFRAogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL01hcmtlZEpTVmFs
dWVSZWZBcnJheS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9N
YXJrZWRKU1ZhbHVlUmVmQXJyYXkuY3BwCShyZXZpc2lvbiAyNzIxOTIpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvQVBJL01hcmtlZEpTVmFsdWVSZWZBcnJheS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQ2LDcgKzQ2LDkgQEAgTWFya2VkSlNWYWx1ZVJlZkFycmF5Ojp+TWFya2VkSlNWYWx1ZVJl
ZgogICAgICAgICByZW1vdmUoKTsKIH0KIAotdm9pZCBNYXJrZWRKU1ZhbHVlUmVmQXJyYXk6OnZp
c2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy90ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPgorLy92b2lkIE1hcmtlZEpTVmFsdWVSZWZBcnJheTo6dmlzaXRBZ2dyZWdhdGUoVmlz
aXRvciYgdmlzaXRvcikKK3ZvaWQgTWFya2VkSlNWYWx1ZVJlZkFycmF5Ojp2aXNpdEFnZ3JlZ2F0
ZTEoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU1ZhbHVlUmVmKiBidWZm
ZXIgPSBkYXRhKCk7CiAgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IDA7IGluZGV4IDwgbV9zaXpl
OyArK2luZGV4KSB7CkBAIC02Miw0ICs2NCw3IEBAIHZvaWQgTWFya2VkSlNWYWx1ZVJlZkFycmF5
Ojp2aXNpdEFnZ3JlZ2EKICAgICB9CiB9CiAKKy8vdGVtcGxhdGUgdm9pZCBNYXJrZWRKU1ZhbHVl
UmVmQXJyYXk6OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJik7CisvL3RlbXBsYXRlIHZvaWQg
TWFya2VkSlNWYWx1ZVJlZkFycmF5Ojp2aXNpdEFnZ3JlZ2F0ZShWZXJpZmllclNsb3RWaXNpdG9y
Jik7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQ
SS9NYXJrZWRKU1ZhbHVlUmVmQXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvQVBJL01hcmtlZEpTVmFsdWVSZWZBcnJheS5oCShyZXZpc2lvbiAyNzIxOTIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL01hcmtlZEpTVmFsdWVSZWZBcnJheS5oCSh3b3JraW5n
IGNvcHkpCkBAIC02Miw3ICs2Miw4IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1faW5saW5l
QnVmZmVyOwogICAgIH0KIAotICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImKTsK
Ky8vICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgdmlzaXRBZ2dyZWdhdGUoVmlz
aXRvciYpOworICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUxKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsK
IAogcHJpdmF0ZToKICAgICB1bnNpZ25lZCBtX3NpemU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvQVBJL2dsaWIvSlNBUElXcmFwcGVyR2xvYmFsT2JqZWN0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNBUElXcmFwcGVyR2xvYmFsT2JqZWN0
LmNwcAkocmV2aXNpb24gMjcyMTkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGli
L0pTQVBJV3JhcHBlckdsb2JhbE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU5LDYgKzU5
LDggQEAgc3RhdGljIEpTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJT04oY29uc3RydQogc3RhdGljIEpT
Q19ERUNMQVJFX0NVU1RPTV9HRVRURVIoY2FsbGJhY2tHZXR0ZXJKU0FQSVdyYXBwZXJHbG9iYWxP
YmplY3RDYWxsYmFja09iamVjdCk7CiBzdGF0aWMgSlNDX0RFQ0xBUkVfQ1VTVE9NX0dFVFRFUihz
dGF0aWNGdW5jdGlvbkdldHRlckpTQVBJV3JhcHBlckdsb2JhbE9iamVjdENhbGxiYWNrT2JqZWN0
KTsKIAorREVGSU5FX1RFTVBMQVRFX1ZJU0lUX0NISUxEUkVOKHRlbXBsYXRlPD4sIEpTQ2FsbGJh
Y2tPYmplY3Q8SlNBUElXcmFwcGVyR2xvYmFsT2JqZWN0Pik7CisKIHRlbXBsYXRlIDw+IGNvbnN0
IENsYXNzSW5mbyBKU0NhbGxiYWNrT2JqZWN0PEpTQVBJV3JhcHBlckdsb2JhbE9iamVjdD46OnNf
aW5mbyA9IHsgIkpTQVBJV3JhcHBlckdsb2JhbE9iamVjdCIsICZCYXNlOjpzX2luZm8sIG51bGxw
dHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNDYWxsYmFja09iamVjdCkgfTsKIHRl
bXBsYXRlPD4gY29uc3QgYm9vbCBKU0NhbGxiYWNrT2JqZWN0PEpTQVBJV3JhcHBlckdsb2JhbE9i
amVjdD46Om5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOwogCkBAIC0xNDQsOSArMTQ2LDkgQEAgdm9p
ZCBKU0FQSVdyYXBwZXJHbG9iYWxPYmplY3Q6OmZpbmlzaENyZQogICAgIFdlYWtTZXQ6OmFsbG9j
YXRlKHRoaXMsIGpzQVBJV3JhcHBlckdsb2JhbE9iamVjdEhhbmRsZU93bmVyKCksIDApOyAvLyBC
YWxhbmNlZCBpbiBKU0FQSVdyYXBwZXJHbG9iYWxPYmplY3RIYW5kbGVPd25lcjo6ZmluYWxpemUu
CiB9CiAKLXZvaWQgSlNBUElXcmFwcGVyR2xvYmFsT2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2Vs
bCogY2VsbCwgSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKLXsKLSAgICBCYXNlOjp2aXNpdENo
aWxkcmVuKGNlbGwsIHZpc2l0b3IpOwotfQorLy92b2lkIEpTQVBJV3JhcHBlckdsb2JhbE9iamVj
dDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3Ip
CisvL3sKKy8vICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4oY2VsbCwgdmlzaXRvcik7CisvL30KIAog
fSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIv
SlNBUElXcmFwcGVyR2xvYmFsT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL0FQSS9nbGliL0pTQVBJV3JhcHBlckdsb2JhbE9iamVjdC5oCShyZXZpc2lvbiAyNzIx
OTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNBUElXcmFwcGVyR2xvYmFs
T2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDcgKzM5LDcgQEAgcHVibGljOgogICAgIHN0
YXRpYyB2b2lkIHN1YnNwYWNlRm9yKFZNJikgeyBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OyB9CiAKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7Ci0gICAgc3RhdGljIHZvaWQgdmlz
aXRDaGlsZHJlbihKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJik7CisgICAgLy8gc3RhdGljIHZv
aWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJik7CiAKICAgICBKU0NH
TGliV3JhcHBlck9iamVjdCogd3JhcHBlZE9iamVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fd3JhcHBl
ZE9iamVjdDsgfQogICAgIHZvaWQgc2V0V3JhcHBlZE9iamVjdChKU0NHTGliV3JhcHBlck9iamVj
dCogd3JhcHBlZE9iamVjdCkgeyBtX3dyYXBwZWRPYmplY3QgPSB3cmFwcGVkT2JqZWN0OyB9Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNBUElXcmFwcGVyT2JqZWN0R0xp
Yi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQVBJ
V3JhcHBlck9iamVjdEdMaWIuY3BwCShyZXZpc2lvbiAyNzIxOTIpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvQVBJL2dsaWIvSlNBUElXcmFwcGVyT2JqZWN0R0xpYi5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJKU0FQ
SVdyYXBwZXJPYmplY3QuaCIKIAorI2luY2x1ZGUgIkFic3RyYWN0U2xvdFZpc2l0b3IuaCIKICNp
bmNsdWRlICJKU0NHTGliV3JhcHBlck9iamVjdC5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIK
ICNpbmNsdWRlICJKU0NhbGxiYWNrT2JqZWN0LmgiCkBAIC0zNiw3ICszNyw4IEBACiBjbGFzcyBK
U0FQSVdyYXBwZXJPYmplY3RIYW5kbGVPd25lciBmaW5hbCA6IHB1YmxpYyBKU0M6OldlYWtIYW5k
bGVPd25lciB7CiBwdWJsaWM6CiAgICAgdm9pZCBmaW5hbGl6ZShKU0M6OkhhbmRsZTxKU0M6OlVu
a25vd24+LCB2b2lkKikgZmluYWw7Ci0gICAgYm9vbCBpc1JlYWNoYWJsZUZyb21PcGFxdWVSb290
cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0LCBKU0M6OlNsb3RWaXNp
dG9yJiwgY29uc3QgY2hhcioqKSBmaW5hbDsKKy8vICAgICBib29sIGlzUmVhY2hhYmxlRnJvbU9w
YXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6
U2xvdFZpc2l0b3ImLCBjb25zdCBjaGFyKiopIGZpbmFsOworICAgIGJvb2wgaXNSZWFjaGFibGVG
cm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCwg
SlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiwgY29uc3QgY2hhcioqKSBmaW5hbDsKIH07CiAKIHN0
YXRpYyBKU0FQSVdyYXBwZXJPYmplY3RIYW5kbGVPd25lcioganNBUElXcmFwcGVyT2JqZWN0SGFu
ZGxlT3duZXIoKQpAQCAtNTUsNyArNTcsOCBAQCB2b2lkIEpTQVBJV3JhcHBlck9iamVjdEhhbmRs
ZU93bmVyOjpmaW5hCiAgICAgSlNDOjpXZWFrU2V0OjpkZWFsbG9jYXRlKEpTQzo6V2Vha0ltcGw6
OmFzV2Vha0ltcGwoaGFuZGxlLnNsb3QoKSkpOwogfQogCi1ib29sIEpTQVBJV3JhcHBlck9iamVj
dEhhbmRsZU93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6
OlVua25vd24+IGhhbmRsZSwgdm9pZCosIEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0
IGNoYXIqKikKKy8vIGJvb2wgSlNBUElXcmFwcGVyT2JqZWN0SGFuZGxlT3duZXI6OmlzUmVhY2hh
YmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lk
KiwgSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqKQorYm9vbCBKU0FQSVdy
YXBwZXJPYmplY3RIYW5kbGVPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpI
YW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0
b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKikKIHsKICAgICBKU0M6OkpTQVBJV3JhcHBlck9iamVj
dCogd3JhcHBlck9iamVjdCA9IEpTQzo6anNDYXN0PEpTQzo6SlNBUElXcmFwcGVyT2JqZWN0Kj4o
aGFuZGxlLmdldCgpLmFzQ2VsbCgpKTsKICAgICAvLyBXZSB1c2UgdGhlIEpTR2xvYmFsT2JqZWN0
IHdoZW4gcHJvY2Vzc2luZyB3ZWFrIGhhbmRsZXMgdG8gcHJldmVudCB0aGUgc2l0dWF0aW9uIHdo
ZXJlIHVzaW5nCkBAIC03Miw2ICs3NSw4IEBAIHN0YXRpYyBKU0NfREVDTEFSRV9IT1NUX0ZVTkNU
SU9OKGNvbnN0cnUKIHN0YXRpYyBKU0NfREVDTEFSRV9DVVNUT01fR0VUVEVSKGNhbGxiYWNrR2V0
dGVySlNBUElXcmFwcGVyT2JqZWN0Q2FsbGJhY2tPYmplY3QpOwogc3RhdGljIEpTQ19ERUNMQVJF
X0NVU1RPTV9HRVRURVIoc3RhdGljRnVuY3Rpb25HZXR0ZXJKU0FQSVdyYXBwZXJPYmplY3RDYWxs
YmFja09iamVjdCk7CiAKK0RFRklORV9URU1QTEFURV9WSVNJVF9DSElMRFJFTih0ZW1wbGF0ZTw+
LCBKU0NhbGxiYWNrT2JqZWN0PEpTQVBJV3JhcHBlck9iamVjdD4pOworCiB0ZW1wbGF0ZSA8PiBj
b25zdCBDbGFzc0luZm8gSlNDYWxsYmFja09iamVjdDxKU0FQSVdyYXBwZXJPYmplY3Q+OjpzX2lu
Zm8gPSB7ICJKU0FQSVdyYXBwZXJPYmplY3QiLCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBudWxs
cHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTQ2FsbGJhY2tPYmplY3QpIH07CiB0ZW1wbGF0ZTw+
IGNvbnN0IGJvb2wgSlNDYWxsYmFja09iamVjdDxKU0FQSVdyYXBwZXJPYmplY3Q+OjpuZWVkc0Rl
c3RydWN0aW9uID0gdHJ1ZTsKIApAQCAtMTU1LDkgKzE2MCwxMiBAQCB2b2lkIEpTQVBJV3JhcHBl
ck9iamVjdDo6c2V0V3JhcHBlZE9iamVjCiAgICAgbV93cmFwcGVkT2JqZWN0ID0gd3JhcHBlZE9i
amVjdDsKIH0KIAotdm9pZCBKU0FQSVdyYXBwZXJPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiBjZWxsLCBKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlz
aXRvcj4KK3ZvaWQgSlNBUElXcmFwcGVyT2JqZWN0Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwq
IGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbihjZWxs
LCB2aXNpdG9yKTsKIH0KIAorREVGSU5FX0VYUE9SVF9WSVNJVF9DSElMRFJFTihKU0FQSVdyYXBw
ZXJPYmplY3QpOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCShyZXZpc2lvbiAyNzIxOTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAt
MTkxMSw2ICsxOTExLDcgQEAKIAkJRTNGRjc1MzMxRDlDRUExODAwQzdFMTZEIC8qIERPTUpJVEdl
dHRlclNldHRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRTNGRjc1MkYxRDlDRUExMjAwQzdFMTZEIC8qIERPTUpJVEdldHRlclNldHRlci5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUU0OURDMTZDMTJF
RjI5NEUwMDE4NEExRiAvKiBTb3VyY2VQcm92aWRlckNhY2hlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDlEQzE1MTEyRUYyNzIyMDAxODRBMUYgLyog
U291cmNlUHJvdmlkZXJDYWNoZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCUU0OURDMTZEMTJFRjI5NTMwMDE4NEExRiAvKiBTb3VyY2VQcm92aWRl
ckNhY2hlSXRlbS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRTQ5REMxNDkxMkVGMjYxQTAwMTg0QTFGIC8qIFNvdXJjZVByb3ZpZGVyQ2FjaGVJdGVtLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJRkUwNDE1
NTMyNTJFQzA3MzAwOTFFQjVEIC8qIFNsb3RWaXNpdG9yTWFjcm9zLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTA0MTU1MjI1MkVDMDczMDA5MUVCNUQg
LyogU2xvdFZpc2l0b3JNYWNyb3MuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQlGRTA1RkFGRDFGRTRDRURBMDAwOTMyMzAgLyogRGVwcmVjYXRlZElu
c3BlY3RvclZhbHVlcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA5OTJENkExMTFGQkQ0OTFEMDAwMjQ1RjQgLyogRGVwcmVjYXRlZEluc3BlY3RvclZh
bHVlcy5jcHAgKi87IH07CiAJCUZFMDg2QkNBMjEyM0RFRkIwMDNGMjkyOSAvKiBFbnRyeUZyYW1l
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTA4NkJD
OTIxMjNERUZBMDAzRjI5MjkgLyogRW50cnlGcmFtZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUZFMEQ0QTA2MUFCOEREMEEwMDJGNTRCRiAvKiBF
eGVjdXRpb25UaW1lTGltaXRUZXN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEZFMEQ0QTA0MUFCOEREMEEwMDJGNTRCRiAvKiBFeGVjdXRpb25UaW1l
TGltaXRUZXN0LmNwcCAqLzsgfTsKQEAgLTE5MzMsNiArMTkzNCw3IEBACiAJCUZFMUUyQzNGMjI0
MERENTgwMEY2QjcyOSAvKiBNYWNyb0Fzc2VtYmxlckFSTTY0RS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUxRTJDM0UyMjQwRDMwQjAwRjZCNzI5IC8q
IE1hY3JvQXNzZW1ibGVyQVJNNjRFLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJRkUxRTJDNDAyMjQwREQ2MjAwRjZCNzI5IC8qIEFSTTY0RUFzc2Vt
Ymxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUx
RTJDM0QyMjQwRDJGNjAwRjZCNzI5IC8qIEFSTTY0RUFzc2VtYmxlci5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUZFMjBDRTlFMTVGMDRBOTUwMERG
MzQzMCAvKiBMTEludENMb29wLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBGRTIwQ0U5QzE1RjA0QTk1MDBERjM0MzAgLyogTExJbnRDTG9vcC5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUZFMjg3RDAyMjUy
RkIyRTgwMEQ3MjNGOSAvKiBWZXJpZmllclNsb3RWaXNpdG9yLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTI4N0QwMTI1MkZCMkU4MDBENzIzRjkgLyog
VmVyaWZpZXJTbG90VmlzaXRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCUZFMkE4NzYwMUYwMjM4MTYwMEVCMzFCMiAvKiBNaW5pbXVtUmVzZXJ2
ZWRab25lU2l6ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRkUyQTg3NUYxRjAyMzgxNjAwRUIzMUIyIC8qIE1pbmltdW1SZXNlcnZlZFpvbmVTaXplLmgg
Ki87IH07CiAJCUZFMzAyMkQzMUUzRDczQTUwMEJBQzQ5MyAvKiBTaWdpbGxDcmFzaEFuYWx5emVy
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTMwMjJE
MTFFM0Q3Mzk2MDBCQUM0OTMgLyogU2lnaWxsQ3Jhc2hBbmFseXplci5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUZFMzAyMkQ3MUU0Mjg1NzMwMEJB
QzQ5MyAvKiBWTUluc3BlY3Rvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRkUzMDIyRDUxRTQyODU2NzAwQkFDNDkzIC8qIFZNSW5zcGVjdG9yLmggKi87
IH07CkBAIC0xOTcwLDYgKzE5NzIsOCBAQAogCQlGRTgwQzE5NzFENzc1Q0REMDA4NTEwQzAgLyog
Q2F0Y2hTY29wZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRkU4MEMxOTYxRDc3NUIyNzAwODUxMEMwIC8qIENhdGNoU2NvcGUuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlGRThERTU0QjIzQUMxREFEMDA1
QzkxNDIgLyogQ2FjaGVhYmxlSWRlbnRpZmllci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRkU4REU1NEEyM0FDMURBRDAwNUM5MTQyIC8qIENhY2hlYWJs
ZUlkZW50aWZpZXIuaCAqLzsgfTsKIAkJRkU4REU1NEQyM0FDMUU4NjAwNUM5MTQyIC8qIENhY2hl
YWJsZUlkZW50aWZpZXJJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBGRThERTU0QzIzQUMxRTg2MDA1QzkxNDIgLyogQ2FjaGVhYmxlSWRlbnRp
ZmllcklubGluZXMuaCAqLzsgfTsKKwkJRkU5MTJCNEYyNTMxMTkzMzAwRkFCRERGIC8qIEFic3Ry
YWN0U2xvdFZpc2l0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEZFOTEyQjRFMjUzMTE5MzMwMEZBQkRERiAvKiBBYnN0cmFjdFNsb3RWaXNpdG9yLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJRkU5MTJC
NTEyNTMxMUFEMTAwRkFCRERGIC8qIEFic3RyYWN0U2xvdFZpc2l0b3JJbmxpbmVzLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTkxMkI1MDI1MzExQUQx
MDBGQUJEREYgLyogQWJzdHJhY3RTbG90VmlzaXRvcklubGluZXMuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlGRTk5QjI0OTFDMjRDM0QzMDBDODIx
NTkgLyogSklUTmVnR2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBGRTk5QjI0ODFDMjRCNkQzMDBDODIxNTkgLyogSklUTmVnR2VuZXJhdG9y
LmggKi87IH07CiAJCUZFQTA4NjIwMTgyQjdBMDQwMEY2RDg1MSAvKiBCcmVha3BvaW50LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRUEwODYxRTE4MkI3
QTA0MDBGNkQ4NTEgLyogQnJlYWtwb2ludC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCUZFQTA4NjIxMTgyQjdBMDQwMEY2RDg1MSAvKiBEZWJ1Z2dl
clByaW1pdGl2ZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEZFQTA4NjFGMTgyQjdBMDQwMEY2RDg1MSAvKiBEZWJ1Z2dlclByaW1pdGl2ZXMuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtNTIwNCw2ICs1
MjA4LDcgQEAKIAkJRjY5MkE4ODcwMjU1NTk3RDAxRkY2MEY3IC8qIEpTQ0pTVmFsdWUuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0
aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlND
SlNWYWx1ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgfTsKIAkJ
RjczOTI2OTE4REM2NDMzMEFGQ0RGMEQ3IC8qIEpTU291cmNlQ29kZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1NvdXJjZUNvZGUuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlGRTAwMjYyMjIzRjNBRjMzMDAzQTM1OEYgLyogV2ViQXNzZW1ibHku
YXNtICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5hc20uYXNtOyBuYW1lID0gV2ViQXNzZW1ibHkuYXNtOyBwYXRoID0gbGxpbnQvV2Vi
QXNzZW1ibHkuYXNtOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRTA0MTU1MjI1MkVD
MDczMDA5MUVCNUQgLyogU2xvdFZpc2l0b3JNYWNyb3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gU2xvdFZpc2l0b3JNYWNyb3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJRkUwODZCQzkyMTIzREVGQTAwM0YyOTI5IC8qIEVudHJ5RnJhbWUuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRW50cnlGcmFtZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlGRTBENEEwNDFBQjhERDBBMDAyRjU0QkYgLyogRXhlY3V0aW9uVGltZUxpbWl0
VGVzdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBFeGVjdXRpb25U
aW1lTGltaXRUZXN0LmNwcDsgcGF0aCA9IEFQSS90ZXN0cy9FeGVjdXRpb25UaW1lTGltaXRUZXN0
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkUwRDRBMDUxQUI4REQwQTAwMkY1
NEJGIC8qIEV4ZWN1dGlvblRpbWVMaW1pdFRlc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gRXhlY3V0aW9uVGltZUxpbWl0VGVzdC5oOyBwYXRoID0gQVBJL3Rlc3RzL0V4ZWN1
dGlvblRpbWVMaW1pdFRlc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTUyMTcs
NiArNTIyMiw3IEBACiAJCUZFMTIyMDI1MUJFN0Y1NjQwMDM5RTZGMiAvKiBKSVRBZGRHZW5lcmF0
b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSklUQWRkR2VuZXJh
dG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkUxMjIwMjYxQkU3RjU2NDAw
MzlFNkYyIC8qIEpJVEFkZEdlbmVyYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBKSVRBZGRHZW5lcmF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkUx
NDA5MDYyMDU2RjNGRTAwQ0ZFMzE4IC8qIE5hdGl2ZUZ1bmN0aW9uLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IE5hdGl2ZUZ1bmN0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUZFMTc4Q0MzMjU1RjIwNTUwMEZGRDY3NyAvKiBBYnN0cmFjdFNsb3RWaXNpdG9y
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEFic3RyYWN0U2xvdFZp
c2l0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTE4NzlGRjFCRkJDNzND
MDAzOEJCQ0EgLyogSklUTXVsR2VuZXJhdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEpJVE11bEdlbmVyYXRvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUZFMTg3QTAwMUJGQkM3M0MwMDM4QkJDQSAvKiBKSVRNdWxHZW5lcmF0b3IuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSklUTXVsR2VuZXJhdG9yLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFMTg3QTBBMUMwMjI5MjMwMDM4QkJDQSAvKiBKSVREaXZH
ZW5lcmF0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSklURGl2
R2VuZXJhdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTUyMzgsNyArNTI0
NCw5IEBACiAJCUZFMUUyQzNFMjI0MEQzMEIwMEY2QjcyOSAvKiBNYWNyb0Fzc2VtYmxlckFSTTY0
RS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNYWNyb0Fzc2VtYmxlckFSTTY0
RS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTIwQ0U5QjE1RjA0QTk1MDBERjM0
MzAgLyogTExJbnRDTG9vcC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUg
PSBMTEludENMb29wLmNwcDsgcGF0aCA9IGxsaW50L0xMSW50Q0xvb3AuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlGRTIwQ0U5QzE1RjA0QTk1MDBERjM0MzAgLyogTExJbnRDTG9v
cC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBMTEludENMb29wLmg7IHBhdGgg
PSBsbGludC9MTEludENMb29wLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZFMjg3
RDAxMjUyRkIyRTgwMEQ3MjNGOSAvKiBWZXJpZmllclNsb3RWaXNpdG9yLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZlcmlmaWVyU2xvdFZpc2l0b3IuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJRkUyQTg3NUYxRjAyMzgxNjAwRUIzMUIyIC8qIE1pbmltdW1SZXNl
cnZlZFpvbmVTaXplLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1pbmltdW1SZXNlcnZlZFpvbmVTaXplLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZFMkJENjZFMjVDMERDODIwMDk5OUQzQiAv
KiBWZXJpZmllclNsb3RWaXNpdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFZlcmlmaWVyU2xvdFZpc2l0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlGRTJFNkE3QTFENkVBNUZFMDA2MEY4OTYgLyogVGhyb3dTY29wZS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUaHJvd1Njb3BlLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJRkUzMDIyRDAxRTNENzM5NjAwQkFDNDkzIC8qIFNpZ2lsbENyYXNo
QW5hbHl6ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2lnaWxs
Q3Jhc2hBbmFseXplci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFMzAyMkQx
MUUzRDczOTYwMEJBQzQ5MyAvKiBTaWdpbGxDcmFzaEFuYWx5emVyLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFNpZ2lsbENyYXNoQW5hbHl6ZXIuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTUzMTEsNiArNTMxOSw4IEBACiAJCUZFOERFNTRDMjNBQzFFODYwMDVD
OTE0MiAvKiBDYWNoZWFibGVJZGVudGlmaWVySW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBDYWNoZWFibGVJZGVudGlmaWVySW5saW5lcy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlGRThERTU0RTIzQUMzQThFMDA1QzkxNDIgLyogQ2FjaGVhYmxlSWRl
bnRpZmllci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDYWNoZWFibGVJZGVudGlmaWVyLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkU5MEJCM0ExQjdDRjY0RTAwNkIzRjAzIC8q
IFZNSW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBWTUlubGluZXMu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkU5MTJCNEUyNTMxMTkzMzAwRkFCRERG
IC8qIEFic3RyYWN0U2xvdFZpc2l0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gQWJzdHJhY3RTbG90VmlzaXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlG
RTkxMkI1MDI1MzExQUQxMDBGQUJEREYgLyogQWJzdHJhY3RTbG90VmlzaXRvcklubGluZXMuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQWJzdHJhY3RTbG90VmlzaXRvcklubGlu
ZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkU5OEI1QjYxQkI5QUUxMTAwNzNF
N0E2IC8qIEpJVFN1YkdlbmVyYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBKSVRTdWJHZW5lcmF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkU5OUIy
NDcxQzI0QjZEMzAwQzgyMTU5IC8qIEpJVE5lZ0dlbmVyYXRvci5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKSVROZWdHZW5lcmF0b3IuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlGRTk5QjI0ODFDMjRCNkQzMDBDODIxNTkgLyogSklUTmVnR2VuZXJh
dG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpJVE5lZ0dlbmVyYXRvci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNjI2MCw2ICs2MjcwLDkgQEAKIAkJMTQy
RTMxMkExMzRGRjBBNjAwQUZBREI1IC8qIGhlYXAgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsK
IAkJCWNoaWxkcmVuID0gKAorCQkJCUZFMTc4Q0MzMjU1RjIwNTUwMEZGRDY3NyAvKiBBYnN0cmFj
dFNsb3RWaXNpdG9yLmNwcCAqLywKKwkJCQlGRTkxMkI0RTI1MzExOTMzMDBGQUJEREYgLyogQWJz
dHJhY3RTbG90VmlzaXRvci5oICovLAorCQkJCUZFOTEyQjUwMjUzMTFBRDEwMEZBQkRERiAvKiBB
YnN0cmFjdFNsb3RWaXNpdG9ySW5saW5lcy5oICovLAogCQkJCTBGRUMzQzUwMUYzM0E0MTYwMEY1
OUI2QyAvKiBBbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmNwcCAqLywKIAkJCQkwRkVDM0M1MTFGMzNB
NDE2MDBGNTlCNkMgLyogQWxpZ25lZE1lbW9yeUFsbG9jYXRvci5oICovLAogCQkJCTBGQTc2MjBB
MURCOTU5RjYwMEI3QTJGRCAvKiBBbGxvY2F0aW5nU2NvcGUuaCAqLywKQEAgLTY0MTYsNiArNjQy
OSw3IEBACiAJCQkJQzIyNTQ5NDIxNUY3REJBQTAwNjVFODk4IC8qIFNsb3RWaXNpdG9yLmNwcCAq
LywKIAkJCQkxNEJBNzhGMDEzQUFCODhGMDA1QjdDMkMgLyogU2xvdFZpc2l0b3IuaCAqLywKIAkJ
CQkwRkNCNDA4NTE1QzBBM0MzMDA0ODkzMkIgLyogU2xvdFZpc2l0b3JJbmxpbmVzLmggKi8sCisJ
CQkJRkUwNDE1NTIyNTJFQzA3MzAwOTFFQjVEIC8qIFNsb3RWaXNpdG9yTWFjcm9zLmggKi8sCiAJ
CQkJMEZERTg3RkExREZFNkU1MDAwNjRDMzkwIC8qIFNwYWNlVGltZU11dGF0b3JTY2hlZHVsZXIu
Y3BwICovLAogCQkJCTBGREU4N0ZCMURGRTZFNTAwMDY0QzM5MCAvKiBTcGFjZVRpbWVNdXRhdG9y
U2NoZWR1bGVyLmggKi8sCiAJCQkJMEY0RjgyODkxRTMxQjk3MTAwNzUxODRDIC8qIFN0b2NoYXN0
aWNTcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyLmNwcCAqLywKQEAgLTY0MzMsNiArNjQ0Nyw4IEBA
CiAJCQkJMEYxRkIzOEExRTE3M0E2MjAwQTlCRTUwIC8qIFN5bmNocm9ub3VzU3RvcFRoZVdvcmxk
TXV0YXRvclNjaGVkdWxlci5jcHAgKi8sCiAJCQkJMEYxRkIzOEIxRTE3M0E2MjAwQTlCRTUwIC8q
IFN5bmNocm9ub3VzU3RvcFRoZVdvcmxkTXV0YXRvclNjaGVkdWxlci5oICovLAogCQkJCTE0MTQ0
OENDMTNBMTc4MzcwMEY1QkExQSAvKiBUaW55Qmxvb21GaWx0ZXIuaCAqLywKKwkJCQlGRTJCRDY2
RTI1QzBEQzgyMDA5OTlEM0IgLyogVmVyaWZpZXJTbG90VmlzaXRvci5jcHAgKi8sCisJCQkJRkUy
ODdEMDEyNTJGQjJFODAwRDcyM0Y5IC8qIFZlcmlmaWVyU2xvdFZpc2l0b3IuaCAqLywKIAkJCQkw
RjREOEM3MjFGQzdBOTczMDAxRDMyQUMgLyogVmlzaXRDb3VudGVyLmggKi8sCiAJCQkJMEY5NTJB
OUYxREY3ODYwNzAwRTA2RkJEIC8qIFZpc2l0UmFjZUtleS5jcHAgKi8sCiAJCQkJMEY5NTJBQTAx
REY3ODYwNzAwRTA2RkJEIC8qIFZpc2l0UmFjZUtleS5oICovLApAQCAtOTI2Myw2ICs5Mjc5LDcg
QEAKIAkJCQkxNDdCODNBQzBFNkRCOEM5MDA0Nzc1QTQgLyogQmF0Y2hlZFRyYW5zaXRpb25PcHRp
bWl6ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUUzNUU4OUZEMjVDNTBGODcwMDcxRUUxRSAvKiBC
aWdJbnQ2NEFycmF5LmggaW4gSGVhZGVycyAqLywKIAkJCQk4Njk3NkU1RjFGQTNFOEJDMDBFN0M0
RTEgLyogQmlnSW50Q29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJCUZFMDQxNTUzMjUy
RUMwNzMwMDkxRUI1RCAvKiBTbG90VmlzaXRvck1hY3Jvcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
ODY2NzM5RDIxM0JGREU3MTAwMjNEODdDIC8qIEJpZ0ludGVnZXIuaCBpbiBIZWFkZXJzICovLAog
CQkJCTg2MTgxNjc3MUZCNzkyNDIwMEVDQzRFQyAvKiBCaWdJbnRPYmplY3QuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTg2OTc2RTVFMUZBM0U4QjYwMEU3QzRFMSAvKiBCaWdJbnRQcm90b3R5cGUuaCBp
biBIZWFkZXJzICovLApAQCAtOTU0MSw2ICs5NTU4LDcgQEAKIAkJCQkwRkQ4MkU1NzE0MURBRjEw
MDAxNzlDOTQgLyogREZHT1NSRW50cnkuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRDhBMzI2MTdE
NTFGNTcwMENBMkM0MCAvKiBERkdPU1JFbnRyeXBvaW50Q3JlYXRpb25QaGFzZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEZDMDk3NkExNDY4QTZGNzAwQ0YyNDQyIC8qIERGR09TUkV4aXQuaCBpbiBI
ZWFkZXJzICovLAorCQkJCUZFOTEyQjRGMjUzMTE5MzMwMEZBQkRERiAvKiBBYnN0cmFjdFNsb3RW
aXNpdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjIzNUJFQzE3MTc4RTczMDA2OTBDN0YgLyog
REZHT1NSRXhpdEJhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRkI5MjFDMTZEMDJGMTEwMDU1
QTVEQiAvKiBERkdPU1JFeGl0Q29tcGlsYXRpb25JbmZvLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RjcwMjVBQTE3MTRCMEZDMDAzODJDMEUgLyogREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmggaW4g
SGVhZGVycyAqLywKQEAgLTk4MjYsNiArOTg0NCw3IEBACiAJCQkJQTUxM0U1QkUxODVCRkFDQzAw
N0U5NUFEIC8qIEluamVjdGVkU2NyaXB0SG9zdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTUxM0U1
Q0IxODVGOTYyNDAwN0U5NUFEIC8qIEluamVjdGVkU2NyaXB0TWFuYWdlci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQTU4NDBFMjExODdCN0I4NjAwODQzQjEwIC8qIEluamVjdGVkU2NyaXB0TW9kdWxl
LmggaW4gSGVhZGVycyAqLywKKwkJCQlGRTI4N0QwMjI1MkZCMkU4MDBENzIzRjkgLyogVmVyaWZp
ZXJTbG90VmlzaXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTUxM0U1QzcxODVGOTQ0NjAwN0U5
NUFEIC8qIEluamVjdGVkU2NyaXB0U291cmNlLmggaW4gSGVhZGVycyAqLywKIAkJCQk5OTU5RTkz
MjFCRDE4Mjc5MDAxQUE0MTMgLyogaW5saW5lLWFuZC1taW5pZnktc3R5bGVzaGVldHMtYW5kLXNj
cmlwdHMucHkgaW4gSGVhZGVycyAqLywKIAkJCQk3OTA1QkI2OTFEMTIwNTBFMDAxOUZFNTcgLyog
SW5saW5lQWNjZXNzLmggaW4gSGVhZGVycyAqLywKQEAgLTEwMTMxLDYgKzEwMTUwLDcgQEAKIAkJ
CQk3OTVBQzYxODIwQTIzNTVFMDA1MkM3NkMgLyogSlNWaXJ0dWFsTWFjaGluZVByaXZhdGUuaCBp
biBIZWFkZXJzICovLAogCQkJCUE3Q0EzQUU4MTdEQTQxQUUwMDY1MzhBRiAvKiBKU1dlYWtNYXAu
aCBpbiBIZWFkZXJzICovLAogCQkJCUE3NDgyRTkzMTE2QTdDQUQwMDNCMDcxMiAvKiBKU1dlYWtP
YmplY3RNYXBSZWZJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCisJCQkJRkU5MTJCNTEyNTMxMUFE
MTAwRkFCRERGIC8qIEFic3RyYWN0U2xvdFZpc2l0b3JJbmxpbmVzLmggaW4gSGVhZGVycyAqLywK
IAkJCQlBNzQ4MkI5MzExNjcxMTQ3MDAzQjA3MTIgLyogSlNXZWFrT2JqZWN0TWFwUmVmUHJpdmF0
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTM5QkZCQjAyMkFEM0NEQzAwMjNGNEMwIC8qIEpTV2Vh
a09iamVjdFJlZi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYwQjI4NkIxRUI4RTZDRjAwMEVCNUQy
IC8qIEpTV2Vha1ByaXZhdGUuaCBpbiBIZWFkZXJzICovLApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL1NjcmlwdHMvd2tidWlsdGlucy9idWlsdGluc19nZW5lcmF0ZV9pbnRlcm5hbHNfd3Jh
cHBlcl9oZWFkZXIucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL1Njcmlw
dHMvd2tidWlsdGlucy9idWlsdGluc19nZW5lcmF0ZV9pbnRlcm5hbHNfd3JhcHBlcl9oZWFkZXIu
cHkJKHJldmlzaW9uIDI3MjE5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL3dr
YnVpbHRpbnMvYnVpbHRpbnNfZ2VuZXJhdGVfaW50ZXJuYWxzX3dyYXBwZXJfaGVhZGVyLnB5CSh3
b3JraW5nIGNvcHkpCkBAIC05Myw3ICs5Myw3IEBAIGNsYXNzIEJ1aWx0aW5zSW50ZXJuYWxzV3Jh
cHBlckhlYWRlckdlbmUKIAogICAgIGRlZiBnZW5lcmF0ZV9tZXRob2RzKHNlbGYpOgogICAgICAg
ICByZXR1cm4gIiIiCi0gICAgdm9pZCB2aXNpdChKU0M6OlNsb3RWaXNpdG9yJik7CisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCB2aXNpdChWaXNpdG9yJik7CiAgICAgdm9pZCBp
bml0aWFsaXplKEpTRE9NR2xvYmFsT2JqZWN0Jik7CiAiIiIKIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL1NjcmlwdHMvd2tidWlsdGlucy9idWlsdGluc19nZW5lcmF0ZV9pbnRlcm5hbHNf
d3JhcHBlcl9pbXBsZW1lbnRhdGlvbi5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvU2NyaXB0cy93a2J1aWx0aW5zL2J1aWx0aW5zX2dlbmVyYXRlX2ludGVybmFsc193cmFw
cGVyX2ltcGxlbWVudGF0aW9uLnB5CShyZXZpc2lvbiAyNzIxOTIpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvU2NyaXB0cy93a2J1aWx0aW5zL2J1aWx0aW5zX2dlbmVyYXRlX2ludGVybmFsc193
cmFwcGVyX2ltcGxlbWVudGF0aW9uLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0xMjAsMTMgKzEyMCwx
NiBAQCBjbGFzcyBCdWlsdGluc0ludGVybmFsc1dyYXBwZXJJbXBsZW1lbnRhCiAgICAgICAgIHJl
dHVybiAnXG4nLmpvaW4obGluZXMpCiAKICAgICBkZWYgZ2VuZXJhdGVfdmlzaXRfbWV0aG9kKHNl
bGYpOgotICAgICAgICBsaW5lcyA9IFsidm9pZCBKU0J1aWx0aW5JbnRlcm5hbEZ1bmN0aW9uczo6
dmlzaXQoSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikiLAorICAgICAgICBsaW5lcyA9IFsidGVt
cGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4iLAorICAgICAgICAgICAgICAgICAidm9pZCBKU0J1aWx0
aW5JbnRlcm5hbEZ1bmN0aW9uczo6dmlzaXQoVmlzaXRvciYgdmlzaXRvcikiLAogICAgICAgICAg
ICAgICAgICAieyJdCiAgICAgICAgIGZvciBvYmplY3QgaW4gc2VsZi5pbnRlcm5hbHM6CiAgICAg
ICAgICAgICB2aXNpdCA9ICIgICAgJXMudmlzaXQodmlzaXRvcik7IiAlIHNlbGYubWVtYmVyX25h
bWUob2JqZWN0KQogICAgICAgICAgICAgbGluZXMuYXBwZW5kKEJ1aWx0aW5zR2VuZXJhdG9yLndy
YXBfd2l0aF9ndWFyZChvYmplY3QuYW5ub3RhdGlvbnMuZ2V0KCdjb25kaXRpb25hbCcpLCB2aXNp
dCkpCiAgICAgICAgIGxpbmVzLmFwcGVuZCgiICAgIFVOVVNFRF9QQVJBTSh2aXNpdG9yKTsiKQog
ICAgICAgICBsaW5lcy5hcHBlbmQoIn1cbiIpCisgICAgICAgIGxpbmVzLmFwcGVuZCgidGVtcGxh
dGUgdm9pZCBKU0J1aWx0aW5JbnRlcm5hbEZ1bmN0aW9uczo6dmlzaXQoQWJzdHJhY3RTbG90Vmlz
aXRvciYpOyIpCisgICAgICAgIGxpbmVzLmFwcGVuZCgidGVtcGxhdGUgdm9pZCBKU0J1aWx0aW5J
bnRlcm5hbEZ1bmN0aW9uczo6dmlzaXQoU2xvdFZpc2l0b3ImKTtcbiIpCiAgICAgICAgIHJldHVy
biAnXG4nLmpvaW4obGluZXMpCiAKICAgICBkZWYgX2dlbmVyYXRlX2luaXRpYWxpemVfc3RhdGlj
X2dsb2JhbHMoc2VsZik6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy93a2J1
aWx0aW5zL2J1aWx0aW5zX3RlbXBsYXRlcy5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvU2NyaXB0cy93a2J1aWx0aW5zL2J1aWx0aW5zX3RlbXBsYXRlcy5weQkocmV2aXNp
b24gMjcyMTkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvd2tidWlsdGlucy9i
dWlsdGluc190ZW1wbGF0ZXMucHkJKHdvcmtpbmcgY29weSkKQEAgLTE4OCw3ICsxODgsOCBAQCBw
dWJsaWM6CiAgICAgZXhwbGljaXQgJHtvYmplY3ROYW1lfUJ1aWx0aW5GdW5jdGlvbnMoSlNDOjpW
TSYgdm0pIDogbV92bSh2bSkgeyB9CiAKICAgICB2b2lkIGluaXQoSlNDOjpKU0dsb2JhbE9iamVj
dCYpOwotICAgIHZvaWQgdmlzaXQoSlNDOjpTbG90VmlzaXRvciYpOworICAgIC8vIG1sYW0gdm9p
ZCB2aXNpdChKU0M6OlNsb3RWaXNpdG9yJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRv
cj4gdm9pZCB2aXNpdChWaXNpdG9yJik7CiAKIHB1YmxpYzoKICAgICBKU0M6OlZNJiBtX3ZtOwpA
QCAtMjA3LDEwICsyMDgsMTUgQEAgaW5saW5lIHZvaWQgJHtvYmplY3ROYW1lfUJ1aWx0aW5GdW5j
dGlvbgogI3VuZGVmIEVYUE9SVF9GVU5DVElPTgogfQogCi1pbmxpbmUgdm9pZCAke29iamVjdE5h
bWV9QnVpbHRpbkZ1bmN0aW9uczo6dmlzaXQoSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3Rl
bXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+CitpbmxpbmUgdm9pZCAke29iamVjdE5hbWV9QnVpbHRp
bkZ1bmN0aW9uczo6dmlzaXQoVmlzaXRvciYgdmlzaXRvcikKIHsKICNkZWZpbmUgVklTSVRfRlVO
Q1RJT04obmFtZSkgdmlzaXRvci5hcHBlbmQobV8jI25hbWUjI0Z1bmN0aW9uKTsKICAgICAke21h
Y3JvUHJlZml4fV9GT1JFQUNIXyR7b2JqZWN0TWFjcm99X0JVSUxUSU5fRlVOQ1RJT05fTkFNRShW
SVNJVF9GVU5DVElPTikKICN1bmRlZiBWSVNJVF9GVU5DVElPTgogfQorCit0ZW1wbGF0ZSB2b2lk
ICR7b2JqZWN0TmFtZX1CdWlsdGluRnVuY3Rpb25zOjp2aXNpdChKU0M6OkFic3RyYWN0U2xvdFZp
c2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgJHtvYmplY3ROYW1lfUJ1aWx0aW5GdW5jdGlvbnM6OnZp
c2l0KEpTQzo6U2xvdFZpc2l0b3ImKTsKKwogIiIiKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmNwcAkocmV2aXNpb24gMjcyMTkyKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC03MzMsMjIgKzczMywyNCBAQCBib29sIEFjY2Vzc0Nhc2U6OnZpc2l0V2VhayhWTSYgdm0p
IGNvbnN0CiAgICAgcmV0dXJuIGlzVmFsaWQ7CiB9CiAKLWJvb2wgQWNjZXNzQ2FzZTo6cHJvcGFn
YXRlVHJhbnNpdGlvbnMoU2xvdFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0Cit0ZW1wbGF0ZTx0eXBl
bmFtZSBWaXNpdG9yPgorYm9vbCBBY2Nlc3NDYXNlOjpwcm9wYWdhdGVUcmFuc2l0aW9ucyhWaXNp
dG9yJiB2aXNpdG9yKSBjb25zdAogewogICAgIGJvb2wgcmVzdWx0ID0gdHJ1ZTsKIAogICAgIGlm
IChtX3N0cnVjdHVyZSkKLSAgICAgICAgcmVzdWx0ICY9IG1fc3RydWN0dXJlLT5tYXJrSWZDaGVh
cCh2aXNpdG9yKTsKKyAgICAgICAgcmVzdWx0ICY9IG1fc3RydWN0dXJlLT5tYXJrSWZDaGVhcDEo
dmlzaXRvcik7CiAKICAgICBpZiAobV9wb2x5UHJvdG9BY2Nlc3NDaGFpbikgewogICAgICAgICBm
b3IgKFN0cnVjdHVyZUlEIHN0cnVjdHVyZUlEIDogbV9wb2x5UHJvdG9BY2Nlc3NDaGFpbi0+Y2hh
aW4oKSkKLSAgICAgICAgICAgIHJlc3VsdCAmPSB2aXNpdG9yLnZtKCkuZ2V0U3RydWN0dXJlKHN0
cnVjdHVyZUlEKS0+bWFya0lmQ2hlYXAodmlzaXRvcik7CisgICAgICAgICAgICByZXN1bHQgJj0g
dmlzaXRvci52bSgpLmdldFN0cnVjdHVyZShzdHJ1Y3R1cmVJRCktPm1hcmtJZkNoZWFwMSh2aXNp
dG9yKTsKICAgICB9CiAKICAgICBzd2l0Y2ggKG1fdHlwZSkgewogICAgIGNhc2UgVHJhbnNpdGlv
bjoKICAgICBjYXNlIERlbGV0ZToKLSAgICAgICAgaWYgKHZpc2l0b3Iudm0oKS5oZWFwLmlzTWFy
a2VkKG1fc3RydWN0dXJlLT5wcmV2aW91c0lEKCkpKQorLy8gICAgICAgIGlmICh2aXNpdG9yLnZt
KCkuaGVhcC5pc01hcmtlZChtX3N0cnVjdHVyZS0+cHJldmlvdXNJRCgpKSkKKyAgICAgICAgaWYg
KHZpc2l0b3IuaXNNYXJrZWQobV9zdHJ1Y3R1cmUtPnByZXZpb3VzSUQoKSkpCiAgICAgICAgICAg
ICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKG1fc3RydWN0dXJlLmdldCgpKTsKICAgICAgICAg
ZWxzZQogICAgICAgICAgICAgcmVzdWx0ID0gZmFsc2U7CkBAIC03NjAsMTEgKzc2MiwxOSBAQCBi
b29sIEFjY2Vzc0Nhc2U6OnByb3BhZ2F0ZVRyYW5zaXRpb25zKFNsCiAgICAgcmV0dXJuIHJlc3Vs
dDsKIH0KIAotdm9pZCBBY2Nlc3NDYXNlOjp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYgdmlz
aXRvcikgY29uc3QKK3RlbXBsYXRlIGJvb2wgQWNjZXNzQ2FzZTo6cHJvcGFnYXRlVHJhbnNpdGlv
bnMoU2xvdFZpc2l0b3ImKSBjb25zdDsKK3RlbXBsYXRlIGJvb2wgQWNjZXNzQ2FzZTo6cHJvcGFn
YXRlVHJhbnNpdGlvbnMoQWJzdHJhY3RTbG90VmlzaXRvciYpIGNvbnN0OworCisvL3RlbXBsYXRl
PHR5cGVuYW1lIFZpc2l0b3I+CisvL3ZvaWQgQWNjZXNzQ2FzZTo6dmlzaXRBZ2dyZWdhdGUoVmlz
aXRvciYgdmlzaXRvcikgY29uc3QKK3ZvaWQgQWNjZXNzQ2FzZTo6dmlzaXRBZ2dyZWdhdGUxKEFi
c3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0CiB7Ci0gICAgbV9pZGVudGlmaWVyLnZp
c2l0QWdncmVnYXRlKHZpc2l0b3IpOworICAgIG1faWRlbnRpZmllci52aXNpdEFnZ3JlZ2F0ZTEo
dmlzaXRvcik7CiB9CiAKKy8vdGVtcGxhdGUgdm9pZCBBY2Nlc3NDYXNlOjp2aXNpdEFnZ3JlZ2F0
ZShTbG90VmlzaXRvciYpIGNvbnN0OworLy90ZW1wbGF0ZSB2b2lkIEFjY2Vzc0Nhc2U6OnZpc2l0
QWdncmVnYXRlKFZlcmlmaWVyU2xvdFZpc2l0b3ImKSBjb25zdDsKKwogdm9pZCBBY2Nlc3NDYXNl
OjpnZW5lcmF0ZVdpdGhHdWFyZCgKICAgICBBY2Nlc3NHZW5lcmF0aW9uU3RhdGUmIHN0YXRlLCBD
Q2FsbEhlbHBlcnM6Okp1bXBMaXN0JiBmYWxsVGhyb3VnaCkKIHsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuaAkocmV2aXNpb24gMjcyMTkyKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuaAkod29ya2luZyBjb3B5
KQpAQCAtMjc1LDkgKzI3NSwxMCBAQCBwcml2YXRlOgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1
bmN0b3I+CiAgICAgdm9pZCBmb3JFYWNoRGVwZW5kZW50Q2VsbChWTSYsIGNvbnN0IEZ1bmN0b3Im
KSBjb25zdDsKIAotICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImKSBjb25zdDsK
Ky8vICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgdmlzaXRBZ2dyZWdhdGUoVmlz
aXRvciYpIGNvbnN0OworICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUxKEFic3RyYWN0U2xvdFZpc2l0
b3ImKSBjb25zdDsKICAgICBib29sIHZpc2l0V2VhayhWTSYpIGNvbnN0OwotICAgIGJvb2wgcHJv
cGFnYXRlVHJhbnNpdGlvbnMoU2xvdFZpc2l0b3ImKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBWaXNpdG9yPiBib29sIHByb3BhZ2F0ZVRyYW5zaXRpb25zKFZpc2l0b3ImKSBjb25zdDsK
IAogICAgIC8vIEZJWE1FOiBUaGlzIG9ubHkgZXhpc3RzIGJlY2F1c2Ugb2YgaG93IEFjY2Vzc0Nh
c2UgcHV0cyBwb3N0LWdlbmVyYXRpb24gdGhpbmdzIGludG8gaXRzZWxmLgogICAgIC8vIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTY0NTYKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeVZhbEluZm8uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeVZhbEluZm8uY3BwCShyZXZpc2lvbiAyNzIxOTIp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnlWYWxJbmZvLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNCw3ICs0LDcgQEAKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCiAgKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIDEuIFJlZGlzdHJpYnV0VmVyaWZpZXJTbG90VmlzaXRv
cmlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAogICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgogICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKICAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKQEAgLTMyLDExICszMiwx
NiBAQCBuYW1lc3BhY2UgSlNDIHsKIAogI2lmIEVOQUJMRShKSVQpCiAKLXZvaWQgQnlWYWxJbmZv
Ojp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vdGVtcGxhdGU8dHlwZW5h
bWUgVmlzaXRvcj4KKy8vdm9pZCBCeVZhbEluZm86OnZpc2l0QWdncmVnYXRlKFZpc2l0b3ImIHZp
c2l0b3IpCit2b2lkIEJ5VmFsSW5mbzo6dmlzaXRBZ2dyZWdhdGUxKEFic3RyYWN0U2xvdFZpc2l0
b3ImIHZpc2l0b3IpCiB7Ci0gICAgY2FjaGVkSWQudmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7Cisg
ICAgY2FjaGVkSWQudmlzaXRBZ2dyZWdhdGUxKHZpc2l0b3IpOwogfQogCisvL3RlbXBsYXRlIHZv
aWQgQnlWYWxJbmZvOjp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYpOworLy90ZW1wbGF0ZSB2
b2lkIEJ5VmFsSW5mbzo6dmlzaXRBZ2dyZWdhdGUoVmVyaWZpZXJTbG90VmlzaXRvciYpOworCiAj
ZW5kaWYgLy8gRU5BQkxFKEpJVCkKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnlWYWxJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5VmFsSW5mby5oCShyZXZpc2lvbiAyNzIxOTIpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnlWYWxJbmZvLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI2MCw3ICsyNjAsOCBAQCBzdHJ1Y3QgQnlWYWxJbmZvIHsKICAgICAgICAgdGhpcy0+
c2VlbiA9IGZhbHNlOwogICAgIH0KIAotICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0
b3ImKTsKKy8vICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgdmlzaXRBZ2dyZWdh
dGUoVmlzaXRvciYpOworICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUxKEFic3RyYWN0U2xvdFZpc2l0
b3ImKTsKIAogICAgIENvZGVMb2NhdGlvbkp1bXA8SlNJbnRlcm5hbFB0clRhZz4gbm90SW5kZXhK
dW1wOwogICAgIENvZGVMb2NhdGlvbkp1bXA8SlNJbnRlcm5hbFB0clRhZz4gYmFkVHlwZUp1bXA7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAko
cmV2aXNpb24gMjcyMTkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVC
bG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDkgQEAKICNpbmNsdWRlICJjb25m
aWcuaCIKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKIAorI2luY2x1ZGUgIkFic3RyYWN0U2xvdFZp
c2l0b3IuaCIgLy8gbWxhbSBURVNUCisjaW5jbHVkZSAiUG9seW1vcnBoaWNBY2Nlc3MuaCIgLy8g
bWxhbSBURVNUCisKICNpbmNsdWRlICJBcml0aFByb2ZpbGUuaCIKICNpbmNsdWRlICJCYXNpY0Js
b2NrTG9jYXRpb24uaCIKICNpbmNsdWRlICJCeVZhbEluZm8uaCIKQEAgLTk5OCw3ICsxMDAxLDgg
QEAgc2l6ZV90IENvZGVCbG9jazo6ZXN0aW1hdGVkU2l6ZShKU0NlbGwqIAogICAgIHJldHVybiBC
YXNlOjplc3RpbWF0ZWRTaXplKGNlbGwsIHZtKSArIGV4dHJhTWVtb3J5QWxsb2NhdGVkOwogfQog
Ci12b2lkIENvZGVCbG9jazo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9y
JiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgQ29kZUJsb2NrOjp2
aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAg
Q29kZUJsb2NrKiB0aGlzT2JqZWN0ID0ganNDYXN0PENvZGVCbG9jayo+KGNlbGwpOwogICAgIEFT
U0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTEwMDcsNyAr
MTAxMSwxMCBAQCB2b2lkIENvZGVCbG9jazo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlCiAgICAg
dGhpc09iamVjdC0+dmlzaXRDaGlsZHJlbih2aXNpdG9yKTsKIH0KIAotdm9pZCBDb2RlQmxvY2s6
OnZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCitERUZJTkVfVklTSVRfQ0hJTERS
RU4oQ29kZUJsb2NrKTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgQ29kZUJs
b2NrOjp2aXNpdENoaWxkcmVuSW1wbChWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIENvbmN1cnJl
bnRKU0xvY2tlciBsb2NrZXIobV9sb2NrKTsKICAgICBpZiAoQ29kZUJsb2NrKiBvdGhlckJsb2Nr
ID0gc3BlY2lhbE9TUkVudHJ5QmxvY2tPck51bGwoKSkKQEAgLTEwMjYsNiArMTAzMyw4IEBAIHZv
aWQgQ29kZUJsb2NrOjp2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG8KICAgICBWTTo6U3BhY2VBbmRT
ZXQ6OnNldEZvcigqc3Vic3BhY2UoKSkuYWRkKHRoaXMpOwogfQogCitERUZJTkVfSU5TVEFOQ0Vf
VklTSVRfQ0hJTERSRU4oQ29kZUJsb2NrKTsKKwogYm9vbCBDb2RlQmxvY2s6OnNob3VsZFZpc2l0
U3Ryb25nbHkoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiBsb2NrZXIpCiB7CiAgICAgaWYgKE9w
dGlvbnM6OmZvcmNlQ29kZUJsb2NrTGl2ZW5lc3MoKSkKQEAgLTEwOTgsNyArMTEwNyw5IEBAIGJv
b2wgQ29kZUJsb2NrOjpzaG91bGRKZXR0aXNvbkR1ZVRvT2xkQWcKIH0KIAogI2lmIEVOQUJMRShE
RkdfSklUKQotc3RhdGljIGJvb2wgc2hvdWxkTWFya1RyYW5zaXRpb24oVk0mIHZtLCBERkc6Oldl
YWtSZWZlcmVuY2VUcmFuc2l0aW9uJiB0cmFuc2l0aW9uKQorLy8gbWxhbSBGSVhNRTogdm0uaGVh
cC5pc01hcmtlZCBuZWVkcyB0byBiZSBhYnN0cmFjdGVkLgorLy9zdGF0aWMgYm9vbCBzaG91bGRN
YXJrVHJhbnNpdGlvbihWTSYgdm0sIERGRzo6V2Vha1JlZmVyZW5jZVRyYW5zaXRpb24mIHRyYW5z
aXRpb24pCitzdGF0aWMgaW5saW5lIGJvb2wgc2hvdWxkTWFya1RyYW5zaXRpb24oVk0mIHZtLCBE
Rkc6OldlYWtSZWZlcmVuY2VUcmFuc2l0aW9uJiB0cmFuc2l0aW9uKQogewogICAgIGlmICh0cmFu
c2l0aW9uLm1fY29kZU9yaWdpbiAmJiAhdm0uaGVhcC5pc01hcmtlZCh0cmFuc2l0aW9uLm1fY29k
ZU9yaWdpbi5nZXQoKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTExMTksNyArMTEzMCw0
MCBAQCBCeXRlY29kZUluZGV4IENvZGVCbG9jazo6Ynl0ZWNvZGVJbmRleEZvCiB9CiAjZW5kaWYg
Ly8gRU5BQkxFKERGR19KSVQpCiAKLXZvaWQgQ29kZUJsb2NrOjpwcm9wYWdhdGVUcmFuc2l0aW9u
cyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBTbG90VmlzaXRvciYgdmlzaXRvcikKKyNpZiBF
TkFCTEUoSklUKQorCisvL3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+CisvL2Jvb2wgU3RydWN0
dXJlU3R1YkluZm86OnByb3BhZ2F0ZVRyYW5zaXRpb25zMShWaXNpdG9yJiB2aXNpdG9yKQorYm9v
bCBTdHJ1Y3R1cmVTdHViSW5mbzo6cHJvcGFnYXRlVHJhbnNpdGlvbnMxKEFic3RyYWN0U2xvdFZp
c2l0b3ImIHZpc2l0b3IpCit7CisgICAgc3dpdGNoIChtX2NhY2hlVHlwZSkgeworICAgIGNhc2Ug
Q2FjaGVUeXBlOjpVbnNldDoKKyAgICBjYXNlIENhY2hlVHlwZTo6QXJyYXlMZW5ndGg6CisgICAg
Y2FzZSBDYWNoZVR5cGU6OlN0cmluZ0xlbmd0aDoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
Y2FzZSBDYWNoZVR5cGU6OkdldEJ5SWRTZWxmOgorICAgIGNhc2UgQ2FjaGVUeXBlOjpQdXRCeUlk
UmVwbGFjZToKKyAgICBjYXNlIENhY2hlVHlwZTo6SW5CeUlkU2VsZjoKKyAgICAgICAgcmV0dXJu
IHUuYnlJZFNlbGYuYmFzZU9iamVjdFN0cnVjdHVyZS0+bWFya0lmQ2hlYXAxKHZpc2l0b3IpOwor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgY2FzZSBDYWNoZVR5cGU6OlN0dWI6CisgICAgICAg
IHJldHVybiB1LnN0dWItPnByb3BhZ2F0ZVRyYW5zaXRpb25zMTAodmlzaXRvcik7CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgCisvLyAgICBVTlVTRURfUEFSQU0odmlzaXRvcik7
IC8vIG1sYW0gVEVTVAorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0
dXJuIHRydWU7Cit9CisKKyNlbmRpZiAvLyBFTkFCTEUoSklUKQorCisvL3RlbXBsYXRlPD4gYm9v
bCBTdHJ1Y3R1cmVTdHViSW5mbzo6cHJvcGFnYXRlVHJhbnNpdGlvbnMxKFNsb3RWaXNpdG9yJik7
CisvL3RlbXBsYXRlPD4gYm9vbCBTdHJ1Y3R1cmVTdHViSW5mbzo6cHJvcGFnYXRlVHJhbnNpdGlv
bnMxKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKKworLy90ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
PgorLy92b2lkIENvZGVCbG9jazo6cHJvcGFnYXRlVHJhbnNpdGlvbnMoY29uc3QgQ29uY3VycmVu
dEpTTG9ja2VyJiwgVmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgQ29kZUJsb2NrOjpwcm9wYWdhdGVU
cmFuc2l0aW9uczEoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgQWJzdHJhY3RTbG90VmlzaXRv
ciYgdmlzaXRvcikKIHsKICAgICBWTSYgdm0gPSAqbV92bTsKIApAQCAtMTEzNCw3ICsxMTc4LDgg
QEAgdm9pZCBDb2RlQmxvY2s6OnByb3BhZ2F0ZVRyYW5zaXRpb25zKGNvbgogICAgICAgICAgICAg
ICAgICAgICB2bS5oZWFwLnN0cnVjdHVyZUlEVGFibGUoKS5nZXQob2xkU3RydWN0dXJlSUQpOwog
ICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0KICAgICAgICAgICAgICAg
ICAgICAgdm0uaGVhcC5zdHJ1Y3R1cmVJRFRhYmxlKCkuZ2V0KG5ld1N0cnVjdHVyZUlEKTsKLSAg
ICAgICAgICAgICAgICBpZiAodm0uaGVhcC5pc01hcmtlZChvbGRTdHJ1Y3R1cmUpKQorLy8gICAg
ICAgICAgICAgICAgaWYgKHZtLmhlYXAuaXNNYXJrZWQob2xkU3RydWN0dXJlKSkgLy8gbWxhbQor
ICAgICAgICAgICAgICAgIGlmICh2aXNpdG9yLmlzTWFya2VkKG9sZFN0cnVjdHVyZSkpCiAgICAg
ICAgICAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQobmV3U3RydWN0dXJlKTsK
ICAgICAgICAgICAgIH0pOwogCkBAIC0xMTQ2LDE0ICsxMTkxLDE2IEBAIHZvaWQgQ29kZUJsb2Nr
Ojpwcm9wYWdhdGVUcmFuc2l0aW9ucyhjb24KIAogICAgICAgICAgICAgICAgIEpTQ2VsbCogcHJv
cGVydHkgPSBtZXRhZGF0YS5tX3Byb3BlcnR5LmdldCgpOwogICAgICAgICAgICAgICAgIEFTU0VS
VChwcm9wZXJ0eSk7Ci0gICAgICAgICAgICAgICAgaWYgKCF2bS5oZWFwLmlzTWFya2VkKHByb3Bl
cnR5KSkKKy8vICAgICAgICAgICAgICAgIGlmICghdm0uaGVhcC5pc01hcmtlZChwcm9wZXJ0eSkp
IC8vIG1sYW0KKyAgICAgICAgICAgICAgICBpZiAoIXZpc2l0b3IuaXNNYXJrZWQocHJvcGVydHkp
KQogICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgICAgICAgICBTdHJ1Y3R1
cmUqIG9sZFN0cnVjdHVyZSA9CiAgICAgICAgICAgICAgICAgICAgIHZtLmhlYXAuc3RydWN0dXJl
SURUYWJsZSgpLmdldChvbGRTdHJ1Y3R1cmVJRCk7CiAgICAgICAgICAgICAgICAgU3RydWN0dXJl
KiBuZXdTdHJ1Y3R1cmUgPQogICAgICAgICAgICAgICAgICAgICB2bS5oZWFwLnN0cnVjdHVyZUlE
VGFibGUoKS5nZXQobmV3U3RydWN0dXJlSUQpOwotICAgICAgICAgICAgICAgIGlmICh2bS5oZWFw
LmlzTWFya2VkKG9sZFN0cnVjdHVyZSkpCisvLyAgICAgICAgICAgICAgICBpZiAodm0uaGVhcC5p
c01hcmtlZChvbGRTdHJ1Y3R1cmUpKSAvLyBtbGFtCisgICAgICAgICAgICAgICAgaWYgKHZpc2l0
b3IuaXNNYXJrZWQob2xkU3RydWN0dXJlKSkKICAgICAgICAgICAgICAgICAgICAgdmlzaXRvci5h
cHBlbmRVbmJhcnJpZXJlZChuZXdTdHJ1Y3R1cmUpOwogICAgICAgICAgICAgfSk7CiAgICAgICAg
IH0KQEAgLTExNjMsNyArMTIxMCw3IEBAIHZvaWQgQ29kZUJsb2NrOjpwcm9wYWdhdGVUcmFuc2l0
aW9ucyhjb24KICAgICBpZiAoSklUQ29kZTo6aXNKSVQoaml0VHlwZSgpKSkgewogICAgICAgICBp
ZiAoYXV0byogaml0RGF0YSA9IG1faml0RGF0YS5nZXQoKSkgewogICAgICAgICAgICAgZm9yIChT
dHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gOiBqaXREYXRhLT5tX3N0dWJJbmZvcykKLSAgICAg
ICAgICAgICAgICBzdHViSW5mby0+cHJvcGFnYXRlVHJhbnNpdGlvbnModmlzaXRvcik7CisgICAg
ICAgICAgICAgICAgc3R1YkluZm8tPnByb3BhZ2F0ZVRyYW5zaXRpb25zMSh2aXNpdG9yKTsKICAg
ICAgICAgfQogICAgIH0KICNlbmRpZiAvLyBFTkFCTEUoSklUKQpAQCAtMTE3MiwxMCArMTIxOSwx
MCBAQCB2b2lkIENvZGVCbG9jazo6cHJvcGFnYXRlVHJhbnNpdGlvbnMoY29uCiAgICAgaWYgKEpJ
VENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRUeXBlKCkpKSB7CiAgICAgICAgIERGRzo6Q29tbW9u
RGF0YSogZGZnQ29tbW9uID0gbV9qaXRDb2RlLT5kZmdDb21tb24oKTsKICAgICAgICAgCi0gICAg
ICAgIGRmZ0NvbW1vbi0+cmVjb3JkZWRTdGF0dXNlcy5tYXJrSWZDaGVhcCh2aXNpdG9yKTsKKyAg
ICAgICAgZGZnQ29tbW9uLT5yZWNvcmRlZFN0YXR1c2VzLm1hcmtJZkNoZWFwMSh2aXNpdG9yKTsK
ICAgICAgICAgCiAgICAgICAgIGZvciAoU3RydWN0dXJlSUQgc3RydWN0dXJlSUQgOiBkZmdDb21t
b24tPndlYWtTdHJ1Y3R1cmVSZWZlcmVuY2VzKQotICAgICAgICAgICAgdm0uZ2V0U3RydWN0dXJl
KHN0cnVjdHVyZUlEKS0+bWFya0lmQ2hlYXAodmlzaXRvcik7CisgICAgICAgICAgICB2bS5nZXRT
dHJ1Y3R1cmUoc3RydWN0dXJlSUQpLT5tYXJrSWZDaGVhcDEodmlzaXRvcik7CiAKICAgICAgICAg
Zm9yIChhdXRvJiB0cmFuc2l0aW9uIDogZGZnQ29tbW9uLT50cmFuc2l0aW9ucykgewogICAgICAg
ICAgICAgaWYgKHNob3VsZE1hcmtUcmFuc2l0aW9uKHZtLCB0cmFuc2l0aW9uKSkgewpAQCAtMTIw
NSwxMyArMTI1MiwxOSBAQCB2b2lkIENvZGVCbG9jazo6cHJvcGFnYXRlVHJhbnNpdGlvbnMoY29u
CiAjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCiB9CiAKLXZvaWQgQ29kZUJsb2NrOjpkZXRlcm1p
bmVMaXZlbmVzcyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBTbG90VmlzaXRvciYgdmlzaXRv
cikKKy8vdGVtcGxhdGUgdm9pZCBDb2RlQmxvY2s6OnByb3BhZ2F0ZVRyYW5zaXRpb25zKGNvbnN0
IENvbmN1cnJlbnRKU0xvY2tlciYsIFNsb3RWaXNpdG9yJik7CisvL3RlbXBsYXRlIHZvaWQgQ29k
ZUJsb2NrOjpwcm9wYWdhdGVUcmFuc2l0aW9ucyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBW
ZXJpZmllclNsb3RWaXNpdG9yJik7CisKKy8vdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KKy8v
dm9pZCBDb2RlQmxvY2s6OmRldGVybWluZUxpdmVuZXNzKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tl
ciYsIFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIENvZGVCbG9jazo6ZGV0ZXJtaW5lTGl2ZW5lc3Mo
Y29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikK
IHsKICAgICBVTlVTRURfUEFSQU0odmlzaXRvcik7CiAgICAgCiAjaWYgRU5BQkxFKERGR19KSVQp
CiAgICAgVk0mIHZtID0gKm1fdm07Ci0gICAgaWYgKHZtLmhlYXAuaXNNYXJrZWQodGhpcykpCisv
LyAgICBpZiAodm0uaGVhcC5pc01hcmtlZCh0aGlzKSkgLy8gbWxhbQorICAgIGlmICh2aXNpdG9y
LmlzTWFya2VkKHRoaXMpKQogICAgICAgICByZXR1cm47CiAgICAgCiAgICAgLy8gSW4gcmFyZSBh
bmQgd2VpcmQgY2FzZXMsIHRoaXMgY291bGQgYmUgY2FsbGVkIG9uIGEgYmFzZWxpbmUgQ29kZUJs
b2NrLiBPbmUgdGhhdCBJIGZvdW5kIHdhcwpAQCAtMTIyOCw3ICsxMjgxLDggQEAgdm9pZCBDb2Rl
QmxvY2s6OmRldGVybWluZUxpdmVuZXNzKGNvbnN0IAogICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBkZmdDb21tb24tPndlYWtSZWZlcmVuY2VzLnNpemUoKTsgKytpKSB7CiAgICAgICAgIEpT
Q2VsbCogcmVmZXJlbmNlID0gZGZnQ29tbW9uLT53ZWFrUmVmZXJlbmNlc1tpXS5nZXQoKTsKICAg
ICAgICAgQVNTRVJUKCFqc0R5bmFtaWNDYXN0PENvZGVCbG9jayo+KHZtLCByZWZlcmVuY2UpKTsK
LSAgICAgICAgaWYgKCF2bS5oZWFwLmlzTWFya2VkKHJlZmVyZW5jZSkpIHsKKy8vICAgICAgICBp
ZiAoIXZtLmhlYXAuaXNNYXJrZWQocmVmZXJlbmNlKSkgeyAvLyBtbGFtCisgICAgICAgIGlmICgh
dmlzaXRvci5pc01hcmtlZChyZWZlcmVuY2UpKSB7CiAgICAgICAgICAgICBhbGxBcmVMaXZlU29G
YXIgPSBmYWxzZTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC0xMjM2LDcgKzEy
OTAsOCBAQCB2b2lkIENvZGVCbG9jazo6ZGV0ZXJtaW5lTGl2ZW5lc3MoY29uc3QgCiAgICAgaWYg
KGFsbEFyZUxpdmVTb0ZhcikgewogICAgICAgICBmb3IgKFN0cnVjdHVyZUlEIHN0cnVjdHVyZUlE
IDogZGZnQ29tbW9uLT53ZWFrU3RydWN0dXJlUmVmZXJlbmNlcykgewogICAgICAgICAgICAgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUgPSB2bS5nZXRTdHJ1Y3R1cmUoc3RydWN0dXJlSUQpOwotICAgICAg
ICAgICAgaWYgKCF2bS5oZWFwLmlzTWFya2VkKHN0cnVjdHVyZSkpIHsKKy8vICAgICAgICAgICAg
aWYgKCF2bS5oZWFwLmlzTWFya2VkKHN0cnVjdHVyZSkpIHsKKyAgICAgICAgICAgIGlmICghdmlz
aXRvci5pc01hcmtlZChzdHJ1Y3R1cmUpKSB7CiAgICAgICAgICAgICAgICAgYWxsQXJlTGl2ZVNv
RmFyID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CkBAIC0x
MjU0LDYgKzEzMDksOSBAQCB2b2lkIENvZGVCbG9jazo6ZGV0ZXJtaW5lTGl2ZW5lc3MoY29uc3Qg
CiAjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCiB9CiAKKy8vdGVtcGxhdGUgdm9pZCBDb2RlQmxv
Y2s6OmRldGVybWluZUxpdmVuZXNzKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIFNsb3RWaXNp
dG9yJik7CisvL3RlbXBsYXRlIHZvaWQgQ29kZUJsb2NrOjpkZXRlcm1pbmVMaXZlbmVzcyhjb25z
dCBDb25jdXJyZW50SlNMb2NrZXImLCBWZXJpZmllclNsb3RWaXNpdG9yJik7CisKIHZvaWQgQ29k
ZUJsb2NrOjpmaW5hbGl6ZUxMSW50SW5saW5lQ2FjaGVzKCkKIHsKICAgICBWTSYgdm0gPSAqbV92
bTsKQEAgLTE3NjIsNyArMTgyMCw4IEBAIHZvaWQgQ29kZUJsb2NrOjpyZXNldEpJVERhdGEoKQog
fQogI2VuZGlmCiAKLXZvaWQgQ29kZUJsb2NrOjp2aXNpdE9TUkV4aXRUYXJnZXRzKGNvbnN0IENv
bmN1cnJlbnRKU0xvY2tlciYsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5h
bWUgVmlzaXRvcj4KK3ZvaWQgQ29kZUJsb2NrOjp2aXNpdE9TUkV4aXRUYXJnZXRzKGNvbnN0IENv
bmN1cnJlbnRKU0xvY2tlciYsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgLy8gV2Ugc3Ryb25n
bHkgdmlzaXQgT1NSIGV4aXRzIHRhcmdldHMgYmVjYXVzZSB3ZSBkb24ndCB3YW50IHRvIGRlYWwg
d2l0aAogICAgIC8vIHRoZSBjb21wbGV4aXR5IG9mIGdlbmVyYXRpbmcgYW4gZXhpdCB0YXJnZXQg
Q29kZUJsb2NrIG9uIGRlbWFuZCBhbmQKQEAgLTE3ODIsNyArMTg0MSwxMSBAQCB2b2lkIENvZGVC
bG9jazo6dmlzaXRPU1JFeGl0VGFyZ2V0cyhjb25zCiAjZW5kaWYKIH0KIAotdm9pZCBDb2RlQmxv
Y2s6OnN0cm9uZ2x5VmlzaXRTdHJvbmdSZWZlcmVuY2VzKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tl
ciYgbG9ja2VyLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlIHZvaWQgQ29kZUJsb2Nr
Ojp2aXNpdE9TUkV4aXRUYXJnZXRzKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIFNsb3RWaXNp
dG9yJik7Cit0ZW1wbGF0ZSB2b2lkIENvZGVCbG9jazo6dmlzaXRPU1JFeGl0VGFyZ2V0cyhjb25z
dCBDb25jdXJyZW50SlNMb2NrZXImLCBBYnN0cmFjdFNsb3RWaXNpdG9yJik7CisKK3RlbXBsYXRl
PHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIENvZGVCbG9jazo6c3Ryb25nbHlWaXNpdFN0cm9uZ1Jl
ZmVyZW5jZXMoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiBsb2NrZXIsIFZpc2l0b3ImIHZpc2l0
b3IpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGxvY2tlcik7CiAgICAgCkBAIC0xODAzLDIyICsxODY2
LDI2IEBAIHZvaWQgQ29kZUJsb2NrOjpzdHJvbmdseVZpc2l0U3Ryb25nUmVmZXIKICNpZiBFTkFC
TEUoSklUKQogICAgIGlmIChhdXRvKiBqaXREYXRhID0gbV9qaXREYXRhLmdldCgpKSB7CiAgICAg
ICAgIGZvciAoQnlWYWxJbmZvKiBieVZhbEluZm8gOiBqaXREYXRhLT5tX2J5VmFsSW5mb3MpCi0g
ICAgICAgICAgICBieVZhbEluZm8tPnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOworICAgICAgICAg
ICAgYnlWYWxJbmZvLT52aXNpdEFnZ3JlZ2F0ZTEodmlzaXRvcik7CiAgICAgICAgIGZvciAoU3Ry
dWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvIDogaml0RGF0YS0+bV9zdHViSW5mb3MpCi0gICAgICAg
ICAgICBzdHViSW5mby0+dmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7CisgICAgICAgICAgICBzdHVi
SW5mby0+dmlzaXRBZ2dyZWdhdGUxKHZpc2l0b3IpOwogICAgIH0KICNlbmRpZgogCiAjaWYgRU5B
QkxFKERGR19KSVQpCiAgICAgaWYgKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRUeXBlKCkp
KSB7CiAgICAgICAgIERGRzo6Q29tbW9uRGF0YSogZGZnQ29tbW9uID0gbV9qaXRDb2RlLT5kZmdD
b21tb24oKTsKLSAgICAgICAgZGZnQ29tbW9uLT5yZWNvcmRlZFN0YXR1c2VzLnZpc2l0QWdncmVn
YXRlKHZpc2l0b3IpOworICAgICAgICBkZmdDb21tb24tPnJlY29yZGVkU3RhdHVzZXMudmlzaXRB
Z2dyZWdhdGUxKHZpc2l0b3IpOwogICAgICAgICB2aXNpdE9TUkV4aXRUYXJnZXRzKGxvY2tlciwg
dmlzaXRvcik7CiAgICAgfQogI2VuZGlmCiB9CiAKLXZvaWQgQ29kZUJsb2NrOjpzdHJvbmdseVZp
c2l0V2Vha1JlZmVyZW5jZXMoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgU2xvdFZpc2l0b3Im
IHZpc2l0b3IpCisvL3RlbXBsYXRlIHZvaWQgQ29kZUJsb2NrOjpzdHJvbmdseVZpc2l0U3Ryb25n
UmVmZXJlbmNlcyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBTbG90VmlzaXRvciYpOworLy90
ZW1wbGF0ZSB2b2lkIENvZGVCbG9jazo6c3Ryb25nbHlWaXNpdFN0cm9uZ1JlZmVyZW5jZXMoY29u
c3QgQ29uY3VycmVudEpTTG9ja2VyJiwgVmVyaWZpZXJTbG90VmlzaXRvciYpOworCit0ZW1wbGF0
ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBDb2RlQmxvY2s6OnN0cm9uZ2x5VmlzaXRXZWFrUmVm
ZXJlbmNlcyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBWaXNpdG9yJiB2aXNpdG9yKQogewog
ICAgIFVOVVNFRF9QQVJBTSh2aXNpdG9yKTsKIApAQCAtMTg0NSw2ICsxOTEyLDkgQEAgdm9pZCBD
b2RlQmxvY2s6OnN0cm9uZ2x5VmlzaXRXZWFrUmVmZXJlbgogI2VuZGlmICAgIAogfQogCit0ZW1w
bGF0ZSB2b2lkIENvZGVCbG9jazo6c3Ryb25nbHlWaXNpdFdlYWtSZWZlcmVuY2VzKGNvbnN0IENv
bmN1cnJlbnRKU0xvY2tlciYsIFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIENvZGVCbG9j
azo6c3Ryb25nbHlWaXNpdFdlYWtSZWZlcmVuY2VzKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYs
IEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKKwogQ29kZUJsb2NrKiBDb2RlQmxvY2s6OmJhc2VsaW5l
QWx0ZXJuYXRpdmUoKQogewogI2lmIEVOQUJMRShKSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShyZXZpc2lvbiAyNzIxOTIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTIw
MSwxMCArMjAxLDExIEBAIHB1YmxpYzoKICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTIzNjc3CiAgICAgQ29kZUJsb2NrKiBiYXNlbGluZVZlcnNpb24oKTsK
IAorICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CisKICAgICBzdGF0aWMgc2l6ZV90IGVzdGlt
YXRlZFNpemUoSlNDZWxsKiwgVk0mKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpT
Q2VsbCosIFNsb3RWaXNpdG9yJik7CiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsK
LSAgICB2b2lkIHZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX0lOU1RB
TkNFX1ZJU0lUX0NISUxEUkVOOwogICAgIHZvaWQgZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoVk0m
KTsKIAogICAgIHZvaWQgbm90aWZ5TGV4aWNhbEJpbmRpbmdVcGRhdGUoKTsKQEAgLTk2NywxMiAr
OTY4LDE0IEBAIHByaXZhdGU6CiAgICAgYm9vbCBzaG91bGRKZXR0aXNvbkR1ZVRvV2Vha1JlZmVy
ZW5jZShWTSYpOwogICAgIGJvb2wgc2hvdWxkSmV0dGlzb25EdWVUb09sZEFnZShjb25zdCBDb25j
dXJyZW50SlNMb2NrZXImKTsKICAgICAKLSAgICB2b2lkIHByb3BhZ2F0ZVRyYW5zaXRpb25zKGNv
bnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIFNsb3RWaXNpdG9yJik7Ci0gICAgdm9pZCBkZXRlcm1p
bmVMaXZlbmVzcyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBTbG90VmlzaXRvciYpOworLy8g
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCBwcm9wYWdhdGVUcmFuc2l0aW9ucyhj
b25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBWaXNpdG9yJik7CisgICAgdm9pZCBwcm9wYWdhdGVU
cmFuc2l0aW9uczEoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgQWJzdHJhY3RTbG90VmlzaXRv
ciYpOworLy8gICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCBkZXRlcm1pbmVMaXZl
bmVzcyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBWaXNpdG9yJik7CisgICAgdm9pZCBkZXRl
cm1pbmVMaXZlbmVzcyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBBYnN0cmFjdFNsb3RWaXNp
dG9yJik7CiAgICAgICAgIAotICAgIHZvaWQgc3Ryb25nbHlWaXNpdFN0cm9uZ1JlZmVyZW5jZXMo
Y29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgU2xvdFZpc2l0b3ImKTsKLSAgICB2b2lkIHN0cm9u
Z2x5VmlzaXRXZWFrUmVmZXJlbmNlcyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBTbG90Vmlz
aXRvciYpOwotICAgIHZvaWQgdmlzaXRPU1JFeGl0VGFyZ2V0cyhjb25zdCBDb25jdXJyZW50SlNM
b2NrZXImLCBTbG90VmlzaXRvciYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZv
aWQgc3Ryb25nbHlWaXNpdFN0cm9uZ1JlZmVyZW5jZXMoY29uc3QgQ29uY3VycmVudEpTTG9ja2Vy
JiwgVmlzaXRvciYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgc3Ryb25n
bHlWaXNpdFdlYWtSZWZlcmVuY2VzKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIFZpc2l0b3Im
KTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIHZpc2l0T1NSRXhpdFRhcmdl
dHMoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgVmlzaXRvciYpOwogCiAgICAgdW5zaWduZWQg
bnVtYmVyT2ZOb25Bcmd1bWVudFZhbHVlUHJvZmlsZXMoKSB7IHJldHVybiBtX251bWJlck9mTm9u
QXJndW1lbnRWYWx1ZVByb2ZpbGVzOyB9CiAgICAgdW5zaWduZWQgdG90YWxOdW1iZXJPZlZhbHVl
UHJvZmlsZXMoKSB7IHJldHVybiBudW1iZXJPZkFyZ3VtZW50VmFsdWVQcm9maWxlcygpICsgbnVt
YmVyT2ZOb25Bcmd1bWVudFZhbHVlUHJvZmlsZXMoKTsgfQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0RlbGV0ZUJ5SWRWYXJpYW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRGVsZXRlQnlJZFZhcmlhbnQuY3BwCShyZXZpc2lv
biAyNzIxOTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRGVsZXRlQnlJZFZh
cmlhbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OCwxOSArODgsMjkgQEAgYm9vbCBEZWxldGVC
eUlkVmFyaWFudDo6d3JpdGVzU3RydWN0dXJlcwogICAgIHJldHVybiAhIW5ld1N0cnVjdHVyZSgp
OwogfQogCi12b2lkIERlbGV0ZUJ5SWRWYXJpYW50Ojp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRv
ciYgdmlzaXRvcikKKy8vdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KKy8vdm9pZCBEZWxldGVC
eUlkVmFyaWFudDo6dmlzaXRBZ2dyZWdhdGUoVmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgRGVsZXRl
QnlJZFZhcmlhbnQ6OnZpc2l0QWdncmVnYXRlMShBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9y
KQogewotICAgIG1faWRlbnRpZmllci52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKKyAgICBtX2lk
ZW50aWZpZXIudmlzaXRBZ2dyZWdhdGUxKHZpc2l0b3IpOwogfQogCi12b2lkIERlbGV0ZUJ5SWRW
YXJpYW50OjptYXJrSWZDaGVhcChTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vdGVtcGxhdGUgdm9p
ZCBEZWxldGVCeUlkVmFyaWFudDo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImKTsKKy8vdGVt
cGxhdGUgdm9pZCBEZWxldGVCeUlkVmFyaWFudDo6dmlzaXRBZ2dyZWdhdGUoVmVyaWZpZXJTbG90
VmlzaXRvciYpOworCisvL3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+CisvL3ZvaWQgRGVsZXRl
QnlJZFZhcmlhbnQ6Om1hcmtJZkNoZWFwKFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIERlbGV0ZUJ5
SWRWYXJpYW50OjptYXJrSWZDaGVhcDEoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsK
ICAgICBpZiAobV9vbGRTdHJ1Y3R1cmUpCi0gICAgICAgIG1fb2xkU3RydWN0dXJlLT5tYXJrSWZD
aGVhcCh2aXNpdG9yKTsKKyAgICAgICAgbV9vbGRTdHJ1Y3R1cmUtPm1hcmtJZkNoZWFwMSh2aXNp
dG9yKTsKICAgICBpZiAobV9uZXdTdHJ1Y3R1cmUpCi0gICAgICAgIG1fbmV3U3RydWN0dXJlLT5t
YXJrSWZDaGVhcCh2aXNpdG9yKTsKKyAgICAgICAgbV9uZXdTdHJ1Y3R1cmUtPm1hcmtJZkNoZWFw
MSh2aXNpdG9yKTsKIH0KIAorLy90ZW1wbGF0ZSB2b2lkIERlbGV0ZUJ5SWRWYXJpYW50OjptYXJr
SWZDaGVhcChTbG90VmlzaXRvciYpOworLy90ZW1wbGF0ZSB2b2lkIERlbGV0ZUJ5SWRWYXJpYW50
OjptYXJrSWZDaGVhcChWZXJpZmllclNsb3RWaXNpdG9yJik7CisKIHZvaWQgRGVsZXRlQnlJZFZh
cmlhbnQ6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKIHsKICAgICBkdW1wSW5Db250ZXh0
KG91dCwgbnVsbHB0cik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRGVs
ZXRlQnlJZFZhcmlhbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvRGVsZXRlQnlJZFZhcmlhbnQuaAkocmV2aXNpb24gMjcyMTkyKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0RlbGV0ZUJ5SWRWYXJpYW50LmgJKHdvcmtpbmcgY29weSkK
QEAgLTYxLDggKzYxLDEwIEBAIHB1YmxpYzoKIAogICAgIGJvb2wgYXR0ZW1wdFRvTWVyZ2UoY29u
c3QgRGVsZXRlQnlJZFZhcmlhbnQmIG90aGVyKTsKIAotICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUo
U2xvdFZpc2l0b3ImKTsKLSAgICB2b2lkIG1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJik7CisvLyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIHZpc2l0QWdncmVnYXRlKFZpc2l0b3Im
KTsKKy8vICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgbWFya0lmQ2hlYXAoVmlz
aXRvciYpOworICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUxKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsK
KyAgICB2b2lkIG1hcmtJZkNoZWFwMShBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAgICAgYm9vbCBm
aW5hbGl6ZShWTSYpOwogCiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRGVsZXRlQnlTdGF0dXMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9EZWxldGVCeVN0YXR1cy5j
cHAJKHJldmlzaW9uIDI3MjE5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9E
ZWxldGVCeVN0YXR1cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1NCwxOCArMjU0LDI4IEBAIENh
Y2hlYWJsZUlkZW50aWZpZXIgRGVsZXRlQnlTdGF0dXM6OnNpbmcKICAgICByZXR1cm4gcmVzdWx0
OwogfQogCi12b2lkIERlbGV0ZUJ5U3RhdHVzOjp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYg
dmlzaXRvcikKKy8vdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KKy8vdm9pZCBEZWxldGVCeVN0
YXR1czo6dmlzaXRBZ2dyZWdhdGUoVmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgRGVsZXRlQnlTdGF0
dXM6OnZpc2l0QWdncmVnYXRlMShBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAg
IGZvciAoRGVsZXRlQnlJZFZhcmlhbnQmIHZhcmlhbnQgOiBtX3ZhcmlhbnRzKQotICAgICAgICB2
YXJpYW50LnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOworICAgICAgICB2YXJpYW50LnZpc2l0QWdn
cmVnYXRlMSh2aXNpdG9yKTsKIH0KIAotdm9pZCBEZWxldGVCeVN0YXR1czo6bWFya0lmQ2hlYXAo
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3RlbXBsYXRlIHZvaWQgRGVsZXRlQnlTdGF0dXM6OnZp
c2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJik7CisvL3RlbXBsYXRlIHZvaWQgRGVsZXRlQnlTdGF0
dXM6OnZpc2l0QWdncmVnYXRlKFZlcmlmaWVyU2xvdFZpc2l0b3ImKTsKKworLy90ZW1wbGF0ZTx0
eXBlbmFtZSBWaXNpdG9yPgorLy92b2lkIERlbGV0ZUJ5U3RhdHVzOjptYXJrSWZDaGVhcChWaXNp
dG9yJiB2aXNpdG9yKQordm9pZCBEZWxldGVCeVN0YXR1czo6bWFya0lmQ2hlYXAxKEFic3RyYWN0
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgZm9yIChEZWxldGVCeUlkVmFyaWFudCYgdmFy
aWFudCA6IG1fdmFyaWFudHMpCi0gICAgICAgIHZhcmlhbnQubWFya0lmQ2hlYXAodmlzaXRvcik7
CisgICAgICAgIHZhcmlhbnQubWFya0lmQ2hlYXAxKHZpc2l0b3IpOwogfQogCisvL3RlbXBsYXRl
IHZvaWQgRGVsZXRlQnlTdGF0dXM6Om1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJik7CisvL3RlbXBs
YXRlIHZvaWQgRGVsZXRlQnlTdGF0dXM6Om1hcmtJZkNoZWFwKFZlcmlmaWVyU2xvdFZpc2l0b3Im
KTsKKwogYm9vbCBEZWxldGVCeVN0YXR1czo6ZmluYWxpemUoVk0mIHZtKQogewogICAgIGZvciAo
YXV0byYgdmFyaWFudCA6IG1fdmFyaWFudHMpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9EZWxldGVCeVN0YXR1cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9EZWxldGVCeVN0YXR1cy5oCShyZXZpc2lvbiAyNzIxOTIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRGVsZXRlQnlTdGF0dXMuaAkod29ya2luZyBj
b3B5KQpAQCAtODEsOCArODEsMTAgQEAgcHVibGljOgogICAgIC8vIEF0dGVtcHRzIHRvIHJlZHVj
ZSB0aGUgc2V0IG9mIHZhcmlhbnRzIHRvIGZpdCB0aGUgZ2l2ZW4gc3RydWN0dXJlIHNldC4gVGhp
cyBtYXkgYmUgYXBwcm94aW1hdGUuCiAgICAgdm9pZCBmaWx0ZXIoY29uc3QgU3RydWN0dXJlU2V0
Jik7CiAKLSAgICB2b2lkIHZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJik7Ci0gICAgdm9pZCBt
YXJrSWZDaGVhcChTbG90VmlzaXRvciYpOworLy8gICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRv
cj4gdm9pZCB2aXNpdEFnZ3JlZ2F0ZShWaXNpdG9yJik7CisvLyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBWaXNpdG9yPiB2b2lkIG1hcmtJZkNoZWFwKFZpc2l0b3ImKTsKKyAgICB2b2lkIHZpc2l0QWdn
cmVnYXRlMShBYnN0cmFjdFNsb3RWaXNpdG9yJik7CisgICAgdm9pZCBtYXJrSWZDaGVhcDEoQWJz
dHJhY3RTbG90VmlzaXRvciYpOwogICAgIGJvb2wgZmluYWxpemUoVk0mKTsKIAogICAgIGJvb2wg
YXBwZW5kVmFyaWFudChjb25zdCBEZWxldGVCeUlkVmFyaWFudCYpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0RpcmVjdEV2YWxDb2RlQ2FjaGUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9EaXJlY3RFdmFsQ29kZUNhY2hlLmNw
cAkocmV2aXNpb24gMjcyMTkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Rp
cmVjdEV2YWxDb2RlQ2FjaGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSw3ICs0NSw4IEBAIHZv
aWQgRGlyZWN0RXZhbENvZGVDYWNoZTo6Y2xlYXIoKQogICAgIG1fY2FjaGVNYXAuY2xlYXIoKTsK
IH0KIAotdm9pZCBEaXJlY3RFdmFsQ29kZUNhY2hlOjp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRv
ciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIERpcmVjdEV2YWxD
b2RlQ2FjaGU6OnZpc2l0QWdncmVnYXRlKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgTG9ja0hv
bGRlciBsb2NrZXIobV9sb2NrKTsKICAgICBFdmFsQ2FjaGVNYXA6Oml0ZXJhdG9yIGVuZCA9IG1f
Y2FjaGVNYXAuZW5kKCk7CkBAIC01Myw1ICs1NCw3IEBAIHZvaWQgRGlyZWN0RXZhbENvZGVDYWNo
ZTo6dmlzaXRBZ2dyZWdhdGUKICAgICAgICAgdmlzaXRvci5hcHBlbmQocHRyLT52YWx1ZSk7CiB9
CiAKLX0gLy8gbmFtZXNwYWNlIEpTQwordGVtcGxhdGUgdm9pZCBEaXJlY3RFdmFsQ29kZUNhY2hl
Ojp2aXNpdEFnZ3JlZ2F0ZShBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIERp
cmVjdEV2YWxDb2RlQ2FjaGU6OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJik7CiAKK30gLy8g
bmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0RpcmVj
dEV2YWxDb2RlQ2FjaGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvRGlyZWN0RXZhbENvZGVDYWNoZS5oCShyZXZpc2lvbiAyNzIxOTIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRGlyZWN0RXZhbENvZGVDYWNoZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC05Nyw3ICs5Nyw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIGJvb2wgaXNF
bXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fY2FjaGVNYXAuaXNFbXB0eSgpOyB9CiAKLSAgICAgICAg
dm9pZCB2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYpOworICAgICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBWaXNpdG9yPiB2b2lkIHZpc2l0QWdncmVnYXRlKFZpc2l0b3ImKTsKIAogICAgICAgICB2
b2lkIGNsZWFyKCk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGVj
dXRhYmxlVG9Db2RlQmxvY2tFZGdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZS5jcHAJKHJldmlzaW9uIDI3
MjE5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGVjdXRhYmxlVG9Db2Rl
QmxvY2tFZGdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE4LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01Myw3ICs1Myw5IEBAIHZvaWQgRXhlY3V0YWJs
ZVRvQ29kZUJsb2NrRWRnZTo6ZmluaXNoQ3IKICAgICBBU1NFUlQoIWlzQWN0aXZlKCkpOwogfQog
Ci12b2lkIEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2U6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBj
ZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2
b2lkIEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2U6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCog
Y2VsbCwgVmlzaXRvciYgdmlzaXRvcikKKy8vdm9pZCBFeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdl
Ojp2aXNpdENoaWxkcmVuMShKU0NlbGwqIGNlbGwsIEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0
b3IpCiB7CiAgICAgVk0mIHZtID0gdmlzaXRvci52bSgpOwogICAgIEV4ZWN1dGFibGVUb0NvZGVC
bG9ja0VkZ2UqIGVkZ2UgPSBqc0Nhc3Q8RXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZSo+KGNlbGwp
OwpAQCAtNzksNyArODEsOCBAQCB2b2lkIEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2U6OnZpc2l0
Q2hpCiAgICAgaWYgKGNvZGVCbG9jay0+c2hvdWxkVmlzaXRTdHJvbmdseShsb2NrZXIpKQogICAg
ICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKGNvZGVCbG9jayk7CiAgICAgCi0gICAgaWYg
KCF2bS5oZWFwLmlzTWFya2VkKGNvZGVCbG9jaykpCisvLyAgICBpZiAoIXZtLmhlYXAuaXNNYXJr
ZWQoY29kZUJsb2NrKSkgLy8gbWxhbQorICAgIGlmICghdmlzaXRvci5pc01hcmtlZChjb2RlQmxv
Y2spKQogICAgICAgICB2bS5leGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlc1dpdGhGaW5hbGl6ZXJz
LmFkZChlZGdlKTsKICAgICAKICAgICBpZiAoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGNvZGVC
bG9jay0+aml0VHlwZSgpKSkgewpAQCAtMTE0LDE1ICsxMTcsMTcgQEAgdm9pZCBFeGVjdXRhYmxl
VG9Db2RlQmxvY2tFZGdlOjp2aXNpdENoaQogICAgIC8vIHdpbGwga2VlcCBmaXhwb2ludGluZyB1
bnRpbCB0aGUgZW5kLgogICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQoY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSk7CiAgICAgdm0uZXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZXNXaXRoQ29u
c3RyYWludHMuYWRkKGVkZ2UpOwotICAgIGVkZ2UtPnJ1bkNvbnN0cmFpbnQobG9ja2VyLCB2bSwg
dmlzaXRvcik7CisgICAgZWRnZS0+cnVuQ29uc3RyYWludDEobG9ja2VyLCB2bSwgdmlzaXRvcik7
IC8vIG1sYW0gRklYTUUKIH0KIAotdm9pZCBFeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlOjp2aXNp
dE91dHB1dENvbnN0cmFpbnRzKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCitE
RUZJTkVfVklTSVRfQ0hJTERSRU4oRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZSk7CisKK3ZvaWQg
RXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZTo6dmlzaXRPdXRwdXRDb25zdHJhaW50cyhKU0NlbGwq
IGNlbGwsIEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgVk0mIHZtID0gdmlz
aXRvci52bSgpOwogICAgIEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UqIGVkZ2UgPSBqc0Nhc3Q8
RXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZSo+KGNlbGwpOwogICAgIAotICAgIGVkZ2UtPnJ1bkNv
bnN0cmFpbnQoTm9Mb2NraW5nTmVjZXNzYXJ5LCB2bSwgdmlzaXRvcik7CisgICAgZWRnZS0+cnVu
Q29uc3RyYWludDEoTm9Mb2NraW5nTmVjZXNzYXJ5LCB2bSwgdmlzaXRvcik7CiB9CiAKIHZvaWQg
RXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZTo6ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoVk0mIHZt
KQpAQCAtMTg2LDE2ICsxOTEsMjEgQEAgRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZTo6RXhlY3V0
YWJsZVRvQwogewogfQogCi12b2lkIEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2U6OnJ1bkNvbnN0
cmFpbnQoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiBsb2NrZXIsIFZNJiB2bSwgU2xvdFZpc2l0
b3ImIHZpc2l0b3IpCisvL3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+CisvL3ZvaWQgRXhlY3V0
YWJsZVRvQ29kZUJsb2NrRWRnZTo6cnVuQ29uc3RyYWludDEoY29uc3QgQ29uY3VycmVudEpTTG9j
a2VyJiBsb2NrZXIsIFZNJiB2bSwgVmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgRXhlY3V0YWJsZVRv
Q29kZUJsb2NrRWRnZTo6cnVuQ29uc3RyYWludDEoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiBs
b2NrZXIsIFZNJiB2bSwgQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBDb2Rl
QmxvY2sqIGNvZGVCbG9jayA9IG1fY29kZUJsb2NrLmdldCgpOwogICAgIAotICAgIGNvZGVCbG9j
ay0+cHJvcGFnYXRlVHJhbnNpdGlvbnMobG9ja2VyLCB2aXNpdG9yKTsKKyAgICBjb2RlQmxvY2st
PnByb3BhZ2F0ZVRyYW5zaXRpb25zMShsb2NrZXIsIHZpc2l0b3IpOwogICAgIGNvZGVCbG9jay0+
ZGV0ZXJtaW5lTGl2ZW5lc3MobG9ja2VyLCB2aXNpdG9yKTsKICAgICAKLSAgICBpZiAodm0uaGVh
cC5pc01hcmtlZChjb2RlQmxvY2spKQorLy8gICAgaWYgKHZtLmhlYXAuaXNNYXJrZWQoY29kZUJs
b2NrKSkKKyAgICBpZiAodmlzaXRvci5pc01hcmtlZChjb2RlQmxvY2spKQogICAgICAgICB2bS5l
eGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlc1dpdGhDb25zdHJhaW50cy5yZW1vdmUodGhpcyk7CiB9
CiAKLX0gLy8gbmFtZXNwYWNlIEpTQworLy90ZW1wbGF0ZSB2b2lkIEV4ZWN1dGFibGVUb0NvZGVC
bG9ja0VkZ2U6OnJ1bkNvbnN0cmFpbnQxKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIFZNJiwg
U2xvdFZpc2l0b3ImKTsKKy8vdGVtcGxhdGUgdm9pZCBFeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdl
OjpydW5Db25zdHJhaW50MShjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBWTSYsIEFic3RyYWN0
U2xvdFZpc2l0b3ImKTsKIAorfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGVjdXRhYmxlVG9Db2RlQmxvY2tF
ZGdlLmgJKHJldmlzaW9uIDI3MjE5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9FeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01Myw5ICs1
MywxMCBAQCBwdWJsaWM6CiAgICAgREVDTEFSRV9JTkZPOwogCiAgICAgQ29kZUJsb2NrKiBjb2Rl
QmxvY2soKSBjb25zdCB7IHJldHVybiBtX2NvZGVCbG9jay5nZXQoKTsgfQotICAgIAotICAgIHN0
YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKLSAgICBzdGF0
aWMgdm9pZCB2aXNpdE91dHB1dENvbnN0cmFpbnRzKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisK
KyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOworLy8gICAgc3RhdGljIHZvaWQgdmlzaXRDaGls
ZHJlbjEoSlNDZWxsKiwgQWJzdHJhY3RTbG90VmlzaXRvciYpOworICAgIHN0YXRpYyB2b2lkIHZp
c2l0T3V0cHV0Q29uc3RyYWludHMoSlNDZWxsKiwgQWJzdHJhY3RTbG90VmlzaXRvciYpOwogICAg
IHZvaWQgZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoVk0mKTsKICAgICAKICAgICBzdGF0aWMgQ29k
ZUJsb2NrKiB1bndyYXAoRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZSogZWRnZSkKQEAgLTgxLDkg
KzgyLDExIEBAIHByaXZhdGU6CiAgICAgdm9pZCBhY3RpdmF0ZSgpOwogICAgIHZvaWQgZGVhY3Rp
dmF0ZSgpOwogICAgIGJvb2wgaXNBY3RpdmUoKSBjb25zdDsKLSAgICAKLSAgICB2b2lkIHJ1bkNv
bnN0cmFpbnQoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgVk0mLCBTbG90VmlzaXRvciYpOwot
ICAgIAorCisvLyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgorLy8gICAgdm9pZCBydW5D
b25zdHJhaW50MShjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBWTSYsIFZpc2l0b3ImKTsKKyAg
ICB2b2lkIHJ1bkNvbnN0cmFpbnQxKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIFZNJiwgQWJz
dHJhY3RTbG90VmlzaXRvciYpOworCiAgICAgV3JpdGVCYXJyaWVyPENvZGVCbG9jaz4gbV9jb2Rl
QmxvY2s7CiB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJ
ZFZhcmlhbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9HZXRCeUlkVmFyaWFudC5jcHAJKHJldmlzaW9uIDI3MjE5MikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkVmFyaWFudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1
NiwxNiArMTU2LDI2IEBAIGJvb2wgR2V0QnlJZFZhcmlhbnQ6OmF0dGVtcHRUb01lcmdlKGNvbnMK
ICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBHZXRCeUlkVmFyaWFudDo6dmlzaXRBZ2dyZWdh
dGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cisv
L3ZvaWQgR2V0QnlJZFZhcmlhbnQ6OnZpc2l0QWdncmVnYXRlKFZpc2l0b3ImIHZpc2l0b3IpCit2
b2lkIEdldEJ5SWRWYXJpYW50Ojp2aXNpdEFnZ3JlZ2F0ZTEoQWJzdHJhY3RTbG90VmlzaXRvciYg
dmlzaXRvcikKIHsKLSAgICBtX2lkZW50aWZpZXIudmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7Cisg
ICAgbV9pZGVudGlmaWVyLnZpc2l0QWdncmVnYXRlMSh2aXNpdG9yKTsKIH0KIAotdm9pZCBHZXRC
eUlkVmFyaWFudDo6bWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3RlbXBsYXRl
IHZvaWQgR2V0QnlJZFZhcmlhbnQ6OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJik7CisvL3Rl
bXBsYXRlIHZvaWQgR2V0QnlJZFZhcmlhbnQ6OnZpc2l0QWdncmVnYXRlKFZlcmlmaWVyU2xvdFZp
c2l0b3ImKTsKKworLy90ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgorLy92b2lkIEdldEJ5SWRW
YXJpYW50OjptYXJrSWZDaGVhcChWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBHZXRCeUlkVmFyaWFu
dDo6bWFya0lmQ2hlYXAxKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7Ci0gICAgbV9z
dHJ1Y3R1cmVTZXQubWFya0lmQ2hlYXAodmlzaXRvcik7CisgICAgbV9zdHJ1Y3R1cmVTZXQubWFy
a0lmQ2hlYXAxKHZpc2l0b3IpOwogfQogCisvL3RlbXBsYXRlIHZvaWQgR2V0QnlJZFZhcmlhbnQ6
Om1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJik7CisvL3RlbXBsYXRlIHZvaWQgR2V0QnlJZFZhcmlh
bnQ6Om1hcmtJZkNoZWFwKFZlcmlmaWVyU2xvdFZpc2l0b3ImKTsKKwogYm9vbCBHZXRCeUlkVmFy
aWFudDo6ZmluYWxpemUoVk0mIHZtKQogewogICAgIGlmICghbV9zdHJ1Y3R1cmVTZXQuaXNTdGls
bEFsaXZlKHZtKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlk
VmFyaWFudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9H
ZXRCeUlkVmFyaWFudC5oCShyZXZpc2lvbiAyNzIxOTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvR2V0QnlJZFZhcmlhbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNzcsOCArNzcs
MTAgQEAgcHVibGljOgogCiAgICAgYm9vbCBhdHRlbXB0VG9NZXJnZShjb25zdCBHZXRCeUlkVmFy
aWFudCYgb3RoZXIpOwogICAgIAotICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3Im
KTsKLSAgICB2b2lkIG1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJik7CisvLyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBWaXNpdG9yPiB2b2lkIHZpc2l0QWdncmVnYXRlKFZpc2l0b3ImKTsKKy8vICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgbWFya0lmQ2hlYXAoVmlzaXRvciYpOworICAg
IHZvaWQgdmlzaXRBZ2dyZWdhdGUxKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKKyAgICB2b2lkIG1h
cmtJZkNoZWFwMShBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAgICAgYm9vbCBmaW5hbGl6ZShWTSYp
OwogICAgIAogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5U3RhdHVzLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlTdGF0dXMuY3BwCShyZXZpc2lvbiAy
NzIxOTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlTdGF0dXMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC01MzAsMjAgKzUzMCwzMSBAQCB2b2lkIEdldEJ5U3RhdHVzOjpm
aWx0ZXIoY29uc3QgU3RydWN0dXJlCiAgICAgICAgIG1fc3RhdGUgPSBOb0luZm9ybWF0aW9uOwog
fQogCi12b2lkIEdldEJ5U3RhdHVzOjp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYgdmlzaXRv
cikKKy8vdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KKy8vdm9pZCBHZXRCeVN0YXR1czo6dmlz
aXRBZ2dyZWdhdGUoVmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgR2V0QnlTdGF0dXM6OnZpc2l0QWdn
cmVnYXRlMShBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGlmIChpc01vZHVs
ZU5hbWVzcGFjZSgpKQotICAgICAgICBtX21vZHVsZU5hbWVzcGFjZURhdGEtPm1faWRlbnRpZmll
ci52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKKyAgICAgICAgbV9tb2R1bGVOYW1lc3BhY2VEYXRh
LT5tX2lkZW50aWZpZXIudmlzaXRBZ2dyZWdhdGUxKHZpc2l0b3IpOwogICAgIGZvciAoR2V0QnlJ
ZFZhcmlhbnQmIHZhcmlhbnQgOiBtX3ZhcmlhbnRzKQotICAgICAgICB2YXJpYW50LnZpc2l0QWdn
cmVnYXRlKHZpc2l0b3IpOworICAgICAgICB2YXJpYW50LnZpc2l0QWdncmVnYXRlMSh2aXNpdG9y
KTsKIH0KIAotdm9pZCBHZXRCeVN0YXR1czo6bWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImIHZpc2l0
b3IpCisvL3RlbXBsYXRlIHZvaWQgR2V0QnlTdGF0dXM6OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNp
dG9yJik7CisvL3RlbXBsYXRlIHZvaWQgR2V0QnlTdGF0dXM6OnZpc2l0QWdncmVnYXRlKFZlcmlm
aWVyU2xvdFZpc2l0b3ImKTsKKworLy90ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgorLy92b2lk
IEdldEJ5U3RhdHVzOjptYXJrSWZDaGVhcChWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBHZXRCeVN0
YXR1czo6bWFya0lmQ2hlYXAxKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAg
Zm9yIChHZXRCeUlkVmFyaWFudCYgdmFyaWFudCA6IG1fdmFyaWFudHMpCi0gICAgICAgIHZhcmlh
bnQubWFya0lmQ2hlYXAodmlzaXRvcik7CisgICAgICAgIHZhcmlhbnQubWFya0lmQ2hlYXAxKHZp
c2l0b3IpOwogfQogCisvL3RlbXBsYXRlIHZvaWQgR2V0QnlTdGF0dXM6Om1hcmtJZkNoZWFwKFNs
b3RWaXNpdG9yJik7CisvL3RlbXBsYXRlIHZvaWQgR2V0QnlTdGF0dXM6Om1hcmtJZkNoZWFwKFZl
cmlmaWVyU2xvdFZpc2l0b3ImKTsKKworCiBib29sIEdldEJ5U3RhdHVzOjpmaW5hbGl6ZShWTSYg
dm0pCiB7CiAgICAgZm9yIChHZXRCeUlkVmFyaWFudCYgdmFyaWFudCA6IG1fdmFyaWFudHMpIHsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeVN0YXR1cy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeVN0YXR1cy5oCShy
ZXZpc2lvbiAyNzIxOTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlT
dGF0dXMuaAkod29ya2luZyBjb3B5KQpAQCAtMTE4LDggKzExOCwxMCBAQCBwdWJsaWM6CiAgICAg
SlNNb2R1bGVFbnZpcm9ubWVudCogbW9kdWxlRW52aXJvbm1lbnQoKSBjb25zdCB7IHJldHVybiBt
X21vZHVsZU5hbWVzcGFjZURhdGEtPm1fbW9kdWxlRW52aXJvbm1lbnQ7IH0KICAgICBTY29wZU9m
ZnNldCBzY29wZU9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fbW9kdWxlTmFtZXNwYWNlRGF0YS0+
bV9zY29wZU9mZnNldDsgfQogICAgIAotICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0
b3ImKTsKLSAgICB2b2lkIG1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJik7CisvLyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIHZpc2l0QWdncmVnYXRlKFZpc2l0b3ImKTsKKy8vICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgbWFya0lmQ2hlYXAoVmlzaXRvciYpOwor
ICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUxKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKKyAgICB2b2lk
IG1hcmtJZkNoZWFwMShBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAgICAgYm9vbCBmaW5hbGl6ZShW
TSYpOyAvLyBSZXR1cm4gdHJ1ZSBpZiB0aGlzIGdldHMgdG8gbGl2ZS4KIAogICAgIGJvb2wgYXBw
ZW5kVmFyaWFudChjb25zdCBHZXRCeUlkVmFyaWFudCYpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0luQnlJZFN0YXR1cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luQnlJZFN0YXR1cy5jcHAJKHJldmlzaW9uIDI3MjE5MikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbkJ5SWRTdGF0dXMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNTEsMTIgKzI1MSwxNyBAQCB2b2lkIEluQnlJZFN0YXR1czo6ZmlsdGVy
KGNvbnN0IFN0cnVjdHVyCiAgICAgICAgIG1fc3RhdGUgPSBOb0luZm9ybWF0aW9uOwogfQogCi12
b2lkIEluQnlJZFN0YXR1czo6bWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3Rl
bXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+CisvL3ZvaWQgSW5CeUlkU3RhdHVzOjptYXJrSWZDaGVh
cChWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBJbkJ5SWRTdGF0dXM6Om1hcmtJZkNoZWFwMShBYnN0
cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGZvciAoSW5CeUlkVmFyaWFudCYgdmFy
aWFudCA6IG1fdmFyaWFudHMpCi0gICAgICAgIHZhcmlhbnQubWFya0lmQ2hlYXAodmlzaXRvcik7
CisgICAgICAgIHZhcmlhbnQubWFya0lmQ2hlYXAxKHZpc2l0b3IpOwogfQogCisvL3RlbXBsYXRl
IHZvaWQgSW5CeUlkU3RhdHVzOjptYXJrSWZDaGVhcChTbG90VmlzaXRvciYpOworLy90ZW1wbGF0
ZSB2b2lkIEluQnlJZFN0YXR1czo6bWFya0lmQ2hlYXAoVmVyaWZpZXJTbG90VmlzaXRvciYpOwor
CiBib29sIEluQnlJZFN0YXR1czo6ZmluYWxpemUoVk0mIHZtKQogewogICAgIGZvciAoSW5CeUlk
VmFyaWFudCYgdmFyaWFudCA6IG1fdmFyaWFudHMpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9JbkJ5SWRTdGF0dXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvSW5CeUlkU3RhdHVzLmgJKHJldmlzaW9uIDI3MjE5MikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbkJ5SWRTdGF0dXMuaAkod29ya2luZyBjb3B5
KQpAQCAtMTA2LDcgKzEwNiw4IEBAIHB1YmxpYzoKICAgICAvLyBBdHRlbXB0cyB0byByZWR1Y2Ug
dGhlIHNldCBvZiB2YXJpYW50cyB0byBmaXQgdGhlIGdpdmVuIHN0cnVjdHVyZSBzZXQuIFRoaXMg
bWF5IGJlIGFwcHJveGltYXRlLgogICAgIHZvaWQgZmlsdGVyKGNvbnN0IFN0cnVjdHVyZVNldCYp
OwogICAgIAotICAgIHZvaWQgbWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImKTsKKy8vICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgbWFya0lmQ2hlYXAoVmlzaXRvciYpOworICAgIHZv
aWQgbWFya0lmQ2hlYXAxKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKICAgICBib29sIGZpbmFsaXpl
KFZNJik7CiAKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbkJ5SWRWYXJpYW50LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5CeUlkVmFyaWFudC5jcHAJKHJldmlz
aW9uIDI3MjE5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbkJ5SWRWYXJp
YW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjQsMTEgKzY0LDE2IEBAIGJvb2wgSW5CeUlkVmFy
aWFudDo6YXR0ZW1wdFRvTWVyZ2UoY29uc3QKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBJ
bkJ5SWRWYXJpYW50OjptYXJrSWZDaGVhcChTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vdGVtcGxh
dGU8dHlwZW5hbWUgVmlzaXRvcj4KKy8vdm9pZCBJbkJ5SWRWYXJpYW50OjptYXJrSWZDaGVhcChW
aXNpdG9yJiB2aXNpdG9yKQordm9pZCBJbkJ5SWRWYXJpYW50OjptYXJrSWZDaGVhcDEoQWJzdHJh
Y3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKLSAgICBtX3N0cnVjdHVyZVNldC5tYXJrSWZDaGVh
cCh2aXNpdG9yKTsKKyAgICBtX3N0cnVjdHVyZVNldC5tYXJrSWZDaGVhcDEodmlzaXRvcik7CiB9
CiAKKy8vdGVtcGxhdGUgdm9pZCBJbkJ5SWRWYXJpYW50OjptYXJrSWZDaGVhcChTbG90VmlzaXRv
ciYpOworLy90ZW1wbGF0ZSB2b2lkIEluQnlJZFZhcmlhbnQ6Om1hcmtJZkNoZWFwKFZlcmlmaWVy
U2xvdFZpc2l0b3ImKTsKKwogYm9vbCBJbkJ5SWRWYXJpYW50OjpmaW5hbGl6ZShWTSYgdm0pCiB7
CiAgICAgaWYgKCFtX3N0cnVjdHVyZVNldC5pc1N0aWxsQWxpdmUodm0pKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luQnlJZFZhcmlhbnQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5CeUlkVmFyaWFudC5oCShyZXZpc2lvbiAy
NzIxOTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5CeUlkVmFyaWFudC5o
CSh3b3JraW5nIGNvcHkpCkBAIC01Nyw3ICs1Nyw4IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgYXR0
ZW1wdFRvTWVyZ2UoY29uc3QgSW5CeUlkVmFyaWFudCYgb3RoZXIpOwogICAgIAotICAgIHZvaWQg
bWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImKTsKKy8vICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0
b3I+IHZvaWQgbWFya0lmQ2hlYXAoVmlzaXRvciYpOworICAgIHZvaWQgbWFya0lmQ2hlYXAxKEFi
c3RyYWN0U2xvdFZpc2l0b3ImKTsKICAgICBib29sIGZpbmFsaXplKFZNJik7CiAKICAgICB2b2lk
IGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9JbnRlcm5hbEZ1bmN0aW9uQWxsb2NhdGlvblByb2ZpbGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW50ZXJuYWxGdW5jdGlvbkFsbG9jYXRp
b25Qcm9maWxlLmgJKHJldmlzaW9uIDI3MjE5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9JbnRlcm5hbEZ1bmN0aW9uQWxsb2NhdGlvblByb2ZpbGUuaAkod29ya2luZyBjb3B5
KQpAQCAtMzksNyArMzksNyBAQCBwdWJsaWM6CiAgICAgU3RydWN0dXJlKiBjcmVhdGVBbGxvY2F0
aW9uU3RydWN0dXJlRnJvbUJhc2UoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTQ2VsbCogb3duZXIs
IEpTT2JqZWN0KiBwcm90b3R5cGUsIFN0cnVjdHVyZSogYmFzZSk7CiAKICAgICB2b2lkIGNsZWFy
KCkgeyBtX3N0cnVjdHVyZS5jbGVhcigpOyB9Ci0gICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShTbG90
VmlzaXRvciYgdmlzaXRvcikgeyB2aXNpdG9yLmFwcGVuZChtX3N0cnVjdHVyZSk7IH0KKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIHZpc2l0QWdncmVnYXRlKFZpc2l0b3ImIHZp
c2l0b3IpIHsgdmlzaXRvci5hcHBlbmQobV9zdHJ1Y3R1cmUpOyB9CiAKIHByaXZhdGU6CiAgICAg
V3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gbV9zdHJ1Y3R1cmU7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUu
aAkocmV2aXNpb24gMjcyMTkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09i
amVjdEFsbG9jYXRpb25Qcm9maWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTY0LDcgKzY0LDggQEAg
cHJvdGVjdGVkOgogICAgICAgICBBU1NFUlQoaXNOdWxsKCkpOwogICAgIH0KIAotICAgIHZvaWQg
dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgVmlzaXRvcj4KKyAgICB2b2lkIHZpc2l0QWdncmVnYXRlKFZpc2l0b3ImIHZpc2l0b3IpCiAg
ICAgewogICAgICAgICB2aXNpdG9yLmFwcGVuZChtX3N0cnVjdHVyZSk7CiAgICAgfQpAQCAtMTEw
LDcgKzExMSw4IEBAIHB1YmxpYzoKICAgICAgICAgQVNTRVJUKGlzTnVsbCgpKTsKICAgICB9CiAK
LSAgICB2b2lkIHZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFZpc2l0b3I+CisgICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShWaXNpdG9yJiB2
aXNpdG9yKQogICAgIHsKICAgICAgICAgQmFzZTo6dmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7CiAg
ICAgICAgIHZpc2l0b3IuYXBwZW5kKG1fcHJvdG90eXBlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAkocmV2aXNp
b24gMjcyMTkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGlj
QWNjZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzU4LDcgKzM1OCw5IEBAIGJvb2wgUG9seW1v
cnBoaWNBY2Nlc3M6OnZpc2l0V2VhayhWTSYgdm0KICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9v
bCBQb2x5bW9ycGhpY0FjY2Vzczo6cHJvcGFnYXRlVHJhbnNpdGlvbnMoU2xvdFZpc2l0b3ImIHZp
c2l0b3IpIGNvbnN0CisvL3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+CisvL2Jvb2wgUG9seW1v
cnBoaWNBY2Nlc3M6OnByb3BhZ2F0ZVRyYW5zaXRpb25zMTAoVmlzaXRvciYgdmlzaXRvcikgY29u
c3QKK2Jvb2wgUG9seW1vcnBoaWNBY2Nlc3M6OnByb3BhZ2F0ZVRyYW5zaXRpb25zMTAoQWJzdHJh
Y3RTbG90VmlzaXRvciYgdmlzaXRvcikgY29uc3QKIHsKICAgICBib29sIHJlc3VsdCA9IHRydWU7
CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemUoKTsgKytpKQpAQCAtMzY2LDEyICsz
NjgsMjEgQEAgYm9vbCBQb2x5bW9ycGhpY0FjY2Vzczo6cHJvcGFnYXRlVHJhbnNpdAogICAgIHJl
dHVybiByZXN1bHQ7CiB9CiAKLXZvaWQgUG9seW1vcnBoaWNBY2Nlc3M6OnZpc2l0QWdncmVnYXRl
KFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy90ZW1wbGF0ZTw+IGJvb2wgUG9seW1vcnBoaWNBY2Nl
c3M6OnByb3BhZ2F0ZVRyYW5zaXRpb25zMTAoU2xvdFZpc2l0b3ImKSBjb25zdDsKKy8vdGVtcGxh
dGU8PiBib29sIFBvbHltb3JwaGljQWNjZXNzOjpwcm9wYWdhdGVUcmFuc2l0aW9uczEwKEFic3Ry
YWN0U2xvdFZpc2l0b3ImKSBjb25zdDsKKworCisvL3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+
CisvL3ZvaWQgUG9seW1vcnBoaWNBY2Nlc3M6OnZpc2l0QWdncmVnYXRlKFZpc2l0b3ImIHZpc2l0
b3IpCit2b2lkIFBvbHltb3JwaGljQWNjZXNzOjp2aXNpdEFnZ3JlZ2F0ZTEoQWJzdHJhY3RTbG90
VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZSgp
OyArK2kpCi0gICAgICAgIGF0KGkpLnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOworICAgICAgICBh
dChpKS52aXNpdEFnZ3JlZ2F0ZTEodmlzaXRvcik7CiB9CiAKKy8vdGVtcGxhdGUgdm9pZCBQb2x5
bW9ycGhpY0FjY2Vzczo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImKTsKKy8vdGVtcGxhdGUg
dm9pZCBQb2x5bW9ycGhpY0FjY2Vzczo6dmlzaXRBZ2dyZWdhdGUoVmVyaWZpZXJTbG90VmlzaXRv
ciYpOworCiB2b2lkIFBvbHltb3JwaGljQWNjZXNzOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNv
bnN0CiB7CiAgICAgb3V0LnByaW50KFJhd1BvaW50ZXIodGhpcyksICI6WyIpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmgJ
KHJldmlzaW9uIDI3MjE5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5
bW9ycGhpY0FjY2Vzcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNTIsMTQgKzE1MiwxNiBAQCBwdWJs
aWM6CiAgICAgY29uc3QgQWNjZXNzQ2FzZSYgYXQodW5zaWduZWQgaSkgY29uc3QgeyByZXR1cm4g
Km1fbGlzdFtpXTsgfQogICAgIGNvbnN0IEFjY2Vzc0Nhc2UmIG9wZXJhdG9yW10odW5zaWduZWQg
aSkgY29uc3QgeyByZXR1cm4gKm1fbGlzdFtpXTsgfQogCi0gICAgdm9pZCB2aXNpdEFnZ3JlZ2F0
ZShTbG90VmlzaXRvciYpOworLy8gICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCB2
aXNpdEFnZ3JlZ2F0ZShWaXNpdG9yJik7CisgICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZTEoQWJzdHJh
Y3RTbG90VmlzaXRvciYpOwogCiAgICAgLy8gSWYgdGhpcyByZXR1cm5zIGZhbHNlIHRoZW4gd2Ug
YXJlIHJlcXVlc3RpbmcgYSByZXNldCBvZiB0aGUgb3duaW5nIFN0cnVjdHVyZVN0dWJJbmZvLgog
ICAgIGJvb2wgdmlzaXRXZWFrKFZNJikgY29uc3Q7CiAgICAgCiAgICAgLy8gVGhpcyByZXR1cm5z
IHRydWUgaWYgaXQgaGFzIG1hcmtlZCBldmVyeXRoaW5nIGl0IHdpbGwgZXZlciBtYXJrZWQuIFRo
aXMgY2FuIGJlIHVzZWQgYXMgYW4KICAgICAvLyBvcHRpbWl6YXRpb24gdG8gdGhlbiBhdm9pZCBj
YWxsaW5nIHRoaXMgbWV0aG9kIGFnYWluIGR1cmluZyB0aGUgZml4cG9pbnQuCi0gICAgYm9vbCBw
cm9wYWdhdGVUcmFuc2l0aW9ucyhTbG90VmlzaXRvciYpIGNvbnN0OworLy8gICAgdGVtcGxhdGU8
dHlwZW5hbWUgVmlzaXRvcj4gYm9vbCBwcm9wYWdhdGVUcmFuc2l0aW9uczEwKFZpc2l0b3ImKSBj
b25zdDsKKyAgICBib29sIHByb3BhZ2F0ZVRyYW5zaXRpb25zMTAoQWJzdHJhY3RTbG90VmlzaXRv
ciYpIGNvbnN0OwogCiAgICAgdm9pZCBhYm91dFRvRGllKCk7CiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5jcHAJKHJldmlzaW9uIDI3
MjE5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzk2LDEyICszOTYsMTcgQEAgUHV0QnlJZFN0YXR1cyBQdXRC
eUlkU3RhdHVzOjpzbG93VmVyc2lvbgogICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKG1ha2VzQ2Fs
bHMoKSA/IE1ha2VzQ2FsbHMgOiBUYWtlc1Nsb3dQYXRoKTsKIH0KIAotdm9pZCBQdXRCeUlkU3Rh
dHVzOjptYXJrSWZDaGVhcChTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vdGVtcGxhdGU8dHlwZW5h
bWUgVmlzaXRvcj4KKy8vdm9pZCBQdXRCeUlkU3RhdHVzOjptYXJrSWZDaGVhcChWaXNpdG9yJiB2
aXNpdG9yKQordm9pZCBQdXRCeUlkU3RhdHVzOjptYXJrSWZDaGVhcDEoQWJzdHJhY3RTbG90Vmlz
aXRvciYgdmlzaXRvcikKIHsKICAgICBmb3IgKFB1dEJ5SWRWYXJpYW50JiB2YXJpYW50IDogbV92
YXJpYW50cykKLSAgICAgICAgdmFyaWFudC5tYXJrSWZDaGVhcCh2aXNpdG9yKTsKKyAgICAgICAg
dmFyaWFudC5tYXJrSWZDaGVhcDEodmlzaXRvcik7CiB9CiAKKy8vdGVtcGxhdGUgdm9pZCBQdXRC
eUlkU3RhdHVzOjptYXJrSWZDaGVhcChTbG90VmlzaXRvciYpOworLy90ZW1wbGF0ZSB2b2lkIFB1
dEJ5SWRTdGF0dXM6Om1hcmtJZkNoZWFwKFZlcmlmaWVyU2xvdFZpc2l0b3ImKTsKKwogYm9vbCBQ
dXRCeUlkU3RhdHVzOjpmaW5hbGl6ZShWTSYgdm0pCiB7CiAgICAgZm9yIChQdXRCeUlkVmFyaWFu
dCYgdmFyaWFudCA6IG1fdmFyaWFudHMpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9QdXRCeUlkU3RhdHVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuaAkocmV2aXNpb24gMjcyMTkyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuaAkod29ya2luZyBjb3B5KQpA
QCAtMTE3LDcgKzExNyw4IEBAIHB1YmxpYzoKICAgICBjb25zdCBQdXRCeUlkVmFyaWFudCYgYXQo
c2l6ZV90IGluZGV4KSBjb25zdCB7IHJldHVybiBtX3ZhcmlhbnRzW2luZGV4XTsgfQogICAgIGNv
bnN0IFB1dEJ5SWRWYXJpYW50JiBvcGVyYXRvcltdKHNpemVfdCBpbmRleCkgY29uc3QgeyByZXR1
cm4gYXQoaW5kZXgpOyB9CiAgICAgCi0gICAgdm9pZCBtYXJrSWZDaGVhcChTbG90VmlzaXRvciYp
OworLy8gICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCBtYXJrSWZDaGVhcChWaXNp
dG9yJik7CisgICAgdm9pZCBtYXJrSWZDaGVhcDEoQWJzdHJhY3RTbG90VmlzaXRvciYpOwogICAg
IGJvb2wgZmluYWxpemUoVk0mKTsKICAgICAKICAgICB2b2lkIG1lcmdlKGNvbnN0IFB1dEJ5SWRT
dGF0dXMmKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkVmFy
aWFudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1
dEJ5SWRWYXJpYW50LmNwcAkocmV2aXNpb24gMjcyMTkyKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYyLDEz
ICsyNjIsMTggQEAgYm9vbCBQdXRCeUlkVmFyaWFudDo6YXR0ZW1wdFRvTWVyZ2VUcmFucwogICAg
IHJldHVybiB0cnVlOwogfQogCi12b2lkIFB1dEJ5SWRWYXJpYW50OjptYXJrSWZDaGVhcChTbG90
VmlzaXRvciYgdmlzaXRvcikKKy8vdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KKy8vdm9pZCBQ
dXRCeUlkVmFyaWFudDo6bWFya0lmQ2hlYXAoVmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgUHV0QnlJ
ZFZhcmlhbnQ6Om1hcmtJZkNoZWFwMShBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewot
ICAgIG1fb2xkU3RydWN0dXJlLm1hcmtJZkNoZWFwKHZpc2l0b3IpOworICAgIG1fb2xkU3RydWN0
dXJlLm1hcmtJZkNoZWFwMSh2aXNpdG9yKTsKICAgICBpZiAobV9uZXdTdHJ1Y3R1cmUpCi0gICAg
ICAgIG1fbmV3U3RydWN0dXJlLT5tYXJrSWZDaGVhcCh2aXNpdG9yKTsKKyAgICAgICAgbV9uZXdT
dHJ1Y3R1cmUtPm1hcmtJZkNoZWFwMSh2aXNpdG9yKTsKIH0KIAorLy90ZW1wbGF0ZSB2b2lkIFB1
dEJ5SWRWYXJpYW50OjptYXJrSWZDaGVhcChTbG90VmlzaXRvciYpOworLy90ZW1wbGF0ZSB2b2lk
IFB1dEJ5SWRWYXJpYW50OjptYXJrSWZDaGVhcChWZXJpZmllclNsb3RWaXNpdG9yJik7CisKIGJv
b2wgUHV0QnlJZFZhcmlhbnQ6OmZpbmFsaXplKFZNJiB2bSkKIHsKICAgICBpZiAoIW1fb2xkU3Ry
dWN0dXJlLmlzU3RpbGxBbGl2ZSh2bSkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvUHV0QnlJZFZhcmlhbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuaAkocmV2aXNpb24gMjcyMTkyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmgJKHdvcmtpbmcgY29weSkK
QEAgLTEzMiw3ICsxMzIsOCBAQCBwdWJsaWM6CiAKICAgICBib29sIGF0dGVtcHRUb01lcmdlKGNv
bnN0IFB1dEJ5SWRWYXJpYW50JiBvdGhlcik7CiAgICAgCi0gICAgdm9pZCBtYXJrSWZDaGVhcChT
bG90VmlzaXRvciYpOworLy8gICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCBtYXJr
SWZDaGVhcChWaXNpdG9yJik7CisgICAgdm9pZCBtYXJrSWZDaGVhcDEoQWJzdHJhY3RTbG90Vmlz
aXRvciYpOwogICAgIGJvb2wgZmluYWxpemUoVk0mKTsKICAgICAKICAgICB2b2lkIGR1bXAoUHJp
bnRTdHJlYW0mKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9S
ZWNvcmRlZFN0YXR1c2VzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvUmVjb3JkZWRTdGF0dXNlcy5jcHAJKHJldmlzaW9uIDI3MjE5MikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9SZWNvcmRlZFN0YXR1c2VzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtODQsMjYgKzg0LDM2IEBAIERlbGV0ZUJ5U3RhdHVzKiBSZWNvcmRlZFN0YXR1c2Vz
OjphZGREZWwKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi12b2lkIFJlY29yZGVkU3RhdHVzZXM6
OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvcikKKy8vdGVtcGxhdGU8dHlw
ZW5hbWUgVmlzaXRvcj4KKy8vdm9pZCBSZWNvcmRlZFN0YXR1c2VzOjp2aXNpdEFnZ3JlZ2F0ZShW
aXNpdG9yJiB2aXNpdG9yKQordm9pZCBSZWNvcmRlZFN0YXR1c2VzOjp2aXNpdEFnZ3JlZ2F0ZTEo
QWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBmb3IgKGF1dG8mIHBhaXIgOiBn
ZXRzKQotICAgICAgICBwYWlyLnNlY29uZC0+dmlzaXRBZ2dyZWdhdGUoc2xvdFZpc2l0b3IpOwor
ICAgICAgICBwYWlyLnNlY29uZC0+dmlzaXRBZ2dyZWdhdGUxKHZpc2l0b3IpOwogICAgIGZvciAo
YXV0byYgcGFpciA6IGRlbGV0ZXMpCi0gICAgICAgIHBhaXIuc2Vjb25kLT52aXNpdEFnZ3JlZ2F0
ZShzbG90VmlzaXRvcik7CisgICAgICAgIHBhaXIuc2Vjb25kLT52aXNpdEFnZ3JlZ2F0ZTEodmlz
aXRvcik7CiB9CiAKLXZvaWQgUmVjb3JkZWRTdGF0dXNlczo6bWFya0lmQ2hlYXAoU2xvdFZpc2l0
b3ImIHNsb3RWaXNpdG9yKQorLy90ZW1wbGF0ZSB2b2lkIFJlY29yZGVkU3RhdHVzZXM6OnZpc2l0
QWdncmVnYXRlKFNsb3RWaXNpdG9yJik7CisvL3RlbXBsYXRlIHZvaWQgUmVjb3JkZWRTdGF0dXNl
czo6dmlzaXRBZ2dyZWdhdGUoVmVyaWZpZXJTbG90VmlzaXRvciYpOworCisvL3RlbXBsYXRlPHR5
cGVuYW1lIFZpc2l0b3I+CisvL3ZvaWQgUmVjb3JkZWRTdGF0dXNlczo6bWFya0lmQ2hlYXAoVmlz
aXRvciYgdmlzaXRvcikKK3ZvaWQgUmVjb3JkZWRTdGF0dXNlczo6bWFya0lmQ2hlYXAxKEFic3Ry
YWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgZm9yIChhdXRvJiBwYWlyIDogZ2V0cykK
LSAgICAgICAgcGFpci5zZWNvbmQtPm1hcmtJZkNoZWFwKHNsb3RWaXNpdG9yKTsKKyAgICAgICAg
cGFpci5zZWNvbmQtPm1hcmtJZkNoZWFwMSh2aXNpdG9yKTsKICAgICBmb3IgKGF1dG8mIHBhaXIg
OiBwdXRzKQotICAgICAgICBwYWlyLnNlY29uZC0+bWFya0lmQ2hlYXAoc2xvdFZpc2l0b3IpOwor
ICAgICAgICBwYWlyLnNlY29uZC0+bWFya0lmQ2hlYXAxKHZpc2l0b3IpOwogICAgIGZvciAoYXV0
byYgcGFpciA6IGlucykKLSAgICAgICAgcGFpci5zZWNvbmQtPm1hcmtJZkNoZWFwKHNsb3RWaXNp
dG9yKTsKKyAgICAgICAgcGFpci5zZWNvbmQtPm1hcmtJZkNoZWFwMSh2aXNpdG9yKTsKICAgICBm
b3IgKGF1dG8mIHBhaXIgOiBkZWxldGVzKQotICAgICAgICBwYWlyLnNlY29uZC0+bWFya0lmQ2hl
YXAoc2xvdFZpc2l0b3IpOworICAgICAgICBwYWlyLnNlY29uZC0+bWFya0lmQ2hlYXAxKHZpc2l0
b3IpOwogfQogCisvL3RlbXBsYXRlIHZvaWQgUmVjb3JkZWRTdGF0dXNlczo6bWFya0lmQ2hlYXAo
U2xvdFZpc2l0b3ImKTsKKy8vdGVtcGxhdGUgdm9pZCBSZWNvcmRlZFN0YXR1c2VzOjptYXJrSWZD
aGVhcChWZXJpZmllclNsb3RWaXNpdG9yJik7CisKIHZvaWQgUmVjb3JkZWRTdGF0dXNlczo6Zmlu
YWxpemVXaXRob3V0RGVsZXRpbmcoVk0mIHZtKQogewogICAgIC8vIFRoaXMgdmFyaWFudCBvZiBm
aW5hbGl6ZSBnZXRzIGNhbGxlZCBmcm9tIHdpdGhpbiBncmFwaCBzYWZlcG9pbnRzIC0tIHNvIHRo
ZXJlIG1heSBiZSBERkcgSVIgaW4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9SZWNvcmRlZFN0YXR1c2VzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1JlY29yZGVkU3RhdHVzZXMuaAkocmV2aXNpb24gMjcyMTkyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1JlY29yZGVkU3RhdHVzZXMuaAkod29ya2luZyBjb3B5
KQpAQCAtNTAsOCArNTAsMTAgQEAgc3RydWN0IFJlY29yZGVkU3RhdHVzZXMgewogICAgIEluQnlJ
ZFN0YXR1cyogYWRkSW5CeUlkU3RhdHVzKGNvbnN0IENvZGVPcmlnaW4mLCBjb25zdCBJbkJ5SWRT
dGF0dXMmKTsKICAgICBEZWxldGVCeVN0YXR1cyogYWRkRGVsZXRlQnlTdGF0dXMoY29uc3QgQ29k
ZU9yaWdpbiYsIGNvbnN0IERlbGV0ZUJ5U3RhdHVzJik7CiAgICAgCi0gICAgdm9pZCB2aXNpdEFn
Z3JlZ2F0ZShTbG90VmlzaXRvciYpOwotICAgIHZvaWQgbWFya0lmQ2hlYXAoU2xvdFZpc2l0b3Im
KTsKKy8vICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgdmlzaXRBZ2dyZWdhdGUo
VmlzaXRvciYpOworLy8gICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCBtYXJrSWZD
aGVhcChWaXNpdG9yJik7CisgICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZTEoQWJzdHJhY3RTbG90Vmlz
aXRvciYpOworICAgIHZvaWQgbWFya0lmQ2hlYXAxKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKICAg
ICAKICAgICB2b2lkIGZpbmFsaXplV2l0aG91dERlbGV0aW5nKFZNJik7CiAgICAgdm9pZCBmaW5h
bGl6ZShWTSYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVy
ZVNldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0
cnVjdHVyZVNldC5jcHAJKHJldmlzaW9uIDI3MjE5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9TdHJ1Y3R1cmVTZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwxMiArMzEs
MTcgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLXZvaWQgU3RydWN0dXJlU2V0OjptYXJrSWZDaGVh
cChTbG90VmlzaXRvciYgdmlzaXRvcikgY29uc3QKKy8vdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRv
cj4KKy8vdm9pZCBTdHJ1Y3R1cmVTZXQ6Om1hcmtJZkNoZWFwKFZpc2l0b3ImIHZpc2l0b3IpIGNv
bnN0Cit2b2lkIFN0cnVjdHVyZVNldDo6bWFya0lmQ2hlYXAxKEFic3RyYWN0U2xvdFZpc2l0b3Im
IHZpc2l0b3IpIGNvbnN0CiB7CiAgICAgZm9yIChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA6ICp0aGlz
KQotICAgICAgICBzdHJ1Y3R1cmUtPm1hcmtJZkNoZWFwKHZpc2l0b3IpOworICAgICAgICBzdHJ1
Y3R1cmUtPm1hcmtJZkNoZWFwMSh2aXNpdG9yKTsKIH0KIAorLy90ZW1wbGF0ZSB2b2lkIFN0cnVj
dHVyZVNldDo6bWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImKSBjb25zdDsKKy8vdGVtcGxhdGUgdm9p
ZCBTdHJ1Y3R1cmVTZXQ6Om1hcmtJZkNoZWFwKFZlcmlmaWVyU2xvdFZpc2l0b3ImKSBjb25zdDsK
KwogYm9vbCBTdHJ1Y3R1cmVTZXQ6OmlzU3RpbGxBbGl2ZShWTSYgdm0pIGNvbnN0CiB7CiAgICAg
Zm9yIChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA6ICp0aGlzKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVNldC5oCShyZXZpc2lvbiAyNzIxOTIpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU2V0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTU0LDcgKzU0LDggQEAgcHVibGljOgogICAgICAgICByZXR1cm4gb25seUVudHJ5
KCk7CiAgICAgfQogCi0gICAgdm9pZCBtYXJrSWZDaGVhcChTbG90VmlzaXRvciYpIGNvbnN0Owor
Ly8gICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCBtYXJrSWZDaGVhcChWaXNpdG9y
JikgY29uc3Q7CisgICAgdm9pZCBtYXJrSWZDaGVhcDEoQWJzdHJhY3RTbG90VmlzaXRvciYpIGNv
bnN0OwogICAgIGJvb2wgaXNTdGlsbEFsaXZlKFZNJikgY29uc3Q7CiAgICAgCiAgICAgdm9pZCBk
dW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiwgRHVtcENvbnRleHQqKSBjb25zdDsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZv
LmNwcAkocmV2aXNpb24gMjcyMTkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1N0cnVjdHVyZVN0dWJJbmZvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjkwLDEyICsyOTAsMTQg
QEAgdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6cmVzZXQoY29uc3QgQ29uYwogICAgIHNldENhY2hl
VHlwZShsb2NrZXIsIENhY2hlVHlwZTo6VW5zZXQpOwogfQogCi12b2lkIFN0cnVjdHVyZVN0dWJJ
bmZvOjp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vdGVtcGxhdGU8dHlw
ZW5hbWUgVmlzaXRvcj4KKy8vdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6dmlzaXRBZ2dyZWdhdGUo
VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgU3RydWN0dXJlU3R1YkluZm86OnZpc2l0QWdncmVnYXRl
MShBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHsKICAgICAgICAgYXV0byBs
b2NrZXIgPSBob2xkTG9jayhtX2J1ZmZlcmVkU3RydWN0dXJlc0xvY2spOwogICAgICAgICBmb3Ig
KGF1dG8mIGJ1ZmZlcmVkU3RydWN0dXJlIDogbV9idWZmZXJlZFN0cnVjdHVyZXMpCi0gICAgICAg
ICAgICBidWZmZXJlZFN0cnVjdHVyZS5ieVZhbElkKCkudmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7
CisgICAgICAgICAgICBidWZmZXJlZFN0cnVjdHVyZS5ieVZhbElkKCkudmlzaXRBZ2dyZWdhdGUx
KHZpc2l0b3IpOwogICAgIH0KICAgICBzd2l0Y2ggKG1fY2FjaGVUeXBlKSB7CiAgICAgY2FzZSBD
YWNoZVR5cGU6OlVuc2V0OgpAQCAtMzA1LDEwICszMDcsMTAgQEAgdm9pZCBTdHJ1Y3R1cmVTdHVi
SW5mbzo6dmlzaXRBZ2dyZWdhdGUoUwogICAgIGNhc2UgQ2FjaGVUeXBlOjpQdXRCeUlkUmVwbGFj
ZToKICAgICBjYXNlIENhY2hlVHlwZTo6SW5CeUlkU2VsZjoKICAgICBjYXNlIENhY2hlVHlwZTo6
R2V0QnlJZFNlbGY6Ci0gICAgICAgIG1faWRlbnRpZmllci52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9y
KTsKKyAgICAgICAgbV9pZGVudGlmaWVyLnZpc2l0QWdncmVnYXRlMSh2aXNpdG9yKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIGNhc2UgQ2FjaGVUeXBlOjpTdHViOgotICAgICAgICB1LnN0dWItPnZp
c2l0QWdncmVnYXRlKHZpc2l0b3IpOworICAgICAgICB1LnN0dWItPnZpc2l0QWdncmVnYXRlMSh2
aXNpdG9yKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKQEAgLTMxNiw2ICszMTgsOSBA
QCB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjp2aXNpdEFnZ3JlZ2F0ZShTCiAgICAgcmV0dXJuOwog
fQogCisvL3RlbXBsYXRlIHZvaWQgU3RydWN0dXJlU3R1YkluZm86OnZpc2l0QWdncmVnYXRlKFNs
b3RWaXNpdG9yJik7CisvL3RlbXBsYXRlIHZvaWQgU3RydWN0dXJlU3R1YkluZm86OnZpc2l0QWdn
cmVnYXRlKFZlcmlmaWVyU2xvdFZpc2l0b3ImKTsKKwogdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6
dmlzaXRXZWFrUmVmZXJlbmNlcyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXJCYXNlJiBsb2NrZXIs
IENvZGVCbG9jayogY29kZUJsb2NrKQogewogICAgIFZNJiB2bSA9IGNvZGVCbG9jay0+dm0oKTsK
QEAgLTM0NiwyNCArMzUxLDMxIEBAIHZvaWQgU3RydWN0dXJlU3R1YkluZm86OnZpc2l0V2Vha1Jl
ZmVyZW4KICAgICByZXNldEJ5R0MgPSB0cnVlOwogfQogCi1ib29sIFN0cnVjdHVyZVN0dWJJbmZv
Ojpwcm9wYWdhdGVUcmFuc2l0aW9ucyhTbG90VmlzaXRvciYgdmlzaXRvcikKLXsKLSAgICBzd2l0
Y2ggKG1fY2FjaGVUeXBlKSB7Ci0gICAgY2FzZSBDYWNoZVR5cGU6OlVuc2V0OgotICAgIGNhc2Ug
Q2FjaGVUeXBlOjpBcnJheUxlbmd0aDoKLSAgICBjYXNlIENhY2hlVHlwZTo6U3RyaW5nTGVuZ3Ro
OgotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBjYXNlIENhY2hlVHlwZTo6R2V0QnlJZFNlbGY6
Ci0gICAgY2FzZSBDYWNoZVR5cGU6OlB1dEJ5SWRSZXBsYWNlOgotICAgIGNhc2UgQ2FjaGVUeXBl
OjpJbkJ5SWRTZWxmOgotICAgICAgICByZXR1cm4gdS5ieUlkU2VsZi5iYXNlT2JqZWN0U3RydWN0
dXJlLT5tYXJrSWZDaGVhcCh2aXNpdG9yKTsKLSAgICBjYXNlIENhY2hlVHlwZTo6U3R1YjoKLSAg
ICAgICAgcmV0dXJuIHUuc3R1Yi0+cHJvcGFnYXRlVHJhbnNpdGlvbnModmlzaXRvcik7Ci0gICAg
fQotICAgIAotICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIHRy
dWU7Ci19CisvL3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+CisvL2Jvb2wgU3RydWN0dXJlU3R1
YkluZm86OnByb3BhZ2F0ZVRyYW5zaXRpb25zMShWaXNpdG9yJiB2aXNpdG9yKQorLy97CisvLyAg
ICBzd2l0Y2ggKG1fY2FjaGVUeXBlKSB7CisvLyAgICBjYXNlIENhY2hlVHlwZTo6VW5zZXQ6Cisv
LyAgICBjYXNlIENhY2hlVHlwZTo6QXJyYXlMZW5ndGg6CisvLyAgICBjYXNlIENhY2hlVHlwZTo6
U3RyaW5nTGVuZ3RoOgorLy8gICAgICAgIHJldHVybiB0cnVlOworLy8gICAgY2FzZSBDYWNoZVR5
cGU6OkdldEJ5SWRTZWxmOgorLy8gICAgY2FzZSBDYWNoZVR5cGU6OlB1dEJ5SWRSZXBsYWNlOgor
Ly8gICAgY2FzZSBDYWNoZVR5cGU6OkluQnlJZFNlbGY6CisvLyAgICAgICAgcmV0dXJuIHUuYnlJ
ZFNlbGYuYmFzZU9iamVjdFN0cnVjdHVyZS0+bWFya0lmQ2hlYXAxKHZpc2l0b3IpOworLy8gICAg
ICAgIHJldHVybiBmYWxzZTsKKy8vICAgIGNhc2UgQ2FjaGVUeXBlOjpTdHViOgorLy8gICAgICAg
IHJldHVybiB1LnN0dWItPnByb3BhZ2F0ZVRyYW5zaXRpb25zMTAodmlzaXRvcik7CisvLyAgICAg
ICAgcmV0dXJuIGZhbHNlOworLy8gICAgfQorLy8KKy8vLy8gICAgVU5VU0VEX1BBUkFNKHZpc2l0
b3IpOyAvLyBtbGFtIFRFU1QKKy8vICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisv
LyAgICByZXR1cm4gdHJ1ZTsKKy8vfQorLy8KKy8vdGVtcGxhdGU8PiBib29sIFN0cnVjdHVyZVN0
dWJJbmZvOjpwcm9wYWdhdGVUcmFuc2l0aW9uczEoU2xvdFZpc2l0b3ImKTsKKy8vdGVtcGxhdGU8
PiBib29sIFN0cnVjdHVyZVN0dWJJbmZvOjpwcm9wYWdhdGVUcmFuc2l0aW9uczEoQWJzdHJhY3RT
bG90VmlzaXRvciYpOwogCiBTdHViSW5mb1N1bW1hcnkgU3RydWN0dXJlU3R1YkluZm86OnN1bW1h
cnkoVk0mIHZtKSBjb25zdAogewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1N0cnVjdHVyZVN0dWJJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgJKHJldmlzaW9uIDI3MjE5MikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCSh3b3JraW5nIGNv
cHkpCkBAIC05MSwxNCArOTEsMTYgQEAgcHVibGljOgogICAgIHZvaWQgZGVyZWYoKTsKICAgICB2
b2lkIGFib3V0VG9EaWUoKTsKIAotICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3Im
KTsKKy8vICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgdmlzaXRBZ2dyZWdhdGUo
VmlzaXRvciYpOworICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUxKEFic3RyYWN0U2xvdFZpc2l0b3Im
KTsKIAogICAgIC8vIENoZWNrIGlmIHRoZSBzdHViIGhhcyB3ZWFrIHJlZmVyZW5jZXMgdGhhdCBh
cmUgZGVhZC4gSWYgaXQgZG9lcywgdGhlbiBpdCByZXNldHMgaXRzZWxmLAogICAgIC8vIGVpdGhl
ciBlbnRpcmVseSBvciBqdXN0IGVub3VnaCB0byBlbnN1cmUgdGhhdCB0aG9zZSBkZWFkIHBvaW50
ZXJzIGRvbid0IGdldCB1c2VkIGFueW1vcmUuCiAgICAgdm9pZCB2aXNpdFdlYWtSZWZlcmVuY2Vz
KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlckJhc2UmLCBDb2RlQmxvY2sqKTsKICAgICAKICAgICAv
LyBUaGlzIHJldHVybnMgdHJ1ZSBpZiBpdCBoYXMgbWFya2VkIGV2ZXJ5dGhpbmcgdGhhdCBpdCB3
aWxsIGV2ZXIgbWFyay4KLSAgICBib29sIHByb3BhZ2F0ZVRyYW5zaXRpb25zKFNsb3RWaXNpdG9y
Jik7CisvLyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiBib29sIHByb3BhZ2F0ZVRyYW5z
aXRpb25zMShWaXNpdG9yJik7CisgICAgYm9vbCBwcm9wYWdhdGVUcmFuc2l0aW9uczEoQWJzdHJh
Y3RTbG90VmlzaXRvciYpOwogICAgICAgICAKICAgICBTdHViSW5mb1N1bW1hcnkgc3VtbWFyeShW
TSYpIGNvbnN0OwogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Vu
bGlua2VkQ29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwCShyZXZpc2lvbiAyNzIxOTIpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE5IEFw
cGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDIw
IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtNzEsNyArNzEsOCBAQCBVbmxpbmtlZENvZGVCbG9jazo6VW5saW5rZWRDb2Rl
QmxvY2soVk0mCiAgICAgfQogfQogCi12b2lkIFVubGlua2VkQ29kZUJsb2NrOjp2aXNpdENoaWxk
cmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBWaXNpdG9yPgordm9pZCBVbmxpbmtlZENvZGVCbG9jazo6dmlzaXRDaGlsZHJlbkltcGwoSlND
ZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFVubGlua2VkQ29kZUJsb2NrKiB0
aGlzT2JqZWN0ID0ganNDYXN0PFVubGlua2VkQ29kZUJsb2NrKj4oY2VsbCk7CiAgICAgQVNTRVJU
X0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtOTAsNiArOTEsOCBA
QCB2b2lkIFVubGlua2VkQ29kZUJsb2NrOjp2aXNpdENoaWxkcmVuKEpTCiAgICAgdmlzaXRvci5y
ZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQoZXh0cmFNZW1vcnkpOwogfQogCitERUZJTkVfVklTSVRf
Q0hJTERSRU4oVW5saW5rZWRDb2RlQmxvY2spOworCiBzaXplX3QgVW5saW5rZWRDb2RlQmxvY2s6
OmVzdGltYXRlZFNpemUoSlNDZWxsKiBjZWxsLCBWTSYgdm0pCiB7CiAgICAgVW5saW5rZWRDb2Rl
QmxvY2sqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8VW5saW5rZWRDb2RlQmxvY2sqPihjZWxsKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVC
bG9jay5oCShyZXZpc2lvbiAyNzIxOTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvVW5saW5rZWRDb2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxOSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQyMyw3ICs0MjMsNyBA
QCBwcml2YXRlOgogICAgIFJlZkNvdW50ZWRBcnJheTxFeHByZXNzaW9uUmFuZ2VJbmZvPiBtX2V4
cHJlc3Npb25JbmZvOwogCiBwcm90ZWN0ZWQ6Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJl
bihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAg
ICAgc3RhdGljIHNpemVfdCBlc3RpbWF0ZWRTaXplKEpTQ2VsbCosIFZNJik7CiAKIHB1YmxpYzoK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9uRXhl
Y3V0YWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1VubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlLmNwcAkocmV2aXNpb24gMjcyMTkyKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTItMjAxOSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTItMjAyMCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTE0MSw3ICsxNDEsOCBAQCB2b2lkIFVubGlua2VkRnVuY3Rp
b25FeGVjdXRhYmxlOjpkZXN0cm95CiAgICAgc3RhdGljX2Nhc3Q8VW5saW5rZWRGdW5jdGlvbkV4
ZWN1dGFibGUqPihjZWxsKS0+flVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKCk7CiB9CiAKLXZv
aWQgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxs
LCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lk
IFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNl
bGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUq
IHRoaXNPYmplY3QgPSBqc0Nhc3Q8VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqPihjZWxsKTsK
ICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC0x
NjQsNiArMTY1LDggQEAgdm9pZCBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6dmlzaXRDaAog
ICAgIH0KIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKFVubGlua2VkRnVuY3Rpb25FeGVjdXRh
YmxlKTsKKwogU291cmNlQ29kZSBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6bGlua2VkU291
cmNlQ29kZShjb25zdCBTb3VyY2VDb2RlJiBwYXNzZWRQYXJlbnRTb3VyY2UpIGNvbnN0CiB7CiAg
ICAgY29uc3QgU291cmNlQ29kZSYgcGFyZW50U291cmNlID0gIW1faXNCdWlsdGluRGVmYXVsdENs
YXNzQ29uc3RydWN0b3IgPyBwYXNzZWRQYXJlbnRTb3VyY2UgOiBCdWlsdGluRXhlY3V0YWJsZXM6
OmRlZmF1bHRDb25zdHJ1Y3RvclNvdXJjZUNvZGUoY29uc3RydWN0b3JLaW5kKCkpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2Vk
RnVuY3Rpb25FeGVjdXRhYmxlLmgJKHJldmlzaW9uIDI3MjE5MikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE5IEFwcGxl
IEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDIwIEFw
cGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMjMyLDcgKzIzMiw3IEBAIHByaXZhdGU6CiAgICAgVW5saW5rZWRGdW5jdGlvbkV4
ZWN1dGFibGUoVk0mLCBTdHJ1Y3R1cmUqLCBjb25zdCBTb3VyY2VDb2RlJiwgRnVuY3Rpb25NZXRh
ZGF0YU5vZGUqLCBVbmxpbmtlZEZ1bmN0aW9uS2luZCwgQ29uc3RydWN0QWJpbGl0eSwgSlNQYXJz
ZXJTY3JpcHRNb2RlLCBSZWZQdHI8VERaRW52aXJvbm1lbnRMaW5rPiwgIEpTQzo6RGVyaXZlZENv
bnRleHRUeXBlLCBKU0M6Ok5lZWRzQ2xhc3NGaWVsZEluaXRpYWxpemVyLCBib29sIGlzQnVpbHRp
bkRlZmF1bHRDbGFzc0NvbnN0cnVjdG9yKTsKICAgICBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJs
ZShEZWNvZGVyJiwgY29uc3QgQ2FjaGVkRnVuY3Rpb25FeGVjdXRhYmxlJik7CiAKLSAgICBzdGF0
aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFS
RV9WSVNJVF9DSElMRFJFTjsKIAogICAgIHZvaWQgZGVjb2RlQ2FjaGVkQ29kZUJsb2NrcyhWTSYp
OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXJTY29wZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2Vy
U2NvcGUuY3BwCShyZXZpc2lvbiAyNzIxOTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVi
dWdnZXIvRGVidWdnZXJTY29wZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01NSw3ICs1NSw4IEBA
IHZvaWQgRGVidWdnZXJTY29wZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHYKICAgICBCYXNlOjpmaW5p
c2hDcmVhdGlvbih2bSk7CiB9CiAKLXZvaWQgRGVidWdnZXJTY29wZTo6dmlzaXRDaGlsZHJlbihK
U0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlz
aXRvcj4KK3ZvaWQgRGVidWdnZXJTY29wZTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxs
LCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIERlYnVnZ2VyU2NvcGUqIHRoaXNPYmplY3QgPSBq
c0Nhc3Q8RGVidWdnZXJTY29wZSo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJ
VFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTY1LDYgKzY2LDggQEAgdm9pZCBEZWJ1Z2dlclNj
b3BlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbAogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3Qt
Pm1fbmV4dCk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihEZWJ1Z2dlclNjb3BlKTsKKwog
U3RyaW5nIERlYnVnZ2VyU2NvcGU6OmNsYXNzTmFtZShjb25zdCBKU09iamVjdCogb2JqZWN0LCBW
TSYgdm0pCiB7CiAgICAgY29uc3QgRGVidWdnZXJTY29wZSogc2NvcGUgPSBqc0Nhc3Q8Y29uc3Qg
RGVidWdnZXJTY29wZSo+KG9iamVjdCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVi
dWdnZXIvRGVidWdnZXJTY29wZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZWJ1Z2dlci9EZWJ1Z2dlclNjb3BlLmgJKHJldmlzaW9uIDI3MjE5MikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlclNjb3BlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTQ2LDcgKzQ2LDcgQEAgcHVibGljOgogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIERl
YnVnZ2VyU2NvcGUqIGNyZWF0ZShWTSYgdm0sIEpTU2NvcGUqIHNjb3BlKTsKIAotICAgIHN0YXRp
YyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJF
X1ZJU0lUX0NISUxEUkVOOwogICAgIHN0YXRpYyBTdHJpbmcgY2xhc3NOYW1lKGNvbnN0IEpTT2Jq
ZWN0KiwgVk0mKTsKICAgICBzdGF0aWMgU3RyaW5nIHRvU3RyaW5nTmFtZShjb25zdCBKU09iamVj
dCosIEpTR2xvYmFsT2JqZWN0Kik7CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90
KEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkVHJhbnNpdGlvbnMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFRy
YW5zaXRpb25zLmNwcAkocmV2aXNpb24gMjcyMTkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdEZXNpcmVkVHJhbnNpdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Miw3ICs1
Miw3IEBAIHZvaWQgRGVzaXJlZFRyYW5zaXRpb246OnJlYWxseUFkZChWTSYgdm0KICAgICAgICAg
ICAgIG1fb2xkU3RydWN0dXJlLCBtX25ld1N0cnVjdHVyZSkpOwogfQogCi12b2lkIERlc2lyZWRU
cmFuc2l0aW9uOjp2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBEZXNp
cmVkVHJhbnNpdGlvbjo6dmlzaXRDaGlsZHJlbjIoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRv
cikKIHsKICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKG1fY29kZU9yaWdpbk93bmVyKTsK
ICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKG1fb2xkU3RydWN0dXJlKTsKQEAgLTc4LDEw
ICs3OCwxMCBAQCB2b2lkIERlc2lyZWRUcmFuc2l0aW9uczo6cmVhbGx5QWRkKFZNJiB2CiAgICAg
ICAgIG1fdHJhbnNpdGlvbnNbaV0ucmVhbGx5QWRkKHZtLCBjb21tb24pOwogfQogCi12b2lkIERl
c2lyZWRUcmFuc2l0aW9uczo6dmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3Zv
aWQgRGVzaXJlZFRyYW5zaXRpb25zOjp2aXNpdENoaWxkcmVuMihBYnN0cmFjdFNsb3RWaXNpdG9y
JiB2aXNpdG9yKQogewogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3RyYW5zaXRpb25z
LnNpemUoKTsgaSsrKQotICAgICAgICBtX3RyYW5zaXRpb25zW2ldLnZpc2l0Q2hpbGRyZW4odmlz
aXRvcik7CisgICAgICAgIG1fdHJhbnNpdGlvbnNbaV0udmlzaXRDaGlsZHJlbjIodmlzaXRvcik7
CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHRGVzaXJlZFRyYW5zaXRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkVHJhbnNpdGlvbnMuaAkocmV2aXNpb24gMjcyMTky
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkVHJhbnNpdGlvbnMuaAko
d29ya2luZyBjb3B5KQpAQCAtNDYsOCArNDYsNyBAQCBwdWJsaWM6CiAgICAgRGVzaXJlZFRyYW5z
aXRpb24oQ29kZUJsb2NrKiwgQ29kZUJsb2NrKiBjb2RlT3JpZ2luT3duZXIsIFN0cnVjdHVyZSos
IFN0cnVjdHVyZSopOwogCiAgICAgdm9pZCByZWFsbHlBZGQoVk0mLCBDb21tb25EYXRhKik7Ci0g
ICAgCi0gICAgdm9pZCB2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CisgICAgdm9pZCB2aXNp
dENoaWxkcmVuMihBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAKIHByaXZhdGU6CiAgICAgQ29kZUJs
b2NrKiBtX2NvZGVCbG9jazsKQEAgLTYzLDcgKzYyLDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBh
ZGRMYXppbHkoQ29kZUJsb2NrKiwgQ29kZUJsb2NrKiBjb2RlT3JpZ2luT3duZXIsIFN0cnVjdHVy
ZSosIFN0cnVjdHVyZSopOwogICAgIHZvaWQgcmVhbGx5QWRkKFZNJiwgQ29tbW9uRGF0YSopOwot
ICAgIHZvaWQgdmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYpOworICAgIHZvaWQgdmlzaXRDaGls
ZHJlbjIoQWJzdHJhY3RTbG90VmlzaXRvciYpOwogCiBwcml2YXRlOgogICAgIFZlY3RvcjxEZXNp
cmVkVHJhbnNpdGlvbj4gbV90cmFuc2l0aW9uczsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHRGVzaXJlZFdlYWtSZWZlcmVuY2VzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXZWFrUmVmZXJlbmNlcy5jcHAJKHJldmlzaW9u
IDI3MjE5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFdlYWtSZWZl
cmVuY2VzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODcsNyArODcsNyBAQCB2b2lkIERlc2lyZWRX
ZWFrUmVmZXJlbmNlczo6cmVhbGx5QWRkKFZNCiAgICAgfQogfQogCi12b2lkIERlc2lyZWRXZWFr
UmVmZXJlbmNlczo6dmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgRGVz
aXJlZFdlYWtSZWZlcmVuY2VzOjp2aXNpdENoaWxkcmVuMihBYnN0cmFjdFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQogewogICAgIGZvciAoSlNDZWxsKiB0YXJnZXQgOiBtX3JlZmVyZW5jZXMpCiAgICAg
ICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQodGFyZ2V0KTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFdlYWtSZWZlcmVuY2VzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2Vha1JlZmVyZW5jZXMuaAkocmV2
aXNpb24gMjcyMTkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2Vh
a1JlZmVyZW5jZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsMTAgKzMxLDEwIEBACiAKIG5hbWVz
cGFjZSBKU0MgeyAKIAorY2xhc3MgQWJzdHJhY3RTbG90VmlzaXRvcjsKIGNsYXNzIENvZGVCbG9j
azsKIGNsYXNzIEpTQ2VsbDsKIGNsYXNzIEpTVmFsdWU7Ci1jbGFzcyBTbG90VmlzaXRvcjsKIGNs
YXNzIFZNOwogCiBuYW1lc3BhY2UgREZHIHsKQEAgLTUyLDggKzUyLDggQEAgcHVibGljOgogICAg
IGJvb2wgY29udGFpbnMoSlNDZWxsKik7CiAgICAgCiAgICAgdm9pZCByZWFsbHlBZGQoVk0mLCBD
b21tb25EYXRhKik7Ci0gICAgCi0gICAgdm9pZCB2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJik7
CisKKyAgICB2b2lkIHZpc2l0Q2hpbGRyZW4yKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKIAogcHJp
dmF0ZToKICAgICBDb2RlQmxvY2sqIG1fY29kZUJsb2NrOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdHcmFwaC5jcHAJKHJldmlzaW9uIDI3MjE5MikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NzcsNyArOTc3LDcg
QEAgQmxvY2tMaXN0IEdyYXBoOjpibG9ja3NJblBvc3RPcmRlcihib29sIAogICAgICAgICB9CiAg
ICAgfQogCi0gICAgaWYgKGlzU2FmZVRvVmFsaWRhdGUgJiYgdmFsaWRhdGlvbkVuYWJsZWQoKSkg
eyAvLyBUaGVyZSBhcmUgdXNlcnMgb2YgdGhpcyB3aGVyZSB3ZSBoYXZlbid0IHlldCBidWlsdCBv
ZiB0aGUgQ0ZHIGVub3VnaCB0byBiZSBhYmxlIHRvIHJ1biBkb21pbmF0b3JzLgorICAgIGlmIChp
c1NhZmVUb1ZhbGlkYXRlICYmIHZhbGlkYXRpb25FbmFibGVkKCkpIHsgLy8gVGhlcmUgYXJlIHVz
ZXJzIG9mIHRoaXMgd2hlcmUgd2UgaGF2ZW4ndCB5ZXQgYnVpbHQgdGhlIENGRyBlbm91Z2ggdG8g
YmUgYWJsZSB0byBydW4gZG9taW5hdG9ycy4KICAgICAgICAgYXV0byB2YWxpZGF0ZVJlc3VsdHMg
PSBbJl0gKGF1dG8mIGRvbWluYXRvcnMpIHsKICAgICAgICAgICAgIC8vIFdoZW4gaXRlcmF0aW5n
IG92ZXIgcmV2ZXJzZSBwb3N0IG9yZGVyLCB3ZSBzaG91bGQgc2VlIGRvbWluYXRvcnMKICAgICAg
ICAgICAgIC8vIGJlZm9yZSB0aGluZ3MgdGhleSBkb21pbmF0ZS4KQEAgLTE0NDgsNyArMTQ0OCw3
IEBAIHZvaWQgR3JhcGg6OnJlZ2lzdGVyRnJvemVuVmFsdWVzKCkKICAgICBtX2NvZGVCbG9jay0+
Y29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uKCkuc2hyaW5rVG9GaXQoKTsKIH0KIAot
dm9pZCBHcmFwaDo6dmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgR3Jh
cGg6OnZpc2l0Q2hpbGRyZW4xKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAg
Zm9yIChGcm96ZW5WYWx1ZSogdmFsdWUgOiBtX2Zyb3plblZhbHVlcykgewogICAgICAgICB2aXNp
dG9yLmFwcGVuZFVuYmFycmllcmVkKHZhbHVlLT52YWx1ZSgpKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0dyYXBoLmgJKHJldmlzaW9uIDI3MjE5MikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHR3JhcGguaAkod29ya2luZyBjb3B5KQpAQCAtMTAwMCw5ICsxMDAwLDkg
QEAgcHVibGljOgogICAgIGJvb2wgY2FuRG9GYXN0U3ByZWFkKE5vZGUqLCBjb25zdCBBYnN0cmFj
dFZhbHVlJik7CiAgICAgCiAgICAgdm9pZCByZWdpc3RlckZyb3plblZhbHVlcygpOwotICAgIAot
ICAgIHZvaWQgdmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYpIGZpbmFsOwotICAgIAorCisgICAg
dm9pZCB2aXNpdENoaWxkcmVuMShBYnN0cmFjdFNsb3RWaXNpdG9yJikgZmluYWw7CisKICAgICB2
b2lkIGxvZ0Fzc2VydGlvbkZhaWx1cmUoCiAgICAgICAgIHN0ZDo6bnVsbHB0cl90LCBjb25zdCBj
aGFyKiBmaWxlLCBpbnQgbGluZSwgY29uc3QgY2hhciogZnVuY3Rpb24sCiAgICAgICAgIGNvbnN0
IGNoYXIqIGFzc2VydGlvbik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Bs
YW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5j
cHAJKHJldmlzaW9uIDI3MjE5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxh
bi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY3Miw3ICs2NzIsNyBAQCBDb21waWxhdGlvbktleSBQ
bGFuOjprZXkoKQogICAgIHJldHVybiBDb21waWxhdGlvbktleShtX2NvZGVCbG9jay0+YWx0ZXJu
YXRpdmUoKSwgbV9tb2RlKTsKIH0KIAotdm9pZCBQbGFuOjpjaGVja0xpdmVuZXNzQW5kVmlzaXRD
aGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgUGxhbjo6Y2hlY2tMaXZlbmVzc0Fu
ZFZpc2l0Q2hpbGRyZW4oQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBpZiAo
IWlzS25vd25Ub0JlTGl2ZUR1cmluZ0dDKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTY4NCw4ICs2
ODQsOCBAQCB2b2lkIFBsYW46OmNoZWNrTGl2ZW5lc3NBbmRWaXNpdENoaWxkcmVuCiAgICAgICAg
ICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKHZhbHVlLnZhbHVlKCkpOwogICAgIH0KIAot
ICAgIG1fcmVjb3JkZWRTdGF0dXNlcy52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKLSAgICBtX3Jl
Y29yZGVkU3RhdHVzZXMubWFya0lmQ2hlYXAodmlzaXRvcik7CisgICAgbV9yZWNvcmRlZFN0YXR1
c2VzLnZpc2l0QWdncmVnYXRlMSh2aXNpdG9yKTsKKyAgICBtX3JlY29yZGVkU3RhdHVzZXMubWFy
a0lmQ2hlYXAxKHZpc2l0b3IpOwogCiAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZChtX2Nv
ZGVCbG9jayk7CiAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZChtX2NvZGVCbG9jay0+YWx0
ZXJuYXRpdmUoKSk7CkBAIC02OTgsOCArNjk4LDggQEAgdm9pZCBQbGFuOjpjaGVja0xpdmVuZXNz
QW5kVmlzaXRDaGlsZHJlbgogICAgICAgICB9CiAgICAgfQogCi0gICAgbV93ZWFrUmVmZXJlbmNl
cy52aXNpdENoaWxkcmVuKHZpc2l0b3IpOwotICAgIG1fdHJhbnNpdGlvbnMudmlzaXRDaGlsZHJl
bih2aXNpdG9yKTsKKyAgICBtX3dlYWtSZWZlcmVuY2VzLnZpc2l0Q2hpbGRyZW4yKHZpc2l0b3Ip
OworICAgIG1fdHJhbnNpdGlvbnMudmlzaXRDaGlsZHJlbjIodmlzaXRvcik7CiB9CiAKIHZvaWQg
UGxhbjo6ZmluYWxpemVJbkdDKCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
UGxhbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5o
CShyZXZpc2lvbiAyNzIxOTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4u
aAkod29ya2luZyBjb3B5KQpAQCAtNDMsOCArNDMsOCBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAor
Y2xhc3MgQWJzdHJhY3RTbG90VmlzaXRvcjsKIGNsYXNzIENvZGVCbG9jazsKLWNsYXNzIFNsb3RW
aXNpdG9yOwogCiBuYW1lc3BhY2UgREZHIHsKIApAQCAtNzIsNyArNzIsNyBAQCBwdWJsaWM6CiAg
ICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KICAgICB2b2lkIGl0ZXJhdGVDb2RlQmxv
Y2tzRm9yR0MoY29uc3QgRnVuYyYpOwotICAgIHZvaWQgY2hlY2tMaXZlbmVzc0FuZFZpc2l0Q2hp
bGRyZW4oU2xvdFZpc2l0b3ImKTsKKyAgICB2b2lkIGNoZWNrTGl2ZW5lc3NBbmRWaXNpdENoaWxk
cmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKICAgICBib29sIGlzS25vd25Ub0JlTGl2ZUR1cmlu
Z0dDKCk7CiAgICAgdm9pZCBmaW5hbGl6ZUluR0MoKTsKICAgICB2b2lkIGNhbmNlbCgpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlcG9pbnQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZXBvaW50LmNwcAkocmV2aXNpb24g
MjcyMTkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlcG9pbnQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC04Myw3ICs4Myw3IEBAIHZvaWQgU2FmZXBvaW50OjpiZWdpbigpCiAg
ICAgfQogfQogCi12b2lkIFNhZmVwb2ludDo6Y2hlY2tMaXZlbmVzc0FuZFZpc2l0Q2hpbGRyZW4o
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIFNhZmVwb2ludDo6Y2hlY2tMaXZlbmVzc0FuZFZp
c2l0Q2hpbGRyZW4oQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBSRUxFQVNF
X0FTU0VSVChtX2RpZENhbGxCZWdpbik7CiAKQEAgLTk0LDcgKzk0LDcgQEAgdm9pZCBTYWZlcG9p
bnQ6OmNoZWNrTGl2ZW5lc3NBbmRWaXNpdENoaQogICAgICAgICByZXR1cm47CiAgICAgCiAgICAg
Zm9yICh1bnNpZ25lZCBpID0gbV9zY2FubmFibGVzLnNpemUoKTsgaS0tOykKLSAgICAgICAgbV9z
Y2FubmFibGVzW2ldLT52aXNpdENoaWxkcmVuKHZpc2l0b3IpOworICAgICAgICBtX3NjYW5uYWJs
ZXNbaV0tPnZpc2l0Q2hpbGRyZW4xKHZpc2l0b3IpOwogfQogCiBib29sIFNhZmVwb2ludDo6aXNL
bm93blRvQmVMaXZlRHVyaW5nR0MoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTYWZlcG9pbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NhZmVwb2ludC5oCShyZXZpc2lvbiAyNzIxOTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NhZmVwb2ludC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw3IEBACiAKIG5h
bWVzcGFjZSBKU0MgewogCi1jbGFzcyBTbG90VmlzaXRvcjsKK2NsYXNzIEFic3RyYWN0U2xvdFZp
c2l0b3I7CiBjbGFzcyBWTTsKIAogbmFtZXNwYWNlIERGRyB7CkBAIC02Niw4ICs2Niw4IEBAIHB1
YmxpYzoKICAgICB2b2lkIGFkZChTY2FubmFibGUqKTsKICAgICAKICAgICB2b2lkIGJlZ2luKCk7
Ci0gICAgCi0gICAgdm9pZCBjaGVja0xpdmVuZXNzQW5kVmlzaXRDaGlsZHJlbihTbG90VmlzaXRv
ciYpOworCisgICAgdm9pZCBjaGVja0xpdmVuZXNzQW5kVmlzaXRDaGlsZHJlbihBYnN0cmFjdFNs
b3RWaXNpdG9yJik7CiAgICAgYm9vbCBpc0tub3duVG9CZUxpdmVEdXJpbmdHQygpOwogICAgIHZv
aWQgY2FuY2VsKCk7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nj
YW5uYWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2Nh
bm5hYmxlLmgJKHJldmlzaW9uIDI3MjE5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU2Nhbm5hYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDcgQEAKIAogbmFtZXNw
YWNlIEpTQyB7CiAKLWNsYXNzIFNsb3RWaXNpdG9yOworY2xhc3MgQWJzdHJhY3RTbG90VmlzaXRv
cjsKIAogbmFtZXNwYWNlIERGRyB7CiAKQEAgLTM4LDcgKzM4LDcgQEAgcHVibGljOgogICAgIFNj
YW5uYWJsZSgpIHsgfQogICAgIHZpcnR1YWwgflNjYW5uYWJsZSgpIHsgfQogICAgIAotICAgIHZp
cnR1YWwgdm9pZCB2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJikgPSAwOworICAgIHZpcnR1YWwg
dm9pZCB2aXNpdENoaWxkcmVuMShBYnN0cmFjdFNsb3RWaXNpdG9yJikgPSAwOwogfTsKIAogfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdXb3JrbGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdXb3JrbGlzdC5jcHAJKHJldmlzaW9uIDI3MjE5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHV29ya2xpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNzIsNyArMzcyLDcgQEAg
dm9pZCBXb3JrbGlzdDo6cmVzdW1lQWxsVGhyZWFkcygpCiAgICAgbV9zdXNwZW5zaW9uTG9jay51
bmxvY2soKTsKIH0KIAotdm9pZCBXb3JrbGlzdDo6dmlzaXRXZWFrUmVmZXJlbmNlcyhTbG90Vmlz
aXRvciYgdmlzaXRvcikKK3ZvaWQgV29ya2xpc3Q6OnZpc2l0V2Vha1JlZmVyZW5jZXMoQWJzdHJh
Y3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBWTSogdm0gPSAmdmlzaXRvci5oZWFwKCkt
PnZtKCk7CiAgICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlz
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3Qu
aAkocmV2aXNpb24gMjcyMTkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3Jr
bGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw3ICszNSw3IEBACiAKIG5hbWVzcGFjZSBKU0Mg
ewogCi1jbGFzcyBTbG90VmlzaXRvcjsKK2NsYXNzIEFic3RyYWN0U2xvdFZpc2l0b3I7CiAKIG5h
bWVzcGFjZSBERkcgewogCkBAIC03Myw3ICs3Myw3IEBAIHB1YmxpYzoKICAgICBib29sIGlzQWN0
aXZlRm9yVk0oVk0mKSBjb25zdDsKICAgICAKICAgICAvLyBPbmx5IGNhbGxlZCBvbiB0aGUgbWFp
biB0aHJlYWQgYWZ0ZXIgc3VzcGVuZGluZyBhbGwgdGhyZWFkcy4KLSAgICB2b2lkIHZpc2l0V2Vh
a1JlZmVyZW5jZXMoU2xvdFZpc2l0b3ImKTsKKyAgICB2b2lkIHZpc2l0V2Vha1JlZmVyZW5jZXMo
QWJzdHJhY3RTbG90VmlzaXRvciYpOwogICAgIHZvaWQgcmVtb3ZlRGVhZFBsYW5zKFZNJik7CiAg
ICAgCiAgICAgdm9pZCByZW1vdmVOb25Db21waWxpbmdQbGFuc0ZvclZNKFZNJik7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9BYnN0cmFjdFNsb3RWaXNpdG9yLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9BYnN0cmFjdFNsb3RWaXNpdG9yLmNw
cAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9BYnN0cmFjdFNs
b3RWaXNpdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQzIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFic3RyYWN0U2xvdFZpc2l0b3IuaCIK
KworI2luY2x1ZGUgIkFic3RyYWN0U2xvdFZpc2l0b3JJbmxpbmVzLmgiCisvLyNpbmNsdWRlICJN
YXJraW5nQ29uc3RyYWludFNvbHZlci5oIgorCituYW1lc3BhY2UgSlNDIHsKKworLy92b2lkIEFi
c3RyYWN0U2xvdFZpc2l0b3I6OmFkZFBhcmFsbGVsQ29uc3RyYWludFRhc2soUmVmUHRyPFNoYXJl
ZFRhc2s8dm9pZChBYnN0cmFjdFNsb3RWaXNpdG9yJik+PiB0YXNrKQorLy97CisvLyAgICBSRUxF
QVNFX0FTU0VSVChtX2N1cnJlbnRTb2x2ZXIpOworLy8gICAgUkVMRUFTRV9BU1NFUlQobV9jdXJy
ZW50Q29uc3RyYWludCk7CisvLyAgICBSRUxFQVNFX0FTU0VSVCh0YXNrKTsKKy8vCisvLyAgICBt
X2N1cnJlbnRTb2x2ZXItPmFkZFBhcmFsbGVsVGFzayh0YXNrLCAqbV9jdXJyZW50Q29uc3RyYWlu
dCk7CisvL30KKworfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9BYnN0cmFjdFNsb3RWaXNpdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvQWJzdHJhY3RTbG90VmlzaXRvci5oCShub25leGlzdGVudCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Fic3RyYWN0U2xvdFZpc2l0b3IuaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDIxMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiSlNDSlNWYWx1ZS5oIgorI2lu
Y2x1ZGUgIk1hcmtTdGFjay5oIgorI2luY2x1ZGUgIlZpc2l0UmFjZUtleS5oIiAvLyBtbGFtCisj
aW5jbHVkZSA8d3RmL1NoYXJlZFRhc2suaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+
CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBDb25zZXJ2YXRpdmVSb290czsKK2NsYXNzIEhl
YXA7CitjbGFzcyBIZWFwQ2VsbDsKK2NsYXNzIEpTQ2VsbDsKK2NsYXNzIE1hcmtlZEJsb2NrOwor
Y2xhc3MgTWFya2luZ0NvbnN0cmFpbnQ7CitjbGFzcyBNYXJraW5nQ29uc3RyYWludFNvbHZlcjsK
K2NsYXNzIFByZWNpc2VBbGxvY2F0aW9uOworY2xhc3MgU2xvdFZpc2l0b3I7CitjbGFzcyBWTTsK
K2NsYXNzIFZlcmlmaWVyU2xvdFZpc2l0b3I7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjbGFzcyBX
ZWFrOwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVHJhaXRzPiBjbGFzcyBXcml0ZUJh
cnJpZXJCYXNlOworCitjbGFzcyBBYnN0cmFjdFNsb3RWaXNpdG9yIHsKKyAgICBXVEZfTUFLRV9O
T05DT1BZQUJMRShBYnN0cmFjdFNsb3RWaXNpdG9yKTsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9D
QVRFRDsKK3B1YmxpYzoKKyAgICBlbnVtIFJvb3RNYXJrUmVhc29uIHsKKyAgICAgICAgTm9uZSwK
KyAgICAgICAgQ29uc2VydmF0aXZlU2NhbiwKKyAgICAgICAgU3Ryb25nUmVmZXJlbmNlcywKKyAg
ICAgICAgUHJvdGVjdGVkVmFsdWVzLAorICAgICAgICBNYXJrTGlzdFNldCwKKyAgICAgICAgVk1F
eGNlcHRpb25zLAorICAgICAgICBTdHJvbmdIYW5kbGVzLAorICAgICAgICBEZWJ1Z2dlciwKKyAg
ICAgICAgSklUU3R1YlJvdXRpbmVzLAorICAgICAgICBXZWFrU2V0cywKKyAgICAgICAgT3V0cHV0
LAorICAgICAgICBERkdXb3JrTGlzdHMsCisgICAgICAgIENvZGVCbG9ja3MsCisgICAgICAgIERP
TUdDT3V0cHV0LAorICAgIH07CisKKyAgICBjbGFzcyBEZWZhdWx0TWFya2luZ1Zpb2xhdGlvbkFz
c2VydGlvblNjb3BlIHsKKyAgICBwdWJsaWM6CisgICAgICAgIERlZmF1bHRNYXJraW5nVmlvbGF0
aW9uQXNzZXJ0aW9uU2NvcGUoQWJzdHJhY3RTbG90VmlzaXRvciYpIHsgfQorICAgIH07CisKKyAg
ICB2aXJ0dWFsIH5BYnN0cmFjdFNsb3RWaXNpdG9yKCkgPSBkZWZhdWx0OworCisgICAgTWFya1N0
YWNrQXJyYXkmIGNvbGxlY3Rvck1hcmtTdGFjaygpIHsgcmV0dXJuIG1fY29sbGVjdG9yU3RhY2s7
IH0KKyAgICBNYXJrU3RhY2tBcnJheSYgbXV0YXRvck1hcmtTdGFjaygpIHsgcmV0dXJuIG1fbXV0
YXRvclN0YWNrOyB9CisgICAgY29uc3QgTWFya1N0YWNrQXJyYXkmIGNvbGxlY3Rvck1hcmtTdGFj
aygpIGNvbnN0IHsgcmV0dXJuIG1fY29sbGVjdG9yU3RhY2s7IH0KKyAgICBjb25zdCBNYXJrU3Rh
Y2tBcnJheSYgbXV0YXRvck1hcmtTdGFjaygpIGNvbnN0IHsgcmV0dXJuIG1fbXV0YXRvclN0YWNr
OyB9CisKKyAgICBib29sIGlzRW1wdHkoKSB7IHJldHVybiBtX2NvbGxlY3RvclN0YWNrLmlzRW1w
dHkoKSAmJiBtX211dGF0b3JTdGFjay5pc0VtcHR5KCk7IH0KKworICAgIFZNJiB2bSgpOworICAg
IGNvbnN0IFZNJiB2bSgpIGNvbnN0OworICAgIEhlYXAqIGhlYXAoKSBjb25zdDsKKworICAgIHZp
cnR1YWwgdm9pZCBhcHBlbmRfQ29uc2VydmF0aXZlUm9vdHMoY29uc3QgQ29uc2VydmF0aXZlUm9v
dHMmKSA9IDA7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBUcmFpdHM+IHZv
aWQgYXBwZW5kKGNvbnN0IFdyaXRlQmFycmllckJhc2U8VCwgVHJhaXRzPiYpOworICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFRyYWl0cz4gdm9pZCBhcHBlbmRIaWRkZW4oY29uc3Qg
V3JpdGVCYXJyaWVyQmFzZTxULCBUcmFpdHM+Jik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSXRl
cmF0b3I+IHZvaWQgYXBwZW5kKEl0ZXJhdG9yIGJlZ2luICwgSXRlcmF0b3IgZW5kKTsKKyAgICBB
TFdBWVNfSU5MSU5FIHZvaWQgYXBwZW5kVmFsdWVzKGNvbnN0IFdyaXRlQmFycmllckJhc2U8VW5r
bm93biwgUmF3VmFsdWVUcmFpdHM8VW5rbm93bj4+Kiwgc2l6ZV90IGNvdW50KTsKKyAgICBBTFdB
WVNfSU5MSU5FIHZvaWQgYXBwZW5kVmFsdWVzSGlkZGVuKGNvbnN0IFdyaXRlQmFycmllckJhc2U8
VW5rbm93biwgUmF3VmFsdWVUcmFpdHM8VW5rbm93bj4+Kiwgc2l6ZV90IGNvdW50KTsKKworICAg
IC8vIFRoZXNlIGRvbid0IHJlcXVpcmUgeW91IHRvIHByb3ZlIHRoYXQgeW91IGhhdmUgYSBXcml0
ZUJhcnJpZXI8Pi4gVGhhdCBtYWtlcyBzZW5zZQorICAgIC8vIGZvcjoKKyAgICAvLworICAgIC8v
IC0gcm9vdHMuCisgICAgLy8gLSBzb3BoaXN0aWNhdGVkIGRhdGEgc3RydWN0dXJlcyB0aGF0IGJh
cnJpZXIgdGhyb3VnaCBvdGhlciBtZWFucyAobGlrZSBERkc6OlBsYW4gYW5kCisgICAgLy8gICBm
cmllbmRzKS4KKyAgICAvLworICAgIC8vIElmIHlvdSBhcmUgbm90IGEgcm9vdCBhbmQgeW91IGRv
bid0IGtub3cgd2hhdCBraW5kIG9mIGJhcnJpZXIgeW91IGhhdmUsIHRoZW4geW91CisgICAgLy8g
c2hvdWxkbid0IGNhbGwgdGhlc2UgbWV0aG9kcy4KKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgYXBw
ZW5kVW5iYXJyaWVyZWQoSlNWYWx1ZSk7CisgICAgQUxXQVlTX0lOTElORSB2b2lkIGFwcGVuZFVu
YmFycmllcmVkKEpTVmFsdWUqLCBzaXplX3QpOworICAgIEFMV0FZU19JTkxJTkUgdm9pZCBhcHBl
bmRVbmJhcnJpZXJlZChKU0NlbGwqIGNlbGwpCisgICAgeworICAgICAgICBpZiAoIWNlbGwpCisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIGFwcGVuZFVuYmFycmllcmVkSW1wbChjZWxsKTsK
KyAgICB9CisgICAgdmlydHVhbCB2b2lkIGFwcGVuZFVuYmFycmllcmVkSW1wbChKU0NlbGwqKSA9
IDA7CisKKyAgICB2aXJ0dWFsIGJvb2wgYWRkT3BhcXVlUm9vdCh2b2lkKikgPSAwOyAvLyBSZXR1
cm5zIHRydWUgaWYgdGhlIHJvb3Qgd2FzIG5ldy4KKyAgICB2aXJ0dWFsIGJvb2wgY29udGFpbnNP
cGFxdWVSb290KHZvaWQqKSBjb25zdCA9IDA7CisKKyAgICB2aXJ0dWFsIGJvb2wgaXNGaXJzdFZp
c2l0KCkgY29uc3QgPSAwOyAvLyBtbGFtIEZJWE1FCisKKyAgICB2aXJ0dWFsIGJvb2wgaXNNYXJr
ZWQoY29uc3Qgdm9pZCopIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNNYXJrZWQoTWFy
a2VkQmxvY2smLCBIZWFwQ2VsbCopIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNNYXJr
ZWQoUHJlY2lzZUFsbG9jYXRpb24mLCBIZWFwQ2VsbCopIGNvbnN0ID0gMDsKKworICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFQ+CisgICAgdm9pZCBhcHBlbmQoY29uc3QgV2VhazxUPiYgd2Vhayk7CisK
KyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgYXBwZW5kSGlkZGVuVW5iYXJyaWVyZWQoSlNWYWx1ZSk7
CisgICAgQUxXQVlTX0lOTElORSB2b2lkIGFwcGVuZEhpZGRlblVuYmFycmllcmVkKEpTQ2VsbCog
Y2VsbCkKKyAgICB7CisgICAgICAgIGlmICghY2VsbCkKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgYXBwZW5kSGlkZGVuVW5iYXJyaWVyZWRJbXBsKGNlbGwpOworICAgIH0KKyAgICB2aXJ0
dWFsIHZvaWQgYXBwZW5kSGlkZGVuVW5iYXJyaWVyZWRJbXBsKEpTQ2VsbCopID0gMDsKKworICAg
IHNpemVfdCB2aXNpdENvdW50KCkgY29uc3QgeyByZXR1cm4gbV92aXNpdENvdW50OyB9CisKKyAg
ICB2b2lkIGFkZFRvVmlzaXRDb3VudChzaXplX3QgdmFsdWUpIHsgbV92aXNpdENvdW50ICs9IHZh
bHVlOyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYWRkUGFyYWxsZWxDb25zdHJhaW50VGFzayhSZWZQ
dHI8U2hhcmVkVGFzazx2b2lkKEFic3RyYWN0U2xvdFZpc2l0b3ImKT4+KSA9IDA7CisKKyAgICB2
aXJ0dWFsIHZvaWQgbWFya0F1eGlsaWFyeShjb25zdCB2b2lkKiBiYXNlKSA9IDA7CisKKyAgICB2
aXJ0dWFsIHZvaWQgcmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKHNpemVfdCkgPSAwOworI2lmIEVO
QUJMRShSRVNPVVJDRV9VU0FHRSkKKyAgICB2aXJ0dWFsIHZvaWQgcmVwb3J0RXh0ZXJuYWxNZW1v
cnlWaXNpdGVkKHNpemVfdCkgPSAwOworI2VuZGlmCisKKyAgICB2aXJ0dWFsIHZvaWQgZHVtcChQ
cmludFN0cmVhbSYpIGNvbnN0ID0gMDsKKworICAgIFJvb3RNYXJrUmVhc29uIHJvb3RNYXJrUmVh
c29uKCkgY29uc3QgeyByZXR1cm4gbV9yb290TWFya1JlYXNvbjsgfQorICAgIHZvaWQgc2V0Um9v
dE1hcmtSZWFzb24oUm9vdE1hcmtSZWFzb24gcmVhc29uKSB7IG1fcm9vdE1hcmtSZWFzb24gPSBy
ZWFzb247IH0KKworICAgIHZpcnR1YWwgYm9vbCBtdXRhdG9ySXNTdG9wcGVkKCkgY29uc3QgPSAw
OworCisgICAgdmlydHVhbCB2b2lkIGRpZFJhY2UoY29uc3QgVmlzaXRSYWNlS2V5JikgPSAwOwor
ICAgIHZvaWQgZGlkUmFjZShKU0NlbGwqIGNlbGwsIGNvbnN0IGNoYXIqIHJlYXNvbikgeyBkaWRS
YWNlKFZpc2l0UmFjZUtleShjZWxsLCByZWFzb24pKTsgfQorCisgICAgdmlydHVhbCB2b2lkIHNl
dEN1cnJlbnRDb25zdHJhaW50KE1hcmtpbmdDb25zdHJhaW50KikgPSAwOworICAgIHZpcnR1YWwg
dm9pZCBzZXRDdXJyZW50Q29uc3RyYWludFNvbHZlcihNYXJraW5nQ29uc3RyYWludFNvbHZlciop
ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXRBc0NvbnN0cmFpbnQoY29uc3QgSlNDZWxsKikg
PSAwOworCisgICAgLy8gSW5saW5lIGZ1bmN0aW9ucyBmb3IgZGlzYXBhdGNoaW5nIHRvIFNsb3RW
aXNpdG9yIC8gVmVyaWZpZXJTbG90VmlzaXRvciB2ZXJzaW9ucy4KKworLy8gICAgdm9pZCBhcHBl
bmQoY29uc3QgQ29uc2VydmF0aXZlUm9vdHMmKTsKKy8vICAgIHZvaWQgYXBwZW5kVW5iYXJyaWVy
ZWQoSlNWYWx1ZSk7CisvLyAgICB2b2lkIGFwcGVuZFVuYmFycmllcmVkKEpTQ2VsbCopOworLy8g
ICAgdm9pZCBhcHBlbmRIaWRkZW5VbmJhcnJpZXJlZChKU0NlbGwqKTsKKy8vICAgIGJvb2wgY29u
dGFpbnNPcGFxdWVSb290KHZvaWQqKSBjb25zdDsKKy8vICAgIHZvaWQgdmlzaXRBc0NvbnN0cmFp
bnQoY29uc3QgSlNDZWxsKik7CisKK3Byb3RlY3RlZDoKKyAgICBpbmxpbmUgQWJzdHJhY3RTbG90
VmlzaXRvcihIZWFwJik7CisKKyAgICB2b2lkIHJlc2V0KCk7CisKKyAgICBNYXJrU3RhY2tBcnJh
eSBtX2NvbGxlY3RvclN0YWNrOworICAgIE1hcmtTdGFja0FycmF5IG1fbXV0YXRvclN0YWNrOwor
CisgICAgc2l6ZV90IG1fdmlzaXRDb3VudCB7IDAgfTsKKworICAgIEhlYXAmIG1faGVhcDsKKwor
ICAgIFJvb3RNYXJrUmVhc29uIG1fcm9vdE1hcmtSZWFzb24geyBSb290TWFya1JlYXNvbjo6Tm9u
ZSB9OworCisvLyAgICBNYXJraW5nQ29uc3RyYWludCogbV9jdXJyZW50Q29uc3RyYWludCB7IG51
bGxwdHIgfTsKKy8vICAgIE1hcmtpbmdDb25zdHJhaW50U29sdmVyKiBtX2N1cnJlbnRTb2x2ZXIg
eyBudWxscHRyIH07CisKKy8vICAgIGZyaWVuZCBjbGFzcyBNYXJraW5nQ29uc3RyYWludFNvbHZl
cjsKK307CisKK2NsYXNzIFNldFJvb3RNYXJrUmVhc29uU2NvcGUgeworcHVibGljOgorICAgIFNl
dFJvb3RNYXJrUmVhc29uU2NvcGUoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvciwgQWJzdHJh
Y3RTbG90VmlzaXRvcjo6Um9vdE1hcmtSZWFzb24gcmVhc29uKQorICAgICAgICA6IG1fdmlzaXRv
cih2aXNpdG9yKQorICAgICAgICAsIG1fcHJldmlvdXNSZWFzb24odmlzaXRvci5yb290TWFya1Jl
YXNvbigpKQorICAgIHsKKyAgICAgICAgbV92aXNpdG9yLnNldFJvb3RNYXJrUmVhc29uKHJlYXNv
bik7CisgICAgfQorCisgICAgflNldFJvb3RNYXJrUmVhc29uU2NvcGUoKQorICAgIHsKKyAgICAg
ICAgbV92aXNpdG9yLnNldFJvb3RNYXJrUmVhc29uKG1fcHJldmlvdXNSZWFzb24pOworICAgIH0K
KworcHJpdmF0ZToKKyAgICBBYnN0cmFjdFNsb3RWaXNpdG9yJiBtX3Zpc2l0b3I7CisgICAgQWJz
dHJhY3RTbG90VmlzaXRvcjo6Um9vdE1hcmtSZWFzb24gbV9wcmV2aW91c1JlYXNvbjsKK307CisK
K30gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQWJz
dHJhY3RTbG90VmlzaXRvcklubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9BYnN0cmFjdFNsb3RWaXNpdG9ySW5saW5lcy5oCShub25leGlzdGVudCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Fic3RyYWN0U2xvdFZpc2l0b3JJbmxpbmVzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkFic3RyYWN0
U2xvdFZpc2l0b3IuaCIKKyNpbmNsdWRlICJIZWFwLmgiCisjaW5jbHVkZSAiV2Vha0lubGluZXMu
aCIKKyNpbmNsdWRlICJXcml0ZUJhcnJpZXIuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2lubGlu
ZSBBYnN0cmFjdFNsb3RWaXNpdG9yOjpBYnN0cmFjdFNsb3RWaXNpdG9yKEhlYXAmIGhlYXApCisg
ICAgOiBtX2hlYXAoaGVhcCkKK3sKK30KKworaW5saW5lIEhlYXAqIEFic3RyYWN0U2xvdFZpc2l0
b3I6OmhlYXAoKSBjb25zdAoreworICAgIHJldHVybiAmbV9oZWFwOworfQorCitpbmxpbmUgVk0m
IEFic3RyYWN0U2xvdFZpc2l0b3I6OnZtKCkKK3sKKyAgICByZXR1cm4gbV9oZWFwLnZtKCk7Cit9
CisKK2lubGluZSBjb25zdCBWTSYgQWJzdHJhY3RTbG90VmlzaXRvcjo6dm0oKSBjb25zdAorewor
ICAgIHJldHVybiBtX2hlYXAudm0oKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK0FMV0FZ
U19JTkxJTkUgdm9pZCBBYnN0cmFjdFNsb3RWaXNpdG9yOjphcHBlbmQoY29uc3QgV2VhazxUPiYg
d2VhaykKK3sKKyAgICBhcHBlbmRVbmJhcnJpZXJlZCh3ZWFrLmdldCgpKTsKK30KKwordGVtcGxh
dGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVHJhaXRzPgorQUxXQVlTX0lOTElORSB2b2lkIEFic3Ry
YWN0U2xvdFZpc2l0b3I6OmFwcGVuZChjb25zdCBXcml0ZUJhcnJpZXJCYXNlPFQsIFRyYWl0cz4m
IHNsb3QpCit7CisgICAgYXBwZW5kVW5iYXJyaWVyZWQoc2xvdC5nZXQoKSk7Cit9CisKK3RlbXBs
YXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFRyYWl0cz4KK0FMV0FZU19JTkxJTkUgdm9pZCBBYnN0
cmFjdFNsb3RWaXNpdG9yOjphcHBlbmRIaWRkZW4oY29uc3QgV3JpdGVCYXJyaWVyQmFzZTxULCBU
cmFpdHM+JiBzbG90KQoreworICAgIGFwcGVuZEhpZGRlblVuYmFycmllcmVkKHNsb3QuZ2V0KCkp
OworfQorCitBTFdBWVNfSU5MSU5FIHZvaWQgQWJzdHJhY3RTbG90VmlzaXRvcjo6YXBwZW5kSGlk
ZGVuVW5iYXJyaWVyZWQoSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUuaXNDZWxsKCkp
CisgICAgICAgIGFwcGVuZEhpZGRlblVuYmFycmllcmVkKHZhbHVlLmFzQ2VsbCgpKTsKK30KKwor
dGVtcGxhdGU8dHlwZW5hbWUgSXRlcmF0b3I+CitBTFdBWVNfSU5MSU5FIHZvaWQgQWJzdHJhY3RT
bG90VmlzaXRvcjo6YXBwZW5kKEl0ZXJhdG9yIGJlZ2luLCBJdGVyYXRvciBlbmQpCit7CisgICAg
Zm9yIChhdXRvIGl0ID0gYmVnaW47IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgYXBwZW5kKCpp
dCk7Cit9CisKK0FMV0FZU19JTkxJTkUgdm9pZCBBYnN0cmFjdFNsb3RWaXNpdG9yOjphcHBlbmRW
YWx1ZXMoY29uc3QgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiogYmFycmllcnMsIHNpemVfdCBj
b3VudCkKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpCisgICAgICAg
IGFwcGVuZChiYXJyaWVyc1tpXSk7Cit9CisKK0FMV0FZU19JTkxJTkUgdm9pZCBBYnN0cmFjdFNs
b3RWaXNpdG9yOjphcHBlbmRWYWx1ZXNIaWRkZW4oY29uc3QgV3JpdGVCYXJyaWVyQmFzZTxVbmtu
b3duPiogYmFycmllcnMsIHNpemVfdCBjb3VudCkKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGNvdW50OyArK2kpCisgICAgICAgIGFwcGVuZEhpZGRlbihiYXJyaWVyc1tpXSk7Cit9CisK
K0FMV0FZU19JTkxJTkUgdm9pZCBBYnN0cmFjdFNsb3RWaXNpdG9yOjphcHBlbmRVbmJhcnJpZXJl
ZChKU1ZhbHVlIHZhbHVlKQoreworICAgIGlmICh2YWx1ZS5pc0NlbGwoKSkKKyAgICAgICAgYXBw
ZW5kVW5iYXJyaWVyZWQodmFsdWUuYXNDZWxsKCkpOworfQorCitBTFdBWVNfSU5MSU5FIHZvaWQg
QWJzdHJhY3RTbG90VmlzaXRvcjo6YXBwZW5kVW5iYXJyaWVyZWQoSlNWYWx1ZSogc2xvdCwgc2l6
ZV90IGNvdW50KQoreworICAgIGZvciAoc2l6ZV90IGkgPSBjb3VudDsgaS0tOykKKyAgICAgICAg
YXBwZW5kVW5iYXJyaWVyZWQoc2xvdFtpXSk7Cit9CisKK0FMV0FZU19JTkxJTkUgdm9pZCBBYnN0
cmFjdFNsb3RWaXNpdG9yOjpyZXNldCgpCit7CisgICAgbV92aXNpdENvdW50ID0gMDsKK30KKwor
fSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IYW5k
bGVTZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hhbmRs
ZVNldC5jcHAJKHJldmlzaW9uIDI3MjE5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0hhbmRsZVNldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU2LDcgKzU2LDkgQEAgdm9pZCBIYW5k
bGVTZXQ6Omdyb3coKQogICAgIH0KIH0KIAotdm9pZCBIYW5kbGVTZXQ6OnZpc2l0U3Ryb25nSGFu
ZGxlcyhTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4K
Ky8vdm9pZCBIYW5kbGVTZXQ6OnZpc2l0U3Ryb25nSGFuZGxlcyhWaXNpdG9yJiB2aXNpdG9yKQor
dm9pZCBIYW5kbGVTZXQ6OnZpc2l0U3Ryb25nSGFuZGxlczEoQWJzdHJhY3RTbG90VmlzaXRvciYg
dmlzaXRvcikKIHsKICAgICBOb2RlKiBlbmQgPSBtX3N0cm9uZ0xpc3QuZW5kKCk7CiAgICAgZm9y
IChOb2RlKiBub2RlID0gbV9zdHJvbmdMaXN0LmJlZ2luKCk7IG5vZGUgIT0gZW5kOyBub2RlID0g
bm9kZS0+bmV4dCgpKSB7CkBAIC02Nyw2ICs2OSw5IEBAIHZvaWQgSGFuZGxlU2V0Ojp2aXNpdFN0
cm9uZ0hhbmRsZXMoU2xvdFYKICAgICB9CiB9CiAKKy8vdGVtcGxhdGUgdm9pZCBIYW5kbGVTZXQ6
OnZpc2l0U3Ryb25nSGFuZGxlcyhTbG90VmlzaXRvciYpOworLy90ZW1wbGF0ZSB2b2lkIEhhbmRs
ZVNldDo6dmlzaXRTdHJvbmdIYW5kbGVzKFZlcmlmaWVyU2xvdFZpc2l0b3ImKTsKKwogdm9pZCBI
YW5kbGVTZXQ6OndyaXRlQmFycmllcihIYW5kbGVTbG90IHNsb3QsIGNvbnN0IEpTVmFsdWUmIHZh
bHVlKQogewogICAgIGlmICghdmFsdWUgPT0gISpzbG90ICYmIHNsb3QtPmlzQ2VsbCgpID09IHZh
bHVlLmlzQ2VsbCgpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGFuZGxlU2V0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGFuZGxlU2V0LmgJ
KHJldmlzaW9uIDI3MjE5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hhbmRsZVNl
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSwxMCArMzUsMTEgQEAKIAogbmFtZXNwYWNlIEpTQyB7
CiAKK2NsYXNzIEFic3RyYWN0U2xvdFZpc2l0b3I7CiBjbGFzcyBIYW5kbGVTZXQ7CiBjbGFzcyBW
TTsKIGNsYXNzIEpTVmFsdWU7Ci1jbGFzcyBTbG90VmlzaXRvcjsKKy8vY2xhc3MgU2xvdFZpc2l0
b3I7CiAKIGNsYXNzIEhhbmRsZU5vZGUgewogcHVibGljOgpAQCAtNzMsNyArNzQsOCBAQCBwdWJs
aWM6CiAgICAgSGFuZGxlU2xvdCBhbGxvY2F0ZSgpOwogICAgIHZvaWQgZGVhbGxvY2F0ZShIYW5k
bGVTbG90KTsKIAotICAgIHZvaWQgdmlzaXRTdHJvbmdIYW5kbGVzKFNsb3RWaXNpdG9yJik7Cisv
LyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIHZpc2l0U3Ryb25nSGFuZGxlcyhW
aXNpdG9yJik7CisgICAgdm9pZCB2aXNpdFN0cm9uZ0hhbmRsZXMxKEFic3RyYWN0U2xvdFZpc2l0
b3ImKTsKIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgd3JpdGVCYXJyaWVyKEhhbmRsZVNs
b3QsIGNvbnN0IEpTVmFsdWUmKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
SGVhcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5j
cHAJKHJldmlzaW9uIDI3MjE5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Miw2ICs3Miw3IEBACiAjaW5jbHVkZSAiVHlwZVByb2Zp
bGVyLmgiCiAjaW5jbHVkZSAiVHlwZVByb2ZpbGVyTG9nLmgiCiAjaW5jbHVkZSAiVk0uaCIKKyNp
bmNsdWRlICJWZXJpZmllclNsb3RWaXNpdG9yLmgiCiAjaW5jbHVkZSAiV2Vha01hcEltcGxJbmxp
bmVzLmgiCiAjaW5jbHVkZSAiV2Vha1NldElubGluZXMuaCIKICNpbmNsdWRlIDxhbGdvcml0aG0+
CkBAIC05NCw2ICs5NSw4IEBACiAjaW5jbHVkZSAiSlNDR0xpYldyYXBwZXJPYmplY3QuaCIKICNl
bmRpZgogCitzdGF0aWMgY29uc3RleHByIGJvb2wgbWxhbVZlcmJvc2UgPSBmYWxzZTsKKwogbmFt
ZXNwYWNlIEpTQyB7CiAKIG5hbWVzcGFjZSB7CkBAIC03MzMsMTMgKzczNiwyMSBAQCB2b2lkIEhl
YXA6OnJlbW92ZURlYWRDb21waWxlcldvcmtsaXN0RW50CiAjZW5kaWYKIH0KIAotYm9vbCBIZWFw
Ojppc0FuYWx5emluZ0hlYXAoKSBjb25zdAotewotICAgIEhlYXBQcm9maWxlciogaGVhcFByb2Zp
bGVyID0gbV92bS5oZWFwUHJvZmlsZXIoKTsKLSAgICBpZiAoVU5MSUtFTFkoaGVhcFByb2ZpbGVy
KSkKLSAgICAgICAgcmV0dXJuIGhlYXBQcm9maWxlci0+YWN0aXZlSGVhcEFuYWx5emVyKCk7Ci0g
ICAgcmV0dXJuIGZhbHNlOwotfQorLy9ib29sIEhlYXA6OmlzQW5hbHl6aW5nSGVhcCgpIGNvbnN0
CisvL3sKKy8vICAgIEhlYXBQcm9maWxlciogaGVhcFByb2ZpbGVyID0gbV92bS5oZWFwUHJvZmls
ZXIoKTsKKy8vICAgIGlmIChVTkxJS0VMWShoZWFwUHJvZmlsZXIpKQorLy8gICAgICAgIHJldHVy
biBoZWFwUHJvZmlsZXItPmFjdGl2ZUhlYXBBbmFseXplcigpOworLy8gICAgcmV0dXJuIGZhbHNl
OworLy99CisKKy8vSGVhcEFuYWx5emVyKiBIZWFwOjpoZWFwQW5hbHl6ZXIoKSBjb25zdAorLy97
CisvLyAgICBIZWFwUHJvZmlsZXIqIGhlYXBQcm9maWxlciA9IG1fdm0uaGVhcFByb2ZpbGVyKCk7
CisvLyAgICBpZiAoVU5MSUtFTFkoaGVhcFByb2ZpbGVyKSkKKy8vICAgICAgICByZXR1cm4gaGVh
cFByb2ZpbGVyLT5hY3RpdmVIZWFwQW5hbHl6ZXIoKTsKKy8vICAgIHJldHVybiBudWxscHRyOwor
Ly99CiAKIHN0cnVjdCBHYXRoZXJFeHRyYUhlYXBEYXRhIDogTWFya2VkQmxvY2s6OkNvdW50RnVu
Y3RvciB7CiAgICAgR2F0aGVyRXh0cmFIZWFwRGF0YShWTSYgdm0sIEhlYXBBbmFseXplciYgYW5h
bHl6ZXIpCkBAIC0xMDM1LDYgKzEwNDYsNyBAQCB2b2lkIEhlYXA6OmFkZFRvUmVtZW1iZXJlZFNl
dChjb25zdCBKU0NlCiAgICAgLy8gZ2V0IHNjYW5uZWQgYWdhaW4uIElmIHdlIGxvc2UgdGhlbiBz
b21lb25lIGVsc2Ugd2lsbCBiYXJyaWVyIHRoZSBvYmplY3QgYWdhaW4uIFRoYXQgd291bGQKICAg
ICAvLyBiZSB1bmZvcnR1bmF0ZSBidXQgbm90IHRoZSBlbmQgb2YgdGhlIHdvcmxkLgogICAgIGNl
bGwtPnNldENlbGxTdGF0ZShDZWxsU3RhdGU6OlBvc3NpYmx5R3JleSk7CisgICAgaWYgKG1sYW1W
ZXJib3NlKSBkYXRhTG9nTG4oIiAgICBtbGFtIEhlYXA6OmFkZFRvUmVtZW1iZXJlZFNldCgpIG1f
bXV0YXRvck1hcmtTdGFjay0+YXBwZW5kKGNlbGwpOiBjZWxsICIsIFJhd1BvaW50ZXIoY2VsbCkp
OwogICAgIG1fbXV0YXRvck1hcmtTdGFjay0+YXBwZW5kKGNlbGwpOwogfQogCkBAIC0xMjQ1LDYg
KzEyNTcsNyBAQCBORVZFUl9JTkxJTkUgYm9vbCBIZWFwOjpydW5Ob3RSdW5uaW5nUGhhCiAKIE5F
VkVSX0lOTElORSBib29sIEhlYXA6OnJ1bkJlZ2luUGhhc2UoR0NDb25kdWN0b3IgY29ubikKIHsK
KyAgICBpZiAobWxhbVZlcmJvc2UpIGRhdGFMb2dMbigiICAgIG1sYW0gSGVhcDo6cnVuQmVnaW5Q
aGFzZSgpIGhlYXAubV9tdXRhdG9yTWFya1N0YWNrLT5zaXplKCkgIiwgbV9tdXRhdG9yTWFya1N0
YWNrLT5zaXplKCksICIgbV9yYWNlTWFya1N0YWNrLT5zaXplKCkgIiwgbV9yYWNlTWFya1N0YWNr
LT5zaXplKCkpOwogICAgIG1fY3VycmVudEdDU3RhcnRUaW1lID0gTW9ub3RvbmljVGltZTo6bm93
KCk7CiAgICAgCiAgICAgewpAQCAtMTM0Niw2ICsxMzU5LDcgQEAgTkVWRVJfSU5MSU5FIGJvb2wg
SGVhcDo6cnVuQmVnaW5QaGFzZShHQwogCiBORVZFUl9JTkxJTkUgYm9vbCBIZWFwOjpydW5GaXhw
b2ludFBoYXNlKEdDQ29uZHVjdG9yIGNvbm4pCiB7CisgICAgaWYgKG1sYW1WZXJib3NlKSBkYXRh
TG9nTG4oIiAgICBtbGFtIEhlYXA6OnJ1bkZpeHBvaW50UGhhc2UoKSBoZWFwLm1fbXV0YXRvck1h
cmtTdGFjay0+c2l6ZSgpICIsIG1fbXV0YXRvck1hcmtTdGFjay0+c2l6ZSgpLCAiIG1fcmFjZU1h
cmtTdGFjay0+c2l6ZSgpICIsIG1fcmFjZU1hcmtTdGFjay0+c2l6ZSgpKTsKICAgICBSRUxFQVNF
X0FTU0VSVChjb25uID09IEdDQ29uZHVjdG9yOjpDb2xsZWN0b3IgfHwgbV9jdXJyZW50VGhyZWFk
U3RhdGUpOwogICAgIAogICAgIFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvciA9ICptX2NvbGxlY3Rv
clNsb3RWaXNpdG9yOwpAQCAtMTQxMyw3ICsxNDI3LDcgQEAgTkVWRVJfSU5MSU5FIGJvb2wgSGVh
cDo6cnVuRml4cG9pbnRQaGFzZQogICAgIC8vIFRoaXMgZG9lc24ndCBoYXZlIHRvIGNoZWNrIHRo
ZSBtdXRhdG9yIFNsb3RWaXNpdG9yIGJlY2F1c2UgdGhhdCBvbmUgYmVjb21lcyBlbXB0eSBhZnRl
ciBldmVyeSBHQwogICAgIC8vIHdvcmsgaW5jcmVtZW50LCBzbyBpdCBtdXN0IGJlIGVtcHR5IG5v
dy4KICAgICBpZiAoc2xvdFZpc2l0b3IuZGlkUmVhY2hUZXJtaW5hdGlvbigpKQotICAgICAgICBy
ZXR1cm4gdHJ1ZTsgLy8gVGhpcyBpcyBsaWtlIHJlbG9vcGluZyB0byB0aGUgdG9wIGlmIHJ1bkZp
eHBvaW50UGhhc2UoKS4KKyAgICAgICAgcmV0dXJuIHRydWU7IC8vIFRoaXMgaXMgbGlrZSByZWxv
b3BpbmcgdG8gdGhlIHRvcCBvZiBydW5GaXhwb2ludFBoYXNlKCkuCiAgICAgICAgIAogICAgIGlm
ICghbV9zY2hlZHVsZXItPnNob3VsZFJlc3VtZSgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAg
LTE0MzQsNiArMTQ0OCw3IEBAIE5FVkVSX0lOTElORSBib29sIEhlYXA6OnJ1bkZpeHBvaW50UGhh
c2UKIAogTkVWRVJfSU5MSU5FIGJvb2wgSGVhcDo6cnVuQ29uY3VycmVudFBoYXNlKEdDQ29uZHVj
dG9yIGNvbm4pCiB7CisgICAgaWYgKG1sYW1WZXJib3NlKSBkYXRhTG9nTG4oIiAgICBtbGFtIEhl
YXA6OnJ1bkNvbmN1cnJlbnRQaGFzZSgpIGhlYXAubV9tdXRhdG9yTWFya1N0YWNrLT5zaXplKCkg
IiwgbV9tdXRhdG9yTWFya1N0YWNrLT5zaXplKCksICIgbV9yYWNlTWFya1N0YWNrLT5zaXplKCkg
IiwgbV9yYWNlTWFya1N0YWNrLT5zaXplKCkpOwogICAgIFNsb3RWaXNpdG9yJiBzbG90VmlzaXRv
ciA9ICptX2NvbGxlY3RvclNsb3RWaXNpdG9yOwogCiAgICAgc3dpdGNoIChjb25uKSB7CkBAIC0x
NDY0LDYgKzE0NzksNyBAQCBORVZFUl9JTkxJTkUgYm9vbCBIZWFwOjpydW5Db25jdXJyZW50UGhh
CiAKIE5FVkVSX0lOTElORSBib29sIEhlYXA6OnJ1blJlbG9vcFBoYXNlKEdDQ29uZHVjdG9yIGNv
bm4pCiB7CisgICAgaWYgKG1sYW1WZXJib3NlKSBkYXRhTG9nTG4oIiAgICBtbGFtIEhlYXA6OnJ1
blJlbG9vcFBoYXNlKCkgaGVhcC5tX211dGF0b3JNYXJrU3RhY2stPnNpemUoKSAiLCBtX211dGF0
b3JNYXJrU3RhY2stPnNpemUoKSwgIiBtX3JhY2VNYXJrU3RhY2stPnNpemUoKSAiLCBtX3JhY2VN
YXJrU3RhY2stPnNpemUoKSk7CiAgICAgZGF0YUxvZ0lmKE9wdGlvbnM6OmxvZ0dDKCksICJbR0M8
IiwgUmF3UG9pbnRlcih0aGlzKSwgIj46ICIsIGdjQ29uZHVjdG9yU2hvcnROYW1lKGNvbm4pLCAi
ICIpOwogICAgIAogICAgIG1fc2NoZWR1bGVyLT5kaWRTdG9wKCk7CkBAIC0xNDc2LDcgKzE0OTIs
OSBAQCBORVZFUl9JTkxJTkUgYm9vbCBIZWFwOjpydW5SZWxvb3BQaGFzZShHCiAKIE5FVkVSX0lO
TElORSBib29sIEhlYXA6OnJ1bkVuZFBoYXNlKEdDQ29uZHVjdG9yIGNvbm4pCiB7CisgICAgaWYg
KG1sYW1WZXJib3NlKSBkYXRhTG9nTG4oIiAgICBtbGFtIEhlYXA6OnJ1bkVuZFBoYXNlKCkgaGVh
cC5tX211dGF0b3JNYXJrU3RhY2stPnNpemUoKSAiLCBtX211dGF0b3JNYXJrU3RhY2stPnNpemUo
KSwgIiBtX3JhY2VNYXJrU3RhY2stPnNpemUoKSAiLCBtX3JhY2VNYXJrU3RhY2stPnNpemUoKSk7
CiAgICAgbV9zY2hlZHVsZXItPmVuZENvbGxlY3Rpb24oKTsKKyAgICBpZiAobWxhbVZlcmJvc2Up
IGRhdGFMb2dMbigiICAgIG1sYW0gSGVhcDo6cnVuRW5kUGhhc2UoKSBTVEVQIDE6IGhlYXAubV9t
dXRhdG9yTWFya1N0YWNrLT5zaXplKCkgIiwgbV9tdXRhdG9yTWFya1N0YWNrLT5zaXplKCksICIg
bV9yYWNlTWFya1N0YWNrLT5zaXplKCkgIiwgbV9yYWNlTWFya1N0YWNrLT5zaXplKCkpOwogICAg
ICAgICAKICAgICB7CiAgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9tYXJraW5nTXV0
ZXgpOwpAQCAtMTQ4NCwxNCArMTUwMiwyNiBAQCBORVZFUl9JTkxJTkUgYm9vbCBIZWFwOjpydW5F
bmRQaGFzZShHQ0NvCiAgICAgICAgIG1fbWFya2luZ0NvbmRpdGlvblZhcmlhYmxlLm5vdGlmeUFs
bCgpOwogICAgIH0KICAgICBtX2hlbHBlckNsaWVudC5maW5pc2goKTsKKyAgICBpZiAobWxhbVZl
cmJvc2UpIGRhdGFMb2dMbigiICAgIG1sYW0gSGVhcDo6cnVuRW5kUGhhc2UoKSBTVEVQIDI6IGhl
YXAubV9tdXRhdG9yTWFya1N0YWNrLT5zaXplKCkgIiwgbV9tdXRhdG9yTWFya1N0YWNrLT5zaXpl
KCksICIgbV9yYWNlTWFya1N0YWNrLT5zaXplKCkgIiwgbV9yYWNlTWFya1N0YWNrLT5zaXplKCkp
OwogICAgIAorICAgIFJFTEVBU0VfQVNTRVJUKG1fbXV0YXRvck1hcmtTdGFjay0+aXNFbXB0eSgp
KTsgLy8gbWxhbSBNYWtlIGludG8gQVNTRVJUCisgICAgUkVMRUFTRV9BU1NFUlQobV9yYWNlTWFy
a1N0YWNrLT5pc0VtcHR5KCkpOyAvLyBtbGFtIE1ha2UgaW50byBBU1NFUlQKKwogICAgIGl0ZXJh
dGVFeGVjdXRpbmdBbmRDb21waWxpbmdDb2RlQmxvY2tzKAogICAgICAgICBbJl0gKENvZGVCbG9j
ayogY29kZUJsb2NrKSB7CiAgICAgICAgICAgICB3cml0ZUJhcnJpZXIoY29kZUJsb2NrKTsKICAg
ICAgICAgfSk7Ci0gICAgICAgIAorICAgIGlmIChtbGFtVmVyYm9zZSkgZGF0YUxvZ0xuKCIgICAg
bWxhbSBIZWFwOjpydW5FbmRQaGFzZSgpIFNURVAgMzogaGVhcC5tX211dGF0b3JNYXJrU3RhY2st
PnNpemUoKSAiLCBtX211dGF0b3JNYXJrU3RhY2stPnNpemUoKSwgIiBtX3JhY2VNYXJrU3RhY2st
PnNpemUoKSAiLCBtX3JhY2VNYXJrU3RhY2stPnNpemUoKSk7CisKICAgICB1cGRhdGVPYmplY3RD
b3VudHMoKTsKKyAgICBpZiAobWxhbVZlcmJvc2UpIGRhdGFMb2dMbigiICAgIG1sYW0gSGVhcDo6
cnVuRW5kUGhhc2UoKSBTVEVQIDQ6IGhlYXAubV9tdXRhdG9yTWFya1N0YWNrLT5zaXplKCkgIiwg
bV9tdXRhdG9yTWFya1N0YWNrLT5zaXplKCksICIgbV9yYWNlTWFya1N0YWNrLT5zaXplKCkgIiwg
bV9yYWNlTWFya1N0YWNrLT5zaXplKCkpOwogICAgIGVuZE1hcmtpbmcoKTsKKyAgICBpZiAobWxh
bVZlcmJvc2UpIGRhdGFMb2dMbigiICAgIG1sYW0gSGVhcDo6cnVuRW5kUGhhc2UoKSBCRUZPUkUg
dmVyaWZ5R0M6IGhlYXAubV9tdXRhdG9yTWFya1N0YWNrLT5zaXplKCkgIiwgbV9tdXRhdG9yTWFy
a1N0YWNrLT5zaXplKCksICIgbV9yYWNlTWFya1N0YWNrLT5zaXplKCkgIiwgbV9yYWNlTWFya1N0
YWNrLT5zaXplKCkpOworCisgICAgLy8gbWxhbQorICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjp2
ZXJpZnlHQygpKSkKKyAgICAgICAgdmVyaWZ5R0MoKTsKKyAgICAvLyBtbGFtICovCiAKICAgICBp
ZiAoVU5MSUtFTFkobV92ZXJpZmllcikpIHsKICAgICAgICAgbV92ZXJpZmllci0+Z2F0aGVyTGl2
ZUNlbGxzKEhlYXBWZXJpZmllcjo6UGhhc2U6OkFmdGVyTWFya2luZyk7CkBAIC0yMTcwLDYgKzIy
MDAsMTMgQEAgdm9pZCBIZWFwOjpzdXNwZW5kQ29tcGlsZXJUaHJlYWRzKCkKIAogdm9pZCBIZWFw
Ojp3aWxsU3RhcnRDb2xsZWN0aW9uKCkKIHsKKyAgICAvLyBtbGFtCisgICAgaWYgKFVOTElLRUxZ
KE9wdGlvbnM6OnZlcmlmeUdDKCkpKSB7CisgICAgICAgIG1fdmVyaWZpZXJTbG90VmlzaXRvciA9
IG1ha2VVbmlxdWU8VmVyaWZpZXJTbG90VmlzaXRvcj4oKnRoaXMpOworICAgICAgICBSRUxFQVNF
X0FTU0VSVCghbV9pc1ZlcmlmeWluZ0dDKTsgLy8gbWxhbSBURVNUIHNhbml0eSBjaGVjay4KKyAg
ICB9CisgICAgLy8gbWxhbSAqLworCiAgICAgZGF0YUxvZ0lmKE9wdGlvbnM6OmxvZ0dDKCksICI9
PiAiKTsKICAgICAKICAgICBpZiAoc2hvdWxkRG9GdWxsQ29sbGVjdGlvbigpKSB7CkBAIC0yNjk3
LDEzICsyNzM0LDE5IEBAIHZvaWQgSGVhcDo6ZGlkRnJlZUJsb2NrKHNpemVfdCBjYXBhY2l0eSkK
ICNlbmRpZgogfQogCisvLyBtbGFtIEZJWE1FCiB2b2lkIEhlYXA6OmFkZENvcmVDb25zdHJhaW50
cygpCiB7CiAgICAgbV9jb25zdHJhaW50U2V0LT5hZGQoCiAgICAgICAgICJDcyIsICJDb25zZXJ2
YXRpdmUgU2NhbiIsCi0gICAgICAgIFt0aGlzLCBsYXN0VmVyc2lvbiA9IHN0YXRpY19jYXN0PHVp
bnQ2NF90PigwKV0gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvcikgbXV0YWJsZSB7CisgICAgICAg
IFt0aGlzLCBsYXN0VmVyc2lvbiA9IHN0YXRpY19jYXN0PHVpbnQ2NF90PigwKV0gKEFic3RyYWN0
U2xvdFZpc2l0b3ImIHZpc2l0b3IpIG11dGFibGUgewogICAgICAgICAgICAgYm9vbCBzaG91bGRO
b3RQcm9kdWNlV29yayA9IGxhc3RWZXJzaW9uID09IG1fcGhhc2VWZXJzaW9uOwotICAgICAgICAg
ICAgaWYgKHNob3VsZE5vdFByb2R1Y2VXb3JrKQorCisgICAgICAgICAgICAvLyBGb3IgdGhlIEdD
IFZlcmZpZXIsIHdlIHdvdWxkIGxpa2UgdG8gdXNlIHRoZSBpZGVudGljYWwgc2V0IG9mIGNvbnNl
cnZhdGl2ZSByb290cworICAgICAgICAgICAgLy8gYXMgdGhlIHJlYWwgR0MuIE90aGVyd2lzZSwg
dGhlIEdDIHZlcmlmaWVyIG1heSByZXBvcnQgZmFsc2UgbmVnYXRpdmVzIGR1ZSB0bworICAgICAg
ICAgICAgLy8gdmFyaWF0aW9ucyBpbiBzdGFjayB2YWx1ZXMuIEZvciB0aGlzIHNhbWUgcmVhc29u
LCB3ZSB3aWxsIHNraXAgdGhpcyBjb25zdHJhaW50CisgICAgICAgICAgICAvLyB3aGVuIHdlJ3Jl
IHJ1bm5pbmcgdGhlIEdDIHZlcmlmaWNhdGlvbiBpbiB0aGUgRW5kIHBoYXNlLgorICAgICAgICAg
ICAgaWYgKHNob3VsZE5vdFByb2R1Y2VXb3JrIHx8IG1faXNWZXJpZnlpbmdHQykKICAgICAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAKICAgICAgICAgICAgIFRpbWluZ1Njb3BlIHBy
ZUNvbnZlcmdlbmNlVGltaW5nU2NvcGUoKnRoaXMsICJDb25zdHJhaW50OiBjb25zZXJ2YXRpdmUg
c2NhbiIpOwpAQCAtMjcxOCwxMyArMjc2MSwxNyBAQCB2b2lkIEhlYXA6OmFkZENvcmVDb25zdHJh
aW50cygpCiAgICAgICAgICAgICAgICAgZ2F0aGVySlNTdGFja1Jvb3RzKGNvbnNlcnZhdGl2ZVJv
b3RzKTsKICAgICAgICAgICAgICAgICBnYXRoZXJTY3JhdGNoQnVmZmVyUm9vdHMoY29uc2VydmF0
aXZlUm9vdHMpOwogCi0gICAgICAgICAgICAgICAgU2V0Um9vdE1hcmtSZWFzb25TY29wZSByb290
U2NvcGUoc2xvdFZpc2l0b3IsIFNsb3RWaXNpdG9yOjpSb290TWFya1JlYXNvbjo6Q29uc2VydmF0
aXZlU2Nhbik7Ci0gICAgICAgICAgICAgICAgc2xvdFZpc2l0b3IuYXBwZW5kKGNvbnNlcnZhdGl2
ZVJvb3RzKTsKKyAgICAgICAgICAgICAgICBTZXRSb290TWFya1JlYXNvblNjb3BlIHJvb3RTY29w
ZSh2aXNpdG9yLCBBYnN0cmFjdFNsb3RWaXNpdG9yOjpSb290TWFya1JlYXNvbjo6Q29uc2VydmF0
aXZlU2Nhbik7CisgICAgICAgICAgICAgICAgdmlzaXRvci5hcHBlbmRfQ29uc2VydmF0aXZlUm9v
dHMoY29uc2VydmF0aXZlUm9vdHMpOworICAgICAgICAgICAgICAgIGlmIChVTkxJS0VMWShtX3Zl
cmlmaWVyU2xvdFZpc2l0b3IpKQorICAgICAgICAgICAgICAgICAgICBtX3ZlcmlmaWVyU2xvdFZp
c2l0b3ItPmFwcGVuZF9Db25zZXJ2YXRpdmVSb290cyhjb25zZXJ2YXRpdmVSb290cyk7CiAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICBpZiAoT3B0aW9uczo6dXNlSklUKCkpIHsKICAgICAgICAg
ICAgICAgICAvLyBKSVRTdHViUm91dGluZXMgbXVzdCBiZSB2aXNpdGVkIGFmdGVyIHNjYW5uaW5n
IENvbnNlcnZhdGl2ZVJvb3RzIHNpbmNlIEpJVFN0dWJSb3V0aW5lcyBkZXBlbmQgb24gdGhlIGhv
b2sgZXhlY3V0ZWQgZHVyaW5nIGdhdGhlcmluZyBDb25zZXJ2YXRpdmVSb290cy4KLSAgICAgICAg
ICAgICAgICBTZXRSb290TWFya1JlYXNvblNjb3BlIHJvb3RTY29wZShzbG90VmlzaXRvciwgU2xv
dFZpc2l0b3I6OlJvb3RNYXJrUmVhc29uOjpKSVRTdHViUm91dGluZXMpOwotICAgICAgICAgICAg
ICAgIG1faml0U3R1YlJvdXRpbmVzLT50cmFjZU1hcmtlZFN0dWJSb3V0aW5lcyhzbG90VmlzaXRv
cik7CisgICAgICAgICAgICAgICAgU2V0Um9vdE1hcmtSZWFzb25TY29wZSByb290U2NvcGUodmlz
aXRvciwgQWJzdHJhY3RTbG90VmlzaXRvcjo6Um9vdE1hcmtSZWFzb246OkpJVFN0dWJSb3V0aW5l
cyk7CisgICAgICAgICAgICAgICAgbV9qaXRTdHViUm91dGluZXMtPnRyYWNlTWFya2VkU3R1YlJv
dXRpbmVzMSh2aXNpdG9yKTsKKyAgICAgICAgICAgICAgICBpZiAoVU5MSUtFTFkobV92ZXJpZmll
clNsb3RWaXNpdG9yKSkKKyAgICAgICAgICAgICAgICAgICAgbV9qaXRTdHViUm91dGluZXMtPnRy
YWNlTWFya2VkU3R1YlJvdXRpbmVzMSgqbV92ZXJpZmllclNsb3RWaXNpdG9yKTsKICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIAogICAgICAgICAgICAgbGFzdFZlcnNpb24gPSBtX3BoYXNlVmVy
c2lvbjsKQEAgLTI3MzMsOTIgKzI3ODAsOTIgQEAgdm9pZCBIZWFwOjphZGRDb3JlQ29uc3RyYWlu
dHMoKQogICAgIAogICAgIG1fY29uc3RyYWludFNldC0+YWRkKAogICAgICAgICAiTXNyIiwgIk1p
c2MgU21hbGwgUm9vdHMiLAotICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRv
cikgeworICAgICAgICBbdGhpc10gKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsKIAog
I2lmIEpTQ19PQkpDX0FQSV9FTkFCTEVECi0gICAgICAgICAgICBzY2FuRXh0ZXJuYWxSZW1lbWJl
cmVkU2V0KG1fdm0sIHNsb3RWaXNpdG9yKTsKKyAgICAgICAgICAgIHNjYW5FeHRlcm5hbFJlbWVt
YmVyZWRTZXQobV92bSwgdmlzaXRvcik7CiAjZW5kaWYKICAgICAgICAgICAgIGlmIChtX3ZtLnNt
YWxsU3RyaW5ncy5uZWVkc1RvQmVWaXNpdGVkKCptX2NvbGxlY3Rpb25TY29wZSkpIHsKLSAgICAg
ICAgICAgICAgICBTZXRSb290TWFya1JlYXNvblNjb3BlIHJvb3RTY29wZShzbG90VmlzaXRvciwg
U2xvdFZpc2l0b3I6OlJvb3RNYXJrUmVhc29uOjpTdHJvbmdSZWZlcmVuY2VzKTsKLSAgICAgICAg
ICAgICAgICBtX3ZtLnNtYWxsU3RyaW5ncy52aXNpdFN0cm9uZ1JlZmVyZW5jZXMoc2xvdFZpc2l0
b3IpOworICAgICAgICAgICAgICAgIFNldFJvb3RNYXJrUmVhc29uU2NvcGUgcm9vdFNjb3BlKHZp
c2l0b3IsIEFic3RyYWN0U2xvdFZpc2l0b3I6OlJvb3RNYXJrUmVhc29uOjpTdHJvbmdSZWZlcmVu
Y2VzKTsKKyAgICAgICAgICAgICAgICBtX3ZtLnNtYWxsU3RyaW5ncy52aXNpdFN0cm9uZ1JlZmVy
ZW5jZXModmlzaXRvcik7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICBTZXRSb290TWFya1JlYXNvblNjb3BlIHJvb3RTY29wZShzbG90
VmlzaXRvciwgU2xvdFZpc2l0b3I6OlJvb3RNYXJrUmVhc29uOjpQcm90ZWN0ZWRWYWx1ZXMpOwor
ICAgICAgICAgICAgICAgIFNldFJvb3RNYXJrUmVhc29uU2NvcGUgcm9vdFNjb3BlKHZpc2l0b3Is
IEFic3RyYWN0U2xvdFZpc2l0b3I6OlJvb3RNYXJrUmVhc29uOjpQcm90ZWN0ZWRWYWx1ZXMpOwog
ICAgICAgICAgICAgICAgIGZvciAoYXV0byYgcGFpciA6IG1fcHJvdGVjdGVkVmFsdWVzKQotICAg
ICAgICAgICAgICAgICAgICBzbG90VmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZChwYWlyLmtleSk7
CisgICAgICAgICAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQocGFpci5rZXkp
OwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAobV9tYXJrTGlz
dFNldCAmJiBtX21hcmtMaXN0U2V0LT5zaXplKCkpIHsKLSAgICAgICAgICAgICAgICBTZXRSb290
TWFya1JlYXNvblNjb3BlIHJvb3RTY29wZShzbG90VmlzaXRvciwgU2xvdFZpc2l0b3I6OlJvb3RN
YXJrUmVhc29uOjpDb25zZXJ2YXRpdmVTY2FuKTsKLSAgICAgICAgICAgICAgICBNYXJrZWRBcmd1
bWVudEJ1ZmZlcjo6bWFya0xpc3RzKHNsb3RWaXNpdG9yLCAqbV9tYXJrTGlzdFNldCk7CisgICAg
ICAgICAgICAgICAgU2V0Um9vdE1hcmtSZWFzb25TY29wZSByb290U2NvcGUodmlzaXRvciwgQWJz
dHJhY3RTbG90VmlzaXRvcjo6Um9vdE1hcmtSZWFzb246OkNvbnNlcnZhdGl2ZVNjYW4pOworICAg
ICAgICAgICAgICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyOjptYXJrTGlzdHModmlzaXRvciwgKm1f
bWFya0xpc3RTZXQpOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBtX21hcmtlZEpTVmFs
dWVSZWZBcnJheXMuZm9yRWFjaChbJl0gKE1hcmtlZEpTVmFsdWVSZWZBcnJheSogYXJyYXkpIHsK
LSAgICAgICAgICAgICAgICBhcnJheS0+dmlzaXRBZ2dyZWdhdGUoc2xvdFZpc2l0b3IpOworICAg
ICAgICAgICAgICAgIGFycmF5LT52aXNpdEFnZ3JlZ2F0ZTEodmlzaXRvcik7CiAgICAgICAgICAg
ICB9KTsKIAogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFNldFJvb3RNYXJrUmVhc29u
U2NvcGUgcm9vdFNjb3BlKHNsb3RWaXNpdG9yLCBTbG90VmlzaXRvcjo6Um9vdE1hcmtSZWFzb246
OlZNRXhjZXB0aW9ucyk7Ci0gICAgICAgICAgICAgICAgc2xvdFZpc2l0b3IuYXBwZW5kVW5iYXJy
aWVyZWQobV92bS5leGNlcHRpb24oKSk7Ci0gICAgICAgICAgICAgICAgc2xvdFZpc2l0b3IuYXBw
ZW5kVW5iYXJyaWVyZWQobV92bS5sYXN0RXhjZXB0aW9uKCkpOworICAgICAgICAgICAgICAgIFNl
dFJvb3RNYXJrUmVhc29uU2NvcGUgcm9vdFNjb3BlKHZpc2l0b3IsIEFic3RyYWN0U2xvdFZpc2l0
b3I6OlJvb3RNYXJrUmVhc29uOjpWTUV4Y2VwdGlvbnMpOworICAgICAgICAgICAgICAgIHZpc2l0
b3IuYXBwZW5kVW5iYXJyaWVyZWQobV92bS5leGNlcHRpb24oKSk7CisgICAgICAgICAgICAgICAg
dmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZChtX3ZtLmxhc3RFeGNlcHRpb24oKSk7CiAgICAgICAg
ICAgICB9CiAgICAgICAgIH0sCiAgICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5OjpHcmV5ZWRC
eUV4ZWN1dGlvbik7CiAgICAgCiAgICAgbV9jb25zdHJhaW50U2V0LT5hZGQoCiAgICAgICAgICJT
aCIsICJTdHJvbmcgSGFuZGxlcyIsCi0gICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RW
aXNpdG9yKSB7Ci0gICAgICAgICAgICBTZXRSb290TWFya1JlYXNvblNjb3BlIHJvb3RTY29wZShz
bG90VmlzaXRvciwgU2xvdFZpc2l0b3I6OlJvb3RNYXJrUmVhc29uOjpTdHJvbmdIYW5kbGVzKTsK
LSAgICAgICAgICAgIG1faGFuZGxlU2V0LnZpc2l0U3Ryb25nSGFuZGxlcyhzbG90VmlzaXRvcik7
CisgICAgICAgIFt0aGlzXSAoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikgeworICAgICAg
ICAgICAgU2V0Um9vdE1hcmtSZWFzb25TY29wZSByb290U2NvcGUodmlzaXRvciwgQWJzdHJhY3RT
bG90VmlzaXRvcjo6Um9vdE1hcmtSZWFzb246OlN0cm9uZ0hhbmRsZXMpOworICAgICAgICAgICAg
bV9oYW5kbGVTZXQudmlzaXRTdHJvbmdIYW5kbGVzMSh2aXNpdG9yKTsKICAgICAgICAgfSwKICAg
ICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHk6OkdyZXllZEJ5RXhlY3V0aW9uKTsKICAgICAKICAg
ICBtX2NvbnN0cmFpbnRTZXQtPmFkZCgKICAgICAgICAgIkQiLCAiRGVidWdnZXIiLAotICAgICAg
ICBbdGhpc10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvcikgewotICAgICAgICAgICAgU2V0Um9v
dE1hcmtSZWFzb25TY29wZSByb290U2NvcGUoc2xvdFZpc2l0b3IsIFNsb3RWaXNpdG9yOjpSb290
TWFya1JlYXNvbjo6RGVidWdnZXIpOworICAgICAgICBbdGhpc10gKEFic3RyYWN0U2xvdFZpc2l0
b3ImIHZpc2l0b3IpIHsKKyAgICAgICAgICAgIFNldFJvb3RNYXJrUmVhc29uU2NvcGUgcm9vdFNj
b3BlKHZpc2l0b3IsIEFic3RyYWN0U2xvdFZpc2l0b3I6OlJvb3RNYXJrUmVhc29uOjpEZWJ1Z2dl
cik7CiAKICNpZiBFTkFCTEUoU0FNUExJTkdfUFJPRklMRVIpCiAgICAgICAgICAgICBpZiAoU2Ft
cGxpbmdQcm9maWxlciogc2FtcGxpbmdQcm9maWxlciA9IG1fdm0uc2FtcGxpbmdQcm9maWxlcigp
KSB7CiAgICAgICAgICAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhzYW1wbGluZ1Byb2Zp
bGVyLT5nZXRMb2NrKCkpOwogICAgICAgICAgICAgICAgIHNhbXBsaW5nUHJvZmlsZXItPnByb2Nl
c3NVbnZlcmlmaWVkU3RhY2tUcmFjZXMobG9ja2VyKTsKLSAgICAgICAgICAgICAgICBzYW1wbGlu
Z1Byb2ZpbGVyLT52aXNpdChzbG90VmlzaXRvcik7CisgICAgICAgICAgICAgICAgc2FtcGxpbmdQ
cm9maWxlci0+dmlzaXQodmlzaXRvcik7CiAgICAgICAgICAgICAgICAgaWYgKE9wdGlvbnM6Omxv
Z0dDKCkgPT0gR0NMb2dnaW5nOjpWZXJib3NlKQotICAgICAgICAgICAgICAgICAgICBkYXRhTG9n
KCJTYW1wbGluZyBQcm9maWxlciBkYXRhOlxuIiwgc2xvdFZpc2l0b3IpOworICAgICAgICAgICAg
ICAgICAgICBkYXRhTG9nKCJTYW1wbGluZyBQcm9maWxlciBkYXRhOlxuIiwgdmlzaXRvcik7CiAg
ICAgICAgICAgICB9CiAjZW5kaWYgLy8gRU5BQkxFKFNBTVBMSU5HX1BST0ZJTEVSKQogCiAgICAg
ICAgICAgICBpZiAobV92bS50eXBlUHJvZmlsZXIoKSkKLSAgICAgICAgICAgICAgICBtX3ZtLnR5
cGVQcm9maWxlckxvZygpLT52aXNpdChzbG90VmlzaXRvcik7CisgICAgICAgICAgICAgICAgbV92
bS50eXBlUHJvZmlsZXJMb2coKS0+dmlzaXQodmlzaXRvcik7CiAgICAgICAgICAgICAKICAgICAg
ICAgICAgIGlmIChhdXRvKiBzaGFkb3dDaGlja2VuID0gbV92bS5zaGFkb3dDaGlja2VuKCkpCi0g
ICAgICAgICAgICAgICAgc2hhZG93Q2hpY2tlbi0+dmlzaXRDaGlsZHJlbihzbG90VmlzaXRvcik7
CisgICAgICAgICAgICAgICAgc2hhZG93Q2hpY2tlbi0+dmlzaXRDaGlsZHJlbih2aXNpdG9yKTsK
ICAgICAgICAgfSwKICAgICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHk6OkdyZXllZEJ5RXhlY3V0
aW9uKTsKICAgICAKICAgICBtX2NvbnN0cmFpbnRTZXQtPmFkZCgKICAgICAgICAgIldzIiwgIldl
YWsgU2V0cyIsCi0gICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yKSB7Ci0g
ICAgICAgICAgICBTZXRSb290TWFya1JlYXNvblNjb3BlIHJvb3RTY29wZShzbG90VmlzaXRvciwg
U2xvdFZpc2l0b3I6OlJvb3RNYXJrUmVhc29uOjpXZWFrU2V0cyk7Ci0gICAgICAgICAgICBtX29i
amVjdFNwYWNlLnZpc2l0V2Vha1NldHMoc2xvdFZpc2l0b3IpOworICAgICAgICBbdGhpc10gKEFi
c3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsKKyAgICAgICAgICAgIFNldFJvb3RNYXJrUmVh
c29uU2NvcGUgcm9vdFNjb3BlKHZpc2l0b3IsIEFic3RyYWN0U2xvdFZpc2l0b3I6OlJvb3RNYXJr
UmVhc29uOjpXZWFrU2V0cyk7CisgICAgICAgICAgICBtX29iamVjdFNwYWNlLnZpc2l0V2Vha1Nl
dHMxKHZpc2l0b3IpOwogICAgICAgICB9LAogICAgICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eTo6
R3JleWVkQnlNYXJraW5nKTsKICAgICAKICAgICBtX2NvbnN0cmFpbnRTZXQtPmFkZCgKICAgICAg
ICAgIk8iLCAiT3V0cHV0IiwKLSAgICAgICAgW10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvcikg
ewotICAgICAgICAgICAgVk0mIHZtID0gc2xvdFZpc2l0b3Iudm0oKTsKKyAgICAgICAgW10gKEFi
c3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsKKyAgICAgICAgICAgIFZNJiB2bSA9IHZpc2l0
b3Iudm0oKTsKIAotICAgICAgICAgICAgYXV0byBjYWxsT3V0cHV0Q29uc3RyYWludCA9IFtdIChT
bG90VmlzaXRvciYgc2xvdFZpc2l0b3IsIEhlYXBDZWxsKiBoZWFwQ2VsbCwgSGVhcENlbGw6Oktp
bmQpIHsKLSAgICAgICAgICAgICAgICBTZXRSb290TWFya1JlYXNvblNjb3BlIHJvb3RTY29wZShz
bG90VmlzaXRvciwgU2xvdFZpc2l0b3I6OlJvb3RNYXJrUmVhc29uOjpPdXRwdXQpOwotICAgICAg
ICAgICAgICAgIFZNJiB2bSA9IHNsb3RWaXNpdG9yLnZtKCk7CisgICAgICAgICAgICBhdXRvIGNh
bGxPdXRwdXRDb25zdHJhaW50ID0gW10gKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIEhl
YXBDZWxsKiBoZWFwQ2VsbCwgSGVhcENlbGw6OktpbmQpIHsKKyAgICAgICAgICAgICAgICBTZXRS
b290TWFya1JlYXNvblNjb3BlIHJvb3RTY29wZSh2aXNpdG9yLCBBYnN0cmFjdFNsb3RWaXNpdG9y
OjpSb290TWFya1JlYXNvbjo6T3V0cHV0KTsKKyAgICAgICAgICAgICAgICBWTSYgdm0gPSB2aXNp
dG9yLnZtKCk7CiAgICAgICAgICAgICAgICAgSlNDZWxsKiBjZWxsID0gc3RhdGljX2Nhc3Q8SlND
ZWxsKj4oaGVhcENlbGwpOwotICAgICAgICAgICAgICAgIGNlbGwtPm1ldGhvZFRhYmxlKHZtKS0+
dmlzaXRPdXRwdXRDb25zdHJhaW50cyhjZWxsLCBzbG90VmlzaXRvcik7CisgICAgICAgICAgICAg
ICAgY2VsbC0+bWV0aG9kVGFibGUodm0pLT52aXNpdE91dHB1dENvbnN0cmFpbnRzKGNlbGwsIHZp
c2l0b3IpOwogICAgICAgICAgICAgfTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgYXV0byBh
ZGQgPSBbJl0gKGF1dG8mIHNldCkgewotICAgICAgICAgICAgICAgIHNsb3RWaXNpdG9yLmFkZFBh
cmFsbGVsQ29uc3RyYWludFRhc2soc2V0LmZvckVhY2hNYXJrZWRDZWxsSW5QYXJhbGxlbChjYWxs
T3V0cHV0Q29uc3RyYWludCkpOworICAgICAgICAgICAgICAgIHZpc2l0b3IuYWRkUGFyYWxsZWxD
b25zdHJhaW50VGFzayhzZXQuZm9yRWFjaE1hcmtlZENlbGxJblBhcmFsbGVsKGNhbGxPdXRwdXRD
b25zdHJhaW50KSk7CiAgICAgICAgICAgICB9OwogICAgICAgICAgICAgCiAgICAgICAgICAgICBh
ZGQodm0uZXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZXNXaXRoQ29uc3RyYWludHMpOwpAQCAtMjgz
MiwyMiArMjg3OSwyMiBAQCB2b2lkIEhlYXA6OmFkZENvcmVDb25zdHJhaW50cygpCiAgICAgaWYg
KE9wdGlvbnM6OnVzZUpJVCgpKSB7CiAgICAgICAgIG1fY29uc3RyYWludFNldC0+YWRkKAogICAg
ICAgICAgICAgIkR3IiwgIkRGRyBXb3JrbGlzdHMiLAotICAgICAgICAgICAgW3RoaXNdIChTbG90
VmlzaXRvciYgc2xvdFZpc2l0b3IpIHsKLSAgICAgICAgICAgICAgICBTZXRSb290TWFya1JlYXNv
blNjb3BlIHJvb3RTY29wZShzbG90VmlzaXRvciwgU2xvdFZpc2l0b3I6OlJvb3RNYXJrUmVhc29u
OjpERkdXb3JrTGlzdHMpOworICAgICAgICAgICAgW3RoaXNdIChBYnN0cmFjdFNsb3RWaXNpdG9y
JiB2aXNpdG9yKSB7CisgICAgICAgICAgICAgICAgU2V0Um9vdE1hcmtSZWFzb25TY29wZSByb290
U2NvcGUodmlzaXRvciwgQWJzdHJhY3RTbG90VmlzaXRvcjo6Um9vdE1hcmtSZWFzb246OkRGR1dv
cmtMaXN0cyk7CiAKICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBERkc6Om51bWJl
ck9mV29ya2xpc3RzKCk7IGktLTspCi0gICAgICAgICAgICAgICAgICAgIERGRzo6ZXhpc3RpbmdX
b3JrbGlzdEZvckluZGV4KGkpLnZpc2l0V2Vha1JlZmVyZW5jZXMoc2xvdFZpc2l0b3IpOworICAg
ICAgICAgICAgICAgICAgICBERkc6OmV4aXN0aW5nV29ya2xpc3RGb3JJbmRleChpKS52aXNpdFdl
YWtSZWZlcmVuY2VzKHZpc2l0b3IpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAg
IC8vIEZJWE1FOiBUaGlzIGlzIGFsbW9zdCBjZXJ0YWlubHkgdW5uZWNlc3NhcnkuCiAgICAgICAg
ICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2Njgy
OQogICAgICAgICAgICAgICAgIERGRzo6aXRlcmF0ZUNvZGVCbG9ja3NGb3JHQygKICAgICAgICAg
ICAgICAgICAgICAgbV92bSwKICAgICAgICAgICAgICAgICAgICAgWyZdIChDb2RlQmxvY2sqIGNv
ZGVCbG9jaykgewotICAgICAgICAgICAgICAgICAgICAgICAgc2xvdFZpc2l0b3IuYXBwZW5kVW5i
YXJyaWVyZWQoY29kZUJsb2NrKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZpc2l0b3IuYXBw
ZW5kVW5iYXJyaWVyZWQoY29kZUJsb2NrKTsKICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAg
ICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkgPT0gR0NM
b2dnaW5nOjpWZXJib3NlKQotICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJERkcgV29ya2xp
c3RzOlxuIiwgc2xvdFZpc2l0b3IpOworICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJERkcg
V29ya2xpc3RzOlxuIiwgdmlzaXRvcik7CiAgICAgICAgICAgICB9LAogICAgICAgICAgICAgQ29u
c3RyYWludFZvbGF0aWxpdHk6OkdyZXllZEJ5TWFya2luZyk7CiAgICAgfQpAQCAtMjg1NSwxNCAr
MjkwMiwxNCBAQCB2b2lkIEhlYXA6OmFkZENvcmVDb25zdHJhaW50cygpCiAgICAgCiAgICAgbV9j
b25zdHJhaW50U2V0LT5hZGQoCiAgICAgICAgICJDYiIsICJDb2RlQmxvY2tzIiwKLSAgICAgICAg
W3RoaXNdIChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IpIHsKLSAgICAgICAgICAgIFNldFJvb3RN
YXJrUmVhc29uU2NvcGUgcm9vdFNjb3BlKHNsb3RWaXNpdG9yLCBTbG90VmlzaXRvcjo6Um9vdE1h
cmtSZWFzb246OkNvZGVCbG9ja3MpOworICAgICAgICBbdGhpc10gKEFic3RyYWN0U2xvdFZpc2l0
b3ImIHZpc2l0b3IpIHsKKyAgICAgICAgICAgIFNldFJvb3RNYXJrUmVhc29uU2NvcGUgcm9vdFNj
b3BlKHZpc2l0b3IsIEFic3RyYWN0U2xvdFZpc2l0b3I6OlJvb3RNYXJrUmVhc29uOjpDb2RlQmxv
Y2tzKTsKICAgICAgICAgICAgIGl0ZXJhdGVFeGVjdXRpbmdBbmRDb21waWxpbmdDb2RlQmxvY2tz
V2l0aG91dEhvbGRpbmdMb2NrcygKICAgICAgICAgICAgICAgICBbJl0gKENvZGVCbG9jayogY29k
ZUJsb2NrKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIFZpc2l0IHRoZSBDb2RlQmxvY2sgYXMg
YSBjb25zdHJhaW50IG9ubHkgaWYgaXQncyBibGFjay4KICAgICAgICAgICAgICAgICAgICAgaWYg
KGlzTWFya2VkKGNvZGVCbG9jaykKICAgICAgICAgICAgICAgICAgICAgICAgICYmIGNvZGVCbG9j
ay0+Y2VsbFN0YXRlKCkgPT0gQ2VsbFN0YXRlOjpQb3NzaWJseUJsYWNrKQotICAgICAgICAgICAg
ICAgICAgICAgICAgc2xvdFZpc2l0b3IudmlzaXRBc0NvbnN0cmFpbnQoY29kZUJsb2NrKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHZpc2l0b3IudmlzaXRBc0NvbnN0cmFpbnQoY29kZUJsb2Nr
KTsKICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgfSwKICAgICAgICAgQ29uc3RyYWludFZv
bGF0aWxpdHk6OlNlbGRvbUdyZXllZCk7CkBAIC0zMDIzLDQgKzMwNzAsMjUgQEAgdm9pZCBIZWFw
OjpydW5UYXNrSW5QYXJhbGxlbChSZWZQdHI8U2hhcgogICAgIH0KIH0KIAorLy8gbWxhbQordm9p
ZCBIZWFwOjp2ZXJpZnlHQygpCit7CisgICAgUkVMRUFTRV9BU1NFUlQobV92ZXJpZmllclNsb3RW
aXNpdG9yKTsKKyAgICBSRUxFQVNFX0FTU0VSVCghbV9pc1ZlcmlmeWluZ0dDKTsKKyAgICBtX2lz
VmVyaWZ5aW5nR0MgPSB0cnVlOworCisgICAgVmVyaWZpZXJTbG90VmlzaXRvciYgdmlzaXRvciA9
ICptX3ZlcmlmaWVyU2xvdFZpc2l0b3I7CisKKy8vICAgIFJFTEVBU0VfQVNTRVJUKG1fbXV0YXRv
ck1hcmtTdGFjay0+aXNFbXB0eSgpKTsKKy8vICAgIFJFTEVBU0VfQVNTRVJUKG1fcmFjZU1hcmtT
dGFjay0+aXNFbXB0eSgpKTsKKyAgICBkbyB7CisgICAgICAgIHZpc2l0b3IuZHJhaW4oKTsKKyAg
ICAgICAgbV9jb25zdHJhaW50U2V0LT5leGVjdXRlQWxsKHZpc2l0b3IpOworICAgIH0gd2hpbGUg
KCF2aXNpdG9yLmlzRW1wdHkoKSk7CisKKyAgICBtX3ZlcmlmaWVyU2xvdFZpc2l0b3IgPSBudWxs
cHRyOworICAgIG1faXNWZXJpZnlpbmdHQyA9IGZhbHNlOworfQorLy8gbWxhbSAqLworCiB9IC8v
IG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgJKHJldmlzaW9u
IDI3MjE5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkod29ya2luZyBj
b3B5KQpAQCAtODYsNiArODYsNyBAQCBjbGFzcyBTcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyOwog
Y2xhc3MgU3RvcElmTmVjZXNzYXJ5VGltZXI7CiBjbGFzcyBTd2VlcGluZ1Njb3BlOwogY2xhc3Mg
Vk07CitjbGFzcyBWZXJpZmllclNsb3RWaXNpdG9yOwogY2xhc3MgV2Vha0dDTWFwQmFzZTsKIHN0
cnVjdCBDdXJyZW50VGhyZWFkU3RhdGU7CiAKQEAgLTE4NCw3ICsxODUsOSBAQCBwdWJsaWM6CiAg
ICAgCiAgICAgYm9vbCBpc1NodXR0aW5nRG93bigpIGNvbnN0IHsgcmV0dXJuIG1faXNTaHV0dGlu
Z0Rvd247IH0KIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIGJvb2wgaXNBbmFseXppbmdIZWFwKCkg
Y29uc3Q7CisvLyAgICBKU19FWFBPUlRfUFJJVkFURSBib29sIGlzQW5hbHl6aW5nSGVhcCgpIGNv
bnN0OworLy8gICAgYm9vbCBpc0FuYWx5emluZ0hlYXAoKSBjb25zdCB7IHJldHVybiBtX2hlYXBB
bmFseXplcjsgfQorLy8gICAgSGVhcEFuYWx5emVyKiBoZWFwQW5hbHl6ZXIoKSBjb25zdCB7IHJl
dHVybiBtX2hlYXBBbmFseXplcjsgfQogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBzd2Vl
cFN5bmNocm9ub3VzbHkoKTsKIApAQCAtMzg1LDggKzM4OCw4IEBAIHB1YmxpYzoKICAgICAKICAg
ICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGFkZE1hcmtpbmdDb25zdHJhaW50KHN0ZDo6dW5pcXVl
X3B0cjxNYXJraW5nQ29uc3RyYWludD4pOwogICAgIAotICAgIHNpemVfdCBudW1PcGFxdWVSb290
cygpIGNvbnN0IHsgcmV0dXJuIG1fb3BhcXVlUm9vdHMuc2l6ZSgpOyB9Ci0KKy8vICAgIHNpemVf
dCBudW1PcGFxdWVSb290cygpIGNvbnN0IHsgcmV0dXJuIG1fb3BhcXVlUm9vdHMuc2l6ZSgpOyB9
IC8vIG1sYW0gVU5VU0VECisvLwogICAgIEhlYXBWZXJpZmllciogdmVyaWZpZXIoKSBjb25zdCB7
IHJldHVybiBtX3ZlcmlmaWVyLmdldCgpOyB9CiAgICAgCiAgICAgdm9pZCBhZGRIZWFwRmluYWxp
emVyQ2FsbGJhY2soY29uc3QgSGVhcEZpbmFsaXplckNhbGxiYWNrJik7CkBAIC01OTAsNiArNTkz
LDggQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgYm9vbCB1c2VHZW5lcmF0aW9uYWxHQygpOwogICAg
IHN0YXRpYyBib29sIHNob3VsZFN3ZWVwU3luY2hyb25vdXNseSgpOwogICAgIAorICAgIHZvaWQg
dmVyaWZ5R0MoKTsKKwogICAgIGNvbnN0IEhlYXBUeXBlIG1faGVhcFR5cGU7CiAgICAgTXV0YXRv
clN0YXRlIG1fbXV0YXRvclN0YXRlIHsgTXV0YXRvclN0YXRlOjpSdW5uaW5nIH07CiAgICAgY29u
c3Qgc2l6ZV90IG1fcmFtU2l6ZTsKQEAgLTYzNiw2ICs2NDEsNyBAQCBwcml2YXRlOgogICAgIHN0
ZDo6dW5pcXVlX3B0cjxNYXJrU3RhY2tBcnJheT4gbV9tdXRhdG9yTWFya1N0YWNrOwogICAgIHN0
ZDo6dW5pcXVlX3B0cjxNYXJrU3RhY2tBcnJheT4gbV9yYWNlTWFya1N0YWNrOwogICAgIHN0ZDo6
dW5pcXVlX3B0cjxNYXJraW5nQ29uc3RyYWludFNldD4gbV9jb25zdHJhaW50U2V0OworICAgIHN0
ZDo6dW5pcXVlX3B0cjxWZXJpZmllclNsb3RWaXNpdG9yPiBtX3ZlcmlmaWVyU2xvdFZpc2l0b3I7
CiAKICAgICAvLyBXZSBwb29sIHRoZSBzbG90IHZpc2l0b3JzIHVzZWQgYnkgcGFyYWxsZWwgbWFy
a2luZyB0aHJlYWRzLiBJdCdzIHVzZWZ1bCB0byBiZSBhYmxlIHRvCiAgICAgLy8gZW51bWVyYXRl
IG92ZXIgdGhlbSwgYW5kIGl0J3MgdXNlZnVsIHRvIGhhdmUgdGhlbSBjYWNoZSBzb21lIHNtYWxs
IGFtb3VudCBvZiBtZW1vcnkgZnJvbQpAQCAtNjU0LDYgKzY2MCw3IEBAIHByaXZhdGU6CiAgICAg
Ym9vbCBtX2lzU2FmZVRvQ29sbGVjdCB7IGZhbHNlIH07CiAgICAgYm9vbCBtX2lzU2h1dHRpbmdE
b3duIHsgZmFsc2UgfTsKICAgICBib29sIG1fbXV0YXRvclNob3VsZEJlRmVuY2VkIHsgT3B0aW9u
czo6Zm9yY2VGZW5jZWRCYXJyaWVyKCkgfTsKKyAgICBib29sIG1faXNWZXJpZnlpbmdHQyB7IGZh
bHNlIH07CiAKICAgICB1bnNpZ25lZCBtX2JhcnJpZXJUaHJlc2hvbGQgeyBPcHRpb25zOjpmb3Jj
ZUZlbmNlZEJhcnJpZXIoKSA/IHRhdXRvbG9naWNhbFRocmVzaG9sZCA6IGJsYWNrVGhyZXNob2xk
IH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBJbmxpbmVzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcElubGluZXMuaAkocmV2
aXNpb24gMjcyMTkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcElubGluZXMu
aAkod29ya2luZyBjb3B5KQpAQCAtNjksNiArNjksOCBAQCBpbmxpbmUgYm9vbCBIZWFwOjp3b3Js
ZElzU3RvcHBlZCgpIGNvbnN0CiAKIEFMV0FZU19JTkxJTkUgYm9vbCBIZWFwOjppc01hcmtlZChj
b25zdCB2b2lkKiByYXdDZWxsKQogeworICAgIFJFTEVBU0VfQVNTRVJUKCFtX2lzVmVyaWZ5aW5n
R0MpOyAvLyBtbGFtIFRFU1Qgb25seQorCiAgICAgSGVhcENlbGwqIGNlbGwgPSBiaXR3aXNlX2Nh
c3Q8SGVhcENlbGwqPihyYXdDZWxsKTsKICAgICBpZiAoY2VsbC0+aXNQcmVjaXNlQWxsb2NhdGlv
bigpKQogICAgICAgICByZXR1cm4gY2VsbC0+cHJlY2lzZUFsbG9jYXRpb24oKS5pc01hcmtlZCgp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcFByb2ZpbGVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwUHJvZmlsZXIuY3BwCShy
ZXZpc2lvbiAyNzIxOTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwUHJvZmls
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MCw2ICs2MCw3IEBAIHZvaWQgSGVhcFByb2ZpbGVy
OjpzZXRBY3RpdmVIZWFwQW5hbHl6ZXIKIHsKICAgICBBU1NFUlQoISFtX2FjdGl2ZUFuYWx5emVy
ICE9ICEhYW5hbHl6ZXIpOwogICAgIG1fYWN0aXZlQW5hbHl6ZXIgPSBhbmFseXplcjsKKyAgICBt
X3ZtLnNldEFjdGl2ZUhlYXBBbmFseXplcihhbmFseXplcik7CiB9CiAKIH0gLy8gbmFtZXNwYWNl
IEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvQ2VsbFNldC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0lzb0NlbGxTZXQuaAkocmV2aXNp
b24gMjcyMTkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvQ2VsbFNldC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCw3IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCitjbGFz
cyBBYnN0cmFjdFNsb3RWaXNpdG9yOwogY2xhc3MgSGVhcENlbGw7CiBjbGFzcyBJc29TdWJzcGFj
ZTsKIApAQCAtNTksNyArNjAsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBmb3JFYWNoTWFya2VkQ2Vs
bChjb25zdCBGdW5jJik7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgotICAgIFJlZjxT
aGFyZWRUYXNrPHZvaWQoU2xvdFZpc2l0b3ImKT4+IGZvckVhY2hNYXJrZWRDZWxsSW5QYXJhbGxl
bChjb25zdCBGdW5jJik7CisgICAgUmVmPFNoYXJlZFRhc2s8dm9pZChBYnN0cmFjdFNsb3RWaXNp
dG9yJik+PiBmb3JFYWNoTWFya2VkQ2VsbEluUGFyYWxsZWwoY29uc3QgRnVuYyYpOwogICAgIAog
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CiAgICAgdm9pZCBmb3JFYWNoTGl2ZUNlbGwoY29u
c3QgRnVuYyYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvQ2VsbFNldElu
bGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Jc29DZWxs
U2V0SW5saW5lcy5oCShyZXZpc2lvbiAyNzIxOTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9Jc29DZWxsU2V0SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC05Miw5ICs5Miw5IEBA
IHZvaWQgSXNvQ2VsbFNldDo6Zm9yRWFjaE1hcmtlZENlbGwoY29uc3QKIH0KIAogdGVtcGxhdGU8
dHlwZW5hbWUgRnVuYz4KLVJlZjxTaGFyZWRUYXNrPHZvaWQoU2xvdFZpc2l0b3ImKT4+IElzb0Nl
bGxTZXQ6OmZvckVhY2hNYXJrZWRDZWxsSW5QYXJhbGxlbChjb25zdCBGdW5jJiBmdW5jKQorUmVm
PFNoYXJlZFRhc2s8dm9pZChBYnN0cmFjdFNsb3RWaXNpdG9yJik+PiBJc29DZWxsU2V0Ojpmb3JF
YWNoTWFya2VkQ2VsbEluUGFyYWxsZWwoY29uc3QgRnVuYyYgZnVuYykKIHsKLSAgICBjbGFzcyBU
YXNrIGZpbmFsIDogcHVibGljIFNoYXJlZFRhc2s8dm9pZChTbG90VmlzaXRvciYpPiB7CisgICAg
Y2xhc3MgVGFzayBmaW5hbCA6IHB1YmxpYyBTaGFyZWRUYXNrPHZvaWQoQWJzdHJhY3RTbG90Vmlz
aXRvciYpPiB7CiAgICAgcHVibGljOgogICAgICAgICBUYXNrKElzb0NlbGxTZXQmIHNldCwgY29u
c3QgRnVuYyYgZnVuYykKICAgICAgICAgICAgIDogbV9zZXQoc2V0KQpAQCAtMTAzLDcgKzEwMyw3
IEBAIFJlZjxTaGFyZWRUYXNrPHZvaWQoU2xvdFZpc2l0b3ImKT4+IElzb0MKICAgICAgICAgewog
ICAgICAgICB9CiAgICAgICAgIAotICAgICAgICB2b2lkIHJ1bihTbG90VmlzaXRvciYgdmlzaXRv
cikgZmluYWwKKyAgICAgICAgdm9pZCBydW4oQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikg
ZmluYWwKICAgICAgICAgewogICAgICAgICAgICAgd2hpbGUgKE1hcmtlZEJsb2NrOjpIYW5kbGUq
IGhhbmRsZSA9IG1fYmxvY2tTb3VyY2UtPnJ1bigpKSB7CiAgICAgICAgICAgICAgICAgdW5zaWdu
ZWQgYmxvY2tJbmRleCA9IGhhbmRsZS0+aW5kZXgoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0pJVFN0dWJSb3V0aW5lU2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9KSVRTdHViUm91dGluZVNldC5jcHAJKHJldmlzaW9uIDI3MjE5MikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0pJVFN0dWJSb3V0aW5lU2V0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTI4LDE3ICsxMjgsMjIgQEAgdm9pZCBKSVRTdHViUm91dGluZVNldDo6
ZGVsZXRlVW5tYXJrZWRKZQogICAgIG1fcm91dGluZXMuc2hyaW5rKGRzdEluZGV4KTsKIH0KIAot
dm9pZCBKSVRTdHViUm91dGluZVNldDo6dHJhY2VNYXJrZWRTdHViUm91dGluZXMoU2xvdFZpc2l0
b3ImIHZpc2l0b3IpCisvL3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+CisvL3ZvaWQgSklUU3R1
YlJvdXRpbmVTZXQ6OnRyYWNlTWFya2VkU3R1YlJvdXRpbmVzKFZpc2l0b3ImIHZpc2l0b3IpCit2
b2lkIEpJVFN0dWJSb3V0aW5lU2V0Ojp0cmFjZU1hcmtlZFN0dWJSb3V0aW5lczEoQWJzdHJhY3RT
bG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBmb3IgKGF1dG8mIGVudHJ5IDogbV9yb3V0aW5l
cykgewogICAgICAgICBHQ0F3YXJlSklUU3R1YlJvdXRpbmUqIHJvdXRpbmUgPSBlbnRyeS5yb3V0
aW5lOwogICAgICAgICBpZiAoIXJvdXRpbmUtPm1fbWF5QmVFeGVjdXRpbmcpCiAgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgCi0gICAgICAgIHJvdXRpbmUtPm1hcmtSZXF1aXJlZE9iamVj
dHModmlzaXRvcik7CisgICAgICAgIHJvdXRpbmUtPm1hcmtSZXF1aXJlZE9iamVjdHMxKHZpc2l0
b3IpOwogICAgIH0KIH0KIAorLy90ZW1wbGF0ZSB2b2lkIEpJVFN0dWJSb3V0aW5lU2V0Ojp0cmFj
ZU1hcmtlZFN0dWJSb3V0aW5lcyhTbG90VmlzaXRvciYpOworLy90ZW1wbGF0ZSB2b2lkIEpJVFN0
dWJSb3V0aW5lU2V0Ojp0cmFjZU1hcmtlZFN0dWJSb3V0aW5lcyhWZXJpZmllclNsb3RWaXNpdG9y
Jik7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0pJVFN0dWJSb3V0aW5lU2V0LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSklUU3R1YlJvdXRpbmVTZXQuaAkocmV2
aXNpb24gMjcyMTkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSklUU3R1YlJvdXRp
bmVTZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsOCArMzUsOSBAQCB1c2luZyBXVEY6OlJhbmdl
OwogCiBuYW1lc3BhY2UgSlNDIHsKIAorY2xhc3MgQWJzdHJhY3RTbG90VmlzaXRvcjsKIGNsYXNz
IEdDQXdhcmVKSVRTdHViUm91dGluZTsKLWNsYXNzIFNsb3RWaXNpdG9yOworLy9jbGFzcyBTbG90
VmlzaXRvcjsKIAogI2lmIEVOQUJMRShKSVQpCiAKQEAgLTYzLDggKzY0LDkgQEAgcHVibGljOgog
ICAgIHZvaWQgcHJlcGFyZUZvckNvbnNlcnZhdGl2ZVNjYW4oKTsKICAgICAKICAgICB2b2lkIGRl
bGV0ZVVubWFya2VkSmV0dGlzb25lZFN0dWJSb3V0aW5lcygpOwotICAgIAotICAgIHZvaWQgdHJh
Y2VNYXJrZWRTdHViUm91dGluZXMoU2xvdFZpc2l0b3ImKTsKKworLy8gICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVmlzaXRvcj4gdm9pZCB0cmFjZU1hcmtlZFN0dWJSb3V0aW5lcyhWaXNpdG9yJik7Cisg
ICAgdm9pZCB0cmFjZU1hcmtlZFN0dWJSb3V0aW5lczEoQWJzdHJhY3RTbG90VmlzaXRvciYpOwog
ICAgIAogcHJpdmF0ZToKICAgICB2b2lkIG1hcmtTbG93KHVpbnRwdHJfdCBhZGRyZXNzKTsKQEAg
LTkyLDcgKzk0LDggQEAgcHVibGljOgogICAgIHZvaWQgbWFyayh2b2lkKikgeyB9CiAgICAgdm9p
ZCBwcmVwYXJlRm9yQ29uc2VydmF0aXZlU2NhbigpIHsgfQogICAgIHZvaWQgZGVsZXRlVW5tYXJr
ZWRKZXR0aXNvbmVkU3R1YlJvdXRpbmVzKCkgeyB9Ci0gICAgdm9pZCB0cmFjZU1hcmtlZFN0dWJS
b3V0aW5lcyhTbG90VmlzaXRvciYpIHsgfQorLy8gICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRv
cj4gdm9pZCB0cmFjZU1hcmtlZFN0dWJSb3V0aW5lcyhWaXNpdG9yJikgeyB9CisgICAgdm9pZCB0
cmFjZU1hcmtlZFN0dWJSb3V0aW5lczEoQWJzdHJhY3RTbG90VmlzaXRvciYpIHsgfQogfTsKIAog
I2VuZGlmIC8vICFFTkFCTEUoSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
TWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL01hcmtTdGFja01lcmdpbmdDb25zdHJhaW50LmNwcAkocmV2aXNpb24g
MjcyMTkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya1N0YWNrTWVyZ2luZ0Nv
bnN0cmFpbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNSwxMiArMjUsMTMgQEAKIAogI2luY2x1
ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIk1hcmtTdGFja01lcmdpbmdDb25zdHJhaW50LmgiCi0K
ICNpbmNsdWRlICJHQ1NlZ21lbnRlZEFycmF5SW5saW5lcy5oIgogI2luY2x1ZGUgIkpTQ0lubGlu
ZXMuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKK3N0YXRpYyBjb25zdGV4cHIgYm9vbCBtbGFtVmVy
Ym9zZSA9IGZhbHNlOworCiBNYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludDo6TWFya1N0YWNrTWVy
Z2luZ0NvbnN0cmFpbnQoSGVhcCYgaGVhcCkKICAgICA6IE1hcmtpbmdDb25zdHJhaW50KCJNc20i
LCAiTWFyayBTdGFjayBNZXJnaW5nIiwgQ29uc3RyYWludFZvbGF0aWxpdHk6OkdyZXllZEJ5RXhl
Y3V0aW9uKQogICAgICwgbV9oZWFwKGhlYXApCkBAIC00MSwxMiArNDIsMTIgQEAgTWFya1N0YWNr
TWVyZ2luZ0NvbnN0cmFpbnQ6On5NYXJrU3RhY2tNZQogewogfQogCi1kb3VibGUgTWFya1N0YWNr
TWVyZ2luZ0NvbnN0cmFpbnQ6OnF1aWNrV29ya0VzdGltYXRlKFNsb3RWaXNpdG9yJikKK2RvdWJs
ZSBNYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludDo6cXVpY2tXb3JrRXN0aW1hdGUoQWJzdHJhY3RT
bG90VmlzaXRvciYpCiB7CiAgICAgcmV0dXJuIG1faGVhcC5tX211dGF0b3JNYXJrU3RhY2stPnNp
emUoKSArIG1faGVhcC5tX3JhY2VNYXJrU3RhY2stPnNpemUoKTsKIH0KIAotdm9pZCBNYXJrU3Rh
Y2tNZXJnaW5nQ29uc3RyYWludDo6cHJlcGFyZVRvRXhlY3V0ZUltcGwoY29uc3QgQWJzdHJhY3RM
b2NrZXImLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgTWFya1N0YWNrTWVyZ2luZ0NvbnN0
cmFpbnQ6OnByZXBhcmVUb0V4ZWN1dGVJbXBsKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgQWJzdHJh
Y3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICAvLyBMb2dnaW5nIHRoZSB3b3JrIGhlcmUg
ZW5zdXJlcyB0aGF0IHRoZSBjb25zdHJhaW50IHNvbHZlciBrbm93cyB0aGF0IGl0IGRvZXNuJ3Qg
bmVlZCB0byBwcm9kdWNlCiAgICAgLy8gYW55bW9yZSB3b3JrLgpAQCAtNTYsOCArNTcsMTggQEAg
dm9pZCBNYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludDo6cHJlcGFyZQogICAgIGRhdGFMb2dJZihP
cHRpb25zOjpsb2dHQygpLCAiKCIsIHNpemUsICIpIik7CiB9CiAKLXZvaWQgTWFya1N0YWNrTWVy
Z2luZ0NvbnN0cmFpbnQ6OmV4ZWN1dGVJbXBsKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBN
YXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludDo6ZXhlY3V0ZUltcGwoQWJzdHJhY3RTbG90VmlzaXRv
ciYgdmlzaXRvcikKIHsKKyAgICAvLyBXZSB3YW50IHRvIHNraXAgdGhpcyBjb25zdHJhaW50IGZv
ciB0aGUgR0MgdmVyaWZpZXIgYmVjYXVzZToKKyAgICAvLyAxLiBUaGVyZSBzaG91bGQgYmUgbm8g
bXV0YXRvciBtYXJraW5nIGFjdGlvbiBiZXR3ZWVuIHRoZSBFbmQgcGhhc2UgYW5kIHZlcmlmeUdD
KCkuCisgICAgLy8gICAgSGVuY2UsIHdlIGNhbiBpZ25vcmUgdGhzZSBzdGFja3MuCisgICAgLy8g
Mi4gVGhlIEVuZCBwaGFzZSBleHBsaWN0bHkgY2FsbHMgaXRlcmF0ZUV4ZWN1dGluZ0FuZENvbXBp
bGluZ0NvZGVCbG9ja3MoKQorICAgIC8vICAgIHRvIGFkZCBleGVjdXRpbmcgQ29kZUJsb2NrcyB0
byBtX2hlYXAubV9tdXRhdG9yTWFya1N0YWNrLiBXZSB3YW50IHRvCisgICAgLy8gICAgbGVhdmUg
dGhvc2UgdW5wZXJ0dXJiZWQuCisgICAgaWYgKG1faGVhcC5tX2lzVmVyaWZ5aW5nR0MpCisgICAg
ICAgIHJldHVybjsKKworICAgIGlmIChtbGFtVmVyYm9zZSkgZGF0YUxvZ0xuKCIgICAgbWxhbSBN
YXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludDo6ZXhlY3V0ZUltcGwoKSBtX2hlYXAubV9tdXRhdG9y
TWFya1N0YWNrLT50cmFuc2ZlclRvKHZpc2l0b3IubXV0YXRvck1hcmtTdGFjaygpKTsiKTsKICAg
ICBtX2hlYXAubV9tdXRhdG9yTWFya1N0YWNrLT50cmFuc2ZlclRvKHZpc2l0b3IubXV0YXRvck1h
cmtTdGFjaygpKTsKICAgICBtX2hlYXAubV9yYWNlTWFya1N0YWNrLT50cmFuc2ZlclRvKHZpc2l0
b3IubXV0YXRvck1hcmtTdGFjaygpKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL01hcmtTdGFja01lcmdpbmdDb25zdHJhaW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQuaAkocmV2aXNpb24g
MjcyMTkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya1N0YWNrTWVyZ2luZ0Nv
bnN0cmFpbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsMTggKzMwLDE4IEBACiBuYW1lc3BhY2Ug
SlNDIHsKIAogY2xhc3MgSGVhcDsKLWNsYXNzIFNsb3RWaXNpdG9yOworY2xhc3MgQWJzdHJhY3RT
bG90VmlzaXRvcjsKIAogY2xhc3MgTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQgZmluYWwgOiBw
dWJsaWMgTWFya2luZ0NvbnN0cmFpbnQgewogcHVibGljOgogICAgIE1hcmtTdGFja01lcmdpbmdD
b25zdHJhaW50KEhlYXAmKTsKICAgICB+TWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQoKSBmaW5h
bDsKICAgICAKLSAgICBkb3VibGUgcXVpY2tXb3JrRXN0aW1hdGUoU2xvdFZpc2l0b3ImKSBmaW5h
bDsKKyAgICBkb3VibGUgcXVpY2tXb3JrRXN0aW1hdGUoQWJzdHJhY3RTbG90VmlzaXRvciYpIGZp
bmFsOwogICAgIAogcHJpdmF0ZToKLSAgICB2b2lkIHByZXBhcmVUb0V4ZWN1dGVJbXBsKGNvbnN0
IEFic3RyYWN0TG9ja2VyJiBjb25zdHJhaW50U29sdmluZ0xvY2tlciwgU2xvdFZpc2l0b3ImKSBm
aW5hbDsKLSAgICB2b2lkIGV4ZWN1dGVJbXBsKFNsb3RWaXNpdG9yJikgZmluYWw7CisgICAgdm9p
ZCBwcmVwYXJlVG9FeGVjdXRlSW1wbChjb25zdCBBYnN0cmFjdExvY2tlciYgY29uc3RyYWludFNv
bHZpbmdMb2NrZXIsIEFic3RyYWN0U2xvdFZpc2l0b3ImKSBmaW5hbDsKKyAgICB2b2lkIGV4ZWN1
dGVJbXBsKEFic3RyYWN0U2xvdFZpc2l0b3ImKSBmaW5hbDsKICAgICAKICAgICBIZWFwJiBtX2hl
YXA7CiB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5oCShy
ZXZpc2lvbiAyNzIxOTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9j
ay5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMp
IDE5OTktMjAwMCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQogICogIENvcHlyaWdodCAo
QykgMjAwMSBQZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQotICogIENvcHlyaWdodCAoQykgMjAw
My0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMp
IDIwMDMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
ICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwg
UHVibGljCkBAIC0xNTEsNyArMTUxLDggQEAgcHVibGljOgogICAgICAgICAKICAgICAgICAgdm9p
ZCBzaHJpbmsoKTsKICAgICAgICAgICAgIAotICAgICAgICB2b2lkIHZpc2l0V2Vha1NldChTbG90
VmlzaXRvciYpOworLy8gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgdmlz
aXRXZWFrU2V0KFZpc2l0b3ImKTsKKyAgICAgICAgdm9pZCB2aXNpdFdlYWtTZXQxKEFic3RyYWN0
U2xvdFZpc2l0b3ImKTsKICAgICAgICAgdm9pZCByZWFwV2Vha1NldCgpOwogICAgICAgICAgICAg
CiAgICAgICAgIC8vIFdoaWxlIGFsbG9jYXRpbmcgZnJvbSBhIGZyZWUgbGlzdCwgTWFya2VkQmxv
Y2sgdGVtcG9yYXJpbHkgaGFzIGJvZ3VzCkBAIC0yMDMsNiArMjA0LDcgQEAgcHVibGljOgogICAg
ICAgICAKICAgICAgICAgdm9pZCogc3RhcnQoKSBjb25zdCB7IHJldHVybiAmbV9ibG9jay0+YXRv
bXMoKVswXTsgfQogICAgICAgICB2b2lkKiBlbmQoKSBjb25zdCB7IHJldHVybiAmbV9ibG9jay0+
YXRvbXMoKVttX2VuZEF0b21dOyB9CisgICAgICAgIHZvaWQqIGF0b21BdChzaXplX3QgaSkgY29u
c3QgeyByZXR1cm4gJm1fYmxvY2stPmF0b21zKClbaV07IH0KICAgICAgICAgYm9vbCBjb250YWlu
cyh2b2lkKiBwKSBjb25zdCB7IHJldHVybiBzdGFydCgpIDw9IHAgJiYgcCA8IGVuZCgpOyB9CiAK
ICAgICAgICAgdm9pZCBkdW1wU3RhdGUoUHJpbnRTdHJlYW0mKTsKQEAgLTQ5OCw5ICs1MDAsMTEg
QEAgaW5saW5lIHZvaWQgTWFya2VkQmxvY2s6OkhhbmRsZTo6c2hyaW5rKAogICAgIG1fd2Vha1Nl
dC5zaHJpbmsoKTsKIH0KIAotaW5saW5lIHZvaWQgTWFya2VkQmxvY2s6OkhhbmRsZTo6dmlzaXRX
ZWFrU2V0KFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy90ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
PgorLy9pbmxpbmUgdm9pZCBNYXJrZWRCbG9jazo6SGFuZGxlOjp2aXNpdFdlYWtTZXQoVmlzaXRv
ciYgdmlzaXRvcikKK2lubGluZSB2b2lkIE1hcmtlZEJsb2NrOjpIYW5kbGU6OnZpc2l0V2Vha1Nl
dDEoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKLSAgICByZXR1cm4gbV93ZWFrU2V0
LnZpc2l0KHZpc2l0b3IpOworICAgIHJldHVybiBtX3dlYWtTZXQudmlzaXQxKHZpc2l0b3IpOwog
fQogCiBpbmxpbmUgdm9pZCBNYXJrZWRCbG9jazo6SGFuZGxlOjpyZWFwV2Vha1NldCgpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRTcGFjZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkU3BhY2UuY3BwCShyZXZpc2lvbiAy
NzIxOTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRTcGFjZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI3MiwxMCArMjcyLDEwIEBAIHZvaWQgTWFya2VkU3BhY2U6OmVuYWJs
ZVByZWNpc2VBbGxvY2F0aW8KICAgICAgICAgbV9wcmVjaXNlQWxsb2NhdGlvblNldC0+YWRkKGFs
bG9jYXRpb24tPmNlbGwoKSk7CiB9CiAKLXZvaWQgTWFya2VkU3BhY2U6OnZpc2l0V2Vha1NldHMo
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIE1hcmtlZFNwYWNlOjp2aXNpdFdlYWtTZXRzMShB
YnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGF1dG8gdmlzaXQgPSBbJl0gKFdl
YWtTZXQqIHdlYWtTZXQpIHsKLSAgICAgICAgd2Vha1NldC0+dmlzaXQodmlzaXRvcik7CisgICAg
ICAgIHdlYWtTZXQtPnZpc2l0MSh2aXNpdG9yKTsKICAgICB9OwogICAgIAogICAgIG1fbmV3QWN0
aXZlV2Vha1NldHMuZm9yRWFjaCh2aXNpdCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9NYXJrZWRTcGFjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL01hcmtlZFNwYWNlLmgJKHJldmlzaW9uIDI3MjE5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL01hcmtlZFNwYWNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDYgKzM3LDcgQEAK
IAogbmFtZXNwYWNlIEpTQyB7CiAKK2NsYXNzIEFic3RyYWN0U2xvdFZpc2l0b3I7IC8vIG1sYW0g
RklYTUUgPwogY2xhc3MgQ29tcGxldGVTdWJzcGFjZTsKIGNsYXNzIEhlYXA7CiBjbGFzcyBIZWFw
Q2VsbDsKQEAgLTEwNSw3ICsxMDYsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgdm9pZCBwcmVwYXJl
Rm9yQWxsb2NhdGlvbigpOwogCi0gICAgdm9pZCB2aXNpdFdlYWtTZXRzKFNsb3RWaXNpdG9yJik7
CisgICAgdm9pZCB2aXNpdFdlYWtTZXRzMShBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAgICAgdm9p
ZCByZWFwV2Vha1NldHMoKTsKIAogICAgIE1hcmtlZEJsb2NrU2V0JiBibG9ja3MoKSB7IHJldHVy
biBtX2Jsb2NrczsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0Nv
bnN0cmFpbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01h
cmtpbmdDb25zdHJhaW50LmNwcAkocmV2aXNpb24gMjcyMTkyKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2
ICsyNiw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiTWFya2luZ0NvbnN0cmFp
bnQuaCIKIAorI2luY2x1ZGUgIkFic3RyYWN0U2xvdFZpc2l0b3JJbmxpbmVzLmgiCiAjaW5jbHVk
ZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIlZpc2l0Q291bnRlci5oIgogCkBAIC01MSw3ICs1
Miw3IEBAIHZvaWQgTWFya2luZ0NvbnN0cmFpbnQ6OnJlc2V0U3RhdHMoKQogICAgIG1fbGFzdFZp
c2l0Q291bnQgPSAwOwogfQogCi12b2lkIE1hcmtpbmdDb25zdHJhaW50OjpleGVjdXRlKFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQordm9pZCBNYXJraW5nQ29uc3RyYWludDo6ZXhlY3V0ZShBYnN0cmFj
dFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFZpc2l0Q291bnRlciB2aXNpdENvdW50ZXIo
dmlzaXRvcik7CiAgICAgZXhlY3V0ZUltcGwodmlzaXRvcik7CkBAIC02MCwxNyArNjEsMTcgQEAg
dm9pZCBNYXJraW5nQ29uc3RyYWludDo6ZXhlY3V0ZShTbG90VmlzaQogICAgICAgICBkYXRhTG9n
KCIoIiwgYWJicmV2aWF0ZWROYW1lKCksICIgdmlzaXRlZCAiLCB2aXNpdENvdW50ZXIudmlzaXRD
b3VudCgpLCAiIGluIGV4ZWN1dGUpIik7CiB9CiAKLWRvdWJsZSBNYXJraW5nQ29uc3RyYWludDo6
cXVpY2tXb3JrRXN0aW1hdGUoU2xvdFZpc2l0b3ImKQorZG91YmxlIE1hcmtpbmdDb25zdHJhaW50
OjpxdWlja1dvcmtFc3RpbWF0ZShBYnN0cmFjdFNsb3RWaXNpdG9yJikKIHsKICAgICByZXR1cm4g
MDsKIH0KIAotZG91YmxlIE1hcmtpbmdDb25zdHJhaW50Ojp3b3JrRXN0aW1hdGUoU2xvdFZpc2l0
b3ImIHZpc2l0b3IpCitkb3VibGUgTWFya2luZ0NvbnN0cmFpbnQ6OndvcmtFc3RpbWF0ZShBYnN0
cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHJldHVybiBsYXN0VmlzaXRDb3VudCgp
ICsgcXVpY2tXb3JrRXN0aW1hdGUodmlzaXRvcik7CiB9CiAKLXZvaWQgTWFya2luZ0NvbnN0cmFp
bnQ6OnByZXBhcmVUb0V4ZWN1dGUoY29uc3QgQWJzdHJhY3RMb2NrZXImIGNvbnN0cmFpbnRTb2x2
aW5nTG9ja2VyLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgTWFya2luZ0NvbnN0cmFpbnQ6
OnByZXBhcmVUb0V4ZWN1dGUoY29uc3QgQWJzdHJhY3RMb2NrZXImIGNvbnN0cmFpbnRTb2x2aW5n
TG9ja2VyLCBBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGRhdGFMb2dJZihP
cHRpb25zOjpsb2dHQygpLCBhYmJyZXZpYXRlZE5hbWUoKSk7CiAgICAgVmlzaXRDb3VudGVyIHZp
c2l0Q291bnRlcih2aXNpdG9yKTsKQEAgLTgwLDcgKzgxLDcgQEAgdm9pZCBNYXJraW5nQ29uc3Ry
YWludDo6cHJlcGFyZVRvRXhlY3V0ZQogICAgICAgICBkYXRhTG9nKCIoIiwgYWJicmV2aWF0ZWRO
YW1lKCksICIgdmlzaXRlZCAiLCB2aXNpdENvdW50ZXIudmlzaXRDb3VudCgpLCAiIGluIHByZXBh
cmVUb0V4ZWN1dGUpIik7CiB9CiAKLXZvaWQgTWFya2luZ0NvbnN0cmFpbnQ6OmRvUGFyYWxsZWxX
b3JrKFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBTaGFyZWRUYXNrPHZvaWQoU2xvdFZpc2l0b3ImKT4m
IHRhc2spCit2b2lkIE1hcmtpbmdDb25zdHJhaW50Ojpkb1BhcmFsbGVsV29yayhBYnN0cmFjdFNs
b3RWaXNpdG9yJiB2aXNpdG9yLCBTaGFyZWRUYXNrPHZvaWQoQWJzdHJhY3RTbG90VmlzaXRvciYp
PiYgdGFzaykKIHsKICAgICBWaXNpdENvdW50ZXIgdmlzaXRDb3VudGVyKHZpc2l0b3IpOwogICAg
IHRhc2sucnVuKHZpc2l0b3IpOwpAQCAtOTIsNyArOTMsNyBAQCB2b2lkIE1hcmtpbmdDb25zdHJh
aW50Ojpkb1BhcmFsbGVsV29yayhTCiAgICAgfQogfQogCi12b2lkIE1hcmtpbmdDb25zdHJhaW50
OjpwcmVwYXJlVG9FeGVjdXRlSW1wbChjb25zdCBBYnN0cmFjdExvY2tlciYsIFNsb3RWaXNpdG9y
JikKK3ZvaWQgTWFya2luZ0NvbnN0cmFpbnQ6OnByZXBhcmVUb0V4ZWN1dGVJbXBsKGNvbnN0IEFi
c3RyYWN0TG9ja2VyJiwgQWJzdHJhY3RTbG90VmlzaXRvciYpCiB7CiB9CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnQuaAkocmV2aXNpb24g
MjcyMTkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnQu
aAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyArMzgsNyBAQAogbmFtZXNwYWNlIEpTQyB7CiAKIGNs
YXNzIE1hcmtpbmdDb25zdHJhaW50U2V0OwotY2xhc3MgU2xvdFZpc2l0b3I7CitjbGFzcyBBYnN0
cmFjdFNsb3RWaXNpdG9yOwogCiBjbGFzcyBNYXJraW5nQ29uc3RyYWludCB7CiAgICAgV1RGX01B
S0VfTk9OQ09QWUFCTEUoTWFya2luZ0NvbnN0cmFpbnQpOwpAQCAtNjAsMTUgKzYwLDE2IEBAIHB1
YmxpYzoKICAgICAKICAgICBzaXplX3QgbGFzdFZpc2l0Q291bnQoKSBjb25zdCB7IHJldHVybiBt
X2xhc3RWaXNpdENvdW50OyB9CiAgICAgCi0gICAgdm9pZCBleGVjdXRlKFNsb3RWaXNpdG9yJik7
Ci0gICAgCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgdmlydHVhbCBkb3VibGUgcXVpY2tXb3JrRXN0
aW1hdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpOworICAgIHZvaWQgZXhlY3V0ZShBYnN0cmFjdFNs
b3RWaXNpdG9yJik7CisKKyAgICAvLyBGSVhNRSBtbGFtCisgICAgSlNfRVhQT1JUX1BSSVZBVEUg
dmlydHVhbCBkb3VibGUgcXVpY2tXb3JrRXN0aW1hdGUoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlz
aXRvcik7CiAgICAgCi0gICAgZG91YmxlIHdvcmtFc3RpbWF0ZShTbG90VmlzaXRvciYgdmlzaXRv
cik7CisgICAgZG91YmxlIHdvcmtFc3RpbWF0ZShBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9y
KTsKICAgICAKLSAgICB2b2lkIHByZXBhcmVUb0V4ZWN1dGUoY29uc3QgQWJzdHJhY3RMb2NrZXIm
IGNvbnN0cmFpbnRTb2x2aW5nTG9ja2VyLCBTbG90VmlzaXRvciYpOworICAgIHZvaWQgcHJlcGFy
ZVRvRXhlY3V0ZShjb25zdCBBYnN0cmFjdExvY2tlciYgY29uc3RyYWludFNvbHZpbmdMb2NrZXIs
IEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKICAgICAKLSAgICB2b2lkIGRvUGFyYWxsZWxXb3JrKFNs
b3RWaXNpdG9yJiwgU2hhcmVkVGFzazx2b2lkKFNsb3RWaXNpdG9yJik+Jik7CisgICAgdm9pZCBk
b1BhcmFsbGVsV29yayhBYnN0cmFjdFNsb3RWaXNpdG9yJiwgU2hhcmVkVGFzazx2b2lkKEFic3Ry
YWN0U2xvdFZpc2l0b3ImKT4mKTsKICAgICAKICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eSB2b2xh
dGlsaXR5KCkgY29uc3QgeyByZXR1cm4gbV92b2xhdGlsaXR5OyB9CiAgICAgCkBAIC03Niw4ICs3
Nyw4IEBAIHB1YmxpYzoKICAgICBDb25zdHJhaW50UGFyYWxsZWxpc20gcGFyYWxsZWxpc20oKSBj
b25zdCB7IHJldHVybiBtX3BhcmFsbGVsaXNtOyB9CiAKIHByb3RlY3RlZDoKLSAgICB2aXJ0dWFs
IHZvaWQgZXhlY3V0ZUltcGwoU2xvdFZpc2l0b3ImKSA9IDA7Ci0gICAgSlNfRVhQT1JUX1BSSVZB
VEUgdmlydHVhbCB2b2lkIHByZXBhcmVUb0V4ZWN1dGVJbXBsKGNvbnN0IEFic3RyYWN0TG9ja2Vy
JiBjb25zdHJhaW50U29sdmluZ0xvY2tlciwgU2xvdFZpc2l0b3ImKTsKKyAgICB2aXJ0dWFsIHZv
aWQgZXhlY3V0ZUltcGwoQWJzdHJhY3RTbG90VmlzaXRvciYpID0gMDsKKyAgICBKU19FWFBPUlRf
UFJJVkFURSB2aXJ0dWFsIHZvaWQgcHJlcGFyZVRvRXhlY3V0ZUltcGwoY29uc3QgQWJzdHJhY3RM
b2NrZXImIGNvbnN0cmFpbnRTb2x2aW5nTG9ja2VyLCBBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAg
ICAgCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBNYXJraW5nQ29uc3RyYWludFNldDsgLy8g
U28gaXQgY2FuIHNldCBtX2luZGV4LgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
TWFya2luZ0NvbnN0cmFpbnRTZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50U2V0LmNwcAkocmV2aXNpb24gMjcyMTkyKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnRTZXQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC02Myw3ICs2Myw3IEBAIHZvaWQgTWFya2luZ0NvbnN0cmFpbnRTZXQ6OmRp
ZFN0YXJ0TWFya2kKICAgICBtX2l0ZXJhdGlvbiA9IDE7CiB9CiAKLXZvaWQgTWFya2luZ0NvbnN0
cmFpbnRTZXQ6OmFkZChDU3RyaW5nIGFiYnJldmlhdGVkTmFtZSwgQ1N0cmluZyBuYW1lLCA6OkZ1
bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3ImKT4gZnVuY3Rpb24sIENvbnN0cmFpbnRWb2xhdGlsaXR5
IHZvbGF0aWxpdHksIENvbnN0cmFpbnRDb25jdXJyZW5jeSBjb25jdXJyZW5jeSwgQ29uc3RyYWlu
dFBhcmFsbGVsaXNtIHBhcmFsbGVsaXNtKQordm9pZCBNYXJraW5nQ29uc3RyYWludFNldDo6YWRk
KENTdHJpbmcgYWJicmV2aWF0ZWROYW1lLCBDU3RyaW5nIG5hbWUsIDo6RnVuY3Rpb248dm9pZChB
YnN0cmFjdFNsb3RWaXNpdG9yJik+IGZ1bmN0aW9uLCBDb25zdHJhaW50Vm9sYXRpbGl0eSB2b2xh
dGlsaXR5LCBDb25zdHJhaW50Q29uY3VycmVuY3kgY29uY3VycmVuY3ksIENvbnN0cmFpbnRQYXJh
bGxlbGlzbSBwYXJhbGxlbGlzbSkKIHsKICAgICBhZGQobWFrZVVuaXF1ZTxTaW1wbGVNYXJraW5n
Q29uc3RyYWludD4oV1RGTW92ZShhYmJyZXZpYXRlZE5hbWUpLCBXVEZNb3ZlKG5hbWUpLCBXVEZN
b3ZlKGZ1bmN0aW9uKSwgdm9sYXRpbGl0eSwgY29uY3VycmVuY3ksIHBhcmFsbGVsaXNtKSk7CiB9
CkBAIC03OCwxNCArNzgsMTQgQEAgdm9pZCBNYXJraW5nQ29uc3RyYWludFNldDo6YWRkKAogICAg
IG1fc2V0LmFwcGVuZChXVEZNb3ZlKGNvbnN0cmFpbnQpKTsKIH0KIAotYm9vbCBNYXJraW5nQ29u
c3RyYWludFNldDo6ZXhlY3V0ZUNvbnZlcmdlbmNlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorYm9v
bCBNYXJraW5nQ29uc3RyYWludFNldDo6ZXhlY3V0ZUNvbnZlcmdlbmNlKEFic3RyYWN0U2xvdFZp
c2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgYm9vbCByZXN1bHQgPSBleGVjdXRlQ29udmVyZ2VuY2VJ
bXBsKHZpc2l0b3IpOwogICAgIGRhdGFMb2dJZihPcHRpb25zOjpsb2dHQygpLCAiICIpOwogICAg
IHJldHVybiByZXN1bHQ7CiB9CiAKLWJvb2wgTWFya2luZ0NvbnN0cmFpbnRTZXQ6OmlzV2F2ZWZy
b250QWR2YW5jaW5nKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorYm9vbCBNYXJraW5nQ29uc3RyYWlu
dFNldDo6aXNXYXZlZnJvbnRBZHZhbmNpbmcoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikK
IHsKICAgICBmb3IgKE1hcmtpbmdDb25zdHJhaW50KiBvdXRncm93dGggOiBtX291dGdyb3d0aHMp
IHsKICAgICAgICAgaWYgKG91dGdyb3d0aC0+d29ya0VzdGltYXRlKHZpc2l0b3IpKQpAQCAtOTQs
NyArOTQsNyBAQCBib29sIE1hcmtpbmdDb25zdHJhaW50U2V0Ojppc1dhdmVmcm9udEFkCiAgICAg
cmV0dXJuIGZhbHNlOwogfQogCi1ib29sIE1hcmtpbmdDb25zdHJhaW50U2V0OjpleGVjdXRlQ29u
dmVyZ2VuY2VJbXBsKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorYm9vbCBNYXJraW5nQ29uc3RyYWlu
dFNldDo6ZXhlY3V0ZUNvbnZlcmdlbmNlSW1wbChBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9y
KQogewogICAgIFN1cGVyU2FtcGxlclNjb3BlIHN1cGVyU2FtcGxlclNjb3BlKGZhbHNlKTsKICAg
ICBNYXJraW5nQ29uc3RyYWludFNvbHZlciBzb2x2ZXIoKnRoaXMpOwpAQCAtMTY2LDcgKzE2Niw3
IEBAIGJvb2wgTWFya2luZ0NvbnN0cmFpbnRTZXQ6OmV4ZWN1dGVDb252ZXIKICAgICByZXR1cm4g
IXNvbHZlci5kaWRWaXNpdFNvbWV0aGluZygpOwogfQogCi12b2lkIE1hcmtpbmdDb25zdHJhaW50
U2V0OjpleGVjdXRlQWxsKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBNYXJraW5nQ29uc3Ry
YWludFNldDo6ZXhlY3V0ZUFsbChBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAg
IGZvciAoYXV0byYgY29uc3RyYWludCA6IG1fc2V0KQogICAgICAgICBjb25zdHJhaW50LT5leGVj
dXRlKHZpc2l0b3IpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0Nv
bnN0cmFpbnRTZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9N
YXJraW5nQ29uc3RyYWludFNldC5oCShyZXZpc2lvbiAyNzIxOTIpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludFNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC00
NiwxNCArNDYsMTQgQEAgcHVibGljOgogICAgIHZvaWQgYWRkKAogICAgICAgICBDU3RyaW5nIGFi
YnJldmlhdGVkTmFtZSwKICAgICAgICAgQ1N0cmluZyBuYW1lLAotICAgICAgICA6OkZ1bmN0aW9u
PHZvaWQoU2xvdFZpc2l0b3ImKT4sCisgICAgICAgIDo6RnVuY3Rpb248dm9pZChBYnN0cmFjdFNs
b3RWaXNpdG9yJik+LAogICAgICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eSwKICAgICAgICAgQ29u
c3RyYWludENvbmN1cnJlbmN5ID0gQ29uc3RyYWludENvbmN1cnJlbmN5OjpDb25jdXJyZW50LAog
ICAgICAgICBDb25zdHJhaW50UGFyYWxsZWxpc20gPSBDb25zdHJhaW50UGFyYWxsZWxpc206OlNl
cXVlbnRpYWwpOwogICAgIAogICAgIHZvaWQgYWRkKAogICAgICAgICBDU3RyaW5nIGFiYnJldmlh
dGVkTmFtZSwgQ1N0cmluZyBuYW1lLAotICAgICAgICA6OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0
b3ImKT4gZnVuYywKKyAgICAgICAgOjpGdW5jdGlvbjx2b2lkKEFic3RyYWN0U2xvdFZpc2l0b3Im
KT4gZnVuYywKICAgICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHkgdm9sYXRpbGl0eSwKICAgICAg
ICAgQ29uc3RyYWludFBhcmFsbGVsaXNtIHBhcmFsbGVsaXNtKQogICAgIHsKQEAgLTY0LDIwICs2
NCwyMCBAQCBwdWJsaWM6CiAgICAgCiAgICAgLy8gQXNzdW1pbmcgdGhhdCB0aGUgbWFyayBzdGFj
a3MgYXJlIGFsbCBlbXB0eSwgdGhpcyB3aWxsIGdpdmUgeW91IGEgZ3Vlc3MgYXMgdG8gd2hldGhl
ciBvcgogICAgIC8vIG5vdCB0aGUgd2F2ZWZyb250IGlzIGFkdmFuY2luZy4KLSAgICBib29sIGlz
V2F2ZWZyb250QWR2YW5jaW5nKFNsb3RWaXNpdG9yJik7Ci0gICAgYm9vbCBpc1dhdmVmcm9udFJl
dHJlYXRpbmcoU2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsgcmV0dXJuICFpc1dhdmVmcm9udEFkdmFu
Y2luZyh2aXNpdG9yKTsgfQorICAgIGJvb2wgaXNXYXZlZnJvbnRBZHZhbmNpbmcoQWJzdHJhY3RT
bG90VmlzaXRvciYpOworICAgIGJvb2wgaXNXYXZlZnJvbnRSZXRyZWF0aW5nKEFic3RyYWN0U2xv
dFZpc2l0b3ImIHZpc2l0b3IpIHsgcmV0dXJuICFpc1dhdmVmcm9udEFkdmFuY2luZyh2aXNpdG9y
KTsgfQogICAgIAogICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGlzIGV4ZWN1dGVkIGFsbCBjb25z
dHJhaW50cyBhbmQgbm9uZSBvZiB0aGVtIHByb2R1Y2VkIG5ldyB3b3JrLiBUaGlzCiAgICAgLy8g
YXNzdW1lcyB0aGF0IHlvdSd2ZSBhbHJhZWR5IHZpc2l0ZWQgcm9vdHMgYW5kIGRyYWluZWQgZnJv
bSB0aGVyZS4KLSAgICBib29sIGV4ZWN1dGVDb252ZXJnZW5jZShTbG90VmlzaXRvciYpOworICAg
IGJvb2wgZXhlY3V0ZUNvbnZlcmdlbmNlKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKICAgICAKICAg
ICAvLyBTaW1wbHkgcnVucyBhbGwgY29uc3RyYWludHMgd2l0aG91dCBhbnkgc2hlbmFuaWdhbnMu
Ci0gICAgdm9pZCBleGVjdXRlQWxsKFNsb3RWaXNpdG9yJik7CisgICAgdm9pZCBleGVjdXRlQWxs
KEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKICAgICAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNz
IE1hcmtpbmdDb25zdHJhaW50U29sdmVyOwogICAgIAotICAgIGJvb2wgZXhlY3V0ZUNvbnZlcmdl
bmNlSW1wbChTbG90VmlzaXRvciYpOworICAgIGJvb2wgZXhlY3V0ZUNvbnZlcmdlbmNlSW1wbChB
YnN0cmFjdFNsb3RWaXNpdG9yJik7CiAgICAgCiAgICAgSGVhcCYgbV9oZWFwOwogICAgIEJpdFZl
Y3RvciBtX3VuZXhlY3V0ZWRSb290czsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L01hcmtpbmdDb25zdHJhaW50U29sdmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludFNvbHZlci5jcHAJKHJldmlzaW9uIDI3MjE5
MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50U29sdmVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNyArMzMsNyBAQCBuYW1lc3BhY2UgSlNDIHsgCiAK
IE1hcmtpbmdDb25zdHJhaW50U29sdmVyOjpNYXJraW5nQ29uc3RyYWludFNvbHZlcihNYXJraW5n
Q29uc3RyYWludFNldCYgc2V0KQogICAgIDogbV9oZWFwKHNldC5tX2hlYXApCi0gICAgLCBtX21h
aW5WaXNpdG9yKG1faGVhcC5jb2xsZWN0b3JTbG90VmlzaXRvcigpKQorICAgICwgbV9tYWluVmlz
aXRvcihtX2hlYXAuY29sbGVjdG9yU2xvdFZpc2l0b3IoKSkgLy8gbWxhbSBGSVhNRSBuZWVkIHN1
cHBvcnQgZm9yIFZlcmlmaWVyU2xvdFZpc2l0b3IKICAgICAsIG1fc2V0KHNldCkKIHsKICAgICBt
X2hlYXAuZm9yRWFjaFNsb3RWaXNpdG9yKApAQCAtMTUwLDEzICsxNTAsMTMgQEAgdm9pZCBNYXJr
aW5nQ29uc3RyYWludFNvbHZlcjo6ZXhlY3V0ZShNYQogICAgIG1fZXhlY3V0ZWQuc2V0KGNvbnN0
cmFpbnQuaW5kZXgoKSk7CiB9CiAKLXZvaWQgTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXI6OmFkZFBh
cmFsbGVsVGFzayhSZWZQdHI8U2hhcmVkVGFzazx2b2lkKFNsb3RWaXNpdG9yJik+PiB0YXNrLCBN
YXJraW5nQ29uc3RyYWludCYgY29uc3RyYWludCkKK3ZvaWQgTWFya2luZ0NvbnN0cmFpbnRTb2x2
ZXI6OmFkZFBhcmFsbGVsVGFzayhSZWZQdHI8U2hhcmVkVGFzazx2b2lkKEFic3RyYWN0U2xvdFZp
c2l0b3ImKT4+IHRhc2ssIE1hcmtpbmdDb25zdHJhaW50JiBjb25zdHJhaW50KQogewogICAgIGF1
dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKICAgICBtX3RvRXhlY3V0ZUluUGFyYWxsZWwu
YXBwZW5kKFRhc2tXaXRoQ29uc3RyYWludChXVEZNb3ZlKHRhc2spLCAmY29uc3RyYWludCkpOwog
fQogCi12b2lkIE1hcmtpbmdDb25zdHJhaW50U29sdmVyOjpydW5FeGVjdXRpb25UaHJlYWQoU2xv
dFZpc2l0b3ImIHZpc2l0b3IsIFNjaGVkdWxlclByZWZlcmVuY2UgcHJlZmVyZW5jZSwgU2NvcGVk
TGFtYmRhPE9wdGlvbmFsPHVuc2lnbmVkPigpPiBwaWNrTmV4dCkKK3ZvaWQgTWFya2luZ0NvbnN0
cmFpbnRTb2x2ZXI6OnJ1bkV4ZWN1dGlvblRocmVhZChBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNp
dG9yLCBTY2hlZHVsZXJQcmVmZXJlbmNlIHByZWZlcmVuY2UsIFNjb3BlZExhbWJkYTxPcHRpb25h
bDx1bnNpZ25lZD4oKT4gcGlja05leHQpCiB7CiAgICAgZm9yICg7OykgewogICAgICAgICBib29s
IGRvUGFyYWxsZWxXb3JrTW9kZTsKQEAgLTIzMCwxNCArMjMwLDE4IEBAIHZvaWQgTWFya2luZ0Nv
bnN0cmFpbnRTb2x2ZXI6OnJ1bkV4ZWN1dGkKICAgICAgICAgICAgIGNvbnN0cmFpbnQtPmRvUGFy
YWxsZWxXb3JrKHZpc2l0b3IsICp0YXNrLnRhc2spOwogICAgICAgICBlbHNlIHsKICAgICAgICAg
ICAgIGlmIChjb25zdHJhaW50LT5wYXJhbGxlbGlzbSgpID09IENvbnN0cmFpbnRQYXJhbGxlbGlz
bTo6UGFyYWxsZWwpIHsKLSAgICAgICAgICAgICAgICB2aXNpdG9yLm1fY3VycmVudENvbnN0cmFp
bnQgPSBjb25zdHJhaW50OwotICAgICAgICAgICAgICAgIHZpc2l0b3IubV9jdXJyZW50U29sdmVy
ID0gdGhpczsKKy8vICAgICAgICAgICAgICAgIHZpc2l0b3IubV9jdXJyZW50Q29uc3RyYWludCA9
IGNvbnN0cmFpbnQ7CisvLyAgICAgICAgICAgICAgICB2aXNpdG9yLm1fY3VycmVudFNvbHZlciA9
IHRoaXM7CisgICAgICAgICAgICAgICAgdmlzaXRvci5zZXRDdXJyZW50Q29uc3RyYWludChjb25z
dHJhaW50KTsKKyAgICAgICAgICAgICAgICB2aXNpdG9yLnNldEN1cnJlbnRDb25zdHJhaW50U29s
dmVyKHRoaXMpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgICAgICBjb25z
dHJhaW50LT5leGVjdXRlKHZpc2l0b3IpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICB2aXNp
dG9yLm1fY3VycmVudENvbnN0cmFpbnQgPSBudWxscHRyOwotICAgICAgICAgICAgdmlzaXRvci5t
X2N1cnJlbnRTb2x2ZXIgPSBudWxscHRyOworLy8gICAgICAgICAgICB2aXNpdG9yLm1fY3VycmVu
dENvbnN0cmFpbnQgPSBudWxscHRyOworLy8gICAgICAgICAgICB2aXNpdG9yLm1fY3VycmVudFNv
bHZlciA9IG51bGxwdHI7CisgICAgICAgICAgICB2aXNpdG9yLnNldEN1cnJlbnRDb25zdHJhaW50
KG51bGxwdHIpOworICAgICAgICAgICAgdmlzaXRvci5zZXRDdXJyZW50Q29uc3RyYWludFNvbHZl
cihudWxscHRyKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgewpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludFNvbHZlci5o
CShyZXZpc2lvbiAyNzIxOTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5n
Q29uc3RyYWludFNvbHZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC02NSwxNSArNjUsMTUgQEAgcHVi
bGljOgogICAgIHZvaWQgZXhlY3V0ZShNYXJraW5nQ29uc3RyYWludCYpOwogICAgIAogICAgIC8v
IFBhcmFsbGVsIGNvbnN0cmFpbnRzIGNhbiBhZGQgcGFyYWxsZWwgdGFza3MuCi0gICAgdm9pZCBh
ZGRQYXJhbGxlbFRhc2soUmVmUHRyPFNoYXJlZFRhc2s8dm9pZChTbG90VmlzaXRvciYpPj4sIE1h
cmtpbmdDb25zdHJhaW50Jik7CisgICAgdm9pZCBhZGRQYXJhbGxlbFRhc2soUmVmUHRyPFNoYXJl
ZFRhc2s8dm9pZChBYnN0cmFjdFNsb3RWaXNpdG9yJik+PiwgTWFya2luZ0NvbnN0cmFpbnQmKTsK
ICAgICAKIHByaXZhdGU6Ci0gICAgdm9pZCBydW5FeGVjdXRpb25UaHJlYWQoU2xvdFZpc2l0b3Im
LCBTY2hlZHVsZXJQcmVmZXJlbmNlLCBTY29wZWRMYW1iZGE8T3B0aW9uYWw8dW5zaWduZWQ+KCk+
IHBpY2tOZXh0KTsKKyAgICB2b2lkIHJ1bkV4ZWN1dGlvblRocmVhZChBYnN0cmFjdFNsb3RWaXNp
dG9yJiwgU2NoZWR1bGVyUHJlZmVyZW5jZSwgU2NvcGVkTGFtYmRhPE9wdGlvbmFsPHVuc2lnbmVk
PigpPiBwaWNrTmV4dCk7CiAgICAgCiAgICAgc3RydWN0IFRhc2tXaXRoQ29uc3RyYWludCB7CiAg
ICAgICAgIFRhc2tXaXRoQ29uc3RyYWludCgpIHsgfQogICAgICAgICAKLSAgICAgICAgVGFza1dp
dGhDb25zdHJhaW50KFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoU2xvdFZpc2l0b3ImKT4+IHRhc2ss
IE1hcmtpbmdDb25zdHJhaW50KiBjb25zdHJhaW50KQorICAgICAgICBUYXNrV2l0aENvbnN0cmFp
bnQoUmVmUHRyPFNoYXJlZFRhc2s8dm9pZChBYnN0cmFjdFNsb3RWaXNpdG9yJik+PiB0YXNrLCBN
YXJraW5nQ29uc3RyYWludCogY29uc3RyYWludCkKICAgICAgICAgICAgIDogdGFzayhXVEZNb3Zl
KHRhc2spKQogICAgICAgICAgICAgLCBjb25zdHJhaW50KGNvbnN0cmFpbnQpCiAgICAgICAgIHsK
QEAgLTg1LDEyICs4NSwxMiBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICYmIGNvbnN0cmFp
bnQgPT0gb3RoZXIuY29uc3RyYWludDsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgUmVm
UHRyPFNoYXJlZFRhc2s8dm9pZChTbG90VmlzaXRvciYpPj4gdGFzazsKKyAgICAgICAgUmVmUHRy
PFNoYXJlZFRhc2s8dm9pZChBYnN0cmFjdFNsb3RWaXNpdG9yJik+PiB0YXNrOwogICAgICAgICBN
YXJraW5nQ29uc3RyYWludCogY29uc3RyYWludCB7IG51bGxwdHIgfTsKICAgICB9OwogICAgIAog
ICAgIEhlYXAmIG1faGVhcDsKLSAgICBTbG90VmlzaXRvciYgbV9tYWluVmlzaXRvcjsKKyAgICBB
YnN0cmFjdFNsb3RWaXNpdG9yJiBtX21haW5WaXNpdG9yOwogICAgIE1hcmtpbmdDb25zdHJhaW50
U2V0JiBtX3NldDsKICAgICBCaXRWZWN0b3IgbV9leGVjdXRlZDsKICAgICBEZXF1ZTxUYXNrV2l0
aENvbnN0cmFpbnQsIDMyPiBtX3RvRXhlY3V0ZUluUGFyYWxsZWw7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9QcmVjaXNlQWxsb2NhdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvUHJlY2lzZUFsbG9jYXRpb24uY3BwCShyZXZpc2lvbiAy
NzIxOTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9QcmVjaXNlQWxsb2NhdGlvbi5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTIwMCwxMSArMjAwLDE2IEBAIHZvaWQgUHJlY2lzZUFsbG9j
YXRpb246OnNocmluaygpCiAgICAgbV93ZWFrU2V0LnNocmluaygpOwogfQogCi12b2lkIFByZWNp
c2VBbGxvY2F0aW9uOjp2aXNpdFdlYWtTZXQoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3RlbXBs
YXRlPHR5cGVuYW1lIFZpc2l0b3I+CisvL3ZvaWQgUHJlY2lzZUFsbG9jYXRpb246OnZpc2l0V2Vh
a1NldChWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBQcmVjaXNlQWxsb2NhdGlvbjo6dmlzaXRXZWFr
U2V0MTAwMChBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewotICAgIG1fd2Vha1NldC52
aXNpdCh2aXNpdG9yKTsKKyAgICBtX3dlYWtTZXQudmlzaXQxKHZpc2l0b3IpOwogfQogCisvL3Rl
bXBsYXRlIHZvaWQgUHJlY2lzZUFsbG9jYXRpb246OnZpc2l0V2Vha1NldChTbG90VmlzaXRvciYp
OworLy90ZW1wbGF0ZSB2b2lkIFByZWNpc2VBbGxvY2F0aW9uOjp2aXNpdFdlYWtTZXQoVmVyaWZp
ZXJTbG90VmlzaXRvciYpOworCiB2b2lkIFByZWNpc2VBbGxvY2F0aW9uOjpyZWFwV2Vha1NldCgp
CiB7CiAgICAgcmV0dXJuIG1fd2Vha1NldC5yZWFwKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9QcmVjaXNlQWxsb2NhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL1ByZWNpc2VBbGxvY2F0aW9uLmgJKHJldmlzaW9uIDI3MjE5MikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1ByZWNpc2VBbGxvY2F0aW9uLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTgyLDcgKzgyLDggQEAgcHVibGljOgogICAgIAogICAgIHZvaWQgc2hyaW5rKCk7
CiAgICAgCi0gICAgdm9pZCB2aXNpdFdlYWtTZXQoU2xvdFZpc2l0b3ImKTsKKy8vICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgdmlzaXRXZWFrU2V0KFZpc2l0b3ImKTsKKyAgICB2
b2lkIHZpc2l0V2Vha1NldDEwMDAoQWJzdHJhY3RTbG90VmlzaXRvciYpOwogICAgIHZvaWQgcmVh
cFdlYWtTZXQoKTsKICAgICAKICAgICB2b2lkIGNsZWFyTmV3bHlBbGxvY2F0ZWQoKSB7IG1faXNO
ZXdseUFsbG9jYXRlZCA9IGZhbHNlOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9TaW1wbGVNYXJraW5nQ29uc3RyYWludC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQuY3BwCShyZXZpc2lvbiAyNzIx
OTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TaW1wbGVNYXJraW5nQ29uc3RyYWlu
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAK
IFNpbXBsZU1hcmtpbmdDb25zdHJhaW50OjpTaW1wbGVNYXJraW5nQ29uc3RyYWludCgKICAgICBD
U3RyaW5nIGFiYnJldmlhdGVkTmFtZSwgQ1N0cmluZyBuYW1lLAotICAgIDo6RnVuY3Rpb248dm9p
ZChTbG90VmlzaXRvciYpPiBleGVjdXRlRnVuY3Rpb24sCisgICAgOjpGdW5jdGlvbjx2b2lkKEFi
c3RyYWN0U2xvdFZpc2l0b3ImKT4gZXhlY3V0ZUZ1bmN0aW9uLAogICAgIENvbnN0cmFpbnRWb2xh
dGlsaXR5IHZvbGF0aWxpdHksIENvbnN0cmFpbnRDb25jdXJyZW5jeSBjb25jdXJyZW5jeSwKICAg
ICBDb25zdHJhaW50UGFyYWxsZWxpc20gcGFyYWxsZWxpc20pCiAgICAgOiBNYXJraW5nQ29uc3Ry
YWludChXVEZNb3ZlKGFiYnJldmlhdGVkTmFtZSksIFdURk1vdmUobmFtZSksIHZvbGF0aWxpdHks
IGNvbmN1cnJlbmN5LCBwYXJhbGxlbGlzbSkKQEAgLTQyLDcgKzQyLDcgQEAgU2ltcGxlTWFya2lu
Z0NvbnN0cmFpbnQ6On5TaW1wbGVNYXJraW5nQwogewogfQogCi12b2lkIFNpbXBsZU1hcmtpbmdD
b25zdHJhaW50OjpleGVjdXRlSW1wbChTbG90VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgU2ltcGxl
TWFya2luZ0NvbnN0cmFpbnQ6OmV4ZWN1dGVJbXBsKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0
b3IpCiB7CiAgICAgbV9leGVjdXRlRnVuY3Rpb24odmlzaXRvcik7CiB9CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9TaW1wbGVNYXJraW5nQ29uc3RyYWludC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1NpbXBsZU1hcmtpbmdDb25zdHJhaW50LmgJ
KHJldmlzaW9uIDI3MjE5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1NpbXBsZU1h
cmtpbmdDb25zdHJhaW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDE0ICszNywxNCBAQCBjbGFz
cyBTaW1wbGVNYXJraW5nQ29uc3RyYWludCBmaW5hbCA6IHB1CiBwdWJsaWM6CiAgICAgSlNfRVhQ
T1JUX1BSSVZBVEUgU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQoCiAgICAgICAgIENTdHJpbmcgYWJi
cmV2aWF0ZWROYW1lLCBDU3RyaW5nIG5hbWUsCi0gICAgICAgIDo6RnVuY3Rpb248dm9pZChTbG90
VmlzaXRvciYpPiwKKyAgICAgICAgOjpGdW5jdGlvbjx2b2lkKEFic3RyYWN0U2xvdFZpc2l0b3Im
KT4sCiAgICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5LAogICAgICAgICBDb25zdHJhaW50Q29u
Y3VycmVuY3kgPSBDb25zdHJhaW50Q29uY3VycmVuY3k6OkNvbmN1cnJlbnQsCiAgICAgICAgIENv
bnN0cmFpbnRQYXJhbGxlbGlzbSA9IENvbnN0cmFpbnRQYXJhbGxlbGlzbTo6U2VxdWVudGlhbCk7
CiAgICAgCiAgICAgU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQoCiAgICAgICAgIENTdHJpbmcgYWJi
cmV2aWF0ZWROYW1lLCBDU3RyaW5nIG5hbWUsCi0gICAgICAgIDo6RnVuY3Rpb248dm9pZChTbG90
VmlzaXRvciYpPiBmdW5jLAorICAgICAgICA6OkZ1bmN0aW9uPHZvaWQoQWJzdHJhY3RTbG90Vmlz
aXRvciYpPiBmdW5jLAogICAgICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eSB2b2xhdGlsaXR5LAog
ICAgICAgICBDb25zdHJhaW50UGFyYWxsZWxpc20gcGFyYWxsZWxpc20pCiAgICAgICAgIDogU2lt
cGxlTWFya2luZ0NvbnN0cmFpbnQoYWJicmV2aWF0ZWROYW1lLCBuYW1lLCBXVEZNb3ZlKGZ1bmMp
LCB2b2xhdGlsaXR5LCBDb25zdHJhaW50Q29uY3VycmVuY3k6OkNvbmN1cnJlbnQsIHBhcmFsbGVs
aXNtKQpAQCAtNTQsOSArNTQsOSBAQCBwdWJsaWM6CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgflNp
bXBsZU1hcmtpbmdDb25zdHJhaW50KCkgZmluYWw7CiAgICAgCiBwcml2YXRlOgotICAgIHZvaWQg
ZXhlY3V0ZUltcGwoU2xvdFZpc2l0b3ImKSBmaW5hbDsKKyAgICB2b2lkIGV4ZWN1dGVJbXBsKEFi
c3RyYWN0U2xvdFZpc2l0b3ImKSBmaW5hbDsKIAotICAgIDo6RnVuY3Rpb248dm9pZChTbG90Vmlz
aXRvciYpPiBtX2V4ZWN1dGVGdW5jdGlvbjsKKyAgICA6OkZ1bmN0aW9uPHZvaWQoQWJzdHJhY3RT
bG90VmlzaXRvciYpPiBtX2V4ZWN1dGVGdW5jdGlvbjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpT
QwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmNwcAkocmV2
aXNpb24gMjcyMTkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3Iu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMi0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5o
IgogI2luY2x1ZGUgIlNsb3RWaXNpdG9yLmgiCiAKKyNpbmNsdWRlICJBYnN0cmFjdFNsb3RWaXNp
dG9ySW5saW5lcy5oIgogI2luY2x1ZGUgIkNvbnNlcnZhdGl2ZVJvb3RzLmgiCiAjaW5jbHVkZSAi
R0NTZWdtZW50ZWRBcnJheUlubGluZXMuaCIKICNpbmNsdWRlICJIZWFwQW5hbHl6ZXIuaCIKQEAg
LTc3LDE1ICs3OCwxOCBAQCBzdGF0aWMgdm9pZCB2YWxpZGF0ZShKU0NlbGwqIGNlbGwpCiAjZW5k
aWYKIAogU2xvdFZpc2l0b3I6OlNsb3RWaXNpdG9yKEhlYXAmIGhlYXAsIENTdHJpbmcgY29kZU5h
bWUpCi0gICAgOiBtX2J5dGVzVmlzaXRlZCgwKQotICAgICwgbV92aXNpdENvdW50KDApCisvLyAg
ICA6IEJhc2UoVHlwZTo6U2xvdFZpc2l0b3IsIGhlYXAsIGNvZGVOYW1lKQorLy8gICAgOiBCYXNl
KGhlYXAsIGNvZGVOYW1lKQorICAgIDogQmFzZShoZWFwKQorICAgICwgbV9ieXRlc1Zpc2l0ZWQo
MCkKKy8vICAgICwgbV92aXNpdENvdW50KDApCiAgICAgLCBtX2lzSW5QYXJhbGxlbE1vZGUoZmFs
c2UpCiAgICAgLCBtX21hcmtpbmdWZXJzaW9uKE1hcmtlZFNwYWNlOjppbml0aWFsVmVyc2lvbikK
LSAgICAsIG1faGVhcChoZWFwKQorLy8gICAgLCBtX2hlYXAoaGVhcCkKICAgICAsIG1fY29kZU5h
bWUoY29kZU5hbWUpCiAjaWYgQVNTRVJUX0VOQUJMRUQKICAgICAsIG1faXNDaGVja2luZ0ZvckRl
ZmF1bHRNYXJrVmlvbGF0aW9uKGZhbHNlKQotICAgICwgbV9pc0RyYWluaW5nKGZhbHNlKQorLy8v
LyAgICAsIG1faXNEcmFpbmluZyhmYWxzZSkKICNlbmRpZgogewogfQpAQCAtMTE3LDggKzEyMSw5
IEBAIHZvaWQgU2xvdFZpc2l0b3I6OmRpZFN0YXJ0TWFya2luZygpCiAKIHZvaWQgU2xvdFZpc2l0
b3I6OnJlc2V0KCkKIHsKKyAgICBBYnN0cmFjdFNsb3RWaXNpdG9yOjpyZXNldCgpOwogICAgIG1f
Ynl0ZXNWaXNpdGVkID0gMDsKLSAgICBtX3Zpc2l0Q291bnQgPSAwOworLy8gICAgbV92aXNpdENv
dW50ID0gMDsKICAgICBtX2hlYXBBbmFseXplciA9IG51bGxwdHI7CiAgICAgUkVMRUFTRV9BU1NF
UlQoIW1fY3VycmVudENlbGwpOwogfQpAQCAtMTMyLDcgKzEzNyw3IEBAIHZvaWQgU2xvdFZpc2l0
b3I6OmNsZWFyTWFya1N0YWNrcygpCiAgICAgICAgIH0pOwogfQogCi12b2lkIFNsb3RWaXNpdG9y
OjphcHBlbmQoY29uc3QgQ29uc2VydmF0aXZlUm9vdHMmIGNvbnNlcnZhdGl2ZVJvb3RzKQordm9p
ZCBTbG90VmlzaXRvcjo6YXBwZW5kX0NvbnNlcnZhdGl2ZVJvb3RzKGNvbnN0IENvbnNlcnZhdGl2
ZVJvb3RzJiBjb25zZXJ2YXRpdmVSb290cykKIHsKICAgICBIZWFwQ2VsbCoqIHJvb3RzID0gY29u
c2VydmF0aXZlUm9vdHMucm9vdHMoKTsKICAgICBzaXplX3Qgc2l6ZSA9IGNvbnNlcnZhdGl2ZVJv
b3RzLnNpemUoKTsKQEAgLTgwNywxMiArODEyLDEyIEBAIE1hcmtTdGFja0FycmF5JiBTbG90Vmlz
aXRvcjo6Y29ycmVzcG9uZGkKICAgICByZXR1cm4gKm1faGVhcC5tX3NoYXJlZE11dGF0b3JNYXJr
U3RhY2s7CiB9CiAKLXZvaWQgU2xvdFZpc2l0b3I6OmFkZFBhcmFsbGVsQ29uc3RyYWludFRhc2so
UmVmUHRyPFNoYXJlZFRhc2s8dm9pZChTbG90VmlzaXRvciYpPj4gdGFzaykKK3ZvaWQgU2xvdFZp
c2l0b3I6OmFkZFBhcmFsbGVsQ29uc3RyYWludFRhc2soUmVmUHRyPFNoYXJlZFRhc2s8dm9pZChB
YnN0cmFjdFNsb3RWaXNpdG9yJik+PiB0YXNrKQogewogICAgIFJFTEVBU0VfQVNTRVJUKG1fY3Vy
cmVudFNvbHZlcik7CiAgICAgUkVMRUFTRV9BU1NFUlQobV9jdXJyZW50Q29uc3RyYWludCk7CiAg
ICAgUkVMRUFTRV9BU1NFUlQodGFzayk7Ci0gICAgCisKICAgICBtX2N1cnJlbnRTb2x2ZXItPmFk
ZFBhcmFsbGVsVGFzayh0YXNrLCAqbV9jdXJyZW50Q29uc3RyYWludCk7CiB9CiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuaAkocmV2aXNpb24gMjcyMTkyKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxOSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAyMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTI1LDc0ICsyNSwxMDAgQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRlICJBYnN0
cmFjdFNsb3RWaXNpdG9yLmgiCiAjaW5jbHVkZSAiSGFuZGxlVHlwZXMuaCIKICNpbmNsdWRlICJJ
dGVyYXRpb25TdGF0dXMuaCIKLSNpbmNsdWRlICJNYXJrU3RhY2suaCIKLSNpbmNsdWRlICJWaXNp
dFJhY2VLZXkuaCIKKy8vI2luY2x1ZGUgIk1hcmtTdGFjay5oIgorLy8jaW5jbHVkZSAiVmlzaXRS
YWNlS2V5LmgiCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3dGYvTW9ub3Rv
bmljVGltZS5oPgotI2luY2x1ZGUgPHd0Zi9TaGFyZWRUYXNrLmg+Ci0jaW5jbHVkZSA8d3RmL3Rl
eHQvQ1N0cmluZy5oPgorLy8jaW5jbHVkZSA8d3RmL1NoYXJlZFRhc2suaD4KKy8vI2luY2x1ZGUg
PHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKLWNsYXNzIENvbnNlcnZh
dGl2ZVJvb3RzOworLy9jbGFzcyBDb25zZXJ2YXRpdmVSb290czsKIGNsYXNzIEdDVGhyZWFkU2hh
cmVkRGF0YTsKLWNsYXNzIEhlYXA7CisvL2NsYXNzIEhlYXA7CiBjbGFzcyBIZWFwQ2VsbDsKIGNs
YXNzIEhlYXBBbmFseXplcjsKLWNsYXNzIE1hcmtlZEJsb2NrOwogY2xhc3MgTWFya2luZ0NvbnN0
cmFpbnQ7CiBjbGFzcyBNYXJraW5nQ29uc3RyYWludFNvbHZlcjsKLXRlbXBsYXRlPHR5cGVuYW1l
IFQ+IGNsYXNzIFdlYWs7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBUcmFpdHM+IGNs
YXNzIFdyaXRlQmFycmllckJhc2U7CisvL3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGNsYXNzIFdlYWs7
CisvL3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFRyYWl0cz4gY2xhc3MgV3JpdGVCYXJy
aWVyQmFzZTsKIAogdHlwZWRlZiB1aW50MzJfdCBIZWFwVmVyc2lvbjsKIAotY2xhc3MgU2xvdFZp
c2l0b3IgeworY2xhc3MgU2xvdFZpc2l0b3IgZmluYWwgOiBwdWJsaWMgQWJzdHJhY3RTbG90Vmlz
aXRvciB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU2xvdFZpc2l0b3IpOwogICAgIFdURl9N
QUtFX0ZBU1RfQUxMT0NBVEVEOwogCisgICAgdXNpbmcgQmFzZSA9IEFic3RyYWN0U2xvdFZpc2l0
b3I7CisKICAgICBmcmllbmQgY2xhc3MgU2V0Q3VycmVudENlbGxTY29wZTsKICAgICBmcmllbmQg
Y2xhc3MgSGVhcDsKIAogcHVibGljOgotICAgIGVudW0gUm9vdE1hcmtSZWFzb24gewotICAgICAg
ICBOb25lLAotICAgICAgICBDb25zZXJ2YXRpdmVTY2FuLAotICAgICAgICBTdHJvbmdSZWZlcmVu
Y2VzLAotICAgICAgICBQcm90ZWN0ZWRWYWx1ZXMsCi0gICAgICAgIE1hcmtMaXN0U2V0LAotICAg
ICAgICBWTUV4Y2VwdGlvbnMsCi0gICAgICAgIFN0cm9uZ0hhbmRsZXMsCi0gICAgICAgIERlYnVn
Z2VyLAotICAgICAgICBKSVRTdHViUm91dGluZXMsCi0gICAgICAgIFdlYWtTZXRzLAotICAgICAg
ICBPdXRwdXQsCi0gICAgICAgIERGR1dvcmtMaXN0cywKLSAgICAgICAgQ29kZUJsb2NrcywKLSAg
ICAgICAgRE9NR0NPdXRwdXQsCisgICAgY2xhc3MgRGVmYXVsdE1hcmtpbmdWaW9sYXRpb25Bc3Nl
cnRpb25TY29wZSB7CisgICAgcHVibGljOgorI2lmIEFTU0VSVF9FTkFCTEVECisgICAgICAgIERl
ZmF1bHRNYXJraW5nVmlvbGF0aW9uQXNzZXJ0aW9uU2NvcGUoU2xvdFZpc2l0b3ImIHZpc2l0b3Ip
CisgICAgICAgICAgICA6IG1fdmlzaXRvcih2aXNpdG9yKQorICAgICAgICB7CisgICAgICAgICAg
ICBtX3dhc0NoZWNraW5nRm9yRGVmYXVsdE1hcmtWaW9sYXRpb24gPSBtX3Zpc2l0b3IubV9pc0No
ZWNraW5nRm9yRGVmYXVsdE1hcmtWaW9sYXRpb247CisgICAgICAgICAgICBtX3Zpc2l0b3IubV9p
c0NoZWNraW5nRm9yRGVmYXVsdE1hcmtWaW9sYXRpb24gPSBmYWxzZTsKKyAgICAgICAgfQorCisg
ICAgICAgIH5EZWZhdWx0TWFya2luZ1Zpb2xhdGlvbkFzc2VydGlvblNjb3BlKCkKKyAgICAgICAg
eworICAgICAgICAgICAgbV92aXNpdG9yLm1faXNDaGVja2luZ0ZvckRlZmF1bHRNYXJrVmlvbGF0
aW9uID0gbV93YXNDaGVja2luZ0ZvckRlZmF1bHRNYXJrVmlvbGF0aW9uOworICAgICAgICB9CisK
KyAgICBwcml2YXRlOgorICAgICAgICBTbG90VmlzaXRvciYgbV92aXNpdG9yOworICAgICAgICBi
b29sIG1fd2FzQ2hlY2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlvbjsKKyNlbHNlCisgICAgICAg
IERlZmF1bHRNYXJraW5nVmlvbGF0aW9uQXNzZXJ0aW9uU2NvcGUoU2xvdFZpc2l0b3ImKSB7IH0K
KyNlbmRpZgogICAgIH07CiAKKy8vICAgIGVudW0gUm9vdE1hcmtSZWFzb24geworLy8gICAgICAg
IE5vbmUsCisvLyAgICAgICAgQ29uc2VydmF0aXZlU2NhbiwKKy8vICAgICAgICBTdHJvbmdSZWZl
cmVuY2VzLAorLy8gICAgICAgIFByb3RlY3RlZFZhbHVlcywKKy8vICAgICAgICBNYXJrTGlzdFNl
dCwKKy8vICAgICAgICBWTUV4Y2VwdGlvbnMsCisvLyAgICAgICAgU3Ryb25nSGFuZGxlcywKKy8v
ICAgICAgICBEZWJ1Z2dlciwKKy8vICAgICAgICBKSVRTdHViUm91dGluZXMsCisvLyAgICAgICAg
V2Vha1NldHMsCisvLyAgICAgICAgT3V0cHV0LAorLy8gICAgICAgIERGR1dvcmtMaXN0cywKKy8v
ICAgICAgICBDb2RlQmxvY2tzLAorLy8gICAgICAgIERPTUdDT3V0cHV0LAorLy8gICAgfTsKKwog
ICAgIFNsb3RWaXNpdG9yKEhlYXAmLCBDU3RyaW5nIGNvZGVOYW1lKTsKICAgICB+U2xvdFZpc2l0
b3IoKTsKIAotICAgIE1hcmtTdGFja0FycmF5JiBjb2xsZWN0b3JNYXJrU3RhY2soKSB7IHJldHVy
biBtX2NvbGxlY3RvclN0YWNrOyB9Ci0gICAgTWFya1N0YWNrQXJyYXkmIG11dGF0b3JNYXJrU3Rh
Y2soKSB7IHJldHVybiBtX211dGF0b3JTdGFjazsgfQotICAgIGNvbnN0IE1hcmtTdGFja0FycmF5
JiBjb2xsZWN0b3JNYXJrU3RhY2soKSBjb25zdCB7IHJldHVybiBtX2NvbGxlY3RvclN0YWNrOyB9
Ci0gICAgY29uc3QgTWFya1N0YWNrQXJyYXkmIG11dGF0b3JNYXJrU3RhY2soKSBjb25zdCB7IHJl
dHVybiBtX211dGF0b3JTdGFjazsgfQotICAgIAotICAgIFZNJiB2bSgpOwotICAgIGNvbnN0IFZN
JiB2bSgpIGNvbnN0OwotICAgIEhlYXAqIGhlYXAoKSBjb25zdDsKLQotICAgIHZvaWQgYXBwZW5k
KGNvbnN0IENvbnNlcnZhdGl2ZVJvb3RzJik7Ci0gICAgCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUg
VCwgdHlwZW5hbWUgVHJhaXRzPiB2b2lkIGFwcGVuZChjb25zdCBXcml0ZUJhcnJpZXJCYXNlPFQs
IFRyYWl0cz4mKTsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBUcmFpdHM+IHZv
aWQgYXBwZW5kSGlkZGVuKGNvbnN0IFdyaXRlQmFycmllckJhc2U8VCwgVHJhaXRzPiYpOwotICAg
IHRlbXBsYXRlPHR5cGVuYW1lIEl0ZXJhdG9yPiB2b2lkIGFwcGVuZChJdGVyYXRvciBiZWdpbiAs
IEl0ZXJhdG9yIGVuZCk7Ci0gICAgdm9pZCBhcHBlbmRWYWx1ZXMoY29uc3QgV3JpdGVCYXJyaWVy
QmFzZTxVbmtub3duLCBSYXdWYWx1ZVRyYWl0czxVbmtub3duPj4qLCBzaXplX3QgY291bnQpOwot
ICAgIHZvaWQgYXBwZW5kVmFsdWVzSGlkZGVuKGNvbnN0IFdyaXRlQmFycmllckJhc2U8VW5rbm93
biwgUmF3VmFsdWVUcmFpdHM8VW5rbm93bj4+Kiwgc2l6ZV90IGNvdW50KTsKKy8vICAgIE1hcmtT
dGFja0FycmF5JiBjb2xsZWN0b3JNYXJrU3RhY2soKSB7IHJldHVybiBtX2NvbGxlY3RvclN0YWNr
OyB9CisvLyAgICBNYXJrU3RhY2tBcnJheSYgbXV0YXRvck1hcmtTdGFjaygpIHsgcmV0dXJuIG1f
bXV0YXRvclN0YWNrOyB9CisvLyAgICBjb25zdCBNYXJrU3RhY2tBcnJheSYgY29sbGVjdG9yTWFy
a1N0YWNrKCkgY29uc3QgeyByZXR1cm4gbV9jb2xsZWN0b3JTdGFjazsgfQorLy8gICAgY29uc3Qg
TWFya1N0YWNrQXJyYXkmIG11dGF0b3JNYXJrU3RhY2soKSBjb25zdCB7IHJldHVybiBtX211dGF0
b3JTdGFjazsgfQorICAgIAorLy8gICAgVk0mIHZtKCk7CisvLyAgICBjb25zdCBWTSYgdm0oKSBj
b25zdDsKKy8vICAgIEhlYXAqIGhlYXAoKSBjb25zdDsKKworICAgIHZvaWQgYXBwZW5kX0NvbnNl
cnZhdGl2ZVJvb3RzKGNvbnN0IENvbnNlcnZhdGl2ZVJvb3RzJikgZmluYWw7CisKKyAgICB1c2lu
ZyBCYXNlOjphcHBlbmQ7CisvLyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBUcmFp
dHM+IHZvaWQgYXBwZW5kKGNvbnN0IFdyaXRlQmFycmllckJhc2U8VCwgVHJhaXRzPiYpOworLy8g
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVHJhaXRzPiB2b2lkIGFwcGVuZEhpZGRl
bihjb25zdCBXcml0ZUJhcnJpZXJCYXNlPFQsIFRyYWl0cz4mKTsKKy8vICAgIHRlbXBsYXRlPHR5
cGVuYW1lIEl0ZXJhdG9yPiB2b2lkIGFwcGVuZChJdGVyYXRvciBiZWdpbiAsIEl0ZXJhdG9yIGVu
ZCk7CisvLyAgICB2b2lkIGFwcGVuZFZhbHVlcyhjb25zdCBXcml0ZUJhcnJpZXJCYXNlPFVua25v
d24sIFJhd1ZhbHVlVHJhaXRzPFVua25vd24+PiosIHNpemVfdCBjb3VudCk7CisvLyAgICB2b2lk
IGFwcGVuZFZhbHVlc0hpZGRlbihjb25zdCBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24sIFJhd1Zh
bHVlVHJhaXRzPFVua25vd24+PiosIHNpemVfdCBjb3VudCk7CiAgICAgCiAgICAgLy8gVGhlc2Ug
ZG9uJ3QgcmVxdWlyZSB5b3UgdG8gcHJvdmUgdGhhdCB5b3UgaGF2ZSBhIFdyaXRlQmFycmllcjw+
LiBUaGF0IG1ha2VzIHNlbnNlCiAgICAgLy8gZm9yOgpAQCAtMTAzLDMyICsxMjksMzYgQEAgcHVi
bGljOgogICAgIC8vCiAgICAgLy8gSWYgeW91IGFyZSBub3QgYSByb290IGFuZCB5b3UgZG9uJ3Qg
a25vdyB3aGF0IGtpbmQgb2YgYmFycmllciB5b3UgaGF2ZSwgdGhlbiB5b3UKICAgICAvLyBzaG91
bGRuJ3QgY2FsbCB0aGVzZSBtZXRob2RzLgotICAgIHZvaWQgYXBwZW5kVW5iYXJyaWVyZWQoSlNW
YWx1ZSk7Ci0gICAgdm9pZCBhcHBlbmRVbmJhcnJpZXJlZChKU1ZhbHVlKiwgc2l6ZV90KTsKLSAg
ICB2b2lkIGFwcGVuZFVuYmFycmllcmVkKEpTQ2VsbCopOworLy8gICAgdm9pZCBhcHBlbmRVbmJh
cnJpZXJlZChKU1ZhbHVlKSBmaW5hbDsKKy8vICAgIHZvaWQgYXBwZW5kVW5iYXJyaWVyZWQoSlNW
YWx1ZSosIHNpemVfdCk7CisgICAgdm9pZCBhcHBlbmRVbmJhcnJpZXJlZEltcGwoSlNDZWxsKikg
ZmluYWw7CiAgICAgCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICB2b2lkIGFwcGVuZChj
b25zdCBXZWFrPFQ+JiB3ZWFrKTsKKy8vICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisvLyAgICB2
b2lkIGFwcGVuZChjb25zdCBXZWFrPFQ+JiB3ZWFrKTsKICAgICAKLSAgICB2b2lkIGFwcGVuZEhp
ZGRlblVuYmFycmllcmVkKEpTVmFsdWUpOwotICAgIHZvaWQgYXBwZW5kSGlkZGVuVW5iYXJyaWVy
ZWQoSlNDZWxsKik7CisvLyAgICB2b2lkIGFwcGVuZEhpZGRlblVuYmFycmllcmVkKEpTVmFsdWUp
IGZpbmFsOworICAgIHZvaWQgYXBwZW5kSGlkZGVuVW5iYXJyaWVyZWRJbXBsKEpTQ2VsbCopIGZp
bmFsOwogCi0gICAgYm9vbCBhZGRPcGFxdWVSb290KHZvaWQqKTsgLy8gUmV0dXJucyB0cnVlIGlm
IHRoZSByb290IHdhcyBuZXcuCisgICAgYm9vbCBhZGRPcGFxdWVSb290KHZvaWQqKSBmaW5hbDsg
Ly8gUmV0dXJucyB0cnVlIGlmIHRoZSByb290IHdhcyBuZXcuCiAgICAgCi0gICAgYm9vbCBjb250
YWluc09wYXF1ZVJvb3Qodm9pZCopIGNvbnN0OworICAgIGJvb2wgY29udGFpbnNPcGFxdWVSb290
KHZvaWQqKSBjb25zdCBmaW5hbDsKIAotICAgIGJvb2wgaXNFbXB0eSgpIHsgcmV0dXJuIG1fY29s
bGVjdG9yU3RhY2suaXNFbXB0eSgpICYmIG1fbXV0YXRvclN0YWNrLmlzRW1wdHkoKTsgfQorLy8g
ICAgYm9vbCBpc0VtcHR5KCkgeyByZXR1cm4gbV9jb2xsZWN0b3JTdGFjay5pc0VtcHR5KCkgJiYg
bV9tdXRhdG9yU3RhY2suaXNFbXB0eSgpOyB9CiAKICAgICBib29sIGlzRmlyc3RWaXNpdCgpIGNv
bnN0IHsgcmV0dXJuIG1faXNGaXJzdFZpc2l0OyB9CiAKKyAgICBib29sIGlzTWFya2VkKGNvbnN0
IHZvaWQqKSBjb25zdCBmaW5hbDsKKyAgICBib29sIGlzTWFya2VkKE1hcmtlZEJsb2NrJiwgSGVh
cENlbGwqKSBjb25zdCBmaW5hbDsKKyAgICBib29sIGlzTWFya2VkKFByZWNpc2VBbGxvY2F0aW9u
JiwgSGVhcENlbGwqKSBjb25zdCBmaW5hbDsKKwogICAgIHZvaWQgZGlkU3RhcnRNYXJraW5nKCk7
CiAgICAgdm9pZCByZXNldCgpOwogICAgIHZvaWQgY2xlYXJNYXJrU3RhY2tzKCk7CiAKICAgICBz
aXplX3QgYnl0ZXNWaXNpdGVkKCkgY29uc3QgeyByZXR1cm4gbV9ieXRlc1Zpc2l0ZWQ7IH0KLSAg
ICBzaXplX3QgdmlzaXRDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fdmlzaXRDb3VudDsgfQotICAg
IAotICAgIHZvaWQgYWRkVG9WaXNpdENvdW50KHNpemVfdCB2YWx1ZSkgeyBtX3Zpc2l0Q291bnQg
Kz0gdmFsdWU7IH0KKy8vICAgIHNpemVfdCB2aXNpdENvdW50KCkgY29uc3QgeyByZXR1cm4gbV92
aXNpdENvdW50OyB9CisKKy8vICAgIHZvaWQgYWRkVG9WaXNpdENvdW50KHNpemVfdCB2YWx1ZSkg
eyBtX3Zpc2l0Q291bnQgKz0gdmFsdWU7IH0KIAogICAgIHZvaWQgZG9uYXRlKCk7CiAgICAgdm9p
ZCBkcmFpbihNb25vdG9uaWNUaW1lIHRpbWVvdXQgPSBNb25vdG9uaWNUaW1lOjppbmZpbml0eSgp
KTsKQEAgLTE1MSwyNCArMTgxLDI0IEBAIHB1YmxpYzoKICAgICAKICAgICAvLyBUaGlzIGluZm9y
bXMgdGhlIEdDIGFib3V0IGF1eGlsaWFyeSBvZiBzb21lIHNpemUgdGhhdCB3ZSBhcmUga2VlcGlu
ZyBhbGl2ZS4gSWYgeW91IGRvbid0IGRvCiAgICAgLy8gdGhpcyB0aGVuIHRoZSBzcGFjZSB3aWxs
IGJlIGZyZWVkIGF0IGVuZCBvZiBHQy4KLSAgICB2b2lkIG1hcmtBdXhpbGlhcnkoY29uc3Qgdm9p
ZCogYmFzZSk7CisgICAgdm9pZCBtYXJrQXV4aWxpYXJ5KGNvbnN0IHZvaWQqIGJhc2UpIGZpbmFs
OwogCi0gICAgdm9pZCByZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQoc2l6ZV90KTsKKyAgICB2b2lk
IHJlcG9ydEV4dHJhTWVtb3J5VmlzaXRlZChzaXplX3QpIGZpbmFsOwogI2lmIEVOQUJMRShSRVNP
VVJDRV9VU0FHRSkKLSAgICB2b2lkIHJlcG9ydEV4dGVybmFsTWVtb3J5VmlzaXRlZChzaXplX3Qp
OworICAgIHZvaWQgcmVwb3J0RXh0ZXJuYWxNZW1vcnlWaXNpdGVkKHNpemVfdCkgZmluYWw7CiAj
ZW5kaWYKICAgICAKLSAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICB2b2lk
IGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdCBmaW5hbDsKIAotICAgIGJvb2wgaXNBbmFseXppbmdI
ZWFwKCkgY29uc3QgeyByZXR1cm4gISFtX2hlYXBBbmFseXplcjsgfQotICAgIEhlYXBBbmFseXpl
ciogaGVhcEFuYWx5emVyKCkgY29uc3QgeyByZXR1cm4gbV9oZWFwQW5hbHl6ZXI7IH0KKy8vICAg
IGJvb2wgaXNBbmFseXppbmdIZWFwKCkgY29uc3QgeyByZXR1cm4gISFtX2hlYXBBbmFseXplcjsg
fQorLy8gICAgSGVhcEFuYWx5emVyKiBoZWFwQW5hbHl6ZXIoKSBjb25zdCB7IHJldHVybiBtX2hl
YXBBbmFseXplcjsgfQogICAgIAotICAgIFJvb3RNYXJrUmVhc29uIHJvb3RNYXJrUmVhc29uKCkg
Y29uc3QgeyByZXR1cm4gbV9yb290TWFya1JlYXNvbjsgfQotICAgIHZvaWQgc2V0Um9vdE1hcmtS
ZWFzb24oUm9vdE1hcmtSZWFzb24gcmVhc29uKSB7IG1fcm9vdE1hcmtSZWFzb24gPSByZWFzb247
IH0KKy8vICAgIFJvb3RNYXJrUmVhc29uIHJvb3RNYXJrUmVhc29uKCkgY29uc3QgeyByZXR1cm4g
bV9yb290TWFya1JlYXNvbjsgfQorLy8gICAgdm9pZCBzZXRSb290TWFya1JlYXNvbihSb290TWFy
a1JlYXNvbiByZWFzb24pIHsgbV9yb290TWFya1JlYXNvbiA9IHJlYXNvbjsgfQogCiAgICAgSGVh
cFZlcnNpb24gbWFya2luZ1ZlcnNpb24oKSBjb25zdCB7IHJldHVybiBtX21hcmtpbmdWZXJzaW9u
OyB9CiAKLSAgICBib29sIG11dGF0b3JJc1N0b3BwZWQoKSBjb25zdCB7IHJldHVybiBtX211dGF0
b3JJc1N0b3BwZWQ7IH0KKyAgICBib29sIG11dGF0b3JJc1N0b3BwZWQoKSBjb25zdCBmaW5hbCB7
IHJldHVybiBtX211dGF0b3JJc1N0b3BwZWQ7IH0KICAgICAKICAgICBMb2NrJiByaWdodFRvUnVu
KCkgeyByZXR1cm4gbV9yaWdodFRvUnVuOyB9CiAgICAgCkBAIC0xODAsMTAgKzIxMCwxMiBAQCBw
dWJsaWM6CiAgICAgCiAgICAgdm9pZCBvcHRpbWl6ZUZvclN0b3BwZWRNdXRhdG9yKCk7CiAgICAg
Ci0gICAgdm9pZCBkaWRSYWNlKGNvbnN0IFZpc2l0UmFjZUtleSYpOworICAgIHZvaWQgZGlkUmFj
ZShjb25zdCBWaXNpdFJhY2VLZXkmKSBmaW5hbDsKICAgICB2b2lkIGRpZFJhY2UoSlNDZWxsKiBj
ZWxsLCBjb25zdCBjaGFyKiByZWFzb24pIHsgZGlkUmFjZShWaXNpdFJhY2VLZXkoY2VsbCwgcmVh
c29uKSk7IH0KICAgICAKLSAgICB2b2lkIHZpc2l0QXNDb25zdHJhaW50KGNvbnN0IEpTQ2VsbCop
OworICAgIHZvaWQgc2V0Q3VycmVudENvbnN0cmFpbnQoTWFya2luZ0NvbnN0cmFpbnQqKSBmaW5h
bDsKKyAgICB2b2lkIHNldEN1cnJlbnRDb25zdHJhaW50U29sdmVyKE1hcmtpbmdDb25zdHJhaW50
U29sdmVyKikgZmluYWw7CisgICAgdm9pZCB2aXNpdEFzQ29uc3RyYWludChjb25zdCBKU0NlbGwq
KSBmaW5hbDsKICAgICAKICAgICBib29sIGRpZFJlYWNoVGVybWluYXRpb24oKTsKICAgICAKQEAg
LTE5Myw3ICsyMjUsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgY29uc3QgY2hhciogY29kZU5hbWUo
KSBjb25zdCB7IHJldHVybiBtX2NvZGVOYW1lLmRhdGEoKTsgfQogICAgIAotICAgIEpTX0VYUE9S
VF9QUklWQVRFIHZvaWQgYWRkUGFyYWxsZWxDb25zdHJhaW50VGFzayhSZWZQdHI8U2hhcmVkVGFz
azx2b2lkKFNsb3RWaXNpdG9yJik+Pik7CisgICAgdm9pZCBhZGRQYXJhbGxlbENvbnN0cmFpbnRU
YXNrKFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoQWJzdHJhY3RTbG90VmlzaXRvciYpPj4pIGZpbmFs
OwogCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBQYXJhbGxlbE1vZGVFbmFibGVyOwpAQCAt
MjMyLDIzICsyNjQsMjMgQEAgcHJpdmF0ZToKIAogICAgIE1hcmtTdGFja0FycmF5JiBjb3JyZXNw
b25kaW5nR2xvYmFsU3RhY2soTWFya1N0YWNrQXJyYXkmKTsKIAotICAgIE1hcmtTdGFja0FycmF5
IG1fY29sbGVjdG9yU3RhY2s7Ci0gICAgTWFya1N0YWNrQXJyYXkgbV9tdXRhdG9yU3RhY2s7Ci0g
ICAgCisvLyAgICBNYXJrU3RhY2tBcnJheSBtX2NvbGxlY3RvclN0YWNrOworLy8gICAgTWFya1N0
YWNrQXJyYXkgbV9tdXRhdG9yU3RhY2s7CisKICAgICBzaXplX3QgbV9ieXRlc1Zpc2l0ZWQ7Ci0g
ICAgc2l6ZV90IG1fdmlzaXRDb3VudDsKKy8vICAgIHNpemVfdCBtX3Zpc2l0Q291bnQ7CiAgICAg
c2l6ZV90IG1fbm9uQ2VsbFZpc2l0Q291bnQgeyAwIH07IC8vIFVzZWQgZm9yIGluY3JlbWVudGFs
IGRyYWluaW5nLCBpZ25vcmVkIG90aGVyd2lzZS4KICAgICBDaGVja2VkU2l6ZSBtX2V4dHJhTWVt
b3J5U2l6ZSB7IDAgfTsKICAgICBib29sIG1faXNJblBhcmFsbGVsTW9kZTsKICAgICBib29sIG1f
aWdub3JlTmV3T3BhcXVlUm9vdHMgeyBmYWxzZSB9OyAvLyBVc2VmdWwgYXMgYSBkZWJ1Z2dpbmcg
bW9kZS4KIAogICAgIEhlYXBWZXJzaW9uIG1fbWFya2luZ1ZlcnNpb247Ci0gICAgCi0gICAgSGVh
cCYgbV9oZWFwOworCisvLyAgICBIZWFwJiBtX2hlYXA7CiAKICAgICBIZWFwQW5hbHl6ZXIqIG1f
aGVhcEFuYWx5emVyIHsgbnVsbHB0ciB9OwogICAgIEpTQ2VsbCogbV9jdXJyZW50Q2VsbCB7IG51
bGxwdHIgfTsKLSAgICBSb290TWFya1JlYXNvbiBtX3Jvb3RNYXJrUmVhc29uIHsgUm9vdE1hcmtS
ZWFzb246Ok5vbmUgfTsKKy8vICAgIFJvb3RNYXJrUmVhc29uIG1fcm9vdE1hcmtSZWFzb24geyBS
b290TWFya1JlYXNvbjo6Tm9uZSB9OwogICAgIGJvb2wgbV9pc0ZpcnN0VmlzaXQgeyBmYWxzZSB9
OwogICAgIGJvb2wgbV9tdXRhdG9ySXNTdG9wcGVkIHsgZmFsc2UgfTsKICAgICBib29sIG1fY2Fu
T3B0aW1pemVGb3JTdG9wcGVkTXV0YXRvciB7IGZhbHNlIH07CkBAIC0yNjEsMTAgKzI5MywxMCBA
QCBwcml2YXRlOgogICAgIAogICAgIC8vIFB1dCBwYWRkaW5nIGhlcmUgdG8gbWl0aWdhdGUgZmFs
c2Ugc2hhcmluZyBiZXR3ZWVuIG11bHRpcGxlIFNsb3RWaXNpdG9ycy4KICAgICBjaGFyIHBhZGRp
bmdbNjRdOwotcHVibGljOgorLy9wdWJsaWM6CiAjaWYgQVNTRVJUX0VOQUJMRUQKLSAgICBib29s
IG1faXNDaGVja2luZ0ZvckRlZmF1bHRNYXJrVmlvbGF0aW9uOwotICAgIGJvb2wgbV9pc0RyYWlu
aW5nOworICAgIGJvb2wgbV9pc0NoZWNraW5nRm9yRGVmYXVsdE1hcmtWaW9sYXRpb24geyBmYWxz
ZSB9OworLy8gICAgYm9vbCBtX2lzRHJhaW5pbmc7CiAjZW5kaWYKIH07CiAKQEAgLTI4NywyMyAr
MzE5LDIzIEBAIHByaXZhdGU6CiAgICAgU2xvdFZpc2l0b3ImIG1fc3RhY2s7CiB9OwogCi1jbGFz
cyBTZXRSb290TWFya1JlYXNvblNjb3BlIHsKLXB1YmxpYzoKLSAgICBTZXRSb290TWFya1JlYXNv
blNjb3BlKFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBTbG90VmlzaXRvcjo6Um9vdE1hcmtSZWFzb24g
cmVhc29uKQotICAgICAgICA6IG1fdmlzaXRvcih2aXNpdG9yKQotICAgICAgICAsIG1fcHJldmlv
dXNSZWFzb24odmlzaXRvci5yb290TWFya1JlYXNvbigpKQotICAgIHsKLSAgICAgICAgbV92aXNp
dG9yLnNldFJvb3RNYXJrUmVhc29uKHJlYXNvbik7Ci0gICAgfQotCi0gICAgflNldFJvb3RNYXJr
UmVhc29uU2NvcGUoKQotICAgIHsKLSAgICAgICAgbV92aXNpdG9yLnNldFJvb3RNYXJrUmVhc29u
KG1fcHJldmlvdXNSZWFzb24pOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBTbG90VmlzaXRvciYg
bV92aXNpdG9yOwotICAgIFNsb3RWaXNpdG9yOjpSb290TWFya1JlYXNvbiBtX3ByZXZpb3VzUmVh
c29uOwotfTsKLQorLy9jbGFzcyBTZXRSb290TWFya1JlYXNvblNjb3BlIHsKKy8vcHVibGljOgor
Ly8gICAgU2V0Um9vdE1hcmtSZWFzb25TY29wZShTbG90VmlzaXRvciYgdmlzaXRvciwgU2xvdFZp
c2l0b3I6OlJvb3RNYXJrUmVhc29uIHJlYXNvbikKKy8vICAgICAgICA6IG1fdmlzaXRvcih2aXNp
dG9yKQorLy8gICAgICAgICwgbV9wcmV2aW91c1JlYXNvbih2aXNpdG9yLnJvb3RNYXJrUmVhc29u
KCkpCisvLyAgICB7CisvLyAgICAgICAgbV92aXNpdG9yLnNldFJvb3RNYXJrUmVhc29uKHJlYXNv
bik7CisvLyAgICB9CisvLworLy8gICAgflNldFJvb3RNYXJrUmVhc29uU2NvcGUoKQorLy8gICAg
eworLy8gICAgICAgIG1fdmlzaXRvci5zZXRSb290TWFya1JlYXNvbihtX3ByZXZpb3VzUmVhc29u
KTsKKy8vICAgIH0KKy8vCisvL3ByaXZhdGU6CisvLyAgICBTbG90VmlzaXRvciYgbV92aXNpdG9y
OworLy8gICAgU2xvdFZpc2l0b3I6OlJvb3RNYXJrUmVhc29uIG1fcHJldmlvdXNSZWFzb247Cisv
L307CisvLwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9TbG90VmlzaXRvcklubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9TbG90VmlzaXRvcklubGluZXMuaAkocmV2aXNpb24gMjcyMTkyKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTkgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0yNSwyNiArMjUsMjkgQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRlICJBYnN0
cmFjdFNsb3RWaXNpdG9ySW5saW5lcy5oIgogI2luY2x1ZGUgIlNsb3RWaXNpdG9yLmgiCi0jaW5j
bHVkZSAiV2Vhay5oIgotI2luY2x1ZGUgIldlYWtJbmxpbmVzLmgiCisjaW5jbHVkZSAiTWFya2Vk
QmxvY2suaCIKKyNpbmNsdWRlICJQcmVjaXNlQWxsb2NhdGlvbi5oIgorLy8jaW5jbHVkZSAiV2Vh
ay5oIgorLy8jaW5jbHVkZSAiV2Vha0lubGluZXMuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKLUFM
V0FZU19JTkxJTkUgdm9pZCBTbG90VmlzaXRvcjo6YXBwZW5kVW5iYXJyaWVyZWQoSlNWYWx1ZSog
c2xvdCwgc2l6ZV90IGNvdW50KQotewotICAgIGZvciAoc2l6ZV90IGkgPSBjb3VudDsgaS0tOykK
LSAgICAgICAgYXBwZW5kVW5iYXJyaWVyZWQoc2xvdFtpXSk7Ci19CisvL0FMV0FZU19JTkxJTkUg
dm9pZCBTbG90VmlzaXRvcjo6YXBwZW5kVW5iYXJyaWVyZWQoSlNWYWx1ZSogc2xvdCwgc2l6ZV90
IGNvdW50KQorLy97CisvLyAgICBmb3IgKHNpemVfdCBpID0gY291bnQ7IGktLTspCisvLyAgICAg
ICAgYXBwZW5kVW5iYXJyaWVyZWQoc2xvdFtpXSk7CisvL30KIAotQUxXQVlTX0lOTElORSB2b2lk
IFNsb3RWaXNpdG9yOjphcHBlbmRVbmJhcnJpZXJlZChKU0NlbGwqIGNlbGwpCitBTFdBWVNfSU5M
SU5FIHZvaWQgU2xvdFZpc2l0b3I6OmFwcGVuZFVuYmFycmllcmVkSW1wbChKU0NlbGwqIGNlbGwp
CiB7CiAgICAgLy8gVGhpcyBuZWVkcyB0byBiZSB3cml0dGVuIGluIGEgdmVyeSBzcGVjaWZpYyB3
YXkgdG8gZW5zdXJlIHRoYXQgaXQgZ2V0cyBpbmxpbmVkCiAgICAgLy8gcHJvcGVybHkuIEluIHBh
cnRpY3VsYXIsIGl0IGFwcGVhcnMgdGhhdCB1c2luZyB0ZW1wbGF0ZXMgaGVyZSBicmVha3MgQUxX
QVlTX0lOTElORS4KICAgICAKLSAgICBpZiAoIWNlbGwpCi0gICAgICAgIHJldHVybjsKLSAgICAK
Ky8vICAgIGlmICghY2VsbCkKKy8vICAgICAgICByZXR1cm47CisvLwogICAgIERlcGVuZGVuY3kg
ZGVwZW5kZW5jeTsKICAgICBpZiAoVU5MSUtFTFkoY2VsbC0+aXNQcmVjaXNlQWxsb2NhdGlvbigp
KSkgewogICAgICAgICBpZiAoTElLRUxZKGNlbGwtPnByZWNpc2VBbGxvY2F0aW9uKCkuaXNNYXJr
ZWQoKSkpIHsKQEAgLTYzLDI1ICs2NiwyNSBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgU2xvdFZpc2l0
b3I6OmFwcGVuZFVuCiAgICAgYXBwZW5kU2xvdyhjZWxsLCBkZXBlbmRlbmN5KTsKIH0KIAotQUxX
QVlTX0lOTElORSB2b2lkIFNsb3RWaXNpdG9yOjphcHBlbmRVbmJhcnJpZXJlZChKU1ZhbHVlIHZh
bHVlKQotewotICAgIGlmICh2YWx1ZS5pc0NlbGwoKSkKLSAgICAgICAgYXBwZW5kVW5iYXJyaWVy
ZWQodmFsdWUuYXNDZWxsKCkpOwotfQotCi1BTFdBWVNfSU5MSU5FIHZvaWQgU2xvdFZpc2l0b3I6
OmFwcGVuZEhpZGRlblVuYmFycmllcmVkKEpTVmFsdWUgdmFsdWUpCi17Ci0gICAgaWYgKHZhbHVl
LmlzQ2VsbCgpKQotICAgICAgICBhcHBlbmRIaWRkZW5VbmJhcnJpZXJlZCh2YWx1ZS5hc0NlbGwo
KSk7Ci19CisvL0FMV0FZU19JTkxJTkUgdm9pZCBTbG90VmlzaXRvcjo6YXBwZW5kVW5iYXJyaWVy
ZWQoSlNWYWx1ZSB2YWx1ZSkKKy8veworLy8gICAgaWYgKHZhbHVlLmlzQ2VsbCgpKQorLy8gICAg
ICAgIGFwcGVuZFVuYmFycmllcmVkKHZhbHVlLmFzQ2VsbCgpKTsKKy8vfQorCisvL0FMV0FZU19J
TkxJTkUgdm9pZCBTbG90VmlzaXRvcjo6YXBwZW5kSGlkZGVuVW5iYXJyaWVyZWQoSlNWYWx1ZSB2
YWx1ZSkKKy8veworLy8gICAgaWYgKHZhbHVlLmlzQ2VsbCgpKQorLy8gICAgICAgIGFwcGVuZEhp
ZGRlblVuYmFycmllcmVkKHZhbHVlLmFzQ2VsbCgpKTsKKy8vfQogCi1BTFdBWVNfSU5MSU5FIHZv
aWQgU2xvdFZpc2l0b3I6OmFwcGVuZEhpZGRlblVuYmFycmllcmVkKEpTQ2VsbCogY2VsbCkKK0FM
V0FZU19JTkxJTkUgdm9pZCBTbG90VmlzaXRvcjo6YXBwZW5kSGlkZGVuVW5iYXJyaWVyZWRJbXBs
KEpTQ2VsbCogY2VsbCkKIHsKICAgICAvLyBUaGlzIG5lZWRzIHRvIGJlIHdyaXR0ZW4gaW4gYSB2
ZXJ5IHNwZWNpZmljIHdheSB0byBlbnN1cmUgdGhhdCBpdCBnZXRzIGlubGluZWQKICAgICAvLyBw
cm9wZXJseS4gSW4gcGFydGljdWxhciwgaXQgYXBwZWFycyB0aGF0IHVzaW5nIHRlbXBsYXRlcyBo
ZXJlIGJyZWFrcyBBTFdBWVNfSU5MSU5FLgogICAgIAotICAgIGlmICghY2VsbCkKLSAgICAgICAg
cmV0dXJuOworLy8gICAgaWYgKCFjZWxsKQorLy8gICAgICAgIHJldHVybjsKICAgICAKICAgICBE
ZXBlbmRlbmN5IGRlcGVuZGVuY3k7CiAgICAgaWYgKFVOTElLRUxZKGNlbGwtPmlzUHJlY2lzZUFs
bG9jYXRpb24oKSkpIHsKQEAgLTk3LDU4ICsxMDAsODMgQEAgQUxXQVlTX0lOTElORSB2b2lkIFNs
b3RWaXNpdG9yOjphcHBlbmRIaQogICAgIGFwcGVuZEhpZGRlblNsb3coY2VsbCwgZGVwZW5kZW5j
eSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1BTFdBWVNfSU5MSU5FIHZvaWQgU2xvdFZp
c2l0b3I6OmFwcGVuZChjb25zdCBXZWFrPFQ+JiB3ZWFrKQotewotICAgIGFwcGVuZFVuYmFycmll
cmVkKHdlYWsuZ2V0KCkpOwotfQorLy90ZW1wbGF0ZTx0eXBlbmFtZSBUPgorLy9BTFdBWVNfSU5M
SU5FIHZvaWQgU2xvdFZpc2l0b3I6OmFwcGVuZChjb25zdCBXZWFrPFQ+JiB3ZWFrKQorLy97Cisv
LyAgICBhcHBlbmRVbmJhcnJpZXJlZCh3ZWFrLmdldCgpKTsKKy8vfQorLy8KKy8vdGVtcGxhdGU8
dHlwZW5hbWUgVCwgdHlwZW5hbWUgVHJhaXRzPgorLy9BTFdBWVNfSU5MSU5FIHZvaWQgU2xvdFZp
c2l0b3I6OmFwcGVuZChjb25zdCBXcml0ZUJhcnJpZXJCYXNlPFQsIFRyYWl0cz4mIHNsb3QpCisv
L3sKKy8vICAgIGFwcGVuZFVuYmFycmllcmVkKHNsb3QuZ2V0KCkpOworLy99CisvLworLy90ZW1w
bGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBUcmFpdHM+CisvL0FMV0FZU19JTkxJTkUgdm9pZCBT
bG90VmlzaXRvcjo6YXBwZW5kSGlkZGVuKGNvbnN0IFdyaXRlQmFycmllckJhc2U8VCwgVHJhaXRz
PiYgc2xvdCkKKy8veworLy8gICAgYXBwZW5kSGlkZGVuVW5iYXJyaWVyZWQoc2xvdC5nZXQoKSk7
CisvL30KKy8vCisvL3RlbXBsYXRlPHR5cGVuYW1lIEl0ZXJhdG9yPgorLy9BTFdBWVNfSU5MSU5F
IHZvaWQgU2xvdFZpc2l0b3I6OmFwcGVuZChJdGVyYXRvciBiZWdpbiwgSXRlcmF0b3IgZW5kKQor
Ly97CisvLyAgICBmb3IgKGF1dG8gaXQgPSBiZWdpbjsgaXQgIT0gZW5kOyArK2l0KQorLy8gICAg
ICAgIGFwcGVuZCgqaXQpOworLy99CisKKy8vQUxXQVlTX0lOTElORSB2b2lkIFNsb3RWaXNpdG9y
OjphcHBlbmRWYWx1ZXMoY29uc3QgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiogYmFycmllcnMs
IHNpemVfdCBjb3VudCkKKy8veworLy8gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3VudDsg
KytpKQorLy8gICAgICAgIGFwcGVuZChiYXJyaWVyc1tpXSk7CisvL30KKy8vCisvL0FMV0FZU19J
TkxJTkUgdm9pZCBTbG90VmlzaXRvcjo6YXBwZW5kVmFsdWVzSGlkZGVuKGNvbnN0IFdyaXRlQmFy
cmllckJhc2U8VW5rbm93bj4qIGJhcnJpZXJzLCBzaXplX3QgY291bnQpCisvL3sKKy8vICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgY291bnQ7ICsraSkKKy8vICAgICAgICBhcHBlbmRIaWRkZW4o
YmFycmllcnNbaV0pOworLy99CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFRyYWl0
cz4KLUFMV0FZU19JTkxJTkUgdm9pZCBTbG90VmlzaXRvcjo6YXBwZW5kKGNvbnN0IFdyaXRlQmFy
cmllckJhc2U8VCwgVHJhaXRzPiYgc2xvdCkKK2lubGluZSBib29sIFNsb3RWaXNpdG9yOjphZGRP
cGFxdWVSb290KHZvaWQqIHB0cikKIHsKLSAgICBhcHBlbmRVbmJhcnJpZXJlZChzbG90LmdldCgp
KTsKKyAgICBpZiAoIXB0cikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChtX2lnbm9y
ZU5ld09wYXF1ZVJvb3RzKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFoZWFwKCkt
Pm1fb3BhcXVlUm9vdHMuYWRkKHB0cikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBtX3Zp
c2l0Q291bnQrKzsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgVHJhaXRzPgotQUxXQVlTX0lOTElORSB2b2lkIFNsb3RWaXNpdG9yOjphcHBlbmRI
aWRkZW4oY29uc3QgV3JpdGVCYXJyaWVyQmFzZTxULCBUcmFpdHM+JiBzbG90KQoraW5saW5lIGJv
b2wgU2xvdFZpc2l0b3I6OmNvbnRhaW5zT3BhcXVlUm9vdCh2b2lkKiBwdHIpIGNvbnN0CiB7Ci0g
ICAgYXBwZW5kSGlkZGVuVW5iYXJyaWVyZWQoc2xvdC5nZXQoKSk7CisgICAgcmV0dXJuIGhlYXAo
KS0+bV9vcGFxdWVSb290cy5jb250YWlucyhwdHIpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBJ
dGVyYXRvcj4KLUFMV0FZU19JTkxJTkUgdm9pZCBTbG90VmlzaXRvcjo6YXBwZW5kKEl0ZXJhdG9y
IGJlZ2luLCBJdGVyYXRvciBlbmQpCitpbmxpbmUgYm9vbCBTbG90VmlzaXRvcjo6aXNNYXJrZWQo
Y29uc3Qgdm9pZCogcCkgY29uc3QKIHsKLSAgICBmb3IgKGF1dG8gaXQgPSBiZWdpbjsgaXQgIT0g
ZW5kOyArK2l0KQotICAgICAgICBhcHBlbmQoKml0KTsKKyAgICByZXR1cm4gaGVhcCgpLT5pc01h
cmtlZChwKTsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIFNsb3RWaXNpdG9yOjphcHBlbmRWYWx1
ZXMoY29uc3QgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiogYmFycmllcnMsIHNpemVfdCBjb3Vu
dCkKK2lubGluZSBib29sIFNsb3RWaXNpdG9yOjppc01hcmtlZChNYXJrZWRCbG9jayYgY29udGFp
bmVyLCBIZWFwQ2VsbCogY2VsbCkgY29uc3QKIHsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGNvdW50OyArK2kpCi0gICAgICAgIGFwcGVuZChiYXJyaWVyc1tpXSk7CisgICAgcmV0dXJuIGNv
bnRhaW5lci5pc01hcmtlZChtYXJraW5nVmVyc2lvbigpLCBjZWxsKTsKIH0KIAotQUxXQVlTX0lO
TElORSB2b2lkIFNsb3RWaXNpdG9yOjphcHBlbmRWYWx1ZXNIaWRkZW4oY29uc3QgV3JpdGVCYXJy
aWVyQmFzZTxVbmtub3duPiogYmFycmllcnMsIHNpemVfdCBjb3VudCkKK2lubGluZSBib29sIFNs
b3RWaXNpdG9yOjppc01hcmtlZChQcmVjaXNlQWxsb2NhdGlvbiYgY29udGFpbmVyLCBIZWFwQ2Vs
bCogY2VsbCkgY29uc3QKIHsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyArK2kp
Ci0gICAgICAgIGFwcGVuZEhpZGRlbihiYXJyaWVyc1tpXSk7CisgICAgcmV0dXJuIGNvbnRhaW5l
ci5pc01hcmtlZChtYXJraW5nVmVyc2lvbigpLCBjZWxsKTsKIH0KIAotaW5saW5lIGJvb2wgU2xv
dFZpc2l0b3I6OmFkZE9wYXF1ZVJvb3Qodm9pZCogcHRyKQoraW5saW5lIHZvaWQgU2xvdFZpc2l0
b3I6OnNldEN1cnJlbnRDb25zdHJhaW50KE1hcmtpbmdDb25zdHJhaW50KiBjb25zdHJhaW50KQog
ewotICAgIGlmICghcHRyKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKG1faWdub3Jl
TmV3T3BhcXVlUm9vdHMpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoIWhlYXAoKS0+
bV9vcGFxdWVSb290cy5hZGQocHRyKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1fdmlz
aXRDb3VudCsrOwotICAgIHJldHVybiB0cnVlOworICAgIG1fY3VycmVudENvbnN0cmFpbnQgPSBj
b25zdHJhaW50OwogfQogCi1pbmxpbmUgYm9vbCBTbG90VmlzaXRvcjo6Y29udGFpbnNPcGFxdWVS
b290KHZvaWQqIHB0cikgY29uc3QKK2lubGluZSB2b2lkIFNsb3RWaXNpdG9yOjpzZXRDdXJyZW50
Q29uc3RyYWludFNvbHZlcihNYXJraW5nQ29uc3RyYWludFNvbHZlciogc29sdmVyKQogewotICAg
IHJldHVybiBoZWFwKCktPm1fb3BhcXVlUm9vdHMuY29udGFpbnMocHRyKTsKKyAgICBtX2N1cnJl
bnRTb2x2ZXIgPSBzb2x2ZXI7CiB9CiAKIGlubGluZSB2b2lkIFNsb3RWaXNpdG9yOjpyZXBvcnRF
eHRyYU1lbW9yeVZpc2l0ZWQoc2l6ZV90IHNpemUpCkBAIC0xNjksMjAgKzE5NywyMCBAQCBpbmxp
bmUgdm9pZCBTbG90VmlzaXRvcjo6cmVwb3J0RXh0ZXJuYWxNCiB9CiAjZW5kaWYKIAotaW5saW5l
IEhlYXAqIFNsb3RWaXNpdG9yOjpoZWFwKCkgY29uc3QKLXsKLSAgICByZXR1cm4gJm1faGVhcDsK
LX0KLQotaW5saW5lIFZNJiBTbG90VmlzaXRvcjo6dm0oKQotewotICAgIHJldHVybiBtX2hlYXAu
dm0oKTsKLX0KLQotaW5saW5lIGNvbnN0IFZNJiBTbG90VmlzaXRvcjo6dm0oKSBjb25zdAotewot
ICAgIHJldHVybiBtX2hlYXAudm0oKTsKLX0KKy8vaW5saW5lIEhlYXAqIFNsb3RWaXNpdG9yOjpo
ZWFwKCkgY29uc3QKKy8veworLy8gICAgcmV0dXJuICZtX2hlYXA7CisvL30KKy8vCisvL2lubGlu
ZSBWTSYgU2xvdFZpc2l0b3I6OnZtKCkKKy8veworLy8gICAgcmV0dXJuIG1faGVhcC52bSgpOwor
Ly99CisvLworLy9pbmxpbmUgY29uc3QgVk0mIFNsb3RWaXNpdG9yOjp2bSgpIGNvbnN0CisvL3sK
Ky8vICAgIHJldHVybiBtX2hlYXAudm0oKTsKKy8vfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5j
PgogSXRlcmF0aW9uU3RhdHVzIFNsb3RWaXNpdG9yOjpmb3JFYWNoTWFya1N0YWNrKGNvbnN0IEZ1
bmMmIGZ1bmMpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvck1h
Y3Jvcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNp
dG9yTWFjcm9zLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
U2xvdFZpc2l0b3JNYWNyb3MuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDExNyBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQor
CituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgQWJzdHJhY3RTbG90VmlzaXRvcjsKK2NsYXNzIEpT
Q2VsbDsKK2NsYXNzIFNsb3RWaXNpdG9yOworCisjZGVmaW5lIERFQ0xBUkVfVU5VU0VEX1NMT1Rf
VklTSVRPUl9TVFJVQ1RfRVhQQU5ERVIyKGNvdW50ZXJfKSBcCisgICAgc3RydWN0IFVudXNlZFNs
b3RWaXNpdG9yU3RydWN0U29XZUNhbkhhdmVBU2VtaWNvbG9uIyNjb3VudGVyXyB7IH0KKworI2Rl
ZmluZSBERUNMQVJFX1VOVVNFRF9TTE9UX1ZJU0lUT1JfU1RSVUNUX0VYUEFOREVSKGNvdW50ZXJf
KSBcCisgICAgREVDTEFSRV9VTlVTRURfU0xPVF9WSVNJVE9SX1NUUlVDVF9FWFBBTkRFUjIoY291
bnRlcl8pCisKKyNkZWZpbmUgREVDTEFSRV9VTlVTRURfU0xPVF9WSVNJVE9SX1NUUlVDVCgpIFwK
KyAgICBERUNMQVJFX1VOVVNFRF9TTE9UX1ZJU0lUT1JfU1RSVUNUX0VYUEFOREVSKF9fQ09VTlRF
Ul9fKQorCisvLyBNYWNyb3MgZm9yIGluc3RhbmNlIGN1c3RvbSB2aXNpdG9yIG1ldGhvZC4KKwor
I2RlZmluZSBERUNMQVJFX0lOU1RBTkNFX1NMT1RfVklTSVRPUl9NRVRIT0RfSU1QTChyZXR1cm5U
eXBlXywgbWV0aG9kTmFtZV8sIHBvc3RNb2RpZmllcl8pIFwKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBWaXNpdG9yPiByZXR1cm5UeXBlXyBtZXRob2ROYW1lXyMjSW1wbChWaXNpdG9yJiB2aXNpdG9y
KTsgXAorICAgIHJldHVyblR5cGVfIG1ldGhvZE5hbWVfKFNsb3RWaXNpdG9yJikgcG9zdE1vZGlm
aWVyXzsgXAorICAgIHJldHVyblR5cGVfIG1ldGhvZE5hbWVfKEFic3RyYWN0U2xvdFZpc2l0b3Im
KSBwb3N0TW9kaWZpZXJfOyBcCisgICAgREVDTEFSRV9VTlVTRURfU0xPVF9WSVNJVE9SX1NUUlVD
VCgpCisKKyNkZWZpbmUgREVDTEFSRV9JTlNUQU5DRV9TTE9UX1ZJU0lUT1JfTUVUSE9EKHJldHVy
blR5cGVfLCBtZXRob2ROYW1lXykgXAorICAgIERFQ0xBUkVfSU5TVEFOQ0VfU0xPVF9WSVNJVE9S
X01FVEhPRF9JTVBMKHJldHVyblR5cGVfLCBtZXRob2ROYW1lXywgKQorCisKKyNkZWZpbmUgREVG
SU5FX0lOU1RBTkNFX1NMT1RfVklTSVRPUl9NRVRIT0QocmV0dXJuVHlwZV8sIGNsYXNzTmFtZV8s
IG1ldGhvZE5hbWVfKSBcCisgICAgcmV0dXJuVHlwZV8gY2xhc3NOYW1lXzo6bWV0aG9kTmFtZV8o
U2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsgbWV0aG9kTmFtZV8jI0ltcGwodmlzaXRvcik7IH0gXAor
ICAgIHJldHVyblR5cGVfIGNsYXNzTmFtZV86Om1ldGhvZE5hbWVfKEFic3RyYWN0U2xvdFZpc2l0
b3ImIHZpc2l0b3IpICB7IG1ldGhvZE5hbWVfIyNJbXBsKHZpc2l0b3IpOyB9IFwKKyAgICBERUNM
QVJFX1VOVVNFRF9TTE9UX1ZJU0lUT1JfU1RSVUNUKCkKKworLy8gTWFjcm9zIGZvciBpbnN0YW5j
ZSB2aXNpdENoaWxkcmVuKCkuCisKKyNkZWZpbmUgREVDTEFSRV9JTlNUQU5DRV9WSVNJVF9DSElM
RFJFTiBcCisgICAgREVDTEFSRV9JTlNUQU5DRV9TTE9UX1ZJU0lUT1JfTUVUSE9EKHZvaWQsIHZp
c2l0Q2hpbGRyZW4pCisKKworI2RlZmluZSBERUZJTkVfSU5TVEFOQ0VfVklTSVRfQ0hJTERSRU4o
Y2xhc3NOYW1lXykgXAorICAgIERFRklORV9JTlNUQU5DRV9TTE9UX1ZJU0lUT1JfTUVUSE9EKHZv
aWQsIGNsYXNzTmFtZV8sIHZpc2l0Q2hpbGRyZW4pCisKKy8vIE1hY3JvcyBmb3Igc3RhdGljIHZp
c2l0Q2hpbGRyZW4oKS4KKworI2RlZmluZSBERUNMQVJFX1ZJU0lUX0NISUxEUkVOX0lNUEwgXAor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW5J
bXBsKEpTQ2VsbCosIFZpc2l0b3ImKQorCisjZGVmaW5lIERFQ0xBUkVfVklTSVRfQ0hJTERSRU4g
XAorICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU5fSU1QTDsgXAorICAgIHN0YXRpYyB2b2lkIHZp
c2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKTsg
XAorICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRv
ciYgdmlzaXRvcikKKworI2RlZmluZSBERUNMQVJFX0VYUE9SVF9WSVNJVF9DSElMRFJFTiBcCisg
ICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTl9JTVBMOyBcCisgICAgSlNfRVhQT1JUX1BSSVZBVEUg
c3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBBYnN0cmFjdFNsb3RWaXNpdG9yJik7
IFwKKyAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2Vs
bCosIFNsb3RWaXNpdG9yJikKKworI2RlZmluZSBERUNMQVJFX0lOTElORV9WSVNJVF9DSElMRFJF
TiBcCisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTl9JTVBMOyBcCisgICAgaW5saW5lIHN0YXRp
YyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgQWJzdHJhY3RTbG90VmlzaXRvciYpOyBcCisg
ICAgaW5saW5lIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3Im
KQorCisjZGVmaW5lIERFQ0xBUkVfVEVNUExBVEVfVklTSVRfQ0hJTERSRU4gXAorICAgIERFQ0xB
UkVfVklTSVRfQ0hJTERSRU4KKworCisjZGVmaW5lIERFRklORV9WSVNJVF9DSElMRFJFTihjbGFz
c05hbWVfKSBcCisgICAgdm9pZCBjbGFzc05hbWVfOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2Vs
bCwgQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikgeyB2aXNpdENoaWxkcmVuSW1wbChjZWxs
LCB2aXNpdG9yKTsgfSBcCisgICAgdm9pZCBjbGFzc05hbWVfOjp2aXNpdENoaWxkcmVuKEpTQ2Vs
bCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsgdmlzaXRDaGlsZHJlbkltcGwoY2VsbCwg
dmlzaXRvcik7IH0gXAorICAgIERFQ0xBUkVfVU5VU0VEX1NMT1RfVklTSVRPUl9TVFJVQ1QoKQor
CisjZGVmaW5lIERFRklORV9FWFBPUlRfVklTSVRfQ0hJTERSRU4oY2xhc3NOYW1lXykgXAorICAg
IEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgY2xhc3NOYW1lXzo6dmlzaXRDaGlsZHJlbihKU0NlbGwq
IGNlbGwsIEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsgdmlzaXRDaGlsZHJlbkltcGwo
Y2VsbCwgdmlzaXRvcik7IH0gXAorICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgY2xhc3NOYW1l
Xzo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKSB7IHZp
c2l0Q2hpbGRyZW5JbXBsKGNlbGwsIHZpc2l0b3IpOyB9IFwKKyAgICBERUNMQVJFX1VOVVNFRF9T
TE9UX1ZJU0lUT1JfU1RSVUNUKCkKKworI2RlZmluZSBERUZJTkVfSU5MSU5FX1ZJU0lUX0NISUxE
UkVOKGNsYXNzTmFtZV8pIFwKKyAgICBpbmxpbmUgdm9pZCBjbGFzc05hbWVfOjp2aXNpdENoaWxk
cmVuKEpTQ2VsbCogY2VsbCwgQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikgeyB2aXNpdENo
aWxkcmVuSW1wbChjZWxsLCB2aXNpdG9yKTsgfSBcCisgICAgaW5saW5lIHZvaWQgY2xhc3NOYW1l
Xzo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKSB7IHZp
c2l0Q2hpbGRyZW5JbXBsKGNlbGwsIHZpc2l0b3IpOyB9IFwKKyAgICBERUNMQVJFX1VOVVNFRF9T
TE9UX1ZJU0lUT1JfU1RSVUNUKCkKKworI2RlZmluZSBERUZJTkVfVEVNUExBVEVfVklTSVRfQ0hJ
TERSRU4odGVtcGxhdGVDbGF1c2VfLCBjbGFzc05hbWVfKSBcCisgICAgdGVtcGxhdGVDbGF1c2Vf
IHZvaWQgY2xhc3NOYW1lXzo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIEFic3RyYWN0U2xv
dFZpc2l0b3ImIHZpc2l0b3IpIHsgdmlzaXRDaGlsZHJlbkltcGwoY2VsbCwgdmlzaXRvcik7IH0g
XAorICAgIHRlbXBsYXRlQ2xhdXNlXyB2b2lkIGNsYXNzTmFtZV86OnZpc2l0Q2hpbGRyZW4oSlND
ZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikgeyB2aXNpdENoaWxkcmVuSW1wbChjZWxs
LCB2aXNpdG9yKTsgfSBcCisgICAgREVDTEFSRV9VTlVTRURfU0xPVF9WSVNJVE9SX1NUUlVDVCgp
CisKK30gLy8gbmFtZXNwYWNlIEpTQworCit1c2luZyBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3I7
Cit1c2luZyBKU0M6OkpTQ2VsbDsKK3VzaW5nIEpTQzo6U2xvdFZpc2l0b3I7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdWJzcGFjZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL1N1YnNwYWNlLmgJKHJldmlzaW9uIDI3MjE5MikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N1YnNwYWNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDYg
KzM0LDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKK2NsYXNzIEFic3RyYWN0U2xvdFZpc2l0b3I7
IC8vIG1sYW0KIGNsYXNzIEFsaWduZWRNZW1vcnlBbGxvY2F0b3I7CiBjbGFzcyBIZWFwQ2VsbFR5
cGU7CiAKQEAgLTg3LDcgKzg4LDcgQEAgcHVibGljOgogICAgIHZvaWQgZm9yRWFjaE1hcmtlZENl
bGwoY29uc3QgRnVuYyYpOwogICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+Ci0gICAg
UmVmPFNoYXJlZFRhc2s8dm9pZChTbG90VmlzaXRvciYpPj4gZm9yRWFjaE1hcmtlZENlbGxJblBh
cmFsbGVsKGNvbnN0IEZ1bmMmKTsKKyAgICBSZWY8U2hhcmVkVGFzazx2b2lkKEFic3RyYWN0U2xv
dFZpc2l0b3ImKT4+IGZvckVhY2hNYXJrZWRDZWxsSW5QYXJhbGxlbChjb25zdCBGdW5jJik7CiAK
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgogICAgIHZvaWQgZm9yRWFjaExpdmVDZWxsKGNv
bnN0IEZ1bmMmKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N1YnNwYWNlSW5s
aW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N1YnNwYWNl
SW5saW5lcy5oCShyZXZpc2lvbiAyNzIxOTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9TdWJzcGFjZUlubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtODYsOSArODYsOSBAQCB2b2lk
IFN1YnNwYWNlOjpmb3JFYWNoTWFya2VkQ2VsbChjb25zdCBGCiB9CiAKIHRlbXBsYXRlPHR5cGVu
YW1lIEZ1bmM+Ci1SZWY8U2hhcmVkVGFzazx2b2lkKFNsb3RWaXNpdG9yJik+PiBTdWJzcGFjZTo6
Zm9yRWFjaE1hcmtlZENlbGxJblBhcmFsbGVsKGNvbnN0IEZ1bmMmIGZ1bmMpCitSZWY8U2hhcmVk
VGFzazx2b2lkKEFic3RyYWN0U2xvdFZpc2l0b3ImKT4+IFN1YnNwYWNlOjpmb3JFYWNoTWFya2Vk
Q2VsbEluUGFyYWxsZWwoY29uc3QgRnVuYyYgZnVuYykKIHsKLSAgICBjbGFzcyBUYXNrIGZpbmFs
IDogcHVibGljIFNoYXJlZFRhc2s8dm9pZChTbG90VmlzaXRvciYpPiB7CisgICAgY2xhc3MgVGFz
ayBmaW5hbCA6IHB1YmxpYyBTaGFyZWRUYXNrPHZvaWQoQWJzdHJhY3RTbG90VmlzaXRvciYpPiB7
CiAgICAgcHVibGljOgogICAgICAgICBUYXNrKFN1YnNwYWNlJiBzdWJzcGFjZSwgY29uc3QgRnVu
YyYgZnVuYykKICAgICAgICAgICAgIDogbV9zdWJzcGFjZShzdWJzcGFjZSkKQEAgLTk3LDcgKzk3
LDcgQEAgUmVmPFNoYXJlZFRhc2s8dm9pZChTbG90VmlzaXRvciYpPj4gU3VicwogICAgICAgICB7
CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIHZvaWQgcnVuKFNsb3RWaXNpdG9yJiB2aXNp
dG9yKSBmaW5hbAorICAgICAgICB2b2lkIHJ1bihBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9y
KSBmaW5hbAogICAgICAgICB7CiAgICAgICAgICAgICB3aGlsZSAoTWFya2VkQmxvY2s6OkhhbmRs
ZSogaGFuZGxlID0gbV9ibG9ja1NvdXJjZS0+cnVuKCkpIHsKICAgICAgICAgICAgICAgICBoYW5k
bGUtPmZvckVhY2hNYXJrZWRDZWxsKApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
VmVyaWZpZXJTbG90VmlzaXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvVmVyaWZpZXJTbG90VmlzaXRvci5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvVmVyaWZpZXJTbG90VmlzaXRvci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwyODUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiVmVyaWZpZXJTbG90VmlzaXRvci5oIgorCisjaW5jbHVkZSAiQ29uc2VydmF0aXZl
Um9vdHMuaCIKKyNpbmNsdWRlICJHQ1NlZ21lbnRlZEFycmF5SW5saW5lcy5oIgorI2luY2x1ZGUg
IkhlYXBDZWxsLmgiCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUgIlZNLmgiCisK
K25hbWVzcGFjZSBKU0MgeworCitWZXJpZmllclNsb3RWaXNpdG9yOjpNYXJrZWRCbG9ja0RhdGE6
Ok1hcmtlZEJsb2NrRGF0YShNYXJrZWRCbG9jayogYmxvY2spCisgICAgOiBtX2Jsb2NrKGJsb2Nr
KQorICAgICwgbV9hdG9tcyhNYXJrZWRCbG9jazo6YXRvbXNQZXJCbG9jaykKK3sKK30KKworVmVy
aWZpZXJTbG90VmlzaXRvcjo6VmVyaWZpZXJTbG90VmlzaXRvcihIZWFwJiBoZWFwKQorICAgIDog
QmFzZShoZWFwKQoreworfQorCitWZXJpZmllclNsb3RWaXNpdG9yOjp+VmVyaWZpZXJTbG90Vmlz
aXRvcigpCit7Cit9CisKK3ZvaWQgVmVyaWZpZXJTbG90VmlzaXRvcjo6YWRkUGFyYWxsZWxDb25z
dHJhaW50VGFzayhSZWZQdHI8U2hhcmVkVGFzazx2b2lkKEFic3RyYWN0U2xvdFZpc2l0b3ImKT4+
IHRhc2spCit7CisvLyAgICBSRUxFQVNFX0FTU0VSVChtX2N1cnJlbnRTb2x2ZXIpOworLy8gICAg
UkVMRUFTRV9BU1NFUlQobV9jdXJyZW50Q29uc3RyYWludCk7CisvLyAgICBSRUxFQVNFX0FTU0VS
VCh0YXNrKTsKKy8vCisvLyAgICBtX2N1cnJlbnRTb2x2ZXItPmFkZFBhcmFsbGVsVGFzayh0YXNr
LCAqbV9jdXJyZW50Q29uc3RyYWludCk7CisKKyAgICAvLyBGSVhNRQorICAgIFVOVVNFRF9QQVJB
TSh0YXNrKTsKKyAgICBib29sIGhlbHAgPSBmYWxzZTsKKyAgICBSRUxFQVNFX0FTU0VSVChoZWxw
KTsKK30KKwordm9pZCBWZXJpZmllclNsb3RWaXNpdG9yOjphcHBlbmRfQ29uc2VydmF0aXZlUm9v
dHMoY29uc3QgQ29uc2VydmF0aXZlUm9vdHMmIGNvbnNlcnZhdGl2ZVJvb3RzKQoreworICAgIGF1
dG8gYXBwZW5kSlNDZWxsT3JBdXhpbGlhcnkgPSBbJl0gKEhlYXBDZWxsKiBoZWFwQ2VsbCkKKyAg
ICB7CisgICAgICAgIGlmICghaGVhcENlbGwpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAg
ICAgaWYgKHRlc3RBbmRTZXRNYXJrZWQoaGVhcENlbGwpKQorICAgICAgICAgICAgcmV0dXJuOwor
CisgICAgICAgIHN3aXRjaCAoaGVhcENlbGwtPmNlbGxLaW5kKCkpIHsKKyAgICAgICAgY2FzZSBI
ZWFwQ2VsbDo6SlNDZWxsOgorICAgICAgICBjYXNlIEhlYXBDZWxsOjpKU0NlbGxXaXRoSW5kZXhp
bmdIZWFkZXI6IHsKKyAgICAgICAgICAgIEpTQ2VsbCoganNDZWxsID0gc3RhdGljX2Nhc3Q8SlND
ZWxsKj4oaGVhcENlbGwpOworICAgICAgICAgICAgYXBwZW5kVG9NYXJrU3RhY2soanNDZWxsKTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgSGVhcENlbGw6
OkF1eGlsaWFyeToKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH07CisKKyAg
ICBIZWFwQ2VsbCoqIHJvb3RzID0gY29uc2VydmF0aXZlUm9vdHMucm9vdHMoKTsKKyAgICBzaXpl
X3Qgc2l6ZSA9IGNvbnNlcnZhdGl2ZVJvb3RzLnNpemUoKTsKKyAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IHNpemU7ICsraSkKKyAgICAgICAgYXBwZW5kSlNDZWxsT3JBdXhpbGlhcnkocm9vdHNb
aV0pOworfQorCit2b2lkIFZlcmlmaWVyU2xvdFZpc2l0b3I6OmFwcGVuZFRvTWFya1N0YWNrKEpT
Q2VsbCogY2VsbCkKK3sKKy8vICAgIEFTU0VSVChtX2hlYXAuaXNNYXJrZWQoY2VsbCkpOyAvLyBt
bGFtIFRFU1Qgc2FuaXR5IGNoZWNrLgorICAgIEFTU0VSVCghY2VsbC0+aXNaYXBwZWQoKSk7Cisg
ICAgbV9jb2xsZWN0b3JTdGFjay5hcHBlbmQoY2VsbCk7Cit9CisKK3ZvaWQgVmVyaWZpZXJTbG90
VmlzaXRvcjo6YXBwZW5kVW5iYXJyaWVyZWRJbXBsKEpTQ2VsbCogY2VsbCkKK3sKKyAgICBpZiAo
VU5MSUtFTFkoY2VsbC0+aXNQcmVjaXNlQWxsb2NhdGlvbigpKSkgeworICAgICAgICBpZiAoTElL
RUxZKGlzTWFya2VkKGNlbGwtPnByZWNpc2VBbGxvY2F0aW9uKCksIGNlbGwpKSkKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICB9IGVsc2UgeworICAgICAgICBNYXJrZWRCbG9jayYgYmxvY2sgPSBj
ZWxsLT5tYXJrZWRCbG9jaygpOworICAgICAgICBpZiAoTElLRUxZKGlzTWFya2VkKGJsb2NrLCBj
ZWxsKSkpCisgICAgICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgYXBwZW5kU2xvdyhjZWxs
KTsKK30KKwordm9pZCBWZXJpZmllclNsb3RWaXNpdG9yOjphcHBlbmRIaWRkZW5VbmJhcnJpZXJl
ZEltcGwoSlNDZWxsKiBjZWxsKQoreworICAgIGFwcGVuZFVuYmFycmllcmVkSW1wbChjZWxsKTsK
K30KKworYm9vbCBWZXJpZmllclNsb3RWaXNpdG9yOjphZGRPcGFxdWVSb290KHZvaWQqIHB0cikK
K3sKKyAgICBpZiAoIXB0cikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghbV9vcGFx
dWVSb290cy5hZGQocHRyKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiB0cnVl
OworfQorCitib29sIFZlcmlmaWVyU2xvdFZpc2l0b3I6OmNvbnRhaW5zT3BhcXVlUm9vdCh2b2lk
KiBwdHIpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fb3BhcXVlUm9vdHMuY29udGFpbnMocHRyKTsK
K30KKwordm9pZCBWZXJpZmllclNsb3RWaXNpdG9yOjpkcmFpbigpCit7CisgICAgUkVMRUFTRV9B
U1NFUlQobV9tdXRhdG9yU3RhY2suaXNFbXB0eSgpKTsKKworICAgIE1hcmtTdGFja0FycmF5JiBz
dGFjayA9IG1fY29sbGVjdG9yU3RhY2s7CisgICAgaWYgKHN0YWNrLmlzRW1wdHkoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgc3RhY2sucmVmaWxsKCk7CisgICAgd2hpbGUgKHN0YWNrLmNhblJl
bW92ZUxhc3QoKSkgeworICAgICAgICB2aXNpdENoaWxkcmVuKHN0YWNrLnJlbW92ZUxhc3QoKSk7
CisgICAgfQorfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgordm9pZCBWZXJpZmllclNs
b3RWaXNpdG9yOjpmb3JFYWNoQ2VsbChjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQoreworICAgIGZv
ckVhY2hQcmVjaXNlQWxsb2NhdGlvbihmdW5jdG9yKTsKKyAgICBmb3JFYWNoTWFya2VkQmxvY2tD
ZWxsKGZ1bmN0b3IpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgordm9pZCBWZXJp
ZmllclNsb3RWaXNpdG9yOjpmb3JFYWNoUHJlY2lzZUFsbG9jYXRpb24oY29uc3QgRnVuY3RvciYg
ZnVuYykKK3sKKyAgICBmb3IgKGF1dG8mIGVudHJ5IDogbV9wcmVjaXNlQWxsb2NhdGlvbk1hcCkg
eworICAgICAgICBQcmVjaXNlQWxsb2NhdGlvbiogYWxsb2NhdGlvbiA9IGVudHJ5LnZhbHVlOwor
ICAgICAgICBmdW5jKGFsbG9jYXRpb24tPmNlbGwoKSk7CisgICAgfQorfQorCit0ZW1wbGF0ZTx0
eXBlbmFtZSBGdW5jdG9yPgordm9pZCBWZXJpZmllclNsb3RWaXNpdG9yOjpmb3JFYWNoTWFya2Vk
QmxvY2tDZWxsKGNvbnN0IEZ1bmN0b3ImIGZ1bmMpCit7CisgICAgZm9yIChhdXRvJiBlbnRyeSA6
IG1fbWFya2VkQmxvY2tNYXApIHsKKyAgICAgICAgYXV0byYgZGF0YSA9IGVudHJ5LnZhbHVlOwor
ICAgICAgICBNYXJrZWRCbG9jayogYmxvY2sgPSBkYXRhLT5ibG9jaygpOworICAgICAgICBjb25z
dCBCaXRWZWN0b3ImIGF0b21zID0gIGRhdGEtPmF0b21zKCk7CisgICAgICAgIGZvciAoYXV0byBh
dG9tTnVtYmVyIDogYXRvbXMpIHsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGF0b21zLnF1
aWNrR2V0KGF0b21OdW1iZXIpKTsgLy8gbWxhbSBURVNUIFNhbml0eSBDaGVjaworICAgICAgICAg
ICAgZnVuYyhiaXR3aXNlX2Nhc3Q8SGVhcENlbGwqPihibG9jay0+aGFuZGxlKCkuYXRvbUF0KGF0
b21OdW1iZXIpKSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK2Jvb2wgVmVyaWZpZXJTbG90Vmlz
aXRvcjo6aXNGaXJzdFZpc2l0KCkgY29uc3QKK3sKKyAgICAvLyBXZSBuZWVkIHRvIGFsd2F5cyBy
ZXR1cm4gZmFsc2UgYmVjYXVzZSB0aGlzIGlzIHVzZWQgdG8gYWdlZCBhbiBVbmxpbmtlZENvZGVC
bG9jaworICAgIC8vIGluIHRoZSByZWd1bGFyIEdDOiBzZWUgVW5saW5rZWRDb2RlQmxvY2s6OnZp
c2l0Q2hpbGRyZW5JbXBsKCkuIFdlIHNob3VsZCBub3QKKyAgICAvLyBzaG91bGQgZG8gdGhhdCBh
Z2luZyBhY3Rpb24uCisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFZlcmlmaWVyU2xvdFZp
c2l0b3I6OmlzTWFya2VkKGNvbnN0IHZvaWQqIHJhd0NlbGwpIGNvbnN0Cit7CisgICAgSGVhcENl
bGwqIGNlbGwgPSBiaXR3aXNlX2Nhc3Q8SGVhcENlbGwqPihyYXdDZWxsKTsKKyAgICBpZiAoY2Vs
bC0+aXNQcmVjaXNlQWxsb2NhdGlvbigpKQorICAgICAgICByZXR1cm4gaXNNYXJrZWQoY2VsbC0+
cHJlY2lzZUFsbG9jYXRpb24oKSwgY2VsbCk7CisgICAgcmV0dXJuIGlzTWFya2VkKGNlbGwtPm1h
cmtlZEJsb2NrKCksIGNlbGwpOworfQorCitib29sIFZlcmlmaWVyU2xvdFZpc2l0b3I6OmlzTWFy
a2VkKFByZWNpc2VBbGxvY2F0aW9uJiBhbGxvY2F0aW9uLCBIZWFwQ2VsbCopIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1fcHJlY2lzZUFsbG9jYXRpb25NYXAuY29udGFpbnMoJmFsbG9jYXRpb24pOwor
fQorCitib29sIFZlcmlmaWVyU2xvdFZpc2l0b3I6OmlzTWFya2VkKE1hcmtlZEJsb2NrJiBibG9j
aywgSGVhcENlbGwqIGNlbGwpIGNvbnN0Cit7CisgICAgYXV0byBlbnRyeSA9IG1fbWFya2VkQmxv
Y2tNYXAuZmluZCgmYmxvY2spOworICAgIGlmIChlbnRyeSA9PSBtX21hcmtlZEJsb2NrTWFwLmVu
ZCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBhdXRvJiBkYXRhID0gZW50cnktPnZh
bHVlOworICAgIHVuc2lnbmVkIGF0b21OdW1iZXIgPSBibG9jay5hdG9tTnVtYmVyKGNlbGwpOwor
ICAgIHJldHVybiBkYXRhLT5pc01hcmtlZChhdG9tTnVtYmVyKTsKK30KKwordm9pZCBWZXJpZmll
clNsb3RWaXNpdG9yOjptYXJrQXV4aWxpYXJ5KGNvbnN0IHZvaWQqIGJhc2UpCit7CisgICAgSGVh
cENlbGwqIGNlbGwgPSBiaXR3aXNlX2Nhc3Q8SGVhcENlbGwqPihiYXNlKTsKKworICAgIEFTU0VS
VChjZWxsLT5oZWFwKCkgPT0gaGVhcCgpKTsKKyAgICB0ZXN0QW5kU2V0TWFya2VkKGNlbGwpOwor
fQorCitib29sIFZlcmlmaWVyU2xvdFZpc2l0b3I6Om11dGF0b3JJc1N0b3BwZWQoKSBjb25zdAor
eworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFZlcmlmaWVyU2xvdFZpc2l0b3I6OnRlc3RB
bmRTZXRNYXJrZWQoY29uc3Qgdm9pZCogcmF3Q2VsbCkKK3sKKyAgICBIZWFwQ2VsbCogY2VsbCA9
IGJpdHdpc2VfY2FzdDxIZWFwQ2VsbCo+KHJhd0NlbGwpOworICAgIGlmIChjZWxsLT5pc1ByZWNp
c2VBbGxvY2F0aW9uKCkpCisgICAgICAgIHJldHVybiB0ZXN0QW5kU2V0TWFya2VkKGNlbGwtPnBy
ZWNpc2VBbGxvY2F0aW9uKCkpOworICAgIHJldHVybiB0ZXN0QW5kU2V0TWFya2VkKGNlbGwtPm1h
cmtlZEJsb2NrKCksIGNlbGwpOworfQorCitib29sIFZlcmlmaWVyU2xvdFZpc2l0b3I6OnRlc3RB
bmRTZXRNYXJrZWQoUHJlY2lzZUFsbG9jYXRpb24mIGFsbG9jYXRpb24pCit7CisgICAgYXV0byBy
ZXN1bHQgPSBtX3ByZWNpc2VBbGxvY2F0aW9uTWFwLmFkZCgmYWxsb2NhdGlvbiwgJmFsbG9jYXRp
b24pOworICAgIHJldHVybiByZXN1bHQuaXNOZXdFbnRyeTsKK30KKworYm9vbCBWZXJpZmllclNs
b3RWaXNpdG9yOjp0ZXN0QW5kU2V0TWFya2VkKE1hcmtlZEJsb2NrJiBibG9jaywgSGVhcENlbGwq
IGNlbGwpCit7CisgICAgc3RkOjp1bmlxdWVfcHRyPE1hcmtlZEJsb2NrRGF0YT4mIGRhdGEgPSBt
X21hcmtlZEJsb2NrTWFwLmFkZCgmYmxvY2ssIG51bGxwdHIpLml0ZXJhdG9yLT52YWx1ZTsKKyAg
ICBpZiAoIWRhdGEpCisgICAgICAgIGRhdGEgPSBtYWtlVW5pcXVlPE1hcmtlZEJsb2NrRGF0YT4o
JmJsb2NrKTsKKworICAgIHVuc2lnbmVkIGF0b21OdW1iZXIgPSBibG9jay5hdG9tTnVtYmVyKGNl
bGwpOworICAgIHJldHVybiBkYXRhLT50ZXN0QW5kU2V0TWFya2VkKGF0b21OdW1iZXIpOworfQor
Cit2b2lkIFZlcmlmaWVyU2xvdFZpc2l0b3I6OnNldE1hcmtlZEFuZEFwcGVuZFRvTWFya1N0YWNr
KEpTQ2VsbCogY2VsbCkKK3sKKyAgICBpZiAodGVzdEFuZFNldE1hcmtlZChjZWxsKSkKKyAgICAg
ICAgcmV0dXJuOworICAgIGFwcGVuZFRvTWFya1N0YWNrKGNlbGwpOworfQorCit2b2lkIFZlcmlm
aWVyU2xvdFZpc2l0b3I6OnZpc2l0QXNDb25zdHJhaW50KGNvbnN0IEpTQ2VsbCogY2VsbCkKK3sK
KyAgICB2aXNpdENoaWxkcmVuKGNlbGwpOworfQorCit2b2lkIFZlcmlmaWVyU2xvdFZpc2l0b3I6
OnZpc2l0Q2hpbGRyZW4oY29uc3QgSlNDZWxsKiBjZWxsKQoreworICAgIFJFTEVBU0VfQVNTRVJU
KGlzTWFya2VkKGNlbGwpKTsgLy8gbWxhbSBNQUtFIGludG8gQVNTRVJUCisgICAgCisgICAgc3dp
dGNoIChjZWxsLT50eXBlKCkpIHsKKyAgICBjYXNlIFN0cmluZ1R5cGU6CisgICAgICAgIEpTU3Ry
aW5nOjp2aXNpdENoaWxkcmVuKGNvbnN0X2Nhc3Q8SlNDZWxsKj4oY2VsbCksICp0aGlzKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgICAgIAorICAgIGNhc2UgRmluYWxPYmplY3RUeXBlOgorICAgICAg
ICBKU0ZpbmFsT2JqZWN0Ojp2aXNpdENoaWxkcmVuKGNvbnN0X2Nhc3Q8SlNDZWxsKj4oY2VsbCks
ICp0aGlzKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEFycmF5VHlwZToKKyAgICAgICAg
SlNBcnJheTo6dmlzaXRDaGlsZHJlbihjb25zdF9jYXN0PEpTQ2VsbCo+KGNlbGwpLCAqdGhpcyk7
CisgICAgICAgIGJyZWFrOworICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICAvLyBGSVhN
RTogVGhpcyBjb3VsZCBiZSBzbyBtdWNoIGJldHRlci4KKyAgICAgICAgLy8gaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MjQ2MgorICAgICAgICBjZWxsLT5tZXRob2RU
YWJsZSh2bSgpKS0+dmlzaXRDaGlsZHJlbihjb25zdF9jYXN0PEpTQ2VsbCo+KGNlbGwpLCAqdGhp
cyk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9WZXJpZmllclNsb3RWaXNpdG9yLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVmVyaWZpZXJTbG90VmlzaXRvci5o
CShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1ZlcmlmaWVyU2xv
dFZpc2l0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEyNyBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVk
ZSAiQWJzdHJhY3RTbG90VmlzaXRvci5oIgorI2luY2x1ZGUgIkpTQ0pTVmFsdWUuaCIKKyNpbmNs
dWRlICJWaXNpdFJhY2VLZXkuaCIKKyNpbmNsdWRlICJXZWFrLmgiCisjaW5jbHVkZSA8bWVtb3J5
PgorI2luY2x1ZGUgPHd0Zi9CaXRWZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvQ29uY3VycmVudFB0
ckhhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgorI2luY2x1ZGUgPHd0Zi9I
YXNoTWFwLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBDb25zZXJ2YXRpdmVSb290czsK
K2NsYXNzIEhlYXA7CitjbGFzcyBIZWFwQ2VsbDsKK2NsYXNzIFByZWNpc2VBbGxvY2F0aW9uOwor
Y2xhc3MgTWFya2VkQmxvY2s7CisKK2NsYXNzIFZlcmlmaWVyU2xvdFZpc2l0b3IgOiBwdWJsaWMg
QWJzdHJhY3RTbG90VmlzaXRvciB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoVmVyaWZpZXJT
bG90VmlzaXRvcik7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CisgICAgdXNpbmcgQmFz
ZSA9IEFic3RyYWN0U2xvdFZpc2l0b3I7CitwdWJsaWM6CisKKyAgICBWZXJpZmllclNsb3RWaXNp
dG9yKEhlYXAmKTsKKyAgICB+VmVyaWZpZXJTbG90VmlzaXRvcigpOworCisgICAgdm9pZCBhcHBl
bmRfQ29uc2VydmF0aXZlUm9vdHMoY29uc3QgQ29uc2VydmF0aXZlUm9vdHMmKSBmaW5hbDsKKyAg
ICB2b2lkIGFwcGVuZFVuYmFycmllcmVkSW1wbChKU0NlbGwqKSBmaW5hbDsKKyAgICB2b2lkIGFw
cGVuZEhpZGRlblVuYmFycmllcmVkSW1wbChKU0NlbGwqKSBmaW5hbDsKKworICAgIGJvb2wgYWRk
T3BhcXVlUm9vdCh2b2lkKikgZmluYWw7IC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgcm9vdCB3YXMg
bmV3LgorICAgIGJvb2wgY29udGFpbnNPcGFxdWVSb290KHZvaWQqKSBjb25zdCBmaW5hbDsKKwor
ICAgIGJvb2wgaXNGaXJzdFZpc2l0KCkgY29uc3QgZmluYWw7CisgICAgYm9vbCBpc01hcmtlZChj
b25zdCB2b2lkKikgY29uc3QgZmluYWw7CisgICAgYm9vbCBpc01hcmtlZChNYXJrZWRCbG9jayYs
IEhlYXBDZWxsKikgY29uc3QgZmluYWw7CisgICAgYm9vbCBpc01hcmtlZChQcmVjaXNlQWxsb2Nh
dGlvbiYsIEhlYXBDZWxsKikgY29uc3QgZmluYWw7CisKKyAgICB2b2lkIG1hcmtBdXhpbGlhcnko
Y29uc3Qgdm9pZCopIGZpbmFsOworCisgICAgdm9pZCByZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQo
c2l6ZV90KSBmaW5hbCB7IH0KKyNpZiBFTkFCTEUoUkVTT1VSQ0VfVVNBR0UpCisgICAgdm9pZCBy
ZXBvcnRFeHRlcm5hbE1lbW9yeVZpc2l0ZWQoc2l6ZV90KSBmaW5hbCB7IH0KKyNlbmRpZgorCisg
ICAgYm9vbCBtdXRhdG9ySXNTdG9wcGVkKCkgY29uc3QgZmluYWw7CisKKyAgICB2b2lkIGRpZFJh
Y2UoY29uc3QgVmlzaXRSYWNlS2V5JikgZmluYWwgeyB9CisgICAgdm9pZCBkdW1wKFByaW50U3Ry
ZWFtJikgY29uc3QgZmluYWwgeyB9CisKKyAgICB2b2lkIHNldEN1cnJlbnRDb25zdHJhaW50KE1h
cmtpbmdDb25zdHJhaW50KikgZmluYWwgeyB9CisgICAgdm9pZCBzZXRDdXJyZW50Q29uc3RyYWlu
dFNvbHZlcihNYXJraW5nQ29uc3RyYWludFNvbHZlciopIGZpbmFsIHsgfQorICAgIHZvaWQgdmlz
aXRBc0NvbnN0cmFpbnQoY29uc3QgSlNDZWxsKikgZmluYWw7CisKKyAgICB2b2lkIGRyYWluKCk7
CisKKyAgICB2b2lkIGFkZFBhcmFsbGVsQ29uc3RyYWludFRhc2soUmVmUHRyPFNoYXJlZFRhc2s8
dm9pZChBYnN0cmFjdFNsb3RWaXNpdG9yJik+PikgZmluYWw7CisKK3ByaXZhdGU6CisgICAgY2xh
c3MgTWFya2VkQmxvY2tEYXRhIHsKKyAgICAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Cisg
ICAgICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKE1hcmtlZEJsb2NrRGF0YSk7CisgICAgcHVibGlj
OgorICAgICAgICBNYXJrZWRCbG9ja0RhdGEoTWFya2VkQmxvY2sqKTsKKworICAgICAgICBNYXJr
ZWRCbG9jayogYmxvY2soKSBjb25zdCB7IHJldHVybiBtX2Jsb2NrOyB9CisgICAgICAgIGNvbnN0
IEJpdFZlY3RvciYgYXRvbXMoKSBjb25zdCB7IHJldHVybiBtX2F0b21zOyB9CisKKyAgICAgICAg
Ym9vbCBpc01hcmtlZCh1bnNpZ25lZCBhdG9tTnVtYmVyKSB7IHJldHVybiBtX2F0b21zLnF1aWNr
R2V0KGF0b21OdW1iZXIpOyB9CisgICAgICAgIGJvb2wgdGVzdEFuZFNldE1hcmtlZCh1bnNpZ25l
ZCBhdG9tTnVtYmVyKSB7IHJldHVybiBtX2F0b21zLnF1aWNrU2V0KGF0b21OdW1iZXIpOyB9Cisg
ICAgcHJpdmF0ZToKKyAgICAgICAgTWFya2VkQmxvY2sqIG1fYmxvY2sgeyBudWxscHRyIH07Cisg
ICAgICAgIEJpdFZlY3RvciBtX2F0b21zOworICAgIH07CisKKyAgICB1c2luZyBQcmVjaXNlQWxs
b2NhdGlvbk1hcCA9IEhhc2hNYXA8UHJlY2lzZUFsbG9jYXRpb24qLCBQcmVjaXNlQWxsb2NhdGlv
bio+OworICAgIHVzaW5nIE1hcmtlZEJsb2NrTWFwID0gSGFzaE1hcDxNYXJrZWRCbG9jayosIHN0
ZDo6dW5pcXVlX3B0cjxNYXJrZWRCbG9ja0RhdGE+PjsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1l
IEZ1bmN0b3I+IHZvaWQgZm9yRWFjaENlbGwoY29uc3QgRnVuY3RvciYpOworICAgIHRlbXBsYXRl
PHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaFByZWNpc2VBbGxvY2F0aW9uKGNvbnN0IEZ1
bmN0b3ImKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hNYXJr
ZWRCbG9ja0NlbGwoY29uc3QgRnVuY3RvciYpOworCisgICAgdm9pZCBhcHBlbmRUb01hcmtTdGFj
ayhKU0NlbGwqKTsKKyAgICB2b2lkIGFwcGVuZFNsb3coSlNDZWxsKiBjZWxsKSB7IHNldE1hcmtl
ZEFuZEFwcGVuZFRvTWFya1N0YWNrKGNlbGwpOyB9CisKKyAgICBib29sIHRlc3RBbmRTZXRNYXJr
ZWQoY29uc3Qgdm9pZCogcmF3Q2VsbCk7CisgICAgYm9vbCB0ZXN0QW5kU2V0TWFya2VkKFByZWNp
c2VBbGxvY2F0aW9uJik7CisgICAgYm9vbCB0ZXN0QW5kU2V0TWFya2VkKE1hcmtlZEJsb2NrJiwg
SGVhcENlbGwqKTsKKworICAgIHZvaWQgc2V0TWFya2VkQW5kQXBwZW5kVG9NYXJrU3RhY2soSlND
ZWxsKik7CisKKyAgICB2b2lkIHZpc2l0Q2hpbGRyZW4oY29uc3QgSlNDZWxsKik7CisKKyAgICBQ
cmVjaXNlQWxsb2NhdGlvbk1hcCBtX3ByZWNpc2VBbGxvY2F0aW9uTWFwOworICAgIE1hcmtlZEJs
b2NrTWFwIG1fbWFya2VkQmxvY2tNYXA7CisgICAgQ29uY3VycmVudFB0ckhhc2hTZXQgbV9vcGFx
dWVSb290czsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvVmlzaXRDb3VudGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvVmlzaXRDb3VudGVyLmgJKHJldmlzaW9uIDI3MjE5MikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL1Zpc2l0Q291bnRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw3
ICsyNSw3IEBACiAKICNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSAiU2xvdFZpc2l0b3IuaCIKKyNp
bmNsdWRlICJBYnN0cmFjdFNsb3RWaXNpdG9yLmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC0z
MywxMyArMzMsMTMgQEAgY2xhc3MgVmlzaXRDb3VudGVyIHsKIHB1YmxpYzoKICAgICBWaXNpdENv
dW50ZXIoKSB7IH0KICAgICAKLSAgICBWaXNpdENvdW50ZXIoU2xvdFZpc2l0b3ImIHZpc2l0b3Ip
CisgICAgVmlzaXRDb3VudGVyKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiAgICAgICAg
IDogbV92aXNpdG9yKCZ2aXNpdG9yKQogICAgICAgICAsIG1faW5pdGlhbFZpc2l0Q291bnQodmlz
aXRvci52aXNpdENvdW50KCkpCiAgICAgewogICAgIH0KICAgICAKLSAgICBTbG90VmlzaXRvciYg
dmlzaXRvcigpIGNvbnN0IHsgcmV0dXJuICptX3Zpc2l0b3I7IH0KKyAgICBBYnN0cmFjdFNsb3RW
aXNpdG9yJiB2aXNpdG9yKCkgY29uc3QgeyByZXR1cm4gKm1fdmlzaXRvcjsgfQogICAgIAogICAg
IHNpemVfdCB2aXNpdENvdW50KCkgY29uc3QKICAgICB7CkBAIC00Nyw3ICs0Nyw3IEBAIHB1Ymxp
YzoKICAgICB9CiAgICAgCiBwcml2YXRlOgotICAgIFNsb3RWaXNpdG9yKiBtX3Zpc2l0b3IgeyBu
dWxscHRyIH07CisgICAgQWJzdHJhY3RTbG90VmlzaXRvciogbV92aXNpdG9yIHsgbnVsbHB0ciB9
OwogICAgIHNpemVfdCBtX2luaXRpYWxWaXNpdENvdW50IHsgMCB9OwogfTsKIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha0Jsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrQmxvY2suY3BwCShyZXZpc2lvbiAyNzIxOTIpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrQmxvY2suY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC05OCwxMiArOTgsMTMgQEAgdm9pZCBXZWFrQmxvY2s6OnN3ZWVwKCkKICAgICBBU1NFUlQo
IW1fc3dlZXBSZXN1bHQuaXNOdWxsKCkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBDb250YWlu
ZXJUeXBlPgotdm9pZCBXZWFrQmxvY2s6OnNwZWNpYWxpemVkVmlzaXQoQ29udGFpbmVyVHlwZSYg
Y29udGFpbmVyLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIENvbnRh
aW5lclR5cGUsIHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFdlYWtCbG9jazo6c3BlY2lhbGl6ZWRW
aXNpdChDb250YWluZXJUeXBlJiBjb250YWluZXIsIFZpc2l0b3ImIHZpc2l0b3IpCiB7Ci0gICAg
SGVhcFZlcnNpb24gbWFya2luZ1ZlcnNpb24gPSB2aXNpdG9yLm1hcmtpbmdWZXJzaW9uKCk7Cisv
LyAgICBIZWFwVmVyc2lvbiBtYXJraW5nVmVyc2lvbiA9IHZpc2l0b3IubWFya2luZ1ZlcnNpb24o
KTsKIAogICAgIHNpemVfdCBjb3VudCA9IHdlYWtJbXBsQ291bnQoKTsKKyAgICBIZWFwQW5hbHl6
ZXIqIGhlYXBBbmFseXplciA9IHZpc2l0b3Iudm0oKS5hY3RpdmVIZWFwQW5hbHl6ZXIoKTsKICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKICAgICAgICAgV2Vha0ltcGwq
IHdlYWtJbXBsID0gJndlYWtJbXBscygpW2ldOwogICAgICAgICBpZiAod2Vha0ltcGwtPnN0YXRl
KCkgIT0gV2Vha0ltcGw6OkxpdmUpCkBAIC0xMTQsMTIgKzExNSwxMyBAQCB2b2lkIFdlYWtCbG9j
azo6c3BlY2lhbGl6ZWRWaXNpdChDb250YWluCiAgICAgICAgICAgICBjb250aW51ZTsKIAogICAg
ICAgICBKU1ZhbHVlIGpzVmFsdWUgPSB3ZWFrSW1wbC0+anNWYWx1ZSgpOwotICAgICAgICBpZiAo
Y29udGFpbmVyLmlzTWFya2VkKG1hcmtpbmdWZXJzaW9uLCBqc1ZhbHVlLmFzQ2VsbCgpKSkKKy8v
ICAgICAgICBpZiAoY29udGFpbmVyLmlzTWFya2VkKG1hcmtpbmdWZXJzaW9uLCBqc1ZhbHVlLmFz
Q2VsbCgpKSkKKyAgICAgICAgaWYgKHZpc2l0b3IuaXNNYXJrZWQoY29udGFpbmVyLCBqc1ZhbHVl
LmFzQ2VsbCgpKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAKICAgICAgICAgY29u
c3QgY2hhciogcmVhc29uID0gIiI7CiAgICAgICAgIGNvbnN0IGNoYXIqKiByZWFzb25QdHIgPSBu
dWxscHRyOwotICAgICAgICBpZiAoVU5MSUtFTFkodmlzaXRvci5pc0FuYWx5emluZ0hlYXAoKSkp
CisgICAgICAgIGlmIChVTkxJS0VMWShoZWFwQW5hbHl6ZXIpKQogICAgICAgICAgICAgcmVhc29u
UHRyID0gJnJlYXNvbjsKIAogICAgICAgICBpZiAoIXdlYWtIYW5kbGVPd25lci0+aXNSZWFjaGFi
bGVGcm9tT3BhcXVlUm9vdHMoSGFuZGxlPFVua25vd24+Ojp3cmFwU2xvdCgmY29uc3RfY2FzdDxK
U1ZhbHVlJj4oanNWYWx1ZSkpLCB3ZWFrSW1wbC0+Y29udGV4dCgpLCB2aXNpdG9yLCByZWFzb25Q
dHIpKQpAQCAtMTI3LDE0ICsxMjksMTYgQEAgdm9pZCBXZWFrQmxvY2s6OnNwZWNpYWxpemVkVmlz
aXQoQ29udGFpbgogCiAgICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQoanNWYWx1ZSk7
CiAKLSAgICAgICAgaWYgKFVOTElLRUxZKHZpc2l0b3IuaXNBbmFseXppbmdIZWFwKCkpKSB7Cisg
ICAgICAgIGlmIChVTkxJS0VMWShoZWFwQW5hbHl6ZXIpKSB7CiAgICAgICAgICAgICBpZiAoanNW
YWx1ZS5pc0NlbGwoKSkKLSAgICAgICAgICAgICAgICB2aXNpdG9yLmhlYXBBbmFseXplcigpLT5z
ZXRPcGFxdWVSb290UmVhY2hhYmlsaXR5UmVhc29uRm9yQ2VsbChqc1ZhbHVlLmFzQ2VsbCgpLCAq
cmVhc29uUHRyKTsKKyAgICAgICAgICAgICAgICBoZWFwQW5hbHl6ZXItPnNldE9wYXF1ZVJvb3RS
ZWFjaGFiaWxpdHlSZWFzb25Gb3JDZWxsKGpzVmFsdWUuYXNDZWxsKCksICpyZWFzb25QdHIpOwog
ICAgICAgICB9CiAgICAgfQogfQogCi12b2lkIFdlYWtCbG9jazo6dmlzaXQoU2xvdFZpc2l0b3Im
IHZpc2l0b3IpCisvL3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+CisvL3ZvaWQgV2Vha0Jsb2Nr
Ojp2aXNpdChWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBXZWFrQmxvY2s6OnZpc2l0MShBYnN0cmFj
dFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIC8vIElmIGEgYmxvY2sgaXMgY29tcGxldGVs
eSBlbXB0eSwgYSB2aXNpdCB3b24ndCBoYXZlIGFueSBlZmZlY3QuCiAgICAgaWYgKGlzRW1wdHko
KSkKQEAgLTE0OSw2ICsxNTMsOSBAQCB2b2lkIFdlYWtCbG9jazo6dmlzaXQoU2xvdFZpc2l0b3Im
IHZpc2l0CiAgICAgICAgIHNwZWNpYWxpemVkVmlzaXQobV9jb250YWluZXIubWFya2VkQmxvY2so
KSwgdmlzaXRvcik7CiB9CiAKKy8vdGVtcGxhdGUgdm9pZCBXZWFrQmxvY2s6OnZpc2l0KFNsb3RW
aXNpdG9yJik7CisvL3RlbXBsYXRlIHZvaWQgV2Vha0Jsb2NrOjp2aXNpdChWZXJpZmllclNsb3RW
aXNpdG9yJik7CisKIHZvaWQgV2Vha0Jsb2NrOjpyZWFwKCkKIHsKICAgICAvLyBJZiBhIGJsb2Nr
IGlzIGNvbXBsZXRlbHkgZW1wdHksIGEgcmVhcGluZyB3b24ndCBoYXZlIGFueSBlZmZlY3QuCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrQmxvY2suaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrQmxvY2suaAkocmV2aXNpb24gMjcyMTky
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha0Jsb2NrLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTMyLDggKzMyLDkgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKK2NsYXNzIEFic3RyYWN0
U2xvdFZpc2l0b3I7CiBjbGFzcyBIZWFwOwotY2xhc3MgU2xvdFZpc2l0b3I7CisvL2NsYXNzIFNs
b3RWaXNpdG9yOwogCiBERUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihXZWFr
QmxvY2spOwogCkBAIC02NSw3ICs2Niw4IEBAIHB1YmxpYzoKICAgICB2b2lkIHN3ZWVwKCk7CiAg
ICAgU3dlZXBSZXN1bHQgdGFrZVN3ZWVwUmVzdWx0KCk7CiAKLSAgICB2b2lkIHZpc2l0KFNsb3RW
aXNpdG9yJik7CisvLyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIHZpc2l0KFZp
c2l0b3ImKTsKKyAgICB2b2lkIHZpc2l0MShBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAKICAgICB2
b2lkIHJlYXAoKTsKIApAQCAtNzUsOCArNzcsOCBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIHN0
YXRpYyBGcmVlQ2VsbCogYXNGcmVlQ2VsbChXZWFrSW1wbCopOwogICAgIAotICAgIHRlbXBsYXRl
PHR5cGVuYW1lIENvbnRhaW5lclR5cGU+Ci0gICAgdm9pZCBzcGVjaWFsaXplZFZpc2l0KENvbnRh
aW5lclR5cGUmLCBTbG90VmlzaXRvciYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIENvbnRhaW5l
clR5cGUsIHR5cGVuYW1lIFZpc2l0b3I+CisgICAgdm9pZCBzcGVjaWFsaXplZFZpc2l0KENvbnRh
aW5lclR5cGUmLCBWaXNpdG9yJik7CiAKICAgICBleHBsaWNpdCBXZWFrQmxvY2soQ2VsbENvbnRh
aW5lcik7CiAgICAgdm9pZCBmaW5hbGl6ZShXZWFrSW1wbCopOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvV2Vha0hhbmRsZU93bmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrSGFuZGxlT3duZXIuY3BwCShyZXZpc2lvbiAyNzIxOTIp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrSGFuZGxlT3duZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNSw3ICszNSw3IEBAIFdlYWtIYW5kbGVPd25lcjo6fldlYWtIYW5kbGVP
d25lcigpCiB7CiB9CiAKLWJvb2wgV2Vha0hhbmRsZU93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFx
dWVSb290cyhIYW5kbGU8VW5rbm93bj4sIHZvaWQqLCBTbG90VmlzaXRvciYsIGNvbnN0IGNoYXIq
KikKK2Jvb2wgV2Vha0hhbmRsZU93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhIYW5k
bGU8VW5rbm93bj4sIHZvaWQqLCBBYnN0cmFjdFNsb3RWaXNpdG9yJiwgY29uc3QgY2hhcioqKQog
ewogICAgIHJldHVybiBmYWxzZTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L1dlYWtIYW5kbGVPd25lci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL1dlYWtIYW5kbGVPd25lci5oCShyZXZpc2lvbiAyNzIxOTIpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9XZWFrSGFuZGxlT3duZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjksMTMg
KzI5LDEzIEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1jbGFzcyBTbG90VmlzaXRvcjsKK2NsYXNz
IEFic3RyYWN0U2xvdFZpc2l0b3I7CiAKIGNsYXNzIEpTX0VYUE9SVF9QUklWQVRFIFdlYWtIYW5k
bGVPd25lciB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+V2Vha0hhbmRsZU93bmVyKCk7CiAgICAg
Ly8gcmVhc29uIHdpbGwgb25seSBiZSBub24tbnVsbCB3aGVuIGdlbmVyYXRpbmcgYSBkZWJ1ZyBH
QyBoZWFwIHNuYXBzaG90LgotICAgIHZpcnR1YWwgYm9vbCBpc1JlYWNoYWJsZUZyb21PcGFxdWVS
b290cyhIYW5kbGU8VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIFNsb3RWaXNpdG9yJiwgY2hhciBj
b25zdCoqIHJlYXNvbiA9IG51bGxwdHIpOworICAgIHZpcnR1YWwgYm9vbCBpc1JlYWNoYWJsZUZy
b21PcGFxdWVSb290cyhIYW5kbGU8VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIEFic3RyYWN0U2xv
dFZpc2l0b3ImLCBjaGFyIGNvbnN0KiogcmVhc29uID0gbnVsbHB0cik7CiAgICAgdmlydHVhbCB2
b2lkIGZpbmFsaXplKEhhbmRsZTxVbmtub3duPiwgdm9pZCogY29udGV4dCk7CiB9OwogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrSW5saW5lcy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtJbmxpbmVzLmgJKHJldmlzaW9uIDI3MjE5
MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtJbmxpbmVzLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTI2LDYgKzI2LDcgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiSlNDYXN0
LmgiCisjaW5jbHVkZSAiV2Vhay5oIgogI2luY2x1ZGUgIldlYWtTZXRJbmxpbmVzLmgiCiAjaW5j
bHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvV2Vha1NldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dl
YWtTZXQuaAkocmV2aXNpb24gMjcyMTkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
V2Vha1NldC5oCSh3b3JraW5nIGNvcHkpCkBAIC01MSw3ICs1MSw4IEBAIHB1YmxpYzoKICAgICBi
b29sIGlzRW1wdHkoKSBjb25zdDsKICAgICBib29sIGlzVHJpdmlhbGx5RGVzdHJ1Y3RpYmxlKCkg
Y29uc3Q7CiAKLSAgICB2b2lkIHZpc2l0KFNsb3RWaXNpdG9yJik7CisvLyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBWaXNpdG9yPiB2b2lkIHZpc2l0KFZpc2l0b3ImKTsKKyAgICB2b2lkIHZpc2l0MShB
YnN0cmFjdFNsb3RWaXNpdG9yJik7CiAKICAgICB2b2lkIHJlYXAoKTsKICAgICB2b2lkIHN3ZWVw
KCk7CkBAIC0xMTQsMTAgKzExNSwxMiBAQCBpbmxpbmUgdm9pZCBXZWFrU2V0OjpsYXN0Q2hhbmNl
VG9GaW5hbGl6CiAgICAgICAgIGJsb2NrLT5sYXN0Q2hhbmNlVG9GaW5hbGl6ZSgpOwogfQogCi1p
bmxpbmUgdm9pZCBXZWFrU2V0Ojp2aXNpdChTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vdGVtcGxh
dGU8dHlwZW5hbWUgVmlzaXRvcj4KKy8vaW5saW5lIHZvaWQgV2Vha1NldDo6dmlzaXQoVmlzaXRv
ciYgdmlzaXRvcikKK2lubGluZSB2b2lkIFdlYWtTZXQ6OnZpc2l0MShBYnN0cmFjdFNsb3RWaXNp
dG9yJiB2aXNpdG9yKQogewogICAgIGZvciAoV2Vha0Jsb2NrKiBibG9jayA9IG1fYmxvY2tzLmhl
YWQoKTsgYmxvY2s7IGJsb2NrID0gYmxvY2stPm5leHQoKSkKLSAgICAgICAgYmxvY2stPnZpc2l0
KHZpc2l0b3IpOworICAgICAgICBibG9jay0+dmlzaXQxKHZpc2l0b3IpOwogfQogCiBpbmxpbmUg
dm9pZCBXZWFrU2V0OjpyZWFwKCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnBy
ZXRlci9TaGFkb3dDaGlja2VuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW50ZXJwcmV0ZXIvU2hhZG93Q2hpY2tlbi5jcHAJKHJldmlzaW9uIDI3MjE5MikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TaGFkb3dDaGlja2VuLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDQwLDcgKzQ0MCw3IEBAIHZvaWQgU2hhZG93Q2hpY2tlbjo6dXBkYXRlKFZN
JiB2bSwgQ2FsbEYKICAgICAgICAgZGF0YUxvZygiICAgIEFmdGVyIGNsZWFuLXVwOiAiLCAqdGhp
cywgIlxuIik7CiB9CiAKLXZvaWQgU2hhZG93Q2hpY2tlbjo6dmlzaXRDaGlsZHJlbihTbG90Vmlz
aXRvciYgdmlzaXRvcikKK3ZvaWQgU2hhZG93Q2hpY2tlbjo6dmlzaXRDaGlsZHJlbihBYnN0cmFj
dFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGZvciAodW5zaWduZWQgaSA9IG1fbG9nQ3Vy
c29yIC0gbV9sb2c7IGktLTspIHsKICAgICAgICAgSlNPYmplY3QqIGNhbGxlZSA9IG1fbG9nW2ld
LmNhbGxlZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TaGFkb3dD
aGlja2VuLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVy
L1NoYWRvd0NoaWNrZW4uaAkocmV2aXNpb24gMjcyMTkyKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2ludGVycHJldGVyL1NoYWRvd0NoaWNrZW4uaAkod29ya2luZyBjb3B5KQpAQCAtMzUsMTMg
KzM1LDEzIEBACiAKIG5hbWVzcGFjZSBKU0MgewogCitjbGFzcyBBYnN0cmFjdFNsb3RWaXNpdG9y
OwogY2xhc3MgQ2FsbEZyYW1lOwogY2xhc3MgQ29kZUJsb2NrOwogY2xhc3MgSlNBcnJheTsKIGNs
YXNzIEpTT2JqZWN0OwogY2xhc3MgSlNTY29wZTsKIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3Rv
cjsKLWNsYXNzIFNsb3RWaXNpdG9yOwogY2xhc3MgVk07CiAKIC8vIFNoYWRvd0NoaWNrZW4gaXMg
YSBsb2cgdGhhdCBjYW4gYmUgdXNlZCB0byBwcm9kdWNlIGEgc2hhZG93IHN0YWNrIG9mIENISUNL
RU4tc3R5bGUgc3RhY2sgZnJhbWVzLgpAQCAtMTk2LDcgKzE5Niw3IEBAIHB1YmxpYzoKICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgogICAgIHZvaWQgaXRlcmF0ZShWTSYsIENhbGxGcmFt
ZSosIGNvbnN0IEZ1bmN0b3ImKTsKICAgICAKLSAgICB2b2lkIHZpc2l0Q2hpbGRyZW4oU2xvdFZp
c2l0b3ImKTsKKyAgICB2b2lkIHZpc2l0Q2hpbGRyZW4oQWJzdHJhY3RTbG90VmlzaXRvciYpOwog
ICAgIHZvaWQgcmVzZXQoKTsKICAgICAKICAgICAvLyBKSVQgc3VwcG9ydC4KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvR0NBd2FyZUpJVFN0dWJSb3V0aW5lLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0dDQXdhcmVKSVRTdHViUm91dGluZS5jcHAJ
KHJldmlzaW9uIDI3MjE5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvR0NBd2FyZUpJ
VFN0dWJSb3V0aW5lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzMsMTAgKzczLDE1IEBAIHZvaWQg
R0NBd2FyZUpJVFN0dWJSb3V0aW5lOjpkZWxldGVGcm9tR0MKICAgICBkZWxldGUgdGhpczsKIH0K
IAotdm9pZCBHQ0F3YXJlSklUU3R1YlJvdXRpbmU6Om1hcmtSZXF1aXJlZE9iamVjdHNJbnRlcm5h
bChTbG90VmlzaXRvciYpCisvL3ZvaWQgR0NBd2FyZUpJVFN0dWJSb3V0aW5lOjptYXJrUmVxdWly
ZWRPYmplY3RzSW50ZXJuYWwoU2xvdFZpc2l0b3ImKQordm9pZCBHQ0F3YXJlSklUU3R1YlJvdXRp
bmU6Om1hcmtSZXF1aXJlZE9iamVjdHNJbnRlcm5hbDEoQWJzdHJhY3RTbG90VmlzaXRvciYpCiB7
CiB9CiAKKy8vdm9pZCBHQ0F3YXJlSklUU3R1YlJvdXRpbmU6Om1hcmtSZXF1aXJlZE9iamVjdHNJ
bnRlcm5hbChWZXJpZmllclNsb3RWaXNpdG9yJikKKy8veworLy99CisKIE1hcmtpbmdHQ0F3YXJl
SklUU3R1YlJvdXRpbmU6Ok1hcmtpbmdHQ0F3YXJlSklUU3R1YlJvdXRpbmUoCiAgICAgY29uc3Qg
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiYgY29kZSwgVk0mIHZt
LCBjb25zdCBKU0NlbGwqIG93bmVyLAogICAgIGNvbnN0IFZlY3RvcjxKU0NlbGwqPiYgY2VsbHMs
IEJhZzxDYWxsTGlua0luZm8+JiYgY2FsbExpbmtJbmZvcykKQEAgLTkyLDEyICs5NywxOSBAQCBN
YXJraW5nR0NBd2FyZUpJVFN0dWJSb3V0aW5lOjp+TWFya2luZ0dDCiB7CiB9CiAKLXZvaWQgTWFy
a2luZ0dDQXdhcmVKSVRTdHViUm91dGluZTo6bWFya1JlcXVpcmVkT2JqZWN0c0ludGVybmFsKFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQorLy92b2lkIE1hcmtpbmdHQ0F3YXJlSklUU3R1YlJvdXRpbmU6
Om1hcmtSZXF1aXJlZE9iamVjdHNJbnRlcm5hbChTbG90VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQg
TWFya2luZ0dDQXdhcmVKSVRTdHViUm91dGluZTo6bWFya1JlcXVpcmVkT2JqZWN0c0ludGVybmFs
MShBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGZvciAoYXV0byYgZW50cnkg
OiBtX2NlbGxzKQogICAgICAgICB2aXNpdG9yLmFwcGVuZChlbnRyeSk7CiB9CiAKKy8vIEZJWE1F
IGRlZHVwZT8KKy8vdm9pZCBNYXJraW5nR0NBd2FyZUpJVFN0dWJSb3V0aW5lOjptYXJrUmVxdWly
ZWRPYmplY3RzSW50ZXJuYWwoVmVyaWZpZXJTbG90VmlzaXRvciYgdmlzaXRvcikKKy8veworLy8g
ICAgZm9yIChhdXRvJiBlbnRyeSA6IG1fY2VsbHMpCisvLyAgICAgICAgdmlzaXRvci5hcHBlbmQo
ZW50cnkpOworLy99CiAKIEdDQXdhcmVKSVRTdHViUm91dGluZVdpdGhFeGNlcHRpb25IYW5kbGVy
OjpHQ0F3YXJlSklUU3R1YlJvdXRpbmVXaXRoRXhjZXB0aW9uSGFuZGxlcigKICAgICBjb25zdCBN
YWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUU3R1YlJvdXRpbmVQdHJUYWc+JiBjb2RlLCBWTSYgdm0s
ICBjb25zdCBKU0NlbGwqIG93bmVyLCBjb25zdCBWZWN0b3I8SlNDZWxsKj4mIGNlbGxzLCBCYWc8
Q2FsbExpbmtJbmZvPiYmIGNhbGxMaW5rSW5mb3MsCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0dDQXdhcmVKSVRTdHViUm91dGluZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvR0NBd2FyZUpJVFN0dWJSb3V0aW5lLmgJKHJldmlzaW9uIDI3MjE5MikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvR0NBd2FyZUpJVFN0dWJSb3V0aW5lLmgJKHdv
cmtpbmcgY29weSkKQEAgLTYwLDEwICs2MCwxMiBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYoKm5ldyBHQ0F3YXJlSklUU3R1YlJvdXRpbmUoY29kZSwgdm0pKTsKICAg
ICB9Ci0gICAgCi0gICAgdm9pZCBtYXJrUmVxdWlyZWRPYmplY3RzKFNsb3RWaXNpdG9yJiB2aXNp
dG9yKQorCisvLyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgorLy8gICAgdm9pZCBtYXJr
UmVxdWlyZWRPYmplY3RzKFZpc2l0b3ImIHZpc2l0b3IpCisgICAgdm9pZCBtYXJrUmVxdWlyZWRP
YmplY3RzMShBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogICAgIHsKLSAgICAgICAgbWFy
a1JlcXVpcmVkT2JqZWN0c0ludGVybmFsKHZpc2l0b3IpOworICAgICAgICBtYXJrUmVxdWlyZWRP
YmplY3RzSW50ZXJuYWwxKHZpc2l0b3IpOwogICAgIH0KICAgICAKICAgICB2b2lkIGRlbGV0ZUZy
b21HQygpOwpAQCAtNzEsNyArNzMsOSBAQCBwdWJsaWM6CiBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBv
YnNlcnZlWmVyb1JlZkNvdW50KCkgb3ZlcnJpZGU7CiAgICAgCi0gICAgdmlydHVhbCB2b2lkIG1h
cmtSZXF1aXJlZE9iamVjdHNJbnRlcm5hbChTbG90VmlzaXRvciYpOworLy8gICAgdmlydHVhbCB2
b2lkIG1hcmtSZXF1aXJlZE9iamVjdHNJbnRlcm5hbChTbG90VmlzaXRvciYpOworLy8gICAgdmly
dHVhbCB2b2lkIG1hcmtSZXF1aXJlZE9iamVjdHNJbnRlcm5hbChWZXJpZmllclNsb3RWaXNpdG9y
Jik7CisgICAgdmlydHVhbCB2b2lkIG1hcmtSZXF1aXJlZE9iamVjdHNJbnRlcm5hbDEoQWJzdHJh
Y3RTbG90VmlzaXRvciYpOwogCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBKSVRTdHViUm91
dGluZVNldDsKQEAgLTg5LDcgKzkzLDkgQEAgcHVibGljOgogICAgIH5NYXJraW5nR0NBd2FyZUpJ
VFN0dWJSb3V0aW5lKCkgb3ZlcnJpZGU7CiAgICAgCiBwcm90ZWN0ZWQ6Ci0gICAgdm9pZCBtYXJr
UmVxdWlyZWRPYmplY3RzSW50ZXJuYWwoU2xvdFZpc2l0b3ImKSBvdmVycmlkZTsKKy8vICAgIHZv
aWQgbWFya1JlcXVpcmVkT2JqZWN0c0ludGVybmFsKFNsb3RWaXNpdG9yJikgb3ZlcnJpZGU7Cisv
LyAgICB2b2lkIG1hcmtSZXF1aXJlZE9iamVjdHNJbnRlcm5hbChWZXJpZmllclNsb3RWaXNpdG9y
Jikgb3ZlcnJpZGU7CisgICAgdm9pZCBtYXJrUmVxdWlyZWRPYmplY3RzSW50ZXJuYWwxKEFic3Ry
YWN0U2xvdFZpc2l0b3ImKSBvdmVycmlkZTsKIAogcHJpdmF0ZToKICAgICBWZWN0b3I8V3JpdGVC
YXJyaWVyPEpTQ2VsbD4+IG1fY2VsbHM7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L1BvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L1BvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lLmNwcAkocmV2aXNpb24g
MjcyMTkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Qb2x5bW9ycGhpY0NhbGxTdHVi
Um91dGluZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzNSwxMiArMTM1LDIwIEBAIGJvb2wgUG9s
eW1vcnBoaWNDYWxsU3R1YlJvdXRpbmU6OnZpc2l0V2UKICAgICByZXR1cm4gaXNTdGlsbExpdmU7
CiB9CiAKLXZvaWQgUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmU6Om1hcmtSZXF1aXJlZE9iamVj
dHNJbnRlcm5hbChTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vdm9pZCBQb2x5bW9ycGhpY0NhbGxT
dHViUm91dGluZTo6bWFya1JlcXVpcmVkT2JqZWN0c0ludGVybmFsKFNsb3RWaXNpdG9yJiB2aXNp
dG9yKQordm9pZCBQb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZTo6bWFya1JlcXVpcmVkT2JqZWN0
c0ludGVybmFsMShBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGZvciAoYXV0
byYgdmFyaWFudCA6IG1fdmFyaWFudHMpCiAgICAgICAgIHZpc2l0b3IuYXBwZW5kKHZhcmlhbnQp
OwogfQogCisvLy8vIG1sYW0gRklYTUUgZGVkdXBlPz8/CisvL3ZvaWQgUG9seW1vcnBoaWNDYWxs
U3R1YlJvdXRpbmU6Om1hcmtSZXF1aXJlZE9iamVjdHNJbnRlcm5hbChWZXJpZmllclNsb3RWaXNp
dG9yJiB2aXNpdG9yKQorLy97CisvLyAgICBmb3IgKGF1dG8mIHZhcmlhbnQgOiBtX3ZhcmlhbnRz
KQorLy8gICAgICAgIHZpc2l0b3IuYXBwZW5kKHZhcmlhbnQpOworLy99CisKIH0gLy8gbmFtZXNw
YWNlIEpTQwogCiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L1BvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lLmgJKHJldmlz
aW9uIDI3MjE5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUG9seW1vcnBoaWNDYWxs
U3R1YlJvdXRpbmUuaAkod29ya2luZyBjb3B5KQpAQCAtMTA1LDcgKzEwNSw5IEBAIHB1YmxpYzoK
ICAgICBib29sIHZpc2l0V2VhayhWTSYpIGZpbmFsOwogCiBwcml2YXRlOgotICAgIHZvaWQgbWFy
a1JlcXVpcmVkT2JqZWN0c0ludGVybmFsKFNsb3RWaXNpdG9yJikgZmluYWw7CisvLyAgICB2b2lk
IG1hcmtSZXF1aXJlZE9iamVjdHNJbnRlcm5hbChTbG90VmlzaXRvciYpIGZpbmFsOworLy8gICAg
dm9pZCBtYXJrUmVxdWlyZWRPYmplY3RzSW50ZXJuYWwoVmVyaWZpZXJTbG90VmlzaXRvciYpIGZp
bmFsOworICAgIHZvaWQgbWFya1JlcXVpcmVkT2JqZWN0c0ludGVybmFsMShBYnN0cmFjdFNsb3RW
aXNpdG9yJikgZmluYWw7CiAKICAgICBWZWN0b3I8V3JpdGVCYXJyaWVyPEpTQ2VsbD4sIDI+IG1f
dmFyaWFudHM7CiAgICAgVW5pcXVlQXJyYXk8dWludDMyX3Q+IG1fZmFzdENvdW50czsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Fic3RyYWN0TW9kdWxlUmVjb3JkLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BYnN0cmFjdE1vZHVs
ZVJlY29yZC5jcHAJKHJldmlzaW9uIDI3MjE5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0Fic3RyYWN0TW9kdWxlUmVjb3JkLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjAsNyAr
NjAsOCBAQCB2b2lkIEFic3RyYWN0TW9kdWxlUmVjb3JkOjpmaW5pc2hDcmVhdGlvCiAgICAgcHV0
RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiZGVwZW5kZW5jaWVzTWFwIl9z
KSwgbV9kZXBlbmRlbmNpZXNNYXAuZ2V0KCkpOwogfQogCi12b2lkIEFic3RyYWN0TW9kdWxlUmVj
b3JkOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0
ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBBYnN0cmFjdE1vZHVsZVJlY29yZDo6dmlz
aXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEFi
c3RyYWN0TW9kdWxlUmVjb3JkKiB0aGlzT2JqZWN0ID0ganNDYXN0PEFic3RyYWN0TW9kdWxlUmVj
b3JkKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBp
bmZvKCkpOwpAQCAtNzAsNiArNzEsOCBAQCB2b2lkIEFic3RyYWN0TW9kdWxlUmVjb3JkOjp2aXNp
dENoaWxkcmVuCiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9kZXBlbmRlbmNpZXNN
YXApOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oQWJzdHJhY3RNb2R1bGVSZWNvcmQpOwor
CiB2b2lkIEFic3RyYWN0TW9kdWxlUmVjb3JkOjphcHBlbmRSZXF1ZXN0ZWRNb2R1bGUoY29uc3Qg
SWRlbnRpZmllciYgbW9kdWxlTmFtZSkKIHsKICAgICBtX3JlcXVlc3RlZE1vZHVsZXMuYWRkKG1v
ZHVsZU5hbWUuaW1wbCgpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Fi
c3RyYWN0TW9kdWxlUmVjb3JkLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQWJzdHJhY3RNb2R1bGVSZWNvcmQuaAkocmV2aXNpb24gMjcyMTkyKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQWJzdHJhY3RNb2R1bGVSZWNvcmQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTM2LDcgKzEzNiw3IEBAIHByb3RlY3RlZDoKICAgICBBYnN0cmFjdE1vZHVs
ZVJlY29yZChWTSYsIFN0cnVjdHVyZSosIGNvbnN0IElkZW50aWZpZXImKTsKICAgICB2b2lkIGZp
bmlzaENyZWF0aW9uKEpTR2xvYmFsT2JqZWN0KiwgVk0mKTsKIAotICAgIHN0YXRpYyB2b2lkIHZp
c2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NI
SUxEUkVOOwogCiAgICAgdm9pZCBzZXRNb2R1bGVFbnZpcm9ubWVudChKU0dsb2JhbE9iamVjdCos
IEpTTW9kdWxlRW52aXJvbm1lbnQqKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQXJnTGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQXJnTGlzdC5jcHAJKHJldmlzaW9uIDI3MjE5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0FyZ0xpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MSw3ICs1MSw3IEBA
IHZvaWQgQXJnTGlzdDo6Z2V0U2xpY2UoaW50IHN0YXJ0SW5kZXgsIEEKICAgICByZXN1bHQubV9h
cmdDb3VudCA9ICBtX2FyZ0NvdW50IC0gc3RhcnRJbmRleDsKIH0KIAotdm9pZCBNYXJrZWRBcmd1
bWVudEJ1ZmZlcjo6bWFya0xpc3RzKFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBMaXN0U2V0JiBtYXJr
U2V0KQordm9pZCBNYXJrZWRBcmd1bWVudEJ1ZmZlcjo6bWFya0xpc3RzKEFic3RyYWN0U2xvdFZp
c2l0b3ImIHZpc2l0b3IsIExpc3RTZXQmIG1hcmtTZXQpCiB7CiAgICAgTGlzdFNldDo6aXRlcmF0
b3IgZW5kID0gbWFya1NldC5lbmQoKTsKICAgICBmb3IgKExpc3RTZXQ6Oml0ZXJhdG9yIGl0ID0g
bWFya1NldC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0FyZ0xpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9BcmdMaXN0LmgJKHJldmlzaW9uIDI3MjE5MikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0FyZ0xpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMTE4LDcgKzEx
OCw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAgICAgICAgIAot
ICAgIHN0YXRpYyB2b2lkIG1hcmtMaXN0cyhTbG90VmlzaXRvciYsIExpc3RTZXQmKTsKKyAgICBz
dGF0aWMgdm9pZCBtYXJrTGlzdHMoQWJzdHJhY3RTbG90VmlzaXRvciYsIExpc3RTZXQmKTsKIAog
ICAgIHZvaWQgZW5zdXJlQ2FwYWNpdHkoc2l6ZV90IHJlcXVlc3RlZENhcGFjaXR5KQogICAgIHsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlYWJsZUlkZW50aWZpZXIu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWFibGVJ
ZGVudGlmaWVyLmgJKHJldmlzaW9uIDI3MjE5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0NhY2hlYWJsZUlkZW50aWZpZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzksMTAgKzM5
LDExIEBAIHVzaW5nIFdURjo6VW5pcXVlZFN0cmluZ0ltcGw7CiAKIG5hbWVzcGFjZSBKU0Mgewog
CitjbGFzcyBBYnN0cmFjdFNsb3RWaXNpdG9yOwogY2xhc3MgQ29kZUJsb2NrOwogY2xhc3MgSWRl
bnRpZmllcjsKIGNsYXNzIEpTQ2VsbDsKLWNsYXNzIFNsb3RWaXNpdG9yOworLy9jbGFzcyBTbG90
VmlzaXRvcjsKIAogY2xhc3MgQ2FjaGVhYmxlSWRlbnRpZmllciB7CiBwdWJsaWM6CkBAIC04Nyw3
ICs4OCw4IEBAIHB1YmxpYzoKIAogICAgIHVpbnRwdHJfdCByYXdCaXRzKCkgY29uc3QgeyByZXR1
cm4gbV9iaXRzOyB9CiAKLSAgICBpbmxpbmUgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRv
ciYpIGNvbnN0OworLy8gICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gaW5saW5lIHZvaWQg
dmlzaXRBZ2dyZWdhdGUoVmlzaXRvciYpIGNvbnN0OworICAgIGlubGluZSB2b2lkIHZpc2l0QWdn
cmVnYXRlMShBYnN0cmFjdFNsb3RWaXNpdG9yJikgY29uc3Q7CiAKICAgICBKU19FWFBPUlRfUFJJ
VkFURSB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVhYmxlSWRlbnRpZmllcklubGluZXMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWFibGVJZGVudGlmaWVySW5s
aW5lcy5oCShyZXZpc2lvbiAyNzIxOTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9DYWNoZWFibGVJZGVudGlmaWVySW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzcsMTIg
KzEzNywxNiBAQCBpbmxpbmUgdm9pZCBDYWNoZWFibGVJZGVudGlmaWVyOjpzZXRVaWRCCiAgICAg
bV9iaXRzID0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4odWlkKSB8IHNfdWlkVGFnOwogfQogCi1p
bmxpbmUgdm9pZCBDYWNoZWFibGVJZGVudGlmaWVyOjp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRv
ciYgdmlzaXRvcikgY29uc3QKKy8vdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KKy8vaW5saW5l
IHZvaWQgQ2FjaGVhYmxlSWRlbnRpZmllcjo6dmlzaXRBZ2dyZWdhdGUoVmlzaXRvciYgdmlzaXRv
cikgY29uc3QKK2lubGluZSB2b2lkIENhY2hlYWJsZUlkZW50aWZpZXI6OnZpc2l0QWdncmVnYXRl
MShBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBjb25zdAogewogICAgIGlmIChtX2JpdHMg
JiYgaXNDZWxsKCkpCiAgICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQoY2VsbCgpKTsK
IH0KIAorLy90ZW1wbGF0ZSB2b2lkIENhY2hlYWJsZUlkZW50aWZpZXI6OnZpc2l0QWdncmVnYXRl
KFNsb3RWaXNpdG9yJikgY29uc3Q7CisvL3RlbXBsYXRlIHZvaWQgQ2FjaGVhYmxlSWRlbnRpZmll
cjo6dmlzaXRBZ2dyZWdhdGUoVmVyaWZpZXJTbG90VmlzaXRvciYpIGNvbnN0OwogCiBpbmxpbmUg
Ym9vbCBDYWNoZWFibGVJZGVudGlmaWVyOjpvcGVyYXRvcj09KGNvbnN0IENhY2hlYWJsZUlkZW50
aWZpZXImIG90aGVyKSBjb25zdAogewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvQ2xhc3NJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvQ2xhc3NJbmZvLmgJKHJldmlzaW9uIDI3MjE5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0NsYXNzSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCw5ICs0NCw2IEBAIHN0
cnVjdCBNZXRob2RUYWJsZSB7CiAgICAgdXNpbmcgRGVzdHJveUZ1bmN0aW9uUHRyID0gdm9pZCAo
KikoSlNDZWxsKik7CiAgICAgRGVzdHJveUZ1bmN0aW9uUHRyIE1FVEhPRF9UQUJMRV9FTlRSWShk
ZXN0cm95KTsKIAotICAgIHVzaW5nIFZpc2l0Q2hpbGRyZW5GdW5jdGlvblB0ciA9IHZvaWQgKCop
KEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7Ci0gICAgVmlzaXRDaGlsZHJlbkZ1bmN0aW9uUHRyIE1F
VEhPRF9UQUJMRV9FTlRSWSh2aXNpdENoaWxkcmVuKTsKLQogICAgIHVzaW5nIEdldENhbGxEYXRh
RnVuY3Rpb25QdHIgPSBDYWxsRGF0YSAoKikoSlNDZWxsKik7CiAgICAgR2V0Q2FsbERhdGFGdW5j
dGlvblB0ciBNRVRIT0RfVEFCTEVfRU5UUlkoZ2V0Q2FsbERhdGEpOwogCkBAIC0xMjAsNyArMTE3
LDE4IEBAIHN0cnVjdCBNZXRob2RUYWJsZSB7CiAgICAgdXNpbmcgRXN0aW1hdGVkU2l6ZUZ1bmN0
aW9uUHRyID0gc2l6ZV90ICgqKShKU0NlbGwqLCBWTSYpOwogICAgIEVzdGltYXRlZFNpemVGdW5j
dGlvblB0ciBNRVRIT0RfVEFCTEVfRU5UUlkoZXN0aW1hdGVkU2l6ZSk7CiAKLSAgICB1c2luZyBW
aXNpdE91dHB1dENvbnN0cmFpbnRzUHRyID0gdm9pZCAoKikoSlNDZWxsKiwgU2xvdFZpc2l0b3Im
KTsKKyAgICB1c2luZyBWaXNpdENoaWxkcmVuRnVuY3Rpb25QdHIgPSB2b2lkICgqKShKU0NlbGwq
LCBTbG90VmlzaXRvciYpOworICAgIFZpc2l0Q2hpbGRyZW5GdW5jdGlvblB0ciBNRVRIT0RfVEFC
TEVfRU5UUlkodmlzaXRDaGlsZHJlbldpdGhTbG90VmlzaXRvcik7CisKKy8vICAgIHVzaW5nIFZp
c2l0Q2hpbGRyZW5XaXRoVmVyaWZpZXJTbG90VmlzaXRvclB0ciA9IHZvaWQgKCopKEpTQ2VsbCos
IFZlcmlmaWVyU2xvdFZpc2l0b3ImKTsKKyAgICB1c2luZyBWaXNpdENoaWxkcmVuV2l0aEFic3Ry
YWN0U2xvdFZpc2l0b3JQdHIgPSB2b2lkICgqKShKU0NlbGwqLCBBYnN0cmFjdFNsb3RWaXNpdG9y
Jik7CisgICAgVmlzaXRDaGlsZHJlbldpdGhBYnN0cmFjdFNsb3RWaXNpdG9yUHRyIE1FVEhPRF9U
QUJMRV9FTlRSWSh2aXNpdENoaWxkcmVuV2l0aEFic3RyYWN0U2xvdFZpc2l0b3IpOworCisgICAg
QUxXQVlTX0lOTElORSB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRv
ciYgdmlzaXRvcikgY29uc3QgeyB2aXNpdENoaWxkcmVuV2l0aFNsb3RWaXNpdG9yKGNlbGwsIHZp
c2l0b3IpOyB9CisvLyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwq
IGNlbGwsIFZlcmlmaWVyU2xvdFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0IHsgdmlzaXRDaGlsZHJl
bldpdGhWZXJpZmllclNsb3RWaXNpdG9yKGNlbGwsIHZpc2l0b3IpOyB9CisgICAgQUxXQVlTX0lO
TElORSB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBBYnN0cmFjdFNsb3RWaXNpdG9y
JiB2aXNpdG9yKSBjb25zdCB7IHZpc2l0Q2hpbGRyZW5XaXRoQWJzdHJhY3RTbG90VmlzaXRvcihj
ZWxsLCB2aXNpdG9yKTsgfQorCisgICAgdXNpbmcgVmlzaXRPdXRwdXRDb25zdHJhaW50c1B0ciA9
IHZvaWQgKCopKEpTQ2VsbCosIEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKICAgICBWaXNpdE91dHB1
dENvbnN0cmFpbnRzUHRyIE1FVEhPRF9UQUJMRV9FTlRSWSh2aXNpdE91dHB1dENvbnN0cmFpbnRz
KTsKIH07CiAKQEAgLTE0Nyw3ICsxNTUsNiBAQCBzdHJ1Y3QgTWV0aG9kVGFibGUgewogICAgIEpT
Q2FzdGluZ0hlbHBlcnM6OkluaGVyaXRzVHJhaXRzPENsYXNzTmFtZT46OnR5cGVSYW5nZSwgXAog
ICAgIHsgXAogICAgICAgICAmQ2xhc3NOYW1lOjpkZXN0cm95LCBcCi0gICAgICAgICZDbGFzc05h
bWU6OnZpc2l0Q2hpbGRyZW4sIFwKICAgICAgICAgJkNsYXNzTmFtZTo6Z2V0Q2FsbERhdGEsIFwK
ICAgICAgICAgJkNsYXNzTmFtZTo6Z2V0Q29uc3RydWN0RGF0YSwgXAogICAgICAgICAmQ2xhc3NO
YW1lOjpwdXQsIFwKQEAgLTE3Myw2ICsxODAsOCBAQCBzdHJ1Y3QgTWV0aG9kVGFibGUgewogICAg
ICAgICAmQ2xhc3NOYW1lOjpkdW1wVG9TdHJlYW0sIFwKICAgICAgICAgJkNsYXNzTmFtZTo6YW5h
bHl6ZUhlYXAsIFwKICAgICAgICAgJkNsYXNzTmFtZTo6ZXN0aW1hdGVkU2l6ZSwgXAorICAgICAg
ICAmQ2xhc3NOYW1lOjp2aXNpdENoaWxkcmVuLCBcCisgICAgICAgICZDbGFzc05hbWU6OnZpc2l0
Q2hpbGRyZW4sIFwKICAgICAgICAgJkNsYXNzTmFtZTo6dmlzaXRPdXRwdXRDb25zdHJhaW50cywg
XAogICAgIH0sIFwKICAgICBDbGFzc05hbWU6OlR5cGVkQXJyYXlTdG9yYWdlVHlwZSwgXApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xvbmVkQXJndW1lbnRzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DbG9uZWRBcmd1bWVudHMu
Y3BwCShyZXZpc2lvbiAyNzIxOTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9D
bG9uZWRBcmd1bWVudHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNjcsNyArMjY3LDggQEAgdm9p
ZCBDbG9uZWRBcmd1bWVudHM6Om1hdGVyaWFsaXplU3BlY2lhbAogICAgICAgICBtYXRlcmlhbGl6
ZVNwZWNpYWxzKGdsb2JhbE9iamVjdCk7CiB9CiAKLXZvaWQgQ2xvbmVkQXJndW1lbnRzOjp2aXNp
dENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0
eXBlbmFtZSBWaXNpdG9yPgordm9pZCBDbG9uZWRBcmd1bWVudHM6OnZpc2l0Q2hpbGRyZW5JbXBs
KEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBDbG9uZWRBcmd1bWVudHMq
IHRoaXNPYmplY3QgPSBqc0Nhc3Q8Q2xvbmVkQXJndW1lbnRzKj4oY2VsbCk7CiAgICAgQVNTRVJU
X0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtMjc1LDUgKzI3Niw3
IEBAIHZvaWQgQ2xvbmVkQXJndW1lbnRzOjp2aXNpdENoaWxkcmVuKEpTQ2UKICAgICB2aXNpdG9y
LmFwcGVuZCh0aGlzT2JqZWN0LT5tX2NhbGxlZSk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJF
TihDbG9uZWRBcmd1bWVudHMpOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xvbmVkQXJndW1lbnRzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xvbmVkQXJndW1lbnRzLmgJKHJldmlzaW9u
IDI3MjE5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Nsb25lZEFyZ3VtZW50
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC02Miw3ICs2Miw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMg
U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUg
cHJvdG90eXBlKTsKICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTbG93UHV0U3RydWN0dXJl
KFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlIHByb3RvdHlwZSk7CiAKLSAgICBzdGF0aWMg
dm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9W
SVNJVF9DSElMRFJFTjsKIAogICAgIERFQ0xBUkVfSU5GTzsKIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvRGlyZWN0QXJndW1lbnRzLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EaXJlY3RBcmd1bWVudHMuY3BwCShyZXZpc2lvbiAy
NzIxOTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EaXJlY3RBcmd1bWVudHMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MCw3ICs5MCw4IEBAIHNpemVfdCBEaXJlY3RBcmd1bWVu
dHM6OmVzdGltYXRlZFNpemUoSlMKICAgICByZXR1cm4gQmFzZTo6ZXN0aW1hdGVkU2l6ZShjZWxs
LCB2bSkgKyBtYXBwZWRBcmd1bWVudHNTaXplICsgbW9kaWZpZWRBcmd1bWVudHNTaXplOwogfQog
Ci12b2lkIERpcmVjdEFyZ3VtZW50czo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIHRoaXNDZWxsLCBT
bG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIERp
cmVjdEFyZ3VtZW50czo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiB0aGlzQ2VsbCwgVmlzaXRv
ciYgdmlzaXRvcikKIHsKICAgICBEaXJlY3RBcmd1bWVudHMqIHRoaXNPYmplY3QgPSBzdGF0aWNf
Y2FzdDxEaXJlY3RBcmd1bWVudHMqPih0aGlzQ2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9J
TkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtMTA0LDYgKzEwNSw4IEBAIHZvaWQgRGly
ZWN0QXJndW1lbnRzOjp2aXNpdENoaWxkcmVuKEpTQ2UKICAgICBHZW5lcmljQXJndW1lbnRzPERp
cmVjdEFyZ3VtZW50cz46OnZpc2l0Q2hpbGRyZW4odGhpc0NlbGwsIHZpc2l0b3IpOwogfQogCitE
RUZJTkVfVklTSVRfQ0hJTERSRU4oRGlyZWN0QXJndW1lbnRzKTsKKwogU3RydWN0dXJlKiBEaXJl
Y3RBcmd1bWVudHM6OmNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQogewogICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNy
ZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKERpcmVjdEFyZ3VtZW50
c1R5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5oCShyZXZpc2lvbiAyNzIxOTIpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EaXJlY3RBcmd1bWVudHMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNjUsNyArNjUsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIERpcmVjdEFyZ3Vt
ZW50cyogY3JlYXRlQnlDb3B5aW5nKEpTR2xvYmFsT2JqZWN0KiwgQ2FsbEZyYW1lKik7CiAKICAg
ICBzdGF0aWMgc2l6ZV90IGVzdGltYXRlZFNpemUoSlNDZWxsKiwgVk0mKTsKLSAgICBzdGF0aWMg
dm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9W
SVNJVF9DSElMRFJFTjsKICAgICAKICAgICB1aW50MzJfdCBpbnRlcm5hbExlbmd0aCgpIGNvbnN0
CiAgICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXZhbEV4ZWN1dGFi
bGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V2YWxF
eGVjdXRhYmxlLmNwcAkocmV2aXNpb24gMjcyMTkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvRXZhbEV4ZWN1dGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OSw3ICs0OSw4
IEBAIGF1dG8gRXZhbEV4ZWN1dGFibGU6OmVuc3VyZVRlbXBsYXRlT2JqZWMKICAgICByZXR1cm4g
ZW5zdXJlVGVtcGxhdGVPYmplY3RNYXBJbXBsKG1fdGVtcGxhdGVPYmplY3RNYXApOwogfQogCi12
b2lkIEV2YWxFeGVjdXRhYmxlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0
b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBFdmFsRXhlY3V0
YWJsZTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQog
ewogICAgIEV2YWxFeGVjdXRhYmxlKiB0aGlzT2JqZWN0ID0ganNDYXN0PEV2YWxFeGVjdXRhYmxl
Kj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZv
KCkpOwpAQCAtNjMsNCArNjQsNiBAQCB2b2lkIEV2YWxFeGVjdXRhYmxlOjp2aXNpdENoaWxkcmVu
KEpTQ2VsCiAgICAgfQogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oRXZhbEV4ZWN1dGFibGUp
OworCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0V2YWxFeGVjdXRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvRXZhbEV4ZWN1dGFibGUuaAkocmV2aXNpb24gMjcyMTkyKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvRXZhbEV4ZWN1dGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAt
NzgsNyArNzgsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgdXNpbmcgQmFzZTo6ZmluaXNoQ3JlYXRpb247
CiAgICAgRXZhbEV4ZWN1dGFibGUoSlNHbG9iYWxPYmplY3QqLCBjb25zdCBTb3VyY2VDb2RlJiwg
Ym9vbCBpblN0cmljdENvbnRleHQsIERlcml2ZWRDb250ZXh0VHlwZSwgYm9vbCBpc0Fycm93RnVu
Y3Rpb25Db250ZXh0LCBib29sIGlzSW5zaWRlT3JkaW5hcnlGdW5jdGlvbiwgRXZhbENvbnRleHRU
eXBlLCBOZWVkc0NsYXNzRmllbGRJbml0aWFsaXplcik7CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNp
dENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElM
RFJFTjsKIAogICAgIHVuc2lnbmVkIG1fbmVlZHNDbGFzc0ZpZWxkSW5pdGlhbGl6ZXIgOiAxOwog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGNlcHRpb24uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbi5jcHAJKHJl
dmlzaW9uIDI3MjE5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlv
bi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUzLDcgKzUzLDggQEAgU3RydWN0dXJlKiBFeGNlcHRp
b246OmNyZWF0ZVN0cnVjdHVyZShWTQogICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwg
Z2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKENlbGxUeXBlLCBTdHJ1Y3R1cmVGbGFn
cyksIGluZm8oKSk7CiB9CiAKLXZvaWQgRXhjZXB0aW9uOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCog
Y2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgor
dm9pZCBFeGNlcHRpb246OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYg
dmlzaXRvcikKIHsKICAgICBFeGNlcHRpb24qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8RXhjZXB0aW9u
Kj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZv
KCkpOwpAQCAtNjQsNiArNjUsOCBAQCB2b2lkIEV4Y2VwdGlvbjo6dmlzaXRDaGlsZHJlbihKU0Nl
bGwqIGNlCiAgICAgICAgIGZyYW1lLnZpc2l0Q2hpbGRyZW4odmlzaXRvcik7CiB9CiAKK0RFRklO
RV9WSVNJVF9DSElMRFJFTihFeGNlcHRpb24pOworCiBFeGNlcHRpb246OkV4Y2VwdGlvbihWTSYg
dm0pCiAgICAgOiBCYXNlKHZtLCB2bS5leGNlcHRpb25TdHJ1Y3R1cmUuZ2V0KCkpCiB7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGNlcHRpb24uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGNlcHRpb24uaAkocmV2aXNpb24gMjcy
MTkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9uLmgJKHdvcmtp
bmcgY29weSkKQEAgLTUxLDcgKzUxLDcgQEAgcHVibGljOgogCiAgICAgc3RhdGljIFN0cnVjdHVy
ZSogY3JlYXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlIHByb3RvdHlw
ZSk7CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9y
Jik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIERFQ0xBUkVfRVhQT1JUX0lO
Rk87CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uRXhlY3V0
YWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVu
Y3Rpb25FeGVjdXRhYmxlLmNwcAkocmV2aXNpb24gMjcyMTkyKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25FeGVjdXRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NjcsNyArNjcsOCBAQCBGdW5jdGlvbkNvZGVCbG9jayogRnVuY3Rpb25FeGVjdXRhYmxlOjpiCiAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PEZ1bmN0aW9uQ29kZUJsb2NrKj4oZWRnZS0+Y29kZUJsb2Nr
KCktPmJhc2VsaW5lQWx0ZXJuYXRpdmUoKSk7CiB9CiAKLXZvaWQgRnVuY3Rpb25FeGVjdXRhYmxl
Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1w
bGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBGdW5jdGlvbkV4ZWN1dGFibGU6OnZpc2l0Q2hp
bGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBGdW5jdGlv
bkV4ZWN1dGFibGUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4oY2Vs
bCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpA
QCAtODYsNiArODcsOCBAQCB2b2lkIEZ1bmN0aW9uRXhlY3V0YWJsZTo6dmlzaXRDaGlsZHJlbihK
CiAgICAgfQogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oRnVuY3Rpb25FeGVjdXRhYmxlKTsK
KwogRnVuY3Rpb25FeGVjdXRhYmxlKiBGdW5jdGlvbkV4ZWN1dGFibGU6OmZyb21HbG9iYWxDb2Rl
KAogICAgIGNvbnN0IElkZW50aWZpZXImIG5hbWUsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgCiAgICAgSlNPYmplY3QqJiBleGNlcHRpb24s
IGludCBvdmVycmlkZUxpbmVOdW1iZXIsIE9wdGlvbmFsPGludD4gZnVuY3Rpb25Db25zdHJ1Y3Rv
clBhcmFtZXRlcnNFbmRQb3NpdGlvbikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZS5oCShyZXZpc2lvbiAyNzIxOTIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvbkV4ZWN1dGFibGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTY2LDcgKzE2Niw3IEBAIHB1YmxpYzoKICAgICBKU1BhcnNlclNjcmlwdE1v
ZGUgc2NyaXB0TW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fdW5saW5rZWRFeGVjdXRhYmxlLT5zY3Jp
cHRNb2RlKCk7IH0KICAgICBTb3VyY2VDb2RlIGNsYXNzU291cmNlKCkgY29uc3QgeyByZXR1cm4g
bV91bmxpbmtlZEV4ZWN1dGFibGUtPmNsYXNzU291cmNlKCk7IH0KIAotICAgIHN0YXRpYyB2b2lk
IHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lU
X0NISUxEUkVOOwogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0s
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG8pCiAgICAgewogICAg
ICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG8sIFR5
cGVJbmZvKEZ1bmN0aW9uRXhlY3V0YWJsZVR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uUmFyZURhdGEuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uUmFy
ZURhdGEuY3BwCShyZXZpc2lvbiAyNzIxOTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9GdW5jdGlvblJhcmVEYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTEsNyArNTEsOCBA
QCBTdHJ1Y3R1cmUqIEZ1bmN0aW9uUmFyZURhdGE6OmNyZWF0ZVN0cnVjCiAgICAgcmV0dXJuIFN0
cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oQ2Vs
bFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKIH0KIAotdm9pZCBGdW5jdGlvblJhcmVE
YXRhOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0
ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBGdW5jdGlvblJhcmVEYXRhOjp2aXNpdENo
aWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgRnVuY3Rp
b25SYXJlRGF0YSogcmFyZURhdGEgPSBqc0Nhc3Q8RnVuY3Rpb25SYXJlRGF0YSo+KGNlbGwpOwog
ICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2VsbCwgaW5mbygpKTsKQEAgLTYzLDYgKzY0
LDggQEAgdm9pZCBGdW5jdGlvblJhcmVEYXRhOjp2aXNpdENoaWxkcmVuKEpTQwogICAgIHZpc2l0
b3IuYXBwZW5kKHJhcmVEYXRhLT5tX2V4ZWN1dGFibGUpOwogfQogCitERUZJTkVfVklTSVRfQ0hJ
TERSRU4oRnVuY3Rpb25SYXJlRGF0YSk7CisKIEZ1bmN0aW9uUmFyZURhdGE6OkZ1bmN0aW9uUmFy
ZURhdGEoVk0mIHZtLCBFeGVjdXRhYmxlQmFzZSogZXhlY3V0YWJsZSkKICAgICA6IEJhc2Uodm0s
IHZtLmZ1bmN0aW9uUmFyZURhdGFTdHJ1Y3R1cmUuZ2V0KCkpCiAgICAgLCBtX29iamVjdEFsbG9j
YXRpb25Qcm9maWxlKCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0
aW9uUmFyZURhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9GdW5jdGlvblJhcmVEYXRhLmgJKHJldmlzaW9uIDI3MjE5MikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uUmFyZURhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtNjUs
NyArNjUsNyBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1
cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUgcHJvdG90eXBlKTsKIAotICAgIHN0YXRp
YyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJF
X1ZJU0lUX0NISUxEUkVOOwogCiAgICAgREVDTEFSRV9JTkZPOwogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljQXJndW1lbnRzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50cy5oCShyZXZpc2lvbiAy
NzIxOTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljQXJndW1lbnRz
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDcgKzQ0LDcgQEAgcHJvdGVjdGVkOgogICAgIHsKICAg
ICB9CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9y
Jik7CisgICAgREVDTEFSRV9URU1QTEFURV9WSVNJVF9DSElMRFJFTjsKICAgICBzdGF0aWMgYm9v
bCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5
TmFtZSwgUHJvcGVydHlTbG90Jik7CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90
QnlJbmRleChKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgdW5zaWduZWQgcHJvcGVydHlOYW1l
LCBQcm9wZXJ0eVNsb3QmKTsKICAgICBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpT
T2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIERvbnRFbnVtUHJv
cGVydGllc01vZGUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJp
Y0FyZ3VtZW50c0lubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9HZW5lcmljQXJndW1lbnRzSW5saW5lcy5oCShyZXZpc2lvbiAyNzIxOTIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljQXJndW1lbnRzSW5saW5lcy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw4IEBACiBuYW1lc3BhY2UgSlNDIHsKIAogdGVtcGxh
dGU8dHlwZW5hbWUgVHlwZT4KLXZvaWQgR2VuZXJpY0FyZ3VtZW50czxUeXBlPjo6dmlzaXRDaGls
ZHJlbihKU0NlbGwqIHRoaXNDZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5
cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEdlbmVyaWNBcmd1bWVudHM8VHlwZT46OnZpc2l0Q2hpbGRy
ZW5JbXBsKEpTQ2VsbCogdGhpc0NlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgVHlwZSog
dGhpc09iamVjdCA9IHN0YXRpY19jYXN0PFR5cGUqPih0aGlzQ2VsbCk7CiAgICAgQVNTRVJUX0dD
X09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNDEsNiArNDIsOCBAQCB2
b2lkIEdlbmVyaWNBcmd1bWVudHM8VHlwZT46OnZpc2l0Q2hpbGRyCiAgICAgICAgIHZpc2l0b3Iu
bWFya0F1eGlsaWFyeSh0aGlzT2JqZWN0LT5tX21vZGlmaWVkQXJndW1lbnRzRGVzY3JpcHRvci5n
ZXRVbnNhZmUoKSk7CiB9CiAKK0RFRklORV9URU1QTEFURV9WSVNJVF9DSElMRFJFTih0ZW1wbGF0
ZTx0eXBlbmFtZSBUeXBlPiwgR2VuZXJpY0FyZ3VtZW50czxUeXBlPik7CisKIHRlbXBsYXRlPHR5
cGVuYW1lIFR5cGU+CiBib29sIEdlbmVyaWNBcmd1bWVudHM8VHlwZT46OmdldE93blByb3BlcnR5
U2xvdChKU09iamVjdCogb2JqZWN0LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcm9w
ZXJ0eU5hbWUgaWRlbnQsIFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0dldHRlclNldHRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2V0dGVyU2V0dGVyLmNwcAkocmV2aXNpb24gMjcyMTky
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2V0dGVyU2V0dGVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzMsNyArMzMsOCBAQCBTVEFUSUNfQVNTRVJUX0lTX1RSSVZJQUxMWV9E
RVNUUlVDVElCTEUoCiAKIGNvbnN0IENsYXNzSW5mbyBHZXR0ZXJTZXR0ZXI6OnNfaW5mbyA9IHsg
IkdldHRlclNldHRlciIsIG51bGxwdHIsIG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0Rf
VEFCTEUoR2V0dGVyU2V0dGVyKSB9OwogCi12b2lkIEdldHRlclNldHRlcjo6dmlzaXRDaGlsZHJl
bihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUg
VmlzaXRvcj4KK3ZvaWQgR2V0dGVyU2V0dGVyOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNl
bGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgR2V0dGVyU2V0dGVyKiB0aGlzT2JqZWN0ID0g
anNDYXN0PEdldHRlclNldHRlcio+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJ
VFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTQzLDYgKzQ0LDggQEAgdm9pZCBHZXR0ZXJTZXR0
ZXI6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKgogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3Qt
Pm1fc2V0dGVyKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEdldHRlclNldHRlcik7CisK
IEpTVmFsdWUgY2FsbEdldHRlcihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVl
IGJhc2UsIEpTVmFsdWUgZ2V0dGVyU2V0dGVyKQogewogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVj
dC0+dm0oKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dldHRlclNldHRl
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dldHRlclNl
dHRlci5oCShyZXZpc2lvbiAyNzIxOTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9HZXR0ZXJTZXR0ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtODIsNyArODIsNyBAQCBwdWJsaWM6
CiAgICAgICAgIHJldHVybiBjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgZ2V0dGVyT2JqZWN0LCBz
ZXR0ZXJPYmplY3QpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlND
ZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAg
SlNPYmplY3QqIGdldHRlcigpIGNvbnN0IHsgcmV0dXJuIG1fZ2V0dGVyLmdldCgpOyB9CiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0hhc2hNYXBJbXBsLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9IYXNoTWFwSW1wbC5jcHAJKHJl
dmlzaW9uIDI3MjE5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0hhc2hNYXBJ
bXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsOSBAQAogCiBuYW1lc3BhY2UgSlND
IHsKIAorREVGSU5FX1RFTVBMQVRFX1ZJU0lUX0NISUxEUkVOKHRlbXBsYXRlPD4sIEhhc2hNYXBC
dWNrZXQ8SGFzaE1hcEJ1Y2tldERhdGFLZXk+KTsKK0RFRklORV9URU1QTEFURV9WSVNJVF9DSElM
RFJFTih0ZW1wbGF0ZTw+LCBIYXNoTWFwQnVja2V0PEhhc2hNYXBCdWNrZXREYXRhS2V5VmFsdWU+
KTsKKwogdGVtcGxhdGU8PgogY29uc3QgQ2xhc3NJbmZvIEhhc2hNYXBCdWNrZXQ8SGFzaE1hcEJ1
Y2tldERhdGFLZXk+OjpzX2luZm8gPQogICAgIHsgIkhhc2hNYXBCdWNrZXQiLCBudWxscHRyLCBu
dWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEhhc2hNYXBCdWNrZXQ8SGFzaE1h
cEJ1Y2tldERhdGFLZXk+KSB9OwpAQCAtMzgsOCArNDEsOSBAQCB0ZW1wbGF0ZTw+CiBjb25zdCBD
bGFzc0luZm8gSGFzaE1hcEJ1Y2tldDxIYXNoTWFwQnVja2V0RGF0YUtleVZhbHVlPjo6c19pbmZv
ID0KICAgICB7ICJIYXNoTWFwQnVja2V0IiwgbnVsbHB0ciwgbnVsbHB0ciwgbnVsbHB0ciwgQ1JF
QVRFX01FVEhPRF9UQUJMRShIYXNoTWFwQnVja2V0PEhhc2hNYXBCdWNrZXREYXRhS2V5VmFsdWU+
KSB9OwogCi10ZW1wbGF0ZSA8dHlwZW5hbWUgRGF0YT4KLXZvaWQgSGFzaE1hcEJ1Y2tldDxEYXRh
Pjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVt
cGxhdGU8dHlwZW5hbWUgRGF0YT4KK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEhh
c2hNYXBCdWNrZXQ8RGF0YT46OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRv
ciYgdmlzaXRvcikKIHsKICAgICBIYXNoTWFwQnVja2V0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEhh
c2hNYXBCdWNrZXQqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNP
YmplY3QsIGluZm8oKSk7CkBAIC01Miw4ICs1Niw5IEBAIHZvaWQgSGFzaE1hcEJ1Y2tldDxEYXRh
Pjo6dmlzaXRDaGlsZHJlbigKICAgICB2aXNpdG9yLmFwcGVuZFZhbHVlcyhiaXR3aXNlX2Nhc3Q8
V3JpdGVCYXJyaWVyPFVua25vd24+Kj4oJnRoaXNPYmplY3QtPm1fZGF0YSksIHNpemVvZihEYXRh
KSAvIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKTsKIH0KIAotdGVtcGxhdGUgPHR5cGVu
YW1lIEhhc2hNYXBCdWNrZXQ+Ci12b2lkIEhhc2hNYXBJbXBsPEhhc2hNYXBCdWNrZXQ+Ojp2aXNp
dENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0
eXBlbmFtZSBIYXNoTWFwQnVja2V0PgordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQg
SGFzaE1hcEltcGw8SGFzaE1hcEJ1Y2tldD46OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2Vs
bCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBIYXNoTWFwSW1wbCogdGhpc09iamVjdCA9IGpz
Q2FzdDxIYXNoTWFwSW1wbCo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMo
dGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTY2LDYgKzcxLDggQEAgdm9pZCBIYXNoTWFwSW1wbDxI
YXNoTWFwQnVja2V0Pjo6dmlzaXRDaAogICAgICAgICB2aXNpdG9yLm1hcmtBdXhpbGlhcnkoYnVm
ZmVyKTsKIH0KIAorREVGSU5FX1RFTVBMQVRFX1ZJU0lUX0NISUxEUkVOKHRlbXBsYXRlPHR5cGVu
YW1lIEhhc2hNYXBCdWNrZXQ+LCBIYXNoTWFwSW1wbDxIYXNoTWFwQnVja2V0Pik7CisKIHRlbXBs
YXRlIDx0eXBlbmFtZSBIYXNoTWFwQnVja2V0Pgogc2l6ZV90IEhhc2hNYXBJbXBsPEhhc2hNYXBC
dWNrZXQ+Ojplc3RpbWF0ZWRTaXplKEpTQ2VsbCogY2VsbCwgVk0mIHZtKQogewpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSGFzaE1hcEltcGwuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9IYXNoTWFwSW1wbC5oCShyZXZpc2lvbiAyNzIx
OTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9IYXNoTWFwSW1wbC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNDgsNyArMTQ4LDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9k
YXRhLnZhbHVlLmdldCgpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4o
SlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1RFTVBMQVRFX1ZJU0lUX0NISUxE
UkVOOwogCiAgICAgQUxXQVlTX0lOTElORSBIYXNoTWFwQnVja2V0KiBuZXh0KCkgY29uc3QgeyBy
ZXR1cm4gbV9uZXh0LmdldCgpOyB9CiAgICAgQUxXQVlTX0lOTElORSBIYXNoTWFwQnVja2V0KiBw
cmV2KCkgY29uc3QgeyByZXR1cm4gbV9wcmV2LmdldCgpOyB9CkBAIC0zNjQsNyArMzY0LDcgQEAg
Y2xhc3MgSGFzaE1hcEltcGwgOiBwdWJsaWMgSlNOb25GaW5hbE9iagogcHVibGljOgogICAgIHVz
aW5nIEJ1Y2tldFR5cGUgPSBIYXNoTWFwQnVja2V0VHlwZTsKIAotICAgIHN0YXRpYyB2b2lkIHZp
c2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1RFTVBMQVRF
X1ZJU0lUX0NISUxEUkVOOwogCiAgICAgc3RhdGljIHNpemVfdCBlc3RpbWF0ZWRTaXplKEpTQ2Vs
bCosIFZNJik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGVybmFs
RnVuY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0ludGVybmFsRnVuY3Rpb24uY3BwCShyZXZpc2lvbiAyNzIxOTIpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9JbnRlcm5hbEZ1bmN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NjQsNyArNjQsOCBAQCB2b2lkIEludGVybmFsRnVuY3Rpb246OmZpbmlzaENyZWF0aW9uKFZNCiAg
ICAgfQogfQogCi12b2lkIEludGVybmFsRnVuY3Rpb246OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBj
ZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2
b2lkIEludGVybmFsRnVuY3Rpb246OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlz
aXRvciYgdmlzaXRvcikKIHsKICAgICBJbnRlcm5hbEZ1bmN0aW9uKiB0aGlzT2JqZWN0ID0ganND
YXN0PEludGVybmFsRnVuY3Rpb24qPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVS
SVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC03Myw2ICs3NCw4IEBAIHZvaWQgSW50ZXJuYWxG
dW5jdGlvbjo6dmlzaXRDaGlsZHJlbihKU0MKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0
LT5tX29yaWdpbmFsTmFtZSk7CiB9CiAKK0RFRklORV9FWFBPUlRfVklTSVRfQ0hJTERSRU4oSW50
ZXJuYWxGdW5jdGlvbik7CisKIGNvbnN0IFN0cmluZyYgSW50ZXJuYWxGdW5jdGlvbjo6bmFtZSgp
CiB7CiAgICAgY29uc3QgU3RyaW5nJiBuYW1lID0gbV9vcmlnaW5hbE5hbWUtPnRyeUdldFZhbHVl
KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRlcm5hbEZ1bmN0aW9u
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50ZXJuYWxG
dW5jdGlvbi5oCShyZXZpc2lvbiAyNzIxOTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9JbnRlcm5hbEZ1bmN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDcgKzQ2LDcgQEAg
cHVibGljOgogCiAgICAgREVDTEFSRV9FWFBPUlRfSU5GTzsKIAotICAgIEpTX0VYUE9SVF9QUklW
QVRFIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAg
ICBERUNMQVJFX0VYUE9SVF9WSVNJVF9DSElMRFJFTjsKIAogICAgIEpTX0VYUE9SVF9QUklWQVRF
IGNvbnN0IFN0cmluZyYgbmFtZSgpOwogICAgIGNvbnN0IFN0cmluZyBkaXNwbGF5TmFtZShWTSYp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bENvbGxhdG9yLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsQ29sbGF0b3Iu
Y3BwCShyZXZpc2lvbiAyNzIxOTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9J
bnRsQ29sbGF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NSw3ICs2NSw4IEBAIHZvaWQgSW50
bENvbGxhdG9yOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0KICAgICBBU1NFUlQoaW5oZXJpdHModm0s
IGluZm8oKSkpOwogfQogCi12b2lkIEludGxDb2xsYXRvcjo6dmlzaXRDaGlsZHJlbihKU0NlbGwq
IGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4K
K3ZvaWQgSW50bENvbGxhdG9yOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0
b3ImIHZpc2l0b3IpCiB7CiAgICAgSW50bENvbGxhdG9yKiB0aGlzT2JqZWN0ID0ganNDYXN0PElu
dGxDb2xsYXRvcio+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09i
amVjdCwgaW5mbygpKTsKQEAgLTc1LDYgKzc2LDggQEAgdm9pZCBJbnRsQ29sbGF0b3I6OnZpc2l0
Q2hpbGRyZW4oSlNDZWxsKgogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fYm91bmRD
b21wYXJlKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEludGxDb2xsYXRvcik7CisKIFZl
Y3RvcjxTdHJpbmc+IEludGxDb2xsYXRvcjo6c29ydExvY2FsZURhdGEoY29uc3QgU3RyaW5nJiBs
b2NhbGUsIFJlbGV2YW50RXh0ZW5zaW9uS2V5IGtleSkKIHsKICAgICAvLyA5LjEgSW50ZXJuYWwg
c2xvdHMgb2YgU2VydmljZSBDb25zdHJ1Y3RvcnMgJiAxMC4yLjMgSW50ZXJuYWwgc2xvdHMgKEVD
TUEtNDAyIDIuMCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxDb2xs
YXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxD
b2xsYXRvci5oCShyZXZpc2lvbiAyNzIxOTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9JbnRsQ29sbGF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtODAsNyArODAsNyBAQCBwdWJs
aWM6CiBwcml2YXRlOgogICAgIEludGxDb2xsYXRvcihWTSYsIFN0cnVjdHVyZSopOwogICAgIHZv
aWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpT
Q2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAg
IGJvb2wgdXBkYXRlQ2FuRG9BU0NJSVVDQURVQ0VUQ29tcGFyaXNvbigpIGNvbnN0OwogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsRGF0ZVRpbWVGb3JtYXQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxEYXRlVGltZUZv
cm1hdC5jcHAJKHJldmlzaW9uIDI3MjE5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0ludGxEYXRlVGltZUZvcm1hdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkwLDcgKzkwLDgg
QEAgdm9pZCBJbnRsRGF0ZVRpbWVGb3JtYXQ6OmZpbmlzaENyZWF0aW9uKAogICAgIEFTU0VSVChp
bmhlcml0cyh2bSwgaW5mbygpKSk7CiB9CiAKLXZvaWQgSW50bERhdGVUaW1lRm9ybWF0Ojp2aXNp
dENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0
eXBlbmFtZSBWaXNpdG9yPgordm9pZCBJbnRsRGF0ZVRpbWVGb3JtYXQ6OnZpc2l0Q2hpbGRyZW5J
bXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBJbnRsRGF0ZVRpbWVG
b3JtYXQqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SW50bERhdGVUaW1lRm9ybWF0Kj4oY2VsbCk7CiAg
ICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtMTAw
LDYgKzEwMSw4IEBAIHZvaWQgSW50bERhdGVUaW1lRm9ybWF0Ojp2aXNpdENoaWxkcmVuKEoKICAg
ICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2JvdW5kRm9ybWF0KTsKIH0KIAorREVGSU5F
X1ZJU0lUX0NISUxEUkVOKEludGxEYXRlVGltZUZvcm1hdCk7CisKIHZvaWQgSW50bERhdGVUaW1l
Rm9ybWF0OjpzZXRCb3VuZEZvcm1hdChWTSYgdm0sIEpTQm91bmRGdW5jdGlvbiogZm9ybWF0KQog
ewogICAgIG1fYm91bmRGb3JtYXQuc2V0KHZtLCB0aGlzLCBmb3JtYXQpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERhdGVUaW1lRm9ybWF0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERhdGVUaW1lRm9ybWF0LmgJKHJl
dmlzaW9uIDI3MjE5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxEYXRl
VGltZUZvcm1hdC5oCSh3b3JraW5nIGNvcHkpCkBAIC04NSw3ICs4NSw3IEBAIHB1YmxpYzoKIHBy
aXZhdGU6CiAgICAgSW50bERhdGVUaW1lRm9ybWF0KFZNJiwgU3RydWN0dXJlKik7CiAgICAgdm9p
ZCBmaW5pc2hDcmVhdGlvbihWTSYpOwotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlND
ZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAg
c3RhdGljIFZlY3RvcjxTdHJpbmc+IGxvY2FsZURhdGEoY29uc3QgU3RyaW5nJiwgUmVsZXZhbnRF
eHRlbnNpb25LZXkpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRs
TG9jYWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9J
bnRsTG9jYWxlLmNwcAkocmV2aXNpb24gMjcyMTkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSW50bExvY2FsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU4LDcgKzU4LDggQEAg
dm9pZCBJbnRsTG9jYWxlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCiAgICAgQVNTRVJUKGluaGVy
aXRzKHZtLCBpbmZvKCkpKTsKIH0KIAotdm9pZCBJbnRsTG9jYWxlOjp2aXNpdENoaWxkcmVuKEpT
Q2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNp
dG9yPgordm9pZCBJbnRsTG9jYWxlOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZp
c2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxJbnRsTG9j
YWxlKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBp
bmZvKCkpOwpAQCAtNjYsNiArNjcsOCBAQCB2b2lkIEludGxMb2NhbGU6OnZpc2l0Q2hpbGRyZW4o
SlNDZWxsKiBjCiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsK
IH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEludGxMb2NhbGUpOworCiBjbGFzcyBMb2NhbGVJ
REJ1aWxkZXIgZmluYWwgewogcHVibGljOgogICAgIGJvb2wgaW5pdGlhbGl6ZShjb25zdCBTdHJp
bmcmKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxMb2NhbGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTG9jYWxlLmgJ
KHJldmlzaW9uIDI3MjE5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxM
b2NhbGUuaAkod29ya2luZyBjb3B5KQpAQCAtNzEsNyArNzEsNyBAQCBwdWJsaWM6CiBwcml2YXRl
OgogICAgIEludGxMb2NhbGUoVk0mLCBTdHJ1Y3R1cmUqKTsKICAgICB2b2lkIGZpbmlzaENyZWF0
aW9uKFZNJik7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90Vmlz
aXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBTdHJpbmcga2V5d29y
ZFZhbHVlKEFTQ0lJTGl0ZXJhbCwgYm9vbCBpc0Jvb2xlYW4gPSBmYWxzZSkgY29uc3Q7CiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxOdW1iZXJGb3JtYXQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxOdW1iZXJGb3Jt
YXQuY3BwCShyZXZpc2lvbiAyNzIxOTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9JbnRsTnVtYmVyRm9ybWF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzMsNyArNzMsOCBAQCB2
b2lkIEludGxOdW1iZXJGb3JtYXQ6OmZpbmlzaENyZWF0aW9uKFZNCiAgICAgQVNTRVJUKGluaGVy
aXRzKHZtLCBpbmZvKCkpKTsKIH0KIAotdm9pZCBJbnRsTnVtYmVyRm9ybWF0Ojp2aXNpdENoaWxk
cmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBWaXNpdG9yPgordm9pZCBJbnRsTnVtYmVyRm9ybWF0Ojp2aXNpdENoaWxkcmVuSW1wbChKU0Nl
bGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSW50bE51bWJlckZvcm1hdCogdGhp
c09iamVjdCA9IGpzQ2FzdDxJbnRsTnVtYmVyRm9ybWF0Kj4oY2VsbCk7CiAgICAgQVNTRVJUX0dD
X09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtODMsNiArODQsOCBAQCB2
b2lkIEludGxOdW1iZXJGb3JtYXQ6OnZpc2l0Q2hpbGRyZW4oSlNDCiAgICAgdmlzaXRvci5hcHBl
bmQodGhpc09iamVjdC0+bV9ib3VuZEZvcm1hdCk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJF
TihJbnRsTnVtYmVyRm9ybWF0KTsKKwogVmVjdG9yPFN0cmluZz4gSW50bE51bWJlckZvcm1hdDo6
bG9jYWxlRGF0YShjb25zdCBTdHJpbmcmIGxvY2FsZSwgUmVsZXZhbnRFeHRlbnNpb25LZXkga2V5
KQogewogICAgIC8vIDkuMSBJbnRlcm5hbCBzbG90cyBvZiBTZXJ2aWNlIENvbnN0cnVjdG9ycyAm
IDExLjIuMyBJbnRlcm5hbCBzbG90cyAoRUNNQS00MDIgMi4wKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSW50bE51bWJlckZvcm1hdC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxOdW1iZXJGb3JtYXQuaAkocmV2aXNpb24gMjcy
MTkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE51bWJlckZvcm1hdC5o
CSh3b3JraW5nIGNvcHkpCkBAIC05Niw3ICs5Niw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAg
SW50bE51bWJlckZvcm1hdChWTSYsIFN0cnVjdHVyZSopOwogICAgIHZvaWQgZmluaXNoQ3JlYXRp
b24oVk0mKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNp
dG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIHN0YXRpYyBWZWN0b3I8
U3RyaW5nPiBsb2NhbGVEYXRhKGNvbnN0IFN0cmluZyYsIFJlbGV2YW50RXh0ZW5zaW9uS2V5KTsK
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFBsdXJhbFJ1bGVzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsUGx1cmFs
UnVsZXMuY3BwCShyZXZpc2lvbiAyNzIxOTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9JbnRsUGx1cmFsUnVsZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MSw3ICs2MSw4IEBA
IHZvaWQgSW50bFBsdXJhbFJ1bGVzOjpmaW5pc2hDcmVhdGlvbihWTSYKICAgICBBU1NFUlQoaW5o
ZXJpdHModm0sIGluZm8oKSkpOwogfQogCi12b2lkIEludGxQbHVyYWxSdWxlczo6dmlzaXRDaGls
ZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5h
bWUgVmlzaXRvcj4KK3ZvaWQgSW50bFBsdXJhbFJ1bGVzOjp2aXNpdENoaWxkcmVuSW1wbChKU0Nl
bGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSW50bFBsdXJhbFJ1bGVzKiB0aGlz
T2JqZWN0ID0ganNDYXN0PEludGxQbHVyYWxSdWxlcyo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19P
QkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTY5LDYgKzcwLDggQEAgdm9p
ZCBJbnRsUGx1cmFsUnVsZXM6OnZpc2l0Q2hpbGRyZW4oSlNDZQogICAgIEJhc2U6OnZpc2l0Q2hp
bGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihJ
bnRsUGx1cmFsUnVsZXMpOworCiBWZWN0b3I8U3RyaW5nPiBJbnRsUGx1cmFsUnVsZXM6OmxvY2Fs
ZURhdGEoY29uc3QgU3RyaW5nJiwgUmVsZXZhbnRFeHRlbnNpb25LZXkpCiB7CiAgICAgcmV0dXJu
IHsgfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxQbHVyYWxSdWxl
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxQbHVy
YWxSdWxlcy5oCShyZXZpc2lvbiAyNzIxOTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9JbnRsUGx1cmFsUnVsZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNjYsNyArNjYsNyBAQCBw
dWJsaWM6CiBwcml2YXRlOgogICAgIEludGxQbHVyYWxSdWxlcyhWTSYsIFN0cnVjdHVyZSopOwog
ICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxk
cmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsK
IAogICAgIHN0YXRpYyBWZWN0b3I8U3RyaW5nPiBsb2NhbGVEYXRhKGNvbnN0IFN0cmluZyYsIFJl
bGV2YW50RXh0ZW5zaW9uS2V5KTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSW50bFJlbGF0aXZlVGltZUZvcm1hdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSW50bFJlbGF0aXZlVGltZUZvcm1hdC5jcHAJKHJldmlzaW9uIDI3
MjE5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxSZWxhdGl2ZVRpbWVG
b3JtYXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Miw3ICs2Miw4IEBAIHZvaWQgSW50bFJlbGF0
aXZlVGltZUZvcm1hdDo6ZmluaXNoQ3JlYXQKICAgICBBU1NFUlQoaW5oZXJpdHModm0sIGluZm8o
KSkpOwogfQogCi12b2lkIEludGxSZWxhdGl2ZVRpbWVGb3JtYXQ6OnZpc2l0Q2hpbGRyZW4oSlND
ZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0
b3I+Cit2b2lkIEludGxSZWxhdGl2ZVRpbWVGb3JtYXQ6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2Vs
bCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganND
YXN0PEludGxSZWxhdGl2ZVRpbWVGb3JtYXQqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNU
X0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC03MCw2ICs3MSw4IEBAIHZvaWQgSW50
bFJlbGF0aXZlVGltZUZvcm1hdDo6dmlzaXRDaGlsZHIKICAgICBCYXNlOjp2aXNpdENoaWxkcmVu
KHRoaXNPYmplY3QsIHZpc2l0b3IpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSW50bFJl
bGF0aXZlVGltZUZvcm1hdCk7CisKIFZlY3RvcjxTdHJpbmc+IEludGxSZWxhdGl2ZVRpbWVGb3Jt
YXQ6OmxvY2FsZURhdGEoY29uc3QgU3RyaW5nJiBsb2NhbGUsIFJlbGV2YW50RXh0ZW5zaW9uS2V5
IGtleSkKIHsKICAgICBBU1NFUlRfVU5VU0VEKGtleSwga2V5ID09IFJlbGV2YW50RXh0ZW5zaW9u
S2V5OjpOdSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsUmVsYXRp
dmVUaW1lRm9ybWF0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSW50bFJlbGF0aXZlVGltZUZvcm1hdC5oCShyZXZpc2lvbiAyNzIxOTIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsUmVsYXRpdmVUaW1lRm9ybWF0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTY0LDcgKzY0LDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBJbnRsUmVsYXRp
dmVUaW1lRm9ybWF0KFZNJiwgU3RydWN0dXJlKik7CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihW
TSYpOwotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3Im
KTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgc3RhdGljIFZlY3RvcjxTdHJp
bmc+IGxvY2FsZURhdGEoY29uc3QgU3RyaW5nJiwgUmVsZXZhbnRFeHRlbnNpb25LZXkpOwogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsU2VnbWVudEl0ZXJhdG9yLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsU2VnbWVu
dEl0ZXJhdG9yLmNwcAkocmV2aXNpb24gMjcyMTkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSW50bFNlZ21lbnRJdGVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY0LDEz
ICs2NCwxNiBAQCB2b2lkIEludGxTZWdtZW50SXRlcmF0b3I6OmZpbmlzaENyZWF0aW9uCiAgICAg
bV9zdHJpbmcuc2V0KHZtLCB0aGlzLCBzdHJpbmcpOwogfQogCi12b2lkIEludGxTZWdtZW50SXRl
cmF0b3I6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikK
K3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEludGxTZWdtZW50SXRlcmF0b3I6OnZp
c2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBh
dXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEludGxTZWdtZW50SXRlcmF0b3IqPihjZWxsKTsKICAg
ICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwogICAgIHZpc2l0b3Iu
YXBwZW5kKHRoaXNPYmplY3QtPm1fc3RyaW5nKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVO
KEludGxTZWdtZW50SXRlcmF0b3IpOworCiBKU09iamVjdCogSW50bFNlZ21lbnRJdGVyYXRvcjo6
bmV4dChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQogewogICAgIFZNJiB2bSA9IGdsb2Jh
bE9iamVjdC0+dm0oKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxT
ZWdtZW50SXRlcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9JbnRsU2VnbWVudEl0ZXJhdG9yLmgJKHJldmlzaW9uIDI3MjE5MikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxTZWdtZW50SXRlcmF0b3IuaAkod29ya2luZyBjb3B5
KQpAQCAtNTMsNyArNTMsNyBAQCBwdWJsaWM6CiAKICAgICBKU09iamVjdCogbmV4dChKU0dsb2Jh
bE9iamVjdCopOwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90
VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKIHByaXZhdGU6CiAgICAg
SW50bFNlZ21lbnRJdGVyYXRvcihWTSYsIFN0cnVjdHVyZSosIHN0ZDo6dW5pcXVlX3B0cjxVQnJl
YWtJdGVyYXRvciwgVUJyZWFrSXRlcmF0b3JEZWxldGVyPiYmLCBCb3g8VmVjdG9yPFVDaGFyPj4m
JiwgSW50bFNlZ21lbnRlcjo6R3JhbnVsYXJpdHkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSW50bFNlZ21lbnRzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9JbnRsU2VnbWVudHMuY3BwCShyZXZpc2lvbiAyNzIxOTIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsU2VnbWVudHMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMDksMTEgKzEwOSwxNCBAQCBKU09iamVjdCogSW50bFNlZ21lbnRzOjpjcmVhdGVT
ZWdtZW50SXRlCiAgICAgcmV0dXJuIEludGxTZWdtZW50SXRlcmF0b3I6OmNyZWF0ZSh2bSwgZ2xv
YmFsT2JqZWN0LT5zZWdtZW50SXRlcmF0b3JTdHJ1Y3R1cmUoKSwgV1RGTW92ZShzZWdtZW50ZXIp
LCBtX2J1ZmZlciwgbV9zdHJpbmcuZ2V0KCksIG1fZ3JhbnVsYXJpdHkpOwogfQogCi12b2lkIElu
dGxTZWdtZW50czo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNp
dG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSW50bFNlZ21lbnRzOjp2aXNp
dENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0
byogdGhpc09iamVjdCA9IGpzQ2FzdDxJbnRsU2VnbWVudHMqPihjZWxsKTsKICAgICBCYXNlOjp2
aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwogICAgIHZpc2l0b3IuYXBwZW5kKHRo
aXNPYmplY3QtPm1fc3RyaW5nKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEludGxTZWdt
ZW50cyk7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSW50bFNlZ21lbnRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSW50bFNlZ21lbnRzLmgJKHJldmlzaW9uIDI3MjE5MikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxTZWdtZW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC01
NCw3ICs1NCw3IEBAIHB1YmxpYzoKICAgICBKU1ZhbHVlIGNvbnRhaW5pbmcoSlNHbG9iYWxPYmpl
Y3QqLCBKU1ZhbHVlIGluZGV4VmFsdWUpOwogICAgIEpTT2JqZWN0KiBjcmVhdGVTZWdtZW50SXRl
cmF0b3IoSlNHbG9iYWxPYmplY3QqKTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4o
SlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiBw
cml2YXRlOgogICAgIEludGxTZWdtZW50cyhWTSYsIFN0cnVjdHVyZSosIHN0ZDo6dW5pcXVlX3B0
cjxVQnJlYWtJdGVyYXRvciwgVUJyZWFrSXRlcmF0b3JEZWxldGVyPiYmLCBCb3g8VmVjdG9yPFVD
aGFyPj4mJiwgSW50bFNlZ21lbnRlcjo6R3JhbnVsYXJpdHkpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3LmNwcAkocmV2aXNp
b24gMjcyMTkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZl
clZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTUsNyArMTU1LDggQEAgdm9pZCBKU0FycmF5
QnVmZmVyVmlldzo6ZmluaXNoQ3JlYXRpb24oVgogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CiB9CiAKLXZvaWQgSlNBcnJheUJ1ZmZlclZpZXc6OnZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+
Cit2b2lkIEpTQXJyYXlCdWZmZXJWaWV3Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGws
IFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNBcnJheUJ1ZmZlclZpZXcqIHRoaXNPYmplY3Qg
PSBqc0Nhc3Q8SlNBcnJheUJ1ZmZlclZpZXcqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNU
X0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC0xNjksNiArMTcwLDggQEAgdm9pZCBK
U0FycmF5QnVmZmVyVmlldzo6dmlzaXRDaGlsZHJlbihKUwogICAgIH0KIH0KIAorREVGSU5FX1ZJ
U0lUX0NISUxEUkVOKEpTQXJyYXlCdWZmZXJWaWV3KTsKKwogYm9vbCBKU0FycmF5QnVmZmVyVmll
dzo6cHV0KAogICAgIEpTQ2VsbCogY2VsbCwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
UHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwKICAgICBQdXRQcm9wZXJ0
eVNsb3QmIHNsb3QpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5
QnVmZmVyVmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTQXJyYXlCdWZmZXJWaWV3LmgJKHJldmlzaW9uIDI3MjE5MikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3LmgJKHdvcmtpbmcgY29weSkKQEAgLTE3
Miw3ICsxNzIsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgCiAgICAgc3RhdGljIGJvb2wgcHV0KEpTQ2Vs
bCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBQdXRQcm9wZXJ0eVNs
b3QmKTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0
b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogICAgIAogcHVibGljOgogICAgIFR5
cGVkQXJyYXlNb2RlIG1vZGUoKSBjb25zdCB7IHJldHVybiBtX21vZGU7IH0KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlJdGVyYXRvci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUl0ZXJhdG9yLmNwcAkocmV2
aXNpb24gMjcyMTkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUl0
ZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjgsMTEgKzY4LDE0IEBAIHZvaWQgSlNBcnJh
eUl0ZXJhdG9yOjpmaW5pc2hDcmVhdGlvbihWTSYKICAgICAgICAgQmFzZTo6aW50ZXJuYWxGaWVs
ZChpbmRleCkuc2V0KHZtLCB0aGlzLCB2YWx1ZXNbaW5kZXhdKTsKIH0KIAotdm9pZCBKU0FycmF5
SXRlcmF0b3I6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRv
cikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTQXJyYXlJdGVyYXRvcjo6dmlz
aXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGF1
dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNBcnJheUl0ZXJhdG9yKj4oY2VsbCk7CiAgICAgQVNT
RVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwogICAgIEJhc2U6OnZp
c2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CiB9CiAKK0RFRklORV9WSVNJVF9DSElM
RFJFTihKU0FycmF5SXRlcmF0b3IpOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlJdGVyYXRvci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlJdGVyYXRvci5oCShyZXZpc2lv
biAyNzIxOTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5SXRlcmF0
b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNzgsNyArNzgsNyBAQCBwdWJsaWM6CiAKICAgICBERUNM
QVJFX0lORk87CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RW
aXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogcHJpdmF0ZToKICAgICBK
U0FycmF5SXRlcmF0b3IoVk0mLCBTdHJ1Y3R1cmUqKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTQXN5bmNHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXN5bmNHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiAyNzIx
OTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FzeW5jR2VuZXJhdG9yLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNTksMTEgKzU5LDE0IEBAIHZvaWQgSlNBc3luY0dlbmVyYXRv
cjo6ZmluaXNoQ3JlYXRpb24oVk0KICAgICAgICAgaW50ZXJuYWxGaWVsZChpbmRleCkuc2V0KHZt
LCB0aGlzLCB2YWx1ZXNbaW5kZXhdKTsKIH0KIAotdm9pZCBKU0FzeW5jR2VuZXJhdG9yOjp2aXNp
dENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0
eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0FzeW5jR2VuZXJhdG9yOjp2aXNpdENoaWxkcmVuSW1w
bChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0byogdGhpc09iamVj
dCA9IGpzQ2FzdDxKU0FzeW5jR2VuZXJhdG9yKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVD
VF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4o
dGhpc09iamVjdCwgdmlzaXRvcik7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU0FzeW5j
R2VuZXJhdG9yKTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0FzeW5jR2VuZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBc3luY0dlbmVyYXRvci5oCShyZXZpc2lvbiAyNzIxOTIp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FzeW5jR2VuZXJhdG9yLmgJKHdv
cmtpbmcgY29weSkKQEAgLTk1LDcgKzk1LDcgQEAgcHVibGljOgogCiAgICAgREVDTEFSRV9FWFBP
UlRfSU5GTzsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZp
c2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiBwcml2YXRlOgogICAgIEpT
QXN5bmNHZW5lcmF0b3IoVk0mLCBTdHJ1Y3R1cmUqKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTQmlnSW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0JpZ0ludC5jcHAJKHJldmlzaW9uIDI3MjE5MikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQmlnSW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjcs
NyArNjcsOCBAQCBKU0JpZ0ludDo6SlNCaWdJbnQoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0CiAgICAg
LCBtX2RhdGEodm0sIHRoaXMsIGRhdGEsIGxlbmd0aCkKIHsgfQogCi12b2lkIEpTQmlnSW50Ojp2
aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0
ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0JpZ0ludDo6dmlzaXRDaGlsZHJlbkltcGwoSlND
ZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBq
c0Nhc3Q8SlNCaWdJbnQqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRo
aXNPYmplY3QsIGluZm8oKSk7CkBAIC03Niw2ICs3Nyw4IEBAIHZvaWQgSlNCaWdJbnQ6OnZpc2l0
Q2hpbGRyZW4oSlNDZWxsKiBjZWwKICAgICAgICAgdmlzaXRvci5tYXJrQXV4aWxpYXJ5KGRhdGEp
OwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNCaWdJbnQpOworCiB2b2lkIEpTQmlnSW50
Ojppbml0aWFsaXplKEluaXRpYWxpemF0aW9uVHlwZSBpbml0VHlwZSkKIHsKICAgICBpZiAoaW5p
dFR5cGUgPT0gSW5pdGlhbGl6YXRpb25UeXBlOjpXaXRoWmVybykKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTQmlnSW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNCaWdJbnQuaAkocmV2aXNpb24gMjcyMTkyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCaWdJbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNTAs
NyArNTAsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1
cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgU3RydWN0dXJlSXNJbW1vcnRhbCB8IE92
ZXJyaWRlc1RvVGhpczsKICAgICBmcmllbmQgY2xhc3MgQ2FjaGVkQmlnSW50OwogCi0gICAgc3Rh
dGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xB
UkVfVklTSVRfQ0hJTERSRU47CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vi
c3BhY2VBY2Nlc3M+CiAgICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0p
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JvdW5kRnVuY3Rpb24uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQm91bmRGdW5j
dGlvbi5jcHAJKHJldmlzaW9uIDI3MjE5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTQm91bmRGdW5jdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0OSw3ICsyNDksOCBA
QCB2b2lkIEpTQm91bmRGdW5jdGlvbjo6ZmluaXNoQ3JlYXRpb24oVk0mCiAgICAgQVNTRVJUKGlu
aGVyaXRzKHZtLCBpbmZvKCkpKTsKIH0KIAotdm9pZCBKU0JvdW5kRnVuY3Rpb246OnZpc2l0Q2hp
bGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVu
YW1lIFZpc2l0b3I+Cit2b2lkIEpTQm91bmRGdW5jdGlvbjo6dmlzaXRDaGlsZHJlbkltcGwoSlND
ZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTQm91bmRGdW5jdGlvbiogdGhp
c09iamVjdCA9IGpzQ2FzdDxKU0JvdW5kRnVuY3Rpb24qPihjZWxsKTsKICAgICBBU1NFUlRfR0Nf
T0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC0yNjEsNCArMjYyLDYgQEAg
dm9pZCBKU0JvdW5kRnVuY3Rpb246OnZpc2l0Q2hpbGRyZW4oSlNDZQogICAgIHZpc2l0b3IuYXBw
ZW5kKHRoaXNPYmplY3QtPm1fbmFtZU1heUJlTnVsbCk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElM
RFJFTihKU0JvdW5kRnVuY3Rpb24pOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQm91bmRGdW5jdGlvbi5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQm91bmRGdW5jdGlvbi5oCShyZXZpc2lv
biAyNzIxOTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JvdW5kRnVuY3Rp
b24uaAkod29ya2luZyBjb3B5KQpAQCAtODQsNyArODQsNyBAQCBwcml2YXRlOgogICAgIEpTQm91
bmRGdW5jdGlvbihWTSYsIE5hdGl2ZUV4ZWN1dGFibGUqLCBKU0dsb2JhbE9iamVjdCosIFN0cnVj
dHVyZSosIEpTT2JqZWN0KiB0YXJnZXRGdW5jdGlvbiwgSlNWYWx1ZSBib3VuZFRoaXMsIEpTSW1t
dXRhYmxlQnV0dGVyZmx5KiBib3VuZEFyZ3MsIEpTU3RyaW5nKiBuYW1lTWF5QmVOdWxsLCBkb3Vi
bGUgbGVuZ3RoKTsKIAogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKLSAgICBzdGF0aWMg
dm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9W
SVNJVF9DSElMRFJFTjsKIAogICAgIFdyaXRlQmFycmllcjxKU09iamVjdD4gbV90YXJnZXRGdW5j
dGlvbjsKICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4gbV9ib3VuZFRoaXM7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NhbGxlZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDYWxsZWUuY3BwCShyZXZpc2lvbiAyNzIxOTIp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NhbGxlZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTUwLDcgKzUwLDggQEAgdm9pZCBKU0NhbGxlZTo6ZmluaXNoQ3JlYXRpb24oVk0m
IHZtKQogICAgIEFTU0VSVChpbmhlcml0cyh2bSwgaW5mbygpKSk7CiB9CiAKLXZvaWQgSlNDYWxs
ZWU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3Rl
bXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTQ2FsbGVlOjp2aXNpdENoaWxkcmVuSW1w
bChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNDYWxsZWUqIHRoaXNP
YmplY3QgPSBqc0Nhc3Q8SlNDYWxsZWUqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lO
SEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC01OSw0ICs2MCw2IEBAIHZvaWQgSlNDYWxs
ZWU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWwKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2Jq
ZWN0LT5tX3Njb3BlKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTQ2FsbGVlKTsKKwog
fSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0NhbGxlZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
Q2FsbGVlLmgJKHJldmlzaW9uIDI3MjE5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTQ2FsbGVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMCw3ICsxMDAsNyBAQCBwcm90ZWN0
ZWQ6CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOwogICAgIHVzaW5nIEJhc2U6OmZpbmlz
aENyZWF0aW9uOwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90
VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKIHByaXZhdGU6CiAgICAg
ZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTQ2VsbC5oCShyZXZpc2lvbiAyNzIxOTIpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAkod29ya2luZyBjb3B5KQpAQCAtMSw3ICsxLDcgQEAK
IC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDEgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2Rl
Lm9yZykKICAqICBDb3B5cmlnaHQgKEMpIDIwMDEgUGV0ZXIgS2VsbHkgKHBta0Bwb3N0LmNvbSkK
LSAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRl
ICJKU0xvY2suaCIKICNpbmNsdWRlICJKU1R5cGVJbmZvLmgiCiAjaW5jbHVkZSAiU2xvdFZpc2l0
b3IuaCIKKyNpbmNsdWRlICJTbG90VmlzaXRvck1hY3Jvcy5oIgogI2luY2x1ZGUgIlN1YnNwYWNl
QWNjZXNzLmgiCiAjaW5jbHVkZSAiVHlwZWRBcnJheVR5cGUuaCIKICNpbmNsdWRlICJXcml0ZUJh
cnJpZXIuaCIKQEAgLTE2Nyw4ICsxNjgsOCBAQCBwdWJsaWM6CiAgICAgc2l6ZV90IGVzdGltYXRl
ZFNpemVJbkJ5dGVzKFZNJikgY29uc3Q7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHNp
emVfdCBlc3RpbWF0ZWRTaXplKEpTQ2VsbCosIFZNJik7CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNp
dENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRP
dXRwdXRDb25zdHJhaW50cyhKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfSU5M
SU5FX1ZJU0lUX0NISUxEUkVOOworICAgIHN0YXRpYyB2b2lkIHZpc2l0T3V0cHV0Q29uc3RyYWlu
dHMoSlNDZWxsKiwgQWJzdHJhY3RTbG90VmlzaXRvciYpOwogCiAgICAgSlNfRVhQT1JUX1BSSVZB
VEUgc3RhdGljIHZvaWQgYW5hbHl6ZUhlYXAoSlNDZWxsKiwgSGVhcEFuYWx5emVyJik7CiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbElubGluZXMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGxJbmxpbmVzLmgJKHJl
dmlzaW9uIDI3MjE5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbElu
bGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMjUsNiArMjUsNyBAQAogCiAjcHJhZ21hIG9uY2UK
IAorI2luY2x1ZGUgIkFic3RyYWN0U2xvdFZpc2l0b3JJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQWxs
b2NhdG9yRm9yTW9kZS5oIgogI2luY2x1ZGUgIkFsbG9jYXRvcklubGluZXMuaCIKICNpbmNsdWRl
ICJDb21wbGV0ZVN1YnNwYWNlSW5saW5lcy5oIgpAQCAtMTQxLDEyICsxNDIsMTUgQEAgQUxXQVlT
X0lOTElORSBTdHJ1Y3R1cmUqIEpTQ2VsbDo6c3RydWN0dQogICAgIHJldHVybiB2bS5nZXRTdHJ1
Y3R1cmUobV9zdHJ1Y3R1cmVJRCk7CiB9CiAKLWlubGluZSB2b2lkIEpTQ2VsbDo6dmlzaXRDaGls
ZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5h
bWUgVmlzaXRvcj4KK2lubGluZSB2b2lkIEpTQ2VsbDo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxs
KiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVy
ZWQoY2VsbC0+c3RydWN0dXJlKHZpc2l0b3Iudm0oKSkpOwogfQogCi1pbmxpbmUgdm9pZCBKU0Nl
bGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHMoSlNDZWxsKiwgU2xvdFZpc2l0b3ImKQorREVGSU5F
X0lOTElORV9WSVNJVF9DSElMRFJFTihKU0NlbGwpOworCitpbmxpbmUgdm9pZCBKU0NlbGw6OnZp
c2l0T3V0cHV0Q29uc3RyYWludHMoSlNDZWxsKiwgQWJzdHJhY3RTbG90VmlzaXRvciYpCiB7CiB9
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ3VzdG9tR2V0dGVyU2V0
dGVyRnVuY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTQ3VzdG9tR2V0dGVyU2V0dGVyRnVuY3Rpb24uY3BwCShyZXZpc2lvbiAyNzIxOTIpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0N1c3RvbUdldHRlclNldHRlckZ1bmN0
aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODUsNyArODUsOCBAQCBKU0N1c3RvbUdldHRlclNl
dHRlckZ1bmN0aW9uKiBKU0N1c3RvbUdlCiAgICAgcmV0dXJuIGZ1bmN0aW9uOwogfQogCi12b2lk
IEpTQ3VzdG9tR2V0dGVyU2V0dGVyRnVuY3Rpb246OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxs
LCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lk
IEpTQ3VzdG9tR2V0dGVyU2V0dGVyRnVuY3Rpb246OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCog
Y2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU0N1c3RvbUdldHRlclNldHRlckZ1bmN0
aW9uKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQ3VzdG9tR2V0dGVyU2V0dGVyRnVuY3Rpb24qPihj
ZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7
CkBAIC05NCw2ICs5NSw4IEBAIHZvaWQgSlNDdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbjo6dmlz
aXQKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2dldHRlclNldHRlcik7CiB9CiAK
K0RFRklORV9WSVNJVF9DSElMRFJFTihKU0N1c3RvbUdldHRlclNldHRlckZ1bmN0aW9uKTsKKwog
dm9pZCBKU0N1c3RvbUdldHRlclNldHRlckZ1bmN0aW9uOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0s
IE5hdGl2ZUV4ZWN1dGFibGUqIGV4ZWN1dGFibGUsIEN1c3RvbUdldHRlclNldHRlciogZ2V0dGVy
U2V0dGVyLCBjb25zdCBTdHJpbmcmIG5hbWUpCiB7CiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24o
dm0sIGV4ZWN1dGFibGUsIGlzU2V0dGVyKCksIG5hbWUpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNDdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbi5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ3VzdG9tR2V0dGVyU2V0dGVyRnVu
Y3Rpb24uaAkocmV2aXNpb24gMjcyMTkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNDdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC02Myw3
ICs2Myw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgSlNDdXN0b21HZXR0ZXJTZXR0ZXJGdW5j
dGlvbihWTSYsIE5hdGl2ZUV4ZWN1dGFibGUqLCBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSos
IFR5cGUsIGNvbnN0IFByb3BlcnR5TmFtZSYpOwogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0m
LCBOYXRpdmVFeGVjdXRhYmxlKiwgQ3VzdG9tR2V0dGVyU2V0dGVyKiwgY29uc3QgU3RyaW5nJik7
Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwor
ICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBXcml0ZUJhcnJpZXI8Q3VzdG9tR2V0
dGVyU2V0dGVyPiBtX2dldHRlclNldHRlcjsKICAgICBUeXBlIG1fdHlwZTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRmluYWxpemF0aW9uUmVnaXN0cnkuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRmluYWxpemF0aW9uUmVn
aXN0cnkuY3BwCShyZXZpc2lvbiAyNzIxOTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0ZpbmFsaXphdGlvblJlZ2lzdHJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiAr
MjYsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkpTRmluYWxpemF0aW9uUmVn
aXN0cnkuaCIKIAorI2luY2x1ZGUgIkFic3RyYWN0U2xvdFZpc2l0b3IuaCIKICNpbmNsdWRlICJE
ZWZlcnJlZFdvcmtUaW1lci5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJK
U0ludGVybmFsRmllbGRPYmplY3RJbXBsSW5saW5lcy5oIgpAQCAtNjAsNyArNjEsOCBAQCB2b2lk
IEpTRmluYWxpemF0aW9uUmVnaXN0cnk6OmZpbmlzaENyZWF0CiAgICAgZ2xvYmFsT2JqZWN0LT5n
bG9iYWxPYmplY3RNZXRob2RUYWJsZSgpLT5jdXJyZW50U2NyaXB0RXhlY3V0aW9uT3duZXIoZ2xv
YmFsT2JqZWN0KTsKIH0KIAotdm9pZCBKU0ZpbmFsaXphdGlvblJlZ2lzdHJ5Ojp2aXNpdENoaWxk
cmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBWaXNpdG9yPgordm9pZCBKU0ZpbmFsaXphdGlvblJlZ2lzdHJ5Ojp2aXNpdENoaWxkcmVuSW1w
bChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgQmFzZTo6dmlzaXRDaGls
ZHJlbihjZWxsLCB2aXNpdG9yKTsKIApAQCAtODAsMTMgKzgyLDE1IEBAIHZvaWQgSlNGaW5hbGl6
YXRpb25SZWdpc3RyeTo6dmlzaXRDaGlsZHIKICAgICBmb3IgKGF1dG8mIGhvbGRpbmdzIDogdGhp
c09iamVjdC0+bV9ub1VucmVnaXN0cmF0aW9uRGVhZCkKICAgICAgICAgdmlzaXRvci5hcHBlbmQo
aG9sZGluZ3MpOwogCi0gICAgc2l6ZV90IHRvdGFsQnVmZmVyU2l6ZXNJbkJ5dGVzID0gdGhpc09i
amVjdC0+bV9kZWFkUmVnaXN0cmF0aW9ucy5jYXBhY2l0eSgpICogc2l6ZW9mKGRlY2x0eXBlKHRo
aXNPYmplY3QtPm1fZGVhZFJlZ2lzdHJhdGlvbnMpOjpLZXlWYWx1ZVBhaXJUeXBlKTsKLSAgICB0
b3RhbEJ1ZmZlclNpemVzSW5CeXRlcyArPSB0aGlzT2JqZWN0LT5tX2xpdmVSZWdpc3RyYXRpb25z
LmNhcGFjaXR5KCkgKiBzaXplb2YoZGVjbHR5cGUodGhpc09iamVjdC0+bV9kZWFkUmVnaXN0cmF0
aW9ucyk6OktleVZhbHVlUGFpclR5cGUpOworICAgIHNpemVfdCB0b3RhbEJ1ZmZlclNpemVzSW5C
eXRlcyA9IHRoaXNPYmplY3QtPm1fZGVhZFJlZ2lzdHJhdGlvbnMuY2FwYWNpdHkoKSAqIHNpemVv
Zih0eXBlbmFtZSBkZWNsdHlwZSh0aGlzT2JqZWN0LT5tX2RlYWRSZWdpc3RyYXRpb25zKTo6S2V5
VmFsdWVQYWlyVHlwZSk7CisgICAgdG90YWxCdWZmZXJTaXplc0luQnl0ZXMgKz0gdGhpc09iamVj
dC0+bV9saXZlUmVnaXN0cmF0aW9ucy5jYXBhY2l0eSgpICogc2l6ZW9mKHR5cGVuYW1lIGRlY2x0
eXBlKHRoaXNPYmplY3QtPm1fZGVhZFJlZ2lzdHJhdGlvbnMpOjpLZXlWYWx1ZVBhaXJUeXBlKTsK
ICAgICB0b3RhbEJ1ZmZlclNpemVzSW5CeXRlcyArPSB0aGlzT2JqZWN0LT5tX25vVW5yZWdpc3Ry
YXRpb25MaXZlLmNhcGFjaXR5KCkgKiBzaXplb2YoZGVjbHR5cGUodGhpc09iamVjdC0+bV9ub1Vu
cmVnaXN0cmF0aW9uTGl2ZS50YWtlTGFzdCgpKSk7CiAgICAgdG90YWxCdWZmZXJTaXplc0luQnl0
ZXMgKz0gdGhpc09iamVjdC0+bV9ub1VucmVnaXN0cmF0aW9uRGVhZC5jYXBhY2l0eSgpICogc2l6
ZW9mKGRlY2x0eXBlKHRoaXNPYmplY3QtPm1fbm9VbnJlZ2lzdHJhdGlvbkxpdmUudGFrZUxhc3Qo
KSkpOwogICAgIHZpc2l0b3Iudm0oKS5oZWFwLnJlcG9ydEV4dHJhTWVtb3J5VmlzaXRlZCh0b3Rh
bEJ1ZmZlclNpemVzSW5CeXRlcyk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU0ZpbmFs
aXphdGlvblJlZ2lzdHJ5KTsKKwogdm9pZCBKU0ZpbmFsaXphdGlvblJlZ2lzdHJ5OjpkZXN0cm95
KEpTQ2VsbCogdGFibGUpCiB7CiAgICAgc3RhdGljX2Nhc3Q8SlNGaW5hbGl6YXRpb25SZWdpc3Ry
eSo+KHRhYmxlKS0+fkpTRmluYWxpemF0aW9uUmVnaXN0cnkoKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTRmluYWxpemF0aW9uUmVnaXN0cnkuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ZpbmFsaXphdGlvblJlZ2lzdHJ5LmgJ
KHJldmlzaW9uIDI3MjE5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRmlu
YWxpemF0aW9uUmVnaXN0cnkuaAkod29ya2luZyBjb3B5KQpAQCAtNzAsNyArNzAsNyBAQCBwdWJs
aWM6CiAgICAgREVDTEFSRV9FWFBPUlRfSU5GTzsKIAogICAgIHZvaWQgZmluYWxpemVVbmNvbmRp
dGlvbmFsbHkoVk0mKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNs
b3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKICAgICBzdGF0aWMgdm9p
ZCBkZXN0cm95KEpTQ2VsbCopOwogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0Rlc3Ry
dWN0aW9uID0gdHJ1ZTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNG
dW5jdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNGdW5jdGlvbi5jcHAJKHJldmlzaW9uIDI3MjE5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTRnVuY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTIsNyArMjUyLDgg
QEAgY29uc3QgU291cmNlQ29kZSogSlNGdW5jdGlvbjo6c291cmNlQ29kZQogICAgIHJldHVybiAm
anNFeGVjdXRhYmxlKCktPnNvdXJjZSgpOwogfQogICAgIAotdm9pZCBKU0Z1bmN0aW9uOjp2aXNp
dENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0
eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0Z1bmN0aW9uOjp2aXNpdENoaWxkcmVuSW1wbChKU0Nl
bGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNGdW5jdGlvbiogdGhpc09iamVj
dCA9IGpzQ2FzdDxKU0Z1bmN0aW9uKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhF
UklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtMjYxLDYgKzI2Miw4IEBAIHZvaWQgSlNGdW5j
dGlvbjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGMKICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmll
cmVkKGJpdHdpc2VfY2FzdDxKU0NlbGwqPihiaXR3aXNlX2Nhc3Q8dWludHB0cl90Pih0aGlzT2Jq
ZWN0LT5tX2V4ZWN1dGFibGVPclJhcmVEYXRhKSAmIH5yYXJlRGF0YVRhZykpOwogfQogCitERUZJ
TkVfVklTSVRfQ0hJTERSRU4oSlNGdW5jdGlvbik7CisKIENhbGxEYXRhIEpTRnVuY3Rpb246Omdl
dENhbGxEYXRhKEpTQ2VsbCogY2VsbCkKIHsKICAgICAvLyBLZWVwIHRoaXMgZnVuY3Rpb24gT0sg
Zm9yIGludm9jYXRpb24gZnJvbSBjb25jdXJyZW50IGNvbXBpbGVycy4KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmgJKHJldmlzaW9uIDI3MjE5MikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uaAkod29ya2luZyBjb3B5
KQpAQCAtMTgwLDcgKzE4MCw3IEBAIHByb3RlY3RlZDoKIAogICAgIHN0YXRpYyBib29sIGRlbGV0
ZVByb3BlcnR5KEpTQ2VsbCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBEZWxldGVQ
cm9wZXJ0eVNsb3QmKTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwg
U2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiBwcml2YXRlOgog
ICAgIHN0YXRpYyBKU0Z1bmN0aW9uKiBjcmVhdGVJbXBsKFZNJiB2bSwgRnVuY3Rpb25FeGVjdXRh
YmxlKiBleGVjdXRhYmxlLCBKU1Njb3BlKiBzY29wZSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyYXRvci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmF0b3IuY3BwCShy
ZXZpc2lvbiAyNzIxOTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVy
YXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU5LDExICs1OSwxNCBAQCB2b2lkIEpTR2VuZXJh
dG9yOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCiAgICAgICAgIGludGVybmFsRmllbGQoaW5kZXgp
LnNldCh2bSwgdGhpcywgdmFsdWVzW2luZGV4XSk7CiB9CiAKLXZvaWQgSlNHZW5lcmF0b3I6OnZp
c2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRl
PHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTR2VuZXJhdG9yOjp2aXNpdENoaWxkcmVuSW1wbChK
U0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0byogdGhpc09iamVjdCA9
IGpzQ2FzdDxKU0dlbmVyYXRvcio+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJ
VFModGhpc09iamVjdCwgaW5mbygpKTsKICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmpl
Y3QsIHZpc2l0b3IpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNHZW5lcmF0b3IpOwor
CiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTR2VuZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNHZW5lcmF0b3IuaAkocmV2aXNpb24gMjcyMTkyKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNHZW5lcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtOTQsNyArOTQsNyBA
QCBwdWJsaWM6CiAKICAgICBERUNMQVJFX0VYUE9SVF9JTkZPOwogCi0gICAgc3RhdGljIHZvaWQg
dmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRf
Q0hJTERSRU47CiAKIHByaXZhdGU6CiAgICAgSlNHZW5lcmF0b3IoVk0mLCBTdHJ1Y3R1cmUqKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlW
aWV3LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5l
cmljVHlwZWRBcnJheVZpZXcuaAkocmV2aXNpb24gMjcyMTkyKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXcuaAkod29ya2luZyBjb3B5KQpA
QCAtMzEzLDcgKzMxMyw3IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVy
dHlOYW1lcyhKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lQXJyYXkmLCBE
b250RW51bVByb3BlcnRpZXNNb2RlKTsKIAogICAgIHN0YXRpYyBzaXplX3QgZXN0aW1hdGVkU2l6
ZShKU0NlbGwqLCBWTSYpOwotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwg
U2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1RFTVBMQVRFX1ZJU0lUX0NISUxEUkVOOwogCiAg
ICAgLy8gUmV0dXJucyB0cnVlIGlmIHN1Y2Nlc3NmdWwsIGFuZCBmYWxzZSBvbiBlcnJvcjsgaXQg
d2lsbCB0aHJvdyBvbiBlcnJvci4KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPdGhlckFkYXB0b3I+
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5
Vmlld0lubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaAkocmV2aXNpb24gMjcyMTkyKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxp
bmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxNyw3ICs1MTcsOCBAQCBzaXplX3QgSlNHZW5lcmlj
VHlwZWRBcnJheVZpZXc8QWRhcHRvcj46CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+
Ci12b2lkIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+Ojp2aXNpdENoaWxkcmVuKEpT
Q2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNp
dG9yPgordm9pZCBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6dmlzaXRDaGlsZHJl
bkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTR2VuZXJpY1R5
cGVkQXJyYXlWaWV3KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3
Kj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZv
KCkpOwpAQCAtNTU1LDQgKzU1Niw2IEBAIHZvaWQgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRh
cHRvcj46OnYKICAgICB9CiB9CiAKK0RFRklORV9URU1QTEFURV9WSVNJVF9DSElMRFJFTih0ZW1w
bGF0ZTx0eXBlbmFtZSBBZGFwdG9yPiwgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj4p
OworCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAJKHJldmlzaW9uIDI3MjE5MikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTg5NSw3ICsxODk1LDggQEAgdm9pZCBKU0dsb2JhbE9iamVjdDo6cmVzZXRQcm90b3R5
cGUoVk0mIAogICAgIHNldEdsb2JhbFRoaXModm0sIEpTUHJveHk6OmNyZWF0ZSh2bSwgSlNQcm94
eTo6Y3JlYXRlU3RydWN0dXJlKHZtLCB0aGlzLCBwcm90b3R5cGUsIFB1cmVGb3J3YXJkaW5nUHJv
eHlUeXBlKSwgdGhpcykpOwogfQogCi12b2lkIEpTR2xvYmFsT2JqZWN0Ojp2aXNpdENoaWxkcmVu
KEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPgordm9pZCBKU0dsb2JhbE9iamVjdDo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBj
ZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogeyAKICAgICBKU0dsb2JhbE9iamVjdCogdGhpc09iamVj
dCA9IGpzQ2FzdDxKU0dsb2JhbE9iamVjdCo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1Rf
SU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTIwNjMsNiArMjA2NCw4IEBAIHZvaWQg
SlNHbG9iYWxPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWwKICAgICB0aGlzT2JqZWN0LT5tX3Jl
Z0V4cEdsb2JhbERhdGEudmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7CiB9CiAKK0RFRklORV9FWFBP
UlRfVklTSVRfQ0hJTERSRU4oSlNHbG9iYWxPYmplY3QpOworCiBDYWxsRnJhbWUqIEpTR2xvYmFs
T2JqZWN0OjpkZXByZWNhdGVkQ2FsbEZyYW1lRm9yRGVidWdnZXIoKQogewogICAgIHJldHVybiBD
YWxsRnJhbWU6OmNyZWF0ZShtX2RlcHJlY2F0ZWRDYWxsRnJhbWVGb3JEZWJ1Z2dlcik7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgJKHJl
dmlzaW9uIDI3MjE5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFs
T2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTYwOSw3ICs2MDksNyBAQCBwdWJsaWM6CiAgICAg
SlNfRVhQT1JUX1BSSVZBVEUgfkpTR2xvYmFsT2JqZWN0KCk7CiAgICAgSlNfRVhQT1JUX1BSSVZB
VEUgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKIAotICAgIEpTX0VYUE9SVF9QUklWQVRF
IHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBE
RUNMQVJFX0VYUE9SVF9WSVNJVF9DSElMRFJFTjsKIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0
YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0Kiwg
UHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0
aWMgYm9vbCBwdXQoSlNDZWxsKiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIEpTVmFs
dWUsIFB1dFByb3BlcnR5U2xvdCYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNJbW11dGFibGVCdXR0ZXJmbHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTSW1tdXRhYmxlQnV0dGVyZmx5LmNwcAkocmV2aXNpb24gMjcyMTky
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbW11dGFibGVCdXR0ZXJmbHku
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw4IEBAIG5hbWVzcGFjZSBKU0MgewogCiBj
b25zdCBDbGFzc0luZm8gSlNJbW11dGFibGVCdXR0ZXJmbHk6OnNfaW5mbyA9IHsgIkltbXV0YWJs
ZSBCdXR0ZXJmbHkiLCBudWxscHRyLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RB
QkxFKEpTSW1tdXRhYmxlQnV0dGVyZmx5KSB9OwogCi12b2lkIEpTSW1tdXRhYmxlQnV0dGVyZmx5
Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1w
bGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0ltbXV0YWJsZUJ1dHRlcmZseTo6dmlzaXRD
aGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEFTU0VS
VF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2VsbCwgaW5mbygpKTsKICAgICBCYXNlOjp2aXNpdENoaWxk
cmVuKGNlbGwsIHZpc2l0b3IpOwpAQCAtNDUsNiArNDYsOCBAQCB2b2lkIEpTSW1tdXRhYmxlQnV0
dGVyZmx5Ojp2aXNpdENoaWxkcmVuCiAgICAgdmlzaXRvci5hcHBlbmRWYWx1ZXNIaWRkZW4oYnV0
dGVyZmx5LT5jb250aWd1b3VzKCkuZGF0YSgpLCBidXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpKTsK
IH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTSW1tdXRhYmxlQnV0dGVyZmx5KTsKKwogdm9p
ZCBKU0ltbXV0YWJsZUJ1dHRlcmZseTo6Y29weVRvQXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0Kiwg
SlNWYWx1ZSogZmlyc3RFbGVtZW50RGVzdCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5n
dGgpCiB7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ltbXV0YWJsZUJ1dHRlcmZseS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTSW1tdXRhYmxlQnV0
dGVyZmx5LmgJKHJldmlzaW9uIDI3MjE5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTSW1tdXRhYmxlQnV0dGVyZmx5LmgJKHdvcmtpbmcgY29weSkKQEAgLTE0NSw3ICsxNDUs
NyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBqc0RvdWJsZU51bWJlcih2YWx1ZSk7CiAgICAg
fQogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYp
OworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICB2b2lkIGNvcHlUb0FyZ3VtZW50
cyhKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUqIGZpcnN0RWxlbWVudERlc3QsIHVuc2lnbmVkIG9m
ZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTSW50ZXJuYWxGaWVsZE9iamVjdEltcGwuaAkocmV2aXNp
b24gMjcyMTkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbnRlcm5hbEZp
ZWxkT2JqZWN0SW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC02Niw3ICs2Niw3IEBAIHB1YmxpYzoK
ICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mSW50ZXJuYWxGaWVsZCh1bnNpZ25lZCBpbmRl
eCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTSW50ZXJuYWxGaWVsZE9iamVjdEltcGwsIG1f
aW50ZXJuYWxGaWVsZHMpICsgaW5kZXggKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KTsg
fQogCiBwcm90ZWN0ZWQ6Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBT
bG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVEVNUExBVEVfVklTSVRfQ0hJTERSRU47CiAKICAg
ICBKU0ludGVybmFsRmllbGRPYmplY3RJbXBsKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUp
CiAgICAgICAgIDogQmFzZSh2bSwgc3RydWN0dXJlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbElubGluZXMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ludGVybmFsRmllbGRPYmplY3RJ
bXBsSW5saW5lcy5oCShyZXZpc2lvbiAyNzIxOTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0ludGVybmFsRmllbGRPYmplY3RJbXBsSW5saW5lcy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zMCw3ICszMCw4IEBACiBuYW1lc3BhY2UgSlNDIHsKIAogdGVtcGxhdGU8dW5zaWduZWQg
cGFzc2VkTnVtYmVyT2ZJbnRlcm5hbEZpZWxkcz4KLXZvaWQgSlNJbnRlcm5hbEZpZWxkT2JqZWN0
SW1wbDxwYXNzZWROdW1iZXJPZkludGVybmFsRmllbGRzPjo6dmlzaXRDaGlsZHJlbihKU0NlbGwq
IGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4K
K3ZvaWQgSlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbDxwYXNzZWROdW1iZXJPZkludGVybmFsRmll
bGRzPjo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQog
ewogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1w
bCo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5m
bygpKTsKQEAgLTM4LDQgKzM5LDYgQEAgdm9pZCBKU0ludGVybmFsRmllbGRPYmplY3RJbXBsPHBh
c3NlZE51bQogICAgIHZpc2l0b3IuYXBwZW5kVmFsdWVzKHRoaXNPYmplY3QtPm1faW50ZXJuYWxG
aWVsZHMsIG51bWJlck9mSW50ZXJuYWxGaWVsZHMpOwogfQogCitERUZJTkVfVEVNUExBVEVfVklT
SVRfQ0hJTERSRU4odGVtcGxhdGU8dW5zaWduZWQgcGFzc2VkTnVtYmVyT2ZJbnRlcm5hbEZpZWxk
cz4sIEpTSW50ZXJuYWxGaWVsZE9iamVjdEltcGw8cGFzc2VkTnVtYmVyT2ZJbnRlcm5hbEZpZWxk
cz4pOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTTGV4aWNhbEVudmlyb25tZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0xleGljYWxFbnZpcm9ubWVudC5jcHAJKHJldmlzaW9uIDI3
MjE5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTGV4aWNhbEVudmlyb25t
ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsOCBAQCBuYW1lc3BhY2UgSlNDIHsK
IAogY29uc3QgQ2xhc3NJbmZvIEpTTGV4aWNhbEVudmlyb25tZW50OjpzX2luZm8gPSB7ICJKU0xl
eGljYWxFbnZpcm9ubWVudCIsICZCYXNlOjpzX2luZm8sIG51bGxwdHIsIG51bGxwdHIsIENSRUFU
RV9NRVRIT0RfVEFCTEUoSlNMZXhpY2FsRW52aXJvbm1lbnQpIH07CiAKLXZvaWQgSlNMZXhpY2Fs
RW52aXJvbm1lbnQ6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlz
aXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTTGV4aWNhbEVudmlyb25t
ZW50Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7
CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0xleGljYWxFbnZpcm9ubWVudCo+KGNl
bGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsK
QEAgLTQ0LDYgKzQ1LDggQEAgdm9pZCBKU0xleGljYWxFbnZpcm9ubWVudDo6dmlzaXRDaGlsZHJl
bgogICAgIHZpc2l0b3IuYXBwZW5kVmFsdWVzSGlkZGVuKHRoaXNPYmplY3QtPnZhcmlhYmxlcygp
LCB0aGlzT2JqZWN0LT5zeW1ib2xUYWJsZSgpLT5zY29wZVNpemUoKSk7CiB9CiAKK0RFRklORV9W
SVNJVF9DSElMRFJFTihKU0xleGljYWxFbnZpcm9ubWVudCk7CisKIHZvaWQgSlNMZXhpY2FsRW52
aXJvbm1lbnQ6OmFuYWx5emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFuYWx5emVyJiBhbmFseXpl
cikKIHsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTTGV4aWNhbEVudmlyb25tZW50
Kj4oY2VsbCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xleGljYWxF
bnZpcm9ubWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTTGV4aWNhbEVudmlyb25tZW50LmgJKHJldmlzaW9uIDI3MjE5MikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTTGV4aWNhbEVudmlyb25tZW50LmgJKHdvcmtpbmcgY29weSkK
QEAgLTEzNCw3ICsxMzQsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBz
dGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVD
TEFSRV9WSVNJVF9DSElMRFJFTjsKICAgICBzdGF0aWMgdm9pZCBhbmFseXplSGVhcChKU0NlbGwq
LCBIZWFwQW5hbHl6ZXImKTsKIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTTWFwSXRlcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTTWFwSXRlcmF0b3IuY3BwCShyZXZpc2lvbiAyNzIxOTIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01hcEl0ZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNTcsMTMgKzU3LDE2IEBAIHZvaWQgSlNNYXBJdGVyYXRvcjo6ZmluaXNoQ3JlYXRpb24oVk0m
IHYKICAgICAgICAgQmFzZTo6aW50ZXJuYWxGaWVsZChpbmRleCkuc2V0KHZtLCB0aGlzLCB2YWx1
ZXNbaW5kZXhdKTsKIH0KIAotdm9pZCBKU01hcEl0ZXJhdG9yOjp2aXNpdENoaWxkcmVuKEpTQ2Vs
bCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
Pgordm9pZCBKU01hcEl0ZXJhdG9yOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZp
c2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU01hcEl0
ZXJhdG9yKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0
LCBpbmZvKCkpOwogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7
CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU01hcEl0ZXJhdG9yKTsKKwogSlNWYWx1ZSBK
U01hcEl0ZXJhdG9yOjpjcmVhdGVQYWlyKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpT
VmFsdWUga2V5LCBKU1ZhbHVlIHZhbHVlKQogewogICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFy
Z3M7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01hcEl0ZXJhdG9yLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNYXBJdGVyYXRv
ci5oCShyZXZpc2lvbiAyNzIxOTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U01hcEl0ZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0Miw3ICsxNDIsNyBAQCBwcml2YXRl
OgogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBKU01hcCos
IEl0ZXJhdGlvbktpbmQpOwogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKICAgICBKU1Zh
bHVlIGNyZWF0ZVBhaXIoSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlLCBKU1ZhbHVlKTsKLSAgICBz
dGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVD
TEFSRV9WSVNJVF9DSElMRFJFTjsKIH07CiBTVEFUSUNfQVNTRVJUX0lTX1RSSVZJQUxMWV9ERVNU
UlVDVElCTEUoSlNNYXBJdGVyYXRvcik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTTW9kdWxlRW52aXJvbm1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlRW52aXJvbm1lbnQuY3BwCShyZXZpc2lvbiAyNzIx
OTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZUVudmlyb25tZW50
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjUsNyArNjUsOCBAQCB2b2lkIEpTTW9kdWxlRW52aXJv
bm1lbnQ6OmZpbmlzaENyZWF0aW9uCiAgICAgdGhpcy0+bW9kdWxlUmVjb3JkU2xvdCgpLnNldCh2
bSwgdGhpcywgbW9kdWxlUmVjb3JkKTsKIH0KIAotdm9pZCBKU01vZHVsZUVudmlyb25tZW50Ojp2
aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0
ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU01vZHVsZUVudmlyb25tZW50Ojp2aXNpdENoaWxk
cmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNNb2R1bGVF
bnZpcm9ubWVudCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU01vZHVsZUVudmlyb25tZW50Kj4oY2Vs
bCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpA
QCAtNzQsNiArNzUsOCBAQCB2b2lkIEpTTW9kdWxlRW52aXJvbm1lbnQ6OnZpc2l0Q2hpbGRyZW4o
CiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bW9kdWxlUmVjb3JkU2xvdCgpKTsKIH0K
IAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTTW9kdWxlRW52aXJvbm1lbnQpOworCiBib29sIEpT
TW9kdWxlRW52aXJvbm1lbnQ6OmdldE93blByb3BlcnR5U2xvdChKU09iamVjdCogY2VsbCwgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJv
cGVydHlTbG90JiBzbG90KQogewogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlRW52aXJvbm1lbnQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZUVudmly
b25tZW50LmgJKHJldmlzaW9uIDI3MjE5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTTW9kdWxlRW52aXJvbm1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtODksNyArODksNyBA
QCBwcml2YXRlOgogICAgICAgICByZXR1cm4gKmJpdHdpc2VfY2FzdDxXcml0ZUJhcnJpZXJCYXNl
PEFic3RyYWN0TW9kdWxlUmVjb3JkPio+KGJpdHdpc2VfY2FzdDxjaGFyKj4odGhpcykgKyBvZmZz
ZXRPZk1vZHVsZVJlY29yZChzeW1ib2xUYWJsZSgpKSk7CiAgICAgfQogCi0gICAgc3RhdGljIHZv
aWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklT
SVRfQ0hJTERSRU47CiB9OwogCiBpbmxpbmUgSlNNb2R1bGVFbnZpcm9ubWVudDo6SlNNb2R1bGVF
bnZpcm9ubWVudChWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU1Njb3BlKiBjdXJyZW50
U2NvcGUsIFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTTW9kdWxlTmFtZXNwYWNlT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZU5hbWVzcGFjZU9iamVjdC5jcHAJ
KHJldmlzaW9uIDI3MjE5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9k
dWxlTmFtZXNwYWNlT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODUsNyArODUsOCBAQCB2
b2lkIEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0OjpkZXN0cm95KEpTCiAgICAgdGhpc09iamVjdC0+
SlNNb2R1bGVOYW1lc3BhY2VPYmplY3Q6On5KU01vZHVsZU5hbWVzcGFjZU9iamVjdCgpOwogfQog
Ci12b2lkIEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2Vs
bCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9p
ZCBKU01vZHVsZU5hbWVzcGFjZU9iamVjdDo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxs
LCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0KiB0aGlz
T2JqZWN0ID0ganNDYXN0PEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0Kj4oY2VsbCk7CiAgICAgQVNT
RVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtOTgsNiArOTks
OCBAQCB2b2lkIEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0Ojp2aXNpdENoaWxkCiAgICAgfQogfQog
CitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QpOworCiBzdGF0
aWMgSlNWYWx1ZSBnZXRWYWx1ZShKU01vZHVsZUVudmlyb25tZW50KiBlbnZpcm9ubWVudCwgUHJv
cGVydHlOYW1lIGxvY2FsTmFtZSwgU2NvcGVPZmZzZXQmIHNjb3BlT2Zmc2V0KQogewogICAgIFN5
bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSA9IGVudmlyb25tZW50LT5zeW1ib2xUYWJsZSgpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVOYW1lc3BhY2VPYmplY3Qu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZU5h
bWVzcGFjZU9iamVjdC5oCShyZXZpc2lvbiAyNzIxOTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU01vZHVsZU5hbWVzcGFjZU9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC03
Miw3ICs3Miw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgSlNN
b2R1bGVOYW1lc3BhY2VPYmplY3QoVk0mLCBTdHJ1Y3R1cmUqKTsKICAgICBKU19FWFBPUlRfUFJJ
VkFURSB2b2lkIGZpbmlzaENyZWF0aW9uKEpTR2xvYmFsT2JqZWN0KiwgQWJzdHJhY3RNb2R1bGVS
ZWNvcmQqLCBWZWN0b3I8c3RkOjpwYWlyPElkZW50aWZpZXIsIEFic3RyYWN0TW9kdWxlUmVjb3Jk
OjpSZXNvbHV0aW9uPj4mJik7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwq
LCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAgICAgYm9vbCBn
ZXRPd25Qcm9wZXJ0eVNsb3RDb21tb24oSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIFBy
b3BlcnR5U2xvdCYpOwogCiAgICAgc3RydWN0IEV4cG9ydEVudHJ5IHsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlUmVjb3JkLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZVJlY29yZC5jcHAJKHJldmlzaW9u
IDI3MjE5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlUmVjb3Jk
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzAsNyArNzAsOCBAQCB2b2lkIEpTTW9kdWxlUmVjb3Jk
OjpmaW5pc2hDcmVhdGlvbihKU0dsCiAgICAgQVNTRVJUKGluaGVyaXRzKHZtLCBpbmZvKCkpKTsK
IH0KIAotdm9pZCBKU01vZHVsZVJlY29yZDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNN
b2R1bGVSZWNvcmQ6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlz
aXRvcikKIHsKICAgICBKU01vZHVsZVJlY29yZCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU01vZHVs
ZVJlY29yZCo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVj
dCwgaW5mbygpKTsKQEAgLTc4LDYgKzc5LDggQEAgdm9pZCBKU01vZHVsZVJlY29yZDo6dmlzaXRD
aGlsZHJlbihKU0NlbAogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fbW9kdWxlUHJv
Z3JhbUV4ZWN1dGFibGUpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNNb2R1bGVSZWNv
cmQpOworCiB2b2lkIEpTTW9kdWxlUmVjb3JkOjpsaW5rKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEpTVmFsdWUgc2NyaXB0RmV0Y2hlcikKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmpl
Y3QtPnZtKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZVJl
Y29yZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9k
dWxlUmVjb3JkLmgJKHJldmlzaW9uIDI3MjE5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTTW9kdWxlUmVjb3JkLmgJKHdvcmtpbmcgY29weSkKQEAgLTY2LDcgKzY2LDcgQEAg
cHJpdmF0ZToKIAogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxPYmplY3QqLCBWTSYp
OwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYp
OworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICB2b2lkIGluc3RhbnRpYXRlRGVj
bGFyYXRpb25zKEpTR2xvYmFsT2JqZWN0KiwgTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUqLCBKU1Zh
bHVlIHNjcmlwdEZldGNoZXIpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU05hdGl2ZVN0ZEZ1bmN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU05hdGl2ZVN0ZEZ1bmN0aW9uLmNwcAkocmV2aXNpb24gMjcyMTkyKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNOYXRpdmVTdGRGdW5jdGlvbi5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQxLDEzICs0MSwxNiBAQCBKU05hdGl2ZVN0ZEZ1bmN0aW9uOjpK
U05hdGl2ZVN0ZEZ1bmN0aW9uCiB7CiB9CiAKLXZvaWQgSlNOYXRpdmVTdGRGdW5jdGlvbjo6dmlz
aXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8
dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNOYXRpdmVTdGRGdW5jdGlvbjo6dmlzaXRDaGlsZHJl
bkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTTmF0aXZlU3Rk
RnVuY3Rpb24qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNOYXRpdmVTdGRGdW5jdGlvbio+KGNlbGwp
OwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKICAg
ICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwogfQogCitERUZJTkVf
VklTSVRfQ0hJTERSRU4oSlNOYXRpdmVTdGRGdW5jdGlvbik7CisKIHZvaWQgSlNOYXRpdmVTdGRG
dW5jdGlvbjo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBOYXRpdmVFeGVjdXRhYmxlKiBleGVjdXRh
YmxlLCB1bnNpZ25lZCBsZW5ndGgsIGNvbnN0IFN0cmluZyYgbmFtZSkKIHsKICAgICBCYXNlOjpm
aW5pc2hDcmVhdGlvbih2bSwgZXhlY3V0YWJsZSwgbGVuZ3RoLCBuYW1lKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTmF0aXZlU3RkRnVuY3Rpb24uaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU05hdGl2ZVN0ZEZ1bmN0aW9uLmgJ
KHJldmlzaW9uIDI3MjE5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTmF0
aXZlU3RkRnVuY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtNjUsNyArNjUsNyBAQCBwdWJsaWM6
CiBwcml2YXRlOgogICAgIEpTTmF0aXZlU3RkRnVuY3Rpb24oVk0mLCBOYXRpdmVFeGVjdXRhYmxl
KiwgSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqLCBOYXRpdmVTdGRGdW5jdGlvbiYmKTsKICAg
ICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgTmF0aXZlRXhlY3V0YWJsZSosIHVuc2lnbmVkIGxl
bmd0aCwgY29uc3QgU3RyaW5nJiBuYW1lKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVu
KEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAog
ICAgIE5hdGl2ZVN0ZEZ1bmN0aW9uIG1fZnVuY3Rpb247CiB9OwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAkocmV2aXNpb24gMjcyMTkyKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC03Miw3ICs3Miw4IEBAIGNvbnN0IENsYXNzSW5mbyBKU09iamVjdDo6c19pbmZvID0geyAiT2IK
IAogY29uc3QgQ2xhc3NJbmZvIEpTRmluYWxPYmplY3Q6OnNfaW5mbyA9IHsgIk9iamVjdCIsICZC
YXNlOjpzX2luZm8sIG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNGaW5h
bE9iamVjdCkgfTsKIAotQUxXQVlTX0lOTElORSB2b2lkIEpTT2JqZWN0OjptYXJrQXV4aWxpYXJ5
QW5kVmlzaXRPdXRPZkxpbmVQcm9wZXJ0aWVzKFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBCdXR0ZXJm
bHkqIGJ1dHRlcmZseSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IG1heE9m
ZnNldCkKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+CitBTFdBWVNfSU5MSU5FIHZvaWQgSlNP
YmplY3Q6Om1hcmtBdXhpbGlhcnlBbmRWaXNpdE91dE9mTGluZVByb3BlcnRpZXMoVmlzaXRvciYg
dmlzaXRvciwgQnV0dGVyZmx5KiBidXR0ZXJmbHksIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQcm9w
ZXJ0eU9mZnNldCBtYXhPZmZzZXQpCiB7CiAgICAgLy8gV2UgY2FsbCB0aGlzIHdoZW4gd2UgZm91
bmQgZXZlcnl0aGluZyB3aXRob3V0IHJhY2VzLgogICAgIEFTU0VSVChzdHJ1Y3R1cmUpOwpAQCAt
MTAzLDcgKzEwNCw4IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKU09iamVjdDo6bWFya0F1eGlsaWEK
ICAgICB2aXNpdG9yLmFwcGVuZFZhbHVlc0hpZGRlbihidXR0ZXJmbHktPnByb3BlcnR5U3RvcmFn
ZSgpIC0gb3V0T2ZMaW5lU2l6ZSwgb3V0T2ZMaW5lU2l6ZSk7CiB9CiAKLUFMV0FZU19JTkxJTkUg
U3RydWN0dXJlKiBKU09iamVjdDo6dmlzaXRCdXR0ZXJmbHkoU2xvdFZpc2l0b3ImIHZpc2l0b3Ip
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgorQUxXQVlTX0lOTElORSBTdHJ1Y3R1cmUqIEpT
T2JqZWN0Ojp2aXNpdEJ1dHRlcmZseShWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHN0YXRpYyBj
b25zdCBjaGFyKiBjb25zdCByYWNlUmVhc29uID0gIkpTT2JqZWN0Ojp2aXNpdEJ1dHRlcmZseSI7
CiAgICAgU3RydWN0dXJlKiByZXN1bHQgPSB2aXNpdEJ1dHRlcmZseUltcGwodmlzaXRvcik7CkBA
IC0xMTIsNyArMTE0LDggQEAgQUxXQVlTX0lOTElORSBTdHJ1Y3R1cmUqIEpTT2JqZWN0Ojp2aXNp
dAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUFMV0FZU19JTkxJTkUgU3RydWN0dXJlKiBKU09i
amVjdDo6dmlzaXRCdXR0ZXJmbHlJbXBsKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8
dHlwZW5hbWUgVmlzaXRvcj4KK0FMV0FZU19JTkxJTkUgU3RydWN0dXJlKiBKU09iamVjdDo6dmlz
aXRCdXR0ZXJmbHlJbXBsKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgVk0mIHZtID0gdmlzaXRv
ci52bSgpOwogICAgIApAQCAtNDEyLDI0ICs0MTUsMjAgQEAgc2l6ZV90IEpTT2JqZWN0Ojplc3Rp
bWF0ZWRTaXplKEpTQ2VsbCogYwogICAgIHJldHVybiBCYXNlOjplc3RpbWF0ZWRTaXplKGNlbGws
IHZtKSArIGJ1dHRlcmZseU91dE9mTGluZVNpemU7CiB9CiAKLXZvaWQgSlNPYmplY3Q6OnZpc2l0
Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5
cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTT2JqZWN0Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwq
IGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNPYmplY3QqIHRoaXNPYmplY3QgPSBq
c0Nhc3Q8SlNPYmplY3QqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRo
aXNPYmplY3QsIGluZm8oKSk7Ci0jaWYgQVNTRVJUX0VOQUJMRUQKLSAgICBib29sIHdhc0NoZWNr
aW5nRm9yRGVmYXVsdE1hcmtWaW9sYXRpb24gPSB2aXNpdG9yLm1faXNDaGVja2luZ0ZvckRlZmF1
bHRNYXJrVmlvbGF0aW9uOwotICAgIHZpc2l0b3IubV9pc0NoZWNraW5nRm9yRGVmYXVsdE1hcmtW
aW9sYXRpb24gPSBmYWxzZTsKLSNlbmRpZgotICAgIAorICAgIHR5cGVuYW1lIFZpc2l0b3I6OkRl
ZmF1bHRNYXJraW5nVmlvbGF0aW9uQXNzZXJ0aW9uU2NvcGUgYXNzZXJ0aW9uU2NvcGUodmlzaXRv
cik7CisKICAgICBKU0NlbGw6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7Ci0g
ICAgCisKICAgICB0aGlzT2JqZWN0LT52aXNpdEJ1dHRlcmZseSh2aXNpdG9yKTsKLSAgICAKLSNp
ZiBBU1NFUlRfRU5BQkxFRAotICAgIHZpc2l0b3IubV9pc0NoZWNraW5nRm9yRGVmYXVsdE1hcmtW
aW9sYXRpb24gPSB3YXNDaGVja2luZ0ZvckRlZmF1bHRNYXJrVmlvbGF0aW9uOwotI2VuZGlmCiB9
CiAKK0RFRklORV9FWFBPUlRfVklTSVRfQ0hJTERSRU4oSlNPYmplY3QpOworCiB2b2lkIEpTT2Jq
ZWN0OjphbmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCiB7
CiAgICAgSlNPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNPYmplY3QqPihjZWxsKTsKQEAg
LTQ2OCwxNCArNDY3LDEyIEBAIHZvaWQgSlNPYmplY3Q6OmFuYWx5emVIZWFwKEpTQ2VsbCogY2Vs
bCwKICAgICB9CiB9CiAKLXZvaWQgSlNGaW5hbE9iamVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwq
IGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4K
K3ZvaWQgSlNGaW5hbE9iamVjdDo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNp
dG9yJiB2aXNpdG9yKQogewogICAgIEpTRmluYWxPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8
SlNGaW5hbE9iamVjdCo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhp
c09iamVjdCwgaW5mbygpKTsKLSNpZiBBU1NFUlRfRU5BQkxFRAotICAgIGJvb2wgd2FzQ2hlY2tp
bmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlvbiA9IHZpc2l0b3IubV9pc0NoZWNraW5nRm9yRGVmYXVs
dE1hcmtWaW9sYXRpb247Ci0gICAgdmlzaXRvci5tX2lzQ2hlY2tpbmdGb3JEZWZhdWx0TWFya1Zp
b2xhdGlvbiA9IGZhbHNlOwotI2VuZGlmCisgICAgdHlwZW5hbWUgVmlzaXRvcjo6RGVmYXVsdE1h
cmtpbmdWaW9sYXRpb25Bc3NlcnRpb25TY29wZSBhc3NlcnRpb25TY29wZSh2aXNpdG9yKTsKICAg
ICAKICAgICBKU0NlbGw6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CiAgICAg
CkBAIC00ODMsMTIgKzQ4MCwxMCBAQCB2b2lkIEpTRmluYWxPYmplY3Q6OnZpc2l0Q2hpbGRyZW4o
SlNDZWxsCiAgICAgICAgIGlmICh1bnNpZ25lZCBzdG9yYWdlU2l6ZSA9IHN0cnVjdHVyZS0+aW5s
aW5lU2l6ZSgpKQogICAgICAgICAgICAgdmlzaXRvci5hcHBlbmRWYWx1ZXNIaWRkZW4odGhpc09i
amVjdC0+aW5saW5lU3RvcmFnZSgpLCBzdG9yYWdlU2l6ZSk7CiAgICAgfQotICAgIAotI2lmIEFT
U0VSVF9FTkFCTEVECi0gICAgdmlzaXRvci5tX2lzQ2hlY2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xh
dGlvbiA9IHdhc0NoZWNraW5nRm9yRGVmYXVsdE1hcmtWaW9sYXRpb247Ci0jZW5kaWYKIH0KIAor
REVGSU5FX0VYUE9SVF9WSVNJVF9DSElMRFJFTihKU0ZpbmFsT2JqZWN0KTsKKwogU3RyaW5nIEpT
T2JqZWN0OjpjbGFzc05hbWUoY29uc3QgSlNPYmplY3QqIG9iamVjdCwgVk0mIHZtKQogewogICAg
IGNvbnN0IENsYXNzSW5mbyogaW5mbyA9IG9iamVjdC0+Y2xhc3NJbmZvKHZtKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAkocmV2aXNpb24gMjcyMTkyKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAkod29ya2luZyBjb3B5
KQpAQCAtMTA4LDggKzEwOCw5IEBAIGNsYXNzIEpTT2JqZWN0IDogcHVibGljIEpTQ2VsbCB7CiBw
dWJsaWM6CiAgICAgdXNpbmcgQmFzZSA9IEpTQ2VsbDsKIAorICAgIERFQ0xBUkVfRVhQT1JUX1ZJ
U0lUX0NISUxEUkVOOworCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHNpemVfdCBlc3Rp
bWF0ZWRTaXplKEpTQ2VsbCosIFZNJik7Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZv
aWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwogICAgIEpTX0VYUE9SVF9Q
UklWQVRFIHN0YXRpYyB2b2lkIGFuYWx5emVIZWFwKEpTQ2VsbCosIEhlYXBBbmFseXplciYpOwog
CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFN0cmluZyBjbGFzc05hbWUoY29uc3QgSlNP
YmplY3QqLCBWTSYpOwpAQCAtOTgwLDExICs5ODEsMTEgQEAgcHJvdGVjdGVkOgogICAgIEpTT2Jq
ZWN0KFZNJiwgU3RydWN0dXJlKiwgQnV0dGVyZmx5KiA9IG51bGxwdHIpOwogICAgIAogICAgIC8v
IFZpc2l0cyB0aGUgYnV0dGVyZmx5IHVubGVzcyB0aGVyZSBpcyBhIHJhY2UuIFJldHVybnMgdGhl
IHN0cnVjdHVyZSBpZiB0aGVyZSB3YXMgbm8gcmFjZS4KLSAgICBTdHJ1Y3R1cmUqIHZpc2l0QnV0
dGVyZmx5KFNsb3RWaXNpdG9yJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gU3Ry
dWN0dXJlKiB2aXNpdEJ1dHRlcmZseShWaXNpdG9yJik7CiAgICAgCi0gICAgU3RydWN0dXJlKiB2
aXNpdEJ1dHRlcmZseUltcGwoU2xvdFZpc2l0b3ImKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPiBTdHJ1Y3R1cmUqIHZpc2l0QnV0dGVyZmx5SW1wbChWaXNpdG9yJik7CiAgICAgCi0g
ICAgdm9pZCBtYXJrQXV4aWxpYXJ5QW5kVmlzaXRPdXRPZkxpbmVQcm9wZXJ0aWVzKFNsb3RWaXNp
dG9yJiwgQnV0dGVyZmx5KiwgU3RydWN0dXJlKiwgUHJvcGVydHlPZmZzZXQgbWF4T2Zmc2V0KTsK
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIG1hcmtBdXhpbGlhcnlBbmRWaXNp
dE91dE9mTGluZVByb3BlcnRpZXMoVmlzaXRvciYsIEJ1dHRlcmZseSosIFN0cnVjdHVyZSosIFBy
b3BlcnR5T2Zmc2V0IG1heE9mZnNldCk7CiAKICAgICAvLyBDYWxsIHRoaXMgaWYgeW91IGtub3cg
dGhhdCB0aGUgb2JqZWN0IGlzIGluIGEgbW9kZSB3aGVyZSBpdCBoYXMgYXJyYXkKICAgICAvLyBz
dG9yYWdlLiBUaGlzIHdpbGwgYXNzZXJ0IG90aGVyd2lzZS4KQEAgLTExNzIsOCArMTE3Myw2IEBA
IHByb3RlY3RlZDoKICAgICB9CiB9OwogCi1jbGFzcyBKU0ZpbmFsT2JqZWN0OwotCiAvLyBKU0Zp
bmFsT2JqZWN0IGlzIGEgdHlwZSBvZiBKU09iamVjdCB0aGF0IGNvbnRhaW5zIHN1ZmZpY2llbnQg
aW50ZXJuYWwKIC8vIHN0b3JhZ2UgdG8gZnVsbHkgbWFrZSB1c2Ugb2YgdGhlIGNvbGxlY3RvciBj
ZWxsIGNvbnRhaW5pbmcgaXQuCiBjbGFzcyBKU0ZpbmFsT2JqZWN0IGZpbmFsIDogcHVibGljIEpT
T2JqZWN0IHsKQEAgLTEyMTIsMTUgKzEyMTEsMTMgQEAgcHVibGljOgogICAgICAgICByZXR1cm4g
U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCB0eXBlSW5mbygp
LCBpbmZvKCksIGRlZmF1bHRJbmRleGluZ1R5cGUsIGlubGluZUNhcGFjaXR5KTsKICAgICB9CiAK
LSAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCos
IFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9FWFBPUlRfVklTSVRfQ0hJTERSRU47CiAKICAg
ICBERUNMQVJFX0VYUE9SVF9JTkZPOwogCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBMTElu
dE9mZnNldHNFeHRyYWN0b3I7CiAKLSAgICB2b2lkIHZpc2l0Q2hpbGRyZW5Db21tb24oU2xvdFZp
c2l0b3ImKTsKLQogICAgIGV4cGxpY2l0IEpTRmluYWxPYmplY3QoVk0mIHZtLCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSwgQnV0dGVyZmx5KiBidXR0ZXJmbHkpCiAgICAgICAgIDogSlNPYmplY3Qodm0s
IHN0cnVjdHVyZSwgYnV0dGVyZmx5KQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTUHJvbWlzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNQcm9taXNlLmNwcAkocmV2aXNpb24gMjcyMTkyKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9taXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjcs
MTMgKzY3LDE2IEBAIHZvaWQgSlNQcm9taXNlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCiAgICAg
ICAgIEJhc2U6OmludGVybmFsRmllbGQoaW5kZXgpLnNldCh2bSwgdGhpcywgdmFsdWVzW2luZGV4
XSk7CiB9CiAKLXZvaWQgSlNQcm9taXNlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xv
dFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1By
b21pc2U6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikK
IHsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTUHJvbWlzZSo+KGNlbGwpOwogICAg
IEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKICAgICBCYXNl
Ojp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwogfQogCitERUZJTkVfVklTSVRf
Q0hJTERSRU4oSlNQcm9taXNlKTsKKwogYXV0byBKU1Byb21pc2U6OnN0YXR1cyhWTSYpIGNvbnN0
IC0+IFN0YXR1cwogewogICAgIEpTVmFsdWUgdmFsdWUgPSBpbnRlcm5hbEZpZWxkKEZpZWxkOjpG
bGFncykuZ2V0KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb21p
c2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb21p
c2UuaAkocmV2aXNpb24gMjcyMTkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNQcm9taXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTk2LDcgKzk2LDcgQEAgcHVibGljOgogICAg
IH07CiAgICAgc3RhdGljIERlZmVycmVkRGF0YSBjcmVhdGVEZWZlcnJlZERhdGEoSlNHbG9iYWxP
YmplY3QqLCBKU1Byb21pc2VDb25zdHJ1Y3RvciopOwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRD
aGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERS
RU47CiAKIHByb3RlY3RlZDoKICAgICBKU1Byb21pc2UoVk0mLCBTdHJ1Y3R1cmUqKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVydHlOYW1lRW51bWVyYXRvci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yLmNwcAkocmV2aXNpb24gMjcyMTkyKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNzAsNyArNzAsOCBAQCB2b2lkIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6ZmluaXNo
Q3JlCiAgICAgfQogfQogCi12b2lkIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6dmlzaXRDaGls
ZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5h
bWUgVmlzaXRvcj4KK3ZvaWQgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjp2aXNpdENoaWxkcmVu
SW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNQcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTUHJvcGVydHlOYW1lRW51bWVyYXRv
cio+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5m
bygpKTsKQEAgLTg3LDYgKzg4LDggQEAgdm9pZCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OnZp
c2l0Q2hpbAogICAgIH0KIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTUHJvcGVydHlOYW1l
RW51bWVyYXRvcik7CisKIC8vIEZJWE1FOiBBc3NlcnQgdGhhdCBwcm9wZXJ0aWVzIHJldHVybmVk
IGJ5IGdldE93blByb3BlcnR5TmFtZXMoKSBhcmUgcmVwb3J0ZWQgZW51bWVyYWJsZSBieSBnZXRP
d25Qcm9wZXJ0eVNsb3QoKS4KIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0yMTk5MjYKIHZvaWQgZ2V0RW51bWVyYWJsZVByb3BlcnR5TmFtZXMoSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgSlNPYmplY3QqIGJhc2UsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9w
ZXJ0eU5hbWVzLCB1aW50MzJfdCYgaW5kZXhlZExlbmd0aCwgdWludDMyX3QmIHN0cnVjdHVyZVBy
b3BlcnR5Q291bnQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3Bl
cnR5TmFtZUVudW1lcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaAkocmV2aXNpb24gMjcyMTkyKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTg0LDcgKzg0LDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4g
T0JKRUNUX09GRlNFVE9GKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvciwgbV9wcm9wZXJ0eU5hbWVz
KTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RW
aXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogcHJpdmF0ZToKICAgICBm
cmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNQcm94eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNQcm94eS5jcHAJKHJldmlzaW9uIDI3MjE5MikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw3
ICszNSw4IEBAIFNUQVRJQ19BU1NFUlRfSVNfVFJJVklBTExZX0RFU1RSVUNUSUJMRSgKIAogY29u
c3QgQ2xhc3NJbmZvIEpTUHJveHk6OnNfaW5mbyA9IHsgIkpTUHJveHkiLCAmQmFzZTo6c19pbmZv
LCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTUHJveHkpIH07CiAKLXZv
aWQgSlNQcm94eTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNp
dG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNQcm94eTo6dmlzaXRDaGls
ZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTUHJveHkq
IHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNQcm94eSo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpF
Q1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTQzLDYgKzQ0LDggQEAgdm9pZCBK
U1Byb3h5Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbAogICAgIHZpc2l0b3IuYXBwZW5kKHRo
aXNPYmplY3QtPm1fdGFyZ2V0KTsKIH0KIAorREVGSU5FX0VYUE9SVF9WSVNJVF9DSElMRFJFTihK
U1Byb3h5KTsKKwogdm9pZCBKU1Byb3h5OjpzZXRUYXJnZXQoVk0mIHZtLCBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0KQogewogICAgIG1fdGFyZ2V0LnNldCh2bSwgdGhpcywgZ2xvYmFsT2Jq
ZWN0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJveHkuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3h5LmgJKHJldmlz
aW9uIDI3MjE5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJveHkuaAko
d29ya2luZyBjb3B5KQpAQCAtODUsNyArODUsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIG1fdGFy
Z2V0LnNldCh2bSwgdGhpcywgdGFyZ2V0KTsKICAgICB9CiAKLSAgICBKU19FWFBPUlRfUFJJVkFU
RSBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAg
REVDTEFSRV9FWFBPUlRfVklTSVRfQ0hJTERSRU47CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSBz
dGF0aWMgU3RyaW5nIGNsYXNzTmFtZShjb25zdCBKU09iamVjdCosIFZNJik7CiAgICAgSlNfRVhQ
T1JUX1BSSVZBVEUgc3RhdGljIFN0cmluZyB0b1N0cmluZ05hbWUoY29uc3QgSlNPYmplY3QqLCBK
U0dsb2JhbE9iamVjdCopOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNT
Y29wZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNT
Y29wZS5jcHAJKHJldmlzaW9uIDI3MjE5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTU2NvcGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw3ICszOSw4IEBAIFNUQVRJQ19B
U1NFUlRfSVNfVFJJVklBTExZX0RFU1RSVUNUSUJMRSgKIAogY29uc3QgQ2xhc3NJbmZvIEpTU2Nv
cGU6OnNfaW5mbyA9IHsgIlNjb3BlIiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwg
Q1JFQVRFX01FVEhPRF9UQUJMRShKU1Njb3BlKSB9OwogCi12b2lkIEpTU2NvcGU6OnZpc2l0Q2hp
bGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVu
YW1lIFZpc2l0b3I+Cit2b2lkIEpTU2NvcGU6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2Vs
bCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU1Njb3BlKiB0aGlzT2JqZWN0ID0ganNDYXN0
PEpTU2NvcGUqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmpl
Y3QsIGluZm8oKSk7CkBAIC00Nyw2ICs0OCw4IEBAIHZvaWQgSlNTY29wZTo6dmlzaXRDaGlsZHJl
bihKU0NlbGwqIGNlbGwKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX25leHQpOwog
fQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNTY29wZSk7CisKIC8vIFJldHVybnMgdHJ1ZSBp
ZiB3ZSBmb3VuZCBlbm91Z2ggaW5mb3JtYXRpb24gdG8gdGVybWluYXRlIG9wdGltaXphdGlvbi4K
IHN0YXRpYyBpbmxpbmUgYm9vbCBhYnN0cmFjdEFjY2VzcyhKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBKU1Njb3BlKiBzY29wZSwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIEdldE9yUHV0
IGdldE9yUHV0LCBzaXplX3QgZGVwdGgsIGJvb2wmIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCBS
ZXNvbHZlT3AmIG9wLCBJbml0aWFsaXphdGlvbk1vZGUgaW5pdGlhbGl6YXRpb25Nb2RlKQogewpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTY29wZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2NvcGUuaAkocmV2aXNpb24gMjcy
MTkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTY29wZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC02NCw3ICs2NCw3IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyB2b2lkIGNvbGxl
Y3RDbG9zdXJlVmFyaWFibGVzVW5kZXJURFooSlNTY29wZSosIFREWkVudmlyb25tZW50JiByZXN1
bHQsIFZhcmlhYmxlRW52aXJvbm1lbnQmIHByaXZhdGVOYW1lcyk7CiAKLSAgICBzdGF0aWMgdm9p
ZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJ
VF9DSElMRFJFTjsKIAogICAgIGJvb2wgaXNWYXJTY29wZSgpOwogICAgIGJvb2wgaXNMZXhpY2Fs
U2NvcGUoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2VnbWVudGVk
VmFyaWFibGVPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVPYmplY3QuY3BwCShyZXZpc2lvbiAyNzIxOTIpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjIsMTkgKzYyLDIyIEBAIFNjb3BlT2Zmc2V0IEpTU2Vn
bWVudGVkVmFyaWFibGVPYmplY3Q6OmEKICAgICByZXR1cm4gU2NvcGVPZmZzZXQob2xkU2l6ZSk7
CiB9CiAKLXZvaWQgSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdDo6dmlzaXRDaGlsZHJlbihKU0Nl
bGwqIGNlbGwsIFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZp
c2l0b3I+Cit2b2lkIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3Q6OnZpc2l0Q2hpbGRyZW5JbXBs
KEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU1NlZ21lbnRlZFZhcmlh
YmxlT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3Qq
PihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8o
KSk7Ci0gICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCBzbG90VmlzaXRvcik7Cisg
ICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKICAgICAKICAgICAv
LyBGSVhNRTogV2UgY291bGQgYXZvaWQgbG9ja2luZyBoZXJlIGlmIFNlZ21lbnRlZFZlY3RvciB3
YXMgbG9jay1mcmVlLiBJdCBjb3VsZCBiZSBtYWRlIGxvY2stZnJlZQogICAgIC8vIHJlbGF0aXZl
bHkgZWFzaWx5LgogICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sodGhpc09iamVjdC0+Y2VsbExv
Y2soKSk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gdGhpc09iamVjdC0+bV92YXJpYWJsZXMuc2l6
ZSgpOyBpLS07KQotICAgICAgICBzbG90VmlzaXRvci5hcHBlbmRIaWRkZW4odGhpc09iamVjdC0+
bV92YXJpYWJsZXNbaV0pOworICAgICAgICB2aXNpdG9yLmFwcGVuZEhpZGRlbih0aGlzT2JqZWN0
LT5tX3ZhcmlhYmxlc1tpXSk7CiB9CiAKK0RFRklORV9FWFBPUlRfVklTSVRfQ0hJTERSRU4oSlNT
ZWdtZW50ZWRWYXJpYWJsZU9iamVjdCk7CisKIHZvaWQgSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVj
dDo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQogewog
ICAgIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNTZWdt
ZW50ZWRWYXJpYWJsZU9iamVjdCo+KGNlbGwpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVPYmplY3QuaAkocmV2
aXNpb24gMjcyMTkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZWdtZW50
ZWRWYXJpYWJsZU9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC04Niw3ICs4Niw3IEBAIHB1Ymxp
YzoKICAgICAvLyB0aGUgaW5kZXggb2YgdGhlIGZpcnN0IG9uZSBhZGRlZC4KICAgICBKU19FWFBP
UlRfUFJJVkFURSBTY29wZU9mZnNldCBhZGRWYXJpYWJsZXModW5zaWduZWQgbnVtYmVyT2ZWYXJp
YWJsZXNUb0FkZCwgSlNWYWx1ZSk7CiAgICAgCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGlj
IHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVf
RVhQT1JUX1ZJU0lUX0NISUxEUkVOOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lk
IGFuYWx5emVIZWFwKEpTQ2VsbCosIEhlYXBBbmFseXplciYpOwogICAgIAogcHJvdGVjdGVkOgpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZXRJdGVyYXRvci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZXRJdGVyYXRvci5j
cHAJKHJldmlzaW9uIDI3MjE5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
U2V0SXRlcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NywxMyArNTcsMTYgQEAgdm9pZCBK
U1NldEl0ZXJhdG9yOjpmaW5pc2hDcmVhdGlvbihWTSYgdgogICAgICAgICBCYXNlOjppbnRlcm5h
bEZpZWxkKGluZGV4KS5zZXQodm0sIHRoaXMsIHZhbHVlc1tpbmRleF0pOwogfQogCi12b2lkIEpT
U2V0SXRlcmF0b3I6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlz
aXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTU2V0SXRlcmF0b3I6OnZp
c2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBh
dXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTU2V0SXRlcmF0b3IqPihjZWxsKTsKICAgICBBU1NF
UlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAgICAgQmFzZTo6dmlz
aXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxE
UkVOKEpTU2V0SXRlcmF0b3IpOworCiBKU1ZhbHVlIEpTU2V0SXRlcmF0b3I6OmNyZWF0ZVBhaXIo
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBrZXksIEpTVmFsdWUgdmFsdWUp
CiB7CiAgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgYXJnczsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTU2V0SXRlcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU1NldEl0ZXJhdG9yLmgJKHJldmlzaW9uIDI3MjE5MikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2V0SXRlcmF0b3IuaAkod29ya2luZyBj
b3B5KQpAQCAtMTMwLDcgKzEzMCw3IEBAIHByaXZhdGU6CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUg
dm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIEpTU2V0KiwgSXRlcmF0aW9uS2luZCk7CiAgICAgdm9p
ZCBmaW5pc2hDcmVhdGlvbihWTSYpOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIEpTVmFsdWUgY3Jl
YXRlUGFpcihKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUsIEpTVmFsdWUpOwotICAgIHN0YXRpYyB2
b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJ
U0lUX0NISUxEUkVOOwogfTsKIFNUQVRJQ19BU1NFUlRfSVNfVFJJVklBTExZX0RFU1RSVUNUSUJM
RShKU1NldEl0ZXJhdG9yKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNTb3VyY2VDb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1NvdXJjZUNvZGUuY3BwCShyZXZpc2lvbiAyNzIxOTIpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU1NvdXJjZUNvZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2
ICsyNiw4IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSlNTb3VyY2VDb2RlLmgi
CiAKKyNpbmNsdWRlICJKU0NlbGxJbmxpbmVzLmgiIC8vIG1sYW0gVEVTVAorCiBuYW1lc3BhY2Ug
SlNDIHsKIAogY29uc3QgQ2xhc3NJbmZvIEpTU291cmNlQ29kZTo6c19pbmZvID0geyAiSlNTb3Vy
Y2VDb2RlIiwgbnVsbHB0ciwgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShK
U1NvdXJjZUNvZGUpIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0
cmluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNT
dHJpbmcuY3BwCShyZXZpc2lvbiAyNzIxOTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1N0cmluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNSw3ICsxMDUsOCBAQCBzaXpl
X3QgSlNTdHJpbmc6OmVzdGltYXRlZFNpemUoSlNDZWxsKiBjCiAgICAgcmV0dXJuIEJhc2U6OmVz
dGltYXRlZFNpemUoY2VsbCwgdm0pICsgYml0d2lzZV9jYXN0PFN0cmluZ0ltcGwqPihwb2ludGVy
KS0+Y29zdER1cmluZ0dDKCk7CiB9CiAKLXZvaWQgSlNTdHJpbmc6OnZpc2l0Q2hpbGRyZW4oSlND
ZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0
b3I+Cit2b2lkIEpTU3RyaW5nOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0
b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNTdHJpbmcqIHRoaXNPYmplY3QgPSBhc1N0cmluZyhjZWxs
KTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBA
IC0xNDMsNiArMTQ0LDggQEAgdm9pZCBKU1N0cmluZzo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNl
bAogICAgICAgICB2aXNpdG9yLnJlcG9ydEV4dHJhTWVtb3J5VmlzaXRlZChpbXBsLT5jb3N0RHVy
aW5nR0MoKSk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU1N0cmluZyk7CisKIHN0YXRp
YyBjb25zdGV4cHIgdW5zaWduZWQgbWF4TGVuZ3RoRm9yT25TdGFja1Jlc29sdmUgPSAyMDQ4Owog
CiB2b2lkIEpTUm9wZVN0cmluZzo6cmVzb2x2ZVJvcGVJbnRlcm5hbDgoTENoYXIqIGJ1ZmZlcikg
Y29uc3QKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuaAkocmV2
aXNpb24gMjcyMTkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcu
aAkod29ya2luZyBjb3B5KQpAQCAtMjE3LDcgKzIxNyw3IEBAIHB1YmxpYzoKIAogICAgIHN0YXRp
YyB2b2lkIGR1bXBUb1N0cmVhbShjb25zdCBKU0NlbGwqLCBQcmludFN0cmVhbSYpOwogICAgIHN0
YXRpYyBzaXplX3QgZXN0aW1hdGVkU2l6ZShKU0NlbGwqLCBWTSYpOwotICAgIHN0YXRpYyB2b2lk
IHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lU
X0NISUxEUkVOOwogCiAgICAgQUxXQVlTX0lOTElORSBib29sIGlzUm9wZSgpIGNvbnN0CiAgICAg
ewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmdJdGVyYXRvci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmdJ
dGVyYXRvci5jcHAJKHJldmlzaW9uIDI3MjE5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTU3RyaW5nSXRlcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MSwxMSArNTEs
MTQgQEAgSlNTdHJpbmdJdGVyYXRvciogSlNTdHJpbmdJdGVyYXRvcjo6Y2xvbgogICAgIHJldHVy
biBjbG9uZTsKIH0KIAotdm9pZCBKU1N0cmluZ0l0ZXJhdG9yOjp2aXNpdENoaWxkcmVuKEpTQ2Vs
bCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
Pgordm9pZCBKU1N0cmluZ0l0ZXJhdG9yOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGws
IFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1N0
cmluZ0l0ZXJhdG9yKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlz
T2JqZWN0LCBpbmZvKCkpOwogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlz
aXRvcik7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU1N0cmluZ0l0ZXJhdG9yKTsKKwog
fSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U1N0cmluZ0l0ZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNTdHJpbmdJdGVyYXRvci5oCShyZXZpc2lvbiAyNzIxOTIpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZ0l0ZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAg
LTc5LDcgKzc5LDcgQEAgcHVibGljOgogICAgIEpTVmFsdWUgaW5kZXgoKSBjb25zdCB7IHJldHVy
biBpbnRlcm5hbEZpZWxkKEZpZWxkOjpJbmRleCkuZ2V0KCk7IH0KICAgICBKU1N0cmluZ0l0ZXJh
dG9yKiBjbG9uZShKU0dsb2JhbE9iamVjdCopOwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGls
ZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47
CiAKIHByaXZhdGU6CiAgICAgSlNTdHJpbmdJdGVyYXRvcihWTSYgdm0sIFN0cnVjdHVyZSogc3Ry
dWN0dXJlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTeW1ib2xUYWJs
ZU9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNTeW1ib2xUYWJsZU9iamVjdC5jcHAJKHJldmlzaW9uIDI3MjE5MikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zNiw3ICszNiw4IEBAIG5hbWVzcGFjZSBKU0MgewogCiBjb25zdCBDbGFzc0luZm8gSlNT
eW1ib2xUYWJsZU9iamVjdDo6c19pbmZvID0geyAiU3ltYm9sVGFibGVPYmplY3QiLCAmQmFzZTo6
c19pbmZvLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTU3ltYm9sVGFi
bGVPYmplY3QpIH07CiAKLXZvaWQgSlNTeW1ib2xUYWJsZU9iamVjdDo6dmlzaXRDaGlsZHJlbihK
U0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlz
aXRvcj4KK3ZvaWQgSlNTeW1ib2xUYWJsZU9iamVjdDo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxs
KiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTU3ltYm9sVGFibGVPYmplY3QqIHRo
aXNPYmplY3QgPSBqc0Nhc3Q8SlNTeW1ib2xUYWJsZU9iamVjdCo+KGNlbGwpOwogICAgIEFTU0VS
VF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTQ0LDYgKzQ1LDgg
QEAgdm9pZCBKU1N5bWJvbFRhYmxlT2JqZWN0Ojp2aXNpdENoaWxkcmVuKAogICAgIHZpc2l0b3Iu
YXBwZW5kKHRoaXNPYmplY3QtPm1fc3ltYm9sVGFibGUpOwogfQogCitERUZJTkVfVklTSVRfQ0hJ
TERSRU4oSlNTeW1ib2xUYWJsZU9iamVjdCk7CisKIGJvb2wgSlNTeW1ib2xUYWJsZU9iamVjdDo6
ZGVsZXRlUHJvcGVydHkoSlNDZWxsKiBjZWxsLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBEZWxldGVQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7
CiAgICAgSlNTeW1ib2xUYWJsZU9iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1N5bWJvbFRh
YmxlT2JqZWN0Kj4oY2VsbCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U1N5bWJvbFRhYmxlT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVjdC5oCShyZXZpc2lvbiAyNzIxOTIpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTcwLDcgKzcwLDcgQEAgcHJvdGVjdGVkOgogICAgICAgICBtX3N5bWJvbFRhYmxl
LnNldCh2bSwgdGhpcywgc3ltYm9sVGFibGUpOwogICAgIH0KICAgICAKLSAgICBzdGF0aWMgdm9p
ZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJ
VF9DSElMRFJFTjsKICAgICAKIHByaXZhdGU6CiAgICAgV3JpdGVCYXJyaWVyPFN5bWJvbFRhYmxl
PiBtX3N5bWJvbFRhYmxlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNX
ZWFrT2JqZWN0UmVmLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1dlYWtPYmplY3RSZWYuY3BwCShyZXZpc2lvbiAyNzIxOTIpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU1dlYWtPYmplY3RSZWYuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zOSw3ICszOSw4IEBAIHZvaWQgSlNXZWFrT2JqZWN0UmVmOjpmaW5pc2hDcmVhdGlvbihWTSYK
ICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CiB9CiAKLXZvaWQgSlNXZWFrT2JqZWN0UmVm
Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1w
bGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1dlYWtPYmplY3RSZWY6OnZpc2l0Q2hpbGRy
ZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBhdXRvKiB0aGlz
T2JqZWN0ID0ganNDYXN0PEpTV2Vha09iamVjdFJlZio+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19P
QkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTUxLDYgKzUyLDggQEAgdm9p
ZCBKU1dlYWtPYmplY3RSZWY6OnZpc2l0Q2hpbGRyZW4oSlNDZQogICAgIH0KIH0KIAorREVGSU5F
X1ZJU0lUX0NISUxEUkVOKEpTV2Vha09iamVjdFJlZik7CisKIHZvaWQgSlNXZWFrT2JqZWN0UmVm
OjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxseShWTSYgdm0pCiB7CiAgICAgaWYgKG1fdmFsdWUgJiYg
IXZtLmhlYXAuaXNNYXJrZWQobV92YWx1ZS5nZXQoKSkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU1dlYWtPYmplY3RSZWYuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU1dlYWtPYmplY3RSZWYuaAkocmV2aXNpb24gMjcyMTkyKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNXZWFrT2JqZWN0UmVmLmgJKHdvcmtp
bmcgY29weSkKQEAgLTY1LDcgKzY1LDcgQEAgcHVibGljOgogICAgIH0KIAogICAgIHZvaWQgZmlu
YWxpemVVbmNvbmRpdGlvbmFsbHkoVk0mKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVu
KEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAog
cHJpdmF0ZToKICAgICBKU1dlYWtPYmplY3RSZWYoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTV2l0aFNjb3BlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1dpdGhTY29wZS5j
cHAJKHJldmlzaW9uIDI3MjE5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
V2l0aFNjb3BlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEsNyArNDEsOCBAQCBKU1dpdGhTY29w
ZSogSlNXaXRoU2NvcGU6OmNyZWF0ZSgKICAgICByZXR1cm4gd2l0aFNjb3BlOwogfQogCi12b2lk
IEpTV2l0aFNjb3BlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZp
c2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1dpdGhTY29wZTo6dmlz
aXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpT
V2l0aFNjb3BlKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTV2l0aFNjb3BlKj4oY2VsbCk7CiAgICAg
QVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNDksNiAr
NTAsOCBAQCB2b2lkIEpTV2l0aFNjb3BlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogCiAgICAgdmlz
aXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9vYmplY3QpOwogfQogCitERUZJTkVfVklTSVRfQ0hJ
TERSRU4oSlNXaXRoU2NvcGUpOworCiBTdHJ1Y3R1cmUqIEpTV2l0aFNjb3BlOjpjcmVhdGVTdHJ1
Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3Rv
KQogewogICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90
bywgVHlwZUluZm8oV2l0aFNjb3BlVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNXaXRoU2NvcGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1dpdGhTY29wZS5oCShyZXZpc2lv
biAyNzIxOTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1dpdGhTY29wZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC00Myw3ICs0Myw3IEBAIHB1YmxpYzoKIAogICAgIEpTT2JqZWN0
KiBvYmplY3QoKSB7IHJldHVybiBtX29iamVjdC5nZXQoKTsgfQogCi0gICAgc3RhdGljIHZvaWQg
dmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRf
Q0hJTERSRU47CiAKICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBK
U0dsb2JhbE9iamVjdCosIEpTVmFsdWUgcHJvdG8pOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU1dyYXBwZXJPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTV3JhcHBlck9iamVjdC5jcHAJKHJldmlzaW9uIDI3MjE5
MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTV3JhcHBlck9iamVjdC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI5LDExICsyOSwxNCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogU1RB
VElDX0FTU0VSVF9JU19UUklWSUFMTFlfREVTVFJVQ1RJQkxFKEpTV3JhcHBlck9iamVjdCk7CiAK
LXZvaWQgSlNXcmFwcGVyT2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZp
c2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1dyYXBw
ZXJPYmplY3Q6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRv
cikKIHsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTV3JhcHBlck9iamVjdCo+KGNl
bGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsK
ICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwogfQogCitERUZJ
TkVfRVhQT1JUX1ZJU0lUX0NISUxEUkVOKEpTV3JhcHBlck9iamVjdCk7CisKIH0gLy8gbmFtZXNw
YWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNXcmFwcGVyT2Jq
ZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNXcmFw
cGVyT2JqZWN0LmgJKHJldmlzaW9uIDI3MjE5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTV3JhcHBlck9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC02NCw3ICs2NCw3IEBA
IHB1YmxpYzoKIHByb3RlY3RlZDoKICAgICBleHBsaWNpdCBKU1dyYXBwZXJPYmplY3QoVk0mLCBT
dHJ1Y3R1cmUqKTsKIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIHZpc2l0Q2hp
bGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX0VYUE9SVF9WSVNJVF9D
SElMRFJFTjsKIH07CiAKIGlubGluZSBKU1dyYXBwZXJPYmplY3Q6OkpTV3JhcHBlck9iamVjdChW
TSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvTGF6eUNsYXNzU3RydWN0dXJlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9MYXp5Q2xhc3NTdHJ1Y3R1cmUuY3BwCShyZXZpc2lvbiAyNzIx
OTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9MYXp5Q2xhc3NTdHJ1Y3R1cmUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MiwxMiArNzIsMTYgQEAgdm9pZCBMYXp5Q2xhc3NTdHJ1
Y3R1cmU6OkluaXRpYWxpemVyOjpzZQogICAgIGNsYXNzU3RydWN0dXJlLm1fY29uc3RydWN0b3Iu
c2V0KHZtLCBnbG9iYWwsIGNvbnN0cnVjdG9yKTsKIH0KIAotdm9pZCBMYXp5Q2xhc3NTdHJ1Y3R1
cmU6OnZpc2l0KFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRv
cj4KK3ZvaWQgTGF6eUNsYXNzU3RydWN0dXJlOjp2aXNpdChWaXNpdG9yJiB2aXNpdG9yKQogewog
ICAgIG1fc3RydWN0dXJlLnZpc2l0KHZpc2l0b3IpOwogICAgIHZpc2l0b3IuYXBwZW5kKG1fY29u
c3RydWN0b3IpOwogfQogCit0ZW1wbGF0ZSB2b2lkIExhenlDbGFzc1N0cnVjdHVyZTo6dmlzaXQo
QWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBMYXp5Q2xhc3NTdHJ1Y3R1cmU6
OnZpc2l0KFNsb3RWaXNpdG9yJik7CisKIHZvaWQgTGF6eUNsYXNzU3RydWN0dXJlOjpkdW1wKFBy
aW50U3RyZWFtJiBvdXQpIGNvbnN0CiB7CiAgICAgb3V0LnByaW50KCI8c3RydWN0dXJlID0gIiwg
bV9zdHJ1Y3R1cmUsICIsIGNvbnN0cnVjdG9yID0gIiwgUmF3UG9pbnRlcihtX2NvbnN0cnVjdG9y
LmdldCgpKSwgIj4iKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0xhenlD
bGFzc1N0cnVjdHVyZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0xhenlDbGFzc1N0cnVjdHVyZS5oCShyZXZpc2lvbiAyNzIxOTIpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9MYXp5Q2xhc3NTdHJ1Y3R1cmUuaAkod29ya2luZyBjb3B5KQpA
QCAtMTE3LDcgKzExNyw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fY29uc3RydWN0b3Iu
Z2V0KCk7CiAgICAgfQogICAgIAotICAgIHZvaWQgdmlzaXQoU2xvdFZpc2l0b3ImKTsKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIHZpc2l0KFZpc2l0b3ImKTsKICAgICAKICAg
ICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvTGF6eVByb3BlcnR5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvTGF6eVByb3BlcnR5LmgJKHJldmlzaW9uIDI3MjE5MikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0xhenlQcm9wZXJ0eS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xMDMsNyArMTAzLDcgQEAgcHVibGljOgogICAgIHZvaWQgc2V0TWF5QmVOdWxsKFZNJiwg
Y29uc3QgT3duZXJUeXBlKiBvd25lciwgRWxlbWVudFR5cGUqKTsKICAgICB2b2lkIHNldChWTSYs
IGNvbnN0IE93bmVyVHlwZSogb3duZXIsIEVsZW1lbnRUeXBlKik7CiAgICAgCi0gICAgdm9pZCB2
aXNpdChTbG90VmlzaXRvciYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQg
dmlzaXQoVmlzaXRvciYpOwogICAgIAogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0
OwogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTGF6eVByb3BlcnR5
SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0xh
enlQcm9wZXJ0eUlubGluZXMuaAkocmV2aXNpb24gMjcyMTkyKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvTGF6eVByb3BlcnR5SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC02
Niw3ICs2Niw4IEBAIHZvaWQgTGF6eVByb3BlcnR5PE93bmVyVHlwZSwgRWxlbWVudFR5cGUKIH0K
IAogdGVtcGxhdGU8dHlwZW5hbWUgT3duZXJUeXBlLCB0eXBlbmFtZSBFbGVtZW50VHlwZT4KLXZv
aWQgTGF6eVByb3BlcnR5PE93bmVyVHlwZSwgRWxlbWVudFR5cGU+Ojp2aXNpdChTbG90VmlzaXRv
ciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIExhenlQcm9wZXJ0
eTxPd25lclR5cGUsIEVsZW1lbnRUeXBlPjo6dmlzaXQoVmlzaXRvciYgdmlzaXRvcikKIHsKICAg
ICBpZiAobV9wb2ludGVyICYmICEobV9wb2ludGVyICYgbGF6eVRhZykpCiAgICAgICAgIHZpc2l0
b3IuYXBwZW5kVW5iYXJyaWVyZWQoYml0d2lzZV9jYXN0PEVsZW1lbnRUeXBlKj4obV9wb2ludGVy
KSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Nb2R1bGVQcm9ncmFtRXhl
Y3V0YWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
TW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUuY3BwCShyZXZpc2lvbiAyNzIxOTIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9Nb2R1bGVQcm9ncmFtRXhlY3V0YWJsZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTc5LDcgKzc5LDggQEAgYXV0byBNb2R1bGVQcm9ncmFtRXhlY3V0YWJsZTo6
ZW5zdXJlVGVtcAogICAgIHJldHVybiBlbnN1cmVUZW1wbGF0ZU9iamVjdE1hcEltcGwobV90ZW1w
bGF0ZU9iamVjdE1hcCk7CiB9CiAKLXZvaWQgTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGU6OnZpc2l0
Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5
cGVuYW1lIFZpc2l0b3I+Cit2b2lkIE1vZHVsZVByb2dyYW1FeGVjdXRhYmxlOjp2aXNpdENoaWxk
cmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgTW9kdWxlUHJv
Z3JhbUV4ZWN1dGFibGUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8TW9kdWxlUHJvZ3JhbUV4ZWN1dGFi
bGUqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGlu
Zm8oKSk7CkBAIC05NCw0ICs5NSw2IEBAIHZvaWQgTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGU6OnZp
c2l0Q2hpbGQKICAgICB9CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihNb2R1bGVQcm9ncmFt
RXhlY3V0YWJsZSk7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Nb2R1bGVQcm9ncmFtRXhlY3V0YWJsZS5oCShy
ZXZpc2lvbiAyNzIxOTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Nb2R1bGVQ
cm9ncmFtRXhlY3V0YWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03Nyw3ICs3Nyw3IEBAIHByaXZh
dGU6CiAKICAgICBNb2R1bGVQcm9ncmFtRXhlY3V0YWJsZShKU0dsb2JhbE9iamVjdCosIGNvbnN0
IFNvdXJjZUNvZGUmKTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwg
U2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgV3JpdGVC
YXJyaWVyPFVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jaz4gbV91bmxpbmtlZE1vZHVsZVBy
b2dyYW1Db2RlQmxvY2s7CiAgICAgV3JpdGVCYXJyaWVyPFN5bWJvbFRhYmxlPiBtX21vZHVsZUVu
dmlyb25tZW50U3ltYm9sVGFibGU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9PcHRpb25zTGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL09wdGlvbnNMaXN0LmgJKHJldmlzaW9uIDI3MjE5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTM2OSw2ICszNjks
NyBAQCBKU19FWFBPUlRfUFJJVkFURSBib29sIGNhblVzZUpJVENhZ2UoKTsKICAgICB2KEJvb2ws
IGFsd2F5c0dlbmVyYXRlUENUb0NvZGVPcmlnaW5NYXAsIGZhbHNlLCBOb3JtYWwsICJUaGlzIHdp
bGwgbWFrZSBzdXJlIHdlIGFsd2F5cyBnZW5lcmF0ZSBhIFBDVG9Db2RlT3JpZ2luTWFwIGZvciBK
SVRlZCBjb2RlLiIpIFwKICAgICBcCiAgICAgdihEb3VibGUsIHJhbmRvbUludGVncml0eUF1ZGl0
UmF0ZSwgMC4wNSwgTm9ybWFsLCAiUHJvYmFiaWxpdHkgb2YgcmFuZG9tIGludGVncml0eSBhdWRp
dHMgWzAuMCAtIDEuMF0iKSBcCisgICAgdihCb29sLCB2ZXJpZnlHQywgZmFsc2UsIE5vcm1hbCwg
bnVsbHB0cikgXAogICAgIHYoQm9vbCwgdmVyaWZ5SGVhcCwgZmFsc2UsIE5vcm1hbCwgbnVsbHB0
cikgXAogICAgIHYoVW5zaWduZWQsIG51bWJlck9mR0NDeWNsZXNUb1JlY29yZEZvclZlcmlmaWNh
dGlvbiwgMywgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgXApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvUHJvZ3JhbUV4ZWN1dGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb2dyYW1FeGVjdXRhYmxlLmNwcAkocmV2aXNpb24g
MjcyMTkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvZ3JhbUV4ZWN1dGFi
bGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDgsNyArMjA4LDggQEAgYXV0byBQcm9ncmFtRXhl
Y3V0YWJsZTo6ZW5zdXJlVGVtcGxhdGVPYgogICAgIHJldHVybiBlbnN1cmVUZW1wbGF0ZU9iamVj
dE1hcEltcGwobV90ZW1wbGF0ZU9iamVjdE1hcCk7CiB9CiAKLXZvaWQgUHJvZ3JhbUV4ZWN1dGFi
bGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3Rl
bXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFByb2dyYW1FeGVjdXRhYmxlOjp2aXNpdENo
aWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgUHJvZ3Jh
bUV4ZWN1dGFibGUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8UHJvZ3JhbUV4ZWN1dGFibGUqPihjZWxs
KTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBA
IC0yMjIsNCArMjIzLDYgQEAgdm9pZCBQcm9ncmFtRXhlY3V0YWJsZTo6dmlzaXRDaGlsZHJlbihK
UwogICAgIH0KIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKFByb2dyYW1FeGVjdXRhYmxlKTsK
KwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9Qcm9ncmFtRXhlY3V0YWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1Byb2dyYW1FeGVjdXRhYmxlLmgJKHJldmlzaW9uIDI3MjE5MikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb2dyYW1FeGVjdXRhYmxlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTgxLDcgKzgxLDcgQEAgcHJpdmF0ZToKIAogICAgIFByb2dyYW1FeGVjdXRhYmxlKEpT
R2xvYmFsT2JqZWN0KiwgY29uc3QgU291cmNlQ29kZSYpOwogCi0gICAgc3RhdGljIHZvaWQgdmlz
aXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJ
TERSRU47CiAKICAgICBXcml0ZUJhcnJpZXI8VW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrPiBtX3Vu
bGlua2VkUHJvZ3JhbUNvZGVCbG9jazsKICAgICBXcml0ZUJhcnJpZXI8RXhlY3V0YWJsZVRvQ29k
ZUJsb2NrRWRnZT4gbV9wcm9ncmFtQ29kZUJsb2NrOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvUHJvcGVydHlNYXBIYXNoVGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eU1hcEhhc2hUYWJsZS5oCShyZXZpc2lvbiAy
NzIxOTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eU1hcEhhc2hU
YWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzMsNyArMTMzLDcgQEAgcHVibGljOgogCiAgICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOwogICAgIHN0YXRp
YyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihK
U0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAg
ICBERUNMQVJFX0VYUE9SVF9JTkZPOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9Qcm9wZXJ0eVRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9Qcm9wZXJ0eVRhYmxlLmNwcAkocmV2aXNpb24gMjcyMTkyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlUYWJsZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTExOCw3ICsxMTgsOCBAQCB2b2lkIFByb3BlcnR5VGFibGU6OmZpbmlzaENyZWF0aW9uKFZN
JiB2CiAgICAgdm0uaGVhcC5yZXBvcnRFeHRyYU1lbW9yeUFsbG9jYXRlZChkYXRhU2l6ZSgpKTsK
IH0KIAotdm9pZCBQcm9wZXJ0eVRhYmxlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xv
dFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBQcm9w
ZXJ0eVRhYmxlOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0
b3IpCiB7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxQcm9wZXJ0eVRhYmxlKj4oY2Vs
bCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpA
QCAtMTI2LDYgKzEyNyw4IEBAIHZvaWQgUHJvcGVydHlUYWJsZTo6dmlzaXRDaGlsZHJlbihKU0Nl
bGwKICAgICB2aXNpdG9yLnJlcG9ydEV4dHJhTWVtb3J5VmlzaXRlZCh0aGlzT2JqZWN0LT5kYXRh
U2l6ZSgpKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKFByb3BlcnR5VGFibGUpOworCiB2
b2lkIFByb3BlcnR5VGFibGU6OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQogewogICAgIHN0YXRpY19j
YXN0PFByb3BlcnR5VGFibGUqPihjZWxsKS0+UHJvcGVydHlUYWJsZTo6flByb3BlcnR5VGFibGUo
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3h5T2JqZWN0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm94eU9iamVjdC5j
cHAJKHJldmlzaW9uIDI3MjE5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1By
b3h5T2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE1OCw3ICsxMTU4LDggQEAgYm9vbCBQ
cm94eU9iamVjdDo6aXNSZXZva2VkKCkgY29uc3QKICAgICByZXR1cm4gaGFuZGxlcigpLmlzTnVs
bCgpOwogfQogCi12b2lkIFByb3h5T2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwg
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBQ
cm94eU9iamVjdDo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNp
dG9yKQogewogICAgIFByb3h5T2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PFByb3h5T2JqZWN0
Kj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZv
KCkpOwpAQCAtMTE2OCw0ICsxMTY5LDYgQEAgdm9pZCBQcm94eU9iamVjdDo6dmlzaXRDaGlsZHJl
bihKU0NlbGwqIAogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1faGFuZGxlcik7CiB9
CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihQcm94eU9iamVjdCk7CisKIH0gLy8gbmFtZXNwYWNl
IEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJveHlPYmplY3QuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm94eU9iamVjdC5o
CShyZXZpc2lvbiAyNzIxOTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm94
eU9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC05MSw3ICs5MSw3IEBAIHByaXZhdGU6CiAgICAg
c3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0
KiwgUHJvcGVydHlOYW1lQXJyYXkmLCBEb250RW51bVByb3BlcnRpZXNNb2RlKTsKICAgICBzdGF0
aWMgYm9vbCBzZXRQcm90b3R5cGUoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUg
cHJvdG90eXBlLCBib29sIHNob3VsZFRocm93SWZDYW50U2V0KTsKICAgICBzdGF0aWMgSlNWYWx1
ZSBnZXRQcm90b3R5cGUoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCopOwotICAgIHN0YXRpYyB2
b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJ
U0lUX0NISUxEUkVOOwogCiAgICAgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3RDb21tb24oSlNHbG9i
YWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwogICAgIGJvb2wgcGVyZm9y
bUludGVybmFsTWV0aG9kR2V0T3duUHJvcGVydHkoSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5h
bWUsIFByb3BlcnR5U2xvdCYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
UHJveHlSZXZva2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1Byb3h5UmV2b2tlLmNwcAkocmV2aXNpb24gMjcyMTkyKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvUHJveHlSZXZva2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OSw3ICs2
OSw4IEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihwZXJmb3JtUHJveHlSZXYKICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCi12b2lkIFByb3h5UmV2b2tl
Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1w
bGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBQcm94eVJldm9rZTo6dmlzaXRDaGlsZHJlbklt
cGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFByb3h5UmV2b2tlKiB0
aGlzT2JqZWN0ID0ganNDYXN0PFByb3h5UmV2b2tlKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09C
SkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNzgsNCArNzksNiBAQCB2b2lk
IFByb3h5UmV2b2tlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogCiAgICAgdmlzaXRvci5hcHBlbmQo
dGhpc09iamVjdC0+bV9wcm94eSk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihQcm94eVJl
dm9rZSk7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvUHJveHlSZXZva2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9Qcm94eVJldm9rZS5oCShyZXZpc2lvbiAyNzIxOTIpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9Qcm94eVJldm9rZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01Miw3
ICs1Miw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwg
UHJveHlPYmplY3QqKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNs
b3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKICAgICBKU1ZhbHVlIHBy
b3h5KCkgeyByZXR1cm4gbV9wcm94eS5nZXQoKTsgfQogICAgIHZvaWQgc2V0UHJveHlUb051bGwo
Vk0mIHZtKSB7IHJldHVybiBtX3Byb3h5LnNldCh2bSwgdGhpcywganNOdWxsKCkpOyB9CiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENhY2hlZFJlc3VsdC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwQ2FjaGVk
UmVzdWx0LmNwcAkocmV2aXNpb24gMjcyMTkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvUmVnRXhwQ2FjaGVkUmVzdWx0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEs
OCBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotdm9pZCBSZWdFeHBDYWNoZWRSZXN1bHQ6OnZpc2l0
QWdncmVnYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRv
cj4KK3ZvaWQgUmVnRXhwQ2FjaGVkUmVzdWx0Ojp2aXNpdEFnZ3JlZ2F0ZShWaXNpdG9yJiB2aXNp
dG9yKQogewogICAgIHZpc2l0b3IuYXBwZW5kKG1fbGFzdElucHV0KTsKICAgICB2aXNpdG9yLmFw
cGVuZChtX2xhc3RSZWdFeHApOwpAQCAtNDMsNiArNDQsOSBAQCB2b2lkIFJlZ0V4cENhY2hlZFJl
c3VsdDo6dmlzaXRBZ2dyZWdhdGUoCiAgICAgfQogfQogCit0ZW1wbGF0ZSB2b2lkIFJlZ0V4cENh
Y2hlZFJlc3VsdDo6dmlzaXRBZ2dyZWdhdGUoQWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxh
dGUgdm9pZCBSZWdFeHBDYWNoZWRSZXN1bHQ6OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJik7
CisKIEpTQXJyYXkqIFJlZ0V4cENhY2hlZFJlc3VsdDo6bGFzdFJlc3VsdChKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBKU09iamVjdCogb3duZXIpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFs
T2JqZWN0LT52bSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhw
Q2FjaGVkUmVzdWx0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvUmVnRXhwQ2FjaGVkUmVzdWx0LmgJKHJldmlzaW9uIDI3MjE5MikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENhY2hlZFJlc3VsdC5oCSh3b3JraW5nIGNvcHkpCkBA
IC02NSw3ICs2NSw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fcmVpZmllZCA/IG1fcmVp
ZmllZElucHV0LmdldCgpIDogbV9sYXN0SW5wdXQuZ2V0KCk7CiAgICAgfQogCi0gICAgdm9pZCB2
aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0
b3I+IHZvaWQgdmlzaXRBZ2dyZWdhdGUoVmlzaXRvciYpOwogCiAgICAgLy8gbV9sYXN0UmVnRXhw
IHdvdWxkIGJlIG51bGxwdHIgd2hlbiBSZWdFeHBDYWNoZWRSZXN1bHQgaXMgbm90IHJlaWZpZWQu
CiAgICAgLy8gSWYgd2UgZmluZCBtX2xhc3RSZWdFeHAgaXMgbnVsbHB0ciwgaXQgbWVhbnMgdGhp
cyBzaG91bGQgaG9sZCB0aGUgZW1wdHkgUmVnRXhwLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvUmVnRXhwR2xvYmFsRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwR2xvYmFsRGF0YS5jcHAJKHJldmlzaW9uIDI3MjE5
MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cEdsb2JhbERhdGEuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zMCwxMSArMzAsMTUgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAK
LXZvaWQgUmVnRXhwR2xvYmFsRGF0YTo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImIHZpc2l0
b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBSZWdFeHBHbG9iYWxEYXRhOjp2
aXNpdEFnZ3JlZ2F0ZShWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIG1fY2FjaGVkUmVzdWx0LnZp
c2l0QWdncmVnYXRlKHZpc2l0b3IpOwogfQogCit0ZW1wbGF0ZSB2b2lkIFJlZ0V4cEdsb2JhbERh
dGE6OnZpc2l0QWdncmVnYXRlKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQg
UmVnRXhwR2xvYmFsRGF0YTo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImKTsKKwogSlNWYWx1
ZSBSZWdFeHBHbG9iYWxEYXRhOjpnZXRCYWNrcmVmKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIHVuc2lnbmVkIGkpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwR2xvYmFsRGF0YS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cEdsb2JhbERhdGEu
aAkocmV2aXNpb24gMjcyMTkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVn
RXhwR2xvYmFsRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0MSw3IEBAIHB1YmxpYzoK
ICAgICB2b2lkIHNldElucHV0KEpTR2xvYmFsT2JqZWN0KiwgSlNTdHJpbmcqKTsKICAgICBKU1N0
cmluZyogaW5wdXQoKSB7IHJldHVybiBtX2NhY2hlZFJlc3VsdC5pbnB1dCgpOyB9CiAKLSAgICB2
b2lkIHZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
VmlzaXRvcj4gdm9pZCB2aXNpdEFnZ3JlZ2F0ZShWaXNpdG9yJik7CiAKICAgICBKU1ZhbHVlIGdl
dEJhY2tyZWYoSlNHbG9iYWxPYmplY3QqLCB1bnNpZ25lZCk7CiAgICAgSlNWYWx1ZSBnZXRMYXN0
UGFyZW4oSlNHbG9iYWxPYmplY3QqKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1JlZ0V4cE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvUmVnRXhwT2JqZWN0LmNwcAkocmV2aXNpb24gMjcyMTkyKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDYsNyArNDYsOCBAQCB2b2lkIFJlZ0V4cE9iamVjdDo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtCiAg
ICAgQVNTRVJUKHR5cGUoKSA9PSBSZWdFeHBPYmplY3RUeXBlKTsKIH0KIAotdm9pZCBSZWdFeHBP
YmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikK
K3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFJlZ0V4cE9iamVjdDo6dmlzaXRDaGls
ZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFJlZ0V4cE9i
amVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxSZWdFeHBPYmplY3QqPihjZWxsKTsKICAgICBBU1NF
UlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC01NSw2ICs1Niw4
IEBAIHZvaWQgUmVnRXhwT2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCoKICAgICB2aXNpdG9y
LmFwcGVuZCh0aGlzT2JqZWN0LT5tX2xhc3RJbmRleCk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElM
RFJFTihSZWdFeHBPYmplY3QpOworCiBib29sIFJlZ0V4cE9iamVjdDo6Z2V0T3duUHJvcGVydHlT
bG90KEpTT2JqZWN0KiBvYmplY3QsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFByb3Bl
cnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBWTSYgdm0g
PSBnbG9iYWxPYmplY3QtPnZtKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9SZWdFeHBPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9SZWdFeHBPYmplY3QuaAkocmV2aXNpb24gMjcyMTkyKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEzMyw3ICsx
MzMsNyBAQCBwcml2YXRlOgogICAgIEpTX0VYUE9SVF9QUklWQVRFIFJlZ0V4cE9iamVjdChWTSYs
IFN0cnVjdHVyZSosIFJlZ0V4cCopOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZmluaXNo
Q3JlYXRpb24oVk0mKTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwg
U2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgYm9vbCBs
YXN0SW5kZXhJc1dyaXRhYmxlKCkgY29uc3QKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TYW1wbGluZ1Byb2ZpbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TYW1wbGluZ1Byb2ZpbGVyLmNwcAkocmV2aXNpb24gMjcy
MTkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTY1Miw3ICs2NTIsNyBAQCB2b2lkIFNhbXBsaW5nUHJvZmls
ZXI6OnByb2Nlc3NVbnZlcmlmaWVkCiAgICAgbV91bnByb2Nlc3NlZFN0YWNrVHJhY2VzLmNsZWFy
KCk7CiB9CiAKLXZvaWQgU2FtcGxpbmdQcm9maWxlcjo6dmlzaXQoU2xvdFZpc2l0b3ImIHNsb3RW
aXNpdG9yKQordm9pZCBTYW1wbGluZ1Byb2ZpbGVyOjp2aXNpdChBYnN0cmFjdFNsb3RWaXNpdG9y
JiBzbG90VmlzaXRvcikKIHsKICAgICBSRUxFQVNFX0FTU0VSVChtX2xvY2suaXNMb2NrZWQoKSk7
CiAgICAgZm9yIChKU0NlbGwqIGNlbGwgOiBtX2xpdmVDZWxsUG9pbnRlcnMpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TYW1wbGluZ1Byb2ZpbGVyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5oCShyZXZp
c2lvbiAyNzIxOTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TYW1wbGluZ1By
b2ZpbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTE3MSw3ICsxNzEsNyBAQCBwdWJsaWM6CiAgICAg
dm9pZCBub3RpY2VKU0xvY2tBY3F1aXNpdGlvbigpOwogICAgIHZvaWQgbm90aWNlVk1FbnRyeSgp
OwogICAgIHZvaWQgc2h1dGRvd24oKTsKLSAgICB2b2lkIHZpc2l0KFNsb3RWaXNpdG9yJik7Cisg
ICAgdm9pZCB2aXNpdChBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAgICAgTG9jayYgZ2V0TG9jaygp
IHsgcmV0dXJuIG1fbG9jazsgfQogICAgIHZvaWQgc2V0VGltaW5nSW50ZXJ2YWwoU2Vjb25kcyBp
bnRlcnZhbCkgeyBtX3RpbWluZ0ludGVydmFsID0gaW50ZXJ2YWw7IH0KICAgICBKU19FWFBPUlRf
UFJJVkFURSB2b2lkIHN0YXJ0KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TY29wZWRBcmd1bWVudHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1Njb3BlZEFyZ3VtZW50cy5jcHAJKHJldmlzaW9uIDI3MjE5MikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlZEFyZ3VtZW50cy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTk4LDcgKzk4LDggQEAgU2NvcGVkQXJndW1lbnRzKiBTY29wZWRBcmd1bWVudHM6OmNy
ZWF0ZQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQgU2NvcGVkQXJndW1lbnRzOjp2aXNp
dENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0
eXBlbmFtZSBWaXNpdG9yPgordm9pZCBTY29wZWRBcmd1bWVudHM6OnZpc2l0Q2hpbGRyZW5JbXBs
KEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBTY29wZWRBcmd1bWVudHMq
IHRoaXNPYmplY3QgPSBzdGF0aWNfY2FzdDxTY29wZWRBcmd1bWVudHMqPihjZWxsKTsKICAgICBB
U1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC0xMTUsNiAr
MTE2LDggQEAgdm9pZCBTY29wZWRBcmd1bWVudHM6OnZpc2l0Q2hpbGRyZW4oSlNDZQogICAgIH0K
IH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKFNjb3BlZEFyZ3VtZW50cyk7CisKIFN0cnVjdHVy
ZSogU2NvcGVkQXJndW1lbnRzOjpjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKIHsKICAgICByZXR1cm4gU3RydWN0
dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhTY29wZWRB
cmd1bWVudHNUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TY29wZWRBcmd1bWVudHMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29wZWRBcmd1bWVudHMuaAkocmV2aXNpb24gMjcy
MTkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVkQXJndW1lbnRzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTYzLDkgKzYzLDkgQEAgcHVibGljOgogICAgIAogICAgIC8vIENy
ZWF0ZXMgYW4gYXJndW1lbnRzIG9iamVjdCBieSBjb3B5aW5nIHRoZSBhcmd1bWVudHMgZnJvbSBh
IHdlbGwtZGVmaW5lZCBzdGFjayBsb2NhdGlvbi4KICAgICBzdGF0aWMgU2NvcGVkQXJndW1lbnRz
KiBjcmVhdGVCeUNvcHlpbmdGcm9tKFZNJiwgU3RydWN0dXJlKiwgUmVnaXN0ZXIqIGFyZ3VtZW50
c1N0YXJ0LCB1bnNpZ25lZCB0b3RhbExlbmd0aCwgSlNGdW5jdGlvbiogY2FsbGVlLCBTY29wZWRB
cmd1bWVudHNUYWJsZSosIEpTTGV4aWNhbEVudmlyb25tZW50Kik7Ci0gICAgCi0gICAgc3RhdGlj
IHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwotICAgIAorCisgICAg
REVDTEFSRV9WSVNJVF9DSElMRFJFTjsKKwogICAgIHVpbnQzMl90IGludGVybmFsTGVuZ3RoKCkg
Y29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiBtX3RvdGFsTGVuZ3RoOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NpbXBsZVR5cGVkQXJy
YXlDb250cm9sbGVyLmNwcAkocmV2aXNpb24gMjcyMTkyKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC02Miw3ICs2Miw3IEBAIGJvb2wgU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXI6OmlzQXRv
bWkKICAgICByZXR1cm4gbV9hbGxvd0F0b21pY3NXYWl0OwogfQogCi1ib29sIFNpbXBsZVR5cGVk
QXJyYXlDb250cm9sbGVyOjpKU0FycmF5QnVmZmVyT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1
ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgSlNDOjpTbG90
VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikKK2Jvb2wgU2ltcGxlVHlwZWRB
cnJheUNvbnRyb2xsZXI6OkpTQXJyYXlCdWZmZXJPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVl
Um9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBKU0M6OkFic3Ry
YWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCiB7CiAgICAgaWYg
KFVOTElLRUxZKHJlYXNvbikpCiAgICAgICAgICpyZWFzb24gPSAiSlNBcnJheUJ1ZmZlciBpcyBv
cGFxdWUgcm9vdCI7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TaW1wbGVU
eXBlZEFycmF5Q29udHJvbGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1NpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyLmgJKHJldmlzaW9uIDI3MjE5MikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NpbXBsZVR5cGVkQXJyYXlDb250cm9s
bGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTU4LDcgKzU4LDcgQEAgcHVibGljOgogcHJpdmF0ZToK
ICAgICBjbGFzcyBKU0FycmF5QnVmZmVyT3duZXIgZmluYWwgOiBwdWJsaWMgV2Vha0hhbmRsZU93
bmVyIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIGJvb2wgaXNSZWFjaGFibGVGcm9tT3BhcXVlUm9v
dHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCwgU2xvdFZpc2l0b3Im
LCBjb25zdCBjaGFyKiogcmVhc29uKSBmaW5hbDsKKyAgICAgICAgYm9vbCBpc1JlYWNoYWJsZUZy
b21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0LCBB
YnN0cmFjdFNsb3RWaXNpdG9yJiwgY29uc3QgY2hhcioqIHJlYXNvbikgZmluYWw7CiAgICAgICAg
IHZvaWQgZmluYWxpemUoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCkg
ZmluYWw7CiAgICAgfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU21h
bGxTdHJpbmdzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TbWFsbFN0cmluZ3MuY3BwCShyZXZpc2lvbiAyNzIxOTIpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TbWFsbFN0cmluZ3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Niw3ICs2
Niw3IEBAIHZvaWQgU21hbGxTdHJpbmdzOjppbml0aWFsaXplQ29tbW9uU3RyaW4KICAgICBzZXRJ
c0luaXRpYWxpemVkKHRydWUpOwogfQogCi12b2lkIFNtYWxsU3RyaW5nczo6dmlzaXRTdHJvbmdS
ZWZlcmVuY2VzKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBTbWFsbFN0cmluZ3M6OnZpc2l0
U3Ryb25nUmVmZXJlbmNlcyhBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIG1f
bmVlZHNUb0JlVmlzaXRlZCA9IGZhbHNlOwogICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQo
bV9lbXB0eVN0cmluZyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TbWFs
bFN0cmluZ3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
bWFsbFN0cmluZ3MuaAkocmV2aXNpb24gMjcyMTkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU21hbGxTdHJpbmdzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDkgKzQ5LDkgQEAg
Y2xhc3MgU3RyaW5nSW1wbDsKIAogbmFtZXNwYWNlIEpTQyB7CiAKK2NsYXNzIEFic3RyYWN0U2xv
dFZpc2l0b3I7CiBjbGFzcyBWTTsKIGNsYXNzIEpTU3RyaW5nOwotY2xhc3MgU2xvdFZpc2l0b3I7
CiAKIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbWF4U2luZ2xlQ2hhcmFjdGVyU3RyaW5nID0g
MHhGRjsKIApAQCAtNzgsNyArNzgsNyBAQCBwdWJsaWM6CiAgICAgSlNTdHJpbmcqKiBzaW5nbGVD
aGFyYWN0ZXJTdHJpbmdzKCkgeyByZXR1cm4gJm1fc2luZ2xlQ2hhcmFjdGVyU3RyaW5nc1swXTsg
fQogCiAgICAgdm9pZCBpbml0aWFsaXplQ29tbW9uU3RyaW5ncyhWTSYpOwotICAgIHZvaWQgdmlz
aXRTdHJvbmdSZWZlcmVuY2VzKFNsb3RWaXNpdG9yJik7CisgICAgdm9pZCB2aXNpdFN0cm9uZ1Jl
ZmVyZW5jZXMoQWJzdHJhY3RTbG90VmlzaXRvciYpOwogCiAjZGVmaW5lIEpTQ19DT01NT05fU1RS
SU5HU19BQ0NFU1NPUl9ERUZJTklUSU9OKG5hbWUpIFwKICAgICBKU1N0cmluZyogbmFtZSMjU3Ry
aW5nKCkgY29uc3QgICAgICAgICAgICAgICAgICAgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvU3BhcnNlQXJyYXlWYWx1ZU1hcC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3BhcnNlQXJyYXlWYWx1ZU1hcC5jcHAJKHJldmlzaW9u
IDI3MjE5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NwYXJzZUFycmF5VmFs
dWVNYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTAsNyArMjEwLDggQEAgSlNWYWx1ZSBTcGFy
c2VBcnJheUVudHJ5OjpnZXROb25TcGFyc2VNbwogICAgIHJldHVybiBCYXNlOjpnZXQoKTsKIH0K
IAotdm9pZCBTcGFyc2VBcnJheVZhbHVlTWFwOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwg
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBT
cGFyc2VBcnJheVZhbHVlTWFwOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0
b3ImIHZpc2l0b3IpCiB7CiAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCogdGhpc09iamVjdCA9IGpz
Q2FzdDxTcGFyc2VBcnJheVZhbHVlTWFwKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9J
TkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtMjIzLDUgKzIyNCw3IEBAIHZvaWQgU3Bh
cnNlQXJyYXlWYWx1ZU1hcDo6dmlzaXRDaGlsZHJlbigKICAgICB2aXNpdG9yLnJlcG9ydEV4dHJh
TWVtb3J5VmlzaXRlZCh0aGlzT2JqZWN0LT5tX3JlcG9ydGVkQ2FwYWNpdHkgKiBzaXplb2YoTWFw
OjpLZXlWYWx1ZVBhaXJUeXBlKSk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihTcGFyc2VB
cnJheVZhbHVlTWFwKTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1NwYXJzZUFycmF5VmFsdWVNYXAuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TcGFyc2VBcnJheVZhbHVlTWFwLmgJKHJldmlz
aW9uIDI3MjE5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NwYXJzZUFycmF5
VmFsdWVNYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMTE1LDcgKzExNSw3IEBAIHB1YmxpYzoKICAg
ICAKICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9i
amVjdCosIEpTVmFsdWUgcHJvdG90eXBlKTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwog
CiAgICAgYm9vbCBzcGFyc2VNb2RlKCkKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TdGFja0ZyYW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TdGFja0ZyYW1lLmNwcAkocmV2aXNpb24gMjcyMTkyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RhY2tGcmFtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE0MSw3ICsxNDEsOCBAQCBTdHJpbmcgU3RhY2tGcmFtZTo6dG9TdHJpbmcoVk0mIHZtKSBjb25z
CiAgICAgcmV0dXJuIHRyYWNlQnVpbGQudG9TdHJpbmcoKS5pbXBsKCk7CiB9CiAKLXZvaWQgU3Rh
Y2tGcmFtZTo6dmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5
cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFN0YWNrRnJhbWU6OnZpc2l0Q2hpbGRyZW5JbXBsKFZpc2l0
b3ImIHZpc2l0b3IpCiB7CiAgICAgaWYgKG1fY2FsbGVlKQogICAgICAgICB2aXNpdG9yLmFwcGVu
ZChtX2NhbGxlZSk7CkBAIC0xNDksNSArMTUwLDcgQEAgdm9pZCBTdGFja0ZyYW1lOjp2aXNpdENo
aWxkcmVuKFNsb3RWaXNpdAogICAgICAgICB2aXNpdG9yLmFwcGVuZChtX2NvZGVCbG9jayk7CiB9
CiAKK0RFRklORV9JTlNUQU5DRV9WSVNJVF9DSElMRFJFTihTdGFja0ZyYW1lKTsKKwogfSAvLyBu
YW1lc3BhY2UgSlNDCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0YWNr
RnJhbWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdGFj
a0ZyYW1lLmgJKHJldmlzaW9uIDI3MjE5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1N0YWNrRnJhbWUuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogCiAjaW5j
bHVkZSAiSGVhcC5oIgogI2luY2x1ZGUgIlZNLmgiCisjaW5jbHVkZSAiU2xvdFZpc2l0b3JNYWNy
b3MuaCIKICNpbmNsdWRlICJXYXNtSW5kZXhPck5hbWUuaCIKICNpbmNsdWRlICJXcml0ZUJhcnJp
ZXIuaCIKICNpbmNsdWRlIDxsaW1pdHMuaD4KQEAgLTM1LDcgKzM2LDYgQEAgbmFtZXNwYWNlIEpT
QyB7CiAKIGNsYXNzIENvZGVCbG9jazsKIGNsYXNzIEpTT2JqZWN0OwotY2xhc3MgU2xvdFZpc2l0
b3I7CiAKIGNsYXNzIFN0YWNrRnJhbWUgewogcHVibGljOgpAQCAtNTgsNyArNTgsNyBAQCBwdWJs
aWM6CiAgICAgICAgIHJldHVybiBtX2J5dGVjb2RlSW5kZXg7CiAgICAgfQogICAgIAotICAgIHZv
aWQgdmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfSU5TVEFOQ0VfVklT
SVRfQ0hJTERSRU47CiAgICAgYm9vbCBpc01hcmtlZChWTSYgdm0pIGNvbnN0IHsgcmV0dXJuICgh
bV9jYWxsZWUgfHwgdm0uaGVhcC5pc01hcmtlZChtX2NhbGxlZS5nZXQoKSkpICYmICghbV9jb2Rl
QmxvY2sgfHwgdm0uaGVhcC5pc01hcmtlZChtX2NvZGVCbG9jay5nZXQoKSkpOyB9CiAKIHByaXZh
dGU6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAJ
KHJldmlzaW9uIDI3MjE5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVj
dHVyZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNjcsNyArMTI2Nyw4IEBAIHZvaWQgU3RydWN0
dXJlOjpkaWRUcmFuc2l0aW9uRnJvbVRoaXNTdHIKICAgICAgICAgbV90cmFuc2l0aW9uV2F0Y2hw
b2ludFNldC5maXJlQWxsKHZtKCksIFN0cnVjdHVyZUZpcmVEZXRhaWwodGhpcykpOwogfQogCi12
b2lkIFN0cnVjdHVyZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgU3RydWN0dXJlOjp2aXNp
dENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgU3Ry
dWN0dXJlKiB0aGlzT2JqZWN0ID0ganNDYXN0PFN0cnVjdHVyZSo+KGNlbGwpOwogICAgIEFTU0VS
VF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTEyODksMzIgKzEy
OTAsNDYgQEAgdm9pZCBTdHJ1Y3R1cmU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZQogICAgICAg
ICAvLyBOT1RFOiBUaGlzIGNhbiBpbnRlcmxlYXZlIGluIHBpbigpLCBpbiB3aGljaCBjYXNlIGl0
IG1heSBzZWUgYSBudWxsIHByb3BlcnR5IHRhYmxlLgogICAgICAgICAvLyBUaGF0J3MgZmluZSwg
YmVjYXVzZSB0aGVuIHRoZSBiYXJyaWVyIHdpbGwgZmlyZSBhbmQgd2Ugd2lsbCBzY2FuIHRoaXMg
YWdhaW4uCiAgICAgICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fcHJvcGVydHlUYWJs
ZVVuc2FmZSk7Ci0gICAgfSBlbHNlIGlmICh2aXNpdG9yLmlzQW5hbHl6aW5nSGVhcCgpKQorICAg
IH0gZWxzZSBpZiAodmlzaXRvci52bSgpLmlzQW5hbHl6aW5nSGVhcCgpKQogICAgICAgICB2aXNp
dG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX3Byb3BlcnR5VGFibGVVbnNhZmUpOwogICAgIGVsc2Ug
aWYgKHRoaXNPYmplY3QtPm1fcHJvcGVydHlUYWJsZVVuc2FmZSkKICAgICAgICAgdGhpc09iamVj
dC0+bV9wcm9wZXJ0eVRhYmxlVW5zYWZlLmNsZWFyKCk7CiB9CiAKLWJvb2wgU3RydWN0dXJlOjpp
c0NoZWFwRHVyaW5nR0MoVk0mIHZtKQorREVGSU5FX1ZJU0lUX0NISUxEUkVOKFN0cnVjdHVyZSk7
CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Citib29sIFN0cnVjdHVyZTo6aXNDaGVhcER1
cmluZ0dDKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgLy8gRklYTUU6IFdlIGNvdWxkIG1ha2Ug
dGhpcyBldmVuIHNhZmVyIGJ5IHJldHVybmluZyBmYWxzZSBpZiB0aGlzIHN0cnVjdHVyZSdzIHBy
b3BlcnR5IHRhYmxlCiAgICAgLy8gaGFzIGFueSBsYXJnZSBwcm9wZXJ0eSBuYW1lcy4KICAgICAv
LyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU3MzM0CiAgICAgCi0g
ICAgcmV0dXJuICghbV9nbG9iYWxPYmplY3QgfHwgdm0uaGVhcC5pc01hcmtlZChtX2dsb2JhbE9i
amVjdC5nZXQoKSkpCi0gICAgICAgICYmIChoYXNQb2x5UHJvdG8oKSB8fCAhc3RvcmVkUHJvdG90
eXBlT2JqZWN0KCkgfHwgdm0uaGVhcC5pc01hcmtlZChzdG9yZWRQcm90b3R5cGVPYmplY3QoKSkp
OworICAgIHJldHVybiAoIW1fZ2xvYmFsT2JqZWN0IHx8IHZpc2l0b3IuaXNNYXJrZWQobV9nbG9i
YWxPYmplY3QuZ2V0KCkpKQorICAgICAgICAmJiAoaGFzUG9seVByb3RvKCkgfHwgIXN0b3JlZFBy
b3RvdHlwZU9iamVjdCgpIHx8IHZpc2l0b3IuaXNNYXJrZWQoc3RvcmVkUHJvdG90eXBlT2JqZWN0
KCkpKTsKIH0KIAotYm9vbCBTdHJ1Y3R1cmU6Om1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJiB2aXNp
dG9yKQotewotICAgIFZNJiB2bSA9IHZpc2l0b3Iudm0oKTsKLSAgICBpZiAoIWlzQ2hlYXBEdXJp
bmdHQyh2bSkpCi0gICAgICAgIHJldHVybiB2bS5oZWFwLmlzTWFya2VkKHRoaXMpOwotICAgIAor
dGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK2Jvb2wgU3RydWN0dXJlOjptYXJrSWZDaGVhcDEo
VmlzaXRvciYgdmlzaXRvcikKKy8vYm9vbCBTdHJ1Y3R1cmU6Om1hcmtJZkNoZWFwMShBYnN0cmFj
dFNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworLy8gICAgVk0mIHZtID0gdmlzaXRvci52bSgpOwor
ICAgIGlmICghaXNDaGVhcER1cmluZ0dDKHZpc2l0b3IpKQorLy8gICAgICAgIHJldHVybiB2bS5o
ZWFwLmlzTWFya2VkKHRoaXMpOyAvLyBtbGFtIEZJWE1FCisgICAgICAgIHJldHVybiB2aXNpdG9y
LmlzTWFya2VkKHRoaXMpOyAvLyBtbGFtIEZJWE1FCisKICAgICB2aXNpdG9yLmFwcGVuZFVuYmFy
cmllcmVkKHRoaXMpOwogICAgIHJldHVybiB0cnVlOwogfQogCisvL3RlbXBsYXRlPHR5cGVuYW1l
IFZpc2l0b3I+CisvL2Jvb2wgU3RydWN0dXJlOjptYXJrSWZDaGVhcChWaXNpdG9yJiB2aXNpdG9y
KQorLy97CisvLyAgICByZXR1cm4gbWFya0lmQ2hlYXAxKHZpc2l0b3IpOyAvLyBtbGFtIEZJWE1F
IEhBQ0sgdG8gZ2V0IHRoaXMgY29tcGlsaW5nISEhCisvL30KK3RlbXBsYXRlIGJvb2wgU3RydWN0
dXJlOjptYXJrSWZDaGVhcDEoU2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIGJvb2wgU3RydWN0dXJl
OjptYXJrSWZDaGVhcDEoQWJzdHJhY3RTbG90VmlzaXRvciYpOworCiBSZWY8U3RydWN0dXJlU2hh
cGU+IFN0cnVjdHVyZTo6dG9TdHJ1Y3R1cmVTaGFwZShKU1ZhbHVlIHZhbHVlLCBib29sJiBzYXdQ
b2x5UHJvdG9TdHJ1Y3R1cmUpCiB7CiAgICAgUmVmPFN0cnVjdHVyZVNoYXBlPiBiYXNlU2hhcGUg
PSBTdHJ1Y3R1cmVTaGFwZTo6Y3JlYXRlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TdHJ1Y3R1cmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TdHJ1Y3R1cmUuaAkocmV2aXNpb24gMjcyMTkyKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgJKHdvcmtpbmcgY29weSkKQEAgLTYwLDcgKzYwLDYg
QEAgY2xhc3MgUHJvcGVydHlOYW1lQXJyYXlEYXRhOwogY2xhc3MgUHJvcGVydHlUYWJsZTsKIGNs
YXNzIFN0cnVjdHVyZUNoYWluOwogY2xhc3MgU3RydWN0dXJlU2hhcGU7Ci1jbGFzcyBTbG90Vmlz
aXRvcjsKIGNsYXNzIEpTU3RyaW5nOwogc3RydWN0IER1bXBDb250ZXh0Owogc3RydWN0IEhhc2hU
YWJsZTsKQEAgLTMwNyw3ICszMDYsNyBAQCBwdWJsaWM6CiAgICAgSlNWYWx1ZSBwcm90b3R5cGVG
b3JMb29rdXAoSlNHbG9iYWxPYmplY3QqLCBKU0NlbGwqIGJhc2UpIGNvbnN0OwogICAgIFN0cnVj
dHVyZUNoYWluKiBwcm90b3R5cGVDaGFpbihWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNPYmplY3Qq
IGJhc2UpIGNvbnN0OwogICAgIFN0cnVjdHVyZUNoYWluKiBwcm90b3R5cGVDaGFpbihKU0dsb2Jh
bE9iamVjdCosIEpTT2JqZWN0KiBiYXNlKSBjb25zdDsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENo
aWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJF
TjsKICAgICAKICAgICAvLyBBIFN0cnVjdHVyZSBpcyBjaGVhcCB0byBtYXJrIGR1cmluZyBHQyBp
ZiBkb2luZyBzbyB3b3VsZCBvbmx5IGFkZCBhIHNtYWxsIGFuZCBib3VuZGVkIGFtb3VudAogICAg
IC8vIHRvIG91ciBoZWFwIGZvb3RwcmludC4gRm9yIGV4YW1wbGUsIGlmIHRoZSBzdHJ1Y3R1cmUg
cmVmZXJzIHRvIGEgZ2xvYmFsIG9iamVjdCB0aGF0IGlzIG5vdApAQCAtMzE1LDEwICszMTQsMTIg
QEAgcHVibGljOgogICAgIC8vIGluY3JlYXNlIGluIGZvb3RwcmludCBiZWNhdXNlIG5vIG90aGVy
IG9iamVjdCByZWZlcnMgdG8gdGhhdCBnbG9iYWwgb2JqZWN0LiBUaGlzIG1ldGhvZAogICAgIC8v
IHJldHVybnMgdHJ1ZSBpZiBhbGwgdXNlci1jb250cm9sbGVkIChhbmQgaGVuY2UgdW5ib3VuZGVk
IGluIHNpemUpIG9iamVjdHMgcmVmZXJlbmNlZCBmcm9tIHRoZQogICAgIC8vIFN0cnVjdHVyZSBh
cmUgYWxyZWFkeSBtYXJrZWQuCi0gICAgYm9vbCBpc0NoZWFwRHVyaW5nR0MoVk0mKTsKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiBib29sIGlzQ2hlYXBEdXJpbmdHQyhWaXNpdG9yJik7
CiAgICAgCiAgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoaXMgc3RydWN0dXJlIGlzIG5vdyBtYXJr
ZWQuCi0gICAgYm9vbCBtYXJrSWZDaGVhcChTbG90VmlzaXRvciYpOworLy8gICAgdGVtcGxhdGU8
dHlwZW5hbWUgVmlzaXRvcj4gYm9vbCBtYXJrSWZDaGVhcChWaXNpdG9yJik7CisvLyAgICBib29s
IG1hcmtJZkNoZWFwMShBYnN0cmFjdFNsb3RWaXNpdG9yJik7CisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgVmlzaXRvcj4gYm9vbCBtYXJrSWZDaGVhcDEoVmlzaXRvciYpOyAvLyBtbGFtIFRFU1QKICAg
ICAKICAgICBib29sIGhhc1JhcmVEYXRhKCkgY29uc3QKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVDaGFpbi5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlQ2hhaW4uY3BwCShyZXZpc2lvbiAy
NzIxOTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVDaGFpbi5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTY2LDcgKzY2LDggQEAgdm9pZCBTdHJ1Y3R1cmVDaGFpbjo6
ZmluaXNoQ3JlYXRpb24oVk0mIAogICAgIH0KIH0KIAotdm9pZCBTdHJ1Y3R1cmVDaGFpbjo6dmlz
aXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8
dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgU3RydWN0dXJlQ2hhaW46OnZpc2l0Q2hpbGRyZW5JbXBs
KEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBTdHJ1Y3R1cmVDaGFpbiog
dGhpc09iamVjdCA9IGpzQ2FzdDxTdHJ1Y3R1cmVDaGFpbio+KGNlbGwpOwogICAgIEFTU0VSVF9H
Q19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTgwLDQgKzgxLDYgQEAg
dm9pZCBTdHJ1Y3R1cmVDaGFpbjo6dmlzaXRDaGlsZHJlbihKU0NlbAogICAgIH0KIH0KIAorREVG
SU5FX1ZJU0lUX0NISUxEUkVOKFN0cnVjdHVyZUNoYWluKTsKKwogfSAvLyBuYW1lc3BhY2UgSlND
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVDaGFpbi5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUNoYWlu
LmgJKHJldmlzaW9uIDI3MjE5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0
cnVjdHVyZUNoYWluLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxLDcgKzUxLDcgQEAgcHVibGljOgog
CiAgICAgc3RhdGljIFN0cnVjdHVyZUNoYWluKiBjcmVhdGUoVk0mLCBKU09iamVjdCopOwogICAg
IFN0cnVjdHVyZUlEKiBoZWFkKCkgeyByZXR1cm4gbV92ZWN0b3IuZ2V0KCk7IH0KLSAgICBzdGF0
aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFS
RV9WSVNJVF9DSElMRFJFTjsKIAogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVy
ZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBl
KQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZVJh
cmVEYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
dHJ1Y3R1cmVSYXJlRGF0YS5jcHAJKHJldmlzaW9uIDI3MjE5MikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZVJhcmVEYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NjcsNyArNjcsOCBAQCBTdHJ1Y3R1cmVSYXJlRGF0YTo6U3RydWN0dXJlUmFyZURhdGEoVk0mCiAg
ICAgICAgIG1fcHJldmlvdXMuc2V0KHZtLCB0aGlzLCBwcmV2aW91cyk7CiB9CiAKLXZvaWQgU3Ry
dWN0dXJlUmFyZURhdGE6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYg
dmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFN0cnVjdHVyZVJhcmVE
YXRhOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7
CiAgICAgU3RydWN0dXJlUmFyZURhdGEqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8U3RydWN0dXJlUmFy
ZURhdGEqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3Qs
IGluZm8oKSk7CkBAIC04Niw2ICs4Nyw4IEBAIHZvaWQgU3RydWN0dXJlUmFyZURhdGE6OnZpc2l0
Q2hpbGRyZW4oSlMKICAgICB9CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihTdHJ1Y3R1cmVS
YXJlRGF0YSk7CisKIC8vIC0tLS0tLS0tLS0tIENhY2hlZCBzcGVjaWFsIHByb3BlcnRpZXMgaGVs
cGVyIHdhdGNocG9pbnQgY2xhc3NlcyAtLS0tLS0tLS0tLQogCiBjbGFzcyBDYWNoZWRTcGVjaWFs
UHJvcGVydHlBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQgZmluYWwgOiBw
dWJsaWMgQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50QmFzZSB7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVSYXJlRGF0YS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZVJhcmVEYXRh
LmgJKHJldmlzaW9uIDI3MjE5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0
cnVjdHVyZVJhcmVEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTY4LDcgKzY4LDcgQEAgcHVibGlj
OgogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0Rlc3RydWN0aW9uID0gdHJ1ZTsKICAg
ICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRD
aGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERS
RU47CiAKICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2Jh
bE9iamVjdCosIEpTVmFsdWUgcHJvdG90eXBlKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvU3ltYm9sVGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1N5bWJvbFRhYmxlLmNwcAkocmV2aXNpb24gMjcyMTkyKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFibGUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC05Miw3ICs5Miw4IEBAIHZvaWQgU3ltYm9sVGFibGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2
bSkKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CiB9CiAKLXZvaWQgU3ltYm9sVGFibGU6
OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiB0aGlzQ2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0
ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBTeW1ib2xUYWJsZTo6dmlzaXRDaGlsZHJl
bkltcGwoSlNDZWxsKiB0aGlzQ2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBTeW1ib2xU
YWJsZSogdGhpc1N5bWJvbFRhYmxlID0ganNDYXN0PFN5bWJvbFRhYmxlKj4odGhpc0NlbGwpOwog
ICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc1N5bWJvbFRhYmxlLCBpbmZvKCkpOwpA
QCAtMTA4LDYgKzEwOSw4IEBAIHZvaWQgU3ltYm9sVGFibGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiAKICAgICB0aGlzU3ltYm9sVGFibGUtPm1fbG9jYWxUb0VudHJ5ID0gbnVsbHB0cjsKIH0KIAor
REVGSU5FX1ZJU0lUX0NISUxEUkVOKFN5bWJvbFRhYmxlKTsKKwogY29uc3QgU3ltYm9sVGFibGU6
OkxvY2FsVG9FbnRyeVZlYyYgU3ltYm9sVGFibGU6OmxvY2FsVG9FbnRyeShjb25zdCBDb25jdXJy
ZW50SlNMb2NrZXImKQogewogICAgIGlmIChVTkxJS0VMWSghbV9sb2NhbFRvRW50cnkpKSB7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TeW1ib2xUYWJsZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJvbFRhYmxlLmgJKHJldmlz
aW9uIDI3MjE5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJvbFRhYmxl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTczMyw3ICs3MzMsNyBAQCBwdWJsaWM6CiAgICAgICAgIG1f
c2luZ2xldG9uLm5vdGlmeVdyaXRlKHZtLCB0aGlzLCBzY29wZSwgcmVhc29uKTsKICAgICB9CiAK
LSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7Cisg
ICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIERFQ0xBUkVfRVhQT1JUX0lORk87CiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVQcm9maWxlckxvZy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZVByb2ZpbGVy
TG9nLmNwcAkocmV2aXNpb24gMjcyMTkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvVHlwZVByb2ZpbGVyTG9nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI0LDcgKzEyNCw3IEBA
IHZvaWQgVHlwZVByb2ZpbGVyTG9nOjpwcm9jZXNzTG9nRW50cmllcygKICAgICB9CiB9CiAKLXZv
aWQgVHlwZVByb2ZpbGVyTG9nOjp2aXNpdChTbG90VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgVHlw
ZVByb2ZpbGVyTG9nOjp2aXNpdChBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAg
IGZvciAoTG9nRW50cnkqIGVudHJ5ID0gbV9sb2dTdGFydFB0cjsgZW50cnkgIT0gbV9jdXJyZW50
TG9nRW50cnlQdHI7ICsrZW50cnkpIHsKICAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJl
ZChlbnRyeS0+dmFsdWUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlw
ZVByb2ZpbGVyTG9nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvVHlwZVByb2ZpbGVyTG9nLmgJKHJldmlzaW9uIDI3MjE5MikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1R5cGVQcm9maWxlckxvZy5oCSh3b3JraW5nIGNvcHkpCkBAIC01OSw3
ICs1OSw3IEBAIHB1YmxpYzoKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHByb2Nlc3NMb2dF
bnRyaWVzKFZNJiwgY29uc3QgU3RyaW5nJik7CiAgICAgTG9nRW50cnkqIGxvZ0VuZFB0cigpIGNv
bnN0IHsgcmV0dXJuIG1fbG9nRW5kUHRyOyB9CiAKLSAgICB2b2lkIHZpc2l0KFNsb3RWaXNpdG9y
Jik7CisgICAgdm9pZCB2aXNpdChBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAKICAgICBzdGF0aWMg
cHRyZGlmZl90IGxvZ1N0YXJ0T2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFR5cGVQ
cm9maWxlckxvZywgbV9sb2dTdGFydFB0cik7IH0KICAgICBzdGF0aWMgcHRyZGlmZl90IGN1cnJl
bnRMb2dFbnRyeU9mZnNldCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihUeXBlUHJvZmlsZXJM
b2csIG1fY3VycmVudExvZ0VudHJ5UHRyKTsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvVk0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9WTS5oCShyZXZpc2lvbiAyNzIxOTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9WTS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjEsNiArMTIxLDcgQEAgY2xhc3MgRmFzdE1hbGxv
Y0FsaWduZWRNZW1vcnlBbGxvY2F0b3I7CiBjbGFzcyBHaWdhY2FnZUFsaWduZWRNZW1vcnlBbGxv
Y2F0b3I7CiBjbGFzcyBIYW5kbGVTdGFjazsKIGNsYXNzIEhhc093blByb3BlcnR5Q2FjaGU7Citj
bGFzcyBIZWFwQW5hbHl6ZXI7CiBjbGFzcyBIZWFwUHJvZmlsZXI7CiBjbGFzcyBJZGVudGlmaWVy
OwogY2xhc3MgSW50ZXJwcmV0ZXI7CkBAIC0zMTAsNiArMzExLDEwIEBAIHB1YmxpYzoKICAgICBI
ZWFwUHJvZmlsZXIqIGhlYXBQcm9maWxlcigpIGNvbnN0IHsgcmV0dXJuIG1faGVhcFByb2ZpbGVy
LmdldCgpOyB9CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgSGVhcFByb2ZpbGVyJiBlbnN1cmVIZWFw
UHJvZmlsZXIoKTsKIAorICAgIGJvb2wgaXNBbmFseXppbmdIZWFwKCkgY29uc3QgeyByZXR1cm4g
bV9hY3RpdmVIZWFwQW5hbHl6ZXI7IH0KKyAgICBIZWFwQW5hbHl6ZXIqIGFjdGl2ZUhlYXBBbmFs
eXplcigpIGNvbnN0IHsgcmV0dXJuIG1fYWN0aXZlSGVhcEFuYWx5emVyOyB9CisgICAgdm9pZCBz
ZXRBY3RpdmVIZWFwQW5hbHl6ZXIoSGVhcEFuYWx5emVyKiBhbmFseXplcikgeyBtX2FjdGl2ZUhl
YXBBbmFseXplciA9IGFuYWx5emVyOyB9CisKICNpZiBFTkFCTEUoU0FNUExJTkdfUFJPRklMRVIp
CiAgICAgU2FtcGxpbmdQcm9maWxlciogc2FtcGxpbmdQcm9maWxlcigpIHsgcmV0dXJuIG1fc2Ft
cGxpbmdQcm9maWxlci5nZXQoKTsgfQogICAgIEpTX0VYUE9SVF9QUklWQVRFIFNhbXBsaW5nUHJv
ZmlsZXImIGVuc3VyZVNhbXBsaW5nUHJvZmlsZXIoUmVmPFN0b3B3YXRjaD4mJik7CkBAIC0xMTk0
LDkgKzExOTksMTAgQEAgcHVibGljOgogICAgIGJvb2wgZGlkRW50ZXJWTSB7IGZhbHNlIH07CiBw
cml2YXRlOgogICAgIGJvb2wgbV9mYWlsTmV4dE5ld0NvZGVCbG9jayB7IGZhbHNlIH07Ci0gICAg
RGVsZXRlUHJvcGVydHlNb2RlIG1fZGVsZXRlUHJvcGVydHlNb2RlIHsgRGVsZXRlUHJvcGVydHlN
b2RlOjpEZWZhdWx0IH07CiAgICAgYm9vbCBtX2dsb2JhbENvbnN0UmVkZWNsYXJhdGlvblNob3Vs
ZFRocm93IHsgdHJ1ZSB9OwogICAgIGJvb2wgbV9zaG91bGRCdWlsZFBDVG9Db2RlT3JpZ2luTWFw
cGluZyB7IGZhbHNlIH07CisgICAgRGVsZXRlUHJvcGVydHlNb2RlIG1fZGVsZXRlUHJvcGVydHlN
b2RlIHsgRGVsZXRlUHJvcGVydHlNb2RlOjpEZWZhdWx0IH07CisgICAgSGVhcEFuYWx5emVyKiBt
X2FjdGl2ZUhlYXBBbmFseXplciB7IG51bGxwdHIgfTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q29k
ZUNhY2hlPiBtX2NvZGVDYWNoZTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SW50bENhY2hlPiBtX2lu
dGxDYWNoZTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8QnVpbHRpbkV4ZWN1dGFibGVzPiBtX2J1aWx0
aW5FeGVjdXRhYmxlczsKQEAgLTEyMzcsNiArMTI0Myw3IEBAIHByaXZhdGU6CiAgICAgVk0qIG1f
cHJldjsgLy8gUmVxdWlyZWQgYnkgRG91Ymx5TGlua2VkTGlzdE5vZGUuCiAgICAgVk0qIG1fbmV4
dDsgLy8gUmVxdWlyZWQgYnkgRG91Ymx5TGlua2VkTGlzdE5vZGUuCiAKK3B1YmxpYzoKICAgICAv
LyBGcmllbmRzIGZvciBleGNlcHRpb24gY2hlY2tpbmcgcHVycG9zZSBvbmx5LgogICAgIGZyaWVu
ZCBjbGFzcyBIZWFwOwogICAgIGZyaWVuZCBjbGFzcyBDYXRjaFNjb3BlOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha01hcEltcGwuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtNYXBJbXBsLmNwcAkocmV2aXNpb24gMjcy
MTkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha01hcEltcGwuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zOSw4ICszOSw5IEBAIHZvaWQgV2Vha01hcEltcGw8V2Vha01hcEJ1
Y2tldD46OmRlc3Ryb3kKICAgICBzdGF0aWNfY2FzdDxXZWFrTWFwSW1wbCo+KGNlbGwpLT5+V2Vh
a01hcEltcGwoKTsKIH0KIAotdGVtcGxhdGUgPHR5cGVuYW1lIFdlYWtNYXBCdWNrZXQ+Ci12b2lk
IFdlYWtNYXBJbXBsPFdlYWtNYXBCdWNrZXQ+Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwg
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBXZWFrTWFwQnVja2V0Pgor
dGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgV2Vha01hcEltcGw8V2Vha01hcEJ1Y2tl
dD46OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsK
ICAgICBXZWFrTWFwSW1wbCogdGhpc09iamVjdCA9IGpzQ2FzdDxXZWFrTWFwSW1wbCo+KGNlbGwp
OwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAg
LTQ4LDYgKzQ5LDggQEAgdm9pZCBXZWFrTWFwSW1wbDxXZWFrTWFwQnVja2V0Pjo6dmlzaXRDaAog
ICAgIHZpc2l0b3IucmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKHRoaXNPYmplY3QtPm1fY2FwYWNp
dHkgKiBzaXplb2YoV2Vha01hcEJ1Y2tldCkpOwogfQogCitERUZJTkVfVEVNUExBVEVfVklTSVRf
Q0hJTERSRU4odGVtcGxhdGU8dHlwZW5hbWUgV2Vha01hcEJ1Y2tldD4sIFdlYWtNYXBJbXBsPFdl
YWtNYXBCdWNrZXQ+KTsKKwogdGVtcGxhdGUgPHR5cGVuYW1lIFdlYWtNYXBCdWNrZXQ+CiBzaXpl
X3QgV2Vha01hcEltcGw8V2Vha01hcEJ1Y2tldD46OmVzdGltYXRlZFNpemUoSlNDZWxsKiBjZWxs
LCBWTSYgdm0pCiB7CkBAIC01NiwxNSArNTksMTUgQEAgc2l6ZV90IFdlYWtNYXBJbXBsPFdlYWtN
YXBCdWNrZXQ+Ojplc3RpbQogfQogCiB0ZW1wbGF0ZSA8Pgotdm9pZCBXZWFrTWFwSW1wbDxXZWFr
TWFwQnVja2V0PFdlYWtNYXBCdWNrZXREYXRhS2V5Pj46OnZpc2l0T3V0cHV0Q29uc3RyYWludHMo
SlNDZWxsKiwgU2xvdFZpc2l0b3ImKQordm9pZCBXZWFrTWFwSW1wbDxXZWFrTWFwQnVja2V0PFdl
YWtNYXBCdWNrZXREYXRhS2V5Pj46OnZpc2l0T3V0cHV0Q29uc3RyYWludHMoSlNDZWxsKiwgQWJz
dHJhY3RTbG90VmlzaXRvciYpCiB7CiAgICAgLy8gT25seSBKU1dlYWtNYXAgbmVlZHMgdG8gaGFy
dmVzdCB2YWx1ZSByZWZlcmVuY2VzCiB9CiAKIHRlbXBsYXRlIDw+Ci12b2lkIFdlYWtNYXBJbXBs
PFdlYWtNYXBCdWNrZXQ8V2Vha01hcEJ1Y2tldERhdGFLZXlWYWx1ZT4+Ojp2aXNpdE91dHB1dENv
bnN0cmFpbnRzKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIFdlYWtN
YXBJbXBsPFdlYWtNYXBCdWNrZXQ8V2Vha01hcEJ1Y2tldERhdGFLZXlWYWx1ZT4+Ojp2aXNpdE91
dHB1dENvbnN0cmFpbnRzKEpTQ2VsbCogY2VsbCwgQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRv
cikKIHsKLSAgICBWTSYgdm0gPSB2aXNpdG9yLnZtKCk7CisvLyAgICBWTSYgdm0gPSB2aXNpdG9y
LnZtKCk7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxXZWFrTWFwSW1wbCo+KGNlbGwp
OwogICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sodGhpc09iamVjdC0+Y2VsbExvY2soKSk7CiAg
ICAgYXV0byogYnVmZmVyID0gdGhpc09iamVjdC0+YnVmZmVyKCk7CkBAIC03Miw3ICs3NSw4IEBA
IHZvaWQgV2Vha01hcEltcGw8V2Vha01hcEJ1Y2tldDxXZWFrTWFwQnUKICAgICAgICAgYXV0byog
YnVja2V0ID0gYnVmZmVyICsgaW5kZXg7CiAgICAgICAgIGlmIChidWNrZXQtPmlzRW1wdHkoKSB8
fCBidWNrZXQtPmlzRGVsZXRlZCgpKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlm
ICghdm0uaGVhcC5pc01hcmtlZChidWNrZXQtPmtleSgpKSkKKy8vICAgICAgICBpZiAoIXZtLmhl
YXAuaXNNYXJrZWQoYnVja2V0LT5rZXkoKSkpIC8vIG1sYW0KKyAgICAgICAgaWYgKCF2aXNpdG9y
LmlzTWFya2VkKGJ1Y2tldC0+a2V5KCkpKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAg
IGJ1Y2tldC0+dmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7CiAgICAgfQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha01hcEltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9XZWFrTWFwSW1wbC5oCShyZXZpc2lvbiAyNzIxOTIpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9XZWFrTWFwSW1wbC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xNDQsOCArMTQ0LDEwIEBAIHB1YmxpYzoKICAgICAgICAgY2xlYXJWYWx1ZSgpOwog
ICAgIH0KIAorLy8gICAgdGVtcGxhdGUgPHR5cGVuYW1lIFZpc2l0b3IsIHR5cGVuYW1lIFQgPSBE
YXRhPgorLy8gICAgQUxXQVlTX0lOTElORSB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6Omlz
X3NhbWU8VCwgV2Vha01hcEJ1Y2tldERhdGFLZXlWYWx1ZT46OnZhbHVlPjo6dHlwZSB2aXNpdEFn
Z3JlZ2F0ZShWaXNpdG9yJiB2aXNpdG9yKQogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUID0gRGF0
YT4KLSAgICBBTFdBWVNfSU5MSU5FIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfc2Ft
ZTxULCBXZWFrTWFwQnVja2V0RGF0YUtleVZhbHVlPjo6dmFsdWU+Ojp0eXBlIHZpc2l0QWdncmVn
YXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorICAgIEFMV0FZU19JTkxJTkUgdHlwZW5hbWUgc3Rk
OjplbmFibGVfaWY8c3RkOjppc19zYW1lPFQsIFdlYWtNYXBCdWNrZXREYXRhS2V5VmFsdWU+Ojp2
YWx1ZT46OnR5cGUgdmlzaXRBZ2dyZWdhdGUoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikK
ICAgICB7CiAgICAgICAgIHZpc2l0b3IuYXBwZW5kKG1fZGF0YS52YWx1ZSk7CiAgICAgfQpAQCAt
MjAyLDcgKzIwNCw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNE
ZXN0cnVjdGlvbiA9IHRydWU7CiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKIAot
ICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAg
ICBERUNMQVJFX1RFTVBMQVRFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgc3RhdGljIHNpemVfdCBl
c3RpbWF0ZWRTaXplKEpTQ2VsbCosIFZNJik7CiAKQEAgLTMxMSw3ICszMTMsNyBAQCBwdWJsaWM6
CiAgICAgICAgIHJldHVybiB2bS53ZWFrU2V0U3BhY2U8bW9kZT4oKTsKICAgICB9CiAKLSAgICBz
dGF0aWMgdm9pZCB2aXNpdE91dHB1dENvbnN0cmFpbnRzKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7
CisgICAgc3RhdGljIHZvaWQgdmlzaXRPdXRwdXRDb25zdHJhaW50cyhKU0NlbGwqLCBBYnN0cmFj
dFNsb3RWaXNpdG9yJik7CiAgICAgdm9pZCBmaW5hbGl6ZVVuY29uZGl0aW9uYWxseShWTSYpOwog
CiBwcml2YXRlOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0pTRG9sbGFyVk0u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9KU0RvbGxhclZN
LmNwcAkocmV2aXNpb24gMjcyMTkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0pT
RG9sbGFyVk0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjQsMTQgKzIyNCw3IEBAIHB1YmxpYzoK
IAogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBSb290Kik7CiAKLSAgICBzdGF0aWMgdm9p
ZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCi0gICAg
ewotICAgICAgICBEb2xsYXJWTUFzc2VydFNjb3BlIGFzc2VydFNjb3BlOwotICAgICAgICBFbGVt
ZW50KiB0aGlzT2JqZWN0ID0ganNDYXN0PEVsZW1lbnQqPihjZWxsKTsKLSAgICAgICAgQVNTRVJU
X0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwotICAgICAgICBCYXNlOjp2
aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwotICAgICAgICB2aXNpdG9yLmFwcGVu
ZCh0aGlzT2JqZWN0LT5tX3Jvb3QpOwotICAgIH0KKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVO
OwogCiAgICAgc3RhdGljIEVsZW1lbnRIYW5kbGVPd25lciogaGFuZGxlT3duZXIoKTsKIApAQCAt
MjQ3LDEwICsyNDAsMjIgQEAgcHJpdmF0ZToKICAgICBXcml0ZUJhcnJpZXI8Um9vdD4gbV9yb290
OwogfTsKIAordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgRWxlbWVudDo6dmlzaXRD
aGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIERvbGxh
clZNQXNzZXJ0U2NvcGUgYXNzZXJ0U2NvcGU7CisgICAgRWxlbWVudCogdGhpc09iamVjdCA9IGpz
Q2FzdDxFbGVtZW50Kj4oY2VsbCk7CisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlz
T2JqZWN0LCBpbmZvKCkpOworICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlz
aXRvcik7CisgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9yb290KTsKK30KKworREVG
SU5FX1ZJU0lUX0NISUxEUkVOKEVsZW1lbnQpOworCiBjbGFzcyBFbGVtZW50SGFuZGxlT3duZXIg
ZmluYWwgOiBwdWJsaWMgV2Vha0hhbmRsZU93bmVyIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9D
QVRFRDsKIHB1YmxpYzoKLSAgICBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6
SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgU2xvdFZpc2l0b3ImIHZpc2l0b3Is
IGNvbnN0IGNoYXIqKiByZWFzb24pIGZpbmFsCisgICAgYm9vbCBpc1JlYWNoYWJsZUZyb21PcGFx
dWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIEFic3RyYWN0
U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pIGZpbmFsCiAgICAgewog
ICAgICAgICBEb2xsYXJWTUFzc2VydFNjb3BlIGFzc2VydFNjb3BlOwogICAgICAgICBpZiAoVU5M
SUtFTFkocmVhc29uKSkKQEAgLTMwNCwxOCArMzA5LDIzIEBAIHB1YmxpYzoKICAgICAgICAgcmV0
dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUlu
Zm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwogICAgIH0KIAotICAgIHN0
YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiB0aGlzT2JqZWN0LCBTbG90VmlzaXRvciYg
dmlzaXRvcikKLSAgICB7Ci0gICAgICAgIERvbGxhclZNQXNzZXJ0U2NvcGUgYXNzZXJ0U2NvcGU7
Ci0gICAgICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsK
LSAgICAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKLSAgICAg
ICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHRoaXNPYmplY3QpOwotICAgIH0KKyAgICBERUNMQVJF
X1ZJU0lUX0NISUxEUkVOOwogCiBwcml2YXRlOgogICAgIFdlYWs8RWxlbWVudD4gbV9lbGVtZW50
OwogfTsKIAordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgUm9vdDo6dmlzaXRDaGls
ZHJlbkltcGwoSlNDZWxsKiB0aGlzT2JqZWN0LCBWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIERv
bGxhclZNQXNzZXJ0U2NvcGUgYXNzZXJ0U2NvcGU7CisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhF
UklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOworICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09i
amVjdCwgdmlzaXRvcik7CisgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHRoaXNPYmplY3QpOwor
fQorCitERUZJTkVfVklTSVRfQ0hJTERSRU4oUm9vdCk7CisKIGNsYXNzIFNpbXBsZU9iamVjdCA6
IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKIHB1YmxpYzoKICAgICBTaW1wbGVPYmplY3QoVk0m
IHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKQEAgLTM0MCwxNCArMzUwLDcgQEAgcHVibGljOgog
ICAgICAgICByZXR1cm4gc2ltcGxlT2JqZWN0OwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIHZp
c2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKLSAgICB7Ci0g
ICAgICAgIERvbGxhclZNQXNzZXJ0U2NvcGUgYXNzZXJ0U2NvcGU7Ci0gICAgICAgIFNpbXBsZU9i
amVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxTaW1wbGVPYmplY3QqPihjZWxsKTsKLSAgICAgICAg
QVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwotICAgICAgICBC
YXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwotICAgICAgICB2aXNpdG9y
LmFwcGVuZCh0aGlzT2JqZWN0LT5tX2hpZGRlblZhbHVlKTsKLSAgICB9CisgICAgREVDTEFSRV9W
SVNJVF9DSElMRFJFTjsKIAogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShW
TSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQog
ICAgIHsKQEAgLTM4MCw2ICszODMsMTggQEAgcHJpdmF0ZToKICAgICBXcml0ZUJhcnJpZXI8SlND
OjpVbmtub3duPiBtX2hpZGRlblZhbHVlOwogfTsKIAordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRv
cj4KK3ZvaWQgU2ltcGxlT2JqZWN0Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZp
c2l0b3ImIHZpc2l0b3IpCit7CisgICAgRG9sbGFyVk1Bc3NlcnRTY29wZSBhc3NlcnRTY29wZTsK
KyAgICBTaW1wbGVPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8U2ltcGxlT2JqZWN0Kj4oY2Vs
bCk7CisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwor
ICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CisgICAgdmlzaXRv
ci5hcHBlbmQodGhpc09iamVjdC0+bV9oaWRkZW5WYWx1ZSk7Cit9CisKK0RFRklORV9WSVNJVF9D
SElMRFJFTihTaW1wbGVPYmplY3QpOworCiBjbGFzcyBJbXB1cmVHZXR0ZXIgOiBwdWJsaWMgSlNO
b25GaW5hbE9iamVjdCB7CiBwdWJsaWM6CiAgICAgSW1wdXJlR2V0dGVyKFZNJiB2bSwgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUpCkBAIC00MzYsMTQgKzQ1MSw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0
dXJuIEJhc2U6OmdldE93blByb3BlcnR5U2xvdChvYmplY3QsIGdsb2JhbE9iamVjdCwgbmFtZSwg
c2xvdCk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqIGNl
bGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQotICAgIHsKLSAgICAgICAgRG9sbGFyVk1Bc3NlcnRT
Y29wZSBhc3NlcnRTY29wZTsKLSAgICAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjZWxs
LCBpbmZvKCkpOwotICAgICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKGNlbGwsIHZpc2l0b3IpOwot
ICAgICAgICBJbXB1cmVHZXR0ZXIqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SW1wdXJlR2V0dGVyKj4o
Y2VsbCk7Ci0gICAgICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fZGVsZWdhdGUpOwot
ICAgIH0KKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgdm9pZCBzZXREZWxlZ2F0
ZShWTSYgdm0sIEpTT2JqZWN0KiBkZWxlZ2F0ZSkKICAgICB7CkBAIC00NTQsNiArNDYyLDE4IEBA
IHByaXZhdGU6CiAgICAgV3JpdGVCYXJyaWVyPEpTT2JqZWN0PiBtX2RlbGVnYXRlOwogfTsKIAor
dGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSW1wdXJlR2V0dGVyOjp2aXNpdENoaWxk
cmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgRG9sbGFyVk1B
c3NlcnRTY29wZSBhc3NlcnRTY29wZTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNl
bGwsIGluZm8oKSk7CisgICAgQmFzZTo6dmlzaXRDaGlsZHJlbihjZWxsLCB2aXNpdG9yKTsKKyAg
ICBJbXB1cmVHZXR0ZXIqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SW1wdXJlR2V0dGVyKj4oY2VsbCk7
CisgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9kZWxlZ2F0ZSk7Cit9CisKK0RFRklO
RV9WSVNJVF9DSElMRFJFTihJbXB1cmVHZXR0ZXIpOworCiBzdGF0aWMgSlNDX0RFQ0xBUkVfQ1VT
VE9NX0dFVFRFUihjdXN0b21HZXR0ZXJWYWx1ZUdldHRlcik7CiBzdGF0aWMgSlNDX0RFQ0xBUkVf
Q1VTVE9NX0dFVFRFUihjdXN0b21HZXR0ZXJBY2Vzc29yR2V0dGVyKTsKIApAQCAtMTgyMiwxNCAr
MTg0Miw3IEBAIHB1YmxpYzoKICAgICAgICAgcHV0RGlyZWN0TmF0aXZlRnVuY3Rpb24odm0sIGds
b2JhbE9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImFkZEJ5dGVzIiksIDAsIGZ1
bmN0aW9uV2FzbVN0cmVhbWluZ0NvbXBpbGVyQWRkQnl0ZXMsIE5vSW50cmluc2ljLCBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSk7CiAgICAgfQogCi0g
ICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQotICAgIHsKLSAgICAgICAgRG9sbGFyVk1Bc3NlcnRTY29wZSBhc3NlcnRTY29wZTsK
LSAgICAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxXYXNtU3RyZWFtaW5nQ29tcGlsZXIq
PihjZWxsKTsKLSAgICAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBp
bmZvKCkpOwotICAgICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3Ip
OwotICAgICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX3Byb21pc2UpOwotICAgIH0K
KyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgREVDTEFSRV9JTkZPOwogCkBAIC0x
ODM3LDYgKzE4NTAsMTggQEAgcHVibGljOgogICAgIFJlZjxXYXNtOjpTdHJlYW1pbmdDb21waWxl
cj4gbV9zdHJlYW1pbmdDb21waWxlcjsKIH07CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+
Cit2b2lkIFdhc21TdHJlYW1pbmdDb21waWxlcjo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBj
ZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIERvbGxhclZNQXNzZXJ0U2NvcGUgYXNzZXJ0
U2NvcGU7CisgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxXYXNtU3RyZWFtaW5nQ29tcGls
ZXIqPihjZWxsKTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGlu
Zm8oKSk7CisgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKKyAg
ICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX3Byb21pc2UpOworfQorCitERUZJTkVfVklT
SVRfQ0hJTERSRU4oV2FzbVN0cmVhbWluZ0NvbXBpbGVyKTsKKwogY29uc3QgQ2xhc3NJbmZvIFdh
c21TdHJlYW1pbmdDb21waWxlcjo6c19pbmZvID0geyAiV2FzbVN0cmVhbWluZ0NvbXBpbGVyIiwg
JkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShXYXNt
U3RyZWFtaW5nQ29tcGlsZXIpIH07CiAKIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihmdW5jdGlv
bldhc21TdHJlYW1pbmdDb21waWxlckFkZEJ5dGVzLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpKQpAQCAtMzY5OSwxMyArMzcyNCwxNiBAQCB2b2lk
IEpTRG9sbGFyVk06OmFkZENvbnN0cnVjdGlibGVGdW5jdGlvCiAgICAgcHV0RGlyZWN0KHZtLCBp
ZGVudGlmaWVyLCBKU0Z1bmN0aW9uOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgYXJndW1lbnRz
LCBpZGVudGlmaWVyLnN0cmluZygpLCBmdW5jdGlvbiwgTm9JbnRyaW5zaWMsIGZ1bmN0aW9uKSwg
anNEb2xsYXJWTVByb3BlcnR5QXR0cmlidXRlcyk7CiB9CiAKLXZvaWQgSlNEb2xsYXJWTTo6dmlz
aXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8
dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNEb2xsYXJWTTo6dmlzaXRDaGlsZHJlbkltcGwoSlND
ZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTRG9sbGFyVk0qIHRoaXNPYmpl
Y3QgPSBqc0Nhc3Q8SlNEb2xsYXJWTSo+KGNlbGwpOwogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4o
dGhpc09iamVjdCwgdmlzaXRvcik7CiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9v
YmplY3REb2luZ1NpZGVFZmZlY3RQdXRXaXRob3V0Q29ycmVjdFNsb3RTdGF0dXNTdHJ1Y3R1cmUp
OwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNEb2xsYXJWTSk7CisKIH0gLy8gbmFtZXNw
YWNlIEpTQwogCiBJR05PUkVfV0FSTklOR1NfRU5ECkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvdG9vbHMvSlNEb2xsYXJWTS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS90b29scy9KU0RvbGxhclZNLmgJKHJldmlzaW9uIDI3MjE5MikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS90b29scy9KU0RvbGxhclZNLmgJKHdvcmtpbmcgY29weSkKQEAgLTc0LDcgKzc0LDcg
QEAgcHJpdmF0ZToKICAgICB2b2lkIGFkZEZ1bmN0aW9uKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBj
b25zdCBjaGFyKiBuYW1lLCBOYXRpdmVGdW5jdGlvbiwgdW5zaWduZWQgYXJndW1lbnRzKTsKICAg
ICB2b2lkIGFkZENvbnN0cnVjdGlibGVGdW5jdGlvbihWTSYsIEpTR2xvYmFsT2JqZWN0KiwgY29u
c3QgY2hhciogbmFtZSwgTmF0aXZlRnVuY3Rpb24sIHVuc2lnbmVkIGFyZ3VtZW50cyk7CiAKLSAg
ICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAg
REVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1f
b2JqZWN0RG9pbmdTaWRlRWZmZWN0UHV0V2l0aG91dENvcnJlY3RTbG90U3RhdHVzU3RydWN0dXJl
OwogfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21HbG9iYWwuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21HbG9iYWwuY3BwCShy
ZXZpc2lvbiAyNzIxOTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtR2xvYmFs
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAzLDcgKzEwMyw4IEBAIHZvaWQgR2xvYmFsOjpzZXQo
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE8KICAgICB9CiB9CiAKLXZvaWQgR2xvYmFsOjp2aXNpdEFn
Z3JlZ2F0ZShTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+
Cit2b2lkIEdsb2JhbDo6dmlzaXRBZ2dyZWdhdGUoVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBz
d2l0Y2ggKG1fdHlwZSkgewogICAgIGNhc2UgV2FzbTo6VHlwZTo6RXh0ZXJucmVmOgpAQCAtMTE3
LDYgKzExOCw5IEBAIHZvaWQgR2xvYmFsOjp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYKICAg
ICB9CiB9CiAKK3RlbXBsYXRlIHZvaWQgR2xvYmFsOjp2aXNpdEFnZ3JlZ2F0ZShBYnN0cmFjdFNs
b3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEdsb2JhbDo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZp
c2l0b3ImKTsKKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6Okdsb2JhbAogCiAjZW5kaWYgLy8gRU5B
QkxFKFdFQkFTU0VNQkxZKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUds
b2JhbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21HbG9i
YWwuaAkocmV2aXNpb24gMjcyMTkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUdsb2JhbC5oCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw3ICs1Nyw3IEBAIHB1YmxpYzoKICAgICBK
U1ZhbHVlIGdldChKU0dsb2JhbE9iamVjdCopIGNvbnN0OwogICAgIHVpbnQ2NF90IGdldFByaW1p
dGl2ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWUubV9wcmltaXRpdmU7IH0KICAgICB2b2lkIHNl
dChKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUpOwotICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xv
dFZpc2l0b3ImKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIHZpc2l0QWdn
cmVnYXRlKFZpc2l0b3ImKTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IFQqIG93bmVyKCkg
Y29uc3QgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxUKj4obV9vd25lcik7IH0KICAgICB2b2lk
IHNldE93bmVyKEpTT2JqZWN0KiBvd25lcikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21UYWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbVRhYmxlLmNwcAkocmV2aXNpb24gMjcyMTkyKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbVRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY2LDcgKzE2Niw4IEBA
IEpTVmFsdWUgVGFibGU6OmdldCh1aW50MzJfdCBpbmRleCkgY29uc3QKICAgICByZXR1cm4gbV9q
c1ZhbHVlcy5nZXQoKVtpbmRleCAmIG1fbWFza10uZ2V0KCk7CiB9CiAKLXZvaWQgVGFibGU6OnZp
c2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlz
aXRvcj4KK3ZvaWQgVGFibGU6OnZpc2l0QWdncmVnYXRlKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAg
ICAgUkVMRUFTRV9BU1NFUlQobV9vd25lcik7CiAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayht
X293bmVyLT5jZWxsTG9jaygpKTsKQEAgLTE3NCw2ICsxNzUsOSBAQCB2b2lkIFRhYmxlOjp2aXNp
dEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYgCiAgICAgICAgIHZpc2l0b3IuYXBwZW5kKG1fanNWYWx1
ZXMuZ2V0KClbaV0pOwogfQogCit0ZW1wbGF0ZSB2b2lkIFRhYmxlOjp2aXNpdEFnZ3JlZ2F0ZShB
YnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIFRhYmxlOjp2aXNpdEFnZ3JlZ2F0
ZShTbG90VmlzaXRvciYpOworCiBUeXBlIFRhYmxlOjp3YXNtVHlwZSgpIGNvbnN0CiB7CiAgICAg
aWYgKGlzRXh0ZXJucmVmVGFibGUoKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21UYWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21UYWJsZS5oCShyZXZpc2lvbiAyNzIxOTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtVGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtODAsNyArODAsNyBAQCBwdWJsaWM6CiAg
ICAgT3B0aW9uYWw8dWludDMyX3Q+IGdyb3codWludDMyX3QgZGVsdGEsIEpTVmFsdWUgZGVmYXVs
dFZhbHVlKTsKICAgICB2b2lkIGNvcHkoY29uc3QgVGFibGUqIHNyY1RhYmxlLCB1aW50MzJfdCBk
c3RJbmRleCwgdWludDMyX3Qgc3JjSW5kZXgpOwogCi0gICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShT
bG90VmlzaXRvciYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgdmlzaXRB
Z2dyZWdhdGUoVmlzaXRvciYpOwogCiBwcm90ZWN0ZWQ6CiAgICAgVGFibGUodWludDMyX3QgaW5p
dGlhbCwgT3B0aW9uYWw8dWludDMyX3Q+IG1heGltdW0sIFRhYmxlRWxlbWVudFR5cGUgPSBUYWJs
ZUVsZW1lbnRUeXBlOjpFeHRlcm5yZWYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vanMvSlNUb1dhc21JQ0NhbGxlZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvSlNUb1dhc21JQ0NhbGxlZS5jcHAJKHJldmlzaW9uIDI3MjE5MikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTVG9XYXNtSUNDYWxsZWUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00OSw3ICs0OSw4IEBAIFN0cnVjdHVyZSogSlNUb1dhc21JQ0NhbGxlZTo6
Y3JlYXRlU3RydWMKICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVj
dCwgcHJvdG90eXBlLCBUeXBlSW5mbyhKU0NhbGxlZVR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5m
bygpKTsKIH0KIAotdm9pZCBKU1RvV2FzbUlDQ2FsbGVlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCog
Y2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgor
dm9pZCBKU1RvV2FzbUlDQ2FsbGVlOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZp
c2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNUb1dhc21JQ0NhbGxlZSogdGhpc09iamVjdCA9IGpz
Q2FzdDxKU1RvV2FzbUlDQ2FsbGVlKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhF
UklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNTgsNiArNTksOCBAQCB2b2lkIEpTVG9XYXNt
SUNDYWxsZWU6OnZpc2l0Q2hpbGRyZW4oSlNDCiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVj
dC0+bV9mdW5jdGlvbik7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU1RvV2FzbUlDQ2Fs
bGVlKTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1C
TFkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1RvV2FzbUlDQ2FsbGVl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNUb1dhc21J
Q0NhbGxlZS5oCShyZXZpc2lvbiAyNzIxOTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9KU1RvV2FzbUlDQ2FsbGVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTU2LDcgKzU2LDcgQEAg
cHJpdmF0ZToKICAgICBKU1RvV2FzbUlDQ2FsbGVlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiAgICAgICAgIDogQmFzZSh2bSwgZ2xv
YmFsT2JqZWN0LCBzdHJ1Y3R1cmUpCiAgICAgeyB9Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGls
ZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47
CiAKICAgICBXcml0ZUJhcnJpZXI8V2ViQXNzZW1ibHlGdW5jdGlvbj4gbV9mdW5jdGlvbjsKIH07
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJs
b2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dl
YkFzc2VtYmx5Q29kZUJsb2NrLmNwcAkocmV2aXNpb24gMjcyMTkyKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTgyLDcgKzgyLDggQEAgdm9pZCBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrOjpjbGVhckpT
Q2FsbAogICAgICAgICAoKml0ZXIpLT51bmxpbmsodm0pOwogfQogCi12b2lkIEpTV2ViQXNzZW1i
bHlDb2RlQmxvY2s6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlz
aXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTV2ViQXNzZW1ibHlDb2Rl
QmxvY2s6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikK
IHsKICAgICBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTV2Vi
QXNzZW1ibHlDb2RlQmxvY2sqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRT
KHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC05MCw2ICs5MSw4IEBAIHZvaWQgSlNXZWJBc3NlbWJs
eUNvZGVCbG9jazo6dmlzaXRDaGlsZHIKICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmpl
Y3QsIHZpc2l0b3IpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNXZWJBc3NlbWJseUNv
ZGVCbG9jayk7CisKIHZvaWQgSlNXZWJBc3NlbWJseUNvZGVCbG9jazo6ZmluYWxpemVVbmNvbmRp
dGlvbmFsbHkoVk0mIHZtKQogewogICAgIGZvciAoYXV0byBpdGVyID0gbV9jYWxsTGlua0luZm9z
LmJlZ2luKCk7ICEhaXRlcjsgKytpdGVyKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suaAkocmV2aXNpb24gMjcy
MTkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNvZGVC
bG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC04Niw3ICs4Niw3IEBAIHByaXZhdGU6CiAgICAgREVD
TEFSRV9FWFBPUlRfSU5GTzsKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNEZXN0cnVj
dGlvbiA9IHRydWU7CiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKLSAgICBzdGF0
aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFS
RV9WSVNJVF9DSElMRFJFTjsKIAogICAgIFJlZjxXYXNtOjpDb2RlQmxvY2s+IG1fY29kZUJsb2Nr
OwogICAgIFZlY3RvcjxNYWNyb0Fzc2VtYmxlckNvZGVSZWY8V2FzbUVudHJ5UHRyVGFnPj4gbV93
YXNtVG9KU0V4aXRTdHViczsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pT
V2ViQXNzZW1ibHlHbG9iYWwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlHbG9iYWwuY3BwCShyZXZpc2lvbiAyNzIxOTIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5R2xvYmFsLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNzEsNyArNzEsOCBAQCB2b2lkIEpTV2ViQXNzZW1ibHlHbG9iYWw6OmRl
c3Ryb3koSlNDZWxsCiAgICAgc3RhdGljX2Nhc3Q8SlNXZWJBc3NlbWJseUdsb2JhbCo+KGNlbGwp
LT5KU1dlYkFzc2VtYmx5R2xvYmFsOjp+SlNXZWJBc3NlbWJseUdsb2JhbCgpOwogfQogCi12b2lk
IEpTV2ViQXNzZW1ibHlHbG9iYWw6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90Vmlz
aXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTV2ViQXNz
ZW1ibHlHbG9iYWw6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlz
aXRvcikKIHsKICAgICBKU1dlYkFzc2VtYmx5R2xvYmFsKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpT
V2ViQXNzZW1ibHlHbG9iYWwqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRT
KHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC04MCw2ICs4MSw4IEBAIHZvaWQgSlNXZWJBc3NlbWJs
eUdsb2JhbDo6dmlzaXRDaGlsZHJlbigKICAgICB0aGlzT2JqZWN0LT5nbG9iYWwoKS0+dmlzaXRB
Z2dyZWdhdGUodmlzaXRvcik7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU1dlYkFzc2Vt
Ymx5R2xvYmFsKTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBFTkFCTEUoV0VC
QVNTRU1CTFkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2Vt
Ymx5R2xvYmFsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
SlNXZWJBc3NlbWJseUdsb2JhbC5oCShyZXZpc2lvbiAyNzIxOTIpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5R2xvYmFsLmgJKHdvcmtpbmcgY29weSkKQEAg
LTU5LDcgKzU5LDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBKU1dlYkFzc2VtYmx5R2xvYmFs
KFZNJiwgU3RydWN0dXJlKiwgUmVmPFdhc206Okdsb2JhbD4mJik7CiAgICAgdm9pZCBmaW5pc2hD
cmVhdGlvbihWTSYpOwotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xv
dFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgUmVmPFdhc206
Okdsb2JhbD4gbV9nbG9iYWw7CiB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
anMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuY3BwCShyZXZpc2lvbiAyNzIx
OTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFu
Y2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Myw3ICs3Myw4IEBAIHZvaWQgSlNXZWJBc3NlbWJs
eUluc3RhbmNlOjpkZXN0cm95KEpTQ2UKICAgICBzdGF0aWNfY2FzdDxKU1dlYkFzc2VtYmx5SW5z
dGFuY2UqPihjZWxsKS0+SlNXZWJBc3NlbWJseUluc3RhbmNlOjp+SlNXZWJBc3NlbWJseUluc3Rh
bmNlKCk7CiB9CiAKLXZvaWQgSlNXZWJBc3NlbWJseUluc3RhbmNlOjp2aXNpdENoaWxkcmVuKEpT
Q2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNp
dG9yPgordm9pZCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2Vs
bCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganND
YXN0PEpTV2ViQXNzZW1ibHlJbnN0YW5jZSo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1Rf
SU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTEwMiw2ICsxMDMsOCBAQCB2b2lkIEpT
V2ViQXNzZW1ibHlJbnN0YW5jZTo6dmlzaXRDaGlsZHJlCiAgICAgICAgIHZpc2l0b3IuYXBwZW5k
VW5iYXJyaWVyZWQod3JhcHBlci5nZXQoKSk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihK
U1dlYkFzc2VtYmx5SW5zdGFuY2UpOworCiB2b2lkIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6Zmlu
YWxpemVDcmVhdGlvbihWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZjxX
YXNtOjpDb2RlQmxvY2s+JiYgd2FzbUNvZGVCbG9jaywgSlNPYmplY3QqIGltcG9ydE9iamVjdCwg
V2FzbTo6Q3JlYXRpb25Nb2RlIGNyZWF0aW9uTW9kZSkKIHsKICAgICBtX2luc3RhbmNlLT5maW5h
bGl6ZUNyZWF0aW9uKHRoaXMsIHdhc21Db2RlQmxvY2suY29weVJlZigpKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5j
ZS5oCShyZXZpc2lvbiAyNzIxOTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9K
U1dlYkFzc2VtYmx5SW5zdGFuY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMTA1LDcgKzEwNSw3IEBA
IHB1YmxpYzoKIHByaXZhdGU6CiAgICAgSlNXZWJBc3NlbWJseUluc3RhbmNlKFZNJiwgU3RydWN0
dXJlKiwgUmVmPFdhc206Okluc3RhbmNlPiYmKTsKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZN
JiwgSlNXZWJBc3NlbWJseU1vZHVsZSosIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkKik7Ci0gICAg
c3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERF
Q0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBSZWY8V2FzbTo6SW5zdGFuY2U+IG1faW5zdGFu
Y2U7CiAgICAgVk0qIG1fdm07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9K
U1dlYkFzc2VtYmx5TWVtb3J5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TWVtb3J5LmNwcAkocmV2aXNpb24gMjcyMTkyKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1lbW9yeS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTE1OSw3ICsxNTksOCBAQCB2b2lkIEpTV2ViQXNzZW1ibHlNZW1vcnk6
OmRlc3Ryb3koSlNDZWxsCiAgICAgbWVtb3J5LT5KU1dlYkFzc2VtYmx5TWVtb3J5Ojp+SlNXZWJB
c3NlbWJseU1lbW9yeSgpOwogfQogCi12b2lkIEpTV2ViQXNzZW1ibHlNZW1vcnk6OnZpc2l0Q2hp
bGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVu
YW1lIFZpc2l0b3I+Cit2b2lkIEpTV2ViQXNzZW1ibHlNZW1vcnk6OnZpc2l0Q2hpbGRyZW5JbXBs
KEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBhdXRvKiB0aGlzT2JqZWN0
ID0ganNDYXN0PEpTV2ViQXNzZW1ibHlNZW1vcnkqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JK
RUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC0xNjksNiArMTcwLDggQEAgdm9p
ZCBKU1dlYkFzc2VtYmx5TWVtb3J5Ojp2aXNpdENoaWxkcmVuKAogICAgIHZpc2l0b3IucmVwb3J0
RXh0cmFNZW1vcnlWaXNpdGVkKHRoaXNPYmplY3QtPm1lbW9yeSgpLnNpemUoKSk7CiB9CiAKK0RF
RklORV9WSVNJVF9DSElMRFJFTihKU1dlYkFzc2VtYmx5TWVtb3J5KTsKKwogfSAvLyBuYW1lc3Bh
Y2UgSlNDCiAKICNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TWVtb3J5LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1lbW9yeS5oCShyZXZp
c2lvbiAyNzIxOTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2Vt
Ymx5TWVtb3J5LmgJKHdvcmtpbmcgY29weSkKQEAgLTYzLDcgKzYzLDcgQEAgcHVibGljOgogcHJp
dmF0ZToKICAgICBKU1dlYkFzc2VtYmx5TWVtb3J5KFZNJiwgU3RydWN0dXJlKik7CiAgICAgdm9p
ZCBmaW5pc2hDcmVhdGlvbihWTSYpOwotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlND
ZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAg
UmVmPFdhc206Ok1lbW9yeT4gbV9tZW1vcnk7CiAgICAgV3JpdGVCYXJyaWVyPEpTQXJyYXlCdWZm
ZXI+IG1fYnVmZmVyV3JhcHBlcjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L0pTV2ViQXNzZW1ibHlNb2R1bGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuY3BwCShyZXZpc2lvbiAyNzIxOTIpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTI0LDcgKzEyNCw4IEBAIHZvaWQgSlNXZWJBc3NlbWJseU1vZHVs
ZTo6c2V0Q29kZUJsb2NrKFYKICAgICBtX2NvZGVCbG9ja3Nbc3RhdGljX2Nhc3Q8c2l6ZV90Piht
b2RlKV0uc2V0KHZtLCB0aGlzLCBjb2RlQmxvY2spOwogfQogCi12b2lkIEpTV2ViQXNzZW1ibHlN
b2R1bGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikK
K3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTV2ViQXNzZW1ibHlNb2R1bGU6OnZp
c2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBK
U1dlYkFzc2VtYmx5TW9kdWxlKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTV2ViQXNzZW1ibHlNb2R1
bGUqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGlu
Zm8oKSk7CkBAIC0xMzUsNiArMTM2LDggQEAgdm9pZCBKU1dlYkFzc2VtYmx5TW9kdWxlOjp2aXNp
dENoaWxkcmVuKAogICAgICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2NvZGVCbG9j
a3NbaV0pOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNXZWJBc3NlbWJseU1vZHVsZSk7
CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1i
bHlNb2R1bGUuaAkocmV2aXNpb24gMjcyMTkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC04MCw3ICs4MCw3
IEBAIHByaXZhdGU6CiAKICAgICBKU1dlYkFzc2VtYmx5TW9kdWxlKFZNJiwgU3RydWN0dXJlKiwg
UmVmPFdhc206Ok1vZHVsZT4mJik7CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOwotICAg
IHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBE
RUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgUmVmPFdhc206Ok1vZHVsZT4gbV9tb2R1bGU7
CiAgICAgV3JpdGVCYXJyaWVyPFN5bWJvbFRhYmxlPiBtX2V4cG9ydFN5bWJvbFRhYmxlOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseVRhYmxlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5
VGFibGUuY3BwCShyZXZpc2lvbiAyNzIxOTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9KU1dlYkFzc2VtYmx5VGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Miw3ICs3Miw4
IEBAIHZvaWQgSlNXZWJBc3NlbWJseVRhYmxlOjpkZXN0cm95KEpTQ2VsbCoKICAgICBzdGF0aWNf
Y2FzdDxKU1dlYkFzc2VtYmx5VGFibGUqPihjZWxsKS0+SlNXZWJBc3NlbWJseVRhYmxlOjp+SlNX
ZWJBc3NlbWJseVRhYmxlKCk7CiB9CiAKLXZvaWQgSlNXZWJBc3NlbWJseVRhYmxlOjp2aXNpdENo
aWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBl
bmFtZSBWaXNpdG9yPgordm9pZCBKU1dlYkFzc2VtYmx5VGFibGU6OnZpc2l0Q2hpbGRyZW5JbXBs
KEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU1dlYkFzc2VtYmx5VGFi
bGUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNXZWJBc3NlbWJseVRhYmxlKj4oY2VsbCk7CiAgICAg
QVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtODEsNiAr
ODIsOCBAQCB2b2lkIEpTV2ViQXNzZW1ibHlUYWJsZTo6dmlzaXRDaGlsZHJlbihKCiAgICAgdGhp
c09iamVjdC0+dGFibGUoKS0+dmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7CiB9CiAKK0RFRklORV9W
SVNJVF9DSElMRFJFTihKU1dlYkFzc2VtYmx5VGFibGUpOworCiBib29sIEpTV2ViQXNzZW1ibHlU
YWJsZTo6Z3Jvdyh1aW50MzJfdCBkZWx0YSwgSlNWYWx1ZSBkZWZhdWx0VmFsdWUpCiB7CiAgICAg
aWYgKGRlbHRhID09IDApCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dl
YkFzc2VtYmx5VGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9KU1dlYkFzc2VtYmx5VGFibGUuaAkocmV2aXNpb24gMjcyMTkyKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseVRhYmxlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTcwLDggKzcwLDggQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBKU1dlYkFzc2VtYmx5VGFi
bGUoVk0mLCBTdHJ1Y3R1cmUqLCBSZWY8V2FzbTo6VGFibGU+JiYpOwogICAgIHZvaWQgZmluaXNo
Q3JlYXRpb24oVk0mKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNs
b3RWaXNpdG9yJik7Ci0KKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOworLy8KICAgICBSZWY8
V2FzbTo6VGFibGU+IG1fdGFibGU7CiB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmNwcAkocmV2aXNpb24gMjcy
MTkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlv
bi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1Miw3ICs0NTIsOCBAQCBXZWJBc3NlbWJseUZ1bmN0
aW9uOjpXZWJBc3NlbWJseUZ1bmN0aW9uCiAgICAgLCBtX2ltcG9ydGFibGVGdW5jdGlvbiB7IHNp
Z25hdHVyZUluZGV4LCB3YXNtVG9XYXNtRW50cnlwb2ludExvYWRMb2NhdGlvbiB9CiB7IH0KIAot
dm9pZCBXZWJBc3NlbWJseUZ1bmN0aW9uOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xv
dFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBXZWJB
c3NlbWJseUZ1bmN0aW9uOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3Im
IHZpc2l0b3IpCiB7CiAgICAgV2ViQXNzZW1ibHlGdW5jdGlvbiogdGhpc09iamVjdCA9IGpzQ2Fz
dDxXZWJBc3NlbWJseUZ1bmN0aW9uKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhF
UklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNDYxLDYgKzQ2Miw4IEBAIHZvaWQgV2ViQXNz
ZW1ibHlGdW5jdGlvbjo6dmlzaXRDaGlsZHJlbigKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2Jq
ZWN0LT5tX2pzVG9XYXNtSUNDYWxsZWUpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oV2Vi
QXNzZW1ibHlGdW5jdGlvbik7CisKIHZvaWQgV2ViQXNzZW1ibHlGdW5jdGlvbjo6ZGVzdHJveShK
U0NlbGwqIGNlbGwpCiB7CiAgICAgc3RhdGljX2Nhc3Q8V2ViQXNzZW1ibHlGdW5jdGlvbio+KGNl
bGwpLT5XZWJBc3NlbWJseUZ1bmN0aW9uOjp+V2ViQXNzZW1ibHlGdW5jdGlvbigpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rp
b24uaAkocmV2aXNpb24gMjcyMTkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
V2ViQXNzZW1ibHlGdW5jdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC04Niw3ICs4Niw3IEBAIHB1
YmxpYzoKICAgICBXYXNtOjpJbnN0YW5jZSogcHJldmlvdXNJbnN0YW5jZShDYWxsRnJhbWUqKTsK
IAogcHJpdmF0ZToKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RW
aXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKICAgICBXZWJBc3NlbWJseUZ1
bmN0aW9uKFZNJiwgTmF0aXZlRXhlY3V0YWJsZSosIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJl
KiwgV2FzbTo6Q2FsbGVlJiBqc0VudHJ5cG9pbnQsIFdhc21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rp
b246OkxvYWRMb2NhdGlvbiBlbnRyeXBvaW50TG9hZExvY2F0aW9uLCBXYXNtOjpTaWduYXR1cmVJ
bmRleCk7CiAKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4ganNDYWxs
RW50cnlwb2ludFNsb3coKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dl
YkFzc2VtYmx5RnVuY3Rpb25CYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uQmFzZS5jcHAJKHJldmlzaW9uIDI3MjE5
MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb25C
YXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEsNyArNDEsOCBAQCBXZWJBc3NlbWJseUZ1bmN0
aW9uQmFzZTo6V2ViQXNzZW1ibHlGdW5jCiAgICAgOiBCYXNlKHZtLCBleGVjdXRhYmxlLCBnbG9i
YWxPYmplY3QsIHN0cnVjdHVyZSkKIHsgfQogCi12b2lkIFdlYkFzc2VtYmx5RnVuY3Rpb25CYXNl
Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1w
bGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBXZWJBc3NlbWJseUZ1bmN0aW9uQmFzZTo6dmlz
aXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFdl
YkFzc2VtYmx5RnVuY3Rpb25CYXNlKiB0aGlzT2JqZWN0ID0ganNDYXN0PFdlYkFzc2VtYmx5RnVu
Y3Rpb25CYXNlKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2Jq
ZWN0LCBpbmZvKCkpOwpAQCAtNDksNiArNTAsOCBAQCB2b2lkIFdlYkFzc2VtYmx5RnVuY3Rpb25C
YXNlOjp2aXNpdENoaWxkCiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9pbnN0YW5j
ZSk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihXZWJBc3NlbWJseUZ1bmN0aW9uQmFzZSk7
CisKIHZvaWQgV2ViQXNzZW1ibHlGdW5jdGlvbkJhc2U6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwg
TmF0aXZlRXhlY3V0YWJsZSogZXhlY3V0YWJsZSwgdW5zaWduZWQgbGVuZ3RoLCBjb25zdCBTdHJp
bmcmIG5hbWUsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogaW5zdGFuY2UpCiB7CiAgICAgQmFzZTo6
ZmluaXNoQ3JlYXRpb24odm0sIGV4ZWN1dGFibGUsIGxlbmd0aCwgbmFtZSk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uQmFzZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rp
b25CYXNlLmgJKHJldmlzaW9uIDI3MjE5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL1dlYkFzc2VtYmx5RnVuY3Rpb25CYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDcgKzQ2
LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZJbnN0YW5jZSgpIHsg
cmV0dXJuIE9CSkVDVF9PRkZTRVRPRihXZWJBc3NlbWJseUZ1bmN0aW9uQmFzZSwgbV9pbnN0YW5j
ZSk7IH0KIAogcHJvdGVjdGVkOgotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogICAgIHZvaWQg
ZmluaXNoQ3JlYXRpb24oVk0mLCBOYXRpdmVFeGVjdXRhYmxlKiwgdW5zaWduZWQgbGVuZ3RoLCBj
b25zdCBTdHJpbmcmIG5hbWUsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSopOwogICAgIFdlYkFzc2Vt
Ymx5RnVuY3Rpb25CYXNlKFZNJiwgTmF0aXZlRXhlY3V0YWJsZSosIEpTR2xvYmFsT2JqZWN0Kiwg
U3RydWN0dXJlKik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFz
c2VtYmx5TW9kdWxlUmVjb3JkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZVJlY29yZC5jcHAJKHJldmlzaW9uIDI3MjE5MikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3Jk
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzgsNyArNzgsOCBAQCB2b2lkIFdlYkFzc2VtYmx5TW9k
dWxlUmVjb3JkOjpmaW5pc2hDcmVhCiAgICAgfQogfQogCi12b2lkIFdlYkFzc2VtYmx5TW9kdWxl
UmVjb3JkOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3Ip
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBXZWJBc3NlbWJseU1vZHVsZVJlY29y
ZDo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewog
ICAgIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkKiB0aGlzT2JqZWN0ID0ganNDYXN0PFdlYkFzc2Vt
Ymx5TW9kdWxlUmVjb3JkKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0
aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtODgsNiArODksOCBAQCB2b2lkIFdlYkFzc2VtYmx5TW9k
dWxlUmVjb3JkOjp2aXNpdENoaWxkCiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9l
eHBvcnRzT2JqZWN0KTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKFdlYkFzc2VtYmx5TW9k
dWxlUmVjb3JkKTsKKwogdm9pZCBXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6cHJlcGFyZUxpbmso
Vk0mIHZtLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGluc3RhbmNlKQogewogICAgIFJFTEVBU0Vf
QVNTRVJUKCFtX2luc3RhbmNlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuaAkocmV2aXNpb24gMjcyMTky
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNv
cmQuaAkod29ya2luZyBjb3B5KQpAQCAtNjksNyArNjksNyBAQCBwcml2YXRlOgogCiAgICAgdm9p
ZCBmaW5pc2hDcmVhdGlvbihKU0dsb2JhbE9iamVjdCosIFZNJiwgY29uc3QgV2FzbTo6TW9kdWxl
SW5mb3JtYXRpb24mKTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwg
U2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgV3JpdGVC
YXJyaWVyPEpTV2ViQXNzZW1ibHlJbnN0YW5jZT4gbV9pbnN0YW5jZTsKICAgICBXcml0ZUJhcnJp
ZXI8SlNPYmplY3Q+IG1fc3RhcnRGdW5jdGlvbjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL1dlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5j
cHAJKHJldmlzaW9uIDI3MjE5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dl
YkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjcsNyArNjcs
OCBAQCBTdHJ1Y3R1cmUqIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uOjpjCiAgICAgcmV0dXJu
IFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8o
SlNGdW5jdGlvblR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKIH0KIAotdm9pZCBXZWJB
c3NlbWJseVdyYXBwZXJGdW5jdGlvbjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgV2ViQXNz
ZW1ibHlXcmFwcGVyRnVuY3Rpb246OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlz
aXRvciYgdmlzaXRvcikKIHsKICAgICBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbiogdGhpc09i
amVjdCA9IGpzQ2FzdDxXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbio+KGNlbGwpOwogICAgIEFT
U0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTc2LDYgKzc3
LDggQEAgdm9pZCBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbjo6dmlzaXRDaAogICAgIHZpc2l0
b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fZnVuY3Rpb24pOwogfQogCitERUZJTkVfVklTSVRfQ0hJ
TERSRU4oV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24pOworCiBKU0NfREVGSU5FX0hPU1RfRlVO
Q1RJT04oY2FsbFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLCAoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpKQogewogICAgIFZNJiB2bSA9IGdsb2Jh
bE9iamVjdC0+dm0oKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFz
c2VtYmx5V3JhcHBlckZ1bmN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uaAkocmV2aXNpb24gMjcyMTky
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlXcmFwcGVyRnVu
Y3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtNTksNyArNTksNyBAQCBwdWJsaWM6CiBwcml2YXRl
OgogICAgIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uKFZNJiwgTmF0aXZlRXhlY3V0YWJsZSos
IEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKiwgV2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlv
bik7CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIE5hdGl2ZUV4ZWN1dGFibGUqLCB1bnNp
Z25lZCBsZW5ndGgsIGNvbnN0IFN0cmluZyYgbmFtZSwgSlNPYmplY3QqLCBKU1dlYkFzc2VtYmx5
SW5zdGFuY2UqKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RW
aXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIFdyaXRlQmFycmll
cjxKU09iamVjdD4gbV9mdW5jdGlvbjsKICAgICAvLyBJdCdzIHNhZmUgdG8ganVzdCBob2xkIHRo
ZSByYXcgV2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbiBiZWNhdXNlIHdlIGhhdmUgYSByZWZl
cmVuY2UKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0
b3JlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJPYmplY3RTdG9yZS5jcHAJKHJldmlzaW9uIDI3MjE5MikKKysrIFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzI4
LDcgKzcyOCw5IEBAIHZvaWQgSURCT2JqZWN0U3RvcmU6OnJvbGxiYWNrRm9yVmVyc2lvbkMKICAg
ICB9CiB9CiAKLXZvaWQgSURCT2JqZWN0U3RvcmU6OnZpc2l0UmVmZXJlbmNlZEluZGV4ZXMoU2xv
dFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0CisvL3ZvaWQgSURCT2JqZWN0U3RvcmU6OnZpc2l0UmVm
ZXJlbmNlZEluZGV4ZXMoU2xvdFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0Cit0ZW1wbGF0ZTx0eXBl
bmFtZSBWaXNpdG9yPgordm9pZCBJREJPYmplY3RTdG9yZTo6dmlzaXRSZWZlcmVuY2VkSW5kZXhl
cyhWaXNpdG9yJiB2aXNpdG9yKSBjb25zdAogewogICAgIExvY2tlcjxMb2NrPiBsb2NrZXIobV9y
ZWZlcmVuY2VkSW5kZXhMb2NrKTsKICAgICBmb3IgKGF1dG8mIGluZGV4IDogbV9yZWZlcmVuY2Vk
SW5kZXhlcy52YWx1ZXMoKSkKQEAgLTczNyw2ICs3MzksOSBAQCB2b2lkIElEQk9iamVjdFN0b3Jl
Ojp2aXNpdFJlZmVyZW5jZWRJbmRlCiAgICAgICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChpbmRl
eC5nZXQoKSk7CiB9CiAKK3RlbXBsYXRlIHZvaWQgSURCT2JqZWN0U3RvcmU6OnZpc2l0UmVmZXJl
bmNlZEluZGV4ZXMoQWJzdHJhY3RTbG90VmlzaXRvciYpIGNvbnN0OwordGVtcGxhdGUgdm9pZCBJ
REJPYmplY3RTdG9yZTo6dmlzaXRSZWZlcmVuY2VkSW5kZXhlcyhTbG90VmlzaXRvciYpIGNvbnN0
OworCiB2b2lkIElEQk9iamVjdFN0b3JlOjpyZW5hbWVSZWZlcmVuY2VkSW5kZXgoSURCSW5kZXgm
IGluZGV4LCBjb25zdCBTdHJpbmcmIG5ld05hbWUpCiB7CiAgICAgTE9HKEluZGV4ZWREQiwgIklE
Qk9iamVjdFN0b3JlOjpyZW5hbWVSZWZlcmVuY2VkSW5kZXgiKTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuaAkocmV2aXNpb24g
MjcyMTkyKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3Rv
cmUuaAkod29ya2luZyBjb3B5KQpAQCAtMTA5LDcgKzEwOSw4IEBAIHB1YmxpYzoKICAgICB2b2lk
IHJlZigpOwogICAgIHZvaWQgZGVyZWYoKTsKIAotICAgIHZvaWQgdmlzaXRSZWZlcmVuY2VkSW5k
ZXhlcyhKU0M6OlNsb3RWaXNpdG9yJikgY29uc3Q7CisvLyAgICB2b2lkIHZpc2l0UmVmZXJlbmNl
ZEluZGV4ZXMoSlNDOjpTbG90VmlzaXRvciYpIGNvbnN0OworICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFZpc2l0b3I+IHZvaWQgdmlzaXRSZWZlcmVuY2VkSW5kZXhlcyhWaXNpdG9yJikgY29uc3Q7CiAg
ICAgdm9pZCByZW5hbWVSZWZlcmVuY2VkSW5kZXgoSURCSW5kZXgmLCBjb25zdCBTdHJpbmcmIG5l
d05hbWUpOwogCiBwcml2YXRlOgpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCVHJhbnNhY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmNwcAkocmV2aXNpb24gMjcyMTkyKQorKysgU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb24uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xNDU1LDcgKzE0NTUsOCBAQCB2b2lkIElEQlRyYW5zYWN0aW9uOjpjb25uZWN0
aW9uQ2xvc2VkRnJvCiAgICAgZmlyZU9uQWJvcnQoKTsKIH0KIAotdm9pZCBJREJUcmFuc2FjdGlv
bjo6dmlzaXRSZWZlcmVuY2VkT2JqZWN0U3RvcmVzKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3Ip
IGNvbnN0Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBJREJUcmFuc2FjdGlvbjo6
dmlzaXRSZWZlcmVuY2VkT2JqZWN0U3RvcmVzKFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0CiB7CiAg
ICAgTG9ja2VyPExvY2s+IGxvY2tlcihtX3JlZmVyZW5jZWRPYmplY3RTdG9yZUxvY2spOwogICAg
IGZvciAoYXV0byYgb2JqZWN0U3RvcmUgOiBtX3JlZmVyZW5jZWRPYmplY3RTdG9yZXMudmFsdWVz
KCkpCkBAIC0xNDY0LDYgKzE0NjUsOSBAQCB2b2lkIElEQlRyYW5zYWN0aW9uOjp2aXNpdFJlZmVy
ZW5jZWRPYmplCiAgICAgICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChvYmplY3RTdG9yZS5nZXQo
KSk7CiB9CiAKK3RlbXBsYXRlIHZvaWQgSURCVHJhbnNhY3Rpb246OnZpc2l0UmVmZXJlbmNlZE9i
amVjdFN0b3JlcyhKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0OwordGVt
cGxhdGUgdm9pZCBJREJUcmFuc2FjdGlvbjo6dmlzaXRSZWZlcmVuY2VkT2JqZWN0U3RvcmVzKEpT
Qzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0OworCiB2b2lkIElEQlRyYW5zYWN0aW9uOjpo
YW5kbGVQZW5kaW5nT3BlcmF0aW9ucygpCiB7CiAgICAgQVNTRVJUKGNhbkN1cnJlbnRUaHJlYWRB
Y2Nlc3NUaHJlYWRMb2NhbERhdGEobV9kYXRhYmFzZS0+b3JpZ2luVGhyZWFkKCkpKTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb24u
aAkocmV2aXNpb24gMjcyMTkyKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCVHJhbnNhY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMTQ5LDcgKzE0OSw4IEBAIHB1Ymxp
YzoKIAogICAgIHZvaWQgY29ubmVjdGlvbkNsb3NlZEZyb21TZXJ2ZXIoY29uc3QgSURCRXJyb3Im
KTsKIAotICAgIHZvaWQgdmlzaXRSZWZlcmVuY2VkT2JqZWN0U3RvcmVzKEpTQzo6U2xvdFZpc2l0
b3ImKSBjb25zdDsKKy8vICAgIHZvaWQgdmlzaXRSZWZlcmVuY2VkT2JqZWN0U3RvcmVzKEpTQzo6
U2xvdFZpc2l0b3ImKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lk
IHZpc2l0UmVmZXJlbmNlZE9iamVjdFN0b3JlcyhWaXNpdG9yJikgY29uc3Q7CiAKICAgICBXRUJD
T1JFX0VYUE9SVCBzdGF0aWMgc3RkOjphdG9taWM8dW5zaWduZWQ+IG51bWJlck9mSURCVHJhbnNh
Y3Rpb25zOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQnVm
ZmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1
ZGlvQnVmZmVyLmNwcAkocmV2aXNpb24gMjcyMTkyKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJhdWRpby9BdWRpb0J1ZmZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1NCwxMiArMTU0
LDE3IEBAIEV4Y2VwdGlvbk9yPEpTQzo6SlNWYWx1ZT4gQXVkaW9CdWZmZXI6OmcKICAgICByZXR1
cm4gY29uc3RydWN0SlNBcnJheSgpOwogfQogCi12b2lkIEF1ZGlvQnVmZmVyOjp2aXNpdENoYW5u
ZWxXcmFwcGVycyhKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy92b2lkIEF1ZGlvQnVmZmVy
Ojp2aXNpdENoYW5uZWxXcmFwcGVycyhKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxh
dGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgQXVkaW9CdWZmZXI6OnZpc2l0Q2hhbm5lbFdyYXBw
ZXJzKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgZm9yIChhdXRvJiBjaGFubmVsV3JhcHBlciA6
IG1fY2hhbm5lbFdyYXBwZXJzKQogICAgICAgICBjaGFubmVsV3JhcHBlci52aXNpdCh2aXNpdG9y
KTsKIH0KIAordGVtcGxhdGUgdm9pZCBBdWRpb0J1ZmZlcjo6dmlzaXRDaGFubmVsV3JhcHBlcnMo
SlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEF1ZGlvQnVmZmVyOjp2
aXNpdENoYW5uZWxXcmFwcGVycyhKU0M6OlNsb3RWaXNpdG9yJik7CisKIFJlZlB0cjxGbG9hdDMy
QXJyYXk+IEF1ZGlvQnVmZmVyOjpjaGFubmVsRGF0YSh1bnNpZ25lZCBjaGFubmVsSW5kZXgpCiB7
CiAgICAgaWYgKGNoYW5uZWxJbmRleCA+PSBtX2NoYW5uZWxzLnNpemUoKSkKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9CdWZmZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQnVmZmVyLmgJKHJldmlzaW9uIDI3
MjE5MikKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9CdWZmZXIuaAko
d29ya2luZyBjb3B5KQpAQCAtNzUsNyArNzUsOCBAQCBwdWJsaWM6CiAKICAgICBzaXplX3QgbWVt
b3J5Q29zdCgpIGNvbnN0OwogCi0gICAgdm9pZCB2aXNpdENoYW5uZWxXcmFwcGVycyhKU0M6OlNs
b3RWaXNpdG9yJik7CisvLyAgICB2b2lkIHZpc2l0Q2hhbm5lbFdyYXBwZXJzKEpTQzo6U2xvdFZp
c2l0b3ImKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIHZpc2l0Q2hhbm5l
bFdyYXBwZXJzKFZpc2l0b3ImKTsKICAgICAKIHByaXZhdGU6CiAgICAgQXVkaW9CdWZmZXIodW5z
aWduZWQgbnVtYmVyT2ZDaGFubmVscywgc2l6ZV90IGxlbmd0aCwgZmxvYXQgc2FtcGxlUmF0ZSwg
TGVnYWN5UHJldmVudERldGFjaGluZyA9IExlZ2FjeVByZXZlbnREZXRhY2hpbmc6Ok5vKTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0RPTUdDT3V0cHV0Q29uc3RyYWludC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvRE9NR0NPdXRwdXRDb25z
dHJhaW50LmNwcAkocmV2aXNpb24gMjcyMTkyKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvRE9NR0NPdXRwdXRDb25zdHJhaW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDksNyArNDks
NyBAQCBET01HQ091dHB1dENvbnN0cmFpbnQ6On5ET01HQ091dHB1dENvbnN0CiB7CiB9CiAKLXZv
aWQgRE9NR0NPdXRwdXRDb25zdHJhaW50OjpleGVjdXRlSW1wbChTbG90VmlzaXRvciYgdmlzaXRv
cikKK3ZvaWQgRE9NR0NPdXRwdXRDb25zdHJhaW50OjpleGVjdXRlSW1wbChBYnN0cmFjdFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQogewogICAgIEhlYXAmIGhlYXAgPSBtX3ZtLmhlYXA7CiAgICAgCkBA
IC02MCw4ICs2MCw4IEBAIHZvaWQgRE9NR0NPdXRwdXRDb25zdHJhaW50OjpleGVjdXRlSW1wbCgK
ICAgICAKICAgICBtX2NsaWVudERhdGEuZm9yRWFjaE91dHB1dENvbnN0cmFpbnRTcGFjZSgKICAg
ICAgICAgWyZdIChTdWJzcGFjZSYgc3Vic3BhY2UpIHsKLSAgICAgICAgICAgIGF1dG8gZnVuYyA9
IFtdIChTbG90VmlzaXRvciYgdmlzaXRvciwgSGVhcENlbGwqIGhlYXBDZWxsLCBIZWFwQ2VsbDo6
S2luZCkgewotICAgICAgICAgICAgICAgIFNldFJvb3RNYXJrUmVhc29uU2NvcGUgcm9vdFNjb3Bl
KHZpc2l0b3IsIFNsb3RWaXNpdG9yOjpSb290TWFya1JlYXNvbjo6RE9NR0NPdXRwdXQpOworICAg
ICAgICAgICAgYXV0byBmdW5jID0gW10gKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIEhl
YXBDZWxsKiBoZWFwQ2VsbCwgSGVhcENlbGw6OktpbmQpIHsKKyAgICAgICAgICAgICAgICBTZXRS
b290TWFya1JlYXNvblNjb3BlIHJvb3RTY29wZSh2aXNpdG9yLCBBYnN0cmFjdFNsb3RWaXNpdG9y
OjpSb290TWFya1JlYXNvbjo6RE9NR0NPdXRwdXQpOwogICAgICAgICAgICAgICAgIEpTQ2VsbCog
Y2VsbCA9IHN0YXRpY19jYXN0PEpTQ2VsbCo+KGhlYXBDZWxsKTsKICAgICAgICAgICAgICAgICBj
ZWxsLT5tZXRob2RUYWJsZSh2aXNpdG9yLnZtKCkpLT52aXNpdE91dHB1dENvbnN0cmFpbnRzKGNl
bGwsIHZpc2l0b3IpOwogICAgICAgICAgICAgfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0RPTUdDT3V0cHV0Q29uc3RyYWludC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0RPTUdDT3V0cHV0Q29uc3RyYWludC5oCShyZXZpc2lvbiAyNzIxOTIp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9ET01HQ091dHB1dENvbnN0cmFpbnQuaAko
d29ya2luZyBjb3B5KQpAQCAtNDIsNyArNDIsNyBAQCBwdWJsaWM6CiAgICAgfkRPTUdDT3V0cHV0
Q29uc3RyYWludCgpOwogICAgIAogcHJvdGVjdGVkOgotICAgIHZvaWQgZXhlY3V0ZUltcGwoSlND
OjpTbG90VmlzaXRvciYpIG92ZXJyaWRlOworICAgIHZvaWQgZXhlY3V0ZUltcGwoSlNDOjpBYnN0
cmFjdFNsb3RWaXNpdG9yJikgb3ZlcnJpZGU7CiAKIHByaXZhdGU6CiAgICAgSlNDOjpWTSYgbV92
bTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQWJvcnRDb250cm9sbGVyQ3Vz
dG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Fib3J0
Q29udHJvbGxlckN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjE5MikKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTQWJvcnRDb250cm9sbGVyQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjgsOSArMjgsMTQgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIEpTQWJvcnRD
b250cm9sbGVyOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNp
dG9yKQorLy92b2lkIEpTQWJvcnRDb250cm9sbGVyOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihK
U0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3Zv
aWQgSlNBYm9ydENvbnRyb2xsZXI6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZp
c2l0b3IpCiB7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KCZ3cmFwcGVkKCkuc2lnbmFsKCkp
OwogfQogCit0ZW1wbGF0ZSB2b2lkIEpTQWJvcnRDb250cm9sbGVyOjp2aXNpdEFkZGl0aW9uYWxD
aGlsZHJlbihKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNBYm9y
dENvbnRyb2xsZXI6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImKTsK
KwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNBYm9ydFNpZ25hbEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNBYm9ydFNpZ25hbEN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjE5MikKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQWJvcnRTaWduYWxDdXN0b20uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotYm9v
bCBKU0Fib3J0U2lnbmFsT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFu
ZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgSlNDOjpTbG90VmlzaXRvciYgdmlzaXRv
ciwgY29uc3QgY2hhcioqIHJlYXNvbikKK2Jvb2wgSlNBYm9ydFNpZ25hbE93bmVyOjppc1JlYWNo
YWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9p
ZCosIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNv
bikKIHsKICAgICBhdXRvJiBhYm9ydFNpZ25hbCA9IEpTQzo6anNDYXN0PEpTQWJvcnRTaWduYWwq
PihoYW5kbGUuc2xvdCgpLT5hc0NlbGwoKSktPndyYXBwZWQoKTsKICAgICBpZiAoYWJvcnRTaWdu
YWwuaXNGaXJpbmdFdmVudExpc3RlbmVycygpKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0F0dHJDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTQXR0ckN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjE5MikKKysrIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXR0ckN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMz
LDEwICszMywxNSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgSlNBdHRyOjp2aXNp
dEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy92b2lkIEpT
QXR0cjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikK
K3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTQXR0cjo6dmlzaXRBZGRpdGlvbmFs
Q2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBpZiAoRWxlbWVudCogZWxlbWVudCA9
IHdyYXBwZWQoKS5vd25lckVsZW1lbnQoKSkKICAgICAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290
KHJvb3QoZWxlbWVudCkpOwogfQogCit0ZW1wbGF0ZSB2b2lkIEpTQXR0cjo6dmlzaXRBZGRpdGlv
bmFsQ2hpbGRyZW4oSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpT
QXR0cjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYpOworCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0F1
ZGlvQnVmZmVyQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0F1ZGlvQnVmZmVyQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcyMTkyKQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNBdWRpb0J1ZmZlckN1c3RvbS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTMxLDExICszMSwxNiBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogdXNpbmcgbmFtZXNw
YWNlIEpTQzsKIAotdm9pZCBKU0F1ZGlvQnVmZmVyOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihT
bG90VmlzaXRvciYgdmlzaXRvcikKKy8vdm9pZCBKU0F1ZGlvQnVmZmVyOjp2aXNpdEFkZGl0aW9u
YWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0
b3I+Cit2b2lkIEpTQXVkaW9CdWZmZXI6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3Im
IHZpc2l0b3IpCiB7CiAgICAgd3JhcHBlZCgpLnZpc2l0Q2hhbm5lbFdyYXBwZXJzKHZpc2l0b3Ip
OwogfQogCit0ZW1wbGF0ZSB2b2lkIEpTQXVkaW9CdWZmZXI6OnZpc2l0QWRkaXRpb25hbENoaWxk
cmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNBdWRpb0J1ZmZlcjo6
dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKKwogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQl9BVURJTykKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTQXVkaW9UcmFja0N1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNBdWRpb1RyYWNrQ3VzdG9tLmNwcAkocmV2aXNpb24g
MjcyMTkyKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNBdWRpb1RyYWNrQ3VzdG9t
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsMTEgKzM1LDE2IEBACiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCi12b2lkIEpTQXVkaW9UcmFjazo6dmlzaXRBZGRp
dGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3ZvaWQgSlNBdWRpb1RyYWNr
Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRl
PHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTQXVkaW9UcmFjazo6dmlzaXRBZGRpdGlvbmFsQ2hp
bGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qocm9v
dCgmd3JhcHBlZCgpKSk7CiB9CiAKK3RlbXBsYXRlIHZvaWQgSlNBdWRpb1RyYWNrOjp2aXNpdEFk
ZGl0aW9uYWxDaGlsZHJlbihBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpT
QXVkaW9UcmFjazo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKKwogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTQXVkaW9UcmFja0xpc3RDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXVkaW9UcmFja0xpc3RDdXN0b20uY3BwCShyZXZpc2lvbiAy
NzIxOTIpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0F1ZGlvVHJhY2tMaXN0Q3Vz
dG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsMTEgKzM2LDE2IEBACiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCi12b2lkIEpTQXVkaW9UcmFja0xpc3Q6OnZp
c2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy92b2lkIEpTQXVk
aW9UcmFja0xpc3Q6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9y
KQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNBdWRpb1RyYWNrTGlzdDo6dmlz
aXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB2aXNpdG9yLmFk
ZE9wYXF1ZVJvb3Qocm9vdCh3cmFwcGVkKCkuZWxlbWVudCgpKSk7CiB9CiAKK3RlbXBsYXRlIHZv
aWQgSlNBdWRpb1RyYWNrTGlzdDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oQWJzdHJhY3RTbG90
VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU0F1ZGlvVHJhY2tMaXN0Ojp2aXNpdEFkZGl0aW9u
YWxDaGlsZHJlbihTbG90VmlzaXRvciYpOworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNl
bmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNBdWRpb1dvcmtsZXRQcm9j
ZXNzb3JDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTQXVkaW9Xb3JrbGV0UHJvY2Vzc29yQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcyMTkyKQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNBdWRpb1dvcmtsZXRQcm9jZXNzb3JDdXN0b20u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw5IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCi12b2lkIEpTQXVkaW9Xb3JrbGV0UHJvY2Vzc29yOjp2
aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vdm9pZCBKU0F1
ZGlvV29ya2xldFByb2Nlc3Nvcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3Im
IHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0F1ZGlvV29ya2xl
dFByb2Nlc3Nvcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsK
ICAgICBhdXRvJiBwcm9jZXNzb3IgPSB3cmFwcGVkKCk7CiAgICAgcHJvY2Vzc29yLmpzSW5wdXRz
V3JhcHBlcigpLnZpc2l0KHZpc2l0b3IpOwpAQCAtMzksNiArNDEsOSBAQCB2b2lkIEpTQXVkaW9X
b3JrbGV0UHJvY2Vzc29yOjp2aXNpdEFkZGl0CiAgICAgcHJvY2Vzc29yLmpzUGFyYW1WYWx1ZXNX
cmFwcGVyKCkudmlzaXQodmlzaXRvcik7CiB9CiAKK3RlbXBsYXRlIHZvaWQgSlNBdWRpb1dvcmts
ZXRQcm9jZXNzb3I6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0b3Im
KTsKK3RlbXBsYXRlIHZvaWQgSlNBdWRpb1dvcmtsZXRQcm9jZXNzb3I6OnZpc2l0QWRkaXRpb25h
bENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2Vu
ZGlmIC8vIEVOQUJMRShXRUJfQVVESU8pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0NTU1J1bGVDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTQ1NTUnVsZUN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjE5MikKKysrIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ1NTUnVsZUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTUxLDExICs1MSwxNiBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogdXNpbmcgbmFtZXNwYWNlIEpT
QzsKIAotdm9pZCBKU0NTU1J1bGU6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9y
JiB2aXNpdG9yKQorLy92b2lkIEpTQ1NTUnVsZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xv
dFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0NT
U1J1bGU6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAg
dmlzaXRvci5hZGRPcGFxdWVSb290KHJvb3QoJndyYXBwZWQoKSkpOwogfQogCit0ZW1wbGF0ZSB2
b2lkIEpTQ1NTUnVsZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oQWJzdHJhY3RTbG90VmlzaXRv
ciYpOwordGVtcGxhdGUgdm9pZCBKU0NTU1J1bGU6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNs
b3RWaXNpdG9yJik7CisKIEpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0dsb2JhbE9iamVjdCos
IEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZjxDU1NSdWxlPiYmIHJ1bGUpCiB7
CiAgICAgc3dpdGNoIChydWxlLT50eXBlKCkpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTQ1NTUnVsZUxpc3RDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTQ1NTUnVsZUxpc3RDdXN0b20uY3BwCShyZXZpc2lvbiAyNzIxOTIp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NTU1J1bGVMaXN0Q3VzdG9tLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsNyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogdXNp
bmcgbmFtZXNwYWNlIEpTQzsKIAotYm9vbCBKU0NTU1J1bGVMaXN0T3duZXI6OmlzUmVhY2hhYmxl
RnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwg
U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCitib29sIEpTQ1NTUnVs
ZUxpc3RPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpV
bmtub3duPiBoYW5kbGUsIHZvaWQqLCBBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25z
dCBjaGFyKiogcmVhc29uKQogewogICAgIEpTQ1NTUnVsZUxpc3QqIGpzQ1NTUnVsZUxpc3QgPSBq
c0Nhc3Q8SlNDU1NSdWxlTGlzdCo+KGhhbmRsZS5zbG90KCktPmFzQ2VsbCgpKTsKICAgICBpZiAo
IWpzQ1NTUnVsZUxpc3QtPmhhc0N1c3RvbVByb3BlcnRpZXMoanNDU1NSdWxlTGlzdC0+dm0oKSkp
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NTU1N0eWxlRGVjbGFyYXRpb25D
dXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ1NT
U3R5bGVEZWNsYXJhdGlvbkN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjE5MikKKysrIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ1NTU3R5bGVEZWNsYXJhdGlvbkN1c3RvbS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTUxLDkgKzUxLDE0IEBAIHZvaWQqIHJvb3QoQ1NTU3R5bGVEZWNsYXJhdGlv
biogc3R5bGUpCiAgICAgcmV0dXJuIHN0eWxlOwogfQogCi12b2lkIEpTQ1NTU3R5bGVEZWNsYXJh
dGlvbjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3Zv
aWQgSlNDU1NTdHlsZURlY2xhcmF0aW9uOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90Vmlz
aXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTQ1NTU3R5
bGVEZWNsYXJhdGlvbjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikK
IHsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qocm9vdCgmd3JhcHBlZCgpKSk7CiB9CiAKK3Rl
bXBsYXRlIHZvaWQgSlNDU1NTdHlsZURlY2xhcmF0aW9uOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJl
bihBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTQ1NTU3R5bGVEZWNsYXJh
dGlvbjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKKwogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDYWxsYmFj
a0RhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2Fs
bGJhY2tEYXRhLmNwcAkocmV2aXNpb24gMjcyMTkyKQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNDYWxsYmFja0RhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NSwxMiArOTUsMTYg
QEAgSlNWYWx1ZSBKU0NhbGxiYWNrRGF0YTo6aW52b2tlQ2FsbGJhY2soSgogICAgIHJldHVybiBy
ZXN1bHQ7CiB9CiAKLXZvaWQgSlNDYWxsYmFja0RhdGFXZWFrOjp2aXNpdEpTRnVuY3Rpb24oSlND
OjpTbG90VmlzaXRvciYgdmlzdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQg
SlNDYWxsYmFja0RhdGFXZWFrOjp2aXNpdEpTRnVuY3Rpb24oVmlzaXRvciYgdmlzaXRvcikKIHsK
LSAgICB2aXN0b3IuYXBwZW5kKG1fY2FsbGJhY2spOworICAgIHZpc2l0b3IuYXBwZW5kKG1fY2Fs
bGJhY2spOwogfQogCi1ib29sIEpTQ2FsbGJhY2tEYXRhV2Vhazo6V2Vha093bmVyOjppc1JlYWNo
YWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250
ZXh0LCBTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikKK3RlbXBsYXRl
IHZvaWQgSlNDYWxsYmFja0RhdGFXZWFrOjp2aXNpdEpTRnVuY3Rpb24oSlNDOjpBYnN0cmFjdFNs
b3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTQ2FsbGJhY2tEYXRhV2Vhazo6dmlzaXRKU0Z1
bmN0aW9uKEpTQzo6U2xvdFZpc2l0b3ImKTsKKworYm9vbCBKU0NhbGxiYWNrRGF0YVdlYWs6Oldl
YWtPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtu
b3duPiwgdm9pZCogY29udGV4dCwgQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3Qg
Y2hhcioqIHJlYXNvbikKIHsKICAgICBpZiAoVU5MSUtFTFkocmVhc29uKSkKICAgICAgICAgKnJl
YXNvbiA9ICJDb250ZXh0IGlzIG9wYXF1ZSByb290IjsgLy8gRklYTUU6IHdoYXQgaXMgdGhlIGNv
bnRleHQuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NhbGxiYWNrRGF0YS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2FsbGJhY2tEYXRh
LmgJKHJldmlzaW9uIDI3MjE5MikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2Fs
bGJhY2tEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTExMywxMSArMTEzLDEyIEBAIHB1YmxpYzoK
ICAgICAgICAgcmV0dXJuIEpTQ2FsbGJhY2tEYXRhOjppbnZva2VDYWxsYmFjaygqZ2xvYmFsT2Jq
ZWN0LCBjYWxsYmFjaygpLCB0aGlzVmFsdWUsIGFyZ3MsIGNhbGxiYWNrVHlwZSwgZnVuY3Rpb25O
YW1lLCByZXR1cm5lZEV4Y2VwdGlvbik7CiAgICAgfQogCi0gICAgdm9pZCB2aXNpdEpTRnVuY3Rp
b24oSlNDOjpTbG90VmlzaXRvciYpOworLy8gICAgdm9pZCB2aXNpdEpTRnVuY3Rpb24oSlNDOjpT
bG90VmlzaXRvciYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgdmlzaXRK
U0Z1bmN0aW9uKFZpc2l0b3ImKTsKIAogcHJpdmF0ZToKICAgICBjbGFzcyBXZWFrT3duZXIgOiBw
dWJsaWMgSlNDOjpXZWFrSGFuZGxlT3duZXIgewotICAgICAgICBib29sIGlzUmVhY2hhYmxlRnJv
bU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIEpT
Qzo6U2xvdFZpc2l0b3ImLCBjb25zdCBjaGFyKiopIG92ZXJyaWRlOworICAgICAgICBib29sIGlz
UmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQq
IGNvbnRleHQsIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYsIGNvbnN0IGNoYXIqKikgb3ZlcnJp
ZGU7CiAgICAgfTsKICAgICBXZWFrT3duZXIgbV93ZWFrT3duZXI7CiAgICAgSlNDOjpXZWFrPEpT
Qzo6SlNPYmplY3Q+IG1fY2FsbGJhY2s7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRDdXN0b20u
Y3BwCShyZXZpc2lvbiAyNzIxOTIpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Nh
bnZhc1JlbmRlcmluZ0NvbnRleHQyREN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0LDcg
KzI0LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1ib29sIEpTQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDJET3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpT
Qzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvciwgY29u
c3QgY2hhcioqIHJlYXNvbikKK2Jvb2wgSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRPd25lcjo6
aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5k
bGUsIHZvaWQqLCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIq
KiByZWFzb24pCiB7CiAgICAgaWYgKFVOTElLRUxZKHJlYXNvbikpCiAgICAgICAgICpyZWFzb24g
PSAiQ2FudmFzIGlzIG9wYXF1ZSByb290IjsKQEAgLTM0LDkgKzM0LDE0IEBAIGJvb2wgSlNDYW52
YXNSZW5kZXJpbmdDb250ZXh0MkRPd25lcjo6aXMKICAgICByZXR1cm4gdmlzaXRvci5jb250YWlu
c09wYXF1ZVJvb3Qocm9vdCk7CiB9CiAKLXZvaWQgSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6
OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3Zv
aWQgSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpT
Qzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9p
ZCBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlz
aXRvciYgdmlzaXRvcikKIHsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qocm9vdCh3cmFwcGVk
KCkuY2FudmFzKCkpKTsKIH0KIAordGVtcGxhdGUgdm9pZCBKU0NhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyRDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJik7
Cit0ZW1wbGF0ZSB2b2lkIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjp2aXNpdEFkZGl0aW9u
YWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJik7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9tRXZlbnRDdXN0b20uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9tRXZlbnRD
dXN0b20uY3BwCShyZXZpc2lvbiAyNzIxOTIpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0N1c3RvbUV2ZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIsMTAgKzQyLDE1
IEBAIEpTQzo6SlNWYWx1ZSBKU0N1c3RvbUV2ZW50OjpkZXRhaWwoSlNDOjoKICAgICB9KTsKIH0K
IAotdm9pZCBKU0N1c3RvbUV2ZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RW
aXNpdG9yJiB2aXNpdG9yKQorLy92b2lkIEpTQ3VzdG9tRXZlbnQ6OnZpc2l0QWRkaXRpb25hbENo
aWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNp
dG9yPgordm9pZCBKU0N1c3RvbUV2ZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9y
JiB2aXNpdG9yKQogewogICAgIHdyYXBwZWQoKS5kZXRhaWwoKS52aXNpdCh2aXNpdG9yKTsKICAg
ICB3cmFwcGVkKCkuY2FjaGVkRGV0YWlsKCkudmlzaXQodmlzaXRvcik7CiB9CiAKK3RlbXBsYXRl
IHZvaWQgSlNDdXN0b21FdmVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpBYnN0cmFj
dFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTQ3VzdG9tRXZlbnQ6OnZpc2l0QWRkaXRp
b25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImKTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CdWlsdGluQ29uc3RydWN0
b3JCYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RP
TUJ1aWx0aW5Db25zdHJ1Y3RvckJhc2UuY3BwCShyZXZpc2lvbiAyNzIxOTIpCisrKyBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJ1aWx0aW5Db25zdHJ1Y3RvckJhc2UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00NSw3ICs0NSw4IEBAIHZvaWQgSlNET01CdWlsdGluQ29uc3RydWN0b3JC
YXNlOjpjYWxsRnUKICAgICBKU0M6OmNhbGwoJmxleGljYWxHbG9iYWxPYmplY3QsICZmdW5jdGlv
biwgY2FsbERhdGEsICZ0aGlzT2JqZWN0LCBhcmd1bWVudHMpOwogfQogCi12b2lkIEpTRE9NQnVp
bHRpbkNvbnN0cnVjdG9yQmFzZTo6dmlzaXRDaGlsZHJlbihKU0M6OkpTQ2VsbCogY2VsbCwgSlND
OjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lk
IEpTRE9NQnVpbHRpbkNvbnN0cnVjdG9yQmFzZTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDOjpKU0Nl
bGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpz
Q2FzdDxKU0RPTUJ1aWx0aW5Db25zdHJ1Y3RvckJhc2UqPihjZWxsKTsKICAgICBBU1NFUlRfR0Nf
T0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC01Myw2ICs1NCw4IEBAIHZv
aWQgSlNET01CdWlsdGluQ29uc3RydWN0b3JCYXNlOjp2aXNpdEMKICAgICB2aXNpdG9yLmFwcGVu
ZCh0aGlzT2JqZWN0LT5tX2luaXRpYWxpemVGdW5jdGlvbik7CiB9CiAKK0RFRklORV9WSVNJVF9D
SElMRFJFTihKU0RPTUJ1aWx0aW5Db25zdHJ1Y3RvckJhc2UpOworCiBKU0M6Oklzb1N1YnNwYWNl
KiBKU0RPTUJ1aWx0aW5Db25zdHJ1Y3RvckJhc2U6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2
bSkKIHsKICAgICByZXR1cm4gJnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50
RGF0YSktPmRvbUJ1aWx0aW5Db25zdHJ1Y3RvclNwYWNlKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0RPTUJ1aWx0aW5Db25zdHJ1Y3RvckJhc2UuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJ1aWx0aW5Db25zdHJ1Y3RvckJhc2Uu
aAkocmV2aXNpb24gMjcyMTkyKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01C
dWlsdGluQ29uc3RydWN0b3JCYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDcgKzQyLDcgQEAg
cHJvdGVjdGVkOgogICAgIHsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVu
KEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJ
TERSRU47CiAKICAgICBKU0M6OkpTRnVuY3Rpb24qIGluaXRpYWxpemVGdW5jdGlvbigpOwogICAg
IHZvaWQgc2V0SW5pdGlhbGl6ZUZ1bmN0aW9uKEpTQzo6Vk0mLCBKU0M6OkpTRnVuY3Rpb24mKTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVj
dC5jcHAJKHJldmlzaW9uIDI3MjE5MikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
RE9NR2xvYmFsT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjM4LDcgKzIzOCw4IEBAIFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqIEpTRE9NR2xvYmFsT2JqZWMKICAgICByZXR1cm4gbnVsbHB0
cjsKIH0KIAotdm9pZCBKU0RPTUdsb2JhbE9iamVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNl
bGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3Zv
aWQgSlNET01HbG9iYWxPYmplY3Q6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlz
aXRvciYgdmlzaXRvcikKIHsKICAgICBKU0RPTUdsb2JhbE9iamVjdCogdGhpc09iamVjdCA9IGpz
Q2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5I
RVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTI2MCw2ICsyNjEsOCBAQCB2b2lkIEpTRE9N
R2xvYmFsT2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTCiAgICAgdGhpc09iamVjdC0+bV9idWlsdGlu
SW50ZXJuYWxGdW5jdGlvbnMudmlzaXQodmlzaXRvcik7CiB9CiAKK0RFRklORV9WSVNJVF9DSElM
RFJFTihKU0RPTUdsb2JhbE9iamVjdCk7CisKIHZvaWQgSlNET01HbG9iYWxPYmplY3Q6OnByb21p
c2VSZWplY3Rpb25UcmFja2VyKEpTR2xvYmFsT2JqZWN0KiBqc0dsb2JhbE9iamVjdCwgSlNQcm9t
aXNlKiBwcm9taXNlLCBKU1Byb21pc2VSZWplY3Rpb25PcGVyYXRpb24gb3BlcmF0aW9uKQogewog
ICAgIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3dlYmFwcGFwaXMu
aHRtbCN0aGUtaG9zdHByb21pc2VyZWplY3Rpb250cmFja2VyLWltcGxlbWVudGF0aW9uCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0LmgJKHJl
dmlzaW9uIDI3MjE5MikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFs
T2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTY5LDcgKzY5LDcgQEAgcHVibGljOgogICAgIC8v
IE1ha2UgYmluZGluZyBjb2RlIGdlbmVyYXRpb24gZWFzaWVyLgogICAgIEpTRE9NR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QoKSB7IHJldHVybiB0aGlzOyB9CiAKLSAgICBzdGF0aWMgdm9pZCB2
aXNpdENoaWxkcmVuKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpOworICAgIERFQ0xB
UkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBET01XcmFwcGVyV29ybGQmIHdvcmxkKCkgeyByZXR1
cm4gbV93b3JsZC5nZXQoKTsgfQogICAgIGJvb2wgd29ybGRJc05vcm1hbCgpIGNvbnN0IHsgcmV0
dXJuIG1fd29ybGRJc05vcm1hbDsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNET01HdWFyZGVkT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNET01HdWFyZGVkT2JqZWN0LmgJKHJldmlzaW9uIDI3MjE5MikKKysrIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR3VhcmRlZE9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBA
IC00MCw3ICs0MCw4IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaXNTdXNwZW5kZWQoKSBjb25zdCB7
IHJldHVybiAhbV9ndWFyZGVkIHx8ICFjYW5JbnZva2VDYWxsYmFjaygpOyB9IC8vIFRoZSB3cmFw
cGVyIHdvcmxkIGhhcyBnb25lIGF3YXkgb3IgYWN0aXZlIERPTSBvYmplY3RzIGhhdmUgYmVlbiBz
dXNwZW5kZWQuCiAKLSAgICB2b2lkIHZpc2l0QWdncmVnYXRlKEpTQzo6U2xvdFZpc2l0b3ImIHZp
c2l0b3IpIHsgdmlzaXRvci5hcHBlbmQobV9ndWFyZGVkKTsgfQorICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFZpc2l0b3I+CisgICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShWaXNpdG9yJiB2aXNpdG9yKSB7
IHZpc2l0b3IuYXBwZW5kKG1fZ3VhcmRlZCk7IH0KIAogICAgIEpTQzo6SlNWYWx1ZSBndWFyZGVk
T2JqZWN0KCkgY29uc3QgeyByZXR1cm4gbV9ndWFyZGVkLmdldCgpOyB9CiAgICAgSlNET01HbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fZ2xvYmFsT2JqZWN0Lmdl
dCgpOyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVF1YWRDdXN0b20u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NUXVhZEN1
c3RvbS5jcHAJKHJldmlzaW9uIDI3MjE5MikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTRE9NUXVhZEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDcgKzMzLDkgQEAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKLXZvaWQgSlNET01RdWFk
Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vdm9pZCBK
U0RPTVF1YWQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQor
dGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNET01RdWFkOjp2aXNpdEFkZGl0aW9u
YWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9v
dChjb25zdF9jYXN0PERPTVBvaW50Kj4oJndyYXBwZWQoKS5wMSgpKSk7CiAgICAgdmlzaXRvci5h
ZGRPcGFxdWVSb290KGNvbnN0X2Nhc3Q8RE9NUG9pbnQqPigmd3JhcHBlZCgpLnAyKCkpKTsKQEAg
LTQxLDQgKzQzLDcgQEAgdm9pZCBKU0RPTVF1YWQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKAog
ICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChjb25zdF9jYXN0PERPTVBvaW50Kj4oJndyYXBwZWQo
KS5wNCgpKSk7CiB9CiAKLX0KK3RlbXBsYXRlIHZvaWQgSlNET01RdWFkOjp2aXNpdEFkZGl0aW9u
YWxDaGlsZHJlbihBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTRE9NUXVh
ZDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dD
dXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9N
V2luZG93Q3VzdG9tLmNwcAkocmV2aXNpb24gMjcyMTkyKQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNET01XaW5kb3dDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTYsNyAr
MTE2LDkgQEAgSlNDX0RFRklORV9DVVNUT01fR0VUVEVSKGpzRE9NV2luZG93SW5zdAogICAgIHJl
dHVybiBub25DYWNoaW5nU3RhdGljRnVuY3Rpb25HZXR0ZXJJbXBsPGpzRE9NV2luZG93SW5zdGFu
Y2VGdW5jdGlvbl9wb3N0TWVzc2FnZSwgMj4oZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUpOwog
fQogCi12b2lkIEpTRE9NV2luZG93Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRv
ciYgdmlzaXRvcikKKy8vdm9pZCBKU0RPTVdpbmRvdzo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4o
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBK
U0RPTVdpbmRvdzo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsK
ICAgICBpZiAoRnJhbWUqIGZyYW1lID0gd3JhcHBlZCgpLmZyYW1lKCkpCiAgICAgICAgIHZpc2l0
b3IuYWRkT3BhcXVlUm9vdChmcmFtZSk7CkBAIC0xMjksNiArMTMxLDkgQEAgdm9pZCBKU0RPTVdp
bmRvdzo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZQogICAgIHdyYXBwZWQoKS52aXNpdEpTRXZlbnRM
aXN0ZW5lcnModmlzaXRvcik7CiB9CiAKK3RlbXBsYXRlIHZvaWQgSlNET01XaW5kb3c6OnZpc2l0
QWRkaXRpb25hbENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQg
SlNET01XaW5kb3c6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CisKICNp
ZiBFTkFCTEUoVVNFUl9NRVNTQUdFX0hBTkRMRVJTKQogSlNDX0RFRklORV9DVVNUT01fR0VUVEVS
KGpzRE9NV2luZG93X3dlYmtpdCwgKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0
LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkpCiB7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RlcHJlY2F0ZWRDU1NPTVZhbHVlQ3VzdG9tLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RlcHJlY2F0ZWRDU1NP
TVZhbHVlQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcyMTkyKQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNEZXByZWNhdGVkQ1NTT01WYWx1ZUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM1LDcgKzM1LDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBK
U0M7CiAKLWJvb2wgSlNEZXByZWNhdGVkQ1NTT01WYWx1ZU93bmVyOjppc1JlYWNoYWJsZUZyb21P
cGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIFNsb3RW
aXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQorYm9vbCBKU0RlcHJlY2F0ZWRD
U1NPTVZhbHVlT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpT
Qzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvciwg
Y29uc3QgY2hhcioqIHJlYXNvbikKIHsKICAgICBKU0RlcHJlY2F0ZWRDU1NPTVZhbHVlKiBqc0NT
U1ZhbHVlID0ganNDYXN0PEpTRGVwcmVjYXRlZENTU09NVmFsdWUqPihoYW5kbGUuc2xvdCgpLT5h
c0NlbGwoKSk7CiAgICAgaWYgKCFqc0NTU1ZhbHVlLT5oYXNDdXN0b21Qcm9wZXJ0aWVzKGpzQ1NT
VmFsdWUtPnZtKCkpKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNEb2N1bWVu
dEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNE
b2N1bWVudEN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjE5MikKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTRG9jdW1lbnRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MSwxMSAr
OTEsMTYgQEAgSlNWYWx1ZSB0b0pTKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYgogICAgIHJl
dHVybiB0b0pTTmV3bHlDcmVhdGVkKGxleGljYWxHbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdCwg
UmVmPERvY3VtZW50Pihkb2N1bWVudCkpOwogfQogCi12b2lkIEpTRG9jdW1lbnQ6OnZpc2l0QWRk
aXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy92b2lkIEpTRG9jdW1lbnQ6
OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8
dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNEb2N1bWVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRy
ZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qoc3RhdGlj
X2Nhc3Q8U2NyaXB0RXhlY3V0aW9uQ29udGV4dCo+KCZ3cmFwcGVkKCkpKTsKIH0KIAordGVtcGxh
dGUgdm9pZCBKU0RvY3VtZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihBYnN0cmFjdFNsb3RW
aXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTRG9jdW1lbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxk
cmVuKFNsb3RWaXNpdG9yJik7CisKIHZvaWQgSlNEb2N1bWVudDo6YW5hbHl6ZUhlYXAoSlNDZWxs
KiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQogewogICAgIEJhc2U6OmFuYWx5emVIZWFw
KGNlbGwsIGFuYWx5emVyKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXJy
b3JFdmVudEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNFcnJvckV2ZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gMjcyMTkyKQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNFcnJvckV2ZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjgsOSArMjgsMTQgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIEpTRXJyb3JF
dmVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikK
Ky8vdm9pZCBKU0Vycm9yRXZlbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZp
c2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0Vycm9y
RXZlbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAg
d3JhcHBlZCgpLm9yaWdpbmFsRXJyb3IoKS52aXNpdCh2aXNpdG9yKTsKIH0KIAordGVtcGxhdGUg
dm9pZCBKU0Vycm9yRXZlbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6QWJzdHJhY3RT
bG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU0Vycm9yRXZlbnQ6OnZpc2l0QWRkaXRpb25h
bENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImKTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudExpc3RlbmVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50TGlzdGVuZXIuY3Bw
CShyZXZpc2lvbiAyNzIxOTIpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50
TGlzdGVuZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03OCw3ICs3OCw4IEBAIEpTT2JqZWN0KiBK
U0V2ZW50TGlzdGVuZXI6OmluaXRpYWxpemVKU0YKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAot
dm9pZCBKU0V2ZW50TGlzdGVuZXI6OnZpc2l0SlNGdW5jdGlvbihTbG90VmlzaXRvciYgdmlzaXRv
cikKKy8vdm9pZCBKU0V2ZW50TGlzdGVuZXI6OnZpc2l0SlNGdW5jdGlvbihTbG90VmlzaXRvciYg
dmlzaXRvcikKK3ZvaWQgSlNFdmVudExpc3RlbmVyOjp2aXNpdEpTRnVuY3Rpb24oQWJzdHJhY3RT
bG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICAvLyBJZiBtX3dyYXBwZXIgaXMgbnVsbCwgd2Ug
YXJlIG5vdCBrZWVwaW5nIG1fanNGdW5jdGlvbiBhbGl2ZS4KICAgICBpZiAoIW1fd3JhcHBlcikK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRMaXN0ZW5lci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRMaXN0ZW5lci5oCShy
ZXZpc2lvbiAyNzIxOTIpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50TGlz
dGVuZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNjIsNyArNjIsOCBAQCBwdWJsaWM6CiAKIHByaXZh
dGU6CiAgICAgdmlydHVhbCBKU0M6OkpTT2JqZWN0KiBpbml0aWFsaXplSlNGdW5jdGlvbihTY3Jp
cHRFeGVjdXRpb25Db250ZXh0JikgY29uc3Q7Ci0gICAgdm9pZCB2aXNpdEpTRnVuY3Rpb24oSlND
OjpTbG90VmlzaXRvciYpIGZpbmFsOworLy8gICAgdm9pZCB2aXNpdEpTRnVuY3Rpb24oSlNDOjpT
bG90VmlzaXRvciYpIGZpbmFsOworICAgIHZvaWQgdmlzaXRKU0Z1bmN0aW9uKEpTQzo6QWJzdHJh
Y3RTbG90VmlzaXRvciYpIGZpbmFsOwogCiBwcm90ZWN0ZWQ6CiAgICAgSlNFdmVudExpc3RlbmVy
KEpTQzo6SlNPYmplY3QqIGZ1bmN0aW9uLCBKU0M6OkpTT2JqZWN0KiB3cmFwcGVyLCBib29sIGlz
QXR0cmlidXRlLCBET01XcmFwcGVyV29ybGQmKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTRXZlbnRUYXJnZXRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRUYXJnZXRDdXN0b20uY3BwCShyZXZpc2lvbiAyNzIxOTIp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50VGFyZ2V0Q3VzdG9tLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNzIsOSArNzIsMTQgQEAgc3RkOjp1bmlxdWVfcHRyPEpTRXZlbnRU
YXJnZXRXcmFwcGVyPiBqcwogICAgIHJldHVybiBudWxscHRyOwogfQogCi12b2lkIEpTRXZlbnRU
YXJnZXQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy92
b2lkIEpTRXZlbnRUYXJnZXQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNFdmVudFRhcmdldDo6
dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB3cmFwcGVk
KCkudmlzaXRKU0V2ZW50TGlzdGVuZXJzKHZpc2l0b3IpOwogfQogCit0ZW1wbGF0ZSB2b2lkIEpT
RXZlbnRUYXJnZXQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0b3Im
KTsKK3RlbXBsYXRlIHZvaWQgSlNFdmVudFRhcmdldDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4o
U2xvdFZpc2l0b3ImKTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNGZXRjaEV2ZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0ZldGNoRXZlbnRDdXN0b20uY3BwCShyZXZpc2lv
biAyNzIxOTIpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0ZldGNoRXZlbnRDdXN0
b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCwxMSArMzAsMTYgQEAKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi12b2lkIEpTRmV0Y2hFdmVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlND
OjpTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vdm9pZCBKU0ZldGNoRXZlbnQ6OnZpc2l0QWRkaXRp
b25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBWaXNpdG9yPgordm9pZCBKU0ZldGNoRXZlbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZp
c2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KCZ3cmFwcGVkKCku
cmVxdWVzdCgpKTsKIH0KIAotfQordGVtcGxhdGUgdm9pZCBKU0ZldGNoRXZlbnQ6OnZpc2l0QWRk
aXRpb25hbENoaWxkcmVuKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9p
ZCBKU0ZldGNoRXZlbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3Im
KTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTSFRNTENhbnZhc0VsZW1lbnRDdXN0b20uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTENhbnZhc0VsZW1lbnRDdXN0b20u
Y3BwCShyZXZpc2lvbiAyNzIxOTIpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hU
TUxDYW52YXNFbGVtZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsOSArMzEsMTQg
QEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIEpTSFRNTENhbnZhc0VsZW1lbnQ6OnZp
c2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3ZvaWQg
SlNIVE1MQ2FudmFzRWxlbWVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90Vmlz
aXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTSFRNTENh
bnZhc0VsZW1lbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7
CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHN0YXRpY19jYXN0PENhbnZhc0Jhc2UqPigmd3Jh
cHBlZCgpKSk7CiB9CiAKK3RlbXBsYXRlIHZvaWQgSlNIVE1MQ2FudmFzRWxlbWVudDo6dmlzaXRB
ZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2
b2lkIEpTSFRNTENhbnZhc0VsZW1lbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xv
dFZpc2l0b3ImKTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNIVE1MVGVtcGxhdGVFbGVtZW50Q3VzdG9tLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxUZW1wbGF0ZUVsZW1lbnRDdXN0
b20uY3BwCShyZXZpc2lvbiAyNzIxOTIpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0hUTUxUZW1wbGF0ZUVsZW1lbnRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNywxMCAr
MzcsMTUgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKLXZv
aWQgSlNIVE1MVGVtcGxhdGVFbGVtZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNs
b3RWaXNpdG9yJiB2aXNpdG9yKQorLy92b2lkIEpTSFRNTFRlbXBsYXRlRWxlbWVudDo6dmlzaXRB
ZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5
cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTSFRNTFRlbXBsYXRlRWxlbWVudDo6dmlzaXRBZGRpdGlv
bmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBpZiAoYXV0byogY29udGVudCA9
IHdyYXBwZWQoKS5jb250ZW50SWZBdmFpbGFibGUoKSkKICAgICAgICAgdmlzaXRvci5hZGRPcGFx
dWVSb290KHJvb3QoY29udGVudCkpOwogfQogCit0ZW1wbGF0ZSB2b2lkIEpTSFRNTFRlbXBsYXRl
RWxlbWVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9y
Jik7Cit0ZW1wbGF0ZSB2b2lkIEpTSFRNTFRlbXBsYXRlRWxlbWVudDo6dmlzaXRBZGRpdGlvbmFs
Q2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYpOworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hpc3RvcnlDdXN0b20uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSGlzdG9yeUN1c3RvbS5jcHAJ
KHJldmlzaW9uIDI3MjE5MikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSGlzdG9y
eUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDkgKzQ0LDE0IEBAIEpTVmFsdWUgSlNI
aXN0b3J5OjpzdGF0ZShKU0dsb2JhbE9iamVjdCYKICAgICB9KTsKIH0KIAotdm9pZCBKU0hpc3Rv
cnk6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy92b2lk
IEpTSGlzdG9yeTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3Ip
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0hpc3Rvcnk6OnZpc2l0QWRkaXRp
b25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgd3JhcHBlZCgpLmNhY2hlZFN0
YXRlRm9yR0MoKS52aXNpdCh2aXNpdG9yKTsKIH0KIAordGVtcGxhdGUgdm9pZCBKU0hpc3Rvcnk6
OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRl
IHZvaWQgSlNIaXN0b3J5Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYpOwor
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0lEQkN1cnNvckN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNJREJDdXJzb3JDdXN0b20uY3BwCShyZXZpc2lvbiAyNzIxOTIpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQkN1cnNvckN1c3RvbS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTUwLDcgKzUwLDkgQEAgSlNDOjpKU1ZhbHVlIEpTSURCQ3Vyc29yOjpwcmltYXJ5S2V5
KEpTQwogICAgIH0pOwogfQogCi12b2lkIEpTSURCQ3Vyc29yOjp2aXNpdEFkZGl0aW9uYWxDaGls
ZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vdm9pZCBKU0lEQkN1cnNvcjo6dmlzaXRBZGRp
dGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPgordm9pZCBKU0lEQkN1cnNvcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRv
ciYgdmlzaXRvcikKIHsKICAgICBhdXRvJiBjdXJzb3IgPSB3cmFwcGVkKCk7CiAgICAgaWYgKGF1
dG8qIHJlcXVlc3QgPSBjdXJzb3IucmVxdWVzdCgpKQpAQCAtNTksNiArNjEsOSBAQCB2b2lkIEpT
SURCQ3Vyc29yOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlCiAgICAgY3Vyc29yLnByaW1hcnlLZXlX
cmFwcGVyKCkudmlzaXQodmlzaXRvcik7CiB9CiAKK3RlbXBsYXRlIHZvaWQgSlNJREJDdXJzb3I6
OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRl
IHZvaWQgSlNJREJDdXJzb3I6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJik7
CisKIEpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNET01H
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmPElEQkN1cnNvcj4mJiBjdXJzb3IpCiB7CiAg
ICAgaWYgKGlzPElEQkN1cnNvcldpdGhWYWx1ZT4oY3Vyc29yKSkKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTSURCQ3Vyc29yV2l0aFZhbHVlQ3VzdG9tLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQkN1cnNvcldpdGhWYWx1ZUN1c3Rv
bS5jcHAJKHJldmlzaW9uIDI3MjE5MikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
SURCQ3Vyc29yV2l0aFZhbHVlQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMsMTIgKzQz
LDE3IEBAIEpTQzo6SlNWYWx1ZSBKU0lEQkN1cnNvcldpdGhWYWx1ZTo6dmFsdWUKICAgICB9KTsK
IH0KIAotdm9pZCBKU0lEQkN1cnNvcldpdGhWYWx1ZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4o
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3ZvaWQgSlNJREJDdXJzb3JXaXRoVmFsdWU6OnZpc2l0
QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5h
bWUgVmlzaXRvcj4KK3ZvaWQgSlNJREJDdXJzb3JXaXRoVmFsdWU6OnZpc2l0QWRkaXRpb25hbENo
aWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNJREJDdXJzb3I6OnZpc2l0QWRkaXRp
b25hbENoaWxkcmVuKHZpc2l0b3IpOwogICAgIHdyYXBwZWQoKS52YWx1ZVdyYXBwZXIoKS52aXNp
dCh2aXNpdG9yKTsKIH0KIAordGVtcGxhdGUgdm9pZCBKU0lEQkN1cnNvcldpdGhWYWx1ZTo6dmlz
aXRBZGRpdGlvbmFsQ2hpbGRyZW4oQWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9p
ZCBKU0lEQkN1cnNvcldpdGhWYWx1ZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0
b3ImKTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKElOREVY
RURfREFUQUJBU0UpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQkluZGV4
Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lE
QkluZGV4Q3VzdG9tLmNwcAkocmV2aXNpb24gMjcyMTkyKQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNJREJJbmRleEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDExICsz
NCwxNiBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAotdm9p
ZCBKU0lEQkluZGV4Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRv
cikKKy8vdm9pZCBKU0lEQkluZGV4Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRv
ciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTSURCSW5kZXg6
OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgdmlzaXRv
ci5hZGRPcGFxdWVSb290KHN0YXRpY19jYXN0PElEQkluZGV4Jj4od3JhcHBlZCgpKS5vYmplY3RT
dG9yZUFzT3BhcXVlUm9vdCgpKTsKIH0KIAordGVtcGxhdGUgdm9pZCBKU0lEQkluZGV4Ojp2aXNp
dEFkZGl0aW9uYWxDaGlsZHJlbihBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lk
IEpTSURCSW5kZXg6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CisKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNF
KQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJPYmplY3RTdG9yZUN1c3Rv
bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJPYmpl
Y3RTdG9yZUN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjE5MikKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTSURCT2JqZWN0U3RvcmVDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
NiwxMSArMzYsMTYgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBKU0M7
CiAKLXZvaWQgSlNJREJPYmplY3RTdG9yZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZp
c2l0b3ImIHZpc2l0b3IpCisvL3ZvaWQgSlNJREJPYmplY3RTdG9yZTo6dmlzaXRBZGRpdGlvbmFs
Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
Pgordm9pZCBKU0lEQk9iamVjdFN0b3JlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9y
JiB2aXNpdG9yKQogewogICAgIHN0YXRpY19jYXN0PElEQk9iamVjdFN0b3JlJj4od3JhcHBlZCgp
KS52aXNpdFJlZmVyZW5jZWRJbmRleGVzKHZpc2l0b3IpOwogfQogCi19Cit0ZW1wbGF0ZSB2b2lk
IEpTSURCT2JqZWN0U3RvcmU6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEFic3RyYWN0U2xvdFZp
c2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNJREJPYmplY3RTdG9yZTo6dmlzaXRBZGRpdGlvbmFs
Q2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5k
aWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCUmVxdWVzdEN1c3RvbS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJSZXF1ZXN0
Q3VzdG9tLmNwcAkocmV2aXNpb24gMjcyMTkyKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNJREJSZXF1ZXN0Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODksMTIgKzg5LDE4
IEBAIEpTQzo6SlNWYWx1ZSBKU0lEQlJlcXVlc3Q6OnJlc3VsdChKU0M6OkoKICAgICB9KTsKIH0K
IAotdm9pZCBKU0lEQlJlcXVlc3Q6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9y
JiB2aXNpdG9yKQorLy92b2lkIEpTSURCUmVxdWVzdDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4o
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBK
U0lEQlJlcXVlc3Q6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7
CiAgICAgYXV0byYgcmVxdWVzdCA9IHdyYXBwZWQoKTsKICAgICByZXF1ZXN0LnJlc3VsdFdyYXBw
ZXIoKS52aXNpdCh2aXNpdG9yKTsKICAgICByZXF1ZXN0LmN1cnNvcldyYXBwZXIoKS52aXNpdCh2
aXNpdG9yKTsKIH0KIAotfQordGVtcGxhdGUgdm9pZCBKU0lEQlJlcXVlc3Q6OnZpc2l0QWRkaXRp
b25hbENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNJREJS
ZXF1ZXN0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYpOworCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKICNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCVHJhbnNhY3Rpb25DdXN0b20uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCVHJhbnNhY3Rp
b25DdXN0b20uY3BwCShyZXZpc2lvbiAyNzIxOTIpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0lEQlRyYW5zYWN0aW9uQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsMTEg
KzM0LDE2IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCi12
b2lkIEpTSURCVHJhbnNhY3Rpb246OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9y
JiB2aXNpdG9yKQorLy92b2lkIEpTSURCVHJhbnNhY3Rpb246OnZpc2l0QWRkaXRpb25hbENoaWxk
cmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3Zv
aWQgSlNJREJUcmFuc2FjdGlvbjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlz
aXRvcikKIHsKICAgICBzdGF0aWNfY2FzdDxJREJUcmFuc2FjdGlvbiY+KHdyYXBwZWQoKSkudmlz
aXRSZWZlcmVuY2VkT2JqZWN0U3RvcmVzKHZpc2l0b3IpOwogfQogCi19Cit0ZW1wbGF0ZSB2b2lk
IEpTSURCVHJhbnNhY3Rpb246OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEFic3RyYWN0U2xvdFZp
c2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNJREJUcmFuc2FjdGlvbjo6dmlzaXRBZGRpdGlvbmFs
Q2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5k
aWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW50ZXJzZWN0aW9uT2JzZXJ2
ZXJDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
SW50ZXJzZWN0aW9uT2JzZXJ2ZXJDdXN0b20uY3BwCShyZXZpc2lvbiAyNzIxOTIpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0ludGVyc2VjdGlvbk9ic2VydmVyQ3VzdG9tLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzAsMTAgKzMwLDE1IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAotdm9pZCBKU0ludGVyc2VjdGlvbk9ic2VydmVyOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihK
U0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy92b2lkIEpTSW50ZXJzZWN0aW9uT2JzZXJ2ZXI6
OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1w
bGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0ludGVyc2VjdGlvbk9ic2VydmVyOjp2aXNp
dEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGlmIChhdXRvKiBj
YWxsYmFjayA9IHdyYXBwZWQoKS5jYWxsYmFja0NvbmN1cnJlbnRseSgpKQogICAgICAgICBjYWxs
YmFjay0+dmlzaXRKU0Z1bmN0aW9uKHZpc2l0b3IpOwogfQogCi19Cit0ZW1wbGF0ZSB2b2lkIEpT
SW50ZXJzZWN0aW9uT2JzZXJ2ZXI6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6QWJzdHJh
Y3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU0ludGVyc2VjdGlvbk9ic2VydmVyOjp2
aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJik7CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW50ZXJzZWN0
aW9uT2JzZXJ2ZXJFbnRyeUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNJbnRlcnNlY3Rpb25PYnNlcnZlckVudHJ5Q3VzdG9tLmNwcAkocmV2aXNp
b24gMjcyMTkyKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJbnRlcnNlY3Rpb25P
YnNlcnZlckVudHJ5Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAsOSBAQAog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgSlNJbnRlcnNlY3Rpb25PYnNlcnZlckVudHJ5
Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy92
b2lkIEpTSW50ZXJzZWN0aW9uT2JzZXJ2ZXJFbnRyeTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4o
SlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2
b2lkIEpTSW50ZXJzZWN0aW9uT2JzZXJ2ZXJFbnRyeTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4o
VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qocm9vdCh3cmFw
cGVkKCkudGFyZ2V0KCkpKTsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qod3JhcHBlZCgpLmJv
dW5kaW5nQ2xpZW50UmVjdCgpKTsKQEAgLTM4LDQgKzQwLDcgQEAgdm9pZCBKU0ludGVyc2VjdGlv
bk9ic2VydmVyRW50cnk6OnZpc2l0QQogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdCh3cmFwcGVk
KCkucm9vdEJvdW5kcygpKTsKIH0KIAotfQordGVtcGxhdGUgdm9pZCBKU0ludGVyc2VjdGlvbk9i
c2VydmVyRW50cnk6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6QWJzdHJhY3RTbG90Vmlz
aXRvciYpOwordGVtcGxhdGUgdm9pZCBKU0ludGVyc2VjdGlvbk9ic2VydmVyRW50cnk6OnZpc2l0
QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImKTsKKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNZXNzYWdlQ2hhbm5l
bEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNN
ZXNzYWdlQ2hhbm5lbEN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjE5MikKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTTWVzc2FnZUNoYW5uZWxDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zMyw3ICszMyw5IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBKU01lc3Nh
Z2VDaGFubmVsOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNp
dG9yKQorLy92b2lkIEpTTWVzc2FnZUNoYW5uZWw6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpT
Qzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9p
ZCBKU01lc3NhZ2VDaGFubmVsOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNp
dG9yKQogewogICAgIGlmIChNZXNzYWdlUG9ydCogcG9ydCA9IHdyYXBwZWQoKS5wb3J0MSgpKQog
ICAgICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QocG9ydCk7CkBAIC00Miw2ICs0NCw5IEBAIHZv
aWQgSlNNZXNzYWdlQ2hhbm5lbDo6dmlzaXRBZGRpdGlvbmFsQ2gKICAgICAgICAgdmlzaXRvci5h
ZGRPcGFxdWVSb290KHBvcnQpOwogfQogCit0ZW1wbGF0ZSB2b2lkIEpTTWVzc2FnZUNoYW5uZWw6
OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVt
cGxhdGUgdm9pZCBKU01lc3NhZ2VDaGFubmVsOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6
OlNsb3RWaXNpdG9yJik7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVO
QUJMRShDSEFOTkVMX01FU1NBR0lORykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTTWVzc2FnZUV2ZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU01lc3NhZ2VFdmVudEN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjE5MikKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWVzc2FnZUV2ZW50Q3VzdG9tLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNzAsNyArNzAsOSBAQCBKU0M6OkpTVmFsdWUgSlNNZXNzYWdlRXZlbnQ6
OmRhdGEoSlNDOjpKCiAgICAgfSk7CiB9CiAKLXZvaWQgSlNNZXNzYWdlRXZlbnQ6OnZpc2l0QWRk
aXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3ZvaWQgSlNNZXNz
YWdlRXZlbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0
b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU01lc3NhZ2VFdmVudDo6dmlz
aXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBXVEY6OnN3aXRj
aE9uKHdyYXBwZWQoKS5kYXRhKCksIFsmdmlzaXRvcl0gKGNvbnN0IEpTVmFsdWVJbldyYXBwZWRP
YmplY3QmIGRhdGEpIHsKICAgICAgICAgZGF0YS52aXNpdCh2aXNpdG9yKTsKQEAgLTg0LDQgKzg2
LDcgQEAgdm9pZCBKU01lc3NhZ2VFdmVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbAogICAgIHdyYXBw
ZWQoKS5jYWNoZWRQb3J0cygpLnZpc2l0KHZpc2l0b3IpOwogfQogCit0ZW1wbGF0ZSB2b2lkIEpT
TWVzc2FnZUV2ZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OkFic3RyYWN0U2xvdFZp
c2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNNZXNzYWdlRXZlbnQ6OnZpc2l0QWRkaXRpb25hbENo
aWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImKTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNZXNzYWdlUG9ydEN1c3RvbS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNZXNzYWdlUG9ydEN1c3Rv
bS5jcHAJKHJldmlzaW9uIDI3MjE5MikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
TWVzc2FnZVBvcnRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwxMSArMzEsMTYgQEAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKLXZvaWQgSlNNZXNz
YWdlUG9ydDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisv
L3ZvaWQgSlNNZXNzYWdlUG9ydDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3Im
IHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU01lc3NhZ2VQb3J0
Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIC8vIElm
IHdlIGhhdmUgYSBsb2NhbGx5IGVudGFuZ2xlZCBwb3J0LCB3ZSBjYW4gZGlyZWN0bHkgbWFyayBp
dCBhcyByZWFjaGFibGUuIFBvcnRzIHRoYXQgYXJlIHJlbW90ZWx5IGVudGFuZ2xlZCBhcmUgbWFy
a2VkIGluLXVzZSBieSBtYXJrQWN0aXZlT2JqZWN0c0ZvckNvbnRleHQoKS4KICAgICBpZiAoTWVz
c2FnZVBvcnQqIHBvcnQgPSB3cmFwcGVkKCkubG9jYWxseUVudGFuZ2xlZFBvcnQoKSkKICAgICAg
ICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHBvcnQpOwogfQogCit0ZW1wbGF0ZSB2b2lkIEpTTWVz
c2FnZVBvcnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsK
K3RlbXBsYXRlIHZvaWQgSlNNZXNzYWdlUG9ydDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xv
dFZpc2l0b3ImKTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNNdXRhdGlvbk9ic2VydmVyQ3VzdG9tLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU011dGF0aW9uT2JzZXJ2ZXJDdXN0b20uY3Bw
CShyZXZpc2lvbiAyNzIxOTIpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU011dGF0
aW9uT2JzZXJ2ZXJDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSwxMiArMzksMTcgQEAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKLXZvaWQgSlNNdXRh
dGlvbk9ic2VydmVyOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2
aXNpdG9yKQorLy92b2lkIEpTTXV0YXRpb25PYnNlcnZlcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRy
ZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+
Cit2b2lkIEpTTXV0YXRpb25PYnNlcnZlcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRv
ciYgdmlzaXRvcikKIHsKICAgICB3cmFwcGVkKCkuY2FsbGJhY2soKS52aXNpdEpTRnVuY3Rpb24o
dmlzaXRvcik7CiB9CiAKLWJvb2wgSlNNdXRhdGlvbk9ic2VydmVyT3duZXI6OmlzUmVhY2hhYmxl
RnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwg
U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKnJlYXNvbikKK3RlbXBsYXRlIHZvaWQg
SlNNdXRhdGlvbk9ic2VydmVyOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OkFic3RyYWN0
U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNNdXRhdGlvbk9ic2VydmVyOjp2aXNpdEFk
ZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJik7CisKK2Jvb2wgSlNNdXRhdGlvbk9i
c2VydmVyT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6
VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvciwgY29u
c3QgY2hhcioqcmVhc29uKQogewogICAgIGZvciAoYXV0byogbm9kZSA6IGpzQ2FzdDxKU011dGF0
aW9uT2JzZXJ2ZXIqPihoYW5kbGUuc2xvdCgpLT5hc0NlbGwoKSktPndyYXBwZWQoKS5vYnNlcnZl
ZE5vZGVzKCkpIHsKICAgICAgICAgaWYgKHZpc2l0b3IuY29udGFpbnNPcGFxdWVSb290KHJvb3Qo
bm9kZSkpKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU011dGF0aW9uUmVj
b3JkQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U011dGF0aW9uUmVjb3JkQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcyMTkyKQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNNdXRhdGlvblJlY29yZEN1c3RvbS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTMwLDkgKzMwLDE0IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBKU011
dGF0aW9uUmVjb3JkOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2
aXNpdG9yKQorLy92b2lkIEpTTXV0YXRpb25SZWNvcmQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVu
KEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgor
dm9pZCBKU011dGF0aW9uUmVjb3JkOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2
aXNpdG9yKQogewogICAgIHdyYXBwZWQoKS52aXNpdE5vZGVzQ29uY3VycmVudGx5KHZpc2l0b3Ip
OwogfQotICAgIAorCit0ZW1wbGF0ZSB2b2lkIEpTTXV0YXRpb25SZWNvcmQ6OnZpc2l0QWRkaXRp
b25hbENoaWxkcmVuKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBK
U011dGF0aW9uUmVjb3JkOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9y
Jik7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTTmF2aWdhdG9yQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU05hdmlnYXRvckN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjE5MikKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTmF2aWdhdG9yQ3VzdG9tLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzIsMTEgKzMyLDE2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9p
ZCBKU05hdmlnYXRvcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYg
dmlzaXRvcikKKy8vdm9pZCBKU05hdmlnYXRvcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlND
OjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lk
IEpTTmF2aWdhdG9yOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQog
ewogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChzdGF0aWNfY2FzdDxOYXZpZ2F0b3JCYXNlKj4o
JndyYXBwZWQoKSkpOwogfQogCit0ZW1wbGF0ZSB2b2lkIEpTTmF2aWdhdG9yOjp2aXNpdEFkZGl0
aW9uYWxDaGlsZHJlbihKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQg
SlNOYXZpZ2F0b3I6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImKTsK
KwogI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCiBKU0M6OkpTVmFsdWUgSlNOYXZpZ2F0b3I6Omdl
dFVzZXJNZWRpYShKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6
OkNhbGxGcmFtZSYgY2FsbEZyYW1lKQogewpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNOb2RlQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU05vZGVDdXN0b20uY3BwCShyZXZpc2lvbiAyNzIxOTIpCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU05vZGVDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NCw3ICs3
NCw4IEBAIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7
CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBpc1JlYWNoYWJsZUZyb21ET00oTm9kZSogbm9kZSwgU2xv
dFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCisvL3N0YXRpYyBpbmxpbmUg
Ym9vbCBpc1JlYWNoYWJsZUZyb21ET00oTm9kZSogbm9kZSwgU2xvdFZpc2l0b3ImIHZpc2l0b3Is
IGNvbnN0IGNoYXIqKiByZWFzb24pCitzdGF0aWMgaW5saW5lIGJvb2wgaXNSZWFjaGFibGVGcm9t
RE9NKE5vZGUqIG5vZGUsIEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIq
KiByZWFzb24pCiB7CiAgICAgaWYgKCFub2RlLT5pc0Nvbm5lY3RlZCgpKSB7CiAgICAgICAgIGlm
IChpczxFbGVtZW50Pigqbm9kZSkpIHsKQEAgLTEyMyw3ICsxMjQsNyBAQCBzdGF0aWMgaW5saW5l
IGJvb2wgaXNSZWFjaGFibGVGcm9tRE9NKE5vCiAgICAgcmV0dXJuIHZpc2l0b3IuY29udGFpbnNP
cGFxdWVSb290KHJvb3Qobm9kZSkpOwogfQogCi1ib29sIEpTTm9kZU93bmVyOjppc1JlYWNoYWJs
ZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCos
IFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQorYm9vbCBKU05vZGVP
d25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3du
PiBoYW5kbGUsIHZvaWQqLCBBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFy
KiogcmVhc29uKQogewogICAgIEpTTm9kZSoganNOb2RlID0ganNDYXN0PEpTTm9kZSo+KGhhbmRs
ZS5zbG90KCktPmFzQ2VsbCgpKTsKICAgICByZXR1cm4gaXNSZWFjaGFibGVGcm9tRE9NKCZqc05v
ZGUtPndyYXBwZWQoKSwgdmlzaXRvciwgcmVhc29uKTsKQEAgLTEzNiwxMSArMTM3LDE2IEBAIEpT
U2NvcGUqIEpTTm9kZTo6cHVzaEV2ZW50SGFuZGxlclNjb3BlKEoKICAgICByZXR1cm4gbm9kZTsK
IH0KIAotdm9pZCBKU05vZGU6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQorLy92b2lkIEpTTm9kZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0
b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU05vZGU6OnZp
c2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgdmlzaXRvci5h
ZGRPcGFxdWVSb290KHJvb3Qod3JhcHBlZCgpKSk7CiB9CiAKK3RlbXBsYXRlIHZvaWQgSlNOb2Rl
Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0
ZSB2b2lkIEpTTm9kZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKKwog
c3RhdGljIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBjcmVhdGVXcmFwcGVySW5saW5lKEpTR2xvYmFs
T2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBSZWY8Tm9kZT4mJiBub2RlKQogewogICAgIEFTU0VSVCghZ2V0Q2FjaGVkV3JhcHBlcihn
bG9iYWxPYmplY3QtPndvcmxkKCksIG5vZGUpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTTm9kZUl0ZXJhdG9yQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU05vZGVJdGVyYXRvckN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjE5
MikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUl0ZXJhdG9yQ3VzdG9tLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjUsMTAgKzI1LDE1IEBACiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotdm9pZCBKU05vZGVJdGVyYXRvcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpT
bG90VmlzaXRvciYgdmlzaXRvcikKKy8vdm9pZCBKU05vZGVJdGVyYXRvcjo6dmlzaXRBZGRpdGlv
bmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1l
IFZpc2l0b3I+Cit2b2lkIEpTTm9kZUl0ZXJhdG9yOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihW
aXNpdG9yJiB2aXNpdG9yKQogewogICAgIGlmIChOb2RlRmlsdGVyKiBmaWx0ZXIgPSB3cmFwcGVk
KCkuZmlsdGVyKCkpCiAgICAgICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChmaWx0ZXIpOwogfQog
Ci19Cit0ZW1wbGF0ZSB2b2lkIEpTTm9kZUl0ZXJhdG9yOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJl
bihKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNOb2RlSXRlcmF0
b3I6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImKTsKKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2Rl
TGlzdEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNOb2RlTGlzdEN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjE5MikKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTTm9kZUxpc3RDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw3
ICszNyw3IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCi1i
b29sIEpTTm9kZUxpc3RPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5k
bGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBTbG90VmlzaXRvciYgdmlzaXRvciwgY29u
c3QgY2hhcioqIHJlYXNvbikKK2Jvb2wgSlNOb2RlTGlzdE93bmVyOjppc1JlYWNoYWJsZUZyb21P
cGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIEFic3Ry
YWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCiB7CiAgICAgSlNO
b2RlTGlzdCoganNOb2RlTGlzdCA9IGpzQ2FzdDxKU05vZGVMaXN0Kj4oaGFuZGxlLnNsb3QoKS0+
YXNDZWxsKCkpOwogICAgIGlmICghanNOb2RlTGlzdC0+aGFzQ3VzdG9tUHJvcGVydGllcyhqc05v
ZGVMaXN0LT52bSgpKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTT2Zmc2Ny
ZWVuQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU09mZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRleHQy
REN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjE5MikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTT2Zmc2NyZWVuQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQ3VzdG9tLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzEsNyArMzEsNyBAQCBpbmxpbmUgdm9pZCogcm9vdChPZmZzY3JlZW5DYW52
YXMqIGNhbnZhCiAgICAgcmV0dXJuIGNhbnZhczsKIH0KIAotYm9vbCBKU09mZnNjcmVlbkNhbnZh
c1JlbmRlcmluZ0NvbnRleHQyRE93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6
OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIFNsb3RWaXNpdG9yJiB2aXNpdG9y
LCBjb25zdCBjaGFyKiogcmVhc29uKQorYm9vbCBKU09mZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyRE93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6
OlVua25vd24+IGhhbmRsZSwgdm9pZCosIEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNv
bnN0IGNoYXIqKiByZWFzb24pCiB7CiAgICAgaWYgKFVOTElLRUxZKHJlYXNvbikpCiAgICAgICAg
ICpyZWFzb24gPSAiQ2FudmFzIGlzIG9wYXF1ZSByb290IjsKQEAgLTQxLDExICs0MSwxNiBAQCBi
b29sIEpTT2Zmc2NyZWVuQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJECiAgICAgcmV0dXJuIHZpc2l0
b3IuY29udGFpbnNPcGFxdWVSb290KHJvb3QpOwogfQogCi12b2lkIEpTT2Zmc2NyZWVuQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYg
dmlzaXRvcikKKy8vdm9pZCBKU09mZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6dmlz
aXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBl
bmFtZSBWaXNpdG9yPgordm9pZCBKU09mZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6
dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB2aXNpdG9y
LmFkZE9wYXF1ZVJvb3Qocm9vdCgmd3JhcHBlZCgpLmNhbnZhcygpKSk7CiB9CiAKK3RlbXBsYXRl
IHZvaWQgSlNPZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnZpc2l0QWRkaXRpb25h
bENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNPZmZzY3Jl
ZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RW
aXNpdG9yJik7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1BhaW50UmVuZGVyaW5nQ29udGV4dDJEQ3VzdG9tLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1BhaW50UmVuZGVy
aW5nQ29udGV4dDJEQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcyMTkyKQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNQYWludFJlbmRlcmluZ0NvbnRleHQyREN1c3RvbS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM2LDcgKzM2LDcgQEAgaW5saW5lIHZvaWQqIHJvb3QoQ3VzdG9tUGFpbnRD
YW52YXMqIGNhbgogICAgIHJldHVybiBjYW52YXM7CiB9CiAKLWJvb2wgSlNQYWludFJlbmRlcmlu
Z0NvbnRleHQyRE93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxK
U0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBj
aGFyKiogcmVhc29uKQorYm9vbCBKU1BhaW50UmVuZGVyaW5nQ29udGV4dDJET3duZXI6OmlzUmVh
Y2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2
b2lkKiwgQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikK
IHsKICAgICBpZiAoVU5MSUtFTFkocmVhc29uKSkKICAgICAgICAgKnJlYXNvbiA9ICJDYW52YXMg
aXMgb3BhcXVlIHJvb3QiOwpAQCAtNDYsMTEgKzQ2LDE2IEBAIGJvb2wgSlNQYWludFJlbmRlcmlu
Z0NvbnRleHQyRE93bmVyOjppc1IKICAgICByZXR1cm4gdmlzaXRvci5jb250YWluc09wYXF1ZVJv
b3Qocm9vdCk7CiB9CiAKLXZvaWQgSlNQYWludFJlbmRlcmluZ0NvbnRleHQyRDo6dmlzaXRBZGRp
dGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3ZvaWQgSlNQYWludFJlbmRl
cmluZ0NvbnRleHQyRDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0
b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1BhaW50UmVuZGVyaW5nQ29u
dGV4dDJEOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAg
IHZpc2l0b3IuYWRkT3BhcXVlUm9vdChyb290KCZ3cmFwcGVkKCkuY2FudmFzKCkpKTsKIH0KIAor
dGVtcGxhdGUgdm9pZCBKU1BhaW50UmVuZGVyaW5nQ29udGV4dDJEOjp2aXNpdEFkZGl0aW9uYWxD
aGlsZHJlbihBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTUGFpbnRSZW5k
ZXJpbmdDb250ZXh0MkQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CisK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKICNlbmRpZgogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU1BhaW50V29ya2xldEdsb2JhbFNjb3BlQ3VzdG9tLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1BhaW50V29ya2xldEdsb2JhbFNjb3Bl
Q3VzdG9tLmNwcAkocmV2aXNpb24gMjcyMTkyKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNQYWludFdvcmtsZXRHbG9iYWxTY29wZUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMxLDcgKzMxLDkgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBKU0M7
CiAKLXZvaWQgSlNQYWludFdvcmtsZXRHbG9iYWxTY29wZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRy
ZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vdm9pZCBKU1BhaW50V29ya2xldEdsb2Jh
bFNjb3BlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9y
KQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNQYWludFdvcmtsZXRHbG9iYWxT
Y29wZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBh
dXRvIGxvY2tlciA9IGhvbGRMb2NrKHdyYXBwZWQoKS5wYWludERlZmluaXRpb25Mb2NrKCkpOwog
ICAgIGZvciAoYXV0byYgcmVnaXN0ZXJlZCA6IHdyYXBwZWQoKS5wYWludERlZmluaXRpb25NYXAo
KS52YWx1ZXMoKSkgewpAQCAtNDAsNSArNDIsOSBAQCB2b2lkIEpTUGFpbnRXb3JrbGV0R2xvYmFs
U2NvcGU6OnZpc2l0QWRkCiAgICAgfQogfQogCi19Cit0ZW1wbGF0ZSB2b2lkIEpTUGFpbnRXb3Jr
bGV0R2xvYmFsU2NvcGU6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6QWJzdHJhY3RTbG90
VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU1BhaW50V29ya2xldEdsb2JhbFNjb3BlOjp2aXNp
dEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJik7CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKKwogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1Bh
eW1lbnRNZXRob2RDaGFuZ2VFdmVudEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNQYXltZW50TWV0aG9kQ2hhbmdlRXZlbnRDdXN0b20uY3BwCShy
ZXZpc2lvbiAyNzIxOTIpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1BheW1lbnRN
ZXRob2RDaGFuZ2VFdmVudEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDcgKzQxLDkg
QEAgSlNDOjpKU1ZhbHVlIEpTUGF5bWVudE1ldGhvZENoYW5nZUV2ZW50OgogICAgIH0pOwogfQog
Ci12b2lkIEpTUGF5bWVudE1ldGhvZENoYW5nZUV2ZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJl
bihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy92b2lkIEpTUGF5bWVudE1ldGhvZENoYW5n
ZUV2ZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9y
KQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNQYXltZW50TWV0aG9kQ2hhbmdl
RXZlbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAg
V1RGOjpzd2l0Y2hPbih3cmFwcGVkKCkubWV0aG9kRGV0YWlscygpLCBbJnZpc2l0b3JdKGNvbnN0
IEpTVmFsdWVJbldyYXBwZWRPYmplY3QmIG1ldGhvZERldGFpbHMpIHsKICAgICAgICAgbWV0aG9k
RGV0YWlscy52aXNpdCh2aXNpdG9yKTsKQEAgLTUxLDYgKzUzLDkgQEAgdm9pZCBKU1BheW1lbnRN
ZXRob2RDaGFuZ2VFdmVudDo6dmlzaXRBZAogICAgIHdyYXBwZWQoKS5jYWNoZWRNZXRob2REZXRh
aWxzKCkudmlzaXQodmlzaXRvcik7CiB9CiAKK3RlbXBsYXRlIHZvaWQgSlNQYXltZW50TWV0aG9k
Q2hhbmdlRXZlbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6QWJzdHJhY3RTbG90Vmlz
aXRvciYpOwordGVtcGxhdGUgdm9pZCBKU1BheW1lbnRNZXRob2RDaGFuZ2VFdmVudDo6dmlzaXRB
ZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYpOworCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoUEFZTUVOVF9SRVFVRVNUKQpJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNQYXltZW50UmVzcG9uc2VDdXN0b20uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUGF5bWVudFJlc3BvbnNlQ3VzdG9t
LmNwcAkocmV2aXNpb24gMjcyMTkyKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNQ
YXltZW50UmVzcG9uc2VDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNywxMSArMzcsMTYg
QEAgSlNDOjpKU1ZhbHVlIEpTUGF5bWVudFJlc3BvbnNlOjpkZXRhaWxzKAogICAgIH0pOwogfQog
Ci12b2lkIEpTUGF5bWVudFJlc3BvbnNlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNs
b3RWaXNpdG9yJiB2aXNpdG9yKQorLy92b2lkIEpTUGF5bWVudFJlc3BvbnNlOjp2aXNpdEFkZGl0
aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5h
bWUgVmlzaXRvcj4KK3ZvaWQgSlNQYXltZW50UmVzcG9uc2U6OnZpc2l0QWRkaXRpb25hbENoaWxk
cmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgd3JhcHBlZCgpLmNhY2hlZERldGFpbHMoKS52
aXNpdCh2aXNpdG9yKTsKIH0KIAordGVtcGxhdGUgdm9pZCBKU1BheW1lbnRSZXNwb25zZTo6dmlz
aXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0
ZSB2b2lkIEpTUGF5bWVudFJlc3BvbnNlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNs
b3RWaXNpdG9yJik7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJM
RShQQVlNRU5UX1JFUVVFU1QpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1Bl
cmZvcm1hbmNlT2JzZXJ2ZXJDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTUGVyZm9ybWFuY2VPYnNlcnZlckN1c3RvbS5jcHAJKHJldmlzaW9uIDI3
MjE5MikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUGVyZm9ybWFuY2VPYnNlcnZl
ckN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDEyICszMSwxNyBAQAogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLXZvaWQgSlNQZXJmb3JtYW5jZU9ic2VydmVyOjp2aXNpdEFkZGl0aW9u
YWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy92b2lkIEpTUGVyZm9ybWFu
Y2VPYnNlcnZlcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlz
aXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTUGVyZm9ybWFuY2VPYnNl
cnZlcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB3
cmFwcGVkKCkuY2FsbGJhY2soKS52aXNpdEpTRnVuY3Rpb24odmlzaXRvcik7CiB9CiAKLWJvb2wg
SlNQZXJmb3JtYW5jZU9ic2VydmVyT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpT
Qzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgSlNDOjpTbG90VmlzaXRvciYs
IGNvbnN0IGNoYXIqKiByZWFzb24pCit0ZW1wbGF0ZSB2b2lkIEpTUGVyZm9ybWFuY2VPYnNlcnZl
cjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0
ZW1wbGF0ZSB2b2lkIEpTUGVyZm9ybWFuY2VPYnNlcnZlcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRy
ZW4oSlNDOjpTbG90VmlzaXRvciYpOworCitib29sIEpTUGVyZm9ybWFuY2VPYnNlcnZlck93bmVy
Ojppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhh
bmRsZSwgdm9pZCosIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYsIGNvbnN0IGNoYXIqKiByZWFz
b24pCiB7CiAgICAgaWYgKFVOTElLRUxZKHJlYXNvbikpCiAgICAgICAgICpyZWFzb24gPSAiUmVn
aXN0ZXJlZCBQZXJmb3JtYW5jZU9ic2VydmVyIGNhbGxiYWNrIjsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTUG9wU3RhdGVFdmVudEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNQb3BTdGF0ZUV2ZW50Q3VzdG9tLmNwcAkocmV2
aXNpb24gMjcyMTkyKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNQb3BTdGF0ZUV2
ZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTAsOSArOTAsMTQgQEAgSlNWYWx1ZSBK
U1BvcFN0YXRlRXZlbnQ6OnN0YXRlKEpTR2xvYmFsTwogICAgIHJldHVybiBjYWNoZVN0YXRlKHJl
c3VsdCk7CiB9CiAKLXZvaWQgSlNQb3BTdGF0ZUV2ZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJl
bihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy92b2lkIEpTUG9wU3RhdGVFdmVudDo6dmlz
aXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRl
PHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTUG9wU3RhdGVFdmVudDo6dmlzaXRBZGRpdGlvbmFs
Q2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB3cmFwcGVkKCkuc3RhdGUoKS52aXNp
dCh2aXNpdG9yKTsKIH0KIAordGVtcGxhdGUgdm9pZCBKU1BvcFN0YXRlRXZlbnQ6OnZpc2l0QWRk
aXRpb25hbENoaWxkcmVuKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9p
ZCBKU1BvcFN0YXRlRXZlbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0
b3ImKTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNQcm9taXNlUmVqZWN0aW9uRXZlbnRDdXN0b20uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUHJvbWlzZVJlamVjdGlvbkV2ZW50Q3VzdG9t
LmNwcAkocmV2aXNpb24gMjcyMTkyKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNQ
cm9taXNlUmVqZWN0aW9uRXZlbnRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw5ICsz
MiwxNCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgSlNQcm9taXNlUmVqZWN0aW9u
RXZlbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3Ip
CisvL3ZvaWQgSlNQcm9taXNlUmVqZWN0aW9uRXZlbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVu
KEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgor
dm9pZCBKU1Byb21pc2VSZWplY3Rpb25FdmVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlz
aXRvciYgdmlzaXRvcikKIHsKICAgICB3cmFwcGVkKCkucmVhc29uKCkudmlzaXQodmlzaXRvcik7
CiB9CiAKK3RlbXBsYXRlIHZvaWQgSlNQcm9taXNlUmVqZWN0aW9uRXZlbnQ6OnZpc2l0QWRkaXRp
b25hbENoaWxkcmVuKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBK
U1Byb21pc2VSZWplY3Rpb25FdmVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90
VmlzaXRvciYpOworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU1Jlc2l6ZU9ic2VydmVyQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1Jlc2l6ZU9ic2VydmVyQ3VzdG9tLmNwcAkocmV2
aXNpb24gMjcyMTkyKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNSZXNpemVPYnNl
cnZlckN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDExICszMCwxNiBAQAogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgSlNSZXNpemVPYnNlcnZlcjo6dmlzaXRBZGRpdGlvbmFs
Q2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vdm9pZCBKU1Jlc2l6ZU9ic2Vy
dmVyOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQor
dGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNSZXNpemVPYnNlcnZlcjo6dmlzaXRB
ZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBSZXNpemVPYnNlcnZl
ckNhbGxiYWNrKiBjYWxsYmFjayA9IHdyYXBwZWQoKS5jYWxsYmFja0NvbmN1cnJlbnRseSgpOwog
ICAgIGlmIChjYWxsYmFjaykKICAgICAgICAgY2FsbGJhY2stPnZpc2l0SlNGdW5jdGlvbih2aXNp
dG9yKTsKIH0KIAotfQordGVtcGxhdGUgdm9pZCBKU1Jlc2l6ZU9ic2VydmVyOjp2aXNpdEFkZGl0
aW9uYWxDaGlsZHJlbihKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQg
SlNSZXNpemVPYnNlcnZlcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRv
ciYpOworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU1Jlc2l6ZU9ic2VydmVyRW50cnlDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUmVzaXplT2JzZXJ2ZXJFbnRyeUN1c3RvbS5jcHAJ
KHJldmlzaW9uIDI3MjE5MikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUmVzaXpl
T2JzZXJ2ZXJFbnRyeUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDEwICszMCwxNSBA
QAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgSlNSZXNpemVPYnNlcnZlckVudHJ5Ojp2
aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy92b2lk
IEpTUmVzaXplT2JzZXJ2ZXJFbnRyeTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90
VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTUmVz
aXplT2JzZXJ2ZXJFbnRyeTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRv
cikKIHsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qocm9vdCh3cmFwcGVkKCkudGFyZ2V0KCkp
KTsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qod3JhcHBlZCgpLmNvbnRlbnRSZWN0KCkpOwog
fQogCi19Cit0ZW1wbGF0ZSB2b2lkIEpTUmVzaXplT2JzZXJ2ZXJFbnRyeTo6dmlzaXRBZGRpdGlv
bmFsQ2hpbGRyZW4oSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpT
UmVzaXplT2JzZXJ2ZXJFbnRyeTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90Vmlz
aXRvciYpOworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU1NWR1ZpZXdTcGVjQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NWR1ZpZXdTcGVjQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcy
MTkyKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNTVkdWaWV3U3BlY0N1c3RvbS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDEwICszMCwxNSBAQAogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLXZvaWQgSlNTVkdWaWV3U3BlYzo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpT
bG90VmlzaXRvciYgdmlzaXRvcikKKy8vdm9pZCBKU1NWR1ZpZXdTcGVjOjp2aXNpdEFkZGl0aW9u
YWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUg
VmlzaXRvcj4KK3ZvaWQgSlNTVkdWaWV3U3BlYzo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlz
aXRvciYgdmlzaXRvcikKIHsKICAgICBBU1NFUlQod3JhcHBlZCgpLmNvbnRleHRFbGVtZW50Q29u
Y3VycmVudGx5KCkuZ2V0KCkpOwogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChyb290KHdyYXBw
ZWQoKS5jb250ZXh0RWxlbWVudENvbmN1cnJlbnRseSgpLmdldCgpKSk7CiB9CiAKLX0KK3RlbXBs
YXRlIHZvaWQgSlNTVkdWaWV3U3BlYzo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpBYnN0
cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTU1ZHVmlld1NwZWM6OnZpc2l0QWRk
aXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImKTsKKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNTZXJ2aWNlV29ya2VyR2xv
YmFsU2NvcGVDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTU2VydmljZVdvcmtlckdsb2JhbFNjb3BlQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcyMTky
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNTZXJ2aWNlV29ya2VyR2xvYmFsU2Nv
cGVDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCwxMiArMzQsMTcgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCi12b2lkIEpTU2VydmljZVdvcmtl
ckdsb2JhbFNjb3BlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRv
cikKKy8vdm9pZCBKU1NlcnZpY2VXb3JrZXJHbG9iYWxTY29wZTo6dmlzaXRBZGRpdGlvbmFsQ2hp
bGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgor
dm9pZCBKU1NlcnZpY2VXb3JrZXJHbG9iYWxTY29wZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4o
VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QoJndyYXBwZWQo
KS5jbGllbnRzKCkpOwogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdCgmd3JhcHBlZCgpLnJlZ2lz
dHJhdGlvbigpKTsKIH0KIAordGVtcGxhdGUgdm9pZCBKU1NlcnZpY2VXb3JrZXJHbG9iYWxTY29w
ZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oQWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxh
dGUgdm9pZCBKU1NlcnZpY2VXb3JrZXJHbG9iYWxTY29wZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRy
ZW4oU2xvdFZpc2l0b3ImKTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU3RhdGljUmFuZ2VDdXN0b20uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU3RhdGljUmFuZ2VDdXN0
b20uY3BwCShyZXZpc2lvbiAyNzIxOTIpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U1N0YXRpY1JhbmdlQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsOSArMzAsMTQgQEAK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIEpTU3RhdGljUmFuZ2U6OnZpc2l0QWRkaXRp
b25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3ZvaWQgSlNTdGF0aWNS
YW5nZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikK
K3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTU3RhdGljUmFuZ2U6OnZpc2l0QWRk
aXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgd3JhcHBlZCgpLnZpc2l0
Tm9kZXNDb25jdXJyZW50bHkodmlzaXRvcik7CiB9CiAKK3RlbXBsYXRlIHZvaWQgSlNTdGF0aWNS
YW5nZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJik7
Cit0ZW1wbGF0ZSB2b2lkIEpTU3RhdGljUmFuZ2U6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpT
Qzo6U2xvdFZpc2l0b3ImKTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNTdHlsZVNoZWV0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1N0eWxlU2hlZXRDdXN0b20uY3BwCShyZXZp
c2lvbiAyNzIxOTIpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1N0eWxlU2hlZXRD
dXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCwxMSArMzAsMTYgQEAKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi12b2lkIEpTU3R5bGVTaGVldDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4o
SlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vdm9pZCBKU1N0eWxlU2hlZXQ6OnZpc2l0QWRk
aXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBl
bmFtZSBWaXNpdG9yPgordm9pZCBKU1N0eWxlU2hlZXQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVu
KFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHJvb3QoJndy
YXBwZWQoKSkpOwogfQogCit0ZW1wbGF0ZSB2b2lkIEpTU3R5bGVTaGVldDo6dmlzaXRBZGRpdGlv
bmFsQ2hpbGRyZW4oQWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU1N0eWxl
U2hlZXQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CisKIEpTQzo6SlNW
YWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0RPTUdsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBSZWY8U3R5bGVTaGVldD4mJiBzdHlsZVNoZWV0KQogewogICAg
IGlmIChzdHlsZVNoZWV0LT5pc0NTU1N0eWxlU2hlZXQoKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTVGV4dFRyYWNrQ3VlQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1RleHRUcmFja0N1ZUN1c3RvbS5jcHAJKHJldmlzaW9u
IDI3MjE5MikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVGV4dFRyYWNrQ3VlQ3Vz
dG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyArMzgsNyBAQAogbmFtZXNwYWNlIFdlYkNv
cmUgewogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAotYm9vbCBKU1RleHRUcmFja0N1ZU93bmVyOjpp
c1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRs
ZSwgdm9pZCosIFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQorYm9v
bCBKU1RleHRUcmFja0N1ZU93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6Okhh
bmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIEFic3RyYWN0U2xvdFZpc2l0b3ImIHZp
c2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCiB7CiAgICAgSlNUZXh0VHJhY2tDdWUqIGpzVGV4
dFRyYWNrQ3VlID0ganNDYXN0PEpTVGV4dFRyYWNrQ3VlKj4oaGFuZGxlLnNsb3QoKS0+YXNDZWxs
KCkpOwogICAgIFRleHRUcmFja0N1ZSYgdGV4dFRyYWNrQ3VlID0ganNUZXh0VHJhY2tDdWUtPndy
YXBwZWQoKTsKQEAgLTgyLDEyICs4MiwxNyBAQCBKU1ZhbHVlIHRvSlMoSlNHbG9iYWxPYmplY3Qq
IGxleGljYWxHbG9iCiAgICAgcmV0dXJuIHdyYXAobGV4aWNhbEdsb2JhbE9iamVjdCwgZ2xvYmFs
T2JqZWN0LCBjdWUpOwogfQogCi12b2lkIEpTVGV4dFRyYWNrQ3VlOjp2aXNpdEFkZGl0aW9uYWxD
aGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vdm9pZCBKU1RleHRUcmFja0N1ZTo6dmlz
aXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBl
bmFtZSBWaXNpdG9yPgordm9pZCBKU1RleHRUcmFja0N1ZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRy
ZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBpZiAoVGV4dFRyYWNrKiB0ZXh0VHJhY2sgPSB3
cmFwcGVkKCkudHJhY2soKSkKICAgICAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHJvb3QodGV4
dFRyYWNrKSk7CiB9CiAKK3RlbXBsYXRlIHZvaWQgSlNUZXh0VHJhY2tDdWU6OnZpc2l0QWRkaXRp
b25hbENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNUZXh0
VHJhY2tDdWU6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CisKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU1RleHRUcmFja0N1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNUZXh0VHJhY2tDdXN0b20uY3BwCShyZXZpc2lvbiAyNzIxOTIpCisrKyBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1RleHRUcmFja0N1c3RvbS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM2LDExICszNiwxNiBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogdXNpbmcgbmFt
ZXNwYWNlIEpTQzsKIAotdm9pZCBKU1RleHRUcmFjazo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4o
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3ZvaWQgSlNUZXh0VHJhY2s6OnZpc2l0QWRkaXRpb25h
bENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRv
cj4KK3ZvaWQgSlNUZXh0VHJhY2s6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZp
c2l0b3IpCiB7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHJvb3QoJndyYXBwZWQoKSkpOwog
fQogCit0ZW1wbGF0ZSB2b2lkIEpTVGV4dFRyYWNrOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihB
YnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTVGV4dFRyYWNrOjp2aXNpdEFk
ZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYpOworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CiAKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNUZXh0VHJhY2tM
aXN0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U1RleHRUcmFja0xpc3RDdXN0b20uY3BwCShyZXZpc2lvbiAyNzIxOTIpCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU1RleHRUcmFja0xpc3RDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zNiwxMSArMzYsMTYgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFj
ZSBKU0M7CiAKLXZvaWQgSlNUZXh0VHJhY2tMaXN0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihK
U0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy92b2lkIEpTVGV4dFRyYWNrTGlzdDo6dmlzaXRB
ZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5
cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTVGV4dFRyYWNrTGlzdDo6dmlzaXRBZGRpdGlvbmFsQ2hp
bGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qocm9v
dCh3cmFwcGVkKCkuZWxlbWVudCgpKSk7CiB9CiAgICAgCit0ZW1wbGF0ZSB2b2lkIEpTVGV4dFRy
YWNrTGlzdDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oQWJzdHJhY3RTbG90VmlzaXRvciYpOwor
dGVtcGxhdGUgdm9pZCBKU1RleHRUcmFja0xpc3Q6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNs
b3RWaXNpdG9yJik7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1RyZWVXYWxrZXJDdXN0b20uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVHJlZVdhbGtlckN1c3RvbS5jcHAJ
KHJldmlzaW9uIDI3MjE5MikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVHJlZVdh
bGtlckN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1LDEwICsyNSwxNSBAQAogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgSlNUcmVlV2Fsa2VyOjp2aXNpdEFkZGl0aW9uYWxDaGls
ZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy92b2lkIEpTVHJlZVdhbGtlcjo6dmlz
aXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRl
PHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTVHJlZVdhbGtlcjo6dmlzaXRBZGRpdGlvbmFsQ2hp
bGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBpZiAoTm9kZUZpbHRlciogZmlsdGVyID0g
d3JhcHBlZCgpLmZpbHRlcigpKQogICAgICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QoZmlsdGVy
KTsKIH0KIAotfQordGVtcGxhdGUgdm9pZCBKU1RyZWVXYWxrZXI6OnZpc2l0QWRkaXRpb25hbENo
aWxkcmVuKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU1RyZWVX
YWxrZXI6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImKTsKKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNV
bmRvSXRlbUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNVbmRvSXRlbUN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjE5MikKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTVW5kb0l0ZW1DdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
OSwxMyArMjksMTggQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIEpTVW5kb0l0ZW06
OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3Zv
aWQgSlNVbmRvSXRlbTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYg
dmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTVW5kb0l0ZW06OnZp
c2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgd3JhcHBlZCgp
LnVuZG9IYW5kbGVyKCkudmlzaXRKU0Z1bmN0aW9uKHZpc2l0b3IpOwogICAgIHdyYXBwZWQoKS5y
ZWRvSGFuZGxlcigpLnZpc2l0SlNGdW5jdGlvbih2aXNpdG9yKTsKIH0KIAotYm9vbCBKU1VuZG9J
dGVtT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5r
bm93bj4gaGFuZGxlLCB2b2lkKiwgSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hh
cioqIHJlYXNvbikKK3RlbXBsYXRlIHZvaWQgSlNVbmRvSXRlbTo6dmlzaXRBZGRpdGlvbmFsQ2hp
bGRyZW4oSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTVW5kb0l0
ZW06OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImKTsKKworYm9vbCBK
U1VuZG9JdGVtT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpT
Qzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNp
dG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQogewogICAgIGlmIChVTkxJS0VMWShyZWFzb24pKQog
ICAgICAgICAqcmVhc29uID0gIkRvY3VtZW50IGlzIGFuIG9wYXF1ZSByb290LiI7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1ZhbHVlSW5XcmFwcGVkT2JqZWN0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNWYWx1ZUluV3JhcHBlZE9iamVj
dC5oCShyZXZpc2lvbiAyNzIxOTIpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1Zh
bHVlSW5XcmFwcGVkT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDggQEAgcHVi
bGljOgogICAgIG9wZXJhdG9yIEpTQzo6SlNWYWx1ZSgpIGNvbnN0OwogICAgIGV4cGxpY2l0IG9w
ZXJhdG9yIGJvb2woKSBjb25zdDsKICAgICBKU1ZhbHVlSW5XcmFwcGVkT2JqZWN0JiBvcGVyYXRv
cj0oY29uc3QgSlNWYWx1ZUluV3JhcHBlZE9iamVjdCYgb3RoZXIpOwotICAgIHZvaWQgdmlzaXQo
SlNDOjpTbG90VmlzaXRvciYpIGNvbnN0OworLy8gICAgdm9pZCB2aXNpdChKU0M6OlNsb3RWaXNp
dG9yJikgY29uc3Q7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCB2aXNpdChW
aXNpdG9yJikgY29uc3Q7CiAgICAgdm9pZCBjbGVhcigpOwogCiBwcml2YXRlOgpAQCAtOTgsNyAr
OTksOCBAQCBpbmxpbmUgSlNWYWx1ZUluV3JhcHBlZE9iamVjdCYgSlNWYWx1ZUluCiAgICAgcmV0
dXJuICp0aGlzOwogfQogCi1pbmxpbmUgdm9pZCBKU1ZhbHVlSW5XcmFwcGVkT2JqZWN0Ojp2aXNp
dChKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKSBjb25zdAordGVtcGxhdGU8dHlwZW5hbWUgVmlz
aXRvcj4KK2lubGluZSB2b2lkIEpTVmFsdWVJbldyYXBwZWRPYmplY3Q6OnZpc2l0KFZpc2l0b3Im
IHZpc2l0b3IpIGNvbnN0CiB7CiAgICAgcmV0dXJuIFdURjo6c3dpdGNoT24obV92YWx1ZSwgW10g
KEpTQzo6SlNWYWx1ZSkgewogICAgICAgICAvLyBOb3RoaW5nIHRvIHZpc2l0LgpAQCAtMTA3LDYg
KzEwOSw5IEBAIGlubGluZSB2b2lkIEpTVmFsdWVJbldyYXBwZWRPYmplY3Q6OnZpc2kKICAgICB9
KTsKIH0KIAordGVtcGxhdGUgdm9pZCBKU1ZhbHVlSW5XcmFwcGVkT2JqZWN0Ojp2aXNpdChKU0M6
OkFic3RyYWN0U2xvdFZpc2l0b3ImKSBjb25zdDsKK3RlbXBsYXRlIHZvaWQgSlNWYWx1ZUluV3Jh
cHBlZE9iamVjdDo6dmlzaXQoSlNDOjpTbG90VmlzaXRvciYpIGNvbnN0OworCiBpbmxpbmUgdm9p
ZCBKU1ZhbHVlSW5XcmFwcGVkT2JqZWN0OjpjbGVhcigpCiB7CiAgICAgV1RGOjpzd2l0Y2hPbiht
X3ZhbHVlLCBbXSAoV2VhayYgdmFsdWUpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTVmlkZW9UcmFja0N1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNWaWRlb1RyYWNrQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcyMTkyKQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNWaWRlb1RyYWNrQ3VzdG9tLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzUsMTEgKzM1LDE2IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBu
YW1lc3BhY2UgSlNDOwogCi12b2lkIEpTVmlkZW9UcmFjazo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRy
ZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3ZvaWQgSlNWaWRlb1RyYWNrOjp2aXNpdEFkZGl0
aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZp
c2l0b3I+Cit2b2lkIEpTVmlkZW9UcmFjazo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRv
ciYgdmlzaXRvcikKIHsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qocm9vdCgmd3JhcHBlZCgp
KSk7CiB9CiAKK3RlbXBsYXRlIHZvaWQgSlNWaWRlb1RyYWNrOjp2aXNpdEFkZGl0aW9uYWxDaGls
ZHJlbihKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNWaWRlb1Ry
YWNrOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJik7CisKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU1ZpZGVvVHJhY2tMaXN0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU1ZpZGVvVHJhY2tMaXN0Q3VzdG9tLmNwcAkocmV2aXNpb24gMjcy
MTkyKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNWaWRlb1RyYWNrTGlzdEN1c3Rv
bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDExICszNSwxNiBAQAogbmFtZXNwYWNlIFdlYkNv
cmUgewogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAotdm9pZCBKU1ZpZGVvVHJhY2tMaXN0Ojp2aXNp
dEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vdm9pZCBKU1ZpZGVv
VHJhY2tMaXN0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikK
K3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTVmlkZW9UcmFja0xpc3Q6OnZpc2l0
QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgdmlzaXRvci5hZGRP
cGFxdWVSb290KHJvb3Qod3JhcHBlZCgpLmVsZW1lbnQoKSkpOwogfQogCit0ZW1wbGF0ZSB2b2lk
IEpTVmlkZW9UcmFja0xpc3Q6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEFic3RyYWN0U2xvdFZp
c2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNWaWRlb1RyYWNrTGlzdDo6dmlzaXRBZGRpdGlvbmFs
Q2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5k
aWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViR0wyUmVuZGVyaW5nQ29u
dGV4dEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNXZWJHTDJSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcAkocmV2aXNpb24gMjcyMTkyKQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJHTDJSZW5kZXJpbmdDb250ZXh0Q3VzdG9t
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsMTIgKzMzLDE3IEBACiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCi12b2lkIEpTV2ViR0wyUmVuZGVyaW5nQ29udGV4
dDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3ZvaWQg
SlNXZWJHTDJSZW5kZXJpbmdDb250ZXh0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90Vmlz
aXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTV2ViR0wy
UmVuZGVyaW5nQ29udGV4dDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRv
cikKIHsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QoJndyYXBwZWQoKSk7CiAgICAgd3JhcHBl
ZCgpLmFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKHZpc2l0b3IpOwogfQogCit0ZW1wbGF0ZSB2b2lk
IEpTV2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpB
YnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTV2ViR0wyUmVuZGVyaW5nQ29u
dGV4dDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYpOworCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoV0VCR0wpCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYkdMUmVuZGVyaW5nQ29udGV4dEN1c3RvbS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJHTFJlbmRlcmlu
Z0NvbnRleHRDdXN0b20uY3BwCShyZXZpc2lvbiAyNzIxOTIpCisrKyBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU1dlYkdMUmVuZGVyaW5nQ29udGV4dEN1c3RvbS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTMzLDEyICszMywxNyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogdXNpbmcgbmFtZXNw
YWNlIEpTQzsKIAotdm9pZCBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmlzaXRBZGRpdGlvbmFs
Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3ZvaWQgSlNXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVt
cGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZp
c2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgdmlzaXRvci5h
ZGRPcGFxdWVSb290KCZ3cmFwcGVkKCkpOwogICAgIHdyYXBwZWQoKS5hZGRNZW1iZXJzVG9PcGFx
dWVSb290cyh2aXNpdG9yKTsKIH0KIAordGVtcGxhdGUgdm9pZCBKU1dlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oQWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVt
cGxhdGUgdm9pZCBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRy
ZW4oU2xvdFZpc2l0b3ImKTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8g
RU5BQkxFKFdFQkdMKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrZXJH
bG9iYWxTY29wZUJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTV29ya2VyR2xvYmFsU2NvcGVCYXNlLmNwcAkocmV2aXNpb24gMjcyMTkyKQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrZXJHbG9iYWxTY29wZUJhc2UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC05Miw3ICs5Miw4IEBAIHZvaWQgSlNXb3JrZXJHbG9iYWxTY29wZUJhc2U6
OmZpbmlzaENyZWEKICAgICBBU1NFUlQoaW5oZXJpdHModm0sIGluZm8oKSkpOwogfQogCi12b2lk
IEpTV29ya2VyR2xvYmFsU2NvcGVCYXNlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xv
dFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1dv
cmtlckdsb2JhbFNjb3BlQmFzZTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNp
dG9yJiB2aXNpdG9yKQogewogICAgIEpTV29ya2VyR2xvYmFsU2NvcGVCYXNlKiB0aGlzT2JqZWN0
ID0ganNDYXN0PEpTV29ya2VyR2xvYmFsU2NvcGVCYXNlKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dD
X09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtMTAwLDYgKzEwMSw4IEBA
IHZvaWQgSlNXb3JrZXJHbG9iYWxTY29wZUJhc2U6OnZpc2l0Q2hpbGQKICAgICB2aXNpdG9yLmFw
cGVuZCh0aGlzT2JqZWN0LT5tX3Byb3h5KTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpT
V29ya2VyR2xvYmFsU2NvcGVCYXNlKTsKKwogdm9pZCBKU1dvcmtlckdsb2JhbFNjb3BlQmFzZTo6
ZGVzdHJveShKU0NlbGwqIGNlbGwpCiB7CiAgICAgc3RhdGljX2Nhc3Q8SlNXb3JrZXJHbG9iYWxT
Y29wZUJhc2UqPihjZWxsKS0+SlNXb3JrZXJHbG9iYWxTY29wZUJhc2U6On5KU1dvcmtlckdsb2Jh
bFNjb3BlQmFzZSgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrZXJH
bG9iYWxTY29wZUJhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU1dvcmtlckdsb2JhbFNjb3BlQmFzZS5oCShyZXZpc2lvbiAyNzIxOTIpCisrKyBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckdsb2JhbFNjb3BlQmFzZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC03OSw3ICs3OSw3IEBAIHByb3RlY3RlZDoKICAgICBKU1dvcmtlckdsb2JhbFNjb3Bl
QmFzZShKU0M6OlZNJiwgSlNDOjpTdHJ1Y3R1cmUqLCBSZWZQdHI8V29ya2VyR2xvYmFsU2NvcGU+
JiYpOwogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYsIEpTQzo6SlNQcm94eSopOwog
Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZp
c2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiBwcml2YXRlOgogICAgIFJl
ZlB0cjxXb3JrZXJHbG9iYWxTY29wZT4gbV93cmFwcGVkOwpJbmRleDogU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNXb3JrZXJHbG9iYWxTY29wZUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrZXJHbG9iYWxTY29wZUN1c3RvbS5jcHAJ
KHJldmlzaW9uIDI3MjE5MikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2Vy
R2xvYmFsU2NvcGVDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3ICszMyw5IEBACiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCi12b2lkIEpTV29ya2Vy
R2xvYmFsU2NvcGU6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9y
KQorLy92b2lkIEpTV29ya2VyR2xvYmFsU2NvcGU6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNX
b3JrZXJHbG9iYWxTY29wZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRv
cikKIHsKICAgICBpZiAoYXV0byogbG9jYXRpb24gPSB3cmFwcGVkKCkub3B0aW9uYWxMb2NhdGlv
bigpKQogICAgICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QobG9jYXRpb24pOwpAQCAtNDgsNiAr
NTAsOSBAQCB2b2lkIEpTV29ya2VyR2xvYmFsU2NvcGU6OnZpc2l0QWRkaXRpb25hCiAgICAgd3Jh
cHBlZCgpLnZpc2l0SlNFdmVudExpc3RlbmVycyh2aXNpdG9yKTsKIH0KIAordGVtcGxhdGUgdm9p
ZCBKU1dvcmtlckdsb2JhbFNjb3BlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihBYnN0cmFjdFNs
b3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTV29ya2VyR2xvYmFsU2NvcGU6OnZpc2l0QWRk
aXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CisKIEpTVmFsdWUgSlNXb3JrZXJHbG9iYWxT
Y29wZTo6cXVldWVNaWNyb3Rhc2soSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3Qs
IENhbGxGcmFtZSYgY2FsbEZyYW1lKQogewogICAgIFZNJiB2bSA9IGxleGljYWxHbG9iYWxPYmpl
Y3Qudm0oKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyTmF2aWdh
dG9yQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U1dvcmtlck5hdmlnYXRvckN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjE5MikKKysrIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyTmF2aWdhdG9yQ3VzdG9tLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjgsOSArMjgsMTQgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIEpT
V29ya2VyTmF2aWdhdG9yOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9y
JiB2aXNpdG9yKQorLy92b2lkIEpTV29ya2VyTmF2aWdhdG9yOjp2aXNpdEFkZGl0aW9uYWxDaGls
ZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRv
cj4KK3ZvaWQgSlNXb3JrZXJOYXZpZ2F0b3I6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0
b3ImIHZpc2l0b3IpCiB7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHN0YXRpY19jYXN0PE5h
dmlnYXRvckJhc2UqPigmd3JhcHBlZCgpKSk7CiB9CiAKLX0KK3RlbXBsYXRlIHZvaWQgSlNXb3Jr
ZXJOYXZpZ2F0b3I6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6QWJzdHJhY3RTbG90Vmlz
aXRvciYpOwordGVtcGxhdGUgdm9pZCBKU1dvcmtlck5hdmlnYXRvcjo6dmlzaXRBZGRpdGlvbmFs
Q2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYpOworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtsZXRHbG9iYWxTY29wZUJhc2Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2xldEds
b2JhbFNjb3BlQmFzZS5jcHAJKHJldmlzaW9uIDI3MjE5MikKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTV29ya2xldEdsb2JhbFNjb3BlQmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTgyLDcgKzgyLDggQEAgdm9pZCBKU1dvcmtsZXRHbG9iYWxTY29wZUJhc2U6OmZpbmlzaENyZQog
ICAgIEFTU0VSVChpbmhlcml0cyh2bSwgaW5mbygpKSk7CiB9CiAKLXZvaWQgSlNXb3JrbGV0R2xv
YmFsU2NvcGVCYXNlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZp
c2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1dvcmtsZXRHbG9iYWxT
Y29wZUJhc2U6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRv
cikKIHsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTV29ya2xldEdsb2JhbFNjb3Bl
QmFzZSo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwg
aW5mbygpKTsKQEAgLTkwLDYgKzkxLDggQEAgdm9pZCBKU1dvcmtsZXRHbG9iYWxTY29wZUJhc2U6
OnZpc2l0Q2hpbAogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fcHJveHkpOwogfQog
CitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNXb3JrbGV0R2xvYmFsU2NvcGVCYXNlKTsKKwogdm9p
ZCBKU1dvcmtsZXRHbG9iYWxTY29wZUJhc2U6OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQogewogICAg
IHN0YXRpY19jYXN0PEpTV29ya2xldEdsb2JhbFNjb3BlQmFzZSo+KGNlbGwpLT5KU1dvcmtsZXRH
bG9iYWxTY29wZUJhc2U6On5KU1dvcmtsZXRHbG9iYWxTY29wZUJhc2UoKTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2xldEdsb2JhbFNjb3BlQmFzZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2xldEdsb2JhbFNjb3BlQmFz
ZS5oCShyZXZpc2lvbiAyNzIxOTIpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dv
cmtsZXRHbG9iYWxTY29wZUJhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtNjcsNyArNjcsNyBAQCBw
cm90ZWN0ZWQ6CiAgICAgSlNXb3JrbGV0R2xvYmFsU2NvcGVCYXNlKEpTQzo6Vk0mLCBKU0M6OlN0
cnVjdHVyZSosIFJlZlB0cjxXb3JrbGV0R2xvYmFsU2NvcGU+JiYpOwogICAgIHZvaWQgZmluaXNo
Q3JlYXRpb24oSlNDOjpWTSYsIEpTQzo6SlNQcm94eSopOwogCi0gICAgc3RhdGljIHZvaWQgdmlz
aXRDaGlsZHJlbihKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJF
X1ZJU0lUX0NISUxEUkVOOwogCiBwcml2YXRlOgogICAgIFJlZlB0cjxXb3JrbGV0R2xvYmFsU2Nv
cGU+IG1fd3JhcHBlZDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTWE1MSHR0
cFJlcXVlc3RDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTWE1MSHR0cFJlcXVlc3RDdXN0b20uY3BwCShyZXZpc2lvbiAyNzIxOTIpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1hNTEh0dHBSZXF1ZXN0Q3VzdG9tLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDEsNyArNDEsOSBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogdXNpbmcgbmFt
ZXNwYWNlIEpTQzsKIAotdm9pZCBKU1hNTEh0dHBSZXF1ZXN0Ojp2aXNpdEFkZGl0aW9uYWxDaGls
ZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vdm9pZCBKU1hNTEh0dHBSZXF1ZXN0Ojp2aXNp
dEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVu
YW1lIFZpc2l0b3I+Cit2b2lkIEpTWE1MSHR0cFJlcXVlc3Q6OnZpc2l0QWRkaXRpb25hbENoaWxk
cmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgaWYgKGF1dG8qIHVwbG9hZCA9IHdyYXBwZWQo
KS5vcHRpb25hbFVwbG9hZCgpKQogICAgICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QodXBsb2Fk
KTsKQEAgLTUwLDYgKzUyLDkgQEAgdm9pZCBKU1hNTEh0dHBSZXF1ZXN0Ojp2aXNpdEFkZGl0aW9u
YWxDaAogICAgICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QocmVzcG9uc2VEb2N1bWVudCk7CiB9
CiAKK3RlbXBsYXRlIHZvaWQgSlNYTUxIdHRwUmVxdWVzdDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRy
ZW4oQWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU1hNTEh0dHBSZXF1ZXN0
Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYpOworCiBKU1ZhbHVlIEpTWE1M
SHR0cFJlcXVlc3Q6OnJlc3BvbnNlKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0
KSBjb25zdAogewogICAgIGF1dG8gY2FjaGVSZXN1bHQgPSBbJl0gKEpTVmFsdWUgdmFsdWUpIC0+
IEpTVmFsdWUgewpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNYUGF0aFJlc3Vs
dEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNY
UGF0aFJlc3VsdEN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjE5MikKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTWFBhdGhSZXN1bHRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
MSw3ICszMSw5IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBKU1hQYXRoUmVzdWx0
Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy92
b2lkIEpTWFBhdGhSZXN1bHQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0
b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1hQYXRoUmVz
dWx0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGF1
dG8mIHZhbHVlID0gd3JhcHBlZCgpLnZhbHVlKCk7CiAgICAgaWYgKHZhbHVlLmlzTm9kZVNldCgp
KSB7CkBAIC00MSw0ICs0Myw3IEBAIHZvaWQgSlNYUGF0aFJlc3VsdDo6dmlzaXRBZGRpdGlvbmFs
Q2hpbGQKICAgICB9CiB9CiAKK3RlbXBsYXRlIHZvaWQgSlNYUGF0aFJlc3VsdDo6dmlzaXRBZGRp
dGlvbmFsQ2hpbGRyZW4oSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lk
IEpTWFBhdGhSZXN1bHQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3Im
KTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvV2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwCShy
ZXZpc2lvbiAyNzIxOTIpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlVHlw
ZWRBcnJheUNvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Niw3ICs1Niw3IEBAIGJv
b2wgV2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyOjppc0F0b20KICAgICByZXR1cm4gbV9hbGxv
d0F0b21pY3NXYWl0OwogfQogCi1ib29sIFdlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlcjo6SlNB
cnJheUJ1ZmZlck93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxK
U0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNv
bnN0IGNoYXIqKiByZWFzb24pCitib29sIFdlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlcjo6SlNB
cnJheUJ1ZmZlck93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxK
U0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYgdmlz
aXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikKIHsKICAgICBpZiAoVU5MSUtFTFkocmVhc29uKSkK
ICAgICAgICAgKnJlYXNvbiA9ICJBcnJheUJ1ZmZlciBpcyBvcGFxdWUgcm9vdCI7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlVHlwZWRBcnJh
eUNvbnRyb2xsZXIuaAkocmV2aXNpb24gMjcyMTkyKQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvV2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4
LDcgKzQ4LDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBjbGFzcyBKU0FycmF5QnVmZmVyT3du
ZXIgOiBwdWJsaWMgSlNDOjpXZWFrSGFuZGxlT3duZXIgewogICAgIHB1YmxpYzoKLSAgICAgICAg
Ym9vbCBpc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+
LCB2b2lkKiBjb250ZXh0LCBKU0M6OlNsb3RWaXNpdG9yJiwgY29uc3QgY2hhcioqKSBvdmVycmlk
ZTsKKyAgICAgICAgYm9vbCBpc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxK
U0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0LCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImLCBj
b25zdCBjaGFyKiopIG92ZXJyaWRlOwogICAgICAgICB2b2lkIGZpbmFsaXplKEpTQzo6SGFuZGxl
PEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQpIG92ZXJyaWRlOwogICAgIH07CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpT
LnBtCShyZXZpc2lvbiAyNzIxOTIpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L0NvZGVHZW5lcmF0b3JKUy5wbQkod29ya2luZyBjb3B5KQpAQCAtMzA3OCw4ICszMDc4LDEwIEBA
IHN1YiBHZW5lcmF0ZUhlYWRlcgogCiAgICAgIyB2aXNpdCBmdW5jdGlvbgogICAgIGlmICgkbmVl
ZHNWaXNpdENoaWxkcmVuKSB7Ci0gICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgc3Rh
dGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJik7XG4iKTsK
LSAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICB2b2lkIHZpc2l0QWRkaXRpb25hbENo
aWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImKTtcbiIpIGlmICRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0
cmlidXRlcy0+e0pTQ3VzdG9tTWFya0Z1bmN0aW9ufTsKKyAgICAgICAgcHVzaChAaGVhZGVyQ29u
dGVudCwgIiAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOO1xuIik7CisjICAgICAgICBwdXNoKEBo
ZWFkZXJDb250ZW50LCAiICAgIHZvaWQgdmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90
VmlzaXRvciYpO1xuIikgaWYgJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57SlNDdXN0
b21NYXJrRnVuY3Rpb259OyAjIG1sYW0KKyMgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIg
ICAgdm9pZCB2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3Im
KTtcbiIpIGlmICRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+e0pTQ3VzdG9tTWFya0Z1
bmN0aW9ufTsKKyAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBWaXNpdG9yPiB2b2lkIHZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImKTtcbiIp
IGlmICRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+e0pTQ3VzdG9tTWFya0Z1bmN0aW9u
fTsKICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIlxuIik7CiAKICAgICAgICAgaWYgKCRp
bnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+e0pTQ3VzdG9tTWFya0Z1bmN0aW9ufSkgewpA
QCAtMzA5NCw3ICszMDk2LDkgQEAgc3ViIEdlbmVyYXRlSGVhZGVyCiAgICAgICAgICAgICAjIHRo
YXQgdGhlIEdDIGNhbGxzIHRvIGFzayBhbiBvYmplY3QgaXMgaXQgd291bGQgbGlrZSB0byBtYXJr
IGFueXRoaW5nIGVsc2UgYWZ0ZXIgdGhlCiAgICAgICAgICAgICAjIHByb2dyYW0gcmVzdW1lZCBz
aW5jZSB0aGUgbGFzdCBjYWxsIHRvIHZpc2l0Q2hpbGRyZW4gb3IgdmlzaXRPdXRwdXRDb25zdHJh
aW50cy4gU2luY2UKICAgICAgICAgICAgICMgdGhpcyBqdXN0IGNhbGxzIHZpc2l0QWRkaXRpb25h
bENoaWxkcmVuLCB5b3UgdXN1YWxseSBkb24ndCBoYXZlIHRvIHdvcnJ5IGFib3V0IHRoaXMuCi0g
ICAgICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHN0YXRpYyB2b2lkIHZpc2l0T3V0
cHV0Q29uc3RyYWludHMoSlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpO1xuIik7CisgICAgICAg
ICAgICAjIG1sYW0gcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICBzdGF0aWMgdm9pZCB2aXNpdE91
dHB1dENvbnN0cmFpbnRzKEpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKTtcbiIpOworICAgICAg
ICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICBzdGF0aWMgdm9pZCB2aXNpdE91dHB1dENv
bnN0cmFpbnRzKEpTQ2VsbCosIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpO1xuIik7CisgICAg
ICAgICAgICAjIG1sYW0gcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICBERUNMQVJFX1ZJU0lUX09V
VFBVVF9DT05TVFJBSU5UUztcbiIpOwogICAgICAgICB9CiAgICAgfQogCkBAIC0zMjE1LDcgKzMy
MTksNyBAQCBzdWIgR2VuZXJhdGVIZWFkZXIKICAgICAgICAgfQogICAgICAgICAkaGVhZGVySW5j
bHVkZXN7Ijx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4ifSA9IDE7CiAgICAgICAgIHB1c2goQGhlYWRl
ckNvbnRlbnQsICJwdWJsaWM6XG4iKTsKLSAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAg
ICBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93
bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6U2xvdFZpc2l0b3ImLCBjb25zdCBjaGFyKiopICR7b3Zl
cnJpZGVEZWNsfTtcbiIpOworICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIGJvb2wg
aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9p
ZCogY29udGV4dCwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiwgY29uc3QgY2hhcioqKSAke292
ZXJyaWRlRGVjbH07XG4iKTsKICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICB2b2lk
IGZpbmFsaXplKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQpICR7b3Zl
cnJpZGVEZWNsfTtcbiIpOwogICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAifTtcbiIpOwog
ICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiXG4iKTsKQEAgLTQ5MjgsNiArNDkzMiw3IEBA
IHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIkRPTUlz
b1N1YnNwYWNlcy5oIik7CiAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIldlYkNvcmVKU0NsaWVudERh
dGEuaCIpOwogICAgIEFkZFRvSW1wbEluY2x1ZGVzKCI8SmF2YVNjcmlwdENvcmUvSlNEZXN0cnVj
dGlibGVPYmplY3RIZWFwQ2VsbFR5cGUuaD4iKTsKKyAgICBBZGRUb0ltcGxJbmNsdWRlcygiPEph
dmFTY3JpcHRDb3JlL1Nsb3RWaXNpdG9yTWFjcm9zLmg+Iik7CiAgICAgQWRkVG9JbXBsSW5jbHVk
ZXMoIjxKYXZhU2NyaXB0Q29yZS9TdWJzcGFjZUlubGluZXMuaD4iKTsKICAgICBwdXNoKEBpbXBs
Q29udGVudCwgIkpTQzo6SXNvU3Vic3BhY2UqICR7Y2xhc3NOYW1lfTo6c3Vic3BhY2VGb3JJbXBs
KEpTQzo6Vk0mIHZtKVxuIik7CiAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ7XG4iKTsKQEAgLTQ5
NTUsNyArNDk2MCw4IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgcHVzaChAaW1w
bENvbnRlbnQsICJ9XG5cbiIpOwogCiAgICAgaWYgKCRuZWVkc1Zpc2l0Q2hpbGRyZW4pIHsKLSAg
ICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ2b2lkICR7Y2xhc3NOYW1lfTo6dmlzaXRDaGlsZHJl
bihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKVxuIik7CisgICAgICAgIHB1c2go
QGltcGxDb250ZW50LCAidGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj5cbiIpOworICAgICAgICBw
dXNoKEBpbXBsQ29udGVudCwgInZvaWQgJHtjbGFzc05hbWV9Ojp2aXNpdENoaWxkcmVuSW1wbChK
U0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpXG4iKTsKICAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsICJ7XG4iKTsKICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgYXV0byogdGhp
c09iamVjdCA9IGpzQ2FzdDwke2NsYXNzTmFtZX0qPihjZWxsKTtcbiIpOwogICAgICAgICBwdXNo
KEBpbXBsQ29udGVudCwgIiAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3Qs
IGluZm8oKSk7XG4iKTsKQEAgLTQ5ODAsOCArNDk4NiwxMCBAQCBzdWIgR2VuZXJhdGVJbXBsZW1l
bnRhdGlvbgogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIHB1c2goQGltcGxDb250
ZW50LCAifVxuXG4iKTsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJERUZJTkVfVklTSVRf
Q0hJTERSRU4oJHtjbGFzc05hbWV9KTtcblxuIik7CisKICAgICAgICAgaWYgKCRpbnRlcmZhY2Ut
PmV4dGVuZGVkQXR0cmlidXRlcy0+e0pTQ3VzdG9tTWFya0Z1bmN0aW9ufSkgewotICAgICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICJ2b2lkICR7Y2xhc3NOYW1lfTo6dmlzaXRPdXRwdXRDb25z
dHJhaW50cyhKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKVxuIik7CisgICAgICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgInZvaWQgJHtjbGFzc05hbWV9Ojp2aXNpdE91dHB1dENv
bnN0cmFpbnRzKEpTQ2VsbCogY2VsbCwgQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcilcbiIp
OwogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ7XG4iKTsKICAgICAgICAgICAgIHB1
c2goQGltcGxDb250ZW50LCAiICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8JHtjbGFzc05h
bWV9Kj4oY2VsbCk7XG4iKTsKICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIEFT
U0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTtcbiIpOwpAQCAtNTAy
Miw3ICs1MDMwLDcgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICB9CiAKICAgICBp
ZiAoU2hvdWxkR2VuZXJhdGVXcmFwcGVyT3duZXJDb2RlKCRoYXNQYXJlbnQsICRpbnRlcmZhY2Up
ICYmICFHZXRDdXN0b21Jc1JlYWNoYWJsZSgkaW50ZXJmYWNlKSkgewotICAgICAgICBwdXNoKEBp
bXBsQ29udGVudCwgImJvb2wgSlMke2ludGVyZmFjZU5hbWV9T3duZXI6OmlzUmVhY2hhYmxlRnJv
bU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgU2xv
dFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pXG4iKTsKKyAgICAgICAgcHVz
aChAaW1wbENvbnRlbnQsICJib29sIEpTJHtpbnRlcmZhY2VOYW1lfU93bmVyOjppc1JlYWNoYWJs
ZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCos
IEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pXG4iKTsK
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ7XG4iKTsKICAgICAgICAgIyBBbGwgQWN0aXZl
RE9NT2JqZWN0cyBpbXBsZW1lbnQgaGFzUGVuZGluZ0FjdGl2aXR5KCksIGJ1dCBub3QgYWxsIG9m
IHRoZW0KICAgICAgICAgIyBpbmNyZW1lbnQgdGhlaXIgQysrIHJlZmVyZW5jZSBjb3VudHMgd2hl
biBoYXNQZW5kaW5nQWN0aXZpdHkoKSBiZWNvbWVzCkBAIC02NDIxLDcgKzY0MjksOCBAQCBzdWIg
R2VuZXJhdGVDYWxsYmFja0hlYWRlckNvbnRlbnQKICAgICAgICAgcHVzaChAJGNvbnRlbnRSZWYs
ICIgICAgYm9vbCBoYXNDYWxsYmFjaygpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fZGF0YSAmJiBt
X2RhdGEtPmNhbGxiYWNrKCk7IH1cblxuIik7CiAgICAgfQogCi0gICAgcHVzaChAJGNvbnRlbnRS
ZWYsICIgICAgdm9pZCB2aXNpdEpTRnVuY3Rpb24oSlNDOjpTbG90VmlzaXRvciYpIG92ZXJyaWRl
O1xuXG4iKSBpZiAkaW50ZXJmYWNlT3JDYWxsYmFjay0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57SXNX
ZWFrQ2FsbGJhY2t9OworIyAgICBwdXNoKEAkY29udGVudFJlZiwgIiAgICB2b2lkIHZpc2l0SlNG
dW5jdGlvbihKU0M6OlNsb3RWaXNpdG9yJikgb3ZlcnJpZGU7XG5cbiIpIGlmICRpbnRlcmZhY2VP
ckNhbGxiYWNrLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntJc1dlYWtDYWxsYmFja307CisgICAgcHVz
aChAJGNvbnRlbnRSZWYsICIgICAgdm9pZCB2aXNpdEpTRnVuY3Rpb24oSlNDOjpBYnN0cmFjdFNs
b3RWaXNpdG9yJikgb3ZlcnJpZGU7XG5cbiIpIGlmICRpbnRlcmZhY2VPckNhbGxiYWNrLT5leHRl
bmRlZEF0dHJpYnV0ZXMtPntJc1dlYWtDYWxsYmFja307CiAKICAgICBwdXNoKEAkY29udGVudFJl
ZiwgIiAgICAke2NhbGxiYWNrRGF0YVR5cGV9KiBtX2RhdGE7XG4iKTsKICAgICBwdXNoKEAkY29u
dGVudFJlZiwgIn07XG5cbiIpOwpAQCAtNjYxMiw3ICs2NjIxLDggQEAgc3ViIEdlbmVyYXRlQ2Fs
bGJhY2tJbXBsZW1lbnRhdGlvbkNvbnRlbgogICAgIH0KIAogICAgIGlmICgkaW50ZXJmYWNlT3JD
YWxsYmFjay0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57SXNXZWFrQ2FsbGJhY2t9KSB7Ci0gICAgICAg
IHB1c2goQCRjb250ZW50UmVmLCAidm9pZCAke2NsYXNzTmFtZX06OnZpc2l0SlNGdW5jdGlvbihK
U0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKVxuIik7CisjICAgICAgICBwdXNoKEAkY29udGVudFJl
ZiwgInZvaWQgJHtjbGFzc05hbWV9Ojp2aXNpdEpTRnVuY3Rpb24oSlNDOjpTbG90VmlzaXRvciYg
dmlzaXRvcilcbiIpOworICAgICAgICBwdXNoKEAkY29udGVudFJlZiwgInZvaWQgJHtjbGFzc05h
bWV9Ojp2aXNpdEpTRnVuY3Rpb24oSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKVxu
Iik7CiAgICAgICAgIHB1c2goQCRjb250ZW50UmVmLCAie1xuIik7CiAgICAgICAgIHB1c2goQCRj
b250ZW50UmVmLCAiICAgIG1fZGF0YS0+dmlzaXRKU0Z1bmN0aW9uKHZpc2l0b3IpO1xuIik7CiAg
ICAgICAgIHB1c2goQCRjb250ZW50UmVmLCAifVxuXG4iKTsKQEAgLTY3MjMsNiArNjczMyw3IEBA
IHN1YiBHZW5lcmF0ZUl0ZXJhYmxlRGVmaW5pdGlvbgogICAgIG15ICR2aXNpYmxlSW50ZXJmYWNl
TmFtZSA9ICRjb2RlR2VuZXJhdG9yLT5HZXRWaXNpYmxlSW50ZXJmYWNlTmFtZSgkaW50ZXJmYWNl
KTsKIAogICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJKU0RPTUl0ZXJhdG9yLmgiKTsKKyAgICBBZGRU
b0ltcGxJbmNsdWRlcygiPEphdmFTY3JpcHRDb3JlL1Nsb3RWaXNpdG9yTWFjcm9zLmg+Iik7CiAK
ICAgICByZXR1cm4gdW5sZXNzIElzS2V5VmFsdWVJdGVyYWJsZUludGVyZmFjZSgkaW50ZXJmYWNl
KTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0FjdGl2ZURPTUNhbGxiYWNrLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0FjdGl2ZURPTUNhbGxiYWNrLmgJKHJldmlzaW9u
IDI3MjE5MikKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9BY3RpdmVET01DYWxsYmFjay5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiQ29udGV4dERlc3RydWN0aW9u
T2JzZXJ2ZXIuaCIKIAogbmFtZXNwYWNlIEpTQyB7CitjbGFzcyBBYnN0cmFjdFNsb3RWaXNpdG9y
OwogY2xhc3MgU2xvdFZpc2l0b3I7CiB9CiAKQEAgLTU1LDcgKzU2LDggQEAgcHVibGljOgogICAg
IFdFQkNPUkVfRVhQT1JUIGJvb2wgYWN0aXZlRE9NT2JqZWN0c0FyZVN1c3BlbmRlZCgpIGNvbnN0
OwogICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgYWN0aXZlRE9NT2JqZWN0QXJlU3RvcHBlZCgpIGNv
bnN0OwogICAgIAotICAgIHZpcnR1YWwgdm9pZCB2aXNpdEpTRnVuY3Rpb24oSlNDOjpTbG90Vmlz
aXRvciYpIHsgfQorLy8gICAgdmlydHVhbCB2b2lkIHZpc2l0SlNGdW5jdGlvbihKU0M6OlNsb3RW
aXNpdG9yJikgeyB9CisgICAgdmlydHVhbCB2b2lkIHZpc2l0SlNGdW5jdGlvbihKU0M6OkFic3Ry
YWN0U2xvdFZpc2l0b3ImKSB7IH0KIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2RvbS9FdmVudExpc3RlbmVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvZG9tL0V2ZW50TGlzdGVuZXIuaAkocmV2aXNpb24gMjcyMTkyKQorKysgU291cmNl
L1dlYkNvcmUvZG9tL0V2ZW50TGlzdGVuZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjQsOCArMjQs
OSBAQAogI2luY2x1ZGUgPHd0Zi9XZWFrUHRyLmg+CiAKIG5hbWVzcGFjZSBKU0MgeworY2xhc3Mg
QWJzdHJhY3RTbG90VmlzaXRvcjsKIGNsYXNzIEpTT2JqZWN0OwotY2xhc3MgU2xvdFZpc2l0b3I7
CisvL2NsYXNzIFNsb3RWaXNpdG9yOwogfQogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC01Miw3
ICs1Myw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlRXZlbnQoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCYsIEV2ZW50JikgPSAwOwogICAgIHZpcnR1YWwgYm9vbCB3YXNDcmVhdGVk
RnJvbU1hcmt1cCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAKLSAgICB2aXJ0dWFsIHZvaWQg
dmlzaXRKU0Z1bmN0aW9uKEpTQzo6U2xvdFZpc2l0b3ImKSB7IH0KKy8vICAgIHZpcnR1YWwgdm9p
ZCB2aXNpdEpTRnVuY3Rpb24oSlNDOjpTbG90VmlzaXRvciYpIHsgfQorICAgIHZpcnR1YWwgdm9p
ZCB2aXNpdEpTRnVuY3Rpb24oSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJikgeyB9CiAKICAgICB2
aXJ0dWFsIGJvb2wgaXNBdHRyaWJ1dGUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIFR5
cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQpJbmRleDogU291cmNlL1dlYkNvcmUv
ZG9tL0V2ZW50VGFyZ2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRXZl
bnRUYXJnZXQuY3BwCShyZXZpc2lvbiAyNzIxOTIpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRXZl
bnRUYXJnZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zODQsNyArMzg0LDkgQEAgdm9pZCBFdmVu
dFRhcmdldDo6cmVtb3ZlQWxsRXZlbnRMaXN0ZW5lcgogICAgIHRocmVhZERhdGEuc2V0SXNJblJl
bW92ZUFsbEV2ZW50TGlzdGVuZXJzKGZhbHNlKTsKIH0KIAotdm9pZCBFdmVudFRhcmdldDo6dmlz
aXRKU0V2ZW50TGlzdGVuZXJzKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3ZvaWQgRXZl
bnRUYXJnZXQ6OnZpc2l0SlNFdmVudExpc3RlbmVycyhKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9y
KQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgRXZlbnRUYXJnZXQ6OnZpc2l0SlNF
dmVudExpc3RlbmVycyhWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEV2ZW50VGFyZ2V0RGF0YSog
ZGF0YSA9IGV2ZW50VGFyZ2V0RGF0YUNvbmN1cnJlbnRseSgpOwogICAgIGlmICghZGF0YSkKQEAg
LTM5Niw2ICszOTgsOSBAQCB2b2lkIEV2ZW50VGFyZ2V0Ojp2aXNpdEpTRXZlbnRMaXN0ZW5lcnMo
CiAgICAgICAgIGxpc3RlbmVyLT52aXNpdEpTRnVuY3Rpb24odmlzaXRvcik7CiB9CiAKK3RlbXBs
YXRlIHZvaWQgRXZlbnRUYXJnZXQ6OnZpc2l0SlNFdmVudExpc3RlbmVycyhKU0M6OkFic3RyYWN0
U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgRXZlbnRUYXJnZXQ6OnZpc2l0SlNFdmVudExp
c3RlbmVycyhKU0M6OlNsb3RWaXNpdG9yJik7CisKIHZvaWQgRXZlbnRUYXJnZXQ6OmludmFsaWRh
dGVFdmVudExpc3RlbmVyUmVnaW9ucygpCiB7CiAgICAgaWYgKGlzPEVsZW1lbnQ+KCp0aGlzKSkg
ewpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50VGFyZ2V0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvZG9tL0V2ZW50VGFyZ2V0LmgJKHJldmlzaW9uIDI3MjE5MikKKysrIFNv
dXJjZS9XZWJDb3JlL2RvbS9FdmVudFRhcmdldC5oCSh3b3JraW5nIGNvcHkpCkBAIC05Nyw3ICs5
Nyw4IEBAIHB1YmxpYzoKICAgICB2b2lkIGZpcmVFdmVudExpc3RlbmVycyhFdmVudCYsIEV2ZW50
SW52b2tlUGhhc2UpOwogICAgIGJvb2wgaXNGaXJpbmdFdmVudExpc3RlbmVycygpIGNvbnN0Owog
Ci0gICAgdm9pZCB2aXNpdEpTRXZlbnRMaXN0ZW5lcnMoSlNDOjpTbG90VmlzaXRvciYpOworLy8g
ICAgdm9pZCB2aXNpdEpTRXZlbnRMaXN0ZW5lcnMoSlNDOjpTbG90VmlzaXRvciYpOworICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgdmlzaXRKU0V2ZW50TGlzdGVuZXJzKFZpc2l0
b3ImKTsKICAgICB2b2lkIGludmFsaWRhdGVKU0V2ZW50TGlzdGVuZXJzKEpTQzo6SlNPYmplY3Qq
KTsKIAogICAgIGNvbnN0IEV2ZW50VGFyZ2V0RGF0YSogZXZlbnRUYXJnZXREYXRhKCkgY29uc3Q7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vTXV0YXRpb25SZWNvcmQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9NdXRhdGlvblJlY29yZC5jcHAJKHJldmlzaW9uIDI3MjE5
MikKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9NdXRhdGlvblJlY29yZC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQxLDcgKzQxLDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBuYW1lc3BhY2Ugewog
Ci1zdGF0aWMgdm9pZCB2aXNpdE5vZGVMaXN0KEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IsIE5v
ZGVMaXN0JiBub2RlTGlzdCkKKy8vc3RhdGljIHZvaWQgdmlzaXROb2RlTGlzdChKU0M6OlNsb3RW
aXNpdG9yJiB2aXNpdG9yLCBOb2RlTGlzdCYgbm9kZUxpc3QpCitzdGF0aWMgdm9pZCB2aXNpdE5v
ZGVMaXN0KEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvciwgTm9kZUxpc3QmIG5vZGVM
aXN0KQogewogICAgIEFTU0VSVCghbm9kZUxpc3QuaXNMaXZlTm9kZUxpc3QoKSk7CiAgICAgdW5z
aWduZWQgbGVuZ3RoID0gbm9kZUxpc3QubGVuZ3RoKCk7CkBAIC02OCw3ICs2OSw4IEBAIHByaXZh
dGU6CiAgICAgTm9kZSogcHJldmlvdXNTaWJsaW5nKCkgb3ZlcnJpZGUgeyByZXR1cm4gbV9wcmV2
aW91c1NpYmxpbmcuZ2V0KCk7IH0KICAgICBOb2RlKiBuZXh0U2libGluZygpIG92ZXJyaWRlIHsg
cmV0dXJuIG1fbmV4dFNpYmxpbmcuZ2V0KCk7IH0KIAotICAgIHZvaWQgdmlzaXROb2Rlc0NvbmN1
cnJlbnRseShKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKSBjb25zdCBmaW5hbAorLy8gICAgdm9p
ZCB2aXNpdE5vZGVzQ29uY3VycmVudGx5KEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0
IGZpbmFsCisgICAgdm9pZCB2aXNpdE5vZGVzQ29uY3VycmVudGx5KEpTQzo6QWJzdHJhY3RTbG90
VmlzaXRvciYgdmlzaXRvcikgY29uc3QgZmluYWwKICAgICB7CiAgICAgICAgIHZpc2l0b3IuYWRk
T3BhcXVlUm9vdChyb290KG1fdGFyZ2V0LnB0cigpKSk7CiAgICAgICAgIGlmIChtX2FkZGVkTm9k
ZXMpCkBAIC0xMDUsNyArMTA3LDggQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIG5vZGVMaXN0
LmdldCgpOwogICAgIH0KIAotICAgIHZvaWQgdmlzaXROb2Rlc0NvbmN1cnJlbnRseShKU0M6OlNs
b3RWaXNpdG9yJiB2aXNpdG9yKSBjb25zdCBmaW5hbAorLy8gICAgdm9pZCB2aXNpdE5vZGVzQ29u
Y3VycmVudGx5KEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0IGZpbmFsCisgICAgdm9p
ZCB2aXNpdE5vZGVzQ29uY3VycmVudGx5KEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRv
cikgY29uc3QgZmluYWwKICAgICB7CiAgICAgICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChyb290
KG1fdGFyZ2V0LnB0cigpKSk7CiAgICAgfQpAQCAtMTY0LDcgKzE2Nyw4IEBAIHByaXZhdGU6CiAK
ICAgICBTdHJpbmcgb2xkVmFsdWUoKSBvdmVycmlkZSB7IHJldHVybiBTdHJpbmcoKTsgfQogCi0g
ICAgdm9pZCB2aXNpdE5vZGVzQ29uY3VycmVudGx5KEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3Ip
IGNvbnN0IGZpbmFsCisvLyAgICB2b2lkIHZpc2l0Tm9kZXNDb25jdXJyZW50bHkoSlNDOjpTbG90
VmlzaXRvciYgdmlzaXRvcikgY29uc3QgZmluYWwKKyAgICB2b2lkIHZpc2l0Tm9kZXNDb25jdXJy
ZW50bHkoSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBjb25zdCBmaW5hbAogICAg
IHsKICAgICAgICAgbV9yZWNvcmQtPnZpc2l0Tm9kZXNDb25jdXJyZW50bHkodmlzaXRvcik7CiAg
ICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL011dGF0aW9uUmVjb3JkLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL011dGF0aW9uUmVjb3JkLmgJKHJldmlzaW9uIDI3MjE5
MikKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9NdXRhdGlvblJlY29yZC5oCSh3b3JraW5nIGNvcHkp
CkBAIC03Miw3ICs3Miw4IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgU3RyaW5nIG9sZFZhbHVl
KCkgeyByZXR1cm4gU3RyaW5nKCk7IH0KIAotICAgIHZpcnR1YWwgdm9pZCB2aXNpdE5vZGVzQ29u
Y3VycmVudGx5KEpTQzo6U2xvdFZpc2l0b3ImKSBjb25zdCA9IDA7CisvLyAgICB2aXJ0dWFsIHZv
aWQgdmlzaXROb2Rlc0NvbmN1cnJlbnRseShKU0M6OlNsb3RWaXNpdG9yJikgY29uc3QgPSAwOwor
ICAgIHZpcnR1YWwgdm9pZCB2aXNpdE5vZGVzQ29uY3VycmVudGx5KEpTQzo6QWJzdHJhY3RTbG90
VmlzaXRvciYpIGNvbnN0ID0gMDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2RvbS9TdGF0aWNSYW5nZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvZG9tL1N0YXRpY1JhbmdlLmNwcAkocmV2aXNpb24gMjcyMTkyKQorKysgU291cmNl
L1dlYkNvcmUvZG9tL1N0YXRpY1JhbmdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzYsNyArNzYs
NyBAQCBFeGNlcHRpb25PcjxSZWY8U3RhdGljUmFuZ2U+PiBTdGF0aWNSYW5nCiAgICAgcmV0dXJu
IGNyZWF0ZSh7IHsgaW5pdC5zdGFydENvbnRhaW5lci5yZWxlYXNlTm9uTnVsbCgpLCBpbml0LnN0
YXJ0T2Zmc2V0IH0sIHsgaW5pdC5lbmRDb250YWluZXIucmVsZWFzZU5vbk51bGwoKSwgaW5pdC5l
bmRPZmZzZXQgfSB9KTsKIH0KIAotdm9pZCBTdGF0aWNSYW5nZTo6dmlzaXROb2Rlc0NvbmN1cnJl
bnRseShKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKSBjb25zdAordm9pZCBTdGF0aWNSYW5nZTo6
dmlzaXROb2Rlc0NvbmN1cnJlbnRseShKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3Ip
IGNvbnN0CiB7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHJvb3Qoc3RhcnQuY29udGFpbmVy
LmdldCgpKSk7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHJvb3QoZW5kLmNvbnRhaW5lci5n
ZXQoKSkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL1N0YXRpY1JhbmdlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL1N0YXRpY1JhbmdlLmgJKHJldmlzaW9uIDI3MjE5MikK
KysrIFNvdXJjZS9XZWJDb3JlL2RvbS9TdGF0aWNSYW5nZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01
OCw3ICs1OCw3IEBAIHB1YmxpYzoKICAgICB1bnNpZ25lZCBlbmRPZmZzZXQoKSBjb25zdCBmaW5h
bCB7IHJldHVybiBTaW1wbGVSYW5nZTo6ZW5kT2Zmc2V0KCk7IH0KICAgICBib29sIGNvbGxhcHNl
ZCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIFNpbXBsZVJhbmdlOjpjb2xsYXBzZWQoKTsgfQogCi0g
ICAgdm9pZCB2aXNpdE5vZGVzQ29uY3VycmVudGx5KEpTQzo6U2xvdFZpc2l0b3ImKSBjb25zdDsK
KyAgICB2b2lkIHZpc2l0Tm9kZXNDb25jdXJyZW50bHkoSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9y
JikgY29uc3Q7CiAKIHByaXZhdGU6CiAgICAgU3RhdGljUmFuZ2UoU2ltcGxlUmFuZ2UmJik7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTDJSZW5kZXJpbmdDb250ZXh0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTDJSZW5kZXJp
bmdDb250ZXh0LmNwcAkocmV2aXNpb24gMjcyMTkyKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9j
YW52YXMvV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwNzgs
MTggKzMwNzgsMjAgQEAgYm9vbCBXZWJHTDJSZW5kZXJpbmdDb250ZXh0OjpjaGVja0FuZFRyYQog
ICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OmFkZE1l
bWJlcnNUb09wYXF1ZVJvb3RzKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3ZvaWQgV2Vi
R0wyUmVuZGVyaW5nQ29udGV4dDo6YWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMoSlNDOjpTbG90Vmlz
aXRvciYgdmlzaXRvcikKK3ZvaWQgV2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6YWRkTWVtYmVyc1Rv
T3BhcXVlUm9vdHMoSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFdl
YkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKHZpc2l0b3Ip
OwogCiAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhvYmplY3RHcmFwaExvY2soKSk7CiAgICAg
dmlzaXRvci5hZGRPcGFxdWVSb290KG1fcmVhZEZyYW1lYnVmZmVyQmluZGluZy5nZXQoKSk7CiAg
ICAgaWYgKG1fcmVhZEZyYW1lYnVmZmVyQmluZGluZykKLSAgICAgICAgbV9yZWFkRnJhbWVidWZm
ZXJCaW5kaW5nLT5hZGRNZW1iZXJzVG9PcGFxdWVSb290cyhsb2NrZXIsIHZpc2l0b3IpOworICAg
ICAgICBtX3JlYWRGcmFtZWJ1ZmZlckJpbmRpbmctPmFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzMzAw
KGxvY2tlciwgdmlzaXRvcik7CiAKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QobV9ib3VuZFRy
YW5zZm9ybUZlZWRiYWNrLmdldCgpKTsKICAgICBpZiAobV9ib3VuZFRyYW5zZm9ybUZlZWRiYWNr
KQotICAgICAgICBtX2JvdW5kVHJhbnNmb3JtRmVlZGJhY2stPmFkZE1lbWJlcnNUb09wYXF1ZVJv
b3RzKGxvY2tlciwgdmlzaXRvcik7CisvLyAgICAgICAgbV9ib3VuZFRyYW5zZm9ybUZlZWRiYWNr
LT5hZGRNZW1iZXJzVG9PcGFxdWVSb290cyhsb2NrZXIsIHZpc2l0b3IpOworICAgICAgICBtX2Jv
dW5kVHJhbnNmb3JtRmVlZGJhY2stPmFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzMTAwKGxvY2tlciwg
dmlzaXRvcik7CiAKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QobV9ib3VuZENvcHlSZWFkQnVm
ZmVyLmdldCgpKTsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QobV9ib3VuZENvcHlXcml0ZUJ1
ZmZlci5nZXQoKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTDJSZW5k
ZXJpbmdDb250ZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
V2ViR0wyUmVuZGVyaW5nQ29udGV4dC5oCShyZXZpc2lvbiAyNzIxOTIpCisrKyBTb3VyY2UvV2Vi
Q29yZS9odG1sL2NhbnZhcy9XZWJHTDJSZW5kZXJpbmdDb250ZXh0LmgJKHdvcmtpbmcgY29weSkK
QEAgLTI2MSw3ICsyNjEsOCBAQCBwdWJsaWM6CiAKICAgICBib29sIGNoZWNrQW5kVHJhbnNsYXRl
QXR0YWNobWVudHMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQ0dMZW51bSwgVmVjdG9yPEdD
R0xlbnVtPiYpOwogCi0gICAgdm9pZCBhZGRNZW1iZXJzVG9PcGFxdWVSb290cyhKU0M6OlNsb3RW
aXNpdG9yJikgb3ZlcnJpZGU7CisvLyAgICB2b2lkIGFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKEpT
Qzo6U2xvdFZpc2l0b3ImKSBvdmVycmlkZTsKKyAgICB2b2lkIGFkZE1lbWJlcnNUb09wYXF1ZVJv
b3RzKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpIG92ZXJyaWRlOwogCiBwcml2YXRlOgogICAg
IFdlYkdMMlJlbmRlcmluZ0NvbnRleHQoQ2FudmFzQmFzZSYsIEdyYXBoaWNzQ29udGV4dEdMQXR0
cmlidXRlcyk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEZyYW1lYnVm
ZmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEZy
YW1lYnVmZmVyLmNwcAkocmV2aXNpb24gMjcyMTkyKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9j
YW52YXMvV2ViR0xGcmFtZWJ1ZmZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYzLDcgKzYzLDgg
QEAgbmFtZXNwYWNlIHsKICAgICAgICAgdm9pZCBvbkRldGFjaGVkKGNvbnN0IEFic3RyYWN0TG9j
a2VyJiwgR3JhcGhpY3NDb250ZXh0R0wqKSBvdmVycmlkZTsKICAgICAgICAgdm9pZCBhdHRhY2go
R3JhcGhpY3NDb250ZXh0R0wqLCBHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIGF0dGFjaG1lbnQp
IG92ZXJyaWRlOwogICAgICAgICB2b2lkIHVuYXR0YWNoKEdyYXBoaWNzQ29udGV4dEdMKiwgR0NH
TGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBhdHRhY2htZW50KSBvdmVycmlkZTsKLSAgICAgICAgdm9p
ZCBhZGRNZW1iZXJzVG9PcGFxdWVSb290cyhjb25zdCBBYnN0cmFjdExvY2tlciYsIEpTQzo6U2xv
dFZpc2l0b3ImKSBvdmVycmlkZTsKKy8vICAgICAgICB2b2lkIGFkZE1lbWJlcnNUb09wYXF1ZVJv
b3RzKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgSlNDOjpTbG90VmlzaXRvciYpIG92ZXJyaWRlOwor
ICAgICAgICB2b2lkIGFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzNDAwKGNvbnN0IEFic3RyYWN0TG9j
a2VyJiwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJikgb3ZlcnJpZGU7CiAKICAgICAgICAgV2Vi
R0xSZW5kZXJidWZmZXJBdHRhY2htZW50KCkgeyB9OwogCkBAIC0xNDUsNyArMTQ2LDggQEAgbmFt
ZXNwYWNlIHsKICAgICAgICAgICAgIGNvbnRleHQtPmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKHRh
cmdldCwgYXR0YWNobWVudCwgR3JhcGhpY3NDb250ZXh0R0w6OlJFTkRFUkJVRkZFUiwgMCk7CiAg
ICAgfQogCi0gICAgdm9pZCBXZWJHTFJlbmRlcmJ1ZmZlckF0dGFjaG1lbnQ6OmFkZE1lbWJlcnNU
b09wYXF1ZVJvb3RzKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgSlNDOjpTbG90VmlzaXRvciYgdmlz
aXRvcikKKy8vICAgIHZvaWQgV2ViR0xSZW5kZXJidWZmZXJBdHRhY2htZW50OjphZGRNZW1iZXJz
VG9PcGFxdWVSb290cyhjb25zdCBBYnN0cmFjdExvY2tlciYsIEpTQzo6U2xvdFZpc2l0b3ImIHZp
c2l0b3IpCisgICAgdm9pZCBXZWJHTFJlbmRlcmJ1ZmZlckF0dGFjaG1lbnQ6OmFkZE1lbWJlcnNU
b09wYXF1ZVJvb3RzNDAwKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgSlNDOjpBYnN0cmFjdFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQogICAgIHsKICAgICAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KG1f
cmVuZGVyYnVmZmVyLmdldCgpKTsKICAgICB9CkBAIC0xNjksNyArMTcxLDggQEAgbmFtZXNwYWNl
IHsKICAgICAgICAgdm9pZCBvbkRldGFjaGVkKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgR3JhcGhp
Y3NDb250ZXh0R0wqKSBvdmVycmlkZTsKICAgICAgICAgdm9pZCBhdHRhY2goR3JhcGhpY3NDb250
ZXh0R0wqLCBHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIGF0dGFjaG1lbnQpIG92ZXJyaWRlOwog
ICAgICAgICB2b2lkIHVuYXR0YWNoKEdyYXBoaWNzQ29udGV4dEdMKiwgR0NHTGVudW0gdGFyZ2V0
LCBHQ0dMZW51bSBhdHRhY2htZW50KSBvdmVycmlkZTsKLSAgICAgICAgdm9pZCBhZGRNZW1iZXJz
VG9PcGFxdWVSb290cyhjb25zdCBBYnN0cmFjdExvY2tlciYsIEpTQzo6U2xvdFZpc2l0b3ImKSBv
dmVycmlkZTsKKy8vICAgICAgICB2b2lkIGFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKGNvbnN0IEFi
c3RyYWN0TG9ja2VyJiwgSlNDOjpTbG90VmlzaXRvciYpIG92ZXJyaWRlOworICAgICAgICB2b2lk
IGFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzNDAwKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgSlNDOjpB
YnN0cmFjdFNsb3RWaXNpdG9yJikgb3ZlcnJpZGU7CiAKICAgICAgICAgV2ViR0xUZXh0dXJlQXR0
YWNobWVudCgpIHsgfTsKIApAQCAtMjY3LDcgKzI3MCw4IEBAIG5hbWVzcGFjZSB7CiAjZW5kaWYK
ICAgICB9CiAKLSAgICB2b2lkIFdlYkdMVGV4dHVyZUF0dGFjaG1lbnQ6OmFkZE1lbWJlcnNUb09w
YXF1ZVJvb3RzKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgSlNDOjpTbG90VmlzaXRvciYgdmlzaXRv
cikKKy8vICAgIHZvaWQgV2ViR0xUZXh0dXJlQXR0YWNobWVudDo6YWRkTWVtYmVyc1RvT3BhcXVl
Um9vdHMoY29uc3QgQWJzdHJhY3RMb2NrZXImLCBKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQor
ICAgIHZvaWQgV2ViR0xUZXh0dXJlQXR0YWNobWVudDo6YWRkTWVtYmVyc1RvT3BhcXVlUm9vdHM0
MDAoY29uc3QgQWJzdHJhY3RMb2NrZXImLCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0
b3IpCiAgICAgewogICAgICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QobV90ZXh0dXJlLmdldCgp
KTsKICAgICB9CkBAIC03MjEsMTAgKzcyNSwxMSBAQCBHQ0dMZW51bSBXZWJHTEZyYW1lYnVmZmVy
OjpnZXREcmF3QnVmZmVyCiAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dEdMOjpOT05FOwogfQog
Ci12b2lkIFdlYkdMRnJhbWVidWZmZXI6OmFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKGNvbnN0IEFi
c3RyYWN0TG9ja2VyJiBsb2NrZXIsIEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3ZvaWQg
V2ViR0xGcmFtZWJ1ZmZlcjo6YWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMoY29uc3QgQWJzdHJhY3RM
b2NrZXImIGxvY2tlciwgSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgV2ViR0xGcmFt
ZWJ1ZmZlcjo6YWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMzMDAoY29uc3QgQWJzdHJhY3RMb2NrZXIm
IGxvY2tlciwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGZvciAo
YXV0byYgZW50cnkgOiBtX2F0dGFjaG1lbnRzKQotICAgICAgICBlbnRyeS52YWx1ZS0+YWRkTWVt
YmVyc1RvT3BhcXVlUm9vdHMobG9ja2VyLCB2aXNpdG9yKTsKKyAgICAgICAgZW50cnkudmFsdWUt
PmFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzNDAwKGxvY2tlciwgdmlzaXRvcik7CiB9CiAKIHZvaWQg
V2ViR0xGcmFtZWJ1ZmZlcjo6c2V0QXR0YWNobWVudEludGVybmFsKEdDR0xlbnVtIGF0dGFjaG1l
bnQsIEdDR0xlbnVtIHRleFRhcmdldCwgV2ViR0xUZXh0dXJlKiB0ZXh0dXJlLCBHQ0dMaW50IGxl
dmVsLCBHQ0dMaW50IGxheWVyKQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2Vi
R0xGcmFtZWJ1ZmZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L1dlYkdMRnJhbWVidWZmZXIuaAkocmV2aXNpb24gMjcyMTkyKQorKysgU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvV2ViR0xGcmFtZWJ1ZmZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICsz
NCw4IEBACiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgSlNDIHsKLWNsYXNz
IFNsb3RWaXNpdG9yOworLy9jbGFzcyBTbG90VmlzaXRvcjsKK2NsYXNzIEFic3RyYWN0U2xvdFZp
c2l0b3I7CiB9CiAKIG5hbWVzcGFjZSBXVEYgewpAQCAtNjUsNyArNjYsOCBAQCBwdWJsaWM6CiAg
ICAgICAgIHZpcnR1YWwgdm9pZCBvbkRldGFjaGVkKGNvbnN0IFdURjo6QWJzdHJhY3RMb2NrZXIm
LCBHcmFwaGljc0NvbnRleHRHTCopID0gMDsKICAgICAgICAgdmlydHVhbCB2b2lkIGF0dGFjaChH
cmFwaGljc0NvbnRleHRHTCosIEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gYXR0YWNobWVudCkg
PSAwOwogICAgICAgICB2aXJ0dWFsIHZvaWQgdW5hdHRhY2goR3JhcGhpY3NDb250ZXh0R0wqLCBH
Q0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIGF0dGFjaG1lbnQpID0gMDsKLSAgICAgICAgdmlydHVh
bCB2b2lkIGFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKGNvbnN0IFdURjo6QWJzdHJhY3RMb2NrZXIm
LCBKU0M6OlNsb3RWaXNpdG9yJikgPSAwOworLy8gICAgICAgIHZpcnR1YWwgdm9pZCBhZGRNZW1i
ZXJzVG9PcGFxdWVSb290cyhjb25zdCBXVEY6OkFic3RyYWN0TG9ja2VyJiwgSlNDOjpTbG90Vmlz
aXRvciYpID0gMDsKKyAgICAgICAgdmlydHVhbCB2b2lkIGFkZE1lbWJlcnNUb09wYXF1ZVJvb3Rz
NDAwKGNvbnN0IFdURjo6QWJzdHJhY3RMb2NrZXImLCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3Im
KSA9IDA7CiAKICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIFdlYkdMQXR0YWNobWVudCgpOwpAQCAt
MTE0LDcgKzExNiw4IEBAIHB1YmxpYzoKIAogICAgIEdDR0xlbnVtIGdldERyYXdCdWZmZXIoR0NH
TGVudW0pOwogCi0gICAgdm9pZCBhZGRNZW1iZXJzVG9PcGFxdWVSb290cyhjb25zdCBXVEY6OkFi
c3RyYWN0TG9ja2VyJiwgSlNDOjpTbG90VmlzaXRvciYpOworLy8gICAgdm9pZCBhZGRNZW1iZXJz
VG9PcGFxdWVSb290cyhjb25zdCBXVEY6OkFic3RyYWN0TG9ja2VyJiwgSlNDOjpTbG90VmlzaXRv
ciYpOworICAgIHZvaWQgYWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMzMDAoY29uc3QgV1RGOjpBYnN0
cmFjdExvY2tlciYsIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpOwogCiBwcml2YXRlOgogICAg
IFdlYkdMRnJhbWVidWZmZXIoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSYpOwpJbmRleDogU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xQcm9ncmFtLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFByb2dyYW0uY3BwCShyZXZpc2lvbiAyNzIx
OTIpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFByb2dyYW0uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMDYsNyArMjA2LDggQEAgYm9vbCBXZWJHTFByb2dyYW06OmRldGFjaFNo
YWRlcihjb25zdCBBYgogICAgIH0KIH0KIAotdm9pZCBXZWJHTFByb2dyYW06OmFkZE1lbWJlcnNU
b09wYXF1ZVJvb3RzKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgSlNDOjpTbG90VmlzaXRvciYgdmlz
aXRvcikKKy8vdm9pZCBXZWJHTFByb2dyYW06OmFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKGNvbnN0
IEFic3RyYWN0TG9ja2VyJiwgSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgV2ViR0xQ
cm9ncmFtOjphZGRNZW1iZXJzVG9PcGFxdWVSb290czIwMChjb25zdCBBYnN0cmFjdExvY2tlciYs
IEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB2aXNpdG9yLmFkZE9w
YXF1ZVJvb3QobV92ZXJ0ZXhTaGFkZXIuZ2V0KCkpOwogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9v
dChtX2ZyYWdtZW50U2hhZGVyLmdldCgpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2Fu
dmFzL1dlYkdMUHJvZ3JhbS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2Fu
dmFzL1dlYkdMUHJvZ3JhbS5oCShyZXZpc2lvbiAyNzIxOTIpCisrKyBTb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9XZWJHTFByb2dyYW0uaAkod29ya2luZyBjb3B5KQpAQCAtMzUsNyArMzUsOCBA
QAogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIEpTQyB7Ci1jbGFzcyBTbG90
VmlzaXRvcjsKKy8vY2xhc3MgU2xvdFZpc2l0b3I7CitjbGFzcyBBYnN0cmFjdFNsb3RWaXNpdG9y
OwogfQogCiBuYW1lc3BhY2UgV1RGIHsKQEAgLTg4LDcgKzg5LDggQEAgcHVibGljOgogICAgICAg
ICByZXR1cm4gbV9yZXF1aXJlZFRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyQ291bnQ7CiAgICAgfQog
Ci0gICAgdm9pZCBhZGRNZW1iZXJzVG9PcGFxdWVSb290cyhjb25zdCBXVEY6OkFic3RyYWN0TG9j
a2VyJiwgSlNDOjpTbG90VmlzaXRvciYpOworLy8gICAgdm9pZCBhZGRNZW1iZXJzVG9PcGFxdWVS
b290cyhjb25zdCBXVEY6OkFic3RyYWN0TG9ja2VyJiwgSlNDOjpTbG90VmlzaXRvciYpOworICAg
IHZvaWQgYWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMyMDAoY29uc3QgV1RGOjpBYnN0cmFjdExvY2tl
ciYsIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpOwogCiBwcml2YXRlOgogICAgIFdlYkdMUHJv
Z3JhbShXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlJik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcAko
cmV2aXNpb24gMjcyMTkyKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc5MzQsMjMgKzc5MzQsMjYg
QEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpkaXNwYXRjaAogICAgIHF1ZXVlVGFz
a1RvRGlzcGF0Y2hFdmVudCgqY2FudmFzLCBUYXNrU291cmNlOjpXZWJHTCwgV2ViR0xDb250ZXh0
RXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkud2ViZ2xjb250ZXh0Y2hhbmdlZEV2ZW50LCBFdmVu
dDo6Q2FuQnViYmxlOjpObywgRXZlbnQ6OklzQ2FuY2VsYWJsZTo6WWVzLCBlbXB0eVN0cmluZygp
KSk7CiB9CiAKLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6YWRkTWVtYmVyc1RvT3Bh
cXVlUm9vdHMoSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vdm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlOjphZGRNZW1iZXJzVG9PcGFxdWVSb290cyhKU0M6OlNsb3RWaXNpdG9yJiB2
aXNpdG9yKQordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjphZGRNZW1iZXJzVG9PcGFx
dWVSb290cyhKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0byBs
b2NrZXIgPSBob2xkTG9jayhvYmplY3RHcmFwaExvY2soKSk7CiAKKyAgICAvLyBtbGFtIEZJWE1F
OiB3aHkgYXJlIHdlIG5vdCBhbHNvIHZpc2l0aW5nIG1fZGVmYXVsdFZlcnRleEFycmF5T2JqZWN0
PworCiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KG1fYm91bmRBcnJheUJ1ZmZlci5nZXQoKSk7
CiAKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QobV9ib3VuZFZlcnRleEFycmF5T2JqZWN0Lmdl
dCgpKTsKICAgICBpZiAobV9ib3VuZFZlcnRleEFycmF5T2JqZWN0KQotICAgICAgICBtX2JvdW5k
VmVydGV4QXJyYXlPYmplY3QtPmFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKGxvY2tlciwgdmlzaXRv
cik7CisgICAgICAgIG1fYm91bmRWZXJ0ZXhBcnJheU9iamVjdC0+YWRkTWVtYmVyc1RvT3BhcXVl
Um9vdHM2MDAobG9ja2VyLCB2aXNpdG9yKTsKIAogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdCht
X2N1cnJlbnRQcm9ncmFtLmdldCgpKTsKICAgICBpZiAobV9jdXJyZW50UHJvZ3JhbSkKLSAgICAg
ICAgbV9jdXJyZW50UHJvZ3JhbS0+YWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMobG9ja2VyLCB2aXNp
dG9yKTsKKyAgICAgICAgbV9jdXJyZW50UHJvZ3JhbS0+YWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMy
MDAobG9ja2VyLCB2aXNpdG9yKTsKIAogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChtX2ZyYW1l
YnVmZmVyQmluZGluZy5nZXQoKSk7CiAgICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nKQotICAg
ICAgICBtX2ZyYW1lYnVmZmVyQmluZGluZy0+YWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMobG9ja2Vy
LCB2aXNpdG9yKTsKKyAgICAgICAgbV9mcmFtZWJ1ZmZlckJpbmRpbmctPmFkZE1lbWJlcnNUb09w
YXF1ZVJvb3RzMzAwKGxvY2tlciwgdmlzaXRvcik7CiAKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJv
b3QobV9yZW5kZXJidWZmZXJCaW5kaW5nLmdldCgpKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuaAkocmV2
aXNpb24gMjcyMTkyKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJp
bmdDb250ZXh0QmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01OCw3ICs1OCw4IEBACiAjZW5kaWYK
IAogbmFtZXNwYWNlIEpTQyB7Ci1jbGFzcyBTbG90VmlzaXRvcjsKKy8vY2xhc3MgU2xvdFZpc2l0
b3I7CitjbGFzcyBBYnN0cmFjdFNsb3RWaXNpdG9yOwogfQogCiBuYW1lc3BhY2UgV1RGIHsKQEAg
LTQxMSw3ICs0MTIsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCByZWN5Y2xlQ29udGV4dCgpIG92ZXJy
aWRlOwogICAgIHZvaWQgZGlzcGF0Y2hDb250ZXh0Q2hhbmdlZE5vdGlmaWNhdGlvbigpIG92ZXJy
aWRlOwogCi0gICAgdmlydHVhbCB2b2lkIGFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKEpTQzo6U2xv
dFZpc2l0b3ImKTsKKy8vICAgIHZpcnR1YWwgdm9pZCBhZGRNZW1iZXJzVG9PcGFxdWVSb290cyhK
U0M6OlNsb3RWaXNpdG9yJik7CisgICAgdmlydHVhbCB2b2lkIGFkZE1lbWJlcnNUb09wYXF1ZVJv
b3RzKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpOwogICAgIC8vIFRoaXMgbG9jayBtdXN0IGJl
IGhlbGQgYWNyb3NzIGFsbCBtdXRhdGlvbnMgb2YgY29udGFpbmVycyBsaWtlCiAgICAgLy8gVmVj
dG9ycywgSGFzaFNldHMsIGV0Yy4gd2hpY2ggY29udGFpbiBSZWZQdHI8V2ViR0xPYmplY3Q+LCBh
bmQKICAgICAvLyB3aGljaCBhcmUgdHJhdmVyc2VkIGJ5IGFkZE1lbWJlcnNUb09wYXF1ZVJvb3Rz
KCkgb3IgYW55IG9mIHRoZQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xU
cmFuc2Zvcm1GZWVkYmFjay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9j
YW52YXMvV2ViR0xUcmFuc2Zvcm1GZWVkYmFjay5jcHAJKHJldmlzaW9uIDI3MjE5MikKKysrIFNv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVHJhbnNmb3JtRmVlZGJhY2suY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMCw4ICszMCw5IEBACiAKICNpbmNsdWRlICJXZWJHTENvbnRleHRHcm91
cC5oIgogI2luY2x1ZGUgIldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuaCIKLSNpbmNsdWRlIDxK
YXZhU2NyaXB0Q29yZS9TbG90VmlzaXRvci5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1Ns
b3RWaXNpdG9ySW5saW5lcy5oPgorLy8jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvU2xvdFZpc2l0
b3IuaD4KKy8vI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1Nsb3RWaXNpdG9ySW5saW5lcy5oPgor
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0Fic3RyYWN0U2xvdFZpc2l0b3JJbmxpbmVzLmg+CiAj
aW5jbHVkZSA8d3RmL0xvY2suaD4KICNpbmNsdWRlIDx3dGYvTG9ja2VyLmg+CiAKQEAgLTkzLDE0
ICs5NCwxNSBAQCBib29sIFdlYkdMVHJhbnNmb3JtRmVlZGJhY2s6Omhhc0Vub3VnaEJ1CiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgV2ViR0xUcmFuc2Zvcm1GZWVkYmFjazo6YWRkTWVtYmVy
c1RvT3BhcXVlUm9vdHMoY29uc3QgQWJzdHJhY3RMb2NrZXImIGxvY2tlciwgSlNDOjpTbG90Vmlz
aXRvciYgdmlzaXRvcikKKy8vdm9pZCBXZWJHTFRyYW5zZm9ybUZlZWRiYWNrOjphZGRNZW1iZXJz
VG9PcGFxdWVSb290cyhjb25zdCBBYnN0cmFjdExvY2tlciYgbG9ja2VyLCBKU0M6OlNsb3RWaXNp
dG9yJiB2aXNpdG9yKQordm9pZCBXZWJHTFRyYW5zZm9ybUZlZWRiYWNrOjphZGRNZW1iZXJzVG9P
cGFxdWVSb290czEwMChjb25zdCBBYnN0cmFjdExvY2tlciYgbG9ja2VyLCBKU0M6OkFic3RyYWN0
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgZm9yIChhdXRvJiBidWZmZXIgOiBtX2JvdW5k
SW5kZXhlZFRyYW5zZm9ybUZlZWRiYWNrQnVmZmVycykKICAgICAgICAgdmlzaXRvci5hZGRPcGFx
dWVSb290KGJ1ZmZlci5nZXQoKSk7CiAKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QobV9wcm9n
cmFtLmdldCgpKTsKICAgICBpZiAobV9wcm9ncmFtKQotICAgICAgICBtX3Byb2dyYW0tPmFkZE1l
bWJlcnNUb09wYXF1ZVJvb3RzKGxvY2tlciwgdmlzaXRvcik7CisgICAgICAgIG1fcHJvZ3JhbS0+
YWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMyMDAobG9ja2VyLCB2aXNpdG9yKTsKIH0KIAogdm9pZCBX
ZWJHTFRyYW5zZm9ybUZlZWRiYWNrOjp1bmJpbmRCdWZmZXIoY29uc3QgQWJzdHJhY3RMb2NrZXIm
LCBXZWJHTEJ1ZmZlciYgYnVmZmVyKQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
V2ViR0xUcmFuc2Zvcm1GZWVkYmFjay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0
bWwvY2FudmFzL1dlYkdMVHJhbnNmb3JtRmVlZGJhY2suaAkocmV2aXNpb24gMjcyMTkyKQorKysg
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xUcmFuc2Zvcm1GZWVkYmFjay5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMSw3ICszMSw4IEBACiAjaW5jbHVkZSAiV2ViR0xTaGFyZWRPYmplY3Qu
aCIKIAogbmFtZXNwYWNlIEpTQyB7Ci1jbGFzcyBTbG90VmlzaXRvcjsKKy8vY2xhc3MgU2xvdFZp
c2l0b3I7CitjbGFzcyBBYnN0cmFjdFNsb3RWaXNpdG9yOwogfQogCiBuYW1lc3BhY2UgV1RGIHsK
QEAgLTcwLDcgKzcxLDggQEAgcHVibGljOgogICAgIAogICAgIGJvb2wgaGFzRW5vdWdoQnVmZmVy
cyhHQ0dMdWludCBudW1SZXF1aXJlZCkgY29uc3Q7CiAKLSAgICB2b2lkIGFkZE1lbWJlcnNUb09w
YXF1ZVJvb3RzKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgSlNDOjpTbG90VmlzaXRvciYpOworLy8g
ICAgdm9pZCBhZGRNZW1iZXJzVG9PcGFxdWVSb290cyhjb25zdCBBYnN0cmFjdExvY2tlciYsIEpT
Qzo6U2xvdFZpc2l0b3ImKTsKKyAgICB2b2lkIGFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzMTAwKGNv
bnN0IEFic3RyYWN0TG9ja2VyJiwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAKIHByaXZh
dGU6CiAgICAgV2ViR0xUcmFuc2Zvcm1GZWVkYmFjayhXZWJHTDJSZW5kZXJpbmdDb250ZXh0Jik7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFZlcnRleEFycmF5T2JqZWN0
QmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xW
ZXJ0ZXhBcnJheU9iamVjdEJhc2UuY3BwCShyZXZpc2lvbiAyNzIxOTIpCisrKyBTb3VyY2UvV2Vi
Q29yZS9odG1sL2NhbnZhcy9XZWJHTFZlcnRleEFycmF5T2JqZWN0QmFzZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI5LDggKzI5LDkgQEAKICNpZiBFTkFCTEUoV0VCR0wpCiAKICNpbmNsdWRlICJX
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvU2xv
dFZpc2l0b3IuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9TbG90VmlzaXRvcklubGluZXMu
aD4KKy8vI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1Nsb3RWaXNpdG9yLmg+CisvLyNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9TbG90VmlzaXRvcklubGluZXMuaD4KKyNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9BYnN0cmFjdFNsb3RWaXNpdG9ySW5saW5lcy5oPgogI2luY2x1ZGUgPHd0Zi9Mb2Nr
ZXIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMTA5LDcgKzExMCw4IEBAIHZvaWQgV2Vi
R0xWZXJ0ZXhBcnJheU9iamVjdEJhc2U6OnNldFZlcnQKICAgICBtX3ZlcnRleEF0dHJpYlN0YXRl
W2luZGV4XS5kaXZpc29yID0gZGl2aXNvcjsKIH0KIAotdm9pZCBXZWJHTFZlcnRleEFycmF5T2Jq
ZWN0QmFzZTo6YWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMoY29uc3QgQWJzdHJhY3RMb2NrZXImLCBK
U0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy92b2lkIFdlYkdMVmVydGV4QXJyYXlPYmplY3RC
YXNlOjphZGRNZW1iZXJzVG9PcGFxdWVSb290czYwMChjb25zdCBBYnN0cmFjdExvY2tlciYsIEpT
Qzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIFdlYkdMVmVydGV4QXJyYXlPYmplY3RCYXNl
OjphZGRNZW1iZXJzVG9PcGFxdWVSb290czYwMChjb25zdCBBYnN0cmFjdExvY2tlciYsIEpTQzo6
QWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJv
b3QobV9ib3VuZEVsZW1lbnRBcnJheUJ1ZmZlci5nZXQoKSk7CiAgICAgZm9yIChhdXRvJiBzdGF0
ZSA6IG1fdmVydGV4QXR0cmliU3RhdGUpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZh
cy9XZWJHTFZlcnRleEFycmF5T2JqZWN0QmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2h0bWwvY2FudmFzL1dlYkdMVmVydGV4QXJyYXlPYmplY3RCYXNlLmgJKHJldmlzaW9uIDI3
MjE5MikKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVmVydGV4QXJyYXlPYmpl
Y3RCYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDggQEAKICNpbmNsdWRlICJXZWJH
TENvbnRleHRPYmplY3QuaCIKIAogbmFtZXNwYWNlIEpTQyB7Ci1jbGFzcyBTbG90VmlzaXRvcjsK
Ky8vY2xhc3MgU2xvdFZpc2l0b3I7CitjbGFzcyBBYnN0cmFjdFNsb3RWaXNpdG9yOwogfQogCiBu
YW1lc3BhY2UgV1RGIHsKQEAgLTc3LDcgKzc4LDggQEAgcHVibGljOgogCiAgICAgdm9pZCBzZXRW
ZXJ0ZXhBdHRyaWJEaXZpc29yKEdDR0x1aW50IGluZGV4LCBHQ0dMdWludCBkaXZpc29yKTsKIAot
ICAgIHZvaWQgYWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMoY29uc3QgV1RGOjpBYnN0cmFjdExvY2tl
ciYsIEpTQzo6U2xvdFZpc2l0b3ImKTsKKy8vICAgIHZvaWQgYWRkTWVtYmVyc1RvT3BhcXVlUm9v
dHM2MDAoY29uc3QgV1RGOjpBYnN0cmFjdExvY2tlciYsIEpTQzo6U2xvdFZpc2l0b3ImKTsKKyAg
ICB2b2lkIGFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzNjAwKGNvbnN0IFdURjo6QWJzdHJhY3RMb2Nr
ZXImLCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKTsKIAogcHJvdGVjdGVkOgogICAgIFdlYkdM
VmVydGV4QXJyYXlPYmplY3RCYXNlKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UmLCBUeXBlKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>419640</attachid>
            <date>2021-02-08 15:15:45 -0800</date>
            <delta_ts>2021-02-10 16:18:25 -0800</delta_ts>
            <desc>work in progress.</desc>
            <filename>bug-217274f.patch</filename>
            <type>text/plain</type>
            <size>516098</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDI3MjI5NykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtNjA4LDYgKzYwOCw4IEBAIHNldChKYXZhU2NyaXB0Q29yZV9QUklWQVRFX0ZSQU1FV09SS19I
RUEKICAgICBkb21qaXQvRE9NSklUSGVhcFJhbmdlLmgKICAgICBkb21qaXQvRE9NSklUU2lnbmF0
dXJlLmgKIAorICAgIGhlYXAvQWJzdHJhY3RTbG90VmlzaXRvci5oCisgICAgaGVhcC9BYnN0cmFj
dFNsb3RWaXNpdG9ySW5saW5lcy5oCiAgICAgaGVhcC9BbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmgK
ICAgICBoZWFwL0FsbG9jYXRpb25GYWlsdXJlTW9kZS5oCiAgICAgaGVhcC9BbGxvY2F0b3IuaApA
QCAtNjgxLDEyICs2ODMsMTQgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1BSSVZBVEVfRlJBTUVXT1JL
X0hFQQogICAgIGhlYXAvU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQuaAogICAgIGhlYXAvU2xvdFZp
c2l0b3IuaAogICAgIGhlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmgKKyAgICBoZWFwL1Nsb3RWaXNp
dG9yTWFjcm9zLmgKICAgICBoZWFwL1N0cm9uZy5oCiAgICAgaGVhcC9TdHJvbmdJbmxpbmVzLmgK
ICAgICBoZWFwL1N1YnNwYWNlLmgKICAgICBoZWFwL1N1YnNwYWNlSW5saW5lcy5oCiAgICAgaGVh
cC9TeW5jaHJvbm91c25lc3MuaAogICAgIGhlYXAvVGlueUJsb29tRmlsdGVyLmgKKyAgICBoZWFw
L1ZlcmlmaWVyU2xvdFZpc2l0b3IuaAogICAgIGhlYXAvVmlzaXRSYWNlS2V5LmgKICAgICBoZWFw
L1dlYWsuaAogICAgIGhlYXAvV2Vha0Jsb2NrLmgKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9Tb3VyY2VzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNl
cy50eHQJKHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2Vz
LnR4dAkod29ya2luZyBjb3B5KQpAQCAtNTAxLDYgKzUwMSw3IEBAIGZ0bC9GVExTdGF0ZS5jcHAK
IGZ0bC9GVExUaHVua3MuY3BwCiBmdGwvRlRMVmFsdWVSYW5nZS5jcHAKIAoraGVhcC9BYnN0cmFj
dFNsb3RWaXNpdG9yLmNwcAogaGVhcC9BbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmNwcAogaGVhcC9B
bGxvY2F0b3IuY3BwCiBoZWFwL0Jsb2NrRGlyZWN0b3J5LmNwcApAQCAtNTU5LDYgKzU2MCw3IEBA
IGhlYXAvU3RvcElmTmVjZXNzYXJ5VGltZXIuY3BwCiBoZWFwL1N1YnNwYWNlLmNwcAogaGVhcC9T
eW5jaHJvbm91c1N0b3BUaGVXb3JsZE11dGF0b3JTY2hlZHVsZXIuY3BwCiBoZWFwL1N5bmNocm9u
b3VzbmVzcy5jcHAKK2hlYXAvVmVyaWZpZXJTbG90VmlzaXRvci5jcHAKIGhlYXAvVmlzaXRSYWNl
S2V5LmNwcAogaGVhcC9XZWFrLmNwcAogaGVhcC9XZWFrQmxvY2suY3BwCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQVBJL0pTQVBJV3JhcHBlck9iamVjdC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNBUElXcmFwcGVyT2JqZWN0LmgJKHJldmlzaW9uIDI3
MjI5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNBUElXcmFwcGVyT2JqZWN0LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC00MSw3ICs0MSw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9p
ZCBzdWJzcGFjZUZvcihWTSYpIHsgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQogICAg
IAogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENo
aWxkcmVuKEpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX0VYUE9SVF9W
SVNJVF9DSElMRFJFTjsKICAgICAKICAgICB2b2lkKiB3cmFwcGVkT2JqZWN0KCkgeyByZXR1cm4g
bV93cmFwcGVkT2JqZWN0OyB9CiAgICAgdm9pZCBzZXRXcmFwcGVkT2JqZWN0KHZvaWQqKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNBUElXcmFwcGVyT2JqZWN0Lm1tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNBUElXcmFwcGVyT2JqZWN0Lm1t
CShyZXZpc2lvbiAyNzIyOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQVBJV3Jh
cHBlck9iamVjdC5tbQkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM3LDcgKzM3LDcgQEAKIGNsYXNzIEpT
QVBJV3JhcHBlck9iamVjdEhhbmRsZU93bmVyIGZpbmFsIDogcHVibGljIEpTQzo6V2Vha0hhbmRs
ZU93bmVyIHsKIHB1YmxpYzoKICAgICB2b2lkIGZpbmFsaXplKEpTQzo6SGFuZGxlPEpTQzo6VW5r
bm93bj4sIHZvaWQqKSBmaW5hbDsKLSAgICBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3Rz
KEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6U2xvdFZpc2l0
b3ImLCBjb25zdCBjaGFyKiopIGZpbmFsOworICAgIGJvb2wgaXNSZWFjaGFibGVGcm9tT3BhcXVl
Um9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCwgSlNDOjpBYnN0
cmFjdFNsb3RWaXNpdG9yJiwgY29uc3QgY2hhcioqKSBmaW5hbDsKIH07CiAKIHN0YXRpYyBKU0FQ
SVdyYXBwZXJPYmplY3RIYW5kbGVPd25lcioganNBUElXcmFwcGVyT2JqZWN0SGFuZGxlT3duZXIo
KQpAQCAtNTYsMTQgKzU2LDE1IEBAIHZvaWQgSlNBUElXcmFwcGVyT2JqZWN0SGFuZGxlT3duZXI6
OmZpbmEKICAgICBKU0M6OldlYWtTZXQ6OmRlYWxsb2NhdGUoSlNDOjpXZWFrSW1wbDo6YXNXZWFr
SW1wbChoYW5kbGUuc2xvdCgpKSk7CiB9CiAKLWJvb2wgSlNBUElXcmFwcGVyT2JqZWN0SGFuZGxl
T3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93
bj4gaGFuZGxlLCB2b2lkKiwgSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioq
KQorYm9vbCBKU0FQSVdyYXBwZXJPYmplY3RIYW5kbGVPd25lcjo6aXNSZWFjaGFibGVGcm9tT3Bh
cXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBKU0M6OkFi
c3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKikKIHsKICAgICBKU0M6OkpT
QVBJV3JhcHBlck9iamVjdCogd3JhcHBlck9iamVjdCA9IEpTQzo6anNDYXN0PEpTQzo6SlNBUElX
cmFwcGVyT2JqZWN0Kj4oaGFuZGxlLmdldCgpLmFzQ2VsbCgpKTsKICAgICAvLyBXZSB1c2UgdGhl
IEpTR2xvYmFsT2JqZWN0IHdoZW4gcHJvY2Vzc2luZyB3ZWFrIGhhbmRsZXMgdG8gcHJldmVudCB0
aGUgc2l0dWF0aW9uIHdoZXJlIHVzaW5nCiAgICAgLy8gdGhlIHNhbWUgT2JqZWN0aXZlLUMgb2Jq
ZWN0IGluIG11bHRpcGxlIGdsb2JhbCBvYmplY3RzIGtlZXBzIGFsbCBvZiB0aGUgZ2xvYmFsIG9i
amVjdHMgYWxpdmUuCiAgICAgaWYgKCF3cmFwcGVyT2JqZWN0LT53cmFwcGVkT2JqZWN0KCkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gdmlzaXRvci52bSgpLmhlYXAuaXNNYXJr
ZWQod3JhcHBlck9iamVjdC0+c3RydWN0dXJlKCktPmdsb2JhbE9iamVjdCgpKSAmJiB2aXNpdG9y
LmNvbnRhaW5zT3BhcXVlUm9vdCh3cmFwcGVyT2JqZWN0LT53cmFwcGVkT2JqZWN0KCkpOworLy8g
ICAgcmV0dXJuIHZpc2l0b3Iudm0oKS5oZWFwLmlzTWFya2VkKHdyYXBwZXJPYmplY3QtPnN0cnVj
dHVyZSgpLT5nbG9iYWxPYmplY3QoKSkgJiYgdmlzaXRvci5jb250YWluc09wYXF1ZVJvb3Qod3Jh
cHBlck9iamVjdC0+d3JhcHBlZE9iamVjdCgpKTsKKyAgICByZXR1cm4gdmlzaXRvci5pc01hcmtl
ZCh3cmFwcGVyT2JqZWN0LT5zdHJ1Y3R1cmUoKS0+Z2xvYmFsT2JqZWN0KCkpICYmIHZpc2l0b3Iu
Y29udGFpbnNPcGFxdWVSb290KHdyYXBwZXJPYmplY3QtPndyYXBwZWRPYmplY3QoKSk7CiB9CiAK
IG5hbWVzcGFjZSBKU0MgewpAQCAtNzMsNiArNzQsOCBAQCBzdGF0aWMgSlNDX0RFQ0xBUkVfSE9T
VF9GVU5DVElPTihjb25zdHJ1CiBzdGF0aWMgSlNDX0RFQ0xBUkVfQ1VTVE9NX0dFVFRFUihjYWxs
YmFja0dldHRlckpTQVBJV3JhcHBlck9iamVjdENhbGxiYWNrT2JqZWN0KTsKIHN0YXRpYyBKU0Nf
REVDTEFSRV9DVVNUT01fR0VUVEVSKHN0YXRpY0Z1bmN0aW9uR2V0dGVySlNBUElXcmFwcGVyT2Jq
ZWN0Q2FsbGJhY2tPYmplY3QpOwogCitERUZJTkVfVEVNUExBVEVfVklTSVRfQ0hJTERSRU4odGVt
cGxhdGU8PiwgSlNDYWxsYmFja09iamVjdDxKU0FQSVdyYXBwZXJPYmplY3Q+KTsKKwogdGVtcGxh
dGUgPD4gY29uc3QgQ2xhc3NJbmZvIEpTQ2FsbGJhY2tPYmplY3Q8SlNBUElXcmFwcGVyT2JqZWN0
Pjo6c19pbmZvID0geyAiSlNBUElXcmFwcGVyT2JqZWN0IiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0
ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU0NhbGxiYWNrT2JqZWN0KSB9OwogdGVt
cGxhdGUgPD4gY29uc3QgYm9vbCBKU0NhbGxiYWNrT2JqZWN0PEpTQVBJV3JhcHBlck9iamVjdD46
Om5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOwogCkBAIC0xMjMsNyArMTI2LDggQEAgdm9pZCBKU0FQ
SVdyYXBwZXJPYmplY3Q6OnNldFdyYXBwZWRPYmplYwogICAgIG1fd3JhcHBlZE9iamVjdCA9IFtz
dGF0aWNfY2FzdDxpZD4od3JhcHBlZE9iamVjdCkgcmV0YWluXTsKIH0KIAotdm9pZCBKU0FQSVdy
YXBwZXJPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBKU0M6OlNsb3RWaXNpdG9y
JiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNBUElXcmFwcGVy
T2JqZWN0Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3Ip
CiB7CiAgICAgSlNBUElXcmFwcGVyT2JqZWN0KiB0aGlzT2JqZWN0ID0gSlNDOjpqc0Nhc3Q8SlNB
UElXcmFwcGVyT2JqZWN0Kj4oY2VsbCk7CiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbihjZWxsLCB2
aXNpdG9yKTsKQEAgLTEzMyw2ICsxMzcsOCBAQCB2b2lkIEpTQVBJV3JhcHBlck9iamVjdDo6dmlz
aXRDaGlsZHJlbihKCiAgICAgICAgIHNjYW5FeHRlcm5hbE9iamVjdEdyYXBoKHZpc2l0b3Iudm0o
KSwgdmlzaXRvciwgd3JhcHBlZE9iamVjdCk7CiB9CiAKK0RFRklORV9FWFBPUlRfVklTSVRfQ0hJ
TERSRU4oSlNBUElXcmFwcGVyT2JqZWN0KTsKKwogdGVtcGxhdGUgPD4KIElzb1N1YnNwYWNlKiBK
U0NhbGxiYWNrT2JqZWN0PEpTQVBJV3JhcHBlck9iamVjdD46OnN1YnNwYWNlRm9ySW1wbChWTSYg
dm0sIFN1YnNwYWNlQWNjZXNzIG1vZGUpCiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
QVBJL0pTQ2FsbGJhY2tPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdC5jcHAJKHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMTcgQXBwbGUgSW5j
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIwIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwNyBFcmljIFNl
aWRlbCA8ZXJpY0B3ZWJraXQub3JnPgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtNDEsNiArNDEsOSBA
QCBzdGF0aWMgSlNDX0RFQ0xBUkVfQ1VTVE9NX0dFVFRFUihzdGF0aWNGCiBzdGF0aWMgSlNDX0RF
Q0xBUkVfQ1VTVE9NX0dFVFRFUihjYWxsYmFja0dldHRlckpTR2xvYmFsT2JqZWN0Q2FsbGJhY2tP
YmplY3QpOwogc3RhdGljIEpTQ19ERUNMQVJFX0NVU1RPTV9HRVRURVIoc3RhdGljRnVuY3Rpb25H
ZXR0ZXJKU0dsb2JhbE9iamVjdENhbGxiYWNrT2JqZWN0KTsKIAorREVGSU5FX1RFTVBMQVRFX1ZJ
U0lUX0NISUxEUkVOKHRlbXBsYXRlPD4sIEpTQ2FsbGJhY2tPYmplY3Q8SlNOb25GaW5hbE9iamVj
dD4pOworREVGSU5FX1RFTVBMQVRFX1ZJU0lUX0NISUxEUkVOKHRlbXBsYXRlPD4sIEpTQ2FsbGJh
Y2tPYmplY3Q8SlNHbG9iYWxPYmplY3Q+KTsKKwogLy8gRGVmaW5lIHRoZSB0d28gdHlwZXMgb2Yg
SlNDYWxsYmFja09iamVjdHMgd2Ugc3VwcG9ydC4KIHRlbXBsYXRlIDw+IGNvbnN0IENsYXNzSW5m
byBKU0NhbGxiYWNrT2JqZWN0PEpTTm9uRmluYWxPYmplY3Q+OjpzX2luZm8gPSB7ICJDYWxsYmFj
a09iamVjdCIsICZCYXNlOjpzX2luZm8sIG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0Rf
VEFCTEUoSlNDYWxsYmFja09iamVjdCkgfTsKIHRlbXBsYXRlIDw+IGNvbnN0IENsYXNzSW5mbyBK
U0NhbGxiYWNrT2JqZWN0PEpTR2xvYmFsT2JqZWN0Pjo6c19pbmZvID0geyAiQ2FsbGJhY2tHbG9i
YWxPYmplY3QiLCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9E
X1RBQkxFKEpTQ2FsbGJhY2tPYmplY3QpIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
QVBJL0pTQ2FsbGJhY2tPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvQVBJL0pTQ2FsbGJhY2tPYmplY3QuaAkocmV2aXNpb24gMjcyMjk3KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTY5
LDcgKzY5LDEwIEBAIHB1YmxpYzoKICAgICAgICAgbV9wcml2YXRlUHJvcGVydGllcy0+ZGVsZXRl
UHJpdmF0ZVByb3BlcnR5KHByb3BlcnR5TmFtZSk7CiAgICAgfQogCi0gICAgdm9pZCB2aXNpdENo
aWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47
CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgorICAgIHZvaWQgdmlzaXRDaGlsZHJl
bihWaXNpdG9yJiB2aXNpdG9yKQogICAgIHsKICAgICAgICAgSlNQcml2YXRlUHJvcGVydHlNYXAq
IHByb3BlcnRpZXMgPSBtX3ByaXZhdGVQcm9wZXJ0aWVzLmdldCgpOwogICAgICAgICBpZiAoIXBy
b3BlcnRpZXMpCkBAIC0xMDMsNyArMTA2LDggQEAgcHVibGljOgogICAgICAgICAgICAgbV9wcm9w
ZXJ0eU1hcC5yZW1vdmUocHJvcGVydHlOYW1lLmltcGwoKSk7CiAgICAgICAgIH0KIAotICAgICAg
ICB2b2lkIHZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisgICAgICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFZpc2l0b3I+CisgICAgICAgIHZvaWQgdmlzaXRDaGlsZHJlbihWaXNpdG9y
JiB2aXNpdG9yKQogICAgICAgICB7CiAgICAgICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2xv
Y2spOwogICAgICAgICAgICAgZm9yIChhdXRvJiBwYWlyIDogbV9wcm9wZXJ0eU1hcCkgewpAQCAt
MjE2LDEzICsyMjAsNyBAQCBwcml2YXRlOgogICAgIHN0YXRpYyBDYWxsRGF0YSBnZXRDb25zdHJ1
Y3REYXRhKEpTQ2VsbCopOwogICAgIHN0YXRpYyBDYWxsRGF0YSBnZXRDYWxsRGF0YShKU0NlbGwq
KTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90Vmlz
aXRvciYgdmlzaXRvcikKLSAgICB7Ci0gICAgICAgIEpTQ2FsbGJhY2tPYmplY3QqIHRoaXNPYmpl
Y3QgPSBqc0Nhc3Q8SlNDYWxsYmFja09iamVjdCo+KGNlbGwpOwotICAgICAgICBBU1NFUlRfR0Nf
T0JKRUNUX0lOSEVSSVRTKChzdGF0aWNfY2FzdDxQYXJlbnQqPih0aGlzT2JqZWN0KSksIEpTQ2Fs
bGJhY2tPYmplY3Q8UGFyZW50Pjo6aW5mbygpKTsKLSAgICAgICAgUGFyZW50Ojp2aXNpdENoaWxk
cmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwotICAgICAgICB0aGlzT2JqZWN0LT5tX2NhbGxiYWNr
T2JqZWN0RGF0YS0+dmlzaXRDaGlsZHJlbih2aXNpdG9yKTsKLSAgICB9CisgICAgREVDTEFSRV9U
RU1QTEFURV9WSVNJVF9DSElMRFJFTjsKIAogICAgIHZvaWQgaW5pdChKU0dsb2JhbE9iamVjdCop
OwogIApAQCAtMjQ1LDYgKzI0MywxNiBAQCBwcml2YXRlOgogICAgIGNvbnN0IENsYXNzSW5mbyog
bV9jbGFzc0luZm8geyBudWxscHRyIH07CiB9OwogCit0ZW1wbGF0ZSA8Y2xhc3MgUGFyZW50Pgor
dGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNDYWxsYmFja09iamVjdDxQYXJlbnQ+
Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCit7Cisg
ICAgSlNDYWxsYmFja09iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0NhbGxiYWNrT2JqZWN0
Kj4oY2VsbCk7CisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUygoc3RhdGljX2Nhc3Q8UGFy
ZW50Kj4odGhpc09iamVjdCkpLCBKU0NhbGxiYWNrT2JqZWN0PFBhcmVudD46OmluZm8oKSk7Cisg
ICAgUGFyZW50Ojp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOworICAgIHRoaXNP
YmplY3QtPm1fY2FsbGJhY2tPYmplY3REYXRhLT52aXNpdENoaWxkcmVuKHZpc2l0b3IpOworfQor
CiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogLy8gaW5jbHVkZSB0aGUgYWN0dWFsIHRlbXBsYXRlIGNs
YXNzIGltcGxlbWVudGF0aW9uCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTTWFu
YWdlZFZhbHVlLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNN
YW5hZ2VkVmFsdWUubW0JKHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9BUEkvSlNNYW5hZ2VkVmFsdWUubW0JKHdvcmtpbmcgY29weSkKQEAgLTQyLDcgKzQyLDcgQEAK
IGNsYXNzIEpTTWFuYWdlZFZhbHVlSGFuZGxlT3duZXIgZmluYWwgOiBwdWJsaWMgSlNDOjpXZWFr
SGFuZGxlT3duZXIgewogcHVibGljOgogICAgIHZvaWQgZmluYWxpemUoSlNDOjpIYW5kbGU8SlND
OjpVbmtub3duPiwgdm9pZCogY29udGV4dCkgZmluYWw7Ci0gICAgYm9vbCBpc1JlYWNoYWJsZUZy
b21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0LCBK
U0M6OlNsb3RWaXNpdG9yJiwgY29uc3QgY2hhcioqKSBmaW5hbDsKKyAgICBib29sIGlzUmVhY2hh
YmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRl
eHQsIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYsIGNvbnN0IGNoYXIqKikgZmluYWw7CiB9Owog
CiBzdGF0aWMgSlNNYW5hZ2VkVmFsdWVIYW5kbGVPd25lciYgbWFuYWdlZFZhbHVlSGFuZGxlT3du
ZXIoKQpAQCAtMTgwLDcgKzE4MCw3IEBAIEBpbnRlcmZhY2UgSlNNYW5hZ2VkVmFsdWUgKFByaXZh
dGVNZXRob2QKIC0gKHZvaWQpZGlzY29ubmVjdFZhbHVlOwogQGVuZAogCi1ib29sIEpTTWFuYWdl
ZFZhbHVlSGFuZGxlT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxl
PEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3Is
IGNvbnN0IGNoYXIqKiByZWFzb24pCitib29sIEpTTWFuYWdlZFZhbHVlSGFuZGxlT3duZXI6Omlz
UmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQq
IGNvbnRleHQsIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioq
IHJlYXNvbikKIHsKICAgICBpZiAoVU5MSUtFTFkocmVhc29uKSkKICAgICAgICAgKnJlYXNvbiA9
ICJKU01hbmFnZWRWYWx1ZSBpcyBvcGFxdWUgcm9vdCI7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvQVBJL0pTTWFya2luZ0NvbnN0cmFpbnRQcml2YXRlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTTWFya2luZ0NvbnN0cmFpbnRQcml2YXRlLmNwcAko
cmV2aXNpb24gMjcyMjk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU01hcmtpbmdD
b25zdHJhaW50UHJpdmF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDcgKzM2LDcgQEAgbmFt
ZXNwYWNlIHsKIEF0b21pYzx1bnNpZ25lZD4gY29uc3RyYWludENvdW50ZXI7CiAKIHN0cnVjdCBN
YXJrZXIgOiBKU01hcmtlciB7Ci0gICAgU2xvdFZpc2l0b3IqIHZpc2l0b3I7CisgICAgQWJzdHJh
Y3RTbG90VmlzaXRvciogdmlzaXRvcjsKIH07CiAKIGJvb2wgaXNNYXJrZWQoSlNNYXJrZXJSZWYg
bWFya2VyUmVmLCBKU09iamVjdFJlZiBvYmplY3RSZWYpCkBAIC00NCw3ICs0NCw4IEBAIGJvb2wg
aXNNYXJrZWQoSlNNYXJrZXJSZWYgbWFya2VyUmVmLCBKU08KICAgICBpZiAoIW9iamVjdFJlZikK
ICAgICAgICAgcmV0dXJuIHRydWU7IC8vIE51bGwgaXMgYW4gaW1tb3J0YWwgb2JqZWN0LgogICAg
IAotICAgIHJldHVybiBzdGF0aWNfY2FzdDxNYXJrZXIqPihtYXJrZXJSZWYpLT52aXNpdG9yLT52
bSgpLmhlYXAuaXNNYXJrZWQodG9KUyhvYmplY3RSZWYpKTsKKy8vICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxNYXJrZXIqPihtYXJrZXJSZWYpLT52aXNpdG9yLT52bSgpLmhlYXAuaXNNYXJrZWQodG9K
UyhvYmplY3RSZWYpKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8TWFya2VyKj4obWFya2VyUmVm
KS0+dmlzaXRvci0+aXNNYXJrZWQodG9KUyhvYmplY3RSZWYpKTsKIH0KIAogdm9pZCBtYXJrKEpT
TWFya2VyUmVmIG1hcmtlclJlZiwgSlNPYmplY3RSZWYgb2JqZWN0UmVmKQpAQCAtNzQsMTEgKzc1
LDExIEBAIHZvaWQgSlNDb250ZXh0R3JvdXBBZGRNYXJraW5nQ29uc3RyYWludCgKICAgICAgICAg
dG9DU3RyaW5nKCJBbWMiLCBjb25zdHJhaW50SW5kZXgsICIoIiwgUmF3UG9pbnRlcihiaXR3aXNl
X2Nhc3Q8dm9pZCo+KGNvbnN0cmFpbnRDYWxsYmFjaykpLCAiKSIpLAogICAgICAgICB0b0NTdHJp
bmcoIkFQSSBNYXJraW5nIENvbnN0cmFpbnQgIyIsIGNvbnN0cmFpbnRJbmRleCwgIiAoIiwgUmF3
UG9pbnRlcihiaXR3aXNlX2Nhc3Q8dm9pZCo+KGNvbnN0cmFpbnRDYWxsYmFjaykpLCAiLCAiLCBS
YXdQb2ludGVyKHVzZXJEYXRhKSwgIikiKSwKICAgICAgICAgW2NvbnN0cmFpbnRDYWxsYmFjaywg
dXNlckRhdGFdCi0gICAgICAgIChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IpIHsKKyAgICAgICAg
KEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsKICAgICAgICAgICAgIE1hcmtlciBtYXJr
ZXI7CiAgICAgICAgICAgICBtYXJrZXIuSXNNYXJrZWQgPSBpc01hcmtlZDsKICAgICAgICAgICAg
IG1hcmtlci5NYXJrID0gbWFyazsKLSAgICAgICAgICAgIG1hcmtlci52aXNpdG9yID0gJnNsb3RW
aXNpdG9yOworICAgICAgICAgICAgbWFya2VyLnZpc2l0b3IgPSAmdmlzaXRvcjsKICAgICAgICAg
ICAgIAogICAgICAgICAgICAgY29uc3RyYWludENhbGxiYWNrKCZtYXJrZXIsIHVzZXJEYXRhKTsK
ICAgICAgICAgfSwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWaXJ0dWFsTWFj
aGluZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmlydHVh
bE1hY2hpbmUubW0JKHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9B
UEkvSlNWaXJ0dWFsTWFjaGluZS5tbQkod29ya2luZyBjb3B5KQpAQCAtMzE1LDcgKzMxNSw4IEBA
ICsgKHZvaWQpc2V0Q3Jhc2hPblZNQ3JlYXRpb246KEJPT0wpc2hvdWwKIAogQGVuZAogCi1zdGF0
aWMgdm9pZCBzY2FuRXh0ZXJuYWxPYmplY3RHcmFwaChKU0M6OlZNJiB2bSwgSlNDOjpTbG90Vmlz
aXRvciYgdmlzaXRvciwgdm9pZCogcm9vdCwgYm9vbCBsb2NrQWNxdWlyZWQpCit0ZW1wbGF0ZTx0
eXBlbmFtZSBWaXNpdG9yPgorc3RhdGljIHZvaWQgc2NhbkV4dGVybmFsT2JqZWN0R3JhcGgoSlND
OjpWTSYgdm0sIFZpc2l0b3ImIHZpc2l0b3IsIHZvaWQqIHJvb3QsIGJvb2wgbG9ja0FjcXVpcmVk
KQogewogICAgIEBhdXRvcmVsZWFzZXBvb2wgewogICAgICAgICBKU1ZpcnR1YWxNYWNoaW5lICp2
aXJ0dWFsTWFjaGluZSA9IFtKU1ZNV3JhcHBlckNhY2hlIHdyYXBwZXJGb3JKU0NvbnRleHRHcm91
cFJlZjp0b1JlZigmdm0pXTsKQEAgLTM0NywxMyArMzQ4LDE3IEBAIHN0YXRpYyB2b2lkIHNjYW5F
eHRlcm5hbE9iamVjdEdyYXBoKEpTQzoKICAgICB9CiB9CiAKLXZvaWQgc2NhbkV4dGVybmFsT2Jq
ZWN0R3JhcGgoSlNDOjpWTSYgdm0sIEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IsIHZvaWQqIHJv
b3QpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBzY2FuRXh0ZXJuYWxPYmplY3RH
cmFwaChKU0M6OlZNJiB2bSwgVmlzaXRvciYgdmlzaXRvciwgdm9pZCogcm9vdCkKIHsKICAgICBi
b29sIGxvY2tBY3F1aXJlZCA9IGZhbHNlOwogICAgIHNjYW5FeHRlcm5hbE9iamVjdEdyYXBoKHZt
LCB2aXNpdG9yLCByb290LCBsb2NrQWNxdWlyZWQpOwogfQogCi12b2lkIHNjYW5FeHRlcm5hbFJl
bWVtYmVyZWRTZXQoSlNDOjpWTSYgdm0sIEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1w
bGF0ZSB2b2lkIHNjYW5FeHRlcm5hbE9iamVjdEdyYXBoKEpTQzo6Vk0mLCBKU0M6OlNsb3RWaXNp
dG9yJiwgdm9pZCopOwordGVtcGxhdGUgdm9pZCBzY2FuRXh0ZXJuYWxPYmplY3RHcmFwaChKU0M6
OlZNJiwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiwgdm9pZCopOworCit2b2lkIHNjYW5FeHRl
cm5hbFJlbWVtYmVyZWRTZXQoSlNDOjpWTSYgdm0sIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYg
dmlzaXRvcikKIHsKICAgICBAYXV0b3JlbGVhc2Vwb29sIHsKICAgICAgICAgSlNWaXJ0dWFsTWFj
aGluZSAqdmlydHVhbE1hY2hpbmUgPSBbSlNWTVdyYXBwZXJDYWNoZSB3cmFwcGVyRm9ySlNDb250
ZXh0R3JvdXBSZWY6dG9SZWYoJnZtKV07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJ
L0pTVmlydHVhbE1hY2hpbmVJbnRlcm5hbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvSlNWaXJ0dWFsTWFjaGluZUludGVybmFsLmgJKHJldmlzaW9uIDI3MjI5NykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWaXJ0dWFsTWFjaGluZUludGVybmFsLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDggQEAKIAogbmFtZXNwYWNlIEpTQyB7CiBjbGFz
cyBWTTsKLWNsYXNzIFNsb3RWaXNpdG9yOworLy9jbGFzcyBTbG90VmlzaXRvcjsKK2NsYXNzIEFi
c3RyYWN0U2xvdFZpc2l0b3I7CiB9CiAKICNpZiBkZWZpbmVkKF9fT0JKQ19fKQpAQCAtNTQsOCAr
NTUsOCBAQCBKU0NvbnRleHRHcm91cFJlZiBnZXRHcm91cEZyb21WaXJ0dWFsTWFjCiAKICNlbmRp
ZiAvLyBkZWZpbmVkKF9fT0JKQ19fKQogCi12b2lkIHNjYW5FeHRlcm5hbE9iamVjdEdyYXBoKEpT
Qzo6Vk0mLCBKU0M6OlNsb3RWaXNpdG9yJiwgdm9pZCogcm9vdCk7Ci12b2lkIHNjYW5FeHRlcm5h
bFJlbWVtYmVyZWRTZXQoSlNDOjpWTSYsIEpTQzo6U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlPHR5
cGVuYW1lIFZpc2l0b3I+IHZvaWQgc2NhbkV4dGVybmFsT2JqZWN0R3JhcGgoSlNDOjpWTSYsIFZp
c2l0b3ImLCB2b2lkKiByb290KTsKK3ZvaWQgc2NhbkV4dGVybmFsUmVtZW1iZXJlZFNldChKU0M6
OlZNJiwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAKICNlbmRpZiAvLyBKU0NfT0JKQ19B
UElfRU5BQkxFRAogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL01hcmtlZEpTVmFs
dWVSZWZBcnJheS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9N
YXJrZWRKU1ZhbHVlUmVmQXJyYXkuY3BwCShyZXZpc2lvbiAyNzIyOTcpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvQVBJL01hcmtlZEpTVmFsdWVSZWZBcnJheS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQ2LDcgKzQ2LDkgQEAgTWFya2VkSlNWYWx1ZVJlZkFycmF5Ojp+TWFya2VkSlNWYWx1ZVJl
ZgogICAgICAgICByZW1vdmUoKTsKIH0KIAotdm9pZCBNYXJrZWRKU1ZhbHVlUmVmQXJyYXk6OnZp
c2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy90ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPgorLy92b2lkIE1hcmtlZEpTVmFsdWVSZWZBcnJheTo6dmlzaXRBZ2dyZWdhdGUoVmlz
aXRvciYgdmlzaXRvcikKK3ZvaWQgTWFya2VkSlNWYWx1ZVJlZkFycmF5Ojp2aXNpdEFnZ3JlZ2F0
ZTEoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU1ZhbHVlUmVmKiBidWZm
ZXIgPSBkYXRhKCk7CiAgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IDA7IGluZGV4IDwgbV9zaXpl
OyArK2luZGV4KSB7CkBAIC02Miw0ICs2NCw3IEBAIHZvaWQgTWFya2VkSlNWYWx1ZVJlZkFycmF5
Ojp2aXNpdEFnZ3JlZ2EKICAgICB9CiB9CiAKKy8vdGVtcGxhdGUgdm9pZCBNYXJrZWRKU1ZhbHVl
UmVmQXJyYXk6OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJik7CisvL3RlbXBsYXRlIHZvaWQg
TWFya2VkSlNWYWx1ZVJlZkFycmF5Ojp2aXNpdEFnZ3JlZ2F0ZShWZXJpZmllclNsb3RWaXNpdG9y
Jik7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQ
SS9NYXJrZWRKU1ZhbHVlUmVmQXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvQVBJL01hcmtlZEpTVmFsdWVSZWZBcnJheS5oCShyZXZpc2lvbiAyNzIyOTcpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL01hcmtlZEpTVmFsdWVSZWZBcnJheS5oCSh3b3JraW5n
IGNvcHkpCkBAIC02Miw3ICs2Miw4IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1faW5saW5l
QnVmZmVyOwogICAgIH0KIAotICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImKTsK
Ky8vICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgdmlzaXRBZ2dyZWdhdGUoVmlz
aXRvciYpOworICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUxKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsK
IAogcHJpdmF0ZToKICAgICB1bnNpZ25lZCBtX3NpemU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvQVBJL2dsaWIvSlNBUElXcmFwcGVyR2xvYmFsT2JqZWN0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNBUElXcmFwcGVyR2xvYmFsT2JqZWN0
LmNwcAkocmV2aXNpb24gMjcyMjk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGli
L0pTQVBJV3JhcHBlckdsb2JhbE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU5LDYgKzU5
LDggQEAgc3RhdGljIEpTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJT04oY29uc3RydQogc3RhdGljIEpT
Q19ERUNMQVJFX0NVU1RPTV9HRVRURVIoY2FsbGJhY2tHZXR0ZXJKU0FQSVdyYXBwZXJHbG9iYWxP
YmplY3RDYWxsYmFja09iamVjdCk7CiBzdGF0aWMgSlNDX0RFQ0xBUkVfQ1VTVE9NX0dFVFRFUihz
dGF0aWNGdW5jdGlvbkdldHRlckpTQVBJV3JhcHBlckdsb2JhbE9iamVjdENhbGxiYWNrT2JqZWN0
KTsKIAorREVGSU5FX1RFTVBMQVRFX1ZJU0lUX0NISUxEUkVOKHRlbXBsYXRlPD4sIEpTQ2FsbGJh
Y2tPYmplY3Q8SlNBUElXcmFwcGVyR2xvYmFsT2JqZWN0Pik7CisKIHRlbXBsYXRlIDw+IGNvbnN0
IENsYXNzSW5mbyBKU0NhbGxiYWNrT2JqZWN0PEpTQVBJV3JhcHBlckdsb2JhbE9iamVjdD46OnNf
aW5mbyA9IHsgIkpTQVBJV3JhcHBlckdsb2JhbE9iamVjdCIsICZCYXNlOjpzX2luZm8sIG51bGxw
dHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNDYWxsYmFja09iamVjdCkgfTsKIHRl
bXBsYXRlPD4gY29uc3QgYm9vbCBKU0NhbGxiYWNrT2JqZWN0PEpTQVBJV3JhcHBlckdsb2JhbE9i
amVjdD46Om5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOwogCkBAIC0xNDQsOSArMTQ2LDkgQEAgdm9p
ZCBKU0FQSVdyYXBwZXJHbG9iYWxPYmplY3Q6OmZpbmlzaENyZQogICAgIFdlYWtTZXQ6OmFsbG9j
YXRlKHRoaXMsIGpzQVBJV3JhcHBlckdsb2JhbE9iamVjdEhhbmRsZU93bmVyKCksIDApOyAvLyBC
YWxhbmNlZCBpbiBKU0FQSVdyYXBwZXJHbG9iYWxPYmplY3RIYW5kbGVPd25lcjo6ZmluYWxpemUu
CiB9CiAKLXZvaWQgSlNBUElXcmFwcGVyR2xvYmFsT2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2Vs
bCogY2VsbCwgSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKLXsKLSAgICBCYXNlOjp2aXNpdENo
aWxkcmVuKGNlbGwsIHZpc2l0b3IpOwotfQorLy92b2lkIEpTQVBJV3JhcHBlckdsb2JhbE9iamVj
dDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3Ip
CisvL3sKKy8vICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4oY2VsbCwgdmlzaXRvcik7CisvL30KIAog
fSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIv
SlNBUElXcmFwcGVyR2xvYmFsT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL0FQSS9nbGliL0pTQVBJV3JhcHBlckdsb2JhbE9iamVjdC5oCShyZXZpc2lvbiAyNzIy
OTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNBUElXcmFwcGVyR2xvYmFs
T2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDcgKzM5LDcgQEAgcHVibGljOgogICAgIHN0
YXRpYyB2b2lkIHN1YnNwYWNlRm9yKFZNJikgeyBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OyB9CiAKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7Ci0gICAgc3RhdGljIHZvaWQgdmlz
aXRDaGlsZHJlbihKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJik7CisgICAgLy8gc3RhdGljIHZv
aWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJik7CiAKICAgICBKU0NH
TGliV3JhcHBlck9iamVjdCogd3JhcHBlZE9iamVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fd3JhcHBl
ZE9iamVjdDsgfQogICAgIHZvaWQgc2V0V3JhcHBlZE9iamVjdChKU0NHTGliV3JhcHBlck9iamVj
dCogd3JhcHBlZE9iamVjdCkgeyBtX3dyYXBwZWRPYmplY3QgPSB3cmFwcGVkT2JqZWN0OyB9Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNBUElXcmFwcGVyT2JqZWN0R0xp
Yi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQVBJ
V3JhcHBlck9iamVjdEdMaWIuY3BwCShyZXZpc2lvbiAyNzIyOTcpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvQVBJL2dsaWIvSlNBUElXcmFwcGVyT2JqZWN0R0xpYi5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJKU0FQ
SVdyYXBwZXJPYmplY3QuaCIKIAorI2luY2x1ZGUgIkFic3RyYWN0U2xvdFZpc2l0b3IuaCIKICNp
bmNsdWRlICJKU0NHTGliV3JhcHBlck9iamVjdC5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIK
ICNpbmNsdWRlICJKU0NhbGxiYWNrT2JqZWN0LmgiCkBAIC0zNiw3ICszNyw4IEBACiBjbGFzcyBK
U0FQSVdyYXBwZXJPYmplY3RIYW5kbGVPd25lciBmaW5hbCA6IHB1YmxpYyBKU0M6OldlYWtIYW5k
bGVPd25lciB7CiBwdWJsaWM6CiAgICAgdm9pZCBmaW5hbGl6ZShKU0M6OkhhbmRsZTxKU0M6OlVu
a25vd24+LCB2b2lkKikgZmluYWw7Ci0gICAgYm9vbCBpc1JlYWNoYWJsZUZyb21PcGFxdWVSb290
cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0LCBKU0M6OlNsb3RWaXNp
dG9yJiwgY29uc3QgY2hhcioqKSBmaW5hbDsKKy8vICAgICBib29sIGlzUmVhY2hhYmxlRnJvbU9w
YXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6
U2xvdFZpc2l0b3ImLCBjb25zdCBjaGFyKiopIGZpbmFsOworICAgIGJvb2wgaXNSZWFjaGFibGVG
cm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCwg
SlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiwgY29uc3QgY2hhcioqKSBmaW5hbDsKIH07CiAKIHN0
YXRpYyBKU0FQSVdyYXBwZXJPYmplY3RIYW5kbGVPd25lcioganNBUElXcmFwcGVyT2JqZWN0SGFu
ZGxlT3duZXIoKQpAQCAtNTUsNyArNTcsOCBAQCB2b2lkIEpTQVBJV3JhcHBlck9iamVjdEhhbmRs
ZU93bmVyOjpmaW5hCiAgICAgSlNDOjpXZWFrU2V0OjpkZWFsbG9jYXRlKEpTQzo6V2Vha0ltcGw6
OmFzV2Vha0ltcGwoaGFuZGxlLnNsb3QoKSkpOwogfQogCi1ib29sIEpTQVBJV3JhcHBlck9iamVj
dEhhbmRsZU93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6
OlVua25vd24+IGhhbmRsZSwgdm9pZCosIEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0
IGNoYXIqKikKKy8vIGJvb2wgSlNBUElXcmFwcGVyT2JqZWN0SGFuZGxlT3duZXI6OmlzUmVhY2hh
YmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lk
KiwgSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqKQorYm9vbCBKU0FQSVdy
YXBwZXJPYmplY3RIYW5kbGVPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpI
YW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0
b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKikKIHsKICAgICBKU0M6OkpTQVBJV3JhcHBlck9iamVj
dCogd3JhcHBlck9iamVjdCA9IEpTQzo6anNDYXN0PEpTQzo6SlNBUElXcmFwcGVyT2JqZWN0Kj4o
aGFuZGxlLmdldCgpLmFzQ2VsbCgpKTsKICAgICAvLyBXZSB1c2UgdGhlIEpTR2xvYmFsT2JqZWN0
IHdoZW4gcHJvY2Vzc2luZyB3ZWFrIGhhbmRsZXMgdG8gcHJldmVudCB0aGUgc2l0dWF0aW9uIHdo
ZXJlIHVzaW5nCkBAIC03Miw2ICs3NSw4IEBAIHN0YXRpYyBKU0NfREVDTEFSRV9IT1NUX0ZVTkNU
SU9OKGNvbnN0cnUKIHN0YXRpYyBKU0NfREVDTEFSRV9DVVNUT01fR0VUVEVSKGNhbGxiYWNrR2V0
dGVySlNBUElXcmFwcGVyT2JqZWN0Q2FsbGJhY2tPYmplY3QpOwogc3RhdGljIEpTQ19ERUNMQVJF
X0NVU1RPTV9HRVRURVIoc3RhdGljRnVuY3Rpb25HZXR0ZXJKU0FQSVdyYXBwZXJPYmplY3RDYWxs
YmFja09iamVjdCk7CiAKK0RFRklORV9URU1QTEFURV9WSVNJVF9DSElMRFJFTih0ZW1wbGF0ZTw+
LCBKU0NhbGxiYWNrT2JqZWN0PEpTQVBJV3JhcHBlck9iamVjdD4pOworCiB0ZW1wbGF0ZSA8PiBj
b25zdCBDbGFzc0luZm8gSlNDYWxsYmFja09iamVjdDxKU0FQSVdyYXBwZXJPYmplY3Q+OjpzX2lu
Zm8gPSB7ICJKU0FQSVdyYXBwZXJPYmplY3QiLCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBudWxs
cHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTQ2FsbGJhY2tPYmplY3QpIH07CiB0ZW1wbGF0ZTw+
IGNvbnN0IGJvb2wgSlNDYWxsYmFja09iamVjdDxKU0FQSVdyYXBwZXJPYmplY3Q+OjpuZWVkc0Rl
c3RydWN0aW9uID0gdHJ1ZTsKIApAQCAtMTU1LDkgKzE2MCwxMiBAQCB2b2lkIEpTQVBJV3JhcHBl
ck9iamVjdDo6c2V0V3JhcHBlZE9iamVjCiAgICAgbV93cmFwcGVkT2JqZWN0ID0gd3JhcHBlZE9i
amVjdDsKIH0KIAotdm9pZCBKU0FQSVdyYXBwZXJPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiBjZWxsLCBKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlz
aXRvcj4KK3ZvaWQgSlNBUElXcmFwcGVyT2JqZWN0Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwq
IGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbihjZWxs
LCB2aXNpdG9yKTsKIH0KIAorREVGSU5FX0VYUE9SVF9WSVNJVF9DSElMRFJFTihKU0FQSVdyYXBw
ZXJPYmplY3QpOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCShyZXZpc2lvbiAyNzIyOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAt
MTE1OCw2ICsxMTU4LDcgQEAKIAkJNjVCODM5MkUxQkFDQUQzNjAwNDRFODI0IC8qIENhY2hlZFJl
Y292ZXJ5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2
NUI4MzkyQzFCQUNBOTJBMDA0NEU4MjQgLyogQ2FjaGVkUmVjb3ZlcnkuaCAqLzsgfTsKIAkJNkEz
OENGQUExRTMyQjVBQjAwNjAyMDZGIC8qIEFzeW5jU3RhY2tUcmFjZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkEzOENGQTgxRTMyQjU4QjAwNjAyMDZG
IC8qIEFzeW5jU3RhY2tUcmFjZS5oICovOyB9OwogCQk2QUQyQ0I0RDE5QjkxNDAxMDAwNjU3MTkg
LyogRGVidWdnZXJFdmFsRW5hYmxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNkFEMkNCNEMxOUI5MTQwMTAwMDY1NzE5IC8qIERlYnVnZ2VyRXZhbEVu
YWJsZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owor
CQk2QkNDRUMwNDI1RDFGQTI3MDAwRjM5MUQgLyogVmVyaWZpZXJTbG90VmlzaXRvcklubGluZXMu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZCQ0NFQzAz
MjVEMUZBMjcwMDBGMzkxRCAvKiBWZXJpZmllclNsb3RWaXNpdG9ySW5saW5lcy5oICovOyB9Owog
CQk3MDExM0Q0QzFBOERCMDkzMDAzODQ4QzQgLyogSXRlcmF0b3JPcGVyYXRpb25zLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MDExM0Q0QTFBOERCMDkz
MDAzODQ4QzQgLyogSXRlcmF0b3JPcGVyYXRpb25zLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzAxM0NBOEMxQjQ5MUE5NDAwQ0FFNjEzIC8qIEpT
TWljcm90YXNrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA3MDEzQ0E4QTFCNDkxQTk0MDBDQUU2MTMgLyogSlNNaWNyb3Rhc2suaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3MDVCNDFBQzFBNkU1MDFFMDA3
MTY3NTcgLyogU3ltYm9sLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA3MDVCNDFBNDFBNkU1MDFFMDA3MTY3NTcgLyogU3ltYm9sLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTE5MTEsNiArMTkxMiw3IEBA
CiAJCUUzRkY3NTMzMUQ5Q0VBMTgwMEM3RTE2RCAvKiBET01KSVRHZXR0ZXJTZXR0ZXIuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUzRkY3NTJGMUQ5Q0VB
MTIwMEM3RTE2RCAvKiBET01KSVRHZXR0ZXJTZXR0ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlFNDlEQzE2QzEyRUYyOTRFMDAxODRBMUYgLyog
U291cmNlUHJvdmlkZXJDYWNoZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRTQ5REMxNTExMkVGMjcyMjAwMTg0QTFGIC8qIFNvdXJjZVByb3ZpZGVyQ2Fj
aGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlF
NDlEQzE2RDEyRUYyOTUzMDAxODRBMUYgLyogU291cmNlUHJvdmlkZXJDYWNoZUl0ZW0uaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0OURDMTQ5MTJFRjI2
MUEwMDE4NEExRiAvKiBTb3VyY2VQcm92aWRlckNhY2hlSXRlbS5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUZFMDQxNTUzMjUyRUMwNzMwMDkxRUI1
RCAvKiBTbG90VmlzaXRvck1hY3Jvcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRkUwNDE1NTIyNTJFQzA3MzAwOTFFQjVEIC8qIFNsb3RWaXNpdG9yTWFj
cm9zLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
RkUwNUZBRkQxRkU0Q0VEQTAwMDkzMjMwIC8qIERlcHJlY2F0ZWRJbnNwZWN0b3JWYWx1ZXMuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTkyRDZBMTEx
RkJENDkxRDAwMDI0NUY0IC8qIERlcHJlY2F0ZWRJbnNwZWN0b3JWYWx1ZXMuY3BwICovOyB9Owog
CQlGRTA4NkJDQTIxMjNERUZCMDAzRjI5MjkgLyogRW50cnlGcmFtZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUwODZCQzkyMTIzREVGQTAwM0YyOTI5
IC8qIEVudHJ5RnJhbWUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQlGRTBENEEwNjFBQjhERDBBMDAyRjU0QkYgLyogRXhlY3V0aW9uVGltZUxpbWl0
VGVzdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBG
RTBENEEwNDFBQjhERDBBMDAyRjU0QkYgLyogRXhlY3V0aW9uVGltZUxpbWl0VGVzdC5jcHAgKi87
IH07CkBAIC0xOTMzLDYgKzE5MzUsNyBAQAogCQlGRTFFMkMzRjIyNDBERDU4MDBGNkI3MjkgLyog
TWFjcm9Bc3NlbWJsZXJBUk02NEUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEZFMUUyQzNFMjI0MEQzMEIwMEY2QjcyOSAvKiBNYWNyb0Fzc2VtYmxlckFS
TTY0RS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CUZFMUUyQzQwMjI0MERENjIwMEY2QjcyOSAvKiBBUk02NEVBc3NlbWJsZXIuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFMUUyQzNEMjI0MEQyRjYwMEY2
QjcyOSAvKiBBUk02NEVBc3NlbWJsZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQlGRTIwQ0U5RTE1RjA0QTk1MDBERjM0MzAgLyogTExJbnRDTG9v
cC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUyMENF
OUMxNUYwNEE5NTAwREYzNDMwIC8qIExMSW50Q0xvb3AuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlGRTI4N0QwMjI1MkZCMkU4MDBENzIzRjkgLyog
VmVyaWZpZXJTbG90VmlzaXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRkUyODdEMDEyNTJGQjJFODAwRDcyM0Y5IC8qIFZlcmlmaWVyU2xvdFZpc2l0
b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlG
RTJBODc2MDFGMDIzODE2MDBFQjMxQjIgLyogTWluaW11bVJlc2VydmVkWm9uZVNpemUuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFMkE4NzVGMUYwMjM4
MTYwMEVCMzFCMiAvKiBNaW5pbXVtUmVzZXJ2ZWRab25lU2l6ZS5oICovOyB9OwogCQlGRTMwMjJE
MzFFM0Q3M0E1MDBCQUM0OTMgLyogU2lnaWxsQ3Jhc2hBbmFseXplci5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUzMDIyRDExRTNENzM5NjAwQkFDNDkz
IC8qIFNpZ2lsbENyYXNoQW5hbHl6ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQlGRTMwMjJENzFFNDI4NTczMDBCQUM0OTMgLyogVk1JbnNwZWN0
b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFMzAy
MkQ1MUU0Mjg1NjcwMEJBQzQ5MyAvKiBWTUluc3BlY3Rvci5oICovOyB9OwpAQCAtMTk3MCw2ICsx
OTczLDggQEAKIAkJRkU4MEMxOTcxRDc3NUNERDAwODUxMEMwIC8qIENhdGNoU2NvcGUuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFODBDMTk2MUQ3NzVC
MjcwMDg1MTBDMCAvKiBDYXRjaFNjb3BlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJRkU4REU1NEIyM0FDMURBRDAwNUM5MTQyIC8qIENhY2hlYWJs
ZUlkZW50aWZpZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEZFOERFNTRBMjNBQzFEQUQwMDVDOTE0MiAvKiBDYWNoZWFibGVJZGVudGlmaWVyLmggKi87
IH07CiAJCUZFOERFNTREMjNBQzFFODYwMDVDOTE0MiAvKiBDYWNoZWFibGVJZGVudGlmaWVySW5s
aW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkU4
REU1NEMyM0FDMUU4NjAwNUM5MTQyIC8qIENhY2hlYWJsZUlkZW50aWZpZXJJbmxpbmVzLmggKi87
IH07CisJCUZFOTEyQjRGMjUzMTE5MzMwMEZBQkRERiAvKiBBYnN0cmFjdFNsb3RWaXNpdG9yLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTkxMkI0RTI1
MzExOTMzMDBGQUJEREYgLyogQWJzdHJhY3RTbG90VmlzaXRvci5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUZFOTEyQjUxMjUzMTFBRDEwMEZBQkRE
RiAvKiBBYnN0cmFjdFNsb3RWaXNpdG9ySW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkU5MTJCNTAyNTMxMUFEMTAwRkFCRERGIC8qIEFic3Ry
YWN0U2xvdFZpc2l0b3JJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJRkU5OUIyNDkxQzI0QzNEMzAwQzgyMTU5IC8qIEpJVE5lZ0dlbmVy
YXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkU5
OUIyNDgxQzI0QjZEMzAwQzgyMTU5IC8qIEpJVE5lZ0dlbmVyYXRvci5oICovOyB9OwogCQlGRUEw
ODYyMDE4MkI3QTA0MDBGNkQ4NTEgLyogQnJlYWtwb2ludC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkVBMDg2MUUxODJCN0EwNDAwRjZEODUxIC8qIEJy
ZWFrcG9pbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQlGRUEwODYyMTE4MkI3QTA0MDBGNkQ4NTEgLyogRGVidWdnZXJQcmltaXRpdmVzLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRUEwODYxRjE4MkI3
QTA0MDBGNkQ4NTEgLyogRGVidWdnZXJQcmltaXRpdmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTM5ODIsNiArMzk4Nyw3IEBACiAJCTZBMzhD
RkE4MUUzMkI1OEIwMDYwMjA2RiAvKiBBc3luY1N0YWNrVHJhY2UuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gQXN5bmNTdGFja1RyYWNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTZBRDJDQjRDMTlCOTE0MDEwMDA2NTcxOSAvKiBEZWJ1Z2dlckV2YWxFbmFibGVy
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERlYnVnZ2VyRXZhbEVuYWJsZXIu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkJBOTNDOTU5MDQ4NEM1QkFEOTMxNkVB
IC8qIEpTU2NyaXB0RmV0Y2hlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBK
U1NjcmlwdEZldGNoZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNkJDQ0VDMDMy
NUQxRkEyNzAwMEYzOTFEIC8qIFZlcmlmaWVyU2xvdFZpc2l0b3JJbmxpbmVzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZlcmlmaWVyU2xvdFZpc2l0b3JJbmxpbmVzLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcwMTEzRDQ5MUE4REIwOTMwMDM4NDhDNCAvKiBJ
dGVyYXRvck9wZXJhdGlvbnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gSXRlcmF0b3JPcGVyYXRpb25zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NzAxMTNENEExQThEQjA5MzAwMzg0OEM0IC8qIEl0ZXJhdG9yT3BlcmF0aW9ucy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJdGVyYXRvck9wZXJhdGlvbnMuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzAxM0NBODkxQjQ5MUE5NDAwQ0FFNjEzIC8qIEpTTWljcm90
YXNrLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTTWljcm90YXNr
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTUyMDUsNiArNTIxMSw3IEBACiAJ
CUY2OTJBODg3MDI1NTU5N0QwMUZGNjBGNyAvKiBKU0NKU1ZhbHVlLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTQ0pTVmFsdWUuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IH07CiAJCUY3MzkyNjkxOERD
NjQzMzBBRkNERjBENyAvKiBKU1NvdXJjZUNvZGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gSlNTb3VyY2VDb2RlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJRkUwMDI2MjIyM0YzQUYzMzAwM0EzNThGIC8qIFdlYkFzc2VtYmx5LmFzbSAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYXNt
LmFzbTsgbmFtZSA9IFdlYkFzc2VtYmx5LmFzbTsgcGF0aCA9IGxsaW50L1dlYkFzc2VtYmx5LmFz
bTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkUwNDE1NTIyNTJFQzA3MzAwOTFFQjVE
IC8qIFNsb3RWaXNpdG9yTWFjcm9zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFNsb3RWaXNpdG9yTWFjcm9zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFMDg2
QkM5MjEyM0RFRkEwMDNGMjkyOSAvKiBFbnRyeUZyYW1lLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEVudHJ5RnJhbWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
RkUwRDRBMDQxQUI4REQwQTAwMkY1NEJGIC8qIEV4ZWN1dGlvblRpbWVMaW1pdFRlc3QuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gRXhlY3V0aW9uVGltZUxpbWl0VGVz
dC5jcHA7IHBhdGggPSBBUEkvdGVzdHMvRXhlY3V0aW9uVGltZUxpbWl0VGVzdC5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFMEQ0QTA1MUFCOEREMEEwMDJGNTRCRiAvKiBFeGVj
dXRpb25UaW1lTGltaXRUZXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEV4
ZWN1dGlvblRpbWVMaW1pdFRlc3QuaDsgcGF0aCA9IEFQSS90ZXN0cy9FeGVjdXRpb25UaW1lTGlt
aXRUZXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01MjE4LDYgKzUyMjUsNyBA
QAogCQlGRTEyMjAyNTFCRTdGNTY0MDAzOUU2RjIgLyogSklUQWRkR2VuZXJhdG9yLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpJVEFkZEdlbmVyYXRvci5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFMTIyMDI2MUJFN0Y1NjQwMDM5RTZGMiAvKiBK
SVRBZGRHZW5lcmF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSklUQWRk
R2VuZXJhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFMTQwOTA2MjA1NkYz
RkUwMENGRTMxOCAvKiBOYXRpdmVGdW5jdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBOYXRpdmVGdW5jdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlG
RTE3OENDMzI1NUYyMDU1MDBGRkQ2NzcgLyogQWJzdHJhY3RTbG90VmlzaXRvci5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBYnN0cmFjdFNsb3RWaXNpdG9yLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkUxODc5RkYxQkZCQzczQzAwMzhCQkNBIC8q
IEpJVE11bEdlbmVyYXRvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBKSVRNdWxHZW5lcmF0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTE4
N0EwMDFCRkJDNzNDMDAzOEJCQ0EgLyogSklUTXVsR2VuZXJhdG9yLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEpJVE11bEdlbmVyYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlGRTE4N0EwQTFDMDIyOTIzMDAzOEJCQ0EgLyogSklURGl2R2VuZXJhdG9yLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpJVERpdkdlbmVyYXRvci5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01MjM5LDcgKzUyNDcsOSBAQAogCQlG
RTFFMkMzRTIyNDBEMzBCMDBGNkI3MjkgLyogTWFjcm9Bc3NlbWJsZXJBUk02NEUuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWFjcm9Bc3NlbWJsZXJBUk02NEUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkUyMENFOUIxNUYwNEE5NTAwREYzNDMwIC8qIExMSW50
Q0xvb3AuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gTExJbnRDTG9v
cC5jcHA7IHBhdGggPSBsbGludC9MTEludENMb29wLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJRkUyMENFOUMxNUYwNEE5NTAwREYzNDMwIC8qIExMSW50Q0xvb3AuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gTExJbnRDTG9vcC5oOyBwYXRoID0gbGxpbnQvTExJ
bnRDTG9vcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRTI4N0QwMTI1MkZCMkU4
MDBENzIzRjkgLyogVmVyaWZpZXJTbG90VmlzaXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBWZXJpZmllclNsb3RWaXNpdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUZFMkE4NzVGMUYwMjM4MTYwMEVCMzFCMiAvKiBNaW5pbXVtUmVzZXJ2ZWRab25lU2l6
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBNaW5pbXVtUmVzZXJ2ZWRab25lU2l6ZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlGRTJCRDY2RTI1QzBEQzgyMDA5OTlEM0IgLyogVmVyaWZpZXJT
bG90VmlzaXRvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBWZXJp
ZmllclNsb3RWaXNpdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkUyRTZB
N0ExRDZFQTVGRTAwNjBGODk2IC8qIFRocm93U2NvcGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gVGhyb3dTY29wZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUZFMzAyMkQwMUUzRDczOTYwMEJBQzQ5MyAvKiBTaWdpbGxDcmFzaEFuYWx5emVyLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNpZ2lsbENyYXNoQW5hbHl6
ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTMwMjJEMTFFM0Q3Mzk2MDBC
QUM0OTMgLyogU2lnaWxsQ3Jhc2hBbmFseXplci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBTaWdpbGxDcmFzaEFuYWx5emVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC01MzEyLDYgKzUzMjIsOCBAQAogCQlGRThERTU0QzIzQUMxRTg2MDA1QzkxNDIgLyogQ2Fj
aGVhYmxlSWRlbnRpZmllcklubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gQ2FjaGVhYmxlSWRlbnRpZmllcklubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJRkU4REU1NEUyM0FDM0E4RTAwNUM5MTQyIC8qIENhY2hlYWJsZUlkZW50aWZpZXIuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gQ2FjaGVhYmxlSWRlbnRpZmllci5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUZFOTBCQjNBMUI3Q0Y2NEUwMDZCM0YwMyAvKiBWTUlubGluZXMu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVk1JbmxpbmVzLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUZFOTEyQjRFMjUzMTE5MzMwMEZBQkRERiAvKiBBYnN0cmFj
dFNsb3RWaXNpdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFic3RyYWN0
U2xvdFZpc2l0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkU5MTJCNTAyNTMx
MUFEMTAwRkFCRERGIC8qIEFic3RyYWN0U2xvdFZpc2l0b3JJbmxpbmVzLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFic3RyYWN0U2xvdFZpc2l0b3JJbmxpbmVzLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFOThCNUI2MUJCOUFFMTEwMDczRTdBNiAvKiBKSVRT
dWJHZW5lcmF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSklUU3ViR2Vu
ZXJhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFOTlCMjQ3MUMyNEI2RDMw
MEM4MjE1OSAvKiBKSVROZWdHZW5lcmF0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gSklUTmVnR2VuZXJhdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJRkU5OUIyNDgxQzI0QjZEMzAwQzgyMTU5IC8qIEpJVE5lZ0dlbmVyYXRvci5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKSVROZWdHZW5lcmF0b3IuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTYyNjEsNiArNjI3Myw5IEBACiAJCTE0MkUzMTJBMTM0RkYw
QTYwMEFGQURCNSAvKiBoZWFwICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJl
biA9ICgKKwkJCQlGRTE3OENDMzI1NUYyMDU1MDBGRkQ2NzcgLyogQWJzdHJhY3RTbG90VmlzaXRv
ci5jcHAgKi8sCisJCQkJRkU5MTJCNEUyNTMxMTkzMzAwRkFCRERGIC8qIEFic3RyYWN0U2xvdFZp
c2l0b3IuaCAqLywKKwkJCQlGRTkxMkI1MDI1MzExQUQxMDBGQUJEREYgLyogQWJzdHJhY3RTbG90
VmlzaXRvcklubGluZXMuaCAqLywKIAkJCQkwRkVDM0M1MDFGMzNBNDE2MDBGNTlCNkMgLyogQWxp
Z25lZE1lbW9yeUFsbG9jYXRvci5jcHAgKi8sCiAJCQkJMEZFQzNDNTExRjMzQTQxNjAwRjU5QjZD
IC8qIEFsaWduZWRNZW1vcnlBbGxvY2F0b3IuaCAqLywKIAkJCQkwRkE3NjIwQTFEQjk1OUY2MDBC
N0EyRkQgLyogQWxsb2NhdGluZ1Njb3BlLmggKi8sCkBAIC02NDE3LDYgKzY0MzIsNyBAQAogCQkJ
CUMyMjU0OTQyMTVGN0RCQUEwMDY1RTg5OCAvKiBTbG90VmlzaXRvci5jcHAgKi8sCiAJCQkJMTRC
QTc4RjAxM0FBQjg4RjAwNUI3QzJDIC8qIFNsb3RWaXNpdG9yLmggKi8sCiAJCQkJMEZDQjQwODUx
NUMwQTNDMzAwNDg5MzJCIC8qIFNsb3RWaXNpdG9ySW5saW5lcy5oICovLAorCQkJCUZFMDQxNTUy
MjUyRUMwNzMwMDkxRUI1RCAvKiBTbG90VmlzaXRvck1hY3Jvcy5oICovLAogCQkJCTBGREU4N0ZB
MURGRTZFNTAwMDY0QzM5MCAvKiBTcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyLmNwcCAqLywKIAkJ
CQkwRkRFODdGQjFERkU2RTUwMDA2NEMzOTAgLyogU3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlci5o
ICovLAogCQkJCTBGNEY4Mjg5MUUzMUI5NzEwMDc1MTg0QyAvKiBTdG9jaGFzdGljU3BhY2VUaW1l
TXV0YXRvclNjaGVkdWxlci5jcHAgKi8sCkBAIC02NDM0LDYgKzY0NTAsOSBAQAogCQkJCTBGMUZC
MzhBMUUxNzNBNjIwMEE5QkU1MCAvKiBTeW5jaHJvbm91c1N0b3BUaGVXb3JsZE11dGF0b3JTY2hl
ZHVsZXIuY3BwICovLAogCQkJCTBGMUZCMzhCMUUxNzNBNjIwMEE5QkU1MCAvKiBTeW5jaHJvbm91
c1N0b3BUaGVXb3JsZE11dGF0b3JTY2hlZHVsZXIuaCAqLywKIAkJCQkxNDE0NDhDQzEzQTE3ODM3
MDBGNUJBMUEgLyogVGlueUJsb29tRmlsdGVyLmggKi8sCisJCQkJRkUyQkQ2NkUyNUMwREM4MjAw
OTk5RDNCIC8qIFZlcmlmaWVyU2xvdFZpc2l0b3IuY3BwICovLAorCQkJCUZFMjg3RDAxMjUyRkIy
RTgwMEQ3MjNGOSAvKiBWZXJpZmllclNsb3RWaXNpdG9yLmggKi8sCisJCQkJNkJDQ0VDMDMyNUQx
RkEyNzAwMEYzOTFEIC8qIFZlcmlmaWVyU2xvdFZpc2l0b3JJbmxpbmVzLmggKi8sCiAJCQkJMEY0
RDhDNzIxRkM3QTk3MzAwMUQzMkFDIC8qIFZpc2l0Q291bnRlci5oICovLAogCQkJCTBGOTUyQTlG
MURGNzg2MDcwMEUwNkZCRCAvKiBWaXNpdFJhY2VLZXkuY3BwICovLAogCQkJCTBGOTUyQUEwMURG
Nzg2MDcwMEUwNkZCRCAvKiBWaXNpdFJhY2VLZXkuaCAqLywKQEAgLTkyNjUsNiArOTI4NCw3IEBA
CiAJCQkJMTQ3QjgzQUMwRTZEQjhDOTAwNDc3NUE0IC8qIEJhdGNoZWRUcmFuc2l0aW9uT3B0aW1p
emVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMzVFODlGRDI1QzUwRjg3MDA3MUVFMUUgLyogQmln
SW50NjRBcnJheS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODY5NzZFNUYxRkEzRThCQzAwRTdDNEUx
IC8qIEJpZ0ludENvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKKwkJCQlGRTA0MTU1MzI1MkVD
MDczMDA5MUVCNUQgLyogU2xvdFZpc2l0b3JNYWNyb3MuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2
NjczOUQyMTNCRkRFNzEwMDIzRDg3QyAvKiBCaWdJbnRlZ2VyLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk4NjE4MTY3NzFGQjc5MjQyMDBFQ0M0RUMgLyogQmlnSW50T2JqZWN0LmggaW4gSGVhZGVycyAq
LywKIAkJCQk4Njk3NkU1RTFGQTNFOEI2MDBFN0M0RTEgLyogQmlnSW50UHJvdG90eXBlLmggaW4g
SGVhZGVycyAqLywKQEAgLTk1NDMsNiArOTU2Myw3IEBACiAJCQkJMEZEODJFNTcxNDFEQUYxMDAw
MTc5Qzk0IC8qIERGR09TUkVudHJ5LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkQ4QTMyNjE3RDUx
RjU3MDBDQTJDNDAgLyogREZHT1NSRW50cnlwb2ludENyZWF0aW9uUGhhc2UuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGQzA5NzZBMTQ2OEE2RjcwMENGMjQ0MiAvKiBERkdPU1JFeGl0LmggaW4gSGVh
ZGVycyAqLywKKwkJCQlGRTkxMkI0RjI1MzExOTMzMDBGQUJEREYgLyogQWJzdHJhY3RTbG90Vmlz
aXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyMzVCRUMxNzE3OEU3MzAwNjkwQzdGIC8qIERG
R09TUkV4aXRCYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkZCOTIxQzE2RDAyRjExMDA1NUE1
REIgLyogREZHT1NSRXhpdENvbXBpbGF0aW9uSW5mby5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY3
MDI1QUExNzE0QjBGQzAwMzgyQzBFIC8qIERGR09TUkV4aXRDb21waWxlckNvbW1vbi5oIGluIEhl
YWRlcnMgKi8sCkBAIC05ODI4LDYgKzk4NDksNyBAQAogCQkJCUE1MTNFNUJFMTg1QkZBQ0MwMDdF
OTVBRCAvKiBJbmplY3RlZFNjcmlwdEhvc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1MTNFNUNC
MTg1Rjk2MjQwMDdFOTVBRCAvKiBJbmplY3RlZFNjcmlwdE1hbmFnZXIuaCBpbiBIZWFkZXJzICov
LAogCQkJCUE1ODQwRTIxMTg3QjdCODYwMDg0M0IxMCAvKiBJbmplY3RlZFNjcmlwdE1vZHVsZS5o
IGluIEhlYWRlcnMgKi8sCisJCQkJRkUyODdEMDIyNTJGQjJFODAwRDcyM0Y5IC8qIFZlcmlmaWVy
U2xvdFZpc2l0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1MTNFNUM3MTg1Rjk0NDYwMDdFOTVB
RCAvKiBJbmplY3RlZFNjcmlwdFNvdXJjZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTk1OUU5MzIx
QkQxODI3OTAwMUFBNDEzIC8qIGlubGluZS1hbmQtbWluaWZ5LXN0eWxlc2hlZXRzLWFuZC1zY3Jp
cHRzLnB5IGluIEhlYWRlcnMgKi8sCiAJCQkJNzkwNUJCNjkxRDEyMDUwRTAwMTlGRTU3IC8qIElu
bGluZUFjY2Vzcy5oIGluIEhlYWRlcnMgKi8sCkBAIC0xMDAwMyw2ICsxMDAyNSw3IEBACiAJCQkJ
QTU4QzAyNDIxOEU0QTQxQTAwMDMyQkM1IC8qIEpTQ29udGV4dFByaXZhdGUuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUJDMThDNDFFMEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU0NvbnRleHRSZWYuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUE1RUE3MEVFMTlGNUI1QzQwMDk4RjVFQyAvKiBKU0NvbnRleHRSZWZJ
bnNwZWN0b3JTdXBwb3J0LmggaW4gSGVhZGVycyAqLywKKwkJCQk2QkNDRUMwNDI1RDFGQTI3MDAw
RjM5MUQgLyogVmVyaWZpZXJTbG90VmlzaXRvcklubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUE1RDJFNjY1MTk1RTE3NDAwMEE1MThFNyAvKiBKU0NvbnRleHRSZWZJbnRlcm5hbC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMTQ4Q0QxRDgxMDhDRjkwMjAwODE2M0M2IC8qIEpTQ29udGV4dFJlZlBy
aXZhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUZFNzQ5N0U2MjA5MDAxQjEwMDAzNTY1QiAvKiBK
U0NQdHJUYWcuaCBpbiBIZWFkZXJzICovLApAQCAtMTAxMzMsNiArMTAxNTYsNyBAQAogCQkJCTc5
NUFDNjE4MjBBMjM1NUUwMDUyQzc2QyAvKiBKU1ZpcnR1YWxNYWNoaW5lUHJpdmF0ZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQTdDQTNBRTgxN0RBNDFBRTAwNjUzOEFGIC8qIEpTV2Vha01hcC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQTc0ODJFOTMxMTZBN0NBRDAwM0IwNzEyIC8qIEpTV2Vha09iamVj
dE1hcFJlZkludGVybmFsLmggaW4gSGVhZGVycyAqLywKKwkJCQlGRTkxMkI1MTI1MzExQUQxMDBG
QUJEREYgLyogQWJzdHJhY3RTbG90VmlzaXRvcklubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUE3NDgyQjkzMTE2NzExNDcwMDNCMDcxMiAvKiBKU1dlYWtPYmplY3RNYXBSZWZQcml2YXRlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk1MzlCRkJCMDIyQUQzQ0RDMDAyM0Y0QzAgLyogSlNXZWFrT2Jq
ZWN0UmVmLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjBCMjg2QjFFQjhFNkNGMDAwRUI1RDIgLyog
SlNXZWFrUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvU2NyaXB0cy93a2J1aWx0aW5zL2J1aWx0aW5zX2dlbmVyYXRlX2ludGVybmFsc193cmFwcGVy
X2hlYWRlci5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy93
a2J1aWx0aW5zL2J1aWx0aW5zX2dlbmVyYXRlX2ludGVybmFsc193cmFwcGVyX2hlYWRlci5weQko
cmV2aXNpb24gMjcyMjk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvd2tidWls
dGlucy9idWlsdGluc19nZW5lcmF0ZV9pbnRlcm5hbHNfd3JhcHBlcl9oZWFkZXIucHkJKHdvcmtp
bmcgY29weSkKQEAgLTkzLDcgKzkzLDcgQEAgY2xhc3MgQnVpbHRpbnNJbnRlcm5hbHNXcmFwcGVy
SGVhZGVyR2VuZQogCiAgICAgZGVmIGdlbmVyYXRlX21ldGhvZHMoc2VsZik6CiAgICAgICAgIHJl
dHVybiAiIiIKLSAgICB2b2lkIHZpc2l0KEpTQzo6U2xvdFZpc2l0b3ImKTsKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIHZpc2l0KFZpc2l0b3ImKTsKICAgICB2b2lkIGluaXRp
YWxpemUoSlNET01HbG9iYWxPYmplY3QmKTsKICIiIgogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvU2NyaXB0cy93a2J1aWx0aW5zL2J1aWx0aW5zX2dlbmVyYXRlX2ludGVybmFsc193cmFw
cGVyX2ltcGxlbWVudGF0aW9uLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9TY3JpcHRzL3drYnVpbHRpbnMvYnVpbHRpbnNfZ2VuZXJhdGVfaW50ZXJuYWxzX3dyYXBwZXJf
aW1wbGVtZW50YXRpb24ucHkJKHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9TY3JpcHRzL3drYnVpbHRpbnMvYnVpbHRpbnNfZ2VuZXJhdGVfaW50ZXJuYWxzX3dyYXBw
ZXJfaW1wbGVtZW50YXRpb24ucHkJKHdvcmtpbmcgY29weSkKQEAgLTEyMCwxMyArMTIwLDE2IEBA
IGNsYXNzIEJ1aWx0aW5zSW50ZXJuYWxzV3JhcHBlckltcGxlbWVudGEKICAgICAgICAgcmV0dXJu
ICdcbicuam9pbihsaW5lcykKIAogICAgIGRlZiBnZW5lcmF0ZV92aXNpdF9tZXRob2Qoc2VsZik6
Ci0gICAgICAgIGxpbmVzID0gWyJ2b2lkIEpTQnVpbHRpbkludGVybmFsRnVuY3Rpb25zOjp2aXNp
dChKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKSIsCisgICAgICAgIGxpbmVzID0gWyJ0ZW1wbGF0
ZTx0eXBlbmFtZSBWaXNpdG9yPiIsCisgICAgICAgICAgICAgICAgICJ2b2lkIEpTQnVpbHRpbklu
dGVybmFsRnVuY3Rpb25zOjp2aXNpdChWaXNpdG9yJiB2aXNpdG9yKSIsCiAgICAgICAgICAgICAg
ICAgICJ7Il0KICAgICAgICAgZm9yIG9iamVjdCBpbiBzZWxmLmludGVybmFsczoKICAgICAgICAg
ICAgIHZpc2l0ID0gIiAgICAlcy52aXNpdCh2aXNpdG9yKTsiICUgc2VsZi5tZW1iZXJfbmFtZShv
YmplY3QpCiAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoQnVpbHRpbnNHZW5lcmF0b3Iud3JhcF93
aXRoX2d1YXJkKG9iamVjdC5hbm5vdGF0aW9ucy5nZXQoJ2NvbmRpdGlvbmFsJyksIHZpc2l0KSkK
ICAgICAgICAgbGluZXMuYXBwZW5kKCIgICAgVU5VU0VEX1BBUkFNKHZpc2l0b3IpOyIpCiAgICAg
ICAgIGxpbmVzLmFwcGVuZCgifVxuIikKKyAgICAgICAgbGluZXMuYXBwZW5kKCJ0ZW1wbGF0ZSB2
b2lkIEpTQnVpbHRpbkludGVybmFsRnVuY3Rpb25zOjp2aXNpdChBYnN0cmFjdFNsb3RWaXNpdG9y
Jik7IikKKyAgICAgICAgbGluZXMuYXBwZW5kKCJ0ZW1wbGF0ZSB2b2lkIEpTQnVpbHRpbkludGVy
bmFsRnVuY3Rpb25zOjp2aXNpdChTbG90VmlzaXRvciYpO1xuIikKICAgICAgICAgcmV0dXJuICdc
bicuam9pbihsaW5lcykKIAogICAgIGRlZiBfZ2VuZXJhdGVfaW5pdGlhbGl6ZV9zdGF0aWNfZ2xv
YmFscyhzZWxmKToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL3drYnVpbHRp
bnMvYnVpbHRpbnNfdGVtcGxhdGVzLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9TY3JpcHRzL3drYnVpbHRpbnMvYnVpbHRpbnNfdGVtcGxhdGVzLnB5CShyZXZpc2lvbiAy
NzIyOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy93a2J1aWx0aW5zL2J1aWx0
aW5zX3RlbXBsYXRlcy5weQkod29ya2luZyBjb3B5KQpAQCAtMTg4LDcgKzE4OCw4IEBAIHB1Ymxp
YzoKICAgICBleHBsaWNpdCAke29iamVjdE5hbWV9QnVpbHRpbkZ1bmN0aW9ucyhKU0M6OlZNJiB2
bSkgOiBtX3ZtKHZtKSB7IH0KIAogICAgIHZvaWQgaW5pdChKU0M6OkpTR2xvYmFsT2JqZWN0Jik7
Ci0gICAgdm9pZCB2aXNpdChKU0M6OlNsb3RWaXNpdG9yJik7CisgICAgLy8gbWxhbSB2b2lkIHZp
c2l0KEpTQzo6U2xvdFZpc2l0b3ImKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2
b2lkIHZpc2l0KFZpc2l0b3ImKTsKIAogcHVibGljOgogICAgIEpTQzo6Vk0mIG1fdm07CkBAIC0y
MDcsMTAgKzIwOCwxNSBAQCBpbmxpbmUgdm9pZCAke29iamVjdE5hbWV9QnVpbHRpbkZ1bmN0aW9u
CiAjdW5kZWYgRVhQT1JUX0ZVTkNUSU9OCiB9CiAKLWlubGluZSB2b2lkICR7b2JqZWN0TmFtZX1C
dWlsdGluRnVuY3Rpb25zOjp2aXNpdChKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxh
dGU8dHlwZW5hbWUgVmlzaXRvcj4KK2lubGluZSB2b2lkICR7b2JqZWN0TmFtZX1CdWlsdGluRnVu
Y3Rpb25zOjp2aXNpdChWaXNpdG9yJiB2aXNpdG9yKQogewogI2RlZmluZSBWSVNJVF9GVU5DVElP
TihuYW1lKSB2aXNpdG9yLmFwcGVuZChtXyMjbmFtZSMjRnVuY3Rpb24pOwogICAgICR7bWFjcm9Q
cmVmaXh9X0ZPUkVBQ0hfJHtvYmplY3RNYWNyb31fQlVJTFRJTl9GVU5DVElPTl9OQU1FKFZJU0lU
X0ZVTkNUSU9OKQogI3VuZGVmIFZJU0lUX0ZVTkNUSU9OCiB9CisKK3RlbXBsYXRlIHZvaWQgJHtv
YmplY3ROYW1lfUJ1aWx0aW5GdW5jdGlvbnM6OnZpc2l0KEpTQzo6QWJzdHJhY3RTbG90VmlzaXRv
ciYpOwordGVtcGxhdGUgdm9pZCAke29iamVjdE5hbWV9QnVpbHRpbkZ1bmN0aW9uczo6dmlzaXQo
SlNDOjpTbG90VmlzaXRvciYpOworCiAiIiIpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCShyZXZpc2lvbiAyNzIyOTcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTczMywyMiArNzMzLDI0IEBAIGJvb2wgQWNjZXNzQ2FzZTo6dmlzaXRXZWFrKFZNJiB2bSkgY29u
c3QKICAgICByZXR1cm4gaXNWYWxpZDsKIH0KIAotYm9vbCBBY2Nlc3NDYXNlOjpwcm9wYWdhdGVU
cmFuc2l0aW9ucyhTbG90VmlzaXRvciYgdmlzaXRvcikgY29uc3QKK3RlbXBsYXRlPHR5cGVuYW1l
IFZpc2l0b3I+Citib29sIEFjY2Vzc0Nhc2U6OnByb3BhZ2F0ZVRyYW5zaXRpb25zKFZpc2l0b3Im
IHZpc2l0b3IpIGNvbnN0CiB7CiAgICAgYm9vbCByZXN1bHQgPSB0cnVlOwogCiAgICAgaWYgKG1f
c3RydWN0dXJlKQotICAgICAgICByZXN1bHQgJj0gbV9zdHJ1Y3R1cmUtPm1hcmtJZkNoZWFwKHZp
c2l0b3IpOworICAgICAgICByZXN1bHQgJj0gbV9zdHJ1Y3R1cmUtPm1hcmtJZkNoZWFwMSh2aXNp
dG9yKTsKIAogICAgIGlmIChtX3BvbHlQcm90b0FjY2Vzc0NoYWluKSB7CiAgICAgICAgIGZvciAo
U3RydWN0dXJlSUQgc3RydWN0dXJlSUQgOiBtX3BvbHlQcm90b0FjY2Vzc0NoYWluLT5jaGFpbigp
KQotICAgICAgICAgICAgcmVzdWx0ICY9IHZpc2l0b3Iudm0oKS5nZXRTdHJ1Y3R1cmUoc3RydWN0
dXJlSUQpLT5tYXJrSWZDaGVhcCh2aXNpdG9yKTsKKyAgICAgICAgICAgIHJlc3VsdCAmPSB2aXNp
dG9yLnZtKCkuZ2V0U3RydWN0dXJlKHN0cnVjdHVyZUlEKS0+bWFya0lmQ2hlYXAxKHZpc2l0b3Ip
OwogICAgIH0KIAogICAgIHN3aXRjaCAobV90eXBlKSB7CiAgICAgY2FzZSBUcmFuc2l0aW9uOgog
ICAgIGNhc2UgRGVsZXRlOgotICAgICAgICBpZiAodmlzaXRvci52bSgpLmhlYXAuaXNNYXJrZWQo
bV9zdHJ1Y3R1cmUtPnByZXZpb3VzSUQoKSkpCisvLyAgICAgICAgaWYgKHZpc2l0b3Iudm0oKS5o
ZWFwLmlzTWFya2VkKG1fc3RydWN0dXJlLT5wcmV2aW91c0lEKCkpKQorICAgICAgICBpZiAodmlz
aXRvci5pc01hcmtlZChtX3N0cnVjdHVyZS0+cHJldmlvdXNJRCgpKSkKICAgICAgICAgICAgIHZp
c2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQobV9zdHJ1Y3R1cmUuZ2V0KCkpOwogICAgICAgICBlbHNl
CiAgICAgICAgICAgICByZXN1bHQgPSBmYWxzZTsKQEAgLTc2MCwxMSArNzYyLDE5IEBAIGJvb2wg
QWNjZXNzQ2FzZTo6cHJvcGFnYXRlVHJhbnNpdGlvbnMoU2wKICAgICByZXR1cm4gcmVzdWx0Owog
fQogCi12b2lkIEFjY2Vzc0Nhc2U6OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9y
KSBjb25zdAordGVtcGxhdGUgYm9vbCBBY2Nlc3NDYXNlOjpwcm9wYWdhdGVUcmFuc2l0aW9ucyhT
bG90VmlzaXRvciYpIGNvbnN0OwordGVtcGxhdGUgYm9vbCBBY2Nlc3NDYXNlOjpwcm9wYWdhdGVU
cmFuc2l0aW9ucyhBYnN0cmFjdFNsb3RWaXNpdG9yJikgY29uc3Q7CisKKy8vdGVtcGxhdGU8dHlw
ZW5hbWUgVmlzaXRvcj4KKy8vdm9pZCBBY2Nlc3NDYXNlOjp2aXNpdEFnZ3JlZ2F0ZShWaXNpdG9y
JiB2aXNpdG9yKSBjb25zdAordm9pZCBBY2Nlc3NDYXNlOjp2aXNpdEFnZ3JlZ2F0ZTEoQWJzdHJh
Y3RTbG90VmlzaXRvciYgdmlzaXRvcikgY29uc3QKIHsKLSAgICBtX2lkZW50aWZpZXIudmlzaXRB
Z2dyZWdhdGUodmlzaXRvcik7CisgICAgbV9pZGVudGlmaWVyLnZpc2l0QWdncmVnYXRlMSh2aXNp
dG9yKTsKIH0KIAorLy90ZW1wbGF0ZSB2b2lkIEFjY2Vzc0Nhc2U6OnZpc2l0QWdncmVnYXRlKFNs
b3RWaXNpdG9yJikgY29uc3Q7CisvL3RlbXBsYXRlIHZvaWQgQWNjZXNzQ2FzZTo6dmlzaXRBZ2dy
ZWdhdGUoVmVyaWZpZXJTbG90VmlzaXRvciYpIGNvbnN0OworCiB2b2lkIEFjY2Vzc0Nhc2U6Omdl
bmVyYXRlV2l0aEd1YXJkKAogICAgIEFjY2Vzc0dlbmVyYXRpb25TdGF0ZSYgc3RhdGUsIENDYWxs
SGVscGVyczo6SnVtcExpc3QmIGZhbGxUaHJvdWdoKQogewpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5oCShyZXZpc2lvbiAyNzIyOTcpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yNzUsOSArMjc1LDEwIEBAIHByaXZhdGU6CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rv
cj4KICAgICB2b2lkIGZvckVhY2hEZXBlbmRlbnRDZWxsKFZNJiwgY29uc3QgRnVuY3RvciYpIGNv
bnN0OwogCi0gICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYpIGNvbnN0OworLy8g
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCB2aXNpdEFnZ3JlZ2F0ZShWaXNpdG9y
JikgY29uc3Q7CisgICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZTEoQWJzdHJhY3RTbG90VmlzaXRvciYp
IGNvbnN0OwogICAgIGJvb2wgdmlzaXRXZWFrKFZNJikgY29uc3Q7Ci0gICAgYm9vbCBwcm9wYWdh
dGVUcmFuc2l0aW9ucyhTbG90VmlzaXRvciYpIGNvbnN0OworICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFZpc2l0b3I+IGJvb2wgcHJvcGFnYXRlVHJhbnNpdGlvbnMoVmlzaXRvciYpIGNvbnN0OwogCiAg
ICAgLy8gRklYTUU6IFRoaXMgb25seSBleGlzdHMgYmVjYXVzZSBvZiBob3cgQWNjZXNzQ2FzZSBw
dXRzIHBvc3QtZ2VuZXJhdGlvbiB0aGluZ3MgaW50byBpdHNlbGYuCiAgICAgLy8gaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NjQ1NgpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0J5VmFsSW5mby5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5VmFsSW5mby5jcHAJKHJldmlzaW9uIDI3MjI5NykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeVZhbEluZm8uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00LDcgKzQsNyBAQAogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKICAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogMS4gUmVkaXN0cmlidXRWZXJpZmllclNsb3RWaXNpdG9yaW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CiAgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCiAgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAogICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQpAQCAtMzIsMTEgKzMyLDE2IEBA
IG5hbWVzcGFjZSBKU0MgewogCiAjaWYgRU5BQkxFKEpJVCkKIAotdm9pZCBCeVZhbEluZm86OnZp
c2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy90ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPgorLy92b2lkIEJ5VmFsSW5mbzo6dmlzaXRBZ2dyZWdhdGUoVmlzaXRvciYgdmlzaXRv
cikKK3ZvaWQgQnlWYWxJbmZvOjp2aXNpdEFnZ3JlZ2F0ZTEoQWJzdHJhY3RTbG90VmlzaXRvciYg
dmlzaXRvcikKIHsKLSAgICBjYWNoZWRJZC52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKKyAgICBj
YWNoZWRJZC52aXNpdEFnZ3JlZ2F0ZTEodmlzaXRvcik7CiB9CiAKKy8vdGVtcGxhdGUgdm9pZCBC
eVZhbEluZm86OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJik7CisvL3RlbXBsYXRlIHZvaWQg
QnlWYWxJbmZvOjp2aXNpdEFnZ3JlZ2F0ZShWZXJpZmllclNsb3RWaXNpdG9yJik7CisKICNlbmRp
ZiAvLyBFTkFCTEUoSklUKQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9CeVZhbEluZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnlWYWxJbmZvLmgJKHJldmlzaW9uIDI3MjI5NykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeVZhbEluZm8uaAkod29ya2luZyBjb3B5KQpA
QCAtMjYwLDcgKzI2MCw4IEBAIHN0cnVjdCBCeVZhbEluZm8gewogICAgICAgICB0aGlzLT5zZWVu
ID0gZmFsc2U7CiAgICAgfQogCi0gICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYp
OworLy8gICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCB2aXNpdEFnZ3JlZ2F0ZShW
aXNpdG9yJik7CisgICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZTEoQWJzdHJhY3RTbG90VmlzaXRvciYp
OwogCiAgICAgQ29kZUxvY2F0aW9uSnVtcDxKU0ludGVybmFsUHRyVGFnPiBub3RJbmRleEp1bXA7
CiAgICAgQ29kZUxvY2F0aW9uSnVtcDxKU0ludGVybmFsUHRyVGFnPiBiYWRUeXBlSnVtcDsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZp
c2lvbiAyNzIyOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2Nr
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsOSBAQAogI2luY2x1ZGUgImNvbmZpZy5o
IgogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgogCisjaW5jbHVkZSAiQWJzdHJhY3RTbG90VmlzaXRv
ci5oIiAvLyBtbGFtIFRFU1QKKyNpbmNsdWRlICJQb2x5bW9ycGhpY0FjY2Vzcy5oIiAvLyBtbGFt
IFRFU1QKKwogI2luY2x1ZGUgIkFyaXRoUHJvZmlsZS5oIgogI2luY2x1ZGUgIkJhc2ljQmxvY2tM
b2NhdGlvbi5oIgogI2luY2x1ZGUgIkJ5VmFsSW5mby5oIgpAQCAtOTk4LDcgKzEwMDEsOCBAQCBz
aXplX3QgQ29kZUJsb2NrOjplc3RpbWF0ZWRTaXplKEpTQ2VsbCogCiAgICAgcmV0dXJuIEJhc2U6
OmVzdGltYXRlZFNpemUoY2VsbCwgdm0pICsgZXh0cmFNZW1vcnlBbGxvY2F0ZWQ7CiB9CiAKLXZv
aWQgQ29kZUJsb2NrOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZp
c2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBDb2RlQmxvY2s6OnZpc2l0
Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBDb2Rl
QmxvY2sqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8Q29kZUJsb2NrKj4oY2VsbCk7CiAgICAgQVNTRVJU
X0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtMTAwNyw3ICsxMDEx
LDEwIEBAIHZvaWQgQ29kZUJsb2NrOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2UKICAgICB0aGlz
T2JqZWN0LT52aXNpdENoaWxkcmVuKHZpc2l0b3IpOwogfQogCi12b2lkIENvZGVCbG9jazo6dmlz
aXRDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK0RFRklORV9WSVNJVF9DSElMRFJFTihD
b2RlQmxvY2spOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBDb2RlQmxvY2s6
OnZpc2l0Q2hpbGRyZW5JbXBsKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgQ29uY3VycmVudEpT
TG9ja2VyIGxvY2tlcihtX2xvY2spOwogICAgIGlmIChDb2RlQmxvY2sqIG90aGVyQmxvY2sgPSBz
cGVjaWFsT1NSRW50cnlCbG9ja09yTnVsbCgpKQpAQCAtMTAyNiwxMiArMTAzMywxNCBAQCB2b2lk
IENvZGVCbG9jazo6dmlzaXRDaGlsZHJlbihTbG90VmlzaXRvCiAgICAgVk06OlNwYWNlQW5kU2V0
OjpzZXRGb3IoKnN1YnNwYWNlKCkpLmFkZCh0aGlzKTsKIH0KIAotYm9vbCBDb2RlQmxvY2s6OnNo
b3VsZFZpc2l0U3Ryb25nbHkoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiBsb2NrZXIpCitERUZJ
TkVfSU5TVEFOQ0VfVklTSVRfQ0hJTERSRU4oQ29kZUJsb2NrKTsKKworYm9vbCBDb2RlQmxvY2s6
OnNob3VsZFZpc2l0U3Ryb25nbHkoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiBsb2NrZXIsIEFi
c3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgaWYgKE9wdGlvbnM6OmZvcmNlQ29k
ZUJsb2NrTGl2ZW5lc3MoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBpZiAoc2hvdWxk
SmV0dGlzb25EdWVUb09sZEFnZShsb2NrZXIpKQorICAgIGlmIChzaG91bGRKZXR0aXNvbkR1ZVRv
T2xkQWdlKGxvY2tlciwgdmlzaXRvcikpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIC8v
IEludGVycHJldGVyIGFuZCBCYXNlbGluZSBKSVQgQ29kZUJsb2NrcyBkb24ndCBuZWVkIHRvIGJl
IGpldHRpc29uZWQgd2hlbgpAQCAtMTA4Myw5ICsxMDkyLDkgQEAgc3RhdGljIFNlY29uZHMgdGlt
ZVRvTGl2ZShKSVRUeXBlIGppdFR5cAogICAgIH0KIH0KIAotYm9vbCBDb2RlQmxvY2s6OnNob3Vs
ZEpldHRpc29uRHVlVG9PbGRBZ2UoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJikKK2Jvb2wgQ29k
ZUJsb2NrOjpzaG91bGRKZXR0aXNvbkR1ZVRvT2xkQWdlKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tl
ciYsIEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7Ci0gICAgaWYgKG1fdm0tPmhlYXAu
aXNNYXJrZWQodGhpcykpCisgICAgaWYgKHZpc2l0b3IuaXNNYXJrZWQodGhpcykpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAogICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjpmb3JjZUNvZGVCbG9j
a1RvSmV0dGlzb25EdWVUb09sZEFnZSgpKSkKQEAgLTEwOTgsMTIgKzExMDcsMTIgQEAgYm9vbCBD
b2RlQmxvY2s6OnNob3VsZEpldHRpc29uRHVlVG9PbGRBZwogfQogCiAjaWYgRU5BQkxFKERGR19K
SVQpCi1zdGF0aWMgYm9vbCBzaG91bGRNYXJrVHJhbnNpdGlvbihWTSYgdm0sIERGRzo6V2Vha1Jl
ZmVyZW5jZVRyYW5zaXRpb24mIHRyYW5zaXRpb24pCitzdGF0aWMgaW5saW5lIGJvb2wgc2hvdWxk
TWFya1RyYW5zaXRpb24oQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvciwgREZHOjpXZWFrUmVm
ZXJlbmNlVHJhbnNpdGlvbiYgdHJhbnNpdGlvbikKIHsKLSAgICBpZiAodHJhbnNpdGlvbi5tX2Nv
ZGVPcmlnaW4gJiYgIXZtLmhlYXAuaXNNYXJrZWQodHJhbnNpdGlvbi5tX2NvZGVPcmlnaW4uZ2V0
KCkpKQorICAgIGlmICh0cmFuc2l0aW9uLm1fY29kZU9yaWdpbiAmJiAhdmlzaXRvci5pc01hcmtl
ZCh0cmFuc2l0aW9uLm1fY29kZU9yaWdpbi5nZXQoKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICAKLSAgICBpZiAoIXZtLmhlYXAuaXNNYXJrZWQodHJhbnNpdGlvbi5tX2Zyb20uZ2V0KCkp
KQorICAgIGlmICghdmlzaXRvci5pc01hcmtlZCh0cmFuc2l0aW9uLm1fZnJvbS5nZXQoKSkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTExMTksNyAr
MTEyOCw0MCBAQCBCeXRlY29kZUluZGV4IENvZGVCbG9jazo6Ynl0ZWNvZGVJbmRleEZvCiB9CiAj
ZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCiAKLXZvaWQgQ29kZUJsb2NrOjpwcm9wYWdhdGVUcmFu
c2l0aW9ucyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBTbG90VmlzaXRvciYgdmlzaXRvcikK
KyNpZiBFTkFCTEUoSklUKQorCisvL3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+CisvL2Jvb2wg
U3RydWN0dXJlU3R1YkluZm86OnByb3BhZ2F0ZVRyYW5zaXRpb25zMShWaXNpdG9yJiB2aXNpdG9y
KQorYm9vbCBTdHJ1Y3R1cmVTdHViSW5mbzo6cHJvcGFnYXRlVHJhbnNpdGlvbnMxKEFic3RyYWN0
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgc3dpdGNoIChtX2NhY2hlVHlwZSkgeworICAg
IGNhc2UgQ2FjaGVUeXBlOjpVbnNldDoKKyAgICBjYXNlIENhY2hlVHlwZTo6QXJyYXlMZW5ndGg6
CisgICAgY2FzZSBDYWNoZVR5cGU6OlN0cmluZ0xlbmd0aDoKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgY2FzZSBDYWNoZVR5cGU6OkdldEJ5SWRTZWxmOgorICAgIGNhc2UgQ2FjaGVUeXBlOjpQ
dXRCeUlkUmVwbGFjZToKKyAgICBjYXNlIENhY2hlVHlwZTo6SW5CeUlkU2VsZjoKKyAgICAgICAg
cmV0dXJuIHUuYnlJZFNlbGYuYmFzZU9iamVjdFN0cnVjdHVyZS0+bWFya0lmQ2hlYXAxKHZpc2l0
b3IpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgY2FzZSBDYWNoZVR5cGU6OlN0dWI6Cisg
ICAgICAgIHJldHVybiB1LnN0dWItPnByb3BhZ2F0ZVRyYW5zaXRpb25zMTAodmlzaXRvcik7Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgCisvLyAgICBVTlVTRURfUEFSQU0odmlz
aXRvcik7IC8vIG1sYW0gVEVTVAorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgcmV0dXJuIHRydWU7Cit9CisKKyNlbmRpZiAvLyBFTkFCTEUoSklUKQorCisvL3RlbXBsYXRl
PD4gYm9vbCBTdHJ1Y3R1cmVTdHViSW5mbzo6cHJvcGFnYXRlVHJhbnNpdGlvbnMxKFNsb3RWaXNp
dG9yJik7CisvL3RlbXBsYXRlPD4gYm9vbCBTdHJ1Y3R1cmVTdHViSW5mbzo6cHJvcGFnYXRlVHJh
bnNpdGlvbnMxKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKKworLy90ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPgorLy92b2lkIENvZGVCbG9jazo6cHJvcGFnYXRlVHJhbnNpdGlvbnMoY29uc3QgQ29u
Y3VycmVudEpTTG9ja2VyJiwgVmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgQ29kZUJsb2NrOjpwcm9w
YWdhdGVUcmFuc2l0aW9uczEoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgQWJzdHJhY3RTbG90
VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBWTSYgdm0gPSAqbV92bTsKIApAQCAtMTEzNCw3ICsx
MTc2LDcgQEAgdm9pZCBDb2RlQmxvY2s6OnByb3BhZ2F0ZVRyYW5zaXRpb25zKGNvbgogICAgICAg
ICAgICAgICAgICAgICB2bS5oZWFwLnN0cnVjdHVyZUlEVGFibGUoKS5nZXQob2xkU3RydWN0dXJl
SUQpOwogICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0KICAgICAgICAg
ICAgICAgICAgICAgdm0uaGVhcC5zdHJ1Y3R1cmVJRFRhYmxlKCkuZ2V0KG5ld1N0cnVjdHVyZUlE
KTsKLSAgICAgICAgICAgICAgICBpZiAodm0uaGVhcC5pc01hcmtlZChvbGRTdHJ1Y3R1cmUpKQor
ICAgICAgICAgICAgICAgIGlmICh2aXNpdG9yLmlzTWFya2VkKG9sZFN0cnVjdHVyZSkpCiAgICAg
ICAgICAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQobmV3U3RydWN0dXJlKTsK
ICAgICAgICAgICAgIH0pOwogCkBAIC0xMTQ2LDE0ICsxMTg4LDE0IEBAIHZvaWQgQ29kZUJsb2Nr
Ojpwcm9wYWdhdGVUcmFuc2l0aW9ucyhjb24KIAogICAgICAgICAgICAgICAgIEpTQ2VsbCogcHJv
cGVydHkgPSBtZXRhZGF0YS5tX3Byb3BlcnR5LmdldCgpOwogICAgICAgICAgICAgICAgIEFTU0VS
VChwcm9wZXJ0eSk7Ci0gICAgICAgICAgICAgICAgaWYgKCF2bS5oZWFwLmlzTWFya2VkKHByb3Bl
cnR5KSkKKyAgICAgICAgICAgICAgICBpZiAoIXZpc2l0b3IuaXNNYXJrZWQocHJvcGVydHkpKQog
ICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUq
IG9sZFN0cnVjdHVyZSA9CiAgICAgICAgICAgICAgICAgICAgIHZtLmhlYXAuc3RydWN0dXJlSURU
YWJsZSgpLmdldChvbGRTdHJ1Y3R1cmVJRCk7CiAgICAgICAgICAgICAgICAgU3RydWN0dXJlKiBu
ZXdTdHJ1Y3R1cmUgPQogICAgICAgICAgICAgICAgICAgICB2bS5oZWFwLnN0cnVjdHVyZUlEVGFi
bGUoKS5nZXQobmV3U3RydWN0dXJlSUQpOwotICAgICAgICAgICAgICAgIGlmICh2bS5oZWFwLmlz
TWFya2VkKG9sZFN0cnVjdHVyZSkpCisgICAgICAgICAgICAgICAgaWYgKHZpc2l0b3IuaXNNYXJr
ZWQob2xkU3RydWN0dXJlKSkKICAgICAgICAgICAgICAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJh
cnJpZXJlZChuZXdTdHJ1Y3R1cmUpOwogICAgICAgICAgICAgfSk7CiAgICAgICAgIH0KQEAgLTEx
NjMsNyArMTIwNSw3IEBAIHZvaWQgQ29kZUJsb2NrOjpwcm9wYWdhdGVUcmFuc2l0aW9ucyhjb24K
ICAgICBpZiAoSklUQ29kZTo6aXNKSVQoaml0VHlwZSgpKSkgewogICAgICAgICBpZiAoYXV0byog
aml0RGF0YSA9IG1faml0RGF0YS5nZXQoKSkgewogICAgICAgICAgICAgZm9yIChTdHJ1Y3R1cmVT
dHViSW5mbyogc3R1YkluZm8gOiBqaXREYXRhLT5tX3N0dWJJbmZvcykKLSAgICAgICAgICAgICAg
ICBzdHViSW5mby0+cHJvcGFnYXRlVHJhbnNpdGlvbnModmlzaXRvcik7CisgICAgICAgICAgICAg
ICAgc3R1YkluZm8tPnByb3BhZ2F0ZVRyYW5zaXRpb25zMSh2aXNpdG9yKTsKICAgICAgICAgfQog
ICAgIH0KICNlbmRpZiAvLyBFTkFCTEUoSklUKQpAQCAtMTE3MiwxMyArMTIxNCwxMyBAQCB2b2lk
IENvZGVCbG9jazo6cHJvcGFnYXRlVHJhbnNpdGlvbnMoY29uCiAgICAgaWYgKEpJVENvZGU6Omlz
T3B0aW1pemluZ0pJVChqaXRUeXBlKCkpKSB7CiAgICAgICAgIERGRzo6Q29tbW9uRGF0YSogZGZn
Q29tbW9uID0gbV9qaXRDb2RlLT5kZmdDb21tb24oKTsKICAgICAgICAgCi0gICAgICAgIGRmZ0Nv
bW1vbi0+cmVjb3JkZWRTdGF0dXNlcy5tYXJrSWZDaGVhcCh2aXNpdG9yKTsKKyAgICAgICAgZGZn
Q29tbW9uLT5yZWNvcmRlZFN0YXR1c2VzLm1hcmtJZkNoZWFwMSh2aXNpdG9yKTsKICAgICAgICAg
CiAgICAgICAgIGZvciAoU3RydWN0dXJlSUQgc3RydWN0dXJlSUQgOiBkZmdDb21tb24tPndlYWtT
dHJ1Y3R1cmVSZWZlcmVuY2VzKQotICAgICAgICAgICAgdm0uZ2V0U3RydWN0dXJlKHN0cnVjdHVy
ZUlEKS0+bWFya0lmQ2hlYXAodmlzaXRvcik7CisgICAgICAgICAgICB2bS5nZXRTdHJ1Y3R1cmUo
c3RydWN0dXJlSUQpLT5tYXJrSWZDaGVhcDEodmlzaXRvcik7CiAKICAgICAgICAgZm9yIChhdXRv
JiB0cmFuc2l0aW9uIDogZGZnQ29tbW9uLT50cmFuc2l0aW9ucykgewotICAgICAgICAgICAgaWYg
KHNob3VsZE1hcmtUcmFuc2l0aW9uKHZtLCB0cmFuc2l0aW9uKSkgeworICAgICAgICAgICAgaWYg
KHNob3VsZE1hcmtUcmFuc2l0aW9uKHZpc2l0b3IsIHRyYW5zaXRpb24pKSB7CiAgICAgICAgICAg
ICAgICAgLy8gSWYgdGhlIGZvbGxvd2luZyB0aHJlZSB0aGluZ3MgYXJlIGxpdmUsIHRoZW4gdGhl
IHRhcmdldCBvZiB0aGUKICAgICAgICAgICAgICAgICAvLyB0cmFuc2l0aW9uIGlzIGFsc28gbGl2
ZToKICAgICAgICAgICAgICAgICAvLwpAQCAtMTIwNSwxMyArMTI0NywxOSBAQCB2b2lkIENvZGVC
bG9jazo6cHJvcGFnYXRlVHJhbnNpdGlvbnMoY29uCiAjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQp
CiB9CiAKLXZvaWQgQ29kZUJsb2NrOjpkZXRlcm1pbmVMaXZlbmVzcyhjb25zdCBDb25jdXJyZW50
SlNMb2NrZXImLCBTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vdGVtcGxhdGUgdm9pZCBDb2RlQmxv
Y2s6OnByb3BhZ2F0ZVRyYW5zaXRpb25zKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIFNsb3RW
aXNpdG9yJik7CisvL3RlbXBsYXRlIHZvaWQgQ29kZUJsb2NrOjpwcm9wYWdhdGVUcmFuc2l0aW9u
cyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBWZXJpZmllclNsb3RWaXNpdG9yJik7CisKKy8v
dGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KKy8vdm9pZCBDb2RlQmxvY2s6OmRldGVybWluZUxp
dmVuZXNzKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIFZpc2l0b3ImIHZpc2l0b3IpCit2b2lk
IENvZGVCbG9jazo6ZGV0ZXJtaW5lTGl2ZW5lc3MoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwg
QWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBVTlVTRURfUEFSQU0odmlzaXRv
cik7CiAgICAgCiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAgVk0mIHZtID0gKm1fdm07Ci0gICAg
aWYgKHZtLmhlYXAuaXNNYXJrZWQodGhpcykpCisvLyAgICBpZiAodm0uaGVhcC5pc01hcmtlZCh0
aGlzKSkgLy8gbWxhbQorICAgIGlmICh2aXNpdG9yLmlzTWFya2VkKHRoaXMpKQogICAgICAgICBy
ZXR1cm47CiAgICAgCiAgICAgLy8gSW4gcmFyZSBhbmQgd2VpcmQgY2FzZXMsIHRoaXMgY291bGQg
YmUgY2FsbGVkIG9uIGEgYmFzZWxpbmUgQ29kZUJsb2NrLiBPbmUgdGhhdCBJIGZvdW5kIHdhcwpA
QCAtMTIyOCw3ICsxMjc2LDggQEAgdm9pZCBDb2RlQmxvY2s6OmRldGVybWluZUxpdmVuZXNzKGNv
bnN0IAogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkZmdDb21tb24tPndlYWtSZWZlcmVu
Y2VzLnNpemUoKTsgKytpKSB7CiAgICAgICAgIEpTQ2VsbCogcmVmZXJlbmNlID0gZGZnQ29tbW9u
LT53ZWFrUmVmZXJlbmNlc1tpXS5nZXQoKTsKICAgICAgICAgQVNTRVJUKCFqc0R5bmFtaWNDYXN0
PENvZGVCbG9jayo+KHZtLCByZWZlcmVuY2UpKTsKLSAgICAgICAgaWYgKCF2bS5oZWFwLmlzTWFy
a2VkKHJlZmVyZW5jZSkpIHsKKy8vICAgICAgICBpZiAoIXZtLmhlYXAuaXNNYXJrZWQocmVmZXJl
bmNlKSkgeyAvLyBtbGFtCisgICAgICAgIGlmICghdmlzaXRvci5pc01hcmtlZChyZWZlcmVuY2Up
KSB7CiAgICAgICAgICAgICBhbGxBcmVMaXZlU29GYXIgPSBmYWxzZTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9CkBAIC0xMjM2LDcgKzEyODUsOCBAQCB2b2lkIENvZGVCbG9jazo6ZGV0
ZXJtaW5lTGl2ZW5lc3MoY29uc3QgCiAgICAgaWYgKGFsbEFyZUxpdmVTb0ZhcikgewogICAgICAg
ICBmb3IgKFN0cnVjdHVyZUlEIHN0cnVjdHVyZUlEIDogZGZnQ29tbW9uLT53ZWFrU3RydWN0dXJl
UmVmZXJlbmNlcykgewogICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB2bS5nZXRT
dHJ1Y3R1cmUoc3RydWN0dXJlSUQpOwotICAgICAgICAgICAgaWYgKCF2bS5oZWFwLmlzTWFya2Vk
KHN0cnVjdHVyZSkpIHsKKy8vICAgICAgICAgICAgaWYgKCF2bS5oZWFwLmlzTWFya2VkKHN0cnVj
dHVyZSkpIHsKKyAgICAgICAgICAgIGlmICghdmlzaXRvci5pc01hcmtlZChzdHJ1Y3R1cmUpKSB7
CiAgICAgICAgICAgICAgICAgYWxsQXJlTGl2ZVNvRmFyID0gZmFsc2U7CiAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICB9CkBAIC0xMjU0LDYgKzEzMDQsOSBAQCB2b2lkIENvZGVC
bG9jazo6ZGV0ZXJtaW5lTGl2ZW5lc3MoY29uc3QgCiAjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQp
CiB9CiAKKy8vdGVtcGxhdGUgdm9pZCBDb2RlQmxvY2s6OmRldGVybWluZUxpdmVuZXNzKGNvbnN0
IENvbmN1cnJlbnRKU0xvY2tlciYsIFNsb3RWaXNpdG9yJik7CisvL3RlbXBsYXRlIHZvaWQgQ29k
ZUJsb2NrOjpkZXRlcm1pbmVMaXZlbmVzcyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBWZXJp
ZmllclNsb3RWaXNpdG9yJik7CisKIHZvaWQgQ29kZUJsb2NrOjpmaW5hbGl6ZUxMSW50SW5saW5l
Q2FjaGVzKCkKIHsKICAgICBWTSYgdm0gPSAqbV92bTsKQEAgLTE3NjIsNyArMTgxNSw4IEBAIHZv
aWQgQ29kZUJsb2NrOjpyZXNldEpJVERhdGEoKQogfQogI2VuZGlmCiAKLXZvaWQgQ29kZUJsb2Nr
Ojp2aXNpdE9TUkV4aXRUYXJnZXRzKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIFNsb3RWaXNp
dG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgQ29kZUJsb2Nr
Ojp2aXNpdE9TUkV4aXRUYXJnZXRzKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIFZpc2l0b3Im
IHZpc2l0b3IpCiB7CiAgICAgLy8gV2Ugc3Ryb25nbHkgdmlzaXQgT1NSIGV4aXRzIHRhcmdldHMg
YmVjYXVzZSB3ZSBkb24ndCB3YW50IHRvIGRlYWwgd2l0aAogICAgIC8vIHRoZSBjb21wbGV4aXR5
IG9mIGdlbmVyYXRpbmcgYW4gZXhpdCB0YXJnZXQgQ29kZUJsb2NrIG9uIGRlbWFuZCBhbmQKQEAg
LTE3ODIsNyArMTgzNiwxMSBAQCB2b2lkIENvZGVCbG9jazo6dmlzaXRPU1JFeGl0VGFyZ2V0cyhj
b25zCiAjZW5kaWYKIH0KIAotdm9pZCBDb2RlQmxvY2s6OnN0cm9uZ2x5VmlzaXRTdHJvbmdSZWZl
cmVuY2VzKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYgbG9ja2VyLCBTbG90VmlzaXRvciYgdmlz
aXRvcikKK3RlbXBsYXRlIHZvaWQgQ29kZUJsb2NrOjp2aXNpdE9TUkV4aXRUYXJnZXRzKGNvbnN0
IENvbmN1cnJlbnRKU0xvY2tlciYsIFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIENvZGVC
bG9jazo6dmlzaXRPU1JFeGl0VGFyZ2V0cyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBBYnN0
cmFjdFNsb3RWaXNpdG9yJik7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIENv
ZGVCbG9jazo6c3Ryb25nbHlWaXNpdFN0cm9uZ1JlZmVyZW5jZXMoY29uc3QgQ29uY3VycmVudEpT
TG9ja2VyJiBsb2NrZXIsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGxv
Y2tlcik7CiAgICAgCkBAIC0xODAzLDIyICsxODYxLDI2IEBAIHZvaWQgQ29kZUJsb2NrOjpzdHJv
bmdseVZpc2l0U3Ryb25nUmVmZXIKICNpZiBFTkFCTEUoSklUKQogICAgIGlmIChhdXRvKiBqaXRE
YXRhID0gbV9qaXREYXRhLmdldCgpKSB7CiAgICAgICAgIGZvciAoQnlWYWxJbmZvKiBieVZhbElu
Zm8gOiBqaXREYXRhLT5tX2J5VmFsSW5mb3MpCi0gICAgICAgICAgICBieVZhbEluZm8tPnZpc2l0
QWdncmVnYXRlKHZpc2l0b3IpOworICAgICAgICAgICAgYnlWYWxJbmZvLT52aXNpdEFnZ3JlZ2F0
ZTEodmlzaXRvcik7CiAgICAgICAgIGZvciAoU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvIDog
aml0RGF0YS0+bV9zdHViSW5mb3MpCi0gICAgICAgICAgICBzdHViSW5mby0+dmlzaXRBZ2dyZWdh
dGUodmlzaXRvcik7CisgICAgICAgICAgICBzdHViSW5mby0+dmlzaXRBZ2dyZWdhdGUxKHZpc2l0
b3IpOwogICAgIH0KICNlbmRpZgogCiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAgaWYgKEpJVENv
ZGU6OmlzT3B0aW1pemluZ0pJVChqaXRUeXBlKCkpKSB7CiAgICAgICAgIERGRzo6Q29tbW9uRGF0
YSogZGZnQ29tbW9uID0gbV9qaXRDb2RlLT5kZmdDb21tb24oKTsKLSAgICAgICAgZGZnQ29tbW9u
LT5yZWNvcmRlZFN0YXR1c2VzLnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOworICAgICAgICBkZmdD
b21tb24tPnJlY29yZGVkU3RhdHVzZXMudmlzaXRBZ2dyZWdhdGUxKHZpc2l0b3IpOwogICAgICAg
ICB2aXNpdE9TUkV4aXRUYXJnZXRzKGxvY2tlciwgdmlzaXRvcik7CiAgICAgfQogI2VuZGlmCiB9
CiAKLXZvaWQgQ29kZUJsb2NrOjpzdHJvbmdseVZpc2l0V2Vha1JlZmVyZW5jZXMoY29uc3QgQ29u
Y3VycmVudEpTTG9ja2VyJiwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3RlbXBsYXRlIHZvaWQg
Q29kZUJsb2NrOjpzdHJvbmdseVZpc2l0U3Ryb25nUmVmZXJlbmNlcyhjb25zdCBDb25jdXJyZW50
SlNMb2NrZXImLCBTbG90VmlzaXRvciYpOworLy90ZW1wbGF0ZSB2b2lkIENvZGVCbG9jazo6c3Ry
b25nbHlWaXNpdFN0cm9uZ1JlZmVyZW5jZXMoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgVmVy
aWZpZXJTbG90VmlzaXRvciYpOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBD
b2RlQmxvY2s6OnN0cm9uZ2x5VmlzaXRXZWFrUmVmZXJlbmNlcyhjb25zdCBDb25jdXJyZW50SlNM
b2NrZXImLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFVOVVNFRF9QQVJBTSh2aXNpdG9yKTsK
IApAQCAtMTg0NSw2ICsxOTA3LDkgQEAgdm9pZCBDb2RlQmxvY2s6OnN0cm9uZ2x5VmlzaXRXZWFr
UmVmZXJlbgogI2VuZGlmICAgIAogfQogCit0ZW1wbGF0ZSB2b2lkIENvZGVCbG9jazo6c3Ryb25n
bHlWaXNpdFdlYWtSZWZlcmVuY2VzKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIFNsb3RWaXNp
dG9yJik7Cit0ZW1wbGF0ZSB2b2lkIENvZGVCbG9jazo6c3Ryb25nbHlWaXNpdFdlYWtSZWZlcmVu
Y2VzKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKKwog
Q29kZUJsb2NrKiBDb2RlQmxvY2s6OmJhc2VsaW5lQWx0ZXJuYXRpdmUoKQogewogI2lmIEVOQUJM
RShKSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5o
CShyZXZpc2lvbiAyNzIyOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29k
ZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTIwMSwxMCArMjAxLDExIEBAIHB1YmxpYzoKICAg
ICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIzNjc3CiAgICAg
Q29kZUJsb2NrKiBiYXNlbGluZVZlcnNpb24oKTsKIAorICAgIERFQ0xBUkVfVklTSVRfQ0hJTERS
RU47CisKICAgICBzdGF0aWMgc2l6ZV90IGVzdGltYXRlZFNpemUoSlNDZWxsKiwgVk0mKTsKLSAg
ICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CiAgICAg
c3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKLSAgICB2b2lkIHZpc2l0Q2hpbGRyZW4oU2xv
dFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX0lOU1RBTkNFX1ZJU0lUX0NISUxEUkVOOwogICAgIHZv
aWQgZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoVk0mKTsKIAogICAgIHZvaWQgbm90aWZ5TGV4aWNh
bEJpbmRpbmdVcGRhdGUoKTsKQEAgLTk2MywxNiArOTY0LDE4IEBAIHByaXZhdGU6CiAgICAgICAg
IG1fY29uc3RhbnRSZWdpc3RlcnNbcmVnLnRvQ29uc3RhbnRJbmRleCgpXS5zZXQoKm1fdm0sIHRo
aXMsIHZhbHVlKTsKICAgICB9CiAKLSAgICBib29sIHNob3VsZFZpc2l0U3Ryb25nbHkoY29uc3Qg
Q29uY3VycmVudEpTTG9ja2VyJik7CisgICAgYm9vbCBzaG91bGRWaXNpdFN0cm9uZ2x5KGNvbnN0
IENvbmN1cnJlbnRKU0xvY2tlciYsIEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKICAgICBib29sIHNo
b3VsZEpldHRpc29uRHVlVG9XZWFrUmVmZXJlbmNlKFZNJik7Ci0gICAgYm9vbCBzaG91bGRKZXR0
aXNvbkR1ZVRvT2xkQWdlKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYpOworICAgIGJvb2wgc2hv
dWxkSmV0dGlzb25EdWVUb09sZEFnZShjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBBYnN0cmFj
dFNsb3RWaXNpdG9yJik7CiAgICAgCi0gICAgdm9pZCBwcm9wYWdhdGVUcmFuc2l0aW9ucyhjb25z
dCBDb25jdXJyZW50SlNMb2NrZXImLCBTbG90VmlzaXRvciYpOwotICAgIHZvaWQgZGV0ZXJtaW5l
TGl2ZW5lc3MoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgU2xvdFZpc2l0b3ImKTsKKy8vICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgcHJvcGFnYXRlVHJhbnNpdGlvbnMoY29u
c3QgQ29uY3VycmVudEpTTG9ja2VyJiwgVmlzaXRvciYpOworICAgIHZvaWQgcHJvcGFnYXRlVHJh
bnNpdGlvbnMxKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIEFic3RyYWN0U2xvdFZpc2l0b3Im
KTsKKy8vICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgZGV0ZXJtaW5lTGl2ZW5l
c3MoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgVmlzaXRvciYpOworICAgIHZvaWQgZGV0ZXJt
aW5lTGl2ZW5lc3MoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgQWJzdHJhY3RTbG90VmlzaXRv
ciYpOwogICAgICAgICAKLSAgICB2b2lkIHN0cm9uZ2x5VmlzaXRTdHJvbmdSZWZlcmVuY2VzKGNv
bnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIFNsb3RWaXNpdG9yJik7Ci0gICAgdm9pZCBzdHJvbmds
eVZpc2l0V2Vha1JlZmVyZW5jZXMoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgU2xvdFZpc2l0
b3ImKTsKLSAgICB2b2lkIHZpc2l0T1NSRXhpdFRhcmdldHMoY29uc3QgQ29uY3VycmVudEpTTG9j
a2VyJiwgU2xvdFZpc2l0b3ImKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lk
IHN0cm9uZ2x5VmlzaXRTdHJvbmdSZWZlcmVuY2VzKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYs
IFZpc2l0b3ImKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIHN0cm9uZ2x5
VmlzaXRXZWFrUmVmZXJlbmNlcyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBWaXNpdG9yJik7
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCB2aXNpdE9TUkV4aXRUYXJnZXRz
KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIFZpc2l0b3ImKTsKIAogICAgIHVuc2lnbmVkIG51
bWJlck9mTm9uQXJndW1lbnRWYWx1ZVByb2ZpbGVzKCkgeyByZXR1cm4gbV9udW1iZXJPZk5vbkFy
Z3VtZW50VmFsdWVQcm9maWxlczsgfQogICAgIHVuc2lnbmVkIHRvdGFsTnVtYmVyT2ZWYWx1ZVBy
b2ZpbGVzKCkgeyByZXR1cm4gbnVtYmVyT2ZBcmd1bWVudFZhbHVlUHJvZmlsZXMoKSArIG51bWJl
ck9mTm9uQXJndW1lbnRWYWx1ZVByb2ZpbGVzKCk7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9EZWxldGVCeUlkVmFyaWFudC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0RlbGV0ZUJ5SWRWYXJpYW50LmNwcAkocmV2aXNpb24g
MjcyMjk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0RlbGV0ZUJ5SWRWYXJp
YW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODgsMTkgKzg4LDI5IEBAIGJvb2wgRGVsZXRlQnlJ
ZFZhcmlhbnQ6OndyaXRlc1N0cnVjdHVyZXMKICAgICByZXR1cm4gISFuZXdTdHJ1Y3R1cmUoKTsK
IH0KIAotdm9pZCBEZWxldGVCeUlkVmFyaWFudDo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3Im
IHZpc2l0b3IpCisvL3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+CisvL3ZvaWQgRGVsZXRlQnlJ
ZFZhcmlhbnQ6OnZpc2l0QWdncmVnYXRlKFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIERlbGV0ZUJ5
SWRWYXJpYW50Ojp2aXNpdEFnZ3JlZ2F0ZTEoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikK
IHsKLSAgICBtX2lkZW50aWZpZXIudmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7CisgICAgbV9pZGVu
dGlmaWVyLnZpc2l0QWdncmVnYXRlMSh2aXNpdG9yKTsKIH0KIAotdm9pZCBEZWxldGVCeUlkVmFy
aWFudDo6bWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3RlbXBsYXRlIHZvaWQg
RGVsZXRlQnlJZFZhcmlhbnQ6OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJik7CisvL3RlbXBs
YXRlIHZvaWQgRGVsZXRlQnlJZFZhcmlhbnQ6OnZpc2l0QWdncmVnYXRlKFZlcmlmaWVyU2xvdFZp
c2l0b3ImKTsKKworLy90ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgorLy92b2lkIERlbGV0ZUJ5
SWRWYXJpYW50OjptYXJrSWZDaGVhcChWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBEZWxldGVCeUlk
VmFyaWFudDo6bWFya0lmQ2hlYXAxKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAg
ICAgaWYgKG1fb2xkU3RydWN0dXJlKQotICAgICAgICBtX29sZFN0cnVjdHVyZS0+bWFya0lmQ2hl
YXAodmlzaXRvcik7CisgICAgICAgIG1fb2xkU3RydWN0dXJlLT5tYXJrSWZDaGVhcDEodmlzaXRv
cik7CiAgICAgaWYgKG1fbmV3U3RydWN0dXJlKQotICAgICAgICBtX25ld1N0cnVjdHVyZS0+bWFy
a0lmQ2hlYXAodmlzaXRvcik7CisgICAgICAgIG1fbmV3U3RydWN0dXJlLT5tYXJrSWZDaGVhcDEo
dmlzaXRvcik7CiB9CiAKKy8vdGVtcGxhdGUgdm9pZCBEZWxldGVCeUlkVmFyaWFudDo6bWFya0lm
Q2hlYXAoU2xvdFZpc2l0b3ImKTsKKy8vdGVtcGxhdGUgdm9pZCBEZWxldGVCeUlkVmFyaWFudDo6
bWFya0lmQ2hlYXAoVmVyaWZpZXJTbG90VmlzaXRvciYpOworCiB2b2lkIERlbGV0ZUJ5SWRWYXJp
YW50OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiB7CiAgICAgZHVtcEluQ29udGV4dChv
dXQsIG51bGxwdHIpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0RlbGV0
ZUJ5SWRWYXJpYW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0RlbGV0ZUJ5SWRWYXJpYW50LmgJKHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9EZWxldGVCeUlkVmFyaWFudC5oCSh3b3JraW5nIGNvcHkpCkBA
IC02MSw4ICs2MSwxMCBAQCBwdWJsaWM6CiAKICAgICBib29sIGF0dGVtcHRUb01lcmdlKGNvbnN0
IERlbGV0ZUJ5SWRWYXJpYW50JiBvdGhlcik7CiAKLSAgICB2b2lkIHZpc2l0QWdncmVnYXRlKFNs
b3RWaXNpdG9yJik7Ci0gICAgdm9pZCBtYXJrSWZDaGVhcChTbG90VmlzaXRvciYpOworLy8gICAg
dGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCB2aXNpdEFnZ3JlZ2F0ZShWaXNpdG9yJik7
CisvLyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIG1hcmtJZkNoZWFwKFZpc2l0
b3ImKTsKKyAgICB2b2lkIHZpc2l0QWdncmVnYXRlMShBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cisg
ICAgdm9pZCBtYXJrSWZDaGVhcDEoQWJzdHJhY3RTbG90VmlzaXRvciYpOwogICAgIGJvb2wgZmlu
YWxpemUoVk0mKTsKIAogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0RlbGV0ZUJ5U3RhdHVzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRGVsZXRlQnlTdGF0dXMuY3Bw
CShyZXZpc2lvbiAyNzIyOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRGVs
ZXRlQnlTdGF0dXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTQsMTggKzI1NCwyOCBAQCBDYWNo
ZWFibGVJZGVudGlmaWVyIERlbGV0ZUJ5U3RhdHVzOjpzaW5nCiAgICAgcmV0dXJuIHJlc3VsdDsK
IH0KIAotdm9pZCBEZWxldGVCeVN0YXR1czo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImIHZp
c2l0b3IpCisvL3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+CisvL3ZvaWQgRGVsZXRlQnlTdGF0
dXM6OnZpc2l0QWdncmVnYXRlKFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIERlbGV0ZUJ5U3RhdHVz
Ojp2aXNpdEFnZ3JlZ2F0ZTEoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBm
b3IgKERlbGV0ZUJ5SWRWYXJpYW50JiB2YXJpYW50IDogbV92YXJpYW50cykKLSAgICAgICAgdmFy
aWFudC52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKKyAgICAgICAgdmFyaWFudC52aXNpdEFnZ3Jl
Z2F0ZTEodmlzaXRvcik7CiB9CiAKLXZvaWQgRGVsZXRlQnlTdGF0dXM6Om1hcmtJZkNoZWFwKFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQorLy90ZW1wbGF0ZSB2b2lkIERlbGV0ZUJ5U3RhdHVzOjp2aXNp
dEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYpOworLy90ZW1wbGF0ZSB2b2lkIERlbGV0ZUJ5U3RhdHVz
Ojp2aXNpdEFnZ3JlZ2F0ZShWZXJpZmllclNsb3RWaXNpdG9yJik7CisKKy8vdGVtcGxhdGU8dHlw
ZW5hbWUgVmlzaXRvcj4KKy8vdm9pZCBEZWxldGVCeVN0YXR1czo6bWFya0lmQ2hlYXAoVmlzaXRv
ciYgdmlzaXRvcikKK3ZvaWQgRGVsZXRlQnlTdGF0dXM6Om1hcmtJZkNoZWFwMShBYnN0cmFjdFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGZvciAoRGVsZXRlQnlJZFZhcmlhbnQmIHZhcmlh
bnQgOiBtX3ZhcmlhbnRzKQotICAgICAgICB2YXJpYW50Lm1hcmtJZkNoZWFwKHZpc2l0b3IpOwor
ICAgICAgICB2YXJpYW50Lm1hcmtJZkNoZWFwMSh2aXNpdG9yKTsKIH0KIAorLy90ZW1wbGF0ZSB2
b2lkIERlbGV0ZUJ5U3RhdHVzOjptYXJrSWZDaGVhcChTbG90VmlzaXRvciYpOworLy90ZW1wbGF0
ZSB2b2lkIERlbGV0ZUJ5U3RhdHVzOjptYXJrSWZDaGVhcChWZXJpZmllclNsb3RWaXNpdG9yJik7
CisKIGJvb2wgRGVsZXRlQnlTdGF0dXM6OmZpbmFsaXplKFZNJiB2bSkKIHsKICAgICBmb3IgKGF1
dG8mIHZhcmlhbnQgOiBtX3ZhcmlhbnRzKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvRGVsZXRlQnlTdGF0dXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvRGVsZXRlQnlTdGF0dXMuaAkocmV2aXNpb24gMjcyMjk3KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0RlbGV0ZUJ5U3RhdHVzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTgxLDggKzgxLDEwIEBAIHB1YmxpYzoKICAgICAvLyBBdHRlbXB0cyB0byByZWR1Y2Ug
dGhlIHNldCBvZiB2YXJpYW50cyB0byBmaXQgdGhlIGdpdmVuIHN0cnVjdHVyZSBzZXQuIFRoaXMg
bWF5IGJlIGFwcHJveGltYXRlLgogICAgIHZvaWQgZmlsdGVyKGNvbnN0IFN0cnVjdHVyZVNldCYp
OwogCi0gICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYpOwotICAgIHZvaWQgbWFy
a0lmQ2hlYXAoU2xvdFZpc2l0b3ImKTsKKy8vICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+
IHZvaWQgdmlzaXRBZ2dyZWdhdGUoVmlzaXRvciYpOworLy8gICAgdGVtcGxhdGU8dHlwZW5hbWUg
VmlzaXRvcj4gdm9pZCBtYXJrSWZDaGVhcChWaXNpdG9yJik7CisgICAgdm9pZCB2aXNpdEFnZ3Jl
Z2F0ZTEoQWJzdHJhY3RTbG90VmlzaXRvciYpOworICAgIHZvaWQgbWFya0lmQ2hlYXAxKEFic3Ry
YWN0U2xvdFZpc2l0b3ImKTsKICAgICBib29sIGZpbmFsaXplKFZNJik7CiAKICAgICBib29sIGFw
cGVuZFZhcmlhbnQoY29uc3QgRGVsZXRlQnlJZFZhcmlhbnQmKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9EaXJlY3RFdmFsQ29kZUNhY2hlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRGlyZWN0RXZhbENvZGVDYWNoZS5jcHAJ
KHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9EaXJl
Y3RFdmFsQ29kZUNhY2hlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUsNyArNDUsOCBAQCB2b2lk
IERpcmVjdEV2YWxDb2RlQ2FjaGU6OmNsZWFyKCkKICAgICBtX2NhY2hlTWFwLmNsZWFyKCk7CiB9
CiAKLXZvaWQgRGlyZWN0RXZhbENvZGVDYWNoZTo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3Im
IHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBEaXJlY3RFdmFsQ29k
ZUNhY2hlOjp2aXNpdEFnZ3JlZ2F0ZShWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIExvY2tIb2xk
ZXIgbG9ja2VyKG1fbG9jayk7CiAgICAgRXZhbENhY2hlTWFwOjppdGVyYXRvciBlbmQgPSBtX2Nh
Y2hlTWFwLmVuZCgpOwpAQCAtNTMsNSArNTQsNyBAQCB2b2lkIERpcmVjdEV2YWxDb2RlQ2FjaGU6
OnZpc2l0QWdncmVnYXRlCiAgICAgICAgIHZpc2l0b3IuYXBwZW5kKHB0ci0+dmFsdWUpOwogfQog
Ci19IC8vIG5hbWVzcGFjZSBKU0MKK3RlbXBsYXRlIHZvaWQgRGlyZWN0RXZhbENvZGVDYWNoZTo6
dmlzaXRBZ2dyZWdhdGUoQWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBEaXJl
Y3RFdmFsQ29kZUNhY2hlOjp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYpOwogCit9IC8vIG5h
bWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9EaXJlY3RF
dmFsQ29kZUNhY2hlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0RpcmVjdEV2YWxDb2RlQ2FjaGUuaAkocmV2aXNpb24gMjcyMjk3KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0RpcmVjdEV2YWxDb2RlQ2FjaGUuaAkod29ya2luZyBjb3B5
KQpAQCAtOTcsNyArOTcsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBib29sIGlzRW1w
dHkoKSBjb25zdCB7IHJldHVybiBtX2NhY2hlTWFwLmlzRW1wdHkoKTsgfQogCi0gICAgICAgIHZv
aWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImKTsKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgVmlzaXRvcj4gdm9pZCB2aXNpdEFnZ3JlZ2F0ZShWaXNpdG9yJik7CiAKICAgICAgICAgdm9p
ZCBjbGVhcigpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhlY3V0
YWJsZVRvQ29kZUJsb2NrRWRnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0V4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UuY3BwCShyZXZpc2lvbiAyNzIy
OTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhlY3V0YWJsZVRvQ29kZUJs
b2NrRWRnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxOC0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTMsNyArNTMsOSBAQCB2b2lkIEV4ZWN1dGFibGVU
b0NvZGVCbG9ja0VkZ2U6OmZpbmlzaENyCiAgICAgQVNTRVJUKCFpc0FjdGl2ZSgpKTsKIH0KIAot
dm9pZCBFeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2Vs
bCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9p
ZCBFeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNl
bGwsIFZpc2l0b3ImIHZpc2l0b3IpCisvL3ZvaWQgRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZTo6
dmlzaXRDaGlsZHJlbjEoSlNDZWxsKiBjZWxsLCBBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9y
KQogewogICAgIFZNJiB2bSA9IHZpc2l0b3Iudm0oKTsKICAgICBFeGVjdXRhYmxlVG9Db2RlQmxv
Y2tFZGdlKiBlZGdlID0ganNDYXN0PEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UqPihjZWxsKTsK
QEAgLTc2LDEwICs3OCwxMSBAQCB2b2lkIEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2U6OnZpc2l0
Q2hpCiAgICAgCiAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihjb2RlQmxvY2stPm1fbG9j
ayk7CiAgICAgCi0gICAgaWYgKGNvZGVCbG9jay0+c2hvdWxkVmlzaXRTdHJvbmdseShsb2NrZXIp
KQorICAgIGlmIChjb2RlQmxvY2stPnNob3VsZFZpc2l0U3Ryb25nbHkobG9ja2VyLCB2aXNpdG9y
KSkKICAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZChjb2RlQmxvY2spOwogICAgIAot
ICAgIGlmICghdm0uaGVhcC5pc01hcmtlZChjb2RlQmxvY2spKQorLy8gICAgaWYgKCF2bS5oZWFw
LmlzTWFya2VkKGNvZGVCbG9jaykpIC8vIG1sYW0KKyAgICBpZiAoIXZpc2l0b3IuaXNNYXJrZWQo
Y29kZUJsb2NrKSkKICAgICAgICAgdm0uZXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZXNXaXRoRmlu
YWxpemVycy5hZGQoZWRnZSk7CiAgICAgCiAgICAgaWYgKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJ
VChjb2RlQmxvY2stPmppdFR5cGUoKSkpIHsKQEAgLTExNCwxNSArMTE3LDE3IEBAIHZvaWQgRXhl
Y3V0YWJsZVRvQ29kZUJsb2NrRWRnZTo6dmlzaXRDaGkKICAgICAvLyB3aWxsIGtlZXAgZml4cG9p
bnRpbmcgdW50aWwgdGhlIGVuZC4KICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKGNvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpOwogICAgIHZtLmV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2Vz
V2l0aENvbnN0cmFpbnRzLmFkZChlZGdlKTsKLSAgICBlZGdlLT5ydW5Db25zdHJhaW50KGxvY2tl
ciwgdm0sIHZpc2l0b3IpOworICAgIGVkZ2UtPnJ1bkNvbnN0cmFpbnQxKGxvY2tlciwgdm0sIHZp
c2l0b3IpOyAvLyBtbGFtIEZJWE1FCiB9CiAKLXZvaWQgRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRn
ZTo6dmlzaXRPdXRwdXRDb25zdHJhaW50cyhKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNp
dG9yKQorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UpOwor
Cit2b2lkIEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2U6OnZpc2l0T3V0cHV0Q29uc3RyYWludHMo
SlNDZWxsKiBjZWxsLCBBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFZNJiB2
bSA9IHZpc2l0b3Iudm0oKTsKICAgICBFeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlKiBlZGdlID0g
anNDYXN0PEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UqPihjZWxsKTsKICAgICAKLSAgICBlZGdl
LT5ydW5Db25zdHJhaW50KE5vTG9ja2luZ05lY2Vzc2FyeSwgdm0sIHZpc2l0b3IpOworICAgIGVk
Z2UtPnJ1bkNvbnN0cmFpbnQxKE5vTG9ja2luZ05lY2Vzc2FyeSwgdm0sIHZpc2l0b3IpOwogfQog
CiB2b2lkIEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2U6OmZpbmFsaXplVW5jb25kaXRpb25hbGx5
KFZNJiB2bSkKQEAgLTE4NiwxNiArMTkxLDIxIEBAIEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2U6
OkV4ZWN1dGFibGVUb0MKIHsKIH0KIAotdm9pZCBFeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlOjpy
dW5Db25zdHJhaW50KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYgbG9ja2VyLCBWTSYgdm0sIFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQorLy90ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgorLy92b2lk
IEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2U6OnJ1bkNvbnN0cmFpbnQxKGNvbnN0IENvbmN1cnJl
bnRKU0xvY2tlciYgbG9ja2VyLCBWTSYgdm0sIFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIEV4ZWN1
dGFibGVUb0NvZGVCbG9ja0VkZ2U6OnJ1bkNvbnN0cmFpbnQxKGNvbnN0IENvbmN1cnJlbnRKU0xv
Y2tlciYgbG9ja2VyLCBWTSYgdm0sIEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAg
ICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBtX2NvZGVCbG9jay5nZXQoKTsKICAgICAKLSAgICBj
b2RlQmxvY2stPnByb3BhZ2F0ZVRyYW5zaXRpb25zKGxvY2tlciwgdmlzaXRvcik7CisgICAgY29k
ZUJsb2NrLT5wcm9wYWdhdGVUcmFuc2l0aW9uczEobG9ja2VyLCB2aXNpdG9yKTsKICAgICBjb2Rl
QmxvY2stPmRldGVybWluZUxpdmVuZXNzKGxvY2tlciwgdmlzaXRvcik7CiAgICAgCi0gICAgaWYg
KHZtLmhlYXAuaXNNYXJrZWQoY29kZUJsb2NrKSkKKy8vICAgIGlmICh2bS5oZWFwLmlzTWFya2Vk
KGNvZGVCbG9jaykpCisgICAgaWYgKHZpc2l0b3IuaXNNYXJrZWQoY29kZUJsb2NrKSkKICAgICAg
ICAgdm0uZXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZXNXaXRoQ29uc3RyYWludHMucmVtb3ZlKHRo
aXMpOwogfQogCi19IC8vIG5hbWVzcGFjZSBKU0MKKy8vdGVtcGxhdGUgdm9pZCBFeGVjdXRhYmxl
VG9Db2RlQmxvY2tFZGdlOjpydW5Db25zdHJhaW50MShjb25zdCBDb25jdXJyZW50SlNMb2NrZXIm
LCBWTSYsIFNsb3RWaXNpdG9yJik7CisvL3RlbXBsYXRlIHZvaWQgRXhlY3V0YWJsZVRvQ29kZUJs
b2NrRWRnZTo6cnVuQ29uc3RyYWludDEoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgVk0mLCBB
YnN0cmFjdFNsb3RWaXNpdG9yJik7CiAKK30gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhlY3V0YWJsZVRvQ29k
ZUJsb2NrRWRnZS5oCShyZXZpc2lvbiAyNzIyOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOC0yMDE5IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOC0yMDIwIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
NTMsOSArNTMsMTAgQEAgcHVibGljOgogICAgIERFQ0xBUkVfSU5GTzsKIAogICAgIENvZGVCbG9j
ayogY29kZUJsb2NrKCkgY29uc3QgeyByZXR1cm4gbV9jb2RlQmxvY2suZ2V0KCk7IH0KLSAgICAK
LSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7Ci0g
ICAgc3RhdGljIHZvaWQgdmlzaXRPdXRwdXRDb25zdHJhaW50cyhKU0NlbGwqLCBTbG90VmlzaXRv
ciYpOworCisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKKy8vICAgIHN0YXRpYyB2b2lkIHZp
c2l0Q2hpbGRyZW4xKEpTQ2VsbCosIEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKKyAgICBzdGF0aWMg
dm9pZCB2aXNpdE91dHB1dENvbnN0cmFpbnRzKEpTQ2VsbCosIEFic3RyYWN0U2xvdFZpc2l0b3Im
KTsKICAgICB2b2lkIGZpbmFsaXplVW5jb25kaXRpb25hbGx5KFZNJik7CiAgICAgCiAgICAgc3Rh
dGljIENvZGVCbG9jayogdW53cmFwKEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UqIGVkZ2UpCkBA
IC04MSw5ICs4MiwxMSBAQCBwcml2YXRlOgogICAgIHZvaWQgYWN0aXZhdGUoKTsKICAgICB2b2lk
IGRlYWN0aXZhdGUoKTsKICAgICBib29sIGlzQWN0aXZlKCkgY29uc3Q7Ci0gICAgCi0gICAgdm9p
ZCBydW5Db25zdHJhaW50KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIFZNJiwgU2xvdFZpc2l0
b3ImKTsKLSAgICAKKworLy8gICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KKy8vICAgIHZv
aWQgcnVuQ29uc3RyYWludDEoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgVk0mLCBWaXNpdG9y
Jik7CisgICAgdm9pZCBydW5Db25zdHJhaW50MShjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBW
TSYsIEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKKwogICAgIFdyaXRlQmFycmllcjxDb2RlQmxvY2s+
IG1fY29kZUJsb2NrOwogfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0dldEJ5SWRWYXJpYW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvR2V0QnlJZFZhcmlhbnQuY3BwCShyZXZpc2lvbiAyNzIyOTcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFZhcmlhbnQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xNTYsMTYgKzE1NiwyNiBAQCBib29sIEdldEJ5SWRWYXJpYW50OjphdHRlbXB0VG9NZXJn
ZShjb25zCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgR2V0QnlJZFZhcmlhbnQ6OnZpc2l0
QWdncmVnYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy90ZW1wbGF0ZTx0eXBlbmFtZSBWaXNp
dG9yPgorLy92b2lkIEdldEJ5SWRWYXJpYW50Ojp2aXNpdEFnZ3JlZ2F0ZShWaXNpdG9yJiB2aXNp
dG9yKQordm9pZCBHZXRCeUlkVmFyaWFudDo6dmlzaXRBZ2dyZWdhdGUxKEFic3RyYWN0U2xvdFZp
c2l0b3ImIHZpc2l0b3IpCiB7Ci0gICAgbV9pZGVudGlmaWVyLnZpc2l0QWdncmVnYXRlKHZpc2l0
b3IpOworICAgIG1faWRlbnRpZmllci52aXNpdEFnZ3JlZ2F0ZTEodmlzaXRvcik7CiB9CiAKLXZv
aWQgR2V0QnlJZFZhcmlhbnQ6Om1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy90
ZW1wbGF0ZSB2b2lkIEdldEJ5SWRWYXJpYW50Ojp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYp
OworLy90ZW1wbGF0ZSB2b2lkIEdldEJ5SWRWYXJpYW50Ojp2aXNpdEFnZ3JlZ2F0ZShWZXJpZmll
clNsb3RWaXNpdG9yJik7CisKKy8vdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KKy8vdm9pZCBH
ZXRCeUlkVmFyaWFudDo6bWFya0lmQ2hlYXAoVmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgR2V0QnlJ
ZFZhcmlhbnQ6Om1hcmtJZkNoZWFwMShBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewot
ICAgIG1fc3RydWN0dXJlU2V0Lm1hcmtJZkNoZWFwKHZpc2l0b3IpOworICAgIG1fc3RydWN0dXJl
U2V0Lm1hcmtJZkNoZWFwMSh2aXNpdG9yKTsKIH0KIAorLy90ZW1wbGF0ZSB2b2lkIEdldEJ5SWRW
YXJpYW50OjptYXJrSWZDaGVhcChTbG90VmlzaXRvciYpOworLy90ZW1wbGF0ZSB2b2lkIEdldEJ5
SWRWYXJpYW50OjptYXJrSWZDaGVhcChWZXJpZmllclNsb3RWaXNpdG9yJik7CisKIGJvb2wgR2V0
QnlJZFZhcmlhbnQ6OmZpbmFsaXplKFZNJiB2bSkKIHsKICAgICBpZiAoIW1fc3RydWN0dXJlU2V0
LmlzU3RpbGxBbGl2ZSh2bSkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
R2V0QnlJZFZhcmlhbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvR2V0QnlJZFZhcmlhbnQuaAkocmV2aXNpb24gMjcyMjk3KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRWYXJpYW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTc3
LDggKzc3LDEwIEBAIHB1YmxpYzoKIAogICAgIGJvb2wgYXR0ZW1wdFRvTWVyZ2UoY29uc3QgR2V0
QnlJZFZhcmlhbnQmIG90aGVyKTsKICAgICAKLSAgICB2b2lkIHZpc2l0QWdncmVnYXRlKFNsb3RW
aXNpdG9yJik7Ci0gICAgdm9pZCBtYXJrSWZDaGVhcChTbG90VmlzaXRvciYpOworLy8gICAgdGVt
cGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCB2aXNpdEFnZ3JlZ2F0ZShWaXNpdG9yJik7Cisv
LyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIG1hcmtJZkNoZWFwKFZpc2l0b3Im
KTsKKyAgICB2b2lkIHZpc2l0QWdncmVnYXRlMShBYnN0cmFjdFNsb3RWaXNpdG9yJik7CisgICAg
dm9pZCBtYXJrSWZDaGVhcDEoQWJzdHJhY3RTbG90VmlzaXRvciYpOwogICAgIGJvb2wgZmluYWxp
emUoVk0mKTsKICAgICAKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeVN0YXR1cy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5U3RhdHVzLmNwcAkocmV2
aXNpb24gMjcyMjk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5U3Rh
dHVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTMwLDIwICs1MzAsMzEgQEAgdm9pZCBHZXRCeVN0
YXR1czo6ZmlsdGVyKGNvbnN0IFN0cnVjdHVyZQogICAgICAgICBtX3N0YXRlID0gTm9JbmZvcm1h
dGlvbjsKIH0KIAotdm9pZCBHZXRCeVN0YXR1czo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3Im
IHZpc2l0b3IpCisvL3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+CisvL3ZvaWQgR2V0QnlTdGF0
dXM6OnZpc2l0QWdncmVnYXRlKFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIEdldEJ5U3RhdHVzOjp2
aXNpdEFnZ3JlZ2F0ZTEoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBpZiAo
aXNNb2R1bGVOYW1lc3BhY2UoKSkKLSAgICAgICAgbV9tb2R1bGVOYW1lc3BhY2VEYXRhLT5tX2lk
ZW50aWZpZXIudmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7CisgICAgICAgIG1fbW9kdWxlTmFtZXNw
YWNlRGF0YS0+bV9pZGVudGlmaWVyLnZpc2l0QWdncmVnYXRlMSh2aXNpdG9yKTsKICAgICBmb3Ig
KEdldEJ5SWRWYXJpYW50JiB2YXJpYW50IDogbV92YXJpYW50cykKLSAgICAgICAgdmFyaWFudC52
aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKKyAgICAgICAgdmFyaWFudC52aXNpdEFnZ3JlZ2F0ZTEo
dmlzaXRvcik7CiB9CiAKLXZvaWQgR2V0QnlTdGF0dXM6Om1hcmtJZkNoZWFwKFNsb3RWaXNpdG9y
JiB2aXNpdG9yKQorLy90ZW1wbGF0ZSB2b2lkIEdldEJ5U3RhdHVzOjp2aXNpdEFnZ3JlZ2F0ZShT
bG90VmlzaXRvciYpOworLy90ZW1wbGF0ZSB2b2lkIEdldEJ5U3RhdHVzOjp2aXNpdEFnZ3JlZ2F0
ZShWZXJpZmllclNsb3RWaXNpdG9yJik7CisKKy8vdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4K
Ky8vdm9pZCBHZXRCeVN0YXR1czo6bWFya0lmQ2hlYXAoVmlzaXRvciYgdmlzaXRvcikKK3ZvaWQg
R2V0QnlTdGF0dXM6Om1hcmtJZkNoZWFwMShBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQog
ewogICAgIGZvciAoR2V0QnlJZFZhcmlhbnQmIHZhcmlhbnQgOiBtX3ZhcmlhbnRzKQotICAgICAg
ICB2YXJpYW50Lm1hcmtJZkNoZWFwKHZpc2l0b3IpOworICAgICAgICB2YXJpYW50Lm1hcmtJZkNo
ZWFwMSh2aXNpdG9yKTsKIH0KIAorLy90ZW1wbGF0ZSB2b2lkIEdldEJ5U3RhdHVzOjptYXJrSWZD
aGVhcChTbG90VmlzaXRvciYpOworLy90ZW1wbGF0ZSB2b2lkIEdldEJ5U3RhdHVzOjptYXJrSWZD
aGVhcChWZXJpZmllclNsb3RWaXNpdG9yJik7CisKKwogYm9vbCBHZXRCeVN0YXR1czo6ZmluYWxp
emUoVk0mIHZtKQogewogICAgIGZvciAoR2V0QnlJZFZhcmlhbnQmIHZhcmlhbnQgOiBtX3Zhcmlh
bnRzKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlTdGF0dXMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlTdGF0
dXMuaAkocmV2aXNpb24gMjcyMjk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0dldEJ5U3RhdHVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTExOCw4ICsxMTgsMTAgQEAgcHVibGlj
OgogICAgIEpTTW9kdWxlRW52aXJvbm1lbnQqIG1vZHVsZUVudmlyb25tZW50KCkgY29uc3QgeyBy
ZXR1cm4gbV9tb2R1bGVOYW1lc3BhY2VEYXRhLT5tX21vZHVsZUVudmlyb25tZW50OyB9CiAgICAg
U2NvcGVPZmZzZXQgc2NvcGVPZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX21vZHVsZU5hbWVzcGFj
ZURhdGEtPm1fc2NvcGVPZmZzZXQ7IH0KICAgICAKLSAgICB2b2lkIHZpc2l0QWdncmVnYXRlKFNs
b3RWaXNpdG9yJik7Ci0gICAgdm9pZCBtYXJrSWZDaGVhcChTbG90VmlzaXRvciYpOworLy8gICAg
dGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCB2aXNpdEFnZ3JlZ2F0ZShWaXNpdG9yJik7
CisvLyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIG1hcmtJZkNoZWFwKFZpc2l0
b3ImKTsKKyAgICB2b2lkIHZpc2l0QWdncmVnYXRlMShBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cisg
ICAgdm9pZCBtYXJrSWZDaGVhcDEoQWJzdHJhY3RTbG90VmlzaXRvciYpOwogICAgIGJvb2wgZmlu
YWxpemUoVk0mKTsgLy8gUmV0dXJuIHRydWUgaWYgdGhpcyBnZXRzIHRvIGxpdmUuCiAKICAgICBi
b29sIGFwcGVuZFZhcmlhbnQoY29uc3QgR2V0QnlJZFZhcmlhbnQmKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbkJ5SWRTdGF0dXMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbkJ5SWRTdGF0dXMuY3BwCShyZXZpc2lvbiAy
NzIyOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5CeUlkU3RhdHVzLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjUxLDEyICsyNTEsMTcgQEAgdm9pZCBJbkJ5SWRTdGF0dXM6
OmZpbHRlcihjb25zdCBTdHJ1Y3R1cgogICAgICAgICBtX3N0YXRlID0gTm9JbmZvcm1hdGlvbjsK
IH0KIAotdm9pZCBJbkJ5SWRTdGF0dXM6Om1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJiB2aXNpdG9y
KQorLy90ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgorLy92b2lkIEluQnlJZFN0YXR1czo6bWFy
a0lmQ2hlYXAoVmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgSW5CeUlkU3RhdHVzOjptYXJrSWZDaGVh
cDEoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBmb3IgKEluQnlJZFZhcmlh
bnQmIHZhcmlhbnQgOiBtX3ZhcmlhbnRzKQotICAgICAgICB2YXJpYW50Lm1hcmtJZkNoZWFwKHZp
c2l0b3IpOworICAgICAgICB2YXJpYW50Lm1hcmtJZkNoZWFwMSh2aXNpdG9yKTsKIH0KIAorLy90
ZW1wbGF0ZSB2b2lkIEluQnlJZFN0YXR1czo6bWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImKTsKKy8v
dGVtcGxhdGUgdm9pZCBJbkJ5SWRTdGF0dXM6Om1hcmtJZkNoZWFwKFZlcmlmaWVyU2xvdFZpc2l0
b3ImKTsKKwogYm9vbCBJbkJ5SWRTdGF0dXM6OmZpbmFsaXplKFZNJiB2bSkKIHsKICAgICBmb3Ig
KEluQnlJZFZhcmlhbnQmIHZhcmlhbnQgOiBtX3ZhcmlhbnRzKSB7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5CeUlkU3RhdHVzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luQnlJZFN0YXR1cy5oCShyZXZpc2lvbiAyNzIyOTcp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5CeUlkU3RhdHVzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEwNiw3ICsxMDYsOCBAQCBwdWJsaWM6CiAgICAgLy8gQXR0ZW1wdHMgdG8g
cmVkdWNlIHRoZSBzZXQgb2YgdmFyaWFudHMgdG8gZml0IHRoZSBnaXZlbiBzdHJ1Y3R1cmUgc2V0
LiBUaGlzIG1heSBiZSBhcHByb3hpbWF0ZS4KICAgICB2b2lkIGZpbHRlcihjb25zdCBTdHJ1Y3R1
cmVTZXQmKTsKICAgICAKLSAgICB2b2lkIG1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJik7CisvLyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIG1hcmtJZkNoZWFwKFZpc2l0b3ImKTsK
KyAgICB2b2lkIG1hcmtJZkNoZWFwMShBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAgICAgYm9vbCBm
aW5hbGl6ZShWTSYpOwogCiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5CeUlkVmFyaWFudC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luQnlJZFZhcmlhbnQuY3Bw
CShyZXZpc2lvbiAyNzIyOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5C
eUlkVmFyaWFudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY0LDExICs2NCwxNiBAQCBib29sIElu
QnlJZFZhcmlhbnQ6OmF0dGVtcHRUb01lcmdlKGNvbnN0CiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
LXZvaWQgSW5CeUlkVmFyaWFudDo6bWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisv
L3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+CisvL3ZvaWQgSW5CeUlkVmFyaWFudDo6bWFya0lm
Q2hlYXAoVmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgSW5CeUlkVmFyaWFudDo6bWFya0lmQ2hlYXAx
KEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7Ci0gICAgbV9zdHJ1Y3R1cmVTZXQubWFy
a0lmQ2hlYXAodmlzaXRvcik7CisgICAgbV9zdHJ1Y3R1cmVTZXQubWFya0lmQ2hlYXAxKHZpc2l0
b3IpOwogfQogCisvL3RlbXBsYXRlIHZvaWQgSW5CeUlkVmFyaWFudDo6bWFya0lmQ2hlYXAoU2xv
dFZpc2l0b3ImKTsKKy8vdGVtcGxhdGUgdm9pZCBJbkJ5SWRWYXJpYW50OjptYXJrSWZDaGVhcChW
ZXJpZmllclNsb3RWaXNpdG9yJik7CisKIGJvb2wgSW5CeUlkVmFyaWFudDo6ZmluYWxpemUoVk0m
IHZtKQogewogICAgIGlmICghbV9zdHJ1Y3R1cmVTZXQuaXNTdGlsbEFsaXZlKHZtKSkKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbkJ5SWRWYXJpYW50LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luQnlJZFZhcmlhbnQuaAkocmV2
aXNpb24gMjcyMjk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luQnlJZFZh
cmlhbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNTcsNyArNTcsOCBAQCBwdWJsaWM6CiAKICAgICBi
b29sIGF0dGVtcHRUb01lcmdlKGNvbnN0IEluQnlJZFZhcmlhbnQmIG90aGVyKTsKICAgICAKLSAg
ICB2b2lkIG1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJik7CisvLyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBWaXNpdG9yPiB2b2lkIG1hcmtJZkNoZWFwKFZpc2l0b3ImKTsKKyAgICB2b2lkIG1hcmtJZkNo
ZWFwMShBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAgICAgYm9vbCBmaW5hbGl6ZShWTSYpOwogCiAg
ICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvSW50ZXJuYWxGdW5jdGlvbkFsbG9jYXRpb25Qcm9maWxlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0ludGVybmFsRnVuY3Rpb25B
bGxvY2F0aW9uUHJvZmlsZS5oCShyZXZpc2lvbiAyNzIyOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvSW50ZXJuYWxGdW5jdGlvbkFsbG9jYXRpb25Qcm9maWxlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTM5LDcgKzM5LDcgQEAgcHVibGljOgogICAgIFN0cnVjdHVyZSogY3JlYXRl
QWxsb2NhdGlvblN0cnVjdHVyZUZyb21CYXNlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU0NlbGwq
IG93bmVyLCBKU09iamVjdCogcHJvdG90eXBlLCBTdHJ1Y3R1cmUqIGJhc2UpOwogCiAgICAgdm9p
ZCBjbGVhcigpIHsgbV9zdHJ1Y3R1cmUuY2xlYXIoKTsgfQotICAgIHZvaWQgdmlzaXRBZ2dyZWdh
dGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsgdmlzaXRvci5hcHBlbmQobV9zdHJ1Y3R1cmUpOyB9
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCB2aXNpdEFnZ3JlZ2F0ZShWaXNp
dG9yJiB2aXNpdG9yKSB7IHZpc2l0b3IuYXBwZW5kKG1fc3RydWN0dXJlKTsgfQogCiBwcml2YXRl
OgogICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1fc3RydWN0dXJlOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09iamVjdEFsbG9jYXRpb25Qcm9maWxlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09iamVjdEFsbG9jYXRpb25Q
cm9maWxlLmgJKHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9PYmplY3RBbGxvY2F0aW9uUHJvZmlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC02NCw3ICs2
NCw4IEBAIHByb3RlY3RlZDoKICAgICAgICAgQVNTRVJUKGlzTnVsbCgpKTsKICAgICB9CiAKLSAg
ICB2b2lkIHZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFZpc2l0b3I+CisgICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShWaXNpdG9yJiB2aXNp
dG9yKQogICAgIHsKICAgICAgICAgdmlzaXRvci5hcHBlbmQobV9zdHJ1Y3R1cmUpOwogICAgIH0K
QEAgLTExMCw3ICsxMTEsOCBAQCBwdWJsaWM6CiAgICAgICAgIEFTU0VSVChpc051bGwoKSk7CiAg
ICAgfQogCi0gICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYgdmlzaXRvcikKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgorICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoVmlz
aXRvciYgdmlzaXRvcikKICAgICB7CiAgICAgICAgIEJhc2U6OnZpc2l0QWdncmVnYXRlKHZpc2l0
b3IpOwogICAgICAgICB2aXNpdG9yLmFwcGVuZChtX3Byb3RvdHlwZSk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAJ
KHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5
bW9ycGhpY0FjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1OCw3ICszNTgsOSBAQCBib29s
IFBvbHltb3JwaGljQWNjZXNzOjp2aXNpdFdlYWsoVk0mIHZtCiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKLWJvb2wgUG9seW1vcnBoaWNBY2Nlc3M6OnByb3BhZ2F0ZVRyYW5zaXRpb25zKFNsb3RWaXNp
dG9yJiB2aXNpdG9yKSBjb25zdAorLy90ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgorLy9ib29s
IFBvbHltb3JwaGljQWNjZXNzOjpwcm9wYWdhdGVUcmFuc2l0aW9uczEwKFZpc2l0b3ImIHZpc2l0
b3IpIGNvbnN0Citib29sIFBvbHltb3JwaGljQWNjZXNzOjpwcm9wYWdhdGVUcmFuc2l0aW9uczEw
KEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0CiB7CiAgICAgYm9vbCByZXN1bHQg
PSB0cnVlOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplKCk7ICsraSkKQEAgLTM2
NiwxMiArMzY4LDIxIEBAIGJvb2wgUG9seW1vcnBoaWNBY2Nlc3M6OnByb3BhZ2F0ZVRyYW5zaXQK
ICAgICByZXR1cm4gcmVzdWx0OwogfQogCi12b2lkIFBvbHltb3JwaGljQWNjZXNzOjp2aXNpdEFn
Z3JlZ2F0ZShTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vdGVtcGxhdGU8PiBib29sIFBvbHltb3Jw
aGljQWNjZXNzOjpwcm9wYWdhdGVUcmFuc2l0aW9uczEwKFNsb3RWaXNpdG9yJikgY29uc3Q7Cisv
L3RlbXBsYXRlPD4gYm9vbCBQb2x5bW9ycGhpY0FjY2Vzczo6cHJvcGFnYXRlVHJhbnNpdGlvbnMx
MChBYnN0cmFjdFNsb3RWaXNpdG9yJikgY29uc3Q7CisKKworLy90ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPgorLy92b2lkIFBvbHltb3JwaGljQWNjZXNzOjp2aXNpdEFnZ3JlZ2F0ZShWaXNpdG9y
JiB2aXNpdG9yKQordm9pZCBQb2x5bW9ycGhpY0FjY2Vzczo6dmlzaXRBZ2dyZWdhdGUxKEFic3Ry
YWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IHNpemUoKTsgKytpKQotICAgICAgICBhdChpKS52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKKyAg
ICAgICAgYXQoaSkudmlzaXRBZ2dyZWdhdGUxKHZpc2l0b3IpOwogfQogCisvL3RlbXBsYXRlIHZv
aWQgUG9seW1vcnBoaWNBY2Nlc3M6OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJik7CisvL3Rl
bXBsYXRlIHZvaWQgUG9seW1vcnBoaWNBY2Nlc3M6OnZpc2l0QWdncmVnYXRlKFZlcmlmaWVyU2xv
dFZpc2l0b3ImKTsKKwogdm9pZCBQb2x5bW9ycGhpY0FjY2Vzczo6ZHVtcChQcmludFN0cmVhbSYg
b3V0KSBjb25zdAogewogICAgIG91dC5wcmludChSYXdQb2ludGVyKHRoaXMpLCAiOlsiKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0Fj
Y2Vzcy5oCShyZXZpc2lvbiAyNzIyOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvUG9seW1vcnBoaWNBY2Nlc3MuaAkod29ya2luZyBjb3B5KQpAQCAtMTUyLDE0ICsxNTIsMTYg
QEAgcHVibGljOgogICAgIGNvbnN0IEFjY2Vzc0Nhc2UmIGF0KHVuc2lnbmVkIGkpIGNvbnN0IHsg
cmV0dXJuICptX2xpc3RbaV07IH0KICAgICBjb25zdCBBY2Nlc3NDYXNlJiBvcGVyYXRvcltdKHVu
c2lnbmVkIGkpIGNvbnN0IHsgcmV0dXJuICptX2xpc3RbaV07IH0KIAotICAgIHZvaWQgdmlzaXRB
Z2dyZWdhdGUoU2xvdFZpc2l0b3ImKTsKKy8vICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+
IHZvaWQgdmlzaXRBZ2dyZWdhdGUoVmlzaXRvciYpOworICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUx
KEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKIAogICAgIC8vIElmIHRoaXMgcmV0dXJucyBmYWxzZSB0
aGVuIHdlIGFyZSByZXF1ZXN0aW5nIGEgcmVzZXQgb2YgdGhlIG93bmluZyBTdHJ1Y3R1cmVTdHVi
SW5mby4KICAgICBib29sIHZpc2l0V2VhayhWTSYpIGNvbnN0OwogICAgIAogICAgIC8vIFRoaXMg
cmV0dXJucyB0cnVlIGlmIGl0IGhhcyBtYXJrZWQgZXZlcnl0aGluZyBpdCB3aWxsIGV2ZXIgbWFy
a2VkLiBUaGlzIGNhbiBiZSB1c2VkIGFzIGFuCiAgICAgLy8gb3B0aW1pemF0aW9uIHRvIHRoZW4g
YXZvaWQgY2FsbGluZyB0aGlzIG1ldGhvZCBhZ2FpbiBkdXJpbmcgdGhlIGZpeHBvaW50LgotICAg
IGJvb2wgcHJvcGFnYXRlVHJhbnNpdGlvbnMoU2xvdFZpc2l0b3ImKSBjb25zdDsKKy8vICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IGJvb2wgcHJvcGFnYXRlVHJhbnNpdGlvbnMxMChWaXNp
dG9yJikgY29uc3Q7CisgICAgYm9vbCBwcm9wYWdhdGVUcmFuc2l0aW9uczEwKEFic3RyYWN0U2xv
dFZpc2l0b3ImKSBjb25zdDsKIAogICAgIHZvaWQgYWJvdXRUb0RpZSgpOwogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuY3BwCShyZXZp
c2lvbiAyNzIyOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0
YXR1cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5NiwxMiArMzk2LDE3IEBAIFB1dEJ5SWRTdGF0
dXMgUHV0QnlJZFN0YXR1czo6c2xvd1ZlcnNpb24KICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyht
YWtlc0NhbGxzKCkgPyBNYWtlc0NhbGxzIDogVGFrZXNTbG93UGF0aCk7CiB9CiAKLXZvaWQgUHV0
QnlJZFN0YXR1czo6bWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3RlbXBsYXRl
PHR5cGVuYW1lIFZpc2l0b3I+CisvL3ZvaWQgUHV0QnlJZFN0YXR1czo6bWFya0lmQ2hlYXAoVmlz
aXRvciYgdmlzaXRvcikKK3ZvaWQgUHV0QnlJZFN0YXR1czo6bWFya0lmQ2hlYXAxKEFic3RyYWN0
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgZm9yIChQdXRCeUlkVmFyaWFudCYgdmFyaWFu
dCA6IG1fdmFyaWFudHMpCi0gICAgICAgIHZhcmlhbnQubWFya0lmQ2hlYXAodmlzaXRvcik7Cisg
ICAgICAgIHZhcmlhbnQubWFya0lmQ2hlYXAxKHZpc2l0b3IpOwogfQogCisvL3RlbXBsYXRlIHZv
aWQgUHV0QnlJZFN0YXR1czo6bWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImKTsKKy8vdGVtcGxhdGUg
dm9pZCBQdXRCeUlkU3RhdHVzOjptYXJrSWZDaGVhcChWZXJpZmllclNsb3RWaXNpdG9yJik7CisK
IGJvb2wgUHV0QnlJZFN0YXR1czo6ZmluYWxpemUoVk0mIHZtKQogewogICAgIGZvciAoUHV0QnlJ
ZFZhcmlhbnQmIHZhcmlhbnQgOiBtX3ZhcmlhbnRzKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmgJKHJldmlzaW9uIDI3MjI5NykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTExNyw3ICsxMTcsOCBAQCBwdWJsaWM6CiAgICAgY29uc3QgUHV0QnlJZFZhcmlh
bnQmIGF0KHNpemVfdCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV92YXJpYW50c1tpbmRleF07IH0K
ICAgICBjb25zdCBQdXRCeUlkVmFyaWFudCYgb3BlcmF0b3JbXShzaXplX3QgaW5kZXgpIGNvbnN0
IHsgcmV0dXJuIGF0KGluZGV4KTsgfQogICAgIAotICAgIHZvaWQgbWFya0lmQ2hlYXAoU2xvdFZp
c2l0b3ImKTsKKy8vICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgbWFya0lmQ2hl
YXAoVmlzaXRvciYpOworICAgIHZvaWQgbWFya0lmQ2hlYXAxKEFic3RyYWN0U2xvdFZpc2l0b3Im
KTsKICAgICBib29sIGZpbmFsaXplKFZNJik7CiAgICAgCiAgICAgdm9pZCBtZXJnZShjb25zdCBQ
dXRCeUlkU3RhdHVzJik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0
QnlJZFZhcmlhbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9QdXRCeUlkVmFyaWFudC5jcHAJKHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkVmFyaWFudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI2MiwxMyArMjYyLDE4IEBAIGJvb2wgUHV0QnlJZFZhcmlhbnQ6OmF0dGVtcHRUb01lcmdlVHJh
bnMKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBQdXRCeUlkVmFyaWFudDo6bWFya0lmQ2hl
YXAoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cisv
L3ZvaWQgUHV0QnlJZFZhcmlhbnQ6Om1hcmtJZkNoZWFwKFZpc2l0b3ImIHZpc2l0b3IpCit2b2lk
IFB1dEJ5SWRWYXJpYW50OjptYXJrSWZDaGVhcDEoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRv
cikKIHsKLSAgICBtX29sZFN0cnVjdHVyZS5tYXJrSWZDaGVhcCh2aXNpdG9yKTsKKyAgICBtX29s
ZFN0cnVjdHVyZS5tYXJrSWZDaGVhcDEodmlzaXRvcik7CiAgICAgaWYgKG1fbmV3U3RydWN0dXJl
KQotICAgICAgICBtX25ld1N0cnVjdHVyZS0+bWFya0lmQ2hlYXAodmlzaXRvcik7CisgICAgICAg
IG1fbmV3U3RydWN0dXJlLT5tYXJrSWZDaGVhcDEodmlzaXRvcik7CiB9CiAKKy8vdGVtcGxhdGUg
dm9pZCBQdXRCeUlkVmFyaWFudDo6bWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImKTsKKy8vdGVtcGxh
dGUgdm9pZCBQdXRCeUlkVmFyaWFudDo6bWFya0lmQ2hlYXAoVmVyaWZpZXJTbG90VmlzaXRvciYp
OworCiBib29sIFB1dEJ5SWRWYXJpYW50OjpmaW5hbGl6ZShWTSYgdm0pCiB7CiAgICAgaWYgKCFt
X29sZFN0cnVjdHVyZS5pc1N0aWxsQWxpdmUodm0pKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmgJKHJldmlzaW9uIDI3MjI5NykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkVmFyaWFudC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xMzIsNyArMTMyLDggQEAgcHVibGljOgogCiAgICAgYm9vbCBhdHRlbXB0VG9N
ZXJnZShjb25zdCBQdXRCeUlkVmFyaWFudCYgb3RoZXIpOwogICAgIAotICAgIHZvaWQgbWFya0lm
Q2hlYXAoU2xvdFZpc2l0b3ImKTsKKy8vICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZv
aWQgbWFya0lmQ2hlYXAoVmlzaXRvciYpOworICAgIHZvaWQgbWFya0lmQ2hlYXAxKEFic3RyYWN0
U2xvdFZpc2l0b3ImKTsKICAgICBib29sIGZpbmFsaXplKFZNJik7CiAgICAgCiAgICAgdm9pZCBk
dW1wKFByaW50U3RyZWFtJikgY29uc3Q7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvUmVjb3JkZWRTdGF0dXNlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1JlY29yZGVkU3RhdHVzZXMuY3BwCShyZXZpc2lvbiAyNzIyOTcpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUmVjb3JkZWRTdGF0dXNlcy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTg0LDI2ICs4NCwzNiBAQCBEZWxldGVCeVN0YXR1cyogUmVjb3JkZWRT
dGF0dXNlczo6YWRkRGVsCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotdm9pZCBSZWNvcmRlZFN0
YXR1c2VzOjp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IpCisvL3RlbXBs
YXRlPHR5cGVuYW1lIFZpc2l0b3I+CisvL3ZvaWQgUmVjb3JkZWRTdGF0dXNlczo6dmlzaXRBZ2dy
ZWdhdGUoVmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgUmVjb3JkZWRTdGF0dXNlczo6dmlzaXRBZ2dy
ZWdhdGUxKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgZm9yIChhdXRvJiBw
YWlyIDogZ2V0cykKLSAgICAgICAgcGFpci5zZWNvbmQtPnZpc2l0QWdncmVnYXRlKHNsb3RWaXNp
dG9yKTsKKyAgICAgICAgcGFpci5zZWNvbmQtPnZpc2l0QWdncmVnYXRlMSh2aXNpdG9yKTsKICAg
ICBmb3IgKGF1dG8mIHBhaXIgOiBkZWxldGVzKQotICAgICAgICBwYWlyLnNlY29uZC0+dmlzaXRB
Z2dyZWdhdGUoc2xvdFZpc2l0b3IpOworICAgICAgICBwYWlyLnNlY29uZC0+dmlzaXRBZ2dyZWdh
dGUxKHZpc2l0b3IpOwogfQogCi12b2lkIFJlY29yZGVkU3RhdHVzZXM6Om1hcmtJZkNoZWFwKFNs
b3RWaXNpdG9yJiBzbG90VmlzaXRvcikKKy8vdGVtcGxhdGUgdm9pZCBSZWNvcmRlZFN0YXR1c2Vz
Ojp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYpOworLy90ZW1wbGF0ZSB2b2lkIFJlY29yZGVk
U3RhdHVzZXM6OnZpc2l0QWdncmVnYXRlKFZlcmlmaWVyU2xvdFZpc2l0b3ImKTsKKworLy90ZW1w
bGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgorLy92b2lkIFJlY29yZGVkU3RhdHVzZXM6Om1hcmtJZkNo
ZWFwKFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIFJlY29yZGVkU3RhdHVzZXM6Om1hcmtJZkNoZWFw
MShBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGZvciAoYXV0byYgcGFpciA6
IGdldHMpCi0gICAgICAgIHBhaXIuc2Vjb25kLT5tYXJrSWZDaGVhcChzbG90VmlzaXRvcik7Cisg
ICAgICAgIHBhaXIuc2Vjb25kLT5tYXJrSWZDaGVhcDEodmlzaXRvcik7CiAgICAgZm9yIChhdXRv
JiBwYWlyIDogcHV0cykKLSAgICAgICAgcGFpci5zZWNvbmQtPm1hcmtJZkNoZWFwKHNsb3RWaXNp
dG9yKTsKKyAgICAgICAgcGFpci5zZWNvbmQtPm1hcmtJZkNoZWFwMSh2aXNpdG9yKTsKICAgICBm
b3IgKGF1dG8mIHBhaXIgOiBpbnMpCi0gICAgICAgIHBhaXIuc2Vjb25kLT5tYXJrSWZDaGVhcChz
bG90VmlzaXRvcik7CisgICAgICAgIHBhaXIuc2Vjb25kLT5tYXJrSWZDaGVhcDEodmlzaXRvcik7
CiAgICAgZm9yIChhdXRvJiBwYWlyIDogZGVsZXRlcykKLSAgICAgICAgcGFpci5zZWNvbmQtPm1h
cmtJZkNoZWFwKHNsb3RWaXNpdG9yKTsKKyAgICAgICAgcGFpci5zZWNvbmQtPm1hcmtJZkNoZWFw
MSh2aXNpdG9yKTsKIH0KIAorLy90ZW1wbGF0ZSB2b2lkIFJlY29yZGVkU3RhdHVzZXM6Om1hcmtJ
ZkNoZWFwKFNsb3RWaXNpdG9yJik7CisvL3RlbXBsYXRlIHZvaWQgUmVjb3JkZWRTdGF0dXNlczo6
bWFya0lmQ2hlYXAoVmVyaWZpZXJTbG90VmlzaXRvciYpOworCiB2b2lkIFJlY29yZGVkU3RhdHVz
ZXM6OmZpbmFsaXplV2l0aG91dERlbGV0aW5nKFZNJiB2bSkKIHsKICAgICAvLyBUaGlzIHZhcmlh
bnQgb2YgZmluYWxpemUgZ2V0cyBjYWxsZWQgZnJvbSB3aXRoaW4gZ3JhcGggc2FmZXBvaW50cyAt
LSBzbyB0aGVyZSBtYXkgYmUgREZHIElSIGluCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvUmVjb3JkZWRTdGF0dXNlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9SZWNvcmRlZFN0YXR1c2VzLmgJKHJldmlzaW9uIDI3MjI5NykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9SZWNvcmRlZFN0YXR1c2VzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTUwLDggKzUwLDEwIEBAIHN0cnVjdCBSZWNvcmRlZFN0YXR1c2VzIHsKICAg
ICBJbkJ5SWRTdGF0dXMqIGFkZEluQnlJZFN0YXR1cyhjb25zdCBDb2RlT3JpZ2luJiwgY29uc3Qg
SW5CeUlkU3RhdHVzJik7CiAgICAgRGVsZXRlQnlTdGF0dXMqIGFkZERlbGV0ZUJ5U3RhdHVzKGNv
bnN0IENvZGVPcmlnaW4mLCBjb25zdCBEZWxldGVCeVN0YXR1cyYpOwogICAgIAotICAgIHZvaWQg
dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImKTsKLSAgICB2b2lkIG1hcmtJZkNoZWFwKFNsb3RW
aXNpdG9yJik7CisvLyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIHZpc2l0QWdn
cmVnYXRlKFZpc2l0b3ImKTsKKy8vICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQg
bWFya0lmQ2hlYXAoVmlzaXRvciYpOworICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUxKEFic3RyYWN0
U2xvdFZpc2l0b3ImKTsKKyAgICB2b2lkIG1hcmtJZkNoZWFwMShBYnN0cmFjdFNsb3RWaXNpdG9y
Jik7CiAgICAgCiAgICAgdm9pZCBmaW5hbGl6ZVdpdGhvdXREZWxldGluZyhWTSYpOwogICAgIHZv
aWQgZmluYWxpemUoVk0mKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9T
dHJ1Y3R1cmVTZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9TdHJ1Y3R1cmVTZXQuY3BwCShyZXZpc2lvbiAyNzIyOTcpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEs
MTIgKzMxLDE3IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi12b2lkIFN0cnVjdHVyZVNldDo6bWFy
a0lmQ2hlYXAoU2xvdFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0CisvL3RlbXBsYXRlPHR5cGVuYW1l
IFZpc2l0b3I+CisvL3ZvaWQgU3RydWN0dXJlU2V0OjptYXJrSWZDaGVhcChWaXNpdG9yJiB2aXNp
dG9yKSBjb25zdAordm9pZCBTdHJ1Y3R1cmVTZXQ6Om1hcmtJZkNoZWFwMShBYnN0cmFjdFNsb3RW
aXNpdG9yJiB2aXNpdG9yKSBjb25zdAogewogICAgIGZvciAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUg
OiAqdGhpcykKLSAgICAgICAgc3RydWN0dXJlLT5tYXJrSWZDaGVhcCh2aXNpdG9yKTsKKyAgICAg
ICAgc3RydWN0dXJlLT5tYXJrSWZDaGVhcDEodmlzaXRvcik7CiB9CiAKKy8vdGVtcGxhdGUgdm9p
ZCBTdHJ1Y3R1cmVTZXQ6Om1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJikgY29uc3Q7CisvL3RlbXBs
YXRlIHZvaWQgU3RydWN0dXJlU2V0OjptYXJrSWZDaGVhcChWZXJpZmllclNsb3RWaXNpdG9yJikg
Y29uc3Q7CisKIGJvb2wgU3RydWN0dXJlU2V0Ojppc1N0aWxsQWxpdmUoVk0mIHZtKSBjb25zdAog
ewogICAgIGZvciAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUgOiAqdGhpcykgewpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVNldC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTZXQuaAkocmV2aXNpb24gMjcy
Mjk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVNldC5oCSh3
b3JraW5nIGNvcHkpCkBAIC01NCw3ICs1NCw4IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG9u
bHlFbnRyeSgpOwogICAgIH0KIAotICAgIHZvaWQgbWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImKSBj
b25zdDsKKy8vICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgbWFya0lmQ2hlYXAo
VmlzaXRvciYpIGNvbnN0OworICAgIHZvaWQgbWFya0lmQ2hlYXAxKEFic3RyYWN0U2xvdFZpc2l0
b3ImKSBjb25zdDsKICAgICBib29sIGlzU3RpbGxBbGl2ZShWTSYpIGNvbnN0OwogICAgIAogICAg
IHZvaWQgZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYsIER1bXBDb250ZXh0KikgY29uc3Q7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVT
dHViSW5mby5jcHAJKHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5MCwxMiAr
MjkwLDE0IEBAIHZvaWQgU3RydWN0dXJlU3R1YkluZm86OnJlc2V0KGNvbnN0IENvbmMKICAgICBz
ZXRDYWNoZVR5cGUobG9ja2VyLCBDYWNoZVR5cGU6OlVuc2V0KTsKIH0KIAotdm9pZCBTdHJ1Y3R1
cmVTdHViSW5mbzo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3RlbXBs
YXRlPHR5cGVuYW1lIFZpc2l0b3I+CisvL3ZvaWQgU3RydWN0dXJlU3R1YkluZm86OnZpc2l0QWdn
cmVnYXRlKFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjp2aXNpdEFn
Z3JlZ2F0ZTEoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB7CiAgICAgICAg
IGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9idWZmZXJlZFN0cnVjdHVyZXNMb2NrKTsKICAgICAg
ICAgZm9yIChhdXRvJiBidWZmZXJlZFN0cnVjdHVyZSA6IG1fYnVmZmVyZWRTdHJ1Y3R1cmVzKQot
ICAgICAgICAgICAgYnVmZmVyZWRTdHJ1Y3R1cmUuYnlWYWxJZCgpLnZpc2l0QWdncmVnYXRlKHZp
c2l0b3IpOworICAgICAgICAgICAgYnVmZmVyZWRTdHJ1Y3R1cmUuYnlWYWxJZCgpLnZpc2l0QWdn
cmVnYXRlMSh2aXNpdG9yKTsKICAgICB9CiAgICAgc3dpdGNoIChtX2NhY2hlVHlwZSkgewogICAg
IGNhc2UgQ2FjaGVUeXBlOjpVbnNldDoKQEAgLTMwNSwxMCArMzA3LDEwIEBAIHZvaWQgU3RydWN0
dXJlU3R1YkluZm86OnZpc2l0QWdncmVnYXRlKFMKICAgICBjYXNlIENhY2hlVHlwZTo6UHV0QnlJ
ZFJlcGxhY2U6CiAgICAgY2FzZSBDYWNoZVR5cGU6OkluQnlJZFNlbGY6CiAgICAgY2FzZSBDYWNo
ZVR5cGU6OkdldEJ5SWRTZWxmOgotICAgICAgICBtX2lkZW50aWZpZXIudmlzaXRBZ2dyZWdhdGUo
dmlzaXRvcik7CisgICAgICAgIG1faWRlbnRpZmllci52aXNpdEFnZ3JlZ2F0ZTEodmlzaXRvcik7
CiAgICAgICAgIHJldHVybjsKICAgICBjYXNlIENhY2hlVHlwZTo6U3R1YjoKLSAgICAgICAgdS5z
dHViLT52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKKyAgICAgICAgdS5zdHViLT52aXNpdEFnZ3Jl
Z2F0ZTEodmlzaXRvcik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCkBAIC0zMTYsNiAr
MzE4LDkgQEAgdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6dmlzaXRBZ2dyZWdhdGUoUwogICAgIHJl
dHVybjsKIH0KIAorLy90ZW1wbGF0ZSB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjp2aXNpdEFnZ3Jl
Z2F0ZShTbG90VmlzaXRvciYpOworLy90ZW1wbGF0ZSB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjp2
aXNpdEFnZ3JlZ2F0ZShWZXJpZmllclNsb3RWaXNpdG9yJik7CisKIHZvaWQgU3RydWN0dXJlU3R1
YkluZm86OnZpc2l0V2Vha1JlZmVyZW5jZXMoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyQmFzZSYg
bG9ja2VyLCBDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKICAgICBWTSYgdm0gPSBjb2RlQmxvY2st
PnZtKCk7CkBAIC0zNDYsMjQgKzM1MSwzMSBAQCB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjp2aXNp
dFdlYWtSZWZlcmVuCiAgICAgcmVzZXRCeUdDID0gdHJ1ZTsKIH0KIAotYm9vbCBTdHJ1Y3R1cmVT
dHViSW5mbzo6cHJvcGFnYXRlVHJhbnNpdGlvbnMoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCi17Ci0g
ICAgc3dpdGNoIChtX2NhY2hlVHlwZSkgewotICAgIGNhc2UgQ2FjaGVUeXBlOjpVbnNldDoKLSAg
ICBjYXNlIENhY2hlVHlwZTo6QXJyYXlMZW5ndGg6Ci0gICAgY2FzZSBDYWNoZVR5cGU6OlN0cmlu
Z0xlbmd0aDoKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgY2FzZSBDYWNoZVR5cGU6OkdldEJ5
SWRTZWxmOgotICAgIGNhc2UgQ2FjaGVUeXBlOjpQdXRCeUlkUmVwbGFjZToKLSAgICBjYXNlIENh
Y2hlVHlwZTo6SW5CeUlkU2VsZjoKLSAgICAgICAgcmV0dXJuIHUuYnlJZFNlbGYuYmFzZU9iamVj
dFN0cnVjdHVyZS0+bWFya0lmQ2hlYXAodmlzaXRvcik7Ci0gICAgY2FzZSBDYWNoZVR5cGU6OlN0
dWI6Ci0gICAgICAgIHJldHVybiB1LnN0dWItPnByb3BhZ2F0ZVRyYW5zaXRpb25zKHZpc2l0b3Ip
OwotICAgIH0KLSAgICAKLSAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJl
dHVybiB0cnVlOwotfQorLy90ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgorLy9ib29sIFN0cnVj
dHVyZVN0dWJJbmZvOjpwcm9wYWdhdGVUcmFuc2l0aW9uczEoVmlzaXRvciYgdmlzaXRvcikKKy8v
eworLy8gICAgc3dpdGNoIChtX2NhY2hlVHlwZSkgeworLy8gICAgY2FzZSBDYWNoZVR5cGU6OlVu
c2V0OgorLy8gICAgY2FzZSBDYWNoZVR5cGU6OkFycmF5TGVuZ3RoOgorLy8gICAgY2FzZSBDYWNo
ZVR5cGU6OlN0cmluZ0xlbmd0aDoKKy8vICAgICAgICByZXR1cm4gdHJ1ZTsKKy8vICAgIGNhc2Ug
Q2FjaGVUeXBlOjpHZXRCeUlkU2VsZjoKKy8vICAgIGNhc2UgQ2FjaGVUeXBlOjpQdXRCeUlkUmVw
bGFjZToKKy8vICAgIGNhc2UgQ2FjaGVUeXBlOjpJbkJ5SWRTZWxmOgorLy8gICAgICAgIHJldHVy
biB1LmJ5SWRTZWxmLmJhc2VPYmplY3RTdHJ1Y3R1cmUtPm1hcmtJZkNoZWFwMSh2aXNpdG9yKTsK
Ky8vICAgICAgICByZXR1cm4gZmFsc2U7CisvLyAgICBjYXNlIENhY2hlVHlwZTo6U3R1YjoKKy8v
ICAgICAgICByZXR1cm4gdS5zdHViLT5wcm9wYWdhdGVUcmFuc2l0aW9uczEwKHZpc2l0b3IpOwor
Ly8gICAgICAgIHJldHVybiBmYWxzZTsKKy8vICAgIH0KKy8vCisvLy8vICAgIFVOVVNFRF9QQVJB
TSh2aXNpdG9yKTsgLy8gbWxhbSBURVNUCisvLyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOworLy8gICAgcmV0dXJuIHRydWU7CisvL30KKy8vCisvL3RlbXBsYXRlPD4gYm9vbCBTdHJ1
Y3R1cmVTdHViSW5mbzo6cHJvcGFnYXRlVHJhbnNpdGlvbnMxKFNsb3RWaXNpdG9yJik7CisvL3Rl
bXBsYXRlPD4gYm9vbCBTdHJ1Y3R1cmVTdHViSW5mbzo6cHJvcGFnYXRlVHJhbnNpdGlvbnMxKEFi
c3RyYWN0U2xvdFZpc2l0b3ImKTsKIAogU3R1YkluZm9TdW1tYXJ5IFN0cnVjdHVyZVN0dWJJbmZv
OjpzdW1tYXJ5KFZNJiB2bSkgY29uc3QKIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCShyZXZpc2lvbiAyNzIyOTcpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaAkod29y
a2luZyBjb3B5KQpAQCAtOTEsMTQgKzkxLDE2IEBAIHB1YmxpYzoKICAgICB2b2lkIGRlcmVmKCk7
CiAgICAgdm9pZCBhYm91dFRvRGllKCk7CiAKLSAgICB2b2lkIHZpc2l0QWdncmVnYXRlKFNsb3RW
aXNpdG9yJik7CisvLyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIHZpc2l0QWdn
cmVnYXRlKFZpc2l0b3ImKTsKKyAgICB2b2lkIHZpc2l0QWdncmVnYXRlMShBYnN0cmFjdFNsb3RW
aXNpdG9yJik7CiAKICAgICAvLyBDaGVjayBpZiB0aGUgc3R1YiBoYXMgd2VhayByZWZlcmVuY2Vz
IHRoYXQgYXJlIGRlYWQuIElmIGl0IGRvZXMsIHRoZW4gaXQgcmVzZXRzIGl0c2VsZiwKICAgICAv
LyBlaXRoZXIgZW50aXJlbHkgb3IganVzdCBlbm91Z2ggdG8gZW5zdXJlIHRoYXQgdGhvc2UgZGVh
ZCBwb2ludGVycyBkb24ndCBnZXQgdXNlZCBhbnltb3JlLgogICAgIHZvaWQgdmlzaXRXZWFrUmVm
ZXJlbmNlcyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXJCYXNlJiwgQ29kZUJsb2NrKik7CiAgICAg
CiAgICAgLy8gVGhpcyByZXR1cm5zIHRydWUgaWYgaXQgaGFzIG1hcmtlZCBldmVyeXRoaW5nIHRo
YXQgaXQgd2lsbCBldmVyIG1hcmsuCi0gICAgYm9vbCBwcm9wYWdhdGVUcmFuc2l0aW9ucyhTbG90
VmlzaXRvciYpOworLy8gICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gYm9vbCBwcm9wYWdh
dGVUcmFuc2l0aW9uczEoVmlzaXRvciYpOworICAgIGJvb2wgcHJvcGFnYXRlVHJhbnNpdGlvbnMx
KEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKICAgICAgICAgCiAgICAgU3R1YkluZm9TdW1tYXJ5IHN1
bW1hcnkoVk0mKSBjb25zdDsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcAkocmV2aXNpb24gMjcyMjk3KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIt
MjAxOSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTItMjAyMCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTcxLDcgKzcxLDggQEAgVW5saW5rZWRDb2RlQmxvY2s6OlVubGlu
a2VkQ29kZUJsb2NrKFZNJgogICAgIH0KIH0KIAotdm9pZCBVbmxpbmtlZENvZGVCbG9jazo6dmlz
aXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8
dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgVW5saW5rZWRDb2RlQmxvY2s6OnZpc2l0Q2hpbGRyZW5J
bXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBVbmxpbmtlZENvZGVC
bG9jayogdGhpc09iamVjdCA9IGpzQ2FzdDxVbmxpbmtlZENvZGVCbG9jayo+KGNlbGwpOwogICAg
IEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTkwLDYg
KzkxLDggQEAgdm9pZCBVbmxpbmtlZENvZGVCbG9jazo6dmlzaXRDaGlsZHJlbihKUwogICAgIHZp
c2l0b3IucmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKGV4dHJhTWVtb3J5KTsKIH0KIAorREVGSU5F
X1ZJU0lUX0NISUxEUkVOKFVubGlua2VkQ29kZUJsb2NrKTsKKwogc2l6ZV90IFVubGlua2VkQ29k
ZUJsb2NrOjplc3RpbWF0ZWRTaXplKEpTQ2VsbCogY2VsbCwgVk0mIHZtKQogewogICAgIFVubGlu
a2VkQ29kZUJsb2NrKiB0aGlzT2JqZWN0ID0ganNDYXN0PFVubGlua2VkQ29kZUJsb2NrKj4oY2Vs
bCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxv
Y2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5r
ZWRDb2RlQmxvY2suaAkocmV2aXNpb24gMjcyMjk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTkgQXBwbGUgSW5jLiBBbGwgUmlnaHRz
IFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjAgQXBwbGUgSW5jLiBBbGwgUmln
aHRzIFJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00MjMsNyAr
NDIzLDcgQEAgcHJpdmF0ZToKICAgICBSZWZDb3VudGVkQXJyYXk8RXhwcmVzc2lvblJhbmdlSW5m
bz4gbV9leHByZXNzaW9uSW5mbzsKIAogcHJvdGVjdGVkOgotICAgIHN0YXRpYyB2b2lkIHZpc2l0
Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxE
UkVOOwogICAgIHN0YXRpYyBzaXplX3QgZXN0aW1hdGVkU2l6ZShKU0NlbGwqLCBWTSYpOwogCiBw
dWJsaWM6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRGdW5j
dGlvbkV4ZWN1dGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5jcHAJKHJldmlzaW9uIDI3MjI5NykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9uRXhlY3V0
YWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDEyLTIwMTkgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEyLTIwMjAgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xNDEsNyArMTQxLDggQEAgdm9pZCBVbmxpbmtl
ZEZ1bmN0aW9uRXhlY3V0YWJsZTo6ZGVzdHJveQogICAgIHN0YXRpY19jYXN0PFVubGlua2VkRnVu
Y3Rpb25FeGVjdXRhYmxlKj4oY2VsbCktPn5VbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSgpOwog
fQogCi12b2lkIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlOjp2aXNpdENoaWxkcmVuKEpTQ2Vs
bCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
Pgordm9pZCBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6dmlzaXRDaGlsZHJlbkltcGwoSlND
ZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFVubGlua2VkRnVuY3Rpb25FeGVj
dXRhYmxlKiB0aGlzT2JqZWN0ID0ganNDYXN0PFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKj4o
Y2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkp
OwpAQCAtMTY0LDYgKzE2NSw4IEBAIHZvaWQgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU6OnZp
c2l0Q2gKICAgICB9CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihVbmxpbmtlZEZ1bmN0aW9u
RXhlY3V0YWJsZSk7CisKIFNvdXJjZUNvZGUgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU6Omxp
bmtlZFNvdXJjZUNvZGUoY29uc3QgU291cmNlQ29kZSYgcGFzc2VkUGFyZW50U291cmNlKSBjb25z
dAogewogICAgIGNvbnN0IFNvdXJjZUNvZGUmIHBhcmVudFNvdXJjZSA9ICFtX2lzQnVpbHRpbkRl
ZmF1bHRDbGFzc0NvbnN0cnVjdG9yID8gcGFzc2VkUGFyZW50U291cmNlIDogQnVpbHRpbkV4ZWN1
dGFibGVzOjpkZWZhdWx0Q29uc3RydWN0b3JTb3VyY2VDb2RlKGNvbnN0cnVjdG9yS2luZCgpKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9uRXhl
Y3V0YWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9V
bmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5oCShyZXZpc2lvbiAyNzIyOTcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUuaAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAx
OSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIt
MjAyMCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTIzMiw3ICsyMzIsNyBAQCBwcml2YXRlOgogICAgIFVubGlua2VkRnVu
Y3Rpb25FeGVjdXRhYmxlKFZNJiwgU3RydWN0dXJlKiwgY29uc3QgU291cmNlQ29kZSYsIEZ1bmN0
aW9uTWV0YWRhdGFOb2RlKiwgVW5saW5rZWRGdW5jdGlvbktpbmQsIENvbnN0cnVjdEFiaWxpdHks
IEpTUGFyc2VyU2NyaXB0TW9kZSwgUmVmUHRyPFREWkVudmlyb25tZW50TGluaz4sICBKU0M6OkRl
cml2ZWRDb250ZXh0VHlwZSwgSlNDOjpOZWVkc0NsYXNzRmllbGRJbml0aWFsaXplciwgYm9vbCBp
c0J1aWx0aW5EZWZhdWx0Q2xhc3NDb25zdHJ1Y3Rvcik7CiAgICAgVW5saW5rZWRGdW5jdGlvbkV4
ZWN1dGFibGUoRGVjb2RlciYsIGNvbnN0IENhY2hlZEZ1bmN0aW9uRXhlY3V0YWJsZSYpOwogCi0g
ICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAg
IERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICB2b2lkIGRlY29kZUNhY2hlZENvZGVCbG9j
a3MoVk0mKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2Vy
U2NvcGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9E
ZWJ1Z2dlclNjb3BlLmNwcAkocmV2aXNpb24gMjcyMjk3KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RlYnVnZ2VyL0RlYnVnZ2VyU2NvcGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDIwIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTUsNyAr
NTUsOCBAQCB2b2lkIERlYnVnZ2VyU2NvcGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2CiAgICAgQmFz
ZTo6ZmluaXNoQ3JlYXRpb24odm0pOwogfQogCi12b2lkIERlYnVnZ2VyU2NvcGU6OnZpc2l0Q2hp
bGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVu
YW1lIFZpc2l0b3I+Cit2b2lkIERlYnVnZ2VyU2NvcGU6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2Vs
bCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBEZWJ1Z2dlclNjb3BlKiB0aGlzT2Jq
ZWN0ID0ganNDYXN0PERlYnVnZ2VyU2NvcGUqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNU
X0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC02NSw2ICs2Niw4IEBAIHZvaWQgRGVi
dWdnZXJTY29wZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlz
T2JqZWN0LT5tX25leHQpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oRGVidWdnZXJTY29w
ZSk7CisKIFN0cmluZyBEZWJ1Z2dlclNjb3BlOjpjbGFzc05hbWUoY29uc3QgSlNPYmplY3QqIG9i
amVjdCwgVk0mIHZtKQogewogICAgIGNvbnN0IERlYnVnZ2VyU2NvcGUqIHNjb3BlID0ganNDYXN0
PGNvbnN0IERlYnVnZ2VyU2NvcGUqPihvYmplY3QpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RlYnVnZ2VyL0RlYnVnZ2VyU2NvcGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXJTY29wZS5oCShyZXZpc2lvbiAyNzIyOTcpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXJTY29wZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC00Niw3ICs0Niw3IEBAIHB1YmxpYzoKIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0
YXRpYyBEZWJ1Z2dlclNjb3BlKiBjcmVhdGUoVk0mIHZtLCBKU1Njb3BlKiBzY29wZSk7CiAKLSAg
ICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAg
REVDTEFSRV9WSVNJVF9DSElMRFJFTjsKICAgICBzdGF0aWMgU3RyaW5nIGNsYXNzTmFtZShjb25z
dCBKU09iamVjdCosIFZNJik7CiAgICAgc3RhdGljIFN0cmluZyB0b1N0cmluZ05hbWUoY29uc3Qg
SlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCopOwogICAgIHN0YXRpYyBib29sIGdldE93blByb3Bl
cnR5U2xvdChKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0
eVNsb3QmKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFRyYW5z
aXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rl
c2lyZWRUcmFuc2l0aW9ucy5jcHAJKHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHRGVzaXJlZFRyYW5zaXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTIsNyArNTIsNyBAQCB2b2lkIERlc2lyZWRUcmFuc2l0aW9uOjpyZWFsbHlBZGQoVk0mIHZtCiAg
ICAgICAgICAgICBtX29sZFN0cnVjdHVyZSwgbV9uZXdTdHJ1Y3R1cmUpKTsKIH0KIAotdm9pZCBE
ZXNpcmVkVHJhbnNpdGlvbjo6dmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3Zv
aWQgRGVzaXJlZFRyYW5zaXRpb246OnZpc2l0Q2hpbGRyZW4yKEFic3RyYWN0U2xvdFZpc2l0b3Im
IHZpc2l0b3IpCiB7CiAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZChtX2NvZGVPcmlnaW5P
d25lcik7CiAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZChtX29sZFN0cnVjdHVyZSk7CkBA
IC03OCwxMCArNzgsMTAgQEAgdm9pZCBEZXNpcmVkVHJhbnNpdGlvbnM6OnJlYWxseUFkZChWTSYg
dgogICAgICAgICBtX3RyYW5zaXRpb25zW2ldLnJlYWxseUFkZCh2bSwgY29tbW9uKTsKIH0KIAot
dm9pZCBEZXNpcmVkVHJhbnNpdGlvbnM6OnZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0
b3IpCit2b2lkIERlc2lyZWRUcmFuc2l0aW9uczo6dmlzaXRDaGlsZHJlbjIoQWJzdHJhY3RTbG90
VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV90cmFu
c2l0aW9ucy5zaXplKCk7IGkrKykKLSAgICAgICAgbV90cmFuc2l0aW9uc1tpXS52aXNpdENoaWxk
cmVuKHZpc2l0b3IpOworICAgICAgICBtX3RyYW5zaXRpb25zW2ldLnZpc2l0Q2hpbGRyZW4yKHZp
c2l0b3IpOwogfQogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRUcmFuc2l0aW9ucy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFRyYW5zaXRpb25zLmgJKHJldmlzaW9u
IDI3MjI5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFRyYW5zaXRp
b25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDggKzQ2LDcgQEAgcHVibGljOgogICAgIERlc2ly
ZWRUcmFuc2l0aW9uKENvZGVCbG9jayosIENvZGVCbG9jayogY29kZU9yaWdpbk93bmVyLCBTdHJ1
Y3R1cmUqLCBTdHJ1Y3R1cmUqKTsKIAogICAgIHZvaWQgcmVhbGx5QWRkKFZNJiwgQ29tbW9uRGF0
YSopOwotICAgIAotICAgIHZvaWQgdmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYpOworICAgIHZv
aWQgdmlzaXRDaGlsZHJlbjIoQWJzdHJhY3RTbG90VmlzaXRvciYpOwogCiBwcml2YXRlOgogICAg
IENvZGVCbG9jayogbV9jb2RlQmxvY2s7CkBAIC02Myw3ICs2Miw3IEBAIHB1YmxpYzoKIAogICAg
IHZvaWQgYWRkTGF6aWx5KENvZGVCbG9jayosIENvZGVCbG9jayogY29kZU9yaWdpbk93bmVyLCBT
dHJ1Y3R1cmUqLCBTdHJ1Y3R1cmUqKTsKICAgICB2b2lkIHJlYWxseUFkZChWTSYsIENvbW1vbkRh
dGEqKTsKLSAgICB2b2lkIHZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKKyAgICB2b2lkIHZp
c2l0Q2hpbGRyZW4yKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKIAogcHJpdmF0ZToKICAgICBWZWN0
b3I8RGVzaXJlZFRyYW5zaXRpb24+IG1fdHJhbnNpdGlvbnM7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXZWFrUmVmZXJlbmNlcy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2Vha1JlZmVyZW5jZXMuY3BwCShy
ZXZpc2lvbiAyNzIyOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRX
ZWFrUmVmZXJlbmNlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg3LDcgKzg3LDcgQEAgdm9pZCBE
ZXNpcmVkV2Vha1JlZmVyZW5jZXM6OnJlYWxseUFkZChWTQogICAgIH0KIH0KIAotdm9pZCBEZXNp
cmVkV2Vha1JlZmVyZW5jZXM6OnZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2
b2lkIERlc2lyZWRXZWFrUmVmZXJlbmNlczo6dmlzaXRDaGlsZHJlbjIoQWJzdHJhY3RTbG90Vmlz
aXRvciYgdmlzaXRvcikKIHsKICAgICBmb3IgKEpTQ2VsbCogdGFyZ2V0IDogbV9yZWZlcmVuY2Vz
KQogICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKHRhcmdldCk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXZWFrUmVmZXJlbmNlcy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFdlYWtSZWZlcmVuY2Vz
LmgJKHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVz
aXJlZFdlYWtSZWZlcmVuY2VzLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDEwICszMSwxMCBAQAog
CiBuYW1lc3BhY2UgSlNDIHsgCiAKK2NsYXNzIEFic3RyYWN0U2xvdFZpc2l0b3I7CiBjbGFzcyBD
b2RlQmxvY2s7CiBjbGFzcyBKU0NlbGw7CiBjbGFzcyBKU1ZhbHVlOwotY2xhc3MgU2xvdFZpc2l0
b3I7CiBjbGFzcyBWTTsKIAogbmFtZXNwYWNlIERGRyB7CkBAIC01Miw4ICs1Miw4IEBAIHB1Ymxp
YzoKICAgICBib29sIGNvbnRhaW5zKEpTQ2VsbCopOwogICAgIAogICAgIHZvaWQgcmVhbGx5QWRk
KFZNJiwgQ29tbW9uRGF0YSopOwotICAgIAotICAgIHZvaWQgdmlzaXRDaGlsZHJlbihTbG90Vmlz
aXRvciYpOworCisgICAgdm9pZCB2aXNpdENoaWxkcmVuMihBYnN0cmFjdFNsb3RWaXNpdG9yJik7
CiAKIHByaXZhdGU6CiAgICAgQ29kZUJsb2NrKiBtX2NvZGVCbG9jazsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCShyZXZpc2lvbiAyNzIyOTcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTc3LDcg
Kzk3Nyw3IEBAIEJsb2NrTGlzdCBHcmFwaDo6YmxvY2tzSW5Qb3N0T3JkZXIoYm9vbCAKICAgICAg
ICAgfQogICAgIH0KIAotICAgIGlmIChpc1NhZmVUb1ZhbGlkYXRlICYmIHZhbGlkYXRpb25FbmFi
bGVkKCkpIHsgLy8gVGhlcmUgYXJlIHVzZXJzIG9mIHRoaXMgd2hlcmUgd2UgaGF2ZW4ndCB5ZXQg
YnVpbHQgb2YgdGhlIENGRyBlbm91Z2ggdG8gYmUgYWJsZSB0byBydW4gZG9taW5hdG9ycy4KKyAg
ICBpZiAoaXNTYWZlVG9WYWxpZGF0ZSAmJiB2YWxpZGF0aW9uRW5hYmxlZCgpKSB7IC8vIFRoZXJl
IGFyZSB1c2VycyBvZiB0aGlzIHdoZXJlIHdlIGhhdmVuJ3QgeWV0IGJ1aWx0IHRoZSBDRkcgZW5v
dWdoIHRvIGJlIGFibGUgdG8gcnVuIGRvbWluYXRvcnMuCiAgICAgICAgIGF1dG8gdmFsaWRhdGVS
ZXN1bHRzID0gWyZdIChhdXRvJiBkb21pbmF0b3JzKSB7CiAgICAgICAgICAgICAvLyBXaGVuIGl0
ZXJhdGluZyBvdmVyIHJldmVyc2UgcG9zdCBvcmRlciwgd2Ugc2hvdWxkIHNlZSBkb21pbmF0b3Jz
CiAgICAgICAgICAgICAvLyBiZWZvcmUgdGhpbmdzIHRoZXkgZG9taW5hdGUuCkBAIC0xNDQ4LDcg
KzE0NDgsNyBAQCB2b2lkIEdyYXBoOjpyZWdpc3RlckZyb3plblZhbHVlcygpCiAgICAgbV9jb2Rl
QmxvY2stPmNvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbigpLnNocmlua1RvRml0KCk7
CiB9CiAKLXZvaWQgR3JhcGg6OnZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2
b2lkIEdyYXBoOjp2aXNpdENoaWxkcmVuMShBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQog
ewogICAgIGZvciAoRnJvemVuVmFsdWUqIHZhbHVlIDogbV9mcm96ZW5WYWx1ZXMpIHsKICAgICAg
ICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZCh2YWx1ZS0+dmFsdWUoKSk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCShyZXZpc2lvbiAyNzIyOTcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMDAsOSAr
MTAwMCw5IEBAIHB1YmxpYzoKICAgICBib29sIGNhbkRvRmFzdFNwcmVhZChOb2RlKiwgY29uc3Qg
QWJzdHJhY3RWYWx1ZSYpOwogICAgIAogICAgIHZvaWQgcmVnaXN0ZXJGcm96ZW5WYWx1ZXMoKTsK
LSAgICAKLSAgICB2b2lkIHZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImKSBmaW5hbDsKLSAgICAK
KworICAgIHZvaWQgdmlzaXRDaGlsZHJlbjEoQWJzdHJhY3RTbG90VmlzaXRvciYpIGZpbmFsOwor
CiAgICAgdm9pZCBsb2dBc3NlcnRpb25GYWlsdXJlKAogICAgICAgICBzdGQ6Om51bGxwdHJfdCwg
Y29uc3QgY2hhciogZmlsZSwgaW50IGxpbmUsIGNvbnN0IGNoYXIqIGZ1bmN0aW9uLAogICAgICAg
ICBjb25zdCBjaGFyKiBhc3NlcnRpb24pOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdQbGFuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1BsYW4uY3BwCShyZXZpc2lvbiAyNzIyOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1BsYW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NzIsOSArNjcyLDkgQEAgQ29tcGlsYXRp
b25LZXkgUGxhbjo6a2V5KCkKICAgICByZXR1cm4gQ29tcGlsYXRpb25LZXkobV9jb2RlQmxvY2st
PmFsdGVybmF0aXZlKCksIG1fbW9kZSk7CiB9CiAKLXZvaWQgUGxhbjo6Y2hlY2tMaXZlbmVzc0Fu
ZFZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIFBsYW46OmNoZWNrTGl2
ZW5lc3NBbmRWaXNpdENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7Ci0g
ICAgaWYgKCFpc0tub3duVG9CZUxpdmVEdXJpbmdHQygpKQorICAgIGlmICghaXNLbm93blRvQmVM
aXZlRHVyaW5nR0ModmlzaXRvcikpCiAgICAgICAgIHJldHVybjsKIAogICAgIGNsZWFuTXVzdEhh
bmRsZVZhbHVlc0lmTmVjZXNzYXJ5KCk7CkBAIC02ODQsOCArNjg0LDggQEAgdm9pZCBQbGFuOjpj
aGVja0xpdmVuZXNzQW5kVmlzaXRDaGlsZHJlbgogICAgICAgICAgICAgdmlzaXRvci5hcHBlbmRV
bmJhcnJpZXJlZCh2YWx1ZS52YWx1ZSgpKTsKICAgICB9CiAKLSAgICBtX3JlY29yZGVkU3RhdHVz
ZXMudmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7Ci0gICAgbV9yZWNvcmRlZFN0YXR1c2VzLm1hcmtJ
ZkNoZWFwKHZpc2l0b3IpOworICAgIG1fcmVjb3JkZWRTdGF0dXNlcy52aXNpdEFnZ3JlZ2F0ZTEo
dmlzaXRvcik7CisgICAgbV9yZWNvcmRlZFN0YXR1c2VzLm1hcmtJZkNoZWFwMSh2aXNpdG9yKTsK
IAogICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQobV9jb2RlQmxvY2spOwogICAgIHZpc2l0
b3IuYXBwZW5kVW5iYXJyaWVyZWQobV9jb2RlQmxvY2stPmFsdGVybmF0aXZlKCkpOwpAQCAtNjk4
LDggKzY5OCw4IEBAIHZvaWQgUGxhbjo6Y2hlY2tMaXZlbmVzc0FuZFZpc2l0Q2hpbGRyZW4KICAg
ICAgICAgfQogICAgIH0KIAotICAgIG1fd2Vha1JlZmVyZW5jZXMudmlzaXRDaGlsZHJlbih2aXNp
dG9yKTsKLSAgICBtX3RyYW5zaXRpb25zLnZpc2l0Q2hpbGRyZW4odmlzaXRvcik7CisgICAgbV93
ZWFrUmVmZXJlbmNlcy52aXNpdENoaWxkcmVuMih2aXNpdG9yKTsKKyAgICBtX3RyYW5zaXRpb25z
LnZpc2l0Q2hpbGRyZW4yKHZpc2l0b3IpOwogfQogCiB2b2lkIFBsYW46OmZpbmFsaXplSW5HQygp
CkBAIC03MDgsNyArNzA4LDIzIEBAIHZvaWQgUGxhbjo6ZmluYWxpemVJbkdDKCkKICAgICBtX3Jl
Y29yZGVkU3RhdHVzZXMuZmluYWxpemVXaXRob3V0RGVsZXRpbmcoKm1fdm0pOwogfQogCi1ib29s
IFBsYW46OmlzS25vd25Ub0JlTGl2ZUR1cmluZ0dDKCkKK2Jvb2wgUGxhbjo6aXNLbm93blRvQmVM
aXZlRHVyaW5nR0MoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBpZiAobV9z
dGFnZSA9PSBDYW5jZWxsZWQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKy8vICAgIGlmICghbV92
bS0+aGVhcC5pc01hcmtlZChtX2NvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCkpKQorICAgIGlm
ICghdmlzaXRvci5pc01hcmtlZChtX2NvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCkpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisvLyAgICBpZiAoIW1fdm0tPmhlYXAuaXNNYXJrZWQobV9jb2Rl
QmxvY2stPmFsdGVybmF0aXZlKCkpKQorICAgIGlmICghdmlzaXRvci5pc01hcmtlZChtX2NvZGVC
bG9jay0+YWx0ZXJuYXRpdmUoKSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKy8vICAgIGlmICgh
IW1fcHJvZmlsZWRERkdDb2RlQmxvY2sgJiYgIW1fdm0tPmhlYXAuaXNNYXJrZWQobV9wcm9maWxl
ZERGR0NvZGVCbG9jaykpCisgICAgaWYgKCEhbV9wcm9maWxlZERGR0NvZGVCbG9jayAmJiAhdmlz
aXRvci5pc01hcmtlZChtX3Byb2ZpbGVkREZHQ29kZUJsb2NrKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFBsYW46OmlzS25vd25Ub0JlTGl2ZUFm
dGVyR0MoKQogewogICAgIGlmIChtX3N0YWdlID09IENhbmNlbGxlZCkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmgJKHJldmlzaW9uIDI3
MjI5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5oCSh3b3JraW5nIGNv
cHkpCkBAIC00Myw4ICs0Myw4IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCitjbGFzcyBBYnN0cmFj
dFNsb3RWaXNpdG9yOwogY2xhc3MgQ29kZUJsb2NrOwotY2xhc3MgU2xvdFZpc2l0b3I7CiAKIG5h
bWVzcGFjZSBERkcgewogCkBAIC03MSw5ICs3MSwxMCBAQCBwdWJsaWM6CiAgICAgQ29tcGlsYXRp
b25LZXkga2V5KCk7CiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KLSAgICB2b2lk
IGl0ZXJhdGVDb2RlQmxvY2tzRm9yR0MoY29uc3QgRnVuYyYpOwotICAgIHZvaWQgY2hlY2tMaXZl
bmVzc0FuZFZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKLSAgICBib29sIGlzS25vd25Ub0Jl
TGl2ZUR1cmluZ0dDKCk7CisgICAgdm9pZCBpdGVyYXRlQ29kZUJsb2Nrc0ZvckdDKEFic3RyYWN0
U2xvdFZpc2l0b3ImLCBjb25zdCBGdW5jJik7CisgICAgdm9pZCBjaGVja0xpdmVuZXNzQW5kVmlz
aXRDaGlsZHJlbihBYnN0cmFjdFNsb3RWaXNpdG9yJik7CisgICAgYm9vbCBpc0tub3duVG9CZUxp
dmVEdXJpbmdHQyhBYnN0cmFjdFNsb3RWaXNpdG9yJik7CisgICAgYm9vbCBpc0tub3duVG9CZUxp
dmVBZnRlckdDKCk7CiAgICAgdm9pZCBmaW5hbGl6ZUluR0MoKTsKICAgICB2b2lkIGNhbmNlbCgp
OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW5JbmxpbmVzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuSW5saW5lcy5oCShy
ZXZpc2lvbiAyNzIyOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW5Jbmxp
bmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDkgKzMyLDkgQEAgbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBERkcgewogI2lmIEVOQUJMRShERkdfSklUKQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBG
dW5jPgotdm9pZCBQbGFuOjppdGVyYXRlQ29kZUJsb2Nrc0ZvckdDKGNvbnN0IEZ1bmMmIGZ1bmMp
Cit2b2lkIFBsYW46Oml0ZXJhdGVDb2RlQmxvY2tzRm9yR0MoQWJzdHJhY3RTbG90VmlzaXRvciYg
dmlzaXRvciwgY29uc3QgRnVuYyYgZnVuYykKIHsKLSAgICBpZiAoIWlzS25vd25Ub0JlTGl2ZUR1
cmluZ0dDKCkpCisgICAgaWYgKCFpc0tub3duVG9CZUxpdmVEdXJpbmdHQyh2aXNpdG9yKSkKICAg
ICAgICAgcmV0dXJuOwogICAgIAogICAgIC8vIENvbXBpbGF0aW9uIHdyaXRlcyBsb3RzIG9mIHZh
bHVlcyB0byBhIENvZGVCbG9jayB3aXRob3V0IHBlcmZvcm1pbmcKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU2FmZXBvaW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVwb2ludC5jcHAJKHJldmlzaW9uIDI3MjI5NykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZXBvaW50LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtODMsMjggKzgzLDM4IEBAIHZvaWQgU2FmZXBvaW50OjpiZWdpbigpCiAgICAgfQogfQogCi12
b2lkIFNhZmVwb2ludDo6Y2hlY2tMaXZlbmVzc0FuZFZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3Im
IHZpc2l0b3IpCit2b2lkIFNhZmVwb2ludDo6Y2hlY2tMaXZlbmVzc0FuZFZpc2l0Q2hpbGRyZW4o
QWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBSRUxFQVNFX0FTU0VSVChtX2Rp
ZENhbGxCZWdpbik7CiAKICAgICBpZiAobV9yZXN1bHQubV9kaWRHZXRDYW5jZWxsZWQpCiAgICAg
ICAgIHJldHVybjsgLy8gV2Ugd2VyZSBjYW5jZWxsZWQgZHVyaW5nIGEgcHJldmlvdXMgR0MhCiAg
ICAgCi0gICAgaWYgKCFpc0tub3duVG9CZUxpdmVEdXJpbmdHQygpKQorICAgIGlmICghaXNLbm93
blRvQmVMaXZlRHVyaW5nR0ModmlzaXRvcikpCiAgICAgICAgIHJldHVybjsKICAgICAKICAgICBm
b3IgKHVuc2lnbmVkIGkgPSBtX3NjYW5uYWJsZXMuc2l6ZSgpOyBpLS07KQotICAgICAgICBtX3Nj
YW5uYWJsZXNbaV0tPnZpc2l0Q2hpbGRyZW4odmlzaXRvcik7CisgICAgICAgIG1fc2Nhbm5hYmxl
c1tpXS0+dmlzaXRDaGlsZHJlbjEodmlzaXRvcik7CiB9CiAKLWJvb2wgU2FmZXBvaW50Ojppc0tu
b3duVG9CZUxpdmVEdXJpbmdHQygpCitib29sIFNhZmVwb2ludDo6aXNLbm93blRvQmVMaXZlRHVy
aW5nR0MoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBSRUxFQVNFX0FTU0VS
VChtX2RpZENhbGxCZWdpbik7CiAgICAgCiAgICAgaWYgKG1fcmVzdWx0Lm1fZGlkR2V0Q2FuY2Vs
bGVkKQogICAgICAgICByZXR1cm4gdHJ1ZTsgLy8gV2Ugd2VyZSBjYW5jZWxsZWQgZHVyaW5nIGEg
cHJldmlvdXMgR0MsIHNvIGxldCdzIG5vdCBtZXNzIHdpdGggaXQgdGhpcyB0aW1lIGFyb3VuZCAt
IHByZXRlbmQgaXQncyBsaXZlIGFuZCBtb3ZlIG9uLgogICAgIAotICAgIHJldHVybiBtX3BsYW4u
aXNLbm93blRvQmVMaXZlRHVyaW5nR0MoKTsKKyAgICByZXR1cm4gbV9wbGFuLmlzS25vd25Ub0Jl
TGl2ZUR1cmluZ0dDKHZpc2l0b3IpOworfQorCitib29sIFNhZmVwb2ludDo6aXNLbm93blRvQmVM
aXZlQWZ0ZXJHQygpCit7CisgICAgUkVMRUFTRV9BU1NFUlQobV9kaWRDYWxsQmVnaW4pOworICAg
IAorICAgIGlmIChtX3Jlc3VsdC5tX2RpZEdldENhbmNlbGxlZCkKKyAgICAgICAgcmV0dXJuIHRy
dWU7IC8vIFdlIHdlcmUgY2FuY2VsbGVkIGR1cmluZyBhIHByZXZpb3VzIEdDLCBzbyBsZXQncyBu
b3QgbWVzcyB3aXRoIGl0IHRoaXMgdGltZSBhcm91bmQgLSBwcmV0ZW5kIGl0J3MgbGl2ZSBhbmQg
bW92ZSBvbi4KKyAgICAKKyAgICByZXR1cm4gbV9wbGFuLmlzS25vd25Ub0JlTGl2ZUFmdGVyR0Mo
KTsKIH0KIAogdm9pZCBTYWZlcG9pbnQ6OmNhbmNlbCgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NhZmVwb2ludC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU2FmZXBvaW50LmgJKHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU2FmZXBvaW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMx
LDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLWNsYXNzIFNsb3RWaXNpdG9yOworY2xhc3MgQWJz
dHJhY3RTbG90VmlzaXRvcjsKIGNsYXNzIFZNOwogCiBuYW1lc3BhY2UgREZHIHsKQEAgLTY2LDkg
KzY2LDEwIEBAIHB1YmxpYzoKICAgICB2b2lkIGFkZChTY2FubmFibGUqKTsKICAgICAKICAgICB2
b2lkIGJlZ2luKCk7Ci0gICAgCi0gICAgdm9pZCBjaGVja0xpdmVuZXNzQW5kVmlzaXRDaGlsZHJl
bihTbG90VmlzaXRvciYpOwotICAgIGJvb2wgaXNLbm93blRvQmVMaXZlRHVyaW5nR0MoKTsKKwor
ICAgIHZvaWQgY2hlY2tMaXZlbmVzc0FuZFZpc2l0Q2hpbGRyZW4oQWJzdHJhY3RTbG90VmlzaXRv
ciYpOworICAgIGJvb2wgaXNLbm93blRvQmVMaXZlRHVyaW5nR0MoQWJzdHJhY3RTbG90VmlzaXRv
ciYpOworICAgIGJvb2wgaXNLbm93blRvQmVMaXZlQWZ0ZXJHQygpOwogICAgIHZvaWQgY2FuY2Vs
KCk7CiAgICAgCiAgICAgVk0qIHZtKCkgY29uc3Q7IC8vIE1heSByZXR1cm4gbnVsbCBpZiB3ZSd2
ZSBiZWVuIGNhbmNlbGxlZC4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2Nh
bm5hYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTY2Fu
bmFibGUuaAkocmV2aXNpb24gMjcyMjk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTY2FubmFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjksNyArMjksNyBAQAogCiBuYW1lc3Bh
Y2UgSlNDIHsKIAotY2xhc3MgU2xvdFZpc2l0b3I7CitjbGFzcyBBYnN0cmFjdFNsb3RWaXNpdG9y
OwogCiBuYW1lc3BhY2UgREZHIHsKIApAQCAtMzgsNyArMzgsNyBAQCBwdWJsaWM6CiAgICAgU2Nh
bm5hYmxlKCkgeyB9CiAgICAgdmlydHVhbCB+U2Nhbm5hYmxlKCkgeyB9CiAgICAgCi0gICAgdmly
dHVhbCB2b2lkIHZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImKSA9IDA7CisgICAgdmlydHVhbCB2
b2lkIHZpc2l0Q2hpbGRyZW4xKEFic3RyYWN0U2xvdFZpc2l0b3ImKSA9IDA7CiB9OwogCiB9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1dvcmtsaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1dvcmtsaXN0LmNwcAkocmV2aXNpb24gMjcyMjk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdXb3JrbGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3Miw3ICszNzIsNyBAQCB2
b2lkIFdvcmtsaXN0OjpyZXN1bWVBbGxUaHJlYWRzKCkKICAgICBtX3N1c3BlbnNpb25Mb2NrLnVu
bG9jaygpOwogfQogCi12b2lkIFdvcmtsaXN0Ojp2aXNpdFdlYWtSZWZlcmVuY2VzKFNsb3RWaXNp
dG9yJiB2aXNpdG9yKQordm9pZCBXb3JrbGlzdDo6dmlzaXRXZWFrUmVmZXJlbmNlcyhBYnN0cmFj
dFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFZNKiB2bSA9ICZ2aXNpdG9yLmhlYXAoKS0+
dm0oKTsKICAgICB7CkBAIC00MDUsNyArNDA1LDggQEAgdm9pZCBXb3JrbGlzdDo6cmVtb3ZlRGVh
ZFBsYW5zKFZNJiB2bSkKICAgICAgICAgICAgIFBsYW4qIHBsYW4gPSBpdGVyLT52YWx1ZS5nZXQo
KTsKICAgICAgICAgICAgIGlmIChwbGFuLT52bSgpICE9ICZ2bSkKICAgICAgICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgICAgIGlmIChwbGFuLT5pc0tub3duVG9CZUxpdmVEdXJpbmdHQygp
KSB7CisvLyAgICAgICAgICAgIGlmIChwbGFuLT5pc0tub3duVG9CZUxpdmVEdXJpbmdHQygpKSB7
CisgICAgICAgICAgICBpZiAocGxhbi0+aXNLbm93blRvQmVMaXZlQWZ0ZXJHQygpKSB7CiAgICAg
ICAgICAgICAgICAgcGxhbi0+ZmluYWxpemVJbkdDKCk7CiAgICAgICAgICAgICAgICAgY29udGlu
dWU7CiAgICAgICAgICAgICB9CkBAIC00NDAsNyArNDQxLDggQEAgdm9pZCBXb3JrbGlzdDo6cmVt
b3ZlRGVhZFBsYW5zKFZNJiB2bSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBpZiAo
c2FmZXBvaW50LT52bSgpICE9ICZ2bSkKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBp
ZiAoc2FmZXBvaW50LT5pc0tub3duVG9CZUxpdmVEdXJpbmdHQygpKQorLy8gICAgICAgIGlmIChz
YWZlcG9pbnQtPmlzS25vd25Ub0JlTGl2ZUR1cmluZ0dDKCkpCisgICAgICAgIGlmIChzYWZlcG9p
bnQtPmlzS25vd25Ub0JlTGl2ZUFmdGVyR0MoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAg
ICAgICBzYWZlcG9pbnQtPmNhbmNlbCgpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHV29ya2xpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1dvcmtsaXN0LmgJKHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHV29ya2xpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsNyArMzUsNyBA
QAogCiBuYW1lc3BhY2UgSlNDIHsKIAotY2xhc3MgU2xvdFZpc2l0b3I7CitjbGFzcyBBYnN0cmFj
dFNsb3RWaXNpdG9yOwogCiBuYW1lc3BhY2UgREZHIHsKIApAQCAtNTcsNyArNTcsNyBAQCBwdWJs
aWM6CiAgICAgdm9pZCBjb21wbGV0ZUFsbFBsYW5zRm9yVk0oVk0mKTsKIAogICAgIHRlbXBsYXRl
PHR5cGVuYW1lIEZ1bmM+Ci0gICAgdm9pZCBpdGVyYXRlQ29kZUJsb2Nrc0ZvckdDKFZNJiwgY29u
c3QgRnVuYyYpOworICAgIHZvaWQgaXRlcmF0ZUNvZGVCbG9ja3NGb3JHQyhBYnN0cmFjdFNsb3RW
aXNpdG9yJiwgVk0mLCBjb25zdCBGdW5jJik7CiAKICAgICB2b2lkIHdhaXRVbnRpbEFsbFBsYW5z
Rm9yVk1BcmVSZWFkeShWTSYpOwogICAgIFN0YXRlIGNvbXBsZXRlQWxsUmVhZHlQbGFuc0ZvclZN
KFZNJiwgQ29tcGlsYXRpb25LZXkgPSBDb21waWxhdGlvbktleSgpKTsKQEAgLTczLDcgKzczLDcg
QEAgcHVibGljOgogICAgIGJvb2wgaXNBY3RpdmVGb3JWTShWTSYpIGNvbnN0OwogICAgIAogICAg
IC8vIE9ubHkgY2FsbGVkIG9uIHRoZSBtYWluIHRocmVhZCBhZnRlciBzdXNwZW5kaW5nIGFsbCB0
aHJlYWRzLgotICAgIHZvaWQgdmlzaXRXZWFrUmVmZXJlbmNlcyhTbG90VmlzaXRvciYpOworICAg
IHZvaWQgdmlzaXRXZWFrUmVmZXJlbmNlcyhBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAgICAgdm9p
ZCByZW1vdmVEZWFkUGxhbnMoVk0mKTsKICAgICAKICAgICB2b2lkIHJlbW92ZU5vbkNvbXBpbGlu
Z1BsYW5zRm9yVk0oVk0mKTsKQEAgLTE0NCw3ICsxNDQsNyBAQCBXb3JrbGlzdCYgZXhpc3RpbmdX
b3JrbGlzdEZvckluZGV4KHVuc2lnCiB2b2lkIGNvbXBsZXRlQWxsUGxhbnNGb3JWTShWTSYpOwog
CiB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgotdm9pZCBpdGVyYXRlQ29kZUJsb2Nrc0ZvckdDKFZN
JiwgY29uc3QgRnVuYyYpOwordm9pZCBpdGVyYXRlQ29kZUJsb2Nrc0ZvckdDKEFic3RyYWN0U2xv
dFZpc2l0b3ImLCBWTSYsIGNvbnN0IEZ1bmMmKTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRG
RwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0SW5saW5lcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3RJbmxp
bmVzLmgJKHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
V29ya2xpc3RJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDMwICszMywzMCBAQCBuYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAjaWYgRU5BQkxFKERGR19KSVQpCiAKIHRlbXBs
YXRlPHR5cGVuYW1lIEZ1bmM+Ci12b2lkIGl0ZXJhdGVDb2RlQmxvY2tzRm9yR0MoVk0mIHZtLCBj
b25zdCBGdW5jJiBmdW5jKQordm9pZCBpdGVyYXRlQ29kZUJsb2Nrc0ZvckdDKEFic3RyYWN0U2xv
dFZpc2l0b3ImIHZpc2l0b3IsIFZNJiB2bSwgY29uc3QgRnVuYyYgZnVuYykKIHsKICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSBERkc6Om51bWJlck9mV29ya2xpc3RzKCk7IGktLTspIHsKICAgICAgICAg
aWYgKERGRzo6V29ya2xpc3QqIHdvcmtsaXN0ID0gREZHOjpleGlzdGluZ1dvcmtsaXN0Rm9ySW5k
ZXhPck51bGwoaSkpCi0gICAgICAgICAgICB3b3JrbGlzdC0+aXRlcmF0ZUNvZGVCbG9ja3NGb3JH
Qyh2bSwgZnVuYyk7CisgICAgICAgICAgICB3b3JrbGlzdC0+aXRlcmF0ZUNvZGVCbG9ja3NGb3JH
Qyh2aXNpdG9yLCB2bSwgZnVuYyk7CiAgICAgfQogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5j
Pgotdm9pZCBXb3JrbGlzdDo6aXRlcmF0ZUNvZGVCbG9ja3NGb3JHQyhWTSYgdm0sIGNvbnN0IEZ1
bmMmIGZ1bmMpCit2b2lkIFdvcmtsaXN0OjppdGVyYXRlQ29kZUJsb2Nrc0ZvckdDKEFic3RyYWN0
U2xvdFZpc2l0b3ImIHZpc2l0b3IsIFZNJiB2bSwgY29uc3QgRnVuYyYgZnVuYykKIHsKICAgICBM
b2NrSG9sZGVyIGxvY2tlcigqbV9sb2NrKTsKICAgICBmb3IgKFBsYW5NYXA6Oml0ZXJhdG9yIGl0
ZXIgPSBtX3BsYW5zLmJlZ2luKCk7IGl0ZXIgIT0gbV9wbGFucy5lbmQoKTsgKytpdGVyKSB7CiAg
ICAgICAgIFBsYW4qIHBsYW4gPSBpdGVyLT52YWx1ZS5nZXQoKTsKICAgICAgICAgaWYgKHBsYW4t
PnZtKCkgIT0gJnZtKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIHBsYW4tPml0ZXJh
dGVDb2RlQmxvY2tzRm9yR0MoZnVuYyk7CisgICAgICAgIHBsYW4tPml0ZXJhdGVDb2RlQmxvY2tz
Rm9yR0ModmlzaXRvciwgZnVuYyk7CiAgICAgfQogfQogCiAjZWxzZSAvLyBFTkFCTEUoREZHX0pJ
VCkKIAogdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KLXZvaWQgaXRlcmF0ZUNvZGVCbG9ja3NGb3JH
QyhWTSYsIGNvbnN0IEZ1bmMmKQordm9pZCBpdGVyYXRlQ29kZUJsb2Nrc0ZvckdDKEFic3RyYWN0
U2xvdFZpc2l0b3ImLCBWTSYsIGNvbnN0IEZ1bmMmKQogewogfQogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9BYnN0cmFjdFNsb3RWaXNpdG9yLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9BYnN0cmFjdFNsb3RWaXNpdG9yLmNwcAkobm9uZXhp
c3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9BYnN0cmFjdFNsb3RWaXNpdG9y
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM0IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFic3RyYWN0U2xvdFZpc2l0b3IuaCIKKworI2luY2x1
ZGUgIkFic3RyYWN0U2xvdFZpc2l0b3JJbmxpbmVzLmgiCisvLyNpbmNsdWRlICJNYXJraW5nQ29u
c3RyYWludFNvbHZlci5oIgorCituYW1lc3BhY2UgSlNDIHsKKworfSAvLyBuYW1lc3BhY2UgSlND
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9BYnN0cmFjdFNsb3RWaXNpdG9yLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQWJzdHJhY3RTbG90Vmlz
aXRvci5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Fic3Ry
YWN0U2xvdFZpc2l0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIxMCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisj
aW5jbHVkZSAiSlNDSlNWYWx1ZS5oIgorI2luY2x1ZGUgIk1hcmtTdGFjay5oIgorI2luY2x1ZGUg
IlZpc2l0UmFjZUtleS5oIiAvLyBtbGFtCisjaW5jbHVkZSA8d3RmL1NoYXJlZFRhc2suaD4KKyNp
bmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBD
b25zZXJ2YXRpdmVSb290czsKK2NsYXNzIEhlYXA7CitjbGFzcyBIZWFwQ2VsbDsKK2NsYXNzIEpT
Q2VsbDsKK2NsYXNzIE1hcmtlZEJsb2NrOworY2xhc3MgTWFya2luZ0NvbnN0cmFpbnQ7CitjbGFz
cyBNYXJraW5nQ29uc3RyYWludFNvbHZlcjsKK2NsYXNzIFByZWNpc2VBbGxvY2F0aW9uOworY2xh
c3MgU2xvdFZpc2l0b3I7CitjbGFzcyBWTTsKK2NsYXNzIFZlcmlmaWVyU2xvdFZpc2l0b3I7Cit0
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjbGFzcyBXZWFrOwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlw
ZW5hbWUgVHJhaXRzPiBjbGFzcyBXcml0ZUJhcnJpZXJCYXNlOworCitjbGFzcyBBYnN0cmFjdFNs
b3RWaXNpdG9yIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShBYnN0cmFjdFNsb3RWaXNpdG9y
KTsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBlbnVtIFJvb3RN
YXJrUmVhc29uIHsKKyAgICAgICAgTm9uZSwKKyAgICAgICAgQ29uc2VydmF0aXZlU2NhbiwKKyAg
ICAgICAgU3Ryb25nUmVmZXJlbmNlcywKKyAgICAgICAgUHJvdGVjdGVkVmFsdWVzLAorICAgICAg
ICBNYXJrTGlzdFNldCwKKyAgICAgICAgVk1FeGNlcHRpb25zLAorICAgICAgICBTdHJvbmdIYW5k
bGVzLAorICAgICAgICBEZWJ1Z2dlciwKKyAgICAgICAgSklUU3R1YlJvdXRpbmVzLAorICAgICAg
ICBXZWFrU2V0cywKKyAgICAgICAgT3V0cHV0LAorICAgICAgICBERkdXb3JrTGlzdHMsCisgICAg
ICAgIENvZGVCbG9ja3MsCisgICAgICAgIERPTUdDT3V0cHV0LAorICAgIH07CisKKyAgICBjbGFz
cyBEZWZhdWx0TWFya2luZ1Zpb2xhdGlvbkFzc2VydGlvblNjb3BlIHsKKyAgICBwdWJsaWM6Cisg
ICAgICAgIERlZmF1bHRNYXJraW5nVmlvbGF0aW9uQXNzZXJ0aW9uU2NvcGUoQWJzdHJhY3RTbG90
VmlzaXRvciYpIHsgfQorICAgIH07CisKKyAgICB2aXJ0dWFsIH5BYnN0cmFjdFNsb3RWaXNpdG9y
KCkgPSBkZWZhdWx0OworCisgICAgTWFya1N0YWNrQXJyYXkmIGNvbGxlY3Rvck1hcmtTdGFjaygp
IHsgcmV0dXJuIG1fY29sbGVjdG9yU3RhY2s7IH0KKyAgICBNYXJrU3RhY2tBcnJheSYgbXV0YXRv
ck1hcmtTdGFjaygpIHsgcmV0dXJuIG1fbXV0YXRvclN0YWNrOyB9CisgICAgY29uc3QgTWFya1N0
YWNrQXJyYXkmIGNvbGxlY3Rvck1hcmtTdGFjaygpIGNvbnN0IHsgcmV0dXJuIG1fY29sbGVjdG9y
U3RhY2s7IH0KKyAgICBjb25zdCBNYXJrU3RhY2tBcnJheSYgbXV0YXRvck1hcmtTdGFjaygpIGNv
bnN0IHsgcmV0dXJuIG1fbXV0YXRvclN0YWNrOyB9CisKKyAgICBib29sIGlzRW1wdHkoKSB7IHJl
dHVybiBtX2NvbGxlY3RvclN0YWNrLmlzRW1wdHkoKSAmJiBtX211dGF0b3JTdGFjay5pc0VtcHR5
KCk7IH0KKworICAgIFZNJiB2bSgpOworICAgIGNvbnN0IFZNJiB2bSgpIGNvbnN0OworICAgIEhl
YXAqIGhlYXAoKSBjb25zdDsKKworICAgIHZpcnR1YWwgdm9pZCBhcHBlbmRfQ29uc2VydmF0aXZl
Um9vdHMoY29uc3QgQ29uc2VydmF0aXZlUm9vdHMmKSA9IDA7CisKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBULCB0eXBlbmFtZSBUcmFpdHM+IHZvaWQgYXBwZW5kKGNvbnN0IFdyaXRlQmFycmllckJh
c2U8VCwgVHJhaXRzPiYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFRyYWl0
cz4gdm9pZCBhcHBlbmRIaWRkZW4oY29uc3QgV3JpdGVCYXJyaWVyQmFzZTxULCBUcmFpdHM+Jik7
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSXRlcmF0b3I+IHZvaWQgYXBwZW5kKEl0ZXJhdG9yIGJl
Z2luICwgSXRlcmF0b3IgZW5kKTsKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgYXBwZW5kVmFsdWVz
KGNvbnN0IFdyaXRlQmFycmllckJhc2U8VW5rbm93biwgUmF3VmFsdWVUcmFpdHM8VW5rbm93bj4+
Kiwgc2l6ZV90IGNvdW50KTsKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgYXBwZW5kVmFsdWVzSGlk
ZGVuKGNvbnN0IFdyaXRlQmFycmllckJhc2U8VW5rbm93biwgUmF3VmFsdWVUcmFpdHM8VW5rbm93
bj4+Kiwgc2l6ZV90IGNvdW50KTsKKworICAgIC8vIFRoZXNlIGRvbid0IHJlcXVpcmUgeW91IHRv
IHByb3ZlIHRoYXQgeW91IGhhdmUgYSBXcml0ZUJhcnJpZXI8Pi4gVGhhdCBtYWtlcyBzZW5zZQor
ICAgIC8vIGZvcjoKKyAgICAvLworICAgIC8vIC0gcm9vdHMuCisgICAgLy8gLSBzb3BoaXN0aWNh
dGVkIGRhdGEgc3RydWN0dXJlcyB0aGF0IGJhcnJpZXIgdGhyb3VnaCBvdGhlciBtZWFucyAobGlr
ZSBERkc6OlBsYW4gYW5kCisgICAgLy8gICBmcmllbmRzKS4KKyAgICAvLworICAgIC8vIElmIHlv
dSBhcmUgbm90IGEgcm9vdCBhbmQgeW91IGRvbid0IGtub3cgd2hhdCBraW5kIG9mIGJhcnJpZXIg
eW91IGhhdmUsIHRoZW4geW91CisgICAgLy8gc2hvdWxkbid0IGNhbGwgdGhlc2UgbWV0aG9kcy4K
KyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgYXBwZW5kVW5iYXJyaWVyZWQoSlNWYWx1ZSk7CisgICAg
QUxXQVlTX0lOTElORSB2b2lkIGFwcGVuZFVuYmFycmllcmVkKEpTVmFsdWUqLCBzaXplX3QpOwor
ICAgIEFMV0FZU19JTkxJTkUgdm9pZCBhcHBlbmRVbmJhcnJpZXJlZChKU0NlbGwqIGNlbGwpCisg
ICAgeworICAgICAgICBpZiAoIWNlbGwpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGFw
cGVuZFVuYmFycmllcmVkSW1wbChjZWxsKTsKKyAgICB9CisgICAgdmlydHVhbCB2b2lkIGFwcGVu
ZFVuYmFycmllcmVkSW1wbChKU0NlbGwqKSA9IDA7CisKKyAgICB2aXJ0dWFsIGJvb2wgYWRkT3Bh
cXVlUm9vdCh2b2lkKikgPSAwOyAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIHJvb3Qgd2FzIG5ldy4K
KyAgICB2aXJ0dWFsIGJvb2wgY29udGFpbnNPcGFxdWVSb290KHZvaWQqKSBjb25zdCA9IDA7CisK
KyAgICB2aXJ0dWFsIGJvb2wgaXNGaXJzdFZpc2l0KCkgY29uc3QgPSAwOyAvLyBtbGFtIEZJWE1F
CisKKyAgICB2aXJ0dWFsIGJvb2wgaXNNYXJrZWQoY29uc3Qgdm9pZCopIGNvbnN0ID0gMDsKKyAg
ICB2aXJ0dWFsIGJvb2wgaXNNYXJrZWQoTWFya2VkQmxvY2smLCBIZWFwQ2VsbCopIGNvbnN0ID0g
MDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNNYXJrZWQoUHJlY2lzZUFsbG9jYXRpb24mLCBIZWFwQ2Vs
bCopIGNvbnN0ID0gMDsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgdm9pZCBhcHBl
bmQoY29uc3QgV2VhazxUPiYgd2Vhayk7CisKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgYXBwZW5k
SGlkZGVuVW5iYXJyaWVyZWQoSlNWYWx1ZSk7CisgICAgQUxXQVlTX0lOTElORSB2b2lkIGFwcGVu
ZEhpZGRlblVuYmFycmllcmVkKEpTQ2VsbCogY2VsbCkKKyAgICB7CisgICAgICAgIGlmICghY2Vs
bCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgYXBwZW5kSGlkZGVuVW5iYXJyaWVyZWRJ
bXBsKGNlbGwpOworICAgIH0KKyAgICB2aXJ0dWFsIHZvaWQgYXBwZW5kSGlkZGVuVW5iYXJyaWVy
ZWRJbXBsKEpTQ2VsbCopID0gMDsKKworICAgIHNpemVfdCB2aXNpdENvdW50KCkgY29uc3QgeyBy
ZXR1cm4gbV92aXNpdENvdW50OyB9CisKKyAgICB2b2lkIGFkZFRvVmlzaXRDb3VudChzaXplX3Qg
dmFsdWUpIHsgbV92aXNpdENvdW50ICs9IHZhbHVlOyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYWRk
UGFyYWxsZWxDb25zdHJhaW50VGFzayhSZWZQdHI8U2hhcmVkVGFzazx2b2lkKEFic3RyYWN0U2xv
dFZpc2l0b3ImKT4+KSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgbWFya0F1eGlsaWFyeShjb25z
dCB2b2lkKiBiYXNlKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgcmVwb3J0RXh0cmFNZW1vcnlW
aXNpdGVkKHNpemVfdCkgPSAwOworI2lmIEVOQUJMRShSRVNPVVJDRV9VU0FHRSkKKyAgICB2aXJ0
dWFsIHZvaWQgcmVwb3J0RXh0ZXJuYWxNZW1vcnlWaXNpdGVkKHNpemVfdCkgPSAwOworI2VuZGlm
CisKKyAgICB2aXJ0dWFsIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0ID0gMDsKKworICAg
IFJvb3RNYXJrUmVhc29uIHJvb3RNYXJrUmVhc29uKCkgY29uc3QgeyByZXR1cm4gbV9yb290TWFy
a1JlYXNvbjsgfQorICAgIHZvaWQgc2V0Um9vdE1hcmtSZWFzb24oUm9vdE1hcmtSZWFzb24gcmVh
c29uKSB7IG1fcm9vdE1hcmtSZWFzb24gPSByZWFzb247IH0KKworICAgIHZpcnR1YWwgYm9vbCBt
dXRhdG9ySXNTdG9wcGVkKCkgY29uc3QgPSAwOworCisgICAgdmlydHVhbCB2b2lkIGRpZFJhY2Uo
Y29uc3QgVmlzaXRSYWNlS2V5JikgPSAwOworICAgIHZvaWQgZGlkUmFjZShKU0NlbGwqIGNlbGws
IGNvbnN0IGNoYXIqIHJlYXNvbikgeyBkaWRSYWNlKFZpc2l0UmFjZUtleShjZWxsLCByZWFzb24p
KTsgfQorCisgICAgdmlydHVhbCB2b2lkIHZpc2l0QXNDb25zdHJhaW50KGNvbnN0IEpTQ2VsbCop
ID0gMDsKKworICAgIC8vIElubGluZSBmdW5jdGlvbnMgZm9yIGRpc2FwYXRjaGluZyB0byBTbG90
VmlzaXRvciAvIFZlcmlmaWVyU2xvdFZpc2l0b3IgdmVyc2lvbnMuCisKKy8vICAgIHZvaWQgYXBw
ZW5kKGNvbnN0IENvbnNlcnZhdGl2ZVJvb3RzJik7CisvLyAgICB2b2lkIGFwcGVuZFVuYmFycmll
cmVkKEpTVmFsdWUpOworLy8gICAgdm9pZCBhcHBlbmRVbmJhcnJpZXJlZChKU0NlbGwqKTsKKy8v
ICAgIHZvaWQgYXBwZW5kSGlkZGVuVW5iYXJyaWVyZWQoSlNDZWxsKik7CisvLyAgICBib29sIGNv
bnRhaW5zT3BhcXVlUm9vdCh2b2lkKikgY29uc3Q7CisvLyAgICB2b2lkIHZpc2l0QXNDb25zdHJh
aW50KGNvbnN0IEpTQ2VsbCopOworCitwcm90ZWN0ZWQ6CisgICAgaW5saW5lIEFic3RyYWN0U2xv
dFZpc2l0b3IoSGVhcCYpOworCisgICAgdm9pZCByZXNldCgpOworCisgICAgTWFya1N0YWNrQXJy
YXkgbV9jb2xsZWN0b3JTdGFjazsKKyAgICBNYXJrU3RhY2tBcnJheSBtX211dGF0b3JTdGFjazsK
KworICAgIHNpemVfdCBtX3Zpc2l0Q291bnQgeyAwIH07CisKKyAgICBIZWFwJiBtX2hlYXA7CisK
KyAgICBSb290TWFya1JlYXNvbiBtX3Jvb3RNYXJrUmVhc29uIHsgUm9vdE1hcmtSZWFzb246Ok5v
bmUgfTsKKworICAgIE1hcmtpbmdDb25zdHJhaW50KiBtX2N1cnJlbnRDb25zdHJhaW50IHsgbnVs
bHB0ciB9OworICAgIE1hcmtpbmdDb25zdHJhaW50U29sdmVyKiBtX2N1cnJlbnRTb2x2ZXIgeyBu
dWxscHRyIH07CisKKyAgICBmcmllbmQgY2xhc3MgTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXI7Cit9
OworCitjbGFzcyBTZXRSb290TWFya1JlYXNvblNjb3BlIHsKK3B1YmxpYzoKKyAgICBTZXRSb290
TWFya1JlYXNvblNjb3BlKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIEFic3RyYWN0U2xv
dFZpc2l0b3I6OlJvb3RNYXJrUmVhc29uIHJlYXNvbikKKyAgICAgICAgOiBtX3Zpc2l0b3Iodmlz
aXRvcikKKyAgICAgICAgLCBtX3ByZXZpb3VzUmVhc29uKHZpc2l0b3Iucm9vdE1hcmtSZWFzb24o
KSkKKyAgICB7CisgICAgICAgIG1fdmlzaXRvci5zZXRSb290TWFya1JlYXNvbihyZWFzb24pOwor
ICAgIH0KKworICAgIH5TZXRSb290TWFya1JlYXNvblNjb3BlKCkKKyAgICB7CisgICAgICAgIG1f
dmlzaXRvci5zZXRSb290TWFya1JlYXNvbihtX3ByZXZpb3VzUmVhc29uKTsKKyAgICB9CisKK3By
aXZhdGU6CisgICAgQWJzdHJhY3RTbG90VmlzaXRvciYgbV92aXNpdG9yOworICAgIEFic3RyYWN0
U2xvdFZpc2l0b3I6OlJvb3RNYXJrUmVhc29uIG1fcHJldmlvdXNSZWFzb247Cit9OworCit9IC8v
IG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Fic3RyYWN0
U2xvdFZpc2l0b3JJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvQWJzdHJhY3RTbG90VmlzaXRvcklubGluZXMuaAkobm9uZXhpc3RlbnQpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9BYnN0cmFjdFNsb3RWaXNpdG9ySW5saW5lcy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMTE1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJBYnN0cmFjdFNsb3RW
aXNpdG9yLmgiCisjaW5jbHVkZSAiSGVhcC5oIgorI2luY2x1ZGUgIldlYWtJbmxpbmVzLmgiCisj
aW5jbHVkZSAiV3JpdGVCYXJyaWVyLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitpbmxpbmUgQWJz
dHJhY3RTbG90VmlzaXRvcjo6QWJzdHJhY3RTbG90VmlzaXRvcihIZWFwJiBoZWFwKQorICAgIDog
bV9oZWFwKGhlYXApCit7Cit9CisKK2lubGluZSBIZWFwKiBBYnN0cmFjdFNsb3RWaXNpdG9yOjpo
ZWFwKCkgY29uc3QKK3sKKyAgICByZXR1cm4gJm1faGVhcDsKK30KKworaW5saW5lIFZNJiBBYnN0
cmFjdFNsb3RWaXNpdG9yOjp2bSgpCit7CisgICAgcmV0dXJuIG1faGVhcC52bSgpOworfQorCitp
bmxpbmUgY29uc3QgVk0mIEFic3RyYWN0U2xvdFZpc2l0b3I6OnZtKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbV9oZWFwLnZtKCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitBTFdBWVNfSU5M
SU5FIHZvaWQgQWJzdHJhY3RTbG90VmlzaXRvcjo6YXBwZW5kKGNvbnN0IFdlYWs8VD4mIHdlYWsp
Cit7CisgICAgYXBwZW5kVW5iYXJyaWVyZWQod2Vhay5nZXQoKSk7Cit9CisKK3RlbXBsYXRlPHR5
cGVuYW1lIFQsIHR5cGVuYW1lIFRyYWl0cz4KK0FMV0FZU19JTkxJTkUgdm9pZCBBYnN0cmFjdFNs
b3RWaXNpdG9yOjphcHBlbmQoY29uc3QgV3JpdGVCYXJyaWVyQmFzZTxULCBUcmFpdHM+JiBzbG90
KQoreworICAgIGFwcGVuZFVuYmFycmllcmVkKHNsb3QuZ2V0KCkpOworfQorCit0ZW1wbGF0ZTx0
eXBlbmFtZSBULCB0eXBlbmFtZSBUcmFpdHM+CitBTFdBWVNfSU5MSU5FIHZvaWQgQWJzdHJhY3RT
bG90VmlzaXRvcjo6YXBwZW5kSGlkZGVuKGNvbnN0IFdyaXRlQmFycmllckJhc2U8VCwgVHJhaXRz
PiYgc2xvdCkKK3sKKyAgICBhcHBlbmRIaWRkZW5VbmJhcnJpZXJlZChzbG90LmdldCgpKTsKK30K
KworQUxXQVlTX0lOTElORSB2b2lkIEFic3RyYWN0U2xvdFZpc2l0b3I6OmFwcGVuZEhpZGRlblVu
YmFycmllcmVkKEpTVmFsdWUgdmFsdWUpCit7CisgICAgaWYgKHZhbHVlLmlzQ2VsbCgpKQorICAg
ICAgICBhcHBlbmRIaWRkZW5VbmJhcnJpZXJlZCh2YWx1ZS5hc0NlbGwoKSk7Cit9CisKK3RlbXBs
YXRlPHR5cGVuYW1lIEl0ZXJhdG9yPgorQUxXQVlTX0lOTElORSB2b2lkIEFic3RyYWN0U2xvdFZp
c2l0b3I6OmFwcGVuZChJdGVyYXRvciBiZWdpbiwgSXRlcmF0b3IgZW5kKQoreworICAgIGZvciAo
YXV0byBpdCA9IGJlZ2luOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgIGFwcGVuZCgqaXQpOwor
fQorCitBTFdBWVNfSU5MSU5FIHZvaWQgQWJzdHJhY3RTbG90VmlzaXRvcjo6YXBwZW5kVmFsdWVz
KGNvbnN0IFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4qIGJhcnJpZXJzLCBzaXplX3QgY291bnQp
Cit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKQorICAgICAgICBhcHBl
bmQoYmFycmllcnNbaV0pOworfQorCitBTFdBWVNfSU5MSU5FIHZvaWQgQWJzdHJhY3RTbG90Vmlz
aXRvcjo6YXBwZW5kVmFsdWVzSGlkZGVuKGNvbnN0IFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4q
IGJhcnJpZXJzLCBzaXplX3QgY291bnQpCit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBj
b3VudDsgKytpKQorICAgICAgICBhcHBlbmRIaWRkZW4oYmFycmllcnNbaV0pOworfQorCitBTFdB
WVNfSU5MSU5FIHZvaWQgQWJzdHJhY3RTbG90VmlzaXRvcjo6YXBwZW5kVW5iYXJyaWVyZWQoSlNW
YWx1ZSB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUuaXNDZWxsKCkpCisgICAgICAgIGFwcGVuZFVu
YmFycmllcmVkKHZhbHVlLmFzQ2VsbCgpKTsKK30KKworQUxXQVlTX0lOTElORSB2b2lkIEFic3Ry
YWN0U2xvdFZpc2l0b3I6OmFwcGVuZFVuYmFycmllcmVkKEpTVmFsdWUqIHNsb3QsIHNpemVfdCBj
b3VudCkKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gY291bnQ7IGktLTspCisgICAgICAgIGFwcGVu
ZFVuYmFycmllcmVkKHNsb3RbaV0pOworfQorCitBTFdBWVNfSU5MSU5FIHZvaWQgQWJzdHJhY3RT
bG90VmlzaXRvcjo6cmVzZXQoKQoreworICAgIG1fdmlzaXRDb3VudCA9IDA7Cit9CisKK30gLy8g
bmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGFuZGxlU2V0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IYW5kbGVTZXQu
Y3BwCShyZXZpc2lvbiAyNzIyOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IYW5k
bGVTZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Niw3ICs1Niw5IEBAIHZvaWQgSGFuZGxlU2V0
Ojpncm93KCkKICAgICB9CiB9CiAKLXZvaWQgSGFuZGxlU2V0Ojp2aXNpdFN0cm9uZ0hhbmRsZXMo
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+CisvL3Zv
aWQgSGFuZGxlU2V0Ojp2aXNpdFN0cm9uZ0hhbmRsZXMoVmlzaXRvciYgdmlzaXRvcikKK3ZvaWQg
SGFuZGxlU2V0Ojp2aXNpdFN0cm9uZ0hhbmRsZXMxKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0
b3IpCiB7CiAgICAgTm9kZSogZW5kID0gbV9zdHJvbmdMaXN0LmVuZCgpOwogICAgIGZvciAoTm9k
ZSogbm9kZSA9IG1fc3Ryb25nTGlzdC5iZWdpbigpOyBub2RlICE9IGVuZDsgbm9kZSA9IG5vZGUt
Pm5leHQoKSkgewpAQCAtNjcsNiArNjksOSBAQCB2b2lkIEhhbmRsZVNldDo6dmlzaXRTdHJvbmdI
YW5kbGVzKFNsb3RWCiAgICAgfQogfQogCisvL3RlbXBsYXRlIHZvaWQgSGFuZGxlU2V0Ojp2aXNp
dFN0cm9uZ0hhbmRsZXMoU2xvdFZpc2l0b3ImKTsKKy8vdGVtcGxhdGUgdm9pZCBIYW5kbGVTZXQ6
OnZpc2l0U3Ryb25nSGFuZGxlcyhWZXJpZmllclNsb3RWaXNpdG9yJik7CisKIHZvaWQgSGFuZGxl
U2V0Ojp3cml0ZUJhcnJpZXIoSGFuZGxlU2xvdCBzbG90LCBjb25zdCBKU1ZhbHVlJiB2YWx1ZSkK
IHsKICAgICBpZiAoIXZhbHVlID09ICEqc2xvdCAmJiBzbG90LT5pc0NlbGwoKSA9PSB2YWx1ZS5p
c0NlbGwoKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hhbmRsZVNldC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hhbmRsZVNldC5oCShyZXZp
c2lvbiAyNzIyOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IYW5kbGVTZXQuaAko
d29ya2luZyBjb3B5KQpAQCAtMzUsMTAgKzM1LDExIEBACiAKIG5hbWVzcGFjZSBKU0MgewogCitj
bGFzcyBBYnN0cmFjdFNsb3RWaXNpdG9yOwogY2xhc3MgSGFuZGxlU2V0OwogY2xhc3MgVk07CiBj
bGFzcyBKU1ZhbHVlOwotY2xhc3MgU2xvdFZpc2l0b3I7CisvL2NsYXNzIFNsb3RWaXNpdG9yOwog
CiBjbGFzcyBIYW5kbGVOb2RlIHsKIHB1YmxpYzoKQEAgLTczLDcgKzc0LDggQEAgcHVibGljOgog
ICAgIEhhbmRsZVNsb3QgYWxsb2NhdGUoKTsKICAgICB2b2lkIGRlYWxsb2NhdGUoSGFuZGxlU2xv
dCk7CiAKLSAgICB2b2lkIHZpc2l0U3Ryb25nSGFuZGxlcyhTbG90VmlzaXRvciYpOworLy8gICAg
dGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCB2aXNpdFN0cm9uZ0hhbmRsZXMoVmlzaXRv
ciYpOworICAgIHZvaWQgdmlzaXRTdHJvbmdIYW5kbGVzMShBYnN0cmFjdFNsb3RWaXNpdG9yJik7
CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHdyaXRlQmFycmllcihIYW5kbGVTbG90LCBj
b25zdCBKU1ZhbHVlJik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCShy
ZXZpc2lvbiAyNzIyOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNzIsNiArNzIsNyBAQAogI2luY2x1ZGUgIlR5cGVQcm9maWxlci5o
IgogI2luY2x1ZGUgIlR5cGVQcm9maWxlckxvZy5oIgogI2luY2x1ZGUgIlZNLmgiCisjaW5jbHVk
ZSAiVmVyaWZpZXJTbG90VmlzaXRvcklubGluZXMuaCIKICNpbmNsdWRlICJXZWFrTWFwSW1wbElu
bGluZXMuaCIKICNpbmNsdWRlICJXZWFrU2V0SW5saW5lcy5oIgogI2luY2x1ZGUgPGFsZ29yaXRo
bT4KQEAgLTk0LDYgKzk1LDggQEAKICNpbmNsdWRlICJKU0NHTGliV3JhcHBlck9iamVjdC5oIgog
I2VuZGlmCiAKK3N0YXRpYyBjb25zdGV4cHIgYm9vbCBtbGFtVmVyYm9zZSA9IGZhbHNlOworCiBu
YW1lc3BhY2UgSlNDIHsKIAogbmFtZXNwYWNlIHsKQEAgLTY0NCwxOCArNjQ3LDE4IEBAIHZvaWQg
SGVhcDo6Y29tcGxldGVBbGxKSVRQbGFucygpCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+
Ci12b2lkIEhlYXA6Oml0ZXJhdGVFeGVjdXRpbmdBbmRDb21waWxpbmdDb2RlQmxvY2tzKGNvbnN0
IEZ1bmMmIGZ1bmMpCit2b2lkIEhlYXA6Oml0ZXJhdGVFeGVjdXRpbmdBbmRDb21waWxpbmdDb2Rl
QmxvY2tzKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IEZ1bmMmIGZ1bmMpCiB7
CiAgICAgbV9jb2RlQmxvY2tzLT5pdGVyYXRlQ3VycmVudGx5RXhlY3V0aW5nKGZ1bmMpOwogICAg
IGlmIChPcHRpb25zOjp1c2VKSVQoKSkKLSAgICAgICAgREZHOjppdGVyYXRlQ29kZUJsb2Nrc0Zv
ckdDKG1fdm0sIGZ1bmMpOworICAgICAgICBERkc6Oml0ZXJhdGVDb2RlQmxvY2tzRm9yR0Modmlz
aXRvciwgbV92bSwgZnVuYyk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+Ci12b2lkIEhl
YXA6Oml0ZXJhdGVFeGVjdXRpbmdBbmRDb21waWxpbmdDb2RlQmxvY2tzV2l0aG91dEhvbGRpbmdM
b2Nrcyhjb25zdCBGdW5jJiBmdW5jKQordm9pZCBIZWFwOjppdGVyYXRlRXhlY3V0aW5nQW5kQ29t
cGlsaW5nQ29kZUJsb2Nrc1dpdGhvdXRIb2xkaW5nTG9ja3MoQWJzdHJhY3RTbG90VmlzaXRvciYg
dmlzaXRvciwgY29uc3QgRnVuYyYgZnVuYykKIHsKICAgICBWZWN0b3I8Q29kZUJsb2NrKiwgMjU2
PiBjb2RlQmxvY2tzOwotICAgIGl0ZXJhdGVFeGVjdXRpbmdBbmRDb21waWxpbmdDb2RlQmxvY2tz
KAorICAgIGl0ZXJhdGVFeGVjdXRpbmdBbmRDb21waWxpbmdDb2RlQmxvY2tzKHZpc2l0b3IsCiAg
ICAgICAgIFsmXSAoQ29kZUJsb2NrKiBjb2RlQmxvY2spIHsKICAgICAgICAgICAgIGNvZGVCbG9j
a3MuYXBwZW5kKGNvZGVCbG9jayk7CiAgICAgICAgIH0pOwpAQCAtNzMzLDEzICs3MzYsMjEgQEAg
dm9pZCBIZWFwOjpyZW1vdmVEZWFkQ29tcGlsZXJXb3JrbGlzdEVudAogI2VuZGlmCiB9CiAKLWJv
b2wgSGVhcDo6aXNBbmFseXppbmdIZWFwKCkgY29uc3QKLXsKLSAgICBIZWFwUHJvZmlsZXIqIGhl
YXBQcm9maWxlciA9IG1fdm0uaGVhcFByb2ZpbGVyKCk7Ci0gICAgaWYgKFVOTElLRUxZKGhlYXBQ
cm9maWxlcikpCi0gICAgICAgIHJldHVybiBoZWFwUHJvZmlsZXItPmFjdGl2ZUhlYXBBbmFseXpl
cigpOwotICAgIHJldHVybiBmYWxzZTsKLX0KKy8vYm9vbCBIZWFwOjppc0FuYWx5emluZ0hlYXAo
KSBjb25zdAorLy97CisvLyAgICBIZWFwUHJvZmlsZXIqIGhlYXBQcm9maWxlciA9IG1fdm0uaGVh
cFByb2ZpbGVyKCk7CisvLyAgICBpZiAoVU5MSUtFTFkoaGVhcFByb2ZpbGVyKSkKKy8vICAgICAg
ICByZXR1cm4gaGVhcFByb2ZpbGVyLT5hY3RpdmVIZWFwQW5hbHl6ZXIoKTsKKy8vICAgIHJldHVy
biBmYWxzZTsKKy8vfQorCisvL0hlYXBBbmFseXplciogSGVhcDo6aGVhcEFuYWx5emVyKCkgY29u
c3QKKy8veworLy8gICAgSGVhcFByb2ZpbGVyKiBoZWFwUHJvZmlsZXIgPSBtX3ZtLmhlYXBQcm9m
aWxlcigpOworLy8gICAgaWYgKFVOTElLRUxZKGhlYXBQcm9maWxlcikpCisvLyAgICAgICAgcmV0
dXJuIGhlYXBQcm9maWxlci0+YWN0aXZlSGVhcEFuYWx5emVyKCk7CisvLyAgICByZXR1cm4gbnVs
bHB0cjsKKy8vfQogCiBzdHJ1Y3QgR2F0aGVyRXh0cmFIZWFwRGF0YSA6IE1hcmtlZEJsb2NrOjpD
b3VudEZ1bmN0b3IgewogICAgIEdhdGhlckV4dHJhSGVhcERhdGEoVk0mIHZtLCBIZWFwQW5hbHl6
ZXImIGFuYWx5emVyKQpAQCAtMTAzNSw2ICsxMDQ2LDcgQEAgdm9pZCBIZWFwOjphZGRUb1JlbWVt
YmVyZWRTZXQoY29uc3QgSlNDZQogICAgIC8vIGdldCBzY2FubmVkIGFnYWluLiBJZiB3ZSBsb3Nl
IHRoZW4gc29tZW9uZSBlbHNlIHdpbGwgYmFycmllciB0aGUgb2JqZWN0IGFnYWluLiBUaGF0IHdv
dWxkCiAgICAgLy8gYmUgdW5mb3J0dW5hdGUgYnV0IG5vdCB0aGUgZW5kIG9mIHRoZSB3b3JsZC4K
ICAgICBjZWxsLT5zZXRDZWxsU3RhdGUoQ2VsbFN0YXRlOjpQb3NzaWJseUdyZXkpOworICAgIGlm
IChtbGFtVmVyYm9zZSkgZGF0YUxvZ0xuKCIgICAgbWxhbSBIZWFwOjphZGRUb1JlbWVtYmVyZWRT
ZXQoKSBtX211dGF0b3JNYXJrU3RhY2stPmFwcGVuZChjZWxsKTogY2VsbCAiLCBSYXdQb2ludGVy
KGNlbGwpKTsKICAgICBtX211dGF0b3JNYXJrU3RhY2stPmFwcGVuZChjZWxsKTsKIH0KIApAQCAt
MTI0NSw2ICsxMjU3LDcgQEAgTkVWRVJfSU5MSU5FIGJvb2wgSGVhcDo6cnVuTm90UnVubmluZ1Bo
YQogCiBORVZFUl9JTkxJTkUgYm9vbCBIZWFwOjpydW5CZWdpblBoYXNlKEdDQ29uZHVjdG9yIGNv
bm4pCiB7CisgICAgaWYgKG1sYW1WZXJib3NlKSBkYXRhTG9nTG4oIiAgICBtbGFtIEhlYXA6OnJ1
bkJlZ2luUGhhc2UoKSBoZWFwLm1fbXV0YXRvck1hcmtTdGFjay0+c2l6ZSgpICIsIG1fbXV0YXRv
ck1hcmtTdGFjay0+c2l6ZSgpLCAiIG1fcmFjZU1hcmtTdGFjay0+c2l6ZSgpICIsIG1fcmFjZU1h
cmtTdGFjay0+c2l6ZSgpKTsKICAgICBtX2N1cnJlbnRHQ1N0YXJ0VGltZSA9IE1vbm90b25pY1Rp
bWU6Om5vdygpOwogICAgIAogICAgIHsKQEAgLTEzNDYsNiArMTM1OSw3IEBAIE5FVkVSX0lOTElO
RSBib29sIEhlYXA6OnJ1bkJlZ2luUGhhc2UoR0MKIAogTkVWRVJfSU5MSU5FIGJvb2wgSGVhcDo6
cnVuRml4cG9pbnRQaGFzZShHQ0NvbmR1Y3RvciBjb25uKQogeworICAgIGlmIChtbGFtVmVyYm9z
ZSkgZGF0YUxvZ0xuKCIgICAgbWxhbSBIZWFwOjpydW5GaXhwb2ludFBoYXNlKCkgaGVhcC5tX211
dGF0b3JNYXJrU3RhY2stPnNpemUoKSAiLCBtX211dGF0b3JNYXJrU3RhY2stPnNpemUoKSwgIiBt
X3JhY2VNYXJrU3RhY2stPnNpemUoKSAiLCBtX3JhY2VNYXJrU3RhY2stPnNpemUoKSk7CiAgICAg
UkVMRUFTRV9BU1NFUlQoY29ubiA9PSBHQ0NvbmR1Y3Rvcjo6Q29sbGVjdG9yIHx8IG1fY3VycmVu
dFRocmVhZFN0YXRlKTsKICAgICAKICAgICBTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IgPSAqbV9j
b2xsZWN0b3JTbG90VmlzaXRvcjsKQEAgLTE0MTMsNyArMTQyNyw3IEBAIE5FVkVSX0lOTElORSBi
b29sIEhlYXA6OnJ1bkZpeHBvaW50UGhhc2UKICAgICAvLyBUaGlzIGRvZXNuJ3QgaGF2ZSB0byBj
aGVjayB0aGUgbXV0YXRvciBTbG90VmlzaXRvciBiZWNhdXNlIHRoYXQgb25lIGJlY29tZXMgZW1w
dHkgYWZ0ZXIgZXZlcnkgR0MKICAgICAvLyB3b3JrIGluY3JlbWVudCwgc28gaXQgbXVzdCBiZSBl
bXB0eSBub3cuCiAgICAgaWYgKHNsb3RWaXNpdG9yLmRpZFJlYWNoVGVybWluYXRpb24oKSkKLSAg
ICAgICAgcmV0dXJuIHRydWU7IC8vIFRoaXMgaXMgbGlrZSByZWxvb3BpbmcgdG8gdGhlIHRvcCBp
ZiBydW5GaXhwb2ludFBoYXNlKCkuCisgICAgICAgIHJldHVybiB0cnVlOyAvLyBUaGlzIGlzIGxp
a2UgcmVsb29waW5nIHRvIHRoZSB0b3Agb2YgcnVuRml4cG9pbnRQaGFzZSgpLgogICAgICAgICAK
ICAgICBpZiAoIW1fc2NoZWR1bGVyLT5zaG91bGRSZXN1bWUoKSkKICAgICAgICAgcmV0dXJuIHRy
dWU7CkBAIC0xNDM0LDYgKzE0NDgsNyBAQCBORVZFUl9JTkxJTkUgYm9vbCBIZWFwOjpydW5GaXhw
b2ludFBoYXNlCiAKIE5FVkVSX0lOTElORSBib29sIEhlYXA6OnJ1bkNvbmN1cnJlbnRQaGFzZShH
Q0NvbmR1Y3RvciBjb25uKQogeworICAgIGlmIChtbGFtVmVyYm9zZSkgZGF0YUxvZ0xuKCIgICAg
bWxhbSBIZWFwOjpydW5Db25jdXJyZW50UGhhc2UoKSBoZWFwLm1fbXV0YXRvck1hcmtTdGFjay0+
c2l6ZSgpICIsIG1fbXV0YXRvck1hcmtTdGFjay0+c2l6ZSgpLCAiIG1fcmFjZU1hcmtTdGFjay0+
c2l6ZSgpICIsIG1fcmFjZU1hcmtTdGFjay0+c2l6ZSgpKTsKICAgICBTbG90VmlzaXRvciYgc2xv
dFZpc2l0b3IgPSAqbV9jb2xsZWN0b3JTbG90VmlzaXRvcjsKIAogICAgIHN3aXRjaCAoY29ubikg
ewpAQCAtMTQ2NCw2ICsxNDc5LDcgQEAgTkVWRVJfSU5MSU5FIGJvb2wgSGVhcDo6cnVuQ29uY3Vy
cmVudFBoYQogCiBORVZFUl9JTkxJTkUgYm9vbCBIZWFwOjpydW5SZWxvb3BQaGFzZShHQ0NvbmR1
Y3RvciBjb25uKQogeworICAgIGlmIChtbGFtVmVyYm9zZSkgZGF0YUxvZ0xuKCIgICAgbWxhbSBI
ZWFwOjpydW5SZWxvb3BQaGFzZSgpIGhlYXAubV9tdXRhdG9yTWFya1N0YWNrLT5zaXplKCkgIiwg
bV9tdXRhdG9yTWFya1N0YWNrLT5zaXplKCksICIgbV9yYWNlTWFya1N0YWNrLT5zaXplKCkgIiwg
bV9yYWNlTWFya1N0YWNrLT5zaXplKCkpOwogICAgIGRhdGFMb2dJZihPcHRpb25zOjpsb2dHQygp
LCAiW0dDPCIsIFJhd1BvaW50ZXIodGhpcyksICI+OiAiLCBnY0NvbmR1Y3RvclNob3J0TmFtZShj
b25uKSwgIiAiKTsKICAgICAKICAgICBtX3NjaGVkdWxlci0+ZGlkU3RvcCgpOwpAQCAtMTQ3Niw3
ICsxNDkyLDkgQEAgTkVWRVJfSU5MSU5FIGJvb2wgSGVhcDo6cnVuUmVsb29wUGhhc2UoRwogCiBO
RVZFUl9JTkxJTkUgYm9vbCBIZWFwOjpydW5FbmRQaGFzZShHQ0NvbmR1Y3RvciBjb25uKQogewor
ICAgIGlmIChtbGFtVmVyYm9zZSkgZGF0YUxvZ0xuKCIgICAgbWxhbSBIZWFwOjpydW5FbmRQaGFz
ZSgpIGhlYXAubV9tdXRhdG9yTWFya1N0YWNrLT5zaXplKCkgIiwgbV9tdXRhdG9yTWFya1N0YWNr
LT5zaXplKCksICIgbV9yYWNlTWFya1N0YWNrLT5zaXplKCkgIiwgbV9yYWNlTWFya1N0YWNrLT5z
aXplKCkpOwogICAgIG1fc2NoZWR1bGVyLT5lbmRDb2xsZWN0aW9uKCk7CisgICAgaWYgKG1sYW1W
ZXJib3NlKSBkYXRhTG9nTG4oIiAgICBtbGFtIEhlYXA6OnJ1bkVuZFBoYXNlKCkgU1RFUCAxOiBo
ZWFwLm1fbXV0YXRvck1hcmtTdGFjay0+c2l6ZSgpICIsIG1fbXV0YXRvck1hcmtTdGFjay0+c2l6
ZSgpLCAiIG1fcmFjZU1hcmtTdGFjay0+c2l6ZSgpICIsIG1fcmFjZU1hcmtTdGFjay0+c2l6ZSgp
KTsKICAgICAgICAgCiAgICAgewogICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbWFy
a2luZ011dGV4KTsKQEAgLTE0ODQsMTQgKzE1MDIsMjcgQEAgTkVWRVJfSU5MSU5FIGJvb2wgSGVh
cDo6cnVuRW5kUGhhc2UoR0NDbwogICAgICAgICBtX21hcmtpbmdDb25kaXRpb25WYXJpYWJsZS5u
b3RpZnlBbGwoKTsKICAgICB9CiAgICAgbV9oZWxwZXJDbGllbnQuZmluaXNoKCk7CisgICAgaWYg
KG1sYW1WZXJib3NlKSBkYXRhTG9nTG4oIiAgICBtbGFtIEhlYXA6OnJ1bkVuZFBoYXNlKCkgU1RF
UCAyOiBoZWFwLm1fbXV0YXRvck1hcmtTdGFjay0+c2l6ZSgpICIsIG1fbXV0YXRvck1hcmtTdGFj
ay0+c2l6ZSgpLCAiIG1fcmFjZU1hcmtTdGFjay0+c2l6ZSgpICIsIG1fcmFjZU1hcmtTdGFjay0+
c2l6ZSgpKTsKICAgICAKLSAgICBpdGVyYXRlRXhlY3V0aW5nQW5kQ29tcGlsaW5nQ29kZUJsb2Nr
cygKKyAgICBSRUxFQVNFX0FTU0VSVChtX211dGF0b3JNYXJrU3RhY2stPmlzRW1wdHkoKSk7IC8v
IG1sYW0gTWFrZSBpbnRvIEFTU0VSVAorICAgIFJFTEVBU0VfQVNTRVJUKG1fcmFjZU1hcmtTdGFj
ay0+aXNFbXB0eSgpKTsgLy8gbWxhbSBNYWtlIGludG8gQVNTRVJUCisKKyAgICBTbG90VmlzaXRv
ciYgc2xvdFZpc2l0b3IgPSAqbV9jb2xsZWN0b3JTbG90VmlzaXRvcjsKKyAgICBpdGVyYXRlRXhl
Y3V0aW5nQW5kQ29tcGlsaW5nQ29kZUJsb2NrcyhzbG90VmlzaXRvciwKICAgICAgICAgWyZdIChD
b2RlQmxvY2sqIGNvZGVCbG9jaykgewogICAgICAgICAgICAgd3JpdGVCYXJyaWVyKGNvZGVCbG9j
ayk7CiAgICAgICAgIH0pOwotICAgICAgICAKKyAgICBpZiAobWxhbVZlcmJvc2UpIGRhdGFMb2dM
bigiICAgIG1sYW0gSGVhcDo6cnVuRW5kUGhhc2UoKSBTVEVQIDM6IGhlYXAubV9tdXRhdG9yTWFy
a1N0YWNrLT5zaXplKCkgIiwgbV9tdXRhdG9yTWFya1N0YWNrLT5zaXplKCksICIgbV9yYWNlTWFy
a1N0YWNrLT5zaXplKCkgIiwgbV9yYWNlTWFya1N0YWNrLT5zaXplKCkpOworCiAgICAgdXBkYXRl
T2JqZWN0Q291bnRzKCk7CisgICAgaWYgKG1sYW1WZXJib3NlKSBkYXRhTG9nTG4oIiAgICBtbGFt
IEhlYXA6OnJ1bkVuZFBoYXNlKCkgU1RFUCA0OiBoZWFwLm1fbXV0YXRvck1hcmtTdGFjay0+c2l6
ZSgpICIsIG1fbXV0YXRvck1hcmtTdGFjay0+c2l6ZSgpLCAiIG1fcmFjZU1hcmtTdGFjay0+c2l6
ZSgpICIsIG1fcmFjZU1hcmtTdGFjay0+c2l6ZSgpKTsKICAgICBlbmRNYXJraW5nKCk7CisgICAg
aWYgKG1sYW1WZXJib3NlKSBkYXRhTG9nTG4oIiAgICBtbGFtIEhlYXA6OnJ1bkVuZFBoYXNlKCkg
QkVGT1JFIHZlcmlmeUdDOiBoZWFwLm1fbXV0YXRvck1hcmtTdGFjay0+c2l6ZSgpICIsIG1fbXV0
YXRvck1hcmtTdGFjay0+c2l6ZSgpLCAiIG1fcmFjZU1hcmtTdGFjay0+c2l6ZSgpICIsIG1fcmFj
ZU1hcmtTdGFjay0+c2l6ZSgpKTsKKworICAgIC8vIG1sYW0KKyAgICBpZiAoVU5MSUtFTFkoT3B0
aW9uczo6dmVyaWZ5R0MoKSkpCisgICAgICAgIHZlcmlmeUdDKCk7CisgICAgLy8gbWxhbSAqLwog
CiAgICAgaWYgKFVOTElLRUxZKG1fdmVyaWZpZXIpKSB7CiAgICAgICAgIG1fdmVyaWZpZXItPmdh
dGhlckxpdmVDZWxscyhIZWFwVmVyaWZpZXI6OlBoYXNlOjpBZnRlck1hcmtpbmcpOwpAQCAtMjE3
MCw2ICsyMjAxLDEzIEBAIHZvaWQgSGVhcDo6c3VzcGVuZENvbXBpbGVyVGhyZWFkcygpCiAKIHZv
aWQgSGVhcDo6d2lsbFN0YXJ0Q29sbGVjdGlvbigpCiB7CisgICAgLy8gbWxhbQorICAgIGlmIChV
TkxJS0VMWShPcHRpb25zOjp2ZXJpZnlHQygpKSkgeworICAgICAgICBtX3ZlcmlmaWVyU2xvdFZp
c2l0b3IgPSBtYWtlVW5pcXVlPFZlcmlmaWVyU2xvdFZpc2l0b3I+KCp0aGlzKTsKKyAgICAgICAg
UkVMRUFTRV9BU1NFUlQoIW1faXNWZXJpZnlpbmdHQyk7IC8vIG1sYW0gVEVTVCBzYW5pdHkgY2hl
Y2suCisgICAgfQorICAgIC8vIG1sYW0gKi8KKwogICAgIGRhdGFMb2dJZihPcHRpb25zOjpsb2dH
QygpLCAiPT4gIik7CiAgICAgCiAgICAgaWYgKHNob3VsZERvRnVsbENvbGxlY3Rpb24oKSkgewpA
QCAtMjY5NywxMyArMjczNSwxOSBAQCB2b2lkIEhlYXA6OmRpZEZyZWVCbG9jayhzaXplX3QgY2Fw
YWNpdHkpCiAjZW5kaWYKIH0KIAorLy8gbWxhbSBGSVhNRQogdm9pZCBIZWFwOjphZGRDb3JlQ29u
c3RyYWludHMoKQogewogICAgIG1fY29uc3RyYWludFNldC0+YWRkKAogICAgICAgICAiQ3MiLCAi
Q29uc2VydmF0aXZlIFNjYW4iLAotICAgICAgICBbdGhpcywgbGFzdFZlcnNpb24gPSBzdGF0aWNf
Y2FzdDx1aW50NjRfdD4oMCldIChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IpIG11dGFibGUgewor
ICAgICAgICBbdGhpcywgbGFzdFZlcnNpb24gPSBzdGF0aWNfY2FzdDx1aW50NjRfdD4oMCldIChB
YnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBtdXRhYmxlIHsKICAgICAgICAgICAgIGJvb2wg
c2hvdWxkTm90UHJvZHVjZVdvcmsgPSBsYXN0VmVyc2lvbiA9PSBtX3BoYXNlVmVyc2lvbjsKLSAg
ICAgICAgICAgIGlmIChzaG91bGROb3RQcm9kdWNlV29yaykKKworICAgICAgICAgICAgLy8gRm9y
IHRoZSBHQyBWZXJmaWVyLCB3ZSB3b3VsZCBsaWtlIHRvIHVzZSB0aGUgaWRlbnRpY2FsIHNldCBv
ZiBjb25zZXJ2YXRpdmUgcm9vdHMKKyAgICAgICAgICAgIC8vIGFzIHRoZSByZWFsIEdDLiBPdGhl
cndpc2UsIHRoZSBHQyB2ZXJpZmllciBtYXkgcmVwb3J0IGZhbHNlIG5lZ2F0aXZlcyBkdWUgdG8K
KyAgICAgICAgICAgIC8vIHZhcmlhdGlvbnMgaW4gc3RhY2sgdmFsdWVzLiBGb3IgdGhpcyBzYW1l
IHJlYXNvbiwgd2Ugd2lsbCBza2lwIHRoaXMgY29uc3RyYWludAorICAgICAgICAgICAgLy8gd2hl
biB3ZSdyZSBydW5uaW5nIHRoZSBHQyB2ZXJpZmljYXRpb24gaW4gdGhlIEVuZCBwaGFzZS4KKyAg
ICAgICAgICAgIGlmIChzaG91bGROb3RQcm9kdWNlV29yayB8fCBtX2lzVmVyaWZ5aW5nR0MpCiAg
ICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBUaW1pbmdT
Y29wZSBwcmVDb252ZXJnZW5jZVRpbWluZ1Njb3BlKCp0aGlzLCAiQ29uc3RyYWludDogY29uc2Vy
dmF0aXZlIHNjYW4iKTsKQEAgLTI3MTgsMTMgKzI3NjIsMTcgQEAgdm9pZCBIZWFwOjphZGRDb3Jl
Q29uc3RyYWludHMoKQogICAgICAgICAgICAgICAgIGdhdGhlckpTU3RhY2tSb290cyhjb25zZXJ2
YXRpdmVSb290cyk7CiAgICAgICAgICAgICAgICAgZ2F0aGVyU2NyYXRjaEJ1ZmZlclJvb3RzKGNv
bnNlcnZhdGl2ZVJvb3RzKTsKIAotICAgICAgICAgICAgICAgIFNldFJvb3RNYXJrUmVhc29uU2Nv
cGUgcm9vdFNjb3BlKHNsb3RWaXNpdG9yLCBTbG90VmlzaXRvcjo6Um9vdE1hcmtSZWFzb246OkNv
bnNlcnZhdGl2ZVNjYW4pOwotICAgICAgICAgICAgICAgIHNsb3RWaXNpdG9yLmFwcGVuZChjb25z
ZXJ2YXRpdmVSb290cyk7CisgICAgICAgICAgICAgICAgU2V0Um9vdE1hcmtSZWFzb25TY29wZSBy
b290U2NvcGUodmlzaXRvciwgQWJzdHJhY3RTbG90VmlzaXRvcjo6Um9vdE1hcmtSZWFzb246OkNv
bnNlcnZhdGl2ZVNjYW4pOworICAgICAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kX0NvbnNlcnZh
dGl2ZVJvb3RzKGNvbnNlcnZhdGl2ZVJvb3RzKTsKKyAgICAgICAgICAgICAgICBpZiAoVU5MSUtF
TFkobV92ZXJpZmllclNsb3RWaXNpdG9yKSkKKyAgICAgICAgICAgICAgICAgICAgbV92ZXJpZmll
clNsb3RWaXNpdG9yLT5hcHBlbmRfQ29uc2VydmF0aXZlUm9vdHMoY29uc2VydmF0aXZlUm9vdHMp
OwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKE9wdGlvbnM6OnVzZUpJVCgpKSB7CiAg
ICAgICAgICAgICAgICAgLy8gSklUU3R1YlJvdXRpbmVzIG11c3QgYmUgdmlzaXRlZCBhZnRlciBz
Y2FubmluZyBDb25zZXJ2YXRpdmVSb290cyBzaW5jZSBKSVRTdHViUm91dGluZXMgZGVwZW5kIG9u
IHRoZSBob29rIGV4ZWN1dGVkIGR1cmluZyBnYXRoZXJpbmcgQ29uc2VydmF0aXZlUm9vdHMuCi0g
ICAgICAgICAgICAgICAgU2V0Um9vdE1hcmtSZWFzb25TY29wZSByb290U2NvcGUoc2xvdFZpc2l0
b3IsIFNsb3RWaXNpdG9yOjpSb290TWFya1JlYXNvbjo6SklUU3R1YlJvdXRpbmVzKTsKLSAgICAg
ICAgICAgICAgICBtX2ppdFN0dWJSb3V0aW5lcy0+dHJhY2VNYXJrZWRTdHViUm91dGluZXMoc2xv
dFZpc2l0b3IpOworICAgICAgICAgICAgICAgIFNldFJvb3RNYXJrUmVhc29uU2NvcGUgcm9vdFNj
b3BlKHZpc2l0b3IsIEFic3RyYWN0U2xvdFZpc2l0b3I6OlJvb3RNYXJrUmVhc29uOjpKSVRTdHVi
Um91dGluZXMpOworICAgICAgICAgICAgICAgIG1faml0U3R1YlJvdXRpbmVzLT50cmFjZU1hcmtl
ZFN0dWJSb3V0aW5lczEodmlzaXRvcik7CisgICAgICAgICAgICAgICAgaWYgKFVOTElLRUxZKG1f
dmVyaWZpZXJTbG90VmlzaXRvcikpCisgICAgICAgICAgICAgICAgICAgIG1faml0U3R1YlJvdXRp
bmVzLT50cmFjZU1hcmtlZFN0dWJSb3V0aW5lczEoKm1fdmVyaWZpZXJTbG90VmlzaXRvcik7CiAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGxhc3RWZXJzaW9uID0gbV9w
aGFzZVZlcnNpb247CkBAIC0yNzMzLDkyICsyNzgxLDkyIEBAIHZvaWQgSGVhcDo6YWRkQ29yZUNv
bnN0cmFpbnRzKCkKICAgICAKICAgICBtX2NvbnN0cmFpbnRTZXQtPmFkZCgKICAgICAgICAgIk1z
ciIsICJNaXNjIFNtYWxsIFJvb3RzIiwKLSAgICAgICAgW3RoaXNdIChTbG90VmlzaXRvciYgc2xv
dFZpc2l0b3IpIHsKKyAgICAgICAgW3RoaXNdIChBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9y
KSB7CiAKICNpZiBKU0NfT0JKQ19BUElfRU5BQkxFRAotICAgICAgICAgICAgc2NhbkV4dGVybmFs
UmVtZW1iZXJlZFNldChtX3ZtLCBzbG90VmlzaXRvcik7CisgICAgICAgICAgICBzY2FuRXh0ZXJu
YWxSZW1lbWJlcmVkU2V0KG1fdm0sIHZpc2l0b3IpOwogI2VuZGlmCiAgICAgICAgICAgICBpZiAo
bV92bS5zbWFsbFN0cmluZ3MubmVlZHNUb0JlVmlzaXRlZCgqbV9jb2xsZWN0aW9uU2NvcGUpKSB7
Ci0gICAgICAgICAgICAgICAgU2V0Um9vdE1hcmtSZWFzb25TY29wZSByb290U2NvcGUoc2xvdFZp
c2l0b3IsIFNsb3RWaXNpdG9yOjpSb290TWFya1JlYXNvbjo6U3Ryb25nUmVmZXJlbmNlcyk7Ci0g
ICAgICAgICAgICAgICAgbV92bS5zbWFsbFN0cmluZ3MudmlzaXRTdHJvbmdSZWZlcmVuY2VzKHNs
b3RWaXNpdG9yKTsKKyAgICAgICAgICAgICAgICBTZXRSb290TWFya1JlYXNvblNjb3BlIHJvb3RT
Y29wZSh2aXNpdG9yLCBBYnN0cmFjdFNsb3RWaXNpdG9yOjpSb290TWFya1JlYXNvbjo6U3Ryb25n
UmVmZXJlbmNlcyk7CisgICAgICAgICAgICAgICAgbV92bS5zbWFsbFN0cmluZ3MudmlzaXRTdHJv
bmdSZWZlcmVuY2VzKHZpc2l0b3IpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgU2V0Um9vdE1hcmtSZWFzb25TY29wZSByb290U2Nv
cGUoc2xvdFZpc2l0b3IsIFNsb3RWaXNpdG9yOjpSb290TWFya1JlYXNvbjo6UHJvdGVjdGVkVmFs
dWVzKTsKKyAgICAgICAgICAgICAgICBTZXRSb290TWFya1JlYXNvblNjb3BlIHJvb3RTY29wZSh2
aXNpdG9yLCBBYnN0cmFjdFNsb3RWaXNpdG9yOjpSb290TWFya1JlYXNvbjo6UHJvdGVjdGVkVmFs
dWVzKTsKICAgICAgICAgICAgICAgICBmb3IgKGF1dG8mIHBhaXIgOiBtX3Byb3RlY3RlZFZhbHVl
cykKLSAgICAgICAgICAgICAgICAgICAgc2xvdFZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQocGFp
ci5rZXkpOworICAgICAgICAgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKHBh
aXIua2V5KTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKG1f
bWFya0xpc3RTZXQgJiYgbV9tYXJrTGlzdFNldC0+c2l6ZSgpKSB7Ci0gICAgICAgICAgICAgICAg
U2V0Um9vdE1hcmtSZWFzb25TY29wZSByb290U2NvcGUoc2xvdFZpc2l0b3IsIFNsb3RWaXNpdG9y
OjpSb290TWFya1JlYXNvbjo6Q29uc2VydmF0aXZlU2Nhbik7Ci0gICAgICAgICAgICAgICAgTWFy
a2VkQXJndW1lbnRCdWZmZXI6Om1hcmtMaXN0cyhzbG90VmlzaXRvciwgKm1fbWFya0xpc3RTZXQp
OworICAgICAgICAgICAgICAgIFNldFJvb3RNYXJrUmVhc29uU2NvcGUgcm9vdFNjb3BlKHZpc2l0
b3IsIEFic3RyYWN0U2xvdFZpc2l0b3I6OlJvb3RNYXJrUmVhc29uOjpDb25zZXJ2YXRpdmVTY2Fu
KTsKKyAgICAgICAgICAgICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlcjo6bWFya0xpc3RzKHZpc2l0
b3IsICptX21hcmtMaXN0U2V0KTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgbV9tYXJr
ZWRKU1ZhbHVlUmVmQXJyYXlzLmZvckVhY2goWyZdIChNYXJrZWRKU1ZhbHVlUmVmQXJyYXkqIGFy
cmF5KSB7Ci0gICAgICAgICAgICAgICAgYXJyYXktPnZpc2l0QWdncmVnYXRlKHNsb3RWaXNpdG9y
KTsKKyAgICAgICAgICAgICAgICBhcnJheS0+dmlzaXRBZ2dyZWdhdGUxKHZpc2l0b3IpOwogICAg
ICAgICAgICAgfSk7CiAKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBTZXRSb290TWFy
a1JlYXNvblNjb3BlIHJvb3RTY29wZShzbG90VmlzaXRvciwgU2xvdFZpc2l0b3I6OlJvb3RNYXJr
UmVhc29uOjpWTUV4Y2VwdGlvbnMpOwotICAgICAgICAgICAgICAgIHNsb3RWaXNpdG9yLmFwcGVu
ZFVuYmFycmllcmVkKG1fdm0uZXhjZXB0aW9uKCkpOwotICAgICAgICAgICAgICAgIHNsb3RWaXNp
dG9yLmFwcGVuZFVuYmFycmllcmVkKG1fdm0ubGFzdEV4Y2VwdGlvbigpKTsKKyAgICAgICAgICAg
ICAgICBTZXRSb290TWFya1JlYXNvblNjb3BlIHJvb3RTY29wZSh2aXNpdG9yLCBBYnN0cmFjdFNs
b3RWaXNpdG9yOjpSb290TWFya1JlYXNvbjo6Vk1FeGNlcHRpb25zKTsKKyAgICAgICAgICAgICAg
ICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKG1fdm0uZXhjZXB0aW9uKCkpOworICAgICAgICAg
ICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQobV92bS5sYXN0RXhjZXB0aW9uKCkpOwog
ICAgICAgICAgICAgfQogICAgICAgICB9LAogICAgICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eTo6
R3JleWVkQnlFeGVjdXRpb24pOwogICAgIAogICAgIG1fY29uc3RyYWludFNldC0+YWRkKAogICAg
ICAgICAiU2giLCAiU3Ryb25nIEhhbmRsZXMiLAotICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9y
JiBzbG90VmlzaXRvcikgewotICAgICAgICAgICAgU2V0Um9vdE1hcmtSZWFzb25TY29wZSByb290
U2NvcGUoc2xvdFZpc2l0b3IsIFNsb3RWaXNpdG9yOjpSb290TWFya1JlYXNvbjo6U3Ryb25nSGFu
ZGxlcyk7Ci0gICAgICAgICAgICBtX2hhbmRsZVNldC52aXNpdFN0cm9uZ0hhbmRsZXMoc2xvdFZp
c2l0b3IpOworICAgICAgICBbdGhpc10gKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsK
KyAgICAgICAgICAgIFNldFJvb3RNYXJrUmVhc29uU2NvcGUgcm9vdFNjb3BlKHZpc2l0b3IsIEFi
c3RyYWN0U2xvdFZpc2l0b3I6OlJvb3RNYXJrUmVhc29uOjpTdHJvbmdIYW5kbGVzKTsKKyAgICAg
ICAgICAgIG1faGFuZGxlU2V0LnZpc2l0U3Ryb25nSGFuZGxlczEodmlzaXRvcik7CiAgICAgICAg
IH0sCiAgICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5OjpHcmV5ZWRCeUV4ZWN1dGlvbik7CiAg
ICAgCiAgICAgbV9jb25zdHJhaW50U2V0LT5hZGQoCiAgICAgICAgICJEIiwgIkRlYnVnZ2VyIiwK
LSAgICAgICAgW3RoaXNdIChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IpIHsKLSAgICAgICAgICAg
IFNldFJvb3RNYXJrUmVhc29uU2NvcGUgcm9vdFNjb3BlKHNsb3RWaXNpdG9yLCBTbG90VmlzaXRv
cjo6Um9vdE1hcmtSZWFzb246OkRlYnVnZ2VyKTsKKyAgICAgICAgW3RoaXNdIChBYnN0cmFjdFNs
b3RWaXNpdG9yJiB2aXNpdG9yKSB7CisgICAgICAgICAgICBTZXRSb290TWFya1JlYXNvblNjb3Bl
IHJvb3RTY29wZSh2aXNpdG9yLCBBYnN0cmFjdFNsb3RWaXNpdG9yOjpSb290TWFya1JlYXNvbjo6
RGVidWdnZXIpOwogCiAjaWYgRU5BQkxFKFNBTVBMSU5HX1BST0ZJTEVSKQogICAgICAgICAgICAg
aWYgKFNhbXBsaW5nUHJvZmlsZXIqIHNhbXBsaW5nUHJvZmlsZXIgPSBtX3ZtLnNhbXBsaW5nUHJv
ZmlsZXIoKSkgewogICAgICAgICAgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2soc2FtcGxp
bmdQcm9maWxlci0+Z2V0TG9jaygpKTsKICAgICAgICAgICAgICAgICBzYW1wbGluZ1Byb2ZpbGVy
LT5wcm9jZXNzVW52ZXJpZmllZFN0YWNrVHJhY2VzKGxvY2tlcik7Ci0gICAgICAgICAgICAgICAg
c2FtcGxpbmdQcm9maWxlci0+dmlzaXQoc2xvdFZpc2l0b3IpOworICAgICAgICAgICAgICAgIHNh
bXBsaW5nUHJvZmlsZXItPnZpc2l0KHZpc2l0b3IpOwogICAgICAgICAgICAgICAgIGlmIChPcHRp
b25zOjpsb2dHQygpID09IEdDTG9nZ2luZzo6VmVyYm9zZSkKLSAgICAgICAgICAgICAgICAgICAg
ZGF0YUxvZygiU2FtcGxpbmcgUHJvZmlsZXIgZGF0YTpcbiIsIHNsb3RWaXNpdG9yKTsKKyAgICAg
ICAgICAgICAgICAgICAgZGF0YUxvZygiU2FtcGxpbmcgUHJvZmlsZXIgZGF0YTpcbiIsIHZpc2l0
b3IpOwogICAgICAgICAgICAgfQogI2VuZGlmIC8vIEVOQUJMRShTQU1QTElOR19QUk9GSUxFUikK
IAogICAgICAgICAgICAgaWYgKG1fdm0udHlwZVByb2ZpbGVyKCkpCi0gICAgICAgICAgICAgICAg
bV92bS50eXBlUHJvZmlsZXJMb2coKS0+dmlzaXQoc2xvdFZpc2l0b3IpOworICAgICAgICAgICAg
ICAgIG1fdm0udHlwZVByb2ZpbGVyTG9nKCktPnZpc2l0KHZpc2l0b3IpOwogICAgICAgICAgICAg
CiAgICAgICAgICAgICBpZiAoYXV0byogc2hhZG93Q2hpY2tlbiA9IG1fdm0uc2hhZG93Q2hpY2tl
bigpKQotICAgICAgICAgICAgICAgIHNoYWRvd0NoaWNrZW4tPnZpc2l0Q2hpbGRyZW4oc2xvdFZp
c2l0b3IpOworICAgICAgICAgICAgICAgIHNoYWRvd0NoaWNrZW4tPnZpc2l0Q2hpbGRyZW4odmlz
aXRvcik7CiAgICAgICAgIH0sCiAgICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5OjpHcmV5ZWRC
eUV4ZWN1dGlvbik7CiAgICAgCiAgICAgbV9jb25zdHJhaW50U2V0LT5hZGQoCiAgICAgICAgICJX
cyIsICJXZWFrIFNldHMiLAotICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRv
cikgewotICAgICAgICAgICAgU2V0Um9vdE1hcmtSZWFzb25TY29wZSByb290U2NvcGUoc2xvdFZp
c2l0b3IsIFNsb3RWaXNpdG9yOjpSb290TWFya1JlYXNvbjo6V2Vha1NldHMpOwotICAgICAgICAg
ICAgbV9vYmplY3RTcGFjZS52aXNpdFdlYWtTZXRzKHNsb3RWaXNpdG9yKTsKKyAgICAgICAgW3Ro
aXNdIChBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKSB7CisgICAgICAgICAgICBTZXRSb290
TWFya1JlYXNvblNjb3BlIHJvb3RTY29wZSh2aXNpdG9yLCBBYnN0cmFjdFNsb3RWaXNpdG9yOjpS
b290TWFya1JlYXNvbjo6V2Vha1NldHMpOworICAgICAgICAgICAgbV9vYmplY3RTcGFjZS52aXNp
dFdlYWtTZXRzMSh2aXNpdG9yKTsKICAgICAgICAgfSwKICAgICAgICAgQ29uc3RyYWludFZvbGF0
aWxpdHk6OkdyZXllZEJ5TWFya2luZyk7CiAgICAgCiAgICAgbV9jb25zdHJhaW50U2V0LT5hZGQo
CiAgICAgICAgICJPIiwgIk91dHB1dCIsCi0gICAgICAgIFtdIChTbG90VmlzaXRvciYgc2xvdFZp
c2l0b3IpIHsKLSAgICAgICAgICAgIFZNJiB2bSA9IHNsb3RWaXNpdG9yLnZtKCk7CisgICAgICAg
IFtdIChBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKSB7CisgICAgICAgICAgICBWTSYgdm0g
PSB2aXNpdG9yLnZtKCk7CiAKLSAgICAgICAgICAgIGF1dG8gY2FsbE91dHB1dENvbnN0cmFpbnQg
PSBbXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yLCBIZWFwQ2VsbCogaGVhcENlbGwsIEhlYXBD
ZWxsOjpLaW5kKSB7Ci0gICAgICAgICAgICAgICAgU2V0Um9vdE1hcmtSZWFzb25TY29wZSByb290
U2NvcGUoc2xvdFZpc2l0b3IsIFNsb3RWaXNpdG9yOjpSb290TWFya1JlYXNvbjo6T3V0cHV0KTsK
LSAgICAgICAgICAgICAgICBWTSYgdm0gPSBzbG90VmlzaXRvci52bSgpOworICAgICAgICAgICAg
YXV0byBjYWxsT3V0cHV0Q29uc3RyYWludCA9IFtdIChBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNp
dG9yLCBIZWFwQ2VsbCogaGVhcENlbGwsIEhlYXBDZWxsOjpLaW5kKSB7CisgICAgICAgICAgICAg
ICAgU2V0Um9vdE1hcmtSZWFzb25TY29wZSByb290U2NvcGUodmlzaXRvciwgQWJzdHJhY3RTbG90
VmlzaXRvcjo6Um9vdE1hcmtSZWFzb246Ok91dHB1dCk7CisgICAgICAgICAgICAgICAgVk0mIHZt
ID0gdmlzaXRvci52bSgpOwogICAgICAgICAgICAgICAgIEpTQ2VsbCogY2VsbCA9IHN0YXRpY19j
YXN0PEpTQ2VsbCo+KGhlYXBDZWxsKTsKLSAgICAgICAgICAgICAgICBjZWxsLT5tZXRob2RUYWJs
ZSh2bSktPnZpc2l0T3V0cHV0Q29uc3RyYWludHMoY2VsbCwgc2xvdFZpc2l0b3IpOworICAgICAg
ICAgICAgICAgIGNlbGwtPm1ldGhvZFRhYmxlKHZtKS0+dmlzaXRPdXRwdXRDb25zdHJhaW50cyhj
ZWxsLCB2aXNpdG9yKTsKICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAKICAgICAgICAgICAg
IGF1dG8gYWRkID0gWyZdIChhdXRvJiBzZXQpIHsKLSAgICAgICAgICAgICAgICBzbG90VmlzaXRv
ci5hZGRQYXJhbGxlbENvbnN0cmFpbnRUYXNrKHNldC5mb3JFYWNoTWFya2VkQ2VsbEluUGFyYWxs
ZWwoY2FsbE91dHB1dENvbnN0cmFpbnQpKTsKKyAgICAgICAgICAgICAgICB2aXNpdG9yLmFkZFBh
cmFsbGVsQ29uc3RyYWludFRhc2soc2V0LmZvckVhY2hNYXJrZWRDZWxsSW5QYXJhbGxlbChjYWxs
T3V0cHV0Q29uc3RyYWludCkpOwogICAgICAgICAgICAgfTsKICAgICAgICAgICAgIAogICAgICAg
ICAgICAgYWRkKHZtLmV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2VzV2l0aENvbnN0cmFpbnRzKTsK
QEAgLTI4MzIsMjIgKzI4ODAsMjIgQEAgdm9pZCBIZWFwOjphZGRDb3JlQ29uc3RyYWludHMoKQog
ICAgIGlmIChPcHRpb25zOjp1c2VKSVQoKSkgewogICAgICAgICBtX2NvbnN0cmFpbnRTZXQtPmFk
ZCgKICAgICAgICAgICAgICJEdyIsICJERkcgV29ya2xpc3RzIiwKLSAgICAgICAgICAgIFt0aGlz
XSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yKSB7Ci0gICAgICAgICAgICAgICAgU2V0Um9vdE1h
cmtSZWFzb25TY29wZSByb290U2NvcGUoc2xvdFZpc2l0b3IsIFNsb3RWaXNpdG9yOjpSb290TWFy
a1JlYXNvbjo6REZHV29ya0xpc3RzKTsKKyAgICAgICAgICAgIFt0aGlzXSAoQWJzdHJhY3RTbG90
VmlzaXRvciYgdmlzaXRvcikgeworICAgICAgICAgICAgICAgIFNldFJvb3RNYXJrUmVhc29uU2Nv
cGUgcm9vdFNjb3BlKHZpc2l0b3IsIEFic3RyYWN0U2xvdFZpc2l0b3I6OlJvb3RNYXJrUmVhc29u
OjpERkdXb3JrTGlzdHMpOwogCiAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gREZH
OjpudW1iZXJPZldvcmtsaXN0cygpOyBpLS07KQotICAgICAgICAgICAgICAgICAgICBERkc6OmV4
aXN0aW5nV29ya2xpc3RGb3JJbmRleChpKS52aXNpdFdlYWtSZWZlcmVuY2VzKHNsb3RWaXNpdG9y
KTsKKyAgICAgICAgICAgICAgICAgICAgREZHOjpleGlzdGluZ1dvcmtsaXN0Rm9ySW5kZXgoaSku
dmlzaXRXZWFrUmVmZXJlbmNlcyh2aXNpdG9yKTsKICAgICAgICAgICAgICAgICAKICAgICAgICAg
ICAgICAgICAvLyBGSVhNRTogVGhpcyBpcyBhbG1vc3QgY2VydGFpbmx5IHVubmVjZXNzYXJ5Lgog
ICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNjY4MjkKLSAgICAgICAgICAgICAgICBERkc6Oml0ZXJhdGVDb2RlQmxvY2tzRm9yR0MoCisg
ICAgICAgICAgICAgICAgREZHOjppdGVyYXRlQ29kZUJsb2Nrc0ZvckdDKHZpc2l0b3IsCiAgICAg
ICAgICAgICAgICAgICAgIG1fdm0sCiAgICAgICAgICAgICAgICAgICAgIFsmXSAoQ29kZUJsb2Nr
KiBjb2RlQmxvY2spIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNsb3RWaXNpdG9yLmFwcGVu
ZFVuYmFycmllcmVkKGNvZGVCbG9jayk7CisgICAgICAgICAgICAgICAgICAgICAgICB2aXNpdG9y
LmFwcGVuZFVuYmFycmllcmVkKGNvZGVCbG9jayk7CiAgICAgICAgICAgICAgICAgICAgIH0pOwog
ICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGlmIChPcHRpb25zOjpsb2dHQygpID09
IEdDTG9nZ2luZzo6VmVyYm9zZSkKLSAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiREZHIFdv
cmtsaXN0czpcbiIsIHNsb3RWaXNpdG9yKTsKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygi
REZHIFdvcmtsaXN0czpcbiIsIHZpc2l0b3IpOwogICAgICAgICAgICAgfSwKICAgICAgICAgICAg
IENvbnN0cmFpbnRWb2xhdGlsaXR5OjpHcmV5ZWRCeU1hcmtpbmcpOwogICAgIH0KQEAgLTI4NTUs
MTQgKzI5MDMsMTUgQEAgdm9pZCBIZWFwOjphZGRDb3JlQ29uc3RyYWludHMoKQogICAgIAogICAg
IG1fY29uc3RyYWludFNldC0+YWRkKAogICAgICAgICAiQ2IiLCAiQ29kZUJsb2NrcyIsCi0gICAg
ICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yKSB7Ci0gICAgICAgICAgICBTZXRS
b290TWFya1JlYXNvblNjb3BlIHJvb3RTY29wZShzbG90VmlzaXRvciwgU2xvdFZpc2l0b3I6OlJv
b3RNYXJrUmVhc29uOjpDb2RlQmxvY2tzKTsKLSAgICAgICAgICAgIGl0ZXJhdGVFeGVjdXRpbmdB
bmRDb21waWxpbmdDb2RlQmxvY2tzV2l0aG91dEhvbGRpbmdMb2NrcygKKyAgICAgICAgW3RoaXNd
IChBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKSB7CisgICAgICAgICAgICBTZXRSb290TWFy
a1JlYXNvblNjb3BlIHJvb3RTY29wZSh2aXNpdG9yLCBBYnN0cmFjdFNsb3RWaXNpdG9yOjpSb290
TWFya1JlYXNvbjo6Q29kZUJsb2Nrcyk7CisgICAgICAgICAgICBpdGVyYXRlRXhlY3V0aW5nQW5k
Q29tcGlsaW5nQ29kZUJsb2Nrc1dpdGhvdXRIb2xkaW5nTG9ja3ModmlzaXRvciwKICAgICAgICAg
ICAgICAgICBbJl0gKENvZGVCbG9jayogY29kZUJsb2NrKSB7CiAgICAgICAgICAgICAgICAgICAg
IC8vIFZpc2l0IHRoZSBDb2RlQmxvY2sgYXMgYSBjb25zdHJhaW50IG9ubHkgaWYgaXQncyBibGFj
ay4KLSAgICAgICAgICAgICAgICAgICAgaWYgKGlzTWFya2VkKGNvZGVCbG9jaykKKyAgICAgICAg
ICAgICAgICAgICAgLy8gbWxhbSBGSVhNRQorICAgICAgICAgICAgICAgICAgICBpZiAodmlzaXRv
ci5pc01hcmtlZChjb2RlQmxvY2spCiAgICAgICAgICAgICAgICAgICAgICAgICAmJiBjb2RlQmxv
Y2stPmNlbGxTdGF0ZSgpID09IENlbGxTdGF0ZTo6UG9zc2libHlCbGFjaykKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHNsb3RWaXNpdG9yLnZpc2l0QXNDb25zdHJhaW50KGNvZGVCbG9jayk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICB2aXNpdG9yLnZpc2l0QXNDb25zdHJhaW50KGNvZGVCbG9j
ayk7CiAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgIH0sCiAgICAgICAgIENvbnN0cmFpbnRW
b2xhdGlsaXR5OjpTZWxkb21HcmV5ZWQpOwpAQCAtMzAyMyw0ICszMDcyLDM2IEBAIHZvaWQgSGVh
cDo6cnVuVGFza0luUGFyYWxsZWwoUmVmUHRyPFNoYXIKICAgICB9CiB9CiAKKy8vIG1sYW0KK3Zv
aWQgSGVhcDo6dmVyaWZ5R0MoKQoreworICAgIGJvb2wgdmVyYm9zZSA9IGdldGVudigibWxhbVZl
cmJvc2UiKTsKKworICAgIFJFTEVBU0VfQVNTRVJUKG1fdmVyaWZpZXJTbG90VmlzaXRvcik7Cisg
ICAgUkVMRUFTRV9BU1NFUlQoIW1faXNWZXJpZnlpbmdHQyk7CisgICAgbV9pc1ZlcmlmeWluZ0dD
ID0gdHJ1ZTsKKworICAgIGlmICh2ZXJib3NlKSBkYXRhTG9nTG4oIiAgICBtbGFtIEhlYXA6OnZl
cmlmeUdDKCkgU1RFUCAxIik7CisgICAgVmVyaWZpZXJTbG90VmlzaXRvciYgdmlzaXRvciA9ICpt
X3ZlcmlmaWVyU2xvdFZpc2l0b3I7CisgICAgZG8geworICAgICAgICBpZiAodmVyYm9zZSkgZGF0
YUxvZ0xuKCIgICAgbWxhbSBIZWFwOjp2ZXJpZnlHQygpIFNURVAgMjogdmlzaXRvci5kcmFpbigp
Iik7CisgICAgICAgIHZpc2l0b3IuZHJhaW4oKTsKKyAgICAgICAgaWYgKHZlcmJvc2UpIGRhdGFM
b2dMbigiICAgIG1sYW0gSGVhcDo6dmVyaWZ5R0MoKSBTVEVQIDM6IG1fY29uc3RyYWludFNldC0+
ZXhlY3V0ZUFsbFN5bmNocm9ub3VzbHkoKSIpOworICAgICAgICBtX2NvbnN0cmFpbnRTZXQtPmV4
ZWN1dGVBbGxTeW5jaHJvbm91c2x5KHZpc2l0b3IpOworICAgICAgICBpZiAodmVyYm9zZSkgZGF0
YUxvZ0xuKCIgICAgbWxhbSBIZWFwOjp2ZXJpZnlHQygpIFNURVAgNDogdmlzaXRvci5leGVjdXRl
Q29uc3RyYWludFRhc2tzKCkiKTsKKyAgICAgICAgdmlzaXRvci5leGVjdXRlQ29uc3RyYWludFRh
c2tzKCk7CisgICAgfSB3aGlsZSAoIXZpc2l0b3IuaXNFbXB0eSgpKTsKKworICAgIG1faXNWZXJp
ZnlpbmdHQyA9IGZhbHNlOworICAgIGlmICh2ZXJib3NlKSBkYXRhTG9nTG4oIiAgICBtbGFtIEhl
YXA6OnZlcmlmeUdDKCkgU1RFUCA1OiBFTkQiKTsKKworICAgIHZpc2l0b3IuZm9yRWFjaExpdmVD
ZWxsKFsmXSAoSGVhcENlbGwqIGNlbGwpIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQodGhpcy0+
aXNNYXJrZWQoY2VsbCkpOworICAgIH0pOworCisgICAgaWYgKHZlcmJvc2UpIGRhdGFMb2dMbigi
ICAgIG1sYW0gSGVhcDo6dmVyaWZ5R0MoKSBTVEVQIDY6IEVORCIpOworICAgIG1fdmVyaWZpZXJT
bG90VmlzaXRvciA9IG51bGxwdHI7Cit9CisvLyBtbGFtICovCisKIH0gLy8gbmFtZXNwYWNlIEpT
QwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkocmV2aXNpb24gMjcyMjk3KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCSh3b3JraW5nIGNvcHkpCkBAIC04Niw2
ICs4Niw3IEBAIGNsYXNzIFNwYWNlVGltZU11dGF0b3JTY2hlZHVsZXI7CiBjbGFzcyBTdG9wSWZO
ZWNlc3NhcnlUaW1lcjsKIGNsYXNzIFN3ZWVwaW5nU2NvcGU7CiBjbGFzcyBWTTsKK2NsYXNzIFZl
cmlmaWVyU2xvdFZpc2l0b3I7CiBjbGFzcyBXZWFrR0NNYXBCYXNlOwogc3RydWN0IEN1cnJlbnRU
aHJlYWRTdGF0ZTsKIApAQCAtMTg0LDcgKzE4NSw5IEBAIHB1YmxpYzoKICAgICAKICAgICBib29s
IGlzU2h1dHRpbmdEb3duKCkgY29uc3QgeyByZXR1cm4gbV9pc1NodXR0aW5nRG93bjsgfQogCi0g
ICAgSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBpc0FuYWx5emluZ0hlYXAoKSBjb25zdDsKKy8vICAg
IEpTX0VYUE9SVF9QUklWQVRFIGJvb2wgaXNBbmFseXppbmdIZWFwKCkgY29uc3Q7CisvLyAgICBi
b29sIGlzQW5hbHl6aW5nSGVhcCgpIGNvbnN0IHsgcmV0dXJuIG1faGVhcEFuYWx5emVyOyB9Cisv
LyAgICBIZWFwQW5hbHl6ZXIqIGhlYXBBbmFseXplcigpIGNvbnN0IHsgcmV0dXJuIG1faGVhcEFu
YWx5emVyOyB9CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHN3ZWVwU3luY2hyb25vdXNs
eSgpOwogCkBAIC0zODUsOCArMzg4LDggQEAgcHVibGljOgogICAgIAogICAgIEpTX0VYUE9SVF9Q
UklWQVRFIHZvaWQgYWRkTWFya2luZ0NvbnN0cmFpbnQoc3RkOjp1bmlxdWVfcHRyPE1hcmtpbmdD
b25zdHJhaW50Pik7CiAgICAgCi0gICAgc2l6ZV90IG51bU9wYXF1ZVJvb3RzKCkgY29uc3QgeyBy
ZXR1cm4gbV9vcGFxdWVSb290cy5zaXplKCk7IH0KLQorLy8gICAgc2l6ZV90IG51bU9wYXF1ZVJv
b3RzKCkgY29uc3QgeyByZXR1cm4gbV9vcGFxdWVSb290cy5zaXplKCk7IH0gLy8gbWxhbSBVTlVT
RUQKKy8vCiAgICAgSGVhcFZlcmlmaWVyKiB2ZXJpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1fdmVy
aWZpZXIuZ2V0KCk7IH0KICAgICAKICAgICB2b2lkIGFkZEhlYXBGaW5hbGl6ZXJDYWxsYmFjayhj
b25zdCBIZWFwRmluYWxpemVyQ2FsbGJhY2smKTsKQEAgLTU3NiwxMCArNTc5LDEwIEBAIHByaXZh
dGU6CiAgICAgYm9vbCBvdmVyQ3JpdGljYWxNZW1vcnlUaHJlc2hvbGQoTWVtb3J5VGhyZXNob2xk
Q2FsbFR5cGUgbWVtb3J5VGhyZXNob2xkQ2FsbFR5cGUgPSBNZW1vcnlUaHJlc2hvbGRDYWxsVHlw
ZTo6Q2FjaGVkKTsKICAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgotICAgIHZvaWQg
aXRlcmF0ZUV4ZWN1dGluZ0FuZENvbXBpbGluZ0NvZGVCbG9ja3MoY29uc3QgRnVuYyYpOworICAg
IHZvaWQgaXRlcmF0ZUV4ZWN1dGluZ0FuZENvbXBpbGluZ0NvZGVCbG9ja3MoQWJzdHJhY3RTbG90
VmlzaXRvciYsIGNvbnN0IEZ1bmMmKTsKICAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5j
PgotICAgIHZvaWQgaXRlcmF0ZUV4ZWN1dGluZ0FuZENvbXBpbGluZ0NvZGVCbG9ja3NXaXRob3V0
SG9sZGluZ0xvY2tzKGNvbnN0IEZ1bmMmKTsKKyAgICB2b2lkIGl0ZXJhdGVFeGVjdXRpbmdBbmRD
b21waWxpbmdDb2RlQmxvY2tzV2l0aG91dEhvbGRpbmdMb2NrcyhBYnN0cmFjdFNsb3RWaXNpdG9y
JiwgY29uc3QgRnVuYyYpOwogICAgIAogICAgIHZvaWQgYXNzZXJ0TWFya1N0YWNrc0VtcHR5KCk7
CiAKQEAgLTU5MCw2ICs1OTMsOCBAQCBwcml2YXRlOgogICAgIHN0YXRpYyBib29sIHVzZUdlbmVy
YXRpb25hbEdDKCk7CiAgICAgc3RhdGljIGJvb2wgc2hvdWxkU3dlZXBTeW5jaHJvbm91c2x5KCk7
CiAgICAgCisgICAgdm9pZCB2ZXJpZnlHQygpOworCiAgICAgY29uc3QgSGVhcFR5cGUgbV9oZWFw
VHlwZTsKICAgICBNdXRhdG9yU3RhdGUgbV9tdXRhdG9yU3RhdGUgeyBNdXRhdG9yU3RhdGU6OlJ1
bm5pbmcgfTsKICAgICBjb25zdCBzaXplX3QgbV9yYW1TaXplOwpAQCAtNjM2LDYgKzY0MSw3IEBA
IHByaXZhdGU6CiAgICAgc3RkOjp1bmlxdWVfcHRyPE1hcmtTdGFja0FycmF5PiBtX211dGF0b3JN
YXJrU3RhY2s7CiAgICAgc3RkOjp1bmlxdWVfcHRyPE1hcmtTdGFja0FycmF5PiBtX3JhY2VNYXJr
U3RhY2s7CiAgICAgc3RkOjp1bmlxdWVfcHRyPE1hcmtpbmdDb25zdHJhaW50U2V0PiBtX2NvbnN0
cmFpbnRTZXQ7CisgICAgc3RkOjp1bmlxdWVfcHRyPFZlcmlmaWVyU2xvdFZpc2l0b3I+IG1fdmVy
aWZpZXJTbG90VmlzaXRvcjsKIAogICAgIC8vIFdlIHBvb2wgdGhlIHNsb3QgdmlzaXRvcnMgdXNl
ZCBieSBwYXJhbGxlbCBtYXJraW5nIHRocmVhZHMuIEl0J3MgdXNlZnVsIHRvIGJlIGFibGUgdG8K
ICAgICAvLyBlbnVtZXJhdGUgb3ZlciB0aGVtLCBhbmQgaXQncyB1c2VmdWwgdG8gaGF2ZSB0aGVt
IGNhY2hlIHNvbWUgc21hbGwgYW1vdW50IG9mIG1lbW9yeSBmcm9tCkBAIC02NTQsNiArNjYwLDcg
QEAgcHJpdmF0ZToKICAgICBib29sIG1faXNTYWZlVG9Db2xsZWN0IHsgZmFsc2UgfTsKICAgICBi
b29sIG1faXNTaHV0dGluZ0Rvd24geyBmYWxzZSB9OwogICAgIGJvb2wgbV9tdXRhdG9yU2hvdWxk
QmVGZW5jZWQgeyBPcHRpb25zOjpmb3JjZUZlbmNlZEJhcnJpZXIoKSB9OworICAgIGJvb2wgbV9p
c1ZlcmlmeWluZ0dDIHsgZmFsc2UgfTsKIAogICAgIHVuc2lnbmVkIG1fYmFycmllclRocmVzaG9s
ZCB7IE9wdGlvbnM6OmZvcmNlRmVuY2VkQmFycmllcigpID8gdGF1dG9sb2dpY2FsVGhyZXNob2xk
IDogYmxhY2tUaHJlc2hvbGQgfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
SGVhcElubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9I
ZWFwSW5saW5lcy5oCShyZXZpc2lvbiAyNzIyOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9IZWFwSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC02OSw2ICs2OSw4IEBAIGlubGlu
ZSBib29sIEhlYXA6OndvcmxkSXNTdG9wcGVkKCkgY29uc3QKIAogQUxXQVlTX0lOTElORSBib29s
IEhlYXA6OmlzTWFya2VkKGNvbnN0IHZvaWQqIHJhd0NlbGwpCiB7CisgICAgUkVMRUFTRV9BU1NF
UlQoIW1faXNWZXJpZnlpbmdHQyk7IC8vIG1sYW0gVEVTVCBvbmx5CisKICAgICBIZWFwQ2VsbCog
Y2VsbCA9IGJpdHdpc2VfY2FzdDxIZWFwQ2VsbCo+KHJhd0NlbGwpOwogICAgIGlmIChjZWxsLT5p
c1ByZWNpc2VBbGxvY2F0aW9uKCkpCiAgICAgICAgIHJldHVybiBjZWxsLT5wcmVjaXNlQWxsb2Nh
dGlvbigpLmlzTWFya2VkKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFw
UHJvZmlsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hl
YXBQcm9maWxlci5jcHAJKHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0hlYXBQcm9maWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYwLDYgKzYwLDcgQEAg
dm9pZCBIZWFwUHJvZmlsZXI6OnNldEFjdGl2ZUhlYXBBbmFseXplcgogewogICAgIEFTU0VSVCgh
IW1fYWN0aXZlQW5hbHl6ZXIgIT0gISFhbmFseXplcik7CiAgICAgbV9hY3RpdmVBbmFseXplciA9
IGFuYWx5emVyOworICAgIG1fdm0uc2V0QWN0aXZlSGVhcEFuYWx5emVyKGFuYWx5emVyKTsKIH0K
IAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9J
c29DZWxsU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNv
Q2VsbFNldC5oCShyZXZpc2lvbiAyNzIyOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9Jc29DZWxsU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDcgQEAKIAogbmFtZXNw
YWNlIEpTQyB7CiAKK2NsYXNzIEFic3RyYWN0U2xvdFZpc2l0b3I7CiBjbGFzcyBIZWFwQ2VsbDsK
IGNsYXNzIElzb1N1YnNwYWNlOwogCkBAIC01OSw3ICs2MCw3IEBAIHB1YmxpYzoKICAgICB2b2lk
IGZvckVhY2hNYXJrZWRDZWxsKGNvbnN0IEZ1bmMmKTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1l
IEZ1bmM+Ci0gICAgUmVmPFNoYXJlZFRhc2s8dm9pZChTbG90VmlzaXRvciYpPj4gZm9yRWFjaE1h
cmtlZENlbGxJblBhcmFsbGVsKGNvbnN0IEZ1bmMmKTsKKyAgICBSZWY8U2hhcmVkVGFzazx2b2lk
KEFic3RyYWN0U2xvdFZpc2l0b3ImKT4+IGZvckVhY2hNYXJrZWRDZWxsSW5QYXJhbGxlbChjb25z
dCBGdW5jJik7CiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KICAgICB2b2lkIGZv
ckVhY2hMaXZlQ2VsbChjb25zdCBGdW5jJik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9Jc29DZWxsU2V0SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0lzb0NlbGxTZXRJbmxpbmVzLmgJKHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0lzb0NlbGxTZXRJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTkyLDkgKzkyLDkgQEAgdm9pZCBJc29DZWxsU2V0Ojpmb3JFYWNoTWFya2VkQ2VsbChjb25z
dAogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgotUmVmPFNoYXJlZFRhc2s8dm9pZChTbG90
VmlzaXRvciYpPj4gSXNvQ2VsbFNldDo6Zm9yRWFjaE1hcmtlZENlbGxJblBhcmFsbGVsKGNvbnN0
IEZ1bmMmIGZ1bmMpCitSZWY8U2hhcmVkVGFzazx2b2lkKEFic3RyYWN0U2xvdFZpc2l0b3ImKT4+
IElzb0NlbGxTZXQ6OmZvckVhY2hNYXJrZWRDZWxsSW5QYXJhbGxlbChjb25zdCBGdW5jJiBmdW5j
KQogewotICAgIGNsYXNzIFRhc2sgZmluYWwgOiBwdWJsaWMgU2hhcmVkVGFzazx2b2lkKFNsb3RW
aXNpdG9yJik+IHsKKyAgICBjbGFzcyBUYXNrIGZpbmFsIDogcHVibGljIFNoYXJlZFRhc2s8dm9p
ZChBYnN0cmFjdFNsb3RWaXNpdG9yJik+IHsKICAgICBwdWJsaWM6CiAgICAgICAgIFRhc2soSXNv
Q2VsbFNldCYgc2V0LCBjb25zdCBGdW5jJiBmdW5jKQogICAgICAgICAgICAgOiBtX3NldChzZXQp
CkBAIC0xMDMsNyArMTAzLDcgQEAgUmVmPFNoYXJlZFRhc2s8dm9pZChTbG90VmlzaXRvciYpPj4g
SXNvQwogICAgICAgICB7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIHZvaWQgcnVuKFNs
b3RWaXNpdG9yJiB2aXNpdG9yKSBmaW5hbAorICAgICAgICB2b2lkIHJ1bihBYnN0cmFjdFNsb3RW
aXNpdG9yJiB2aXNpdG9yKSBmaW5hbAogICAgICAgICB7CiAgICAgICAgICAgICB3aGlsZSAoTWFy
a2VkQmxvY2s6OkhhbmRsZSogaGFuZGxlID0gbV9ibG9ja1NvdXJjZS0+cnVuKCkpIHsKICAgICAg
ICAgICAgICAgICB1bnNpZ25lZCBibG9ja0luZGV4ID0gaGFuZGxlLT5pbmRleCgpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSklUU3R1YlJvdXRpbmVTZXQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0pJVFN0dWJSb3V0aW5lU2V0LmNwcAko
cmV2aXNpb24gMjcyMjk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSklUU3R1YlJv
dXRpbmVTZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjgsMTcgKzEyOCwyMiBAQCB2b2lkIEpJ
VFN0dWJSb3V0aW5lU2V0OjpkZWxldGVVbm1hcmtlZEplCiAgICAgbV9yb3V0aW5lcy5zaHJpbmso
ZHN0SW5kZXgpOwogfQogCi12b2lkIEpJVFN0dWJSb3V0aW5lU2V0Ojp0cmFjZU1hcmtlZFN0dWJS
b3V0aW5lcyhTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRv
cj4KKy8vdm9pZCBKSVRTdHViUm91dGluZVNldDo6dHJhY2VNYXJrZWRTdHViUm91dGluZXMoVmlz
aXRvciYgdmlzaXRvcikKK3ZvaWQgSklUU3R1YlJvdXRpbmVTZXQ6OnRyYWNlTWFya2VkU3R1YlJv
dXRpbmVzMShBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGZvciAoYXV0byYg
ZW50cnkgOiBtX3JvdXRpbmVzKSB7CiAgICAgICAgIEdDQXdhcmVKSVRTdHViUm91dGluZSogcm91
dGluZSA9IGVudHJ5LnJvdXRpbmU7CiAgICAgICAgIGlmICghcm91dGluZS0+bV9tYXlCZUV4ZWN1
dGluZykKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAKLSAgICAgICAgcm91dGluZS0+
bWFya1JlcXVpcmVkT2JqZWN0cyh2aXNpdG9yKTsKKyAgICAgICAgcm91dGluZS0+bWFya1JlcXVp
cmVkT2JqZWN0czEodmlzaXRvcik7CiAgICAgfQogfQogCisvL3RlbXBsYXRlIHZvaWQgSklUU3R1
YlJvdXRpbmVTZXQ6OnRyYWNlTWFya2VkU3R1YlJvdXRpbmVzKFNsb3RWaXNpdG9yJik7CisvL3Rl
bXBsYXRlIHZvaWQgSklUU3R1YlJvdXRpbmVTZXQ6OnRyYWNlTWFya2VkU3R1YlJvdXRpbmVzKFZl
cmlmaWVyU2xvdFZpc2l0b3ImKTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBF
TkFCTEUoSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSklUU3R1YlJvdXRp
bmVTZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9KSVRTdHVi
Um91dGluZVNldC5oCShyZXZpc2lvbiAyNzIyOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9KSVRTdHViUm91dGluZVNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw4ICszNSw5IEBA
IHVzaW5nIFdURjo6UmFuZ2U7CiAKIG5hbWVzcGFjZSBKU0MgewogCitjbGFzcyBBYnN0cmFjdFNs
b3RWaXNpdG9yOwogY2xhc3MgR0NBd2FyZUpJVFN0dWJSb3V0aW5lOwotY2xhc3MgU2xvdFZpc2l0
b3I7CisvL2NsYXNzIFNsb3RWaXNpdG9yOwogCiAjaWYgRU5BQkxFKEpJVCkKIApAQCAtNjMsOCAr
NjQsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBwcmVwYXJlRm9yQ29uc2VydmF0aXZlU2NhbigpOwog
ICAgIAogICAgIHZvaWQgZGVsZXRlVW5tYXJrZWRKZXR0aXNvbmVkU3R1YlJvdXRpbmVzKCk7Ci0g
ICAgCi0gICAgdm9pZCB0cmFjZU1hcmtlZFN0dWJSb3V0aW5lcyhTbG90VmlzaXRvciYpOworCisv
LyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIHRyYWNlTWFya2VkU3R1YlJvdXRp
bmVzKFZpc2l0b3ImKTsKKyAgICB2b2lkIHRyYWNlTWFya2VkU3R1YlJvdXRpbmVzMShBYnN0cmFj
dFNsb3RWaXNpdG9yJik7CiAgICAgCiBwcml2YXRlOgogICAgIHZvaWQgbWFya1Nsb3codWludHB0
cl90IGFkZHJlc3MpOwpAQCAtOTIsNyArOTQsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBtYXJrKHZv
aWQqKSB7IH0KICAgICB2b2lkIHByZXBhcmVGb3JDb25zZXJ2YXRpdmVTY2FuKCkgeyB9CiAgICAg
dm9pZCBkZWxldGVVbm1hcmtlZEpldHRpc29uZWRTdHViUm91dGluZXMoKSB7IH0KLSAgICB2b2lk
IHRyYWNlTWFya2VkU3R1YlJvdXRpbmVzKFNsb3RWaXNpdG9yJikgeyB9CisvLyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIHRyYWNlTWFya2VkU3R1YlJvdXRpbmVzKFZpc2l0b3Im
KSB7IH0KKyAgICB2b2lkIHRyYWNlTWFya2VkU3R1YlJvdXRpbmVzMShBYnN0cmFjdFNsb3RWaXNp
dG9yJikgeyB9CiB9OwogCiAjZW5kaWYgLy8gIUVOQUJMRShKSVQpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9NYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFp
bnQuY3BwCShyZXZpc2lvbiAyNzIyOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9N
YXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1LDEyICsy
NSwxMyBAQAogCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiTWFya1N0YWNrTWVyZ2lu
Z0NvbnN0cmFpbnQuaCIKLQogI2luY2x1ZGUgIkdDU2VnbWVudGVkQXJyYXlJbmxpbmVzLmgiCiAj
aW5jbHVkZSAiSlNDSW5saW5lcy5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIAorc3RhdGljIGNvbnN0
ZXhwciBib29sIG1sYW1WZXJib3NlID0gZmFsc2U7CisKIE1hcmtTdGFja01lcmdpbmdDb25zdHJh
aW50OjpNYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludChIZWFwJiBoZWFwKQogICAgIDogTWFya2lu
Z0NvbnN0cmFpbnQoIk1zbSIsICJNYXJrIFN0YWNrIE1lcmdpbmciLCBDb25zdHJhaW50Vm9sYXRp
bGl0eTo6R3JleWVkQnlFeGVjdXRpb24pCiAgICAgLCBtX2hlYXAoaGVhcCkKQEAgLTQxLDEyICs0
MiwxMiBAQCBNYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludDo6fk1hcmtTdGFja01lCiB7CiB9CiAK
LWRvdWJsZSBNYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludDo6cXVpY2tXb3JrRXN0aW1hdGUoU2xv
dFZpc2l0b3ImKQorZG91YmxlIE1hcmtTdGFja01lcmdpbmdDb25zdHJhaW50OjpxdWlja1dvcmtF
c3RpbWF0ZShBYnN0cmFjdFNsb3RWaXNpdG9yJikKIHsKICAgICByZXR1cm4gbV9oZWFwLm1fbXV0
YXRvck1hcmtTdGFjay0+c2l6ZSgpICsgbV9oZWFwLm1fcmFjZU1hcmtTdGFjay0+c2l6ZSgpOwog
fQogCi12b2lkIE1hcmtTdGFja01lcmdpbmdDb25zdHJhaW50OjpwcmVwYXJlVG9FeGVjdXRlSW1w
bChjb25zdCBBYnN0cmFjdExvY2tlciYsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBNYXJr
U3RhY2tNZXJnaW5nQ29uc3RyYWludDo6cHJlcGFyZVRvRXhlY3V0ZUltcGwoY29uc3QgQWJzdHJh
Y3RMb2NrZXImLCBBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIC8vIExvZ2dp
bmcgdGhlIHdvcmsgaGVyZSBlbnN1cmVzIHRoYXQgdGhlIGNvbnN0cmFpbnQgc29sdmVyIGtub3dz
IHRoYXQgaXQgZG9lc24ndCBuZWVkIHRvIHByb2R1Y2UKICAgICAvLyBhbnltb3JlIHdvcmsuCkBA
IC01Niw4ICs1NywxOCBAQCB2b2lkIE1hcmtTdGFja01lcmdpbmdDb25zdHJhaW50OjpwcmVwYXJl
CiAgICAgZGF0YUxvZ0lmKE9wdGlvbnM6OmxvZ0dDKCksICIoIiwgc2l6ZSwgIikiKTsKIH0KIAot
dm9pZCBNYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludDo6ZXhlY3V0ZUltcGwoU2xvdFZpc2l0b3Im
IHZpc2l0b3IpCit2b2lkIE1hcmtTdGFja01lcmdpbmdDb25zdHJhaW50OjpleGVjdXRlSW1wbChB
YnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogeworICAgIC8vIFdlIHdhbnQgdG8gc2tpcCB0
aGlzIGNvbnN0cmFpbnQgZm9yIHRoZSBHQyB2ZXJpZmllciBiZWNhdXNlOgorICAgIC8vIDEuIFRo
ZXJlIHNob3VsZCBiZSBubyBtdXRhdG9yIG1hcmtpbmcgYWN0aW9uIGJldHdlZW4gdGhlIEVuZCBw
aGFzZSBhbmQgdmVyaWZ5R0MoKS4KKyAgICAvLyAgICBIZW5jZSwgd2UgY2FuIGlnbm9yZSB0aHNl
IHN0YWNrcy4KKyAgICAvLyAyLiBUaGUgRW5kIHBoYXNlIGV4cGxpY3RseSBjYWxscyBpdGVyYXRl
RXhlY3V0aW5nQW5kQ29tcGlsaW5nQ29kZUJsb2NrcygpCisgICAgLy8gICAgdG8gYWRkIGV4ZWN1
dGluZyBDb2RlQmxvY2tzIHRvIG1faGVhcC5tX211dGF0b3JNYXJrU3RhY2suIFdlIHdhbnQgdG8K
KyAgICAvLyAgICBsZWF2ZSB0aG9zZSB1bnBlcnR1cmJlZC4KKyAgICBpZiAobV9oZWFwLm1faXNW
ZXJpZnlpbmdHQykKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG1sYW1WZXJib3NlKSBkYXRh
TG9nTG4oIiAgICBtbGFtIE1hcmtTdGFja01lcmdpbmdDb25zdHJhaW50OjpleGVjdXRlSW1wbCgp
IG1faGVhcC5tX211dGF0b3JNYXJrU3RhY2stPnRyYW5zZmVyVG8odmlzaXRvci5tdXRhdG9yTWFy
a1N0YWNrKCkpOyIpOwogICAgIG1faGVhcC5tX211dGF0b3JNYXJrU3RhY2stPnRyYW5zZmVyVG8o
dmlzaXRvci5tdXRhdG9yTWFya1N0YWNrKCkpOwogICAgIG1faGVhcC5tX3JhY2VNYXJrU3RhY2st
PnRyYW5zZmVyVG8odmlzaXRvci5tdXRhdG9yTWFya1N0YWNrKCkpOwogfQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3RhY2tNZXJnaW5nQ29uc3Ry
YWludC5oCShyZXZpc2lvbiAyNzIyOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9N
YXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCwxOCArMzAs
MTggQEAKIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBIZWFwOwotY2xhc3MgU2xvdFZpc2l0b3I7
CitjbGFzcyBBYnN0cmFjdFNsb3RWaXNpdG9yOwogCiBjbGFzcyBNYXJrU3RhY2tNZXJnaW5nQ29u
c3RyYWludCBmaW5hbCA6IHB1YmxpYyBNYXJraW5nQ29uc3RyYWludCB7CiBwdWJsaWM6CiAgICAg
TWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQoSGVhcCYpOwogICAgIH5NYXJrU3RhY2tNZXJnaW5n
Q29uc3RyYWludCgpIGZpbmFsOwogICAgIAotICAgIGRvdWJsZSBxdWlja1dvcmtFc3RpbWF0ZShT
bG90VmlzaXRvciYpIGZpbmFsOworICAgIGRvdWJsZSBxdWlja1dvcmtFc3RpbWF0ZShBYnN0cmFj
dFNsb3RWaXNpdG9yJikgZmluYWw7CiAgICAgCiBwcml2YXRlOgotICAgIHZvaWQgcHJlcGFyZVRv
RXhlY3V0ZUltcGwoY29uc3QgQWJzdHJhY3RMb2NrZXImIGNvbnN0cmFpbnRTb2x2aW5nTG9ja2Vy
LCBTbG90VmlzaXRvciYpIGZpbmFsOwotICAgIHZvaWQgZXhlY3V0ZUltcGwoU2xvdFZpc2l0b3Im
KSBmaW5hbDsKKyAgICB2b2lkIHByZXBhcmVUb0V4ZWN1dGVJbXBsKGNvbnN0IEFic3RyYWN0TG9j
a2VyJiBjb25zdHJhaW50U29sdmluZ0xvY2tlciwgQWJzdHJhY3RTbG90VmlzaXRvciYpIGZpbmFs
OworICAgIHZvaWQgZXhlY3V0ZUltcGwoQWJzdHJhY3RTbG90VmlzaXRvciYpIGZpbmFsOwogICAg
IAogICAgIEhlYXAmIG1faGVhcDsKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9NYXJrZWRCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L01hcmtlZEJsb2NrLmgJKHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL01hcmtlZEJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSw3IEBACiAvKgog
ICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAwIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcp
CiAgKiAgQ29weXJpZ2h0IChDKSAyMDAxIFBldGVyIEtlbGx5IChwbWtAcG9zdC5jb20pCi0gKiAg
Q29weXJpZ2h0IChDKSAyMDAzLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogIENvcHlyaWdodCAoQykgMjAwMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKQEAgLTE1MSw3ICsxNTEsOCBAQCBwdWJsaWM6CiAgICAg
ICAgIAogICAgICAgICB2b2lkIHNocmluaygpOwogICAgICAgICAgICAgCi0gICAgICAgIHZvaWQg
dmlzaXRXZWFrU2V0KFNsb3RWaXNpdG9yJik7CisvLyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
VmlzaXRvcj4gdm9pZCB2aXNpdFdlYWtTZXQoVmlzaXRvciYpOworICAgICAgICB2b2lkIHZpc2l0
V2Vha1NldDEoQWJzdHJhY3RTbG90VmlzaXRvciYpOwogICAgICAgICB2b2lkIHJlYXBXZWFrU2V0
KCk7CiAgICAgICAgICAgICAKICAgICAgICAgLy8gV2hpbGUgYWxsb2NhdGluZyBmcm9tIGEgZnJl
ZSBsaXN0LCBNYXJrZWRCbG9jayB0ZW1wb3JhcmlseSBoYXMgYm9ndXMKQEAgLTIwMyw2ICsyMDQs
NyBAQCBwdWJsaWM6CiAgICAgICAgIAogICAgICAgICB2b2lkKiBzdGFydCgpIGNvbnN0IHsgcmV0
dXJuICZtX2Jsb2NrLT5hdG9tcygpWzBdOyB9CiAgICAgICAgIHZvaWQqIGVuZCgpIGNvbnN0IHsg
cmV0dXJuICZtX2Jsb2NrLT5hdG9tcygpW21fZW5kQXRvbV07IH0KKyAgICAgICAgdm9pZCogYXRv
bUF0KHNpemVfdCBpKSBjb25zdCB7IHJldHVybiAmbV9ibG9jay0+YXRvbXMoKVtpXTsgfQogICAg
ICAgICBib29sIGNvbnRhaW5zKHZvaWQqIHApIGNvbnN0IHsgcmV0dXJuIHN0YXJ0KCkgPD0gcCAm
JiBwIDwgZW5kKCk7IH0KIAogICAgICAgICB2b2lkIGR1bXBTdGF0ZShQcmludFN0cmVhbSYpOwpA
QCAtNDk4LDkgKzUwMCwxMSBAQCBpbmxpbmUgdm9pZCBNYXJrZWRCbG9jazo6SGFuZGxlOjpzaHJp
bmsoCiAgICAgbV93ZWFrU2V0LnNocmluaygpOwogfQogCi1pbmxpbmUgdm9pZCBNYXJrZWRCbG9j
azo6SGFuZGxlOjp2aXNpdFdlYWtTZXQoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3RlbXBsYXRl
PHR5cGVuYW1lIFZpc2l0b3I+CisvL2lubGluZSB2b2lkIE1hcmtlZEJsb2NrOjpIYW5kbGU6OnZp
c2l0V2Vha1NldChWaXNpdG9yJiB2aXNpdG9yKQoraW5saW5lIHZvaWQgTWFya2VkQmxvY2s6Okhh
bmRsZTo6dmlzaXRXZWFrU2V0MShBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewotICAg
IHJldHVybiBtX3dlYWtTZXQudmlzaXQodmlzaXRvcik7CisgICAgcmV0dXJuIG1fd2Vha1NldC52
aXNpdDEodmlzaXRvcik7CiB9CiAKIGlubGluZSB2b2lkIE1hcmtlZEJsb2NrOjpIYW5kbGU6OnJl
YXBXZWFrU2V0KCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZFNwYWNl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRTcGFj
ZS5jcHAJKHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01h
cmtlZFNwYWNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcyLDEwICsyNzIsMTAgQEAgdm9pZCBN
YXJrZWRTcGFjZTo6ZW5hYmxlUHJlY2lzZUFsbG9jYXRpbwogICAgICAgICBtX3ByZWNpc2VBbGxv
Y2F0aW9uU2V0LT5hZGQoYWxsb2NhdGlvbi0+Y2VsbCgpKTsKIH0KIAotdm9pZCBNYXJrZWRTcGFj
ZTo6dmlzaXRXZWFrU2V0cyhTbG90VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgTWFya2VkU3BhY2U6
OnZpc2l0V2Vha1NldHMxKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0
byB2aXNpdCA9IFsmXSAoV2Vha1NldCogd2Vha1NldCkgewotICAgICAgICB3ZWFrU2V0LT52aXNp
dCh2aXNpdG9yKTsKKyAgICAgICAgd2Vha1NldC0+dmlzaXQxKHZpc2l0b3IpOwogICAgIH07CiAg
ICAgCiAgICAgbV9uZXdBY3RpdmVXZWFrU2V0cy5mb3JFYWNoKHZpc2l0KTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZFNwYWNlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkU3BhY2UuaAkocmV2aXNpb24gMjcyMjk3KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkU3BhY2UuaAkod29ya2luZyBjb3B5KQpA
QCAtMzcsNiArMzcsNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAorY2xhc3MgQWJzdHJhY3RTbG90
VmlzaXRvcjsgLy8gbWxhbSBGSVhNRSA/CiBjbGFzcyBDb21wbGV0ZVN1YnNwYWNlOwogY2xhc3Mg
SGVhcDsKIGNsYXNzIEhlYXBDZWxsOwpAQCAtMTA1LDcgKzEwNiw3IEBAIHB1YmxpYzoKICAgICAK
ICAgICB2b2lkIHByZXBhcmVGb3JBbGxvY2F0aW9uKCk7CiAKLSAgICB2b2lkIHZpc2l0V2Vha1Nl
dHMoU2xvdFZpc2l0b3ImKTsKKyAgICB2b2lkIHZpc2l0V2Vha1NldHMxKEFic3RyYWN0U2xvdFZp
c2l0b3ImKTsKICAgICB2b2lkIHJlYXBXZWFrU2V0cygpOwogCiAgICAgTWFya2VkQmxvY2tTZXQm
IGJsb2NrcygpIHsgcmV0dXJuIG1fYmxvY2tzOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9NYXJraW5nQ29uc3RyYWludC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnQuY3BwCShyZXZpc2lvbiAyNzIyOTcpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRl
ICJNYXJraW5nQ29uc3RyYWludC5oIgogCisjaW5jbHVkZSAiQWJzdHJhY3RTbG90VmlzaXRvcklu
bGluZXMuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiVmlzaXRDb3VudGVy
LmgiCiAKQEAgLTUxLDcgKzUyLDcgQEAgdm9pZCBNYXJraW5nQ29uc3RyYWludDo6cmVzZXRTdGF0
cygpCiAgICAgbV9sYXN0VmlzaXRDb3VudCA9IDA7CiB9CiAKLXZvaWQgTWFya2luZ0NvbnN0cmFp
bnQ6OmV4ZWN1dGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIE1hcmtpbmdDb25zdHJhaW50
OjpleGVjdXRlKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgVmlzaXRDb3Vu
dGVyIHZpc2l0Q291bnRlcih2aXNpdG9yKTsKICAgICBleGVjdXRlSW1wbCh2aXNpdG9yKTsKQEAg
LTYwLDE3ICs2MSwyMyBAQCB2b2lkIE1hcmtpbmdDb25zdHJhaW50OjpleGVjdXRlKFNsb3RWaXNp
CiAgICAgICAgIGRhdGFMb2coIigiLCBhYmJyZXZpYXRlZE5hbWUoKSwgIiB2aXNpdGVkICIsIHZp
c2l0Q291bnRlci52aXNpdENvdW50KCksICIgaW4gZXhlY3V0ZSkiKTsKIH0KIAotZG91YmxlIE1h
cmtpbmdDb25zdHJhaW50OjpxdWlja1dvcmtFc3RpbWF0ZShTbG90VmlzaXRvciYpCit2b2lkIE1h
cmtpbmdDb25zdHJhaW50OjpleGVjdXRlU3luY2hyb25vdXNseShBYnN0cmFjdFNsb3RWaXNpdG9y
JiB2aXNpdG9yKQoreworICAgIHByZXBhcmVUb0V4ZWN1dGVJbXBsKE5vTG9ja2luZ05lY2Vzc2Fy
eSwgdmlzaXRvcik7CisgICAgZXhlY3V0ZUltcGwodmlzaXRvcik7Cit9CisKK2RvdWJsZSBNYXJr
aW5nQ29uc3RyYWludDo6cXVpY2tXb3JrRXN0aW1hdGUoQWJzdHJhY3RTbG90VmlzaXRvciYpCiB7
CiAgICAgcmV0dXJuIDA7CiB9CiAKLWRvdWJsZSBNYXJraW5nQ29uc3RyYWludDo6d29ya0VzdGlt
YXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorZG91YmxlIE1hcmtpbmdDb25zdHJhaW50Ojp3b3Jr
RXN0aW1hdGUoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICByZXR1cm4gbGFz
dFZpc2l0Q291bnQoKSArIHF1aWNrV29ya0VzdGltYXRlKHZpc2l0b3IpOwogfQogCi12b2lkIE1h
cmtpbmdDb25zdHJhaW50OjpwcmVwYXJlVG9FeGVjdXRlKGNvbnN0IEFic3RyYWN0TG9ja2VyJiBj
b25zdHJhaW50U29sdmluZ0xvY2tlciwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIE1hcmtp
bmdDb25zdHJhaW50OjpwcmVwYXJlVG9FeGVjdXRlKGNvbnN0IEFic3RyYWN0TG9ja2VyJiBjb25z
dHJhaW50U29sdmluZ0xvY2tlciwgQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAg
ICBkYXRhTG9nSWYoT3B0aW9uczo6bG9nR0MoKSwgYWJicmV2aWF0ZWROYW1lKCkpOwogICAgIFZp
c2l0Q291bnRlciB2aXNpdENvdW50ZXIodmlzaXRvcik7CkBAIC04MCw3ICs4Nyw3IEBAIHZvaWQg
TWFya2luZ0NvbnN0cmFpbnQ6OnByZXBhcmVUb0V4ZWN1dGUKICAgICAgICAgZGF0YUxvZygiKCIs
IGFiYnJldmlhdGVkTmFtZSgpLCAiIHZpc2l0ZWQgIiwgdmlzaXRDb3VudGVyLnZpc2l0Q291bnQo
KSwgIiBpbiBwcmVwYXJlVG9FeGVjdXRlKSIpOwogfQogCi12b2lkIE1hcmtpbmdDb25zdHJhaW50
Ojpkb1BhcmFsbGVsV29yayhTbG90VmlzaXRvciYgdmlzaXRvciwgU2hhcmVkVGFzazx2b2lkKFNs
b3RWaXNpdG9yJik+JiB0YXNrKQordm9pZCBNYXJraW5nQ29uc3RyYWludDo6ZG9QYXJhbGxlbFdv
cmsoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvciwgU2hhcmVkVGFzazx2b2lkKEFic3RyYWN0
U2xvdFZpc2l0b3ImKT4mIHRhc2spCiB7CiAgICAgVmlzaXRDb3VudGVyIHZpc2l0Q291bnRlcih2
aXNpdG9yKTsKICAgICB0YXNrLnJ1bih2aXNpdG9yKTsKQEAgLTkyLDcgKzk5LDcgQEAgdm9pZCBN
YXJraW5nQ29uc3RyYWludDo6ZG9QYXJhbGxlbFdvcmsoUwogICAgIH0KIH0KIAotdm9pZCBNYXJr
aW5nQ29uc3RyYWludDo6cHJlcGFyZVRvRXhlY3V0ZUltcGwoY29uc3QgQWJzdHJhY3RMb2NrZXIm
LCBTbG90VmlzaXRvciYpCit2b2lkIE1hcmtpbmdDb25zdHJhaW50OjpwcmVwYXJlVG9FeGVjdXRl
SW1wbChjb25zdCBBYnN0cmFjdExvY2tlciYsIEFic3RyYWN0U2xvdFZpc2l0b3ImKQogewogfQog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50
LmgJKHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtp
bmdDb25zdHJhaW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDcgQEAKIG5hbWVzcGFj
ZSBKU0MgewogCiBjbGFzcyBNYXJraW5nQ29uc3RyYWludFNldDsKLWNsYXNzIFNsb3RWaXNpdG9y
OworY2xhc3MgQWJzdHJhY3RTbG90VmlzaXRvcjsKIAogY2xhc3MgTWFya2luZ0NvbnN0cmFpbnQg
ewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKE1hcmtpbmdDb25zdHJhaW50KTsKQEAgLTYwLDE1
ICs2MCwxNiBAQCBwdWJsaWM6CiAgICAgCiAgICAgc2l6ZV90IGxhc3RWaXNpdENvdW50KCkgY29u
c3QgeyByZXR1cm4gbV9sYXN0VmlzaXRDb3VudDsgfQogICAgIAotICAgIHZvaWQgZXhlY3V0ZShT
bG90VmlzaXRvciYpOwotICAgIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIHZpcnR1YWwgZG91Ymxl
IHF1aWNrV29ya0VzdGltYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKTsKKyAgICB2b2lkIGV4ZWN1
dGUoQWJzdHJhY3RTbG90VmlzaXRvciYpOworCisgICAgLy8gRklYTUUgbWxhbQorICAgIEpTX0VY
UE9SVF9QUklWQVRFIHZpcnR1YWwgZG91YmxlIHF1aWNrV29ya0VzdGltYXRlKEFic3RyYWN0U2xv
dFZpc2l0b3ImIHZpc2l0b3IpOwogICAgIAotICAgIGRvdWJsZSB3b3JrRXN0aW1hdGUoU2xvdFZp
c2l0b3ImIHZpc2l0b3IpOworICAgIGRvdWJsZSB3b3JrRXN0aW1hdGUoQWJzdHJhY3RTbG90Vmlz
aXRvciYgdmlzaXRvcik7CiAgICAgCi0gICAgdm9pZCBwcmVwYXJlVG9FeGVjdXRlKGNvbnN0IEFi
c3RyYWN0TG9ja2VyJiBjb25zdHJhaW50U29sdmluZ0xvY2tlciwgU2xvdFZpc2l0b3ImKTsKKyAg
ICB2b2lkIHByZXBhcmVUb0V4ZWN1dGUoY29uc3QgQWJzdHJhY3RMb2NrZXImIGNvbnN0cmFpbnRT
b2x2aW5nTG9ja2VyLCBBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAgICAgCi0gICAgdm9pZCBkb1Bh
cmFsbGVsV29yayhTbG90VmlzaXRvciYsIFNoYXJlZFRhc2s8dm9pZChTbG90VmlzaXRvciYpPiYp
OworICAgIHZvaWQgZG9QYXJhbGxlbFdvcmsoQWJzdHJhY3RTbG90VmlzaXRvciYsIFNoYXJlZFRh
c2s8dm9pZChBYnN0cmFjdFNsb3RWaXNpdG9yJik+Jik7CiAgICAgCiAgICAgQ29uc3RyYWludFZv
bGF0aWxpdHkgdm9sYXRpbGl0eSgpIGNvbnN0IHsgcmV0dXJuIG1fdm9sYXRpbGl0eTsgfQogICAg
IApAQCAtNzYsOSArNzcsMTEgQEAgcHVibGljOgogICAgIENvbnN0cmFpbnRQYXJhbGxlbGlzbSBw
YXJhbGxlbGlzbSgpIGNvbnN0IHsgcmV0dXJuIG1fcGFyYWxsZWxpc207IH0KIAogcHJvdGVjdGVk
OgotICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlSW1wbChTbG90VmlzaXRvciYpID0gMDsKLSAgICBK
U19FWFBPUlRfUFJJVkFURSB2aXJ0dWFsIHZvaWQgcHJlcGFyZVRvRXhlY3V0ZUltcGwoY29uc3Qg
QWJzdHJhY3RMb2NrZXImIGNvbnN0cmFpbnRTb2x2aW5nTG9ja2VyLCBTbG90VmlzaXRvciYpOwot
ICAgIAorICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlSW1wbChBYnN0cmFjdFNsb3RWaXNpdG9yJikg
PSAwOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZpcnR1YWwgdm9pZCBwcmVwYXJlVG9FeGVjdXRl
SW1wbChjb25zdCBBYnN0cmFjdExvY2tlciYgY29uc3RyYWludFNvbHZpbmdMb2NrZXIsIEFic3Ry
YWN0U2xvdFZpc2l0b3ImKTsKKworICAgIHZvaWQgZXhlY3V0ZVN5bmNocm9ub3VzbHkoQWJzdHJh
Y3RTbG90VmlzaXRvciYpOworCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBNYXJraW5nQ29u
c3RyYWludFNldDsgLy8gU28gaXQgY2FuIHNldCBtX2luZGV4LgogICAgIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnRTZXQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50U2V0LmNwcAko
cmV2aXNpb24gMjcyMjk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0Nv
bnN0cmFpbnRTZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Myw3ICs2Myw3IEBAIHZvaWQgTWFy
a2luZ0NvbnN0cmFpbnRTZXQ6OmRpZFN0YXJ0TWFya2kKICAgICBtX2l0ZXJhdGlvbiA9IDE7CiB9
CiAKLXZvaWQgTWFya2luZ0NvbnN0cmFpbnRTZXQ6OmFkZChDU3RyaW5nIGFiYnJldmlhdGVkTmFt
ZSwgQ1N0cmluZyBuYW1lLCA6OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3ImKT4gZnVuY3Rpb24s
IENvbnN0cmFpbnRWb2xhdGlsaXR5IHZvbGF0aWxpdHksIENvbnN0cmFpbnRDb25jdXJyZW5jeSBj
b25jdXJyZW5jeSwgQ29uc3RyYWludFBhcmFsbGVsaXNtIHBhcmFsbGVsaXNtKQordm9pZCBNYXJr
aW5nQ29uc3RyYWludFNldDo6YWRkKENTdHJpbmcgYWJicmV2aWF0ZWROYW1lLCBDU3RyaW5nIG5h
bWUsIDo6RnVuY3Rpb248dm9pZChBYnN0cmFjdFNsb3RWaXNpdG9yJik+IGZ1bmN0aW9uLCBDb25z
dHJhaW50Vm9sYXRpbGl0eSB2b2xhdGlsaXR5LCBDb25zdHJhaW50Q29uY3VycmVuY3kgY29uY3Vy
cmVuY3ksIENvbnN0cmFpbnRQYXJhbGxlbGlzbSBwYXJhbGxlbGlzbSkKIHsKICAgICBhZGQobWFr
ZVVuaXF1ZTxTaW1wbGVNYXJraW5nQ29uc3RyYWludD4oV1RGTW92ZShhYmJyZXZpYXRlZE5hbWUp
LCBXVEZNb3ZlKG5hbWUpLCBXVEZNb3ZlKGZ1bmN0aW9uKSwgdm9sYXRpbGl0eSwgY29uY3VycmVu
Y3ksIHBhcmFsbGVsaXNtKSk7CiB9CkBAIC03OCwxNCArNzgsMTQgQEAgdm9pZCBNYXJraW5nQ29u
c3RyYWludFNldDo6YWRkKAogICAgIG1fc2V0LmFwcGVuZChXVEZNb3ZlKGNvbnN0cmFpbnQpKTsK
IH0KIAotYm9vbCBNYXJraW5nQ29uc3RyYWludFNldDo6ZXhlY3V0ZUNvbnZlcmdlbmNlKFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQorYm9vbCBNYXJraW5nQ29uc3RyYWludFNldDo6ZXhlY3V0ZUNvbnZl
cmdlbmNlKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgYm9vbCByZXN1bHQg
PSBleGVjdXRlQ29udmVyZ2VuY2VJbXBsKHZpc2l0b3IpOwogICAgIGRhdGFMb2dJZihPcHRpb25z
Ojpsb2dHQygpLCAiICIpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLWJvb2wgTWFya2luZ0Nv
bnN0cmFpbnRTZXQ6OmlzV2F2ZWZyb250QWR2YW5jaW5nKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQor
Ym9vbCBNYXJraW5nQ29uc3RyYWludFNldDo6aXNXYXZlZnJvbnRBZHZhbmNpbmcoQWJzdHJhY3RT
bG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBmb3IgKE1hcmtpbmdDb25zdHJhaW50KiBvdXRn
cm93dGggOiBtX291dGdyb3d0aHMpIHsKICAgICAgICAgaWYgKG91dGdyb3d0aC0+d29ya0VzdGlt
YXRlKHZpc2l0b3IpKQpAQCAtOTQsNyArOTQsNyBAQCBib29sIE1hcmtpbmdDb25zdHJhaW50U2V0
Ojppc1dhdmVmcm9udEFkCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIE1hcmtpbmdDb25z
dHJhaW50U2V0OjpleGVjdXRlQ29udmVyZ2VuY2VJbXBsKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQor
Ym9vbCBNYXJraW5nQ29uc3RyYWludFNldDo6ZXhlY3V0ZUNvbnZlcmdlbmNlSW1wbChBYnN0cmFj
dFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFN1cGVyU2FtcGxlclNjb3BlIHN1cGVyU2Ft
cGxlclNjb3BlKGZhbHNlKTsKICAgICBNYXJraW5nQ29uc3RyYWludFNvbHZlciBzb2x2ZXIoKnRo
aXMpOwpAQCAtMTY2LDEwICsxNjYsMTAgQEAgYm9vbCBNYXJraW5nQ29uc3RyYWludFNldDo6ZXhl
Y3V0ZUNvbnZlcgogICAgIHJldHVybiAhc29sdmVyLmRpZFZpc2l0U29tZXRoaW5nKCk7CiB9CiAK
LXZvaWQgTWFya2luZ0NvbnN0cmFpbnRTZXQ6OmV4ZWN1dGVBbGwoU2xvdFZpc2l0b3ImIHZpc2l0
b3IpCit2b2lkIE1hcmtpbmdDb25zdHJhaW50U2V0OjpleGVjdXRlQWxsU3luY2hyb25vdXNseShB
YnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGZvciAoYXV0byYgY29uc3RyYWlu
dCA6IG1fc2V0KQotICAgICAgICBjb25zdHJhaW50LT5leGVjdXRlKHZpc2l0b3IpOworICAgICAg
ICBjb25zdHJhaW50LT5leGVjdXRlU3luY2hyb25vdXNseSh2aXNpdG9yKTsKICAgICBkYXRhTG9n
SWYoT3B0aW9uczo6bG9nR0MoKSwgIiAiKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnRTZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludFNldC5oCShyZXZpc2lvbiAyNzIyOTcp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludFNldC5oCSh3
b3JraW5nIGNvcHkpCkBAIC00NiwxNCArNDYsMTQgQEAgcHVibGljOgogICAgIHZvaWQgYWRkKAog
ICAgICAgICBDU3RyaW5nIGFiYnJldmlhdGVkTmFtZSwKICAgICAgICAgQ1N0cmluZyBuYW1lLAot
ICAgICAgICA6OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3ImKT4sCisgICAgICAgIDo6RnVuY3Rp
b248dm9pZChBYnN0cmFjdFNsb3RWaXNpdG9yJik+LAogICAgICAgICBDb25zdHJhaW50Vm9sYXRp
bGl0eSwKICAgICAgICAgQ29uc3RyYWludENvbmN1cnJlbmN5ID0gQ29uc3RyYWludENvbmN1cnJl
bmN5OjpDb25jdXJyZW50LAogICAgICAgICBDb25zdHJhaW50UGFyYWxsZWxpc20gPSBDb25zdHJh
aW50UGFyYWxsZWxpc206OlNlcXVlbnRpYWwpOwogICAgIAogICAgIHZvaWQgYWRkKAogICAgICAg
ICBDU3RyaW5nIGFiYnJldmlhdGVkTmFtZSwgQ1N0cmluZyBuYW1lLAotICAgICAgICA6OkZ1bmN0
aW9uPHZvaWQoU2xvdFZpc2l0b3ImKT4gZnVuYywKKyAgICAgICAgOjpGdW5jdGlvbjx2b2lkKEFi
c3RyYWN0U2xvdFZpc2l0b3ImKT4gZnVuYywKICAgICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHkg
dm9sYXRpbGl0eSwKICAgICAgICAgQ29uc3RyYWludFBhcmFsbGVsaXNtIHBhcmFsbGVsaXNtKQog
ICAgIHsKQEAgLTY0LDIwICs2NCwyMCBAQCBwdWJsaWM6CiAgICAgCiAgICAgLy8gQXNzdW1pbmcg
dGhhdCB0aGUgbWFyayBzdGFja3MgYXJlIGFsbCBlbXB0eSwgdGhpcyB3aWxsIGdpdmUgeW91IGEg
Z3Vlc3MgYXMgdG8gd2hldGhlciBvcgogICAgIC8vIG5vdCB0aGUgd2F2ZWZyb250IGlzIGFkdmFu
Y2luZy4KLSAgICBib29sIGlzV2F2ZWZyb250QWR2YW5jaW5nKFNsb3RWaXNpdG9yJik7Ci0gICAg
Ym9vbCBpc1dhdmVmcm9udFJldHJlYXRpbmcoU2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsgcmV0dXJu
ICFpc1dhdmVmcm9udEFkdmFuY2luZyh2aXNpdG9yKTsgfQorICAgIGJvb2wgaXNXYXZlZnJvbnRB
ZHZhbmNpbmcoQWJzdHJhY3RTbG90VmlzaXRvciYpOworICAgIGJvb2wgaXNXYXZlZnJvbnRSZXRy
ZWF0aW5nKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsgcmV0dXJuICFpc1dhdmVmcm9u
dEFkdmFuY2luZyh2aXNpdG9yKTsgfQogICAgIAogICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGlz
IGV4ZWN1dGVkIGFsbCBjb25zdHJhaW50cyBhbmQgbm9uZSBvZiB0aGVtIHByb2R1Y2VkIG5ldyB3
b3JrLiBUaGlzCiAgICAgLy8gYXNzdW1lcyB0aGF0IHlvdSd2ZSBhbHJhZWR5IHZpc2l0ZWQgcm9v
dHMgYW5kIGRyYWluZWQgZnJvbSB0aGVyZS4KLSAgICBib29sIGV4ZWN1dGVDb252ZXJnZW5jZShT
bG90VmlzaXRvciYpOwotICAgIAorICAgIGJvb2wgZXhlY3V0ZUNvbnZlcmdlbmNlKEFic3RyYWN0
U2xvdFZpc2l0b3ImKTsKKwogICAgIC8vIFNpbXBseSBydW5zIGFsbCBjb25zdHJhaW50cyB3aXRo
b3V0IGFueSBzaGVuYW5pZ2Fucy4KLSAgICB2b2lkIGV4ZWN1dGVBbGwoU2xvdFZpc2l0b3ImKTsK
KyAgICB2b2lkIGV4ZWN1dGVBbGxTeW5jaHJvbm91c2x5KEFic3RyYWN0U2xvdFZpc2l0b3ImKTsK
ICAgICAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIE1hcmtpbmdDb25zdHJhaW50U29sdmVy
OwotICAgIAotICAgIGJvb2wgZXhlY3V0ZUNvbnZlcmdlbmNlSW1wbChTbG90VmlzaXRvciYpOwor
CisgICAgYm9vbCBleGVjdXRlQ29udmVyZ2VuY2VJbXBsKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsK
ICAgICAKICAgICBIZWFwJiBtX2hlYXA7CiAgICAgQml0VmVjdG9yIG1fdW5leGVjdXRlZFJvb3Rz
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnRTb2x2
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdD
b25zdHJhaW50U29sdmVyLmNwcAkocmV2aXNpb24gMjcyMjk3KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zMyw3ICszMyw3IEBAIG5hbWVzcGFjZSBKU0MgeyAKIAogTWFya2luZ0NvbnN0cmFpbnRTb2x2
ZXI6Ok1hcmtpbmdDb25zdHJhaW50U29sdmVyKE1hcmtpbmdDb25zdHJhaW50U2V0JiBzZXQpCiAg
ICAgOiBtX2hlYXAoc2V0Lm1faGVhcCkKLSAgICAsIG1fbWFpblZpc2l0b3IobV9oZWFwLmNvbGxl
Y3RvclNsb3RWaXNpdG9yKCkpCisgICAgLCBtX21haW5WaXNpdG9yKG1faGVhcC5jb2xsZWN0b3JT
bG90VmlzaXRvcigpKSAvLyBtbGFtIEZJWE1FIG5lZWQgc3VwcG9ydCBmb3IgVmVyaWZpZXJTbG90
VmlzaXRvcgogICAgICwgbV9zZXQoc2V0KQogewogICAgIG1faGVhcC5mb3JFYWNoU2xvdFZpc2l0
b3IoCkBAIC0xNTAsMTMgKzE1MCwxMyBAQCB2b2lkIE1hcmtpbmdDb25zdHJhaW50U29sdmVyOjpl
eGVjdXRlKE1hCiAgICAgbV9leGVjdXRlZC5zZXQoY29uc3RyYWludC5pbmRleCgpKTsKIH0KIAot
dm9pZCBNYXJraW5nQ29uc3RyYWludFNvbHZlcjo6YWRkUGFyYWxsZWxUYXNrKFJlZlB0cjxTaGFy
ZWRUYXNrPHZvaWQoU2xvdFZpc2l0b3ImKT4+IHRhc2ssIE1hcmtpbmdDb25zdHJhaW50JiBjb25z
dHJhaW50KQordm9pZCBNYXJraW5nQ29uc3RyYWludFNvbHZlcjo6YWRkUGFyYWxsZWxUYXNrKFJl
ZlB0cjxTaGFyZWRUYXNrPHZvaWQoQWJzdHJhY3RTbG90VmlzaXRvciYpPj4gdGFzaywgTWFya2lu
Z0NvbnN0cmFpbnQmIGNvbnN0cmFpbnQpCiB7CiAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayht
X2xvY2spOwogICAgIG1fdG9FeGVjdXRlSW5QYXJhbGxlbC5hcHBlbmQoVGFza1dpdGhDb25zdHJh
aW50KFdURk1vdmUodGFzayksICZjb25zdHJhaW50KSk7CiB9CiAKLXZvaWQgTWFya2luZ0NvbnN0
cmFpbnRTb2x2ZXI6OnJ1bkV4ZWN1dGlvblRocmVhZChTbG90VmlzaXRvciYgdmlzaXRvciwgU2No
ZWR1bGVyUHJlZmVyZW5jZSBwcmVmZXJlbmNlLCBTY29wZWRMYW1iZGE8T3B0aW9uYWw8dW5zaWdu
ZWQ+KCk+IHBpY2tOZXh0KQordm9pZCBNYXJraW5nQ29uc3RyYWludFNvbHZlcjo6cnVuRXhlY3V0
aW9uVGhyZWFkKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIFNjaGVkdWxlclByZWZlcmVu
Y2UgcHJlZmVyZW5jZSwgU2NvcGVkTGFtYmRhPE9wdGlvbmFsPHVuc2lnbmVkPigpPiBwaWNrTmV4
dCkKIHsKICAgICBmb3IgKDs7KSB7CiAgICAgICAgIGJvb2wgZG9QYXJhbGxlbFdvcmtNb2RlOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXIu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3Ry
YWludFNvbHZlci5oCShyZXZpc2lvbiAyNzIyOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9NYXJraW5nQ29uc3RyYWludFNvbHZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC02NSwxNSAr
NjUsMTUgQEAgcHVibGljOgogICAgIHZvaWQgZXhlY3V0ZShNYXJraW5nQ29uc3RyYWludCYpOwog
ICAgIAogICAgIC8vIFBhcmFsbGVsIGNvbnN0cmFpbnRzIGNhbiBhZGQgcGFyYWxsZWwgdGFza3Mu
Ci0gICAgdm9pZCBhZGRQYXJhbGxlbFRhc2soUmVmUHRyPFNoYXJlZFRhc2s8dm9pZChTbG90Vmlz
aXRvciYpPj4sIE1hcmtpbmdDb25zdHJhaW50Jik7CisgICAgdm9pZCBhZGRQYXJhbGxlbFRhc2so
UmVmUHRyPFNoYXJlZFRhc2s8dm9pZChBYnN0cmFjdFNsb3RWaXNpdG9yJik+PiwgTWFya2luZ0Nv
bnN0cmFpbnQmKTsKICAgICAKIHByaXZhdGU6Ci0gICAgdm9pZCBydW5FeGVjdXRpb25UaHJlYWQo
U2xvdFZpc2l0b3ImLCBTY2hlZHVsZXJQcmVmZXJlbmNlLCBTY29wZWRMYW1iZGE8T3B0aW9uYWw8
dW5zaWduZWQ+KCk+IHBpY2tOZXh0KTsKKyAgICB2b2lkIHJ1bkV4ZWN1dGlvblRocmVhZChBYnN0
cmFjdFNsb3RWaXNpdG9yJiwgU2NoZWR1bGVyUHJlZmVyZW5jZSwgU2NvcGVkTGFtYmRhPE9wdGlv
bmFsPHVuc2lnbmVkPigpPiBwaWNrTmV4dCk7CiAgICAgCiAgICAgc3RydWN0IFRhc2tXaXRoQ29u
c3RyYWludCB7CiAgICAgICAgIFRhc2tXaXRoQ29uc3RyYWludCgpIHsgfQogICAgICAgICAKLSAg
ICAgICAgVGFza1dpdGhDb25zdHJhaW50KFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoU2xvdFZpc2l0
b3ImKT4+IHRhc2ssIE1hcmtpbmdDb25zdHJhaW50KiBjb25zdHJhaW50KQorICAgICAgICBUYXNr
V2l0aENvbnN0cmFpbnQoUmVmUHRyPFNoYXJlZFRhc2s8dm9pZChBYnN0cmFjdFNsb3RWaXNpdG9y
Jik+PiB0YXNrLCBNYXJraW5nQ29uc3RyYWludCogY29uc3RyYWludCkKICAgICAgICAgICAgIDog
dGFzayhXVEZNb3ZlKHRhc2spKQogICAgICAgICAgICAgLCBjb25zdHJhaW50KGNvbnN0cmFpbnQp
CiAgICAgICAgIHsKQEAgLTg1LDEyICs4NSwxMiBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAg
ICYmIGNvbnN0cmFpbnQgPT0gb3RoZXIuY29uc3RyYWludDsKICAgICAgICAgfQogICAgICAgICAK
LSAgICAgICAgUmVmUHRyPFNoYXJlZFRhc2s8dm9pZChTbG90VmlzaXRvciYpPj4gdGFzazsKKyAg
ICAgICAgUmVmUHRyPFNoYXJlZFRhc2s8dm9pZChBYnN0cmFjdFNsb3RWaXNpdG9yJik+PiB0YXNr
OwogICAgICAgICBNYXJraW5nQ29uc3RyYWludCogY29uc3RyYWludCB7IG51bGxwdHIgfTsKICAg
ICB9OwogICAgIAogICAgIEhlYXAmIG1faGVhcDsKLSAgICBTbG90VmlzaXRvciYgbV9tYWluVmlz
aXRvcjsKKyAgICBBYnN0cmFjdFNsb3RWaXNpdG9yJiBtX21haW5WaXNpdG9yOwogICAgIE1hcmtp
bmdDb25zdHJhaW50U2V0JiBtX3NldDsKICAgICBCaXRWZWN0b3IgbV9leGVjdXRlZDsKICAgICBE
ZXF1ZTxUYXNrV2l0aENvbnN0cmFpbnQsIDMyPiBtX3RvRXhlY3V0ZUluUGFyYWxsZWw7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9QcmVjaXNlQWxsb2NhdGlvbi5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvUHJlY2lzZUFsbG9jYXRpb24uY3Bw
CShyZXZpc2lvbiAyNzIyOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9QcmVjaXNl
QWxsb2NhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwMCwxMSArMjAwLDE2IEBAIHZvaWQg
UHJlY2lzZUFsbG9jYXRpb246OnNocmluaygpCiAgICAgbV93ZWFrU2V0LnNocmluaygpOwogfQog
Ci12b2lkIFByZWNpc2VBbGxvY2F0aW9uOjp2aXNpdFdlYWtTZXQoU2xvdFZpc2l0b3ImIHZpc2l0
b3IpCisvL3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+CisvL3ZvaWQgUHJlY2lzZUFsbG9jYXRp
b246OnZpc2l0V2Vha1NldChWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBQcmVjaXNlQWxsb2NhdGlv
bjo6dmlzaXRXZWFrU2V0MTAwMChBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewotICAg
IG1fd2Vha1NldC52aXNpdCh2aXNpdG9yKTsKKyAgICBtX3dlYWtTZXQudmlzaXQxKHZpc2l0b3Ip
OwogfQogCisvL3RlbXBsYXRlIHZvaWQgUHJlY2lzZUFsbG9jYXRpb246OnZpc2l0V2Vha1NldChT
bG90VmlzaXRvciYpOworLy90ZW1wbGF0ZSB2b2lkIFByZWNpc2VBbGxvY2F0aW9uOjp2aXNpdFdl
YWtTZXQoVmVyaWZpZXJTbG90VmlzaXRvciYpOworCiB2b2lkIFByZWNpc2VBbGxvY2F0aW9uOjpy
ZWFwV2Vha1NldCgpCiB7CiAgICAgcmV0dXJuIG1fd2Vha1NldC5yZWFwKCk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9QcmVjaXNlQWxsb2NhdGlvbi5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1ByZWNpc2VBbGxvY2F0aW9uLmgJKHJldmlzaW9u
IDI3MjI5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1ByZWNpc2VBbGxvY2F0aW9u
LmgJKHdvcmtpbmcgY29weSkKQEAgLTgyLDcgKzgyLDggQEAgcHVibGljOgogICAgIAogICAgIHZv
aWQgc2hyaW5rKCk7CiAgICAgCi0gICAgdm9pZCB2aXNpdFdlYWtTZXQoU2xvdFZpc2l0b3ImKTsK
Ky8vICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgdmlzaXRXZWFrU2V0KFZpc2l0
b3ImKTsKKyAgICB2b2lkIHZpc2l0V2Vha1NldDEwMDAoQWJzdHJhY3RTbG90VmlzaXRvciYpOwog
ICAgIHZvaWQgcmVhcFdlYWtTZXQoKTsKICAgICAKICAgICB2b2lkIGNsZWFyTmV3bHlBbGxvY2F0
ZWQoKSB7IG1faXNOZXdseUFsbG9jYXRlZCA9IGZhbHNlOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9TaW1wbGVNYXJraW5nQ29uc3RyYWludC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQuY3BwCShy
ZXZpc2lvbiAyNzIyOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TaW1wbGVNYXJr
aW5nQ29uc3RyYWludC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDcgQEAgbmFtZXNw
YWNlIEpTQyB7CiAKIFNpbXBsZU1hcmtpbmdDb25zdHJhaW50OjpTaW1wbGVNYXJraW5nQ29uc3Ry
YWludCgKICAgICBDU3RyaW5nIGFiYnJldmlhdGVkTmFtZSwgQ1N0cmluZyBuYW1lLAotICAgIDo6
RnVuY3Rpb248dm9pZChTbG90VmlzaXRvciYpPiBleGVjdXRlRnVuY3Rpb24sCisgICAgOjpGdW5j
dGlvbjx2b2lkKEFic3RyYWN0U2xvdFZpc2l0b3ImKT4gZXhlY3V0ZUZ1bmN0aW9uLAogICAgIENv
bnN0cmFpbnRWb2xhdGlsaXR5IHZvbGF0aWxpdHksIENvbnN0cmFpbnRDb25jdXJyZW5jeSBjb25j
dXJyZW5jeSwKICAgICBDb25zdHJhaW50UGFyYWxsZWxpc20gcGFyYWxsZWxpc20pCiAgICAgOiBN
YXJraW5nQ29uc3RyYWludChXVEZNb3ZlKGFiYnJldmlhdGVkTmFtZSksIFdURk1vdmUobmFtZSks
IHZvbGF0aWxpdHksIGNvbmN1cnJlbmN5LCBwYXJhbGxlbGlzbSkKQEAgLTQyLDcgKzQyLDcgQEAg
U2ltcGxlTWFya2luZ0NvbnN0cmFpbnQ6On5TaW1wbGVNYXJraW5nQwogewogfQogCi12b2lkIFNp
bXBsZU1hcmtpbmdDb25zdHJhaW50OjpleGVjdXRlSW1wbChTbG90VmlzaXRvciYgdmlzaXRvcikK
K3ZvaWQgU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQ6OmV4ZWN1dGVJbXBsKEFic3RyYWN0U2xvdFZp
c2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgbV9leGVjdXRlRnVuY3Rpb24odmlzaXRvcik7CiB9Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TaW1wbGVNYXJraW5nQ29uc3RyYWludC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1NpbXBsZU1hcmtpbmdD
b25zdHJhaW50LmgJKHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL1NpbXBsZU1hcmtpbmdDb25zdHJhaW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDE0ICsz
NywxNCBAQCBjbGFzcyBTaW1wbGVNYXJraW5nQ29uc3RyYWludCBmaW5hbCA6IHB1CiBwdWJsaWM6
CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQoCiAgICAgICAg
IENTdHJpbmcgYWJicmV2aWF0ZWROYW1lLCBDU3RyaW5nIG5hbWUsCi0gICAgICAgIDo6RnVuY3Rp
b248dm9pZChTbG90VmlzaXRvciYpPiwKKyAgICAgICAgOjpGdW5jdGlvbjx2b2lkKEFic3RyYWN0
U2xvdFZpc2l0b3ImKT4sCiAgICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5LAogICAgICAgICBD
b25zdHJhaW50Q29uY3VycmVuY3kgPSBDb25zdHJhaW50Q29uY3VycmVuY3k6OkNvbmN1cnJlbnQs
CiAgICAgICAgIENvbnN0cmFpbnRQYXJhbGxlbGlzbSA9IENvbnN0cmFpbnRQYXJhbGxlbGlzbTo6
U2VxdWVudGlhbCk7CiAgICAgCiAgICAgU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQoCiAgICAgICAg
IENTdHJpbmcgYWJicmV2aWF0ZWROYW1lLCBDU3RyaW5nIG5hbWUsCi0gICAgICAgIDo6RnVuY3Rp
b248dm9pZChTbG90VmlzaXRvciYpPiBmdW5jLAorICAgICAgICA6OkZ1bmN0aW9uPHZvaWQoQWJz
dHJhY3RTbG90VmlzaXRvciYpPiBmdW5jLAogICAgICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eSB2
b2xhdGlsaXR5LAogICAgICAgICBDb25zdHJhaW50UGFyYWxsZWxpc20gcGFyYWxsZWxpc20pCiAg
ICAgICAgIDogU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQoYWJicmV2aWF0ZWROYW1lLCBuYW1lLCBX
VEZNb3ZlKGZ1bmMpLCB2b2xhdGlsaXR5LCBDb25zdHJhaW50Q29uY3VycmVuY3k6OkNvbmN1cnJl
bnQsIHBhcmFsbGVsaXNtKQpAQCAtNTQsOSArNTQsOSBAQCBwdWJsaWM6CiAgICAgSlNfRVhQT1JU
X1BSSVZBVEUgflNpbXBsZU1hcmtpbmdDb25zdHJhaW50KCkgZmluYWw7CiAgICAgCiBwcml2YXRl
OgotICAgIHZvaWQgZXhlY3V0ZUltcGwoU2xvdFZpc2l0b3ImKSBmaW5hbDsKKyAgICB2b2lkIGV4
ZWN1dGVJbXBsKEFic3RyYWN0U2xvdFZpc2l0b3ImKSBmaW5hbDsKIAotICAgIDo6RnVuY3Rpb248
dm9pZChTbG90VmlzaXRvciYpPiBtX2V4ZWN1dGVGdW5jdGlvbjsKKyAgICA6OkZ1bmN0aW9uPHZv
aWQoQWJzdHJhY3RTbG90VmlzaXRvciYpPiBtX2V4ZWN1dGVGdW5jdGlvbjsKIH07CiAKIH0gLy8g
bmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0
b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNp
dG9yLmNwcAkocmV2aXNpb24gMjcyMjk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
U2xvdFZpc2l0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMi0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1
ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlNsb3RWaXNpdG9yLmgiCiAKKyNpbmNsdWRlICJBYnN0
cmFjdFNsb3RWaXNpdG9ySW5saW5lcy5oIgogI2luY2x1ZGUgIkNvbnNlcnZhdGl2ZVJvb3RzLmgi
CiAjaW5jbHVkZSAiR0NTZWdtZW50ZWRBcnJheUlubGluZXMuaCIKICNpbmNsdWRlICJIZWFwQW5h
bHl6ZXIuaCIKQEAgLTc3LDE1ICs3OCwxOCBAQCBzdGF0aWMgdm9pZCB2YWxpZGF0ZShKU0NlbGwq
IGNlbGwpCiAjZW5kaWYKIAogU2xvdFZpc2l0b3I6OlNsb3RWaXNpdG9yKEhlYXAmIGhlYXAsIENT
dHJpbmcgY29kZU5hbWUpCi0gICAgOiBtX2J5dGVzVmlzaXRlZCgwKQotICAgICwgbV92aXNpdENv
dW50KDApCisvLyAgICA6IEJhc2UoVHlwZTo6U2xvdFZpc2l0b3IsIGhlYXAsIGNvZGVOYW1lKQor
Ly8gICAgOiBCYXNlKGhlYXAsIGNvZGVOYW1lKQorICAgIDogQmFzZShoZWFwKQorICAgICwgbV9i
eXRlc1Zpc2l0ZWQoMCkKKy8vICAgICwgbV92aXNpdENvdW50KDApCiAgICAgLCBtX2lzSW5QYXJh
bGxlbE1vZGUoZmFsc2UpCiAgICAgLCBtX21hcmtpbmdWZXJzaW9uKE1hcmtlZFNwYWNlOjppbml0
aWFsVmVyc2lvbikKLSAgICAsIG1faGVhcChoZWFwKQorLy8gICAgLCBtX2hlYXAoaGVhcCkKICAg
ICAsIG1fY29kZU5hbWUoY29kZU5hbWUpCiAjaWYgQVNTRVJUX0VOQUJMRUQKICAgICAsIG1faXND
aGVja2luZ0ZvckRlZmF1bHRNYXJrVmlvbGF0aW9uKGZhbHNlKQotICAgICwgbV9pc0RyYWluaW5n
KGZhbHNlKQorLy8vLyAgICAsIG1faXNEcmFpbmluZyhmYWxzZSkKICNlbmRpZgogewogfQpAQCAt
MTE3LDggKzEyMSw5IEBAIHZvaWQgU2xvdFZpc2l0b3I6OmRpZFN0YXJ0TWFya2luZygpCiAKIHZv
aWQgU2xvdFZpc2l0b3I6OnJlc2V0KCkKIHsKKyAgICBBYnN0cmFjdFNsb3RWaXNpdG9yOjpyZXNl
dCgpOwogICAgIG1fYnl0ZXNWaXNpdGVkID0gMDsKLSAgICBtX3Zpc2l0Q291bnQgPSAwOworLy8g
ICAgbV92aXNpdENvdW50ID0gMDsKICAgICBtX2hlYXBBbmFseXplciA9IG51bGxwdHI7CiAgICAg
UkVMRUFTRV9BU1NFUlQoIW1fY3VycmVudENlbGwpOwogfQpAQCAtMTMyLDcgKzEzNyw3IEBAIHZv
aWQgU2xvdFZpc2l0b3I6OmNsZWFyTWFya1N0YWNrcygpCiAgICAgICAgIH0pOwogfQogCi12b2lk
IFNsb3RWaXNpdG9yOjphcHBlbmQoY29uc3QgQ29uc2VydmF0aXZlUm9vdHMmIGNvbnNlcnZhdGl2
ZVJvb3RzKQordm9pZCBTbG90VmlzaXRvcjo6YXBwZW5kX0NvbnNlcnZhdGl2ZVJvb3RzKGNvbnN0
IENvbnNlcnZhdGl2ZVJvb3RzJiBjb25zZXJ2YXRpdmVSb290cykKIHsKICAgICBIZWFwQ2VsbCoq
IHJvb3RzID0gY29uc2VydmF0aXZlUm9vdHMucm9vdHMoKTsKICAgICBzaXplX3Qgc2l6ZSA9IGNv
bnNlcnZhdGl2ZVJvb3RzLnNpemUoKTsKQEAgLTgwNywxMiArODEyLDEyIEBAIE1hcmtTdGFja0Fy
cmF5JiBTbG90VmlzaXRvcjo6Y29ycmVzcG9uZGkKICAgICByZXR1cm4gKm1faGVhcC5tX3NoYXJl
ZE11dGF0b3JNYXJrU3RhY2s7CiB9CiAKLXZvaWQgU2xvdFZpc2l0b3I6OmFkZFBhcmFsbGVsQ29u
c3RyYWludFRhc2soUmVmUHRyPFNoYXJlZFRhc2s8dm9pZChTbG90VmlzaXRvciYpPj4gdGFzaykK
K3ZvaWQgU2xvdFZpc2l0b3I6OmFkZFBhcmFsbGVsQ29uc3RyYWludFRhc2soUmVmUHRyPFNoYXJl
ZFRhc2s8dm9pZChBYnN0cmFjdFNsb3RWaXNpdG9yJik+PiB0YXNrKQogewogICAgIFJFTEVBU0Vf
QVNTRVJUKG1fY3VycmVudFNvbHZlcik7CiAgICAgUkVMRUFTRV9BU1NFUlQobV9jdXJyZW50Q29u
c3RyYWludCk7CiAgICAgUkVMRUFTRV9BU1NFUlQodGFzayk7Ci0gICAgCisKICAgICBtX2N1cnJl
bnRTb2x2ZXItPmFkZFBhcmFsbGVsVGFzayh0YXNrLCAqbV9jdXJyZW50Q29uc3RyYWludCk7CiB9
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuaAkocmV2aXNp
b24gMjcyMjk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEt
MjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTEtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTI1LDc0ICsyNSwxMDAgQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNp
bmNsdWRlICJBYnN0cmFjdFNsb3RWaXNpdG9yLmgiCiAjaW5jbHVkZSAiSGFuZGxlVHlwZXMuaCIK
ICNpbmNsdWRlICJJdGVyYXRpb25TdGF0dXMuaCIKLSNpbmNsdWRlICJNYXJrU3RhY2suaCIKLSNp
bmNsdWRlICJWaXNpdFJhY2VLZXkuaCIKKy8vI2luY2x1ZGUgIk1hcmtTdGFjay5oIgorLy8jaW5j
bHVkZSAiVmlzaXRSYWNlS2V5LmgiCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRl
IDx3dGYvTW9ub3RvbmljVGltZS5oPgotI2luY2x1ZGUgPHd0Zi9TaGFyZWRUYXNrLmg+Ci0jaW5j
bHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorLy8jaW5jbHVkZSA8d3RmL1NoYXJlZFRhc2suaD4K
Ky8vI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKLWNs
YXNzIENvbnNlcnZhdGl2ZVJvb3RzOworLy9jbGFzcyBDb25zZXJ2YXRpdmVSb290czsKIGNsYXNz
IEdDVGhyZWFkU2hhcmVkRGF0YTsKLWNsYXNzIEhlYXA7CisvL2NsYXNzIEhlYXA7CiBjbGFzcyBI
ZWFwQ2VsbDsKIGNsYXNzIEhlYXBBbmFseXplcjsKLWNsYXNzIE1hcmtlZEJsb2NrOwogY2xhc3Mg
TWFya2luZ0NvbnN0cmFpbnQ7CiBjbGFzcyBNYXJraW5nQ29uc3RyYWludFNvbHZlcjsKLXRlbXBs
YXRlPHR5cGVuYW1lIFQ+IGNsYXNzIFdlYWs7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFt
ZSBUcmFpdHM+IGNsYXNzIFdyaXRlQmFycmllckJhc2U7CisvL3RlbXBsYXRlPHR5cGVuYW1lIFQ+
IGNsYXNzIFdlYWs7CisvL3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFRyYWl0cz4gY2xh
c3MgV3JpdGVCYXJyaWVyQmFzZTsKIAogdHlwZWRlZiB1aW50MzJfdCBIZWFwVmVyc2lvbjsKIAot
Y2xhc3MgU2xvdFZpc2l0b3IgeworY2xhc3MgU2xvdFZpc2l0b3IgZmluYWwgOiBwdWJsaWMgQWJz
dHJhY3RTbG90VmlzaXRvciB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU2xvdFZpc2l0b3Ip
OwogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogCisgICAgdXNpbmcgQmFzZSA9IEFic3Ry
YWN0U2xvdFZpc2l0b3I7CisKICAgICBmcmllbmQgY2xhc3MgU2V0Q3VycmVudENlbGxTY29wZTsK
ICAgICBmcmllbmQgY2xhc3MgSGVhcDsKIAogcHVibGljOgotICAgIGVudW0gUm9vdE1hcmtSZWFz
b24gewotICAgICAgICBOb25lLAotICAgICAgICBDb25zZXJ2YXRpdmVTY2FuLAotICAgICAgICBT
dHJvbmdSZWZlcmVuY2VzLAotICAgICAgICBQcm90ZWN0ZWRWYWx1ZXMsCi0gICAgICAgIE1hcmtM
aXN0U2V0LAotICAgICAgICBWTUV4Y2VwdGlvbnMsCi0gICAgICAgIFN0cm9uZ0hhbmRsZXMsCi0g
ICAgICAgIERlYnVnZ2VyLAotICAgICAgICBKSVRTdHViUm91dGluZXMsCi0gICAgICAgIFdlYWtT
ZXRzLAotICAgICAgICBPdXRwdXQsCi0gICAgICAgIERGR1dvcmtMaXN0cywKLSAgICAgICAgQ29k
ZUJsb2NrcywKLSAgICAgICAgRE9NR0NPdXRwdXQsCisgICAgY2xhc3MgRGVmYXVsdE1hcmtpbmdW
aW9sYXRpb25Bc3NlcnRpb25TY29wZSB7CisgICAgcHVibGljOgorI2lmIEFTU0VSVF9FTkFCTEVE
CisgICAgICAgIERlZmF1bHRNYXJraW5nVmlvbGF0aW9uQXNzZXJ0aW9uU2NvcGUoU2xvdFZpc2l0
b3ImIHZpc2l0b3IpCisgICAgICAgICAgICA6IG1fdmlzaXRvcih2aXNpdG9yKQorICAgICAgICB7
CisgICAgICAgICAgICBtX3dhc0NoZWNraW5nRm9yRGVmYXVsdE1hcmtWaW9sYXRpb24gPSBtX3Zp
c2l0b3IubV9pc0NoZWNraW5nRm9yRGVmYXVsdE1hcmtWaW9sYXRpb247CisgICAgICAgICAgICBt
X3Zpc2l0b3IubV9pc0NoZWNraW5nRm9yRGVmYXVsdE1hcmtWaW9sYXRpb24gPSBmYWxzZTsKKyAg
ICAgICAgfQorCisgICAgICAgIH5EZWZhdWx0TWFya2luZ1Zpb2xhdGlvbkFzc2VydGlvblNjb3Bl
KCkKKyAgICAgICAgeworICAgICAgICAgICAgbV92aXNpdG9yLm1faXNDaGVja2luZ0ZvckRlZmF1
bHRNYXJrVmlvbGF0aW9uID0gbV93YXNDaGVja2luZ0ZvckRlZmF1bHRNYXJrVmlvbGF0aW9uOwor
ICAgICAgICB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBTbG90VmlzaXRvciYgbV92aXNpdG9y
OworICAgICAgICBib29sIG1fd2FzQ2hlY2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlvbjsKKyNl
bHNlCisgICAgICAgIERlZmF1bHRNYXJraW5nVmlvbGF0aW9uQXNzZXJ0aW9uU2NvcGUoU2xvdFZp
c2l0b3ImKSB7IH0KKyNlbmRpZgogICAgIH07CiAKKy8vICAgIGVudW0gUm9vdE1hcmtSZWFzb24g
eworLy8gICAgICAgIE5vbmUsCisvLyAgICAgICAgQ29uc2VydmF0aXZlU2NhbiwKKy8vICAgICAg
ICBTdHJvbmdSZWZlcmVuY2VzLAorLy8gICAgICAgIFByb3RlY3RlZFZhbHVlcywKKy8vICAgICAg
ICBNYXJrTGlzdFNldCwKKy8vICAgICAgICBWTUV4Y2VwdGlvbnMsCisvLyAgICAgICAgU3Ryb25n
SGFuZGxlcywKKy8vICAgICAgICBEZWJ1Z2dlciwKKy8vICAgICAgICBKSVRTdHViUm91dGluZXMs
CisvLyAgICAgICAgV2Vha1NldHMsCisvLyAgICAgICAgT3V0cHV0LAorLy8gICAgICAgIERGR1dv
cmtMaXN0cywKKy8vICAgICAgICBDb2RlQmxvY2tzLAorLy8gICAgICAgIERPTUdDT3V0cHV0LAor
Ly8gICAgfTsKKwogICAgIFNsb3RWaXNpdG9yKEhlYXAmLCBDU3RyaW5nIGNvZGVOYW1lKTsKICAg
ICB+U2xvdFZpc2l0b3IoKTsKIAotICAgIE1hcmtTdGFja0FycmF5JiBjb2xsZWN0b3JNYXJrU3Rh
Y2soKSB7IHJldHVybiBtX2NvbGxlY3RvclN0YWNrOyB9Ci0gICAgTWFya1N0YWNrQXJyYXkmIG11
dGF0b3JNYXJrU3RhY2soKSB7IHJldHVybiBtX211dGF0b3JTdGFjazsgfQotICAgIGNvbnN0IE1h
cmtTdGFja0FycmF5JiBjb2xsZWN0b3JNYXJrU3RhY2soKSBjb25zdCB7IHJldHVybiBtX2NvbGxl
Y3RvclN0YWNrOyB9Ci0gICAgY29uc3QgTWFya1N0YWNrQXJyYXkmIG11dGF0b3JNYXJrU3RhY2so
KSBjb25zdCB7IHJldHVybiBtX211dGF0b3JTdGFjazsgfQotICAgIAotICAgIFZNJiB2bSgpOwot
ICAgIGNvbnN0IFZNJiB2bSgpIGNvbnN0OwotICAgIEhlYXAqIGhlYXAoKSBjb25zdDsKLQotICAg
IHZvaWQgYXBwZW5kKGNvbnN0IENvbnNlcnZhdGl2ZVJvb3RzJik7Ci0gICAgCi0gICAgdGVtcGxh
dGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVHJhaXRzPiB2b2lkIGFwcGVuZChjb25zdCBXcml0ZUJh
cnJpZXJCYXNlPFQsIFRyYWl0cz4mKTsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFt
ZSBUcmFpdHM+IHZvaWQgYXBwZW5kSGlkZGVuKGNvbnN0IFdyaXRlQmFycmllckJhc2U8VCwgVHJh
aXRzPiYpOwotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEl0ZXJhdG9yPiB2b2lkIGFwcGVuZChJdGVy
YXRvciBiZWdpbiAsIEl0ZXJhdG9yIGVuZCk7Ci0gICAgdm9pZCBhcHBlbmRWYWx1ZXMoY29uc3Qg
V3JpdGVCYXJyaWVyQmFzZTxVbmtub3duLCBSYXdWYWx1ZVRyYWl0czxVbmtub3duPj4qLCBzaXpl
X3QgY291bnQpOwotICAgIHZvaWQgYXBwZW5kVmFsdWVzSGlkZGVuKGNvbnN0IFdyaXRlQmFycmll
ckJhc2U8VW5rbm93biwgUmF3VmFsdWVUcmFpdHM8VW5rbm93bj4+Kiwgc2l6ZV90IGNvdW50KTsK
Ky8vICAgIE1hcmtTdGFja0FycmF5JiBjb2xsZWN0b3JNYXJrU3RhY2soKSB7IHJldHVybiBtX2Nv
bGxlY3RvclN0YWNrOyB9CisvLyAgICBNYXJrU3RhY2tBcnJheSYgbXV0YXRvck1hcmtTdGFjaygp
IHsgcmV0dXJuIG1fbXV0YXRvclN0YWNrOyB9CisvLyAgICBjb25zdCBNYXJrU3RhY2tBcnJheSYg
Y29sbGVjdG9yTWFya1N0YWNrKCkgY29uc3QgeyByZXR1cm4gbV9jb2xsZWN0b3JTdGFjazsgfQor
Ly8gICAgY29uc3QgTWFya1N0YWNrQXJyYXkmIG11dGF0b3JNYXJrU3RhY2soKSBjb25zdCB7IHJl
dHVybiBtX211dGF0b3JTdGFjazsgfQorICAgIAorLy8gICAgVk0mIHZtKCk7CisvLyAgICBjb25z
dCBWTSYgdm0oKSBjb25zdDsKKy8vICAgIEhlYXAqIGhlYXAoKSBjb25zdDsKKworICAgIHZvaWQg
YXBwZW5kX0NvbnNlcnZhdGl2ZVJvb3RzKGNvbnN0IENvbnNlcnZhdGl2ZVJvb3RzJikgZmluYWw7
CisKKyAgICB1c2luZyBCYXNlOjphcHBlbmQ7CisvLyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0
eXBlbmFtZSBUcmFpdHM+IHZvaWQgYXBwZW5kKGNvbnN0IFdyaXRlQmFycmllckJhc2U8VCwgVHJh
aXRzPiYpOworLy8gICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVHJhaXRzPiB2b2lk
IGFwcGVuZEhpZGRlbihjb25zdCBXcml0ZUJhcnJpZXJCYXNlPFQsIFRyYWl0cz4mKTsKKy8vICAg
IHRlbXBsYXRlPHR5cGVuYW1lIEl0ZXJhdG9yPiB2b2lkIGFwcGVuZChJdGVyYXRvciBiZWdpbiAs
IEl0ZXJhdG9yIGVuZCk7CisvLyAgICB2b2lkIGFwcGVuZFZhbHVlcyhjb25zdCBXcml0ZUJhcnJp
ZXJCYXNlPFVua25vd24sIFJhd1ZhbHVlVHJhaXRzPFVua25vd24+PiosIHNpemVfdCBjb3VudCk7
CisvLyAgICB2b2lkIGFwcGVuZFZhbHVlc0hpZGRlbihjb25zdCBXcml0ZUJhcnJpZXJCYXNlPFVu
a25vd24sIFJhd1ZhbHVlVHJhaXRzPFVua25vd24+PiosIHNpemVfdCBjb3VudCk7CiAgICAgCiAg
ICAgLy8gVGhlc2UgZG9uJ3QgcmVxdWlyZSB5b3UgdG8gcHJvdmUgdGhhdCB5b3UgaGF2ZSBhIFdy
aXRlQmFycmllcjw+LiBUaGF0IG1ha2VzIHNlbnNlCiAgICAgLy8gZm9yOgpAQCAtMTAzLDMyICsx
MjksMzYgQEAgcHVibGljOgogICAgIC8vCiAgICAgLy8gSWYgeW91IGFyZSBub3QgYSByb290IGFu
ZCB5b3UgZG9uJ3Qga25vdyB3aGF0IGtpbmQgb2YgYmFycmllciB5b3UgaGF2ZSwgdGhlbiB5b3UK
ICAgICAvLyBzaG91bGRuJ3QgY2FsbCB0aGVzZSBtZXRob2RzLgotICAgIHZvaWQgYXBwZW5kVW5i
YXJyaWVyZWQoSlNWYWx1ZSk7Ci0gICAgdm9pZCBhcHBlbmRVbmJhcnJpZXJlZChKU1ZhbHVlKiwg
c2l6ZV90KTsKLSAgICB2b2lkIGFwcGVuZFVuYmFycmllcmVkKEpTQ2VsbCopOworLy8gICAgdm9p
ZCBhcHBlbmRVbmJhcnJpZXJlZChKU1ZhbHVlKSBmaW5hbDsKKy8vICAgIHZvaWQgYXBwZW5kVW5i
YXJyaWVyZWQoSlNWYWx1ZSosIHNpemVfdCk7CisgICAgdm9pZCBhcHBlbmRVbmJhcnJpZXJlZElt
cGwoSlNDZWxsKikgZmluYWw7CiAgICAgCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICB2
b2lkIGFwcGVuZChjb25zdCBXZWFrPFQ+JiB3ZWFrKTsKKy8vICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFQ+CisvLyAgICB2b2lkIGFwcGVuZChjb25zdCBXZWFrPFQ+JiB3ZWFrKTsKICAgICAKLSAgICB2
b2lkIGFwcGVuZEhpZGRlblVuYmFycmllcmVkKEpTVmFsdWUpOwotICAgIHZvaWQgYXBwZW5kSGlk
ZGVuVW5iYXJyaWVyZWQoSlNDZWxsKik7CisvLyAgICB2b2lkIGFwcGVuZEhpZGRlblVuYmFycmll
cmVkKEpTVmFsdWUpIGZpbmFsOworICAgIHZvaWQgYXBwZW5kSGlkZGVuVW5iYXJyaWVyZWRJbXBs
KEpTQ2VsbCopIGZpbmFsOwogCi0gICAgYm9vbCBhZGRPcGFxdWVSb290KHZvaWQqKTsgLy8gUmV0
dXJucyB0cnVlIGlmIHRoZSByb290IHdhcyBuZXcuCisgICAgYm9vbCBhZGRPcGFxdWVSb290KHZv
aWQqKSBmaW5hbDsgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSByb290IHdhcyBuZXcuCiAgICAgCi0g
ICAgYm9vbCBjb250YWluc09wYXF1ZVJvb3Qodm9pZCopIGNvbnN0OworICAgIGJvb2wgY29udGFp
bnNPcGFxdWVSb290KHZvaWQqKSBjb25zdCBmaW5hbDsKIAotICAgIGJvb2wgaXNFbXB0eSgpIHsg
cmV0dXJuIG1fY29sbGVjdG9yU3RhY2suaXNFbXB0eSgpICYmIG1fbXV0YXRvclN0YWNrLmlzRW1w
dHkoKTsgfQorLy8gICAgYm9vbCBpc0VtcHR5KCkgeyByZXR1cm4gbV9jb2xsZWN0b3JTdGFjay5p
c0VtcHR5KCkgJiYgbV9tdXRhdG9yU3RhY2suaXNFbXB0eSgpOyB9CiAKICAgICBib29sIGlzRmly
c3RWaXNpdCgpIGNvbnN0IHsgcmV0dXJuIG1faXNGaXJzdFZpc2l0OyB9CiAKKyAgICBib29sIGlz
TWFya2VkKGNvbnN0IHZvaWQqKSBjb25zdCBmaW5hbDsKKyAgICBib29sIGlzTWFya2VkKE1hcmtl
ZEJsb2NrJiwgSGVhcENlbGwqKSBjb25zdCBmaW5hbDsKKyAgICBib29sIGlzTWFya2VkKFByZWNp
c2VBbGxvY2F0aW9uJiwgSGVhcENlbGwqKSBjb25zdCBmaW5hbDsKKwogICAgIHZvaWQgZGlkU3Rh
cnRNYXJraW5nKCk7CiAgICAgdm9pZCByZXNldCgpOwogICAgIHZvaWQgY2xlYXJNYXJrU3RhY2tz
KCk7CiAKICAgICBzaXplX3QgYnl0ZXNWaXNpdGVkKCkgY29uc3QgeyByZXR1cm4gbV9ieXRlc1Zp
c2l0ZWQ7IH0KLSAgICBzaXplX3QgdmlzaXRDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fdmlzaXRD
b3VudDsgfQotICAgIAotICAgIHZvaWQgYWRkVG9WaXNpdENvdW50KHNpemVfdCB2YWx1ZSkgeyBt
X3Zpc2l0Q291bnQgKz0gdmFsdWU7IH0KKy8vICAgIHNpemVfdCB2aXNpdENvdW50KCkgY29uc3Qg
eyByZXR1cm4gbV92aXNpdENvdW50OyB9CisKKy8vICAgIHZvaWQgYWRkVG9WaXNpdENvdW50KHNp
emVfdCB2YWx1ZSkgeyBtX3Zpc2l0Q291bnQgKz0gdmFsdWU7IH0KIAogICAgIHZvaWQgZG9uYXRl
KCk7CiAgICAgdm9pZCBkcmFpbihNb25vdG9uaWNUaW1lIHRpbWVvdXQgPSBNb25vdG9uaWNUaW1l
OjppbmZpbml0eSgpKTsKQEAgLTE1MSwyNCArMTgxLDI0IEBAIHB1YmxpYzoKICAgICAKICAgICAv
LyBUaGlzIGluZm9ybXMgdGhlIEdDIGFib3V0IGF1eGlsaWFyeSBvZiBzb21lIHNpemUgdGhhdCB3
ZSBhcmUga2VlcGluZyBhbGl2ZS4gSWYgeW91IGRvbid0IGRvCiAgICAgLy8gdGhpcyB0aGVuIHRo
ZSBzcGFjZSB3aWxsIGJlIGZyZWVkIGF0IGVuZCBvZiBHQy4KLSAgICB2b2lkIG1hcmtBdXhpbGlh
cnkoY29uc3Qgdm9pZCogYmFzZSk7CisgICAgdm9pZCBtYXJrQXV4aWxpYXJ5KGNvbnN0IHZvaWQq
IGJhc2UpIGZpbmFsOwogCi0gICAgdm9pZCByZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQoc2l6ZV90
KTsKKyAgICB2b2lkIHJlcG9ydEV4dHJhTWVtb3J5VmlzaXRlZChzaXplX3QpIGZpbmFsOwogI2lm
IEVOQUJMRShSRVNPVVJDRV9VU0FHRSkKLSAgICB2b2lkIHJlcG9ydEV4dGVybmFsTWVtb3J5Vmlz
aXRlZChzaXplX3QpOworICAgIHZvaWQgcmVwb3J0RXh0ZXJuYWxNZW1vcnlWaXNpdGVkKHNpemVf
dCkgZmluYWw7CiAjZW5kaWYKICAgICAKLSAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25z
dDsKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdCBmaW5hbDsKIAotICAgIGJvb2wg
aXNBbmFseXppbmdIZWFwKCkgY29uc3QgeyByZXR1cm4gISFtX2hlYXBBbmFseXplcjsgfQotICAg
IEhlYXBBbmFseXplciogaGVhcEFuYWx5emVyKCkgY29uc3QgeyByZXR1cm4gbV9oZWFwQW5hbHl6
ZXI7IH0KKy8vICAgIGJvb2wgaXNBbmFseXppbmdIZWFwKCkgY29uc3QgeyByZXR1cm4gISFtX2hl
YXBBbmFseXplcjsgfQorLy8gICAgSGVhcEFuYWx5emVyKiBoZWFwQW5hbHl6ZXIoKSBjb25zdCB7
IHJldHVybiBtX2hlYXBBbmFseXplcjsgfQogICAgIAotICAgIFJvb3RNYXJrUmVhc29uIHJvb3RN
YXJrUmVhc29uKCkgY29uc3QgeyByZXR1cm4gbV9yb290TWFya1JlYXNvbjsgfQotICAgIHZvaWQg
c2V0Um9vdE1hcmtSZWFzb24oUm9vdE1hcmtSZWFzb24gcmVhc29uKSB7IG1fcm9vdE1hcmtSZWFz
b24gPSByZWFzb247IH0KKy8vICAgIFJvb3RNYXJrUmVhc29uIHJvb3RNYXJrUmVhc29uKCkgY29u
c3QgeyByZXR1cm4gbV9yb290TWFya1JlYXNvbjsgfQorLy8gICAgdm9pZCBzZXRSb290TWFya1Jl
YXNvbihSb290TWFya1JlYXNvbiByZWFzb24pIHsgbV9yb290TWFya1JlYXNvbiA9IHJlYXNvbjsg
fQogCiAgICAgSGVhcFZlcnNpb24gbWFya2luZ1ZlcnNpb24oKSBjb25zdCB7IHJldHVybiBtX21h
cmtpbmdWZXJzaW9uOyB9CiAKLSAgICBib29sIG11dGF0b3JJc1N0b3BwZWQoKSBjb25zdCB7IHJl
dHVybiBtX211dGF0b3JJc1N0b3BwZWQ7IH0KKyAgICBib29sIG11dGF0b3JJc1N0b3BwZWQoKSBj
b25zdCBmaW5hbCB7IHJldHVybiBtX211dGF0b3JJc1N0b3BwZWQ7IH0KICAgICAKICAgICBMb2Nr
JiByaWdodFRvUnVuKCkgeyByZXR1cm4gbV9yaWdodFRvUnVuOyB9CiAgICAgCkBAIC0xODAsMTAg
KzIxMCwxMCBAQCBwdWJsaWM6CiAgICAgCiAgICAgdm9pZCBvcHRpbWl6ZUZvclN0b3BwZWRNdXRh
dG9yKCk7CiAgICAgCi0gICAgdm9pZCBkaWRSYWNlKGNvbnN0IFZpc2l0UmFjZUtleSYpOworICAg
IHZvaWQgZGlkUmFjZShjb25zdCBWaXNpdFJhY2VLZXkmKSBmaW5hbDsKICAgICB2b2lkIGRpZFJh
Y2UoSlNDZWxsKiBjZWxsLCBjb25zdCBjaGFyKiByZWFzb24pIHsgZGlkUmFjZShWaXNpdFJhY2VL
ZXkoY2VsbCwgcmVhc29uKSk7IH0KICAgICAKLSAgICB2b2lkIHZpc2l0QXNDb25zdHJhaW50KGNv
bnN0IEpTQ2VsbCopOworICAgIHZvaWQgdmlzaXRBc0NvbnN0cmFpbnQoY29uc3QgSlNDZWxsKikg
ZmluYWw7CiAgICAgCiAgICAgYm9vbCBkaWRSZWFjaFRlcm1pbmF0aW9uKCk7CiAgICAgCkBAIC0x
OTMsNyArMjIzLDcgQEAgcHVibGljOgogICAgIAogICAgIGNvbnN0IGNoYXIqIGNvZGVOYW1lKCkg
Y29uc3QgeyByZXR1cm4gbV9jb2RlTmFtZS5kYXRhKCk7IH0KICAgICAKLSAgICBKU19FWFBPUlRf
UFJJVkFURSB2b2lkIGFkZFBhcmFsbGVsQ29uc3RyYWludFRhc2soUmVmUHRyPFNoYXJlZFRhc2s8
dm9pZChTbG90VmlzaXRvciYpPj4pOworICAgIHZvaWQgYWRkUGFyYWxsZWxDb25zdHJhaW50VGFz
ayhSZWZQdHI8U2hhcmVkVGFzazx2b2lkKEFic3RyYWN0U2xvdFZpc2l0b3ImKT4+KSBmaW5hbDsK
IAogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgUGFyYWxsZWxNb2RlRW5hYmxlcjsKQEAgLTIz
MiwyMyArMjYyLDIzIEBAIHByaXZhdGU6CiAKICAgICBNYXJrU3RhY2tBcnJheSYgY29ycmVzcG9u
ZGluZ0dsb2JhbFN0YWNrKE1hcmtTdGFja0FycmF5Jik7CiAKLSAgICBNYXJrU3RhY2tBcnJheSBt
X2NvbGxlY3RvclN0YWNrOwotICAgIE1hcmtTdGFja0FycmF5IG1fbXV0YXRvclN0YWNrOwotICAg
IAorLy8gICAgTWFya1N0YWNrQXJyYXkgbV9jb2xsZWN0b3JTdGFjazsKKy8vICAgIE1hcmtTdGFj
a0FycmF5IG1fbXV0YXRvclN0YWNrOworCiAgICAgc2l6ZV90IG1fYnl0ZXNWaXNpdGVkOwotICAg
IHNpemVfdCBtX3Zpc2l0Q291bnQ7CisvLyAgICBzaXplX3QgbV92aXNpdENvdW50OwogICAgIHNp
emVfdCBtX25vbkNlbGxWaXNpdENvdW50IHsgMCB9OyAvLyBVc2VkIGZvciBpbmNyZW1lbnRhbCBk
cmFpbmluZywgaWdub3JlZCBvdGhlcndpc2UuCiAgICAgQ2hlY2tlZFNpemUgbV9leHRyYU1lbW9y
eVNpemUgeyAwIH07CiAgICAgYm9vbCBtX2lzSW5QYXJhbGxlbE1vZGU7CiAgICAgYm9vbCBtX2ln
bm9yZU5ld09wYXF1ZVJvb3RzIHsgZmFsc2UgfTsgLy8gVXNlZnVsIGFzIGEgZGVidWdnaW5nIG1v
ZGUuCiAKICAgICBIZWFwVmVyc2lvbiBtX21hcmtpbmdWZXJzaW9uOwotICAgIAotICAgIEhlYXAm
IG1faGVhcDsKKworLy8gICAgSGVhcCYgbV9oZWFwOwogCiAgICAgSGVhcEFuYWx5emVyKiBtX2hl
YXBBbmFseXplciB7IG51bGxwdHIgfTsKICAgICBKU0NlbGwqIG1fY3VycmVudENlbGwgeyBudWxs
cHRyIH07Ci0gICAgUm9vdE1hcmtSZWFzb24gbV9yb290TWFya1JlYXNvbiB7IFJvb3RNYXJrUmVh
c29uOjpOb25lIH07CisvLyAgICBSb290TWFya1JlYXNvbiBtX3Jvb3RNYXJrUmVhc29uIHsgUm9v
dE1hcmtSZWFzb246Ok5vbmUgfTsKICAgICBib29sIG1faXNGaXJzdFZpc2l0IHsgZmFsc2UgfTsK
ICAgICBib29sIG1fbXV0YXRvcklzU3RvcHBlZCB7IGZhbHNlIH07CiAgICAgYm9vbCBtX2Nhbk9w
dGltaXplRm9yU3RvcHBlZE11dGF0b3IgeyBmYWxzZSB9OwpAQCAtMjU2LDE1ICsyODYsMTUgQEAg
cHJpdmF0ZToKICAgICAKICAgICBDU3RyaW5nIG1fY29kZU5hbWU7CiAgICAgCi0gICAgTWFya2lu
Z0NvbnN0cmFpbnQqIG1fY3VycmVudENvbnN0cmFpbnQgeyBudWxscHRyIH07Ci0gICAgTWFya2lu
Z0NvbnN0cmFpbnRTb2x2ZXIqIG1fY3VycmVudFNvbHZlciB7IG51bGxwdHIgfTsKKy8vICAgIE1h
cmtpbmdDb25zdHJhaW50KiBtX2N1cnJlbnRDb25zdHJhaW50IHsgbnVsbHB0ciB9OworLy8gICAg
TWFya2luZ0NvbnN0cmFpbnRTb2x2ZXIqIG1fY3VycmVudFNvbHZlciB7IG51bGxwdHIgfTsKICAg
ICAKICAgICAvLyBQdXQgcGFkZGluZyBoZXJlIHRvIG1pdGlnYXRlIGZhbHNlIHNoYXJpbmcgYmV0
d2VlbiBtdWx0aXBsZSBTbG90VmlzaXRvcnMuCiAgICAgY2hhciBwYWRkaW5nWzY0XTsKLXB1Ymxp
YzoKKy8vcHVibGljOgogI2lmIEFTU0VSVF9FTkFCTEVECi0gICAgYm9vbCBtX2lzQ2hlY2tpbmdG
b3JEZWZhdWx0TWFya1Zpb2xhdGlvbjsKLSAgICBib29sIG1faXNEcmFpbmluZzsKKyAgICBib29s
IG1faXNDaGVja2luZ0ZvckRlZmF1bHRNYXJrVmlvbGF0aW9uIHsgZmFsc2UgfTsKKy8vICAgIGJv
b2wgbV9pc0RyYWluaW5nOwogI2VuZGlmCiB9OwogCkBAIC0yODcsMjMgKzMxNywyMyBAQCBwcml2
YXRlOgogICAgIFNsb3RWaXNpdG9yJiBtX3N0YWNrOwogfTsKIAotY2xhc3MgU2V0Um9vdE1hcmtS
ZWFzb25TY29wZSB7Ci1wdWJsaWM6Ci0gICAgU2V0Um9vdE1hcmtSZWFzb25TY29wZShTbG90Vmlz
aXRvciYgdmlzaXRvciwgU2xvdFZpc2l0b3I6OlJvb3RNYXJrUmVhc29uIHJlYXNvbikKLSAgICAg
ICAgOiBtX3Zpc2l0b3IodmlzaXRvcikKLSAgICAgICAgLCBtX3ByZXZpb3VzUmVhc29uKHZpc2l0
b3Iucm9vdE1hcmtSZWFzb24oKSkKLSAgICB7Ci0gICAgICAgIG1fdmlzaXRvci5zZXRSb290TWFy
a1JlYXNvbihyZWFzb24pOwotICAgIH0KLQotICAgIH5TZXRSb290TWFya1JlYXNvblNjb3BlKCkK
LSAgICB7Ci0gICAgICAgIG1fdmlzaXRvci5zZXRSb290TWFya1JlYXNvbihtX3ByZXZpb3VzUmVh
c29uKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgU2xvdFZpc2l0b3ImIG1fdmlzaXRvcjsKLSAg
ICBTbG90VmlzaXRvcjo6Um9vdE1hcmtSZWFzb24gbV9wcmV2aW91c1JlYXNvbjsKLX07Ci0KKy8v
Y2xhc3MgU2V0Um9vdE1hcmtSZWFzb25TY29wZSB7CisvL3B1YmxpYzoKKy8vICAgIFNldFJvb3RN
YXJrUmVhc29uU2NvcGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IsIFNsb3RWaXNpdG9yOjpSb290TWFy
a1JlYXNvbiByZWFzb24pCisvLyAgICAgICAgOiBtX3Zpc2l0b3IodmlzaXRvcikKKy8vICAgICAg
ICAsIG1fcHJldmlvdXNSZWFzb24odmlzaXRvci5yb290TWFya1JlYXNvbigpKQorLy8gICAgewor
Ly8gICAgICAgIG1fdmlzaXRvci5zZXRSb290TWFya1JlYXNvbihyZWFzb24pOworLy8gICAgfQor
Ly8KKy8vICAgIH5TZXRSb290TWFya1JlYXNvblNjb3BlKCkKKy8vICAgIHsKKy8vICAgICAgICBt
X3Zpc2l0b3Iuc2V0Um9vdE1hcmtSZWFzb24obV9wcmV2aW91c1JlYXNvbik7CisvLyAgICB9Cisv
LworLy9wcml2YXRlOgorLy8gICAgU2xvdFZpc2l0b3ImIG1fdmlzaXRvcjsKKy8vICAgIFNsb3RW
aXNpdG9yOjpSb290TWFya1JlYXNvbiBtX3ByZXZpb3VzUmVhc29uOworLy99OworLy8KIH0gLy8g
bmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0
b3JJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xv
dFZpc2l0b3JJbmxpbmVzLmgJKHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL1Nsb3RWaXNpdG9ySW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjUsMjYg
KzI1LDI5IEBACiAKICNwcmFnbWEgb25jZQogCisjaW5jbHVkZSAiQWJzdHJhY3RTbG90VmlzaXRv
cklubGluZXMuaCIKICNpbmNsdWRlICJTbG90VmlzaXRvci5oIgotI2luY2x1ZGUgIldlYWsuaCIK
LSNpbmNsdWRlICJXZWFrSW5saW5lcy5oIgorI2luY2x1ZGUgIk1hcmtlZEJsb2NrLmgiCisjaW5j
bHVkZSAiUHJlY2lzZUFsbG9jYXRpb24uaCIKKy8vI2luY2x1ZGUgIldlYWsuaCIKKy8vI2luY2x1
ZGUgIldlYWtJbmxpbmVzLmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCi1BTFdBWVNfSU5MSU5FIHZv
aWQgU2xvdFZpc2l0b3I6OmFwcGVuZFVuYmFycmllcmVkKEpTVmFsdWUqIHNsb3QsIHNpemVfdCBj
b3VudCkKLXsKLSAgICBmb3IgKHNpemVfdCBpID0gY291bnQ7IGktLTspCi0gICAgICAgIGFwcGVu
ZFVuYmFycmllcmVkKHNsb3RbaV0pOwotfQorLy9BTFdBWVNfSU5MSU5FIHZvaWQgU2xvdFZpc2l0
b3I6OmFwcGVuZFVuYmFycmllcmVkKEpTVmFsdWUqIHNsb3QsIHNpemVfdCBjb3VudCkKKy8vewor
Ly8gICAgZm9yIChzaXplX3QgaSA9IGNvdW50OyBpLS07KQorLy8gICAgICAgIGFwcGVuZFVuYmFy
cmllcmVkKHNsb3RbaV0pOworLy99CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBTbG90VmlzaXRvcjo6
YXBwZW5kVW5iYXJyaWVyZWQoSlNDZWxsKiBjZWxsKQorQUxXQVlTX0lOTElORSB2b2lkIFNsb3RW
aXNpdG9yOjphcHBlbmRVbmJhcnJpZXJlZEltcGwoSlNDZWxsKiBjZWxsKQogewogICAgIC8vIFRo
aXMgbmVlZHMgdG8gYmUgd3JpdHRlbiBpbiBhIHZlcnkgc3BlY2lmaWMgd2F5IHRvIGVuc3VyZSB0
aGF0IGl0IGdldHMgaW5saW5lZAogICAgIC8vIHByb3Blcmx5LiBJbiBwYXJ0aWN1bGFyLCBpdCBh
cHBlYXJzIHRoYXQgdXNpbmcgdGVtcGxhdGVzIGhlcmUgYnJlYWtzIEFMV0FZU19JTkxJTkUuCiAg
ICAgCi0gICAgaWYgKCFjZWxsKQotICAgICAgICByZXR1cm47Ci0gICAgCisvLyAgICBpZiAoIWNl
bGwpCisvLyAgICAgICAgcmV0dXJuOworLy8KICAgICBEZXBlbmRlbmN5IGRlcGVuZGVuY3k7CiAg
ICAgaWYgKFVOTElLRUxZKGNlbGwtPmlzUHJlY2lzZUFsbG9jYXRpb24oKSkpIHsKICAgICAgICAg
aWYgKExJS0VMWShjZWxsLT5wcmVjaXNlQWxsb2NhdGlvbigpLmlzTWFya2VkKCkpKSB7CkBAIC02
MywyNSArNjYsMjUgQEAgQUxXQVlTX0lOTElORSB2b2lkIFNsb3RWaXNpdG9yOjphcHBlbmRVbgog
ICAgIGFwcGVuZFNsb3coY2VsbCwgZGVwZW5kZW5jeSk7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9p
ZCBTbG90VmlzaXRvcjo6YXBwZW5kVW5iYXJyaWVyZWQoSlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICBp
ZiAodmFsdWUuaXNDZWxsKCkpCi0gICAgICAgIGFwcGVuZFVuYmFycmllcmVkKHZhbHVlLmFzQ2Vs
bCgpKTsKLX0KKy8vQUxXQVlTX0lOTElORSB2b2lkIFNsb3RWaXNpdG9yOjphcHBlbmRVbmJhcnJp
ZXJlZChKU1ZhbHVlIHZhbHVlKQorLy97CisvLyAgICBpZiAodmFsdWUuaXNDZWxsKCkpCisvLyAg
ICAgICAgYXBwZW5kVW5iYXJyaWVyZWQodmFsdWUuYXNDZWxsKCkpOworLy99CisKKy8vQUxXQVlT
X0lOTElORSB2b2lkIFNsb3RWaXNpdG9yOjphcHBlbmRIaWRkZW5VbmJhcnJpZXJlZChKU1ZhbHVl
IHZhbHVlKQorLy97CisvLyAgICBpZiAodmFsdWUuaXNDZWxsKCkpCisvLyAgICAgICAgYXBwZW5k
SGlkZGVuVW5iYXJyaWVyZWQodmFsdWUuYXNDZWxsKCkpOworLy99CiAKLUFMV0FZU19JTkxJTkUg
dm9pZCBTbG90VmlzaXRvcjo6YXBwZW5kSGlkZGVuVW5iYXJyaWVyZWQoSlNWYWx1ZSB2YWx1ZSkK
LXsKLSAgICBpZiAodmFsdWUuaXNDZWxsKCkpCi0gICAgICAgIGFwcGVuZEhpZGRlblVuYmFycmll
cmVkKHZhbHVlLmFzQ2VsbCgpKTsKLX0KLQotQUxXQVlTX0lOTElORSB2b2lkIFNsb3RWaXNpdG9y
OjphcHBlbmRIaWRkZW5VbmJhcnJpZXJlZChKU0NlbGwqIGNlbGwpCitBTFdBWVNfSU5MSU5FIHZv
aWQgU2xvdFZpc2l0b3I6OmFwcGVuZEhpZGRlblVuYmFycmllcmVkSW1wbChKU0NlbGwqIGNlbGwp
CiB7CiAgICAgLy8gVGhpcyBuZWVkcyB0byBiZSB3cml0dGVuIGluIGEgdmVyeSBzcGVjaWZpYyB3
YXkgdG8gZW5zdXJlIHRoYXQgaXQgZ2V0cyBpbmxpbmVkCiAgICAgLy8gcHJvcGVybHkuIEluIHBh
cnRpY3VsYXIsIGl0IGFwcGVhcnMgdGhhdCB1c2luZyB0ZW1wbGF0ZXMgaGVyZSBicmVha3MgQUxX
QVlTX0lOTElORS4KICAgICAKLSAgICBpZiAoIWNlbGwpCi0gICAgICAgIHJldHVybjsKKy8vICAg
IGlmICghY2VsbCkKKy8vICAgICAgICByZXR1cm47CiAgICAgCiAgICAgRGVwZW5kZW5jeSBkZXBl
bmRlbmN5OwogICAgIGlmIChVTkxJS0VMWShjZWxsLT5pc1ByZWNpc2VBbGxvY2F0aW9uKCkpKSB7
CkBAIC05Nyw0MiArMTAwLDQyIEBAIEFMV0FZU19JTkxJTkUgdm9pZCBTbG90VmlzaXRvcjo6YXBw
ZW5kSGkKICAgICBhcHBlbmRIaWRkZW5TbG93KGNlbGwsIGRlcGVuZGVuY3kpOwogfQogCi10ZW1w
bGF0ZTx0eXBlbmFtZSBUPgotQUxXQVlTX0lOTElORSB2b2lkIFNsb3RWaXNpdG9yOjphcHBlbmQo
Y29uc3QgV2VhazxUPiYgd2VhaykKLXsKLSAgICBhcHBlbmRVbmJhcnJpZXJlZCh3ZWFrLmdldCgp
KTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVHJhaXRzPgotQUxXQVlTX0lO
TElORSB2b2lkIFNsb3RWaXNpdG9yOjphcHBlbmQoY29uc3QgV3JpdGVCYXJyaWVyQmFzZTxULCBU
cmFpdHM+JiBzbG90KQotewotICAgIGFwcGVuZFVuYmFycmllcmVkKHNsb3QuZ2V0KCkpOwotfQot
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBUcmFpdHM+Ci1BTFdBWVNfSU5MSU5FIHZv
aWQgU2xvdFZpc2l0b3I6OmFwcGVuZEhpZGRlbihjb25zdCBXcml0ZUJhcnJpZXJCYXNlPFQsIFRy
YWl0cz4mIHNsb3QpCi17Ci0gICAgYXBwZW5kSGlkZGVuVW5iYXJyaWVyZWQoc2xvdC5nZXQoKSk7
Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIEl0ZXJhdG9yPgotQUxXQVlTX0lOTElORSB2b2lkIFNs
b3RWaXNpdG9yOjphcHBlbmQoSXRlcmF0b3IgYmVnaW4sIEl0ZXJhdG9yIGVuZCkKLXsKLSAgICBm
b3IgKGF1dG8gaXQgPSBiZWdpbjsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBhcHBlbmQoKml0
KTsKLX0KLQotQUxXQVlTX0lOTElORSB2b2lkIFNsb3RWaXNpdG9yOjphcHBlbmRWYWx1ZXMoY29u
c3QgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiogYmFycmllcnMsIHNpemVfdCBjb3VudCkKLXsK
LSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpCi0gICAgICAgIGFwcGVuZChi
YXJyaWVyc1tpXSk7Ci19Ci0KLUFMV0FZU19JTkxJTkUgdm9pZCBTbG90VmlzaXRvcjo6YXBwZW5k
VmFsdWVzSGlkZGVuKGNvbnN0IFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4qIGJhcnJpZXJzLCBz
aXplX3QgY291bnQpCi17Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKQot
ICAgICAgICBhcHBlbmRIaWRkZW4oYmFycmllcnNbaV0pOwotfQorLy90ZW1wbGF0ZTx0eXBlbmFt
ZSBUPgorLy9BTFdBWVNfSU5MSU5FIHZvaWQgU2xvdFZpc2l0b3I6OmFwcGVuZChjb25zdCBXZWFr
PFQ+JiB3ZWFrKQorLy97CisvLyAgICBhcHBlbmRVbmJhcnJpZXJlZCh3ZWFrLmdldCgpKTsKKy8v
fQorLy8KKy8vdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVHJhaXRzPgorLy9BTFdBWVNf
SU5MSU5FIHZvaWQgU2xvdFZpc2l0b3I6OmFwcGVuZChjb25zdCBXcml0ZUJhcnJpZXJCYXNlPFQs
IFRyYWl0cz4mIHNsb3QpCisvL3sKKy8vICAgIGFwcGVuZFVuYmFycmllcmVkKHNsb3QuZ2V0KCkp
OworLy99CisvLworLy90ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBUcmFpdHM+CisvL0FM
V0FZU19JTkxJTkUgdm9pZCBTbG90VmlzaXRvcjo6YXBwZW5kSGlkZGVuKGNvbnN0IFdyaXRlQmFy
cmllckJhc2U8VCwgVHJhaXRzPiYgc2xvdCkKKy8veworLy8gICAgYXBwZW5kSGlkZGVuVW5iYXJy
aWVyZWQoc2xvdC5nZXQoKSk7CisvL30KKy8vCisvL3RlbXBsYXRlPHR5cGVuYW1lIEl0ZXJhdG9y
PgorLy9BTFdBWVNfSU5MSU5FIHZvaWQgU2xvdFZpc2l0b3I6OmFwcGVuZChJdGVyYXRvciBiZWdp
biwgSXRlcmF0b3IgZW5kKQorLy97CisvLyAgICBmb3IgKGF1dG8gaXQgPSBiZWdpbjsgaXQgIT0g
ZW5kOyArK2l0KQorLy8gICAgICAgIGFwcGVuZCgqaXQpOworLy99CisKKy8vQUxXQVlTX0lOTElO
RSB2b2lkIFNsb3RWaXNpdG9yOjphcHBlbmRWYWx1ZXMoY29uc3QgV3JpdGVCYXJyaWVyQmFzZTxV
bmtub3duPiogYmFycmllcnMsIHNpemVfdCBjb3VudCkKKy8veworLy8gICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBjb3VudDsgKytpKQorLy8gICAgICAgIGFwcGVuZChiYXJyaWVyc1tpXSk7Cisv
L30KKy8vCisvL0FMV0FZU19JTkxJTkUgdm9pZCBTbG90VmlzaXRvcjo6YXBwZW5kVmFsdWVzSGlk
ZGVuKGNvbnN0IFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4qIGJhcnJpZXJzLCBzaXplX3QgY291
bnQpCisvL3sKKy8vICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY291bnQ7ICsraSkKKy8vICAg
ICAgICBhcHBlbmRIaWRkZW4oYmFycmllcnNbaV0pOworLy99CiAKIGlubGluZSBib29sIFNsb3RW
aXNpdG9yOjphZGRPcGFxdWVSb290KHZvaWQqIHB0cikKIHsKQEAgLTE1MSw2ICsxNTQsMjEgQEAg
aW5saW5lIGJvb2wgU2xvdFZpc2l0b3I6OmNvbnRhaW5zT3BhcXVlUgogICAgIHJldHVybiBoZWFw
KCktPm1fb3BhcXVlUm9vdHMuY29udGFpbnMocHRyKTsKIH0KIAoraW5saW5lIGJvb2wgU2xvdFZp
c2l0b3I6OmlzTWFya2VkKGNvbnN0IHZvaWQqIHApIGNvbnN0Cit7CisgICAgcmV0dXJuIGhlYXAo
KS0+aXNNYXJrZWQocCk7Cit9CisKK2lubGluZSBib29sIFNsb3RWaXNpdG9yOjppc01hcmtlZChN
YXJrZWRCbG9jayYgY29udGFpbmVyLCBIZWFwQ2VsbCogY2VsbCkgY29uc3QKK3sKKyAgICByZXR1
cm4gY29udGFpbmVyLmlzTWFya2VkKG1hcmtpbmdWZXJzaW9uKCksIGNlbGwpOworfQorCitpbmxp
bmUgYm9vbCBTbG90VmlzaXRvcjo6aXNNYXJrZWQoUHJlY2lzZUFsbG9jYXRpb24mIGNvbnRhaW5l
ciwgSGVhcENlbGwqIGNlbGwpIGNvbnN0Cit7CisgICAgcmV0dXJuIGNvbnRhaW5lci5pc01hcmtl
ZChtYXJraW5nVmVyc2lvbigpLCBjZWxsKTsKK30KKwogaW5saW5lIHZvaWQgU2xvdFZpc2l0b3I6
OnJlcG9ydEV4dHJhTWVtb3J5VmlzaXRlZChzaXplX3Qgc2l6ZSkKIHsKICAgICBpZiAobV9pc0Zp
cnN0VmlzaXQpIHsKQEAgLTE2OSwyMCArMTg3LDIwIEBAIGlubGluZSB2b2lkIFNsb3RWaXNpdG9y
OjpyZXBvcnRFeHRlcm5hbE0KIH0KICNlbmRpZgogCi1pbmxpbmUgSGVhcCogU2xvdFZpc2l0b3I6
OmhlYXAoKSBjb25zdAotewotICAgIHJldHVybiAmbV9oZWFwOwotfQotCi1pbmxpbmUgVk0mIFNs
b3RWaXNpdG9yOjp2bSgpCi17Ci0gICAgcmV0dXJuIG1faGVhcC52bSgpOwotfQotCi1pbmxpbmUg
Y29uc3QgVk0mIFNsb3RWaXNpdG9yOjp2bSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1faGVhcC52
bSgpOwotfQorLy9pbmxpbmUgSGVhcCogU2xvdFZpc2l0b3I6OmhlYXAoKSBjb25zdAorLy97Cisv
LyAgICByZXR1cm4gJm1faGVhcDsKKy8vfQorLy8KKy8vaW5saW5lIFZNJiBTbG90VmlzaXRvcjo6
dm0oKQorLy97CisvLyAgICByZXR1cm4gbV9oZWFwLnZtKCk7CisvL30KKy8vCisvL2lubGluZSBj
b25zdCBWTSYgU2xvdFZpc2l0b3I6OnZtKCkgY29uc3QKKy8veworLy8gICAgcmV0dXJuIG1faGVh
cC52bSgpOworLy99CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CiBJdGVyYXRpb25TdGF0dXMg
U2xvdFZpc2l0b3I6OmZvckVhY2hNYXJrU3RhY2soY29uc3QgRnVuYyYgZnVuYykKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yTWFjcm9zLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3JNYWNyb3MuaAkobm9uZXhp
c3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvck1hY3Jvcy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTE3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKK25hbWVzcGFjZSBKU0Mgewor
CitjbGFzcyBBYnN0cmFjdFNsb3RWaXNpdG9yOworY2xhc3MgSlNDZWxsOworY2xhc3MgU2xvdFZp
c2l0b3I7CisKKyNkZWZpbmUgREVDTEFSRV9VTlVTRURfU0xPVF9WSVNJVE9SX1NUUlVDVF9FWFBB
TkRFUjIoY291bnRlcl8pIFwKKyAgICBzdHJ1Y3QgVW51c2VkU2xvdFZpc2l0b3JTdHJ1Y3RTb1dl
Q2FuSGF2ZUFTZW1pY29sb24jI2NvdW50ZXJfIHsgfQorCisjZGVmaW5lIERFQ0xBUkVfVU5VU0VE
X1NMT1RfVklTSVRPUl9TVFJVQ1RfRVhQQU5ERVIoY291bnRlcl8pIFwKKyAgICBERUNMQVJFX1VO
VVNFRF9TTE9UX1ZJU0lUT1JfU1RSVUNUX0VYUEFOREVSMihjb3VudGVyXykKKworI2RlZmluZSBE
RUNMQVJFX1VOVVNFRF9TTE9UX1ZJU0lUT1JfU1RSVUNUKCkgXAorICAgIERFQ0xBUkVfVU5VU0VE
X1NMT1RfVklTSVRPUl9TVFJVQ1RfRVhQQU5ERVIoX19DT1VOVEVSX18pCisKKy8vIE1hY3JvcyBm
b3IgaW5zdGFuY2UgY3VzdG9tIHZpc2l0b3IgbWV0aG9kLgorCisjZGVmaW5lIERFQ0xBUkVfSU5T
VEFOQ0VfU0xPVF9WSVNJVE9SX01FVEhPRF9JTVBMKHJldHVyblR5cGVfLCBtZXRob2ROYW1lXywg
cG9zdE1vZGlmaWVyXykgXAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHJldHVyblR5
cGVfIG1ldGhvZE5hbWVfIyNJbXBsKFZpc2l0b3ImIHZpc2l0b3IpOyBcCisgICAgcmV0dXJuVHlw
ZV8gbWV0aG9kTmFtZV8oU2xvdFZpc2l0b3ImKSBwb3N0TW9kaWZpZXJfOyBcCisgICAgcmV0dXJu
VHlwZV8gbWV0aG9kTmFtZV8oQWJzdHJhY3RTbG90VmlzaXRvciYpIHBvc3RNb2RpZmllcl87IFwK
KyAgICBERUNMQVJFX1VOVVNFRF9TTE9UX1ZJU0lUT1JfU1RSVUNUKCkKKworI2RlZmluZSBERUNM
QVJFX0lOU1RBTkNFX1NMT1RfVklTSVRPUl9NRVRIT0QocmV0dXJuVHlwZV8sIG1ldGhvZE5hbWVf
KSBcCisgICAgREVDTEFSRV9JTlNUQU5DRV9TTE9UX1ZJU0lUT1JfTUVUSE9EX0lNUEwocmV0dXJu
VHlwZV8sIG1ldGhvZE5hbWVfLCApCisKKworI2RlZmluZSBERUZJTkVfSU5TVEFOQ0VfU0xPVF9W
SVNJVE9SX01FVEhPRChyZXR1cm5UeXBlXywgY2xhc3NOYW1lXywgbWV0aG9kTmFtZV8pIFwKKyAg
ICByZXR1cm5UeXBlXyBjbGFzc05hbWVfOjptZXRob2ROYW1lXyhTbG90VmlzaXRvciYgdmlzaXRv
cikgeyBtZXRob2ROYW1lXyMjSW1wbCh2aXNpdG9yKTsgfSBcCisgICAgcmV0dXJuVHlwZV8gY2xh
c3NOYW1lXzo6bWV0aG9kTmFtZV8oQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikgIHsgbWV0
aG9kTmFtZV8jI0ltcGwodmlzaXRvcik7IH0gXAorICAgIERFQ0xBUkVfVU5VU0VEX1NMT1RfVklT
SVRPUl9TVFJVQ1QoKQorCisvLyBNYWNyb3MgZm9yIGluc3RhbmNlIHZpc2l0Q2hpbGRyZW4oKS4K
KworI2RlZmluZSBERUNMQVJFX0lOU1RBTkNFX1ZJU0lUX0NISUxEUkVOIFwKKyAgICBERUNMQVJF
X0lOU1RBTkNFX1NMT1RfVklTSVRPUl9NRVRIT0Qodm9pZCwgdmlzaXRDaGlsZHJlbikKKworCisj
ZGVmaW5lIERFRklORV9JTlNUQU5DRV9WSVNJVF9DSElMRFJFTihjbGFzc05hbWVfKSBcCisgICAg
REVGSU5FX0lOU1RBTkNFX1NMT1RfVklTSVRPUl9NRVRIT0Qodm9pZCwgY2xhc3NOYW1lXywgdmlz
aXRDaGlsZHJlbikKKworLy8gTWFjcm9zIGZvciBzdGF0aWMgdmlzaXRDaGlsZHJlbigpLgorCisj
ZGVmaW5lIERFQ0xBUkVfVklTSVRfQ0hJTERSRU5fSU1QTCBcCisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgVmlzaXRvcj4gc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiwgVmlzaXRv
ciYpCisKKyNkZWZpbmUgREVDTEFSRV9WSVNJVF9DSElMRFJFTiBcCisgICAgREVDTEFSRV9WSVNJ
VF9DSElMRFJFTl9JTVBMOyBcCisgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwq
IGNlbGwsIEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpOyBcCisgICAgc3RhdGljIHZvaWQg
dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorCisjZGVm
aW5lIERFQ0xBUkVfRVhQT1JUX1ZJU0lUX0NISUxEUkVOIFwKKyAgICBERUNMQVJFX1ZJU0lUX0NI
SUxEUkVOX0lNUEw7IFwKKyAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCB2aXNpdENo
aWxkcmVuKEpTQ2VsbCosIEFic3RyYWN0U2xvdFZpc2l0b3ImKTsgXAorICAgIEpTX0VYUE9SVF9Q
UklWQVRFIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKQor
CisjZGVmaW5lIERFQ0xBUkVfSU5MSU5FX1ZJU0lUX0NISUxEUkVOIFwKKyAgICBERUNMQVJFX1ZJ
U0lUX0NISUxEUkVOX0lNUEw7IFwKKyAgICBpbmxpbmUgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJl
bihKU0NlbGwqLCBBYnN0cmFjdFNsb3RWaXNpdG9yJik7IFwKKyAgICBpbmxpbmUgc3RhdGljIHZv
aWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpCisKKyNkZWZpbmUgREVDTEFS
RV9URU1QTEFURV9WSVNJVF9DSElMRFJFTiBcCisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTgor
CisKKyNkZWZpbmUgREVGSU5FX1ZJU0lUX0NISUxEUkVOKGNsYXNzTmFtZV8pIFwKKyAgICB2b2lk
IGNsYXNzTmFtZV86OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBBYnN0cmFjdFNsb3RWaXNp
dG9yJiB2aXNpdG9yKSB7IHZpc2l0Q2hpbGRyZW5JbXBsKGNlbGwsIHZpc2l0b3IpOyB9IFwKKyAg
ICB2b2lkIGNsYXNzTmFtZV86OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRv
ciYgdmlzaXRvcikgeyB2aXNpdENoaWxkcmVuSW1wbChjZWxsLCB2aXNpdG9yKTsgfSBcCisgICAg
REVDTEFSRV9VTlVTRURfU0xPVF9WSVNJVE9SX1NUUlVDVCgpCisKKyNkZWZpbmUgREVGSU5FX0VY
UE9SVF9WSVNJVF9DSElMRFJFTihjbGFzc05hbWVfKSBcCisgICAgSlNfRVhQT1JUX1BSSVZBVEUg
dm9pZCBjbGFzc05hbWVfOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgQWJzdHJhY3RTbG90
VmlzaXRvciYgdmlzaXRvcikgeyB2aXNpdENoaWxkcmVuSW1wbChjZWxsLCB2aXNpdG9yKTsgfSBc
CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBjbGFzc05hbWVfOjp2aXNpdENoaWxkcmVuKEpT
Q2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsgdmlzaXRDaGlsZHJlbkltcGwoY2Vs
bCwgdmlzaXRvcik7IH0gXAorICAgIERFQ0xBUkVfVU5VU0VEX1NMT1RfVklTSVRPUl9TVFJVQ1Qo
KQorCisjZGVmaW5lIERFRklORV9JTkxJTkVfVklTSVRfQ0hJTERSRU4oY2xhc3NOYW1lXykgXAor
ICAgIGlubGluZSB2b2lkIGNsYXNzTmFtZV86OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBB
YnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKSB7IHZpc2l0Q2hpbGRyZW5JbXBsKGNlbGwsIHZp
c2l0b3IpOyB9IFwKKyAgICBpbmxpbmUgdm9pZCBjbGFzc05hbWVfOjp2aXNpdENoaWxkcmVuKEpT
Q2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsgdmlzaXRDaGlsZHJlbkltcGwoY2Vs
bCwgdmlzaXRvcik7IH0gXAorICAgIERFQ0xBUkVfVU5VU0VEX1NMT1RfVklTSVRPUl9TVFJVQ1Qo
KQorCisjZGVmaW5lIERFRklORV9URU1QTEFURV9WSVNJVF9DSElMRFJFTih0ZW1wbGF0ZUNsYXVz
ZV8sIGNsYXNzTmFtZV8pIFwKKyAgICB0ZW1wbGF0ZUNsYXVzZV8gdm9pZCBjbGFzc05hbWVfOjp2
aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikg
eyB2aXNpdENoaWxkcmVuSW1wbChjZWxsLCB2aXNpdG9yKTsgfSBcCisgICAgdGVtcGxhdGVDbGF1
c2VfIHZvaWQgY2xhc3NOYW1lXzo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNp
dG9yJiB2aXNpdG9yKSB7IHZpc2l0Q2hpbGRyZW5JbXBsKGNlbGwsIHZpc2l0b3IpOyB9IFwKKyAg
ICBERUNMQVJFX1VOVVNFRF9TTE9UX1ZJU0lUT1JfU1RSVUNUKCkKKworfSAvLyBuYW1lc3BhY2Ug
SlNDCisKK3VzaW5nIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvcjsKK3VzaW5nIEpTQzo6SlNDZWxs
OwordXNpbmcgSlNDOjpTbG90VmlzaXRvcjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL1N1YnNwYWNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
U3Vic3BhY2UuaAkocmV2aXNpb24gMjcyMjk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvU3Vic3BhY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsNyBAQAogCiBuYW1lc3Bh
Y2UgSlNDIHsKIAorY2xhc3MgQWJzdHJhY3RTbG90VmlzaXRvcjsgLy8gbWxhbQogY2xhc3MgQWxp
Z25lZE1lbW9yeUFsbG9jYXRvcjsKIGNsYXNzIEhlYXBDZWxsVHlwZTsKIApAQCAtODcsNyArODgs
NyBAQCBwdWJsaWM6CiAgICAgdm9pZCBmb3JFYWNoTWFya2VkQ2VsbChjb25zdCBGdW5jJik7CiAg
ICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KLSAgICBSZWY8U2hhcmVkVGFzazx2b2lk
KFNsb3RWaXNpdG9yJik+PiBmb3JFYWNoTWFya2VkQ2VsbEluUGFyYWxsZWwoY29uc3QgRnVuYyYp
OworICAgIFJlZjxTaGFyZWRUYXNrPHZvaWQoQWJzdHJhY3RTbG90VmlzaXRvciYpPj4gZm9yRWFj
aE1hcmtlZENlbGxJblBhcmFsbGVsKGNvbnN0IEZ1bmMmKTsKIAogICAgIHRlbXBsYXRlPHR5cGVu
YW1lIEZ1bmM+CiAgICAgdm9pZCBmb3JFYWNoTGl2ZUNlbGwoY29uc3QgRnVuYyYpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3Vic3BhY2VJbmxpbmVzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3Vic3BhY2VJbmxpbmVzLmgJKHJldmlzaW9u
IDI3MjI5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N1YnNwYWNlSW5saW5lcy5o
CSh3b3JraW5nIGNvcHkpCkBAIC04Niw5ICs4Niw5IEBAIHZvaWQgU3Vic3BhY2U6OmZvckVhY2hN
YXJrZWRDZWxsKGNvbnN0IEYKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KLVJlZjxTaGFy
ZWRUYXNrPHZvaWQoU2xvdFZpc2l0b3ImKT4+IFN1YnNwYWNlOjpmb3JFYWNoTWFya2VkQ2VsbElu
UGFyYWxsZWwoY29uc3QgRnVuYyYgZnVuYykKK1JlZjxTaGFyZWRUYXNrPHZvaWQoQWJzdHJhY3RT
bG90VmlzaXRvciYpPj4gU3Vic3BhY2U6OmZvckVhY2hNYXJrZWRDZWxsSW5QYXJhbGxlbChjb25z
dCBGdW5jJiBmdW5jKQogewotICAgIGNsYXNzIFRhc2sgZmluYWwgOiBwdWJsaWMgU2hhcmVkVGFz
azx2b2lkKFNsb3RWaXNpdG9yJik+IHsKKyAgICBjbGFzcyBUYXNrIGZpbmFsIDogcHVibGljIFNo
YXJlZFRhc2s8dm9pZChBYnN0cmFjdFNsb3RWaXNpdG9yJik+IHsKICAgICBwdWJsaWM6CiAgICAg
ICAgIFRhc2soU3Vic3BhY2UmIHN1YnNwYWNlLCBjb25zdCBGdW5jJiBmdW5jKQogICAgICAgICAg
ICAgOiBtX3N1YnNwYWNlKHN1YnNwYWNlKQpAQCAtOTcsNyArOTcsNyBAQCBSZWY8U2hhcmVkVGFz
azx2b2lkKFNsb3RWaXNpdG9yJik+PiBTdWJzCiAgICAgICAgIHsKICAgICAgICAgfQogICAgICAg
ICAKLSAgICAgICAgdm9pZCBydW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpIGZpbmFsCisgICAgICAg
IHZvaWQgcnVuKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpIGZpbmFsCiAgICAgICAgIHsK
ICAgICAgICAgICAgIHdoaWxlIChNYXJrZWRCbG9jazo6SGFuZGxlKiBoYW5kbGUgPSBtX2Jsb2Nr
U291cmNlLT5ydW4oKSkgewogICAgICAgICAgICAgICAgIGhhbmRsZS0+Zm9yRWFjaE1hcmtlZENl
bGwoCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9WZXJpZmllclNsb3RWaXNpdG9y
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9WZXJpZmllclNs
b3RWaXNpdG9yLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9WZXJpZmllclNsb3RWaXNpdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI1MiBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJWZXJpZmllclNs
b3RWaXNpdG9yLmgiCisKKyNpbmNsdWRlICJDb25zZXJ2YXRpdmVSb290cy5oIgorI2luY2x1ZGUg
IkdDU2VnbWVudGVkQXJyYXlJbmxpbmVzLmgiCisjaW5jbHVkZSAiSGVhcENlbGwuaCIKKyNpbmNs
dWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAiVk0uaCIKKworbmFtZXNwYWNlIEpTQyB7CisK
K1ZlcmlmaWVyU2xvdFZpc2l0b3I6Ok1hcmtlZEJsb2NrRGF0YTo6TWFya2VkQmxvY2tEYXRhKE1h
cmtlZEJsb2NrKiBibG9jaykKKyAgICA6IG1fYmxvY2soYmxvY2spCisgICAgLCBtX2F0b21zKE1h
cmtlZEJsb2NrOjphdG9tc1BlckJsb2NrKQoreworfQorCitWZXJpZmllclNsb3RWaXNpdG9yOjpW
ZXJpZmllclNsb3RWaXNpdG9yKEhlYXAmIGhlYXApCisgICAgOiBCYXNlKGhlYXApCit7Cit9CisK
K1ZlcmlmaWVyU2xvdFZpc2l0b3I6On5WZXJpZmllclNsb3RWaXNpdG9yKCkKK3sKK30KKwordm9p
ZCBWZXJpZmllclNsb3RWaXNpdG9yOjphZGRQYXJhbGxlbENvbnN0cmFpbnRUYXNrKFJlZlB0cjxT
aGFyZWRUYXNrPHZvaWQoQWJzdHJhY3RTbG90VmlzaXRvciYpPj4gdGFzaykKK3sKKyAgICBtX2Nv
bnN0cmFpbnRUYXNrcy5hcHBlbmQoV1RGTW92ZSh0YXNrKSk7Cit9CisKK3ZvaWQgVmVyaWZpZXJT
bG90VmlzaXRvcjo6ZXhlY3V0ZUNvbnN0cmFpbnRUYXNrcygpCit7CisgICAgd2hpbGUgKCFtX2Nv
bnN0cmFpbnRUYXNrcy5pc0VtcHR5KCkpCisgICAgICAgIG1fY29uc3RyYWludFRhc2tzLnRha2VG
aXJzdCgpLT5ydW4oKnRoaXMpOworfQorCit2b2lkIFZlcmlmaWVyU2xvdFZpc2l0b3I6OmFwcGVu
ZF9Db25zZXJ2YXRpdmVSb290cyhjb25zdCBDb25zZXJ2YXRpdmVSb290cyYgY29uc2VydmF0aXZl
Um9vdHMpCit7CisgICAgYXV0byBhcHBlbmRKU0NlbGxPckF1eGlsaWFyeSA9IFsmXSAoSGVhcENl
bGwqIGhlYXBDZWxsKQorICAgIHsKKyAgICAgICAgaWYgKCFoZWFwQ2VsbCkKKyAgICAgICAgICAg
IHJldHVybjsKKworICAgICAgICBpZiAodGVzdEFuZFNldE1hcmtlZChoZWFwQ2VsbCkpCisgICAg
ICAgICAgICByZXR1cm47CisKKyAgICAgICAgc3dpdGNoIChoZWFwQ2VsbC0+Y2VsbEtpbmQoKSkg
eworICAgICAgICBjYXNlIEhlYXBDZWxsOjpKU0NlbGw6CisgICAgICAgIGNhc2UgSGVhcENlbGw6
OkpTQ2VsbFdpdGhJbmRleGluZ0hlYWRlcjogeworICAgICAgICAgICAgSlNDZWxsKiBqc0NlbGwg
PSBzdGF0aWNfY2FzdDxKU0NlbGwqPihoZWFwQ2VsbCk7CisgICAgICAgICAgICBhcHBlbmRUb01h
cmtTdGFjayhqc0NlbGwpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAg
ICAgY2FzZSBIZWFwQ2VsbDo6QXV4aWxpYXJ5OgorICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisgICAgfTsKKworICAgIEhlYXBDZWxsKiogcm9vdHMgPSBjb25zZXJ2YXRpdmVSb290cy5y
b290cygpOworICAgIHNpemVfdCBzaXplID0gY29uc2VydmF0aXZlUm9vdHMuc2l6ZSgpOworICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKQorICAgICAgICBhcHBlbmRKU0NlbGxP
ckF1eGlsaWFyeShyb290c1tpXSk7Cit9CisKK3ZvaWQgVmVyaWZpZXJTbG90VmlzaXRvcjo6YXBw
ZW5kVG9NYXJrU3RhY2soSlNDZWxsKiBjZWxsKQoreworLy8gICAgQVNTRVJUKG1faGVhcC5pc01h
cmtlZChjZWxsKSk7IC8vIG1sYW0gVEVTVCBzYW5pdHkgY2hlY2suCisgICAgQVNTRVJUKCFjZWxs
LT5pc1phcHBlZCgpKTsKKyAgICBtX2NvbGxlY3RvclN0YWNrLmFwcGVuZChjZWxsKTsKK30KKwor
dm9pZCBWZXJpZmllclNsb3RWaXNpdG9yOjphcHBlbmRVbmJhcnJpZXJlZEltcGwoSlNDZWxsKiBj
ZWxsKQoreworICAgIGlmIChVTkxJS0VMWShjZWxsLT5pc1ByZWNpc2VBbGxvY2F0aW9uKCkpKSB7
CisgICAgICAgIGlmIChMSUtFTFkoaXNNYXJrZWQoY2VsbC0+cHJlY2lzZUFsbG9jYXRpb24oKSwg
Y2VsbCkpKQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0gZWxzZSB7CisgICAgICAgIE1hcmtl
ZEJsb2NrJiBibG9jayA9IGNlbGwtPm1hcmtlZEJsb2NrKCk7CisgICAgICAgIGlmIChMSUtFTFko
aXNNYXJrZWQoYmxvY2ssIGNlbGwpKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBhcHBlbmRTbG93KGNlbGwpOworfQorCit2b2lkIFZlcmlmaWVyU2xvdFZpc2l0b3I6OmFwcGVu
ZEhpZGRlblVuYmFycmllcmVkSW1wbChKU0NlbGwqIGNlbGwpCit7CisgICAgYXBwZW5kVW5iYXJy
aWVyZWRJbXBsKGNlbGwpOworfQorCitib29sIFZlcmlmaWVyU2xvdFZpc2l0b3I6OmFkZE9wYXF1
ZVJvb3Qodm9pZCogcHRyKQoreworICAgIGlmICghcHRyKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgaWYgKCFtX29wYXF1ZVJvb3RzLmFkZChwdHIpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgVmVyaWZpZXJTbG90VmlzaXRvcjo6Y29udGFp
bnNPcGFxdWVSb290KHZvaWQqIHB0cikgY29uc3QKK3sKKyAgICByZXR1cm4gbV9vcGFxdWVSb290
cy5jb250YWlucyhwdHIpOworfQorCit2b2lkIFZlcmlmaWVyU2xvdFZpc2l0b3I6OmRyYWluKCkK
K3sKKyAgICBSRUxFQVNFX0FTU0VSVChtX211dGF0b3JTdGFjay5pc0VtcHR5KCkpOworCisgICAg
TWFya1N0YWNrQXJyYXkmIHN0YWNrID0gbV9jb2xsZWN0b3JTdGFjazsKKyAgICBpZiAoc3RhY2su
aXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBzdGFjay5yZWZpbGwoKTsKKyAgICB3
aGlsZSAoc3RhY2suY2FuUmVtb3ZlTGFzdCgpKSB7CisgICAgICAgIHZpc2l0Q2hpbGRyZW4oc3Rh
Y2sucmVtb3ZlTGFzdCgpKTsKKyAgICB9Cit9CisKK2Jvb2wgVmVyaWZpZXJTbG90VmlzaXRvcjo6
aXNGaXJzdFZpc2l0KCkgY29uc3QKK3sKKyAgICAvLyBXZSBuZWVkIHRvIGFsd2F5cyByZXR1cm4g
ZmFsc2UgYmVjYXVzZSB0aGlzIGlzIHVzZWQgdG8gYWdlZCBhbiBVbmxpbmtlZENvZGVCbG9jawor
ICAgIC8vIGluIHRoZSByZWd1bGFyIEdDOiBzZWUgVW5saW5rZWRDb2RlQmxvY2s6OnZpc2l0Q2hp
bGRyZW5JbXBsKCkuIFdlIHNob3VsZCBub3QKKyAgICAvLyBzaG91bGQgZG8gdGhhdCBhZ2luZyBh
Y3Rpb24uCisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFZlcmlmaWVyU2xvdFZpc2l0b3I6
OmlzTWFya2VkKGNvbnN0IHZvaWQqIHJhd0NlbGwpIGNvbnN0Cit7CisgICAgSGVhcENlbGwqIGNl
bGwgPSBiaXR3aXNlX2Nhc3Q8SGVhcENlbGwqPihyYXdDZWxsKTsKKyAgICBpZiAoY2VsbC0+aXNQ
cmVjaXNlQWxsb2NhdGlvbigpKQorICAgICAgICByZXR1cm4gaXNNYXJrZWQoY2VsbC0+cHJlY2lz
ZUFsbG9jYXRpb24oKSwgY2VsbCk7CisgICAgcmV0dXJuIGlzTWFya2VkKGNlbGwtPm1hcmtlZEJs
b2NrKCksIGNlbGwpOworfQorCitib29sIFZlcmlmaWVyU2xvdFZpc2l0b3I6OmlzTWFya2VkKFBy
ZWNpc2VBbGxvY2F0aW9uJiBhbGxvY2F0aW9uLCBIZWFwQ2VsbCopIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1fcHJlY2lzZUFsbG9jYXRpb25NYXAuY29udGFpbnMoJmFsbG9jYXRpb24pOworfQorCiti
b29sIFZlcmlmaWVyU2xvdFZpc2l0b3I6OmlzTWFya2VkKE1hcmtlZEJsb2NrJiBibG9jaywgSGVh
cENlbGwqIGNlbGwpIGNvbnN0Cit7CisgICAgYXV0byBlbnRyeSA9IG1fbWFya2VkQmxvY2tNYXAu
ZmluZCgmYmxvY2spOworICAgIGlmIChlbnRyeSA9PSBtX21hcmtlZEJsb2NrTWFwLmVuZCgpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBhdXRvJiBkYXRhID0gZW50cnktPnZhbHVlOwor
ICAgIHVuc2lnbmVkIGF0b21OdW1iZXIgPSBibG9jay5hdG9tTnVtYmVyKGNlbGwpOworICAgIHJl
dHVybiBkYXRhLT5pc01hcmtlZChhdG9tTnVtYmVyKTsKK30KKwordm9pZCBWZXJpZmllclNsb3RW
aXNpdG9yOjptYXJrQXV4aWxpYXJ5KGNvbnN0IHZvaWQqIGJhc2UpCit7CisgICAgSGVhcENlbGwq
IGNlbGwgPSBiaXR3aXNlX2Nhc3Q8SGVhcENlbGwqPihiYXNlKTsKKworICAgIEFTU0VSVChjZWxs
LT5oZWFwKCkgPT0gaGVhcCgpKTsKKyAgICB0ZXN0QW5kU2V0TWFya2VkKGNlbGwpOworfQorCiti
b29sIFZlcmlmaWVyU2xvdFZpc2l0b3I6Om11dGF0b3JJc1N0b3BwZWQoKSBjb25zdAoreworICAg
IHJldHVybiB0cnVlOworfQorCitib29sIFZlcmlmaWVyU2xvdFZpc2l0b3I6OnRlc3RBbmRTZXRN
YXJrZWQoY29uc3Qgdm9pZCogcmF3Q2VsbCkKK3sKKyAgICBIZWFwQ2VsbCogY2VsbCA9IGJpdHdp
c2VfY2FzdDxIZWFwQ2VsbCo+KHJhd0NlbGwpOworICAgIGlmIChjZWxsLT5pc1ByZWNpc2VBbGxv
Y2F0aW9uKCkpCisgICAgICAgIHJldHVybiB0ZXN0QW5kU2V0TWFya2VkKGNlbGwtPnByZWNpc2VB
bGxvY2F0aW9uKCkpOworICAgIHJldHVybiB0ZXN0QW5kU2V0TWFya2VkKGNlbGwtPm1hcmtlZEJs
b2NrKCksIGNlbGwpOworfQorCitib29sIFZlcmlmaWVyU2xvdFZpc2l0b3I6OnRlc3RBbmRTZXRN
YXJrZWQoUHJlY2lzZUFsbG9jYXRpb24mIGFsbG9jYXRpb24pCit7CisgICAgYXV0byByZXN1bHQg
PSBtX3ByZWNpc2VBbGxvY2F0aW9uTWFwLmFkZCgmYWxsb2NhdGlvbiwgJmFsbG9jYXRpb24pOwor
ICAgIHJldHVybiByZXN1bHQuaXNOZXdFbnRyeTsKK30KKworYm9vbCBWZXJpZmllclNsb3RWaXNp
dG9yOjp0ZXN0QW5kU2V0TWFya2VkKE1hcmtlZEJsb2NrJiBibG9jaywgSGVhcENlbGwqIGNlbGwp
Cit7CisgICAgc3RkOjp1bmlxdWVfcHRyPE1hcmtlZEJsb2NrRGF0YT4mIGRhdGEgPSBtX21hcmtl
ZEJsb2NrTWFwLmFkZCgmYmxvY2ssIG51bGxwdHIpLml0ZXJhdG9yLT52YWx1ZTsKKyAgICBpZiAo
IWRhdGEpCisgICAgICAgIGRhdGEgPSBtYWtlVW5pcXVlPE1hcmtlZEJsb2NrRGF0YT4oJmJsb2Nr
KTsKKworICAgIHVuc2lnbmVkIGF0b21OdW1iZXIgPSBibG9jay5hdG9tTnVtYmVyKGNlbGwpOwor
ICAgIHJldHVybiBkYXRhLT50ZXN0QW5kU2V0TWFya2VkKGF0b21OdW1iZXIpOworfQorCit2b2lk
IFZlcmlmaWVyU2xvdFZpc2l0b3I6OnNldE1hcmtlZEFuZEFwcGVuZFRvTWFya1N0YWNrKEpTQ2Vs
bCogY2VsbCkKK3sKKyAgICBpZiAodGVzdEFuZFNldE1hcmtlZChjZWxsKSkKKyAgICAgICAgcmV0
dXJuOworICAgIGFwcGVuZFRvTWFya1N0YWNrKGNlbGwpOworfQorCit2b2lkIFZlcmlmaWVyU2xv
dFZpc2l0b3I6OnZpc2l0QXNDb25zdHJhaW50KGNvbnN0IEpTQ2VsbCogY2VsbCkKK3sKKyAgICB2
aXNpdENoaWxkcmVuKGNlbGwpOworfQorCit2b2lkIFZlcmlmaWVyU2xvdFZpc2l0b3I6OnZpc2l0
Q2hpbGRyZW4oY29uc3QgSlNDZWxsKiBjZWxsKQoreworICAgIFJFTEVBU0VfQVNTRVJUKGlzTWFy
a2VkKGNlbGwpKTsgLy8gbWxhbSBNQUtFIGludG8gQVNTRVJUCisgICAgCisgICAgc3dpdGNoIChj
ZWxsLT50eXBlKCkpIHsKKyAgICBjYXNlIFN0cmluZ1R5cGU6CisgICAgICAgIEpTU3RyaW5nOjp2
aXNpdENoaWxkcmVuKGNvbnN0X2Nhc3Q8SlNDZWxsKj4oY2VsbCksICp0aGlzKTsKKyAgICAgICAg
YnJlYWs7CisgICAgICAgIAorICAgIGNhc2UgRmluYWxPYmplY3RUeXBlOgorICAgICAgICBKU0Zp
bmFsT2JqZWN0Ojp2aXNpdENoaWxkcmVuKGNvbnN0X2Nhc3Q8SlNDZWxsKj4oY2VsbCksICp0aGlz
KTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEFycmF5VHlwZToKKyAgICAgICAgSlNBcnJh
eTo6dmlzaXRDaGlsZHJlbihjb25zdF9jYXN0PEpTQ2VsbCo+KGNlbGwpLCAqdGhpcyk7CisgICAg
ICAgIGJyZWFrOworICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICAvLyBGSVhNRTogVGhp
cyBjb3VsZCBiZSBzbyBtdWNoIGJldHRlci4KKyAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MjQ2MgorICAgICAgICBjZWxsLT5tZXRob2RUYWJsZSh2
bSgpKS0+dmlzaXRDaGlsZHJlbihjb25zdF9jYXN0PEpTQ2VsbCo+KGNlbGwpLCAqdGhpcyk7Cisg
ICAgICAgIGJyZWFrOworICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9WZXJpZmllclNsb3RWaXNpdG9yLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVmVyaWZpZXJTbG90VmlzaXRvci5oCShub25l
eGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1ZlcmlmaWVyU2xvdFZpc2l0
b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE0OCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQWJz
dHJhY3RTbG90VmlzaXRvci5oIgorI2luY2x1ZGUgIkpTQ0pTVmFsdWUuaCIKKyNpbmNsdWRlICJW
aXNpdFJhY2VLZXkuaCIKKyNpbmNsdWRlICJXZWFrLmgiCisjaW5jbHVkZSA8bWVtb3J5PgorI2lu
Y2x1ZGUgPHd0Zi9CaXRWZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvQ29uY3VycmVudFB0ckhhc2hT
ZXQuaD4KKyNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFw
Lmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9TaGFyZWRUYXNrLmg+
CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBDb25zZXJ2YXRpdmVSb290czsKK2NsYXNzIEhl
YXA7CitjbGFzcyBIZWFwQ2VsbDsKK2NsYXNzIFByZWNpc2VBbGxvY2F0aW9uOworY2xhc3MgTWFy
a2VkQmxvY2s7CisKK2NsYXNzIFZlcmlmaWVyU2xvdFZpc2l0b3IgOiBwdWJsaWMgQWJzdHJhY3RT
bG90VmlzaXRvciB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoVmVyaWZpZXJTbG90VmlzaXRv
cik7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CisgICAgdXNpbmcgQmFzZSA9IEFic3Ry
YWN0U2xvdFZpc2l0b3I7CitwdWJsaWM6CisKKyAgICBWZXJpZmllclNsb3RWaXNpdG9yKEhlYXAm
KTsKKyAgICB+VmVyaWZpZXJTbG90VmlzaXRvcigpOworCisgICAgdm9pZCBhcHBlbmRfQ29uc2Vy
dmF0aXZlUm9vdHMoY29uc3QgQ29uc2VydmF0aXZlUm9vdHMmKSBmaW5hbDsKKyAgICB2b2lkIGFw
cGVuZFVuYmFycmllcmVkSW1wbChKU0NlbGwqKSBmaW5hbDsKKyAgICB2b2lkIGFwcGVuZEhpZGRl
blVuYmFycmllcmVkSW1wbChKU0NlbGwqKSBmaW5hbDsKKworICAgIGJvb2wgYWRkT3BhcXVlUm9v
dCh2b2lkKikgZmluYWw7IC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgcm9vdCB3YXMgbmV3LgorICAg
IGJvb2wgY29udGFpbnNPcGFxdWVSb290KHZvaWQqKSBjb25zdCBmaW5hbDsKKworICAgIGJvb2wg
aXNGaXJzdFZpc2l0KCkgY29uc3QgZmluYWw7CisgICAgYm9vbCBpc01hcmtlZChjb25zdCB2b2lk
KikgY29uc3QgZmluYWw7CisgICAgYm9vbCBpc01hcmtlZChNYXJrZWRCbG9jayYsIEhlYXBDZWxs
KikgY29uc3QgZmluYWw7CisgICAgYm9vbCBpc01hcmtlZChQcmVjaXNlQWxsb2NhdGlvbiYsIEhl
YXBDZWxsKikgY29uc3QgZmluYWw7CisKKyAgICB2b2lkIG1hcmtBdXhpbGlhcnkoY29uc3Qgdm9p
ZCopIGZpbmFsOworCisgICAgdm9pZCByZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQoc2l6ZV90KSBm
aW5hbCB7IH0KKyNpZiBFTkFCTEUoUkVTT1VSQ0VfVVNBR0UpCisgICAgdm9pZCByZXBvcnRFeHRl
cm5hbE1lbW9yeVZpc2l0ZWQoc2l6ZV90KSBmaW5hbCB7IH0KKyNlbmRpZgorCisgICAgYm9vbCBt
dXRhdG9ySXNTdG9wcGVkKCkgY29uc3QgZmluYWw7CisKKyAgICB2b2lkIGRpZFJhY2UoY29uc3Qg
VmlzaXRSYWNlS2V5JikgZmluYWwgeyB9CisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29u
c3QgZmluYWwgeyB9CisKKyAgICB2b2lkIHZpc2l0QXNDb25zdHJhaW50KGNvbnN0IEpTQ2VsbCop
IGZpbmFsOworCisgICAgdm9pZCBkcmFpbigpOworCisgICAgdm9pZCBhZGRQYXJhbGxlbENvbnN0
cmFpbnRUYXNrKFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoQWJzdHJhY3RTbG90VmlzaXRvciYpPj4p
IGZpbmFsOworICAgIHZvaWQgZXhlY3V0ZUNvbnN0cmFpbnRUYXNrcygpOworCisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBmb3JFYWNoTGl2ZUNlbGwoY29uc3QgRnVuY3RvciYp
OworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaExpdmVQcmVjaXNl
QWxsb2NhdGlvbihjb25zdCBGdW5jdG9yJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rv
cj4gdm9pZCBmb3JFYWNoTGl2ZU1hcmtlZEJsb2NrQ2VsbChjb25zdCBGdW5jdG9yJik7CisKK3By
aXZhdGU6CisgICAgY2xhc3MgTWFya2VkQmxvY2tEYXRhIHsKKyAgICAgICAgV1RGX01BS0VfRkFT
VF9BTExPQ0FURUQ7CisgICAgICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKE1hcmtlZEJsb2NrRGF0
YSk7CisgICAgcHVibGljOgorICAgICAgICBNYXJrZWRCbG9ja0RhdGEoTWFya2VkQmxvY2sqKTsK
KworICAgICAgICBNYXJrZWRCbG9jayogYmxvY2soKSBjb25zdCB7IHJldHVybiBtX2Jsb2NrOyB9
CisgICAgICAgIGNvbnN0IEJpdFZlY3RvciYgYXRvbXMoKSBjb25zdCB7IHJldHVybiBtX2F0b21z
OyB9CisKKyAgICAgICAgYm9vbCBpc01hcmtlZCh1bnNpZ25lZCBhdG9tTnVtYmVyKSB7IHJldHVy
biBtX2F0b21zLnF1aWNrR2V0KGF0b21OdW1iZXIpOyB9CisgICAgICAgIGJvb2wgdGVzdEFuZFNl
dE1hcmtlZCh1bnNpZ25lZCBhdG9tTnVtYmVyKSB7IHJldHVybiBtX2F0b21zLnF1aWNrU2V0KGF0
b21OdW1iZXIpOyB9CisgICAgcHJpdmF0ZToKKyAgICAgICAgTWFya2VkQmxvY2sqIG1fYmxvY2sg
eyBudWxscHRyIH07CisgICAgICAgIEJpdFZlY3RvciBtX2F0b21zOworICAgIH07CisKKyAgICB1
c2luZyBQcmVjaXNlQWxsb2NhdGlvbk1hcCA9IEhhc2hNYXA8UHJlY2lzZUFsbG9jYXRpb24qLCBQ
cmVjaXNlQWxsb2NhdGlvbio+OworICAgIHVzaW5nIE1hcmtlZEJsb2NrTWFwID0gSGFzaE1hcDxN
YXJrZWRCbG9jayosIHN0ZDo6dW5pcXVlX3B0cjxNYXJrZWRCbG9ja0RhdGE+PjsKKworLy8gICAg
c3RydWN0IFRhc2tXaXRoQ29uc3RyYWludCB7CisvLyAgICAgICAgVGFza1dpdGhDb25zdHJhaW50
KCkgeyB9CisvLyAgICAgICAgCisvLyAgICAgICAgVGFza1dpdGhDb25zdHJhaW50KFJlZlB0cjxT
aGFyZWRUYXNrPHZvaWQoQWJzdHJhY3RTbG90VmlzaXRvciYpPj4gdGFzaywgTWFya2luZ0NvbnN0
cmFpbnQqIGNvbnN0cmFpbnQpCisvLyAgICAgICAgICAgIDogdGFzayhXVEZNb3ZlKHRhc2spKQor
Ly8gICAgICAgICAgICAsIGNvbnN0cmFpbnQoY29uc3RyYWludCkKKy8vICAgICAgICB7CisvLyAg
ICAgICAgfQorLy8gICAgICAgIAorLy8vLyAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFRh
c2tXaXRoQ29uc3RyYWludCYgb3RoZXIpIGNvbnN0CisvLy8vICAgICAgICB7CisvLy8vICAgICAg
ICAgICAgcmV0dXJuIHRhc2sgPT0gb3RoZXIudGFzaworLy8vLyAgICAgICAgICAgICAgICAmJiBj
b25zdHJhaW50ID09IG90aGVyLmNvbnN0cmFpbnQ7CisvLy8vICAgICAgICB9CisvLy8vICAgICAg
ICAKKy8vICAgICAgICBSZWZQdHI8U2hhcmVkVGFzazx2b2lkKEFic3RyYWN0U2xvdFZpc2l0b3Im
KT4+IHRhc2s7CisvLyAgICAgICAgTWFya2luZ0NvbnN0cmFpbnQqIGNvbnN0cmFpbnQgeyBudWxs
cHRyIH07CisvLyAgICB9OworCisgICAgdm9pZCBhcHBlbmRUb01hcmtTdGFjayhKU0NlbGwqKTsK
KyAgICB2b2lkIGFwcGVuZFNsb3coSlNDZWxsKiBjZWxsKSB7IHNldE1hcmtlZEFuZEFwcGVuZFRv
TWFya1N0YWNrKGNlbGwpOyB9CisKKyAgICBib29sIHRlc3RBbmRTZXRNYXJrZWQoY29uc3Qgdm9p
ZCogcmF3Q2VsbCk7CisgICAgYm9vbCB0ZXN0QW5kU2V0TWFya2VkKFByZWNpc2VBbGxvY2F0aW9u
Jik7CisgICAgYm9vbCB0ZXN0QW5kU2V0TWFya2VkKE1hcmtlZEJsb2NrJiwgSGVhcENlbGwqKTsK
KworICAgIHZvaWQgc2V0TWFya2VkQW5kQXBwZW5kVG9NYXJrU3RhY2soSlNDZWxsKik7CisKKyAg
ICB2b2lkIHZpc2l0Q2hpbGRyZW4oY29uc3QgSlNDZWxsKik7CisKKyAgICBQcmVjaXNlQWxsb2Nh
dGlvbk1hcCBtX3ByZWNpc2VBbGxvY2F0aW9uTWFwOworICAgIE1hcmtlZEJsb2NrTWFwIG1fbWFy
a2VkQmxvY2tNYXA7CisgICAgQ29uY3VycmVudFB0ckhhc2hTZXQgbV9vcGFxdWVSb290czsKKyAg
ICBEZXF1ZTxSZWZQdHI8U2hhcmVkVGFzazx2b2lkKEFic3RyYWN0U2xvdFZpc2l0b3ImKT4+LCAz
Mj4gbV9jb25zdHJhaW50VGFza3M7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1ZlcmlmaWVyU2xvdFZpc2l0b3JJbmxpbmVzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVmVyaWZpZXJTbG90VmlzaXRv
cklubGluZXMuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9W
ZXJpZmllclNsb3RWaXNpdG9ySW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjQg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21h
IG9uY2UKKworI2luY2x1ZGUgIlZlcmlmaWVyU2xvdFZpc2l0b3IuaCIKKworI2luY2x1ZGUgIkFi
c3RyYWN0U2xvdFZpc2l0b3JJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0MgeworCit0ZW1wbGF0
ZTx0eXBlbmFtZSBGdW5jdG9yPgordm9pZCBWZXJpZmllclNsb3RWaXNpdG9yOjpmb3JFYWNoTGl2
ZUNlbGwoY29uc3QgRnVuY3RvciYgZnVuY3RvcikKK3sKKyAgICBmb3JFYWNoTGl2ZVByZWNpc2VB
bGxvY2F0aW9uKGZ1bmN0b3IpOworICAgIGZvckVhY2hMaXZlTWFya2VkQmxvY2tDZWxsKGZ1bmN0
b3IpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgordm9pZCBWZXJpZmllclNsb3RW
aXNpdG9yOjpmb3JFYWNoTGl2ZVByZWNpc2VBbGxvY2F0aW9uKGNvbnN0IEZ1bmN0b3ImIGZ1bmMp
Cit7CisgICAgZm9yIChhdXRvJiBlbnRyeSA6IG1fcHJlY2lzZUFsbG9jYXRpb25NYXApIHsKKyAg
ICAgICAgUHJlY2lzZUFsbG9jYXRpb24qIGFsbG9jYXRpb24gPSBlbnRyeS52YWx1ZTsKKyAgICAg
ICAgZnVuYyhhbGxvY2F0aW9uLT5jZWxsKCkpOworICAgIH0KK30KKwordGVtcGxhdGU8dHlwZW5h
bWUgRnVuY3Rvcj4KK3ZvaWQgVmVyaWZpZXJTbG90VmlzaXRvcjo6Zm9yRWFjaExpdmVNYXJrZWRC
bG9ja0NlbGwoY29uc3QgRnVuY3RvciYgZnVuYykKK3sKKyAgICBmb3IgKGF1dG8mIGVudHJ5IDog
bV9tYXJrZWRCbG9ja01hcCkgeworICAgICAgICBhdXRvJiBkYXRhID0gZW50cnkudmFsdWU7Cisg
ICAgICAgIE1hcmtlZEJsb2NrKiBibG9jayA9IGRhdGEtPmJsb2NrKCk7CisgICAgICAgIGNvbnN0
IEJpdFZlY3RvciYgYXRvbXMgPSAgZGF0YS0+YXRvbXMoKTsKKyAgICAgICAgZm9yIChhdXRvIGF0
b21OdW1iZXIgOiBhdG9tcykgeworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoYXRvbXMucXVp
Y2tHZXQoYXRvbU51bWJlcikpOyAvLyBtbGFtIFRFU1QgU2FuaXR5IENoZWNrCisgICAgICAgICAg
ICBmdW5jKGJpdHdpc2VfY2FzdDxIZWFwQ2VsbCo+KGJsb2NrLT5oYW5kbGUoKS5hdG9tQXQoYXRv
bU51bWJlcikpKTsKKyAgICAgICAgfQorICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9WaXNpdENvdW50ZXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9WaXNpdENvdW50ZXIuaAkocmV2aXNpb24g
MjcyMjk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVmlzaXRDb3VudGVyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTI1LDcgKzI1LDcgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRl
ICJTbG90VmlzaXRvci5oIgorI2luY2x1ZGUgIkFic3RyYWN0U2xvdFZpc2l0b3IuaCIKIAogbmFt
ZXNwYWNlIEpTQyB7CiAKQEAgLTMzLDEzICszMywxMyBAQCBjbGFzcyBWaXNpdENvdW50ZXIgewog
cHVibGljOgogICAgIFZpc2l0Q291bnRlcigpIHsgfQogICAgIAotICAgIFZpc2l0Q291bnRlcihT
bG90VmlzaXRvciYgdmlzaXRvcikKKyAgICBWaXNpdENvdW50ZXIoQWJzdHJhY3RTbG90VmlzaXRv
ciYgdmlzaXRvcikKICAgICAgICAgOiBtX3Zpc2l0b3IoJnZpc2l0b3IpCiAgICAgICAgICwgbV9p
bml0aWFsVmlzaXRDb3VudCh2aXNpdG9yLnZpc2l0Q291bnQoKSkKICAgICB7CiAgICAgfQogICAg
IAotICAgIFNsb3RWaXNpdG9yJiB2aXNpdG9yKCkgY29uc3QgeyByZXR1cm4gKm1fdmlzaXRvcjsg
fQorICAgIEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IoKSBjb25zdCB7IHJldHVybiAqbV92
aXNpdG9yOyB9CiAgICAgCiAgICAgc2l6ZV90IHZpc2l0Q291bnQoKSBjb25zdAogICAgIHsKQEAg
LTQ3LDcgKzQ3LDcgQEAgcHVibGljOgogICAgIH0KICAgICAKIHByaXZhdGU6Ci0gICAgU2xvdFZp
c2l0b3IqIG1fdmlzaXRvciB7IG51bGxwdHIgfTsKKyAgICBBYnN0cmFjdFNsb3RWaXNpdG9yKiBt
X3Zpc2l0b3IgeyBudWxscHRyIH07CiAgICAgc2l6ZV90IG1faW5pdGlhbFZpc2l0Q291bnQgeyAw
IH07CiB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrQmxvY2suY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtCbG9jay5jcHAJ
KHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtCbG9j
ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk4LDEyICs5OCwxMyBAQCB2b2lkIFdlYWtCbG9jazo6
c3dlZXAoKQogICAgIEFTU0VSVCghbV9zd2VlcFJlc3VsdC5pc051bGwoKSk7CiB9CiAKLXRlbXBs
YXRlPHR5cGVuYW1lIENvbnRhaW5lclR5cGU+Ci12b2lkIFdlYWtCbG9jazo6c3BlY2lhbGl6ZWRW
aXNpdChDb250YWluZXJUeXBlJiBjb250YWluZXIsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVt
cGxhdGU8dHlwZW5hbWUgQ29udGFpbmVyVHlwZSwgdHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgV2Vh
a0Jsb2NrOjpzcGVjaWFsaXplZFZpc2l0KENvbnRhaW5lclR5cGUmIGNvbnRhaW5lciwgVmlzaXRv
ciYgdmlzaXRvcikKIHsKLSAgICBIZWFwVmVyc2lvbiBtYXJraW5nVmVyc2lvbiA9IHZpc2l0b3Iu
bWFya2luZ1ZlcnNpb24oKTsKKy8vICAgIEhlYXBWZXJzaW9uIG1hcmtpbmdWZXJzaW9uID0gdmlz
aXRvci5tYXJraW5nVmVyc2lvbigpOwogCiAgICAgc2l6ZV90IGNvdW50ID0gd2Vha0ltcGxDb3Vu
dCgpOworICAgIEhlYXBBbmFseXplciogaGVhcEFuYWx5emVyID0gdmlzaXRvci52bSgpLmFjdGl2
ZUhlYXBBbmFseXplcigpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY291bnQ7ICsraSkg
ewogICAgICAgICBXZWFrSW1wbCogd2Vha0ltcGwgPSAmd2Vha0ltcGxzKClbaV07CiAgICAgICAg
IGlmICh3ZWFrSW1wbC0+c3RhdGUoKSAhPSBXZWFrSW1wbDo6TGl2ZSkKQEAgLTExNCwxMiArMTE1
LDEzIEBAIHZvaWQgV2Vha0Jsb2NrOjpzcGVjaWFsaXplZFZpc2l0KENvbnRhaW4KICAgICAgICAg
ICAgIGNvbnRpbnVlOwogCiAgICAgICAgIEpTVmFsdWUganNWYWx1ZSA9IHdlYWtJbXBsLT5qc1Zh
bHVlKCk7Ci0gICAgICAgIGlmIChjb250YWluZXIuaXNNYXJrZWQobWFya2luZ1ZlcnNpb24sIGpz
VmFsdWUuYXNDZWxsKCkpKQorLy8gICAgICAgIGlmIChjb250YWluZXIuaXNNYXJrZWQobWFya2lu
Z1ZlcnNpb24sIGpzVmFsdWUuYXNDZWxsKCkpKQorICAgICAgICBpZiAodmlzaXRvci5pc01hcmtl
ZChjb250YWluZXIsIGpzVmFsdWUuYXNDZWxsKCkpKQogICAgICAgICAgICAgY29udGludWU7CiAg
ICAgICAgIAogICAgICAgICBjb25zdCBjaGFyKiByZWFzb24gPSAiIjsKICAgICAgICAgY29uc3Qg
Y2hhcioqIHJlYXNvblB0ciA9IG51bGxwdHI7Ci0gICAgICAgIGlmIChVTkxJS0VMWSh2aXNpdG9y
LmlzQW5hbHl6aW5nSGVhcCgpKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKGhlYXBBbmFseXplcikp
CiAgICAgICAgICAgICByZWFzb25QdHIgPSAmcmVhc29uOwogCiAgICAgICAgIGlmICghd2Vha0hh
bmRsZU93bmVyLT5pc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhIYW5kbGU8VW5rbm93bj46Ondy
YXBTbG90KCZjb25zdF9jYXN0PEpTVmFsdWUmPihqc1ZhbHVlKSksIHdlYWtJbXBsLT5jb250ZXh0
KCksIHZpc2l0b3IsIHJlYXNvblB0cikpCkBAIC0xMjcsMTQgKzEyOSwxNiBAQCB2b2lkIFdlYWtC
bG9jazo6c3BlY2lhbGl6ZWRWaXNpdChDb250YWluCiAKICAgICAgICAgdmlzaXRvci5hcHBlbmRV
bmJhcnJpZXJlZChqc1ZhbHVlKTsKIAotICAgICAgICBpZiAoVU5MSUtFTFkodmlzaXRvci5pc0Fu
YWx5emluZ0hlYXAoKSkpIHsKKyAgICAgICAgaWYgKFVOTElLRUxZKGhlYXBBbmFseXplcikpIHsK
ICAgICAgICAgICAgIGlmIChqc1ZhbHVlLmlzQ2VsbCgpKQotICAgICAgICAgICAgICAgIHZpc2l0
b3IuaGVhcEFuYWx5emVyKCktPnNldE9wYXF1ZVJvb3RSZWFjaGFiaWxpdHlSZWFzb25Gb3JDZWxs
KGpzVmFsdWUuYXNDZWxsKCksICpyZWFzb25QdHIpOworICAgICAgICAgICAgICAgIGhlYXBBbmFs
eXplci0+c2V0T3BhcXVlUm9vdFJlYWNoYWJpbGl0eVJlYXNvbkZvckNlbGwoanNWYWx1ZS5hc0Nl
bGwoKSwgKnJlYXNvblB0cik7CiAgICAgICAgIH0KICAgICB9CiB9CiAKLXZvaWQgV2Vha0Jsb2Nr
Ojp2aXNpdChTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRv
cj4KKy8vdm9pZCBXZWFrQmxvY2s6OnZpc2l0KFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIFdlYWtC
bG9jazo6dmlzaXQxKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgLy8gSWYg
YSBibG9jayBpcyBjb21wbGV0ZWx5IGVtcHR5LCBhIHZpc2l0IHdvbid0IGhhdmUgYW55IGVmZmVj
dC4KICAgICBpZiAoaXNFbXB0eSgpKQpAQCAtMTQ5LDYgKzE1Myw5IEBAIHZvaWQgV2Vha0Jsb2Nr
Ojp2aXNpdChTbG90VmlzaXRvciYgdmlzaXQKICAgICAgICAgc3BlY2lhbGl6ZWRWaXNpdChtX2Nv
bnRhaW5lci5tYXJrZWRCbG9jaygpLCB2aXNpdG9yKTsKIH0KIAorLy90ZW1wbGF0ZSB2b2lkIFdl
YWtCbG9jazo6dmlzaXQoU2xvdFZpc2l0b3ImKTsKKy8vdGVtcGxhdGUgdm9pZCBXZWFrQmxvY2s6
OnZpc2l0KFZlcmlmaWVyU2xvdFZpc2l0b3ImKTsKKwogdm9pZCBXZWFrQmxvY2s6OnJlYXAoKQog
ewogICAgIC8vIElmIGEgYmxvY2sgaXMgY29tcGxldGVseSBlbXB0eSwgYSByZWFwaW5nIHdvbid0
IGhhdmUgYW55IGVmZmVjdC4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtC
bG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtCbG9j
ay5oCShyZXZpc2lvbiAyNzIyOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFr
QmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMzIsOCArMzIsOSBAQAogCiBuYW1lc3BhY2UgSlND
IHsKIAorY2xhc3MgQWJzdHJhY3RTbG90VmlzaXRvcjsKIGNsYXNzIEhlYXA7Ci1jbGFzcyBTbG90
VmlzaXRvcjsKKy8vY2xhc3MgU2xvdFZpc2l0b3I7CiAKIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhf
SEVBUF9JREVOVElGSUVSKFdlYWtCbG9jayk7CiAKQEAgLTY1LDcgKzY2LDggQEAgcHVibGljOgog
ICAgIHZvaWQgc3dlZXAoKTsKICAgICBTd2VlcFJlc3VsdCB0YWtlU3dlZXBSZXN1bHQoKTsKIAot
ICAgIHZvaWQgdmlzaXQoU2xvdFZpc2l0b3ImKTsKKy8vICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZp
c2l0b3I+IHZvaWQgdmlzaXQoVmlzaXRvciYpOworICAgIHZvaWQgdmlzaXQxKEFic3RyYWN0U2xv
dFZpc2l0b3ImKTsKIAogICAgIHZvaWQgcmVhcCgpOwogCkBAIC03NSw4ICs3Nyw4IEBAIHB1Ymxp
YzoKIHByaXZhdGU6CiAgICAgc3RhdGljIEZyZWVDZWxsKiBhc0ZyZWVDZWxsKFdlYWtJbXBsKik7
CiAgICAgCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgQ29udGFpbmVyVHlwZT4KLSAgICB2b2lkIHNw
ZWNpYWxpemVkVmlzaXQoQ29udGFpbmVyVHlwZSYsIFNsb3RWaXNpdG9yJik7CisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgQ29udGFpbmVyVHlwZSwgdHlwZW5hbWUgVmlzaXRvcj4KKyAgICB2b2lkIHNw
ZWNpYWxpemVkVmlzaXQoQ29udGFpbmVyVHlwZSYsIFZpc2l0b3ImKTsKIAogICAgIGV4cGxpY2l0
IFdlYWtCbG9jayhDZWxsQ29udGFpbmVyKTsKICAgICB2b2lkIGZpbmFsaXplKFdlYWtJbXBsKik7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrSGFuZGxlT3duZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtIYW5kbGVPd25lci5j
cHAJKHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtI
YW5kbGVPd25lci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDcgKzM1LDcgQEAgV2Vha0hhbmRs
ZU93bmVyOjp+V2Vha0hhbmRsZU93bmVyKCkKIHsKIH0KIAotYm9vbCBXZWFrSGFuZGxlT3duZXI6
OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEhhbmRsZTxVbmtub3duPiwgdm9pZCosIFNsb3RW
aXNpdG9yJiwgY29uc3QgY2hhcioqKQorYm9vbCBXZWFrSGFuZGxlT3duZXI6OmlzUmVhY2hhYmxl
RnJvbU9wYXF1ZVJvb3RzKEhhbmRsZTxVbmtub3duPiwgdm9pZCosIEFic3RyYWN0U2xvdFZpc2l0
b3ImLCBjb25zdCBjaGFyKiopCiB7CiAgICAgcmV0dXJuIGZhbHNlOwogfQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha0hhbmRsZU93bmVyLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha0hhbmRsZU93bmVyLmgJKHJldmlzaW9uIDI3MjI5
NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtIYW5kbGVPd25lci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yOSwxMyArMjksMTMgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLWNsYXNz
IFNsb3RWaXNpdG9yOworY2xhc3MgQWJzdHJhY3RTbG90VmlzaXRvcjsKIAogY2xhc3MgSlNfRVhQ
T1JUX1BSSVZBVEUgV2Vha0hhbmRsZU93bmVyIHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5XZWFr
SGFuZGxlT3duZXIoKTsKICAgICAvLyByZWFzb24gd2lsbCBvbmx5IGJlIG5vbi1udWxsIHdoZW4g
Z2VuZXJhdGluZyBhIGRlYnVnIEdDIGhlYXAgc25hcHNob3QuCi0gICAgdmlydHVhbCBib29sIGlz
UmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEhhbmRsZTxVbmtub3duPiwgdm9pZCogY29udGV4dCwg
U2xvdFZpc2l0b3ImLCBjaGFyIGNvbnN0KiogcmVhc29uID0gbnVsbHB0cik7CisgICAgdmlydHVh
bCBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEhhbmRsZTxVbmtub3duPiwgdm9pZCog
Y29udGV4dCwgQWJzdHJhY3RTbG90VmlzaXRvciYsIGNoYXIgY29uc3QqKiByZWFzb24gPSBudWxs
cHRyKTsKICAgICB2aXJ0dWFsIHZvaWQgZmluYWxpemUoSGFuZGxlPFVua25vd24+LCB2b2lkKiBj
b250ZXh0KTsKIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtJbmxp
bmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha0lubGlu
ZXMuaAkocmV2aXNpb24gMjcyMjk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vh
a0lubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAogI3ByYWdtYSBvbmNl
CiAKICNpbmNsdWRlICJKU0Nhc3QuaCIKKyNpbmNsdWRlICJXZWFrLmgiCiAjaW5jbHVkZSAiV2Vh
a1NldElubGluZXMuaCIKICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvV2Vha1NldC5oCShyZXZpc2lvbiAyNzIyOTcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTUxLDcgKzUx
LDggQEAgcHVibGljOgogICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0OwogICAgIGJvb2wgaXNUcml2
aWFsbHlEZXN0cnVjdGlibGUoKSBjb25zdDsKIAotICAgIHZvaWQgdmlzaXQoU2xvdFZpc2l0b3Im
KTsKKy8vICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgdmlzaXQoVmlzaXRvciYp
OworICAgIHZvaWQgdmlzaXQxKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKIAogICAgIHZvaWQgcmVh
cCgpOwogICAgIHZvaWQgc3dlZXAoKTsKQEAgLTExNCwxMCArMTE1LDEyIEBAIGlubGluZSB2b2lk
IFdlYWtTZXQ6Omxhc3RDaGFuY2VUb0ZpbmFsaXoKICAgICAgICAgYmxvY2stPmxhc3RDaGFuY2VU
b0ZpbmFsaXplKCk7CiB9CiAKLWlubGluZSB2b2lkIFdlYWtTZXQ6OnZpc2l0KFNsb3RWaXNpdG9y
JiB2aXNpdG9yKQorLy90ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgorLy9pbmxpbmUgdm9pZCBX
ZWFrU2V0Ojp2aXNpdChWaXNpdG9yJiB2aXNpdG9yKQoraW5saW5lIHZvaWQgV2Vha1NldDo6dmlz
aXQxKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgZm9yIChXZWFrQmxvY2sq
IGJsb2NrID0gbV9ibG9ja3MuaGVhZCgpOyBibG9jazsgYmxvY2sgPSBibG9jay0+bmV4dCgpKQot
ICAgICAgICBibG9jay0+dmlzaXQodmlzaXRvcik7CisgICAgICAgIGJsb2NrLT52aXNpdDEodmlz
aXRvcik7CiB9CiAKIGlubGluZSB2b2lkIFdlYWtTZXQ6OnJlYXAoKQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1NoYWRvd0NoaWNrZW4uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TaGFkb3dDaGlja2VuLmNwcAkocmV2
aXNpb24gMjcyMjk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1NoYWRv
d0NoaWNrZW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NDAsNyArNDQwLDcgQEAgdm9pZCBTaGFk
b3dDaGlja2VuOjp1cGRhdGUoVk0mIHZtLCBDYWxsRgogICAgICAgICBkYXRhTG9nKCIgICAgQWZ0
ZXIgY2xlYW4tdXA6ICIsICp0aGlzLCAiXG4iKTsKIH0KIAotdm9pZCBTaGFkb3dDaGlja2VuOjp2
aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBTaGFkb3dDaGlja2VuOjp2
aXNpdENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgZm9yICh1
bnNpZ25lZCBpID0gbV9sb2dDdXJzb3IgLSBtX2xvZzsgaS0tOykgewogICAgICAgICBKU09iamVj
dCogY2FsbGVlID0gbV9sb2dbaV0uY2FsbGVlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ludGVycHJldGVyL1NoYWRvd0NoaWNrZW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW50ZXJwcmV0ZXIvU2hhZG93Q2hpY2tlbi5oCShyZXZpc2lvbiAyNzIyOTcpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU2hhZG93Q2hpY2tlbi5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNSwxMyArMzUsMTMgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKK2NsYXNz
IEFic3RyYWN0U2xvdFZpc2l0b3I7CiBjbGFzcyBDYWxsRnJhbWU7CiBjbGFzcyBDb2RlQmxvY2s7
CiBjbGFzcyBKU0FycmF5OwogY2xhc3MgSlNPYmplY3Q7CiBjbGFzcyBKU1Njb3BlOwogY2xhc3Mg
TExJbnRPZmZzZXRzRXh0cmFjdG9yOwotY2xhc3MgU2xvdFZpc2l0b3I7CiBjbGFzcyBWTTsKIAog
Ly8gU2hhZG93Q2hpY2tlbiBpcyBhIGxvZyB0aGF0IGNhbiBiZSB1c2VkIHRvIHByb2R1Y2UgYSBz
aGFkb3cgc3RhY2sgb2YgQ0hJQ0tFTi1zdHlsZSBzdGFjayBmcmFtZXMuCkBAIC0xOTYsNyArMTk2
LDcgQEAgcHVibGljOgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CiAgICAgdm9pZCBp
dGVyYXRlKFZNJiwgQ2FsbEZyYW1lKiwgY29uc3QgRnVuY3RvciYpOwogICAgIAotICAgIHZvaWQg
dmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYpOworICAgIHZvaWQgdmlzaXRDaGlsZHJlbihBYnN0
cmFjdFNsb3RWaXNpdG9yJik7CiAgICAgdm9pZCByZXNldCgpOwogICAgIAogICAgIC8vIEpJVCBz
dXBwb3J0LgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9HQ0F3YXJlSklUU3R1YlJv
dXRpbmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvR0NBd2Fy
ZUpJVFN0dWJSb3V0aW5lLmNwcAkocmV2aXNpb24gMjcyMjk3KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9HQ0F3YXJlSklUU3R1YlJvdXRpbmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03
MywxMCArNzMsMTUgQEAgdm9pZCBHQ0F3YXJlSklUU3R1YlJvdXRpbmU6OmRlbGV0ZUZyb21HQwog
ICAgIGRlbGV0ZSB0aGlzOwogfQogCi12b2lkIEdDQXdhcmVKSVRTdHViUm91dGluZTo6bWFya1Jl
cXVpcmVkT2JqZWN0c0ludGVybmFsKFNsb3RWaXNpdG9yJikKKy8vdm9pZCBHQ0F3YXJlSklUU3R1
YlJvdXRpbmU6Om1hcmtSZXF1aXJlZE9iamVjdHNJbnRlcm5hbChTbG90VmlzaXRvciYpCit2b2lk
IEdDQXdhcmVKSVRTdHViUm91dGluZTo6bWFya1JlcXVpcmVkT2JqZWN0c0ludGVybmFsMShBYnN0
cmFjdFNsb3RWaXNpdG9yJikKIHsKIH0KIAorLy92b2lkIEdDQXdhcmVKSVRTdHViUm91dGluZTo6
bWFya1JlcXVpcmVkT2JqZWN0c0ludGVybmFsKFZlcmlmaWVyU2xvdFZpc2l0b3ImKQorLy97Cisv
L30KKwogTWFya2luZ0dDQXdhcmVKSVRTdHViUm91dGluZTo6TWFya2luZ0dDQXdhcmVKSVRTdHVi
Um91dGluZSgKICAgICBjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUU3R1YlJvdXRpbmVQ
dHJUYWc+JiBjb2RlLCBWTSYgdm0sIGNvbnN0IEpTQ2VsbCogb3duZXIsCiAgICAgY29uc3QgVmVj
dG9yPEpTQ2VsbCo+JiBjZWxscywgQmFnPENhbGxMaW5rSW5mbz4mJiBjYWxsTGlua0luZm9zKQpA
QCAtOTIsMTIgKzk3LDE5IEBAIE1hcmtpbmdHQ0F3YXJlSklUU3R1YlJvdXRpbmU6On5NYXJraW5n
R0MKIHsKIH0KIAotdm9pZCBNYXJraW5nR0NBd2FyZUpJVFN0dWJSb3V0aW5lOjptYXJrUmVxdWly
ZWRPYmplY3RzSW50ZXJuYWwoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3ZvaWQgTWFya2luZ0dD
QXdhcmVKSVRTdHViUm91dGluZTo6bWFya1JlcXVpcmVkT2JqZWN0c0ludGVybmFsKFNsb3RWaXNp
dG9yJiB2aXNpdG9yKQordm9pZCBNYXJraW5nR0NBd2FyZUpJVFN0dWJSb3V0aW5lOjptYXJrUmVx
dWlyZWRPYmplY3RzSW50ZXJuYWwxKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAg
ICAgZm9yIChhdXRvJiBlbnRyeSA6IG1fY2VsbHMpCiAgICAgICAgIHZpc2l0b3IuYXBwZW5kKGVu
dHJ5KTsKIH0KIAorLy8gRklYTUUgZGVkdXBlPworLy92b2lkIE1hcmtpbmdHQ0F3YXJlSklUU3R1
YlJvdXRpbmU6Om1hcmtSZXF1aXJlZE9iamVjdHNJbnRlcm5hbChWZXJpZmllclNsb3RWaXNpdG9y
JiB2aXNpdG9yKQorLy97CisvLyAgICBmb3IgKGF1dG8mIGVudHJ5IDogbV9jZWxscykKKy8vICAg
ICAgICB2aXNpdG9yLmFwcGVuZChlbnRyeSk7CisvL30KIAogR0NBd2FyZUpJVFN0dWJSb3V0aW5l
V2l0aEV4Y2VwdGlvbkhhbmRsZXI6OkdDQXdhcmVKSVRTdHViUm91dGluZVdpdGhFeGNlcHRpb25I
YW5kbGVyKAogICAgIGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRTdHViUm91dGluZVB0
clRhZz4mIGNvZGUsIFZNJiB2bSwgIGNvbnN0IEpTQ2VsbCogb3duZXIsIGNvbnN0IFZlY3RvcjxK
U0NlbGwqPiYgY2VsbHMsIEJhZzxDYWxsTGlua0luZm8+JiYgY2FsbExpbmtJbmZvcywKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvR0NBd2FyZUpJVFN0dWJSb3V0aW5lLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9HQ0F3YXJlSklUU3R1YlJvdXRpbmUu
aAkocmV2aXNpb24gMjcyMjk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9HQ0F3YXJl
SklUU3R1YlJvdXRpbmUuaAkod29ya2luZyBjb3B5KQpAQCAtNjAsMTAgKzYwLDEyIEBAIHB1Ymxp
YzoKICAgICB7CiAgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEdDQXdhcmVKSVRTdHViUm91
dGluZShjb2RlLCB2bSkpOwogICAgIH0KLSAgICAKLSAgICB2b2lkIG1hcmtSZXF1aXJlZE9iamVj
dHMoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisKKy8vICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0
b3I+CisvLyAgICB2b2lkIG1hcmtSZXF1aXJlZE9iamVjdHMoVmlzaXRvciYgdmlzaXRvcikKKyAg
ICB2b2lkIG1hcmtSZXF1aXJlZE9iamVjdHMxKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3Ip
CiAgICAgewotICAgICAgICBtYXJrUmVxdWlyZWRPYmplY3RzSW50ZXJuYWwodmlzaXRvcik7Cisg
ICAgICAgIG1hcmtSZXF1aXJlZE9iamVjdHNJbnRlcm5hbDEodmlzaXRvcik7CiAgICAgfQogICAg
IAogICAgIHZvaWQgZGVsZXRlRnJvbUdDKCk7CkBAIC03MSw3ICs3Myw5IEBAIHB1YmxpYzoKIHBy
b3RlY3RlZDoKICAgICB2b2lkIG9ic2VydmVaZXJvUmVmQ291bnQoKSBvdmVycmlkZTsKICAgICAK
LSAgICB2aXJ0dWFsIHZvaWQgbWFya1JlcXVpcmVkT2JqZWN0c0ludGVybmFsKFNsb3RWaXNpdG9y
Jik7CisvLyAgICB2aXJ0dWFsIHZvaWQgbWFya1JlcXVpcmVkT2JqZWN0c0ludGVybmFsKFNsb3RW
aXNpdG9yJik7CisvLyAgICB2aXJ0dWFsIHZvaWQgbWFya1JlcXVpcmVkT2JqZWN0c0ludGVybmFs
KFZlcmlmaWVyU2xvdFZpc2l0b3ImKTsKKyAgICB2aXJ0dWFsIHZvaWQgbWFya1JlcXVpcmVkT2Jq
ZWN0c0ludGVybmFsMShBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAKIHByaXZhdGU6CiAgICAgZnJp
ZW5kIGNsYXNzIEpJVFN0dWJSb3V0aW5lU2V0OwpAQCAtODksNyArOTMsOSBAQCBwdWJsaWM6CiAg
ICAgfk1hcmtpbmdHQ0F3YXJlSklUU3R1YlJvdXRpbmUoKSBvdmVycmlkZTsKICAgICAKIHByb3Rl
Y3RlZDoKLSAgICB2b2lkIG1hcmtSZXF1aXJlZE9iamVjdHNJbnRlcm5hbChTbG90VmlzaXRvciYp
IG92ZXJyaWRlOworLy8gICAgdm9pZCBtYXJrUmVxdWlyZWRPYmplY3RzSW50ZXJuYWwoU2xvdFZp
c2l0b3ImKSBvdmVycmlkZTsKKy8vICAgIHZvaWQgbWFya1JlcXVpcmVkT2JqZWN0c0ludGVybmFs
KFZlcmlmaWVyU2xvdFZpc2l0b3ImKSBvdmVycmlkZTsKKyAgICB2b2lkIG1hcmtSZXF1aXJlZE9i
amVjdHNJbnRlcm5hbDEoQWJzdHJhY3RTbG90VmlzaXRvciYpIG92ZXJyaWRlOwogCiBwcml2YXRl
OgogICAgIFZlY3RvcjxXcml0ZUJhcnJpZXI8SlNDZWxsPj4gbV9jZWxsczsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUG9seW1vcnBoaWNDYWxsU3R1YlJv
dXRpbmUuY3BwCShyZXZpc2lvbiAyNzIyOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L1BvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM1LDEy
ICsxMzUsMjAgQEAgYm9vbCBQb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZTo6dmlzaXRXZQogICAg
IHJldHVybiBpc1N0aWxsTGl2ZTsKIH0KIAotdm9pZCBQb2x5bW9ycGhpY0NhbGxTdHViUm91dGlu
ZTo6bWFya1JlcXVpcmVkT2JqZWN0c0ludGVybmFsKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy92
b2lkIFBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lOjptYXJrUmVxdWlyZWRPYmplY3RzSW50ZXJu
YWwoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIFBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5l
OjptYXJrUmVxdWlyZWRPYmplY3RzSW50ZXJuYWwxKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0
b3IpCiB7CiAgICAgZm9yIChhdXRvJiB2YXJpYW50IDogbV92YXJpYW50cykKICAgICAgICAgdmlz
aXRvci5hcHBlbmQodmFyaWFudCk7CiB9CiAKKy8vLy8gbWxhbSBGSVhNRSBkZWR1cGU/Pz8KKy8v
dm9pZCBQb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZTo6bWFya1JlcXVpcmVkT2JqZWN0c0ludGVy
bmFsKFZlcmlmaWVyU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3sKKy8vICAgIGZvciAoYXV0byYg
dmFyaWFudCA6IG1fdmFyaWFudHMpCisvLyAgICAgICAgdmlzaXRvci5hcHBlbmQodmFyaWFudCk7
CisvL30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBFTkFCTEUoSklUKQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Qb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUG9seW1vcnBoaWNDYWxs
U3R1YlJvdXRpbmUuaAkocmV2aXNpb24gMjcyMjk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9Qb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDUs
NyArMTA1LDkgQEAgcHVibGljOgogICAgIGJvb2wgdmlzaXRXZWFrKFZNJikgZmluYWw7CiAKIHBy
aXZhdGU6Ci0gICAgdm9pZCBtYXJrUmVxdWlyZWRPYmplY3RzSW50ZXJuYWwoU2xvdFZpc2l0b3Im
KSBmaW5hbDsKKy8vICAgIHZvaWQgbWFya1JlcXVpcmVkT2JqZWN0c0ludGVybmFsKFNsb3RWaXNp
dG9yJikgZmluYWw7CisvLyAgICB2b2lkIG1hcmtSZXF1aXJlZE9iamVjdHNJbnRlcm5hbChWZXJp
ZmllclNsb3RWaXNpdG9yJikgZmluYWw7CisgICAgdm9pZCBtYXJrUmVxdWlyZWRPYmplY3RzSW50
ZXJuYWwxKEFic3RyYWN0U2xvdFZpc2l0b3ImKSBmaW5hbDsKIAogICAgIFZlY3RvcjxXcml0ZUJh
cnJpZXI8SlNDZWxsPiwgMj4gbV92YXJpYW50czsKICAgICBVbmlxdWVBcnJheTx1aW50MzJfdD4g
bV9mYXN0Q291bnRzOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQWJzdHJh
Y3RNb2R1bGVSZWNvcmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0Fic3RyYWN0TW9kdWxlUmVjb3JkLmNwcAkocmV2aXNpb24gMjcyMjk3KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQWJzdHJhY3RNb2R1bGVSZWNvcmQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC02MCw3ICs2MCw4IEBAIHZvaWQgQWJzdHJhY3RNb2R1bGVSZWNvcmQ6OmZp
bmlzaENyZWF0aW8KICAgICBwdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0s
ICJkZXBlbmRlbmNpZXNNYXAiX3MpLCBtX2RlcGVuZGVuY2llc01hcC5nZXQoKSk7CiB9CiAKLXZv
aWQgQWJzdHJhY3RNb2R1bGVSZWNvcmQ6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90
VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEFic3Ry
YWN0TW9kdWxlUmVjb3JkOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3Im
IHZpc2l0b3IpCiB7CiAgICAgQWJzdHJhY3RNb2R1bGVSZWNvcmQqIHRoaXNPYmplY3QgPSBqc0Nh
c3Q8QWJzdHJhY3RNb2R1bGVSZWNvcmQqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lO
SEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC03MCw2ICs3MSw4IEBAIHZvaWQgQWJzdHJh
Y3RNb2R1bGVSZWNvcmQ6OnZpc2l0Q2hpbGRyZW4KICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2Jq
ZWN0LT5tX2RlcGVuZGVuY2llc01hcCk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihBYnN0
cmFjdE1vZHVsZVJlY29yZCk7CisKIHZvaWQgQWJzdHJhY3RNb2R1bGVSZWNvcmQ6OmFwcGVuZFJl
cXVlc3RlZE1vZHVsZShjb25zdCBJZGVudGlmaWVyJiBtb2R1bGVOYW1lKQogewogICAgIG1fcmVx
dWVzdGVkTW9kdWxlcy5hZGQobW9kdWxlTmFtZS5pbXBsKCkpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQWJzdHJhY3RNb2R1bGVSZWNvcmQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BYnN0cmFjdE1vZHVsZVJlY29yZC5oCShyZXZp
c2lvbiAyNzIyOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BYnN0cmFjdE1v
ZHVsZVJlY29yZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzYsNyArMTM2LDcgQEAgcHJvdGVjdGVk
OgogICAgIEFic3RyYWN0TW9kdWxlUmVjb3JkKFZNJiwgU3RydWN0dXJlKiwgY29uc3QgSWRlbnRp
ZmllciYpOwogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxPYmplY3QqLCBWTSYpOwog
Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwor
ICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICB2b2lkIHNldE1vZHVsZUVudmlyb25t
ZW50KEpTR2xvYmFsT2JqZWN0KiwgSlNNb2R1bGVFbnZpcm9ubWVudCopOwogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcmdMaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcmdMaXN0LmNwcAkocmV2aXNpb24gMjcyMjk3KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJnTGlzdC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTUxLDcgKzUxLDcgQEAgdm9pZCBBcmdMaXN0OjpnZXRTbGljZShpbnQgc3RhcnRJbmRl
eCwgQQogICAgIHJlc3VsdC5tX2FyZ0NvdW50ID0gIG1fYXJnQ291bnQgLSBzdGFydEluZGV4Owog
fQogCi12b2lkIE1hcmtlZEFyZ3VtZW50QnVmZmVyOjptYXJrTGlzdHMoU2xvdFZpc2l0b3ImIHZp
c2l0b3IsIExpc3RTZXQmIG1hcmtTZXQpCit2b2lkIE1hcmtlZEFyZ3VtZW50QnVmZmVyOjptYXJr
TGlzdHMoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvciwgTGlzdFNldCYgbWFya1NldCkKIHsK
ICAgICBMaXN0U2V0OjppdGVyYXRvciBlbmQgPSBtYXJrU2V0LmVuZCgpOwogICAgIGZvciAoTGlz
dFNldDo6aXRlcmF0b3IgaXQgPSBtYXJrU2V0LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJnTGlzdC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FyZ0xpc3QuaAkocmV2aXNpb24gMjcy
Mjk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJnTGlzdC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xMTgsNyArMTE4LDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gcmVzdWx0
OwogICAgIH0KICAgICAgICAgCi0gICAgc3RhdGljIHZvaWQgbWFya0xpc3RzKFNsb3RWaXNpdG9y
JiwgTGlzdFNldCYpOworICAgIHN0YXRpYyB2b2lkIG1hcmtMaXN0cyhBYnN0cmFjdFNsb3RWaXNp
dG9yJiwgTGlzdFNldCYpOwogCiAgICAgdm9pZCBlbnN1cmVDYXBhY2l0eShzaXplX3QgcmVxdWVz
dGVkQ2FwYWNpdHkpCiAgICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Q2FjaGVhYmxlSWRlbnRpZmllci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0NhY2hlYWJsZUlkZW50aWZpZXIuaAkocmV2aXNpb24gMjcyMjk3KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVhYmxlSWRlbnRpZmllci5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zOSwxMCArMzksMTEgQEAgdXNpbmcgV1RGOjpVbmlxdWVkU3RyaW5nSW1wbDsK
IAogbmFtZXNwYWNlIEpTQyB7CiAKK2NsYXNzIEFic3RyYWN0U2xvdFZpc2l0b3I7CiBjbGFzcyBD
b2RlQmxvY2s7CiBjbGFzcyBJZGVudGlmaWVyOwogY2xhc3MgSlNDZWxsOwotY2xhc3MgU2xvdFZp
c2l0b3I7CisvL2NsYXNzIFNsb3RWaXNpdG9yOwogCiBjbGFzcyBDYWNoZWFibGVJZGVudGlmaWVy
IHsKIHB1YmxpYzoKQEAgLTg3LDcgKzg4LDggQEAgcHVibGljOgogCiAgICAgdWludHB0cl90IHJh
d0JpdHMoKSBjb25zdCB7IHJldHVybiBtX2JpdHM7IH0KIAotICAgIGlubGluZSB2b2lkIHZpc2l0
QWdncmVnYXRlKFNsb3RWaXNpdG9yJikgY29uc3Q7CisvLyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPiBpbmxpbmUgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShWaXNpdG9yJikgY29uc3Q7CisgICAg
aW5saW5lIHZvaWQgdmlzaXRBZ2dyZWdhdGUxKEFic3RyYWN0U2xvdFZpc2l0b3ImKSBjb25zdDsK
IAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0Owog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWFibGVJZGVudGlmaWVy
SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Nh
Y2hlYWJsZUlkZW50aWZpZXJJbmxpbmVzLmgJKHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlYWJsZUlkZW50aWZpZXJJbmxpbmVzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEzNywxMiArMTM3LDE2IEBAIGlubGluZSB2b2lkIENhY2hlYWJsZUlkZW50
aWZpZXI6OnNldFVpZEIKICAgICBtX2JpdHMgPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90Pih1aWQp
IHwgc191aWRUYWc7CiB9CiAKLWlubGluZSB2b2lkIENhY2hlYWJsZUlkZW50aWZpZXI6OnZpc2l0
QWdncmVnYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBjb25zdAorLy90ZW1wbGF0ZTx0eXBlbmFt
ZSBWaXNpdG9yPgorLy9pbmxpbmUgdm9pZCBDYWNoZWFibGVJZGVudGlmaWVyOjp2aXNpdEFnZ3Jl
Z2F0ZShWaXNpdG9yJiB2aXNpdG9yKSBjb25zdAoraW5saW5lIHZvaWQgQ2FjaGVhYmxlSWRlbnRp
Zmllcjo6dmlzaXRBZ2dyZWdhdGUxKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0
CiB7CiAgICAgaWYgKG1fYml0cyAmJiBpc0NlbGwoKSkKICAgICAgICAgdmlzaXRvci5hcHBlbmRV
bmJhcnJpZXJlZChjZWxsKCkpOwogfQogCisvL3RlbXBsYXRlIHZvaWQgQ2FjaGVhYmxlSWRlbnRp
Zmllcjo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImKSBjb25zdDsKKy8vdGVtcGxhdGUgdm9p
ZCBDYWNoZWFibGVJZGVudGlmaWVyOjp2aXNpdEFnZ3JlZ2F0ZShWZXJpZmllclNsb3RWaXNpdG9y
JikgY29uc3Q7CiAKIGlubGluZSBib29sIENhY2hlYWJsZUlkZW50aWZpZXI6Om9wZXJhdG9yPT0o
Y29uc3QgQ2FjaGVhYmxlSWRlbnRpZmllciYgb3RoZXIpIGNvbnN0CiB7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9DbGFzc0luZm8uaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9DbGFzc0luZm8uaAkocmV2aXNpb24gMjcyMjk3KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xhc3NJbmZvLmgJKHdvcmtpbmcgY29weSkK
QEAgLTQ0LDkgKzQ0LDYgQEAgc3RydWN0IE1ldGhvZFRhYmxlIHsKICAgICB1c2luZyBEZXN0cm95
RnVuY3Rpb25QdHIgPSB2b2lkICgqKShKU0NlbGwqKTsKICAgICBEZXN0cm95RnVuY3Rpb25QdHIg
TUVUSE9EX1RBQkxFX0VOVFJZKGRlc3Ryb3kpOwogCi0gICAgdXNpbmcgVmlzaXRDaGlsZHJlbkZ1
bmN0aW9uUHRyID0gdm9pZCAoKikoSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKLSAgICBWaXNpdENo
aWxkcmVuRnVuY3Rpb25QdHIgTUVUSE9EX1RBQkxFX0VOVFJZKHZpc2l0Q2hpbGRyZW4pOwotCiAg
ICAgdXNpbmcgR2V0Q2FsbERhdGFGdW5jdGlvblB0ciA9IENhbGxEYXRhICgqKShKU0NlbGwqKTsK
ICAgICBHZXRDYWxsRGF0YUZ1bmN0aW9uUHRyIE1FVEhPRF9UQUJMRV9FTlRSWShnZXRDYWxsRGF0
YSk7CiAKQEAgLTEyMCw3ICsxMTcsMTggQEAgc3RydWN0IE1ldGhvZFRhYmxlIHsKICAgICB1c2lu
ZyBFc3RpbWF0ZWRTaXplRnVuY3Rpb25QdHIgPSBzaXplX3QgKCopKEpTQ2VsbCosIFZNJik7CiAg
ICAgRXN0aW1hdGVkU2l6ZUZ1bmN0aW9uUHRyIE1FVEhPRF9UQUJMRV9FTlRSWShlc3RpbWF0ZWRT
aXplKTsKIAotICAgIHVzaW5nIFZpc2l0T3V0cHV0Q29uc3RyYWludHNQdHIgPSB2b2lkICgqKShK
U0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIHVzaW5nIFZpc2l0Q2hpbGRyZW5GdW5jdGlvblB0
ciA9IHZvaWQgKCopKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgVmlzaXRDaGlsZHJlbkZ1
bmN0aW9uUHRyIE1FVEhPRF9UQUJMRV9FTlRSWSh2aXNpdENoaWxkcmVuV2l0aFNsb3RWaXNpdG9y
KTsKKworLy8gICAgdXNpbmcgVmlzaXRDaGlsZHJlbldpdGhWZXJpZmllclNsb3RWaXNpdG9yUHRy
ID0gdm9pZCAoKikoSlNDZWxsKiwgVmVyaWZpZXJTbG90VmlzaXRvciYpOworICAgIHVzaW5nIFZp
c2l0Q2hpbGRyZW5XaXRoQWJzdHJhY3RTbG90VmlzaXRvclB0ciA9IHZvaWQgKCopKEpTQ2VsbCos
IEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKKyAgICBWaXNpdENoaWxkcmVuV2l0aEFic3RyYWN0U2xv
dFZpc2l0b3JQdHIgTUVUSE9EX1RBQkxFX0VOVFJZKHZpc2l0Q2hpbGRyZW5XaXRoQWJzdHJhY3RT
bG90VmlzaXRvcik7CisKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgdmlzaXRDaGlsZHJlbihKU0Nl
bGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBjb25zdCB7IHZpc2l0Q2hpbGRyZW5XaXRo
U2xvdFZpc2l0b3IoY2VsbCwgdmlzaXRvcik7IH0KKy8vICAgIEFMV0FZU19JTkxJTkUgdm9pZCB2
aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgVmVyaWZpZXJTbG90VmlzaXRvciYgdmlzaXRvcikg
Y29uc3QgeyB2aXNpdENoaWxkcmVuV2l0aFZlcmlmaWVyU2xvdFZpc2l0b3IoY2VsbCwgdmlzaXRv
cik7IH0KKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGws
IEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0IHsgdmlzaXRDaGlsZHJlbldpdGhB
YnN0cmFjdFNsb3RWaXNpdG9yKGNlbGwsIHZpc2l0b3IpOyB9CisKKyAgICB1c2luZyBWaXNpdE91
dHB1dENvbnN0cmFpbnRzUHRyID0gdm9pZCAoKikoSlNDZWxsKiwgQWJzdHJhY3RTbG90VmlzaXRv
ciYpOwogICAgIFZpc2l0T3V0cHV0Q29uc3RyYWludHNQdHIgTUVUSE9EX1RBQkxFX0VOVFJZKHZp
c2l0T3V0cHV0Q29uc3RyYWludHMpOwogfTsKIApAQCAtMTQ3LDcgKzE1NSw2IEBAIHN0cnVjdCBN
ZXRob2RUYWJsZSB7CiAgICAgSlNDYXN0aW5nSGVscGVyczo6SW5oZXJpdHNUcmFpdHM8Q2xhc3NO
YW1lPjo6dHlwZVJhbmdlLCBcCiAgICAgeyBcCiAgICAgICAgICZDbGFzc05hbWU6OmRlc3Ryb3ks
IFwKLSAgICAgICAgJkNsYXNzTmFtZTo6dmlzaXRDaGlsZHJlbiwgXAogICAgICAgICAmQ2xhc3NO
YW1lOjpnZXRDYWxsRGF0YSwgXAogICAgICAgICAmQ2xhc3NOYW1lOjpnZXRDb25zdHJ1Y3REYXRh
LCBcCiAgICAgICAgICZDbGFzc05hbWU6OnB1dCwgXApAQCAtMTczLDYgKzE4MCw4IEBAIHN0cnVj
dCBNZXRob2RUYWJsZSB7CiAgICAgICAgICZDbGFzc05hbWU6OmR1bXBUb1N0cmVhbSwgXAogICAg
ICAgICAmQ2xhc3NOYW1lOjphbmFseXplSGVhcCwgXAogICAgICAgICAmQ2xhc3NOYW1lOjplc3Rp
bWF0ZWRTaXplLCBcCisgICAgICAgICZDbGFzc05hbWU6OnZpc2l0Q2hpbGRyZW4sIFwKKyAgICAg
ICAgJkNsYXNzTmFtZTo6dmlzaXRDaGlsZHJlbiwgXAogICAgICAgICAmQ2xhc3NOYW1lOjp2aXNp
dE91dHB1dENvbnN0cmFpbnRzLCBcCiAgICAgfSwgXAogICAgIENsYXNzTmFtZTo6VHlwZWRBcnJh
eVN0b3JhZ2VUeXBlLCBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DbG9u
ZWRBcmd1bWVudHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0Nsb25lZEFyZ3VtZW50cy5jcHAJKHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0Nsb25lZEFyZ3VtZW50cy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI2Nyw3ICsyNjcsOCBAQCB2b2lkIENsb25lZEFyZ3VtZW50czo6bWF0ZXJpYWxpemVTcGVjaWFs
CiAgICAgICAgIG1hdGVyaWFsaXplU3BlY2lhbHMoZ2xvYmFsT2JqZWN0KTsKIH0KIAotdm9pZCBD
bG9uZWRBcmd1bWVudHM6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYg
dmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIENsb25lZEFyZ3VtZW50
czo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewog
ICAgIENsb25lZEFyZ3VtZW50cyogdGhpc09iamVjdCA9IGpzQ2FzdDxDbG9uZWRBcmd1bWVudHMq
PihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8o
KSk7CkBAIC0yNzUsNSArMjc2LDcgQEAgdm9pZCBDbG9uZWRBcmd1bWVudHM6OnZpc2l0Q2hpbGRy
ZW4oSlNDZQogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fY2FsbGVlKTsKIH0KIAor
REVGSU5FX1ZJU0lUX0NISUxEUkVOKENsb25lZEFyZ3VtZW50cyk7CisKIH0gLy8gbmFtZXNwYWNl
IEpTQwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DbG9uZWRBcmd1bWVu
dHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DbG9uZWRB
cmd1bWVudHMuaAkocmV2aXNpb24gMjcyMjk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQ2xvbmVkQXJndW1lbnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTYyLDcgKzYyLDcgQEAg
cHVibGljOgogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xv
YmFsT2JqZWN0KiwgSlNWYWx1ZSBwcm90b3R5cGUpOwogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNy
ZWF0ZVNsb3dQdXRTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUgcHJvdG90
eXBlKTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0
b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgREVDTEFSRV9JTkZPOwog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EaXJlY3RBcmd1bWVudHMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3Vt
ZW50cy5jcHAJKHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0RpcmVjdEFyZ3VtZW50cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkwLDcgKzkwLDggQEAg
c2l6ZV90IERpcmVjdEFyZ3VtZW50czo6ZXN0aW1hdGVkU2l6ZShKUwogICAgIHJldHVybiBCYXNl
Ojplc3RpbWF0ZWRTaXplKGNlbGwsIHZtKSArIG1hcHBlZEFyZ3VtZW50c1NpemUgKyBtb2RpZmll
ZEFyZ3VtZW50c1NpemU7CiB9CiAKLXZvaWQgRGlyZWN0QXJndW1lbnRzOjp2aXNpdENoaWxkcmVu
KEpTQ2VsbCogdGhpc0NlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5h
bWUgVmlzaXRvcj4KK3ZvaWQgRGlyZWN0QXJndW1lbnRzOjp2aXNpdENoaWxkcmVuSW1wbChKU0Nl
bGwqIHRoaXNDZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIERpcmVjdEFyZ3VtZW50cyog
dGhpc09iamVjdCA9IHN0YXRpY19jYXN0PERpcmVjdEFyZ3VtZW50cyo+KHRoaXNDZWxsKTsKICAg
ICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC0xMDQs
NiArMTA1LDggQEAgdm9pZCBEaXJlY3RBcmd1bWVudHM6OnZpc2l0Q2hpbGRyZW4oSlNDZQogICAg
IEdlbmVyaWNBcmd1bWVudHM8RGlyZWN0QXJndW1lbnRzPjo6dmlzaXRDaGlsZHJlbih0aGlzQ2Vs
bCwgdmlzaXRvcik7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihEaXJlY3RBcmd1bWVudHMp
OworCiBTdHJ1Y3R1cmUqIERpcmVjdEFyZ3VtZW50czo6Y3JlYXRlU3RydWN0dXJlKFZNJiB2bSwg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCiB7CiAgICAg
cmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlw
ZUluZm8oRGlyZWN0QXJndW1lbnRzVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGlyZWN0QXJndW1lbnRzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGlyZWN0QXJndW1lbnRzLmgJ
KHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVj
dEFyZ3VtZW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC02NSw3ICs2NSw3IEBAIHB1YmxpYzoKICAg
ICBzdGF0aWMgRGlyZWN0QXJndW1lbnRzKiBjcmVhdGVCeUNvcHlpbmcoSlNHbG9iYWxPYmplY3Qq
LCBDYWxsRnJhbWUqKTsKIAogICAgIHN0YXRpYyBzaXplX3QgZXN0aW1hdGVkU2l6ZShKU0NlbGwq
LCBWTSYpOwotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0
b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogICAgIAogICAgIHVpbnQzMl90IGlu
dGVybmFsTGVuZ3RoKCkgY29uc3QKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9FdmFsRXhlY3V0YWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvRXZhbEV4ZWN1dGFibGUuY3BwCShyZXZpc2lvbiAyNzIyOTcpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FdmFsRXhlY3V0YWJsZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQ5LDcgKzQ5LDggQEAgYXV0byBFdmFsRXhlY3V0YWJsZTo6ZW5zdXJlVGVtcGxh
dGVPYmplYwogICAgIHJldHVybiBlbnN1cmVUZW1wbGF0ZU9iamVjdE1hcEltcGwobV90ZW1wbGF0
ZU9iamVjdE1hcCk7CiB9CiAKLXZvaWQgRXZhbEV4ZWN1dGFibGU6OnZpc2l0Q2hpbGRyZW4oSlND
ZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0
b3I+Cit2b2lkIEV2YWxFeGVjdXRhYmxlOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGws
IFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgRXZhbEV4ZWN1dGFibGUqIHRoaXNPYmplY3QgPSBq
c0Nhc3Q8RXZhbEV4ZWN1dGFibGUqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVS
SVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC02Myw0ICs2NCw2IEBAIHZvaWQgRXZhbEV4ZWN1
dGFibGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWwKICAgICB9CiB9CiAKK0RFRklORV9WSVNJVF9DSElM
RFJFTihFdmFsRXhlY3V0YWJsZSk7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXZhbEV4ZWN1dGFibGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FdmFsRXhlY3V0YWJsZS5oCShyZXZpc2lvbiAy
NzIyOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FdmFsRXhlY3V0YWJsZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC03OCw3ICs3OCw3IEBAIHByb3RlY3RlZDoKICAgICB1c2luZyBC
YXNlOjpmaW5pc2hDcmVhdGlvbjsKICAgICBFdmFsRXhlY3V0YWJsZShKU0dsb2JhbE9iamVjdCos
IGNvbnN0IFNvdXJjZUNvZGUmLCBib29sIGluU3RyaWN0Q29udGV4dCwgRGVyaXZlZENvbnRleHRU
eXBlLCBib29sIGlzQXJyb3dGdW5jdGlvbkNvbnRleHQsIGJvb2wgaXNJbnNpZGVPcmRpbmFyeUZ1
bmN0aW9uLCBFdmFsQ29udGV4dFR5cGUsIE5lZWRzQ2xhc3NGaWVsZEluaXRpYWxpemVyKTsKIAot
ICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAg
ICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgdW5zaWduZWQgbV9uZWVkc0NsYXNzRmll
bGRJbml0aWFsaXplciA6IDE7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0V4Y2VwdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvRXhjZXB0aW9uLmNwcAkocmV2aXNpb24gMjcyMjk3KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvRXhjZXB0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTMsNyArNTMsOCBA
QCBTdHJ1Y3R1cmUqIEV4Y2VwdGlvbjo6Y3JlYXRlU3RydWN0dXJlKFZNCiAgICAgcmV0dXJuIFN0
cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oQ2Vs
bFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKIH0KIAotdm9pZCBFeGNlcHRpb246OnZp
c2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRl
PHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEV4Y2VwdGlvbjo6dmlzaXRDaGlsZHJlbkltcGwoSlND
ZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEV4Y2VwdGlvbiogdGhpc09iamVj
dCA9IGpzQ2FzdDxFeGNlcHRpb24qPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVS
SVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC02NCw2ICs2NSw4IEBAIHZvaWQgRXhjZXB0aW9u
Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2UKICAgICAgICAgZnJhbWUudmlzaXRDaGlsZHJlbih2
aXNpdG9yKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEV4Y2VwdGlvbik7CisKIEV4Y2Vw
dGlvbjo6RXhjZXB0aW9uKFZNJiB2bSkKICAgICA6IEJhc2Uodm0sIHZtLmV4Y2VwdGlvblN0cnVj
dHVyZS5nZXQoKSkKIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2Vw
dGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2Vw
dGlvbi5oCShyZXZpc2lvbiAyNzIyOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9FeGNlcHRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtNTEsNyArNTEsNyBAQCBwdWJsaWM6CiAK
ICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVj
dCosIEpTVmFsdWUgcHJvdG90eXBlKTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4o
SlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAg
ICAgREVDTEFSRV9FWFBPUlRfSU5GTzsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvRnVuY3Rpb25FeGVjdXRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9GdW5jdGlvbkV4ZWN1dGFibGUuY3BwCShyZXZpc2lvbiAyNzIyOTcp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvbkV4ZWN1dGFibGUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC02Nyw3ICs2Nyw4IEBAIEZ1bmN0aW9uQ29kZUJsb2NrKiBGdW5j
dGlvbkV4ZWN1dGFibGU6OmIKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RnVuY3Rpb25Db2RlQmxv
Y2sqPihlZGdlLT5jb2RlQmxvY2soKS0+YmFzZWxpbmVBbHRlcm5hdGl2ZSgpKTsKIH0KIAotdm9p
ZCBGdW5jdGlvbkV4ZWN1dGFibGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90Vmlz
aXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEZ1bmN0aW9u
RXhlY3V0YWJsZTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNp
dG9yKQogewogICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogdGhpc09iamVjdCA9IGpzQ2FzdDxGdW5j
dGlvbkV4ZWN1dGFibGUqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRo
aXNPYmplY3QsIGluZm8oKSk7CkBAIC04Niw2ICs4Nyw4IEBAIHZvaWQgRnVuY3Rpb25FeGVjdXRh
YmxlOjp2aXNpdENoaWxkcmVuKEoKICAgICB9CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihG
dW5jdGlvbkV4ZWN1dGFibGUpOworCiBGdW5jdGlvbkV4ZWN1dGFibGUqIEZ1bmN0aW9uRXhlY3V0
YWJsZTo6ZnJvbUdsb2JhbENvZGUoCiAgICAgY29uc3QgSWRlbnRpZmllciYgbmFtZSwgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCAKICAgICBK
U09iamVjdComIGV4Y2VwdGlvbiwgaW50IG92ZXJyaWRlTGluZU51bWJlciwgT3B0aW9uYWw8aW50
PiBmdW5jdGlvbkNvbnN0cnVjdG9yUGFyYW1ldGVyc0VuZFBvc2l0aW9uKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25FeGVjdXRhYmxlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25FeGVjdXRhYmxlLmgJKHJl
dmlzaW9uIDI3MjI5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9u
RXhlY3V0YWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNjYsNyArMTY2LDcgQEAgcHVibGljOgog
ICAgIEpTUGFyc2VyU2NyaXB0TW9kZSBzY3JpcHRNb2RlKCkgY29uc3QgeyByZXR1cm4gbV91bmxp
bmtlZEV4ZWN1dGFibGUtPnNjcmlwdE1vZGUoKTsgfQogICAgIFNvdXJjZUNvZGUgY2xhc3NTb3Vy
Y2UoKSBjb25zdCB7IHJldHVybiBtX3VubGlua2VkRXhlY3V0YWJsZS0+Y2xhc3NTb3VyY2UoKTsg
fQogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYp
OworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAgICAgc3RhdGljIFN0cnVjdHVyZSogY3Jl
YXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1
ZSBwcm90bykKICAgICB7CiAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xv
YmFsT2JqZWN0LCBwcm90bywgVHlwZUluZm8oRnVuY3Rpb25FeGVjdXRhYmxlVHlwZSwgU3RydWN0
dXJlRmxhZ3MpLCBpbmZvKCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
RnVuY3Rpb25SYXJlRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvRnVuY3Rpb25SYXJlRGF0YS5jcHAJKHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uUmFyZURhdGEuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC01MSw3ICs1MSw4IEBAIFN0cnVjdHVyZSogRnVuY3Rpb25SYXJlRGF0YTo6Y3JlYXRl
U3RydWMKICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJv
dG90eXBlLCBUeXBlSW5mbyhDZWxsVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwogfQog
Ci12b2lkIEZ1bmN0aW9uUmFyZURhdGE6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90
VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEZ1bmN0
aW9uUmFyZURhdGE6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlz
aXRvcikKIHsKICAgICBGdW5jdGlvblJhcmVEYXRhKiByYXJlRGF0YSA9IGpzQ2FzdDxGdW5jdGlv
blJhcmVEYXRhKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjZWxsLCBp
bmZvKCkpOwpAQCAtNjMsNiArNjQsOCBAQCB2b2lkIEZ1bmN0aW9uUmFyZURhdGE6OnZpc2l0Q2hp
bGRyZW4oSlNDCiAgICAgdmlzaXRvci5hcHBlbmQocmFyZURhdGEtPm1fZXhlY3V0YWJsZSk7CiB9
CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihGdW5jdGlvblJhcmVEYXRhKTsKKwogRnVuY3Rpb25S
YXJlRGF0YTo6RnVuY3Rpb25SYXJlRGF0YShWTSYgdm0sIEV4ZWN1dGFibGVCYXNlKiBleGVjdXRh
YmxlKQogICAgIDogQmFzZSh2bSwgdm0uZnVuY3Rpb25SYXJlRGF0YVN0cnVjdHVyZS5nZXQoKSkK
ICAgICAsIG1fb2JqZWN0QWxsb2NhdGlvblByb2ZpbGUoKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25SYXJlRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uUmFyZURhdGEuaAkocmV2aXNpb24gMjcyMjk3
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25SYXJlRGF0YS5oCSh3
b3JraW5nIGNvcHkpCkBAIC02NSw3ICs2NSw3IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBTdHJ1
Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBwcm90
b3R5cGUpOwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90Vmlz
aXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBERUNMQVJFX0lORk87
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNBcmd1bWVudHMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljQXJn
dW1lbnRzLmgJKHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0dlbmVyaWNBcmd1bWVudHMuaAkod29ya2luZyBjb3B5KQpAQCAtNDQsNyArNDQsNyBAQCBw
cm90ZWN0ZWQ6CiAgICAgewogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4o
SlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1RFTVBMQVRFX1ZJU0lUX0NISUxE
UkVOOwogICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU09iamVjdCosIEpTR2xv
YmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKICAgICBzdGF0aWMgYm9v
bCBnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCB1
bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwogICAgIHN0YXRpYyB2b2lkIGdl
dE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFt
ZUFycmF5JiwgRG9udEVudW1Qcm9wZXJ0aWVzTW9kZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9HZW5lcmljQXJndW1lbnRzSW5saW5lcy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNBcmd1bWVudHNJbmxpbmVzLmgJKHJl
dmlzaW9uIDI3MjI5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNB
cmd1bWVudHNJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDggQEAKIG5hbWVz
cGFjZSBKU0MgewogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlPgotdm9pZCBHZW5lcmljQXJndW1l
bnRzPFR5cGU+Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogdGhpc0NlbGwsIFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgR2VuZXJpY0FyZ3VtZW50
czxUeXBlPjo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiB0aGlzQ2VsbCwgVmlzaXRvciYgdmlz
aXRvcikKIHsKICAgICBUeXBlKiB0aGlzT2JqZWN0ID0gc3RhdGljX2Nhc3Q8VHlwZSo+KHRoaXND
ZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7
CkBAIC00MSw2ICs0Miw4IEBAIHZvaWQgR2VuZXJpY0FyZ3VtZW50czxUeXBlPjo6dmlzaXRDaGls
ZHIKICAgICAgICAgdmlzaXRvci5tYXJrQXV4aWxpYXJ5KHRoaXNPYmplY3QtPm1fbW9kaWZpZWRB
cmd1bWVudHNEZXNjcmlwdG9yLmdldFVuc2FmZSgpKTsKIH0KIAorREVGSU5FX1RFTVBMQVRFX1ZJ
U0lUX0NISUxEUkVOKHRlbXBsYXRlPHR5cGVuYW1lIFR5cGU+LCBHZW5lcmljQXJndW1lbnRzPFR5
cGU+KTsKKwogdGVtcGxhdGU8dHlwZW5hbWUgVHlwZT4KIGJvb2wgR2VuZXJpY0FyZ3VtZW50czxU
eXBlPjo6Z2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiBvYmplY3QsIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZSBpZGVudCwgUHJvcGVydHlTbG90JiBzbG90KQog
ewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2V0dGVyU2V0dGVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZXR0ZXJTZXR0ZXIu
Y3BwCShyZXZpc2lvbiAyNzIyOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9H
ZXR0ZXJTZXR0ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3ICszMyw4IEBAIFNUQVRJQ19B
U1NFUlRfSVNfVFJJVklBTExZX0RFU1RSVUNUSUJMRSgKIAogY29uc3QgQ2xhc3NJbmZvIEdldHRl
clNldHRlcjo6c19pbmZvID0geyAiR2V0dGVyU2V0dGVyIiwgbnVsbHB0ciwgbnVsbHB0ciwgbnVs
bHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShHZXR0ZXJTZXR0ZXIpIH07CiAKLXZvaWQgR2V0dGVy
U2V0dGVyOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3Ip
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBHZXR0ZXJTZXR0ZXI6OnZpc2l0Q2hp
bGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBHZXR0ZXJT
ZXR0ZXIqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8R2V0dGVyU2V0dGVyKj4oY2VsbCk7CiAgICAgQVNT
RVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNDMsNiArNDQs
OCBAQCB2b2lkIEdldHRlclNldHRlcjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqCiAgICAgdmlzaXRv
ci5hcHBlbmQodGhpc09iamVjdC0+bV9zZXR0ZXIpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERS
RU4oR2V0dGVyU2V0dGVyKTsKKwogSlNWYWx1ZSBjYWxsR2V0dGVyKEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIEpTVmFsdWUgYmFzZSwgSlNWYWx1ZSBnZXR0ZXJTZXR0ZXIpCiB7CiAgICAg
Vk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvR2V0dGVyU2V0dGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvR2V0dGVyU2V0dGVyLmgJKHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0dldHRlclNldHRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC04
Miw3ICs4Miw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGNyZWF0ZSh2bSwgZ2xvYmFsT2Jq
ZWN0LCBnZXR0ZXJPYmplY3QsIHNldHRlck9iamVjdCk7CiAgICAgfQogCi0gICAgc3RhdGljIHZv
aWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklT
SVRfQ0hJTERSRU47CiAKICAgICBKU09iamVjdCogZ2V0dGVyKCkgY29uc3QgeyByZXR1cm4gbV9n
ZXR0ZXIuZ2V0KCk7IH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSGFz
aE1hcEltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0hhc2hNYXBJbXBsLmNwcAkocmV2aXNpb24gMjcyMjk3KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSGFzaE1hcEltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw5
IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCitERUZJTkVfVEVNUExBVEVfVklTSVRfQ0hJTERSRU4o
dGVtcGxhdGU8PiwgSGFzaE1hcEJ1Y2tldDxIYXNoTWFwQnVja2V0RGF0YUtleT4pOworREVGSU5F
X1RFTVBMQVRFX1ZJU0lUX0NISUxEUkVOKHRlbXBsYXRlPD4sIEhhc2hNYXBCdWNrZXQ8SGFzaE1h
cEJ1Y2tldERhdGFLZXlWYWx1ZT4pOworCiB0ZW1wbGF0ZTw+CiBjb25zdCBDbGFzc0luZm8gSGFz
aE1hcEJ1Y2tldDxIYXNoTWFwQnVja2V0RGF0YUtleT46OnNfaW5mbyA9CiAgICAgeyAiSGFzaE1h
cEJ1Y2tldCIsIG51bGxwdHIsIG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUo
SGFzaE1hcEJ1Y2tldDxIYXNoTWFwQnVja2V0RGF0YUtleT4pIH07CkBAIC0zOCw4ICs0MSw5IEBA
IHRlbXBsYXRlPD4KIGNvbnN0IENsYXNzSW5mbyBIYXNoTWFwQnVja2V0PEhhc2hNYXBCdWNrZXRE
YXRhS2V5VmFsdWU+OjpzX2luZm8gPQogICAgIHsgIkhhc2hNYXBCdWNrZXQiLCBudWxscHRyLCBu
dWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEhhc2hNYXBCdWNrZXQ8SGFzaE1h
cEJ1Y2tldERhdGFLZXlWYWx1ZT4pIH07CiAKLXRlbXBsYXRlIDx0eXBlbmFtZSBEYXRhPgotdm9p
ZCBIYXNoTWFwQnVja2V0PERhdGE+Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZp
c2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBEYXRhPgordGVtcGxhdGU8dHlwZW5h
bWUgVmlzaXRvcj4KK3ZvaWQgSGFzaE1hcEJ1Y2tldDxEYXRhPjo6dmlzaXRDaGlsZHJlbkltcGwo
SlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEhhc2hNYXBCdWNrZXQqIHRo
aXNPYmplY3QgPSBqc0Nhc3Q8SGFzaE1hcEJ1Y2tldCo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19P
QkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTUyLDggKzU2LDkgQEAgdm9p
ZCBIYXNoTWFwQnVja2V0PERhdGE+Ojp2aXNpdENoaWxkcmVuKAogICAgIHZpc2l0b3IuYXBwZW5k
VmFsdWVzKGJpdHdpc2VfY2FzdDxXcml0ZUJhcnJpZXI8VW5rbm93bj4qPigmdGhpc09iamVjdC0+
bV9kYXRhKSwgc2l6ZW9mKERhdGEpIC8gc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpOwog
fQogCi10ZW1wbGF0ZSA8dHlwZW5hbWUgSGFzaE1hcEJ1Y2tldD4KLXZvaWQgSGFzaE1hcEltcGw8
SGFzaE1hcEJ1Y2tldD46OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYg
dmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIEhhc2hNYXBCdWNrZXQ+Cit0ZW1wbGF0ZTx0eXBl
bmFtZSBWaXNpdG9yPgordm9pZCBIYXNoTWFwSW1wbDxIYXNoTWFwQnVja2V0Pjo6dmlzaXRDaGls
ZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEhhc2hNYXBJ
bXBsKiB0aGlzT2JqZWN0ID0ganNDYXN0PEhhc2hNYXBJbXBsKj4oY2VsbCk7CiAgICAgQVNTRVJU
X0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNjYsNiArNzEsOCBA
QCB2b2lkIEhhc2hNYXBJbXBsPEhhc2hNYXBCdWNrZXQ+Ojp2aXNpdENoCiAgICAgICAgIHZpc2l0
b3IubWFya0F1eGlsaWFyeShidWZmZXIpOwogfQogCitERUZJTkVfVEVNUExBVEVfVklTSVRfQ0hJ
TERSRU4odGVtcGxhdGU8dHlwZW5hbWUgSGFzaE1hcEJ1Y2tldD4sIEhhc2hNYXBJbXBsPEhhc2hN
YXBCdWNrZXQ+KTsKKwogdGVtcGxhdGUgPHR5cGVuYW1lIEhhc2hNYXBCdWNrZXQ+CiBzaXplX3Qg
SGFzaE1hcEltcGw8SGFzaE1hcEJ1Y2tldD46OmVzdGltYXRlZFNpemUoSlNDZWxsKiBjZWxsLCBW
TSYgdm0pCiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9IYXNoTWFwSW1w
bC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0hhc2hNYXBJ
bXBsLmgJKHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0hhc2hNYXBJbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0OCw3ICsxNDgsNyBAQCBwdWJsaWM6
CiAgICAgICAgIHJldHVybiBtX2RhdGEudmFsdWUuZ2V0KCk7CiAgICAgfQogCi0gICAgc3RhdGlj
IHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVf
VEVNUExBVEVfVklTSVRfQ0hJTERSRU47CiAKICAgICBBTFdBWVNfSU5MSU5FIEhhc2hNYXBCdWNr
ZXQqIG5leHQoKSBjb25zdCB7IHJldHVybiBtX25leHQuZ2V0KCk7IH0KICAgICBBTFdBWVNfSU5M
SU5FIEhhc2hNYXBCdWNrZXQqIHByZXYoKSBjb25zdCB7IHJldHVybiBtX3ByZXYuZ2V0KCk7IH0K
QEAgLTM2NCw3ICszNjQsNyBAQCBjbGFzcyBIYXNoTWFwSW1wbCA6IHB1YmxpYyBKU05vbkZpbmFs
T2JqCiBwdWJsaWM6CiAgICAgdXNpbmcgQnVja2V0VHlwZSA9IEhhc2hNYXBCdWNrZXRUeXBlOwog
Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwor
ICAgIERFQ0xBUkVfVEVNUExBVEVfVklTSVRfQ0hJTERSRU47CiAKICAgICBzdGF0aWMgc2l6ZV90
IGVzdGltYXRlZFNpemUoSlNDZWxsKiwgVk0mKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSW50ZXJuYWxGdW5jdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50ZXJuYWxGdW5jdGlvbi5jcHAJKHJldmlzaW9uIDI3MjI5
NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGVybmFsRnVuY3Rpb24uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC02NCw3ICs2NCw4IEBAIHZvaWQgSW50ZXJuYWxGdW5jdGlvbjo6
ZmluaXNoQ3JlYXRpb24oVk0KICAgICB9CiB9CiAKLXZvaWQgSW50ZXJuYWxGdW5jdGlvbjo6dmlz
aXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8
dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSW50ZXJuYWxGdW5jdGlvbjo6dmlzaXRDaGlsZHJlbklt
cGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEludGVybmFsRnVuY3Rp
b24qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SW50ZXJuYWxGdW5jdGlvbio+KGNlbGwpOwogICAgIEFT
U0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTczLDYgKzc0
LDggQEAgdm9pZCBJbnRlcm5hbEZ1bmN0aW9uOjp2aXNpdENoaWxkcmVuKEpTQwogICAgIHZpc2l0
b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fb3JpZ2luYWxOYW1lKTsKIH0KIAorREVGSU5FX0VYUE9S
VF9WSVNJVF9DSElMRFJFTihJbnRlcm5hbEZ1bmN0aW9uKTsKKwogY29uc3QgU3RyaW5nJiBJbnRl
cm5hbEZ1bmN0aW9uOjpuYW1lKCkKIHsKICAgICBjb25zdCBTdHJpbmcmIG5hbWUgPSBtX29yaWdp
bmFsTmFtZS0+dHJ5R2V0VmFsdWUoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0ludGVybmFsRnVuY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9JbnRlcm5hbEZ1bmN0aW9uLmgJKHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGVybmFsRnVuY3Rpb24uaAkod29ya2luZyBjb3B5
KQpAQCAtNDYsNyArNDYsNyBAQCBwdWJsaWM6CiAKICAgICBERUNMQVJFX0VYUE9SVF9JTkZPOwog
Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwq
LCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfRVhQT1JUX1ZJU0lUX0NISUxEUkVOOwogCiAg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgY29uc3QgU3RyaW5nJiBuYW1lKCk7CiAgICAgY29uc3QgU3Ry
aW5nIGRpc3BsYXlOYW1lKFZNJik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9JbnRsQ29sbGF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0ludGxDb2xsYXRvci5jcHAJKHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0ludGxDb2xsYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY1
LDcgKzY1LDggQEAgdm9pZCBJbnRsQ29sbGF0b3I6OmZpbmlzaENyZWF0aW9uKFZNJiB2bQogICAg
IEFTU0VSVChpbmhlcml0cyh2bSwgaW5mbygpKSk7CiB9CiAKLXZvaWQgSW50bENvbGxhdG9yOjp2
aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0
ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBJbnRsQ29sbGF0b3I6OnZpc2l0Q2hpbGRyZW5JbXBs
KEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBJbnRsQ29sbGF0b3IqIHRo
aXNPYmplY3QgPSBqc0Nhc3Q8SW50bENvbGxhdG9yKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09C
SkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNzUsNiArNzYsOCBAQCB2b2lk
IEludGxDb2xsYXRvcjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqCiAgICAgdmlzaXRvci5hcHBlbmQo
dGhpc09iamVjdC0+bV9ib3VuZENvbXBhcmUpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4o
SW50bENvbGxhdG9yKTsKKwogVmVjdG9yPFN0cmluZz4gSW50bENvbGxhdG9yOjpzb3J0TG9jYWxl
RGF0YShjb25zdCBTdHJpbmcmIGxvY2FsZSwgUmVsZXZhbnRFeHRlbnNpb25LZXkga2V5KQogewog
ICAgIC8vIDkuMSBJbnRlcm5hbCBzbG90cyBvZiBTZXJ2aWNlIENvbnN0cnVjdG9ycyAmIDEwLjIu
MyBJbnRlcm5hbCBzbG90cyAoRUNNQS00MDIgMi4wKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSW50bENvbGxhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSW50bENvbGxhdG9yLmgJKHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxDb2xsYXRvci5oCSh3b3JraW5nIGNvcHkpCkBA
IC04MCw3ICs4MCw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgSW50bENvbGxhdG9yKFZNJiwg
U3RydWN0dXJlKik7CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOwotICAgIHN0YXRpYyB2
b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJ
U0lUX0NISUxEUkVOOwogCiAgICAgYm9vbCB1cGRhdGVDYW5Eb0FTQ0lJVUNBRFVDRVRDb21wYXJp
c29uKCkgY29uc3Q7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxE
YXRlVGltZUZvcm1hdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSW50bERhdGVUaW1lRm9ybWF0LmNwcAkocmV2aXNpb24gMjcyMjk3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERhdGVUaW1lRm9ybWF0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtOTAsNyArOTAsOCBAQCB2b2lkIEludGxEYXRlVGltZUZvcm1hdDo6ZmluaXNoQ3Jl
YXRpb24oCiAgICAgQVNTRVJUKGluaGVyaXRzKHZtLCBpbmZvKCkpKTsKIH0KIAotdm9pZCBJbnRs
RGF0ZVRpbWVGb3JtYXQ6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYg
dmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEludGxEYXRlVGltZUZv
cm1hdDo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQog
ewogICAgIEludGxEYXRlVGltZUZvcm1hdCogdGhpc09iamVjdCA9IGpzQ2FzdDxJbnRsRGF0ZVRp
bWVGb3JtYXQqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmpl
Y3QsIGluZm8oKSk7CkBAIC0xMDAsNiArMTAxLDggQEAgdm9pZCBJbnRsRGF0ZVRpbWVGb3JtYXQ6
OnZpc2l0Q2hpbGRyZW4oSgogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fYm91bmRG
b3JtYXQpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSW50bERhdGVUaW1lRm9ybWF0KTsK
Kwogdm9pZCBJbnRsRGF0ZVRpbWVGb3JtYXQ6OnNldEJvdW5kRm9ybWF0KFZNJiB2bSwgSlNCb3Vu
ZEZ1bmN0aW9uKiBmb3JtYXQpCiB7CiAgICAgbV9ib3VuZEZvcm1hdC5zZXQodm0sIHRoaXMsIGZv
cm1hdCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsRGF0ZVRpbWVG
b3JtYXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRs
RGF0ZVRpbWVGb3JtYXQuaAkocmV2aXNpb24gMjcyMjk3KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSW50bERhdGVUaW1lRm9ybWF0LmgJKHdvcmtpbmcgY29weSkKQEAgLTg1LDcg
Kzg1LDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBJbnRsRGF0ZVRpbWVGb3JtYXQoVk0mLCBT
dHJ1Y3R1cmUqKTsKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7Ci0gICAgc3RhdGljIHZv
aWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklT
SVRfQ0hJTERSRU47CiAKICAgICBzdGF0aWMgVmVjdG9yPFN0cmluZz4gbG9jYWxlRGF0YShjb25z
dCBTdHJpbmcmLCBSZWxldmFudEV4dGVuc2lvbktleSk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0ludGxMb2NhbGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0ludGxMb2NhbGUuY3BwCShyZXZpc2lvbiAyNzIyOTcpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTG9jYWxlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNTgsNyArNTgsOCBAQCB2b2lkIEludGxMb2NhbGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2
bSkKICAgICBBU1NFUlQoaW5oZXJpdHModm0sIGluZm8oKSkpOwogfQogCi12b2lkIEludGxMb2Nh
bGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3Rl
bXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEludGxMb2NhbGU6OnZpc2l0Q2hpbGRyZW5J
bXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBhdXRvKiB0aGlzT2Jq
ZWN0ID0ganNDYXN0PEludGxMb2NhbGUqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lO
SEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC02Niw2ICs2Nyw4IEBAIHZvaWQgSW50bExv
Y2FsZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGMKICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRo
aXNPYmplY3QsIHZpc2l0b3IpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSW50bExvY2Fs
ZSk7CisKIGNsYXNzIExvY2FsZUlEQnVpbGRlciBmaW5hbCB7CiBwdWJsaWM6CiAgICAgYm9vbCBp
bml0aWFsaXplKGNvbnN0IFN0cmluZyYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSW50bExvY2FsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0ludGxMb2NhbGUuaAkocmV2aXNpb24gMjcyMjk3KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSW50bExvY2FsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03MSw3ICs3MSw3
IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgSW50bExvY2FsZShWTSYsIFN0cnVjdHVyZSopOwog
ICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxk
cmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsK
IAogICAgIFN0cmluZyBrZXl3b3JkVmFsdWUoQVNDSUlMaXRlcmFsLCBib29sIGlzQm9vbGVhbiA9
IGZhbHNlKSBjb25zdDsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50
bE51bWJlckZvcm1hdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSW50bE51bWJlckZvcm1hdC5jcHAJKHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxOdW1iZXJGb3JtYXQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC03Myw3ICs3Myw4IEBAIHZvaWQgSW50bE51bWJlckZvcm1hdDo6ZmluaXNoQ3JlYXRpb24o
Vk0KICAgICBBU1NFUlQoaW5oZXJpdHModm0sIGluZm8oKSkpOwogfQogCi12b2lkIEludGxOdW1i
ZXJGb3JtYXQ6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRv
cikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEludGxOdW1iZXJGb3JtYXQ6OnZp
c2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBJ
bnRsTnVtYmVyRm9ybWF0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEludGxOdW1iZXJGb3JtYXQqPihj
ZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7
CkBAIC04Myw2ICs4NCw4IEBAIHZvaWQgSW50bE51bWJlckZvcm1hdDo6dmlzaXRDaGlsZHJlbihK
U0MKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2JvdW5kRm9ybWF0KTsKIH0KIAor
REVGSU5FX1ZJU0lUX0NISUxEUkVOKEludGxOdW1iZXJGb3JtYXQpOworCiBWZWN0b3I8U3RyaW5n
PiBJbnRsTnVtYmVyRm9ybWF0Ojpsb2NhbGVEYXRhKGNvbnN0IFN0cmluZyYgbG9jYWxlLCBSZWxl
dmFudEV4dGVuc2lvbktleSBrZXkpCiB7CiAgICAgLy8gOS4xIEludGVybmFsIHNsb3RzIG9mIFNl
cnZpY2UgQ29uc3RydWN0b3JzICYgMTEuMi4zIEludGVybmFsIHNsb3RzIChFQ01BLTQwMiAyLjAp
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTnVtYmVyRm9ybWF0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE51bWJlckZv
cm1hdC5oCShyZXZpc2lvbiAyNzIyOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9JbnRsTnVtYmVyRm9ybWF0LmgJKHdvcmtpbmcgY29weSkKQEAgLTk2LDcgKzk2LDcgQEAgcHVi
bGljOgogcHJpdmF0ZToKICAgICBJbnRsTnVtYmVyRm9ybWF0KFZNJiwgU3RydWN0dXJlKik7CiAg
ICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOwotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwog
CiAgICAgc3RhdGljIFZlY3RvcjxTdHJpbmc+IGxvY2FsZURhdGEoY29uc3QgU3RyaW5nJiwgUmVs
ZXZhbnRFeHRlbnNpb25LZXkpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9JbnRsUGx1cmFsUnVsZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0ludGxQbHVyYWxSdWxlcy5jcHAJKHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxQbHVyYWxSdWxlcy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTYxLDcgKzYxLDggQEAgdm9pZCBJbnRsUGx1cmFsUnVsZXM6OmZpbmlzaENyZWF0aW9u
KFZNJgogICAgIEFTU0VSVChpbmhlcml0cyh2bSwgaW5mbygpKSk7CiB9CiAKLXZvaWQgSW50bFBs
dXJhbFJ1bGVzOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0
b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBJbnRsUGx1cmFsUnVsZXM6OnZp
c2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBJ
bnRsUGx1cmFsUnVsZXMqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SW50bFBsdXJhbFJ1bGVzKj4oY2Vs
bCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpA
QCAtNjksNiArNzAsOCBAQCB2b2lkIEludGxQbHVyYWxSdWxlczo6dmlzaXRDaGlsZHJlbihKU0Nl
CiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKIH0KIAorREVG
SU5FX1ZJU0lUX0NISUxEUkVOKEludGxQbHVyYWxSdWxlcyk7CisKIFZlY3RvcjxTdHJpbmc+IElu
dGxQbHVyYWxSdWxlczo6bG9jYWxlRGF0YShjb25zdCBTdHJpbmcmLCBSZWxldmFudEV4dGVuc2lv
bktleSkKIHsKICAgICByZXR1cm4geyB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSW50bFBsdXJhbFJ1bGVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSW50bFBsdXJhbFJ1bGVzLmgJKHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxQbHVyYWxSdWxlcy5oCSh3b3JraW5nIGNvcHkp
CkBAIC02Niw3ICs2Niw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgSW50bFBsdXJhbFJ1bGVz
KFZNJiwgU3RydWN0dXJlKik7CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOwotICAgIHN0
YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNM
QVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgc3RhdGljIFZlY3RvcjxTdHJpbmc+IGxvY2FsZURh
dGEoY29uc3QgU3RyaW5nJiwgUmVsZXZhbnRFeHRlbnNpb25LZXkpOwogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsUmVsYXRpdmVUaW1lRm9ybWF0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsUmVsYXRpdmVUaW1lRm9y
bWF0LmNwcAkocmV2aXNpb24gMjcyMjk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSW50bFJlbGF0aXZlVGltZUZvcm1hdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYyLDcgKzYy
LDggQEAgdm9pZCBJbnRsUmVsYXRpdmVUaW1lRm9ybWF0OjpmaW5pc2hDcmVhdAogICAgIEFTU0VS
VChpbmhlcml0cyh2bSwgaW5mbygpKSk7CiB9CiAKLXZvaWQgSW50bFJlbGF0aXZlVGltZUZvcm1h
dDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVt
cGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSW50bFJlbGF0aXZlVGltZUZvcm1hdDo6dmlz
aXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGF1
dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SW50bFJlbGF0aXZlVGltZUZvcm1hdCo+KGNlbGwpOwog
ICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTcw
LDYgKzcxLDggQEAgdm9pZCBJbnRsUmVsYXRpdmVUaW1lRm9ybWF0Ojp2aXNpdENoaWxkcgogICAg
IEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CiB9CiAKK0RFRklORV9W
SVNJVF9DSElMRFJFTihJbnRsUmVsYXRpdmVUaW1lRm9ybWF0KTsKKwogVmVjdG9yPFN0cmluZz4g
SW50bFJlbGF0aXZlVGltZUZvcm1hdDo6bG9jYWxlRGF0YShjb25zdCBTdHJpbmcmIGxvY2FsZSwg
UmVsZXZhbnRFeHRlbnNpb25LZXkga2V5KQogewogICAgIEFTU0VSVF9VTlVTRUQoa2V5LCBrZXkg
PT0gUmVsZXZhbnRFeHRlbnNpb25LZXk6Ok51KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0ludGxSZWxhdGl2ZVRpbWVGb3JtYXQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsUmVsYXRpdmVUaW1lRm9ybWF0LmgJKHJldmlzaW9u
IDI3MjI5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxSZWxhdGl2ZVRp
bWVGb3JtYXQuaAkod29ya2luZyBjb3B5KQpAQCAtNjQsNyArNjQsNyBAQCBwdWJsaWM6CiBwcml2
YXRlOgogICAgIEludGxSZWxhdGl2ZVRpbWVGb3JtYXQoVk0mLCBTdHJ1Y3R1cmUqKTsKICAgICB2
b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihK
U0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAg
ICBzdGF0aWMgVmVjdG9yPFN0cmluZz4gbG9jYWxlRGF0YShjb25zdCBTdHJpbmcmLCBSZWxldmFu
dEV4dGVuc2lvbktleSk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lu
dGxTZWdtZW50SXRlcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0ludGxTZWdtZW50SXRlcmF0b3IuY3BwCShyZXZpc2lvbiAyNzIyOTcpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsU2VnbWVudEl0ZXJhdG9yLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNjQsMTMgKzY0LDE2IEBAIHZvaWQgSW50bFNlZ21lbnRJdGVyYXRvcjo6
ZmluaXNoQ3JlYXRpb24KICAgICBtX3N0cmluZy5zZXQodm0sIHRoaXMsIHN0cmluZyk7CiB9CiAK
LXZvaWQgSW50bFNlZ21lbnRJdGVyYXRvcjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSW50
bFNlZ21lbnRJdGVyYXRvcjo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9y
JiB2aXNpdG9yKQogewogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SW50bFNlZ21lbnRJ
dGVyYXRvcio+KGNlbGwpOwogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlz
aXRvcik7CiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9zdHJpbmcpOwogfQogCitE
RUZJTkVfVklTSVRfQ0hJTERSRU4oSW50bFNlZ21lbnRJdGVyYXRvcik7CisKIEpTT2JqZWN0KiBJ
bnRsU2VnbWVudEl0ZXJhdG9yOjpuZXh0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCiB7
CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSW50bFNlZ21lbnRJdGVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxTZWdtZW50SXRlcmF0b3IuaAkocmV2aXNpb24g
MjcyMjk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFNlZ21lbnRJdGVy
YXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC01Myw3ICs1Myw3IEBAIHB1YmxpYzoKIAogICAgIEpT
T2JqZWN0KiBuZXh0KEpTR2xvYmFsT2JqZWN0Kik7CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENo
aWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJF
TjsKIAogcHJpdmF0ZToKICAgICBJbnRsU2VnbWVudEl0ZXJhdG9yKFZNJiwgU3RydWN0dXJlKiwg
c3RkOjp1bmlxdWVfcHRyPFVCcmVha0l0ZXJhdG9yLCBVQnJlYWtJdGVyYXRvckRlbGV0ZXI+JiYs
IEJveDxWZWN0b3I8VUNoYXI+PiYmLCBJbnRsU2VnbWVudGVyOjpHcmFudWxhcml0eSk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsU2VnbWVudHMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxTZWdtZW50cy5jcHAJKHJl
dmlzaW9uIDI3MjI5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxTZWdt
ZW50cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwOSwxMSArMTA5LDE0IEBAIEpTT2JqZWN0KiBJ
bnRsU2VnbWVudHM6OmNyZWF0ZVNlZ21lbnRJdGUKICAgICByZXR1cm4gSW50bFNlZ21lbnRJdGVy
YXRvcjo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QtPnNlZ21lbnRJdGVyYXRvclN0cnVjdHVyZSgp
LCBXVEZNb3ZlKHNlZ21lbnRlciksIG1fYnVmZmVyLCBtX3N0cmluZy5nZXQoKSwgbV9ncmFudWxh
cml0eSk7CiB9CiAKLXZvaWQgSW50bFNlZ21lbnRzOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2Vs
bCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9p
ZCBJbnRsU2VnbWVudHM6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYg
dmlzaXRvcikKIHsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEludGxTZWdtZW50cyo+
KGNlbGwpOwogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CiAg
ICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9zdHJpbmcpOwogfQogCitERUZJTkVfVklT
SVRfQ0hJTERSRU4oSW50bFNlZ21lbnRzKTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsU2VnbWVudHMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsU2VnbWVudHMuaAkocmV2aXNpb24g
MjcyMjk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFNlZ21lbnRzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTU0LDcgKzU0LDcgQEAgcHVibGljOgogICAgIEpTVmFsdWUgY29u
dGFpbmluZyhKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUgaW5kZXhWYWx1ZSk7CiAgICAgSlNPYmpl
Y3QqIGNyZWF0ZVNlZ21lbnRJdGVyYXRvcihKU0dsb2JhbE9iamVjdCopOwogCi0gICAgc3RhdGlj
IHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVf
VklTSVRfQ0hJTERSRU47CiAKIHByaXZhdGU6CiAgICAgSW50bFNlZ21lbnRzKFZNJiwgU3RydWN0
dXJlKiwgc3RkOjp1bmlxdWVfcHRyPFVCcmVha0l0ZXJhdG9yLCBVQnJlYWtJdGVyYXRvckRlbGV0
ZXI+JiYsIEJveDxWZWN0b3I8VUNoYXI+PiYmLCBJbnRsU2VnbWVudGVyOjpHcmFudWxhcml0eSk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1
ZmZlclZpZXcuY3BwCShyZXZpc2lvbiAyNzIyOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1NSw3ICsx
NTUsOCBAQCB2b2lkIEpTQXJyYXlCdWZmZXJWaWV3OjpmaW5pc2hDcmVhdGlvbihWCiAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAotdm9pZCBKU0FycmF5QnVmZmVyVmlldzo6
dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxh
dGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNBcnJheUJ1ZmZlclZpZXc6OnZpc2l0Q2hpbGRy
ZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU0FycmF5QnVm
ZmVyVmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0FycmF5QnVmZmVyVmlldyo+KGNlbGwpOwog
ICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTE2
OSw2ICsxNzAsOCBAQCB2b2lkIEpTQXJyYXlCdWZmZXJWaWV3Ojp2aXNpdENoaWxkcmVuKEpTCiAg
ICAgfQogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNBcnJheUJ1ZmZlclZpZXcpOworCiBi
b29sIEpTQXJyYXlCdWZmZXJWaWV3OjpwdXQoCiAgICAgSlNDZWxsKiBjZWxsLCBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZh
bHVlLAogICAgIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuaAkocmV2aXNpb24gMjcyMjk3
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuaAko
d29ya2luZyBjb3B5KQpAQCAtMTcyLDcgKzE3Miw3IEBAIHByb3RlY3RlZDoKICAgICAKICAgICBz
dGF0aWMgYm9vbCBwdXQoSlNDZWxsKiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIEpT
VmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJl
bihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAg
ICAgCiBwdWJsaWM6CiAgICAgVHlwZWRBcnJheU1vZGUgbW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1f
bW9kZTsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUl0ZXJh
dG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Fy
cmF5SXRlcmF0b3IuY3BwCShyZXZpc2lvbiAyNzIyOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0FycmF5SXRlcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OCwxMSAr
NjgsMTQgQEAgdm9pZCBKU0FycmF5SXRlcmF0b3I6OmZpbmlzaENyZWF0aW9uKFZNJgogICAgICAg
ICBCYXNlOjppbnRlcm5hbEZpZWxkKGluZGV4KS5zZXQodm0sIHRoaXMsIHZhbHVlc1tpbmRleF0p
OwogfQogCi12b2lkIEpTQXJyYXlJdGVyYXRvcjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGws
IFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQg
SlNBcnJheUl0ZXJhdG9yOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3Im
IHZpc2l0b3IpCiB7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0FycmF5SXRlcmF0
b3IqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGlu
Zm8oKSk7CiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKIH0K
IAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTQXJyYXlJdGVyYXRvcik7CisKIH0gLy8gbmFtZXNw
YWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUl0ZXJh
dG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJh
eUl0ZXJhdG9yLmgJKHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTQXJyYXlJdGVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC03OCw3ICs3OCw3IEBA
IHB1YmxpYzoKIAogICAgIERFQ0xBUkVfSU5GTzsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hp
bGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVO
OwogCiBwcml2YXRlOgogICAgIEpTQXJyYXlJdGVyYXRvcihWTSYsIFN0cnVjdHVyZSopOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBc3luY0dlbmVyYXRvci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBc3luY0dlbmVyYXRv
ci5jcHAJKHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTQXN5bmNHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OSwxMSArNTksMTQgQEAg
dm9pZCBKU0FzeW5jR2VuZXJhdG9yOjpmaW5pc2hDcmVhdGlvbihWTQogICAgICAgICBpbnRlcm5h
bEZpZWxkKGluZGV4KS5zZXQodm0sIHRoaXMsIHZhbHVlc1tpbmRleF0pOwogfQogCi12b2lkIEpT
QXN5bmNHZW5lcmF0b3I6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYg
dmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTQXN5bmNHZW5lcmF0
b3I6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsK
ICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQXN5bmNHZW5lcmF0b3IqPihjZWxsKTsK
ICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAgICAg
QmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKIH0KIAorREVGSU5FX1ZJ
U0lUX0NISUxEUkVOKEpTQXN5bmNHZW5lcmF0b3IpOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXN5bmNHZW5lcmF0b3IuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FzeW5jR2VuZXJhdG9y
LmgJKHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
QXN5bmNHZW5lcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtOTUsNyArOTUsNyBAQCBwdWJsaWM6
CiAKICAgICBERUNMQVJFX0VYUE9SVF9JTkZPOwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGls
ZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47
CiAKIHByaXZhdGU6CiAgICAgSlNBc3luY0dlbmVyYXRvcihWTSYsIFN0cnVjdHVyZSopOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCaWdJbnQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQmlnSW50LmNwcAkocmV2aXNpb24g
MjcyMjk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCaWdJbnQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC02Nyw3ICs2Nyw4IEBAIEpTQmlnSW50OjpKU0JpZ0ludChWTSYgdm0s
IFN0cnVjdHVyZSogc3QKICAgICAsIG1fZGF0YSh2bSwgdGhpcywgZGF0YSwgbGVuZ3RoKQogeyB9
CiAKLXZvaWQgSlNCaWdJbnQ6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRv
ciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTQmlnSW50Ojp2
aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAg
YXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0JpZ0ludCo+KGNlbGwpOwogICAgIEFTU0VSVF9H
Q19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTc2LDYgKzc3LDggQEAg
dm9pZCBKU0JpZ0ludDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbAogICAgICAgICB2aXNpdG9y
Lm1hcmtBdXhpbGlhcnkoZGF0YSk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU0JpZ0lu
dCk7CisKIHZvaWQgSlNCaWdJbnQ6OmluaXRpYWxpemUoSW5pdGlhbGl6YXRpb25UeXBlIGluaXRU
eXBlKQogewogICAgIGlmIChpbml0VHlwZSA9PSBJbml0aWFsaXphdGlvblR5cGU6OldpdGhaZXJv
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCaWdJbnQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JpZ0ludC5oCShyZXZpc2lv
biAyNzIyOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JpZ0ludC5oCSh3
b3JraW5nIGNvcHkpCkBAIC01MCw3ICs1MCw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3Rl
eHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBTdHJ1
Y3R1cmVJc0ltbW9ydGFsIHwgT3ZlcnJpZGVzVG9UaGlzOwogICAgIGZyaWVuZCBjbGFzcyBDYWNo
ZWRCaWdJbnQ7CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RW
aXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIHRlbXBsYXRlPHR5
cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2Vzcz4KICAgICBzdGF0aWMgSXNvU3Vic3BhY2Uq
IHN1YnNwYWNlRm9yKFZNJiB2bSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTQm91bmRGdW5jdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNCb3VuZEZ1bmN0aW9uLmNwcAkocmV2aXNpb24gMjcyMjk3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCb3VuZEZ1bmN0aW9uLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjQ5LDcgKzI0OSw4IEBAIHZvaWQgSlNCb3VuZEZ1bmN0aW9uOjpmaW5pc2hDcmVhdGlv
bihWTSYKICAgICBBU1NFUlQoaW5oZXJpdHModm0sIGluZm8oKSkpOwogfQogCi12b2lkIEpTQm91
bmRGdW5jdGlvbjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNp
dG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNCb3VuZEZ1bmN0aW9uOjp2
aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAg
SlNCb3VuZEZ1bmN0aW9uKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQm91bmRGdW5jdGlvbio+KGNl
bGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsK
QEAgLTI2MSw0ICsyNjIsNiBAQCB2b2lkIEpTQm91bmRGdW5jdGlvbjo6dmlzaXRDaGlsZHJlbihK
U0NlCiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9uYW1lTWF5QmVOdWxsKTsKIH0K
IAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTQm91bmRGdW5jdGlvbik7CisKIH0gLy8gbmFtZXNw
YWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCb3VuZEZ1bmN0
aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCb3Vu
ZEZ1bmN0aW9uLmgJKHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTQm91bmRGdW5jdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC04NCw3ICs4NCw3IEBA
IHByaXZhdGU6CiAgICAgSlNCb3VuZEZ1bmN0aW9uKFZNJiwgTmF0aXZlRXhlY3V0YWJsZSosIEpT
R2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKiwgSlNPYmplY3QqIHRhcmdldEZ1bmN0aW9uLCBKU1Zh
bHVlIGJvdW5kVGhpcywgSlNJbW11dGFibGVCdXR0ZXJmbHkqIGJvdW5kQXJncywgSlNTdHJpbmcq
IG5hbWVNYXlCZU51bGwsIGRvdWJsZSBsZW5ndGgpOwogCiAgICAgdm9pZCBmaW5pc2hDcmVhdGlv
bihWTSYpOwotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0
b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgV3JpdGVCYXJyaWVyPEpT
T2JqZWN0PiBtX3RhcmdldEZ1bmN0aW9uOwogICAgIFdyaXRlQmFycmllcjxVbmtub3duPiBtX2Jv
dW5kVGhpczsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2FsbGVlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NhbGxlZS5j
cHAJKHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
Q2FsbGVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTAsNyArNTAsOCBAQCB2b2lkIEpTQ2FsbGVl
OjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCiAgICAgQVNTRVJUKGluaGVyaXRzKHZtLCBpbmZvKCkp
KTsKIH0KIAotdm9pZCBKU0NhbGxlZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNDYWxs
ZWU6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsK
ICAgICBKU0NhbGxlZSogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0NhbGxlZSo+KGNlbGwpOwogICAg
IEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTU5LDQg
KzYwLDYgQEAgdm9pZCBKU0NhbGxlZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbAogICAgIHZp
c2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fc2NvcGUpOwogfQogCitERUZJTkVfVklTSVRfQ0hJ
TERSRU4oSlNDYWxsZWUpOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTQ2FsbGVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNDYWxsZWUuaAkocmV2aXNpb24gMjcyMjk3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDYWxsZWUuaAkod29ya2luZyBjb3B5KQpAQCAtMTAw
LDcgKzEwMCw3IEBAIHByb3RlY3RlZDoKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7CiAg
ICAgdXNpbmcgQmFzZTo6ZmluaXNoQ3JlYXRpb247CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENo
aWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJF
TjsKIAogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgJKHJldmlzaW9uIDI3MjI5
NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMSBIYXJy
aSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQogICogIENvcHlyaWdodCAoQykgMjAwMSBQZXRlciBL
ZWxseSAocG1rQHBvc3QuY29tKQotICogIENvcHlyaWdodCAoQykgMjAwMy0yMDE5IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAyMCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMzIs
NiArMzIsNyBAQAogI2luY2x1ZGUgIkpTTG9jay5oIgogI2luY2x1ZGUgIkpTVHlwZUluZm8uaCIK
ICNpbmNsdWRlICJTbG90VmlzaXRvci5oIgorI2luY2x1ZGUgIlNsb3RWaXNpdG9yTWFjcm9zLmgi
CiAjaW5jbHVkZSAiU3Vic3BhY2VBY2Nlc3MuaCIKICNpbmNsdWRlICJUeXBlZEFycmF5VHlwZS5o
IgogI2luY2x1ZGUgIldyaXRlQmFycmllci5oIgpAQCAtMTY3LDggKzE2OCw4IEBAIHB1YmxpYzoK
ICAgICBzaXplX3QgZXN0aW1hdGVkU2l6ZUluQnl0ZXMoVk0mKSBjb25zdDsKICAgICBKU19FWFBP
UlRfUFJJVkFURSBzdGF0aWMgc2l6ZV90IGVzdGltYXRlZFNpemUoSlNDZWxsKiwgVk0mKTsKIAot
ICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKLSAg
ICBzdGF0aWMgdm9pZCB2aXNpdE91dHB1dENvbnN0cmFpbnRzKEpTQ2VsbCosIFNsb3RWaXNpdG9y
Jik7CisgICAgREVDTEFSRV9JTkxJTkVfVklTSVRfQ0hJTERSRU47CisgICAgc3RhdGljIHZvaWQg
dmlzaXRPdXRwdXRDb25zdHJhaW50cyhKU0NlbGwqLCBBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAK
ICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBhbmFseXplSGVhcChKU0NlbGwqLCBI
ZWFwQW5hbHl6ZXImKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlND
ZWxsSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTQ2VsbElubGluZXMuaAkocmV2aXNpb24gMjcyMjk3KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNDZWxsSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw2ICsyNSw3
IEBACiAKICNwcmFnbWEgb25jZQogCisjaW5jbHVkZSAiQWJzdHJhY3RTbG90VmlzaXRvcklubGlu
ZXMuaCIKICNpbmNsdWRlICJBbGxvY2F0b3JGb3JNb2RlLmgiCiAjaW5jbHVkZSAiQWxsb2NhdG9y
SW5saW5lcy5oIgogI2luY2x1ZGUgIkNvbXBsZXRlU3Vic3BhY2VJbmxpbmVzLmgiCkBAIC0xNDEs
MTIgKzE0MiwxNSBAQCBBTFdBWVNfSU5MSU5FIFN0cnVjdHVyZSogSlNDZWxsOjpzdHJ1Y3R1CiAg
ICAgcmV0dXJuIHZtLmdldFN0cnVjdHVyZShtX3N0cnVjdHVyZUlEKTsKIH0KIAotaW5saW5lIHZv
aWQgSlNDZWxsOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0
b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgoraW5saW5lIHZvaWQgSlNDZWxsOjp2aXNp
dENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgdmlz
aXRvci5hcHBlbmRVbmJhcnJpZXJlZChjZWxsLT5zdHJ1Y3R1cmUodmlzaXRvci52bSgpKSk7CiB9
CiAKLWlubGluZSB2b2lkIEpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50cyhKU0NlbGwqLCBT
bG90VmlzaXRvciYpCitERUZJTkVfSU5MSU5FX1ZJU0lUX0NISUxEUkVOKEpTQ2VsbCk7CisKK2lu
bGluZSB2b2lkIEpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50cyhKU0NlbGwqLCBBYnN0cmFj
dFNsb3RWaXNpdG9yJikKIHsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNDdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbi5jcHAJ
KHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ3Vz
dG9tR2V0dGVyU2V0dGVyRnVuY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NSw3ICs4NSw4
IEBAIEpTQ3VzdG9tR2V0dGVyU2V0dGVyRnVuY3Rpb24qIEpTQ3VzdG9tR2UKICAgICByZXR1cm4g
ZnVuY3Rpb247CiB9CiAKLXZvaWQgSlNDdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbjo6dmlzaXRD
aGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlw
ZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNDdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbjo6dmlzaXRD
aGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTQ3Vz
dG9tR2V0dGVyU2V0dGVyRnVuY3Rpb24qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNDdXN0b21HZXR0
ZXJTZXR0ZXJGdW5jdGlvbio+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMo
dGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTk0LDYgKzk1LDggQEAgdm9pZCBKU0N1c3RvbUdldHRl
clNldHRlckZ1bmN0aW9uOjp2aXNpdAogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1f
Z2V0dGVyU2V0dGVyKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTQ3VzdG9tR2V0dGVy
U2V0dGVyRnVuY3Rpb24pOworCiB2b2lkIEpTQ3VzdG9tR2V0dGVyU2V0dGVyRnVuY3Rpb246OmZp
bmlzaENyZWF0aW9uKFZNJiB2bSwgTmF0aXZlRXhlY3V0YWJsZSogZXhlY3V0YWJsZSwgQ3VzdG9t
R2V0dGVyU2V0dGVyKiBnZXR0ZXJTZXR0ZXIsIGNvbnN0IFN0cmluZyYgbmFtZSkKIHsKICAgICBC
YXNlOjpmaW5pc2hDcmVhdGlvbih2bSwgZXhlY3V0YWJsZSwgaXNTZXR0ZXIoKSwgbmFtZSk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0N1c3RvbUdldHRlclNldHRlckZ1
bmN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlND
dXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbi5oCShyZXZpc2lvbiAyNzIyOTcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0N1c3RvbUdldHRlclNldHRlckZ1bmN0aW9uLmgJKHdv
cmtpbmcgY29weSkKQEAgLTYzLDcgKzYzLDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBKU0N1
c3RvbUdldHRlclNldHRlckZ1bmN0aW9uKFZNJiwgTmF0aXZlRXhlY3V0YWJsZSosIEpTR2xvYmFs
T2JqZWN0KiwgU3RydWN0dXJlKiwgVHlwZSwgY29uc3QgUHJvcGVydHlOYW1lJik7CiAgICAgdm9p
ZCBmaW5pc2hDcmVhdGlvbihWTSYsIE5hdGl2ZUV4ZWN1dGFibGUqLCBDdXN0b21HZXR0ZXJTZXR0
ZXIqLCBjb25zdCBTdHJpbmcmKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2Vs
bCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIFdy
aXRlQmFycmllcjxDdXN0b21HZXR0ZXJTZXR0ZXI+IG1fZ2V0dGVyU2V0dGVyOwogICAgIFR5cGUg
bV90eXBlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGaW5hbGl6YXRp
b25SZWdpc3RyeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNGaW5hbGl6YXRpb25SZWdpc3RyeS5jcHAJKHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRmluYWxpemF0aW9uUmVnaXN0cnkuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVk
ZSAiSlNGaW5hbGl6YXRpb25SZWdpc3RyeS5oIgogCisjaW5jbHVkZSAiQWJzdHJhY3RTbG90Vmlz
aXRvci5oIgogI2luY2x1ZGUgIkRlZmVycmVkV29ya1RpbWVyLmgiCiAjaW5jbHVkZSAiSlNDSW5s
aW5lcy5oIgogI2luY2x1ZGUgIkpTSW50ZXJuYWxGaWVsZE9iamVjdEltcGxJbmxpbmVzLmgiCkBA
IC02MCw3ICs2MSw4IEBAIHZvaWQgSlNGaW5hbGl6YXRpb25SZWdpc3RyeTo6ZmluaXNoQ3JlYXQK
ICAgICBnbG9iYWxPYmplY3QtPmdsb2JhbE9iamVjdE1ldGhvZFRhYmxlKCktPmN1cnJlbnRTY3Jp
cHRFeGVjdXRpb25Pd25lcihnbG9iYWxPYmplY3QpOwogfQogCi12b2lkIEpTRmluYWxpemF0aW9u
UmVnaXN0cnk6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRv
cikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTRmluYWxpemF0aW9uUmVnaXN0
cnk6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsK
ICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKGNlbGwsIHZpc2l0b3IpOwogCkBAIC04MCwxMyArODIs
MTUgQEAgdm9pZCBKU0ZpbmFsaXphdGlvblJlZ2lzdHJ5Ojp2aXNpdENoaWxkcgogICAgIGZvciAo
YXV0byYgaG9sZGluZ3MgOiB0aGlzT2JqZWN0LT5tX25vVW5yZWdpc3RyYXRpb25EZWFkKQogICAg
ICAgICB2aXNpdG9yLmFwcGVuZChob2xkaW5ncyk7CiAKLSAgICBzaXplX3QgdG90YWxCdWZmZXJT
aXplc0luQnl0ZXMgPSB0aGlzT2JqZWN0LT5tX2RlYWRSZWdpc3RyYXRpb25zLmNhcGFjaXR5KCkg
KiBzaXplb2YoZGVjbHR5cGUodGhpc09iamVjdC0+bV9kZWFkUmVnaXN0cmF0aW9ucyk6OktleVZh
bHVlUGFpclR5cGUpOwotICAgIHRvdGFsQnVmZmVyU2l6ZXNJbkJ5dGVzICs9IHRoaXNPYmplY3Qt
Pm1fbGl2ZVJlZ2lzdHJhdGlvbnMuY2FwYWNpdHkoKSAqIHNpemVvZihkZWNsdHlwZSh0aGlzT2Jq
ZWN0LT5tX2RlYWRSZWdpc3RyYXRpb25zKTo6S2V5VmFsdWVQYWlyVHlwZSk7CisgICAgc2l6ZV90
IHRvdGFsQnVmZmVyU2l6ZXNJbkJ5dGVzID0gdGhpc09iamVjdC0+bV9kZWFkUmVnaXN0cmF0aW9u
cy5jYXBhY2l0eSgpICogc2l6ZW9mKHR5cGVuYW1lIGRlY2x0eXBlKHRoaXNPYmplY3QtPm1fZGVh
ZFJlZ2lzdHJhdGlvbnMpOjpLZXlWYWx1ZVBhaXJUeXBlKTsKKyAgICB0b3RhbEJ1ZmZlclNpemVz
SW5CeXRlcyArPSB0aGlzT2JqZWN0LT5tX2xpdmVSZWdpc3RyYXRpb25zLmNhcGFjaXR5KCkgKiBz
aXplb2YodHlwZW5hbWUgZGVjbHR5cGUodGhpc09iamVjdC0+bV9kZWFkUmVnaXN0cmF0aW9ucyk6
OktleVZhbHVlUGFpclR5cGUpOwogICAgIHRvdGFsQnVmZmVyU2l6ZXNJbkJ5dGVzICs9IHRoaXNP
YmplY3QtPm1fbm9VbnJlZ2lzdHJhdGlvbkxpdmUuY2FwYWNpdHkoKSAqIHNpemVvZihkZWNsdHlw
ZSh0aGlzT2JqZWN0LT5tX25vVW5yZWdpc3RyYXRpb25MaXZlLnRha2VMYXN0KCkpKTsKICAgICB0
b3RhbEJ1ZmZlclNpemVzSW5CeXRlcyArPSB0aGlzT2JqZWN0LT5tX25vVW5yZWdpc3RyYXRpb25E
ZWFkLmNhcGFjaXR5KCkgKiBzaXplb2YoZGVjbHR5cGUodGhpc09iamVjdC0+bV9ub1VucmVnaXN0
cmF0aW9uTGl2ZS50YWtlTGFzdCgpKSk7CiAgICAgdmlzaXRvci52bSgpLmhlYXAucmVwb3J0RXh0
cmFNZW1vcnlWaXNpdGVkKHRvdGFsQnVmZmVyU2l6ZXNJbkJ5dGVzKTsKIH0KIAorREVGSU5FX1ZJ
U0lUX0NISUxEUkVOKEpTRmluYWxpemF0aW9uUmVnaXN0cnkpOworCiB2b2lkIEpTRmluYWxpemF0
aW9uUmVnaXN0cnk6OmRlc3Ryb3koSlNDZWxsKiB0YWJsZSkKIHsKICAgICBzdGF0aWNfY2FzdDxK
U0ZpbmFsaXphdGlvblJlZ2lzdHJ5Kj4odGFibGUpLT5+SlNGaW5hbGl6YXRpb25SZWdpc3RyeSgp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGaW5hbGl6YXRpb25SZWdp
c3RyeS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRmlu
YWxpemF0aW9uUmVnaXN0cnkuaAkocmV2aXNpb24gMjcyMjk3KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNGaW5hbGl6YXRpb25SZWdpc3RyeS5oCSh3b3JraW5nIGNvcHkpCkBA
IC03MCw3ICs3MCw3IEBAIHB1YmxpYzoKICAgICBERUNMQVJFX0VYUE9SVF9JTkZPOwogCiAgICAg
dm9pZCBmaW5hbGl6ZVVuY29uZGl0aW9uYWxseShWTSYpOwotICAgIHN0YXRpYyB2b2lkIHZpc2l0
Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxE
UkVOOwogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CiAgICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOwogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmNwcAkocmV2aXNpb24gMjcyMjk3KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI1Miw3ICsyNTIsOCBAQCBjb25zdCBTb3VyY2VDb2RlKiBKU0Z1bmN0aW9uOjpzb3Vy
Y2VDb2RlCiAgICAgcmV0dXJuICZqc0V4ZWN1dGFibGUoKS0+c291cmNlKCk7CiB9CiAgICAgCi12
b2lkIEpTRnVuY3Rpb246OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYg
dmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTRnVuY3Rpb246OnZp
c2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBK
U0Z1bmN0aW9uKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTRnVuY3Rpb24qPihjZWxsKTsKICAgICBB
U1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC0yNjEsNiAr
MjYyLDggQEAgdm9pZCBKU0Z1bmN0aW9uOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogYwogICAgIHZp
c2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQoYml0d2lzZV9jYXN0PEpTQ2VsbCo+KGJpdHdpc2VfY2Fz
dDx1aW50cHRyX3Q+KHRoaXNPYmplY3QtPm1fZXhlY3V0YWJsZU9yUmFyZURhdGEpICYgfnJhcmVE
YXRhVGFnKSk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU0Z1bmN0aW9uKTsKKwogQ2Fs
bERhdGEgSlNGdW5jdGlvbjo6Z2V0Q2FsbERhdGEoSlNDZWxsKiBjZWxsKQogewogICAgIC8vIEtl
ZXAgdGhpcyBmdW5jdGlvbiBPSyBmb3IgaW52b2NhdGlvbiBmcm9tIGNvbmN1cnJlbnQgY29tcGls
ZXJzLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uaAko
cmV2aXNpb24gMjcyMjk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5j
dGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xODAsNyArMTgwLDcgQEAgcHJvdGVjdGVkOgogCiAg
ICAgc3RhdGljIGJvb2wgZGVsZXRlUHJvcGVydHkoSlNDZWxsKiwgSlNHbG9iYWxPYmplY3QqLCBQ
cm9wZXJ0eU5hbWUsIERlbGV0ZVByb3BlcnR5U2xvdCYpOwogCi0gICAgc3RhdGljIHZvaWQgdmlz
aXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJ
TERSRU47CiAKIHByaXZhdGU6CiAgICAgc3RhdGljIEpTRnVuY3Rpb24qIGNyZWF0ZUltcGwoVk0m
IHZtLCBGdW5jdGlvbkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUsIEpTU2NvcGUqIHNjb3BlLCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
R2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0dlbmVyYXRvci5jcHAJKHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTksMTEgKzU5
LDE0IEBAIHZvaWQgSlNHZW5lcmF0b3I6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKICAgICAgICAg
aW50ZXJuYWxGaWVsZChpbmRleCkuc2V0KHZtLCB0aGlzLCB2YWx1ZXNbaW5kZXhdKTsKIH0KIAot
dm9pZCBKU0dlbmVyYXRvcjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9y
JiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNHZW5lcmF0b3I6
OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAg
ICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTR2VuZXJhdG9yKj4oY2VsbCk7CiAgICAgQVNT
RVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwogICAgIEJhc2U6OnZp
c2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CiB9CiAKK0RFRklORV9WSVNJVF9DSElM
RFJFTihKU0dlbmVyYXRvcik7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyYXRvci5oCShyZXZpc2lvbiAyNzIyOTcpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyYXRvci5oCSh3b3JraW5nIGNv
cHkpCkBAIC05NCw3ICs5NCw3IEBAIHB1YmxpYzoKIAogICAgIERFQ0xBUkVfRVhQT1JUX0lORk87
CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7
CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogcHJpdmF0ZToKICAgICBKU0dlbmVyYXRv
cihWTSYsIFN0cnVjdHVyZSopOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNHZW5lcmljVHlwZWRBcnJheVZpZXcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlldy5oCShyZXZpc2lvbiAyNzIyOTcp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmll
dy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMTMsNyArMzEzLDcgQEAgcHJpdmF0ZToKICAgICBzdGF0
aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQ
cm9wZXJ0eU5hbWVBcnJheSYsIERvbnRFbnVtUHJvcGVydGllc01vZGUpOwogCiAgICAgc3RhdGlj
IHNpemVfdCBlc3RpbWF0ZWRTaXplKEpTQ2VsbCosIFZNJik7Ci0gICAgc3RhdGljIHZvaWQgdmlz
aXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVEVNUExBVEVf
VklTSVRfQ0hJTERSRU47CiAKICAgICAvLyBSZXR1cm5zIHRydWUgaWYgc3VjY2Vzc2Z1bCwgYW5k
IGZhbHNlIG9uIGVycm9yOyBpdCB3aWxsIHRocm93IG9uIGVycm9yLgogICAgIHRlbXBsYXRlPHR5
cGVuYW1lIE90aGVyQWRhcHRvcj4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oCShy
ZXZpc2lvbiAyNzIyOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVy
aWNUeXBlZEFycmF5Vmlld0lubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNTE3LDcgKzUxNyw4
IEBAIHNpemVfdCBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjoKIH0KIAogdGVtcGxh
dGU8dHlwZW5hbWUgQWRhcHRvcj4KLXZvaWQgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRv
cj46OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3Rl
bXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFk
YXB0b3I+Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3Ip
CiB7CiAgICAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNH
ZW5lcmljVHlwZWRBcnJheVZpZXcqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVS
SVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC01NTUsNCArNTU2LDYgQEAgdm9pZCBKU0dlbmVy
aWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6dgogICAgIH0KIH0KIAorREVGSU5FX1RFTVBMQVRF
X1ZJU0lUX0NISUxEUkVOKHRlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+LCBKU0dlbmVyaWNUeXBl
ZEFycmF5VmlldzxBZGFwdG9yPik7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAkocmV2aXNp
b24gMjcyMjk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmpl
Y3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODk1LDcgKzE4OTUsOCBAQCB2b2lkIEpTR2xvYmFs
T2JqZWN0OjpyZXNldFByb3RvdHlwZShWTSYgCiAgICAgc2V0R2xvYmFsVGhpcyh2bSwgSlNQcm94
eTo6Y3JlYXRlKHZtLCBKU1Byb3h5OjpjcmVhdGVTdHJ1Y3R1cmUodm0sIHRoaXMsIHByb3RvdHlw
ZSwgUHVyZUZvcndhcmRpbmdQcm94eVR5cGUpLCB0aGlzKSk7CiB9CiAKLXZvaWQgSlNHbG9iYWxP
YmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikK
K3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTR2xvYmFsT2JqZWN0Ojp2aXNpdENo
aWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7IAogICAgIEpTR2xv
YmFsT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTR2xvYmFsT2JqZWN0Kj4oY2VsbCk7CiAg
ICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtMjA2
Myw2ICsyMDY0LDggQEAgdm9pZCBKU0dsb2JhbE9iamVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbAog
ICAgIHRoaXNPYmplY3QtPm1fcmVnRXhwR2xvYmFsRGF0YS52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9y
KTsKIH0KIAorREVGSU5FX0VYUE9SVF9WSVNJVF9DSElMRFJFTihKU0dsb2JhbE9iamVjdCk7CisK
IENhbGxGcmFtZSogSlNHbG9iYWxPYmplY3Q6OmRlcHJlY2F0ZWRDYWxsRnJhbWVGb3JEZWJ1Z2dl
cigpCiB7CiAgICAgcmV0dXJuIENhbGxGcmFtZTo6Y3JlYXRlKG1fZGVwcmVjYXRlZENhbGxGcmFt
ZUZvckRlYnVnZ2VyKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xv
YmFsT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNHbG9iYWxPYmplY3QuaAkocmV2aXNpb24gMjcyMjk3KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtNjA5LDcgKzYw
OSw3IEBAIHB1YmxpYzoKICAgICBKU19FWFBPUlRfUFJJVkFURSB+SlNHbG9iYWxPYmplY3QoKTsK
ICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwogCi0g
ICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBT
bG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfRVhQT1JUX1ZJU0lUX0NISUxEUkVOOwogCiAgICAg
SlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0
KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwogICAgIEpT
X0VYUE9SVF9QUklWQVRFIHN0YXRpYyBib29sIHB1dChKU0NlbGwqLCBKU0dsb2JhbE9iamVjdCos
IFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgUHV0UHJvcGVydHlTbG90Jik7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ltbXV0YWJsZUJ1dHRlcmZseS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbW11dGFibGVCdXR0ZXJmbHku
Y3BwCShyZXZpc2lvbiAyNzIyOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0ltbXV0YWJsZUJ1dHRlcmZseS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDggQEAg
bmFtZXNwYWNlIEpTQyB7CiAKIGNvbnN0IENsYXNzSW5mbyBKU0ltbXV0YWJsZUJ1dHRlcmZseTo6
c19pbmZvID0geyAiSW1tdXRhYmxlIEJ1dHRlcmZseSIsIG51bGxwdHIsIG51bGxwdHIsIG51bGxw
dHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNJbW11dGFibGVCdXR0ZXJmbHkpIH07CiAKLXZvaWQg
SlNJbW11dGFibGVCdXR0ZXJmbHk6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90Vmlz
aXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTSW1tdXRh
YmxlQnV0dGVyZmx5Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZp
c2l0b3IpCiB7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjZWxsLCBpbmZvKCkpOwog
ICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4oY2VsbCwgdmlzaXRvcik7CkBAIC00NSw2ICs0Niw4IEBA
IHZvaWQgSlNJbW11dGFibGVCdXR0ZXJmbHk6OnZpc2l0Q2hpbGRyZW4KICAgICB2aXNpdG9yLmFw
cGVuZFZhbHVlc0hpZGRlbihidXR0ZXJmbHktPmNvbnRpZ3VvdXMoKS5kYXRhKCksIGJ1dHRlcmZs
eS0+cHVibGljTGVuZ3RoKCkpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNJbW11dGFi
bGVCdXR0ZXJmbHkpOworCiB2b2lkIEpTSW1tdXRhYmxlQnV0dGVyZmx5Ojpjb3B5VG9Bcmd1bWVu
dHMoSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlKiBmaXJzdEVsZW1lbnREZXN0LCB1bnNpZ25lZCBv
ZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKIHsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bGVuZ3RoOyArK2kpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTSW1t
dXRhYmxlQnV0dGVyZmx5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNJbW11dGFibGVCdXR0ZXJmbHkuaAkocmV2aXNpb24gMjcyMjk3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbW11dGFibGVCdXR0ZXJmbHkuaAkod29ya2luZyBj
b3B5KQpAQCAtMTQ1LDcgKzE0NSw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGpzRG91Ymxl
TnVtYmVyKHZhbHVlKTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpT
Q2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAg
IHZvaWQgY29weVRvQXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSogZmlyc3RFbGVt
ZW50RGVzdCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOwogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ludGVybmFsRmllbGRPYmplY3RJbXBsLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbnRlcm5hbEZpZWxk
T2JqZWN0SW1wbC5oCShyZXZpc2lvbiAyNzIyOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0ludGVybmFsRmllbGRPYmplY3RJbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTY2
LDcgKzY2LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZJbnRlcm5h
bEZpZWxkKHVuc2lnbmVkIGluZGV4KSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNJbnRlcm5h
bEZpZWxkT2JqZWN0SW1wbCwgbV9pbnRlcm5hbEZpZWxkcykgKyBpbmRleCAqIHNpemVvZihXcml0
ZUJhcnJpZXI8VW5rbm93bj4pOyB9CiAKIHByb3RlY3RlZDoKLSAgICBzdGF0aWMgdm9pZCB2aXNp
dENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9URU1QTEFURV9W
SVNJVF9DSElMRFJFTjsKIAogICAgIEpTSW50ZXJuYWxGaWVsZE9iamVjdEltcGwoVk0mIHZtLCBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSkKICAgICAgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ludGVybmFsRmllbGRPYmplY3RJbXBs
SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
SW50ZXJuYWxGaWVsZE9iamVjdEltcGxJbmxpbmVzLmgJKHJldmlzaW9uIDI3MjI5NykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTSW50ZXJuYWxGaWVsZE9iamVjdEltcGxJbmxp
bmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDggQEAKIG5hbWVzcGFjZSBKU0Mgewog
CiB0ZW1wbGF0ZTx1bnNpZ25lZCBwYXNzZWROdW1iZXJPZkludGVybmFsRmllbGRzPgotdm9pZCBK
U0ludGVybmFsRmllbGRPYmplY3RJbXBsPHBhc3NlZE51bWJlck9mSW50ZXJuYWxGaWVsZHM+Ojp2
aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0
ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0ludGVybmFsRmllbGRPYmplY3RJbXBsPHBhc3Nl
ZE51bWJlck9mSW50ZXJuYWxGaWVsZHM+Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGws
IFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0lu
dGVybmFsRmllbGRPYmplY3RJbXBsKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhF
UklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtMzgsNCArMzksNiBAQCB2b2lkIEpTSW50ZXJu
YWxGaWVsZE9iamVjdEltcGw8cGFzc2VkTnVtCiAgICAgdmlzaXRvci5hcHBlbmRWYWx1ZXModGhp
c09iamVjdC0+bV9pbnRlcm5hbEZpZWxkcywgbnVtYmVyT2ZJbnRlcm5hbEZpZWxkcyk7CiB9CiAK
K0RFRklORV9URU1QTEFURV9WSVNJVF9DSElMRFJFTih0ZW1wbGF0ZTx1bnNpZ25lZCBwYXNzZWRO
dW1iZXJPZkludGVybmFsRmllbGRzPiwgSlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbDxwYXNzZWRO
dW1iZXJPZkludGVybmFsRmllbGRzPik7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMZXhpY2FsRW52aXJvbm1lbnQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTGV4aWNhbEVudmlyb25t
ZW50LmNwcAkocmV2aXNpb24gMjcyMjk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNMZXhpY2FsRW52aXJvbm1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3ICszNiw4
IEBAIG5hbWVzcGFjZSBKU0MgewogCiBjb25zdCBDbGFzc0luZm8gSlNMZXhpY2FsRW52aXJvbm1l
bnQ6OnNfaW5mbyA9IHsgIkpTTGV4aWNhbEVudmlyb25tZW50IiwgJkJhc2U6OnNfaW5mbywgbnVs
bHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU0xleGljYWxFbnZpcm9ubWVudCkg
fTsKIAotdm9pZCBKU0xleGljYWxFbnZpcm9ubWVudDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNl
bGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3Zv
aWQgSlNMZXhpY2FsRW52aXJvbm1lbnQ6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwg
VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTTGV4
aWNhbEVudmlyb25tZW50Kj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0
aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNDQsNiArNDUsOCBAQCB2b2lkIEpTTGV4aWNhbEVudmly
b25tZW50Ojp2aXNpdENoaWxkcmVuCiAgICAgdmlzaXRvci5hcHBlbmRWYWx1ZXNIaWRkZW4odGhp
c09iamVjdC0+dmFyaWFibGVzKCksIHRoaXNPYmplY3QtPnN5bWJvbFRhYmxlKCktPnNjb3BlU2l6
ZSgpKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTTGV4aWNhbEVudmlyb25tZW50KTsK
Kwogdm9pZCBKU0xleGljYWxFbnZpcm9ubWVudDo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBI
ZWFwQW5hbHl6ZXImIGFuYWx5emVyKQogewogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8
SlNMZXhpY2FsRW52aXJvbm1lbnQqPihjZWxsKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTTGV4aWNhbEVudmlyb25tZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMZXhpY2FsRW52aXJvbm1lbnQuaAkocmV2aXNpb24gMjcy
Mjk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMZXhpY2FsRW52aXJvbm1l
bnQuaAkod29ya2luZyBjb3B5KQpAQCAtMTM0LDcgKzEzNCw3IEBAIHByb3RlY3RlZDoKICAgICAg
ICAgfQogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xv
dFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogICAgIHN0YXRpYyB2b2lk
IGFuYWx5emVIZWFwKEpTQ2VsbCosIEhlYXBBbmFseXplciYpOwogfTsKIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNYXBJdGVyYXRvci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNYXBJdGVyYXRvci5jcHAJKHJldmlzaW9u
IDI3MjI5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTWFwSXRlcmF0b3Iu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NywxMyArNTcsMTYgQEAgdm9pZCBKU01hcEl0ZXJhdG9y
OjpmaW5pc2hDcmVhdGlvbihWTSYgdgogICAgICAgICBCYXNlOjppbnRlcm5hbEZpZWxkKGluZGV4
KS5zZXQodm0sIHRoaXMsIHZhbHVlc1tpbmRleF0pOwogfQogCi12b2lkIEpTTWFwSXRlcmF0b3I6
OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBs
YXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTTWFwSXRlcmF0b3I6OnZpc2l0Q2hpbGRyZW5J
bXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBhdXRvKiB0aGlzT2Jq
ZWN0ID0ganNDYXN0PEpTTWFwSXRlcmF0b3IqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNU
X0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0
aGlzT2JqZWN0LCB2aXNpdG9yKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTTWFwSXRl
cmF0b3IpOworCiBKU1ZhbHVlIEpTTWFwSXRlcmF0b3I6OmNyZWF0ZVBhaXIoSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBrZXksIEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgTWFy
a2VkQXJndW1lbnRCdWZmZXIgYXJnczsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTTWFwSXRlcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU01hcEl0ZXJhdG9yLmgJKHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTTWFwSXRlcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMTQy
LDcgKzE0Miw3IEBAIHByaXZhdGU6CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBmaW5pc2hD
cmVhdGlvbihWTSYsIEpTTWFwKiwgSXRlcmF0aW9uS2luZCk7CiAgICAgdm9pZCBmaW5pc2hDcmVh
dGlvbihWTSYpOwogICAgIEpTVmFsdWUgY3JlYXRlUGFpcihKU0dsb2JhbE9iamVjdCosIEpTVmFs
dWUsIEpTVmFsdWUpOwotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xv
dFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogfTsKIFNUQVRJQ19BU1NF
UlRfSVNfVFJJVklBTExZX0RFU1RSVUNUSUJMRShKU01hcEl0ZXJhdG9yKTsKIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVFbnZpcm9ubWVudC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVFbnZpcm9ubWVu
dC5jcHAJKHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTTW9kdWxlRW52aXJvbm1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NSw3ICs2NSw4IEBA
IHZvaWQgSlNNb2R1bGVFbnZpcm9ubWVudDo6ZmluaXNoQ3JlYXRpb24KICAgICB0aGlzLT5tb2R1
bGVSZWNvcmRTbG90KCkuc2V0KHZtLCB0aGlzLCBtb2R1bGVSZWNvcmQpOwogfQogCi12b2lkIEpT
TW9kdWxlRW52aXJvbm1lbnQ6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRv
ciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTTW9kdWxlRW52
aXJvbm1lbnQ6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRv
cikKIHsKICAgICBKU01vZHVsZUVudmlyb25tZW50KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTTW9k
dWxlRW52aXJvbm1lbnQqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRo
aXNPYmplY3QsIGluZm8oKSk7CkBAIC03NCw2ICs3NSw4IEBAIHZvaWQgSlNNb2R1bGVFbnZpcm9u
bWVudDo6dmlzaXRDaGlsZHJlbigKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tb2R1
bGVSZWNvcmRTbG90KCkpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNNb2R1bGVFbnZp
cm9ubWVudCk7CisKIGJvb2wgSlNNb2R1bGVFbnZpcm9ubWVudDo6Z2V0T3duUHJvcGVydHlTbG90
KEpTT2JqZWN0KiBjZWxsLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5h
bWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgVk0mIHZtID0gZ2xv
YmFsT2JqZWN0LT52bSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNN
b2R1bGVFbnZpcm9ubWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTTW9kdWxlRW52aXJvbm1lbnQuaAkocmV2aXNpb24gMjcyMjk3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVFbnZpcm9ubWVudC5oCSh3b3JraW5nIGNv
cHkpCkBAIC04OSw3ICs4OSw3IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiAqYml0d2lzZV9j
YXN0PFdyaXRlQmFycmllckJhc2U8QWJzdHJhY3RNb2R1bGVSZWNvcmQ+Kj4oYml0d2lzZV9jYXN0
PGNoYXIqPih0aGlzKSArIG9mZnNldE9mTW9kdWxlUmVjb3JkKHN5bWJvbFRhYmxlKCkpKTsKICAg
ICB9CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9y
Jik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIH07CiAKIGlubGluZSBKU01vZHVsZUVu
dmlyb25tZW50OjpKU01vZHVsZUVudmlyb25tZW50KFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUsIEpTU2NvcGUqIGN1cnJlbnRTY29wZSwgU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlKQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVOYW1lc3BhY2VPYmplY3Qu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxl
TmFtZXNwYWNlT2JqZWN0LmNwcAkocmV2aXNpb24gMjcyMjk3KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC04NSw3ICs4NSw4IEBAIHZvaWQgSlNNb2R1bGVOYW1lc3BhY2VPYmplY3Q6OmRlc3Ryb3ko
SlMKICAgICB0aGlzT2JqZWN0LT5KU01vZHVsZU5hbWVzcGFjZU9iamVjdDo6fkpTTW9kdWxlTmFt
ZXNwYWNlT2JqZWN0KCk7CiB9CiAKLXZvaWQgSlNNb2R1bGVOYW1lc3BhY2VPYmplY3Q6OnZpc2l0
Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5
cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0Ojp2aXNpdENoaWxk
cmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNNb2R1bGVO
YW1lc3BhY2VPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNNb2R1bGVOYW1lc3BhY2VPYmpl
Y3QqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGlu
Zm8oKSk7CkBAIC05OCw2ICs5OSw4IEBAIHZvaWQgSlNNb2R1bGVOYW1lc3BhY2VPYmplY3Q6OnZp
c2l0Q2hpbGQKICAgICB9CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU01vZHVsZU5hbWVz
cGFjZU9iamVjdCk7CisKIHN0YXRpYyBKU1ZhbHVlIGdldFZhbHVlKEpTTW9kdWxlRW52aXJvbm1l
bnQqIGVudmlyb25tZW50LCBQcm9wZXJ0eU5hbWUgbG9jYWxOYW1lLCBTY29wZU9mZnNldCYgc2Nv
cGVPZmZzZXQpCiB7CiAgICAgU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlID0gZW52aXJvbm1lbnQt
PnN5bWJvbFRhYmxlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01v
ZHVsZU5hbWVzcGFjZU9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTTW9kdWxlTmFtZXNwYWNlT2JqZWN0LmgJKHJldmlzaW9uIDI3MjI5NykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlTmFtZXNwYWNlT2JqZWN0LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTcyLDcgKzcyLDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBK
U19FWFBPUlRfUFJJVkFURSBKU01vZHVsZU5hbWVzcGFjZU9iamVjdChWTSYsIFN0cnVjdHVyZSop
OwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxPYmpl
Y3QqLCBBYnN0cmFjdE1vZHVsZVJlY29yZCosIFZlY3RvcjxzdGQ6OnBhaXI8SWRlbnRpZmllciwg
QWJzdHJhY3RNb2R1bGVSZWNvcmQ6OlJlc29sdXRpb24+PiYmKTsKLSAgICBzdGF0aWMgdm9pZCB2
aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9D
SElMRFJFTjsKICAgICBib29sIGdldE93blByb3BlcnR5U2xvdENvbW1vbihKU0dsb2JhbE9iamVj
dCosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CiAKICAgICBzdHJ1Y3QgRXhwb3J0RW50
cnkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVSZWNvcmQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxl
UmVjb3JkLmNwcAkocmV2aXNpb24gMjcyMjk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNNb2R1bGVSZWNvcmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MCw3ICs3MCw4IEBA
IHZvaWQgSlNNb2R1bGVSZWNvcmQ6OmZpbmlzaENyZWF0aW9uKEpTR2wKICAgICBBU1NFUlQoaW5o
ZXJpdHModm0sIGluZm8oKSkpOwogfQogCi12b2lkIEpTTW9kdWxlUmVjb3JkOjp2aXNpdENoaWxk
cmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBWaXNpdG9yPgordm9pZCBKU01vZHVsZVJlY29yZDo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxs
KiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTTW9kdWxlUmVjb3JkKiB0aGlzT2Jq
ZWN0ID0ganNDYXN0PEpTTW9kdWxlUmVjb3JkKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVD
VF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNzgsNiArNzksOCBAQCB2b2lkIEpT
TW9kdWxlUmVjb3JkOjp2aXNpdENoaWxkcmVuKEpTQ2VsCiAgICAgdmlzaXRvci5hcHBlbmQodGhp
c09iamVjdC0+bV9tb2R1bGVQcm9ncmFtRXhlY3V0YWJsZSk7CiB9CiAKK0RFRklORV9WSVNJVF9D
SElMRFJFTihKU01vZHVsZVJlY29yZCk7CisKIHZvaWQgSlNNb2R1bGVSZWNvcmQ6OmxpbmsoSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBzY3JpcHRGZXRjaGVyKQogewogICAg
IFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTTW9kdWxlUmVjb3JkLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVSZWNvcmQuaAkocmV2aXNpb24gMjcyMjk3KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVSZWNvcmQuaAkod29ya2luZyBjb3B5
KQpAQCAtNjYsNyArNjYsNyBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihK
U0dsb2JhbE9iamVjdCosIFZNJik7CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpT
Q2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAg
IHZvaWQgaW5zdGFudGlhdGVEZWNsYXJhdGlvbnMoSlNHbG9iYWxPYmplY3QqLCBNb2R1bGVQcm9n
cmFtRXhlY3V0YWJsZSosIEpTVmFsdWUgc2NyaXB0RmV0Y2hlcik7CiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTmF0aXZlU3RkRnVuY3Rpb24uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTmF0aXZlU3RkRnVuY3Rpb24uY3Bw
CShyZXZpc2lvbiAyNzIyOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU05h
dGl2ZVN0ZEZ1bmN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEsMTMgKzQxLDE2IEBAIEpT
TmF0aXZlU3RkRnVuY3Rpb246OkpTTmF0aXZlU3RkRnVuY3Rpb24KIHsKIH0KIAotdm9pZCBKU05h
dGl2ZVN0ZEZ1bmN0aW9uOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3Im
IHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU05hdGl2ZVN0ZEZ1
bmN0aW9uOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3Ip
CiB7CiAgICAgSlNOYXRpdmVTdGRGdW5jdGlvbiogdGhpc09iamVjdCA9IGpzQ2FzdDxKU05hdGl2
ZVN0ZEZ1bmN0aW9uKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlz
T2JqZWN0LCBpbmZvKCkpOwogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlz
aXRvcik7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU05hdGl2ZVN0ZEZ1bmN0aW9uKTsK
Kwogdm9pZCBKU05hdGl2ZVN0ZEZ1bmN0aW9uOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIE5hdGl2
ZUV4ZWN1dGFibGUqIGV4ZWN1dGFibGUsIHVuc2lnbmVkIGxlbmd0aCwgY29uc3QgU3RyaW5nJiBu
YW1lKQogewogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtLCBleGVjdXRhYmxlLCBsZW5ndGgs
IG5hbWUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNOYXRpdmVTdGRG
dW5jdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
TmF0aXZlU3RkRnVuY3Rpb24uaAkocmV2aXNpb24gMjcyMjk3KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNOYXRpdmVTdGRGdW5jdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC02
NSw3ICs2NSw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgSlNOYXRpdmVTdGRGdW5jdGlvbihW
TSYsIE5hdGl2ZUV4ZWN1dGFibGUqLCBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSosIE5hdGl2
ZVN0ZEZ1bmN0aW9uJiYpOwogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBOYXRpdmVFeGVj
dXRhYmxlKiwgdW5zaWduZWQgbGVuZ3RoLCBjb25zdCBTdHJpbmcmIG5hbWUpOwotICAgIHN0YXRp
YyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJF
X1ZJU0lUX0NISUxEUkVOOwogCiAgICAgTmF0aXZlU3RkRnVuY3Rpb24gbV9mdW5jdGlvbjsKIH07
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCShyZXZp
c2lvbiAyNzIyOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTcyLDcgKzcyLDggQEAgY29uc3QgQ2xhc3NJbmZvIEpTT2Jq
ZWN0OjpzX2luZm8gPSB7ICJPYgogCiBjb25zdCBDbGFzc0luZm8gSlNGaW5hbE9iamVjdDo6c19p
bmZvID0geyAiT2JqZWN0IiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRF
X01FVEhPRF9UQUJMRShKU0ZpbmFsT2JqZWN0KSB9OwogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSlNP
YmplY3Q6Om1hcmtBdXhpbGlhcnlBbmRWaXNpdE91dE9mTGluZVByb3BlcnRpZXMoU2xvdFZpc2l0
b3ImIHZpc2l0b3IsIEJ1dHRlcmZseSogYnV0dGVyZmx5LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwg
UHJvcGVydHlPZmZzZXQgbWF4T2Zmc2V0KQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK0FM
V0FZU19JTkxJTkUgdm9pZCBKU09iamVjdDo6bWFya0F1eGlsaWFyeUFuZFZpc2l0T3V0T2ZMaW5l
UHJvcGVydGllcyhWaXNpdG9yJiB2aXNpdG9yLCBCdXR0ZXJmbHkqIGJ1dHRlcmZseSwgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IG1heE9mZnNldCkKIHsKICAgICAvLyBXZSBj
YWxsIHRoaXMgd2hlbiB3ZSBmb3VuZCBldmVyeXRoaW5nIHdpdGhvdXQgcmFjZXMuCiAgICAgQVNT
RVJUKHN0cnVjdHVyZSk7CkBAIC0xMDMsNyArMTA0LDggQEAgQUxXQVlTX0lOTElORSB2b2lkIEpT
T2JqZWN0OjptYXJrQXV4aWxpYQogICAgIHZpc2l0b3IuYXBwZW5kVmFsdWVzSGlkZGVuKGJ1dHRl
cmZseS0+cHJvcGVydHlTdG9yYWdlKCkgLSBvdXRPZkxpbmVTaXplLCBvdXRPZkxpbmVTaXplKTsK
IH0KIAotQUxXQVlTX0lOTElORSBTdHJ1Y3R1cmUqIEpTT2JqZWN0Ojp2aXNpdEJ1dHRlcmZseShT
bG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+CitBTFdBWVNf
SU5MSU5FIFN0cnVjdHVyZSogSlNPYmplY3Q6OnZpc2l0QnV0dGVyZmx5KFZpc2l0b3ImIHZpc2l0
b3IpCiB7CiAgICAgc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IHJhY2VSZWFzb24gPSAiSlNPYmpl
Y3Q6OnZpc2l0QnV0dGVyZmx5IjsKICAgICBTdHJ1Y3R1cmUqIHJlc3VsdCA9IHZpc2l0QnV0dGVy
Zmx5SW1wbCh2aXNpdG9yKTsKQEAgLTExMiw3ICsxMTQsOCBAQCBBTFdBWVNfSU5MSU5FIFN0cnVj
dHVyZSogSlNPYmplY3Q6OnZpc2l0CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotQUxXQVlTX0lO
TElORSBTdHJ1Y3R1cmUqIEpTT2JqZWN0Ojp2aXNpdEJ1dHRlcmZseUltcGwoU2xvdFZpc2l0b3Im
IHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgorQUxXQVlTX0lOTElORSBTdHJ1
Y3R1cmUqIEpTT2JqZWN0Ojp2aXNpdEJ1dHRlcmZseUltcGwoVmlzaXRvciYgdmlzaXRvcikKIHsK
ICAgICBWTSYgdm0gPSB2aXNpdG9yLnZtKCk7CiAgICAgCkBAIC00MTIsMjQgKzQxNSwyMCBAQCBz
aXplX3QgSlNPYmplY3Q6OmVzdGltYXRlZFNpemUoSlNDZWxsKiBjCiAgICAgcmV0dXJuIEJhc2U6
OmVzdGltYXRlZFNpemUoY2VsbCwgdm0pICsgYnV0dGVyZmx5T3V0T2ZMaW5lU2l6ZTsKIH0KIAot
dm9pZCBKU09iamVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNPYmplY3Q6OnZpc2l0
Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU09i
amVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU09iamVjdCo+KGNlbGwpOwogICAgIEFTU0VSVF9H
Q19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKLSNpZiBBU1NFUlRfRU5BQkxF
RAotICAgIGJvb2wgd2FzQ2hlY2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlvbiA9IHZpc2l0b3Iu
bV9pc0NoZWNraW5nRm9yRGVmYXVsdE1hcmtWaW9sYXRpb247Ci0gICAgdmlzaXRvci5tX2lzQ2hl
Y2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlvbiA9IGZhbHNlOwotI2VuZGlmCi0gICAgCisgICAg
dHlwZW5hbWUgVmlzaXRvcjo6RGVmYXVsdE1hcmtpbmdWaW9sYXRpb25Bc3NlcnRpb25TY29wZSBh
c3NlcnRpb25TY29wZSh2aXNpdG9yKTsKKwogICAgIEpTQ2VsbDo6dmlzaXRDaGlsZHJlbih0aGlz
T2JqZWN0LCB2aXNpdG9yKTsKLSAgICAKKwogICAgIHRoaXNPYmplY3QtPnZpc2l0QnV0dGVyZmx5
KHZpc2l0b3IpOwotICAgIAotI2lmIEFTU0VSVF9FTkFCTEVECi0gICAgdmlzaXRvci5tX2lzQ2hl
Y2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlvbiA9IHdhc0NoZWNraW5nRm9yRGVmYXVsdE1hcmtW
aW9sYXRpb247Ci0jZW5kaWYKIH0KIAorREVGSU5FX0VYUE9SVF9WSVNJVF9DSElMRFJFTihKU09i
amVjdCk7CisKIHZvaWQgSlNPYmplY3Q6OmFuYWx5emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFu
YWx5emVyJiBhbmFseXplcikKIHsKICAgICBKU09iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxK
U09iamVjdCo+KGNlbGwpOwpAQCAtNDY4LDE0ICs0NjcsMTIgQEAgdm9pZCBKU09iamVjdDo6YW5h
bHl6ZUhlYXAoSlNDZWxsKiBjZWxsLAogICAgIH0KIH0KIAotdm9pZCBKU0ZpbmFsT2JqZWN0Ojp2
aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0
ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0ZpbmFsT2JqZWN0Ojp2aXNpdENoaWxkcmVuSW1w
bChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNGaW5hbE9iamVjdCog
dGhpc09iamVjdCA9IGpzQ2FzdDxKU0ZpbmFsT2JqZWN0Kj4oY2VsbCk7CiAgICAgQVNTRVJUX0dD
X09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwotI2lmIEFTU0VSVF9FTkFCTEVE
Ci0gICAgYm9vbCB3YXNDaGVja2luZ0ZvckRlZmF1bHRNYXJrVmlvbGF0aW9uID0gdmlzaXRvci5t
X2lzQ2hlY2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlvbjsKLSAgICB2aXNpdG9yLm1faXNDaGVj
a2luZ0ZvckRlZmF1bHRNYXJrVmlvbGF0aW9uID0gZmFsc2U7Ci0jZW5kaWYKKyAgICB0eXBlbmFt
ZSBWaXNpdG9yOjpEZWZhdWx0TWFya2luZ1Zpb2xhdGlvbkFzc2VydGlvblNjb3BlIGFzc2VydGlv
blNjb3BlKHZpc2l0b3IpOwogICAgIAogICAgIEpTQ2VsbDo6dmlzaXRDaGlsZHJlbih0aGlzT2Jq
ZWN0LCB2aXNpdG9yKTsKICAgICAKQEAgLTQ4MywxMiArNDgwLDEwIEBAIHZvaWQgSlNGaW5hbE9i
amVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwKICAgICAgICAgaWYgKHVuc2lnbmVkIHN0b3JhZ2VT
aXplID0gc3RydWN0dXJlLT5pbmxpbmVTaXplKCkpCiAgICAgICAgICAgICB2aXNpdG9yLmFwcGVu
ZFZhbHVlc0hpZGRlbih0aGlzT2JqZWN0LT5pbmxpbmVTdG9yYWdlKCksIHN0b3JhZ2VTaXplKTsK
ICAgICB9Ci0gICAgCi0jaWYgQVNTRVJUX0VOQUJMRUQKLSAgICB2aXNpdG9yLm1faXNDaGVja2lu
Z0ZvckRlZmF1bHRNYXJrVmlvbGF0aW9uID0gd2FzQ2hlY2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xh
dGlvbjsKLSNlbmRpZgogfQogCitERUZJTkVfRVhQT1JUX1ZJU0lUX0NISUxEUkVOKEpTRmluYWxP
YmplY3QpOworCiBTdHJpbmcgSlNPYmplY3Q6OmNsYXNzTmFtZShjb25zdCBKU09iamVjdCogb2Jq
ZWN0LCBWTSYgdm0pCiB7CiAgICAgY29uc3QgQ2xhc3NJbmZvKiBpbmZvID0gb2JqZWN0LT5jbGFz
c0luZm8odm0pOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3Qu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5o
CShyZXZpc2lvbiAyNzIyOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09i
amVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDgsOCArMTA4LDkgQEAgY2xhc3MgSlNPYmplY3Qg
OiBwdWJsaWMgSlNDZWxsIHsKIHB1YmxpYzoKICAgICB1c2luZyBCYXNlID0gSlNDZWxsOwogCisg
ICAgREVDTEFSRV9FWFBPUlRfVklTSVRfQ0hJTERSRU47CisKICAgICBKU19FWFBPUlRfUFJJVkFU
RSBzdGF0aWMgc2l6ZV90IGVzdGltYXRlZFNpemUoSlNDZWxsKiwgVk0mKTsKLSAgICBKU19FWFBP
UlRfUFJJVkFURSBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9y
Jik7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgYW5hbHl6ZUhlYXAoSlNDZWxs
KiwgSGVhcEFuYWx5emVyJik7CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgU3RyaW5n
IGNsYXNzTmFtZShjb25zdCBKU09iamVjdCosIFZNJik7CkBAIC05ODAsMTEgKzk4MSwxMSBAQCBw
cm90ZWN0ZWQ6CiAgICAgSlNPYmplY3QoVk0mLCBTdHJ1Y3R1cmUqLCBCdXR0ZXJmbHkqID0gbnVs
bHB0cik7CiAgICAgCiAgICAgLy8gVmlzaXRzIHRoZSBidXR0ZXJmbHkgdW5sZXNzIHRoZXJlIGlz
IGEgcmFjZS4gUmV0dXJucyB0aGUgc3RydWN0dXJlIGlmIHRoZXJlIHdhcyBubyByYWNlLgotICAg
IFN0cnVjdHVyZSogdmlzaXRCdXR0ZXJmbHkoU2xvdFZpc2l0b3ImKTsKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBWaXNpdG9yPiBTdHJ1Y3R1cmUqIHZpc2l0QnV0dGVyZmx5KFZpc2l0b3ImKTsKICAg
ICAKLSAgICBTdHJ1Y3R1cmUqIHZpc2l0QnV0dGVyZmx5SW1wbChTbG90VmlzaXRvciYpOworICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IFN0cnVjdHVyZSogdmlzaXRCdXR0ZXJmbHlJbXBs
KFZpc2l0b3ImKTsKICAgICAKLSAgICB2b2lkIG1hcmtBdXhpbGlhcnlBbmRWaXNpdE91dE9mTGlu
ZVByb3BlcnRpZXMoU2xvdFZpc2l0b3ImLCBCdXR0ZXJmbHkqLCBTdHJ1Y3R1cmUqLCBQcm9wZXJ0
eU9mZnNldCBtYXhPZmZzZXQpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQg
bWFya0F1eGlsaWFyeUFuZFZpc2l0T3V0T2ZMaW5lUHJvcGVydGllcyhWaXNpdG9yJiwgQnV0dGVy
Zmx5KiwgU3RydWN0dXJlKiwgUHJvcGVydHlPZmZzZXQgbWF4T2Zmc2V0KTsKIAogICAgIC8vIENh
bGwgdGhpcyBpZiB5b3Uga25vdyB0aGF0IHRoZSBvYmplY3QgaXMgaW4gYSBtb2RlIHdoZXJlIGl0
IGhhcyBhcnJheQogICAgIC8vIHN0b3JhZ2UuIFRoaXMgd2lsbCBhc3NlcnQgb3RoZXJ3aXNlLgpA
QCAtMTE3Miw4ICsxMTczLDYgQEAgcHJvdGVjdGVkOgogICAgIH0KIH07CiAKLWNsYXNzIEpTRmlu
YWxPYmplY3Q7Ci0KIC8vIEpTRmluYWxPYmplY3QgaXMgYSB0eXBlIG9mIEpTT2JqZWN0IHRoYXQg
Y29udGFpbnMgc3VmZmljaWVudCBpbnRlcm5hbAogLy8gc3RvcmFnZSB0byBmdWxseSBtYWtlIHVz
ZSBvZiB0aGUgY29sbGVjdG9yIGNlbGwgY29udGFpbmluZyBpdC4KIGNsYXNzIEpTRmluYWxPYmpl
Y3QgZmluYWwgOiBwdWJsaWMgSlNPYmplY3QgewpAQCAtMTIxMiwxNSArMTIxMSwxMyBAQCBwdWJs
aWM6CiAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBw
cm90b3R5cGUsIHR5cGVJbmZvKCksIGluZm8oKSwgZGVmYXVsdEluZGV4aW5nVHlwZSwgaW5saW5l
Q2FwYWNpdHkpOwogICAgIH0KIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIHZp
c2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX0VYUE9SVF9W
SVNJVF9DSElMRFJFTjsKIAogICAgIERFQ0xBUkVfRVhQT1JUX0lORk87CiAKIHByaXZhdGU6CiAg
ICAgZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKIAotICAgIHZvaWQgdmlzaXRD
aGlsZHJlbkNvbW1vbihTbG90VmlzaXRvciYpOwotCiAgICAgZXhwbGljaXQgSlNGaW5hbE9iamVj
dChWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBCdXR0ZXJmbHkqIGJ1dHRlcmZseSkKICAg
ICAgICAgOiBKU09iamVjdCh2bSwgc3RydWN0dXJlLCBidXR0ZXJmbHkpCiAgICAgewpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9taXNlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb21pc2UuY3BwCShyZXZpc2lvbiAy
NzIyOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb21pc2UuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC02NywxMyArNjcsMTYgQEAgdm9pZCBKU1Byb21pc2U6OmZpbmlzaENy
ZWF0aW9uKFZNJiB2bSkKICAgICAgICAgQmFzZTo6aW50ZXJuYWxGaWVsZChpbmRleCkuc2V0KHZt
LCB0aGlzLCB2YWx1ZXNbaW5kZXhdKTsKIH0KIAotdm9pZCBKU1Byb21pc2U6OnZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1l
IFZpc2l0b3I+Cit2b2lkIEpTUHJvbWlzZTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxs
LCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNQ
cm9taXNlKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0
LCBpbmZvKCkpOwogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7
CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU1Byb21pc2UpOworCiBhdXRvIEpTUHJvbWlz
ZTo6c3RhdHVzKFZNJikgY29uc3QgLT4gU3RhdHVzCiB7CiAgICAgSlNWYWx1ZSB2YWx1ZSA9IGlu
dGVybmFsRmllbGQoRmllbGQ6OkZsYWdzKS5nZXQoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTUHJvbWlzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTUHJvbWlzZS5oCShyZXZpc2lvbiAyNzIyOTcpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb21pc2UuaAkod29ya2luZyBjb3B5KQpAQCAtOTYsNyAr
OTYsNyBAQCBwdWJsaWM6CiAgICAgfTsKICAgICBzdGF0aWMgRGVmZXJyZWREYXRhIGNyZWF0ZURl
ZmVycmVkRGF0YShKU0dsb2JhbE9iamVjdCosIEpTUHJvbWlzZUNvbnN0cnVjdG9yKik7CiAKLSAg
ICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAg
REVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogcHJvdGVjdGVkOgogICAgIEpTUHJvbWlzZShWTSYs
IFN0cnVjdHVyZSopOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9w
ZXJ0eU5hbWVFbnVtZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuY3BwCShyZXZpc2lvbiAyNzIyOTcp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3BlcnR5TmFtZUVudW1lcmF0
b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MCw3ICs3MCw4IEBAIHZvaWQgSlNQcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yOjpmaW5pc2hDcmUKICAgICB9CiB9CiAKLXZvaWQgSlNQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0
b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1Byb3BlcnR5TmFtZUVudW1l
cmF0b3I6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikK
IHsKICAgICBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNQ
cm9wZXJ0eU5hbWVFbnVtZXJhdG9yKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhF
UklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtODcsNiArODgsOCBAQCB2b2lkIEpTUHJvcGVy
dHlOYW1lRW51bWVyYXRvcjo6dmlzaXRDaGlsCiAgICAgfQogfQogCitERUZJTkVfVklTSVRfQ0hJ
TERSRU4oSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKTsKKwogLy8gRklYTUU6IEFzc2VydCB0aGF0
IHByb3BlcnRpZXMgcmV0dXJuZWQgYnkgZ2V0T3duUHJvcGVydHlOYW1lcygpIGFyZSByZXBvcnRl
ZCBlbnVtZXJhYmxlIGJ5IGdldE93blByb3BlcnR5U2xvdCgpLgogLy8gaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxOTkyNgogdm9pZCBnZXRFbnVtZXJhYmxlUHJvcGVy
dHlOYW1lcyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU09iamVjdCogYmFzZSwgUHJv
cGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIHVpbnQzMl90JiBpbmRleGVkTGVuZ3RoLCB1
aW50MzJfdCYgc3RydWN0dXJlUHJvcGVydHlDb3VudCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTUHJvcGVydHlOYW1lRW51bWVyYXRvci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVydHlOYW1lRW51bWVyYXRvci5oCShy
ZXZpc2lvbiAyNzIyOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3Bl
cnR5TmFtZUVudW1lcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtODQsNyArODQsNyBAQCBwdWJs
aWM6CiAgICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yLCBtX3Byb3BlcnR5TmFtZXMpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hp
bGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVO
OwogCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3h5LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3h5LmNwcAkocmV2aXNpb24g
MjcyMjk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm94eS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM1LDcgKzM1LDggQEAgU1RBVElDX0FTU0VSVF9JU19UUklWSUFMTFlf
REVTVFJVQ1RJQkxFKAogCiBjb25zdCBDbGFzc0luZm8gSlNQcm94eTo6c19pbmZvID0geyAiSlNQ
cm94eSIsICZCYXNlOjpzX2luZm8sIG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFC
TEUoSlNQcm94eSkgfTsKIAotdm9pZCBKU1Byb3h5Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2Vs
bCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9p
ZCBKU1Byb3h5Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0
b3IpCiB7CiAgICAgSlNQcm94eSogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Byb3h5Kj4oY2VsbCk7
CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAt
NDMsNiArNDQsOCBAQCB2b2lkIEpTUHJveHk6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsCiAg
ICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV90YXJnZXQpOwogfQogCitERUZJTkVfRVhQ
T1JUX1ZJU0lUX0NISUxEUkVOKEpTUHJveHkpOworCiB2b2lkIEpTUHJveHk6OnNldFRhcmdldChW
TSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCiB7CiAgICAgbV90YXJnZXQuc2V0
KHZtLCB0aGlzLCBnbG9iYWxPYmplY3QpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNQcm94eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTUHJveHkuaAkocmV2aXNpb24gMjcyMjk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNQcm94eS5oCSh3b3JraW5nIGNvcHkpCkBAIC04NSw3ICs4NSw3IEBAIHByb3Rl
Y3RlZDoKICAgICAgICAgbV90YXJnZXQuc2V0KHZtLCB0aGlzLCB0YXJnZXQpOwogICAgIH0KIAot
ICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwg
U2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX0VYUE9SVF9WSVNJVF9DSElMRFJFTjsKIAogICAg
IEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBTdHJpbmcgY2xhc3NOYW1lKGNvbnN0IEpTT2JqZWN0
KiwgVk0mKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgU3RyaW5nIHRvU3RyaW5nTmFt
ZShjb25zdCBKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0Kik7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU1Njb3BlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU1Njb3BlLmNwcAkocmV2aXNpb24gMjcyMjk3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTY29wZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5
LDcgKzM5LDggQEAgU1RBVElDX0FTU0VSVF9JU19UUklWSUFMTFlfREVTVFJVQ1RJQkxFKAogCiBj
b25zdCBDbGFzc0luZm8gSlNTY29wZTo6c19pbmZvID0geyAiU2NvcGUiLCAmQmFzZTo6c19pbmZv
LCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTU2NvcGUpIH07CiAKLXZv
aWQgSlNTY29wZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNp
dG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNTY29wZTo6dmlzaXRDaGls
ZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTU2NvcGUq
IHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNTY29wZSo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpF
Q1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTQ3LDYgKzQ4LDggQEAgdm9pZCBK
U1Njb3BlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbAogICAgIHZpc2l0b3IuYXBwZW5kKHRo
aXNPYmplY3QtPm1fbmV4dCk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU1Njb3BlKTsK
KwogLy8gUmV0dXJucyB0cnVlIGlmIHdlIGZvdW5kIGVub3VnaCBpbmZvcm1hdGlvbiB0byB0ZXJt
aW5hdGUgb3B0aW1pemF0aW9uLgogc3RhdGljIGlubGluZSBib29sIGFic3RyYWN0QWNjZXNzKEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTU2NvcGUqIHNjb3BlLCBjb25zdCBJZGVudGlm
aWVyJiBpZGVudCwgR2V0T3JQdXQgZ2V0T3JQdXQsIHNpemVfdCBkZXB0aCwgYm9vbCYgbmVlZHNW
YXJJbmplY3Rpb25DaGVja3MsIFJlc29sdmVPcCYgb3AsIEluaXRpYWxpemF0aW9uTW9kZSBpbml0
aWFsaXphdGlvbk1vZGUpCiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U1Njb3BlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNT
Y29wZS5oCShyZXZpc2lvbiAyNzIyOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU1Njb3BlLmgJKHdvcmtpbmcgY29weSkKQEAgLTY0LDcgKzY0LDcgQEAgcHVibGljOgogCiAg
ICAgc3RhdGljIHZvaWQgY29sbGVjdENsb3N1cmVWYXJpYWJsZXNVbmRlclREWihKU1Njb3BlKiwg
VERaRW52aXJvbm1lbnQmIHJlc3VsdCwgVmFyaWFibGVFbnZpcm9ubWVudCYgcHJpdmF0ZU5hbWVz
KTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3Im
KTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgYm9vbCBpc1ZhclNjb3BlKCk7
CiAgICAgYm9vbCBpc0xleGljYWxTY29wZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdC5jcHAJ
KHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2Vn
bWVudGVkVmFyaWFibGVPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MiwxOSArNjIsMjIg
QEAgU2NvcGVPZmZzZXQgSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdDo6YQogICAgIHJldHVybiBT
Y29wZU9mZnNldChvbGRTaXplKTsKIH0KIAotdm9pZCBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0
Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yKQor
dGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVj
dDo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewog
ICAgIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNTZWdt
ZW50ZWRWYXJpYWJsZU9iamVjdCo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJ
VFModGhpc09iamVjdCwgaW5mbygpKTsKLSAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmpl
Y3QsIHNsb3RWaXNpdG9yKTsKKyAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZp
c2l0b3IpOwogICAgIAogICAgIC8vIEZJWE1FOiBXZSBjb3VsZCBhdm9pZCBsb2NraW5nIGhlcmUg
aWYgU2VnbWVudGVkVmVjdG9yIHdhcyBsb2NrLWZyZWUuIEl0IGNvdWxkIGJlIG1hZGUgbG9jay1m
cmVlCiAgICAgLy8gcmVsYXRpdmVseSBlYXNpbHkuCiAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9j
ayh0aGlzT2JqZWN0LT5jZWxsTG9jaygpKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSB0aGlzT2Jq
ZWN0LT5tX3ZhcmlhYmxlcy5zaXplKCk7IGktLTspCi0gICAgICAgIHNsb3RWaXNpdG9yLmFwcGVu
ZEhpZGRlbih0aGlzT2JqZWN0LT5tX3ZhcmlhYmxlc1tpXSk7CisgICAgICAgIHZpc2l0b3IuYXBw
ZW5kSGlkZGVuKHRoaXNPYmplY3QtPm1fdmFyaWFibGVzW2ldKTsKIH0KIAorREVGSU5FX0VYUE9S
VF9WSVNJVF9DSElMRFJFTihKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0KTsKKwogdm9pZCBKU1Nl
Z21lbnRlZFZhcmlhYmxlT2JqZWN0OjphbmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhlYXBBbmFs
eXplciYgYW5hbHl6ZXIpCiB7CiAgICAgSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdCogdGhpc09i
amVjdCA9IGpzQ2FzdDxKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0Kj4oY2VsbCk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZWdtZW50ZWRW
YXJpYWJsZU9iamVjdC5oCShyZXZpc2lvbiAyNzIyOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAg
LTg2LDcgKzg2LDcgQEAgcHVibGljOgogICAgIC8vIHRoZSBpbmRleCBvZiB0aGUgZmlyc3Qgb25l
IGFkZGVkLgogICAgIEpTX0VYUE9SVF9QUklWQVRFIFNjb3BlT2Zmc2V0IGFkZFZhcmlhYmxlcyh1
bnNpZ25lZCBudW1iZXJPZlZhcmlhYmxlc1RvQWRkLCBKU1ZhbHVlKTsKICAgICAKLSAgICBKU19F
WFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNp
dG9yJik7CisgICAgREVDTEFSRV9FWFBPUlRfVklTSVRfQ0hJTERSRU47CiAgICAgSlNfRVhQT1JU
X1BSSVZBVEUgc3RhdGljIHZvaWQgYW5hbHl6ZUhlYXAoSlNDZWxsKiwgSGVhcEFuYWx5emVyJik7
CiAgICAgCiBwcm90ZWN0ZWQ6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U1NldEl0ZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1NldEl0ZXJhdG9yLmNwcAkocmV2aXNpb24gMjcyMjk3KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNTZXRJdGVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU3
LDEzICs1NywxNiBAQCB2b2lkIEpTU2V0SXRlcmF0b3I6OmZpbmlzaENyZWF0aW9uKFZNJiB2CiAg
ICAgICAgIEJhc2U6OmludGVybmFsRmllbGQoaW5kZXgpLnNldCh2bSwgdGhpcywgdmFsdWVzW2lu
ZGV4XSk7CiB9CiAKLXZvaWQgSlNTZXRJdGVyYXRvcjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNl
bGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3Zv
aWQgSlNTZXRJdGVyYXRvcjo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9y
JiB2aXNpdG9yKQogewogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNTZXRJdGVyYXRv
cio+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5m
bygpKTsKICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwogfQog
CitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNTZXRJdGVyYXRvcik7CisKIEpTVmFsdWUgSlNTZXRJ
dGVyYXRvcjo6Y3JlYXRlUGFpcihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVl
IGtleSwgSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdzOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZXRJdGVyYXRvci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2V0SXRlcmF0b3IuaAko
cmV2aXNpb24gMjcyMjk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZXRJ
dGVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzAsNyArMTMwLDcgQEAgcHJpdmF0ZToKICAg
ICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgSlNTZXQqLCBJdGVy
YXRpb25LaW5kKTsKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7CiAgICAgSlNfRVhQT1JU
X1BSSVZBVEUgSlNWYWx1ZSBjcmVhdGVQYWlyKEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSwgSlNW
YWx1ZSk7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRv
ciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiB9OwogU1RBVElDX0FTU0VSVF9JU19U
UklWSUFMTFlfREVTVFJVQ1RJQkxFKEpTU2V0SXRlcmF0b3IpOwogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU1NvdXJjZUNvZGUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU291cmNlQ29kZS5jcHAJKHJldmlzaW9uIDI3MjI5
NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU291cmNlQ29kZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDggQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNs
dWRlICJKU1NvdXJjZUNvZGUuaCIKIAorI2luY2x1ZGUgIkpTQ2VsbElubGluZXMuaCIgLy8gbWxh
bSBURVNUCisKIG5hbWVzcGFjZSBKU0MgewogCiBjb25zdCBDbGFzc0luZm8gSlNTb3VyY2VDb2Rl
OjpzX2luZm8gPSB7ICJKU1NvdXJjZUNvZGUiLCBudWxscHRyLCBudWxscHRyLCBudWxscHRyLCBD
UkVBVEVfTUVUSE9EX1RBQkxFKEpTU291cmNlQ29kZSkgfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5jcHAJKHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTA1LDcgKzEwNSw4IEBAIHNpemVfdCBKU1N0cmluZzo6ZXN0aW1hdGVkU2l6ZShKU0NlbGwqIGMK
ICAgICByZXR1cm4gQmFzZTo6ZXN0aW1hdGVkU2l6ZShjZWxsLCB2bSkgKyBiaXR3aXNlX2Nhc3Q8
U3RyaW5nSW1wbCo+KHBvaW50ZXIpLT5jb3N0RHVyaW5nR0MoKTsKIH0KIAotdm9pZCBKU1N0cmlu
Zzo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVt
cGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNTdHJpbmc6OnZpc2l0Q2hpbGRyZW5JbXBs
KEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU1N0cmluZyogdGhpc09i
amVjdCA9IGFzU3RyaW5nKGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhp
c09iamVjdCwgaW5mbygpKTsKQEAgLTE0Myw2ICsxNDQsOCBAQCB2b2lkIEpTU3RyaW5nOjp2aXNp
dENoaWxkcmVuKEpTQ2VsbCogY2VsCiAgICAgICAgIHZpc2l0b3IucmVwb3J0RXh0cmFNZW1vcnlW
aXNpdGVkKGltcGwtPmNvc3REdXJpbmdHQygpKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVO
KEpTU3RyaW5nKTsKKwogc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBtYXhMZW5ndGhGb3JPblN0
YWNrUmVzb2x2ZSA9IDIwNDg7CiAKIHZvaWQgSlNSb3BlU3RyaW5nOjpyZXNvbHZlUm9wZUludGVy
bmFsOChMQ2hhciogYnVmZmVyKSBjb25zdApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNTdHJpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1N0cmluZy5oCShyZXZpc2lvbiAyNzIyOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1N0cmluZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMTcsNyArMjE3LDcgQEAg
cHVibGljOgogCiAgICAgc3RhdGljIHZvaWQgZHVtcFRvU3RyZWFtKGNvbnN0IEpTQ2VsbCosIFBy
aW50U3RyZWFtJik7CiAgICAgc3RhdGljIHNpemVfdCBlc3RpbWF0ZWRTaXplKEpTQ2VsbCosIFZN
Jik7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYp
OworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBBTFdBWVNfSU5MSU5FIGJvb2wg
aXNSb3BlKCkgY29uc3QKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU1N0cmluZ0l0ZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1N0cmluZ0l0ZXJhdG9yLmNwcAkocmV2aXNpb24gMjcyMjk3KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmdJdGVyYXRvci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTUxLDExICs1MSwxNCBAQCBKU1N0cmluZ0l0ZXJhdG9yKiBKU1N0cmluZ0l0ZXJh
dG9yOjpjbG9uCiAgICAgcmV0dXJuIGNsb25lOwogfQogCi12b2lkIEpTU3RyaW5nSXRlcmF0b3I6
OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBs
YXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTU3RyaW5nSXRlcmF0b3I6OnZpc2l0Q2hpbGRy
ZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBhdXRvKiB0aGlz
T2JqZWN0ID0ganNDYXN0PEpTU3RyaW5nSXRlcmF0b3IqPihjZWxsKTsKICAgICBBU1NFUlRfR0Nf
T0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAgICAgQmFzZTo6dmlzaXRDaGls
ZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpT
U3RyaW5nSXRlcmF0b3IpOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nSXRlcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZ0l0ZXJhdG9yLmgJKHJldmlzaW9uIDI3
MjI5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nSXRlcmF0b3Iu
aAkod29ya2luZyBjb3B5KQpAQCAtNzksNyArNzksNyBAQCBwdWJsaWM6CiAgICAgSlNWYWx1ZSBp
bmRleCgpIGNvbnN0IHsgcmV0dXJuIGludGVybmFsRmllbGQoRmllbGQ6OkluZGV4KS5nZXQoKTsg
fQogICAgIEpTU3RyaW5nSXRlcmF0b3IqIGNsb25lKEpTR2xvYmFsT2JqZWN0Kik7CiAKLSAgICBz
dGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVD
TEFSRV9WSVNJVF9DSElMRFJFTjsKIAogcHJpdmF0ZToKICAgICBKU1N0cmluZ0l0ZXJhdG9yKFZN
JiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0LmNwcAkocmV2aXNpb24gMjcy
Mjk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVj
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDcgKzM2LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAK
IGNvbnN0IENsYXNzSW5mbyBKU1N5bWJvbFRhYmxlT2JqZWN0OjpzX2luZm8gPSB7ICJTeW1ib2xU
YWJsZU9iamVjdCIsICZCYXNlOjpzX2luZm8sIG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRI
T0RfVEFCTEUoSlNTeW1ib2xUYWJsZU9iamVjdCkgfTsKIAotdm9pZCBKU1N5bWJvbFRhYmxlT2Jq
ZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0
ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1N5bWJvbFRhYmxlT2JqZWN0Ojp2aXNp
dENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNT
eW1ib2xUYWJsZU9iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1N5bWJvbFRhYmxlT2JqZWN0
Kj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZv
KCkpOwpAQCAtNDQsNiArNDUsOCBAQCB2b2lkIEpTU3ltYm9sVGFibGVPYmplY3Q6OnZpc2l0Q2hp
bGRyZW4oCiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9zeW1ib2xUYWJsZSk7CiB9
CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU1N5bWJvbFRhYmxlT2JqZWN0KTsKKwogYm9vbCBK
U1N5bWJvbFRhYmxlT2JqZWN0OjpkZWxldGVQcm9wZXJ0eShKU0NlbGwqIGNlbGwsIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIERlbGV0ZVBy
b3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBKU1N5bWJvbFRhYmxlT2JqZWN0KiB0aGlzT2JqZWN0
ID0ganNDYXN0PEpTU3ltYm9sVGFibGVPYmplY3QqPihjZWxsKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0LmgJKHJldmlz
aW9uIDI3MjI5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3ltYm9sVGFi
bGVPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtNzAsNyArNzAsNyBAQCBwcm90ZWN0ZWQ6CiAg
ICAgICAgIG1fc3ltYm9sVGFibGUuc2V0KHZtLCB0aGlzLCBzeW1ib2xUYWJsZSk7CiAgICAgfQog
ICAgIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3Im
KTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogICAgIAogcHJpdmF0ZToKICAgICBXcml0
ZUJhcnJpZXI8U3ltYm9sVGFibGU+IG1fc3ltYm9sVGFibGU7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU1dlYWtPYmplY3RSZWYuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTV2Vha09iamVjdFJlZi5jcHAJKHJldmlzaW9uIDI3
MjI5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTV2Vha09iamVjdFJlZi5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDcgKzM5LDggQEAgdm9pZCBKU1dlYWtPYmplY3RSZWY6
OmZpbmlzaENyZWF0aW9uKFZNJgogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKIH0KIAot
dm9pZCBKU1dlYWtPYmplY3RSZWY6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90Vmlz
aXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTV2Vha09i
amVjdFJlZjo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9y
KQogewogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNXZWFrT2JqZWN0UmVmKj4oY2Vs
bCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpA
QCAtNTEsNiArNTIsOCBAQCB2b2lkIEpTV2Vha09iamVjdFJlZjo6dmlzaXRDaGlsZHJlbihKU0Nl
CiAgICAgfQogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNXZWFrT2JqZWN0UmVmKTsKKwog
dm9pZCBKU1dlYWtPYmplY3RSZWY6OmZpbmFsaXplVW5jb25kaXRpb25hbGx5KFZNJiB2bSkKIHsK
ICAgICBpZiAobV92YWx1ZSAmJiAhdm0uaGVhcC5pc01hcmtlZChtX3ZhbHVlLmdldCgpKSkKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTV2Vha09iamVjdFJlZi5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTV2Vha09iamVjdFJlZi5o
CShyZXZpc2lvbiAyNzIyOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1dl
YWtPYmplY3RSZWYuaAkod29ya2luZyBjb3B5KQpAQCAtNjUsNyArNjUsNyBAQCBwdWJsaWM6CiAg
ICAgfQogCiAgICAgdm9pZCBmaW5hbGl6ZVVuY29uZGl0aW9uYWxseShWTSYpOwotICAgIHN0YXRp
YyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJF
X1ZJU0lUX0NISUxEUkVOOwogCiBwcml2YXRlOgogICAgIEpTV2Vha09iamVjdFJlZihWTSYgdm0s
IFN0cnVjdHVyZSogc3RydWN0dXJlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNXaXRoU2NvcGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTV2l0aFNjb3BlLmNwcAkocmV2aXNpb24gMjcyMjk3KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNXaXRoU2NvcGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSw3
ICs0MSw4IEBAIEpTV2l0aFNjb3BlKiBKU1dpdGhTY29wZTo6Y3JlYXRlKAogICAgIHJldHVybiB3
aXRoU2NvcGU7CiB9CiAKLXZvaWQgSlNXaXRoU2NvcGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBj
ZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2
b2lkIEpTV2l0aFNjb3BlOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3Im
IHZpc2l0b3IpCiB7CiAgICAgSlNXaXRoU2NvcGUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNXaXRo
U2NvcGUqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3Qs
IGluZm8oKSk7CkBAIC00OSw2ICs1MCw4IEBAIHZvaWQgSlNXaXRoU2NvcGU6OnZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKiAKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX29iamVjdCk7CiB9
CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU1dpdGhTY29wZSk7CisKIFN0cnVjdHVyZSogSlNX
aXRoU2NvcGU6OmNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEpTVmFsdWUgcHJvdG8pCiB7CiAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZt
LCBnbG9iYWxPYmplY3QsIHByb3RvLCBUeXBlSW5mbyhXaXRoU2NvcGVUeXBlLCBTdHJ1Y3R1cmVG
bGFncyksIGluZm8oKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1dp
dGhTY29wZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
V2l0aFNjb3BlLmgJKHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTV2l0aFNjb3BlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDcgKzQzLDcgQEAgcHVi
bGljOgogCiAgICAgSlNPYmplY3QqIG9iamVjdCgpIHsgcmV0dXJuIG1fb2JqZWN0LmdldCgpOyB9
CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7
CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNy
ZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBwcm90byk7CiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTV3JhcHBlck9iamVjdC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNXcmFwcGVyT2JqZWN0
LmNwcAkocmV2aXNpb24gMjcyMjk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNXcmFwcGVyT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksMTEgKzI5LDE0IEBAIG5h
bWVzcGFjZSBKU0MgewogCiBTVEFUSUNfQVNTRVJUX0lTX1RSSVZJQUxMWV9ERVNUUlVDVElCTEUo
SlNXcmFwcGVyT2JqZWN0KTsKIAotdm9pZCBKU1dyYXBwZXJPYmplY3Q6OnZpc2l0Q2hpbGRyZW4o
SlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZp
c2l0b3I+Cit2b2lkIEpTV3JhcHBlck9iamVjdDo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBj
ZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8
SlNXcmFwcGVyT2JqZWN0Kj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0
aGlzT2JqZWN0LCBpbmZvKCkpOwogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwg
dmlzaXRvcik7CiB9CiAKK0RFRklORV9FWFBPUlRfVklTSVRfQ0hJTERSRU4oSlNXcmFwcGVyT2Jq
ZWN0KTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU1dyYXBwZXJPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU1dyYXBwZXJPYmplY3QuaAkocmV2aXNpb24gMjcyMjk3KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNXcmFwcGVyT2JqZWN0LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTY0LDcgKzY0LDcgQEAgcHVibGljOgogcHJvdGVjdGVkOgogICAgIGV4cGxpY2l0IEpT
V3JhcHBlck9iamVjdChWTSYsIFN0cnVjdHVyZSopOwogCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUg
c3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERF
Q0xBUkVfRVhQT1JUX1ZJU0lUX0NISUxEUkVOOwogfTsKIAogaW5saW5lIEpTV3JhcHBlck9iamVj
dDo6SlNXcmFwcGVyT2JqZWN0KFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9MYXp5Q2xhc3NTdHJ1Y3R1cmUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0xhenlDbGFzc1N0cnVjdHVy
ZS5jcHAJKHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0xhenlDbGFzc1N0cnVjdHVyZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcyLDEyICs3MiwxNiBA
QCB2b2lkIExhenlDbGFzc1N0cnVjdHVyZTo6SW5pdGlhbGl6ZXI6OnNlCiAgICAgY2xhc3NTdHJ1
Y3R1cmUubV9jb25zdHJ1Y3Rvci5zZXQodm0sIGdsb2JhbCwgY29uc3RydWN0b3IpOwogfQogCi12
b2lkIExhenlDbGFzc1N0cnVjdHVyZTo6dmlzaXQoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1w
bGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBMYXp5Q2xhc3NTdHJ1Y3R1cmU6OnZpc2l0KFZp
c2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgbV9zdHJ1Y3R1cmUudmlzaXQodmlzaXRvcik7CiAgICAg
dmlzaXRvci5hcHBlbmQobV9jb25zdHJ1Y3Rvcik7CiB9CiAKK3RlbXBsYXRlIHZvaWQgTGF6eUNs
YXNzU3RydWN0dXJlOjp2aXNpdChBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lk
IExhenlDbGFzc1N0cnVjdHVyZTo6dmlzaXQoU2xvdFZpc2l0b3ImKTsKKwogdm9pZCBMYXp5Q2xh
c3NTdHJ1Y3R1cmU6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKIHsKICAgICBvdXQucHJp
bnQoIjxzdHJ1Y3R1cmUgPSAiLCBtX3N0cnVjdHVyZSwgIiwgY29uc3RydWN0b3IgPSAiLCBSYXdQ
b2ludGVyKG1fY29uc3RydWN0b3IuZ2V0KCkpLCAiPiIpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvTGF6eUNsYXNzU3RydWN0dXJlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTGF6eUNsYXNzU3RydWN0dXJlLmgJKHJldmlzaW9uIDI3
MjI5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0xhenlDbGFzc1N0cnVjdHVy
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTcsNyArMTE3LDcgQEAgcHVibGljOgogICAgICAgICBy
ZXR1cm4gbV9jb25zdHJ1Y3Rvci5nZXQoKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCB2aXNpdChT
bG90VmlzaXRvciYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgdmlzaXQo
VmlzaXRvciYpOwogICAgIAogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9MYXp5UHJvcGVydHkuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9MYXp5UHJvcGVydHkuaAkocmV2
aXNpb24gMjcyMjk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTGF6eVByb3Bl
cnR5LmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMyw3ICsxMDMsNyBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBzZXRNYXlCZU51bGwoVk0mLCBjb25zdCBPd25lclR5cGUqIG93bmVyLCBFbGVtZW50VHlwZSop
OwogICAgIHZvaWQgc2V0KFZNJiwgY29uc3QgT3duZXJUeXBlKiBvd25lciwgRWxlbWVudFR5cGUq
KTsKICAgICAKLSAgICB2b2lkIHZpc2l0KFNsb3RWaXNpdG9yJik7CisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVmlzaXRvcj4gdm9pZCB2aXNpdChWaXNpdG9yJik7CiAgICAgCiAgICAgdm9pZCBkdW1w
KFByaW50U3RyZWFtJikgY29uc3Q7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9MYXp5UHJvcGVydHlJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvTGF6eVByb3BlcnR5SW5saW5lcy5oCShyZXZpc2lvbiAyNzIyOTcp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9MYXp5UHJvcGVydHlJbmxpbmVzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTY2LDcgKzY2LDggQEAgdm9pZCBMYXp5UHJvcGVydHk8T3duZXJU
eXBlLCBFbGVtZW50VHlwZQogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPd25lclR5cGUsIHR5cGVu
YW1lIEVsZW1lbnRUeXBlPgotdm9pZCBMYXp5UHJvcGVydHk8T3duZXJUeXBlLCBFbGVtZW50VHlw
ZT46OnZpc2l0KFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRv
cj4KK3ZvaWQgTGF6eVByb3BlcnR5PE93bmVyVHlwZSwgRWxlbWVudFR5cGU+Ojp2aXNpdChWaXNp
dG9yJiB2aXNpdG9yKQogewogICAgIGlmIChtX3BvaW50ZXIgJiYgIShtX3BvaW50ZXIgJiBsYXp5
VGFnKSkKICAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZChiaXR3aXNlX2Nhc3Q8RWxl
bWVudFR5cGUqPihtX3BvaW50ZXIpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL01vZHVsZVByb2dyYW1FeGVjdXRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9Nb2R1bGVQcm9ncmFtRXhlY3V0YWJsZS5jcHAJKHJldmlzaW9u
IDI3MjI5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01vZHVsZVByb2dyYW1F
eGVjdXRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzksNyArNzksOCBAQCBhdXRvIE1vZHVs
ZVByb2dyYW1FeGVjdXRhYmxlOjplbnN1cmVUZW1wCiAgICAgcmV0dXJuIGVuc3VyZVRlbXBsYXRl
T2JqZWN0TWFwSW1wbChtX3RlbXBsYXRlT2JqZWN0TWFwKTsKIH0KIAotdm9pZCBNb2R1bGVQcm9n
cmFtRXhlY3V0YWJsZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgTW9kdWxlUHJvZ3JhbUV4
ZWN1dGFibGU6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRv
cikKIHsKICAgICBNb2R1bGVQcm9ncmFtRXhlY3V0YWJsZSogdGhpc09iamVjdCA9IGpzQ2FzdDxN
b2R1bGVQcm9ncmFtRXhlY3V0YWJsZSo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5I
RVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTk0LDQgKzk1LDYgQEAgdm9pZCBNb2R1bGVQ
cm9ncmFtRXhlY3V0YWJsZTo6dmlzaXRDaGlsZAogICAgIH0KIH0KIAorREVGSU5FX1ZJU0lUX0NI
SUxEUkVOKE1vZHVsZVByb2dyYW1FeGVjdXRhYmxlKTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Nb2R1bGVQcm9ncmFtRXhlY3V0YWJs
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01vZHVsZVBy
b2dyYW1FeGVjdXRhYmxlLmgJKHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL01vZHVsZVByb2dyYW1FeGVjdXRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTc3LDcgKzc3LDcgQEAgcHJpdmF0ZToKIAogICAgIE1vZHVsZVByb2dyYW1FeGVjdXRhYmxlKEpT
R2xvYmFsT2JqZWN0KiwgY29uc3QgU291cmNlQ29kZSYpOwogCi0gICAgc3RhdGljIHZvaWQgdmlz
aXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJ
TERSRU47CiAKICAgICBXcml0ZUJhcnJpZXI8VW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2Nr
PiBtX3VubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jazsKICAgICBXcml0ZUJhcnJpZXI8U3lt
Ym9sVGFibGU+IG1fbW9kdWxlRW52aXJvbm1lbnRTeW1ib2xUYWJsZTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaAkocmV2aXNpb24gMjcyMjk3KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaAkod29ya2luZyBj
b3B5KQpAQCAtMzY5LDYgKzM2OSw3IEBAIEpTX0VYUE9SVF9QUklWQVRFIGJvb2wgY2FuVXNlSklU
Q2FnZSgpOwogICAgIHYoQm9vbCwgYWx3YXlzR2VuZXJhdGVQQ1RvQ29kZU9yaWdpbk1hcCwgZmFs
c2UsIE5vcm1hbCwgIlRoaXMgd2lsbCBtYWtlIHN1cmUgd2UgYWx3YXlzIGdlbmVyYXRlIGEgUENU
b0NvZGVPcmlnaW5NYXAgZm9yIEpJVGVkIGNvZGUuIikgXAogICAgIFwKICAgICB2KERvdWJsZSwg
cmFuZG9tSW50ZWdyaXR5QXVkaXRSYXRlLCAwLjA1LCBOb3JtYWwsICJQcm9iYWJpbGl0eSBvZiBy
YW5kb20gaW50ZWdyaXR5IGF1ZGl0cyBbMC4wIC0gMS4wXSIpIFwKKyAgICB2KEJvb2wsIHZlcmlm
eUdDLCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihCb29sLCB2ZXJpZnlIZWFwLCBm
YWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihVbnNpZ25lZCwgbnVtYmVyT2ZHQ0N5Y2xl
c1RvUmVjb3JkRm9yVmVyaWZpY2F0aW9uLCAzLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICBcCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9ncmFtRXhlY3V0YWJsZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvZ3JhbUV4ZWN1
dGFibGUuY3BwCShyZXZpc2lvbiAyNzIyOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9Qcm9ncmFtRXhlY3V0YWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwOCw3ICsyMDgs
OCBAQCBhdXRvIFByb2dyYW1FeGVjdXRhYmxlOjplbnN1cmVUZW1wbGF0ZU9iCiAgICAgcmV0dXJu
IGVuc3VyZVRlbXBsYXRlT2JqZWN0TWFwSW1wbChtX3RlbXBsYXRlT2JqZWN0TWFwKTsKIH0KIAot
dm9pZCBQcm9ncmFtRXhlY3V0YWJsZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgUHJvZ3Jh
bUV4ZWN1dGFibGU6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlz
aXRvcikKIHsKICAgICBQcm9ncmFtRXhlY3V0YWJsZSogdGhpc09iamVjdCA9IGpzQ2FzdDxQcm9n
cmFtRXhlY3V0YWJsZSo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhp
c09iamVjdCwgaW5mbygpKTsKQEAgLTIyMiw0ICsyMjMsNiBAQCB2b2lkIFByb2dyYW1FeGVjdXRh
YmxlOjp2aXNpdENoaWxkcmVuKEpTCiAgICAgfQogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4o
UHJvZ3JhbUV4ZWN1dGFibGUpOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb2dyYW1FeGVjdXRhYmxlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvZ3JhbUV4ZWN1dGFibGUuaAkocmV2aXNp
b24gMjcyMjk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvZ3JhbUV4ZWN1
dGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtODEsNyArODEsNyBAQCBwcml2YXRlOgogCiAgICAg
UHJvZ3JhbUV4ZWN1dGFibGUoSlNHbG9iYWxPYmplY3QqLCBjb25zdCBTb3VyY2VDb2RlJik7CiAK
LSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7Cisg
ICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIFdyaXRlQmFycmllcjxVbmxpbmtlZFBy
b2dyYW1Db2RlQmxvY2s+IG1fdW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrOwogICAgIFdyaXRlQmFy
cmllcjxFeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlPiBtX3Byb2dyYW1Db2RlQmxvY2s7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eU1hcEhhc2hUYWJsZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5TWFwSGFz
aFRhYmxlLmgJKHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1Byb3BlcnR5TWFwSGFzaFRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEzMyw3ICsxMzMs
NyBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNEZXN0cnVjdGlv
biA9IHRydWU7CiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKLSAgICBzdGF0aWMg
dm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9W
SVNJVF9DSElMRFJFTjsKIAogICAgIERFQ0xBUkVfRVhQT1JUX0lORk87CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5VGFibGUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5VGFibGUuY3BwCShyZXZpc2lv
biAyNzIyOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eVRhYmxl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE4LDcgKzExOCw4IEBAIHZvaWQgUHJvcGVydHlUYWJs
ZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHYKICAgICB2bS5oZWFwLnJlcG9ydEV4dHJhTWVtb3J5QWxs
b2NhdGVkKGRhdGFTaXplKCkpOwogfQogCi12b2lkIFByb3BlcnR5VGFibGU6OnZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1l
IFZpc2l0b3I+Cit2b2lkIFByb3BlcnR5VGFibGU6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCog
Y2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0
PFByb3BlcnR5VGFibGUqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRo
aXNPYmplY3QsIGluZm8oKSk7CkBAIC0xMjYsNiArMTI3LDggQEAgdm9pZCBQcm9wZXJ0eVRhYmxl
Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbAogICAgIHZpc2l0b3IucmVwb3J0RXh0cmFNZW1vcnlWaXNp
dGVkKHRoaXNPYmplY3QtPmRhdGFTaXplKCkpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4o
UHJvcGVydHlUYWJsZSk7CisKIHZvaWQgUHJvcGVydHlUYWJsZTo6ZGVzdHJveShKU0NlbGwqIGNl
bGwpCiB7CiAgICAgc3RhdGljX2Nhc3Q8UHJvcGVydHlUYWJsZSo+KGNlbGwpLT5Qcm9wZXJ0eVRh
YmxlOjp+UHJvcGVydHlUYWJsZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvUHJveHlPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1Byb3h5T2JqZWN0LmNwcAkocmV2aXNpb24gMjcyMjk3KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvUHJveHlPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTU4
LDcgKzExNTgsOCBAQCBib29sIFByb3h5T2JqZWN0Ojppc1Jldm9rZWQoKSBjb25zdAogICAgIHJl
dHVybiBoYW5kbGVyKCkuaXNOdWxsKCk7CiB9CiAKLXZvaWQgUHJveHlPYmplY3Q6OnZpc2l0Q2hp
bGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVu
YW1lIFZpc2l0b3I+Cit2b2lkIFByb3h5T2JqZWN0Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwq
IGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgUHJveHlPYmplY3QqIHRoaXNPYmplY3Qg
PSBqc0Nhc3Q8UHJveHlPYmplY3QqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVS
SVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC0xMTY4LDQgKzExNjksNiBAQCB2b2lkIFByb3h5
T2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogCiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09i
amVjdC0+bV9oYW5kbGVyKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKFByb3h5T2JqZWN0
KTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9Qcm94eU9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1Byb3h5T2JqZWN0LmgJKHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1Byb3h5T2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTkxLDcgKzkx
LDcgQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2Jq
ZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIERvbnRFbnVtUHJvcGVy
dGllc01vZGUpOwogICAgIHN0YXRpYyBib29sIHNldFByb3RvdHlwZShKU09iamVjdCosIEpTR2xv
YmFsT2JqZWN0KiwgSlNWYWx1ZSBwcm90b3R5cGUsIGJvb2wgc2hvdWxkVGhyb3dJZkNhbnRTZXQp
OwogICAgIHN0YXRpYyBKU1ZhbHVlIGdldFByb3RvdHlwZShKU09iamVjdCosIEpTR2xvYmFsT2Jq
ZWN0Kik7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRv
ciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBib29sIGdldE93blByb3Bl
cnR5U2xvdENvbW1vbihKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90
Jik7CiAgICAgYm9vbCBwZXJmb3JtSW50ZXJuYWxNZXRob2RHZXRPd25Qcm9wZXJ0eShKU0dsb2Jh
bE9iamVjdCosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9Qcm94eVJldm9rZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJveHlSZXZva2UuY3BwCShyZXZpc2lvbiAyNzIyOTcp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm94eVJldm9rZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTY5LDcgKzY5LDggQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKHBlcmZv
cm1Qcm94eVJldgogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9
CiAKLXZvaWQgUHJveHlSZXZva2U6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90Vmlz
aXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFByb3h5UmV2
b2tlOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7
CiAgICAgUHJveHlSZXZva2UqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8UHJveHlSZXZva2UqPihjZWxs
KTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBA
IC03OCw0ICs3OSw2IEBAIHZvaWQgUHJveHlSZXZva2U6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiAK
ICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX3Byb3h5KTsKIH0KIAorREVGSU5FX1ZJ
U0lUX0NISUxEUkVOKFByb3h5UmV2b2tlKTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm94eVJldm9rZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3h5UmV2b2tlLmgJKHJldmlzaW9uIDI3
MjI5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3h5UmV2b2tlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTUyLDcgKzUyLDcgQEAgcHVibGljOgogICAgIH0KIAogICAgIHZvaWQg
ZmluaXNoQ3JlYXRpb24oVk0mLCBQcm94eU9iamVjdCopOwotICAgIHN0YXRpYyB2b2lkIHZpc2l0
Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxE
UkVOOwogICAgIEpTVmFsdWUgcHJveHkoKSB7IHJldHVybiBtX3Byb3h5LmdldCgpOyB9CiAgICAg
dm9pZCBzZXRQcm94eVRvTnVsbChWTSYgdm0pIHsgcmV0dXJuIG1fcHJveHkuc2V0KHZtLCB0aGlz
LCBqc051bGwoKSk7IH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVn
RXhwQ2FjaGVkUmVzdWx0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9SZWdFeHBDYWNoZWRSZXN1bHQuY3BwCShyZXZpc2lvbiAyNzIyOTcpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBDYWNoZWRSZXN1bHQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zMSw3ICszMSw4IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi12b2lkIFJlZ0V4
cENhY2hlZFJlc3VsdDo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1w
bGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBSZWdFeHBDYWNoZWRSZXN1bHQ6OnZpc2l0QWdn
cmVnYXRlKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgdmlzaXRvci5hcHBlbmQobV9sYXN0SW5w
dXQpOwogICAgIHZpc2l0b3IuYXBwZW5kKG1fbGFzdFJlZ0V4cCk7CkBAIC00Myw2ICs0NCw5IEBA
IHZvaWQgUmVnRXhwQ2FjaGVkUmVzdWx0Ojp2aXNpdEFnZ3JlZ2F0ZSgKICAgICB9CiB9CiAKK3Rl
bXBsYXRlIHZvaWQgUmVnRXhwQ2FjaGVkUmVzdWx0Ojp2aXNpdEFnZ3JlZ2F0ZShBYnN0cmFjdFNs
b3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIFJlZ0V4cENhY2hlZFJlc3VsdDo6dmlzaXRBZ2dy
ZWdhdGUoU2xvdFZpc2l0b3ImKTsKKwogSlNBcnJheSogUmVnRXhwQ2FjaGVkUmVzdWx0OjpsYXN0
UmVzdWx0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTT2JqZWN0KiBvd25lcikKIHsK
ICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9SZWdFeHBDYWNoZWRSZXN1bHQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBDYWNoZWRSZXN1bHQuaAkocmV2aXNpb24gMjcy
Mjk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwQ2FjaGVkUmVzdWx0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTY1LDcgKzY1LDcgQEAgcHVibGljOgogICAgICAgICByZXR1
cm4gbV9yZWlmaWVkID8gbV9yZWlmaWVkSW5wdXQuZ2V0KCkgOiBtX2xhc3RJbnB1dC5nZXQoKTsK
ICAgICB9CiAKLSAgICB2b2lkIHZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJik7CisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCB2aXNpdEFnZ3JlZ2F0ZShWaXNpdG9yJik7CiAK
ICAgICAvLyBtX2xhc3RSZWdFeHAgd291bGQgYmUgbnVsbHB0ciB3aGVuIFJlZ0V4cENhY2hlZFJl
c3VsdCBpcyBub3QgcmVpZmllZC4KICAgICAvLyBJZiB3ZSBmaW5kIG1fbGFzdFJlZ0V4cCBpcyBu
dWxscHRyLCBpdCBtZWFucyB0aGlzIHNob3VsZCBob2xkIHRoZSBlbXB0eSBSZWdFeHAuCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBHbG9iYWxEYXRhLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBHbG9iYWxEYXRh
LmNwcAkocmV2aXNpb24gMjcyMjk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
UmVnRXhwR2xvYmFsRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDExICszMCwxNSBAQAog
CiBuYW1lc3BhY2UgSlNDIHsKIAotdm9pZCBSZWdFeHBHbG9iYWxEYXRhOjp2aXNpdEFnZ3JlZ2F0
ZShTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lk
IFJlZ0V4cEdsb2JhbERhdGE6OnZpc2l0QWdncmVnYXRlKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAg
ICAgbV9jYWNoZWRSZXN1bHQudmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7CiB9CiAKK3RlbXBsYXRl
IHZvaWQgUmVnRXhwR2xvYmFsRGF0YTo6dmlzaXRBZ2dyZWdhdGUoQWJzdHJhY3RTbG90VmlzaXRv
ciYpOwordGVtcGxhdGUgdm9pZCBSZWdFeHBHbG9iYWxEYXRhOjp2aXNpdEFnZ3JlZ2F0ZShTbG90
VmlzaXRvciYpOworCiBKU1ZhbHVlIFJlZ0V4cEdsb2JhbERhdGE6OmdldEJhY2tyZWYoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgdW5zaWduZWQgaSkKIHsKICAgICBWTSYgdm0gPSBnbG9i
YWxPYmplY3QtPnZtKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdF
eHBHbG9iYWxEYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvUmVnRXhwR2xvYmFsRGF0YS5oCShyZXZpc2lvbiAyNzIyOTcpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9SZWdFeHBHbG9iYWxEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTQx
LDcgKzQxLDcgQEAgcHVibGljOgogICAgIHZvaWQgc2V0SW5wdXQoSlNHbG9iYWxPYmplY3QqLCBK
U1N0cmluZyopOwogICAgIEpTU3RyaW5nKiBpbnB1dCgpIHsgcmV0dXJuIG1fY2FjaGVkUmVzdWx0
LmlucHV0KCk7IH0KIAotICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImKTsKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIHZpc2l0QWdncmVnYXRlKFZpc2l0b3Im
KTsKIAogICAgIEpTVmFsdWUgZ2V0QmFja3JlZihKU0dsb2JhbE9iamVjdCosIHVuc2lnbmVkKTsK
ICAgICBKU1ZhbHVlIGdldExhc3RQYXJlbihKU0dsb2JhbE9iamVjdCopOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBPYmplY3QuY3BwCShyZXZpc2lvbiAy
NzIyOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBPYmplY3QuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00Niw3ICs0Niw4IEBAIHZvaWQgUmVnRXhwT2JqZWN0OjpmaW5p
c2hDcmVhdGlvbihWTSYgdm0KICAgICBBU1NFUlQodHlwZSgpID09IFJlZ0V4cE9iamVjdFR5cGUp
OwogfQogCi12b2lkIFJlZ0V4cE9iamVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgUmVn
RXhwT2JqZWN0Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0
b3IpCiB7CiAgICAgUmVnRXhwT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PFJlZ0V4cE9iamVj
dCo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5m
bygpKTsKQEAgLTU1LDYgKzU2LDggQEAgdm9pZCBSZWdFeHBPYmplY3Q6OnZpc2l0Q2hpbGRyZW4o
SlNDZWxsKgogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fbGFzdEluZGV4KTsKIH0K
IAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKFJlZ0V4cE9iamVjdCk7CisKIGJvb2wgUmVnRXhwT2Jq
ZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqIG9iamVjdCwgSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBz
bG90KQogewogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE9iamVjdC5oCShyZXZpc2lvbiAyNzIyOTcp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBPYmplY3QuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTMzLDcgKzEzMyw3IEBAIHByaXZhdGU6CiAgICAgSlNfRVhQT1JUX1BSSVZB
VEUgUmVnRXhwT2JqZWN0KFZNJiwgU3RydWN0dXJlKiwgUmVnRXhwKik7CiAgICAgSlNfRVhQT1JU
X1BSSVZBVEUgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOwogCi0gICAgc3RhdGljIHZvaWQgdmlz
aXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJ
TERSRU47CiAKICAgICBib29sIGxhc3RJbmRleElzV3JpdGFibGUoKSBjb25zdAogICAgIHsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NhbXBsaW5nUHJvZmlsZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NhbXBsaW5nUHJvZmls
ZXIuY3BwCShyZXZpc2lvbiAyNzIyOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TYW1wbGluZ1Byb2ZpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjUyLDcgKzY1Miw3IEBA
IHZvaWQgU2FtcGxpbmdQcm9maWxlcjo6cHJvY2Vzc1VudmVyaWZpZWQKICAgICBtX3VucHJvY2Vz
c2VkU3RhY2tUcmFjZXMuY2xlYXIoKTsKIH0KIAotdm9pZCBTYW1wbGluZ1Byb2ZpbGVyOjp2aXNp
dChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IpCit2b2lkIFNhbXBsaW5nUHJvZmlsZXI6OnZpc2l0
KEFic3RyYWN0U2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yKQogewogICAgIFJFTEVBU0VfQVNTRVJU
KG1fbG9jay5pc0xvY2tlZCgpKTsKICAgICBmb3IgKEpTQ2VsbCogY2VsbCA6IG1fbGl2ZUNlbGxQ
b2ludGVycykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NhbXBsaW5nUHJv
ZmlsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TYW1w
bGluZ1Byb2ZpbGVyLmgJKHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1NhbXBsaW5nUHJvZmlsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTcxLDcgKzE3
MSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIG5vdGljZUpTTG9ja0FjcXVpc2l0aW9uKCk7CiAgICAg
dm9pZCBub3RpY2VWTUVudHJ5KCk7CiAgICAgdm9pZCBzaHV0ZG93bigpOwotICAgIHZvaWQgdmlz
aXQoU2xvdFZpc2l0b3ImKTsKKyAgICB2b2lkIHZpc2l0KEFic3RyYWN0U2xvdFZpc2l0b3ImKTsK
ICAgICBMb2NrJiBnZXRMb2NrKCkgeyByZXR1cm4gbV9sb2NrOyB9CiAgICAgdm9pZCBzZXRUaW1p
bmdJbnRlcnZhbChTZWNvbmRzIGludGVydmFsKSB7IG1fdGltaW5nSW50ZXJ2YWwgPSBpbnRlcnZh
bDsgfQogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgc3RhcnQoKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlZEFyZ3VtZW50cy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVkQXJndW1lbnRzLmNwcAkocmV2aXNp
b24gMjcyMjk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVkQXJndW1l
bnRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTgsNyArOTgsOCBAQCBTY29wZWRBcmd1bWVudHMq
IFNjb3BlZEFyZ3VtZW50czo6Y3JlYXRlCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotdm9pZCBT
Y29wZWRBcmd1bWVudHM6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYg
dmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFNjb3BlZEFyZ3VtZW50
czo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewog
ICAgIFNjb3BlZEFyZ3VtZW50cyogdGhpc09iamVjdCA9IHN0YXRpY19jYXN0PFNjb3BlZEFyZ3Vt
ZW50cyo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwg
aW5mbygpKTsKQEAgLTExNSw2ICsxMTYsOCBAQCB2b2lkIFNjb3BlZEFyZ3VtZW50czo6dmlzaXRD
aGlsZHJlbihKU0NlCiAgICAgfQogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oU2NvcGVkQXJn
dW1lbnRzKTsKKwogU3RydWN0dXJlKiBTY29wZWRBcmd1bWVudHM6OmNyZWF0ZVN0cnVjdHVyZShW
TSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQog
ewogICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5
cGUsIFR5cGVJbmZvKFNjb3BlZEFyZ3VtZW50c1R5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygp
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlZEFyZ3VtZW50cy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlZEFyZ3Vt
ZW50cy5oCShyZXZpc2lvbiAyNzIyOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TY29wZWRBcmd1bWVudHMuaAkod29ya2luZyBjb3B5KQpAQCAtNjMsOSArNjMsOSBAQCBwdWJs
aWM6CiAgICAgCiAgICAgLy8gQ3JlYXRlcyBhbiBhcmd1bWVudHMgb2JqZWN0IGJ5IGNvcHlpbmcg
dGhlIGFyZ3VtZW50cyBmcm9tIGEgd2VsbC1kZWZpbmVkIHN0YWNrIGxvY2F0aW9uLgogICAgIHN0
YXRpYyBTY29wZWRBcmd1bWVudHMqIGNyZWF0ZUJ5Q29weWluZ0Zyb20oVk0mLCBTdHJ1Y3R1cmUq
LCBSZWdpc3RlciogYXJndW1lbnRzU3RhcnQsIHVuc2lnbmVkIHRvdGFsTGVuZ3RoLCBKU0Z1bmN0
aW9uKiBjYWxsZWUsIFNjb3BlZEFyZ3VtZW50c1RhYmxlKiwgSlNMZXhpY2FsRW52aXJvbm1lbnQq
KTsKLSAgICAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNp
dG9yJik7Ci0gICAgCisKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOworCiAgICAgdWludDMy
X3QgaW50ZXJuYWxMZW5ndGgoKSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJuIG1fdG90YWxM
ZW5ndGg7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TaW1wbGVUeXBlZEFy
cmF5Q29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiAyNzIyOTcpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TaW1wbGVUeXBlZEFycmF5Q29udHJvbGxl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYyLDcgKzYyLDcgQEAgYm9vbCBTaW1wbGVUeXBlZEFy
cmF5Q29udHJvbGxlcjo6aXNBdG9taQogICAgIHJldHVybiBtX2FsbG93QXRvbWljc1dhaXQ7CiB9
CiAKLWJvb2wgU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXI6OkpTQXJyYXlCdWZmZXJPd25lcjo6
aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5k
bGUsIHZvaWQqLCBKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29u
KQorYm9vbCBTaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlcjo6SlNBcnJheUJ1ZmZlck93bmVyOjpp
c1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRs
ZSwgdm9pZCosIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioq
IHJlYXNvbikKIHsKICAgICBpZiAoVU5MSUtFTFkocmVhc29uKSkKICAgICAgICAgKnJlYXNvbiA9
ICJKU0FycmF5QnVmZmVyIGlzIG9wYXF1ZSByb290IjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1NpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXIu
aAkocmV2aXNpb24gMjcyMjk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2lt
cGxlVHlwZWRBcnJheUNvbnRyb2xsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNTgsNyArNTgsNyBA
QCBwdWJsaWM6CiBwcml2YXRlOgogICAgIGNsYXNzIEpTQXJyYXlCdWZmZXJPd25lciBmaW5hbCA6
IHB1YmxpYyBXZWFrSGFuZGxlT3duZXIgewogICAgIHB1YmxpYzoKLSAgICAgICAgYm9vbCBpc1Jl
YWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBj
b250ZXh0LCBTbG90VmlzaXRvciYsIGNvbnN0IGNoYXIqKiByZWFzb24pIGZpbmFsOworICAgICAg
ICBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93
bj4sIHZvaWQqIGNvbnRleHQsIEFic3RyYWN0U2xvdFZpc2l0b3ImLCBjb25zdCBjaGFyKiogcmVh
c29uKSBmaW5hbDsKICAgICAgICAgdm9pZCBmaW5hbGl6ZShKU0M6OkhhbmRsZTxKU0M6OlVua25v
d24+LCB2b2lkKiBjb250ZXh0KSBmaW5hbDsKICAgICB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TbWFsbFN0cmluZ3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1NtYWxsU3RyaW5ncy5jcHAJKHJldmlzaW9uIDI3MjI5NykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NtYWxsU3RyaW5ncy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTY2LDcgKzY2LDcgQEAgdm9pZCBTbWFsbFN0cmluZ3M6OmluaXRpYWxpemVD
b21tb25TdHJpbgogICAgIHNldElzSW5pdGlhbGl6ZWQodHJ1ZSk7CiB9CiAKLXZvaWQgU21hbGxT
dHJpbmdzOjp2aXNpdFN0cm9uZ1JlZmVyZW5jZXMoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2b2lk
IFNtYWxsU3RyaW5nczo6dmlzaXRTdHJvbmdSZWZlcmVuY2VzKEFic3RyYWN0U2xvdFZpc2l0b3Im
IHZpc2l0b3IpCiB7CiAgICAgbV9uZWVkc1RvQmVWaXNpdGVkID0gZmFsc2U7CiAgICAgdmlzaXRv
ci5hcHBlbmRVbmJhcnJpZXJlZChtX2VtcHR5U3RyaW5nKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1NtYWxsU3RyaW5ncy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1NtYWxsU3RyaW5ncy5oCShyZXZpc2lvbiAyNzIyOTcpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TbWFsbFN0cmluZ3MuaAkod29ya2luZyBjb3B5
KQpAQCAtNDksOSArNDksOSBAQCBjbGFzcyBTdHJpbmdJbXBsOwogCiBuYW1lc3BhY2UgSlNDIHsK
IAorY2xhc3MgQWJzdHJhY3RTbG90VmlzaXRvcjsKIGNsYXNzIFZNOwogY2xhc3MgSlNTdHJpbmc7
Ci1jbGFzcyBTbG90VmlzaXRvcjsKIAogc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBtYXhTaW5n
bGVDaGFyYWN0ZXJTdHJpbmcgPSAweEZGOwogCkBAIC03OCw3ICs3OCw3IEBAIHB1YmxpYzoKICAg
ICBKU1N0cmluZyoqIHNpbmdsZUNoYXJhY3RlclN0cmluZ3MoKSB7IHJldHVybiAmbV9zaW5nbGVD
aGFyYWN0ZXJTdHJpbmdzWzBdOyB9CiAKICAgICB2b2lkIGluaXRpYWxpemVDb21tb25TdHJpbmdz
KFZNJik7Ci0gICAgdm9pZCB2aXNpdFN0cm9uZ1JlZmVyZW5jZXMoU2xvdFZpc2l0b3ImKTsKKyAg
ICB2b2lkIHZpc2l0U3Ryb25nUmVmZXJlbmNlcyhBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAKICNk
ZWZpbmUgSlNDX0NPTU1PTl9TVFJJTkdTX0FDQ0VTU09SX0RFRklOSVRJT04obmFtZSkgXAogICAg
IEpTU3RyaW5nKiBuYW1lIyNTdHJpbmcoKSBjb25zdCAgICAgICAgICAgICAgICAgICBcCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TcGFyc2VBcnJheVZhbHVlTWFwLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TcGFyc2VBcnJheVZh
bHVlTWFwLmNwcAkocmV2aXNpb24gMjcyMjk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU3BhcnNlQXJyYXlWYWx1ZU1hcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxMCw3ICsy
MTAsOCBAQCBKU1ZhbHVlIFNwYXJzZUFycmF5RW50cnk6OmdldE5vblNwYXJzZU1vCiAgICAgcmV0
dXJuIEJhc2U6OmdldCgpOwogfQogCi12b2lkIFNwYXJzZUFycmF5VmFsdWVNYXA6OnZpc2l0Q2hp
bGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVu
YW1lIFZpc2l0b3I+Cit2b2lkIFNwYXJzZUFycmF5VmFsdWVNYXA6OnZpc2l0Q2hpbGRyZW5JbXBs
KEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBTcGFyc2VBcnJheVZhbHVl
TWFwKiB0aGlzT2JqZWN0ID0ganNDYXN0PFNwYXJzZUFycmF5VmFsdWVNYXAqPihjZWxsKTsKICAg
ICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC0yMjMs
NSArMjI0LDcgQEAgdm9pZCBTcGFyc2VBcnJheVZhbHVlTWFwOjp2aXNpdENoaWxkcmVuKAogICAg
IHZpc2l0b3IucmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKHRoaXNPYmplY3QtPm1fcmVwb3J0ZWRD
YXBhY2l0eSAqIHNpemVvZihNYXA6OktleVZhbHVlUGFpclR5cGUpKTsKIH0KIAorREVGSU5FX1ZJ
U0lUX0NISUxEUkVOKFNwYXJzZUFycmF5VmFsdWVNYXApOworCiB9IC8vIG5hbWVzcGFjZSBKU0MK
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3BhcnNlQXJyYXlWYWx1ZU1h
cC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NwYXJzZUFy
cmF5VmFsdWVNYXAuaAkocmV2aXNpb24gMjcyMjk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU3BhcnNlQXJyYXlWYWx1ZU1hcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTUsNyAr
MTE1LDcgQEAgcHVibGljOgogICAgIAogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVj
dHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBwcm90b3R5cGUpOwogCi0gICAgc3Rh
dGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xB
UkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBib29sIHNwYXJzZU1vZGUoKQogICAgIHsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0YWNrRnJhbWUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0YWNrRnJhbWUuY3BwCShyZXZpc2lv
biAyNzIyOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdGFja0ZyYW1lLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTQxLDcgKzE0MSw4IEBAIFN0cmluZyBTdGFja0ZyYW1lOjp0
b1N0cmluZyhWTSYgdm0pIGNvbnMKICAgICByZXR1cm4gdHJhY2VCdWlsZC50b1N0cmluZygpLmlt
cGwoKTsKIH0KIAotdm9pZCBTdGFja0ZyYW1lOjp2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgU3RhY2tGcmFtZTo6dmlz
aXRDaGlsZHJlbkltcGwoVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBpZiAobV9jYWxsZWUpCiAg
ICAgICAgIHZpc2l0b3IuYXBwZW5kKG1fY2FsbGVlKTsKQEAgLTE0OSw1ICsxNTAsNyBAQCB2b2lk
IFN0YWNrRnJhbWU6OnZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0CiAgICAgICAgIHZpc2l0b3IuYXBw
ZW5kKG1fY29kZUJsb2NrKTsKIH0KIAorREVGSU5FX0lOU1RBTkNFX1ZJU0lUX0NISUxEUkVOKFN0
YWNrRnJhbWUpOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU3RhY2tGcmFtZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1N0YWNrRnJhbWUuaAkocmV2aXNpb24gMjcyMjk3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RhY2tGcmFtZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
Nyw2ICsyNyw3IEBACiAKICNpbmNsdWRlICJIZWFwLmgiCiAjaW5jbHVkZSAiVk0uaCIKKyNpbmNs
dWRlICJTbG90VmlzaXRvck1hY3Jvcy5oIgogI2luY2x1ZGUgIldhc21JbmRleE9yTmFtZS5oIgog
I2luY2x1ZGUgIldyaXRlQmFycmllci5oIgogI2luY2x1ZGUgPGxpbWl0cy5oPgpAQCAtMzUsNyAr
MzYsNiBAQCBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgQ29kZUJsb2NrOwogY2xhc3MgSlNPYmpl
Y3Q7Ci1jbGFzcyBTbG90VmlzaXRvcjsKIAogY2xhc3MgU3RhY2tGcmFtZSB7CiBwdWJsaWM6CkBA
IC01OCw3ICs1OCw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fYnl0ZWNvZGVJbmRleDsK
ICAgICB9CiAgICAgCi0gICAgdm9pZCB2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CisgICAg
REVDTEFSRV9JTlNUQU5DRV9WSVNJVF9DSElMRFJFTjsKICAgICBib29sIGlzTWFya2VkKFZNJiB2
bSkgY29uc3QgeyByZXR1cm4gKCFtX2NhbGxlZSB8fCB2bS5oZWFwLmlzTWFya2VkKG1fY2FsbGVl
LmdldCgpKSkgJiYgKCFtX2NvZGVCbG9jayB8fCB2bS5oZWFwLmlzTWFya2VkKG1fY29kZUJsb2Nr
LmdldCgpKSk7IH0KIAogcHJpdmF0ZToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1N0cnVjdHVyZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU3RydWN0dXJlLmNwcAkocmV2aXNpb24gMjcyMjk3KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI2Nyw3ICsx
MjY3LDggQEAgdm9pZCBTdHJ1Y3R1cmU6OmRpZFRyYW5zaXRpb25Gcm9tVGhpc1N0cgogICAgICAg
ICBtX3RyYW5zaXRpb25XYXRjaHBvaW50U2V0LmZpcmVBbGwodm0oKSwgU3RydWN0dXJlRmlyZURl
dGFpbCh0aGlzKSk7CiB9CiAKLXZvaWQgU3RydWN0dXJlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCog
Y2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgor
dm9pZCBTdHJ1Y3R1cmU6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYg
dmlzaXRvcikKIHsKICAgICBTdHJ1Y3R1cmUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8U3RydWN0dXJl
Kj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZv
KCkpOwpAQCAtMTI4OSwzMiArMTI5MCw0NiBAQCB2b2lkIFN0cnVjdHVyZTo6dmlzaXRDaGlsZHJl
bihKU0NlbGwqIGNlCiAgICAgICAgIC8vIE5PVEU6IFRoaXMgY2FuIGludGVybGVhdmUgaW4gcGlu
KCksIGluIHdoaWNoIGNhc2UgaXQgbWF5IHNlZSBhIG51bGwgcHJvcGVydHkgdGFibGUuCiAgICAg
ICAgIC8vIFRoYXQncyBmaW5lLCBiZWNhdXNlIHRoZW4gdGhlIGJhcnJpZXIgd2lsbCBmaXJlIGFu
ZCB3ZSB3aWxsIHNjYW4gdGhpcyBhZ2Fpbi4KICAgICAgICAgdmlzaXRvci5hcHBlbmQodGhpc09i
amVjdC0+bV9wcm9wZXJ0eVRhYmxlVW5zYWZlKTsKLSAgICB9IGVsc2UgaWYgKHZpc2l0b3IuaXNB
bmFseXppbmdIZWFwKCkpCisgICAgfSBlbHNlIGlmICh2aXNpdG9yLnZtKCkuaXNBbmFseXppbmdI
ZWFwKCkpCiAgICAgICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fcHJvcGVydHlUYWJs
ZVVuc2FmZSk7CiAgICAgZWxzZSBpZiAodGhpc09iamVjdC0+bV9wcm9wZXJ0eVRhYmxlVW5zYWZl
KQogICAgICAgICB0aGlzT2JqZWN0LT5tX3Byb3BlcnR5VGFibGVVbnNhZmUuY2xlYXIoKTsKIH0K
IAotYm9vbCBTdHJ1Y3R1cmU6OmlzQ2hlYXBEdXJpbmdHQyhWTSYgdm0pCitERUZJTkVfVklTSVRf
Q0hJTERSRU4oU3RydWN0dXJlKTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK2Jvb2wg
U3RydWN0dXJlOjppc0NoZWFwRHVyaW5nR0MoVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICAvLyBG
SVhNRTogV2UgY291bGQgbWFrZSB0aGlzIGV2ZW4gc2FmZXIgYnkgcmV0dXJuaW5nIGZhbHNlIGlm
IHRoaXMgc3RydWN0dXJlJ3MgcHJvcGVydHkgdGFibGUKICAgICAvLyBoYXMgYW55IGxhcmdlIHBy
b3BlcnR5IG5hbWVzLgogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNTczMzQKICAgICAKLSAgICByZXR1cm4gKCFtX2dsb2JhbE9iamVjdCB8fCB2bS5oZWFw
LmlzTWFya2VkKG1fZ2xvYmFsT2JqZWN0LmdldCgpKSkKLSAgICAgICAgJiYgKGhhc1BvbHlQcm90
bygpIHx8ICFzdG9yZWRQcm90b3R5cGVPYmplY3QoKSB8fCB2bS5oZWFwLmlzTWFya2VkKHN0b3Jl
ZFByb3RvdHlwZU9iamVjdCgpKSk7CisgICAgcmV0dXJuICghbV9nbG9iYWxPYmplY3QgfHwgdmlz
aXRvci5pc01hcmtlZChtX2dsb2JhbE9iamVjdC5nZXQoKSkpCisgICAgICAgICYmIChoYXNQb2x5
UHJvdG8oKSB8fCAhc3RvcmVkUHJvdG90eXBlT2JqZWN0KCkgfHwgdmlzaXRvci5pc01hcmtlZChz
dG9yZWRQcm90b3R5cGVPYmplY3QoKSkpOwogfQogCi1ib29sIFN0cnVjdHVyZTo6bWFya0lmQ2hl
YXAoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCi17Ci0gICAgVk0mIHZtID0gdmlzaXRvci52bSgpOwot
ICAgIGlmICghaXNDaGVhcER1cmluZ0dDKHZtKSkKLSAgICAgICAgcmV0dXJuIHZtLmhlYXAuaXNN
YXJrZWQodGhpcyk7Ci0gICAgCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgorYm9vbCBTdHJ1
Y3R1cmU6Om1hcmtJZkNoZWFwMShWaXNpdG9yJiB2aXNpdG9yKQorLy9ib29sIFN0cnVjdHVyZTo6
bWFya0lmQ2hlYXAxKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisvLyAgICBWTSYg
dm0gPSB2aXNpdG9yLnZtKCk7CisgICAgaWYgKCFpc0NoZWFwRHVyaW5nR0ModmlzaXRvcikpCisv
LyAgICAgICAgcmV0dXJuIHZtLmhlYXAuaXNNYXJrZWQodGhpcyk7IC8vIG1sYW0gRklYTUUKKyAg
ICAgICAgcmV0dXJuIHZpc2l0b3IuaXNNYXJrZWQodGhpcyk7IC8vIG1sYW0gRklYTUUKKwogICAg
IHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQodGhpcyk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
Ky8vdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KKy8vYm9vbCBTdHJ1Y3R1cmU6Om1hcmtJZkNo
ZWFwKFZpc2l0b3ImIHZpc2l0b3IpCisvL3sKKy8vICAgIHJldHVybiBtYXJrSWZDaGVhcDEodmlz
aXRvcik7IC8vIG1sYW0gRklYTUUgSEFDSyB0byBnZXQgdGhpcyBjb21waWxpbmchISEKKy8vfQor
dGVtcGxhdGUgYm9vbCBTdHJ1Y3R1cmU6Om1hcmtJZkNoZWFwMShTbG90VmlzaXRvciYpOwordGVt
cGxhdGUgYm9vbCBTdHJ1Y3R1cmU6Om1hcmtJZkNoZWFwMShBYnN0cmFjdFNsb3RWaXNpdG9yJik7
CisKIFJlZjxTdHJ1Y3R1cmVTaGFwZT4gU3RydWN0dXJlOjp0b1N0cnVjdHVyZVNoYXBlKEpTVmFs
dWUgdmFsdWUsIGJvb2wmIHNhd1BvbHlQcm90b1N0cnVjdHVyZSkKIHsKICAgICBSZWY8U3RydWN0
dXJlU2hhcGU+IGJhc2VTaGFwZSA9IFN0cnVjdHVyZVNoYXBlOjpjcmVhdGUoKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCShyZXZpc2lvbiAyNzIyOTcp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAkod29ya2luZyBj
b3B5KQpAQCAtNjAsNyArNjAsNiBAQCBjbGFzcyBQcm9wZXJ0eU5hbWVBcnJheURhdGE7CiBjbGFz
cyBQcm9wZXJ0eVRhYmxlOwogY2xhc3MgU3RydWN0dXJlQ2hhaW47CiBjbGFzcyBTdHJ1Y3R1cmVT
aGFwZTsKLWNsYXNzIFNsb3RWaXNpdG9yOwogY2xhc3MgSlNTdHJpbmc7CiBzdHJ1Y3QgRHVtcENv
bnRleHQ7CiBzdHJ1Y3QgSGFzaFRhYmxlOwpAQCAtMzA3LDcgKzMwNiw3IEBAIHB1YmxpYzoKICAg
ICBKU1ZhbHVlIHByb3RvdHlwZUZvckxvb2t1cChKU0dsb2JhbE9iamVjdCosIEpTQ2VsbCogYmFz
ZSkgY29uc3Q7CiAgICAgU3RydWN0dXJlQ2hhaW4qIHByb3RvdHlwZUNoYWluKFZNJiwgSlNHbG9i
YWxPYmplY3QqLCBKU09iamVjdCogYmFzZSkgY29uc3Q7CiAgICAgU3RydWN0dXJlQ2hhaW4qIHBy
b3RvdHlwZUNoYWluKEpTR2xvYmFsT2JqZWN0KiwgSlNPYmplY3QqIGJhc2UpIGNvbnN0OwotICAg
IHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBE
RUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogICAgIAogICAgIC8vIEEgU3RydWN0dXJlIGlzIGNoZWFw
IHRvIG1hcmsgZHVyaW5nIEdDIGlmIGRvaW5nIHNvIHdvdWxkIG9ubHkgYWRkIGEgc21hbGwgYW5k
IGJvdW5kZWQgYW1vdW50CiAgICAgLy8gdG8gb3VyIGhlYXAgZm9vdHByaW50LiBGb3IgZXhhbXBs
ZSwgaWYgdGhlIHN0cnVjdHVyZSByZWZlcnMgdG8gYSBnbG9iYWwgb2JqZWN0IHRoYXQgaXMgbm90
CkBAIC0zMTUsMTAgKzMxNCwxMiBAQCBwdWJsaWM6CiAgICAgLy8gaW5jcmVhc2UgaW4gZm9vdHBy
aW50IGJlY2F1c2Ugbm8gb3RoZXIgb2JqZWN0IHJlZmVycyB0byB0aGF0IGdsb2JhbCBvYmplY3Qu
IFRoaXMgbWV0aG9kCiAgICAgLy8gcmV0dXJucyB0cnVlIGlmIGFsbCB1c2VyLWNvbnRyb2xsZWQg
KGFuZCBoZW5jZSB1bmJvdW5kZWQgaW4gc2l6ZSkgb2JqZWN0cyByZWZlcmVuY2VkIGZyb20gdGhl
CiAgICAgLy8gU3RydWN0dXJlIGFyZSBhbHJlYWR5IG1hcmtlZC4KLSAgICBib29sIGlzQ2hlYXBE
dXJpbmdHQyhWTSYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IGJvb2wgaXNDaGVh
cER1cmluZ0dDKFZpc2l0b3ImKTsKICAgICAKICAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhpcyBz
dHJ1Y3R1cmUgaXMgbm93IG1hcmtlZC4KLSAgICBib29sIG1hcmtJZkNoZWFwKFNsb3RWaXNpdG9y
Jik7CisvLyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiBib29sIG1hcmtJZkNoZWFwKFZp
c2l0b3ImKTsKKy8vICAgIGJvb2wgbWFya0lmQ2hlYXAxKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsK
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiBib29sIG1hcmtJZkNoZWFwMShWaXNpdG9y
Jik7IC8vIG1sYW0gVEVTVAogICAgIAogICAgIGJvb2wgaGFzUmFyZURhdGEoKSBjb25zdAogICAg
IHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUNoYWluLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVD
aGFpbi5jcHAJKHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1N0cnVjdHVyZUNoYWluLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjYsNyArNjYsOCBAQCB2
b2lkIFN0cnVjdHVyZUNoYWluOjpmaW5pc2hDcmVhdGlvbihWTSYgCiAgICAgfQogfQogCi12b2lk
IFN0cnVjdHVyZUNoYWluOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3Im
IHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBTdHJ1Y3R1cmVDaGFp
bjo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewog
ICAgIFN0cnVjdHVyZUNoYWluKiB0aGlzT2JqZWN0ID0ganNDYXN0PFN0cnVjdHVyZUNoYWluKj4o
Y2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkp
OwpAQCAtODAsNCArODEsNiBAQCB2b2lkIFN0cnVjdHVyZUNoYWluOjp2aXNpdENoaWxkcmVuKEpT
Q2VsCiAgICAgfQogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oU3RydWN0dXJlQ2hhaW4pOwor
CiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1N0cnVjdHVyZUNoYWluLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU3RydWN0dXJlQ2hhaW4uaAkocmV2aXNpb24gMjcyMjk3KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlQ2hhaW4uaAkod29ya2luZyBjb3B5KQpAQCAtNTEs
NyArNTEsNyBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgU3RydWN0dXJlQ2hhaW4qIGNyZWF0ZShW
TSYsIEpTT2JqZWN0Kik7CiAgICAgU3RydWN0dXJlSUQqIGhlYWQoKSB7IHJldHVybiBtX3ZlY3Rv
ci5nZXQoKTsgfQotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZp
c2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgc3RhdGljIFN0cnVj
dHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgSlNWYWx1ZSBwcm90b3R5cGUpCiAgICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU3RydWN0dXJlUmFyZURhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZVJhcmVEYXRhLmNwcAkocmV2aXNpb24gMjcyMjk3
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlUmFyZURhdGEuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC02Nyw3ICs2Nyw4IEBAIFN0cnVjdHVyZVJhcmVEYXRhOjpTdHJ1
Y3R1cmVSYXJlRGF0YShWTSYKICAgICAgICAgbV9wcmV2aW91cy5zZXQodm0sIHRoaXMsIHByZXZp
b3VzKTsKIH0KIAotdm9pZCBTdHJ1Y3R1cmVSYXJlRGF0YTo6dmlzaXRDaGlsZHJlbihKU0NlbGwq
IGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4K
K3ZvaWQgU3RydWN0dXJlUmFyZURhdGE6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwg
VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBTdHJ1Y3R1cmVSYXJlRGF0YSogdGhpc09iamVjdCA9
IGpzQ2FzdDxTdHJ1Y3R1cmVSYXJlRGF0YSo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1Rf
SU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTg2LDYgKzg3LDggQEAgdm9pZCBTdHJ1
Y3R1cmVSYXJlRGF0YTo6dmlzaXRDaGlsZHJlbihKUwogICAgIH0KIH0KIAorREVGSU5FX1ZJU0lU
X0NISUxEUkVOKFN0cnVjdHVyZVJhcmVEYXRhKTsKKwogLy8gLS0tLS0tLS0tLS0gQ2FjaGVkIHNw
ZWNpYWwgcHJvcGVydGllcyBoZWxwZXIgd2F0Y2hwb2ludCBjbGFzc2VzIC0tLS0tLS0tLS0tCiAK
IGNsYXNzIENhY2hlZFNwZWNpYWxQcm9wZXJ0eUFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVl
V2F0Y2hwb2ludCBmaW5hbCA6IHB1YmxpYyBBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdh
dGNocG9pbnRCYXNlIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVj
dHVyZVJhcmVEYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU3RydWN0dXJlUmFyZURhdGEuaAkocmV2aXNpb24gMjcyMjk3KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlUmFyZURhdGEuaAkod29ya2luZyBjb3B5KQpAQCAt
NjgsNyArNjgsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzRGVz
dHJ1Y3Rpb24gPSB0cnVlOwogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CiAKLSAg
ICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAg
REVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0
cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBwcm90b3R5cGUpOwogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TeW1ib2xUYWJsZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFibGUuY3BwCShyZXZp
c2lvbiAyNzIyOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TeW1ib2xUYWJs
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkyLDcgKzkyLDggQEAgdm9pZCBTeW1ib2xUYWJsZTo6
ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKIH0K
IAotdm9pZCBTeW1ib2xUYWJsZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIHRoaXNDZWxsLCBTbG90
VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFN5bWJv
bFRhYmxlOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIHRoaXNDZWxsLCBWaXNpdG9yJiB2aXNp
dG9yKQogewogICAgIFN5bWJvbFRhYmxlKiB0aGlzU3ltYm9sVGFibGUgPSBqc0Nhc3Q8U3ltYm9s
VGFibGUqPih0aGlzQ2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzU3lt
Ym9sVGFibGUsIGluZm8oKSk7CkBAIC0xMDgsNiArMTA5LDggQEAgdm9pZCBTeW1ib2xUYWJsZTo6
dmlzaXRDaGlsZHJlbihKU0NlbGwqIAogICAgIHRoaXNTeW1ib2xUYWJsZS0+bV9sb2NhbFRvRW50
cnkgPSBudWxscHRyOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oU3ltYm9sVGFibGUpOwor
CiBjb25zdCBTeW1ib2xUYWJsZTo6TG9jYWxUb0VudHJ5VmVjJiBTeW1ib2xUYWJsZTo6bG9jYWxU
b0VudHJ5KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYpCiB7CiAgICAgaWYgKFVOTElLRUxZKCFt
X2xvY2FsVG9FbnRyeSkpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5
bWJvbFRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U3ltYm9sVGFibGUuaAkocmV2aXNpb24gMjcyMjk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU3ltYm9sVGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtNzMzLDcgKzczMyw3IEBA
IHB1YmxpYzoKICAgICAgICAgbV9zaW5nbGV0b24ubm90aWZ5V3JpdGUodm0sIHRoaXMsIHNjb3Bl
LCByZWFzb24pOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgREVD
TEFSRV9FWFBPUlRfSU5GTzsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
VHlwZVByb2ZpbGVyTG9nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9UeXBlUHJvZmlsZXJMb2cuY3BwCShyZXZpc2lvbiAyNzIyOTcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlUHJvZmlsZXJMb2cuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMjQsNyArMTI0LDcgQEAgdm9pZCBUeXBlUHJvZmlsZXJMb2c6OnByb2Nlc3NMb2dFbnRy
aWVzKAogICAgIH0KIH0KIAotdm9pZCBUeXBlUHJvZmlsZXJMb2c6OnZpc2l0KFNsb3RWaXNpdG9y
JiB2aXNpdG9yKQordm9pZCBUeXBlUHJvZmlsZXJMb2c6OnZpc2l0KEFic3RyYWN0U2xvdFZpc2l0
b3ImIHZpc2l0b3IpCiB7CiAgICAgZm9yIChMb2dFbnRyeSogZW50cnkgPSBtX2xvZ1N0YXJ0UHRy
OyBlbnRyeSAhPSBtX2N1cnJlbnRMb2dFbnRyeVB0cjsgKytlbnRyeSkgewogICAgICAgICB2aXNp
dG9yLmFwcGVuZFVuYmFycmllcmVkKGVudHJ5LT52YWx1ZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9UeXBlUHJvZmlsZXJMb2cuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlUHJvZmlsZXJMb2cuaAkocmV2aXNpb24gMjcyMjk3
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZVByb2ZpbGVyTG9nLmgJKHdv
cmtpbmcgY29weSkKQEAgLTU5LDcgKzU5LDcgQEAgcHVibGljOgogICAgIEpTX0VYUE9SVF9QUklW
QVRFIHZvaWQgcHJvY2Vzc0xvZ0VudHJpZXMoVk0mLCBjb25zdCBTdHJpbmcmKTsKICAgICBMb2dF
bnRyeSogbG9nRW5kUHRyKCkgY29uc3QgeyByZXR1cm4gbV9sb2dFbmRQdHI7IH0KIAotICAgIHZv
aWQgdmlzaXQoU2xvdFZpc2l0b3ImKTsKKyAgICB2b2lkIHZpc2l0KEFic3RyYWN0U2xvdFZpc2l0
b3ImKTsKIAogICAgIHN0YXRpYyBwdHJkaWZmX3QgbG9nU3RhcnRPZmZzZXQoKSB7IHJldHVybiBP
QkpFQ1RfT0ZGU0VUT0YoVHlwZVByb2ZpbGVyTG9nLCBtX2xvZ1N0YXJ0UHRyKTsgfQogICAgIHN0
YXRpYyBwdHJkaWZmX3QgY3VycmVudExvZ0VudHJ5T2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNUX09G
RlNFVE9GKFR5cGVQcm9maWxlckxvZywgbV9jdXJyZW50TG9nRW50cnlQdHIpOyB9CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHdvcmtpbmcgY29weSkKQEAgLTEyMSw2ICsxMjEs
NyBAQCBjbGFzcyBGYXN0TWFsbG9jQWxpZ25lZE1lbW9yeUFsbG9jYXRvcjsKIGNsYXNzIEdpZ2Fj
YWdlQWxpZ25lZE1lbW9yeUFsbG9jYXRvcjsKIGNsYXNzIEhhbmRsZVN0YWNrOwogY2xhc3MgSGFz
T3duUHJvcGVydHlDYWNoZTsKK2NsYXNzIEhlYXBBbmFseXplcjsKIGNsYXNzIEhlYXBQcm9maWxl
cjsKIGNsYXNzIElkZW50aWZpZXI7CiBjbGFzcyBJbnRlcnByZXRlcjsKQEAgLTMxMCw2ICszMTEs
MTAgQEAgcHVibGljOgogICAgIEhlYXBQcm9maWxlciogaGVhcFByb2ZpbGVyKCkgY29uc3QgeyBy
ZXR1cm4gbV9oZWFwUHJvZmlsZXIuZ2V0KCk7IH0KICAgICBKU19FWFBPUlRfUFJJVkFURSBIZWFw
UHJvZmlsZXImIGVuc3VyZUhlYXBQcm9maWxlcigpOwogCisgICAgYm9vbCBpc0FuYWx5emluZ0hl
YXAoKSBjb25zdCB7IHJldHVybiBtX2FjdGl2ZUhlYXBBbmFseXplcjsgfQorICAgIEhlYXBBbmFs
eXplciogYWN0aXZlSGVhcEFuYWx5emVyKCkgY29uc3QgeyByZXR1cm4gbV9hY3RpdmVIZWFwQW5h
bHl6ZXI7IH0KKyAgICB2b2lkIHNldEFjdGl2ZUhlYXBBbmFseXplcihIZWFwQW5hbHl6ZXIqIGFu
YWx5emVyKSB7IG1fYWN0aXZlSGVhcEFuYWx5emVyID0gYW5hbHl6ZXI7IH0KKwogI2lmIEVOQUJM
RShTQU1QTElOR19QUk9GSUxFUikKICAgICBTYW1wbGluZ1Byb2ZpbGVyKiBzYW1wbGluZ1Byb2Zp
bGVyKCkgeyByZXR1cm4gbV9zYW1wbGluZ1Byb2ZpbGVyLmdldCgpOyB9CiAgICAgSlNfRVhQT1JU
X1BSSVZBVEUgU2FtcGxpbmdQcm9maWxlciYgZW5zdXJlU2FtcGxpbmdQcm9maWxlcihSZWY8U3Rv
cHdhdGNoPiYmKTsKQEAgLTExOTQsOSArMTE5OSwxMCBAQCBwdWJsaWM6CiAgICAgYm9vbCBkaWRF
bnRlclZNIHsgZmFsc2UgfTsKIHByaXZhdGU6CiAgICAgYm9vbCBtX2ZhaWxOZXh0TmV3Q29kZUJs
b2NrIHsgZmFsc2UgfTsKLSAgICBEZWxldGVQcm9wZXJ0eU1vZGUgbV9kZWxldGVQcm9wZXJ0eU1v
ZGUgeyBEZWxldGVQcm9wZXJ0eU1vZGU6OkRlZmF1bHQgfTsKICAgICBib29sIG1fZ2xvYmFsQ29u
c3RSZWRlY2xhcmF0aW9uU2hvdWxkVGhyb3cgeyB0cnVlIH07CiAgICAgYm9vbCBtX3Nob3VsZEJ1
aWxkUENUb0NvZGVPcmlnaW5NYXBwaW5nIHsgZmFsc2UgfTsKKyAgICBEZWxldGVQcm9wZXJ0eU1v
ZGUgbV9kZWxldGVQcm9wZXJ0eU1vZGUgeyBEZWxldGVQcm9wZXJ0eU1vZGU6OkRlZmF1bHQgfTsK
KyAgICBIZWFwQW5hbHl6ZXIqIG1fYWN0aXZlSGVhcEFuYWx5emVyIHsgbnVsbHB0ciB9OwogICAg
IHN0ZDo6dW5pcXVlX3B0cjxDb2RlQ2FjaGU+IG1fY29kZUNhY2hlOwogICAgIHN0ZDo6dW5pcXVl
X3B0cjxJbnRsQ2FjaGU+IG1faW50bENhY2hlOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxCdWlsdGlu
RXhlY3V0YWJsZXM+IG1fYnVpbHRpbkV4ZWN1dGFibGVzOwpAQCAtMTIzNyw2ICsxMjQzLDcgQEAg
cHJpdmF0ZToKICAgICBWTSogbV9wcmV2OyAvLyBSZXF1aXJlZCBieSBEb3VibHlMaW5rZWRMaXN0
Tm9kZS4KICAgICBWTSogbV9uZXh0OyAvLyBSZXF1aXJlZCBieSBEb3VibHlMaW5rZWRMaXN0Tm9k
ZS4KIAorcHVibGljOgogICAgIC8vIEZyaWVuZHMgZm9yIGV4Y2VwdGlvbiBjaGVja2luZyBwdXJw
b3NlIG9ubHkuCiAgICAgZnJpZW5kIGNsYXNzIEhlYXA7CiAgICAgZnJpZW5kIGNsYXNzIENhdGNo
U2NvcGU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9XZWFrTWFwSW1wbC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha01hcElt
cGwuY3BwCShyZXZpc2lvbiAyNzIyOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9XZWFrTWFwSW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDggKzM5LDkgQEAgdm9pZCBX
ZWFrTWFwSW1wbDxXZWFrTWFwQnVja2V0Pjo6ZGVzdHJveQogICAgIHN0YXRpY19jYXN0PFdlYWtN
YXBJbXBsKj4oY2VsbCktPn5XZWFrTWFwSW1wbCgpOwogfQogCi10ZW1wbGF0ZSA8dHlwZW5hbWUg
V2Vha01hcEJ1Y2tldD4KLXZvaWQgV2Vha01hcEltcGw8V2Vha01hcEJ1Y2tldD46OnZpc2l0Q2hp
bGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVu
YW1lIFdlYWtNYXBCdWNrZXQ+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBXZWFr
TWFwSW1wbDxXZWFrTWFwQnVja2V0Pjo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBW
aXNpdG9yJiB2aXNpdG9yKQogewogICAgIFdlYWtNYXBJbXBsKiB0aGlzT2JqZWN0ID0ganNDYXN0
PFdlYWtNYXBJbXBsKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlz
T2JqZWN0LCBpbmZvKCkpOwpAQCAtNDgsNiArNDksOCBAQCB2b2lkIFdlYWtNYXBJbXBsPFdlYWtN
YXBCdWNrZXQ+Ojp2aXNpdENoCiAgICAgdmlzaXRvci5yZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQo
dGhpc09iamVjdC0+bV9jYXBhY2l0eSAqIHNpemVvZihXZWFrTWFwQnVja2V0KSk7CiB9CiAKK0RF
RklORV9URU1QTEFURV9WSVNJVF9DSElMRFJFTih0ZW1wbGF0ZTx0eXBlbmFtZSBXZWFrTWFwQnVj
a2V0PiwgV2Vha01hcEltcGw8V2Vha01hcEJ1Y2tldD4pOworCiB0ZW1wbGF0ZSA8dHlwZW5hbWUg
V2Vha01hcEJ1Y2tldD4KIHNpemVfdCBXZWFrTWFwSW1wbDxXZWFrTWFwQnVja2V0Pjo6ZXN0aW1h
dGVkU2l6ZShKU0NlbGwqIGNlbGwsIFZNJiB2bSkKIHsKQEAgLTU2LDE1ICs1OSwxNSBAQCBzaXpl
X3QgV2Vha01hcEltcGw8V2Vha01hcEJ1Y2tldD46OmVzdGltCiB9CiAKIHRlbXBsYXRlIDw+Ci12
b2lkIFdlYWtNYXBJbXBsPFdlYWtNYXBCdWNrZXQ8V2Vha01hcEJ1Y2tldERhdGFLZXk+Pjo6dmlz
aXRPdXRwdXRDb25zdHJhaW50cyhKU0NlbGwqLCBTbG90VmlzaXRvciYpCit2b2lkIFdlYWtNYXBJ
bXBsPFdlYWtNYXBCdWNrZXQ8V2Vha01hcEJ1Y2tldERhdGFLZXk+Pjo6dmlzaXRPdXRwdXRDb25z
dHJhaW50cyhKU0NlbGwqLCBBYnN0cmFjdFNsb3RWaXNpdG9yJikKIHsKICAgICAvLyBPbmx5IEpT
V2Vha01hcCBuZWVkcyB0byBoYXJ2ZXN0IHZhbHVlIHJlZmVyZW5jZXMKIH0KIAogdGVtcGxhdGUg
PD4KLXZvaWQgV2Vha01hcEltcGw8V2Vha01hcEJ1Y2tldDxXZWFrTWFwQnVja2V0RGF0YUtleVZh
bHVlPj46OnZpc2l0T3V0cHV0Q29uc3RyYWludHMoSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYg
dmlzaXRvcikKK3ZvaWQgV2Vha01hcEltcGw8V2Vha01hcEJ1Y2tldDxXZWFrTWFwQnVja2V0RGF0
YUtleVZhbHVlPj46OnZpc2l0T3V0cHV0Q29uc3RyYWludHMoSlNDZWxsKiBjZWxsLCBBYnN0cmFj
dFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewotICAgIFZNJiB2bSA9IHZpc2l0b3Iudm0oKTsKKy8v
ICAgIFZNJiB2bSA9IHZpc2l0b3Iudm0oKTsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0
PFdlYWtNYXBJbXBsKj4oY2VsbCk7CiAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayh0aGlzT2Jq
ZWN0LT5jZWxsTG9jaygpKTsKICAgICBhdXRvKiBidWZmZXIgPSB0aGlzT2JqZWN0LT5idWZmZXIo
KTsKQEAgLTcyLDcgKzc1LDggQEAgdm9pZCBXZWFrTWFwSW1wbDxXZWFrTWFwQnVja2V0PFdlYWtN
YXBCdQogICAgICAgICBhdXRvKiBidWNrZXQgPSBidWZmZXIgKyBpbmRleDsKICAgICAgICAgaWYg
KGJ1Y2tldC0+aXNFbXB0eSgpIHx8IGJ1Y2tldC0+aXNEZWxldGVkKCkpCiAgICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgaWYgKCF2bS5oZWFwLmlzTWFya2VkKGJ1Y2tldC0+a2V5KCkpKQor
Ly8gICAgICAgIGlmICghdm0uaGVhcC5pc01hcmtlZChidWNrZXQtPmtleSgpKSkgLy8gbWxhbQor
ICAgICAgICBpZiAoIXZpc2l0b3IuaXNNYXJrZWQoYnVja2V0LT5rZXkoKSkpCiAgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgYnVja2V0LT52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKICAg
ICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9XZWFrTWFwSW1wbC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtNYXBJbXBsLmgJ
KHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtN
YXBJbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0NCw4ICsxNDQsMTAgQEAgcHVibGljOgogICAg
ICAgICBjbGVhclZhbHVlKCk7CiAgICAgfQogCisvLyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVmlz
aXRvciwgdHlwZW5hbWUgVCA9IERhdGE+CisvLyAgICBBTFdBWVNfSU5MSU5FIHR5cGVuYW1lIHN0
ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTxULCBXZWFrTWFwQnVja2V0RGF0YUtleVZhbHVlPjo6
dmFsdWU+Ojp0eXBlIHZpc2l0QWdncmVnYXRlKFZpc2l0b3ImIHZpc2l0b3IpCiAgICAgdGVtcGxh
dGUgPHR5cGVuYW1lIFQgPSBEYXRhPgotICAgIEFMV0FZU19JTkxJTkUgdHlwZW5hbWUgc3RkOjpl
bmFibGVfaWY8c3RkOjppc19zYW1lPFQsIFdlYWtNYXBCdWNrZXREYXRhS2V5VmFsdWU+Ojp2YWx1
ZT46OnR5cGUgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisgICAgQUxXQVlT
X0lOTElORSB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8VCwgV2Vha01hcEJ1
Y2tldERhdGFLZXlWYWx1ZT46OnZhbHVlPjo6dHlwZSB2aXNpdEFnZ3JlZ2F0ZShBYnN0cmFjdFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQogICAgIHsKICAgICAgICAgdmlzaXRvci5hcHBlbmQobV9kYXRh
LnZhbHVlKTsKICAgICB9CkBAIC0yMDIsNyArMjA0LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBuZWVkc0Rlc3RydWN0aW9uID0gdHJ1ZTsKICAgICBzdGF0aWMgdm9pZCBk
ZXN0cm95KEpTQ2VsbCopOwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwq
LCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVEVNUExBVEVfVklTSVRfQ0hJTERSRU47CiAK
ICAgICBzdGF0aWMgc2l6ZV90IGVzdGltYXRlZFNpemUoSlNDZWxsKiwgVk0mKTsKIApAQCAtMzEx
LDcgKzMxMyw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHZtLndlYWtTZXRTcGFjZTxtb2Rl
PigpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0T3V0cHV0Q29uc3RyYWludHMoSlND
ZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBzdGF0aWMgdm9pZCB2aXNpdE91dHB1dENvbnN0cmFp
bnRzKEpTQ2VsbCosIEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKICAgICB2b2lkIGZpbmFsaXplVW5j
b25kaXRpb25hbGx5KFZNJik7CiAKIHByaXZhdGU6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvdG9vbHMvSlNEb2xsYXJWTS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3Rvb2xzL0pTRG9sbGFyVk0uY3BwCShyZXZpc2lvbiAyNzIyOTcpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvdG9vbHMvSlNEb2xsYXJWTS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyNCwx
NCArMjI0LDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIFJvb3Qq
KTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90Vmlz
aXRvciYgdmlzaXRvcikKLSAgICB7Ci0gICAgICAgIERvbGxhclZNQXNzZXJ0U2NvcGUgYXNzZXJ0
U2NvcGU7Ci0gICAgICAgIEVsZW1lbnQqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8RWxlbWVudCo+KGNl
bGwpOwotICAgICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8o
KSk7Ci0gICAgICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7Ci0g
ICAgICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fcm9vdCk7Ci0gICAgfQorICAgIERF
Q0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBzdGF0aWMgRWxlbWVudEhhbmRsZU93bmVyKiBo
YW5kbGVPd25lcigpOwogCkBAIC0yNDcsMTAgKzI0MCwyMiBAQCBwcml2YXRlOgogICAgIFdyaXRl
QmFycmllcjxSb290PiBtX3Jvb3Q7CiB9OwogCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgor
dm9pZCBFbGVtZW50Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZp
c2l0b3IpCit7CisgICAgRG9sbGFyVk1Bc3NlcnRTY29wZSBhc3NlcnRTY29wZTsKKyAgICBFbGVt
ZW50KiB0aGlzT2JqZWN0ID0ganNDYXN0PEVsZW1lbnQqPihjZWxsKTsKKyAgICBBU1NFUlRfR0Nf
T0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CisgICAgQmFzZTo6dmlzaXRDaGls
ZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKKyAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0
LT5tX3Jvb3QpOworfQorCitERUZJTkVfVklTSVRfQ0hJTERSRU4oRWxlbWVudCk7CisKIGNsYXNz
IEVsZW1lbnRIYW5kbGVPd25lciBmaW5hbCA6IHB1YmxpYyBXZWFrSGFuZGxlT3duZXIgewogICAg
IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIGJvb2wgaXNSZWFjaGFibGVG
cm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBT
bG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikgZmluYWwKKyAgICBib29s
IGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFu
ZGxlLCB2b2lkKiwgQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJl
YXNvbikgZmluYWwKICAgICB7CiAgICAgICAgIERvbGxhclZNQXNzZXJ0U2NvcGUgYXNzZXJ0U2Nv
cGU7CiAgICAgICAgIGlmIChVTkxJS0VMWShyZWFzb24pKQpAQCAtMzA0LDE4ICszMDksMjMgQEAg
cHVibGljOgogICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVj
dCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8o
KSk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqIHRoaXNP
YmplY3QsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQotICAgIHsKLSAgICAgICAgRG9sbGFyVk1Bc3Nl
cnRTY29wZSBhc3NlcnRTY29wZTsKLSAgICAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0
aGlzT2JqZWN0LCBpbmZvKCkpOwotICAgICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmpl
Y3QsIHZpc2l0b3IpOwotICAgICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QodGhpc09iamVjdCk7
Ci0gICAgfQorICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKIHByaXZhdGU6CiAgICAgV2Vh
azxFbGVtZW50PiBtX2VsZW1lbnQ7CiB9OwogCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgor
dm9pZCBSb290Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIHRoaXNPYmplY3QsIFZpc2l0b3Im
IHZpc2l0b3IpCit7CisgICAgRG9sbGFyVk1Bc3NlcnRTY29wZSBhc3NlcnRTY29wZTsKKyAgICBB
U1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CisgICAgQmFzZTo6
dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKKyAgICB2aXNpdG9yLmFkZE9wYXF1
ZVJvb3QodGhpc09iamVjdCk7Cit9CisKK0RFRklORV9WSVNJVF9DSElMRFJFTihSb290KTsKKwog
Y2xhc3MgU2ltcGxlT2JqZWN0IDogcHVibGljIEpTTm9uRmluYWxPYmplY3QgewogcHVibGljOgog
ICAgIFNpbXBsZU9iamVjdChWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQpAQCAtMzQwLDE0
ICszNTAsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBzaW1wbGVPYmplY3Q7CiAgICAgfQog
Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9y
JiB2aXNpdG9yKQotICAgIHsKLSAgICAgICAgRG9sbGFyVk1Bc3NlcnRTY29wZSBhc3NlcnRTY29w
ZTsKLSAgICAgICAgU2ltcGxlT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PFNpbXBsZU9iamVj
dCo+KGNlbGwpOwotICAgICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3Qs
IGluZm8oKSk7Ci0gICAgICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRv
cik7Ci0gICAgICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1faGlkZGVuVmFsdWUpOwot
ICAgIH0KKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgc3RhdGljIFN0cnVjdHVy
ZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
SlNWYWx1ZSBwcm90b3R5cGUpCiAgICAgewpAQCAtMzgwLDYgKzM4MywxOCBAQCBwcml2YXRlOgog
ICAgIFdyaXRlQmFycmllcjxKU0M6OlVua25vd24+IG1faGlkZGVuVmFsdWU7CiB9OwogCit0ZW1w
bGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBTaW1wbGVPYmplY3Q6OnZpc2l0Q2hpbGRyZW5J
bXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBEb2xsYXJWTUFzc2Vy
dFNjb3BlIGFzc2VydFNjb3BlOworICAgIFNpbXBsZU9iamVjdCogdGhpc09iamVjdCA9IGpzQ2Fz
dDxTaW1wbGVPYmplY3QqPihjZWxsKTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRo
aXNPYmplY3QsIGluZm8oKSk7CisgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2
aXNpdG9yKTsKKyAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2hpZGRlblZhbHVlKTsK
K30KKworREVGSU5FX1ZJU0lUX0NISUxEUkVOKFNpbXBsZU9iamVjdCk7CisKIGNsYXNzIEltcHVy
ZUdldHRlciA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKIHB1YmxpYzoKICAgICBJbXB1cmVH
ZXR0ZXIoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKQEAgLTQzNiwxNCArNDUxLDcgQEAg
cHVibGljOgogICAgICAgICByZXR1cm4gQmFzZTo6Z2V0T3duUHJvcGVydHlTbG90KG9iamVjdCwg
Z2xvYmFsT2JqZWN0LCBuYW1lLCBzbG90KTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNp
dENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCi0gICAgewotICAg
ICAgICBEb2xsYXJWTUFzc2VydFNjb3BlIGFzc2VydFNjb3BlOwotICAgICAgICBBU1NFUlRfR0Nf
T0JKRUNUX0lOSEVSSVRTKGNlbGwsIGluZm8oKSk7Ci0gICAgICAgIEJhc2U6OnZpc2l0Q2hpbGRy
ZW4oY2VsbCwgdmlzaXRvcik7Ci0gICAgICAgIEltcHVyZUdldHRlciogdGhpc09iamVjdCA9IGpz
Q2FzdDxJbXB1cmVHZXR0ZXIqPihjZWxsKTsKLSAgICAgICAgdmlzaXRvci5hcHBlbmQodGhpc09i
amVjdC0+bV9kZWxlZ2F0ZSk7Ci0gICAgfQorICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAK
ICAgICB2b2lkIHNldERlbGVnYXRlKFZNJiB2bSwgSlNPYmplY3QqIGRlbGVnYXRlKQogICAgIHsK
QEAgLTQ1NCw2ICs0NjIsMTggQEAgcHJpdmF0ZToKICAgICBXcml0ZUJhcnJpZXI8SlNPYmplY3Q+
IG1fZGVsZWdhdGU7CiB9OwogCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBJbXB1
cmVHZXR0ZXI6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRv
cikKK3sKKyAgICBEb2xsYXJWTUFzc2VydFNjb3BlIGFzc2VydFNjb3BlOworICAgIEFTU0VSVF9H
Q19PQkpFQ1RfSU5IRVJJVFMoY2VsbCwgaW5mbygpKTsKKyAgICBCYXNlOjp2aXNpdENoaWxkcmVu
KGNlbGwsIHZpc2l0b3IpOworICAgIEltcHVyZUdldHRlciogdGhpc09iamVjdCA9IGpzQ2FzdDxJ
bXB1cmVHZXR0ZXIqPihjZWxsKTsKKyAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2Rl
bGVnYXRlKTsKK30KKworREVGSU5FX1ZJU0lUX0NISUxEUkVOKEltcHVyZUdldHRlcik7CisKIHN0
YXRpYyBKU0NfREVDTEFSRV9DVVNUT01fR0VUVEVSKGN1c3RvbUdldHRlclZhbHVlR2V0dGVyKTsK
IHN0YXRpYyBKU0NfREVDTEFSRV9DVVNUT01fR0VUVEVSKGN1c3RvbUdldHRlckFjZXNzb3JHZXR0
ZXIpOwogCkBAIC0xODIyLDE0ICsxODQyLDcgQEAgcHVibGljOgogICAgICAgICBwdXREaXJlY3RO
YXRpdmVGdW5jdGlvbih2bSwgZ2xvYmFsT2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZt
LCAiYWRkQnl0ZXMiKSwgMCwgZnVuY3Rpb25XYXNtU3RyZWFtaW5nQ29tcGlsZXJBZGRCeXRlcywg
Tm9JbnRyaW5zaWMsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9u
dEVudW0pKTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCog
Y2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCi0gICAgewotICAgICAgICBEb2xsYXJWTUFzc2Vy
dFNjb3BlIGFzc2VydFNjb3BlOwotICAgICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PFdh
c21TdHJlYW1pbmdDb21waWxlcio+KGNlbGwpOwotICAgICAgICBBU1NFUlRfR0NfT0JKRUNUX0lO
SEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7Ci0gICAgICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4o
dGhpc09iamVjdCwgdmlzaXRvcik7Ci0gICAgICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3Qt
Pm1fcHJvbWlzZSk7Ci0gICAgfQorICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBE
RUNMQVJFX0lORk87CiAKQEAgLTE4MzcsNiArMTg1MCwxOCBAQCBwdWJsaWM6CiAgICAgUmVmPFdh
c206OlN0cmVhbWluZ0NvbXBpbGVyPiBtX3N0cmVhbWluZ0NvbXBpbGVyOwogfTsKIAordGVtcGxh
dGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgV2FzbVN0cmVhbWluZ0NvbXBpbGVyOjp2aXNpdENo
aWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgRG9sbGFy
Vk1Bc3NlcnRTY29wZSBhc3NlcnRTY29wZTsKKyAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0
PFdhc21TdHJlYW1pbmdDb21waWxlcio+KGNlbGwpOworICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5I
RVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKKyAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNP
YmplY3QsIHZpc2l0b3IpOworICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fcHJvbWlz
ZSk7Cit9CisKK0RFRklORV9WSVNJVF9DSElMRFJFTihXYXNtU3RyZWFtaW5nQ29tcGlsZXIpOwor
CiBjb25zdCBDbGFzc0luZm8gV2FzbVN0cmVhbWluZ0NvbXBpbGVyOjpzX2luZm8gPSB7ICJXYXNt
U3RyZWFtaW5nQ29tcGlsZXIiLCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBudWxscHRyLCBDUkVB
VEVfTUVUSE9EX1RBQkxFKFdhc21TdHJlYW1pbmdDb21waWxlcikgfTsKIAogSlNDX0RFRklORV9I
T1NUX0ZVTkNUSU9OKGZ1bmN0aW9uV2FzbVN0cmVhbWluZ0NvbXBpbGVyQWRkQnl0ZXMsIChKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkpCkBAIC0zNjk5
LDEzICszNzI0LDE2IEBAIHZvaWQgSlNEb2xsYXJWTTo6YWRkQ29uc3RydWN0aWJsZUZ1bmN0aW8K
ICAgICBwdXREaXJlY3Qodm0sIGlkZW50aWZpZXIsIEpTRnVuY3Rpb246OmNyZWF0ZSh2bSwgZ2xv
YmFsT2JqZWN0LCBhcmd1bWVudHMsIGlkZW50aWZpZXIuc3RyaW5nKCksIGZ1bmN0aW9uLCBOb0lu
dHJpbnNpYywgZnVuY3Rpb24pLCBqc0RvbGxhclZNUHJvcGVydHlBdHRyaWJ1dGVzKTsKIH0KIAot
dm9pZCBKU0RvbGxhclZNOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3Im
IHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0RvbGxhclZNOjp2
aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAg
SlNEb2xsYXJWTSogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0RvbGxhclZNKj4oY2VsbCk7CiAgICAg
QmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKICAgICB2aXNpdG9yLmFw
cGVuZCh0aGlzT2JqZWN0LT5tX29iamVjdERvaW5nU2lkZUVmZmVjdFB1dFdpdGhvdXRDb3JyZWN0
U2xvdFN0YXR1c1N0cnVjdHVyZSk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU0RvbGxh
clZNKTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKIElHTk9SRV9XQVJOSU5HU19FTkQKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9KU0RvbGxhclZNLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0pTRG9sbGFyVk0uaAkocmV2aXNpb24gMjcyMjk3
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0pTRG9sbGFyVk0uaAkod29ya2luZyBj
b3B5KQpAQCAtNzQsNyArNzQsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgYWRkRnVuY3Rpb24oVk0m
LCBKU0dsb2JhbE9iamVjdCosIGNvbnN0IGNoYXIqIG5hbWUsIE5hdGl2ZUZ1bmN0aW9uLCB1bnNp
Z25lZCBhcmd1bWVudHMpOwogICAgIHZvaWQgYWRkQ29uc3RydWN0aWJsZUZ1bmN0aW9uKFZNJiwg
SlNHbG9iYWxPYmplY3QqLCBjb25zdCBjaGFyKiBuYW1lLCBOYXRpdmVGdW5jdGlvbiwgdW5zaWdu
ZWQgYXJndW1lbnRzKTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwg
U2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgV3JpdGVC
YXJyaWVyPFN0cnVjdHVyZT4gbV9vYmplY3REb2luZ1NpZGVFZmZlY3RQdXRXaXRob3V0Q29ycmVj
dFNsb3RTdGF0dXNTdHJ1Y3R1cmU7CiB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbUdsb2JhbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbUdsb2JhbC5jcHAJKHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21HbG9iYWwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDMsNyArMTAzLDgg
QEAgdm9pZCBHbG9iYWw6OnNldChKU0dsb2JhbE9iamVjdCogZ2xvYmFsTwogICAgIH0KIH0KIAot
dm9pZCBHbG9iYWw6OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxh
dGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgR2xvYmFsOjp2aXNpdEFnZ3JlZ2F0ZShWaXNpdG9y
JiB2aXNpdG9yKQogewogICAgIHN3aXRjaCAobV90eXBlKSB7CiAgICAgY2FzZSBXYXNtOjpUeXBl
OjpFeHRlcm5yZWY6CkBAIC0xMTcsNiArMTE4LDkgQEAgdm9pZCBHbG9iYWw6OnZpc2l0QWdncmVn
YXRlKFNsb3RWaXNpdG9yJgogICAgIH0KIH0KIAordGVtcGxhdGUgdm9pZCBHbG9iYWw6OnZpc2l0
QWdncmVnYXRlKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgR2xvYmFsOjp2
aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYpOworCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6R2xv
YmFsCiAKICNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtR2xvYmFsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbUdsb2JhbC5oCShyZXZpc2lvbiAyNzIyOTcpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtR2xvYmFsLmgJKHdvcmtpbmcgY29weSkKQEAgLTU3LDcgKzU3
LDcgQEAgcHVibGljOgogICAgIEpTVmFsdWUgZ2V0KEpTR2xvYmFsT2JqZWN0KikgY29uc3Q7CiAg
ICAgdWludDY0X3QgZ2V0UHJpbWl0aXZlKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZS5tX3ByaW1p
dGl2ZTsgfQogICAgIHZvaWQgc2V0KEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSk7Ci0gICAgdm9p
ZCB2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZp
c2l0b3I+IHZvaWQgdmlzaXRBZ2dyZWdhdGUoVmlzaXRvciYpOwogCiAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVD4gVCogb3duZXIoKSBjb25zdCB7IHJldHVybiByZWludGVycHJldF9jYXN0PFQqPiht
X293bmVyKTsgfQogICAgIHZvaWQgc2V0T3duZXIoSlNPYmplY3QqIG93bmVyKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGFibGUuY3BwCShyZXZpc2lvbiAyNzIyOTcpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGFibGUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xNjYsNyArMTY2LDggQEAgSlNWYWx1ZSBUYWJsZTo6Z2V0KHVpbnQzMl90IGluZGV4KSBj
b25zdAogICAgIHJldHVybiBtX2pzVmFsdWVzLmdldCgpW2luZGV4ICYgbV9tYXNrXS5nZXQoKTsK
IH0KIAotdm9pZCBUYWJsZTo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0
ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBUYWJsZTo6dmlzaXRBZ2dyZWdhdGUoVmlz
aXRvciYgdmlzaXRvcikKIHsKICAgICBSRUxFQVNFX0FTU0VSVChtX293bmVyKTsKICAgICBhdXRv
IGxvY2tlciA9IGhvbGRMb2NrKG1fb3duZXItPmNlbGxMb2NrKCkpOwpAQCAtMTc0LDYgKzE3NSw5
IEBAIHZvaWQgVGFibGU6OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJiAKICAgICAgICAgdmlz
aXRvci5hcHBlbmQobV9qc1ZhbHVlcy5nZXQoKVtpXSk7CiB9CiAKK3RlbXBsYXRlIHZvaWQgVGFi
bGU6OnZpc2l0QWdncmVnYXRlKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQg
VGFibGU6OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJik7CisKIFR5cGUgVGFibGU6Ondhc21U
eXBlKCkgY29uc3QKIHsKICAgICBpZiAoaXNFeHRlcm5yZWZUYWJsZSgpKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbVRhYmxlLmgJKHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UYWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC04MCw3
ICs4MCw3IEBAIHB1YmxpYzoKICAgICBPcHRpb25hbDx1aW50MzJfdD4gZ3Jvdyh1aW50MzJfdCBk
ZWx0YSwgSlNWYWx1ZSBkZWZhdWx0VmFsdWUpOwogICAgIHZvaWQgY29weShjb25zdCBUYWJsZSog
c3JjVGFibGUsIHVpbnQzMl90IGRzdEluZGV4LCB1aW50MzJfdCBzcmNJbmRleCk7CiAKLSAgICB2
b2lkIHZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
VmlzaXRvcj4gdm9pZCB2aXNpdEFnZ3JlZ2F0ZShWaXNpdG9yJik7CiAKIHByb3RlY3RlZDoKICAg
ICBUYWJsZSh1aW50MzJfdCBpbml0aWFsLCBPcHRpb25hbDx1aW50MzJfdD4gbWF4aW11bSwgVGFi
bGVFbGVtZW50VHlwZSA9IFRhYmxlRWxlbWVudFR5cGU6OkV4dGVybnJlZik7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1RvV2FzbUlDQ2FsbGVlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1RvV2FzbUlDQ2FsbGVlLmNwcAko
cmV2aXNpb24gMjcyMjk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNUb1dh
c21JQ0NhbGxlZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDcgKzQ5LDggQEAgU3RydWN0dXJl
KiBKU1RvV2FzbUlDQ2FsbGVlOjpjcmVhdGVTdHJ1YwogICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNy
ZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKEpTQ2FsbGVlVHlwZSwg
U3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwogfQogCi12b2lkIEpTVG9XYXNtSUNDYWxsZWU6OnZp
c2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRl
PHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTVG9XYXNtSUNDYWxsZWU6OnZpc2l0Q2hpbGRyZW5J
bXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU1RvV2FzbUlDQ2Fs
bGVlKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVG9XYXNtSUNDYWxsZWUqPihjZWxsKTsKICAgICBB
U1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC01OCw2ICs1
OSw4IEBAIHZvaWQgSlNUb1dhc21JQ0NhbGxlZTo6dmlzaXRDaGlsZHJlbihKU0MKICAgICB2aXNp
dG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2Z1bmN0aW9uKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NI
SUxEUkVOKEpTVG9XYXNtSUNDYWxsZWUpOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlm
IC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL0pTVG9XYXNtSUNDYWxsZWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9KU1RvV2FzbUlDQ2FsbGVlLmgJKHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTVG9XYXNtSUNDYWxsZWUuaAkod29ya2luZyBjb3B5
KQpAQCAtNTYsNyArNTYsNyBAQCBwcml2YXRlOgogICAgIEpTVG9XYXNtSUNDYWxsZWUoVk0mIHZt
LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKICAg
ICAgICAgOiBCYXNlKHZtLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSkKICAgICB7IH0KLSAgICBz
dGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVD
TEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIFdyaXRlQmFycmllcjxXZWJBc3NlbWJseUZ1bmN0
aW9uPiBtX2Z1bmN0aW9uOwogfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suY3BwCShyZXZpc2lvbiAyNzIy
OTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJs
b2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODIsNyArODIsOCBAQCB2b2lkIEpTV2ViQXNzZW1i
bHlDb2RlQmxvY2s6OmNsZWFySlNDYWxsCiAgICAgICAgICgqaXRlciktPnVubGluayh2bSk7CiB9
CiAKLXZvaWQgSlNXZWJBc3NlbWJseUNvZGVCbG9jazo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNl
bGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3Zv
aWQgSlNXZWJBc3NlbWJseUNvZGVCbG9jazo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxs
LCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2sqIHRoaXNP
YmplY3QgPSBqc0Nhc3Q8SlNXZWJBc3NlbWJseUNvZGVCbG9jayo+KGNlbGwpOwogICAgIEFTU0VS
VF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTkwLDYgKzkxLDgg
QEAgdm9pZCBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrOjp2aXNpdENoaWxkcgogICAgIEJhc2U6OnZp
c2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CiB9CiAKK0RFRklORV9WSVNJVF9DSElM
RFJFTihKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKTsKKwogdm9pZCBKU1dlYkFzc2VtYmx5Q29kZUJs
b2NrOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxseShWTSYgdm0pCiB7CiAgICAgZm9yIChhdXRvIGl0
ZXIgPSBtX2NhbGxMaW5rSW5mb3MuYmVnaW4oKTsgISFpdGVyOyArK2l0ZXIpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNvZGVC
bG9jay5oCShyZXZpc2lvbiAyNzIyOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTg2LDcgKzg2LDcg
QEAgcHJpdmF0ZToKICAgICBERUNMQVJFX0VYUE9SVF9JTkZPOwogICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBuZWVkc0Rlc3RydWN0aW9uID0gdHJ1ZTsKICAgICBzdGF0aWMgdm9pZCBkZXN0cm95
KEpTQ2VsbCopOwotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZp
c2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgUmVmPFdhc206OkNv
ZGVCbG9jaz4gbV9jb2RlQmxvY2s7CiAgICAgVmVjdG9yPE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxX
YXNtRW50cnlQdHJUYWc+PiBtX3dhc21Ub0pTRXhpdFN0dWJzOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUdsb2JhbC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUdsb2JhbC5jcHAJKHJl
dmlzaW9uIDI3MjI5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNz
ZW1ibHlHbG9iYWwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MSw3ICs3MSw4IEBAIHZvaWQgSlNX
ZWJBc3NlbWJseUdsb2JhbDo6ZGVzdHJveShKU0NlbGwKICAgICBzdGF0aWNfY2FzdDxKU1dlYkFz
c2VtYmx5R2xvYmFsKj4oY2VsbCktPkpTV2ViQXNzZW1ibHlHbG9iYWw6On5KU1dlYkFzc2VtYmx5
R2xvYmFsKCk7CiB9CiAKLXZvaWQgSlNXZWJBc3NlbWJseUdsb2JhbDo6dmlzaXRDaGlsZHJlbihK
U0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlz
aXRvcj4KK3ZvaWQgSlNXZWJBc3NlbWJseUdsb2JhbDo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxs
KiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTV2ViQXNzZW1ibHlHbG9iYWwqIHRo
aXNPYmplY3QgPSBqc0Nhc3Q8SlNXZWJBc3NlbWJseUdsb2JhbCo+KGNlbGwpOwogICAgIEFTU0VS
VF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTgwLDYgKzgxLDgg
QEAgdm9pZCBKU1dlYkFzc2VtYmx5R2xvYmFsOjp2aXNpdENoaWxkcmVuKAogICAgIHRoaXNPYmpl
Y3QtPmdsb2JhbCgpLT52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKIH0KIAorREVGSU5FX1ZJU0lU
X0NISUxEUkVOKEpTV2ViQXNzZW1ibHlHbG9iYWwpOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAog
I2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlHbG9iYWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5R2xvYmFsLmgJKHJldmlzaW9uIDI3MjI5
NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlHbG9iYWwu
aAkod29ya2luZyBjb3B5KQpAQCAtNTksNyArNTksNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAg
IEpTV2ViQXNzZW1ibHlHbG9iYWwoVk0mLCBTdHJ1Y3R1cmUqLCBSZWY8V2FzbTo6R2xvYmFsPiYm
KTsKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRD
aGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERS
RU47CiAKICAgICBSZWY8V2FzbTo6R2xvYmFsPiBtX2dsb2JhbDsKIH07CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5j
ZS5jcHAJKHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTczLDcgKzczLDgg
QEAgdm9pZCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OmRlc3Ryb3koSlNDZQogICAgIHN0YXRpY19j
YXN0PEpTV2ViQXNzZW1ibHlJbnN0YW5jZSo+KGNlbGwpLT5KU1dlYkFzc2VtYmx5SW5zdGFuY2U6
On5KU1dlYkFzc2VtYmx5SW5zdGFuY2UoKTsKIH0KIAotdm9pZCBKU1dlYkFzc2VtYmx5SW5zdGFu
Y2U6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3Rl
bXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6dmlz
aXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGF1
dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNXZWJBc3NlbWJseUluc3RhbmNlKj4oY2VsbCk7CiAg
ICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtMTAy
LDYgKzEwMyw4IEBAIHZvaWQgSlNXZWJBc3NlbWJseUluc3RhbmNlOjp2aXNpdENoaWxkcmUKICAg
ICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZCh3cmFwcGVyLmdldCgpKTsKIH0KIAorREVG
SU5FX1ZJU0lUX0NISUxEUkVOKEpTV2ViQXNzZW1ibHlJbnN0YW5jZSk7CisKIHZvaWQgSlNXZWJB
c3NlbWJseUluc3RhbmNlOjpmaW5hbGl6ZUNyZWF0aW9uKFZNJiB2bSwgSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgUmVmPFdhc206OkNvZGVCbG9jaz4mJiB3YXNtQ29kZUJsb2NrLCBKU09i
amVjdCogaW1wb3J0T2JqZWN0LCBXYXNtOjpDcmVhdGlvbk1vZGUgY3JlYXRpb25Nb2RlKQogewog
ICAgIG1faW5zdGFuY2UtPmZpbmFsaXplQ3JlYXRpb24odGhpcywgd2FzbUNvZGVCbG9jay5jb3B5
UmVmKCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJs
eUluc3RhbmNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
SlNXZWJBc3NlbWJseUluc3RhbmNlLmgJKHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xMDUsNyArMTA1LDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBKU1dlYkFzc2VtYmx5
SW5zdGFuY2UoVk0mLCBTdHJ1Y3R1cmUqLCBSZWY8V2FzbTo6SW5zdGFuY2U+JiYpOwogICAgIHZv
aWQgZmluaXNoQ3JlYXRpb24oVk0mLCBKU1dlYkFzc2VtYmx5TW9kdWxlKiwgV2ViQXNzZW1ibHlN
b2R1bGVSZWNvcmQqKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNs
b3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIFJlZjxXYXNt
OjpJbnN0YW5jZT4gbV9pbnN0YW5jZTsKICAgICBWTSogbV92bTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNZW1vcnkuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNZW1vcnkuY3BwCShy
ZXZpc2lvbiAyNzIyOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFz
c2VtYmx5TWVtb3J5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU5LDcgKzE1OSw4IEBAIHZvaWQg
SlNXZWJBc3NlbWJseU1lbW9yeTo6ZGVzdHJveShKU0NlbGwKICAgICBtZW1vcnktPkpTV2ViQXNz
ZW1ibHlNZW1vcnk6On5KU1dlYkFzc2VtYmx5TWVtb3J5KCk7CiB9CiAKLXZvaWQgSlNXZWJBc3Nl
bWJseU1lbW9yeTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNp
dG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNXZWJBc3NlbWJseU1lbW9y
eTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewog
ICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNXZWJBc3NlbWJseU1lbW9yeSo+KGNlbGwp
OwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAg
LTE2OSw2ICsxNzAsOCBAQCB2b2lkIEpTV2ViQXNzZW1ibHlNZW1vcnk6OnZpc2l0Q2hpbGRyZW4o
CiAgICAgdmlzaXRvci5yZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQodGhpc09iamVjdC0+bWVtb3J5
KCkuc2l6ZSgpKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTV2ViQXNzZW1ibHlNZW1v
cnkpOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJM
WSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNZW1v
cnkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFz
c2VtYmx5TWVtb3J5LmgJKHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNZW1vcnkuaAkod29ya2luZyBjb3B5KQpAQCAtNjMsNyAr
NjMsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIEpTV2ViQXNzZW1ibHlNZW1vcnkoVk0mLCBT
dHJ1Y3R1cmUqKTsKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7Ci0gICAgc3RhdGljIHZv
aWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklT
SVRfQ0hJTERSRU47CiAKICAgICBSZWY8V2FzbTo6TWVtb3J5PiBtX21lbW9yeTsKICAgICBXcml0
ZUJhcnJpZXI8SlNBcnJheUJ1ZmZlcj4gbV9idWZmZXJXcmFwcGVyOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5jcHAJ
KHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2Vi
QXNzZW1ibHlNb2R1bGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjQsNyArMTI0LDggQEAgdm9p
ZCBKU1dlYkFzc2VtYmx5TW9kdWxlOjpzZXRDb2RlQmxvY2soVgogICAgIG1fY29kZUJsb2Nrc1tz
dGF0aWNfY2FzdDxzaXplX3Q+KG1vZGUpXS5zZXQodm0sIHRoaXMsIGNvZGVCbG9jayk7CiB9CiAK
LXZvaWQgSlNXZWJBc3NlbWJseU1vZHVsZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNX
ZWJBc3NlbWJseU1vZHVsZTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9y
JiB2aXNpdG9yKQogewogICAgIEpTV2ViQXNzZW1ibHlNb2R1bGUqIHRoaXNPYmplY3QgPSBqc0Nh
c3Q8SlNXZWJBc3NlbWJseU1vZHVsZSo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5I
RVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTEzNSw2ICsxMzYsOCBAQCB2b2lkIEpTV2Vi
QXNzZW1ibHlNb2R1bGU6OnZpc2l0Q2hpbGRyZW4oCiAgICAgICAgIHZpc2l0b3IuYXBwZW5kKHRo
aXNPYmplY3QtPm1fY29kZUJsb2Nrc1tpXSk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihK
U1dlYkFzc2VtYmx5TW9kdWxlKTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBF
TkFCTEUoV0VCQVNTRU1CTFkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9K
U1dlYkFzc2VtYmx5TW9kdWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5oCShyZXZpc2lvbiAyNzIyOTcpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTgwLDcgKzgwLDcgQEAgcHJpdmF0ZToKIAogICAgIEpTV2ViQXNzZW1ibHlNb2R1
bGUoVk0mLCBTdHJ1Y3R1cmUqLCBSZWY8V2FzbTo6TW9kdWxlPiYmKTsKICAgICB2b2lkIGZpbmlz
aENyZWF0aW9uKFZNJik7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBT
bG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBSZWY8V2Fz
bTo6TW9kdWxlPiBtX21vZHVsZTsKICAgICBXcml0ZUJhcnJpZXI8U3ltYm9sVGFibGU+IG1fZXhw
b3J0U3ltYm9sVGFibGU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dl
YkFzc2VtYmx5VGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL2pzL0pTV2ViQXNzZW1ibHlUYWJsZS5jcHAJKHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlUYWJsZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTcyLDcgKzcyLDggQEAgdm9pZCBKU1dlYkFzc2VtYmx5VGFibGU6OmRlc3Ryb3ko
SlNDZWxsKgogICAgIHN0YXRpY19jYXN0PEpTV2ViQXNzZW1ibHlUYWJsZSo+KGNlbGwpLT5KU1dl
YkFzc2VtYmx5VGFibGU6On5KU1dlYkFzc2VtYmx5VGFibGUoKTsKIH0KIAotdm9pZCBKU1dlYkFz
c2VtYmx5VGFibGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlz
aXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTV2ViQXNzZW1ibHlUYWJs
ZTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewog
ICAgIEpTV2ViQXNzZW1ibHlUYWJsZSogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1dlYkFzc2VtYmx5
VGFibGUqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3Qs
IGluZm8oKSk7CkBAIC04MSw2ICs4Miw4IEBAIHZvaWQgSlNXZWJBc3NlbWJseVRhYmxlOjp2aXNp
dENoaWxkcmVuKEoKICAgICB0aGlzT2JqZWN0LT50YWJsZSgpLT52aXNpdEFnZ3JlZ2F0ZSh2aXNp
dG9yKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTV2ViQXNzZW1ibHlUYWJsZSk7CisK
IGJvb2wgSlNXZWJBc3NlbWJseVRhYmxlOjpncm93KHVpbnQzMl90IGRlbHRhLCBKU1ZhbHVlIGRl
ZmF1bHRWYWx1ZSkKIHsKICAgICBpZiAoZGVsdGEgPT0gMCkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlUYWJsZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlUYWJsZS5oCShyZXZpc2lvbiAy
NzIyOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5VGFi
bGUuaAkod29ya2luZyBjb3B5KQpAQCAtNzAsOCArNzAsOCBAQCBwdWJsaWM6CiBwcml2YXRlOgog
ICAgIEpTV2ViQXNzZW1ibHlUYWJsZShWTSYsIFN0cnVjdHVyZSosIFJlZjxXYXNtOjpUYWJsZT4m
Jik7CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOwotICAgIHN0YXRpYyB2b2lkIHZpc2l0
Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKLQorICAgIERFQ0xBUkVfVklTSVRfQ0hJ
TERSRU47CisvLwogICAgIFJlZjxXYXNtOjpUYWJsZT4gbV90YWJsZTsKIH07CiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rp
b24uY3BwCShyZXZpc2lvbiAyNzIyOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9XZWJBc3NlbWJseUZ1bmN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUyLDcgKzQ1Miw4
IEBAIFdlYkFzc2VtYmx5RnVuY3Rpb246OldlYkFzc2VtYmx5RnVuY3Rpb24KICAgICAsIG1faW1w
b3J0YWJsZUZ1bmN0aW9uIHsgc2lnbmF0dXJlSW5kZXgsIHdhc21Ub1dhc21FbnRyeXBvaW50TG9h
ZExvY2F0aW9uIH0KIHsgfQogCi12b2lkIFdlYkFzc2VtYmx5RnVuY3Rpb246OnZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1l
IFZpc2l0b3I+Cit2b2lkIFdlYkFzc2VtYmx5RnVuY3Rpb246OnZpc2l0Q2hpbGRyZW5JbXBsKEpT
Q2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBXZWJBc3NlbWJseUZ1bmN0aW9u
KiB0aGlzT2JqZWN0ID0ganNDYXN0PFdlYkFzc2VtYmx5RnVuY3Rpb24qPihjZWxsKTsKICAgICBB
U1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC00NjEsNiAr
NDYyLDggQEAgdm9pZCBXZWJBc3NlbWJseUZ1bmN0aW9uOjp2aXNpdENoaWxkcmVuKAogICAgIHZp
c2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fanNUb1dhc21JQ0NhbGxlZSk7CiB9CiAKK0RFRklO
RV9WSVNJVF9DSElMRFJFTihXZWJBc3NlbWJseUZ1bmN0aW9uKTsKKwogdm9pZCBXZWJBc3NlbWJs
eUZ1bmN0aW9uOjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKIHsKICAgICBzdGF0aWNfY2FzdDxXZWJB
c3NlbWJseUZ1bmN0aW9uKj4oY2VsbCktPldlYkFzc2VtYmx5RnVuY3Rpb246On5XZWJBc3NlbWJs
eUZ1bmN0aW9uKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3Nl
bWJseUZ1bmN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
anMvV2ViQXNzZW1ibHlGdW5jdGlvbi5oCShyZXZpc2lvbiAyNzIyOTcpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmgJKHdvcmtpbmcgY29weSkK
QEAgLTg2LDcgKzg2LDcgQEAgcHVibGljOgogICAgIFdhc206Okluc3RhbmNlKiBwcmV2aW91c0lu
c3RhbmNlKENhbGxGcmFtZSopOwogCiBwcml2YXRlOgotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hp
bGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVO
OwogICAgIFdlYkFzc2VtYmx5RnVuY3Rpb24oVk0mLCBOYXRpdmVFeGVjdXRhYmxlKiwgSlNHbG9i
YWxPYmplY3QqLCBTdHJ1Y3R1cmUqLCBXYXNtOjpDYWxsZWUmIGpzRW50cnlwb2ludCwgV2FzbVRv
V2FzbUltcG9ydGFibGVGdW5jdGlvbjo6TG9hZExvY2F0aW9uIGVudHJ5cG9pbnRMb2FkTG9jYXRp
b24sIFdhc206OlNpZ25hdHVyZUluZGV4KTsKIAogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxK
U0VudHJ5UHRyVGFnPiBqc0NhbGxFbnRyeXBvaW50U2xvdygpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbkJhc2UuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb25CYXNl
LmNwcAkocmV2aXNpb24gMjcyMjk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
V2ViQXNzZW1ibHlGdW5jdGlvbkJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0MSw4
IEBAIFdlYkFzc2VtYmx5RnVuY3Rpb25CYXNlOjpXZWJBc3NlbWJseUZ1bmMKICAgICA6IEJhc2Uo
dm0sIGV4ZWN1dGFibGUsIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKQogeyB9CiAKLXZvaWQgV2Vi
QXNzZW1ibHlGdW5jdGlvbkJhc2U6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90Vmlz
aXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFdlYkFzc2Vt
Ymx5RnVuY3Rpb25CYXNlOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3Im
IHZpc2l0b3IpCiB7CiAgICAgV2ViQXNzZW1ibHlGdW5jdGlvbkJhc2UqIHRoaXNPYmplY3QgPSBq
c0Nhc3Q8V2ViQXNzZW1ibHlGdW5jdGlvbkJhc2UqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JK
RUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC00OSw2ICs1MCw4IEBAIHZvaWQg
V2ViQXNzZW1ibHlGdW5jdGlvbkJhc2U6OnZpc2l0Q2hpbGQKICAgICB2aXNpdG9yLmFwcGVuZCh0
aGlzT2JqZWN0LT5tX2luc3RhbmNlKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKFdlYkFz
c2VtYmx5RnVuY3Rpb25CYXNlKTsKKwogdm9pZCBXZWJBc3NlbWJseUZ1bmN0aW9uQmFzZTo6Zmlu
aXNoQ3JlYXRpb24oVk0mIHZtLCBOYXRpdmVFeGVjdXRhYmxlKiBleGVjdXRhYmxlLCB1bnNpZ25l
ZCBsZW5ndGgsIGNvbnN0IFN0cmluZyYgbmFtZSwgSlNXZWJBc3NlbWJseUluc3RhbmNlKiBpbnN0
YW5jZSkKIHsKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSwgZXhlY3V0YWJsZSwgbGVuZ3Ro
LCBuYW1lKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5
RnVuY3Rpb25CYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
anMvV2ViQXNzZW1ibHlGdW5jdGlvbkJhc2UuaAkocmV2aXNpb24gMjcyMjk3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbkJhc2UuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDYsNyArNDYsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHB0cmRpZmZfdCBv
ZmZzZXRPZkluc3RhbmNlKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFdlYkFzc2VtYmx5RnVu
Y3Rpb25CYXNlLCBtX2luc3RhbmNlKTsgfQogCiBwcm90ZWN0ZWQ6Ci0gICAgc3RhdGljIHZvaWQg
dmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRf
Q0hJTERSRU47CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIE5hdGl2ZUV4ZWN1dGFibGUq
LCB1bnNpZ25lZCBsZW5ndGgsIGNvbnN0IFN0cmluZyYgbmFtZSwgSlNXZWJBc3NlbWJseUluc3Rh
bmNlKik7CiAgICAgV2ViQXNzZW1ibHlGdW5jdGlvbkJhc2UoVk0mLCBOYXRpdmVFeGVjdXRhYmxl
KiwgSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqKTsKIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmNw
cAkocmV2aXNpb24gMjcyMjk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2Vi
QXNzZW1ibHlNb2R1bGVSZWNvcmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03OCw3ICs3OCw4IEBA
IHZvaWQgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmZpbmlzaENyZWEKICAgICB9CiB9CiAKLXZv
aWQgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBT
bG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFdl
YkFzc2VtYmx5TW9kdWxlUmVjb3JkOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZp
c2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQqIHRoaXNPYmpl
Y3QgPSBqc0Nhc3Q8V2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQqPihjZWxsKTsKICAgICBBU1NFUlRf
R0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC04OCw2ICs4OSw4IEBA
IHZvaWQgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OnZpc2l0Q2hpbGQKICAgICB2aXNpdG9yLmFw
cGVuZCh0aGlzT2JqZWN0LT5tX2V4cG9ydHNPYmplY3QpOwogfQogCitERUZJTkVfVklTSVRfQ0hJ
TERSRU4oV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQpOworCiB2b2lkIFdlYkFzc2VtYmx5TW9kdWxl
UmVjb3JkOjpwcmVwYXJlTGluayhWTSYgdm0sIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogaW5zdGFu
Y2UpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoIW1faW5zdGFuY2UpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZVJlY29y
ZC5oCShyZXZpc2lvbiAyNzIyOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9X
ZWJBc3NlbWJseU1vZHVsZVJlY29yZC5oCSh3b3JraW5nIGNvcHkpCkBAIC02OSw3ICs2OSw3IEBA
IHByaXZhdGU6CiAKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTR2xvYmFsT2JqZWN0KiwgVk0m
LCBjb25zdCBXYXNtOjpNb2R1bGVJbmZvcm1hdGlvbiYpOwogCi0gICAgc3RhdGljIHZvaWQgdmlz
aXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJ
TERSRU47CiAKICAgICBXcml0ZUJhcnJpZXI8SlNXZWJBc3NlbWJseUluc3RhbmNlPiBtX2luc3Rh
bmNlOwogICAgIFdyaXRlQmFycmllcjxKU09iamVjdD4gbV9zdGFydEZ1bmN0aW9uOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2Vt
Ymx5V3JhcHBlckZ1bmN0aW9uLmNwcAkocmV2aXNpb24gMjcyMjk3KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC02Nyw3ICs2Nyw4IEBAIFN0cnVjdHVyZSogV2ViQXNzZW1ibHlXcmFwcGVyRnVu
Y3Rpb246OmMKICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwg
cHJvdG90eXBlLCBUeXBlSW5mbyhKU0Z1bmN0aW9uVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZv
KCkpOwogfQogCi12b2lkIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uOjp2aXNpdENoaWxkcmVu
KEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPgordm9pZCBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbjo6dmlzaXRDaGlsZHJlbklt
cGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFdlYkFzc2VtYmx5V3Jh
cHBlckZ1bmN0aW9uKiB0aGlzT2JqZWN0ID0ganNDYXN0PFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0
aW9uKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBp
bmZvKCkpOwpAQCAtNzYsNiArNzcsOCBAQCB2b2lkIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9u
Ojp2aXNpdENoCiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9mdW5jdGlvbik7CiB9
CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbik7CisK
IEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihjYWxsV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24s
IChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkpCiB7
CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlv
bi5oCShyZXZpc2lvbiAyNzIyOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9X
ZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC01OSw3ICs1OSw3
IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24oVk0m
LCBOYXRpdmVFeGVjdXRhYmxlKiwgSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqLCBXYXNtVG9X
YXNtSW1wb3J0YWJsZUZ1bmN0aW9uKTsKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgTmF0
aXZlRXhlY3V0YWJsZSosIHVuc2lnbmVkIGxlbmd0aCwgY29uc3QgU3RyaW5nJiBuYW1lLCBKU09i
amVjdCosIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSopOwotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hp
bGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVO
OwogCiAgICAgV3JpdGVCYXJyaWVyPEpTT2JqZWN0PiBtX2Z1bmN0aW9uOwogICAgIC8vIEl0J3Mg
c2FmZSB0byBqdXN0IGhvbGQgdGhlIHJhdyBXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9uIGJl
Y2F1c2Ugd2UgaGF2ZSBhIHJlZmVyZW5jZQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCT2JqZWN0U3RvcmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmNwcAkocmV2aXNpb24gMjcyMjk3KQor
KysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC03MjgsNyArNzI4LDkgQEAgdm9pZCBJREJPYmplY3RTdG9yZTo6cm9s
bGJhY2tGb3JWZXJzaW9uQwogICAgIH0KIH0KIAotdm9pZCBJREJPYmplY3RTdG9yZTo6dmlzaXRS
ZWZlcmVuY2VkSW5kZXhlcyhTbG90VmlzaXRvciYgdmlzaXRvcikgY29uc3QKKy8vdm9pZCBJREJP
YmplY3RTdG9yZTo6dmlzaXRSZWZlcmVuY2VkSW5kZXhlcyhTbG90VmlzaXRvciYgdmlzaXRvcikg
Y29uc3QKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIElEQk9iamVjdFN0b3JlOjp2
aXNpdFJlZmVyZW5jZWRJbmRleGVzKFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0CiB7CiAgICAgTG9j
a2VyPExvY2s+IGxvY2tlcihtX3JlZmVyZW5jZWRJbmRleExvY2spOwogICAgIGZvciAoYXV0byYg
aW5kZXggOiBtX3JlZmVyZW5jZWRJbmRleGVzLnZhbHVlcygpKQpAQCAtNzM3LDYgKzczOSw5IEBA
IHZvaWQgSURCT2JqZWN0U3RvcmU6OnZpc2l0UmVmZXJlbmNlZEluZGUKICAgICAgICAgdmlzaXRv
ci5hZGRPcGFxdWVSb290KGluZGV4LmdldCgpKTsKIH0KIAordGVtcGxhdGUgdm9pZCBJREJPYmpl
Y3RTdG9yZTo6dmlzaXRSZWZlcmVuY2VkSW5kZXhlcyhBYnN0cmFjdFNsb3RWaXNpdG9yJikgY29u
c3Q7Cit0ZW1wbGF0ZSB2b2lkIElEQk9iamVjdFN0b3JlOjp2aXNpdFJlZmVyZW5jZWRJbmRleGVz
KFNsb3RWaXNpdG9yJikgY29uc3Q7CisKIHZvaWQgSURCT2JqZWN0U3RvcmU6OnJlbmFtZVJlZmVy
ZW5jZWRJbmRleChJREJJbmRleCYgaW5kZXgsIGNvbnN0IFN0cmluZyYgbmV3TmFtZSkKIHsKICAg
ICBMT0coSW5kZXhlZERCLCAiSURCT2JqZWN0U3RvcmU6OnJlbmFtZVJlZmVyZW5jZWRJbmRleCIp
OwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmpl
Y3RTdG9yZS5oCShyZXZpc2lvbiAyNzIyOTcpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDksNyArMTA5LDgg
QEAgcHVibGljOgogICAgIHZvaWQgcmVmKCk7CiAgICAgdm9pZCBkZXJlZigpOwogCi0gICAgdm9p
ZCB2aXNpdFJlZmVyZW5jZWRJbmRleGVzKEpTQzo6U2xvdFZpc2l0b3ImKSBjb25zdDsKKy8vICAg
IHZvaWQgdmlzaXRSZWZlcmVuY2VkSW5kZXhlcyhKU0M6OlNsb3RWaXNpdG9yJikgY29uc3Q7Cisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCB2aXNpdFJlZmVyZW5jZWRJbmRleGVz
KFZpc2l0b3ImKSBjb25zdDsKICAgICB2b2lkIHJlbmFtZVJlZmVyZW5jZWRJbmRleChJREJJbmRl
eCYsIGNvbnN0IFN0cmluZyYgbmV3TmFtZSk7CiAKIHByaXZhdGU6CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb24uY3BwCShyZXZp
c2lvbiAyNzIyOTcpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFu
c2FjdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0NTUsNyArMTQ1NSw4IEBAIHZvaWQgSURC
VHJhbnNhY3Rpb246OmNvbm5lY3Rpb25DbG9zZWRGcm8KICAgICBmaXJlT25BYm9ydCgpOwogfQog
Ci12b2lkIElEQlRyYW5zYWN0aW9uOjp2aXNpdFJlZmVyZW5jZWRPYmplY3RTdG9yZXMoSlNDOjpT
bG90VmlzaXRvciYgdmlzaXRvcikgY29uc3QKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2
b2lkIElEQlRyYW5zYWN0aW9uOjp2aXNpdFJlZmVyZW5jZWRPYmplY3RTdG9yZXMoVmlzaXRvciYg
dmlzaXRvcikgY29uc3QKIHsKICAgICBMb2NrZXI8TG9jaz4gbG9ja2VyKG1fcmVmZXJlbmNlZE9i
amVjdFN0b3JlTG9jayk7CiAgICAgZm9yIChhdXRvJiBvYmplY3RTdG9yZSA6IG1fcmVmZXJlbmNl
ZE9iamVjdFN0b3Jlcy52YWx1ZXMoKSkKQEAgLTE0NjQsNiArMTQ2NSw5IEBAIHZvaWQgSURCVHJh
bnNhY3Rpb246OnZpc2l0UmVmZXJlbmNlZE9iamUKICAgICAgICAgdmlzaXRvci5hZGRPcGFxdWVS
b290KG9iamVjdFN0b3JlLmdldCgpKTsKIH0KIAordGVtcGxhdGUgdm9pZCBJREJUcmFuc2FjdGlv
bjo6dmlzaXRSZWZlcmVuY2VkT2JqZWN0U3RvcmVzKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYg
dmlzaXRvcikgY29uc3Q7Cit0ZW1wbGF0ZSB2b2lkIElEQlRyYW5zYWN0aW9uOjp2aXNpdFJlZmVy
ZW5jZWRPYmplY3RTdG9yZXMoSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikgY29uc3Q7CisKIHZv
aWQgSURCVHJhbnNhY3Rpb246OmhhbmRsZVBlbmRpbmdPcGVyYXRpb25zKCkKIHsKICAgICBBU1NF
UlQoY2FuQ3VycmVudFRocmVhZEFjY2Vzc1RocmVhZExvY2FsRGF0YShtX2RhdGFiYXNlLT5vcmln
aW5UaHJlYWQoKSkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
VHJhbnNhY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJUcmFuc2FjdGlvbi5oCShyZXZpc2lvbiAyNzIyOTcpCisrKyBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
NDksNyArMTQ5LDggQEAgcHVibGljOgogCiAgICAgdm9pZCBjb25uZWN0aW9uQ2xvc2VkRnJvbVNl
cnZlcihjb25zdCBJREJFcnJvciYpOwogCi0gICAgdm9pZCB2aXNpdFJlZmVyZW5jZWRPYmplY3RT
dG9yZXMoSlNDOjpTbG90VmlzaXRvciYpIGNvbnN0OworLy8gICAgdm9pZCB2aXNpdFJlZmVyZW5j
ZWRPYmplY3RTdG9yZXMoSlNDOjpTbG90VmlzaXRvciYpIGNvbnN0OworICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFZpc2l0b3I+IHZvaWQgdmlzaXRSZWZlcmVuY2VkT2JqZWN0U3RvcmVzKFZpc2l0b3Im
KSBjb25zdDsKIAogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBzdGQ6OmF0b21pYzx1bnNpZ25l
ZD4gbnVtYmVyT2ZJREJUcmFuc2FjdGlvbnM7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViYXVkaW8vQXVkaW9CdWZmZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViYXVkaW8vQXVkaW9CdWZmZXIuY3BwCShyZXZpc2lvbiAyNzIyOTcpCisrKyBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQnVmZmVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTU0LDEyICsxNTQsMTcgQEAgRXhjZXB0aW9uT3I8SlNDOjpKU1ZhbHVlPiBBdWRp
b0J1ZmZlcjo6ZwogICAgIHJldHVybiBjb25zdHJ1Y3RKU0FycmF5KCk7CiB9CiAKLXZvaWQgQXVk
aW9CdWZmZXI6OnZpc2l0Q2hhbm5lbFdyYXBwZXJzKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3Ip
CisvL3ZvaWQgQXVkaW9CdWZmZXI6OnZpc2l0Q2hhbm5lbFdyYXBwZXJzKEpTQzo6U2xvdFZpc2l0
b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBBdWRpb0J1ZmZl
cjo6dmlzaXRDaGFubmVsV3JhcHBlcnMoVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBmb3IgKGF1
dG8mIGNoYW5uZWxXcmFwcGVyIDogbV9jaGFubmVsV3JhcHBlcnMpCiAgICAgICAgIGNoYW5uZWxX
cmFwcGVyLnZpc2l0KHZpc2l0b3IpOwogfQogCit0ZW1wbGF0ZSB2b2lkIEF1ZGlvQnVmZmVyOjp2
aXNpdENoYW5uZWxXcmFwcGVycyhKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRl
IHZvaWQgQXVkaW9CdWZmZXI6OnZpc2l0Q2hhbm5lbFdyYXBwZXJzKEpTQzo6U2xvdFZpc2l0b3Im
KTsKKwogUmVmUHRyPEZsb2F0MzJBcnJheT4gQXVkaW9CdWZmZXI6OmNoYW5uZWxEYXRhKHVuc2ln
bmVkIGNoYW5uZWxJbmRleCkKIHsKICAgICBpZiAoY2hhbm5lbEluZGV4ID49IG1fY2hhbm5lbHMu
c2l6ZSgpKQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0J1ZmZl
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9C
dWZmZXIuaAkocmV2aXNpb24gMjcyMjk3KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJh
dWRpby9BdWRpb0J1ZmZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC03NSw3ICs3NSw4IEBAIHB1Ymxp
YzoKIAogICAgIHNpemVfdCBtZW1vcnlDb3N0KCkgY29uc3Q7CiAKLSAgICB2b2lkIHZpc2l0Q2hh
bm5lbFdyYXBwZXJzKEpTQzo6U2xvdFZpc2l0b3ImKTsKKy8vICAgIHZvaWQgdmlzaXRDaGFubmVs
V3JhcHBlcnMoSlNDOjpTbG90VmlzaXRvciYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0
b3I+IHZvaWQgdmlzaXRDaGFubmVsV3JhcHBlcnMoVmlzaXRvciYpOwogICAgIAogcHJpdmF0ZToK
ICAgICBBdWRpb0J1ZmZlcih1bnNpZ25lZCBudW1iZXJPZkNoYW5uZWxzLCBzaXplX3QgbGVuZ3Ro
LCBmbG9hdCBzYW1wbGVSYXRlLCBMZWdhY3lQcmV2ZW50RGV0YWNoaW5nID0gTGVnYWN5UHJldmVu
dERldGFjaGluZzo6Tm8pOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvRE9NR0NP
dXRwdXRDb25zdHJhaW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9ET01HQ091dHB1dENvbnN0cmFpbnQuY3BwCShyZXZpc2lvbiAyNzIyOTcpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9ET01HQ091dHB1dENvbnN0cmFpbnQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00OSw3ICs0OSw3IEBAIERPTUdDT3V0cHV0Q29uc3RyYWludDo6fkRPTUdDT3V0
cHV0Q29uc3QKIHsKIH0KIAotdm9pZCBET01HQ091dHB1dENvbnN0cmFpbnQ6OmV4ZWN1dGVJbXBs
KFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBET01HQ091dHB1dENvbnN0cmFpbnQ6OmV4ZWN1
dGVJbXBsKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSGVhcCYgaGVhcCA9
IG1fdm0uaGVhcDsKICAgICAKQEAgLTYwLDggKzYwLDggQEAgdm9pZCBET01HQ091dHB1dENvbnN0
cmFpbnQ6OmV4ZWN1dGVJbXBsKAogICAgIAogICAgIG1fY2xpZW50RGF0YS5mb3JFYWNoT3V0cHV0
Q29uc3RyYWludFNwYWNlKAogICAgICAgICBbJl0gKFN1YnNwYWNlJiBzdWJzcGFjZSkgewotICAg
ICAgICAgICAgYXV0byBmdW5jID0gW10gKFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBIZWFwQ2VsbCog
aGVhcENlbGwsIEhlYXBDZWxsOjpLaW5kKSB7Ci0gICAgICAgICAgICAgICAgU2V0Um9vdE1hcmtS
ZWFzb25TY29wZSByb290U2NvcGUodmlzaXRvciwgU2xvdFZpc2l0b3I6OlJvb3RNYXJrUmVhc29u
OjpET01HQ091dHB1dCk7CisgICAgICAgICAgICBhdXRvIGZ1bmMgPSBbXSAoQWJzdHJhY3RTbG90
VmlzaXRvciYgdmlzaXRvciwgSGVhcENlbGwqIGhlYXBDZWxsLCBIZWFwQ2VsbDo6S2luZCkgewor
ICAgICAgICAgICAgICAgIFNldFJvb3RNYXJrUmVhc29uU2NvcGUgcm9vdFNjb3BlKHZpc2l0b3Is
IEFic3RyYWN0U2xvdFZpc2l0b3I6OlJvb3RNYXJrUmVhc29uOjpET01HQ091dHB1dCk7CiAgICAg
ICAgICAgICAgICAgSlNDZWxsKiBjZWxsID0gc3RhdGljX2Nhc3Q8SlNDZWxsKj4oaGVhcENlbGwp
OwogICAgICAgICAgICAgICAgIGNlbGwtPm1ldGhvZFRhYmxlKHZpc2l0b3Iudm0oKSktPnZpc2l0
T3V0cHV0Q29uc3RyYWludHMoY2VsbCwgdmlzaXRvcik7CiAgICAgICAgICAgICB9OwpJbmRleDog
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvRE9NR0NPdXRwdXRDb25zdHJhaW50LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvRE9NR0NPdXRwdXRDb25zdHJhaW50
LmgJKHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0RPTUdD
T3V0cHV0Q29uc3RyYWludC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Miw3ICs0Miw3IEBAIHB1Ymxp
YzoKICAgICB+RE9NR0NPdXRwdXRDb25zdHJhaW50KCk7CiAgICAgCiBwcm90ZWN0ZWQ6Ci0gICAg
dm9pZCBleGVjdXRlSW1wbChKU0M6OlNsb3RWaXNpdG9yJikgb3ZlcnJpZGU7CisgICAgdm9pZCBl
eGVjdXRlSW1wbChKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKSBvdmVycmlkZTsKIAogcHJpdmF0
ZToKICAgICBKU0M6OlZNJiBtX3ZtOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNBYm9ydENvbnRyb2xsZXJDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTQWJvcnRDb250cm9sbGVyQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcyMjk3
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNBYm9ydENvbnRyb2xsZXJDdXN0b20u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw5ICsyOCwxNCBAQAogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLXZvaWQgSlNBYm9ydENvbnRyb2xsZXI6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpT
Qzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3ZvaWQgSlNBYm9ydENvbnRyb2xsZXI6OnZpc2l0
QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0
eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0Fib3J0Q29udHJvbGxlcjo6dmlzaXRBZGRpdGlvbmFs
Q2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qo
JndyYXBwZWQoKS5zaWduYWwoKSk7CiB9CiAKK3RlbXBsYXRlIHZvaWQgSlNBYm9ydENvbnRyb2xs
ZXI6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpOwor
dGVtcGxhdGUgdm9pZCBKU0Fib3J0Q29udHJvbGxlcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4o
SlNDOjpTbG90VmlzaXRvciYpOworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Fib3J0U2lnbmFsQ3VzdG9tLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Fib3J0U2lnbmFsQ3VzdG9tLmNwcAko
cmV2aXNpb24gMjcyMjk3KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNBYm9ydFNp
Z25hbEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDcgQEAKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi1ib29sIEpTQWJvcnRTaWduYWxPd25lcjo6aXNSZWFjaGFibGVGcm9t
T3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBKU0M6
OlNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQorYm9vbCBKU0Fib3J0
U2lnbmFsT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6
VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9y
LCBjb25zdCBjaGFyKiogcmVhc29uKQogewogICAgIGF1dG8mIGFib3J0U2lnbmFsID0gSlNDOjpq
c0Nhc3Q8SlNBYm9ydFNpZ25hbCo+KGhhbmRsZS5zbG90KCktPmFzQ2VsbCgpKS0+d3JhcHBlZCgp
OwogICAgIGlmIChhYm9ydFNpZ25hbC5pc0ZpcmluZ0V2ZW50TGlzdGVuZXJzKCkpIHsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXR0ckN1c3RvbS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNBdHRyQ3VzdG9tLmNwcAkocmV2aXNpb24g
MjcyMjk3KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNBdHRyQ3VzdG9tLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzMsMTAgKzMzLDE1IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAotdm9pZCBKU0F0dHI6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3Im
IHZpc2l0b3IpCisvL3ZvaWQgSlNBdHRyOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNs
b3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNB
dHRyOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGlm
IChFbGVtZW50KiBlbGVtZW50ID0gd3JhcHBlZCgpLm93bmVyRWxlbWVudCgpKQogICAgICAgICB2
aXNpdG9yLmFkZE9wYXF1ZVJvb3Qocm9vdChlbGVtZW50KSk7CiB9CiAKK3RlbXBsYXRlIHZvaWQg
SlNBdHRyOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3Im
KTsKK3RlbXBsYXRlIHZvaWQgSlNBdHRyOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNs
b3RWaXNpdG9yJik7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTQXVkaW9CdWZmZXJDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXVkaW9CdWZmZXJDdXN0b20uY3BwCShyZXZpc2lv
biAyNzIyOTcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0F1ZGlvQnVmZmVyQ3Vz
dG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsMTEgKzMxLDE2IEBACiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCi12b2lkIEpTQXVkaW9CdWZmZXI6OnZpc2l0
QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy92b2lkIEpTQXVkaW9C
dWZmZXI6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVt
cGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNBdWRpb0J1ZmZlcjo6dmlzaXRBZGRpdGlv
bmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB3cmFwcGVkKCkudmlzaXRDaGFu
bmVsV3JhcHBlcnModmlzaXRvcik7CiB9CiAKK3RlbXBsYXRlIHZvaWQgSlNBdWRpb0J1ZmZlcjo6
dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oQWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUg
dm9pZCBKU0F1ZGlvQnVmZmVyOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYp
OworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoV0VCX0FVRElP
KQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNBdWRpb1RyYWNrQ3VzdG9tLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0F1ZGlvVHJhY2tD
dXN0b20uY3BwCShyZXZpc2lvbiAyNzIyOTcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0F1ZGlvVHJhY2tDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSwxMSArMzUsMTYg
QEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKLXZvaWQgSlNB
dWRpb1RyYWNrOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikK
Ky8vdm9pZCBKU0F1ZGlvVHJhY2s6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9y
JiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNBdWRpb1RyYWNr
Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHZpc2l0
b3IuYWRkT3BhcXVlUm9vdChyb290KCZ3cmFwcGVkKCkpKTsKIH0KIAordGVtcGxhdGUgdm9pZCBK
U0F1ZGlvVHJhY2s6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0b3Im
KTsKK3RlbXBsYXRlIHZvaWQgSlNBdWRpb1RyYWNrOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihT
bG90VmlzaXRvciYpOworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZgpJbmRleDog
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNBdWRpb1RyYWNrTGlzdEN1c3RvbS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNBdWRpb1RyYWNrTGlzdEN1
c3RvbS5jcHAJKHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTQXVkaW9UcmFja0xpc3RDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiwxMSArMzYs
MTYgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKLXZvaWQg
SlNBdWRpb1RyYWNrTGlzdDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZp
c2l0b3IpCisvL3ZvaWQgSlNBdWRpb1RyYWNrTGlzdDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4o
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBK
U0F1ZGlvVHJhY2tMaXN0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9y
KQogewogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChyb290KHdyYXBwZWQoKS5lbGVtZW50KCkp
KTsKIH0KIAordGVtcGxhdGUgdm9pZCBKU0F1ZGlvVHJhY2tMaXN0Ojp2aXNpdEFkZGl0aW9uYWxD
aGlsZHJlbihBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTQXVkaW9UcmFj
a0xpc3Q6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CisKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0F1ZGlvV29ya2xldFByb2Nlc3NvckN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNBdWRpb1dvcmtsZXRQcm9jZXNzb3JDdXN0b20uY3BwCShy
ZXZpc2lvbiAyNzIyOTcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0F1ZGlvV29y
a2xldFByb2Nlc3NvckN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDkgQEAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKLXZvaWQgSlNBdWRp
b1dvcmtsZXRQcm9jZXNzb3I6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQorLy92b2lkIEpTQXVkaW9Xb3JrbGV0UHJvY2Vzc29yOjp2aXNpdEFkZGl0aW9uYWxD
aGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+
Cit2b2lkIEpTQXVkaW9Xb3JrbGV0UHJvY2Vzc29yOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihW
aXNpdG9yJiB2aXNpdG9yKQogewogICAgIGF1dG8mIHByb2Nlc3NvciA9IHdyYXBwZWQoKTsKICAg
ICBwcm9jZXNzb3IuanNJbnB1dHNXcmFwcGVyKCkudmlzaXQodmlzaXRvcik7CkBAIC0zOSw2ICs0
MSw5IEBAIHZvaWQgSlNBdWRpb1dvcmtsZXRQcm9jZXNzb3I6OnZpc2l0QWRkaXQKICAgICBwcm9j
ZXNzb3IuanNQYXJhbVZhbHVlc1dyYXBwZXIoKS52aXNpdCh2aXNpdG9yKTsKIH0KIAordGVtcGxh
dGUgdm9pZCBKU0F1ZGlvV29ya2xldFByb2Nlc3Nvcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4o
QWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU0F1ZGlvV29ya2xldFByb2Nl
c3Nvcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKKwogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQl9BVURJTykKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ1NTUnVsZUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDU1NSdWxlQ3VzdG9tLmNwcAkocmV2aXNpb24g
MjcyMjk3KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDU1NSdWxlQ3VzdG9tLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNTEsMTEgKzUxLDE2IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCi12b2lkIEpTQ1NTUnVsZTo6dmlzaXRBZGRpdGlvbmFs
Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3ZvaWQgSlNDU1NSdWxlOjp2aXNpdEFk
ZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1l
IFZpc2l0b3I+Cit2b2lkIEpTQ1NTUnVsZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRv
ciYgdmlzaXRvcikKIHsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qocm9vdCgmd3JhcHBlZCgp
KSk7CiB9CiAKK3RlbXBsYXRlIHZvaWQgSlNDU1NSdWxlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJl
bihBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTQ1NTUnVsZTo6dmlzaXRB
ZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKKwogSlNWYWx1ZSB0b0pTTmV3bHlDcmVh
dGVkKEpTR2xvYmFsT2JqZWN0KiwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVm
PENTU1J1bGU+JiYgcnVsZSkKIHsKICAgICBzd2l0Y2ggKHJ1bGUtPnR5cGUoKSkgewpJbmRleDog
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDU1NSdWxlTGlzdEN1c3RvbS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDU1NSdWxlTGlzdEN1c3RvbS5j
cHAJKHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ1NT
UnVsZUxpc3RDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3ICszNiw3IEBACiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCi1ib29sIEpTQ1NTUnVsZUxp
c3RPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtu
b3duPiBoYW5kbGUsIHZvaWQqLCBTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJl
YXNvbikKK2Jvb2wgSlNDU1NSdWxlTGlzdE93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290
cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIEFic3RyYWN0U2xvdFZp
c2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCiB7CiAgICAgSlNDU1NSdWxlTGlz
dCoganNDU1NSdWxlTGlzdCA9IGpzQ2FzdDxKU0NTU1J1bGVMaXN0Kj4oaGFuZGxlLnNsb3QoKS0+
YXNDZWxsKCkpOwogICAgIGlmICghanNDU1NSdWxlTGlzdC0+aGFzQ3VzdG9tUHJvcGVydGllcyhq
c0NTU1J1bGVMaXN0LT52bSgpKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
Q1NTU3R5bGVEZWNsYXJhdGlvbkN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNDU1NTdHlsZURlY2xhcmF0aW9uQ3VzdG9tLmNwcAkocmV2aXNpb24g
MjcyMjk3KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDU1NTdHlsZURlY2xhcmF0
aW9uQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTEsOSArNTEsMTQgQEAgdm9pZCogcm9v
dChDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSkKICAgICByZXR1cm4gc3R5bGU7CiB9CiAKLXZv
aWQgSlNDU1NTdHlsZURlY2xhcmF0aW9uOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90Vmlz
aXRvciYgdmlzaXRvcikKKy8vdm9pZCBKU0NTU1N0eWxlRGVjbGFyYXRpb246OnZpc2l0QWRkaXRp
b25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlz
aXRvcj4KK3ZvaWQgSlNDU1NTdHlsZURlY2xhcmF0aW9uOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJl
bihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChyb290KCZ3
cmFwcGVkKCkpKTsKIH0KIAordGVtcGxhdGUgdm9pZCBKU0NTU1N0eWxlRGVjbGFyYXRpb246OnZp
c2l0QWRkaXRpb25hbENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZv
aWQgSlNDU1NTdHlsZURlY2xhcmF0aW9uOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90Vmlz
aXRvciYpOworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0NhbGxiYWNrRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNDYWxsYmFja0RhdGEuY3BwCShyZXZpc2lvbiAyNzIyOTcpCisrKyBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NhbGxiYWNrRGF0YS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTk1LDEyICs5NSwxNiBAQCBKU1ZhbHVlIEpTQ2FsbGJhY2tEYXRhOjppbnZva2VDYWxs
YmFjayhKCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotdm9pZCBKU0NhbGxiYWNrRGF0YVdlYWs6
OnZpc2l0SlNGdW5jdGlvbihKU0M6OlNsb3RWaXNpdG9yJiB2aXN0b3IpCit0ZW1wbGF0ZTx0eXBl
bmFtZSBWaXNpdG9yPgordm9pZCBKU0NhbGxiYWNrRGF0YVdlYWs6OnZpc2l0SlNGdW5jdGlvbihW
aXNpdG9yJiB2aXNpdG9yKQogewotICAgIHZpc3Rvci5hcHBlbmQobV9jYWxsYmFjayk7CisgICAg
dmlzaXRvci5hcHBlbmQobV9jYWxsYmFjayk7CiB9CiAKLWJvb2wgSlNDYWxsYmFja0RhdGFXZWFr
OjpXZWFrT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6
VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFy
KiogcmVhc29uKQordGVtcGxhdGUgdm9pZCBKU0NhbGxiYWNrRGF0YVdlYWs6OnZpc2l0SlNGdW5j
dGlvbihKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNDYWxsYmFj
a0RhdGFXZWFrOjp2aXNpdEpTRnVuY3Rpb24oSlNDOjpTbG90VmlzaXRvciYpOworCitib29sIEpT
Q2FsbGJhY2tEYXRhV2Vhazo6V2Vha093bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhK
U0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0LCBBYnN0cmFjdFNsb3RWaXNp
dG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQogewogICAgIGlmIChVTkxJS0VMWShy
ZWFzb24pKQogICAgICAgICAqcmVhc29uID0gIkNvbnRleHQgaXMgb3BhcXVlIHJvb3QiOyAvLyBG
SVhNRTogd2hhdCBpcyB0aGUgY29udGV4dC4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTQ2FsbGJhY2tEYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNDYWxsYmFja0RhdGEuaAkocmV2aXNpb24gMjcyMjk3KQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNDYWxsYmFja0RhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMTEzLDEx
ICsxMTMsMTIgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gSlNDYWxsYmFja0RhdGE6Omludm9r
ZUNhbGxiYWNrKCpnbG9iYWxPYmplY3QsIGNhbGxiYWNrKCksIHRoaXNWYWx1ZSwgYXJncywgY2Fs
bGJhY2tUeXBlLCBmdW5jdGlvbk5hbWUsIHJldHVybmVkRXhjZXB0aW9uKTsKICAgICB9CiAKLSAg
ICB2b2lkIHZpc2l0SlNGdW5jdGlvbihKU0M6OlNsb3RWaXNpdG9yJik7CisvLyAgICB2b2lkIHZp
c2l0SlNGdW5jdGlvbihKU0M6OlNsb3RWaXNpdG9yJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
VmlzaXRvcj4gdm9pZCB2aXNpdEpTRnVuY3Rpb24oVmlzaXRvciYpOwogCiBwcml2YXRlOgogICAg
IGNsYXNzIFdlYWtPd25lciA6IHB1YmxpYyBKU0M6OldlYWtIYW5kbGVPd25lciB7Ci0gICAgICAg
IGJvb2wgaXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3du
Piwgdm9pZCogY29udGV4dCwgSlNDOjpTbG90VmlzaXRvciYsIGNvbnN0IGNoYXIqKikgb3ZlcnJp
ZGU7CisgICAgICAgIGJvb2wgaXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8
SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiwg
Y29uc3QgY2hhcioqKSBvdmVycmlkZTsKICAgICB9OwogICAgIFdlYWtPd25lciBtX3dlYWtPd25l
cjsKICAgICBKU0M6OldlYWs8SlNDOjpKU09iamVjdD4gbV9jYWxsYmFjazsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQ3VzdG9tLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NhbnZhc1JlbmRl
cmluZ0NvbnRleHQyREN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQ3VzdG9tLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjQsNyArMjQsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWJv
b2wgSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVl
Um9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBKU0M6OlNsb3RW
aXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQorYm9vbCBKU0NhbnZhc1JlbmRl
cmluZ0NvbnRleHQyRE93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRs
ZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYg
dmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikKIHsKICAgICBpZiAoVU5MSUtFTFkocmVhc29u
KSkKICAgICAgICAgKnJlYXNvbiA9ICJDYW52YXMgaXMgb3BhcXVlIHJvb3QiOwpAQCAtMzQsOSAr
MzQsMTQgQEAgYm9vbCBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRE93bmVyOjppcwogICAgIHJl
dHVybiB2aXNpdG9yLmNvbnRhaW5zT3BhcXVlUm9vdChyb290KTsKIH0KIAotdm9pZCBKU0NhbnZh
c1JlbmRlcmluZ0NvbnRleHQyRDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90Vmlz
aXRvciYgdmlzaXRvcikKKy8vdm9pZCBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6dmlzaXRB
ZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5
cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjp2aXNpdEFk
ZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHZpc2l0b3IuYWRkT3Bh
cXVlUm9vdChyb290KHdyYXBwZWQoKS5jYW52YXMoKSkpOwogfQogCit0ZW1wbGF0ZSB2b2lkIEpT
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OkFi
c3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNDYW52YXNSZW5kZXJpbmdDb250
ZXh0MkQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImKTsKKwogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlND
dXN0b21FdmVudEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNDdXN0b21FdmVudEN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9tRXZlbnRDdXN0b20uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00MiwxMCArNDIsMTUgQEAgSlNDOjpKU1ZhbHVlIEpTQ3VzdG9tRXZlbnQ6OmRldGFp
bChKU0M6OgogICAgIH0pOwogfQogCi12b2lkIEpTQ3VzdG9tRXZlbnQ6OnZpc2l0QWRkaXRpb25h
bENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3ZvaWQgSlNDdXN0b21FdmVu
dDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3Rl
bXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTQ3VzdG9tRXZlbnQ6OnZpc2l0QWRkaXRp
b25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgd3JhcHBlZCgpLmRldGFpbCgp
LnZpc2l0KHZpc2l0b3IpOwogICAgIHdyYXBwZWQoKS5jYWNoZWREZXRhaWwoKS52aXNpdCh2aXNp
dG9yKTsKIH0KIAordGVtcGxhdGUgdm9pZCBKU0N1c3RvbUV2ZW50Ojp2aXNpdEFkZGl0aW9uYWxD
aGlsZHJlbihKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNDdXN0
b21FdmVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYpOworCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0RPTUJ1aWx0aW5Db25zdHJ1Y3RvckJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTRE9NQnVpbHRpbkNvbnN0cnVjdG9yQmFzZS5jcHAJKHJldmlzaW9u
IDI3MjI5NykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQnVpbHRpbkNvbnN0
cnVjdG9yQmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDcgKzQ1LDggQEAgdm9pZCBKU0RP
TUJ1aWx0aW5Db25zdHJ1Y3RvckJhc2U6OmNhbGxGdQogICAgIEpTQzo6Y2FsbCgmbGV4aWNhbEds
b2JhbE9iamVjdCwgJmZ1bmN0aW9uLCBjYWxsRGF0YSwgJnRoaXNPYmplY3QsIGFyZ3VtZW50cyk7
CiB9CiAKLXZvaWQgSlNET01CdWlsdGluQ29uc3RydWN0b3JCYXNlOjp2aXNpdENoaWxkcmVuKEpT
Qzo6SlNDZWxsKiBjZWxsLCBKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlw
ZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNET01CdWlsdGluQ29uc3RydWN0b3JCYXNlOjp2aXNpdENo
aWxkcmVuSW1wbChKU0M6OkpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBh
dXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTRE9NQnVpbHRpbkNvbnN0cnVjdG9yQmFzZSo+KGNl
bGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsK
QEAgLTUzLDYgKzU0LDggQEAgdm9pZCBKU0RPTUJ1aWx0aW5Db25zdHJ1Y3RvckJhc2U6OnZpc2l0
QwogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1faW5pdGlhbGl6ZUZ1bmN0aW9uKTsK
IH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTRE9NQnVpbHRpbkNvbnN0cnVjdG9yQmFzZSk7
CisKIEpTQzo6SXNvU3Vic3BhY2UqIEpTRE9NQnVpbHRpbkNvbnN0cnVjdG9yQmFzZTo6c3Vic3Bh
Y2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQogewogICAgIHJldHVybiAmc3RhdGljX2Nhc3Q8SlNWTUNs
aWVudERhdGEqPih2bS5jbGllbnREYXRhKS0+ZG9tQnVpbHRpbkNvbnN0cnVjdG9yU3BhY2UoKTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQnVpbHRpbkNvbnN0cnVjdG9y
QmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQnVp
bHRpbkNvbnN0cnVjdG9yQmFzZS5oCShyZXZpc2lvbiAyNzIyOTcpCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0RPTUJ1aWx0aW5Db25zdHJ1Y3RvckJhc2UuaAkod29ya2luZyBjb3B5
KQpAQCAtNDIsNyArNDIsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgewogICAgIH0KIAotICAgIHN0YXRp
YyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJik7Cisg
ICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIEpTQzo6SlNGdW5jdGlvbiogaW5pdGlh
bGl6ZUZ1bmN0aW9uKCk7CiAgICAgdm9pZCBzZXRJbml0aWFsaXplRnVuY3Rpb24oSlNDOjpWTSYs
IEpTQzo6SlNGdW5jdGlvbiYpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNE
T01HbG9iYWxPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTRE9NR2xvYmFsT2JqZWN0LmNwcAkocmV2aXNpb24gMjcyMjk3KQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNET01HbG9iYWxPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yMzgsNyArMjM4LDggQEAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogSlNET01HbG9iYWxPYmpl
YwogICAgIHJldHVybiBudWxscHRyOwogfQogCi12b2lkIEpTRE9NR2xvYmFsT2JqZWN0Ojp2aXNp
dENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0
eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0RPTUdsb2JhbE9iamVjdDo6dmlzaXRDaGlsZHJlbklt
cGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTRE9NR2xvYmFsT2Jq
ZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oY2VsbCk7CiAgICAg
QVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtMjYwLDYg
KzI2MSw4IEBAIHZvaWQgSlNET01HbG9iYWxPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlMKICAgICB0
aGlzT2JqZWN0LT5tX2J1aWx0aW5JbnRlcm5hbEZ1bmN0aW9ucy52aXNpdCh2aXNpdG9yKTsKIH0K
IAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTRE9NR2xvYmFsT2JqZWN0KTsKKwogdm9pZCBKU0RP
TUdsb2JhbE9iamVjdDo6cHJvbWlzZVJlamVjdGlvblRyYWNrZXIoSlNHbG9iYWxPYmplY3QqIGpz
R2xvYmFsT2JqZWN0LCBKU1Byb21pc2UqIHByb21pc2UsIEpTUHJvbWlzZVJlamVjdGlvbk9wZXJh
dGlvbiBvcGVyYXRpb24pCiB7CiAgICAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9t
dWx0aXBhZ2Uvd2ViYXBwYXBpcy5odG1sI3RoZS1ob3N0cHJvbWlzZXJlamVjdGlvbnRyYWNrZXIt
aW1wbGVtZW50YXRpb24KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR2xv
YmFsT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNE
T01HbG9iYWxPYmplY3QuaAkocmV2aXNpb24gMjcyMjk3KQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNET01HbG9iYWxPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtNjksNyArNjks
NyBAQCBwdWJsaWM6CiAgICAgLy8gTWFrZSBiaW5kaW5nIGNvZGUgZ2VuZXJhdGlvbiBlYXNpZXIu
CiAgICAgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCgpIHsgcmV0dXJuIHRoaXM7IH0K
IAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RW
aXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIERPTVdyYXBwZXJX
b3JsZCYgd29ybGQoKSB7IHJldHVybiBtX3dvcmxkLmdldCgpOyB9CiAgICAgYm9vbCB3b3JsZElz
Tm9ybWFsKCkgY29uc3QgeyByZXR1cm4gbV93b3JsZElzTm9ybWFsOyB9CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUd1YXJkZWRPYmplY3QuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUd1YXJkZWRPYmplY3QuaAkocmV2aXNpb24g
MjcyMjk3KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01HdWFyZGVkT2JqZWN0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDggQEAgcHVibGljOgogCiAgICAgYm9vbCBp
c1N1c3BlbmRlZCgpIGNvbnN0IHsgcmV0dXJuICFtX2d1YXJkZWQgfHwgIWNhbkludm9rZUNhbGxi
YWNrKCk7IH0gLy8gVGhlIHdyYXBwZXIgd29ybGQgaGFzIGdvbmUgYXdheSBvciBhY3RpdmUgRE9N
IG9iamVjdHMgaGF2ZSBiZWVuIHN1c3BlbmRlZC4KIAotICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUo
SlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikgeyB2aXNpdG9yLmFwcGVuZChtX2d1YXJkZWQpOyB9
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KKyAgICB2b2lkIHZpc2l0QWdncmVnYXRl
KFZpc2l0b3ImIHZpc2l0b3IpIHsgdmlzaXRvci5hcHBlbmQobV9ndWFyZGVkKTsgfQogCiAgICAg
SlNDOjpKU1ZhbHVlIGd1YXJkZWRPYmplY3QoKSBjb25zdCB7IHJldHVybiBtX2d1YXJkZWQuZ2V0
KCk7IH0KICAgICBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KCkgY29uc3QgeyByZXR1
cm4gbV9nbG9iYWxPYmplY3QuZ2V0KCk7IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTRE9NUXVhZEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNET01RdWFkQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcyMjk3KQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01RdWFkQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzMsNyArMzMsOSBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogdXNpbmcgbmFtZXNwYWNlIEpT
QzsKIAotdm9pZCBKU0RPTVF1YWQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9y
JiB2aXNpdG9yKQorLy92b2lkIEpTRE9NUXVhZDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xv
dFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0RP
TVF1YWQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAg
dmlzaXRvci5hZGRPcGFxdWVSb290KGNvbnN0X2Nhc3Q8RE9NUG9pbnQqPigmd3JhcHBlZCgpLnAx
KCkpKTsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QoY29uc3RfY2FzdDxET01Qb2ludCo+KCZ3
cmFwcGVkKCkucDIoKSkpOwpAQCAtNDEsNCArNDMsNyBAQCB2b2lkIEpTRE9NUXVhZDo6dmlzaXRB
ZGRpdGlvbmFsQ2hpbGRyZW4oCiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KGNvbnN0X2Nhc3Q8
RE9NUG9pbnQqPigmd3JhcHBlZCgpLnA0KCkpKTsKIH0KIAotfQordGVtcGxhdGUgdm9pZCBKU0RP
TVF1YWQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3Rl
bXBsYXRlIHZvaWQgSlNET01RdWFkOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRv
ciYpOworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0RPTVdpbmRvd0N1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dDdXN0b20uY3BwCShyZXZpc2lvbiAyNzIyOTcpCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0N1c3RvbS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTExNiw3ICsxMTYsOSBAQCBKU0NfREVGSU5FX0NVU1RPTV9HRVRURVIoanNE
T01XaW5kb3dJbnN0CiAgICAgcmV0dXJuIG5vbkNhY2hpbmdTdGF0aWNGdW5jdGlvbkdldHRlcklt
cGw8anNET01XaW5kb3dJbnN0YW5jZUZ1bmN0aW9uX3Bvc3RNZXNzYWdlLCAyPihnbG9iYWxPYmpl
Y3QsIHByb3BlcnR5TmFtZSk7CiB9CiAKLXZvaWQgSlNET01XaW5kb3c6OnZpc2l0QWRkaXRpb25h
bENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy92b2lkIEpTRE9NV2luZG93Ojp2aXNp
dEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVu
YW1lIFZpc2l0b3I+Cit2b2lkIEpTRE9NV2luZG93Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihW
aXNpdG9yJiB2aXNpdG9yKQogewogICAgIGlmIChGcmFtZSogZnJhbWUgPSB3cmFwcGVkKCkuZnJh
bWUoKSkKICAgICAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KGZyYW1lKTsKQEAgLTEyOSw2ICsx
MzEsOSBAQCB2b2lkIEpTRE9NV2luZG93Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlCiAgICAgd3Jh
cHBlZCgpLnZpc2l0SlNFdmVudExpc3RlbmVycyh2aXNpdG9yKTsKIH0KIAordGVtcGxhdGUgdm9p
ZCBKU0RPTVdpbmRvdzo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oQWJzdHJhY3RTbG90VmlzaXRv
ciYpOwordGVtcGxhdGUgdm9pZCBKU0RPTVdpbmRvdzo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4o
U2xvdFZpc2l0b3ImKTsKKwogI2lmIEVOQUJMRShVU0VSX01FU1NBR0VfSEFORExFUlMpCiBKU0Nf
REVGSU5FX0NVU1RPTV9HRVRURVIoanNET01XaW5kb3dfd2Via2l0LCAoSlNHbG9iYWxPYmplY3Qq
IGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlO
YW1lKSkKIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGVwcmVjYXRlZENT
U09NVmFsdWVDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTRGVwcmVjYXRlZENTU09NVmFsdWVDdXN0b20uY3BwCShyZXZpc2lvbiAyNzIyOTcpCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RlcHJlY2F0ZWRDU1NPTVZhbHVlQ3VzdG9t
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsNyArMzUsNyBAQAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAotYm9vbCBKU0RlcHJlY2F0ZWRDU1NPTVZhbHVlT3du
ZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4g
aGFuZGxlLCB2b2lkKiwgU2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24p
Citib29sIEpTRGVwcmVjYXRlZENTU09NVmFsdWVPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVl
Um9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBBYnN0cmFjdFNs
b3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQogewogICAgIEpTRGVwcmVj
YXRlZENTU09NVmFsdWUqIGpzQ1NTVmFsdWUgPSBqc0Nhc3Q8SlNEZXByZWNhdGVkQ1NTT01WYWx1
ZSo+KGhhbmRsZS5zbG90KCktPmFzQ2VsbCgpKTsKICAgICBpZiAoIWpzQ1NTVmFsdWUtPmhhc0N1
c3RvbVByb3BlcnRpZXMoanNDU1NWYWx1ZS0+dm0oKSkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0RvY3VtZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0RvY3VtZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gMjcyMjk3KQor
KysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNEb2N1bWVudEN1c3RvbS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTkxLDExICs5MSwxNiBAQCBKU1ZhbHVlIHRvSlMoSlNHbG9iYWxPYmplY3Qq
IGxleGljYWxHbG9iCiAgICAgcmV0dXJuIHRvSlNOZXdseUNyZWF0ZWQobGV4aWNhbEdsb2JhbE9i
amVjdCwgZ2xvYmFsT2JqZWN0LCBSZWY8RG9jdW1lbnQ+KGRvY3VtZW50KSk7CiB9CiAKLXZvaWQg
SlNEb2N1bWVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3Ip
CisvL3ZvaWQgSlNEb2N1bWVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3Im
IHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0RvY3VtZW50Ojp2
aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHZpc2l0b3Iu
YWRkT3BhcXVlUm9vdChzdGF0aWNfY2FzdDxTY3JpcHRFeGVjdXRpb25Db250ZXh0Kj4oJndyYXBw
ZWQoKSkpOwogfQogCit0ZW1wbGF0ZSB2b2lkIEpTRG9jdW1lbnQ6OnZpc2l0QWRkaXRpb25hbENo
aWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNEb2N1bWVudDo6
dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKKwogdm9pZCBKU0RvY3VtZW50
OjphbmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCiB7CiAg
ICAgQmFzZTo6YW5hbHl6ZUhlYXAoY2VsbCwgYW5hbHl6ZXIpOwpJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNFcnJvckV2ZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Vycm9yRXZlbnRDdXN0b20uY3BwCShyZXZpc2lvbiAy
NzIyOTcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Vycm9yRXZlbnRDdXN0b20u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw5ICsyOCwxNCBAQAogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLXZvaWQgSlNFcnJvckV2ZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNs
b3RWaXNpdG9yJiB2aXNpdG9yKQorLy92b2lkIEpTRXJyb3JFdmVudDo6dmlzaXRBZGRpdGlvbmFs
Q2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZp
c2l0b3I+Cit2b2lkIEpTRXJyb3JFdmVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRv
ciYgdmlzaXRvcikKIHsKICAgICB3cmFwcGVkKCkub3JpZ2luYWxFcnJvcigpLnZpc2l0KHZpc2l0
b3IpOwogfQogCit0ZW1wbGF0ZSB2b2lkIEpTRXJyb3JFdmVudDo6dmlzaXRBZGRpdGlvbmFsQ2hp
bGRyZW4oSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTRXJyb3JF
dmVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYpOworCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2
ZW50TGlzdGVuZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTRXZlbnRMaXN0ZW5lci5jcHAJKHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTRXZlbnRMaXN0ZW5lci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc4LDcg
Kzc4LDggQEAgSlNPYmplY3QqIEpTRXZlbnRMaXN0ZW5lcjo6aW5pdGlhbGl6ZUpTRgogICAgIHJl
dHVybiBudWxscHRyOwogfQogCi12b2lkIEpTRXZlbnRMaXN0ZW5lcjo6dmlzaXRKU0Z1bmN0aW9u
KFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy92b2lkIEpTRXZlbnRMaXN0ZW5lcjo6dmlzaXRKU0Z1
bmN0aW9uKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBKU0V2ZW50TGlzdGVuZXI6OnZpc2l0
SlNGdW5jdGlvbihBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIC8vIElmIG1f
d3JhcHBlciBpcyBudWxsLCB3ZSBhcmUgbm90IGtlZXBpbmcgbV9qc0Z1bmN0aW9uIGFsaXZlLgog
ICAgIGlmICghbV93cmFwcGVyKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNF
dmVudExpc3RlbmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNFdmVudExpc3RlbmVyLmgJKHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTRXZlbnRMaXN0ZW5lci5oCSh3b3JraW5nIGNvcHkpCkBAIC02Miw3ICs2Miw4
IEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICB2aXJ0dWFsIEpTQzo6SlNPYmplY3QqIGluaXRp
YWxpemVKU0Z1bmN0aW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmKSBjb25zdDsKLSAgICB2b2lk
IHZpc2l0SlNGdW5jdGlvbihKU0M6OlNsb3RWaXNpdG9yJikgZmluYWw7CisvLyAgICB2b2lkIHZp
c2l0SlNGdW5jdGlvbihKU0M6OlNsb3RWaXNpdG9yJikgZmluYWw7CisgICAgdm9pZCB2aXNpdEpT
RnVuY3Rpb24oSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJikgZmluYWw7CiAKIHByb3RlY3RlZDoK
ICAgICBKU0V2ZW50TGlzdGVuZXIoSlNDOjpKU09iamVjdCogZnVuY3Rpb24sIEpTQzo6SlNPYmpl
Y3QqIHdyYXBwZXIsIGJvb2wgaXNBdHRyaWJ1dGUsIERPTVdyYXBwZXJXb3JsZCYpOwpJbmRleDog
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudFRhcmdldEN1c3RvbS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudFRhcmdldEN1c3RvbS5j
cHAJKHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZl
bnRUYXJnZXRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Miw5ICs3MiwxNCBAQCBzdGQ6
OnVuaXF1ZV9wdHI8SlNFdmVudFRhcmdldFdyYXBwZXI+IGpzCiAgICAgcmV0dXJuIG51bGxwdHI7
CiB9CiAKLXZvaWQgSlNFdmVudFRhcmdldDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZp
c2l0b3ImIHZpc2l0b3IpCisvL3ZvaWQgSlNFdmVudFRhcmdldDo6dmlzaXRBZGRpdGlvbmFsQ2hp
bGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgor
dm9pZCBKU0V2ZW50VGFyZ2V0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNp
dG9yKQogewogICAgIHdyYXBwZWQoKS52aXNpdEpTRXZlbnRMaXN0ZW5lcnModmlzaXRvcik7CiB9
CiAKK3RlbXBsYXRlIHZvaWQgSlNFdmVudFRhcmdldDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4o
QWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU0V2ZW50VGFyZ2V0Ojp2aXNp
dEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYpOworCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0ZldGNoRXZlbnRDdXN0b20u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRmV0Y2hFdmVu
dEN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTRmV0Y2hFdmVudEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDExICszMCwx
NiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgSlNGZXRjaEV2ZW50Ojp2aXNpdEFk
ZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy92b2lkIEpTRmV0
Y2hFdmVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRv
cikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTRmV0Y2hFdmVudDo6dmlzaXRB
ZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB2aXNpdG9yLmFkZE9w
YXF1ZVJvb3QoJndyYXBwZWQoKS5yZXF1ZXN0KCkpOwogfQogCi19Cit0ZW1wbGF0ZSB2b2lkIEpT
RmV0Y2hFdmVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpBYnN0cmFjdFNsb3RWaXNp
dG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTRmV0Y2hFdmVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRy
ZW4oSlNDOjpTbG90VmlzaXRvciYpOworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRp
ZgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MQ2FudmFzRWxlbWVudEN1
c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1M
Q2FudmFzRWxlbWVudEN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTSFRNTENhbnZhc0VsZW1lbnRDdXN0b20uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zMSw5ICszMSwxNCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgSlNI
VE1MQ2FudmFzRWxlbWVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRv
ciYgdmlzaXRvcikKKy8vdm9pZCBKU0hUTUxDYW52YXNFbGVtZW50Ojp2aXNpdEFkZGl0aW9uYWxD
aGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlz
aXRvcj4KK3ZvaWQgSlNIVE1MQ2FudmFzRWxlbWVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4o
VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qoc3RhdGljX2Nh
c3Q8Q2FudmFzQmFzZSo+KCZ3cmFwcGVkKCkpKTsKIH0KIAordGVtcGxhdGUgdm9pZCBKU0hUTUxD
YW52YXNFbGVtZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OkFic3RyYWN0U2xvdFZp
c2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNIVE1MQ2FudmFzRWxlbWVudDo6dmlzaXRBZGRpdGlv
bmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYpOworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxUZW1wbGF0ZUVsZW1lbnRD
dXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRN
TFRlbXBsYXRlRWxlbWVudEN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTFRlbXBsYXRlRWxlbWVudEN1c3RvbS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM3LDEwICszNywxNSBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogdXNpbmcg
bmFtZXNwYWNlIEpTQzsKIAotdm9pZCBKU0hUTUxUZW1wbGF0ZUVsZW1lbnQ6OnZpc2l0QWRkaXRp
b25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3ZvaWQgSlNIVE1MVGVt
cGxhdGVFbGVtZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2
aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNIVE1MVGVtcGxhdGVF
bGVtZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAg
IGlmIChhdXRvKiBjb250ZW50ID0gd3JhcHBlZCgpLmNvbnRlbnRJZkF2YWlsYWJsZSgpKQogICAg
ICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qocm9vdChjb250ZW50KSk7CiB9CiAKK3RlbXBsYXRl
IHZvaWQgSlNIVE1MVGVtcGxhdGVFbGVtZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6
OkFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNIVE1MVGVtcGxhdGVFbGVt
ZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJik7CisKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSGlz
dG9yeUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNIaXN0b3J5Q3VzdG9tLmNwcAkocmV2aXNpb24gMjcyMjk3KQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNIaXN0b3J5Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQsOSAr
NDQsMTQgQEAgSlNWYWx1ZSBKU0hpc3Rvcnk6OnN0YXRlKEpTR2xvYmFsT2JqZWN0JgogICAgIH0p
OwogfQogCi12b2lkIEpTSGlzdG9yeTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0
b3ImIHZpc2l0b3IpCisvL3ZvaWQgSlNIaXN0b3J5Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihT
bG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpT
SGlzdG9yeTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAg
ICB3cmFwcGVkKCkuY2FjaGVkU3RhdGVGb3JHQygpLnZpc2l0KHZpc2l0b3IpOwogfQogCit0ZW1w
bGF0ZSB2b2lkIEpTSGlzdG9yeTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oQWJzdHJhY3RTbG90
VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU0hpc3Rvcnk6OnZpc2l0QWRkaXRpb25hbENoaWxk
cmVuKFNsb3RWaXNpdG9yJik7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCQ3Vyc29yQ3VzdG9tLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQkN1cnNvckN1c3RvbS5jcHAJKHJldmlz
aW9uIDI3MjI5NykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCQ3Vyc29yQ3Vz
dG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTAsNyArNTAsOSBAQCBKU0M6OkpTVmFsdWUgSlNJ
REJDdXJzb3I6OnByaW1hcnlLZXkoSlNDCiAgICAgfSk7CiB9CiAKLXZvaWQgSlNJREJDdXJzb3I6
OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy92b2lkIEpT
SURCQ3Vyc29yOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikK
K3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTSURCQ3Vyc29yOjp2aXNpdEFkZGl0
aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGF1dG8mIGN1cnNvciA9IHdy
YXBwZWQoKTsKICAgICBpZiAoYXV0byogcmVxdWVzdCA9IGN1cnNvci5yZXF1ZXN0KCkpCkBAIC01
OSw2ICs2MSw5IEBAIHZvaWQgSlNJREJDdXJzb3I6OnZpc2l0QWRkaXRpb25hbENoaWxkcmUKICAg
ICBjdXJzb3IucHJpbWFyeUtleVdyYXBwZXIoKS52aXNpdCh2aXNpdG9yKTsKIH0KIAordGVtcGxh
dGUgdm9pZCBKU0lEQkN1cnNvcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oQWJzdHJhY3RTbG90
VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU0lEQkN1cnNvcjo6dmlzaXRBZGRpdGlvbmFsQ2hp
bGRyZW4oU2xvdFZpc2l0b3ImKTsKKwogSlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6SlNH
bG9iYWxPYmplY3QqLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWY8SURCQ3Vy
c29yPiYmIGN1cnNvcikKIHsKICAgICBpZiAoaXM8SURCQ3Vyc29yV2l0aFZhbHVlPihjdXJzb3Ip
KQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJDdXJzb3JXaXRoVmFsdWVD
dXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURC
Q3Vyc29yV2l0aFZhbHVlQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcyMjk3KQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNJREJDdXJzb3JXaXRoVmFsdWVDdXN0b20uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00MywxMiArNDMsMTcgQEAgSlNDOjpKU1ZhbHVlIEpTSURCQ3Vyc29yV2l0aFZh
bHVlOjp2YWx1ZQogICAgIH0pOwogfQogCi12b2lkIEpTSURCQ3Vyc29yV2l0aFZhbHVlOjp2aXNp
dEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vdm9pZCBKU0lEQkN1
cnNvcldpdGhWYWx1ZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0
b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0lEQkN1cnNvcldpdGhWYWx1
ZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU0lE
QkN1cnNvcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4odmlzaXRvcik7CiAgICAgd3JhcHBlZCgp
LnZhbHVlV3JhcHBlcigpLnZpc2l0KHZpc2l0b3IpOwogfQogCit0ZW1wbGF0ZSB2b2lkIEpTSURC
Q3Vyc29yV2l0aFZhbHVlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihBYnN0cmFjdFNsb3RWaXNp
dG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTSURCQ3Vyc29yV2l0aFZhbHVlOjp2aXNpdEFkZGl0aW9u
YWxDaGlsZHJlbihTbG90VmlzaXRvciYpOworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNl
bmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTSURCSW5kZXhDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTSURCSW5kZXhDdXN0b20uY3BwCShyZXZpc2lvbiAyNzIyOTcpCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQkluZGV4Q3VzdG9tLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzQsMTEgKzM0LDE2IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBu
YW1lc3BhY2UgSlNDOwogCi12b2lkIEpTSURCSW5kZXg6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVu
KFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy92b2lkIEpTSURCSW5kZXg6OnZpc2l0QWRkaXRpb25h
bENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRv
cj4KK3ZvaWQgSlNJREJJbmRleDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlz
aXRvcikKIHsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qoc3RhdGljX2Nhc3Q8SURCSW5kZXgm
Pih3cmFwcGVkKCkpLm9iamVjdFN0b3JlQXNPcGFxdWVSb290KCkpOwogfQogCit0ZW1wbGF0ZSB2
b2lkIEpTSURCSW5kZXg6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0
b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNJREJJbmRleDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4o
U2xvdFZpc2l0b3ImKTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5B
QkxFKElOREVYRURfREFUQUJBU0UpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0lEQk9iamVjdFN0b3JlQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0lEQk9iamVjdFN0b3JlQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcyMjk3KQor
KysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJPYmplY3RTdG9yZUN1c3RvbS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM2LDExICszNiwxNiBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewog
dXNpbmcgbmFtZXNwYWNlIEpTQzsKIAotdm9pZCBKU0lEQk9iamVjdFN0b3JlOjp2aXNpdEFkZGl0
aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vdm9pZCBKU0lEQk9iamVjdFN0
b3JlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBs
YXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTSURCT2JqZWN0U3RvcmU6OnZpc2l0QWRkaXRp
b25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgc3RhdGljX2Nhc3Q8SURCT2Jq
ZWN0U3RvcmUmPih3cmFwcGVkKCkpLnZpc2l0UmVmZXJlbmNlZEluZGV4ZXModmlzaXRvcik7CiB9
CiAKLX0KK3RlbXBsYXRlIHZvaWQgSlNJREJPYmplY3RTdG9yZTo6dmlzaXRBZGRpdGlvbmFsQ2hp
bGRyZW4oQWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU0lEQk9iamVjdFN0
b3JlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYpOworCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCiAKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNJREJSZXF1ZXN0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0lEQlJlcXVlc3RDdXN0b20uY3BwCShyZXZpc2lvbiAyNzIyOTcpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQlJlcXVlc3RDdXN0b20uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC04OSwxMiArODksMTggQEAgSlNDOjpKU1ZhbHVlIEpTSURCUmVxdWVzdDo6cmVzdWx0
KEpTQzo6SgogICAgIH0pOwogfQogCi12b2lkIEpTSURCUmVxdWVzdDo6dmlzaXRBZGRpdGlvbmFs
Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3ZvaWQgSlNJREJSZXF1ZXN0Ojp2aXNp
dEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVu
YW1lIFZpc2l0b3I+Cit2b2lkIEpTSURCUmVxdWVzdDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4o
VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBhdXRvJiByZXF1ZXN0ID0gd3JhcHBlZCgpOwogICAg
IHJlcXVlc3QucmVzdWx0V3JhcHBlcigpLnZpc2l0KHZpc2l0b3IpOwogICAgIHJlcXVlc3QuY3Vy
c29yV3JhcHBlcigpLnZpc2l0KHZpc2l0b3IpOwogfQogCi19Cit0ZW1wbGF0ZSB2b2lkIEpTSURC
UmVxdWVzdDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oQWJzdHJhY3RTbG90VmlzaXRvciYpOwor
dGVtcGxhdGUgdm9pZCBKU0lEQlJlcXVlc3Q6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RW
aXNpdG9yJik7CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwogI2VuZGlmIC8vIEVOQUJMRShJ
TkRFWEVEX0RBVEFCQVNFKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJU
cmFuc2FjdGlvbkN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNJREJUcmFuc2FjdGlvbkN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjI5NykKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCVHJhbnNhY3Rpb25DdXN0b20uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNCwxMSArMzQsMTYgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5n
IG5hbWVzcGFjZSBKU0M7CiAKLXZvaWQgSlNJREJUcmFuc2FjdGlvbjo6dmlzaXRBZGRpdGlvbmFs
Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3ZvaWQgSlNJREJUcmFuc2FjdGlvbjo6
dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0
eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0lEQlRyYW5zYWN0aW9uOjp2aXNpdEFkZGl0aW9uYWxD
aGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHN0YXRpY19jYXN0PElEQlRyYW5zYWN0
aW9uJj4od3JhcHBlZCgpKS52aXNpdFJlZmVyZW5jZWRPYmplY3RTdG9yZXModmlzaXRvcik7CiB9
CiAKLX0KK3RlbXBsYXRlIHZvaWQgSlNJREJUcmFuc2FjdGlvbjo6dmlzaXRBZGRpdGlvbmFsQ2hp
bGRyZW4oQWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU0lEQlRyYW5zYWN0
aW9uOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYpOworCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCiAKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNJbnRlcnNlY3Rpb25PYnNlcnZlckN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNJbnRlcnNlY3Rpb25PYnNlcnZlckN1c3RvbS5jcHAJKHJldmlz
aW9uIDI3MjI5NykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW50ZXJzZWN0aW9u
T2JzZXJ2ZXJDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCwxMCArMzAsMTUgQEAKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIEpTSW50ZXJzZWN0aW9uT2JzZXJ2ZXI6OnZpc2l0
QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3ZvaWQgSlNJ
bnRlcnNlY3Rpb25PYnNlcnZlcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90Vmlz
aXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTSW50ZXJz
ZWN0aW9uT2JzZXJ2ZXI6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3Ip
CiB7CiAgICAgaWYgKGF1dG8qIGNhbGxiYWNrID0gd3JhcHBlZCgpLmNhbGxiYWNrQ29uY3VycmVu
dGx5KCkpCiAgICAgICAgIGNhbGxiYWNrLT52aXNpdEpTRnVuY3Rpb24odmlzaXRvcik7CiB9CiAK
LX0KK3RlbXBsYXRlIHZvaWQgSlNJbnRlcnNlY3Rpb25PYnNlcnZlcjo6dmlzaXRBZGRpdGlvbmFs
Q2hpbGRyZW4oSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTSW50
ZXJzZWN0aW9uT2JzZXJ2ZXI6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0
b3ImKTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNJbnRlcnNlY3Rpb25PYnNlcnZlckVudHJ5Q3VzdG9tLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0ludGVyc2VjdGlvbk9ic2VydmVyRW50
cnlDdXN0b20uY3BwCShyZXZpc2lvbiAyNzIyOTcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0ludGVyc2VjdGlvbk9ic2VydmVyRW50cnlDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zMCw3ICszMCw5IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBKU0ludGVy
c2VjdGlvbk9ic2VydmVyRW50cnk6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZp
c2l0b3ImIHZpc2l0b3IpCisvL3ZvaWQgSlNJbnRlcnNlY3Rpb25PYnNlcnZlckVudHJ5Ojp2aXNp
dEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8
dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNJbnRlcnNlY3Rpb25PYnNlcnZlckVudHJ5Ojp2aXNp
dEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHZpc2l0b3IuYWRk
T3BhcXVlUm9vdChyb290KHdyYXBwZWQoKS50YXJnZXQoKSkpOwogICAgIHZpc2l0b3IuYWRkT3Bh
cXVlUm9vdCh3cmFwcGVkKCkuYm91bmRpbmdDbGllbnRSZWN0KCkpOwpAQCAtMzgsNCArNDAsNyBA
QCB2b2lkIEpTSW50ZXJzZWN0aW9uT2JzZXJ2ZXJFbnRyeTo6dmlzaXRBCiAgICAgdmlzaXRvci5h
ZGRPcGFxdWVSb290KHdyYXBwZWQoKS5yb290Qm91bmRzKCkpOwogfQogCi19Cit0ZW1wbGF0ZSB2
b2lkIEpTSW50ZXJzZWN0aW9uT2JzZXJ2ZXJFbnRyeTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4o
SlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTSW50ZXJzZWN0aW9u
T2JzZXJ2ZXJFbnRyeTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYp
OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU01lc3NhZ2VDaGFubmVsQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU01lc3NhZ2VDaGFubmVsQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcy
Mjk3KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNZXNzYWdlQ2hhbm5lbEN1c3Rv
bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDcgKzMzLDkgQEAKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi12b2lkIEpTTWVzc2FnZUNoYW5uZWw6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpT
Qzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3ZvaWQgSlNNZXNzYWdlQ2hhbm5lbDo6dmlzaXRB
ZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5
cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTTWVzc2FnZUNoYW5uZWw6OnZpc2l0QWRkaXRpb25hbENo
aWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgaWYgKE1lc3NhZ2VQb3J0KiBwb3J0ID0g
d3JhcHBlZCgpLnBvcnQxKCkpCiAgICAgICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChwb3J0KTsK
QEAgLTQyLDYgKzQ0LDkgQEAgdm9pZCBKU01lc3NhZ2VDaGFubmVsOjp2aXNpdEFkZGl0aW9uYWxD
aAogICAgICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QocG9ydCk7CiB9CiAKK3RlbXBsYXRlIHZv
aWQgSlNNZXNzYWdlQ2hhbm5lbDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpBYnN0cmFj
dFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTTWVzc2FnZUNoYW5uZWw6OnZpc2l0QWRk
aXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImKTsKKwogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKENIQU5ORUxfTUVTU0FHSU5HKQpJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNNZXNzYWdlRXZlbnRDdXN0b20uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWVzc2FnZUV2ZW50Q3VzdG9tLmNwcAko
cmV2aXNpb24gMjcyMjk3KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNZXNzYWdl
RXZlbnRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MCw3ICs3MCw5IEBAIEpTQzo6SlNW
YWx1ZSBKU01lc3NhZ2VFdmVudDo6ZGF0YShKU0M6OkoKICAgICB9KTsKIH0KIAotdm9pZCBKU01l
c3NhZ2VFdmVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlz
aXRvcikKKy8vdm9pZCBKU01lc3NhZ2VFdmVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlND
OjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lk
IEpTTWVzc2FnZUV2ZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9y
KQogewogICAgIFdURjo6c3dpdGNoT24od3JhcHBlZCgpLmRhdGEoKSwgWyZ2aXNpdG9yXSAoY29u
c3QgSlNWYWx1ZUluV3JhcHBlZE9iamVjdCYgZGF0YSkgewogICAgICAgICBkYXRhLnZpc2l0KHZp
c2l0b3IpOwpAQCAtODQsNCArODYsNyBAQCB2b2lkIEpTTWVzc2FnZUV2ZW50Ojp2aXNpdEFkZGl0
aW9uYWxDaGlsCiAgICAgd3JhcHBlZCgpLmNhY2hlZFBvcnRzKCkudmlzaXQodmlzaXRvcik7CiB9
CiAKK3RlbXBsYXRlIHZvaWQgSlNNZXNzYWdlRXZlbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVu
KEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU01lc3NhZ2VFdmVu
dDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYpOworCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01lc3Nh
Z2VQb3J0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU01lc3NhZ2VQb3J0Q3VzdG9tLmNwcAkocmV2aXNpb24gMjcyMjk3KQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNNZXNzYWdlUG9ydEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMxLDExICszMSwxNiBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogdXNpbmcgbmFtZXNwYWNl
IEpTQzsKIAotdm9pZCBKU01lc3NhZ2VQb3J0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90
VmlzaXRvciYgdmlzaXRvcikKKy8vdm9pZCBKU01lc3NhZ2VQb3J0Ojp2aXNpdEFkZGl0aW9uYWxD
aGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+
Cit2b2lkIEpTTWVzc2FnZVBvcnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZp
c2l0b3IpCiB7CiAgICAgLy8gSWYgd2UgaGF2ZSBhIGxvY2FsbHkgZW50YW5nbGVkIHBvcnQsIHdl
IGNhbiBkaXJlY3RseSBtYXJrIGl0IGFzIHJlYWNoYWJsZS4gUG9ydHMgdGhhdCBhcmUgcmVtb3Rl
bHkgZW50YW5nbGVkIGFyZSBtYXJrZWQgaW4tdXNlIGJ5IG1hcmtBY3RpdmVPYmplY3RzRm9yQ29u
dGV4dCgpLgogICAgIGlmIChNZXNzYWdlUG9ydCogcG9ydCA9IHdyYXBwZWQoKS5sb2NhbGx5RW50
YW5nbGVkUG9ydCgpKQogICAgICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QocG9ydCk7CiB9CiAK
K3RlbXBsYXRlIHZvaWQgSlNNZXNzYWdlUG9ydDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oQWJz
dHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU01lc3NhZ2VQb3J0Ojp2aXNpdEFk
ZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYpOworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU011dGF0aW9uT2JzZXJ2ZXJDdXN0
b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTXV0YXRp
b25PYnNlcnZlckN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTTXV0YXRpb25PYnNlcnZlckN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM5LDEyICszOSwxNyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogdXNpbmcgbmFtZXNwYWNl
IEpTQzsKIAotdm9pZCBKU011dGF0aW9uT2JzZXJ2ZXI6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVu
KEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3ZvaWQgSlNNdXRhdGlvbk9ic2VydmVyOjp2
aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxh
dGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNNdXRhdGlvbk9ic2VydmVyOjp2aXNpdEFkZGl0
aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHdyYXBwZWQoKS5jYWxsYmFj
aygpLnZpc2l0SlNGdW5jdGlvbih2aXNpdG9yKTsKIH0KIAotYm9vbCBKU011dGF0aW9uT2JzZXJ2
ZXJPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtu
b3duPiBoYW5kbGUsIHZvaWQqLCBTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqcmVh
c29uKQordGVtcGxhdGUgdm9pZCBKU011dGF0aW9uT2JzZXJ2ZXI6OnZpc2l0QWRkaXRpb25hbENo
aWxkcmVuKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU011dGF0
aW9uT2JzZXJ2ZXI6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImKTsK
KworYm9vbCBKU011dGF0aW9uT2JzZXJ2ZXJPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9v
dHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBBYnN0cmFjdFNsb3RW
aXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKipyZWFzb24pCiB7CiAgICAgZm9yIChhdXRvKiBu
b2RlIDoganNDYXN0PEpTTXV0YXRpb25PYnNlcnZlcio+KGhhbmRsZS5zbG90KCktPmFzQ2VsbCgp
KS0+d3JhcHBlZCgpLm9ic2VydmVkTm9kZXMoKSkgewogICAgICAgICBpZiAodmlzaXRvci5jb250
YWluc09wYXF1ZVJvb3Qocm9vdChub2RlKSkpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTTXV0YXRpb25SZWNvcmRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTTXV0YXRpb25SZWNvcmRDdXN0b20uY3BwCShyZXZpc2lvbiAy
NzIyOTcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU011dGF0aW9uUmVjb3JkQ3Vz
dG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsOSArMzAsMTQgQEAKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi12b2lkIEpTTXV0YXRpb25SZWNvcmQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVu
KEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3ZvaWQgSlNNdXRhdGlvblJlY29yZDo6dmlz
aXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRl
PHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTTXV0YXRpb25SZWNvcmQ6OnZpc2l0QWRkaXRpb25h
bENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgd3JhcHBlZCgpLnZpc2l0Tm9kZXND
b25jdXJyZW50bHkodmlzaXRvcik7CiB9Ci0gICAgCisKK3RlbXBsYXRlIHZvaWQgSlNNdXRhdGlv
blJlY29yZDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9y
Jik7Cit0ZW1wbGF0ZSB2b2lkIEpTTXV0YXRpb25SZWNvcmQ6OnZpc2l0QWRkaXRpb25hbENoaWxk
cmVuKEpTQzo6U2xvdFZpc2l0b3ImKTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDog
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOYXZpZ2F0b3JDdXN0b20uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTmF2aWdhdG9yQ3VzdG9tLmNwcAko
cmV2aXNpb24gMjcyMjk3KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOYXZpZ2F0
b3JDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiwxMSArMzIsMTYgQEAKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi12b2lkIEpTTmF2aWdhdG9yOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJl
bihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy92b2lkIEpTTmF2aWdhdG9yOjp2aXNpdEFk
ZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlw
ZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNOYXZpZ2F0b3I6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVu
KFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHN0YXRpY19j
YXN0PE5hdmlnYXRvckJhc2UqPigmd3JhcHBlZCgpKSk7CiB9CiAKK3RlbXBsYXRlIHZvaWQgSlNO
YXZpZ2F0b3I6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRv
ciYpOwordGVtcGxhdGUgdm9pZCBKU05hdmlnYXRvcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4o
SlNDOjpTbG90VmlzaXRvciYpOworCiAjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKIEpTQzo6SlNW
YWx1ZSBKU05hdmlnYXRvcjo6Z2V0VXNlck1lZGlhKEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGlj
YWxHbG9iYWxPYmplY3QsIEpTQzo6Q2FsbEZyYW1lJiBjYWxsRnJhbWUpCiB7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjI5
NykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUN1c3RvbS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTc0LDcgKzc0LDggQEAgdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAogdXNpbmcg
bmFtZXNwYWNlIEhUTUxOYW1lczsKIAotc3RhdGljIGlubGluZSBib29sIGlzUmVhY2hhYmxlRnJv
bURPTShOb2RlKiBub2RlLCBTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNv
bikKKy8vc3RhdGljIGlubGluZSBib29sIGlzUmVhY2hhYmxlRnJvbURPTShOb2RlKiBub2RlLCBT
bG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikKK3N0YXRpYyBpbmxpbmUg
Ym9vbCBpc1JlYWNoYWJsZUZyb21ET00oTm9kZSogbm9kZSwgQWJzdHJhY3RTbG90VmlzaXRvciYg
dmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikKIHsKICAgICBpZiAoIW5vZGUtPmlzQ29ubmVj
dGVkKCkpIHsKICAgICAgICAgaWYgKGlzPEVsZW1lbnQ+KCpub2RlKSkgewpAQCAtMTIzLDcgKzEy
NCw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpc1JlYWNoYWJsZUZyb21ET00oTm8KICAgICByZXR1
cm4gdmlzaXRvci5jb250YWluc09wYXF1ZVJvb3Qocm9vdChub2RlKSk7CiB9CiAKLWJvb2wgSlNO
b2RlT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5r
bm93bj4gaGFuZGxlLCB2b2lkKiwgU2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiBy
ZWFzb24pCitib29sIEpTTm9kZU93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6
OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIEFic3RyYWN0U2xvdFZpc2l0b3Im
IHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCiB7CiAgICAgSlNOb2RlKiBqc05vZGUgPSBq
c0Nhc3Q8SlNOb2RlKj4oaGFuZGxlLnNsb3QoKS0+YXNDZWxsKCkpOwogICAgIHJldHVybiBpc1Jl
YWNoYWJsZUZyb21ET00oJmpzTm9kZS0+d3JhcHBlZCgpLCB2aXNpdG9yLCByZWFzb24pOwpAQCAt
MTM2LDExICsxMzcsMTYgQEAgSlNTY29wZSogSlNOb2RlOjpwdXNoRXZlbnRIYW5kbGVyU2NvcGUo
SgogICAgIHJldHVybiBub2RlOwogfQogCi12b2lkIEpTTm9kZTo6dmlzaXRBZGRpdGlvbmFsQ2hp
bGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3ZvaWQgSlNOb2RlOjp2aXNpdEFkZGl0aW9u
YWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0
b3I+Cit2b2lkIEpTTm9kZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRv
cikKIHsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qocm9vdCh3cmFwcGVkKCkpKTsKIH0KIAor
dGVtcGxhdGUgdm9pZCBKU05vZGU6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEFic3RyYWN0U2xv
dFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNOb2RlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJl
bihTbG90VmlzaXRvciYpOworCiBzdGF0aWMgQUxXQVlTX0lOTElORSBKU1ZhbHVlIGNyZWF0ZVdy
YXBwZXJJbmxpbmUoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTRE9NR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZjxOb2RlPiYmIG5vZGUpCiB7CiAgICAgQVNTRVJU
KCFnZXRDYWNoZWRXcmFwcGVyKGdsb2JhbE9iamVjdC0+d29ybGQoKSwgbm9kZSkpOwpJbmRleDog
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlSXRlcmF0b3JDdXN0b20uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUl0ZXJhdG9yQ3VzdG9t
LmNwcAkocmV2aXNpb24gMjcyMjk3KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNO
b2RlSXRlcmF0b3JDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNSwxMCArMjUsMTUgQEAK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIEpTTm9kZUl0ZXJhdG9yOjp2aXNpdEFkZGl0
aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy92b2lkIEpTTm9kZUl0
ZXJhdG9yOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9y
KQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNOb2RlSXRlcmF0b3I6OnZpc2l0
QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgaWYgKE5vZGVGaWx0
ZXIqIGZpbHRlciA9IHdyYXBwZWQoKS5maWx0ZXIoKSkKICAgICAgICAgdmlzaXRvci5hZGRPcGFx
dWVSb290KGZpbHRlcik7CiB9CiAKLX0KK3RlbXBsYXRlIHZvaWQgSlNOb2RlSXRlcmF0b3I6OnZp
c2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxh
dGUgdm9pZCBKU05vZGVJdGVyYXRvcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90
VmlzaXRvciYpOworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU05vZGVMaXN0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVMaXN0Q3VzdG9tLmNwcAkocmV2aXNpb24gMjcyMjk3
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlTGlzdEN1c3RvbS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM3LDcgKzM3LDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5n
IG5hbWVzcGFjZSBKU0M7CiAKLWJvb2wgSlNOb2RlTGlzdE93bmVyOjppc1JlYWNoYWJsZUZyb21P
cGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIFNsb3RW
aXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQorYm9vbCBKU05vZGVMaXN0T3du
ZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4g
aGFuZGxlLCB2b2lkKiwgQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioq
IHJlYXNvbikKIHsKICAgICBKU05vZGVMaXN0KiBqc05vZGVMaXN0ID0ganNDYXN0PEpTTm9kZUxp
c3QqPihoYW5kbGUuc2xvdCgpLT5hc0NlbGwoKSk7CiAgICAgaWYgKCFqc05vZGVMaXN0LT5oYXND
dXN0b21Qcm9wZXJ0aWVzKGpzTm9kZUxpc3QtPnZtKCkpKQpJbmRleDogU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNPZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRDdXN0b20uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTT2Zmc2NyZWVuQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcyMjk3KQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNPZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0
MkRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw3IEBAIGlubGluZSB2b2lk
KiByb290KE9mZnNjcmVlbkNhbnZhcyogY2FudmEKICAgICByZXR1cm4gY2FudmFzOwogfQogCi1i
b29sIEpTT2Zmc2NyZWVuQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJET3duZXI6OmlzUmVhY2hhYmxl
RnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwg
U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCitib29sIEpTT2Zmc2Ny
ZWVuQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJET3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJv
b3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgQWJzdHJhY3RTbG90
VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikKIHsKICAgICBpZiAoVU5MSUtF
TFkocmVhc29uKSkKICAgICAgICAgKnJlYXNvbiA9ICJDYW52YXMgaXMgb3BhcXVlIHJvb3QiOwpA
QCAtNDEsMTEgKzQxLDE2IEBAIGJvb2wgSlNPZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0
MkQKICAgICByZXR1cm4gdmlzaXRvci5jb250YWluc09wYXF1ZVJvb3Qocm9vdCk7CiB9CiAKLXZv
aWQgSlNPZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnZpc2l0QWRkaXRpb25hbENo
aWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy92b2lkIEpTT2Zmc2NyZWVuQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlz
aXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTT2Zmc2NyZWVuQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNp
dG9yKQogewogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChyb290KCZ3cmFwcGVkKCkuY2FudmFz
KCkpKTsKIH0KIAordGVtcGxhdGUgdm9pZCBKU09mZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyRDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oQWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVt
cGxhdGUgdm9pZCBKU09mZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6dmlzaXRBZGRp
dGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQog
CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUGFpbnRSZW5kZXJp
bmdDb250ZXh0MkRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTUGFpbnRSZW5kZXJpbmdDb250ZXh0MkRDdXN0b20uY3BwCShyZXZpc2lvbiAyNzIy
OTcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1BhaW50UmVuZGVyaW5nQ29udGV4
dDJEQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsNyBAQCBpbmxpbmUgdm9p
ZCogcm9vdChDdXN0b21QYWludENhbnZhcyogY2FuCiAgICAgcmV0dXJuIGNhbnZhczsKIH0KIAot
Ym9vbCBKU1BhaW50UmVuZGVyaW5nQ29udGV4dDJET3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1
ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgU2xvdFZpc2l0
b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCitib29sIEpTUGFpbnRSZW5kZXJpbmdD
b250ZXh0MkRPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlND
OjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBj
b25zdCBjaGFyKiogcmVhc29uKQogewogICAgIGlmIChVTkxJS0VMWShyZWFzb24pKQogICAgICAg
ICAqcmVhc29uID0gIkNhbnZhcyBpcyBvcGFxdWUgcm9vdCI7CkBAIC00NiwxMSArNDYsMTYgQEAg
Ym9vbCBKU1BhaW50UmVuZGVyaW5nQ29udGV4dDJET3duZXI6OmlzUgogICAgIHJldHVybiB2aXNp
dG9yLmNvbnRhaW5zT3BhcXVlUm9vdChyb290KTsKIH0KIAotdm9pZCBKU1BhaW50UmVuZGVyaW5n
Q29udGV4dDJEOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikK
Ky8vdm9pZCBKU1BhaW50UmVuZGVyaW5nQ29udGV4dDJEOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJl
bihTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lk
IEpTUGFpbnRSZW5kZXJpbmdDb250ZXh0MkQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0
b3ImIHZpc2l0b3IpCiB7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHJvb3QoJndyYXBwZWQo
KS5jYW52YXMoKSkpOwogfQogCit0ZW1wbGF0ZSB2b2lkIEpTUGFpbnRSZW5kZXJpbmdDb250ZXh0
MkQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBs
YXRlIHZvaWQgSlNQYWludFJlbmRlcmluZ0NvbnRleHQyRDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRy
ZW4oU2xvdFZpc2l0b3ImKTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogI2VuZGlmCiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUGFpbnRXb3JrbGV0R2xvYmFsU2NvcGVD
dXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUGFp
bnRXb3JrbGV0R2xvYmFsU2NvcGVDdXN0b20uY3BwCShyZXZpc2lvbiAyNzIyOTcpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1BhaW50V29ya2xldEdsb2JhbFNjb3BlQ3VzdG9tLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsOSBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewog
dXNpbmcgbmFtZXNwYWNlIEpTQzsKIAotdm9pZCBKU1BhaW50V29ya2xldEdsb2JhbFNjb3BlOjp2
aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy92b2lk
IEpTUGFpbnRXb3JrbGV0R2xvYmFsU2NvcGU6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBK
U1BhaW50V29ya2xldEdsb2JhbFNjb3BlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9y
JiB2aXNpdG9yKQogewogICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sod3JhcHBlZCgpLnBhaW50
RGVmaW5pdGlvbkxvY2soKSk7CiAgICAgZm9yIChhdXRvJiByZWdpc3RlcmVkIDogd3JhcHBlZCgp
LnBhaW50RGVmaW5pdGlvbk1hcCgpLnZhbHVlcygpKSB7CkBAIC00MCw1ICs0Miw5IEBAIHZvaWQg
SlNQYWludFdvcmtsZXRHbG9iYWxTY29wZTo6dmlzaXRBZGQKICAgICB9CiB9CiAKLX0KK3RlbXBs
YXRlIHZvaWQgSlNQYWludFdvcmtsZXRHbG9iYWxTY29wZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRy
ZW4oSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTUGFpbnRXb3Jr
bGV0R2xvYmFsU2NvcGU6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3Im
KTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTUGF5bWVudE1ldGhvZENoYW5nZUV2ZW50Q3VzdG9tLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1BheW1lbnRNZXRob2RDaGFu
Z2VFdmVudEN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTUGF5bWVudE1ldGhvZENoYW5nZUV2ZW50Q3VzdG9tLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDEsNyArNDEsOSBAQCBKU0M6OkpTVmFsdWUgSlNQYXltZW50TWV0aG9kQ2hhbmdl
RXZlbnQ6CiAgICAgfSk7CiB9CiAKLXZvaWQgSlNQYXltZW50TWV0aG9kQ2hhbmdlRXZlbnQ6OnZp
c2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3ZvaWQg
SlNQYXltZW50TWV0aG9kQ2hhbmdlRXZlbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBK
U1BheW1lbnRNZXRob2RDaGFuZ2VFdmVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRv
ciYgdmlzaXRvcikKIHsKICAgICBXVEY6OnN3aXRjaE9uKHdyYXBwZWQoKS5tZXRob2REZXRhaWxz
KCksIFsmdmlzaXRvcl0oY29uc3QgSlNWYWx1ZUluV3JhcHBlZE9iamVjdCYgbWV0aG9kRGV0YWls
cykgewogICAgICAgICBtZXRob2REZXRhaWxzLnZpc2l0KHZpc2l0b3IpOwpAQCAtNTEsNiArNTMs
OSBAQCB2b2lkIEpTUGF5bWVudE1ldGhvZENoYW5nZUV2ZW50Ojp2aXNpdEFkCiAgICAgd3JhcHBl
ZCgpLmNhY2hlZE1ldGhvZERldGFpbHMoKS52aXNpdCh2aXNpdG9yKTsKIH0KIAordGVtcGxhdGUg
dm9pZCBKU1BheW1lbnRNZXRob2RDaGFuZ2VFdmVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4o
SlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTUGF5bWVudE1ldGhv
ZENoYW5nZUV2ZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJik7
CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShQQVlNRU5UX1JF
UVVFU1QpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1BheW1lbnRSZXNwb25z
ZUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNQ
YXltZW50UmVzcG9uc2VDdXN0b20uY3BwCShyZXZpc2lvbiAyNzIyOTcpCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU1BheW1lbnRSZXNwb25zZUN1c3RvbS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM3LDExICszNywxNiBAQCBKU0M6OkpTVmFsdWUgSlNQYXltZW50UmVzcG9uc2U6OmRl
dGFpbHMoCiAgICAgfSk7CiB9CiAKLXZvaWQgSlNQYXltZW50UmVzcG9uc2U6OnZpc2l0QWRkaXRp
b25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3ZvaWQgSlNQYXltZW50
UmVzcG9uc2U6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0
b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1BheW1lbnRSZXNwb25zZTo6
dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB3cmFwcGVk
KCkuY2FjaGVkRGV0YWlscygpLnZpc2l0KHZpc2l0b3IpOwogfQogCit0ZW1wbGF0ZSB2b2lkIEpT
UGF5bWVudFJlc3BvbnNlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OkFic3RyYWN0U2xv
dFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNQYXltZW50UmVzcG9uc2U6OnZpc2l0QWRkaXRp
b25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImKTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQogCiAjZW5kaWYgLy8gRU5BQkxFKFBBWU1FTlRfUkVRVUVTVCkKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTUGVyZm9ybWFuY2VPYnNlcnZlckN1c3RvbS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNQZXJmb3JtYW5jZU9ic2VydmVyQ3Vz
dG9tLmNwcAkocmV2aXNpb24gMjcyMjk3KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNQZXJmb3JtYW5jZU9ic2VydmVyQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsMTIg
KzMxLDE3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBKU1BlcmZvcm1hbmNlT2Jz
ZXJ2ZXI6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3Ip
CisvL3ZvaWQgSlNQZXJmb3JtYW5jZU9ic2VydmVyOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihK
U0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3Zv
aWQgSlNQZXJmb3JtYW5jZU9ic2VydmVyOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9y
JiB2aXNpdG9yKQogewogICAgIHdyYXBwZWQoKS5jYWxsYmFjaygpLnZpc2l0SlNGdW5jdGlvbih2
aXNpdG9yKTsKIH0KIAotYm9vbCBKU1BlcmZvcm1hbmNlT2JzZXJ2ZXJPd25lcjo6aXNSZWFjaGFi
bGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQq
LCBKU0M6OlNsb3RWaXNpdG9yJiwgY29uc3QgY2hhcioqIHJlYXNvbikKK3RlbXBsYXRlIHZvaWQg
SlNQZXJmb3JtYW5jZU9ic2VydmVyOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OkFic3Ry
YWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNQZXJmb3JtYW5jZU9ic2VydmVyOjp2
aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJik7CisKK2Jvb2wgSlNQZXJm
b3JtYW5jZU9ic2VydmVyT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFu
ZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9y
JiwgY29uc3QgY2hhcioqIHJlYXNvbikKIHsKICAgICBpZiAoVU5MSUtFTFkocmVhc29uKSkKICAg
ICAgICAgKnJlYXNvbiA9ICJSZWdpc3RlcmVkIFBlcmZvcm1hbmNlT2JzZXJ2ZXIgY2FsbGJhY2si
OwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNQb3BTdGF0ZUV2ZW50Q3VzdG9t
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1BvcFN0YXRl
RXZlbnRDdXN0b20uY3BwCShyZXZpc2lvbiAyNzIyOTcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU1BvcFN0YXRlRXZlbnRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MCw5
ICs5MCwxNCBAQCBKU1ZhbHVlIEpTUG9wU3RhdGVFdmVudDo6c3RhdGUoSlNHbG9iYWxPCiAgICAg
cmV0dXJuIGNhY2hlU3RhdGUocmVzdWx0KTsKIH0KIAotdm9pZCBKU1BvcFN0YXRlRXZlbnQ6OnZp
c2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3ZvaWQg
SlNQb3BTdGF0ZUV2ZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9y
JiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNQb3BTdGF0ZUV2
ZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHdy
YXBwZWQoKS5zdGF0ZSgpLnZpc2l0KHZpc2l0b3IpOwogfQogCit0ZW1wbGF0ZSB2b2lkIEpTUG9w
U3RhdGVFdmVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpBYnN0cmFjdFNsb3RWaXNp
dG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTUG9wU3RhdGVFdmVudDo6dmlzaXRBZGRpdGlvbmFsQ2hp
bGRyZW4oSlNDOjpTbG90VmlzaXRvciYpOworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1Byb21pc2VSZWplY3Rpb25FdmVudEN1c3Rv
bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNQcm9taXNl
UmVqZWN0aW9uRXZlbnRDdXN0b20uY3BwCShyZXZpc2lvbiAyNzIyOTcpCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU1Byb21pc2VSZWplY3Rpb25FdmVudEN1c3RvbS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTMyLDkgKzMyLDE0IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9p
ZCBKU1Byb21pc2VSZWplY3Rpb25FdmVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpT
bG90VmlzaXRvciYgdmlzaXRvcikKKy8vdm9pZCBKU1Byb21pc2VSZWplY3Rpb25FdmVudDo6dmlz
aXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRl
PHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTUHJvbWlzZVJlamVjdGlvbkV2ZW50Ojp2aXNpdEFk
ZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHdyYXBwZWQoKS5yZWFz
b24oKS52aXNpdCh2aXNpdG9yKTsKIH0KIAordGVtcGxhdGUgdm9pZCBKU1Byb21pc2VSZWplY3Rp
b25FdmVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9y
Jik7Cit0ZW1wbGF0ZSB2b2lkIEpTUHJvbWlzZVJlamVjdGlvbkV2ZW50Ojp2aXNpdEFkZGl0aW9u
YWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJik7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUmVzaXplT2JzZXJ2ZXJDdXN0b20u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUmVzaXplT2Jz
ZXJ2ZXJDdXN0b20uY3BwCShyZXZpc2lvbiAyNzIyOTcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU1Jlc2l6ZU9ic2VydmVyQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAs
MTEgKzMwLDE2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBKU1Jlc2l6ZU9ic2Vy
dmVyOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQor
Ly92b2lkIEpTUmVzaXplT2JzZXJ2ZXI6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xv
dFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1Jl
c2l6ZU9ic2VydmVyOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQog
ewogICAgIFJlc2l6ZU9ic2VydmVyQ2FsbGJhY2sqIGNhbGxiYWNrID0gd3JhcHBlZCgpLmNhbGxi
YWNrQ29uY3VycmVudGx5KCk7CiAgICAgaWYgKGNhbGxiYWNrKQogICAgICAgICBjYWxsYmFjay0+
dmlzaXRKU0Z1bmN0aW9uKHZpc2l0b3IpOwogfQogCi19Cit0ZW1wbGF0ZSB2b2lkIEpTUmVzaXpl
T2JzZXJ2ZXI6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRv
ciYpOwordGVtcGxhdGUgdm9pZCBKU1Jlc2l6ZU9ic2VydmVyOjp2aXNpdEFkZGl0aW9uYWxDaGls
ZHJlbihKU0M6OlNsb3RWaXNpdG9yJik7CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUmVzaXplT2JzZXJ2ZXJFbnRyeUN1c3RvbS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNSZXNpemVPYnNl
cnZlckVudHJ5Q3VzdG9tLmNwcAkocmV2aXNpb24gMjcyMjk3KQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNSZXNpemVPYnNlcnZlckVudHJ5Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzAsMTAgKzMwLDE1IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBKU1Jl
c2l6ZU9ic2VydmVyRW50cnk6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0
b3ImIHZpc2l0b3IpCisvL3ZvaWQgSlNSZXNpemVPYnNlcnZlckVudHJ5Ojp2aXNpdEFkZGl0aW9u
YWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUg
VmlzaXRvcj4KK3ZvaWQgSlNSZXNpemVPYnNlcnZlckVudHJ5Ojp2aXNpdEFkZGl0aW9uYWxDaGls
ZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChyb290
KHdyYXBwZWQoKS50YXJnZXQoKSkpOwogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdCh3cmFwcGVk
KCkuY29udGVudFJlY3QoKSk7CiB9CiAKLX0KK3RlbXBsYXRlIHZvaWQgSlNSZXNpemVPYnNlcnZl
ckVudHJ5Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3Im
KTsKK3RlbXBsYXRlIHZvaWQgSlNSZXNpemVPYnNlcnZlckVudHJ5Ojp2aXNpdEFkZGl0aW9uYWxD
aGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJik7CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU1ZHVmlld1NwZWNDdXN0b20uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU1ZHVmlld1NwZWNDdXN0
b20uY3BwCShyZXZpc2lvbiAyNzIyOTcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U1NWR1ZpZXdTcGVjQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsMTAgKzMwLDE1IEBA
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBKU1NWR1ZpZXdTcGVjOjp2aXNpdEFkZGl0
aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy92b2lkIEpTU1ZHVmll
d1NwZWM6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3Ip
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1NWR1ZpZXdTcGVjOjp2aXNpdEFk
ZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEFTU0VSVCh3cmFwcGVk
KCkuY29udGV4dEVsZW1lbnRDb25jdXJyZW50bHkoKS5nZXQoKSk7CiAgICAgdmlzaXRvci5hZGRP
cGFxdWVSb290KHJvb3Qod3JhcHBlZCgpLmNvbnRleHRFbGVtZW50Q29uY3VycmVudGx5KCkuZ2V0
KCkpKTsKIH0KIAotfQordGVtcGxhdGUgdm9pZCBKU1NWR1ZpZXdTcGVjOjp2aXNpdEFkZGl0aW9u
YWxDaGlsZHJlbihKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNT
VkdWaWV3U3BlYzo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYpOwor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU1NlcnZpY2VXb3JrZXJHbG9iYWxTY29wZUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNTZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGVDdXN0b20u
Y3BwCShyZXZpc2lvbiAyNzIyOTcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1Nl
cnZpY2VXb3JrZXJHbG9iYWxTY29wZUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDEy
ICszNCwxNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAK
LXZvaWQgSlNTZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGU6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVu
KFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy92b2lkIEpTU2VydmljZVdvcmtlckdsb2JhbFNjb3Bl
Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRl
PHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTU2VydmljZVdvcmtlckdsb2JhbFNjb3BlOjp2aXNp
dEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHZpc2l0b3IuYWRk
T3BhcXVlUm9vdCgmd3JhcHBlZCgpLmNsaWVudHMoKSk7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVS
b290KCZ3cmFwcGVkKCkucmVnaXN0cmF0aW9uKCkpOwogfQogCit0ZW1wbGF0ZSB2b2lkIEpTU2Vy
dmljZVdvcmtlckdsb2JhbFNjb3BlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihBYnN0cmFjdFNs
b3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTU2VydmljZVdvcmtlckdsb2JhbFNjb3BlOjp2
aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYpOworCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCiAKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNTdGF0
aWNSYW5nZUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNTdGF0aWNSYW5nZUN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTU3RhdGljUmFuZ2VDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zMCw5ICszMCwxNCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgSlNTdGF0
aWNSYW5nZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRv
cikKKy8vdm9pZCBKU1N0YXRpY1JhbmdlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNs
b3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNT
dGF0aWNSYW5nZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsK
ICAgICB3cmFwcGVkKCkudmlzaXROb2Rlc0NvbmN1cnJlbnRseSh2aXNpdG9yKTsKIH0KIAordGVt
cGxhdGUgdm9pZCBKU1N0YXRpY1JhbmdlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OkFi
c3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNTdGF0aWNSYW5nZTo6dmlzaXRB
ZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYpOworCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1N0eWxlU2hlZXRDdXN0
b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU3R5bGVT
aGVldEN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTU3R5bGVTaGVldEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDExICsz
MCwxNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgSlNTdHlsZVNoZWV0Ojp2aXNp
dEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy92b2lkIEpT
U3R5bGVTaGVldDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlz
aXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTU3R5bGVTaGVldDo6dmlz
aXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB2aXNpdG9yLmFk
ZE9wYXF1ZVJvb3Qocm9vdCgmd3JhcHBlZCgpKSk7CiB9CiAKK3RlbXBsYXRlIHZvaWQgSlNTdHls
ZVNoZWV0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0
ZW1wbGF0ZSB2b2lkIEpTU3R5bGVTaGVldDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZp
c2l0b3ImKTsKKwogSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpKU0dsb2JhbE9i
amVjdCosIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZjxTdHlsZVNoZWV0PiYm
IHN0eWxlU2hlZXQpCiB7CiAgICAgaWYgKHN0eWxlU2hlZXQtPmlzQ1NTU3R5bGVTaGVldCgpKQpJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNUZXh0VHJhY2tDdWVDdXN0b20uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVGV4dFRyYWNrQ3Vl
Q3VzdG9tLmNwcAkocmV2aXNpb24gMjcyMjk3KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNUZXh0VHJhY2tDdWVDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3ICszOCw3
IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCi1ib29sIEpT
VGV4dFRyYWNrQ3VlT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxl
PEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgU2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0
IGNoYXIqKiByZWFzb24pCitib29sIEpTVGV4dFRyYWNrQ3VlT3duZXI6OmlzUmVhY2hhYmxlRnJv
bU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgQWJz
dHJhY3RTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikKIHsKICAgICBK
U1RleHRUcmFja0N1ZSoganNUZXh0VHJhY2tDdWUgPSBqc0Nhc3Q8SlNUZXh0VHJhY2tDdWUqPiho
YW5kbGUuc2xvdCgpLT5hc0NlbGwoKSk7CiAgICAgVGV4dFRyYWNrQ3VlJiB0ZXh0VHJhY2tDdWUg
PSBqc1RleHRUcmFja0N1ZS0+d3JhcHBlZCgpOwpAQCAtODIsMTIgKzgyLDE3IEBAIEpTVmFsdWUg
dG9KUyhKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2IKICAgICByZXR1cm4gd3JhcChsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QsIGN1ZSk7CiB9CiAKLXZvaWQgSlNUZXh0VHJhY2tD
dWU6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy92b2lk
IEpTVGV4dFRyYWNrQ3VlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlz
aXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTVGV4dFRyYWNrQ3VlOjp2
aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGlmIChUZXh0
VHJhY2sqIHRleHRUcmFjayA9IHdyYXBwZWQoKS50cmFjaygpKQogICAgICAgICB2aXNpdG9yLmFk
ZE9wYXF1ZVJvb3Qocm9vdCh0ZXh0VHJhY2spKTsKIH0KIAordGVtcGxhdGUgdm9pZCBKU1RleHRU
cmFja0N1ZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oQWJzdHJhY3RTbG90VmlzaXRvciYpOwor
dGVtcGxhdGUgdm9pZCBKU1RleHRUcmFja0N1ZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xv
dFZpc2l0b3ImKTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVGV4dFRyYWNrQ3VzdG9tLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1RleHRUcmFja0N1c3RvbS5jcHAJKHJl
dmlzaW9uIDI3MjI5NykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVGV4dFRyYWNr
Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsMTEgKzM2LDE2IEBACiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCi12b2lkIEpTVGV4dFRyYWNrOjp2aXNp
dEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vdm9pZCBKU1RleHRU
cmFjazo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1w
bGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1RleHRUcmFjazo6dmlzaXRBZGRpdGlvbmFs
Q2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qo
cm9vdCgmd3JhcHBlZCgpKSk7CiB9CiAKK3RlbXBsYXRlIHZvaWQgSlNUZXh0VHJhY2s6OnZpc2l0
QWRkaXRpb25hbENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQg
SlNUZXh0VHJhY2s6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CisKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU1RleHRUcmFja0xpc3RDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTVGV4dFRyYWNrTGlzdEN1c3RvbS5jcHAJKHJldmlzaW9uIDI3
MjI5NykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVGV4dFRyYWNrTGlzdEN1c3Rv
bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDExICszNiwxNiBAQAogbmFtZXNwYWNlIFdlYkNv
cmUgewogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAotdm9pZCBKU1RleHRUcmFja0xpc3Q6OnZpc2l0
QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3ZvaWQgSlNU
ZXh0VHJhY2tMaXN0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2
aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNUZXh0VHJhY2tMaXN0
Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHZpc2l0
b3IuYWRkT3BhcXVlUm9vdChyb290KHdyYXBwZWQoKS5lbGVtZW50KCkpKTsKIH0KICAgICAKK3Rl
bXBsYXRlIHZvaWQgSlNUZXh0VHJhY2tMaXN0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihBYnN0
cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTVGV4dFRyYWNrTGlzdDo6dmlzaXRB
ZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQogCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVHJlZVdhbGtl
ckN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNU
cmVlV2Fsa2VyQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcyMjk3KQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNUcmVlV2Fsa2VyQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUs
MTAgKzI1LDE1IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBKU1RyZWVXYWxrZXI6
OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3Zv
aWQgSlNUcmVlV2Fsa2VyOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9y
JiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNUcmVlV2Fsa2Vy
Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGlmIChO
b2RlRmlsdGVyKiBmaWx0ZXIgPSB3cmFwcGVkKCkuZmlsdGVyKCkpCiAgICAgICAgIHZpc2l0b3Iu
YWRkT3BhcXVlUm9vdChmaWx0ZXIpOwogfQogCi19Cit0ZW1wbGF0ZSB2b2lkIEpTVHJlZVdhbGtl
cjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0
ZW1wbGF0ZSB2b2lkIEpTVHJlZVdhbGtlcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpT
bG90VmlzaXRvciYpOworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU1VuZG9JdGVtQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1VuZG9JdGVtQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcy
Mjk3KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNVbmRvSXRlbUN1c3RvbS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI5LDEzICsyOSwxOCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLXZvaWQgSlNVbmRvSXRlbTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90Vmlz
aXRvciYgdmlzaXRvcikKKy8vdm9pZCBKU1VuZG9JdGVtOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJl
bihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4K
K3ZvaWQgSlNVbmRvSXRlbTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRv
cikKIHsKICAgICB3cmFwcGVkKCkudW5kb0hhbmRsZXIoKS52aXNpdEpTRnVuY3Rpb24odmlzaXRv
cik7CiAgICAgd3JhcHBlZCgpLnJlZG9IYW5kbGVyKCkudmlzaXRKU0Z1bmN0aW9uKHZpc2l0b3Ip
OwogfQogCi1ib29sIEpTVW5kb0l0ZW1Pd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMo
SlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBKU0M6OlNsb3RWaXNpdG9y
JiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQordGVtcGxhdGUgdm9pZCBKU1VuZG9JdGVt
Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3Rl
bXBsYXRlIHZvaWQgSlNVbmRvSXRlbTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90
VmlzaXRvciYpOworCitib29sIEpTVW5kb0l0ZW1Pd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVl
Um9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBKU0M6OkFic3Ry
YWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCiB7CiAgICAgaWYg
KFVOTElLRUxZKHJlYXNvbikpCiAgICAgICAgICpyZWFzb24gPSAiRG9jdW1lbnQgaXMgYW4gb3Bh
cXVlIHJvb3QuIjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVmFsdWVJbldy
YXBwZWRPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U1ZhbHVlSW5XcmFwcGVkT2JqZWN0LmgJKHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTVmFsdWVJbldyYXBwZWRPYmplY3QuaAkod29ya2luZyBjb3B5KQpA
QCAtNDAsNyArNDAsOCBAQCBwdWJsaWM6CiAgICAgb3BlcmF0b3IgSlNDOjpKU1ZhbHVlKCkgY29u
c3Q7CiAgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0OwogICAgIEpTVmFsdWVJbldy
YXBwZWRPYmplY3QmIG9wZXJhdG9yPShjb25zdCBKU1ZhbHVlSW5XcmFwcGVkT2JqZWN0JiBvdGhl
cik7Ci0gICAgdm9pZCB2aXNpdChKU0M6OlNsb3RWaXNpdG9yJikgY29uc3Q7CisvLyAgICB2b2lk
IHZpc2l0KEpTQzo6U2xvdFZpc2l0b3ImKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPiB2b2lkIHZpc2l0KFZpc2l0b3ImKSBjb25zdDsKICAgICB2b2lkIGNsZWFyKCk7CiAK
IHByaXZhdGU6CkBAIC05OCw3ICs5OSw4IEBAIGlubGluZSBKU1ZhbHVlSW5XcmFwcGVkT2JqZWN0
JiBKU1ZhbHVlSW4KICAgICByZXR1cm4gKnRoaXM7CiB9CiAKLWlubGluZSB2b2lkIEpTVmFsdWVJ
bldyYXBwZWRPYmplY3Q6OnZpc2l0KEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0Cit0
ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgoraW5saW5lIHZvaWQgSlNWYWx1ZUluV3JhcHBlZE9i
amVjdDo6dmlzaXQoVmlzaXRvciYgdmlzaXRvcikgY29uc3QKIHsKICAgICByZXR1cm4gV1RGOjpz
d2l0Y2hPbihtX3ZhbHVlLCBbXSAoSlNDOjpKU1ZhbHVlKSB7CiAgICAgICAgIC8vIE5vdGhpbmcg
dG8gdmlzaXQuCkBAIC0xMDcsNiArMTA5LDkgQEAgaW5saW5lIHZvaWQgSlNWYWx1ZUluV3JhcHBl
ZE9iamVjdDo6dmlzaQogICAgIH0pOwogfQogCit0ZW1wbGF0ZSB2b2lkIEpTVmFsdWVJbldyYXBw
ZWRPYmplY3Q6OnZpc2l0KEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpIGNvbnN0OwordGVtcGxh
dGUgdm9pZCBKU1ZhbHVlSW5XcmFwcGVkT2JqZWN0Ojp2aXNpdChKU0M6OlNsb3RWaXNpdG9yJikg
Y29uc3Q7CisKIGlubGluZSB2b2lkIEpTVmFsdWVJbldyYXBwZWRPYmplY3Q6OmNsZWFyKCkKIHsK
ICAgICBXVEY6OnN3aXRjaE9uKG1fdmFsdWUsIFtdIChXZWFrJiB2YWx1ZSkgewpJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNWaWRlb1RyYWNrQ3VzdG9tLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1ZpZGVvVHJhY2tDdXN0b20uY3BwCShy
ZXZpc2lvbiAyNzIyOTcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1ZpZGVvVHJh
Y2tDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSwxMSArMzUsMTYgQEAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKLXZvaWQgSlNWaWRlb1RyYWNrOjp2
aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vdm9pZCBKU1Zp
ZGVvVHJhY2s6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQor
dGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNWaWRlb1RyYWNrOjp2aXNpdEFkZGl0
aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHZpc2l0b3IuYWRkT3BhcXVl
Um9vdChyb290KCZ3cmFwcGVkKCkpKTsKIH0KIAordGVtcGxhdGUgdm9pZCBKU1ZpZGVvVHJhY2s6
OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVt
cGxhdGUgdm9pZCBKU1ZpZGVvVHJhY2s6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xv
dFZpc2l0b3ImKTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVmlkZW9UcmFja0xpc3RDdXN0b20uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVmlkZW9UcmFja0xpc3RDdXN0
b20uY3BwCShyZXZpc2lvbiAyNzIyOTcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U1ZpZGVvVHJhY2tMaXN0Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsMTEgKzM1LDE2
IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCi12b2lkIEpT
VmlkZW9UcmFja0xpc3Q6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNp
dG9yKQorLy92b2lkIEpTVmlkZW9UcmFja0xpc3Q6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNW
aWRlb1RyYWNrTGlzdDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikK
IHsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qocm9vdCh3cmFwcGVkKCkuZWxlbWVudCgpKSk7
CiB9CiAKK3RlbXBsYXRlIHZvaWQgSlNWaWRlb1RyYWNrTGlzdDo6dmlzaXRBZGRpdGlvbmFsQ2hp
bGRyZW4oQWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU1ZpZGVvVHJhY2tM
aXN0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYpOworCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCiAKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNXZWJHTDJSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYkdMMlJlbmRlcmluZ0NvbnRleHRDdXN0b20uY3BwCShy
ZXZpc2lvbiAyNzIyOTcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYkdMMlJl
bmRlcmluZ0NvbnRleHRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMywxMiArMzMsMTcg
QEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKLXZvaWQgSlNX
ZWJHTDJSZW5kZXJpbmdDb250ZXh0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRv
ciYgdmlzaXRvcikKKy8vdm9pZCBKU1dlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OnZpc2l0QWRkaXRp
b25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlz
aXRvcj4KK3ZvaWQgSlNXZWJHTDJSZW5kZXJpbmdDb250ZXh0Ojp2aXNpdEFkZGl0aW9uYWxDaGls
ZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdCgmd3Jh
cHBlZCgpKTsKICAgICB3cmFwcGVkKCkuYWRkTWVtYmVyc1RvT3BhcXVlUm9vdHModmlzaXRvcik7
CiB9CiAKK3RlbXBsYXRlIHZvaWQgSlNXZWJHTDJSZW5kZXJpbmdDb250ZXh0Ojp2aXNpdEFkZGl0
aW9uYWxDaGlsZHJlbihKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQg
SlNXZWJHTDJSZW5kZXJpbmdDb250ZXh0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNs
b3RWaXNpdG9yJik7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJM
RShXRUJHTCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViR0xSZW5kZXJp
bmdDb250ZXh0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU1dlYkdMUmVuZGVyaW5nQ29udGV4dEN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjI5NykK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViR0xSZW5kZXJpbmdDb250ZXh0Q3Vz
dG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsMTIgKzMzLDE3IEBACiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCi12b2lkIEpTV2ViR0xSZW5kZXJpbmdDb250
ZXh0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vdm9p
ZCBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZp
c2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1dlYkdM
UmVuZGVyaW5nQ29udGV4dDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRv
cikKIHsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QoJndyYXBwZWQoKSk7CiAgICAgd3JhcHBl
ZCgpLmFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKHZpc2l0b3IpOwogfQogCit0ZW1wbGF0ZSB2b2lk
IEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihBYnN0cmFj
dFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2
aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYpOworCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoV0VCR0wpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU1dvcmtlckdsb2JhbFNjb3BlQmFzZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrZXJHbG9iYWxTY29wZUJhc2UuY3BwCShyZXZp
c2lvbiAyNzIyOTcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckdsb2Jh
bFNjb3BlQmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkyLDcgKzkyLDggQEAgdm9pZCBKU1dv
cmtlckdsb2JhbFNjb3BlQmFzZTo6ZmluaXNoQ3JlYQogICAgIEFTU0VSVChpbmhlcml0cyh2bSwg
aW5mbygpKSk7CiB9CiAKLXZvaWQgSlNXb3JrZXJHbG9iYWxTY29wZUJhc2U6OnZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1l
IFZpc2l0b3I+Cit2b2lkIEpTV29ya2VyR2xvYmFsU2NvcGVCYXNlOjp2aXNpdENoaWxkcmVuSW1w
bChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNXb3JrZXJHbG9iYWxT
Y29wZUJhc2UqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNXb3JrZXJHbG9iYWxTY29wZUJhc2UqPihj
ZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7
CkBAIC0xMDAsNiArMTAxLDggQEAgdm9pZCBKU1dvcmtlckdsb2JhbFNjb3BlQmFzZTo6dmlzaXRD
aGlsZAogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fcHJveHkpOwogfQogCitERUZJ
TkVfVklTSVRfQ0hJTERSRU4oSlNXb3JrZXJHbG9iYWxTY29wZUJhc2UpOworCiB2b2lkIEpTV29y
a2VyR2xvYmFsU2NvcGVCYXNlOjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKIHsKICAgICBzdGF0aWNf
Y2FzdDxKU1dvcmtlckdsb2JhbFNjb3BlQmFzZSo+KGNlbGwpLT5KU1dvcmtlckdsb2JhbFNjb3Bl
QmFzZTo6fkpTV29ya2VyR2xvYmFsU2NvcGVCYXNlKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU1dvcmtlckdsb2JhbFNjb3BlQmFzZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyR2xvYmFsU2NvcGVCYXNlLmgJKHJldmlzaW9u
IDI3MjI5NykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyR2xvYmFsU2Nv
cGVCYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTc5LDcgKzc5LDcgQEAgcHJvdGVjdGVkOgogICAg
IEpTV29ya2VyR2xvYmFsU2NvcGVCYXNlKEpTQzo6Vk0mLCBKU0M6OlN0cnVjdHVyZSosIFJlZlB0
cjxXb3JrZXJHbG9iYWxTY29wZT4mJik7CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZN
JiwgSlNDOjpKU1Byb3h5Kik7CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQzo6
SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47
CiAKIHByaXZhdGU6CiAgICAgUmVmUHRyPFdvcmtlckdsb2JhbFNjb3BlPiBtX3dyYXBwZWQ7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckdsb2JhbFNjb3BlQ3VzdG9t
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckds
b2JhbFNjb3BlQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcyMjk3KQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNXb3JrZXJHbG9iYWxTY29wZUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMzLDcgKzMzLDkgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBK
U0M7CiAKLXZvaWQgSlNXb3JrZXJHbG9iYWxTY29wZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4o
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3ZvaWQgSlNXb3JrZXJHbG9iYWxTY29wZTo6dmlzaXRB
ZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBWaXNpdG9yPgordm9pZCBKU1dvcmtlckdsb2JhbFNjb3BlOjp2aXNpdEFkZGl0aW9uYWxDaGls
ZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGlmIChhdXRvKiBsb2NhdGlvbiA9IHdyYXBw
ZWQoKS5vcHRpb25hbExvY2F0aW9uKCkpCiAgICAgICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChs
b2NhdGlvbik7CkBAIC00OCw2ICs1MCw5IEBAIHZvaWQgSlNXb3JrZXJHbG9iYWxTY29wZTo6dmlz
aXRBZGRpdGlvbmEKICAgICB3cmFwcGVkKCkudmlzaXRKU0V2ZW50TGlzdGVuZXJzKHZpc2l0b3Ip
OwogfQogCit0ZW1wbGF0ZSB2b2lkIEpTV29ya2VyR2xvYmFsU2NvcGU6OnZpc2l0QWRkaXRpb25h
bENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNXb3JrZXJH
bG9iYWxTY29wZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKKwogSlNW
YWx1ZSBKU1dvcmtlckdsb2JhbFNjb3BlOjpxdWV1ZU1pY3JvdGFzayhKU0dsb2JhbE9iamVjdCYg
bGV4aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lJiBjYWxsRnJhbWUpCiB7CiAgICAgVk0mIHZt
ID0gbGV4aWNhbEdsb2JhbE9iamVjdC52bSgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNXb3JrZXJOYXZpZ2F0b3JDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyTmF2aWdhdG9yQ3VzdG9tLmNwcAkocmV2aXNpb24g
MjcyMjk3KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrZXJOYXZpZ2F0b3JD
dXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw5ICsyOCwxNCBAQAogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLXZvaWQgSlNXb3JrZXJOYXZpZ2F0b3I6OnZpc2l0QWRkaXRpb25hbENoaWxk
cmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3ZvaWQgSlNXb3JrZXJOYXZpZ2F0b3I6
OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1w
bGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1dvcmtlck5hdmlnYXRvcjo6dmlzaXRBZGRp
dGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB2aXNpdG9yLmFkZE9wYXF1
ZVJvb3Qoc3RhdGljX2Nhc3Q8TmF2aWdhdG9yQmFzZSo+KCZ3cmFwcGVkKCkpKTsKIH0KIAotfQor
dGVtcGxhdGUgdm9pZCBKU1dvcmtlck5hdmlnYXRvcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4o
SlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTV29ya2VyTmF2aWdh
dG9yOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJik7CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29y
a2xldEdsb2JhbFNjb3BlQmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNXb3JrbGV0R2xvYmFsU2NvcGVCYXNlLmNwcAkocmV2aXNpb24gMjcyMjk3KQor
KysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrbGV0R2xvYmFsU2NvcGVCYXNlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtODIsNyArODIsOCBAQCB2b2lkIEpTV29ya2xldEdsb2JhbFNj
b3BlQmFzZTo6ZmluaXNoQ3JlCiAgICAgQVNTRVJUKGluaGVyaXRzKHZtLCBpbmZvKCkpKTsKIH0K
IAotdm9pZCBKU1dvcmtsZXRHbG9iYWxTY29wZUJhc2U6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBj
ZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2
b2lkIEpTV29ya2xldEdsb2JhbFNjb3BlQmFzZTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBj
ZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8
SlNXb3JrbGV0R2xvYmFsU2NvcGVCYXNlKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9J
TkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtOTAsNiArOTEsOCBAQCB2b2lkIEpTV29y
a2xldEdsb2JhbFNjb3BlQmFzZTo6dmlzaXRDaGlsCiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09i
amVjdC0+bV9wcm94eSk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU1dvcmtsZXRHbG9i
YWxTY29wZUJhc2UpOworCiB2b2lkIEpTV29ya2xldEdsb2JhbFNjb3BlQmFzZTo6ZGVzdHJveShK
U0NlbGwqIGNlbGwpCiB7CiAgICAgc3RhdGljX2Nhc3Q8SlNXb3JrbGV0R2xvYmFsU2NvcGVCYXNl
Kj4oY2VsbCktPkpTV29ya2xldEdsb2JhbFNjb3BlQmFzZTo6fkpTV29ya2xldEdsb2JhbFNjb3Bl
QmFzZSgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrbGV0R2xvYmFs
U2NvcGVCYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNX
b3JrbGV0R2xvYmFsU2NvcGVCYXNlLmgJKHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTV29ya2xldEdsb2JhbFNjb3BlQmFzZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC02Nyw3ICs2Nyw3IEBAIHByb3RlY3RlZDoKICAgICBKU1dvcmtsZXRHbG9iYWxTY29wZUJh
c2UoSlNDOjpWTSYsIEpTQzo6U3RydWN0dXJlKiwgUmVmUHRyPFdvcmtsZXRHbG9iYWxTY29wZT4m
Jik7CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJiwgSlNDOjpKU1Byb3h5Kik7CiAK
LSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90Vmlz
aXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKIHByaXZhdGU6CiAgICAgUmVm
UHRyPFdvcmtsZXRHbG9iYWxTY29wZT4gbV93cmFwcGVkOwpJbmRleDogU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNYTUxIdHRwUmVxdWVzdEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNYTUxIdHRwUmVxdWVzdEN1c3RvbS5jcHAJKHJldmlz
aW9uIDI3MjI5NykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTWE1MSHR0cFJlcXVl
c3RDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0MSw5IEBACiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCi12b2lkIEpTWE1MSHR0cFJlcXVlc3Q6
OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy92b2lkIEpT
WE1MSHR0cFJlcXVlc3Q6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNp
dG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNYTUxIdHRwUmVxdWVzdDo6
dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBpZiAoYXV0
byogdXBsb2FkID0gd3JhcHBlZCgpLm9wdGlvbmFsVXBsb2FkKCkpCiAgICAgICAgIHZpc2l0b3Iu
YWRkT3BhcXVlUm9vdCh1cGxvYWQpOwpAQCAtNTAsNiArNTIsOSBAQCB2b2lkIEpTWE1MSHR0cFJl
cXVlc3Q6OnZpc2l0QWRkaXRpb25hbENoCiAgICAgICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChy
ZXNwb25zZURvY3VtZW50KTsKIH0KIAordGVtcGxhdGUgdm9pZCBKU1hNTEh0dHBSZXF1ZXN0Ojp2
aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2
b2lkIEpTWE1MSHR0cFJlcXVlc3Q6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9y
Jik7CisKIEpTVmFsdWUgSlNYTUxIdHRwUmVxdWVzdDo6cmVzcG9uc2UoSlNHbG9iYWxPYmplY3Qm
IGxleGljYWxHbG9iYWxPYmplY3QpIGNvbnN0CiB7CiAgICAgYXV0byBjYWNoZVJlc3VsdCA9IFsm
XSAoSlNWYWx1ZSB2YWx1ZSkgLT4gSlNWYWx1ZSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU1hQYXRoUmVzdWx0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU1hQYXRoUmVzdWx0Q3VzdG9tLmNwcAkocmV2aXNpb24gMjcyMjk3
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNYUGF0aFJlc3VsdEN1c3RvbS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDkgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci12b2lkIEpTWFBhdGhSZXN1bHQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZp
c2l0b3ImIHZpc2l0b3IpCisvL3ZvaWQgSlNYUGF0aFJlc3VsdDo6dmlzaXRBZGRpdGlvbmFsQ2hp
bGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0
b3I+Cit2b2lkIEpTWFBhdGhSZXN1bHQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3Im
IHZpc2l0b3IpCiB7CiAgICAgYXV0byYgdmFsdWUgPSB3cmFwcGVkKCkudmFsdWUoKTsKICAgICBp
ZiAodmFsdWUuaXNOb2RlU2V0KCkpIHsKQEAgLTQxLDQgKzQzLDcgQEAgdm9pZCBKU1hQYXRoUmVz
dWx0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZAogICAgIH0KIH0KIAordGVtcGxhdGUgdm9pZCBKU1hQ
YXRoUmVzdWx0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OkFic3RyYWN0U2xvdFZpc2l0
b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNYUGF0aFJlc3VsdDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRy
ZW4oSlNDOjpTbG90VmlzaXRvciYpOworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dlYkNvcmVUeXBlZEFy
cmF5Q29udHJvbGxlci5jcHAJKHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL1dlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTU2LDcgKzU2LDcgQEAgYm9vbCBXZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXI6OmlzQXRv
bQogICAgIHJldHVybiBtX2FsbG93QXRvbWljc1dhaXQ7CiB9CiAKLWJvb2wgV2ViQ29yZVR5cGVk
QXJyYXlDb250cm9sbGVyOjpKU0FycmF5QnVmZmVyT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1
ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgSlNDOjpTbG90
VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikKK2Jvb2wgV2ViQ29yZVR5cGVk
QXJyYXlDb250cm9sbGVyOjpKU0FycmF5QnVmZmVyT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1
ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgSlNDOjpBYnN0
cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQogewogICAgIGlm
IChVTkxJS0VMWShyZWFzb24pKQogICAgICAgICAqcmVhc29uID0gIkFycmF5QnVmZmVyIGlzIG9w
YXF1ZSByb290IjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dlYkNvcmVUeXBl
ZEFycmF5Q29udHJvbGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL1dlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlci5oCShyZXZpc2lvbiAyNzIyOTcpCisrKyBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXIuaAko
d29ya2luZyBjb3B5KQpAQCAtNDgsNyArNDgsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIGNs
YXNzIEpTQXJyYXlCdWZmZXJPd25lciA6IHB1YmxpYyBKU0M6OldlYWtIYW5kbGVPd25lciB7CiAg
ICAgcHVibGljOgotICAgICAgICBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6
SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6U2xvdFZpc2l0b3ImLCBj
b25zdCBjaGFyKiopIG92ZXJyaWRlOworICAgICAgICBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1
ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6QWJz
dHJhY3RTbG90VmlzaXRvciYsIGNvbnN0IGNoYXIqKikgb3ZlcnJpZGU7CiAgICAgICAgIHZvaWQg
ZmluYWxpemUoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCkgb3ZlcnJp
ZGU7CiAgICAgfTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2Rl
R2VuZXJhdG9ySlMucG0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy9Db2RlR2VuZXJhdG9ySlMucG0JKHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCSh3b3JraW5nIGNvcHkpCkBA
IC0zMDc4LDggKzMwNzgsMTAgQEAgc3ViIEdlbmVyYXRlSGVhZGVyCiAKICAgICAjIHZpc2l0IGZ1
bmN0aW9uCiAgICAgaWYgKCRuZWVkc1Zpc2l0Q2hpbGRyZW4pIHsKLSAgICAgICAgcHVzaChAaGVh
ZGVyQ29udGVudCwgIiAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIEpTQzo6
U2xvdFZpc2l0b3ImKTtcbiIpOwotICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHZv
aWQgdmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYpO1xuIikgaWYgJGlu
dGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57SlNDdXN0b21NYXJrRnVuY3Rpb259OworICAg
ICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47XG4i
KTsKKyMgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgdm9pZCB2aXNpdEFkZGl0aW9u
YWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJik7XG4iKSBpZiAkaW50ZXJmYWNlLT5leHRlbmRl
ZEF0dHJpYnV0ZXMtPntKU0N1c3RvbU1hcmtGdW5jdGlvbn07ICMgbWxhbQorIyAgICAgICAgcHVz
aChAaGVhZGVyQ29udGVudCwgIiAgICB2b2lkIHZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6
QWJzdHJhY3RTbG90VmlzaXRvciYpO1xuIikgaWYgJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1
dGVzLT57SlNDdXN0b21NYXJrRnVuY3Rpb259OworICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50
LCAiICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgdmlzaXRBZGRpdGlvbmFsQ2hp
bGRyZW4oVmlzaXRvciYpO1xuIikgaWYgJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57
SlNDdXN0b21NYXJrRnVuY3Rpb259OwogICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiXG4i
KTsKIAogICAgICAgICBpZiAoJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57SlNDdXN0
b21NYXJrRnVuY3Rpb259KSB7CkBAIC0zMDk0LDcgKzMwOTYsOSBAQCBzdWIgR2VuZXJhdGVIZWFk
ZXIKICAgICAgICAgICAgICMgdGhhdCB0aGUgR0MgY2FsbHMgdG8gYXNrIGFuIG9iamVjdCBpcyBp
dCB3b3VsZCBsaWtlIHRvIG1hcmsgYW55dGhpbmcgZWxzZSBhZnRlciB0aGUKICAgICAgICAgICAg
ICMgcHJvZ3JhbSByZXN1bWVkIHNpbmNlIHRoZSBsYXN0IGNhbGwgdG8gdmlzaXRDaGlsZHJlbiBv
ciB2aXNpdE91dHB1dENvbnN0cmFpbnRzLiBTaW5jZQogICAgICAgICAgICAgIyB0aGlzIGp1c3Qg
Y2FsbHMgdmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4sIHlvdSB1c3VhbGx5IGRvbid0IGhhdmUgdG8g
d29ycnkgYWJvdXQgdGhpcy4KLSAgICAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAg
c3RhdGljIHZvaWQgdmlzaXRPdXRwdXRDb25zdHJhaW50cyhKU0NlbGwqLCBKU0M6OlNsb3RWaXNp
dG9yJik7XG4iKTsKKyAgICAgICAgICAgICMgbWxhbSBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAg
IHN0YXRpYyB2b2lkIHZpc2l0T3V0cHV0Q29uc3RyYWludHMoSlNDZWxsKiwgSlNDOjpTbG90Vmlz
aXRvciYpO1xuIik7CisgICAgICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHN0YXRp
YyB2b2lkIHZpc2l0T3V0cHV0Q29uc3RyYWludHMoSlNDZWxsKiwgSlNDOjpBYnN0cmFjdFNsb3RW
aXNpdG9yJik7XG4iKTsKKyAgICAgICAgICAgICMgbWxhbSBwdXNoKEBoZWFkZXJDb250ZW50LCAi
ICAgIERFQ0xBUkVfVklTSVRfT1VUUFVUX0NPTlNUUkFJTlRTO1xuIik7CiAgICAgICAgIH0KICAg
ICB9CiAKQEAgLTMyMTUsNyArMzIxOSw3IEBAIHN1YiBHZW5lcmF0ZUhlYWRlcgogICAgICAgICB9
CiAgICAgICAgICRoZWFkZXJJbmNsdWRlc3siPHd0Zi9OZXZlckRlc3Ryb3llZC5oPiJ9ID0gMTsK
ICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgInB1YmxpYzpcbiIpOwotICAgICAgICBwdXNo
KEBoZWFkZXJDb250ZW50LCAiICAgIGJvb2wgaXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlND
OjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCwgSlNDOjpTbG90VmlzaXRvciYs
IGNvbnN0IGNoYXIqKikgJHtvdmVycmlkZURlY2x9O1xuIik7CisgICAgICAgIHB1c2goQGhlYWRl
ckNvbnRlbnQsICIgICAgYm9vbCBpc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRs
ZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0LCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3Im
LCBjb25zdCBjaGFyKiopICR7b3ZlcnJpZGVEZWNsfTtcbiIpOwogICAgICAgICBwdXNoKEBoZWFk
ZXJDb250ZW50LCAiICAgIHZvaWQgZmluYWxpemUoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwg
dm9pZCogY29udGV4dCkgJHtvdmVycmlkZURlY2x9O1xuIik7CiAgICAgICAgIHB1c2goQGhlYWRl
ckNvbnRlbnQsICJ9O1xuIik7CiAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJcbiIpOwpA
QCAtNDkzOSw2ICs0OTQzLDcgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICBBZGRU
b0ltcGxJbmNsdWRlcygiRE9NSXNvU3Vic3BhY2VzLmgiKTsKICAgICBBZGRUb0ltcGxJbmNsdWRl
cygiV2ViQ29yZUpTQ2xpZW50RGF0YS5oIik7CiAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIjxKYXZh
U2NyaXB0Q29yZS9KU0Rlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZS5oPiIpOworICAgIEFk
ZFRvSW1wbEluY2x1ZGVzKCI8SmF2YVNjcmlwdENvcmUvU2xvdFZpc2l0b3JNYWNyb3MuaD4iKTsK
ICAgICBBZGRUb0ltcGxJbmNsdWRlcygiPEphdmFTY3JpcHRDb3JlL1N1YnNwYWNlSW5saW5lcy5o
PiIpOwogICAgIHB1c2goQGltcGxDb250ZW50LCAiSlNDOjpJc29TdWJzcGFjZSogJHtjbGFzc05h
bWV9OjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pXG4iKTsKICAgICBwdXNoKEBpbXBsQ29u
dGVudCwgIntcbiIpOwpAQCAtNDk2Niw3ICs0OTcxLDggQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50
YXRpb24KICAgICBwdXNoKEBpbXBsQ29udGVudCwgIn1cblxuIik7CiAKICAgICBpZiAoJG5lZWRz
VmlzaXRDaGlsZHJlbikgewotICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgInZvaWQgJHtjbGFz
c05hbWV9Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3Ip
XG4iKTsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNp
dG9yPlxuIik7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAidm9pZCAke2NsYXNzTmFtZX06
OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcilcbiIpOwog
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIntcbiIpOwogICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudCwgIiAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PCR7Y2xhc3NOYW1lfSo+KGNlbGwp
O1xuIik7CiAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIEFTU0VSVF9HQ19PQkpFQ1Rf
SU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTtcbiIpOwpAQCAtNDk5MSw4ICs0OTk3LDEwIEBA
IHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAg
ICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ9XG5cbiIpOworICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudCwgIkRFRklORV9WSVNJVF9DSElMRFJFTigke2NsYXNzTmFtZX0pO1xuXG4iKTsKKwogICAg
ICAgICBpZiAoJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57SlNDdXN0b21NYXJrRnVu
Y3Rpb259KSB7Ci0gICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgInZvaWQgJHtjbGFzc05h
bWV9Ojp2aXNpdE91dHB1dENvbnN0cmFpbnRzKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZp
c2l0b3IpXG4iKTsKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAidm9pZCAke2NsYXNz
TmFtZX06OnZpc2l0T3V0cHV0Q29uc3RyYWludHMoSlNDZWxsKiBjZWxsLCBBYnN0cmFjdFNsb3RW
aXNpdG9yJiB2aXNpdG9yKVxuIik7CiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIntc
biIpOwogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgYXV0byogdGhpc09iamVj
dCA9IGpzQ2FzdDwke2NsYXNzTmFtZX0qPihjZWxsKTtcbiIpOwogICAgICAgICAgICAgcHVzaChA
aW1wbENvbnRlbnQsICIgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBp
bmZvKCkpO1xuIik7CkBAIC01MDMzLDcgKzUwNDEsNyBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRh
dGlvbgogICAgIH0KIAogICAgIGlmIChTaG91bGRHZW5lcmF0ZVdyYXBwZXJPd25lckNvZGUoJGhh
c1BhcmVudCwgJGludGVyZmFjZSkgJiYgIUdldEN1c3RvbUlzUmVhY2hhYmxlKCRpbnRlcmZhY2Up
KSB7Ci0gICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiYm9vbCBKUyR7aW50ZXJmYWNlTmFtZX1P
d25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3du
PiBoYW5kbGUsIHZvaWQqLCBTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNv
bilcbiIpOworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgImJvb2wgSlMke2ludGVyZmFjZU5h
bWV9T3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5r
bm93bj4gaGFuZGxlLCB2b2lkKiwgQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3Qg
Y2hhcioqIHJlYXNvbilcbiIpOwogICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIntcbiIpOwog
ICAgICAgICAjIEFsbCBBY3RpdmVET01PYmplY3RzIGltcGxlbWVudCBoYXNQZW5kaW5nQWN0aXZp
dHkoKSwgYnV0IG5vdCBhbGwgb2YgdGhlbQogICAgICAgICAjIGluY3JlbWVudCB0aGVpciBDKysg
cmVmZXJlbmNlIGNvdW50cyB3aGVuIGhhc1BlbmRpbmdBY3Rpdml0eSgpIGJlY29tZXMKQEAgLTY0
MzIsNyArNjQ0MCw4IEBAIHN1YiBHZW5lcmF0ZUNhbGxiYWNrSGVhZGVyQ29udGVudAogICAgICAg
ICBwdXNoKEAkY29udGVudFJlZiwgIiAgICBib29sIGhhc0NhbGxiYWNrKCkgY29uc3QgZmluYWwg
eyByZXR1cm4gbV9kYXRhICYmIG1fZGF0YS0+Y2FsbGJhY2soKTsgfVxuXG4iKTsKICAgICB9CiAK
LSAgICBwdXNoKEAkY29udGVudFJlZiwgIiAgICB2b2lkIHZpc2l0SlNGdW5jdGlvbihKU0M6OlNs
b3RWaXNpdG9yJikgb3ZlcnJpZGU7XG5cbiIpIGlmICRpbnRlcmZhY2VPckNhbGxiYWNrLT5leHRl
bmRlZEF0dHJpYnV0ZXMtPntJc1dlYWtDYWxsYmFja307CisjICAgIHB1c2goQCRjb250ZW50UmVm
LCAiICAgIHZvaWQgdmlzaXRKU0Z1bmN0aW9uKEpTQzo6U2xvdFZpc2l0b3ImKSBvdmVycmlkZTtc
blxuIikgaWYgJGludGVyZmFjZU9yQ2FsbGJhY2stPmV4dGVuZGVkQXR0cmlidXRlcy0+e0lzV2Vh
a0NhbGxiYWNrfTsKKyAgICBwdXNoKEAkY29udGVudFJlZiwgIiAgICB2b2lkIHZpc2l0SlNGdW5j
dGlvbihKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKSBvdmVycmlkZTtcblxuIikgaWYgJGludGVy
ZmFjZU9yQ2FsbGJhY2stPmV4dGVuZGVkQXR0cmlidXRlcy0+e0lzV2Vha0NhbGxiYWNrfTsKIAog
ICAgIHB1c2goQCRjb250ZW50UmVmLCAiICAgICR7Y2FsbGJhY2tEYXRhVHlwZX0qIG1fZGF0YTtc
biIpOwogICAgIHB1c2goQCRjb250ZW50UmVmLCAifTtcblxuIik7CkBAIC02NjIzLDcgKzY2MzIs
OCBAQCBzdWIgR2VuZXJhdGVDYWxsYmFja0ltcGxlbWVudGF0aW9uQ29udGVuCiAgICAgfQogCiAg
ICAgaWYgKCRpbnRlcmZhY2VPckNhbGxiYWNrLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntJc1dlYWtD
YWxsYmFja30pIHsKLSAgICAgICAgcHVzaChAJGNvbnRlbnRSZWYsICJ2b2lkICR7Y2xhc3NOYW1l
fTo6dmlzaXRKU0Z1bmN0aW9uKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpXG4iKTsKKyMgICAg
ICAgIHB1c2goQCRjb250ZW50UmVmLCAidm9pZCAke2NsYXNzTmFtZX06OnZpc2l0SlNGdW5jdGlv
bihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKVxuIik7CisgICAgICAgIHB1c2goQCRjb250ZW50
UmVmLCAidm9pZCAke2NsYXNzTmFtZX06OnZpc2l0SlNGdW5jdGlvbihKU0M6OkFic3RyYWN0U2xv
dFZpc2l0b3ImIHZpc2l0b3IpXG4iKTsKICAgICAgICAgcHVzaChAJGNvbnRlbnRSZWYsICJ7XG4i
KTsKICAgICAgICAgcHVzaChAJGNvbnRlbnRSZWYsICIgICAgbV9kYXRhLT52aXNpdEpTRnVuY3Rp
b24odmlzaXRvcik7XG4iKTsKICAgICAgICAgcHVzaChAJGNvbnRlbnRSZWYsICJ9XG5cbiIpOwpA
QCAtNjczNCw2ICs2NzQ0LDcgQEAgc3ViIEdlbmVyYXRlSXRlcmFibGVEZWZpbml0aW9uCiAgICAg
bXkgJHZpc2libGVJbnRlcmZhY2VOYW1lID0gJGNvZGVHZW5lcmF0b3ItPkdldFZpc2libGVJbnRl
cmZhY2VOYW1lKCRpbnRlcmZhY2UpOwogCiAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIkpTRE9NSXRl
cmF0b3IuaCIpOworICAgIEFkZFRvSW1wbEluY2x1ZGVzKCI8SmF2YVNjcmlwdENvcmUvU2xvdFZp
c2l0b3JNYWNyb3MuaD4iKTsKIAogICAgIHJldHVybiB1bmxlc3MgSXNLZXlWYWx1ZUl0ZXJhYmxl
SW50ZXJmYWNlKCRpbnRlcmZhY2UpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vQWN0aXZl
RE9NQ2FsbGJhY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vQWN0aXZlRE9N
Q2FsbGJhY2suaAkocmV2aXNpb24gMjcyMjk3KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0FjdGl2
ZURPTUNhbGxiYWNrLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRl
ICJDb250ZXh0RGVzdHJ1Y3Rpb25PYnNlcnZlci5oIgogCiBuYW1lc3BhY2UgSlNDIHsKK2NsYXNz
IEFic3RyYWN0U2xvdFZpc2l0b3I7CiBjbGFzcyBTbG90VmlzaXRvcjsKIH0KIApAQCAtNTUsNyAr
NTYsOCBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBhY3RpdmVET01PYmplY3Rz
QXJlU3VzcGVuZGVkKCkgY29uc3Q7CiAgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBhY3RpdmVET01P
YmplY3RBcmVTdG9wcGVkKCkgY29uc3Q7CiAgICAgCi0gICAgdmlydHVhbCB2b2lkIHZpc2l0SlNG
dW5jdGlvbihKU0M6OlNsb3RWaXNpdG9yJikgeyB9CisvLyAgICB2aXJ0dWFsIHZvaWQgdmlzaXRK
U0Z1bmN0aW9uKEpTQzo6U2xvdFZpc2l0b3ImKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXRK
U0Z1bmN0aW9uKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpIHsgfQogfTsKIAogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50TGlzdGVuZXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRMaXN0ZW5lci5oCShyZXZpc2lv
biAyNzIyOTcpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRMaXN0ZW5lci5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yNCw4ICsyNCw5IEBACiAjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KIAogbmFt
ZXNwYWNlIEpTQyB7CitjbGFzcyBBYnN0cmFjdFNsb3RWaXNpdG9yOwogY2xhc3MgSlNPYmplY3Q7
Ci1jbGFzcyBTbG90VmlzaXRvcjsKKy8vY2xhc3MgU2xvdFZpc2l0b3I7CiB9CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKQEAgLTUyLDcgKzUzLDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBo
YW5kbGVFdmVudChTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgRXZlbnQmKSA9IDA7CiAgICAgdmly
dHVhbCBib29sIHdhc0NyZWF0ZWRGcm9tTWFya3VwKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0K
IAotICAgIHZpcnR1YWwgdm9pZCB2aXNpdEpTRnVuY3Rpb24oSlNDOjpTbG90VmlzaXRvciYpIHsg
fQorLy8gICAgdmlydHVhbCB2b2lkIHZpc2l0SlNGdW5jdGlvbihKU0M6OlNsb3RWaXNpdG9yJikg
eyB9CisgICAgdmlydHVhbCB2b2lkIHZpc2l0SlNGdW5jdGlvbihKU0M6OkFic3RyYWN0U2xvdFZp
c2l0b3ImKSB7IH0KIAogICAgIHZpcnR1YWwgYm9vbCBpc0F0dHJpYnV0ZSgpIGNvbnN0IHsgcmV0
dXJuIGZhbHNlOyB9CiAgICAgVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRUYXJnZXQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2RvbS9FdmVudFRhcmdldC5jcHAJKHJldmlzaW9uIDI3MjI5NykKKysrIFNv
dXJjZS9XZWJDb3JlL2RvbS9FdmVudFRhcmdldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4NCw3
ICszODQsOSBAQCB2b2lkIEV2ZW50VGFyZ2V0OjpyZW1vdmVBbGxFdmVudExpc3RlbmVyCiAgICAg
dGhyZWFkRGF0YS5zZXRJc0luUmVtb3ZlQWxsRXZlbnRMaXN0ZW5lcnMoZmFsc2UpOwogfQogCi12
b2lkIEV2ZW50VGFyZ2V0Ojp2aXNpdEpTRXZlbnRMaXN0ZW5lcnMoSlNDOjpTbG90VmlzaXRvciYg
dmlzaXRvcikKKy8vdm9pZCBFdmVudFRhcmdldDo6dmlzaXRKU0V2ZW50TGlzdGVuZXJzKEpTQzo6
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBF
dmVudFRhcmdldDo6dmlzaXRKU0V2ZW50TGlzdGVuZXJzKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAg
ICAgRXZlbnRUYXJnZXREYXRhKiBkYXRhID0gZXZlbnRUYXJnZXREYXRhQ29uY3VycmVudGx5KCk7
CiAgICAgaWYgKCFkYXRhKQpAQCAtMzk2LDYgKzM5OCw5IEBAIHZvaWQgRXZlbnRUYXJnZXQ6OnZp
c2l0SlNFdmVudExpc3RlbmVycygKICAgICAgICAgbGlzdGVuZXItPnZpc2l0SlNGdW5jdGlvbih2
aXNpdG9yKTsKIH0KIAordGVtcGxhdGUgdm9pZCBFdmVudFRhcmdldDo6dmlzaXRKU0V2ZW50TGlz
dGVuZXJzKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBFdmVudFRh
cmdldDo6dmlzaXRKU0V2ZW50TGlzdGVuZXJzKEpTQzo6U2xvdFZpc2l0b3ImKTsKKwogdm9pZCBF
dmVudFRhcmdldDo6aW52YWxpZGF0ZUV2ZW50TGlzdGVuZXJSZWdpb25zKCkKIHsKICAgICBpZiAo
aXM8RWxlbWVudD4oKnRoaXMpKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRUYXJn
ZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRUYXJnZXQuaAkocmV2
aXNpb24gMjcyMjk3KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50VGFyZ2V0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTk3LDcgKzk3LDggQEAgcHVibGljOgogICAgIHZvaWQgZmlyZUV2ZW50TGlz
dGVuZXJzKEV2ZW50JiwgRXZlbnRJbnZva2VQaGFzZSk7CiAgICAgYm9vbCBpc0ZpcmluZ0V2ZW50
TGlzdGVuZXJzKCkgY29uc3Q7CiAKLSAgICB2b2lkIHZpc2l0SlNFdmVudExpc3RlbmVycyhKU0M6
OlNsb3RWaXNpdG9yJik7CisvLyAgICB2b2lkIHZpc2l0SlNFdmVudExpc3RlbmVycyhKU0M6OlNs
b3RWaXNpdG9yJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCB2aXNpdEpT
RXZlbnRMaXN0ZW5lcnMoVmlzaXRvciYpOwogICAgIHZvaWQgaW52YWxpZGF0ZUpTRXZlbnRMaXN0
ZW5lcnMoSlNDOjpKU09iamVjdCopOwogCiAgICAgY29uc3QgRXZlbnRUYXJnZXREYXRhKiBldmVu
dFRhcmdldERhdGEoKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9NdXRhdGlvblJl
Y29yZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL011dGF0aW9uUmVjb3Jk
LmNwcAkocmV2aXNpb24gMjcyMjk3KQorKysgU291cmNlL1dlYkNvcmUvZG9tL011dGF0aW9uUmVj
b3JkLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEsNyArNDEsOCBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKIG5hbWVzcGFjZSB7CiAKLXN0YXRpYyB2b2lkIHZpc2l0Tm9kZUxpc3QoSlNDOjpTbG90
VmlzaXRvciYgdmlzaXRvciwgTm9kZUxpc3QmIG5vZGVMaXN0KQorLy9zdGF0aWMgdm9pZCB2aXNp
dE5vZGVMaXN0KEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IsIE5vZGVMaXN0JiBub2RlTGlzdCkK
K3N0YXRpYyB2b2lkIHZpc2l0Tm9kZUxpc3QoSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNp
dG9yLCBOb2RlTGlzdCYgbm9kZUxpc3QpCiB7CiAgICAgQVNTRVJUKCFub2RlTGlzdC5pc0xpdmVO
b2RlTGlzdCgpKTsKICAgICB1bnNpZ25lZCBsZW5ndGggPSBub2RlTGlzdC5sZW5ndGgoKTsKQEAg
LTY4LDcgKzY5LDggQEAgcHJpdmF0ZToKICAgICBOb2RlKiBwcmV2aW91c1NpYmxpbmcoKSBvdmVy
cmlkZSB7IHJldHVybiBtX3ByZXZpb3VzU2libGluZy5nZXQoKTsgfQogICAgIE5vZGUqIG5leHRT
aWJsaW5nKCkgb3ZlcnJpZGUgeyByZXR1cm4gbV9uZXh0U2libGluZy5nZXQoKTsgfQogCi0gICAg
dm9pZCB2aXNpdE5vZGVzQ29uY3VycmVudGx5KEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpIGNv
bnN0IGZpbmFsCisvLyAgICB2b2lkIHZpc2l0Tm9kZXNDb25jdXJyZW50bHkoSlNDOjpTbG90Vmlz
aXRvciYgdmlzaXRvcikgY29uc3QgZmluYWwKKyAgICB2b2lkIHZpc2l0Tm9kZXNDb25jdXJyZW50
bHkoSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBjb25zdCBmaW5hbAogICAgIHsK
ICAgICAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHJvb3QobV90YXJnZXQucHRyKCkpKTsKICAg
ICAgICAgaWYgKG1fYWRkZWROb2RlcykKQEAgLTEwNSw3ICsxMDcsOCBAQCBwcml2YXRlOgogICAg
ICAgICByZXR1cm4gbm9kZUxpc3QuZ2V0KCk7CiAgICAgfQogCi0gICAgdm9pZCB2aXNpdE5vZGVz
Q29uY3VycmVudGx5KEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0IGZpbmFsCisvLyAg
ICB2b2lkIHZpc2l0Tm9kZXNDb25jdXJyZW50bHkoSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikg
Y29uc3QgZmluYWwKKyAgICB2b2lkIHZpc2l0Tm9kZXNDb25jdXJyZW50bHkoSlNDOjpBYnN0cmFj
dFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBjb25zdCBmaW5hbAogICAgIHsKICAgICAgICAgdmlzaXRv
ci5hZGRPcGFxdWVSb290KHJvb3QobV90YXJnZXQucHRyKCkpKTsKICAgICB9CkBAIC0xNjQsNyAr
MTY3LDggQEAgcHJpdmF0ZToKIAogICAgIFN0cmluZyBvbGRWYWx1ZSgpIG92ZXJyaWRlIHsgcmV0
dXJuIFN0cmluZygpOyB9CiAKLSAgICB2b2lkIHZpc2l0Tm9kZXNDb25jdXJyZW50bHkoSlNDOjpT
bG90VmlzaXRvciYgdmlzaXRvcikgY29uc3QgZmluYWwKKy8vICAgIHZvaWQgdmlzaXROb2Rlc0Nv
bmN1cnJlbnRseShKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKSBjb25zdCBmaW5hbAorICAgIHZv
aWQgdmlzaXROb2Rlc0NvbmN1cnJlbnRseShKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0
b3IpIGNvbnN0IGZpbmFsCiAgICAgewogICAgICAgICBtX3JlY29yZC0+dmlzaXROb2Rlc0NvbmN1
cnJlbnRseSh2aXNpdG9yKTsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vTXV0YXRp
b25SZWNvcmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vTXV0YXRpb25SZWNv
cmQuaAkocmV2aXNpb24gMjcyMjk3KQorKysgU291cmNlL1dlYkNvcmUvZG9tL011dGF0aW9uUmVj
b3JkLmgJKHdvcmtpbmcgY29weSkKQEAgLTcyLDcgKzcyLDggQEAgcHVibGljOgogCiAgICAgdmly
dHVhbCBTdHJpbmcgb2xkVmFsdWUoKSB7IHJldHVybiBTdHJpbmcoKTsgfQogCi0gICAgdmlydHVh
bCB2b2lkIHZpc2l0Tm9kZXNDb25jdXJyZW50bHkoSlNDOjpTbG90VmlzaXRvciYpIGNvbnN0ID0g
MDsKKy8vICAgIHZpcnR1YWwgdm9pZCB2aXNpdE5vZGVzQ29uY3VycmVudGx5KEpTQzo6U2xvdFZp
c2l0b3ImKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0Tm9kZXNDb25jdXJyZW50
bHkoSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJikgY29uc3QgPSAwOwogfTsKIAogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL1N0YXRpY1JhbmdlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vU3RhdGljUmFuZ2UuY3BwCShyZXZpc2lv
biAyNzIyOTcpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vU3RhdGljUmFuZ2UuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC03Niw3ICs3Niw3IEBAIEV4Y2VwdGlvbk9yPFJlZjxTdGF0aWNSYW5nZT4+IFN0
YXRpY1JhbmcKICAgICByZXR1cm4gY3JlYXRlKHsgeyBpbml0LnN0YXJ0Q29udGFpbmVyLnJlbGVh
c2VOb25OdWxsKCksIGluaXQuc3RhcnRPZmZzZXQgfSwgeyBpbml0LmVuZENvbnRhaW5lci5yZWxl
YXNlTm9uTnVsbCgpLCBpbml0LmVuZE9mZnNldCB9IH0pOwogfQogCi12b2lkIFN0YXRpY1Jhbmdl
Ojp2aXNpdE5vZGVzQ29uY3VycmVudGx5KEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0
Cit2b2lkIFN0YXRpY1JhbmdlOjp2aXNpdE5vZGVzQ29uY3VycmVudGx5KEpTQzo6QWJzdHJhY3RT
bG90VmlzaXRvciYgdmlzaXRvcikgY29uc3QKIHsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qo
cm9vdChzdGFydC5jb250YWluZXIuZ2V0KCkpKTsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qo
cm9vdChlbmQuY29udGFpbmVyLmdldCgpKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vU3Rh
dGljUmFuZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vU3RhdGljUmFuZ2Uu
aAkocmV2aXNpb24gMjcyMjk3KQorKysgU291cmNlL1dlYkNvcmUvZG9tL1N0YXRpY1JhbmdlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTU4LDcgKzU4LDcgQEAgcHVibGljOgogICAgIHVuc2lnbmVkIGVu
ZE9mZnNldCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIFNpbXBsZVJhbmdlOjplbmRPZmZzZXQoKTsg
fQogICAgIGJvb2wgY29sbGFwc2VkKCkgY29uc3QgZmluYWwgeyByZXR1cm4gU2ltcGxlUmFuZ2U6
OmNvbGxhcHNlZCgpOyB9CiAKLSAgICB2b2lkIHZpc2l0Tm9kZXNDb25jdXJyZW50bHkoSlNDOjpT
bG90VmlzaXRvciYpIGNvbnN0OworICAgIHZvaWQgdmlzaXROb2Rlc0NvbmN1cnJlbnRseShKU0M6
OkFic3RyYWN0U2xvdFZpc2l0b3ImKSBjb25zdDsKIAogcHJpdmF0ZToKICAgICBTdGF0aWNSYW5n
ZShTaW1wbGVSYW5nZSYmKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdM
MlJlbmRlcmluZ0NvbnRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL1dlYkdMMlJlbmRlcmluZ0NvbnRleHQuY3BwCShyZXZpc2lvbiAyNzIyOTcpCisrKyBT
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTDJSZW5kZXJpbmdDb250ZXh0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzA3OCwxOCArMzA3OCwyMCBAQCBib29sIFdlYkdMMlJlbmRlcmluZ0Nv
bnRleHQ6OmNoZWNrQW5kVHJhCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgV2ViR0wyUmVu
ZGVyaW5nQ29udGV4dDo6YWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMoSlNDOjpTbG90VmlzaXRvciYg
dmlzaXRvcikKKy8vdm9pZCBXZWJHTDJSZW5kZXJpbmdDb250ZXh0OjphZGRNZW1iZXJzVG9PcGFx
dWVSb290cyhKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBXZWJHTDJSZW5kZXJpbmdD
b250ZXh0OjphZGRNZW1iZXJzVG9PcGFxdWVSb290cyhKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3Im
IHZpc2l0b3IpCiB7CiAgICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6YWRkTWVtYmVyc1Rv
T3BhcXVlUm9vdHModmlzaXRvcik7CiAKICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG9iamVj
dEdyYXBoTG9jaygpKTsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QobV9yZWFkRnJhbWVidWZm
ZXJCaW5kaW5nLmdldCgpKTsKICAgICBpZiAobV9yZWFkRnJhbWVidWZmZXJCaW5kaW5nKQotICAg
ICAgICBtX3JlYWRGcmFtZWJ1ZmZlckJpbmRpbmctPmFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKGxv
Y2tlciwgdmlzaXRvcik7CisgICAgICAgIG1fcmVhZEZyYW1lYnVmZmVyQmluZGluZy0+YWRkTWVt
YmVyc1RvT3BhcXVlUm9vdHMzMDAobG9ja2VyLCB2aXNpdG9yKTsKIAogICAgIHZpc2l0b3IuYWRk
T3BhcXVlUm9vdChtX2JvdW5kVHJhbnNmb3JtRmVlZGJhY2suZ2V0KCkpOwogICAgIGlmIChtX2Jv
dW5kVHJhbnNmb3JtRmVlZGJhY2spCi0gICAgICAgIG1fYm91bmRUcmFuc2Zvcm1GZWVkYmFjay0+
YWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMobG9ja2VyLCB2aXNpdG9yKTsKKy8vICAgICAgICBtX2Jv
dW5kVHJhbnNmb3JtRmVlZGJhY2stPmFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKGxvY2tlciwgdmlz
aXRvcik7CisgICAgICAgIG1fYm91bmRUcmFuc2Zvcm1GZWVkYmFjay0+YWRkTWVtYmVyc1RvT3Bh
cXVlUm9vdHMxMDAobG9ja2VyLCB2aXNpdG9yKTsKIAogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9v
dChtX2JvdW5kQ29weVJlYWRCdWZmZXIuZ2V0KCkpOwogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9v
dChtX2JvdW5kQ29weVdyaXRlQnVmZmVyLmdldCgpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0
bWwvY2FudmFzL1dlYkdMMlJlbmRlcmluZ0NvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTDJSZW5kZXJpbmdDb250ZXh0LmgJKHJldmlzaW9uIDI3
MjI5NykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMMlJlbmRlcmluZ0NvbnRl
eHQuaAkod29ya2luZyBjb3B5KQpAQCAtMjYxLDcgKzI2MSw4IEBAIHB1YmxpYzoKIAogICAgIGJv
b2wgY2hlY2tBbmRUcmFuc2xhdGVBdHRhY2htZW50cyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUs
IEdDR0xlbnVtLCBWZWN0b3I8R0NHTGVudW0+Jik7CiAKLSAgICB2b2lkIGFkZE1lbWJlcnNUb09w
YXF1ZVJvb3RzKEpTQzo6U2xvdFZpc2l0b3ImKSBvdmVycmlkZTsKKy8vICAgIHZvaWQgYWRkTWVt
YmVyc1RvT3BhcXVlUm9vdHMoSlNDOjpTbG90VmlzaXRvciYpIG92ZXJyaWRlOworICAgIHZvaWQg
YWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMoSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJikgb3ZlcnJp
ZGU7CiAKIHByaXZhdGU6CiAgICAgV2ViR0wyUmVuZGVyaW5nQ29udGV4dChDYW52YXNCYXNlJiwg
R3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL1dlYkdMRnJhbWVidWZmZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL1dlYkdMRnJhbWVidWZmZXIuY3BwCShyZXZpc2lvbiAyNzIyOTcpCisrKyBT
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEZyYW1lYnVmZmVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNjMsNyArNjMsOCBAQCBuYW1lc3BhY2UgewogICAgICAgICB2b2lkIG9uRGV0YWNo
ZWQoY29uc3QgQWJzdHJhY3RMb2NrZXImLCBHcmFwaGljc0NvbnRleHRHTCopIG92ZXJyaWRlOwog
ICAgICAgICB2b2lkIGF0dGFjaChHcmFwaGljc0NvbnRleHRHTCosIEdDR0xlbnVtIHRhcmdldCwg
R0NHTGVudW0gYXR0YWNobWVudCkgb3ZlcnJpZGU7CiAgICAgICAgIHZvaWQgdW5hdHRhY2goR3Jh
cGhpY3NDb250ZXh0R0wqLCBHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIGF0dGFjaG1lbnQpIG92
ZXJyaWRlOwotICAgICAgICB2b2lkIGFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKGNvbnN0IEFic3Ry
YWN0TG9ja2VyJiwgSlNDOjpTbG90VmlzaXRvciYpIG92ZXJyaWRlOworLy8gICAgICAgIHZvaWQg
YWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMoY29uc3QgQWJzdHJhY3RMb2NrZXImLCBKU0M6OlNsb3RW
aXNpdG9yJikgb3ZlcnJpZGU7CisgICAgICAgIHZvaWQgYWRkTWVtYmVyc1RvT3BhcXVlUm9vdHM0
MDAoY29uc3QgQWJzdHJhY3RMb2NrZXImLCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKSBvdmVy
cmlkZTsKIAogICAgICAgICBXZWJHTFJlbmRlcmJ1ZmZlckF0dGFjaG1lbnQoKSB7IH07CiAKQEAg
LTE0NSw3ICsxNDYsOCBAQCBuYW1lc3BhY2UgewogICAgICAgICAgICAgY29udGV4dC0+ZnJhbWVi
dWZmZXJSZW5kZXJidWZmZXIodGFyZ2V0LCBhdHRhY2htZW50LCBHcmFwaGljc0NvbnRleHRHTDo6
UkVOREVSQlVGRkVSLCAwKTsKICAgICB9CiAKLSAgICB2b2lkIFdlYkdMUmVuZGVyYnVmZmVyQXR0
YWNobWVudDo6YWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMoY29uc3QgQWJzdHJhY3RMb2NrZXImLCBK
U0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy8gICAgdm9pZCBXZWJHTFJlbmRlcmJ1ZmZlckF0
dGFjaG1lbnQ6OmFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwg
SlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKKyAgICB2b2lkIFdlYkdMUmVuZGVyYnVmZmVyQXR0
YWNobWVudDo6YWRkTWVtYmVyc1RvT3BhcXVlUm9vdHM0MDAoY29uc3QgQWJzdHJhY3RMb2NrZXIm
LCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiAgICAgewogICAgICAgICB2aXNp
dG9yLmFkZE9wYXF1ZVJvb3QobV9yZW5kZXJidWZmZXIuZ2V0KCkpOwogICAgIH0KQEAgLTE2OSw3
ICsxNzEsOCBAQCBuYW1lc3BhY2UgewogICAgICAgICB2b2lkIG9uRGV0YWNoZWQoY29uc3QgQWJz
dHJhY3RMb2NrZXImLCBHcmFwaGljc0NvbnRleHRHTCopIG92ZXJyaWRlOwogICAgICAgICB2b2lk
IGF0dGFjaChHcmFwaGljc0NvbnRleHRHTCosIEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gYXR0
YWNobWVudCkgb3ZlcnJpZGU7CiAgICAgICAgIHZvaWQgdW5hdHRhY2goR3JhcGhpY3NDb250ZXh0
R0wqLCBHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIGF0dGFjaG1lbnQpIG92ZXJyaWRlOwotICAg
ICAgICB2b2lkIGFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwg
SlNDOjpTbG90VmlzaXRvciYpIG92ZXJyaWRlOworLy8gICAgICAgIHZvaWQgYWRkTWVtYmVyc1Rv
T3BhcXVlUm9vdHMoY29uc3QgQWJzdHJhY3RMb2NrZXImLCBKU0M6OlNsb3RWaXNpdG9yJikgb3Zl
cnJpZGU7CisgICAgICAgIHZvaWQgYWRkTWVtYmVyc1RvT3BhcXVlUm9vdHM0MDAoY29uc3QgQWJz
dHJhY3RMb2NrZXImLCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKSBvdmVycmlkZTsKIAogICAg
ICAgICBXZWJHTFRleHR1cmVBdHRhY2htZW50KCkgeyB9OwogCkBAIC0yNjcsNyArMjcwLDggQEAg
bmFtZXNwYWNlIHsKICNlbmRpZgogICAgIH0KIAotICAgIHZvaWQgV2ViR0xUZXh0dXJlQXR0YWNo
bWVudDo6YWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMoY29uc3QgQWJzdHJhY3RMb2NrZXImLCBKU0M6
OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy8gICAgdm9pZCBXZWJHTFRleHR1cmVBdHRhY2htZW50
OjphZGRNZW1iZXJzVG9PcGFxdWVSb290cyhjb25zdCBBYnN0cmFjdExvY2tlciYsIEpTQzo6U2xv
dFZpc2l0b3ImIHZpc2l0b3IpCisgICAgdm9pZCBXZWJHTFRleHR1cmVBdHRhY2htZW50OjphZGRN
ZW1iZXJzVG9PcGFxdWVSb290czQwMChjb25zdCBBYnN0cmFjdExvY2tlciYsIEpTQzo6QWJzdHJh
Y3RTbG90VmlzaXRvciYgdmlzaXRvcikKICAgICB7CiAgICAgICAgIHZpc2l0b3IuYWRkT3BhcXVl
Um9vdChtX3RleHR1cmUuZ2V0KCkpOwogICAgIH0KQEAgLTcyMSwxMCArNzI1LDExIEBAIEdDR0xl
bnVtIFdlYkdMRnJhbWVidWZmZXI6OmdldERyYXdCdWZmZXIKICAgICByZXR1cm4gR3JhcGhpY3ND
b250ZXh0R0w6Ok5PTkU7CiB9CiAKLXZvaWQgV2ViR0xGcmFtZWJ1ZmZlcjo6YWRkTWVtYmVyc1Rv
T3BhcXVlUm9vdHMoY29uc3QgQWJzdHJhY3RMb2NrZXImIGxvY2tlciwgSlNDOjpTbG90VmlzaXRv
ciYgdmlzaXRvcikKKy8vdm9pZCBXZWJHTEZyYW1lYnVmZmVyOjphZGRNZW1iZXJzVG9PcGFxdWVS
b290cyhjb25zdCBBYnN0cmFjdExvY2tlciYgbG9ja2VyLCBKU0M6OlNsb3RWaXNpdG9yJiB2aXNp
dG9yKQordm9pZCBXZWJHTEZyYW1lYnVmZmVyOjphZGRNZW1iZXJzVG9PcGFxdWVSb290czMwMChj
b25zdCBBYnN0cmFjdExvY2tlciYgbG9ja2VyLCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImIHZp
c2l0b3IpCiB7CiAgICAgZm9yIChhdXRvJiBlbnRyeSA6IG1fYXR0YWNobWVudHMpCi0gICAgICAg
IGVudHJ5LnZhbHVlLT5hZGRNZW1iZXJzVG9PcGFxdWVSb290cyhsb2NrZXIsIHZpc2l0b3IpOwor
ICAgICAgICBlbnRyeS52YWx1ZS0+YWRkTWVtYmVyc1RvT3BhcXVlUm9vdHM0MDAobG9ja2VyLCB2
aXNpdG9yKTsKIH0KIAogdm9pZCBXZWJHTEZyYW1lYnVmZmVyOjpzZXRBdHRhY2htZW50SW50ZXJu
YWwoR0NHTGVudW0gYXR0YWNobWVudCwgR0NHTGVudW0gdGV4VGFyZ2V0LCBXZWJHTFRleHR1cmUq
IHRleHR1cmUsIEdDR0xpbnQgbGV2ZWwsIEdDR0xpbnQgbGF5ZXIpCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9odG1sL2NhbnZhcy9XZWJHTEZyYW1lYnVmZmVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xGcmFtZWJ1ZmZlci5oCShyZXZpc2lvbiAyNzIyOTcp
CisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEZyYW1lYnVmZmVyLmgJKHdvcmtp
bmcgY29weSkKQEAgLTM0LDcgKzM0LDggQEAKICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5h
bWVzcGFjZSBKU0MgewotY2xhc3MgU2xvdFZpc2l0b3I7CisvL2NsYXNzIFNsb3RWaXNpdG9yOwor
Y2xhc3MgQWJzdHJhY3RTbG90VmlzaXRvcjsKIH0KIAogbmFtZXNwYWNlIFdURiB7CkBAIC02NSw3
ICs2Niw4IEBAIHB1YmxpYzoKICAgICAgICAgdmlydHVhbCB2b2lkIG9uRGV0YWNoZWQoY29uc3Qg
V1RGOjpBYnN0cmFjdExvY2tlciYsIEdyYXBoaWNzQ29udGV4dEdMKikgPSAwOwogICAgICAgICB2
aXJ0dWFsIHZvaWQgYXR0YWNoKEdyYXBoaWNzQ29udGV4dEdMKiwgR0NHTGVudW0gdGFyZ2V0LCBH
Q0dMZW51bSBhdHRhY2htZW50KSA9IDA7CiAgICAgICAgIHZpcnR1YWwgdm9pZCB1bmF0dGFjaChH
cmFwaGljc0NvbnRleHRHTCosIEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gYXR0YWNobWVudCkg
PSAwOwotICAgICAgICB2aXJ0dWFsIHZvaWQgYWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMoY29uc3Qg
V1RGOjpBYnN0cmFjdExvY2tlciYsIEpTQzo6U2xvdFZpc2l0b3ImKSA9IDA7CisvLyAgICAgICAg
dmlydHVhbCB2b2lkIGFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKGNvbnN0IFdURjo6QWJzdHJhY3RM
b2NrZXImLCBKU0M6OlNsb3RWaXNpdG9yJikgPSAwOworICAgICAgICB2aXJ0dWFsIHZvaWQgYWRk
TWVtYmVyc1RvT3BhcXVlUm9vdHM0MDAoY29uc3QgV1RGOjpBYnN0cmFjdExvY2tlciYsIEpTQzo6
QWJzdHJhY3RTbG90VmlzaXRvciYpID0gMDsKIAogICAgIHByb3RlY3RlZDoKICAgICAgICAgV2Vi
R0xBdHRhY2htZW50KCk7CkBAIC0xMTQsNyArMTE2LDggQEAgcHVibGljOgogCiAgICAgR0NHTGVu
dW0gZ2V0RHJhd0J1ZmZlcihHQ0dMZW51bSk7CiAKLSAgICB2b2lkIGFkZE1lbWJlcnNUb09wYXF1
ZVJvb3RzKGNvbnN0IFdURjo6QWJzdHJhY3RMb2NrZXImLCBKU0M6OlNsb3RWaXNpdG9yJik7Cisv
LyAgICB2b2lkIGFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKGNvbnN0IFdURjo6QWJzdHJhY3RMb2Nr
ZXImLCBKU0M6OlNsb3RWaXNpdG9yJik7CisgICAgdm9pZCBhZGRNZW1iZXJzVG9PcGFxdWVSb290
czMwMChjb25zdCBXVEY6OkFic3RyYWN0TG9ja2VyJiwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9y
Jik7CiAKIHByaXZhdGU6CiAgICAgV2ViR0xGcmFtZWJ1ZmZlcihXZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlJik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFByb2dyYW0u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUHJvZ3Jh
bS5jcHAJKHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dl
YkdMUHJvZ3JhbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwNiw3ICsyMDYsOCBAQCBib29sIFdl
YkdMUHJvZ3JhbTo6ZGV0YWNoU2hhZGVyKGNvbnN0IEFiCiAgICAgfQogfQogCi12b2lkIFdlYkdM
UHJvZ3JhbTo6YWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMoY29uc3QgQWJzdHJhY3RMb2NrZXImLCBK
U0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy92b2lkIFdlYkdMUHJvZ3JhbTo6YWRkTWVtYmVy
c1RvT3BhcXVlUm9vdHMoY29uc3QgQWJzdHJhY3RMb2NrZXImLCBKU0M6OlNsb3RWaXNpdG9yJiB2
aXNpdG9yKQordm9pZCBXZWJHTFByb2dyYW06OmFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzMjAwKGNv
bnN0IEFic3RyYWN0TG9ja2VyJiwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQog
ewogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChtX3ZlcnRleFNoYWRlci5nZXQoKSk7CiAgICAg
dmlzaXRvci5hZGRPcGFxdWVSb290KG1fZnJhZ21lbnRTaGFkZXIuZ2V0KCkpOwpJbmRleDogU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xQcm9ncmFtLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xQcm9ncmFtLmgJKHJldmlzaW9uIDI3MjI5NykK
KysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUHJvZ3JhbS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zNSw3ICszNSw4IEBACiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3Bh
Y2UgSlNDIHsKLWNsYXNzIFNsb3RWaXNpdG9yOworLy9jbGFzcyBTbG90VmlzaXRvcjsKK2NsYXNz
IEFic3RyYWN0U2xvdFZpc2l0b3I7CiB9CiAKIG5hbWVzcGFjZSBXVEYgewpAQCAtODgsNyArODks
OCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX3JlcXVpcmVkVHJhbnNmb3JtRmVlZGJhY2tC
dWZmZXJDb3VudDsKICAgICB9CiAKLSAgICB2b2lkIGFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKGNv
bnN0IFdURjo6QWJzdHJhY3RMb2NrZXImLCBKU0M6OlNsb3RWaXNpdG9yJik7CisvLyAgICB2b2lk
IGFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKGNvbnN0IFdURjo6QWJzdHJhY3RMb2NrZXImLCBKU0M6
OlNsb3RWaXNpdG9yJik7CisgICAgdm9pZCBhZGRNZW1iZXJzVG9PcGFxdWVSb290czIwMChjb25z
dCBXVEY6OkFic3RyYWN0TG9ja2VyJiwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAKIHBy
aXZhdGU6CiAgICAgV2ViR0xQcm9ncmFtKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UmKTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVy
aW5nQ29udGV4dEJhc2UuY3BwCShyZXZpc2lvbiAyNzIyOTcpCisrKyBTb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNzkzMSwyMyArNzkzMSwyNiBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmRp
c3BhdGNoCiAgICAgcXVldWVUYXNrVG9EaXNwYXRjaEV2ZW50KCpjYW52YXMsIFRhc2tTb3VyY2U6
OldlYkdMLCBXZWJHTENvbnRleHRFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS53ZWJnbGNvbnRl
eHRjaGFuZ2VkRXZlbnQsIEV2ZW50OjpDYW5CdWJibGU6Ok5vLCBFdmVudDo6SXNDYW5jZWxhYmxl
OjpZZXMsIGVtcHR5U3RyaW5nKCkpKTsKIH0KIAotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlOjphZGRNZW1iZXJzVG9PcGFxdWVSb290cyhKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQor
Ly92b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmFkZE1lbWJlcnNUb09wYXF1ZVJvb3Rz
KEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2U6OmFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYgdmlz
aXRvcikKIHsKICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG9iamVjdEdyYXBoTG9jaygpKTsK
IAorICAgIC8vIG1sYW0gRklYTUU6IHdoeSBhcmUgd2Ugbm90IGFsc28gdmlzaXRpbmcgbV9kZWZh
dWx0VmVydGV4QXJyYXlPYmplY3Q/CisKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QobV9ib3Vu
ZEFycmF5QnVmZmVyLmdldCgpKTsKIAogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChtX2JvdW5k
VmVydGV4QXJyYXlPYmplY3QuZ2V0KCkpOwogICAgIGlmIChtX2JvdW5kVmVydGV4QXJyYXlPYmpl
Y3QpCi0gICAgICAgIG1fYm91bmRWZXJ0ZXhBcnJheU9iamVjdC0+YWRkTWVtYmVyc1RvT3BhcXVl
Um9vdHMobG9ja2VyLCB2aXNpdG9yKTsKKyAgICAgICAgbV9ib3VuZFZlcnRleEFycmF5T2JqZWN0
LT5hZGRNZW1iZXJzVG9PcGFxdWVSb290czYwMChsb2NrZXIsIHZpc2l0b3IpOwogCiAgICAgdmlz
aXRvci5hZGRPcGFxdWVSb290KG1fY3VycmVudFByb2dyYW0uZ2V0KCkpOwogICAgIGlmIChtX2N1
cnJlbnRQcm9ncmFtKQotICAgICAgICBtX2N1cnJlbnRQcm9ncmFtLT5hZGRNZW1iZXJzVG9PcGFx
dWVSb290cyhsb2NrZXIsIHZpc2l0b3IpOworICAgICAgICBtX2N1cnJlbnRQcm9ncmFtLT5hZGRN
ZW1iZXJzVG9PcGFxdWVSb290czIwMChsb2NrZXIsIHZpc2l0b3IpOwogCiAgICAgdmlzaXRvci5h
ZGRPcGFxdWVSb290KG1fZnJhbWVidWZmZXJCaW5kaW5nLmdldCgpKTsKICAgICBpZiAobV9mcmFt
ZWJ1ZmZlckJpbmRpbmcpCi0gICAgICAgIG1fZnJhbWVidWZmZXJCaW5kaW5nLT5hZGRNZW1iZXJz
VG9PcGFxdWVSb290cyhsb2NrZXIsIHZpc2l0b3IpOworICAgICAgICBtX2ZyYW1lYnVmZmVyQmlu
ZGluZy0+YWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMzMDAobG9ja2VyLCB2aXNpdG9yKTsKIAogICAg
IHZpc2l0b3IuYWRkT3BhcXVlUm9vdChtX3JlbmRlcmJ1ZmZlckJpbmRpbmcuZ2V0KCkpOwogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJp
bmdDb250ZXh0QmFzZS5oCShyZXZpc2lvbiAyNzIyOTcpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTU4
LDcgKzU4LDggQEAKICNlbmRpZgogCiBuYW1lc3BhY2UgSlNDIHsKLWNsYXNzIFNsb3RWaXNpdG9y
OworLy9jbGFzcyBTbG90VmlzaXRvcjsKK2NsYXNzIEFic3RyYWN0U2xvdFZpc2l0b3I7CiB9CiAK
IG5hbWVzcGFjZSBXVEYgewpAQCAtNDExLDcgKzQxMiw4IEBAIHB1YmxpYzoKICAgICB2b2lkIHJl
Y3ljbGVDb250ZXh0KCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBkaXNwYXRjaENvbnRleHRDaGFuZ2Vk
Tm90aWZpY2F0aW9uKCkgb3ZlcnJpZGU7CiAKLSAgICB2aXJ0dWFsIHZvaWQgYWRkTWVtYmVyc1Rv
T3BhcXVlUm9vdHMoSlNDOjpTbG90VmlzaXRvciYpOworLy8gICAgdmlydHVhbCB2b2lkIGFkZE1l
bWJlcnNUb09wYXF1ZVJvb3RzKEpTQzo6U2xvdFZpc2l0b3ImKTsKKyAgICB2aXJ0dWFsIHZvaWQg
YWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMoSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAgICAg
Ly8gVGhpcyBsb2NrIG11c3QgYmUgaGVsZCBhY3Jvc3MgYWxsIG11dGF0aW9ucyBvZiBjb250YWlu
ZXJzIGxpa2UKICAgICAvLyBWZWN0b3JzLCBIYXNoU2V0cywgZXRjLiB3aGljaCBjb250YWluIFJl
ZlB0cjxXZWJHTE9iamVjdD4sIGFuZAogICAgIC8vIHdoaWNoIGFyZSB0cmF2ZXJzZWQgYnkgYWRk
TWVtYmVyc1RvT3BhcXVlUm9vdHMoKSBvciBhbnkgb2YgdGhlCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9XZWJHTFRyYW5zZm9ybUZlZWRiYWNrLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFRyYW5zZm9ybUZlZWRiYWNrLmNwcAkocmV2
aXNpb24gMjcyMjk3KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xUcmFuc2Zv
cm1GZWVkYmFjay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDggKzMwLDkgQEAKIAogI2luY2x1
ZGUgIldlYkdMQ29udGV4dEdyb3VwLmgiCiAjaW5jbHVkZSAiV2ViR0xSZW5kZXJpbmdDb250ZXh0
QmFzZS5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1Nsb3RWaXNpdG9yLmg+Ci0jaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvU2xvdFZpc2l0b3JJbmxpbmVzLmg+CisvLyNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9TbG90VmlzaXRvci5oPgorLy8jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvU2xv
dFZpc2l0b3JJbmxpbmVzLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvQWJzdHJhY3RTbG90
VmlzaXRvcklubGluZXMuaD4KICNpbmNsdWRlIDx3dGYvTG9jay5oPgogI2luY2x1ZGUgPHd0Zi9M
b2NrZXIuaD4KIApAQCAtOTMsMTQgKzk0LDE1IEBAIGJvb2wgV2ViR0xUcmFuc2Zvcm1GZWVkYmFj
azo6aGFzRW5vdWdoQnUKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBXZWJHTFRyYW5zZm9y
bUZlZWRiYWNrOjphZGRNZW1iZXJzVG9PcGFxdWVSb290cyhjb25zdCBBYnN0cmFjdExvY2tlciYg
bG9ja2VyLCBKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy92b2lkIFdlYkdMVHJhbnNmb3Jt
RmVlZGJhY2s6OmFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKGNvbnN0IEFic3RyYWN0TG9ja2VyJiBs
b2NrZXIsIEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIFdlYkdMVHJhbnNmb3JtRmVl
ZGJhY2s6OmFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzMTAwKGNvbnN0IEFic3RyYWN0TG9ja2VyJiBs
b2NrZXIsIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBmb3IgKGF1
dG8mIGJ1ZmZlciA6IG1fYm91bmRJbmRleGVkVHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJzKQogICAg
ICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QoYnVmZmVyLmdldCgpKTsKIAogICAgIHZpc2l0b3Iu
YWRkT3BhcXVlUm9vdChtX3Byb2dyYW0uZ2V0KCkpOwogICAgIGlmIChtX3Byb2dyYW0pCi0gICAg
ICAgIG1fcHJvZ3JhbS0+YWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMobG9ja2VyLCB2aXNpdG9yKTsK
KyAgICAgICAgbV9wcm9ncmFtLT5hZGRNZW1iZXJzVG9PcGFxdWVSb290czIwMChsb2NrZXIsIHZp
c2l0b3IpOwogfQogCiB2b2lkIFdlYkdMVHJhbnNmb3JtRmVlZGJhY2s6OnVuYmluZEJ1ZmZlcihj
b25zdCBBYnN0cmFjdExvY2tlciYsIFdlYkdMQnVmZmVyJiBidWZmZXIpCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFRyYW5zZm9ybUZlZWRiYWNrLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xUcmFuc2Zvcm1GZWVkYmFjay5oCShy
ZXZpc2lvbiAyNzIyOTcpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFRyYW5z
Zm9ybUZlZWRiYWNrLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDggQEAKICNpbmNsdWRl
ICJXZWJHTFNoYXJlZE9iamVjdC5oIgogCiBuYW1lc3BhY2UgSlNDIHsKLWNsYXNzIFNsb3RWaXNp
dG9yOworLy9jbGFzcyBTbG90VmlzaXRvcjsKK2NsYXNzIEFic3RyYWN0U2xvdFZpc2l0b3I7CiB9
CiAKIG5hbWVzcGFjZSBXVEYgewpAQCAtNzAsNyArNzEsOCBAQCBwdWJsaWM6CiAgICAgCiAgICAg
Ym9vbCBoYXNFbm91Z2hCdWZmZXJzKEdDR0x1aW50IG51bVJlcXVpcmVkKSBjb25zdDsKIAotICAg
IHZvaWQgYWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMoY29uc3QgQWJzdHJhY3RMb2NrZXImLCBKU0M6
OlNsb3RWaXNpdG9yJik7CisvLyAgICB2b2lkIGFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKGNvbnN0
IEFic3RyYWN0TG9ja2VyJiwgSlNDOjpTbG90VmlzaXRvciYpOworICAgIHZvaWQgYWRkTWVtYmVy
c1RvT3BhcXVlUm9vdHMxMDAoY29uc3QgQWJzdHJhY3RMb2NrZXImLCBKU0M6OkFic3RyYWN0U2xv
dFZpc2l0b3ImKTsKIAogcHJpdmF0ZToKICAgICBXZWJHTFRyYW5zZm9ybUZlZWRiYWNrKFdlYkdM
MlJlbmRlcmluZ0NvbnRleHQmKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dl
YkdMVmVydGV4QXJyYXlPYmplY3RCYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9XZWJHTFZlcnRleEFycmF5T2JqZWN0QmFzZS5jcHAJKHJldmlzaW9uIDI3
MjI5NykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVmVydGV4QXJyYXlPYmpl
Y3RCYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksOCArMjksOSBAQAogI2lmIEVOQUJMRShX
RUJHTCkKIAogI2luY2x1ZGUgIldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuaCIKLSNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9TbG90VmlzaXRvci5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L1Nsb3RWaXNpdG9ySW5saW5lcy5oPgorLy8jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvU2xvdFZp
c2l0b3IuaD4KKy8vI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1Nsb3RWaXNpdG9ySW5saW5lcy5o
PgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0Fic3RyYWN0U2xvdFZpc2l0b3JJbmxpbmVzLmg+
CiAjaW5jbHVkZSA8d3RmL0xvY2tlci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0xMDks
NyArMTEwLDggQEAgdm9pZCBXZWJHTFZlcnRleEFycmF5T2JqZWN0QmFzZTo6c2V0VmVydAogICAg
IG1fdmVydGV4QXR0cmliU3RhdGVbaW5kZXhdLmRpdmlzb3IgPSBkaXZpc29yOwogfQogCi12b2lk
IFdlYkdMVmVydGV4QXJyYXlPYmplY3RCYXNlOjphZGRNZW1iZXJzVG9PcGFxdWVSb290cyhjb25z
dCBBYnN0cmFjdExvY2tlciYsIEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3ZvaWQgV2Vi
R0xWZXJ0ZXhBcnJheU9iamVjdEJhc2U6OmFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzNjAwKGNvbnN0
IEFic3RyYWN0TG9ja2VyJiwgSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgV2ViR0xW
ZXJ0ZXhBcnJheU9iamVjdEJhc2U6OmFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzNjAwKGNvbnN0IEFi
c3RyYWN0TG9ja2VyJiwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAg
IHZpc2l0b3IuYWRkT3BhcXVlUm9vdChtX2JvdW5kRWxlbWVudEFycmF5QnVmZmVyLmdldCgpKTsK
ICAgICBmb3IgKGF1dG8mIHN0YXRlIDogbV92ZXJ0ZXhBdHRyaWJTdGF0ZSkKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVmVydGV4QXJyYXlPYmplY3RCYXNlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xWZXJ0ZXhBcnJheU9iamVj
dEJhc2UuaAkocmV2aXNpb24gMjcyMjk3KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
V2ViR0xWZXJ0ZXhBcnJheU9iamVjdEJhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIs
OCBAQAogI2luY2x1ZGUgIldlYkdMQ29udGV4dE9iamVjdC5oIgogCiBuYW1lc3BhY2UgSlNDIHsK
LWNsYXNzIFNsb3RWaXNpdG9yOworLy9jbGFzcyBTbG90VmlzaXRvcjsKK2NsYXNzIEFic3RyYWN0
U2xvdFZpc2l0b3I7CiB9CiAKIG5hbWVzcGFjZSBXVEYgewpAQCAtNzcsNyArNzgsOCBAQCBwdWJs
aWM6CiAKICAgICB2b2lkIHNldFZlcnRleEF0dHJpYkRpdmlzb3IoR0NHTHVpbnQgaW5kZXgsIEdD
R0x1aW50IGRpdmlzb3IpOwogCi0gICAgdm9pZCBhZGRNZW1iZXJzVG9PcGFxdWVSb290cyhjb25z
dCBXVEY6OkFic3RyYWN0TG9ja2VyJiwgSlNDOjpTbG90VmlzaXRvciYpOworLy8gICAgdm9pZCBh
ZGRNZW1iZXJzVG9PcGFxdWVSb290czYwMChjb25zdCBXVEY6OkFic3RyYWN0TG9ja2VyJiwgSlND
OjpTbG90VmlzaXRvciYpOworICAgIHZvaWQgYWRkTWVtYmVyc1RvT3BhcXVlUm9vdHM2MDAoY29u
c3QgV1RGOjpBYnN0cmFjdExvY2tlciYsIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpOwogCiBw
cm90ZWN0ZWQ6CiAgICAgV2ViR0xWZXJ0ZXhBcnJheU9iamVjdEJhc2UoV2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZSYsIFR5cGUpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>419917</attachid>
            <date>2021-02-10 16:18:25 -0800</date>
            <delta_ts>2021-02-10 23:52:33 -0800</delta_ts>
            <desc>dirty patch with lots of debugging instrumentations &amp; refactorings.</desc>
            <filename>bug-217274g-dirty.patch</filename>
            <type>text/plain</type>
            <size>535504</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDI3MjI5NykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtNjA4LDYgKzYwOCw4IEBAIHNldChKYXZhU2NyaXB0Q29yZV9QUklWQVRFX0ZSQU1FV09SS19I
RUEKICAgICBkb21qaXQvRE9NSklUSGVhcFJhbmdlLmgKICAgICBkb21qaXQvRE9NSklUU2lnbmF0
dXJlLmgKIAorICAgIGhlYXAvQWJzdHJhY3RTbG90VmlzaXRvci5oCisgICAgaGVhcC9BYnN0cmFj
dFNsb3RWaXNpdG9ySW5saW5lcy5oCiAgICAgaGVhcC9BbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmgK
ICAgICBoZWFwL0FsbG9jYXRpb25GYWlsdXJlTW9kZS5oCiAgICAgaGVhcC9BbGxvY2F0b3IuaApA
QCAtNjgxLDEyICs2ODMsMTQgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1BSSVZBVEVfRlJBTUVXT1JL
X0hFQQogICAgIGhlYXAvU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQuaAogICAgIGhlYXAvU2xvdFZp
c2l0b3IuaAogICAgIGhlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmgKKyAgICBoZWFwL1Nsb3RWaXNp
dG9yTWFjcm9zLmgKICAgICBoZWFwL1N0cm9uZy5oCiAgICAgaGVhcC9TdHJvbmdJbmxpbmVzLmgK
ICAgICBoZWFwL1N1YnNwYWNlLmgKICAgICBoZWFwL1N1YnNwYWNlSW5saW5lcy5oCiAgICAgaGVh
cC9TeW5jaHJvbm91c25lc3MuaAogICAgIGhlYXAvVGlueUJsb29tRmlsdGVyLmgKKyAgICBoZWFw
L1ZlcmlmaWVyU2xvdFZpc2l0b3IuaAogICAgIGhlYXAvVmlzaXRSYWNlS2V5LmgKICAgICBoZWFw
L1dlYWsuaAogICAgIGhlYXAvV2Vha0Jsb2NrLmgKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9Tb3VyY2VzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNl
cy50eHQJKHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2Vz
LnR4dAkod29ya2luZyBjb3B5KQpAQCAtNTAxLDYgKzUwMSw3IEBAIGZ0bC9GVExTdGF0ZS5jcHAK
IGZ0bC9GVExUaHVua3MuY3BwCiBmdGwvRlRMVmFsdWVSYW5nZS5jcHAKIAoraGVhcC9BYnN0cmFj
dFNsb3RWaXNpdG9yLmNwcAogaGVhcC9BbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmNwcAogaGVhcC9B
bGxvY2F0b3IuY3BwCiBoZWFwL0Jsb2NrRGlyZWN0b3J5LmNwcApAQCAtNTU5LDYgKzU2MCw3IEBA
IGhlYXAvU3RvcElmTmVjZXNzYXJ5VGltZXIuY3BwCiBoZWFwL1N1YnNwYWNlLmNwcAogaGVhcC9T
eW5jaHJvbm91c1N0b3BUaGVXb3JsZE11dGF0b3JTY2hlZHVsZXIuY3BwCiBoZWFwL1N5bmNocm9u
b3VzbmVzcy5jcHAKK2hlYXAvVmVyaWZpZXJTbG90VmlzaXRvci5jcHAKIGhlYXAvVmlzaXRSYWNl
S2V5LmNwcAogaGVhcC9XZWFrLmNwcAogaGVhcC9XZWFrQmxvY2suY3BwCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQVBJL0pTQVBJV3JhcHBlck9iamVjdC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNBUElXcmFwcGVyT2JqZWN0LmgJKHJldmlzaW9uIDI3
MjI5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNBUElXcmFwcGVyT2JqZWN0LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC00MSw3ICs0MSw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9p
ZCBzdWJzcGFjZUZvcihWTSYpIHsgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQogICAg
IAogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENo
aWxkcmVuKEpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX0VYUE9SVF9W
SVNJVF9DSElMRFJFTjsKICAgICAKICAgICB2b2lkKiB3cmFwcGVkT2JqZWN0KCkgeyByZXR1cm4g
bV93cmFwcGVkT2JqZWN0OyB9CiAgICAgdm9pZCBzZXRXcmFwcGVkT2JqZWN0KHZvaWQqKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNBUElXcmFwcGVyT2JqZWN0Lm1tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNBUElXcmFwcGVyT2JqZWN0Lm1t
CShyZXZpc2lvbiAyNzIyOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQVBJV3Jh
cHBlck9iamVjdC5tbQkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM3LDcgKzM3LDcgQEAKIGNsYXNzIEpT
QVBJV3JhcHBlck9iamVjdEhhbmRsZU93bmVyIGZpbmFsIDogcHVibGljIEpTQzo6V2Vha0hhbmRs
ZU93bmVyIHsKIHB1YmxpYzoKICAgICB2b2lkIGZpbmFsaXplKEpTQzo6SGFuZGxlPEpTQzo6VW5r
bm93bj4sIHZvaWQqKSBmaW5hbDsKLSAgICBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3Rz
KEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6U2xvdFZpc2l0
b3ImLCBjb25zdCBjaGFyKiopIGZpbmFsOworICAgIGJvb2wgaXNSZWFjaGFibGVGcm9tT3BhcXVl
Um9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCwgSlNDOjpBYnN0
cmFjdFNsb3RWaXNpdG9yJiwgY29uc3QgY2hhcioqKSBmaW5hbDsKIH07CiAKIHN0YXRpYyBKU0FQ
SVdyYXBwZXJPYmplY3RIYW5kbGVPd25lcioganNBUElXcmFwcGVyT2JqZWN0SGFuZGxlT3duZXIo
KQpAQCAtNTYsMTQgKzU2LDE1IEBAIHZvaWQgSlNBUElXcmFwcGVyT2JqZWN0SGFuZGxlT3duZXI6
OmZpbmEKICAgICBKU0M6OldlYWtTZXQ6OmRlYWxsb2NhdGUoSlNDOjpXZWFrSW1wbDo6YXNXZWFr
SW1wbChoYW5kbGUuc2xvdCgpKSk7CiB9CiAKLWJvb2wgSlNBUElXcmFwcGVyT2JqZWN0SGFuZGxl
T3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93
bj4gaGFuZGxlLCB2b2lkKiwgSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioq
KQorYm9vbCBKU0FQSVdyYXBwZXJPYmplY3RIYW5kbGVPd25lcjo6aXNSZWFjaGFibGVGcm9tT3Bh
cXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBKU0M6OkFi
c3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKikKIHsKICAgICBKU0M6OkpT
QVBJV3JhcHBlck9iamVjdCogd3JhcHBlck9iamVjdCA9IEpTQzo6anNDYXN0PEpTQzo6SlNBUElX
cmFwcGVyT2JqZWN0Kj4oaGFuZGxlLmdldCgpLmFzQ2VsbCgpKTsKICAgICAvLyBXZSB1c2UgdGhl
IEpTR2xvYmFsT2JqZWN0IHdoZW4gcHJvY2Vzc2luZyB3ZWFrIGhhbmRsZXMgdG8gcHJldmVudCB0
aGUgc2l0dWF0aW9uIHdoZXJlIHVzaW5nCiAgICAgLy8gdGhlIHNhbWUgT2JqZWN0aXZlLUMgb2Jq
ZWN0IGluIG11bHRpcGxlIGdsb2JhbCBvYmplY3RzIGtlZXBzIGFsbCBvZiB0aGUgZ2xvYmFsIG9i
amVjdHMgYWxpdmUuCiAgICAgaWYgKCF3cmFwcGVyT2JqZWN0LT53cmFwcGVkT2JqZWN0KCkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gdmlzaXRvci52bSgpLmhlYXAuaXNNYXJr
ZWQod3JhcHBlck9iamVjdC0+c3RydWN0dXJlKCktPmdsb2JhbE9iamVjdCgpKSAmJiB2aXNpdG9y
LmNvbnRhaW5zT3BhcXVlUm9vdCh3cmFwcGVyT2JqZWN0LT53cmFwcGVkT2JqZWN0KCkpOworLy8g
ICAgcmV0dXJuIHZpc2l0b3Iudm0oKS5oZWFwLmlzTWFya2VkKHdyYXBwZXJPYmplY3QtPnN0cnVj
dHVyZSgpLT5nbG9iYWxPYmplY3QoKSkgJiYgdmlzaXRvci5jb250YWluc09wYXF1ZVJvb3Qod3Jh
cHBlck9iamVjdC0+d3JhcHBlZE9iamVjdCgpKTsKKyAgICByZXR1cm4gdmlzaXRvci5pc01hcmtl
ZCh3cmFwcGVyT2JqZWN0LT5zdHJ1Y3R1cmUoKS0+Z2xvYmFsT2JqZWN0KCkpICYmIHZpc2l0b3Iu
Y29udGFpbnNPcGFxdWVSb290KHdyYXBwZXJPYmplY3QtPndyYXBwZWRPYmplY3QoKSk7CiB9CiAK
IG5hbWVzcGFjZSBKU0MgewpAQCAtNzMsNiArNzQsOCBAQCBzdGF0aWMgSlNDX0RFQ0xBUkVfSE9T
VF9GVU5DVElPTihjb25zdHJ1CiBzdGF0aWMgSlNDX0RFQ0xBUkVfQ1VTVE9NX0dFVFRFUihjYWxs
YmFja0dldHRlckpTQVBJV3JhcHBlck9iamVjdENhbGxiYWNrT2JqZWN0KTsKIHN0YXRpYyBKU0Nf
REVDTEFSRV9DVVNUT01fR0VUVEVSKHN0YXRpY0Z1bmN0aW9uR2V0dGVySlNBUElXcmFwcGVyT2Jq
ZWN0Q2FsbGJhY2tPYmplY3QpOwogCitERUZJTkVfVEVNUExBVEVfVklTSVRfQ0hJTERSRU4odGVt
cGxhdGU8PiwgSlNDYWxsYmFja09iamVjdDxKU0FQSVdyYXBwZXJPYmplY3Q+KTsKKwogdGVtcGxh
dGUgPD4gY29uc3QgQ2xhc3NJbmZvIEpTQ2FsbGJhY2tPYmplY3Q8SlNBUElXcmFwcGVyT2JqZWN0
Pjo6c19pbmZvID0geyAiSlNBUElXcmFwcGVyT2JqZWN0IiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0
ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU0NhbGxiYWNrT2JqZWN0KSB9OwogdGVt
cGxhdGUgPD4gY29uc3QgYm9vbCBKU0NhbGxiYWNrT2JqZWN0PEpTQVBJV3JhcHBlck9iamVjdD46
Om5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOwogCkBAIC0xMjMsNyArMTI2LDggQEAgdm9pZCBKU0FQ
SVdyYXBwZXJPYmplY3Q6OnNldFdyYXBwZWRPYmplYwogICAgIG1fd3JhcHBlZE9iamVjdCA9IFtz
dGF0aWNfY2FzdDxpZD4od3JhcHBlZE9iamVjdCkgcmV0YWluXTsKIH0KIAotdm9pZCBKU0FQSVdy
YXBwZXJPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBKU0M6OlNsb3RWaXNpdG9y
JiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNBUElXcmFwcGVy
T2JqZWN0Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3Ip
CiB7CiAgICAgSlNBUElXcmFwcGVyT2JqZWN0KiB0aGlzT2JqZWN0ID0gSlNDOjpqc0Nhc3Q8SlNB
UElXcmFwcGVyT2JqZWN0Kj4oY2VsbCk7CiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbihjZWxsLCB2
aXNpdG9yKTsKQEAgLTEzMyw2ICsxMzcsOCBAQCB2b2lkIEpTQVBJV3JhcHBlck9iamVjdDo6dmlz
aXRDaGlsZHJlbihKCiAgICAgICAgIHNjYW5FeHRlcm5hbE9iamVjdEdyYXBoKHZpc2l0b3Iudm0o
KSwgdmlzaXRvciwgd3JhcHBlZE9iamVjdCk7CiB9CiAKK0RFRklORV9FWFBPUlRfVklTSVRfQ0hJ
TERSRU4oSlNBUElXcmFwcGVyT2JqZWN0KTsKKwogdGVtcGxhdGUgPD4KIElzb1N1YnNwYWNlKiBK
U0NhbGxiYWNrT2JqZWN0PEpTQVBJV3JhcHBlck9iamVjdD46OnN1YnNwYWNlRm9ySW1wbChWTSYg
dm0sIFN1YnNwYWNlQWNjZXNzIG1vZGUpCiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
QVBJL0pTQ2FsbGJhY2tPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdC5jcHAJKHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMTcgQXBwbGUgSW5j
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIwIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwNyBFcmljIFNl
aWRlbCA8ZXJpY0B3ZWJraXQub3JnPgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtNDEsNiArNDEsOSBA
QCBzdGF0aWMgSlNDX0RFQ0xBUkVfQ1VTVE9NX0dFVFRFUihzdGF0aWNGCiBzdGF0aWMgSlNDX0RF
Q0xBUkVfQ1VTVE9NX0dFVFRFUihjYWxsYmFja0dldHRlckpTR2xvYmFsT2JqZWN0Q2FsbGJhY2tP
YmplY3QpOwogc3RhdGljIEpTQ19ERUNMQVJFX0NVU1RPTV9HRVRURVIoc3RhdGljRnVuY3Rpb25H
ZXR0ZXJKU0dsb2JhbE9iamVjdENhbGxiYWNrT2JqZWN0KTsKIAorREVGSU5FX1RFTVBMQVRFX1ZJ
U0lUX0NISUxEUkVOKHRlbXBsYXRlPD4sIEpTQ2FsbGJhY2tPYmplY3Q8SlNOb25GaW5hbE9iamVj
dD4pOworREVGSU5FX1RFTVBMQVRFX1ZJU0lUX0NISUxEUkVOKHRlbXBsYXRlPD4sIEpTQ2FsbGJh
Y2tPYmplY3Q8SlNHbG9iYWxPYmplY3Q+KTsKKwogLy8gRGVmaW5lIHRoZSB0d28gdHlwZXMgb2Yg
SlNDYWxsYmFja09iamVjdHMgd2Ugc3VwcG9ydC4KIHRlbXBsYXRlIDw+IGNvbnN0IENsYXNzSW5m
byBKU0NhbGxiYWNrT2JqZWN0PEpTTm9uRmluYWxPYmplY3Q+OjpzX2luZm8gPSB7ICJDYWxsYmFj
a09iamVjdCIsICZCYXNlOjpzX2luZm8sIG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0Rf
VEFCTEUoSlNDYWxsYmFja09iamVjdCkgfTsKIHRlbXBsYXRlIDw+IGNvbnN0IENsYXNzSW5mbyBK
U0NhbGxiYWNrT2JqZWN0PEpTR2xvYmFsT2JqZWN0Pjo6c19pbmZvID0geyAiQ2FsbGJhY2tHbG9i
YWxPYmplY3QiLCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9E
X1RBQkxFKEpTQ2FsbGJhY2tPYmplY3QpIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
QVBJL0pTQ2FsbGJhY2tPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvQVBJL0pTQ2FsbGJhY2tPYmplY3QuaAkocmV2aXNpb24gMjcyMjk3KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTY5
LDcgKzY5LDEwIEBAIHB1YmxpYzoKICAgICAgICAgbV9wcml2YXRlUHJvcGVydGllcy0+ZGVsZXRl
UHJpdmF0ZVByb3BlcnR5KHByb3BlcnR5TmFtZSk7CiAgICAgfQogCi0gICAgdm9pZCB2aXNpdENo
aWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47
CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgorICAgIHZvaWQgdmlzaXRDaGlsZHJl
bihWaXNpdG9yJiB2aXNpdG9yKQogICAgIHsKICAgICAgICAgSlNQcml2YXRlUHJvcGVydHlNYXAq
IHByb3BlcnRpZXMgPSBtX3ByaXZhdGVQcm9wZXJ0aWVzLmdldCgpOwogICAgICAgICBpZiAoIXBy
b3BlcnRpZXMpCkBAIC0xMDMsNyArMTA2LDggQEAgcHVibGljOgogICAgICAgICAgICAgbV9wcm9w
ZXJ0eU1hcC5yZW1vdmUocHJvcGVydHlOYW1lLmltcGwoKSk7CiAgICAgICAgIH0KIAotICAgICAg
ICB2b2lkIHZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisgICAgICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFZpc2l0b3I+CisgICAgICAgIHZvaWQgdmlzaXRDaGlsZHJlbihWaXNpdG9y
JiB2aXNpdG9yKQogICAgICAgICB7CiAgICAgICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2xv
Y2spOwogICAgICAgICAgICAgZm9yIChhdXRvJiBwYWlyIDogbV9wcm9wZXJ0eU1hcCkgewpAQCAt
MjE2LDEzICsyMjAsNyBAQCBwcml2YXRlOgogICAgIHN0YXRpYyBDYWxsRGF0YSBnZXRDb25zdHJ1
Y3REYXRhKEpTQ2VsbCopOwogICAgIHN0YXRpYyBDYWxsRGF0YSBnZXRDYWxsRGF0YShKU0NlbGwq
KTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90Vmlz
aXRvciYgdmlzaXRvcikKLSAgICB7Ci0gICAgICAgIEpTQ2FsbGJhY2tPYmplY3QqIHRoaXNPYmpl
Y3QgPSBqc0Nhc3Q8SlNDYWxsYmFja09iamVjdCo+KGNlbGwpOwotICAgICAgICBBU1NFUlRfR0Nf
T0JKRUNUX0lOSEVSSVRTKChzdGF0aWNfY2FzdDxQYXJlbnQqPih0aGlzT2JqZWN0KSksIEpTQ2Fs
bGJhY2tPYmplY3Q8UGFyZW50Pjo6aW5mbygpKTsKLSAgICAgICAgUGFyZW50Ojp2aXNpdENoaWxk
cmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwotICAgICAgICB0aGlzT2JqZWN0LT5tX2NhbGxiYWNr
T2JqZWN0RGF0YS0+dmlzaXRDaGlsZHJlbih2aXNpdG9yKTsKLSAgICB9CisgICAgREVDTEFSRV9U
RU1QTEFURV9WSVNJVF9DSElMRFJFTjsKIAogICAgIHZvaWQgaW5pdChKU0dsb2JhbE9iamVjdCop
OwogIApAQCAtMjQ1LDYgKzI0MywxNiBAQCBwcml2YXRlOgogICAgIGNvbnN0IENsYXNzSW5mbyog
bV9jbGFzc0luZm8geyBudWxscHRyIH07CiB9OwogCit0ZW1wbGF0ZSA8Y2xhc3MgUGFyZW50Pgor
dGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNDYWxsYmFja09iamVjdDxQYXJlbnQ+
Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCit7Cisg
ICAgSlNDYWxsYmFja09iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0NhbGxiYWNrT2JqZWN0
Kj4oY2VsbCk7CisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUygoc3RhdGljX2Nhc3Q8UGFy
ZW50Kj4odGhpc09iamVjdCkpLCBKU0NhbGxiYWNrT2JqZWN0PFBhcmVudD46OmluZm8oKSk7Cisg
ICAgUGFyZW50Ojp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOworICAgIHRoaXNP
YmplY3QtPm1fY2FsbGJhY2tPYmplY3REYXRhLT52aXNpdENoaWxkcmVuKHZpc2l0b3IpOworfQor
CiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogLy8gaW5jbHVkZSB0aGUgYWN0dWFsIHRlbXBsYXRlIGNs
YXNzIGltcGxlbWVudGF0aW9uCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTTWFu
YWdlZFZhbHVlLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNN
YW5hZ2VkVmFsdWUubW0JKHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9BUEkvSlNNYW5hZ2VkVmFsdWUubW0JKHdvcmtpbmcgY29weSkKQEAgLTQyLDcgKzQyLDcgQEAK
IGNsYXNzIEpTTWFuYWdlZFZhbHVlSGFuZGxlT3duZXIgZmluYWwgOiBwdWJsaWMgSlNDOjpXZWFr
SGFuZGxlT3duZXIgewogcHVibGljOgogICAgIHZvaWQgZmluYWxpemUoSlNDOjpIYW5kbGU8SlND
OjpVbmtub3duPiwgdm9pZCogY29udGV4dCkgZmluYWw7Ci0gICAgYm9vbCBpc1JlYWNoYWJsZUZy
b21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0LCBK
U0M6OlNsb3RWaXNpdG9yJiwgY29uc3QgY2hhcioqKSBmaW5hbDsKKyAgICBib29sIGlzUmVhY2hh
YmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRl
eHQsIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYsIGNvbnN0IGNoYXIqKikgZmluYWw7CiB9Owog
CiBzdGF0aWMgSlNNYW5hZ2VkVmFsdWVIYW5kbGVPd25lciYgbWFuYWdlZFZhbHVlSGFuZGxlT3du
ZXIoKQpAQCAtMTgwLDcgKzE4MCw3IEBAIEBpbnRlcmZhY2UgSlNNYW5hZ2VkVmFsdWUgKFByaXZh
dGVNZXRob2QKIC0gKHZvaWQpZGlzY29ubmVjdFZhbHVlOwogQGVuZAogCi1ib29sIEpTTWFuYWdl
ZFZhbHVlSGFuZGxlT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxl
PEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3Is
IGNvbnN0IGNoYXIqKiByZWFzb24pCitib29sIEpTTWFuYWdlZFZhbHVlSGFuZGxlT3duZXI6Omlz
UmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQq
IGNvbnRleHQsIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioq
IHJlYXNvbikKIHsKICAgICBpZiAoVU5MSUtFTFkocmVhc29uKSkKICAgICAgICAgKnJlYXNvbiA9
ICJKU01hbmFnZWRWYWx1ZSBpcyBvcGFxdWUgcm9vdCI7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvQVBJL0pTTWFya2luZ0NvbnN0cmFpbnRQcml2YXRlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTTWFya2luZ0NvbnN0cmFpbnRQcml2YXRlLmNwcAko
cmV2aXNpb24gMjcyMjk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU01hcmtpbmdD
b25zdHJhaW50UHJpdmF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDcgKzM2LDcgQEAgbmFt
ZXNwYWNlIHsKIEF0b21pYzx1bnNpZ25lZD4gY29uc3RyYWludENvdW50ZXI7CiAKIHN0cnVjdCBN
YXJrZXIgOiBKU01hcmtlciB7Ci0gICAgU2xvdFZpc2l0b3IqIHZpc2l0b3I7CisgICAgQWJzdHJh
Y3RTbG90VmlzaXRvciogdmlzaXRvcjsKIH07CiAKIGJvb2wgaXNNYXJrZWQoSlNNYXJrZXJSZWYg
bWFya2VyUmVmLCBKU09iamVjdFJlZiBvYmplY3RSZWYpCkBAIC00NCw3ICs0NCw4IEBAIGJvb2wg
aXNNYXJrZWQoSlNNYXJrZXJSZWYgbWFya2VyUmVmLCBKU08KICAgICBpZiAoIW9iamVjdFJlZikK
ICAgICAgICAgcmV0dXJuIHRydWU7IC8vIE51bGwgaXMgYW4gaW1tb3J0YWwgb2JqZWN0LgogICAg
IAotICAgIHJldHVybiBzdGF0aWNfY2FzdDxNYXJrZXIqPihtYXJrZXJSZWYpLT52aXNpdG9yLT52
bSgpLmhlYXAuaXNNYXJrZWQodG9KUyhvYmplY3RSZWYpKTsKKy8vICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxNYXJrZXIqPihtYXJrZXJSZWYpLT52aXNpdG9yLT52bSgpLmhlYXAuaXNNYXJrZWQodG9K
UyhvYmplY3RSZWYpKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8TWFya2VyKj4obWFya2VyUmVm
KS0+dmlzaXRvci0+aXNNYXJrZWQodG9KUyhvYmplY3RSZWYpKTsKIH0KIAogdm9pZCBtYXJrKEpT
TWFya2VyUmVmIG1hcmtlclJlZiwgSlNPYmplY3RSZWYgb2JqZWN0UmVmKQpAQCAtNzQsMTEgKzc1
LDExIEBAIHZvaWQgSlNDb250ZXh0R3JvdXBBZGRNYXJraW5nQ29uc3RyYWludCgKICAgICAgICAg
dG9DU3RyaW5nKCJBbWMiLCBjb25zdHJhaW50SW5kZXgsICIoIiwgUmF3UG9pbnRlcihiaXR3aXNl
X2Nhc3Q8dm9pZCo+KGNvbnN0cmFpbnRDYWxsYmFjaykpLCAiKSIpLAogICAgICAgICB0b0NTdHJp
bmcoIkFQSSBNYXJraW5nIENvbnN0cmFpbnQgIyIsIGNvbnN0cmFpbnRJbmRleCwgIiAoIiwgUmF3
UG9pbnRlcihiaXR3aXNlX2Nhc3Q8dm9pZCo+KGNvbnN0cmFpbnRDYWxsYmFjaykpLCAiLCAiLCBS
YXdQb2ludGVyKHVzZXJEYXRhKSwgIikiKSwKICAgICAgICAgW2NvbnN0cmFpbnRDYWxsYmFjaywg
dXNlckRhdGFdCi0gICAgICAgIChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IpIHsKKyAgICAgICAg
KEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsKICAgICAgICAgICAgIE1hcmtlciBtYXJr
ZXI7CiAgICAgICAgICAgICBtYXJrZXIuSXNNYXJrZWQgPSBpc01hcmtlZDsKICAgICAgICAgICAg
IG1hcmtlci5NYXJrID0gbWFyazsKLSAgICAgICAgICAgIG1hcmtlci52aXNpdG9yID0gJnNsb3RW
aXNpdG9yOworICAgICAgICAgICAgbWFya2VyLnZpc2l0b3IgPSAmdmlzaXRvcjsKICAgICAgICAg
ICAgIAogICAgICAgICAgICAgY29uc3RyYWludENhbGxiYWNrKCZtYXJrZXIsIHVzZXJEYXRhKTsK
ICAgICAgICAgfSwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWaXJ0dWFsTWFj
aGluZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmlydHVh
bE1hY2hpbmUubW0JKHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9B
UEkvSlNWaXJ0dWFsTWFjaGluZS5tbQkod29ya2luZyBjb3B5KQpAQCAtMzE1LDcgKzMxNSw4IEBA
ICsgKHZvaWQpc2V0Q3Jhc2hPblZNQ3JlYXRpb246KEJPT0wpc2hvdWwKIAogQGVuZAogCi1zdGF0
aWMgdm9pZCBzY2FuRXh0ZXJuYWxPYmplY3RHcmFwaChKU0M6OlZNJiB2bSwgSlNDOjpTbG90Vmlz
aXRvciYgdmlzaXRvciwgdm9pZCogcm9vdCwgYm9vbCBsb2NrQWNxdWlyZWQpCit0ZW1wbGF0ZTx0
eXBlbmFtZSBWaXNpdG9yPgorc3RhdGljIHZvaWQgc2NhbkV4dGVybmFsT2JqZWN0R3JhcGgoSlND
OjpWTSYgdm0sIFZpc2l0b3ImIHZpc2l0b3IsIHZvaWQqIHJvb3QsIGJvb2wgbG9ja0FjcXVpcmVk
KQogewogICAgIEBhdXRvcmVsZWFzZXBvb2wgewogICAgICAgICBKU1ZpcnR1YWxNYWNoaW5lICp2
aXJ0dWFsTWFjaGluZSA9IFtKU1ZNV3JhcHBlckNhY2hlIHdyYXBwZXJGb3JKU0NvbnRleHRHcm91
cFJlZjp0b1JlZigmdm0pXTsKQEAgLTM0NywxMyArMzQ4LDE3IEBAIHN0YXRpYyB2b2lkIHNjYW5F
eHRlcm5hbE9iamVjdEdyYXBoKEpTQzoKICAgICB9CiB9CiAKLXZvaWQgc2NhbkV4dGVybmFsT2Jq
ZWN0R3JhcGgoSlNDOjpWTSYgdm0sIEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IsIHZvaWQqIHJv
b3QpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBzY2FuRXh0ZXJuYWxPYmplY3RH
cmFwaChKU0M6OlZNJiB2bSwgVmlzaXRvciYgdmlzaXRvciwgdm9pZCogcm9vdCkKIHsKICAgICBi
b29sIGxvY2tBY3F1aXJlZCA9IGZhbHNlOwogICAgIHNjYW5FeHRlcm5hbE9iamVjdEdyYXBoKHZt
LCB2aXNpdG9yLCByb290LCBsb2NrQWNxdWlyZWQpOwogfQogCi12b2lkIHNjYW5FeHRlcm5hbFJl
bWVtYmVyZWRTZXQoSlNDOjpWTSYgdm0sIEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1w
bGF0ZSB2b2lkIHNjYW5FeHRlcm5hbE9iamVjdEdyYXBoKEpTQzo6Vk0mLCBKU0M6OlNsb3RWaXNp
dG9yJiwgdm9pZCopOwordGVtcGxhdGUgdm9pZCBzY2FuRXh0ZXJuYWxPYmplY3RHcmFwaChKU0M6
OlZNJiwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiwgdm9pZCopOworCit2b2lkIHNjYW5FeHRl
cm5hbFJlbWVtYmVyZWRTZXQoSlNDOjpWTSYgdm0sIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYg
dmlzaXRvcikKIHsKICAgICBAYXV0b3JlbGVhc2Vwb29sIHsKICAgICAgICAgSlNWaXJ0dWFsTWFj
aGluZSAqdmlydHVhbE1hY2hpbmUgPSBbSlNWTVdyYXBwZXJDYWNoZSB3cmFwcGVyRm9ySlNDb250
ZXh0R3JvdXBSZWY6dG9SZWYoJnZtKV07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJ
L0pTVmlydHVhbE1hY2hpbmVJbnRlcm5hbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvSlNWaXJ0dWFsTWFjaGluZUludGVybmFsLmgJKHJldmlzaW9uIDI3MjI5NykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWaXJ0dWFsTWFjaGluZUludGVybmFsLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDggQEAKIAogbmFtZXNwYWNlIEpTQyB7CiBjbGFz
cyBWTTsKLWNsYXNzIFNsb3RWaXNpdG9yOworLy9jbGFzcyBTbG90VmlzaXRvcjsKK2NsYXNzIEFi
c3RyYWN0U2xvdFZpc2l0b3I7CiB9CiAKICNpZiBkZWZpbmVkKF9fT0JKQ19fKQpAQCAtNTQsOCAr
NTUsOCBAQCBKU0NvbnRleHRHcm91cFJlZiBnZXRHcm91cEZyb21WaXJ0dWFsTWFjCiAKICNlbmRp
ZiAvLyBkZWZpbmVkKF9fT0JKQ19fKQogCi12b2lkIHNjYW5FeHRlcm5hbE9iamVjdEdyYXBoKEpT
Qzo6Vk0mLCBKU0M6OlNsb3RWaXNpdG9yJiwgdm9pZCogcm9vdCk7Ci12b2lkIHNjYW5FeHRlcm5h
bFJlbWVtYmVyZWRTZXQoSlNDOjpWTSYsIEpTQzo6U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlPHR5
cGVuYW1lIFZpc2l0b3I+IHZvaWQgc2NhbkV4dGVybmFsT2JqZWN0R3JhcGgoSlNDOjpWTSYsIFZp
c2l0b3ImLCB2b2lkKiByb290KTsKK3ZvaWQgc2NhbkV4dGVybmFsUmVtZW1iZXJlZFNldChKU0M6
OlZNJiwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAKICNlbmRpZiAvLyBKU0NfT0JKQ19B
UElfRU5BQkxFRAogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL01hcmtlZEpTVmFs
dWVSZWZBcnJheS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9N
YXJrZWRKU1ZhbHVlUmVmQXJyYXkuY3BwCShyZXZpc2lvbiAyNzIyOTcpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvQVBJL01hcmtlZEpTVmFsdWVSZWZBcnJheS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQ2LDcgKzQ2LDkgQEAgTWFya2VkSlNWYWx1ZVJlZkFycmF5Ojp+TWFya2VkSlNWYWx1ZVJl
ZgogICAgICAgICByZW1vdmUoKTsKIH0KIAotdm9pZCBNYXJrZWRKU1ZhbHVlUmVmQXJyYXk6OnZp
c2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy90ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPgorLy92b2lkIE1hcmtlZEpTVmFsdWVSZWZBcnJheTo6dmlzaXRBZ2dyZWdhdGUoVmlz
aXRvciYgdmlzaXRvcikKK3ZvaWQgTWFya2VkSlNWYWx1ZVJlZkFycmF5Ojp2aXNpdEFnZ3JlZ2F0
ZTEoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU1ZhbHVlUmVmKiBidWZm
ZXIgPSBkYXRhKCk7CiAgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IDA7IGluZGV4IDwgbV9zaXpl
OyArK2luZGV4KSB7CkBAIC02Miw0ICs2NCw3IEBAIHZvaWQgTWFya2VkSlNWYWx1ZVJlZkFycmF5
Ojp2aXNpdEFnZ3JlZ2EKICAgICB9CiB9CiAKKy8vdGVtcGxhdGUgdm9pZCBNYXJrZWRKU1ZhbHVl
UmVmQXJyYXk6OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJik7CisvL3RlbXBsYXRlIHZvaWQg
TWFya2VkSlNWYWx1ZVJlZkFycmF5Ojp2aXNpdEFnZ3JlZ2F0ZShWZXJpZmllclNsb3RWaXNpdG9y
Jik7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQ
SS9NYXJrZWRKU1ZhbHVlUmVmQXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvQVBJL01hcmtlZEpTVmFsdWVSZWZBcnJheS5oCShyZXZpc2lvbiAyNzIyOTcpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL01hcmtlZEpTVmFsdWVSZWZBcnJheS5oCSh3b3JraW5n
IGNvcHkpCkBAIC02Miw3ICs2Miw4IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1faW5saW5l
QnVmZmVyOwogICAgIH0KIAotICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImKTsK
Ky8vICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgdmlzaXRBZ2dyZWdhdGUoVmlz
aXRvciYpOworICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUxKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsK
IAogcHJpdmF0ZToKICAgICB1bnNpZ25lZCBtX3NpemU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvQVBJL2dsaWIvSlNBUElXcmFwcGVyR2xvYmFsT2JqZWN0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNBUElXcmFwcGVyR2xvYmFsT2JqZWN0
LmNwcAkocmV2aXNpb24gMjcyMjk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGli
L0pTQVBJV3JhcHBlckdsb2JhbE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU5LDYgKzU5
LDggQEAgc3RhdGljIEpTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJT04oY29uc3RydQogc3RhdGljIEpT
Q19ERUNMQVJFX0NVU1RPTV9HRVRURVIoY2FsbGJhY2tHZXR0ZXJKU0FQSVdyYXBwZXJHbG9iYWxP
YmplY3RDYWxsYmFja09iamVjdCk7CiBzdGF0aWMgSlNDX0RFQ0xBUkVfQ1VTVE9NX0dFVFRFUihz
dGF0aWNGdW5jdGlvbkdldHRlckpTQVBJV3JhcHBlckdsb2JhbE9iamVjdENhbGxiYWNrT2JqZWN0
KTsKIAorREVGSU5FX1RFTVBMQVRFX1ZJU0lUX0NISUxEUkVOKHRlbXBsYXRlPD4sIEpTQ2FsbGJh
Y2tPYmplY3Q8SlNBUElXcmFwcGVyR2xvYmFsT2JqZWN0Pik7CisKIHRlbXBsYXRlIDw+IGNvbnN0
IENsYXNzSW5mbyBKU0NhbGxiYWNrT2JqZWN0PEpTQVBJV3JhcHBlckdsb2JhbE9iamVjdD46OnNf
aW5mbyA9IHsgIkpTQVBJV3JhcHBlckdsb2JhbE9iamVjdCIsICZCYXNlOjpzX2luZm8sIG51bGxw
dHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNDYWxsYmFja09iamVjdCkgfTsKIHRl
bXBsYXRlPD4gY29uc3QgYm9vbCBKU0NhbGxiYWNrT2JqZWN0PEpTQVBJV3JhcHBlckdsb2JhbE9i
amVjdD46Om5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOwogCkBAIC0xNDQsOSArMTQ2LDkgQEAgdm9p
ZCBKU0FQSVdyYXBwZXJHbG9iYWxPYmplY3Q6OmZpbmlzaENyZQogICAgIFdlYWtTZXQ6OmFsbG9j
YXRlKHRoaXMsIGpzQVBJV3JhcHBlckdsb2JhbE9iamVjdEhhbmRsZU93bmVyKCksIDApOyAvLyBC
YWxhbmNlZCBpbiBKU0FQSVdyYXBwZXJHbG9iYWxPYmplY3RIYW5kbGVPd25lcjo6ZmluYWxpemUu
CiB9CiAKLXZvaWQgSlNBUElXcmFwcGVyR2xvYmFsT2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2Vs
bCogY2VsbCwgSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKLXsKLSAgICBCYXNlOjp2aXNpdENo
aWxkcmVuKGNlbGwsIHZpc2l0b3IpOwotfQorLy92b2lkIEpTQVBJV3JhcHBlckdsb2JhbE9iamVj
dDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3Ip
CisvL3sKKy8vICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4oY2VsbCwgdmlzaXRvcik7CisvL30KIAog
fSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIv
SlNBUElXcmFwcGVyR2xvYmFsT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL0FQSS9nbGliL0pTQVBJV3JhcHBlckdsb2JhbE9iamVjdC5oCShyZXZpc2lvbiAyNzIy
OTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNBUElXcmFwcGVyR2xvYmFs
T2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDcgKzM5LDcgQEAgcHVibGljOgogICAgIHN0
YXRpYyB2b2lkIHN1YnNwYWNlRm9yKFZNJikgeyBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OyB9CiAKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7Ci0gICAgc3RhdGljIHZvaWQgdmlz
aXRDaGlsZHJlbihKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJik7CisgICAgLy8gc3RhdGljIHZv
aWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJik7CiAKICAgICBKU0NH
TGliV3JhcHBlck9iamVjdCogd3JhcHBlZE9iamVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fd3JhcHBl
ZE9iamVjdDsgfQogICAgIHZvaWQgc2V0V3JhcHBlZE9iamVjdChKU0NHTGliV3JhcHBlck9iamVj
dCogd3JhcHBlZE9iamVjdCkgeyBtX3dyYXBwZWRPYmplY3QgPSB3cmFwcGVkT2JqZWN0OyB9Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNBUElXcmFwcGVyT2JqZWN0R0xp
Yi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQVBJ
V3JhcHBlck9iamVjdEdMaWIuY3BwCShyZXZpc2lvbiAyNzIyOTcpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvQVBJL2dsaWIvSlNBUElXcmFwcGVyT2JqZWN0R0xpYi5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJKU0FQ
SVdyYXBwZXJPYmplY3QuaCIKIAorI2luY2x1ZGUgIkFic3RyYWN0U2xvdFZpc2l0b3IuaCIKICNp
bmNsdWRlICJKU0NHTGliV3JhcHBlck9iamVjdC5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIK
ICNpbmNsdWRlICJKU0NhbGxiYWNrT2JqZWN0LmgiCkBAIC0zNiw3ICszNyw4IEBACiBjbGFzcyBK
U0FQSVdyYXBwZXJPYmplY3RIYW5kbGVPd25lciBmaW5hbCA6IHB1YmxpYyBKU0M6OldlYWtIYW5k
bGVPd25lciB7CiBwdWJsaWM6CiAgICAgdm9pZCBmaW5hbGl6ZShKU0M6OkhhbmRsZTxKU0M6OlVu
a25vd24+LCB2b2lkKikgZmluYWw7Ci0gICAgYm9vbCBpc1JlYWNoYWJsZUZyb21PcGFxdWVSb290
cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0LCBKU0M6OlNsb3RWaXNp
dG9yJiwgY29uc3QgY2hhcioqKSBmaW5hbDsKKy8vICAgICBib29sIGlzUmVhY2hhYmxlRnJvbU9w
YXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6
U2xvdFZpc2l0b3ImLCBjb25zdCBjaGFyKiopIGZpbmFsOworICAgIGJvb2wgaXNSZWFjaGFibGVG
cm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCwg
SlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiwgY29uc3QgY2hhcioqKSBmaW5hbDsKIH07CiAKIHN0
YXRpYyBKU0FQSVdyYXBwZXJPYmplY3RIYW5kbGVPd25lcioganNBUElXcmFwcGVyT2JqZWN0SGFu
ZGxlT3duZXIoKQpAQCAtNTUsNyArNTcsOCBAQCB2b2lkIEpTQVBJV3JhcHBlck9iamVjdEhhbmRs
ZU93bmVyOjpmaW5hCiAgICAgSlNDOjpXZWFrU2V0OjpkZWFsbG9jYXRlKEpTQzo6V2Vha0ltcGw6
OmFzV2Vha0ltcGwoaGFuZGxlLnNsb3QoKSkpOwogfQogCi1ib29sIEpTQVBJV3JhcHBlck9iamVj
dEhhbmRsZU93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6
OlVua25vd24+IGhhbmRsZSwgdm9pZCosIEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0
IGNoYXIqKikKKy8vIGJvb2wgSlNBUElXcmFwcGVyT2JqZWN0SGFuZGxlT3duZXI6OmlzUmVhY2hh
YmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lk
KiwgSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqKQorYm9vbCBKU0FQSVdy
YXBwZXJPYmplY3RIYW5kbGVPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpI
YW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0
b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKikKIHsKICAgICBKU0M6OkpTQVBJV3JhcHBlck9iamVj
dCogd3JhcHBlck9iamVjdCA9IEpTQzo6anNDYXN0PEpTQzo6SlNBUElXcmFwcGVyT2JqZWN0Kj4o
aGFuZGxlLmdldCgpLmFzQ2VsbCgpKTsKICAgICAvLyBXZSB1c2UgdGhlIEpTR2xvYmFsT2JqZWN0
IHdoZW4gcHJvY2Vzc2luZyB3ZWFrIGhhbmRsZXMgdG8gcHJldmVudCB0aGUgc2l0dWF0aW9uIHdo
ZXJlIHVzaW5nCkBAIC03Miw2ICs3NSw4IEBAIHN0YXRpYyBKU0NfREVDTEFSRV9IT1NUX0ZVTkNU
SU9OKGNvbnN0cnUKIHN0YXRpYyBKU0NfREVDTEFSRV9DVVNUT01fR0VUVEVSKGNhbGxiYWNrR2V0
dGVySlNBUElXcmFwcGVyT2JqZWN0Q2FsbGJhY2tPYmplY3QpOwogc3RhdGljIEpTQ19ERUNMQVJF
X0NVU1RPTV9HRVRURVIoc3RhdGljRnVuY3Rpb25HZXR0ZXJKU0FQSVdyYXBwZXJPYmplY3RDYWxs
YmFja09iamVjdCk7CiAKK0RFRklORV9URU1QTEFURV9WSVNJVF9DSElMRFJFTih0ZW1wbGF0ZTw+
LCBKU0NhbGxiYWNrT2JqZWN0PEpTQVBJV3JhcHBlck9iamVjdD4pOworCiB0ZW1wbGF0ZSA8PiBj
b25zdCBDbGFzc0luZm8gSlNDYWxsYmFja09iamVjdDxKU0FQSVdyYXBwZXJPYmplY3Q+OjpzX2lu
Zm8gPSB7ICJKU0FQSVdyYXBwZXJPYmplY3QiLCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBudWxs
cHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTQ2FsbGJhY2tPYmplY3QpIH07CiB0ZW1wbGF0ZTw+
IGNvbnN0IGJvb2wgSlNDYWxsYmFja09iamVjdDxKU0FQSVdyYXBwZXJPYmplY3Q+OjpuZWVkc0Rl
c3RydWN0aW9uID0gdHJ1ZTsKIApAQCAtMTU1LDkgKzE2MCwxMiBAQCB2b2lkIEpTQVBJV3JhcHBl
ck9iamVjdDo6c2V0V3JhcHBlZE9iamVjCiAgICAgbV93cmFwcGVkT2JqZWN0ID0gd3JhcHBlZE9i
amVjdDsKIH0KIAotdm9pZCBKU0FQSVdyYXBwZXJPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiBjZWxsLCBKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlz
aXRvcj4KK3ZvaWQgSlNBUElXcmFwcGVyT2JqZWN0Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwq
IGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbihjZWxs
LCB2aXNpdG9yKTsKIH0KIAorREVGSU5FX0VYUE9SVF9WSVNJVF9DSElMRFJFTihKU0FQSVdyYXBw
ZXJPYmplY3QpOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCShyZXZpc2lvbiAyNzIyOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAt
MTE1OCw2ICsxMTU4LDcgQEAKIAkJNjVCODM5MkUxQkFDQUQzNjAwNDRFODI0IC8qIENhY2hlZFJl
Y292ZXJ5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2
NUI4MzkyQzFCQUNBOTJBMDA0NEU4MjQgLyogQ2FjaGVkUmVjb3ZlcnkuaCAqLzsgfTsKIAkJNkEz
OENGQUExRTMyQjVBQjAwNjAyMDZGIC8qIEFzeW5jU3RhY2tUcmFjZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkEzOENGQTgxRTMyQjU4QjAwNjAyMDZG
IC8qIEFzeW5jU3RhY2tUcmFjZS5oICovOyB9OwogCQk2QUQyQ0I0RDE5QjkxNDAxMDAwNjU3MTkg
LyogRGVidWdnZXJFdmFsRW5hYmxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNkFEMkNCNEMxOUI5MTQwMTAwMDY1NzE5IC8qIERlYnVnZ2VyRXZhbEVu
YWJsZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owor
CQk2QkNDRUMwNDI1RDFGQTI3MDAwRjM5MUQgLyogVmVyaWZpZXJTbG90VmlzaXRvcklubGluZXMu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZCQ0NFQzAz
MjVEMUZBMjcwMDBGMzkxRCAvKiBWZXJpZmllclNsb3RWaXNpdG9ySW5saW5lcy5oICovOyB9Owog
CQk3MDExM0Q0QzFBOERCMDkzMDAzODQ4QzQgLyogSXRlcmF0b3JPcGVyYXRpb25zLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MDExM0Q0QTFBOERCMDkz
MDAzODQ4QzQgLyogSXRlcmF0b3JPcGVyYXRpb25zLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzAxM0NBOEMxQjQ5MUE5NDAwQ0FFNjEzIC8qIEpT
TWljcm90YXNrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA3MDEzQ0E4QTFCNDkxQTk0MDBDQUU2MTMgLyogSlNNaWNyb3Rhc2suaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3MDVCNDFBQzFBNkU1MDFFMDA3
MTY3NTcgLyogU3ltYm9sLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA3MDVCNDFBNDFBNkU1MDFFMDA3MTY3NTcgLyogU3ltYm9sLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTE5MTEsNiArMTkxMiw3IEBA
CiAJCUUzRkY3NTMzMUQ5Q0VBMTgwMEM3RTE2RCAvKiBET01KSVRHZXR0ZXJTZXR0ZXIuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUzRkY3NTJGMUQ5Q0VB
MTIwMEM3RTE2RCAvKiBET01KSVRHZXR0ZXJTZXR0ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlFNDlEQzE2QzEyRUYyOTRFMDAxODRBMUYgLyog
U291cmNlUHJvdmlkZXJDYWNoZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRTQ5REMxNTExMkVGMjcyMjAwMTg0QTFGIC8qIFNvdXJjZVByb3ZpZGVyQ2Fj
aGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlF
NDlEQzE2RDEyRUYyOTUzMDAxODRBMUYgLyogU291cmNlUHJvdmlkZXJDYWNoZUl0ZW0uaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0OURDMTQ5MTJFRjI2
MUEwMDE4NEExRiAvKiBTb3VyY2VQcm92aWRlckNhY2hlSXRlbS5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUZFMDQxNTUzMjUyRUMwNzMwMDkxRUI1
RCAvKiBTbG90VmlzaXRvck1hY3Jvcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRkUwNDE1NTIyNTJFQzA3MzAwOTFFQjVEIC8qIFNsb3RWaXNpdG9yTWFj
cm9zLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
RkUwNUZBRkQxRkU0Q0VEQTAwMDkzMjMwIC8qIERlcHJlY2F0ZWRJbnNwZWN0b3JWYWx1ZXMuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTkyRDZBMTEx
RkJENDkxRDAwMDI0NUY0IC8qIERlcHJlY2F0ZWRJbnNwZWN0b3JWYWx1ZXMuY3BwICovOyB9Owog
CQlGRTA4NkJDQTIxMjNERUZCMDAzRjI5MjkgLyogRW50cnlGcmFtZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUwODZCQzkyMTIzREVGQTAwM0YyOTI5
IC8qIEVudHJ5RnJhbWUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQlGRTBENEEwNjFBQjhERDBBMDAyRjU0QkYgLyogRXhlY3V0aW9uVGltZUxpbWl0
VGVzdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBG
RTBENEEwNDFBQjhERDBBMDAyRjU0QkYgLyogRXhlY3V0aW9uVGltZUxpbWl0VGVzdC5jcHAgKi87
IH07CkBAIC0xOTMzLDYgKzE5MzUsNyBAQAogCQlGRTFFMkMzRjIyNDBERDU4MDBGNkI3MjkgLyog
TWFjcm9Bc3NlbWJsZXJBUk02NEUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEZFMUUyQzNFMjI0MEQzMEIwMEY2QjcyOSAvKiBNYWNyb0Fzc2VtYmxlckFS
TTY0RS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CUZFMUUyQzQwMjI0MERENjIwMEY2QjcyOSAvKiBBUk02NEVBc3NlbWJsZXIuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFMUUyQzNEMjI0MEQyRjYwMEY2
QjcyOSAvKiBBUk02NEVBc3NlbWJsZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQlGRTIwQ0U5RTE1RjA0QTk1MDBERjM0MzAgLyogTExJbnRDTG9v
cC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUyMENF
OUMxNUYwNEE5NTAwREYzNDMwIC8qIExMSW50Q0xvb3AuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlGRTI4N0QwMjI1MkZCMkU4MDBENzIzRjkgLyog
VmVyaWZpZXJTbG90VmlzaXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRkUyODdEMDEyNTJGQjJFODAwRDcyM0Y5IC8qIFZlcmlmaWVyU2xvdFZpc2l0
b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlG
RTJBODc2MDFGMDIzODE2MDBFQjMxQjIgLyogTWluaW11bVJlc2VydmVkWm9uZVNpemUuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFMkE4NzVGMUYwMjM4
MTYwMEVCMzFCMiAvKiBNaW5pbXVtUmVzZXJ2ZWRab25lU2l6ZS5oICovOyB9OwogCQlGRTMwMjJE
MzFFM0Q3M0E1MDBCQUM0OTMgLyogU2lnaWxsQ3Jhc2hBbmFseXplci5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUzMDIyRDExRTNENzM5NjAwQkFDNDkz
IC8qIFNpZ2lsbENyYXNoQW5hbHl6ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQlGRTMwMjJENzFFNDI4NTczMDBCQUM0OTMgLyogVk1JbnNwZWN0
b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFMzAy
MkQ1MUU0Mjg1NjcwMEJBQzQ5MyAvKiBWTUluc3BlY3Rvci5oICovOyB9OwpAQCAtMTk3MCw2ICsx
OTczLDggQEAKIAkJRkU4MEMxOTcxRDc3NUNERDAwODUxMEMwIC8qIENhdGNoU2NvcGUuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFODBDMTk2MUQ3NzVC
MjcwMDg1MTBDMCAvKiBDYXRjaFNjb3BlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJRkU4REU1NEIyM0FDMURBRDAwNUM5MTQyIC8qIENhY2hlYWJs
ZUlkZW50aWZpZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEZFOERFNTRBMjNBQzFEQUQwMDVDOTE0MiAvKiBDYWNoZWFibGVJZGVudGlmaWVyLmggKi87
IH07CiAJCUZFOERFNTREMjNBQzFFODYwMDVDOTE0MiAvKiBDYWNoZWFibGVJZGVudGlmaWVySW5s
aW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkU4
REU1NEMyM0FDMUU4NjAwNUM5MTQyIC8qIENhY2hlYWJsZUlkZW50aWZpZXJJbmxpbmVzLmggKi87
IH07CisJCUZFOTEyQjRGMjUzMTE5MzMwMEZBQkRERiAvKiBBYnN0cmFjdFNsb3RWaXNpdG9yLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTkxMkI0RTI1
MzExOTMzMDBGQUJEREYgLyogQWJzdHJhY3RTbG90VmlzaXRvci5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUZFOTEyQjUxMjUzMTFBRDEwMEZBQkRE
RiAvKiBBYnN0cmFjdFNsb3RWaXNpdG9ySW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkU5MTJCNTAyNTMxMUFEMTAwRkFCRERGIC8qIEFic3Ry
YWN0U2xvdFZpc2l0b3JJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJRkU5OUIyNDkxQzI0QzNEMzAwQzgyMTU5IC8qIEpJVE5lZ0dlbmVy
YXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkU5
OUIyNDgxQzI0QjZEMzAwQzgyMTU5IC8qIEpJVE5lZ0dlbmVyYXRvci5oICovOyB9OwogCQlGRUEw
ODYyMDE4MkI3QTA0MDBGNkQ4NTEgLyogQnJlYWtwb2ludC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkVBMDg2MUUxODJCN0EwNDAwRjZEODUxIC8qIEJy
ZWFrcG9pbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQlGRUEwODYyMTE4MkI3QTA0MDBGNkQ4NTEgLyogRGVidWdnZXJQcmltaXRpdmVzLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRUEwODYxRjE4MkI3
QTA0MDBGNkQ4NTEgLyogRGVidWdnZXJQcmltaXRpdmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTM5ODIsNiArMzk4Nyw3IEBACiAJCTZBMzhD
RkE4MUUzMkI1OEIwMDYwMjA2RiAvKiBBc3luY1N0YWNrVHJhY2UuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gQXN5bmNTdGFja1RyYWNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTZBRDJDQjRDMTlCOTE0MDEwMDA2NTcxOSAvKiBEZWJ1Z2dlckV2YWxFbmFibGVy
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERlYnVnZ2VyRXZhbEVuYWJsZXIu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkJBOTNDOTU5MDQ4NEM1QkFEOTMxNkVB
IC8qIEpTU2NyaXB0RmV0Y2hlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBK
U1NjcmlwdEZldGNoZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNkJDQ0VDMDMy
NUQxRkEyNzAwMEYzOTFEIC8qIFZlcmlmaWVyU2xvdFZpc2l0b3JJbmxpbmVzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZlcmlmaWVyU2xvdFZpc2l0b3JJbmxpbmVzLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcwMTEzRDQ5MUE4REIwOTMwMDM4NDhDNCAvKiBJ
dGVyYXRvck9wZXJhdGlvbnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gSXRlcmF0b3JPcGVyYXRpb25zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NzAxMTNENEExQThEQjA5MzAwMzg0OEM0IC8qIEl0ZXJhdG9yT3BlcmF0aW9ucy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJdGVyYXRvck9wZXJhdGlvbnMuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzAxM0NBODkxQjQ5MUE5NDAwQ0FFNjEzIC8qIEpTTWljcm90
YXNrLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTTWljcm90YXNr
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTUyMDUsNiArNTIxMSw3IEBACiAJ
CUY2OTJBODg3MDI1NTU5N0QwMUZGNjBGNyAvKiBKU0NKU1ZhbHVlLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTQ0pTVmFsdWUuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IH07CiAJCUY3MzkyNjkxOERD
NjQzMzBBRkNERjBENyAvKiBKU1NvdXJjZUNvZGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gSlNTb3VyY2VDb2RlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJRkUwMDI2MjIyM0YzQUYzMzAwM0EzNThGIC8qIFdlYkFzc2VtYmx5LmFzbSAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYXNt
LmFzbTsgbmFtZSA9IFdlYkFzc2VtYmx5LmFzbTsgcGF0aCA9IGxsaW50L1dlYkFzc2VtYmx5LmFz
bTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkUwNDE1NTIyNTJFQzA3MzAwOTFFQjVE
IC8qIFNsb3RWaXNpdG9yTWFjcm9zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFNsb3RWaXNpdG9yTWFjcm9zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFMDg2
QkM5MjEyM0RFRkEwMDNGMjkyOSAvKiBFbnRyeUZyYW1lLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEVudHJ5RnJhbWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
RkUwRDRBMDQxQUI4REQwQTAwMkY1NEJGIC8qIEV4ZWN1dGlvblRpbWVMaW1pdFRlc3QuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gRXhlY3V0aW9uVGltZUxpbWl0VGVz
dC5jcHA7IHBhdGggPSBBUEkvdGVzdHMvRXhlY3V0aW9uVGltZUxpbWl0VGVzdC5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFMEQ0QTA1MUFCOEREMEEwMDJGNTRCRiAvKiBFeGVj
dXRpb25UaW1lTGltaXRUZXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEV4
ZWN1dGlvblRpbWVMaW1pdFRlc3QuaDsgcGF0aCA9IEFQSS90ZXN0cy9FeGVjdXRpb25UaW1lTGlt
aXRUZXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01MjE4LDYgKzUyMjUsNyBA
QAogCQlGRTEyMjAyNTFCRTdGNTY0MDAzOUU2RjIgLyogSklUQWRkR2VuZXJhdG9yLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpJVEFkZEdlbmVyYXRvci5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFMTIyMDI2MUJFN0Y1NjQwMDM5RTZGMiAvKiBK
SVRBZGRHZW5lcmF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSklUQWRk
R2VuZXJhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFMTQwOTA2MjA1NkYz
RkUwMENGRTMxOCAvKiBOYXRpdmVGdW5jdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBOYXRpdmVGdW5jdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlG
RTE3OENDMzI1NUYyMDU1MDBGRkQ2NzcgLyogQWJzdHJhY3RTbG90VmlzaXRvci5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBYnN0cmFjdFNsb3RWaXNpdG9yLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkUxODc5RkYxQkZCQzczQzAwMzhCQkNBIC8q
IEpJVE11bEdlbmVyYXRvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBKSVRNdWxHZW5lcmF0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTE4
N0EwMDFCRkJDNzNDMDAzOEJCQ0EgLyogSklUTXVsR2VuZXJhdG9yLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEpJVE11bEdlbmVyYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlGRTE4N0EwQTFDMDIyOTIzMDAzOEJCQ0EgLyogSklURGl2R2VuZXJhdG9yLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpJVERpdkdlbmVyYXRvci5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01MjM5LDcgKzUyNDcsOSBAQAogCQlG
RTFFMkMzRTIyNDBEMzBCMDBGNkI3MjkgLyogTWFjcm9Bc3NlbWJsZXJBUk02NEUuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWFjcm9Bc3NlbWJsZXJBUk02NEUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkUyMENFOUIxNUYwNEE5NTAwREYzNDMwIC8qIExMSW50
Q0xvb3AuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gTExJbnRDTG9v
cC5jcHA7IHBhdGggPSBsbGludC9MTEludENMb29wLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJRkUyMENFOUMxNUYwNEE5NTAwREYzNDMwIC8qIExMSW50Q0xvb3AuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gTExJbnRDTG9vcC5oOyBwYXRoID0gbGxpbnQvTExJ
bnRDTG9vcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRTI4N0QwMTI1MkZCMkU4
MDBENzIzRjkgLyogVmVyaWZpZXJTbG90VmlzaXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBWZXJpZmllclNsb3RWaXNpdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUZFMkE4NzVGMUYwMjM4MTYwMEVCMzFCMiAvKiBNaW5pbXVtUmVzZXJ2ZWRab25lU2l6
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBNaW5pbXVtUmVzZXJ2ZWRab25lU2l6ZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlGRTJCRDY2RTI1QzBEQzgyMDA5OTlEM0IgLyogVmVyaWZpZXJT
bG90VmlzaXRvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBWZXJp
ZmllclNsb3RWaXNpdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkUyRTZB
N0ExRDZFQTVGRTAwNjBGODk2IC8qIFRocm93U2NvcGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gVGhyb3dTY29wZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUZFMzAyMkQwMUUzRDczOTYwMEJBQzQ5MyAvKiBTaWdpbGxDcmFzaEFuYWx5emVyLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNpZ2lsbENyYXNoQW5hbHl6
ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTMwMjJEMTFFM0Q3Mzk2MDBC
QUM0OTMgLyogU2lnaWxsQ3Jhc2hBbmFseXplci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBTaWdpbGxDcmFzaEFuYWx5emVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC01MzEyLDYgKzUzMjIsOCBAQAogCQlGRThERTU0QzIzQUMxRTg2MDA1QzkxNDIgLyogQ2Fj
aGVhYmxlSWRlbnRpZmllcklubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gQ2FjaGVhYmxlSWRlbnRpZmllcklubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJRkU4REU1NEUyM0FDM0E4RTAwNUM5MTQyIC8qIENhY2hlYWJsZUlkZW50aWZpZXIuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gQ2FjaGVhYmxlSWRlbnRpZmllci5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUZFOTBCQjNBMUI3Q0Y2NEUwMDZCM0YwMyAvKiBWTUlubGluZXMu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVk1JbmxpbmVzLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUZFOTEyQjRFMjUzMTE5MzMwMEZBQkRERiAvKiBBYnN0cmFj
dFNsb3RWaXNpdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFic3RyYWN0
U2xvdFZpc2l0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkU5MTJCNTAyNTMx
MUFEMTAwRkFCRERGIC8qIEFic3RyYWN0U2xvdFZpc2l0b3JJbmxpbmVzLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFic3RyYWN0U2xvdFZpc2l0b3JJbmxpbmVzLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFOThCNUI2MUJCOUFFMTEwMDczRTdBNiAvKiBKSVRT
dWJHZW5lcmF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSklUU3ViR2Vu
ZXJhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFOTlCMjQ3MUMyNEI2RDMw
MEM4MjE1OSAvKiBKSVROZWdHZW5lcmF0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gSklUTmVnR2VuZXJhdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJRkU5OUIyNDgxQzI0QjZEMzAwQzgyMTU5IC8qIEpJVE5lZ0dlbmVyYXRvci5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKSVROZWdHZW5lcmF0b3IuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTYyNjEsNiArNjI3Myw5IEBACiAJCTE0MkUzMTJBMTM0RkYw
QTYwMEFGQURCNSAvKiBoZWFwICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJl
biA9ICgKKwkJCQlGRTE3OENDMzI1NUYyMDU1MDBGRkQ2NzcgLyogQWJzdHJhY3RTbG90VmlzaXRv
ci5jcHAgKi8sCisJCQkJRkU5MTJCNEUyNTMxMTkzMzAwRkFCRERGIC8qIEFic3RyYWN0U2xvdFZp
c2l0b3IuaCAqLywKKwkJCQlGRTkxMkI1MDI1MzExQUQxMDBGQUJEREYgLyogQWJzdHJhY3RTbG90
VmlzaXRvcklubGluZXMuaCAqLywKIAkJCQkwRkVDM0M1MDFGMzNBNDE2MDBGNTlCNkMgLyogQWxp
Z25lZE1lbW9yeUFsbG9jYXRvci5jcHAgKi8sCiAJCQkJMEZFQzNDNTExRjMzQTQxNjAwRjU5QjZD
IC8qIEFsaWduZWRNZW1vcnlBbGxvY2F0b3IuaCAqLywKIAkJCQkwRkE3NjIwQTFEQjk1OUY2MDBC
N0EyRkQgLyogQWxsb2NhdGluZ1Njb3BlLmggKi8sCkBAIC02NDE3LDYgKzY0MzIsNyBAQAogCQkJ
CUMyMjU0OTQyMTVGN0RCQUEwMDY1RTg5OCAvKiBTbG90VmlzaXRvci5jcHAgKi8sCiAJCQkJMTRC
QTc4RjAxM0FBQjg4RjAwNUI3QzJDIC8qIFNsb3RWaXNpdG9yLmggKi8sCiAJCQkJMEZDQjQwODUx
NUMwQTNDMzAwNDg5MzJCIC8qIFNsb3RWaXNpdG9ySW5saW5lcy5oICovLAorCQkJCUZFMDQxNTUy
MjUyRUMwNzMwMDkxRUI1RCAvKiBTbG90VmlzaXRvck1hY3Jvcy5oICovLAogCQkJCTBGREU4N0ZB
MURGRTZFNTAwMDY0QzM5MCAvKiBTcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyLmNwcCAqLywKIAkJ
CQkwRkRFODdGQjFERkU2RTUwMDA2NEMzOTAgLyogU3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlci5o
ICovLAogCQkJCTBGNEY4Mjg5MUUzMUI5NzEwMDc1MTg0QyAvKiBTdG9jaGFzdGljU3BhY2VUaW1l
TXV0YXRvclNjaGVkdWxlci5jcHAgKi8sCkBAIC02NDM0LDYgKzY0NTAsOSBAQAogCQkJCTBGMUZC
MzhBMUUxNzNBNjIwMEE5QkU1MCAvKiBTeW5jaHJvbm91c1N0b3BUaGVXb3JsZE11dGF0b3JTY2hl
ZHVsZXIuY3BwICovLAogCQkJCTBGMUZCMzhCMUUxNzNBNjIwMEE5QkU1MCAvKiBTeW5jaHJvbm91
c1N0b3BUaGVXb3JsZE11dGF0b3JTY2hlZHVsZXIuaCAqLywKIAkJCQkxNDE0NDhDQzEzQTE3ODM3
MDBGNUJBMUEgLyogVGlueUJsb29tRmlsdGVyLmggKi8sCisJCQkJRkUyQkQ2NkUyNUMwREM4MjAw
OTk5RDNCIC8qIFZlcmlmaWVyU2xvdFZpc2l0b3IuY3BwICovLAorCQkJCUZFMjg3RDAxMjUyRkIy
RTgwMEQ3MjNGOSAvKiBWZXJpZmllclNsb3RWaXNpdG9yLmggKi8sCisJCQkJNkJDQ0VDMDMyNUQx
RkEyNzAwMEYzOTFEIC8qIFZlcmlmaWVyU2xvdFZpc2l0b3JJbmxpbmVzLmggKi8sCiAJCQkJMEY0
RDhDNzIxRkM3QTk3MzAwMUQzMkFDIC8qIFZpc2l0Q291bnRlci5oICovLAogCQkJCTBGOTUyQTlG
MURGNzg2MDcwMEUwNkZCRCAvKiBWaXNpdFJhY2VLZXkuY3BwICovLAogCQkJCTBGOTUyQUEwMURG
Nzg2MDcwMEUwNkZCRCAvKiBWaXNpdFJhY2VLZXkuaCAqLywKQEAgLTkyNjUsNiArOTI4NCw3IEBA
CiAJCQkJMTQ3QjgzQUMwRTZEQjhDOTAwNDc3NUE0IC8qIEJhdGNoZWRUcmFuc2l0aW9uT3B0aW1p
emVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMzVFODlGRDI1QzUwRjg3MDA3MUVFMUUgLyogQmln
SW50NjRBcnJheS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODY5NzZFNUYxRkEzRThCQzAwRTdDNEUx
IC8qIEJpZ0ludENvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKKwkJCQlGRTA0MTU1MzI1MkVD
MDczMDA5MUVCNUQgLyogU2xvdFZpc2l0b3JNYWNyb3MuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2
NjczOUQyMTNCRkRFNzEwMDIzRDg3QyAvKiBCaWdJbnRlZ2VyLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk4NjE4MTY3NzFGQjc5MjQyMDBFQ0M0RUMgLyogQmlnSW50T2JqZWN0LmggaW4gSGVhZGVycyAq
LywKIAkJCQk4Njk3NkU1RTFGQTNFOEI2MDBFN0M0RTEgLyogQmlnSW50UHJvdG90eXBlLmggaW4g
SGVhZGVycyAqLywKQEAgLTk1NDMsNiArOTU2Myw3IEBACiAJCQkJMEZEODJFNTcxNDFEQUYxMDAw
MTc5Qzk0IC8qIERGR09TUkVudHJ5LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkQ4QTMyNjE3RDUx
RjU3MDBDQTJDNDAgLyogREZHT1NSRW50cnlwb2ludENyZWF0aW9uUGhhc2UuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGQzA5NzZBMTQ2OEE2RjcwMENGMjQ0MiAvKiBERkdPU1JFeGl0LmggaW4gSGVh
ZGVycyAqLywKKwkJCQlGRTkxMkI0RjI1MzExOTMzMDBGQUJEREYgLyogQWJzdHJhY3RTbG90Vmlz
aXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyMzVCRUMxNzE3OEU3MzAwNjkwQzdGIC8qIERG
R09TUkV4aXRCYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkZCOTIxQzE2RDAyRjExMDA1NUE1
REIgLyogREZHT1NSRXhpdENvbXBpbGF0aW9uSW5mby5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY3
MDI1QUExNzE0QjBGQzAwMzgyQzBFIC8qIERGR09TUkV4aXRDb21waWxlckNvbW1vbi5oIGluIEhl
YWRlcnMgKi8sCkBAIC05ODI4LDYgKzk4NDksNyBAQAogCQkJCUE1MTNFNUJFMTg1QkZBQ0MwMDdF
OTVBRCAvKiBJbmplY3RlZFNjcmlwdEhvc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1MTNFNUNC
MTg1Rjk2MjQwMDdFOTVBRCAvKiBJbmplY3RlZFNjcmlwdE1hbmFnZXIuaCBpbiBIZWFkZXJzICov
LAogCQkJCUE1ODQwRTIxMTg3QjdCODYwMDg0M0IxMCAvKiBJbmplY3RlZFNjcmlwdE1vZHVsZS5o
IGluIEhlYWRlcnMgKi8sCisJCQkJRkUyODdEMDIyNTJGQjJFODAwRDcyM0Y5IC8qIFZlcmlmaWVy
U2xvdFZpc2l0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1MTNFNUM3MTg1Rjk0NDYwMDdFOTVB
RCAvKiBJbmplY3RlZFNjcmlwdFNvdXJjZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTk1OUU5MzIx
QkQxODI3OTAwMUFBNDEzIC8qIGlubGluZS1hbmQtbWluaWZ5LXN0eWxlc2hlZXRzLWFuZC1zY3Jp
cHRzLnB5IGluIEhlYWRlcnMgKi8sCiAJCQkJNzkwNUJCNjkxRDEyMDUwRTAwMTlGRTU3IC8qIElu
bGluZUFjY2Vzcy5oIGluIEhlYWRlcnMgKi8sCkBAIC0xMDAwMyw2ICsxMDAyNSw3IEBACiAJCQkJ
QTU4QzAyNDIxOEU0QTQxQTAwMDMyQkM1IC8qIEpTQ29udGV4dFByaXZhdGUuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUJDMThDNDFFMEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU0NvbnRleHRSZWYuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUE1RUE3MEVFMTlGNUI1QzQwMDk4RjVFQyAvKiBKU0NvbnRleHRSZWZJ
bnNwZWN0b3JTdXBwb3J0LmggaW4gSGVhZGVycyAqLywKKwkJCQk2QkNDRUMwNDI1RDFGQTI3MDAw
RjM5MUQgLyogVmVyaWZpZXJTbG90VmlzaXRvcklubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUE1RDJFNjY1MTk1RTE3NDAwMEE1MThFNyAvKiBKU0NvbnRleHRSZWZJbnRlcm5hbC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMTQ4Q0QxRDgxMDhDRjkwMjAwODE2M0M2IC8qIEpTQ29udGV4dFJlZlBy
aXZhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUZFNzQ5N0U2MjA5MDAxQjEwMDAzNTY1QiAvKiBK
U0NQdHJUYWcuaCBpbiBIZWFkZXJzICovLApAQCAtMTAxMzMsNiArMTAxNTYsNyBAQAogCQkJCTc5
NUFDNjE4MjBBMjM1NUUwMDUyQzc2QyAvKiBKU1ZpcnR1YWxNYWNoaW5lUHJpdmF0ZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQTdDQTNBRTgxN0RBNDFBRTAwNjUzOEFGIC8qIEpTV2Vha01hcC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQTc0ODJFOTMxMTZBN0NBRDAwM0IwNzEyIC8qIEpTV2Vha09iamVj
dE1hcFJlZkludGVybmFsLmggaW4gSGVhZGVycyAqLywKKwkJCQlGRTkxMkI1MTI1MzExQUQxMDBG
QUJEREYgLyogQWJzdHJhY3RTbG90VmlzaXRvcklubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUE3NDgyQjkzMTE2NzExNDcwMDNCMDcxMiAvKiBKU1dlYWtPYmplY3RNYXBSZWZQcml2YXRlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk1MzlCRkJCMDIyQUQzQ0RDMDAyM0Y0QzAgLyogSlNXZWFrT2Jq
ZWN0UmVmLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjBCMjg2QjFFQjhFNkNGMDAwRUI1RDIgLyog
SlNXZWFrUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvU2NyaXB0cy93a2J1aWx0aW5zL2J1aWx0aW5zX2dlbmVyYXRlX2ludGVybmFsc193cmFwcGVy
X2hlYWRlci5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy93
a2J1aWx0aW5zL2J1aWx0aW5zX2dlbmVyYXRlX2ludGVybmFsc193cmFwcGVyX2hlYWRlci5weQko
cmV2aXNpb24gMjcyMjk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvd2tidWls
dGlucy9idWlsdGluc19nZW5lcmF0ZV9pbnRlcm5hbHNfd3JhcHBlcl9oZWFkZXIucHkJKHdvcmtp
bmcgY29weSkKQEAgLTkzLDcgKzkzLDcgQEAgY2xhc3MgQnVpbHRpbnNJbnRlcm5hbHNXcmFwcGVy
SGVhZGVyR2VuZQogCiAgICAgZGVmIGdlbmVyYXRlX21ldGhvZHMoc2VsZik6CiAgICAgICAgIHJl
dHVybiAiIiIKLSAgICB2b2lkIHZpc2l0KEpTQzo6U2xvdFZpc2l0b3ImKTsKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIHZpc2l0KFZpc2l0b3ImKTsKICAgICB2b2lkIGluaXRp
YWxpemUoSlNET01HbG9iYWxPYmplY3QmKTsKICIiIgogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvU2NyaXB0cy93a2J1aWx0aW5zL2J1aWx0aW5zX2dlbmVyYXRlX2ludGVybmFsc193cmFw
cGVyX2ltcGxlbWVudGF0aW9uLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9TY3JpcHRzL3drYnVpbHRpbnMvYnVpbHRpbnNfZ2VuZXJhdGVfaW50ZXJuYWxzX3dyYXBwZXJf
aW1wbGVtZW50YXRpb24ucHkJKHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9TY3JpcHRzL3drYnVpbHRpbnMvYnVpbHRpbnNfZ2VuZXJhdGVfaW50ZXJuYWxzX3dyYXBw
ZXJfaW1wbGVtZW50YXRpb24ucHkJKHdvcmtpbmcgY29weSkKQEAgLTEyMCwxMyArMTIwLDE2IEBA
IGNsYXNzIEJ1aWx0aW5zSW50ZXJuYWxzV3JhcHBlckltcGxlbWVudGEKICAgICAgICAgcmV0dXJu
ICdcbicuam9pbihsaW5lcykKIAogICAgIGRlZiBnZW5lcmF0ZV92aXNpdF9tZXRob2Qoc2VsZik6
Ci0gICAgICAgIGxpbmVzID0gWyJ2b2lkIEpTQnVpbHRpbkludGVybmFsRnVuY3Rpb25zOjp2aXNp
dChKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKSIsCisgICAgICAgIGxpbmVzID0gWyJ0ZW1wbGF0
ZTx0eXBlbmFtZSBWaXNpdG9yPiIsCisgICAgICAgICAgICAgICAgICJ2b2lkIEpTQnVpbHRpbklu
dGVybmFsRnVuY3Rpb25zOjp2aXNpdChWaXNpdG9yJiB2aXNpdG9yKSIsCiAgICAgICAgICAgICAg
ICAgICJ7Il0KICAgICAgICAgZm9yIG9iamVjdCBpbiBzZWxmLmludGVybmFsczoKICAgICAgICAg
ICAgIHZpc2l0ID0gIiAgICAlcy52aXNpdCh2aXNpdG9yKTsiICUgc2VsZi5tZW1iZXJfbmFtZShv
YmplY3QpCiAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoQnVpbHRpbnNHZW5lcmF0b3Iud3JhcF93
aXRoX2d1YXJkKG9iamVjdC5hbm5vdGF0aW9ucy5nZXQoJ2NvbmRpdGlvbmFsJyksIHZpc2l0KSkK
ICAgICAgICAgbGluZXMuYXBwZW5kKCIgICAgVU5VU0VEX1BBUkFNKHZpc2l0b3IpOyIpCiAgICAg
ICAgIGxpbmVzLmFwcGVuZCgifVxuIikKKyAgICAgICAgbGluZXMuYXBwZW5kKCJ0ZW1wbGF0ZSB2
b2lkIEpTQnVpbHRpbkludGVybmFsRnVuY3Rpb25zOjp2aXNpdChBYnN0cmFjdFNsb3RWaXNpdG9y
Jik7IikKKyAgICAgICAgbGluZXMuYXBwZW5kKCJ0ZW1wbGF0ZSB2b2lkIEpTQnVpbHRpbkludGVy
bmFsRnVuY3Rpb25zOjp2aXNpdChTbG90VmlzaXRvciYpO1xuIikKICAgICAgICAgcmV0dXJuICdc
bicuam9pbihsaW5lcykKIAogICAgIGRlZiBfZ2VuZXJhdGVfaW5pdGlhbGl6ZV9zdGF0aWNfZ2xv
YmFscyhzZWxmKToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL3drYnVpbHRp
bnMvYnVpbHRpbnNfdGVtcGxhdGVzLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9TY3JpcHRzL3drYnVpbHRpbnMvYnVpbHRpbnNfdGVtcGxhdGVzLnB5CShyZXZpc2lvbiAy
NzIyOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy93a2J1aWx0aW5zL2J1aWx0
aW5zX3RlbXBsYXRlcy5weQkod29ya2luZyBjb3B5KQpAQCAtMTg4LDcgKzE4OCw4IEBAIHB1Ymxp
YzoKICAgICBleHBsaWNpdCAke29iamVjdE5hbWV9QnVpbHRpbkZ1bmN0aW9ucyhKU0M6OlZNJiB2
bSkgOiBtX3ZtKHZtKSB7IH0KIAogICAgIHZvaWQgaW5pdChKU0M6OkpTR2xvYmFsT2JqZWN0Jik7
Ci0gICAgdm9pZCB2aXNpdChKU0M6OlNsb3RWaXNpdG9yJik7CisgICAgLy8gbWxhbSB2b2lkIHZp
c2l0KEpTQzo6U2xvdFZpc2l0b3ImKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2
b2lkIHZpc2l0KFZpc2l0b3ImKTsKIAogcHVibGljOgogICAgIEpTQzo6Vk0mIG1fdm07CkBAIC0y
MDcsMTAgKzIwOCwxNSBAQCBpbmxpbmUgdm9pZCAke29iamVjdE5hbWV9QnVpbHRpbkZ1bmN0aW9u
CiAjdW5kZWYgRVhQT1JUX0ZVTkNUSU9OCiB9CiAKLWlubGluZSB2b2lkICR7b2JqZWN0TmFtZX1C
dWlsdGluRnVuY3Rpb25zOjp2aXNpdChKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxh
dGU8dHlwZW5hbWUgVmlzaXRvcj4KK2lubGluZSB2b2lkICR7b2JqZWN0TmFtZX1CdWlsdGluRnVu
Y3Rpb25zOjp2aXNpdChWaXNpdG9yJiB2aXNpdG9yKQogewogI2RlZmluZSBWSVNJVF9GVU5DVElP
TihuYW1lKSB2aXNpdG9yLmFwcGVuZChtXyMjbmFtZSMjRnVuY3Rpb24pOwogICAgICR7bWFjcm9Q
cmVmaXh9X0ZPUkVBQ0hfJHtvYmplY3RNYWNyb31fQlVJTFRJTl9GVU5DVElPTl9OQU1FKFZJU0lU
X0ZVTkNUSU9OKQogI3VuZGVmIFZJU0lUX0ZVTkNUSU9OCiB9CisKK3RlbXBsYXRlIHZvaWQgJHtv
YmplY3ROYW1lfUJ1aWx0aW5GdW5jdGlvbnM6OnZpc2l0KEpTQzo6QWJzdHJhY3RTbG90VmlzaXRv
ciYpOwordGVtcGxhdGUgdm9pZCAke29iamVjdE5hbWV9QnVpbHRpbkZ1bmN0aW9uczo6dmlzaXQo
SlNDOjpTbG90VmlzaXRvciYpOworCiAiIiIpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCShyZXZpc2lvbiAyNzIyOTcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTczMywyMiArNzMzLDI0IEBAIGJvb2wgQWNjZXNzQ2FzZTo6dmlzaXRXZWFrKFZNJiB2bSkgY29u
c3QKICAgICByZXR1cm4gaXNWYWxpZDsKIH0KIAotYm9vbCBBY2Nlc3NDYXNlOjpwcm9wYWdhdGVU
cmFuc2l0aW9ucyhTbG90VmlzaXRvciYgdmlzaXRvcikgY29uc3QKK3RlbXBsYXRlPHR5cGVuYW1l
IFZpc2l0b3I+Citib29sIEFjY2Vzc0Nhc2U6OnByb3BhZ2F0ZVRyYW5zaXRpb25zKFZpc2l0b3Im
IHZpc2l0b3IpIGNvbnN0CiB7CiAgICAgYm9vbCByZXN1bHQgPSB0cnVlOwogCiAgICAgaWYgKG1f
c3RydWN0dXJlKQotICAgICAgICByZXN1bHQgJj0gbV9zdHJ1Y3R1cmUtPm1hcmtJZkNoZWFwKHZp
c2l0b3IpOworICAgICAgICByZXN1bHQgJj0gbV9zdHJ1Y3R1cmUtPm1hcmtJZkNoZWFwMSh2aXNp
dG9yKTsKIAogICAgIGlmIChtX3BvbHlQcm90b0FjY2Vzc0NoYWluKSB7CiAgICAgICAgIGZvciAo
U3RydWN0dXJlSUQgc3RydWN0dXJlSUQgOiBtX3BvbHlQcm90b0FjY2Vzc0NoYWluLT5jaGFpbigp
KQotICAgICAgICAgICAgcmVzdWx0ICY9IHZpc2l0b3Iudm0oKS5nZXRTdHJ1Y3R1cmUoc3RydWN0
dXJlSUQpLT5tYXJrSWZDaGVhcCh2aXNpdG9yKTsKKyAgICAgICAgICAgIHJlc3VsdCAmPSB2aXNp
dG9yLnZtKCkuZ2V0U3RydWN0dXJlKHN0cnVjdHVyZUlEKS0+bWFya0lmQ2hlYXAxKHZpc2l0b3Ip
OwogICAgIH0KIAogICAgIHN3aXRjaCAobV90eXBlKSB7CiAgICAgY2FzZSBUcmFuc2l0aW9uOgog
ICAgIGNhc2UgRGVsZXRlOgotICAgICAgICBpZiAodmlzaXRvci52bSgpLmhlYXAuaXNNYXJrZWQo
bV9zdHJ1Y3R1cmUtPnByZXZpb3VzSUQoKSkpCisvLyAgICAgICAgaWYgKHZpc2l0b3Iudm0oKS5o
ZWFwLmlzTWFya2VkKG1fc3RydWN0dXJlLT5wcmV2aW91c0lEKCkpKQorICAgICAgICBpZiAodmlz
aXRvci5pc01hcmtlZChtX3N0cnVjdHVyZS0+cHJldmlvdXNJRCgpKSkKICAgICAgICAgICAgIHZp
c2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQobV9zdHJ1Y3R1cmUuZ2V0KCkpOwogICAgICAgICBlbHNl
CiAgICAgICAgICAgICByZXN1bHQgPSBmYWxzZTsKQEAgLTc2MCwxMSArNzYyLDE5IEBAIGJvb2wg
QWNjZXNzQ2FzZTo6cHJvcGFnYXRlVHJhbnNpdGlvbnMoU2wKICAgICByZXR1cm4gcmVzdWx0Owog
fQogCi12b2lkIEFjY2Vzc0Nhc2U6OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9y
KSBjb25zdAordGVtcGxhdGUgYm9vbCBBY2Nlc3NDYXNlOjpwcm9wYWdhdGVUcmFuc2l0aW9ucyhT
bG90VmlzaXRvciYpIGNvbnN0OwordGVtcGxhdGUgYm9vbCBBY2Nlc3NDYXNlOjpwcm9wYWdhdGVU
cmFuc2l0aW9ucyhBYnN0cmFjdFNsb3RWaXNpdG9yJikgY29uc3Q7CisKKy8vdGVtcGxhdGU8dHlw
ZW5hbWUgVmlzaXRvcj4KKy8vdm9pZCBBY2Nlc3NDYXNlOjp2aXNpdEFnZ3JlZ2F0ZShWaXNpdG9y
JiB2aXNpdG9yKSBjb25zdAordm9pZCBBY2Nlc3NDYXNlOjp2aXNpdEFnZ3JlZ2F0ZTEoQWJzdHJh
Y3RTbG90VmlzaXRvciYgdmlzaXRvcikgY29uc3QKIHsKLSAgICBtX2lkZW50aWZpZXIudmlzaXRB
Z2dyZWdhdGUodmlzaXRvcik7CisgICAgbV9pZGVudGlmaWVyLnZpc2l0QWdncmVnYXRlMSh2aXNp
dG9yKTsKIH0KIAorLy90ZW1wbGF0ZSB2b2lkIEFjY2Vzc0Nhc2U6OnZpc2l0QWdncmVnYXRlKFNs
b3RWaXNpdG9yJikgY29uc3Q7CisvL3RlbXBsYXRlIHZvaWQgQWNjZXNzQ2FzZTo6dmlzaXRBZ2dy
ZWdhdGUoVmVyaWZpZXJTbG90VmlzaXRvciYpIGNvbnN0OworCiB2b2lkIEFjY2Vzc0Nhc2U6Omdl
bmVyYXRlV2l0aEd1YXJkKAogICAgIEFjY2Vzc0dlbmVyYXRpb25TdGF0ZSYgc3RhdGUsIENDYWxs
SGVscGVyczo6SnVtcExpc3QmIGZhbGxUaHJvdWdoKQogewpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5oCShyZXZpc2lvbiAyNzIyOTcpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yNzUsOSArMjc1LDEwIEBAIHByaXZhdGU6CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rv
cj4KICAgICB2b2lkIGZvckVhY2hEZXBlbmRlbnRDZWxsKFZNJiwgY29uc3QgRnVuY3RvciYpIGNv
bnN0OwogCi0gICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYpIGNvbnN0OworLy8g
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCB2aXNpdEFnZ3JlZ2F0ZShWaXNpdG9y
JikgY29uc3Q7CisgICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZTEoQWJzdHJhY3RTbG90VmlzaXRvciYp
IGNvbnN0OwogICAgIGJvb2wgdmlzaXRXZWFrKFZNJikgY29uc3Q7Ci0gICAgYm9vbCBwcm9wYWdh
dGVUcmFuc2l0aW9ucyhTbG90VmlzaXRvciYpIGNvbnN0OworICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFZpc2l0b3I+IGJvb2wgcHJvcGFnYXRlVHJhbnNpdGlvbnMoVmlzaXRvciYpIGNvbnN0OwogCiAg
ICAgLy8gRklYTUU6IFRoaXMgb25seSBleGlzdHMgYmVjYXVzZSBvZiBob3cgQWNjZXNzQ2FzZSBw
dXRzIHBvc3QtZ2VuZXJhdGlvbiB0aGluZ3MgaW50byBpdHNlbGYuCiAgICAgLy8gaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NjQ1NgpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0J5VmFsSW5mby5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5VmFsSW5mby5jcHAJKHJldmlzaW9uIDI3MjI5NykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeVZhbEluZm8uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00LDcgKzQsNyBAQAogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKICAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogMS4gUmVkaXN0cmlidXRWZXJpZmllclNsb3RWaXNpdG9yaW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CiAgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCiAgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAogICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQpAQCAtMzIsMTEgKzMyLDE2IEBA
IG5hbWVzcGFjZSBKU0MgewogCiAjaWYgRU5BQkxFKEpJVCkKIAotdm9pZCBCeVZhbEluZm86OnZp
c2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy90ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPgorLy92b2lkIEJ5VmFsSW5mbzo6dmlzaXRBZ2dyZWdhdGUoVmlzaXRvciYgdmlzaXRv
cikKK3ZvaWQgQnlWYWxJbmZvOjp2aXNpdEFnZ3JlZ2F0ZTEoQWJzdHJhY3RTbG90VmlzaXRvciYg
dmlzaXRvcikKIHsKLSAgICBjYWNoZWRJZC52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKKyAgICBj
YWNoZWRJZC52aXNpdEFnZ3JlZ2F0ZTEodmlzaXRvcik7CiB9CiAKKy8vdGVtcGxhdGUgdm9pZCBC
eVZhbEluZm86OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJik7CisvL3RlbXBsYXRlIHZvaWQg
QnlWYWxJbmZvOjp2aXNpdEFnZ3JlZ2F0ZShWZXJpZmllclNsb3RWaXNpdG9yJik7CisKICNlbmRp
ZiAvLyBFTkFCTEUoSklUKQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9CeVZhbEluZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnlWYWxJbmZvLmgJKHJldmlzaW9uIDI3MjI5NykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeVZhbEluZm8uaAkod29ya2luZyBjb3B5KQpA
QCAtMjYwLDcgKzI2MCw4IEBAIHN0cnVjdCBCeVZhbEluZm8gewogICAgICAgICB0aGlzLT5zZWVu
ID0gZmFsc2U7CiAgICAgfQogCi0gICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYp
OworLy8gICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCB2aXNpdEFnZ3JlZ2F0ZShW
aXNpdG9yJik7CisgICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZTEoQWJzdHJhY3RTbG90VmlzaXRvciYp
OwogCiAgICAgQ29kZUxvY2F0aW9uSnVtcDxKU0ludGVybmFsUHRyVGFnPiBub3RJbmRleEp1bXA7
CiAgICAgQ29kZUxvY2F0aW9uSnVtcDxKU0ludGVybmFsUHRyVGFnPiBiYWRUeXBlSnVtcDsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZp
c2lvbiAyNzIyOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2Nr
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsOSBAQAogI2luY2x1ZGUgImNvbmZpZy5o
IgogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgogCisjaW5jbHVkZSAiQWJzdHJhY3RTbG90VmlzaXRv
ci5oIiAvLyBtbGFtIFRFU1QKKyNpbmNsdWRlICJQb2x5bW9ycGhpY0FjY2Vzcy5oIiAvLyBtbGFt
IFRFU1QKKwogI2luY2x1ZGUgIkFyaXRoUHJvZmlsZS5oIgogI2luY2x1ZGUgIkJhc2ljQmxvY2tM
b2NhdGlvbi5oIgogI2luY2x1ZGUgIkJ5VmFsSW5mby5oIgpAQCAtOTQsNiArOTcsOSBAQAogCiBu
YW1lc3BhY2UgSlNDIHsKIAorZXh0ZXJuIHVuc2lnbmVkIG1sYW1UaW1lOworZXh0ZXJuIGJvb2wg
bWxhbVZlcmJvc2U7CisKIERFRklORV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoQ29k
ZUJsb2NrUmFyZURhdGEpOwogCiBjb25zdCBDbGFzc0luZm8gQ29kZUJsb2NrOjpzX2luZm8gPSB7
CkBAIC05OTgsNyArMTAwNCw4IEBAIHNpemVfdCBDb2RlQmxvY2s6OmVzdGltYXRlZFNpemUoSlND
ZWxsKiAKICAgICByZXR1cm4gQmFzZTo6ZXN0aW1hdGVkU2l6ZShjZWxsLCB2bSkgKyBleHRyYU1l
bW9yeUFsbG9jYXRlZDsKIH0KIAotdm9pZCBDb2RlQmxvY2s6OnZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+
Cit2b2lkIENvZGVCbG9jazo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9y
JiB2aXNpdG9yKQogewogICAgIENvZGVCbG9jayogdGhpc09iamVjdCA9IGpzQ2FzdDxDb2RlQmxv
Y2sqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGlu
Zm8oKSk7CkBAIC0xMDA3LDcgKzEwMTQsMTAgQEAgdm9pZCBDb2RlQmxvY2s6OnZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKiBjZQogICAgIHRoaXNPYmplY3QtPnZpc2l0Q2hpbGRyZW4odmlzaXRvcik7CiB9
CiAKLXZvaWQgQ29kZUJsb2NrOjp2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQor
REVGSU5FX1ZJU0lUX0NISUxEUkVOKENvZGVCbG9jayk7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZp
c2l0b3I+Cit2b2lkIENvZGVCbG9jazo6dmlzaXRDaGlsZHJlbkltcGwoVmlzaXRvciYgdmlzaXRv
cikKIHsKICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fbG9jayk7CiAgICAgaWYgKENv
ZGVCbG9jayogb3RoZXJCbG9jayA9IHNwZWNpYWxPU1JFbnRyeUJsb2NrT3JOdWxsKCkpCkBAIC0x
MDI2LDEyICsxMDM2LDE0IEBAIHZvaWQgQ29kZUJsb2NrOjp2aXNpdENoaWxkcmVuKFNsb3RWaXNp
dG8KICAgICBWTTo6U3BhY2VBbmRTZXQ6OnNldEZvcigqc3Vic3BhY2UoKSkuYWRkKHRoaXMpOwog
fQogCi1ib29sIENvZGVCbG9jazo6c2hvdWxkVmlzaXRTdHJvbmdseShjb25zdCBDb25jdXJyZW50
SlNMb2NrZXImIGxvY2tlcikKK0RFRklORV9JTlNUQU5DRV9WSVNJVF9DSElMRFJFTihDb2RlQmxv
Y2spOworCitib29sIENvZGVCbG9jazo6c2hvdWxkVmlzaXRTdHJvbmdseShjb25zdCBDb25jdXJy
ZW50SlNMb2NrZXImIGxvY2tlciwgQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAg
ICBpZiAoT3B0aW9uczo6Zm9yY2VDb2RlQmxvY2tMaXZlbmVzcygpKQogICAgICAgICByZXR1cm4g
dHJ1ZTsKIAotICAgIGlmIChzaG91bGRKZXR0aXNvbkR1ZVRvT2xkQWdlKGxvY2tlcikpCisgICAg
aWYgKHNob3VsZEpldHRpc29uRHVlVG9PbGRBZ2UobG9ja2VyLCB2aXNpdG9yKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCiAgICAgLy8gSW50ZXJwcmV0ZXIgYW5kIEJhc2VsaW5lIEpJVCBDb2Rl
QmxvY2tzIGRvbid0IG5lZWQgdG8gYmUgamV0dGlzb25lZCB3aGVuCkBAIC0xMDgzLDkgKzEwOTUs
OSBAQCBzdGF0aWMgU2Vjb25kcyB0aW1lVG9MaXZlKEpJVFR5cGUgaml0VHlwCiAgICAgfQogfQog
Ci1ib29sIENvZGVCbG9jazo6c2hvdWxkSmV0dGlzb25EdWVUb09sZEFnZShjb25zdCBDb25jdXJy
ZW50SlNMb2NrZXImKQorYm9vbCBDb2RlQmxvY2s6OnNob3VsZEpldHRpc29uRHVlVG9PbGRBZ2Uo
Y29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikK
IHsKLSAgICBpZiAobV92bS0+aGVhcC5pc01hcmtlZCh0aGlzKSkKKyAgICBpZiAodmlzaXRvci5p
c01hcmtlZCh0aGlzKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKFVOTElLRUxZ
KE9wdGlvbnM6OmZvcmNlQ29kZUJsb2NrVG9KZXR0aXNvbkR1ZVRvT2xkQWdlKCkpKQpAQCAtMTA5
OCwxMiArMTExMCwxMiBAQCBib29sIENvZGVCbG9jazo6c2hvdWxkSmV0dGlzb25EdWVUb09sZEFn
CiB9CiAKICNpZiBFTkFCTEUoREZHX0pJVCkKLXN0YXRpYyBib29sIHNob3VsZE1hcmtUcmFuc2l0
aW9uKFZNJiB2bSwgREZHOjpXZWFrUmVmZXJlbmNlVHJhbnNpdGlvbiYgdHJhbnNpdGlvbikKK3N0
YXRpYyBpbmxpbmUgYm9vbCBzaG91bGRNYXJrVHJhbnNpdGlvbihBYnN0cmFjdFNsb3RWaXNpdG9y
JiB2aXNpdG9yLCBERkc6OldlYWtSZWZlcmVuY2VUcmFuc2l0aW9uJiB0cmFuc2l0aW9uKQogewot
ICAgIGlmICh0cmFuc2l0aW9uLm1fY29kZU9yaWdpbiAmJiAhdm0uaGVhcC5pc01hcmtlZCh0cmFu
c2l0aW9uLm1fY29kZU9yaWdpbi5nZXQoKSkpCisgICAgaWYgKHRyYW5zaXRpb24ubV9jb2RlT3Jp
Z2luICYmICF2aXNpdG9yLmlzTWFya2VkKHRyYW5zaXRpb24ubV9jb2RlT3JpZ2luLmdldCgpKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAotICAgIGlmICghdm0uaGVhcC5pc01hcmtlZCh0
cmFuc2l0aW9uLm1fZnJvbS5nZXQoKSkpCisgICAgaWYgKCF2aXNpdG9yLmlzTWFya2VkKHRyYW5z
aXRpb24ubV9mcm9tLmdldCgpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAogICAgIHJl
dHVybiB0cnVlOwpAQCAtMTExOSwxMyArMTEzMSw1MSBAQCBCeXRlY29kZUluZGV4IENvZGVCbG9j
azo6Ynl0ZWNvZGVJbmRleEZvCiB9CiAjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCiAKLXZvaWQg
Q29kZUJsb2NrOjpwcm9wYWdhdGVUcmFuc2l0aW9ucyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXIm
LCBTbG90VmlzaXRvciYgdmlzaXRvcikKKyNpZiBFTkFCTEUoSklUKQorCisvL3RlbXBsYXRlPHR5
cGVuYW1lIFZpc2l0b3I+CisvL2Jvb2wgU3RydWN0dXJlU3R1YkluZm86OnByb3BhZ2F0ZVRyYW5z
aXRpb25zMShWaXNpdG9yJiB2aXNpdG9yKQorYm9vbCBTdHJ1Y3R1cmVTdHViSW5mbzo6cHJvcGFn
YXRlVHJhbnNpdGlvbnMxKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgc3dp
dGNoIChtX2NhY2hlVHlwZSkgeworICAgIGNhc2UgQ2FjaGVUeXBlOjpVbnNldDoKKyAgICBjYXNl
IENhY2hlVHlwZTo6QXJyYXlMZW5ndGg6CisgICAgY2FzZSBDYWNoZVR5cGU6OlN0cmluZ0xlbmd0
aDoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgY2FzZSBDYWNoZVR5cGU6OkdldEJ5SWRTZWxm
OgorICAgIGNhc2UgQ2FjaGVUeXBlOjpQdXRCeUlkUmVwbGFjZToKKyAgICBjYXNlIENhY2hlVHlw
ZTo6SW5CeUlkU2VsZjoKKyAgICAgICAgcmV0dXJuIHUuYnlJZFNlbGYuYmFzZU9iamVjdFN0cnVj
dHVyZS0+bWFya0lmQ2hlYXAxKHZpc2l0b3IpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
Y2FzZSBDYWNoZVR5cGU6OlN0dWI6CisgICAgICAgIHJldHVybiB1LnN0dWItPnByb3BhZ2F0ZVRy
YW5zaXRpb25zMTAodmlzaXRvcik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAg
CisvLyAgICBVTlVTRURfUEFSQU0odmlzaXRvcik7IC8vIG1sYW0gVEVTVAorICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKKyNlbmRpZiAvLyBF
TkFCTEUoSklUKQorCisvL3RlbXBsYXRlPD4gYm9vbCBTdHJ1Y3R1cmVTdHViSW5mbzo6cHJvcGFn
YXRlVHJhbnNpdGlvbnMxKFNsb3RWaXNpdG9yJik7CisvL3RlbXBsYXRlPD4gYm9vbCBTdHJ1Y3R1
cmVTdHViSW5mbzo6cHJvcGFnYXRlVHJhbnNpdGlvbnMxKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsK
KworLy90ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgorLy92b2lkIENvZGVCbG9jazo6cHJvcGFn
YXRlVHJhbnNpdGlvbnMoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgVmlzaXRvciYgdmlzaXRv
cikKK3ZvaWQgQ29kZUJsb2NrOjpwcm9wYWdhdGVUcmFuc2l0aW9uczEwNDUoY29uc3QgQ29uY3Vy
cmVudEpTTG9ja2VyJiwgQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKKyAgICBBYnN0
cmFjdFNsb3RWaXNpdG9yOjpDb250ZXh0IGNvbnRleHQodmlzaXRvciwgdGhpcyk7CisgICAgQWJz
dHJhY3RTbG90VmlzaXRvcjo6U3VwcHJlc3NHQ1ZlcmlmaWVyU2NvcGUgc3VwcHJlc3NTY29wZSh2
aXNpdG9yKTsKICAgICBWTSYgdm0gPSAqbV92bTsKIAorICAgIGlmIChtbGFtVmVyYm9zZSkgZGF0
YUxvZ0xuKCIgICAgbWxhbSBDb2RlQmxvY2s8IiwgUmF3UG9pbnRlcih0aGlzKSwgIj46OnByb3Bh
Z2F0ZVRyYW5zaXRpb25zMTxnYyMiLCBtbGFtVGltZSwgIj46IFNURVAgMCB2aXNpdG9yICIsIHZp
c2l0b3IuY29kZU5hbWUoKSwgIiBqaXRUeXBlICIsIGppdFR5cGUoKSk7CiAgICAgaWYgKGppdFR5
cGUoKSA9PSBKSVRUeXBlOjpJbnRlcnByZXRlclRodW5rKSB7CisgICAgICAgIGlmIChtbGFtVmVy
Ym9zZSkgZGF0YUxvZ0xuKCIgICAgbWxhbSBDb2RlQmxvY2s8IiwgUmF3UG9pbnRlcih0aGlzKSwg
Ij46OnByb3BhZ2F0ZVRyYW5zaXRpb25zMTxnYyMiLCBtbGFtVGltZSwgIj46IFNURVAgMC41IHZp
c2l0b3IgIiwgdmlzaXRvci5jb2RlTmFtZSgpLCAiIG1fbWV0YWRhdGEgIiwgUmF3UG9pbnRlciht
X21ldGFkYXRhLmdldCgpKSk7CiAgICAgICAgIGlmIChtX21ldGFkYXRhKSB7CiAgICAgICAgICAg
ICBtX21ldGFkYXRhLT5mb3JFYWNoPE9wUHV0QnlJZD4oWyZdIChhdXRvJiBtZXRhZGF0YSkgewor
Ly8gICAgICAgICAgICAgICAgQWJzdHJhY3RTbG90VmlzaXRvcjo6U3VwcHJlc3NHQ1ZlcmlmaWVy
U2NvcGUgc3VwcHJlc3NTY29wZSh2aXNpdG9yKTsKICAgICAgICAgICAgICAgICBTdHJ1Y3R1cmVJ
RCBvbGRTdHJ1Y3R1cmVJRCA9IG1ldGFkYXRhLm1fb2xkU3RydWN0dXJlSUQ7CiAgICAgICAgICAg
ICAgICAgU3RydWN0dXJlSUQgbmV3U3RydWN0dXJlSUQgPSBtZXRhZGF0YS5tX25ld1N0cnVjdHVy
ZUlEOwogICAgICAgICAgICAgICAgIGlmICghb2xkU3RydWN0dXJlSUQgfHwgIW5ld1N0cnVjdHVy
ZUlEKQpAQCAtMTEzNCw4ICsxMTg0LDI2IEBAIHZvaWQgQ29kZUJsb2NrOjpwcm9wYWdhdGVUcmFu
c2l0aW9ucyhjb24KICAgICAgICAgICAgICAgICAgICAgdm0uaGVhcC5zdHJ1Y3R1cmVJRFRhYmxl
KCkuZ2V0KG9sZFN0cnVjdHVyZUlEKTsKICAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIG5ld1N0
cnVjdHVyZSA9CiAgICAgICAgICAgICAgICAgICAgIHZtLmhlYXAuc3RydWN0dXJlSURUYWJsZSgp
LmdldChuZXdTdHJ1Y3R1cmVJRCk7Ci0gICAgICAgICAgICAgICAgaWYgKHZtLmhlYXAuaXNNYXJr
ZWQob2xkU3RydWN0dXJlKSkKKyAgICAgICAgICAgICAgICBpZiAobWxhbVZlcmJvc2UpIGRhdGFM
b2dMbigiICAgIG1sYW0gQ29kZUJsb2NrPCIsIFJhd1BvaW50ZXIodGhpcyksICI+Ojpwcm9wYWdh
dGVUcmFuc2l0aW9uczE8Z2MjIiwgbWxhbVRpbWUsICI+OiBTVEVQIDAuNiB2aXNpdG9yICIsIHZp
c2l0b3IuY29kZU5hbWUoKSwgIiBvbGRTdHJ1Y3R1cmUgIiwgUmF3UG9pbnRlcihvbGRTdHJ1Y3R1
cmUpLCAiIHZpc2l0b3IuaXNNYXJrZWQob2xkU3RydWN0dXJlKSAiLCB2aXNpdG9yLmlzTWFya2Vk
KG9sZFN0cnVjdHVyZSkpOworLy8gICAgICAgICAgICAgICAgaWYgKHZpc2l0b3IuaXNNYXJrZWQo
b2xkU3RydWN0dXJlKSkgeworICAgICAgICAgICAgICAgIGlmICghdmlzaXRvci5pc01hcmtlZChv
bGRTdHJ1Y3R1cmUpKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFdoZXRoZXIgb2xkU3RydWN0
dXJlIGlzIG1hcmtlZCBvciBub3QgaXMgaW5oZXJlbnRseSByYWN5LCBhbmQgZGVwZW5kcyBvbiB0
aGUKKyAgICAgICAgICAgICAgICAgICAgLy8gb3JkZXIgaW4gd2hpY2ggR0MgbWFya2VycyB2aXNp
dCBvYmplY3RzLiBBcyBhIHJlc3VsdCwgdGhlIEdDIHZlcmlmaWVyIG1heSBzZWUKKyAgICAgICAg
ICAgICAgICAgICAgLy8gb2xkU3RydWN0dXJlIGFzIG1hcmtlZCBhdCB0aGlzIHBvaW50IHRob3Vn
aCB0aGUgcmVhbCBHQyBkb2VzIG5vdCBkdWUgdG8gZGlmZmVyZW50CisgICAgICAgICAgICAgICAg
ICAgIC8vIHZpc2l0aW5nIG9yZGVycy4gTm90ZSB0aGF0IHRoaXMgaXMgT0s6IGZpbmFsaXplTExJ
bnRJbmxpbmVDYWNoZXMoKSB3aWxsIGNsZWFuCisgICAgICAgICAgICAgICAgICAgIC8vIHRoaW5n
cyB1cCBhbmQgbWFrZSB0aGVtIGNvbnNpc3RlbnQgaWYgd2UgZW5kIHVwIG5vdCB2aXNpdGluZyBu
ZXdTdHJ1Y3R1cmUuCisgICAgICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgICAg
IC8vIFRvIG1ha2UgaXQgc28gdGhhdCB0aGUgR0MgdmVyaWZpZXIgd2lsbCBzZWUgYSBjb25zaXN0
ZW50IHZpZXcgb2Ygd2hldGhlciB3ZQorICAgICAgICAgICAgICAgICAgICAvLyBzYXcgdGhpcyBv
bGRTdHJ1Y3R1cmUgaXMgbWFya2VkIG9yIG5vdCwgbGV0J3MgZmxhZyB0aGUgY2FjaGUgYXMgY2xl
YXJlZCBpZgorICAgICAgICAgICAgICAgICAgICAvLyBhbHJlYWR5IGRlY2lkZWQgdG8gbm90IHZp
c2l0IG5ld1N0cnVjdHVyZS4KKyAgICAgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAg
ICAgICAgLy8gVGhlIG11dGF0b3IgaXMgZmluZSB3aXRoIHRoaXMgYmVjYXVzZSBpdCBhbHdheXMg
cmVhZHMgbV9vbGRTdHJ1Y3R1cmVJRCBmaXJzdAorICAgICAgICAgICAgICAgICAgICAvLyBiZWZv
cmUgcmVhZGluZyBhbnkgb2YgdGhlIG90aGVyIGZpZWxkcy4gVGhlIG11dGF0b3Igd2lsbCBqdXN0
IHdvcmsuCisgICAgICAgICAgICAgICAgICAgIG1ldGFkYXRhLm1fb2xkU3RydWN0dXJlSUQgPSAw
OworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChtbGFt
VmVyYm9zZSkgZGF0YUxvZ0xuKCIgICAgbWxhbSBDb2RlQmxvY2s8IiwgUmF3UG9pbnRlcih0aGlz
KSwgIj46OnByb3BhZ2F0ZVRyYW5zaXRpb25zMTxnYyMiLCBtbGFtVGltZSwgIj46IFNURVAgMSB2
aXNpdG9yICIsIHZpc2l0b3IuY29kZU5hbWUoKSwgIiBuZXdTdHJ1Y3R1cmUgIiwgUmF3UG9pbnRl
cihuZXdTdHJ1Y3R1cmUpKTsKICAgICAgICAgICAgICAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJh
cnJpZXJlZChuZXdTdHJ1Y3R1cmUpOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0p
OwogCiAgICAgICAgICAgICBtX21ldGFkYXRhLT5mb3JFYWNoPE9wUHV0UHJpdmF0ZU5hbWU+KFsm
XSAoYXV0byYgbWV0YWRhdGEpIHsKQEAgLTExNDYsMjQgKzEyMTQsMjcgQEAgdm9pZCBDb2RlQmxv
Y2s6OnByb3BhZ2F0ZVRyYW5zaXRpb25zKGNvbgogCiAgICAgICAgICAgICAgICAgSlNDZWxsKiBw
cm9wZXJ0eSA9IG1ldGFkYXRhLm1fcHJvcGVydHkuZ2V0KCk7CiAgICAgICAgICAgICAgICAgQVNT
RVJUKHByb3BlcnR5KTsKLSAgICAgICAgICAgICAgICBpZiAoIXZtLmhlYXAuaXNNYXJrZWQocHJv
cGVydHkpKQorICAgICAgICAgICAgICAgIGlmICghdmlzaXRvci5pc01hcmtlZChwcm9wZXJ0eSkp
CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICAgICAgICAgIFN0cnVjdHVy
ZSogb2xkU3RydWN0dXJlID0KICAgICAgICAgICAgICAgICAgICAgdm0uaGVhcC5zdHJ1Y3R1cmVJ
RFRhYmxlKCkuZ2V0KG9sZFN0cnVjdHVyZUlEKTsKICAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUq
IG5ld1N0cnVjdHVyZSA9CiAgICAgICAgICAgICAgICAgICAgIHZtLmhlYXAuc3RydWN0dXJlSURU
YWJsZSgpLmdldChuZXdTdHJ1Y3R1cmVJRCk7Ci0gICAgICAgICAgICAgICAgaWYgKHZtLmhlYXAu
aXNNYXJrZWQob2xkU3RydWN0dXJlKSkKKyAgICAgICAgICAgICAgICBpZiAodmlzaXRvci5pc01h
cmtlZChvbGRTdHJ1Y3R1cmUpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChtbGFtVmVyYm9z
ZSkgZGF0YUxvZ0xuKCIgICAgbWxhbSBDb2RlQmxvY2s8IiwgUmF3UG9pbnRlcih0aGlzKSwgIj46
OnByb3BhZ2F0ZVRyYW5zaXRpb25zMTxnYyMiLCBtbGFtVGltZSwgIj46IFNURVAgMiB2aXNpdG9y
ICIsIHZpc2l0b3IuY29kZU5hbWUoKSwgIiBuZXdTdHJ1Y3R1cmUgIiwgUmF3UG9pbnRlcihuZXdT
dHJ1Y3R1cmUpKTsKICAgICAgICAgICAgICAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJl
ZChuZXdTdHJ1Y3R1cmUpOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0pOwogICAg
ICAgICB9CiAgICAgfQogCiAjaWYgRU5BQkxFKEpJVCkKICAgICBpZiAoSklUQ29kZTo6aXNKSVQo
aml0VHlwZSgpKSkgeworLy8gICAgICAgIEFic3RyYWN0U2xvdFZpc2l0b3I6OlN1cHByZXNzR0NW
ZXJpZmllclNjb3BlIHN1cHByZXNzU2NvcGUodmlzaXRvcik7CiAgICAgICAgIGlmIChhdXRvKiBq
aXREYXRhID0gbV9qaXREYXRhLmdldCgpKSB7CiAgICAgICAgICAgICBmb3IgKFN0cnVjdHVyZVN0
dWJJbmZvKiBzdHViSW5mbyA6IGppdERhdGEtPm1fc3R1YkluZm9zKQotICAgICAgICAgICAgICAg
IHN0dWJJbmZvLT5wcm9wYWdhdGVUcmFuc2l0aW9ucyh2aXNpdG9yKTsKKyAgICAgICAgICAgICAg
ICBzdHViSW5mby0+cHJvcGFnYXRlVHJhbnNpdGlvbnMxKHZpc2l0b3IpOwogICAgICAgICB9CiAg
ICAgfQogI2VuZGlmIC8vIEVOQUJMRShKSVQpCkBAIC0xMTcyLDEzICsxMjQzLDEzIEBAIHZvaWQg
Q29kZUJsb2NrOjpwcm9wYWdhdGVUcmFuc2l0aW9ucyhjb24KICAgICBpZiAoSklUQ29kZTo6aXNP
cHRpbWl6aW5nSklUKGppdFR5cGUoKSkpIHsKICAgICAgICAgREZHOjpDb21tb25EYXRhKiBkZmdD
b21tb24gPSBtX2ppdENvZGUtPmRmZ0NvbW1vbigpOwogICAgICAgICAKLSAgICAgICAgZGZnQ29t
bW9uLT5yZWNvcmRlZFN0YXR1c2VzLm1hcmtJZkNoZWFwKHZpc2l0b3IpOworICAgICAgICBkZmdD
b21tb24tPnJlY29yZGVkU3RhdHVzZXMubWFya0lmQ2hlYXAxKHZpc2l0b3IpOwogICAgICAgICAK
ICAgICAgICAgZm9yIChTdHJ1Y3R1cmVJRCBzdHJ1Y3R1cmVJRCA6IGRmZ0NvbW1vbi0+d2Vha1N0
cnVjdHVyZVJlZmVyZW5jZXMpCi0gICAgICAgICAgICB2bS5nZXRTdHJ1Y3R1cmUoc3RydWN0dXJl
SUQpLT5tYXJrSWZDaGVhcCh2aXNpdG9yKTsKKyAgICAgICAgICAgIHZtLmdldFN0cnVjdHVyZShz
dHJ1Y3R1cmVJRCktPm1hcmtJZkNoZWFwMSh2aXNpdG9yKTsKIAogICAgICAgICBmb3IgKGF1dG8m
IHRyYW5zaXRpb24gOiBkZmdDb21tb24tPnRyYW5zaXRpb25zKSB7Ci0gICAgICAgICAgICBpZiAo
c2hvdWxkTWFya1RyYW5zaXRpb24odm0sIHRyYW5zaXRpb24pKSB7CisgICAgICAgICAgICBpZiAo
c2hvdWxkTWFya1RyYW5zaXRpb24odmlzaXRvciwgdHJhbnNpdGlvbikpIHsKICAgICAgICAgICAg
ICAgICAvLyBJZiB0aGUgZm9sbG93aW5nIHRocmVlIHRoaW5ncyBhcmUgbGl2ZSwgdGhlbiB0aGUg
dGFyZ2V0IG9mIHRoZQogICAgICAgICAgICAgICAgIC8vIHRyYW5zaXRpb24gaXMgYWxzbyBsaXZl
OgogICAgICAgICAgICAgICAgIC8vCkBAIC0xMTk4LDYgKzEyNjksNyBAQCB2b2lkIENvZGVCbG9j
azo6cHJvcGFnYXRlVHJhbnNpdGlvbnMoY29uCiAgICAgICAgICAgICAgICAgLy8gdG8gbWFyayAo
aS5lLiBpdHMgZ2xvYmFsIG9iamVjdCBhbmQgcHJvdG90eXBlIGFyZSBib3RoIGFscmVhZHkKICAg
ICAgICAgICAgICAgICAvLyBsaXZlKS4KIAorICAgICAgICAgICAgICAgIGlmIChtbGFtVmVyYm9z
ZSkgZGF0YUxvZ0xuKCIgICAgbWxhbSBDb2RlQmxvY2s8IiwgUmF3UG9pbnRlcih0aGlzKSwgIj46
OnByb3BhZ2F0ZVRyYW5zaXRpb25zMTxnYyMiLCBtbGFtVGltZSwgIj46IFNURVAgMyB2aXNpdG9y
ICIsIHZpc2l0b3IuY29kZU5hbWUoKSwgIiB0cmFuc2l0aW9uLm1fdG8gIiwgUmF3UG9pbnRlcih0
cmFuc2l0aW9uLm1fdG8uZ2V0KCkpKTsKICAgICAgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZCh0
cmFuc2l0aW9uLm1fdG8pOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0xMjA1LDEzICsx
Mjc3LDE5IEBAIHZvaWQgQ29kZUJsb2NrOjpwcm9wYWdhdGVUcmFuc2l0aW9ucyhjb24KICNlbmRp
ZiAvLyBFTkFCTEUoREZHX0pJVCkKIH0KIAotdm9pZCBDb2RlQmxvY2s6OmRldGVybWluZUxpdmVu
ZXNzKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy90
ZW1wbGF0ZSB2b2lkIENvZGVCbG9jazo6cHJvcGFnYXRlVHJhbnNpdGlvbnMoY29uc3QgQ29uY3Vy
cmVudEpTTG9ja2VyJiwgU2xvdFZpc2l0b3ImKTsKKy8vdGVtcGxhdGUgdm9pZCBDb2RlQmxvY2s6
OnByb3BhZ2F0ZVRyYW5zaXRpb25zKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIFZlcmlmaWVy
U2xvdFZpc2l0b3ImKTsKKworLy90ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgorLy92b2lkIENv
ZGVCbG9jazo6ZGV0ZXJtaW5lTGl2ZW5lc3MoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgVmlz
aXRvciYgdmlzaXRvcikKK3ZvaWQgQ29kZUJsb2NrOjpkZXRlcm1pbmVMaXZlbmVzcyhjb25zdCBD
b25jdXJyZW50SlNMb2NrZXImLCBBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAg
IFVOVVNFRF9QQVJBTSh2aXNpdG9yKTsKICAgICAKICNpZiBFTkFCTEUoREZHX0pJVCkKICAgICBW
TSYgdm0gPSAqbV92bTsKLSAgICBpZiAodm0uaGVhcC5pc01hcmtlZCh0aGlzKSkKKy8vICAgIGlm
ICh2bS5oZWFwLmlzTWFya2VkKHRoaXMpKSAvLyBtbGFtCisgICAgaWYgKHZpc2l0b3IuaXNNYXJr
ZWQodGhpcykpCiAgICAgICAgIHJldHVybjsKICAgICAKICAgICAvLyBJbiByYXJlIGFuZCB3ZWly
ZCBjYXNlcywgdGhpcyBjb3VsZCBiZSBjYWxsZWQgb24gYSBiYXNlbGluZSBDb2RlQmxvY2suIE9u
ZSB0aGF0IEkgZm91bmQgd2FzCkBAIC0xMjI4LDcgKzEzMDYsOCBAQCB2b2lkIENvZGVCbG9jazo6
ZGV0ZXJtaW5lTGl2ZW5lc3MoY29uc3QgCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRm
Z0NvbW1vbi0+d2Vha1JlZmVyZW5jZXMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgSlNDZWxsKiBy
ZWZlcmVuY2UgPSBkZmdDb21tb24tPndlYWtSZWZlcmVuY2VzW2ldLmdldCgpOwogICAgICAgICBB
U1NFUlQoIWpzRHluYW1pY0Nhc3Q8Q29kZUJsb2NrKj4odm0sIHJlZmVyZW5jZSkpOwotICAgICAg
ICBpZiAoIXZtLmhlYXAuaXNNYXJrZWQocmVmZXJlbmNlKSkgeworLy8gICAgICAgIGlmICghdm0u
aGVhcC5pc01hcmtlZChyZWZlcmVuY2UpKSB7IC8vIG1sYW0KKyAgICAgICAgaWYgKCF2aXNpdG9y
LmlzTWFya2VkKHJlZmVyZW5jZSkpIHsKICAgICAgICAgICAgIGFsbEFyZUxpdmVTb0ZhciA9IGZh
bHNlOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTEyMzYsNyArMTMxNSw4IEBA
IHZvaWQgQ29kZUJsb2NrOjpkZXRlcm1pbmVMaXZlbmVzcyhjb25zdCAKICAgICBpZiAoYWxsQXJl
TGl2ZVNvRmFyKSB7CiAgICAgICAgIGZvciAoU3RydWN0dXJlSUQgc3RydWN0dXJlSUQgOiBkZmdD
b21tb24tPndlYWtTdHJ1Y3R1cmVSZWZlcmVuY2VzKSB7CiAgICAgICAgICAgICBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSA9IHZtLmdldFN0cnVjdHVyZShzdHJ1Y3R1cmVJRCk7Ci0gICAgICAgICAgICBp
ZiAoIXZtLmhlYXAuaXNNYXJrZWQoc3RydWN0dXJlKSkgeworLy8gICAgICAgICAgICBpZiAoIXZt
LmhlYXAuaXNNYXJrZWQoc3RydWN0dXJlKSkgeworICAgICAgICAgICAgaWYgKCF2aXNpdG9yLmlz
TWFya2VkKHN0cnVjdHVyZSkpIHsKICAgICAgICAgICAgICAgICBhbGxBcmVMaXZlU29GYXIgPSBm
YWxzZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KQEAgLTEyNTQsNiAr
MTMzNCw5IEBAIHZvaWQgQ29kZUJsb2NrOjpkZXRlcm1pbmVMaXZlbmVzcyhjb25zdCAKICNlbmRp
ZiAvLyBFTkFCTEUoREZHX0pJVCkKIH0KIAorLy90ZW1wbGF0ZSB2b2lkIENvZGVCbG9jazo6ZGV0
ZXJtaW5lTGl2ZW5lc3MoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgU2xvdFZpc2l0b3ImKTsK
Ky8vdGVtcGxhdGUgdm9pZCBDb2RlQmxvY2s6OmRldGVybWluZUxpdmVuZXNzKGNvbnN0IENvbmN1
cnJlbnRKU0xvY2tlciYsIFZlcmlmaWVyU2xvdFZpc2l0b3ImKTsKKwogdm9pZCBDb2RlQmxvY2s6
OmZpbmFsaXplTExJbnRJbmxpbmVDYWNoZXMoKQogewogICAgIFZNJiB2bSA9ICptX3ZtOwpAQCAt
MTMxMSw3ICsxMzk0LDExIEBAIHZvaWQgQ29kZUJsb2NrOjpmaW5hbGl6ZUxMSW50SW5saW5lQ2Fj
aGUKICAgICAgICAgICAgIFN0cnVjdHVyZUlEIG9sZFN0cnVjdHVyZUlEID0gbWV0YWRhdGEubV9v
bGRTdHJ1Y3R1cmVJRDsKICAgICAgICAgICAgIFN0cnVjdHVyZUlEIG5ld1N0cnVjdHVyZUlEID0g
bWV0YWRhdGEubV9uZXdTdHJ1Y3R1cmVJRDsKICAgICAgICAgICAgIFN0cnVjdHVyZUNoYWluKiBj
aGFpbiA9IG1ldGFkYXRhLm1fc3RydWN0dXJlQ2hhaW4uZ2V0KCk7Ci0gICAgICAgICAgICBpZiAo
KCFvbGRTdHJ1Y3R1cmVJRCB8fCB2bS5oZWFwLmlzTWFya2VkKHZtLmhlYXAuc3RydWN0dXJlSURU
YWJsZSgpLmdldChvbGRTdHJ1Y3R1cmVJRCkpKQorICAgICAgICAgICAgLy8gbWxhbSBGSVhNRSBy
ZS10aGluayBpZiB3ZSBjYW4gbWFrZSB0aGlzIGxlc3MgcGVzc2ltaXN0aWMgKGFuZCBkbyB3ZSBu
ZWVkIHRvKT8KKy8vICAgICAgICAgICAgaWYgKCghb2xkU3RydWN0dXJlSUQgfHwgdm0uaGVhcC5p
c01hcmtlZCh2bS5oZWFwLnN0cnVjdHVyZUlEVGFibGUoKS5nZXQob2xkU3RydWN0dXJlSUQpKSkK
Ky8vICAgICAgICAgICAgICAgICYmICghbmV3U3RydWN0dXJlSUQgfHwgdm0uaGVhcC5pc01hcmtl
ZCh2bS5oZWFwLnN0cnVjdHVyZUlEVGFibGUoKS5nZXQobmV3U3RydWN0dXJlSUQpKSkKKy8vICAg
ICAgICAgICAgICAgICYmICghY2hhaW4gfHwgdm0uaGVhcC5pc01hcmtlZChjaGFpbikpKQorICAg
ICAgICAgICAgaWYgKG9sZFN0cnVjdHVyZUlEICYmIHZtLmhlYXAuaXNNYXJrZWQodm0uaGVhcC5z
dHJ1Y3R1cmVJRFRhYmxlKCkuZ2V0KG9sZFN0cnVjdHVyZUlEKSkKICAgICAgICAgICAgICAgICAm
JiAoIW5ld1N0cnVjdHVyZUlEIHx8IHZtLmhlYXAuaXNNYXJrZWQodm0uaGVhcC5zdHJ1Y3R1cmVJ
RFRhYmxlKCkuZ2V0KG5ld1N0cnVjdHVyZUlEKSkpCiAgICAgICAgICAgICAgICAgJiYgKCFjaGFp
biB8fCB2bS5oZWFwLmlzTWFya2VkKGNoYWluKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwpA
QCAtMTc2Miw3ICsxODQ5LDggQEAgdm9pZCBDb2RlQmxvY2s6OnJlc2V0SklURGF0YSgpCiB9CiAj
ZW5kaWYKIAotdm9pZCBDb2RlQmxvY2s6OnZpc2l0T1NSRXhpdFRhcmdldHMoY29uc3QgQ29uY3Vy
cmVudEpTTG9ja2VyJiwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPgordm9pZCBDb2RlQmxvY2s6OnZpc2l0T1NSRXhpdFRhcmdldHMoY29uc3QgQ29uY3Vy
cmVudEpTTG9ja2VyJiwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICAvLyBXZSBzdHJvbmdseSB2
aXNpdCBPU1IgZXhpdHMgdGFyZ2V0cyBiZWNhdXNlIHdlIGRvbid0IHdhbnQgdG8gZGVhbCB3aXRo
CiAgICAgLy8gdGhlIGNvbXBsZXhpdHkgb2YgZ2VuZXJhdGluZyBhbiBleGl0IHRhcmdldCBDb2Rl
QmxvY2sgb24gZGVtYW5kIGFuZApAQCAtMTc4Miw3ICsxODcwLDExIEBAIHZvaWQgQ29kZUJsb2Nr
Ojp2aXNpdE9TUkV4aXRUYXJnZXRzKGNvbnMKICNlbmRpZgogfQogCi12b2lkIENvZGVCbG9jazo6
c3Ryb25nbHlWaXNpdFN0cm9uZ1JlZmVyZW5jZXMoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiBs
b2NrZXIsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGUgdm9pZCBDb2RlQmxvY2s6OnZp
c2l0T1NSRXhpdFRhcmdldHMoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgU2xvdFZpc2l0b3Im
KTsKK3RlbXBsYXRlIHZvaWQgQ29kZUJsb2NrOjp2aXNpdE9TUkV4aXRUYXJnZXRzKGNvbnN0IENv
bmN1cnJlbnRKU0xvY2tlciYsIEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKKwordGVtcGxhdGU8dHlw
ZW5hbWUgVmlzaXRvcj4KK3ZvaWQgQ29kZUJsb2NrOjpzdHJvbmdseVZpc2l0U3Ryb25nUmVmZXJl
bmNlcyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImIGxvY2tlciwgVmlzaXRvciYgdmlzaXRvcikK
IHsKICAgICBVTlVTRURfUEFSQU0obG9ja2VyKTsKICAgICAKQEAgLTE4MDMsMjIgKzE4OTUsMjYg
QEAgdm9pZCBDb2RlQmxvY2s6OnN0cm9uZ2x5VmlzaXRTdHJvbmdSZWZlcgogI2lmIEVOQUJMRShK
SVQpCiAgICAgaWYgKGF1dG8qIGppdERhdGEgPSBtX2ppdERhdGEuZ2V0KCkpIHsKICAgICAgICAg
Zm9yIChCeVZhbEluZm8qIGJ5VmFsSW5mbyA6IGppdERhdGEtPm1fYnlWYWxJbmZvcykKLSAgICAg
ICAgICAgIGJ5VmFsSW5mby0+dmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7CisgICAgICAgICAgICBi
eVZhbEluZm8tPnZpc2l0QWdncmVnYXRlMSh2aXNpdG9yKTsKICAgICAgICAgZm9yIChTdHJ1Y3R1
cmVTdHViSW5mbyogc3R1YkluZm8gOiBqaXREYXRhLT5tX3N0dWJJbmZvcykKLSAgICAgICAgICAg
IHN0dWJJbmZvLT52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKKyAgICAgICAgICAgIHN0dWJJbmZv
LT52aXNpdEFnZ3JlZ2F0ZTEodmlzaXRvcik7CiAgICAgfQogI2VuZGlmCiAKICNpZiBFTkFCTEUo
REZHX0pJVCkKICAgICBpZiAoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGppdFR5cGUoKSkpIHsK
ICAgICAgICAgREZHOjpDb21tb25EYXRhKiBkZmdDb21tb24gPSBtX2ppdENvZGUtPmRmZ0NvbW1v
bigpOwotICAgICAgICBkZmdDb21tb24tPnJlY29yZGVkU3RhdHVzZXMudmlzaXRBZ2dyZWdhdGUo
dmlzaXRvcik7CisgICAgICAgIGRmZ0NvbW1vbi0+cmVjb3JkZWRTdGF0dXNlcy52aXNpdEFnZ3Jl
Z2F0ZTEodmlzaXRvcik7CiAgICAgICAgIHZpc2l0T1NSRXhpdFRhcmdldHMobG9ja2VyLCB2aXNp
dG9yKTsKICAgICB9CiAjZW5kaWYKIH0KIAotdm9pZCBDb2RlQmxvY2s6OnN0cm9uZ2x5VmlzaXRX
ZWFrUmVmZXJlbmNlcyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBTbG90VmlzaXRvciYgdmlz
aXRvcikKKy8vdGVtcGxhdGUgdm9pZCBDb2RlQmxvY2s6OnN0cm9uZ2x5VmlzaXRTdHJvbmdSZWZl
cmVuY2VzKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIFNsb3RWaXNpdG9yJik7CisvL3RlbXBs
YXRlIHZvaWQgQ29kZUJsb2NrOjpzdHJvbmdseVZpc2l0U3Ryb25nUmVmZXJlbmNlcyhjb25zdCBD
b25jdXJyZW50SlNMb2NrZXImLCBWZXJpZmllclNsb3RWaXNpdG9yJik7CisKK3RlbXBsYXRlPHR5
cGVuYW1lIFZpc2l0b3I+Cit2b2lkIENvZGVCbG9jazo6c3Ryb25nbHlWaXNpdFdlYWtSZWZlcmVu
Y2VzKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAg
VU5VU0VEX1BBUkFNKHZpc2l0b3IpOwogCkBAIC0xODQ1LDYgKzE5NDEsOSBAQCB2b2lkIENvZGVC
bG9jazo6c3Ryb25nbHlWaXNpdFdlYWtSZWZlcmVuCiAjZW5kaWYgICAgCiB9CiAKK3RlbXBsYXRl
IHZvaWQgQ29kZUJsb2NrOjpzdHJvbmdseVZpc2l0V2Vha1JlZmVyZW5jZXMoY29uc3QgQ29uY3Vy
cmVudEpTTG9ja2VyJiwgU2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgQ29kZUJsb2NrOjpz
dHJvbmdseVZpc2l0V2Vha1JlZmVyZW5jZXMoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgQWJz
dHJhY3RTbG90VmlzaXRvciYpOworCiBDb2RlQmxvY2sqIENvZGVCbG9jazo6YmFzZWxpbmVBbHRl
cm5hdGl2ZSgpCiB7CiAjaWYgRU5BQkxFKEpJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Db2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMjAxLDEw
ICsyMDEsMTEgQEAgcHVibGljOgogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xMjM2NzcKICAgICBDb2RlQmxvY2sqIGJhc2VsaW5lVmVyc2lvbigpOwogCisg
ICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKKwogICAgIHN0YXRpYyBzaXplX3QgZXN0aW1hdGVk
U2l6ZShKU0NlbGwqLCBWTSYpOwotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiwgU2xvdFZpc2l0b3ImKTsKICAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwotICAg
IHZvaWQgdmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfSU5TVEFOQ0Vf
VklTSVRfQ0hJTERSRU47CiAgICAgdm9pZCBmaW5hbGl6ZVVuY29uZGl0aW9uYWxseShWTSYpOwog
CiAgICAgdm9pZCBub3RpZnlMZXhpY2FsQmluZGluZ1VwZGF0ZSgpOwpAQCAtOTYzLDE2ICs5NjQs
MTggQEAgcHJpdmF0ZToKICAgICAgICAgbV9jb25zdGFudFJlZ2lzdGVyc1tyZWcudG9Db25zdGFu
dEluZGV4KCldLnNldCgqbV92bSwgdGhpcywgdmFsdWUpOwogICAgIH0KIAotICAgIGJvb2wgc2hv
dWxkVmlzaXRTdHJvbmdseShjb25zdCBDb25jdXJyZW50SlNMb2NrZXImKTsKKyAgICBib29sIHNo
b3VsZFZpc2l0U3Ryb25nbHkoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgQWJzdHJhY3RTbG90
VmlzaXRvciYpOwogICAgIGJvb2wgc2hvdWxkSmV0dGlzb25EdWVUb1dlYWtSZWZlcmVuY2UoVk0m
KTsKLSAgICBib29sIHNob3VsZEpldHRpc29uRHVlVG9PbGRBZ2UoY29uc3QgQ29uY3VycmVudEpT
TG9ja2VyJik7CisgICAgYm9vbCBzaG91bGRKZXR0aXNvbkR1ZVRvT2xkQWdlKGNvbnN0IENvbmN1
cnJlbnRKU0xvY2tlciYsIEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKICAgICAKLSAgICB2b2lkIHBy
b3BhZ2F0ZVRyYW5zaXRpb25zKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIFNsb3RWaXNpdG9y
Jik7Ci0gICAgdm9pZCBkZXRlcm1pbmVMaXZlbmVzcyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXIm
LCBTbG90VmlzaXRvciYpOworLy8gICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCBw
cm9wYWdhdGVUcmFuc2l0aW9ucyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBWaXNpdG9yJik7
CisgICAgdm9pZCBwcm9wYWdhdGVUcmFuc2l0aW9uczEwNDUoY29uc3QgQ29uY3VycmVudEpTTG9j
a2VyJiwgQWJzdHJhY3RTbG90VmlzaXRvciYpOworLy8gICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlz
aXRvcj4gdm9pZCBkZXRlcm1pbmVMaXZlbmVzcyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBW
aXNpdG9yJik7CisgICAgdm9pZCBkZXRlcm1pbmVMaXZlbmVzcyhjb25zdCBDb25jdXJyZW50SlNM
b2NrZXImLCBBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAgICAgICAgIAotICAgIHZvaWQgc3Ryb25n
bHlWaXNpdFN0cm9uZ1JlZmVyZW5jZXMoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgU2xvdFZp
c2l0b3ImKTsKLSAgICB2b2lkIHN0cm9uZ2x5VmlzaXRXZWFrUmVmZXJlbmNlcyhjb25zdCBDb25j
dXJyZW50SlNMb2NrZXImLCBTbG90VmlzaXRvciYpOwotICAgIHZvaWQgdmlzaXRPU1JFeGl0VGFy
Z2V0cyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBTbG90VmlzaXRvciYpOworICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgc3Ryb25nbHlWaXNpdFN0cm9uZ1JlZmVyZW5jZXMo
Y29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgVmlzaXRvciYpOworICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFZpc2l0b3I+IHZvaWQgc3Ryb25nbHlWaXNpdFdlYWtSZWZlcmVuY2VzKGNvbnN0IENvbmN1
cnJlbnRKU0xvY2tlciYsIFZpc2l0b3ImKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
PiB2b2lkIHZpc2l0T1NSRXhpdFRhcmdldHMoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgVmlz
aXRvciYpOwogCiAgICAgdW5zaWduZWQgbnVtYmVyT2ZOb25Bcmd1bWVudFZhbHVlUHJvZmlsZXMo
KSB7IHJldHVybiBtX251bWJlck9mTm9uQXJndW1lbnRWYWx1ZVByb2ZpbGVzOyB9CiAgICAgdW5z
aWduZWQgdG90YWxOdW1iZXJPZlZhbHVlUHJvZmlsZXMoKSB7IHJldHVybiBudW1iZXJPZkFyZ3Vt
ZW50VmFsdWVQcm9maWxlcygpICsgbnVtYmVyT2ZOb25Bcmd1bWVudFZhbHVlUHJvZmlsZXMoKTsg
fQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0RlbGV0ZUJ5SWRWYXJpYW50
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRGVsZXRl
QnlJZFZhcmlhbnQuY3BwCShyZXZpc2lvbiAyNzIyOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvRGVsZXRlQnlJZFZhcmlhbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OCwx
OSArODgsMjkgQEAgYm9vbCBEZWxldGVCeUlkVmFyaWFudDo6d3JpdGVzU3RydWN0dXJlcwogICAg
IHJldHVybiAhIW5ld1N0cnVjdHVyZSgpOwogfQogCi12b2lkIERlbGV0ZUJ5SWRWYXJpYW50Ojp2
aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vdGVtcGxhdGU8dHlwZW5hbWUg
VmlzaXRvcj4KKy8vdm9pZCBEZWxldGVCeUlkVmFyaWFudDo6dmlzaXRBZ2dyZWdhdGUoVmlzaXRv
ciYgdmlzaXRvcikKK3ZvaWQgRGVsZXRlQnlJZFZhcmlhbnQ6OnZpc2l0QWdncmVnYXRlMShBYnN0
cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewotICAgIG1faWRlbnRpZmllci52aXNpdEFnZ3Jl
Z2F0ZSh2aXNpdG9yKTsKKyAgICBtX2lkZW50aWZpZXIudmlzaXRBZ2dyZWdhdGUxKHZpc2l0b3Ip
OwogfQogCi12b2lkIERlbGV0ZUJ5SWRWYXJpYW50OjptYXJrSWZDaGVhcChTbG90VmlzaXRvciYg
dmlzaXRvcikKKy8vdGVtcGxhdGUgdm9pZCBEZWxldGVCeUlkVmFyaWFudDo6dmlzaXRBZ2dyZWdh
dGUoU2xvdFZpc2l0b3ImKTsKKy8vdGVtcGxhdGUgdm9pZCBEZWxldGVCeUlkVmFyaWFudDo6dmlz
aXRBZ2dyZWdhdGUoVmVyaWZpZXJTbG90VmlzaXRvciYpOworCisvL3RlbXBsYXRlPHR5cGVuYW1l
IFZpc2l0b3I+CisvL3ZvaWQgRGVsZXRlQnlJZFZhcmlhbnQ6Om1hcmtJZkNoZWFwKFZpc2l0b3Im
IHZpc2l0b3IpCit2b2lkIERlbGV0ZUJ5SWRWYXJpYW50OjptYXJrSWZDaGVhcDEoQWJzdHJhY3RT
bG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBpZiAobV9vbGRTdHJ1Y3R1cmUpCi0gICAgICAg
IG1fb2xkU3RydWN0dXJlLT5tYXJrSWZDaGVhcCh2aXNpdG9yKTsKKyAgICAgICAgbV9vbGRTdHJ1
Y3R1cmUtPm1hcmtJZkNoZWFwMSh2aXNpdG9yKTsKICAgICBpZiAobV9uZXdTdHJ1Y3R1cmUpCi0g
ICAgICAgIG1fbmV3U3RydWN0dXJlLT5tYXJrSWZDaGVhcCh2aXNpdG9yKTsKKyAgICAgICAgbV9u
ZXdTdHJ1Y3R1cmUtPm1hcmtJZkNoZWFwMSh2aXNpdG9yKTsKIH0KIAorLy90ZW1wbGF0ZSB2b2lk
IERlbGV0ZUJ5SWRWYXJpYW50OjptYXJrSWZDaGVhcChTbG90VmlzaXRvciYpOworLy90ZW1wbGF0
ZSB2b2lkIERlbGV0ZUJ5SWRWYXJpYW50OjptYXJrSWZDaGVhcChWZXJpZmllclNsb3RWaXNpdG9y
Jik7CisKIHZvaWQgRGVsZXRlQnlJZFZhcmlhbnQ6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29u
c3QKIHsKICAgICBkdW1wSW5Db250ZXh0KG91dCwgbnVsbHB0cik7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvRGVsZXRlQnlJZFZhcmlhbnQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRGVsZXRlQnlJZFZhcmlhbnQuaAkocmV2aXNp
b24gMjcyMjk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0RlbGV0ZUJ5SWRW
YXJpYW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTYxLDggKzYxLDEwIEBAIHB1YmxpYzoKIAogICAg
IGJvb2wgYXR0ZW1wdFRvTWVyZ2UoY29uc3QgRGVsZXRlQnlJZFZhcmlhbnQmIG90aGVyKTsKIAot
ICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImKTsKLSAgICB2b2lkIG1hcmtJZkNo
ZWFwKFNsb3RWaXNpdG9yJik7CisvLyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lk
IHZpc2l0QWdncmVnYXRlKFZpc2l0b3ImKTsKKy8vICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0
b3I+IHZvaWQgbWFya0lmQ2hlYXAoVmlzaXRvciYpOworICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUx
KEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKKyAgICB2b2lkIG1hcmtJZkNoZWFwMShBYnN0cmFjdFNs
b3RWaXNpdG9yJik7CiAgICAgYm9vbCBmaW5hbGl6ZShWTSYpOwogCiAgICAgdm9pZCBkdW1wKFBy
aW50U3RyZWFtJikgY29uc3Q7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
RGVsZXRlQnlTdGF0dXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9EZWxldGVCeVN0YXR1cy5jcHAJKHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9EZWxldGVCeVN0YXR1cy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI1NCwxOCArMjU0LDI4IEBAIENhY2hlYWJsZUlkZW50aWZpZXIgRGVsZXRlQnlTdGF0dXM6
OnNpbmcKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi12b2lkIERlbGV0ZUJ5U3RhdHVzOjp2aXNp
dEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vdGVtcGxhdGU8dHlwZW5hbWUgVmlz
aXRvcj4KKy8vdm9pZCBEZWxldGVCeVN0YXR1czo6dmlzaXRBZ2dyZWdhdGUoVmlzaXRvciYgdmlz
aXRvcikKK3ZvaWQgRGVsZXRlQnlTdGF0dXM6OnZpc2l0QWdncmVnYXRlMShBYnN0cmFjdFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQogewogICAgIGZvciAoRGVsZXRlQnlJZFZhcmlhbnQmIHZhcmlhbnQg
OiBtX3ZhcmlhbnRzKQotICAgICAgICB2YXJpYW50LnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOwor
ICAgICAgICB2YXJpYW50LnZpc2l0QWdncmVnYXRlMSh2aXNpdG9yKTsKIH0KIAotdm9pZCBEZWxl
dGVCeVN0YXR1czo6bWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3RlbXBsYXRl
IHZvaWQgRGVsZXRlQnlTdGF0dXM6OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJik7CisvL3Rl
bXBsYXRlIHZvaWQgRGVsZXRlQnlTdGF0dXM6OnZpc2l0QWdncmVnYXRlKFZlcmlmaWVyU2xvdFZp
c2l0b3ImKTsKKworLy90ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgorLy92b2lkIERlbGV0ZUJ5
U3RhdHVzOjptYXJrSWZDaGVhcChWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBEZWxldGVCeVN0YXR1
czo6bWFya0lmQ2hlYXAxKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgZm9y
IChEZWxldGVCeUlkVmFyaWFudCYgdmFyaWFudCA6IG1fdmFyaWFudHMpCi0gICAgICAgIHZhcmlh
bnQubWFya0lmQ2hlYXAodmlzaXRvcik7CisgICAgICAgIHZhcmlhbnQubWFya0lmQ2hlYXAxKHZp
c2l0b3IpOwogfQogCisvL3RlbXBsYXRlIHZvaWQgRGVsZXRlQnlTdGF0dXM6Om1hcmtJZkNoZWFw
KFNsb3RWaXNpdG9yJik7CisvL3RlbXBsYXRlIHZvaWQgRGVsZXRlQnlTdGF0dXM6Om1hcmtJZkNo
ZWFwKFZlcmlmaWVyU2xvdFZpc2l0b3ImKTsKKwogYm9vbCBEZWxldGVCeVN0YXR1czo6ZmluYWxp
emUoVk0mIHZtKQogewogICAgIGZvciAoYXV0byYgdmFyaWFudCA6IG1fdmFyaWFudHMpIHsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9EZWxldGVCeVN0YXR1cy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9EZWxldGVCeVN0YXR1cy5o
CShyZXZpc2lvbiAyNzIyOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRGVs
ZXRlQnlTdGF0dXMuaAkod29ya2luZyBjb3B5KQpAQCAtODEsOCArODEsMTAgQEAgcHVibGljOgog
ICAgIC8vIEF0dGVtcHRzIHRvIHJlZHVjZSB0aGUgc2V0IG9mIHZhcmlhbnRzIHRvIGZpdCB0aGUg
Z2l2ZW4gc3RydWN0dXJlIHNldC4gVGhpcyBtYXkgYmUgYXBwcm94aW1hdGUuCiAgICAgdm9pZCBm
aWx0ZXIoY29uc3QgU3RydWN0dXJlU2V0Jik7CiAKLSAgICB2b2lkIHZpc2l0QWdncmVnYXRlKFNs
b3RWaXNpdG9yJik7Ci0gICAgdm9pZCBtYXJrSWZDaGVhcChTbG90VmlzaXRvciYpOworLy8gICAg
dGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCB2aXNpdEFnZ3JlZ2F0ZShWaXNpdG9yJik7
CisvLyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIG1hcmtJZkNoZWFwKFZpc2l0
b3ImKTsKKyAgICB2b2lkIHZpc2l0QWdncmVnYXRlMShBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cisg
ICAgdm9pZCBtYXJrSWZDaGVhcDEoQWJzdHJhY3RTbG90VmlzaXRvciYpOwogICAgIGJvb2wgZmlu
YWxpemUoVk0mKTsKIAogICAgIGJvb2wgYXBwZW5kVmFyaWFudChjb25zdCBEZWxldGVCeUlkVmFy
aWFudCYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0RpcmVjdEV2YWxD
b2RlQ2FjaGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9EaXJlY3RFdmFsQ29kZUNhY2hlLmNwcAkocmV2aXNpb24gMjcyMjk3KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0RpcmVjdEV2YWxDb2RlQ2FjaGUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00NSw3ICs0NSw4IEBAIHZvaWQgRGlyZWN0RXZhbENvZGVDYWNoZTo6Y2xlYXIoKQog
ICAgIG1fY2FjaGVNYXAuY2xlYXIoKTsKIH0KIAotdm9pZCBEaXJlY3RFdmFsQ29kZUNhY2hlOjp2
aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZp
c2l0b3I+Cit2b2lkIERpcmVjdEV2YWxDb2RlQ2FjaGU6OnZpc2l0QWdncmVnYXRlKFZpc2l0b3Im
IHZpc2l0b3IpCiB7CiAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9sb2NrKTsKICAgICBFdmFsQ2Fj
aGVNYXA6Oml0ZXJhdG9yIGVuZCA9IG1fY2FjaGVNYXAuZW5kKCk7CkBAIC01Myw1ICs1NCw3IEBA
IHZvaWQgRGlyZWN0RXZhbENvZGVDYWNoZTo6dmlzaXRBZ2dyZWdhdGUKICAgICAgICAgdmlzaXRv
ci5hcHBlbmQocHRyLT52YWx1ZSk7CiB9CiAKLX0gLy8gbmFtZXNwYWNlIEpTQwordGVtcGxhdGUg
dm9pZCBEaXJlY3RFdmFsQ29kZUNhY2hlOjp2aXNpdEFnZ3JlZ2F0ZShBYnN0cmFjdFNsb3RWaXNp
dG9yJik7Cit0ZW1wbGF0ZSB2b2lkIERpcmVjdEV2YWxDb2RlQ2FjaGU6OnZpc2l0QWdncmVnYXRl
KFNsb3RWaXNpdG9yJik7CiAKK30gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0RpcmVjdEV2YWxDb2RlQ2FjaGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRGlyZWN0RXZhbENvZGVDYWNoZS5oCShyZXZp
c2lvbiAyNzIyOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRGlyZWN0RXZh
bENvZGVDYWNoZS5oCSh3b3JraW5nIGNvcHkpCkBAIC05Nyw3ICs5Nyw3IEBAIG5hbWVzcGFjZSBK
U0MgewogCiAgICAgICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fY2FjaGVNYXAu
aXNFbXB0eSgpOyB9CiAKLSAgICAgICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYp
OworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIHZpc2l0QWdncmVnYXRl
KFZpc2l0b3ImKTsKIAogICAgICAgICB2b2lkIGNsZWFyKCk7CiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9FeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhlY3V0YWJsZVRvQ29kZUJs
b2NrRWRnZS5jcHAJKHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9FeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMjAgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMyw2
ICszMyw5IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCitleHRlcm4gdW5zaWduZWQgbWxhbVRpbWU7
CitleHRlcm4gYm9vbCBtbGFtVmVyYm9zZTsKKwogY29uc3QgQ2xhc3NJbmZvIEV4ZWN1dGFibGVU
b0NvZGVCbG9ja0VkZ2U6OnNfaW5mbyA9IHsgIkV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UiLCBu
dWxscHRyLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEV4ZWN1dGFibGVU
b0NvZGVCbG9ja0VkZ2UpIH07CiAKIFN0cnVjdHVyZSogRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRn
ZTo6Y3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
SlNWYWx1ZSBwcm90b3R5cGUpCkBAIC01Myw3ICs1Niw4IEBAIHZvaWQgRXhlY3V0YWJsZVRvQ29k
ZUJsb2NrRWRnZTo6ZmluaXNoQ3IKICAgICBBU1NFUlQoIWlzQWN0aXZlKCkpOwogfQogCi12b2lk
IEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2U6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBT
bG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEV4
ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2U6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwg
VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBWTSYgdm0gPSB2aXNpdG9yLnZtKCk7CiAgICAgRXhl
Y3V0YWJsZVRvQ29kZUJsb2NrRWRnZSogZWRnZSA9IGpzQ2FzdDxFeGVjdXRhYmxlVG9Db2RlQmxv
Y2tFZGdlKj4oY2VsbCk7CkBAIC02MSw3ICs2NSw4IEBAIHZvaWQgRXhlY3V0YWJsZVRvQ29kZUJs
b2NrRWRnZTo6dmlzaXRDaGkKICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKGNlbGwsIHZpc2l0b3Ip
OwogCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBlZGdlLT5tX2NvZGVCbG9jay5nZXQoKTsK
LSAgICAKKyAgICBpZiAobWxhbVZlcmJvc2UpIGRhdGFMb2dMbigiICAgIG1sYW0gRXhlY3V0YWJs
ZVRvQ29kZUJsb2NrRWRnZTwiLCBSYXdQb2ludGVyKGNlbGwpLCAiPjo6dmlzaXRDaGlsZHJlbklt
cGw6IFNURVAgMTogQ29kZUJsb2NrPCIsIFJhd1BvaW50ZXIoY29kZUJsb2NrKSwgIj4gPGdjIyIs
IG1sYW1UaW1lLCAiPiB2aXNpdG9yICIsIHZpc2l0b3IuY29kZU5hbWUoKSwgIiB8IGVkZ2UtPmlz
QWN0aXZlKCkgIiwgZWRnZS0+aXNBY3RpdmUoKSk7CisKICAgICAvLyBJdCdzIHBvc3NpYmxlIGZv
ciBzb21lb25lIHRvIGhvbGQgYSBwb2ludGVyIHRvIHRoZSBlZGdlIGFmdGVyIHRoZSBlZGdlIGhh
cyBjbGVhcmVkIGl0cyB3ZWFrCiAgICAgLy8gcmVmZXJlbmNlIHRvIHRoZSBjb2RlQmxvY2suIElu
IGEgY29uc2VydmF0aXZlIEdDIGxpa2Ugb3VycywgdGhhdCBjb3VsZCBoYXBwZW4gYXQgcmFuZG9t
IGZvcgogICAgIC8vIG5vIGdvb2QgcmVhc29uIGFuZCBpdCdzIFRvdGFsbHkgT0sgKFRNKS4gU2Vl
IGZpbmFsaXplVW5jb25kaXRpb25hbGx5KCkgZm9yIHdoZXJlIHdlIGNsZWFyCkBAIC03NSwxMSAr
ODAsNTIgQEAgdm9pZCBFeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlOjp2aXNpdENoaQogICAgIH0K
ICAgICAKICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrKTsK
LSAgICAKLSAgICBpZiAoY29kZUJsb2NrLT5zaG91bGRWaXNpdFN0cm9uZ2x5KGxvY2tlcikpCisK
KyAgICAvLyBtbGFtIFRFU1QKKyAgICBhdXRvIHRpbWVUb0xpdmUgPSBbXSAoSklUVHlwZSBqaXRU
eXBlKSAtPiBTZWNvbmRzCisgICAgeworICAgICAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6dXNl
RWFnZXJDb2RlQmxvY2tKZXR0aXNvblRpbWluZygpKSkgeworICAgICAgICAgICAgc3dpdGNoIChq
aXRUeXBlKSB7CisgICAgICAgICAgICBjYXNlIEpJVFR5cGU6OkludGVycHJldGVyVGh1bms6Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIDEwX21zOworICAgICAgICAgICAgY2FzZSBKSVRUeXBlOjpC
YXNlbGluZUpJVDoKKyAgICAgICAgICAgICAgICByZXR1cm4gMzBfbXM7CisgICAgICAgICAgICBj
YXNlIEpJVFR5cGU6OkRGR0pJVDoKKyAgICAgICAgICAgICAgICByZXR1cm4gNDBfbXM7CisgICAg
ICAgICAgICBjYXNlIEpJVFR5cGU6OkZUTEpJVDoKKyAgICAgICAgICAgICAgICByZXR1cm4gMTIw
X21zOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gU2Vjb25k
czo6aW5maW5pdHkoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHN3aXRj
aCAoaml0VHlwZSkgeworICAgICAgICBjYXNlIEpJVFR5cGU6OkludGVycHJldGVyVGh1bms6Cisg
ICAgICAgICAgICByZXR1cm4gNV9zOworICAgICAgICBjYXNlIEpJVFR5cGU6OkJhc2VsaW5lSklU
OgorICAgICAgICAgICAgLy8gRWZmZWN0aXZlbHkgMTAgYWRkaXRpb25hbCBzZWNvbmRzLCBzaW5j
ZSBCYXNlbGluZUpJVCBhbmQKKyAgICAgICAgICAgIC8vIEludGVycHJldGVyVGh1bmsgc2hhcmUg
YSBDb2RlQmxvY2suCisgICAgICAgICAgICByZXR1cm4gMTVfczsKKyAgICAgICAgY2FzZSBKSVRU
eXBlOjpERkdKSVQ6CisgICAgICAgICAgICByZXR1cm4gMjBfczsKKyAgICAgICAgY2FzZSBKSVRU
eXBlOjpGVExKSVQ6CisgICAgICAgICAgICByZXR1cm4gNjBfczsKKyAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgIHJldHVybiBTZWNvbmRzOjppbmZpbml0eSgpOworICAgICAgICB9CisgICAg
fTsKKyAgICAvLyBtbGFtIFRFU1QgKi8KKworICAgIGlmIChtbGFtVmVyYm9zZSkgeworICAgICAg
ICBhdXRvIHRpbWVTaW5jZUNyZWF0aW9uID0gY29kZUJsb2NrLT50aW1lU2luY2VDcmVhdGlvbigp
OworICAgICAgICBhdXRvIHRpbWVUb0xpdmUxID0gdGltZVRvTGl2ZShjb2RlQmxvY2stPmppdFR5
cGUoKSk7CisgICAgICAgIGRhdGFMb2dMbigiICAgIG1sYW0gRXhlY3V0YWJsZVRvQ29kZUJsb2Nr
RWRnZTwiLCBSYXdQb2ludGVyKGNlbGwpLCAiPjo6dmlzaXRDaGlsZHJlbkltcGw6IFNURVAgMS41
OiBDb2RlQmxvY2s8IiwgUmF3UG9pbnRlcihjb2RlQmxvY2spLCAiPiA8Z2MjIiwgbWxhbVRpbWUs
ICI+IHZpc2l0b3IgIiwgdmlzaXRvci5jb2RlTmFtZSgpLCAiIHwgY29kZUJsb2NrLT5zaG91bGRW
aXNpdFN0cm9uZ2x5KGxvY2tlciwgdmlzaXRvcikgIiwgY29kZUJsb2NrLT5zaG91bGRWaXNpdFN0
cm9uZ2x5KGxvY2tlciwgdmlzaXRvciksICIgfCBzaG91bGRKZXR0aXNvbkR1ZVRvT2xkQWdlICIs
IGNvZGVCbG9jay0+c2hvdWxkSmV0dGlzb25EdWVUb09sZEFnZShsb2NrZXIsIHZpc2l0b3IpLCAi
IHwgSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUICIsIEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChj
b2RlQmxvY2stPmppdFR5cGUoKSksICIgfCB2aXNpdG9yLmlzTWFya2VkKGNiKSAiLCB2aXNpdG9y
LmlzTWFya2VkKGNvZGVCbG9jayksICIgfCBjb2RlQmxvY2stPmppdFR5cGUoKSAiLCBjb2RlQmxv
Y2stPmppdFR5cGUoKSwgIiB8IHRpbWVTaW5jZUNyZWF0aW9uKCkgIiwgdGltZVNpbmNlQ3JlYXRp
b24sICIgPCB0aW1lVG9MaXZlKGppdFR5cGUoKSAiLCB0aW1lVG9MaXZlMSwgIiA9PiAiLCAodGlt
ZVNpbmNlQ3JlYXRpb24gPCB0aW1lVG9MaXZlMSkpOworICAgIH0KKyAgICBpZiAoY29kZUJsb2Nr
LT5zaG91bGRWaXNpdFN0cm9uZ2x5KGxvY2tlciwgdmlzaXRvcikpCiAgICAgICAgIHZpc2l0b3Iu
YXBwZW5kVW5iYXJyaWVyZWQoY29kZUJsb2NrKTsKICAgICAKLSAgICBpZiAoIXZtLmhlYXAuaXNN
YXJrZWQoY29kZUJsb2NrKSkKKy8vICAgIGlmICghdm0uaGVhcC5pc01hcmtlZChjb2RlQmxvY2sp
KSAvLyBtbGFtCisgICAgaWYgKCF2aXNpdG9yLmlzTWFya2VkKGNvZGVCbG9jaykpCiAgICAgICAg
IHZtLmV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2VzV2l0aEZpbmFsaXplcnMuYWRkKGVkZ2UpOwog
ICAgIAogICAgIGlmIChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoY29kZUJsb2NrLT5qaXRUeXBl
KCkpKSB7CkBAIC0xMTQsMTUgKzE2MCwxOCBAQCB2b2lkIEV4ZWN1dGFibGVUb0NvZGVCbG9ja0Vk
Z2U6OnZpc2l0Q2hpCiAgICAgLy8gd2lsbCBrZWVwIGZpeHBvaW50aW5nIHVudGlsIHRoZSBlbmQu
CiAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZChjb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KTsKICAgICB2bS5leGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlc1dpdGhDb25zdHJhaW50cy5hZGQo
ZWRnZSk7Ci0gICAgZWRnZS0+cnVuQ29uc3RyYWludChsb2NrZXIsIHZtLCB2aXNpdG9yKTsKKyAg
ICBpZiAobWxhbVZlcmJvc2UpIGRhdGFMb2dMbigiICAgIG1sYW0gRXhlY3V0YWJsZVRvQ29kZUJs
b2NrRWRnZTwiLCBSYXdQb2ludGVyKGNlbGwpLCAiPjo6dmlzaXRDaGlsZHJlbkltcGw6IFNURVAg
MjogQ29kZUJsb2NrPCIsIFJhd1BvaW50ZXIoY29kZUJsb2NrKSwgIj4gPGdjIyIsIG1sYW1UaW1l
LCAiPiB2aXNpdG9yICIsIHZpc2l0b3IuY29kZU5hbWUoKSk7CisgICAgZWRnZS0+cnVuQ29uc3Ry
YWludDEwMjMobG9ja2VyLCB2bSwgdmlzaXRvcik7IC8vIG1sYW0gRklYTUUKIH0KIAotdm9pZCBF
eGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzKEpTQ2VsbCog
Y2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCitERUZJTkVfVklTSVRfQ0hJTERSRU4oRXhlY3V0
YWJsZVRvQ29kZUJsb2NrRWRnZSk7CisKK3ZvaWQgRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZTo6
dmlzaXRPdXRwdXRDb25zdHJhaW50cyhKU0NlbGwqIGNlbGwsIEFic3RyYWN0U2xvdFZpc2l0b3Im
IHZpc2l0b3IpCiB7CiAgICAgVk0mIHZtID0gdmlzaXRvci52bSgpOwogICAgIEV4ZWN1dGFibGVU
b0NvZGVCbG9ja0VkZ2UqIGVkZ2UgPSBqc0Nhc3Q8RXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZSo+
KGNlbGwpOwogICAgIAotICAgIGVkZ2UtPnJ1bkNvbnN0cmFpbnQoTm9Mb2NraW5nTmVjZXNzYXJ5
LCB2bSwgdmlzaXRvcik7CisgICAgZWRnZS0+cnVuQ29uc3RyYWludDEwMjMoTm9Mb2NraW5nTmVj
ZXNzYXJ5LCB2bSwgdmlzaXRvcik7CiB9CiAKIHZvaWQgRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRn
ZTo6ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoVk0mIHZtKQpAQCAtMTg2LDE2ICsyMzUsMjUgQEAg
RXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZTo6RXhlY3V0YWJsZVRvQwogewogfQogCi12b2lkIEV4
ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2U6OnJ1bkNvbnN0cmFpbnQoY29uc3QgQ29uY3VycmVudEpT
TG9ja2VyJiBsb2NrZXIsIFZNJiB2bSwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3RlbXBsYXRl
PHR5cGVuYW1lIFZpc2l0b3I+CisvL3ZvaWQgRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZTo6cnVu
Q29uc3RyYWludDEoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiBsb2NrZXIsIFZNJiB2bSwgVmlz
aXRvciYgdmlzaXRvcikKK3ZvaWQgRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZTo6cnVuQ29uc3Ry
YWludDEwMjMoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiBsb2NrZXIsIFZNJiB2bSwgQWJzdHJh
Y3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IG1f
Y29kZUJsb2NrLmdldCgpOwogICAgIAotICAgIGNvZGVCbG9jay0+cHJvcGFnYXRlVHJhbnNpdGlv
bnMobG9ja2VyLCB2aXNpdG9yKTsKKyAgICBpZiAobWxhbVZlcmJvc2UpIGRhdGFMb2dMbigiICAg
IG1sYW0gRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZTwiLCBSYXdQb2ludGVyKHRoaXMpLCAiPjo6
cnVuQ29uc3RyYWludDE6IFNURVAgMTogQ29kZUJsb2NrPCIsIFJhd1BvaW50ZXIoY29kZUJsb2Nr
KSwgIj4gPGdjIyIsIG1sYW1UaW1lLCAiPiB2aXNpdG9yICIsIHZpc2l0b3IuY29kZU5hbWUoKSk7
CisgICAgY29kZUJsb2NrLT5wcm9wYWdhdGVUcmFuc2l0aW9uczEwNDUobG9ja2VyLCB2aXNpdG9y
KTsKKyAgICBpZiAobWxhbVZlcmJvc2UpIGRhdGFMb2dMbigiICAgIG1sYW0gRXhlY3V0YWJsZVRv
Q29kZUJsb2NrRWRnZTwiLCBSYXdQb2ludGVyKHRoaXMpLCAiPjo6cnVuQ29uc3RyYWludDE6IFNU
RVAgMjogQ29kZUJsb2NrPCIsIFJhd1BvaW50ZXIoY29kZUJsb2NrKSwgIj4gPGdjIyIsIG1sYW1U
aW1lLCAiPiB2aXNpdG9yICIsIHZpc2l0b3IuY29kZU5hbWUoKSk7CiAgICAgY29kZUJsb2NrLT5k
ZXRlcm1pbmVMaXZlbmVzcyhsb2NrZXIsIHZpc2l0b3IpOwotICAgIAotICAgIGlmICh2bS5oZWFw
LmlzTWFya2VkKGNvZGVCbG9jaykpCisgICAgaWYgKG1sYW1WZXJib3NlKSBkYXRhTG9nTG4oIiAg
ICBtbGFtIEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2U8IiwgUmF3UG9pbnRlcih0aGlzKSwgIj46
OnJ1bkNvbnN0cmFpbnQxOiBTVEVQIDM6IENvZGVCbG9jazwiLCBSYXdQb2ludGVyKGNvZGVCbG9j
ayksICI+IDxnYyMiLCBtbGFtVGltZSwgIj4gdmlzaXRvciAiLCB2aXNpdG9yLmNvZGVOYW1lKCkp
OworCisgICAgaWYgKHZpc2l0b3IuaXNNYXJrZWQoY29kZUJsb2NrKSkgeworICAgICAgICBpZiAo
bWxhbVZlcmJvc2UpIGRhdGFMb2dMbigiICAgIG1sYW0gRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRn
ZTwiLCBSYXdQb2ludGVyKHRoaXMpLCAiPjo6cnVuQ29uc3RyYWludDE6IFNURVAgNDogQ29kZUJs
b2NrPCIsIFJhd1BvaW50ZXIoY29kZUJsb2NrKSwgIj4gPGdjIyIsIG1sYW1UaW1lLCAiPiB2aXNp
dG9yICIsIHZpc2l0b3IuY29kZU5hbWUoKSk7CiAgICAgICAgIHZtLmV4ZWN1dGFibGVUb0NvZGVC
bG9ja0VkZ2VzV2l0aENvbnN0cmFpbnRzLnJlbW92ZSh0aGlzKTsKKyAgICB9CiB9CiAKLX0gLy8g
bmFtZXNwYWNlIEpTQworLy90ZW1wbGF0ZSB2b2lkIEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2U6
OnJ1bkNvbnN0cmFpbnQxKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIFZNJiwgU2xvdFZpc2l0
b3ImKTsKKy8vdGVtcGxhdGUgdm9pZCBFeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlOjpydW5Db25z
dHJhaW50MShjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBWTSYsIEFic3RyYWN0U2xvdFZpc2l0
b3ImKTsKIAorfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlLmgJKHJl
dmlzaW9uIDI3MjI5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGVjdXRh
YmxlVG9Db2RlQmxvY2tFZGdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01Myw5ICs1MywxMCBAQCBw
dWJsaWM6CiAgICAgREVDTEFSRV9JTkZPOwogCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2soKSBj
b25zdCB7IHJldHVybiBtX2NvZGVCbG9jay5nZXQoKTsgfQotICAgIAotICAgIHN0YXRpYyB2b2lk
IHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKLSAgICBzdGF0aWMgdm9pZCB2
aXNpdE91dHB1dENvbnN0cmFpbnRzKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisKKyAgICBERUNM
QVJFX1ZJU0lUX0NISUxEUkVOOworLy8gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbjEoSlND
ZWxsKiwgQWJzdHJhY3RTbG90VmlzaXRvciYpOworICAgIHN0YXRpYyB2b2lkIHZpc2l0T3V0cHV0
Q29uc3RyYWludHMoSlNDZWxsKiwgQWJzdHJhY3RTbG90VmlzaXRvciYpOwogICAgIHZvaWQgZmlu
YWxpemVVbmNvbmRpdGlvbmFsbHkoVk0mKTsKICAgICAKICAgICBzdGF0aWMgQ29kZUJsb2NrKiB1
bndyYXAoRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZSogZWRnZSkKQEAgLTgxLDkgKzgyLDExIEBA
IHByaXZhdGU6CiAgICAgdm9pZCBhY3RpdmF0ZSgpOwogICAgIHZvaWQgZGVhY3RpdmF0ZSgpOwog
ICAgIGJvb2wgaXNBY3RpdmUoKSBjb25zdDsKLSAgICAKLSAgICB2b2lkIHJ1bkNvbnN0cmFpbnQo
Y29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgVk0mLCBTbG90VmlzaXRvciYpOwotICAgIAorCisv
LyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgorLy8gICAgdm9pZCBydW5Db25zdHJhaW50
MShjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBWTSYsIFZpc2l0b3ImKTsKKyAgICB2b2lkIHJ1
bkNvbnN0cmFpbnQxMDIzKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIFZNJiwgQWJzdHJhY3RT
bG90VmlzaXRvciYpOworCiAgICAgV3JpdGVCYXJyaWVyPENvZGVCbG9jaz4gbV9jb2RlQmxvY2s7
CiB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFZhcmlh
bnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRC
eUlkVmFyaWFudC5jcHAJKHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9HZXRCeUlkVmFyaWFudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1NiwxNiAr
MTU2LDI2IEBAIGJvb2wgR2V0QnlJZFZhcmlhbnQ6OmF0dGVtcHRUb01lcmdlKGNvbnMKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBHZXRCeUlkVmFyaWFudDo6dmlzaXRBZ2dyZWdhdGUoU2xv
dFZpc2l0b3ImIHZpc2l0b3IpCisvL3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+CisvL3ZvaWQg
R2V0QnlJZFZhcmlhbnQ6OnZpc2l0QWdncmVnYXRlKFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIEdl
dEJ5SWRWYXJpYW50Ojp2aXNpdEFnZ3JlZ2F0ZTEoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRv
cikKIHsKLSAgICBtX2lkZW50aWZpZXIudmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7CisgICAgbV9p
ZGVudGlmaWVyLnZpc2l0QWdncmVnYXRlMSh2aXNpdG9yKTsKIH0KIAotdm9pZCBHZXRCeUlkVmFy
aWFudDo6bWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3RlbXBsYXRlIHZvaWQg
R2V0QnlJZFZhcmlhbnQ6OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJik7CisvL3RlbXBsYXRl
IHZvaWQgR2V0QnlJZFZhcmlhbnQ6OnZpc2l0QWdncmVnYXRlKFZlcmlmaWVyU2xvdFZpc2l0b3Im
KTsKKworLy90ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgorLy92b2lkIEdldEJ5SWRWYXJpYW50
OjptYXJrSWZDaGVhcChWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBHZXRCeUlkVmFyaWFudDo6bWFy
a0lmQ2hlYXAxKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7Ci0gICAgbV9zdHJ1Y3R1
cmVTZXQubWFya0lmQ2hlYXAodmlzaXRvcik7CisgICAgbV9zdHJ1Y3R1cmVTZXQubWFya0lmQ2hl
YXAxKHZpc2l0b3IpOwogfQogCisvL3RlbXBsYXRlIHZvaWQgR2V0QnlJZFZhcmlhbnQ6Om1hcmtJ
ZkNoZWFwKFNsb3RWaXNpdG9yJik7CisvL3RlbXBsYXRlIHZvaWQgR2V0QnlJZFZhcmlhbnQ6Om1h
cmtJZkNoZWFwKFZlcmlmaWVyU2xvdFZpc2l0b3ImKTsKKwogYm9vbCBHZXRCeUlkVmFyaWFudDo6
ZmluYWxpemUoVk0mIHZtKQogewogICAgIGlmICghbV9zdHJ1Y3R1cmVTZXQuaXNTdGlsbEFsaXZl
KHZtKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkVmFyaWFu
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlk
VmFyaWFudC5oCShyZXZpc2lvbiAyNzIyOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvR2V0QnlJZFZhcmlhbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNzcsOCArNzcsMTAgQEAg
cHVibGljOgogCiAgICAgYm9vbCBhdHRlbXB0VG9NZXJnZShjb25zdCBHZXRCeUlkVmFyaWFudCYg
b3RoZXIpOwogICAgIAotICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImKTsKLSAg
ICB2b2lkIG1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJik7CisvLyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBWaXNpdG9yPiB2b2lkIHZpc2l0QWdncmVnYXRlKFZpc2l0b3ImKTsKKy8vICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgbWFya0lmQ2hlYXAoVmlzaXRvciYpOworICAgIHZvaWQg
dmlzaXRBZ2dyZWdhdGUxKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKKyAgICB2b2lkIG1hcmtJZkNo
ZWFwMShBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAgICAgYm9vbCBmaW5hbGl6ZShWTSYpOwogICAg
IAogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5U3RhdHVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlTdGF0dXMuY3BwCShyZXZpc2lvbiAyNzIyOTcp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlTdGF0dXMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC01MzAsMjAgKzUzMCwzMSBAQCB2b2lkIEdldEJ5U3RhdHVzOjpmaWx0ZXIo
Y29uc3QgU3RydWN0dXJlCiAgICAgICAgIG1fc3RhdGUgPSBOb0luZm9ybWF0aW9uOwogfQogCi12
b2lkIEdldEJ5U3RhdHVzOjp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYgdmlzaXRvcikKKy8v
dGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KKy8vdm9pZCBHZXRCeVN0YXR1czo6dmlzaXRBZ2dy
ZWdhdGUoVmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgR2V0QnlTdGF0dXM6OnZpc2l0QWdncmVnYXRl
MShBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGlmIChpc01vZHVsZU5hbWVz
cGFjZSgpKQotICAgICAgICBtX21vZHVsZU5hbWVzcGFjZURhdGEtPm1faWRlbnRpZmllci52aXNp
dEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKKyAgICAgICAgbV9tb2R1bGVOYW1lc3BhY2VEYXRhLT5tX2lk
ZW50aWZpZXIudmlzaXRBZ2dyZWdhdGUxKHZpc2l0b3IpOwogICAgIGZvciAoR2V0QnlJZFZhcmlh
bnQmIHZhcmlhbnQgOiBtX3ZhcmlhbnRzKQotICAgICAgICB2YXJpYW50LnZpc2l0QWdncmVnYXRl
KHZpc2l0b3IpOworICAgICAgICB2YXJpYW50LnZpc2l0QWdncmVnYXRlMSh2aXNpdG9yKTsKIH0K
IAotdm9pZCBHZXRCeVN0YXR1czo6bWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisv
L3RlbXBsYXRlIHZvaWQgR2V0QnlTdGF0dXM6OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJik7
CisvL3RlbXBsYXRlIHZvaWQgR2V0QnlTdGF0dXM6OnZpc2l0QWdncmVnYXRlKFZlcmlmaWVyU2xv
dFZpc2l0b3ImKTsKKworLy90ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgorLy92b2lkIEdldEJ5
U3RhdHVzOjptYXJrSWZDaGVhcChWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBHZXRCeVN0YXR1czo6
bWFya0lmQ2hlYXAxKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgZm9yIChH
ZXRCeUlkVmFyaWFudCYgdmFyaWFudCA6IG1fdmFyaWFudHMpCi0gICAgICAgIHZhcmlhbnQubWFy
a0lmQ2hlYXAodmlzaXRvcik7CisgICAgICAgIHZhcmlhbnQubWFya0lmQ2hlYXAxKHZpc2l0b3Ip
OwogfQogCisvL3RlbXBsYXRlIHZvaWQgR2V0QnlTdGF0dXM6Om1hcmtJZkNoZWFwKFNsb3RWaXNp
dG9yJik7CisvL3RlbXBsYXRlIHZvaWQgR2V0QnlTdGF0dXM6Om1hcmtJZkNoZWFwKFZlcmlmaWVy
U2xvdFZpc2l0b3ImKTsKKworCiBib29sIEdldEJ5U3RhdHVzOjpmaW5hbGl6ZShWTSYgdm0pCiB7
CiAgICAgZm9yIChHZXRCeUlkVmFyaWFudCYgdmFyaWFudCA6IG1fdmFyaWFudHMpIHsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeVN0YXR1cy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeVN0YXR1cy5oCShyZXZpc2lv
biAyNzIyOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlTdGF0dXMu
aAkod29ya2luZyBjb3B5KQpAQCAtMTE4LDggKzExOCwxMCBAQCBwdWJsaWM6CiAgICAgSlNNb2R1
bGVFbnZpcm9ubWVudCogbW9kdWxlRW52aXJvbm1lbnQoKSBjb25zdCB7IHJldHVybiBtX21vZHVs
ZU5hbWVzcGFjZURhdGEtPm1fbW9kdWxlRW52aXJvbm1lbnQ7IH0KICAgICBTY29wZU9mZnNldCBz
Y29wZU9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fbW9kdWxlTmFtZXNwYWNlRGF0YS0+bV9zY29w
ZU9mZnNldDsgfQogICAgIAotICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImKTsK
LSAgICB2b2lkIG1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJik7CisvLyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBWaXNpdG9yPiB2b2lkIHZpc2l0QWdncmVnYXRlKFZpc2l0b3ImKTsKKy8vICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgbWFya0lmQ2hlYXAoVmlzaXRvciYpOworICAgIHZv
aWQgdmlzaXRBZ2dyZWdhdGUxKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKKyAgICB2b2lkIG1hcmtJ
ZkNoZWFwMShBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAgICAgYm9vbCBmaW5hbGl6ZShWTSYpOyAv
LyBSZXR1cm4gdHJ1ZSBpZiB0aGlzIGdldHMgdG8gbGl2ZS4KIAogICAgIGJvb2wgYXBwZW5kVmFy
aWFudChjb25zdCBHZXRCeUlkVmFyaWFudCYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0luQnlJZFN0YXR1cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0luQnlJZFN0YXR1cy5jcHAJKHJldmlzaW9uIDI3MjI5NykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbkJ5SWRTdGF0dXMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yNTEsMTIgKzI1MSwxNyBAQCB2b2lkIEluQnlJZFN0YXR1czo6ZmlsdGVyKGNvbnN0
IFN0cnVjdHVyCiAgICAgICAgIG1fc3RhdGUgPSBOb0luZm9ybWF0aW9uOwogfQogCi12b2lkIElu
QnlJZFN0YXR1czo6bWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3RlbXBsYXRl
PHR5cGVuYW1lIFZpc2l0b3I+CisvL3ZvaWQgSW5CeUlkU3RhdHVzOjptYXJrSWZDaGVhcChWaXNp
dG9yJiB2aXNpdG9yKQordm9pZCBJbkJ5SWRTdGF0dXM6Om1hcmtJZkNoZWFwMShBYnN0cmFjdFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGZvciAoSW5CeUlkVmFyaWFudCYgdmFyaWFudCA6
IG1fdmFyaWFudHMpCi0gICAgICAgIHZhcmlhbnQubWFya0lmQ2hlYXAodmlzaXRvcik7CisgICAg
ICAgIHZhcmlhbnQubWFya0lmQ2hlYXAxKHZpc2l0b3IpOwogfQogCisvL3RlbXBsYXRlIHZvaWQg
SW5CeUlkU3RhdHVzOjptYXJrSWZDaGVhcChTbG90VmlzaXRvciYpOworLy90ZW1wbGF0ZSB2b2lk
IEluQnlJZFN0YXR1czo6bWFya0lmQ2hlYXAoVmVyaWZpZXJTbG90VmlzaXRvciYpOworCiBib29s
IEluQnlJZFN0YXR1czo6ZmluYWxpemUoVk0mIHZtKQogewogICAgIGZvciAoSW5CeUlkVmFyaWFu
dCYgdmFyaWFudCA6IG1fdmFyaWFudHMpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9JbkJ5SWRTdGF0dXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvSW5CeUlkU3RhdHVzLmgJKHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbkJ5SWRTdGF0dXMuaAkod29ya2luZyBjb3B5KQpAQCAt
MTA2LDcgKzEwNiw4IEBAIHB1YmxpYzoKICAgICAvLyBBdHRlbXB0cyB0byByZWR1Y2UgdGhlIHNl
dCBvZiB2YXJpYW50cyB0byBmaXQgdGhlIGdpdmVuIHN0cnVjdHVyZSBzZXQuIFRoaXMgbWF5IGJl
IGFwcHJveGltYXRlLgogICAgIHZvaWQgZmlsdGVyKGNvbnN0IFN0cnVjdHVyZVNldCYpOwogICAg
IAotICAgIHZvaWQgbWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImKTsKKy8vICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFZpc2l0b3I+IHZvaWQgbWFya0lmQ2hlYXAoVmlzaXRvciYpOworICAgIHZvaWQgbWFy
a0lmQ2hlYXAxKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKICAgICBib29sIGZpbmFsaXplKFZNJik7
CiAKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9JbkJ5SWRWYXJpYW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5CeUlkVmFyaWFudC5jcHAJKHJldmlzaW9uIDI3
MjI5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbkJ5SWRWYXJpYW50LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNjQsMTEgKzY0LDE2IEBAIGJvb2wgSW5CeUlkVmFyaWFudDo6
YXR0ZW1wdFRvTWVyZ2UoY29uc3QKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBJbkJ5SWRW
YXJpYW50OjptYXJrSWZDaGVhcChTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vdGVtcGxhdGU8dHlw
ZW5hbWUgVmlzaXRvcj4KKy8vdm9pZCBJbkJ5SWRWYXJpYW50OjptYXJrSWZDaGVhcChWaXNpdG9y
JiB2aXNpdG9yKQordm9pZCBJbkJ5SWRWYXJpYW50OjptYXJrSWZDaGVhcDEoQWJzdHJhY3RTbG90
VmlzaXRvciYgdmlzaXRvcikKIHsKLSAgICBtX3N0cnVjdHVyZVNldC5tYXJrSWZDaGVhcCh2aXNp
dG9yKTsKKyAgICBtX3N0cnVjdHVyZVNldC5tYXJrSWZDaGVhcDEodmlzaXRvcik7CiB9CiAKKy8v
dGVtcGxhdGUgdm9pZCBJbkJ5SWRWYXJpYW50OjptYXJrSWZDaGVhcChTbG90VmlzaXRvciYpOwor
Ly90ZW1wbGF0ZSB2b2lkIEluQnlJZFZhcmlhbnQ6Om1hcmtJZkNoZWFwKFZlcmlmaWVyU2xvdFZp
c2l0b3ImKTsKKwogYm9vbCBJbkJ5SWRWYXJpYW50OjpmaW5hbGl6ZShWTSYgdm0pCiB7CiAgICAg
aWYgKCFtX3N0cnVjdHVyZVNldC5pc1N0aWxsQWxpdmUodm0pKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0luQnlJZFZhcmlhbnQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5CeUlkVmFyaWFudC5oCShyZXZpc2lvbiAyNzIyOTcp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5CeUlkVmFyaWFudC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC01Nyw3ICs1Nyw4IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgYXR0ZW1wdFRv
TWVyZ2UoY29uc3QgSW5CeUlkVmFyaWFudCYgb3RoZXIpOwogICAgIAotICAgIHZvaWQgbWFya0lm
Q2hlYXAoU2xvdFZpc2l0b3ImKTsKKy8vICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZv
aWQgbWFya0lmQ2hlYXAoVmlzaXRvciYpOworICAgIHZvaWQgbWFya0lmQ2hlYXAxKEFic3RyYWN0
U2xvdFZpc2l0b3ImKTsKICAgICBib29sIGZpbmFsaXplKFZNJik7CiAKICAgICB2b2lkIGR1bXAo
UHJpbnRTdHJlYW0mKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9JbnRlcm5hbEZ1bmN0aW9uQWxsb2NhdGlvblByb2ZpbGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW50ZXJuYWxGdW5jdGlvbkFsbG9jYXRpb25Qcm9m
aWxlLmgJKHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9JbnRlcm5hbEZ1bmN0aW9uQWxsb2NhdGlvblByb2ZpbGUuaAkod29ya2luZyBjb3B5KQpAQCAt
MzksNyArMzksNyBAQCBwdWJsaWM6CiAgICAgU3RydWN0dXJlKiBjcmVhdGVBbGxvY2F0aW9uU3Ry
dWN0dXJlRnJvbUJhc2UoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTQ2VsbCogb3duZXIsIEpTT2Jq
ZWN0KiBwcm90b3R5cGUsIFN0cnVjdHVyZSogYmFzZSk7CiAKICAgICB2b2lkIGNsZWFyKCkgeyBt
X3N0cnVjdHVyZS5jbGVhcigpOyB9Ci0gICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRv
ciYgdmlzaXRvcikgeyB2aXNpdG9yLmFwcGVuZChtX3N0cnVjdHVyZSk7IH0KKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIHZpc2l0QWdncmVnYXRlKFZpc2l0b3ImIHZpc2l0b3Ip
IHsgdmlzaXRvci5hcHBlbmQobV9zdHJ1Y3R1cmUpOyB9CiAKIHByaXZhdGU6CiAgICAgV3JpdGVC
YXJyaWVyPFN0cnVjdHVyZT4gbV9zdHJ1Y3R1cmU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUuaAkocmV2
aXNpb24gMjcyMjk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09iamVjdEFs
bG9jYXRpb25Qcm9maWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTY0LDcgKzY0LDggQEAgcHJvdGVj
dGVkOgogICAgICAgICBBU1NFUlQoaXNOdWxsKCkpOwogICAgIH0KIAotICAgIHZvaWQgdmlzaXRB
Z2dyZWdhdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlz
aXRvcj4KKyAgICB2b2lkIHZpc2l0QWdncmVnYXRlKFZpc2l0b3ImIHZpc2l0b3IpCiAgICAgewog
ICAgICAgICB2aXNpdG9yLmFwcGVuZChtX3N0cnVjdHVyZSk7CiAgICAgfQpAQCAtMTEwLDcgKzEx
MSw4IEBAIHB1YmxpYzoKICAgICAgICAgQVNTRVJUKGlzTnVsbCgpKTsKICAgICB9CiAKLSAgICB2
b2lkIHZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFZpc2l0b3I+CisgICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShWaXNpdG9yJiB2aXNpdG9y
KQogICAgIHsKICAgICAgICAgQmFzZTo6dmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7CiAgICAgICAg
IHZpc2l0b3IuYXBwZW5kKG1fcHJvdG90eXBlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAkocmV2aXNpb24gMjcy
Mjk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNz
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzU4LDcgKzM1OCw5IEBAIGJvb2wgUG9seW1vcnBoaWNB
Y2Nlc3M6OnZpc2l0V2VhayhWTSYgdm0KICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBQb2x5
bW9ycGhpY0FjY2Vzczo6cHJvcGFnYXRlVHJhbnNpdGlvbnMoU2xvdFZpc2l0b3ImIHZpc2l0b3Ip
IGNvbnN0CisvL3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+CisvL2Jvb2wgUG9seW1vcnBoaWNB
Y2Nlc3M6OnByb3BhZ2F0ZVRyYW5zaXRpb25zMTAoVmlzaXRvciYgdmlzaXRvcikgY29uc3QKK2Jv
b2wgUG9seW1vcnBoaWNBY2Nlc3M6OnByb3BhZ2F0ZVRyYW5zaXRpb25zMTAoQWJzdHJhY3RTbG90
VmlzaXRvciYgdmlzaXRvcikgY29uc3QKIHsKICAgICBib29sIHJlc3VsdCA9IHRydWU7CiAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemUoKTsgKytpKQpAQCAtMzY2LDEyICszNjgsMjEg
QEAgYm9vbCBQb2x5bW9ycGhpY0FjY2Vzczo6cHJvcGFnYXRlVHJhbnNpdAogICAgIHJldHVybiBy
ZXN1bHQ7CiB9CiAKLXZvaWQgUG9seW1vcnBoaWNBY2Nlc3M6OnZpc2l0QWdncmVnYXRlKFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQorLy90ZW1wbGF0ZTw+IGJvb2wgUG9seW1vcnBoaWNBY2Nlc3M6OnBy
b3BhZ2F0ZVRyYW5zaXRpb25zMTAoU2xvdFZpc2l0b3ImKSBjb25zdDsKKy8vdGVtcGxhdGU8PiBi
b29sIFBvbHltb3JwaGljQWNjZXNzOjpwcm9wYWdhdGVUcmFuc2l0aW9uczEwKEFic3RyYWN0U2xv
dFZpc2l0b3ImKSBjb25zdDsKKworCisvL3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+CisvL3Zv
aWQgUG9seW1vcnBoaWNBY2Nlc3M6OnZpc2l0QWdncmVnYXRlKFZpc2l0b3ImIHZpc2l0b3IpCit2
b2lkIFBvbHltb3JwaGljQWNjZXNzOjp2aXNpdEFnZ3JlZ2F0ZTEoQWJzdHJhY3RTbG90VmlzaXRv
ciYgdmlzaXRvcikKIHsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZSgpOyArK2kp
Ci0gICAgICAgIGF0KGkpLnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOworICAgICAgICBhdChpKS52
aXNpdEFnZ3JlZ2F0ZTEodmlzaXRvcik7CiB9CiAKKy8vdGVtcGxhdGUgdm9pZCBQb2x5bW9ycGhp
Y0FjY2Vzczo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImKTsKKy8vdGVtcGxhdGUgdm9pZCBQ
b2x5bW9ycGhpY0FjY2Vzczo6dmlzaXRBZ2dyZWdhdGUoVmVyaWZpZXJTbG90VmlzaXRvciYpOwor
CiB2b2lkIFBvbHltb3JwaGljQWNjZXNzOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiB7
CiAgICAgb3V0LnByaW50KFJhd1BvaW50ZXIodGhpcyksICI6WyIpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmgJKHJldmlz
aW9uIDI3MjI5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhp
Y0FjY2Vzcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNTIsMTQgKzE1MiwxNiBAQCBwdWJsaWM6CiAg
ICAgY29uc3QgQWNjZXNzQ2FzZSYgYXQodW5zaWduZWQgaSkgY29uc3QgeyByZXR1cm4gKm1fbGlz
dFtpXTsgfQogICAgIGNvbnN0IEFjY2Vzc0Nhc2UmIG9wZXJhdG9yW10odW5zaWduZWQgaSkgY29u
c3QgeyByZXR1cm4gKm1fbGlzdFtpXTsgfQogCi0gICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShTbG90
VmlzaXRvciYpOworLy8gICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCB2aXNpdEFn
Z3JlZ2F0ZShWaXNpdG9yJik7CisgICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZTEoQWJzdHJhY3RTbG90
VmlzaXRvciYpOwogCiAgICAgLy8gSWYgdGhpcyByZXR1cm5zIGZhbHNlIHRoZW4gd2UgYXJlIHJl
cXVlc3RpbmcgYSByZXNldCBvZiB0aGUgb3duaW5nIFN0cnVjdHVyZVN0dWJJbmZvLgogICAgIGJv
b2wgdmlzaXRXZWFrKFZNJikgY29uc3Q7CiAgICAgCiAgICAgLy8gVGhpcyByZXR1cm5zIHRydWUg
aWYgaXQgaGFzIG1hcmtlZCBldmVyeXRoaW5nIGl0IHdpbGwgZXZlciBtYXJrZWQuIFRoaXMgY2Fu
IGJlIHVzZWQgYXMgYW4KICAgICAvLyBvcHRpbWl6YXRpb24gdG8gdGhlbiBhdm9pZCBjYWxsaW5n
IHRoaXMgbWV0aG9kIGFnYWluIGR1cmluZyB0aGUgZml4cG9pbnQuCi0gICAgYm9vbCBwcm9wYWdh
dGVUcmFuc2l0aW9ucyhTbG90VmlzaXRvciYpIGNvbnN0OworLy8gICAgdGVtcGxhdGU8dHlwZW5h
bWUgVmlzaXRvcj4gYm9vbCBwcm9wYWdhdGVUcmFuc2l0aW9uczEwKFZpc2l0b3ImKSBjb25zdDsK
KyAgICBib29sIHByb3BhZ2F0ZVRyYW5zaXRpb25zMTAoQWJzdHJhY3RTbG90VmlzaXRvciYpIGNv
bnN0OwogCiAgICAgdm9pZCBhYm91dFRvRGllKCk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5jcHAJKHJldmlzaW9uIDI3MjI5NykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzk2LDEyICszOTYsMTcgQEAgUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3Rh
dHVzOjpzbG93VmVyc2lvbgogICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKG1ha2VzQ2FsbHMoKSA/
IE1ha2VzQ2FsbHMgOiBUYWtlc1Nsb3dQYXRoKTsKIH0KIAotdm9pZCBQdXRCeUlkU3RhdHVzOjpt
YXJrSWZDaGVhcChTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vdGVtcGxhdGU8dHlwZW5hbWUgVmlz
aXRvcj4KKy8vdm9pZCBQdXRCeUlkU3RhdHVzOjptYXJrSWZDaGVhcChWaXNpdG9yJiB2aXNpdG9y
KQordm9pZCBQdXRCeUlkU3RhdHVzOjptYXJrSWZDaGVhcDEoQWJzdHJhY3RTbG90VmlzaXRvciYg
dmlzaXRvcikKIHsKICAgICBmb3IgKFB1dEJ5SWRWYXJpYW50JiB2YXJpYW50IDogbV92YXJpYW50
cykKLSAgICAgICAgdmFyaWFudC5tYXJrSWZDaGVhcCh2aXNpdG9yKTsKKyAgICAgICAgdmFyaWFu
dC5tYXJrSWZDaGVhcDEodmlzaXRvcik7CiB9CiAKKy8vdGVtcGxhdGUgdm9pZCBQdXRCeUlkU3Rh
dHVzOjptYXJrSWZDaGVhcChTbG90VmlzaXRvciYpOworLy90ZW1wbGF0ZSB2b2lkIFB1dEJ5SWRT
dGF0dXM6Om1hcmtJZkNoZWFwKFZlcmlmaWVyU2xvdFZpc2l0b3ImKTsKKwogYm9vbCBQdXRCeUlk
U3RhdHVzOjpmaW5hbGl6ZShWTSYgdm0pCiB7CiAgICAgZm9yIChQdXRCeUlkVmFyaWFudCYgdmFy
aWFudCA6IG1fdmFyaWFudHMpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9QdXRCeUlkU3RhdHVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1B1dEJ5SWRTdGF0dXMuaAkocmV2aXNpb24gMjcyMjk3KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuaAkod29ya2luZyBjb3B5KQpAQCAtMTE3
LDcgKzExNyw4IEBAIHB1YmxpYzoKICAgICBjb25zdCBQdXRCeUlkVmFyaWFudCYgYXQoc2l6ZV90
IGluZGV4KSBjb25zdCB7IHJldHVybiBtX3ZhcmlhbnRzW2luZGV4XTsgfQogICAgIGNvbnN0IFB1
dEJ5SWRWYXJpYW50JiBvcGVyYXRvcltdKHNpemVfdCBpbmRleCkgY29uc3QgeyByZXR1cm4gYXQo
aW5kZXgpOyB9CiAgICAgCi0gICAgdm9pZCBtYXJrSWZDaGVhcChTbG90VmlzaXRvciYpOworLy8g
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCBtYXJrSWZDaGVhcChWaXNpdG9yJik7
CisgICAgdm9pZCBtYXJrSWZDaGVhcDEoQWJzdHJhY3RTbG90VmlzaXRvciYpOwogICAgIGJvb2wg
ZmluYWxpemUoVk0mKTsKICAgICAKICAgICB2b2lkIG1lcmdlKGNvbnN0IFB1dEJ5SWRTdGF0dXMm
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkVmFyaWFudC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRW
YXJpYW50LmNwcAkocmV2aXNpb24gMjcyMjk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYyLDEzICsyNjIs
MTggQEAgYm9vbCBQdXRCeUlkVmFyaWFudDo6YXR0ZW1wdFRvTWVyZ2VUcmFucwogICAgIHJldHVy
biB0cnVlOwogfQogCi12b2lkIFB1dEJ5SWRWYXJpYW50OjptYXJrSWZDaGVhcChTbG90VmlzaXRv
ciYgdmlzaXRvcikKKy8vdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KKy8vdm9pZCBQdXRCeUlk
VmFyaWFudDo6bWFya0lmQ2hlYXAoVmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgUHV0QnlJZFZhcmlh
bnQ6Om1hcmtJZkNoZWFwMShBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewotICAgIG1f
b2xkU3RydWN0dXJlLm1hcmtJZkNoZWFwKHZpc2l0b3IpOworICAgIG1fb2xkU3RydWN0dXJlLm1h
cmtJZkNoZWFwMSh2aXNpdG9yKTsKICAgICBpZiAobV9uZXdTdHJ1Y3R1cmUpCi0gICAgICAgIG1f
bmV3U3RydWN0dXJlLT5tYXJrSWZDaGVhcCh2aXNpdG9yKTsKKyAgICAgICAgbV9uZXdTdHJ1Y3R1
cmUtPm1hcmtJZkNoZWFwMSh2aXNpdG9yKTsKIH0KIAorLy90ZW1wbGF0ZSB2b2lkIFB1dEJ5SWRW
YXJpYW50OjptYXJrSWZDaGVhcChTbG90VmlzaXRvciYpOworLy90ZW1wbGF0ZSB2b2lkIFB1dEJ5
SWRWYXJpYW50OjptYXJrSWZDaGVhcChWZXJpZmllclNsb3RWaXNpdG9yJik7CisKIGJvb2wgUHV0
QnlJZFZhcmlhbnQ6OmZpbmFsaXplKFZNJiB2bSkKIHsKICAgICBpZiAoIW1fb2xkU3RydWN0dXJl
LmlzU3RpbGxBbGl2ZSh2bSkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
UHV0QnlJZFZhcmlhbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvUHV0QnlJZFZhcmlhbnQuaAkocmV2aXNpb24gMjcyMjk3KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEz
Miw3ICsxMzIsOCBAQCBwdWJsaWM6CiAKICAgICBib29sIGF0dGVtcHRUb01lcmdlKGNvbnN0IFB1
dEJ5SWRWYXJpYW50JiBvdGhlcik7CiAgICAgCi0gICAgdm9pZCBtYXJrSWZDaGVhcChTbG90Vmlz
aXRvciYpOworLy8gICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCBtYXJrSWZDaGVh
cChWaXNpdG9yJik7CisgICAgdm9pZCBtYXJrSWZDaGVhcDEoQWJzdHJhY3RTbG90VmlzaXRvciYp
OwogICAgIGJvb2wgZmluYWxpemUoVk0mKTsKICAgICAKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJl
YW0mKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9SZWNvcmRl
ZFN0YXR1c2VzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvUmVjb3JkZWRTdGF0dXNlcy5jcHAJKHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9SZWNvcmRlZFN0YXR1c2VzLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtODQsMjYgKzg0LDM2IEBAIERlbGV0ZUJ5U3RhdHVzKiBSZWNvcmRlZFN0YXR1c2VzOjphZGRE
ZWwKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi12b2lkIFJlY29yZGVkU3RhdHVzZXM6OnZpc2l0
QWdncmVnYXRlKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvcikKKy8vdGVtcGxhdGU8dHlwZW5hbWUg
VmlzaXRvcj4KKy8vdm9pZCBSZWNvcmRlZFN0YXR1c2VzOjp2aXNpdEFnZ3JlZ2F0ZShWaXNpdG9y
JiB2aXNpdG9yKQordm9pZCBSZWNvcmRlZFN0YXR1c2VzOjp2aXNpdEFnZ3JlZ2F0ZTEoQWJzdHJh
Y3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBmb3IgKGF1dG8mIHBhaXIgOiBnZXRzKQot
ICAgICAgICBwYWlyLnNlY29uZC0+dmlzaXRBZ2dyZWdhdGUoc2xvdFZpc2l0b3IpOworICAgICAg
ICBwYWlyLnNlY29uZC0+dmlzaXRBZ2dyZWdhdGUxKHZpc2l0b3IpOwogICAgIGZvciAoYXV0byYg
cGFpciA6IGRlbGV0ZXMpCi0gICAgICAgIHBhaXIuc2Vjb25kLT52aXNpdEFnZ3JlZ2F0ZShzbG90
VmlzaXRvcik7CisgICAgICAgIHBhaXIuc2Vjb25kLT52aXNpdEFnZ3JlZ2F0ZTEodmlzaXRvcik7
CiB9CiAKLXZvaWQgUmVjb3JkZWRTdGF0dXNlczo6bWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImIHNs
b3RWaXNpdG9yKQorLy90ZW1wbGF0ZSB2b2lkIFJlY29yZGVkU3RhdHVzZXM6OnZpc2l0QWdncmVn
YXRlKFNsb3RWaXNpdG9yJik7CisvL3RlbXBsYXRlIHZvaWQgUmVjb3JkZWRTdGF0dXNlczo6dmlz
aXRBZ2dyZWdhdGUoVmVyaWZpZXJTbG90VmlzaXRvciYpOworCisvL3RlbXBsYXRlPHR5cGVuYW1l
IFZpc2l0b3I+CisvL3ZvaWQgUmVjb3JkZWRTdGF0dXNlczo6bWFya0lmQ2hlYXAoVmlzaXRvciYg
dmlzaXRvcikKK3ZvaWQgUmVjb3JkZWRTdGF0dXNlczo6bWFya0lmQ2hlYXAxKEFic3RyYWN0U2xv
dFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgZm9yIChhdXRvJiBwYWlyIDogZ2V0cykKLSAgICAg
ICAgcGFpci5zZWNvbmQtPm1hcmtJZkNoZWFwKHNsb3RWaXNpdG9yKTsKKyAgICAgICAgcGFpci5z
ZWNvbmQtPm1hcmtJZkNoZWFwMSh2aXNpdG9yKTsKICAgICBmb3IgKGF1dG8mIHBhaXIgOiBwdXRz
KQotICAgICAgICBwYWlyLnNlY29uZC0+bWFya0lmQ2hlYXAoc2xvdFZpc2l0b3IpOworICAgICAg
ICBwYWlyLnNlY29uZC0+bWFya0lmQ2hlYXAxKHZpc2l0b3IpOwogICAgIGZvciAoYXV0byYgcGFp
ciA6IGlucykKLSAgICAgICAgcGFpci5zZWNvbmQtPm1hcmtJZkNoZWFwKHNsb3RWaXNpdG9yKTsK
KyAgICAgICAgcGFpci5zZWNvbmQtPm1hcmtJZkNoZWFwMSh2aXNpdG9yKTsKICAgICBmb3IgKGF1
dG8mIHBhaXIgOiBkZWxldGVzKQotICAgICAgICBwYWlyLnNlY29uZC0+bWFya0lmQ2hlYXAoc2xv
dFZpc2l0b3IpOworICAgICAgICBwYWlyLnNlY29uZC0+bWFya0lmQ2hlYXAxKHZpc2l0b3IpOwog
fQogCisvL3RlbXBsYXRlIHZvaWQgUmVjb3JkZWRTdGF0dXNlczo6bWFya0lmQ2hlYXAoU2xvdFZp
c2l0b3ImKTsKKy8vdGVtcGxhdGUgdm9pZCBSZWNvcmRlZFN0YXR1c2VzOjptYXJrSWZDaGVhcChW
ZXJpZmllclNsb3RWaXNpdG9yJik7CisKIHZvaWQgUmVjb3JkZWRTdGF0dXNlczo6ZmluYWxpemVX
aXRob3V0RGVsZXRpbmcoVk0mIHZtKQogewogICAgIC8vIFRoaXMgdmFyaWFudCBvZiBmaW5hbGl6
ZSBnZXRzIGNhbGxlZCBmcm9tIHdpdGhpbiBncmFwaCBzYWZlcG9pbnRzIC0tIHNvIHRoZXJlIG1h
eSBiZSBERkcgSVIgaW4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9SZWNv
cmRlZFN0YXR1c2VzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1JlY29yZGVkU3RhdHVzZXMuaAkocmV2aXNpb24gMjcyMjk3KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1JlY29yZGVkU3RhdHVzZXMuaAkod29ya2luZyBjb3B5KQpAQCAt
NTAsOCArNTAsMTAgQEAgc3RydWN0IFJlY29yZGVkU3RhdHVzZXMgewogICAgIEluQnlJZFN0YXR1
cyogYWRkSW5CeUlkU3RhdHVzKGNvbnN0IENvZGVPcmlnaW4mLCBjb25zdCBJbkJ5SWRTdGF0dXMm
KTsKICAgICBEZWxldGVCeVN0YXR1cyogYWRkRGVsZXRlQnlTdGF0dXMoY29uc3QgQ29kZU9yaWdp
biYsIGNvbnN0IERlbGV0ZUJ5U3RhdHVzJik7CiAgICAgCi0gICAgdm9pZCB2aXNpdEFnZ3JlZ2F0
ZShTbG90VmlzaXRvciYpOwotICAgIHZvaWQgbWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImKTsKKy8v
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgdmlzaXRBZ2dyZWdhdGUoVmlzaXRv
ciYpOworLy8gICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCBtYXJrSWZDaGVhcChW
aXNpdG9yJik7CisgICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZTEoQWJzdHJhY3RTbG90VmlzaXRvciYp
OworICAgIHZvaWQgbWFya0lmQ2hlYXAxKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKICAgICAKICAg
ICB2b2lkIGZpbmFsaXplV2l0aG91dERlbGV0aW5nKFZNJik7CiAgICAgdm9pZCBmaW5hbGl6ZShW
TSYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVNldC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVy
ZVNldC5jcHAJKHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9TdHJ1Y3R1cmVTZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwxMiArMzEsMTcgQEAK
IAogbmFtZXNwYWNlIEpTQyB7CiAKLXZvaWQgU3RydWN0dXJlU2V0OjptYXJrSWZDaGVhcChTbG90
VmlzaXRvciYgdmlzaXRvcikgY29uc3QKKy8vdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KKy8v
dm9pZCBTdHJ1Y3R1cmVTZXQ6Om1hcmtJZkNoZWFwKFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0Cit2
b2lkIFN0cnVjdHVyZVNldDo6bWFya0lmQ2hlYXAxKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0
b3IpIGNvbnN0CiB7CiAgICAgZm9yIChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA6ICp0aGlzKQotICAg
ICAgICBzdHJ1Y3R1cmUtPm1hcmtJZkNoZWFwKHZpc2l0b3IpOworICAgICAgICBzdHJ1Y3R1cmUt
Pm1hcmtJZkNoZWFwMSh2aXNpdG9yKTsKIH0KIAorLy90ZW1wbGF0ZSB2b2lkIFN0cnVjdHVyZVNl
dDo6bWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImKSBjb25zdDsKKy8vdGVtcGxhdGUgdm9pZCBTdHJ1
Y3R1cmVTZXQ6Om1hcmtJZkNoZWFwKFZlcmlmaWVyU2xvdFZpc2l0b3ImKSBjb25zdDsKKwogYm9v
bCBTdHJ1Y3R1cmVTZXQ6OmlzU3RpbGxBbGl2ZShWTSYgdm0pIGNvbnN0CiB7CiAgICAgZm9yIChT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSA6ICp0aGlzKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvU3RydWN0dXJlU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVNldC5oCShyZXZpc2lvbiAyNzIyOTcpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU2V0LmgJKHdvcmtpbmcgY29weSkK
QEAgLTU0LDcgKzU0LDggQEAgcHVibGljOgogICAgICAgICByZXR1cm4gb25seUVudHJ5KCk7CiAg
ICAgfQogCi0gICAgdm9pZCBtYXJrSWZDaGVhcChTbG90VmlzaXRvciYpIGNvbnN0OworLy8gICAg
dGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCBtYXJrSWZDaGVhcChWaXNpdG9yJikgY29u
c3Q7CisgICAgdm9pZCBtYXJrSWZDaGVhcDEoQWJzdHJhY3RTbG90VmlzaXRvciYpIGNvbnN0Owog
ICAgIGJvb2wgaXNTdGlsbEFsaXZlKFZNJikgY29uc3Q7CiAgICAgCiAgICAgdm9pZCBkdW1wSW5D
b250ZXh0KFByaW50U3RyZWFtJiwgRHVtcENvbnRleHQqKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcAko
cmV2aXNpb24gMjcyMjk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVj
dHVyZVN0dWJJbmZvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjkwLDEyICsyOTAsMTQgQEAgdm9p
ZCBTdHJ1Y3R1cmVTdHViSW5mbzo6cmVzZXQoY29uc3QgQ29uYwogICAgIHNldENhY2hlVHlwZShs
b2NrZXIsIENhY2hlVHlwZTo6VW5zZXQpOwogfQogCi12b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjp2
aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vdGVtcGxhdGU8dHlwZW5hbWUg
VmlzaXRvcj4KKy8vdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6dmlzaXRBZ2dyZWdhdGUoVmlzaXRv
ciYgdmlzaXRvcikKK3ZvaWQgU3RydWN0dXJlU3R1YkluZm86OnZpc2l0QWdncmVnYXRlMShBYnN0
cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHsKICAgICAgICAgYXV0byBsb2NrZXIg
PSBob2xkTG9jayhtX2J1ZmZlcmVkU3RydWN0dXJlc0xvY2spOwogICAgICAgICBmb3IgKGF1dG8m
IGJ1ZmZlcmVkU3RydWN0dXJlIDogbV9idWZmZXJlZFN0cnVjdHVyZXMpCi0gICAgICAgICAgICBi
dWZmZXJlZFN0cnVjdHVyZS5ieVZhbElkKCkudmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7CisgICAg
ICAgICAgICBidWZmZXJlZFN0cnVjdHVyZS5ieVZhbElkKCkudmlzaXRBZ2dyZWdhdGUxKHZpc2l0
b3IpOwogICAgIH0KICAgICBzd2l0Y2ggKG1fY2FjaGVUeXBlKSB7CiAgICAgY2FzZSBDYWNoZVR5
cGU6OlVuc2V0OgpAQCAtMzA1LDEwICszMDcsMTAgQEAgdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6
dmlzaXRBZ2dyZWdhdGUoUwogICAgIGNhc2UgQ2FjaGVUeXBlOjpQdXRCeUlkUmVwbGFjZToKICAg
ICBjYXNlIENhY2hlVHlwZTo6SW5CeUlkU2VsZjoKICAgICBjYXNlIENhY2hlVHlwZTo6R2V0QnlJ
ZFNlbGY6Ci0gICAgICAgIG1faWRlbnRpZmllci52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKKyAg
ICAgICAgbV9pZGVudGlmaWVyLnZpc2l0QWdncmVnYXRlMSh2aXNpdG9yKTsKICAgICAgICAgcmV0
dXJuOwogICAgIGNhc2UgQ2FjaGVUeXBlOjpTdHViOgotICAgICAgICB1LnN0dWItPnZpc2l0QWdn
cmVnYXRlKHZpc2l0b3IpOworICAgICAgICB1LnN0dWItPnZpc2l0QWdncmVnYXRlMSh2aXNpdG9y
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKQEAgLTMxNiw2ICszMTgsOSBAQCB2b2lk
IFN0cnVjdHVyZVN0dWJJbmZvOjp2aXNpdEFnZ3JlZ2F0ZShTCiAgICAgcmV0dXJuOwogfQogCisv
L3RlbXBsYXRlIHZvaWQgU3RydWN0dXJlU3R1YkluZm86OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNp
dG9yJik7CisvL3RlbXBsYXRlIHZvaWQgU3RydWN0dXJlU3R1YkluZm86OnZpc2l0QWdncmVnYXRl
KFZlcmlmaWVyU2xvdFZpc2l0b3ImKTsKKwogdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6dmlzaXRX
ZWFrUmVmZXJlbmNlcyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXJCYXNlJiBsb2NrZXIsIENvZGVC
bG9jayogY29kZUJsb2NrKQogewogICAgIFZNJiB2bSA9IGNvZGVCbG9jay0+dm0oKTsKQEAgLTM0
NiwyNCArMzUxLDMxIEBAIHZvaWQgU3RydWN0dXJlU3R1YkluZm86OnZpc2l0V2Vha1JlZmVyZW4K
ICAgICByZXNldEJ5R0MgPSB0cnVlOwogfQogCi1ib29sIFN0cnVjdHVyZVN0dWJJbmZvOjpwcm9w
YWdhdGVUcmFuc2l0aW9ucyhTbG90VmlzaXRvciYgdmlzaXRvcikKLXsKLSAgICBzd2l0Y2ggKG1f
Y2FjaGVUeXBlKSB7Ci0gICAgY2FzZSBDYWNoZVR5cGU6OlVuc2V0OgotICAgIGNhc2UgQ2FjaGVU
eXBlOjpBcnJheUxlbmd0aDoKLSAgICBjYXNlIENhY2hlVHlwZTo6U3RyaW5nTGVuZ3RoOgotICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICBjYXNlIENhY2hlVHlwZTo6R2V0QnlJZFNlbGY6Ci0gICAg
Y2FzZSBDYWNoZVR5cGU6OlB1dEJ5SWRSZXBsYWNlOgotICAgIGNhc2UgQ2FjaGVUeXBlOjpJbkJ5
SWRTZWxmOgotICAgICAgICByZXR1cm4gdS5ieUlkU2VsZi5iYXNlT2JqZWN0U3RydWN0dXJlLT5t
YXJrSWZDaGVhcCh2aXNpdG9yKTsKLSAgICBjYXNlIENhY2hlVHlwZTo6U3R1YjoKLSAgICAgICAg
cmV0dXJuIHUuc3R1Yi0+cHJvcGFnYXRlVHJhbnNpdGlvbnModmlzaXRvcik7Ci0gICAgfQotICAg
IAotICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19
CisvL3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+CisvL2Jvb2wgU3RydWN0dXJlU3R1YkluZm86
OnByb3BhZ2F0ZVRyYW5zaXRpb25zMShWaXNpdG9yJiB2aXNpdG9yKQorLy97CisvLyAgICBzd2l0
Y2ggKG1fY2FjaGVUeXBlKSB7CisvLyAgICBjYXNlIENhY2hlVHlwZTo6VW5zZXQ6CisvLyAgICBj
YXNlIENhY2hlVHlwZTo6QXJyYXlMZW5ndGg6CisvLyAgICBjYXNlIENhY2hlVHlwZTo6U3RyaW5n
TGVuZ3RoOgorLy8gICAgICAgIHJldHVybiB0cnVlOworLy8gICAgY2FzZSBDYWNoZVR5cGU6Okdl
dEJ5SWRTZWxmOgorLy8gICAgY2FzZSBDYWNoZVR5cGU6OlB1dEJ5SWRSZXBsYWNlOgorLy8gICAg
Y2FzZSBDYWNoZVR5cGU6OkluQnlJZFNlbGY6CisvLyAgICAgICAgcmV0dXJuIHUuYnlJZFNlbGYu
YmFzZU9iamVjdFN0cnVjdHVyZS0+bWFya0lmQ2hlYXAxKHZpc2l0b3IpOworLy8gICAgICAgIHJl
dHVybiBmYWxzZTsKKy8vICAgIGNhc2UgQ2FjaGVUeXBlOjpTdHViOgorLy8gICAgICAgIHJldHVy
biB1LnN0dWItPnByb3BhZ2F0ZVRyYW5zaXRpb25zMTAodmlzaXRvcik7CisvLyAgICAgICAgcmV0
dXJuIGZhbHNlOworLy8gICAgfQorLy8KKy8vLy8gICAgVU5VU0VEX1BBUkFNKHZpc2l0b3IpOyAv
LyBtbGFtIFRFU1QKKy8vICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisvLyAgICBy
ZXR1cm4gdHJ1ZTsKKy8vfQorLy8KKy8vdGVtcGxhdGU8PiBib29sIFN0cnVjdHVyZVN0dWJJbmZv
Ojpwcm9wYWdhdGVUcmFuc2l0aW9uczEoU2xvdFZpc2l0b3ImKTsKKy8vdGVtcGxhdGU8PiBib29s
IFN0cnVjdHVyZVN0dWJJbmZvOjpwcm9wYWdhdGVUcmFuc2l0aW9uczEoQWJzdHJhY3RTbG90Vmlz
aXRvciYpOwogCiBTdHViSW5mb1N1bW1hcnkgU3RydWN0dXJlU3R1YkluZm86OnN1bW1hcnkoVk0m
IHZtKSBjb25zdAogewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVj
dHVyZVN0dWJJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgJKHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCSh3b3JraW5nIGNvcHkpCkBA
IC05MSwxNCArOTEsMTYgQEAgcHVibGljOgogICAgIHZvaWQgZGVyZWYoKTsKICAgICB2b2lkIGFi
b3V0VG9EaWUoKTsKIAotICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImKTsKKy8v
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgdmlzaXRBZ2dyZWdhdGUoVmlzaXRv
ciYpOworICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUxKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKIAog
ICAgIC8vIENoZWNrIGlmIHRoZSBzdHViIGhhcyB3ZWFrIHJlZmVyZW5jZXMgdGhhdCBhcmUgZGVh
ZC4gSWYgaXQgZG9lcywgdGhlbiBpdCByZXNldHMgaXRzZWxmLAogICAgIC8vIGVpdGhlciBlbnRp
cmVseSBvciBqdXN0IGVub3VnaCB0byBlbnN1cmUgdGhhdCB0aG9zZSBkZWFkIHBvaW50ZXJzIGRv
bid0IGdldCB1c2VkIGFueW1vcmUuCiAgICAgdm9pZCB2aXNpdFdlYWtSZWZlcmVuY2VzKGNvbnN0
IENvbmN1cnJlbnRKU0xvY2tlckJhc2UmLCBDb2RlQmxvY2sqKTsKICAgICAKICAgICAvLyBUaGlz
IHJldHVybnMgdHJ1ZSBpZiBpdCBoYXMgbWFya2VkIGV2ZXJ5dGhpbmcgdGhhdCBpdCB3aWxsIGV2
ZXIgbWFyay4KLSAgICBib29sIHByb3BhZ2F0ZVRyYW5zaXRpb25zKFNsb3RWaXNpdG9yJik7Cisv
LyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiBib29sIHByb3BhZ2F0ZVRyYW5zaXRpb25z
MShWaXNpdG9yJik7CisgICAgYm9vbCBwcm9wYWdhdGVUcmFuc2l0aW9uczEoQWJzdHJhY3RTbG90
VmlzaXRvciYpOwogICAgICAgICAKICAgICBTdHViSW5mb1N1bW1hcnkgc3VtbWFyeShWTSYpIGNv
bnN0OwogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2Vk
Q29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwCShyZXZpc2lvbiAyNzIyOTcpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE5IEFwcGxlIElu
Yy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDIwIEFwcGxl
IEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtNzEsNyArNzEsOCBAQCBVbmxpbmtlZENvZGVCbG9jazo6VW5saW5rZWRDb2RlQmxvY2so
Vk0mCiAgICAgfQogfQogCi12b2lkIFVubGlua2VkQ29kZUJsb2NrOjp2aXNpdENoaWxkcmVuKEpT
Q2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNp
dG9yPgordm9pZCBVbmxpbmtlZENvZGVCbG9jazo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBj
ZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFVubGlua2VkQ29kZUJsb2NrKiB0aGlzT2Jq
ZWN0ID0ganNDYXN0PFVubGlua2VkQ29kZUJsb2NrKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09C
SkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtOTAsNiArOTEsOCBAQCB2b2lk
IFVubGlua2VkQ29kZUJsb2NrOjp2aXNpdENoaWxkcmVuKEpTCiAgICAgdmlzaXRvci5yZXBvcnRF
eHRyYU1lbW9yeVZpc2l0ZWQoZXh0cmFNZW1vcnkpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERS
RU4oVW5saW5rZWRDb2RlQmxvY2spOworCiBzaXplX3QgVW5saW5rZWRDb2RlQmxvY2s6OmVzdGlt
YXRlZFNpemUoSlNDZWxsKiBjZWxsLCBWTSYgdm0pCiB7CiAgICAgVW5saW5rZWRDb2RlQmxvY2sq
IHRoaXNPYmplY3QgPSBqc0Nhc3Q8VW5saW5rZWRDb2RlQmxvY2sqPihjZWxsKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5o
CShyZXZpc2lvbiAyNzIyOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5s
aW5rZWRDb2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTItMjAxOSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQyMyw3ICs0MjMsNyBAQCBwcml2
YXRlOgogICAgIFJlZkNvdW50ZWRBcnJheTxFeHByZXNzaW9uUmFuZ2VJbmZvPiBtX2V4cHJlc3Np
b25JbmZvOwogCiBwcm90ZWN0ZWQ6Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0Nl
bGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAgICAgc3Rh
dGljIHNpemVfdCBlc3RpbWF0ZWRTaXplKEpTQ2VsbCosIFZNJik7CiAKIHB1YmxpYzoKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJs
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlu
a2VkRnVuY3Rpb25FeGVjdXRhYmxlLmNwcAkocmV2aXNpb24gMjcyMjk3KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAx
OSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIt
MjAyMCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTE0MSw3ICsxNDEsOCBAQCB2b2lkIFVubGlua2VkRnVuY3Rpb25FeGVj
dXRhYmxlOjpkZXN0cm95CiAgICAgc3RhdGljX2Nhc3Q8VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFi
bGUqPihjZWxsKS0+flVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKCk7CiB9CiAKLXZvaWQgVW5s
aW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90
VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFVubGlu
a2VkRnVuY3Rpb25FeGVjdXRhYmxlOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZp
c2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIHRoaXNP
YmplY3QgPSBqc0Nhc3Q8VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqPihjZWxsKTsKICAgICBB
U1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC0xNjQsNiAr
MTY1LDggQEAgdm9pZCBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6dmlzaXRDaAogICAgIH0K
IH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKTsK
KwogU291cmNlQ29kZSBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6bGlua2VkU291cmNlQ29k
ZShjb25zdCBTb3VyY2VDb2RlJiBwYXNzZWRQYXJlbnRTb3VyY2UpIGNvbnN0CiB7CiAgICAgY29u
c3QgU291cmNlQ29kZSYgcGFyZW50U291cmNlID0gIW1faXNCdWlsdGluRGVmYXVsdENsYXNzQ29u
c3RydWN0b3IgPyBwYXNzZWRQYXJlbnRTb3VyY2UgOiBCdWlsdGluRXhlY3V0YWJsZXM6OmRlZmF1
bHRDb25zdHJ1Y3RvclNvdXJjZUNvZGUoY29uc3RydWN0b3JLaW5kKCkpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkRnVuY3Rp
b25FeGVjdXRhYmxlLmgJKHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE5IEFwcGxlIEluYy4g
QWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDIwIEFwcGxlIElu
Yy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtMjMyLDcgKzIzMiw3IEBAIHByaXZhdGU6CiAgICAgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFi
bGUoVk0mLCBTdHJ1Y3R1cmUqLCBjb25zdCBTb3VyY2VDb2RlJiwgRnVuY3Rpb25NZXRhZGF0YU5v
ZGUqLCBVbmxpbmtlZEZ1bmN0aW9uS2luZCwgQ29uc3RydWN0QWJpbGl0eSwgSlNQYXJzZXJTY3Jp
cHRNb2RlLCBSZWZQdHI8VERaRW52aXJvbm1lbnRMaW5rPiwgIEpTQzo6RGVyaXZlZENvbnRleHRU
eXBlLCBKU0M6Ok5lZWRzQ2xhc3NGaWVsZEluaXRpYWxpemVyLCBib29sIGlzQnVpbHRpbkRlZmF1
bHRDbGFzc0NvbnN0cnVjdG9yKTsKICAgICBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZShEZWNv
ZGVyJiwgY29uc3QgQ2FjaGVkRnVuY3Rpb25FeGVjdXRhYmxlJik7CiAKLSAgICBzdGF0aWMgdm9p
ZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJ
VF9DSElMRFJFTjsKIAogICAgIHZvaWQgZGVjb2RlQ2FjaGVkQ29kZUJsb2NrcyhWTSYpOwogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXJTY29wZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyU2NvcGUu
Y3BwCShyZXZpc2lvbiAyNzIyOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIv
RGVidWdnZXJTY29wZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDA4LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01NSw3ICs1NSw4IEBAIHZvaWQg
RGVidWdnZXJTY29wZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHYKICAgICBCYXNlOjpmaW5pc2hDcmVh
dGlvbih2bSk7CiB9CiAKLXZvaWQgRGVidWdnZXJTY29wZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwq
IGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4K
K3ZvaWQgRGVidWdnZXJTY29wZTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNp
dG9yJiB2aXNpdG9yKQogewogICAgIERlYnVnZ2VyU2NvcGUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8
RGVidWdnZXJTY29wZSo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhp
c09iamVjdCwgaW5mbygpKTsKQEAgLTY1LDYgKzY2LDggQEAgdm9pZCBEZWJ1Z2dlclNjb3BlOjp2
aXNpdENoaWxkcmVuKEpTQ2VsbAogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fbmV4
dCk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihEZWJ1Z2dlclNjb3BlKTsKKwogU3RyaW5n
IERlYnVnZ2VyU2NvcGU6OmNsYXNzTmFtZShjb25zdCBKU09iamVjdCogb2JqZWN0LCBWTSYgdm0p
CiB7CiAgICAgY29uc3QgRGVidWdnZXJTY29wZSogc2NvcGUgPSBqc0Nhc3Q8Y29uc3QgRGVidWdn
ZXJTY29wZSo+KG9iamVjdCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIv
RGVidWdnZXJTY29wZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1
Z2dlci9EZWJ1Z2dlclNjb3BlLmgJKHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlclNjb3BlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDcg
KzQ2LDcgQEAgcHVibGljOgogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIERlYnVnZ2Vy
U2NvcGUqIGNyZWF0ZShWTSYgdm0sIEpTU2NvcGUqIHNjb3BlKTsKIAotICAgIHN0YXRpYyB2b2lk
IHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lU
X0NISUxEUkVOOwogICAgIHN0YXRpYyBTdHJpbmcgY2xhc3NOYW1lKGNvbnN0IEpTT2JqZWN0Kiwg
Vk0mKTsKICAgICBzdGF0aWMgU3RyaW5nIHRvU3RyaW5nTmFtZShjb25zdCBKU09iamVjdCosIEpT
R2xvYmFsT2JqZWN0Kik7CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTT2Jq
ZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkVHJhbnNpdGlvbnMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFRyYW5zaXRp
b25zLmNwcAkocmV2aXNpb24gMjcyMjk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdEZXNpcmVkVHJhbnNpdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Miw3ICs1Miw3IEBA
IHZvaWQgRGVzaXJlZFRyYW5zaXRpb246OnJlYWxseUFkZChWTSYgdm0KICAgICAgICAgICAgIG1f
b2xkU3RydWN0dXJlLCBtX25ld1N0cnVjdHVyZSkpOwogfQogCi12b2lkIERlc2lyZWRUcmFuc2l0
aW9uOjp2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBEZXNpcmVkVHJh
bnNpdGlvbjo6dmlzaXRDaGlsZHJlbjIoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsK
ICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKG1fY29kZU9yaWdpbk93bmVyKTsKICAgICB2
aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKG1fb2xkU3RydWN0dXJlKTsKQEAgLTc4LDEwICs3OCwx
MCBAQCB2b2lkIERlc2lyZWRUcmFuc2l0aW9uczo6cmVhbGx5QWRkKFZNJiB2CiAgICAgICAgIG1f
dHJhbnNpdGlvbnNbaV0ucmVhbGx5QWRkKHZtLCBjb21tb24pOwogfQogCi12b2lkIERlc2lyZWRU
cmFuc2l0aW9uczo6dmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgRGVz
aXJlZFRyYW5zaXRpb25zOjp2aXNpdENoaWxkcmVuMihBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNp
dG9yKQogewogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3RyYW5zaXRpb25zLnNpemUo
KTsgaSsrKQotICAgICAgICBtX3RyYW5zaXRpb25zW2ldLnZpc2l0Q2hpbGRyZW4odmlzaXRvcik7
CisgICAgICAgIG1fdHJhbnNpdGlvbnNbaV0udmlzaXRDaGlsZHJlbjIodmlzaXRvcik7CiB9CiAK
IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHRGVzaXJlZFRyYW5zaXRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdEZXNpcmVkVHJhbnNpdGlvbnMuaAkocmV2aXNpb24gMjcyMjk3KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkVHJhbnNpdGlvbnMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDYsOCArNDYsNyBAQCBwdWJsaWM6CiAgICAgRGVzaXJlZFRyYW5zaXRpb24o
Q29kZUJsb2NrKiwgQ29kZUJsb2NrKiBjb2RlT3JpZ2luT3duZXIsIFN0cnVjdHVyZSosIFN0cnVj
dHVyZSopOwogCiAgICAgdm9pZCByZWFsbHlBZGQoVk0mLCBDb21tb25EYXRhKik7Ci0gICAgCi0g
ICAgdm9pZCB2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CisgICAgdm9pZCB2aXNpdENoaWxk
cmVuMihBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAKIHByaXZhdGU6CiAgICAgQ29kZUJsb2NrKiBt
X2NvZGVCbG9jazsKQEAgLTYzLDcgKzYyLDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBhZGRMYXpp
bHkoQ29kZUJsb2NrKiwgQ29kZUJsb2NrKiBjb2RlT3JpZ2luT3duZXIsIFN0cnVjdHVyZSosIFN0
cnVjdHVyZSopOwogICAgIHZvaWQgcmVhbGx5QWRkKFZNJiwgQ29tbW9uRGF0YSopOwotICAgIHZv
aWQgdmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYpOworICAgIHZvaWQgdmlzaXRDaGlsZHJlbjIo
QWJzdHJhY3RTbG90VmlzaXRvciYpOwogCiBwcml2YXRlOgogICAgIFZlY3RvcjxEZXNpcmVkVHJh
bnNpdGlvbj4gbV90cmFuc2l0aW9uczsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHRGVzaXJlZFdlYWtSZWZlcmVuY2VzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXZWFrUmVmZXJlbmNlcy5jcHAJKHJldmlzaW9uIDI3MjI5
NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFdlYWtSZWZlcmVuY2Vz
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODcsNyArODcsNyBAQCB2b2lkIERlc2lyZWRXZWFrUmVm
ZXJlbmNlczo6cmVhbGx5QWRkKFZNCiAgICAgfQogfQogCi12b2lkIERlc2lyZWRXZWFrUmVmZXJl
bmNlczo6dmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgRGVzaXJlZFdl
YWtSZWZlcmVuY2VzOjp2aXNpdENoaWxkcmVuMihBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9y
KQogewogICAgIGZvciAoSlNDZWxsKiB0YXJnZXQgOiBtX3JlZmVyZW5jZXMpCiAgICAgICAgIHZp
c2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQodGFyZ2V0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHRGVzaXJlZFdlYWtSZWZlcmVuY2VzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2Vha1JlZmVyZW5jZXMuaAkocmV2aXNpb24g
MjcyMjk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2Vha1JlZmVy
ZW5jZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsMTAgKzMxLDEwIEBACiAKIG5hbWVzcGFjZSBK
U0MgeyAKIAorY2xhc3MgQWJzdHJhY3RTbG90VmlzaXRvcjsKIGNsYXNzIENvZGVCbG9jazsKIGNs
YXNzIEpTQ2VsbDsKIGNsYXNzIEpTVmFsdWU7Ci1jbGFzcyBTbG90VmlzaXRvcjsKIGNsYXNzIFZN
OwogCiBuYW1lc3BhY2UgREZHIHsKQEAgLTUyLDggKzUyLDggQEAgcHVibGljOgogICAgIGJvb2wg
Y29udGFpbnMoSlNDZWxsKik7CiAgICAgCiAgICAgdm9pZCByZWFsbHlBZGQoVk0mLCBDb21tb25E
YXRhKik7Ci0gICAgCi0gICAgdm9pZCB2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CisKKyAg
ICB2b2lkIHZpc2l0Q2hpbGRyZW4yKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKIAogcHJpdmF0ZToK
ICAgICBDb2RlQmxvY2sqIG1fY29kZUJsb2NrOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdHcmFwaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdHcmFwaC5jcHAJKHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHR3JhcGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NzcsNyArOTc3LDcgQEAgQmxv
Y2tMaXN0IEdyYXBoOjpibG9ja3NJblBvc3RPcmRlcihib29sIAogICAgICAgICB9CiAgICAgfQog
Ci0gICAgaWYgKGlzU2FmZVRvVmFsaWRhdGUgJiYgdmFsaWRhdGlvbkVuYWJsZWQoKSkgeyAvLyBU
aGVyZSBhcmUgdXNlcnMgb2YgdGhpcyB3aGVyZSB3ZSBoYXZlbid0IHlldCBidWlsdCBvZiB0aGUg
Q0ZHIGVub3VnaCB0byBiZSBhYmxlIHRvIHJ1biBkb21pbmF0b3JzLgorICAgIGlmIChpc1NhZmVU
b1ZhbGlkYXRlICYmIHZhbGlkYXRpb25FbmFibGVkKCkpIHsgLy8gVGhlcmUgYXJlIHVzZXJzIG9m
IHRoaXMgd2hlcmUgd2UgaGF2ZW4ndCB5ZXQgYnVpbHQgdGhlIENGRyBlbm91Z2ggdG8gYmUgYWJs
ZSB0byBydW4gZG9taW5hdG9ycy4KICAgICAgICAgYXV0byB2YWxpZGF0ZVJlc3VsdHMgPSBbJl0g
KGF1dG8mIGRvbWluYXRvcnMpIHsKICAgICAgICAgICAgIC8vIFdoZW4gaXRlcmF0aW5nIG92ZXIg
cmV2ZXJzZSBwb3N0IG9yZGVyLCB3ZSBzaG91bGQgc2VlIGRvbWluYXRvcnMKICAgICAgICAgICAg
IC8vIGJlZm9yZSB0aGluZ3MgdGhleSBkb21pbmF0ZS4KQEAgLTE0NDgsNyArMTQ0OCw3IEBAIHZv
aWQgR3JhcGg6OnJlZ2lzdGVyRnJvemVuVmFsdWVzKCkKICAgICBtX2NvZGVCbG9jay0+Y29uc3Rh
bnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uKCkuc2hyaW5rVG9GaXQoKTsKIH0KIAotdm9pZCBH
cmFwaDo6dmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgR3JhcGg6OnZp
c2l0Q2hpbGRyZW4xKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgZm9yIChG
cm96ZW5WYWx1ZSogdmFsdWUgOiBtX2Zyb3plblZhbHVlcykgewogICAgICAgICB2aXNpdG9yLmFw
cGVuZFVuYmFycmllcmVkKHZhbHVlLT52YWx1ZSgpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHR3JhcGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0dyYXBoLmgJKHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHR3JhcGguaAkod29ya2luZyBjb3B5KQpAQCAtMTAwMCw5ICsxMDAwLDkgQEAgcHVi
bGljOgogICAgIGJvb2wgY2FuRG9GYXN0U3ByZWFkKE5vZGUqLCBjb25zdCBBYnN0cmFjdFZhbHVl
Jik7CiAgICAgCiAgICAgdm9pZCByZWdpc3RlckZyb3plblZhbHVlcygpOwotICAgIAotICAgIHZv
aWQgdmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYpIGZpbmFsOwotICAgIAorCisgICAgdm9pZCB2
aXNpdENoaWxkcmVuMShBYnN0cmFjdFNsb3RWaXNpdG9yJikgZmluYWw7CisKICAgICB2b2lkIGxv
Z0Fzc2VydGlvbkZhaWx1cmUoCiAgICAgICAgIHN0ZDo6bnVsbHB0cl90LCBjb25zdCBjaGFyKiBm
aWxlLCBpbnQgbGluZSwgY29uc3QgY2hhciogZnVuY3Rpb24sCiAgICAgICAgIGNvbnN0IGNoYXIq
IGFzc2VydGlvbik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAJKHJl
dmlzaW9uIDI3MjI5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTY3Miw5ICs2NzIsOSBAQCBDb21waWxhdGlvbktleSBQbGFuOjpr
ZXkoKQogICAgIHJldHVybiBDb21waWxhdGlvbktleShtX2NvZGVCbG9jay0+YWx0ZXJuYXRpdmUo
KSwgbV9tb2RlKTsKIH0KIAotdm9pZCBQbGFuOjpjaGVja0xpdmVuZXNzQW5kVmlzaXRDaGlsZHJl
bihTbG90VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgUGxhbjo6Y2hlY2tMaXZlbmVzc0FuZFZpc2l0
Q2hpbGRyZW4oQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKLSAgICBpZiAoIWlzS25v
d25Ub0JlTGl2ZUR1cmluZ0dDKCkpCisgICAgaWYgKCFpc0tub3duVG9CZUxpdmVEdXJpbmdHQyh2
aXNpdG9yKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgY2xlYW5NdXN0SGFuZGxlVmFsdWVzSWZO
ZWNlc3NhcnkoKTsKQEAgLTY4NCw4ICs2ODQsOCBAQCB2b2lkIFBsYW46OmNoZWNrTGl2ZW5lc3NB
bmRWaXNpdENoaWxkcmVuCiAgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKHZh
bHVlLnZhbHVlKCkpOwogICAgIH0KIAotICAgIG1fcmVjb3JkZWRTdGF0dXNlcy52aXNpdEFnZ3Jl
Z2F0ZSh2aXNpdG9yKTsKLSAgICBtX3JlY29yZGVkU3RhdHVzZXMubWFya0lmQ2hlYXAodmlzaXRv
cik7CisgICAgbV9yZWNvcmRlZFN0YXR1c2VzLnZpc2l0QWdncmVnYXRlMSh2aXNpdG9yKTsKKyAg
ICBtX3JlY29yZGVkU3RhdHVzZXMubWFya0lmQ2hlYXAxKHZpc2l0b3IpOwogCiAgICAgdmlzaXRv
ci5hcHBlbmRVbmJhcnJpZXJlZChtX2NvZGVCbG9jayk7CiAgICAgdmlzaXRvci5hcHBlbmRVbmJh
cnJpZXJlZChtX2NvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSk7CkBAIC02OTgsOCArNjk4LDggQEAg
dm9pZCBQbGFuOjpjaGVja0xpdmVuZXNzQW5kVmlzaXRDaGlsZHJlbgogICAgICAgICB9CiAgICAg
fQogCi0gICAgbV93ZWFrUmVmZXJlbmNlcy52aXNpdENoaWxkcmVuKHZpc2l0b3IpOwotICAgIG1f
dHJhbnNpdGlvbnMudmlzaXRDaGlsZHJlbih2aXNpdG9yKTsKKyAgICBtX3dlYWtSZWZlcmVuY2Vz
LnZpc2l0Q2hpbGRyZW4yKHZpc2l0b3IpOworICAgIG1fdHJhbnNpdGlvbnMudmlzaXRDaGlsZHJl
bjIodmlzaXRvcik7CiB9CiAKIHZvaWQgUGxhbjo6ZmluYWxpemVJbkdDKCkKQEAgLTcwOCw3ICs3
MDgsMjMgQEAgdm9pZCBQbGFuOjpmaW5hbGl6ZUluR0MoKQogICAgIG1fcmVjb3JkZWRTdGF0dXNl
cy5maW5hbGl6ZVdpdGhvdXREZWxldGluZygqbV92bSk7CiB9CiAKLWJvb2wgUGxhbjo6aXNLbm93
blRvQmVMaXZlRHVyaW5nR0MoKQorYm9vbCBQbGFuOjppc0tub3duVG9CZUxpdmVEdXJpbmdHQyhB
YnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIGlmIChtX3N0YWdlID09IENhbmNl
bGxlZCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworLy8gICAgaWYgKCFtX3ZtLT5oZWFwLmlzTWFy
a2VkKG1fY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSkpCisgICAgaWYgKCF2aXNpdG9yLmlz
TWFya2VkKG1fY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKy8vICAgIGlmICghbV92bS0+aGVhcC5pc01hcmtlZChtX2NvZGVCbG9jay0+YWx0ZXJu
YXRpdmUoKSkpCisgICAgaWYgKCF2aXNpdG9yLmlzTWFya2VkKG1fY29kZUJsb2NrLT5hbHRlcm5h
dGl2ZSgpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworLy8gICAgaWYgKCEhbV9wcm9maWxlZERG
R0NvZGVCbG9jayAmJiAhbV92bS0+aGVhcC5pc01hcmtlZChtX3Byb2ZpbGVkREZHQ29kZUJsb2Nr
KSkKKyAgICBpZiAoISFtX3Byb2ZpbGVkREZHQ29kZUJsb2NrICYmICF2aXNpdG9yLmlzTWFya2Vk
KG1fcHJvZmlsZWRERkdDb2RlQmxvY2spKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0
dXJuIHRydWU7Cit9CisKK2Jvb2wgUGxhbjo6aXNLbm93blRvQmVMaXZlQWZ0ZXJHQygpCiB7CiAg
ICAgaWYgKG1fc3RhZ2UgPT0gQ2FuY2VsbGVkKQogICAgICAgICByZXR1cm4gZmFsc2U7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uaAkocmV2aXNpb24gMjcyMjk3KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDgg
KzQzLDggQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKK2NsYXNzIEFic3RyYWN0U2xvdFZpc2l0b3I7
CiBjbGFzcyBDb2RlQmxvY2s7Ci1jbGFzcyBTbG90VmlzaXRvcjsKIAogbmFtZXNwYWNlIERGRyB7
CiAKQEAgLTcxLDkgKzcxLDEwIEBAIHB1YmxpYzoKICAgICBDb21waWxhdGlvbktleSBrZXkoKTsK
ICAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgotICAgIHZvaWQgaXRlcmF0ZUNvZGVC
bG9ja3NGb3JHQyhjb25zdCBGdW5jJik7Ci0gICAgdm9pZCBjaGVja0xpdmVuZXNzQW5kVmlzaXRD
aGlsZHJlbihTbG90VmlzaXRvciYpOwotICAgIGJvb2wgaXNLbm93blRvQmVMaXZlRHVyaW5nR0Mo
KTsKKyAgICB2b2lkIGl0ZXJhdGVDb2RlQmxvY2tzRm9yR0MoQWJzdHJhY3RTbG90VmlzaXRvciYs
IGNvbnN0IEZ1bmMmKTsKKyAgICB2b2lkIGNoZWNrTGl2ZW5lc3NBbmRWaXNpdENoaWxkcmVuKEFi
c3RyYWN0U2xvdFZpc2l0b3ImKTsKKyAgICBib29sIGlzS25vd25Ub0JlTGl2ZUR1cmluZ0dDKEFi
c3RyYWN0U2xvdFZpc2l0b3ImKTsKKyAgICBib29sIGlzS25vd25Ub0JlTGl2ZUFmdGVyR0MoKTsK
ICAgICB2b2lkIGZpbmFsaXplSW5HQygpOwogICAgIHZvaWQgY2FuY2VsKCk7CiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbklubGluZXMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW5JbmxpbmVzLmgJKHJldmlzaW9uIDI3MjI5
NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbklubGluZXMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzIsOSArMzIsOSBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7
CiAjaWYgRU5BQkxFKERGR19KSVQpCiAKIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+Ci12b2lkIFBs
YW46Oml0ZXJhdGVDb2RlQmxvY2tzRm9yR0MoY29uc3QgRnVuYyYgZnVuYykKK3ZvaWQgUGxhbjo6
aXRlcmF0ZUNvZGVCbG9ja3NGb3JHQyhBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25z
dCBGdW5jJiBmdW5jKQogewotICAgIGlmICghaXNLbm93blRvQmVMaXZlRHVyaW5nR0MoKSkKKyAg
ICBpZiAoIWlzS25vd25Ub0JlTGl2ZUR1cmluZ0dDKHZpc2l0b3IpKQogICAgICAgICByZXR1cm47
CiAgICAgCiAgICAgLy8gQ29tcGlsYXRpb24gd3JpdGVzIGxvdHMgb2YgdmFsdWVzIHRvIGEgQ29k
ZUJsb2NrIHdpdGhvdXQgcGVyZm9ybWluZwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTYWZlcG9pbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU2FmZXBvaW50LmNwcAkocmV2aXNpb24gMjcyMjk3KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTYWZlcG9pbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MywyOCArODMs
MzggQEAgdm9pZCBTYWZlcG9pbnQ6OmJlZ2luKCkKICAgICB9CiB9CiAKLXZvaWQgU2FmZXBvaW50
OjpjaGVja0xpdmVuZXNzQW5kVmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3Zv
aWQgU2FmZXBvaW50OjpjaGVja0xpdmVuZXNzQW5kVmlzaXRDaGlsZHJlbihBYnN0cmFjdFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQogewogICAgIFJFTEVBU0VfQVNTRVJUKG1fZGlkQ2FsbEJlZ2luKTsK
IAogICAgIGlmIChtX3Jlc3VsdC5tX2RpZEdldENhbmNlbGxlZCkKICAgICAgICAgcmV0dXJuOyAv
LyBXZSB3ZXJlIGNhbmNlbGxlZCBkdXJpbmcgYSBwcmV2aW91cyBHQyEKICAgICAKLSAgICBpZiAo
IWlzS25vd25Ub0JlTGl2ZUR1cmluZ0dDKCkpCisgICAgaWYgKCFpc0tub3duVG9CZUxpdmVEdXJp
bmdHQyh2aXNpdG9yKSkKICAgICAgICAgcmV0dXJuOwogICAgIAogICAgIGZvciAodW5zaWduZWQg
aSA9IG1fc2Nhbm5hYmxlcy5zaXplKCk7IGktLTspCi0gICAgICAgIG1fc2Nhbm5hYmxlc1tpXS0+
dmlzaXRDaGlsZHJlbih2aXNpdG9yKTsKKyAgICAgICAgbV9zY2FubmFibGVzW2ldLT52aXNpdENo
aWxkcmVuMSh2aXNpdG9yKTsKIH0KIAotYm9vbCBTYWZlcG9pbnQ6OmlzS25vd25Ub0JlTGl2ZUR1
cmluZ0dDKCkKK2Jvb2wgU2FmZXBvaW50Ojppc0tub3duVG9CZUxpdmVEdXJpbmdHQyhBYnN0cmFj
dFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFJFTEVBU0VfQVNTRVJUKG1fZGlkQ2FsbEJl
Z2luKTsKICAgICAKICAgICBpZiAobV9yZXN1bHQubV9kaWRHZXRDYW5jZWxsZWQpCiAgICAgICAg
IHJldHVybiB0cnVlOyAvLyBXZSB3ZXJlIGNhbmNlbGxlZCBkdXJpbmcgYSBwcmV2aW91cyBHQywg
c28gbGV0J3Mgbm90IG1lc3Mgd2l0aCBpdCB0aGlzIHRpbWUgYXJvdW5kIC0gcHJldGVuZCBpdCdz
IGxpdmUgYW5kIG1vdmUgb24uCiAgICAgCi0gICAgcmV0dXJuIG1fcGxhbi5pc0tub3duVG9CZUxp
dmVEdXJpbmdHQygpOworICAgIHJldHVybiBtX3BsYW4uaXNLbm93blRvQmVMaXZlRHVyaW5nR0Mo
dmlzaXRvcik7Cit9CisKK2Jvb2wgU2FmZXBvaW50Ojppc0tub3duVG9CZUxpdmVBZnRlckdDKCkK
K3sKKyAgICBSRUxFQVNFX0FTU0VSVChtX2RpZENhbGxCZWdpbik7CisgICAgCisgICAgaWYgKG1f
cmVzdWx0Lm1fZGlkR2V0Q2FuY2VsbGVkKQorICAgICAgICByZXR1cm4gdHJ1ZTsgLy8gV2Ugd2Vy
ZSBjYW5jZWxsZWQgZHVyaW5nIGEgcHJldmlvdXMgR0MsIHNvIGxldCdzIG5vdCBtZXNzIHdpdGgg
aXQgdGhpcyB0aW1lIGFyb3VuZCAtIHByZXRlbmQgaXQncyBsaXZlIGFuZCBtb3ZlIG9uLgorICAg
IAorICAgIHJldHVybiBtX3BsYW4uaXNLbm93blRvQmVMaXZlQWZ0ZXJHQygpOwogfQogCiB2b2lk
IFNhZmVwb2ludDo6Y2FuY2VsKCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U2FmZXBvaW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
YWZlcG9pbnQuaAkocmV2aXNpb24gMjcyMjk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTYWZlcG9pbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsNyBAQAogCiBuYW1l
c3BhY2UgSlNDIHsKIAotY2xhc3MgU2xvdFZpc2l0b3I7CitjbGFzcyBBYnN0cmFjdFNsb3RWaXNp
dG9yOwogY2xhc3MgVk07CiAKIG5hbWVzcGFjZSBERkcgewpAQCAtNjYsOSArNjYsMTAgQEAgcHVi
bGljOgogICAgIHZvaWQgYWRkKFNjYW5uYWJsZSopOwogICAgIAogICAgIHZvaWQgYmVnaW4oKTsK
LSAgICAKLSAgICB2b2lkIGNoZWNrTGl2ZW5lc3NBbmRWaXNpdENoaWxkcmVuKFNsb3RWaXNpdG9y
Jik7Ci0gICAgYm9vbCBpc0tub3duVG9CZUxpdmVEdXJpbmdHQygpOworCisgICAgdm9pZCBjaGVj
a0xpdmVuZXNzQW5kVmlzaXRDaGlsZHJlbihBYnN0cmFjdFNsb3RWaXNpdG9yJik7CisgICAgYm9v
bCBpc0tub3duVG9CZUxpdmVEdXJpbmdHQyhBYnN0cmFjdFNsb3RWaXNpdG9yJik7CisgICAgYm9v
bCBpc0tub3duVG9CZUxpdmVBZnRlckdDKCk7CiAgICAgdm9pZCBjYW5jZWwoKTsKICAgICAKICAg
ICBWTSogdm0oKSBjb25zdDsgLy8gTWF5IHJldHVybiBudWxsIGlmIHdlJ3ZlIGJlZW4gY2FuY2Vs
bGVkLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTY2FubmFibGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NjYW5uYWJsZS5oCShyZXZp
c2lvbiAyNzIyOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NjYW5uYWJsZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw3IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1j
bGFzcyBTbG90VmlzaXRvcjsKK2NsYXNzIEFic3RyYWN0U2xvdFZpc2l0b3I7CiAKIG5hbWVzcGFj
ZSBERkcgewogCkBAIC0zOCw3ICszOCw3IEBAIHB1YmxpYzoKICAgICBTY2FubmFibGUoKSB7IH0K
ICAgICB2aXJ0dWFsIH5TY2FubmFibGUoKSB7IH0KICAgICAKLSAgICB2aXJ0dWFsIHZvaWQgdmlz
aXRDaGlsZHJlbihTbG90VmlzaXRvciYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXRDaGls
ZHJlbjEoQWJzdHJhY3RTbG90VmlzaXRvciYpID0gMDsKIH07CiAKIH0gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3QuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3QuY3Bw
CShyZXZpc2lvbiAyNzIyOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dvcmts
aXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcyLDcgKzM3Miw3IEBAIHZvaWQgV29ya2xpc3Q6
OnJlc3VtZUFsbFRocmVhZHMoKQogICAgIG1fc3VzcGVuc2lvbkxvY2sudW5sb2NrKCk7CiB9CiAK
LXZvaWQgV29ya2xpc3Q6OnZpc2l0V2Vha1JlZmVyZW5jZXMoU2xvdFZpc2l0b3ImIHZpc2l0b3Ip
Cit2b2lkIFdvcmtsaXN0Ojp2aXNpdFdlYWtSZWZlcmVuY2VzKEFic3RyYWN0U2xvdFZpc2l0b3Im
IHZpc2l0b3IpCiB7CiAgICAgVk0qIHZtID0gJnZpc2l0b3IuaGVhcCgpLT52bSgpOwogICAgIHsK
QEAgLTQwNSw3ICs0MDUsOCBAQCB2b2lkIFdvcmtsaXN0OjpyZW1vdmVEZWFkUGxhbnMoVk0mIHZt
KQogICAgICAgICAgICAgUGxhbiogcGxhbiA9IGl0ZXItPnZhbHVlLmdldCgpOwogICAgICAgICAg
ICAgaWYgKHBsYW4tPnZtKCkgIT0gJnZtKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICAgICAgaWYgKHBsYW4tPmlzS25vd25Ub0JlTGl2ZUR1cmluZ0dDKCkpIHsKKy8vICAgICAg
ICAgICAgaWYgKHBsYW4tPmlzS25vd25Ub0JlTGl2ZUR1cmluZ0dDKCkpIHsKKyAgICAgICAgICAg
IGlmIChwbGFuLT5pc0tub3duVG9CZUxpdmVBZnRlckdDKCkpIHsKICAgICAgICAgICAgICAgICBw
bGFuLT5maW5hbGl6ZUluR0MoKTsKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAg
ICAgIH0KQEAgLTQ0MCw3ICs0NDEsOCBAQCB2b2lkIFdvcmtsaXN0OjpyZW1vdmVEZWFkUGxhbnMo
Vk0mIHZtKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIGlmIChzYWZlcG9pbnQtPnZt
KCkgIT0gJnZtKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlmIChzYWZlcG9pbnQt
PmlzS25vd25Ub0JlTGl2ZUR1cmluZ0dDKCkpCisvLyAgICAgICAgaWYgKHNhZmVwb2ludC0+aXNL
bm93blRvQmVMaXZlRHVyaW5nR0MoKSkKKyAgICAgICAgaWYgKHNhZmVwb2ludC0+aXNLbm93blRv
QmVMaXZlQWZ0ZXJHQygpKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIHNhZmVwb2lu
dC0+Y2FuY2VsKCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdX
b3JrbGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV29y
a2xpc3QuaAkocmV2aXNpb24gMjcyMjk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdXb3JrbGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw3ICszNSw3IEBACiAKIG5hbWVzcGFj
ZSBKU0MgewogCi1jbGFzcyBTbG90VmlzaXRvcjsKK2NsYXNzIEFic3RyYWN0U2xvdFZpc2l0b3I7
CiAKIG5hbWVzcGFjZSBERkcgewogCkBAIC01Nyw3ICs1Nyw3IEBAIHB1YmxpYzoKICAgICB2b2lk
IGNvbXBsZXRlQWxsUGxhbnNGb3JWTShWTSYpOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVu
Yz4KLSAgICB2b2lkIGl0ZXJhdGVDb2RlQmxvY2tzRm9yR0MoVk0mLCBjb25zdCBGdW5jJik7Cisg
ICAgdm9pZCBpdGVyYXRlQ29kZUJsb2Nrc0ZvckdDKEFic3RyYWN0U2xvdFZpc2l0b3ImLCBWTSYs
IGNvbnN0IEZ1bmMmKTsKIAogICAgIHZvaWQgd2FpdFVudGlsQWxsUGxhbnNGb3JWTUFyZVJlYWR5
KFZNJik7CiAgICAgU3RhdGUgY29tcGxldGVBbGxSZWFkeVBsYW5zRm9yVk0oVk0mLCBDb21waWxh
dGlvbktleSA9IENvbXBpbGF0aW9uS2V5KCkpOwpAQCAtNzMsNyArNzMsNyBAQCBwdWJsaWM6CiAg
ICAgYm9vbCBpc0FjdGl2ZUZvclZNKFZNJikgY29uc3Q7CiAgICAgCiAgICAgLy8gT25seSBjYWxs
ZWQgb24gdGhlIG1haW4gdGhyZWFkIGFmdGVyIHN1c3BlbmRpbmcgYWxsIHRocmVhZHMuCi0gICAg
dm9pZCB2aXNpdFdlYWtSZWZlcmVuY2VzKFNsb3RWaXNpdG9yJik7CisgICAgdm9pZCB2aXNpdFdl
YWtSZWZlcmVuY2VzKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKICAgICB2b2lkIHJlbW92ZURlYWRQ
bGFucyhWTSYpOwogICAgIAogICAgIHZvaWQgcmVtb3ZlTm9uQ29tcGlsaW5nUGxhbnNGb3JWTShW
TSYpOwpAQCAtMTQ0LDcgKzE0NCw3IEBAIFdvcmtsaXN0JiBleGlzdGluZ1dvcmtsaXN0Rm9ySW5k
ZXgodW5zaWcKIHZvaWQgY29tcGxldGVBbGxQbGFuc0ZvclZNKFZNJik7CiAKIHRlbXBsYXRlPHR5
cGVuYW1lIEZ1bmM+Ci12b2lkIGl0ZXJhdGVDb2RlQmxvY2tzRm9yR0MoVk0mLCBjb25zdCBGdW5j
Jik7Cit2b2lkIGl0ZXJhdGVDb2RlQmxvY2tzRm9yR0MoQWJzdHJhY3RTbG90VmlzaXRvciYsIFZN
JiwgY29uc3QgRnVuYyYpOwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3RJbmxpbmVzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlzdElubGluZXMuaAkocmV2aXNp
b24gMjcyMjk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlzdElubGlu
ZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsMzAgKzMzLDMwIEBAIG5hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgREZHIHsKICNpZiBFTkFCTEUoREZHX0pJVCkKIAogdGVtcGxhdGU8dHlwZW5hbWUg
RnVuYz4KLXZvaWQgaXRlcmF0ZUNvZGVCbG9ja3NGb3JHQyhWTSYgdm0sIGNvbnN0IEZ1bmMmIGZ1
bmMpCit2b2lkIGl0ZXJhdGVDb2RlQmxvY2tzRm9yR0MoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlz
aXRvciwgVk0mIHZtLCBjb25zdCBGdW5jJiBmdW5jKQogewogICAgIGZvciAodW5zaWduZWQgaSA9
IERGRzo6bnVtYmVyT2ZXb3JrbGlzdHMoKTsgaS0tOykgewogICAgICAgICBpZiAoREZHOjpXb3Jr
bGlzdCogd29ya2xpc3QgPSBERkc6OmV4aXN0aW5nV29ya2xpc3RGb3JJbmRleE9yTnVsbChpKSkK
LSAgICAgICAgICAgIHdvcmtsaXN0LT5pdGVyYXRlQ29kZUJsb2Nrc0ZvckdDKHZtLCBmdW5jKTsK
KyAgICAgICAgICAgIHdvcmtsaXN0LT5pdGVyYXRlQ29kZUJsb2Nrc0ZvckdDKHZpc2l0b3IsIHZt
LCBmdW5jKTsKICAgICB9CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+Ci12b2lkIFdvcmts
aXN0OjppdGVyYXRlQ29kZUJsb2Nrc0ZvckdDKFZNJiB2bSwgY29uc3QgRnVuYyYgZnVuYykKK3Zv
aWQgV29ya2xpc3Q6Oml0ZXJhdGVDb2RlQmxvY2tzRm9yR0MoQWJzdHJhY3RTbG90VmlzaXRvciYg
dmlzaXRvciwgVk0mIHZtLCBjb25zdCBGdW5jJiBmdW5jKQogewogICAgIExvY2tIb2xkZXIgbG9j
a2VyKCptX2xvY2spOwogICAgIGZvciAoUGxhbk1hcDo6aXRlcmF0b3IgaXRlciA9IG1fcGxhbnMu
YmVnaW4oKTsgaXRlciAhPSBtX3BsYW5zLmVuZCgpOyArK2l0ZXIpIHsKICAgICAgICAgUGxhbiog
cGxhbiA9IGl0ZXItPnZhbHVlLmdldCgpOwogICAgICAgICBpZiAocGxhbi0+dm0oKSAhPSAmdm0p
CiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgcGxhbi0+aXRlcmF0ZUNvZGVCbG9ja3NG
b3JHQyhmdW5jKTsKKyAgICAgICAgcGxhbi0+aXRlcmF0ZUNvZGVCbG9ja3NGb3JHQyh2aXNpdG9y
LCBmdW5jKTsKICAgICB9CiB9CiAKICNlbHNlIC8vIEVOQUJMRShERkdfSklUKQogCiB0ZW1wbGF0
ZTx0eXBlbmFtZSBGdW5jPgotdm9pZCBpdGVyYXRlQ29kZUJsb2Nrc0ZvckdDKFZNJiwgY29uc3Qg
RnVuYyYpCit2b2lkIGl0ZXJhdGVDb2RlQmxvY2tzRm9yR0MoQWJzdHJhY3RTbG90VmlzaXRvciYs
IFZNJiwgY29uc3QgRnVuYyYpCiB7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0Fic3RyYWN0U2xvdFZpc2l0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0Fic3RyYWN0U2xvdFZpc2l0b3IuY3BwCShub25leGlzdGVudCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Fic3RyYWN0U2xvdFZpc2l0b3IuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsMzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiQWJzdHJhY3RTbG90VmlzaXRvci5oIgorCisjaW5jbHVkZSAiQWJzdHJhY3RT
bG90VmlzaXRvcklubGluZXMuaCIKKy8vI2luY2x1ZGUgIk1hcmtpbmdDb25zdHJhaW50U29sdmVy
LmgiCisKK25hbWVzcGFjZSBKU0MgeworCit9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Fic3RyYWN0U2xvdFZpc2l0b3IuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9BYnN0cmFjdFNsb3RWaXNpdG9yLmgJKG5vbmV4
aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQWJzdHJhY3RTbG90VmlzaXRv
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjMyIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJKU0NK
U1ZhbHVlLmgiCisjaW5jbHVkZSAiTWFya1N0YWNrLmgiCisjaW5jbHVkZSAiVmlzaXRSYWNlS2V5
LmgiIC8vIG1sYW0KKyNpbmNsdWRlIDx3dGYvU2hhcmVkVGFzay5oPgorI2luY2x1ZGUgPHd0Zi90
ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIENvbnNlcnZhdGl2ZVJv
b3RzOworY2xhc3MgSGVhcDsKK2NsYXNzIEhlYXBDZWxsOworY2xhc3MgSlNDZWxsOworY2xhc3Mg
TWFya2VkQmxvY2s7CitjbGFzcyBNYXJraW5nQ29uc3RyYWludDsKK2NsYXNzIE1hcmtpbmdDb25z
dHJhaW50U29sdmVyOworY2xhc3MgUHJlY2lzZUFsbG9jYXRpb247CitjbGFzcyBTbG90VmlzaXRv
cjsKK2NsYXNzIFZNOworY2xhc3MgVmVyaWZpZXJTbG90VmlzaXRvcjsKK3RlbXBsYXRlPHR5cGVu
YW1lIFQ+IGNsYXNzIFdlYWs7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBUcmFpdHM+
IGNsYXNzIFdyaXRlQmFycmllckJhc2U7CisKK2NsYXNzIEFic3RyYWN0U2xvdFZpc2l0b3Igewor
ICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEFic3RyYWN0U2xvdFZpc2l0b3IpOworICAgIFdURl9N
QUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIGNsYXNzIENvbnRleHQgeworICAgIHB1
YmxpYzoKKyAgICAgICAgQ29udGV4dChBYnN0cmFjdFNsb3RWaXNpdG9yJiwgSGVhcENlbGwqKTsK
KyAgICAgICAgfkNvbnRleHQoKTsKKyAgICAgICAgSGVhcENlbGwqIGNlbGwoKSBjb25zdCB7IHJl
dHVybiBtX2NlbGw7IH0KKyAgICBwcml2YXRlOgorICAgICAgICBBYnN0cmFjdFNsb3RWaXNpdG9y
JiBtX3Zpc2l0b3I7CisgICAgICAgIEhlYXBDZWxsKiBtX2NlbGw7CisgICAgICAgIENvbnRleHQq
IG1fcHJldmlvdXM7CisgICAgfTsKKworICAgIGNsYXNzIFN1cHByZXNzR0NWZXJpZmllclNjb3Bl
IHsKKyAgICBwdWJsaWM6CisgICAgICAgIFN1cHByZXNzR0NWZXJpZmllclNjb3BlKEFic3RyYWN0
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCisgICAgICAgICAgICA6IG1fdmlzaXRvcih2aXNpdG9yKQor
ICAgICAgICB7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghbV92aXNpdG9yLm1fc3VwcHJl
c3NWZXJpZmllcik7IC8vIG1sYW0gRklYTUUgbWFrZSBBU1NFUlQuCisgICAgICAgICAgICBtX3Zp
c2l0b3IubV9zdXBwcmVzc1ZlcmlmaWVyID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICB+U3Vw
cHJlc3NHQ1ZlcmlmaWVyU2NvcGUoKSB7IG1fdmlzaXRvci5tX3N1cHByZXNzVmVyaWZpZXIgPSBm
YWxzZTsgfQorICAgIHByaXZhdGU6CisgICAgICAgIEFic3RyYWN0U2xvdFZpc2l0b3ImIG1fdmlz
aXRvcjsKKyAgICB9OworCisgICAgZW51bSBSb290TWFya1JlYXNvbiB7CisgICAgICAgIE5vbmUs
CisgICAgICAgIENvbnNlcnZhdGl2ZVNjYW4sCisgICAgICAgIFN0cm9uZ1JlZmVyZW5jZXMsCisg
ICAgICAgIFByb3RlY3RlZFZhbHVlcywKKyAgICAgICAgTWFya0xpc3RTZXQsCisgICAgICAgIFZN
RXhjZXB0aW9ucywKKyAgICAgICAgU3Ryb25nSGFuZGxlcywKKyAgICAgICAgRGVidWdnZXIsCisg
ICAgICAgIEpJVFN0dWJSb3V0aW5lcywKKyAgICAgICAgV2Vha1NldHMsCisgICAgICAgIE91dHB1
dCwKKyAgICAgICAgREZHV29ya0xpc3RzLAorICAgICAgICBDb2RlQmxvY2tzLAorICAgICAgICBE
T01HQ091dHB1dCwKKyAgICB9OworICAgIHVzaW5nIFJvb3RNYXJrUmVhc29uU3RvcmFnZSA9IHVp
bnQ4X3Q7CisKKyAgICBjbGFzcyBEZWZhdWx0TWFya2luZ1Zpb2xhdGlvbkFzc2VydGlvblNjb3Bl
IHsKKyAgICBwdWJsaWM6CisgICAgICAgIERlZmF1bHRNYXJraW5nVmlvbGF0aW9uQXNzZXJ0aW9u
U2NvcGUoQWJzdHJhY3RTbG90VmlzaXRvciYpIHsgfQorICAgIH07CisKKyAgICB2aXJ0dWFsIH5B
YnN0cmFjdFNsb3RWaXNpdG9yKCkgPSBkZWZhdWx0OworCisgICAgTWFya1N0YWNrQXJyYXkmIGNv
bGxlY3Rvck1hcmtTdGFjaygpIHsgcmV0dXJuIG1fY29sbGVjdG9yU3RhY2s7IH0KKyAgICBNYXJr
U3RhY2tBcnJheSYgbXV0YXRvck1hcmtTdGFjaygpIHsgcmV0dXJuIG1fbXV0YXRvclN0YWNrOyB9
CisgICAgY29uc3QgTWFya1N0YWNrQXJyYXkmIGNvbGxlY3Rvck1hcmtTdGFjaygpIGNvbnN0IHsg
cmV0dXJuIG1fY29sbGVjdG9yU3RhY2s7IH0KKyAgICBjb25zdCBNYXJrU3RhY2tBcnJheSYgbXV0
YXRvck1hcmtTdGFjaygpIGNvbnN0IHsgcmV0dXJuIG1fbXV0YXRvclN0YWNrOyB9CisKKyAgICBi
b29sIGlzRW1wdHkoKSB7IHJldHVybiBtX2NvbGxlY3RvclN0YWNrLmlzRW1wdHkoKSAmJiBtX211
dGF0b3JTdGFjay5pc0VtcHR5KCk7IH0KKworICAgIFZNJiB2bSgpOworICAgIGNvbnN0IFZNJiB2
bSgpIGNvbnN0OworICAgIEhlYXAqIGhlYXAoKSBjb25zdDsKKworICAgIHZpcnR1YWwgdm9pZCBh
cHBlbmRfQ29uc2VydmF0aXZlUm9vdHMoY29uc3QgQ29uc2VydmF0aXZlUm9vdHMmKSA9IDA7CisK
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBUcmFpdHM+IHZvaWQgYXBwZW5kKGNv
bnN0IFdyaXRlQmFycmllckJhc2U8VCwgVHJhaXRzPiYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFQsIHR5cGVuYW1lIFRyYWl0cz4gdm9pZCBhcHBlbmRIaWRkZW4oY29uc3QgV3JpdGVCYXJyaWVy
QmFzZTxULCBUcmFpdHM+Jik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSXRlcmF0b3I+IHZvaWQg
YXBwZW5kKEl0ZXJhdG9yIGJlZ2luICwgSXRlcmF0b3IgZW5kKTsKKyAgICBBTFdBWVNfSU5MSU5F
IHZvaWQgYXBwZW5kVmFsdWVzKGNvbnN0IFdyaXRlQmFycmllckJhc2U8VW5rbm93biwgUmF3VmFs
dWVUcmFpdHM8VW5rbm93bj4+Kiwgc2l6ZV90IGNvdW50KTsKKyAgICBBTFdBWVNfSU5MSU5FIHZv
aWQgYXBwZW5kVmFsdWVzSGlkZGVuKGNvbnN0IFdyaXRlQmFycmllckJhc2U8VW5rbm93biwgUmF3
VmFsdWVUcmFpdHM8VW5rbm93bj4+Kiwgc2l6ZV90IGNvdW50KTsKKworICAgIC8vIFRoZXNlIGRv
bid0IHJlcXVpcmUgeW91IHRvIHByb3ZlIHRoYXQgeW91IGhhdmUgYSBXcml0ZUJhcnJpZXI8Pi4g
VGhhdCBtYWtlcyBzZW5zZQorICAgIC8vIGZvcjoKKyAgICAvLworICAgIC8vIC0gcm9vdHMuCisg
ICAgLy8gLSBzb3BoaXN0aWNhdGVkIGRhdGEgc3RydWN0dXJlcyB0aGF0IGJhcnJpZXIgdGhyb3Vn
aCBvdGhlciBtZWFucyAobGlrZSBERkc6OlBsYW4gYW5kCisgICAgLy8gICBmcmllbmRzKS4KKyAg
ICAvLworICAgIC8vIElmIHlvdSBhcmUgbm90IGEgcm9vdCBhbmQgeW91IGRvbid0IGtub3cgd2hh
dCBraW5kIG9mIGJhcnJpZXIgeW91IGhhdmUsIHRoZW4geW91CisgICAgLy8gc2hvdWxkbid0IGNh
bGwgdGhlc2UgbWV0aG9kcy4KKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgYXBwZW5kVW5iYXJyaWVy
ZWQoSlNWYWx1ZSk7CisgICAgQUxXQVlTX0lOTElORSB2b2lkIGFwcGVuZFVuYmFycmllcmVkKEpT
VmFsdWUqLCBzaXplX3QpOworICAgIEFMV0FZU19JTkxJTkUgdm9pZCBhcHBlbmRVbmJhcnJpZXJl
ZChKU0NlbGwqIGNlbGwpCisgICAgeworICAgICAgICBpZiAoIWNlbGwpCisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIGFwcGVuZFVuYmFycmllcmVkSW1wbChjZWxsKTsKKyAgICB9CisgICAg
dmlydHVhbCB2b2lkIGFwcGVuZFVuYmFycmllcmVkSW1wbChKU0NlbGwqKSA9IDA7CisKKyAgICB2
aXJ0dWFsIGJvb2wgYWRkT3BhcXVlUm9vdCh2b2lkKikgPSAwOyAvLyBSZXR1cm5zIHRydWUgaWYg
dGhlIHJvb3Qgd2FzIG5ldy4KKyAgICB2aXJ0dWFsIGJvb2wgY29udGFpbnNPcGFxdWVSb290KHZv
aWQqKSBjb25zdCA9IDA7CisKKyAgICB2aXJ0dWFsIGJvb2wgaXNGaXJzdFZpc2l0KCkgY29uc3Qg
PSAwOyAvLyBtbGFtIEZJWE1FCisKKyAgICB2aXJ0dWFsIGJvb2wgaXNNYXJrZWQoY29uc3Qgdm9p
ZCopIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNNYXJrZWQoTWFya2VkQmxvY2smLCBI
ZWFwQ2VsbCopIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNNYXJrZWQoUHJlY2lzZUFs
bG9jYXRpb24mLCBIZWFwQ2VsbCopIGNvbnN0ID0gMDsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFQ+CisgICAgdm9pZCBhcHBlbmQoY29uc3QgV2VhazxUPiYgd2Vhayk7CisKKyAgICBBTFdBWVNf
SU5MSU5FIHZvaWQgYXBwZW5kSGlkZGVuVW5iYXJyaWVyZWQoSlNWYWx1ZSk7CisgICAgQUxXQVlT
X0lOTElORSB2b2lkIGFwcGVuZEhpZGRlblVuYmFycmllcmVkKEpTQ2VsbCogY2VsbCkKKyAgICB7
CisgICAgICAgIGlmICghY2VsbCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgYXBwZW5k
SGlkZGVuVW5iYXJyaWVyZWRJbXBsKGNlbGwpOworICAgIH0KKyAgICB2aXJ0dWFsIHZvaWQgYXBw
ZW5kSGlkZGVuVW5iYXJyaWVyZWRJbXBsKEpTQ2VsbCopID0gMDsKKworICAgIHNpemVfdCB2aXNp
dENvdW50KCkgY29uc3QgeyByZXR1cm4gbV92aXNpdENvdW50OyB9CisKKyAgICB2b2lkIGFkZFRv
VmlzaXRDb3VudChzaXplX3QgdmFsdWUpIHsgbV92aXNpdENvdW50ICs9IHZhbHVlOyB9CisKKyAg
ICB2aXJ0dWFsIHZvaWQgYWRkUGFyYWxsZWxDb25zdHJhaW50VGFzayhSZWZQdHI8U2hhcmVkVGFz
azx2b2lkKEFic3RyYWN0U2xvdFZpc2l0b3ImKT4+KSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQg
bWFya0F1eGlsaWFyeShjb25zdCB2b2lkKiBiYXNlKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQg
cmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKHNpemVfdCkgPSAwOworI2lmIEVOQUJMRShSRVNPVVJD
RV9VU0FHRSkKKyAgICB2aXJ0dWFsIHZvaWQgcmVwb3J0RXh0ZXJuYWxNZW1vcnlWaXNpdGVkKHNp
emVfdCkgPSAwOworI2VuZGlmCisKKyAgICB2aXJ0dWFsIHZvaWQgZHVtcChQcmludFN0cmVhbSYp
IGNvbnN0ID0gMDsKKworICAgIFJvb3RNYXJrUmVhc29uIHJvb3RNYXJrUmVhc29uKCkgY29uc3Qg
eyByZXR1cm4gc3RhdGljX2Nhc3Q8Um9vdE1hcmtSZWFzb24+KG1fcm9vdE1hcmtSZWFzb24pOyB9
CisgICAgdm9pZCBzZXRSb290TWFya1JlYXNvbihSb290TWFya1JlYXNvbiByZWFzb24pIHsgbV9y
b290TWFya1JlYXNvbiA9IHJlYXNvbjsgfQorCisgICAgdmlydHVhbCBib29sIG11dGF0b3JJc1N0
b3BwZWQoKSBjb25zdCA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgZGlkUmFjZShjb25zdCBWaXNp
dFJhY2VLZXkmKSA9IDA7CisgICAgdm9pZCBkaWRSYWNlKEpTQ2VsbCogY2VsbCwgY29uc3QgY2hh
ciogcmVhc29uKSB7IGRpZFJhY2UoVmlzaXRSYWNlS2V5KGNlbGwsIHJlYXNvbikpOyB9CisKKyAg
ICB2aXJ0dWFsIHZvaWQgdmlzaXRBc0NvbnN0cmFpbnQoY29uc3QgSlNDZWxsKikgPSAwOworCisg
ICAgY29uc3QgY2hhciogY29kZU5hbWUoKSBjb25zdCB7IHJldHVybiBtX2NvZGVOYW1lLmRhdGEo
KTsgfQorCitwcm90ZWN0ZWQ6CisgICAgaW5saW5lIEFic3RyYWN0U2xvdFZpc2l0b3IoSGVhcCYs
IENTdHJpbmcgY29kZU5hbWUpOworCisgICAgSGVhcENlbGwqIHBhcmVudENlbGwoKSBjb25zdDsK
KyAgICB2b2lkIHJlc2V0KCk7CisKKyAgICBNYXJrU3RhY2tBcnJheSBtX2NvbGxlY3RvclN0YWNr
OworICAgIE1hcmtTdGFja0FycmF5IG1fbXV0YXRvclN0YWNrOworCisgICAgc2l6ZV90IG1fdmlz
aXRDb3VudCB7IDAgfTsKKworICAgIEhlYXAmIG1faGVhcDsKKyAgICBDb250ZXh0KiBtX2NvbnRl
eHQgeyBudWxscHRyIH07CisgICAgQ1N0cmluZyBtX2NvZGVOYW1lOworCisgICAgUm9vdE1hcmtS
ZWFzb25TdG9yYWdlIG1fcm9vdE1hcmtSZWFzb24geyBSb290TWFya1JlYXNvbjo6Tm9uZSB9Owor
ICAgIGJvb2wgbV9zdXBwcmVzc1ZlcmlmaWVyIHsgZmFsc2UgfTsKKworICAgIE1hcmtpbmdDb25z
dHJhaW50KiBtX2N1cnJlbnRDb25zdHJhaW50IHsgbnVsbHB0ciB9OworICAgIE1hcmtpbmdDb25z
dHJhaW50U29sdmVyKiBtX2N1cnJlbnRTb2x2ZXIgeyBudWxscHRyIH07CisKKyAgICBmcmllbmQg
Y2xhc3MgTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXI7Cit9OworCitjbGFzcyBTZXRSb290TWFya1Jl
YXNvblNjb3BlIHsKK3B1YmxpYzoKKyAgICBTZXRSb290TWFya1JlYXNvblNjb3BlKEFic3RyYWN0
U2xvdFZpc2l0b3ImIHZpc2l0b3IsIEFic3RyYWN0U2xvdFZpc2l0b3I6OlJvb3RNYXJrUmVhc29u
IHJlYXNvbikKKyAgICAgICAgOiBtX3Zpc2l0b3IodmlzaXRvcikKKyAgICAgICAgLCBtX3ByZXZp
b3VzUmVhc29uKHZpc2l0b3Iucm9vdE1hcmtSZWFzb24oKSkKKyAgICB7CisgICAgICAgIG1fdmlz
aXRvci5zZXRSb290TWFya1JlYXNvbihyZWFzb24pOworICAgIH0KKworICAgIH5TZXRSb290TWFy
a1JlYXNvblNjb3BlKCkKKyAgICB7CisgICAgICAgIG1fdmlzaXRvci5zZXRSb290TWFya1JlYXNv
bihtX3ByZXZpb3VzUmVhc29uKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgQWJzdHJhY3RTbG90
VmlzaXRvciYgbV92aXNpdG9yOworICAgIEFic3RyYWN0U2xvdFZpc2l0b3I6OlJvb3RNYXJrUmVh
c29uIG1fcHJldmlvdXNSZWFzb247Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Fic3RyYWN0U2xvdFZpc2l0b3JJbmxpbmVzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQWJzdHJhY3RTbG90VmlzaXRv
cklubGluZXMuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9B
YnN0cmFjdFNsb3RWaXNpdG9ySW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTM2
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdt
YSBvbmNlCisKKyNpbmNsdWRlICJBYnN0cmFjdFNsb3RWaXNpdG9yLmgiCisjaW5jbHVkZSAiSGVh
cC5oIgorI2luY2x1ZGUgIldlYWtJbmxpbmVzLmgiCisjaW5jbHVkZSAiV3JpdGVCYXJyaWVyLmgi
CisKK25hbWVzcGFjZSBKU0MgeworCitpbmxpbmUgQWJzdHJhY3RTbG90VmlzaXRvcjo6Q29udGV4
dDo6Q29udGV4dChBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBIZWFwQ2VsbCogY2VsbCkK
KyAgICA6IG1fdmlzaXRvcih2aXNpdG9yKQorICAgICwgbV9jZWxsKGNlbGwpCit7CisgICAgbV9w
cmV2aW91cyA9IG1fdmlzaXRvci5tX2NvbnRleHQ7CisgICAgbV92aXNpdG9yLm1fY29udGV4dCA9
IHRoaXM7Cit9CisKK2lubGluZSBBYnN0cmFjdFNsb3RWaXNpdG9yOjpDb250ZXh0Ojp+Q29udGV4
dCgpCit7CisgICAgbV92aXNpdG9yLm1fY29udGV4dCA9IG1fcHJldmlvdXM7Cit9CisKK2lubGlu
ZSBBYnN0cmFjdFNsb3RWaXNpdG9yOjpBYnN0cmFjdFNsb3RWaXNpdG9yKEhlYXAmIGhlYXAsIENT
dHJpbmcgY29kZU5hbWUpCisgICAgOiBtX2hlYXAoaGVhcCkKKyAgICAsIG1fY29kZU5hbWUoY29k
ZU5hbWUpCit7Cit9CisKK2lubGluZSBIZWFwKiBBYnN0cmFjdFNsb3RWaXNpdG9yOjpoZWFwKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gJm1faGVhcDsKK30KKworaW5saW5lIFZNJiBBYnN0cmFjdFNs
b3RWaXNpdG9yOjp2bSgpCit7CisgICAgcmV0dXJuIG1faGVhcC52bSgpOworfQorCitpbmxpbmUg
Y29uc3QgVk0mIEFic3RyYWN0U2xvdFZpc2l0b3I6OnZtKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bV9oZWFwLnZtKCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitBTFdBWVNfSU5MSU5FIHZv
aWQgQWJzdHJhY3RTbG90VmlzaXRvcjo6YXBwZW5kKGNvbnN0IFdlYWs8VD4mIHdlYWspCit7Cisg
ICAgYXBwZW5kVW5iYXJyaWVyZWQod2Vhay5nZXQoKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1l
IFQsIHR5cGVuYW1lIFRyYWl0cz4KK0FMV0FZU19JTkxJTkUgdm9pZCBBYnN0cmFjdFNsb3RWaXNp
dG9yOjphcHBlbmQoY29uc3QgV3JpdGVCYXJyaWVyQmFzZTxULCBUcmFpdHM+JiBzbG90KQorewor
ICAgIGFwcGVuZFVuYmFycmllcmVkKHNsb3QuZ2V0KCkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBULCB0eXBlbmFtZSBUcmFpdHM+CitBTFdBWVNfSU5MSU5FIHZvaWQgQWJzdHJhY3RTbG90Vmlz
aXRvcjo6YXBwZW5kSGlkZGVuKGNvbnN0IFdyaXRlQmFycmllckJhc2U8VCwgVHJhaXRzPiYgc2xv
dCkKK3sKKyAgICBhcHBlbmRIaWRkZW5VbmJhcnJpZXJlZChzbG90LmdldCgpKTsKK30KKworQUxX
QVlTX0lOTElORSB2b2lkIEFic3RyYWN0U2xvdFZpc2l0b3I6OmFwcGVuZEhpZGRlblVuYmFycmll
cmVkKEpTVmFsdWUgdmFsdWUpCit7CisgICAgaWYgKHZhbHVlLmlzQ2VsbCgpKQorICAgICAgICBh
cHBlbmRIaWRkZW5VbmJhcnJpZXJlZCh2YWx1ZS5hc0NlbGwoKSk7Cit9CisKK3RlbXBsYXRlPHR5
cGVuYW1lIEl0ZXJhdG9yPgorQUxXQVlTX0lOTElORSB2b2lkIEFic3RyYWN0U2xvdFZpc2l0b3I6
OmFwcGVuZChJdGVyYXRvciBiZWdpbiwgSXRlcmF0b3IgZW5kKQoreworICAgIGZvciAoYXV0byBp
dCA9IGJlZ2luOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgIGFwcGVuZCgqaXQpOworfQorCitB
TFdBWVNfSU5MSU5FIHZvaWQgQWJzdHJhY3RTbG90VmlzaXRvcjo6YXBwZW5kVmFsdWVzKGNvbnN0
IFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4qIGJhcnJpZXJzLCBzaXplX3QgY291bnQpCit7Cisg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKQorICAgICAgICBhcHBlbmQoYmFy
cmllcnNbaV0pOworfQorCitBTFdBWVNfSU5MSU5FIHZvaWQgQWJzdHJhY3RTbG90VmlzaXRvcjo6
YXBwZW5kVmFsdWVzSGlkZGVuKGNvbnN0IFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4qIGJhcnJp
ZXJzLCBzaXplX3QgY291bnQpCit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3VudDsg
KytpKQorICAgICAgICBhcHBlbmRIaWRkZW4oYmFycmllcnNbaV0pOworfQorCitBTFdBWVNfSU5M
SU5FIHZvaWQgQWJzdHJhY3RTbG90VmlzaXRvcjo6YXBwZW5kVW5iYXJyaWVyZWQoSlNWYWx1ZSB2
YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUuaXNDZWxsKCkpCisgICAgICAgIGFwcGVuZFVuYmFycmll
cmVkKHZhbHVlLmFzQ2VsbCgpKTsKK30KKworQUxXQVlTX0lOTElORSB2b2lkIEFic3RyYWN0U2xv
dFZpc2l0b3I6OmFwcGVuZFVuYmFycmllcmVkKEpTVmFsdWUqIHNsb3QsIHNpemVfdCBjb3VudCkK
K3sKKyAgICBmb3IgKHNpemVfdCBpID0gY291bnQ7IGktLTspCisgICAgICAgIGFwcGVuZFVuYmFy
cmllcmVkKHNsb3RbaV0pOworfQorCitBTFdBWVNfSU5MSU5FIEhlYXBDZWxsKiBBYnN0cmFjdFNs
b3RWaXNpdG9yOjpwYXJlbnRDZWxsKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fY29udGV4dCkKKyAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIG1fY29udGV4dC0+Y2VsbCgpOworfQor
CitBTFdBWVNfSU5MSU5FIHZvaWQgQWJzdHJhY3RTbG90VmlzaXRvcjo6cmVzZXQoKQoreworICAg
IG1fdmlzaXRDb3VudCA9IDA7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvSGFuZGxlU2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9IYW5kbGVTZXQuY3BwCShyZXZpc2lvbiAyNzIyOTcpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IYW5kbGVTZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC01Niw3ICs1Niw5IEBAIHZvaWQgSGFuZGxlU2V0Ojpncm93KCkKICAgICB9CiB9CiAKLXZvaWQg
SGFuZGxlU2V0Ojp2aXNpdFN0cm9uZ0hhbmRsZXMoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3Rl
bXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+CisvL3ZvaWQgSGFuZGxlU2V0Ojp2aXNpdFN0cm9uZ0hh
bmRsZXMoVmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgSGFuZGxlU2V0Ojp2aXNpdFN0cm9uZ0hhbmRs
ZXMxKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgTm9kZSogZW5kID0gbV9z
dHJvbmdMaXN0LmVuZCgpOwogICAgIGZvciAoTm9kZSogbm9kZSA9IG1fc3Ryb25nTGlzdC5iZWdp
bigpOyBub2RlICE9IGVuZDsgbm9kZSA9IG5vZGUtPm5leHQoKSkgewpAQCAtNjcsNiArNjksOSBA
QCB2b2lkIEhhbmRsZVNldDo6dmlzaXRTdHJvbmdIYW5kbGVzKFNsb3RWCiAgICAgfQogfQogCisv
L3RlbXBsYXRlIHZvaWQgSGFuZGxlU2V0Ojp2aXNpdFN0cm9uZ0hhbmRsZXMoU2xvdFZpc2l0b3Im
KTsKKy8vdGVtcGxhdGUgdm9pZCBIYW5kbGVTZXQ6OnZpc2l0U3Ryb25nSGFuZGxlcyhWZXJpZmll
clNsb3RWaXNpdG9yJik7CisKIHZvaWQgSGFuZGxlU2V0Ojp3cml0ZUJhcnJpZXIoSGFuZGxlU2xv
dCBzbG90LCBjb25zdCBKU1ZhbHVlJiB2YWx1ZSkKIHsKICAgICBpZiAoIXZhbHVlID09ICEqc2xv
dCAmJiBzbG90LT5pc0NlbGwoKSA9PSB2YWx1ZS5pc0NlbGwoKSkKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0hhbmRsZVNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0hhbmRsZVNldC5oCShyZXZpc2lvbiAyNzIyOTcpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9IYW5kbGVTZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsMTAgKzM1
LDExIEBACiAKIG5hbWVzcGFjZSBKU0MgewogCitjbGFzcyBBYnN0cmFjdFNsb3RWaXNpdG9yOwog
Y2xhc3MgSGFuZGxlU2V0OwogY2xhc3MgVk07CiBjbGFzcyBKU1ZhbHVlOwotY2xhc3MgU2xvdFZp
c2l0b3I7CisvL2NsYXNzIFNsb3RWaXNpdG9yOwogCiBjbGFzcyBIYW5kbGVOb2RlIHsKIHB1Ymxp
YzoKQEAgLTczLDcgKzc0LDggQEAgcHVibGljOgogICAgIEhhbmRsZVNsb3QgYWxsb2NhdGUoKTsK
ICAgICB2b2lkIGRlYWxsb2NhdGUoSGFuZGxlU2xvdCk7CiAKLSAgICB2b2lkIHZpc2l0U3Ryb25n
SGFuZGxlcyhTbG90VmlzaXRvciYpOworLy8gICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4g
dm9pZCB2aXNpdFN0cm9uZ0hhbmRsZXMoVmlzaXRvciYpOworICAgIHZvaWQgdmlzaXRTdHJvbmdI
YW5kbGVzMShBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSB2
b2lkIHdyaXRlQmFycmllcihIYW5kbGVTbG90LCBjb25zdCBKU1ZhbHVlJik7CiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCShyZXZpc2lvbiAyNzIyOTcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzIsNiArNzIs
NyBAQAogI2luY2x1ZGUgIlR5cGVQcm9maWxlci5oIgogI2luY2x1ZGUgIlR5cGVQcm9maWxlckxv
Zy5oIgogI2luY2x1ZGUgIlZNLmgiCisjaW5jbHVkZSAiVmVyaWZpZXJTbG90VmlzaXRvcklubGlu
ZXMuaCIKICNpbmNsdWRlICJXZWFrTWFwSW1wbElubGluZXMuaCIKICNpbmNsdWRlICJXZWFrU2V0
SW5saW5lcy5oIgogI2luY2x1ZGUgPGFsZ29yaXRobT4KQEAgLTk2LDYgKzk3LDkgQEAKIAogbmFt
ZXNwYWNlIEpTQyB7CiAKK3Vuc2lnbmVkIG1sYW1UaW1lID0gMDsKK2Jvb2wgbWxhbVZlcmJvc2Ug
PSBmYWxzZTsKKwogbmFtZXNwYWNlIHsKIAogc3RhdGljIGNvbnN0ZXhwciBib29sIHZlcmJvc2VT
dG9wID0gZmFsc2U7CkBAIC02NDQsMTggKzY0OCwxOCBAQCB2b2lkIEhlYXA6OmNvbXBsZXRlQWxs
SklUUGxhbnMoKQogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgotdm9pZCBIZWFwOjppdGVy
YXRlRXhlY3V0aW5nQW5kQ29tcGlsaW5nQ29kZUJsb2Nrcyhjb25zdCBGdW5jJiBmdW5jKQordm9p
ZCBIZWFwOjppdGVyYXRlRXhlY3V0aW5nQW5kQ29tcGlsaW5nQ29kZUJsb2NrcyhBYnN0cmFjdFNs
b3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBGdW5jJiBmdW5jKQogewogICAgIG1fY29kZUJsb2Nr
cy0+aXRlcmF0ZUN1cnJlbnRseUV4ZWN1dGluZyhmdW5jKTsKICAgICBpZiAoT3B0aW9uczo6dXNl
SklUKCkpCi0gICAgICAgIERGRzo6aXRlcmF0ZUNvZGVCbG9ja3NGb3JHQyhtX3ZtLCBmdW5jKTsK
KyAgICAgICAgREZHOjppdGVyYXRlQ29kZUJsb2Nrc0ZvckdDKHZpc2l0b3IsIG1fdm0sIGZ1bmMp
OwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgotdm9pZCBIZWFwOjppdGVyYXRlRXhlY3V0
aW5nQW5kQ29tcGlsaW5nQ29kZUJsb2Nrc1dpdGhvdXRIb2xkaW5nTG9ja3MoY29uc3QgRnVuYyYg
ZnVuYykKK3ZvaWQgSGVhcDo6aXRlcmF0ZUV4ZWN1dGluZ0FuZENvbXBpbGluZ0NvZGVCbG9ja3NX
aXRob3V0SG9sZGluZ0xvY2tzKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IEZ1
bmMmIGZ1bmMpCiB7CiAgICAgVmVjdG9yPENvZGVCbG9jayosIDI1Nj4gY29kZUJsb2NrczsKLSAg
ICBpdGVyYXRlRXhlY3V0aW5nQW5kQ29tcGlsaW5nQ29kZUJsb2NrcygKKyAgICBpdGVyYXRlRXhl
Y3V0aW5nQW5kQ29tcGlsaW5nQ29kZUJsb2Nrcyh2aXNpdG9yLAogICAgICAgICBbJl0gKENvZGVC
bG9jayogY29kZUJsb2NrKSB7CiAgICAgICAgICAgICBjb2RlQmxvY2tzLmFwcGVuZChjb2RlQmxv
Y2spOwogICAgICAgICB9KTsKQEAgLTczMywxMyArNzM3LDIxIEBAIHZvaWQgSGVhcDo6cmVtb3Zl
RGVhZENvbXBpbGVyV29ya2xpc3RFbnQKICNlbmRpZgogfQogCi1ib29sIEhlYXA6OmlzQW5hbHl6
aW5nSGVhcCgpIGNvbnN0Ci17Ci0gICAgSGVhcFByb2ZpbGVyKiBoZWFwUHJvZmlsZXIgPSBtX3Zt
LmhlYXBQcm9maWxlcigpOwotICAgIGlmIChVTkxJS0VMWShoZWFwUHJvZmlsZXIpKQotICAgICAg
ICByZXR1cm4gaGVhcFByb2ZpbGVyLT5hY3RpdmVIZWFwQW5hbHl6ZXIoKTsKLSAgICByZXR1cm4g
ZmFsc2U7Ci19CisvL2Jvb2wgSGVhcDo6aXNBbmFseXppbmdIZWFwKCkgY29uc3QKKy8veworLy8g
ICAgSGVhcFByb2ZpbGVyKiBoZWFwUHJvZmlsZXIgPSBtX3ZtLmhlYXBQcm9maWxlcigpOworLy8g
ICAgaWYgKFVOTElLRUxZKGhlYXBQcm9maWxlcikpCisvLyAgICAgICAgcmV0dXJuIGhlYXBQcm9m
aWxlci0+YWN0aXZlSGVhcEFuYWx5emVyKCk7CisvLyAgICByZXR1cm4gZmFsc2U7CisvL30KKwor
Ly9IZWFwQW5hbHl6ZXIqIEhlYXA6OmhlYXBBbmFseXplcigpIGNvbnN0CisvL3sKKy8vICAgIEhl
YXBQcm9maWxlciogaGVhcFByb2ZpbGVyID0gbV92bS5oZWFwUHJvZmlsZXIoKTsKKy8vICAgIGlm
IChVTkxJS0VMWShoZWFwUHJvZmlsZXIpKQorLy8gICAgICAgIHJldHVybiBoZWFwUHJvZmlsZXIt
PmFjdGl2ZUhlYXBBbmFseXplcigpOworLy8gICAgcmV0dXJuIG51bGxwdHI7CisvL30KIAogc3Ry
dWN0IEdhdGhlckV4dHJhSGVhcERhdGEgOiBNYXJrZWRCbG9jazo6Q291bnRGdW5jdG9yIHsKICAg
ICBHYXRoZXJFeHRyYUhlYXBEYXRhKFZNJiB2bSwgSGVhcEFuYWx5emVyJiBhbmFseXplcikKQEAg
LTEwMzUsNiArMTA0Nyw3IEBAIHZvaWQgSGVhcDo6YWRkVG9SZW1lbWJlcmVkU2V0KGNvbnN0IEpT
Q2UKICAgICAvLyBnZXQgc2Nhbm5lZCBhZ2Fpbi4gSWYgd2UgbG9zZSB0aGVuIHNvbWVvbmUgZWxz
ZSB3aWxsIGJhcnJpZXIgdGhlIG9iamVjdCBhZ2Fpbi4gVGhhdCB3b3VsZAogICAgIC8vIGJlIHVu
Zm9ydHVuYXRlIGJ1dCBub3QgdGhlIGVuZCBvZiB0aGUgd29ybGQuCiAgICAgY2VsbC0+c2V0Q2Vs
bFN0YXRlKENlbGxTdGF0ZTo6UG9zc2libHlHcmV5KTsKKyAgICBpZiAobWxhbVZlcmJvc2UpIGRh
dGFMb2dMbigiICAgIG1sYW0gSGVhcDo6YWRkVG9SZW1lbWJlcmVkU2V0KCkgbV9tdXRhdG9yTWFy
a1N0YWNrLT5hcHBlbmQoY2VsbCk6IGNlbGwgIiwgUmF3UG9pbnRlcihjZWxsKSk7CiAgICAgbV9t
dXRhdG9yTWFya1N0YWNrLT5hcHBlbmQoY2VsbCk7CiB9CiAKQEAgLTEyNDUsNiArMTI1OCw5IEBA
IE5FVkVSX0lOTElORSBib29sIEhlYXA6OnJ1bk5vdFJ1bm5pbmdQaGEKIAogTkVWRVJfSU5MSU5F
IGJvb2wgSGVhcDo6cnVuQmVnaW5QaGFzZShHQ0NvbmR1Y3RvciBjb25uKQogeworICAgIG1sYW1W
ZXJib3NlID0gZ2V0ZW52KCJtbGFtVmVyYm9zZSIpOworICAgIG1sYW1UaW1lKys7CisgICAgaWYg
KG1sYW1WZXJib3NlKSBkYXRhTG9nTG4oIiAgICBtbGFtIDxnYyMiLCBtbGFtVGltZSwgIj4gSGVh
cDo6cnVuQmVnaW5QaGFzZSgpIGhlYXAubV9tdXRhdG9yTWFya1N0YWNrLT5zaXplKCkgIiwgbV9t
dXRhdG9yTWFya1N0YWNrLT5zaXplKCksICIgbV9yYWNlTWFya1N0YWNrLT5zaXplKCkgIiwgbV9y
YWNlTWFya1N0YWNrLT5zaXplKCkpOwogICAgIG1fY3VycmVudEdDU3RhcnRUaW1lID0gTW9ub3Rv
bmljVGltZTo6bm93KCk7CiAgICAgCiAgICAgewpAQCAtMTM0Niw2ICsxMzYyLDcgQEAgTkVWRVJf
SU5MSU5FIGJvb2wgSGVhcDo6cnVuQmVnaW5QaGFzZShHQwogCiBORVZFUl9JTkxJTkUgYm9vbCBI
ZWFwOjpydW5GaXhwb2ludFBoYXNlKEdDQ29uZHVjdG9yIGNvbm4pCiB7CisgICAgaWYgKG1sYW1W
ZXJib3NlKSBkYXRhTG9nTG4oIiAgICBtbGFtIEhlYXA6OnJ1bkZpeHBvaW50UGhhc2UoKSBoZWFw
Lm1fbXV0YXRvck1hcmtTdGFjay0+c2l6ZSgpICIsIG1fbXV0YXRvck1hcmtTdGFjay0+c2l6ZSgp
LCAiIG1fcmFjZU1hcmtTdGFjay0+c2l6ZSgpICIsIG1fcmFjZU1hcmtTdGFjay0+c2l6ZSgpKTsK
ICAgICBSRUxFQVNFX0FTU0VSVChjb25uID09IEdDQ29uZHVjdG9yOjpDb2xsZWN0b3IgfHwgbV9j
dXJyZW50VGhyZWFkU3RhdGUpOwogICAgIAogICAgIFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvciA9
ICptX2NvbGxlY3RvclNsb3RWaXNpdG9yOwpAQCAtMTQxMyw3ICsxNDMwLDcgQEAgTkVWRVJfSU5M
SU5FIGJvb2wgSGVhcDo6cnVuRml4cG9pbnRQaGFzZQogICAgIC8vIFRoaXMgZG9lc24ndCBoYXZl
IHRvIGNoZWNrIHRoZSBtdXRhdG9yIFNsb3RWaXNpdG9yIGJlY2F1c2UgdGhhdCBvbmUgYmVjb21l
cyBlbXB0eSBhZnRlciBldmVyeSBHQwogICAgIC8vIHdvcmsgaW5jcmVtZW50LCBzbyBpdCBtdXN0
IGJlIGVtcHR5IG5vdy4KICAgICBpZiAoc2xvdFZpc2l0b3IuZGlkUmVhY2hUZXJtaW5hdGlvbigp
KQotICAgICAgICByZXR1cm4gdHJ1ZTsgLy8gVGhpcyBpcyBsaWtlIHJlbG9vcGluZyB0byB0aGUg
dG9wIGlmIHJ1bkZpeHBvaW50UGhhc2UoKS4KKyAgICAgICAgcmV0dXJuIHRydWU7IC8vIFRoaXMg
aXMgbGlrZSByZWxvb3BpbmcgdG8gdGhlIHRvcCBvZiBydW5GaXhwb2ludFBoYXNlKCkuCiAgICAg
ICAgIAogICAgIGlmICghbV9zY2hlZHVsZXItPnNob3VsZFJlc3VtZSgpKQogICAgICAgICByZXR1
cm4gdHJ1ZTsKQEAgLTE0MzQsNiArMTQ1MSw3IEBAIE5FVkVSX0lOTElORSBib29sIEhlYXA6OnJ1
bkZpeHBvaW50UGhhc2UKIAogTkVWRVJfSU5MSU5FIGJvb2wgSGVhcDo6cnVuQ29uY3VycmVudFBo
YXNlKEdDQ29uZHVjdG9yIGNvbm4pCiB7CisgICAgaWYgKG1sYW1WZXJib3NlKSBkYXRhTG9nTG4o
IiAgICBtbGFtIEhlYXA6OnJ1bkNvbmN1cnJlbnRQaGFzZSgpIGhlYXAubV9tdXRhdG9yTWFya1N0
YWNrLT5zaXplKCkgIiwgbV9tdXRhdG9yTWFya1N0YWNrLT5zaXplKCksICIgbV9yYWNlTWFya1N0
YWNrLT5zaXplKCkgIiwgbV9yYWNlTWFya1N0YWNrLT5zaXplKCkpOwogICAgIFNsb3RWaXNpdG9y
JiBzbG90VmlzaXRvciA9ICptX2NvbGxlY3RvclNsb3RWaXNpdG9yOwogCiAgICAgc3dpdGNoIChj
b25uKSB7CkBAIC0xNDY0LDYgKzE0ODIsNyBAQCBORVZFUl9JTkxJTkUgYm9vbCBIZWFwOjpydW5D
b25jdXJyZW50UGhhCiAKIE5FVkVSX0lOTElORSBib29sIEhlYXA6OnJ1blJlbG9vcFBoYXNlKEdD
Q29uZHVjdG9yIGNvbm4pCiB7CisgICAgaWYgKG1sYW1WZXJib3NlKSBkYXRhTG9nTG4oIiAgICBt
bGFtIEhlYXA6OnJ1blJlbG9vcFBoYXNlKCkgaGVhcC5tX211dGF0b3JNYXJrU3RhY2stPnNpemUo
KSAiLCBtX211dGF0b3JNYXJrU3RhY2stPnNpemUoKSwgIiBtX3JhY2VNYXJrU3RhY2stPnNpemUo
KSAiLCBtX3JhY2VNYXJrU3RhY2stPnNpemUoKSk7CiAgICAgZGF0YUxvZ0lmKE9wdGlvbnM6Omxv
Z0dDKCksICJbR0M8IiwgUmF3UG9pbnRlcih0aGlzKSwgIj46ICIsIGdjQ29uZHVjdG9yU2hvcnRO
YW1lKGNvbm4pLCAiICIpOwogICAgIAogICAgIG1fc2NoZWR1bGVyLT5kaWRTdG9wKCk7CkBAIC0x
NDc2LDcgKzE0OTUsOSBAQCBORVZFUl9JTkxJTkUgYm9vbCBIZWFwOjpydW5SZWxvb3BQaGFzZShH
CiAKIE5FVkVSX0lOTElORSBib29sIEhlYXA6OnJ1bkVuZFBoYXNlKEdDQ29uZHVjdG9yIGNvbm4p
CiB7CisgICAgaWYgKG1sYW1WZXJib3NlKSBkYXRhTG9nTG4oIiAgICBtbGFtIEhlYXA6OnJ1bkVu
ZFBoYXNlKCkgaGVhcC5tX211dGF0b3JNYXJrU3RhY2stPnNpemUoKSAiLCBtX211dGF0b3JNYXJr
U3RhY2stPnNpemUoKSwgIiBtX3JhY2VNYXJrU3RhY2stPnNpemUoKSAiLCBtX3JhY2VNYXJrU3Rh
Y2stPnNpemUoKSk7CiAgICAgbV9zY2hlZHVsZXItPmVuZENvbGxlY3Rpb24oKTsKKyAgICBpZiAo
bWxhbVZlcmJvc2UpIGRhdGFMb2dMbigiICAgIG1sYW0gSGVhcDo6cnVuRW5kUGhhc2UoKSBTVEVQ
IDE6IGhlYXAubV9tdXRhdG9yTWFya1N0YWNrLT5zaXplKCkgIiwgbV9tdXRhdG9yTWFya1N0YWNr
LT5zaXplKCksICIgbV9yYWNlTWFya1N0YWNrLT5zaXplKCkgIiwgbV9yYWNlTWFya1N0YWNrLT5z
aXplKCkpOwogICAgICAgICAKICAgICB7CiAgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2so
bV9tYXJraW5nTXV0ZXgpOwpAQCAtMTQ4NCwxNCArMTUwNSwyNyBAQCBORVZFUl9JTkxJTkUgYm9v
bCBIZWFwOjpydW5FbmRQaGFzZShHQ0NvCiAgICAgICAgIG1fbWFya2luZ0NvbmRpdGlvblZhcmlh
YmxlLm5vdGlmeUFsbCgpOwogICAgIH0KICAgICBtX2hlbHBlckNsaWVudC5maW5pc2goKTsKKyAg
ICBpZiAobWxhbVZlcmJvc2UpIGRhdGFMb2dMbigiICAgIG1sYW0gSGVhcDo6cnVuRW5kUGhhc2Uo
KSBTVEVQIDI6IGhlYXAubV9tdXRhdG9yTWFya1N0YWNrLT5zaXplKCkgIiwgbV9tdXRhdG9yTWFy
a1N0YWNrLT5zaXplKCksICIgbV9yYWNlTWFya1N0YWNrLT5zaXplKCkgIiwgbV9yYWNlTWFya1N0
YWNrLT5zaXplKCkpOwogICAgIAotICAgIGl0ZXJhdGVFeGVjdXRpbmdBbmRDb21waWxpbmdDb2Rl
QmxvY2tzKAorICAgIFJFTEVBU0VfQVNTRVJUKG1fbXV0YXRvck1hcmtTdGFjay0+aXNFbXB0eSgp
KTsgLy8gbWxhbSBNYWtlIGludG8gQVNTRVJUCisgICAgUkVMRUFTRV9BU1NFUlQobV9yYWNlTWFy
a1N0YWNrLT5pc0VtcHR5KCkpOyAvLyBtbGFtIE1ha2UgaW50byBBU1NFUlQKKworICAgIFNsb3RW
aXNpdG9yJiBzbG90VmlzaXRvciA9ICptX2NvbGxlY3RvclNsb3RWaXNpdG9yOworICAgIGl0ZXJh
dGVFeGVjdXRpbmdBbmRDb21waWxpbmdDb2RlQmxvY2tzKHNsb3RWaXNpdG9yLAogICAgICAgICBb
Jl0gKENvZGVCbG9jayogY29kZUJsb2NrKSB7CiAgICAgICAgICAgICB3cml0ZUJhcnJpZXIoY29k
ZUJsb2NrKTsKICAgICAgICAgfSk7Ci0gICAgICAgIAorICAgIGlmIChtbGFtVmVyYm9zZSkgZGF0
YUxvZ0xuKCIgICAgbWxhbSBIZWFwOjpydW5FbmRQaGFzZSgpIFNURVAgMzogaGVhcC5tX211dGF0
b3JNYXJrU3RhY2stPnNpemUoKSAiLCBtX211dGF0b3JNYXJrU3RhY2stPnNpemUoKSwgIiBtX3Jh
Y2VNYXJrU3RhY2stPnNpemUoKSAiLCBtX3JhY2VNYXJrU3RhY2stPnNpemUoKSk7CisKICAgICB1
cGRhdGVPYmplY3RDb3VudHMoKTsKKyAgICBpZiAobWxhbVZlcmJvc2UpIGRhdGFMb2dMbigiICAg
IG1sYW0gSGVhcDo6cnVuRW5kUGhhc2UoKSBTVEVQIDQ6IGhlYXAubV9tdXRhdG9yTWFya1N0YWNr
LT5zaXplKCkgIiwgbV9tdXRhdG9yTWFya1N0YWNrLT5zaXplKCksICIgbV9yYWNlTWFya1N0YWNr
LT5zaXplKCkgIiwgbV9yYWNlTWFya1N0YWNrLT5zaXplKCkpOwogICAgIGVuZE1hcmtpbmcoKTsK
KyAgICBpZiAobWxhbVZlcmJvc2UpIGRhdGFMb2dMbigiICAgIG1sYW0gSGVhcDo6cnVuRW5kUGhh
c2UoKSBCRUZPUkUgdmVyaWZ5R0M6IGhlYXAubV9tdXRhdG9yTWFya1N0YWNrLT5zaXplKCkgIiwg
bV9tdXRhdG9yTWFya1N0YWNrLT5zaXplKCksICIgbV9yYWNlTWFya1N0YWNrLT5zaXplKCkgIiwg
bV9yYWNlTWFya1N0YWNrLT5zaXplKCkpOworCisgICAgLy8gbWxhbQorICAgIGlmIChVTkxJS0VM
WShPcHRpb25zOjp2ZXJpZnlHQygpKSkKKyAgICAgICAgdmVyaWZ5R0MoKTsKKyAgICAvLyBtbGFt
ICovCiAKICAgICBpZiAoVU5MSUtFTFkobV92ZXJpZmllcikpIHsKICAgICAgICAgbV92ZXJpZmll
ci0+Z2F0aGVyTGl2ZUNlbGxzKEhlYXBWZXJpZmllcjo6UGhhc2U6OkFmdGVyTWFya2luZyk7CkBA
IC0xNjQ3LDcgKzE2ODEsNyBAQCB2b2lkIEhlYXA6OnN0b3BUaGVQZXJpcGhlcnkoR0NDb25kdWN0
b3IgCiAjaWYgRU5BQkxFKEpJVCkKICAgICBpZiAoT3B0aW9uczo6dXNlSklUKCkpIHsKICAgICAg
ICAgRGVmZXJHQ0ZvckFXaGlsZSBhd2hpbGUoKnRoaXMpOwotICAgICAgICBpZiAoSklUV29ya2xp
c3Q6OmVuc3VyZUdsb2JhbFdvcmtsaXN0KCkuY29tcGxldGVBbGxGb3JWTShtX3ZtKQorICAgICAg
ICBpZiAoSklUV29ya2xpc3Q6OmVuc3VyZUdsb2JhbFdvcmtsaXN0KCkuY29tcGxldGVBbGxGb3JW
TShtX3ZtLCBtX2NvbGxlY3RvclNsb3RWaXNpdG9yLmdldCgpKQogICAgICAgICAgICAgJiYgY29u
biA9PSBHQ0NvbmR1Y3Rvcjo6Q29sbGVjdG9yKQogICAgICAgICAgICAgc2V0R0NEaWRKSVQoKTsK
ICAgICB9CkBAIC0yMTcwLDYgKzIyMDQsMTMgQEAgdm9pZCBIZWFwOjpzdXNwZW5kQ29tcGlsZXJU
aHJlYWRzKCkKIAogdm9pZCBIZWFwOjp3aWxsU3RhcnRDb2xsZWN0aW9uKCkKIHsKKyAgICAvLyBt
bGFtCisgICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OnZlcmlmeUdDKCkpKSB7CisgICAgICAgIG1f
dmVyaWZpZXJTbG90VmlzaXRvciA9IG1ha2VVbmlxdWU8VmVyaWZpZXJTbG90VmlzaXRvcj4oKnRo
aXMpOworICAgICAgICBSRUxFQVNFX0FTU0VSVCghbV9pc1ZlcmlmeWluZ0dDKTsgLy8gbWxhbSBU
RVNUIHNhbml0eSBjaGVjay4KKyAgICB9CisgICAgLy8gbWxhbSAqLworCiAgICAgZGF0YUxvZ0lm
KE9wdGlvbnM6OmxvZ0dDKCksICI9PiAiKTsKICAgICAKICAgICBpZiAoc2hvdWxkRG9GdWxsQ29s
bGVjdGlvbigpKSB7CkBAIC0yNjk3LDEzICsyNzM4LDE5IEBAIHZvaWQgSGVhcDo6ZGlkRnJlZUJs
b2NrKHNpemVfdCBjYXBhY2l0eSkKICNlbmRpZgogfQogCisvLyBtbGFtIEZJWE1FCiB2b2lkIEhl
YXA6OmFkZENvcmVDb25zdHJhaW50cygpCiB7CiAgICAgbV9jb25zdHJhaW50U2V0LT5hZGQoCiAg
ICAgICAgICJDcyIsICJDb25zZXJ2YXRpdmUgU2NhbiIsCi0gICAgICAgIFt0aGlzLCBsYXN0VmVy
c2lvbiA9IHN0YXRpY19jYXN0PHVpbnQ2NF90PigwKV0gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRv
cikgbXV0YWJsZSB7CisgICAgICAgIFt0aGlzLCBsYXN0VmVyc2lvbiA9IHN0YXRpY19jYXN0PHVp
bnQ2NF90PigwKV0gKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpIG11dGFibGUgewogICAg
ICAgICAgICAgYm9vbCBzaG91bGROb3RQcm9kdWNlV29yayA9IGxhc3RWZXJzaW9uID09IG1fcGhh
c2VWZXJzaW9uOwotICAgICAgICAgICAgaWYgKHNob3VsZE5vdFByb2R1Y2VXb3JrKQorCisgICAg
ICAgICAgICAvLyBGb3IgdGhlIEdDIFZlcmZpZXIsIHdlIHdvdWxkIGxpa2UgdG8gdXNlIHRoZSBp
ZGVudGljYWwgc2V0IG9mIGNvbnNlcnZhdGl2ZSByb290cworICAgICAgICAgICAgLy8gYXMgdGhl
IHJlYWwgR0MuIE90aGVyd2lzZSwgdGhlIEdDIHZlcmlmaWVyIG1heSByZXBvcnQgZmFsc2UgbmVn
YXRpdmVzIGR1ZSB0bworICAgICAgICAgICAgLy8gdmFyaWF0aW9ucyBpbiBzdGFjayB2YWx1ZXMu
IEZvciB0aGlzIHNhbWUgcmVhc29uLCB3ZSB3aWxsIHNraXAgdGhpcyBjb25zdHJhaW50CisgICAg
ICAgICAgICAvLyB3aGVuIHdlJ3JlIHJ1bm5pbmcgdGhlIEdDIHZlcmlmaWNhdGlvbiBpbiB0aGUg
RW5kIHBoYXNlLgorICAgICAgICAgICAgaWYgKHNob3VsZE5vdFByb2R1Y2VXb3JrIHx8IG1faXNW
ZXJpZnlpbmdHQykKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAKICAgICAg
ICAgICAgIFRpbWluZ1Njb3BlIHByZUNvbnZlcmdlbmNlVGltaW5nU2NvcGUoKnRoaXMsICJDb25z
dHJhaW50OiBjb25zZXJ2YXRpdmUgc2NhbiIpOwpAQCAtMjcxOCwxMyArMjc2NSwxNyBAQCB2b2lk
IEhlYXA6OmFkZENvcmVDb25zdHJhaW50cygpCiAgICAgICAgICAgICAgICAgZ2F0aGVySlNTdGFj
a1Jvb3RzKGNvbnNlcnZhdGl2ZVJvb3RzKTsKICAgICAgICAgICAgICAgICBnYXRoZXJTY3JhdGNo
QnVmZmVyUm9vdHMoY29uc2VydmF0aXZlUm9vdHMpOwogCi0gICAgICAgICAgICAgICAgU2V0Um9v
dE1hcmtSZWFzb25TY29wZSByb290U2NvcGUoc2xvdFZpc2l0b3IsIFNsb3RWaXNpdG9yOjpSb290
TWFya1JlYXNvbjo6Q29uc2VydmF0aXZlU2Nhbik7Ci0gICAgICAgICAgICAgICAgc2xvdFZpc2l0
b3IuYXBwZW5kKGNvbnNlcnZhdGl2ZVJvb3RzKTsKKyAgICAgICAgICAgICAgICBTZXRSb290TWFy
a1JlYXNvblNjb3BlIHJvb3RTY29wZSh2aXNpdG9yLCBBYnN0cmFjdFNsb3RWaXNpdG9yOjpSb290
TWFya1JlYXNvbjo6Q29uc2VydmF0aXZlU2Nhbik7CisgICAgICAgICAgICAgICAgdmlzaXRvci5h
cHBlbmRfQ29uc2VydmF0aXZlUm9vdHMoY29uc2VydmF0aXZlUm9vdHMpOworICAgICAgICAgICAg
ICAgIGlmIChVTkxJS0VMWShtX3ZlcmlmaWVyU2xvdFZpc2l0b3IpKQorICAgICAgICAgICAgICAg
ICAgICBtX3ZlcmlmaWVyU2xvdFZpc2l0b3ItPmFwcGVuZF9Db25zZXJ2YXRpdmVSb290cyhjb25z
ZXJ2YXRpdmVSb290cyk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoT3B0aW9uczo6
dXNlSklUKCkpIHsKICAgICAgICAgICAgICAgICAvLyBKSVRTdHViUm91dGluZXMgbXVzdCBiZSB2
aXNpdGVkIGFmdGVyIHNjYW5uaW5nIENvbnNlcnZhdGl2ZVJvb3RzIHNpbmNlIEpJVFN0dWJSb3V0
aW5lcyBkZXBlbmQgb24gdGhlIGhvb2sgZXhlY3V0ZWQgZHVyaW5nIGdhdGhlcmluZyBDb25zZXJ2
YXRpdmVSb290cy4KLSAgICAgICAgICAgICAgICBTZXRSb290TWFya1JlYXNvblNjb3BlIHJvb3RT
Y29wZShzbG90VmlzaXRvciwgU2xvdFZpc2l0b3I6OlJvb3RNYXJrUmVhc29uOjpKSVRTdHViUm91
dGluZXMpOwotICAgICAgICAgICAgICAgIG1faml0U3R1YlJvdXRpbmVzLT50cmFjZU1hcmtlZFN0
dWJSb3V0aW5lcyhzbG90VmlzaXRvcik7CisgICAgICAgICAgICAgICAgU2V0Um9vdE1hcmtSZWFz
b25TY29wZSByb290U2NvcGUodmlzaXRvciwgQWJzdHJhY3RTbG90VmlzaXRvcjo6Um9vdE1hcmtS
ZWFzb246OkpJVFN0dWJSb3V0aW5lcyk7CisgICAgICAgICAgICAgICAgbV9qaXRTdHViUm91dGlu
ZXMtPnRyYWNlTWFya2VkU3R1YlJvdXRpbmVzMSh2aXNpdG9yKTsKKyAgICAgICAgICAgICAgICBp
ZiAoVU5MSUtFTFkobV92ZXJpZmllclNsb3RWaXNpdG9yKSkKKyAgICAgICAgICAgICAgICAgICAg
bV9qaXRTdHViUm91dGluZXMtPnRyYWNlTWFya2VkU3R1YlJvdXRpbmVzMSgqbV92ZXJpZmllclNs
b3RWaXNpdG9yKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICAgICAgbGFz
dFZlcnNpb24gPSBtX3BoYXNlVmVyc2lvbjsKQEAgLTI3MzMsOTIgKzI3ODQsOTIgQEAgdm9pZCBI
ZWFwOjphZGRDb3JlQ29uc3RyYWludHMoKQogICAgIAogICAgIG1fY29uc3RyYWludFNldC0+YWRk
KAogICAgICAgICAiTXNyIiwgIk1pc2MgU21hbGwgUm9vdHMiLAotICAgICAgICBbdGhpc10gKFNs
b3RWaXNpdG9yJiBzbG90VmlzaXRvcikgeworICAgICAgICBbdGhpc10gKEFic3RyYWN0U2xvdFZp
c2l0b3ImIHZpc2l0b3IpIHsKIAogI2lmIEpTQ19PQkpDX0FQSV9FTkFCTEVECi0gICAgICAgICAg
ICBzY2FuRXh0ZXJuYWxSZW1lbWJlcmVkU2V0KG1fdm0sIHNsb3RWaXNpdG9yKTsKKyAgICAgICAg
ICAgIHNjYW5FeHRlcm5hbFJlbWVtYmVyZWRTZXQobV92bSwgdmlzaXRvcik7CiAjZW5kaWYKICAg
ICAgICAgICAgIGlmIChtX3ZtLnNtYWxsU3RyaW5ncy5uZWVkc1RvQmVWaXNpdGVkKCptX2NvbGxl
Y3Rpb25TY29wZSkpIHsKLSAgICAgICAgICAgICAgICBTZXRSb290TWFya1JlYXNvblNjb3BlIHJv
b3RTY29wZShzbG90VmlzaXRvciwgU2xvdFZpc2l0b3I6OlJvb3RNYXJrUmVhc29uOjpTdHJvbmdS
ZWZlcmVuY2VzKTsKLSAgICAgICAgICAgICAgICBtX3ZtLnNtYWxsU3RyaW5ncy52aXNpdFN0cm9u
Z1JlZmVyZW5jZXMoc2xvdFZpc2l0b3IpOworICAgICAgICAgICAgICAgIFNldFJvb3RNYXJrUmVh
c29uU2NvcGUgcm9vdFNjb3BlKHZpc2l0b3IsIEFic3RyYWN0U2xvdFZpc2l0b3I6OlJvb3RNYXJr
UmVhc29uOjpTdHJvbmdSZWZlcmVuY2VzKTsKKyAgICAgICAgICAgICAgICBtX3ZtLnNtYWxsU3Ry
aW5ncy52aXNpdFN0cm9uZ1JlZmVyZW5jZXModmlzaXRvcik7CiAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBTZXRSb290TWFya1JlYXNv
blNjb3BlIHJvb3RTY29wZShzbG90VmlzaXRvciwgU2xvdFZpc2l0b3I6OlJvb3RNYXJrUmVhc29u
OjpQcm90ZWN0ZWRWYWx1ZXMpOworICAgICAgICAgICAgICAgIFNldFJvb3RNYXJrUmVhc29uU2Nv
cGUgcm9vdFNjb3BlKHZpc2l0b3IsIEFic3RyYWN0U2xvdFZpc2l0b3I6OlJvb3RNYXJrUmVhc29u
OjpQcm90ZWN0ZWRWYWx1ZXMpOwogICAgICAgICAgICAgICAgIGZvciAoYXV0byYgcGFpciA6IG1f
cHJvdGVjdGVkVmFsdWVzKQotICAgICAgICAgICAgICAgICAgICBzbG90VmlzaXRvci5hcHBlbmRV
bmJhcnJpZXJlZChwYWlyLmtleSk7CisgICAgICAgICAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5k
VW5iYXJyaWVyZWQocGFpci5rZXkpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAg
ICAgICAgICBpZiAobV9tYXJrTGlzdFNldCAmJiBtX21hcmtMaXN0U2V0LT5zaXplKCkpIHsKLSAg
ICAgICAgICAgICAgICBTZXRSb290TWFya1JlYXNvblNjb3BlIHJvb3RTY29wZShzbG90VmlzaXRv
ciwgU2xvdFZpc2l0b3I6OlJvb3RNYXJrUmVhc29uOjpDb25zZXJ2YXRpdmVTY2FuKTsKLSAgICAg
ICAgICAgICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlcjo6bWFya0xpc3RzKHNsb3RWaXNpdG9yLCAq
bV9tYXJrTGlzdFNldCk7CisgICAgICAgICAgICAgICAgU2V0Um9vdE1hcmtSZWFzb25TY29wZSBy
b290U2NvcGUodmlzaXRvciwgQWJzdHJhY3RTbG90VmlzaXRvcjo6Um9vdE1hcmtSZWFzb246OkNv
bnNlcnZhdGl2ZVNjYW4pOworICAgICAgICAgICAgICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyOjpt
YXJrTGlzdHModmlzaXRvciwgKm1fbWFya0xpc3RTZXQpOwogICAgICAgICAgICAgfQogCiAgICAg
ICAgICAgICBtX21hcmtlZEpTVmFsdWVSZWZBcnJheXMuZm9yRWFjaChbJl0gKE1hcmtlZEpTVmFs
dWVSZWZBcnJheSogYXJyYXkpIHsKLSAgICAgICAgICAgICAgICBhcnJheS0+dmlzaXRBZ2dyZWdh
dGUoc2xvdFZpc2l0b3IpOworICAgICAgICAgICAgICAgIGFycmF5LT52aXNpdEFnZ3JlZ2F0ZTEo
dmlzaXRvcik7CiAgICAgICAgICAgICB9KTsKIAogICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIFNldFJvb3RNYXJrUmVhc29uU2NvcGUgcm9vdFNjb3BlKHNsb3RWaXNpdG9yLCBTbG90Vmlz
aXRvcjo6Um9vdE1hcmtSZWFzb246OlZNRXhjZXB0aW9ucyk7Ci0gICAgICAgICAgICAgICAgc2xv
dFZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQobV92bS5leGNlcHRpb24oKSk7Ci0gICAgICAgICAg
ICAgICAgc2xvdFZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQobV92bS5sYXN0RXhjZXB0aW9uKCkp
OworICAgICAgICAgICAgICAgIFNldFJvb3RNYXJrUmVhc29uU2NvcGUgcm9vdFNjb3BlKHZpc2l0
b3IsIEFic3RyYWN0U2xvdFZpc2l0b3I6OlJvb3RNYXJrUmVhc29uOjpWTUV4Y2VwdGlvbnMpOwor
ICAgICAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQobV92bS5leGNlcHRpb24o
KSk7CisgICAgICAgICAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZChtX3ZtLmxhc3RF
eGNlcHRpb24oKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0sCiAgICAgICAgIENvbnN0cmFp
bnRWb2xhdGlsaXR5OjpHcmV5ZWRCeUV4ZWN1dGlvbik7CiAgICAgCiAgICAgbV9jb25zdHJhaW50
U2V0LT5hZGQoCiAgICAgICAgICJTaCIsICJTdHJvbmcgSGFuZGxlcyIsCi0gICAgICAgIFt0aGlz
XSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yKSB7Ci0gICAgICAgICAgICBTZXRSb290TWFya1Jl
YXNvblNjb3BlIHJvb3RTY29wZShzbG90VmlzaXRvciwgU2xvdFZpc2l0b3I6OlJvb3RNYXJrUmVh
c29uOjpTdHJvbmdIYW5kbGVzKTsKLSAgICAgICAgICAgIG1faGFuZGxlU2V0LnZpc2l0U3Ryb25n
SGFuZGxlcyhzbG90VmlzaXRvcik7CisgICAgICAgIFt0aGlzXSAoQWJzdHJhY3RTbG90VmlzaXRv
ciYgdmlzaXRvcikgeworICAgICAgICAgICAgU2V0Um9vdE1hcmtSZWFzb25TY29wZSByb290U2Nv
cGUodmlzaXRvciwgQWJzdHJhY3RTbG90VmlzaXRvcjo6Um9vdE1hcmtSZWFzb246OlN0cm9uZ0hh
bmRsZXMpOworICAgICAgICAgICAgbV9oYW5kbGVTZXQudmlzaXRTdHJvbmdIYW5kbGVzMSh2aXNp
dG9yKTsKICAgICAgICAgfSwKICAgICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHk6OkdyZXllZEJ5
RXhlY3V0aW9uKTsKICAgICAKICAgICBtX2NvbnN0cmFpbnRTZXQtPmFkZCgKICAgICAgICAgIkQi
LCAiRGVidWdnZXIiLAotICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvcikg
ewotICAgICAgICAgICAgU2V0Um9vdE1hcmtSZWFzb25TY29wZSByb290U2NvcGUoc2xvdFZpc2l0
b3IsIFNsb3RWaXNpdG9yOjpSb290TWFya1JlYXNvbjo6RGVidWdnZXIpOworICAgICAgICBbdGhp
c10gKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsKKyAgICAgICAgICAgIFNldFJvb3RN
YXJrUmVhc29uU2NvcGUgcm9vdFNjb3BlKHZpc2l0b3IsIEFic3RyYWN0U2xvdFZpc2l0b3I6OlJv
b3RNYXJrUmVhc29uOjpEZWJ1Z2dlcik7CiAKICNpZiBFTkFCTEUoU0FNUExJTkdfUFJPRklMRVIp
CiAgICAgICAgICAgICBpZiAoU2FtcGxpbmdQcm9maWxlciogc2FtcGxpbmdQcm9maWxlciA9IG1f
dm0uc2FtcGxpbmdQcm9maWxlcigpKSB7CiAgICAgICAgICAgICAgICAgYXV0byBsb2NrZXIgPSBo
b2xkTG9jayhzYW1wbGluZ1Byb2ZpbGVyLT5nZXRMb2NrKCkpOwogICAgICAgICAgICAgICAgIHNh
bXBsaW5nUHJvZmlsZXItPnByb2Nlc3NVbnZlcmlmaWVkU3RhY2tUcmFjZXMobG9ja2VyKTsKLSAg
ICAgICAgICAgICAgICBzYW1wbGluZ1Byb2ZpbGVyLT52aXNpdChzbG90VmlzaXRvcik7CisgICAg
ICAgICAgICAgICAgc2FtcGxpbmdQcm9maWxlci0+dmlzaXQodmlzaXRvcik7CiAgICAgICAgICAg
ICAgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkgPT0gR0NMb2dnaW5nOjpWZXJib3NlKQotICAgICAg
ICAgICAgICAgICAgICBkYXRhTG9nKCJTYW1wbGluZyBQcm9maWxlciBkYXRhOlxuIiwgc2xvdFZp
c2l0b3IpOworICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJTYW1wbGluZyBQcm9maWxlciBk
YXRhOlxuIiwgdmlzaXRvcik7CiAgICAgICAgICAgICB9CiAjZW5kaWYgLy8gRU5BQkxFKFNBTVBM
SU5HX1BST0ZJTEVSKQogCiAgICAgICAgICAgICBpZiAobV92bS50eXBlUHJvZmlsZXIoKSkKLSAg
ICAgICAgICAgICAgICBtX3ZtLnR5cGVQcm9maWxlckxvZygpLT52aXNpdChzbG90VmlzaXRvcik7
CisgICAgICAgICAgICAgICAgbV92bS50eXBlUHJvZmlsZXJMb2coKS0+dmlzaXQodmlzaXRvcik7
CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmIChhdXRvKiBzaGFkb3dDaGlja2VuID0gbV92
bS5zaGFkb3dDaGlja2VuKCkpCi0gICAgICAgICAgICAgICAgc2hhZG93Q2hpY2tlbi0+dmlzaXRD
aGlsZHJlbihzbG90VmlzaXRvcik7CisgICAgICAgICAgICAgICAgc2hhZG93Q2hpY2tlbi0+dmlz
aXRDaGlsZHJlbih2aXNpdG9yKTsKICAgICAgICAgfSwKICAgICAgICAgQ29uc3RyYWludFZvbGF0
aWxpdHk6OkdyZXllZEJ5RXhlY3V0aW9uKTsKICAgICAKICAgICBtX2NvbnN0cmFpbnRTZXQtPmFk
ZCgKICAgICAgICAgIldzIiwgIldlYWsgU2V0cyIsCi0gICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0
b3ImIHNsb3RWaXNpdG9yKSB7Ci0gICAgICAgICAgICBTZXRSb290TWFya1JlYXNvblNjb3BlIHJv
b3RTY29wZShzbG90VmlzaXRvciwgU2xvdFZpc2l0b3I6OlJvb3RNYXJrUmVhc29uOjpXZWFrU2V0
cyk7Ci0gICAgICAgICAgICBtX29iamVjdFNwYWNlLnZpc2l0V2Vha1NldHMoc2xvdFZpc2l0b3Ip
OworICAgICAgICBbdGhpc10gKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsKKyAgICAg
ICAgICAgIFNldFJvb3RNYXJrUmVhc29uU2NvcGUgcm9vdFNjb3BlKHZpc2l0b3IsIEFic3RyYWN0
U2xvdFZpc2l0b3I6OlJvb3RNYXJrUmVhc29uOjpXZWFrU2V0cyk7CisgICAgICAgICAgICBtX29i
amVjdFNwYWNlLnZpc2l0V2Vha1NldHMxKHZpc2l0b3IpOwogICAgICAgICB9LAogICAgICAgICBD
b25zdHJhaW50Vm9sYXRpbGl0eTo6R3JleWVkQnlNYXJraW5nKTsKICAgICAKICAgICBtX2NvbnN0
cmFpbnRTZXQtPmFkZCgKICAgICAgICAgIk8iLCAiT3V0cHV0IiwKLSAgICAgICAgW10gKFNsb3RW
aXNpdG9yJiBzbG90VmlzaXRvcikgewotICAgICAgICAgICAgVk0mIHZtID0gc2xvdFZpc2l0b3Iu
dm0oKTsKKyAgICAgICAgW10gKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsKKyAgICAg
ICAgICAgIFZNJiB2bSA9IHZpc2l0b3Iudm0oKTsKIAotICAgICAgICAgICAgYXV0byBjYWxsT3V0
cHV0Q29uc3RyYWludCA9IFtdIChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IsIEhlYXBDZWxsKiBo
ZWFwQ2VsbCwgSGVhcENlbGw6OktpbmQpIHsKLSAgICAgICAgICAgICAgICBTZXRSb290TWFya1Jl
YXNvblNjb3BlIHJvb3RTY29wZShzbG90VmlzaXRvciwgU2xvdFZpc2l0b3I6OlJvb3RNYXJrUmVh
c29uOjpPdXRwdXQpOwotICAgICAgICAgICAgICAgIFZNJiB2bSA9IHNsb3RWaXNpdG9yLnZtKCk7
CisgICAgICAgICAgICBhdXRvIGNhbGxPdXRwdXRDb25zdHJhaW50ID0gW10gKEFic3RyYWN0U2xv
dFZpc2l0b3ImIHZpc2l0b3IsIEhlYXBDZWxsKiBoZWFwQ2VsbCwgSGVhcENlbGw6OktpbmQpIHsK
KyAgICAgICAgICAgICAgICBTZXRSb290TWFya1JlYXNvblNjb3BlIHJvb3RTY29wZSh2aXNpdG9y
LCBBYnN0cmFjdFNsb3RWaXNpdG9yOjpSb290TWFya1JlYXNvbjo6T3V0cHV0KTsKKyAgICAgICAg
ICAgICAgICBWTSYgdm0gPSB2aXNpdG9yLnZtKCk7CiAgICAgICAgICAgICAgICAgSlNDZWxsKiBj
ZWxsID0gc3RhdGljX2Nhc3Q8SlNDZWxsKj4oaGVhcENlbGwpOwotICAgICAgICAgICAgICAgIGNl
bGwtPm1ldGhvZFRhYmxlKHZtKS0+dmlzaXRPdXRwdXRDb25zdHJhaW50cyhjZWxsLCBzbG90Vmlz
aXRvcik7CisgICAgICAgICAgICAgICAgY2VsbC0+bWV0aG9kVGFibGUodm0pLT52aXNpdE91dHB1
dENvbnN0cmFpbnRzKGNlbGwsIHZpc2l0b3IpOwogICAgICAgICAgICAgfTsKICAgICAgICAgICAg
IAogICAgICAgICAgICAgYXV0byBhZGQgPSBbJl0gKGF1dG8mIHNldCkgewotICAgICAgICAgICAg
ICAgIHNsb3RWaXNpdG9yLmFkZFBhcmFsbGVsQ29uc3RyYWludFRhc2soc2V0LmZvckVhY2hNYXJr
ZWRDZWxsSW5QYXJhbGxlbChjYWxsT3V0cHV0Q29uc3RyYWludCkpOworICAgICAgICAgICAgICAg
IHZpc2l0b3IuYWRkUGFyYWxsZWxDb25zdHJhaW50VGFzayhzZXQuZm9yRWFjaE1hcmtlZENlbGxJ
blBhcmFsbGVsKGNhbGxPdXRwdXRDb25zdHJhaW50KSk7CiAgICAgICAgICAgICB9OwogICAgICAg
ICAgICAgCiAgICAgICAgICAgICBhZGQodm0uZXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZXNXaXRo
Q29uc3RyYWludHMpOwpAQCAtMjgzMiwyMiArMjg4MywyMiBAQCB2b2lkIEhlYXA6OmFkZENvcmVD
b25zdHJhaW50cygpCiAgICAgaWYgKE9wdGlvbnM6OnVzZUpJVCgpKSB7CiAgICAgICAgIG1fY29u
c3RyYWludFNldC0+YWRkKAogICAgICAgICAgICAgIkR3IiwgIkRGRyBXb3JrbGlzdHMiLAotICAg
ICAgICAgICAgW3RoaXNdIChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IpIHsKLSAgICAgICAgICAg
ICAgICBTZXRSb290TWFya1JlYXNvblNjb3BlIHJvb3RTY29wZShzbG90VmlzaXRvciwgU2xvdFZp
c2l0b3I6OlJvb3RNYXJrUmVhc29uOjpERkdXb3JrTGlzdHMpOworICAgICAgICAgICAgW3RoaXNd
IChBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKSB7CisgICAgICAgICAgICAgICAgU2V0Um9v
dE1hcmtSZWFzb25TY29wZSByb290U2NvcGUodmlzaXRvciwgQWJzdHJhY3RTbG90VmlzaXRvcjo6
Um9vdE1hcmtSZWFzb246OkRGR1dvcmtMaXN0cyk7CiAKICAgICAgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSBERkc6Om51bWJlck9mV29ya2xpc3RzKCk7IGktLTspCi0gICAgICAgICAgICAg
ICAgICAgIERGRzo6ZXhpc3RpbmdXb3JrbGlzdEZvckluZGV4KGkpLnZpc2l0V2Vha1JlZmVyZW5j
ZXMoc2xvdFZpc2l0b3IpOworICAgICAgICAgICAgICAgICAgICBERkc6OmV4aXN0aW5nV29ya2xp
c3RGb3JJbmRleChpKS52aXNpdFdlYWtSZWZlcmVuY2VzKHZpc2l0b3IpOwogICAgICAgICAgICAg
ICAgIAogICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBUaGlzIGlzIGFsbW9zdCBjZXJ0YWlubHkg
dW5uZWNlc3NhcnkuCiAgICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE2NjgyOQotICAgICAgICAgICAgICAgIERGRzo6aXRlcmF0ZUNvZGVC
bG9ja3NGb3JHQygKKyAgICAgICAgICAgICAgICBERkc6Oml0ZXJhdGVDb2RlQmxvY2tzRm9yR0Mo
dmlzaXRvciwKICAgICAgICAgICAgICAgICAgICAgbV92bSwKICAgICAgICAgICAgICAgICAgICAg
WyZdIChDb2RlQmxvY2sqIGNvZGVCbG9jaykgewotICAgICAgICAgICAgICAgICAgICAgICAgc2xv
dFZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQoY29kZUJsb2NrKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQoY29kZUJsb2NrKTsKICAgICAgICAgICAg
ICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgaWYgKE9wdGlv
bnM6OmxvZ0dDKCkgPT0gR0NMb2dnaW5nOjpWZXJib3NlKQotICAgICAgICAgICAgICAgICAgICBk
YXRhTG9nKCJERkcgV29ya2xpc3RzOlxuIiwgc2xvdFZpc2l0b3IpOworICAgICAgICAgICAgICAg
ICAgICBkYXRhTG9nKCJERkcgV29ya2xpc3RzOlxuIiwgdmlzaXRvcik7CiAgICAgICAgICAgICB9
LAogICAgICAgICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHk6OkdyZXllZEJ5TWFya2luZyk7CiAg
ICAgfQpAQCAtMjg1NSwxNCArMjkwNiwxNSBAQCB2b2lkIEhlYXA6OmFkZENvcmVDb25zdHJhaW50
cygpCiAgICAgCiAgICAgbV9jb25zdHJhaW50U2V0LT5hZGQoCiAgICAgICAgICJDYiIsICJDb2Rl
QmxvY2tzIiwKLSAgICAgICAgW3RoaXNdIChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IpIHsKLSAg
ICAgICAgICAgIFNldFJvb3RNYXJrUmVhc29uU2NvcGUgcm9vdFNjb3BlKHNsb3RWaXNpdG9yLCBT
bG90VmlzaXRvcjo6Um9vdE1hcmtSZWFzb246OkNvZGVCbG9ja3MpOwotICAgICAgICAgICAgaXRl
cmF0ZUV4ZWN1dGluZ0FuZENvbXBpbGluZ0NvZGVCbG9ja3NXaXRob3V0SG9sZGluZ0xvY2tzKAor
ICAgICAgICBbdGhpc10gKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsKKyAgICAgICAg
ICAgIFNldFJvb3RNYXJrUmVhc29uU2NvcGUgcm9vdFNjb3BlKHZpc2l0b3IsIEFic3RyYWN0U2xv
dFZpc2l0b3I6OlJvb3RNYXJrUmVhc29uOjpDb2RlQmxvY2tzKTsKKyAgICAgICAgICAgIGl0ZXJh
dGVFeGVjdXRpbmdBbmRDb21waWxpbmdDb2RlQmxvY2tzV2l0aG91dEhvbGRpbmdMb2Nrcyh2aXNp
dG9yLAogICAgICAgICAgICAgICAgIFsmXSAoQ29kZUJsb2NrKiBjb2RlQmxvY2spIHsKICAgICAg
ICAgICAgICAgICAgICAgLy8gVmlzaXQgdGhlIENvZGVCbG9jayBhcyBhIGNvbnN0cmFpbnQgb25s
eSBpZiBpdCdzIGJsYWNrLgotICAgICAgICAgICAgICAgICAgICBpZiAoaXNNYXJrZWQoY29kZUJs
b2NrKQorICAgICAgICAgICAgICAgICAgICAvLyBtbGFtIEZJWE1FCisgICAgICAgICAgICAgICAg
ICAgIGlmICh2aXNpdG9yLmlzTWFya2VkKGNvZGVCbG9jaykKICAgICAgICAgICAgICAgICAgICAg
ICAgICYmIGNvZGVCbG9jay0+Y2VsbFN0YXRlKCkgPT0gQ2VsbFN0YXRlOjpQb3NzaWJseUJsYWNr
KQotICAgICAgICAgICAgICAgICAgICAgICAgc2xvdFZpc2l0b3IudmlzaXRBc0NvbnN0cmFpbnQo
Y29kZUJsb2NrKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZpc2l0b3IudmlzaXRBc0NvbnN0
cmFpbnQoY29kZUJsb2NrKTsKICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgfSwKICAgICAg
ICAgQ29uc3RyYWludFZvbGF0aWxpdHk6OlNlbGRvbUdyZXllZCk7CkBAIC0zMDIzLDQgKzMwNzUs
NTIgQEAgdm9pZCBIZWFwOjpydW5UYXNrSW5QYXJhbGxlbChSZWZQdHI8U2hhcgogICAgIH0KIH0K
IAorLy8gbWxhbQordm9pZCBIZWFwOjp2ZXJpZnlHQygpCit7CisgICAgYm9vbCB2ZXJib3NlID0g
Z2V0ZW52KCJtbGFtVmVyYm9zZSIpOworCisgICAgUkVMRUFTRV9BU1NFUlQobV92ZXJpZmllclNs
b3RWaXNpdG9yKTsKKyAgICBSRUxFQVNFX0FTU0VSVCghbV9pc1ZlcmlmeWluZ0dDKTsKKyAgICBt
X2lzVmVyaWZ5aW5nR0MgPSB0cnVlOworCisgICAgaWYgKHZlcmJvc2UpIGRhdGFMb2dMbigiICAg
IG1sYW0gSGVhcDo6dmVyaWZ5R0MoKSBTVEVQIDEgaGVhcC5tX211dGF0b3JNYXJrU3RhY2stPnNp
emUoKSAiLCBtX211dGF0b3JNYXJrU3RhY2stPnNpemUoKSwgIiBtX3JhY2VNYXJrU3RhY2stPnNp
emUoKSAiLCBtX3JhY2VNYXJrU3RhY2stPnNpemUoKSk7CisgICAgVmVyaWZpZXJTbG90VmlzaXRv
ciYgdmlzaXRvciA9ICptX3ZlcmlmaWVyU2xvdFZpc2l0b3I7CisgICAgZG8geworICAgICAgICBp
ZiAodmVyYm9zZSkgZGF0YUxvZ0xuKCIgICAgbWxhbSBIZWFwOjp2ZXJpZnlHQygpIFNURVAgMjog
dmlzaXRvci5kcmFpbigpIGhlYXAubV9tdXRhdG9yTWFya1N0YWNrLT5zaXplKCkgIiwgbV9tdXRh
dG9yTWFya1N0YWNrLT5zaXplKCksICIgbV9yYWNlTWFya1N0YWNrLT5zaXplKCkgIiwgbV9yYWNl
TWFya1N0YWNrLT5zaXplKCkpOworICAgICAgICB2aXNpdG9yLmRyYWluKCk7CisgICAgICAgIGlm
ICh2ZXJib3NlKSBkYXRhTG9nTG4oIiAgICBtbGFtIEhlYXA6OnZlcmlmeUdDKCkgU1RFUCAzOiBt
X2NvbnN0cmFpbnRTZXQtPmV4ZWN1dGVBbGxTeW5jaHJvbm91c2x5KCkgaGVhcC5tX211dGF0b3JN
YXJrU3RhY2stPnNpemUoKSAiLCBtX211dGF0b3JNYXJrU3RhY2stPnNpemUoKSwgIiBtX3JhY2VN
YXJrU3RhY2stPnNpemUoKSAiLCBtX3JhY2VNYXJrU3RhY2stPnNpemUoKSk7CisgICAgICAgIG1f
Y29uc3RyYWludFNldC0+ZXhlY3V0ZUFsbFN5bmNocm9ub3VzbHkodmlzaXRvcik7CisgICAgICAg
IGlmICh2ZXJib3NlKSBkYXRhTG9nTG4oIiAgICBtbGFtIEhlYXA6OnZlcmlmeUdDKCkgU1RFUCA0
OiB2aXNpdG9yLmV4ZWN1dGVDb25zdHJhaW50VGFza3MoKSBoZWFwLm1fbXV0YXRvck1hcmtTdGFj
ay0+c2l6ZSgpICIsIG1fbXV0YXRvck1hcmtTdGFjay0+c2l6ZSgpLCAiIG1fcmFjZU1hcmtTdGFj
ay0+c2l6ZSgpICIsIG1fcmFjZU1hcmtTdGFjay0+c2l6ZSgpKTsKKyAgICAgICAgdmlzaXRvci5l
eGVjdXRlQ29uc3RyYWludFRhc2tzKCk7CisgICAgfSB3aGlsZSAoIXZpc2l0b3IuaXNFbXB0eSgp
KTsKKworICAgIG1faXNWZXJpZnlpbmdHQyA9IGZhbHNlOworICAgIGlmICh2ZXJib3NlKSBkYXRh
TG9nTG4oIiAgICBtbGFtIEhlYXA6OnZlcmlmeUdDKCkgU1RFUCA1OiBFTkQgaGVhcC5tX211dGF0
b3JNYXJrU3RhY2stPnNpemUoKSAiLCBtX211dGF0b3JNYXJrU3RhY2stPnNpemUoKSwgIiBtX3Jh
Y2VNYXJrU3RhY2stPnNpemUoKSAiLCBtX3JhY2VNYXJrU3RhY2stPnNpemUoKSk7CisKKy8vICAg
IHZpc2l0b3IuZm9yRWFjaExpdmVDZWxsKFsmXSAoSGVhcENlbGwqIGNlbGwpIHsKKy8vICAgICAg
ICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6dmVyYm9zZVZlcmlmeUdDKCkgJiYgIUhlYXA6OmlzTWFy
a2VkKGNlbGwpKSkKKy8vICAgICAgICAgICAgdmlzaXRvci5kdW1wTWFya2VyRGF0YShjZWxsKTsK
Ky8vICAgICAgICBSRUxFQVNFX0FTU0VSVCh0aGlzLT5pc01hcmtlZChjZWxsKSk7CisvLyAgICB9
KTsKKyAgICB2aXNpdG9yLmZvckVhY2hMaXZlUHJlY2lzZUFsbG9jYXRpb24oWyZdIChIZWFwQ2Vs
bCogY2VsbCkgeworICAgICAgICBSRUxFQVNFX0FTU0VSVChjZWxsLT5pc1ByZWNpc2VBbGxvY2F0
aW9uKCkpOworLy8gICAgICAgIFJFTEVBU0VfQVNTRVJUKGNlbGwtPnByZWNpc2VBbGxvY2F0aW9u
KCkuaXNNYXJrZWQoKSk7CisgICAgICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjp2ZXJib3NlVmVy
aWZ5R0MoKSAmJiAhSGVhcDo6aXNNYXJrZWQoY2VsbCkpKQorICAgICAgICAgICAgdmlzaXRvci5k
dW1wTWFya2VyRGF0YShjZWxsKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoSGVhcDo6aXNNYXJr
ZWQoY2VsbCkpOworICAgIH0pOworICAgIHZpc2l0b3IuZm9yRWFjaExpdmVNYXJrZWRCbG9ja0Nl
bGwoWyZdIChIZWFwQ2VsbCogY2VsbCkgeworICAgICAgICBSRUxFQVNFX0FTU0VSVCghY2VsbC0+
aXNQcmVjaXNlQWxsb2NhdGlvbigpKTsKKy8vICAgICAgICBSRUxFQVNFX0FTU0VSVChjZWxsLT5t
YXJrZWRCbG9jaygpLmlzTWFya2VkKGNlbGwpKTsKKyAgICAgICAgaWYgKFVOTElLRUxZKE9wdGlv
bnM6OnZlcmJvc2VWZXJpZnlHQygpICYmICFIZWFwOjppc01hcmtlZChjZWxsKSkpCisgICAgICAg
ICAgICB2aXNpdG9yLmR1bXBNYXJrZXJEYXRhKGNlbGwpOworICAgICAgICBSRUxFQVNFX0FTU0VS
VChIZWFwOjppc01hcmtlZChjZWxsKSk7CisgICAgfSk7CisKKyAgICBpZiAodmVyYm9zZSkgZGF0
YUxvZ0xuKCIgICAgbWxhbSBIZWFwOjp2ZXJpZnlHQygpIFNURVAgNjogRU5EIGhlYXAubV9tdXRh
dG9yTWFya1N0YWNrLT5zaXplKCkgIiwgbV9tdXRhdG9yTWFya1N0YWNrLT5zaXplKCksICIgbV9y
YWNlTWFya1N0YWNrLT5zaXplKCkgIiwgbV9yYWNlTWFya1N0YWNrLT5zaXplKCkpOworICAgIG1f
dmVyaWZpZXJTbG90VmlzaXRvciA9IG51bGxwdHI7Cit9CisvLyBtbGFtICovCisKIH0gLy8gbmFt
ZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkocmV2aXNpb24gMjcy
Mjk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCSh3b3JraW5nIGNvcHkp
CkBAIC04Niw2ICs4Niw3IEBAIGNsYXNzIFNwYWNlVGltZU11dGF0b3JTY2hlZHVsZXI7CiBjbGFz
cyBTdG9wSWZOZWNlc3NhcnlUaW1lcjsKIGNsYXNzIFN3ZWVwaW5nU2NvcGU7CiBjbGFzcyBWTTsK
K2NsYXNzIFZlcmlmaWVyU2xvdFZpc2l0b3I7CiBjbGFzcyBXZWFrR0NNYXBCYXNlOwogc3RydWN0
IEN1cnJlbnRUaHJlYWRTdGF0ZTsKIApAQCAtMTg0LDcgKzE4NSw5IEBAIHB1YmxpYzoKICAgICAK
ICAgICBib29sIGlzU2h1dHRpbmdEb3duKCkgY29uc3QgeyByZXR1cm4gbV9pc1NodXR0aW5nRG93
bjsgfQogCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBpc0FuYWx5emluZ0hlYXAoKSBjb25z
dDsKKy8vICAgIEpTX0VYUE9SVF9QUklWQVRFIGJvb2wgaXNBbmFseXppbmdIZWFwKCkgY29uc3Q7
CisvLyAgICBib29sIGlzQW5hbHl6aW5nSGVhcCgpIGNvbnN0IHsgcmV0dXJuIG1faGVhcEFuYWx5
emVyOyB9CisvLyAgICBIZWFwQW5hbHl6ZXIqIGhlYXBBbmFseXplcigpIGNvbnN0IHsgcmV0dXJu
IG1faGVhcEFuYWx5emVyOyB9CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHN3ZWVwU3lu
Y2hyb25vdXNseSgpOwogCkBAIC0zODUsOCArMzg4LDggQEAgcHVibGljOgogICAgIAogICAgIEpT
X0VYUE9SVF9QUklWQVRFIHZvaWQgYWRkTWFya2luZ0NvbnN0cmFpbnQoc3RkOjp1bmlxdWVfcHRy
PE1hcmtpbmdDb25zdHJhaW50Pik7CiAgICAgCi0gICAgc2l6ZV90IG51bU9wYXF1ZVJvb3RzKCkg
Y29uc3QgeyByZXR1cm4gbV9vcGFxdWVSb290cy5zaXplKCk7IH0KLQorLy8gICAgc2l6ZV90IG51
bU9wYXF1ZVJvb3RzKCkgY29uc3QgeyByZXR1cm4gbV9vcGFxdWVSb290cy5zaXplKCk7IH0gLy8g
bWxhbSBVTlVTRUQKKy8vCiAgICAgSGVhcFZlcmlmaWVyKiB2ZXJpZmllcigpIGNvbnN0IHsgcmV0
dXJuIG1fdmVyaWZpZXIuZ2V0KCk7IH0KICAgICAKICAgICB2b2lkIGFkZEhlYXBGaW5hbGl6ZXJD
YWxsYmFjayhjb25zdCBIZWFwRmluYWxpemVyQ2FsbGJhY2smKTsKQEAgLTU3NiwxMCArNTc5LDEw
IEBAIHByaXZhdGU6CiAgICAgYm9vbCBvdmVyQ3JpdGljYWxNZW1vcnlUaHJlc2hvbGQoTWVtb3J5
VGhyZXNob2xkQ2FsbFR5cGUgbWVtb3J5VGhyZXNob2xkQ2FsbFR5cGUgPSBNZW1vcnlUaHJlc2hv
bGRDYWxsVHlwZTo6Q2FjaGVkKTsKICAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgot
ICAgIHZvaWQgaXRlcmF0ZUV4ZWN1dGluZ0FuZENvbXBpbGluZ0NvZGVCbG9ja3MoY29uc3QgRnVu
YyYpOworICAgIHZvaWQgaXRlcmF0ZUV4ZWN1dGluZ0FuZENvbXBpbGluZ0NvZGVCbG9ja3MoQWJz
dHJhY3RTbG90VmlzaXRvciYsIGNvbnN0IEZ1bmMmKTsKICAgICAKICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBGdW5jPgotICAgIHZvaWQgaXRlcmF0ZUV4ZWN1dGluZ0FuZENvbXBpbGluZ0NvZGVCbG9j
a3NXaXRob3V0SG9sZGluZ0xvY2tzKGNvbnN0IEZ1bmMmKTsKKyAgICB2b2lkIGl0ZXJhdGVFeGVj
dXRpbmdBbmRDb21waWxpbmdDb2RlQmxvY2tzV2l0aG91dEhvbGRpbmdMb2NrcyhBYnN0cmFjdFNs
b3RWaXNpdG9yJiwgY29uc3QgRnVuYyYpOwogICAgIAogICAgIHZvaWQgYXNzZXJ0TWFya1N0YWNr
c0VtcHR5KCk7CiAKQEAgLTU5MCw2ICs1OTMsOCBAQCBwcml2YXRlOgogICAgIHN0YXRpYyBib29s
IHVzZUdlbmVyYXRpb25hbEdDKCk7CiAgICAgc3RhdGljIGJvb2wgc2hvdWxkU3dlZXBTeW5jaHJv
bm91c2x5KCk7CiAgICAgCisgICAgdm9pZCB2ZXJpZnlHQygpOworCiAgICAgY29uc3QgSGVhcFR5
cGUgbV9oZWFwVHlwZTsKICAgICBNdXRhdG9yU3RhdGUgbV9tdXRhdG9yU3RhdGUgeyBNdXRhdG9y
U3RhdGU6OlJ1bm5pbmcgfTsKICAgICBjb25zdCBzaXplX3QgbV9yYW1TaXplOwpAQCAtNjM2LDYg
KzY0MSw3IEBAIHByaXZhdGU6CiAgICAgc3RkOjp1bmlxdWVfcHRyPE1hcmtTdGFja0FycmF5PiBt
X211dGF0b3JNYXJrU3RhY2s7CiAgICAgc3RkOjp1bmlxdWVfcHRyPE1hcmtTdGFja0FycmF5PiBt
X3JhY2VNYXJrU3RhY2s7CiAgICAgc3RkOjp1bmlxdWVfcHRyPE1hcmtpbmdDb25zdHJhaW50U2V0
PiBtX2NvbnN0cmFpbnRTZXQ7CisgICAgc3RkOjp1bmlxdWVfcHRyPFZlcmlmaWVyU2xvdFZpc2l0
b3I+IG1fdmVyaWZpZXJTbG90VmlzaXRvcjsKIAogICAgIC8vIFdlIHBvb2wgdGhlIHNsb3Qgdmlz
aXRvcnMgdXNlZCBieSBwYXJhbGxlbCBtYXJraW5nIHRocmVhZHMuIEl0J3MgdXNlZnVsIHRvIGJl
IGFibGUgdG8KICAgICAvLyBlbnVtZXJhdGUgb3ZlciB0aGVtLCBhbmQgaXQncyB1c2VmdWwgdG8g
aGF2ZSB0aGVtIGNhY2hlIHNvbWUgc21hbGwgYW1vdW50IG9mIG1lbW9yeSBmcm9tCkBAIC02NTQs
NiArNjYwLDcgQEAgcHJpdmF0ZToKICAgICBib29sIG1faXNTYWZlVG9Db2xsZWN0IHsgZmFsc2Ug
fTsKICAgICBib29sIG1faXNTaHV0dGluZ0Rvd24geyBmYWxzZSB9OwogICAgIGJvb2wgbV9tdXRh
dG9yU2hvdWxkQmVGZW5jZWQgeyBPcHRpb25zOjpmb3JjZUZlbmNlZEJhcnJpZXIoKSB9OworICAg
IGJvb2wgbV9pc1ZlcmlmeWluZ0dDIHsgZmFsc2UgfTsKIAogICAgIHVuc2lnbmVkIG1fYmFycmll
clRocmVzaG9sZCB7IE9wdGlvbnM6OmZvcmNlRmVuY2VkQmFycmllcigpID8gdGF1dG9sb2dpY2Fs
VGhyZXNob2xkIDogYmxhY2tUaHJlc2hvbGQgfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvSGVhcElubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9IZWFwSW5saW5lcy5oCShyZXZpc2lvbiAyNzIyOTcpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9IZWFwSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC02OSw2ICs2OSw4
IEBAIGlubGluZSBib29sIEhlYXA6OndvcmxkSXNTdG9wcGVkKCkgY29uc3QKIAogQUxXQVlTX0lO
TElORSBib29sIEhlYXA6OmlzTWFya2VkKGNvbnN0IHZvaWQqIHJhd0NlbGwpCiB7CisgICAgUkVM
RUFTRV9BU1NFUlQoIW1faXNWZXJpZnlpbmdHQyk7IC8vIG1sYW0gVEVTVCBvbmx5CisKICAgICBI
ZWFwQ2VsbCogY2VsbCA9IGJpdHdpc2VfY2FzdDxIZWFwQ2VsbCo+KHJhd0NlbGwpOwogICAgIGlm
IChjZWxsLT5pc1ByZWNpc2VBbGxvY2F0aW9uKCkpCiAgICAgICAgIHJldHVybiBjZWxsLT5wcmVj
aXNlQWxsb2NhdGlvbigpLmlzTWFya2VkKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9IZWFwUHJvZmlsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0hlYXBQcm9maWxlci5jcHAJKHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0hlYXBQcm9maWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYwLDYg
KzYwLDcgQEAgdm9pZCBIZWFwUHJvZmlsZXI6OnNldEFjdGl2ZUhlYXBBbmFseXplcgogewogICAg
IEFTU0VSVCghIW1fYWN0aXZlQW5hbHl6ZXIgIT0gISFhbmFseXplcik7CiAgICAgbV9hY3RpdmVB
bmFseXplciA9IGFuYWx5emVyOworICAgIG1fdm0uc2V0QWN0aXZlSGVhcEFuYWx5emVyKGFuYWx5
emVyKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9Jc29DZWxsU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvSXNvQ2VsbFNldC5oCShyZXZpc2lvbiAyNzIyOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9Jc29DZWxsU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDcgQEAK
IAogbmFtZXNwYWNlIEpTQyB7CiAKK2NsYXNzIEFic3RyYWN0U2xvdFZpc2l0b3I7CiBjbGFzcyBI
ZWFwQ2VsbDsKIGNsYXNzIElzb1N1YnNwYWNlOwogCkBAIC01OSw3ICs2MCw3IEBAIHB1YmxpYzoK
ICAgICB2b2lkIGZvckVhY2hNYXJrZWRDZWxsKGNvbnN0IEZ1bmMmKTsKIAogICAgIHRlbXBsYXRl
PHR5cGVuYW1lIEZ1bmM+Ci0gICAgUmVmPFNoYXJlZFRhc2s8dm9pZChTbG90VmlzaXRvciYpPj4g
Zm9yRWFjaE1hcmtlZENlbGxJblBhcmFsbGVsKGNvbnN0IEZ1bmMmKTsKKyAgICBSZWY8U2hhcmVk
VGFzazx2b2lkKEFic3RyYWN0U2xvdFZpc2l0b3ImKT4+IGZvckVhY2hNYXJrZWRDZWxsSW5QYXJh
bGxlbChjb25zdCBGdW5jJik7CiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KICAg
ICB2b2lkIGZvckVhY2hMaXZlQ2VsbChjb25zdCBGdW5jJik7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9Jc29DZWxsU2V0SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0lzb0NlbGxTZXRJbmxpbmVzLmgJKHJldmlzaW9uIDI3MjI5NykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0lzb0NlbGxTZXRJbmxpbmVzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTkyLDkgKzkyLDkgQEAgdm9pZCBJc29DZWxsU2V0Ojpmb3JFYWNoTWFya2Vk
Q2VsbChjb25zdAogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgotUmVmPFNoYXJlZFRhc2s8
dm9pZChTbG90VmlzaXRvciYpPj4gSXNvQ2VsbFNldDo6Zm9yRWFjaE1hcmtlZENlbGxJblBhcmFs
bGVsKGNvbnN0IEZ1bmMmIGZ1bmMpCitSZWY8U2hhcmVkVGFzazx2b2lkKEFic3RyYWN0U2xvdFZp
c2l0b3ImKT4+IElzb0NlbGxTZXQ6OmZvckVhY2hNYXJrZWRDZWxsSW5QYXJhbGxlbChjb25zdCBG
dW5jJiBmdW5jKQogewotICAgIGNsYXNzIFRhc2sgZmluYWwgOiBwdWJsaWMgU2hhcmVkVGFzazx2
b2lkKFNsb3RWaXNpdG9yJik+IHsKKyAgICBjbGFzcyBUYXNrIGZpbmFsIDogcHVibGljIFNoYXJl
ZFRhc2s8dm9pZChBYnN0cmFjdFNsb3RWaXNpdG9yJik+IHsKICAgICBwdWJsaWM6CiAgICAgICAg
IFRhc2soSXNvQ2VsbFNldCYgc2V0LCBjb25zdCBGdW5jJiBmdW5jKQogICAgICAgICAgICAgOiBt
X3NldChzZXQpCkBAIC0xMDMsNyArMTAzLDcgQEAgUmVmPFNoYXJlZFRhc2s8dm9pZChTbG90Vmlz
aXRvciYpPj4gSXNvQwogICAgICAgICB7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIHZv
aWQgcnVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBmaW5hbAorICAgICAgICB2b2lkIHJ1bihBYnN0
cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBmaW5hbAogICAgICAgICB7CiAgICAgICAgICAgICB3
aGlsZSAoTWFya2VkQmxvY2s6OkhhbmRsZSogaGFuZGxlID0gbV9ibG9ja1NvdXJjZS0+cnVuKCkp
IHsKICAgICAgICAgICAgICAgICB1bnNpZ25lZCBibG9ja0luZGV4ID0gaGFuZGxlLT5pbmRleCgp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSklUU3R1YlJvdXRpbmVTZXQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0pJVFN0dWJSb3V0aW5l
U2V0LmNwcAkocmV2aXNpb24gMjcyMjk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
SklUU3R1YlJvdXRpbmVTZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjgsMTcgKzEyOCwyMiBA
QCB2b2lkIEpJVFN0dWJSb3V0aW5lU2V0OjpkZWxldGVVbm1hcmtlZEplCiAgICAgbV9yb3V0aW5l
cy5zaHJpbmsoZHN0SW5kZXgpOwogfQogCi12b2lkIEpJVFN0dWJSb3V0aW5lU2V0Ojp0cmFjZU1h
cmtlZFN0dWJSb3V0aW5lcyhTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vdGVtcGxhdGU8dHlwZW5h
bWUgVmlzaXRvcj4KKy8vdm9pZCBKSVRTdHViUm91dGluZVNldDo6dHJhY2VNYXJrZWRTdHViUm91
dGluZXMoVmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgSklUU3R1YlJvdXRpbmVTZXQ6OnRyYWNlTWFy
a2VkU3R1YlJvdXRpbmVzMShBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGZv
ciAoYXV0byYgZW50cnkgOiBtX3JvdXRpbmVzKSB7CiAgICAgICAgIEdDQXdhcmVKSVRTdHViUm91
dGluZSogcm91dGluZSA9IGVudHJ5LnJvdXRpbmU7CiAgICAgICAgIGlmICghcm91dGluZS0+bV9t
YXlCZUV4ZWN1dGluZykKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAKLSAgICAgICAg
cm91dGluZS0+bWFya1JlcXVpcmVkT2JqZWN0cyh2aXNpdG9yKTsKKyAgICAgICAgcm91dGluZS0+
bWFya1JlcXVpcmVkT2JqZWN0czEodmlzaXRvcik7CiAgICAgfQogfQogCisvL3RlbXBsYXRlIHZv
aWQgSklUU3R1YlJvdXRpbmVTZXQ6OnRyYWNlTWFya2VkU3R1YlJvdXRpbmVzKFNsb3RWaXNpdG9y
Jik7CisvL3RlbXBsYXRlIHZvaWQgSklUU3R1YlJvdXRpbmVTZXQ6OnRyYWNlTWFya2VkU3R1YlJv
dXRpbmVzKFZlcmlmaWVyU2xvdFZpc2l0b3ImKTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNl
bmRpZiAvLyBFTkFCTEUoSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSklU
U3R1YlJvdXRpbmVTZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9KSVRTdHViUm91dGluZVNldC5oCShyZXZpc2lvbiAyNzIyOTcpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9KSVRTdHViUm91dGluZVNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw4
ICszNSw5IEBAIHVzaW5nIFdURjo6UmFuZ2U7CiAKIG5hbWVzcGFjZSBKU0MgewogCitjbGFzcyBB
YnN0cmFjdFNsb3RWaXNpdG9yOwogY2xhc3MgR0NBd2FyZUpJVFN0dWJSb3V0aW5lOwotY2xhc3Mg
U2xvdFZpc2l0b3I7CisvL2NsYXNzIFNsb3RWaXNpdG9yOwogCiAjaWYgRU5BQkxFKEpJVCkKIApA
QCAtNjMsOCArNjQsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBwcmVwYXJlRm9yQ29uc2VydmF0aXZl
U2NhbigpOwogICAgIAogICAgIHZvaWQgZGVsZXRlVW5tYXJrZWRKZXR0aXNvbmVkU3R1YlJvdXRp
bmVzKCk7Ci0gICAgCi0gICAgdm9pZCB0cmFjZU1hcmtlZFN0dWJSb3V0aW5lcyhTbG90VmlzaXRv
ciYpOworCisvLyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIHRyYWNlTWFya2Vk
U3R1YlJvdXRpbmVzKFZpc2l0b3ImKTsKKyAgICB2b2lkIHRyYWNlTWFya2VkU3R1YlJvdXRpbmVz
MShBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAgICAgCiBwcml2YXRlOgogICAgIHZvaWQgbWFya1Ns
b3codWludHB0cl90IGFkZHJlc3MpOwpAQCAtOTIsNyArOTQsOCBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBtYXJrKHZvaWQqKSB7IH0KICAgICB2b2lkIHByZXBhcmVGb3JDb25zZXJ2YXRpdmVTY2FuKCkg
eyB9CiAgICAgdm9pZCBkZWxldGVVbm1hcmtlZEpldHRpc29uZWRTdHViUm91dGluZXMoKSB7IH0K
LSAgICB2b2lkIHRyYWNlTWFya2VkU3R1YlJvdXRpbmVzKFNsb3RWaXNpdG9yJikgeyB9CisvLyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIHRyYWNlTWFya2VkU3R1YlJvdXRpbmVz
KFZpc2l0b3ImKSB7IH0KKyAgICB2b2lkIHRyYWNlTWFya2VkU3R1YlJvdXRpbmVzMShBYnN0cmFj
dFNsb3RWaXNpdG9yJikgeyB9CiB9OwogCiAjZW5kaWYgLy8gIUVOQUJMRShKSVQpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya1N0YWNrTWVyZ2lu
Z0NvbnN0cmFpbnQuY3BwCShyZXZpc2lvbiAyNzIyOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9NYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI1LDEyICsyNSwxMyBAQAogCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiTWFya1N0
YWNrTWVyZ2luZ0NvbnN0cmFpbnQuaCIKLQogI2luY2x1ZGUgIkdDU2VnbWVudGVkQXJyYXlJbmxp
bmVzLmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIAorc3Rh
dGljIGNvbnN0ZXhwciBib29sIG1sYW1WZXJib3NlID0gZmFsc2U7CisKIE1hcmtTdGFja01lcmdp
bmdDb25zdHJhaW50OjpNYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludChIZWFwJiBoZWFwKQogICAg
IDogTWFya2luZ0NvbnN0cmFpbnQoIk1zbSIsICJNYXJrIFN0YWNrIE1lcmdpbmciLCBDb25zdHJh
aW50Vm9sYXRpbGl0eTo6R3JleWVkQnlFeGVjdXRpb24pCiAgICAgLCBtX2hlYXAoaGVhcCkKQEAg
LTQxLDEyICs0MiwxMiBAQCBNYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludDo6fk1hcmtTdGFja01l
CiB7CiB9CiAKLWRvdWJsZSBNYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludDo6cXVpY2tXb3JrRXN0
aW1hdGUoU2xvdFZpc2l0b3ImKQorZG91YmxlIE1hcmtTdGFja01lcmdpbmdDb25zdHJhaW50Ojpx
dWlja1dvcmtFc3RpbWF0ZShBYnN0cmFjdFNsb3RWaXNpdG9yJikKIHsKICAgICByZXR1cm4gbV9o
ZWFwLm1fbXV0YXRvck1hcmtTdGFjay0+c2l6ZSgpICsgbV9oZWFwLm1fcmFjZU1hcmtTdGFjay0+
c2l6ZSgpOwogfQogCi12b2lkIE1hcmtTdGFja01lcmdpbmdDb25zdHJhaW50OjpwcmVwYXJlVG9F
eGVjdXRlSW1wbChjb25zdCBBYnN0cmFjdExvY2tlciYsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQor
dm9pZCBNYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludDo6cHJlcGFyZVRvRXhlY3V0ZUltcGwoY29u
c3QgQWJzdHJhY3RMb2NrZXImLCBBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAg
IC8vIExvZ2dpbmcgdGhlIHdvcmsgaGVyZSBlbnN1cmVzIHRoYXQgdGhlIGNvbnN0cmFpbnQgc29s
dmVyIGtub3dzIHRoYXQgaXQgZG9lc24ndCBuZWVkIHRvIHByb2R1Y2UKICAgICAvLyBhbnltb3Jl
IHdvcmsuCkBAIC01Niw4ICs1NywxOCBAQCB2b2lkIE1hcmtTdGFja01lcmdpbmdDb25zdHJhaW50
OjpwcmVwYXJlCiAgICAgZGF0YUxvZ0lmKE9wdGlvbnM6OmxvZ0dDKCksICIoIiwgc2l6ZSwgIiki
KTsKIH0KIAotdm9pZCBNYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludDo6ZXhlY3V0ZUltcGwoU2xv
dFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIE1hcmtTdGFja01lcmdpbmdDb25zdHJhaW50OjpleGVj
dXRlSW1wbChBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogeworICAgIC8vIFdlIHdhbnQg
dG8gc2tpcCB0aGlzIGNvbnN0cmFpbnQgZm9yIHRoZSBHQyB2ZXJpZmllciBiZWNhdXNlOgorICAg
IC8vIDEuIFRoZXJlIHNob3VsZCBiZSBubyBtdXRhdG9yIG1hcmtpbmcgYWN0aW9uIGJldHdlZW4g
dGhlIEVuZCBwaGFzZSBhbmQgdmVyaWZ5R0MoKS4KKyAgICAvLyAgICBIZW5jZSwgd2UgY2FuIGln
bm9yZSB0aHNlIHN0YWNrcy4KKyAgICAvLyAyLiBUaGUgRW5kIHBoYXNlIGV4cGxpY3RseSBjYWxs
cyBpdGVyYXRlRXhlY3V0aW5nQW5kQ29tcGlsaW5nQ29kZUJsb2NrcygpCisgICAgLy8gICAgdG8g
YWRkIGV4ZWN1dGluZyBDb2RlQmxvY2tzIHRvIG1faGVhcC5tX211dGF0b3JNYXJrU3RhY2suIFdl
IHdhbnQgdG8KKyAgICAvLyAgICBsZWF2ZSB0aG9zZSB1bnBlcnR1cmJlZC4KKyAgICBpZiAobV9o
ZWFwLm1faXNWZXJpZnlpbmdHQykKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG1sYW1WZXJi
b3NlKSBkYXRhTG9nTG4oIiAgICBtbGFtIE1hcmtTdGFja01lcmdpbmdDb25zdHJhaW50OjpleGVj
dXRlSW1wbCgpIG1faGVhcC5tX211dGF0b3JNYXJrU3RhY2stPnRyYW5zZmVyVG8odmlzaXRvci5t
dXRhdG9yTWFya1N0YWNrKCkpOyIpOwogICAgIG1faGVhcC5tX211dGF0b3JNYXJrU3RhY2stPnRy
YW5zZmVyVG8odmlzaXRvci5tdXRhdG9yTWFya1N0YWNrKCkpOwogICAgIG1faGVhcC5tX3JhY2VN
YXJrU3RhY2stPnRyYW5zZmVyVG8odmlzaXRvci5tdXRhdG9yTWFya1N0YWNrKCkpOwogfQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3RhY2tNZXJn
aW5nQ29uc3RyYWludC5oCShyZXZpc2lvbiAyNzIyOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9NYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludC5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
MCwxOCArMzAsMTggQEAKIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBIZWFwOwotY2xhc3MgU2xv
dFZpc2l0b3I7CitjbGFzcyBBYnN0cmFjdFNsb3RWaXNpdG9yOwogCiBjbGFzcyBNYXJrU3RhY2tN
ZXJnaW5nQ29uc3RyYWludCBmaW5hbCA6IHB1YmxpYyBNYXJraW5nQ29uc3RyYWludCB7CiBwdWJs
aWM6CiAgICAgTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQoSGVhcCYpOwogICAgIH5NYXJrU3Rh
Y2tNZXJnaW5nQ29uc3RyYWludCgpIGZpbmFsOwogICAgIAotICAgIGRvdWJsZSBxdWlja1dvcmtF
c3RpbWF0ZShTbG90VmlzaXRvciYpIGZpbmFsOworICAgIGRvdWJsZSBxdWlja1dvcmtFc3RpbWF0
ZShBYnN0cmFjdFNsb3RWaXNpdG9yJikgZmluYWw7CiAgICAgCiBwcml2YXRlOgotICAgIHZvaWQg
cHJlcGFyZVRvRXhlY3V0ZUltcGwoY29uc3QgQWJzdHJhY3RMb2NrZXImIGNvbnN0cmFpbnRTb2x2
aW5nTG9ja2VyLCBTbG90VmlzaXRvciYpIGZpbmFsOwotICAgIHZvaWQgZXhlY3V0ZUltcGwoU2xv
dFZpc2l0b3ImKSBmaW5hbDsKKyAgICB2b2lkIHByZXBhcmVUb0V4ZWN1dGVJbXBsKGNvbnN0IEFi
c3RyYWN0TG9ja2VyJiBjb25zdHJhaW50U29sdmluZ0xvY2tlciwgQWJzdHJhY3RTbG90VmlzaXRv
ciYpIGZpbmFsOworICAgIHZvaWQgZXhlY3V0ZUltcGwoQWJzdHJhY3RTbG90VmlzaXRvciYpIGZp
bmFsOwogICAgIAogICAgIEhlYXAmIG1faGVhcDsKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9NYXJrZWRCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL01hcmtlZEJsb2NrLmgJKHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSw3
IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAwIEhhcnJpIFBvcnRlbiAocG9ydGVu
QGtkZS5vcmcpCiAgKiAgQ29weXJpZ2h0IChDKSAyMDAxIFBldGVyIEtlbGx5IChwbWtAcG9zdC5j
b20pCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKQEAgLTE1MSw3ICsxNTEsOCBAQCBwdWJs
aWM6CiAgICAgICAgIAogICAgICAgICB2b2lkIHNocmluaygpOwogICAgICAgICAgICAgCi0gICAg
ICAgIHZvaWQgdmlzaXRXZWFrU2V0KFNsb3RWaXNpdG9yJik7CisvLyAgICAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCB2aXNpdFdlYWtTZXQoVmlzaXRvciYpOworICAgICAgICB2
b2lkIHZpc2l0V2Vha1NldDEoQWJzdHJhY3RTbG90VmlzaXRvciYpOwogICAgICAgICB2b2lkIHJl
YXBXZWFrU2V0KCk7CiAgICAgICAgICAgICAKICAgICAgICAgLy8gV2hpbGUgYWxsb2NhdGluZyBm
cm9tIGEgZnJlZSBsaXN0LCBNYXJrZWRCbG9jayB0ZW1wb3JhcmlseSBoYXMgYm9ndXMKQEAgLTIw
Myw2ICsyMDQsNyBAQCBwdWJsaWM6CiAgICAgICAgIAogICAgICAgICB2b2lkKiBzdGFydCgpIGNv
bnN0IHsgcmV0dXJuICZtX2Jsb2NrLT5hdG9tcygpWzBdOyB9CiAgICAgICAgIHZvaWQqIGVuZCgp
IGNvbnN0IHsgcmV0dXJuICZtX2Jsb2NrLT5hdG9tcygpW21fZW5kQXRvbV07IH0KKyAgICAgICAg
dm9pZCogYXRvbUF0KHNpemVfdCBpKSBjb25zdCB7IHJldHVybiAmbV9ibG9jay0+YXRvbXMoKVtp
XTsgfQogICAgICAgICBib29sIGNvbnRhaW5zKHZvaWQqIHApIGNvbnN0IHsgcmV0dXJuIHN0YXJ0
KCkgPD0gcCAmJiBwIDwgZW5kKCk7IH0KIAogICAgICAgICB2b2lkIGR1bXBTdGF0ZShQcmludFN0
cmVhbSYpOwpAQCAtNDk4LDkgKzUwMCwxMSBAQCBpbmxpbmUgdm9pZCBNYXJrZWRCbG9jazo6SGFu
ZGxlOjpzaHJpbmsoCiAgICAgbV93ZWFrU2V0LnNocmluaygpOwogfQogCi1pbmxpbmUgdm9pZCBN
YXJrZWRCbG9jazo6SGFuZGxlOjp2aXNpdFdlYWtTZXQoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisv
L3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+CisvL2lubGluZSB2b2lkIE1hcmtlZEJsb2NrOjpI
YW5kbGU6OnZpc2l0V2Vha1NldChWaXNpdG9yJiB2aXNpdG9yKQoraW5saW5lIHZvaWQgTWFya2Vk
QmxvY2s6OkhhbmRsZTo6dmlzaXRXZWFrU2V0MShBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9y
KQogewotICAgIHJldHVybiBtX3dlYWtTZXQudmlzaXQodmlzaXRvcik7CisgICAgcmV0dXJuIG1f
d2Vha1NldC52aXNpdDEodmlzaXRvcik7CiB9CiAKIGlubGluZSB2b2lkIE1hcmtlZEJsb2NrOjpI
YW5kbGU6OnJlYXBXZWFrU2V0KCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01h
cmtlZFNwYWNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9N
YXJrZWRTcGFjZS5jcHAJKHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL01hcmtlZFNwYWNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcyLDEwICsyNzIsMTAg
QEAgdm9pZCBNYXJrZWRTcGFjZTo6ZW5hYmxlUHJlY2lzZUFsbG9jYXRpbwogICAgICAgICBtX3By
ZWNpc2VBbGxvY2F0aW9uU2V0LT5hZGQoYWxsb2NhdGlvbi0+Y2VsbCgpKTsKIH0KIAotdm9pZCBN
YXJrZWRTcGFjZTo6dmlzaXRXZWFrU2V0cyhTbG90VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgTWFy
a2VkU3BhY2U6OnZpc2l0V2Vha1NldHMxKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7
CiAgICAgYXV0byB2aXNpdCA9IFsmXSAoV2Vha1NldCogd2Vha1NldCkgewotICAgICAgICB3ZWFr
U2V0LT52aXNpdCh2aXNpdG9yKTsKKyAgICAgICAgd2Vha1NldC0+dmlzaXQxKHZpc2l0b3IpOwog
ICAgIH07CiAgICAgCiAgICAgbV9uZXdBY3RpdmVXZWFrU2V0cy5mb3JFYWNoKHZpc2l0KTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZFNwYWNlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkU3BhY2UuaAkocmV2aXNpb24gMjcy
Mjk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkU3BhY2UuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzcsNiArMzcsNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAorY2xhc3MgQWJz
dHJhY3RTbG90VmlzaXRvcjsgLy8gbWxhbSBGSVhNRSA/CiBjbGFzcyBDb21wbGV0ZVN1YnNwYWNl
OwogY2xhc3MgSGVhcDsKIGNsYXNzIEhlYXBDZWxsOwpAQCAtMTA1LDcgKzEwNiw3IEBAIHB1Ymxp
YzoKICAgICAKICAgICB2b2lkIHByZXBhcmVGb3JBbGxvY2F0aW9uKCk7CiAKLSAgICB2b2lkIHZp
c2l0V2Vha1NldHMoU2xvdFZpc2l0b3ImKTsKKyAgICB2b2lkIHZpc2l0V2Vha1NldHMxKEFic3Ry
YWN0U2xvdFZpc2l0b3ImKTsKICAgICB2b2lkIHJlYXBXZWFrU2V0cygpOwogCiAgICAgTWFya2Vk
QmxvY2tTZXQmIGJsb2NrcygpIHsgcmV0dXJuIG1fYmxvY2tzOyB9CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnQuY3BwCShyZXZpc2lvbiAy
NzIyOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIK
ICNpbmNsdWRlICJNYXJraW5nQ29uc3RyYWludC5oIgogCisjaW5jbHVkZSAiQWJzdHJhY3RTbG90
VmlzaXRvcklubGluZXMuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiVmlz
aXRDb3VudGVyLmgiCiAKQEAgLTUxLDcgKzUyLDcgQEAgdm9pZCBNYXJraW5nQ29uc3RyYWludDo6
cmVzZXRTdGF0cygpCiAgICAgbV9sYXN0VmlzaXRDb3VudCA9IDA7CiB9CiAKLXZvaWQgTWFya2lu
Z0NvbnN0cmFpbnQ6OmV4ZWN1dGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIE1hcmtpbmdD
b25zdHJhaW50OjpleGVjdXRlKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAg
VmlzaXRDb3VudGVyIHZpc2l0Q291bnRlcih2aXNpdG9yKTsKICAgICBleGVjdXRlSW1wbCh2aXNp
dG9yKTsKQEAgLTYwLDE3ICs2MSwyMyBAQCB2b2lkIE1hcmtpbmdDb25zdHJhaW50OjpleGVjdXRl
KFNsb3RWaXNpCiAgICAgICAgIGRhdGFMb2coIigiLCBhYmJyZXZpYXRlZE5hbWUoKSwgIiB2aXNp
dGVkICIsIHZpc2l0Q291bnRlci52aXNpdENvdW50KCksICIgaW4gZXhlY3V0ZSkiKTsKIH0KIAot
ZG91YmxlIE1hcmtpbmdDb25zdHJhaW50OjpxdWlja1dvcmtFc3RpbWF0ZShTbG90VmlzaXRvciYp
Cit2b2lkIE1hcmtpbmdDb25zdHJhaW50OjpleGVjdXRlU3luY2hyb25vdXNseShBYnN0cmFjdFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIHByZXBhcmVUb0V4ZWN1dGVJbXBsKE5vTG9ja2lu
Z05lY2Vzc2FyeSwgdmlzaXRvcik7CisgICAgZXhlY3V0ZUltcGwodmlzaXRvcik7Cit9CisKK2Rv
dWJsZSBNYXJraW5nQ29uc3RyYWludDo6cXVpY2tXb3JrRXN0aW1hdGUoQWJzdHJhY3RTbG90Vmlz
aXRvciYpCiB7CiAgICAgcmV0dXJuIDA7CiB9CiAKLWRvdWJsZSBNYXJraW5nQ29uc3RyYWludDo6
d29ya0VzdGltYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorZG91YmxlIE1hcmtpbmdDb25zdHJh
aW50Ojp3b3JrRXN0aW1hdGUoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBy
ZXR1cm4gbGFzdFZpc2l0Q291bnQoKSArIHF1aWNrV29ya0VzdGltYXRlKHZpc2l0b3IpOwogfQog
Ci12b2lkIE1hcmtpbmdDb25zdHJhaW50OjpwcmVwYXJlVG9FeGVjdXRlKGNvbnN0IEFic3RyYWN0
TG9ja2VyJiBjb25zdHJhaW50U29sdmluZ0xvY2tlciwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2
b2lkIE1hcmtpbmdDb25zdHJhaW50OjpwcmVwYXJlVG9FeGVjdXRlKGNvbnN0IEFic3RyYWN0TG9j
a2VyJiBjb25zdHJhaW50U29sdmluZ0xvY2tlciwgQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRv
cikKIHsKICAgICBkYXRhTG9nSWYoT3B0aW9uczo6bG9nR0MoKSwgYWJicmV2aWF0ZWROYW1lKCkp
OwogICAgIFZpc2l0Q291bnRlciB2aXNpdENvdW50ZXIodmlzaXRvcik7CkBAIC04MCw3ICs4Nyw3
IEBAIHZvaWQgTWFya2luZ0NvbnN0cmFpbnQ6OnByZXBhcmVUb0V4ZWN1dGUKICAgICAgICAgZGF0
YUxvZygiKCIsIGFiYnJldmlhdGVkTmFtZSgpLCAiIHZpc2l0ZWQgIiwgdmlzaXRDb3VudGVyLnZp
c2l0Q291bnQoKSwgIiBpbiBwcmVwYXJlVG9FeGVjdXRlKSIpOwogfQogCi12b2lkIE1hcmtpbmdD
b25zdHJhaW50Ojpkb1BhcmFsbGVsV29yayhTbG90VmlzaXRvciYgdmlzaXRvciwgU2hhcmVkVGFz
azx2b2lkKFNsb3RWaXNpdG9yJik+JiB0YXNrKQordm9pZCBNYXJraW5nQ29uc3RyYWludDo6ZG9Q
YXJhbGxlbFdvcmsoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvciwgU2hhcmVkVGFzazx2b2lk
KEFic3RyYWN0U2xvdFZpc2l0b3ImKT4mIHRhc2spCiB7CiAgICAgVmlzaXRDb3VudGVyIHZpc2l0
Q291bnRlcih2aXNpdG9yKTsKICAgICB0YXNrLnJ1bih2aXNpdG9yKTsKQEAgLTkyLDcgKzk5LDcg
QEAgdm9pZCBNYXJraW5nQ29uc3RyYWludDo6ZG9QYXJhbGxlbFdvcmsoUwogICAgIH0KIH0KIAot
dm9pZCBNYXJraW5nQ29uc3RyYWludDo6cHJlcGFyZVRvRXhlY3V0ZUltcGwoY29uc3QgQWJzdHJh
Y3RMb2NrZXImLCBTbG90VmlzaXRvciYpCit2b2lkIE1hcmtpbmdDb25zdHJhaW50OjpwcmVwYXJl
VG9FeGVjdXRlSW1wbChjb25zdCBBYnN0cmFjdExvY2tlciYsIEFic3RyYWN0U2xvdFZpc2l0b3Im
KQogewogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3Ry
YWludC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdD
b25zdHJhaW50LmgJKHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL01hcmtpbmdDb25zdHJhaW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDcgQEAK
IG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBNYXJraW5nQ29uc3RyYWludFNldDsKLWNsYXNzIFNs
b3RWaXNpdG9yOworY2xhc3MgQWJzdHJhY3RTbG90VmlzaXRvcjsKIAogY2xhc3MgTWFya2luZ0Nv
bnN0cmFpbnQgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKE1hcmtpbmdDb25zdHJhaW50KTsK
QEAgLTYwLDE1ICs2MCwxNiBAQCBwdWJsaWM6CiAgICAgCiAgICAgc2l6ZV90IGxhc3RWaXNpdENv
dW50KCkgY29uc3QgeyByZXR1cm4gbV9sYXN0VmlzaXRDb3VudDsgfQogICAgIAotICAgIHZvaWQg
ZXhlY3V0ZShTbG90VmlzaXRvciYpOwotICAgIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIHZpcnR1
YWwgZG91YmxlIHF1aWNrV29ya0VzdGltYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKTsKKyAgICB2
b2lkIGV4ZWN1dGUoQWJzdHJhY3RTbG90VmlzaXRvciYpOworCisgICAgLy8gRklYTUUgbWxhbQor
ICAgIEpTX0VYUE9SVF9QUklWQVRFIHZpcnR1YWwgZG91YmxlIHF1aWNrV29ya0VzdGltYXRlKEFi
c3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpOwogICAgIAotICAgIGRvdWJsZSB3b3JrRXN0aW1h
dGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpOworICAgIGRvdWJsZSB3b3JrRXN0aW1hdGUoQWJzdHJh
Y3RTbG90VmlzaXRvciYgdmlzaXRvcik7CiAgICAgCi0gICAgdm9pZCBwcmVwYXJlVG9FeGVjdXRl
KGNvbnN0IEFic3RyYWN0TG9ja2VyJiBjb25zdHJhaW50U29sdmluZ0xvY2tlciwgU2xvdFZpc2l0
b3ImKTsKKyAgICB2b2lkIHByZXBhcmVUb0V4ZWN1dGUoY29uc3QgQWJzdHJhY3RMb2NrZXImIGNv
bnN0cmFpbnRTb2x2aW5nTG9ja2VyLCBBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAgICAgCi0gICAg
dm9pZCBkb1BhcmFsbGVsV29yayhTbG90VmlzaXRvciYsIFNoYXJlZFRhc2s8dm9pZChTbG90Vmlz
aXRvciYpPiYpOworICAgIHZvaWQgZG9QYXJhbGxlbFdvcmsoQWJzdHJhY3RTbG90VmlzaXRvciYs
IFNoYXJlZFRhc2s8dm9pZChBYnN0cmFjdFNsb3RWaXNpdG9yJik+Jik7CiAgICAgCiAgICAgQ29u
c3RyYWludFZvbGF0aWxpdHkgdm9sYXRpbGl0eSgpIGNvbnN0IHsgcmV0dXJuIG1fdm9sYXRpbGl0
eTsgfQogICAgIApAQCAtNzYsOSArNzcsMTEgQEAgcHVibGljOgogICAgIENvbnN0cmFpbnRQYXJh
bGxlbGlzbSBwYXJhbGxlbGlzbSgpIGNvbnN0IHsgcmV0dXJuIG1fcGFyYWxsZWxpc207IH0KIAog
cHJvdGVjdGVkOgotICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlSW1wbChTbG90VmlzaXRvciYpID0g
MDsKLSAgICBKU19FWFBPUlRfUFJJVkFURSB2aXJ0dWFsIHZvaWQgcHJlcGFyZVRvRXhlY3V0ZUlt
cGwoY29uc3QgQWJzdHJhY3RMb2NrZXImIGNvbnN0cmFpbnRTb2x2aW5nTG9ja2VyLCBTbG90Vmlz
aXRvciYpOwotICAgIAorICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlSW1wbChBYnN0cmFjdFNsb3RW
aXNpdG9yJikgPSAwOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZpcnR1YWwgdm9pZCBwcmVwYXJl
VG9FeGVjdXRlSW1wbChjb25zdCBBYnN0cmFjdExvY2tlciYgY29uc3RyYWludFNvbHZpbmdMb2Nr
ZXIsIEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKKworICAgIHZvaWQgZXhlY3V0ZVN5bmNocm9ub3Vz
bHkoQWJzdHJhY3RTbG90VmlzaXRvciYpOworCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBN
YXJraW5nQ29uc3RyYWludFNldDsgLy8gU28gaXQgY2FuIHNldCBtX2luZGV4LgogICAgIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnRTZXQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50
U2V0LmNwcAkocmV2aXNpb24gMjcyMjk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
TWFya2luZ0NvbnN0cmFpbnRTZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Myw3ICs2Myw3IEBA
IHZvaWQgTWFya2luZ0NvbnN0cmFpbnRTZXQ6OmRpZFN0YXJ0TWFya2kKICAgICBtX2l0ZXJhdGlv
biA9IDE7CiB9CiAKLXZvaWQgTWFya2luZ0NvbnN0cmFpbnRTZXQ6OmFkZChDU3RyaW5nIGFiYnJl
dmlhdGVkTmFtZSwgQ1N0cmluZyBuYW1lLCA6OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3ImKT4g
ZnVuY3Rpb24sIENvbnN0cmFpbnRWb2xhdGlsaXR5IHZvbGF0aWxpdHksIENvbnN0cmFpbnRDb25j
dXJyZW5jeSBjb25jdXJyZW5jeSwgQ29uc3RyYWludFBhcmFsbGVsaXNtIHBhcmFsbGVsaXNtKQor
dm9pZCBNYXJraW5nQ29uc3RyYWludFNldDo6YWRkKENTdHJpbmcgYWJicmV2aWF0ZWROYW1lLCBD
U3RyaW5nIG5hbWUsIDo6RnVuY3Rpb248dm9pZChBYnN0cmFjdFNsb3RWaXNpdG9yJik+IGZ1bmN0
aW9uLCBDb25zdHJhaW50Vm9sYXRpbGl0eSB2b2xhdGlsaXR5LCBDb25zdHJhaW50Q29uY3VycmVu
Y3kgY29uY3VycmVuY3ksIENvbnN0cmFpbnRQYXJhbGxlbGlzbSBwYXJhbGxlbGlzbSkKIHsKICAg
ICBhZGQobWFrZVVuaXF1ZTxTaW1wbGVNYXJraW5nQ29uc3RyYWludD4oV1RGTW92ZShhYmJyZXZp
YXRlZE5hbWUpLCBXVEZNb3ZlKG5hbWUpLCBXVEZNb3ZlKGZ1bmN0aW9uKSwgdm9sYXRpbGl0eSwg
Y29uY3VycmVuY3ksIHBhcmFsbGVsaXNtKSk7CiB9CkBAIC03OCwxNCArNzgsMTQgQEAgdm9pZCBN
YXJraW5nQ29uc3RyYWludFNldDo6YWRkKAogICAgIG1fc2V0LmFwcGVuZChXVEZNb3ZlKGNvbnN0
cmFpbnQpKTsKIH0KIAotYm9vbCBNYXJraW5nQ29uc3RyYWludFNldDo6ZXhlY3V0ZUNvbnZlcmdl
bmNlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorYm9vbCBNYXJraW5nQ29uc3RyYWludFNldDo6ZXhl
Y3V0ZUNvbnZlcmdlbmNlKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgYm9v
bCByZXN1bHQgPSBleGVjdXRlQ29udmVyZ2VuY2VJbXBsKHZpc2l0b3IpOwogICAgIGRhdGFMb2dJ
ZihPcHRpb25zOjpsb2dHQygpLCAiICIpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLWJvb2wg
TWFya2luZ0NvbnN0cmFpbnRTZXQ6OmlzV2F2ZWZyb250QWR2YW5jaW5nKFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQorYm9vbCBNYXJraW5nQ29uc3RyYWludFNldDo6aXNXYXZlZnJvbnRBZHZhbmNpbmco
QWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBmb3IgKE1hcmtpbmdDb25zdHJh
aW50KiBvdXRncm93dGggOiBtX291dGdyb3d0aHMpIHsKICAgICAgICAgaWYgKG91dGdyb3d0aC0+
d29ya0VzdGltYXRlKHZpc2l0b3IpKQpAQCAtOTQsNyArOTQsNyBAQCBib29sIE1hcmtpbmdDb25z
dHJhaW50U2V0Ojppc1dhdmVmcm9udEFkCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIE1h
cmtpbmdDb25zdHJhaW50U2V0OjpleGVjdXRlQ29udmVyZ2VuY2VJbXBsKFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQorYm9vbCBNYXJraW5nQ29uc3RyYWludFNldDo6ZXhlY3V0ZUNvbnZlcmdlbmNlSW1w
bChBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFN1cGVyU2FtcGxlclNjb3Bl
IHN1cGVyU2FtcGxlclNjb3BlKGZhbHNlKTsKICAgICBNYXJraW5nQ29uc3RyYWludFNvbHZlciBz
b2x2ZXIoKnRoaXMpOwpAQCAtMTY2LDEwICsxNjYsMTAgQEAgYm9vbCBNYXJraW5nQ29uc3RyYWlu
dFNldDo6ZXhlY3V0ZUNvbnZlcgogICAgIHJldHVybiAhc29sdmVyLmRpZFZpc2l0U29tZXRoaW5n
KCk7CiB9CiAKLXZvaWQgTWFya2luZ0NvbnN0cmFpbnRTZXQ6OmV4ZWN1dGVBbGwoU2xvdFZpc2l0
b3ImIHZpc2l0b3IpCit2b2lkIE1hcmtpbmdDb25zdHJhaW50U2V0OjpleGVjdXRlQWxsU3luY2hy
b25vdXNseShBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGZvciAoYXV0byYg
Y29uc3RyYWludCA6IG1fc2V0KQotICAgICAgICBjb25zdHJhaW50LT5leGVjdXRlKHZpc2l0b3Ip
OworICAgICAgICBjb25zdHJhaW50LT5leGVjdXRlU3luY2hyb25vdXNseSh2aXNpdG9yKTsKICAg
ICBkYXRhTG9nSWYoT3B0aW9uczo6bG9nR0MoKSwgIiAiKTsKIH0KIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnRTZXQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludFNldC5oCShyZXZpc2lv
biAyNzIyOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWlu
dFNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC00NiwxNCArNDYsMTQgQEAgcHVibGljOgogICAgIHZv
aWQgYWRkKAogICAgICAgICBDU3RyaW5nIGFiYnJldmlhdGVkTmFtZSwKICAgICAgICAgQ1N0cmlu
ZyBuYW1lLAotICAgICAgICA6OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3ImKT4sCisgICAgICAg
IDo6RnVuY3Rpb248dm9pZChBYnN0cmFjdFNsb3RWaXNpdG9yJik+LAogICAgICAgICBDb25zdHJh
aW50Vm9sYXRpbGl0eSwKICAgICAgICAgQ29uc3RyYWludENvbmN1cnJlbmN5ID0gQ29uc3RyYWlu
dENvbmN1cnJlbmN5OjpDb25jdXJyZW50LAogICAgICAgICBDb25zdHJhaW50UGFyYWxsZWxpc20g
PSBDb25zdHJhaW50UGFyYWxsZWxpc206OlNlcXVlbnRpYWwpOwogICAgIAogICAgIHZvaWQgYWRk
KAogICAgICAgICBDU3RyaW5nIGFiYnJldmlhdGVkTmFtZSwgQ1N0cmluZyBuYW1lLAotICAgICAg
ICA6OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3ImKT4gZnVuYywKKyAgICAgICAgOjpGdW5jdGlv
bjx2b2lkKEFic3RyYWN0U2xvdFZpc2l0b3ImKT4gZnVuYywKICAgICAgICAgQ29uc3RyYWludFZv
bGF0aWxpdHkgdm9sYXRpbGl0eSwKICAgICAgICAgQ29uc3RyYWludFBhcmFsbGVsaXNtIHBhcmFs
bGVsaXNtKQogICAgIHsKQEAgLTY0LDIwICs2NCwyMCBAQCBwdWJsaWM6CiAgICAgCiAgICAgLy8g
QXNzdW1pbmcgdGhhdCB0aGUgbWFyayBzdGFja3MgYXJlIGFsbCBlbXB0eSwgdGhpcyB3aWxsIGdp
dmUgeW91IGEgZ3Vlc3MgYXMgdG8gd2hldGhlciBvcgogICAgIC8vIG5vdCB0aGUgd2F2ZWZyb250
IGlzIGFkdmFuY2luZy4KLSAgICBib29sIGlzV2F2ZWZyb250QWR2YW5jaW5nKFNsb3RWaXNpdG9y
Jik7Ci0gICAgYm9vbCBpc1dhdmVmcm9udFJldHJlYXRpbmcoU2xvdFZpc2l0b3ImIHZpc2l0b3Ip
IHsgcmV0dXJuICFpc1dhdmVmcm9udEFkdmFuY2luZyh2aXNpdG9yKTsgfQorICAgIGJvb2wgaXNX
YXZlZnJvbnRBZHZhbmNpbmcoQWJzdHJhY3RTbG90VmlzaXRvciYpOworICAgIGJvb2wgaXNXYXZl
ZnJvbnRSZXRyZWF0aW5nKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsgcmV0dXJuICFp
c1dhdmVmcm9udEFkdmFuY2luZyh2aXNpdG9yKTsgfQogICAgIAogICAgIC8vIFJldHVybnMgdHJ1
ZSBpZiB0aGlzIGV4ZWN1dGVkIGFsbCBjb25zdHJhaW50cyBhbmQgbm9uZSBvZiB0aGVtIHByb2R1
Y2VkIG5ldyB3b3JrLiBUaGlzCiAgICAgLy8gYXNzdW1lcyB0aGF0IHlvdSd2ZSBhbHJhZWR5IHZp
c2l0ZWQgcm9vdHMgYW5kIGRyYWluZWQgZnJvbSB0aGVyZS4KLSAgICBib29sIGV4ZWN1dGVDb252
ZXJnZW5jZShTbG90VmlzaXRvciYpOwotICAgIAorICAgIGJvb2wgZXhlY3V0ZUNvbnZlcmdlbmNl
KEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKKwogICAgIC8vIFNpbXBseSBydW5zIGFsbCBjb25zdHJh
aW50cyB3aXRob3V0IGFueSBzaGVuYW5pZ2Fucy4KLSAgICB2b2lkIGV4ZWN1dGVBbGwoU2xvdFZp
c2l0b3ImKTsKKyAgICB2b2lkIGV4ZWN1dGVBbGxTeW5jaHJvbm91c2x5KEFic3RyYWN0U2xvdFZp
c2l0b3ImKTsKICAgICAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIE1hcmtpbmdDb25zdHJh
aW50U29sdmVyOwotICAgIAotICAgIGJvb2wgZXhlY3V0ZUNvbnZlcmdlbmNlSW1wbChTbG90Vmlz
aXRvciYpOworCisgICAgYm9vbCBleGVjdXRlQ29udmVyZ2VuY2VJbXBsKEFic3RyYWN0U2xvdFZp
c2l0b3ImKTsKICAgICAKICAgICBIZWFwJiBtX2hlYXA7CiAgICAgQml0VmVjdG9yIG1fdW5leGVj
dXRlZFJvb3RzOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0
cmFpbnRTb2x2ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L01hcmtpbmdDb25zdHJhaW50U29sdmVyLmNwcAkocmV2aXNpb24gMjcyMjk3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zMyw3ICszMyw3IEBAIG5hbWVzcGFjZSBKU0MgeyAKIAogTWFya2luZ0NvbnN0
cmFpbnRTb2x2ZXI6Ok1hcmtpbmdDb25zdHJhaW50U29sdmVyKE1hcmtpbmdDb25zdHJhaW50U2V0
JiBzZXQpCiAgICAgOiBtX2hlYXAoc2V0Lm1faGVhcCkKLSAgICAsIG1fbWFpblZpc2l0b3IobV9o
ZWFwLmNvbGxlY3RvclNsb3RWaXNpdG9yKCkpCisgICAgLCBtX21haW5WaXNpdG9yKG1faGVhcC5j
b2xsZWN0b3JTbG90VmlzaXRvcigpKSAvLyBtbGFtIEZJWE1FIG5lZWQgc3VwcG9ydCBmb3IgVmVy
aWZpZXJTbG90VmlzaXRvcgogICAgICwgbV9zZXQoc2V0KQogewogICAgIG1faGVhcC5mb3JFYWNo
U2xvdFZpc2l0b3IoCkBAIC0xNTAsMTMgKzE1MCwxMyBAQCB2b2lkIE1hcmtpbmdDb25zdHJhaW50
U29sdmVyOjpleGVjdXRlKE1hCiAgICAgbV9leGVjdXRlZC5zZXQoY29uc3RyYWludC5pbmRleCgp
KTsKIH0KIAotdm9pZCBNYXJraW5nQ29uc3RyYWludFNvbHZlcjo6YWRkUGFyYWxsZWxUYXNrKFJl
ZlB0cjxTaGFyZWRUYXNrPHZvaWQoU2xvdFZpc2l0b3ImKT4+IHRhc2ssIE1hcmtpbmdDb25zdHJh
aW50JiBjb25zdHJhaW50KQordm9pZCBNYXJraW5nQ29uc3RyYWludFNvbHZlcjo6YWRkUGFyYWxs
ZWxUYXNrKFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoQWJzdHJhY3RTbG90VmlzaXRvciYpPj4gdGFz
aywgTWFya2luZ0NvbnN0cmFpbnQmIGNvbnN0cmFpbnQpCiB7CiAgICAgYXV0byBsb2NrZXIgPSBo
b2xkTG9jayhtX2xvY2spOwogICAgIG1fdG9FeGVjdXRlSW5QYXJhbGxlbC5hcHBlbmQoVGFza1dp
dGhDb25zdHJhaW50KFdURk1vdmUodGFzayksICZjb25zdHJhaW50KSk7CiB9CiAKLXZvaWQgTWFy
a2luZ0NvbnN0cmFpbnRTb2x2ZXI6OnJ1bkV4ZWN1dGlvblRocmVhZChTbG90VmlzaXRvciYgdmlz
aXRvciwgU2NoZWR1bGVyUHJlZmVyZW5jZSBwcmVmZXJlbmNlLCBTY29wZWRMYW1iZGE8T3B0aW9u
YWw8dW5zaWduZWQ+KCk+IHBpY2tOZXh0KQordm9pZCBNYXJraW5nQ29uc3RyYWludFNvbHZlcjo6
cnVuRXhlY3V0aW9uVGhyZWFkKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIFNjaGVkdWxl
clByZWZlcmVuY2UgcHJlZmVyZW5jZSwgU2NvcGVkTGFtYmRhPE9wdGlvbmFsPHVuc2lnbmVkPigp
PiBwaWNrTmV4dCkKIHsKICAgICBmb3IgKDs7KSB7CiAgICAgICAgIGJvb2wgZG9QYXJhbGxlbFdv
cmtNb2RlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFp
bnRTb2x2ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJr
aW5nQ29uc3RyYWludFNvbHZlci5oCShyZXZpc2lvbiAyNzIyOTcpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludFNvbHZlci5oCSh3b3JraW5nIGNvcHkpCkBA
IC02NSwxNSArNjUsMTUgQEAgcHVibGljOgogICAgIHZvaWQgZXhlY3V0ZShNYXJraW5nQ29uc3Ry
YWludCYpOwogICAgIAogICAgIC8vIFBhcmFsbGVsIGNvbnN0cmFpbnRzIGNhbiBhZGQgcGFyYWxs
ZWwgdGFza3MuCi0gICAgdm9pZCBhZGRQYXJhbGxlbFRhc2soUmVmUHRyPFNoYXJlZFRhc2s8dm9p
ZChTbG90VmlzaXRvciYpPj4sIE1hcmtpbmdDb25zdHJhaW50Jik7CisgICAgdm9pZCBhZGRQYXJh
bGxlbFRhc2soUmVmUHRyPFNoYXJlZFRhc2s8dm9pZChBYnN0cmFjdFNsb3RWaXNpdG9yJik+Piwg
TWFya2luZ0NvbnN0cmFpbnQmKTsKICAgICAKIHByaXZhdGU6Ci0gICAgdm9pZCBydW5FeGVjdXRp
b25UaHJlYWQoU2xvdFZpc2l0b3ImLCBTY2hlZHVsZXJQcmVmZXJlbmNlLCBTY29wZWRMYW1iZGE8
T3B0aW9uYWw8dW5zaWduZWQ+KCk+IHBpY2tOZXh0KTsKKyAgICB2b2lkIHJ1bkV4ZWN1dGlvblRo
cmVhZChBYnN0cmFjdFNsb3RWaXNpdG9yJiwgU2NoZWR1bGVyUHJlZmVyZW5jZSwgU2NvcGVkTGFt
YmRhPE9wdGlvbmFsPHVuc2lnbmVkPigpPiBwaWNrTmV4dCk7CiAgICAgCiAgICAgc3RydWN0IFRh
c2tXaXRoQ29uc3RyYWludCB7CiAgICAgICAgIFRhc2tXaXRoQ29uc3RyYWludCgpIHsgfQogICAg
ICAgICAKLSAgICAgICAgVGFza1dpdGhDb25zdHJhaW50KFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQo
U2xvdFZpc2l0b3ImKT4+IHRhc2ssIE1hcmtpbmdDb25zdHJhaW50KiBjb25zdHJhaW50KQorICAg
ICAgICBUYXNrV2l0aENvbnN0cmFpbnQoUmVmUHRyPFNoYXJlZFRhc2s8dm9pZChBYnN0cmFjdFNs
b3RWaXNpdG9yJik+PiB0YXNrLCBNYXJraW5nQ29uc3RyYWludCogY29uc3RyYWludCkKICAgICAg
ICAgICAgIDogdGFzayhXVEZNb3ZlKHRhc2spKQogICAgICAgICAgICAgLCBjb25zdHJhaW50KGNv
bnN0cmFpbnQpCiAgICAgICAgIHsKQEAgLTg1LDEyICs4NSwxMiBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgICAgICYmIGNvbnN0cmFpbnQgPT0gb3RoZXIuY29uc3RyYWludDsKICAgICAgICAgfQog
ICAgICAgICAKLSAgICAgICAgUmVmUHRyPFNoYXJlZFRhc2s8dm9pZChTbG90VmlzaXRvciYpPj4g
dGFzazsKKyAgICAgICAgUmVmUHRyPFNoYXJlZFRhc2s8dm9pZChBYnN0cmFjdFNsb3RWaXNpdG9y
Jik+PiB0YXNrOwogICAgICAgICBNYXJraW5nQ29uc3RyYWludCogY29uc3RyYWludCB7IG51bGxw
dHIgfTsKICAgICB9OwogICAgIAogICAgIEhlYXAmIG1faGVhcDsKLSAgICBTbG90VmlzaXRvciYg
bV9tYWluVmlzaXRvcjsKKyAgICBBYnN0cmFjdFNsb3RWaXNpdG9yJiBtX21haW5WaXNpdG9yOwog
ICAgIE1hcmtpbmdDb25zdHJhaW50U2V0JiBtX3NldDsKICAgICBCaXRWZWN0b3IgbV9leGVjdXRl
ZDsKICAgICBEZXF1ZTxUYXNrV2l0aENvbnN0cmFpbnQsIDMyPiBtX3RvRXhlY3V0ZUluUGFyYWxs
ZWw7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9QcmVjaXNlQWxsb2NhdGlvbi5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvUHJlY2lzZUFsbG9j
YXRpb24uY3BwCShyZXZpc2lvbiAyNzIyOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9QcmVjaXNlQWxsb2NhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwMCwxMSArMjAwLDE2
IEBAIHZvaWQgUHJlY2lzZUFsbG9jYXRpb246OnNocmluaygpCiAgICAgbV93ZWFrU2V0LnNocmlu
aygpOwogfQogCi12b2lkIFByZWNpc2VBbGxvY2F0aW9uOjp2aXNpdFdlYWtTZXQoU2xvdFZpc2l0
b3ImIHZpc2l0b3IpCisvL3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+CisvL3ZvaWQgUHJlY2lz
ZUFsbG9jYXRpb246OnZpc2l0V2Vha1NldChWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBQcmVjaXNl
QWxsb2NhdGlvbjo6dmlzaXRXZWFrU2V0MTAwMChBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9y
KQogewotICAgIG1fd2Vha1NldC52aXNpdCh2aXNpdG9yKTsKKyAgICBtX3dlYWtTZXQudmlzaXQx
KHZpc2l0b3IpOwogfQogCisvL3RlbXBsYXRlIHZvaWQgUHJlY2lzZUFsbG9jYXRpb246OnZpc2l0
V2Vha1NldChTbG90VmlzaXRvciYpOworLy90ZW1wbGF0ZSB2b2lkIFByZWNpc2VBbGxvY2F0aW9u
Ojp2aXNpdFdlYWtTZXQoVmVyaWZpZXJTbG90VmlzaXRvciYpOworCiB2b2lkIFByZWNpc2VBbGxv
Y2F0aW9uOjpyZWFwV2Vha1NldCgpCiB7CiAgICAgcmV0dXJuIG1fd2Vha1NldC5yZWFwKCk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9QcmVjaXNlQWxsb2NhdGlvbi5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1ByZWNpc2VBbGxvY2F0aW9uLmgJ
KHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1ByZWNpc2VB
bGxvY2F0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTgyLDcgKzgyLDggQEAgcHVibGljOgogICAg
IAogICAgIHZvaWQgc2hyaW5rKCk7CiAgICAgCi0gICAgdm9pZCB2aXNpdFdlYWtTZXQoU2xvdFZp
c2l0b3ImKTsKKy8vICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgdmlzaXRXZWFr
U2V0KFZpc2l0b3ImKTsKKyAgICB2b2lkIHZpc2l0V2Vha1NldDEwMDAoQWJzdHJhY3RTbG90Vmlz
aXRvciYpOwogICAgIHZvaWQgcmVhcFdlYWtTZXQoKTsKICAgICAKICAgICB2b2lkIGNsZWFyTmV3
bHlBbGxvY2F0ZWQoKSB7IG1faXNOZXdseUFsbG9jYXRlZCA9IGZhbHNlOyB9CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TaW1wbGVNYXJraW5nQ29uc3RyYWludC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2ltcGxlTWFya2luZ0NvbnN0cmFp
bnQuY3BwCShyZXZpc2lvbiAyNzIyOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9T
aW1wbGVNYXJraW5nQ29uc3RyYWludC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDcg
QEAgbmFtZXNwYWNlIEpTQyB7CiAKIFNpbXBsZU1hcmtpbmdDb25zdHJhaW50OjpTaW1wbGVNYXJr
aW5nQ29uc3RyYWludCgKICAgICBDU3RyaW5nIGFiYnJldmlhdGVkTmFtZSwgQ1N0cmluZyBuYW1l
LAotICAgIDo6RnVuY3Rpb248dm9pZChTbG90VmlzaXRvciYpPiBleGVjdXRlRnVuY3Rpb24sCisg
ICAgOjpGdW5jdGlvbjx2b2lkKEFic3RyYWN0U2xvdFZpc2l0b3ImKT4gZXhlY3V0ZUZ1bmN0aW9u
LAogICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5IHZvbGF0aWxpdHksIENvbnN0cmFpbnRDb25jdXJy
ZW5jeSBjb25jdXJyZW5jeSwKICAgICBDb25zdHJhaW50UGFyYWxsZWxpc20gcGFyYWxsZWxpc20p
CiAgICAgOiBNYXJraW5nQ29uc3RyYWludChXVEZNb3ZlKGFiYnJldmlhdGVkTmFtZSksIFdURk1v
dmUobmFtZSksIHZvbGF0aWxpdHksIGNvbmN1cnJlbmN5LCBwYXJhbGxlbGlzbSkKQEAgLTQyLDcg
KzQyLDcgQEAgU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQ6On5TaW1wbGVNYXJraW5nQwogewogfQog
Ci12b2lkIFNpbXBsZU1hcmtpbmdDb25zdHJhaW50OjpleGVjdXRlSW1wbChTbG90VmlzaXRvciYg
dmlzaXRvcikKK3ZvaWQgU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQ6OmV4ZWN1dGVJbXBsKEFic3Ry
YWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgbV9leGVjdXRlRnVuY3Rpb24odmlzaXRv
cik7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TaW1wbGVNYXJraW5nQ29u
c3RyYWludC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1NpbXBs
ZU1hcmtpbmdDb25zdHJhaW50LmgJKHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL1NpbXBsZU1hcmtpbmdDb25zdHJhaW50LmgJKHdvcmtpbmcgY29weSkKQEAg
LTM3LDE0ICszNywxNCBAQCBjbGFzcyBTaW1wbGVNYXJraW5nQ29uc3RyYWludCBmaW5hbCA6IHB1
CiBwdWJsaWM6CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQo
CiAgICAgICAgIENTdHJpbmcgYWJicmV2aWF0ZWROYW1lLCBDU3RyaW5nIG5hbWUsCi0gICAgICAg
IDo6RnVuY3Rpb248dm9pZChTbG90VmlzaXRvciYpPiwKKyAgICAgICAgOjpGdW5jdGlvbjx2b2lk
KEFic3RyYWN0U2xvdFZpc2l0b3ImKT4sCiAgICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5LAog
ICAgICAgICBDb25zdHJhaW50Q29uY3VycmVuY3kgPSBDb25zdHJhaW50Q29uY3VycmVuY3k6OkNv
bmN1cnJlbnQsCiAgICAgICAgIENvbnN0cmFpbnRQYXJhbGxlbGlzbSA9IENvbnN0cmFpbnRQYXJh
bGxlbGlzbTo6U2VxdWVudGlhbCk7CiAgICAgCiAgICAgU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQo
CiAgICAgICAgIENTdHJpbmcgYWJicmV2aWF0ZWROYW1lLCBDU3RyaW5nIG5hbWUsCi0gICAgICAg
IDo6RnVuY3Rpb248dm9pZChTbG90VmlzaXRvciYpPiBmdW5jLAorICAgICAgICA6OkZ1bmN0aW9u
PHZvaWQoQWJzdHJhY3RTbG90VmlzaXRvciYpPiBmdW5jLAogICAgICAgICBDb25zdHJhaW50Vm9s
YXRpbGl0eSB2b2xhdGlsaXR5LAogICAgICAgICBDb25zdHJhaW50UGFyYWxsZWxpc20gcGFyYWxs
ZWxpc20pCiAgICAgICAgIDogU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQoYWJicmV2aWF0ZWROYW1l
LCBuYW1lLCBXVEZNb3ZlKGZ1bmMpLCB2b2xhdGlsaXR5LCBDb25zdHJhaW50Q29uY3VycmVuY3k6
OkNvbmN1cnJlbnQsIHBhcmFsbGVsaXNtKQpAQCAtNTQsOSArNTQsOSBAQCBwdWJsaWM6CiAgICAg
SlNfRVhQT1JUX1BSSVZBVEUgflNpbXBsZU1hcmtpbmdDb25zdHJhaW50KCkgZmluYWw7CiAgICAg
CiBwcml2YXRlOgotICAgIHZvaWQgZXhlY3V0ZUltcGwoU2xvdFZpc2l0b3ImKSBmaW5hbDsKKyAg
ICB2b2lkIGV4ZWN1dGVJbXBsKEFic3RyYWN0U2xvdFZpc2l0b3ImKSBmaW5hbDsKIAotICAgIDo6
RnVuY3Rpb248dm9pZChTbG90VmlzaXRvciYpPiBtX2V4ZWN1dGVGdW5jdGlvbjsKKyAgICA6OkZ1
bmN0aW9uPHZvaWQoQWJzdHJhY3RTbG90VmlzaXRvciYpPiBtX2V4ZWN1dGVGdW5jdGlvbjsKIH07
CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
U2xvdFZpc2l0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L1Nsb3RWaXNpdG9yLmNwcAkocmV2aXNpb24gMjcyMjk3KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvU2xvdFZpc2l0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYsNiArMjYsNyBA
QAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlNsb3RWaXNpdG9yLmgiCiAKKyNpbmNs
dWRlICJBYnN0cmFjdFNsb3RWaXNpdG9ySW5saW5lcy5oIgogI2luY2x1ZGUgIkNvbnNlcnZhdGl2
ZVJvb3RzLmgiCiAjaW5jbHVkZSAiR0NTZWdtZW50ZWRBcnJheUlubGluZXMuaCIKICNpbmNsdWRl
ICJIZWFwQW5hbHl6ZXIuaCIKQEAgLTc3LDE1ICs3OCwxNyBAQCBzdGF0aWMgdm9pZCB2YWxpZGF0
ZShKU0NlbGwqIGNlbGwpCiAjZW5kaWYKIAogU2xvdFZpc2l0b3I6OlNsb3RWaXNpdG9yKEhlYXAm
IGhlYXAsIENTdHJpbmcgY29kZU5hbWUpCi0gICAgOiBtX2J5dGVzVmlzaXRlZCgwKQotICAgICwg
bV92aXNpdENvdW50KDApCisvLyAgICA6IEJhc2UoVHlwZTo6U2xvdFZpc2l0b3IsIGhlYXAsIGNv
ZGVOYW1lKQorICAgIDogQmFzZShoZWFwLCBjb2RlTmFtZSkKKyAgICAsIG1fYnl0ZXNWaXNpdGVk
KDApCisvLyAgICAsIG1fdmlzaXRDb3VudCgwKQogICAgICwgbV9pc0luUGFyYWxsZWxNb2RlKGZh
bHNlKQogICAgICwgbV9tYXJraW5nVmVyc2lvbihNYXJrZWRTcGFjZTo6aW5pdGlhbFZlcnNpb24p
Ci0gICAgLCBtX2hlYXAoaGVhcCkKLSAgICAsIG1fY29kZU5hbWUoY29kZU5hbWUpCisvLyAgICAs
IG1faGVhcChoZWFwKQorLy8gICAgLCBtX2NvZGVOYW1lKGNvZGVOYW1lKQogI2lmIEFTU0VSVF9F
TkFCTEVECiAgICAgLCBtX2lzQ2hlY2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlvbihmYWxzZSkK
LSAgICAsIG1faXNEcmFpbmluZyhmYWxzZSkKKy8vLy8gICAgLCBtX2lzRHJhaW5pbmcoZmFsc2Up
CiAjZW5kaWYKIHsKIH0KQEAgLTExNyw4ICsxMjAsOSBAQCB2b2lkIFNsb3RWaXNpdG9yOjpkaWRT
dGFydE1hcmtpbmcoKQogCiB2b2lkIFNsb3RWaXNpdG9yOjpyZXNldCgpCiB7CisgICAgQWJzdHJh
Y3RTbG90VmlzaXRvcjo6cmVzZXQoKTsKICAgICBtX2J5dGVzVmlzaXRlZCA9IDA7Ci0gICAgbV92
aXNpdENvdW50ID0gMDsKKy8vICAgIG1fdmlzaXRDb3VudCA9IDA7CiAgICAgbV9oZWFwQW5hbHl6
ZXIgPSBudWxscHRyOwogICAgIFJFTEVBU0VfQVNTRVJUKCFtX2N1cnJlbnRDZWxsKTsKIH0KQEAg
LTEzMiw3ICsxMzYsNyBAQCB2b2lkIFNsb3RWaXNpdG9yOjpjbGVhck1hcmtTdGFja3MoKQogICAg
ICAgICB9KTsKIH0KIAotdm9pZCBTbG90VmlzaXRvcjo6YXBwZW5kKGNvbnN0IENvbnNlcnZhdGl2
ZVJvb3RzJiBjb25zZXJ2YXRpdmVSb290cykKK3ZvaWQgU2xvdFZpc2l0b3I6OmFwcGVuZF9Db25z
ZXJ2YXRpdmVSb290cyhjb25zdCBDb25zZXJ2YXRpdmVSb290cyYgY29uc2VydmF0aXZlUm9vdHMp
CiB7CiAgICAgSGVhcENlbGwqKiByb290cyA9IGNvbnNlcnZhdGl2ZVJvb3RzLnJvb3RzKCk7CiAg
ICAgc2l6ZV90IHNpemUgPSBjb25zZXJ2YXRpdmVSb290cy5zaXplKCk7CkBAIC0yMzAsNyArMjM0
LDcgQEAgdm9pZCBTbG90VmlzaXRvcjo6YXBwZW5kSlNDZWxsT3JBdXhpbGlhcgogdm9pZCBTbG90
VmlzaXRvcjo6YXBwZW5kU2xvdyhKU0NlbGwqIGNlbGwsIERlcGVuZGVuY3kgZGVwZW5kZW5jeSkK
IHsKICAgICBpZiAoVU5MSUtFTFkobV9oZWFwQW5hbHl6ZXIpKQotICAgICAgICBtX2hlYXBBbmFs
eXplci0+YW5hbHl6ZUVkZ2UobV9jdXJyZW50Q2VsbCwgY2VsbCwgbV9yb290TWFya1JlYXNvbik7
CisgICAgICAgIG1faGVhcEFuYWx5emVyLT5hbmFseXplRWRnZShtX2N1cnJlbnRDZWxsLCBjZWxs
LCByb290TWFya1JlYXNvbigpKTsKIAogICAgIGFwcGVuZEhpZGRlblNsb3dJbXBsKGNlbGwsIGRl
cGVuZGVuY3kpOwogfQpAQCAtODA3LDEyICs4MTEsMTIgQEAgTWFya1N0YWNrQXJyYXkmIFNsb3RW
aXNpdG9yOjpjb3JyZXNwb25kaQogICAgIHJldHVybiAqbV9oZWFwLm1fc2hhcmVkTXV0YXRvck1h
cmtTdGFjazsKIH0KIAotdm9pZCBTbG90VmlzaXRvcjo6YWRkUGFyYWxsZWxDb25zdHJhaW50VGFz
ayhSZWZQdHI8U2hhcmVkVGFzazx2b2lkKFNsb3RWaXNpdG9yJik+PiB0YXNrKQordm9pZCBTbG90
VmlzaXRvcjo6YWRkUGFyYWxsZWxDb25zdHJhaW50VGFzayhSZWZQdHI8U2hhcmVkVGFzazx2b2lk
KEFic3RyYWN0U2xvdFZpc2l0b3ImKT4+IHRhc2spCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQobV9j
dXJyZW50U29sdmVyKTsKICAgICBSRUxFQVNFX0FTU0VSVChtX2N1cnJlbnRDb25zdHJhaW50KTsK
ICAgICBSRUxFQVNFX0FTU0VSVCh0YXNrKTsKLSAgICAKKwogICAgIG1fY3VycmVudFNvbHZlci0+
YWRkUGFyYWxsZWxUYXNrKHRhc2ssICptX2N1cnJlbnRDb25zdHJhaW50KTsKIH0KIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5oCShyZXZpc2lvbiAyNzIyOTcp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMS0yMDE5IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMjUsNzQgKzI1LDEwNSBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgIkFi
c3RyYWN0U2xvdFZpc2l0b3IuaCIKICNpbmNsdWRlICJIYW5kbGVUeXBlcy5oIgogI2luY2x1ZGUg
Ikl0ZXJhdGlvblN0YXR1cy5oIgotI2luY2x1ZGUgIk1hcmtTdGFjay5oIgotI2luY2x1ZGUgIlZp
c2l0UmFjZUtleS5oIgorLy8jaW5jbHVkZSAiTWFya1N0YWNrLmgiCisvLyNpbmNsdWRlICJWaXNp
dFJhY2VLZXkuaCIKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9Nb25v
dG9uaWNUaW1lLmg+Ci0jaW5jbHVkZSA8d3RmL1NoYXJlZFRhc2suaD4KLSNpbmNsdWRlIDx3dGYv
dGV4dC9DU3RyaW5nLmg+CisvLyNpbmNsdWRlIDx3dGYvU2hhcmVkVGFzay5oPgorLy8jaW5jbHVk
ZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIAotY2xhc3MgQ29uc2Vy
dmF0aXZlUm9vdHM7CisvL2NsYXNzIENvbnNlcnZhdGl2ZVJvb3RzOwogY2xhc3MgR0NUaHJlYWRT
aGFyZWREYXRhOwotY2xhc3MgSGVhcDsKKy8vY2xhc3MgSGVhcDsKIGNsYXNzIEhlYXBDZWxsOwog
Y2xhc3MgSGVhcEFuYWx5emVyOwotY2xhc3MgTWFya2VkQmxvY2s7CiBjbGFzcyBNYXJraW5nQ29u
c3RyYWludDsKIGNsYXNzIE1hcmtpbmdDb25zdHJhaW50U29sdmVyOwotdGVtcGxhdGU8dHlwZW5h
bWUgVD4gY2xhc3MgV2VhazsKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFRyYWl0cz4g
Y2xhc3MgV3JpdGVCYXJyaWVyQmFzZTsKKy8vdGVtcGxhdGU8dHlwZW5hbWUgVD4gY2xhc3MgV2Vh
azsKKy8vdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVHJhaXRzPiBjbGFzcyBXcml0ZUJh
cnJpZXJCYXNlOwogCiB0eXBlZGVmIHVpbnQzMl90IEhlYXBWZXJzaW9uOwogCi1jbGFzcyBTbG90
VmlzaXRvciB7CitjbGFzcyBTbG90VmlzaXRvciBmaW5hbCA6IHB1YmxpYyBBYnN0cmFjdFNsb3RW
aXNpdG9yIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShTbG90VmlzaXRvcik7CiAgICAgV1RG
X01BS0VfRkFTVF9BTExPQ0FURUQ7CiAKKyAgICB1c2luZyBCYXNlID0gQWJzdHJhY3RTbG90Vmlz
aXRvcjsKKwogICAgIGZyaWVuZCBjbGFzcyBTZXRDdXJyZW50Q2VsbFNjb3BlOwogICAgIGZyaWVu
ZCBjbGFzcyBIZWFwOwogCiBwdWJsaWM6Ci0gICAgZW51bSBSb290TWFya1JlYXNvbiB7Ci0gICAg
ICAgIE5vbmUsCi0gICAgICAgIENvbnNlcnZhdGl2ZVNjYW4sCi0gICAgICAgIFN0cm9uZ1JlZmVy
ZW5jZXMsCi0gICAgICAgIFByb3RlY3RlZFZhbHVlcywKLSAgICAgICAgTWFya0xpc3RTZXQsCi0g
ICAgICAgIFZNRXhjZXB0aW9ucywKLSAgICAgICAgU3Ryb25nSGFuZGxlcywKLSAgICAgICAgRGVi
dWdnZXIsCi0gICAgICAgIEpJVFN0dWJSb3V0aW5lcywKLSAgICAgICAgV2Vha1NldHMsCi0gICAg
ICAgIE91dHB1dCwKLSAgICAgICAgREZHV29ya0xpc3RzLAotICAgICAgICBDb2RlQmxvY2tzLAot
ICAgICAgICBET01HQ091dHB1dCwKKyAgICBjbGFzcyBDb250ZXh0IHsKKyAgICBwdWJsaWM6Cisg
ICAgICAgIEFMV0FZU19JTkxJTkUgQ29udGV4dChBYnN0cmFjdFNsb3RWaXNpdG9yJiwgSGVhcENl
bGwqKSB7IH0KKyAgICB9OworCisgICAgY2xhc3MgRGVmYXVsdE1hcmtpbmdWaW9sYXRpb25Bc3Nl
cnRpb25TY29wZSB7CisgICAgcHVibGljOgorI2lmIEFTU0VSVF9FTkFCTEVECisgICAgICAgIERl
ZmF1bHRNYXJraW5nVmlvbGF0aW9uQXNzZXJ0aW9uU2NvcGUoU2xvdFZpc2l0b3ImIHZpc2l0b3Ip
CisgICAgICAgICAgICA6IG1fdmlzaXRvcih2aXNpdG9yKQorICAgICAgICB7CisgICAgICAgICAg
ICBtX3dhc0NoZWNraW5nRm9yRGVmYXVsdE1hcmtWaW9sYXRpb24gPSBtX3Zpc2l0b3IubV9pc0No
ZWNraW5nRm9yRGVmYXVsdE1hcmtWaW9sYXRpb247CisgICAgICAgICAgICBtX3Zpc2l0b3IubV9p
c0NoZWNraW5nRm9yRGVmYXVsdE1hcmtWaW9sYXRpb24gPSBmYWxzZTsKKyAgICAgICAgfQorCisg
ICAgICAgIH5EZWZhdWx0TWFya2luZ1Zpb2xhdGlvbkFzc2VydGlvblNjb3BlKCkKKyAgICAgICAg
eworICAgICAgICAgICAgbV92aXNpdG9yLm1faXNDaGVja2luZ0ZvckRlZmF1bHRNYXJrVmlvbGF0
aW9uID0gbV93YXNDaGVja2luZ0ZvckRlZmF1bHRNYXJrVmlvbGF0aW9uOworICAgICAgICB9CisK
KyAgICBwcml2YXRlOgorICAgICAgICBTbG90VmlzaXRvciYgbV92aXNpdG9yOworICAgICAgICBi
b29sIG1fd2FzQ2hlY2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlvbjsKKyNlbHNlCisgICAgICAg
IERlZmF1bHRNYXJraW5nVmlvbGF0aW9uQXNzZXJ0aW9uU2NvcGUoU2xvdFZpc2l0b3ImKSB7IH0K
KyNlbmRpZgogICAgIH07CiAKKy8vICAgIGVudW0gUm9vdE1hcmtSZWFzb24geworLy8gICAgICAg
IE5vbmUsCisvLyAgICAgICAgQ29uc2VydmF0aXZlU2NhbiwKKy8vICAgICAgICBTdHJvbmdSZWZl
cmVuY2VzLAorLy8gICAgICAgIFByb3RlY3RlZFZhbHVlcywKKy8vICAgICAgICBNYXJrTGlzdFNl
dCwKKy8vICAgICAgICBWTUV4Y2VwdGlvbnMsCisvLyAgICAgICAgU3Ryb25nSGFuZGxlcywKKy8v
ICAgICAgICBEZWJ1Z2dlciwKKy8vICAgICAgICBKSVRTdHViUm91dGluZXMsCisvLyAgICAgICAg
V2Vha1NldHMsCisvLyAgICAgICAgT3V0cHV0LAorLy8gICAgICAgIERGR1dvcmtMaXN0cywKKy8v
ICAgICAgICBDb2RlQmxvY2tzLAorLy8gICAgICAgIERPTUdDT3V0cHV0LAorLy8gICAgfTsKKwog
ICAgIFNsb3RWaXNpdG9yKEhlYXAmLCBDU3RyaW5nIGNvZGVOYW1lKTsKICAgICB+U2xvdFZpc2l0
b3IoKTsKIAotICAgIE1hcmtTdGFja0FycmF5JiBjb2xsZWN0b3JNYXJrU3RhY2soKSB7IHJldHVy
biBtX2NvbGxlY3RvclN0YWNrOyB9Ci0gICAgTWFya1N0YWNrQXJyYXkmIG11dGF0b3JNYXJrU3Rh
Y2soKSB7IHJldHVybiBtX211dGF0b3JTdGFjazsgfQotICAgIGNvbnN0IE1hcmtTdGFja0FycmF5
JiBjb2xsZWN0b3JNYXJrU3RhY2soKSBjb25zdCB7IHJldHVybiBtX2NvbGxlY3RvclN0YWNrOyB9
Ci0gICAgY29uc3QgTWFya1N0YWNrQXJyYXkmIG11dGF0b3JNYXJrU3RhY2soKSBjb25zdCB7IHJl
dHVybiBtX211dGF0b3JTdGFjazsgfQotICAgIAotICAgIFZNJiB2bSgpOwotICAgIGNvbnN0IFZN
JiB2bSgpIGNvbnN0OwotICAgIEhlYXAqIGhlYXAoKSBjb25zdDsKLQotICAgIHZvaWQgYXBwZW5k
KGNvbnN0IENvbnNlcnZhdGl2ZVJvb3RzJik7Ci0gICAgCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUg
VCwgdHlwZW5hbWUgVHJhaXRzPiB2b2lkIGFwcGVuZChjb25zdCBXcml0ZUJhcnJpZXJCYXNlPFQs
IFRyYWl0cz4mKTsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBUcmFpdHM+IHZv
aWQgYXBwZW5kSGlkZGVuKGNvbnN0IFdyaXRlQmFycmllckJhc2U8VCwgVHJhaXRzPiYpOwotICAg
IHRlbXBsYXRlPHR5cGVuYW1lIEl0ZXJhdG9yPiB2b2lkIGFwcGVuZChJdGVyYXRvciBiZWdpbiAs
IEl0ZXJhdG9yIGVuZCk7Ci0gICAgdm9pZCBhcHBlbmRWYWx1ZXMoY29uc3QgV3JpdGVCYXJyaWVy
QmFzZTxVbmtub3duLCBSYXdWYWx1ZVRyYWl0czxVbmtub3duPj4qLCBzaXplX3QgY291bnQpOwot
ICAgIHZvaWQgYXBwZW5kVmFsdWVzSGlkZGVuKGNvbnN0IFdyaXRlQmFycmllckJhc2U8VW5rbm93
biwgUmF3VmFsdWVUcmFpdHM8VW5rbm93bj4+Kiwgc2l6ZV90IGNvdW50KTsKKy8vICAgIE1hcmtT
dGFja0FycmF5JiBjb2xsZWN0b3JNYXJrU3RhY2soKSB7IHJldHVybiBtX2NvbGxlY3RvclN0YWNr
OyB9CisvLyAgICBNYXJrU3RhY2tBcnJheSYgbXV0YXRvck1hcmtTdGFjaygpIHsgcmV0dXJuIG1f
bXV0YXRvclN0YWNrOyB9CisvLyAgICBjb25zdCBNYXJrU3RhY2tBcnJheSYgY29sbGVjdG9yTWFy
a1N0YWNrKCkgY29uc3QgeyByZXR1cm4gbV9jb2xsZWN0b3JTdGFjazsgfQorLy8gICAgY29uc3Qg
TWFya1N0YWNrQXJyYXkmIG11dGF0b3JNYXJrU3RhY2soKSBjb25zdCB7IHJldHVybiBtX211dGF0
b3JTdGFjazsgfQorICAgIAorLy8gICAgVk0mIHZtKCk7CisvLyAgICBjb25zdCBWTSYgdm0oKSBj
b25zdDsKKy8vICAgIEhlYXAqIGhlYXAoKSBjb25zdDsKKworICAgIHZvaWQgYXBwZW5kX0NvbnNl
cnZhdGl2ZVJvb3RzKGNvbnN0IENvbnNlcnZhdGl2ZVJvb3RzJikgZmluYWw7CisKKyAgICB1c2lu
ZyBCYXNlOjphcHBlbmQ7CisvLyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBUcmFp
dHM+IHZvaWQgYXBwZW5kKGNvbnN0IFdyaXRlQmFycmllckJhc2U8VCwgVHJhaXRzPiYpOworLy8g
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVHJhaXRzPiB2b2lkIGFwcGVuZEhpZGRl
bihjb25zdCBXcml0ZUJhcnJpZXJCYXNlPFQsIFRyYWl0cz4mKTsKKy8vICAgIHRlbXBsYXRlPHR5
cGVuYW1lIEl0ZXJhdG9yPiB2b2lkIGFwcGVuZChJdGVyYXRvciBiZWdpbiAsIEl0ZXJhdG9yIGVu
ZCk7CisvLyAgICB2b2lkIGFwcGVuZFZhbHVlcyhjb25zdCBXcml0ZUJhcnJpZXJCYXNlPFVua25v
d24sIFJhd1ZhbHVlVHJhaXRzPFVua25vd24+PiosIHNpemVfdCBjb3VudCk7CisvLyAgICB2b2lk
IGFwcGVuZFZhbHVlc0hpZGRlbihjb25zdCBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24sIFJhd1Zh
bHVlVHJhaXRzPFVua25vd24+PiosIHNpemVfdCBjb3VudCk7CiAgICAgCiAgICAgLy8gVGhlc2Ug
ZG9uJ3QgcmVxdWlyZSB5b3UgdG8gcHJvdmUgdGhhdCB5b3UgaGF2ZSBhIFdyaXRlQmFycmllcjw+
LiBUaGF0IG1ha2VzIHNlbnNlCiAgICAgLy8gZm9yOgpAQCAtMTAzLDMyICsxMzQsMzYgQEAgcHVi
bGljOgogICAgIC8vCiAgICAgLy8gSWYgeW91IGFyZSBub3QgYSByb290IGFuZCB5b3UgZG9uJ3Qg
a25vdyB3aGF0IGtpbmQgb2YgYmFycmllciB5b3UgaGF2ZSwgdGhlbiB5b3UKICAgICAvLyBzaG91
bGRuJ3QgY2FsbCB0aGVzZSBtZXRob2RzLgotICAgIHZvaWQgYXBwZW5kVW5iYXJyaWVyZWQoSlNW
YWx1ZSk7Ci0gICAgdm9pZCBhcHBlbmRVbmJhcnJpZXJlZChKU1ZhbHVlKiwgc2l6ZV90KTsKLSAg
ICB2b2lkIGFwcGVuZFVuYmFycmllcmVkKEpTQ2VsbCopOworLy8gICAgdm9pZCBhcHBlbmRVbmJh
cnJpZXJlZChKU1ZhbHVlKSBmaW5hbDsKKy8vICAgIHZvaWQgYXBwZW5kVW5iYXJyaWVyZWQoSlNW
YWx1ZSosIHNpemVfdCk7CisgICAgdm9pZCBhcHBlbmRVbmJhcnJpZXJlZEltcGwoSlNDZWxsKikg
ZmluYWw7CiAgICAgCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICB2b2lkIGFwcGVuZChj
b25zdCBXZWFrPFQ+JiB3ZWFrKTsKKy8vICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisvLyAgICB2
b2lkIGFwcGVuZChjb25zdCBXZWFrPFQ+JiB3ZWFrKTsKICAgICAKLSAgICB2b2lkIGFwcGVuZEhp
ZGRlblVuYmFycmllcmVkKEpTVmFsdWUpOwotICAgIHZvaWQgYXBwZW5kSGlkZGVuVW5iYXJyaWVy
ZWQoSlNDZWxsKik7CisvLyAgICB2b2lkIGFwcGVuZEhpZGRlblVuYmFycmllcmVkKEpTVmFsdWUp
IGZpbmFsOworICAgIHZvaWQgYXBwZW5kSGlkZGVuVW5iYXJyaWVyZWRJbXBsKEpTQ2VsbCopIGZp
bmFsOwogCi0gICAgYm9vbCBhZGRPcGFxdWVSb290KHZvaWQqKTsgLy8gUmV0dXJucyB0cnVlIGlm
IHRoZSByb290IHdhcyBuZXcuCisgICAgYm9vbCBhZGRPcGFxdWVSb290KHZvaWQqKSBmaW5hbDsg
Ly8gUmV0dXJucyB0cnVlIGlmIHRoZSByb290IHdhcyBuZXcuCiAgICAgCi0gICAgYm9vbCBjb250
YWluc09wYXF1ZVJvb3Qodm9pZCopIGNvbnN0OworICAgIGJvb2wgY29udGFpbnNPcGFxdWVSb290
KHZvaWQqKSBjb25zdCBmaW5hbDsKIAotICAgIGJvb2wgaXNFbXB0eSgpIHsgcmV0dXJuIG1fY29s
bGVjdG9yU3RhY2suaXNFbXB0eSgpICYmIG1fbXV0YXRvclN0YWNrLmlzRW1wdHkoKTsgfQorLy8g
ICAgYm9vbCBpc0VtcHR5KCkgeyByZXR1cm4gbV9jb2xsZWN0b3JTdGFjay5pc0VtcHR5KCkgJiYg
bV9tdXRhdG9yU3RhY2suaXNFbXB0eSgpOyB9CiAKICAgICBib29sIGlzRmlyc3RWaXNpdCgpIGNv
bnN0IHsgcmV0dXJuIG1faXNGaXJzdFZpc2l0OyB9CiAKKyAgICBib29sIGlzTWFya2VkKGNvbnN0
IHZvaWQqKSBjb25zdCBmaW5hbDsKKyAgICBib29sIGlzTWFya2VkKE1hcmtlZEJsb2NrJiwgSGVh
cENlbGwqKSBjb25zdCBmaW5hbDsKKyAgICBib29sIGlzTWFya2VkKFByZWNpc2VBbGxvY2F0aW9u
JiwgSGVhcENlbGwqKSBjb25zdCBmaW5hbDsKKwogICAgIHZvaWQgZGlkU3RhcnRNYXJraW5nKCk7
CiAgICAgdm9pZCByZXNldCgpOwogICAgIHZvaWQgY2xlYXJNYXJrU3RhY2tzKCk7CiAKICAgICBz
aXplX3QgYnl0ZXNWaXNpdGVkKCkgY29uc3QgeyByZXR1cm4gbV9ieXRlc1Zpc2l0ZWQ7IH0KLSAg
ICBzaXplX3QgdmlzaXRDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fdmlzaXRDb3VudDsgfQotICAg
IAotICAgIHZvaWQgYWRkVG9WaXNpdENvdW50KHNpemVfdCB2YWx1ZSkgeyBtX3Zpc2l0Q291bnQg
Kz0gdmFsdWU7IH0KKy8vICAgIHNpemVfdCB2aXNpdENvdW50KCkgY29uc3QgeyByZXR1cm4gbV92
aXNpdENvdW50OyB9CisKKy8vICAgIHZvaWQgYWRkVG9WaXNpdENvdW50KHNpemVfdCB2YWx1ZSkg
eyBtX3Zpc2l0Q291bnQgKz0gdmFsdWU7IH0KIAogICAgIHZvaWQgZG9uYXRlKCk7CiAgICAgdm9p
ZCBkcmFpbihNb25vdG9uaWNUaW1lIHRpbWVvdXQgPSBNb25vdG9uaWNUaW1lOjppbmZpbml0eSgp
KTsKQEAgLTE1MSwyNCArMTg2LDI0IEBAIHB1YmxpYzoKICAgICAKICAgICAvLyBUaGlzIGluZm9y
bXMgdGhlIEdDIGFib3V0IGF1eGlsaWFyeSBvZiBzb21lIHNpemUgdGhhdCB3ZSBhcmUga2VlcGlu
ZyBhbGl2ZS4gSWYgeW91IGRvbid0IGRvCiAgICAgLy8gdGhpcyB0aGVuIHRoZSBzcGFjZSB3aWxs
IGJlIGZyZWVkIGF0IGVuZCBvZiBHQy4KLSAgICB2b2lkIG1hcmtBdXhpbGlhcnkoY29uc3Qgdm9p
ZCogYmFzZSk7CisgICAgdm9pZCBtYXJrQXV4aWxpYXJ5KGNvbnN0IHZvaWQqIGJhc2UpIGZpbmFs
OwogCi0gICAgdm9pZCByZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQoc2l6ZV90KTsKKyAgICB2b2lk
IHJlcG9ydEV4dHJhTWVtb3J5VmlzaXRlZChzaXplX3QpIGZpbmFsOwogI2lmIEVOQUJMRShSRVNP
VVJDRV9VU0FHRSkKLSAgICB2b2lkIHJlcG9ydEV4dGVybmFsTWVtb3J5VmlzaXRlZChzaXplX3Qp
OworICAgIHZvaWQgcmVwb3J0RXh0ZXJuYWxNZW1vcnlWaXNpdGVkKHNpemVfdCkgZmluYWw7CiAj
ZW5kaWYKICAgICAKLSAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICB2b2lk
IGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdCBmaW5hbDsKIAotICAgIGJvb2wgaXNBbmFseXppbmdI
ZWFwKCkgY29uc3QgeyByZXR1cm4gISFtX2hlYXBBbmFseXplcjsgfQotICAgIEhlYXBBbmFseXpl
ciogaGVhcEFuYWx5emVyKCkgY29uc3QgeyByZXR1cm4gbV9oZWFwQW5hbHl6ZXI7IH0KKy8vICAg
IGJvb2wgaXNBbmFseXppbmdIZWFwKCkgY29uc3QgeyByZXR1cm4gISFtX2hlYXBBbmFseXplcjsg
fQorLy8gICAgSGVhcEFuYWx5emVyKiBoZWFwQW5hbHl6ZXIoKSBjb25zdCB7IHJldHVybiBtX2hl
YXBBbmFseXplcjsgfQogICAgIAotICAgIFJvb3RNYXJrUmVhc29uIHJvb3RNYXJrUmVhc29uKCkg
Y29uc3QgeyByZXR1cm4gbV9yb290TWFya1JlYXNvbjsgfQotICAgIHZvaWQgc2V0Um9vdE1hcmtS
ZWFzb24oUm9vdE1hcmtSZWFzb24gcmVhc29uKSB7IG1fcm9vdE1hcmtSZWFzb24gPSByZWFzb247
IH0KKy8vICAgIFJvb3RNYXJrUmVhc29uIHJvb3RNYXJrUmVhc29uKCkgY29uc3QgeyByZXR1cm4g
bV9yb290TWFya1JlYXNvbjsgfQorLy8gICAgdm9pZCBzZXRSb290TWFya1JlYXNvbihSb290TWFy
a1JlYXNvbiByZWFzb24pIHsgbV9yb290TWFya1JlYXNvbiA9IHJlYXNvbjsgfQogCiAgICAgSGVh
cFZlcnNpb24gbWFya2luZ1ZlcnNpb24oKSBjb25zdCB7IHJldHVybiBtX21hcmtpbmdWZXJzaW9u
OyB9CiAKLSAgICBib29sIG11dGF0b3JJc1N0b3BwZWQoKSBjb25zdCB7IHJldHVybiBtX211dGF0
b3JJc1N0b3BwZWQ7IH0KKyAgICBib29sIG11dGF0b3JJc1N0b3BwZWQoKSBjb25zdCBmaW5hbCB7
IHJldHVybiBtX211dGF0b3JJc1N0b3BwZWQ7IH0KICAgICAKICAgICBMb2NrJiByaWdodFRvUnVu
KCkgeyByZXR1cm4gbV9yaWdodFRvUnVuOyB9CiAgICAgCkBAIC0xODAsMTAgKzIxNSwxMCBAQCBw
dWJsaWM6CiAgICAgCiAgICAgdm9pZCBvcHRpbWl6ZUZvclN0b3BwZWRNdXRhdG9yKCk7CiAgICAg
Ci0gICAgdm9pZCBkaWRSYWNlKGNvbnN0IFZpc2l0UmFjZUtleSYpOworICAgIHZvaWQgZGlkUmFj
ZShjb25zdCBWaXNpdFJhY2VLZXkmKSBmaW5hbDsKICAgICB2b2lkIGRpZFJhY2UoSlNDZWxsKiBj
ZWxsLCBjb25zdCBjaGFyKiByZWFzb24pIHsgZGlkUmFjZShWaXNpdFJhY2VLZXkoY2VsbCwgcmVh
c29uKSk7IH0KICAgICAKLSAgICB2b2lkIHZpc2l0QXNDb25zdHJhaW50KGNvbnN0IEpTQ2VsbCop
OworICAgIHZvaWQgdmlzaXRBc0NvbnN0cmFpbnQoY29uc3QgSlNDZWxsKikgZmluYWw7CiAgICAg
CiAgICAgYm9vbCBkaWRSZWFjaFRlcm1pbmF0aW9uKCk7CiAgICAgCkBAIC0xOTEsOSArMjI2LDkg
QEAgcHVibGljOgogCiAgICAgdm9pZCBkb25hdGVBbGwoKTsKICAgICAKLSAgICBjb25zdCBjaGFy
KiBjb2RlTmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29kZU5hbWUuZGF0YSgpOyB9CisvLyAgICBj
b25zdCBjaGFyKiBjb2RlTmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29kZU5hbWUuZGF0YSgpOyB9
CiAgICAgCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBhZGRQYXJhbGxlbENvbnN0cmFpbnRU
YXNrKFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoU2xvdFZpc2l0b3ImKT4+KTsKKyAgICB2b2lkIGFk
ZFBhcmFsbGVsQ29uc3RyYWludFRhc2soUmVmUHRyPFNoYXJlZFRhc2s8dm9pZChBYnN0cmFjdFNs
b3RWaXNpdG9yJik+PikgZmluYWw7CiAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIFBhcmFs
bGVsTW9kZUVuYWJsZXI7CkBAIC0yMzIsMzkgKzI2NywzOSBAQCBwcml2YXRlOgogCiAgICAgTWFy
a1N0YWNrQXJyYXkmIGNvcnJlc3BvbmRpbmdHbG9iYWxTdGFjayhNYXJrU3RhY2tBcnJheSYpOwog
Ci0gICAgTWFya1N0YWNrQXJyYXkgbV9jb2xsZWN0b3JTdGFjazsKLSAgICBNYXJrU3RhY2tBcnJh
eSBtX211dGF0b3JTdGFjazsKLSAgICAKKy8vICAgIE1hcmtTdGFja0FycmF5IG1fY29sbGVjdG9y
U3RhY2s7CisvLyAgICBNYXJrU3RhY2tBcnJheSBtX211dGF0b3JTdGFjazsKKwogICAgIHNpemVf
dCBtX2J5dGVzVmlzaXRlZDsKLSAgICBzaXplX3QgbV92aXNpdENvdW50OworLy8gICAgc2l6ZV90
IG1fdmlzaXRDb3VudDsKICAgICBzaXplX3QgbV9ub25DZWxsVmlzaXRDb3VudCB7IDAgfTsgLy8g
VXNlZCBmb3IgaW5jcmVtZW50YWwgZHJhaW5pbmcsIGlnbm9yZWQgb3RoZXJ3aXNlLgogICAgIENo
ZWNrZWRTaXplIG1fZXh0cmFNZW1vcnlTaXplIHsgMCB9OwogICAgIGJvb2wgbV9pc0luUGFyYWxs
ZWxNb2RlOwogICAgIGJvb2wgbV9pZ25vcmVOZXdPcGFxdWVSb290cyB7IGZhbHNlIH07IC8vIFVz
ZWZ1bCBhcyBhIGRlYnVnZ2luZyBtb2RlLgogCiAgICAgSGVhcFZlcnNpb24gbV9tYXJraW5nVmVy
c2lvbjsKLSAgICAKLSAgICBIZWFwJiBtX2hlYXA7CisKKy8vICAgIEhlYXAmIG1faGVhcDsKIAog
ICAgIEhlYXBBbmFseXplciogbV9oZWFwQW5hbHl6ZXIgeyBudWxscHRyIH07CiAgICAgSlNDZWxs
KiBtX2N1cnJlbnRDZWxsIHsgbnVsbHB0ciB9OwotICAgIFJvb3RNYXJrUmVhc29uIG1fcm9vdE1h
cmtSZWFzb24geyBSb290TWFya1JlYXNvbjo6Tm9uZSB9OworLy8gICAgUm9vdE1hcmtSZWFzb24g
bV9yb290TWFya1JlYXNvbiB7IFJvb3RNYXJrUmVhc29uOjpOb25lIH07CiAgICAgYm9vbCBtX2lz
Rmlyc3RWaXNpdCB7IGZhbHNlIH07CiAgICAgYm9vbCBtX211dGF0b3JJc1N0b3BwZWQgeyBmYWxz
ZSB9OwogICAgIGJvb2wgbV9jYW5PcHRpbWl6ZUZvclN0b3BwZWRNdXRhdG9yIHsgZmFsc2UgfTsK
ICAgICBMb2NrIG1fcmlnaHRUb1J1bjsKICAgICAKLSAgICBDU3RyaW5nIG1fY29kZU5hbWU7Cisv
LyAgICBDU3RyaW5nIG1fY29kZU5hbWU7CiAgICAgCi0gICAgTWFya2luZ0NvbnN0cmFpbnQqIG1f
Y3VycmVudENvbnN0cmFpbnQgeyBudWxscHRyIH07Ci0gICAgTWFya2luZ0NvbnN0cmFpbnRTb2x2
ZXIqIG1fY3VycmVudFNvbHZlciB7IG51bGxwdHIgfTsKKy8vICAgIE1hcmtpbmdDb25zdHJhaW50
KiBtX2N1cnJlbnRDb25zdHJhaW50IHsgbnVsbHB0ciB9OworLy8gICAgTWFya2luZ0NvbnN0cmFp
bnRTb2x2ZXIqIG1fY3VycmVudFNvbHZlciB7IG51bGxwdHIgfTsKICAgICAKICAgICAvLyBQdXQg
cGFkZGluZyBoZXJlIHRvIG1pdGlnYXRlIGZhbHNlIHNoYXJpbmcgYmV0d2VlbiBtdWx0aXBsZSBT
bG90VmlzaXRvcnMuCiAgICAgY2hhciBwYWRkaW5nWzY0XTsKLXB1YmxpYzoKKy8vcHVibGljOgog
I2lmIEFTU0VSVF9FTkFCTEVECi0gICAgYm9vbCBtX2lzQ2hlY2tpbmdGb3JEZWZhdWx0TWFya1Zp
b2xhdGlvbjsKLSAgICBib29sIG1faXNEcmFpbmluZzsKKyAgICBib29sIG1faXNDaGVja2luZ0Zv
ckRlZmF1bHRNYXJrVmlvbGF0aW9uIHsgZmFsc2UgfTsKKy8vICAgIGJvb2wgbV9pc0RyYWluaW5n
OwogI2VuZGlmCiB9OwogCkBAIC0yODcsMjMgKzMyMiwyMyBAQCBwcml2YXRlOgogICAgIFNsb3RW
aXNpdG9yJiBtX3N0YWNrOwogfTsKIAotY2xhc3MgU2V0Um9vdE1hcmtSZWFzb25TY29wZSB7Ci1w
dWJsaWM6Ci0gICAgU2V0Um9vdE1hcmtSZWFzb25TY29wZShTbG90VmlzaXRvciYgdmlzaXRvciwg
U2xvdFZpc2l0b3I6OlJvb3RNYXJrUmVhc29uIHJlYXNvbikKLSAgICAgICAgOiBtX3Zpc2l0b3Io
dmlzaXRvcikKLSAgICAgICAgLCBtX3ByZXZpb3VzUmVhc29uKHZpc2l0b3Iucm9vdE1hcmtSZWFz
b24oKSkKLSAgICB7Ci0gICAgICAgIG1fdmlzaXRvci5zZXRSb290TWFya1JlYXNvbihyZWFzb24p
OwotICAgIH0KLQotICAgIH5TZXRSb290TWFya1JlYXNvblNjb3BlKCkKLSAgICB7Ci0gICAgICAg
IG1fdmlzaXRvci5zZXRSb290TWFya1JlYXNvbihtX3ByZXZpb3VzUmVhc29uKTsKLSAgICB9Ci0K
LXByaXZhdGU6Ci0gICAgU2xvdFZpc2l0b3ImIG1fdmlzaXRvcjsKLSAgICBTbG90VmlzaXRvcjo6
Um9vdE1hcmtSZWFzb24gbV9wcmV2aW91c1JlYXNvbjsKLX07Ci0KKy8vY2xhc3MgU2V0Um9vdE1h
cmtSZWFzb25TY29wZSB7CisvL3B1YmxpYzoKKy8vICAgIFNldFJvb3RNYXJrUmVhc29uU2NvcGUo
U2xvdFZpc2l0b3ImIHZpc2l0b3IsIFNsb3RWaXNpdG9yOjpSb290TWFya1JlYXNvbiByZWFzb24p
CisvLyAgICAgICAgOiBtX3Zpc2l0b3IodmlzaXRvcikKKy8vICAgICAgICAsIG1fcHJldmlvdXNS
ZWFzb24odmlzaXRvci5yb290TWFya1JlYXNvbigpKQorLy8gICAgeworLy8gICAgICAgIG1fdmlz
aXRvci5zZXRSb290TWFya1JlYXNvbihyZWFzb24pOworLy8gICAgfQorLy8KKy8vICAgIH5TZXRS
b290TWFya1JlYXNvblNjb3BlKCkKKy8vICAgIHsKKy8vICAgICAgICBtX3Zpc2l0b3Iuc2V0Um9v
dE1hcmtSZWFzb24obV9wcmV2aW91c1JlYXNvbik7CisvLyAgICB9CisvLworLy9wcml2YXRlOgor
Ly8gICAgU2xvdFZpc2l0b3ImIG1fdmlzaXRvcjsKKy8vICAgIFNsb3RWaXNpdG9yOjpSb290TWFy
a1JlYXNvbiBtX3ByZXZpb3VzUmVhc29uOworLy99OworLy8KIH0gLy8gbmFtZXNwYWNlIEpTQwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3JJbmxpbmVz
LmgJKHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RW
aXNpdG9ySW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMi0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjUsMjYgKzI1LDI5IEBACiAKICNw
cmFnbWEgb25jZQogCisjaW5jbHVkZSAiQWJzdHJhY3RTbG90VmlzaXRvcklubGluZXMuaCIKICNp
bmNsdWRlICJTbG90VmlzaXRvci5oIgotI2luY2x1ZGUgIldlYWsuaCIKLSNpbmNsdWRlICJXZWFr
SW5saW5lcy5oIgorI2luY2x1ZGUgIk1hcmtlZEJsb2NrLmgiCisjaW5jbHVkZSAiUHJlY2lzZUFs
bG9jYXRpb24uaCIKKy8vI2luY2x1ZGUgIldlYWsuaCIKKy8vI2luY2x1ZGUgIldlYWtJbmxpbmVz
LmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCi1BTFdBWVNfSU5MSU5FIHZvaWQgU2xvdFZpc2l0b3I6
OmFwcGVuZFVuYmFycmllcmVkKEpTVmFsdWUqIHNsb3QsIHNpemVfdCBjb3VudCkKLXsKLSAgICBm
b3IgKHNpemVfdCBpID0gY291bnQ7IGktLTspCi0gICAgICAgIGFwcGVuZFVuYmFycmllcmVkKHNs
b3RbaV0pOwotfQorLy9BTFdBWVNfSU5MSU5FIHZvaWQgU2xvdFZpc2l0b3I6OmFwcGVuZFVuYmFy
cmllcmVkKEpTVmFsdWUqIHNsb3QsIHNpemVfdCBjb3VudCkKKy8veworLy8gICAgZm9yIChzaXpl
X3QgaSA9IGNvdW50OyBpLS07KQorLy8gICAgICAgIGFwcGVuZFVuYmFycmllcmVkKHNsb3RbaV0p
OworLy99CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBTbG90VmlzaXRvcjo6YXBwZW5kVW5iYXJyaWVy
ZWQoSlNDZWxsKiBjZWxsKQorQUxXQVlTX0lOTElORSB2b2lkIFNsb3RWaXNpdG9yOjphcHBlbmRV
bmJhcnJpZXJlZEltcGwoSlNDZWxsKiBjZWxsKQogewogICAgIC8vIFRoaXMgbmVlZHMgdG8gYmUg
d3JpdHRlbiBpbiBhIHZlcnkgc3BlY2lmaWMgd2F5IHRvIGVuc3VyZSB0aGF0IGl0IGdldHMgaW5s
aW5lZAogICAgIC8vIHByb3Blcmx5LiBJbiBwYXJ0aWN1bGFyLCBpdCBhcHBlYXJzIHRoYXQgdXNp
bmcgdGVtcGxhdGVzIGhlcmUgYnJlYWtzIEFMV0FZU19JTkxJTkUuCiAgICAgCi0gICAgaWYgKCFj
ZWxsKQotICAgICAgICByZXR1cm47Ci0gICAgCisvLyAgICBpZiAoIWNlbGwpCisvLyAgICAgICAg
cmV0dXJuOworLy8KICAgICBEZXBlbmRlbmN5IGRlcGVuZGVuY3k7CiAgICAgaWYgKFVOTElLRUxZ
KGNlbGwtPmlzUHJlY2lzZUFsbG9jYXRpb24oKSkpIHsKICAgICAgICAgaWYgKExJS0VMWShjZWxs
LT5wcmVjaXNlQWxsb2NhdGlvbigpLmlzTWFya2VkKCkpKSB7CkBAIC02MywyNSArNjYsMjUgQEAg
QUxXQVlTX0lOTElORSB2b2lkIFNsb3RWaXNpdG9yOjphcHBlbmRVbgogICAgIGFwcGVuZFNsb3co
Y2VsbCwgZGVwZW5kZW5jeSk7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBTbG90VmlzaXRvcjo6
YXBwZW5kVW5iYXJyaWVyZWQoSlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUuaXNDZWxs
KCkpCi0gICAgICAgIGFwcGVuZFVuYmFycmllcmVkKHZhbHVlLmFzQ2VsbCgpKTsKLX0KKy8vQUxX
QVlTX0lOTElORSB2b2lkIFNsb3RWaXNpdG9yOjphcHBlbmRVbmJhcnJpZXJlZChKU1ZhbHVlIHZh
bHVlKQorLy97CisvLyAgICBpZiAodmFsdWUuaXNDZWxsKCkpCisvLyAgICAgICAgYXBwZW5kVW5i
YXJyaWVyZWQodmFsdWUuYXNDZWxsKCkpOworLy99CisKKy8vQUxXQVlTX0lOTElORSB2b2lkIFNs
b3RWaXNpdG9yOjphcHBlbmRIaWRkZW5VbmJhcnJpZXJlZChKU1ZhbHVlIHZhbHVlKQorLy97Cisv
LyAgICBpZiAodmFsdWUuaXNDZWxsKCkpCisvLyAgICAgICAgYXBwZW5kSGlkZGVuVW5iYXJyaWVy
ZWQodmFsdWUuYXNDZWxsKCkpOworLy99CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBTbG90VmlzaXRv
cjo6YXBwZW5kSGlkZGVuVW5iYXJyaWVyZWQoSlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICBpZiAodmFs
dWUuaXNDZWxsKCkpCi0gICAgICAgIGFwcGVuZEhpZGRlblVuYmFycmllcmVkKHZhbHVlLmFzQ2Vs
bCgpKTsKLX0KLQotQUxXQVlTX0lOTElORSB2b2lkIFNsb3RWaXNpdG9yOjphcHBlbmRIaWRkZW5V
bmJhcnJpZXJlZChKU0NlbGwqIGNlbGwpCitBTFdBWVNfSU5MSU5FIHZvaWQgU2xvdFZpc2l0b3I6
OmFwcGVuZEhpZGRlblVuYmFycmllcmVkSW1wbChKU0NlbGwqIGNlbGwpCiB7CiAgICAgLy8gVGhp
cyBuZWVkcyB0byBiZSB3cml0dGVuIGluIGEgdmVyeSBzcGVjaWZpYyB3YXkgdG8gZW5zdXJlIHRo
YXQgaXQgZ2V0cyBpbmxpbmVkCiAgICAgLy8gcHJvcGVybHkuIEluIHBhcnRpY3VsYXIsIGl0IGFw
cGVhcnMgdGhhdCB1c2luZyB0ZW1wbGF0ZXMgaGVyZSBicmVha3MgQUxXQVlTX0lOTElORS4KICAg
ICAKLSAgICBpZiAoIWNlbGwpCi0gICAgICAgIHJldHVybjsKKy8vICAgIGlmICghY2VsbCkKKy8v
ICAgICAgICByZXR1cm47CiAgICAgCiAgICAgRGVwZW5kZW5jeSBkZXBlbmRlbmN5OwogICAgIGlm
IChVTkxJS0VMWShjZWxsLT5pc1ByZWNpc2VBbGxvY2F0aW9uKCkpKSB7CkBAIC05Nyw0MiArMTAw
LDQyIEBAIEFMV0FZU19JTkxJTkUgdm9pZCBTbG90VmlzaXRvcjo6YXBwZW5kSGkKICAgICBhcHBl
bmRIaWRkZW5TbG93KGNlbGwsIGRlcGVuZGVuY3kpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBU
PgotQUxXQVlTX0lOTElORSB2b2lkIFNsb3RWaXNpdG9yOjphcHBlbmQoY29uc3QgV2VhazxUPiYg
d2VhaykKLXsKLSAgICBhcHBlbmRVbmJhcnJpZXJlZCh3ZWFrLmdldCgpKTsKLX0KLQotdGVtcGxh
dGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVHJhaXRzPgotQUxXQVlTX0lOTElORSB2b2lkIFNsb3RW
aXNpdG9yOjphcHBlbmQoY29uc3QgV3JpdGVCYXJyaWVyQmFzZTxULCBUcmFpdHM+JiBzbG90KQot
ewotICAgIGFwcGVuZFVuYmFycmllcmVkKHNsb3QuZ2V0KCkpOwotfQotCi10ZW1wbGF0ZTx0eXBl
bmFtZSBULCB0eXBlbmFtZSBUcmFpdHM+Ci1BTFdBWVNfSU5MSU5FIHZvaWQgU2xvdFZpc2l0b3I6
OmFwcGVuZEhpZGRlbihjb25zdCBXcml0ZUJhcnJpZXJCYXNlPFQsIFRyYWl0cz4mIHNsb3QpCi17
Ci0gICAgYXBwZW5kSGlkZGVuVW5iYXJyaWVyZWQoc2xvdC5nZXQoKSk7Ci19Ci0KLXRlbXBsYXRl
PHR5cGVuYW1lIEl0ZXJhdG9yPgotQUxXQVlTX0lOTElORSB2b2lkIFNsb3RWaXNpdG9yOjphcHBl
bmQoSXRlcmF0b3IgYmVnaW4sIEl0ZXJhdG9yIGVuZCkKLXsKLSAgICBmb3IgKGF1dG8gaXQgPSBi
ZWdpbjsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBhcHBlbmQoKml0KTsKLX0KLQotQUxXQVlT
X0lOTElORSB2b2lkIFNsb3RWaXNpdG9yOjphcHBlbmRWYWx1ZXMoY29uc3QgV3JpdGVCYXJyaWVy
QmFzZTxVbmtub3duPiogYmFycmllcnMsIHNpemVfdCBjb3VudCkKLXsKLSAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IGNvdW50OyArK2kpCi0gICAgICAgIGFwcGVuZChiYXJyaWVyc1tpXSk7Ci19
Ci0KLUFMV0FZU19JTkxJTkUgdm9pZCBTbG90VmlzaXRvcjo6YXBwZW5kVmFsdWVzSGlkZGVuKGNv
bnN0IFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4qIGJhcnJpZXJzLCBzaXplX3QgY291bnQpCi17
Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKQotICAgICAgICBhcHBlbmRI
aWRkZW4oYmFycmllcnNbaV0pOwotfQorLy90ZW1wbGF0ZTx0eXBlbmFtZSBUPgorLy9BTFdBWVNf
SU5MSU5FIHZvaWQgU2xvdFZpc2l0b3I6OmFwcGVuZChjb25zdCBXZWFrPFQ+JiB3ZWFrKQorLy97
CisvLyAgICBhcHBlbmRVbmJhcnJpZXJlZCh3ZWFrLmdldCgpKTsKKy8vfQorLy8KKy8vdGVtcGxh
dGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVHJhaXRzPgorLy9BTFdBWVNfSU5MSU5FIHZvaWQgU2xv
dFZpc2l0b3I6OmFwcGVuZChjb25zdCBXcml0ZUJhcnJpZXJCYXNlPFQsIFRyYWl0cz4mIHNsb3Qp
CisvL3sKKy8vICAgIGFwcGVuZFVuYmFycmllcmVkKHNsb3QuZ2V0KCkpOworLy99CisvLworLy90
ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBUcmFpdHM+CisvL0FMV0FZU19JTkxJTkUgdm9p
ZCBTbG90VmlzaXRvcjo6YXBwZW5kSGlkZGVuKGNvbnN0IFdyaXRlQmFycmllckJhc2U8VCwgVHJh
aXRzPiYgc2xvdCkKKy8veworLy8gICAgYXBwZW5kSGlkZGVuVW5iYXJyaWVyZWQoc2xvdC5nZXQo
KSk7CisvL30KKy8vCisvL3RlbXBsYXRlPHR5cGVuYW1lIEl0ZXJhdG9yPgorLy9BTFdBWVNfSU5M
SU5FIHZvaWQgU2xvdFZpc2l0b3I6OmFwcGVuZChJdGVyYXRvciBiZWdpbiwgSXRlcmF0b3IgZW5k
KQorLy97CisvLyAgICBmb3IgKGF1dG8gaXQgPSBiZWdpbjsgaXQgIT0gZW5kOyArK2l0KQorLy8g
ICAgICAgIGFwcGVuZCgqaXQpOworLy99CisKKy8vQUxXQVlTX0lOTElORSB2b2lkIFNsb3RWaXNp
dG9yOjphcHBlbmRWYWx1ZXMoY29uc3QgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiogYmFycmll
cnMsIHNpemVfdCBjb3VudCkKKy8veworLy8gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3Vu
dDsgKytpKQorLy8gICAgICAgIGFwcGVuZChiYXJyaWVyc1tpXSk7CisvL30KKy8vCisvL0FMV0FZ
U19JTkxJTkUgdm9pZCBTbG90VmlzaXRvcjo6YXBwZW5kVmFsdWVzSGlkZGVuKGNvbnN0IFdyaXRl
QmFycmllckJhc2U8VW5rbm93bj4qIGJhcnJpZXJzLCBzaXplX3QgY291bnQpCisvL3sKKy8vICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY291bnQ7ICsraSkKKy8vICAgICAgICBhcHBlbmRIaWRk
ZW4oYmFycmllcnNbaV0pOworLy99CiAKIGlubGluZSBib29sIFNsb3RWaXNpdG9yOjphZGRPcGFx
dWVSb290KHZvaWQqIHB0cikKIHsKQEAgLTE1MSw2ICsxNTQsMjEgQEAgaW5saW5lIGJvb2wgU2xv
dFZpc2l0b3I6OmNvbnRhaW5zT3BhcXVlUgogICAgIHJldHVybiBoZWFwKCktPm1fb3BhcXVlUm9v
dHMuY29udGFpbnMocHRyKTsKIH0KIAoraW5saW5lIGJvb2wgU2xvdFZpc2l0b3I6OmlzTWFya2Vk
KGNvbnN0IHZvaWQqIHApIGNvbnN0Cit7CisgICAgcmV0dXJuIGhlYXAoKS0+aXNNYXJrZWQocCk7
Cit9CisKK2lubGluZSBib29sIFNsb3RWaXNpdG9yOjppc01hcmtlZChNYXJrZWRCbG9jayYgY29u
dGFpbmVyLCBIZWFwQ2VsbCogY2VsbCkgY29uc3QKK3sKKyAgICByZXR1cm4gY29udGFpbmVyLmlz
TWFya2VkKG1hcmtpbmdWZXJzaW9uKCksIGNlbGwpOworfQorCitpbmxpbmUgYm9vbCBTbG90Vmlz
aXRvcjo6aXNNYXJrZWQoUHJlY2lzZUFsbG9jYXRpb24mIGNvbnRhaW5lciwgSGVhcENlbGwqIGNl
bGwpIGNvbnN0Cit7CisgICAgcmV0dXJuIGNvbnRhaW5lci5pc01hcmtlZChtYXJraW5nVmVyc2lv
bigpLCBjZWxsKTsKK30KKwogaW5saW5lIHZvaWQgU2xvdFZpc2l0b3I6OnJlcG9ydEV4dHJhTWVt
b3J5VmlzaXRlZChzaXplX3Qgc2l6ZSkKIHsKICAgICBpZiAobV9pc0ZpcnN0VmlzaXQpIHsKQEAg
LTE2OSwyMCArMTg3LDIwIEBAIGlubGluZSB2b2lkIFNsb3RWaXNpdG9yOjpyZXBvcnRFeHRlcm5h
bE0KIH0KICNlbmRpZgogCi1pbmxpbmUgSGVhcCogU2xvdFZpc2l0b3I6OmhlYXAoKSBjb25zdAot
ewotICAgIHJldHVybiAmbV9oZWFwOwotfQotCi1pbmxpbmUgVk0mIFNsb3RWaXNpdG9yOjp2bSgp
Ci17Ci0gICAgcmV0dXJuIG1faGVhcC52bSgpOwotfQotCi1pbmxpbmUgY29uc3QgVk0mIFNsb3RW
aXNpdG9yOjp2bSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1faGVhcC52bSgpOwotfQorLy9pbmxp
bmUgSGVhcCogU2xvdFZpc2l0b3I6OmhlYXAoKSBjb25zdAorLy97CisvLyAgICByZXR1cm4gJm1f
aGVhcDsKKy8vfQorLy8KKy8vaW5saW5lIFZNJiBTbG90VmlzaXRvcjo6dm0oKQorLy97CisvLyAg
ICByZXR1cm4gbV9oZWFwLnZtKCk7CisvL30KKy8vCisvL2lubGluZSBjb25zdCBWTSYgU2xvdFZp
c2l0b3I6OnZtKCkgY29uc3QKKy8veworLy8gICAgcmV0dXJuIG1faGVhcC52bSgpOworLy99CiAK
IHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CiBJdGVyYXRpb25TdGF0dXMgU2xvdFZpc2l0b3I6OmZv
ckVhY2hNYXJrU3RhY2soY29uc3QgRnVuYyYgZnVuYykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL1Nsb3RWaXNpdG9yTWFjcm9zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3JNYWNyb3MuaAkobm9uZXhpc3RlbnQpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvck1hY3Jvcy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMTMzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI3ByYWdtYSBvbmNlCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBBYnN0cmFj
dFNsb3RWaXNpdG9yOworY2xhc3MgSlNDZWxsOworY2xhc3MgU2xvdFZpc2l0b3I7CisKKyNkZWZp
bmUgREVDTEFSRV9VTlVTRURfU0xPVF9WSVNJVE9SX1NUUlVDVF9FWFBBTkRFUjIoY291bnRlcl8p
IFwKKyAgICBzdHJ1Y3QgVW51c2VkU2xvdFZpc2l0b3JTdHJ1Y3RTb1dlQ2FuSGF2ZUFTZW1pY29s
b24jI2NvdW50ZXJfIHsgfQorCisjZGVmaW5lIERFQ0xBUkVfVU5VU0VEX1NMT1RfVklTSVRPUl9T
VFJVQ1RfRVhQQU5ERVIoY291bnRlcl8pIFwKKyAgICBERUNMQVJFX1VOVVNFRF9TTE9UX1ZJU0lU
T1JfU1RSVUNUX0VYUEFOREVSMihjb3VudGVyXykKKworI2RlZmluZSBERUNMQVJFX1VOVVNFRF9T
TE9UX1ZJU0lUT1JfU1RSVUNUKCkgXAorICAgIERFQ0xBUkVfVU5VU0VEX1NMT1RfVklTSVRPUl9T
VFJVQ1RfRVhQQU5ERVIoX19DT1VOVEVSX18pCisKKy8vIE1hY3JvcyBmb3IgaW5zdGFuY2UgY3Vz
dG9tIHZpc2l0b3IgbWV0aG9kLgorCisjZGVmaW5lIERFQ0xBUkVfSU5TVEFOQ0VfU0xPVF9WSVNJ
VE9SX01FVEhPRF9JTVBMKHJldHVyblR5cGVfLCBtZXRob2ROYW1lXywgcG9zdE1vZGlmaWVyXykg
XAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHJldHVyblR5cGVfIG1ldGhvZE5hbWVf
IyNJbXBsKFZpc2l0b3ImIHZpc2l0b3IpOyBcCisgICAgcmV0dXJuVHlwZV8gbWV0aG9kTmFtZV8o
U2xvdFZpc2l0b3ImKSBwb3N0TW9kaWZpZXJfOyBcCisgICAgcmV0dXJuVHlwZV8gbWV0aG9kTmFt
ZV8oQWJzdHJhY3RTbG90VmlzaXRvciYpIHBvc3RNb2RpZmllcl87IFwKKyAgICBERUNMQVJFX1VO
VVNFRF9TTE9UX1ZJU0lUT1JfU1RSVUNUKCkKKworI2RlZmluZSBERUNMQVJFX0lOU1RBTkNFX1NM
T1RfVklTSVRPUl9NRVRIT0QocmV0dXJuVHlwZV8sIG1ldGhvZE5hbWVfKSBcCisgICAgREVDTEFS
RV9JTlNUQU5DRV9TTE9UX1ZJU0lUT1JfTUVUSE9EX0lNUEwocmV0dXJuVHlwZV8sIG1ldGhvZE5h
bWVfLCApCisKKworI2RlZmluZSBERUZJTkVfSU5TVEFOQ0VfU0xPVF9WSVNJVE9SX01FVEhPRChy
ZXR1cm5UeXBlXywgY2xhc3NOYW1lXywgbWV0aG9kTmFtZV8pIFwKKyAgICByZXR1cm5UeXBlXyBj
bGFzc05hbWVfOjptZXRob2ROYW1lXyhTbG90VmlzaXRvciYgdmlzaXRvcikgeyBtZXRob2ROYW1l
XyMjSW1wbCh2aXNpdG9yKTsgfSBcCisgICAgcmV0dXJuVHlwZV8gY2xhc3NOYW1lXzo6bWV0aG9k
TmFtZV8oQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikgIHsgbWV0aG9kTmFtZV8jI0ltcGwo
dmlzaXRvcik7IH0gXAorICAgIERFQ0xBUkVfVU5VU0VEX1NMT1RfVklTSVRPUl9TVFJVQ1QoKQor
CisvLyBNYWNyb3MgZm9yIGluc3RhbmNlIHZpc2l0Q2hpbGRyZW4oKS4KKworI2RlZmluZSBERUNM
QVJFX0lOU1RBTkNFX1ZJU0lUX0NISUxEUkVOIFwKKyAgICBERUNMQVJFX0lOU1RBTkNFX1NMT1Rf
VklTSVRPUl9NRVRIT0Qodm9pZCwgdmlzaXRDaGlsZHJlbikKKworCisjZGVmaW5lIERFRklORV9J
TlNUQU5DRV9WSVNJVF9DSElMRFJFTihjbGFzc05hbWVfKSBcCisgICAgREVGSU5FX0lOU1RBTkNF
X1NMT1RfVklTSVRPUl9NRVRIT0Qodm9pZCwgY2xhc3NOYW1lXywgdmlzaXRDaGlsZHJlbikKKwor
Ly8gTWFjcm9zIGZvciBzdGF0aWMgdmlzaXRDaGlsZHJlbigpLgorCisjZGVmaW5lIERFQ0xBUkVf
VklTSVRfQ0hJTERSRU5fSU1QTCBcCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gc3Rh
dGljIHZvaWQgdmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiwgVmlzaXRvciYpCisKKyNkZWZpbmUg
REVDTEFSRV9WSVNJVF9DSElMRFJFTiBcCisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTl9JTVBM
OyBcCisgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIEFic3RyYWN0
U2xvdFZpc2l0b3ImIHZpc2l0b3IpOyBcCisgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihK
U0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorCisjZGVmaW5lIERFQ0xBUkVfRVhQ
T1JUX1ZJU0lUX0NISUxEUkVOIFwKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOX0lNUEw7IFwK
KyAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCos
IEFic3RyYWN0U2xvdFZpc2l0b3ImKTsgXAorICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2
b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKQorCisjZGVmaW5lIERFQ0xB
UkVfSU5MSU5FX1ZJU0lUX0NISUxEUkVOIFwKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOX0lN
UEw7IFwKKyAgICBpbmxpbmUgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBBYnN0
cmFjdFNsb3RWaXNpdG9yJik7IFwKKyAgICBpbmxpbmUgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJl
bihKU0NlbGwqLCBTbG90VmlzaXRvciYpCisKKyNkZWZpbmUgREVDTEFSRV9URU1QTEFURV9WSVNJ
VF9DSElMRFJFTiBcCisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTgorCisKKyNkZWZpbmUgREVG
SU5FX1ZJU0lUX0NISUxEUkVOKGNsYXNzTmFtZV8pIFwKKyAgICB2b2lkIGNsYXNzTmFtZV86OnZp
c2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBc
CisgICAgeyBcCisgICAgICAgIEFic3RyYWN0U2xvdFZpc2l0b3I6OkNvbnRleHQgY29udGV4dCh2
aXNpdG9yLCBjZWxsKTsgXAorICAgICAgICB2aXNpdENoaWxkcmVuSW1wbChjZWxsLCB2aXNpdG9y
KTsgXAorICAgIH0gXAorICAgIHZvaWQgY2xhc3NOYW1lXzo6dmlzaXRDaGlsZHJlbihKU0NlbGwq
IGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKSB7IHZpc2l0Q2hpbGRyZW5JbXBsKGNlbGwsIHZp
c2l0b3IpOyB9IFwKKyAgICBERUNMQVJFX1VOVVNFRF9TTE9UX1ZJU0lUT1JfU1RSVUNUKCkKKwor
I2RlZmluZSBERUZJTkVfRVhQT1JUX1ZJU0lUX0NISUxEUkVOKGNsYXNzTmFtZV8pIFwKKyAgICBK
U19FWFBPUlRfUFJJVkFURSB2b2lkIGNsYXNzTmFtZV86OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBj
ZWxsLCBBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBcCisgICAgeyBcCisgICAgICAgIEFi
c3RyYWN0U2xvdFZpc2l0b3I6OkNvbnRleHQgY29udGV4dCh2aXNpdG9yLCBjZWxsKTsgXAorICAg
ICAgICB2aXNpdENoaWxkcmVuSW1wbChjZWxsLCB2aXNpdG9yKTsgXAorICAgIH0gXAorICAgIEpT
X0VYUE9SVF9QUklWQVRFIHZvaWQgY2xhc3NOYW1lXzo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNl
bGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKSB7IHZpc2l0Q2hpbGRyZW5JbXBsKGNlbGwsIHZpc2l0
b3IpOyB9IFwKKyAgICBERUNMQVJFX1VOVVNFRF9TTE9UX1ZJU0lUT1JfU1RSVUNUKCkKKworI2Rl
ZmluZSBERUZJTkVfSU5MSU5FX1ZJU0lUX0NISUxEUkVOKGNsYXNzTmFtZV8pIFwKKyAgICBpbmxp
bmUgdm9pZCBjbGFzc05hbWVfOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgQWJzdHJhY3RT
bG90VmlzaXRvciYgdmlzaXRvcikgXAorICAgIHsgXAorICAgICAgICBBYnN0cmFjdFNsb3RWaXNp
dG9yOjpDb250ZXh0IGNvbnRleHQodmlzaXRvciwgY2VsbCk7IFwKKyAgICAgICAgdmlzaXRDaGls
ZHJlbkltcGwoY2VsbCwgdmlzaXRvcik7IFwKKyAgICB9IFwKKyAgICBpbmxpbmUgdm9pZCBjbGFz
c05hbWVfOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3Ip
IHsgdmlzaXRDaGlsZHJlbkltcGwoY2VsbCwgdmlzaXRvcik7IH0gXAorICAgIERFQ0xBUkVfVU5V
U0VEX1NMT1RfVklTSVRPUl9TVFJVQ1QoKQorCisjZGVmaW5lIERFRklORV9URU1QTEFURV9WSVNJ
VF9DSElMRFJFTih0ZW1wbGF0ZUNsYXVzZV8sIGNsYXNzTmFtZV8pIFwKKyAgICB0ZW1wbGF0ZUNs
YXVzZV8gdm9pZCBjbGFzc05hbWVfOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgQWJzdHJh
Y3RTbG90VmlzaXRvciYgdmlzaXRvcikgXAorICAgIHsgXAorICAgICAgICBBYnN0cmFjdFNsb3RW
aXNpdG9yOjpDb250ZXh0IGNvbnRleHQodmlzaXRvciwgY2VsbCk7IFwKKyAgICAgICAgdmlzaXRD
aGlsZHJlbkltcGwoY2VsbCwgdmlzaXRvcik7IFwKKyAgICB9IFwKKyAgICB0ZW1wbGF0ZUNsYXVz
ZV8gdm9pZCBjbGFzc05hbWVfOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0
b3ImIHZpc2l0b3IpIHsgdmlzaXRDaGlsZHJlbkltcGwoY2VsbCwgdmlzaXRvcik7IH0gXAorICAg
IERFQ0xBUkVfVU5VU0VEX1NMT1RfVklTSVRPUl9TVFJVQ1QoKQorCit9IC8vIG5hbWVzcGFjZSBK
U0MKKwordXNpbmcgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yOwordXNpbmcgSlNDOjpKU0NlbGw7
Cit1c2luZyBKU0M6OlNsb3RWaXNpdG9yOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvU3Vic3BhY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9T
dWJzcGFjZS5oCShyZXZpc2lvbiAyNzIyOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9TdWJzcGFjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCw3IEBACiAKIG5hbWVzcGFj
ZSBKU0MgewogCitjbGFzcyBBYnN0cmFjdFNsb3RWaXNpdG9yOyAvLyBtbGFtCiBjbGFzcyBBbGln
bmVkTWVtb3J5QWxsb2NhdG9yOwogY2xhc3MgSGVhcENlbGxUeXBlOwogCkBAIC04Nyw3ICs4OCw3
IEBAIHB1YmxpYzoKICAgICB2b2lkIGZvckVhY2hNYXJrZWRDZWxsKGNvbnN0IEZ1bmMmKTsKICAg
ICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgotICAgIFJlZjxTaGFyZWRUYXNrPHZvaWQo
U2xvdFZpc2l0b3ImKT4+IGZvckVhY2hNYXJrZWRDZWxsSW5QYXJhbGxlbChjb25zdCBGdW5jJik7
CisgICAgUmVmPFNoYXJlZFRhc2s8dm9pZChBYnN0cmFjdFNsb3RWaXNpdG9yJik+PiBmb3JFYWNo
TWFya2VkQ2VsbEluUGFyYWxsZWwoY29uc3QgRnVuYyYpOwogCiAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgRnVuYz4KICAgICB2b2lkIGZvckVhY2hMaXZlQ2VsbChjb25zdCBGdW5jJik7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdWJzcGFjZUlubGluZXMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdWJzcGFjZUlubGluZXMuaAkocmV2aXNpb24g
MjcyMjk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3Vic3BhY2VJbmxpbmVzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTg2LDkgKzg2LDkgQEAgdm9pZCBTdWJzcGFjZTo6Zm9yRWFjaE1h
cmtlZENlbGwoY29uc3QgRgogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgotUmVmPFNoYXJl
ZFRhc2s8dm9pZChTbG90VmlzaXRvciYpPj4gU3Vic3BhY2U6OmZvckVhY2hNYXJrZWRDZWxsSW5Q
YXJhbGxlbChjb25zdCBGdW5jJiBmdW5jKQorUmVmPFNoYXJlZFRhc2s8dm9pZChBYnN0cmFjdFNs
b3RWaXNpdG9yJik+PiBTdWJzcGFjZTo6Zm9yRWFjaE1hcmtlZENlbGxJblBhcmFsbGVsKGNvbnN0
IEZ1bmMmIGZ1bmMpCiB7Ci0gICAgY2xhc3MgVGFzayBmaW5hbCA6IHB1YmxpYyBTaGFyZWRUYXNr
PHZvaWQoU2xvdFZpc2l0b3ImKT4geworICAgIGNsYXNzIFRhc2sgZmluYWwgOiBwdWJsaWMgU2hh
cmVkVGFzazx2b2lkKEFic3RyYWN0U2xvdFZpc2l0b3ImKT4gewogICAgIHB1YmxpYzoKICAgICAg
ICAgVGFzayhTdWJzcGFjZSYgc3Vic3BhY2UsIGNvbnN0IEZ1bmMmIGZ1bmMpCiAgICAgICAgICAg
ICA6IG1fc3Vic3BhY2Uoc3Vic3BhY2UpCkBAIC05Nyw3ICs5Nyw3IEBAIFJlZjxTaGFyZWRUYXNr
PHZvaWQoU2xvdFZpc2l0b3ImKT4+IFN1YnMKICAgICAgICAgewogICAgICAgICB9CiAgICAgICAg
IAotICAgICAgICB2b2lkIHJ1bihTbG90VmlzaXRvciYgdmlzaXRvcikgZmluYWwKKyAgICAgICAg
dm9pZCBydW4oQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikgZmluYWwKICAgICAgICAgewog
ICAgICAgICAgICAgd2hpbGUgKE1hcmtlZEJsb2NrOjpIYW5kbGUqIGhhbmRsZSA9IG1fYmxvY2tT
b3VyY2UtPnJ1bigpKSB7CiAgICAgICAgICAgICAgICAgaGFuZGxlLT5mb3JFYWNoTWFya2VkQ2Vs
bCgKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1ZlcmlmaWVyU2xvdFZpc2l0b3Iu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1ZlcmlmaWVyU2xv
dFZpc2l0b3IuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L1ZlcmlmaWVyU2xvdFZpc2l0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzQ1IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlZlcmlmaWVyU2xv
dFZpc2l0b3IuaCIKKworI2luY2x1ZGUgIkNvbnNlcnZhdGl2ZVJvb3RzLmgiCisjaW5jbHVkZSAi
R0NTZWdtZW50ZWRBcnJheUlubGluZXMuaCIKKyNpbmNsdWRlICJIZWFwQ2VsbC5oIgorI2luY2x1
ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNsdWRlICJWTS5oIgorI2luY2x1ZGUgPHd0Zi9TdGFja1Ry
YWNlLmg+CisKK25hbWVzcGFjZSBKU0MgeworCit1c2luZyBNYXJrZXJEYXRhID0gVmVyaWZpZXJT
bG90VmlzaXRvcjo6TWFya2VyRGF0YTsKKworY29uc3RleHByIGludCBtYXhNYXJraW5nU3RhY2tG
cmFtZXNUb0NhcHR1cmUgPSAxMDA7CisKK01hcmtlckRhdGE6Ok1hcmtlckRhdGEoSGVhcENlbGwq
IHBhcmVudCwgc3RkOjp1bmlxdWVfcHRyPFN0YWNrVHJhY2U+JiYgc3RhY2spCisgICAgOiBwYXJl
bnQocGFyZW50KQorICAgICwgc3RhY2soV1RGTW92ZShzdGFjaykpCit7Cit9CisKK1ZlcmlmaWVy
U2xvdFZpc2l0b3I6Ok1hcmtlZEJsb2NrRGF0YTo6TWFya2VkQmxvY2tEYXRhKE1hcmtlZEJsb2Nr
KiBibG9jaykKKyAgICA6IG1fYmxvY2soYmxvY2spCisgICAgLCBtX2F0b21zKE1hcmtlZEJsb2Nr
OjphdG9tc1BlckJsb2NrKQoreworfQorCit2b2lkIFZlcmlmaWVyU2xvdFZpc2l0b3I6Ok1hcmtl
ZEJsb2NrRGF0YTo6YWRkTWFya2VyRGF0YSh1bnNpZ25lZCBhdG9tTnVtYmVyLCBNYXJrZXJEYXRh
JiYgbWFya2VyKQoreworICAgIGlmIChtX21hcmtlcnMuaXNFbXB0eSgpKQorICAgICAgICBtX21h
cmtlcnMuZ3JvdyhNYXJrZWRCbG9jazo6YXRvbXNQZXJCbG9jayk7CisgICAgbV9tYXJrZXJzW2F0
b21OdW1iZXJdID0gV1RGTW92ZShtYXJrZXIpOworfQorCitjb25zdCBNYXJrZXJEYXRhKiBWZXJp
ZmllclNsb3RWaXNpdG9yOjpNYXJrZWRCbG9ja0RhdGE6Om1hcmtlckRhdGEodW5zaWduZWQgYXRv
bU51bWJlcikgY29uc3QKK3sKKyAgICBhdXRvJiBtYXJrZXIgPSBtX21hcmtlcnNbYXRvbU51bWJl
cl07CisgICAgaWYgKG1hcmtlci5zdGFjaykKKyAgICAgICAgcmV0dXJuICZtYXJrZXI7CisgICAg
cmV0dXJuIG51bGxwdHI7Cit9CisKK1ZlcmlmaWVyU2xvdFZpc2l0b3I6OlByZWNpc2VBbGxvY2F0
aW9uRGF0YTo6UHJlY2lzZUFsbG9jYXRpb25EYXRhKFByZWNpc2VBbGxvY2F0aW9uKiBhbGxvY2F0
aW9uKQorICAgIDogbV9hbGxvY2F0aW9uKGFsbG9jYXRpb24pCit7Cit9CisKK2NvbnN0IE1hcmtl
ckRhdGEqIFZlcmlmaWVyU2xvdFZpc2l0b3I6OlByZWNpc2VBbGxvY2F0aW9uRGF0YTo6bWFya2Vy
RGF0YSgpIGNvbnN0Cit7CisgICAgaWYgKG1fbWFya2VyLnN0YWNrKQorICAgICAgICByZXR1cm4g
Jm1fbWFya2VyOworICAgIHJldHVybiBudWxscHRyOworfQorCit2b2lkIFZlcmlmaWVyU2xvdFZp
c2l0b3I6OlByZWNpc2VBbGxvY2F0aW9uRGF0YTo6YWRkTWFya2VyRGF0YShNYXJrZXJEYXRhJiYg
bWFya2VyKQoreworICAgIG1fbWFya2VyID0gV1RGTW92ZShtYXJrZXIpOworfQorCitWZXJpZmll
clNsb3RWaXNpdG9yOjpWZXJpZmllclNsb3RWaXNpdG9yKEhlYXAmIGhlYXApCisgICAgOiBCYXNl
KGhlYXAsICJWZXJpZmllciIpCit7Cit9CisKK1ZlcmlmaWVyU2xvdFZpc2l0b3I6On5WZXJpZmll
clNsb3RWaXNpdG9yKCkKK3sKK30KKwordm9pZCBWZXJpZmllclNsb3RWaXNpdG9yOjphZGRQYXJh
bGxlbENvbnN0cmFpbnRUYXNrKFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoQWJzdHJhY3RTbG90Vmlz
aXRvciYpPj4gdGFzaykKK3sKKyAgICBtX2NvbnN0cmFpbnRUYXNrcy5hcHBlbmQoV1RGTW92ZSh0
YXNrKSk7Cit9CisKK3ZvaWQgVmVyaWZpZXJTbG90VmlzaXRvcjo6ZXhlY3V0ZUNvbnN0cmFpbnRU
YXNrcygpCit7CisgICAgd2hpbGUgKCFtX2NvbnN0cmFpbnRUYXNrcy5pc0VtcHR5KCkpCisgICAg
ICAgIG1fY29uc3RyYWludFRhc2tzLnRha2VGaXJzdCgpLT5ydW4oKnRoaXMpOworfQorCit2b2lk
IFZlcmlmaWVyU2xvdFZpc2l0b3I6OmFwcGVuZF9Db25zZXJ2YXRpdmVSb290cyhjb25zdCBDb25z
ZXJ2YXRpdmVSb290cyYgY29uc2VydmF0aXZlUm9vdHMpCit7CisgICAgYXV0byBhcHBlbmRKU0Nl
bGxPckF1eGlsaWFyeSA9IFsmXSAoSGVhcENlbGwqIGhlYXBDZWxsKQorICAgIHsKKyAgICAgICAg
aWYgKCFoZWFwQ2VsbCkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBpZiAodGVzdEFu
ZFNldE1hcmtlZChoZWFwQ2VsbCkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgc3dp
dGNoIChoZWFwQ2VsbC0+Y2VsbEtpbmQoKSkgeworICAgICAgICBjYXNlIEhlYXBDZWxsOjpKU0Nl
bGw6CisgICAgICAgIGNhc2UgSGVhcENlbGw6OkpTQ2VsbFdpdGhJbmRleGluZ0hlYWRlcjogewor
ICAgICAgICAgICAgSlNDZWxsKiBqc0NlbGwgPSBzdGF0aWNfY2FzdDxKU0NlbGwqPihoZWFwQ2Vs
bCk7CisgICAgICAgICAgICBhcHBlbmRUb01hcmtTdGFjayhqc0NlbGwpOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBIZWFwQ2VsbDo6QXV4aWxpYXJ5Ogor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfTsKKworICAgIEhlYXBDZWxsKiog
cm9vdHMgPSBjb25zZXJ2YXRpdmVSb290cy5yb290cygpOworICAgIHNpemVfdCBzaXplID0gY29u
c2VydmF0aXZlUm9vdHMuc2l6ZSgpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsg
KytpKQorICAgICAgICBhcHBlbmRKU0NlbGxPckF1eGlsaWFyeShyb290c1tpXSk7Cit9CisKK3Zv
aWQgVmVyaWZpZXJTbG90VmlzaXRvcjo6YXBwZW5kVG9NYXJrU3RhY2soSlNDZWxsKiBjZWxsKQor
eworLy8gICAgQVNTRVJUKG1faGVhcC5pc01hcmtlZChjZWxsKSk7IC8vIG1sYW0gVEVTVCBzYW5p
dHkgY2hlY2suCisgICAgQVNTRVJUKCFjZWxsLT5pc1phcHBlZCgpKTsKKyAgICBtX2NvbGxlY3Rv
clN0YWNrLmFwcGVuZChjZWxsKTsKK30KKwordm9pZCBWZXJpZmllclNsb3RWaXNpdG9yOjphcHBl
bmRVbmJhcnJpZXJlZEltcGwoSlNDZWxsKiBjZWxsKQoreworICAgIGlmIChVTkxJS0VMWShjZWxs
LT5pc1ByZWNpc2VBbGxvY2F0aW9uKCkpKSB7CisgICAgICAgIGlmIChMSUtFTFkoaXNNYXJrZWQo
Y2VsbC0+cHJlY2lzZUFsbG9jYXRpb24oKSwgY2VsbCkpKQorICAgICAgICAgICAgcmV0dXJuOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIE1hcmtlZEJsb2NrJiBibG9jayA9IGNlbGwtPm1hcmtlZEJs
b2NrKCk7CisgICAgICAgIGlmIChMSUtFTFkoaXNNYXJrZWQoYmxvY2ssIGNlbGwpKSkKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBhcHBlbmRTbG93KGNlbGwpOworfQorCit2b2lk
IFZlcmlmaWVyU2xvdFZpc2l0b3I6OmFwcGVuZEhpZGRlblVuYmFycmllcmVkSW1wbChKU0NlbGwq
IGNlbGwpCit7CisgICAgYXBwZW5kVW5iYXJyaWVyZWRJbXBsKGNlbGwpOworfQorCitib29sIFZl
cmlmaWVyU2xvdFZpc2l0b3I6OmFkZE9wYXF1ZVJvb3Qodm9pZCogcHRyKQoreworICAgIGlmICgh
cHRyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFtX29wYXF1ZVJvb3RzLmFkZChw
dHIpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wg
VmVyaWZpZXJTbG90VmlzaXRvcjo6Y29udGFpbnNPcGFxdWVSb290KHZvaWQqIHB0cikgY29uc3QK
K3sKKyAgICByZXR1cm4gbV9vcGFxdWVSb290cy5jb250YWlucyhwdHIpOworfQorCit2b2lkIFZl
cmlmaWVyU2xvdFZpc2l0b3I6OmRyYWluKCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChtX211dGF0
b3JTdGFjay5pc0VtcHR5KCkpOworCisgICAgTWFya1N0YWNrQXJyYXkmIHN0YWNrID0gbV9jb2xs
ZWN0b3JTdGFjazsKKyAgICBpZiAoc3RhY2suaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisK
KyAgICBzdGFjay5yZWZpbGwoKTsKKyAgICB3aGlsZSAoc3RhY2suY2FuUmVtb3ZlTGFzdCgpKSB7
CisgICAgICAgIHZpc2l0Q2hpbGRyZW4oc3RhY2sucmVtb3ZlTGFzdCgpKTsKKyAgICB9Cit9CisK
K3ZvaWQgVmVyaWZpZXJTbG90VmlzaXRvcjo6ZHVtcE1hcmtlckRhdGEoSGVhcENlbGwqIGNlbGwp
Cit7CisgICAgaWYgKGNlbGwtPmlzUHJlY2lzZUFsbG9jYXRpb24oKSkKKyAgICAgICAgcmV0dXJu
IGR1bXBNYXJrZXJEYXRhKGNlbGwtPnByZWNpc2VBbGxvY2F0aW9uKCksIGNlbGwpOworICAgIHJl
dHVybiBkdW1wTWFya2VyRGF0YShjZWxsLT5tYXJrZWRCbG9jaygpLCBjZWxsKTsKK30KKwordm9p
ZCBWZXJpZmllclNsb3RWaXNpdG9yOjpkdW1wTWFya2VyRGF0YShQcmVjaXNlQWxsb2NhdGlvbiYg
YWxsb2NhdGlvbiwgSGVhcENlbGwqIGNlbGwpCit7CisgICAgYXV0byBpdGVyYXRvciA9IG1fcHJl
Y2lzZUFsbG9jYXRpb25NYXAuZmluZCgmYWxsb2NhdGlvbik7CisgICAgaWYgKGl0ZXJhdG9yICE9
IG1fcHJlY2lzZUFsbG9jYXRpb25NYXAuZW5kKCkpIHsKKyAgICAgICAgZHVtcE1hcmtlckRhdGEo
Y2VsbCwgaXRlcmF0b3ItPnZhbHVlLT5tYXJrZXJEYXRhKCkpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorICAgIGRhdGFMb2dMbigiR0MgVmVyaWZpZXI6IGNlbGwgIiwgUmF3UG9pbnRlcihjZWxs
KSwgIiBub3QgZm91bmQiKTsKK30KKwordm9pZCBWZXJpZmllclNsb3RWaXNpdG9yOjpkdW1wTWFy
a2VyRGF0YShNYXJrZWRCbG9jayYgYmxvY2ssIEhlYXBDZWxsKiBjZWxsKQoreworICAgIGF1dG8g
aXRlcmF0b3IgPSBtX21hcmtlZEJsb2NrTWFwLmZpbmQoJmJsb2NrKTsKKyAgICBpZiAoaXRlcmF0
b3IgIT0gbV9tYXJrZWRCbG9ja01hcC5lbmQoKSkgeworICAgICAgICB1bnNpZ25lZCBhdG9tTnVt
YmVyID0gYmxvY2suYXRvbU51bWJlcihjZWxsKTsKKyAgICAgICAgZHVtcE1hcmtlckRhdGEoY2Vs
bCwgaXRlcmF0b3ItPnZhbHVlLT5tYXJrZXJEYXRhKGF0b21OdW1iZXIpKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKyAgICBkYXRhTG9nTG4oIkdDIFZlcmlmaWVyOiBjZWxsICIsIFJhd1BvaW50
ZXIoY2VsbCksICIgbm90IGZvdW5kIik7Cit9CisKK3ZvaWQgVmVyaWZpZXJTbG90VmlzaXRvcjo6
ZHVtcE1hcmtlckRhdGEoSGVhcENlbGwqIGNlbGwsIGNvbnN0IE1hcmtlckRhdGEqIG1hcmtlcikK
K3sKKyAgICBpZiAoIW1hcmtlcikgeworICAgICAgICBkYXRhTG9nTG4oIkdDIFZlcmlmaWVyOiBt
YXJrZXIgZGF0YSBpcyBub3QgYXZhaWxhYmxlIGZvciBjZWxsICIsIFJhd1BvaW50ZXIoY2VsbCkp
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgZGF0YUxvZ0xuKCJHQyBWZXJpZmllcjog
Y2VsbCAiLCBSYXdQb2ludGVyKGNlbGwpLCAiIHdhcyBtYXJrZWQgYnkgcGFyZW50ICIsIFJhd1Bv
aW50ZXIobWFya2VyLT5wYXJlbnQpLCAiIGF0OiIpOworICAgIG1hcmtlci0+c3RhY2stPmR1bXAo
V1RGOjpkYXRhRmlsZSgpLCAiICAgICIpOworfQorCitib29sIFZlcmlmaWVyU2xvdFZpc2l0b3I6
OmlzRmlyc3RWaXNpdCgpIGNvbnN0Cit7CisgICAgLy8gV2UgbmVlZCB0byBhbHdheXMgcmV0dXJu
IGZhbHNlIGJlY2F1c2UgdGhpcyBpcyB1c2VkIHRvIGFnZWQgYW4gVW5saW5rZWRDb2RlQmxvY2sK
KyAgICAvLyBpbiB0aGUgcmVndWxhciBHQzogc2VlIFVubGlua2VkQ29kZUJsb2NrOjp2aXNpdENo
aWxkcmVuSW1wbCgpLiBXZSBzaG91bGQgbm90CisgICAgLy8gc2hvdWxkIGRvIHRoYXQgYWdpbmcg
YWN0aW9uLgorICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBWZXJpZmllclNsb3RWaXNpdG9y
Ojppc01hcmtlZChjb25zdCB2b2lkKiByYXdDZWxsKSBjb25zdAoreworICAgIEhlYXBDZWxsKiBj
ZWxsID0gYml0d2lzZV9jYXN0PEhlYXBDZWxsKj4ocmF3Q2VsbCk7CisgICAgaWYgKGNlbGwtPmlz
UHJlY2lzZUFsbG9jYXRpb24oKSkKKyAgICAgICAgcmV0dXJuIGlzTWFya2VkKGNlbGwtPnByZWNp
c2VBbGxvY2F0aW9uKCksIGNlbGwpOworICAgIHJldHVybiBpc01hcmtlZChjZWxsLT5tYXJrZWRC
bG9jaygpLCBjZWxsKTsKK30KKworYm9vbCBWZXJpZmllclNsb3RWaXNpdG9yOjppc01hcmtlZChQ
cmVjaXNlQWxsb2NhdGlvbiYgYWxsb2NhdGlvbiwgSGVhcENlbGwqKSBjb25zdAoreworICAgIHJl
dHVybiBtX3ByZWNpc2VBbGxvY2F0aW9uTWFwLmNvbnRhaW5zKCZhbGxvY2F0aW9uKTsKK30KKwor
Ym9vbCBWZXJpZmllclNsb3RWaXNpdG9yOjppc01hcmtlZChNYXJrZWRCbG9jayYgYmxvY2ssIEhl
YXBDZWxsKiBjZWxsKSBjb25zdAoreworICAgIGF1dG8gZW50cnkgPSBtX21hcmtlZEJsb2NrTWFw
LmZpbmQoJmJsb2NrKTsKKyAgICBpZiAoZW50cnkgPT0gbV9tYXJrZWRCbG9ja01hcC5lbmQoKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYXV0byYgZGF0YSA9IGVudHJ5LT52YWx1ZTsK
KyAgICB1bnNpZ25lZCBhdG9tTnVtYmVyID0gYmxvY2suYXRvbU51bWJlcihjZWxsKTsKKyAgICBy
ZXR1cm4gZGF0YS0+aXNNYXJrZWQoYXRvbU51bWJlcik7Cit9CisKK3ZvaWQgVmVyaWZpZXJTbG90
VmlzaXRvcjo6bWFya0F1eGlsaWFyeShjb25zdCB2b2lkKiBiYXNlKQoreworICAgIEhlYXBDZWxs
KiBjZWxsID0gYml0d2lzZV9jYXN0PEhlYXBDZWxsKj4oYmFzZSk7CisKKyAgICBBU1NFUlQoY2Vs
bC0+aGVhcCgpID09IGhlYXAoKSk7CisgICAgdGVzdEFuZFNldE1hcmtlZChjZWxsKTsKK30KKwor
Ym9vbCBWZXJpZmllclNsb3RWaXNpdG9yOjptdXRhdG9ySXNTdG9wcGVkKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBWZXJpZmllclNsb3RWaXNpdG9yOjp0ZXN0QW5kU2V0
TWFya2VkKGNvbnN0IHZvaWQqIHJhd0NlbGwpCit7CisgICAgSGVhcENlbGwqIGNlbGwgPSBiaXR3
aXNlX2Nhc3Q8SGVhcENlbGwqPihyYXdDZWxsKTsKKyAgICBpZiAoY2VsbC0+aXNQcmVjaXNlQWxs
b2NhdGlvbigpKQorICAgICAgICByZXR1cm4gdGVzdEFuZFNldE1hcmtlZChjZWxsLT5wcmVjaXNl
QWxsb2NhdGlvbigpKTsKKyAgICByZXR1cm4gdGVzdEFuZFNldE1hcmtlZChjZWxsLT5tYXJrZWRC
bG9jaygpLCBjZWxsKTsKK30KKworYm9vbCBWZXJpZmllclNsb3RWaXNpdG9yOjp0ZXN0QW5kU2V0
TWFya2VkKFByZWNpc2VBbGxvY2F0aW9uJiBhbGxvY2F0aW9uKQoreworICAgIHN0ZDo6dW5pcXVl
X3B0cjxQcmVjaXNlQWxsb2NhdGlvbkRhdGE+JiBkYXRhID0gbV9wcmVjaXNlQWxsb2NhdGlvbk1h
cC5hZGQoJmFsbG9jYXRpb24sIG51bGxwdHIpLml0ZXJhdG9yLT52YWx1ZTsKKyAgICBpZiAoIWRh
dGEpIHsKKyAgICAgICAgZGF0YSA9IG1ha2VVbmlxdWU8UHJlY2lzZUFsbG9jYXRpb25EYXRhPigm
YWxsb2NhdGlvbik7CisgICAgICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjp2ZXJib3NlVmVyaWZ5
R0MoKSkpCisgICAgICAgICAgICBkYXRhLT5hZGRNYXJrZXJEYXRhKHsgcGFyZW50Q2VsbCgpLCBT
dGFja1RyYWNlOjpjYXB0dXJlU3RhY2tUcmFjZShtYXhNYXJraW5nU3RhY2tGcmFtZXNUb0NhcHR1
cmUsIDIpIH0pOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVl
OworfQorCitib29sIFZlcmlmaWVyU2xvdFZpc2l0b3I6OnRlc3RBbmRTZXRNYXJrZWQoTWFya2Vk
QmxvY2smIGJsb2NrLCBIZWFwQ2VsbCogY2VsbCkKK3sKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8TWFy
a2VkQmxvY2tEYXRhPiYgZGF0YSA9IG1fbWFya2VkQmxvY2tNYXAuYWRkKCZibG9jaywgbnVsbHB0
cikuaXRlcmF0b3ItPnZhbHVlOworICAgIGlmICghZGF0YSkKKyAgICAgICAgZGF0YSA9IG1ha2VV
bmlxdWU8TWFya2VkQmxvY2tEYXRhPigmYmxvY2spOworCisgICAgdW5zaWduZWQgYXRvbU51bWJl
ciA9IGJsb2NrLmF0b21OdW1iZXIoY2VsbCk7CisgICAgYm9vbCBhbHJlYWR5U2V0ID0gZGF0YS0+
dGVzdEFuZFNldE1hcmtlZChhdG9tTnVtYmVyKTsKKyAgICBpZiAoIWFscmVhZHlTZXQgJiYgVU5M
SUtFTFkoT3B0aW9uczo6dmVyYm9zZVZlcmlmeUdDKCkpKQorICAgICAgICBkYXRhLT5hZGRNYXJr
ZXJEYXRhKGF0b21OdW1iZXIsIHsgcGFyZW50Q2VsbCgpLCBTdGFja1RyYWNlOjpjYXB0dXJlU3Rh
Y2tUcmFjZShtYXhNYXJraW5nU3RhY2tGcmFtZXNUb0NhcHR1cmUsIDIpIH0pOworICAgIHJldHVy
biBhbHJlYWR5U2V0OworfQorCit2b2lkIFZlcmlmaWVyU2xvdFZpc2l0b3I6OnNldE1hcmtlZEFu
ZEFwcGVuZFRvTWFya1N0YWNrKEpTQ2VsbCogY2VsbCkKK3sKKyAgICBpZiAobV9zdXBwcmVzc1Zl
cmlmaWVyKQorICAgICAgICByZXR1cm47CisgICAgaWYgKHRlc3RBbmRTZXRNYXJrZWQoY2VsbCkp
CisgICAgICAgIHJldHVybjsKKyAgICBhcHBlbmRUb01hcmtTdGFjayhjZWxsKTsKK30KKwordm9p
ZCBWZXJpZmllclNsb3RWaXNpdG9yOjp2aXNpdEFzQ29uc3RyYWludChjb25zdCBKU0NlbGwqIGNl
bGwpCit7CisgICAgdmlzaXRDaGlsZHJlbihjZWxsKTsKK30KKwordm9pZCBWZXJpZmllclNsb3RW
aXNpdG9yOjp2aXNpdENoaWxkcmVuKGNvbnN0IEpTQ2VsbCogY2VsbCkKK3sKKyAgICBSRUxFQVNF
X0FTU0VSVChpc01hcmtlZChjZWxsKSk7IC8vIG1sYW0gTUFLRSBpbnRvIEFTU0VSVAorICAgIAor
ICAgIHN3aXRjaCAoY2VsbC0+dHlwZSgpKSB7CisgICAgY2FzZSBTdHJpbmdUeXBlOgorICAgICAg
ICBKU1N0cmluZzo6dmlzaXRDaGlsZHJlbihjb25zdF9jYXN0PEpTQ2VsbCo+KGNlbGwpLCAqdGhp
cyk7CisgICAgICAgIGJyZWFrOworICAgICAgICAKKyAgICBjYXNlIEZpbmFsT2JqZWN0VHlwZToK
KyAgICAgICAgSlNGaW5hbE9iamVjdDo6dmlzaXRDaGlsZHJlbihjb25zdF9jYXN0PEpTQ2VsbCo+
KGNlbGwpLCAqdGhpcyk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBBcnJheVR5cGU6Cisg
ICAgICAgIEpTQXJyYXk6OnZpc2l0Q2hpbGRyZW4oY29uc3RfY2FzdDxKU0NlbGwqPihjZWxsKSwg
KnRoaXMpOworICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAg
Ly8gRklYTUU6IFRoaXMgY291bGQgYmUgc28gbXVjaCBiZXR0ZXIuCisgICAgICAgIC8vIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjI0NjIKKyAgICAgICAgY2VsbC0+
bWV0aG9kVGFibGUodm0oKSktPnZpc2l0Q2hpbGRyZW4oY29uc3RfY2FzdDxKU0NlbGwqPihjZWxs
KSwgKnRoaXMpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK30gLy8gbmFtZXNwYWNlIEpT
QwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVmVyaWZpZXJTbG90VmlzaXRvci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1ZlcmlmaWVyU2xvdFZp
c2l0b3IuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9WZXJp
ZmllclNsb3RWaXNpdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNzIgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKwor
I2luY2x1ZGUgIkFic3RyYWN0U2xvdFZpc2l0b3IuaCIKKyNpbmNsdWRlICJKU0NKU1ZhbHVlLmgi
CisjaW5jbHVkZSAiVmlzaXRSYWNlS2V5LmgiCisjaW5jbHVkZSAiV2Vhay5oIgorI2luY2x1ZGUg
PG1lbW9yeT4KKyNpbmNsdWRlIDx3dGYvQml0VmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL0NvbmN1
cnJlbnRQdHJIYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KKyNpbmNsdWRl
IDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYv
U2hhcmVkVGFzay5oPgorCituYW1lc3BhY2UgV1RGIHsKKworY2xhc3MgU3RhY2tUcmFjZTsKKwor
fSAvLyBuYW1lc3BhY2UgV1RGCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBDb25zZXJ2YXRp
dmVSb290czsKK2NsYXNzIEhlYXA7CitjbGFzcyBIZWFwQ2VsbDsKK2NsYXNzIFByZWNpc2VBbGxv
Y2F0aW9uOworY2xhc3MgTWFya2VkQmxvY2s7CisKK3VzaW5nIFdURjo6U3RhY2tUcmFjZTsKKwor
Y2xhc3MgVmVyaWZpZXJTbG90VmlzaXRvciA6IHB1YmxpYyBBYnN0cmFjdFNsb3RWaXNpdG9yIHsK
KyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShWZXJpZmllclNsb3RWaXNpdG9yKTsKKyAgICBXVEZf
TUFLRV9GQVNUX0FMTE9DQVRFRDsKKyAgICB1c2luZyBCYXNlID0gQWJzdHJhY3RTbG90VmlzaXRv
cjsKK3B1YmxpYzoKKyAgICBzdHJ1Y3QgTWFya2VyRGF0YSB7CisgICAgICAgIE1hcmtlckRhdGEo
KSA9IGRlZmF1bHQ7CisgICAgICAgIE1hcmtlckRhdGEoTWFya2VyRGF0YSYmKSA9IGRlZmF1bHQ7
CisgICAgICAgIE1hcmtlckRhdGEoSGVhcENlbGwqLCBzdGQ6OnVuaXF1ZV9wdHI8U3RhY2tUcmFj
ZT4mJik7CisgICAgICAgIE1hcmtlckRhdGEmIG9wZXJhdG9yPShNYXJrZXJEYXRhJiYpID0gZGVm
YXVsdDsKKworICAgICAgICBIZWFwQ2VsbCogcGFyZW50IHsgbnVsbHB0ciB9OworICAgICAgICBz
dGQ6OnVuaXF1ZV9wdHI8U3RhY2tUcmFjZT4gc3RhY2s7CisgICAgfTsKKworICAgIFZlcmlmaWVy
U2xvdFZpc2l0b3IoSGVhcCYpOworICAgIH5WZXJpZmllclNsb3RWaXNpdG9yKCk7CisKKyAgICB2
b2lkIGFwcGVuZF9Db25zZXJ2YXRpdmVSb290cyhjb25zdCBDb25zZXJ2YXRpdmVSb290cyYpIGZp
bmFsOworICAgIHZvaWQgYXBwZW5kVW5iYXJyaWVyZWRJbXBsKEpTQ2VsbCopIGZpbmFsOworICAg
IHZvaWQgYXBwZW5kSGlkZGVuVW5iYXJyaWVyZWRJbXBsKEpTQ2VsbCopIGZpbmFsOworCisgICAg
Ym9vbCBhZGRPcGFxdWVSb290KHZvaWQqKSBmaW5hbDsgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBy
b290IHdhcyBuZXcuCisgICAgYm9vbCBjb250YWluc09wYXF1ZVJvb3Qodm9pZCopIGNvbnN0IGZp
bmFsOworCisgICAgYm9vbCBpc0ZpcnN0VmlzaXQoKSBjb25zdCBmaW5hbDsKKyAgICBib29sIGlz
TWFya2VkKGNvbnN0IHZvaWQqKSBjb25zdCBmaW5hbDsKKyAgICBib29sIGlzTWFya2VkKE1hcmtl
ZEJsb2NrJiwgSGVhcENlbGwqKSBjb25zdCBmaW5hbDsKKyAgICBib29sIGlzTWFya2VkKFByZWNp
c2VBbGxvY2F0aW9uJiwgSGVhcENlbGwqKSBjb25zdCBmaW5hbDsKKworICAgIHZvaWQgbWFya0F1
eGlsaWFyeShjb25zdCB2b2lkKikgZmluYWw7CisKKyAgICB2b2lkIHJlcG9ydEV4dHJhTWVtb3J5
VmlzaXRlZChzaXplX3QpIGZpbmFsIHsgfQorI2lmIEVOQUJMRShSRVNPVVJDRV9VU0FHRSkKKyAg
ICB2b2lkIHJlcG9ydEV4dGVybmFsTWVtb3J5VmlzaXRlZChzaXplX3QpIGZpbmFsIHsgfQorI2Vu
ZGlmCisKKyAgICBib29sIG11dGF0b3JJc1N0b3BwZWQoKSBjb25zdCBmaW5hbDsKKworICAgIHZv
aWQgZGlkUmFjZShjb25zdCBWaXNpdFJhY2VLZXkmKSBmaW5hbCB7IH0KKyAgICB2b2lkIGR1bXAo
UHJpbnRTdHJlYW0mKSBjb25zdCBmaW5hbCB7IH0KKworICAgIHZvaWQgdmlzaXRBc0NvbnN0cmFp
bnQoY29uc3QgSlNDZWxsKikgZmluYWw7CisKKyAgICB2b2lkIGRyYWluKCk7CisKKyAgICB2b2lk
IGFkZFBhcmFsbGVsQ29uc3RyYWludFRhc2soUmVmUHRyPFNoYXJlZFRhc2s8dm9pZChBYnN0cmFj
dFNsb3RWaXNpdG9yJik+PikgZmluYWw7CisgICAgdm9pZCBleGVjdXRlQ29uc3RyYWludFRhc2tz
KCk7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hMaXZlQ2Vs
bChjb25zdCBGdW5jdG9yJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBm
b3JFYWNoTGl2ZVByZWNpc2VBbGxvY2F0aW9uKGNvbnN0IEZ1bmN0b3ImKTsKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hMaXZlTWFya2VkQmxvY2tDZWxsKGNvbnN0
IEZ1bmN0b3ImKTsKKworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZHVtcE1hcmtlckRhdGEo
SGVhcENlbGwqKTsKKworcHJpdmF0ZToKKyAgICBjbGFzcyBNYXJrZWRCbG9ja0RhdGEgeworICAg
ICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKKyAgICAgICAgV1RGX01BS0VfTk9OQ09QWUFC
TEUoTWFya2VkQmxvY2tEYXRhKTsKKyAgICBwdWJsaWM6CisgICAgICAgIE1hcmtlZEJsb2NrRGF0
YShNYXJrZWRCbG9jayopOworCisgICAgICAgIE1hcmtlZEJsb2NrKiBibG9jaygpIGNvbnN0IHsg
cmV0dXJuIG1fYmxvY2s7IH0KKyAgICAgICAgY29uc3QgQml0VmVjdG9yJiBhdG9tcygpIGNvbnN0
IHsgcmV0dXJuIG1fYXRvbXM7IH0KKworICAgICAgICBib29sIGlzTWFya2VkKHVuc2lnbmVkIGF0
b21OdW1iZXIpIHsgcmV0dXJuIG1fYXRvbXMucXVpY2tHZXQoYXRvbU51bWJlcik7IH0KKyAgICAg
ICAgYm9vbCB0ZXN0QW5kU2V0TWFya2VkKHVuc2lnbmVkIGF0b21OdW1iZXIpIHsgcmV0dXJuIG1f
YXRvbXMucXVpY2tTZXQoYXRvbU51bWJlcik7IH0KKworICAgICAgICB2b2lkIGFkZE1hcmtlckRh
dGEodW5zaWduZWQgYXRvbU51bWJlciwgTWFya2VyRGF0YSYmKTsKKyAgICAgICAgY29uc3QgTWFy
a2VyRGF0YSogbWFya2VyRGF0YSh1bnNpZ25lZCBhdG9tTnVtYmVyKSBjb25zdDsKKworICAgIHBy
aXZhdGU6CisgICAgICAgIE1hcmtlZEJsb2NrKiBtX2Jsb2NrIHsgbnVsbHB0ciB9OworICAgICAg
ICBCaXRWZWN0b3IgbV9hdG9tczsKKyAgICAgICAgVmVjdG9yPE1hcmtlckRhdGE+IG1fbWFya2Vy
czsKKyAgICB9OworCisgICAgY2xhc3MgUHJlY2lzZUFsbG9jYXRpb25EYXRhIHsKKyAgICAgICAg
V1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CisgICAgICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFBy
ZWNpc2VBbGxvY2F0aW9uRGF0YSk7CisgICAgcHVibGljOgorICAgICAgICBQcmVjaXNlQWxsb2Nh
dGlvbkRhdGEoUHJlY2lzZUFsbG9jYXRpb24qKTsKKyAgICAgICAgUHJlY2lzZUFsbG9jYXRpb24q
IGFsbG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBtX2FsbG9jYXRpb247IH0KKworICAgICAgICB2
b2lkIGFkZE1hcmtlckRhdGEoTWFya2VyRGF0YSYmKTsKKyAgICAgICAgY29uc3QgTWFya2VyRGF0
YSogbWFya2VyRGF0YSgpIGNvbnN0OworCisgICAgcHJpdmF0ZToKKyAgICAgICAgUHJlY2lzZUFs
bG9jYXRpb24qIG1fYWxsb2NhdGlvbiB7IG51bGxwdHIgfTsKKyAgICAgICAgTWFya2VyRGF0YSBt
X21hcmtlcjsKKyAgICB9OworCisgICAgdXNpbmcgTWFya2VkQmxvY2tNYXAgPSBIYXNoTWFwPE1h
cmtlZEJsb2NrKiwgc3RkOjp1bmlxdWVfcHRyPE1hcmtlZEJsb2NrRGF0YT4+OworICAgIHVzaW5n
IFByZWNpc2VBbGxvY2F0aW9uTWFwID0gSGFzaE1hcDxQcmVjaXNlQWxsb2NhdGlvbiosIHN0ZDo6
dW5pcXVlX3B0cjxQcmVjaXNlQWxsb2NhdGlvbkRhdGE+PjsKKworICAgIHZvaWQgYXBwZW5kVG9N
YXJrU3RhY2soSlNDZWxsKik7CisgICAgdm9pZCBhcHBlbmRTbG93KEpTQ2VsbCogY2VsbCkgeyBz
ZXRNYXJrZWRBbmRBcHBlbmRUb01hcmtTdGFjayhjZWxsKTsgfQorCisgICAgYm9vbCB0ZXN0QW5k
U2V0TWFya2VkKGNvbnN0IHZvaWQqIHJhd0NlbGwpOworICAgIGJvb2wgdGVzdEFuZFNldE1hcmtl
ZChQcmVjaXNlQWxsb2NhdGlvbiYpOworICAgIGJvb2wgdGVzdEFuZFNldE1hcmtlZChNYXJrZWRC
bG9jayYsIEhlYXBDZWxsKik7CisKKyAgICB2b2lkIHNldE1hcmtlZEFuZEFwcGVuZFRvTWFya1N0
YWNrKEpTQ2VsbCopOworCisgICAgdm9pZCB2aXNpdENoaWxkcmVuKGNvbnN0IEpTQ2VsbCopOwor
CisgICAgdm9pZCBkdW1wTWFya2VyRGF0YShQcmVjaXNlQWxsb2NhdGlvbiYsIEhlYXBDZWxsKik7
CisgICAgdm9pZCBkdW1wTWFya2VyRGF0YShNYXJrZWRCbG9jayYsIEhlYXBDZWxsKik7CisgICAg
dm9pZCBkdW1wTWFya2VyRGF0YShIZWFwQ2VsbCosIGNvbnN0IE1hcmtlckRhdGEqKTsKKworICAg
IFByZWNpc2VBbGxvY2F0aW9uTWFwIG1fcHJlY2lzZUFsbG9jYXRpb25NYXA7CisgICAgTWFya2Vk
QmxvY2tNYXAgbV9tYXJrZWRCbG9ja01hcDsKKyAgICBDb25jdXJyZW50UHRySGFzaFNldCBtX29w
YXF1ZVJvb3RzOworICAgIERlcXVlPFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoQWJzdHJhY3RTbG90
VmlzaXRvciYpPj4sIDMyPiBtX2NvbnN0cmFpbnRUYXNrczsKK307CisKK30gLy8gbmFtZXNwYWNl
IEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVmVyaWZpZXJTbG90VmlzaXRv
cklubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9WZXJp
ZmllclNsb3RWaXNpdG9ySW5saW5lcy5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL1ZlcmlmaWVyU2xvdFZpc2l0b3JJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw2NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiVmVyaWZpZXJTbG90VmlzaXRvci5oIgor
CisjaW5jbHVkZSAiQWJzdHJhY3RTbG90VmlzaXRvcklubGluZXMuaCIKKworbmFtZXNwYWNlIEpT
QyB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+Cit2b2lkIFZlcmlmaWVyU2xvdFZpc2l0
b3I6OmZvckVhY2hMaXZlQ2VsbChjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQoreworICAgIGZvckVh
Y2hMaXZlUHJlY2lzZUFsbG9jYXRpb24oZnVuY3Rvcik7CisgICAgZm9yRWFjaExpdmVNYXJrZWRC
bG9ja0NlbGwoZnVuY3Rvcik7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+Cit2b2lk
IFZlcmlmaWVyU2xvdFZpc2l0b3I6OmZvckVhY2hMaXZlUHJlY2lzZUFsbG9jYXRpb24oY29uc3Qg
RnVuY3RvciYgZnVuYykKK3sKKyAgICBmb3IgKGF1dG8mIGVudHJ5IDogbV9wcmVjaXNlQWxsb2Nh
dGlvbk1hcCkgeworICAgICAgICBQcmVjaXNlQWxsb2NhdGlvbiogYWxsb2NhdGlvbiA9IGVudHJ5
LnZhbHVlLT5hbGxvY2F0aW9uKCk7CisgICAgICAgIGZ1bmMoYWxsb2NhdGlvbi0+Y2VsbCgpKTsK
KyAgICB9Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+Cit2b2lkIFZlcmlmaWVyU2xv
dFZpc2l0b3I6OmZvckVhY2hMaXZlTWFya2VkQmxvY2tDZWxsKGNvbnN0IEZ1bmN0b3ImIGZ1bmMp
Cit7CisgICAgZm9yIChhdXRvJiBlbnRyeSA6IG1fbWFya2VkQmxvY2tNYXApIHsKKyAgICAgICAg
YXV0byYgZGF0YSA9IGVudHJ5LnZhbHVlOworICAgICAgICBNYXJrZWRCbG9jayogYmxvY2sgPSBk
YXRhLT5ibG9jaygpOworICAgICAgICBjb25zdCBCaXRWZWN0b3ImIGF0b21zID0gIGRhdGEtPmF0
b21zKCk7CisgICAgICAgIGZvciAoYXV0byBhdG9tTnVtYmVyIDogYXRvbXMpIHsKKyAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKGF0b21zLnF1aWNrR2V0KGF0b21OdW1iZXIpKTsgLy8gbWxhbSBU
RVNUIFNhbml0eSBDaGVjaworICAgICAgICAgICAgZnVuYyhiaXR3aXNlX2Nhc3Q8SGVhcENlbGwq
PihibG9jay0+aGFuZGxlKCkuYXRvbUF0KGF0b21OdW1iZXIpKSk7CisgICAgICAgIH0KKyAgICB9
Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvVmlzaXRDb3VudGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvVmlzaXRDb3VudGVyLmgJKHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL1Zpc2l0Q291bnRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw3ICsyNSw3IEBA
CiAKICNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSAiU2xvdFZpc2l0b3IuaCIKKyNpbmNsdWRlICJB
YnN0cmFjdFNsb3RWaXNpdG9yLmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC0zMywxMyArMzMs
MTMgQEAgY2xhc3MgVmlzaXRDb3VudGVyIHsKIHB1YmxpYzoKICAgICBWaXNpdENvdW50ZXIoKSB7
IH0KICAgICAKLSAgICBWaXNpdENvdW50ZXIoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisgICAgVmlz
aXRDb3VudGVyKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiAgICAgICAgIDogbV92aXNp
dG9yKCZ2aXNpdG9yKQogICAgICAgICAsIG1faW5pdGlhbFZpc2l0Q291bnQodmlzaXRvci52aXNp
dENvdW50KCkpCiAgICAgewogICAgIH0KICAgICAKLSAgICBTbG90VmlzaXRvciYgdmlzaXRvcigp
IGNvbnN0IHsgcmV0dXJuICptX3Zpc2l0b3I7IH0KKyAgICBBYnN0cmFjdFNsb3RWaXNpdG9yJiB2
aXNpdG9yKCkgY29uc3QgeyByZXR1cm4gKm1fdmlzaXRvcjsgfQogICAgIAogICAgIHNpemVfdCB2
aXNpdENvdW50KCkgY29uc3QKICAgICB7CkBAIC00Nyw3ICs0Nyw3IEBAIHB1YmxpYzoKICAgICB9
CiAgICAgCiBwcml2YXRlOgotICAgIFNsb3RWaXNpdG9yKiBtX3Zpc2l0b3IgeyBudWxscHRyIH07
CisgICAgQWJzdHJhY3RTbG90VmlzaXRvciogbV92aXNpdG9yIHsgbnVsbHB0ciB9OwogICAgIHNp
emVfdCBtX2luaXRpYWxWaXNpdENvdW50IHsgMCB9OwogfTsKIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvV2Vha0Jsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9XZWFrQmxvY2suY3BwCShyZXZpc2lvbiAyNzIyOTcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05OCwx
MiArOTgsMTMgQEAgdm9pZCBXZWFrQmxvY2s6OnN3ZWVwKCkKICAgICBBU1NFUlQoIW1fc3dlZXBS
ZXN1bHQuaXNOdWxsKCkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBDb250YWluZXJUeXBlPgot
dm9pZCBXZWFrQmxvY2s6OnNwZWNpYWxpemVkVmlzaXQoQ29udGFpbmVyVHlwZSYgY29udGFpbmVy
LCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIENvbnRhaW5lclR5cGUs
IHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFdlYWtCbG9jazo6c3BlY2lhbGl6ZWRWaXNpdChDb250
YWluZXJUeXBlJiBjb250YWluZXIsIFZpc2l0b3ImIHZpc2l0b3IpCiB7Ci0gICAgSGVhcFZlcnNp
b24gbWFya2luZ1ZlcnNpb24gPSB2aXNpdG9yLm1hcmtpbmdWZXJzaW9uKCk7CisvLyAgICBIZWFw
VmVyc2lvbiBtYXJraW5nVmVyc2lvbiA9IHZpc2l0b3IubWFya2luZ1ZlcnNpb24oKTsKIAogICAg
IHNpemVfdCBjb3VudCA9IHdlYWtJbXBsQ291bnQoKTsKKyAgICBIZWFwQW5hbHl6ZXIqIGhlYXBB
bmFseXplciA9IHZpc2l0b3Iudm0oKS5hY3RpdmVIZWFwQW5hbHl6ZXIoKTsKICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKICAgICAgICAgV2Vha0ltcGwqIHdlYWtJbXBs
ID0gJndlYWtJbXBscygpW2ldOwogICAgICAgICBpZiAod2Vha0ltcGwtPnN0YXRlKCkgIT0gV2Vh
a0ltcGw6OkxpdmUpCkBAIC0xMTQsMTIgKzExNSwxMyBAQCB2b2lkIFdlYWtCbG9jazo6c3BlY2lh
bGl6ZWRWaXNpdChDb250YWluCiAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICBKU1Zh
bHVlIGpzVmFsdWUgPSB3ZWFrSW1wbC0+anNWYWx1ZSgpOwotICAgICAgICBpZiAoY29udGFpbmVy
LmlzTWFya2VkKG1hcmtpbmdWZXJzaW9uLCBqc1ZhbHVlLmFzQ2VsbCgpKSkKKy8vICAgICAgICBp
ZiAoY29udGFpbmVyLmlzTWFya2VkKG1hcmtpbmdWZXJzaW9uLCBqc1ZhbHVlLmFzQ2VsbCgpKSkK
KyAgICAgICAgaWYgKHZpc2l0b3IuaXNNYXJrZWQoY29udGFpbmVyLCBqc1ZhbHVlLmFzQ2VsbCgp
KSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAKICAgICAgICAgY29uc3QgY2hhciog
cmVhc29uID0gIiI7CiAgICAgICAgIGNvbnN0IGNoYXIqKiByZWFzb25QdHIgPSBudWxscHRyOwot
ICAgICAgICBpZiAoVU5MSUtFTFkodmlzaXRvci5pc0FuYWx5emluZ0hlYXAoKSkpCisgICAgICAg
IGlmIChVTkxJS0VMWShoZWFwQW5hbHl6ZXIpKQogICAgICAgICAgICAgcmVhc29uUHRyID0gJnJl
YXNvbjsKIAogICAgICAgICBpZiAoIXdlYWtIYW5kbGVPd25lci0+aXNSZWFjaGFibGVGcm9tT3Bh
cXVlUm9vdHMoSGFuZGxlPFVua25vd24+Ojp3cmFwU2xvdCgmY29uc3RfY2FzdDxKU1ZhbHVlJj4o
anNWYWx1ZSkpLCB3ZWFrSW1wbC0+Y29udGV4dCgpLCB2aXNpdG9yLCByZWFzb25QdHIpKQpAQCAt
MTI3LDE0ICsxMjksMTYgQEAgdm9pZCBXZWFrQmxvY2s6OnNwZWNpYWxpemVkVmlzaXQoQ29udGFp
bgogCiAgICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQoanNWYWx1ZSk7CiAKLSAgICAg
ICAgaWYgKFVOTElLRUxZKHZpc2l0b3IuaXNBbmFseXppbmdIZWFwKCkpKSB7CisgICAgICAgIGlm
IChVTkxJS0VMWShoZWFwQW5hbHl6ZXIpKSB7CiAgICAgICAgICAgICBpZiAoanNWYWx1ZS5pc0Nl
bGwoKSkKLSAgICAgICAgICAgICAgICB2aXNpdG9yLmhlYXBBbmFseXplcigpLT5zZXRPcGFxdWVS
b290UmVhY2hhYmlsaXR5UmVhc29uRm9yQ2VsbChqc1ZhbHVlLmFzQ2VsbCgpLCAqcmVhc29uUHRy
KTsKKyAgICAgICAgICAgICAgICBoZWFwQW5hbHl6ZXItPnNldE9wYXF1ZVJvb3RSZWFjaGFiaWxp
dHlSZWFzb25Gb3JDZWxsKGpzVmFsdWUuYXNDZWxsKCksICpyZWFzb25QdHIpOwogICAgICAgICB9
CiAgICAgfQogfQogCi12b2lkIFdlYWtCbG9jazo6dmlzaXQoU2xvdFZpc2l0b3ImIHZpc2l0b3Ip
CisvL3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+CisvL3ZvaWQgV2Vha0Jsb2NrOjp2aXNpdChW
aXNpdG9yJiB2aXNpdG9yKQordm9pZCBXZWFrQmxvY2s6OnZpc2l0MShBYnN0cmFjdFNsb3RWaXNp
dG9yJiB2aXNpdG9yKQogewogICAgIC8vIElmIGEgYmxvY2sgaXMgY29tcGxldGVseSBlbXB0eSwg
YSB2aXNpdCB3b24ndCBoYXZlIGFueSBlZmZlY3QuCiAgICAgaWYgKGlzRW1wdHkoKSkKQEAgLTE0
OSw2ICsxNTMsOSBAQCB2b2lkIFdlYWtCbG9jazo6dmlzaXQoU2xvdFZpc2l0b3ImIHZpc2l0CiAg
ICAgICAgIHNwZWNpYWxpemVkVmlzaXQobV9jb250YWluZXIubWFya2VkQmxvY2soKSwgdmlzaXRv
cik7CiB9CiAKKy8vdGVtcGxhdGUgdm9pZCBXZWFrQmxvY2s6OnZpc2l0KFNsb3RWaXNpdG9yJik7
CisvL3RlbXBsYXRlIHZvaWQgV2Vha0Jsb2NrOjp2aXNpdChWZXJpZmllclNsb3RWaXNpdG9yJik7
CisKIHZvaWQgV2Vha0Jsb2NrOjpyZWFwKCkKIHsKICAgICAvLyBJZiBhIGJsb2NrIGlzIGNvbXBs
ZXRlbHkgZW1wdHksIGEgcmVhcGluZyB3b24ndCBoYXZlIGFueSBlZmZlY3QuCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrQmxvY2suaAkocmV2aXNpb24gMjcyMjk3KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha0Jsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTMy
LDggKzMyLDkgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKK2NsYXNzIEFic3RyYWN0U2xvdFZpc2l0
b3I7CiBjbGFzcyBIZWFwOwotY2xhc3MgU2xvdFZpc2l0b3I7CisvL2NsYXNzIFNsb3RWaXNpdG9y
OwogCiBERUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihXZWFrQmxvY2spOwog
CkBAIC02NSw3ICs2Niw4IEBAIHB1YmxpYzoKICAgICB2b2lkIHN3ZWVwKCk7CiAgICAgU3dlZXBS
ZXN1bHQgdGFrZVN3ZWVwUmVzdWx0KCk7CiAKLSAgICB2b2lkIHZpc2l0KFNsb3RWaXNpdG9yJik7
CisvLyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIHZpc2l0KFZpc2l0b3ImKTsK
KyAgICB2b2lkIHZpc2l0MShBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAKICAgICB2b2lkIHJlYXAo
KTsKIApAQCAtNzUsOCArNzcsOCBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIHN0YXRpYyBGcmVl
Q2VsbCogYXNGcmVlQ2VsbChXZWFrSW1wbCopOwogICAgIAotICAgIHRlbXBsYXRlPHR5cGVuYW1l
IENvbnRhaW5lclR5cGU+Ci0gICAgdm9pZCBzcGVjaWFsaXplZFZpc2l0KENvbnRhaW5lclR5cGUm
LCBTbG90VmlzaXRvciYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIENvbnRhaW5lclR5cGUsIHR5
cGVuYW1lIFZpc2l0b3I+CisgICAgdm9pZCBzcGVjaWFsaXplZFZpc2l0KENvbnRhaW5lclR5cGUm
LCBWaXNpdG9yJik7CiAKICAgICBleHBsaWNpdCBXZWFrQmxvY2soQ2VsbENvbnRhaW5lcik7CiAg
ICAgdm9pZCBmaW5hbGl6ZShXZWFrSW1wbCopOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvV2Vha0hhbmRsZU93bmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9XZWFrSGFuZGxlT3duZXIuY3BwCShyZXZpc2lvbiAyNzIyOTcpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrSGFuZGxlT3duZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zNSw3ICszNSw3IEBAIFdlYWtIYW5kbGVPd25lcjo6fldlYWtIYW5kbGVPd25lcigpCiB7
CiB9CiAKLWJvb2wgV2Vha0hhbmRsZU93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhI
YW5kbGU8VW5rbm93bj4sIHZvaWQqLCBTbG90VmlzaXRvciYsIGNvbnN0IGNoYXIqKikKK2Jvb2wg
V2Vha0hhbmRsZU93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhIYW5kbGU8VW5rbm93
bj4sIHZvaWQqLCBBYnN0cmFjdFNsb3RWaXNpdG9yJiwgY29uc3QgY2hhcioqKQogewogICAgIHJl
dHVybiBmYWxzZTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtIYW5k
bGVPd25lci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtI
YW5kbGVPd25lci5oCShyZXZpc2lvbiAyNzIyOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9XZWFrSGFuZGxlT3duZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjksMTMgKzI5LDEzIEBA
CiAKIG5hbWVzcGFjZSBKU0MgewogCi1jbGFzcyBTbG90VmlzaXRvcjsKK2NsYXNzIEFic3RyYWN0
U2xvdFZpc2l0b3I7CiAKIGNsYXNzIEpTX0VYUE9SVF9QUklWQVRFIFdlYWtIYW5kbGVPd25lciB7
CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+V2Vha0hhbmRsZU93bmVyKCk7CiAgICAgLy8gcmVhc29u
IHdpbGwgb25seSBiZSBub24tbnVsbCB3aGVuIGdlbmVyYXRpbmcgYSBkZWJ1ZyBHQyBoZWFwIHNu
YXBzaG90LgotICAgIHZpcnR1YWwgYm9vbCBpc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhIYW5k
bGU8VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIFNsb3RWaXNpdG9yJiwgY2hhciBjb25zdCoqIHJl
YXNvbiA9IG51bGxwdHIpOworICAgIHZpcnR1YWwgYm9vbCBpc1JlYWNoYWJsZUZyb21PcGFxdWVS
b290cyhIYW5kbGU8VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIEFic3RyYWN0U2xvdFZpc2l0b3Im
LCBjaGFyIGNvbnN0KiogcmVhc29uID0gbnVsbHB0cik7CiAgICAgdmlydHVhbCB2b2lkIGZpbmFs
aXplKEhhbmRsZTxVbmtub3duPiwgdm9pZCogY29udGV4dCk7CiB9OwogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtJbmxpbmVzLmgJKHJldmlzaW9uIDI3MjI5NykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTI2LDYgKzI2LDcgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiSlNDYXN0LmgiCisjaW5j
bHVkZSAiV2Vhay5oIgogI2luY2x1ZGUgIldlYWtTZXRJbmxpbmVzLmgiCiAjaW5jbHVkZSA8d3Rm
L0Fzc2VydGlvbnMuaD4KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha1Nl
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtTZXQuaAko
cmV2aXNpb24gMjcyMjk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha1NldC5o
CSh3b3JraW5nIGNvcHkpCkBAIC01MSw3ICs1MSw4IEBAIHB1YmxpYzoKICAgICBib29sIGlzRW1w
dHkoKSBjb25zdDsKICAgICBib29sIGlzVHJpdmlhbGx5RGVzdHJ1Y3RpYmxlKCkgY29uc3Q7CiAK
LSAgICB2b2lkIHZpc2l0KFNsb3RWaXNpdG9yJik7CisvLyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPiB2b2lkIHZpc2l0KFZpc2l0b3ImKTsKKyAgICB2b2lkIHZpc2l0MShBYnN0cmFjdFNs
b3RWaXNpdG9yJik7CiAKICAgICB2b2lkIHJlYXAoKTsKICAgICB2b2lkIHN3ZWVwKCk7CkBAIC0x
MTQsMTAgKzExNSwxMiBAQCBpbmxpbmUgdm9pZCBXZWFrU2V0OjpsYXN0Q2hhbmNlVG9GaW5hbGl6
CiAgICAgICAgIGJsb2NrLT5sYXN0Q2hhbmNlVG9GaW5hbGl6ZSgpOwogfQogCi1pbmxpbmUgdm9p
ZCBXZWFrU2V0Ojp2aXNpdChTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vdGVtcGxhdGU8dHlwZW5h
bWUgVmlzaXRvcj4KKy8vaW5saW5lIHZvaWQgV2Vha1NldDo6dmlzaXQoVmlzaXRvciYgdmlzaXRv
cikKK2lubGluZSB2b2lkIFdlYWtTZXQ6OnZpc2l0MShBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNp
dG9yKQogewogICAgIGZvciAoV2Vha0Jsb2NrKiBibG9jayA9IG1fYmxvY2tzLmhlYWQoKTsgYmxv
Y2s7IGJsb2NrID0gYmxvY2stPm5leHQoKSkKLSAgICAgICAgYmxvY2stPnZpc2l0KHZpc2l0b3Ip
OworICAgICAgICBibG9jay0+dmlzaXQxKHZpc2l0b3IpOwogfQogCiBpbmxpbmUgdm9pZCBXZWFr
U2V0OjpyZWFwKCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TaGFk
b3dDaGlja2VuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJw
cmV0ZXIvU2hhZG93Q2hpY2tlbi5jcHAJKHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnRlcnByZXRlci9TaGFkb3dDaGlja2VuLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDQwLDcgKzQ0MCw3IEBAIHZvaWQgU2hhZG93Q2hpY2tlbjo6dXBkYXRlKFZNJiB2bSwgQ2Fs
bEYKICAgICAgICAgZGF0YUxvZygiICAgIEFmdGVyIGNsZWFuLXVwOiAiLCAqdGhpcywgIlxuIik7
CiB9CiAKLXZvaWQgU2hhZG93Q2hpY2tlbjo6dmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYgdmlz
aXRvcikKK3ZvaWQgU2hhZG93Q2hpY2tlbjo6dmlzaXRDaGlsZHJlbihBYnN0cmFjdFNsb3RWaXNp
dG9yJiB2aXNpdG9yKQogewogICAgIGZvciAodW5zaWduZWQgaSA9IG1fbG9nQ3Vyc29yIC0gbV9s
b2c7IGktLTspIHsKICAgICAgICAgSlNPYmplY3QqIGNhbGxlZSA9IG1fbG9nW2ldLmNhbGxlZTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TaGFkb3dDaGlja2VuLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1NoYWRvd0No
aWNrZW4uaAkocmV2aXNpb24gMjcyMjk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVy
cHJldGVyL1NoYWRvd0NoaWNrZW4uaAkod29ya2luZyBjb3B5KQpAQCAtMzUsMTMgKzM1LDEzIEBA
CiAKIG5hbWVzcGFjZSBKU0MgewogCitjbGFzcyBBYnN0cmFjdFNsb3RWaXNpdG9yOwogY2xhc3Mg
Q2FsbEZyYW1lOwogY2xhc3MgQ29kZUJsb2NrOwogY2xhc3MgSlNBcnJheTsKIGNsYXNzIEpTT2Jq
ZWN0OwogY2xhc3MgSlNTY29wZTsKIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKLWNsYXNz
IFNsb3RWaXNpdG9yOwogY2xhc3MgVk07CiAKIC8vIFNoYWRvd0NoaWNrZW4gaXMgYSBsb2cgdGhh
dCBjYW4gYmUgdXNlZCB0byBwcm9kdWNlIGEgc2hhZG93IHN0YWNrIG9mIENISUNLRU4tc3R5bGUg
c3RhY2sgZnJhbWVzLgpAQCAtMTk2LDcgKzE5Niw3IEBAIHB1YmxpYzoKICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBGdW5jdG9yPgogICAgIHZvaWQgaXRlcmF0ZShWTSYsIENhbGxGcmFtZSosIGNvbnN0
IEZ1bmN0b3ImKTsKICAgICAKLSAgICB2b2lkIHZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsK
KyAgICB2b2lkIHZpc2l0Q2hpbGRyZW4oQWJzdHJhY3RTbG90VmlzaXRvciYpOwogICAgIHZvaWQg
cmVzZXQoKTsKICAgICAKICAgICAvLyBKSVQgc3VwcG9ydC4KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvR0NBd2FyZUpJVFN0dWJSb3V0aW5lLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0dDQXdhcmVKSVRTdHViUm91dGluZS5jcHAJKHJldmlzaW9u
IDI3MjI5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvR0NBd2FyZUpJVFN0dWJSb3V0
aW5lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzMsMTAgKzczLDE1IEBAIHZvaWQgR0NBd2FyZUpJ
VFN0dWJSb3V0aW5lOjpkZWxldGVGcm9tR0MKICAgICBkZWxldGUgdGhpczsKIH0KIAotdm9pZCBH
Q0F3YXJlSklUU3R1YlJvdXRpbmU6Om1hcmtSZXF1aXJlZE9iamVjdHNJbnRlcm5hbChTbG90Vmlz
aXRvciYpCisvL3ZvaWQgR0NBd2FyZUpJVFN0dWJSb3V0aW5lOjptYXJrUmVxdWlyZWRPYmplY3Rz
SW50ZXJuYWwoU2xvdFZpc2l0b3ImKQordm9pZCBHQ0F3YXJlSklUU3R1YlJvdXRpbmU6Om1hcmtS
ZXF1aXJlZE9iamVjdHNJbnRlcm5hbDEoQWJzdHJhY3RTbG90VmlzaXRvciYpCiB7CiB9CiAKKy8v
dm9pZCBHQ0F3YXJlSklUU3R1YlJvdXRpbmU6Om1hcmtSZXF1aXJlZE9iamVjdHNJbnRlcm5hbChW
ZXJpZmllclNsb3RWaXNpdG9yJikKKy8veworLy99CisKIE1hcmtpbmdHQ0F3YXJlSklUU3R1YlJv
dXRpbmU6Ok1hcmtpbmdHQ0F3YXJlSklUU3R1YlJvdXRpbmUoCiAgICAgY29uc3QgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiYgY29kZSwgVk0mIHZtLCBjb25zdCBK
U0NlbGwqIG93bmVyLAogICAgIGNvbnN0IFZlY3RvcjxKU0NlbGwqPiYgY2VsbHMsIEJhZzxDYWxs
TGlua0luZm8+JiYgY2FsbExpbmtJbmZvcykKQEAgLTkyLDEyICs5NywxOSBAQCBNYXJraW5nR0NB
d2FyZUpJVFN0dWJSb3V0aW5lOjp+TWFya2luZ0dDCiB7CiB9CiAKLXZvaWQgTWFya2luZ0dDQXdh
cmVKSVRTdHViUm91dGluZTo6bWFya1JlcXVpcmVkT2JqZWN0c0ludGVybmFsKFNsb3RWaXNpdG9y
JiB2aXNpdG9yKQorLy92b2lkIE1hcmtpbmdHQ0F3YXJlSklUU3R1YlJvdXRpbmU6Om1hcmtSZXF1
aXJlZE9iamVjdHNJbnRlcm5hbChTbG90VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgTWFya2luZ0dD
QXdhcmVKSVRTdHViUm91dGluZTo6bWFya1JlcXVpcmVkT2JqZWN0c0ludGVybmFsMShBYnN0cmFj
dFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGZvciAoYXV0byYgZW50cnkgOiBtX2NlbGxz
KQogICAgICAgICB2aXNpdG9yLmFwcGVuZChlbnRyeSk7CiB9CiAKKy8vIEZJWE1FIGRlZHVwZT8K
Ky8vdm9pZCBNYXJraW5nR0NBd2FyZUpJVFN0dWJSb3V0aW5lOjptYXJrUmVxdWlyZWRPYmplY3Rz
SW50ZXJuYWwoVmVyaWZpZXJTbG90VmlzaXRvciYgdmlzaXRvcikKKy8veworLy8gICAgZm9yIChh
dXRvJiBlbnRyeSA6IG1fY2VsbHMpCisvLyAgICAgICAgdmlzaXRvci5hcHBlbmQoZW50cnkpOwor
Ly99CiAKIEdDQXdhcmVKSVRTdHViUm91dGluZVdpdGhFeGNlcHRpb25IYW5kbGVyOjpHQ0F3YXJl
SklUU3R1YlJvdXRpbmVXaXRoRXhjZXB0aW9uSGFuZGxlcigKICAgICBjb25zdCBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8SklUU3R1YlJvdXRpbmVQdHJUYWc+JiBjb2RlLCBWTSYgdm0sICBjb25zdCBK
U0NlbGwqIG93bmVyLCBjb25zdCBWZWN0b3I8SlNDZWxsKj4mIGNlbGxzLCBCYWc8Q2FsbExpbmtJ
bmZvPiYmIGNhbGxMaW5rSW5mb3MsCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0dD
QXdhcmVKSVRTdHViUm91dGluZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvR0NBd2FyZUpJVFN0dWJSb3V0aW5lLmgJKHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvR0NBd2FyZUpJVFN0dWJSb3V0aW5lLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTYwLDEwICs2MCwxMiBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICByZXR1cm4gYWRv
cHRSZWYoKm5ldyBHQ0F3YXJlSklUU3R1YlJvdXRpbmUoY29kZSwgdm0pKTsKICAgICB9Ci0gICAg
Ci0gICAgdm9pZCBtYXJrUmVxdWlyZWRPYmplY3RzKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorCisv
LyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgorLy8gICAgdm9pZCBtYXJrUmVxdWlyZWRP
YmplY3RzKFZpc2l0b3ImIHZpc2l0b3IpCisgICAgdm9pZCBtYXJrUmVxdWlyZWRPYmplY3RzMShB
YnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogICAgIHsKLSAgICAgICAgbWFya1JlcXVpcmVk
T2JqZWN0c0ludGVybmFsKHZpc2l0b3IpOworICAgICAgICBtYXJrUmVxdWlyZWRPYmplY3RzSW50
ZXJuYWwxKHZpc2l0b3IpOwogICAgIH0KICAgICAKICAgICB2b2lkIGRlbGV0ZUZyb21HQygpOwpA
QCAtNzEsNyArNzMsOSBAQCBwdWJsaWM6CiBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBvYnNlcnZlWmVy
b1JlZkNvdW50KCkgb3ZlcnJpZGU7CiAgICAgCi0gICAgdmlydHVhbCB2b2lkIG1hcmtSZXF1aXJl
ZE9iamVjdHNJbnRlcm5hbChTbG90VmlzaXRvciYpOworLy8gICAgdmlydHVhbCB2b2lkIG1hcmtS
ZXF1aXJlZE9iamVjdHNJbnRlcm5hbChTbG90VmlzaXRvciYpOworLy8gICAgdmlydHVhbCB2b2lk
IG1hcmtSZXF1aXJlZE9iamVjdHNJbnRlcm5hbChWZXJpZmllclNsb3RWaXNpdG9yJik7CisgICAg
dmlydHVhbCB2b2lkIG1hcmtSZXF1aXJlZE9iamVjdHNJbnRlcm5hbDEoQWJzdHJhY3RTbG90Vmlz
aXRvciYpOwogCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBKSVRTdHViUm91dGluZVNldDsK
QEAgLTg5LDcgKzkzLDkgQEAgcHVibGljOgogICAgIH5NYXJraW5nR0NBd2FyZUpJVFN0dWJSb3V0
aW5lKCkgb3ZlcnJpZGU7CiAgICAgCiBwcm90ZWN0ZWQ6Ci0gICAgdm9pZCBtYXJrUmVxdWlyZWRP
YmplY3RzSW50ZXJuYWwoU2xvdFZpc2l0b3ImKSBvdmVycmlkZTsKKy8vICAgIHZvaWQgbWFya1Jl
cXVpcmVkT2JqZWN0c0ludGVybmFsKFNsb3RWaXNpdG9yJikgb3ZlcnJpZGU7CisvLyAgICB2b2lk
IG1hcmtSZXF1aXJlZE9iamVjdHNJbnRlcm5hbChWZXJpZmllclNsb3RWaXNpdG9yJikgb3ZlcnJp
ZGU7CisgICAgdm9pZCBtYXJrUmVxdWlyZWRPYmplY3RzSW50ZXJuYWwxKEFic3RyYWN0U2xvdFZp
c2l0b3ImKSBvdmVycmlkZTsKIAogcHJpdmF0ZToKICAgICBWZWN0b3I8V3JpdGVCYXJyaWVyPEpT
Q2VsbD4+IG1fY2VsbHM7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFdvcmts
aXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFdvcmts
aXN0LmNwcAkocmV2aXNpb24gMjcyMjk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRXb3JrbGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDggQEAKIAogbmFtZXNw
YWNlIEpTQyB7CiAKK2V4dGVybiBib29sIG1sYW1WZXJib3NlOworCiBjbGFzcyBKSVRXb3JrbGlz
dDo6UGxhbiA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxKSVRXb3JrbGlzdDo6UGxhbj4g
ewogcHVibGljOgogICAgIFBsYW4oQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEJ5dGVjb2RlSW5kZXgg
bG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCkKQEAgLTE2Myw3ICsxNjUsNyBAQCBKSVRXb3JrbGlz
dDo6fkpJVFdvcmtsaXN0KCkKICAgICBVTlJFQUNIQUJMRV9GT1JfUExBVEZPUk0oKTsKIH0KIAot
Ym9vbCBKSVRXb3JrbGlzdDo6Y29tcGxldGVBbGxGb3JWTShWTSYgdm0pCitib29sIEpJVFdvcmts
aXN0Ojpjb21wbGV0ZUFsbEZvclZNKFZNJiB2bSwgU2xvdFZpc2l0b3IqIHZpc2l0b3IpCiB7CiAg
ICAgYm9vbCByZXN1bHQgPSBmYWxzZTsKICAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7CkBA
IC0xNzcsNiArMTc5LDExIEBAIGJvb2wgSklUV29ya2xpc3Q6OmNvbXBsZXRlQWxsRm9yVk0oVk0m
IHYKICAgICAgICAgICAgICAgICAgICAgWyZdIChSZWZQdHI8UGxhbj4mIHBsYW4pIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICgmcGxhbi0+dm0oKSAhPSAmdm0pCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KG1sYW1WZXJib3NlKSBkYXRhTG9nTG4oIlxuICAgIG1sYW0gSklUV29ya2xpc3Q6OmNvbXBsZXRl
QWxsRm9yVk06IEZJTklTSGluZyBjYiAiLCBwbGFuLT5jb2RlQmxvY2soKSwgIlxuIik7CisgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6dmVyaWZ5R0MoKSAmJiB2
aXNpdG9yKSkgeworLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlzaXRvci0+YXBwZW5k
VW5iYXJyaWVyZWQocGxhbi0+Y29kZUJsb2NrKCkpOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHZtLmhlYXAud3JpdGVCYXJyaWVyKHBsYW4tPmNvZGVCbG9jaygpKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcGxhbi0+aXNGaW5p
c2hlZENvbXBpbGluZygpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlkRmluZFVu
ZmluaXNoZWRQbGFuID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFdvcmtsaXN0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRXb3JrbGlzdC5oCShyZXZp
c2lvbiAyNzIyOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFdvcmtsaXN0LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTM5LDYgKzM5LDcgQEAKIG5hbWVzcGFjZSBKU0MgewogCiBjbGFz
cyBDb2RlQmxvY2s7CitjbGFzcyBTbG90VmlzaXRvcjsgLy8gbWxhbQogY2xhc3MgVk07CiAKIGNs
YXNzIEpJVFdvcmtsaXN0IHsKQEAgLTUxLDcgKzUyLDcgQEAgY2xhc3MgSklUV29ya2xpc3Qgewog
cHVibGljOgogICAgIH5KSVRXb3JrbGlzdCgpOwogICAgIAotICAgIGJvb2wgY29tcGxldGVBbGxG
b3JWTShWTSYpOyAvLyBSZXR1cm4gdHJ1ZSBpZiBhbnkgSklUIHdvcmsgaGFwcGVuZWQuCisgICAg
Ym9vbCBjb21wbGV0ZUFsbEZvclZNKFZNJiwgU2xvdFZpc2l0b3IqID0gbnVsbHB0cik7IC8vIFJl
dHVybiB0cnVlIGlmIGFueSBKSVQgd29yayBoYXBwZW5lZC4KICAgICB2b2lkIHBvbGwoVk0mKTsK
ICAgICAKICAgICB2b2lkIGNvbXBpbGVMYXRlcihDb2RlQmxvY2sqLCBCeXRlY29kZUluZGV4IGxv
b3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXggPSBCeXRlY29kZUluZGV4KDApKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUG9seW1vcnBoaWNDYWxsU3R1YlJv
dXRpbmUuY3BwCShyZXZpc2lvbiAyNzIyOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L1BvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM1LDEy
ICsxMzUsMjAgQEAgYm9vbCBQb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZTo6dmlzaXRXZQogICAg
IHJldHVybiBpc1N0aWxsTGl2ZTsKIH0KIAotdm9pZCBQb2x5bW9ycGhpY0NhbGxTdHViUm91dGlu
ZTo6bWFya1JlcXVpcmVkT2JqZWN0c0ludGVybmFsKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy92
b2lkIFBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lOjptYXJrUmVxdWlyZWRPYmplY3RzSW50ZXJu
YWwoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIFBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5l
OjptYXJrUmVxdWlyZWRPYmplY3RzSW50ZXJuYWwxKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0
b3IpCiB7CiAgICAgZm9yIChhdXRvJiB2YXJpYW50IDogbV92YXJpYW50cykKICAgICAgICAgdmlz
aXRvci5hcHBlbmQodmFyaWFudCk7CiB9CiAKKy8vLy8gbWxhbSBGSVhNRSBkZWR1cGU/Pz8KKy8v
dm9pZCBQb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZTo6bWFya1JlcXVpcmVkT2JqZWN0c0ludGVy
bmFsKFZlcmlmaWVyU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3sKKy8vICAgIGZvciAoYXV0byYg
dmFyaWFudCA6IG1fdmFyaWFudHMpCisvLyAgICAgICAgdmlzaXRvci5hcHBlbmQodmFyaWFudCk7
CisvL30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBFTkFCTEUoSklUKQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Qb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUG9seW1vcnBoaWNDYWxs
U3R1YlJvdXRpbmUuaAkocmV2aXNpb24gMjcyMjk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9Qb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDUs
NyArMTA1LDkgQEAgcHVibGljOgogICAgIGJvb2wgdmlzaXRXZWFrKFZNJikgZmluYWw7CiAKIHBy
aXZhdGU6Ci0gICAgdm9pZCBtYXJrUmVxdWlyZWRPYmplY3RzSW50ZXJuYWwoU2xvdFZpc2l0b3Im
KSBmaW5hbDsKKy8vICAgIHZvaWQgbWFya1JlcXVpcmVkT2JqZWN0c0ludGVybmFsKFNsb3RWaXNp
dG9yJikgZmluYWw7CisvLyAgICB2b2lkIG1hcmtSZXF1aXJlZE9iamVjdHNJbnRlcm5hbChWZXJp
ZmllclNsb3RWaXNpdG9yJikgZmluYWw7CisgICAgdm9pZCBtYXJrUmVxdWlyZWRPYmplY3RzSW50
ZXJuYWwxKEFic3RyYWN0U2xvdFZpc2l0b3ImKSBmaW5hbDsKIAogICAgIFZlY3RvcjxXcml0ZUJh
cnJpZXI8SlNDZWxsPiwgMj4gbV92YXJpYW50czsKICAgICBVbmlxdWVBcnJheTx1aW50MzJfdD4g
bV9mYXN0Q291bnRzOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQWJzdHJh
Y3RNb2R1bGVSZWNvcmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0Fic3RyYWN0TW9kdWxlUmVjb3JkLmNwcAkocmV2aXNpb24gMjcyMjk3KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQWJzdHJhY3RNb2R1bGVSZWNvcmQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC02MCw3ICs2MCw4IEBAIHZvaWQgQWJzdHJhY3RNb2R1bGVSZWNvcmQ6OmZp
bmlzaENyZWF0aW8KICAgICBwdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0s
ICJkZXBlbmRlbmNpZXNNYXAiX3MpLCBtX2RlcGVuZGVuY2llc01hcC5nZXQoKSk7CiB9CiAKLXZv
aWQgQWJzdHJhY3RNb2R1bGVSZWNvcmQ6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90
VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEFic3Ry
YWN0TW9kdWxlUmVjb3JkOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3Im
IHZpc2l0b3IpCiB7CiAgICAgQWJzdHJhY3RNb2R1bGVSZWNvcmQqIHRoaXNPYmplY3QgPSBqc0Nh
c3Q8QWJzdHJhY3RNb2R1bGVSZWNvcmQqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lO
SEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC03MCw2ICs3MSw4IEBAIHZvaWQgQWJzdHJh
Y3RNb2R1bGVSZWNvcmQ6OnZpc2l0Q2hpbGRyZW4KICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2Jq
ZWN0LT5tX2RlcGVuZGVuY2llc01hcCk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihBYnN0
cmFjdE1vZHVsZVJlY29yZCk7CisKIHZvaWQgQWJzdHJhY3RNb2R1bGVSZWNvcmQ6OmFwcGVuZFJl
cXVlc3RlZE1vZHVsZShjb25zdCBJZGVudGlmaWVyJiBtb2R1bGVOYW1lKQogewogICAgIG1fcmVx
dWVzdGVkTW9kdWxlcy5hZGQobW9kdWxlTmFtZS5pbXBsKCkpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQWJzdHJhY3RNb2R1bGVSZWNvcmQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BYnN0cmFjdE1vZHVsZVJlY29yZC5oCShyZXZp
c2lvbiAyNzIyOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BYnN0cmFjdE1v
ZHVsZVJlY29yZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzYsNyArMTM2LDcgQEAgcHJvdGVjdGVk
OgogICAgIEFic3RyYWN0TW9kdWxlUmVjb3JkKFZNJiwgU3RydWN0dXJlKiwgY29uc3QgSWRlbnRp
ZmllciYpOwogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxPYmplY3QqLCBWTSYpOwog
Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwor
ICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICB2b2lkIHNldE1vZHVsZUVudmlyb25t
ZW50KEpTR2xvYmFsT2JqZWN0KiwgSlNNb2R1bGVFbnZpcm9ubWVudCopOwogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcmdMaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcmdMaXN0LmNwcAkocmV2aXNpb24gMjcyMjk3KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJnTGlzdC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTUxLDcgKzUxLDcgQEAgdm9pZCBBcmdMaXN0OjpnZXRTbGljZShpbnQgc3RhcnRJbmRl
eCwgQQogICAgIHJlc3VsdC5tX2FyZ0NvdW50ID0gIG1fYXJnQ291bnQgLSBzdGFydEluZGV4Owog
fQogCi12b2lkIE1hcmtlZEFyZ3VtZW50QnVmZmVyOjptYXJrTGlzdHMoU2xvdFZpc2l0b3ImIHZp
c2l0b3IsIExpc3RTZXQmIG1hcmtTZXQpCit2b2lkIE1hcmtlZEFyZ3VtZW50QnVmZmVyOjptYXJr
TGlzdHMoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvciwgTGlzdFNldCYgbWFya1NldCkKIHsK
ICAgICBMaXN0U2V0OjppdGVyYXRvciBlbmQgPSBtYXJrU2V0LmVuZCgpOwogICAgIGZvciAoTGlz
dFNldDo6aXRlcmF0b3IgaXQgPSBtYXJrU2V0LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJnTGlzdC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FyZ0xpc3QuaAkocmV2aXNpb24gMjcy
Mjk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJnTGlzdC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xMTgsNyArMTE4LDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gcmVzdWx0
OwogICAgIH0KICAgICAgICAgCi0gICAgc3RhdGljIHZvaWQgbWFya0xpc3RzKFNsb3RWaXNpdG9y
JiwgTGlzdFNldCYpOworICAgIHN0YXRpYyB2b2lkIG1hcmtMaXN0cyhBYnN0cmFjdFNsb3RWaXNp
dG9yJiwgTGlzdFNldCYpOwogCiAgICAgdm9pZCBlbnN1cmVDYXBhY2l0eShzaXplX3QgcmVxdWVz
dGVkQ2FwYWNpdHkpCiAgICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Q2FjaGVhYmxlSWRlbnRpZmllci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0NhY2hlYWJsZUlkZW50aWZpZXIuaAkocmV2aXNpb24gMjcyMjk3KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVhYmxlSWRlbnRpZmllci5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zOSwxMCArMzksMTEgQEAgdXNpbmcgV1RGOjpVbmlxdWVkU3RyaW5nSW1wbDsK
IAogbmFtZXNwYWNlIEpTQyB7CiAKK2NsYXNzIEFic3RyYWN0U2xvdFZpc2l0b3I7CiBjbGFzcyBD
b2RlQmxvY2s7CiBjbGFzcyBJZGVudGlmaWVyOwogY2xhc3MgSlNDZWxsOwotY2xhc3MgU2xvdFZp
c2l0b3I7CisvL2NsYXNzIFNsb3RWaXNpdG9yOwogCiBjbGFzcyBDYWNoZWFibGVJZGVudGlmaWVy
IHsKIHB1YmxpYzoKQEAgLTg3LDcgKzg4LDggQEAgcHVibGljOgogCiAgICAgdWludHB0cl90IHJh
d0JpdHMoKSBjb25zdCB7IHJldHVybiBtX2JpdHM7IH0KIAotICAgIGlubGluZSB2b2lkIHZpc2l0
QWdncmVnYXRlKFNsb3RWaXNpdG9yJikgY29uc3Q7CisvLyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPiBpbmxpbmUgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShWaXNpdG9yJikgY29uc3Q7CisgICAg
aW5saW5lIHZvaWQgdmlzaXRBZ2dyZWdhdGUxKEFic3RyYWN0U2xvdFZpc2l0b3ImKSBjb25zdDsK
IAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0Owog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWFibGVJZGVudGlmaWVy
SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Nh
Y2hlYWJsZUlkZW50aWZpZXJJbmxpbmVzLmgJKHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlYWJsZUlkZW50aWZpZXJJbmxpbmVzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEzNywxMiArMTM3LDE2IEBAIGlubGluZSB2b2lkIENhY2hlYWJsZUlkZW50
aWZpZXI6OnNldFVpZEIKICAgICBtX2JpdHMgPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90Pih1aWQp
IHwgc191aWRUYWc7CiB9CiAKLWlubGluZSB2b2lkIENhY2hlYWJsZUlkZW50aWZpZXI6OnZpc2l0
QWdncmVnYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBjb25zdAorLy90ZW1wbGF0ZTx0eXBlbmFt
ZSBWaXNpdG9yPgorLy9pbmxpbmUgdm9pZCBDYWNoZWFibGVJZGVudGlmaWVyOjp2aXNpdEFnZ3Jl
Z2F0ZShWaXNpdG9yJiB2aXNpdG9yKSBjb25zdAoraW5saW5lIHZvaWQgQ2FjaGVhYmxlSWRlbnRp
Zmllcjo6dmlzaXRBZ2dyZWdhdGUxKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0
CiB7CiAgICAgaWYgKG1fYml0cyAmJiBpc0NlbGwoKSkKICAgICAgICAgdmlzaXRvci5hcHBlbmRV
bmJhcnJpZXJlZChjZWxsKCkpOwogfQogCisvL3RlbXBsYXRlIHZvaWQgQ2FjaGVhYmxlSWRlbnRp
Zmllcjo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImKSBjb25zdDsKKy8vdGVtcGxhdGUgdm9p
ZCBDYWNoZWFibGVJZGVudGlmaWVyOjp2aXNpdEFnZ3JlZ2F0ZShWZXJpZmllclNsb3RWaXNpdG9y
JikgY29uc3Q7CiAKIGlubGluZSBib29sIENhY2hlYWJsZUlkZW50aWZpZXI6Om9wZXJhdG9yPT0o
Y29uc3QgQ2FjaGVhYmxlSWRlbnRpZmllciYgb3RoZXIpIGNvbnN0CiB7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9DbGFzc0luZm8uaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9DbGFzc0luZm8uaAkocmV2aXNpb24gMjcyMjk3KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xhc3NJbmZvLmgJKHdvcmtpbmcgY29weSkK
QEAgLTQ0LDkgKzQ0LDYgQEAgc3RydWN0IE1ldGhvZFRhYmxlIHsKICAgICB1c2luZyBEZXN0cm95
RnVuY3Rpb25QdHIgPSB2b2lkICgqKShKU0NlbGwqKTsKICAgICBEZXN0cm95RnVuY3Rpb25QdHIg
TUVUSE9EX1RBQkxFX0VOVFJZKGRlc3Ryb3kpOwogCi0gICAgdXNpbmcgVmlzaXRDaGlsZHJlbkZ1
bmN0aW9uUHRyID0gdm9pZCAoKikoSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKLSAgICBWaXNpdENo
aWxkcmVuRnVuY3Rpb25QdHIgTUVUSE9EX1RBQkxFX0VOVFJZKHZpc2l0Q2hpbGRyZW4pOwotCiAg
ICAgdXNpbmcgR2V0Q2FsbERhdGFGdW5jdGlvblB0ciA9IENhbGxEYXRhICgqKShKU0NlbGwqKTsK
ICAgICBHZXRDYWxsRGF0YUZ1bmN0aW9uUHRyIE1FVEhPRF9UQUJMRV9FTlRSWShnZXRDYWxsRGF0
YSk7CiAKQEAgLTEyMCw3ICsxMTcsMTggQEAgc3RydWN0IE1ldGhvZFRhYmxlIHsKICAgICB1c2lu
ZyBFc3RpbWF0ZWRTaXplRnVuY3Rpb25QdHIgPSBzaXplX3QgKCopKEpTQ2VsbCosIFZNJik7CiAg
ICAgRXN0aW1hdGVkU2l6ZUZ1bmN0aW9uUHRyIE1FVEhPRF9UQUJMRV9FTlRSWShlc3RpbWF0ZWRT
aXplKTsKIAotICAgIHVzaW5nIFZpc2l0T3V0cHV0Q29uc3RyYWludHNQdHIgPSB2b2lkICgqKShK
U0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIHVzaW5nIFZpc2l0Q2hpbGRyZW5GdW5jdGlvblB0
ciA9IHZvaWQgKCopKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgVmlzaXRDaGlsZHJlbkZ1
bmN0aW9uUHRyIE1FVEhPRF9UQUJMRV9FTlRSWSh2aXNpdENoaWxkcmVuV2l0aFNsb3RWaXNpdG9y
KTsKKworLy8gICAgdXNpbmcgVmlzaXRDaGlsZHJlbldpdGhWZXJpZmllclNsb3RWaXNpdG9yUHRy
ID0gdm9pZCAoKikoSlNDZWxsKiwgVmVyaWZpZXJTbG90VmlzaXRvciYpOworICAgIHVzaW5nIFZp
c2l0Q2hpbGRyZW5XaXRoQWJzdHJhY3RTbG90VmlzaXRvclB0ciA9IHZvaWQgKCopKEpTQ2VsbCos
IEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKKyAgICBWaXNpdENoaWxkcmVuV2l0aEFic3RyYWN0U2xv
dFZpc2l0b3JQdHIgTUVUSE9EX1RBQkxFX0VOVFJZKHZpc2l0Q2hpbGRyZW5XaXRoQWJzdHJhY3RT
bG90VmlzaXRvcik7CisKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgdmlzaXRDaGlsZHJlbihKU0Nl
bGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBjb25zdCB7IHZpc2l0Q2hpbGRyZW5XaXRo
U2xvdFZpc2l0b3IoY2VsbCwgdmlzaXRvcik7IH0KKy8vICAgIEFMV0FZU19JTkxJTkUgdm9pZCB2
aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgVmVyaWZpZXJTbG90VmlzaXRvciYgdmlzaXRvcikg
Y29uc3QgeyB2aXNpdENoaWxkcmVuV2l0aFZlcmlmaWVyU2xvdFZpc2l0b3IoY2VsbCwgdmlzaXRv
cik7IH0KKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGws
IEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0IHsgdmlzaXRDaGlsZHJlbldpdGhB
YnN0cmFjdFNsb3RWaXNpdG9yKGNlbGwsIHZpc2l0b3IpOyB9CisKKyAgICB1c2luZyBWaXNpdE91
dHB1dENvbnN0cmFpbnRzUHRyID0gdm9pZCAoKikoSlNDZWxsKiwgQWJzdHJhY3RTbG90VmlzaXRv
ciYpOwogICAgIFZpc2l0T3V0cHV0Q29uc3RyYWludHNQdHIgTUVUSE9EX1RBQkxFX0VOVFJZKHZp
c2l0T3V0cHV0Q29uc3RyYWludHMpOwogfTsKIApAQCAtMTQ3LDcgKzE1NSw2IEBAIHN0cnVjdCBN
ZXRob2RUYWJsZSB7CiAgICAgSlNDYXN0aW5nSGVscGVyczo6SW5oZXJpdHNUcmFpdHM8Q2xhc3NO
YW1lPjo6dHlwZVJhbmdlLCBcCiAgICAgeyBcCiAgICAgICAgICZDbGFzc05hbWU6OmRlc3Ryb3ks
IFwKLSAgICAgICAgJkNsYXNzTmFtZTo6dmlzaXRDaGlsZHJlbiwgXAogICAgICAgICAmQ2xhc3NO
YW1lOjpnZXRDYWxsRGF0YSwgXAogICAgICAgICAmQ2xhc3NOYW1lOjpnZXRDb25zdHJ1Y3REYXRh
LCBcCiAgICAgICAgICZDbGFzc05hbWU6OnB1dCwgXApAQCAtMTczLDYgKzE4MCw4IEBAIHN0cnVj
dCBNZXRob2RUYWJsZSB7CiAgICAgICAgICZDbGFzc05hbWU6OmR1bXBUb1N0cmVhbSwgXAogICAg
ICAgICAmQ2xhc3NOYW1lOjphbmFseXplSGVhcCwgXAogICAgICAgICAmQ2xhc3NOYW1lOjplc3Rp
bWF0ZWRTaXplLCBcCisgICAgICAgICZDbGFzc05hbWU6OnZpc2l0Q2hpbGRyZW4sIFwKKyAgICAg
ICAgJkNsYXNzTmFtZTo6dmlzaXRDaGlsZHJlbiwgXAogICAgICAgICAmQ2xhc3NOYW1lOjp2aXNp
dE91dHB1dENvbnN0cmFpbnRzLCBcCiAgICAgfSwgXAogICAgIENsYXNzTmFtZTo6VHlwZWRBcnJh
eVN0b3JhZ2VUeXBlLCBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DbG9u
ZWRBcmd1bWVudHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0Nsb25lZEFyZ3VtZW50cy5jcHAJKHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0Nsb25lZEFyZ3VtZW50cy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI2Nyw3ICsyNjcsOCBAQCB2b2lkIENsb25lZEFyZ3VtZW50czo6bWF0ZXJpYWxpemVTcGVjaWFs
CiAgICAgICAgIG1hdGVyaWFsaXplU3BlY2lhbHMoZ2xvYmFsT2JqZWN0KTsKIH0KIAotdm9pZCBD
bG9uZWRBcmd1bWVudHM6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYg
dmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIENsb25lZEFyZ3VtZW50
czo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewog
ICAgIENsb25lZEFyZ3VtZW50cyogdGhpc09iamVjdCA9IGpzQ2FzdDxDbG9uZWRBcmd1bWVudHMq
PihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8o
KSk7CkBAIC0yNzUsNSArMjc2LDcgQEAgdm9pZCBDbG9uZWRBcmd1bWVudHM6OnZpc2l0Q2hpbGRy
ZW4oSlNDZQogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fY2FsbGVlKTsKIH0KIAor
REVGSU5FX1ZJU0lUX0NISUxEUkVOKENsb25lZEFyZ3VtZW50cyk7CisKIH0gLy8gbmFtZXNwYWNl
IEpTQwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DbG9uZWRBcmd1bWVu
dHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DbG9uZWRB
cmd1bWVudHMuaAkocmV2aXNpb24gMjcyMjk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQ2xvbmVkQXJndW1lbnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTYyLDcgKzYyLDcgQEAg
cHVibGljOgogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xv
YmFsT2JqZWN0KiwgSlNWYWx1ZSBwcm90b3R5cGUpOwogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNy
ZWF0ZVNsb3dQdXRTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUgcHJvdG90
eXBlKTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0
b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgREVDTEFSRV9JTkZPOwog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EaXJlY3RBcmd1bWVudHMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3Vt
ZW50cy5jcHAJKHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0RpcmVjdEFyZ3VtZW50cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkwLDcgKzkwLDggQEAg
c2l6ZV90IERpcmVjdEFyZ3VtZW50czo6ZXN0aW1hdGVkU2l6ZShKUwogICAgIHJldHVybiBCYXNl
Ojplc3RpbWF0ZWRTaXplKGNlbGwsIHZtKSArIG1hcHBlZEFyZ3VtZW50c1NpemUgKyBtb2RpZmll
ZEFyZ3VtZW50c1NpemU7CiB9CiAKLXZvaWQgRGlyZWN0QXJndW1lbnRzOjp2aXNpdENoaWxkcmVu
KEpTQ2VsbCogdGhpc0NlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5h
bWUgVmlzaXRvcj4KK3ZvaWQgRGlyZWN0QXJndW1lbnRzOjp2aXNpdENoaWxkcmVuSW1wbChKU0Nl
bGwqIHRoaXNDZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIERpcmVjdEFyZ3VtZW50cyog
dGhpc09iamVjdCA9IHN0YXRpY19jYXN0PERpcmVjdEFyZ3VtZW50cyo+KHRoaXNDZWxsKTsKICAg
ICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC0xMDQs
NiArMTA1LDggQEAgdm9pZCBEaXJlY3RBcmd1bWVudHM6OnZpc2l0Q2hpbGRyZW4oSlNDZQogICAg
IEdlbmVyaWNBcmd1bWVudHM8RGlyZWN0QXJndW1lbnRzPjo6dmlzaXRDaGlsZHJlbih0aGlzQ2Vs
bCwgdmlzaXRvcik7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihEaXJlY3RBcmd1bWVudHMp
OworCiBTdHJ1Y3R1cmUqIERpcmVjdEFyZ3VtZW50czo6Y3JlYXRlU3RydWN0dXJlKFZNJiB2bSwg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCiB7CiAgICAg
cmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlw
ZUluZm8oRGlyZWN0QXJndW1lbnRzVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGlyZWN0QXJndW1lbnRzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGlyZWN0QXJndW1lbnRzLmgJ
KHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVj
dEFyZ3VtZW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC02NSw3ICs2NSw3IEBAIHB1YmxpYzoKICAg
ICBzdGF0aWMgRGlyZWN0QXJndW1lbnRzKiBjcmVhdGVCeUNvcHlpbmcoSlNHbG9iYWxPYmplY3Qq
LCBDYWxsRnJhbWUqKTsKIAogICAgIHN0YXRpYyBzaXplX3QgZXN0aW1hdGVkU2l6ZShKU0NlbGwq
LCBWTSYpOwotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0
b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogICAgIAogICAgIHVpbnQzMl90IGlu
dGVybmFsTGVuZ3RoKCkgY29uc3QKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9FdmFsRXhlY3V0YWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvRXZhbEV4ZWN1dGFibGUuY3BwCShyZXZpc2lvbiAyNzIyOTcpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FdmFsRXhlY3V0YWJsZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQ5LDcgKzQ5LDggQEAgYXV0byBFdmFsRXhlY3V0YWJsZTo6ZW5zdXJlVGVtcGxh
dGVPYmplYwogICAgIHJldHVybiBlbnN1cmVUZW1wbGF0ZU9iamVjdE1hcEltcGwobV90ZW1wbGF0
ZU9iamVjdE1hcCk7CiB9CiAKLXZvaWQgRXZhbEV4ZWN1dGFibGU6OnZpc2l0Q2hpbGRyZW4oSlND
ZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0
b3I+Cit2b2lkIEV2YWxFeGVjdXRhYmxlOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGws
IFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgRXZhbEV4ZWN1dGFibGUqIHRoaXNPYmplY3QgPSBq
c0Nhc3Q8RXZhbEV4ZWN1dGFibGUqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVS
SVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC02Myw0ICs2NCw2IEBAIHZvaWQgRXZhbEV4ZWN1
dGFibGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWwKICAgICB9CiB9CiAKK0RFRklORV9WSVNJVF9DSElM
RFJFTihFdmFsRXhlY3V0YWJsZSk7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXZhbEV4ZWN1dGFibGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FdmFsRXhlY3V0YWJsZS5oCShyZXZpc2lvbiAy
NzIyOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FdmFsRXhlY3V0YWJsZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC03OCw3ICs3OCw3IEBAIHByb3RlY3RlZDoKICAgICB1c2luZyBC
YXNlOjpmaW5pc2hDcmVhdGlvbjsKICAgICBFdmFsRXhlY3V0YWJsZShKU0dsb2JhbE9iamVjdCos
IGNvbnN0IFNvdXJjZUNvZGUmLCBib29sIGluU3RyaWN0Q29udGV4dCwgRGVyaXZlZENvbnRleHRU
eXBlLCBib29sIGlzQXJyb3dGdW5jdGlvbkNvbnRleHQsIGJvb2wgaXNJbnNpZGVPcmRpbmFyeUZ1
bmN0aW9uLCBFdmFsQ29udGV4dFR5cGUsIE5lZWRzQ2xhc3NGaWVsZEluaXRpYWxpemVyKTsKIAot
ICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAg
ICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgdW5zaWduZWQgbV9uZWVkc0NsYXNzRmll
bGRJbml0aWFsaXplciA6IDE7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0V4Y2VwdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvRXhjZXB0aW9uLmNwcAkocmV2aXNpb24gMjcyMjk3KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvRXhjZXB0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTMsNyArNTMsOCBA
QCBTdHJ1Y3R1cmUqIEV4Y2VwdGlvbjo6Y3JlYXRlU3RydWN0dXJlKFZNCiAgICAgcmV0dXJuIFN0
cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oQ2Vs
bFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKIH0KIAotdm9pZCBFeGNlcHRpb246OnZp
c2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRl
PHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEV4Y2VwdGlvbjo6dmlzaXRDaGlsZHJlbkltcGwoSlND
ZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEV4Y2VwdGlvbiogdGhpc09iamVj
dCA9IGpzQ2FzdDxFeGNlcHRpb24qPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVS
SVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC02NCw2ICs2NSw4IEBAIHZvaWQgRXhjZXB0aW9u
Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2UKICAgICAgICAgZnJhbWUudmlzaXRDaGlsZHJlbih2
aXNpdG9yKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEV4Y2VwdGlvbik7CisKIEV4Y2Vw
dGlvbjo6RXhjZXB0aW9uKFZNJiB2bSkKICAgICA6IEJhc2Uodm0sIHZtLmV4Y2VwdGlvblN0cnVj
dHVyZS5nZXQoKSkKIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2Vw
dGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2Vw
dGlvbi5oCShyZXZpc2lvbiAyNzIyOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9FeGNlcHRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtNTEsNyArNTEsNyBAQCBwdWJsaWM6CiAK
ICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVj
dCosIEpTVmFsdWUgcHJvdG90eXBlKTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4o
SlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAg
ICAgREVDTEFSRV9FWFBPUlRfSU5GTzsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvRnVuY3Rpb25FeGVjdXRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9GdW5jdGlvbkV4ZWN1dGFibGUuY3BwCShyZXZpc2lvbiAyNzIyOTcp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvbkV4ZWN1dGFibGUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC02Nyw3ICs2Nyw4IEBAIEZ1bmN0aW9uQ29kZUJsb2NrKiBGdW5j
dGlvbkV4ZWN1dGFibGU6OmIKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RnVuY3Rpb25Db2RlQmxv
Y2sqPihlZGdlLT5jb2RlQmxvY2soKS0+YmFzZWxpbmVBbHRlcm5hdGl2ZSgpKTsKIH0KIAotdm9p
ZCBGdW5jdGlvbkV4ZWN1dGFibGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90Vmlz
aXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEZ1bmN0aW9u
RXhlY3V0YWJsZTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNp
dG9yKQogewogICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogdGhpc09iamVjdCA9IGpzQ2FzdDxGdW5j
dGlvbkV4ZWN1dGFibGUqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRo
aXNPYmplY3QsIGluZm8oKSk7CkBAIC04Niw2ICs4Nyw4IEBAIHZvaWQgRnVuY3Rpb25FeGVjdXRh
YmxlOjp2aXNpdENoaWxkcmVuKEoKICAgICB9CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihG
dW5jdGlvbkV4ZWN1dGFibGUpOworCiBGdW5jdGlvbkV4ZWN1dGFibGUqIEZ1bmN0aW9uRXhlY3V0
YWJsZTo6ZnJvbUdsb2JhbENvZGUoCiAgICAgY29uc3QgSWRlbnRpZmllciYgbmFtZSwgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCAKICAgICBK
U09iamVjdComIGV4Y2VwdGlvbiwgaW50IG92ZXJyaWRlTGluZU51bWJlciwgT3B0aW9uYWw8aW50
PiBmdW5jdGlvbkNvbnN0cnVjdG9yUGFyYW1ldGVyc0VuZFBvc2l0aW9uKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25FeGVjdXRhYmxlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25FeGVjdXRhYmxlLmgJKHJl
dmlzaW9uIDI3MjI5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9u
RXhlY3V0YWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNjYsNyArMTY2LDcgQEAgcHVibGljOgog
ICAgIEpTUGFyc2VyU2NyaXB0TW9kZSBzY3JpcHRNb2RlKCkgY29uc3QgeyByZXR1cm4gbV91bmxp
bmtlZEV4ZWN1dGFibGUtPnNjcmlwdE1vZGUoKTsgfQogICAgIFNvdXJjZUNvZGUgY2xhc3NTb3Vy
Y2UoKSBjb25zdCB7IHJldHVybiBtX3VubGlua2VkRXhlY3V0YWJsZS0+Y2xhc3NTb3VyY2UoKTsg
fQogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYp
OworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAgICAgc3RhdGljIFN0cnVjdHVyZSogY3Jl
YXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1
ZSBwcm90bykKICAgICB7CiAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xv
YmFsT2JqZWN0LCBwcm90bywgVHlwZUluZm8oRnVuY3Rpb25FeGVjdXRhYmxlVHlwZSwgU3RydWN0
dXJlRmxhZ3MpLCBpbmZvKCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
RnVuY3Rpb25SYXJlRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvRnVuY3Rpb25SYXJlRGF0YS5jcHAJKHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uUmFyZURhdGEuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC01MSw3ICs1MSw4IEBAIFN0cnVjdHVyZSogRnVuY3Rpb25SYXJlRGF0YTo6Y3JlYXRl
U3RydWMKICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJv
dG90eXBlLCBUeXBlSW5mbyhDZWxsVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwogfQog
Ci12b2lkIEZ1bmN0aW9uUmFyZURhdGE6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90
VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEZ1bmN0
aW9uUmFyZURhdGE6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlz
aXRvcikKIHsKICAgICBGdW5jdGlvblJhcmVEYXRhKiByYXJlRGF0YSA9IGpzQ2FzdDxGdW5jdGlv
blJhcmVEYXRhKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjZWxsLCBp
bmZvKCkpOwpAQCAtNjMsNiArNjQsOCBAQCB2b2lkIEZ1bmN0aW9uUmFyZURhdGE6OnZpc2l0Q2hp
bGRyZW4oSlNDCiAgICAgdmlzaXRvci5hcHBlbmQocmFyZURhdGEtPm1fZXhlY3V0YWJsZSk7CiB9
CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihGdW5jdGlvblJhcmVEYXRhKTsKKwogRnVuY3Rpb25S
YXJlRGF0YTo6RnVuY3Rpb25SYXJlRGF0YShWTSYgdm0sIEV4ZWN1dGFibGVCYXNlKiBleGVjdXRh
YmxlKQogICAgIDogQmFzZSh2bSwgdm0uZnVuY3Rpb25SYXJlRGF0YVN0cnVjdHVyZS5nZXQoKSkK
ICAgICAsIG1fb2JqZWN0QWxsb2NhdGlvblByb2ZpbGUoKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25SYXJlRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uUmFyZURhdGEuaAkocmV2aXNpb24gMjcyMjk3
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25SYXJlRGF0YS5oCSh3
b3JraW5nIGNvcHkpCkBAIC02NSw3ICs2NSw3IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBTdHJ1
Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBwcm90
b3R5cGUpOwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90Vmlz
aXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBERUNMQVJFX0lORk87
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNBcmd1bWVudHMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljQXJn
dW1lbnRzLmgJKHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0dlbmVyaWNBcmd1bWVudHMuaAkod29ya2luZyBjb3B5KQpAQCAtNDQsNyArNDQsNyBAQCBw
cm90ZWN0ZWQ6CiAgICAgewogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4o
SlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1RFTVBMQVRFX1ZJU0lUX0NISUxE
UkVOOwogICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU09iamVjdCosIEpTR2xv
YmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKICAgICBzdGF0aWMgYm9v
bCBnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCB1
bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwogICAgIHN0YXRpYyB2b2lkIGdl
dE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFt
ZUFycmF5JiwgRG9udEVudW1Qcm9wZXJ0aWVzTW9kZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9HZW5lcmljQXJndW1lbnRzSW5saW5lcy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNBcmd1bWVudHNJbmxpbmVzLmgJKHJl
dmlzaW9uIDI3MjI5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNB
cmd1bWVudHNJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDggQEAKIG5hbWVz
cGFjZSBKU0MgewogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlPgotdm9pZCBHZW5lcmljQXJndW1l
bnRzPFR5cGU+Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogdGhpc0NlbGwsIFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgR2VuZXJpY0FyZ3VtZW50
czxUeXBlPjo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiB0aGlzQ2VsbCwgVmlzaXRvciYgdmlz
aXRvcikKIHsKICAgICBUeXBlKiB0aGlzT2JqZWN0ID0gc3RhdGljX2Nhc3Q8VHlwZSo+KHRoaXND
ZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7
CkBAIC00MSw2ICs0Miw4IEBAIHZvaWQgR2VuZXJpY0FyZ3VtZW50czxUeXBlPjo6dmlzaXRDaGls
ZHIKICAgICAgICAgdmlzaXRvci5tYXJrQXV4aWxpYXJ5KHRoaXNPYmplY3QtPm1fbW9kaWZpZWRB
cmd1bWVudHNEZXNjcmlwdG9yLmdldFVuc2FmZSgpKTsKIH0KIAorREVGSU5FX1RFTVBMQVRFX1ZJ
U0lUX0NISUxEUkVOKHRlbXBsYXRlPHR5cGVuYW1lIFR5cGU+LCBHZW5lcmljQXJndW1lbnRzPFR5
cGU+KTsKKwogdGVtcGxhdGU8dHlwZW5hbWUgVHlwZT4KIGJvb2wgR2VuZXJpY0FyZ3VtZW50czxU
eXBlPjo6Z2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiBvYmplY3QsIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZSBpZGVudCwgUHJvcGVydHlTbG90JiBzbG90KQog
ewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2V0dGVyU2V0dGVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZXR0ZXJTZXR0ZXIu
Y3BwCShyZXZpc2lvbiAyNzIyOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9H
ZXR0ZXJTZXR0ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3ICszMyw4IEBAIFNUQVRJQ19B
U1NFUlRfSVNfVFJJVklBTExZX0RFU1RSVUNUSUJMRSgKIAogY29uc3QgQ2xhc3NJbmZvIEdldHRl
clNldHRlcjo6c19pbmZvID0geyAiR2V0dGVyU2V0dGVyIiwgbnVsbHB0ciwgbnVsbHB0ciwgbnVs
bHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShHZXR0ZXJTZXR0ZXIpIH07CiAKLXZvaWQgR2V0dGVy
U2V0dGVyOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3Ip
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBHZXR0ZXJTZXR0ZXI6OnZpc2l0Q2hp
bGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBHZXR0ZXJT
ZXR0ZXIqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8R2V0dGVyU2V0dGVyKj4oY2VsbCk7CiAgICAgQVNT
RVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNDMsNiArNDQs
OCBAQCB2b2lkIEdldHRlclNldHRlcjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqCiAgICAgdmlzaXRv
ci5hcHBlbmQodGhpc09iamVjdC0+bV9zZXR0ZXIpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERS
RU4oR2V0dGVyU2V0dGVyKTsKKwogSlNWYWx1ZSBjYWxsR2V0dGVyKEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIEpTVmFsdWUgYmFzZSwgSlNWYWx1ZSBnZXR0ZXJTZXR0ZXIpCiB7CiAgICAg
Vk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvR2V0dGVyU2V0dGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvR2V0dGVyU2V0dGVyLmgJKHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0dldHRlclNldHRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC04
Miw3ICs4Miw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGNyZWF0ZSh2bSwgZ2xvYmFsT2Jq
ZWN0LCBnZXR0ZXJPYmplY3QsIHNldHRlck9iamVjdCk7CiAgICAgfQogCi0gICAgc3RhdGljIHZv
aWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklT
SVRfQ0hJTERSRU47CiAKICAgICBKU09iamVjdCogZ2V0dGVyKCkgY29uc3QgeyByZXR1cm4gbV9n
ZXR0ZXIuZ2V0KCk7IH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSGFz
aE1hcEltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0hhc2hNYXBJbXBsLmNwcAkocmV2aXNpb24gMjcyMjk3KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSGFzaE1hcEltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw5
IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCitERUZJTkVfVEVNUExBVEVfVklTSVRfQ0hJTERSRU4o
dGVtcGxhdGU8PiwgSGFzaE1hcEJ1Y2tldDxIYXNoTWFwQnVja2V0RGF0YUtleT4pOworREVGSU5F
X1RFTVBMQVRFX1ZJU0lUX0NISUxEUkVOKHRlbXBsYXRlPD4sIEhhc2hNYXBCdWNrZXQ8SGFzaE1h
cEJ1Y2tldERhdGFLZXlWYWx1ZT4pOworCiB0ZW1wbGF0ZTw+CiBjb25zdCBDbGFzc0luZm8gSGFz
aE1hcEJ1Y2tldDxIYXNoTWFwQnVja2V0RGF0YUtleT46OnNfaW5mbyA9CiAgICAgeyAiSGFzaE1h
cEJ1Y2tldCIsIG51bGxwdHIsIG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUo
SGFzaE1hcEJ1Y2tldDxIYXNoTWFwQnVja2V0RGF0YUtleT4pIH07CkBAIC0zOCw4ICs0MSw5IEBA
IHRlbXBsYXRlPD4KIGNvbnN0IENsYXNzSW5mbyBIYXNoTWFwQnVja2V0PEhhc2hNYXBCdWNrZXRE
YXRhS2V5VmFsdWU+OjpzX2luZm8gPQogICAgIHsgIkhhc2hNYXBCdWNrZXQiLCBudWxscHRyLCBu
dWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEhhc2hNYXBCdWNrZXQ8SGFzaE1h
cEJ1Y2tldERhdGFLZXlWYWx1ZT4pIH07CiAKLXRlbXBsYXRlIDx0eXBlbmFtZSBEYXRhPgotdm9p
ZCBIYXNoTWFwQnVja2V0PERhdGE+Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZp
c2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBEYXRhPgordGVtcGxhdGU8dHlwZW5h
bWUgVmlzaXRvcj4KK3ZvaWQgSGFzaE1hcEJ1Y2tldDxEYXRhPjo6dmlzaXRDaGlsZHJlbkltcGwo
SlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEhhc2hNYXBCdWNrZXQqIHRo
aXNPYmplY3QgPSBqc0Nhc3Q8SGFzaE1hcEJ1Y2tldCo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19P
QkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTUyLDggKzU2LDkgQEAgdm9p
ZCBIYXNoTWFwQnVja2V0PERhdGE+Ojp2aXNpdENoaWxkcmVuKAogICAgIHZpc2l0b3IuYXBwZW5k
VmFsdWVzKGJpdHdpc2VfY2FzdDxXcml0ZUJhcnJpZXI8VW5rbm93bj4qPigmdGhpc09iamVjdC0+
bV9kYXRhKSwgc2l6ZW9mKERhdGEpIC8gc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpOwog
fQogCi10ZW1wbGF0ZSA8dHlwZW5hbWUgSGFzaE1hcEJ1Y2tldD4KLXZvaWQgSGFzaE1hcEltcGw8
SGFzaE1hcEJ1Y2tldD46OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYg
dmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIEhhc2hNYXBCdWNrZXQ+Cit0ZW1wbGF0ZTx0eXBl
bmFtZSBWaXNpdG9yPgordm9pZCBIYXNoTWFwSW1wbDxIYXNoTWFwQnVja2V0Pjo6dmlzaXRDaGls
ZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEhhc2hNYXBJ
bXBsKiB0aGlzT2JqZWN0ID0ganNDYXN0PEhhc2hNYXBJbXBsKj4oY2VsbCk7CiAgICAgQVNTRVJU
X0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNjYsNiArNzEsOCBA
QCB2b2lkIEhhc2hNYXBJbXBsPEhhc2hNYXBCdWNrZXQ+Ojp2aXNpdENoCiAgICAgICAgIHZpc2l0
b3IubWFya0F1eGlsaWFyeShidWZmZXIpOwogfQogCitERUZJTkVfVEVNUExBVEVfVklTSVRfQ0hJ
TERSRU4odGVtcGxhdGU8dHlwZW5hbWUgSGFzaE1hcEJ1Y2tldD4sIEhhc2hNYXBJbXBsPEhhc2hN
YXBCdWNrZXQ+KTsKKwogdGVtcGxhdGUgPHR5cGVuYW1lIEhhc2hNYXBCdWNrZXQ+CiBzaXplX3Qg
SGFzaE1hcEltcGw8SGFzaE1hcEJ1Y2tldD46OmVzdGltYXRlZFNpemUoSlNDZWxsKiBjZWxsLCBW
TSYgdm0pCiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9IYXNoTWFwSW1w
bC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0hhc2hNYXBJ
bXBsLmgJKHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0hhc2hNYXBJbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0OCw3ICsxNDgsNyBAQCBwdWJsaWM6
CiAgICAgICAgIHJldHVybiBtX2RhdGEudmFsdWUuZ2V0KCk7CiAgICAgfQogCi0gICAgc3RhdGlj
IHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVf
VEVNUExBVEVfVklTSVRfQ0hJTERSRU47CiAKICAgICBBTFdBWVNfSU5MSU5FIEhhc2hNYXBCdWNr
ZXQqIG5leHQoKSBjb25zdCB7IHJldHVybiBtX25leHQuZ2V0KCk7IH0KICAgICBBTFdBWVNfSU5M
SU5FIEhhc2hNYXBCdWNrZXQqIHByZXYoKSBjb25zdCB7IHJldHVybiBtX3ByZXYuZ2V0KCk7IH0K
QEAgLTM2NCw3ICszNjQsNyBAQCBjbGFzcyBIYXNoTWFwSW1wbCA6IHB1YmxpYyBKU05vbkZpbmFs
T2JqCiBwdWJsaWM6CiAgICAgdXNpbmcgQnVja2V0VHlwZSA9IEhhc2hNYXBCdWNrZXRUeXBlOwog
Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwor
ICAgIERFQ0xBUkVfVEVNUExBVEVfVklTSVRfQ0hJTERSRU47CiAKICAgICBzdGF0aWMgc2l6ZV90
IGVzdGltYXRlZFNpemUoSlNDZWxsKiwgVk0mKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSW50ZXJuYWxGdW5jdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50ZXJuYWxGdW5jdGlvbi5jcHAJKHJldmlzaW9uIDI3MjI5
NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGVybmFsRnVuY3Rpb24uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC02NCw3ICs2NCw4IEBAIHZvaWQgSW50ZXJuYWxGdW5jdGlvbjo6
ZmluaXNoQ3JlYXRpb24oVk0KICAgICB9CiB9CiAKLXZvaWQgSW50ZXJuYWxGdW5jdGlvbjo6dmlz
aXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8
dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSW50ZXJuYWxGdW5jdGlvbjo6dmlzaXRDaGlsZHJlbklt
cGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEludGVybmFsRnVuY3Rp
b24qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SW50ZXJuYWxGdW5jdGlvbio+KGNlbGwpOwogICAgIEFT
U0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTczLDYgKzc0
LDggQEAgdm9pZCBJbnRlcm5hbEZ1bmN0aW9uOjp2aXNpdENoaWxkcmVuKEpTQwogICAgIHZpc2l0
b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fb3JpZ2luYWxOYW1lKTsKIH0KIAorREVGSU5FX0VYUE9S
VF9WSVNJVF9DSElMRFJFTihJbnRlcm5hbEZ1bmN0aW9uKTsKKwogY29uc3QgU3RyaW5nJiBJbnRl
cm5hbEZ1bmN0aW9uOjpuYW1lKCkKIHsKICAgICBjb25zdCBTdHJpbmcmIG5hbWUgPSBtX29yaWdp
bmFsTmFtZS0+dHJ5R2V0VmFsdWUoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0ludGVybmFsRnVuY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9JbnRlcm5hbEZ1bmN0aW9uLmgJKHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGVybmFsRnVuY3Rpb24uaAkod29ya2luZyBjb3B5
KQpAQCAtNDYsNyArNDYsNyBAQCBwdWJsaWM6CiAKICAgICBERUNMQVJFX0VYUE9SVF9JTkZPOwog
Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwq
LCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfRVhQT1JUX1ZJU0lUX0NISUxEUkVOOwogCiAg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgY29uc3QgU3RyaW5nJiBuYW1lKCk7CiAgICAgY29uc3QgU3Ry
aW5nIGRpc3BsYXlOYW1lKFZNJik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9JbnRsQ29sbGF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0ludGxDb2xsYXRvci5jcHAJKHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0ludGxDb2xsYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY1
LDcgKzY1LDggQEAgdm9pZCBJbnRsQ29sbGF0b3I6OmZpbmlzaENyZWF0aW9uKFZNJiB2bQogICAg
IEFTU0VSVChpbmhlcml0cyh2bSwgaW5mbygpKSk7CiB9CiAKLXZvaWQgSW50bENvbGxhdG9yOjp2
aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0
ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBJbnRsQ29sbGF0b3I6OnZpc2l0Q2hpbGRyZW5JbXBs
KEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBJbnRsQ29sbGF0b3IqIHRo
aXNPYmplY3QgPSBqc0Nhc3Q8SW50bENvbGxhdG9yKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09C
SkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNzUsNiArNzYsOCBAQCB2b2lk
IEludGxDb2xsYXRvcjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqCiAgICAgdmlzaXRvci5hcHBlbmQo
dGhpc09iamVjdC0+bV9ib3VuZENvbXBhcmUpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4o
SW50bENvbGxhdG9yKTsKKwogVmVjdG9yPFN0cmluZz4gSW50bENvbGxhdG9yOjpzb3J0TG9jYWxl
RGF0YShjb25zdCBTdHJpbmcmIGxvY2FsZSwgUmVsZXZhbnRFeHRlbnNpb25LZXkga2V5KQogewog
ICAgIC8vIDkuMSBJbnRlcm5hbCBzbG90cyBvZiBTZXJ2aWNlIENvbnN0cnVjdG9ycyAmIDEwLjIu
MyBJbnRlcm5hbCBzbG90cyAoRUNNQS00MDIgMi4wKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSW50bENvbGxhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSW50bENvbGxhdG9yLmgJKHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxDb2xsYXRvci5oCSh3b3JraW5nIGNvcHkpCkBA
IC04MCw3ICs4MCw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgSW50bENvbGxhdG9yKFZNJiwg
U3RydWN0dXJlKik7CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOwotICAgIHN0YXRpYyB2
b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJ
U0lUX0NISUxEUkVOOwogCiAgICAgYm9vbCB1cGRhdGVDYW5Eb0FTQ0lJVUNBRFVDRVRDb21wYXJp
c29uKCkgY29uc3Q7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxE
YXRlVGltZUZvcm1hdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSW50bERhdGVUaW1lRm9ybWF0LmNwcAkocmV2aXNpb24gMjcyMjk3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERhdGVUaW1lRm9ybWF0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtOTAsNyArOTAsOCBAQCB2b2lkIEludGxEYXRlVGltZUZvcm1hdDo6ZmluaXNoQ3Jl
YXRpb24oCiAgICAgQVNTRVJUKGluaGVyaXRzKHZtLCBpbmZvKCkpKTsKIH0KIAotdm9pZCBJbnRs
RGF0ZVRpbWVGb3JtYXQ6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYg
dmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEludGxEYXRlVGltZUZv
cm1hdDo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQog
ewogICAgIEludGxEYXRlVGltZUZvcm1hdCogdGhpc09iamVjdCA9IGpzQ2FzdDxJbnRsRGF0ZVRp
bWVGb3JtYXQqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmpl
Y3QsIGluZm8oKSk7CkBAIC0xMDAsNiArMTAxLDggQEAgdm9pZCBJbnRsRGF0ZVRpbWVGb3JtYXQ6
OnZpc2l0Q2hpbGRyZW4oSgogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fYm91bmRG
b3JtYXQpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSW50bERhdGVUaW1lRm9ybWF0KTsK
Kwogdm9pZCBJbnRsRGF0ZVRpbWVGb3JtYXQ6OnNldEJvdW5kRm9ybWF0KFZNJiB2bSwgSlNCb3Vu
ZEZ1bmN0aW9uKiBmb3JtYXQpCiB7CiAgICAgbV9ib3VuZEZvcm1hdC5zZXQodm0sIHRoaXMsIGZv
cm1hdCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsRGF0ZVRpbWVG
b3JtYXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRs
RGF0ZVRpbWVGb3JtYXQuaAkocmV2aXNpb24gMjcyMjk3KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSW50bERhdGVUaW1lRm9ybWF0LmgJKHdvcmtpbmcgY29weSkKQEAgLTg1LDcg
Kzg1LDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBJbnRsRGF0ZVRpbWVGb3JtYXQoVk0mLCBT
dHJ1Y3R1cmUqKTsKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7Ci0gICAgc3RhdGljIHZv
aWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklT
SVRfQ0hJTERSRU47CiAKICAgICBzdGF0aWMgVmVjdG9yPFN0cmluZz4gbG9jYWxlRGF0YShjb25z
dCBTdHJpbmcmLCBSZWxldmFudEV4dGVuc2lvbktleSk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0ludGxMb2NhbGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0ludGxMb2NhbGUuY3BwCShyZXZpc2lvbiAyNzIyOTcpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTG9jYWxlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNTgsNyArNTgsOCBAQCB2b2lkIEludGxMb2NhbGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2
bSkKICAgICBBU1NFUlQoaW5oZXJpdHModm0sIGluZm8oKSkpOwogfQogCi12b2lkIEludGxMb2Nh
bGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3Rl
bXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEludGxMb2NhbGU6OnZpc2l0Q2hpbGRyZW5J
bXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBhdXRvKiB0aGlzT2Jq
ZWN0ID0ganNDYXN0PEludGxMb2NhbGUqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lO
SEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC02Niw2ICs2Nyw4IEBAIHZvaWQgSW50bExv
Y2FsZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGMKICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRo
aXNPYmplY3QsIHZpc2l0b3IpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSW50bExvY2Fs
ZSk7CisKIGNsYXNzIExvY2FsZUlEQnVpbGRlciBmaW5hbCB7CiBwdWJsaWM6CiAgICAgYm9vbCBp
bml0aWFsaXplKGNvbnN0IFN0cmluZyYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSW50bExvY2FsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0ludGxMb2NhbGUuaAkocmV2aXNpb24gMjcyMjk3KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSW50bExvY2FsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03MSw3ICs3MSw3
IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgSW50bExvY2FsZShWTSYsIFN0cnVjdHVyZSopOwog
ICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxk
cmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsK
IAogICAgIFN0cmluZyBrZXl3b3JkVmFsdWUoQVNDSUlMaXRlcmFsLCBib29sIGlzQm9vbGVhbiA9
IGZhbHNlKSBjb25zdDsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50
bE51bWJlckZvcm1hdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSW50bE51bWJlckZvcm1hdC5jcHAJKHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxOdW1iZXJGb3JtYXQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC03Myw3ICs3Myw4IEBAIHZvaWQgSW50bE51bWJlckZvcm1hdDo6ZmluaXNoQ3JlYXRpb24o
Vk0KICAgICBBU1NFUlQoaW5oZXJpdHModm0sIGluZm8oKSkpOwogfQogCi12b2lkIEludGxOdW1i
ZXJGb3JtYXQ6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRv
cikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEludGxOdW1iZXJGb3JtYXQ6OnZp
c2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBJ
bnRsTnVtYmVyRm9ybWF0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEludGxOdW1iZXJGb3JtYXQqPihj
ZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7
CkBAIC04Myw2ICs4NCw4IEBAIHZvaWQgSW50bE51bWJlckZvcm1hdDo6dmlzaXRDaGlsZHJlbihK
U0MKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2JvdW5kRm9ybWF0KTsKIH0KIAor
REVGSU5FX1ZJU0lUX0NISUxEUkVOKEludGxOdW1iZXJGb3JtYXQpOworCiBWZWN0b3I8U3RyaW5n
PiBJbnRsTnVtYmVyRm9ybWF0Ojpsb2NhbGVEYXRhKGNvbnN0IFN0cmluZyYgbG9jYWxlLCBSZWxl
dmFudEV4dGVuc2lvbktleSBrZXkpCiB7CiAgICAgLy8gOS4xIEludGVybmFsIHNsb3RzIG9mIFNl
cnZpY2UgQ29uc3RydWN0b3JzICYgMTEuMi4zIEludGVybmFsIHNsb3RzIChFQ01BLTQwMiAyLjAp
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTnVtYmVyRm9ybWF0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE51bWJlckZv
cm1hdC5oCShyZXZpc2lvbiAyNzIyOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9JbnRsTnVtYmVyRm9ybWF0LmgJKHdvcmtpbmcgY29weSkKQEAgLTk2LDcgKzk2LDcgQEAgcHVi
bGljOgogcHJpdmF0ZToKICAgICBJbnRsTnVtYmVyRm9ybWF0KFZNJiwgU3RydWN0dXJlKik7CiAg
ICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOwotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwog
CiAgICAgc3RhdGljIFZlY3RvcjxTdHJpbmc+IGxvY2FsZURhdGEoY29uc3QgU3RyaW5nJiwgUmVs
ZXZhbnRFeHRlbnNpb25LZXkpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9JbnRsUGx1cmFsUnVsZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0ludGxQbHVyYWxSdWxlcy5jcHAJKHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxQbHVyYWxSdWxlcy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTYxLDcgKzYxLDggQEAgdm9pZCBJbnRsUGx1cmFsUnVsZXM6OmZpbmlzaENyZWF0aW9u
KFZNJgogICAgIEFTU0VSVChpbmhlcml0cyh2bSwgaW5mbygpKSk7CiB9CiAKLXZvaWQgSW50bFBs
dXJhbFJ1bGVzOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0
b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBJbnRsUGx1cmFsUnVsZXM6OnZp
c2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBJ
bnRsUGx1cmFsUnVsZXMqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SW50bFBsdXJhbFJ1bGVzKj4oY2Vs
bCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpA
QCAtNjksNiArNzAsOCBAQCB2b2lkIEludGxQbHVyYWxSdWxlczo6dmlzaXRDaGlsZHJlbihKU0Nl
CiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKIH0KIAorREVG
SU5FX1ZJU0lUX0NISUxEUkVOKEludGxQbHVyYWxSdWxlcyk7CisKIFZlY3RvcjxTdHJpbmc+IElu
dGxQbHVyYWxSdWxlczo6bG9jYWxlRGF0YShjb25zdCBTdHJpbmcmLCBSZWxldmFudEV4dGVuc2lv
bktleSkKIHsKICAgICByZXR1cm4geyB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSW50bFBsdXJhbFJ1bGVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSW50bFBsdXJhbFJ1bGVzLmgJKHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxQbHVyYWxSdWxlcy5oCSh3b3JraW5nIGNvcHkp
CkBAIC02Niw3ICs2Niw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgSW50bFBsdXJhbFJ1bGVz
KFZNJiwgU3RydWN0dXJlKik7CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOwotICAgIHN0
YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNM
QVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgc3RhdGljIFZlY3RvcjxTdHJpbmc+IGxvY2FsZURh
dGEoY29uc3QgU3RyaW5nJiwgUmVsZXZhbnRFeHRlbnNpb25LZXkpOwogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsUmVsYXRpdmVUaW1lRm9ybWF0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsUmVsYXRpdmVUaW1lRm9y
bWF0LmNwcAkocmV2aXNpb24gMjcyMjk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSW50bFJlbGF0aXZlVGltZUZvcm1hdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYyLDcgKzYy
LDggQEAgdm9pZCBJbnRsUmVsYXRpdmVUaW1lRm9ybWF0OjpmaW5pc2hDcmVhdAogICAgIEFTU0VS
VChpbmhlcml0cyh2bSwgaW5mbygpKSk7CiB9CiAKLXZvaWQgSW50bFJlbGF0aXZlVGltZUZvcm1h
dDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVt
cGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSW50bFJlbGF0aXZlVGltZUZvcm1hdDo6dmlz
aXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGF1
dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SW50bFJlbGF0aXZlVGltZUZvcm1hdCo+KGNlbGwpOwog
ICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTcw
LDYgKzcxLDggQEAgdm9pZCBJbnRsUmVsYXRpdmVUaW1lRm9ybWF0Ojp2aXNpdENoaWxkcgogICAg
IEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CiB9CiAKK0RFRklORV9W
SVNJVF9DSElMRFJFTihJbnRsUmVsYXRpdmVUaW1lRm9ybWF0KTsKKwogVmVjdG9yPFN0cmluZz4g
SW50bFJlbGF0aXZlVGltZUZvcm1hdDo6bG9jYWxlRGF0YShjb25zdCBTdHJpbmcmIGxvY2FsZSwg
UmVsZXZhbnRFeHRlbnNpb25LZXkga2V5KQogewogICAgIEFTU0VSVF9VTlVTRUQoa2V5LCBrZXkg
PT0gUmVsZXZhbnRFeHRlbnNpb25LZXk6Ok51KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0ludGxSZWxhdGl2ZVRpbWVGb3JtYXQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsUmVsYXRpdmVUaW1lRm9ybWF0LmgJKHJldmlzaW9u
IDI3MjI5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxSZWxhdGl2ZVRp
bWVGb3JtYXQuaAkod29ya2luZyBjb3B5KQpAQCAtNjQsNyArNjQsNyBAQCBwdWJsaWM6CiBwcml2
YXRlOgogICAgIEludGxSZWxhdGl2ZVRpbWVGb3JtYXQoVk0mLCBTdHJ1Y3R1cmUqKTsKICAgICB2
b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihK
U0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAg
ICBzdGF0aWMgVmVjdG9yPFN0cmluZz4gbG9jYWxlRGF0YShjb25zdCBTdHJpbmcmLCBSZWxldmFu
dEV4dGVuc2lvbktleSk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lu
dGxTZWdtZW50SXRlcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0ludGxTZWdtZW50SXRlcmF0b3IuY3BwCShyZXZpc2lvbiAyNzIyOTcpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsU2VnbWVudEl0ZXJhdG9yLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNjQsMTMgKzY0LDE2IEBAIHZvaWQgSW50bFNlZ21lbnRJdGVyYXRvcjo6
ZmluaXNoQ3JlYXRpb24KICAgICBtX3N0cmluZy5zZXQodm0sIHRoaXMsIHN0cmluZyk7CiB9CiAK
LXZvaWQgSW50bFNlZ21lbnRJdGVyYXRvcjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSW50
bFNlZ21lbnRJdGVyYXRvcjo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9y
JiB2aXNpdG9yKQogewogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SW50bFNlZ21lbnRJ
dGVyYXRvcio+KGNlbGwpOwogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlz
aXRvcik7CiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9zdHJpbmcpOwogfQogCitE
RUZJTkVfVklTSVRfQ0hJTERSRU4oSW50bFNlZ21lbnRJdGVyYXRvcik7CisKIEpTT2JqZWN0KiBJ
bnRsU2VnbWVudEl0ZXJhdG9yOjpuZXh0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCiB7
CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSW50bFNlZ21lbnRJdGVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxTZWdtZW50SXRlcmF0b3IuaAkocmV2aXNpb24g
MjcyMjk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFNlZ21lbnRJdGVy
YXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC01Myw3ICs1Myw3IEBAIHB1YmxpYzoKIAogICAgIEpT
T2JqZWN0KiBuZXh0KEpTR2xvYmFsT2JqZWN0Kik7CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENo
aWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJF
TjsKIAogcHJpdmF0ZToKICAgICBJbnRsU2VnbWVudEl0ZXJhdG9yKFZNJiwgU3RydWN0dXJlKiwg
c3RkOjp1bmlxdWVfcHRyPFVCcmVha0l0ZXJhdG9yLCBVQnJlYWtJdGVyYXRvckRlbGV0ZXI+JiYs
IEJveDxWZWN0b3I8VUNoYXI+PiYmLCBJbnRsU2VnbWVudGVyOjpHcmFudWxhcml0eSk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsU2VnbWVudHMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxTZWdtZW50cy5jcHAJKHJl
dmlzaW9uIDI3MjI5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxTZWdt
ZW50cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwOSwxMSArMTA5LDE0IEBAIEpTT2JqZWN0KiBJ
bnRsU2VnbWVudHM6OmNyZWF0ZVNlZ21lbnRJdGUKICAgICByZXR1cm4gSW50bFNlZ21lbnRJdGVy
YXRvcjo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QtPnNlZ21lbnRJdGVyYXRvclN0cnVjdHVyZSgp
LCBXVEZNb3ZlKHNlZ21lbnRlciksIG1fYnVmZmVyLCBtX3N0cmluZy5nZXQoKSwgbV9ncmFudWxh
cml0eSk7CiB9CiAKLXZvaWQgSW50bFNlZ21lbnRzOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2Vs
bCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9p
ZCBJbnRsU2VnbWVudHM6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYg
dmlzaXRvcikKIHsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEludGxTZWdtZW50cyo+
KGNlbGwpOwogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CiAg
ICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9zdHJpbmcpOwogfQogCitERUZJTkVfVklT
SVRfQ0hJTERSRU4oSW50bFNlZ21lbnRzKTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsU2VnbWVudHMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsU2VnbWVudHMuaAkocmV2aXNpb24g
MjcyMjk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFNlZ21lbnRzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTU0LDcgKzU0LDcgQEAgcHVibGljOgogICAgIEpTVmFsdWUgY29u
dGFpbmluZyhKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUgaW5kZXhWYWx1ZSk7CiAgICAgSlNPYmpl
Y3QqIGNyZWF0ZVNlZ21lbnRJdGVyYXRvcihKU0dsb2JhbE9iamVjdCopOwogCi0gICAgc3RhdGlj
IHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVf
VklTSVRfQ0hJTERSRU47CiAKIHByaXZhdGU6CiAgICAgSW50bFNlZ21lbnRzKFZNJiwgU3RydWN0
dXJlKiwgc3RkOjp1bmlxdWVfcHRyPFVCcmVha0l0ZXJhdG9yLCBVQnJlYWtJdGVyYXRvckRlbGV0
ZXI+JiYsIEJveDxWZWN0b3I8VUNoYXI+PiYmLCBJbnRsU2VnbWVudGVyOjpHcmFudWxhcml0eSk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1
ZmZlclZpZXcuY3BwCShyZXZpc2lvbiAyNzIyOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1NSw3ICsx
NTUsOCBAQCB2b2lkIEpTQXJyYXlCdWZmZXJWaWV3OjpmaW5pc2hDcmVhdGlvbihWCiAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAotdm9pZCBKU0FycmF5QnVmZmVyVmlldzo6
dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxh
dGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNBcnJheUJ1ZmZlclZpZXc6OnZpc2l0Q2hpbGRy
ZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU0FycmF5QnVm
ZmVyVmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0FycmF5QnVmZmVyVmlldyo+KGNlbGwpOwog
ICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTE2
OSw2ICsxNzAsOCBAQCB2b2lkIEpTQXJyYXlCdWZmZXJWaWV3Ojp2aXNpdENoaWxkcmVuKEpTCiAg
ICAgfQogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNBcnJheUJ1ZmZlclZpZXcpOworCiBi
b29sIEpTQXJyYXlCdWZmZXJWaWV3OjpwdXQoCiAgICAgSlNDZWxsKiBjZWxsLCBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZh
bHVlLAogICAgIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuaAkocmV2aXNpb24gMjcyMjk3
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuaAko
d29ya2luZyBjb3B5KQpAQCAtMTcyLDcgKzE3Miw3IEBAIHByb3RlY3RlZDoKICAgICAKICAgICBz
dGF0aWMgYm9vbCBwdXQoSlNDZWxsKiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIEpT
VmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJl
bihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAg
ICAgCiBwdWJsaWM6CiAgICAgVHlwZWRBcnJheU1vZGUgbW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1f
bW9kZTsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUl0ZXJh
dG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Fy
cmF5SXRlcmF0b3IuY3BwCShyZXZpc2lvbiAyNzIyOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0FycmF5SXRlcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OCwxMSAr
NjgsMTQgQEAgdm9pZCBKU0FycmF5SXRlcmF0b3I6OmZpbmlzaENyZWF0aW9uKFZNJgogICAgICAg
ICBCYXNlOjppbnRlcm5hbEZpZWxkKGluZGV4KS5zZXQodm0sIHRoaXMsIHZhbHVlc1tpbmRleF0p
OwogfQogCi12b2lkIEpTQXJyYXlJdGVyYXRvcjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGws
IFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQg
SlNBcnJheUl0ZXJhdG9yOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3Im
IHZpc2l0b3IpCiB7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0FycmF5SXRlcmF0
b3IqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGlu
Zm8oKSk7CiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKIH0K
IAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTQXJyYXlJdGVyYXRvcik7CisKIH0gLy8gbmFtZXNw
YWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUl0ZXJh
dG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJh
eUl0ZXJhdG9yLmgJKHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTQXJyYXlJdGVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC03OCw3ICs3OCw3IEBA
IHB1YmxpYzoKIAogICAgIERFQ0xBUkVfSU5GTzsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hp
bGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVO
OwogCiBwcml2YXRlOgogICAgIEpTQXJyYXlJdGVyYXRvcihWTSYsIFN0cnVjdHVyZSopOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBc3luY0dlbmVyYXRvci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBc3luY0dlbmVyYXRv
ci5jcHAJKHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTQXN5bmNHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OSwxMSArNTksMTQgQEAg
dm9pZCBKU0FzeW5jR2VuZXJhdG9yOjpmaW5pc2hDcmVhdGlvbihWTQogICAgICAgICBpbnRlcm5h
bEZpZWxkKGluZGV4KS5zZXQodm0sIHRoaXMsIHZhbHVlc1tpbmRleF0pOwogfQogCi12b2lkIEpT
QXN5bmNHZW5lcmF0b3I6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYg
dmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTQXN5bmNHZW5lcmF0
b3I6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsK
ICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQXN5bmNHZW5lcmF0b3IqPihjZWxsKTsK
ICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAgICAg
QmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKIH0KIAorREVGSU5FX1ZJ
U0lUX0NISUxEUkVOKEpTQXN5bmNHZW5lcmF0b3IpOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXN5bmNHZW5lcmF0b3IuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FzeW5jR2VuZXJhdG9y
LmgJKHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
QXN5bmNHZW5lcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtOTUsNyArOTUsNyBAQCBwdWJsaWM6
CiAKICAgICBERUNMQVJFX0VYUE9SVF9JTkZPOwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGls
ZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47
CiAKIHByaXZhdGU6CiAgICAgSlNBc3luY0dlbmVyYXRvcihWTSYsIFN0cnVjdHVyZSopOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCaWdJbnQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQmlnSW50LmNwcAkocmV2aXNpb24g
MjcyMjk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCaWdJbnQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC02Nyw3ICs2Nyw4IEBAIEpTQmlnSW50OjpKU0JpZ0ludChWTSYgdm0s
IFN0cnVjdHVyZSogc3QKICAgICAsIG1fZGF0YSh2bSwgdGhpcywgZGF0YSwgbGVuZ3RoKQogeyB9
CiAKLXZvaWQgSlNCaWdJbnQ6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRv
ciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTQmlnSW50Ojp2
aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAg
YXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0JpZ0ludCo+KGNlbGwpOwogICAgIEFTU0VSVF9H
Q19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTc2LDYgKzc3LDggQEAg
dm9pZCBKU0JpZ0ludDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbAogICAgICAgICB2aXNpdG9y
Lm1hcmtBdXhpbGlhcnkoZGF0YSk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU0JpZ0lu
dCk7CisKIHZvaWQgSlNCaWdJbnQ6OmluaXRpYWxpemUoSW5pdGlhbGl6YXRpb25UeXBlIGluaXRU
eXBlKQogewogICAgIGlmIChpbml0VHlwZSA9PSBJbml0aWFsaXphdGlvblR5cGU6OldpdGhaZXJv
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCaWdJbnQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JpZ0ludC5oCShyZXZpc2lv
biAyNzIyOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JpZ0ludC5oCSh3
b3JraW5nIGNvcHkpCkBAIC01MCw3ICs1MCw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3Rl
eHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBTdHJ1
Y3R1cmVJc0ltbW9ydGFsIHwgT3ZlcnJpZGVzVG9UaGlzOwogICAgIGZyaWVuZCBjbGFzcyBDYWNo
ZWRCaWdJbnQ7CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RW
aXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIHRlbXBsYXRlPHR5
cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2Vzcz4KICAgICBzdGF0aWMgSXNvU3Vic3BhY2Uq
IHN1YnNwYWNlRm9yKFZNJiB2bSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTQm91bmRGdW5jdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNCb3VuZEZ1bmN0aW9uLmNwcAkocmV2aXNpb24gMjcyMjk3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCb3VuZEZ1bmN0aW9uLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjQ5LDcgKzI0OSw4IEBAIHZvaWQgSlNCb3VuZEZ1bmN0aW9uOjpmaW5pc2hDcmVhdGlv
bihWTSYKICAgICBBU1NFUlQoaW5oZXJpdHModm0sIGluZm8oKSkpOwogfQogCi12b2lkIEpTQm91
bmRGdW5jdGlvbjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNp
dG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNCb3VuZEZ1bmN0aW9uOjp2
aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAg
SlNCb3VuZEZ1bmN0aW9uKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQm91bmRGdW5jdGlvbio+KGNl
bGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsK
QEAgLTI2MSw0ICsyNjIsNiBAQCB2b2lkIEpTQm91bmRGdW5jdGlvbjo6dmlzaXRDaGlsZHJlbihK
U0NlCiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9uYW1lTWF5QmVOdWxsKTsKIH0K
IAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTQm91bmRGdW5jdGlvbik7CisKIH0gLy8gbmFtZXNw
YWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCb3VuZEZ1bmN0
aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCb3Vu
ZEZ1bmN0aW9uLmgJKHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTQm91bmRGdW5jdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC04NCw3ICs4NCw3IEBA
IHByaXZhdGU6CiAgICAgSlNCb3VuZEZ1bmN0aW9uKFZNJiwgTmF0aXZlRXhlY3V0YWJsZSosIEpT
R2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKiwgSlNPYmplY3QqIHRhcmdldEZ1bmN0aW9uLCBKU1Zh
bHVlIGJvdW5kVGhpcywgSlNJbW11dGFibGVCdXR0ZXJmbHkqIGJvdW5kQXJncywgSlNTdHJpbmcq
IG5hbWVNYXlCZU51bGwsIGRvdWJsZSBsZW5ndGgpOwogCiAgICAgdm9pZCBmaW5pc2hDcmVhdGlv
bihWTSYpOwotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0
b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgV3JpdGVCYXJyaWVyPEpT
T2JqZWN0PiBtX3RhcmdldEZ1bmN0aW9uOwogICAgIFdyaXRlQmFycmllcjxVbmtub3duPiBtX2Jv
dW5kVGhpczsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2FsbGVlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NhbGxlZS5j
cHAJKHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
Q2FsbGVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTAsNyArNTAsOCBAQCB2b2lkIEpTQ2FsbGVl
OjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCiAgICAgQVNTRVJUKGluaGVyaXRzKHZtLCBpbmZvKCkp
KTsKIH0KIAotdm9pZCBKU0NhbGxlZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNDYWxs
ZWU6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsK
ICAgICBKU0NhbGxlZSogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0NhbGxlZSo+KGNlbGwpOwogICAg
IEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTU5LDQg
KzYwLDYgQEAgdm9pZCBKU0NhbGxlZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbAogICAgIHZp
c2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fc2NvcGUpOwogfQogCitERUZJTkVfVklTSVRfQ0hJ
TERSRU4oSlNDYWxsZWUpOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTQ2FsbGVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNDYWxsZWUuaAkocmV2aXNpb24gMjcyMjk3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDYWxsZWUuaAkod29ya2luZyBjb3B5KQpAQCAtMTAw
LDcgKzEwMCw3IEBAIHByb3RlY3RlZDoKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7CiAg
ICAgdXNpbmcgQmFzZTo6ZmluaXNoQ3JlYXRpb247CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENo
aWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJF
TjsKIAogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgJKHJldmlzaW9uIDI3MjI5
NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMSBIYXJy
aSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQogICogIENvcHlyaWdodCAoQykgMjAwMSBQZXRlciBL
ZWxseSAocG1rQHBvc3QuY29tKQotICogIENvcHlyaWdodCAoQykgMjAwMy0yMDE5IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAyMCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMzIs
NiArMzIsNyBAQAogI2luY2x1ZGUgIkpTTG9jay5oIgogI2luY2x1ZGUgIkpTVHlwZUluZm8uaCIK
ICNpbmNsdWRlICJTbG90VmlzaXRvci5oIgorI2luY2x1ZGUgIlNsb3RWaXNpdG9yTWFjcm9zLmgi
CiAjaW5jbHVkZSAiU3Vic3BhY2VBY2Nlc3MuaCIKICNpbmNsdWRlICJUeXBlZEFycmF5VHlwZS5o
IgogI2luY2x1ZGUgIldyaXRlQmFycmllci5oIgpAQCAtMTY3LDggKzE2OCw4IEBAIHB1YmxpYzoK
ICAgICBzaXplX3QgZXN0aW1hdGVkU2l6ZUluQnl0ZXMoVk0mKSBjb25zdDsKICAgICBKU19FWFBP
UlRfUFJJVkFURSBzdGF0aWMgc2l6ZV90IGVzdGltYXRlZFNpemUoSlNDZWxsKiwgVk0mKTsKIAot
ICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKLSAg
ICBzdGF0aWMgdm9pZCB2aXNpdE91dHB1dENvbnN0cmFpbnRzKEpTQ2VsbCosIFNsb3RWaXNpdG9y
Jik7CisgICAgREVDTEFSRV9JTkxJTkVfVklTSVRfQ0hJTERSRU47CisgICAgc3RhdGljIHZvaWQg
dmlzaXRPdXRwdXRDb25zdHJhaW50cyhKU0NlbGwqLCBBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAK
ICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBhbmFseXplSGVhcChKU0NlbGwqLCBI
ZWFwQW5hbHl6ZXImKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlND
ZWxsSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTQ2VsbElubGluZXMuaAkocmV2aXNpb24gMjcyMjk3KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNDZWxsSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw2ICsyNSw3
IEBACiAKICNwcmFnbWEgb25jZQogCisjaW5jbHVkZSAiQWJzdHJhY3RTbG90VmlzaXRvcklubGlu
ZXMuaCIKICNpbmNsdWRlICJBbGxvY2F0b3JGb3JNb2RlLmgiCiAjaW5jbHVkZSAiQWxsb2NhdG9y
SW5saW5lcy5oIgogI2luY2x1ZGUgIkNvbXBsZXRlU3Vic3BhY2VJbmxpbmVzLmgiCkBAIC0xNDEs
MTIgKzE0MiwxNSBAQCBBTFdBWVNfSU5MSU5FIFN0cnVjdHVyZSogSlNDZWxsOjpzdHJ1Y3R1CiAg
ICAgcmV0dXJuIHZtLmdldFN0cnVjdHVyZShtX3N0cnVjdHVyZUlEKTsKIH0KIAotaW5saW5lIHZv
aWQgSlNDZWxsOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0
b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgoraW5saW5lIHZvaWQgSlNDZWxsOjp2aXNp
dENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgdmlz
aXRvci5hcHBlbmRVbmJhcnJpZXJlZChjZWxsLT5zdHJ1Y3R1cmUodmlzaXRvci52bSgpKSk7CiB9
CiAKLWlubGluZSB2b2lkIEpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50cyhKU0NlbGwqLCBT
bG90VmlzaXRvciYpCitERUZJTkVfSU5MSU5FX1ZJU0lUX0NISUxEUkVOKEpTQ2VsbCk7CisKK2lu
bGluZSB2b2lkIEpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50cyhKU0NlbGwqLCBBYnN0cmFj
dFNsb3RWaXNpdG9yJikKIHsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNDdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbi5jcHAJ
KHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ3Vz
dG9tR2V0dGVyU2V0dGVyRnVuY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NSw3ICs4NSw4
IEBAIEpTQ3VzdG9tR2V0dGVyU2V0dGVyRnVuY3Rpb24qIEpTQ3VzdG9tR2UKICAgICByZXR1cm4g
ZnVuY3Rpb247CiB9CiAKLXZvaWQgSlNDdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbjo6dmlzaXRD
aGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlw
ZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNDdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbjo6dmlzaXRD
aGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTQ3Vz
dG9tR2V0dGVyU2V0dGVyRnVuY3Rpb24qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNDdXN0b21HZXR0
ZXJTZXR0ZXJGdW5jdGlvbio+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMo
dGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTk0LDYgKzk1LDggQEAgdm9pZCBKU0N1c3RvbUdldHRl
clNldHRlckZ1bmN0aW9uOjp2aXNpdAogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1f
Z2V0dGVyU2V0dGVyKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTQ3VzdG9tR2V0dGVy
U2V0dGVyRnVuY3Rpb24pOworCiB2b2lkIEpTQ3VzdG9tR2V0dGVyU2V0dGVyRnVuY3Rpb246OmZp
bmlzaENyZWF0aW9uKFZNJiB2bSwgTmF0aXZlRXhlY3V0YWJsZSogZXhlY3V0YWJsZSwgQ3VzdG9t
R2V0dGVyU2V0dGVyKiBnZXR0ZXJTZXR0ZXIsIGNvbnN0IFN0cmluZyYgbmFtZSkKIHsKICAgICBC
YXNlOjpmaW5pc2hDcmVhdGlvbih2bSwgZXhlY3V0YWJsZSwgaXNTZXR0ZXIoKSwgbmFtZSk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0N1c3RvbUdldHRlclNldHRlckZ1
bmN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlND
dXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbi5oCShyZXZpc2lvbiAyNzIyOTcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0N1c3RvbUdldHRlclNldHRlckZ1bmN0aW9uLmgJKHdv
cmtpbmcgY29weSkKQEAgLTYzLDcgKzYzLDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBKU0N1
c3RvbUdldHRlclNldHRlckZ1bmN0aW9uKFZNJiwgTmF0aXZlRXhlY3V0YWJsZSosIEpTR2xvYmFs
T2JqZWN0KiwgU3RydWN0dXJlKiwgVHlwZSwgY29uc3QgUHJvcGVydHlOYW1lJik7CiAgICAgdm9p
ZCBmaW5pc2hDcmVhdGlvbihWTSYsIE5hdGl2ZUV4ZWN1dGFibGUqLCBDdXN0b21HZXR0ZXJTZXR0
ZXIqLCBjb25zdCBTdHJpbmcmKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2Vs
bCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIFdy
aXRlQmFycmllcjxDdXN0b21HZXR0ZXJTZXR0ZXI+IG1fZ2V0dGVyU2V0dGVyOwogICAgIFR5cGUg
bV90eXBlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGaW5hbGl6YXRp
b25SZWdpc3RyeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNGaW5hbGl6YXRpb25SZWdpc3RyeS5jcHAJKHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRmluYWxpemF0aW9uUmVnaXN0cnkuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVk
ZSAiSlNGaW5hbGl6YXRpb25SZWdpc3RyeS5oIgogCisjaW5jbHVkZSAiQWJzdHJhY3RTbG90Vmlz
aXRvci5oIgogI2luY2x1ZGUgIkRlZmVycmVkV29ya1RpbWVyLmgiCiAjaW5jbHVkZSAiSlNDSW5s
aW5lcy5oIgogI2luY2x1ZGUgIkpTSW50ZXJuYWxGaWVsZE9iamVjdEltcGxJbmxpbmVzLmgiCkBA
IC02MCw3ICs2MSw4IEBAIHZvaWQgSlNGaW5hbGl6YXRpb25SZWdpc3RyeTo6ZmluaXNoQ3JlYXQK
ICAgICBnbG9iYWxPYmplY3QtPmdsb2JhbE9iamVjdE1ldGhvZFRhYmxlKCktPmN1cnJlbnRTY3Jp
cHRFeGVjdXRpb25Pd25lcihnbG9iYWxPYmplY3QpOwogfQogCi12b2lkIEpTRmluYWxpemF0aW9u
UmVnaXN0cnk6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRv
cikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTRmluYWxpemF0aW9uUmVnaXN0
cnk6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsK
ICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKGNlbGwsIHZpc2l0b3IpOwogCkBAIC04MCwxMyArODIs
MTUgQEAgdm9pZCBKU0ZpbmFsaXphdGlvblJlZ2lzdHJ5Ojp2aXNpdENoaWxkcgogICAgIGZvciAo
YXV0byYgaG9sZGluZ3MgOiB0aGlzT2JqZWN0LT5tX25vVW5yZWdpc3RyYXRpb25EZWFkKQogICAg
ICAgICB2aXNpdG9yLmFwcGVuZChob2xkaW5ncyk7CiAKLSAgICBzaXplX3QgdG90YWxCdWZmZXJT
aXplc0luQnl0ZXMgPSB0aGlzT2JqZWN0LT5tX2RlYWRSZWdpc3RyYXRpb25zLmNhcGFjaXR5KCkg
KiBzaXplb2YoZGVjbHR5cGUodGhpc09iamVjdC0+bV9kZWFkUmVnaXN0cmF0aW9ucyk6OktleVZh
bHVlUGFpclR5cGUpOwotICAgIHRvdGFsQnVmZmVyU2l6ZXNJbkJ5dGVzICs9IHRoaXNPYmplY3Qt
Pm1fbGl2ZVJlZ2lzdHJhdGlvbnMuY2FwYWNpdHkoKSAqIHNpemVvZihkZWNsdHlwZSh0aGlzT2Jq
ZWN0LT5tX2RlYWRSZWdpc3RyYXRpb25zKTo6S2V5VmFsdWVQYWlyVHlwZSk7CisgICAgc2l6ZV90
IHRvdGFsQnVmZmVyU2l6ZXNJbkJ5dGVzID0gdGhpc09iamVjdC0+bV9kZWFkUmVnaXN0cmF0aW9u
cy5jYXBhY2l0eSgpICogc2l6ZW9mKHR5cGVuYW1lIGRlY2x0eXBlKHRoaXNPYmplY3QtPm1fZGVh
ZFJlZ2lzdHJhdGlvbnMpOjpLZXlWYWx1ZVBhaXJUeXBlKTsKKyAgICB0b3RhbEJ1ZmZlclNpemVz
SW5CeXRlcyArPSB0aGlzT2JqZWN0LT5tX2xpdmVSZWdpc3RyYXRpb25zLmNhcGFjaXR5KCkgKiBz
aXplb2YodHlwZW5hbWUgZGVjbHR5cGUodGhpc09iamVjdC0+bV9kZWFkUmVnaXN0cmF0aW9ucyk6
OktleVZhbHVlUGFpclR5cGUpOwogICAgIHRvdGFsQnVmZmVyU2l6ZXNJbkJ5dGVzICs9IHRoaXNP
YmplY3QtPm1fbm9VbnJlZ2lzdHJhdGlvbkxpdmUuY2FwYWNpdHkoKSAqIHNpemVvZihkZWNsdHlw
ZSh0aGlzT2JqZWN0LT5tX25vVW5yZWdpc3RyYXRpb25MaXZlLnRha2VMYXN0KCkpKTsKICAgICB0
b3RhbEJ1ZmZlclNpemVzSW5CeXRlcyArPSB0aGlzT2JqZWN0LT5tX25vVW5yZWdpc3RyYXRpb25E
ZWFkLmNhcGFjaXR5KCkgKiBzaXplb2YoZGVjbHR5cGUodGhpc09iamVjdC0+bV9ub1VucmVnaXN0
cmF0aW9uTGl2ZS50YWtlTGFzdCgpKSk7CiAgICAgdmlzaXRvci52bSgpLmhlYXAucmVwb3J0RXh0
cmFNZW1vcnlWaXNpdGVkKHRvdGFsQnVmZmVyU2l6ZXNJbkJ5dGVzKTsKIH0KIAorREVGSU5FX1ZJ
U0lUX0NISUxEUkVOKEpTRmluYWxpemF0aW9uUmVnaXN0cnkpOworCiB2b2lkIEpTRmluYWxpemF0
aW9uUmVnaXN0cnk6OmRlc3Ryb3koSlNDZWxsKiB0YWJsZSkKIHsKICAgICBzdGF0aWNfY2FzdDxK
U0ZpbmFsaXphdGlvblJlZ2lzdHJ5Kj4odGFibGUpLT5+SlNGaW5hbGl6YXRpb25SZWdpc3RyeSgp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGaW5hbGl6YXRpb25SZWdp
c3RyeS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRmlu
YWxpemF0aW9uUmVnaXN0cnkuaAkocmV2aXNpb24gMjcyMjk3KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNGaW5hbGl6YXRpb25SZWdpc3RyeS5oCSh3b3JraW5nIGNvcHkpCkBA
IC03MCw3ICs3MCw3IEBAIHB1YmxpYzoKICAgICBERUNMQVJFX0VYUE9SVF9JTkZPOwogCiAgICAg
dm9pZCBmaW5hbGl6ZVVuY29uZGl0aW9uYWxseShWTSYpOwotICAgIHN0YXRpYyB2b2lkIHZpc2l0
Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxE
UkVOOwogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CiAgICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOwogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmNwcAkocmV2aXNpb24gMjcyMjk3KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI1Miw3ICsyNTIsOCBAQCBjb25zdCBTb3VyY2VDb2RlKiBKU0Z1bmN0aW9uOjpzb3Vy
Y2VDb2RlCiAgICAgcmV0dXJuICZqc0V4ZWN1dGFibGUoKS0+c291cmNlKCk7CiB9CiAgICAgCi12
b2lkIEpTRnVuY3Rpb246OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYg
dmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTRnVuY3Rpb246OnZp
c2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBK
U0Z1bmN0aW9uKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTRnVuY3Rpb24qPihjZWxsKTsKICAgICBB
U1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC0yNjEsNiAr
MjYyLDggQEAgdm9pZCBKU0Z1bmN0aW9uOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogYwogICAgIHZp
c2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQoYml0d2lzZV9jYXN0PEpTQ2VsbCo+KGJpdHdpc2VfY2Fz
dDx1aW50cHRyX3Q+KHRoaXNPYmplY3QtPm1fZXhlY3V0YWJsZU9yUmFyZURhdGEpICYgfnJhcmVE
YXRhVGFnKSk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU0Z1bmN0aW9uKTsKKwogQ2Fs
bERhdGEgSlNGdW5jdGlvbjo6Z2V0Q2FsbERhdGEoSlNDZWxsKiBjZWxsKQogewogICAgIC8vIEtl
ZXAgdGhpcyBmdW5jdGlvbiBPSyBmb3IgaW52b2NhdGlvbiBmcm9tIGNvbmN1cnJlbnQgY29tcGls
ZXJzLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uaAko
cmV2aXNpb24gMjcyMjk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5j
dGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xODAsNyArMTgwLDcgQEAgcHJvdGVjdGVkOgogCiAg
ICAgc3RhdGljIGJvb2wgZGVsZXRlUHJvcGVydHkoSlNDZWxsKiwgSlNHbG9iYWxPYmplY3QqLCBQ
cm9wZXJ0eU5hbWUsIERlbGV0ZVByb3BlcnR5U2xvdCYpOwogCi0gICAgc3RhdGljIHZvaWQgdmlz
aXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJ
TERSRU47CiAKIHByaXZhdGU6CiAgICAgc3RhdGljIEpTRnVuY3Rpb24qIGNyZWF0ZUltcGwoVk0m
IHZtLCBGdW5jdGlvbkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUsIEpTU2NvcGUqIHNjb3BlLCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
R2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0dlbmVyYXRvci5jcHAJKHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTksMTEgKzU5
LDE0IEBAIHZvaWQgSlNHZW5lcmF0b3I6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKICAgICAgICAg
aW50ZXJuYWxGaWVsZChpbmRleCkuc2V0KHZtLCB0aGlzLCB2YWx1ZXNbaW5kZXhdKTsKIH0KIAot
dm9pZCBKU0dlbmVyYXRvcjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9y
JiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNHZW5lcmF0b3I6
OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAg
ICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTR2VuZXJhdG9yKj4oY2VsbCk7CiAgICAgQVNT
RVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwogICAgIEJhc2U6OnZp
c2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CiB9CiAKK0RFRklORV9WSVNJVF9DSElM
RFJFTihKU0dlbmVyYXRvcik7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyYXRvci5oCShyZXZpc2lvbiAyNzIyOTcpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyYXRvci5oCSh3b3JraW5nIGNv
cHkpCkBAIC05NCw3ICs5NCw3IEBAIHB1YmxpYzoKIAogICAgIERFQ0xBUkVfRVhQT1JUX0lORk87
CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7
CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogcHJpdmF0ZToKICAgICBKU0dlbmVyYXRv
cihWTSYsIFN0cnVjdHVyZSopOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNHZW5lcmljVHlwZWRBcnJheVZpZXcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlldy5oCShyZXZpc2lvbiAyNzIyOTcp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmll
dy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMTMsNyArMzEzLDcgQEAgcHJpdmF0ZToKICAgICBzdGF0
aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQ
cm9wZXJ0eU5hbWVBcnJheSYsIERvbnRFbnVtUHJvcGVydGllc01vZGUpOwogCiAgICAgc3RhdGlj
IHNpemVfdCBlc3RpbWF0ZWRTaXplKEpTQ2VsbCosIFZNJik7Ci0gICAgc3RhdGljIHZvaWQgdmlz
aXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVEVNUExBVEVf
VklTSVRfQ0hJTERSRU47CiAKICAgICAvLyBSZXR1cm5zIHRydWUgaWYgc3VjY2Vzc2Z1bCwgYW5k
IGZhbHNlIG9uIGVycm9yOyBpdCB3aWxsIHRocm93IG9uIGVycm9yLgogICAgIHRlbXBsYXRlPHR5
cGVuYW1lIE90aGVyQWRhcHRvcj4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oCShy
ZXZpc2lvbiAyNzIyOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVy
aWNUeXBlZEFycmF5Vmlld0lubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNTE3LDcgKzUxNyw4
IEBAIHNpemVfdCBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjoKIH0KIAogdGVtcGxh
dGU8dHlwZW5hbWUgQWRhcHRvcj4KLXZvaWQgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRv
cj46OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3Rl
bXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFk
YXB0b3I+Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3Ip
CiB7CiAgICAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNH
ZW5lcmljVHlwZWRBcnJheVZpZXcqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVS
SVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC01NTUsNCArNTU2LDYgQEAgdm9pZCBKU0dlbmVy
aWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6dgogICAgIH0KIH0KIAorREVGSU5FX1RFTVBMQVRF
X1ZJU0lUX0NISUxEUkVOKHRlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+LCBKU0dlbmVyaWNUeXBl
ZEFycmF5VmlldzxBZGFwdG9yPik7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAkocmV2aXNp
b24gMjcyMjk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmpl
Y3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODk1LDcgKzE4OTUsOCBAQCB2b2lkIEpTR2xvYmFs
T2JqZWN0OjpyZXNldFByb3RvdHlwZShWTSYgCiAgICAgc2V0R2xvYmFsVGhpcyh2bSwgSlNQcm94
eTo6Y3JlYXRlKHZtLCBKU1Byb3h5OjpjcmVhdGVTdHJ1Y3R1cmUodm0sIHRoaXMsIHByb3RvdHlw
ZSwgUHVyZUZvcndhcmRpbmdQcm94eVR5cGUpLCB0aGlzKSk7CiB9CiAKLXZvaWQgSlNHbG9iYWxP
YmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikK
K3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTR2xvYmFsT2JqZWN0Ojp2aXNpdENo
aWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7IAogICAgIEpTR2xv
YmFsT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTR2xvYmFsT2JqZWN0Kj4oY2VsbCk7CiAg
ICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtMjA2
Myw2ICsyMDY0LDggQEAgdm9pZCBKU0dsb2JhbE9iamVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbAog
ICAgIHRoaXNPYmplY3QtPm1fcmVnRXhwR2xvYmFsRGF0YS52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9y
KTsKIH0KIAorREVGSU5FX0VYUE9SVF9WSVNJVF9DSElMRFJFTihKU0dsb2JhbE9iamVjdCk7CisK
IENhbGxGcmFtZSogSlNHbG9iYWxPYmplY3Q6OmRlcHJlY2F0ZWRDYWxsRnJhbWVGb3JEZWJ1Z2dl
cigpCiB7CiAgICAgcmV0dXJuIENhbGxGcmFtZTo6Y3JlYXRlKG1fZGVwcmVjYXRlZENhbGxGcmFt
ZUZvckRlYnVnZ2VyKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xv
YmFsT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNHbG9iYWxPYmplY3QuaAkocmV2aXNpb24gMjcyMjk3KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtNjA5LDcgKzYw
OSw3IEBAIHB1YmxpYzoKICAgICBKU19FWFBPUlRfUFJJVkFURSB+SlNHbG9iYWxPYmplY3QoKTsK
ICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwogCi0g
ICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBT
bG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfRVhQT1JUX1ZJU0lUX0NISUxEUkVOOwogCiAgICAg
SlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0
KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwogICAgIEpT
X0VYUE9SVF9QUklWQVRFIHN0YXRpYyBib29sIHB1dChKU0NlbGwqLCBKU0dsb2JhbE9iamVjdCos
IFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgUHV0UHJvcGVydHlTbG90Jik7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ltbXV0YWJsZUJ1dHRlcmZseS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbW11dGFibGVCdXR0ZXJmbHku
Y3BwCShyZXZpc2lvbiAyNzIyOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0ltbXV0YWJsZUJ1dHRlcmZseS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDggQEAg
bmFtZXNwYWNlIEpTQyB7CiAKIGNvbnN0IENsYXNzSW5mbyBKU0ltbXV0YWJsZUJ1dHRlcmZseTo6
c19pbmZvID0geyAiSW1tdXRhYmxlIEJ1dHRlcmZseSIsIG51bGxwdHIsIG51bGxwdHIsIG51bGxw
dHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNJbW11dGFibGVCdXR0ZXJmbHkpIH07CiAKLXZvaWQg
SlNJbW11dGFibGVCdXR0ZXJmbHk6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90Vmlz
aXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTSW1tdXRh
YmxlQnV0dGVyZmx5Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZp
c2l0b3IpCiB7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjZWxsLCBpbmZvKCkpOwog
ICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4oY2VsbCwgdmlzaXRvcik7CkBAIC00NSw2ICs0Niw4IEBA
IHZvaWQgSlNJbW11dGFibGVCdXR0ZXJmbHk6OnZpc2l0Q2hpbGRyZW4KICAgICB2aXNpdG9yLmFw
cGVuZFZhbHVlc0hpZGRlbihidXR0ZXJmbHktPmNvbnRpZ3VvdXMoKS5kYXRhKCksIGJ1dHRlcmZs
eS0+cHVibGljTGVuZ3RoKCkpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNJbW11dGFi
bGVCdXR0ZXJmbHkpOworCiB2b2lkIEpTSW1tdXRhYmxlQnV0dGVyZmx5Ojpjb3B5VG9Bcmd1bWVu
dHMoSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlKiBmaXJzdEVsZW1lbnREZXN0LCB1bnNpZ25lZCBv
ZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKIHsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bGVuZ3RoOyArK2kpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTSW1t
dXRhYmxlQnV0dGVyZmx5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNJbW11dGFibGVCdXR0ZXJmbHkuaAkocmV2aXNpb24gMjcyMjk3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbW11dGFibGVCdXR0ZXJmbHkuaAkod29ya2luZyBj
b3B5KQpAQCAtMTQ1LDcgKzE0NSw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGpzRG91Ymxl
TnVtYmVyKHZhbHVlKTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpT
Q2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAg
IHZvaWQgY29weVRvQXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSogZmlyc3RFbGVt
ZW50RGVzdCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOwogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ludGVybmFsRmllbGRPYmplY3RJbXBsLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbnRlcm5hbEZpZWxk
T2JqZWN0SW1wbC5oCShyZXZpc2lvbiAyNzIyOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0ludGVybmFsRmllbGRPYmplY3RJbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTY2
LDcgKzY2LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZJbnRlcm5h
bEZpZWxkKHVuc2lnbmVkIGluZGV4KSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNJbnRlcm5h
bEZpZWxkT2JqZWN0SW1wbCwgbV9pbnRlcm5hbEZpZWxkcykgKyBpbmRleCAqIHNpemVvZihXcml0
ZUJhcnJpZXI8VW5rbm93bj4pOyB9CiAKIHByb3RlY3RlZDoKLSAgICBzdGF0aWMgdm9pZCB2aXNp
dENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9URU1QTEFURV9W
SVNJVF9DSElMRFJFTjsKIAogICAgIEpTSW50ZXJuYWxGaWVsZE9iamVjdEltcGwoVk0mIHZtLCBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSkKICAgICAgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ludGVybmFsRmllbGRPYmplY3RJbXBs
SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
SW50ZXJuYWxGaWVsZE9iamVjdEltcGxJbmxpbmVzLmgJKHJldmlzaW9uIDI3MjI5NykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTSW50ZXJuYWxGaWVsZE9iamVjdEltcGxJbmxp
bmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDggQEAKIG5hbWVzcGFjZSBKU0Mgewog
CiB0ZW1wbGF0ZTx1bnNpZ25lZCBwYXNzZWROdW1iZXJPZkludGVybmFsRmllbGRzPgotdm9pZCBK
U0ludGVybmFsRmllbGRPYmplY3RJbXBsPHBhc3NlZE51bWJlck9mSW50ZXJuYWxGaWVsZHM+Ojp2
aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0
ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0ludGVybmFsRmllbGRPYmplY3RJbXBsPHBhc3Nl
ZE51bWJlck9mSW50ZXJuYWxGaWVsZHM+Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGws
IFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0lu
dGVybmFsRmllbGRPYmplY3RJbXBsKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhF
UklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtMzgsNCArMzksNiBAQCB2b2lkIEpTSW50ZXJu
YWxGaWVsZE9iamVjdEltcGw8cGFzc2VkTnVtCiAgICAgdmlzaXRvci5hcHBlbmRWYWx1ZXModGhp
c09iamVjdC0+bV9pbnRlcm5hbEZpZWxkcywgbnVtYmVyT2ZJbnRlcm5hbEZpZWxkcyk7CiB9CiAK
K0RFRklORV9URU1QTEFURV9WSVNJVF9DSElMRFJFTih0ZW1wbGF0ZTx1bnNpZ25lZCBwYXNzZWRO
dW1iZXJPZkludGVybmFsRmllbGRzPiwgSlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbDxwYXNzZWRO
dW1iZXJPZkludGVybmFsRmllbGRzPik7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMZXhpY2FsRW52aXJvbm1lbnQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTGV4aWNhbEVudmlyb25t
ZW50LmNwcAkocmV2aXNpb24gMjcyMjk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNMZXhpY2FsRW52aXJvbm1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3ICszNiw4
IEBAIG5hbWVzcGFjZSBKU0MgewogCiBjb25zdCBDbGFzc0luZm8gSlNMZXhpY2FsRW52aXJvbm1l
bnQ6OnNfaW5mbyA9IHsgIkpTTGV4aWNhbEVudmlyb25tZW50IiwgJkJhc2U6OnNfaW5mbywgbnVs
bHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU0xleGljYWxFbnZpcm9ubWVudCkg
fTsKIAotdm9pZCBKU0xleGljYWxFbnZpcm9ubWVudDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNl
bGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3Zv
aWQgSlNMZXhpY2FsRW52aXJvbm1lbnQ6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwg
VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTTGV4
aWNhbEVudmlyb25tZW50Kj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0
aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNDQsNiArNDUsOCBAQCB2b2lkIEpTTGV4aWNhbEVudmly
b25tZW50Ojp2aXNpdENoaWxkcmVuCiAgICAgdmlzaXRvci5hcHBlbmRWYWx1ZXNIaWRkZW4odGhp
c09iamVjdC0+dmFyaWFibGVzKCksIHRoaXNPYmplY3QtPnN5bWJvbFRhYmxlKCktPnNjb3BlU2l6
ZSgpKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTTGV4aWNhbEVudmlyb25tZW50KTsK
Kwogdm9pZCBKU0xleGljYWxFbnZpcm9ubWVudDo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBI
ZWFwQW5hbHl6ZXImIGFuYWx5emVyKQogewogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8
SlNMZXhpY2FsRW52aXJvbm1lbnQqPihjZWxsKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTTGV4aWNhbEVudmlyb25tZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMZXhpY2FsRW52aXJvbm1lbnQuaAkocmV2aXNpb24gMjcy
Mjk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMZXhpY2FsRW52aXJvbm1l
bnQuaAkod29ya2luZyBjb3B5KQpAQCAtMTM0LDcgKzEzNCw3IEBAIHByb3RlY3RlZDoKICAgICAg
ICAgfQogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xv
dFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogICAgIHN0YXRpYyB2b2lk
IGFuYWx5emVIZWFwKEpTQ2VsbCosIEhlYXBBbmFseXplciYpOwogfTsKIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNYXBJdGVyYXRvci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNYXBJdGVyYXRvci5jcHAJKHJldmlzaW9u
IDI3MjI5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTWFwSXRlcmF0b3Iu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NywxMyArNTcsMTYgQEAgdm9pZCBKU01hcEl0ZXJhdG9y
OjpmaW5pc2hDcmVhdGlvbihWTSYgdgogICAgICAgICBCYXNlOjppbnRlcm5hbEZpZWxkKGluZGV4
KS5zZXQodm0sIHRoaXMsIHZhbHVlc1tpbmRleF0pOwogfQogCi12b2lkIEpTTWFwSXRlcmF0b3I6
OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBs
YXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTTWFwSXRlcmF0b3I6OnZpc2l0Q2hpbGRyZW5J
bXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBhdXRvKiB0aGlzT2Jq
ZWN0ID0ganNDYXN0PEpTTWFwSXRlcmF0b3IqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNU
X0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0
aGlzT2JqZWN0LCB2aXNpdG9yKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTTWFwSXRl
cmF0b3IpOworCiBKU1ZhbHVlIEpTTWFwSXRlcmF0b3I6OmNyZWF0ZVBhaXIoSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBrZXksIEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgTWFy
a2VkQXJndW1lbnRCdWZmZXIgYXJnczsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTTWFwSXRlcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU01hcEl0ZXJhdG9yLmgJKHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTTWFwSXRlcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMTQy
LDcgKzE0Miw3IEBAIHByaXZhdGU6CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBmaW5pc2hD
cmVhdGlvbihWTSYsIEpTTWFwKiwgSXRlcmF0aW9uS2luZCk7CiAgICAgdm9pZCBmaW5pc2hDcmVh
dGlvbihWTSYpOwogICAgIEpTVmFsdWUgY3JlYXRlUGFpcihKU0dsb2JhbE9iamVjdCosIEpTVmFs
dWUsIEpTVmFsdWUpOwotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xv
dFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogfTsKIFNUQVRJQ19BU1NF
UlRfSVNfVFJJVklBTExZX0RFU1RSVUNUSUJMRShKU01hcEl0ZXJhdG9yKTsKIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVFbnZpcm9ubWVudC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVFbnZpcm9ubWVu
dC5jcHAJKHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTTW9kdWxlRW52aXJvbm1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NSw3ICs2NSw4IEBA
IHZvaWQgSlNNb2R1bGVFbnZpcm9ubWVudDo6ZmluaXNoQ3JlYXRpb24KICAgICB0aGlzLT5tb2R1
bGVSZWNvcmRTbG90KCkuc2V0KHZtLCB0aGlzLCBtb2R1bGVSZWNvcmQpOwogfQogCi12b2lkIEpT
TW9kdWxlRW52aXJvbm1lbnQ6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRv
ciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTTW9kdWxlRW52
aXJvbm1lbnQ6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRv
cikKIHsKICAgICBKU01vZHVsZUVudmlyb25tZW50KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTTW9k
dWxlRW52aXJvbm1lbnQqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRo
aXNPYmplY3QsIGluZm8oKSk7CkBAIC03NCw2ICs3NSw4IEBAIHZvaWQgSlNNb2R1bGVFbnZpcm9u
bWVudDo6dmlzaXRDaGlsZHJlbigKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tb2R1
bGVSZWNvcmRTbG90KCkpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNNb2R1bGVFbnZp
cm9ubWVudCk7CisKIGJvb2wgSlNNb2R1bGVFbnZpcm9ubWVudDo6Z2V0T3duUHJvcGVydHlTbG90
KEpTT2JqZWN0KiBjZWxsLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5h
bWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgVk0mIHZtID0gZ2xv
YmFsT2JqZWN0LT52bSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNN
b2R1bGVFbnZpcm9ubWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTTW9kdWxlRW52aXJvbm1lbnQuaAkocmV2aXNpb24gMjcyMjk3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVFbnZpcm9ubWVudC5oCSh3b3JraW5nIGNv
cHkpCkBAIC04OSw3ICs4OSw3IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiAqYml0d2lzZV9j
YXN0PFdyaXRlQmFycmllckJhc2U8QWJzdHJhY3RNb2R1bGVSZWNvcmQ+Kj4oYml0d2lzZV9jYXN0
PGNoYXIqPih0aGlzKSArIG9mZnNldE9mTW9kdWxlUmVjb3JkKHN5bWJvbFRhYmxlKCkpKTsKICAg
ICB9CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9y
Jik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIH07CiAKIGlubGluZSBKU01vZHVsZUVu
dmlyb25tZW50OjpKU01vZHVsZUVudmlyb25tZW50KFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUsIEpTU2NvcGUqIGN1cnJlbnRTY29wZSwgU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlKQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVOYW1lc3BhY2VPYmplY3Qu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxl
TmFtZXNwYWNlT2JqZWN0LmNwcAkocmV2aXNpb24gMjcyMjk3KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC04NSw3ICs4NSw4IEBAIHZvaWQgSlNNb2R1bGVOYW1lc3BhY2VPYmplY3Q6OmRlc3Ryb3ko
SlMKICAgICB0aGlzT2JqZWN0LT5KU01vZHVsZU5hbWVzcGFjZU9iamVjdDo6fkpTTW9kdWxlTmFt
ZXNwYWNlT2JqZWN0KCk7CiB9CiAKLXZvaWQgSlNNb2R1bGVOYW1lc3BhY2VPYmplY3Q6OnZpc2l0
Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5
cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0Ojp2aXNpdENoaWxk
cmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNNb2R1bGVO
YW1lc3BhY2VPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNNb2R1bGVOYW1lc3BhY2VPYmpl
Y3QqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGlu
Zm8oKSk7CkBAIC05OCw2ICs5OSw4IEBAIHZvaWQgSlNNb2R1bGVOYW1lc3BhY2VPYmplY3Q6OnZp
c2l0Q2hpbGQKICAgICB9CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU01vZHVsZU5hbWVz
cGFjZU9iamVjdCk7CisKIHN0YXRpYyBKU1ZhbHVlIGdldFZhbHVlKEpTTW9kdWxlRW52aXJvbm1l
bnQqIGVudmlyb25tZW50LCBQcm9wZXJ0eU5hbWUgbG9jYWxOYW1lLCBTY29wZU9mZnNldCYgc2Nv
cGVPZmZzZXQpCiB7CiAgICAgU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlID0gZW52aXJvbm1lbnQt
PnN5bWJvbFRhYmxlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01v
ZHVsZU5hbWVzcGFjZU9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTTW9kdWxlTmFtZXNwYWNlT2JqZWN0LmgJKHJldmlzaW9uIDI3MjI5NykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlTmFtZXNwYWNlT2JqZWN0LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTcyLDcgKzcyLDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBK
U19FWFBPUlRfUFJJVkFURSBKU01vZHVsZU5hbWVzcGFjZU9iamVjdChWTSYsIFN0cnVjdHVyZSop
OwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxPYmpl
Y3QqLCBBYnN0cmFjdE1vZHVsZVJlY29yZCosIFZlY3RvcjxzdGQ6OnBhaXI8SWRlbnRpZmllciwg
QWJzdHJhY3RNb2R1bGVSZWNvcmQ6OlJlc29sdXRpb24+PiYmKTsKLSAgICBzdGF0aWMgdm9pZCB2
aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9D
SElMRFJFTjsKICAgICBib29sIGdldE93blByb3BlcnR5U2xvdENvbW1vbihKU0dsb2JhbE9iamVj
dCosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CiAKICAgICBzdHJ1Y3QgRXhwb3J0RW50
cnkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVSZWNvcmQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxl
UmVjb3JkLmNwcAkocmV2aXNpb24gMjcyMjk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNNb2R1bGVSZWNvcmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MCw3ICs3MCw4IEBA
IHZvaWQgSlNNb2R1bGVSZWNvcmQ6OmZpbmlzaENyZWF0aW9uKEpTR2wKICAgICBBU1NFUlQoaW5o
ZXJpdHModm0sIGluZm8oKSkpOwogfQogCi12b2lkIEpTTW9kdWxlUmVjb3JkOjp2aXNpdENoaWxk
cmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBWaXNpdG9yPgordm9pZCBKU01vZHVsZVJlY29yZDo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxs
KiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTTW9kdWxlUmVjb3JkKiB0aGlzT2Jq
ZWN0ID0ganNDYXN0PEpTTW9kdWxlUmVjb3JkKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVD
VF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNzgsNiArNzksOCBAQCB2b2lkIEpT
TW9kdWxlUmVjb3JkOjp2aXNpdENoaWxkcmVuKEpTQ2VsCiAgICAgdmlzaXRvci5hcHBlbmQodGhp
c09iamVjdC0+bV9tb2R1bGVQcm9ncmFtRXhlY3V0YWJsZSk7CiB9CiAKK0RFRklORV9WSVNJVF9D
SElMRFJFTihKU01vZHVsZVJlY29yZCk7CisKIHZvaWQgSlNNb2R1bGVSZWNvcmQ6OmxpbmsoSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBzY3JpcHRGZXRjaGVyKQogewogICAg
IFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTTW9kdWxlUmVjb3JkLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVSZWNvcmQuaAkocmV2aXNpb24gMjcyMjk3KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVSZWNvcmQuaAkod29ya2luZyBjb3B5
KQpAQCAtNjYsNyArNjYsNyBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihK
U0dsb2JhbE9iamVjdCosIFZNJik7CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpT
Q2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAg
IHZvaWQgaW5zdGFudGlhdGVEZWNsYXJhdGlvbnMoSlNHbG9iYWxPYmplY3QqLCBNb2R1bGVQcm9n
cmFtRXhlY3V0YWJsZSosIEpTVmFsdWUgc2NyaXB0RmV0Y2hlcik7CiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTmF0aXZlU3RkRnVuY3Rpb24uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTmF0aXZlU3RkRnVuY3Rpb24uY3Bw
CShyZXZpc2lvbiAyNzIyOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU05h
dGl2ZVN0ZEZ1bmN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEsMTMgKzQxLDE2IEBAIEpT
TmF0aXZlU3RkRnVuY3Rpb246OkpTTmF0aXZlU3RkRnVuY3Rpb24KIHsKIH0KIAotdm9pZCBKU05h
dGl2ZVN0ZEZ1bmN0aW9uOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3Im
IHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU05hdGl2ZVN0ZEZ1
bmN0aW9uOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3Ip
CiB7CiAgICAgSlNOYXRpdmVTdGRGdW5jdGlvbiogdGhpc09iamVjdCA9IGpzQ2FzdDxKU05hdGl2
ZVN0ZEZ1bmN0aW9uKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlz
T2JqZWN0LCBpbmZvKCkpOwogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlz
aXRvcik7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU05hdGl2ZVN0ZEZ1bmN0aW9uKTsK
Kwogdm9pZCBKU05hdGl2ZVN0ZEZ1bmN0aW9uOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIE5hdGl2
ZUV4ZWN1dGFibGUqIGV4ZWN1dGFibGUsIHVuc2lnbmVkIGxlbmd0aCwgY29uc3QgU3RyaW5nJiBu
YW1lKQogewogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtLCBleGVjdXRhYmxlLCBsZW5ndGgs
IG5hbWUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNOYXRpdmVTdGRG
dW5jdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
TmF0aXZlU3RkRnVuY3Rpb24uaAkocmV2aXNpb24gMjcyMjk3KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNOYXRpdmVTdGRGdW5jdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC02
NSw3ICs2NSw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgSlNOYXRpdmVTdGRGdW5jdGlvbihW
TSYsIE5hdGl2ZUV4ZWN1dGFibGUqLCBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSosIE5hdGl2
ZVN0ZEZ1bmN0aW9uJiYpOwogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBOYXRpdmVFeGVj
dXRhYmxlKiwgdW5zaWduZWQgbGVuZ3RoLCBjb25zdCBTdHJpbmcmIG5hbWUpOwotICAgIHN0YXRp
YyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJF
X1ZJU0lUX0NISUxEUkVOOwogCiAgICAgTmF0aXZlU3RkRnVuY3Rpb24gbV9mdW5jdGlvbjsKIH07
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCShyZXZp
c2lvbiAyNzIyOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTcyLDcgKzcyLDggQEAgY29uc3QgQ2xhc3NJbmZvIEpTT2Jq
ZWN0OjpzX2luZm8gPSB7ICJPYgogCiBjb25zdCBDbGFzc0luZm8gSlNGaW5hbE9iamVjdDo6c19p
bmZvID0geyAiT2JqZWN0IiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRF
X01FVEhPRF9UQUJMRShKU0ZpbmFsT2JqZWN0KSB9OwogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSlNP
YmplY3Q6Om1hcmtBdXhpbGlhcnlBbmRWaXNpdE91dE9mTGluZVByb3BlcnRpZXMoU2xvdFZpc2l0
b3ImIHZpc2l0b3IsIEJ1dHRlcmZseSogYnV0dGVyZmx5LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwg
UHJvcGVydHlPZmZzZXQgbWF4T2Zmc2V0KQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK0FM
V0FZU19JTkxJTkUgdm9pZCBKU09iamVjdDo6bWFya0F1eGlsaWFyeUFuZFZpc2l0T3V0T2ZMaW5l
UHJvcGVydGllcyhWaXNpdG9yJiB2aXNpdG9yLCBCdXR0ZXJmbHkqIGJ1dHRlcmZseSwgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IG1heE9mZnNldCkKIHsKICAgICAvLyBXZSBj
YWxsIHRoaXMgd2hlbiB3ZSBmb3VuZCBldmVyeXRoaW5nIHdpdGhvdXQgcmFjZXMuCiAgICAgQVNT
RVJUKHN0cnVjdHVyZSk7CkBAIC0xMDMsNyArMTA0LDggQEAgQUxXQVlTX0lOTElORSB2b2lkIEpT
T2JqZWN0OjptYXJrQXV4aWxpYQogICAgIHZpc2l0b3IuYXBwZW5kVmFsdWVzSGlkZGVuKGJ1dHRl
cmZseS0+cHJvcGVydHlTdG9yYWdlKCkgLSBvdXRPZkxpbmVTaXplLCBvdXRPZkxpbmVTaXplKTsK
IH0KIAotQUxXQVlTX0lOTElORSBTdHJ1Y3R1cmUqIEpTT2JqZWN0Ojp2aXNpdEJ1dHRlcmZseShT
bG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+CitBTFdBWVNf
SU5MSU5FIFN0cnVjdHVyZSogSlNPYmplY3Q6OnZpc2l0QnV0dGVyZmx5KFZpc2l0b3ImIHZpc2l0
b3IpCiB7CiAgICAgc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IHJhY2VSZWFzb24gPSAiSlNPYmpl
Y3Q6OnZpc2l0QnV0dGVyZmx5IjsKICAgICBTdHJ1Y3R1cmUqIHJlc3VsdCA9IHZpc2l0QnV0dGVy
Zmx5SW1wbCh2aXNpdG9yKTsKQEAgLTExMiw3ICsxMTQsOCBAQCBBTFdBWVNfSU5MSU5FIFN0cnVj
dHVyZSogSlNPYmplY3Q6OnZpc2l0CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotQUxXQVlTX0lO
TElORSBTdHJ1Y3R1cmUqIEpTT2JqZWN0Ojp2aXNpdEJ1dHRlcmZseUltcGwoU2xvdFZpc2l0b3Im
IHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgorQUxXQVlTX0lOTElORSBTdHJ1
Y3R1cmUqIEpTT2JqZWN0Ojp2aXNpdEJ1dHRlcmZseUltcGwoVmlzaXRvciYgdmlzaXRvcikKIHsK
ICAgICBWTSYgdm0gPSB2aXNpdG9yLnZtKCk7CiAgICAgCkBAIC00MTIsMjQgKzQxNSwyMCBAQCBz
aXplX3QgSlNPYmplY3Q6OmVzdGltYXRlZFNpemUoSlNDZWxsKiBjCiAgICAgcmV0dXJuIEJhc2U6
OmVzdGltYXRlZFNpemUoY2VsbCwgdm0pICsgYnV0dGVyZmx5T3V0T2ZMaW5lU2l6ZTsKIH0KIAot
dm9pZCBKU09iamVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNPYmplY3Q6OnZpc2l0
Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU09i
amVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU09iamVjdCo+KGNlbGwpOwogICAgIEFTU0VSVF9H
Q19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKLSNpZiBBU1NFUlRfRU5BQkxF
RAotICAgIGJvb2wgd2FzQ2hlY2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlvbiA9IHZpc2l0b3Iu
bV9pc0NoZWNraW5nRm9yRGVmYXVsdE1hcmtWaW9sYXRpb247Ci0gICAgdmlzaXRvci5tX2lzQ2hl
Y2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlvbiA9IGZhbHNlOwotI2VuZGlmCi0gICAgCisgICAg
dHlwZW5hbWUgVmlzaXRvcjo6RGVmYXVsdE1hcmtpbmdWaW9sYXRpb25Bc3NlcnRpb25TY29wZSBh
c3NlcnRpb25TY29wZSh2aXNpdG9yKTsKKwogICAgIEpTQ2VsbDo6dmlzaXRDaGlsZHJlbih0aGlz
T2JqZWN0LCB2aXNpdG9yKTsKLSAgICAKKwogICAgIHRoaXNPYmplY3QtPnZpc2l0QnV0dGVyZmx5
KHZpc2l0b3IpOwotICAgIAotI2lmIEFTU0VSVF9FTkFCTEVECi0gICAgdmlzaXRvci5tX2lzQ2hl
Y2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlvbiA9IHdhc0NoZWNraW5nRm9yRGVmYXVsdE1hcmtW
aW9sYXRpb247Ci0jZW5kaWYKIH0KIAorREVGSU5FX0VYUE9SVF9WSVNJVF9DSElMRFJFTihKU09i
amVjdCk7CisKIHZvaWQgSlNPYmplY3Q6OmFuYWx5emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFu
YWx5emVyJiBhbmFseXplcikKIHsKICAgICBKU09iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxK
U09iamVjdCo+KGNlbGwpOwpAQCAtNDY4LDE0ICs0NjcsMTIgQEAgdm9pZCBKU09iamVjdDo6YW5h
bHl6ZUhlYXAoSlNDZWxsKiBjZWxsLAogICAgIH0KIH0KIAotdm9pZCBKU0ZpbmFsT2JqZWN0Ojp2
aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0
ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0ZpbmFsT2JqZWN0Ojp2aXNpdENoaWxkcmVuSW1w
bChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNGaW5hbE9iamVjdCog
dGhpc09iamVjdCA9IGpzQ2FzdDxKU0ZpbmFsT2JqZWN0Kj4oY2VsbCk7CiAgICAgQVNTRVJUX0dD
X09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwotI2lmIEFTU0VSVF9FTkFCTEVE
Ci0gICAgYm9vbCB3YXNDaGVja2luZ0ZvckRlZmF1bHRNYXJrVmlvbGF0aW9uID0gdmlzaXRvci5t
X2lzQ2hlY2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlvbjsKLSAgICB2aXNpdG9yLm1faXNDaGVj
a2luZ0ZvckRlZmF1bHRNYXJrVmlvbGF0aW9uID0gZmFsc2U7Ci0jZW5kaWYKKyAgICB0eXBlbmFt
ZSBWaXNpdG9yOjpEZWZhdWx0TWFya2luZ1Zpb2xhdGlvbkFzc2VydGlvblNjb3BlIGFzc2VydGlv
blNjb3BlKHZpc2l0b3IpOwogICAgIAogICAgIEpTQ2VsbDo6dmlzaXRDaGlsZHJlbih0aGlzT2Jq
ZWN0LCB2aXNpdG9yKTsKICAgICAKQEAgLTQ4MywxMiArNDgwLDEwIEBAIHZvaWQgSlNGaW5hbE9i
amVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwKICAgICAgICAgaWYgKHVuc2lnbmVkIHN0b3JhZ2VT
aXplID0gc3RydWN0dXJlLT5pbmxpbmVTaXplKCkpCiAgICAgICAgICAgICB2aXNpdG9yLmFwcGVu
ZFZhbHVlc0hpZGRlbih0aGlzT2JqZWN0LT5pbmxpbmVTdG9yYWdlKCksIHN0b3JhZ2VTaXplKTsK
ICAgICB9Ci0gICAgCi0jaWYgQVNTRVJUX0VOQUJMRUQKLSAgICB2aXNpdG9yLm1faXNDaGVja2lu
Z0ZvckRlZmF1bHRNYXJrVmlvbGF0aW9uID0gd2FzQ2hlY2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xh
dGlvbjsKLSNlbmRpZgogfQogCitERUZJTkVfRVhQT1JUX1ZJU0lUX0NISUxEUkVOKEpTRmluYWxP
YmplY3QpOworCiBTdHJpbmcgSlNPYmplY3Q6OmNsYXNzTmFtZShjb25zdCBKU09iamVjdCogb2Jq
ZWN0LCBWTSYgdm0pCiB7CiAgICAgY29uc3QgQ2xhc3NJbmZvKiBpbmZvID0gb2JqZWN0LT5jbGFz
c0luZm8odm0pOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3Qu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5o
CShyZXZpc2lvbiAyNzIyOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09i
amVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDgsOCArMTA4LDkgQEAgY2xhc3MgSlNPYmplY3Qg
OiBwdWJsaWMgSlNDZWxsIHsKIHB1YmxpYzoKICAgICB1c2luZyBCYXNlID0gSlNDZWxsOwogCisg
ICAgREVDTEFSRV9FWFBPUlRfVklTSVRfQ0hJTERSRU47CisKICAgICBKU19FWFBPUlRfUFJJVkFU
RSBzdGF0aWMgc2l6ZV90IGVzdGltYXRlZFNpemUoSlNDZWxsKiwgVk0mKTsKLSAgICBKU19FWFBP
UlRfUFJJVkFURSBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9y
Jik7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgYW5hbHl6ZUhlYXAoSlNDZWxs
KiwgSGVhcEFuYWx5emVyJik7CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgU3RyaW5n
IGNsYXNzTmFtZShjb25zdCBKU09iamVjdCosIFZNJik7CkBAIC05ODAsMTEgKzk4MSwxMSBAQCBw
cm90ZWN0ZWQ6CiAgICAgSlNPYmplY3QoVk0mLCBTdHJ1Y3R1cmUqLCBCdXR0ZXJmbHkqID0gbnVs
bHB0cik7CiAgICAgCiAgICAgLy8gVmlzaXRzIHRoZSBidXR0ZXJmbHkgdW5sZXNzIHRoZXJlIGlz
IGEgcmFjZS4gUmV0dXJucyB0aGUgc3RydWN0dXJlIGlmIHRoZXJlIHdhcyBubyByYWNlLgotICAg
IFN0cnVjdHVyZSogdmlzaXRCdXR0ZXJmbHkoU2xvdFZpc2l0b3ImKTsKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBWaXNpdG9yPiBTdHJ1Y3R1cmUqIHZpc2l0QnV0dGVyZmx5KFZpc2l0b3ImKTsKICAg
ICAKLSAgICBTdHJ1Y3R1cmUqIHZpc2l0QnV0dGVyZmx5SW1wbChTbG90VmlzaXRvciYpOworICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IFN0cnVjdHVyZSogdmlzaXRCdXR0ZXJmbHlJbXBs
KFZpc2l0b3ImKTsKICAgICAKLSAgICB2b2lkIG1hcmtBdXhpbGlhcnlBbmRWaXNpdE91dE9mTGlu
ZVByb3BlcnRpZXMoU2xvdFZpc2l0b3ImLCBCdXR0ZXJmbHkqLCBTdHJ1Y3R1cmUqLCBQcm9wZXJ0
eU9mZnNldCBtYXhPZmZzZXQpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQg
bWFya0F1eGlsaWFyeUFuZFZpc2l0T3V0T2ZMaW5lUHJvcGVydGllcyhWaXNpdG9yJiwgQnV0dGVy
Zmx5KiwgU3RydWN0dXJlKiwgUHJvcGVydHlPZmZzZXQgbWF4T2Zmc2V0KTsKIAogICAgIC8vIENh
bGwgdGhpcyBpZiB5b3Uga25vdyB0aGF0IHRoZSBvYmplY3QgaXMgaW4gYSBtb2RlIHdoZXJlIGl0
IGhhcyBhcnJheQogICAgIC8vIHN0b3JhZ2UuIFRoaXMgd2lsbCBhc3NlcnQgb3RoZXJ3aXNlLgpA
QCAtMTE3Miw4ICsxMTczLDYgQEAgcHJvdGVjdGVkOgogICAgIH0KIH07CiAKLWNsYXNzIEpTRmlu
YWxPYmplY3Q7Ci0KIC8vIEpTRmluYWxPYmplY3QgaXMgYSB0eXBlIG9mIEpTT2JqZWN0IHRoYXQg
Y29udGFpbnMgc3VmZmljaWVudCBpbnRlcm5hbAogLy8gc3RvcmFnZSB0byBmdWxseSBtYWtlIHVz
ZSBvZiB0aGUgY29sbGVjdG9yIGNlbGwgY29udGFpbmluZyBpdC4KIGNsYXNzIEpTRmluYWxPYmpl
Y3QgZmluYWwgOiBwdWJsaWMgSlNPYmplY3QgewpAQCAtMTIxMiwxNSArMTIxMSwxMyBAQCBwdWJs
aWM6CiAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBw
cm90b3R5cGUsIHR5cGVJbmZvKCksIGluZm8oKSwgZGVmYXVsdEluZGV4aW5nVHlwZSwgaW5saW5l
Q2FwYWNpdHkpOwogICAgIH0KIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIHZp
c2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX0VYUE9SVF9W
SVNJVF9DSElMRFJFTjsKIAogICAgIERFQ0xBUkVfRVhQT1JUX0lORk87CiAKIHByaXZhdGU6CiAg
ICAgZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKIAotICAgIHZvaWQgdmlzaXRD
aGlsZHJlbkNvbW1vbihTbG90VmlzaXRvciYpOwotCiAgICAgZXhwbGljaXQgSlNGaW5hbE9iamVj
dChWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBCdXR0ZXJmbHkqIGJ1dHRlcmZseSkKICAg
ICAgICAgOiBKU09iamVjdCh2bSwgc3RydWN0dXJlLCBidXR0ZXJmbHkpCiAgICAgewpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9taXNlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb21pc2UuY3BwCShyZXZpc2lvbiAy
NzIyOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb21pc2UuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC02NywxMyArNjcsMTYgQEAgdm9pZCBKU1Byb21pc2U6OmZpbmlzaENy
ZWF0aW9uKFZNJiB2bSkKICAgICAgICAgQmFzZTo6aW50ZXJuYWxGaWVsZChpbmRleCkuc2V0KHZt
LCB0aGlzLCB2YWx1ZXNbaW5kZXhdKTsKIH0KIAotdm9pZCBKU1Byb21pc2U6OnZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1l
IFZpc2l0b3I+Cit2b2lkIEpTUHJvbWlzZTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxs
LCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNQ
cm9taXNlKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0
LCBpbmZvKCkpOwogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7
CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU1Byb21pc2UpOworCiBhdXRvIEpTUHJvbWlz
ZTo6c3RhdHVzKFZNJikgY29uc3QgLT4gU3RhdHVzCiB7CiAgICAgSlNWYWx1ZSB2YWx1ZSA9IGlu
dGVybmFsRmllbGQoRmllbGQ6OkZsYWdzKS5nZXQoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTUHJvbWlzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTUHJvbWlzZS5oCShyZXZpc2lvbiAyNzIyOTcpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb21pc2UuaAkod29ya2luZyBjb3B5KQpAQCAtOTYsNyAr
OTYsNyBAQCBwdWJsaWM6CiAgICAgfTsKICAgICBzdGF0aWMgRGVmZXJyZWREYXRhIGNyZWF0ZURl
ZmVycmVkRGF0YShKU0dsb2JhbE9iamVjdCosIEpTUHJvbWlzZUNvbnN0cnVjdG9yKik7CiAKLSAg
ICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAg
REVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogcHJvdGVjdGVkOgogICAgIEpTUHJvbWlzZShWTSYs
IFN0cnVjdHVyZSopOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9w
ZXJ0eU5hbWVFbnVtZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuY3BwCShyZXZpc2lvbiAyNzIyOTcp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3BlcnR5TmFtZUVudW1lcmF0
b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MCw3ICs3MCw4IEBAIHZvaWQgSlNQcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yOjpmaW5pc2hDcmUKICAgICB9CiB9CiAKLXZvaWQgSlNQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0
b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1Byb3BlcnR5TmFtZUVudW1l
cmF0b3I6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikK
IHsKICAgICBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNQ
cm9wZXJ0eU5hbWVFbnVtZXJhdG9yKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhF
UklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtODcsNiArODgsOCBAQCB2b2lkIEpTUHJvcGVy
dHlOYW1lRW51bWVyYXRvcjo6dmlzaXRDaGlsCiAgICAgfQogfQogCitERUZJTkVfVklTSVRfQ0hJ
TERSRU4oSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKTsKKwogLy8gRklYTUU6IEFzc2VydCB0aGF0
IHByb3BlcnRpZXMgcmV0dXJuZWQgYnkgZ2V0T3duUHJvcGVydHlOYW1lcygpIGFyZSByZXBvcnRl
ZCBlbnVtZXJhYmxlIGJ5IGdldE93blByb3BlcnR5U2xvdCgpLgogLy8gaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxOTkyNgogdm9pZCBnZXRFbnVtZXJhYmxlUHJvcGVy
dHlOYW1lcyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU09iamVjdCogYmFzZSwgUHJv
cGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIHVpbnQzMl90JiBpbmRleGVkTGVuZ3RoLCB1
aW50MzJfdCYgc3RydWN0dXJlUHJvcGVydHlDb3VudCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTUHJvcGVydHlOYW1lRW51bWVyYXRvci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVydHlOYW1lRW51bWVyYXRvci5oCShy
ZXZpc2lvbiAyNzIyOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3Bl
cnR5TmFtZUVudW1lcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtODQsNyArODQsNyBAQCBwdWJs
aWM6CiAgICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yLCBtX3Byb3BlcnR5TmFtZXMpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hp
bGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVO
OwogCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3h5LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3h5LmNwcAkocmV2aXNpb24g
MjcyMjk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm94eS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM1LDcgKzM1LDggQEAgU1RBVElDX0FTU0VSVF9JU19UUklWSUFMTFlf
REVTVFJVQ1RJQkxFKAogCiBjb25zdCBDbGFzc0luZm8gSlNQcm94eTo6c19pbmZvID0geyAiSlNQ
cm94eSIsICZCYXNlOjpzX2luZm8sIG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFC
TEUoSlNQcm94eSkgfTsKIAotdm9pZCBKU1Byb3h5Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2Vs
bCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9p
ZCBKU1Byb3h5Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0
b3IpCiB7CiAgICAgSlNQcm94eSogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Byb3h5Kj4oY2VsbCk7
CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAt
NDMsNiArNDQsOCBAQCB2b2lkIEpTUHJveHk6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsCiAg
ICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV90YXJnZXQpOwogfQogCitERUZJTkVfRVhQ
T1JUX1ZJU0lUX0NISUxEUkVOKEpTUHJveHkpOworCiB2b2lkIEpTUHJveHk6OnNldFRhcmdldChW
TSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCiB7CiAgICAgbV90YXJnZXQuc2V0
KHZtLCB0aGlzLCBnbG9iYWxPYmplY3QpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNQcm94eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTUHJveHkuaAkocmV2aXNpb24gMjcyMjk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNQcm94eS5oCSh3b3JraW5nIGNvcHkpCkBAIC04NSw3ICs4NSw3IEBAIHByb3Rl
Y3RlZDoKICAgICAgICAgbV90YXJnZXQuc2V0KHZtLCB0aGlzLCB0YXJnZXQpOwogICAgIH0KIAot
ICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwg
U2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX0VYUE9SVF9WSVNJVF9DSElMRFJFTjsKIAogICAg
IEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBTdHJpbmcgY2xhc3NOYW1lKGNvbnN0IEpTT2JqZWN0
KiwgVk0mKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgU3RyaW5nIHRvU3RyaW5nTmFt
ZShjb25zdCBKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0Kik7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU1Njb3BlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU1Njb3BlLmNwcAkocmV2aXNpb24gMjcyMjk3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTY29wZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5
LDcgKzM5LDggQEAgU1RBVElDX0FTU0VSVF9JU19UUklWSUFMTFlfREVTVFJVQ1RJQkxFKAogCiBj
b25zdCBDbGFzc0luZm8gSlNTY29wZTo6c19pbmZvID0geyAiU2NvcGUiLCAmQmFzZTo6c19pbmZv
LCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTU2NvcGUpIH07CiAKLXZv
aWQgSlNTY29wZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNp
dG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNTY29wZTo6dmlzaXRDaGls
ZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTU2NvcGUq
IHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNTY29wZSo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpF
Q1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTQ3LDYgKzQ4LDggQEAgdm9pZCBK
U1Njb3BlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbAogICAgIHZpc2l0b3IuYXBwZW5kKHRo
aXNPYmplY3QtPm1fbmV4dCk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU1Njb3BlKTsK
KwogLy8gUmV0dXJucyB0cnVlIGlmIHdlIGZvdW5kIGVub3VnaCBpbmZvcm1hdGlvbiB0byB0ZXJt
aW5hdGUgb3B0aW1pemF0aW9uLgogc3RhdGljIGlubGluZSBib29sIGFic3RyYWN0QWNjZXNzKEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTU2NvcGUqIHNjb3BlLCBjb25zdCBJZGVudGlm
aWVyJiBpZGVudCwgR2V0T3JQdXQgZ2V0T3JQdXQsIHNpemVfdCBkZXB0aCwgYm9vbCYgbmVlZHNW
YXJJbmplY3Rpb25DaGVja3MsIFJlc29sdmVPcCYgb3AsIEluaXRpYWxpemF0aW9uTW9kZSBpbml0
aWFsaXphdGlvbk1vZGUpCiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U1Njb3BlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNT
Y29wZS5oCShyZXZpc2lvbiAyNzIyOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU1Njb3BlLmgJKHdvcmtpbmcgY29weSkKQEAgLTY0LDcgKzY0LDcgQEAgcHVibGljOgogCiAg
ICAgc3RhdGljIHZvaWQgY29sbGVjdENsb3N1cmVWYXJpYWJsZXNVbmRlclREWihKU1Njb3BlKiwg
VERaRW52aXJvbm1lbnQmIHJlc3VsdCwgVmFyaWFibGVFbnZpcm9ubWVudCYgcHJpdmF0ZU5hbWVz
KTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3Im
KTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgYm9vbCBpc1ZhclNjb3BlKCk7
CiAgICAgYm9vbCBpc0xleGljYWxTY29wZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdC5jcHAJ
KHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2Vn
bWVudGVkVmFyaWFibGVPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MiwxOSArNjIsMjIg
QEAgU2NvcGVPZmZzZXQgSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdDo6YQogICAgIHJldHVybiBT
Y29wZU9mZnNldChvbGRTaXplKTsKIH0KIAotdm9pZCBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0
Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yKQor
dGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVj
dDo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewog
ICAgIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNTZWdt
ZW50ZWRWYXJpYWJsZU9iamVjdCo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJ
VFModGhpc09iamVjdCwgaW5mbygpKTsKLSAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmpl
Y3QsIHNsb3RWaXNpdG9yKTsKKyAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZp
c2l0b3IpOwogICAgIAogICAgIC8vIEZJWE1FOiBXZSBjb3VsZCBhdm9pZCBsb2NraW5nIGhlcmUg
aWYgU2VnbWVudGVkVmVjdG9yIHdhcyBsb2NrLWZyZWUuIEl0IGNvdWxkIGJlIG1hZGUgbG9jay1m
cmVlCiAgICAgLy8gcmVsYXRpdmVseSBlYXNpbHkuCiAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9j
ayh0aGlzT2JqZWN0LT5jZWxsTG9jaygpKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSB0aGlzT2Jq
ZWN0LT5tX3ZhcmlhYmxlcy5zaXplKCk7IGktLTspCi0gICAgICAgIHNsb3RWaXNpdG9yLmFwcGVu
ZEhpZGRlbih0aGlzT2JqZWN0LT5tX3ZhcmlhYmxlc1tpXSk7CisgICAgICAgIHZpc2l0b3IuYXBw
ZW5kSGlkZGVuKHRoaXNPYmplY3QtPm1fdmFyaWFibGVzW2ldKTsKIH0KIAorREVGSU5FX0VYUE9S
VF9WSVNJVF9DSElMRFJFTihKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0KTsKKwogdm9pZCBKU1Nl
Z21lbnRlZFZhcmlhYmxlT2JqZWN0OjphbmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhlYXBBbmFs
eXplciYgYW5hbHl6ZXIpCiB7CiAgICAgSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdCogdGhpc09i
amVjdCA9IGpzQ2FzdDxKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0Kj4oY2VsbCk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZWdtZW50ZWRW
YXJpYWJsZU9iamVjdC5oCShyZXZpc2lvbiAyNzIyOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAg
LTg2LDcgKzg2LDcgQEAgcHVibGljOgogICAgIC8vIHRoZSBpbmRleCBvZiB0aGUgZmlyc3Qgb25l
IGFkZGVkLgogICAgIEpTX0VYUE9SVF9QUklWQVRFIFNjb3BlT2Zmc2V0IGFkZFZhcmlhYmxlcyh1
bnNpZ25lZCBudW1iZXJPZlZhcmlhYmxlc1RvQWRkLCBKU1ZhbHVlKTsKICAgICAKLSAgICBKU19F
WFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNp
dG9yJik7CisgICAgREVDTEFSRV9FWFBPUlRfVklTSVRfQ0hJTERSRU47CiAgICAgSlNfRVhQT1JU
X1BSSVZBVEUgc3RhdGljIHZvaWQgYW5hbHl6ZUhlYXAoSlNDZWxsKiwgSGVhcEFuYWx5emVyJik7
CiAgICAgCiBwcm90ZWN0ZWQ6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U1NldEl0ZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1NldEl0ZXJhdG9yLmNwcAkocmV2aXNpb24gMjcyMjk3KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNTZXRJdGVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU3
LDEzICs1NywxNiBAQCB2b2lkIEpTU2V0SXRlcmF0b3I6OmZpbmlzaENyZWF0aW9uKFZNJiB2CiAg
ICAgICAgIEJhc2U6OmludGVybmFsRmllbGQoaW5kZXgpLnNldCh2bSwgdGhpcywgdmFsdWVzW2lu
ZGV4XSk7CiB9CiAKLXZvaWQgSlNTZXRJdGVyYXRvcjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNl
bGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3Zv
aWQgSlNTZXRJdGVyYXRvcjo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9y
JiB2aXNpdG9yKQogewogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNTZXRJdGVyYXRv
cio+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5m
bygpKTsKICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwogfQog
CitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNTZXRJdGVyYXRvcik7CisKIEpTVmFsdWUgSlNTZXRJ
dGVyYXRvcjo6Y3JlYXRlUGFpcihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVl
IGtleSwgSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdzOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZXRJdGVyYXRvci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2V0SXRlcmF0b3IuaAko
cmV2aXNpb24gMjcyMjk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZXRJ
dGVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzAsNyArMTMwLDcgQEAgcHJpdmF0ZToKICAg
ICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgSlNTZXQqLCBJdGVy
YXRpb25LaW5kKTsKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7CiAgICAgSlNfRVhQT1JU
X1BSSVZBVEUgSlNWYWx1ZSBjcmVhdGVQYWlyKEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSwgSlNW
YWx1ZSk7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRv
ciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiB9OwogU1RBVElDX0FTU0VSVF9JU19U
UklWSUFMTFlfREVTVFJVQ1RJQkxFKEpTU2V0SXRlcmF0b3IpOwogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU1NvdXJjZUNvZGUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU291cmNlQ29kZS5jcHAJKHJldmlzaW9uIDI3MjI5
NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU291cmNlQ29kZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDggQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNs
dWRlICJKU1NvdXJjZUNvZGUuaCIKIAorI2luY2x1ZGUgIkpTQ2VsbElubGluZXMuaCIgLy8gbWxh
bSBURVNUCisKIG5hbWVzcGFjZSBKU0MgewogCiBjb25zdCBDbGFzc0luZm8gSlNTb3VyY2VDb2Rl
OjpzX2luZm8gPSB7ICJKU1NvdXJjZUNvZGUiLCBudWxscHRyLCBudWxscHRyLCBudWxscHRyLCBD
UkVBVEVfTUVUSE9EX1RBQkxFKEpTU291cmNlQ29kZSkgfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5jcHAJKHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTA1LDcgKzEwNSw4IEBAIHNpemVfdCBKU1N0cmluZzo6ZXN0aW1hdGVkU2l6ZShKU0NlbGwqIGMK
ICAgICByZXR1cm4gQmFzZTo6ZXN0aW1hdGVkU2l6ZShjZWxsLCB2bSkgKyBiaXR3aXNlX2Nhc3Q8
U3RyaW5nSW1wbCo+KHBvaW50ZXIpLT5jb3N0RHVyaW5nR0MoKTsKIH0KIAotdm9pZCBKU1N0cmlu
Zzo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVt
cGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNTdHJpbmc6OnZpc2l0Q2hpbGRyZW5JbXBs
KEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU1N0cmluZyogdGhpc09i
amVjdCA9IGFzU3RyaW5nKGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhp
c09iamVjdCwgaW5mbygpKTsKQEAgLTE0Myw2ICsxNDQsOCBAQCB2b2lkIEpTU3RyaW5nOjp2aXNp
dENoaWxkcmVuKEpTQ2VsbCogY2VsCiAgICAgICAgIHZpc2l0b3IucmVwb3J0RXh0cmFNZW1vcnlW
aXNpdGVkKGltcGwtPmNvc3REdXJpbmdHQygpKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVO
KEpTU3RyaW5nKTsKKwogc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBtYXhMZW5ndGhGb3JPblN0
YWNrUmVzb2x2ZSA9IDIwNDg7CiAKIHZvaWQgSlNSb3BlU3RyaW5nOjpyZXNvbHZlUm9wZUludGVy
bmFsOChMQ2hhciogYnVmZmVyKSBjb25zdApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNTdHJpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1N0cmluZy5oCShyZXZpc2lvbiAyNzIyOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1N0cmluZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMTcsNyArMjE3LDcgQEAg
cHVibGljOgogCiAgICAgc3RhdGljIHZvaWQgZHVtcFRvU3RyZWFtKGNvbnN0IEpTQ2VsbCosIFBy
aW50U3RyZWFtJik7CiAgICAgc3RhdGljIHNpemVfdCBlc3RpbWF0ZWRTaXplKEpTQ2VsbCosIFZN
Jik7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYp
OworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBBTFdBWVNfSU5MSU5FIGJvb2wg
aXNSb3BlKCkgY29uc3QKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU1N0cmluZ0l0ZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1N0cmluZ0l0ZXJhdG9yLmNwcAkocmV2aXNpb24gMjcyMjk3KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmdJdGVyYXRvci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTUxLDExICs1MSwxNCBAQCBKU1N0cmluZ0l0ZXJhdG9yKiBKU1N0cmluZ0l0ZXJh
dG9yOjpjbG9uCiAgICAgcmV0dXJuIGNsb25lOwogfQogCi12b2lkIEpTU3RyaW5nSXRlcmF0b3I6
OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBs
YXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTU3RyaW5nSXRlcmF0b3I6OnZpc2l0Q2hpbGRy
ZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBhdXRvKiB0aGlz
T2JqZWN0ID0ganNDYXN0PEpTU3RyaW5nSXRlcmF0b3IqPihjZWxsKTsKICAgICBBU1NFUlRfR0Nf
T0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAgICAgQmFzZTo6dmlzaXRDaGls
ZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpT
U3RyaW5nSXRlcmF0b3IpOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nSXRlcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZ0l0ZXJhdG9yLmgJKHJldmlzaW9uIDI3
MjI5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nSXRlcmF0b3Iu
aAkod29ya2luZyBjb3B5KQpAQCAtNzksNyArNzksNyBAQCBwdWJsaWM6CiAgICAgSlNWYWx1ZSBp
bmRleCgpIGNvbnN0IHsgcmV0dXJuIGludGVybmFsRmllbGQoRmllbGQ6OkluZGV4KS5nZXQoKTsg
fQogICAgIEpTU3RyaW5nSXRlcmF0b3IqIGNsb25lKEpTR2xvYmFsT2JqZWN0Kik7CiAKLSAgICBz
dGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVD
TEFSRV9WSVNJVF9DSElMRFJFTjsKIAogcHJpdmF0ZToKICAgICBKU1N0cmluZ0l0ZXJhdG9yKFZN
JiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0LmNwcAkocmV2aXNpb24gMjcy
Mjk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVj
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDcgKzM2LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAK
IGNvbnN0IENsYXNzSW5mbyBKU1N5bWJvbFRhYmxlT2JqZWN0OjpzX2luZm8gPSB7ICJTeW1ib2xU
YWJsZU9iamVjdCIsICZCYXNlOjpzX2luZm8sIG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRI
T0RfVEFCTEUoSlNTeW1ib2xUYWJsZU9iamVjdCkgfTsKIAotdm9pZCBKU1N5bWJvbFRhYmxlT2Jq
ZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0
ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1N5bWJvbFRhYmxlT2JqZWN0Ojp2aXNp
dENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNT
eW1ib2xUYWJsZU9iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1N5bWJvbFRhYmxlT2JqZWN0
Kj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZv
KCkpOwpAQCAtNDQsNiArNDUsOCBAQCB2b2lkIEpTU3ltYm9sVGFibGVPYmplY3Q6OnZpc2l0Q2hp
bGRyZW4oCiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9zeW1ib2xUYWJsZSk7CiB9
CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU1N5bWJvbFRhYmxlT2JqZWN0KTsKKwogYm9vbCBK
U1N5bWJvbFRhYmxlT2JqZWN0OjpkZWxldGVQcm9wZXJ0eShKU0NlbGwqIGNlbGwsIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIERlbGV0ZVBy
b3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBKU1N5bWJvbFRhYmxlT2JqZWN0KiB0aGlzT2JqZWN0
ID0ganNDYXN0PEpTU3ltYm9sVGFibGVPYmplY3QqPihjZWxsKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0LmgJKHJldmlz
aW9uIDI3MjI5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3ltYm9sVGFi
bGVPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtNzAsNyArNzAsNyBAQCBwcm90ZWN0ZWQ6CiAg
ICAgICAgIG1fc3ltYm9sVGFibGUuc2V0KHZtLCB0aGlzLCBzeW1ib2xUYWJsZSk7CiAgICAgfQog
ICAgIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3Im
KTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogICAgIAogcHJpdmF0ZToKICAgICBXcml0
ZUJhcnJpZXI8U3ltYm9sVGFibGU+IG1fc3ltYm9sVGFibGU7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU1dlYWtPYmplY3RSZWYuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTV2Vha09iamVjdFJlZi5jcHAJKHJldmlzaW9uIDI3
MjI5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTV2Vha09iamVjdFJlZi5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDcgKzM5LDggQEAgdm9pZCBKU1dlYWtPYmplY3RSZWY6
OmZpbmlzaENyZWF0aW9uKFZNJgogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKIH0KIAot
dm9pZCBKU1dlYWtPYmplY3RSZWY6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90Vmlz
aXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTV2Vha09i
amVjdFJlZjo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9y
KQogewogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNXZWFrT2JqZWN0UmVmKj4oY2Vs
bCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpA
QCAtNTEsNiArNTIsOCBAQCB2b2lkIEpTV2Vha09iamVjdFJlZjo6dmlzaXRDaGlsZHJlbihKU0Nl
CiAgICAgfQogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNXZWFrT2JqZWN0UmVmKTsKKwog
dm9pZCBKU1dlYWtPYmplY3RSZWY6OmZpbmFsaXplVW5jb25kaXRpb25hbGx5KFZNJiB2bSkKIHsK
ICAgICBpZiAobV92YWx1ZSAmJiAhdm0uaGVhcC5pc01hcmtlZChtX3ZhbHVlLmdldCgpKSkKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTV2Vha09iamVjdFJlZi5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTV2Vha09iamVjdFJlZi5o
CShyZXZpc2lvbiAyNzIyOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1dl
YWtPYmplY3RSZWYuaAkod29ya2luZyBjb3B5KQpAQCAtNjUsNyArNjUsNyBAQCBwdWJsaWM6CiAg
ICAgfQogCiAgICAgdm9pZCBmaW5hbGl6ZVVuY29uZGl0aW9uYWxseShWTSYpOwotICAgIHN0YXRp
YyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJF
X1ZJU0lUX0NISUxEUkVOOwogCiBwcml2YXRlOgogICAgIEpTV2Vha09iamVjdFJlZihWTSYgdm0s
IFN0cnVjdHVyZSogc3RydWN0dXJlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNXaXRoU2NvcGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTV2l0aFNjb3BlLmNwcAkocmV2aXNpb24gMjcyMjk3KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNXaXRoU2NvcGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSw3
ICs0MSw4IEBAIEpTV2l0aFNjb3BlKiBKU1dpdGhTY29wZTo6Y3JlYXRlKAogICAgIHJldHVybiB3
aXRoU2NvcGU7CiB9CiAKLXZvaWQgSlNXaXRoU2NvcGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBj
ZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2
b2lkIEpTV2l0aFNjb3BlOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3Im
IHZpc2l0b3IpCiB7CiAgICAgSlNXaXRoU2NvcGUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNXaXRo
U2NvcGUqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3Qs
IGluZm8oKSk7CkBAIC00OSw2ICs1MCw4IEBAIHZvaWQgSlNXaXRoU2NvcGU6OnZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKiAKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX29iamVjdCk7CiB9
CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU1dpdGhTY29wZSk7CisKIFN0cnVjdHVyZSogSlNX
aXRoU2NvcGU6OmNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEpTVmFsdWUgcHJvdG8pCiB7CiAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZt
LCBnbG9iYWxPYmplY3QsIHByb3RvLCBUeXBlSW5mbyhXaXRoU2NvcGVUeXBlLCBTdHJ1Y3R1cmVG
bGFncyksIGluZm8oKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1dp
dGhTY29wZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
V2l0aFNjb3BlLmgJKHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTV2l0aFNjb3BlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDcgKzQzLDcgQEAgcHVi
bGljOgogCiAgICAgSlNPYmplY3QqIG9iamVjdCgpIHsgcmV0dXJuIG1fb2JqZWN0LmdldCgpOyB9
CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7
CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNy
ZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBwcm90byk7CiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTV3JhcHBlck9iamVjdC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNXcmFwcGVyT2JqZWN0
LmNwcAkocmV2aXNpb24gMjcyMjk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNXcmFwcGVyT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksMTEgKzI5LDE0IEBAIG5h
bWVzcGFjZSBKU0MgewogCiBTVEFUSUNfQVNTRVJUX0lTX1RSSVZJQUxMWV9ERVNUUlVDVElCTEUo
SlNXcmFwcGVyT2JqZWN0KTsKIAotdm9pZCBKU1dyYXBwZXJPYmplY3Q6OnZpc2l0Q2hpbGRyZW4o
SlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZp
c2l0b3I+Cit2b2lkIEpTV3JhcHBlck9iamVjdDo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBj
ZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8
SlNXcmFwcGVyT2JqZWN0Kj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0
aGlzT2JqZWN0LCBpbmZvKCkpOwogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwg
dmlzaXRvcik7CiB9CiAKK0RFRklORV9FWFBPUlRfVklTSVRfQ0hJTERSRU4oSlNXcmFwcGVyT2Jq
ZWN0KTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU1dyYXBwZXJPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU1dyYXBwZXJPYmplY3QuaAkocmV2aXNpb24gMjcyMjk3KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNXcmFwcGVyT2JqZWN0LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTY0LDcgKzY0LDcgQEAgcHVibGljOgogcHJvdGVjdGVkOgogICAgIGV4cGxpY2l0IEpT
V3JhcHBlck9iamVjdChWTSYsIFN0cnVjdHVyZSopOwogCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUg
c3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERF
Q0xBUkVfRVhQT1JUX1ZJU0lUX0NISUxEUkVOOwogfTsKIAogaW5saW5lIEpTV3JhcHBlck9iamVj
dDo6SlNXcmFwcGVyT2JqZWN0KFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9MYXp5Q2xhc3NTdHJ1Y3R1cmUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0xhenlDbGFzc1N0cnVjdHVy
ZS5jcHAJKHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0xhenlDbGFzc1N0cnVjdHVyZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcyLDEyICs3MiwxNiBA
QCB2b2lkIExhenlDbGFzc1N0cnVjdHVyZTo6SW5pdGlhbGl6ZXI6OnNlCiAgICAgY2xhc3NTdHJ1
Y3R1cmUubV9jb25zdHJ1Y3Rvci5zZXQodm0sIGdsb2JhbCwgY29uc3RydWN0b3IpOwogfQogCi12
b2lkIExhenlDbGFzc1N0cnVjdHVyZTo6dmlzaXQoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1w
bGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBMYXp5Q2xhc3NTdHJ1Y3R1cmU6OnZpc2l0KFZp
c2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgbV9zdHJ1Y3R1cmUudmlzaXQodmlzaXRvcik7CiAgICAg
dmlzaXRvci5hcHBlbmQobV9jb25zdHJ1Y3Rvcik7CiB9CiAKK3RlbXBsYXRlIHZvaWQgTGF6eUNs
YXNzU3RydWN0dXJlOjp2aXNpdChBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lk
IExhenlDbGFzc1N0cnVjdHVyZTo6dmlzaXQoU2xvdFZpc2l0b3ImKTsKKwogdm9pZCBMYXp5Q2xh
c3NTdHJ1Y3R1cmU6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKIHsKICAgICBvdXQucHJp
bnQoIjxzdHJ1Y3R1cmUgPSAiLCBtX3N0cnVjdHVyZSwgIiwgY29uc3RydWN0b3IgPSAiLCBSYXdQ
b2ludGVyKG1fY29uc3RydWN0b3IuZ2V0KCkpLCAiPiIpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvTGF6eUNsYXNzU3RydWN0dXJlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTGF6eUNsYXNzU3RydWN0dXJlLmgJKHJldmlzaW9uIDI3
MjI5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0xhenlDbGFzc1N0cnVjdHVy
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTcsNyArMTE3LDcgQEAgcHVibGljOgogICAgICAgICBy
ZXR1cm4gbV9jb25zdHJ1Y3Rvci5nZXQoKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCB2aXNpdChT
bG90VmlzaXRvciYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgdmlzaXQo
VmlzaXRvciYpOwogICAgIAogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9MYXp5UHJvcGVydHkuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9MYXp5UHJvcGVydHkuaAkocmV2
aXNpb24gMjcyMjk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTGF6eVByb3Bl
cnR5LmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMyw3ICsxMDMsNyBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBzZXRNYXlCZU51bGwoVk0mLCBjb25zdCBPd25lclR5cGUqIG93bmVyLCBFbGVtZW50VHlwZSop
OwogICAgIHZvaWQgc2V0KFZNJiwgY29uc3QgT3duZXJUeXBlKiBvd25lciwgRWxlbWVudFR5cGUq
KTsKICAgICAKLSAgICB2b2lkIHZpc2l0KFNsb3RWaXNpdG9yJik7CisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVmlzaXRvcj4gdm9pZCB2aXNpdChWaXNpdG9yJik7CiAgICAgCiAgICAgdm9pZCBkdW1w
KFByaW50U3RyZWFtJikgY29uc3Q7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9MYXp5UHJvcGVydHlJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvTGF6eVByb3BlcnR5SW5saW5lcy5oCShyZXZpc2lvbiAyNzIyOTcp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9MYXp5UHJvcGVydHlJbmxpbmVzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTY2LDcgKzY2LDggQEAgdm9pZCBMYXp5UHJvcGVydHk8T3duZXJU
eXBlLCBFbGVtZW50VHlwZQogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPd25lclR5cGUsIHR5cGVu
YW1lIEVsZW1lbnRUeXBlPgotdm9pZCBMYXp5UHJvcGVydHk8T3duZXJUeXBlLCBFbGVtZW50VHlw
ZT46OnZpc2l0KFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRv
cj4KK3ZvaWQgTGF6eVByb3BlcnR5PE93bmVyVHlwZSwgRWxlbWVudFR5cGU+Ojp2aXNpdChWaXNp
dG9yJiB2aXNpdG9yKQogewogICAgIGlmIChtX3BvaW50ZXIgJiYgIShtX3BvaW50ZXIgJiBsYXp5
VGFnKSkKICAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZChiaXR3aXNlX2Nhc3Q8RWxl
bWVudFR5cGUqPihtX3BvaW50ZXIpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL01vZHVsZVByb2dyYW1FeGVjdXRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9Nb2R1bGVQcm9ncmFtRXhlY3V0YWJsZS5jcHAJKHJldmlzaW9u
IDI3MjI5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01vZHVsZVByb2dyYW1F
eGVjdXRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzksNyArNzksOCBAQCBhdXRvIE1vZHVs
ZVByb2dyYW1FeGVjdXRhYmxlOjplbnN1cmVUZW1wCiAgICAgcmV0dXJuIGVuc3VyZVRlbXBsYXRl
T2JqZWN0TWFwSW1wbChtX3RlbXBsYXRlT2JqZWN0TWFwKTsKIH0KIAotdm9pZCBNb2R1bGVQcm9n
cmFtRXhlY3V0YWJsZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgTW9kdWxlUHJvZ3JhbUV4
ZWN1dGFibGU6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRv
cikKIHsKICAgICBNb2R1bGVQcm9ncmFtRXhlY3V0YWJsZSogdGhpc09iamVjdCA9IGpzQ2FzdDxN
b2R1bGVQcm9ncmFtRXhlY3V0YWJsZSo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5I
RVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTk0LDQgKzk1LDYgQEAgdm9pZCBNb2R1bGVQ
cm9ncmFtRXhlY3V0YWJsZTo6dmlzaXRDaGlsZAogICAgIH0KIH0KIAorREVGSU5FX1ZJU0lUX0NI
SUxEUkVOKE1vZHVsZVByb2dyYW1FeGVjdXRhYmxlKTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Nb2R1bGVQcm9ncmFtRXhlY3V0YWJs
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01vZHVsZVBy
b2dyYW1FeGVjdXRhYmxlLmgJKHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL01vZHVsZVByb2dyYW1FeGVjdXRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTc3LDcgKzc3LDcgQEAgcHJpdmF0ZToKIAogICAgIE1vZHVsZVByb2dyYW1FeGVjdXRhYmxlKEpT
R2xvYmFsT2JqZWN0KiwgY29uc3QgU291cmNlQ29kZSYpOwogCi0gICAgc3RhdGljIHZvaWQgdmlz
aXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJ
TERSRU47CiAKICAgICBXcml0ZUJhcnJpZXI8VW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2Nr
PiBtX3VubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jazsKICAgICBXcml0ZUJhcnJpZXI8U3lt
Ym9sVGFibGU+IG1fbW9kdWxlRW52aXJvbm1lbnRTeW1ib2xUYWJsZTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuY3BwCShyZXZpc2lvbiAyNzIyOTcpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNTU1LDYgKzU1NSw5IEBAIHZvaWQgT3B0aW9uczo6cmVjb21wdXRlRGVwZW5kZW50T3B0aW9u
cygKIAogICAgIGlmIChPcHRpb25zOjp1c2VQcml2YXRlU3RhdGljQ2xhc3NGaWVsZHMoKSkKICAg
ICAgICAgT3B0aW9uczo6dXNlUHJpdmF0ZUNsYXNzRmllbGRzKCkgPSB0cnVlOworCisgICAgaWYg
KE9wdGlvbnM6OnZlcmJvc2VWZXJpZnlHQygpKQorICAgICAgICBPcHRpb25zOjp2ZXJpZnlHQygp
ID0gdHJ1ZTsKIH0KIAogaW5saW5lIHZvaWQqIE9wdGlvbnM6OmFkZHJlc3NPZk9wdGlvbihPcHRp
b25zOjpJRCBpZCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnNM
aXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9u
c0xpc3QuaAkocmV2aXNpb24gMjcyMjk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvT3B0aW9uc0xpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMzY5LDYgKzM2OSw4IEBAIEpTX0VY
UE9SVF9QUklWQVRFIGJvb2wgY2FuVXNlSklUQ2FnZSgpOwogICAgIHYoQm9vbCwgYWx3YXlzR2Vu
ZXJhdGVQQ1RvQ29kZU9yaWdpbk1hcCwgZmFsc2UsIE5vcm1hbCwgIlRoaXMgd2lsbCBtYWtlIHN1
cmUgd2UgYWx3YXlzIGdlbmVyYXRlIGEgUENUb0NvZGVPcmlnaW5NYXAgZm9yIEpJVGVkIGNvZGUu
IikgXAogICAgIFwKICAgICB2KERvdWJsZSwgcmFuZG9tSW50ZWdyaXR5QXVkaXRSYXRlLCAwLjA1
LCBOb3JtYWwsICJQcm9iYWJpbGl0eSBvZiByYW5kb20gaW50ZWdyaXR5IGF1ZGl0cyBbMC4wIC0g
MS4wXSIpIFwKKyAgICB2KEJvb2wsIHZlcmlmeUdDLCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBc
CisgICAgdihCb29sLCB2ZXJib3NlVmVyaWZ5R0MsIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpIFwK
ICAgICB2KEJvb2wsIHZlcmlmeUhlYXAsIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2
KFVuc2lnbmVkLCBudW1iZXJPZkdDQ3ljbGVzVG9SZWNvcmRGb3JWZXJpZmljYXRpb24sIDMsIE5v
cm1hbCwgbnVsbHB0cikgXAogICAgIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1Byb2dyYW1FeGVjdXRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9Qcm9ncmFtRXhlY3V0YWJsZS5jcHAJKHJldmlzaW9uIDI3MjI5NykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb2dyYW1FeGVjdXRhYmxlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjA4LDcgKzIwOCw4IEBAIGF1dG8gUHJvZ3JhbUV4ZWN1dGFibGU6OmVu
c3VyZVRlbXBsYXRlT2IKICAgICByZXR1cm4gZW5zdXJlVGVtcGxhdGVPYmplY3RNYXBJbXBsKG1f
dGVtcGxhdGVPYmplY3RNYXApOwogfQogCi12b2lkIFByb2dyYW1FeGVjdXRhYmxlOjp2aXNpdENo
aWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBl
bmFtZSBWaXNpdG9yPgordm9pZCBQcm9ncmFtRXhlY3V0YWJsZTo6dmlzaXRDaGlsZHJlbkltcGwo
SlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFByb2dyYW1FeGVjdXRhYmxl
KiB0aGlzT2JqZWN0ID0ganNDYXN0PFByb2dyYW1FeGVjdXRhYmxlKj4oY2VsbCk7CiAgICAgQVNT
RVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtMjIyLDQgKzIy
Myw2IEBAIHZvaWQgUHJvZ3JhbUV4ZWN1dGFibGU6OnZpc2l0Q2hpbGRyZW4oSlMKICAgICB9CiB9
CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihQcm9ncmFtRXhlY3V0YWJsZSk7CisKIH0gLy8gbmFt
ZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvZ3JhbUV4
ZWN1dGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Q
cm9ncmFtRXhlY3V0YWJsZS5oCShyZXZpc2lvbiAyNzIyOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9Qcm9ncmFtRXhlY3V0YWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC04MSw3
ICs4MSw3IEBAIHByaXZhdGU6CiAKICAgICBQcm9ncmFtRXhlY3V0YWJsZShKU0dsb2JhbE9iamVj
dCosIGNvbnN0IFNvdXJjZUNvZGUmKTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4o
SlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAg
ICAgV3JpdGVCYXJyaWVyPFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jaz4gbV91bmxpbmtlZFByb2dy
YW1Db2RlQmxvY2s7CiAgICAgV3JpdGVCYXJyaWVyPEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2U+
IG1fcHJvZ3JhbUNvZGVCbG9jazsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1Byb3BlcnR5TWFwSGFzaFRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvUHJvcGVydHlNYXBIYXNoVGFibGUuaAkocmV2aXNpb24gMjcyMjk3KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlNYXBIYXNoVGFibGUuaAkod29y
a2luZyBjb3B5KQpAQCAtMTMzLDcgKzEzMyw3IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCBuZWVkc0Rlc3RydWN0aW9uID0gdHJ1ZTsKICAgICBzdGF0aWMgdm9pZCBkZXN0
cm95KEpTQ2VsbCopOwotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xv
dFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgREVDTEFSRV9F
WFBPUlRfSU5GTzsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVy
dHlUYWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
UHJvcGVydHlUYWJsZS5jcHAJKHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1Byb3BlcnR5VGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTgsNyAr
MTE4LDggQEAgdm9pZCBQcm9wZXJ0eVRhYmxlOjpmaW5pc2hDcmVhdGlvbihWTSYgdgogICAgIHZt
LmhlYXAucmVwb3J0RXh0cmFNZW1vcnlBbGxvY2F0ZWQoZGF0YVNpemUoKSk7CiB9CiAKLXZvaWQg
UHJvcGVydHlUYWJsZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgUHJvcGVydHlUYWJsZTo6
dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAg
IGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8UHJvcGVydHlUYWJsZSo+KGNlbGwpOwogICAgIEFT
U0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTEyNiw2ICsx
MjcsOCBAQCB2b2lkIFByb3BlcnR5VGFibGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsCiAgICAgdmlz
aXRvci5yZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQodGhpc09iamVjdC0+ZGF0YVNpemUoKSk7CiB9
CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihQcm9wZXJ0eVRhYmxlKTsKKwogdm9pZCBQcm9wZXJ0
eVRhYmxlOjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKIHsKICAgICBzdGF0aWNfY2FzdDxQcm9wZXJ0
eVRhYmxlKj4oY2VsbCktPlByb3BlcnR5VGFibGU6On5Qcm9wZXJ0eVRhYmxlKCk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm94eU9iamVjdC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJveHlPYmplY3QuY3BwCShyZXZpc2lv
biAyNzIyOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm94eU9iamVjdC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTExNTgsNyArMTE1OCw4IEBAIGJvb2wgUHJveHlPYmplY3Q6
OmlzUmV2b2tlZCgpIGNvbnN0CiAgICAgcmV0dXJuIGhhbmRsZXIoKS5pc051bGwoKTsKIH0KIAot
dm9pZCBQcm94eU9iamVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9y
JiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgUHJveHlPYmplY3Q6
OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAg
ICBQcm94eU9iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxQcm94eU9iamVjdCo+KGNlbGwpOwog
ICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTEx
NjgsNCArMTE2OSw2IEBAIHZvaWQgUHJveHlPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiAK
ICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2hhbmRsZXIpOwogfQogCitERUZJTkVf
VklTSVRfQ0hJTERSRU4oUHJveHlPYmplY3QpOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3h5T2JqZWN0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJveHlPYmplY3QuaAkocmV2aXNpb24g
MjcyMjk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJveHlPYmplY3QuaAko
d29ya2luZyBjb3B5KQpAQCAtOTEsNyArOTEsNyBAQCBwcml2YXRlOgogICAgIHN0YXRpYyB2b2lk
IGdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5
TmFtZUFycmF5JiwgRG9udEVudW1Qcm9wZXJ0aWVzTW9kZSk7CiAgICAgc3RhdGljIGJvb2wgc2V0
UHJvdG90eXBlKEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlIHByb3RvdHlwZSwg
Ym9vbCBzaG91bGRUaHJvd0lmQ2FudFNldCk7CiAgICAgc3RhdGljIEpTVmFsdWUgZ2V0UHJvdG90
eXBlKEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENo
aWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJF
TjsKIAogICAgIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90Q29tbW9uKEpTR2xvYmFsT2JqZWN0Kiwg
UHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKICAgICBib29sIHBlcmZvcm1JbnRlcm5hbE1l
dGhvZEdldE93blByb3BlcnR5KEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0
eVNsb3QmKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3h5UmV2b2tl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm94eVJl
dm9rZS5jcHAJKHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1Byb3h5UmV2b2tlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjksNyArNjksOCBAQCBKU0Nf
REVGSU5FX0hPU1RfRlVOQ1RJT04ocGVyZm9ybVByb3h5UmV2CiAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KIAotdm9pZCBQcm94eVJldm9rZTo6dmlzaXRDaGls
ZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5h
bWUgVmlzaXRvcj4KK3ZvaWQgUHJveHlSZXZva2U6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCog
Y2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBQcm94eVJldm9rZSogdGhpc09iamVjdCA9
IGpzQ2FzdDxQcm94eVJldm9rZSo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJ
VFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTc4LDQgKzc5LDYgQEAgdm9pZCBQcm94eVJldm9r
ZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIAogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3Qt
Pm1fcHJveHkpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oUHJveHlSZXZva2UpOworCiB9
IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1By
b3h5UmV2b2tlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
UHJveHlSZXZva2UuaAkocmV2aXNpb24gMjcyMjk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvUHJveHlSZXZva2UuaAkod29ya2luZyBjb3B5KQpAQCAtNTIsNyArNTIsNyBAQCBw
dWJsaWM6CiAgICAgfQogCiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIFByb3h5T2JqZWN0
Kik7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYp
OworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAgICAgSlNWYWx1ZSBwcm94eSgpIHsgcmV0
dXJuIG1fcHJveHkuZ2V0KCk7IH0KICAgICB2b2lkIHNldFByb3h5VG9OdWxsKFZNJiB2bSkgeyBy
ZXR1cm4gbV9wcm94eS5zZXQodm0sIHRoaXMsIGpzTnVsbCgpKTsgfQogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBDYWNoZWRSZXN1bHQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENhY2hlZFJlc3VsdC5jcHAJ
KHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4
cENhY2hlZFJlc3VsdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDggQEAKIAogbmFt
ZXNwYWNlIEpTQyB7CiAKLXZvaWQgUmVnRXhwQ2FjaGVkUmVzdWx0Ojp2aXNpdEFnZ3JlZ2F0ZShT
bG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFJl
Z0V4cENhY2hlZFJlc3VsdDo6dmlzaXRBZ2dyZWdhdGUoVmlzaXRvciYgdmlzaXRvcikKIHsKICAg
ICB2aXNpdG9yLmFwcGVuZChtX2xhc3RJbnB1dCk7CiAgICAgdmlzaXRvci5hcHBlbmQobV9sYXN0
UmVnRXhwKTsKQEAgLTQzLDYgKzQ0LDkgQEAgdm9pZCBSZWdFeHBDYWNoZWRSZXN1bHQ6OnZpc2l0
QWdncmVnYXRlKAogICAgIH0KIH0KIAordGVtcGxhdGUgdm9pZCBSZWdFeHBDYWNoZWRSZXN1bHQ6
OnZpc2l0QWdncmVnYXRlKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgUmVn
RXhwQ2FjaGVkUmVzdWx0Ojp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYpOworCiBKU0FycmF5
KiBSZWdFeHBDYWNoZWRSZXN1bHQ6Omxhc3RSZXN1bHQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgSlNPYmplY3QqIG93bmVyKQogewogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0o
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENhY2hlZFJlc3Vs
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENh
Y2hlZFJlc3VsdC5oCShyZXZpc2lvbiAyNzIyOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9SZWdFeHBDYWNoZWRSZXN1bHQuaAkod29ya2luZyBjb3B5KQpAQCAtNjUsNyArNjUs
NyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX3JlaWZpZWQgPyBtX3JlaWZpZWRJbnB1dC5n
ZXQoKSA6IG1fbGFzdElucHV0LmdldCgpOwogICAgIH0KIAotICAgIHZvaWQgdmlzaXRBZ2dyZWdh
dGUoU2xvdFZpc2l0b3ImKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIHZp
c2l0QWdncmVnYXRlKFZpc2l0b3ImKTsKIAogICAgIC8vIG1fbGFzdFJlZ0V4cCB3b3VsZCBiZSBu
dWxscHRyIHdoZW4gUmVnRXhwQ2FjaGVkUmVzdWx0IGlzIG5vdCByZWlmaWVkLgogICAgIC8vIElm
IHdlIGZpbmQgbV9sYXN0UmVnRXhwIGlzIG51bGxwdHIsIGl0IG1lYW5zIHRoaXMgc2hvdWxkIGhv
bGQgdGhlIGVtcHR5IFJlZ0V4cC4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1JlZ0V4cEdsb2JhbERhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1JlZ0V4cEdsb2JhbERhdGEuY3BwCShyZXZpc2lvbiAyNzIyOTcpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBHbG9iYWxEYXRhLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzAsMTEgKzMwLDE1IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi12b2lkIFJlZ0V4
cEdsb2JhbERhdGE6OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxh
dGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgUmVnRXhwR2xvYmFsRGF0YTo6dmlzaXRBZ2dyZWdh
dGUoVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBtX2NhY2hlZFJlc3VsdC52aXNpdEFnZ3JlZ2F0
ZSh2aXNpdG9yKTsKIH0KIAordGVtcGxhdGUgdm9pZCBSZWdFeHBHbG9iYWxEYXRhOjp2aXNpdEFn
Z3JlZ2F0ZShBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIFJlZ0V4cEdsb2Jh
bERhdGE6OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJik7CisKIEpTVmFsdWUgUmVnRXhwR2xv
YmFsRGF0YTo6Z2V0QmFja3JlZihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCB1bnNpZ25l
ZCBpKQogewogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cEdsb2JhbERhdGEuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBHbG9iYWxEYXRhLmgJKHJldmlzaW9u
IDI3MjI5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cEdsb2JhbERh
dGEuaAkod29ya2luZyBjb3B5KQpAQCAtNDEsNyArNDEsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBz
ZXRJbnB1dChKU0dsb2JhbE9iamVjdCosIEpTU3RyaW5nKik7CiAgICAgSlNTdHJpbmcqIGlucHV0
KCkgeyByZXR1cm4gbV9jYWNoZWRSZXN1bHQuaW5wdXQoKTsgfQogCi0gICAgdm9pZCB2aXNpdEFn
Z3JlZ2F0ZShTbG90VmlzaXRvciYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZv
aWQgdmlzaXRBZ2dyZWdhdGUoVmlzaXRvciYpOwogCiAgICAgSlNWYWx1ZSBnZXRCYWNrcmVmKEpT
R2xvYmFsT2JqZWN0KiwgdW5zaWduZWQpOwogICAgIEpTVmFsdWUgZ2V0TGFzdFBhcmVuKEpTR2xv
YmFsT2JqZWN0Kik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBP
YmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Jl
Z0V4cE9iamVjdC5jcHAJKHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1JlZ0V4cE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDcgKzQ2LDgg
QEAgdm9pZCBSZWdFeHBPYmplY3Q6OmZpbmlzaENyZWF0aW9uKFZNJiB2bQogICAgIEFTU0VSVCh0
eXBlKCkgPT0gUmVnRXhwT2JqZWN0VHlwZSk7CiB9CiAKLXZvaWQgUmVnRXhwT2JqZWN0Ojp2aXNp
dENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0
eXBlbmFtZSBWaXNpdG9yPgordm9pZCBSZWdFeHBPYmplY3Q6OnZpc2l0Q2hpbGRyZW5JbXBsKEpT
Q2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBSZWdFeHBPYmplY3QqIHRoaXNP
YmplY3QgPSBqc0Nhc3Q8UmVnRXhwT2JqZWN0Kj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVD
VF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNTUsNiArNTYsOCBAQCB2b2lkIFJl
Z0V4cE9iamVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqCiAgICAgdmlzaXRvci5hcHBlbmQodGhp
c09iamVjdC0+bV9sYXN0SW5kZXgpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oUmVnRXhw
T2JqZWN0KTsKKwogYm9vbCBSZWdFeHBPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdChKU09iamVj
dCogb2JqZWN0LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWUgcHJv
cGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2Jq
ZWN0LT52bSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwT2Jq
ZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhw
T2JqZWN0LmgJKHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1JlZ0V4cE9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzMsNyArMTMzLDcgQEAgcHJp
dmF0ZToKICAgICBKU19FWFBPUlRfUFJJVkFURSBSZWdFeHBPYmplY3QoVk0mLCBTdHJ1Y3R1cmUq
LCBSZWdFeHAqKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGZpbmlzaENyZWF0aW9uKFZN
Jik7CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9y
Jik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIGJvb2wgbGFzdEluZGV4SXNX
cml0YWJsZSgpIGNvbnN0CiAgICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU2FtcGxpbmdQcm9maWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5jcHAJKHJldmlzaW9uIDI3MjI5NykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NhbXBsaW5nUHJvZmlsZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC02NTIsNyArNjUyLDcgQEAgdm9pZCBTYW1wbGluZ1Byb2ZpbGVyOjpwcm9jZXNz
VW52ZXJpZmllZAogICAgIG1fdW5wcm9jZXNzZWRTdGFja1RyYWNlcy5jbGVhcigpOwogfQogCi12
b2lkIFNhbXBsaW5nUHJvZmlsZXI6OnZpc2l0KFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvcikKK3Zv
aWQgU2FtcGxpbmdQcm9maWxlcjo6dmlzaXQoQWJzdHJhY3RTbG90VmlzaXRvciYgc2xvdFZpc2l0
b3IpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQobV9sb2NrLmlzTG9ja2VkKCkpOwogICAgIGZvciAo
SlNDZWxsKiBjZWxsIDogbV9saXZlQ2VsbFBvaW50ZXJzKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1NhbXBsaW5nUHJvZmlsZXIuaAkocmV2aXNpb24gMjcyMjk3
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xNzEsNyArMTcxLDcgQEAgcHVibGljOgogICAgIHZvaWQgbm90aWNl
SlNMb2NrQWNxdWlzaXRpb24oKTsKICAgICB2b2lkIG5vdGljZVZNRW50cnkoKTsKICAgICB2b2lk
IHNodXRkb3duKCk7Ci0gICAgdm9pZCB2aXNpdChTbG90VmlzaXRvciYpOworICAgIHZvaWQgdmlz
aXQoQWJzdHJhY3RTbG90VmlzaXRvciYpOwogICAgIExvY2smIGdldExvY2soKSB7IHJldHVybiBt
X2xvY2s7IH0KICAgICB2b2lkIHNldFRpbWluZ0ludGVydmFsKFNlY29uZHMgaW50ZXJ2YWwpIHsg
bV90aW1pbmdJbnRlcnZhbCA9IGludGVydmFsOyB9CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9p
ZCBzdGFydCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVkQXJn
dW1lbnRzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
Y29wZWRBcmd1bWVudHMuY3BwCShyZXZpc2lvbiAyNzIyOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TY29wZWRBcmd1bWVudHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05OCw3
ICs5OCw4IEBAIFNjb3BlZEFyZ3VtZW50cyogU2NvcGVkQXJndW1lbnRzOjpjcmVhdGUKICAgICBy
ZXR1cm4gcmVzdWx0OwogfQogCi12b2lkIFNjb3BlZEFyZ3VtZW50czo6dmlzaXRDaGlsZHJlbihK
U0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlz
aXRvcj4KK3ZvaWQgU2NvcGVkQXJndW1lbnRzOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNl
bGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgU2NvcGVkQXJndW1lbnRzKiB0aGlzT2JqZWN0
ID0gc3RhdGljX2Nhc3Q8U2NvcGVkQXJndW1lbnRzKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09C
SkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtMTE1LDYgKzExNiw4IEBAIHZv
aWQgU2NvcGVkQXJndW1lbnRzOjp2aXNpdENoaWxkcmVuKEpTQ2UKICAgICB9CiB9CiAKK0RFRklO
RV9WSVNJVF9DSElMRFJFTihTY29wZWRBcmd1bWVudHMpOworCiBTdHJ1Y3R1cmUqIFNjb3BlZEFy
Z3VtZW50czo6Y3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCiB7CiAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRl
KHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oU2NvcGVkQXJndW1lbnRzVHlw
ZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU2NvcGVkQXJndW1lbnRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU2NvcGVkQXJndW1lbnRzLmgJKHJldmlzaW9uIDI3MjI5NykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlZEFyZ3VtZW50cy5oCSh3b3JraW5nIGNv
cHkpCkBAIC02Myw5ICs2Myw5IEBAIHB1YmxpYzoKICAgICAKICAgICAvLyBDcmVhdGVzIGFuIGFy
Z3VtZW50cyBvYmplY3QgYnkgY29weWluZyB0aGUgYXJndW1lbnRzIGZyb20gYSB3ZWxsLWRlZmlu
ZWQgc3RhY2sgbG9jYXRpb24uCiAgICAgc3RhdGljIFNjb3BlZEFyZ3VtZW50cyogY3JlYXRlQnlD
b3B5aW5nRnJvbShWTSYsIFN0cnVjdHVyZSosIFJlZ2lzdGVyKiBhcmd1bWVudHNTdGFydCwgdW5z
aWduZWQgdG90YWxMZW5ndGgsIEpTRnVuY3Rpb24qIGNhbGxlZSwgU2NvcGVkQXJndW1lbnRzVGFi
bGUqLCBKU0xleGljYWxFbnZpcm9ubWVudCopOwotICAgIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0
Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKLSAgICAKKworICAgIERFQ0xBUkVfVklT
SVRfQ0hJTERSRU47CisKICAgICB1aW50MzJfdCBpbnRlcm5hbExlbmd0aCgpIGNvbnN0CiAgICAg
ewogICAgICAgICByZXR1cm4gbV90b3RhbExlbmd0aDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1NpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TaW1wbGVUeXBlZEFycmF5Q29udHJvbGxl
ci5jcHAJKHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1NpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjIsNyAr
NjIsNyBAQCBib29sIFNpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyOjppc0F0b21pCiAgICAgcmV0
dXJuIG1fYWxsb3dBdG9taWNzV2FpdDsKIH0KIAotYm9vbCBTaW1wbGVUeXBlZEFycmF5Q29udHJv
bGxlcjo6SlNBcnJheUJ1ZmZlck93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6
OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIEpTQzo6U2xvdFZpc2l0b3ImIHZp
c2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCitib29sIFNpbXBsZVR5cGVkQXJyYXlDb250cm9s
bGVyOjpKU0FycmF5QnVmZmVyT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6
SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgSlNDOjpBYnN0cmFjdFNsb3RWaXNp
dG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQogewogICAgIGlmIChVTkxJS0VMWShy
ZWFzb24pKQogICAgICAgICAqcmVhc29uID0gIkpTQXJyYXlCdWZmZXIgaXMgb3BhcXVlIHJvb3Qi
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2ltcGxlVHlwZWRBcnJheUNv
bnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
aW1wbGVUeXBlZEFycmF5Q29udHJvbGxlci5oCShyZXZpc2lvbiAyNzIyOTcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC01OCw3ICs1OCw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgY2xhc3Mg
SlNBcnJheUJ1ZmZlck93bmVyIGZpbmFsIDogcHVibGljIFdlYWtIYW5kbGVPd25lciB7CiAgICAg
cHVibGljOgotICAgICAgICBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFu
ZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIFNsb3RWaXNpdG9yJiwgY29uc3QgY2hh
cioqIHJlYXNvbikgZmluYWw7CisgICAgICAgIGJvb2wgaXNSZWFjaGFibGVGcm9tT3BhcXVlUm9v
dHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCwgQWJzdHJhY3RTbG90
VmlzaXRvciYsIGNvbnN0IGNoYXIqKiByZWFzb24pIGZpbmFsOwogICAgICAgICB2b2lkIGZpbmFs
aXplKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQpIGZpbmFsOwogICAg
IH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NtYWxsU3RyaW5ncy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU21hbGxTdHJp
bmdzLmNwcAkocmV2aXNpb24gMjcyMjk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU21hbGxTdHJpbmdzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjYsNyArNjYsNyBAQCB2b2lk
IFNtYWxsU3RyaW5nczo6aW5pdGlhbGl6ZUNvbW1vblN0cmluCiAgICAgc2V0SXNJbml0aWFsaXpl
ZCh0cnVlKTsKIH0KIAotdm9pZCBTbWFsbFN0cmluZ3M6OnZpc2l0U3Ryb25nUmVmZXJlbmNlcyhT
bG90VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgU21hbGxTdHJpbmdzOjp2aXNpdFN0cm9uZ1JlZmVy
ZW5jZXMoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBtX25lZWRzVG9CZVZp
c2l0ZWQgPSBmYWxzZTsKICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKG1fZW1wdHlTdHJp
bmcpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU21hbGxTdHJpbmdzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU21hbGxTdHJpbmdz
LmgJKHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Nt
YWxsU3RyaW5ncy5oCSh3b3JraW5nIGNvcHkpCkBAIC00OSw5ICs0OSw5IEBAIGNsYXNzIFN0cmlu
Z0ltcGw7CiAKIG5hbWVzcGFjZSBKU0MgewogCitjbGFzcyBBYnN0cmFjdFNsb3RWaXNpdG9yOwog
Y2xhc3MgVk07CiBjbGFzcyBKU1N0cmluZzsKLWNsYXNzIFNsb3RWaXNpdG9yOwogCiBzdGF0aWMg
Y29uc3RleHByIHVuc2lnbmVkIG1heFNpbmdsZUNoYXJhY3RlclN0cmluZyA9IDB4RkY7CiAKQEAg
LTc4LDcgKzc4LDcgQEAgcHVibGljOgogICAgIEpTU3RyaW5nKiogc2luZ2xlQ2hhcmFjdGVyU3Ry
aW5ncygpIHsgcmV0dXJuICZtX3NpbmdsZUNoYXJhY3RlclN0cmluZ3NbMF07IH0KIAogICAgIHZv
aWQgaW5pdGlhbGl6ZUNvbW1vblN0cmluZ3MoVk0mKTsKLSAgICB2b2lkIHZpc2l0U3Ryb25nUmVm
ZXJlbmNlcyhTbG90VmlzaXRvciYpOworICAgIHZvaWQgdmlzaXRTdHJvbmdSZWZlcmVuY2VzKEFi
c3RyYWN0U2xvdFZpc2l0b3ImKTsKIAogI2RlZmluZSBKU0NfQ09NTU9OX1NUUklOR1NfQUNDRVNT
T1JfREVGSU5JVElPTihuYW1lKSBcCiAgICAgSlNTdHJpbmcqIG5hbWUjI1N0cmluZygpIGNvbnN0
ICAgICAgICAgICAgICAgICAgIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1NwYXJzZUFycmF5VmFsdWVNYXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1NwYXJzZUFycmF5VmFsdWVNYXAuY3BwCShyZXZpc2lvbiAyNzIyOTcpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TcGFyc2VBcnJheVZhbHVlTWFwLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjEwLDcgKzIxMCw4IEBAIEpTVmFsdWUgU3BhcnNlQXJyYXlFbnRy
eTo6Z2V0Tm9uU3BhcnNlTW8KICAgICByZXR1cm4gQmFzZTo6Z2V0KCk7CiB9CiAKLXZvaWQgU3Bh
cnNlQXJyYXlWYWx1ZU1hcDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9y
JiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgU3BhcnNlQXJyYXlW
YWx1ZU1hcDo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9y
KQogewogICAgIFNwYXJzZUFycmF5VmFsdWVNYXAqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8U3BhcnNl
QXJyYXlWYWx1ZU1hcCo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhp
c09iamVjdCwgaW5mbygpKTsKQEAgLTIyMyw1ICsyMjQsNyBAQCB2b2lkIFNwYXJzZUFycmF5VmFs
dWVNYXA6OnZpc2l0Q2hpbGRyZW4oCiAgICAgdmlzaXRvci5yZXBvcnRFeHRyYU1lbW9yeVZpc2l0
ZWQodGhpc09iamVjdC0+bV9yZXBvcnRlZENhcGFjaXR5ICogc2l6ZW9mKE1hcDo6S2V5VmFsdWVQ
YWlyVHlwZSkpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oU3BhcnNlQXJyYXlWYWx1ZU1h
cCk7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TcGFyc2VBcnJheVZhbHVlTWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU3BhcnNlQXJyYXlWYWx1ZU1hcC5oCShyZXZpc2lvbiAyNzIyOTcp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TcGFyc2VBcnJheVZhbHVlTWFwLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTExNSw3ICsxMTUsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgc3Rh
dGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1Zh
bHVlIHByb3RvdHlwZSk7CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCos
IFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIGJvb2wg
c3BhcnNlTW9kZSgpCiAgICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U3RhY2tGcmFtZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU3RhY2tGcmFtZS5jcHAJKHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1N0YWNrRnJhbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDEsNyArMTQx
LDggQEAgU3RyaW5nIFN0YWNrRnJhbWU6OnRvU3RyaW5nKFZNJiB2bSkgY29ucwogICAgIHJldHVy
biB0cmFjZUJ1aWxkLnRvU3RyaW5nKCkuaW1wbCgpOwogfQogCi12b2lkIFN0YWNrRnJhbWU6OnZp
c2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNp
dG9yPgordm9pZCBTdGFja0ZyYW1lOjp2aXNpdENoaWxkcmVuSW1wbChWaXNpdG9yJiB2aXNpdG9y
KQogewogICAgIGlmIChtX2NhbGxlZSkKICAgICAgICAgdmlzaXRvci5hcHBlbmQobV9jYWxsZWUp
OwpAQCAtMTQ5LDUgKzE1MCw3IEBAIHZvaWQgU3RhY2tGcmFtZTo6dmlzaXRDaGlsZHJlbihTbG90
VmlzaXQKICAgICAgICAgdmlzaXRvci5hcHBlbmQobV9jb2RlQmxvY2spOwogfQogCitERUZJTkVf
SU5TVEFOQ0VfVklTSVRfQ0hJTERSRU4oU3RhY2tGcmFtZSk7CisKIH0gLy8gbmFtZXNwYWNlIEpT
QwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdGFja0ZyYW1lLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RhY2tGcmFtZS5oCShy
ZXZpc2lvbiAyNzIyOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdGFja0Zy
YW1lLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2luY2x1ZGUgIkhlYXAu
aCIKICNpbmNsdWRlICJWTS5oIgorI2luY2x1ZGUgIlNsb3RWaXNpdG9yTWFjcm9zLmgiCiAjaW5j
bHVkZSAiV2FzbUluZGV4T3JOYW1lLmgiCiAjaW5jbHVkZSAiV3JpdGVCYXJyaWVyLmgiCiAjaW5j
bHVkZSA8bGltaXRzLmg+CkBAIC0zNSw3ICszNiw2IEBAIG5hbWVzcGFjZSBKU0MgewogCiBjbGFz
cyBDb2RlQmxvY2s7CiBjbGFzcyBKU09iamVjdDsKLWNsYXNzIFNsb3RWaXNpdG9yOwogCiBjbGFz
cyBTdGFja0ZyYW1lIHsKIHB1YmxpYzoKQEAgLTU4LDcgKzU4LDcgQEAgcHVibGljOgogICAgICAg
ICByZXR1cm4gbV9ieXRlY29kZUluZGV4OwogICAgIH0KICAgICAKLSAgICB2b2lkIHZpc2l0Q2hp
bGRyZW4oU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX0lOU1RBTkNFX1ZJU0lUX0NISUxEUkVO
OwogICAgIGJvb2wgaXNNYXJrZWQoVk0mIHZtKSBjb25zdCB7IHJldHVybiAoIW1fY2FsbGVlIHx8
IHZtLmhlYXAuaXNNYXJrZWQobV9jYWxsZWUuZ2V0KCkpKSAmJiAoIW1fY29kZUJsb2NrIHx8IHZt
LmhlYXAuaXNNYXJrZWQobV9jb2RlQmxvY2suZ2V0KCkpKTsgfQogCiBwcml2YXRlOgpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCShyZXZpc2lvbiAy
NzIyOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMjY3LDcgKzEyNjcsOCBAQCB2b2lkIFN0cnVjdHVyZTo6ZGlkVHJh
bnNpdGlvbkZyb21UaGlzU3RyCiAgICAgICAgIG1fdHJhbnNpdGlvbldhdGNocG9pbnRTZXQuZmly
ZUFsbCh2bSgpLCBTdHJ1Y3R1cmVGaXJlRGV0YWlsKHRoaXMpKTsKIH0KIAotdm9pZCBTdHJ1Y3R1
cmU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3Rl
bXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFN0cnVjdHVyZTo6dmlzaXRDaGlsZHJlbklt
cGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFN0cnVjdHVyZSogdGhp
c09iamVjdCA9IGpzQ2FzdDxTdHJ1Y3R1cmUqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNU
X0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC0xMjg5LDMyICsxMjkwLDQ2IEBAIHZv
aWQgU3RydWN0dXJlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2UKICAgICAgICAgLy8gTk9URTog
VGhpcyBjYW4gaW50ZXJsZWF2ZSBpbiBwaW4oKSwgaW4gd2hpY2ggY2FzZSBpdCBtYXkgc2VlIGEg
bnVsbCBwcm9wZXJ0eSB0YWJsZS4KICAgICAgICAgLy8gVGhhdCdzIGZpbmUsIGJlY2F1c2UgdGhl
biB0aGUgYmFycmllciB3aWxsIGZpcmUgYW5kIHdlIHdpbGwgc2NhbiB0aGlzIGFnYWluLgogICAg
ICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX3Byb3BlcnR5VGFibGVVbnNhZmUpOwot
ICAgIH0gZWxzZSBpZiAodmlzaXRvci5pc0FuYWx5emluZ0hlYXAoKSkKKyAgICB9IGVsc2UgaWYg
KHZpc2l0b3Iudm0oKS5pc0FuYWx5emluZ0hlYXAoKSkKICAgICAgICAgdmlzaXRvci5hcHBlbmQo
dGhpc09iamVjdC0+bV9wcm9wZXJ0eVRhYmxlVW5zYWZlKTsKICAgICBlbHNlIGlmICh0aGlzT2Jq
ZWN0LT5tX3Byb3BlcnR5VGFibGVVbnNhZmUpCiAgICAgICAgIHRoaXNPYmplY3QtPm1fcHJvcGVy
dHlUYWJsZVVuc2FmZS5jbGVhcigpOwogfQogCi1ib29sIFN0cnVjdHVyZTo6aXNDaGVhcER1cmlu
Z0dDKFZNJiB2bSkKK0RFRklORV9WSVNJVF9DSElMRFJFTihTdHJ1Y3R1cmUpOworCit0ZW1wbGF0
ZTx0eXBlbmFtZSBWaXNpdG9yPgorYm9vbCBTdHJ1Y3R1cmU6OmlzQ2hlYXBEdXJpbmdHQyhWaXNp
dG9yJiB2aXNpdG9yKQogewogICAgIC8vIEZJWE1FOiBXZSBjb3VsZCBtYWtlIHRoaXMgZXZlbiBz
YWZlciBieSByZXR1cm5pbmcgZmFsc2UgaWYgdGhpcyBzdHJ1Y3R1cmUncyBwcm9wZXJ0eSB0YWJs
ZQogICAgIC8vIGhhcyBhbnkgbGFyZ2UgcHJvcGVydHkgbmFtZXMuCiAgICAgLy8gaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NzMzNAogICAgIAotICAgIHJldHVybiAo
IW1fZ2xvYmFsT2JqZWN0IHx8IHZtLmhlYXAuaXNNYXJrZWQobV9nbG9iYWxPYmplY3QuZ2V0KCkp
KQotICAgICAgICAmJiAoaGFzUG9seVByb3RvKCkgfHwgIXN0b3JlZFByb3RvdHlwZU9iamVjdCgp
IHx8IHZtLmhlYXAuaXNNYXJrZWQoc3RvcmVkUHJvdG90eXBlT2JqZWN0KCkpKTsKKyAgICByZXR1
cm4gKCFtX2dsb2JhbE9iamVjdCB8fCB2aXNpdG9yLmlzTWFya2VkKG1fZ2xvYmFsT2JqZWN0Lmdl
dCgpKSkKKyAgICAgICAgJiYgKGhhc1BvbHlQcm90bygpIHx8ICFzdG9yZWRQcm90b3R5cGVPYmpl
Y3QoKSB8fCB2aXNpdG9yLmlzTWFya2VkKHN0b3JlZFByb3RvdHlwZU9iamVjdCgpKSk7CiB9CiAK
LWJvb2wgU3RydWN0dXJlOjptYXJrSWZDaGVhcChTbG90VmlzaXRvciYgdmlzaXRvcikKLXsKLSAg
ICBWTSYgdm0gPSB2aXNpdG9yLnZtKCk7Ci0gICAgaWYgKCFpc0NoZWFwRHVyaW5nR0Modm0pKQot
ICAgICAgICByZXR1cm4gdm0uaGVhcC5pc01hcmtlZCh0aGlzKTsKLSAgICAKK3RlbXBsYXRlPHR5
cGVuYW1lIFZpc2l0b3I+Citib29sIFN0cnVjdHVyZTo6bWFya0lmQ2hlYXAxKFZpc2l0b3ImIHZp
c2l0b3IpCisvL2Jvb2wgU3RydWN0dXJlOjptYXJrSWZDaGVhcDEoQWJzdHJhY3RTbG90VmlzaXRv
ciYgdmlzaXRvcikKK3sKKy8vICAgIFZNJiB2bSA9IHZpc2l0b3Iudm0oKTsKKyAgICBpZiAoIWlz
Q2hlYXBEdXJpbmdHQyh2aXNpdG9yKSkKKy8vICAgICAgICByZXR1cm4gdm0uaGVhcC5pc01hcmtl
ZCh0aGlzKTsgLy8gbWxhbSBGSVhNRQorICAgICAgICByZXR1cm4gdmlzaXRvci5pc01hcmtlZCh0
aGlzKTsgLy8gbWxhbSBGSVhNRQorCiAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZCh0aGlz
KTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorLy90ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgor
Ly9ib29sIFN0cnVjdHVyZTo6bWFya0lmQ2hlYXAoVmlzaXRvciYgdmlzaXRvcikKKy8veworLy8g
ICAgcmV0dXJuIG1hcmtJZkNoZWFwMSh2aXNpdG9yKTsgLy8gbWxhbSBGSVhNRSBIQUNLIHRvIGdl
dCB0aGlzIGNvbXBpbGluZyEhIQorLy99Cit0ZW1wbGF0ZSBib29sIFN0cnVjdHVyZTo6bWFya0lm
Q2hlYXAxKFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSBib29sIFN0cnVjdHVyZTo6bWFya0lmQ2hl
YXAxKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKKwogUmVmPFN0cnVjdHVyZVNoYXBlPiBTdHJ1Y3R1
cmU6OnRvU3RydWN0dXJlU2hhcGUoSlNWYWx1ZSB2YWx1ZSwgYm9vbCYgc2F3UG9seVByb3RvU3Ry
dWN0dXJlKQogewogICAgIFJlZjxTdHJ1Y3R1cmVTaGFwZT4gYmFzZVNoYXBlID0gU3RydWN0dXJl
U2hhcGU6OmNyZWF0ZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3Ry
dWN0dXJlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3Ry
dWN0dXJlLmgJKHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1N0cnVjdHVyZS5oCSh3b3JraW5nIGNvcHkpCkBAIC02MCw3ICs2MCw2IEBAIGNsYXNzIFBy
b3BlcnR5TmFtZUFycmF5RGF0YTsKIGNsYXNzIFByb3BlcnR5VGFibGU7CiBjbGFzcyBTdHJ1Y3R1
cmVDaGFpbjsKIGNsYXNzIFN0cnVjdHVyZVNoYXBlOwotY2xhc3MgU2xvdFZpc2l0b3I7CiBjbGFz
cyBKU1N0cmluZzsKIHN0cnVjdCBEdW1wQ29udGV4dDsKIHN0cnVjdCBIYXNoVGFibGU7CkBAIC0z
MDcsNyArMzA2LDcgQEAgcHVibGljOgogICAgIEpTVmFsdWUgcHJvdG90eXBlRm9yTG9va3VwKEpT
R2xvYmFsT2JqZWN0KiwgSlNDZWxsKiBiYXNlKSBjb25zdDsKICAgICBTdHJ1Y3R1cmVDaGFpbiog
cHJvdG90eXBlQ2hhaW4oVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTT2JqZWN0KiBiYXNlKSBjb25z
dDsKICAgICBTdHJ1Y3R1cmVDaGFpbiogcHJvdG90eXBlQ2hhaW4oSlNHbG9iYWxPYmplY3QqLCBK
U09iamVjdCogYmFzZSkgY29uc3Q7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0Nl
bGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAgICAgCiAg
ICAgLy8gQSBTdHJ1Y3R1cmUgaXMgY2hlYXAgdG8gbWFyayBkdXJpbmcgR0MgaWYgZG9pbmcgc28g
d291bGQgb25seSBhZGQgYSBzbWFsbCBhbmQgYm91bmRlZCBhbW91bnQKICAgICAvLyB0byBvdXIg
aGVhcCBmb290cHJpbnQuIEZvciBleGFtcGxlLCBpZiB0aGUgc3RydWN0dXJlIHJlZmVycyB0byBh
IGdsb2JhbCBvYmplY3QgdGhhdCBpcyBub3QKQEAgLTMxNSwxMCArMzE0LDEyIEBAIHB1YmxpYzoK
ICAgICAvLyBpbmNyZWFzZSBpbiBmb290cHJpbnQgYmVjYXVzZSBubyBvdGhlciBvYmplY3QgcmVm
ZXJzIHRvIHRoYXQgZ2xvYmFsIG9iamVjdC4gVGhpcyBtZXRob2QKICAgICAvLyByZXR1cm5zIHRy
dWUgaWYgYWxsIHVzZXItY29udHJvbGxlZCAoYW5kIGhlbmNlIHVuYm91bmRlZCBpbiBzaXplKSBv
YmplY3RzIHJlZmVyZW5jZWQgZnJvbSB0aGUKICAgICAvLyBTdHJ1Y3R1cmUgYXJlIGFscmVhZHkg
bWFya2VkLgotICAgIGJvb2wgaXNDaGVhcER1cmluZ0dDKFZNJik7CisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVmlzaXRvcj4gYm9vbCBpc0NoZWFwRHVyaW5nR0MoVmlzaXRvciYpOwogICAgIAogICAg
IC8vIFJldHVybnMgdHJ1ZSBpZiB0aGlzIHN0cnVjdHVyZSBpcyBub3cgbWFya2VkLgotICAgIGJv
b2wgbWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImKTsKKy8vICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZp
c2l0b3I+IGJvb2wgbWFya0lmQ2hlYXAoVmlzaXRvciYpOworLy8gICAgYm9vbCBtYXJrSWZDaGVh
cDEoQWJzdHJhY3RTbG90VmlzaXRvciYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+
IGJvb2wgbWFya0lmQ2hlYXAxKFZpc2l0b3ImKTsgLy8gbWxhbSBURVNUCiAgICAgCiAgICAgYm9v
bCBoYXNSYXJlRGF0YSgpIGNvbnN0CiAgICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU3RydWN0dXJlQ2hhaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUNoYWluLmNwcAkocmV2aXNpb24gMjcyMjk3KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlQ2hhaW4uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC02Niw3ICs2Niw4IEBAIHZvaWQgU3RydWN0dXJlQ2hhaW46OmZpbmlzaENyZWF0
aW9uKFZNJiAKICAgICB9CiB9CiAKLXZvaWQgU3RydWN0dXJlQ2hhaW46OnZpc2l0Q2hpbGRyZW4o
SlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZp
c2l0b3I+Cit2b2lkIFN0cnVjdHVyZUNoYWluOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNl
bGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgU3RydWN0dXJlQ2hhaW4qIHRoaXNPYmplY3Qg
PSBqc0Nhc3Q8U3RydWN0dXJlQ2hhaW4qPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lO
SEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC04MCw0ICs4MSw2IEBAIHZvaWQgU3RydWN0
dXJlQ2hhaW46OnZpc2l0Q2hpbGRyZW4oSlNDZWwKICAgICB9CiB9CiAKK0RFRklORV9WSVNJVF9D
SElMRFJFTihTdHJ1Y3R1cmVDaGFpbik7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlQ2hhaW4uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVDaGFpbi5oCShyZXZpc2lv
biAyNzIyOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVDaGFp
bi5oCSh3b3JraW5nIGNvcHkpCkBAIC01MSw3ICs1MSw3IEBAIHB1YmxpYzoKIAogICAgIHN0YXRp
YyBTdHJ1Y3R1cmVDaGFpbiogY3JlYXRlKFZNJiwgSlNPYmplY3QqKTsKICAgICBTdHJ1Y3R1cmVJ
RCogaGVhZCgpIHsgcmV0dXJuIG1fdmVjdG9yLmdldCgpOyB9Ci0gICAgc3RhdGljIHZvaWQgdmlz
aXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJ
TERSRU47CiAKICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKICAgICB7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVSYXJlRGF0YS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlUmFy
ZURhdGEuY3BwCShyZXZpc2lvbiAyNzIyOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TdHJ1Y3R1cmVSYXJlRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY3LDcgKzY3LDgg
QEAgU3RydWN0dXJlUmFyZURhdGE6OlN0cnVjdHVyZVJhcmVEYXRhKFZNJgogICAgICAgICBtX3By
ZXZpb3VzLnNldCh2bSwgdGhpcywgcHJldmlvdXMpOwogfQogCi12b2lkIFN0cnVjdHVyZVJhcmVE
YXRhOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0
ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBTdHJ1Y3R1cmVSYXJlRGF0YTo6dmlzaXRD
aGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFN0cnVj
dHVyZVJhcmVEYXRhKiB0aGlzT2JqZWN0ID0ganNDYXN0PFN0cnVjdHVyZVJhcmVEYXRhKj4oY2Vs
bCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpA
QCAtODYsNiArODcsOCBAQCB2b2lkIFN0cnVjdHVyZVJhcmVEYXRhOjp2aXNpdENoaWxkcmVuKEpT
CiAgICAgfQogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oU3RydWN0dXJlUmFyZURhdGEpOwor
CiAvLyAtLS0tLS0tLS0tLSBDYWNoZWQgc3BlY2lhbCBwcm9wZXJ0aWVzIGhlbHBlciB3YXRjaHBv
aW50IGNsYXNzZXMgLS0tLS0tLS0tLS0KIAogY2xhc3MgQ2FjaGVkU3BlY2lhbFByb3BlcnR5QWRh
cHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50IGZpbmFsIDogcHVibGljIEFkYXB0
aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludEJhc2UgewpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlUmFyZURhdGEuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVSYXJlRGF0YS5oCShyZXZpc2lv
biAyNzIyOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVSYXJl
RGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC02OCw3ICs2OCw3IEBAIHB1YmxpYzoKICAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgbmVlZHNEZXN0cnVjdGlvbiA9IHRydWU7CiAgICAgc3RhdGljIHZv
aWQgZGVzdHJveShKU0NlbGwqKTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlND
ZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAg
c3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBK
U1ZhbHVlIHByb3RvdHlwZSk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1N5bWJvbFRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TeW1ib2xUYWJsZS5jcHAJKHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1N5bWJvbFRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTIsNyAr
OTIsOCBAQCB2b2lkIFN5bWJvbFRhYmxlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCiAgICAgQmFz
ZTo6ZmluaXNoQ3JlYXRpb24odm0pOwogfQogCi12b2lkIFN5bWJvbFRhYmxlOjp2aXNpdENoaWxk
cmVuKEpTQ2VsbCogdGhpc0NlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlw
ZW5hbWUgVmlzaXRvcj4KK3ZvaWQgU3ltYm9sVGFibGU6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2Vs
bCogdGhpc0NlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgU3ltYm9sVGFibGUqIHRoaXNT
eW1ib2xUYWJsZSA9IGpzQ2FzdDxTeW1ib2xUYWJsZSo+KHRoaXNDZWxsKTsKICAgICBBU1NFUlRf
R0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNTeW1ib2xUYWJsZSwgaW5mbygpKTsKQEAgLTEwOCw2ICsx
MDksOCBAQCB2b2lkIFN5bWJvbFRhYmxlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogCiAgICAgdGhp
c1N5bWJvbFRhYmxlLT5tX2xvY2FsVG9FbnRyeSA9IG51bGxwdHI7CiB9CiAKK0RFRklORV9WSVNJ
VF9DSElMRFJFTihTeW1ib2xUYWJsZSk7CisKIGNvbnN0IFN5bWJvbFRhYmxlOjpMb2NhbFRvRW50
cnlWZWMmIFN5bWJvbFRhYmxlOjpsb2NhbFRvRW50cnkoY29uc3QgQ29uY3VycmVudEpTTG9ja2Vy
JikKIHsKICAgICBpZiAoVU5MSUtFTFkoIW1fbG9jYWxUb0VudHJ5KSkgewpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFibGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TeW1ib2xUYWJsZS5oCShyZXZpc2lvbiAyNzIyOTcp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TeW1ib2xUYWJsZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC03MzMsNyArNzMzLDcgQEAgcHVibGljOgogICAgICAgICBtX3NpbmdsZXRvbi5u
b3RpZnlXcml0ZSh2bSwgdGhpcywgc2NvcGUsIHJlYXNvbik7CiAgICAgfQogCi0gICAgc3RhdGlj
IHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVf
VklTSVRfQ0hJTERSRU47CiAKICAgICBERUNMQVJFX0VYUE9SVF9JTkZPOwogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlUHJvZmlsZXJMb2cuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVQcm9maWxlckxvZy5jcHAJKHJl
dmlzaW9uIDI3MjI5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVQcm9m
aWxlckxvZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNCw3ICsxMjQsNyBAQCB2b2lkIFR5cGVQ
cm9maWxlckxvZzo6cHJvY2Vzc0xvZ0VudHJpZXMoCiAgICAgfQogfQogCi12b2lkIFR5cGVQcm9m
aWxlckxvZzo6dmlzaXQoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIFR5cGVQcm9maWxlckxv
Zzo6dmlzaXQoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBmb3IgKExvZ0Vu
dHJ5KiBlbnRyeSA9IG1fbG9nU3RhcnRQdHI7IGVudHJ5ICE9IG1fY3VycmVudExvZ0VudHJ5UHRy
OyArK2VudHJ5KSB7CiAgICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQoZW50cnktPnZh
bHVlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVQcm9maWxlckxv
Zy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVQcm9m
aWxlckxvZy5oCShyZXZpc2lvbiAyNzIyOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9UeXBlUHJvZmlsZXJMb2cuaAkod29ya2luZyBjb3B5KQpAQCAtNTksNyArNTksNyBAQCBw
dWJsaWM6CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBwcm9jZXNzTG9nRW50cmllcyhWTSYs
IGNvbnN0IFN0cmluZyYpOwogICAgIExvZ0VudHJ5KiBsb2dFbmRQdHIoKSBjb25zdCB7IHJldHVy
biBtX2xvZ0VuZFB0cjsgfQogCi0gICAgdm9pZCB2aXNpdChTbG90VmlzaXRvciYpOworICAgIHZv
aWQgdmlzaXQoQWJzdHJhY3RTbG90VmlzaXRvciYpOwogCiAgICAgc3RhdGljIHB0cmRpZmZfdCBs
b2dTdGFydE9mZnNldCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihUeXBlUHJvZmlsZXJMb2cs
IG1fbG9nU3RhcnRQdHIpOyB9CiAgICAgc3RhdGljIHB0cmRpZmZfdCBjdXJyZW50TG9nRW50cnlP
ZmZzZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoVHlwZVByb2ZpbGVyTG9nLCBtX2N1cnJl
bnRMb2dFbnRyeVB0cik7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZN
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAkocmV2
aXNpb24gMjcyMjk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAkod29y
a2luZyBjb3B5KQpAQCAtMTIxLDYgKzEyMSw3IEBAIGNsYXNzIEZhc3RNYWxsb2NBbGlnbmVkTWVt
b3J5QWxsb2NhdG9yOwogY2xhc3MgR2lnYWNhZ2VBbGlnbmVkTWVtb3J5QWxsb2NhdG9yOwogY2xh
c3MgSGFuZGxlU3RhY2s7CiBjbGFzcyBIYXNPd25Qcm9wZXJ0eUNhY2hlOworY2xhc3MgSGVhcEFu
YWx5emVyOwogY2xhc3MgSGVhcFByb2ZpbGVyOwogY2xhc3MgSWRlbnRpZmllcjsKIGNsYXNzIElu
dGVycHJldGVyOwpAQCAtMzEwLDYgKzMxMSwxMCBAQCBwdWJsaWM6CiAgICAgSGVhcFByb2ZpbGVy
KiBoZWFwUHJvZmlsZXIoKSBjb25zdCB7IHJldHVybiBtX2hlYXBQcm9maWxlci5nZXQoKTsgfQog
ICAgIEpTX0VYUE9SVF9QUklWQVRFIEhlYXBQcm9maWxlciYgZW5zdXJlSGVhcFByb2ZpbGVyKCk7
CiAKKyAgICBib29sIGlzQW5hbHl6aW5nSGVhcCgpIGNvbnN0IHsgcmV0dXJuIG1fYWN0aXZlSGVh
cEFuYWx5emVyOyB9CisgICAgSGVhcEFuYWx5emVyKiBhY3RpdmVIZWFwQW5hbHl6ZXIoKSBjb25z
dCB7IHJldHVybiBtX2FjdGl2ZUhlYXBBbmFseXplcjsgfQorICAgIHZvaWQgc2V0QWN0aXZlSGVh
cEFuYWx5emVyKEhlYXBBbmFseXplciogYW5hbHl6ZXIpIHsgbV9hY3RpdmVIZWFwQW5hbHl6ZXIg
PSBhbmFseXplcjsgfQorCiAjaWYgRU5BQkxFKFNBTVBMSU5HX1BST0ZJTEVSKQogICAgIFNhbXBs
aW5nUHJvZmlsZXIqIHNhbXBsaW5nUHJvZmlsZXIoKSB7IHJldHVybiBtX3NhbXBsaW5nUHJvZmls
ZXIuZ2V0KCk7IH0KICAgICBKU19FWFBPUlRfUFJJVkFURSBTYW1wbGluZ1Byb2ZpbGVyJiBlbnN1
cmVTYW1wbGluZ1Byb2ZpbGVyKFJlZjxTdG9wd2F0Y2g+JiYpOwpAQCAtMTE5NCw5ICsxMTk5LDEw
IEBAIHB1YmxpYzoKICAgICBib29sIGRpZEVudGVyVk0geyBmYWxzZSB9OwogcHJpdmF0ZToKICAg
ICBib29sIG1fZmFpbE5leHROZXdDb2RlQmxvY2sgeyBmYWxzZSB9OwotICAgIERlbGV0ZVByb3Bl
cnR5TW9kZSBtX2RlbGV0ZVByb3BlcnR5TW9kZSB7IERlbGV0ZVByb3BlcnR5TW9kZTo6RGVmYXVs
dCB9OwogICAgIGJvb2wgbV9nbG9iYWxDb25zdFJlZGVjbGFyYXRpb25TaG91bGRUaHJvdyB7IHRy
dWUgfTsKICAgICBib29sIG1fc2hvdWxkQnVpbGRQQ1RvQ29kZU9yaWdpbk1hcHBpbmcgeyBmYWxz
ZSB9OworICAgIERlbGV0ZVByb3BlcnR5TW9kZSBtX2RlbGV0ZVByb3BlcnR5TW9kZSB7IERlbGV0
ZVByb3BlcnR5TW9kZTo6RGVmYXVsdCB9OworICAgIEhlYXBBbmFseXplciogbV9hY3RpdmVIZWFw
QW5hbHl6ZXIgeyBudWxscHRyIH07CiAgICAgc3RkOjp1bmlxdWVfcHRyPENvZGVDYWNoZT4gbV9j
b2RlQ2FjaGU7CiAgICAgc3RkOjp1bmlxdWVfcHRyPEludGxDYWNoZT4gbV9pbnRsQ2FjaGU7CiAg
ICAgc3RkOjp1bmlxdWVfcHRyPEJ1aWx0aW5FeGVjdXRhYmxlcz4gbV9idWlsdGluRXhlY3V0YWJs
ZXM7CkBAIC0xMjM3LDYgKzEyNDMsNyBAQCBwcml2YXRlOgogICAgIFZNKiBtX3ByZXY7IC8vIFJl
cXVpcmVkIGJ5IERvdWJseUxpbmtlZExpc3ROb2RlLgogICAgIFZNKiBtX25leHQ7IC8vIFJlcXVp
cmVkIGJ5IERvdWJseUxpbmtlZExpc3ROb2RlLgogCitwdWJsaWM6CiAgICAgLy8gRnJpZW5kcyBm
b3IgZXhjZXB0aW9uIGNoZWNraW5nIHB1cnBvc2Ugb25seS4KICAgICBmcmllbmQgY2xhc3MgSGVh
cDsKICAgICBmcmllbmQgY2xhc3MgQ2F0Y2hTY29wZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1dlYWtNYXBJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9XZWFrTWFwSW1wbC5jcHAJKHJldmlzaW9uIDI3MjI5NykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtNYXBJbXBsLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzksOCArMzksOSBAQCB2b2lkIFdlYWtNYXBJbXBsPFdlYWtNYXBCdWNrZXQ+OjpkZXN0
cm95CiAgICAgc3RhdGljX2Nhc3Q8V2Vha01hcEltcGwqPihjZWxsKS0+fldlYWtNYXBJbXBsKCk7
CiB9CiAKLXRlbXBsYXRlIDx0eXBlbmFtZSBXZWFrTWFwQnVja2V0Pgotdm9pZCBXZWFrTWFwSW1w
bDxXZWFrTWFwQnVja2V0Pjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9y
JiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgV2Vha01hcEJ1Y2tldD4KK3RlbXBsYXRlPHR5
cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFdlYWtNYXBJbXBsPFdlYWtNYXBCdWNrZXQ+Ojp2aXNpdENo
aWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgV2Vha01h
cEltcGwqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8V2Vha01hcEltcGwqPihjZWxsKTsKICAgICBBU1NF
UlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC00OCw2ICs0OSw4
IEBAIHZvaWQgV2Vha01hcEltcGw8V2Vha01hcEJ1Y2tldD46OnZpc2l0Q2gKICAgICB2aXNpdG9y
LnJlcG9ydEV4dHJhTWVtb3J5VmlzaXRlZCh0aGlzT2JqZWN0LT5tX2NhcGFjaXR5ICogc2l6ZW9m
KFdlYWtNYXBCdWNrZXQpKTsKIH0KIAorREVGSU5FX1RFTVBMQVRFX1ZJU0lUX0NISUxEUkVOKHRl
bXBsYXRlPHR5cGVuYW1lIFdlYWtNYXBCdWNrZXQ+LCBXZWFrTWFwSW1wbDxXZWFrTWFwQnVja2V0
Pik7CisKIHRlbXBsYXRlIDx0eXBlbmFtZSBXZWFrTWFwQnVja2V0Pgogc2l6ZV90IFdlYWtNYXBJ
bXBsPFdlYWtNYXBCdWNrZXQ+Ojplc3RpbWF0ZWRTaXplKEpTQ2VsbCogY2VsbCwgVk0mIHZtKQog
ewpAQCAtNTYsMTUgKzU5LDE1IEBAIHNpemVfdCBXZWFrTWFwSW1wbDxXZWFrTWFwQnVja2V0Pjo6
ZXN0aW0KIH0KIAogdGVtcGxhdGUgPD4KLXZvaWQgV2Vha01hcEltcGw8V2Vha01hcEJ1Y2tldDxX
ZWFrTWFwQnVja2V0RGF0YUtleT4+Ojp2aXNpdE91dHB1dENvbnN0cmFpbnRzKEpTQ2VsbCosIFNs
b3RWaXNpdG9yJikKK3ZvaWQgV2Vha01hcEltcGw8V2Vha01hcEJ1Y2tldDxXZWFrTWFwQnVja2V0
RGF0YUtleT4+Ojp2aXNpdE91dHB1dENvbnN0cmFpbnRzKEpTQ2VsbCosIEFic3RyYWN0U2xvdFZp
c2l0b3ImKQogewogICAgIC8vIE9ubHkgSlNXZWFrTWFwIG5lZWRzIHRvIGhhcnZlc3QgdmFsdWUg
cmVmZXJlbmNlcwogfQogCiB0ZW1wbGF0ZSA8Pgotdm9pZCBXZWFrTWFwSW1wbDxXZWFrTWFwQnVj
a2V0PFdlYWtNYXBCdWNrZXREYXRhS2V5VmFsdWU+Pjo6dmlzaXRPdXRwdXRDb25zdHJhaW50cyhK
U0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBXZWFrTWFwSW1wbDxXZWFr
TWFwQnVja2V0PFdlYWtNYXBCdWNrZXREYXRhS2V5VmFsdWU+Pjo6dmlzaXRPdXRwdXRDb25zdHJh
aW50cyhKU0NlbGwqIGNlbGwsIEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7Ci0gICAg
Vk0mIHZtID0gdmlzaXRvci52bSgpOworLy8gICAgVk0mIHZtID0gdmlzaXRvci52bSgpOwogICAg
IGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8V2Vha01hcEltcGwqPihjZWxsKTsKICAgICBhdXRv
IGxvY2tlciA9IGhvbGRMb2NrKHRoaXNPYmplY3QtPmNlbGxMb2NrKCkpOwogICAgIGF1dG8qIGJ1
ZmZlciA9IHRoaXNPYmplY3QtPmJ1ZmZlcigpOwpAQCAtNzIsNyArNzUsOCBAQCB2b2lkIFdlYWtN
YXBJbXBsPFdlYWtNYXBCdWNrZXQ8V2Vha01hcEJ1CiAgICAgICAgIGF1dG8qIGJ1Y2tldCA9IGJ1
ZmZlciArIGluZGV4OwogICAgICAgICBpZiAoYnVja2V0LT5pc0VtcHR5KCkgfHwgYnVja2V0LT5p
c0RlbGV0ZWQoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAoIXZtLmhlYXAu
aXNNYXJrZWQoYnVja2V0LT5rZXkoKSkpCisvLyAgICAgICAgaWYgKCF2bS5oZWFwLmlzTWFya2Vk
KGJ1Y2tldC0+a2V5KCkpKSAvLyBtbGFtCisgICAgICAgIGlmICghdmlzaXRvci5pc01hcmtlZChi
dWNrZXQtPmtleSgpKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBidWNrZXQtPnZp
c2l0QWdncmVnYXRlKHZpc2l0b3IpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1dlYWtNYXBJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvV2Vha01hcEltcGwuaAkocmV2aXNpb24gMjcyMjk3KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha01hcEltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtMTQ0
LDggKzE0NCwxMCBAQCBwdWJsaWM6CiAgICAgICAgIGNsZWFyVmFsdWUoKTsKICAgICB9CiAKKy8v
ICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBWaXNpdG9yLCB0eXBlbmFtZSBUID0gRGF0YT4KKy8vICAg
IEFMV0FZU19JTkxJTkUgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19zYW1lPFQsIFdl
YWtNYXBCdWNrZXREYXRhS2V5VmFsdWU+Ojp2YWx1ZT46OnR5cGUgdmlzaXRBZ2dyZWdhdGUoVmlz
aXRvciYgdmlzaXRvcikKICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVCA9IERhdGE+Ci0gICAgQUxX
QVlTX0lOTElORSB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8VCwgV2Vha01h
cEJ1Y2tldERhdGFLZXlWYWx1ZT46OnZhbHVlPjo6dHlwZSB2aXNpdEFnZ3JlZ2F0ZShTbG90Vmlz
aXRvciYgdmlzaXRvcikKKyAgICBBTFdBWVNfSU5MSU5FIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lm
PHN0ZDo6aXNfc2FtZTxULCBXZWFrTWFwQnVja2V0RGF0YUtleVZhbHVlPjo6dmFsdWU+Ojp0eXBl
IHZpc2l0QWdncmVnYXRlKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiAgICAgewogICAg
ICAgICB2aXNpdG9yLmFwcGVuZChtX2RhdGEudmFsdWUpOwogICAgIH0KQEAgLTIwMiw3ICsyMDQs
NyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzRGVzdHJ1Y3Rpb24g
PSB0cnVlOwogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CiAKLSAgICBzdGF0aWMg
dm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9U
RU1QTEFURV9WSVNJVF9DSElMRFJFTjsKIAogICAgIHN0YXRpYyBzaXplX3QgZXN0aW1hdGVkU2l6
ZShKU0NlbGwqLCBWTSYpOwogCkBAIC0zMTEsNyArMzEzLDcgQEAgcHVibGljOgogICAgICAgICBy
ZXR1cm4gdm0ud2Vha1NldFNwYWNlPG1vZGU+KCk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQg
dmlzaXRPdXRwdXRDb25zdHJhaW50cyhKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIHN0YXRp
YyB2b2lkIHZpc2l0T3V0cHV0Q29uc3RyYWludHMoSlNDZWxsKiwgQWJzdHJhY3RTbG90VmlzaXRv
ciYpOwogICAgIHZvaWQgZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoVk0mKTsKIAogcHJpdmF0ZToK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9KU0RvbGxhclZNLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvSlNEb2xsYXJWTS5jcHAJKHJldmlz
aW9uIDI3MjI5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9KU0RvbGxhclZNLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjI0LDE0ICsyMjQsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lk
IGZpbmlzaENyZWF0aW9uKFZNJiwgUm9vdCopOwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGls
ZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQotICAgIHsKLSAgICAgICAg
RG9sbGFyVk1Bc3NlcnRTY29wZSBhc3NlcnRTY29wZTsKLSAgICAgICAgRWxlbWVudCogdGhpc09i
amVjdCA9IGpzQ2FzdDxFbGVtZW50Kj4oY2VsbCk7Ci0gICAgICAgIEFTU0VSVF9HQ19PQkpFQ1Rf
SU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKLSAgICAgICAgQmFzZTo6dmlzaXRDaGlsZHJl
bih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKLSAgICAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVj
dC0+bV9yb290KTsKLSAgICB9CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIHN0
YXRpYyBFbGVtZW50SGFuZGxlT3duZXIqIGhhbmRsZU93bmVyKCk7CiAKQEAgLTI0NywxMCArMjQw
LDIyIEBAIHByaXZhdGU6CiAgICAgV3JpdGVCYXJyaWVyPFJvb3Q+IG1fcm9vdDsKIH07CiAKK3Rl
bXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEVsZW1lbnQ6OnZpc2l0Q2hpbGRyZW5JbXBs
KEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBEb2xsYXJWTUFzc2VydFNj
b3BlIGFzc2VydFNjb3BlOworICAgIEVsZW1lbnQqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8RWxlbWVu
dCo+KGNlbGwpOworICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5m
bygpKTsKKyAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOworICAg
IHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fcm9vdCk7Cit9CisKK0RFRklORV9WSVNJVF9D
SElMRFJFTihFbGVtZW50KTsKKwogY2xhc3MgRWxlbWVudEhhbmRsZU93bmVyIGZpbmFsIDogcHVi
bGljIFdlYWtIYW5kbGVPd25lciB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJs
aWM6Ci0gICAgYm9vbCBpc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6
OlVua25vd24+IGhhbmRsZSwgdm9pZCosIFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFy
KiogcmVhc29uKSBmaW5hbAorICAgIGJvb2wgaXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlND
OjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBBYnN0cmFjdFNsb3RWaXNpdG9y
JiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKSBmaW5hbAogICAgIHsKICAgICAgICAgRG9s
bGFyVk1Bc3NlcnRTY29wZSBhc3NlcnRTY29wZTsKICAgICAgICAgaWYgKFVOTElLRUxZKHJlYXNv
bikpCkBAIC0zMDQsMTggKzMwOSwyMyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBTdHJ1Y3R1
cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5
cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCB2
aXNpdENoaWxkcmVuKEpTQ2VsbCogdGhpc09iamVjdCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCi0g
ICAgewotICAgICAgICBEb2xsYXJWTUFzc2VydFNjb3BlIGFzc2VydFNjb3BlOwotICAgICAgICBB
U1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7Ci0gICAgICAgIEJh
c2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7Ci0gICAgICAgIHZpc2l0b3Iu
YWRkT3BhcXVlUm9vdCh0aGlzT2JqZWN0KTsKLSAgICB9CisgICAgREVDTEFSRV9WSVNJVF9DSElM
RFJFTjsKIAogcHJpdmF0ZToKICAgICBXZWFrPEVsZW1lbnQ+IG1fZWxlbWVudDsKIH07CiAKK3Rl
bXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFJvb3Q6OnZpc2l0Q2hpbGRyZW5JbXBsKEpT
Q2VsbCogdGhpc09iamVjdCwgVmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBEb2xsYXJWTUFzc2Vy
dFNjb3BlIGFzc2VydFNjb3BlOworICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09i
amVjdCwgaW5mbygpKTsKKyAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0
b3IpOworICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdCh0aGlzT2JqZWN0KTsKK30KKworREVGSU5F
X1ZJU0lUX0NISUxEUkVOKFJvb3QpOworCiBjbGFzcyBTaW1wbGVPYmplY3QgOiBwdWJsaWMgSlNO
b25GaW5hbE9iamVjdCB7CiBwdWJsaWM6CiAgICAgU2ltcGxlT2JqZWN0KFZNJiB2bSwgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUpCkBAIC0zNDAsMTQgKzM1MCw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0
dXJuIHNpbXBsZU9iamVjdDsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVu
KEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCi0gICAgewotICAgICAgICBEb2xs
YXJWTUFzc2VydFNjb3BlIGFzc2VydFNjb3BlOwotICAgICAgICBTaW1wbGVPYmplY3QqIHRoaXNP
YmplY3QgPSBqc0Nhc3Q8U2ltcGxlT2JqZWN0Kj4oY2VsbCk7Ci0gICAgICAgIEFTU0VSVF9HQ19P
QkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKLSAgICAgICAgQmFzZTo6dmlzaXRD
aGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKLSAgICAgICAgdmlzaXRvci5hcHBlbmQodGhp
c09iamVjdC0+bV9oaWRkZW5WYWx1ZSk7Ci0gICAgfQorICAgIERFQ0xBUkVfVklTSVRfQ0hJTERS
RU47CiAKICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKICAgICB7CkBAIC0z
ODAsNiArMzgzLDE4IEBAIHByaXZhdGU6CiAgICAgV3JpdGVCYXJyaWVyPEpTQzo6VW5rbm93bj4g
bV9oaWRkZW5WYWx1ZTsKIH07CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFNp
bXBsZU9iamVjdDo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNp
dG9yKQoreworICAgIERvbGxhclZNQXNzZXJ0U2NvcGUgYXNzZXJ0U2NvcGU7CisgICAgU2ltcGxl
T2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PFNpbXBsZU9iamVjdCo+KGNlbGwpOworICAgIEFT
U0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKKyAgICBCYXNlOjp2
aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOworICAgIHZpc2l0b3IuYXBwZW5kKHRo
aXNPYmplY3QtPm1faGlkZGVuVmFsdWUpOworfQorCitERUZJTkVfVklTSVRfQ0hJTERSRU4oU2lt
cGxlT2JqZWN0KTsKKwogY2xhc3MgSW1wdXJlR2V0dGVyIDogcHVibGljIEpTTm9uRmluYWxPYmpl
Y3QgewogcHVibGljOgogICAgIEltcHVyZUdldHRlcihWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0
dXJlKQpAQCAtNDM2LDE0ICs0NTEsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBCYXNlOjpn
ZXRPd25Qcm9wZXJ0eVNsb3Qob2JqZWN0LCBnbG9iYWxPYmplY3QsIG5hbWUsIHNsb3QpOwogICAg
IH0KIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90Vmlz
aXRvciYgdmlzaXRvcikKLSAgICB7Ci0gICAgICAgIERvbGxhclZNQXNzZXJ0U2NvcGUgYXNzZXJ0
U2NvcGU7Ci0gICAgICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2VsbCwgaW5mbygpKTsK
LSAgICAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbihjZWxsLCB2aXNpdG9yKTsKLSAgICAgICAgSW1w
dXJlR2V0dGVyKiB0aGlzT2JqZWN0ID0ganNDYXN0PEltcHVyZUdldHRlcio+KGNlbGwpOwotICAg
ICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2RlbGVnYXRlKTsKLSAgICB9CisgICAg
REVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIHZvaWQgc2V0RGVsZWdhdGUoVk0mIHZtLCBK
U09iamVjdCogZGVsZWdhdGUpCiAgICAgewpAQCAtNDU0LDYgKzQ2MiwxOCBAQCBwcml2YXRlOgog
ICAgIFdyaXRlQmFycmllcjxKU09iamVjdD4gbV9kZWxlZ2F0ZTsKIH07CiAKK3RlbXBsYXRlPHR5
cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEltcHVyZUdldHRlcjo6dmlzaXRDaGlsZHJlbkltcGwoSlND
ZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIERvbGxhclZNQXNzZXJ0U2NvcGUg
YXNzZXJ0U2NvcGU7CisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjZWxsLCBpbmZvKCkp
OworICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4oY2VsbCwgdmlzaXRvcik7CisgICAgSW1wdXJlR2V0
dGVyKiB0aGlzT2JqZWN0ID0ganNDYXN0PEltcHVyZUdldHRlcio+KGNlbGwpOworICAgIHZpc2l0
b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fZGVsZWdhdGUpOworfQorCitERUZJTkVfVklTSVRfQ0hJ
TERSRU4oSW1wdXJlR2V0dGVyKTsKKwogc3RhdGljIEpTQ19ERUNMQVJFX0NVU1RPTV9HRVRURVIo
Y3VzdG9tR2V0dGVyVmFsdWVHZXR0ZXIpOwogc3RhdGljIEpTQ19ERUNMQVJFX0NVU1RPTV9HRVRU
RVIoY3VzdG9tR2V0dGVyQWNlc3NvckdldHRlcik7CiAKQEAgLTE4MjIsMTQgKzE4NDIsNyBAQCBw
dWJsaWM6CiAgICAgICAgIHB1dERpcmVjdE5hdGl2ZUZ1bmN0aW9uKHZtLCBnbG9iYWxPYmplY3Qs
IElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJhZGRCeXRlcyIpLCAwLCBmdW5jdGlvbldhc21T
dHJlYW1pbmdDb21waWxlckFkZEJ5dGVzLCBOb0ludHJpbnNpYywgc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSkpOwogICAgIH0KIAotICAgIHN0YXRpYyB2
b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKLSAg
ICB7Ci0gICAgICAgIERvbGxhclZNQXNzZXJ0U2NvcGUgYXNzZXJ0U2NvcGU7Ci0gICAgICAgIGF1
dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8V2FzbVN0cmVhbWluZ0NvbXBpbGVyKj4oY2VsbCk7Ci0g
ICAgICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKLSAg
ICAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKLSAgICAgICAg
dmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9wcm9taXNlKTsKLSAgICB9CisgICAgREVDTEFS
RV9WSVNJVF9DSElMRFJFTjsKIAogICAgIERFQ0xBUkVfSU5GTzsKIApAQCAtMTgzNyw2ICsxODUw
LDE4IEBAIHB1YmxpYzoKICAgICBSZWY8V2FzbTo6U3RyZWFtaW5nQ29tcGlsZXI+IG1fc3RyZWFt
aW5nQ29tcGlsZXI7CiB9OwogCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBXYXNt
U3RyZWFtaW5nQ29tcGlsZXI6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRv
ciYgdmlzaXRvcikKK3sKKyAgICBEb2xsYXJWTUFzc2VydFNjb3BlIGFzc2VydFNjb3BlOworICAg
IGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8V2FzbVN0cmVhbWluZ0NvbXBpbGVyKj4oY2VsbCk7
CisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOworICAg
IEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CisgICAgdmlzaXRvci5h
cHBlbmQodGhpc09iamVjdC0+bV9wcm9taXNlKTsKK30KKworREVGSU5FX1ZJU0lUX0NISUxEUkVO
KFdhc21TdHJlYW1pbmdDb21waWxlcik7CisKIGNvbnN0IENsYXNzSW5mbyBXYXNtU3RyZWFtaW5n
Q29tcGlsZXI6OnNfaW5mbyA9IHsgIldhc21TdHJlYW1pbmdDb21waWxlciIsICZCYXNlOjpzX2lu
Zm8sIG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoV2FzbVN0cmVhbWluZ0Nv
bXBpbGVyKSB9OwogCiBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oZnVuY3Rpb25XYXNtU3RyZWFt
aW5nQ29tcGlsZXJBZGRCeXRlcywgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxG
cmFtZSogY2FsbEZyYW1lKSkKQEAgLTM2OTksMTMgKzM3MjQsMTYgQEAgdm9pZCBKU0RvbGxhclZN
OjphZGRDb25zdHJ1Y3RpYmxlRnVuY3RpbwogICAgIHB1dERpcmVjdCh2bSwgaWRlbnRpZmllciwg
SlNGdW5jdGlvbjo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIGFyZ3VtZW50cywgaWRlbnRpZmll
ci5zdHJpbmcoKSwgZnVuY3Rpb24sIE5vSW50cmluc2ljLCBmdW5jdGlvbiksIGpzRG9sbGFyVk1Q
cm9wZXJ0eUF0dHJpYnV0ZXMpOwogfQogCi12b2lkIEpTRG9sbGFyVk06OnZpc2l0Q2hpbGRyZW4o
SlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZp
c2l0b3I+Cit2b2lkIEpTRG9sbGFyVk06OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwg
VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU0RvbGxhclZNKiB0aGlzT2JqZWN0ID0ganNDYXN0
PEpTRG9sbGFyVk0qPihjZWxsKTsKICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3Qs
IHZpc2l0b3IpOwogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fb2JqZWN0RG9pbmdT
aWRlRWZmZWN0UHV0V2l0aG91dENvcnJlY3RTbG90U3RhdHVzU3RydWN0dXJlKTsKIH0KIAorREVG
SU5FX1ZJU0lUX0NISUxEUkVOKEpTRG9sbGFyVk0pOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAog
SUdOT1JFX1dBUk5JTkdTX0VORApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0pT
RG9sbGFyVk0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvSlNE
b2xsYXJWTS5oCShyZXZpc2lvbiAyNzIyOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9v
bHMvSlNEb2xsYXJWTS5oCSh3b3JraW5nIGNvcHkpCkBAIC03NCw3ICs3NCw3IEBAIHByaXZhdGU6
CiAgICAgdm9pZCBhZGRGdW5jdGlvbihWTSYsIEpTR2xvYmFsT2JqZWN0KiwgY29uc3QgY2hhciog
bmFtZSwgTmF0aXZlRnVuY3Rpb24sIHVuc2lnbmVkIGFyZ3VtZW50cyk7CiAgICAgdm9pZCBhZGRD
b25zdHJ1Y3RpYmxlRnVuY3Rpb24oVk0mLCBKU0dsb2JhbE9iamVjdCosIGNvbnN0IGNoYXIqIG5h
bWUsIE5hdGl2ZUZ1bmN0aW9uLCB1bnNpZ25lZCBhcmd1bWVudHMpOwogCi0gICAgc3RhdGljIHZv
aWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklT
SVRfQ0hJTERSRU47CiAKICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX29iamVjdERvaW5n
U2lkZUVmZmVjdFB1dFdpdGhvdXRDb3JyZWN0U2xvdFN0YXR1c1N0cnVjdHVyZTsKIH07CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtR2xvYmFsLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtR2xvYmFsLmNwcAkocmV2aXNpb24gMjcy
Mjk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUdsb2JhbC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEwMyw3ICsxMDMsOCBAQCB2b2lkIEdsb2JhbDo6c2V0KEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPCiAgICAgfQogfQogCi12b2lkIEdsb2JhbDo6dmlzaXRBZ2dyZWdhdGUoU2xv
dFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBHbG9i
YWw6OnZpc2l0QWdncmVnYXRlKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgc3dpdGNoIChtX3R5
cGUpIHsKICAgICBjYXNlIFdhc206OlR5cGU6OkV4dGVybnJlZjoKQEAgLTExNyw2ICsxMTgsOSBA
QCB2b2lkIEdsb2JhbDo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImCiAgICAgfQogfQogCit0
ZW1wbGF0ZSB2b2lkIEdsb2JhbDo6dmlzaXRBZ2dyZWdhdGUoQWJzdHJhY3RTbG90VmlzaXRvciYp
OwordGVtcGxhdGUgdm9pZCBHbG9iYWw6OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJik7CisK
IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpHbG9iYWwKIAogI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NF
TUJMWSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21HbG9iYWwuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtR2xvYmFsLmgJKHJldmlz
aW9uIDI3MjI5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21HbG9iYWwuaAko
d29ya2luZyBjb3B5KQpAQCAtNTcsNyArNTcsNyBAQCBwdWJsaWM6CiAgICAgSlNWYWx1ZSBnZXQo
SlNHbG9iYWxPYmplY3QqKSBjb25zdDsKICAgICB1aW50NjRfdCBnZXRQcmltaXRpdmUoKSBjb25z
dCB7IHJldHVybiBtX3ZhbHVlLm1fcHJpbWl0aXZlOyB9CiAgICAgdm9pZCBzZXQoSlNHbG9iYWxP
YmplY3QqLCBKU1ZhbHVlKTsKLSAgICB2b2lkIHZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJik7
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCB2aXNpdEFnZ3JlZ2F0ZShWaXNp
dG9yJik7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBUKiBvd25lcigpIGNvbnN0IHsgcmV0
dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8VCo+KG1fb3duZXIpOyB9CiAgICAgdm9pZCBzZXRPd25lcihK
U09iamVjdCogb3duZXIpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGFi
bGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UYWJs
ZS5jcHAJKHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21UYWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2Niw3ICsxNjYsOCBAQCBKU1ZhbHVlIFRh
YmxlOjpnZXQodWludDMyX3QgaW5kZXgpIGNvbnN0CiAgICAgcmV0dXJuIG1fanNWYWx1ZXMuZ2V0
KClbaW5kZXggJiBtX21hc2tdLmdldCgpOwogfQogCi12b2lkIFRhYmxlOjp2aXNpdEFnZ3JlZ2F0
ZShTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lk
IFRhYmxlOjp2aXNpdEFnZ3JlZ2F0ZShWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFJFTEVBU0Vf
QVNTRVJUKG1fb3duZXIpOwogICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9vd25lci0+Y2Vs
bExvY2soKSk7CkBAIC0xNzQsNiArMTc1LDkgQEAgdm9pZCBUYWJsZTo6dmlzaXRBZ2dyZWdhdGUo
U2xvdFZpc2l0b3ImIAogICAgICAgICB2aXNpdG9yLmFwcGVuZChtX2pzVmFsdWVzLmdldCgpW2ld
KTsKIH0KIAordGVtcGxhdGUgdm9pZCBUYWJsZTo6dmlzaXRBZ2dyZWdhdGUoQWJzdHJhY3RTbG90
VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBUYWJsZTo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0
b3ImKTsKKwogVHlwZSBUYWJsZTo6d2FzbVR5cGUoKSBjb25zdAogewogICAgIGlmIChpc0V4dGVy
bnJlZlRhYmxlKCkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGFibGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGFibGUuaAko
cmV2aXNpb24gMjcyMjk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRhYmxl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTgwLDcgKzgwLDcgQEAgcHVibGljOgogICAgIE9wdGlvbmFs
PHVpbnQzMl90PiBncm93KHVpbnQzMl90IGRlbHRhLCBKU1ZhbHVlIGRlZmF1bHRWYWx1ZSk7CiAg
ICAgdm9pZCBjb3B5KGNvbnN0IFRhYmxlKiBzcmNUYWJsZSwgdWludDMyX3QgZHN0SW5kZXgsIHVp
bnQzMl90IHNyY0luZGV4KTsKIAotICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3Im
KTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIHZpc2l0QWdncmVnYXRlKFZp
c2l0b3ImKTsKIAogcHJvdGVjdGVkOgogICAgIFRhYmxlKHVpbnQzMl90IGluaXRpYWwsIE9wdGlv
bmFsPHVpbnQzMl90PiBtYXhpbXVtLCBUYWJsZUVsZW1lbnRUeXBlID0gVGFibGVFbGVtZW50VHlw
ZTo6RXh0ZXJucmVmKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTVG9X
YXNtSUNDYWxsZWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL0pTVG9XYXNtSUNDYWxsZWUuY3BwCShyZXZpc2lvbiAyNzIyOTcpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9KU1RvV2FzbUlDQ2FsbGVlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDksNyArNDksOCBAQCBTdHJ1Y3R1cmUqIEpTVG9XYXNtSUNDYWxsZWU6OmNyZWF0ZVN0cnVj
CiAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlw
ZSwgVHlwZUluZm8oSlNDYWxsZWVUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CiB9CiAK
LXZvaWQgSlNUb1dhc21JQ0NhbGxlZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNUb1dh
c21JQ0NhbGxlZTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNp
dG9yKQogewogICAgIEpTVG9XYXNtSUNDYWxsZWUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUb1dh
c21JQ0NhbGxlZSo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09i
amVjdCwgaW5mbygpKTsKQEAgLTU4LDYgKzU5LDggQEAgdm9pZCBKU1RvV2FzbUlDQ2FsbGVlOjp2
aXNpdENoaWxkcmVuKEpTQwogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fZnVuY3Rp
b24pOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNUb1dhc21JQ0NhbGxlZSk7CisKIH0g
Ly8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNUb1dhc21JQ0NhbGxlZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTVG9XYXNtSUNDYWxsZWUuaAko
cmV2aXNpb24gMjcyMjk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNUb1dh
c21JQ0NhbGxlZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01Niw3ICs1Niw3IEBAIHByaXZhdGU6CiAg
ICAgSlNUb1dhc21JQ0NhbGxlZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IFN0cnVjdHVyZSogc3RydWN0dXJlKQogICAgICAgICA6IEJhc2Uodm0sIGdsb2JhbE9iamVjdCwg
c3RydWN0dXJlKQogICAgIHsgfQotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgV3Jp
dGVCYXJyaWVyPFdlYkFzc2VtYmx5RnVuY3Rpb24+IG1fZnVuY3Rpb247CiB9OwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9jay5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNv
ZGVCbG9jay5jcHAJKHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Miw3
ICs4Miw4IEBAIHZvaWQgSlNXZWJBc3NlbWJseUNvZGVCbG9jazo6Y2xlYXJKU0NhbGwKICAgICAg
ICAgKCppdGVyKS0+dW5saW5rKHZtKTsKIH0KIAotdm9pZCBKU1dlYkFzc2VtYmx5Q29kZUJsb2Nr
Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1w
bGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrOjp2aXNp
dENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNX
ZWJBc3NlbWJseUNvZGVCbG9jayogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1dlYkFzc2VtYmx5Q29k
ZUJsb2NrKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0
LCBpbmZvKCkpOwpAQCAtOTAsNiArOTEsOCBAQCB2b2lkIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6
OnZpc2l0Q2hpbGRyCiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9y
KTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTV2ViQXNzZW1ibHlDb2RlQmxvY2spOwor
CiB2b2lkIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6OmZpbmFsaXplVW5jb25kaXRpb25hbGx5KFZN
JiB2bSkKIHsKICAgICBmb3IgKGF1dG8gaXRlciA9IG1fY2FsbExpbmtJbmZvcy5iZWdpbigpOyAh
IWl0ZXI7ICsraXRlcikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2Vi
QXNzZW1ibHlDb2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmgJKHJldmlzaW9uIDI3MjI5NykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suaAkod29y
a2luZyBjb3B5KQpAQCAtODYsNyArODYsNyBAQCBwcml2YXRlOgogICAgIERFQ0xBUkVfRVhQT1JU
X0lORk87CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVl
OwogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7Ci0gICAgc3RhdGljIHZvaWQgdmlz
aXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJ
TERSRU47CiAKICAgICBSZWY8V2FzbTo6Q29kZUJsb2NrPiBtX2NvZGVCbG9jazsKICAgICBWZWN0
b3I8TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPFdhc21FbnRyeVB0clRhZz4+IG1fd2FzbVRvSlNFeGl0
U3R1YnM7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5
R2xvYmFsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9K
U1dlYkFzc2VtYmx5R2xvYmFsLmNwcAkocmV2aXNpb24gMjcyMjk3KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUdsb2JhbC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTcxLDcgKzcxLDggQEAgdm9pZCBKU1dlYkFzc2VtYmx5R2xvYmFsOjpkZXN0cm95KEpTQ2Vs
bAogICAgIHN0YXRpY19jYXN0PEpTV2ViQXNzZW1ibHlHbG9iYWwqPihjZWxsKS0+SlNXZWJBc3Nl
bWJseUdsb2JhbDo6fkpTV2ViQXNzZW1ibHlHbG9iYWwoKTsKIH0KIAotdm9pZCBKU1dlYkFzc2Vt
Ymx5R2xvYmFsOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0
b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1dlYkFzc2VtYmx5R2xvYmFs
Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAg
ICAgSlNXZWJBc3NlbWJseUdsb2JhbCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1dlYkFzc2VtYmx5
R2xvYmFsKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0
LCBpbmZvKCkpOwpAQCAtODAsNiArODEsOCBAQCB2b2lkIEpTV2ViQXNzZW1ibHlHbG9iYWw6OnZp
c2l0Q2hpbGRyZW4oCiAgICAgdGhpc09iamVjdC0+Z2xvYmFsKCktPnZpc2l0QWdncmVnYXRlKHZp
c2l0b3IpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNXZWJBc3NlbWJseUdsb2JhbCk7
CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUdsb2JhbC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1i
bHlHbG9iYWwuaAkocmV2aXNpb24gMjcyMjk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vanMvSlNXZWJBc3NlbWJseUdsb2JhbC5oCSh3b3JraW5nIGNvcHkpCkBAIC01OSw3ICs1OSw3
IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgSlNXZWJBc3NlbWJseUdsb2JhbChWTSYsIFN0cnVj
dHVyZSosIFJlZjxXYXNtOjpHbG9iYWw+JiYpOwogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0m
KTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7
CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIFJlZjxXYXNtOjpHbG9iYWw+IG1f
Z2xvYmFsOwogfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNz
ZW1ibHlJbnN0YW5jZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmNwcAkocmV2aXNpb24gMjcyMjk3KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNzMsNyArNzMsOCBAQCB2b2lkIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6
ZGVzdHJveShKU0NlCiAgICAgc3RhdGljX2Nhc3Q8SlNXZWJBc3NlbWJseUluc3RhbmNlKj4oY2Vs
bCktPkpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6fkpTV2ViQXNzZW1ibHlJbnN0YW5jZSgpOwogfQog
Ci12b2lkIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGws
IFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQg
SlNXZWJBc3NlbWJseUluc3RhbmNlOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZp
c2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1dlYkFz
c2VtYmx5SW5zdGFuY2UqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRo
aXNPYmplY3QsIGluZm8oKSk7CkBAIC0xMDIsNiArMTAzLDggQEAgdm9pZCBKU1dlYkFzc2VtYmx5
SW5zdGFuY2U6OnZpc2l0Q2hpbGRyZQogICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVk
KHdyYXBwZXIuZ2V0KCkpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNXZWJBc3NlbWJs
eUluc3RhbmNlKTsKKwogdm9pZCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OmZpbmFsaXplQ3JlYXRp
b24oVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWY8V2FzbTo6Q29kZUJs
b2NrPiYmIHdhc21Db2RlQmxvY2ssIEpTT2JqZWN0KiBpbXBvcnRPYmplY3QsIFdhc206OkNyZWF0
aW9uTW9kZSBjcmVhdGlvbk1vZGUpCiB7CiAgICAgbV9pbnN0YW5jZS0+ZmluYWxpemVDcmVhdGlv
bih0aGlzLCB3YXNtQ29kZUJsb2NrLmNvcHlSZWYoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuaAkocmV2aXNp
b24gMjcyMjk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJs
eUluc3RhbmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwNSw3ICsxMDUsNyBAQCBwdWJsaWM6CiBw
cml2YXRlOgogICAgIEpTV2ViQXNzZW1ibHlJbnN0YW5jZShWTSYsIFN0cnVjdHVyZSosIFJlZjxX
YXNtOjpJbnN0YW5jZT4mJik7CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIEpTV2ViQXNz
ZW1ibHlNb2R1bGUqLCBXZWJBc3NlbWJseU1vZHVsZVJlY29yZCopOwotICAgIHN0YXRpYyB2b2lk
IHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lU
X0NISUxEUkVOOwogCiAgICAgUmVmPFdhc206Okluc3RhbmNlPiBtX2luc3RhbmNlOwogICAgIFZN
KiBtX3ZtOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJs
eU1lbW9yeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
SlNXZWJBc3NlbWJseU1lbW9yeS5jcHAJKHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNZW1vcnkuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xNTksNyArMTU5LDggQEAgdm9pZCBKU1dlYkFzc2VtYmx5TWVtb3J5OjpkZXN0cm95KEpT
Q2VsbAogICAgIG1lbW9yeS0+SlNXZWJBc3NlbWJseU1lbW9yeTo6fkpTV2ViQXNzZW1ibHlNZW1v
cnkoKTsKIH0KIAotdm9pZCBKU1dlYkFzc2VtYmx5TWVtb3J5Ojp2aXNpdENoaWxkcmVuKEpTQ2Vs
bCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
Pgordm9pZCBKU1dlYkFzc2VtYmx5TWVtb3J5Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNl
bGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxK
U1dlYkFzc2VtYmx5TWVtb3J5Kj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklU
Uyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtMTY5LDYgKzE3MCw4IEBAIHZvaWQgSlNXZWJBc3Nl
bWJseU1lbW9yeTo6dmlzaXRDaGlsZHJlbigKICAgICB2aXNpdG9yLnJlcG9ydEV4dHJhTWVtb3J5
VmlzaXRlZCh0aGlzT2JqZWN0LT5tZW1vcnkoKS5zaXplKCkpOwogfQogCitERUZJTkVfVklTSVRf
Q0hJTERSRU4oSlNXZWJBc3NlbWJseU1lbW9yeSk7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAj
ZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvSlNXZWJBc3NlbWJseU1lbW9yeS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNZW1vcnkuaAkocmV2aXNpb24gMjcyMjk3
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1lbW9yeS5o
CSh3b3JraW5nIGNvcHkpCkBAIC02Myw3ICs2Myw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAg
SlNXZWJBc3NlbWJseU1lbW9yeShWTSYsIFN0cnVjdHVyZSopOwogICAgIHZvaWQgZmluaXNoQ3Jl
YXRpb24oVk0mKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RW
aXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIFJlZjxXYXNtOjpN
ZW1vcnk+IG1fbWVtb3J5OwogICAgIFdyaXRlQmFycmllcjxKU0FycmF5QnVmZmVyPiBtX2J1ZmZl
cldyYXBwZXI7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2Vt
Ymx5TW9kdWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9KU1dlYkFzc2VtYmx5TW9kdWxlLmNwcAkocmV2aXNpb24gMjcyMjk3KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEyNCw3ICsxMjQsOCBAQCB2b2lkIEpTV2ViQXNzZW1ibHlNb2R1bGU6OnNldENvZGVC
bG9jayhWCiAgICAgbV9jb2RlQmxvY2tzW3N0YXRpY19jYXN0PHNpemVfdD4obW9kZSldLnNldCh2
bSwgdGhpcywgY29kZUJsb2NrKTsKIH0KIAotdm9pZCBKU1dlYkFzc2VtYmx5TW9kdWxlOjp2aXNp
dENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0
eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1dlYkFzc2VtYmx5TW9kdWxlOjp2aXNpdENoaWxkcmVu
SW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNXZWJBc3NlbWJs
eU1vZHVsZSogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1dlYkFzc2VtYmx5TW9kdWxlKj4oY2VsbCk7
CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAt
MTM1LDYgKzEzNiw4IEBAIHZvaWQgSlNXZWJBc3NlbWJseU1vZHVsZTo6dmlzaXRDaGlsZHJlbigK
ICAgICAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9jb2RlQmxvY2tzW2ldKTsKIH0K
IAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTV2ViQXNzZW1ibHlNb2R1bGUpOworCiB9IC8vIG5h
bWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmgJ
KHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2Vi
QXNzZW1ibHlNb2R1bGUuaAkod29ya2luZyBjb3B5KQpAQCAtODAsNyArODAsNyBAQCBwcml2YXRl
OgogCiAgICAgSlNXZWJBc3NlbWJseU1vZHVsZShWTSYsIFN0cnVjdHVyZSosIFJlZjxXYXNtOjpN
b2R1bGU+JiYpOwogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKLSAgICBzdGF0aWMgdm9p
ZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJ
VF9DSElMRFJFTjsKIAogICAgIFJlZjxXYXNtOjpNb2R1bGU+IG1fbW9kdWxlOwogICAgIFdyaXRl
QmFycmllcjxTeW1ib2xUYWJsZT4gbV9leHBvcnRTeW1ib2xUYWJsZTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlUYWJsZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseVRhYmxlLmNwcAko
cmV2aXNpb24gMjcyMjk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJB
c3NlbWJseVRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzIsNyArNzIsOCBAQCB2b2lkIEpT
V2ViQXNzZW1ibHlUYWJsZTo6ZGVzdHJveShKU0NlbGwqCiAgICAgc3RhdGljX2Nhc3Q8SlNXZWJB
c3NlbWJseVRhYmxlKj4oY2VsbCktPkpTV2ViQXNzZW1ibHlUYWJsZTo6fkpTV2ViQXNzZW1ibHlU
YWJsZSgpOwogfQogCi12b2lkIEpTV2ViQXNzZW1ibHlUYWJsZTo6dmlzaXRDaGlsZHJlbihKU0Nl
bGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRv
cj4KK3ZvaWQgSlNXZWJBc3NlbWJseVRhYmxlOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNl
bGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNXZWJBc3NlbWJseVRhYmxlKiB0aGlzT2Jq
ZWN0ID0ganNDYXN0PEpTV2ViQXNzZW1ibHlUYWJsZSo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19P
QkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTgxLDYgKzgyLDggQEAgdm9p
ZCBKU1dlYkFzc2VtYmx5VGFibGU6OnZpc2l0Q2hpbGRyZW4oSgogICAgIHRoaXNPYmplY3QtPnRh
YmxlKCktPnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERS
RU4oSlNXZWJBc3NlbWJseVRhYmxlKTsKKwogYm9vbCBKU1dlYkFzc2VtYmx5VGFibGU6Omdyb3co
dWludDMyX3QgZGVsdGEsIEpTVmFsdWUgZGVmYXVsdFZhbHVlKQogewogICAgIGlmIChkZWx0YSA9
PSAwKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseVRh
YmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJB
c3NlbWJseVRhYmxlLmgJKHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlUYWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03MCw4ICs3
MCw4IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgSlNXZWJBc3NlbWJseVRhYmxlKFZNJiwgU3Ry
dWN0dXJlKiwgUmVmPFdhc206OlRhYmxlPiYmKTsKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZN
Jik7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYp
OwotCisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKKy8vCiAgICAgUmVmPFdhc206OlRhYmxl
PiBtX3RhYmxlOwogfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2Vi
QXNzZW1ibHlGdW5jdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5jcHAJKHJldmlzaW9uIDI3MjI5NykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00NTIsNyArNDUyLDggQEAgV2ViQXNzZW1ibHlGdW5jdGlvbjo6V2ViQXNz
ZW1ibHlGdW5jdGlvbgogICAgICwgbV9pbXBvcnRhYmxlRnVuY3Rpb24geyBzaWduYXR1cmVJbmRl
eCwgd2FzbVRvV2FzbUVudHJ5cG9pbnRMb2FkTG9jYXRpb24gfQogeyB9CiAKLXZvaWQgV2ViQXNz
ZW1ibHlGdW5jdGlvbjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgV2ViQXNzZW1ibHlGdW5j
dGlvbjo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQog
ewogICAgIFdlYkFzc2VtYmx5RnVuY3Rpb24qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8V2ViQXNzZW1i
bHlGdW5jdGlvbio+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09i
amVjdCwgaW5mbygpKTsKQEAgLTQ2MSw2ICs0NjIsOCBAQCB2b2lkIFdlYkFzc2VtYmx5RnVuY3Rp
b246OnZpc2l0Q2hpbGRyZW4oCiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9qc1Rv
V2FzbUlDQ2FsbGVlKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKFdlYkFzc2VtYmx5RnVu
Y3Rpb24pOworCiB2b2lkIFdlYkFzc2VtYmx5RnVuY3Rpb246OmRlc3Ryb3koSlNDZWxsKiBjZWxs
KQogewogICAgIHN0YXRpY19jYXN0PFdlYkFzc2VtYmx5RnVuY3Rpb24qPihjZWxsKS0+V2ViQXNz
ZW1ibHlGdW5jdGlvbjo6fldlYkFzc2VtYmx5RnVuY3Rpb24oKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmgJKHJldmlz
aW9uIDI3MjI5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5
RnVuY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtODYsNyArODYsNyBAQCBwdWJsaWM6CiAgICAg
V2FzbTo6SW5zdGFuY2UqIHByZXZpb3VzSW5zdGFuY2UoQ2FsbEZyYW1lKik7CiAKIHByaXZhdGU6
Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwor
ICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAgICAgV2ViQXNzZW1ibHlGdW5jdGlvbihWTSYs
IE5hdGl2ZUV4ZWN1dGFibGUqLCBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSosIFdhc206OkNh
bGxlZSYganNFbnRyeXBvaW50LCBXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9uOjpMb2FkTG9j
YXRpb24gZW50cnlwb2ludExvYWRMb2NhdGlvbiwgV2FzbTo6U2lnbmF0dXJlSW5kZXgpOwogCiAg
ICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGpzQ2FsbEVudHJ5cG9pbnRT
bG93KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1
bmN0aW9uQmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
anMvV2ViQXNzZW1ibHlGdW5jdGlvbkJhc2UuY3BwCShyZXZpc2lvbiAyNzIyOTcpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uQmFzZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQxLDcgKzQxLDggQEAgV2ViQXNzZW1ibHlGdW5jdGlvbkJhc2U6Oldl
YkFzc2VtYmx5RnVuYwogICAgIDogQmFzZSh2bSwgZXhlY3V0YWJsZSwgZ2xvYmFsT2JqZWN0LCBz
dHJ1Y3R1cmUpCiB7IH0KIAotdm9pZCBXZWJBc3NlbWJseUZ1bmN0aW9uQmFzZTo6dmlzaXRDaGls
ZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5h
bWUgVmlzaXRvcj4KK3ZvaWQgV2ViQXNzZW1ibHlGdW5jdGlvbkJhc2U6OnZpc2l0Q2hpbGRyZW5J
bXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBXZWJBc3NlbWJseUZ1
bmN0aW9uQmFzZSogdGhpc09iamVjdCA9IGpzQ2FzdDxXZWJBc3NlbWJseUZ1bmN0aW9uQmFzZSo+
KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygp
KTsKQEAgLTQ5LDYgKzUwLDggQEAgdm9pZCBXZWJBc3NlbWJseUZ1bmN0aW9uQmFzZTo6dmlzaXRD
aGlsZAogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1faW5zdGFuY2UpOwogfQogCitE
RUZJTkVfVklTSVRfQ0hJTERSRU4oV2ViQXNzZW1ibHlGdW5jdGlvbkJhc2UpOworCiB2b2lkIFdl
YkFzc2VtYmx5RnVuY3Rpb25CYXNlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIE5hdGl2ZUV4ZWN1
dGFibGUqIGV4ZWN1dGFibGUsIHVuc2lnbmVkIGxlbmd0aCwgY29uc3QgU3RyaW5nJiBuYW1lLCBK
U1dlYkFzc2VtYmx5SW5zdGFuY2UqIGluc3RhbmNlKQogewogICAgIEJhc2U6OmZpbmlzaENyZWF0
aW9uKHZtLCBleGVjdXRhYmxlLCBsZW5ndGgsIG5hbWUpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbkJhc2UuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uQmFzZS5oCShy
ZXZpc2lvbiAyNzIyOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3Nl
bWJseUZ1bmN0aW9uQmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00Niw3ICs0Niw3IEBAIHB1Ymxp
YzoKICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mSW5zdGFuY2UoKSB7IHJldHVybiBPQkpF
Q1RfT0ZGU0VUT0YoV2ViQXNzZW1ibHlGdW5jdGlvbkJhc2UsIG1faW5zdGFuY2UpOyB9CiAKIHBy
b3RlY3RlZDoKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNp
dG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKICAgICB2b2lkIGZpbmlzaENyZWF0
aW9uKFZNJiwgTmF0aXZlRXhlY3V0YWJsZSosIHVuc2lnbmVkIGxlbmd0aCwgY29uc3QgU3RyaW5n
JiBuYW1lLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqKTsKICAgICBXZWJBc3NlbWJseUZ1bmN0aW9u
QmFzZShWTSYsIE5hdGl2ZUV4ZWN1dGFibGUqLCBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSop
OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVs
ZVJlY29yZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
V2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuY3BwCShyZXZpc2lvbiAyNzIyOTcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZVJlY29yZC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTc4LDcgKzc4LDggQEAgdm9pZCBXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6
ZmluaXNoQ3JlYQogICAgIH0KIH0KIAotdm9pZCBXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6dmlz
aXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8
dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OnZpc2l0Q2hp
bGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBXZWJBc3Nl
bWJseU1vZHVsZVJlY29yZCogdGhpc09iamVjdCA9IGpzQ2FzdDxXZWJBc3NlbWJseU1vZHVsZVJl
Y29yZCo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwg
aW5mbygpKTsKQEAgLTg4LDYgKzg5LDggQEAgdm9pZCBXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6
dmlzaXRDaGlsZAogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fZXhwb3J0c09iamVj
dCk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihXZWJBc3NlbWJseU1vZHVsZVJlY29yZCk7
CisKIHZvaWQgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OnByZXBhcmVMaW5rKFZNJiB2bSwgSlNX
ZWJBc3NlbWJseUluc3RhbmNlKiBpbnN0YW5jZSkKIHsKICAgICBSRUxFQVNFX0FTU0VSVCghbV9p
bnN0YW5jZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJs
eU1vZHVsZVJlY29yZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmgJKHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmgJKHdvcmtp
bmcgY29weSkKQEAgLTY5LDcgKzY5LDcgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgZmluaXNoQ3Jl
YXRpb24oSlNHbG9iYWxPYmplY3QqLCBWTSYsIGNvbnN0IFdhc206Ok1vZHVsZUluZm9ybWF0aW9u
Jik7CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9y
Jik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIFdyaXRlQmFycmllcjxKU1dl
YkFzc2VtYmx5SW5zdGFuY2U+IG1faW5zdGFuY2U7CiAgICAgV3JpdGVCYXJyaWVyPEpTT2JqZWN0
PiBtX3N0YXJ0RnVuY3Rpb247CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9X
ZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uY3BwCShyZXZpc2lv
biAyNzIyOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVdy
YXBwZXJGdW5jdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY3LDcgKzY3LDggQEAgU3RydWN0
dXJlKiBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbjo6YwogICAgIHJldHVybiBTdHJ1Y3R1cmU6
OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKEpTRnVuY3Rpb25U
eXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CiB9CiAKLXZvaWQgV2ViQXNzZW1ibHlXcmFw
cGVyRnVuY3Rpb246OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlz
aXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFdlYkFzc2VtYmx5V3JhcHBl
ckZ1bmN0aW9uOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0
b3IpCiB7CiAgICAgV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24qIHRoaXNPYmplY3QgPSBqc0Nh
c3Q8V2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24qPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JK
RUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC03Niw2ICs3Nyw4IEBAIHZvaWQg
V2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb246OnZpc2l0Q2gKICAgICB2aXNpdG9yLmFwcGVuZCh0
aGlzT2JqZWN0LT5tX2Z1bmN0aW9uKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKFdlYkFz
c2VtYmx5V3JhcHBlckZ1bmN0aW9uKTsKKwogSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGNhbGxX
ZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbiwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IENhbGxGcmFtZSogY2FsbEZyYW1lKSkKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZt
KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVdyYXBw
ZXJGdW5jdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L1dlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmgJKHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmgJKHdv
cmtpbmcgY29weSkKQEAgLTU5LDcgKzU5LDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBXZWJB
c3NlbWJseVdyYXBwZXJGdW5jdGlvbihWTSYsIE5hdGl2ZUV4ZWN1dGFibGUqLCBKU0dsb2JhbE9i
amVjdCosIFN0cnVjdHVyZSosIFdhc21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rpb24pOwogICAgIHZv
aWQgZmluaXNoQ3JlYXRpb24oVk0mLCBOYXRpdmVFeGVjdXRhYmxlKiwgdW5zaWduZWQgbGVuZ3Ro
LCBjb25zdCBTdHJpbmcmIG5hbWUsIEpTT2JqZWN0KiwgSlNXZWJBc3NlbWJseUluc3RhbmNlKik7
Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwor
ICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBXcml0ZUJhcnJpZXI8SlNPYmplY3Q+
IG1fZnVuY3Rpb247CiAgICAgLy8gSXQncyBzYWZlIHRvIGp1c3QgaG9sZCB0aGUgcmF3IFdhc21U
b1dhc21JbXBvcnRhYmxlRnVuY3Rpb24gYmVjYXVzZSB3ZSBoYXZlIGEgcmVmZXJlbmNlCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3Rv
cmUuY3BwCShyZXZpc2lvbiAyNzIyOTcpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJPYmplY3RTdG9yZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcyOCw3ICs3MjgsOSBA
QCB2b2lkIElEQk9iamVjdFN0b3JlOjpyb2xsYmFja0ZvclZlcnNpb25DCiAgICAgfQogfQogCi12
b2lkIElEQk9iamVjdFN0b3JlOjp2aXNpdFJlZmVyZW5jZWRJbmRleGVzKFNsb3RWaXNpdG9yJiB2
aXNpdG9yKSBjb25zdAorLy92b2lkIElEQk9iamVjdFN0b3JlOjp2aXNpdFJlZmVyZW5jZWRJbmRl
eGVzKFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBjb25zdAordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRv
cj4KK3ZvaWQgSURCT2JqZWN0U3RvcmU6OnZpc2l0UmVmZXJlbmNlZEluZGV4ZXMoVmlzaXRvciYg
dmlzaXRvcikgY29uc3QKIHsKICAgICBMb2NrZXI8TG9jaz4gbG9ja2VyKG1fcmVmZXJlbmNlZElu
ZGV4TG9jayk7CiAgICAgZm9yIChhdXRvJiBpbmRleCA6IG1fcmVmZXJlbmNlZEluZGV4ZXMudmFs
dWVzKCkpCkBAIC03MzcsNiArNzM5LDkgQEAgdm9pZCBJREJPYmplY3RTdG9yZTo6dmlzaXRSZWZl
cmVuY2VkSW5kZQogICAgICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QoaW5kZXguZ2V0KCkpOwog
fQogCit0ZW1wbGF0ZSB2b2lkIElEQk9iamVjdFN0b3JlOjp2aXNpdFJlZmVyZW5jZWRJbmRleGVz
KEFic3RyYWN0U2xvdFZpc2l0b3ImKSBjb25zdDsKK3RlbXBsYXRlIHZvaWQgSURCT2JqZWN0U3Rv
cmU6OnZpc2l0UmVmZXJlbmNlZEluZGV4ZXMoU2xvdFZpc2l0b3ImKSBjb25zdDsKKwogdm9pZCBJ
REJPYmplY3RTdG9yZTo6cmVuYW1lUmVmZXJlbmNlZEluZGV4KElEQkluZGV4JiBpbmRleCwgY29u
c3QgU3RyaW5nJiBuZXdOYW1lKQogewogICAgIExPRyhJbmRleGVkREIsICJJREJPYmplY3RTdG9y
ZTo6cmVuYW1lUmVmZXJlbmNlZEluZGV4Iik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmgJKHJldmlzaW9uIDI3MjI5NykKKysr
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEwOSw3ICsxMDksOCBAQCBwdWJsaWM6CiAgICAgdm9pZCByZWYoKTsKICAg
ICB2b2lkIGRlcmVmKCk7CiAKLSAgICB2b2lkIHZpc2l0UmVmZXJlbmNlZEluZGV4ZXMoSlNDOjpT
bG90VmlzaXRvciYpIGNvbnN0OworLy8gICAgdm9pZCB2aXNpdFJlZmVyZW5jZWRJbmRleGVzKEpT
Qzo6U2xvdFZpc2l0b3ImKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2
b2lkIHZpc2l0UmVmZXJlbmNlZEluZGV4ZXMoVmlzaXRvciYpIGNvbnN0OwogICAgIHZvaWQgcmVu
YW1lUmVmZXJlbmNlZEluZGV4KElEQkluZGV4JiwgY29uc3QgU3RyaW5nJiBuZXdOYW1lKTsKIAog
cHJpdmF0ZToKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5z
YWN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJUcmFuc2FjdGlvbi5jcHAJKHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTQ1NSw3ICsxNDU1LDggQEAgdm9pZCBJREJUcmFuc2FjdGlvbjo6Y29ubmVjdGlvbkNsb3NlZEZy
bwogICAgIGZpcmVPbkFib3J0KCk7CiB9CiAKLXZvaWQgSURCVHJhbnNhY3Rpb246OnZpc2l0UmVm
ZXJlbmNlZE9iamVjdFN0b3JlcyhKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKSBjb25zdAordGVt
cGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSURCVHJhbnNhY3Rpb246OnZpc2l0UmVmZXJl
bmNlZE9iamVjdFN0b3JlcyhWaXNpdG9yJiB2aXNpdG9yKSBjb25zdAogewogICAgIExvY2tlcjxM
b2NrPiBsb2NrZXIobV9yZWZlcmVuY2VkT2JqZWN0U3RvcmVMb2NrKTsKICAgICBmb3IgKGF1dG8m
IG9iamVjdFN0b3JlIDogbV9yZWZlcmVuY2VkT2JqZWN0U3RvcmVzLnZhbHVlcygpKQpAQCAtMTQ2
NCw2ICsxNDY1LDkgQEAgdm9pZCBJREJUcmFuc2FjdGlvbjo6dmlzaXRSZWZlcmVuY2VkT2JqZQog
ICAgICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qob2JqZWN0U3RvcmUuZ2V0KCkpOwogfQogCit0
ZW1wbGF0ZSB2b2lkIElEQlRyYW5zYWN0aW9uOjp2aXNpdFJlZmVyZW5jZWRPYmplY3RTdG9yZXMo
SlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBjb25zdDsKK3RlbXBsYXRlIHZvaWQg
SURCVHJhbnNhY3Rpb246OnZpc2l0UmVmZXJlbmNlZE9iamVjdFN0b3JlcyhKU0M6OlNsb3RWaXNp
dG9yJiB2aXNpdG9yKSBjb25zdDsKKwogdm9pZCBJREJUcmFuc2FjdGlvbjo6aGFuZGxlUGVuZGlu
Z09wZXJhdGlvbnMoKQogewogICAgIEFTU0VSVChjYW5DdXJyZW50VGhyZWFkQWNjZXNzVGhyZWFk
TG9jYWxEYXRhKG1fZGF0YWJhc2UtPm9yaWdpblRocmVhZCgpKSk7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmgJKHJldmlzaW9u
IDI3MjI5NykKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0
aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0OSw3ICsxNDksOCBAQCBwdWJsaWM6CiAKICAgICB2
b2lkIGNvbm5lY3Rpb25DbG9zZWRGcm9tU2VydmVyKGNvbnN0IElEQkVycm9yJik7CiAKLSAgICB2
b2lkIHZpc2l0UmVmZXJlbmNlZE9iamVjdFN0b3JlcyhKU0M6OlNsb3RWaXNpdG9yJikgY29uc3Q7
CisvLyAgICB2b2lkIHZpc2l0UmVmZXJlbmNlZE9iamVjdFN0b3JlcyhKU0M6OlNsb3RWaXNpdG9y
JikgY29uc3Q7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCB2aXNpdFJlZmVy
ZW5jZWRPYmplY3RTdG9yZXMoVmlzaXRvciYpIGNvbnN0OwogCiAgICAgV0VCQ09SRV9FWFBPUlQg
c3RhdGljIHN0ZDo6YXRvbWljPHVuc2lnbmVkPiBudW1iZXJPZklEQlRyYW5zYWN0aW9uczsKIApJ
bmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0J1ZmZlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0J1ZmZlci5j
cHAJKHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8v
QXVkaW9CdWZmZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTQsMTIgKzE1NCwxNyBAQCBFeGNl
cHRpb25PcjxKU0M6OkpTVmFsdWU+IEF1ZGlvQnVmZmVyOjpnCiAgICAgcmV0dXJuIGNvbnN0cnVj
dEpTQXJyYXkoKTsKIH0KIAotdm9pZCBBdWRpb0J1ZmZlcjo6dmlzaXRDaGFubmVsV3JhcHBlcnMo
SlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vdm9pZCBBdWRpb0J1ZmZlcjo6dmlzaXRDaGFu
bmVsV3JhcHBlcnMoSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1l
IFZpc2l0b3I+Cit2b2lkIEF1ZGlvQnVmZmVyOjp2aXNpdENoYW5uZWxXcmFwcGVycyhWaXNpdG9y
JiB2aXNpdG9yKQogewogICAgIGZvciAoYXV0byYgY2hhbm5lbFdyYXBwZXIgOiBtX2NoYW5uZWxX
cmFwcGVycykKICAgICAgICAgY2hhbm5lbFdyYXBwZXIudmlzaXQodmlzaXRvcik7CiB9CiAKK3Rl
bXBsYXRlIHZvaWQgQXVkaW9CdWZmZXI6OnZpc2l0Q2hhbm5lbFdyYXBwZXJzKEpTQzo6QWJzdHJh
Y3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBBdWRpb0J1ZmZlcjo6dmlzaXRDaGFubmVs
V3JhcHBlcnMoSlNDOjpTbG90VmlzaXRvciYpOworCiBSZWZQdHI8RmxvYXQzMkFycmF5PiBBdWRp
b0J1ZmZlcjo6Y2hhbm5lbERhdGEodW5zaWduZWQgY2hhbm5lbEluZGV4KQogewogICAgIGlmIChj
aGFubmVsSW5kZXggPj0gbV9jaGFubmVscy5zaXplKCkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQnVmZmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0J1ZmZlci5oCShyZXZpc2lvbiAyNzIyOTcpCisrKyBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQnVmZmVyLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTc1LDcgKzc1LDggQEAgcHVibGljOgogCiAgICAgc2l6ZV90IG1lbW9yeUNvc3QoKSBj
b25zdDsKIAotICAgIHZvaWQgdmlzaXRDaGFubmVsV3JhcHBlcnMoSlNDOjpTbG90VmlzaXRvciYp
OworLy8gICAgdm9pZCB2aXNpdENoYW5uZWxXcmFwcGVycyhKU0M6OlNsb3RWaXNpdG9yJik7Cisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCB2aXNpdENoYW5uZWxXcmFwcGVycyhW
aXNpdG9yJik7CiAgICAgCiBwcml2YXRlOgogICAgIEF1ZGlvQnVmZmVyKHVuc2lnbmVkIG51bWJl
ck9mQ2hhbm5lbHMsIHNpemVfdCBsZW5ndGgsIGZsb2F0IHNhbXBsZVJhdGUsIExlZ2FjeVByZXZl
bnREZXRhY2hpbmcgPSBMZWdhY3lQcmV2ZW50RGV0YWNoaW5nOjpObyk7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9ET01HQ091dHB1dENvbnN0cmFpbnQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0RPTUdDT3V0cHV0Q29uc3RyYWludC5jcHAJ
KHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0RPTUdDT3V0
cHV0Q29uc3RyYWludC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDcgKzQ5LDcgQEAgRE9NR0NP
dXRwdXRDb25zdHJhaW50Ojp+RE9NR0NPdXRwdXRDb25zdAogewogfQogCi12b2lkIERPTUdDT3V0
cHV0Q29uc3RyYWludDo6ZXhlY3V0ZUltcGwoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIERP
TUdDT3V0cHV0Q29uc3RyYWludDo6ZXhlY3V0ZUltcGwoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlz
aXRvcikKIHsKICAgICBIZWFwJiBoZWFwID0gbV92bS5oZWFwOwogICAgIApAQCAtNjAsOCArNjAs
OCBAQCB2b2lkIERPTUdDT3V0cHV0Q29uc3RyYWludDo6ZXhlY3V0ZUltcGwoCiAgICAgCiAgICAg
bV9jbGllbnREYXRhLmZvckVhY2hPdXRwdXRDb25zdHJhaW50U3BhY2UoCiAgICAgICAgIFsmXSAo
U3Vic3BhY2UmIHN1YnNwYWNlKSB7Ci0gICAgICAgICAgICBhdXRvIGZ1bmMgPSBbXSAoU2xvdFZp
c2l0b3ImIHZpc2l0b3IsIEhlYXBDZWxsKiBoZWFwQ2VsbCwgSGVhcENlbGw6OktpbmQpIHsKLSAg
ICAgICAgICAgICAgICBTZXRSb290TWFya1JlYXNvblNjb3BlIHJvb3RTY29wZSh2aXNpdG9yLCBT
bG90VmlzaXRvcjo6Um9vdE1hcmtSZWFzb246OkRPTUdDT3V0cHV0KTsKKyAgICAgICAgICAgIGF1
dG8gZnVuYyA9IFtdIChBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBIZWFwQ2VsbCogaGVh
cENlbGwsIEhlYXBDZWxsOjpLaW5kKSB7CisgICAgICAgICAgICAgICAgU2V0Um9vdE1hcmtSZWFz
b25TY29wZSByb290U2NvcGUodmlzaXRvciwgQWJzdHJhY3RTbG90VmlzaXRvcjo6Um9vdE1hcmtS
ZWFzb246OkRPTUdDT3V0cHV0KTsKICAgICAgICAgICAgICAgICBKU0NlbGwqIGNlbGwgPSBzdGF0
aWNfY2FzdDxKU0NlbGwqPihoZWFwQ2VsbCk7CiAgICAgICAgICAgICAgICAgY2VsbC0+bWV0aG9k
VGFibGUodmlzaXRvci52bSgpKS0+dmlzaXRPdXRwdXRDb25zdHJhaW50cyhjZWxsLCB2aXNpdG9y
KTsKICAgICAgICAgICAgIH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9ET01H
Q091dHB1dENvbnN0cmFpbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9ET01HQ091dHB1dENvbnN0cmFpbnQuaAkocmV2aXNpb24gMjcyMjk3KQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvRE9NR0NPdXRwdXRDb25zdHJhaW50LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQyLDcgKzQyLDcgQEAgcHVibGljOgogICAgIH5ET01HQ091dHB1dENvbnN0cmFpbnQo
KTsKICAgICAKIHByb3RlY3RlZDoKLSAgICB2b2lkIGV4ZWN1dGVJbXBsKEpTQzo6U2xvdFZpc2l0
b3ImKSBvdmVycmlkZTsKKyAgICB2b2lkIGV4ZWN1dGVJbXBsKEpTQzo6QWJzdHJhY3RTbG90Vmlz
aXRvciYpIG92ZXJyaWRlOwogCiBwcml2YXRlOgogICAgIEpTQzo6Vk0mIG1fdm07CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Fib3J0Q29udHJvbGxlckN1c3RvbS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNBYm9ydENvbnRyb2xsZXJD
dXN0b20uY3BwCShyZXZpc2lvbiAyNzIyOTcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0Fib3J0Q29udHJvbGxlckN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDkgKzI4
LDE0IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBKU0Fib3J0Q29udHJvbGxlcjo6
dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vdm9p
ZCBKU0Fib3J0Q29udHJvbGxlcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90Vmlz
aXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTQWJvcnRD
b250cm9sbGVyOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewog
ICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdCgmd3JhcHBlZCgpLnNpZ25hbCgpKTsKIH0KIAordGVt
cGxhdGUgdm9pZCBKU0Fib3J0Q29udHJvbGxlcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlND
OjpBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTQWJvcnRDb250cm9sbGVy
Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJik7CisKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQWJvcnRT
aWduYWxDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTQWJvcnRTaWduYWxDdXN0b20uY3BwCShyZXZpc2lvbiAyNzIyOTcpCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0Fib3J0U2lnbmFsQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjgsNyArMjgsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWJvb2wgSlNBYm9ydFNp
Z25hbE93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVu
a25vd24+IGhhbmRsZSwgdm9pZCosIEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNo
YXIqKiByZWFzb24pCitib29sIEpTQWJvcnRTaWduYWxPd25lcjo6aXNSZWFjaGFibGVGcm9tT3Bh
cXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBKU0M6OkFi
c3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCiB7CiAgICAg
YXV0byYgYWJvcnRTaWduYWwgPSBKU0M6OmpzQ2FzdDxKU0Fib3J0U2lnbmFsKj4oaGFuZGxlLnNs
b3QoKS0+YXNDZWxsKCkpLT53cmFwcGVkKCk7CiAgICAgaWYgKGFib3J0U2lnbmFsLmlzRmlyaW5n
RXZlbnRMaXN0ZW5lcnMoKSkgewpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNB
dHRyQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0F0dHJDdXN0b20uY3BwCShyZXZpc2lvbiAyNzIyOTcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0F0dHJDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMywxMCArMzMsMTUg
QEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIEpTQXR0cjo6dmlzaXRBZGRpdGlvbmFs
Q2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vdm9pZCBKU0F0dHI6OnZpc2l0
QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0
eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0F0dHI6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZp
c2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgaWYgKEVsZW1lbnQqIGVsZW1lbnQgPSB3cmFwcGVkKCku
b3duZXJFbGVtZW50KCkpCiAgICAgICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChyb290KGVsZW1l
bnQpKTsKIH0KIAordGVtcGxhdGUgdm9pZCBKU0F0dHI6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVu
KEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU0F0dHI6OnZpc2l0
QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImKTsKKwogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNBdWRpb0J1ZmZlckN1
c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNBdWRp
b0J1ZmZlckN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTQXVkaW9CdWZmZXJDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwx
MSArMzEsMTYgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAK
LXZvaWQgSlNBdWRpb0J1ZmZlcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3Im
IHZpc2l0b3IpCisvL3ZvaWQgSlNBdWRpb0J1ZmZlcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4o
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBK
U0F1ZGlvQnVmZmVyOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQog
ewogICAgIHdyYXBwZWQoKS52aXNpdENoYW5uZWxXcmFwcGVycyh2aXNpdG9yKTsKIH0KIAordGVt
cGxhdGUgdm9pZCBKU0F1ZGlvQnVmZmVyOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihBYnN0cmFj
dFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTQXVkaW9CdWZmZXI6OnZpc2l0QWRkaXRp
b25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAog
I2VuZGlmIC8vIEVOQUJMRShXRUJfQVVESU8pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0F1ZGlvVHJhY2tDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTQXVkaW9UcmFja0N1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjI5NykKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXVkaW9UcmFja0N1c3RvbS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM1LDExICszNSwxNiBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogdXNpbmcg
bmFtZXNwYWNlIEpTQzsKIAotdm9pZCBKU0F1ZGlvVHJhY2s6OnZpc2l0QWRkaXRpb25hbENoaWxk
cmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy92b2lkIEpTQXVkaW9UcmFjazo6dmlzaXRBZGRp
dGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPgordm9pZCBKU0F1ZGlvVHJhY2s6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0
b3ImIHZpc2l0b3IpCiB7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHJvb3QoJndyYXBwZWQo
KSkpOwogfQogCit0ZW1wbGF0ZSB2b2lkIEpTQXVkaW9UcmFjazo6dmlzaXRBZGRpdGlvbmFsQ2hp
bGRyZW4oQWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU0F1ZGlvVHJhY2s6
OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CisKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKIAogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0F1
ZGlvVHJhY2tMaXN0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0F1ZGlvVHJhY2tMaXN0Q3VzdG9tLmNwcAkocmV2aXNpb24gMjcyMjk3KQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNBdWRpb1RyYWNrTGlzdEN1c3RvbS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM2LDExICszNiwxNiBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogdXNp
bmcgbmFtZXNwYWNlIEpTQzsKIAotdm9pZCBKU0F1ZGlvVHJhY2tMaXN0Ojp2aXNpdEFkZGl0aW9u
YWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vdm9pZCBKU0F1ZGlvVHJhY2tMaXN0
Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRl
PHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTQXVkaW9UcmFja0xpc3Q6OnZpc2l0QWRkaXRpb25h
bENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290
KHJvb3Qod3JhcHBlZCgpLmVsZW1lbnQoKSkpOwogfQogCit0ZW1wbGF0ZSB2b2lkIEpTQXVkaW9U
cmFja0xpc3Q6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsK
K3RlbXBsYXRlIHZvaWQgSlNBdWRpb1RyYWNrTGlzdDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4o
U2xvdFZpc2l0b3ImKTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXVkaW9Xb3JrbGV0UHJvY2Vzc29yQ3VzdG9t
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0F1ZGlvV29y
a2xldFByb2Nlc3NvckN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTQXVkaW9Xb3JrbGV0UHJvY2Vzc29yQ3VzdG9tLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzEsNyArMzEsOSBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogdXNpbmcgbmFt
ZXNwYWNlIEpTQzsKIAotdm9pZCBKU0F1ZGlvV29ya2xldFByb2Nlc3Nvcjo6dmlzaXRBZGRpdGlv
bmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3ZvaWQgSlNBdWRpb1dvcmtsZXRQ
cm9jZXNzb3I6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQor
dGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNBdWRpb1dvcmtsZXRQcm9jZXNzb3I6
OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0byYg
cHJvY2Vzc29yID0gd3JhcHBlZCgpOwogICAgIHByb2Nlc3Nvci5qc0lucHV0c1dyYXBwZXIoKS52
aXNpdCh2aXNpdG9yKTsKQEAgLTM5LDYgKzQxLDkgQEAgdm9pZCBKU0F1ZGlvV29ya2xldFByb2Nl
c3Nvcjo6dmlzaXRBZGRpdAogICAgIHByb2Nlc3Nvci5qc1BhcmFtVmFsdWVzV3JhcHBlcigpLnZp
c2l0KHZpc2l0b3IpOwogfQogCit0ZW1wbGF0ZSB2b2lkIEpTQXVkaW9Xb3JrbGV0UHJvY2Vzc29y
Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0
ZSB2b2lkIEpTQXVkaW9Xb3JrbGV0UHJvY2Vzc29yOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihT
bG90VmlzaXRvciYpOworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFC
TEUoV0VCX0FVRElPKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDU1NSdWxl
Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NT
U1J1bGVDdXN0b20uY3BwCShyZXZpc2lvbiAyNzIyOTcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0NTU1J1bGVDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MSwxMSArNTEs
MTYgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKLXZvaWQg
SlNDU1NSdWxlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikK
Ky8vdm9pZCBKU0NTU1J1bGU6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNDU1NSdWxlOjp2aXNp
dEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHZpc2l0b3IuYWRk
T3BhcXVlUm9vdChyb290KCZ3cmFwcGVkKCkpKTsKIH0KIAordGVtcGxhdGUgdm9pZCBKU0NTU1J1
bGU6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBs
YXRlIHZvaWQgSlNDU1NSdWxlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYp
OworCiBKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNHbG9iYWxPYmplY3QqLCBKU0RPTUdsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWY8Q1NTUnVsZT4mJiBydWxlKQogewogICAgIHN3aXRj
aCAocnVsZS0+dHlwZSgpKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NT
U1J1bGVMaXN0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0NTU1J1bGVMaXN0Q3VzdG9tLmNwcAkocmV2aXNpb24gMjcyMjk3KQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNDU1NSdWxlTGlzdEN1c3RvbS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM2LDcgKzM2LDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFj
ZSBKU0M7CiAKLWJvb2wgSlNDU1NSdWxlTGlzdE93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVS
b290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIFNsb3RWaXNpdG9y
JiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQorYm9vbCBKU0NTU1J1bGVMaXN0T3duZXI6
OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFu
ZGxlLCB2b2lkKiwgQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJl
YXNvbikKIHsKICAgICBKU0NTU1J1bGVMaXN0KiBqc0NTU1J1bGVMaXN0ID0ganNDYXN0PEpTQ1NT
UnVsZUxpc3QqPihoYW5kbGUuc2xvdCgpLT5hc0NlbGwoKSk7CiAgICAgaWYgKCFqc0NTU1J1bGVM
aXN0LT5oYXNDdXN0b21Qcm9wZXJ0aWVzKGpzQ1NTUnVsZUxpc3QtPnZtKCkpKQpJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDU1NTdHlsZURlY2xhcmF0aW9uQ3VzdG9tLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NTU1N0eWxlRGVjbGFy
YXRpb25DdXN0b20uY3BwCShyZXZpc2lvbiAyNzIyOTcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0NTU1N0eWxlRGVjbGFyYXRpb25DdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC01MSw5ICs1MSwxNCBAQCB2b2lkKiByb290KENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlKQog
ICAgIHJldHVybiBzdHlsZTsKIH0KIAotdm9pZCBKU0NTU1N0eWxlRGVjbGFyYXRpb246OnZpc2l0
QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy92b2lkIEpTQ1NTU3R5
bGVEZWNsYXJhdGlvbjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0
b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0NTU1N0eWxlRGVjbGFyYXRp
b246OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgdmlz
aXRvci5hZGRPcGFxdWVSb290KHJvb3QoJndyYXBwZWQoKSkpOwogfQogCit0ZW1wbGF0ZSB2b2lk
IEpTQ1NTU3R5bGVEZWNsYXJhdGlvbjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oQWJzdHJhY3RT
bG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU0NTU1N0eWxlRGVjbGFyYXRpb246OnZpc2l0
QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2FsbGJhY2tEYXRhLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NhbGxiYWNrRGF0YS5j
cHAJKHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2Fs
bGJhY2tEYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTUsMTIgKzk1LDE2IEBAIEpTVmFsdWUg
SlNDYWxsYmFja0RhdGE6Omludm9rZUNhbGxiYWNrKEoKICAgICByZXR1cm4gcmVzdWx0OwogfQog
Ci12b2lkIEpTQ2FsbGJhY2tEYXRhV2Vhazo6dmlzaXRKU0Z1bmN0aW9uKEpTQzo6U2xvdFZpc2l0
b3ImIHZpc3RvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTQ2FsbGJhY2tE
YXRhV2Vhazo6dmlzaXRKU0Z1bmN0aW9uKFZpc2l0b3ImIHZpc2l0b3IpCiB7Ci0gICAgdmlzdG9y
LmFwcGVuZChtX2NhbGxiYWNrKTsKKyAgICB2aXNpdG9yLmFwcGVuZChtX2NhbGxiYWNrKTsKIH0K
IAotYm9vbCBKU0NhbGxiYWNrRGF0YVdlYWs6OldlYWtPd25lcjo6aXNSZWFjaGFibGVGcm9tT3Bh
cXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCwgU2xvdFZp
c2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCit0ZW1wbGF0ZSB2b2lkIEpTQ2Fs
bGJhY2tEYXRhV2Vhazo6dmlzaXRKU0Z1bmN0aW9uKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYp
OwordGVtcGxhdGUgdm9pZCBKU0NhbGxiYWNrRGF0YVdlYWs6OnZpc2l0SlNGdW5jdGlvbihKU0M6
OlNsb3RWaXNpdG9yJik7CisKK2Jvb2wgSlNDYWxsYmFja0RhdGFXZWFrOjpXZWFrT3duZXI6Omlz
UmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQq
IGNvbnRleHQsIEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFz
b24pCiB7CiAgICAgaWYgKFVOTElLRUxZKHJlYXNvbikpCiAgICAgICAgICpyZWFzb24gPSAiQ29u
dGV4dCBpcyBvcGFxdWUgcm9vdCI7IC8vIEZJWE1FOiB3aGF0IGlzIHRoZSBjb250ZXh0LgpJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDYWxsYmFja0RhdGEuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NhbGxiYWNrRGF0YS5oCShyZXZpc2lv
biAyNzIyOTcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NhbGxiYWNrRGF0YS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xMTMsMTEgKzExMywxMiBAQCBwdWJsaWM6CiAgICAgICAgIHJl
dHVybiBKU0NhbGxiYWNrRGF0YTo6aW52b2tlQ2FsbGJhY2soKmdsb2JhbE9iamVjdCwgY2FsbGJh
Y2soKSwgdGhpc1ZhbHVlLCBhcmdzLCBjYWxsYmFja1R5cGUsIGZ1bmN0aW9uTmFtZSwgcmV0dXJu
ZWRFeGNlcHRpb24pOwogICAgIH0KIAotICAgIHZvaWQgdmlzaXRKU0Z1bmN0aW9uKEpTQzo6U2xv
dFZpc2l0b3ImKTsKKy8vICAgIHZvaWQgdmlzaXRKU0Z1bmN0aW9uKEpTQzo6U2xvdFZpc2l0b3Im
KTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIHZpc2l0SlNGdW5jdGlvbihW
aXNpdG9yJik7CiAKIHByaXZhdGU6CiAgICAgY2xhc3MgV2Vha093bmVyIDogcHVibGljIEpTQzo6
V2Vha0hhbmRsZU93bmVyIHsKLSAgICAgICAgYm9vbCBpc1JlYWNoYWJsZUZyb21PcGFxdWVSb290
cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0LCBKU0M6OlNsb3RWaXNp
dG9yJiwgY29uc3QgY2hhcioqKSBvdmVycmlkZTsKKyAgICAgICAgYm9vbCBpc1JlYWNoYWJsZUZy
b21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0LCBK
U0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImLCBjb25zdCBjaGFyKiopIG92ZXJyaWRlOwogICAgIH07
CiAgICAgV2Vha093bmVyIG1fd2Vha093bmVyOwogICAgIEpTQzo6V2VhazxKU0M6OkpTT2JqZWN0
PiBtX2NhbGxiYWNrOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQ3VzdG9tLmNwcAkocmV2aXNp
b24gMjcyMjk3KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDYW52YXNSZW5kZXJp
bmdDb250ZXh0MkRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNCw3ICsyNCw3IEBACiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotYm9vbCBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRE93
bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+
IGhhbmRsZSwgdm9pZCosIEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiBy
ZWFzb24pCitib29sIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJET3duZXI6OmlzUmVhY2hhYmxl
RnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwg
SlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQog
ewogICAgIGlmIChVTkxJS0VMWShyZWFzb24pKQogICAgICAgICAqcmVhc29uID0gIkNhbnZhcyBp
cyBvcGFxdWUgcm9vdCI7CkBAIC0zNCw5ICszNCwxNCBAQCBib29sIEpTQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDJET3duZXI6OmlzCiAgICAgcmV0dXJuIHZpc2l0b3IuY29udGFpbnNPcGFxdWVSb290
KHJvb3QpOwogfQogCi12b2lkIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjp2aXNpdEFkZGl0
aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy92b2lkIEpTQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNp
dG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNDYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0
b3IpCiB7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHJvb3Qod3JhcHBlZCgpLmNhbnZhcygp
KSk7CiB9CiAKK3RlbXBsYXRlIHZvaWQgSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnZpc2l0
QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUg
dm9pZCBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4o
SlNDOjpTbG90VmlzaXRvciYpOworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0N1c3RvbUV2ZW50Q3VzdG9tLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0N1c3RvbUV2ZW50Q3VzdG9tLmNwcAko
cmV2aXNpb24gMjcyMjk3KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDdXN0b21F
dmVudEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyLDEwICs0MiwxNSBAQCBKU0M6OkpT
VmFsdWUgSlNDdXN0b21FdmVudDo6ZGV0YWlsKEpTQzo6CiAgICAgfSk7CiB9CiAKLXZvaWQgSlND
dXN0b21FdmVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlz
aXRvcikKKy8vdm9pZCBKU0N1c3RvbUV2ZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6
OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQg
SlNDdXN0b21FdmVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikK
IHsKICAgICB3cmFwcGVkKCkuZGV0YWlsKCkudmlzaXQodmlzaXRvcik7CiAgICAgd3JhcHBlZCgp
LmNhY2hlZERldGFpbCgpLnZpc2l0KHZpc2l0b3IpOwogfQogCit0ZW1wbGF0ZSB2b2lkIEpTQ3Vz
dG9tRXZlbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRv
ciYpOwordGVtcGxhdGUgdm9pZCBKU0N1c3RvbUV2ZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJl
bihKU0M6OlNsb3RWaXNpdG9yJik7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQnVpbHRpbkNvbnN0cnVjdG9yQmFzZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CdWlsdGluQ29u
c3RydWN0b3JCYXNlLmNwcAkocmV2aXNpb24gMjcyMjk3KQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNET01CdWlsdGluQ29uc3RydWN0b3JCYXNlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDUsNyArNDUsOCBAQCB2b2lkIEpTRE9NQnVpbHRpbkNvbnN0cnVjdG9yQmFzZTo6Y2FsbEZ1
CiAgICAgSlNDOjpjYWxsKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAmZnVuY3Rpb24sIGNhbGxEYXRh
LCAmdGhpc09iamVjdCwgYXJndW1lbnRzKTsKIH0KIAotdm9pZCBKU0RPTUJ1aWx0aW5Db25zdHJ1
Y3RvckJhc2U6OnZpc2l0Q2hpbGRyZW4oSlNDOjpKU0NlbGwqIGNlbGwsIEpTQzo6U2xvdFZpc2l0
b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0RPTUJ1aWx0
aW5Db25zdHJ1Y3RvckJhc2U6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQzo6SlNDZWxsKiBjZWxsLCBW
aXNpdG9yJiB2aXNpdG9yKQogewogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNET01C
dWlsdGluQ29uc3RydWN0b3JCYXNlKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhF
UklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNTMsNiArNTQsOCBAQCB2b2lkIEpTRE9NQnVp
bHRpbkNvbnN0cnVjdG9yQmFzZTo6dmlzaXRDCiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVj
dC0+bV9pbml0aWFsaXplRnVuY3Rpb24pOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNE
T01CdWlsdGluQ29uc3RydWN0b3JCYXNlKTsKKwogSlNDOjpJc29TdWJzcGFjZSogSlNET01CdWls
dGluQ29uc3RydWN0b3JCYXNlOjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCiB7CiAgICAg
cmV0dXJuICZzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpLT5kb21C
dWlsdGluQ29uc3RydWN0b3JTcGFjZSgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNET01CdWlsdGluQ29uc3RydWN0b3JCYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNET01CdWlsdGluQ29uc3RydWN0b3JCYXNlLmgJKHJldmlzaW9u
IDI3MjI5NykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQnVpbHRpbkNvbnN0
cnVjdG9yQmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00Miw3ICs0Miw3IEBAIHByb3RlY3RlZDoK
ICAgICB7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0M6OkpTQ2Vs
bCosIEpTQzo6U2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAg
ICAgSlNDOjpKU0Z1bmN0aW9uKiBpbml0aWFsaXplRnVuY3Rpb24oKTsKICAgICB2b2lkIHNldElu
aXRpYWxpemVGdW5jdGlvbihKU0M6OlZNJiwgSlNDOjpKU0Z1bmN0aW9uJik7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01HbG9iYWxPYmplY3QuY3BwCShyZXZp
c2lvbiAyNzIyOTcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9i
amVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzOCw3ICsyMzgsOCBAQCBTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiBKU0RPTUdsb2JhbE9iamVjCiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLXZv
aWQgSlNET01HbG9iYWxPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90Vmlz
aXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTRE9NR2xv
YmFsT2JqZWN0Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0
b3IpCiB7CiAgICAgSlNET01HbG9iYWxPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNET01H
bG9iYWxPYmplY3QqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNP
YmplY3QsIGluZm8oKSk7CkBAIC0yNjAsNiArMjYxLDggQEAgdm9pZCBKU0RPTUdsb2JhbE9iamVj
dDo6dmlzaXRDaGlsZHJlbihKUwogICAgIHRoaXNPYmplY3QtPm1fYnVpbHRpbkludGVybmFsRnVu
Y3Rpb25zLnZpc2l0KHZpc2l0b3IpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNET01H
bG9iYWxPYmplY3QpOworCiB2b2lkIEpTRE9NR2xvYmFsT2JqZWN0Ojpwcm9taXNlUmVqZWN0aW9u
VHJhY2tlcihKU0dsb2JhbE9iamVjdCoganNHbG9iYWxPYmplY3QsIEpTUHJvbWlzZSogcHJvbWlz
ZSwgSlNQcm9taXNlUmVqZWN0aW9uT3BlcmF0aW9uIG9wZXJhdGlvbikKIHsKICAgICAvLyBodHRw
czovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS93ZWJhcHBhcGlzLmh0bWwjdGhlLWhv
c3Rwcm9taXNlcmVqZWN0aW9udHJhY2tlci1pbXBsZW1lbnRhdGlvbgpJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNET01HbG9iYWxPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5oCShyZXZpc2lvbiAyNzIy
OTcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5oCSh3
b3JraW5nIGNvcHkpCkBAIC02OSw3ICs2OSw3IEBAIHB1YmxpYzoKICAgICAvLyBNYWtlIGJpbmRp
bmcgY29kZSBnZW5lcmF0aW9uIGVhc2llci4KICAgICBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0KCkgeyByZXR1cm4gdGhpczsgfQogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJl
bihKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NI
SUxEUkVOOwogCiAgICAgRE9NV3JhcHBlcldvcmxkJiB3b3JsZCgpIHsgcmV0dXJuIG1fd29ybGQu
Z2V0KCk7IH0KICAgICBib29sIHdvcmxkSXNOb3JtYWwoKSBjb25zdCB7IHJldHVybiBtX3dvcmxk
SXNOb3JtYWw7IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR3VhcmRl
ZE9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9N
R3VhcmRlZE9iamVjdC5oCShyZXZpc2lvbiAyNzIyOTcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0RPTUd1YXJkZWRPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtNDAsNyArNDAs
OCBAQCBwdWJsaWM6CiAKICAgICBib29sIGlzU3VzcGVuZGVkKCkgY29uc3QgeyByZXR1cm4gIW1f
Z3VhcmRlZCB8fCAhY2FuSW52b2tlQ2FsbGJhY2soKTsgfSAvLyBUaGUgd3JhcHBlciB3b3JsZCBo
YXMgZ29uZSBhd2F5IG9yIGFjdGl2ZSBET00gb2JqZWN0cyBoYXZlIGJlZW4gc3VzcGVuZGVkLgog
Ci0gICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKSB7IHZp
c2l0b3IuYXBwZW5kKG1fZ3VhcmRlZCk7IH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
PgorICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoVmlzaXRvciYgdmlzaXRvcikgeyB2aXNpdG9yLmFw
cGVuZChtX2d1YXJkZWQpOyB9CiAKICAgICBKU0M6OkpTVmFsdWUgZ3VhcmRlZE9iamVjdCgpIGNv
bnN0IHsgcmV0dXJuIG1fZ3VhcmRlZC5nZXQoKTsgfQogICAgIEpTRE9NR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QoKSBjb25zdCB7IHJldHVybiBtX2dsb2JhbE9iamVjdC5nZXQoKTsgfQpJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01RdWFkQ3VzdG9tLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVF1YWRDdXN0b20uY3BwCShy
ZXZpc2lvbiAyNzIyOTcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVF1YWRD
dXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3ICszMyw5IEBACiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCi12b2lkIEpTRE9NUXVhZDo6dmlzaXRBZGRp
dGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3ZvaWQgSlNET01RdWFkOjp2
aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5
cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTRE9NUXVhZDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4o
VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QoY29uc3RfY2Fz
dDxET01Qb2ludCo+KCZ3cmFwcGVkKCkucDEoKSkpOwogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9v
dChjb25zdF9jYXN0PERPTVBvaW50Kj4oJndyYXBwZWQoKS5wMigpKSk7CkBAIC00MSw0ICs0Myw3
IEBAIHZvaWQgSlNET01RdWFkOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbigKICAgICB2aXNpdG9y
LmFkZE9wYXF1ZVJvb3QoY29uc3RfY2FzdDxET01Qb2ludCo+KCZ3cmFwcGVkKCkucDQoKSkpOwog
fQogCi19Cit0ZW1wbGF0ZSB2b2lkIEpTRE9NUXVhZDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4o
QWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU0RPTVF1YWQ6OnZpc2l0QWRk
aXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93Q3VzdG9tLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0N1c3Rv
bS5jcHAJKHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
RE9NV2luZG93Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE2LDcgKzExNiw5IEBAIEpT
Q19ERUZJTkVfQ1VTVE9NX0dFVFRFUihqc0RPTVdpbmRvd0luc3QKICAgICByZXR1cm4gbm9uQ2Fj
aGluZ1N0YXRpY0Z1bmN0aW9uR2V0dGVySW1wbDxqc0RPTVdpbmRvd0luc3RhbmNlRnVuY3Rpb25f
cG9zdE1lc3NhZ2UsIDI+KGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lKTsKIH0KIAotdm9pZCBK
U0RPTVdpbmRvdzo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3Ip
CisvL3ZvaWQgSlNET01XaW5kb3c6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9y
JiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNET01XaW5kb3c6
OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgaWYgKEZy
YW1lKiBmcmFtZSA9IHdyYXBwZWQoKS5mcmFtZSgpKQogICAgICAgICB2aXNpdG9yLmFkZE9wYXF1
ZVJvb3QoZnJhbWUpOwpAQCAtMTI5LDYgKzEzMSw5IEBAIHZvaWQgSlNET01XaW5kb3c6OnZpc2l0
QWRkaXRpb25hbENoaWxkcmUKICAgICB3cmFwcGVkKCkudmlzaXRKU0V2ZW50TGlzdGVuZXJzKHZp
c2l0b3IpOwogfQogCit0ZW1wbGF0ZSB2b2lkIEpTRE9NV2luZG93Ojp2aXNpdEFkZGl0aW9uYWxD
aGlsZHJlbihBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTRE9NV2luZG93
Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYpOworCiAjaWYgRU5BQkxFKFVT
RVJfTUVTU0FHRV9IQU5ETEVSUykKIEpTQ19ERUZJTkVfQ1VTVE9NX0dFVFRFUihqc0RPTVdpbmRv
d193ZWJraXQsIChKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpT
VmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpKQogewpJbmRleDogU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNEZXByZWNhdGVkQ1NTT01WYWx1ZUN1c3RvbS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNEZXByZWNhdGVkQ1NTT01WYWx1ZUN1c3Rv
bS5jcHAJKHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
RGVwcmVjYXRlZENTU09NVmFsdWVDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw3ICsz
NSw3IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCi1ib29s
IEpTRGVwcmVjYXRlZENTU09NVmFsdWVPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMo
SlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBTbG90VmlzaXRvciYgdmlz
aXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikKK2Jvb2wgSlNEZXByZWNhdGVkQ1NTT01WYWx1ZU93
bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+
IGhhbmRsZSwgdm9pZCosIEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIq
KiByZWFzb24pCiB7CiAgICAgSlNEZXByZWNhdGVkQ1NTT01WYWx1ZSoganNDU1NWYWx1ZSA9IGpz
Q2FzdDxKU0RlcHJlY2F0ZWRDU1NPTVZhbHVlKj4oaGFuZGxlLnNsb3QoKS0+YXNDZWxsKCkpOwog
ICAgIGlmICghanNDU1NWYWx1ZS0+aGFzQ3VzdG9tUHJvcGVydGllcyhqc0NTU1ZhbHVlLT52bSgp
KSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRG9jdW1lbnRDdXN0b20uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRG9jdW1lbnRDdXN0
b20uY3BwCShyZXZpc2lvbiAyNzIyOTcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0RvY3VtZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTEsMTEgKzkxLDE2IEBAIEpT
VmFsdWUgdG9KUyhKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2IKICAgICByZXR1cm4gdG9KU05l
d2x5Q3JlYXRlZChsZXhpY2FsR2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QsIFJlZjxEb2N1bWVu
dD4oZG9jdW1lbnQpKTsKIH0KIAotdm9pZCBKU0RvY3VtZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGls
ZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vdm9pZCBKU0RvY3VtZW50Ojp2aXNpdEFkZGl0
aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZp
c2l0b3I+Cit2b2lkIEpTRG9jdW1lbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3Im
IHZpc2l0b3IpCiB7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHN0YXRpY19jYXN0PFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqPigmd3JhcHBlZCgpKSk7CiB9CiAKK3RlbXBsYXRlIHZvaWQgSlNE
b2N1bWVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oQWJzdHJhY3RTbG90VmlzaXRvciYpOwor
dGVtcGxhdGUgdm9pZCBKU0RvY3VtZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90Vmlz
aXRvciYpOworCiB2b2lkIEpTRG9jdW1lbnQ6OmFuYWx5emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVh
cEFuYWx5emVyJiBhbmFseXplcikKIHsKICAgICBCYXNlOjphbmFseXplSGVhcChjZWxsLCBhbmFs
eXplcik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Vycm9yRXZlbnRDdXN0
b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXJyb3JF
dmVudEN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTRXJyb3JFdmVudEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDkgKzI4
LDE0IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBKU0Vycm9yRXZlbnQ6OnZpc2l0
QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3ZvaWQgSlNF
cnJvckV2ZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNp
dG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNFcnJvckV2ZW50Ojp2aXNp
dEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHdyYXBwZWQoKS5v
cmlnaW5hbEVycm9yKCkudmlzaXQodmlzaXRvcik7CiB9CiAKK3RlbXBsYXRlIHZvaWQgSlNFcnJv
ckV2ZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3Im
KTsKK3RlbXBsYXRlIHZvaWQgSlNFcnJvckV2ZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihK
U0M6OlNsb3RWaXNpdG9yJik7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRMaXN0ZW5lci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudExpc3RlbmVyLmNwcAkocmV2aXNpb24g
MjcyMjk3KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudExpc3RlbmVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNzgsNyArNzgsOCBAQCBKU09iamVjdCogSlNFdmVudExpc3Rl
bmVyOjppbml0aWFsaXplSlNGCiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLXZvaWQgSlNFdmVu
dExpc3RlbmVyOjp2aXNpdEpTRnVuY3Rpb24oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3ZvaWQg
SlNFdmVudExpc3RlbmVyOjp2aXNpdEpTRnVuY3Rpb24oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2
b2lkIEpTRXZlbnRMaXN0ZW5lcjo6dmlzaXRKU0Z1bmN0aW9uKEFic3RyYWN0U2xvdFZpc2l0b3Im
IHZpc2l0b3IpCiB7CiAgICAgLy8gSWYgbV93cmFwcGVyIGlzIG51bGwsIHdlIGFyZSBub3Qga2Vl
cGluZyBtX2pzRnVuY3Rpb24gYWxpdmUuCiAgICAgaWYgKCFtX3dyYXBwZXIpCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50TGlzdGVuZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50TGlzdGVuZXIuaAkocmV2aXNpb24gMjcy
Mjk3KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudExpc3RlbmVyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTYyLDcgKzYyLDggQEAgcHVibGljOgogCiBwcml2YXRlOgogICAgIHZp
cnR1YWwgSlNDOjpKU09iamVjdCogaW5pdGlhbGl6ZUpTRnVuY3Rpb24oU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCYpIGNvbnN0OwotICAgIHZvaWQgdmlzaXRKU0Z1bmN0aW9uKEpTQzo6U2xvdFZpc2l0
b3ImKSBmaW5hbDsKKy8vICAgIHZvaWQgdmlzaXRKU0Z1bmN0aW9uKEpTQzo6U2xvdFZpc2l0b3Im
KSBmaW5hbDsKKyAgICB2b2lkIHZpc2l0SlNGdW5jdGlvbihKU0M6OkFic3RyYWN0U2xvdFZpc2l0
b3ImKSBmaW5hbDsKIAogcHJvdGVjdGVkOgogICAgIEpTRXZlbnRMaXN0ZW5lcihKU0M6OkpTT2Jq
ZWN0KiBmdW5jdGlvbiwgSlNDOjpKU09iamVjdCogd3JhcHBlciwgYm9vbCBpc0F0dHJpYnV0ZSwg
RE9NV3JhcHBlcldvcmxkJik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2
ZW50VGFyZ2V0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0V2ZW50VGFyZ2V0Q3VzdG9tLmNwcAkocmV2aXNpb24gMjcyMjk3KQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudFRhcmdldEN1c3RvbS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTcyLDkgKzcyLDE0IEBAIHN0ZDo6dW5pcXVlX3B0cjxKU0V2ZW50VGFyZ2V0V3JhcHBl
cj4ganMKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotdm9pZCBKU0V2ZW50VGFyZ2V0Ojp2aXNp
dEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vdm9pZCBKU0V2ZW50
VGFyZ2V0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3Rl
bXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTRXZlbnRUYXJnZXQ6OnZpc2l0QWRkaXRp
b25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgd3JhcHBlZCgpLnZpc2l0SlNF
dmVudExpc3RlbmVycyh2aXNpdG9yKTsKIH0KIAordGVtcGxhdGUgdm9pZCBKU0V2ZW50VGFyZ2V0
Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0
ZSB2b2lkIEpTRXZlbnRUYXJnZXQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9y
Jik7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTRmV0Y2hFdmVudEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNGZXRjaEV2ZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gMjcyMjk3KQor
KysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNGZXRjaEV2ZW50Q3VzdG9tLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzAsMTEgKzMwLDE2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAot
dm9pZCBKU0ZldGNoRXZlbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0
b3ImIHZpc2l0b3IpCisvL3ZvaWQgSlNGZXRjaEV2ZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJl
bihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4K
K3ZvaWQgSlNGZXRjaEV2ZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNp
dG9yKQogewogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdCgmd3JhcHBlZCgpLnJlcXVlc3QoKSk7
CiB9CiAKLX0KK3RlbXBsYXRlIHZvaWQgSlNGZXRjaEV2ZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGls
ZHJlbihKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNGZXRjaEV2
ZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJik7CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0hUTUxDYW52YXNFbGVtZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxDYW52YXNFbGVtZW50Q3VzdG9tLmNwcAkocmV2aXNp
b24gMjcyMjk3KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MQ2FudmFzRWxl
bWVudEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDkgKzMxLDE0IEBACiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotdm9pZCBKU0hUTUxDYW52YXNFbGVtZW50Ojp2aXNpdEFkZGl0aW9u
YWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy92b2lkIEpTSFRNTENhbnZh
c0VsZW1lbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0
b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0hUTUxDYW52YXNFbGVtZW50
Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHZpc2l0
b3IuYWRkT3BhcXVlUm9vdChzdGF0aWNfY2FzdDxDYW52YXNCYXNlKj4oJndyYXBwZWQoKSkpOwog
fQogCit0ZW1wbGF0ZSB2b2lkIEpTSFRNTENhbnZhc0VsZW1lbnQ6OnZpc2l0QWRkaXRpb25hbENo
aWxkcmVuKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU0hUTUxD
YW52YXNFbGVtZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJik7
CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTSFRNTFRlbXBsYXRlRWxlbWVudEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MVGVtcGxhdGVFbGVtZW50Q3VzdG9tLmNwcAkocmV2
aXNpb24gMjcyMjk3KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MVGVtcGxh
dGVFbGVtZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsMTAgKzM3LDE1IEBACiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCi12b2lkIEpTSFRNTFRl
bXBsYXRlRWxlbWVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYg
dmlzaXRvcikKKy8vdm9pZCBKU0hUTUxUZW1wbGF0ZUVsZW1lbnQ6OnZpc2l0QWRkaXRpb25hbENo
aWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNp
dG9yPgordm9pZCBKU0hUTUxUZW1wbGF0ZUVsZW1lbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVu
KFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgaWYgKGF1dG8qIGNvbnRlbnQgPSB3cmFwcGVkKCku
Y29udGVudElmQXZhaWxhYmxlKCkpCiAgICAgICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChyb290
KGNvbnRlbnQpKTsKIH0KIAordGVtcGxhdGUgdm9pZCBKU0hUTUxUZW1wbGF0ZUVsZW1lbnQ6OnZp
c2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxh
dGUgdm9pZCBKU0hUTUxUZW1wbGF0ZUVsZW1lbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpT
Qzo6U2xvdFZpc2l0b3ImKTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNIaXN0b3J5Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hpc3RvcnlDdXN0b20uY3BwCShyZXZpc2lvbiAy
NzIyOTcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hpc3RvcnlDdXN0b20uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00NCw5ICs0NCwxNCBAQCBKU1ZhbHVlIEpTSGlzdG9yeTo6c3Rh
dGUoSlNHbG9iYWxPYmplY3QmCiAgICAgfSk7CiB9CiAKLXZvaWQgSlNIaXN0b3J5Ojp2aXNpdEFk
ZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vdm9pZCBKU0hpc3Rvcnk6
OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8
dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNIaXN0b3J5Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJl
bihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHdyYXBwZWQoKS5jYWNoZWRTdGF0ZUZvckdDKCku
dmlzaXQodmlzaXRvcik7CiB9CiAKK3RlbXBsYXRlIHZvaWQgSlNIaXN0b3J5Ojp2aXNpdEFkZGl0
aW9uYWxDaGlsZHJlbihBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTSGlz
dG9yeTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKKwogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJDdXJz
b3JDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
SURCQ3Vyc29yQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcyMjk3KQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNJREJDdXJzb3JDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MCw3
ICs1MCw5IEBAIEpTQzo6SlNWYWx1ZSBKU0lEQkN1cnNvcjo6cHJpbWFyeUtleShKU0MKICAgICB9
KTsKIH0KIAotdm9pZCBKU0lEQkN1cnNvcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZp
c2l0b3ImIHZpc2l0b3IpCisvL3ZvaWQgSlNJREJDdXJzb3I6OnZpc2l0QWRkaXRpb25hbENoaWxk
cmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3Zv
aWQgSlNJREJDdXJzb3I6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3Ip
CiB7CiAgICAgYXV0byYgY3Vyc29yID0gd3JhcHBlZCgpOwogICAgIGlmIChhdXRvKiByZXF1ZXN0
ID0gY3Vyc29yLnJlcXVlc3QoKSkKQEAgLTU5LDYgKzYxLDkgQEAgdm9pZCBKU0lEQkN1cnNvcjo6
dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZQogICAgIGN1cnNvci5wcmltYXJ5S2V5V3JhcHBlcigpLnZp
c2l0KHZpc2l0b3IpOwogfQogCit0ZW1wbGF0ZSB2b2lkIEpTSURCQ3Vyc29yOjp2aXNpdEFkZGl0
aW9uYWxDaGlsZHJlbihBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTSURC
Q3Vyc29yOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYpOworCiBKU1ZhbHVl
IHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTRE9NR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIFJlZjxJREJDdXJzb3I+JiYgY3Vyc29yKQogewogICAgIGlmIChpczxJ
REJDdXJzb3JXaXRoVmFsdWU+KGN1cnNvcikpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0lEQkN1cnNvcldpdGhWYWx1ZUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJDdXJzb3JXaXRoVmFsdWVDdXN0b20uY3BwCShyZXZp
c2lvbiAyNzIyOTcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQkN1cnNvcldp
dGhWYWx1ZUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzLDEyICs0MywxNyBAQCBKU0M6
OkpTVmFsdWUgSlNJREJDdXJzb3JXaXRoVmFsdWU6OnZhbHVlCiAgICAgfSk7CiB9CiAKLXZvaWQg
SlNJREJDdXJzb3JXaXRoVmFsdWU6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9y
JiB2aXNpdG9yKQorLy92b2lkIEpTSURCQ3Vyc29yV2l0aFZhbHVlOjp2aXNpdEFkZGl0aW9uYWxD
aGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+
Cit2b2lkIEpTSURCQ3Vyc29yV2l0aFZhbHVlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNp
dG9yJiB2aXNpdG9yKQogewogICAgIEpTSURCQ3Vyc29yOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJl
bih2aXNpdG9yKTsKICAgICB3cmFwcGVkKCkudmFsdWVXcmFwcGVyKCkudmlzaXQodmlzaXRvcik7
CiB9CiAKK3RlbXBsYXRlIHZvaWQgSlNJREJDdXJzb3JXaXRoVmFsdWU6OnZpc2l0QWRkaXRpb25h
bENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNJREJDdXJz
b3JXaXRoVmFsdWU6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CisKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNF
KQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJJbmRleEN1c3RvbS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJJbmRleEN1c3Rv
bS5jcHAJKHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
SURCSW5kZXhDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCwxMSArMzQsMTYgQEAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKLXZvaWQgSlNJREJJbmRl
eDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3ZvaWQg
SlNJREJJbmRleDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3Ip
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0lEQkluZGV4Ojp2aXNpdEFkZGl0
aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHZpc2l0b3IuYWRkT3BhcXVl
Um9vdChzdGF0aWNfY2FzdDxJREJJbmRleCY+KHdyYXBwZWQoKSkub2JqZWN0U3RvcmVBc09wYXF1
ZVJvb3QoKSk7CiB9CiAKK3RlbXBsYXRlIHZvaWQgSlNJREJJbmRleDo6dmlzaXRBZGRpdGlvbmFs
Q2hpbGRyZW4oQWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU0lEQkluZGV4
Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYpOworCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCT2JqZWN0U3RvcmVDdXN0b20uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCT2JqZWN0U3RvcmVDdXN0
b20uY3BwCShyZXZpc2lvbiAyNzIyOTcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0lEQk9iamVjdFN0b3JlQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsMTEgKzM2LDE2
IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCi12b2lkIEpT
SURCT2JqZWN0U3RvcmU6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNp
dG9yKQorLy92b2lkIEpTSURCT2JqZWN0U3RvcmU6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNJ
REJPYmplY3RTdG9yZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikK
IHsKICAgICBzdGF0aWNfY2FzdDxJREJPYmplY3RTdG9yZSY+KHdyYXBwZWQoKSkudmlzaXRSZWZl
cmVuY2VkSW5kZXhlcyh2aXNpdG9yKTsKIH0KIAotfQordGVtcGxhdGUgdm9pZCBKU0lEQk9iamVj
dFN0b3JlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0
ZW1wbGF0ZSB2b2lkIEpTSURCT2JqZWN0U3RvcmU6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNs
b3RWaXNpdG9yJik7CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQlJlcXVlc3RDdXN0b20uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCUmVxdWVzdEN1c3RvbS5jcHAJ
KHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCUmVx
dWVzdEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg5LDEyICs4OSwxOCBAQCBKU0M6OkpT
VmFsdWUgSlNJREJSZXF1ZXN0OjpyZXN1bHQoSlNDOjpKCiAgICAgfSk7CiB9CiAKLXZvaWQgSlNJ
REJSZXF1ZXN0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikK
Ky8vdm9pZCBKU0lEQlJlcXVlc3Q6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9y
JiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNJREJSZXF1ZXN0
Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGF1dG8m
IHJlcXVlc3QgPSB3cmFwcGVkKCk7CiAgICAgcmVxdWVzdC5yZXN1bHRXcmFwcGVyKCkudmlzaXQo
dmlzaXRvcik7CiAgICAgcmVxdWVzdC5jdXJzb3JXcmFwcGVyKCkudmlzaXQodmlzaXRvcik7CiB9
CiAKLX0KK3RlbXBsYXRlIHZvaWQgSlNJREJSZXF1ZXN0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJl
bihBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTSURCUmVxdWVzdDo6dmlz
aXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorCiAjZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQlRyYW5zYWN0aW9uQ3VzdG9tLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQlRyYW5zYWN0aW9uQ3VzdG9tLmNw
cAkocmV2aXNpb24gMjcyMjk3KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJU
cmFuc2FjdGlvbkN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDExICszNCwxNiBAQAog
bmFtZXNwYWNlIFdlYkNvcmUgewogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAotdm9pZCBKU0lEQlRy
YW5zYWN0aW9uOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikK
Ky8vdm9pZCBKU0lEQlRyYW5zYWN0aW9uOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90Vmlz
aXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTSURCVHJh
bnNhY3Rpb246OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAg
ICAgc3RhdGljX2Nhc3Q8SURCVHJhbnNhY3Rpb24mPih3cmFwcGVkKCkpLnZpc2l0UmVmZXJlbmNl
ZE9iamVjdFN0b3Jlcyh2aXNpdG9yKTsKIH0KIAotfQordGVtcGxhdGUgdm9pZCBKU0lEQlRyYW5z
YWN0aW9uOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0
ZW1wbGF0ZSB2b2lkIEpTSURCVHJhbnNhY3Rpb246OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNs
b3RWaXNpdG9yJik7CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0ludGVyc2VjdGlvbk9ic2VydmVyQ3VzdG9tLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0ludGVyc2VjdGlv
bk9ic2VydmVyQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcyMjk3KQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNJbnRlcnNlY3Rpb25PYnNlcnZlckN1c3RvbS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTMwLDEwICszMCwxNSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgSlNJ
bnRlcnNlY3Rpb25PYnNlcnZlcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90Vmlz
aXRvciYgdmlzaXRvcikKKy8vdm9pZCBKU0ludGVyc2VjdGlvbk9ic2VydmVyOjp2aXNpdEFkZGl0
aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5h
bWUgVmlzaXRvcj4KK3ZvaWQgSlNJbnRlcnNlY3Rpb25PYnNlcnZlcjo6dmlzaXRBZGRpdGlvbmFs
Q2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBpZiAoYXV0byogY2FsbGJhY2sgPSB3
cmFwcGVkKCkuY2FsbGJhY2tDb25jdXJyZW50bHkoKSkKICAgICAgICAgY2FsbGJhY2stPnZpc2l0
SlNGdW5jdGlvbih2aXNpdG9yKTsKIH0KIAotfQordGVtcGxhdGUgdm9pZCBKU0ludGVyc2VjdGlv
bk9ic2VydmVyOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OkFic3RyYWN0U2xvdFZpc2l0
b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNJbnRlcnNlY3Rpb25PYnNlcnZlcjo6dmlzaXRBZGRpdGlv
bmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYpOworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0ludGVyc2VjdGlvbk9ic2VydmVy
RW50cnlDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTSW50ZXJzZWN0aW9uT2JzZXJ2ZXJFbnRyeUN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjI5NykK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW50ZXJzZWN0aW9uT2JzZXJ2ZXJFbnRy
eUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDkgQEAKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi12b2lkIEpTSW50ZXJzZWN0aW9uT2JzZXJ2ZXJFbnRyeTo6dmlzaXRBZGRp
dGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vdm9pZCBKU0ludGVy
c2VjdGlvbk9ic2VydmVyRW50cnk6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZp
c2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0ludGVy
c2VjdGlvbk9ic2VydmVyRW50cnk6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZp
c2l0b3IpCiB7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHJvb3Qod3JhcHBlZCgpLnRhcmdl
dCgpKSk7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHdyYXBwZWQoKS5ib3VuZGluZ0NsaWVu
dFJlY3QoKSk7CkBAIC0zOCw0ICs0MCw3IEBAIHZvaWQgSlNJbnRlcnNlY3Rpb25PYnNlcnZlckVu
dHJ5Ojp2aXNpdEEKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qod3JhcHBlZCgpLnJvb3RCb3Vu
ZHMoKSk7CiB9CiAKLX0KK3RlbXBsYXRlIHZvaWQgSlNJbnRlcnNlY3Rpb25PYnNlcnZlckVudHJ5
Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3Rl
bXBsYXRlIHZvaWQgSlNJbnRlcnNlY3Rpb25PYnNlcnZlckVudHJ5Ojp2aXNpdEFkZGl0aW9uYWxD
aGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJik7CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWVzc2FnZUNoYW5uZWxDdXN0b20uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWVzc2FnZUNoYW5u
ZWxDdXN0b20uY3BwCShyZXZpc2lvbiAyNzIyOTcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU01lc3NhZ2VDaGFubmVsQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNyAr
MzMsOSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgSlNNZXNzYWdlQ2hhbm5lbDo6
dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vdm9p
ZCBKU01lc3NhZ2VDaGFubmVsOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNp
dG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNNZXNzYWdl
Q2hhbm5lbDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAg
ICBpZiAoTWVzc2FnZVBvcnQqIHBvcnQgPSB3cmFwcGVkKCkucG9ydDEoKSkKICAgICAgICAgdmlz
aXRvci5hZGRPcGFxdWVSb290KHBvcnQpOwpAQCAtNDIsNiArNDQsOSBAQCB2b2lkIEpTTWVzc2Fn
ZUNoYW5uZWw6OnZpc2l0QWRkaXRpb25hbENoCiAgICAgICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9v
dChwb3J0KTsKIH0KIAordGVtcGxhdGUgdm9pZCBKU01lc3NhZ2VDaGFubmVsOjp2aXNpdEFkZGl0
aW9uYWxDaGlsZHJlbihKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQg
SlNNZXNzYWdlQ2hhbm5lbDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRv
ciYpOworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoQ0hBTk5F
TF9NRVNTQUdJTkcpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01lc3NhZ2VF
dmVudEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNNZXNzYWdlRXZlbnRDdXN0b20uY3BwCShyZXZpc2lvbiAyNzIyOTcpCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU01lc3NhZ2VFdmVudEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTcwLDcgKzcwLDkgQEAgSlNDOjpKU1ZhbHVlIEpTTWVzc2FnZUV2ZW50OjpkYXRhKEpTQzo6
SgogICAgIH0pOwogfQogCi12b2lkIEpTTWVzc2FnZUV2ZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGls
ZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy92b2lkIEpTTWVzc2FnZUV2ZW50Ojp2
aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxh
dGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNNZXNzYWdlRXZlbnQ6OnZpc2l0QWRkaXRpb25h
bENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgV1RGOjpzd2l0Y2hPbih3cmFwcGVk
KCkuZGF0YSgpLCBbJnZpc2l0b3JdIChjb25zdCBKU1ZhbHVlSW5XcmFwcGVkT2JqZWN0JiBkYXRh
KSB7CiAgICAgICAgIGRhdGEudmlzaXQodmlzaXRvcik7CkBAIC04NCw0ICs4Niw3IEBAIHZvaWQg
SlNNZXNzYWdlRXZlbnQ6OnZpc2l0QWRkaXRpb25hbENoaWwKICAgICB3cmFwcGVkKCkuY2FjaGVk
UG9ydHMoKS52aXNpdCh2aXNpdG9yKTsKIH0KIAordGVtcGxhdGUgdm9pZCBKU01lc3NhZ2VFdmVu
dDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0
ZW1wbGF0ZSB2b2lkIEpTTWVzc2FnZUV2ZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6
OlNsb3RWaXNpdG9yJik7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWVzc2FnZVBvcnRDdXN0b20uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWVzc2FnZVBvcnRDdXN0b20uY3BwCShyZXZp
c2lvbiAyNzIyOTcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01lc3NhZ2VQb3J0
Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsMTEgKzMxLDE2IEBACiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCi12b2lkIEpTTWVzc2FnZVBvcnQ6OnZp
c2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy92b2lkIEpTTWVz
c2FnZVBvcnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQor
dGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNNZXNzYWdlUG9ydDo6dmlzaXRBZGRp
dGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICAvLyBJZiB3ZSBoYXZlIGEg
bG9jYWxseSBlbnRhbmdsZWQgcG9ydCwgd2UgY2FuIGRpcmVjdGx5IG1hcmsgaXQgYXMgcmVhY2hh
YmxlLiBQb3J0cyB0aGF0IGFyZSByZW1vdGVseSBlbnRhbmdsZWQgYXJlIG1hcmtlZCBpbi11c2Ug
YnkgbWFya0FjdGl2ZU9iamVjdHNGb3JDb250ZXh0KCkuCiAgICAgaWYgKE1lc3NhZ2VQb3J0KiBw
b3J0ID0gd3JhcHBlZCgpLmxvY2FsbHlFbnRhbmdsZWRQb3J0KCkpCiAgICAgICAgIHZpc2l0b3Iu
YWRkT3BhcXVlUm9vdChwb3J0KTsKIH0KIAordGVtcGxhdGUgdm9pZCBKU01lc3NhZ2VQb3J0Ojp2
aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2
b2lkIEpTTWVzc2FnZVBvcnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJik7
CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTTXV0YXRpb25PYnNlcnZlckN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNNdXRhdGlvbk9ic2VydmVyQ3VzdG9tLmNwcAkocmV2aXNpb24g
MjcyMjk3KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNdXRhdGlvbk9ic2VydmVy
Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksMTIgKzM5LDE3IEBACiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCi12b2lkIEpTTXV0YXRpb25PYnNlcnZl
cjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKKy8v
dm9pZCBKU011dGF0aW9uT2JzZXJ2ZXI6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xv
dFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU011
dGF0aW9uT2JzZXJ2ZXI6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3Ip
CiB7CiAgICAgd3JhcHBlZCgpLmNhbGxiYWNrKCkudmlzaXRKU0Z1bmN0aW9uKHZpc2l0b3IpOwog
fQogCi1ib29sIEpTTXV0YXRpb25PYnNlcnZlck93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVS
b290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIFNsb3RWaXNpdG9y
JiB2aXNpdG9yLCBjb25zdCBjaGFyKipyZWFzb24pCit0ZW1wbGF0ZSB2b2lkIEpTTXV0YXRpb25P
YnNlcnZlcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9y
Jik7Cit0ZW1wbGF0ZSB2b2lkIEpTTXV0YXRpb25PYnNlcnZlcjo6dmlzaXRBZGRpdGlvbmFsQ2hp
bGRyZW4oSlNDOjpTbG90VmlzaXRvciYpOworCitib29sIEpTTXV0YXRpb25PYnNlcnZlck93bmVy
Ojppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhh
bmRsZSwgdm9pZCosIEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKnJl
YXNvbikKIHsKICAgICBmb3IgKGF1dG8qIG5vZGUgOiBqc0Nhc3Q8SlNNdXRhdGlvbk9ic2VydmVy
Kj4oaGFuZGxlLnNsb3QoKS0+YXNDZWxsKCkpLT53cmFwcGVkKCkub2JzZXJ2ZWROb2RlcygpKSB7
CiAgICAgICAgIGlmICh2aXNpdG9yLmNvbnRhaW5zT3BhcXVlUm9vdChyb290KG5vZGUpKSkgewpJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNdXRhdGlvblJlY29yZEN1c3RvbS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNdXRhdGlvblJl
Y29yZEN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTTXV0YXRpb25SZWNvcmRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw5
ICszMCwxNCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgSlNNdXRhdGlvblJlY29y
ZDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKKy8v
dm9pZCBKU011dGF0aW9uUmVjb3JkOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RW
aXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNNdXRh
dGlvblJlY29yZDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsK
ICAgICB3cmFwcGVkKCkudmlzaXROb2Rlc0NvbmN1cnJlbnRseSh2aXNpdG9yKTsKIH0KLSAgICAK
KwordGVtcGxhdGUgdm9pZCBKU011dGF0aW9uUmVjb3JkOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJl
bihKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNNdXRhdGlvblJl
Y29yZDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYpOworCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05h
dmlnYXRvckN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNOYXZpZ2F0b3JDdXN0b20uY3BwCShyZXZpc2lvbiAyNzIyOTcpCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU05hdmlnYXRvckN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMyLDExICszMiwxNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgSlNOYXZpZ2F0
b3I6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCisv
L3ZvaWQgSlNOYXZpZ2F0b3I6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0
b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU05hdmlnYXRv
cjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB2aXNp
dG9yLmFkZE9wYXF1ZVJvb3Qoc3RhdGljX2Nhc3Q8TmF2aWdhdG9yQmFzZSo+KCZ3cmFwcGVkKCkp
KTsKIH0KIAordGVtcGxhdGUgdm9pZCBKU05hdmlnYXRvcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRy
ZW4oSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTTmF2aWdhdG9y
Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJik7CisKICNpZiBFTkFC
TEUoTUVESUFfU1RSRUFNKQogSlNDOjpKU1ZhbHVlIEpTTmF2aWdhdG9yOjpnZXRVc2VyTWVkaWEo
SlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpDYWxsRnJhbWUm
IGNhbGxGcmFtZSkKIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUN1
c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2Rl
Q3VzdG9tLmNwcAkocmV2aXNpb24gMjcyMjk3KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNOb2RlQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzQsNyArNzQsOCBAQCB1c2lu
ZyBuYW1lc3BhY2UgSlNDOwogCiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCi1zdGF0aWMg
aW5saW5lIGJvb2wgaXNSZWFjaGFibGVGcm9tRE9NKE5vZGUqIG5vZGUsIFNsb3RWaXNpdG9yJiB2
aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQorLy9zdGF0aWMgaW5saW5lIGJvb2wgaXNSZWFj
aGFibGVGcm9tRE9NKE5vZGUqIG5vZGUsIFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFy
KiogcmVhc29uKQorc3RhdGljIGlubGluZSBib29sIGlzUmVhY2hhYmxlRnJvbURPTShOb2RlKiBu
b2RlLCBBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQog
ewogICAgIGlmICghbm9kZS0+aXNDb25uZWN0ZWQoKSkgewogICAgICAgICBpZiAoaXM8RWxlbWVu
dD4oKm5vZGUpKSB7CkBAIC0xMjMsNyArMTI0LDcgQEAgc3RhdGljIGlubGluZSBib29sIGlzUmVh
Y2hhYmxlRnJvbURPTShObwogICAgIHJldHVybiB2aXNpdG9yLmNvbnRhaW5zT3BhcXVlUm9vdChy
b290KG5vZGUpKTsKIH0KIAotYm9vbCBKU05vZGVPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVl
Um9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBTbG90VmlzaXRv
ciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikKK2Jvb2wgSlNOb2RlT3duZXI6OmlzUmVh
Y2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2
b2lkKiwgQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikK
IHsKICAgICBKU05vZGUqIGpzTm9kZSA9IGpzQ2FzdDxKU05vZGUqPihoYW5kbGUuc2xvdCgpLT5h
c0NlbGwoKSk7CiAgICAgcmV0dXJuIGlzUmVhY2hhYmxlRnJvbURPTSgmanNOb2RlLT53cmFwcGVk
KCksIHZpc2l0b3IsIHJlYXNvbik7CkBAIC0xMzYsMTEgKzEzNywxNiBAQCBKU1Njb3BlKiBKU05v
ZGU6OnB1c2hFdmVudEhhbmRsZXJTY29wZShKCiAgICAgcmV0dXJuIG5vZGU7CiB9CiAKLXZvaWQg
SlNOb2RlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKKy8v
dm9pZCBKU05vZGU6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9y
KQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNOb2RlOjp2aXNpdEFkZGl0aW9u
YWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9v
dChyb290KHdyYXBwZWQoKSkpOwogfQogCit0ZW1wbGF0ZSB2b2lkIEpTTm9kZTo6dmlzaXRBZGRp
dGlvbmFsQ2hpbGRyZW4oQWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU05v
ZGU6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CisKIHN0YXRpYyBBTFdB
WVNfSU5MSU5FIEpTVmFsdWUgY3JlYXRlV3JhcHBlcklubGluZShKU0dsb2JhbE9iamVjdCogbGV4
aWNhbEdsb2JhbE9iamVjdCwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmPE5v
ZGU+JiYgbm9kZSkKIHsKICAgICBBU1NFUlQoIWdldENhY2hlZFdyYXBwZXIoZ2xvYmFsT2JqZWN0
LT53b3JsZCgpLCBub2RlKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05v
ZGVJdGVyYXRvckN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNOb2RlSXRlcmF0b3JDdXN0b20uY3BwCShyZXZpc2lvbiAyNzIyOTcpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVJdGVyYXRvckN1c3RvbS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI1LDEwICsyNSwxNSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQg
SlNOb2RlSXRlcmF0b3I6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3Im
IHZpc2l0b3IpCisvL3ZvaWQgSlNOb2RlSXRlcmF0b3I6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVu
KEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgor
dm9pZCBKU05vZGVJdGVyYXRvcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlz
aXRvcikKIHsKICAgICBpZiAoTm9kZUZpbHRlciogZmlsdGVyID0gd3JhcHBlZCgpLmZpbHRlcigp
KQogICAgICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QoZmlsdGVyKTsKIH0KIAotfQordGVtcGxh
dGUgdm9pZCBKU05vZGVJdGVyYXRvcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpBYnN0
cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTTm9kZUl0ZXJhdG9yOjp2aXNpdEFk
ZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJik7CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUxpc3RDdXN0b20u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUxpc3RD
dXN0b20uY3BwCShyZXZpc2lvbiAyNzIyOTcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU05vZGVMaXN0Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsNyArMzcsNyBAQAog
bmFtZXNwYWNlIFdlYkNvcmUgewogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAotYm9vbCBKU05vZGVM
aXN0T3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5r
bm93bj4gaGFuZGxlLCB2b2lkKiwgU2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiBy
ZWFzb24pCitib29sIEpTTm9kZUxpc3RPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMo
SlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBBYnN0cmFjdFNsb3RWaXNp
dG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQogewogICAgIEpTTm9kZUxpc3QqIGpz
Tm9kZUxpc3QgPSBqc0Nhc3Q8SlNOb2RlTGlzdCo+KGhhbmRsZS5zbG90KCktPmFzQ2VsbCgpKTsK
ICAgICBpZiAoIWpzTm9kZUxpc3QtPmhhc0N1c3RvbVByb3BlcnRpZXMoanNOb2RlTGlzdC0+dm0o
KSkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU09mZnNjcmVlbkNhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyREN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNPZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRDdXN0b20uY3Bw
CShyZXZpc2lvbiAyNzIyOTcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU09mZnNj
cmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyREN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMxLDcgKzMxLDcgQEAgaW5saW5lIHZvaWQqIHJvb3QoT2Zmc2NyZWVuQ2FudmFzKiBjYW52YQog
ICAgIHJldHVybiBjYW52YXM7CiB9CiAKLWJvb2wgSlNPZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdD
b250ZXh0MkRPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlND
OjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hh
cioqIHJlYXNvbikKK2Jvb2wgSlNPZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRPd25l
cjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBo
YW5kbGUsIHZvaWQqLCBBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiog
cmVhc29uKQogewogICAgIGlmIChVTkxJS0VMWShyZWFzb24pKQogICAgICAgICAqcmVhc29uID0g
IkNhbnZhcyBpcyBvcGFxdWUgcm9vdCI7CkBAIC00MSwxMSArNDEsMTYgQEAgYm9vbCBKU09mZnNj
cmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRAogICAgIHJldHVybiB2aXNpdG9yLmNvbnRhaW5z
T3BhcXVlUm9vdChyb290KTsKIH0KIAotdm9pZCBKU09mZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyRDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisv
L3ZvaWQgSlNPZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnZpc2l0QWRkaXRpb25h
bENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRv
cj4KK3ZvaWQgSlNPZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnZpc2l0QWRkaXRp
b25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVS
b290KHJvb3QoJndyYXBwZWQoKS5jYW52YXMoKSkpOwogfQogCit0ZW1wbGF0ZSB2b2lkIEpTT2Zm
c2NyZWVuQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihB
YnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTT2Zmc2NyZWVuQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYpOwor
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNQYWludFJlbmRlcmluZ0NvbnRleHQyREN1c3RvbS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNQYWludFJlbmRlcmluZ0NvbnRleHQy
REN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTUGFpbnRSZW5kZXJpbmdDb250ZXh0MkRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zNiw3ICszNiw3IEBAIGlubGluZSB2b2lkKiByb290KEN1c3RvbVBhaW50Q2FudmFzKiBjYW4K
ICAgICByZXR1cm4gY2FudmFzOwogfQogCi1ib29sIEpTUGFpbnRSZW5kZXJpbmdDb250ZXh0MkRP
d25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3du
PiBoYW5kbGUsIHZvaWQqLCBTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNv
bikKK2Jvb2wgSlNQYWludFJlbmRlcmluZ0NvbnRleHQyRE93bmVyOjppc1JlYWNoYWJsZUZyb21P
cGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIEFic3Ry
YWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCiB7CiAgICAgaWYg
KFVOTElLRUxZKHJlYXNvbikpCiAgICAgICAgICpyZWFzb24gPSAiQ2FudmFzIGlzIG9wYXF1ZSBy
b290IjsKQEAgLTQ2LDExICs0NiwxNiBAQCBib29sIEpTUGFpbnRSZW5kZXJpbmdDb250ZXh0MkRP
d25lcjo6aXNSCiAgICAgcmV0dXJuIHZpc2l0b3IuY29udGFpbnNPcGFxdWVSb290KHJvb3QpOwog
fQogCi12b2lkIEpTUGFpbnRSZW5kZXJpbmdDb250ZXh0MkQ6OnZpc2l0QWRkaXRpb25hbENoaWxk
cmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy92b2lkIEpTUGFpbnRSZW5kZXJpbmdDb250ZXh0
MkQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxh
dGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNQYWludFJlbmRlcmluZ0NvbnRleHQyRDo6dmlz
aXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB2aXNpdG9yLmFk
ZE9wYXF1ZVJvb3Qocm9vdCgmd3JhcHBlZCgpLmNhbnZhcygpKSk7CiB9CiAKK3RlbXBsYXRlIHZv
aWQgSlNQYWludFJlbmRlcmluZ0NvbnRleHQyRDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oQWJz
dHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU1BhaW50UmVuZGVyaW5nQ29udGV4
dDJEOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYpOworCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCiAjZW5kaWYKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNQYWludFdvcmtsZXRHbG9iYWxTY29wZUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNQYWludFdvcmtsZXRHbG9iYWxTY29wZUN1c3RvbS5jcHAJ
KHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUGFpbnRX
b3JrbGV0R2xvYmFsU2NvcGVDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw5
IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCi12b2lkIEpT
UGFpbnRXb3JrbGV0R2xvYmFsU2NvcGU6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xv
dFZpc2l0b3ImIHZpc2l0b3IpCisvL3ZvaWQgSlNQYWludFdvcmtsZXRHbG9iYWxTY29wZTo6dmlz
aXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRl
PHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTUGFpbnRXb3JrbGV0R2xvYmFsU2NvcGU6OnZpc2l0
QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0byBsb2NrZXIg
PSBob2xkTG9jayh3cmFwcGVkKCkucGFpbnREZWZpbml0aW9uTG9jaygpKTsKICAgICBmb3IgKGF1
dG8mIHJlZ2lzdGVyZWQgOiB3cmFwcGVkKCkucGFpbnREZWZpbml0aW9uTWFwKCkudmFsdWVzKCkp
IHsKQEAgLTQwLDUgKzQyLDkgQEAgdm9pZCBKU1BhaW50V29ya2xldEdsb2JhbFNjb3BlOjp2aXNp
dEFkZAogICAgIH0KIH0KIAotfQordGVtcGxhdGUgdm9pZCBKU1BhaW50V29ya2xldEdsb2JhbFNj
b3BlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKTsK
K3RlbXBsYXRlIHZvaWQgSlNQYWludFdvcmtsZXRHbG9iYWxTY29wZTo6dmlzaXRBZGRpdGlvbmFs
Q2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYpOworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
ICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNQYXltZW50TWV0aG9k
Q2hhbmdlRXZlbnRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTUGF5bWVudE1ldGhvZENoYW5nZUV2ZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gMjcy
Mjk3KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNQYXltZW50TWV0aG9kQ2hhbmdl
RXZlbnRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0MSw5IEBAIEpTQzo6SlNW
YWx1ZSBKU1BheW1lbnRNZXRob2RDaGFuZ2VFdmVudDoKICAgICB9KTsKIH0KIAotdm9pZCBKU1Bh
eW1lbnRNZXRob2RDaGFuZ2VFdmVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90
VmlzaXRvciYgdmlzaXRvcikKKy8vdm9pZCBKU1BheW1lbnRNZXRob2RDaGFuZ2VFdmVudDo6dmlz
aXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRl
PHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTUGF5bWVudE1ldGhvZENoYW5nZUV2ZW50Ojp2aXNp
dEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFdURjo6c3dpdGNo
T24od3JhcHBlZCgpLm1ldGhvZERldGFpbHMoKSwgWyZ2aXNpdG9yXShjb25zdCBKU1ZhbHVlSW5X
cmFwcGVkT2JqZWN0JiBtZXRob2REZXRhaWxzKSB7CiAgICAgICAgIG1ldGhvZERldGFpbHMudmlz
aXQodmlzaXRvcik7CkBAIC01MSw2ICs1Myw5IEBAIHZvaWQgSlNQYXltZW50TWV0aG9kQ2hhbmdl
RXZlbnQ6OnZpc2l0QWQKICAgICB3cmFwcGVkKCkuY2FjaGVkTWV0aG9kRGV0YWlscygpLnZpc2l0
KHZpc2l0b3IpOwogfQogCit0ZW1wbGF0ZSB2b2lkIEpTUGF5bWVudE1ldGhvZENoYW5nZUV2ZW50
Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3Rl
bXBsYXRlIHZvaWQgSlNQYXltZW50TWV0aG9kQ2hhbmdlRXZlbnQ6OnZpc2l0QWRkaXRpb25hbENo
aWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImKTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAj
ZW5kaWYgLy8gRU5BQkxFKFBBWU1FTlRfUkVRVUVTVCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTUGF5bWVudFJlc3BvbnNlQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1BheW1lbnRSZXNwb25zZUN1c3RvbS5jcHAJKHJldmlz
aW9uIDI3MjI5NykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUGF5bWVudFJlc3Bv
bnNlQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsMTEgKzM3LDE2IEBAIEpTQzo6SlNW
YWx1ZSBKU1BheW1lbnRSZXNwb25zZTo6ZGV0YWlscygKICAgICB9KTsKIH0KIAotdm9pZCBKU1Bh
eW1lbnRSZXNwb25zZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYg
dmlzaXRvcikKKy8vdm9pZCBKU1BheW1lbnRSZXNwb25zZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRy
ZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+
Cit2b2lkIEpTUGF5bWVudFJlc3BvbnNlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9y
JiB2aXNpdG9yKQogewogICAgIHdyYXBwZWQoKS5jYWNoZWREZXRhaWxzKCkudmlzaXQodmlzaXRv
cik7CiB9CiAKK3RlbXBsYXRlIHZvaWQgSlNQYXltZW50UmVzcG9uc2U6OnZpc2l0QWRkaXRpb25h
bENoaWxkcmVuKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU1Bh
eW1lbnRSZXNwb25zZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYp
OworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoUEFZTUVOVF9S
RVFVRVNUKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNQZXJmb3JtYW5jZU9i
c2VydmVyQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU1BlcmZvcm1hbmNlT2JzZXJ2ZXJDdXN0b20uY3BwCShyZXZpc2lvbiAyNzIyOTcpCisrKyBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1BlcmZvcm1hbmNlT2JzZXJ2ZXJDdXN0b20uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zMSwxMiArMzEsMTcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCi12b2lkIEpTUGVyZm9ybWFuY2VPYnNlcnZlcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4o
SlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vdm9pZCBKU1BlcmZvcm1hbmNlT2JzZXJ2ZXI6
OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1w
bGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1BlcmZvcm1hbmNlT2JzZXJ2ZXI6OnZpc2l0
QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgd3JhcHBlZCgpLmNh
bGxiYWNrKCkudmlzaXRKU0Z1bmN0aW9uKHZpc2l0b3IpOwogfQogCi1ib29sIEpTUGVyZm9ybWFu
Y2VPYnNlcnZlck93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxK
U0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIEpTQzo6U2xvdFZpc2l0b3ImLCBjb25zdCBjaGFy
KiogcmVhc29uKQordGVtcGxhdGUgdm9pZCBKU1BlcmZvcm1hbmNlT2JzZXJ2ZXI6OnZpc2l0QWRk
aXRpb25hbENoaWxkcmVuKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9p
ZCBKU1BlcmZvcm1hbmNlT2JzZXJ2ZXI6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xv
dFZpc2l0b3ImKTsKKworYm9vbCBKU1BlcmZvcm1hbmNlT2JzZXJ2ZXJPd25lcjo6aXNSZWFjaGFi
bGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQq
LCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImLCBjb25zdCBjaGFyKiogcmVhc29uKQogewogICAg
IGlmIChVTkxJS0VMWShyZWFzb24pKQogICAgICAgICAqcmVhc29uID0gIlJlZ2lzdGVyZWQgUGVy
Zm9ybWFuY2VPYnNlcnZlciBjYWxsYmFjayI7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU1BvcFN0YXRlRXZlbnRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTUG9wU3RhdGVFdmVudEN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjI5
NykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUG9wU3RhdGVFdmVudEN1c3RvbS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTkwLDkgKzkwLDE0IEBAIEpTVmFsdWUgSlNQb3BTdGF0ZUV2
ZW50OjpzdGF0ZShKU0dsb2JhbE8KICAgICByZXR1cm4gY2FjaGVTdGF0ZShyZXN1bHQpOwogfQog
Ci12b2lkIEpTUG9wU3RhdGVFdmVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90
VmlzaXRvciYgdmlzaXRvcikKKy8vdm9pZCBKU1BvcFN0YXRlRXZlbnQ6OnZpc2l0QWRkaXRpb25h
bENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPgordm9pZCBKU1BvcFN0YXRlRXZlbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZp
c2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgd3JhcHBlZCgpLnN0YXRlKCkudmlzaXQodmlzaXRvcik7
CiB9CiAKK3RlbXBsYXRlIHZvaWQgSlNQb3BTdGF0ZUV2ZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGls
ZHJlbihKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNQb3BTdGF0
ZUV2ZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJik7CisKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
UHJvbWlzZVJlamVjdGlvbkV2ZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU1Byb21pc2VSZWplY3Rpb25FdmVudEN1c3RvbS5jcHAJKHJldmlz
aW9uIDI3MjI5NykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUHJvbWlzZVJlamVj
dGlvbkV2ZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsOSArMzIsMTQgQEAKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIEpTUHJvbWlzZVJlamVjdGlvbkV2ZW50Ojp2aXNp
dEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy92b2lkIEpT
UHJvbWlzZVJlamVjdGlvbkV2ZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RW
aXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNQcm9t
aXNlUmVqZWN0aW9uRXZlbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0
b3IpCiB7CiAgICAgd3JhcHBlZCgpLnJlYXNvbigpLnZpc2l0KHZpc2l0b3IpOwogfQogCit0ZW1w
bGF0ZSB2b2lkIEpTUHJvbWlzZVJlamVjdGlvbkV2ZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJl
bihKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNQcm9taXNlUmVq
ZWN0aW9uRXZlbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImKTsK
KwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNSZXNpemVPYnNlcnZlckN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNSZXNpemVPYnNlcnZlckN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjI5
NykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUmVzaXplT2JzZXJ2ZXJDdXN0b20u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCwxMSArMzAsMTYgQEAKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi12b2lkIEpTUmVzaXplT2JzZXJ2ZXI6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpT
Qzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3ZvaWQgSlNSZXNpemVPYnNlcnZlcjo6dmlzaXRB
ZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5
cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTUmVzaXplT2JzZXJ2ZXI6OnZpc2l0QWRkaXRpb25hbENo
aWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgUmVzaXplT2JzZXJ2ZXJDYWxsYmFjayog
Y2FsbGJhY2sgPSB3cmFwcGVkKCkuY2FsbGJhY2tDb25jdXJyZW50bHkoKTsKICAgICBpZiAoY2Fs
bGJhY2spCiAgICAgICAgIGNhbGxiYWNrLT52aXNpdEpTRnVuY3Rpb24odmlzaXRvcik7CiB9CiAK
LX0KK3RlbXBsYXRlIHZvaWQgSlNSZXNpemVPYnNlcnZlcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRy
ZW4oSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTUmVzaXplT2Jz
ZXJ2ZXI6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImKTsKKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNS
ZXNpemVPYnNlcnZlckVudHJ5Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU1Jlc2l6ZU9ic2VydmVyRW50cnlDdXN0b20uY3BwCShyZXZpc2lvbiAy
NzIyOTcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1Jlc2l6ZU9ic2VydmVyRW50
cnlDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCwxMCArMzAsMTUgQEAKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi12b2lkIEpTUmVzaXplT2JzZXJ2ZXJFbnRyeTo6dmlzaXRBZGRpdGlv
bmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vdm9pZCBKU1Jlc2l6ZU9i
c2VydmVyRW50cnk6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZp
c2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1Jlc2l6ZU9ic2VydmVy
RW50cnk6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAg
dmlzaXRvci5hZGRPcGFxdWVSb290KHJvb3Qod3JhcHBlZCgpLnRhcmdldCgpKSk7CiAgICAgdmlz
aXRvci5hZGRPcGFxdWVSb290KHdyYXBwZWQoKS5jb250ZW50UmVjdCgpKTsKIH0KIAotfQordGVt
cGxhdGUgdm9pZCBKU1Jlc2l6ZU9ic2VydmVyRW50cnk6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVu
KEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU1Jlc2l6ZU9ic2Vy
dmVyRW50cnk6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImKTsKKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNTVkdWaWV3U3BlY0N1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNTVkdWaWV3U3BlY0N1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjI5NykKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU1ZHVmlld1NwZWNDdXN0b20uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zMCwxMCArMzAsMTUgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lk
IEpTU1ZHVmlld1NwZWM6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3Im
IHZpc2l0b3IpCisvL3ZvaWQgSlNTVkdWaWV3U3BlYzo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4o
SlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2
b2lkIEpTU1ZHVmlld1NwZWM6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0
b3IpCiB7CiAgICAgQVNTRVJUKHdyYXBwZWQoKS5jb250ZXh0RWxlbWVudENvbmN1cnJlbnRseSgp
LmdldCgpKTsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qocm9vdCh3cmFwcGVkKCkuY29udGV4
dEVsZW1lbnRDb25jdXJyZW50bHkoKS5nZXQoKSkpOwogfQogCi19Cit0ZW1wbGF0ZSB2b2lkIEpT
U1ZHVmlld1NwZWM6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6QWJzdHJhY3RTbG90Vmlz
aXRvciYpOwordGVtcGxhdGUgdm9pZCBKU1NWR1ZpZXdTcGVjOjp2aXNpdEFkZGl0aW9uYWxDaGls
ZHJlbihKU0M6OlNsb3RWaXNpdG9yJik7CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU2VydmljZVdvcmtlckdsb2JhbFNjb3BlQ3Vz
dG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NlcnZp
Y2VXb3JrZXJHbG9iYWxTY29wZUN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU2VydmljZVdvcmtlckdsb2JhbFNjb3BlQ3VzdG9tLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzQsMTIgKzM0LDE3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAotdm9pZCBKU1NlcnZpY2VXb3JrZXJHbG9iYWxTY29w
ZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3ZvaWQg
SlNTZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGU6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNTZXJ2
aWNlV29ya2VyR2xvYmFsU2NvcGU6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZp
c2l0b3IpCiB7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KCZ3cmFwcGVkKCkuY2xpZW50cygp
KTsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QoJndyYXBwZWQoKS5yZWdpc3RyYXRpb24oKSk7
CiB9CiAKK3RlbXBsYXRlIHZvaWQgSlNTZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGU6OnZpc2l0QWRk
aXRpb25hbENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNT
ZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGU6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNp
dG9yJik7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU1N0YXRpY1JhbmdlQ3VzdG9tLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1N0YXRpY1JhbmdlQ3VzdG9tLmNwcAkocmV2
aXNpb24gMjcyMjk3KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNTdGF0aWNSYW5n
ZUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDkgKzMwLDE0IEBACiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotdm9pZCBKU1N0YXRpY1JhbmdlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJl
bihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy92b2lkIEpTU3RhdGljUmFuZ2U6OnZpc2l0
QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0
eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1N0YXRpY1JhbmdlOjp2aXNpdEFkZGl0aW9uYWxDaGls
ZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHdyYXBwZWQoKS52aXNpdE5vZGVzQ29uY3Vy
cmVudGx5KHZpc2l0b3IpOwogfQogCit0ZW1wbGF0ZSB2b2lkIEpTU3RhdGljUmFuZ2U6OnZpc2l0
QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUg
dm9pZCBKU1N0YXRpY1JhbmdlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNp
dG9yJik7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTU3R5bGVTaGVldEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNTdHlsZVNoZWV0Q3VzdG9tLmNwcAkocmV2aXNpb24gMjcyMjk3
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNTdHlsZVNoZWV0Q3VzdG9tLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzAsMTEgKzMwLDE2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAotdm9pZCBKU1N0eWxlU2hlZXQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZp
c2l0b3ImIHZpc2l0b3IpCisvL3ZvaWQgSlNTdHlsZVNoZWV0Ojp2aXNpdEFkZGl0aW9uYWxDaGls
ZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRv
cj4KK3ZvaWQgSlNTdHlsZVNoZWV0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2
aXNpdG9yKQogewogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChyb290KCZ3cmFwcGVkKCkpKTsK
IH0KIAordGVtcGxhdGUgdm9pZCBKU1N0eWxlU2hlZXQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVu
KEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNTdHlsZVNoZWV0Ojp2aXNp
dEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYpOworCiBKU0M6OkpTVmFsdWUgdG9KU05l
d2x5Q3JlYXRlZChKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNET01HbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgUmVmPFN0eWxlU2hlZXQ+JiYgc3R5bGVTaGVldCkKIHsKICAgICBpZiAoc3R5bGVT
aGVldC0+aXNDU1NTdHlsZVNoZWV0KCkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU1RleHRUcmFja0N1ZUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNUZXh0VHJhY2tDdWVDdXN0b20uY3BwCShyZXZpc2lvbiAyNzIyOTcpCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1RleHRUcmFja0N1ZUN1c3RvbS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5n
IG5hbWVzcGFjZSBKU0M7CiAKLWJvb2wgSlNUZXh0VHJhY2tDdWVPd25lcjo6aXNSZWFjaGFibGVG
cm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBT
bG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikKK2Jvb2wgSlNUZXh0VHJh
Y2tDdWVPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpV
bmtub3duPiBoYW5kbGUsIHZvaWQqLCBBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25z
dCBjaGFyKiogcmVhc29uKQogewogICAgIEpTVGV4dFRyYWNrQ3VlKiBqc1RleHRUcmFja0N1ZSA9
IGpzQ2FzdDxKU1RleHRUcmFja0N1ZSo+KGhhbmRsZS5zbG90KCktPmFzQ2VsbCgpKTsKICAgICBU
ZXh0VHJhY2tDdWUmIHRleHRUcmFja0N1ZSA9IGpzVGV4dFRyYWNrQ3VlLT53cmFwcGVkKCk7CkBA
IC04MiwxMiArODIsMTcgQEAgSlNWYWx1ZSB0b0pTKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xv
YgogICAgIHJldHVybiB3cmFwKGxleGljYWxHbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdCwgY3Vl
KTsKIH0KIAotdm9pZCBKU1RleHRUcmFja0N1ZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xv
dFZpc2l0b3ImIHZpc2l0b3IpCisvL3ZvaWQgSlNUZXh0VHJhY2tDdWU6OnZpc2l0QWRkaXRpb25h
bENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRv
cj4KK3ZvaWQgSlNUZXh0VHJhY2tDdWU6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3Im
IHZpc2l0b3IpCiB7CiAgICAgaWYgKFRleHRUcmFjayogdGV4dFRyYWNrID0gd3JhcHBlZCgpLnRy
YWNrKCkpCiAgICAgICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChyb290KHRleHRUcmFjaykpOwog
fQogCit0ZW1wbGF0ZSB2b2lkIEpTVGV4dFRyYWNrQ3VlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJl
bihBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTVGV4dFRyYWNrQ3VlOjp2
aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYpOworCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCiAKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNUZXh0
VHJhY2tDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTVGV4dFRyYWNrQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcyMjk3KQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNUZXh0VHJhY2tDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
NiwxMSArMzYsMTYgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBKU0M7
CiAKLXZvaWQgSlNUZXh0VHJhY2s6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9y
JiB2aXNpdG9yKQorLy92b2lkIEpTVGV4dFRyYWNrOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihT
bG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpT
VGV4dFRyYWNrOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewog
ICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChyb290KCZ3cmFwcGVkKCkpKTsKIH0KIAordGVtcGxh
dGUgdm9pZCBKU1RleHRUcmFjazo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oQWJzdHJhY3RTbG90
VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU1RleHRUcmFjazo6dmlzaXRBZGRpdGlvbmFsQ2hp
bGRyZW4oU2xvdFZpc2l0b3ImKTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVGV4dFRyYWNrTGlzdEN1c3RvbS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNUZXh0VHJhY2tM
aXN0Q3VzdG9tLmNwcAkocmV2aXNpb24gMjcyMjk3KQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNUZXh0VHJhY2tMaXN0Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsMTEg
KzM2LDE2IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCi12
b2lkIEpTVGV4dFRyYWNrTGlzdDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90Vmlz
aXRvciYgdmlzaXRvcikKKy8vdm9pZCBKU1RleHRUcmFja0xpc3Q6OnZpc2l0QWRkaXRpb25hbENo
aWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNp
dG9yPgordm9pZCBKU1RleHRUcmFja0xpc3Q6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0
b3ImIHZpc2l0b3IpCiB7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHJvb3Qod3JhcHBlZCgp
LmVsZW1lbnQoKSkpOwogfQogICAgIAordGVtcGxhdGUgdm9pZCBKU1RleHRUcmFja0xpc3Q6OnZp
c2l0QWRkaXRpb25hbENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZv
aWQgSlNUZXh0VHJhY2tMaXN0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYp
OworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNUcmVlV2Fsa2VyQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1RyZWVXYWxrZXJDdXN0b20uY3BwCShyZXZpc2lvbiAy
NzIyOTcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1RyZWVXYWxrZXJDdXN0b20u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNSwxMCArMjUsMTUgQEAKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi12b2lkIEpTVHJlZVdhbGtlcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpT
bG90VmlzaXRvciYgdmlzaXRvcikKKy8vdm9pZCBKU1RyZWVXYWxrZXI6OnZpc2l0QWRkaXRpb25h
bENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPgordm9pZCBKU1RyZWVXYWxrZXI6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0
b3ImIHZpc2l0b3IpCiB7CiAgICAgaWYgKE5vZGVGaWx0ZXIqIGZpbHRlciA9IHdyYXBwZWQoKS5m
aWx0ZXIoKSkKICAgICAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KGZpbHRlcik7CiB9CiAKLX0K
K3RlbXBsYXRlIHZvaWQgSlNUcmVlV2Fsa2VyOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6
OkFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNUcmVlV2Fsa2VyOjp2aXNp
dEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJik7CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVW5kb0l0ZW1DdXN0
b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVW5kb0l0
ZW1DdXN0b20uY3BwCShyZXZpc2lvbiAyNzIyOTcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU1VuZG9JdGVtQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksMTMgKzI5LDE4
IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBKU1VuZG9JdGVtOjp2aXNpdEFkZGl0
aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy92b2lkIEpTVW5kb0l0
ZW06OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0
ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1VuZG9JdGVtOjp2aXNpdEFkZGl0aW9u
YWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHdyYXBwZWQoKS51bmRvSGFuZGxl
cigpLnZpc2l0SlNGdW5jdGlvbih2aXNpdG9yKTsKICAgICB3cmFwcGVkKCkucmVkb0hhbmRsZXIo
KS52aXNpdEpTRnVuY3Rpb24odmlzaXRvcik7CiB9CiAKLWJvb2wgSlNVbmRvSXRlbU93bmVyOjpp
c1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRs
ZSwgdm9pZCosIEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24p
Cit0ZW1wbGF0ZSB2b2lkIEpTVW5kb0l0ZW06OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6
QWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU1VuZG9JdGVtOjp2aXNpdEFk
ZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJik7CisKK2Jvb2wgSlNVbmRvSXRlbU93
bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+
IGhhbmRsZSwgdm9pZCosIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3Qg
Y2hhcioqIHJlYXNvbikKIHsKICAgICBpZiAoVU5MSUtFTFkocmVhc29uKSkKICAgICAgICAgKnJl
YXNvbiA9ICJEb2N1bWVudCBpcyBhbiBvcGFxdWUgcm9vdC4iOwpJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNWYWx1ZUluV3JhcHBlZE9iamVjdC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVmFsdWVJbldyYXBwZWRPYmplY3QuaAkocmV2aXNp
b24gMjcyMjk3KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNWYWx1ZUluV3JhcHBl
ZE9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw4IEBAIHB1YmxpYzoKICAgICBv
cGVyYXRvciBKU0M6OkpTVmFsdWUoKSBjb25zdDsKICAgICBleHBsaWNpdCBvcGVyYXRvciBib29s
KCkgY29uc3Q7CiAgICAgSlNWYWx1ZUluV3JhcHBlZE9iamVjdCYgb3BlcmF0b3I9KGNvbnN0IEpT
VmFsdWVJbldyYXBwZWRPYmplY3QmIG90aGVyKTsKLSAgICB2b2lkIHZpc2l0KEpTQzo6U2xvdFZp
c2l0b3ImKSBjb25zdDsKKy8vICAgIHZvaWQgdmlzaXQoSlNDOjpTbG90VmlzaXRvciYpIGNvbnN0
OworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgdmlzaXQoVmlzaXRvciYpIGNv
bnN0OwogICAgIHZvaWQgY2xlYXIoKTsKIAogcHJpdmF0ZToKQEAgLTk4LDcgKzk5LDggQEAgaW5s
aW5lIEpTVmFsdWVJbldyYXBwZWRPYmplY3QmIEpTVmFsdWVJbgogICAgIHJldHVybiAqdGhpczsK
IH0KIAotaW5saW5lIHZvaWQgSlNWYWx1ZUluV3JhcHBlZE9iamVjdDo6dmlzaXQoSlNDOjpTbG90
VmlzaXRvciYgdmlzaXRvcikgY29uc3QKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Citpbmxp
bmUgdm9pZCBKU1ZhbHVlSW5XcmFwcGVkT2JqZWN0Ojp2aXNpdChWaXNpdG9yJiB2aXNpdG9yKSBj
b25zdAogewogICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKG1fdmFsdWUsIFtdIChKU0M6OkpTVmFs
dWUpIHsKICAgICAgICAgLy8gTm90aGluZyB0byB2aXNpdC4KQEAgLTEwNyw2ICsxMDksOSBAQCBp
bmxpbmUgdm9pZCBKU1ZhbHVlSW5XcmFwcGVkT2JqZWN0Ojp2aXNpCiAgICAgfSk7CiB9CiAKK3Rl
bXBsYXRlIHZvaWQgSlNWYWx1ZUluV3JhcHBlZE9iamVjdDo6dmlzaXQoSlNDOjpBYnN0cmFjdFNs
b3RWaXNpdG9yJikgY29uc3Q7Cit0ZW1wbGF0ZSB2b2lkIEpTVmFsdWVJbldyYXBwZWRPYmplY3Q6
OnZpc2l0KEpTQzo6U2xvdFZpc2l0b3ImKSBjb25zdDsKKwogaW5saW5lIHZvaWQgSlNWYWx1ZUlu
V3JhcHBlZE9iamVjdDo6Y2xlYXIoKQogewogICAgIFdURjo6c3dpdGNoT24obV92YWx1ZSwgW10g
KFdlYWsmIHZhbHVlKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1ZpZGVv
VHJhY2tDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTVmlkZW9UcmFja0N1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTVmlkZW9UcmFja0N1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM1LDExICszNSwxNiBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogdXNpbmcgbmFtZXNwYWNlIEpT
QzsKIAotdm9pZCBKU1ZpZGVvVHJhY2s6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNp
dG9yJiB2aXNpdG9yKQorLy92b2lkIEpTVmlkZW9UcmFjazo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRy
ZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9p
ZCBKU1ZpZGVvVHJhY2s6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3Ip
CiB7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHJvb3QoJndyYXBwZWQoKSkpOwogfQogCit0
ZW1wbGF0ZSB2b2lkIEpTVmlkZW9UcmFjazo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpB
YnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTVmlkZW9UcmFjazo6dmlzaXRB
ZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYpOworCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCiAKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNWaWRl
b1RyYWNrTGlzdEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNWaWRlb1RyYWNrTGlzdEN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjI5NykKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVmlkZW9UcmFja0xpc3RDdXN0b20uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNSwxMSArMzUsMTYgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5n
IG5hbWVzcGFjZSBKU0M7CiAKLXZvaWQgSlNWaWRlb1RyYWNrTGlzdDo6dmlzaXRBZGRpdGlvbmFs
Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3ZvaWQgSlNWaWRlb1RyYWNrTGlzdDo6
dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0
eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1ZpZGVvVHJhY2tMaXN0Ojp2aXNpdEFkZGl0aW9uYWxD
aGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChy
b290KHdyYXBwZWQoKS5lbGVtZW50KCkpKTsKIH0KIAordGVtcGxhdGUgdm9pZCBKU1ZpZGVvVHJh
Y2tMaXN0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0
ZW1wbGF0ZSB2b2lkIEpTVmlkZW9UcmFja0xpc3Q6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNs
b3RWaXNpdG9yJik7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYkdMMlJlbmRlcmluZ0NvbnRleHRDdXN0b20u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViR0wyUmVu
ZGVyaW5nQ29udGV4dEN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTV2ViR0wyUmVuZGVyaW5nQ29udGV4dEN1c3RvbS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTMzLDEyICszMywxNyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogdXNpbmcg
bmFtZXNwYWNlIEpTQzsKIAotdm9pZCBKU1dlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OnZpc2l0QWRk
aXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy92b2lkIEpTV2ViR0wyUmVu
ZGVyaW5nQ29udGV4dDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0
b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1dlYkdMMlJlbmRlcmluZ0Nv
bnRleHQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAg
dmlzaXRvci5hZGRPcGFxdWVSb290KCZ3cmFwcGVkKCkpOwogICAgIHdyYXBwZWQoKS5hZGRNZW1i
ZXJzVG9PcGFxdWVSb290cyh2aXNpdG9yKTsKIH0KIAordGVtcGxhdGUgdm9pZCBKU1dlYkdMMlJl
bmRlcmluZ0NvbnRleHQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6QWJzdHJhY3RTbG90
VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU1dlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OnZpc2l0
QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImKTsKKwogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQkdMKQpJbmRleDogU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRDdXN0b20uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViR0xSZW5kZXJpbmdDb250ZXh0Q3Vz
dG9tLmNwcAkocmV2aXNpb24gMjcyMjk3KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNXZWJHTFJlbmRlcmluZ0NvbnRleHRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMywx
MiArMzMsMTcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAK
LXZvaWQgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQorLy92b2lkIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2aXNp
dEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVu
YW1lIFZpc2l0b3I+Cit2b2lkIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2aXNpdEFkZGl0aW9u
YWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9v
dCgmd3JhcHBlZCgpKTsKICAgICB3cmFwcGVkKCkuYWRkTWVtYmVyc1RvT3BhcXVlUm9vdHModmlz
aXRvcik7CiB9CiAKK3RlbXBsYXRlIHZvaWQgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZpc2l0
QWRkaXRpb25hbENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQg
SlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNp
dG9yJik7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShXRUJH
TCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyR2xvYmFsU2NvcGVC
YXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtl
ckdsb2JhbFNjb3BlQmFzZS5jcHAJKHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTV29ya2VyR2xvYmFsU2NvcGVCYXNlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtOTIsNyArOTIsOCBAQCB2b2lkIEpTV29ya2VyR2xvYmFsU2NvcGVCYXNlOjpmaW5pc2hDcmVh
CiAgICAgQVNTRVJUKGluaGVyaXRzKHZtLCBpbmZvKCkpKTsKIH0KIAotdm9pZCBKU1dvcmtlckds
b2JhbFNjb3BlQmFzZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNXb3JrZXJHbG9iYWxT
Y29wZUJhc2U6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRv
cikKIHsKICAgICBKU1dvcmtlckdsb2JhbFNjb3BlQmFzZSogdGhpc09iamVjdCA9IGpzQ2FzdDxK
U1dvcmtlckdsb2JhbFNjb3BlQmFzZSo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5I
RVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTEwMCw2ICsxMDEsOCBAQCB2b2lkIEpTV29y
a2VyR2xvYmFsU2NvcGVCYXNlOjp2aXNpdENoaWxkCiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09i
amVjdC0+bV9wcm94eSk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU1dvcmtlckdsb2Jh
bFNjb3BlQmFzZSk7CisKIHZvaWQgSlNXb3JrZXJHbG9iYWxTY29wZUJhc2U6OmRlc3Ryb3koSlND
ZWxsKiBjZWxsKQogewogICAgIHN0YXRpY19jYXN0PEpTV29ya2VyR2xvYmFsU2NvcGVCYXNlKj4o
Y2VsbCktPkpTV29ya2VyR2xvYmFsU2NvcGVCYXNlOjp+SlNXb3JrZXJHbG9iYWxTY29wZUJhc2Uo
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyR2xvYmFsU2NvcGVC
YXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrZXJH
bG9iYWxTY29wZUJhc2UuaAkocmV2aXNpb24gMjcyMjk3KQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNXb3JrZXJHbG9iYWxTY29wZUJhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtNzks
NyArNzksNyBAQCBwcm90ZWN0ZWQ6CiAgICAgSlNXb3JrZXJHbG9iYWxTY29wZUJhc2UoSlNDOjpW
TSYsIEpTQzo6U3RydWN0dXJlKiwgUmVmUHRyPFdvcmtlckdsb2JhbFNjb3BlPiYmKTsKICAgICB2
b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mLCBKU0M6OkpTUHJveHkqKTsKIAotICAgIHN0YXRp
YyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJik7Cisg
ICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogcHJpdmF0ZToKICAgICBSZWZQdHI8V29ya2Vy
R2xvYmFsU2NvcGU+IG1fd3JhcHBlZDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTV29ya2VyR2xvYmFsU2NvcGVDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyR2xvYmFsU2NvcGVDdXN0b20uY3BwCShyZXZpc2lvbiAy
NzIyOTcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckdsb2JhbFNjb3Bl
Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNyArMzMsOSBAQAogbmFtZXNwYWNlIFdl
YkNvcmUgewogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAotdm9pZCBKU1dvcmtlckdsb2JhbFNjb3Bl
Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vdm9pZCBK
U1dvcmtlckdsb2JhbFNjb3BlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYg
dmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTV29ya2VyR2xvYmFs
U2NvcGU6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAg
aWYgKGF1dG8qIGxvY2F0aW9uID0gd3JhcHBlZCgpLm9wdGlvbmFsTG9jYXRpb24oKSkKICAgICAg
ICAgdmlzaXRvci5hZGRPcGFxdWVSb290KGxvY2F0aW9uKTsKQEAgLTQ4LDYgKzUwLDkgQEAgdm9p
ZCBKU1dvcmtlckdsb2JhbFNjb3BlOjp2aXNpdEFkZGl0aW9uYQogICAgIHdyYXBwZWQoKS52aXNp
dEpTRXZlbnRMaXN0ZW5lcnModmlzaXRvcik7CiB9CiAKK3RlbXBsYXRlIHZvaWQgSlNXb3JrZXJH
bG9iYWxTY29wZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oQWJzdHJhY3RTbG90VmlzaXRvciYp
OwordGVtcGxhdGUgdm9pZCBKU1dvcmtlckdsb2JhbFNjb3BlOjp2aXNpdEFkZGl0aW9uYWxDaGls
ZHJlbihTbG90VmlzaXRvciYpOworCiBKU1ZhbHVlIEpTV29ya2VyR2xvYmFsU2NvcGU6OnF1ZXVl
TWljcm90YXNrKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUm
IGNhbGxGcmFtZSkKIHsKICAgICBWTSYgdm0gPSBsZXhpY2FsR2xvYmFsT2JqZWN0LnZtKCk7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlck5hdmlnYXRvckN1c3RvbS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrZXJOYXZp
Z2F0b3JDdXN0b20uY3BwCShyZXZpc2lvbiAyNzIyOTcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU1dvcmtlck5hdmlnYXRvckN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4
LDkgKzI4LDE0IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBKU1dvcmtlck5hdmln
YXRvcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikK
Ky8vdm9pZCBKU1dvcmtlck5hdmlnYXRvcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpT
bG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpT
V29ya2VyTmF2aWdhdG9yOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9y
KQogewogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChzdGF0aWNfY2FzdDxOYXZpZ2F0b3JCYXNl
Kj4oJndyYXBwZWQoKSkpOwogfQogCi19Cit0ZW1wbGF0ZSB2b2lkIEpTV29ya2VyTmF2aWdhdG9y
Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3Rl
bXBsYXRlIHZvaWQgSlNXb3JrZXJOYXZpZ2F0b3I6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpT
Qzo6U2xvdFZpc2l0b3ImKTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrbGV0R2xvYmFsU2NvcGVCYXNlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtsZXRHbG9iYWxTY29wZUJh
c2UuY3BwCShyZXZpc2lvbiAyNzIyOTcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U1dvcmtsZXRHbG9iYWxTY29wZUJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Miw3ICs4Miw4
IEBAIHZvaWQgSlNXb3JrbGV0R2xvYmFsU2NvcGVCYXNlOjpmaW5pc2hDcmUKICAgICBBU1NFUlQo
aW5oZXJpdHModm0sIGluZm8oKSkpOwogfQogCi12b2lkIEpTV29ya2xldEdsb2JhbFNjb3BlQmFz
ZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVt
cGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNXb3JrbGV0R2xvYmFsU2NvcGVCYXNlOjp2
aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAg
YXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1dvcmtsZXRHbG9iYWxTY29wZUJhc2UqPihjZWxs
KTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBA
IC05MCw2ICs5MSw4IEBAIHZvaWQgSlNXb3JrbGV0R2xvYmFsU2NvcGVCYXNlOjp2aXNpdENoaWwK
ICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX3Byb3h5KTsKIH0KIAorREVGSU5FX1ZJ
U0lUX0NISUxEUkVOKEpTV29ya2xldEdsb2JhbFNjb3BlQmFzZSk7CisKIHZvaWQgSlNXb3JrbGV0
R2xvYmFsU2NvcGVCYXNlOjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKIHsKICAgICBzdGF0aWNfY2Fz
dDxKU1dvcmtsZXRHbG9iYWxTY29wZUJhc2UqPihjZWxsKS0+SlNXb3JrbGV0R2xvYmFsU2NvcGVC
YXNlOjp+SlNXb3JrbGV0R2xvYmFsU2NvcGVCYXNlKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU1dvcmtsZXRHbG9iYWxTY29wZUJhc2UuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtsZXRHbG9iYWxTY29wZUJhc2UuaAkocmV2aXNp
b24gMjcyMjk3KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrbGV0R2xvYmFs
U2NvcGVCYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTY3LDcgKzY3LDcgQEAgcHJvdGVjdGVkOgog
ICAgIEpTV29ya2xldEdsb2JhbFNjb3BlQmFzZShKU0M6OlZNJiwgSlNDOjpTdHJ1Y3R1cmUqLCBS
ZWZQdHI8V29ya2xldEdsb2JhbFNjb3BlPiYmKTsKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpT
Qzo6Vk0mLCBKU0M6OkpTUHJveHkqKTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4o
SlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElM
RFJFTjsKIAogcHJpdmF0ZToKICAgICBSZWZQdHI8V29ya2xldEdsb2JhbFNjb3BlPiBtX3dyYXBw
ZWQ7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1hNTEh0dHBSZXF1ZXN0Q3Vz
dG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1hNTEh0
dHBSZXF1ZXN0Q3VzdG9tLmNwcAkocmV2aXNpb24gMjcyMjk3KQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNYTUxIdHRwUmVxdWVzdEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQxLDcgKzQxLDkgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBKU0M7
CiAKLXZvaWQgSlNYTUxIdHRwUmVxdWVzdDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZp
c2l0b3ImIHZpc2l0b3IpCisvL3ZvaWQgSlNYTUxIdHRwUmVxdWVzdDo6dmlzaXRBZGRpdGlvbmFs
Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
Pgordm9pZCBKU1hNTEh0dHBSZXF1ZXN0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9y
JiB2aXNpdG9yKQogewogICAgIGlmIChhdXRvKiB1cGxvYWQgPSB3cmFwcGVkKCkub3B0aW9uYWxV
cGxvYWQoKSkKICAgICAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHVwbG9hZCk7CkBAIC01MCw2
ICs1Miw5IEBAIHZvaWQgSlNYTUxIdHRwUmVxdWVzdDo6dmlzaXRBZGRpdGlvbmFsQ2gKICAgICAg
ICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHJlc3BvbnNlRG9jdW1lbnQpOwogfQogCit0ZW1wbGF0
ZSB2b2lkIEpTWE1MSHR0cFJlcXVlc3Q6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEFic3RyYWN0
U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNYTUxIdHRwUmVxdWVzdDo6dmlzaXRBZGRp
dGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKKwogSlNWYWx1ZSBKU1hNTEh0dHBSZXF1ZXN0
OjpyZXNwb25zZShKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCkgY29uc3QKIHsK
ICAgICBhdXRvIGNhY2hlUmVzdWx0ID0gWyZdIChKU1ZhbHVlIHZhbHVlKSAtPiBKU1ZhbHVlIHsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTWFBhdGhSZXN1bHRDdXN0b20uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTWFBhdGhSZXN1bHRD
dXN0b20uY3BwCShyZXZpc2lvbiAyNzIyOTcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU1hQYXRoUmVzdWx0Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsOSBA
QAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgSlNYUGF0aFJlc3VsdDo6dmlzaXRBZGRp
dGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vdm9pZCBKU1hQYXRo
UmVzdWx0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9y
KQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNYUGF0aFJlc3VsdDo6dmlzaXRB
ZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBhdXRvJiB2YWx1ZSA9
IHdyYXBwZWQoKS52YWx1ZSgpOwogICAgIGlmICh2YWx1ZS5pc05vZGVTZXQoKSkgewpAQCAtNDEs
NCArNDMsNyBAQCB2b2lkIEpTWFBhdGhSZXN1bHQ6OnZpc2l0QWRkaXRpb25hbENoaWxkCiAgICAg
fQogfQogCit0ZW1wbGF0ZSB2b2lkIEpTWFBhdGhSZXN1bHQ6OnZpc2l0QWRkaXRpb25hbENoaWxk
cmVuKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU1hQYXRoUmVz
dWx0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJik7CisKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dlYkNv
cmVUeXBlZEFycmF5Q29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvV2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyLmNwcAkocmV2aXNpb24gMjcy
Mjk3KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV2ViQ29yZVR5cGVkQXJyYXlDb250
cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTYsNyArNTYsNyBAQCBib29sIFdlYkNvcmVU
eXBlZEFycmF5Q29udHJvbGxlcjo6aXNBdG9tCiAgICAgcmV0dXJuIG1fYWxsb3dBdG9taWNzV2Fp
dDsKIH0KIAotYm9vbCBXZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXI6OkpTQXJyYXlCdWZmZXJP
d25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3du
PiBoYW5kbGUsIHZvaWQqLCBKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiog
cmVhc29uKQorYm9vbCBXZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXI6OkpTQXJyYXlCdWZmZXJP
d25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3du
PiBoYW5kbGUsIHZvaWQqLCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0
IGNoYXIqKiByZWFzb24pCiB7CiAgICAgaWYgKFVOTElLRUxZKHJlYXNvbikpCiAgICAgICAgICpy
ZWFzb24gPSAiQXJyYXlCdWZmZXIgaXMgb3BhcXVlIHJvb3QiOwpJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvV2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVy
LmgJKHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dlYkNv
cmVUeXBlZEFycmF5Q29udHJvbGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCw3ICs0OCw3IEBA
IHB1YmxpYzoKIHByaXZhdGU6CiAgICAgY2xhc3MgSlNBcnJheUJ1ZmZlck93bmVyIDogcHVibGlj
IEpTQzo6V2Vha0hhbmRsZU93bmVyIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIGJvb2wgaXNSZWFj
aGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29u
dGV4dCwgSlNDOjpTbG90VmlzaXRvciYsIGNvbnN0IGNoYXIqKikgb3ZlcnJpZGU7CisgICAgICAg
IGJvb2wgaXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3du
Piwgdm9pZCogY29udGV4dCwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiwgY29uc3QgY2hhcioq
KSBvdmVycmlkZTsKICAgICAgICAgdm9pZCBmaW5hbGl6ZShKU0M6OkhhbmRsZTxKU0M6OlVua25v
d24+LCB2b2lkKiBjb250ZXh0KSBvdmVycmlkZTsKICAgICB9OwogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQkocmV2aXNp
b24gMjcyMjk3KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJh
dG9ySlMucG0JKHdvcmtpbmcgY29weSkKQEAgLTMwNzgsOCArMzA3OCwxMCBAQCBzdWIgR2VuZXJh
dGVIZWFkZXIKIAogICAgICMgdmlzaXQgZnVuY3Rpb24KICAgICBpZiAoJG5lZWRzVmlzaXRDaGls
ZHJlbikgewotICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHN0YXRpYyB2b2lkIHZp
c2l0Q2hpbGRyZW4oSlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpO1xuIik7Ci0gICAgICAgIHB1
c2goQGhlYWRlckNvbnRlbnQsICIgICAgdm9pZCB2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6
OlNsb3RWaXNpdG9yJik7XG4iKSBpZiAkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntK
U0N1c3RvbU1hcmtGdW5jdGlvbn07CisgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAg
REVDTEFSRV9WSVNJVF9DSElMRFJFTjtcbiIpOworIyAgICAgICAgcHVzaChAaGVhZGVyQ29udGVu
dCwgIiAgICB2b2lkIHZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImKTtc
biIpIGlmICRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+e0pTQ3VzdG9tTWFya0Z1bmN0
aW9ufTsgIyBtbGFtCisjICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHZvaWQgdmlz
aXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJik7XG4iKSBpZiAk
aW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntKU0N1c3RvbU1hcmtGdW5jdGlvbn07Cisg
ICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRv
cj4gdm9pZCB2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJik7XG4iKSBpZiAkaW50ZXJm
YWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntKU0N1c3RvbU1hcmtGdW5jdGlvbn07CiAgICAgICAg
IHB1c2goQGhlYWRlckNvbnRlbnQsICJcbiIpOwogCiAgICAgICAgIGlmICgkaW50ZXJmYWNlLT5l
eHRlbmRlZEF0dHJpYnV0ZXMtPntKU0N1c3RvbU1hcmtGdW5jdGlvbn0pIHsKQEAgLTMwOTQsNyAr
MzA5Niw5IEBAIHN1YiBHZW5lcmF0ZUhlYWRlcgogICAgICAgICAgICAgIyB0aGF0IHRoZSBHQyBj
YWxscyB0byBhc2sgYW4gb2JqZWN0IGlzIGl0IHdvdWxkIGxpa2UgdG8gbWFyayBhbnl0aGluZyBl
bHNlIGFmdGVyIHRoZQogICAgICAgICAgICAgIyBwcm9ncmFtIHJlc3VtZWQgc2luY2UgdGhlIGxh
c3QgY2FsbCB0byB2aXNpdENoaWxkcmVuIG9yIHZpc2l0T3V0cHV0Q29uc3RyYWludHMuIFNpbmNl
CiAgICAgICAgICAgICAjIHRoaXMganVzdCBjYWxscyB2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbiwg
eW91IHVzdWFsbHkgZG9uJ3QgaGF2ZSB0byB3b3JyeSBhYm91dCB0aGlzLgotICAgICAgICAgICAg
cHVzaChAaGVhZGVyQ29udGVudCwgIiAgICBzdGF0aWMgdm9pZCB2aXNpdE91dHB1dENvbnN0cmFp
bnRzKEpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKTtcbiIpOworICAgICAgICAgICAgIyBtbGFt
IHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgc3RhdGljIHZvaWQgdmlzaXRPdXRwdXRDb25zdHJh
aW50cyhKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJik7XG4iKTsKKyAgICAgICAgICAgIHB1c2go
QGhlYWRlckNvbnRlbnQsICIgICAgc3RhdGljIHZvaWQgdmlzaXRPdXRwdXRDb25zdHJhaW50cyhK
U0NlbGwqLCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKTtcbiIpOworICAgICAgICAgICAgIyBt
bGFtIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgREVDTEFSRV9WSVNJVF9PVVRQVVRfQ09OU1RS
QUlOVFM7XG4iKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMzIxNSw3ICszMjE5LDcgQEAgc3Vi
IEdlbmVyYXRlSGVhZGVyCiAgICAgICAgIH0KICAgICAgICAgJGhlYWRlckluY2x1ZGVzeyI8d3Rm
L05ldmVyRGVzdHJveWVkLmg+In0gPSAxOwogICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAi
cHVibGljOlxuIik7Ci0gICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgYm9vbCBpc1Jl
YWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBj
b250ZXh0LCBKU0M6OlNsb3RWaXNpdG9yJiwgY29uc3QgY2hhcioqKSAke292ZXJyaWRlRGVjbH07
XG4iKTsKKyAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICBib29sIGlzUmVhY2hhYmxl
RnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQs
IEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYsIGNvbnN0IGNoYXIqKikgJHtvdmVycmlkZURlY2x9
O1xuIik7CiAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgdm9pZCBmaW5hbGl6ZShK
U0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0KSAke292ZXJyaWRlRGVjbH07
XG4iKTsKICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIn07XG4iKTsKICAgICAgICAgcHVz
aChAaGVhZGVyQ29udGVudCwgIlxuIik7CkBAIC00OTM5LDYgKzQ5NDMsNyBAQCBzdWIgR2VuZXJh
dGVJbXBsZW1lbnRhdGlvbgogICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJET01Jc29TdWJzcGFjZXMu
aCIpOwogICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJXZWJDb3JlSlNDbGllbnREYXRhLmgiKTsKICAg
ICBBZGRUb0ltcGxJbmNsdWRlcygiPEphdmFTY3JpcHRDb3JlL0pTRGVzdHJ1Y3RpYmxlT2JqZWN0
SGVhcENlbGxUeXBlLmg+Iik7CisgICAgQWRkVG9JbXBsSW5jbHVkZXMoIjxKYXZhU2NyaXB0Q29y
ZS9TbG90VmlzaXRvck1hY3Jvcy5oPiIpOwogICAgIEFkZFRvSW1wbEluY2x1ZGVzKCI8SmF2YVNj
cmlwdENvcmUvU3Vic3BhY2VJbmxpbmVzLmg+Iik7CiAgICAgcHVzaChAaW1wbENvbnRlbnQsICJK
U0M6Oklzb1N1YnNwYWNlKiAke2NsYXNzTmFtZX06OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2
bSlcbiIpOwogICAgIHB1c2goQGltcGxDb250ZW50LCAie1xuIik7CkBAIC00OTY2LDcgKzQ5NzEs
OCBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgIHB1c2goQGltcGxDb250ZW50LCAi
fVxuXG4iKTsKIAogICAgIGlmICgkbmVlZHNWaXNpdENoaWxkcmVuKSB7Ci0gICAgICAgIHB1c2go
QGltcGxDb250ZW50LCAidm9pZCAke2NsYXNzTmFtZX06OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBj
ZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcilcbiIpOworICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgInRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+XG4iKTsKKyAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsICJ2b2lkICR7Y2xhc3NOYW1lfTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxs
LCBWaXNpdG9yJiB2aXNpdG9yKVxuIik7CiAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAie1xu
Iik7CiAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGF1dG8qIHRoaXNPYmplY3QgPSBq
c0Nhc3Q8JHtjbGFzc05hbWV9Kj4oY2VsbCk7XG4iKTsKICAgICAgICAgcHVzaChAaW1wbENvbnRl
bnQsICIgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpO1xu
Iik7CkBAIC00OTkxLDggKzQ5OTcsMTAgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAg
ICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIn1cblxu
Iik7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiREVGSU5FX1ZJU0lUX0NISUxEUkVOKCR7
Y2xhc3NOYW1lfSk7XG5cbiIpOworCiAgICAgICAgIGlmICgkaW50ZXJmYWNlLT5leHRlbmRlZEF0
dHJpYnV0ZXMtPntKU0N1c3RvbU1hcmtGdW5jdGlvbn0pIHsKLSAgICAgICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAidm9pZCAke2NsYXNzTmFtZX06OnZpc2l0T3V0cHV0Q29uc3RyYWludHMoSlND
ZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcilcbiIpOworICAgICAgICAgICAgcHVzaChA
aW1wbENvbnRlbnQsICJ2b2lkICR7Y2xhc3NOYW1lfTo6dmlzaXRPdXRwdXRDb25zdHJhaW50cyhK
U0NlbGwqIGNlbGwsIEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpXG4iKTsKICAgICAgICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAie1xuIik7CiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudCwgIiAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PCR7Y2xhc3NOYW1lfSo+KGNlbGwp
O1xuIik7CiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBBU1NFUlRfR0NfT0JK
RUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7XG4iKTsKQEAgLTUwMzMsNyArNTA0MSw3
IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgfQogCiAgICAgaWYgKFNob3VsZEdl
bmVyYXRlV3JhcHBlck93bmVyQ29kZSgkaGFzUGFyZW50LCAkaW50ZXJmYWNlKSAmJiAhR2V0Q3Vz
dG9tSXNSZWFjaGFibGUoJGludGVyZmFjZSkpIHsKLSAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICJib29sIEpTJHtpbnRlcmZhY2VOYW1lfU93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290
cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIFNsb3RWaXNpdG9yJiB2
aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKVxuIik7CisgICAgICAgIHB1c2goQGltcGxDb250
ZW50LCAiYm9vbCBKUyR7aW50ZXJmYWNlTmFtZX1Pd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVl
Um9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBBYnN0cmFjdFNs
b3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKVxuIik7CiAgICAgICAgIHB1
c2goQGltcGxDb250ZW50LCAie1xuIik7CiAgICAgICAgICMgQWxsIEFjdGl2ZURPTU9iamVjdHMg
aW1wbGVtZW50IGhhc1BlbmRpbmdBY3Rpdml0eSgpLCBidXQgbm90IGFsbCBvZiB0aGVtCiAgICAg
ICAgICMgaW5jcmVtZW50IHRoZWlyIEMrKyByZWZlcmVuY2UgY291bnRzIHdoZW4gaGFzUGVuZGlu
Z0FjdGl2aXR5KCkgYmVjb21lcwpAQCAtNjQzMiw3ICs2NDQwLDggQEAgc3ViIEdlbmVyYXRlQ2Fs
bGJhY2tIZWFkZXJDb250ZW50CiAgICAgICAgIHB1c2goQCRjb250ZW50UmVmLCAiICAgIGJvb2wg
aGFzQ2FsbGJhY2soKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2RhdGEgJiYgbV9kYXRhLT5jYWxs
YmFjaygpOyB9XG5cbiIpOwogICAgIH0KIAotICAgIHB1c2goQCRjb250ZW50UmVmLCAiICAgIHZv
aWQgdmlzaXRKU0Z1bmN0aW9uKEpTQzo6U2xvdFZpc2l0b3ImKSBvdmVycmlkZTtcblxuIikgaWYg
JGludGVyZmFjZU9yQ2FsbGJhY2stPmV4dGVuZGVkQXR0cmlidXRlcy0+e0lzV2Vha0NhbGxiYWNr
fTsKKyMgICAgcHVzaChAJGNvbnRlbnRSZWYsICIgICAgdm9pZCB2aXNpdEpTRnVuY3Rpb24oSlND
OjpTbG90VmlzaXRvciYpIG92ZXJyaWRlO1xuXG4iKSBpZiAkaW50ZXJmYWNlT3JDYWxsYmFjay0+
ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57SXNXZWFrQ2FsbGJhY2t9OworICAgIHB1c2goQCRjb250ZW50
UmVmLCAiICAgIHZvaWQgdmlzaXRKU0Z1bmN0aW9uKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYp
IG92ZXJyaWRlO1xuXG4iKSBpZiAkaW50ZXJmYWNlT3JDYWxsYmFjay0+ZXh0ZW5kZWRBdHRyaWJ1
dGVzLT57SXNXZWFrQ2FsbGJhY2t9OwogCiAgICAgcHVzaChAJGNvbnRlbnRSZWYsICIgICAgJHtj
YWxsYmFja0RhdGFUeXBlfSogbV9kYXRhO1xuIik7CiAgICAgcHVzaChAJGNvbnRlbnRSZWYsICJ9
O1xuXG4iKTsKQEAgLTY2MjMsNyArNjYzMiw4IEBAIHN1YiBHZW5lcmF0ZUNhbGxiYWNrSW1wbGVt
ZW50YXRpb25Db250ZW4KICAgICB9CiAKICAgICBpZiAoJGludGVyZmFjZU9yQ2FsbGJhY2stPmV4
dGVuZGVkQXR0cmlidXRlcy0+e0lzV2Vha0NhbGxiYWNrfSkgewotICAgICAgICBwdXNoKEAkY29u
dGVudFJlZiwgInZvaWQgJHtjbGFzc05hbWV9Ojp2aXNpdEpTRnVuY3Rpb24oSlNDOjpTbG90Vmlz
aXRvciYgdmlzaXRvcilcbiIpOworIyAgICAgICAgcHVzaChAJGNvbnRlbnRSZWYsICJ2b2lkICR7
Y2xhc3NOYW1lfTo6dmlzaXRKU0Z1bmN0aW9uKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpXG4i
KTsKKyAgICAgICAgcHVzaChAJGNvbnRlbnRSZWYsICJ2b2lkICR7Y2xhc3NOYW1lfTo6dmlzaXRK
U0Z1bmN0aW9uKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcilcbiIpOwogICAgICAg
ICBwdXNoKEAkY29udGVudFJlZiwgIntcbiIpOwogICAgICAgICBwdXNoKEAkY29udGVudFJlZiwg
IiAgICBtX2RhdGEtPnZpc2l0SlNGdW5jdGlvbih2aXNpdG9yKTtcbiIpOwogICAgICAgICBwdXNo
KEAkY29udGVudFJlZiwgIn1cblxuIik7CkBAIC02NzM0LDYgKzY3NDQsNyBAQCBzdWIgR2VuZXJh
dGVJdGVyYWJsZURlZmluaXRpb24KICAgICBteSAkdmlzaWJsZUludGVyZmFjZU5hbWUgPSAkY29k
ZUdlbmVyYXRvci0+R2V0VmlzaWJsZUludGVyZmFjZU5hbWUoJGludGVyZmFjZSk7CiAKICAgICBB
ZGRUb0ltcGxJbmNsdWRlcygiSlNET01JdGVyYXRvci5oIik7CisgICAgQWRkVG9JbXBsSW5jbHVk
ZXMoIjxKYXZhU2NyaXB0Q29yZS9TbG90VmlzaXRvck1hY3Jvcy5oPiIpOwogCiAgICAgcmV0dXJu
IHVubGVzcyBJc0tleVZhbHVlSXRlcmFibGVJbnRlcmZhY2UoJGludGVyZmFjZSk7CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2RvbS9BY3RpdmVET01DYWxsYmFjay5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2RvbS9BY3RpdmVET01DYWxsYmFjay5oCShyZXZpc2lvbiAyNzIyOTcpCisr
KyBTb3VyY2UvV2ViQ29yZS9kb20vQWN0aXZlRE9NQ2FsbGJhY2suaAkod29ya2luZyBjb3B5KQpA
QCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIkNvbnRleHREZXN0cnVjdGlvbk9ic2VydmVyLmgi
CiAKIG5hbWVzcGFjZSBKU0MgeworY2xhc3MgQWJzdHJhY3RTbG90VmlzaXRvcjsKIGNsYXNzIFNs
b3RWaXNpdG9yOwogfQogCkBAIC01NSw3ICs1Niw4IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VY
UE9SVCBib29sIGFjdGl2ZURPTU9iamVjdHNBcmVTdXNwZW5kZWQoKSBjb25zdDsKICAgICBXRUJD
T1JFX0VYUE9SVCBib29sIGFjdGl2ZURPTU9iamVjdEFyZVN0b3BwZWQoKSBjb25zdDsKICAgICAK
LSAgICB2aXJ0dWFsIHZvaWQgdmlzaXRKU0Z1bmN0aW9uKEpTQzo6U2xvdFZpc2l0b3ImKSB7IH0K
Ky8vICAgIHZpcnR1YWwgdm9pZCB2aXNpdEpTRnVuY3Rpb24oSlNDOjpTbG90VmlzaXRvciYpIHsg
fQorICAgIHZpcnR1YWwgdm9pZCB2aXNpdEpTRnVuY3Rpb24oSlNDOjpBYnN0cmFjdFNsb3RWaXNp
dG9yJikgeyB9CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9kb20vRXZlbnRMaXN0ZW5lci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Rv
bS9FdmVudExpc3RlbmVyLmgJKHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJjZS9XZWJDb3JlL2Rv
bS9FdmVudExpc3RlbmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI0LDggKzI0LDkgQEAKICNpbmNs
dWRlIDx3dGYvV2Vha1B0ci5oPgogCiBuYW1lc3BhY2UgSlNDIHsKK2NsYXNzIEFic3RyYWN0U2xv
dFZpc2l0b3I7CiBjbGFzcyBKU09iamVjdDsKLWNsYXNzIFNsb3RWaXNpdG9yOworLy9jbGFzcyBT
bG90VmlzaXRvcjsKIH0KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNTIsNyArNTMsOCBAQCBw
dWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGhhbmRsZUV2ZW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQmLCBFdmVudCYpID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgd2FzQ3JlYXRlZEZyb21NYXJrdXAo
KSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogCi0gICAgdmlydHVhbCB2b2lkIHZpc2l0SlNGdW5j
dGlvbihKU0M6OlNsb3RWaXNpdG9yJikgeyB9CisvLyAgICB2aXJ0dWFsIHZvaWQgdmlzaXRKU0Z1
bmN0aW9uKEpTQzo6U2xvdFZpc2l0b3ImKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXRKU0Z1
bmN0aW9uKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpIHsgfQogCiAgICAgdmlydHVhbCBib29s
IGlzQXR0cmlidXRlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICBUeXBlIHR5cGUoKSBj
b25zdCB7IHJldHVybiBtX3R5cGU7IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9FdmVudFRh
cmdldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50VGFyZ2V0LmNw
cAkocmV2aXNpb24gMjcyMjk3KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50VGFyZ2V0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzg0LDcgKzM4NCw5IEBAIHZvaWQgRXZlbnRUYXJnZXQ6OnJl
bW92ZUFsbEV2ZW50TGlzdGVuZXIKICAgICB0aHJlYWREYXRhLnNldElzSW5SZW1vdmVBbGxFdmVu
dExpc3RlbmVycyhmYWxzZSk7CiB9CiAKLXZvaWQgRXZlbnRUYXJnZXQ6OnZpc2l0SlNFdmVudExp
c3RlbmVycyhKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy92b2lkIEV2ZW50VGFyZ2V0Ojp2
aXNpdEpTRXZlbnRMaXN0ZW5lcnMoSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRl
PHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEV2ZW50VGFyZ2V0Ojp2aXNpdEpTRXZlbnRMaXN0ZW5l
cnMoVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBFdmVudFRhcmdldERhdGEqIGRhdGEgPSBldmVu
dFRhcmdldERhdGFDb25jdXJyZW50bHkoKTsKICAgICBpZiAoIWRhdGEpCkBAIC0zOTYsNiArMzk4
LDkgQEAgdm9pZCBFdmVudFRhcmdldDo6dmlzaXRKU0V2ZW50TGlzdGVuZXJzKAogICAgICAgICBs
aXN0ZW5lci0+dmlzaXRKU0Z1bmN0aW9uKHZpc2l0b3IpOwogfQogCit0ZW1wbGF0ZSB2b2lkIEV2
ZW50VGFyZ2V0Ojp2aXNpdEpTRXZlbnRMaXN0ZW5lcnMoSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9y
Jik7Cit0ZW1wbGF0ZSB2b2lkIEV2ZW50VGFyZ2V0Ojp2aXNpdEpTRXZlbnRMaXN0ZW5lcnMoSlND
OjpTbG90VmlzaXRvciYpOworCiB2b2lkIEV2ZW50VGFyZ2V0OjppbnZhbGlkYXRlRXZlbnRMaXN0
ZW5lclJlZ2lvbnMoKQogewogICAgIGlmIChpczxFbGVtZW50PigqdGhpcykpIHsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2RvbS9FdmVudFRhcmdldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2RvbS9FdmVudFRhcmdldC5oCShyZXZpc2lvbiAyNzIyOTcpCisrKyBTb3VyY2UvV2ViQ29y
ZS9kb20vRXZlbnRUYXJnZXQuaAkod29ya2luZyBjb3B5KQpAQCAtOTcsNyArOTcsOCBAQCBwdWJs
aWM6CiAgICAgdm9pZCBmaXJlRXZlbnRMaXN0ZW5lcnMoRXZlbnQmLCBFdmVudEludm9rZVBoYXNl
KTsKICAgICBib29sIGlzRmlyaW5nRXZlbnRMaXN0ZW5lcnMoKSBjb25zdDsKIAotICAgIHZvaWQg
dmlzaXRKU0V2ZW50TGlzdGVuZXJzKEpTQzo6U2xvdFZpc2l0b3ImKTsKKy8vICAgIHZvaWQgdmlz
aXRKU0V2ZW50TGlzdGVuZXJzKEpTQzo6U2xvdFZpc2l0b3ImKTsKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBWaXNpdG9yPiB2b2lkIHZpc2l0SlNFdmVudExpc3RlbmVycyhWaXNpdG9yJik7CiAgICAg
dm9pZCBpbnZhbGlkYXRlSlNFdmVudExpc3RlbmVycyhKU0M6OkpTT2JqZWN0Kik7CiAKICAgICBj
b25zdCBFdmVudFRhcmdldERhdGEqIGV2ZW50VGFyZ2V0RGF0YSgpIGNvbnN0OwpJbmRleDogU291
cmNlL1dlYkNvcmUvZG9tL011dGF0aW9uUmVjb3JkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9kb20vTXV0YXRpb25SZWNvcmQuY3BwCShyZXZpc2lvbiAyNzIyOTcpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9kb20vTXV0YXRpb25SZWNvcmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSw3
ICs0MSw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogbmFtZXNwYWNlIHsKIAotc3RhdGljIHZv
aWQgdmlzaXROb2RlTGlzdChKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yLCBOb2RlTGlzdCYgbm9k
ZUxpc3QpCisvL3N0YXRpYyB2b2lkIHZpc2l0Tm9kZUxpc3QoSlNDOjpTbG90VmlzaXRvciYgdmlz
aXRvciwgTm9kZUxpc3QmIG5vZGVMaXN0KQorc3RhdGljIHZvaWQgdmlzaXROb2RlTGlzdChKU0M6
OkFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIE5vZGVMaXN0JiBub2RlTGlzdCkKIHsKICAg
ICBBU1NFUlQoIW5vZGVMaXN0LmlzTGl2ZU5vZGVMaXN0KCkpOwogICAgIHVuc2lnbmVkIGxlbmd0
aCA9IG5vZGVMaXN0Lmxlbmd0aCgpOwpAQCAtNjgsNyArNjksOCBAQCBwcml2YXRlOgogICAgIE5v
ZGUqIHByZXZpb3VzU2libGluZygpIG92ZXJyaWRlIHsgcmV0dXJuIG1fcHJldmlvdXNTaWJsaW5n
LmdldCgpOyB9CiAgICAgTm9kZSogbmV4dFNpYmxpbmcoKSBvdmVycmlkZSB7IHJldHVybiBtX25l
eHRTaWJsaW5nLmdldCgpOyB9CiAKLSAgICB2b2lkIHZpc2l0Tm9kZXNDb25jdXJyZW50bHkoSlND
OjpTbG90VmlzaXRvciYgdmlzaXRvcikgY29uc3QgZmluYWwKKy8vICAgIHZvaWQgdmlzaXROb2Rl
c0NvbmN1cnJlbnRseShKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKSBjb25zdCBmaW5hbAorICAg
IHZvaWQgdmlzaXROb2Rlc0NvbmN1cnJlbnRseShKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImIHZp
c2l0b3IpIGNvbnN0IGZpbmFsCiAgICAgewogICAgICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qo
cm9vdChtX3RhcmdldC5wdHIoKSkpOwogICAgICAgICBpZiAobV9hZGRlZE5vZGVzKQpAQCAtMTA1
LDcgKzEwNyw4IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiBub2RlTGlzdC5nZXQoKTsKICAg
ICB9CiAKLSAgICB2b2lkIHZpc2l0Tm9kZXNDb25jdXJyZW50bHkoSlNDOjpTbG90VmlzaXRvciYg
dmlzaXRvcikgY29uc3QgZmluYWwKKy8vICAgIHZvaWQgdmlzaXROb2Rlc0NvbmN1cnJlbnRseShK
U0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKSBjb25zdCBmaW5hbAorICAgIHZvaWQgdmlzaXROb2Rl
c0NvbmN1cnJlbnRseShKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0IGZp
bmFsCiAgICAgewogICAgICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qocm9vdChtX3RhcmdldC5w
dHIoKSkpOwogICAgIH0KQEAgLTE2NCw3ICsxNjcsOCBAQCBwcml2YXRlOgogCiAgICAgU3RyaW5n
IG9sZFZhbHVlKCkgb3ZlcnJpZGUgeyByZXR1cm4gU3RyaW5nKCk7IH0KIAotICAgIHZvaWQgdmlz
aXROb2Rlc0NvbmN1cnJlbnRseShKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKSBjb25zdCBmaW5h
bAorLy8gICAgdm9pZCB2aXNpdE5vZGVzQ29uY3VycmVudGx5KEpTQzo6U2xvdFZpc2l0b3ImIHZp
c2l0b3IpIGNvbnN0IGZpbmFsCisgICAgdm9pZCB2aXNpdE5vZGVzQ29uY3VycmVudGx5KEpTQzo6
QWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikgY29uc3QgZmluYWwKICAgICB7CiAgICAgICAg
IG1fcmVjb3JkLT52aXNpdE5vZGVzQ29uY3VycmVudGx5KHZpc2l0b3IpOwogICAgIH0KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2RvbS9NdXRhdGlvblJlY29yZC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2RvbS9NdXRhdGlvblJlY29yZC5oCShyZXZpc2lvbiAyNzIyOTcpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9kb20vTXV0YXRpb25SZWNvcmQuaAkod29ya2luZyBjb3B5KQpAQCAtNzIsNyAr
NzIsOCBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIFN0cmluZyBvbGRWYWx1ZSgpIHsgcmV0dXJu
IFN0cmluZygpOyB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXROb2Rlc0NvbmN1cnJlbnRseShK
U0M6OlNsb3RWaXNpdG9yJikgY29uc3QgPSAwOworLy8gICAgdmlydHVhbCB2b2lkIHZpc2l0Tm9k
ZXNDb25jdXJyZW50bHkoSlNDOjpTbG90VmlzaXRvciYpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFs
IHZvaWQgdmlzaXROb2Rlc0NvbmN1cnJlbnRseShKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKSBj
b25zdCA9IDA7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9kb20vU3RhdGljUmFuZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Rv
bS9TdGF0aWNSYW5nZS5jcHAJKHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJjZS9XZWJDb3JlL2Rv
bS9TdGF0aWNSYW5nZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc2LDcgKzc2LDcgQEAgRXhjZXB0
aW9uT3I8UmVmPFN0YXRpY1JhbmdlPj4gU3RhdGljUmFuZwogICAgIHJldHVybiBjcmVhdGUoeyB7
IGluaXQuc3RhcnRDb250YWluZXIucmVsZWFzZU5vbk51bGwoKSwgaW5pdC5zdGFydE9mZnNldCB9
LCB7IGluaXQuZW5kQ29udGFpbmVyLnJlbGVhc2VOb25OdWxsKCksIGluaXQuZW5kT2Zmc2V0IH0g
fSk7CiB9CiAKLXZvaWQgU3RhdGljUmFuZ2U6OnZpc2l0Tm9kZXNDb25jdXJyZW50bHkoSlNDOjpT
bG90VmlzaXRvciYgdmlzaXRvcikgY29uc3QKK3ZvaWQgU3RhdGljUmFuZ2U6OnZpc2l0Tm9kZXND
b25jdXJyZW50bHkoSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBjb25zdAogewog
ICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChyb290KHN0YXJ0LmNvbnRhaW5lci5nZXQoKSkpOwog
ICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChyb290KGVuZC5jb250YWluZXIuZ2V0KCkpKTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9TdGF0aWNSYW5nZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2RvbS9TdGF0aWNSYW5nZS5oCShyZXZpc2lvbiAyNzIyOTcpCisrKyBTb3VyY2Uv
V2ViQ29yZS9kb20vU3RhdGljUmFuZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtNTgsNyArNTgsNyBA
QCBwdWJsaWM6CiAgICAgdW5zaWduZWQgZW5kT2Zmc2V0KCkgY29uc3QgZmluYWwgeyByZXR1cm4g
U2ltcGxlUmFuZ2U6OmVuZE9mZnNldCgpOyB9CiAgICAgYm9vbCBjb2xsYXBzZWQoKSBjb25zdCBm
aW5hbCB7IHJldHVybiBTaW1wbGVSYW5nZTo6Y29sbGFwc2VkKCk7IH0KIAotICAgIHZvaWQgdmlz
aXROb2Rlc0NvbmN1cnJlbnRseShKU0M6OlNsb3RWaXNpdG9yJikgY29uc3Q7CisgICAgdm9pZCB2
aXNpdE5vZGVzQ29uY3VycmVudGx5KEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpIGNvbnN0Owog
CiBwcml2YXRlOgogICAgIFN0YXRpY1JhbmdlKFNpbXBsZVJhbmdlJiYpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5j
cHAJKHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdM
MlJlbmRlcmluZ0NvbnRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMDc4LDE4ICszMDc4LDIw
IEBAIGJvb2wgV2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6Y2hlY2tBbmRUcmEKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIAotdm9pZCBXZWJHTDJSZW5kZXJpbmdDb250ZXh0OjphZGRNZW1iZXJzVG9PcGFx
dWVSb290cyhKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy92b2lkIFdlYkdMMlJlbmRlcmlu
Z0NvbnRleHQ6OmFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0
b3IpCit2b2lkIFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OmFkZE1lbWJlcnNUb09wYXF1ZVJvb3Rz
KEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBXZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlOjphZGRNZW1iZXJzVG9PcGFxdWVSb290cyh2aXNpdG9yKTsKIAogICAgIGF1
dG8gbG9ja2VyID0gaG9sZExvY2sob2JqZWN0R3JhcGhMb2NrKCkpOwogICAgIHZpc2l0b3IuYWRk
T3BhcXVlUm9vdChtX3JlYWRGcmFtZWJ1ZmZlckJpbmRpbmcuZ2V0KCkpOwogICAgIGlmIChtX3Jl
YWRGcmFtZWJ1ZmZlckJpbmRpbmcpCi0gICAgICAgIG1fcmVhZEZyYW1lYnVmZmVyQmluZGluZy0+
YWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMobG9ja2VyLCB2aXNpdG9yKTsKKyAgICAgICAgbV9yZWFk
RnJhbWVidWZmZXJCaW5kaW5nLT5hZGRNZW1iZXJzVG9PcGFxdWVSb290czMwMChsb2NrZXIsIHZp
c2l0b3IpOwogCiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KG1fYm91bmRUcmFuc2Zvcm1GZWVk
YmFjay5nZXQoKSk7CiAgICAgaWYgKG1fYm91bmRUcmFuc2Zvcm1GZWVkYmFjaykKLSAgICAgICAg
bV9ib3VuZFRyYW5zZm9ybUZlZWRiYWNrLT5hZGRNZW1iZXJzVG9PcGFxdWVSb290cyhsb2NrZXIs
IHZpc2l0b3IpOworLy8gICAgICAgIG1fYm91bmRUcmFuc2Zvcm1GZWVkYmFjay0+YWRkTWVtYmVy
c1RvT3BhcXVlUm9vdHMobG9ja2VyLCB2aXNpdG9yKTsKKyAgICAgICAgbV9ib3VuZFRyYW5zZm9y
bUZlZWRiYWNrLT5hZGRNZW1iZXJzVG9PcGFxdWVSb290czEwMChsb2NrZXIsIHZpc2l0b3IpOwog
CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KG1fYm91bmRDb3B5UmVhZEJ1ZmZlci5nZXQoKSk7
CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KG1fYm91bmRDb3B5V3JpdGVCdWZmZXIuZ2V0KCkp
OwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0wyUmVuZGVyaW5nQ29udGV4
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMMlJlbmRl
cmluZ0NvbnRleHQuaAkocmV2aXNpb24gMjcyMjk3KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9j
YW52YXMvV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNjEsNyAr
MjYxLDggQEAgcHVibGljOgogCiAgICAgYm9vbCBjaGVja0FuZFRyYW5zbGF0ZUF0dGFjaG1lbnRz
KGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0NHTGVudW0sIFZlY3RvcjxHQ0dMZW51bT4mKTsK
IAotICAgIHZvaWQgYWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMoSlNDOjpTbG90VmlzaXRvciYpIG92
ZXJyaWRlOworLy8gICAgdm9pZCBhZGRNZW1iZXJzVG9PcGFxdWVSb290cyhKU0M6OlNsb3RWaXNp
dG9yJikgb3ZlcnJpZGU7CisgICAgdm9pZCBhZGRNZW1iZXJzVG9PcGFxdWVSb290cyhKU0M6OkFi
c3RyYWN0U2xvdFZpc2l0b3ImKSBvdmVycmlkZTsKIAogcHJpdmF0ZToKICAgICBXZWJHTDJSZW5k
ZXJpbmdDb250ZXh0KENhbnZhc0Jhc2UmLCBHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMpOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xGcmFtZWJ1ZmZlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xGcmFtZWJ1ZmZlci5j
cHAJKHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdM
RnJhbWVidWZmZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Myw3ICs2Myw4IEBAIG5hbWVzcGFj
ZSB7CiAgICAgICAgIHZvaWQgb25EZXRhY2hlZChjb25zdCBBYnN0cmFjdExvY2tlciYsIEdyYXBo
aWNzQ29udGV4dEdMKikgb3ZlcnJpZGU7CiAgICAgICAgIHZvaWQgYXR0YWNoKEdyYXBoaWNzQ29u
dGV4dEdMKiwgR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBhdHRhY2htZW50KSBvdmVycmlkZTsK
ICAgICAgICAgdm9pZCB1bmF0dGFjaChHcmFwaGljc0NvbnRleHRHTCosIEdDR0xlbnVtIHRhcmdl
dCwgR0NHTGVudW0gYXR0YWNobWVudCkgb3ZlcnJpZGU7Ci0gICAgICAgIHZvaWQgYWRkTWVtYmVy
c1RvT3BhcXVlUm9vdHMoY29uc3QgQWJzdHJhY3RMb2NrZXImLCBKU0M6OlNsb3RWaXNpdG9yJikg
b3ZlcnJpZGU7CisvLyAgICAgICAgdm9pZCBhZGRNZW1iZXJzVG9PcGFxdWVSb290cyhjb25zdCBB
YnN0cmFjdExvY2tlciYsIEpTQzo6U2xvdFZpc2l0b3ImKSBvdmVycmlkZTsKKyAgICAgICAgdm9p
ZCBhZGRNZW1iZXJzVG9PcGFxdWVSb290czQwMChjb25zdCBBYnN0cmFjdExvY2tlciYsIEpTQzo6
QWJzdHJhY3RTbG90VmlzaXRvciYpIG92ZXJyaWRlOwogCiAgICAgICAgIFdlYkdMUmVuZGVyYnVm
ZmVyQXR0YWNobWVudCgpIHsgfTsKIApAQCAtMTQ1LDcgKzE0Niw4IEBAIG5hbWVzcGFjZSB7CiAg
ICAgICAgICAgICBjb250ZXh0LT5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcih0YXJnZXQsIGF0dGFj
aG1lbnQsIEdyYXBoaWNzQ29udGV4dEdMOjpSRU5ERVJCVUZGRVIsIDApOwogICAgIH0KIAotICAg
IHZvaWQgV2ViR0xSZW5kZXJidWZmZXJBdHRhY2htZW50OjphZGRNZW1iZXJzVG9PcGFxdWVSb290
cyhjb25zdCBBYnN0cmFjdExvY2tlciYsIEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvLyAg
ICB2b2lkIFdlYkdMUmVuZGVyYnVmZmVyQXR0YWNobWVudDo6YWRkTWVtYmVyc1RvT3BhcXVlUm9v
dHMoY29uc3QgQWJzdHJhY3RMb2NrZXImLCBKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQorICAg
IHZvaWQgV2ViR0xSZW5kZXJidWZmZXJBdHRhY2htZW50OjphZGRNZW1iZXJzVG9PcGFxdWVSb290
czQwMChjb25zdCBBYnN0cmFjdExvY2tlciYsIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYgdmlz
aXRvcikKICAgICB7CiAgICAgICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChtX3JlbmRlcmJ1ZmZl
ci5nZXQoKSk7CiAgICAgfQpAQCAtMTY5LDcgKzE3MSw4IEBAIG5hbWVzcGFjZSB7CiAgICAgICAg
IHZvaWQgb25EZXRhY2hlZChjb25zdCBBYnN0cmFjdExvY2tlciYsIEdyYXBoaWNzQ29udGV4dEdM
Kikgb3ZlcnJpZGU7CiAgICAgICAgIHZvaWQgYXR0YWNoKEdyYXBoaWNzQ29udGV4dEdMKiwgR0NH
TGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBhdHRhY2htZW50KSBvdmVycmlkZTsKICAgICAgICAgdm9p
ZCB1bmF0dGFjaChHcmFwaGljc0NvbnRleHRHTCosIEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0g
YXR0YWNobWVudCkgb3ZlcnJpZGU7Ci0gICAgICAgIHZvaWQgYWRkTWVtYmVyc1RvT3BhcXVlUm9v
dHMoY29uc3QgQWJzdHJhY3RMb2NrZXImLCBKU0M6OlNsb3RWaXNpdG9yJikgb3ZlcnJpZGU7Cisv
LyAgICAgICAgdm9pZCBhZGRNZW1iZXJzVG9PcGFxdWVSb290cyhjb25zdCBBYnN0cmFjdExvY2tl
ciYsIEpTQzo6U2xvdFZpc2l0b3ImKSBvdmVycmlkZTsKKyAgICAgICAgdm9pZCBhZGRNZW1iZXJz
VG9PcGFxdWVSb290czQwMChjb25zdCBBYnN0cmFjdExvY2tlciYsIEpTQzo6QWJzdHJhY3RTbG90
VmlzaXRvciYpIG92ZXJyaWRlOwogCiAgICAgICAgIFdlYkdMVGV4dHVyZUF0dGFjaG1lbnQoKSB7
IH07CiAKQEAgLTI2Nyw3ICsyNzAsOCBAQCBuYW1lc3BhY2UgewogI2VuZGlmCiAgICAgfQogCi0g
ICAgdm9pZCBXZWJHTFRleHR1cmVBdHRhY2htZW50OjphZGRNZW1iZXJzVG9PcGFxdWVSb290cyhj
b25zdCBBYnN0cmFjdExvY2tlciYsIEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvLyAgICB2
b2lkIFdlYkdMVGV4dHVyZUF0dGFjaG1lbnQ6OmFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKGNvbnN0
IEFic3RyYWN0TG9ja2VyJiwgSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKKyAgICB2b2lkIFdl
YkdMVGV4dHVyZUF0dGFjaG1lbnQ6OmFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzNDAwKGNvbnN0IEFi
c3RyYWN0TG9ja2VyJiwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogICAgIHsK
ICAgICAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KG1fdGV4dHVyZS5nZXQoKSk7CiAgICAgfQpA
QCAtNzIxLDEwICs3MjUsMTEgQEAgR0NHTGVudW0gV2ViR0xGcmFtZWJ1ZmZlcjo6Z2V0RHJhd0J1
ZmZlcgogICAgIHJldHVybiBHcmFwaGljc0NvbnRleHRHTDo6Tk9ORTsKIH0KIAotdm9pZCBXZWJH
TEZyYW1lYnVmZmVyOjphZGRNZW1iZXJzVG9PcGFxdWVSb290cyhjb25zdCBBYnN0cmFjdExvY2tl
ciYgbG9ja2VyLCBKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy92b2lkIFdlYkdMRnJhbWVi
dWZmZXI6OmFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKGNvbnN0IEFic3RyYWN0TG9ja2VyJiBsb2Nr
ZXIsIEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIFdlYkdMRnJhbWVidWZmZXI6OmFk
ZE1lbWJlcnNUb09wYXF1ZVJvb3RzMzAwKGNvbnN0IEFic3RyYWN0TG9ja2VyJiBsb2NrZXIsIEpT
Qzo6QWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBmb3IgKGF1dG8mIGVudHJ5
IDogbV9hdHRhY2htZW50cykKLSAgICAgICAgZW50cnkudmFsdWUtPmFkZE1lbWJlcnNUb09wYXF1
ZVJvb3RzKGxvY2tlciwgdmlzaXRvcik7CisgICAgICAgIGVudHJ5LnZhbHVlLT5hZGRNZW1iZXJz
VG9PcGFxdWVSb290czQwMChsb2NrZXIsIHZpc2l0b3IpOwogfQogCiB2b2lkIFdlYkdMRnJhbWVi
dWZmZXI6OnNldEF0dGFjaG1lbnRJbnRlcm5hbChHQ0dMZW51bSBhdHRhY2htZW50LCBHQ0dMZW51
bSB0ZXhUYXJnZXQsIFdlYkdMVGV4dHVyZSogdGV4dHVyZSwgR0NHTGludCBsZXZlbCwgR0NHTGlu
dCBsYXllcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRnJhbWVidWZm
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEZyYW1l
YnVmZmVyLmgJKHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L1dlYkdMRnJhbWVidWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQsOCBAQAogI2lu
Y2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIEpTQyB7Ci1jbGFzcyBTbG90VmlzaXRv
cjsKKy8vY2xhc3MgU2xvdFZpc2l0b3I7CitjbGFzcyBBYnN0cmFjdFNsb3RWaXNpdG9yOwogfQog
CiBuYW1lc3BhY2UgV1RGIHsKQEAgLTY1LDcgKzY2LDggQEAgcHVibGljOgogICAgICAgICB2aXJ0
dWFsIHZvaWQgb25EZXRhY2hlZChjb25zdCBXVEY6OkFic3RyYWN0TG9ja2VyJiwgR3JhcGhpY3ND
b250ZXh0R0wqKSA9IDA7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBhdHRhY2goR3JhcGhpY3NDb250
ZXh0R0wqLCBHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIGF0dGFjaG1lbnQpID0gMDsKICAgICAg
ICAgdmlydHVhbCB2b2lkIHVuYXR0YWNoKEdyYXBoaWNzQ29udGV4dEdMKiwgR0NHTGVudW0gdGFy
Z2V0LCBHQ0dMZW51bSBhdHRhY2htZW50KSA9IDA7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBhZGRN
ZW1iZXJzVG9PcGFxdWVSb290cyhjb25zdCBXVEY6OkFic3RyYWN0TG9ja2VyJiwgSlNDOjpTbG90
VmlzaXRvciYpID0gMDsKKy8vICAgICAgICB2aXJ0dWFsIHZvaWQgYWRkTWVtYmVyc1RvT3BhcXVl
Um9vdHMoY29uc3QgV1RGOjpBYnN0cmFjdExvY2tlciYsIEpTQzo6U2xvdFZpc2l0b3ImKSA9IDA7
CisgICAgICAgIHZpcnR1YWwgdm9pZCBhZGRNZW1iZXJzVG9PcGFxdWVSb290czQwMChjb25zdCBX
VEY6OkFic3RyYWN0TG9ja2VyJiwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJikgPSAwOwogCiAg
ICAgcHJvdGVjdGVkOgogICAgICAgICBXZWJHTEF0dGFjaG1lbnQoKTsKQEAgLTExNCw3ICsxMTYs
OCBAQCBwdWJsaWM6CiAKICAgICBHQ0dMZW51bSBnZXREcmF3QnVmZmVyKEdDR0xlbnVtKTsKIAot
ICAgIHZvaWQgYWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMoY29uc3QgV1RGOjpBYnN0cmFjdExvY2tl
ciYsIEpTQzo6U2xvdFZpc2l0b3ImKTsKKy8vICAgIHZvaWQgYWRkTWVtYmVyc1RvT3BhcXVlUm9v
dHMoY29uc3QgV1RGOjpBYnN0cmFjdExvY2tlciYsIEpTQzo6U2xvdFZpc2l0b3ImKTsKKyAgICB2
b2lkIGFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzMzAwKGNvbnN0IFdURjo6QWJzdHJhY3RMb2NrZXIm
LCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKTsKIAogcHJpdmF0ZToKICAgICBXZWJHTEZyYW1l
YnVmZmVyKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UmKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL1dlYkdMUHJvZ3JhbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvV2ViR0xQcm9ncmFtLmNwcAkocmV2aXNpb24gMjcyMjk3KQorKysgU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xQcm9ncmFtLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjA2LDcgKzIwNiw4IEBAIGJvb2wgV2ViR0xQcm9ncmFtOjpkZXRhY2hTaGFkZXIoY29uc3Qg
QWIKICAgICB9CiB9CiAKLXZvaWQgV2ViR0xQcm9ncmFtOjphZGRNZW1iZXJzVG9PcGFxdWVSb290
cyhjb25zdCBBYnN0cmFjdExvY2tlciYsIEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3Zv
aWQgV2ViR0xQcm9ncmFtOjphZGRNZW1iZXJzVG9PcGFxdWVSb290cyhjb25zdCBBYnN0cmFjdExv
Y2tlciYsIEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIFdlYkdMUHJvZ3JhbTo6YWRk
TWVtYmVyc1RvT3BhcXVlUm9vdHMyMDAoY29uc3QgQWJzdHJhY3RMb2NrZXImLCBKU0M6OkFic3Ry
YWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KG1f
dmVydGV4U2hhZGVyLmdldCgpKTsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QobV9mcmFnbWVu
dFNoYWRlci5nZXQoKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFBy
b2dyYW0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFBy
b2dyYW0uaAkocmV2aXNpb24gMjcyMjk3KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
V2ViR0xQcm9ncmFtLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDcgKzM1LDggQEAKICNpbmNsdWRl
IDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBKU0MgewotY2xhc3MgU2xvdFZpc2l0b3I7Cisv
L2NsYXNzIFNsb3RWaXNpdG9yOworY2xhc3MgQWJzdHJhY3RTbG90VmlzaXRvcjsKIH0KIAogbmFt
ZXNwYWNlIFdURiB7CkBAIC04OCw3ICs4OSw4IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1f
cmVxdWlyZWRUcmFuc2Zvcm1GZWVkYmFja0J1ZmZlckNvdW50OwogICAgIH0KIAotICAgIHZvaWQg
YWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMoY29uc3QgV1RGOjpBYnN0cmFjdExvY2tlciYsIEpTQzo6
U2xvdFZpc2l0b3ImKTsKKy8vICAgIHZvaWQgYWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMoY29uc3Qg
V1RGOjpBYnN0cmFjdExvY2tlciYsIEpTQzo6U2xvdFZpc2l0b3ImKTsKKyAgICB2b2lkIGFkZE1l
bWJlcnNUb09wYXF1ZVJvb3RzMjAwKGNvbnN0IFdURjo6QWJzdHJhY3RMb2NrZXImLCBKU0M6OkFi
c3RyYWN0U2xvdFZpc2l0b3ImKTsKIAogcHJpdmF0ZToKICAgICBXZWJHTFByb2dyYW0oV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZSYpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHAJKHJldmlzaW9uIDI3
MjI5NykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03OTMxLDIzICs3OTMxLDI2IEBAIHZvaWQgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6ZGlzcGF0Y2gKICAgICBxdWV1ZVRhc2tUb0Rpc3BhdGNo
RXZlbnQoKmNhbnZhcywgVGFza1NvdXJjZTo6V2ViR0wsIFdlYkdMQ29udGV4dEV2ZW50OjpjcmVh
dGUoZXZlbnROYW1lcygpLndlYmdsY29udGV4dGNoYW5nZWRFdmVudCwgRXZlbnQ6OkNhbkJ1YmJs
ZTo6Tm8sIEV2ZW50OjpJc0NhbmNlbGFibGU6OlllcywgZW1wdHlTdHJpbmcoKSkpOwogfQogCi12
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKEpT
Qzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZTo6YWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMoSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3Zv
aWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6YWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMoSlND
OjpBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGF1dG8gbG9ja2VyID0gaG9s
ZExvY2sob2JqZWN0R3JhcGhMb2NrKCkpOwogCisgICAgLy8gbWxhbSBGSVhNRTogd2h5IGFyZSB3
ZSBub3QgYWxzbyB2aXNpdGluZyBtX2RlZmF1bHRWZXJ0ZXhBcnJheU9iamVjdD8KKwogICAgIHZp
c2l0b3IuYWRkT3BhcXVlUm9vdChtX2JvdW5kQXJyYXlCdWZmZXIuZ2V0KCkpOwogCiAgICAgdmlz
aXRvci5hZGRPcGFxdWVSb290KG1fYm91bmRWZXJ0ZXhBcnJheU9iamVjdC5nZXQoKSk7CiAgICAg
aWYgKG1fYm91bmRWZXJ0ZXhBcnJheU9iamVjdCkKLSAgICAgICAgbV9ib3VuZFZlcnRleEFycmF5
T2JqZWN0LT5hZGRNZW1iZXJzVG9PcGFxdWVSb290cyhsb2NrZXIsIHZpc2l0b3IpOworICAgICAg
ICBtX2JvdW5kVmVydGV4QXJyYXlPYmplY3QtPmFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzNjAwKGxv
Y2tlciwgdmlzaXRvcik7CiAKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QobV9jdXJyZW50UHJv
Z3JhbS5nZXQoKSk7CiAgICAgaWYgKG1fY3VycmVudFByb2dyYW0pCi0gICAgICAgIG1fY3VycmVu
dFByb2dyYW0tPmFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKGxvY2tlciwgdmlzaXRvcik7CisgICAg
ICAgIG1fY3VycmVudFByb2dyYW0tPmFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzMjAwKGxvY2tlciwg
dmlzaXRvcik7CiAKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QobV9mcmFtZWJ1ZmZlckJpbmRp
bmcuZ2V0KCkpOwogICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZykKLSAgICAgICAgbV9mcmFt
ZWJ1ZmZlckJpbmRpbmctPmFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKGxvY2tlciwgdmlzaXRvcik7
CisgICAgICAgIG1fZnJhbWVidWZmZXJCaW5kaW5nLT5hZGRNZW1iZXJzVG9PcGFxdWVSb290czMw
MChsb2NrZXIsIHZpc2l0b3IpOwogCiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KG1fcmVuZGVy
YnVmZmVyQmluZGluZy5nZXQoKSk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmgJKHJldmlzaW9uIDI3MjI5
NykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2UuaAkod29ya2luZyBjb3B5KQpAQCAtNTgsNyArNTgsOCBAQAogI2VuZGlmCiAKIG5hbWVzcGFj
ZSBKU0MgewotY2xhc3MgU2xvdFZpc2l0b3I7CisvL2NsYXNzIFNsb3RWaXNpdG9yOworY2xhc3Mg
QWJzdHJhY3RTbG90VmlzaXRvcjsKIH0KIAogbmFtZXNwYWNlIFdURiB7CkBAIC00MTEsNyArNDEy
LDggQEAgcHVibGljOgogICAgIHZvaWQgcmVjeWNsZUNvbnRleHQoKSBvdmVycmlkZTsKICAgICB2
b2lkIGRpc3BhdGNoQ29udGV4dENoYW5nZWROb3RpZmljYXRpb24oKSBvdmVycmlkZTsKIAotICAg
IHZpcnR1YWwgdm9pZCBhZGRNZW1iZXJzVG9PcGFxdWVSb290cyhKU0M6OlNsb3RWaXNpdG9yJik7
CisvLyAgICB2aXJ0dWFsIHZvaWQgYWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMoSlNDOjpTbG90Vmlz
aXRvciYpOworICAgIHZpcnR1YWwgdm9pZCBhZGRNZW1iZXJzVG9PcGFxdWVSb290cyhKU0M6OkFi
c3RyYWN0U2xvdFZpc2l0b3ImKTsKICAgICAvLyBUaGlzIGxvY2sgbXVzdCBiZSBoZWxkIGFjcm9z
cyBhbGwgbXV0YXRpb25zIG9mIGNvbnRhaW5lcnMgbGlrZQogICAgIC8vIFZlY3RvcnMsIEhhc2hT
ZXRzLCBldGMuIHdoaWNoIGNvbnRhaW4gUmVmUHRyPFdlYkdMT2JqZWN0PiwgYW5kCiAgICAgLy8g
d2hpY2ggYXJlIHRyYXZlcnNlZCBieSBhZGRNZW1iZXJzVG9PcGFxdWVSb290cygpIG9yIGFueSBv
ZiB0aGUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVHJhbnNmb3JtRmVl
ZGJhY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdM
VHJhbnNmb3JtRmVlZGJhY2suY3BwCShyZXZpc2lvbiAyNzIyOTcpCisrKyBTb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9XZWJHTFRyYW5zZm9ybUZlZWRiYWNrLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzAsOCArMzAsOSBAQAogCiAjaW5jbHVkZSAiV2ViR0xDb250ZXh0R3JvdXAuaCIKICNpbmNs
dWRlICJXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvU2xvdFZpc2l0b3IuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9TbG90VmlzaXRvcklu
bGluZXMuaD4KKy8vI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1Nsb3RWaXNpdG9yLmg+CisvLyNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9TbG90VmlzaXRvcklubGluZXMuaD4KKyNpbmNsdWRlIDxK
YXZhU2NyaXB0Q29yZS9BYnN0cmFjdFNsb3RWaXNpdG9ySW5saW5lcy5oPgogI2luY2x1ZGUgPHd0
Zi9Mb2NrLmg+CiAjaW5jbHVkZSA8d3RmL0xvY2tlci5oPgogCkBAIC05MywxNCArOTQsMTUgQEAg
Ym9vbCBXZWJHTFRyYW5zZm9ybUZlZWRiYWNrOjpoYXNFbm91Z2hCdQogICAgIHJldHVybiB0cnVl
OwogfQogCi12b2lkIFdlYkdMVHJhbnNmb3JtRmVlZGJhY2s6OmFkZE1lbWJlcnNUb09wYXF1ZVJv
b3RzKGNvbnN0IEFic3RyYWN0TG9ja2VyJiBsb2NrZXIsIEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0
b3IpCisvL3ZvaWQgV2ViR0xUcmFuc2Zvcm1GZWVkYmFjazo6YWRkTWVtYmVyc1RvT3BhcXVlUm9v
dHMoY29uc3QgQWJzdHJhY3RMb2NrZXImIGxvY2tlciwgSlNDOjpTbG90VmlzaXRvciYgdmlzaXRv
cikKK3ZvaWQgV2ViR0xUcmFuc2Zvcm1GZWVkYmFjazo6YWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMx
MDAoY29uc3QgQWJzdHJhY3RMb2NrZXImIGxvY2tlciwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9y
JiB2aXNpdG9yKQogewogICAgIGZvciAoYXV0byYgYnVmZmVyIDogbV9ib3VuZEluZGV4ZWRUcmFu
c2Zvcm1GZWVkYmFja0J1ZmZlcnMpCiAgICAgICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChidWZm
ZXIuZ2V0KCkpOwogCiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KG1fcHJvZ3JhbS5nZXQoKSk7
CiAgICAgaWYgKG1fcHJvZ3JhbSkKLSAgICAgICAgbV9wcm9ncmFtLT5hZGRNZW1iZXJzVG9PcGFx
dWVSb290cyhsb2NrZXIsIHZpc2l0b3IpOworICAgICAgICBtX3Byb2dyYW0tPmFkZE1lbWJlcnNU
b09wYXF1ZVJvb3RzMjAwKGxvY2tlciwgdmlzaXRvcik7CiB9CiAKIHZvaWQgV2ViR0xUcmFuc2Zv
cm1GZWVkYmFjazo6dW5iaW5kQnVmZmVyKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgV2ViR0xCdWZm
ZXImIGJ1ZmZlcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVHJhbnNm
b3JtRmVlZGJhY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9X
ZWJHTFRyYW5zZm9ybUZlZWRiYWNrLmgJKHJldmlzaW9uIDI3MjI5NykKKysrIFNvdXJjZS9XZWJD
b3JlL2h0bWwvY2FudmFzL1dlYkdMVHJhbnNmb3JtRmVlZGJhY2suaAkod29ya2luZyBjb3B5KQpA
QCAtMzEsNyArMzEsOCBAQAogI2luY2x1ZGUgIldlYkdMU2hhcmVkT2JqZWN0LmgiCiAKIG5hbWVz
cGFjZSBKU0MgewotY2xhc3MgU2xvdFZpc2l0b3I7CisvL2NsYXNzIFNsb3RWaXNpdG9yOworY2xh
c3MgQWJzdHJhY3RTbG90VmlzaXRvcjsKIH0KIAogbmFtZXNwYWNlIFdURiB7CkBAIC03MCw3ICs3
MSw4IEBAIHB1YmxpYzoKICAgICAKICAgICBib29sIGhhc0Vub3VnaEJ1ZmZlcnMoR0NHTHVpbnQg
bnVtUmVxdWlyZWQpIGNvbnN0OwogCi0gICAgdm9pZCBhZGRNZW1iZXJzVG9PcGFxdWVSb290cyhj
b25zdCBBYnN0cmFjdExvY2tlciYsIEpTQzo6U2xvdFZpc2l0b3ImKTsKKy8vICAgIHZvaWQgYWRk
TWVtYmVyc1RvT3BhcXVlUm9vdHMoY29uc3QgQWJzdHJhY3RMb2NrZXImLCBKU0M6OlNsb3RWaXNp
dG9yJik7CisgICAgdm9pZCBhZGRNZW1iZXJzVG9PcGFxdWVSb290czEwMChjb25zdCBBYnN0cmFj
dExvY2tlciYsIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpOwogCiBwcml2YXRlOgogICAgIFdl
YkdMVHJhbnNmb3JtRmVlZGJhY2soV2ViR0wyUmVuZGVyaW5nQ29udGV4dCYpOwpJbmRleDogU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xWZXJ0ZXhBcnJheU9iamVjdEJhc2UuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVmVydGV4QXJyYXlP
YmplY3RCYXNlLmNwcAkocmV2aXNpb24gMjcyMjk3KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9j
YW52YXMvV2ViR0xWZXJ0ZXhBcnJheU9iamVjdEJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
OSw4ICsyOSw5IEBACiAjaWYgRU5BQkxFKFdFQkdMKQogCiAjaW5jbHVkZSAiV2ViR0xSZW5kZXJp
bmdDb250ZXh0QmFzZS5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1Nsb3RWaXNpdG9yLmg+
Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvU2xvdFZpc2l0b3JJbmxpbmVzLmg+CisvLyNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9TbG90VmlzaXRvci5oPgorLy8jaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvU2xvdFZpc2l0b3JJbmxpbmVzLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvQWJz
dHJhY3RTbG90VmlzaXRvcklubGluZXMuaD4KICNpbmNsdWRlIDx3dGYvTG9ja2VyLmg+CiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKQEAgLTEwOSw3ICsxMTAsOCBAQCB2b2lkIFdlYkdMVmVydGV4QXJy
YXlPYmplY3RCYXNlOjpzZXRWZXJ0CiAgICAgbV92ZXJ0ZXhBdHRyaWJTdGF0ZVtpbmRleF0uZGl2
aXNvciA9IGRpdmlzb3I7CiB9CiAKLXZvaWQgV2ViR0xWZXJ0ZXhBcnJheU9iamVjdEJhc2U6OmFk
ZE1lbWJlcnNUb09wYXF1ZVJvb3RzKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgSlNDOjpTbG90Vmlz
aXRvciYgdmlzaXRvcikKKy8vdm9pZCBXZWJHTFZlcnRleEFycmF5T2JqZWN0QmFzZTo6YWRkTWVt
YmVyc1RvT3BhcXVlUm9vdHM2MDAoY29uc3QgQWJzdHJhY3RMb2NrZXImLCBKU0M6OlNsb3RWaXNp
dG9yJiB2aXNpdG9yKQordm9pZCBXZWJHTFZlcnRleEFycmF5T2JqZWN0QmFzZTo6YWRkTWVtYmVy
c1RvT3BhcXVlUm9vdHM2MDAoY29uc3QgQWJzdHJhY3RMb2NrZXImLCBKU0M6OkFic3RyYWN0U2xv
dFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KG1fYm91bmRF
bGVtZW50QXJyYXlCdWZmZXIuZ2V0KCkpOwogICAgIGZvciAoYXV0byYgc3RhdGUgOiBtX3ZlcnRl
eEF0dHJpYlN0YXRlKQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xWZXJ0
ZXhBcnJheU9iamVjdEJhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2Nh
bnZhcy9XZWJHTFZlcnRleEFycmF5T2JqZWN0QmFzZS5oCShyZXZpc2lvbiAyNzIyOTcpCisrKyBT
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFZlcnRleEFycmF5T2JqZWN0QmFzZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw4IEBACiAjaW5jbHVkZSAiV2ViR0xDb250ZXh0T2Jq
ZWN0LmgiCiAKIG5hbWVzcGFjZSBKU0MgewotY2xhc3MgU2xvdFZpc2l0b3I7CisvL2NsYXNzIFNs
b3RWaXNpdG9yOworY2xhc3MgQWJzdHJhY3RTbG90VmlzaXRvcjsKIH0KIAogbmFtZXNwYWNlIFdU
RiB7CkBAIC03Nyw3ICs3OCw4IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgc2V0VmVydGV4QXR0cmli
RGl2aXNvcihHQ0dMdWludCBpbmRleCwgR0NHTHVpbnQgZGl2aXNvcik7CiAKLSAgICB2b2lkIGFk
ZE1lbWJlcnNUb09wYXF1ZVJvb3RzKGNvbnN0IFdURjo6QWJzdHJhY3RMb2NrZXImLCBKU0M6OlNs
b3RWaXNpdG9yJik7CisvLyAgICB2b2lkIGFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzNjAwKGNvbnN0
IFdURjo6QWJzdHJhY3RMb2NrZXImLCBKU0M6OlNsb3RWaXNpdG9yJik7CisgICAgdm9pZCBhZGRN
ZW1iZXJzVG9PcGFxdWVSb290czYwMChjb25zdCBXVEY6OkFic3RyYWN0TG9ja2VyJiwgSlNDOjpB
YnN0cmFjdFNsb3RWaXNpdG9yJik7CiAKIHByb3RlY3RlZDoKICAgICBXZWJHTFZlcnRleEFycmF5
T2JqZWN0QmFzZShXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlJiwgVHlwZSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>419950</attachid>
            <date>2021-02-10 23:52:33 -0800</date>
            <delta_ts>2021-02-10 23:53:56 -0800</delta_ts>
            <desc>dirty patch with lots of debugging instrumentations &amp; refactorings.</desc>
            <filename>bug-217274h-dirty.patch</filename>
            <type>text/plain</type>
            <size>545839</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDI3MjcxMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtNjEzLDYgKzYxMyw4IEBAIHNldChKYXZhU2NyaXB0Q29yZV9QUklWQVRFX0ZSQU1FV09SS19I
RUEKICAgICBkb21qaXQvRE9NSklUSGVhcFJhbmdlLmgKICAgICBkb21qaXQvRE9NSklUU2lnbmF0
dXJlLmgKIAorICAgIGhlYXAvQWJzdHJhY3RTbG90VmlzaXRvci5oCisgICAgaGVhcC9BYnN0cmFj
dFNsb3RWaXNpdG9ySW5saW5lcy5oCiAgICAgaGVhcC9BbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmgK
ICAgICBoZWFwL0FsbG9jYXRpb25GYWlsdXJlTW9kZS5oCiAgICAgaGVhcC9BbGxvY2F0b3IuaApA
QCAtNjg2LDEyICs2ODgsMTQgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1BSSVZBVEVfRlJBTUVXT1JL
X0hFQQogICAgIGhlYXAvU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQuaAogICAgIGhlYXAvU2xvdFZp
c2l0b3IuaAogICAgIGhlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmgKKyAgICBoZWFwL1Nsb3RWaXNp
dG9yTWFjcm9zLmgKICAgICBoZWFwL1N0cm9uZy5oCiAgICAgaGVhcC9TdHJvbmdJbmxpbmVzLmgK
ICAgICBoZWFwL1N1YnNwYWNlLmgKICAgICBoZWFwL1N1YnNwYWNlSW5saW5lcy5oCiAgICAgaGVh
cC9TeW5jaHJvbm91c25lc3MuaAogICAgIGhlYXAvVGlueUJsb29tRmlsdGVyLmgKKyAgICBoZWFw
L1ZlcmlmaWVyU2xvdFZpc2l0b3IuaAogICAgIGhlYXAvVmlzaXRSYWNlS2V5LmgKICAgICBoZWFw
L1dlYWsuaAogICAgIGhlYXAvV2Vha0Jsb2NrLmgKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9Tb3VyY2VzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNl
cy50eHQJKHJldmlzaW9uIDI3MjcxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2Vz
LnR4dAkod29ya2luZyBjb3B5KQpAQCAtNTA1LDYgKzUwNSw3IEBAIGZ0bC9GVExTdGF0ZS5jcHAK
IGZ0bC9GVExUaHVua3MuY3BwCiBmdGwvRlRMVmFsdWVSYW5nZS5jcHAKIAoraGVhcC9BYnN0cmFj
dFNsb3RWaXNpdG9yLmNwcAogaGVhcC9BbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmNwcAogaGVhcC9B
bGxvY2F0b3IuY3BwCiBoZWFwL0Jsb2NrRGlyZWN0b3J5LmNwcApAQCAtNTYzLDYgKzU2NCw3IEBA
IGhlYXAvU3RvcElmTmVjZXNzYXJ5VGltZXIuY3BwCiBoZWFwL1N1YnNwYWNlLmNwcAogaGVhcC9T
eW5jaHJvbm91c1N0b3BUaGVXb3JsZE11dGF0b3JTY2hlZHVsZXIuY3BwCiBoZWFwL1N5bmNocm9u
b3VzbmVzcy5jcHAKK2hlYXAvVmVyaWZpZXJTbG90VmlzaXRvci5jcHAKIGhlYXAvVmlzaXRSYWNl
S2V5LmNwcAogaGVhcC9XZWFrLmNwcAogaGVhcC9XZWFrQmxvY2suY3BwCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQVBJL0pTQVBJV3JhcHBlck9iamVjdC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNBUElXcmFwcGVyT2JqZWN0LmgJKHJldmlzaW9uIDI3
MjcxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNBUElXcmFwcGVyT2JqZWN0LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC00MSw3ICs0MSw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9p
ZCBzdWJzcGFjZUZvcihWTSYpIHsgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQogICAg
IAogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENo
aWxkcmVuKEpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX0VYUE9SVF9W
SVNJVF9DSElMRFJFTjsKICAgICAKICAgICB2b2lkKiB3cmFwcGVkT2JqZWN0KCkgeyByZXR1cm4g
bV93cmFwcGVkT2JqZWN0OyB9CiAgICAgdm9pZCBzZXRXcmFwcGVkT2JqZWN0KHZvaWQqKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNBUElXcmFwcGVyT2JqZWN0Lm1tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNBUElXcmFwcGVyT2JqZWN0Lm1t
CShyZXZpc2lvbiAyNzI3MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQVBJV3Jh
cHBlck9iamVjdC5tbQkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM3LDcgKzM3LDcgQEAKIGNsYXNzIEpT
QVBJV3JhcHBlck9iamVjdEhhbmRsZU93bmVyIGZpbmFsIDogcHVibGljIEpTQzo6V2Vha0hhbmRs
ZU93bmVyIHsKIHB1YmxpYzoKICAgICB2b2lkIGZpbmFsaXplKEpTQzo6SGFuZGxlPEpTQzo6VW5r
bm93bj4sIHZvaWQqKSBmaW5hbDsKLSAgICBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3Rz
KEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6U2xvdFZpc2l0
b3ImLCBjb25zdCBjaGFyKiopIGZpbmFsOworICAgIGJvb2wgaXNSZWFjaGFibGVGcm9tT3BhcXVl
Um9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCwgSlNDOjpBYnN0
cmFjdFNsb3RWaXNpdG9yJiwgY29uc3QgY2hhcioqKSBmaW5hbDsKIH07CiAKIHN0YXRpYyBKU0FQ
SVdyYXBwZXJPYmplY3RIYW5kbGVPd25lcioganNBUElXcmFwcGVyT2JqZWN0SGFuZGxlT3duZXIo
KQpAQCAtNTYsMTQgKzU2LDE1IEBAIHZvaWQgSlNBUElXcmFwcGVyT2JqZWN0SGFuZGxlT3duZXI6
OmZpbmEKICAgICBKU0M6OldlYWtTZXQ6OmRlYWxsb2NhdGUoSlNDOjpXZWFrSW1wbDo6YXNXZWFr
SW1wbChoYW5kbGUuc2xvdCgpKSk7CiB9CiAKLWJvb2wgSlNBUElXcmFwcGVyT2JqZWN0SGFuZGxl
T3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93
bj4gaGFuZGxlLCB2b2lkKiwgSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioq
KQorYm9vbCBKU0FQSVdyYXBwZXJPYmplY3RIYW5kbGVPd25lcjo6aXNSZWFjaGFibGVGcm9tT3Bh
cXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBKU0M6OkFi
c3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKikKIHsKICAgICBKU0M6OkpT
QVBJV3JhcHBlck9iamVjdCogd3JhcHBlck9iamVjdCA9IEpTQzo6anNDYXN0PEpTQzo6SlNBUElX
cmFwcGVyT2JqZWN0Kj4oaGFuZGxlLmdldCgpLmFzQ2VsbCgpKTsKICAgICAvLyBXZSB1c2UgdGhl
IEpTR2xvYmFsT2JqZWN0IHdoZW4gcHJvY2Vzc2luZyB3ZWFrIGhhbmRsZXMgdG8gcHJldmVudCB0
aGUgc2l0dWF0aW9uIHdoZXJlIHVzaW5nCiAgICAgLy8gdGhlIHNhbWUgT2JqZWN0aXZlLUMgb2Jq
ZWN0IGluIG11bHRpcGxlIGdsb2JhbCBvYmplY3RzIGtlZXBzIGFsbCBvZiB0aGUgZ2xvYmFsIG9i
amVjdHMgYWxpdmUuCiAgICAgaWYgKCF3cmFwcGVyT2JqZWN0LT53cmFwcGVkT2JqZWN0KCkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gdmlzaXRvci52bSgpLmhlYXAuaXNNYXJr
ZWQod3JhcHBlck9iamVjdC0+c3RydWN0dXJlKCktPmdsb2JhbE9iamVjdCgpKSAmJiB2aXNpdG9y
LmNvbnRhaW5zT3BhcXVlUm9vdCh3cmFwcGVyT2JqZWN0LT53cmFwcGVkT2JqZWN0KCkpOworLy8g
ICAgcmV0dXJuIHZpc2l0b3Iudm0oKS5oZWFwLmlzTWFya2VkKHdyYXBwZXJPYmplY3QtPnN0cnVj
dHVyZSgpLT5nbG9iYWxPYmplY3QoKSkgJiYgdmlzaXRvci5jb250YWluc09wYXF1ZVJvb3Qod3Jh
cHBlck9iamVjdC0+d3JhcHBlZE9iamVjdCgpKTsKKyAgICByZXR1cm4gdmlzaXRvci5pc01hcmtl
ZCh3cmFwcGVyT2JqZWN0LT5zdHJ1Y3R1cmUoKS0+Z2xvYmFsT2JqZWN0KCkpICYmIHZpc2l0b3Iu
Y29udGFpbnNPcGFxdWVSb290KHdyYXBwZXJPYmplY3QtPndyYXBwZWRPYmplY3QoKSk7CiB9CiAK
IG5hbWVzcGFjZSBKU0MgewpAQCAtNzMsNiArNzQsOCBAQCBzdGF0aWMgSlNDX0RFQ0xBUkVfSE9T
VF9GVU5DVElPTihjb25zdHJ1CiBzdGF0aWMgSlNDX0RFQ0xBUkVfQ1VTVE9NX0dFVFRFUihjYWxs
YmFja0dldHRlckpTQVBJV3JhcHBlck9iamVjdENhbGxiYWNrT2JqZWN0KTsKIHN0YXRpYyBKU0Nf
REVDTEFSRV9DVVNUT01fR0VUVEVSKHN0YXRpY0Z1bmN0aW9uR2V0dGVySlNBUElXcmFwcGVyT2Jq
ZWN0Q2FsbGJhY2tPYmplY3QpOwogCitERUZJTkVfVEVNUExBVEVfVklTSVRfQ0hJTERSRU4odGVt
cGxhdGU8PiwgSlNDYWxsYmFja09iamVjdDxKU0FQSVdyYXBwZXJPYmplY3Q+KTsKKwogdGVtcGxh
dGUgPD4gY29uc3QgQ2xhc3NJbmZvIEpTQ2FsbGJhY2tPYmplY3Q8SlNBUElXcmFwcGVyT2JqZWN0
Pjo6c19pbmZvID0geyAiSlNBUElXcmFwcGVyT2JqZWN0IiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0
ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU0NhbGxiYWNrT2JqZWN0KSB9OwogdGVt
cGxhdGUgPD4gY29uc3QgYm9vbCBKU0NhbGxiYWNrT2JqZWN0PEpTQVBJV3JhcHBlck9iamVjdD46
Om5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOwogCkBAIC0xMjMsNyArMTI2LDggQEAgdm9pZCBKU0FQ
SVdyYXBwZXJPYmplY3Q6OnNldFdyYXBwZWRPYmplYwogICAgIG1fd3JhcHBlZE9iamVjdCA9IFtz
dGF0aWNfY2FzdDxpZD4od3JhcHBlZE9iamVjdCkgcmV0YWluXTsKIH0KIAotdm9pZCBKU0FQSVdy
YXBwZXJPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBKU0M6OlNsb3RWaXNpdG9y
JiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNBUElXcmFwcGVy
T2JqZWN0Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3Ip
CiB7CiAgICAgSlNBUElXcmFwcGVyT2JqZWN0KiB0aGlzT2JqZWN0ID0gSlNDOjpqc0Nhc3Q8SlNB
UElXcmFwcGVyT2JqZWN0Kj4oY2VsbCk7CiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbihjZWxsLCB2
aXNpdG9yKTsKQEAgLTEzMyw2ICsxMzcsOCBAQCB2b2lkIEpTQVBJV3JhcHBlck9iamVjdDo6dmlz
aXRDaGlsZHJlbihKCiAgICAgICAgIHNjYW5FeHRlcm5hbE9iamVjdEdyYXBoKHZpc2l0b3Iudm0o
KSwgdmlzaXRvciwgd3JhcHBlZE9iamVjdCk7CiB9CiAKK0RFRklORV9FWFBPUlRfVklTSVRfQ0hJ
TERSRU4oSlNBUElXcmFwcGVyT2JqZWN0KTsKKwogdGVtcGxhdGUgPD4KIElzb1N1YnNwYWNlKiBK
U0NhbGxiYWNrT2JqZWN0PEpTQVBJV3JhcHBlck9iamVjdD46OnN1YnNwYWNlRm9ySW1wbChWTSYg
dm0sIFN1YnNwYWNlQWNjZXNzIG1vZGUpCiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
QVBJL0pTQ2FsbGJhY2tPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdC5jcHAJKHJldmlzaW9uIDI3MjcxMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMTcgQXBwbGUgSW5j
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIwIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwNyBFcmljIFNl
aWRlbCA8ZXJpY0B3ZWJraXQub3JnPgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtNDEsNiArNDEsOSBA
QCBzdGF0aWMgSlNDX0RFQ0xBUkVfQ1VTVE9NX0dFVFRFUihzdGF0aWNGCiBzdGF0aWMgSlNDX0RF
Q0xBUkVfQ1VTVE9NX0dFVFRFUihjYWxsYmFja0dldHRlckpTR2xvYmFsT2JqZWN0Q2FsbGJhY2tP
YmplY3QpOwogc3RhdGljIEpTQ19ERUNMQVJFX0NVU1RPTV9HRVRURVIoc3RhdGljRnVuY3Rpb25H
ZXR0ZXJKU0dsb2JhbE9iamVjdENhbGxiYWNrT2JqZWN0KTsKIAorREVGSU5FX1RFTVBMQVRFX1ZJ
U0lUX0NISUxEUkVOKHRlbXBsYXRlPD4sIEpTQ2FsbGJhY2tPYmplY3Q8SlNOb25GaW5hbE9iamVj
dD4pOworREVGSU5FX1RFTVBMQVRFX1ZJU0lUX0NISUxEUkVOKHRlbXBsYXRlPD4sIEpTQ2FsbGJh
Y2tPYmplY3Q8SlNHbG9iYWxPYmplY3Q+KTsKKwogLy8gRGVmaW5lIHRoZSB0d28gdHlwZXMgb2Yg
SlNDYWxsYmFja09iamVjdHMgd2Ugc3VwcG9ydC4KIHRlbXBsYXRlIDw+IGNvbnN0IENsYXNzSW5m
byBKU0NhbGxiYWNrT2JqZWN0PEpTTm9uRmluYWxPYmplY3Q+OjpzX2luZm8gPSB7ICJDYWxsYmFj
a09iamVjdCIsICZCYXNlOjpzX2luZm8sIG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0Rf
VEFCTEUoSlNDYWxsYmFja09iamVjdCkgfTsKIHRlbXBsYXRlIDw+IGNvbnN0IENsYXNzSW5mbyBK
U0NhbGxiYWNrT2JqZWN0PEpTR2xvYmFsT2JqZWN0Pjo6c19pbmZvID0geyAiQ2FsbGJhY2tHbG9i
YWxPYmplY3QiLCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9E
X1RBQkxFKEpTQ2FsbGJhY2tPYmplY3QpIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
QVBJL0pTQ2FsbGJhY2tPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvQVBJL0pTQ2FsbGJhY2tPYmplY3QuaAkocmV2aXNpb24gMjcyNzEwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTY5
LDcgKzY5LDEwIEBAIHB1YmxpYzoKICAgICAgICAgbV9wcml2YXRlUHJvcGVydGllcy0+ZGVsZXRl
UHJpdmF0ZVByb3BlcnR5KHByb3BlcnR5TmFtZSk7CiAgICAgfQogCi0gICAgdm9pZCB2aXNpdENo
aWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47
CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgorICAgIHZvaWQgdmlzaXRDaGlsZHJl
bihWaXNpdG9yJiB2aXNpdG9yKQogICAgIHsKICAgICAgICAgSlNQcml2YXRlUHJvcGVydHlNYXAq
IHByb3BlcnRpZXMgPSBtX3ByaXZhdGVQcm9wZXJ0aWVzLmdldCgpOwogICAgICAgICBpZiAoIXBy
b3BlcnRpZXMpCkBAIC0xMDMsNyArMTA2LDggQEAgcHVibGljOgogICAgICAgICAgICAgbV9wcm9w
ZXJ0eU1hcC5yZW1vdmUocHJvcGVydHlOYW1lLmltcGwoKSk7CiAgICAgICAgIH0KIAotICAgICAg
ICB2b2lkIHZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisgICAgICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFZpc2l0b3I+CisgICAgICAgIHZvaWQgdmlzaXRDaGlsZHJlbihWaXNpdG9y
JiB2aXNpdG9yKQogICAgICAgICB7CiAgICAgICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2xv
Y2spOwogICAgICAgICAgICAgZm9yIChhdXRvJiBwYWlyIDogbV9wcm9wZXJ0eU1hcCkgewpAQCAt
MjE2LDEzICsyMjAsNyBAQCBwcml2YXRlOgogICAgIHN0YXRpYyBDYWxsRGF0YSBnZXRDb25zdHJ1
Y3REYXRhKEpTQ2VsbCopOwogICAgIHN0YXRpYyBDYWxsRGF0YSBnZXRDYWxsRGF0YShKU0NlbGwq
KTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90Vmlz
aXRvciYgdmlzaXRvcikKLSAgICB7Ci0gICAgICAgIEpTQ2FsbGJhY2tPYmplY3QqIHRoaXNPYmpl
Y3QgPSBqc0Nhc3Q8SlNDYWxsYmFja09iamVjdCo+KGNlbGwpOwotICAgICAgICBBU1NFUlRfR0Nf
T0JKRUNUX0lOSEVSSVRTKChzdGF0aWNfY2FzdDxQYXJlbnQqPih0aGlzT2JqZWN0KSksIEpTQ2Fs
bGJhY2tPYmplY3Q8UGFyZW50Pjo6aW5mbygpKTsKLSAgICAgICAgUGFyZW50Ojp2aXNpdENoaWxk
cmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwotICAgICAgICB0aGlzT2JqZWN0LT5tX2NhbGxiYWNr
T2JqZWN0RGF0YS0+dmlzaXRDaGlsZHJlbih2aXNpdG9yKTsKLSAgICB9CisgICAgREVDTEFSRV9U
RU1QTEFURV9WSVNJVF9DSElMRFJFTjsKIAogICAgIHZvaWQgaW5pdChKU0dsb2JhbE9iamVjdCop
OwogIApAQCAtMjQ1LDYgKzI0MywxNiBAQCBwcml2YXRlOgogICAgIGNvbnN0IENsYXNzSW5mbyog
bV9jbGFzc0luZm8geyBudWxscHRyIH07CiB9OwogCit0ZW1wbGF0ZSA8Y2xhc3MgUGFyZW50Pgor
dGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNDYWxsYmFja09iamVjdDxQYXJlbnQ+
Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCit7Cisg
ICAgSlNDYWxsYmFja09iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0NhbGxiYWNrT2JqZWN0
Kj4oY2VsbCk7CisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUygoc3RhdGljX2Nhc3Q8UGFy
ZW50Kj4odGhpc09iamVjdCkpLCBKU0NhbGxiYWNrT2JqZWN0PFBhcmVudD46OmluZm8oKSk7Cisg
ICAgUGFyZW50Ojp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOworICAgIHRoaXNP
YmplY3QtPm1fY2FsbGJhY2tPYmplY3REYXRhLT52aXNpdENoaWxkcmVuKHZpc2l0b3IpOworfQor
CiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogLy8gaW5jbHVkZSB0aGUgYWN0dWFsIHRlbXBsYXRlIGNs
YXNzIGltcGxlbWVudGF0aW9uCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTTWFu
YWdlZFZhbHVlLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNN
YW5hZ2VkVmFsdWUubW0JKHJldmlzaW9uIDI3MjcxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9BUEkvSlNNYW5hZ2VkVmFsdWUubW0JKHdvcmtpbmcgY29weSkKQEAgLTQyLDcgKzQyLDcgQEAK
IGNsYXNzIEpTTWFuYWdlZFZhbHVlSGFuZGxlT3duZXIgZmluYWwgOiBwdWJsaWMgSlNDOjpXZWFr
SGFuZGxlT3duZXIgewogcHVibGljOgogICAgIHZvaWQgZmluYWxpemUoSlNDOjpIYW5kbGU8SlND
OjpVbmtub3duPiwgdm9pZCogY29udGV4dCkgZmluYWw7Ci0gICAgYm9vbCBpc1JlYWNoYWJsZUZy
b21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0LCBK
U0M6OlNsb3RWaXNpdG9yJiwgY29uc3QgY2hhcioqKSBmaW5hbDsKKyAgICBib29sIGlzUmVhY2hh
YmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRl
eHQsIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYsIGNvbnN0IGNoYXIqKikgZmluYWw7CiB9Owog
CiBzdGF0aWMgSlNNYW5hZ2VkVmFsdWVIYW5kbGVPd25lciYgbWFuYWdlZFZhbHVlSGFuZGxlT3du
ZXIoKQpAQCAtMTgwLDcgKzE4MCw3IEBAIEBpbnRlcmZhY2UgSlNNYW5hZ2VkVmFsdWUgKFByaXZh
dGVNZXRob2QKIC0gKHZvaWQpZGlzY29ubmVjdFZhbHVlOwogQGVuZAogCi1ib29sIEpTTWFuYWdl
ZFZhbHVlSGFuZGxlT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxl
PEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3Is
IGNvbnN0IGNoYXIqKiByZWFzb24pCitib29sIEpTTWFuYWdlZFZhbHVlSGFuZGxlT3duZXI6Omlz
UmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQq
IGNvbnRleHQsIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioq
IHJlYXNvbikKIHsKICAgICBpZiAoVU5MSUtFTFkocmVhc29uKSkKICAgICAgICAgKnJlYXNvbiA9
ICJKU01hbmFnZWRWYWx1ZSBpcyBvcGFxdWUgcm9vdCI7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvQVBJL0pTTWFya2luZ0NvbnN0cmFpbnRQcml2YXRlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTTWFya2luZ0NvbnN0cmFpbnRQcml2YXRlLmNwcAko
cmV2aXNpb24gMjcyNzEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU01hcmtpbmdD
b25zdHJhaW50UHJpdmF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDcgKzM2LDcgQEAgbmFt
ZXNwYWNlIHsKIEF0b21pYzx1bnNpZ25lZD4gY29uc3RyYWludENvdW50ZXI7CiAKIHN0cnVjdCBN
YXJrZXIgOiBKU01hcmtlciB7Ci0gICAgU2xvdFZpc2l0b3IqIHZpc2l0b3I7CisgICAgQWJzdHJh
Y3RTbG90VmlzaXRvciogdmlzaXRvcjsKIH07CiAKIGJvb2wgaXNNYXJrZWQoSlNNYXJrZXJSZWYg
bWFya2VyUmVmLCBKU09iamVjdFJlZiBvYmplY3RSZWYpCkBAIC00NCw3ICs0NCw4IEBAIGJvb2wg
aXNNYXJrZWQoSlNNYXJrZXJSZWYgbWFya2VyUmVmLCBKU08KICAgICBpZiAoIW9iamVjdFJlZikK
ICAgICAgICAgcmV0dXJuIHRydWU7IC8vIE51bGwgaXMgYW4gaW1tb3J0YWwgb2JqZWN0LgogICAg
IAotICAgIHJldHVybiBzdGF0aWNfY2FzdDxNYXJrZXIqPihtYXJrZXJSZWYpLT52aXNpdG9yLT52
bSgpLmhlYXAuaXNNYXJrZWQodG9KUyhvYmplY3RSZWYpKTsKKy8vICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxNYXJrZXIqPihtYXJrZXJSZWYpLT52aXNpdG9yLT52bSgpLmhlYXAuaXNNYXJrZWQodG9K
UyhvYmplY3RSZWYpKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8TWFya2VyKj4obWFya2VyUmVm
KS0+dmlzaXRvci0+aXNNYXJrZWQodG9KUyhvYmplY3RSZWYpKTsKIH0KIAogdm9pZCBtYXJrKEpT
TWFya2VyUmVmIG1hcmtlclJlZiwgSlNPYmplY3RSZWYgb2JqZWN0UmVmKQpAQCAtNzQsMTEgKzc1
LDExIEBAIHZvaWQgSlNDb250ZXh0R3JvdXBBZGRNYXJraW5nQ29uc3RyYWludCgKICAgICAgICAg
dG9DU3RyaW5nKCJBbWMiLCBjb25zdHJhaW50SW5kZXgsICIoIiwgUmF3UG9pbnRlcihiaXR3aXNl
X2Nhc3Q8dm9pZCo+KGNvbnN0cmFpbnRDYWxsYmFjaykpLCAiKSIpLAogICAgICAgICB0b0NTdHJp
bmcoIkFQSSBNYXJraW5nIENvbnN0cmFpbnQgIyIsIGNvbnN0cmFpbnRJbmRleCwgIiAoIiwgUmF3
UG9pbnRlcihiaXR3aXNlX2Nhc3Q8dm9pZCo+KGNvbnN0cmFpbnRDYWxsYmFjaykpLCAiLCAiLCBS
YXdQb2ludGVyKHVzZXJEYXRhKSwgIikiKSwKICAgICAgICAgW2NvbnN0cmFpbnRDYWxsYmFjaywg
dXNlckRhdGFdCi0gICAgICAgIChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IpIHsKKyAgICAgICAg
KEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsKICAgICAgICAgICAgIE1hcmtlciBtYXJr
ZXI7CiAgICAgICAgICAgICBtYXJrZXIuSXNNYXJrZWQgPSBpc01hcmtlZDsKICAgICAgICAgICAg
IG1hcmtlci5NYXJrID0gbWFyazsKLSAgICAgICAgICAgIG1hcmtlci52aXNpdG9yID0gJnNsb3RW
aXNpdG9yOworICAgICAgICAgICAgbWFya2VyLnZpc2l0b3IgPSAmdmlzaXRvcjsKICAgICAgICAg
ICAgIAogICAgICAgICAgICAgY29uc3RyYWludENhbGxiYWNrKCZtYXJrZXIsIHVzZXJEYXRhKTsK
ICAgICAgICAgfSwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWaXJ0dWFsTWFj
aGluZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmlydHVh
bE1hY2hpbmUubW0JKHJldmlzaW9uIDI3MjcxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9B
UEkvSlNWaXJ0dWFsTWFjaGluZS5tbQkod29ya2luZyBjb3B5KQpAQCAtMzE1LDcgKzMxNSw4IEBA
ICsgKHZvaWQpc2V0Q3Jhc2hPblZNQ3JlYXRpb246KEJPT0wpc2hvdWwKIAogQGVuZAogCi1zdGF0
aWMgdm9pZCBzY2FuRXh0ZXJuYWxPYmplY3RHcmFwaChKU0M6OlZNJiB2bSwgSlNDOjpTbG90Vmlz
aXRvciYgdmlzaXRvciwgdm9pZCogcm9vdCwgYm9vbCBsb2NrQWNxdWlyZWQpCit0ZW1wbGF0ZTx0
eXBlbmFtZSBWaXNpdG9yPgorc3RhdGljIHZvaWQgc2NhbkV4dGVybmFsT2JqZWN0R3JhcGgoSlND
OjpWTSYgdm0sIFZpc2l0b3ImIHZpc2l0b3IsIHZvaWQqIHJvb3QsIGJvb2wgbG9ja0FjcXVpcmVk
KQogewogICAgIEBhdXRvcmVsZWFzZXBvb2wgewogICAgICAgICBKU1ZpcnR1YWxNYWNoaW5lICp2
aXJ0dWFsTWFjaGluZSA9IFtKU1ZNV3JhcHBlckNhY2hlIHdyYXBwZXJGb3JKU0NvbnRleHRHcm91
cFJlZjp0b1JlZigmdm0pXTsKQEAgLTM0NywxMyArMzQ4LDE3IEBAIHN0YXRpYyB2b2lkIHNjYW5F
eHRlcm5hbE9iamVjdEdyYXBoKEpTQzoKICAgICB9CiB9CiAKLXZvaWQgc2NhbkV4dGVybmFsT2Jq
ZWN0R3JhcGgoSlNDOjpWTSYgdm0sIEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IsIHZvaWQqIHJv
b3QpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBzY2FuRXh0ZXJuYWxPYmplY3RH
cmFwaChKU0M6OlZNJiB2bSwgVmlzaXRvciYgdmlzaXRvciwgdm9pZCogcm9vdCkKIHsKICAgICBi
b29sIGxvY2tBY3F1aXJlZCA9IGZhbHNlOwogICAgIHNjYW5FeHRlcm5hbE9iamVjdEdyYXBoKHZt
LCB2aXNpdG9yLCByb290LCBsb2NrQWNxdWlyZWQpOwogfQogCi12b2lkIHNjYW5FeHRlcm5hbFJl
bWVtYmVyZWRTZXQoSlNDOjpWTSYgdm0sIEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1w
bGF0ZSB2b2lkIHNjYW5FeHRlcm5hbE9iamVjdEdyYXBoKEpTQzo6Vk0mLCBKU0M6OlNsb3RWaXNp
dG9yJiwgdm9pZCopOwordGVtcGxhdGUgdm9pZCBzY2FuRXh0ZXJuYWxPYmplY3RHcmFwaChKU0M6
OlZNJiwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiwgdm9pZCopOworCit2b2lkIHNjYW5FeHRl
cm5hbFJlbWVtYmVyZWRTZXQoSlNDOjpWTSYgdm0sIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYg
dmlzaXRvcikKIHsKICAgICBAYXV0b3JlbGVhc2Vwb29sIHsKICAgICAgICAgSlNWaXJ0dWFsTWFj
aGluZSAqdmlydHVhbE1hY2hpbmUgPSBbSlNWTVdyYXBwZXJDYWNoZSB3cmFwcGVyRm9ySlNDb250
ZXh0R3JvdXBSZWY6dG9SZWYoJnZtKV07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJ
L0pTVmlydHVhbE1hY2hpbmVJbnRlcm5hbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvSlNWaXJ0dWFsTWFjaGluZUludGVybmFsLmgJKHJldmlzaW9uIDI3MjcxMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWaXJ0dWFsTWFjaGluZUludGVybmFsLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDggQEAKIAogbmFtZXNwYWNlIEpTQyB7CiBjbGFz
cyBWTTsKLWNsYXNzIFNsb3RWaXNpdG9yOworLy9jbGFzcyBTbG90VmlzaXRvcjsKK2NsYXNzIEFi
c3RyYWN0U2xvdFZpc2l0b3I7CiB9CiAKICNpZiBkZWZpbmVkKF9fT0JKQ19fKQpAQCAtNTQsOCAr
NTUsOCBAQCBKU0NvbnRleHRHcm91cFJlZiBnZXRHcm91cEZyb21WaXJ0dWFsTWFjCiAKICNlbmRp
ZiAvLyBkZWZpbmVkKF9fT0JKQ19fKQogCi12b2lkIHNjYW5FeHRlcm5hbE9iamVjdEdyYXBoKEpT
Qzo6Vk0mLCBKU0M6OlNsb3RWaXNpdG9yJiwgdm9pZCogcm9vdCk7Ci12b2lkIHNjYW5FeHRlcm5h
bFJlbWVtYmVyZWRTZXQoSlNDOjpWTSYsIEpTQzo6U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlPHR5
cGVuYW1lIFZpc2l0b3I+IHZvaWQgc2NhbkV4dGVybmFsT2JqZWN0R3JhcGgoSlNDOjpWTSYsIFZp
c2l0b3ImLCB2b2lkKiByb290KTsKK3ZvaWQgc2NhbkV4dGVybmFsUmVtZW1iZXJlZFNldChKU0M6
OlZNJiwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAKICNlbmRpZiAvLyBKU0NfT0JKQ19B
UElfRU5BQkxFRAogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL01hcmtlZEpTVmFs
dWVSZWZBcnJheS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9N
YXJrZWRKU1ZhbHVlUmVmQXJyYXkuY3BwCShyZXZpc2lvbiAyNzI3MTApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvQVBJL01hcmtlZEpTVmFsdWVSZWZBcnJheS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQ2LDcgKzQ2LDkgQEAgTWFya2VkSlNWYWx1ZVJlZkFycmF5Ojp+TWFya2VkSlNWYWx1ZVJl
ZgogICAgICAgICByZW1vdmUoKTsKIH0KIAotdm9pZCBNYXJrZWRKU1ZhbHVlUmVmQXJyYXk6OnZp
c2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy90ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPgorLy92b2lkIE1hcmtlZEpTVmFsdWVSZWZBcnJheTo6dmlzaXRBZ2dyZWdhdGUoVmlz
aXRvciYgdmlzaXRvcikKK3ZvaWQgTWFya2VkSlNWYWx1ZVJlZkFycmF5Ojp2aXNpdEFnZ3JlZ2F0
ZTEoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU1ZhbHVlUmVmKiBidWZm
ZXIgPSBkYXRhKCk7CiAgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IDA7IGluZGV4IDwgbV9zaXpl
OyArK2luZGV4KSB7CkBAIC02Miw0ICs2NCw3IEBAIHZvaWQgTWFya2VkSlNWYWx1ZVJlZkFycmF5
Ojp2aXNpdEFnZ3JlZ2EKICAgICB9CiB9CiAKKy8vdGVtcGxhdGUgdm9pZCBNYXJrZWRKU1ZhbHVl
UmVmQXJyYXk6OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJik7CisvL3RlbXBsYXRlIHZvaWQg
TWFya2VkSlNWYWx1ZVJlZkFycmF5Ojp2aXNpdEFnZ3JlZ2F0ZShWZXJpZmllclNsb3RWaXNpdG9y
Jik7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQ
SS9NYXJrZWRKU1ZhbHVlUmVmQXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvQVBJL01hcmtlZEpTVmFsdWVSZWZBcnJheS5oCShyZXZpc2lvbiAyNzI3MTApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL01hcmtlZEpTVmFsdWVSZWZBcnJheS5oCSh3b3JraW5n
IGNvcHkpCkBAIC02Miw3ICs2Miw4IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1faW5saW5l
QnVmZmVyOwogICAgIH0KIAotICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImKTsK
Ky8vICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgdmlzaXRBZ2dyZWdhdGUoVmlz
aXRvciYpOworICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUxKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsK
IAogcHJpdmF0ZToKICAgICB1bnNpZ25lZCBtX3NpemU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvQVBJL2dsaWIvSlNBUElXcmFwcGVyR2xvYmFsT2JqZWN0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNBUElXcmFwcGVyR2xvYmFsT2JqZWN0
LmNwcAkocmV2aXNpb24gMjcyNzEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGli
L0pTQVBJV3JhcHBlckdsb2JhbE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU5LDYgKzU5
LDggQEAgc3RhdGljIEpTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJT04oY29uc3RydQogc3RhdGljIEpT
Q19ERUNMQVJFX0NVU1RPTV9HRVRURVIoY2FsbGJhY2tHZXR0ZXJKU0FQSVdyYXBwZXJHbG9iYWxP
YmplY3RDYWxsYmFja09iamVjdCk7CiBzdGF0aWMgSlNDX0RFQ0xBUkVfQ1VTVE9NX0dFVFRFUihz
dGF0aWNGdW5jdGlvbkdldHRlckpTQVBJV3JhcHBlckdsb2JhbE9iamVjdENhbGxiYWNrT2JqZWN0
KTsKIAorREVGSU5FX1RFTVBMQVRFX1ZJU0lUX0NISUxEUkVOKHRlbXBsYXRlPD4sIEpTQ2FsbGJh
Y2tPYmplY3Q8SlNBUElXcmFwcGVyR2xvYmFsT2JqZWN0Pik7CisKIHRlbXBsYXRlIDw+IGNvbnN0
IENsYXNzSW5mbyBKU0NhbGxiYWNrT2JqZWN0PEpTQVBJV3JhcHBlckdsb2JhbE9iamVjdD46OnNf
aW5mbyA9IHsgIkpTQVBJV3JhcHBlckdsb2JhbE9iamVjdCIsICZCYXNlOjpzX2luZm8sIG51bGxw
dHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNDYWxsYmFja09iamVjdCkgfTsKIHRl
bXBsYXRlPD4gY29uc3QgYm9vbCBKU0NhbGxiYWNrT2JqZWN0PEpTQVBJV3JhcHBlckdsb2JhbE9i
amVjdD46Om5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOwogCkBAIC0xNDQsOSArMTQ2LDkgQEAgdm9p
ZCBKU0FQSVdyYXBwZXJHbG9iYWxPYmplY3Q6OmZpbmlzaENyZQogICAgIFdlYWtTZXQ6OmFsbG9j
YXRlKHRoaXMsIGpzQVBJV3JhcHBlckdsb2JhbE9iamVjdEhhbmRsZU93bmVyKCksIDApOyAvLyBC
YWxhbmNlZCBpbiBKU0FQSVdyYXBwZXJHbG9iYWxPYmplY3RIYW5kbGVPd25lcjo6ZmluYWxpemUu
CiB9CiAKLXZvaWQgSlNBUElXcmFwcGVyR2xvYmFsT2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2Vs
bCogY2VsbCwgSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKLXsKLSAgICBCYXNlOjp2aXNpdENo
aWxkcmVuKGNlbGwsIHZpc2l0b3IpOwotfQorLy92b2lkIEpTQVBJV3JhcHBlckdsb2JhbE9iamVj
dDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3Ip
CisvL3sKKy8vICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4oY2VsbCwgdmlzaXRvcik7CisvL30KIAog
fSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIv
SlNBUElXcmFwcGVyR2xvYmFsT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL0FQSS9nbGliL0pTQVBJV3JhcHBlckdsb2JhbE9iamVjdC5oCShyZXZpc2lvbiAyNzI3
MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNBUElXcmFwcGVyR2xvYmFs
T2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDcgKzM5LDcgQEAgcHVibGljOgogICAgIHN0
YXRpYyB2b2lkIHN1YnNwYWNlRm9yKFZNJikgeyBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OyB9CiAKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7Ci0gICAgc3RhdGljIHZvaWQgdmlz
aXRDaGlsZHJlbihKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJik7CisgICAgLy8gc3RhdGljIHZv
aWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJik7CiAKICAgICBKU0NH
TGliV3JhcHBlck9iamVjdCogd3JhcHBlZE9iamVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fd3JhcHBl
ZE9iamVjdDsgfQogICAgIHZvaWQgc2V0V3JhcHBlZE9iamVjdChKU0NHTGliV3JhcHBlck9iamVj
dCogd3JhcHBlZE9iamVjdCkgeyBtX3dyYXBwZWRPYmplY3QgPSB3cmFwcGVkT2JqZWN0OyB9Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNBUElXcmFwcGVyT2JqZWN0R0xp
Yi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQVBJ
V3JhcHBlck9iamVjdEdMaWIuY3BwCShyZXZpc2lvbiAyNzI3MTApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvQVBJL2dsaWIvSlNBUElXcmFwcGVyT2JqZWN0R0xpYi5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJKU0FQ
SVdyYXBwZXJPYmplY3QuaCIKIAorI2luY2x1ZGUgIkFic3RyYWN0U2xvdFZpc2l0b3IuaCIKICNp
bmNsdWRlICJKU0NHTGliV3JhcHBlck9iamVjdC5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIK
ICNpbmNsdWRlICJKU0NhbGxiYWNrT2JqZWN0LmgiCkBAIC0zNiw3ICszNyw4IEBACiBjbGFzcyBK
U0FQSVdyYXBwZXJPYmplY3RIYW5kbGVPd25lciBmaW5hbCA6IHB1YmxpYyBKU0M6OldlYWtIYW5k
bGVPd25lciB7CiBwdWJsaWM6CiAgICAgdm9pZCBmaW5hbGl6ZShKU0M6OkhhbmRsZTxKU0M6OlVu
a25vd24+LCB2b2lkKikgZmluYWw7Ci0gICAgYm9vbCBpc1JlYWNoYWJsZUZyb21PcGFxdWVSb290
cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0LCBKU0M6OlNsb3RWaXNp
dG9yJiwgY29uc3QgY2hhcioqKSBmaW5hbDsKKy8vICAgICBib29sIGlzUmVhY2hhYmxlRnJvbU9w
YXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6
U2xvdFZpc2l0b3ImLCBjb25zdCBjaGFyKiopIGZpbmFsOworICAgIGJvb2wgaXNSZWFjaGFibGVG
cm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCwg
SlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiwgY29uc3QgY2hhcioqKSBmaW5hbDsKIH07CiAKIHN0
YXRpYyBKU0FQSVdyYXBwZXJPYmplY3RIYW5kbGVPd25lcioganNBUElXcmFwcGVyT2JqZWN0SGFu
ZGxlT3duZXIoKQpAQCAtNTUsNyArNTcsOCBAQCB2b2lkIEpTQVBJV3JhcHBlck9iamVjdEhhbmRs
ZU93bmVyOjpmaW5hCiAgICAgSlNDOjpXZWFrU2V0OjpkZWFsbG9jYXRlKEpTQzo6V2Vha0ltcGw6
OmFzV2Vha0ltcGwoaGFuZGxlLnNsb3QoKSkpOwogfQogCi1ib29sIEpTQVBJV3JhcHBlck9iamVj
dEhhbmRsZU93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6
OlVua25vd24+IGhhbmRsZSwgdm9pZCosIEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0
IGNoYXIqKikKKy8vIGJvb2wgSlNBUElXcmFwcGVyT2JqZWN0SGFuZGxlT3duZXI6OmlzUmVhY2hh
YmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lk
KiwgSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqKQorYm9vbCBKU0FQSVdy
YXBwZXJPYmplY3RIYW5kbGVPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpI
YW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0
b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKikKIHsKICAgICBKU0M6OkpTQVBJV3JhcHBlck9iamVj
dCogd3JhcHBlck9iamVjdCA9IEpTQzo6anNDYXN0PEpTQzo6SlNBUElXcmFwcGVyT2JqZWN0Kj4o
aGFuZGxlLmdldCgpLmFzQ2VsbCgpKTsKICAgICAvLyBXZSB1c2UgdGhlIEpTR2xvYmFsT2JqZWN0
IHdoZW4gcHJvY2Vzc2luZyB3ZWFrIGhhbmRsZXMgdG8gcHJldmVudCB0aGUgc2l0dWF0aW9uIHdo
ZXJlIHVzaW5nCkBAIC03Miw2ICs3NSw4IEBAIHN0YXRpYyBKU0NfREVDTEFSRV9IT1NUX0ZVTkNU
SU9OKGNvbnN0cnUKIHN0YXRpYyBKU0NfREVDTEFSRV9DVVNUT01fR0VUVEVSKGNhbGxiYWNrR2V0
dGVySlNBUElXcmFwcGVyT2JqZWN0Q2FsbGJhY2tPYmplY3QpOwogc3RhdGljIEpTQ19ERUNMQVJF
X0NVU1RPTV9HRVRURVIoc3RhdGljRnVuY3Rpb25HZXR0ZXJKU0FQSVdyYXBwZXJPYmplY3RDYWxs
YmFja09iamVjdCk7CiAKK0RFRklORV9URU1QTEFURV9WSVNJVF9DSElMRFJFTih0ZW1wbGF0ZTw+
LCBKU0NhbGxiYWNrT2JqZWN0PEpTQVBJV3JhcHBlck9iamVjdD4pOworCiB0ZW1wbGF0ZSA8PiBj
b25zdCBDbGFzc0luZm8gSlNDYWxsYmFja09iamVjdDxKU0FQSVdyYXBwZXJPYmplY3Q+OjpzX2lu
Zm8gPSB7ICJKU0FQSVdyYXBwZXJPYmplY3QiLCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBudWxs
cHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTQ2FsbGJhY2tPYmplY3QpIH07CiB0ZW1wbGF0ZTw+
IGNvbnN0IGJvb2wgSlNDYWxsYmFja09iamVjdDxKU0FQSVdyYXBwZXJPYmplY3Q+OjpuZWVkc0Rl
c3RydWN0aW9uID0gdHJ1ZTsKIApAQCAtMTU1LDkgKzE2MCwxMiBAQCB2b2lkIEpTQVBJV3JhcHBl
ck9iamVjdDo6c2V0V3JhcHBlZE9iamVjCiAgICAgbV93cmFwcGVkT2JqZWN0ID0gd3JhcHBlZE9i
amVjdDsKIH0KIAotdm9pZCBKU0FQSVdyYXBwZXJPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiBjZWxsLCBKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlz
aXRvcj4KK3ZvaWQgSlNBUElXcmFwcGVyT2JqZWN0Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwq
IGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbihjZWxs
LCB2aXNpdG9yKTsKIH0KIAorREVGSU5FX0VYUE9SVF9WSVNJVF9DSElMRFJFTihKU0FQSVdyYXBw
ZXJPYmplY3QpOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCShyZXZpc2lvbiAyNzI3MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAt
MTE1OCw2ICsxMTU4LDcgQEAKIAkJNjVCODM5MkUxQkFDQUQzNjAwNDRFODI0IC8qIENhY2hlZFJl
Y292ZXJ5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2
NUI4MzkyQzFCQUNBOTJBMDA0NEU4MjQgLyogQ2FjaGVkUmVjb3ZlcnkuaCAqLzsgfTsKIAkJNkEz
OENGQUExRTMyQjVBQjAwNjAyMDZGIC8qIEFzeW5jU3RhY2tUcmFjZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkEzOENGQTgxRTMyQjU4QjAwNjAyMDZG
IC8qIEFzeW5jU3RhY2tUcmFjZS5oICovOyB9OwogCQk2QUQyQ0I0RDE5QjkxNDAxMDAwNjU3MTkg
LyogRGVidWdnZXJFdmFsRW5hYmxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNkFEMkNCNEMxOUI5MTQwMTAwMDY1NzE5IC8qIERlYnVnZ2VyRXZhbEVu
YWJsZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owor
CQk2QkNDRUMwNDI1RDFGQTI3MDAwRjM5MUQgLyogVmVyaWZpZXJTbG90VmlzaXRvcklubGluZXMu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZCQ0NFQzAz
MjVEMUZBMjcwMDBGMzkxRCAvKiBWZXJpZmllclNsb3RWaXNpdG9ySW5saW5lcy5oICovOyB9Owog
CQk3MDExM0Q0QzFBOERCMDkzMDAzODQ4QzQgLyogSXRlcmF0b3JPcGVyYXRpb25zLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MDExM0Q0QTFBOERCMDkz
MDAzODQ4QzQgLyogSXRlcmF0b3JPcGVyYXRpb25zLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzAxM0NBOEMxQjQ5MUE5NDAwQ0FFNjEzIC8qIEpT
TWljcm90YXNrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA3MDEzQ0E4QTFCNDkxQTk0MDBDQUU2MTMgLyogSlNNaWNyb3Rhc2suaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3MDVCNDFBQzFBNkU1MDFFMDA3
MTY3NTcgLyogU3ltYm9sLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA3MDVCNDFBNDFBNkU1MDFFMDA3MTY3NTcgLyogU3ltYm9sLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTE5MTYsNiArMTkxNyw3IEBA
CiAJCUUzRkY3NTMzMUQ5Q0VBMTgwMEM3RTE2RCAvKiBET01KSVRHZXR0ZXJTZXR0ZXIuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUzRkY3NTJGMUQ5Q0VB
MTIwMEM3RTE2RCAvKiBET01KSVRHZXR0ZXJTZXR0ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlFNDlEQzE2QzEyRUYyOTRFMDAxODRBMUYgLyog
U291cmNlUHJvdmlkZXJDYWNoZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRTQ5REMxNTExMkVGMjcyMjAwMTg0QTFGIC8qIFNvdXJjZVByb3ZpZGVyQ2Fj
aGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlF
NDlEQzE2RDEyRUYyOTUzMDAxODRBMUYgLyogU291cmNlUHJvdmlkZXJDYWNoZUl0ZW0uaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0OURDMTQ5MTJFRjI2
MUEwMDE4NEExRiAvKiBTb3VyY2VQcm92aWRlckNhY2hlSXRlbS5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUZFMDQxNTUzMjUyRUMwNzMwMDkxRUI1
RCAvKiBTbG90VmlzaXRvck1hY3Jvcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRkUwNDE1NTIyNTJFQzA3MzAwOTFFQjVEIC8qIFNsb3RWaXNpdG9yTWFj
cm9zLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
RkUwNUZBRkQxRkU0Q0VEQTAwMDkzMjMwIC8qIERlcHJlY2F0ZWRJbnNwZWN0b3JWYWx1ZXMuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTkyRDZBMTEx
RkJENDkxRDAwMDI0NUY0IC8qIERlcHJlY2F0ZWRJbnNwZWN0b3JWYWx1ZXMuY3BwICovOyB9Owog
CQlGRTA4NkJDQTIxMjNERUZCMDAzRjI5MjkgLyogRW50cnlGcmFtZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUwODZCQzkyMTIzREVGQTAwM0YyOTI5
IC8qIEVudHJ5RnJhbWUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQlGRTBENEEwNjFBQjhERDBBMDAyRjU0QkYgLyogRXhlY3V0aW9uVGltZUxpbWl0
VGVzdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBG
RTBENEEwNDFBQjhERDBBMDAyRjU0QkYgLyogRXhlY3V0aW9uVGltZUxpbWl0VGVzdC5jcHAgKi87
IH07CkBAIC0xOTM4LDYgKzE5NDAsNyBAQAogCQlGRTFFMkMzRjIyNDBERDU4MDBGNkI3MjkgLyog
TWFjcm9Bc3NlbWJsZXJBUk02NEUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEZFMUUyQzNFMjI0MEQzMEIwMEY2QjcyOSAvKiBNYWNyb0Fzc2VtYmxlckFS
TTY0RS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CUZFMUUyQzQwMjI0MERENjIwMEY2QjcyOSAvKiBBUk02NEVBc3NlbWJsZXIuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFMUUyQzNEMjI0MEQyRjYwMEY2
QjcyOSAvKiBBUk02NEVBc3NlbWJsZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQlGRTIwQ0U5RTE1RjA0QTk1MDBERjM0MzAgLyogTExJbnRDTG9v
cC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUyMENF
OUMxNUYwNEE5NTAwREYzNDMwIC8qIExMSW50Q0xvb3AuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlGRTI4N0QwMjI1MkZCMkU4MDBENzIzRjkgLyog
VmVyaWZpZXJTbG90VmlzaXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRkUyODdEMDEyNTJGQjJFODAwRDcyM0Y5IC8qIFZlcmlmaWVyU2xvdFZpc2l0
b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlG
RTJBODc2MDFGMDIzODE2MDBFQjMxQjIgLyogTWluaW11bVJlc2VydmVkWm9uZVNpemUuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFMkE4NzVGMUYwMjM4
MTYwMEVCMzFCMiAvKiBNaW5pbXVtUmVzZXJ2ZWRab25lU2l6ZS5oICovOyB9OwogCQlGRTMwMjJE
MzFFM0Q3M0E1MDBCQUM0OTMgLyogU2lnaWxsQ3Jhc2hBbmFseXplci5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUzMDIyRDExRTNENzM5NjAwQkFDNDkz
IC8qIFNpZ2lsbENyYXNoQW5hbHl6ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQlGRTMwMjJENzFFNDI4NTczMDBCQUM0OTMgLyogVk1JbnNwZWN0
b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFMzAy
MkQ1MUU0Mjg1NjcwMEJBQzQ5MyAvKiBWTUluc3BlY3Rvci5oICovOyB9OwpAQCAtMTk3NSw2ICsx
OTc4LDggQEAKIAkJRkU4MEMxOTcxRDc3NUNERDAwODUxMEMwIC8qIENhdGNoU2NvcGUuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFODBDMTk2MUQ3NzVC
MjcwMDg1MTBDMCAvKiBDYXRjaFNjb3BlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJRkU4REU1NEIyM0FDMURBRDAwNUM5MTQyIC8qIENhY2hlYWJs
ZUlkZW50aWZpZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEZFOERFNTRBMjNBQzFEQUQwMDVDOTE0MiAvKiBDYWNoZWFibGVJZGVudGlmaWVyLmggKi87
IH07CiAJCUZFOERFNTREMjNBQzFFODYwMDVDOTE0MiAvKiBDYWNoZWFibGVJZGVudGlmaWVySW5s
aW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkU4
REU1NEMyM0FDMUU4NjAwNUM5MTQyIC8qIENhY2hlYWJsZUlkZW50aWZpZXJJbmxpbmVzLmggKi87
IH07CisJCUZFOTEyQjRGMjUzMTE5MzMwMEZBQkRERiAvKiBBYnN0cmFjdFNsb3RWaXNpdG9yLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTkxMkI0RTI1
MzExOTMzMDBGQUJEREYgLyogQWJzdHJhY3RTbG90VmlzaXRvci5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUZFOTEyQjUxMjUzMTFBRDEwMEZBQkRE
RiAvKiBBYnN0cmFjdFNsb3RWaXNpdG9ySW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkU5MTJCNTAyNTMxMUFEMTAwRkFCRERGIC8qIEFic3Ry
YWN0U2xvdFZpc2l0b3JJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJRkU5OUIyNDkxQzI0QzNEMzAwQzgyMTU5IC8qIEpJVE5lZ0dlbmVy
YXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkU5
OUIyNDgxQzI0QjZEMzAwQzgyMTU5IC8qIEpJVE5lZ0dlbmVyYXRvci5oICovOyB9OwogCQlGRUEw
ODYyMDE4MkI3QTA0MDBGNkQ4NTEgLyogQnJlYWtwb2ludC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkVBMDg2MUUxODJCN0EwNDAwRjZEODUxIC8qIEJy
ZWFrcG9pbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQlGRUEwODYyMTE4MkI3QTA0MDBGNkQ4NTEgLyogRGVidWdnZXJQcmltaXRpdmVzLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRUEwODYxRjE4MkI3
QTA0MDBGNkQ4NTEgLyogRGVidWdnZXJQcmltaXRpdmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTM5ODcsNiArMzk5Miw3IEBACiAJCTZBMzhD
RkE4MUUzMkI1OEIwMDYwMjA2RiAvKiBBc3luY1N0YWNrVHJhY2UuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gQXN5bmNTdGFja1RyYWNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTZBRDJDQjRDMTlCOTE0MDEwMDA2NTcxOSAvKiBEZWJ1Z2dlckV2YWxFbmFibGVy
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERlYnVnZ2VyRXZhbEVuYWJsZXIu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkJBOTNDOTU5MDQ4NEM1QkFEOTMxNkVB
IC8qIEpTU2NyaXB0RmV0Y2hlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBK
U1NjcmlwdEZldGNoZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNkJDQ0VDMDMy
NUQxRkEyNzAwMEYzOTFEIC8qIFZlcmlmaWVyU2xvdFZpc2l0b3JJbmxpbmVzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZlcmlmaWVyU2xvdFZpc2l0b3JJbmxpbmVzLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcwMTEzRDQ5MUE4REIwOTMwMDM4NDhDNCAvKiBJ
dGVyYXRvck9wZXJhdGlvbnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gSXRlcmF0b3JPcGVyYXRpb25zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NzAxMTNENEExQThEQjA5MzAwMzg0OEM0IC8qIEl0ZXJhdG9yT3BlcmF0aW9ucy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJdGVyYXRvck9wZXJhdGlvbnMuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzAxM0NBODkxQjQ5MUE5NDAwQ0FFNjEzIC8qIEpTTWljcm90
YXNrLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTTWljcm90YXNr
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTUyMjAsNiArNTIyNiw3IEBACiAJ
CUY2OTJBODg3MDI1NTU5N0QwMUZGNjBGNyAvKiBKU0NKU1ZhbHVlLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTQ0pTVmFsdWUuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IH07CiAJCUY3MzkyNjkxOERD
NjQzMzBBRkNERjBENyAvKiBKU1NvdXJjZUNvZGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gSlNTb3VyY2VDb2RlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJRkUwMDI2MjIyM0YzQUYzMzAwM0EzNThGIC8qIFdlYkFzc2VtYmx5LmFzbSAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYXNt
LmFzbTsgbmFtZSA9IFdlYkFzc2VtYmx5LmFzbTsgcGF0aCA9IGxsaW50L1dlYkFzc2VtYmx5LmFz
bTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkUwNDE1NTIyNTJFQzA3MzAwOTFFQjVE
IC8qIFNsb3RWaXNpdG9yTWFjcm9zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFNsb3RWaXNpdG9yTWFjcm9zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFMDg2
QkM5MjEyM0RFRkEwMDNGMjkyOSAvKiBFbnRyeUZyYW1lLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEVudHJ5RnJhbWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
RkUwRDRBMDQxQUI4REQwQTAwMkY1NEJGIC8qIEV4ZWN1dGlvblRpbWVMaW1pdFRlc3QuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gRXhlY3V0aW9uVGltZUxpbWl0VGVz
dC5jcHA7IHBhdGggPSBBUEkvdGVzdHMvRXhlY3V0aW9uVGltZUxpbWl0VGVzdC5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFMEQ0QTA1MUFCOEREMEEwMDJGNTRCRiAvKiBFeGVj
dXRpb25UaW1lTGltaXRUZXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEV4
ZWN1dGlvblRpbWVMaW1pdFRlc3QuaDsgcGF0aCA9IEFQSS90ZXN0cy9FeGVjdXRpb25UaW1lTGlt
aXRUZXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01MjMzLDYgKzUyNDAsNyBA
QAogCQlGRTEyMjAyNTFCRTdGNTY0MDAzOUU2RjIgLyogSklUQWRkR2VuZXJhdG9yLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpJVEFkZEdlbmVyYXRvci5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFMTIyMDI2MUJFN0Y1NjQwMDM5RTZGMiAvKiBK
SVRBZGRHZW5lcmF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSklUQWRk
R2VuZXJhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFMTQwOTA2MjA1NkYz
RkUwMENGRTMxOCAvKiBOYXRpdmVGdW5jdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBOYXRpdmVGdW5jdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlG
RTE3OENDMzI1NUYyMDU1MDBGRkQ2NzcgLyogQWJzdHJhY3RTbG90VmlzaXRvci5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBYnN0cmFjdFNsb3RWaXNpdG9yLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkUxODc5RkYxQkZCQzczQzAwMzhCQkNBIC8q
IEpJVE11bEdlbmVyYXRvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBKSVRNdWxHZW5lcmF0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTE4
N0EwMDFCRkJDNzNDMDAzOEJCQ0EgLyogSklUTXVsR2VuZXJhdG9yLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEpJVE11bEdlbmVyYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlGRTE4N0EwQTFDMDIyOTIzMDAzOEJCQ0EgLyogSklURGl2R2VuZXJhdG9yLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpJVERpdkdlbmVyYXRvci5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01MjU0LDcgKzUyNjIsOSBAQAogCQlG
RTFFMkMzRTIyNDBEMzBCMDBGNkI3MjkgLyogTWFjcm9Bc3NlbWJsZXJBUk02NEUuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWFjcm9Bc3NlbWJsZXJBUk02NEUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkUyMENFOUIxNUYwNEE5NTAwREYzNDMwIC8qIExMSW50
Q0xvb3AuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gTExJbnRDTG9v
cC5jcHA7IHBhdGggPSBsbGludC9MTEludENMb29wLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJRkUyMENFOUMxNUYwNEE5NTAwREYzNDMwIC8qIExMSW50Q0xvb3AuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gTExJbnRDTG9vcC5oOyBwYXRoID0gbGxpbnQvTExJ
bnRDTG9vcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRTI4N0QwMTI1MkZCMkU4
MDBENzIzRjkgLyogVmVyaWZpZXJTbG90VmlzaXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBWZXJpZmllclNsb3RWaXNpdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUZFMkE4NzVGMUYwMjM4MTYwMEVCMzFCMiAvKiBNaW5pbXVtUmVzZXJ2ZWRab25lU2l6
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBNaW5pbXVtUmVzZXJ2ZWRab25lU2l6ZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlGRTJCRDY2RTI1QzBEQzgyMDA5OTlEM0IgLyogVmVyaWZpZXJT
bG90VmlzaXRvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBWZXJp
ZmllclNsb3RWaXNpdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkUyRTZB
N0ExRDZFQTVGRTAwNjBGODk2IC8qIFRocm93U2NvcGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gVGhyb3dTY29wZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUZFMzAyMkQwMUUzRDczOTYwMEJBQzQ5MyAvKiBTaWdpbGxDcmFzaEFuYWx5emVyLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNpZ2lsbENyYXNoQW5hbHl6
ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTMwMjJEMTFFM0Q3Mzk2MDBC
QUM0OTMgLyogU2lnaWxsQ3Jhc2hBbmFseXplci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBTaWdpbGxDcmFzaEFuYWx5emVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC01MzI3LDYgKzUzMzcsOCBAQAogCQlGRThERTU0QzIzQUMxRTg2MDA1QzkxNDIgLyogQ2Fj
aGVhYmxlSWRlbnRpZmllcklubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gQ2FjaGVhYmxlSWRlbnRpZmllcklubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJRkU4REU1NEUyM0FDM0E4RTAwNUM5MTQyIC8qIENhY2hlYWJsZUlkZW50aWZpZXIuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gQ2FjaGVhYmxlSWRlbnRpZmllci5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUZFOTBCQjNBMUI3Q0Y2NEUwMDZCM0YwMyAvKiBWTUlubGluZXMu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVk1JbmxpbmVzLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUZFOTEyQjRFMjUzMTE5MzMwMEZBQkRERiAvKiBBYnN0cmFj
dFNsb3RWaXNpdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFic3RyYWN0
U2xvdFZpc2l0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkU5MTJCNTAyNTMx
MUFEMTAwRkFCRERGIC8qIEFic3RyYWN0U2xvdFZpc2l0b3JJbmxpbmVzLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFic3RyYWN0U2xvdFZpc2l0b3JJbmxpbmVzLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFOThCNUI2MUJCOUFFMTEwMDczRTdBNiAvKiBKSVRT
dWJHZW5lcmF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSklUU3ViR2Vu
ZXJhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFOTlCMjQ3MUMyNEI2RDMw
MEM4MjE1OSAvKiBKSVROZWdHZW5lcmF0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gSklUTmVnR2VuZXJhdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJRkU5OUIyNDgxQzI0QjZEMzAwQzgyMTU5IC8qIEpJVE5lZ0dlbmVyYXRvci5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKSVROZWdHZW5lcmF0b3IuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTYyNzYsNiArNjI4OCw5IEBACiAJCTE0MkUzMTJBMTM0RkYw
QTYwMEFGQURCNSAvKiBoZWFwICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJl
biA9ICgKKwkJCQlGRTE3OENDMzI1NUYyMDU1MDBGRkQ2NzcgLyogQWJzdHJhY3RTbG90VmlzaXRv
ci5jcHAgKi8sCisJCQkJRkU5MTJCNEUyNTMxMTkzMzAwRkFCRERGIC8qIEFic3RyYWN0U2xvdFZp
c2l0b3IuaCAqLywKKwkJCQlGRTkxMkI1MDI1MzExQUQxMDBGQUJEREYgLyogQWJzdHJhY3RTbG90
VmlzaXRvcklubGluZXMuaCAqLywKIAkJCQkwRkVDM0M1MDFGMzNBNDE2MDBGNTlCNkMgLyogQWxp
Z25lZE1lbW9yeUFsbG9jYXRvci5jcHAgKi8sCiAJCQkJMEZFQzNDNTExRjMzQTQxNjAwRjU5QjZD
IC8qIEFsaWduZWRNZW1vcnlBbGxvY2F0b3IuaCAqLywKIAkJCQkwRkE3NjIwQTFEQjk1OUY2MDBC
N0EyRkQgLyogQWxsb2NhdGluZ1Njb3BlLmggKi8sCkBAIC02NDMyLDYgKzY0NDcsNyBAQAogCQkJ
CUMyMjU0OTQyMTVGN0RCQUEwMDY1RTg5OCAvKiBTbG90VmlzaXRvci5jcHAgKi8sCiAJCQkJMTRC
QTc4RjAxM0FBQjg4RjAwNUI3QzJDIC8qIFNsb3RWaXNpdG9yLmggKi8sCiAJCQkJMEZDQjQwODUx
NUMwQTNDMzAwNDg5MzJCIC8qIFNsb3RWaXNpdG9ySW5saW5lcy5oICovLAorCQkJCUZFMDQxNTUy
MjUyRUMwNzMwMDkxRUI1RCAvKiBTbG90VmlzaXRvck1hY3Jvcy5oICovLAogCQkJCTBGREU4N0ZB
MURGRTZFNTAwMDY0QzM5MCAvKiBTcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyLmNwcCAqLywKIAkJ
CQkwRkRFODdGQjFERkU2RTUwMDA2NEMzOTAgLyogU3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlci5o
ICovLAogCQkJCTBGNEY4Mjg5MUUzMUI5NzEwMDc1MTg0QyAvKiBTdG9jaGFzdGljU3BhY2VUaW1l
TXV0YXRvclNjaGVkdWxlci5jcHAgKi8sCkBAIC02NDQ5LDYgKzY0NjUsOSBAQAogCQkJCTBGMUZC
MzhBMUUxNzNBNjIwMEE5QkU1MCAvKiBTeW5jaHJvbm91c1N0b3BUaGVXb3JsZE11dGF0b3JTY2hl
ZHVsZXIuY3BwICovLAogCQkJCTBGMUZCMzhCMUUxNzNBNjIwMEE5QkU1MCAvKiBTeW5jaHJvbm91
c1N0b3BUaGVXb3JsZE11dGF0b3JTY2hlZHVsZXIuaCAqLywKIAkJCQkxNDE0NDhDQzEzQTE3ODM3
MDBGNUJBMUEgLyogVGlueUJsb29tRmlsdGVyLmggKi8sCisJCQkJRkUyQkQ2NkUyNUMwREM4MjAw
OTk5RDNCIC8qIFZlcmlmaWVyU2xvdFZpc2l0b3IuY3BwICovLAorCQkJCUZFMjg3RDAxMjUyRkIy
RTgwMEQ3MjNGOSAvKiBWZXJpZmllclNsb3RWaXNpdG9yLmggKi8sCisJCQkJNkJDQ0VDMDMyNUQx
RkEyNzAwMEYzOTFEIC8qIFZlcmlmaWVyU2xvdFZpc2l0b3JJbmxpbmVzLmggKi8sCiAJCQkJMEY0
RDhDNzIxRkM3QTk3MzAwMUQzMkFDIC8qIFZpc2l0Q291bnRlci5oICovLAogCQkJCTBGOTUyQTlG
MURGNzg2MDcwMEUwNkZCRCAvKiBWaXNpdFJhY2VLZXkuY3BwICovLAogCQkJCTBGOTUyQUEwMURG
Nzg2MDcwMEUwNkZCRCAvKiBWaXNpdFJhY2VLZXkuaCAqLywKQEAgLTkyOTAsNiArOTMwOSw3IEBA
CiAJCQkJMTQ3QjgzQUMwRTZEQjhDOTAwNDc3NUE0IC8qIEJhdGNoZWRUcmFuc2l0aW9uT3B0aW1p
emVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMzVFODlGRDI1QzUwRjg3MDA3MUVFMUUgLyogQmln
SW50NjRBcnJheS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODY5NzZFNUYxRkEzRThCQzAwRTdDNEUx
IC8qIEJpZ0ludENvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKKwkJCQlGRTA0MTU1MzI1MkVD
MDczMDA5MUVCNUQgLyogU2xvdFZpc2l0b3JNYWNyb3MuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2
NjczOUQyMTNCRkRFNzEwMDIzRDg3QyAvKiBCaWdJbnRlZ2VyLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk4NjE4MTY3NzFGQjc5MjQyMDBFQ0M0RUMgLyogQmlnSW50T2JqZWN0LmggaW4gSGVhZGVycyAq
LywKIAkJCQk4Njk3NkU1RTFGQTNFOEI2MDBFN0M0RTEgLyogQmlnSW50UHJvdG90eXBlLmggaW4g
SGVhZGVycyAqLywKQEAgLTk1NzEsNiArOTU5MSw3IEBACiAJCQkJMEZEODJFNTcxNDFEQUYxMDAw
MTc5Qzk0IC8qIERGR09TUkVudHJ5LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkQ4QTMyNjE3RDUx
RjU3MDBDQTJDNDAgLyogREZHT1NSRW50cnlwb2ludENyZWF0aW9uUGhhc2UuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGQzA5NzZBMTQ2OEE2RjcwMENGMjQ0MiAvKiBERkdPU1JFeGl0LmggaW4gSGVh
ZGVycyAqLywKKwkJCQlGRTkxMkI0RjI1MzExOTMzMDBGQUJEREYgLyogQWJzdHJhY3RTbG90Vmlz
aXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyMzVCRUMxNzE3OEU3MzAwNjkwQzdGIC8qIERG
R09TUkV4aXRCYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkZCOTIxQzE2RDAyRjExMDA1NUE1
REIgLyogREZHT1NSRXhpdENvbXBpbGF0aW9uSW5mby5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY3
MDI1QUExNzE0QjBGQzAwMzgyQzBFIC8qIERGR09TUkV4aXRDb21waWxlckNvbW1vbi5oIGluIEhl
YWRlcnMgKi8sCkBAIC05ODU2LDYgKzk4NzcsNyBAQAogCQkJCUE1MTNFNUJFMTg1QkZBQ0MwMDdF
OTVBRCAvKiBJbmplY3RlZFNjcmlwdEhvc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1MTNFNUNC
MTg1Rjk2MjQwMDdFOTVBRCAvKiBJbmplY3RlZFNjcmlwdE1hbmFnZXIuaCBpbiBIZWFkZXJzICov
LAogCQkJCUE1ODQwRTIxMTg3QjdCODYwMDg0M0IxMCAvKiBJbmplY3RlZFNjcmlwdE1vZHVsZS5o
IGluIEhlYWRlcnMgKi8sCisJCQkJRkUyODdEMDIyNTJGQjJFODAwRDcyM0Y5IC8qIFZlcmlmaWVy
U2xvdFZpc2l0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1MTNFNUM3MTg1Rjk0NDYwMDdFOTVB
RCAvKiBJbmplY3RlZFNjcmlwdFNvdXJjZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTk1OUU5MzIx
QkQxODI3OTAwMUFBNDEzIC8qIGlubGluZS1hbmQtbWluaWZ5LXN0eWxlc2hlZXRzLWFuZC1zY3Jp
cHRzLnB5IGluIEhlYWRlcnMgKi8sCiAJCQkJNzkwNUJCNjkxRDEyMDUwRTAwMTlGRTU3IC8qIElu
bGluZUFjY2Vzcy5oIGluIEhlYWRlcnMgKi8sCkBAIC0xMDAzMSw2ICsxMDA1Myw3IEBACiAJCQkJ
QTU4QzAyNDIxOEU0QTQxQTAwMDMyQkM1IC8qIEpTQ29udGV4dFByaXZhdGUuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUJDMThDNDFFMEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU0NvbnRleHRSZWYuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUE1RUE3MEVFMTlGNUI1QzQwMDk4RjVFQyAvKiBKU0NvbnRleHRSZWZJ
bnNwZWN0b3JTdXBwb3J0LmggaW4gSGVhZGVycyAqLywKKwkJCQk2QkNDRUMwNDI1RDFGQTI3MDAw
RjM5MUQgLyogVmVyaWZpZXJTbG90VmlzaXRvcklubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUE1RDJFNjY1MTk1RTE3NDAwMEE1MThFNyAvKiBKU0NvbnRleHRSZWZJbnRlcm5hbC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMTQ4Q0QxRDgxMDhDRjkwMjAwODE2M0M2IC8qIEpTQ29udGV4dFJlZlBy
aXZhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUZFNzQ5N0U2MjA5MDAxQjEwMDAzNTY1QiAvKiBK
U0NQdHJUYWcuaCBpbiBIZWFkZXJzICovLApAQCAtMTAxNjEsNiArMTAxODQsNyBAQAogCQkJCTc5
NUFDNjE4MjBBMjM1NUUwMDUyQzc2QyAvKiBKU1ZpcnR1YWxNYWNoaW5lUHJpdmF0ZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQTdDQTNBRTgxN0RBNDFBRTAwNjUzOEFGIC8qIEpTV2Vha01hcC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQTc0ODJFOTMxMTZBN0NBRDAwM0IwNzEyIC8qIEpTV2Vha09iamVj
dE1hcFJlZkludGVybmFsLmggaW4gSGVhZGVycyAqLywKKwkJCQlGRTkxMkI1MTI1MzExQUQxMDBG
QUJEREYgLyogQWJzdHJhY3RTbG90VmlzaXRvcklubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUE3NDgyQjkzMTE2NzExNDcwMDNCMDcxMiAvKiBKU1dlYWtPYmplY3RNYXBSZWZQcml2YXRlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk1MzlCRkJCMDIyQUQzQ0RDMDAyM0Y0QzAgLyogSlNXZWFrT2Jq
ZWN0UmVmLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjBCMjg2QjFFQjhFNkNGMDAwRUI1RDIgLyog
SlNXZWFrUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvU2NyaXB0cy93a2J1aWx0aW5zL2J1aWx0aW5zX2dlbmVyYXRlX2ludGVybmFsc193cmFwcGVy
X2hlYWRlci5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy93
a2J1aWx0aW5zL2J1aWx0aW5zX2dlbmVyYXRlX2ludGVybmFsc193cmFwcGVyX2hlYWRlci5weQko
cmV2aXNpb24gMjcyNzEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvd2tidWls
dGlucy9idWlsdGluc19nZW5lcmF0ZV9pbnRlcm5hbHNfd3JhcHBlcl9oZWFkZXIucHkJKHdvcmtp
bmcgY29weSkKQEAgLTkzLDcgKzkzLDcgQEAgY2xhc3MgQnVpbHRpbnNJbnRlcm5hbHNXcmFwcGVy
SGVhZGVyR2VuZQogCiAgICAgZGVmIGdlbmVyYXRlX21ldGhvZHMoc2VsZik6CiAgICAgICAgIHJl
dHVybiAiIiIKLSAgICB2b2lkIHZpc2l0KEpTQzo6U2xvdFZpc2l0b3ImKTsKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIHZpc2l0KFZpc2l0b3ImKTsKICAgICB2b2lkIGluaXRp
YWxpemUoSlNET01HbG9iYWxPYmplY3QmKTsKICIiIgogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvU2NyaXB0cy93a2J1aWx0aW5zL2J1aWx0aW5zX2dlbmVyYXRlX2ludGVybmFsc193cmFw
cGVyX2ltcGxlbWVudGF0aW9uLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9TY3JpcHRzL3drYnVpbHRpbnMvYnVpbHRpbnNfZ2VuZXJhdGVfaW50ZXJuYWxzX3dyYXBwZXJf
aW1wbGVtZW50YXRpb24ucHkJKHJldmlzaW9uIDI3MjcxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9TY3JpcHRzL3drYnVpbHRpbnMvYnVpbHRpbnNfZ2VuZXJhdGVfaW50ZXJuYWxzX3dyYXBw
ZXJfaW1wbGVtZW50YXRpb24ucHkJKHdvcmtpbmcgY29weSkKQEAgLTEyMCwxMyArMTIwLDE2IEBA
IGNsYXNzIEJ1aWx0aW5zSW50ZXJuYWxzV3JhcHBlckltcGxlbWVudGEKICAgICAgICAgcmV0dXJu
ICdcbicuam9pbihsaW5lcykKIAogICAgIGRlZiBnZW5lcmF0ZV92aXNpdF9tZXRob2Qoc2VsZik6
Ci0gICAgICAgIGxpbmVzID0gWyJ2b2lkIEpTQnVpbHRpbkludGVybmFsRnVuY3Rpb25zOjp2aXNp
dChKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKSIsCisgICAgICAgIGxpbmVzID0gWyJ0ZW1wbGF0
ZTx0eXBlbmFtZSBWaXNpdG9yPiIsCisgICAgICAgICAgICAgICAgICJ2b2lkIEpTQnVpbHRpbklu
dGVybmFsRnVuY3Rpb25zOjp2aXNpdChWaXNpdG9yJiB2aXNpdG9yKSIsCiAgICAgICAgICAgICAg
ICAgICJ7Il0KICAgICAgICAgZm9yIG9iamVjdCBpbiBzZWxmLmludGVybmFsczoKICAgICAgICAg
ICAgIHZpc2l0ID0gIiAgICAlcy52aXNpdCh2aXNpdG9yKTsiICUgc2VsZi5tZW1iZXJfbmFtZShv
YmplY3QpCiAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoQnVpbHRpbnNHZW5lcmF0b3Iud3JhcF93
aXRoX2d1YXJkKG9iamVjdC5hbm5vdGF0aW9ucy5nZXQoJ2NvbmRpdGlvbmFsJyksIHZpc2l0KSkK
ICAgICAgICAgbGluZXMuYXBwZW5kKCIgICAgVU5VU0VEX1BBUkFNKHZpc2l0b3IpOyIpCiAgICAg
ICAgIGxpbmVzLmFwcGVuZCgifVxuIikKKyAgICAgICAgbGluZXMuYXBwZW5kKCJ0ZW1wbGF0ZSB2
b2lkIEpTQnVpbHRpbkludGVybmFsRnVuY3Rpb25zOjp2aXNpdChBYnN0cmFjdFNsb3RWaXNpdG9y
Jik7IikKKyAgICAgICAgbGluZXMuYXBwZW5kKCJ0ZW1wbGF0ZSB2b2lkIEpTQnVpbHRpbkludGVy
bmFsRnVuY3Rpb25zOjp2aXNpdChTbG90VmlzaXRvciYpO1xuIikKICAgICAgICAgcmV0dXJuICdc
bicuam9pbihsaW5lcykKIAogICAgIGRlZiBfZ2VuZXJhdGVfaW5pdGlhbGl6ZV9zdGF0aWNfZ2xv
YmFscyhzZWxmKToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL3drYnVpbHRp
bnMvYnVpbHRpbnNfdGVtcGxhdGVzLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9TY3JpcHRzL3drYnVpbHRpbnMvYnVpbHRpbnNfdGVtcGxhdGVzLnB5CShyZXZpc2lvbiAy
NzI3MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy93a2J1aWx0aW5zL2J1aWx0
aW5zX3RlbXBsYXRlcy5weQkod29ya2luZyBjb3B5KQpAQCAtMTg4LDcgKzE4OCw4IEBAIHB1Ymxp
YzoKICAgICBleHBsaWNpdCAke29iamVjdE5hbWV9QnVpbHRpbkZ1bmN0aW9ucyhKU0M6OlZNJiB2
bSkgOiBtX3ZtKHZtKSB7IH0KIAogICAgIHZvaWQgaW5pdChKU0M6OkpTR2xvYmFsT2JqZWN0Jik7
Ci0gICAgdm9pZCB2aXNpdChKU0M6OlNsb3RWaXNpdG9yJik7CisgICAgLy8gbWxhbSB2b2lkIHZp
c2l0KEpTQzo6U2xvdFZpc2l0b3ImKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2
b2lkIHZpc2l0KFZpc2l0b3ImKTsKIAogcHVibGljOgogICAgIEpTQzo6Vk0mIG1fdm07CkBAIC0y
MDcsMTAgKzIwOCwxNSBAQCBpbmxpbmUgdm9pZCAke29iamVjdE5hbWV9QnVpbHRpbkZ1bmN0aW9u
CiAjdW5kZWYgRVhQT1JUX0ZVTkNUSU9OCiB9CiAKLWlubGluZSB2b2lkICR7b2JqZWN0TmFtZX1C
dWlsdGluRnVuY3Rpb25zOjp2aXNpdChKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxh
dGU8dHlwZW5hbWUgVmlzaXRvcj4KK2lubGluZSB2b2lkICR7b2JqZWN0TmFtZX1CdWlsdGluRnVu
Y3Rpb25zOjp2aXNpdChWaXNpdG9yJiB2aXNpdG9yKQogewogI2RlZmluZSBWSVNJVF9GVU5DVElP
TihuYW1lKSB2aXNpdG9yLmFwcGVuZChtXyMjbmFtZSMjRnVuY3Rpb24pOwogICAgICR7bWFjcm9Q
cmVmaXh9X0ZPUkVBQ0hfJHtvYmplY3RNYWNyb31fQlVJTFRJTl9GVU5DVElPTl9OQU1FKFZJU0lU
X0ZVTkNUSU9OKQogI3VuZGVmIFZJU0lUX0ZVTkNUSU9OCiB9CisKK3RlbXBsYXRlIHZvaWQgJHtv
YmplY3ROYW1lfUJ1aWx0aW5GdW5jdGlvbnM6OnZpc2l0KEpTQzo6QWJzdHJhY3RTbG90VmlzaXRv
ciYpOwordGVtcGxhdGUgdm9pZCAke29iamVjdE5hbWV9QnVpbHRpbkZ1bmN0aW9uczo6dmlzaXQo
SlNDOjpTbG90VmlzaXRvciYpOworCiAiIiIpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCShyZXZpc2lvbiAyNzI3MTApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTc1NywyMiArNzU3LDI0IEBAIGJvb2wgQWNjZXNzQ2FzZTo6dmlzaXRXZWFrKFZNJiB2bSkgY29u
c3QKICAgICByZXR1cm4gaXNWYWxpZDsKIH0KIAotYm9vbCBBY2Nlc3NDYXNlOjpwcm9wYWdhdGVU
cmFuc2l0aW9ucyhTbG90VmlzaXRvciYgdmlzaXRvcikgY29uc3QKK3RlbXBsYXRlPHR5cGVuYW1l
IFZpc2l0b3I+Citib29sIEFjY2Vzc0Nhc2U6OnByb3BhZ2F0ZVRyYW5zaXRpb25zKFZpc2l0b3Im
IHZpc2l0b3IpIGNvbnN0CiB7CiAgICAgYm9vbCByZXN1bHQgPSB0cnVlOwogCiAgICAgaWYgKG1f
c3RydWN0dXJlKQotICAgICAgICByZXN1bHQgJj0gbV9zdHJ1Y3R1cmUtPm1hcmtJZkNoZWFwKHZp
c2l0b3IpOworICAgICAgICByZXN1bHQgJj0gbV9zdHJ1Y3R1cmUtPm1hcmtJZkNoZWFwMSh2aXNp
dG9yKTsKIAogICAgIGlmIChtX3BvbHlQcm90b0FjY2Vzc0NoYWluKSB7CiAgICAgICAgIGZvciAo
U3RydWN0dXJlSUQgc3RydWN0dXJlSUQgOiBtX3BvbHlQcm90b0FjY2Vzc0NoYWluLT5jaGFpbigp
KQotICAgICAgICAgICAgcmVzdWx0ICY9IHZpc2l0b3Iudm0oKS5nZXRTdHJ1Y3R1cmUoc3RydWN0
dXJlSUQpLT5tYXJrSWZDaGVhcCh2aXNpdG9yKTsKKyAgICAgICAgICAgIHJlc3VsdCAmPSB2aXNp
dG9yLnZtKCkuZ2V0U3RydWN0dXJlKHN0cnVjdHVyZUlEKS0+bWFya0lmQ2hlYXAxKHZpc2l0b3Ip
OwogICAgIH0KIAogICAgIHN3aXRjaCAobV90eXBlKSB7CiAgICAgY2FzZSBUcmFuc2l0aW9uOgog
ICAgIGNhc2UgRGVsZXRlOgotICAgICAgICBpZiAodmlzaXRvci52bSgpLmhlYXAuaXNNYXJrZWQo
bV9zdHJ1Y3R1cmUtPnByZXZpb3VzSUQoKSkpCisvLyAgICAgICAgaWYgKHZpc2l0b3Iudm0oKS5o
ZWFwLmlzTWFya2VkKG1fc3RydWN0dXJlLT5wcmV2aW91c0lEKCkpKQorICAgICAgICBpZiAodmlz
aXRvci5pc01hcmtlZChtX3N0cnVjdHVyZS0+cHJldmlvdXNJRCgpKSkKICAgICAgICAgICAgIHZp
c2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQobV9zdHJ1Y3R1cmUuZ2V0KCkpOwogICAgICAgICBlbHNl
CiAgICAgICAgICAgICByZXN1bHQgPSBmYWxzZTsKQEAgLTc4NCwxMSArNzg2LDE5IEBAIGJvb2wg
QWNjZXNzQ2FzZTo6cHJvcGFnYXRlVHJhbnNpdGlvbnMoU2wKICAgICByZXR1cm4gcmVzdWx0Owog
fQogCi12b2lkIEFjY2Vzc0Nhc2U6OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9y
KSBjb25zdAordGVtcGxhdGUgYm9vbCBBY2Nlc3NDYXNlOjpwcm9wYWdhdGVUcmFuc2l0aW9ucyhT
bG90VmlzaXRvciYpIGNvbnN0OwordGVtcGxhdGUgYm9vbCBBY2Nlc3NDYXNlOjpwcm9wYWdhdGVU
cmFuc2l0aW9ucyhBYnN0cmFjdFNsb3RWaXNpdG9yJikgY29uc3Q7CisKKy8vdGVtcGxhdGU8dHlw
ZW5hbWUgVmlzaXRvcj4KKy8vdm9pZCBBY2Nlc3NDYXNlOjp2aXNpdEFnZ3JlZ2F0ZShWaXNpdG9y
JiB2aXNpdG9yKSBjb25zdAordm9pZCBBY2Nlc3NDYXNlOjp2aXNpdEFnZ3JlZ2F0ZTEoQWJzdHJh
Y3RTbG90VmlzaXRvciYgdmlzaXRvcikgY29uc3QKIHsKLSAgICBtX2lkZW50aWZpZXIudmlzaXRB
Z2dyZWdhdGUodmlzaXRvcik7CisgICAgbV9pZGVudGlmaWVyLnZpc2l0QWdncmVnYXRlMSh2aXNp
dG9yKTsKIH0KIAorLy90ZW1wbGF0ZSB2b2lkIEFjY2Vzc0Nhc2U6OnZpc2l0QWdncmVnYXRlKFNs
b3RWaXNpdG9yJikgY29uc3Q7CisvL3RlbXBsYXRlIHZvaWQgQWNjZXNzQ2FzZTo6dmlzaXRBZ2dy
ZWdhdGUoVmVyaWZpZXJTbG90VmlzaXRvciYpIGNvbnN0OworCiB2b2lkIEFjY2Vzc0Nhc2U6Omdl
bmVyYXRlV2l0aEd1YXJkKAogICAgIEFjY2Vzc0dlbmVyYXRpb25TdGF0ZSYgc3RhdGUsIENDYWxs
SGVscGVyczo6SnVtcExpc3QmIGZhbGxUaHJvdWdoKQogewpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5oCShyZXZpc2lvbiAyNzI3MTApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yODAsOSArMjgwLDEwIEBAIHByaXZhdGU6CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rv
cj4KICAgICB2b2lkIGZvckVhY2hEZXBlbmRlbnRDZWxsKFZNJiwgY29uc3QgRnVuY3RvciYpIGNv
bnN0OwogCi0gICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYpIGNvbnN0OworLy8g
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCB2aXNpdEFnZ3JlZ2F0ZShWaXNpdG9y
JikgY29uc3Q7CisgICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZTEoQWJzdHJhY3RTbG90VmlzaXRvciYp
IGNvbnN0OwogICAgIGJvb2wgdmlzaXRXZWFrKFZNJikgY29uc3Q7Ci0gICAgYm9vbCBwcm9wYWdh
dGVUcmFuc2l0aW9ucyhTbG90VmlzaXRvciYpIGNvbnN0OworICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFZpc2l0b3I+IGJvb2wgcHJvcGFnYXRlVHJhbnNpdGlvbnMoVmlzaXRvciYpIGNvbnN0OwogCiAg
ICAgLy8gRklYTUU6IFRoaXMgb25seSBleGlzdHMgYmVjYXVzZSBvZiBob3cgQWNjZXNzQ2FzZSBw
dXRzIHBvc3QtZ2VuZXJhdGlvbiB0aGluZ3MgaW50byBpdHNlbGYuCiAgICAgLy8gaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NjQ1NgpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0J5VmFsSW5mby5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5VmFsSW5mby5jcHAJKHJldmlzaW9uIDI3MjcxMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeVZhbEluZm8uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00LDcgKzQsNyBAQAogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKICAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogMS4gUmVkaXN0cmlidXRWZXJpZmllclNsb3RWaXNpdG9yaW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CiAgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCiAgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAogICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQpAQCAtMzIsMTEgKzMyLDE2IEBA
IG5hbWVzcGFjZSBKU0MgewogCiAjaWYgRU5BQkxFKEpJVCkKIAotdm9pZCBCeVZhbEluZm86OnZp
c2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy90ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPgorLy92b2lkIEJ5VmFsSW5mbzo6dmlzaXRBZ2dyZWdhdGUoVmlzaXRvciYgdmlzaXRv
cikKK3ZvaWQgQnlWYWxJbmZvOjp2aXNpdEFnZ3JlZ2F0ZTEoQWJzdHJhY3RTbG90VmlzaXRvciYg
dmlzaXRvcikKIHsKLSAgICBjYWNoZWRJZC52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKKyAgICBj
YWNoZWRJZC52aXNpdEFnZ3JlZ2F0ZTEodmlzaXRvcik7CiB9CiAKKy8vdGVtcGxhdGUgdm9pZCBC
eVZhbEluZm86OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJik7CisvL3RlbXBsYXRlIHZvaWQg
QnlWYWxJbmZvOjp2aXNpdEFnZ3JlZ2F0ZShWZXJpZmllclNsb3RWaXNpdG9yJik7CisKICNlbmRp
ZiAvLyBFTkFCTEUoSklUKQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9CeVZhbEluZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnlWYWxJbmZvLmgJKHJldmlzaW9uIDI3MjcxMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeVZhbEluZm8uaAkod29ya2luZyBjb3B5KQpA
QCAtMjYwLDcgKzI2MCw4IEBAIHN0cnVjdCBCeVZhbEluZm8gewogICAgICAgICB0aGlzLT5zZWVu
ID0gZmFsc2U7CiAgICAgfQogCi0gICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYp
OworLy8gICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCB2aXNpdEFnZ3JlZ2F0ZShW
aXNpdG9yJik7CisgICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZTEoQWJzdHJhY3RTbG90VmlzaXRvciYp
OwogCiAgICAgQ29kZUxvY2F0aW9uSnVtcDxKU0ludGVybmFsUHRyVGFnPiBub3RJbmRleEp1bXA7
CiAgICAgQ29kZUxvY2F0aW9uSnVtcDxKU0ludGVybmFsUHRyVGFnPiBiYWRUeXBlSnVtcDsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZp
c2lvbiAyNzI3MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2Nr
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsOSBAQAogI2luY2x1ZGUgImNvbmZpZy5o
IgogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgogCisjaW5jbHVkZSAiQWJzdHJhY3RTbG90VmlzaXRv
ci5oIiAvLyBtbGFtIFRFU1QKKyNpbmNsdWRlICJQb2x5bW9ycGhpY0FjY2Vzcy5oIiAvLyBtbGFt
IFRFU1QKKwogI2luY2x1ZGUgIkFyaXRoUHJvZmlsZS5oIgogI2luY2x1ZGUgIkJhc2ljQmxvY2tM
b2NhdGlvbi5oIgogI2luY2x1ZGUgIkJ5VmFsSW5mby5oIgpAQCAtOTQsNiArOTcsOSBAQAogCiBu
YW1lc3BhY2UgSlNDIHsKIAorZXh0ZXJuIHVuc2lnbmVkIG1sYW1UaW1lOworZXh0ZXJuIGJvb2wg
bWxhbVZlcmJvc2U7CisKIERFRklORV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoQ29k
ZUJsb2NrUmFyZURhdGEpOwogCiBjb25zdCBDbGFzc0luZm8gQ29kZUJsb2NrOjpzX2luZm8gPSB7
CkBAIC0zMDUsNiArMzExLDggQEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soVk0mIHZtLCBTdHJ1Y3R1
cmUqIAogICAgICwgbV9tZXRhZGF0YShvdGhlci5tX21ldGFkYXRhKQogICAgICwgbV9jcmVhdGlv
blRpbWUoTW9ub3RvbmljVGltZTo6bm93KCkpCiB7CisgICAgaWYgKG1sYW1WZXJib3NlKSBkYXRh
TG9nTG4oIiAgICBtbGFtIENvZGVCbG9jazwiLCBSYXdQb2ludGVyKHRoaXMpLCAiPjo6Q29kZUJs
b2NrIDE6IFJFU0VUIG1fY3JlYXRpb25UaW1lIHRvICIsIG1fY3JlYXRpb25UaW1lLCAiPiA8Z2Mj
IiwgbWxhbVRpbWUsICI+Iik7CisKICAgICBBU1NFUlQoaGVhcCgpLT5pc0RlZmVycmVkKCkpOwog
ICAgIEFTU0VSVChtX3Njb3BlUmVnaXN0ZXIuaXNMb2NhbCgpKTsKIApAQCAtMzU5LDYgKzM2Nyw4
IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKFZNJiB2bSwgU3RydWN0dXJlKiAKICAgICAsIG1fbWV0
YWRhdGEodW5saW5rZWRDb2RlQmxvY2stPm1ldGFkYXRhKCkubGluaygpKQogICAgICwgbV9jcmVh
dGlvblRpbWUoTW9ub3RvbmljVGltZTo6bm93KCkpCiB7CisgICAgaWYgKG1sYW1WZXJib3NlKSBk
YXRhTG9nTG4oIiAgICBtbGFtIENvZGVCbG9jazwiLCBSYXdQb2ludGVyKHRoaXMpLCAiPjo6Q29k
ZUJsb2NrIDI6IFJFU0VUIG1fY3JlYXRpb25UaW1lIHRvICIsIG1fY3JlYXRpb25UaW1lLCAiPiA8
Z2MjIiwgbWxhbVRpbWUsICI+Iik7CisKICAgICBBU1NFUlQoaGVhcCgpLT5pc0RlZmVycmVkKCkp
OwogICAgIEFTU0VSVChtX3Njb3BlUmVnaXN0ZXIuaXNMb2NhbCgpKTsKIApAQCAtMTAwMSw3ICsx
MDExLDggQEAgc2l6ZV90IENvZGVCbG9jazo6ZXN0aW1hdGVkU2l6ZShKU0NlbGwqIAogICAgIHJl
dHVybiBCYXNlOjplc3RpbWF0ZWRTaXplKGNlbGwsIHZtKSArIGV4dHJhTWVtb3J5QWxsb2NhdGVk
OwogfQogCi12b2lkIENvZGVCbG9jazo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgQ29kZUJs
b2NrOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7
CiAgICAgQ29kZUJsb2NrKiB0aGlzT2JqZWN0ID0ganNDYXN0PENvZGVCbG9jayo+KGNlbGwpOwog
ICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTEw
MTAsOSArMTAyMSwxNSBAQCB2b2lkIENvZGVCbG9jazo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNl
CiAgICAgdGhpc09iamVjdC0+dmlzaXRDaGlsZHJlbih2aXNpdG9yKTsKIH0KIAotdm9pZCBDb2Rl
QmxvY2s6OnZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCitERUZJTkVfVklTSVRf
Q0hJTERSRU4oQ29kZUJsb2NrKTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQg
Q29kZUJsb2NrOjp2aXNpdENoaWxkcmVuSW1wbChWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIENv
bmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9sb2NrKTsKKyAgICBpZiAobWxhbVZlcmJvc2UpIGRh
dGFMb2dMbigiICAgIG1sYW0gMTAyMyBDb2RlQmxvY2s8IiwgUmF3UG9pbnRlcih0aGlzKSwgIj46
OnZpc2l0Q2hpbGRyZW5JbXBsOiBtX2RpcmVjdEV2YWxDb2RlQ2FjaGU8IiwgUmF3UG9pbnRlcigm
bV9yYXJlRGF0YS0+bV9kaXJlY3RFdmFsQ29kZUNhY2hlKSwgIj4gPGdjIyIsIG1sYW1UaW1lLCAi
PiB2aXNpdG9yICIsIHZpc2l0b3IuY29kZU5hbWUoKSk7CisKKyAgICBtX21sYW1GbGFnID0gZmFs
c2U7CiAgICAgaWYgKENvZGVCbG9jayogb3RoZXJCbG9jayA9IHNwZWNpYWxPU1JFbnRyeUJsb2Nr
T3JOdWxsKCkpCiAgICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQob3RoZXJCbG9jayk7
CiAKQEAgLTEwMjksMTMgKzEwNDYsMTcgQEAgdm9pZCBDb2RlQmxvY2s6OnZpc2l0Q2hpbGRyZW4o
U2xvdFZpc2l0bwogICAgIFZNOjpTcGFjZUFuZFNldDo6c2V0Rm9yKCpzdWJzcGFjZSgpKS5hZGQo
dGhpcyk7CiB9CiAKLWJvb2wgQ29kZUJsb2NrOjpzaG91bGRWaXNpdFN0cm9uZ2x5KGNvbnN0IENv
bmN1cnJlbnRKU0xvY2tlciYgbG9ja2VyKQorREVGSU5FX0lOU1RBTkNFX1ZJU0lUX0NISUxEUkVO
KENvZGVCbG9jayk7CisKK2Jvb2wgQ29kZUJsb2NrOjpzaG91bGRWaXNpdFN0cm9uZ2x5KGNvbnN0
IENvbmN1cnJlbnRKU0xvY2tlciYgbG9ja2VyLCBBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9y
KQogewogICAgIGlmIChPcHRpb25zOjpmb3JjZUNvZGVCbG9ja0xpdmVuZXNzKCkpCiAgICAgICAg
IHJldHVybiB0cnVlOwogCi0gICAgaWYgKHNob3VsZEpldHRpc29uRHVlVG9PbGRBZ2UobG9ja2Vy
KSkKKyAgICBpZiAoc2hvdWxkSmV0dGlzb25EdWVUb09sZEFnZShsb2NrZXIsIHZpc2l0b3IpIHx8
IG1fbWxhbUZsYWcpIHsKKyAgICAgICAgbV9tbGFtRmxhZyA9IHRydWU7CiAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CiAKICAgICAvLyBJbnRlcnByZXRlciBhbmQgQmFzZWxpbmUgSklUIENv
ZGVCbG9ja3MgZG9uJ3QgbmVlZCB0byBiZSBqZXR0aXNvbmVkIHdoZW4KICAgICAvLyB0aGVpciB3
ZWFrIHJlZmVyZW5jZXMgZ28gc3RhbGUuIFNvIGlmIGEgYmFzbGluZSBKSVQgQ29kZUJsb2NrIGdl
dHMKQEAgLTEwODYsOSArMTEwNyw5IEBAIHN0YXRpYyBTZWNvbmRzIHRpbWVUb0xpdmUoSklUVHlw
ZSBqaXRUeXAKICAgICB9CiB9CiAKLWJvb2wgQ29kZUJsb2NrOjpzaG91bGRKZXR0aXNvbkR1ZVRv
T2xkQWdlKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYpCitib29sIENvZGVCbG9jazo6c2hvdWxk
SmV0dGlzb25EdWVUb09sZEFnZShjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBBYnN0cmFjdFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQogewotICAgIGlmIChtX3ZtLT5oZWFwLmlzTWFya2VkKHRoaXMp
KQorICAgIGlmICh2aXNpdG9yLmlzTWFya2VkKHRoaXMpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKICAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6Zm9yY2VDb2RlQmxvY2tUb0pldHRpc29uRHVl
VG9PbGRBZ2UoKSkpCkBAIC0xMTAxLDEyICsxMTIyLDEyIEBAIGJvb2wgQ29kZUJsb2NrOjpzaG91
bGRKZXR0aXNvbkR1ZVRvT2xkQWcKIH0KIAogI2lmIEVOQUJMRShERkdfSklUKQotc3RhdGljIGJv
b2wgc2hvdWxkTWFya1RyYW5zaXRpb24oVk0mIHZtLCBERkc6OldlYWtSZWZlcmVuY2VUcmFuc2l0
aW9uJiB0cmFuc2l0aW9uKQorc3RhdGljIGlubGluZSBib29sIHNob3VsZE1hcmtUcmFuc2l0aW9u
KEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIERGRzo6V2Vha1JlZmVyZW5jZVRyYW5zaXRp
b24mIHRyYW5zaXRpb24pCiB7Ci0gICAgaWYgKHRyYW5zaXRpb24ubV9jb2RlT3JpZ2luICYmICF2
bS5oZWFwLmlzTWFya2VkKHRyYW5zaXRpb24ubV9jb2RlT3JpZ2luLmdldCgpKSkKKyAgICBpZiAo
dHJhbnNpdGlvbi5tX2NvZGVPcmlnaW4gJiYgIXZpc2l0b3IuaXNNYXJrZWQodHJhbnNpdGlvbi5t
X2NvZGVPcmlnaW4uZ2V0KCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCi0gICAgaWYg
KCF2bS5oZWFwLmlzTWFya2VkKHRyYW5zaXRpb24ubV9mcm9tLmdldCgpKSkKKyAgICBpZiAoIXZp
c2l0b3IuaXNNYXJrZWQodHJhbnNpdGlvbi5tX2Zyb20uZ2V0KCkpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgCiAgICAgcmV0dXJuIHRydWU7CkBAIC0xMTIyLDEzICsxMTQzLDUxIEBAIEJ5
dGVjb2RlSW5kZXggQ29kZUJsb2NrOjpieXRlY29kZUluZGV4Rm8KIH0KICNlbmRpZiAvLyBFTkFC
TEUoREZHX0pJVCkKIAotdm9pZCBDb2RlQmxvY2s6OnByb3BhZ2F0ZVRyYW5zaXRpb25zKGNvbnN0
IENvbmN1cnJlbnRKU0xvY2tlciYsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorI2lmIEVOQUJMRShK
SVQpCisKKy8vdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KKy8vYm9vbCBTdHJ1Y3R1cmVTdHVi
SW5mbzo6cHJvcGFnYXRlVHJhbnNpdGlvbnMxKFZpc2l0b3ImIHZpc2l0b3IpCitib29sIFN0cnVj
dHVyZVN0dWJJbmZvOjpwcm9wYWdhdGVUcmFuc2l0aW9uczEoQWJzdHJhY3RTbG90VmlzaXRvciYg
dmlzaXRvcikKK3sKKyAgICBzd2l0Y2ggKG1fY2FjaGVUeXBlKSB7CisgICAgY2FzZSBDYWNoZVR5
cGU6OlVuc2V0OgorICAgIGNhc2UgQ2FjaGVUeXBlOjpBcnJheUxlbmd0aDoKKyAgICBjYXNlIENh
Y2hlVHlwZTo6U3RyaW5nTGVuZ3RoOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBjYXNlIENh
Y2hlVHlwZTo6R2V0QnlJZFNlbGY6CisgICAgY2FzZSBDYWNoZVR5cGU6OlB1dEJ5SWRSZXBsYWNl
OgorICAgIGNhc2UgQ2FjaGVUeXBlOjpJbkJ5SWRTZWxmOgorICAgICAgICByZXR1cm4gdS5ieUlk
U2VsZi5iYXNlT2JqZWN0U3RydWN0dXJlLT5tYXJrSWZDaGVhcDEodmlzaXRvcik7CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICBjYXNlIENhY2hlVHlwZTo6U3R1YjoKKyAgICAgICAgcmV0dXJu
IHUuc3R1Yi0+cHJvcGFnYXRlVHJhbnNpdGlvbnMxMCh2aXNpdG9yKTsKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKyAgICAKKy8vICAgIFVOVVNFRF9QQVJBTSh2aXNpdG9yKTsgLy8gbWxh
bSBURVNUCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworI2VuZGlmIC8vIEVOQUJMRShKSVQpCisKKy8vdGVtcGxhdGU8PiBib29sIFN0cnVj
dHVyZVN0dWJJbmZvOjpwcm9wYWdhdGVUcmFuc2l0aW9uczEoU2xvdFZpc2l0b3ImKTsKKy8vdGVt
cGxhdGU8PiBib29sIFN0cnVjdHVyZVN0dWJJbmZvOjpwcm9wYWdhdGVUcmFuc2l0aW9uczEoQWJz
dHJhY3RTbG90VmlzaXRvciYpOworCisvL3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+CisvL3Zv
aWQgQ29kZUJsb2NrOjpwcm9wYWdhdGVUcmFuc2l0aW9ucyhjb25zdCBDb25jdXJyZW50SlNMb2Nr
ZXImLCBWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBDb2RlQmxvY2s6OnByb3BhZ2F0ZVRyYW5zaXRp
b25zMTA0NShjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBBYnN0cmFjdFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQogeworICAgIEFic3RyYWN0U2xvdFZpc2l0b3I6OkNvbnRleHQgY29udGV4dCh2aXNp
dG9yLCB0aGlzKTsKKyAgICBBYnN0cmFjdFNsb3RWaXNpdG9yOjpTdXBwcmVzc0dDVmVyaWZpZXJT
Y29wZSBzdXBwcmVzc1Njb3BlKHZpc2l0b3IpOwogICAgIFZNJiB2bSA9ICptX3ZtOwogCisgICAg
aWYgKG1sYW1WZXJib3NlKSBkYXRhTG9nTG4oIiAgICBtbGFtIENvZGVCbG9jazwiLCBSYXdQb2lu
dGVyKHRoaXMpLCAiPjo6cHJvcGFnYXRlVHJhbnNpdGlvbnMxPGdjIyIsIG1sYW1UaW1lLCAiPjog
U1RFUCAwIHZpc2l0b3IgIiwgdmlzaXRvci5jb2RlTmFtZSgpLCAiIGppdFR5cGUgIiwgaml0VHlw
ZSgpKTsKICAgICBpZiAoaml0VHlwZSgpID09IEpJVFR5cGU6OkludGVycHJldGVyVGh1bmspIHsK
KyAgICAgICAgaWYgKG1sYW1WZXJib3NlKSBkYXRhTG9nTG4oIiAgICBtbGFtIENvZGVCbG9jazwi
LCBSYXdQb2ludGVyKHRoaXMpLCAiPjo6cHJvcGFnYXRlVHJhbnNpdGlvbnMxPGdjIyIsIG1sYW1U
aW1lLCAiPjogU1RFUCAwLjUgdmlzaXRvciAiLCB2aXNpdG9yLmNvZGVOYW1lKCksICIgbV9tZXRh
ZGF0YSAiLCBSYXdQb2ludGVyKG1fbWV0YWRhdGEuZ2V0KCkpKTsKICAgICAgICAgaWYgKG1fbWV0
YWRhdGEpIHsKICAgICAgICAgICAgIG1fbWV0YWRhdGEtPmZvckVhY2g8T3BQdXRCeUlkPihbJl0g
KGF1dG8mIG1ldGFkYXRhKSB7CisvLyAgICAgICAgICAgICAgICBBYnN0cmFjdFNsb3RWaXNpdG9y
OjpTdXBwcmVzc0dDVmVyaWZpZXJTY29wZSBzdXBwcmVzc1Njb3BlKHZpc2l0b3IpOwogICAgICAg
ICAgICAgICAgIFN0cnVjdHVyZUlEIG9sZFN0cnVjdHVyZUlEID0gbWV0YWRhdGEubV9vbGRTdHJ1
Y3R1cmVJRDsKICAgICAgICAgICAgICAgICBTdHJ1Y3R1cmVJRCBuZXdTdHJ1Y3R1cmVJRCA9IG1l
dGFkYXRhLm1fbmV3U3RydWN0dXJlSUQ7CiAgICAgICAgICAgICAgICAgaWYgKCFvbGRTdHJ1Y3R1
cmVJRCB8fCAhbmV3U3RydWN0dXJlSUQpCkBAIC0xMTM3LDggKzExOTYsMjYgQEAgdm9pZCBDb2Rl
QmxvY2s6OnByb3BhZ2F0ZVRyYW5zaXRpb25zKGNvbgogICAgICAgICAgICAgICAgICAgICB2bS5o
ZWFwLnN0cnVjdHVyZUlEVGFibGUoKS5nZXQob2xkU3RydWN0dXJlSUQpOwogICAgICAgICAgICAg
ICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0KICAgICAgICAgICAgICAgICAgICAgdm0uaGVh
cC5zdHJ1Y3R1cmVJRFRhYmxlKCkuZ2V0KG5ld1N0cnVjdHVyZUlEKTsKLSAgICAgICAgICAgICAg
ICBpZiAodm0uaGVhcC5pc01hcmtlZChvbGRTdHJ1Y3R1cmUpKQorICAgICAgICAgICAgICAgIGlm
IChtbGFtVmVyYm9zZSkgZGF0YUxvZ0xuKCIgICAgbWxhbSBDb2RlQmxvY2s8IiwgUmF3UG9pbnRl
cih0aGlzKSwgIj46OnByb3BhZ2F0ZVRyYW5zaXRpb25zMTxnYyMiLCBtbGFtVGltZSwgIj46IFNU
RVAgMC42IHZpc2l0b3IgIiwgdmlzaXRvci5jb2RlTmFtZSgpLCAiIG9sZFN0cnVjdHVyZSAiLCBS
YXdQb2ludGVyKG9sZFN0cnVjdHVyZSksICIgdmlzaXRvci5pc01hcmtlZChvbGRTdHJ1Y3R1cmUp
ICIsIHZpc2l0b3IuaXNNYXJrZWQob2xkU3RydWN0dXJlKSk7CisvLyAgICAgICAgICAgICAgICBp
ZiAodmlzaXRvci5pc01hcmtlZChvbGRTdHJ1Y3R1cmUpKSB7CisgICAgICAgICAgICAgICAgaWYg
KCF2aXNpdG9yLmlzTWFya2VkKG9sZFN0cnVjdHVyZSkpIHsKKyAgICAgICAgICAgICAgICAgICAg
Ly8gV2hldGhlciBvbGRTdHJ1Y3R1cmUgaXMgbWFya2VkIG9yIG5vdCBpcyBpbmhlcmVudGx5IHJh
Y3ksIGFuZCBkZXBlbmRzIG9uIHRoZQorICAgICAgICAgICAgICAgICAgICAvLyBvcmRlciBpbiB3
aGljaCBHQyBtYXJrZXJzIHZpc2l0IG9iamVjdHMuIEFzIGEgcmVzdWx0LCB0aGUgR0MgdmVyaWZp
ZXIgbWF5IHNlZQorICAgICAgICAgICAgICAgICAgICAvLyBvbGRTdHJ1Y3R1cmUgYXMgbWFya2Vk
IGF0IHRoaXMgcG9pbnQgdGhvdWdoIHRoZSByZWFsIEdDIGRvZXMgbm90IGR1ZSB0byBkaWZmZXJl
bnQKKyAgICAgICAgICAgICAgICAgICAgLy8gdmlzaXRpbmcgb3JkZXJzLiBOb3RlIHRoYXQgdGhp
cyBpcyBPSzogZmluYWxpemVMTEludElubGluZUNhY2hlcygpIHdpbGwgY2xlYW4KKyAgICAgICAg
ICAgICAgICAgICAgLy8gdGhpbmdzIHVwIGFuZCBtYWtlIHRoZW0gY29uc2lzdGVudCBpZiB3ZSBl
bmQgdXAgbm90IHZpc2l0aW5nIG5ld1N0cnVjdHVyZS4KKyAgICAgICAgICAgICAgICAgICAgLy8K
KyAgICAgICAgICAgICAgICAgICAgLy8gVG8gbWFrZSBpdCBzbyB0aGF0IHRoZSBHQyB2ZXJpZmll
ciB3aWxsIHNlZSBhIGNvbnNpc3RlbnQgdmlldyBvZiB3aGV0aGVyIHdlCisgICAgICAgICAgICAg
ICAgICAgIC8vIHNhdyB0aGlzIG9sZFN0cnVjdHVyZSBpcyBtYXJrZWQgb3Igbm90LCBsZXQncyBm
bGFnIHRoZSBjYWNoZSBhcyBjbGVhcmVkIGlmCisgICAgICAgICAgICAgICAgICAgIC8vIGFscmVh
ZHkgZGVjaWRlZCB0byBub3QgdmlzaXQgbmV3U3RydWN0dXJlLgorICAgICAgICAgICAgICAgICAg
ICAvLworICAgICAgICAgICAgICAgICAgICAvLyBUaGUgbXV0YXRvciBpcyBmaW5lIHdpdGggdGhp
cyBiZWNhdXNlIGl0IGFsd2F5cyByZWFkcyBtX29sZFN0cnVjdHVyZUlEIGZpcnN0CisgICAgICAg
ICAgICAgICAgICAgIC8vIGJlZm9yZSByZWFkaW5nIGFueSBvZiB0aGUgb3RoZXIgZmllbGRzLiBU
aGUgbXV0YXRvciB3aWxsIGp1c3Qgd29yay4KKyAgICAgICAgICAgICAgICAgICAgbWV0YWRhdGEu
bV9vbGRTdHJ1Y3R1cmVJRCA9IDA7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKG1sYW1WZXJib3NlKSBkYXRhTG9nTG4oIiAgICBtbGFtIENvZGVCbG9j
azwiLCBSYXdQb2ludGVyKHRoaXMpLCAiPjo6cHJvcGFnYXRlVHJhbnNpdGlvbnMxPGdjIyIsIG1s
YW1UaW1lLCAiPjogU1RFUCAxIHZpc2l0b3IgIiwgdmlzaXRvci5jb2RlTmFtZSgpLCAiIG5ld1N0
cnVjdHVyZSAiLCBSYXdQb2ludGVyKG5ld1N0cnVjdHVyZSkpOwogICAgICAgICAgICAgICAgICAg
ICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKG5ld1N0cnVjdHVyZSk7CisgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgfSk7CiAKICAgICAgICAgICAgIG1fbWV0YWRhdGEtPmZvckVhY2g8
T3BQdXRQcml2YXRlTmFtZT4oWyZdIChhdXRvJiBtZXRhZGF0YSkgewpAQCAtMTE0OSwyNCArMTIy
NiwyNyBAQCB2b2lkIENvZGVCbG9jazo6cHJvcGFnYXRlVHJhbnNpdGlvbnMoY29uCiAKICAgICAg
ICAgICAgICAgICBKU0NlbGwqIHByb3BlcnR5ID0gbWV0YWRhdGEubV9wcm9wZXJ0eS5nZXQoKTsK
ICAgICAgICAgICAgICAgICBBU1NFUlQocHJvcGVydHkpOwotICAgICAgICAgICAgICAgIGlmICgh
dm0uaGVhcC5pc01hcmtlZChwcm9wZXJ0eSkpCisgICAgICAgICAgICAgICAgaWYgKCF2aXNpdG9y
LmlzTWFya2VkKHByb3BlcnR5KSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogCiAgICAg
ICAgICAgICAgICAgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUgPQogICAgICAgICAgICAgICAgICAg
ICB2bS5oZWFwLnN0cnVjdHVyZUlEVGFibGUoKS5nZXQob2xkU3RydWN0dXJlSUQpOwogICAgICAg
ICAgICAgICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0KICAgICAgICAgICAgICAgICAgICAg
dm0uaGVhcC5zdHJ1Y3R1cmVJRFRhYmxlKCkuZ2V0KG5ld1N0cnVjdHVyZUlEKTsKLSAgICAgICAg
ICAgICAgICBpZiAodm0uaGVhcC5pc01hcmtlZChvbGRTdHJ1Y3R1cmUpKQorICAgICAgICAgICAg
ICAgIGlmICh2aXNpdG9yLmlzTWFya2VkKG9sZFN0cnVjdHVyZSkpIHsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKG1sYW1WZXJib3NlKSBkYXRhTG9nTG4oIiAgICBtbGFtIENvZGVCbG9jazwiLCBS
YXdQb2ludGVyKHRoaXMpLCAiPjo6cHJvcGFnYXRlVHJhbnNpdGlvbnMxPGdjIyIsIG1sYW1UaW1l
LCAiPjogU1RFUCAyIHZpc2l0b3IgIiwgdmlzaXRvci5jb2RlTmFtZSgpLCAiIG5ld1N0cnVjdHVy
ZSAiLCBSYXdQb2ludGVyKG5ld1N0cnVjdHVyZSkpOwogICAgICAgICAgICAgICAgICAgICB2aXNp
dG9yLmFwcGVuZFVuYmFycmllcmVkKG5ld1N0cnVjdHVyZSk7CisgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgfSk7CiAgICAgICAgIH0KICAgICB9CiAKICNpZiBFTkFCTEUoSklUKQogICAg
IGlmIChKSVRDb2RlOjppc0pJVChqaXRUeXBlKCkpKSB7CisvLyAgICAgICAgQWJzdHJhY3RTbG90
VmlzaXRvcjo6U3VwcHJlc3NHQ1ZlcmlmaWVyU2NvcGUgc3VwcHJlc3NTY29wZSh2aXNpdG9yKTsK
ICAgICAgICAgaWYgKGF1dG8qIGppdERhdGEgPSBtX2ppdERhdGEuZ2V0KCkpIHsKICAgICAgICAg
ICAgIGZvciAoU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvIDogaml0RGF0YS0+bV9zdHViSW5m
b3MpCi0gICAgICAgICAgICAgICAgc3R1YkluZm8tPnByb3BhZ2F0ZVRyYW5zaXRpb25zKHZpc2l0
b3IpOworICAgICAgICAgICAgICAgIHN0dWJJbmZvLT5wcm9wYWdhdGVUcmFuc2l0aW9uczEodmlz
aXRvcik7CiAgICAgICAgIH0KICAgICB9CiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKQEAgLTExNzUs
MTMgKzEyNTUsMTMgQEAgdm9pZCBDb2RlQmxvY2s6OnByb3BhZ2F0ZVRyYW5zaXRpb25zKGNvbgog
ICAgIGlmIChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSgpKSkgewogICAgICAgICBE
Rkc6OkNvbW1vbkRhdGEqIGRmZ0NvbW1vbiA9IG1faml0Q29kZS0+ZGZnQ29tbW9uKCk7CiAgICAg
ICAgIAotICAgICAgICBkZmdDb21tb24tPnJlY29yZGVkU3RhdHVzZXMubWFya0lmQ2hlYXAodmlz
aXRvcik7CisgICAgICAgIGRmZ0NvbW1vbi0+cmVjb3JkZWRTdGF0dXNlcy5tYXJrSWZDaGVhcDEo
dmlzaXRvcik7CiAgICAgICAgIAogICAgICAgICBmb3IgKFN0cnVjdHVyZUlEIHN0cnVjdHVyZUlE
IDogZGZnQ29tbW9uLT53ZWFrU3RydWN0dXJlUmVmZXJlbmNlcykKLSAgICAgICAgICAgIHZtLmdl
dFN0cnVjdHVyZShzdHJ1Y3R1cmVJRCktPm1hcmtJZkNoZWFwKHZpc2l0b3IpOworICAgICAgICAg
ICAgdm0uZ2V0U3RydWN0dXJlKHN0cnVjdHVyZUlEKS0+bWFya0lmQ2hlYXAxKHZpc2l0b3IpOwog
CiAgICAgICAgIGZvciAoYXV0byYgdHJhbnNpdGlvbiA6IGRmZ0NvbW1vbi0+dHJhbnNpdGlvbnMp
IHsKLSAgICAgICAgICAgIGlmIChzaG91bGRNYXJrVHJhbnNpdGlvbih2bSwgdHJhbnNpdGlvbikp
IHsKKyAgICAgICAgICAgIGlmIChzaG91bGRNYXJrVHJhbnNpdGlvbih2aXNpdG9yLCB0cmFuc2l0
aW9uKSkgewogICAgICAgICAgICAgICAgIC8vIElmIHRoZSBmb2xsb3dpbmcgdGhyZWUgdGhpbmdz
IGFyZSBsaXZlLCB0aGVuIHRoZSB0YXJnZXQgb2YgdGhlCiAgICAgICAgICAgICAgICAgLy8gdHJh
bnNpdGlvbiBpcyBhbHNvIGxpdmU6CiAgICAgICAgICAgICAgICAgLy8KQEAgLTEyMDEsNiArMTI4
MSw3IEBAIHZvaWQgQ29kZUJsb2NrOjpwcm9wYWdhdGVUcmFuc2l0aW9ucyhjb24KICAgICAgICAg
ICAgICAgICAvLyB0byBtYXJrIChpLmUuIGl0cyBnbG9iYWwgb2JqZWN0IGFuZCBwcm90b3R5cGUg
YXJlIGJvdGggYWxyZWFkeQogICAgICAgICAgICAgICAgIC8vIGxpdmUpLgogCisgICAgICAgICAg
ICAgICAgaWYgKG1sYW1WZXJib3NlKSBkYXRhTG9nTG4oIiAgICBtbGFtIENvZGVCbG9jazwiLCBS
YXdQb2ludGVyKHRoaXMpLCAiPjo6cHJvcGFnYXRlVHJhbnNpdGlvbnMxPGdjIyIsIG1sYW1UaW1l
LCAiPjogU1RFUCAzIHZpc2l0b3IgIiwgdmlzaXRvci5jb2RlTmFtZSgpLCAiIHRyYW5zaXRpb24u
bV90byAiLCBSYXdQb2ludGVyKHRyYW5zaXRpb24ubV90by5nZXQoKSkpOwogICAgICAgICAgICAg
ICAgIHZpc2l0b3IuYXBwZW5kKHRyYW5zaXRpb24ubV90byk7CiAgICAgICAgICAgICB9CiAgICAg
ICAgIH0KQEAgLTEyMDgsMTMgKzEyODksMTkgQEAgdm9pZCBDb2RlQmxvY2s6OnByb3BhZ2F0ZVRy
YW5zaXRpb25zKGNvbgogI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQogfQogCi12b2lkIENvZGVC
bG9jazo6ZGV0ZXJtaW5lTGl2ZW5lc3MoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgU2xvdFZp
c2l0b3ImIHZpc2l0b3IpCisvL3RlbXBsYXRlIHZvaWQgQ29kZUJsb2NrOjpwcm9wYWdhdGVUcmFu
c2l0aW9ucyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBTbG90VmlzaXRvciYpOworLy90ZW1w
bGF0ZSB2b2lkIENvZGVCbG9jazo6cHJvcGFnYXRlVHJhbnNpdGlvbnMoY29uc3QgQ29uY3VycmVu
dEpTTG9ja2VyJiwgVmVyaWZpZXJTbG90VmlzaXRvciYpOworCisvL3RlbXBsYXRlPHR5cGVuYW1l
IFZpc2l0b3I+CisvL3ZvaWQgQ29kZUJsb2NrOjpkZXRlcm1pbmVMaXZlbmVzcyhjb25zdCBDb25j
dXJyZW50SlNMb2NrZXImLCBWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBDb2RlQmxvY2s6OmRldGVy
bWluZUxpdmVuZXNzKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIEFic3RyYWN0U2xvdFZpc2l0
b3ImIHZpc2l0b3IpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHZpc2l0b3IpOwogICAgIAogI2lmIEVO
QUJMRShERkdfSklUKQogICAgIFZNJiB2bSA9ICptX3ZtOwotICAgIGlmICh2bS5oZWFwLmlzTWFy
a2VkKHRoaXMpKQorLy8gICAgaWYgKHZtLmhlYXAuaXNNYXJrZWQodGhpcykpIC8vIG1sYW0KKyAg
ICBpZiAodmlzaXRvci5pc01hcmtlZCh0aGlzKSkKICAgICAgICAgcmV0dXJuOwogICAgIAogICAg
IC8vIEluIHJhcmUgYW5kIHdlaXJkIGNhc2VzLCB0aGlzIGNvdWxkIGJlIGNhbGxlZCBvbiBhIGJh
c2VsaW5lIENvZGVCbG9jay4gT25lIHRoYXQgSSBmb3VuZCB3YXMKQEAgLTEyMzEsNyArMTMxOCw4
IEBAIHZvaWQgQ29kZUJsb2NrOjpkZXRlcm1pbmVMaXZlbmVzcyhjb25zdCAKICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgZGZnQ29tbW9uLT53ZWFrUmVmZXJlbmNlcy5zaXplKCk7ICsraSkg
ewogICAgICAgICBKU0NlbGwqIHJlZmVyZW5jZSA9IGRmZ0NvbW1vbi0+d2Vha1JlZmVyZW5jZXNb
aV0uZ2V0KCk7CiAgICAgICAgIEFTU0VSVCghanNEeW5hbWljQ2FzdDxDb2RlQmxvY2sqPih2bSwg
cmVmZXJlbmNlKSk7Ci0gICAgICAgIGlmICghdm0uaGVhcC5pc01hcmtlZChyZWZlcmVuY2UpKSB7
CisvLyAgICAgICAgaWYgKCF2bS5oZWFwLmlzTWFya2VkKHJlZmVyZW5jZSkpIHsgLy8gbWxhbQor
ICAgICAgICBpZiAoIXZpc2l0b3IuaXNNYXJrZWQocmVmZXJlbmNlKSkgewogICAgICAgICAgICAg
YWxsQXJlTGl2ZVNvRmFyID0gZmFsc2U7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpA
QCAtMTIzOSw3ICsxMzI3LDggQEAgdm9pZCBDb2RlQmxvY2s6OmRldGVybWluZUxpdmVuZXNzKGNv
bnN0IAogICAgIGlmIChhbGxBcmVMaXZlU29GYXIpIHsKICAgICAgICAgZm9yIChTdHJ1Y3R1cmVJ
RCBzdHJ1Y3R1cmVJRCA6IGRmZ0NvbW1vbi0+d2Vha1N0cnVjdHVyZVJlZmVyZW5jZXMpIHsKICAg
ICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gdm0uZ2V0U3RydWN0dXJlKHN0cnVjdHVy
ZUlEKTsKLSAgICAgICAgICAgIGlmICghdm0uaGVhcC5pc01hcmtlZChzdHJ1Y3R1cmUpKSB7Cisv
LyAgICAgICAgICAgIGlmICghdm0uaGVhcC5pc01hcmtlZChzdHJ1Y3R1cmUpKSB7CisgICAgICAg
ICAgICBpZiAoIXZpc2l0b3IuaXNNYXJrZWQoc3RydWN0dXJlKSkgewogICAgICAgICAgICAgICAg
IGFsbEFyZUxpdmVTb0ZhciA9IGZhbHNlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgfQpAQCAtMTI1Nyw2ICsxMzQ2LDkgQEAgdm9pZCBDb2RlQmxvY2s6OmRldGVybWluZUxp
dmVuZXNzKGNvbnN0IAogI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQogfQogCisvL3RlbXBsYXRl
IHZvaWQgQ29kZUJsb2NrOjpkZXRlcm1pbmVMaXZlbmVzcyhjb25zdCBDb25jdXJyZW50SlNMb2Nr
ZXImLCBTbG90VmlzaXRvciYpOworLy90ZW1wbGF0ZSB2b2lkIENvZGVCbG9jazo6ZGV0ZXJtaW5l
TGl2ZW5lc3MoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgVmVyaWZpZXJTbG90VmlzaXRvciYp
OworCiB2b2lkIENvZGVCbG9jazo6ZmluYWxpemVMTEludElubGluZUNhY2hlcygpCiB7CiAgICAg
Vk0mIHZtID0gKm1fdm07CkBAIC0xMzE0LDcgKzE0MDYsMTEgQEAgdm9pZCBDb2RlQmxvY2s6OmZp
bmFsaXplTExJbnRJbmxpbmVDYWNoZQogICAgICAgICAgICAgU3RydWN0dXJlSUQgb2xkU3RydWN0
dXJlSUQgPSBtZXRhZGF0YS5tX29sZFN0cnVjdHVyZUlEOwogICAgICAgICAgICAgU3RydWN0dXJl
SUQgbmV3U3RydWN0dXJlSUQgPSBtZXRhZGF0YS5tX25ld1N0cnVjdHVyZUlEOwogICAgICAgICAg
ICAgU3RydWN0dXJlQ2hhaW4qIGNoYWluID0gbWV0YWRhdGEubV9zdHJ1Y3R1cmVDaGFpbi5nZXQo
KTsKLSAgICAgICAgICAgIGlmICgoIW9sZFN0cnVjdHVyZUlEIHx8IHZtLmhlYXAuaXNNYXJrZWQo
dm0uaGVhcC5zdHJ1Y3R1cmVJRFRhYmxlKCkuZ2V0KG9sZFN0cnVjdHVyZUlEKSkpCisgICAgICAg
ICAgICAvLyBtbGFtIEZJWE1FIHJlLXRoaW5rIGlmIHdlIGNhbiBtYWtlIHRoaXMgbGVzcyBwZXNz
aW1pc3RpYyAoYW5kIGRvIHdlIG5lZWQgdG8pPworLy8gICAgICAgICAgICBpZiAoKCFvbGRTdHJ1
Y3R1cmVJRCB8fCB2bS5oZWFwLmlzTWFya2VkKHZtLmhlYXAuc3RydWN0dXJlSURUYWJsZSgpLmdl
dChvbGRTdHJ1Y3R1cmVJRCkpKQorLy8gICAgICAgICAgICAgICAgJiYgKCFuZXdTdHJ1Y3R1cmVJ
RCB8fCB2bS5oZWFwLmlzTWFya2VkKHZtLmhlYXAuc3RydWN0dXJlSURUYWJsZSgpLmdldChuZXdT
dHJ1Y3R1cmVJRCkpKQorLy8gICAgICAgICAgICAgICAgJiYgKCFjaGFpbiB8fCB2bS5oZWFwLmlz
TWFya2VkKGNoYWluKSkpCisgICAgICAgICAgICBpZiAob2xkU3RydWN0dXJlSUQgJiYgdm0uaGVh
cC5pc01hcmtlZCh2bS5oZWFwLnN0cnVjdHVyZUlEVGFibGUoKS5nZXQob2xkU3RydWN0dXJlSUQp
KQogICAgICAgICAgICAgICAgICYmICghbmV3U3RydWN0dXJlSUQgfHwgdm0uaGVhcC5pc01hcmtl
ZCh2bS5oZWFwLnN0cnVjdHVyZUlEVGFibGUoKS5nZXQobmV3U3RydWN0dXJlSUQpKSkKICAgICAg
ICAgICAgICAgICAmJiAoIWNoYWluIHx8IHZtLmhlYXAuaXNNYXJrZWQoY2hhaW4pKSkKICAgICAg
ICAgICAgICAgICByZXR1cm47CkBAIC0xNjAwLDYgKzE2OTYsNyBAQCB2b2lkIENvZGVCbG9jazo6
ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoCiAgICAgdXBkYXRlQWN0aXZpdHkoKTsKIAogICAgIFZN
OjpTcGFjZUFuZFNldDo6c2V0Rm9yKCpzdWJzcGFjZSgpKS5yZW1vdmUodGhpcyk7CisgICAgbV9t
bGFtRmxhZyA9IGZhbHNlOyAvLyBtbGFtIFRFU1QKIH0KIAogdm9pZCBDb2RlQmxvY2s6OmRlc3Ry
b3koSlNDZWxsKiBjZWxsKQpAQCAtMTc5Miw3ICsxODg5LDggQEAgdm9pZCBDb2RlQmxvY2s6OnJl
c2V0SklURGF0YSgpCiB9CiAjZW5kaWYKIAotdm9pZCBDb2RlQmxvY2s6OnZpc2l0T1NSRXhpdFRh
cmdldHMoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0
ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBDb2RlQmxvY2s6OnZpc2l0T1NSRXhpdFRh
cmdldHMoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAg
ICAvLyBXZSBzdHJvbmdseSB2aXNpdCBPU1IgZXhpdHMgdGFyZ2V0cyBiZWNhdXNlIHdlIGRvbid0
IHdhbnQgdG8gZGVhbCB3aXRoCiAgICAgLy8gdGhlIGNvbXBsZXhpdHkgb2YgZ2VuZXJhdGluZyBh
biBleGl0IHRhcmdldCBDb2RlQmxvY2sgb24gZGVtYW5kIGFuZApAQCAtMTgxMiwxNSArMTkxMCwy
MSBAQCB2b2lkIENvZGVCbG9jazo6dmlzaXRPU1JFeGl0VGFyZ2V0cyhjb25zCiAjZW5kaWYKIH0K
IAotdm9pZCBDb2RlQmxvY2s6OnN0cm9uZ2x5VmlzaXRTdHJvbmdSZWZlcmVuY2VzKGNvbnN0IENv
bmN1cnJlbnRKU0xvY2tlciYgbG9ja2VyLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRl
IHZvaWQgQ29kZUJsb2NrOjp2aXNpdE9TUkV4aXRUYXJnZXRzKGNvbnN0IENvbmN1cnJlbnRKU0xv
Y2tlciYsIFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIENvZGVCbG9jazo6dmlzaXRPU1JF
eGl0VGFyZ2V0cyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBBYnN0cmFjdFNsb3RWaXNpdG9y
Jik7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIENvZGVCbG9jazo6c3Ryb25n
bHlWaXNpdFN0cm9uZ1JlZmVyZW5jZXMoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiBsb2NrZXIs
IFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGxvY2tlcik7CiAgICAgCiAg
ICAgdmlzaXRvci5hcHBlbmQobV9nbG9iYWxPYmplY3QpOwogICAgIHZpc2l0b3IuYXBwZW5kKG1f
b3duZXJFeGVjdXRhYmxlKTsgLy8gVGhpcyBpcyBleHRyYSBpbXBvcnRhbnQgc2luY2UgaXQgY2F1
c2VzIHRoZSBFeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlIHRvIGJlIG1hcmtlZC4KICAgICB2aXNp
dG9yLmFwcGVuZChtX3VubGlua2VkQ29kZSk7Ci0gICAgaWYgKG1fcmFyZURhdGEpCisgICAgaWYg
KG1fcmFyZURhdGEpIHsKKyAgICAgICAgaWYgKG1sYW1WZXJib3NlKSBkYXRhTG9nTG4oIiAgICBt
bGFtIENvZGVCbG9jazwiLCBSYXdQb2ludGVyKHRoaXMpLCAiPjo6c3Ryb25nbHlWaXNpdFN0cm9u
Z1JlZmVyZW5jZXM6IG1fZGlyZWN0RXZhbENvZGVDYWNoZTwiLCBSYXdQb2ludGVyKCZtX3JhcmVE
YXRhLT5tX2RpcmVjdEV2YWxDb2RlQ2FjaGUpLCAiPi52aXNpdEFnZ3JlZ2F0ZSgpIDxnYyMiLCBt
bGFtVGltZSwgIj4gdmlzaXRvciAiLCB2aXNpdG9yLmNvZGVOYW1lKCkpOwogICAgICAgICBtX3Jh
cmVEYXRhLT5tX2RpcmVjdEV2YWxDb2RlQ2FjaGUudmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7Cisg
ICAgfQogICAgIHZpc2l0b3IuYXBwZW5kVmFsdWVzKG1fY29uc3RhbnRSZWdpc3RlcnMuZGF0YSgp
LCBtX2NvbnN0YW50UmVnaXN0ZXJzLnNpemUoKSk7CiAgICAgZm9yIChhdXRvJiBmdW5jdGlvbkV4
cHIgOiBtX2Z1bmN0aW9uRXhwcnMpCiAgICAgICAgIHZpc2l0b3IuYXBwZW5kKGZ1bmN0aW9uRXhw
cik7CkBAIC0xODMzLDIyICsxOTM3LDI2IEBAIHZvaWQgQ29kZUJsb2NrOjpzdHJvbmdseVZpc2l0
U3Ryb25nUmVmZXIKICNpZiBFTkFCTEUoSklUKQogICAgIGlmIChhdXRvKiBqaXREYXRhID0gbV9q
aXREYXRhLmdldCgpKSB7CiAgICAgICAgIGZvciAoQnlWYWxJbmZvKiBieVZhbEluZm8gOiBqaXRE
YXRhLT5tX2J5VmFsSW5mb3MpCi0gICAgICAgICAgICBieVZhbEluZm8tPnZpc2l0QWdncmVnYXRl
KHZpc2l0b3IpOworICAgICAgICAgICAgYnlWYWxJbmZvLT52aXNpdEFnZ3JlZ2F0ZTEodmlzaXRv
cik7CiAgICAgICAgIGZvciAoU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvIDogaml0RGF0YS0+
bV9zdHViSW5mb3MpCi0gICAgICAgICAgICBzdHViSW5mby0+dmlzaXRBZ2dyZWdhdGUodmlzaXRv
cik7CisgICAgICAgICAgICBzdHViSW5mby0+dmlzaXRBZ2dyZWdhdGUxKHZpc2l0b3IpOwogICAg
IH0KICNlbmRpZgogCiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAgaWYgKEpJVENvZGU6OmlzT3B0
aW1pemluZ0pJVChqaXRUeXBlKCkpKSB7CiAgICAgICAgIERGRzo6Q29tbW9uRGF0YSogZGZnQ29t
bW9uID0gbV9qaXRDb2RlLT5kZmdDb21tb24oKTsKLSAgICAgICAgZGZnQ29tbW9uLT5yZWNvcmRl
ZFN0YXR1c2VzLnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOworICAgICAgICBkZmdDb21tb24tPnJl
Y29yZGVkU3RhdHVzZXMudmlzaXRBZ2dyZWdhdGUxKHZpc2l0b3IpOwogICAgICAgICB2aXNpdE9T
UkV4aXRUYXJnZXRzKGxvY2tlciwgdmlzaXRvcik7CiAgICAgfQogI2VuZGlmCiB9CiAKLXZvaWQg
Q29kZUJsb2NrOjpzdHJvbmdseVZpc2l0V2Vha1JlZmVyZW5jZXMoY29uc3QgQ29uY3VycmVudEpT
TG9ja2VyJiwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3RlbXBsYXRlIHZvaWQgQ29kZUJsb2Nr
OjpzdHJvbmdseVZpc2l0U3Ryb25nUmVmZXJlbmNlcyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXIm
LCBTbG90VmlzaXRvciYpOworLy90ZW1wbGF0ZSB2b2lkIENvZGVCbG9jazo6c3Ryb25nbHlWaXNp
dFN0cm9uZ1JlZmVyZW5jZXMoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgVmVyaWZpZXJTbG90
VmlzaXRvciYpOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBDb2RlQmxvY2s6
OnN0cm9uZ2x5VmlzaXRXZWFrUmVmZXJlbmNlcyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBW
aXNpdG9yJiB2aXNpdG9yKQogewogICAgIFVOVVNFRF9QQVJBTSh2aXNpdG9yKTsKIApAQCAtMTg3
NSw2ICsxOTgzLDkgQEAgdm9pZCBDb2RlQmxvY2s6OnN0cm9uZ2x5VmlzaXRXZWFrUmVmZXJlbgog
I2VuZGlmICAgIAogfQogCit0ZW1wbGF0ZSB2b2lkIENvZGVCbG9jazo6c3Ryb25nbHlWaXNpdFdl
YWtSZWZlcmVuY2VzKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIFNsb3RWaXNpdG9yJik7Cit0
ZW1wbGF0ZSB2b2lkIENvZGVCbG9jazo6c3Ryb25nbHlWaXNpdFdlYWtSZWZlcmVuY2VzKGNvbnN0
IENvbmN1cnJlbnRKU0xvY2tlciYsIEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKKwogQ29kZUJsb2Nr
KiBDb2RlQmxvY2s6OmJhc2VsaW5lQWx0ZXJuYXRpdmUoKQogewogI2lmIEVOQUJMRShKSVQpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShyZXZpc2lv
biAyNzI3MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTIwMSwxMCArMjAxLDExIEBAIHB1YmxpYzoKICAgICAvLyBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIzNjc3CiAgICAgQ29kZUJsb2Nr
KiBiYXNlbGluZVZlcnNpb24oKTsKIAorICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CisKICAg
ICBzdGF0aWMgc2l6ZV90IGVzdGltYXRlZFNpemUoSlNDZWxsKiwgVk0mKTsKLSAgICBzdGF0aWMg
dm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CiAgICAgc3RhdGljIHZv
aWQgZGVzdHJveShKU0NlbGwqKTsKLSAgICB2b2lkIHZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3Im
KTsKKyAgICBERUNMQVJFX0lOU1RBTkNFX1ZJU0lUX0NISUxEUkVOOwogICAgIHZvaWQgZmluYWxp
emVVbmNvbmRpdGlvbmFsbHkoVk0mKTsKIAogICAgIHZvaWQgbm90aWZ5TGV4aWNhbEJpbmRpbmdV
cGRhdGUoKTsKQEAgLTk2MywxNiArOTY0LDE4IEBAIHByaXZhdGU6CiAgICAgICAgIG1fY29uc3Rh
bnRSZWdpc3RlcnNbcmVnLnRvQ29uc3RhbnRJbmRleCgpXS5zZXQoKm1fdm0sIHRoaXMsIHZhbHVl
KTsKICAgICB9CiAKLSAgICBib29sIHNob3VsZFZpc2l0U3Ryb25nbHkoY29uc3QgQ29uY3VycmVu
dEpTTG9ja2VyJik7CisgICAgYm9vbCBzaG91bGRWaXNpdFN0cm9uZ2x5KGNvbnN0IENvbmN1cnJl
bnRKU0xvY2tlciYsIEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKICAgICBib29sIHNob3VsZEpldHRp
c29uRHVlVG9XZWFrUmVmZXJlbmNlKFZNJik7Ci0gICAgYm9vbCBzaG91bGRKZXR0aXNvbkR1ZVRv
T2xkQWdlKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYpOworICAgIGJvb2wgc2hvdWxkSmV0dGlz
b25EdWVUb09sZEFnZShjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBBYnN0cmFjdFNsb3RWaXNp
dG9yJik7CiAgICAgCi0gICAgdm9pZCBwcm9wYWdhdGVUcmFuc2l0aW9ucyhjb25zdCBDb25jdXJy
ZW50SlNMb2NrZXImLCBTbG90VmlzaXRvciYpOwotICAgIHZvaWQgZGV0ZXJtaW5lTGl2ZW5lc3Mo
Y29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgU2xvdFZpc2l0b3ImKTsKKy8vICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgcHJvcGFnYXRlVHJhbnNpdGlvbnMoY29uc3QgQ29uY3Vy
cmVudEpTTG9ja2VyJiwgVmlzaXRvciYpOworICAgIHZvaWQgcHJvcGFnYXRlVHJhbnNpdGlvbnMx
MDQ1KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKKy8v
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgZGV0ZXJtaW5lTGl2ZW5lc3MoY29u
c3QgQ29uY3VycmVudEpTTG9ja2VyJiwgVmlzaXRvciYpOworICAgIHZvaWQgZGV0ZXJtaW5lTGl2
ZW5lc3MoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgQWJzdHJhY3RTbG90VmlzaXRvciYpOwog
ICAgICAgICAKLSAgICB2b2lkIHN0cm9uZ2x5VmlzaXRTdHJvbmdSZWZlcmVuY2VzKGNvbnN0IENv
bmN1cnJlbnRKU0xvY2tlciYsIFNsb3RWaXNpdG9yJik7Ci0gICAgdm9pZCBzdHJvbmdseVZpc2l0
V2Vha1JlZmVyZW5jZXMoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgU2xvdFZpc2l0b3ImKTsK
LSAgICB2b2lkIHZpc2l0T1NSRXhpdFRhcmdldHMoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwg
U2xvdFZpc2l0b3ImKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIHN0cm9u
Z2x5VmlzaXRTdHJvbmdSZWZlcmVuY2VzKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIFZpc2l0
b3ImKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIHN0cm9uZ2x5VmlzaXRX
ZWFrUmVmZXJlbmNlcyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBWaXNpdG9yJik7CisgICAg
dGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCB2aXNpdE9TUkV4aXRUYXJnZXRzKGNvbnN0
IENvbmN1cnJlbnRKU0xvY2tlciYsIFZpc2l0b3ImKTsKIAogICAgIHVuc2lnbmVkIG51bWJlck9m
Tm9uQXJndW1lbnRWYWx1ZVByb2ZpbGVzKCkgeyByZXR1cm4gbV9udW1iZXJPZk5vbkFyZ3VtZW50
VmFsdWVQcm9maWxlczsgfQogICAgIHVuc2lnbmVkIHRvdGFsTnVtYmVyT2ZWYWx1ZVByb2ZpbGVz
KCkgeyByZXR1cm4gbnVtYmVyT2ZBcmd1bWVudFZhbHVlUHJvZmlsZXMoKSArIG51bWJlck9mTm9u
QXJndW1lbnRWYWx1ZVByb2ZpbGVzKCk7IH0KQEAgLTEwNTgsNiArMTA2MSw4IEBAIHByaXZhdGU6
CiAgICAgZG91YmxlIG1fcHJldmlvdXNDb3VudGVyIHsgMCB9OwogCiAgICAgc3RkOjp1bmlxdWVf
cHRyPFJhcmVEYXRhPiBtX3JhcmVEYXRhOworcHVibGljOgorICAgIGJvb2wgbV9tbGFtRmxhZyB7
IGZhbHNlIH07CiB9OwogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgRXhlY3V0YWJsZVR5cGU+CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRGVsZXRlQnlJZFZhcmlhbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9EZWxldGVCeUlkVmFy
aWFudC5jcHAJKHJldmlzaW9uIDI3MjcxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9EZWxldGVCeUlkVmFyaWFudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg4LDE5ICs4OCwy
OSBAQCBib29sIERlbGV0ZUJ5SWRWYXJpYW50Ojp3cml0ZXNTdHJ1Y3R1cmVzCiAgICAgcmV0dXJu
ICEhbmV3U3RydWN0dXJlKCk7CiB9CiAKLXZvaWQgRGVsZXRlQnlJZFZhcmlhbnQ6OnZpc2l0QWdn
cmVnYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy90ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
PgorLy92b2lkIERlbGV0ZUJ5SWRWYXJpYW50Ojp2aXNpdEFnZ3JlZ2F0ZShWaXNpdG9yJiB2aXNp
dG9yKQordm9pZCBEZWxldGVCeUlkVmFyaWFudDo6dmlzaXRBZ2dyZWdhdGUxKEFic3RyYWN0U2xv
dFZpc2l0b3ImIHZpc2l0b3IpCiB7Ci0gICAgbV9pZGVudGlmaWVyLnZpc2l0QWdncmVnYXRlKHZp
c2l0b3IpOworICAgIG1faWRlbnRpZmllci52aXNpdEFnZ3JlZ2F0ZTEodmlzaXRvcik7CiB9CiAK
LXZvaWQgRGVsZXRlQnlJZFZhcmlhbnQ6Om1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJiB2aXNpdG9y
KQorLy90ZW1wbGF0ZSB2b2lkIERlbGV0ZUJ5SWRWYXJpYW50Ojp2aXNpdEFnZ3JlZ2F0ZShTbG90
VmlzaXRvciYpOworLy90ZW1wbGF0ZSB2b2lkIERlbGV0ZUJ5SWRWYXJpYW50Ojp2aXNpdEFnZ3Jl
Z2F0ZShWZXJpZmllclNsb3RWaXNpdG9yJik7CisKKy8vdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRv
cj4KKy8vdm9pZCBEZWxldGVCeUlkVmFyaWFudDo6bWFya0lmQ2hlYXAoVmlzaXRvciYgdmlzaXRv
cikKK3ZvaWQgRGVsZXRlQnlJZFZhcmlhbnQ6Om1hcmtJZkNoZWFwMShBYnN0cmFjdFNsb3RWaXNp
dG9yJiB2aXNpdG9yKQogewogICAgIGlmIChtX29sZFN0cnVjdHVyZSkKLSAgICAgICAgbV9vbGRT
dHJ1Y3R1cmUtPm1hcmtJZkNoZWFwKHZpc2l0b3IpOworICAgICAgICBtX29sZFN0cnVjdHVyZS0+
bWFya0lmQ2hlYXAxKHZpc2l0b3IpOwogICAgIGlmIChtX25ld1N0cnVjdHVyZSkKLSAgICAgICAg
bV9uZXdTdHJ1Y3R1cmUtPm1hcmtJZkNoZWFwKHZpc2l0b3IpOworICAgICAgICBtX25ld1N0cnVj
dHVyZS0+bWFya0lmQ2hlYXAxKHZpc2l0b3IpOwogfQogCisvL3RlbXBsYXRlIHZvaWQgRGVsZXRl
QnlJZFZhcmlhbnQ6Om1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJik7CisvL3RlbXBsYXRlIHZvaWQg
RGVsZXRlQnlJZFZhcmlhbnQ6Om1hcmtJZkNoZWFwKFZlcmlmaWVyU2xvdFZpc2l0b3ImKTsKKwog
dm9pZCBEZWxldGVCeUlkVmFyaWFudDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAogewog
ICAgIGR1bXBJbkNvbnRleHQob3V0LCBudWxscHRyKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9EZWxldGVCeUlkVmFyaWFudC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9EZWxldGVCeUlkVmFyaWFudC5oCShyZXZpc2lvbiAyNzI3
MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRGVsZXRlQnlJZFZhcmlhbnQu
aAkod29ya2luZyBjb3B5KQpAQCAtNjEsOCArNjEsMTAgQEAgcHVibGljOgogCiAgICAgYm9vbCBh
dHRlbXB0VG9NZXJnZShjb25zdCBEZWxldGVCeUlkVmFyaWFudCYgb3RoZXIpOwogCi0gICAgdm9p
ZCB2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYpOwotICAgIHZvaWQgbWFya0lmQ2hlYXAoU2xv
dFZpc2l0b3ImKTsKKy8vICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgdmlzaXRB
Z2dyZWdhdGUoVmlzaXRvciYpOworLy8gICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9p
ZCBtYXJrSWZDaGVhcChWaXNpdG9yJik7CisgICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZTEoQWJzdHJh
Y3RTbG90VmlzaXRvciYpOworICAgIHZvaWQgbWFya0lmQ2hlYXAxKEFic3RyYWN0U2xvdFZpc2l0
b3ImKTsKICAgICBib29sIGZpbmFsaXplKFZNJik7CiAKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJl
YW0mKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9EZWxldGVC
eVN0YXR1cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0RlbGV0ZUJ5U3RhdHVzLmNwcAkocmV2aXNpb24gMjcyNzEwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0RlbGV0ZUJ5U3RhdHVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjU0
LDE4ICsyNTQsMjggQEAgQ2FjaGVhYmxlSWRlbnRpZmllciBEZWxldGVCeVN0YXR1czo6c2luZwog
ICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQgRGVsZXRlQnlTdGF0dXM6OnZpc2l0QWdncmVn
YXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy90ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgor
Ly92b2lkIERlbGV0ZUJ5U3RhdHVzOjp2aXNpdEFnZ3JlZ2F0ZShWaXNpdG9yJiB2aXNpdG9yKQor
dm9pZCBEZWxldGVCeVN0YXR1czo6dmlzaXRBZ2dyZWdhdGUxKEFic3RyYWN0U2xvdFZpc2l0b3Im
IHZpc2l0b3IpCiB7CiAgICAgZm9yIChEZWxldGVCeUlkVmFyaWFudCYgdmFyaWFudCA6IG1fdmFy
aWFudHMpCi0gICAgICAgIHZhcmlhbnQudmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7CisgICAgICAg
IHZhcmlhbnQudmlzaXRBZ2dyZWdhdGUxKHZpc2l0b3IpOwogfQogCi12b2lkIERlbGV0ZUJ5U3Rh
dHVzOjptYXJrSWZDaGVhcChTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vdGVtcGxhdGUgdm9pZCBE
ZWxldGVCeVN0YXR1czo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImKTsKKy8vdGVtcGxhdGUg
dm9pZCBEZWxldGVCeVN0YXR1czo6dmlzaXRBZ2dyZWdhdGUoVmVyaWZpZXJTbG90VmlzaXRvciYp
OworCisvL3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+CisvL3ZvaWQgRGVsZXRlQnlTdGF0dXM6
Om1hcmtJZkNoZWFwKFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIERlbGV0ZUJ5U3RhdHVzOjptYXJr
SWZDaGVhcDEoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBmb3IgKERlbGV0
ZUJ5SWRWYXJpYW50JiB2YXJpYW50IDogbV92YXJpYW50cykKLSAgICAgICAgdmFyaWFudC5tYXJr
SWZDaGVhcCh2aXNpdG9yKTsKKyAgICAgICAgdmFyaWFudC5tYXJrSWZDaGVhcDEodmlzaXRvcik7
CiB9CiAKKy8vdGVtcGxhdGUgdm9pZCBEZWxldGVCeVN0YXR1czo6bWFya0lmQ2hlYXAoU2xvdFZp
c2l0b3ImKTsKKy8vdGVtcGxhdGUgdm9pZCBEZWxldGVCeVN0YXR1czo6bWFya0lmQ2hlYXAoVmVy
aWZpZXJTbG90VmlzaXRvciYpOworCiBib29sIERlbGV0ZUJ5U3RhdHVzOjpmaW5hbGl6ZShWTSYg
dm0pCiB7CiAgICAgZm9yIChhdXRvJiB2YXJpYW50IDogbV92YXJpYW50cykgewpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0RlbGV0ZUJ5U3RhdHVzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0RlbGV0ZUJ5U3RhdHVzLmgJKHJldmlz
aW9uIDI3MjcxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9EZWxldGVCeVN0
YXR1cy5oCSh3b3JraW5nIGNvcHkpCkBAIC04MSw4ICs4MSwxMCBAQCBwdWJsaWM6CiAgICAgLy8g
QXR0ZW1wdHMgdG8gcmVkdWNlIHRoZSBzZXQgb2YgdmFyaWFudHMgdG8gZml0IHRoZSBnaXZlbiBz
dHJ1Y3R1cmUgc2V0LiBUaGlzIG1heSBiZSBhcHByb3hpbWF0ZS4KICAgICB2b2lkIGZpbHRlcihj
b25zdCBTdHJ1Y3R1cmVTZXQmKTsKIAotICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0
b3ImKTsKLSAgICB2b2lkIG1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJik7CisvLyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIHZpc2l0QWdncmVnYXRlKFZpc2l0b3ImKTsKKy8vICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgbWFya0lmQ2hlYXAoVmlzaXRvciYpOwor
ICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUxKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKKyAgICB2b2lk
IG1hcmtJZkNoZWFwMShBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAgICAgYm9vbCBmaW5hbGl6ZShW
TSYpOwogCiAgICAgYm9vbCBhcHBlbmRWYXJpYW50KGNvbnN0IERlbGV0ZUJ5SWRWYXJpYW50Jik7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRGlyZWN0RXZhbENvZGVDYWNo
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0RpcmVj
dEV2YWxDb2RlQ2FjaGUuY3BwCShyZXZpc2lvbiAyNzI3MTApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvRGlyZWN0RXZhbENvZGVDYWNoZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMwLDYgKzMwLDkgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKK2V4dGVybiB1bnNpZ25lZCBtbGFt
VGltZTsKK2V4dGVybiBib29sIG1sYW1WZXJib3NlOworCiB2b2lkIERpcmVjdEV2YWxDb2RlQ2Fj
aGU6OnNldFNsb3coSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDZWxsKiBvd25lciwg
Y29uc3QgU3RyaW5nJiBldmFsU291cmNlLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXgsIERp
cmVjdEV2YWxFeGVjdXRhYmxlKiBldmFsRXhlY3V0YWJsZSkKIHsKICAgICBpZiAoIWV2YWxFeGVj
dXRhYmxlLT5hbGxvd0RpcmVjdEV2YWxDYWNoZSgpKQpAQCAtNDUsMTMgKzQ4LDE4IEBAIHZvaWQg
RGlyZWN0RXZhbENvZGVDYWNoZTo6Y2xlYXIoKQogICAgIG1fY2FjaGVNYXAuY2xlYXIoKTsKIH0K
IAotdm9pZCBEaXJlY3RFdmFsQ29kZUNhY2hlOjp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYg
dmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIERpcmVjdEV2YWxDb2Rl
Q2FjaGU6OnZpc2l0QWdncmVnYXRlKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgTG9ja0hvbGRl
ciBsb2NrZXIobV9sb2NrKTsKICAgICBFdmFsQ2FjaGVNYXA6Oml0ZXJhdG9yIGVuZCA9IG1fY2Fj
aGVNYXAuZW5kKCk7Ci0gICAgZm9yIChFdmFsQ2FjaGVNYXA6Oml0ZXJhdG9yIHB0ciA9IG1fY2Fj
aGVNYXAuYmVnaW4oKTsgcHRyICE9IGVuZDsgKytwdHIpCisgICAgZm9yIChFdmFsQ2FjaGVNYXA6
Oml0ZXJhdG9yIHB0ciA9IG1fY2FjaGVNYXAuYmVnaW4oKTsgcHRyICE9IGVuZDsgKytwdHIpIHsK
KyAgICAgICAgaWYgKG1sYW1WZXJib3NlKSBkYXRhTG9nTG4oIiAgICBtbGFtIERpcmVjdEV2YWxD
b2RlQ2FjaGU8IiwgUmF3UG9pbnRlcih0aGlzKSwgIj46OnZpc2l0QWdncmVnYXRlOiBleGVjdXRh
YmxlPCIsIFJhd1BvaW50ZXIocHRyLT52YWx1ZS5nZXQoKSksICI+IDxnYyMiLCBtbGFtVGltZSwg
Ij4gdmlzaXRvciAiLCB2aXNpdG9yLmNvZGVOYW1lKCkpOwogICAgICAgICB2aXNpdG9yLmFwcGVu
ZChwdHItPnZhbHVlKTsKKyAgICB9CiB9CiAKLX0gLy8gbmFtZXNwYWNlIEpTQwordGVtcGxhdGUg
dm9pZCBEaXJlY3RFdmFsQ29kZUNhY2hlOjp2aXNpdEFnZ3JlZ2F0ZShBYnN0cmFjdFNsb3RWaXNp
dG9yJik7Cit0ZW1wbGF0ZSB2b2lkIERpcmVjdEV2YWxDb2RlQ2FjaGU6OnZpc2l0QWdncmVnYXRl
KFNsb3RWaXNpdG9yJik7CiAKK30gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0RpcmVjdEV2YWxDb2RlQ2FjaGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRGlyZWN0RXZhbENvZGVDYWNoZS5oCShyZXZp
c2lvbiAyNzI3MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRGlyZWN0RXZh
bENvZGVDYWNoZS5oCSh3b3JraW5nIGNvcHkpCkBAIC05Nyw3ICs5Nyw3IEBAIG5hbWVzcGFjZSBK
U0MgewogCiAgICAgICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fY2FjaGVNYXAu
aXNFbXB0eSgpOyB9CiAKLSAgICAgICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYp
OworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIHZpc2l0QWdncmVnYXRl
KFZpc2l0b3ImKTsKIAogICAgICAgICB2b2lkIGNsZWFyKCk7CiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9FeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhlY3V0YWJsZVRvQ29kZUJs
b2NrRWRnZS5jcHAJKHJldmlzaW9uIDI3MjcxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9FeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMjAgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMyw2
ICszMyw5IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCitleHRlcm4gdW5zaWduZWQgbWxhbVRpbWU7
CitleHRlcm4gYm9vbCBtbGFtVmVyYm9zZTsKKwogY29uc3QgQ2xhc3NJbmZvIEV4ZWN1dGFibGVU
b0NvZGVCbG9ja0VkZ2U6OnNfaW5mbyA9IHsgIkV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UiLCBu
dWxscHRyLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEV4ZWN1dGFibGVU
b0NvZGVCbG9ja0VkZ2UpIH07CiAKIFN0cnVjdHVyZSogRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRn
ZTo6Y3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
SlNWYWx1ZSBwcm90b3R5cGUpCkBAIC01Myw3ICs1Niw4IEBAIHZvaWQgRXhlY3V0YWJsZVRvQ29k
ZUJsb2NrRWRnZTo6ZmluaXNoQ3IKICAgICBBU1NFUlQoIWlzQWN0aXZlKCkpOwogfQogCi12b2lk
IEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2U6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBT
bG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEV4
ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2U6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwg
VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBWTSYgdm0gPSB2aXNpdG9yLnZtKCk7CiAgICAgRXhl
Y3V0YWJsZVRvQ29kZUJsb2NrRWRnZSogZWRnZSA9IGpzQ2FzdDxFeGVjdXRhYmxlVG9Db2RlQmxv
Y2tFZGdlKj4oY2VsbCk7CkBAIC02MSw3ICs2NSw4IEBAIHZvaWQgRXhlY3V0YWJsZVRvQ29kZUJs
b2NrRWRnZTo6dmlzaXRDaGkKICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKGNlbGwsIHZpc2l0b3Ip
OwogCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBlZGdlLT5tX2NvZGVCbG9jay5nZXQoKTsK
LSAgICAKKyAgICBpZiAobWxhbVZlcmJvc2UpIGRhdGFMb2dMbigiICAgIG1sYW0gRXhlY3V0YWJs
ZVRvQ29kZUJsb2NrRWRnZTwiLCBSYXdQb2ludGVyKGNlbGwpLCAiPjo6dmlzaXRDaGlsZHJlbklt
cGw6IFNURVAgMTogQ29kZUJsb2NrPCIsIFJhd1BvaW50ZXIoY29kZUJsb2NrKSwgIj4gPGdjIyIs
IG1sYW1UaW1lLCAiPiB2aXNpdG9yICIsIHZpc2l0b3IuY29kZU5hbWUoKSwgIiB8IGVkZ2UtPmlz
QWN0aXZlKCkgIiwgZWRnZS0+aXNBY3RpdmUoKSk7CisKICAgICAvLyBJdCdzIHBvc3NpYmxlIGZv
ciBzb21lb25lIHRvIGhvbGQgYSBwb2ludGVyIHRvIHRoZSBlZGdlIGFmdGVyIHRoZSBlZGdlIGhh
cyBjbGVhcmVkIGl0cyB3ZWFrCiAgICAgLy8gcmVmZXJlbmNlIHRvIHRoZSBjb2RlQmxvY2suIElu
IGEgY29uc2VydmF0aXZlIEdDIGxpa2Ugb3VycywgdGhhdCBjb3VsZCBoYXBwZW4gYXQgcmFuZG9t
IGZvcgogICAgIC8vIG5vIGdvb2QgcmVhc29uIGFuZCBpdCdzIFRvdGFsbHkgT0sgKFRNKS4gU2Vl
IGZpbmFsaXplVW5jb25kaXRpb25hbGx5KCkgZm9yIHdoZXJlIHdlIGNsZWFyCkBAIC03NSwxMSAr
ODAsNTMgQEAgdm9pZCBFeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlOjp2aXNpdENoaQogICAgIH0K
ICAgICAKICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrKTsK
LSAgICAKLSAgICBpZiAoY29kZUJsb2NrLT5zaG91bGRWaXNpdFN0cm9uZ2x5KGxvY2tlcikpCisK
KyAgICAvLyBtbGFtIFRFU1QKKyAgICBhdXRvIHRpbWVUb0xpdmUgPSBbXSAoSklUVHlwZSBqaXRU
eXBlKSAtPiBTZWNvbmRzCisgICAgeworICAgICAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6dXNl
RWFnZXJDb2RlQmxvY2tKZXR0aXNvblRpbWluZygpKSkgeworICAgICAgICAgICAgc3dpdGNoIChq
aXRUeXBlKSB7CisgICAgICAgICAgICBjYXNlIEpJVFR5cGU6OkludGVycHJldGVyVGh1bms6Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIDEwX21zOworICAgICAgICAgICAgY2FzZSBKSVRUeXBlOjpC
YXNlbGluZUpJVDoKKyAgICAgICAgICAgICAgICByZXR1cm4gMzBfbXM7CisgICAgICAgICAgICBj
YXNlIEpJVFR5cGU6OkRGR0pJVDoKKyAgICAgICAgICAgICAgICByZXR1cm4gNDBfbXM7CisgICAg
ICAgICAgICBjYXNlIEpJVFR5cGU6OkZUTEpJVDoKKyAgICAgICAgICAgICAgICByZXR1cm4gMTIw
X21zOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gU2Vjb25k
czo6aW5maW5pdHkoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHN3aXRj
aCAoaml0VHlwZSkgeworICAgICAgICBjYXNlIEpJVFR5cGU6OkludGVycHJldGVyVGh1bms6Cisg
ICAgICAgICAgICByZXR1cm4gNV9zOworICAgICAgICBjYXNlIEpJVFR5cGU6OkJhc2VsaW5lSklU
OgorICAgICAgICAgICAgLy8gRWZmZWN0aXZlbHkgMTAgYWRkaXRpb25hbCBzZWNvbmRzLCBzaW5j
ZSBCYXNlbGluZUpJVCBhbmQKKyAgICAgICAgICAgIC8vIEludGVycHJldGVyVGh1bmsgc2hhcmUg
YSBDb2RlQmxvY2suCisgICAgICAgICAgICByZXR1cm4gMTVfczsKKyAgICAgICAgY2FzZSBKSVRU
eXBlOjpERkdKSVQ6CisgICAgICAgICAgICByZXR1cm4gMjBfczsKKyAgICAgICAgY2FzZSBKSVRU
eXBlOjpGVExKSVQ6CisgICAgICAgICAgICByZXR1cm4gNjBfczsKKyAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgIHJldHVybiBTZWNvbmRzOjppbmZpbml0eSgpOworICAgICAgICB9CisgICAg
fTsKKyAgICAvLyBtbGFtIFRFU1QgKi8KKworICAgIGlmIChtbGFtVmVyYm9zZSkgeworICAgICAg
ICBhdXRvIHRpbWVTaW5jZUNyZWF0aW9uID0gY29kZUJsb2NrLT50aW1lU2luY2VDcmVhdGlvbigp
OworICAgICAgICBhdXRvIHRpbWVUb0xpdmUxID0gdGltZVRvTGl2ZShjb2RlQmxvY2stPmppdFR5
cGUoKSk7CisgICAgICAgIGRhdGFMb2dMbigiICAgIG1sYW0gRXhlY3V0YWJsZVRvQ29kZUJsb2Nr
RWRnZTwiLCBSYXdQb2ludGVyKGNlbGwpLCAiPjo6dmlzaXRDaGlsZHJlbkltcGw6IFNURVAgMS41
OiBDb2RlQmxvY2s8IiwgUmF3UG9pbnRlcihjb2RlQmxvY2spLCAiPiA8Z2MjIiwgbWxhbVRpbWUs
ICI+IHZpc2l0b3IgIiwgdmlzaXRvci5jb2RlTmFtZSgpLCAiIHwgY29kZUJsb2NrLT5zaG91bGRW
aXNpdFN0cm9uZ2x5KGxvY2tlciwgdmlzaXRvcikgIiwgY29kZUJsb2NrLT5zaG91bGRWaXNpdFN0
cm9uZ2x5KGxvY2tlciwgdmlzaXRvciksICIgfCBzaG91bGRKZXR0aXNvbkR1ZVRvT2xkQWdlICIs
IGNvZGVCbG9jay0+c2hvdWxkSmV0dGlzb25EdWVUb09sZEFnZShsb2NrZXIsIHZpc2l0b3IpLCAi
IHwgSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUICIsIEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChj
b2RlQmxvY2stPmppdFR5cGUoKSksICIgfCB2aXNpdG9yLmlzTWFya2VkKGNiKSAiLCB2aXNpdG9y
LmlzTWFya2VkKGNvZGVCbG9jayksICIgfCBjb2RlQmxvY2stPmppdFR5cGUoKSAiLCBjb2RlQmxv
Y2stPmppdFR5cGUoKSwgIiB8IHRpbWVTaW5jZUNyZWF0aW9uKCkgIiwgdGltZVNpbmNlQ3JlYXRp
b24sICIgPCB0aW1lVG9MaXZlKGppdFR5cGUoKSAiLCB0aW1lVG9MaXZlMSwgIiA9PiAiLCAodGlt
ZVNpbmNlQ3JlYXRpb24gPCB0aW1lVG9MaXZlMSkpOworICAgIH0KKyAgICBpZiAoY29kZUJsb2Nr
LT5zaG91bGRWaXNpdFN0cm9uZ2x5KGxvY2tlciwgdmlzaXRvcikpCiAgICAgICAgIHZpc2l0b3Iu
YXBwZW5kVW5iYXJyaWVyZWQoY29kZUJsb2NrKTsKKy8vICAgIGVsc2UKKy8vICAgICAgICBjb2Rl
QmxvY2stPm1fbWxhbUZsYWcgPSB0cnVlOyAvLyBtbGFtIEhBQ0sKICAgICAKLSAgICBpZiAoIXZt
LmhlYXAuaXNNYXJrZWQoY29kZUJsb2NrKSkKKyAgICBpZiAoIXZpc2l0b3IuaXNNYXJrZWQoY29k
ZUJsb2NrKSkKICAgICAgICAgdm0uZXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZXNXaXRoRmluYWxp
emVycy5hZGQoZWRnZSk7CiAgICAgCiAgICAgaWYgKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChj
b2RlQmxvY2stPmppdFR5cGUoKSkpIHsKQEAgLTExNCwxNSArMTYxLDE4IEBAIHZvaWQgRXhlY3V0
YWJsZVRvQ29kZUJsb2NrRWRnZTo6dmlzaXRDaGkKICAgICAvLyB3aWxsIGtlZXAgZml4cG9pbnRp
bmcgdW50aWwgdGhlIGVuZC4KICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKGNvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpOwogICAgIHZtLmV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2VzV2l0
aENvbnN0cmFpbnRzLmFkZChlZGdlKTsKLSAgICBlZGdlLT5ydW5Db25zdHJhaW50KGxvY2tlciwg
dm0sIHZpc2l0b3IpOworICAgIGlmIChtbGFtVmVyYm9zZSkgZGF0YUxvZ0xuKCIgICAgbWxhbSBF
eGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlPCIsIFJhd1BvaW50ZXIoY2VsbCksICI+Ojp2aXNpdENo
aWxkcmVuSW1wbDogU1RFUCAyOiBDb2RlQmxvY2s8IiwgUmF3UG9pbnRlcihjb2RlQmxvY2spLCAi
PiA8Z2MjIiwgbWxhbVRpbWUsICI+IHZpc2l0b3IgIiwgdmlzaXRvci5jb2RlTmFtZSgpKTsKKyAg
ICBlZGdlLT5ydW5Db25zdHJhaW50MTAyMyhsb2NrZXIsIHZtLCB2aXNpdG9yKTsgLy8gbWxhbSBG
SVhNRQogfQogCi12b2lkIEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2U6OnZpc2l0T3V0cHV0Q29u
c3RyYWludHMoSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK0RFRklORV9WSVNJ
VF9DSElMRFJFTihFeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlKTsKKwordm9pZCBFeGVjdXRhYmxl
VG9Db2RlQmxvY2tFZGdlOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzKEpTQ2VsbCogY2VsbCwgQWJz
dHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBWTSYgdm0gPSB2aXNpdG9yLnZtKCk7
CiAgICAgRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZSogZWRnZSA9IGpzQ2FzdDxFeGVjdXRhYmxl
VG9Db2RlQmxvY2tFZGdlKj4oY2VsbCk7CiAgICAgCi0gICAgZWRnZS0+cnVuQ29uc3RyYWludChO
b0xvY2tpbmdOZWNlc3NhcnksIHZtLCB2aXNpdG9yKTsKKyAgICBlZGdlLT5ydW5Db25zdHJhaW50
MTAyMyhOb0xvY2tpbmdOZWNlc3NhcnksIHZtLCB2aXNpdG9yKTsKIH0KIAogdm9pZCBFeGVjdXRh
YmxlVG9Db2RlQmxvY2tFZGdlOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxseShWTSYgdm0pCkBAIC0x
ODYsMTYgKzIzNiwyNSBAQCBFeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlOjpFeGVjdXRhYmxlVG9D
CiB7CiB9CiAKLXZvaWQgRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZTo6cnVuQ29uc3RyYWludChj
b25zdCBDb25jdXJyZW50SlNMb2NrZXImIGxvY2tlciwgVk0mIHZtLCBTbG90VmlzaXRvciYgdmlz
aXRvcikKKy8vdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KKy8vdm9pZCBFeGVjdXRhYmxlVG9D
b2RlQmxvY2tFZGdlOjpydW5Db25zdHJhaW50MShjb25zdCBDb25jdXJyZW50SlNMb2NrZXImIGxv
Y2tlciwgVk0mIHZtLCBWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBFeGVjdXRhYmxlVG9Db2RlQmxv
Y2tFZGdlOjpydW5Db25zdHJhaW50MTAyMyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImIGxvY2tl
ciwgVk0mIHZtLCBBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIENvZGVCbG9j
ayogY29kZUJsb2NrID0gbV9jb2RlQmxvY2suZ2V0KCk7CiAgICAgCi0gICAgY29kZUJsb2NrLT5w
cm9wYWdhdGVUcmFuc2l0aW9ucyhsb2NrZXIsIHZpc2l0b3IpOworICAgIGlmIChtbGFtVmVyYm9z
ZSkgZGF0YUxvZ0xuKCIgICAgbWxhbSBFeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlPCIsIFJhd1Bv
aW50ZXIodGhpcyksICI+OjpydW5Db25zdHJhaW50MTogU1RFUCAxOiBDb2RlQmxvY2s8IiwgUmF3
UG9pbnRlcihjb2RlQmxvY2spLCAiPiA8Z2MjIiwgbWxhbVRpbWUsICI+IHZpc2l0b3IgIiwgdmlz
aXRvci5jb2RlTmFtZSgpKTsKKyAgICBjb2RlQmxvY2stPnByb3BhZ2F0ZVRyYW5zaXRpb25zMTA0
NShsb2NrZXIsIHZpc2l0b3IpOworICAgIGlmIChtbGFtVmVyYm9zZSkgZGF0YUxvZ0xuKCIgICAg
bWxhbSBFeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlPCIsIFJhd1BvaW50ZXIodGhpcyksICI+Ojpy
dW5Db25zdHJhaW50MTogU1RFUCAyOiBDb2RlQmxvY2s8IiwgUmF3UG9pbnRlcihjb2RlQmxvY2sp
LCAiPiA8Z2MjIiwgbWxhbVRpbWUsICI+IHZpc2l0b3IgIiwgdmlzaXRvci5jb2RlTmFtZSgpKTsK
ICAgICBjb2RlQmxvY2stPmRldGVybWluZUxpdmVuZXNzKGxvY2tlciwgdmlzaXRvcik7Ci0gICAg
Ci0gICAgaWYgKHZtLmhlYXAuaXNNYXJrZWQoY29kZUJsb2NrKSkKKyAgICBpZiAobWxhbVZlcmJv
c2UpIGRhdGFMb2dMbigiICAgIG1sYW0gRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZTwiLCBSYXdQ
b2ludGVyKHRoaXMpLCAiPjo6cnVuQ29uc3RyYWludDE6IFNURVAgMzogQ29kZUJsb2NrPCIsIFJh
d1BvaW50ZXIoY29kZUJsb2NrKSwgIj4gPGdjIyIsIG1sYW1UaW1lLCAiPiB2aXNpdG9yICIsIHZp
c2l0b3IuY29kZU5hbWUoKSk7CisKKyAgICBpZiAodmlzaXRvci5pc01hcmtlZChjb2RlQmxvY2sp
KSB7CisgICAgICAgIGlmIChtbGFtVmVyYm9zZSkgZGF0YUxvZ0xuKCIgICAgbWxhbSBFeGVjdXRh
YmxlVG9Db2RlQmxvY2tFZGdlPCIsIFJhd1BvaW50ZXIodGhpcyksICI+OjpydW5Db25zdHJhaW50
MTogU1RFUCA0OiBDb2RlQmxvY2s8IiwgUmF3UG9pbnRlcihjb2RlQmxvY2spLCAiPiA8Z2MjIiwg
bWxhbVRpbWUsICI+IHZpc2l0b3IgIiwgdmlzaXRvci5jb2RlTmFtZSgpKTsKICAgICAgICAgdm0u
ZXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZXNXaXRoQ29uc3RyYWludHMucmVtb3ZlKHRoaXMpOwor
ICAgIH0KIH0KIAotfSAvLyBuYW1lc3BhY2UgSlNDCisvL3RlbXBsYXRlIHZvaWQgRXhlY3V0YWJs
ZVRvQ29kZUJsb2NrRWRnZTo6cnVuQ29uc3RyYWludDEoY29uc3QgQ29uY3VycmVudEpTTG9ja2Vy
JiwgVk0mLCBTbG90VmlzaXRvciYpOworLy90ZW1wbGF0ZSB2b2lkIEV4ZWN1dGFibGVUb0NvZGVC
bG9ja0VkZ2U6OnJ1bkNvbnN0cmFpbnQxKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIFZNJiwg
QWJzdHJhY3RTbG90VmlzaXRvciYpOwogCit9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGFibGVUb0Nv
ZGVCbG9ja0VkZ2UuaAkocmV2aXNpb24gMjcyNzEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0V4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UuaAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAxOSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAyMCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTUzLDkgKzUzLDEwIEBAIHB1YmxpYzoKICAgICBERUNMQVJFX0lORk87CiAKICAgICBDb2RlQmxv
Y2sqIGNvZGVCbG9jaygpIGNvbnN0IHsgcmV0dXJuIG1fY29kZUJsb2NrLmdldCgpOyB9Ci0gICAg
Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwot
ICAgIHN0YXRpYyB2b2lkIHZpc2l0T3V0cHV0Q29uc3RyYWludHMoSlNDZWxsKiwgU2xvdFZpc2l0
b3ImKTsKKworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CisvLyAgICBzdGF0aWMgdm9pZCB2
aXNpdENoaWxkcmVuMShKU0NlbGwqLCBBYnN0cmFjdFNsb3RWaXNpdG9yJik7CisgICAgc3RhdGlj
IHZvaWQgdmlzaXRPdXRwdXRDb25zdHJhaW50cyhKU0NlbGwqLCBBYnN0cmFjdFNsb3RWaXNpdG9y
Jik7CiAgICAgdm9pZCBmaW5hbGl6ZVVuY29uZGl0aW9uYWxseShWTSYpOwogICAgIAogICAgIHN0
YXRpYyBDb2RlQmxvY2sqIHVud3JhcChFeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlKiBlZGdlKQpA
QCAtODEsOSArODIsMTEgQEAgcHJpdmF0ZToKICAgICB2b2lkIGFjdGl2YXRlKCk7CiAgICAgdm9p
ZCBkZWFjdGl2YXRlKCk7CiAgICAgYm9vbCBpc0FjdGl2ZSgpIGNvbnN0OwotICAgIAotICAgIHZv
aWQgcnVuQ29uc3RyYWludChjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBWTSYsIFNsb3RWaXNp
dG9yJik7Ci0gICAgCisKKy8vICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+CisvLyAgICB2
b2lkIHJ1bkNvbnN0cmFpbnQxKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIFZNJiwgVmlzaXRv
ciYpOworICAgIHZvaWQgcnVuQ29uc3RyYWludDEwMjMoY29uc3QgQ29uY3VycmVudEpTTG9ja2Vy
JiwgVk0mLCBBYnN0cmFjdFNsb3RWaXNpdG9yJik7CisKICAgICBXcml0ZUJhcnJpZXI8Q29kZUJs
b2NrPiBtX2NvZGVCbG9jazsKIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9HZXRCeUlkVmFyaWFudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0dldEJ5SWRWYXJpYW50LmNwcAkocmV2aXNpb24gMjcyNzEwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRWYXJpYW50LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTU2LDE2ICsxNTYsMjYgQEAgYm9vbCBHZXRCeUlkVmFyaWFudDo6YXR0ZW1wdFRv
TWVyZ2UoY29ucwogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIEdldEJ5SWRWYXJpYW50Ojp2
aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vdGVtcGxhdGU8dHlwZW5hbWUg
VmlzaXRvcj4KKy8vdm9pZCBHZXRCeUlkVmFyaWFudDo6dmlzaXRBZ2dyZWdhdGUoVmlzaXRvciYg
dmlzaXRvcikKK3ZvaWQgR2V0QnlJZFZhcmlhbnQ6OnZpc2l0QWdncmVnYXRlMShBYnN0cmFjdFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQogewotICAgIG1faWRlbnRpZmllci52aXNpdEFnZ3JlZ2F0ZSh2
aXNpdG9yKTsKKyAgICBtX2lkZW50aWZpZXIudmlzaXRBZ2dyZWdhdGUxKHZpc2l0b3IpOwogfQog
Ci12b2lkIEdldEJ5SWRWYXJpYW50OjptYXJrSWZDaGVhcChTbG90VmlzaXRvciYgdmlzaXRvcikK
Ky8vdGVtcGxhdGUgdm9pZCBHZXRCeUlkVmFyaWFudDo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0
b3ImKTsKKy8vdGVtcGxhdGUgdm9pZCBHZXRCeUlkVmFyaWFudDo6dmlzaXRBZ2dyZWdhdGUoVmVy
aWZpZXJTbG90VmlzaXRvciYpOworCisvL3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+CisvL3Zv
aWQgR2V0QnlJZFZhcmlhbnQ6Om1hcmtJZkNoZWFwKFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIEdl
dEJ5SWRWYXJpYW50OjptYXJrSWZDaGVhcDEoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikK
IHsKLSAgICBtX3N0cnVjdHVyZVNldC5tYXJrSWZDaGVhcCh2aXNpdG9yKTsKKyAgICBtX3N0cnVj
dHVyZVNldC5tYXJrSWZDaGVhcDEodmlzaXRvcik7CiB9CiAKKy8vdGVtcGxhdGUgdm9pZCBHZXRC
eUlkVmFyaWFudDo6bWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImKTsKKy8vdGVtcGxhdGUgdm9pZCBH
ZXRCeUlkVmFyaWFudDo6bWFya0lmQ2hlYXAoVmVyaWZpZXJTbG90VmlzaXRvciYpOworCiBib29s
IEdldEJ5SWRWYXJpYW50OjpmaW5hbGl6ZShWTSYgdm0pCiB7CiAgICAgaWYgKCFtX3N0cnVjdHVy
ZVNldC5pc1N0aWxsQWxpdmUodm0pKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0dldEJ5SWRWYXJpYW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0dldEJ5SWRWYXJpYW50LmgJKHJldmlzaW9uIDI3MjcxMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkVmFyaWFudC5oCSh3b3JraW5nIGNvcHkpCkBA
IC03Nyw4ICs3NywxMCBAQCBwdWJsaWM6CiAKICAgICBib29sIGF0dGVtcHRUb01lcmdlKGNvbnN0
IEdldEJ5SWRWYXJpYW50JiBvdGhlcik7CiAgICAgCi0gICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShT
bG90VmlzaXRvciYpOwotICAgIHZvaWQgbWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImKTsKKy8vICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgdmlzaXRBZ2dyZWdhdGUoVmlzaXRvciYp
OworLy8gICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCBtYXJrSWZDaGVhcChWaXNp
dG9yJik7CisgICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZTEoQWJzdHJhY3RTbG90VmlzaXRvciYpOwor
ICAgIHZvaWQgbWFya0lmQ2hlYXAxKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKICAgICBib29sIGZp
bmFsaXplKFZNJik7CiAgICAgCiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlTdGF0dXMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeVN0YXR1cy5jcHAJ
KHJldmlzaW9uIDI3MjcxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRC
eVN0YXR1cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUzMCwyMCArNTMwLDMxIEBAIHZvaWQgR2V0
QnlTdGF0dXM6OmZpbHRlcihjb25zdCBTdHJ1Y3R1cmUKICAgICAgICAgbV9zdGF0ZSA9IE5vSW5m
b3JtYXRpb247CiB9CiAKLXZvaWQgR2V0QnlTdGF0dXM6OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNp
dG9yJiB2aXNpdG9yKQorLy90ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgorLy92b2lkIEdldEJ5
U3RhdHVzOjp2aXNpdEFnZ3JlZ2F0ZShWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBHZXRCeVN0YXR1
czo6dmlzaXRBZ2dyZWdhdGUxKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAg
aWYgKGlzTW9kdWxlTmFtZXNwYWNlKCkpCi0gICAgICAgIG1fbW9kdWxlTmFtZXNwYWNlRGF0YS0+
bV9pZGVudGlmaWVyLnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOworICAgICAgICBtX21vZHVsZU5h
bWVzcGFjZURhdGEtPm1faWRlbnRpZmllci52aXNpdEFnZ3JlZ2F0ZTEodmlzaXRvcik7CiAgICAg
Zm9yIChHZXRCeUlkVmFyaWFudCYgdmFyaWFudCA6IG1fdmFyaWFudHMpCi0gICAgICAgIHZhcmlh
bnQudmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7CisgICAgICAgIHZhcmlhbnQudmlzaXRBZ2dyZWdh
dGUxKHZpc2l0b3IpOwogfQogCi12b2lkIEdldEJ5U3RhdHVzOjptYXJrSWZDaGVhcChTbG90Vmlz
aXRvciYgdmlzaXRvcikKKy8vdGVtcGxhdGUgdm9pZCBHZXRCeVN0YXR1czo6dmlzaXRBZ2dyZWdh
dGUoU2xvdFZpc2l0b3ImKTsKKy8vdGVtcGxhdGUgdm9pZCBHZXRCeVN0YXR1czo6dmlzaXRBZ2dy
ZWdhdGUoVmVyaWZpZXJTbG90VmlzaXRvciYpOworCisvL3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0
b3I+CisvL3ZvaWQgR2V0QnlTdGF0dXM6Om1hcmtJZkNoZWFwKFZpc2l0b3ImIHZpc2l0b3IpCit2
b2lkIEdldEJ5U3RhdHVzOjptYXJrSWZDaGVhcDEoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRv
cikKIHsKICAgICBmb3IgKEdldEJ5SWRWYXJpYW50JiB2YXJpYW50IDogbV92YXJpYW50cykKLSAg
ICAgICAgdmFyaWFudC5tYXJrSWZDaGVhcCh2aXNpdG9yKTsKKyAgICAgICAgdmFyaWFudC5tYXJr
SWZDaGVhcDEodmlzaXRvcik7CiB9CiAKKy8vdGVtcGxhdGUgdm9pZCBHZXRCeVN0YXR1czo6bWFy
a0lmQ2hlYXAoU2xvdFZpc2l0b3ImKTsKKy8vdGVtcGxhdGUgdm9pZCBHZXRCeVN0YXR1czo6bWFy
a0lmQ2hlYXAoVmVyaWZpZXJTbG90VmlzaXRvciYpOworCisKIGJvb2wgR2V0QnlTdGF0dXM6OmZp
bmFsaXplKFZNJiB2bSkKIHsKICAgICBmb3IgKEdldEJ5SWRWYXJpYW50JiB2YXJpYW50IDogbV92
YXJpYW50cykgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5U3Rh
dHVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5
U3RhdHVzLmgJKHJldmlzaW9uIDI3MjcxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9HZXRCeVN0YXR1cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTgsOCArMTE4LDEwIEBAIHB1
YmxpYzoKICAgICBKU01vZHVsZUVudmlyb25tZW50KiBtb2R1bGVFbnZpcm9ubWVudCgpIGNvbnN0
IHsgcmV0dXJuIG1fbW9kdWxlTmFtZXNwYWNlRGF0YS0+bV9tb2R1bGVFbnZpcm9ubWVudDsgfQog
ICAgIFNjb3BlT2Zmc2V0IHNjb3BlT2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9tb2R1bGVOYW1l
c3BhY2VEYXRhLT5tX3Njb3BlT2Zmc2V0OyB9CiAgICAgCi0gICAgdm9pZCB2aXNpdEFnZ3JlZ2F0
ZShTbG90VmlzaXRvciYpOwotICAgIHZvaWQgbWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImKTsKKy8v
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgdmlzaXRBZ2dyZWdhdGUoVmlzaXRv
ciYpOworLy8gICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCBtYXJrSWZDaGVhcChW
aXNpdG9yJik7CisgICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZTEoQWJzdHJhY3RTbG90VmlzaXRvciYp
OworICAgIHZvaWQgbWFya0lmQ2hlYXAxKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKICAgICBib29s
IGZpbmFsaXplKFZNJik7IC8vIFJldHVybiB0cnVlIGlmIHRoaXMgZ2V0cyB0byBsaXZlLgogCiAg
ICAgYm9vbCBhcHBlbmRWYXJpYW50KGNvbnN0IEdldEJ5SWRWYXJpYW50Jik7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5CeUlkU3RhdHVzLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5CeUlkU3RhdHVzLmNwcAkocmV2aXNp
b24gMjcyNzEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luQnlJZFN0YXR1
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1MSwxMiArMjUxLDE3IEBAIHZvaWQgSW5CeUlkU3Rh
dHVzOjpmaWx0ZXIoY29uc3QgU3RydWN0dXIKICAgICAgICAgbV9zdGF0ZSA9IE5vSW5mb3JtYXRp
b247CiB9CiAKLXZvaWQgSW5CeUlkU3RhdHVzOjptYXJrSWZDaGVhcChTbG90VmlzaXRvciYgdmlz
aXRvcikKKy8vdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KKy8vdm9pZCBJbkJ5SWRTdGF0dXM6
Om1hcmtJZkNoZWFwKFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIEluQnlJZFN0YXR1czo6bWFya0lm
Q2hlYXAxKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgZm9yIChJbkJ5SWRW
YXJpYW50JiB2YXJpYW50IDogbV92YXJpYW50cykKLSAgICAgICAgdmFyaWFudC5tYXJrSWZDaGVh
cCh2aXNpdG9yKTsKKyAgICAgICAgdmFyaWFudC5tYXJrSWZDaGVhcDEodmlzaXRvcik7CiB9CiAK
Ky8vdGVtcGxhdGUgdm9pZCBJbkJ5SWRTdGF0dXM6Om1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJik7
CisvL3RlbXBsYXRlIHZvaWQgSW5CeUlkU3RhdHVzOjptYXJrSWZDaGVhcChWZXJpZmllclNsb3RW
aXNpdG9yJik7CisKIGJvb2wgSW5CeUlkU3RhdHVzOjpmaW5hbGl6ZShWTSYgdm0pCiB7CiAgICAg
Zm9yIChJbkJ5SWRWYXJpYW50JiB2YXJpYW50IDogbV92YXJpYW50cykgewpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luQnlJZFN0YXR1cy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbkJ5SWRTdGF0dXMuaAkocmV2aXNpb24gMjcy
NzEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luQnlJZFN0YXR1cy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xMDYsNyArMTA2LDggQEAgcHVibGljOgogICAgIC8vIEF0dGVtcHRz
IHRvIHJlZHVjZSB0aGUgc2V0IG9mIHZhcmlhbnRzIHRvIGZpdCB0aGUgZ2l2ZW4gc3RydWN0dXJl
IHNldC4gVGhpcyBtYXkgYmUgYXBwcm94aW1hdGUuCiAgICAgdm9pZCBmaWx0ZXIoY29uc3QgU3Ry
dWN0dXJlU2V0Jik7CiAgICAgCi0gICAgdm9pZCBtYXJrSWZDaGVhcChTbG90VmlzaXRvciYpOwor
Ly8gICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCBtYXJrSWZDaGVhcChWaXNpdG9y
Jik7CisgICAgdm9pZCBtYXJrSWZDaGVhcDEoQWJzdHJhY3RTbG90VmlzaXRvciYpOwogICAgIGJv
b2wgZmluYWxpemUoVk0mKTsKIAogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luQnlJZFZhcmlhbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbkJ5SWRWYXJpYW50
LmNwcAkocmV2aXNpb24gMjcyNzEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0luQnlJZFZhcmlhbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NCwxMSArNjQsMTYgQEAgYm9v
bCBJbkJ5SWRWYXJpYW50OjphdHRlbXB0VG9NZXJnZShjb25zdAogICAgIHJldHVybiB0cnVlOwog
fQogCi12b2lkIEluQnlJZFZhcmlhbnQ6Om1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJiB2aXNpdG9y
KQorLy90ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgorLy92b2lkIEluQnlJZFZhcmlhbnQ6Om1h
cmtJZkNoZWFwKFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIEluQnlJZFZhcmlhbnQ6Om1hcmtJZkNo
ZWFwMShBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewotICAgIG1fc3RydWN0dXJlU2V0
Lm1hcmtJZkNoZWFwKHZpc2l0b3IpOworICAgIG1fc3RydWN0dXJlU2V0Lm1hcmtJZkNoZWFwMSh2
aXNpdG9yKTsKIH0KIAorLy90ZW1wbGF0ZSB2b2lkIEluQnlJZFZhcmlhbnQ6Om1hcmtJZkNoZWFw
KFNsb3RWaXNpdG9yJik7CisvL3RlbXBsYXRlIHZvaWQgSW5CeUlkVmFyaWFudDo6bWFya0lmQ2hl
YXAoVmVyaWZpZXJTbG90VmlzaXRvciYpOworCiBib29sIEluQnlJZFZhcmlhbnQ6OmZpbmFsaXpl
KFZNJiB2bSkKIHsKICAgICBpZiAoIW1fc3RydWN0dXJlU2V0LmlzU3RpbGxBbGl2ZSh2bSkpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5CeUlkVmFyaWFudC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbkJ5SWRWYXJpYW50LmgJ
KHJldmlzaW9uIDI3MjcxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbkJ5
SWRWYXJpYW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTU3LDcgKzU3LDggQEAgcHVibGljOgogCiAg
ICAgYm9vbCBhdHRlbXB0VG9NZXJnZShjb25zdCBJbkJ5SWRWYXJpYW50JiBvdGhlcik7CiAgICAg
Ci0gICAgdm9pZCBtYXJrSWZDaGVhcChTbG90VmlzaXRvciYpOworLy8gICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVmlzaXRvcj4gdm9pZCBtYXJrSWZDaGVhcChWaXNpdG9yJik7CisgICAgdm9pZCBtYXJr
SWZDaGVhcDEoQWJzdHJhY3RTbG90VmlzaXRvciYpOwogICAgIGJvb2wgZmluYWxpemUoVk0mKTsK
IAogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0ludGVybmFsRnVuY3Rpb25BbGxvY2F0aW9uUHJvZmlsZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnRlcm5hbEZ1bmN0
aW9uQWxsb2NhdGlvblByb2ZpbGUuaAkocmV2aXNpb24gMjcyNzEwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0ludGVybmFsRnVuY3Rpb25BbGxvY2F0aW9uUHJvZmlsZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zOSw3ICszOSw3IEBAIHB1YmxpYzoKICAgICBTdHJ1Y3R1cmUqIGNy
ZWF0ZUFsbG9jYXRpb25TdHJ1Y3R1cmVGcm9tQmFzZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlND
ZWxsKiBvd25lciwgSlNPYmplY3QqIHByb3RvdHlwZSwgU3RydWN0dXJlKiBiYXNlKTsKIAogICAg
IHZvaWQgY2xlYXIoKSB7IG1fc3RydWN0dXJlLmNsZWFyKCk7IH0KLSAgICB2b2lkIHZpc2l0QWdn
cmVnYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKSB7IHZpc2l0b3IuYXBwZW5kKG1fc3RydWN0dXJl
KTsgfQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgdmlzaXRBZ2dyZWdhdGUo
VmlzaXRvciYgdmlzaXRvcikgeyB2aXNpdG9yLmFwcGVuZChtX3N0cnVjdHVyZSk7IH0KIAogcHJp
dmF0ZToKICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX3N0cnVjdHVyZTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PYmplY3RBbGxvY2F0aW9uUHJvZmlsZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PYmplY3RBbGxvY2F0
aW9uUHJvZmlsZS5oCShyZXZpc2lvbiAyNzI3MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUuaAkod29ya2luZyBjb3B5KQpAQCAtNjQs
NyArNjQsOCBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIEFTU0VSVChpc051bGwoKSk7CiAgICAgfQog
Ci0gICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYgdmlzaXRvcikKKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgorICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoVmlzaXRvciYg
dmlzaXRvcikKICAgICB7CiAgICAgICAgIHZpc2l0b3IuYXBwZW5kKG1fc3RydWN0dXJlKTsKICAg
ICB9CkBAIC0xMTAsNyArMTExLDggQEAgcHVibGljOgogICAgICAgICBBU1NFUlQoaXNOdWxsKCkp
OwogICAgIH0KIAotICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3Ip
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KKyAgICB2b2lkIHZpc2l0QWdncmVnYXRl
KFZpc2l0b3ImIHZpc2l0b3IpCiAgICAgewogICAgICAgICBCYXNlOjp2aXNpdEFnZ3JlZ2F0ZSh2
aXNpdG9yKTsKICAgICAgICAgdmlzaXRvci5hcHBlbmQobV9wcm90b3R5cGUpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3Mu
Y3BwCShyZXZpc2lvbiAyNzI3MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
UG9seW1vcnBoaWNBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNTgsNyArMzU4LDkgQEAg
Ym9vbCBQb2x5bW9ycGhpY0FjY2Vzczo6dmlzaXRXZWFrKFZNJiB2bQogICAgIHJldHVybiB0cnVl
OwogfQogCi1ib29sIFBvbHltb3JwaGljQWNjZXNzOjpwcm9wYWdhdGVUcmFuc2l0aW9ucyhTbG90
VmlzaXRvciYgdmlzaXRvcikgY29uc3QKKy8vdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KKy8v
Ym9vbCBQb2x5bW9ycGhpY0FjY2Vzczo6cHJvcGFnYXRlVHJhbnNpdGlvbnMxMChWaXNpdG9yJiB2
aXNpdG9yKSBjb25zdAorYm9vbCBQb2x5bW9ycGhpY0FjY2Vzczo6cHJvcGFnYXRlVHJhbnNpdGlv
bnMxMChBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBjb25zdAogewogICAgIGJvb2wgcmVz
dWx0ID0gdHJ1ZTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZSgpOyArK2kpCkBA
IC0zNjYsMTIgKzM2OCwyMSBAQCBib29sIFBvbHltb3JwaGljQWNjZXNzOjpwcm9wYWdhdGVUcmFu
c2l0CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotdm9pZCBQb2x5bW9ycGhpY0FjY2Vzczo6dmlz
aXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3RlbXBsYXRlPD4gYm9vbCBQb2x5
bW9ycGhpY0FjY2Vzczo6cHJvcGFnYXRlVHJhbnNpdGlvbnMxMChTbG90VmlzaXRvciYpIGNvbnN0
OworLy90ZW1wbGF0ZTw+IGJvb2wgUG9seW1vcnBoaWNBY2Nlc3M6OnByb3BhZ2F0ZVRyYW5zaXRp
b25zMTAoQWJzdHJhY3RTbG90VmlzaXRvciYpIGNvbnN0OworCisKKy8vdGVtcGxhdGU8dHlwZW5h
bWUgVmlzaXRvcj4KKy8vdm9pZCBQb2x5bW9ycGhpY0FjY2Vzczo6dmlzaXRBZ2dyZWdhdGUoVmlz
aXRvciYgdmlzaXRvcikKK3ZvaWQgUG9seW1vcnBoaWNBY2Nlc3M6OnZpc2l0QWdncmVnYXRlMShB
YnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBzaXplKCk7ICsraSkKLSAgICAgICAgYXQoaSkudmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7
CisgICAgICAgIGF0KGkpLnZpc2l0QWdncmVnYXRlMSh2aXNpdG9yKTsKIH0KIAorLy90ZW1wbGF0
ZSB2b2lkIFBvbHltb3JwaGljQWNjZXNzOjp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYpOwor
Ly90ZW1wbGF0ZSB2b2lkIFBvbHltb3JwaGljQWNjZXNzOjp2aXNpdEFnZ3JlZ2F0ZShWZXJpZmll
clNsb3RWaXNpdG9yJik7CisKIHZvaWQgUG9seW1vcnBoaWNBY2Nlc3M6OmR1bXAoUHJpbnRTdHJl
YW0mIG91dCkgY29uc3QKIHsKICAgICBvdXQucHJpbnQoUmF3UG9pbnRlcih0aGlzKSwgIjpbIik7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3Mu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBo
aWNBY2Nlc3MuaAkocmV2aXNpb24gMjcyNzEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE1MiwxNCArMTUy
LDE2IEBAIHB1YmxpYzoKICAgICBjb25zdCBBY2Nlc3NDYXNlJiBhdCh1bnNpZ25lZCBpKSBjb25z
dCB7IHJldHVybiAqbV9saXN0W2ldOyB9CiAgICAgY29uc3QgQWNjZXNzQ2FzZSYgb3BlcmF0b3Jb
XSh1bnNpZ25lZCBpKSBjb25zdCB7IHJldHVybiAqbV9saXN0W2ldOyB9CiAKLSAgICB2b2lkIHZp
c2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJik7CisvLyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNp
dG9yPiB2b2lkIHZpc2l0QWdncmVnYXRlKFZpc2l0b3ImKTsKKyAgICB2b2lkIHZpc2l0QWdncmVn
YXRlMShBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAKICAgICAvLyBJZiB0aGlzIHJldHVybnMgZmFs
c2UgdGhlbiB3ZSBhcmUgcmVxdWVzdGluZyBhIHJlc2V0IG9mIHRoZSBvd25pbmcgU3RydWN0dXJl
U3R1YkluZm8uCiAgICAgYm9vbCB2aXNpdFdlYWsoVk0mKSBjb25zdDsKICAgICAKICAgICAvLyBU
aGlzIHJldHVybnMgdHJ1ZSBpZiBpdCBoYXMgbWFya2VkIGV2ZXJ5dGhpbmcgaXQgd2lsbCBldmVy
IG1hcmtlZC4gVGhpcyBjYW4gYmUgdXNlZCBhcyBhbgogICAgIC8vIG9wdGltaXphdGlvbiB0byB0
aGVuIGF2b2lkIGNhbGxpbmcgdGhpcyBtZXRob2QgYWdhaW4gZHVyaW5nIHRoZSBmaXhwb2ludC4K
LSAgICBib29sIHByb3BhZ2F0ZVRyYW5zaXRpb25zKFNsb3RWaXNpdG9yJikgY29uc3Q7CisvLyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiBib29sIHByb3BhZ2F0ZVRyYW5zaXRpb25zMTAo
VmlzaXRvciYpIGNvbnN0OworICAgIGJvb2wgcHJvcGFnYXRlVHJhbnNpdGlvbnMxMChBYnN0cmFj
dFNsb3RWaXNpdG9yJikgY29uc3Q7CiAKICAgICB2b2lkIGFib3V0VG9EaWUoKTsKIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmNwcAko
cmV2aXNpb24gMjcyNzEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5
SWRTdGF0dXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOTYsMTIgKzM5NiwxNyBAQCBQdXRCeUlk
U3RhdHVzIFB1dEJ5SWRTdGF0dXM6OnNsb3dWZXJzaW9uCiAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0
dXMobWFrZXNDYWxscygpID8gTWFrZXNDYWxscyA6IFRha2VzU2xvd1BhdGgpOwogfQogCi12b2lk
IFB1dEJ5SWRTdGF0dXM6Om1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy90ZW1w
bGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgorLy92b2lkIFB1dEJ5SWRTdGF0dXM6Om1hcmtJZkNoZWFw
KFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIFB1dEJ5SWRTdGF0dXM6Om1hcmtJZkNoZWFwMShBYnN0
cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGZvciAoUHV0QnlJZFZhcmlhbnQmIHZh
cmlhbnQgOiBtX3ZhcmlhbnRzKQotICAgICAgICB2YXJpYW50Lm1hcmtJZkNoZWFwKHZpc2l0b3Ip
OworICAgICAgICB2YXJpYW50Lm1hcmtJZkNoZWFwMSh2aXNpdG9yKTsKIH0KIAorLy90ZW1wbGF0
ZSB2b2lkIFB1dEJ5SWRTdGF0dXM6Om1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJik7CisvL3RlbXBs
YXRlIHZvaWQgUHV0QnlJZFN0YXR1czo6bWFya0lmQ2hlYXAoVmVyaWZpZXJTbG90VmlzaXRvciYp
OworCiBib29sIFB1dEJ5SWRTdGF0dXM6OmZpbmFsaXplKFZNJiB2bSkKIHsKICAgICBmb3IgKFB1
dEJ5SWRWYXJpYW50JiB2YXJpYW50IDogbV92YXJpYW50cykgewpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5oCShyZXZpc2lvbiAyNzI3MTAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMTcsNyArMTE3LDggQEAgcHVibGljOgogICAgIGNvbnN0IFB1dEJ5SWRW
YXJpYW50JiBhdChzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fdmFyaWFudHNbaW5kZXhd
OyB9CiAgICAgY29uc3QgUHV0QnlJZFZhcmlhbnQmIG9wZXJhdG9yW10oc2l6ZV90IGluZGV4KSBj
b25zdCB7IHJldHVybiBhdChpbmRleCk7IH0KICAgICAKLSAgICB2b2lkIG1hcmtJZkNoZWFwKFNs
b3RWaXNpdG9yJik7CisvLyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIG1hcmtJ
ZkNoZWFwKFZpc2l0b3ImKTsKKyAgICB2b2lkIG1hcmtJZkNoZWFwMShBYnN0cmFjdFNsb3RWaXNp
dG9yJik7CiAgICAgYm9vbCBmaW5hbGl6ZShWTSYpOwogICAgIAogICAgIHZvaWQgbWVyZ2UoY29u
c3QgUHV0QnlJZFN0YXR1cyYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1B1dEJ5SWRWYXJpYW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuY3BwCShyZXZpc2lvbiAyNzI3MTApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yNjIsMTMgKzI2MiwxOCBAQCBib29sIFB1dEJ5SWRWYXJpYW50OjphdHRlbXB0VG9NZXJn
ZVRyYW5zCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgUHV0QnlJZFZhcmlhbnQ6Om1hcmtJ
ZkNoZWFwKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy90ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
PgorLy92b2lkIFB1dEJ5SWRWYXJpYW50OjptYXJrSWZDaGVhcChWaXNpdG9yJiB2aXNpdG9yKQor
dm9pZCBQdXRCeUlkVmFyaWFudDo6bWFya0lmQ2hlYXAxKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZp
c2l0b3IpCiB7Ci0gICAgbV9vbGRTdHJ1Y3R1cmUubWFya0lmQ2hlYXAodmlzaXRvcik7CisgICAg
bV9vbGRTdHJ1Y3R1cmUubWFya0lmQ2hlYXAxKHZpc2l0b3IpOwogICAgIGlmIChtX25ld1N0cnVj
dHVyZSkKLSAgICAgICAgbV9uZXdTdHJ1Y3R1cmUtPm1hcmtJZkNoZWFwKHZpc2l0b3IpOworICAg
ICAgICBtX25ld1N0cnVjdHVyZS0+bWFya0lmQ2hlYXAxKHZpc2l0b3IpOwogfQogCisvL3RlbXBs
YXRlIHZvaWQgUHV0QnlJZFZhcmlhbnQ6Om1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJik7CisvL3Rl
bXBsYXRlIHZvaWQgUHV0QnlJZFZhcmlhbnQ6Om1hcmtJZkNoZWFwKFZlcmlmaWVyU2xvdFZpc2l0
b3ImKTsKKwogYm9vbCBQdXRCeUlkVmFyaWFudDo6ZmluYWxpemUoVk0mIHZtKQogewogICAgIGlm
ICghbV9vbGRTdHJ1Y3R1cmUuaXNTdGlsbEFsaXZlKHZtKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkVmFyaWFudC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkVmFyaWFudC5oCShyZXZpc2lvbiAyNzI3MTAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuaAkod29y
a2luZyBjb3B5KQpAQCAtMTMyLDcgKzEzMiw4IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgYXR0ZW1w
dFRvTWVyZ2UoY29uc3QgUHV0QnlJZFZhcmlhbnQmIG90aGVyKTsKICAgICAKLSAgICB2b2lkIG1h
cmtJZkNoZWFwKFNsb3RWaXNpdG9yJik7CisvLyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
PiB2b2lkIG1hcmtJZkNoZWFwKFZpc2l0b3ImKTsKKyAgICB2b2lkIG1hcmtJZkNoZWFwMShBYnN0
cmFjdFNsb3RWaXNpdG9yJik7CiAgICAgYm9vbCBmaW5hbGl6ZShWTSYpOwogICAgIAogICAgIHZv
aWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1JlY29yZGVkU3RhdHVzZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9SZWNvcmRlZFN0YXR1c2VzLmNwcAkocmV2aXNpb24gMjcyNzEw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1JlY29yZGVkU3RhdHVzZXMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMDIsMzQgKzEwMiw0NCBAQCBTZXRQcml2YXRlQnJhbmRTdGF0
dXMqIFJlY29yZGVkU3RhdHVzZXM6CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotdm9pZCBSZWNv
cmRlZFN0YXR1c2VzOjp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IpCisv
L3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+CisvL3ZvaWQgUmVjb3JkZWRTdGF0dXNlczo6dmlz
aXRBZ2dyZWdhdGUoVmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgUmVjb3JkZWRTdGF0dXNlczo6dmlz
aXRBZ2dyZWdhdGUxKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgZm9yIChh
dXRvJiBwYWlyIDogZ2V0cykKLSAgICAgICAgcGFpci5zZWNvbmQtPnZpc2l0QWdncmVnYXRlKHNs
b3RWaXNpdG9yKTsKKyAgICAgICAgcGFpci5zZWNvbmQtPnZpc2l0QWdncmVnYXRlMSh2aXNpdG9y
KTsKICAgICBmb3IgKGF1dG8mIHBhaXIgOiBkZWxldGVzKQotICAgICAgICBwYWlyLnNlY29uZC0+
dmlzaXRBZ2dyZWdhdGUoc2xvdFZpc2l0b3IpOworICAgICAgICBwYWlyLnNlY29uZC0+dmlzaXRB
Z2dyZWdhdGUxKHZpc2l0b3IpOwogICAgIGZvciAoYXV0byYgcGFpciA6IGNoZWNrUHJpdmF0ZUJy
YW5kcykKICAgICAgICAgcGFpci5zZWNvbmQtPnZpc2l0QWdncmVnYXRlKHNsb3RWaXNpdG9yKTsK
ICAgICBmb3IgKGF1dG8mIHBhaXIgOiBzZXRQcml2YXRlQnJhbmRzKQogICAgICAgICBwYWlyLnNl
Y29uZC0+dmlzaXRBZ2dyZWdhdGUoc2xvdFZpc2l0b3IpOwogfQogCi12b2lkIFJlY29yZGVkU3Rh
dHVzZXM6Om1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvcikKKy8vdGVtcGxhdGUg
dm9pZCBSZWNvcmRlZFN0YXR1c2VzOjp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYpOworLy90
ZW1wbGF0ZSB2b2lkIFJlY29yZGVkU3RhdHVzZXM6OnZpc2l0QWdncmVnYXRlKFZlcmlmaWVyU2xv
dFZpc2l0b3ImKTsKKworLy90ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgorLy92b2lkIFJlY29y
ZGVkU3RhdHVzZXM6Om1hcmtJZkNoZWFwKFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIFJlY29yZGVk
U3RhdHVzZXM6Om1hcmtJZkNoZWFwMShBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewog
ICAgIGZvciAoYXV0byYgcGFpciA6IGdldHMpCi0gICAgICAgIHBhaXIuc2Vjb25kLT5tYXJrSWZD
aGVhcChzbG90VmlzaXRvcik7CisgICAgICAgIHBhaXIuc2Vjb25kLT5tYXJrSWZDaGVhcDEodmlz
aXRvcik7CiAgICAgZm9yIChhdXRvJiBwYWlyIDogcHV0cykKLSAgICAgICAgcGFpci5zZWNvbmQt
Pm1hcmtJZkNoZWFwKHNsb3RWaXNpdG9yKTsKKyAgICAgICAgcGFpci5zZWNvbmQtPm1hcmtJZkNo
ZWFwMSh2aXNpdG9yKTsKICAgICBmb3IgKGF1dG8mIHBhaXIgOiBpbnMpCi0gICAgICAgIHBhaXIu
c2Vjb25kLT5tYXJrSWZDaGVhcChzbG90VmlzaXRvcik7CisgICAgICAgIHBhaXIuc2Vjb25kLT5t
YXJrSWZDaGVhcDEodmlzaXRvcik7CiAgICAgZm9yIChhdXRvJiBwYWlyIDogZGVsZXRlcykKLSAg
ICAgICAgcGFpci5zZWNvbmQtPm1hcmtJZkNoZWFwKHNsb3RWaXNpdG9yKTsKKyAgICAgICAgcGFp
ci5zZWNvbmQtPm1hcmtJZkNoZWFwMSh2aXNpdG9yKTsKICAgICBmb3IgKGF1dG8mIHBhaXIgOiBj
aGVja1ByaXZhdGVCcmFuZHMpCiAgICAgICAgIHBhaXIuc2Vjb25kLT5tYXJrSWZDaGVhcChzbG90
VmlzaXRvcik7CiAgICAgZm9yIChhdXRvJiBwYWlyIDogc2V0UHJpdmF0ZUJyYW5kcykKICAgICAg
ICAgcGFpci5zZWNvbmQtPm1hcmtJZkNoZWFwKHNsb3RWaXNpdG9yKTsKIH0KIAorLy90ZW1wbGF0
ZSB2b2lkIFJlY29yZGVkU3RhdHVzZXM6Om1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJik7CisvL3Rl
bXBsYXRlIHZvaWQgUmVjb3JkZWRTdGF0dXNlczo6bWFya0lmQ2hlYXAoVmVyaWZpZXJTbG90Vmlz
aXRvciYpOworCiB2b2lkIFJlY29yZGVkU3RhdHVzZXM6OmZpbmFsaXplV2l0aG91dERlbGV0aW5n
KFZNJiB2bSkKIHsKICAgICAvLyBUaGlzIHZhcmlhbnQgb2YgZmluYWxpemUgZ2V0cyBjYWxsZWQg
ZnJvbSB3aXRoaW4gZ3JhcGggc2FmZXBvaW50cyAtLSBzbyB0aGVyZSBtYXkgYmUgREZHIElSIGlu
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUmVjb3JkZWRTdGF0dXNlcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9SZWNvcmRlZFN0
YXR1c2VzLmgJKHJldmlzaW9uIDI3MjcxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9SZWNvcmRlZFN0YXR1c2VzLmgJKHdvcmtpbmcgY29weSkKQEAgLTU0LDggKzU0LDEwIEBA
IHN0cnVjdCBSZWNvcmRlZFN0YXR1c2VzIHsKICAgICBDaGVja1ByaXZhdGVCcmFuZFN0YXR1cyog
YWRkQ2hlY2tQcml2YXRlQnJhbmRTdGF0dXMoY29uc3QgQ29kZU9yaWdpbiYsIGNvbnN0IENoZWNr
UHJpdmF0ZUJyYW5kU3RhdHVzJik7CiAgICAgU2V0UHJpdmF0ZUJyYW5kU3RhdHVzKiBhZGRTZXRQ
cml2YXRlQnJhbmRTdGF0dXMoY29uc3QgQ29kZU9yaWdpbiYsIGNvbnN0IFNldFByaXZhdGVCcmFu
ZFN0YXR1cyYpOwogICAgIAotICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImKTsK
LSAgICB2b2lkIG1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJik7CisvLyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBWaXNpdG9yPiB2b2lkIHZpc2l0QWdncmVnYXRlKFZpc2l0b3ImKTsKKy8vICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgbWFya0lmQ2hlYXAoVmlzaXRvciYpOworICAgIHZv
aWQgdmlzaXRBZ2dyZWdhdGUxKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKKyAgICB2b2lkIG1hcmtJ
ZkNoZWFwMShBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAgICAgCiAgICAgdm9pZCBmaW5hbGl6ZVdp
dGhvdXREZWxldGluZyhWTSYpOwogICAgIHZvaWQgZmluYWxpemUoVk0mKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTZXQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTZXQuY3BwCShyZXZpc2lv
biAyNzI3MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU2V0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsMTIgKzMxLDE3IEBACiAKIG5hbWVzcGFjZSBKU0Mg
ewogCi12b2lkIFN0cnVjdHVyZVNldDo6bWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImIHZpc2l0b3Ip
IGNvbnN0CisvL3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+CisvL3ZvaWQgU3RydWN0dXJlU2V0
OjptYXJrSWZDaGVhcChWaXNpdG9yJiB2aXNpdG9yKSBjb25zdAordm9pZCBTdHJ1Y3R1cmVTZXQ6
Om1hcmtJZkNoZWFwMShBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBjb25zdAogewogICAg
IGZvciAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUgOiAqdGhpcykKLSAgICAgICAgc3RydWN0dXJlLT5t
YXJrSWZDaGVhcCh2aXNpdG9yKTsKKyAgICAgICAgc3RydWN0dXJlLT5tYXJrSWZDaGVhcDEodmlz
aXRvcik7CiB9CiAKKy8vdGVtcGxhdGUgdm9pZCBTdHJ1Y3R1cmVTZXQ6Om1hcmtJZkNoZWFwKFNs
b3RWaXNpdG9yJikgY29uc3Q7CisvL3RlbXBsYXRlIHZvaWQgU3RydWN0dXJlU2V0OjptYXJrSWZD
aGVhcChWZXJpZmllclNsb3RWaXNpdG9yJikgY29uc3Q7CisKIGJvb2wgU3RydWN0dXJlU2V0Ojpp
c1N0aWxsQWxpdmUoVk0mIHZtKSBjb25zdAogewogICAgIGZvciAoU3RydWN0dXJlKiBzdHJ1Y3R1
cmUgOiAqdGhpcykgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVj
dHVyZVNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9T
dHJ1Y3R1cmVTZXQuaAkocmV2aXNpb24gMjcyNzEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1N0cnVjdHVyZVNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC01NCw3ICs1NCw4IEBA
IHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG9ubHlFbnRyeSgpOwogICAgIH0KIAotICAgIHZvaWQg
bWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImKSBjb25zdDsKKy8vICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFZpc2l0b3I+IHZvaWQgbWFya0lmQ2hlYXAoVmlzaXRvciYpIGNvbnN0OworICAgIHZvaWQgbWFy
a0lmQ2hlYXAxKEFic3RyYWN0U2xvdFZpc2l0b3ImKSBjb25zdDsKICAgICBib29sIGlzU3RpbGxB
bGl2ZShWTSYpIGNvbnN0OwogICAgIAogICAgIHZvaWQgZHVtcEluQ29udGV4dChQcmludFN0cmVh
bSYsIER1bXBDb250ZXh0KikgY29uc3Q7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAJKHJldmlzaW9uIDI3MjcxMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI5NiwxMiArMjk2LDE0IEBAIHZvaWQgU3RydWN0dXJlU3R1Yklu
Zm86OnJlc2V0KGNvbnN0IENvbmMKICAgICBzZXRDYWNoZVR5cGUobG9ja2VyLCBDYWNoZVR5cGU6
OlVuc2V0KTsKIH0KIAotdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6dmlzaXRBZ2dyZWdhdGUoU2xv
dFZpc2l0b3ImIHZpc2l0b3IpCisvL3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+CisvL3ZvaWQg
U3RydWN0dXJlU3R1YkluZm86OnZpc2l0QWdncmVnYXRlKFZpc2l0b3ImIHZpc2l0b3IpCit2b2lk
IFN0cnVjdHVyZVN0dWJJbmZvOjp2aXNpdEFnZ3JlZ2F0ZTEoQWJzdHJhY3RTbG90VmlzaXRvciYg
dmlzaXRvcikKIHsKICAgICB7CiAgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9idWZm
ZXJlZFN0cnVjdHVyZXNMb2NrKTsKICAgICAgICAgZm9yIChhdXRvJiBidWZmZXJlZFN0cnVjdHVy
ZSA6IG1fYnVmZmVyZWRTdHJ1Y3R1cmVzKQotICAgICAgICAgICAgYnVmZmVyZWRTdHJ1Y3R1cmUu
YnlWYWxJZCgpLnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOworICAgICAgICAgICAgYnVmZmVyZWRT
dHJ1Y3R1cmUuYnlWYWxJZCgpLnZpc2l0QWdncmVnYXRlMSh2aXNpdG9yKTsKICAgICB9CiAgICAg
c3dpdGNoIChtX2NhY2hlVHlwZSkgewogICAgIGNhc2UgQ2FjaGVUeXBlOjpVbnNldDoKQEAgLTMx
MSwxMCArMzEzLDEwIEBAIHZvaWQgU3RydWN0dXJlU3R1YkluZm86OnZpc2l0QWdncmVnYXRlKFMK
ICAgICBjYXNlIENhY2hlVHlwZTo6UHV0QnlJZFJlcGxhY2U6CiAgICAgY2FzZSBDYWNoZVR5cGU6
OkluQnlJZFNlbGY6CiAgICAgY2FzZSBDYWNoZVR5cGU6OkdldEJ5SWRTZWxmOgotICAgICAgICBt
X2lkZW50aWZpZXIudmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7CisgICAgICAgIG1faWRlbnRpZmll
ci52aXNpdEFnZ3JlZ2F0ZTEodmlzaXRvcik7CiAgICAgICAgIHJldHVybjsKICAgICBjYXNlIENh
Y2hlVHlwZTo6U3R1YjoKLSAgICAgICAgdS5zdHViLT52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsK
KyAgICAgICAgdS5zdHViLT52aXNpdEFnZ3JlZ2F0ZTEodmlzaXRvcik7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAgICAgCkBAIC0zMjIsNiArMzI0LDkgQEAgdm9pZCBTdHJ1Y3R1cmVTdHViSW5m
bzo6dmlzaXRBZ2dyZWdhdGUoUwogICAgIHJldHVybjsKIH0KIAorLy90ZW1wbGF0ZSB2b2lkIFN0
cnVjdHVyZVN0dWJJbmZvOjp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYpOworLy90ZW1wbGF0
ZSB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjp2aXNpdEFnZ3JlZ2F0ZShWZXJpZmllclNsb3RWaXNp
dG9yJik7CisKIHZvaWQgU3RydWN0dXJlU3R1YkluZm86OnZpc2l0V2Vha1JlZmVyZW5jZXMoY29u
c3QgQ29uY3VycmVudEpTTG9ja2VyQmFzZSYgbG9ja2VyLCBDb2RlQmxvY2sqIGNvZGVCbG9jaykK
IHsKICAgICBWTSYgdm0gPSBjb2RlQmxvY2stPnZtKCk7CkBAIC0zNTIsMjQgKzM1NywzMSBAQCB2
b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjp2aXNpdFdlYWtSZWZlcmVuCiAgICAgcmVzZXRCeUdDID0g
dHJ1ZTsKIH0KIAotYm9vbCBTdHJ1Y3R1cmVTdHViSW5mbzo6cHJvcGFnYXRlVHJhbnNpdGlvbnMo
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCi17Ci0gICAgc3dpdGNoIChtX2NhY2hlVHlwZSkgewotICAg
IGNhc2UgQ2FjaGVUeXBlOjpVbnNldDoKLSAgICBjYXNlIENhY2hlVHlwZTo6QXJyYXlMZW5ndGg6
Ci0gICAgY2FzZSBDYWNoZVR5cGU6OlN0cmluZ0xlbmd0aDoKLSAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgY2FzZSBDYWNoZVR5cGU6OkdldEJ5SWRTZWxmOgotICAgIGNhc2UgQ2FjaGVUeXBlOjpQ
dXRCeUlkUmVwbGFjZToKLSAgICBjYXNlIENhY2hlVHlwZTo6SW5CeUlkU2VsZjoKLSAgICAgICAg
cmV0dXJuIHUuYnlJZFNlbGYuYmFzZU9iamVjdFN0cnVjdHVyZS0+bWFya0lmQ2hlYXAodmlzaXRv
cik7Ci0gICAgY2FzZSBDYWNoZVR5cGU6OlN0dWI6Ci0gICAgICAgIHJldHVybiB1LnN0dWItPnBy
b3BhZ2F0ZVRyYW5zaXRpb25zKHZpc2l0b3IpOwotICAgIH0KLSAgICAKLSAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiB0cnVlOwotfQorLy90ZW1wbGF0ZTx0eXBl
bmFtZSBWaXNpdG9yPgorLy9ib29sIFN0cnVjdHVyZVN0dWJJbmZvOjpwcm9wYWdhdGVUcmFuc2l0
aW9uczEoVmlzaXRvciYgdmlzaXRvcikKKy8veworLy8gICAgc3dpdGNoIChtX2NhY2hlVHlwZSkg
eworLy8gICAgY2FzZSBDYWNoZVR5cGU6OlVuc2V0OgorLy8gICAgY2FzZSBDYWNoZVR5cGU6OkFy
cmF5TGVuZ3RoOgorLy8gICAgY2FzZSBDYWNoZVR5cGU6OlN0cmluZ0xlbmd0aDoKKy8vICAgICAg
ICByZXR1cm4gdHJ1ZTsKKy8vICAgIGNhc2UgQ2FjaGVUeXBlOjpHZXRCeUlkU2VsZjoKKy8vICAg
IGNhc2UgQ2FjaGVUeXBlOjpQdXRCeUlkUmVwbGFjZToKKy8vICAgIGNhc2UgQ2FjaGVUeXBlOjpJ
bkJ5SWRTZWxmOgorLy8gICAgICAgIHJldHVybiB1LmJ5SWRTZWxmLmJhc2VPYmplY3RTdHJ1Y3R1
cmUtPm1hcmtJZkNoZWFwMSh2aXNpdG9yKTsKKy8vICAgICAgICByZXR1cm4gZmFsc2U7CisvLyAg
ICBjYXNlIENhY2hlVHlwZTo6U3R1YjoKKy8vICAgICAgICByZXR1cm4gdS5zdHViLT5wcm9wYWdh
dGVUcmFuc2l0aW9uczEwKHZpc2l0b3IpOworLy8gICAgICAgIHJldHVybiBmYWxzZTsKKy8vICAg
IH0KKy8vCisvLy8vICAgIFVOVVNFRF9QQVJBTSh2aXNpdG9yKTsgLy8gbWxhbSBURVNUCisvLyAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworLy8gICAgcmV0dXJuIHRydWU7CisvL30K
Ky8vCisvL3RlbXBsYXRlPD4gYm9vbCBTdHJ1Y3R1cmVTdHViSW5mbzo6cHJvcGFnYXRlVHJhbnNp
dGlvbnMxKFNsb3RWaXNpdG9yJik7CisvL3RlbXBsYXRlPD4gYm9vbCBTdHJ1Y3R1cmVTdHViSW5m
bzo6cHJvcGFnYXRlVHJhbnNpdGlvbnMxKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKIAogU3R1Yklu
Zm9TdW1tYXJ5IFN0cnVjdHVyZVN0dWJJbmZvOjpzdW1tYXJ5KFZNJiB2bSkgY29uc3QKIHsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHVi
SW5mby5oCShyZXZpc2lvbiAyNzI3MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvU3RydWN0dXJlU3R1YkluZm8uaAkod29ya2luZyBjb3B5KQpAQCAtOTMsMTQgKzkzLDE2IEBA
IHB1YmxpYzoKICAgICB2b2lkIGRlcmVmKCk7CiAgICAgdm9pZCBhYm91dFRvRGllKCk7CiAKLSAg
ICB2b2lkIHZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJik7CisvLyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBWaXNpdG9yPiB2b2lkIHZpc2l0QWdncmVnYXRlKFZpc2l0b3ImKTsKKyAgICB2b2lkIHZp
c2l0QWdncmVnYXRlMShBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAKICAgICAvLyBDaGVjayBpZiB0
aGUgc3R1YiBoYXMgd2VhayByZWZlcmVuY2VzIHRoYXQgYXJlIGRlYWQuIElmIGl0IGRvZXMsIHRo
ZW4gaXQgcmVzZXRzIGl0c2VsZiwKICAgICAvLyBlaXRoZXIgZW50aXJlbHkgb3IganVzdCBlbm91
Z2ggdG8gZW5zdXJlIHRoYXQgdGhvc2UgZGVhZCBwb2ludGVycyBkb24ndCBnZXQgdXNlZCBhbnlt
b3JlLgogICAgIHZvaWQgdmlzaXRXZWFrUmVmZXJlbmNlcyhjb25zdCBDb25jdXJyZW50SlNMb2Nr
ZXJCYXNlJiwgQ29kZUJsb2NrKik7CiAgICAgCiAgICAgLy8gVGhpcyByZXR1cm5zIHRydWUgaWYg
aXQgaGFzIG1hcmtlZCBldmVyeXRoaW5nIHRoYXQgaXQgd2lsbCBldmVyIG1hcmsuCi0gICAgYm9v
bCBwcm9wYWdhdGVUcmFuc2l0aW9ucyhTbG90VmlzaXRvciYpOworLy8gICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVmlzaXRvcj4gYm9vbCBwcm9wYWdhdGVUcmFuc2l0aW9uczEoVmlzaXRvciYpOworICAg
IGJvb2wgcHJvcGFnYXRlVHJhbnNpdGlvbnMxKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKICAgICAg
ICAgCiAgICAgU3R1YkluZm9TdW1tYXJ5IHN1bW1hcnkoVk0mKSBjb25zdDsKICAgICAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJs
b2NrLmNwcAkocmV2aXNpb24gMjcyNzEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxOSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMCBBcHBsZSBJbmMuIEFsbCBSaWdodHMg
UmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTc1LDcgKzc1LDgg
QEAgVW5saW5rZWRDb2RlQmxvY2s6OlVubGlua2VkQ29kZUJsb2NrKFZNJgogICAgIH0KIH0KIAot
dm9pZCBVbmxpbmtlZENvZGVCbG9jazo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgVW5saW5r
ZWRDb2RlQmxvY2s6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlz
aXRvcikKIHsKICAgICBVbmxpbmtlZENvZGVCbG9jayogdGhpc09iamVjdCA9IGpzQ2FzdDxVbmxp
bmtlZENvZGVCbG9jayo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhp
c09iamVjdCwgaW5mbygpKTsKQEAgLTk0LDYgKzk1LDggQEAgdm9pZCBVbmxpbmtlZENvZGVCbG9j
azo6dmlzaXRDaGlsZHJlbihKUwogICAgIHZpc2l0b3IucmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVk
KGV4dHJhTWVtb3J5KTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKFVubGlua2VkQ29kZUJs
b2NrKTsKKwogc2l6ZV90IFVubGlua2VkQ29kZUJsb2NrOjplc3RpbWF0ZWRTaXplKEpTQ2VsbCog
Y2VsbCwgVk0mIHZtKQogewogICAgIFVubGlua2VkQ29kZUJsb2NrKiB0aGlzT2JqZWN0ID0ganND
YXN0PFVubGlua2VkQ29kZUJsb2NrKj4oY2VsbCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaAkocmV2aXNpb24gMjcyNzEw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEy
LTIwMTkgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEyLTIwMjAgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC00MzEsNyArNDMxLDcgQEAgcHJpdmF0ZToKICAgICBSZWZDb3Vu
dGVkQXJyYXk8RXhwcmVzc2lvblJhbmdlSW5mbz4gbV9leHByZXNzaW9uSW5mbzsKIAogcHJvdGVj
dGVkOgotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3Im
KTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogICAgIHN0YXRpYyBzaXplX3QgZXN0aW1h
dGVkU2l6ZShKU0NlbGwqLCBWTSYpOwogCiBwdWJsaWM6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9uRXhlY3V0
YWJsZS5jcHAJKHJldmlzaW9uIDI3MjcxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9VbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTkgQXBwbGUgSW5jLiBBbGwg
UmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjAgQXBwbGUgSW5jLiBB
bGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0x
NDYsNyArMTQ2LDggQEAgdm9pZCBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6ZGVzdHJveQog
ICAgIHN0YXRpY19jYXN0PFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKj4oY2VsbCktPn5Vbmxp
bmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSgpOwogfQogCi12b2lkIFVubGlua2VkRnVuY3Rpb25FeGVj
dXRhYmxlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3Ip
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0
YWJsZTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQog
ewogICAgIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiB0aGlzT2JqZWN0ID0ganNDYXN0PFVu
bGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9J
TkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtMTY5LDYgKzE3MCw4IEBAIHZvaWQgVW5s
aW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU6OnZpc2l0Q2gKICAgICB9CiB9CiAKK0RFRklORV9WSVNJ
VF9DSElMRFJFTihVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSk7CisKIFNvdXJjZUNvZGUgVW5s
aW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU6OmxpbmtlZFNvdXJjZUNvZGUoY29uc3QgU291cmNlQ29k
ZSYgcGFzc2VkUGFyZW50U291cmNlKSBjb25zdAogewogICAgIGNvbnN0IFNvdXJjZUNvZGUmIHBh
cmVudFNvdXJjZSA9ICFtX2lzQnVpbHRpbkRlZmF1bHRDbGFzc0NvbnN0cnVjdG9yID8gcGFzc2Vk
UGFyZW50U291cmNlIDogQnVpbHRpbkV4ZWN1dGFibGVzOjpkZWZhdWx0Q29uc3RydWN0b3JTb3Vy
Y2VDb2RlKGNvbnN0cnVjdG9yS2luZCgpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5oCShy
ZXZpc2lvbiAyNzI3MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5r
ZWRGdW5jdGlvbkV4ZWN1dGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxOSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI0Miw3ICsyNDIsNyBA
QCBwcml2YXRlOgogICAgIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKFZNJiwgU3RydWN0dXJl
KiwgY29uc3QgU291cmNlQ29kZSYsIEZ1bmN0aW9uTWV0YWRhdGFOb2RlKiwgVW5saW5rZWRGdW5j
dGlvbktpbmQsIENvbnN0cnVjdEFiaWxpdHksIEpTUGFyc2VyU2NyaXB0TW9kZSwgUmVmUHRyPFRE
WkVudmlyb25tZW50TGluaz4sIE9wdGlvbmFsPFByaXZhdGVOYW1lRW52aXJvbm1lbnQ+LCBKU0M6
OkRlcml2ZWRDb250ZXh0VHlwZSwgSlNDOjpOZWVkc0NsYXNzRmllbGRJbml0aWFsaXplciwgUHJp
dmF0ZUJyYW5kUmVxdWlyZW1lbnQsIGJvb2wgaXNCdWlsdGluRGVmYXVsdENsYXNzQ29uc3RydWN0
b3IpOwogICAgIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKERlY29kZXImLCBjb25zdCBDYWNo
ZWRGdW5jdGlvbkV4ZWN1dGFibGUmKTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4o
SlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAg
ICAgdm9pZCBkZWNvZGVDYWNoZWRDb2RlQmxvY2tzKFZNJik7CiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlclNjb3BlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXJTY29wZS5jcHAJKHJldmlzaW9uIDI3
MjcxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlclNjb3BlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDgtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDgtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTU1LDcgKzU1LDggQEAgdm9pZCBEZWJ1Z2dlclNjb3BlOjpm
aW5pc2hDcmVhdGlvbihWTSYgdgogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKIH0KIAot
dm9pZCBEZWJ1Z2dlclNjb3BlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0
b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBEZWJ1Z2dlclNj
b3BlOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7
CiAgICAgRGVidWdnZXJTY29wZSogdGhpc09iamVjdCA9IGpzQ2FzdDxEZWJ1Z2dlclNjb3BlKj4o
Y2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkp
OwpAQCAtNjUsNiArNjYsOCBAQCB2b2lkIERlYnVnZ2VyU2NvcGU6OnZpc2l0Q2hpbGRyZW4oSlND
ZWxsCiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9uZXh0KTsKIH0KIAorREVGSU5F
X1ZJU0lUX0NISUxEUkVOKERlYnVnZ2VyU2NvcGUpOworCiBTdHJpbmcgRGVidWdnZXJTY29wZTo6
Y2xhc3NOYW1lKGNvbnN0IEpTT2JqZWN0KiBvYmplY3QsIFZNJiB2bSkKIHsKICAgICBjb25zdCBE
ZWJ1Z2dlclNjb3BlKiBzY29wZSA9IGpzQ2FzdDxjb25zdCBEZWJ1Z2dlclNjb3BlKj4ob2JqZWN0
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlclNjb3BlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyU2Nv
cGUuaAkocmV2aXNpb24gMjcyNzEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2Vy
L0RlYnVnZ2VyU2NvcGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDYsNyArNDYsNyBAQCBwdWJsaWM6
CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgRGVidWdnZXJTY29wZSogY3JlYXRlKFZN
JiB2bSwgSlNTY29wZSogc2NvcGUpOwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihK
U0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAgICAg
c3RhdGljIFN0cmluZyBjbGFzc05hbWUoY29uc3QgSlNPYmplY3QqLCBWTSYpOwogICAgIHN0YXRp
YyBTdHJpbmcgdG9TdHJpbmdOYW1lKGNvbnN0IEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqKTsK
ICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqLCBKU0dsb2JhbE9i
amVjdCosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRUcmFuc2l0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkVHJhbnNpdGlvbnMuY3BwCShyZXZpc2lv
biAyNzI3MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRUcmFuc2l0
aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUyLDcgKzUyLDcgQEAgdm9pZCBEZXNpcmVkVHJh
bnNpdGlvbjo6cmVhbGx5QWRkKFZNJiB2bQogICAgICAgICAgICAgbV9vbGRTdHJ1Y3R1cmUsIG1f
bmV3U3RydWN0dXJlKSk7CiB9CiAKLXZvaWQgRGVzaXJlZFRyYW5zaXRpb246OnZpc2l0Q2hpbGRy
ZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIERlc2lyZWRUcmFuc2l0aW9uOjp2aXNpdENo
aWxkcmVuMihBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHZpc2l0b3IuYXBw
ZW5kVW5iYXJyaWVyZWQobV9jb2RlT3JpZ2luT3duZXIpOwogICAgIHZpc2l0b3IuYXBwZW5kVW5i
YXJyaWVyZWQobV9vbGRTdHJ1Y3R1cmUpOwpAQCAtNzgsMTAgKzc4LDEwIEBAIHZvaWQgRGVzaXJl
ZFRyYW5zaXRpb25zOjpyZWFsbHlBZGQoVk0mIHYKICAgICAgICAgbV90cmFuc2l0aW9uc1tpXS5y
ZWFsbHlBZGQodm0sIGNvbW1vbik7CiB9CiAKLXZvaWQgRGVzaXJlZFRyYW5zaXRpb25zOjp2aXNp
dENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBEZXNpcmVkVHJhbnNpdGlvbnM6
OnZpc2l0Q2hpbGRyZW4yKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fdHJhbnNpdGlvbnMuc2l6ZSgpOyBpKyspCi0gICAgICAg
IG1fdHJhbnNpdGlvbnNbaV0udmlzaXRDaGlsZHJlbih2aXNpdG9yKTsKKyAgICAgICAgbV90cmFu
c2l0aW9uc1tpXS52aXNpdENoaWxkcmVuMih2aXNpdG9yKTsKIH0KIAogfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkVHJh
bnNpdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rl
c2lyZWRUcmFuc2l0aW9ucy5oCShyZXZpc2lvbiAyNzI3MTApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Rlc2lyZWRUcmFuc2l0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC00Niw4
ICs0Niw3IEBAIHB1YmxpYzoKICAgICBEZXNpcmVkVHJhbnNpdGlvbihDb2RlQmxvY2sqLCBDb2Rl
QmxvY2sqIGNvZGVPcmlnaW5Pd25lciwgU3RydWN0dXJlKiwgU3RydWN0dXJlKik7CiAKICAgICB2
b2lkIHJlYWxseUFkZChWTSYsIENvbW1vbkRhdGEqKTsKLSAgICAKLSAgICB2b2lkIHZpc2l0Q2hp
bGRyZW4oU2xvdFZpc2l0b3ImKTsKKyAgICB2b2lkIHZpc2l0Q2hpbGRyZW4yKEFic3RyYWN0U2xv
dFZpc2l0b3ImKTsKIAogcHJpdmF0ZToKICAgICBDb2RlQmxvY2sqIG1fY29kZUJsb2NrOwpAQCAt
NjMsNyArNjIsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGFkZExhemlseShDb2RlQmxvY2sqLCBD
b2RlQmxvY2sqIGNvZGVPcmlnaW5Pd25lciwgU3RydWN0dXJlKiwgU3RydWN0dXJlKik7CiAgICAg
dm9pZCByZWFsbHlBZGQoVk0mLCBDb21tb25EYXRhKik7Ci0gICAgdm9pZCB2aXNpdENoaWxkcmVu
KFNsb3RWaXNpdG9yJik7CisgICAgdm9pZCB2aXNpdENoaWxkcmVuMihBYnN0cmFjdFNsb3RWaXNp
dG9yJik7CiAKIHByaXZhdGU6CiAgICAgVmVjdG9yPERlc2lyZWRUcmFuc2l0aW9uPiBtX3RyYW5z
aXRpb25zOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2Vha1Jl
ZmVyZW5jZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
RGVzaXJlZFdlYWtSZWZlcmVuY2VzLmNwcAkocmV2aXNpb24gMjcyNzEwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2Vha1JlZmVyZW5jZXMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC04Nyw3ICs4Nyw3IEBAIHZvaWQgRGVzaXJlZFdlYWtSZWZlcmVuY2VzOjpyZWFsbHlB
ZGQoVk0KICAgICB9CiB9CiAKLXZvaWQgRGVzaXJlZFdlYWtSZWZlcmVuY2VzOjp2aXNpdENoaWxk
cmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBEZXNpcmVkV2Vha1JlZmVyZW5jZXM6OnZp
c2l0Q2hpbGRyZW4yKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgZm9yIChK
U0NlbGwqIHRhcmdldCA6IG1fcmVmZXJlbmNlcykKICAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJh
cnJpZXJlZCh0YXJnZXQpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNp
cmVkV2Vha1JlZmVyZW5jZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Rlc2lyZWRXZWFrUmVmZXJlbmNlcy5oCShyZXZpc2lvbiAyNzI3MTApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXZWFrUmVmZXJlbmNlcy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zMSwxMCArMzEsMTAgQEAKIAogbmFtZXNwYWNlIEpTQyB7IAogCitjbGFzcyBB
YnN0cmFjdFNsb3RWaXNpdG9yOwogY2xhc3MgQ29kZUJsb2NrOwogY2xhc3MgSlNDZWxsOwogY2xh
c3MgSlNWYWx1ZTsKLWNsYXNzIFNsb3RWaXNpdG9yOwogY2xhc3MgVk07CiAKIG5hbWVzcGFjZSBE
RkcgewpAQCAtNTIsOCArNTIsOCBAQCBwdWJsaWM6CiAgICAgYm9vbCBjb250YWlucyhKU0NlbGwq
KTsKICAgICAKICAgICB2b2lkIHJlYWxseUFkZChWTSYsIENvbW1vbkRhdGEqKTsKLSAgICAKLSAg
ICB2b2lkIHZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKKworICAgIHZvaWQgdmlzaXRDaGls
ZHJlbjIoQWJzdHJhY3RTbG90VmlzaXRvciYpOwogCiBwcml2YXRlOgogICAgIENvZGVCbG9jayog
bV9jb2RlQmxvY2s7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAko
cmV2aXNpb24gMjcyNzEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTk3Nyw3ICs5NzcsNyBAQCBCbG9ja0xpc3QgR3JhcGg6OmJs
b2Nrc0luUG9zdE9yZGVyKGJvb2wgCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAoaXNTYWZl
VG9WYWxpZGF0ZSAmJiB2YWxpZGF0aW9uRW5hYmxlZCgpKSB7IC8vIFRoZXJlIGFyZSB1c2VycyBv
ZiB0aGlzIHdoZXJlIHdlIGhhdmVuJ3QgeWV0IGJ1aWx0IG9mIHRoZSBDRkcgZW5vdWdoIHRvIGJl
IGFibGUgdG8gcnVuIGRvbWluYXRvcnMuCisgICAgaWYgKGlzU2FmZVRvVmFsaWRhdGUgJiYgdmFs
aWRhdGlvbkVuYWJsZWQoKSkgeyAvLyBUaGVyZSBhcmUgdXNlcnMgb2YgdGhpcyB3aGVyZSB3ZSBo
YXZlbid0IHlldCBidWlsdCB0aGUgQ0ZHIGVub3VnaCB0byBiZSBhYmxlIHRvIHJ1biBkb21pbmF0
b3JzLgogICAgICAgICBhdXRvIHZhbGlkYXRlUmVzdWx0cyA9IFsmXSAoYXV0byYgZG9taW5hdG9y
cykgewogICAgICAgICAgICAgLy8gV2hlbiBpdGVyYXRpbmcgb3ZlciByZXZlcnNlIHBvc3Qgb3Jk
ZXIsIHdlIHNob3VsZCBzZWUgZG9taW5hdG9ycwogICAgICAgICAgICAgLy8gYmVmb3JlIHRoaW5n
cyB0aGV5IGRvbWluYXRlLgpAQCAtMTQ0OCw3ICsxNDQ4LDcgQEAgdm9pZCBHcmFwaDo6cmVnaXN0
ZXJGcm96ZW5WYWx1ZXMoKQogICAgIG1fY29kZUJsb2NrLT5jb25zdGFudHNTb3VyY2VDb2RlUmVw
cmVzZW50YXRpb24oKS5zaHJpbmtUb0ZpdCgpOwogfQogCi12b2lkIEdyYXBoOjp2aXNpdENoaWxk
cmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBHcmFwaDo6dmlzaXRDaGlsZHJlbjEoQWJz
dHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBmb3IgKEZyb3plblZhbHVlKiB2YWx1
ZSA6IG1fZnJvemVuVmFsdWVzKSB7CiAgICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQo
dmFsdWUtPnZhbHVlKCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFw
aC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAko
cmV2aXNpb24gMjcyNzEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xMDAwLDkgKzEwMDAsOSBAQCBwdWJsaWM6CiAgICAgYm9vbCBj
YW5Eb0Zhc3RTcHJlYWQoTm9kZSosIGNvbnN0IEFic3RyYWN0VmFsdWUmKTsKICAgICAKICAgICB2
b2lkIHJlZ2lzdGVyRnJvemVuVmFsdWVzKCk7Ci0gICAgCi0gICAgdm9pZCB2aXNpdENoaWxkcmVu
KFNsb3RWaXNpdG9yJikgZmluYWw7Ci0gICAgCisKKyAgICB2b2lkIHZpc2l0Q2hpbGRyZW4xKEFi
c3RyYWN0U2xvdFZpc2l0b3ImKSBmaW5hbDsKKwogICAgIHZvaWQgbG9nQXNzZXJ0aW9uRmFpbHVy
ZSgKICAgICAgICAgc3RkOjpudWxscHRyX3QsIGNvbnN0IGNoYXIqIGZpbGUsIGludCBsaW5lLCBj
b25zdCBjaGFyKiBmdW5jdGlvbiwKICAgICAgICAgY29uc3QgY2hhciogYXNzZXJ0aW9uKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAkocmV2aXNpb24gMjcyNzEwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNjcyLDkgKzY3Miw5IEBAIENvbXBpbGF0aW9uS2V5IFBsYW46OmtleSgpCiAgICAgcmV0dXJu
IENvbXBpbGF0aW9uS2V5KG1fY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpLCBtX21vZGUpOwogfQog
Ci12b2lkIFBsYW46OmNoZWNrTGl2ZW5lc3NBbmRWaXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQordm9pZCBQbGFuOjpjaGVja0xpdmVuZXNzQW5kVmlzaXRDaGlsZHJlbihBYnN0cmFj
dFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewotICAgIGlmICghaXNLbm93blRvQmVMaXZlRHVyaW5n
R0MoKSkKKyAgICBpZiAoIWlzS25vd25Ub0JlTGl2ZUR1cmluZ0dDKHZpc2l0b3IpKQogICAgICAg
ICByZXR1cm47CiAKICAgICBjbGVhbk11c3RIYW5kbGVWYWx1ZXNJZk5lY2Vzc2FyeSgpOwpAQCAt
Njg0LDggKzY4NCw4IEBAIHZvaWQgUGxhbjo6Y2hlY2tMaXZlbmVzc0FuZFZpc2l0Q2hpbGRyZW4K
ICAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQodmFsdWUudmFsdWUoKSk7CiAg
ICAgfQogCi0gICAgbV9yZWNvcmRlZFN0YXR1c2VzLnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOwot
ICAgIG1fcmVjb3JkZWRTdGF0dXNlcy5tYXJrSWZDaGVhcCh2aXNpdG9yKTsKKyAgICBtX3JlY29y
ZGVkU3RhdHVzZXMudmlzaXRBZ2dyZWdhdGUxKHZpc2l0b3IpOworICAgIG1fcmVjb3JkZWRTdGF0
dXNlcy5tYXJrSWZDaGVhcDEodmlzaXRvcik7CiAKICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmll
cmVkKG1fY29kZUJsb2NrKTsKICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKG1fY29kZUJs
b2NrLT5hbHRlcm5hdGl2ZSgpKTsKQEAgLTY5OCw4ICs2OTgsOCBAQCB2b2lkIFBsYW46OmNoZWNr
TGl2ZW5lc3NBbmRWaXNpdENoaWxkcmVuCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBtX3dlYWtS
ZWZlcmVuY2VzLnZpc2l0Q2hpbGRyZW4odmlzaXRvcik7Ci0gICAgbV90cmFuc2l0aW9ucy52aXNp
dENoaWxkcmVuKHZpc2l0b3IpOworICAgIG1fd2Vha1JlZmVyZW5jZXMudmlzaXRDaGlsZHJlbjIo
dmlzaXRvcik7CisgICAgbV90cmFuc2l0aW9ucy52aXNpdENoaWxkcmVuMih2aXNpdG9yKTsKIH0K
IAogdm9pZCBQbGFuOjpmaW5hbGl6ZUluR0MoKQpAQCAtNzA4LDcgKzcwOCwyMyBAQCB2b2lkIFBs
YW46OmZpbmFsaXplSW5HQygpCiAgICAgbV9yZWNvcmRlZFN0YXR1c2VzLmZpbmFsaXplV2l0aG91
dERlbGV0aW5nKCptX3ZtKTsKIH0KIAotYm9vbCBQbGFuOjppc0tub3duVG9CZUxpdmVEdXJpbmdH
QygpCitib29sIFBsYW46OmlzS25vd25Ub0JlTGl2ZUR1cmluZ0dDKEFic3RyYWN0U2xvdFZpc2l0
b3ImIHZpc2l0b3IpCit7CisgICAgaWYgKG1fc3RhZ2UgPT0gQ2FuY2VsbGVkKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisvLyAgICBpZiAoIW1fdm0tPmhlYXAuaXNNYXJrZWQobV9jb2RlQmxvY2st
Pm93bmVyRXhlY3V0YWJsZSgpKSkKKyAgICBpZiAoIXZpc2l0b3IuaXNNYXJrZWQobV9jb2RlQmxv
Y2stPm93bmVyRXhlY3V0YWJsZSgpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworLy8gICAgaWYg
KCFtX3ZtLT5oZWFwLmlzTWFya2VkKG1fY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpKSkKKyAgICBp
ZiAoIXZpc2l0b3IuaXNNYXJrZWQobV9jb2RlQmxvY2stPmFsdGVybmF0aXZlKCkpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisvLyAgICBpZiAoISFtX3Byb2ZpbGVkREZHQ29kZUJsb2NrICYmICFt
X3ZtLT5oZWFwLmlzTWFya2VkKG1fcHJvZmlsZWRERkdDb2RlQmxvY2spKQorICAgIGlmICghIW1f
cHJvZmlsZWRERkdDb2RlQmxvY2sgJiYgIXZpc2l0b3IuaXNNYXJrZWQobV9wcm9maWxlZERGR0Nv
ZGVCbG9jaykpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
Ym9vbCBQbGFuOjppc0tub3duVG9CZUxpdmVBZnRlckdDKCkKIHsKICAgICBpZiAobV9zdGFnZSA9
PSBDYW5jZWxsZWQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHUGxhbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHUGxhbi5oCShyZXZpc2lvbiAyNzI3MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1BsYW4uaAkod29ya2luZyBjb3B5KQpAQCAtNDMsOCArNDMsOCBAQAogCiBuYW1l
c3BhY2UgSlNDIHsKIAorY2xhc3MgQWJzdHJhY3RTbG90VmlzaXRvcjsKIGNsYXNzIENvZGVCbG9j
azsKLWNsYXNzIFNsb3RWaXNpdG9yOwogCiBuYW1lc3BhY2UgREZHIHsKIApAQCAtNzEsOSArNzEs
MTAgQEAgcHVibGljOgogICAgIENvbXBpbGF0aW9uS2V5IGtleSgpOwogICAgIAogICAgIHRlbXBs
YXRlPHR5cGVuYW1lIEZ1bmM+Ci0gICAgdm9pZCBpdGVyYXRlQ29kZUJsb2Nrc0ZvckdDKGNvbnN0
IEZ1bmMmKTsKLSAgICB2b2lkIGNoZWNrTGl2ZW5lc3NBbmRWaXNpdENoaWxkcmVuKFNsb3RWaXNp
dG9yJik7Ci0gICAgYm9vbCBpc0tub3duVG9CZUxpdmVEdXJpbmdHQygpOworICAgIHZvaWQgaXRl
cmF0ZUNvZGVCbG9ja3NGb3JHQyhBYnN0cmFjdFNsb3RWaXNpdG9yJiwgY29uc3QgRnVuYyYpOwor
ICAgIHZvaWQgY2hlY2tMaXZlbmVzc0FuZFZpc2l0Q2hpbGRyZW4oQWJzdHJhY3RTbG90VmlzaXRv
ciYpOworICAgIGJvb2wgaXNLbm93blRvQmVMaXZlRHVyaW5nR0MoQWJzdHJhY3RTbG90VmlzaXRv
ciYpOworICAgIGJvb2wgaXNLbm93blRvQmVMaXZlQWZ0ZXJHQygpOwogICAgIHZvaWQgZmluYWxp
emVJbkdDKCk7CiAgICAgdm9pZCBjYW5jZWwoKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdQbGFuSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHUGxhbklubGluZXMuaAkocmV2aXNpb24gMjcyNzEwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw5
ICszMiw5IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKICNpZiBFTkFCTEUoREZH
X0pJVCkKIAogdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KLXZvaWQgUGxhbjo6aXRlcmF0ZUNvZGVC
bG9ja3NGb3JHQyhjb25zdCBGdW5jJiBmdW5jKQordm9pZCBQbGFuOjppdGVyYXRlQ29kZUJsb2Nr
c0ZvckdDKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IEZ1bmMmIGZ1bmMpCiB7
Ci0gICAgaWYgKCFpc0tub3duVG9CZUxpdmVEdXJpbmdHQygpKQorICAgIGlmICghaXNLbm93blRv
QmVMaXZlRHVyaW5nR0ModmlzaXRvcikpCiAgICAgICAgIHJldHVybjsKICAgICAKICAgICAvLyBD
b21waWxhdGlvbiB3cml0ZXMgbG90cyBvZiB2YWx1ZXMgdG8gYSBDb2RlQmxvY2sgd2l0aG91dCBw
ZXJmb3JtaW5nCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVwb2ludC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlcG9pbnQu
Y3BwCShyZXZpc2lvbiAyNzI3MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nh
ZmVwb2ludC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgzLDI4ICs4MywzOCBAQCB2b2lkIFNhZmVw
b2ludDo6YmVnaW4oKQogICAgIH0KIH0KIAotdm9pZCBTYWZlcG9pbnQ6OmNoZWNrTGl2ZW5lc3NB
bmRWaXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBTYWZlcG9pbnQ6OmNo
ZWNrTGl2ZW5lc3NBbmRWaXNpdENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3Ip
CiB7CiAgICAgUkVMRUFTRV9BU1NFUlQobV9kaWRDYWxsQmVnaW4pOwogCiAgICAgaWYgKG1fcmVz
dWx0Lm1fZGlkR2V0Q2FuY2VsbGVkKQogICAgICAgICByZXR1cm47IC8vIFdlIHdlcmUgY2FuY2Vs
bGVkIGR1cmluZyBhIHByZXZpb3VzIEdDIQogICAgIAotICAgIGlmICghaXNLbm93blRvQmVMaXZl
RHVyaW5nR0MoKSkKKyAgICBpZiAoIWlzS25vd25Ub0JlTGl2ZUR1cmluZ0dDKHZpc2l0b3IpKQog
ICAgICAgICByZXR1cm47CiAgICAgCiAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9zY2FubmFibGVz
LnNpemUoKTsgaS0tOykKLSAgICAgICAgbV9zY2FubmFibGVzW2ldLT52aXNpdENoaWxkcmVuKHZp
c2l0b3IpOworICAgICAgICBtX3NjYW5uYWJsZXNbaV0tPnZpc2l0Q2hpbGRyZW4xKHZpc2l0b3Ip
OwogfQogCi1ib29sIFNhZmVwb2ludDo6aXNLbm93blRvQmVMaXZlRHVyaW5nR0MoKQorYm9vbCBT
YWZlcG9pbnQ6OmlzS25vd25Ub0JlTGl2ZUR1cmluZ0dDKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZp
c2l0b3IpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQobV9kaWRDYWxsQmVnaW4pOwogICAgIAogICAg
IGlmIChtX3Jlc3VsdC5tX2RpZEdldENhbmNlbGxlZCkKICAgICAgICAgcmV0dXJuIHRydWU7IC8v
IFdlIHdlcmUgY2FuY2VsbGVkIGR1cmluZyBhIHByZXZpb3VzIEdDLCBzbyBsZXQncyBub3QgbWVz
cyB3aXRoIGl0IHRoaXMgdGltZSBhcm91bmQgLSBwcmV0ZW5kIGl0J3MgbGl2ZSBhbmQgbW92ZSBv
bi4KICAgICAKLSAgICByZXR1cm4gbV9wbGFuLmlzS25vd25Ub0JlTGl2ZUR1cmluZ0dDKCk7Cisg
ICAgcmV0dXJuIG1fcGxhbi5pc0tub3duVG9CZUxpdmVEdXJpbmdHQyh2aXNpdG9yKTsKK30KKwor
Ym9vbCBTYWZlcG9pbnQ6OmlzS25vd25Ub0JlTGl2ZUFmdGVyR0MoKQoreworICAgIFJFTEVBU0Vf
QVNTRVJUKG1fZGlkQ2FsbEJlZ2luKTsKKyAgICAKKyAgICBpZiAobV9yZXN1bHQubV9kaWRHZXRD
YW5jZWxsZWQpCisgICAgICAgIHJldHVybiB0cnVlOyAvLyBXZSB3ZXJlIGNhbmNlbGxlZCBkdXJp
bmcgYSBwcmV2aW91cyBHQywgc28gbGV0J3Mgbm90IG1lc3Mgd2l0aCBpdCB0aGlzIHRpbWUgYXJv
dW5kIC0gcHJldGVuZCBpdCdzIGxpdmUgYW5kIG1vdmUgb24uCisgICAgCisgICAgcmV0dXJuIG1f
cGxhbi5pc0tub3duVG9CZUxpdmVBZnRlckdDKCk7CiB9CiAKIHZvaWQgU2FmZXBvaW50OjpjYW5j
ZWwoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlcG9pbnQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVwb2ludC5oCShyZXZp
c2lvbiAyNzI3MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVwb2ludC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw3IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1j
bGFzcyBTbG90VmlzaXRvcjsKK2NsYXNzIEFic3RyYWN0U2xvdFZpc2l0b3I7CiBjbGFzcyBWTTsK
IAogbmFtZXNwYWNlIERGRyB7CkBAIC02Niw5ICs2NiwxMCBAQCBwdWJsaWM6CiAgICAgdm9pZCBh
ZGQoU2Nhbm5hYmxlKik7CiAgICAgCiAgICAgdm9pZCBiZWdpbigpOwotICAgIAotICAgIHZvaWQg
Y2hlY2tMaXZlbmVzc0FuZFZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKLSAgICBib29sIGlz
S25vd25Ub0JlTGl2ZUR1cmluZ0dDKCk7CisKKyAgICB2b2lkIGNoZWNrTGl2ZW5lc3NBbmRWaXNp
dENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKKyAgICBib29sIGlzS25vd25Ub0JlTGl2
ZUR1cmluZ0dDKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKKyAgICBib29sIGlzS25vd25Ub0JlTGl2
ZUFmdGVyR0MoKTsKICAgICB2b2lkIGNhbmNlbCgpOwogICAgIAogICAgIFZNKiB2bSgpIGNvbnN0
OyAvLyBNYXkgcmV0dXJuIG51bGwgaWYgd2UndmUgYmVlbiBjYW5jZWxsZWQuCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NjYW5uYWJsZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2Nhbm5hYmxlLmgJKHJldmlzaW9uIDI3MjcxMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2Nhbm5hYmxlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTI5LDcgKzI5LDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLWNsYXNzIFNsb3RWaXNpdG9y
OworY2xhc3MgQWJzdHJhY3RTbG90VmlzaXRvcjsKIAogbmFtZXNwYWNlIERGRyB7CiAKQEAgLTM4
LDcgKzM4LDcgQEAgcHVibGljOgogICAgIFNjYW5uYWJsZSgpIHsgfQogICAgIHZpcnR1YWwgflNj
YW5uYWJsZSgpIHsgfQogICAgIAotICAgIHZpcnR1YWwgdm9pZCB2aXNpdENoaWxkcmVuKFNsb3RW
aXNpdG9yJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdENoaWxkcmVuMShBYnN0cmFjdFNs
b3RWaXNpdG9yJikgPSAwOwogfTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5jcHAJKHJldmlzaW9uIDI3Mjcx
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3QuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zNzIsNyArMzcyLDcgQEAgdm9pZCBXb3JrbGlzdDo6cmVzdW1lQWxsVGhyZWFk
cygpCiAgICAgbV9zdXNwZW5zaW9uTG9jay51bmxvY2soKTsKIH0KIAotdm9pZCBXb3JrbGlzdDo6
dmlzaXRXZWFrUmVmZXJlbmNlcyhTbG90VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgV29ya2xpc3Q6
OnZpc2l0V2Vha1JlZmVyZW5jZXMoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAg
ICBWTSogdm0gPSAmdmlzaXRvci5oZWFwKCktPnZtKCk7CiAgICAgewpAQCAtNDA1LDcgKzQwNSw4
IEBAIHZvaWQgV29ya2xpc3Q6OnJlbW92ZURlYWRQbGFucyhWTSYgdm0pCiAgICAgICAgICAgICBQ
bGFuKiBwbGFuID0gaXRlci0+dmFsdWUuZ2V0KCk7CiAgICAgICAgICAgICBpZiAocGxhbi0+dm0o
KSAhPSAmdm0pCiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBpZiAocGxh
bi0+aXNLbm93blRvQmVMaXZlRHVyaW5nR0MoKSkgeworLy8gICAgICAgICAgICBpZiAocGxhbi0+
aXNLbm93blRvQmVMaXZlRHVyaW5nR0MoKSkgeworICAgICAgICAgICAgaWYgKHBsYW4tPmlzS25v
d25Ub0JlTGl2ZUFmdGVyR0MoKSkgewogICAgICAgICAgICAgICAgIHBsYW4tPmZpbmFsaXplSW5H
QygpOwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQpAQCAtNDQwLDcg
KzQ0MSw4IEBAIHZvaWQgV29ya2xpc3Q6OnJlbW92ZURlYWRQbGFucyhWTSYgdm0pCiAgICAgICAg
ICAgICBjb250aW51ZTsKICAgICAgICAgaWYgKHNhZmVwb2ludC0+dm0oKSAhPSAmdm0pCiAgICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgaWYgKHNhZmVwb2ludC0+aXNLbm93blRvQmVMaXZl
RHVyaW5nR0MoKSkKKy8vICAgICAgICBpZiAoc2FmZXBvaW50LT5pc0tub3duVG9CZUxpdmVEdXJp
bmdHQygpKQorICAgICAgICBpZiAoc2FmZXBvaW50LT5pc0tub3duVG9CZUxpdmVBZnRlckdDKCkp
CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgc2FmZXBvaW50LT5jYW5jZWwoKTsKICAg
ICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5oCShyZXZpc2lv
biAyNzI3MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0LmgJKHdv
cmtpbmcgY29weSkKQEAgLTM1LDcgKzM1LDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLWNsYXNz
IFNsb3RWaXNpdG9yOworY2xhc3MgQWJzdHJhY3RTbG90VmlzaXRvcjsKIAogbmFtZXNwYWNlIERG
RyB7CiAKQEAgLTU3LDcgKzU3LDcgQEAgcHVibGljOgogICAgIHZvaWQgY29tcGxldGVBbGxQbGFu
c0ZvclZNKFZNJik7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgotICAgIHZvaWQgaXRl
cmF0ZUNvZGVCbG9ja3NGb3JHQyhWTSYsIGNvbnN0IEZ1bmMmKTsKKyAgICB2b2lkIGl0ZXJhdGVD
b2RlQmxvY2tzRm9yR0MoQWJzdHJhY3RTbG90VmlzaXRvciYsIFZNJiwgY29uc3QgRnVuYyYpOwog
CiAgICAgdm9pZCB3YWl0VW50aWxBbGxQbGFuc0ZvclZNQXJlUmVhZHkoVk0mKTsKICAgICBTdGF0
ZSBjb21wbGV0ZUFsbFJlYWR5UGxhbnNGb3JWTShWTSYsIENvbXBpbGF0aW9uS2V5ID0gQ29tcGls
YXRpb25LZXkoKSk7CkBAIC03Myw3ICs3Myw3IEBAIHB1YmxpYzoKICAgICBib29sIGlzQWN0aXZl
Rm9yVk0oVk0mKSBjb25zdDsKICAgICAKICAgICAvLyBPbmx5IGNhbGxlZCBvbiB0aGUgbWFpbiB0
aHJlYWQgYWZ0ZXIgc3VzcGVuZGluZyBhbGwgdGhyZWFkcy4KLSAgICB2b2lkIHZpc2l0V2Vha1Jl
ZmVyZW5jZXMoU2xvdFZpc2l0b3ImKTsKKyAgICB2b2lkIHZpc2l0V2Vha1JlZmVyZW5jZXMoQWJz
dHJhY3RTbG90VmlzaXRvciYpOwogICAgIHZvaWQgcmVtb3ZlRGVhZFBsYW5zKFZNJik7CiAgICAg
CiAgICAgdm9pZCByZW1vdmVOb25Db21waWxpbmdQbGFuc0ZvclZNKFZNJik7CkBAIC0xNDQsNyAr
MTQ0LDcgQEAgV29ya2xpc3QmIGV4aXN0aW5nV29ya2xpc3RGb3JJbmRleCh1bnNpZwogdm9pZCBj
b21wbGV0ZUFsbFBsYW5zRm9yVk0oVk0mKTsKIAogdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KLXZv
aWQgaXRlcmF0ZUNvZGVCbG9ja3NGb3JHQyhWTSYsIGNvbnN0IEZ1bmMmKTsKK3ZvaWQgaXRlcmF0
ZUNvZGVCbG9ja3NGb3JHQyhBYnN0cmFjdFNsb3RWaXNpdG9yJiwgVk0mLCBjb25zdCBGdW5jJik7
CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdXb3JrbGlzdElubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0SW5saW5lcy5oCShyZXZpc2lvbiAyNzI3MTApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0SW5saW5lcy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zMywzMCArMzMsMzAgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewog
I2lmIEVOQUJMRShERkdfSklUKQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgotdm9pZCBpdGVy
YXRlQ29kZUJsb2Nrc0ZvckdDKFZNJiB2bSwgY29uc3QgRnVuYyYgZnVuYykKK3ZvaWQgaXRlcmF0
ZUNvZGVCbG9ja3NGb3JHQyhBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBWTSYgdm0sIGNv
bnN0IEZ1bmMmIGZ1bmMpCiB7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gREZHOjpudW1iZXJPZldv
cmtsaXN0cygpOyBpLS07KSB7CiAgICAgICAgIGlmIChERkc6OldvcmtsaXN0KiB3b3JrbGlzdCA9
IERGRzo6ZXhpc3RpbmdXb3JrbGlzdEZvckluZGV4T3JOdWxsKGkpKQotICAgICAgICAgICAgd29y
a2xpc3QtPml0ZXJhdGVDb2RlQmxvY2tzRm9yR0Modm0sIGZ1bmMpOworICAgICAgICAgICAgd29y
a2xpc3QtPml0ZXJhdGVDb2RlQmxvY2tzRm9yR0ModmlzaXRvciwgdm0sIGZ1bmMpOwogICAgIH0K
IH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KLXZvaWQgV29ya2xpc3Q6Oml0ZXJhdGVDb2Rl
QmxvY2tzRm9yR0MoVk0mIHZtLCBjb25zdCBGdW5jJiBmdW5jKQordm9pZCBXb3JrbGlzdDo6aXRl
cmF0ZUNvZGVCbG9ja3NGb3JHQyhBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBWTSYgdm0s
IGNvbnN0IEZ1bmMmIGZ1bmMpCiB7CiAgICAgTG9ja0hvbGRlciBsb2NrZXIoKm1fbG9jayk7CiAg
ICAgZm9yIChQbGFuTWFwOjppdGVyYXRvciBpdGVyID0gbV9wbGFucy5iZWdpbigpOyBpdGVyICE9
IG1fcGxhbnMuZW5kKCk7ICsraXRlcikgewogICAgICAgICBQbGFuKiBwbGFuID0gaXRlci0+dmFs
dWUuZ2V0KCk7CiAgICAgICAgIGlmIChwbGFuLT52bSgpICE9ICZ2bSkKICAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICBwbGFuLT5pdGVyYXRlQ29kZUJsb2Nrc0ZvckdDKGZ1bmMpOworICAg
ICAgICBwbGFuLT5pdGVyYXRlQ29kZUJsb2Nrc0ZvckdDKHZpc2l0b3IsIGZ1bmMpOwogICAgIH0K
IH0KIAogI2Vsc2UgLy8gRU5BQkxFKERGR19KSVQpCiAKIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+
Ci12b2lkIGl0ZXJhdGVDb2RlQmxvY2tzRm9yR0MoVk0mLCBjb25zdCBGdW5jJikKK3ZvaWQgaXRl
cmF0ZUNvZGVCbG9ja3NGb3JHQyhBYnN0cmFjdFNsb3RWaXNpdG9yJiwgVk0mLCBjb25zdCBGdW5j
JikKIHsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQWJzdHJhY3RTbG90
VmlzaXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQWJz
dHJhY3RTbG90VmlzaXRvci5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvQWJzdHJhY3RTbG90VmlzaXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwzNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBYnN0
cmFjdFNsb3RWaXNpdG9yLmgiCisKKyNpbmNsdWRlICJBYnN0cmFjdFNsb3RWaXNpdG9ySW5saW5l
cy5oIgorLy8jaW5jbHVkZSAiTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXIuaCIKKworbmFtZXNwYWNl
IEpTQyB7CisKK30gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvQWJzdHJhY3RTbG90VmlzaXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0Fic3RyYWN0U2xvdFZpc2l0b3IuaAkobm9uZXhpc3RlbnQpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9BYnN0cmFjdFNsb3RWaXNpdG9yLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwyMzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkpTQ0pTVmFsdWUuaCIKKyNpbmNs
dWRlICJNYXJrU3RhY2suaCIKKyNpbmNsdWRlICJWaXNpdFJhY2VLZXkuaCIgLy8gbWxhbQorI2lu
Y2x1ZGUgPHd0Zi9TaGFyZWRUYXNrLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgor
CituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgQ29uc2VydmF0aXZlUm9vdHM7CitjbGFzcyBIZWFw
OworY2xhc3MgSGVhcENlbGw7CitjbGFzcyBKU0NlbGw7CitjbGFzcyBNYXJrZWRCbG9jazsKK2Ns
YXNzIE1hcmtpbmdDb25zdHJhaW50OworY2xhc3MgTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXI7Citj
bGFzcyBQcmVjaXNlQWxsb2NhdGlvbjsKK2NsYXNzIFNsb3RWaXNpdG9yOworY2xhc3MgVk07Citj
bGFzcyBWZXJpZmllclNsb3RWaXNpdG9yOwordGVtcGxhdGU8dHlwZW5hbWUgVD4gY2xhc3MgV2Vh
azsKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFRyYWl0cz4gY2xhc3MgV3JpdGVCYXJy
aWVyQmFzZTsKKworY2xhc3MgQWJzdHJhY3RTbG90VmlzaXRvciB7CisgICAgV1RGX01BS0VfTk9O
Q09QWUFCTEUoQWJzdHJhY3RTbG90VmlzaXRvcik7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FU
RUQ7CitwdWJsaWM6CisgICAgY2xhc3MgQ29udGV4dCB7CisgICAgcHVibGljOgorICAgICAgICBD
b250ZXh0KEFic3RyYWN0U2xvdFZpc2l0b3ImLCBIZWFwQ2VsbCopOworICAgICAgICB+Q29udGV4
dCgpOworICAgICAgICBIZWFwQ2VsbCogY2VsbCgpIGNvbnN0IHsgcmV0dXJuIG1fY2VsbDsgfQor
ICAgIHByaXZhdGU6CisgICAgICAgIEFic3RyYWN0U2xvdFZpc2l0b3ImIG1fdmlzaXRvcjsKKyAg
ICAgICAgSGVhcENlbGwqIG1fY2VsbDsKKyAgICAgICAgQ29udGV4dCogbV9wcmV2aW91czsKKyAg
ICB9OworCisgICAgY2xhc3MgU3VwcHJlc3NHQ1ZlcmlmaWVyU2NvcGUgeworICAgIHB1YmxpYzoK
KyAgICAgICAgU3VwcHJlc3NHQ1ZlcmlmaWVyU2NvcGUoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlz
aXRvcikKKyAgICAgICAgICAgIDogbV92aXNpdG9yKHZpc2l0b3IpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKCFtX3Zpc2l0b3IubV9zdXBwcmVzc1ZlcmlmaWVyKTsgLy8g
bWxhbSBGSVhNRSBtYWtlIEFTU0VSVC4KKyAgICAgICAgICAgIG1fdmlzaXRvci5tX3N1cHByZXNz
VmVyaWZpZXIgPSB0cnVlOworICAgICAgICB9CisgICAgICAgIH5TdXBwcmVzc0dDVmVyaWZpZXJT
Y29wZSgpIHsgbV92aXNpdG9yLm1fc3VwcHJlc3NWZXJpZmllciA9IGZhbHNlOyB9CisgICAgcHJp
dmF0ZToKKyAgICAgICAgQWJzdHJhY3RTbG90VmlzaXRvciYgbV92aXNpdG9yOworICAgIH07CisK
KyAgICBlbnVtIFJvb3RNYXJrUmVhc29uIHsKKyAgICAgICAgTm9uZSwKKyAgICAgICAgQ29uc2Vy
dmF0aXZlU2NhbiwKKyAgICAgICAgU3Ryb25nUmVmZXJlbmNlcywKKyAgICAgICAgUHJvdGVjdGVk
VmFsdWVzLAorICAgICAgICBNYXJrTGlzdFNldCwKKyAgICAgICAgVk1FeGNlcHRpb25zLAorICAg
ICAgICBTdHJvbmdIYW5kbGVzLAorICAgICAgICBEZWJ1Z2dlciwKKyAgICAgICAgSklUU3R1YlJv
dXRpbmVzLAorICAgICAgICBXZWFrU2V0cywKKyAgICAgICAgT3V0cHV0LAorICAgICAgICBERkdX
b3JrTGlzdHMsCisgICAgICAgIENvZGVCbG9ja3MsCisgICAgICAgIERPTUdDT3V0cHV0LAorICAg
IH07CisgICAgdXNpbmcgUm9vdE1hcmtSZWFzb25TdG9yYWdlID0gdWludDhfdDsKKworICAgIGNs
YXNzIERlZmF1bHRNYXJraW5nVmlvbGF0aW9uQXNzZXJ0aW9uU2NvcGUgeworICAgIHB1YmxpYzoK
KyAgICAgICAgRGVmYXVsdE1hcmtpbmdWaW9sYXRpb25Bc3NlcnRpb25TY29wZShBYnN0cmFjdFNs
b3RWaXNpdG9yJikgeyB9CisgICAgfTsKKworICAgIHZpcnR1YWwgfkFic3RyYWN0U2xvdFZpc2l0
b3IoKSA9IGRlZmF1bHQ7CisKKyAgICBNYXJrU3RhY2tBcnJheSYgY29sbGVjdG9yTWFya1N0YWNr
KCkgeyByZXR1cm4gbV9jb2xsZWN0b3JTdGFjazsgfQorICAgIE1hcmtTdGFja0FycmF5JiBtdXRh
dG9yTWFya1N0YWNrKCkgeyByZXR1cm4gbV9tdXRhdG9yU3RhY2s7IH0KKyAgICBjb25zdCBNYXJr
U3RhY2tBcnJheSYgY29sbGVjdG9yTWFya1N0YWNrKCkgY29uc3QgeyByZXR1cm4gbV9jb2xsZWN0
b3JTdGFjazsgfQorICAgIGNvbnN0IE1hcmtTdGFja0FycmF5JiBtdXRhdG9yTWFya1N0YWNrKCkg
Y29uc3QgeyByZXR1cm4gbV9tdXRhdG9yU3RhY2s7IH0KKworICAgIGJvb2wgaXNFbXB0eSgpIHsg
cmV0dXJuIG1fY29sbGVjdG9yU3RhY2suaXNFbXB0eSgpICYmIG1fbXV0YXRvclN0YWNrLmlzRW1w
dHkoKTsgfQorCisgICAgVk0mIHZtKCk7CisgICAgY29uc3QgVk0mIHZtKCkgY29uc3Q7CisgICAg
SGVhcCogaGVhcCgpIGNvbnN0OworCisgICAgdmlydHVhbCB2b2lkIGFwcGVuZF9Db25zZXJ2YXRp
dmVSb290cyhjb25zdCBDb25zZXJ2YXRpdmVSb290cyYpID0gMDsKKworICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFQsIHR5cGVuYW1lIFRyYWl0cz4gdm9pZCBhcHBlbmQoY29uc3QgV3JpdGVCYXJyaWVy
QmFzZTxULCBUcmFpdHM+Jik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVHJh
aXRzPiB2b2lkIGFwcGVuZEhpZGRlbihjb25zdCBXcml0ZUJhcnJpZXJCYXNlPFQsIFRyYWl0cz4m
KTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJdGVyYXRvcj4gdm9pZCBhcHBlbmQoSXRlcmF0b3Ig
YmVnaW4gLCBJdGVyYXRvciBlbmQpOworICAgIEFMV0FZU19JTkxJTkUgdm9pZCBhcHBlbmRWYWx1
ZXMoY29uc3QgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duLCBSYXdWYWx1ZVRyYWl0czxVbmtub3du
Pj4qLCBzaXplX3QgY291bnQpOworICAgIEFMV0FZU19JTkxJTkUgdm9pZCBhcHBlbmRWYWx1ZXNI
aWRkZW4oY29uc3QgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duLCBSYXdWYWx1ZVRyYWl0czxVbmtu
b3duPj4qLCBzaXplX3QgY291bnQpOworCisgICAgLy8gVGhlc2UgZG9uJ3QgcmVxdWlyZSB5b3Ug
dG8gcHJvdmUgdGhhdCB5b3UgaGF2ZSBhIFdyaXRlQmFycmllcjw+LiBUaGF0IG1ha2VzIHNlbnNl
CisgICAgLy8gZm9yOgorICAgIC8vCisgICAgLy8gLSByb290cy4KKyAgICAvLyAtIHNvcGhpc3Rp
Y2F0ZWQgZGF0YSBzdHJ1Y3R1cmVzIHRoYXQgYmFycmllciB0aHJvdWdoIG90aGVyIG1lYW5zIChs
aWtlIERGRzo6UGxhbiBhbmQKKyAgICAvLyAgIGZyaWVuZHMpLgorICAgIC8vCisgICAgLy8gSWYg
eW91IGFyZSBub3QgYSByb290IGFuZCB5b3UgZG9uJ3Qga25vdyB3aGF0IGtpbmQgb2YgYmFycmll
ciB5b3UgaGF2ZSwgdGhlbiB5b3UKKyAgICAvLyBzaG91bGRuJ3QgY2FsbCB0aGVzZSBtZXRob2Rz
LgorICAgIEFMV0FZU19JTkxJTkUgdm9pZCBhcHBlbmRVbmJhcnJpZXJlZChKU1ZhbHVlKTsKKyAg
ICBBTFdBWVNfSU5MSU5FIHZvaWQgYXBwZW5kVW5iYXJyaWVyZWQoSlNWYWx1ZSosIHNpemVfdCk7
CisgICAgQUxXQVlTX0lOTElORSB2b2lkIGFwcGVuZFVuYmFycmllcmVkKEpTQ2VsbCogY2VsbCkK
KyAgICB7CisgICAgICAgIGlmICghY2VsbCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
YXBwZW5kVW5iYXJyaWVyZWRJbXBsKGNlbGwpOworICAgIH0KKyAgICB2aXJ0dWFsIHZvaWQgYXBw
ZW5kVW5iYXJyaWVyZWRJbXBsKEpTQ2VsbCopID0gMDsKKworICAgIHZpcnR1YWwgYm9vbCBhZGRP
cGFxdWVSb290KHZvaWQqKSA9IDA7IC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgcm9vdCB3YXMgbmV3
LgorICAgIHZpcnR1YWwgYm9vbCBjb250YWluc09wYXF1ZVJvb3Qodm9pZCopIGNvbnN0ID0gMDsK
KworICAgIHZpcnR1YWwgYm9vbCBpc0ZpcnN0VmlzaXQoKSBjb25zdCA9IDA7IC8vIG1sYW0gRklY
TUUKKworICAgIHZpcnR1YWwgYm9vbCBpc01hcmtlZChjb25zdCB2b2lkKikgY29uc3QgPSAwOwor
ICAgIHZpcnR1YWwgYm9vbCBpc01hcmtlZChNYXJrZWRCbG9jayYsIEhlYXBDZWxsKikgY29uc3Qg
PSAwOworICAgIHZpcnR1YWwgYm9vbCBpc01hcmtlZChQcmVjaXNlQWxsb2NhdGlvbiYsIEhlYXBD
ZWxsKikgY29uc3QgPSAwOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICB2b2lkIGFw
cGVuZChjb25zdCBXZWFrPFQ+JiB3ZWFrKTsKKworICAgIEFMV0FZU19JTkxJTkUgdm9pZCBhcHBl
bmRIaWRkZW5VbmJhcnJpZXJlZChKU1ZhbHVlKTsKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgYXBw
ZW5kSGlkZGVuVW5iYXJyaWVyZWQoSlNDZWxsKiBjZWxsKQorICAgIHsKKyAgICAgICAgaWYgKCFj
ZWxsKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBhcHBlbmRIaWRkZW5VbmJhcnJpZXJl
ZEltcGwoY2VsbCk7CisgICAgfQorICAgIHZpcnR1YWwgdm9pZCBhcHBlbmRIaWRkZW5VbmJhcnJp
ZXJlZEltcGwoSlNDZWxsKikgPSAwOworCisgICAgc2l6ZV90IHZpc2l0Q291bnQoKSBjb25zdCB7
IHJldHVybiBtX3Zpc2l0Q291bnQ7IH0KKworICAgIHZvaWQgYWRkVG9WaXNpdENvdW50KHNpemVf
dCB2YWx1ZSkgeyBtX3Zpc2l0Q291bnQgKz0gdmFsdWU7IH0KKworICAgIHZpcnR1YWwgdm9pZCBh
ZGRQYXJhbGxlbENvbnN0cmFpbnRUYXNrKFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoQWJzdHJhY3RT
bG90VmlzaXRvciYpPj4pID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBtYXJrQXV4aWxpYXJ5KGNv
bnN0IHZvaWQqIGJhc2UpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCByZXBvcnRFeHRyYU1lbW9y
eVZpc2l0ZWQoc2l6ZV90KSA9IDA7CisjaWYgRU5BQkxFKFJFU09VUkNFX1VTQUdFKQorICAgIHZp
cnR1YWwgdm9pZCByZXBvcnRFeHRlcm5hbE1lbW9yeVZpc2l0ZWQoc2l6ZV90KSA9IDA7CisjZW5k
aWYKKworICAgIHZpcnR1YWwgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3QgPSAwOworCisg
ICAgUm9vdE1hcmtSZWFzb24gcm9vdE1hcmtSZWFzb24oKSBjb25zdCB7IHJldHVybiBzdGF0aWNf
Y2FzdDxSb290TWFya1JlYXNvbj4obV9yb290TWFya1JlYXNvbik7IH0KKyAgICB2b2lkIHNldFJv
b3RNYXJrUmVhc29uKFJvb3RNYXJrUmVhc29uIHJlYXNvbikgeyBtX3Jvb3RNYXJrUmVhc29uID0g
cmVhc29uOyB9CisKKyAgICB2aXJ0dWFsIGJvb2wgbXV0YXRvcklzU3RvcHBlZCgpIGNvbnN0ID0g
MDsKKworICAgIHZpcnR1YWwgdm9pZCBkaWRSYWNlKGNvbnN0IFZpc2l0UmFjZUtleSYpID0gMDsK
KyAgICB2b2lkIGRpZFJhY2UoSlNDZWxsKiBjZWxsLCBjb25zdCBjaGFyKiByZWFzb24pIHsgZGlk
UmFjZShWaXNpdFJhY2VLZXkoY2VsbCwgcmVhc29uKSk7IH0KKworICAgIHZpcnR1YWwgdm9pZCB2
aXNpdEFzQ29uc3RyYWludChjb25zdCBKU0NlbGwqKSA9IDA7CisKKyAgICBjb25zdCBjaGFyKiBj
b2RlTmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29kZU5hbWUuZGF0YSgpOyB9CisKK3Byb3RlY3Rl
ZDoKKyAgICBpbmxpbmUgQWJzdHJhY3RTbG90VmlzaXRvcihIZWFwJiwgQ1N0cmluZyBjb2RlTmFt
ZSk7CisKKyAgICBIZWFwQ2VsbCogcGFyZW50Q2VsbCgpIGNvbnN0OworICAgIHZvaWQgcmVzZXQo
KTsKKworICAgIE1hcmtTdGFja0FycmF5IG1fY29sbGVjdG9yU3RhY2s7CisgICAgTWFya1N0YWNr
QXJyYXkgbV9tdXRhdG9yU3RhY2s7CisKKyAgICBzaXplX3QgbV92aXNpdENvdW50IHsgMCB9Owor
CisgICAgSGVhcCYgbV9oZWFwOworICAgIENvbnRleHQqIG1fY29udGV4dCB7IG51bGxwdHIgfTsK
KyAgICBDU3RyaW5nIG1fY29kZU5hbWU7CisKKyAgICBSb290TWFya1JlYXNvblN0b3JhZ2UgbV9y
b290TWFya1JlYXNvbiB7IFJvb3RNYXJrUmVhc29uOjpOb25lIH07CisgICAgYm9vbCBtX3N1cHBy
ZXNzVmVyaWZpZXIgeyBmYWxzZSB9OworCisgICAgTWFya2luZ0NvbnN0cmFpbnQqIG1fY3VycmVu
dENvbnN0cmFpbnQgeyBudWxscHRyIH07CisgICAgTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXIqIG1f
Y3VycmVudFNvbHZlciB7IG51bGxwdHIgfTsKKworICAgIGZyaWVuZCBjbGFzcyBNYXJraW5nQ29u
c3RyYWludFNvbHZlcjsKK307CisKK2NsYXNzIFNldFJvb3RNYXJrUmVhc29uU2NvcGUgeworcHVi
bGljOgorICAgIFNldFJvb3RNYXJrUmVhc29uU2NvcGUoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlz
aXRvciwgQWJzdHJhY3RTbG90VmlzaXRvcjo6Um9vdE1hcmtSZWFzb24gcmVhc29uKQorICAgICAg
ICA6IG1fdmlzaXRvcih2aXNpdG9yKQorICAgICAgICAsIG1fcHJldmlvdXNSZWFzb24odmlzaXRv
ci5yb290TWFya1JlYXNvbigpKQorICAgIHsKKyAgICAgICAgbV92aXNpdG9yLnNldFJvb3RNYXJr
UmVhc29uKHJlYXNvbik7CisgICAgfQorCisgICAgflNldFJvb3RNYXJrUmVhc29uU2NvcGUoKQor
ICAgIHsKKyAgICAgICAgbV92aXNpdG9yLnNldFJvb3RNYXJrUmVhc29uKG1fcHJldmlvdXNSZWFz
b24pOworICAgIH0KKworcHJpdmF0ZToKKyAgICBBYnN0cmFjdFNsb3RWaXNpdG9yJiBtX3Zpc2l0
b3I7CisgICAgQWJzdHJhY3RTbG90VmlzaXRvcjo6Um9vdE1hcmtSZWFzb24gbV9wcmV2aW91c1Jl
YXNvbjsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvQWJzdHJhY3RTbG90VmlzaXRvcklubGluZXMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9BYnN0cmFjdFNsb3RWaXNpdG9ySW5saW5lcy5oCShub25l
eGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Fic3RyYWN0U2xvdFZpc2l0
b3JJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMzYgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1
ZGUgIkFic3RyYWN0U2xvdFZpc2l0b3IuaCIKKyNpbmNsdWRlICJIZWFwLmgiCisjaW5jbHVkZSAi
V2Vha0lubGluZXMuaCIKKyNpbmNsdWRlICJXcml0ZUJhcnJpZXIuaCIKKworbmFtZXNwYWNlIEpT
QyB7CisKK2lubGluZSBBYnN0cmFjdFNsb3RWaXNpdG9yOjpDb250ZXh0OjpDb250ZXh0KEFic3Ry
YWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIEhlYXBDZWxsKiBjZWxsKQorICAgIDogbV92aXNpdG9y
KHZpc2l0b3IpCisgICAgLCBtX2NlbGwoY2VsbCkKK3sKKyAgICBtX3ByZXZpb3VzID0gbV92aXNp
dG9yLm1fY29udGV4dDsKKyAgICBtX3Zpc2l0b3IubV9jb250ZXh0ID0gdGhpczsKK30KKworaW5s
aW5lIEFic3RyYWN0U2xvdFZpc2l0b3I6OkNvbnRleHQ6On5Db250ZXh0KCkKK3sKKyAgICBtX3Zp
c2l0b3IubV9jb250ZXh0ID0gbV9wcmV2aW91czsKK30KKworaW5saW5lIEFic3RyYWN0U2xvdFZp
c2l0b3I6OkFic3RyYWN0U2xvdFZpc2l0b3IoSGVhcCYgaGVhcCwgQ1N0cmluZyBjb2RlTmFtZSkK
KyAgICA6IG1faGVhcChoZWFwKQorICAgICwgbV9jb2RlTmFtZShjb2RlTmFtZSkKK3sKK30KKwor
aW5saW5lIEhlYXAqIEFic3RyYWN0U2xvdFZpc2l0b3I6OmhlYXAoKSBjb25zdAoreworICAgIHJl
dHVybiAmbV9oZWFwOworfQorCitpbmxpbmUgVk0mIEFic3RyYWN0U2xvdFZpc2l0b3I6OnZtKCkK
K3sKKyAgICByZXR1cm4gbV9oZWFwLnZtKCk7Cit9CisKK2lubGluZSBjb25zdCBWTSYgQWJzdHJh
Y3RTbG90VmlzaXRvcjo6dm0oKSBjb25zdAoreworICAgIHJldHVybiBtX2hlYXAudm0oKTsKK30K
KwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK0FMV0FZU19JTkxJTkUgdm9pZCBBYnN0cmFjdFNsb3RW
aXNpdG9yOjphcHBlbmQoY29uc3QgV2VhazxUPiYgd2VhaykKK3sKKyAgICBhcHBlbmRVbmJhcnJp
ZXJlZCh3ZWFrLmdldCgpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVHJh
aXRzPgorQUxXQVlTX0lOTElORSB2b2lkIEFic3RyYWN0U2xvdFZpc2l0b3I6OmFwcGVuZChjb25z
dCBXcml0ZUJhcnJpZXJCYXNlPFQsIFRyYWl0cz4mIHNsb3QpCit7CisgICAgYXBwZW5kVW5iYXJy
aWVyZWQoc2xvdC5nZXQoKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFRy
YWl0cz4KK0FMV0FZU19JTkxJTkUgdm9pZCBBYnN0cmFjdFNsb3RWaXNpdG9yOjphcHBlbmRIaWRk
ZW4oY29uc3QgV3JpdGVCYXJyaWVyQmFzZTxULCBUcmFpdHM+JiBzbG90KQoreworICAgIGFwcGVu
ZEhpZGRlblVuYmFycmllcmVkKHNsb3QuZ2V0KCkpOworfQorCitBTFdBWVNfSU5MSU5FIHZvaWQg
QWJzdHJhY3RTbG90VmlzaXRvcjo6YXBwZW5kSGlkZGVuVW5iYXJyaWVyZWQoSlNWYWx1ZSB2YWx1
ZSkKK3sKKyAgICBpZiAodmFsdWUuaXNDZWxsKCkpCisgICAgICAgIGFwcGVuZEhpZGRlblVuYmFy
cmllcmVkKHZhbHVlLmFzQ2VsbCgpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgSXRlcmF0b3I+
CitBTFdBWVNfSU5MSU5FIHZvaWQgQWJzdHJhY3RTbG90VmlzaXRvcjo6YXBwZW5kKEl0ZXJhdG9y
IGJlZ2luLCBJdGVyYXRvciBlbmQpCit7CisgICAgZm9yIChhdXRvIGl0ID0gYmVnaW47IGl0ICE9
IGVuZDsgKytpdCkKKyAgICAgICAgYXBwZW5kKCppdCk7Cit9CisKK0FMV0FZU19JTkxJTkUgdm9p
ZCBBYnN0cmFjdFNsb3RWaXNpdG9yOjphcHBlbmRWYWx1ZXMoY29uc3QgV3JpdGVCYXJyaWVyQmFz
ZTxVbmtub3duPiogYmFycmllcnMsIHNpemVfdCBjb3VudCkKK3sKKyAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGNvdW50OyArK2kpCisgICAgICAgIGFwcGVuZChiYXJyaWVyc1tpXSk7Cit9CisK
K0FMV0FZU19JTkxJTkUgdm9pZCBBYnN0cmFjdFNsb3RWaXNpdG9yOjphcHBlbmRWYWx1ZXNIaWRk
ZW4oY29uc3QgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiogYmFycmllcnMsIHNpemVfdCBjb3Vu
dCkKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpCisgICAgICAgIGFw
cGVuZEhpZGRlbihiYXJyaWVyc1tpXSk7Cit9CisKK0FMV0FZU19JTkxJTkUgdm9pZCBBYnN0cmFj
dFNsb3RWaXNpdG9yOjphcHBlbmRVbmJhcnJpZXJlZChKU1ZhbHVlIHZhbHVlKQoreworICAgIGlm
ICh2YWx1ZS5pc0NlbGwoKSkKKyAgICAgICAgYXBwZW5kVW5iYXJyaWVyZWQodmFsdWUuYXNDZWxs
KCkpOworfQorCitBTFdBWVNfSU5MSU5FIHZvaWQgQWJzdHJhY3RTbG90VmlzaXRvcjo6YXBwZW5k
VW5iYXJyaWVyZWQoSlNWYWx1ZSogc2xvdCwgc2l6ZV90IGNvdW50KQoreworICAgIGZvciAoc2l6
ZV90IGkgPSBjb3VudDsgaS0tOykKKyAgICAgICAgYXBwZW5kVW5iYXJyaWVyZWQoc2xvdFtpXSk7
Cit9CisKK0FMV0FZU19JTkxJTkUgSGVhcENlbGwqIEFic3RyYWN0U2xvdFZpc2l0b3I6OnBhcmVu
dENlbGwoKSBjb25zdAoreworICAgIGlmICghbV9jb250ZXh0KQorICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKyAgICByZXR1cm4gbV9jb250ZXh0LT5jZWxsKCk7Cit9CisKK0FMV0FZU19JTkxJTkUg
dm9pZCBBYnN0cmFjdFNsb3RWaXNpdG9yOjpyZXNldCgpCit7CisgICAgbV92aXNpdENvdW50ID0g
MDsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9IYW5kbGVTZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0hhbmRsZVNldC5jcHAJKHJldmlzaW9uIDI3MjcxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0hhbmRsZVNldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU2LDcgKzU2LDkgQEAg
dm9pZCBIYW5kbGVTZXQ6Omdyb3coKQogICAgIH0KIH0KIAotdm9pZCBIYW5kbGVTZXQ6OnZpc2l0
U3Ryb25nSGFuZGxlcyhTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vdGVtcGxhdGU8dHlwZW5hbWUg
VmlzaXRvcj4KKy8vdm9pZCBIYW5kbGVTZXQ6OnZpc2l0U3Ryb25nSGFuZGxlcyhWaXNpdG9yJiB2
aXNpdG9yKQordm9pZCBIYW5kbGVTZXQ6OnZpc2l0U3Ryb25nSGFuZGxlczEoQWJzdHJhY3RTbG90
VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBOb2RlKiBlbmQgPSBtX3N0cm9uZ0xpc3QuZW5kKCk7
CiAgICAgZm9yIChOb2RlKiBub2RlID0gbV9zdHJvbmdMaXN0LmJlZ2luKCk7IG5vZGUgIT0gZW5k
OyBub2RlID0gbm9kZS0+bmV4dCgpKSB7CkBAIC02Nyw2ICs2OSw5IEBAIHZvaWQgSGFuZGxlU2V0
Ojp2aXNpdFN0cm9uZ0hhbmRsZXMoU2xvdFYKICAgICB9CiB9CiAKKy8vdGVtcGxhdGUgdm9pZCBI
YW5kbGVTZXQ6OnZpc2l0U3Ryb25nSGFuZGxlcyhTbG90VmlzaXRvciYpOworLy90ZW1wbGF0ZSB2
b2lkIEhhbmRsZVNldDo6dmlzaXRTdHJvbmdIYW5kbGVzKFZlcmlmaWVyU2xvdFZpc2l0b3ImKTsK
Kwogdm9pZCBIYW5kbGVTZXQ6OndyaXRlQmFycmllcihIYW5kbGVTbG90IHNsb3QsIGNvbnN0IEpT
VmFsdWUmIHZhbHVlKQogewogICAgIGlmICghdmFsdWUgPT0gISpzbG90ICYmIHNsb3QtPmlzQ2Vs
bCgpID09IHZhbHVlLmlzQ2VsbCgpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
SGFuZGxlU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGFu
ZGxlU2V0LmgJKHJldmlzaW9uIDI3MjcxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0hhbmRsZVNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSwxMCArMzUsMTEgQEAKIAogbmFtZXNw
YWNlIEpTQyB7CiAKK2NsYXNzIEFic3RyYWN0U2xvdFZpc2l0b3I7CiBjbGFzcyBIYW5kbGVTZXQ7
CiBjbGFzcyBWTTsKIGNsYXNzIEpTVmFsdWU7Ci1jbGFzcyBTbG90VmlzaXRvcjsKKy8vY2xhc3Mg
U2xvdFZpc2l0b3I7CiAKIGNsYXNzIEhhbmRsZU5vZGUgewogcHVibGljOgpAQCAtNzMsNyArNzQs
OCBAQCBwdWJsaWM6CiAgICAgSGFuZGxlU2xvdCBhbGxvY2F0ZSgpOwogICAgIHZvaWQgZGVhbGxv
Y2F0ZShIYW5kbGVTbG90KTsKIAotICAgIHZvaWQgdmlzaXRTdHJvbmdIYW5kbGVzKFNsb3RWaXNp
dG9yJik7CisvLyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIHZpc2l0U3Ryb25n
SGFuZGxlcyhWaXNpdG9yJik7CisgICAgdm9pZCB2aXNpdFN0cm9uZ0hhbmRsZXMxKEFic3RyYWN0
U2xvdFZpc2l0b3ImKTsKIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgd3JpdGVCYXJyaWVy
KEhhbmRsZVNsb3QsIGNvbnN0IEpTVmFsdWUmKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvSGVhcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvSGVhcC5jcHAJKHJldmlzaW9uIDI3MjcxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0hlYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Miw2ICs3Miw3IEBACiAjaW5jbHVkZSAi
VHlwZVByb2ZpbGVyLmgiCiAjaW5jbHVkZSAiVHlwZVByb2ZpbGVyTG9nLmgiCiAjaW5jbHVkZSAi
Vk0uaCIKKyNpbmNsdWRlICJWZXJpZmllclNsb3RWaXNpdG9ySW5saW5lcy5oIgogI2luY2x1ZGUg
IldlYWtNYXBJbXBsSW5saW5lcy5oIgogI2luY2x1ZGUgIldlYWtTZXRJbmxpbmVzLmgiCiAjaW5j
bHVkZSA8YWxnb3JpdGhtPgpAQCAtOTYsNiArOTcsOSBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAor
dW5zaWduZWQgbWxhbVRpbWUgPSAwOworYm9vbCBtbGFtVmVyYm9zZSA9IGZhbHNlOworCiBuYW1l
c3BhY2UgewogCiBzdGF0aWMgY29uc3RleHByIGJvb2wgdmVyYm9zZVN0b3AgPSBmYWxzZTsKQEAg
LTMwNCw2ICszMDgsNyBAQCBIZWFwOjpIZWFwKFZNJiB2bSwgSGVhcFR5cGUgaGVhcFR5cGUpCiAg
ICAgLCBtX3RocmVhZExvY2soQm94PExvY2s+OjpjcmVhdGUoKSkKICAgICAsIG1fdGhyZWFkQ29u
ZGl0aW9uKEF1dG9tYXRpY1RocmVhZENvbmRpdGlvbjo6Y3JlYXRlKCkpCiB7CisgICAgbWxhbVZl
cmJvc2UgPSBnZXRlbnYoIm1sYW1WZXJib3NlIik7CiAgICAgbV93b3JsZFN0YXRlLnN0b3JlKDAp
OwogCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMCwgbnVtYmVyT2ZQYXJhbGxlbFRocmVhZHMgPSBo
ZWFwSGVscGVyUG9vbCgpLm51bWJlck9mVGhyZWFkcygpOyBpIDwgbnVtYmVyT2ZQYXJhbGxlbFRo
cmVhZHM7ICsraSkgewpAQCAtNjQ0LDE4ICs2NDksMTggQEAgdm9pZCBIZWFwOjpjb21wbGV0ZUFs
bEpJVFBsYW5zKCkKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KLXZvaWQgSGVhcDo6aXRl
cmF0ZUV4ZWN1dGluZ0FuZENvbXBpbGluZ0NvZGVCbG9ja3MoY29uc3QgRnVuYyYgZnVuYykKK3Zv
aWQgSGVhcDo6aXRlcmF0ZUV4ZWN1dGluZ0FuZENvbXBpbGluZ0NvZGVCbG9ja3MoQWJzdHJhY3RT
bG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgRnVuYyYgZnVuYykKIHsKICAgICBtX2NvZGVCbG9j
a3MtPml0ZXJhdGVDdXJyZW50bHlFeGVjdXRpbmcoZnVuYyk7CiAgICAgaWYgKE9wdGlvbnM6OnVz
ZUpJVCgpKQotICAgICAgICBERkc6Oml0ZXJhdGVDb2RlQmxvY2tzRm9yR0MobV92bSwgZnVuYyk7
CisgICAgICAgIERGRzo6aXRlcmF0ZUNvZGVCbG9ja3NGb3JHQyh2aXNpdG9yLCBtX3ZtLCBmdW5j
KTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KLXZvaWQgSGVhcDo6aXRlcmF0ZUV4ZWN1
dGluZ0FuZENvbXBpbGluZ0NvZGVCbG9ja3NXaXRob3V0SG9sZGluZ0xvY2tzKGNvbnN0IEZ1bmMm
IGZ1bmMpCit2b2lkIEhlYXA6Oml0ZXJhdGVFeGVjdXRpbmdBbmRDb21waWxpbmdDb2RlQmxvY2tz
V2l0aG91dEhvbGRpbmdMb2NrcyhBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBG
dW5jJiBmdW5jKQogewogICAgIFZlY3RvcjxDb2RlQmxvY2sqLCAyNTY+IGNvZGVCbG9ja3M7Ci0g
ICAgaXRlcmF0ZUV4ZWN1dGluZ0FuZENvbXBpbGluZ0NvZGVCbG9ja3MoCisgICAgaXRlcmF0ZUV4
ZWN1dGluZ0FuZENvbXBpbGluZ0NvZGVCbG9ja3ModmlzaXRvciwKICAgICAgICAgWyZdIChDb2Rl
QmxvY2sqIGNvZGVCbG9jaykgewogICAgICAgICAgICAgY29kZUJsb2Nrcy5hcHBlbmQoY29kZUJs
b2NrKTsKICAgICAgICAgfSk7CkBAIC03MzMsMTMgKzczOCwyMSBAQCB2b2lkIEhlYXA6OnJlbW92
ZURlYWRDb21waWxlcldvcmtsaXN0RW50CiAjZW5kaWYKIH0KIAotYm9vbCBIZWFwOjppc0FuYWx5
emluZ0hlYXAoKSBjb25zdAotewotICAgIEhlYXBQcm9maWxlciogaGVhcFByb2ZpbGVyID0gbV92
bS5oZWFwUHJvZmlsZXIoKTsKLSAgICBpZiAoVU5MSUtFTFkoaGVhcFByb2ZpbGVyKSkKLSAgICAg
ICAgcmV0dXJuIGhlYXBQcm9maWxlci0+YWN0aXZlSGVhcEFuYWx5emVyKCk7Ci0gICAgcmV0dXJu
IGZhbHNlOwotfQorLy9ib29sIEhlYXA6OmlzQW5hbHl6aW5nSGVhcCgpIGNvbnN0CisvL3sKKy8v
ICAgIEhlYXBQcm9maWxlciogaGVhcFByb2ZpbGVyID0gbV92bS5oZWFwUHJvZmlsZXIoKTsKKy8v
ICAgIGlmIChVTkxJS0VMWShoZWFwUHJvZmlsZXIpKQorLy8gICAgICAgIHJldHVybiBoZWFwUHJv
ZmlsZXItPmFjdGl2ZUhlYXBBbmFseXplcigpOworLy8gICAgcmV0dXJuIGZhbHNlOworLy99CisK
Ky8vSGVhcEFuYWx5emVyKiBIZWFwOjpoZWFwQW5hbHl6ZXIoKSBjb25zdAorLy97CisvLyAgICBI
ZWFwUHJvZmlsZXIqIGhlYXBQcm9maWxlciA9IG1fdm0uaGVhcFByb2ZpbGVyKCk7CisvLyAgICBp
ZiAoVU5MSUtFTFkoaGVhcFByb2ZpbGVyKSkKKy8vICAgICAgICByZXR1cm4gaGVhcFByb2ZpbGVy
LT5hY3RpdmVIZWFwQW5hbHl6ZXIoKTsKKy8vICAgIHJldHVybiBudWxscHRyOworLy99CiAKIHN0
cnVjdCBHYXRoZXJFeHRyYUhlYXBEYXRhIDogTWFya2VkQmxvY2s6OkNvdW50RnVuY3RvciB7CiAg
ICAgR2F0aGVyRXh0cmFIZWFwRGF0YShWTSYgdm0sIEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCkBA
IC0xMDM1LDYgKzEwNDgsNyBAQCB2b2lkIEhlYXA6OmFkZFRvUmVtZW1iZXJlZFNldChjb25zdCBK
U0NlCiAgICAgLy8gZ2V0IHNjYW5uZWQgYWdhaW4uIElmIHdlIGxvc2UgdGhlbiBzb21lb25lIGVs
c2Ugd2lsbCBiYXJyaWVyIHRoZSBvYmplY3QgYWdhaW4uIFRoYXQgd291bGQKICAgICAvLyBiZSB1
bmZvcnR1bmF0ZSBidXQgbm90IHRoZSBlbmQgb2YgdGhlIHdvcmxkLgogICAgIGNlbGwtPnNldENl
bGxTdGF0ZShDZWxsU3RhdGU6OlBvc3NpYmx5R3JleSk7CisgICAgaWYgKG1sYW1WZXJib3NlKSBk
YXRhTG9nTG4oIiAgICBtbGFtIEhlYXA6OmFkZFRvUmVtZW1iZXJlZFNldCgpIG1fbXV0YXRvck1h
cmtTdGFjay0+YXBwZW5kKGNlbGwpOiBjZWxsICIsIFJhd1BvaW50ZXIoY2VsbCkpOwogICAgIG1f
bXV0YXRvck1hcmtTdGFjay0+YXBwZW5kKGNlbGwpOwogfQogCkBAIC0xMjQ1LDYgKzEyNTksOCBA
QCBORVZFUl9JTkxJTkUgYm9vbCBIZWFwOjpydW5Ob3RSdW5uaW5nUGhhCiAKIE5FVkVSX0lOTElO
RSBib29sIEhlYXA6OnJ1bkJlZ2luUGhhc2UoR0NDb25kdWN0b3IgY29ubikKIHsKKyAgICBtbGFt
VGltZSsrOworICAgIGlmIChtbGFtVmVyYm9zZSkgZGF0YUxvZ0xuKCIgICAgbWxhbSA8Z2MjIiwg
bWxhbVRpbWUsICI+IEhlYXA6OnJ1bkJlZ2luUGhhc2UoKSBoZWFwLm1fbXV0YXRvck1hcmtTdGFj
ay0+c2l6ZSgpICIsIG1fbXV0YXRvck1hcmtTdGFjay0+c2l6ZSgpLCAiIG1fcmFjZU1hcmtTdGFj
ay0+c2l6ZSgpICIsIG1fcmFjZU1hcmtTdGFjay0+c2l6ZSgpKTsKICAgICBtX2N1cnJlbnRHQ1N0
YXJ0VGltZSA9IE1vbm90b25pY1RpbWU6Om5vdygpOwogICAgIAogICAgIHsKQEAgLTEzNDYsNiAr
MTM2Miw3IEBAIE5FVkVSX0lOTElORSBib29sIEhlYXA6OnJ1bkJlZ2luUGhhc2UoR0MKIAogTkVW
RVJfSU5MSU5FIGJvb2wgSGVhcDo6cnVuRml4cG9pbnRQaGFzZShHQ0NvbmR1Y3RvciBjb25uKQog
eworICAgIGlmIChtbGFtVmVyYm9zZSkgZGF0YUxvZ0xuKCIgICAgbWxhbSBIZWFwOjpydW5GaXhw
b2ludFBoYXNlKCkgaGVhcC5tX211dGF0b3JNYXJrU3RhY2stPnNpemUoKSAiLCBtX211dGF0b3JN
YXJrU3RhY2stPnNpemUoKSwgIiBtX3JhY2VNYXJrU3RhY2stPnNpemUoKSAiLCBtX3JhY2VNYXJr
U3RhY2stPnNpemUoKSk7CiAgICAgUkVMRUFTRV9BU1NFUlQoY29ubiA9PSBHQ0NvbmR1Y3Rvcjo6
Q29sbGVjdG9yIHx8IG1fY3VycmVudFRocmVhZFN0YXRlKTsKICAgICAKICAgICBTbG90VmlzaXRv
ciYgc2xvdFZpc2l0b3IgPSAqbV9jb2xsZWN0b3JTbG90VmlzaXRvcjsKQEAgLTE0MTMsNyArMTQz
MCw3IEBAIE5FVkVSX0lOTElORSBib29sIEhlYXA6OnJ1bkZpeHBvaW50UGhhc2UKICAgICAvLyBU
aGlzIGRvZXNuJ3QgaGF2ZSB0byBjaGVjayB0aGUgbXV0YXRvciBTbG90VmlzaXRvciBiZWNhdXNl
IHRoYXQgb25lIGJlY29tZXMgZW1wdHkgYWZ0ZXIgZXZlcnkgR0MKICAgICAvLyB3b3JrIGluY3Jl
bWVudCwgc28gaXQgbXVzdCBiZSBlbXB0eSBub3cuCiAgICAgaWYgKHNsb3RWaXNpdG9yLmRpZFJl
YWNoVGVybWluYXRpb24oKSkKLSAgICAgICAgcmV0dXJuIHRydWU7IC8vIFRoaXMgaXMgbGlrZSBy
ZWxvb3BpbmcgdG8gdGhlIHRvcCBpZiBydW5GaXhwb2ludFBoYXNlKCkuCisgICAgICAgIHJldHVy
biB0cnVlOyAvLyBUaGlzIGlzIGxpa2UgcmVsb29waW5nIHRvIHRoZSB0b3Agb2YgcnVuRml4cG9p
bnRQaGFzZSgpLgogICAgICAgICAKICAgICBpZiAoIW1fc2NoZWR1bGVyLT5zaG91bGRSZXN1bWUo
KSkKICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0xNDM0LDYgKzE0NTEsNyBAQCBORVZFUl9JTkxJ
TkUgYm9vbCBIZWFwOjpydW5GaXhwb2ludFBoYXNlCiAKIE5FVkVSX0lOTElORSBib29sIEhlYXA6
OnJ1bkNvbmN1cnJlbnRQaGFzZShHQ0NvbmR1Y3RvciBjb25uKQogeworICAgIGlmIChtbGFtVmVy
Ym9zZSkgZGF0YUxvZ0xuKCIgICAgbWxhbSBIZWFwOjpydW5Db25jdXJyZW50UGhhc2UoKSBoZWFw
Lm1fbXV0YXRvck1hcmtTdGFjay0+c2l6ZSgpICIsIG1fbXV0YXRvck1hcmtTdGFjay0+c2l6ZSgp
LCAiIG1fcmFjZU1hcmtTdGFjay0+c2l6ZSgpICIsIG1fcmFjZU1hcmtTdGFjay0+c2l6ZSgpKTsK
ICAgICBTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IgPSAqbV9jb2xsZWN0b3JTbG90VmlzaXRvcjsK
IAogICAgIHN3aXRjaCAoY29ubikgewpAQCAtMTQ2NCw2ICsxNDgyLDcgQEAgTkVWRVJfSU5MSU5F
IGJvb2wgSGVhcDo6cnVuQ29uY3VycmVudFBoYQogCiBORVZFUl9JTkxJTkUgYm9vbCBIZWFwOjpy
dW5SZWxvb3BQaGFzZShHQ0NvbmR1Y3RvciBjb25uKQogeworICAgIGlmIChtbGFtVmVyYm9zZSkg
ZGF0YUxvZ0xuKCIgICAgbWxhbSBIZWFwOjpydW5SZWxvb3BQaGFzZSgpIGhlYXAubV9tdXRhdG9y
TWFya1N0YWNrLT5zaXplKCkgIiwgbV9tdXRhdG9yTWFya1N0YWNrLT5zaXplKCksICIgbV9yYWNl
TWFya1N0YWNrLT5zaXplKCkgIiwgbV9yYWNlTWFya1N0YWNrLT5zaXplKCkpOwogICAgIGRhdGFM
b2dJZihPcHRpb25zOjpsb2dHQygpLCAiW0dDPCIsIFJhd1BvaW50ZXIodGhpcyksICI+OiAiLCBn
Y0NvbmR1Y3RvclNob3J0TmFtZShjb25uKSwgIiAiKTsKICAgICAKICAgICBtX3NjaGVkdWxlci0+
ZGlkU3RvcCgpOwpAQCAtMTQ3Niw3ICsxNDk1LDkgQEAgTkVWRVJfSU5MSU5FIGJvb2wgSGVhcDo6
cnVuUmVsb29wUGhhc2UoRwogCiBORVZFUl9JTkxJTkUgYm9vbCBIZWFwOjpydW5FbmRQaGFzZShH
Q0NvbmR1Y3RvciBjb25uKQogeworICAgIGlmIChtbGFtVmVyYm9zZSkgZGF0YUxvZ0xuKCIgICAg
bWxhbSBIZWFwOjpydW5FbmRQaGFzZSgpIGhlYXAubV9tdXRhdG9yTWFya1N0YWNrLT5zaXplKCkg
IiwgbV9tdXRhdG9yTWFya1N0YWNrLT5zaXplKCksICIgbV9yYWNlTWFya1N0YWNrLT5zaXplKCkg
IiwgbV9yYWNlTWFya1N0YWNrLT5zaXplKCkpOwogICAgIG1fc2NoZWR1bGVyLT5lbmRDb2xsZWN0
aW9uKCk7CisgICAgaWYgKG1sYW1WZXJib3NlKSBkYXRhTG9nTG4oIiAgICBtbGFtIEhlYXA6OnJ1
bkVuZFBoYXNlKCkgU1RFUCAxOiBoZWFwLm1fbXV0YXRvck1hcmtTdGFjay0+c2l6ZSgpICIsIG1f
bXV0YXRvck1hcmtTdGFjay0+c2l6ZSgpLCAiIG1fcmFjZU1hcmtTdGFjay0+c2l6ZSgpICIsIG1f
cmFjZU1hcmtTdGFjay0+c2l6ZSgpKTsKICAgICAgICAgCiAgICAgewogICAgICAgICBhdXRvIGxv
Y2tlciA9IGhvbGRMb2NrKG1fbWFya2luZ011dGV4KTsKQEAgLTE0ODQsMTQgKzE1MDUsMjcgQEAg
TkVWRVJfSU5MSU5FIGJvb2wgSGVhcDo6cnVuRW5kUGhhc2UoR0NDbwogICAgICAgICBtX21hcmtp
bmdDb25kaXRpb25WYXJpYWJsZS5ub3RpZnlBbGwoKTsKICAgICB9CiAgICAgbV9oZWxwZXJDbGll
bnQuZmluaXNoKCk7CisgICAgaWYgKG1sYW1WZXJib3NlKSBkYXRhTG9nTG4oIiAgICBtbGFtIEhl
YXA6OnJ1bkVuZFBoYXNlKCkgU1RFUCAyOiBoZWFwLm1fbXV0YXRvck1hcmtTdGFjay0+c2l6ZSgp
ICIsIG1fbXV0YXRvck1hcmtTdGFjay0+c2l6ZSgpLCAiIG1fcmFjZU1hcmtTdGFjay0+c2l6ZSgp
ICIsIG1fcmFjZU1hcmtTdGFjay0+c2l6ZSgpKTsKICAgICAKLSAgICBpdGVyYXRlRXhlY3V0aW5n
QW5kQ29tcGlsaW5nQ29kZUJsb2NrcygKKyAgICBSRUxFQVNFX0FTU0VSVChtX211dGF0b3JNYXJr
U3RhY2stPmlzRW1wdHkoKSk7IC8vIG1sYW0gTWFrZSBpbnRvIEFTU0VSVAorICAgIFJFTEVBU0Vf
QVNTRVJUKG1fcmFjZU1hcmtTdGFjay0+aXNFbXB0eSgpKTsgLy8gbWxhbSBNYWtlIGludG8gQVNT
RVJUCisKKyAgICBTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IgPSAqbV9jb2xsZWN0b3JTbG90Vmlz
aXRvcjsKKyAgICBpdGVyYXRlRXhlY3V0aW5nQW5kQ29tcGlsaW5nQ29kZUJsb2NrcyhzbG90Vmlz
aXRvciwKICAgICAgICAgWyZdIChDb2RlQmxvY2sqIGNvZGVCbG9jaykgewogICAgICAgICAgICAg
d3JpdGVCYXJyaWVyKGNvZGVCbG9jayk7CiAgICAgICAgIH0pOwotICAgICAgICAKKyAgICBpZiAo
bWxhbVZlcmJvc2UpIGRhdGFMb2dMbigiICAgIG1sYW0gSGVhcDo6cnVuRW5kUGhhc2UoKSBTVEVQ
IDM6IGhlYXAubV9tdXRhdG9yTWFya1N0YWNrLT5zaXplKCkgIiwgbV9tdXRhdG9yTWFya1N0YWNr
LT5zaXplKCksICIgbV9yYWNlTWFya1N0YWNrLT5zaXplKCkgIiwgbV9yYWNlTWFya1N0YWNrLT5z
aXplKCkpOworCiAgICAgdXBkYXRlT2JqZWN0Q291bnRzKCk7CisgICAgaWYgKG1sYW1WZXJib3Nl
KSBkYXRhTG9nTG4oIiAgICBtbGFtIEhlYXA6OnJ1bkVuZFBoYXNlKCkgU1RFUCA0OiBoZWFwLm1f
bXV0YXRvck1hcmtTdGFjay0+c2l6ZSgpICIsIG1fbXV0YXRvck1hcmtTdGFjay0+c2l6ZSgpLCAi
IG1fcmFjZU1hcmtTdGFjay0+c2l6ZSgpICIsIG1fcmFjZU1hcmtTdGFjay0+c2l6ZSgpKTsKICAg
ICBlbmRNYXJraW5nKCk7CisgICAgaWYgKG1sYW1WZXJib3NlKSBkYXRhTG9nTG4oIiAgICBtbGFt
IEhlYXA6OnJ1bkVuZFBoYXNlKCkgQkVGT1JFIHZlcmlmeUdDOiBoZWFwLm1fbXV0YXRvck1hcmtT
dGFjay0+c2l6ZSgpICIsIG1fbXV0YXRvck1hcmtTdGFjay0+c2l6ZSgpLCAiIG1fcmFjZU1hcmtT
dGFjay0+c2l6ZSgpICIsIG1fcmFjZU1hcmtTdGFjay0+c2l6ZSgpKTsKKworICAgIC8vIG1sYW0K
KyAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6dmVyaWZ5R0MoKSkpCisgICAgICAgIHZlcmlmeUdD
KCk7CisgICAgLy8gbWxhbSAqLwogCiAgICAgaWYgKFVOTElLRUxZKG1fdmVyaWZpZXIpKSB7CiAg
ICAgICAgIG1fdmVyaWZpZXItPmdhdGhlckxpdmVDZWxscyhIZWFwVmVyaWZpZXI6OlBoYXNlOjpB
ZnRlck1hcmtpbmcpOwpAQCAtMTY0Nyw3ICsxNjgxLDcgQEAgdm9pZCBIZWFwOjpzdG9wVGhlUGVy
aXBoZXJ5KEdDQ29uZHVjdG9yIAogI2lmIEVOQUJMRShKSVQpCiAgICAgaWYgKE9wdGlvbnM6OnVz
ZUpJVCgpKSB7CiAgICAgICAgIERlZmVyR0NGb3JBV2hpbGUgYXdoaWxlKCp0aGlzKTsKLSAgICAg
ICAgaWYgKEpJVFdvcmtsaXN0OjplbnN1cmVHbG9iYWxXb3JrbGlzdCgpLmNvbXBsZXRlQWxsRm9y
Vk0obV92bSkKKyAgICAgICAgaWYgKEpJVFdvcmtsaXN0OjplbnN1cmVHbG9iYWxXb3JrbGlzdCgp
LmNvbXBsZXRlQWxsRm9yVk0obV92bSwgbV9jb2xsZWN0b3JTbG90VmlzaXRvci5nZXQoKSkKICAg
ICAgICAgICAgICYmIGNvbm4gPT0gR0NDb25kdWN0b3I6OkNvbGxlY3RvcikKICAgICAgICAgICAg
IHNldEdDRGlkSklUKCk7CiAgICAgfQpAQCAtMjE3MCw2ICsyMjA0LDEzIEBAIHZvaWQgSGVhcDo6
c3VzcGVuZENvbXBpbGVyVGhyZWFkcygpCiAKIHZvaWQgSGVhcDo6d2lsbFN0YXJ0Q29sbGVjdGlv
bigpCiB7CisgICAgLy8gbWxhbQorICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjp2ZXJpZnlHQygp
KSkgeworICAgICAgICBtX3ZlcmlmaWVyU2xvdFZpc2l0b3IgPSBtYWtlVW5pcXVlPFZlcmlmaWVy
U2xvdFZpc2l0b3I+KCp0aGlzKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoIW1faXNWZXJpZnlp
bmdHQyk7IC8vIG1sYW0gVEVTVCBzYW5pdHkgY2hlY2suCisgICAgfQorICAgIC8vIG1sYW0gKi8K
KwogICAgIGRhdGFMb2dJZihPcHRpb25zOjpsb2dHQygpLCAiPT4gIik7CiAgICAgCiAgICAgaWYg
KHNob3VsZERvRnVsbENvbGxlY3Rpb24oKSkgewpAQCAtMjY5NywxMyArMjczOCwxOSBAQCB2b2lk
IEhlYXA6OmRpZEZyZWVCbG9jayhzaXplX3QgY2FwYWNpdHkpCiAjZW5kaWYKIH0KIAorLy8gbWxh
bSBGSVhNRQogdm9pZCBIZWFwOjphZGRDb3JlQ29uc3RyYWludHMoKQogewogICAgIG1fY29uc3Ry
YWludFNldC0+YWRkKAogICAgICAgICAiQ3MiLCAiQ29uc2VydmF0aXZlIFNjYW4iLAotICAgICAg
ICBbdGhpcywgbGFzdFZlcnNpb24gPSBzdGF0aWNfY2FzdDx1aW50NjRfdD4oMCldIChTbG90Vmlz
aXRvciYgc2xvdFZpc2l0b3IpIG11dGFibGUgeworICAgICAgICBbdGhpcywgbGFzdFZlcnNpb24g
PSBzdGF0aWNfY2FzdDx1aW50NjRfdD4oMCldIChBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9y
KSBtdXRhYmxlIHsKICAgICAgICAgICAgIGJvb2wgc2hvdWxkTm90UHJvZHVjZVdvcmsgPSBsYXN0
VmVyc2lvbiA9PSBtX3BoYXNlVmVyc2lvbjsKLSAgICAgICAgICAgIGlmIChzaG91bGROb3RQcm9k
dWNlV29yaykKKworICAgICAgICAgICAgLy8gRm9yIHRoZSBHQyBWZXJmaWVyLCB3ZSB3b3VsZCBs
aWtlIHRvIHVzZSB0aGUgaWRlbnRpY2FsIHNldCBvZiBjb25zZXJ2YXRpdmUgcm9vdHMKKyAgICAg
ICAgICAgIC8vIGFzIHRoZSByZWFsIEdDLiBPdGhlcndpc2UsIHRoZSBHQyB2ZXJpZmllciBtYXkg
cmVwb3J0IGZhbHNlIG5lZ2F0aXZlcyBkdWUgdG8KKyAgICAgICAgICAgIC8vIHZhcmlhdGlvbnMg
aW4gc3RhY2sgdmFsdWVzLiBGb3IgdGhpcyBzYW1lIHJlYXNvbiwgd2Ugd2lsbCBza2lwIHRoaXMg
Y29uc3RyYWludAorICAgICAgICAgICAgLy8gd2hlbiB3ZSdyZSBydW5uaW5nIHRoZSBHQyB2ZXJp
ZmljYXRpb24gaW4gdGhlIEVuZCBwaGFzZS4KKyAgICAgICAgICAgIGlmIChzaG91bGROb3RQcm9k
dWNlV29yayB8fCBtX2lzVmVyaWZ5aW5nR0MpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICAgICAgCiAgICAgICAgICAgICBUaW1pbmdTY29wZSBwcmVDb252ZXJnZW5jZVRpbWluZ1Nj
b3BlKCp0aGlzLCAiQ29uc3RyYWludDogY29uc2VydmF0aXZlIHNjYW4iKTsKQEAgLTI3MTgsMTMg
KzI3NjUsMTcgQEAgdm9pZCBIZWFwOjphZGRDb3JlQ29uc3RyYWludHMoKQogICAgICAgICAgICAg
ICAgIGdhdGhlckpTU3RhY2tSb290cyhjb25zZXJ2YXRpdmVSb290cyk7CiAgICAgICAgICAgICAg
ICAgZ2F0aGVyU2NyYXRjaEJ1ZmZlclJvb3RzKGNvbnNlcnZhdGl2ZVJvb3RzKTsKIAotICAgICAg
ICAgICAgICAgIFNldFJvb3RNYXJrUmVhc29uU2NvcGUgcm9vdFNjb3BlKHNsb3RWaXNpdG9yLCBT
bG90VmlzaXRvcjo6Um9vdE1hcmtSZWFzb246OkNvbnNlcnZhdGl2ZVNjYW4pOwotICAgICAgICAg
ICAgICAgIHNsb3RWaXNpdG9yLmFwcGVuZChjb25zZXJ2YXRpdmVSb290cyk7CisgICAgICAgICAg
ICAgICAgU2V0Um9vdE1hcmtSZWFzb25TY29wZSByb290U2NvcGUodmlzaXRvciwgQWJzdHJhY3RT
bG90VmlzaXRvcjo6Um9vdE1hcmtSZWFzb246OkNvbnNlcnZhdGl2ZVNjYW4pOworICAgICAgICAg
ICAgICAgIHZpc2l0b3IuYXBwZW5kX0NvbnNlcnZhdGl2ZVJvb3RzKGNvbnNlcnZhdGl2ZVJvb3Rz
KTsKKyAgICAgICAgICAgICAgICBpZiAoVU5MSUtFTFkobV92ZXJpZmllclNsb3RWaXNpdG9yKSkK
KyAgICAgICAgICAgICAgICAgICAgbV92ZXJpZmllclNsb3RWaXNpdG9yLT5hcHBlbmRfQ29uc2Vy
dmF0aXZlUm9vdHMoY29uc2VydmF0aXZlUm9vdHMpOwogICAgICAgICAgICAgfQogICAgICAgICAg
ICAgaWYgKE9wdGlvbnM6OnVzZUpJVCgpKSB7CiAgICAgICAgICAgICAgICAgLy8gSklUU3R1YlJv
dXRpbmVzIG11c3QgYmUgdmlzaXRlZCBhZnRlciBzY2FubmluZyBDb25zZXJ2YXRpdmVSb290cyBz
aW5jZSBKSVRTdHViUm91dGluZXMgZGVwZW5kIG9uIHRoZSBob29rIGV4ZWN1dGVkIGR1cmluZyBn
YXRoZXJpbmcgQ29uc2VydmF0aXZlUm9vdHMuCi0gICAgICAgICAgICAgICAgU2V0Um9vdE1hcmtS
ZWFzb25TY29wZSByb290U2NvcGUoc2xvdFZpc2l0b3IsIFNsb3RWaXNpdG9yOjpSb290TWFya1Jl
YXNvbjo6SklUU3R1YlJvdXRpbmVzKTsKLSAgICAgICAgICAgICAgICBtX2ppdFN0dWJSb3V0aW5l
cy0+dHJhY2VNYXJrZWRTdHViUm91dGluZXMoc2xvdFZpc2l0b3IpOworICAgICAgICAgICAgICAg
IFNldFJvb3RNYXJrUmVhc29uU2NvcGUgcm9vdFNjb3BlKHZpc2l0b3IsIEFic3RyYWN0U2xvdFZp
c2l0b3I6OlJvb3RNYXJrUmVhc29uOjpKSVRTdHViUm91dGluZXMpOworICAgICAgICAgICAgICAg
IG1faml0U3R1YlJvdXRpbmVzLT50cmFjZU1hcmtlZFN0dWJSb3V0aW5lczEodmlzaXRvcik7Cisg
ICAgICAgICAgICAgICAgaWYgKFVOTElLRUxZKG1fdmVyaWZpZXJTbG90VmlzaXRvcikpCisgICAg
ICAgICAgICAgICAgICAgIG1faml0U3R1YlJvdXRpbmVzLT50cmFjZU1hcmtlZFN0dWJSb3V0aW5l
czEoKm1fdmVyaWZpZXJTbG90VmlzaXRvcik7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAK
ICAgICAgICAgICAgIGxhc3RWZXJzaW9uID0gbV9waGFzZVZlcnNpb247CkBAIC0yNzMzLDkyICsy
Nzg0LDkyIEBAIHZvaWQgSGVhcDo6YWRkQ29yZUNvbnN0cmFpbnRzKCkKICAgICAKICAgICBtX2Nv
bnN0cmFpbnRTZXQtPmFkZCgKICAgICAgICAgIk1zciIsICJNaXNjIFNtYWxsIFJvb3RzIiwKLSAg
ICAgICAgW3RoaXNdIChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IpIHsKKyAgICAgICAgW3RoaXNd
IChBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKSB7CiAKICNpZiBKU0NfT0JKQ19BUElfRU5B
QkxFRAotICAgICAgICAgICAgc2NhbkV4dGVybmFsUmVtZW1iZXJlZFNldChtX3ZtLCBzbG90Vmlz
aXRvcik7CisgICAgICAgICAgICBzY2FuRXh0ZXJuYWxSZW1lbWJlcmVkU2V0KG1fdm0sIHZpc2l0
b3IpOwogI2VuZGlmCiAgICAgICAgICAgICBpZiAobV92bS5zbWFsbFN0cmluZ3MubmVlZHNUb0Jl
VmlzaXRlZCgqbV9jb2xsZWN0aW9uU2NvcGUpKSB7Ci0gICAgICAgICAgICAgICAgU2V0Um9vdE1h
cmtSZWFzb25TY29wZSByb290U2NvcGUoc2xvdFZpc2l0b3IsIFNsb3RWaXNpdG9yOjpSb290TWFy
a1JlYXNvbjo6U3Ryb25nUmVmZXJlbmNlcyk7Ci0gICAgICAgICAgICAgICAgbV92bS5zbWFsbFN0
cmluZ3MudmlzaXRTdHJvbmdSZWZlcmVuY2VzKHNsb3RWaXNpdG9yKTsKKyAgICAgICAgICAgICAg
ICBTZXRSb290TWFya1JlYXNvblNjb3BlIHJvb3RTY29wZSh2aXNpdG9yLCBBYnN0cmFjdFNsb3RW
aXNpdG9yOjpSb290TWFya1JlYXNvbjo6U3Ryb25nUmVmZXJlbmNlcyk7CisgICAgICAgICAgICAg
ICAgbV92bS5zbWFsbFN0cmluZ3MudmlzaXRTdHJvbmdSZWZlcmVuY2VzKHZpc2l0b3IpOwogICAg
ICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
U2V0Um9vdE1hcmtSZWFzb25TY29wZSByb290U2NvcGUoc2xvdFZpc2l0b3IsIFNsb3RWaXNpdG9y
OjpSb290TWFya1JlYXNvbjo6UHJvdGVjdGVkVmFsdWVzKTsKKyAgICAgICAgICAgICAgICBTZXRS
b290TWFya1JlYXNvblNjb3BlIHJvb3RTY29wZSh2aXNpdG9yLCBBYnN0cmFjdFNsb3RWaXNpdG9y
OjpSb290TWFya1JlYXNvbjo6UHJvdGVjdGVkVmFsdWVzKTsKICAgICAgICAgICAgICAgICBmb3Ig
KGF1dG8mIHBhaXIgOiBtX3Byb3RlY3RlZFZhbHVlcykKLSAgICAgICAgICAgICAgICAgICAgc2xv
dFZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQocGFpci5rZXkpOworICAgICAgICAgICAgICAgICAg
ICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKHBhaXIua2V5KTsKICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIAogICAgICAgICAgICAgaWYgKG1fbWFya0xpc3RTZXQgJiYgbV9tYXJrTGlzdFNl
dC0+c2l6ZSgpKSB7Ci0gICAgICAgICAgICAgICAgU2V0Um9vdE1hcmtSZWFzb25TY29wZSByb290
U2NvcGUoc2xvdFZpc2l0b3IsIFNsb3RWaXNpdG9yOjpSb290TWFya1JlYXNvbjo6Q29uc2VydmF0
aXZlU2Nhbik7Ci0gICAgICAgICAgICAgICAgTWFya2VkQXJndW1lbnRCdWZmZXI6Om1hcmtMaXN0
cyhzbG90VmlzaXRvciwgKm1fbWFya0xpc3RTZXQpOworICAgICAgICAgICAgICAgIFNldFJvb3RN
YXJrUmVhc29uU2NvcGUgcm9vdFNjb3BlKHZpc2l0b3IsIEFic3RyYWN0U2xvdFZpc2l0b3I6OlJv
b3RNYXJrUmVhc29uOjpDb25zZXJ2YXRpdmVTY2FuKTsKKyAgICAgICAgICAgICAgICBNYXJrZWRB
cmd1bWVudEJ1ZmZlcjo6bWFya0xpc3RzKHZpc2l0b3IsICptX21hcmtMaXN0U2V0KTsKICAgICAg
ICAgICAgIH0KIAogICAgICAgICAgICAgbV9tYXJrZWRKU1ZhbHVlUmVmQXJyYXlzLmZvckVhY2go
WyZdIChNYXJrZWRKU1ZhbHVlUmVmQXJyYXkqIGFycmF5KSB7Ci0gICAgICAgICAgICAgICAgYXJy
YXktPnZpc2l0QWdncmVnYXRlKHNsb3RWaXNpdG9yKTsKKyAgICAgICAgICAgICAgICBhcnJheS0+
dmlzaXRBZ2dyZWdhdGUxKHZpc2l0b3IpOwogICAgICAgICAgICAgfSk7CiAKICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICBTZXRSb290TWFya1JlYXNvblNjb3BlIHJvb3RTY29wZShzbG90
VmlzaXRvciwgU2xvdFZpc2l0b3I6OlJvb3RNYXJrUmVhc29uOjpWTUV4Y2VwdGlvbnMpOwotICAg
ICAgICAgICAgICAgIHNsb3RWaXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKG1fdm0uZXhjZXB0aW9u
KCkpOwotICAgICAgICAgICAgICAgIHNsb3RWaXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKG1fdm0u
bGFzdEV4Y2VwdGlvbigpKTsKKyAgICAgICAgICAgICAgICBTZXRSb290TWFya1JlYXNvblNjb3Bl
IHJvb3RTY29wZSh2aXNpdG9yLCBBYnN0cmFjdFNsb3RWaXNpdG9yOjpSb290TWFya1JlYXNvbjo6
Vk1FeGNlcHRpb25zKTsKKyAgICAgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVk
KG1fdm0uZXhjZXB0aW9uKCkpOworICAgICAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJy
aWVyZWQobV92bS5sYXN0RXhjZXB0aW9uKCkpOwogICAgICAgICAgICAgfQogICAgICAgICB9LAog
ICAgICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eTo6R3JleWVkQnlFeGVjdXRpb24pOwogICAgIAog
ICAgIG1fY29uc3RyYWludFNldC0+YWRkKAogICAgICAgICAiU2giLCAiU3Ryb25nIEhhbmRsZXMi
LAotICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvcikgewotICAgICAgICAg
ICAgU2V0Um9vdE1hcmtSZWFzb25TY29wZSByb290U2NvcGUoc2xvdFZpc2l0b3IsIFNsb3RWaXNp
dG9yOjpSb290TWFya1JlYXNvbjo6U3Ryb25nSGFuZGxlcyk7Ci0gICAgICAgICAgICBtX2hhbmRs
ZVNldC52aXNpdFN0cm9uZ0hhbmRsZXMoc2xvdFZpc2l0b3IpOworICAgICAgICBbdGhpc10gKEFi
c3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsKKyAgICAgICAgICAgIFNldFJvb3RNYXJrUmVh
c29uU2NvcGUgcm9vdFNjb3BlKHZpc2l0b3IsIEFic3RyYWN0U2xvdFZpc2l0b3I6OlJvb3RNYXJr
UmVhc29uOjpTdHJvbmdIYW5kbGVzKTsKKyAgICAgICAgICAgIG1faGFuZGxlU2V0LnZpc2l0U3Ry
b25nSGFuZGxlczEodmlzaXRvcik7CiAgICAgICAgIH0sCiAgICAgICAgIENvbnN0cmFpbnRWb2xh
dGlsaXR5OjpHcmV5ZWRCeUV4ZWN1dGlvbik7CiAgICAgCiAgICAgbV9jb25zdHJhaW50U2V0LT5h
ZGQoCiAgICAgICAgICJEIiwgIkRlYnVnZ2VyIiwKLSAgICAgICAgW3RoaXNdIChTbG90VmlzaXRv
ciYgc2xvdFZpc2l0b3IpIHsKLSAgICAgICAgICAgIFNldFJvb3RNYXJrUmVhc29uU2NvcGUgcm9v
dFNjb3BlKHNsb3RWaXNpdG9yLCBTbG90VmlzaXRvcjo6Um9vdE1hcmtSZWFzb246OkRlYnVnZ2Vy
KTsKKyAgICAgICAgW3RoaXNdIChBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKSB7CisgICAg
ICAgICAgICBTZXRSb290TWFya1JlYXNvblNjb3BlIHJvb3RTY29wZSh2aXNpdG9yLCBBYnN0cmFj
dFNsb3RWaXNpdG9yOjpSb290TWFya1JlYXNvbjo6RGVidWdnZXIpOwogCiAjaWYgRU5BQkxFKFNB
TVBMSU5HX1BST0ZJTEVSKQogICAgICAgICAgICAgaWYgKFNhbXBsaW5nUHJvZmlsZXIqIHNhbXBs
aW5nUHJvZmlsZXIgPSBtX3ZtLnNhbXBsaW5nUHJvZmlsZXIoKSkgewogICAgICAgICAgICAgICAg
IGF1dG8gbG9ja2VyID0gaG9sZExvY2soc2FtcGxpbmdQcm9maWxlci0+Z2V0TG9jaygpKTsKICAg
ICAgICAgICAgICAgICBzYW1wbGluZ1Byb2ZpbGVyLT5wcm9jZXNzVW52ZXJpZmllZFN0YWNrVHJh
Y2VzKGxvY2tlcik7Ci0gICAgICAgICAgICAgICAgc2FtcGxpbmdQcm9maWxlci0+dmlzaXQoc2xv
dFZpc2l0b3IpOworICAgICAgICAgICAgICAgIHNhbXBsaW5nUHJvZmlsZXItPnZpc2l0KHZpc2l0
b3IpOwogICAgICAgICAgICAgICAgIGlmIChPcHRpb25zOjpsb2dHQygpID09IEdDTG9nZ2luZzo6
VmVyYm9zZSkKLSAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiU2FtcGxpbmcgUHJvZmlsZXIg
ZGF0YTpcbiIsIHNsb3RWaXNpdG9yKTsKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiU2Ft
cGxpbmcgUHJvZmlsZXIgZGF0YTpcbiIsIHZpc2l0b3IpOwogICAgICAgICAgICAgfQogI2VuZGlm
IC8vIEVOQUJMRShTQU1QTElOR19QUk9GSUxFUikKIAogICAgICAgICAgICAgaWYgKG1fdm0udHlw
ZVByb2ZpbGVyKCkpCi0gICAgICAgICAgICAgICAgbV92bS50eXBlUHJvZmlsZXJMb2coKS0+dmlz
aXQoc2xvdFZpc2l0b3IpOworICAgICAgICAgICAgICAgIG1fdm0udHlwZVByb2ZpbGVyTG9nKCkt
PnZpc2l0KHZpc2l0b3IpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAoYXV0byogc2hh
ZG93Q2hpY2tlbiA9IG1fdm0uc2hhZG93Q2hpY2tlbigpKQotICAgICAgICAgICAgICAgIHNoYWRv
d0NoaWNrZW4tPnZpc2l0Q2hpbGRyZW4oc2xvdFZpc2l0b3IpOworICAgICAgICAgICAgICAgIHNo
YWRvd0NoaWNrZW4tPnZpc2l0Q2hpbGRyZW4odmlzaXRvcik7CiAgICAgICAgIH0sCiAgICAgICAg
IENvbnN0cmFpbnRWb2xhdGlsaXR5OjpHcmV5ZWRCeUV4ZWN1dGlvbik7CiAgICAgCiAgICAgbV9j
b25zdHJhaW50U2V0LT5hZGQoCiAgICAgICAgICJXcyIsICJXZWFrIFNldHMiLAotICAgICAgICBb
dGhpc10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvcikgewotICAgICAgICAgICAgU2V0Um9vdE1h
cmtSZWFzb25TY29wZSByb290U2NvcGUoc2xvdFZpc2l0b3IsIFNsb3RWaXNpdG9yOjpSb290TWFy
a1JlYXNvbjo6V2Vha1NldHMpOwotICAgICAgICAgICAgbV9vYmplY3RTcGFjZS52aXNpdFdlYWtT
ZXRzKHNsb3RWaXNpdG9yKTsKKyAgICAgICAgW3RoaXNdIChBYnN0cmFjdFNsb3RWaXNpdG9yJiB2
aXNpdG9yKSB7CisgICAgICAgICAgICBTZXRSb290TWFya1JlYXNvblNjb3BlIHJvb3RTY29wZSh2
aXNpdG9yLCBBYnN0cmFjdFNsb3RWaXNpdG9yOjpSb290TWFya1JlYXNvbjo6V2Vha1NldHMpOwor
ICAgICAgICAgICAgbV9vYmplY3RTcGFjZS52aXNpdFdlYWtTZXRzMSh2aXNpdG9yKTsKICAgICAg
ICAgfSwKICAgICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHk6OkdyZXllZEJ5TWFya2luZyk7CiAg
ICAgCiAgICAgbV9jb25zdHJhaW50U2V0LT5hZGQoCiAgICAgICAgICJPIiwgIk91dHB1dCIsCi0g
ICAgICAgIFtdIChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IpIHsKLSAgICAgICAgICAgIFZNJiB2
bSA9IHNsb3RWaXNpdG9yLnZtKCk7CisgICAgICAgIFtdIChBYnN0cmFjdFNsb3RWaXNpdG9yJiB2
aXNpdG9yKSB7CisgICAgICAgICAgICBWTSYgdm0gPSB2aXNpdG9yLnZtKCk7CiAKLSAgICAgICAg
ICAgIGF1dG8gY2FsbE91dHB1dENvbnN0cmFpbnQgPSBbXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNp
dG9yLCBIZWFwQ2VsbCogaGVhcENlbGwsIEhlYXBDZWxsOjpLaW5kKSB7Ci0gICAgICAgICAgICAg
ICAgU2V0Um9vdE1hcmtSZWFzb25TY29wZSByb290U2NvcGUoc2xvdFZpc2l0b3IsIFNsb3RWaXNp
dG9yOjpSb290TWFya1JlYXNvbjo6T3V0cHV0KTsKLSAgICAgICAgICAgICAgICBWTSYgdm0gPSBz
bG90VmlzaXRvci52bSgpOworICAgICAgICAgICAgYXV0byBjYWxsT3V0cHV0Q29uc3RyYWludCA9
IFtdIChBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBIZWFwQ2VsbCogaGVhcENlbGwsIEhl
YXBDZWxsOjpLaW5kKSB7CisgICAgICAgICAgICAgICAgU2V0Um9vdE1hcmtSZWFzb25TY29wZSBy
b290U2NvcGUodmlzaXRvciwgQWJzdHJhY3RTbG90VmlzaXRvcjo6Um9vdE1hcmtSZWFzb246Ok91
dHB1dCk7CisgICAgICAgICAgICAgICAgVk0mIHZtID0gdmlzaXRvci52bSgpOwogICAgICAgICAg
ICAgICAgIEpTQ2VsbCogY2VsbCA9IHN0YXRpY19jYXN0PEpTQ2VsbCo+KGhlYXBDZWxsKTsKLSAg
ICAgICAgICAgICAgICBjZWxsLT5tZXRob2RUYWJsZSh2bSktPnZpc2l0T3V0cHV0Q29uc3RyYWlu
dHMoY2VsbCwgc2xvdFZpc2l0b3IpOworICAgICAgICAgICAgICAgIGNlbGwtPm1ldGhvZFRhYmxl
KHZtKS0+dmlzaXRPdXRwdXRDb25zdHJhaW50cyhjZWxsLCB2aXNpdG9yKTsKICAgICAgICAgICAg
IH07CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGF1dG8gYWRkID0gWyZdIChhdXRvJiBzZXQp
IHsKLSAgICAgICAgICAgICAgICBzbG90VmlzaXRvci5hZGRQYXJhbGxlbENvbnN0cmFpbnRUYXNr
KHNldC5mb3JFYWNoTWFya2VkQ2VsbEluUGFyYWxsZWwoY2FsbE91dHB1dENvbnN0cmFpbnQpKTsK
KyAgICAgICAgICAgICAgICB2aXNpdG9yLmFkZFBhcmFsbGVsQ29uc3RyYWludFRhc2soc2V0LmZv
ckVhY2hNYXJrZWRDZWxsSW5QYXJhbGxlbChjYWxsT3V0cHV0Q29uc3RyYWludCkpOwogICAgICAg
ICAgICAgfTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgYWRkKHZtLmV4ZWN1dGFibGVUb0Nv
ZGVCbG9ja0VkZ2VzV2l0aENvbnN0cmFpbnRzKTsKQEAgLTI4MzIsMjIgKzI4ODMsMjIgQEAgdm9p
ZCBIZWFwOjphZGRDb3JlQ29uc3RyYWludHMoKQogICAgIGlmIChPcHRpb25zOjp1c2VKSVQoKSkg
ewogICAgICAgICBtX2NvbnN0cmFpbnRTZXQtPmFkZCgKICAgICAgICAgICAgICJEdyIsICJERkcg
V29ya2xpc3RzIiwKLSAgICAgICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9y
KSB7Ci0gICAgICAgICAgICAgICAgU2V0Um9vdE1hcmtSZWFzb25TY29wZSByb290U2NvcGUoc2xv
dFZpc2l0b3IsIFNsb3RWaXNpdG9yOjpSb290TWFya1JlYXNvbjo6REZHV29ya0xpc3RzKTsKKyAg
ICAgICAgICAgIFt0aGlzXSAoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikgeworICAgICAg
ICAgICAgICAgIFNldFJvb3RNYXJrUmVhc29uU2NvcGUgcm9vdFNjb3BlKHZpc2l0b3IsIEFic3Ry
YWN0U2xvdFZpc2l0b3I6OlJvb3RNYXJrUmVhc29uOjpERkdXb3JrTGlzdHMpOwogCiAgICAgICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gREZHOjpudW1iZXJPZldvcmtsaXN0cygpOyBpLS07
KQotICAgICAgICAgICAgICAgICAgICBERkc6OmV4aXN0aW5nV29ya2xpc3RGb3JJbmRleChpKS52
aXNpdFdlYWtSZWZlcmVuY2VzKHNsb3RWaXNpdG9yKTsKKyAgICAgICAgICAgICAgICAgICAgREZH
OjpleGlzdGluZ1dvcmtsaXN0Rm9ySW5kZXgoaSkudmlzaXRXZWFrUmVmZXJlbmNlcyh2aXNpdG9y
KTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAvLyBGSVhNRTogVGhpcyBpcyBh
bG1vc3QgY2VydGFpbmx5IHVubmVjZXNzYXJ5LgogICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjY4MjkKLSAgICAgICAgICAgICAgICBE
Rkc6Oml0ZXJhdGVDb2RlQmxvY2tzRm9yR0MoCisgICAgICAgICAgICAgICAgREZHOjppdGVyYXRl
Q29kZUJsb2Nrc0ZvckdDKHZpc2l0b3IsCiAgICAgICAgICAgICAgICAgICAgIG1fdm0sCiAgICAg
ICAgICAgICAgICAgICAgIFsmXSAoQ29kZUJsb2NrKiBjb2RlQmxvY2spIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHNsb3RWaXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKGNvZGVCbG9jayk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKGNvZGVCbG9j
ayk7CiAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgIAogICAgICAgICAg
ICAgICAgIGlmIChPcHRpb25zOjpsb2dHQygpID09IEdDTG9nZ2luZzo6VmVyYm9zZSkKLSAgICAg
ICAgICAgICAgICAgICAgZGF0YUxvZygiREZHIFdvcmtsaXN0czpcbiIsIHNsb3RWaXNpdG9yKTsK
KyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiREZHIFdvcmtsaXN0czpcbiIsIHZpc2l0b3Ip
OwogICAgICAgICAgICAgfSwKICAgICAgICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5OjpHcmV5
ZWRCeU1hcmtpbmcpOwogICAgIH0KQEAgLTI4NTUsMTQgKzI5MDYsMTUgQEAgdm9pZCBIZWFwOjph
ZGRDb3JlQ29uc3RyYWludHMoKQogICAgIAogICAgIG1fY29uc3RyYWludFNldC0+YWRkKAogICAg
ICAgICAiQ2IiLCAiQ29kZUJsb2NrcyIsCi0gICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNs
b3RWaXNpdG9yKSB7Ci0gICAgICAgICAgICBTZXRSb290TWFya1JlYXNvblNjb3BlIHJvb3RTY29w
ZShzbG90VmlzaXRvciwgU2xvdFZpc2l0b3I6OlJvb3RNYXJrUmVhc29uOjpDb2RlQmxvY2tzKTsK
LSAgICAgICAgICAgIGl0ZXJhdGVFeGVjdXRpbmdBbmRDb21waWxpbmdDb2RlQmxvY2tzV2l0aG91
dEhvbGRpbmdMb2NrcygKKyAgICAgICAgW3RoaXNdIChBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNp
dG9yKSB7CisgICAgICAgICAgICBTZXRSb290TWFya1JlYXNvblNjb3BlIHJvb3RTY29wZSh2aXNp
dG9yLCBBYnN0cmFjdFNsb3RWaXNpdG9yOjpSb290TWFya1JlYXNvbjo6Q29kZUJsb2Nrcyk7Cisg
ICAgICAgICAgICBpdGVyYXRlRXhlY3V0aW5nQW5kQ29tcGlsaW5nQ29kZUJsb2Nrc1dpdGhvdXRI
b2xkaW5nTG9ja3ModmlzaXRvciwKICAgICAgICAgICAgICAgICBbJl0gKENvZGVCbG9jayogY29k
ZUJsb2NrKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIFZpc2l0IHRoZSBDb2RlQmxvY2sgYXMg
YSBjb25zdHJhaW50IG9ubHkgaWYgaXQncyBibGFjay4KLSAgICAgICAgICAgICAgICAgICAgaWYg
KGlzTWFya2VkKGNvZGVCbG9jaykKKyAgICAgICAgICAgICAgICAgICAgLy8gbWxhbSBGSVhNRQor
ICAgICAgICAgICAgICAgICAgICBpZiAodmlzaXRvci5pc01hcmtlZChjb2RlQmxvY2spCiAgICAg
ICAgICAgICAgICAgICAgICAgICAmJiBjb2RlQmxvY2stPmNlbGxTdGF0ZSgpID09IENlbGxTdGF0
ZTo6UG9zc2libHlCbGFjaykKLSAgICAgICAgICAgICAgICAgICAgICAgIHNsb3RWaXNpdG9yLnZp
c2l0QXNDb25zdHJhaW50KGNvZGVCbG9jayk7CisgICAgICAgICAgICAgICAgICAgICAgICB2aXNp
dG9yLnZpc2l0QXNDb25zdHJhaW50KGNvZGVCbG9jayk7CiAgICAgICAgICAgICAgICAgfSk7CiAg
ICAgICAgIH0sCiAgICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5OjpTZWxkb21HcmV5ZWQpOwpA
QCAtMzAyMyw0ICszMDc1LDY4IEBAIHZvaWQgSGVhcDo6cnVuVGFza0luUGFyYWxsZWwoUmVmUHRy
PFNoYXIKICAgICB9CiB9CiAKKy8vIG1sYW0KK3ZvaWQgSGVhcDo6dmVyaWZ5R0MoKQoreworICAg
IGJvb2wgdmVyYm9zZSA9IGdldGVudigibWxhbVZlcmJvc2UiKTsKKworICAgIFJFTEVBU0VfQVNT
RVJUKG1fdmVyaWZpZXJTbG90VmlzaXRvcik7CisgICAgUkVMRUFTRV9BU1NFUlQoIW1faXNWZXJp
ZnlpbmdHQyk7CisgICAgbV9pc1ZlcmlmeWluZ0dDID0gdHJ1ZTsKKworICAgIGlmICh2ZXJib3Nl
KSBkYXRhTG9nTG4oIiAgICBtbGFtIEhlYXA6OnZlcmlmeUdDKCkgU1RFUCAxIGhlYXAubV9tdXRh
dG9yTWFya1N0YWNrLT5zaXplKCkgIiwgbV9tdXRhdG9yTWFya1N0YWNrLT5zaXplKCksICIgbV9y
YWNlTWFya1N0YWNrLT5zaXplKCkgIiwgbV9yYWNlTWFya1N0YWNrLT5zaXplKCkpOworICAgIFZl
cmlmaWVyU2xvdFZpc2l0b3ImIHZpc2l0b3IgPSAqbV92ZXJpZmllclNsb3RWaXNpdG9yOworICAg
IGF1dG8gcmVwb3J0RmFpbHVyZSA9IFtdIChWZXJpZmllclNsb3RWaXNpdG9yJiB2aXNpdG9yLCBI
ZWFwQ2VsbCogY2VsbCkgeworICAgICAgICBkYXRhTG9nTG4oIlxuIiAiR0MgVmVyaWZpZXI6IEVS
Uk9SIGNlbGwgIiwgUmF3UG9pbnRlcihjZWxsKSwgIiB3YXMgbm90IG1hcmtlZCIpOworICAgICAg
ICB2aXNpdG9yLmR1bXBNYXJrZXJEYXRhKGNlbGwpOworICAgIH07CisKKyAgICBkbyB7CisgICAg
ICAgIGlmICh2ZXJib3NlKSBkYXRhTG9nTG4oIiAgICBtbGFtIEhlYXA6OnZlcmlmeUdDKCkgU1RF
UCAyOiB2aXNpdG9yLmRyYWluKCkgaGVhcC5tX211dGF0b3JNYXJrU3RhY2stPnNpemUoKSAiLCBt
X211dGF0b3JNYXJrU3RhY2stPnNpemUoKSwgIiBtX3JhY2VNYXJrU3RhY2stPnNpemUoKSAiLCBt
X3JhY2VNYXJrU3RhY2stPnNpemUoKSk7CisgICAgICAgIHZpc2l0b3IuZHJhaW4oKTsKKyAgICAg
ICAgaWYgKHZlcmJvc2UpIGRhdGFMb2dMbigiICAgIG1sYW0gSGVhcDo6dmVyaWZ5R0MoKSBTVEVQ
IDM6IG1fY29uc3RyYWludFNldC0+ZXhlY3V0ZUFsbFN5bmNocm9ub3VzbHkoKSBoZWFwLm1fbXV0
YXRvck1hcmtTdGFjay0+c2l6ZSgpICIsIG1fbXV0YXRvck1hcmtTdGFjay0+c2l6ZSgpLCAiIG1f
cmFjZU1hcmtTdGFjay0+c2l6ZSgpICIsIG1fcmFjZU1hcmtTdGFjay0+c2l6ZSgpKTsKKyAgICAg
ICAgbV9jb25zdHJhaW50U2V0LT5leGVjdXRlQWxsU3luY2hyb25vdXNseSh2aXNpdG9yKTsKKyAg
ICAgICAgaWYgKHZlcmJvc2UpIGRhdGFMb2dMbigiICAgIG1sYW0gSGVhcDo6dmVyaWZ5R0MoKSBT
VEVQIDQ6IHZpc2l0b3IuZXhlY3V0ZUNvbnN0cmFpbnRUYXNrcygpIGhlYXAubV9tdXRhdG9yTWFy
a1N0YWNrLT5zaXplKCkgIiwgbV9tdXRhdG9yTWFya1N0YWNrLT5zaXplKCksICIgbV9yYWNlTWFy
a1N0YWNrLT5zaXplKCkgIiwgbV9yYWNlTWFya1N0YWNrLT5zaXplKCkpOworICAgICAgICB2aXNp
dG9yLmV4ZWN1dGVDb25zdHJhaW50VGFza3MoKTsKKyAgICB9IHdoaWxlICghdmlzaXRvci5pc0Vt
cHR5KCkpOworCisgICAgbV9pc1ZlcmlmeWluZ0dDID0gZmFsc2U7CisgICAgaWYgKHZlcmJvc2Up
IGRhdGFMb2dMbigiICAgIG1sYW0gSGVhcDo6dmVyaWZ5R0MoKSBTVEVQIDU6IEVORCBoZWFwLm1f
bXV0YXRvck1hcmtTdGFjay0+c2l6ZSgpICIsIG1fbXV0YXRvck1hcmtTdGFjay0+c2l6ZSgpLCAi
IG1fcmFjZU1hcmtTdGFjay0+c2l6ZSgpICIsIG1fcmFjZU1hcmtTdGFjay0+c2l6ZSgpKTsKKwor
Ly8gICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKKyAgICB2aXNpdG9yLmZvckVhY2hMaXZlQ2VsbChb
Jl0gKEhlYXBDZWxsKiBjZWxsKSB7CisgICAgICAgIGlmIChIZWFwOjppc01hcmtlZChjZWxsKSkK
KyAgICAgICAgICAgIHJldHVybjsKKworLy8gICAgICAgIGlmIChpc0pTQ2VsbEtpbmQoY2VsbC0+
Y2VsbEtpbmQoKSkpIHsKKy8vICAgICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBqc0R5
bmFtaWNDYXN0PENvZGVCbG9jayo+KHZtLCBzdGF0aWNfY2FzdDxKU0NlbGwqPihjZWxsKSk7Cisv
LyAgICAgICAgICAgIGlmIChjb2RlQmxvY2sgJiYgY29kZUJsb2NrLT5tX21sYW1GbGFnKQorLy8g
ICAgICAgICAgICAgICAgcmV0dXJuOworLy8gICAgICAgIH0KKworICAgICAgICBpZiAoVU5MSUtF
TFkoT3B0aW9uczo6dmVyYm9zZVZlcmlmeUdDKCkpKQorICAgICAgICAgICAgcmVwb3J0RmFpbHVy
ZSh2aXNpdG9yLCBjZWxsKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQodGhpcy0+aXNNYXJrZWQo
Y2VsbCkpOworICAgIH0pOworCisgICAgLy8gICAgdmlzaXRvci5mb3JFYWNoTGl2ZVByZWNpc2VB
bGxvY2F0aW9uKFsmXSAoSGVhcENlbGwqIGNlbGwpIHsKKy8vICAgICAgICBSRUxFQVNFX0FTU0VS
VChjZWxsLT5pc1ByZWNpc2VBbGxvY2F0aW9uKCkpOworLy8vLyAgICAgICAgUkVMRUFTRV9BU1NF
UlQoY2VsbC0+cHJlY2lzZUFsbG9jYXRpb24oKS5pc01hcmtlZCgpKTsKKy8vICAgICAgICBpZiAo
VU5MSUtFTFkoT3B0aW9uczo6dmVyYm9zZVZlcmlmeUdDKCkgJiYgIUhlYXA6OmlzTWFya2VkKGNl
bGwpKSkKKy8vICAgICAgICAgICAgdmlzaXRvci5kdW1wTWFya2VyRGF0YShjZWxsKTsKKy8vICAg
ICAgICBSRUxFQVNFX0FTU0VSVChIZWFwOjppc01hcmtlZChjZWxsKSk7CisvLyAgICB9KTsKKy8v
ICAgIHZpc2l0b3IuZm9yRWFjaExpdmVNYXJrZWRCbG9ja0NlbGwoWyZdIChIZWFwQ2VsbCogY2Vs
bCkgeworLy8gICAgICAgIFJFTEVBU0VfQVNTRVJUKCFjZWxsLT5pc1ByZWNpc2VBbGxvY2F0aW9u
KCkpOworLy8vLyAgICAgICAgUkVMRUFTRV9BU1NFUlQoY2VsbC0+bWFya2VkQmxvY2soKS5pc01h
cmtlZChjZWxsKSk7CisvLyAgICAgICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OnZlcmJvc2VWZXJp
ZnlHQygpICYmICFIZWFwOjppc01hcmtlZChjZWxsKSkpCisvLyAgICAgICAgICAgIHZpc2l0b3Iu
ZHVtcE1hcmtlckRhdGEoY2VsbCk7CisvLyAgICAgICAgUkVMRUFTRV9BU1NFUlQoSGVhcDo6aXNN
YXJrZWQoY2VsbCkpOworLy8gICAgfSk7CisKKyAgICBpZiAodmVyYm9zZSkgZGF0YUxvZ0xuKCIg
ICAgbWxhbSBIZWFwOjp2ZXJpZnlHQygpIFNURVAgNjogRU5EIGhlYXAubV9tdXRhdG9yTWFya1N0
YWNrLT5zaXplKCkgIiwgbV9tdXRhdG9yTWFya1N0YWNrLT5zaXplKCksICIgbV9yYWNlTWFya1N0
YWNrLT5zaXplKCkgIiwgbV9yYWNlTWFya1N0YWNrLT5zaXplKCkpOworICAgIG1fdmVyaWZpZXJT
bG90VmlzaXRvciA9IG51bGxwdHI7Cit9CisvLyBtbGFtICovCisKIH0gLy8gbmFtZXNwYWNlIEpT
QwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkocmV2aXNpb24gMjcyNzEwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCSh3b3JraW5nIGNvcHkpCkBAIC04Niw2
ICs4Niw3IEBAIGNsYXNzIFNwYWNlVGltZU11dGF0b3JTY2hlZHVsZXI7CiBjbGFzcyBTdG9wSWZO
ZWNlc3NhcnlUaW1lcjsKIGNsYXNzIFN3ZWVwaW5nU2NvcGU7CiBjbGFzcyBWTTsKK2NsYXNzIFZl
cmlmaWVyU2xvdFZpc2l0b3I7CiBjbGFzcyBXZWFrR0NNYXBCYXNlOwogc3RydWN0IEN1cnJlbnRU
aHJlYWRTdGF0ZTsKIApAQCAtMTg0LDcgKzE4NSw5IEBAIHB1YmxpYzoKICAgICAKICAgICBib29s
IGlzU2h1dHRpbmdEb3duKCkgY29uc3QgeyByZXR1cm4gbV9pc1NodXR0aW5nRG93bjsgfQogCi0g
ICAgSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBpc0FuYWx5emluZ0hlYXAoKSBjb25zdDsKKy8vICAg
IEpTX0VYUE9SVF9QUklWQVRFIGJvb2wgaXNBbmFseXppbmdIZWFwKCkgY29uc3Q7CisvLyAgICBi
b29sIGlzQW5hbHl6aW5nSGVhcCgpIGNvbnN0IHsgcmV0dXJuIG1faGVhcEFuYWx5emVyOyB9Cisv
LyAgICBIZWFwQW5hbHl6ZXIqIGhlYXBBbmFseXplcigpIGNvbnN0IHsgcmV0dXJuIG1faGVhcEFu
YWx5emVyOyB9CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHN3ZWVwU3luY2hyb25vdXNs
eSgpOwogCkBAIC0zODUsOCArMzg4LDggQEAgcHVibGljOgogICAgIAogICAgIEpTX0VYUE9SVF9Q
UklWQVRFIHZvaWQgYWRkTWFya2luZ0NvbnN0cmFpbnQoc3RkOjp1bmlxdWVfcHRyPE1hcmtpbmdD
b25zdHJhaW50Pik7CiAgICAgCi0gICAgc2l6ZV90IG51bU9wYXF1ZVJvb3RzKCkgY29uc3QgeyBy
ZXR1cm4gbV9vcGFxdWVSb290cy5zaXplKCk7IH0KLQorLy8gICAgc2l6ZV90IG51bU9wYXF1ZVJv
b3RzKCkgY29uc3QgeyByZXR1cm4gbV9vcGFxdWVSb290cy5zaXplKCk7IH0gLy8gbWxhbSBVTlVT
RUQKKy8vCiAgICAgSGVhcFZlcmlmaWVyKiB2ZXJpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1fdmVy
aWZpZXIuZ2V0KCk7IH0KICAgICAKICAgICB2b2lkIGFkZEhlYXBGaW5hbGl6ZXJDYWxsYmFjayhj
b25zdCBIZWFwRmluYWxpemVyQ2FsbGJhY2smKTsKQEAgLTU3NiwxMCArNTc5LDEwIEBAIHByaXZh
dGU6CiAgICAgYm9vbCBvdmVyQ3JpdGljYWxNZW1vcnlUaHJlc2hvbGQoTWVtb3J5VGhyZXNob2xk
Q2FsbFR5cGUgbWVtb3J5VGhyZXNob2xkQ2FsbFR5cGUgPSBNZW1vcnlUaHJlc2hvbGRDYWxsVHlw
ZTo6Q2FjaGVkKTsKICAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgotICAgIHZvaWQg
aXRlcmF0ZUV4ZWN1dGluZ0FuZENvbXBpbGluZ0NvZGVCbG9ja3MoY29uc3QgRnVuYyYpOworICAg
IHZvaWQgaXRlcmF0ZUV4ZWN1dGluZ0FuZENvbXBpbGluZ0NvZGVCbG9ja3MoQWJzdHJhY3RTbG90
VmlzaXRvciYsIGNvbnN0IEZ1bmMmKTsKICAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5j
PgotICAgIHZvaWQgaXRlcmF0ZUV4ZWN1dGluZ0FuZENvbXBpbGluZ0NvZGVCbG9ja3NXaXRob3V0
SG9sZGluZ0xvY2tzKGNvbnN0IEZ1bmMmKTsKKyAgICB2b2lkIGl0ZXJhdGVFeGVjdXRpbmdBbmRD
b21waWxpbmdDb2RlQmxvY2tzV2l0aG91dEhvbGRpbmdMb2NrcyhBYnN0cmFjdFNsb3RWaXNpdG9y
JiwgY29uc3QgRnVuYyYpOwogICAgIAogICAgIHZvaWQgYXNzZXJ0TWFya1N0YWNrc0VtcHR5KCk7
CiAKQEAgLTU5MCw2ICs1OTMsOCBAQCBwcml2YXRlOgogICAgIHN0YXRpYyBib29sIHVzZUdlbmVy
YXRpb25hbEdDKCk7CiAgICAgc3RhdGljIGJvb2wgc2hvdWxkU3dlZXBTeW5jaHJvbm91c2x5KCk7
CiAgICAgCisgICAgdm9pZCB2ZXJpZnlHQygpOworCiAgICAgY29uc3QgSGVhcFR5cGUgbV9oZWFw
VHlwZTsKICAgICBNdXRhdG9yU3RhdGUgbV9tdXRhdG9yU3RhdGUgeyBNdXRhdG9yU3RhdGU6OlJ1
bm5pbmcgfTsKICAgICBjb25zdCBzaXplX3QgbV9yYW1TaXplOwpAQCAtNjM2LDYgKzY0MSw3IEBA
IHByaXZhdGU6CiAgICAgc3RkOjp1bmlxdWVfcHRyPE1hcmtTdGFja0FycmF5PiBtX211dGF0b3JN
YXJrU3RhY2s7CiAgICAgc3RkOjp1bmlxdWVfcHRyPE1hcmtTdGFja0FycmF5PiBtX3JhY2VNYXJr
U3RhY2s7CiAgICAgc3RkOjp1bmlxdWVfcHRyPE1hcmtpbmdDb25zdHJhaW50U2V0PiBtX2NvbnN0
cmFpbnRTZXQ7CisgICAgc3RkOjp1bmlxdWVfcHRyPFZlcmlmaWVyU2xvdFZpc2l0b3I+IG1fdmVy
aWZpZXJTbG90VmlzaXRvcjsKIAogICAgIC8vIFdlIHBvb2wgdGhlIHNsb3QgdmlzaXRvcnMgdXNl
ZCBieSBwYXJhbGxlbCBtYXJraW5nIHRocmVhZHMuIEl0J3MgdXNlZnVsIHRvIGJlIGFibGUgdG8K
ICAgICAvLyBlbnVtZXJhdGUgb3ZlciB0aGVtLCBhbmQgaXQncyB1c2VmdWwgdG8gaGF2ZSB0aGVt
IGNhY2hlIHNvbWUgc21hbGwgYW1vdW50IG9mIG1lbW9yeSBmcm9tCkBAIC02NTQsNiArNjYwLDcg
QEAgcHJpdmF0ZToKICAgICBib29sIG1faXNTYWZlVG9Db2xsZWN0IHsgZmFsc2UgfTsKICAgICBi
b29sIG1faXNTaHV0dGluZ0Rvd24geyBmYWxzZSB9OwogICAgIGJvb2wgbV9tdXRhdG9yU2hvdWxk
QmVGZW5jZWQgeyBPcHRpb25zOjpmb3JjZUZlbmNlZEJhcnJpZXIoKSB9OworICAgIGJvb2wgbV9p
c1ZlcmlmeWluZ0dDIHsgZmFsc2UgfTsKIAogICAgIHVuc2lnbmVkIG1fYmFycmllclRocmVzaG9s
ZCB7IE9wdGlvbnM6OmZvcmNlRmVuY2VkQmFycmllcigpID8gdGF1dG9sb2dpY2FsVGhyZXNob2xk
IDogYmxhY2tUaHJlc2hvbGQgfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
SGVhcElubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9I
ZWFwSW5saW5lcy5oCShyZXZpc2lvbiAyNzI3MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9IZWFwSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC02OSw2ICs2OSw4IEBAIGlubGlu
ZSBib29sIEhlYXA6OndvcmxkSXNTdG9wcGVkKCkgY29uc3QKIAogQUxXQVlTX0lOTElORSBib29s
IEhlYXA6OmlzTWFya2VkKGNvbnN0IHZvaWQqIHJhd0NlbGwpCiB7CisgICAgUkVMRUFTRV9BU1NF
UlQoIW1faXNWZXJpZnlpbmdHQyk7IC8vIG1sYW0gVEVTVCBvbmx5CisKICAgICBIZWFwQ2VsbCog
Y2VsbCA9IGJpdHdpc2VfY2FzdDxIZWFwQ2VsbCo+KHJhd0NlbGwpOwogICAgIGlmIChjZWxsLT5p
c1ByZWNpc2VBbGxvY2F0aW9uKCkpCiAgICAgICAgIHJldHVybiBjZWxsLT5wcmVjaXNlQWxsb2Nh
dGlvbigpLmlzTWFya2VkKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFw
UHJvZmlsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hl
YXBQcm9maWxlci5jcHAJKHJldmlzaW9uIDI3MjcxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0hlYXBQcm9maWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYwLDYgKzYwLDcgQEAg
dm9pZCBIZWFwUHJvZmlsZXI6OnNldEFjdGl2ZUhlYXBBbmFseXplcgogewogICAgIEFTU0VSVCgh
IW1fYWN0aXZlQW5hbHl6ZXIgIT0gISFhbmFseXplcik7CiAgICAgbV9hY3RpdmVBbmFseXplciA9
IGFuYWx5emVyOworICAgIG1fdm0uc2V0QWN0aXZlSGVhcEFuYWx5emVyKGFuYWx5emVyKTsKIH0K
IAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9J
c29DZWxsU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNv
Q2VsbFNldC5oCShyZXZpc2lvbiAyNzI3MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9Jc29DZWxsU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDcgQEAKIAogbmFtZXNw
YWNlIEpTQyB7CiAKK2NsYXNzIEFic3RyYWN0U2xvdFZpc2l0b3I7CiBjbGFzcyBIZWFwQ2VsbDsK
IGNsYXNzIElzb1N1YnNwYWNlOwogCkBAIC01OSw3ICs2MCw3IEBAIHB1YmxpYzoKICAgICB2b2lk
IGZvckVhY2hNYXJrZWRDZWxsKGNvbnN0IEZ1bmMmKTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1l
IEZ1bmM+Ci0gICAgUmVmPFNoYXJlZFRhc2s8dm9pZChTbG90VmlzaXRvciYpPj4gZm9yRWFjaE1h
cmtlZENlbGxJblBhcmFsbGVsKGNvbnN0IEZ1bmMmKTsKKyAgICBSZWY8U2hhcmVkVGFzazx2b2lk
KEFic3RyYWN0U2xvdFZpc2l0b3ImKT4+IGZvckVhY2hNYXJrZWRDZWxsSW5QYXJhbGxlbChjb25z
dCBGdW5jJik7CiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KICAgICB2b2lkIGZv
ckVhY2hMaXZlQ2VsbChjb25zdCBGdW5jJik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9Jc29DZWxsU2V0SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0lzb0NlbGxTZXRJbmxpbmVzLmgJKHJldmlzaW9uIDI3MjcxMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0lzb0NlbGxTZXRJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTkyLDkgKzkyLDkgQEAgdm9pZCBJc29DZWxsU2V0Ojpmb3JFYWNoTWFya2VkQ2VsbChjb25z
dAogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgotUmVmPFNoYXJlZFRhc2s8dm9pZChTbG90
VmlzaXRvciYpPj4gSXNvQ2VsbFNldDo6Zm9yRWFjaE1hcmtlZENlbGxJblBhcmFsbGVsKGNvbnN0
IEZ1bmMmIGZ1bmMpCitSZWY8U2hhcmVkVGFzazx2b2lkKEFic3RyYWN0U2xvdFZpc2l0b3ImKT4+
IElzb0NlbGxTZXQ6OmZvckVhY2hNYXJrZWRDZWxsSW5QYXJhbGxlbChjb25zdCBGdW5jJiBmdW5j
KQogewotICAgIGNsYXNzIFRhc2sgZmluYWwgOiBwdWJsaWMgU2hhcmVkVGFzazx2b2lkKFNsb3RW
aXNpdG9yJik+IHsKKyAgICBjbGFzcyBUYXNrIGZpbmFsIDogcHVibGljIFNoYXJlZFRhc2s8dm9p
ZChBYnN0cmFjdFNsb3RWaXNpdG9yJik+IHsKICAgICBwdWJsaWM6CiAgICAgICAgIFRhc2soSXNv
Q2VsbFNldCYgc2V0LCBjb25zdCBGdW5jJiBmdW5jKQogICAgICAgICAgICAgOiBtX3NldChzZXQp
CkBAIC0xMDMsNyArMTAzLDcgQEAgUmVmPFNoYXJlZFRhc2s8dm9pZChTbG90VmlzaXRvciYpPj4g
SXNvQwogICAgICAgICB7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIHZvaWQgcnVuKFNs
b3RWaXNpdG9yJiB2aXNpdG9yKSBmaW5hbAorICAgICAgICB2b2lkIHJ1bihBYnN0cmFjdFNsb3RW
aXNpdG9yJiB2aXNpdG9yKSBmaW5hbAogICAgICAgICB7CiAgICAgICAgICAgICB3aGlsZSAoTWFy
a2VkQmxvY2s6OkhhbmRsZSogaGFuZGxlID0gbV9ibG9ja1NvdXJjZS0+cnVuKCkpIHsKICAgICAg
ICAgICAgICAgICB1bnNpZ25lZCBibG9ja0luZGV4ID0gaGFuZGxlLT5pbmRleCgpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSklUU3R1YlJvdXRpbmVTZXQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0pJVFN0dWJSb3V0aW5lU2V0LmNwcAko
cmV2aXNpb24gMjcyNzEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSklUU3R1YlJv
dXRpbmVTZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjgsMTcgKzEyOCwyMiBAQCB2b2lkIEpJ
VFN0dWJSb3V0aW5lU2V0OjpkZWxldGVVbm1hcmtlZEplCiAgICAgbV9yb3V0aW5lcy5zaHJpbmso
ZHN0SW5kZXgpOwogfQogCi12b2lkIEpJVFN0dWJSb3V0aW5lU2V0Ojp0cmFjZU1hcmtlZFN0dWJS
b3V0aW5lcyhTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRv
cj4KKy8vdm9pZCBKSVRTdHViUm91dGluZVNldDo6dHJhY2VNYXJrZWRTdHViUm91dGluZXMoVmlz
aXRvciYgdmlzaXRvcikKK3ZvaWQgSklUU3R1YlJvdXRpbmVTZXQ6OnRyYWNlTWFya2VkU3R1YlJv
dXRpbmVzMShBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGZvciAoYXV0byYg
ZW50cnkgOiBtX3JvdXRpbmVzKSB7CiAgICAgICAgIEdDQXdhcmVKSVRTdHViUm91dGluZSogcm91
dGluZSA9IGVudHJ5LnJvdXRpbmU7CiAgICAgICAgIGlmICghcm91dGluZS0+bV9tYXlCZUV4ZWN1
dGluZykKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAKLSAgICAgICAgcm91dGluZS0+
bWFya1JlcXVpcmVkT2JqZWN0cyh2aXNpdG9yKTsKKyAgICAgICAgcm91dGluZS0+bWFya1JlcXVp
cmVkT2JqZWN0czEodmlzaXRvcik7CiAgICAgfQogfQogCisvL3RlbXBsYXRlIHZvaWQgSklUU3R1
YlJvdXRpbmVTZXQ6OnRyYWNlTWFya2VkU3R1YlJvdXRpbmVzKFNsb3RWaXNpdG9yJik7CisvL3Rl
bXBsYXRlIHZvaWQgSklUU3R1YlJvdXRpbmVTZXQ6OnRyYWNlTWFya2VkU3R1YlJvdXRpbmVzKFZl
cmlmaWVyU2xvdFZpc2l0b3ImKTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBF
TkFCTEUoSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSklUU3R1YlJvdXRp
bmVTZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9KSVRTdHVi
Um91dGluZVNldC5oCShyZXZpc2lvbiAyNzI3MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9KSVRTdHViUm91dGluZVNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw4ICszNSw5IEBA
IHVzaW5nIFdURjo6UmFuZ2U7CiAKIG5hbWVzcGFjZSBKU0MgewogCitjbGFzcyBBYnN0cmFjdFNs
b3RWaXNpdG9yOwogY2xhc3MgR0NBd2FyZUpJVFN0dWJSb3V0aW5lOwotY2xhc3MgU2xvdFZpc2l0
b3I7CisvL2NsYXNzIFNsb3RWaXNpdG9yOwogCiAjaWYgRU5BQkxFKEpJVCkKIApAQCAtNjMsOCAr
NjQsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBwcmVwYXJlRm9yQ29uc2VydmF0aXZlU2NhbigpOwog
ICAgIAogICAgIHZvaWQgZGVsZXRlVW5tYXJrZWRKZXR0aXNvbmVkU3R1YlJvdXRpbmVzKCk7Ci0g
ICAgCi0gICAgdm9pZCB0cmFjZU1hcmtlZFN0dWJSb3V0aW5lcyhTbG90VmlzaXRvciYpOworCisv
LyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIHRyYWNlTWFya2VkU3R1YlJvdXRp
bmVzKFZpc2l0b3ImKTsKKyAgICB2b2lkIHRyYWNlTWFya2VkU3R1YlJvdXRpbmVzMShBYnN0cmFj
dFNsb3RWaXNpdG9yJik7CiAgICAgCiBwcml2YXRlOgogICAgIHZvaWQgbWFya1Nsb3codWludHB0
cl90IGFkZHJlc3MpOwpAQCAtOTIsNyArOTQsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBtYXJrKHZv
aWQqKSB7IH0KICAgICB2b2lkIHByZXBhcmVGb3JDb25zZXJ2YXRpdmVTY2FuKCkgeyB9CiAgICAg
dm9pZCBkZWxldGVVbm1hcmtlZEpldHRpc29uZWRTdHViUm91dGluZXMoKSB7IH0KLSAgICB2b2lk
IHRyYWNlTWFya2VkU3R1YlJvdXRpbmVzKFNsb3RWaXNpdG9yJikgeyB9CisvLyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIHRyYWNlTWFya2VkU3R1YlJvdXRpbmVzKFZpc2l0b3Im
KSB7IH0KKyAgICB2b2lkIHRyYWNlTWFya2VkU3R1YlJvdXRpbmVzMShBYnN0cmFjdFNsb3RWaXNp
dG9yJikgeyB9CiB9OwogCiAjZW5kaWYgLy8gIUVOQUJMRShKSVQpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9NYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFp
bnQuY3BwCShyZXZpc2lvbiAyNzI3MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9N
YXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1LDEyICsy
NSwxMyBAQAogCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiTWFya1N0YWNrTWVyZ2lu
Z0NvbnN0cmFpbnQuaCIKLQogI2luY2x1ZGUgIkdDU2VnbWVudGVkQXJyYXlJbmxpbmVzLmgiCiAj
aW5jbHVkZSAiSlNDSW5saW5lcy5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIAorc3RhdGljIGNvbnN0
ZXhwciBib29sIG1sYW1WZXJib3NlID0gZmFsc2U7CisKIE1hcmtTdGFja01lcmdpbmdDb25zdHJh
aW50OjpNYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludChIZWFwJiBoZWFwKQogICAgIDogTWFya2lu
Z0NvbnN0cmFpbnQoIk1zbSIsICJNYXJrIFN0YWNrIE1lcmdpbmciLCBDb25zdHJhaW50Vm9sYXRp
bGl0eTo6R3JleWVkQnlFeGVjdXRpb24pCiAgICAgLCBtX2hlYXAoaGVhcCkKQEAgLTQxLDEyICs0
MiwxMiBAQCBNYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludDo6fk1hcmtTdGFja01lCiB7CiB9CiAK
LWRvdWJsZSBNYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludDo6cXVpY2tXb3JrRXN0aW1hdGUoU2xv
dFZpc2l0b3ImKQorZG91YmxlIE1hcmtTdGFja01lcmdpbmdDb25zdHJhaW50OjpxdWlja1dvcmtF
c3RpbWF0ZShBYnN0cmFjdFNsb3RWaXNpdG9yJikKIHsKICAgICByZXR1cm4gbV9oZWFwLm1fbXV0
YXRvck1hcmtTdGFjay0+c2l6ZSgpICsgbV9oZWFwLm1fcmFjZU1hcmtTdGFjay0+c2l6ZSgpOwog
fQogCi12b2lkIE1hcmtTdGFja01lcmdpbmdDb25zdHJhaW50OjpwcmVwYXJlVG9FeGVjdXRlSW1w
bChjb25zdCBBYnN0cmFjdExvY2tlciYsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBNYXJr
U3RhY2tNZXJnaW5nQ29uc3RyYWludDo6cHJlcGFyZVRvRXhlY3V0ZUltcGwoY29uc3QgQWJzdHJh
Y3RMb2NrZXImLCBBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIC8vIExvZ2dp
bmcgdGhlIHdvcmsgaGVyZSBlbnN1cmVzIHRoYXQgdGhlIGNvbnN0cmFpbnQgc29sdmVyIGtub3dz
IHRoYXQgaXQgZG9lc24ndCBuZWVkIHRvIHByb2R1Y2UKICAgICAvLyBhbnltb3JlIHdvcmsuCkBA
IC01Niw4ICs1NywxOCBAQCB2b2lkIE1hcmtTdGFja01lcmdpbmdDb25zdHJhaW50OjpwcmVwYXJl
CiAgICAgZGF0YUxvZ0lmKE9wdGlvbnM6OmxvZ0dDKCksICIoIiwgc2l6ZSwgIikiKTsKIH0KIAot
dm9pZCBNYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludDo6ZXhlY3V0ZUltcGwoU2xvdFZpc2l0b3Im
IHZpc2l0b3IpCit2b2lkIE1hcmtTdGFja01lcmdpbmdDb25zdHJhaW50OjpleGVjdXRlSW1wbChB
YnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogeworICAgIC8vIFdlIHdhbnQgdG8gc2tpcCB0
aGlzIGNvbnN0cmFpbnQgZm9yIHRoZSBHQyB2ZXJpZmllciBiZWNhdXNlOgorICAgIC8vIDEuIFRo
ZXJlIHNob3VsZCBiZSBubyBtdXRhdG9yIG1hcmtpbmcgYWN0aW9uIGJldHdlZW4gdGhlIEVuZCBw
aGFzZSBhbmQgdmVyaWZ5R0MoKS4KKyAgICAvLyAgICBIZW5jZSwgd2UgY2FuIGlnbm9yZSB0aHNl
IHN0YWNrcy4KKyAgICAvLyAyLiBUaGUgRW5kIHBoYXNlIGV4cGxpY3RseSBjYWxscyBpdGVyYXRl
RXhlY3V0aW5nQW5kQ29tcGlsaW5nQ29kZUJsb2NrcygpCisgICAgLy8gICAgdG8gYWRkIGV4ZWN1
dGluZyBDb2RlQmxvY2tzIHRvIG1faGVhcC5tX211dGF0b3JNYXJrU3RhY2suIFdlIHdhbnQgdG8K
KyAgICAvLyAgICBsZWF2ZSB0aG9zZSB1bnBlcnR1cmJlZC4KKyAgICBpZiAobV9oZWFwLm1faXNW
ZXJpZnlpbmdHQykKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG1sYW1WZXJib3NlKSBkYXRh
TG9nTG4oIiAgICBtbGFtIE1hcmtTdGFja01lcmdpbmdDb25zdHJhaW50OjpleGVjdXRlSW1wbCgp
IG1faGVhcC5tX211dGF0b3JNYXJrU3RhY2stPnRyYW5zZmVyVG8odmlzaXRvci5tdXRhdG9yTWFy
a1N0YWNrKCkpOyIpOwogICAgIG1faGVhcC5tX211dGF0b3JNYXJrU3RhY2stPnRyYW5zZmVyVG8o
dmlzaXRvci5tdXRhdG9yTWFya1N0YWNrKCkpOwogICAgIG1faGVhcC5tX3JhY2VNYXJrU3RhY2st
PnRyYW5zZmVyVG8odmlzaXRvci5tdXRhdG9yTWFya1N0YWNrKCkpOwogfQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3RhY2tNZXJnaW5nQ29uc3Ry
YWludC5oCShyZXZpc2lvbiAyNzI3MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9N
YXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCwxOCArMzAs
MTggQEAKIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBIZWFwOwotY2xhc3MgU2xvdFZpc2l0b3I7
CitjbGFzcyBBYnN0cmFjdFNsb3RWaXNpdG9yOwogCiBjbGFzcyBNYXJrU3RhY2tNZXJnaW5nQ29u
c3RyYWludCBmaW5hbCA6IHB1YmxpYyBNYXJraW5nQ29uc3RyYWludCB7CiBwdWJsaWM6CiAgICAg
TWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQoSGVhcCYpOwogICAgIH5NYXJrU3RhY2tNZXJnaW5n
Q29uc3RyYWludCgpIGZpbmFsOwogICAgIAotICAgIGRvdWJsZSBxdWlja1dvcmtFc3RpbWF0ZShT
bG90VmlzaXRvciYpIGZpbmFsOworICAgIGRvdWJsZSBxdWlja1dvcmtFc3RpbWF0ZShBYnN0cmFj
dFNsb3RWaXNpdG9yJikgZmluYWw7CiAgICAgCiBwcml2YXRlOgotICAgIHZvaWQgcHJlcGFyZVRv
RXhlY3V0ZUltcGwoY29uc3QgQWJzdHJhY3RMb2NrZXImIGNvbnN0cmFpbnRTb2x2aW5nTG9ja2Vy
LCBTbG90VmlzaXRvciYpIGZpbmFsOwotICAgIHZvaWQgZXhlY3V0ZUltcGwoU2xvdFZpc2l0b3Im
KSBmaW5hbDsKKyAgICB2b2lkIHByZXBhcmVUb0V4ZWN1dGVJbXBsKGNvbnN0IEFic3RyYWN0TG9j
a2VyJiBjb25zdHJhaW50U29sdmluZ0xvY2tlciwgQWJzdHJhY3RTbG90VmlzaXRvciYpIGZpbmFs
OworICAgIHZvaWQgZXhlY3V0ZUltcGwoQWJzdHJhY3RTbG90VmlzaXRvciYpIGZpbmFsOwogICAg
IAogICAgIEhlYXAmIG1faGVhcDsKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9NYXJrZWRCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L01hcmtlZEJsb2NrLmgJKHJldmlzaW9uIDI3MjcxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL01hcmtlZEJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSw3IEBACiAvKgog
ICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAwIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcp
CiAgKiAgQ29weXJpZ2h0IChDKSAyMDAxIFBldGVyIEtlbGx5IChwbWtAcG9zdC5jb20pCi0gKiAg
Q29weXJpZ2h0IChDKSAyMDAzLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogIENvcHlyaWdodCAoQykgMjAwMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKQEAgLTE1MSw3ICsxNTEsOCBAQCBwdWJsaWM6CiAgICAg
ICAgIAogICAgICAgICB2b2lkIHNocmluaygpOwogICAgICAgICAgICAgCi0gICAgICAgIHZvaWQg
dmlzaXRXZWFrU2V0KFNsb3RWaXNpdG9yJik7CisvLyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
VmlzaXRvcj4gdm9pZCB2aXNpdFdlYWtTZXQoVmlzaXRvciYpOworICAgICAgICB2b2lkIHZpc2l0
V2Vha1NldDEoQWJzdHJhY3RTbG90VmlzaXRvciYpOwogICAgICAgICB2b2lkIHJlYXBXZWFrU2V0
KCk7CiAgICAgICAgICAgICAKICAgICAgICAgLy8gV2hpbGUgYWxsb2NhdGluZyBmcm9tIGEgZnJl
ZSBsaXN0LCBNYXJrZWRCbG9jayB0ZW1wb3JhcmlseSBoYXMgYm9ndXMKQEAgLTIwMyw2ICsyMDQs
NyBAQCBwdWJsaWM6CiAgICAgICAgIAogICAgICAgICB2b2lkKiBzdGFydCgpIGNvbnN0IHsgcmV0
dXJuICZtX2Jsb2NrLT5hdG9tcygpWzBdOyB9CiAgICAgICAgIHZvaWQqIGVuZCgpIGNvbnN0IHsg
cmV0dXJuICZtX2Jsb2NrLT5hdG9tcygpW21fZW5kQXRvbV07IH0KKyAgICAgICAgdm9pZCogYXRv
bUF0KHNpemVfdCBpKSBjb25zdCB7IHJldHVybiAmbV9ibG9jay0+YXRvbXMoKVtpXTsgfQogICAg
ICAgICBib29sIGNvbnRhaW5zKHZvaWQqIHApIGNvbnN0IHsgcmV0dXJuIHN0YXJ0KCkgPD0gcCAm
JiBwIDwgZW5kKCk7IH0KIAogICAgICAgICB2b2lkIGR1bXBTdGF0ZShQcmludFN0cmVhbSYpOwpA
QCAtNDk4LDkgKzUwMCwxMSBAQCBpbmxpbmUgdm9pZCBNYXJrZWRCbG9jazo6SGFuZGxlOjpzaHJp
bmsoCiAgICAgbV93ZWFrU2V0LnNocmluaygpOwogfQogCi1pbmxpbmUgdm9pZCBNYXJrZWRCbG9j
azo6SGFuZGxlOjp2aXNpdFdlYWtTZXQoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3RlbXBsYXRl
PHR5cGVuYW1lIFZpc2l0b3I+CisvL2lubGluZSB2b2lkIE1hcmtlZEJsb2NrOjpIYW5kbGU6OnZp
c2l0V2Vha1NldChWaXNpdG9yJiB2aXNpdG9yKQoraW5saW5lIHZvaWQgTWFya2VkQmxvY2s6Okhh
bmRsZTo6dmlzaXRXZWFrU2V0MShBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewotICAg
IHJldHVybiBtX3dlYWtTZXQudmlzaXQodmlzaXRvcik7CisgICAgcmV0dXJuIG1fd2Vha1NldC52
aXNpdDEodmlzaXRvcik7CiB9CiAKIGlubGluZSB2b2lkIE1hcmtlZEJsb2NrOjpIYW5kbGU6OnJl
YXBXZWFrU2V0KCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZFNwYWNl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRTcGFj
ZS5jcHAJKHJldmlzaW9uIDI3MjcxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01h
cmtlZFNwYWNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcyLDEwICsyNzIsMTAgQEAgdm9pZCBN
YXJrZWRTcGFjZTo6ZW5hYmxlUHJlY2lzZUFsbG9jYXRpbwogICAgICAgICBtX3ByZWNpc2VBbGxv
Y2F0aW9uU2V0LT5hZGQoYWxsb2NhdGlvbi0+Y2VsbCgpKTsKIH0KIAotdm9pZCBNYXJrZWRTcGFj
ZTo6dmlzaXRXZWFrU2V0cyhTbG90VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgTWFya2VkU3BhY2U6
OnZpc2l0V2Vha1NldHMxKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0
byB2aXNpdCA9IFsmXSAoV2Vha1NldCogd2Vha1NldCkgewotICAgICAgICB3ZWFrU2V0LT52aXNp
dCh2aXNpdG9yKTsKKyAgICAgICAgd2Vha1NldC0+dmlzaXQxKHZpc2l0b3IpOwogICAgIH07CiAg
ICAgCiAgICAgbV9uZXdBY3RpdmVXZWFrU2V0cy5mb3JFYWNoKHZpc2l0KTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZFNwYWNlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkU3BhY2UuaAkocmV2aXNpb24gMjcyNzEwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkU3BhY2UuaAkod29ya2luZyBjb3B5KQpA
QCAtMzcsNiArMzcsNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAorY2xhc3MgQWJzdHJhY3RTbG90
VmlzaXRvcjsgLy8gbWxhbSBGSVhNRSA/CiBjbGFzcyBDb21wbGV0ZVN1YnNwYWNlOwogY2xhc3Mg
SGVhcDsKIGNsYXNzIEhlYXBDZWxsOwpAQCAtMTA1LDcgKzEwNiw3IEBAIHB1YmxpYzoKICAgICAK
ICAgICB2b2lkIHByZXBhcmVGb3JBbGxvY2F0aW9uKCk7CiAKLSAgICB2b2lkIHZpc2l0V2Vha1Nl
dHMoU2xvdFZpc2l0b3ImKTsKKyAgICB2b2lkIHZpc2l0V2Vha1NldHMxKEFic3RyYWN0U2xvdFZp
c2l0b3ImKTsKICAgICB2b2lkIHJlYXBXZWFrU2V0cygpOwogCiAgICAgTWFya2VkQmxvY2tTZXQm
IGJsb2NrcygpIHsgcmV0dXJuIG1fYmxvY2tzOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9NYXJraW5nQ29uc3RyYWludC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnQuY3BwCShyZXZpc2lvbiAyNzI3MTApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRl
ICJNYXJraW5nQ29uc3RyYWludC5oIgogCisjaW5jbHVkZSAiQWJzdHJhY3RTbG90VmlzaXRvcklu
bGluZXMuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiVmlzaXRDb3VudGVy
LmgiCiAKQEAgLTUxLDcgKzUyLDcgQEAgdm9pZCBNYXJraW5nQ29uc3RyYWludDo6cmVzZXRTdGF0
cygpCiAgICAgbV9sYXN0VmlzaXRDb3VudCA9IDA7CiB9CiAKLXZvaWQgTWFya2luZ0NvbnN0cmFp
bnQ6OmV4ZWN1dGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIE1hcmtpbmdDb25zdHJhaW50
OjpleGVjdXRlKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgVmlzaXRDb3Vu
dGVyIHZpc2l0Q291bnRlcih2aXNpdG9yKTsKICAgICBleGVjdXRlSW1wbCh2aXNpdG9yKTsKQEAg
LTYwLDE3ICs2MSwyMyBAQCB2b2lkIE1hcmtpbmdDb25zdHJhaW50OjpleGVjdXRlKFNsb3RWaXNp
CiAgICAgICAgIGRhdGFMb2coIigiLCBhYmJyZXZpYXRlZE5hbWUoKSwgIiB2aXNpdGVkICIsIHZp
c2l0Q291bnRlci52aXNpdENvdW50KCksICIgaW4gZXhlY3V0ZSkiKTsKIH0KIAotZG91YmxlIE1h
cmtpbmdDb25zdHJhaW50OjpxdWlja1dvcmtFc3RpbWF0ZShTbG90VmlzaXRvciYpCit2b2lkIE1h
cmtpbmdDb25zdHJhaW50OjpleGVjdXRlU3luY2hyb25vdXNseShBYnN0cmFjdFNsb3RWaXNpdG9y
JiB2aXNpdG9yKQoreworICAgIHByZXBhcmVUb0V4ZWN1dGVJbXBsKE5vTG9ja2luZ05lY2Vzc2Fy
eSwgdmlzaXRvcik7CisgICAgZXhlY3V0ZUltcGwodmlzaXRvcik7Cit9CisKK2RvdWJsZSBNYXJr
aW5nQ29uc3RyYWludDo6cXVpY2tXb3JrRXN0aW1hdGUoQWJzdHJhY3RTbG90VmlzaXRvciYpCiB7
CiAgICAgcmV0dXJuIDA7CiB9CiAKLWRvdWJsZSBNYXJraW5nQ29uc3RyYWludDo6d29ya0VzdGlt
YXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorZG91YmxlIE1hcmtpbmdDb25zdHJhaW50Ojp3b3Jr
RXN0aW1hdGUoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICByZXR1cm4gbGFz
dFZpc2l0Q291bnQoKSArIHF1aWNrV29ya0VzdGltYXRlKHZpc2l0b3IpOwogfQogCi12b2lkIE1h
cmtpbmdDb25zdHJhaW50OjpwcmVwYXJlVG9FeGVjdXRlKGNvbnN0IEFic3RyYWN0TG9ja2VyJiBj
b25zdHJhaW50U29sdmluZ0xvY2tlciwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIE1hcmtp
bmdDb25zdHJhaW50OjpwcmVwYXJlVG9FeGVjdXRlKGNvbnN0IEFic3RyYWN0TG9ja2VyJiBjb25z
dHJhaW50U29sdmluZ0xvY2tlciwgQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAg
ICBkYXRhTG9nSWYoT3B0aW9uczo6bG9nR0MoKSwgYWJicmV2aWF0ZWROYW1lKCkpOwogICAgIFZp
c2l0Q291bnRlciB2aXNpdENvdW50ZXIodmlzaXRvcik7CkBAIC04MCw3ICs4Nyw3IEBAIHZvaWQg
TWFya2luZ0NvbnN0cmFpbnQ6OnByZXBhcmVUb0V4ZWN1dGUKICAgICAgICAgZGF0YUxvZygiKCIs
IGFiYnJldmlhdGVkTmFtZSgpLCAiIHZpc2l0ZWQgIiwgdmlzaXRDb3VudGVyLnZpc2l0Q291bnQo
KSwgIiBpbiBwcmVwYXJlVG9FeGVjdXRlKSIpOwogfQogCi12b2lkIE1hcmtpbmdDb25zdHJhaW50
Ojpkb1BhcmFsbGVsV29yayhTbG90VmlzaXRvciYgdmlzaXRvciwgU2hhcmVkVGFzazx2b2lkKFNs
b3RWaXNpdG9yJik+JiB0YXNrKQordm9pZCBNYXJraW5nQ29uc3RyYWludDo6ZG9QYXJhbGxlbFdv
cmsoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvciwgU2hhcmVkVGFzazx2b2lkKEFic3RyYWN0
U2xvdFZpc2l0b3ImKT4mIHRhc2spCiB7CiAgICAgVmlzaXRDb3VudGVyIHZpc2l0Q291bnRlcih2
aXNpdG9yKTsKICAgICB0YXNrLnJ1bih2aXNpdG9yKTsKQEAgLTkyLDcgKzk5LDcgQEAgdm9pZCBN
YXJraW5nQ29uc3RyYWludDo6ZG9QYXJhbGxlbFdvcmsoUwogICAgIH0KIH0KIAotdm9pZCBNYXJr
aW5nQ29uc3RyYWludDo6cHJlcGFyZVRvRXhlY3V0ZUltcGwoY29uc3QgQWJzdHJhY3RMb2NrZXIm
LCBTbG90VmlzaXRvciYpCit2b2lkIE1hcmtpbmdDb25zdHJhaW50OjpwcmVwYXJlVG9FeGVjdXRl
SW1wbChjb25zdCBBYnN0cmFjdExvY2tlciYsIEFic3RyYWN0U2xvdFZpc2l0b3ImKQogewogfQog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50
LmgJKHJldmlzaW9uIDI3MjcxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtp
bmdDb25zdHJhaW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDcgQEAKIG5hbWVzcGFj
ZSBKU0MgewogCiBjbGFzcyBNYXJraW5nQ29uc3RyYWludFNldDsKLWNsYXNzIFNsb3RWaXNpdG9y
OworY2xhc3MgQWJzdHJhY3RTbG90VmlzaXRvcjsKIAogY2xhc3MgTWFya2luZ0NvbnN0cmFpbnQg
ewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKE1hcmtpbmdDb25zdHJhaW50KTsKQEAgLTYwLDE1
ICs2MCwxNiBAQCBwdWJsaWM6CiAgICAgCiAgICAgc2l6ZV90IGxhc3RWaXNpdENvdW50KCkgY29u
c3QgeyByZXR1cm4gbV9sYXN0VmlzaXRDb3VudDsgfQogICAgIAotICAgIHZvaWQgZXhlY3V0ZShT
bG90VmlzaXRvciYpOwotICAgIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIHZpcnR1YWwgZG91Ymxl
IHF1aWNrV29ya0VzdGltYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKTsKKyAgICB2b2lkIGV4ZWN1
dGUoQWJzdHJhY3RTbG90VmlzaXRvciYpOworCisgICAgLy8gRklYTUUgbWxhbQorICAgIEpTX0VY
UE9SVF9QUklWQVRFIHZpcnR1YWwgZG91YmxlIHF1aWNrV29ya0VzdGltYXRlKEFic3RyYWN0U2xv
dFZpc2l0b3ImIHZpc2l0b3IpOwogICAgIAotICAgIGRvdWJsZSB3b3JrRXN0aW1hdGUoU2xvdFZp
c2l0b3ImIHZpc2l0b3IpOworICAgIGRvdWJsZSB3b3JrRXN0aW1hdGUoQWJzdHJhY3RTbG90Vmlz
aXRvciYgdmlzaXRvcik7CiAgICAgCi0gICAgdm9pZCBwcmVwYXJlVG9FeGVjdXRlKGNvbnN0IEFi
c3RyYWN0TG9ja2VyJiBjb25zdHJhaW50U29sdmluZ0xvY2tlciwgU2xvdFZpc2l0b3ImKTsKKyAg
ICB2b2lkIHByZXBhcmVUb0V4ZWN1dGUoY29uc3QgQWJzdHJhY3RMb2NrZXImIGNvbnN0cmFpbnRT
b2x2aW5nTG9ja2VyLCBBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAgICAgCi0gICAgdm9pZCBkb1Bh
cmFsbGVsV29yayhTbG90VmlzaXRvciYsIFNoYXJlZFRhc2s8dm9pZChTbG90VmlzaXRvciYpPiYp
OworICAgIHZvaWQgZG9QYXJhbGxlbFdvcmsoQWJzdHJhY3RTbG90VmlzaXRvciYsIFNoYXJlZFRh
c2s8dm9pZChBYnN0cmFjdFNsb3RWaXNpdG9yJik+Jik7CiAgICAgCiAgICAgQ29uc3RyYWludFZv
bGF0aWxpdHkgdm9sYXRpbGl0eSgpIGNvbnN0IHsgcmV0dXJuIG1fdm9sYXRpbGl0eTsgfQogICAg
IApAQCAtNzYsOSArNzcsMTEgQEAgcHVibGljOgogICAgIENvbnN0cmFpbnRQYXJhbGxlbGlzbSBw
YXJhbGxlbGlzbSgpIGNvbnN0IHsgcmV0dXJuIG1fcGFyYWxsZWxpc207IH0KIAogcHJvdGVjdGVk
OgotICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlSW1wbChTbG90VmlzaXRvciYpID0gMDsKLSAgICBK
U19FWFBPUlRfUFJJVkFURSB2aXJ0dWFsIHZvaWQgcHJlcGFyZVRvRXhlY3V0ZUltcGwoY29uc3Qg
QWJzdHJhY3RMb2NrZXImIGNvbnN0cmFpbnRTb2x2aW5nTG9ja2VyLCBTbG90VmlzaXRvciYpOwot
ICAgIAorICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlSW1wbChBYnN0cmFjdFNsb3RWaXNpdG9yJikg
PSAwOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZpcnR1YWwgdm9pZCBwcmVwYXJlVG9FeGVjdXRl
SW1wbChjb25zdCBBYnN0cmFjdExvY2tlciYgY29uc3RyYWludFNvbHZpbmdMb2NrZXIsIEFic3Ry
YWN0U2xvdFZpc2l0b3ImKTsKKworICAgIHZvaWQgZXhlY3V0ZVN5bmNocm9ub3VzbHkoQWJzdHJh
Y3RTbG90VmlzaXRvciYpOworCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBNYXJraW5nQ29u
c3RyYWludFNldDsgLy8gU28gaXQgY2FuIHNldCBtX2luZGV4LgogICAgIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnRTZXQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50U2V0LmNwcAko
cmV2aXNpb24gMjcyNzEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0Nv
bnN0cmFpbnRTZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Myw3ICs2Myw3IEBAIHZvaWQgTWFy
a2luZ0NvbnN0cmFpbnRTZXQ6OmRpZFN0YXJ0TWFya2kKICAgICBtX2l0ZXJhdGlvbiA9IDE7CiB9
CiAKLXZvaWQgTWFya2luZ0NvbnN0cmFpbnRTZXQ6OmFkZChDU3RyaW5nIGFiYnJldmlhdGVkTmFt
ZSwgQ1N0cmluZyBuYW1lLCA6OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3ImKT4gZnVuY3Rpb24s
IENvbnN0cmFpbnRWb2xhdGlsaXR5IHZvbGF0aWxpdHksIENvbnN0cmFpbnRDb25jdXJyZW5jeSBj
b25jdXJyZW5jeSwgQ29uc3RyYWludFBhcmFsbGVsaXNtIHBhcmFsbGVsaXNtKQordm9pZCBNYXJr
aW5nQ29uc3RyYWludFNldDo6YWRkKENTdHJpbmcgYWJicmV2aWF0ZWROYW1lLCBDU3RyaW5nIG5h
bWUsIDo6RnVuY3Rpb248dm9pZChBYnN0cmFjdFNsb3RWaXNpdG9yJik+IGZ1bmN0aW9uLCBDb25z
dHJhaW50Vm9sYXRpbGl0eSB2b2xhdGlsaXR5LCBDb25zdHJhaW50Q29uY3VycmVuY3kgY29uY3Vy
cmVuY3ksIENvbnN0cmFpbnRQYXJhbGxlbGlzbSBwYXJhbGxlbGlzbSkKIHsKICAgICBhZGQobWFr
ZVVuaXF1ZTxTaW1wbGVNYXJraW5nQ29uc3RyYWludD4oV1RGTW92ZShhYmJyZXZpYXRlZE5hbWUp
LCBXVEZNb3ZlKG5hbWUpLCBXVEZNb3ZlKGZ1bmN0aW9uKSwgdm9sYXRpbGl0eSwgY29uY3VycmVu
Y3ksIHBhcmFsbGVsaXNtKSk7CiB9CkBAIC03OCwxNCArNzgsMTQgQEAgdm9pZCBNYXJraW5nQ29u
c3RyYWludFNldDo6YWRkKAogICAgIG1fc2V0LmFwcGVuZChXVEZNb3ZlKGNvbnN0cmFpbnQpKTsK
IH0KIAotYm9vbCBNYXJraW5nQ29uc3RyYWludFNldDo6ZXhlY3V0ZUNvbnZlcmdlbmNlKFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQorYm9vbCBNYXJraW5nQ29uc3RyYWludFNldDo6ZXhlY3V0ZUNvbnZl
cmdlbmNlKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgYm9vbCByZXN1bHQg
PSBleGVjdXRlQ29udmVyZ2VuY2VJbXBsKHZpc2l0b3IpOwogICAgIGRhdGFMb2dJZihPcHRpb25z
Ojpsb2dHQygpLCAiICIpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLWJvb2wgTWFya2luZ0Nv
bnN0cmFpbnRTZXQ6OmlzV2F2ZWZyb250QWR2YW5jaW5nKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQor
Ym9vbCBNYXJraW5nQ29uc3RyYWludFNldDo6aXNXYXZlZnJvbnRBZHZhbmNpbmcoQWJzdHJhY3RT
bG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBmb3IgKE1hcmtpbmdDb25zdHJhaW50KiBvdXRn
cm93dGggOiBtX291dGdyb3d0aHMpIHsKICAgICAgICAgaWYgKG91dGdyb3d0aC0+d29ya0VzdGlt
YXRlKHZpc2l0b3IpKQpAQCAtOTQsNyArOTQsNyBAQCBib29sIE1hcmtpbmdDb25zdHJhaW50U2V0
Ojppc1dhdmVmcm9udEFkCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIE1hcmtpbmdDb25z
dHJhaW50U2V0OjpleGVjdXRlQ29udmVyZ2VuY2VJbXBsKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQor
Ym9vbCBNYXJraW5nQ29uc3RyYWludFNldDo6ZXhlY3V0ZUNvbnZlcmdlbmNlSW1wbChBYnN0cmFj
dFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFN1cGVyU2FtcGxlclNjb3BlIHN1cGVyU2Ft
cGxlclNjb3BlKGZhbHNlKTsKICAgICBNYXJraW5nQ29uc3RyYWludFNvbHZlciBzb2x2ZXIoKnRo
aXMpOwpAQCAtMTY2LDEwICsxNjYsMTAgQEAgYm9vbCBNYXJraW5nQ29uc3RyYWludFNldDo6ZXhl
Y3V0ZUNvbnZlcgogICAgIHJldHVybiAhc29sdmVyLmRpZFZpc2l0U29tZXRoaW5nKCk7CiB9CiAK
LXZvaWQgTWFya2luZ0NvbnN0cmFpbnRTZXQ6OmV4ZWN1dGVBbGwoU2xvdFZpc2l0b3ImIHZpc2l0
b3IpCit2b2lkIE1hcmtpbmdDb25zdHJhaW50U2V0OjpleGVjdXRlQWxsU3luY2hyb25vdXNseShB
YnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGZvciAoYXV0byYgY29uc3RyYWlu
dCA6IG1fc2V0KQotICAgICAgICBjb25zdHJhaW50LT5leGVjdXRlKHZpc2l0b3IpOworICAgICAg
ICBjb25zdHJhaW50LT5leGVjdXRlU3luY2hyb25vdXNseSh2aXNpdG9yKTsKICAgICBkYXRhTG9n
SWYoT3B0aW9uczo6bG9nR0MoKSwgIiAiKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnRTZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludFNldC5oCShyZXZpc2lvbiAyNzI3MTAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludFNldC5oCSh3
b3JraW5nIGNvcHkpCkBAIC00NiwxNCArNDYsMTQgQEAgcHVibGljOgogICAgIHZvaWQgYWRkKAog
ICAgICAgICBDU3RyaW5nIGFiYnJldmlhdGVkTmFtZSwKICAgICAgICAgQ1N0cmluZyBuYW1lLAot
ICAgICAgICA6OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3ImKT4sCisgICAgICAgIDo6RnVuY3Rp
b248dm9pZChBYnN0cmFjdFNsb3RWaXNpdG9yJik+LAogICAgICAgICBDb25zdHJhaW50Vm9sYXRp
bGl0eSwKICAgICAgICAgQ29uc3RyYWludENvbmN1cnJlbmN5ID0gQ29uc3RyYWludENvbmN1cnJl
bmN5OjpDb25jdXJyZW50LAogICAgICAgICBDb25zdHJhaW50UGFyYWxsZWxpc20gPSBDb25zdHJh
aW50UGFyYWxsZWxpc206OlNlcXVlbnRpYWwpOwogICAgIAogICAgIHZvaWQgYWRkKAogICAgICAg
ICBDU3RyaW5nIGFiYnJldmlhdGVkTmFtZSwgQ1N0cmluZyBuYW1lLAotICAgICAgICA6OkZ1bmN0
aW9uPHZvaWQoU2xvdFZpc2l0b3ImKT4gZnVuYywKKyAgICAgICAgOjpGdW5jdGlvbjx2b2lkKEFi
c3RyYWN0U2xvdFZpc2l0b3ImKT4gZnVuYywKICAgICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHkg
dm9sYXRpbGl0eSwKICAgICAgICAgQ29uc3RyYWludFBhcmFsbGVsaXNtIHBhcmFsbGVsaXNtKQog
ICAgIHsKQEAgLTY0LDIwICs2NCwyMCBAQCBwdWJsaWM6CiAgICAgCiAgICAgLy8gQXNzdW1pbmcg
dGhhdCB0aGUgbWFyayBzdGFja3MgYXJlIGFsbCBlbXB0eSwgdGhpcyB3aWxsIGdpdmUgeW91IGEg
Z3Vlc3MgYXMgdG8gd2hldGhlciBvcgogICAgIC8vIG5vdCB0aGUgd2F2ZWZyb250IGlzIGFkdmFu
Y2luZy4KLSAgICBib29sIGlzV2F2ZWZyb250QWR2YW5jaW5nKFNsb3RWaXNpdG9yJik7Ci0gICAg
Ym9vbCBpc1dhdmVmcm9udFJldHJlYXRpbmcoU2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsgcmV0dXJu
ICFpc1dhdmVmcm9udEFkdmFuY2luZyh2aXNpdG9yKTsgfQorICAgIGJvb2wgaXNXYXZlZnJvbnRB
ZHZhbmNpbmcoQWJzdHJhY3RTbG90VmlzaXRvciYpOworICAgIGJvb2wgaXNXYXZlZnJvbnRSZXRy
ZWF0aW5nKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsgcmV0dXJuICFpc1dhdmVmcm9u
dEFkdmFuY2luZyh2aXNpdG9yKTsgfQogICAgIAogICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGlz
IGV4ZWN1dGVkIGFsbCBjb25zdHJhaW50cyBhbmQgbm9uZSBvZiB0aGVtIHByb2R1Y2VkIG5ldyB3
b3JrLiBUaGlzCiAgICAgLy8gYXNzdW1lcyB0aGF0IHlvdSd2ZSBhbHJhZWR5IHZpc2l0ZWQgcm9v
dHMgYW5kIGRyYWluZWQgZnJvbSB0aGVyZS4KLSAgICBib29sIGV4ZWN1dGVDb252ZXJnZW5jZShT
bG90VmlzaXRvciYpOwotICAgIAorICAgIGJvb2wgZXhlY3V0ZUNvbnZlcmdlbmNlKEFic3RyYWN0
U2xvdFZpc2l0b3ImKTsKKwogICAgIC8vIFNpbXBseSBydW5zIGFsbCBjb25zdHJhaW50cyB3aXRo
b3V0IGFueSBzaGVuYW5pZ2Fucy4KLSAgICB2b2lkIGV4ZWN1dGVBbGwoU2xvdFZpc2l0b3ImKTsK
KyAgICB2b2lkIGV4ZWN1dGVBbGxTeW5jaHJvbm91c2x5KEFic3RyYWN0U2xvdFZpc2l0b3ImKTsK
ICAgICAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIE1hcmtpbmdDb25zdHJhaW50U29sdmVy
OwotICAgIAotICAgIGJvb2wgZXhlY3V0ZUNvbnZlcmdlbmNlSW1wbChTbG90VmlzaXRvciYpOwor
CisgICAgYm9vbCBleGVjdXRlQ29udmVyZ2VuY2VJbXBsKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsK
ICAgICAKICAgICBIZWFwJiBtX2hlYXA7CiAgICAgQml0VmVjdG9yIG1fdW5leGVjdXRlZFJvb3Rz
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnRTb2x2
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdD
b25zdHJhaW50U29sdmVyLmNwcAkocmV2aXNpb24gMjcyNzEwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zMyw3ICszMyw3IEBAIG5hbWVzcGFjZSBKU0MgeyAKIAogTWFya2luZ0NvbnN0cmFpbnRTb2x2
ZXI6Ok1hcmtpbmdDb25zdHJhaW50U29sdmVyKE1hcmtpbmdDb25zdHJhaW50U2V0JiBzZXQpCiAg
ICAgOiBtX2hlYXAoc2V0Lm1faGVhcCkKLSAgICAsIG1fbWFpblZpc2l0b3IobV9oZWFwLmNvbGxl
Y3RvclNsb3RWaXNpdG9yKCkpCisgICAgLCBtX21haW5WaXNpdG9yKG1faGVhcC5jb2xsZWN0b3JT
bG90VmlzaXRvcigpKSAvLyBtbGFtIEZJWE1FIG5lZWQgc3VwcG9ydCBmb3IgVmVyaWZpZXJTbG90
VmlzaXRvcgogICAgICwgbV9zZXQoc2V0KQogewogICAgIG1faGVhcC5mb3JFYWNoU2xvdFZpc2l0
b3IoCkBAIC0xNTAsMTMgKzE1MCwxMyBAQCB2b2lkIE1hcmtpbmdDb25zdHJhaW50U29sdmVyOjpl
eGVjdXRlKE1hCiAgICAgbV9leGVjdXRlZC5zZXQoY29uc3RyYWludC5pbmRleCgpKTsKIH0KIAot
dm9pZCBNYXJraW5nQ29uc3RyYWludFNvbHZlcjo6YWRkUGFyYWxsZWxUYXNrKFJlZlB0cjxTaGFy
ZWRUYXNrPHZvaWQoU2xvdFZpc2l0b3ImKT4+IHRhc2ssIE1hcmtpbmdDb25zdHJhaW50JiBjb25z
dHJhaW50KQordm9pZCBNYXJraW5nQ29uc3RyYWludFNvbHZlcjo6YWRkUGFyYWxsZWxUYXNrKFJl
ZlB0cjxTaGFyZWRUYXNrPHZvaWQoQWJzdHJhY3RTbG90VmlzaXRvciYpPj4gdGFzaywgTWFya2lu
Z0NvbnN0cmFpbnQmIGNvbnN0cmFpbnQpCiB7CiAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayht
X2xvY2spOwogICAgIG1fdG9FeGVjdXRlSW5QYXJhbGxlbC5hcHBlbmQoVGFza1dpdGhDb25zdHJh
aW50KFdURk1vdmUodGFzayksICZjb25zdHJhaW50KSk7CiB9CiAKLXZvaWQgTWFya2luZ0NvbnN0
cmFpbnRTb2x2ZXI6OnJ1bkV4ZWN1dGlvblRocmVhZChTbG90VmlzaXRvciYgdmlzaXRvciwgU2No
ZWR1bGVyUHJlZmVyZW5jZSBwcmVmZXJlbmNlLCBTY29wZWRMYW1iZGE8T3B0aW9uYWw8dW5zaWdu
ZWQ+KCk+IHBpY2tOZXh0KQordm9pZCBNYXJraW5nQ29uc3RyYWludFNvbHZlcjo6cnVuRXhlY3V0
aW9uVGhyZWFkKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIFNjaGVkdWxlclByZWZlcmVu
Y2UgcHJlZmVyZW5jZSwgU2NvcGVkTGFtYmRhPE9wdGlvbmFsPHVuc2lnbmVkPigpPiBwaWNrTmV4
dCkKIHsKICAgICBmb3IgKDs7KSB7CiAgICAgICAgIGJvb2wgZG9QYXJhbGxlbFdvcmtNb2RlOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXIu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3Ry
YWludFNvbHZlci5oCShyZXZpc2lvbiAyNzI3MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9NYXJraW5nQ29uc3RyYWludFNvbHZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC02NSwxNSAr
NjUsMTUgQEAgcHVibGljOgogICAgIHZvaWQgZXhlY3V0ZShNYXJraW5nQ29uc3RyYWludCYpOwog
ICAgIAogICAgIC8vIFBhcmFsbGVsIGNvbnN0cmFpbnRzIGNhbiBhZGQgcGFyYWxsZWwgdGFza3Mu
Ci0gICAgdm9pZCBhZGRQYXJhbGxlbFRhc2soUmVmUHRyPFNoYXJlZFRhc2s8dm9pZChTbG90Vmlz
aXRvciYpPj4sIE1hcmtpbmdDb25zdHJhaW50Jik7CisgICAgdm9pZCBhZGRQYXJhbGxlbFRhc2so
UmVmUHRyPFNoYXJlZFRhc2s8dm9pZChBYnN0cmFjdFNsb3RWaXNpdG9yJik+PiwgTWFya2luZ0Nv
bnN0cmFpbnQmKTsKICAgICAKIHByaXZhdGU6Ci0gICAgdm9pZCBydW5FeGVjdXRpb25UaHJlYWQo
U2xvdFZpc2l0b3ImLCBTY2hlZHVsZXJQcmVmZXJlbmNlLCBTY29wZWRMYW1iZGE8T3B0aW9uYWw8
dW5zaWduZWQ+KCk+IHBpY2tOZXh0KTsKKyAgICB2b2lkIHJ1bkV4ZWN1dGlvblRocmVhZChBYnN0
cmFjdFNsb3RWaXNpdG9yJiwgU2NoZWR1bGVyUHJlZmVyZW5jZSwgU2NvcGVkTGFtYmRhPE9wdGlv
bmFsPHVuc2lnbmVkPigpPiBwaWNrTmV4dCk7CiAgICAgCiAgICAgc3RydWN0IFRhc2tXaXRoQ29u
c3RyYWludCB7CiAgICAgICAgIFRhc2tXaXRoQ29uc3RyYWludCgpIHsgfQogICAgICAgICAKLSAg
ICAgICAgVGFza1dpdGhDb25zdHJhaW50KFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoU2xvdFZpc2l0
b3ImKT4+IHRhc2ssIE1hcmtpbmdDb25zdHJhaW50KiBjb25zdHJhaW50KQorICAgICAgICBUYXNr
V2l0aENvbnN0cmFpbnQoUmVmUHRyPFNoYXJlZFRhc2s8dm9pZChBYnN0cmFjdFNsb3RWaXNpdG9y
Jik+PiB0YXNrLCBNYXJraW5nQ29uc3RyYWludCogY29uc3RyYWludCkKICAgICAgICAgICAgIDog
dGFzayhXVEZNb3ZlKHRhc2spKQogICAgICAgICAgICAgLCBjb25zdHJhaW50KGNvbnN0cmFpbnQp
CiAgICAgICAgIHsKQEAgLTg1LDEyICs4NSwxMiBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAg
ICYmIGNvbnN0cmFpbnQgPT0gb3RoZXIuY29uc3RyYWludDsKICAgICAgICAgfQogICAgICAgICAK
LSAgICAgICAgUmVmUHRyPFNoYXJlZFRhc2s8dm9pZChTbG90VmlzaXRvciYpPj4gdGFzazsKKyAg
ICAgICAgUmVmUHRyPFNoYXJlZFRhc2s8dm9pZChBYnN0cmFjdFNsb3RWaXNpdG9yJik+PiB0YXNr
OwogICAgICAgICBNYXJraW5nQ29uc3RyYWludCogY29uc3RyYWludCB7IG51bGxwdHIgfTsKICAg
ICB9OwogICAgIAogICAgIEhlYXAmIG1faGVhcDsKLSAgICBTbG90VmlzaXRvciYgbV9tYWluVmlz
aXRvcjsKKyAgICBBYnN0cmFjdFNsb3RWaXNpdG9yJiBtX21haW5WaXNpdG9yOwogICAgIE1hcmtp
bmdDb25zdHJhaW50U2V0JiBtX3NldDsKICAgICBCaXRWZWN0b3IgbV9leGVjdXRlZDsKICAgICBE
ZXF1ZTxUYXNrV2l0aENvbnN0cmFpbnQsIDMyPiBtX3RvRXhlY3V0ZUluUGFyYWxsZWw7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9QcmVjaXNlQWxsb2NhdGlvbi5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvUHJlY2lzZUFsbG9jYXRpb24uY3Bw
CShyZXZpc2lvbiAyNzI3MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9QcmVjaXNl
QWxsb2NhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwMCwxMSArMjAwLDE2IEBAIHZvaWQg
UHJlY2lzZUFsbG9jYXRpb246OnNocmluaygpCiAgICAgbV93ZWFrU2V0LnNocmluaygpOwogfQog
Ci12b2lkIFByZWNpc2VBbGxvY2F0aW9uOjp2aXNpdFdlYWtTZXQoU2xvdFZpc2l0b3ImIHZpc2l0
b3IpCisvL3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+CisvL3ZvaWQgUHJlY2lzZUFsbG9jYXRp
b246OnZpc2l0V2Vha1NldChWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBQcmVjaXNlQWxsb2NhdGlv
bjo6dmlzaXRXZWFrU2V0MTAwMChBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewotICAg
IG1fd2Vha1NldC52aXNpdCh2aXNpdG9yKTsKKyAgICBtX3dlYWtTZXQudmlzaXQxKHZpc2l0b3Ip
OwogfQogCisvL3RlbXBsYXRlIHZvaWQgUHJlY2lzZUFsbG9jYXRpb246OnZpc2l0V2Vha1NldChT
bG90VmlzaXRvciYpOworLy90ZW1wbGF0ZSB2b2lkIFByZWNpc2VBbGxvY2F0aW9uOjp2aXNpdFdl
YWtTZXQoVmVyaWZpZXJTbG90VmlzaXRvciYpOworCiB2b2lkIFByZWNpc2VBbGxvY2F0aW9uOjpy
ZWFwV2Vha1NldCgpCiB7CiAgICAgcmV0dXJuIG1fd2Vha1NldC5yZWFwKCk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9QcmVjaXNlQWxsb2NhdGlvbi5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1ByZWNpc2VBbGxvY2F0aW9uLmgJKHJldmlzaW9u
IDI3MjcxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1ByZWNpc2VBbGxvY2F0aW9u
LmgJKHdvcmtpbmcgY29weSkKQEAgLTgyLDcgKzgyLDggQEAgcHVibGljOgogICAgIAogICAgIHZv
aWQgc2hyaW5rKCk7CiAgICAgCi0gICAgdm9pZCB2aXNpdFdlYWtTZXQoU2xvdFZpc2l0b3ImKTsK
Ky8vICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgdmlzaXRXZWFrU2V0KFZpc2l0
b3ImKTsKKyAgICB2b2lkIHZpc2l0V2Vha1NldDEwMDAoQWJzdHJhY3RTbG90VmlzaXRvciYpOwog
ICAgIHZvaWQgcmVhcFdlYWtTZXQoKTsKICAgICAKICAgICB2b2lkIGNsZWFyTmV3bHlBbGxvY2F0
ZWQoKSB7IG1faXNOZXdseUFsbG9jYXRlZCA9IGZhbHNlOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9TaW1wbGVNYXJraW5nQ29uc3RyYWludC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQuY3BwCShy
ZXZpc2lvbiAyNzI3MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TaW1wbGVNYXJr
aW5nQ29uc3RyYWludC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDcgQEAgbmFtZXNw
YWNlIEpTQyB7CiAKIFNpbXBsZU1hcmtpbmdDb25zdHJhaW50OjpTaW1wbGVNYXJraW5nQ29uc3Ry
YWludCgKICAgICBDU3RyaW5nIGFiYnJldmlhdGVkTmFtZSwgQ1N0cmluZyBuYW1lLAotICAgIDo6
RnVuY3Rpb248dm9pZChTbG90VmlzaXRvciYpPiBleGVjdXRlRnVuY3Rpb24sCisgICAgOjpGdW5j
dGlvbjx2b2lkKEFic3RyYWN0U2xvdFZpc2l0b3ImKT4gZXhlY3V0ZUZ1bmN0aW9uLAogICAgIENv
bnN0cmFpbnRWb2xhdGlsaXR5IHZvbGF0aWxpdHksIENvbnN0cmFpbnRDb25jdXJyZW5jeSBjb25j
dXJyZW5jeSwKICAgICBDb25zdHJhaW50UGFyYWxsZWxpc20gcGFyYWxsZWxpc20pCiAgICAgOiBN
YXJraW5nQ29uc3RyYWludChXVEZNb3ZlKGFiYnJldmlhdGVkTmFtZSksIFdURk1vdmUobmFtZSks
IHZvbGF0aWxpdHksIGNvbmN1cnJlbmN5LCBwYXJhbGxlbGlzbSkKQEAgLTQyLDcgKzQyLDcgQEAg
U2ltcGxlTWFya2luZ0NvbnN0cmFpbnQ6On5TaW1wbGVNYXJraW5nQwogewogfQogCi12b2lkIFNp
bXBsZU1hcmtpbmdDb25zdHJhaW50OjpleGVjdXRlSW1wbChTbG90VmlzaXRvciYgdmlzaXRvcikK
K3ZvaWQgU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQ6OmV4ZWN1dGVJbXBsKEFic3RyYWN0U2xvdFZp
c2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgbV9leGVjdXRlRnVuY3Rpb24odmlzaXRvcik7CiB9Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TaW1wbGVNYXJraW5nQ29uc3RyYWludC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1NpbXBsZU1hcmtpbmdD
b25zdHJhaW50LmgJKHJldmlzaW9uIDI3MjcxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL1NpbXBsZU1hcmtpbmdDb25zdHJhaW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDE0ICsz
NywxNCBAQCBjbGFzcyBTaW1wbGVNYXJraW5nQ29uc3RyYWludCBmaW5hbCA6IHB1CiBwdWJsaWM6
CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQoCiAgICAgICAg
IENTdHJpbmcgYWJicmV2aWF0ZWROYW1lLCBDU3RyaW5nIG5hbWUsCi0gICAgICAgIDo6RnVuY3Rp
b248dm9pZChTbG90VmlzaXRvciYpPiwKKyAgICAgICAgOjpGdW5jdGlvbjx2b2lkKEFic3RyYWN0
U2xvdFZpc2l0b3ImKT4sCiAgICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5LAogICAgICAgICBD
b25zdHJhaW50Q29uY3VycmVuY3kgPSBDb25zdHJhaW50Q29uY3VycmVuY3k6OkNvbmN1cnJlbnQs
CiAgICAgICAgIENvbnN0cmFpbnRQYXJhbGxlbGlzbSA9IENvbnN0cmFpbnRQYXJhbGxlbGlzbTo6
U2VxdWVudGlhbCk7CiAgICAgCiAgICAgU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQoCiAgICAgICAg
IENTdHJpbmcgYWJicmV2aWF0ZWROYW1lLCBDU3RyaW5nIG5hbWUsCi0gICAgICAgIDo6RnVuY3Rp
b248dm9pZChTbG90VmlzaXRvciYpPiBmdW5jLAorICAgICAgICA6OkZ1bmN0aW9uPHZvaWQoQWJz
dHJhY3RTbG90VmlzaXRvciYpPiBmdW5jLAogICAgICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eSB2
b2xhdGlsaXR5LAogICAgICAgICBDb25zdHJhaW50UGFyYWxsZWxpc20gcGFyYWxsZWxpc20pCiAg
ICAgICAgIDogU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQoYWJicmV2aWF0ZWROYW1lLCBuYW1lLCBX
VEZNb3ZlKGZ1bmMpLCB2b2xhdGlsaXR5LCBDb25zdHJhaW50Q29uY3VycmVuY3k6OkNvbmN1cnJl
bnQsIHBhcmFsbGVsaXNtKQpAQCAtNTQsOSArNTQsOSBAQCBwdWJsaWM6CiAgICAgSlNfRVhQT1JU
X1BSSVZBVEUgflNpbXBsZU1hcmtpbmdDb25zdHJhaW50KCkgZmluYWw7CiAgICAgCiBwcml2YXRl
OgotICAgIHZvaWQgZXhlY3V0ZUltcGwoU2xvdFZpc2l0b3ImKSBmaW5hbDsKKyAgICB2b2lkIGV4
ZWN1dGVJbXBsKEFic3RyYWN0U2xvdFZpc2l0b3ImKSBmaW5hbDsKIAotICAgIDo6RnVuY3Rpb248
dm9pZChTbG90VmlzaXRvciYpPiBtX2V4ZWN1dGVGdW5jdGlvbjsKKyAgICA6OkZ1bmN0aW9uPHZv
aWQoQWJzdHJhY3RTbG90VmlzaXRvciYpPiBtX2V4ZWN1dGVGdW5jdGlvbjsKIH07CiAKIH0gLy8g
bmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0
b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNp
dG9yLmNwcAkocmV2aXNpb24gMjcyNzEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
U2xvdFZpc2l0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMi0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1
ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlNsb3RWaXNpdG9yLmgiCiAKKyNpbmNsdWRlICJBYnN0
cmFjdFNsb3RWaXNpdG9ySW5saW5lcy5oIgogI2luY2x1ZGUgIkNvbnNlcnZhdGl2ZVJvb3RzLmgi
CiAjaW5jbHVkZSAiR0NTZWdtZW50ZWRBcnJheUlubGluZXMuaCIKICNpbmNsdWRlICJIZWFwQW5h
bHl6ZXIuaCIKQEAgLTc3LDE1ICs3OCwxNyBAQCBzdGF0aWMgdm9pZCB2YWxpZGF0ZShKU0NlbGwq
IGNlbGwpCiAjZW5kaWYKIAogU2xvdFZpc2l0b3I6OlNsb3RWaXNpdG9yKEhlYXAmIGhlYXAsIENT
dHJpbmcgY29kZU5hbWUpCi0gICAgOiBtX2J5dGVzVmlzaXRlZCgwKQotICAgICwgbV92aXNpdENv
dW50KDApCisvLyAgICA6IEJhc2UoVHlwZTo6U2xvdFZpc2l0b3IsIGhlYXAsIGNvZGVOYW1lKQor
ICAgIDogQmFzZShoZWFwLCBjb2RlTmFtZSkKKyAgICAsIG1fYnl0ZXNWaXNpdGVkKDApCisvLyAg
ICAsIG1fdmlzaXRDb3VudCgwKQogICAgICwgbV9pc0luUGFyYWxsZWxNb2RlKGZhbHNlKQogICAg
ICwgbV9tYXJraW5nVmVyc2lvbihNYXJrZWRTcGFjZTo6aW5pdGlhbFZlcnNpb24pCi0gICAgLCBt
X2hlYXAoaGVhcCkKLSAgICAsIG1fY29kZU5hbWUoY29kZU5hbWUpCisvLyAgICAsIG1faGVhcCho
ZWFwKQorLy8gICAgLCBtX2NvZGVOYW1lKGNvZGVOYW1lKQogI2lmIEFTU0VSVF9FTkFCTEVECiAg
ICAgLCBtX2lzQ2hlY2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlvbihmYWxzZSkKLSAgICAsIG1f
aXNEcmFpbmluZyhmYWxzZSkKKy8vLy8gICAgLCBtX2lzRHJhaW5pbmcoZmFsc2UpCiAjZW5kaWYK
IHsKIH0KQEAgLTExNyw4ICsxMjAsOSBAQCB2b2lkIFNsb3RWaXNpdG9yOjpkaWRTdGFydE1hcmtp
bmcoKQogCiB2b2lkIFNsb3RWaXNpdG9yOjpyZXNldCgpCiB7CisgICAgQWJzdHJhY3RTbG90Vmlz
aXRvcjo6cmVzZXQoKTsKICAgICBtX2J5dGVzVmlzaXRlZCA9IDA7Ci0gICAgbV92aXNpdENvdW50
ID0gMDsKKy8vICAgIG1fdmlzaXRDb3VudCA9IDA7CiAgICAgbV9oZWFwQW5hbHl6ZXIgPSBudWxs
cHRyOwogICAgIFJFTEVBU0VfQVNTRVJUKCFtX2N1cnJlbnRDZWxsKTsKIH0KQEAgLTEzMiw3ICsx
MzYsNyBAQCB2b2lkIFNsb3RWaXNpdG9yOjpjbGVhck1hcmtTdGFja3MoKQogICAgICAgICB9KTsK
IH0KIAotdm9pZCBTbG90VmlzaXRvcjo6YXBwZW5kKGNvbnN0IENvbnNlcnZhdGl2ZVJvb3RzJiBj
b25zZXJ2YXRpdmVSb290cykKK3ZvaWQgU2xvdFZpc2l0b3I6OmFwcGVuZF9Db25zZXJ2YXRpdmVS
b290cyhjb25zdCBDb25zZXJ2YXRpdmVSb290cyYgY29uc2VydmF0aXZlUm9vdHMpCiB7CiAgICAg
SGVhcENlbGwqKiByb290cyA9IGNvbnNlcnZhdGl2ZVJvb3RzLnJvb3RzKCk7CiAgICAgc2l6ZV90
IHNpemUgPSBjb25zZXJ2YXRpdmVSb290cy5zaXplKCk7CkBAIC0yMzAsNyArMjM0LDcgQEAgdm9p
ZCBTbG90VmlzaXRvcjo6YXBwZW5kSlNDZWxsT3JBdXhpbGlhcgogdm9pZCBTbG90VmlzaXRvcjo6
YXBwZW5kU2xvdyhKU0NlbGwqIGNlbGwsIERlcGVuZGVuY3kgZGVwZW5kZW5jeSkKIHsKICAgICBp
ZiAoVU5MSUtFTFkobV9oZWFwQW5hbHl6ZXIpKQotICAgICAgICBtX2hlYXBBbmFseXplci0+YW5h
bHl6ZUVkZ2UobV9jdXJyZW50Q2VsbCwgY2VsbCwgbV9yb290TWFya1JlYXNvbik7CisgICAgICAg
IG1faGVhcEFuYWx5emVyLT5hbmFseXplRWRnZShtX2N1cnJlbnRDZWxsLCBjZWxsLCByb290TWFy
a1JlYXNvbigpKTsKIAogICAgIGFwcGVuZEhpZGRlblNsb3dJbXBsKGNlbGwsIGRlcGVuZGVuY3kp
OwogfQpAQCAtODA3LDEyICs4MTEsMTIgQEAgTWFya1N0YWNrQXJyYXkmIFNsb3RWaXNpdG9yOjpj
b3JyZXNwb25kaQogICAgIHJldHVybiAqbV9oZWFwLm1fc2hhcmVkTXV0YXRvck1hcmtTdGFjazsK
IH0KIAotdm9pZCBTbG90VmlzaXRvcjo6YWRkUGFyYWxsZWxDb25zdHJhaW50VGFzayhSZWZQdHI8
U2hhcmVkVGFzazx2b2lkKFNsb3RWaXNpdG9yJik+PiB0YXNrKQordm9pZCBTbG90VmlzaXRvcjo6
YWRkUGFyYWxsZWxDb25zdHJhaW50VGFzayhSZWZQdHI8U2hhcmVkVGFzazx2b2lkKEFic3RyYWN0
U2xvdFZpc2l0b3ImKT4+IHRhc2spCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQobV9jdXJyZW50U29s
dmVyKTsKICAgICBSRUxFQVNFX0FTU0VSVChtX2N1cnJlbnRDb25zdHJhaW50KTsKICAgICBSRUxF
QVNFX0FTU0VSVCh0YXNrKTsKLSAgICAKKwogICAgIG1fY3VycmVudFNvbHZlci0+YWRkUGFyYWxs
ZWxUYXNrKHRhc2ssICptX2N1cnJlbnRDb25zdHJhaW50KTsKIH0KIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5oCShyZXZpc2lvbiAyNzI3MTApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMS0yMDE5IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MjUsNzQgKzI1LDEwNSBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgIkFic3RyYWN0U2xv
dFZpc2l0b3IuaCIKICNpbmNsdWRlICJIYW5kbGVUeXBlcy5oIgogI2luY2x1ZGUgIkl0ZXJhdGlv
blN0YXR1cy5oIgotI2luY2x1ZGUgIk1hcmtTdGFjay5oIgotI2luY2x1ZGUgIlZpc2l0UmFjZUtl
eS5oIgorLy8jaW5jbHVkZSAiTWFya1N0YWNrLmgiCisvLyNpbmNsdWRlICJWaXNpdFJhY2VLZXku
aCIKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9Nb25vdG9uaWNUaW1l
Lmg+Ci0jaW5jbHVkZSA8d3RmL1NoYXJlZFRhc2suaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3Ry
aW5nLmg+CisvLyNpbmNsdWRlIDx3dGYvU2hhcmVkVGFzay5oPgorLy8jaW5jbHVkZSA8d3RmL3Rl
eHQvQ1N0cmluZy5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIAotY2xhc3MgQ29uc2VydmF0aXZlUm9v
dHM7CisvL2NsYXNzIENvbnNlcnZhdGl2ZVJvb3RzOwogY2xhc3MgR0NUaHJlYWRTaGFyZWREYXRh
OwotY2xhc3MgSGVhcDsKKy8vY2xhc3MgSGVhcDsKIGNsYXNzIEhlYXBDZWxsOwogY2xhc3MgSGVh
cEFuYWx5emVyOwotY2xhc3MgTWFya2VkQmxvY2s7CiBjbGFzcyBNYXJraW5nQ29uc3RyYWludDsK
IGNsYXNzIE1hcmtpbmdDb25zdHJhaW50U29sdmVyOwotdGVtcGxhdGU8dHlwZW5hbWUgVD4gY2xh
c3MgV2VhazsKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFRyYWl0cz4gY2xhc3MgV3Jp
dGVCYXJyaWVyQmFzZTsKKy8vdGVtcGxhdGU8dHlwZW5hbWUgVD4gY2xhc3MgV2VhazsKKy8vdGVt
cGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVHJhaXRzPiBjbGFzcyBXcml0ZUJhcnJpZXJCYXNl
OwogCiB0eXBlZGVmIHVpbnQzMl90IEhlYXBWZXJzaW9uOwogCi1jbGFzcyBTbG90VmlzaXRvciB7
CitjbGFzcyBTbG90VmlzaXRvciBmaW5hbCA6IHB1YmxpYyBBYnN0cmFjdFNsb3RWaXNpdG9yIHsK
ICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShTbG90VmlzaXRvcik7CiAgICAgV1RGX01BS0VfRkFT
VF9BTExPQ0FURUQ7CiAKKyAgICB1c2luZyBCYXNlID0gQWJzdHJhY3RTbG90VmlzaXRvcjsKKwog
ICAgIGZyaWVuZCBjbGFzcyBTZXRDdXJyZW50Q2VsbFNjb3BlOwogICAgIGZyaWVuZCBjbGFzcyBI
ZWFwOwogCiBwdWJsaWM6Ci0gICAgZW51bSBSb290TWFya1JlYXNvbiB7Ci0gICAgICAgIE5vbmUs
Ci0gICAgICAgIENvbnNlcnZhdGl2ZVNjYW4sCi0gICAgICAgIFN0cm9uZ1JlZmVyZW5jZXMsCi0g
ICAgICAgIFByb3RlY3RlZFZhbHVlcywKLSAgICAgICAgTWFya0xpc3RTZXQsCi0gICAgICAgIFZN
RXhjZXB0aW9ucywKLSAgICAgICAgU3Ryb25nSGFuZGxlcywKLSAgICAgICAgRGVidWdnZXIsCi0g
ICAgICAgIEpJVFN0dWJSb3V0aW5lcywKLSAgICAgICAgV2Vha1NldHMsCi0gICAgICAgIE91dHB1
dCwKLSAgICAgICAgREZHV29ya0xpc3RzLAotICAgICAgICBDb2RlQmxvY2tzLAotICAgICAgICBE
T01HQ091dHB1dCwKKyAgICBjbGFzcyBDb250ZXh0IHsKKyAgICBwdWJsaWM6CisgICAgICAgIEFM
V0FZU19JTkxJTkUgQ29udGV4dChBYnN0cmFjdFNsb3RWaXNpdG9yJiwgSGVhcENlbGwqKSB7IH0K
KyAgICB9OworCisgICAgY2xhc3MgRGVmYXVsdE1hcmtpbmdWaW9sYXRpb25Bc3NlcnRpb25TY29w
ZSB7CisgICAgcHVibGljOgorI2lmIEFTU0VSVF9FTkFCTEVECisgICAgICAgIERlZmF1bHRNYXJr
aW5nVmlvbGF0aW9uQXNzZXJ0aW9uU2NvcGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisgICAgICAg
ICAgICA6IG1fdmlzaXRvcih2aXNpdG9yKQorICAgICAgICB7CisgICAgICAgICAgICBtX3dhc0No
ZWNraW5nRm9yRGVmYXVsdE1hcmtWaW9sYXRpb24gPSBtX3Zpc2l0b3IubV9pc0NoZWNraW5nRm9y
RGVmYXVsdE1hcmtWaW9sYXRpb247CisgICAgICAgICAgICBtX3Zpc2l0b3IubV9pc0NoZWNraW5n
Rm9yRGVmYXVsdE1hcmtWaW9sYXRpb24gPSBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIH5E
ZWZhdWx0TWFya2luZ1Zpb2xhdGlvbkFzc2VydGlvblNjb3BlKCkKKyAgICAgICAgeworICAgICAg
ICAgICAgbV92aXNpdG9yLm1faXNDaGVja2luZ0ZvckRlZmF1bHRNYXJrVmlvbGF0aW9uID0gbV93
YXNDaGVja2luZ0ZvckRlZmF1bHRNYXJrVmlvbGF0aW9uOworICAgICAgICB9CisKKyAgICBwcml2
YXRlOgorICAgICAgICBTbG90VmlzaXRvciYgbV92aXNpdG9yOworICAgICAgICBib29sIG1fd2Fz
Q2hlY2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlvbjsKKyNlbHNlCisgICAgICAgIERlZmF1bHRN
YXJraW5nVmlvbGF0aW9uQXNzZXJ0aW9uU2NvcGUoU2xvdFZpc2l0b3ImKSB7IH0KKyNlbmRpZgog
ICAgIH07CiAKKy8vICAgIGVudW0gUm9vdE1hcmtSZWFzb24geworLy8gICAgICAgIE5vbmUsCisv
LyAgICAgICAgQ29uc2VydmF0aXZlU2NhbiwKKy8vICAgICAgICBTdHJvbmdSZWZlcmVuY2VzLAor
Ly8gICAgICAgIFByb3RlY3RlZFZhbHVlcywKKy8vICAgICAgICBNYXJrTGlzdFNldCwKKy8vICAg
ICAgICBWTUV4Y2VwdGlvbnMsCisvLyAgICAgICAgU3Ryb25nSGFuZGxlcywKKy8vICAgICAgICBE
ZWJ1Z2dlciwKKy8vICAgICAgICBKSVRTdHViUm91dGluZXMsCisvLyAgICAgICAgV2Vha1NldHMs
CisvLyAgICAgICAgT3V0cHV0LAorLy8gICAgICAgIERGR1dvcmtMaXN0cywKKy8vICAgICAgICBD
b2RlQmxvY2tzLAorLy8gICAgICAgIERPTUdDT3V0cHV0LAorLy8gICAgfTsKKwogICAgIFNsb3RW
aXNpdG9yKEhlYXAmLCBDU3RyaW5nIGNvZGVOYW1lKTsKICAgICB+U2xvdFZpc2l0b3IoKTsKIAot
ICAgIE1hcmtTdGFja0FycmF5JiBjb2xsZWN0b3JNYXJrU3RhY2soKSB7IHJldHVybiBtX2NvbGxl
Y3RvclN0YWNrOyB9Ci0gICAgTWFya1N0YWNrQXJyYXkmIG11dGF0b3JNYXJrU3RhY2soKSB7IHJl
dHVybiBtX211dGF0b3JTdGFjazsgfQotICAgIGNvbnN0IE1hcmtTdGFja0FycmF5JiBjb2xsZWN0
b3JNYXJrU3RhY2soKSBjb25zdCB7IHJldHVybiBtX2NvbGxlY3RvclN0YWNrOyB9Ci0gICAgY29u
c3QgTWFya1N0YWNrQXJyYXkmIG11dGF0b3JNYXJrU3RhY2soKSBjb25zdCB7IHJldHVybiBtX211
dGF0b3JTdGFjazsgfQotICAgIAotICAgIFZNJiB2bSgpOwotICAgIGNvbnN0IFZNJiB2bSgpIGNv
bnN0OwotICAgIEhlYXAqIGhlYXAoKSBjb25zdDsKLQotICAgIHZvaWQgYXBwZW5kKGNvbnN0IENv
bnNlcnZhdGl2ZVJvb3RzJik7Ci0gICAgCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5h
bWUgVHJhaXRzPiB2b2lkIGFwcGVuZChjb25zdCBXcml0ZUJhcnJpZXJCYXNlPFQsIFRyYWl0cz4m
KTsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBUcmFpdHM+IHZvaWQgYXBwZW5k
SGlkZGVuKGNvbnN0IFdyaXRlQmFycmllckJhc2U8VCwgVHJhaXRzPiYpOwotICAgIHRlbXBsYXRl
PHR5cGVuYW1lIEl0ZXJhdG9yPiB2b2lkIGFwcGVuZChJdGVyYXRvciBiZWdpbiAsIEl0ZXJhdG9y
IGVuZCk7Ci0gICAgdm9pZCBhcHBlbmRWYWx1ZXMoY29uc3QgV3JpdGVCYXJyaWVyQmFzZTxVbmtu
b3duLCBSYXdWYWx1ZVRyYWl0czxVbmtub3duPj4qLCBzaXplX3QgY291bnQpOwotICAgIHZvaWQg
YXBwZW5kVmFsdWVzSGlkZGVuKGNvbnN0IFdyaXRlQmFycmllckJhc2U8VW5rbm93biwgUmF3VmFs
dWVUcmFpdHM8VW5rbm93bj4+Kiwgc2l6ZV90IGNvdW50KTsKKy8vICAgIE1hcmtTdGFja0FycmF5
JiBjb2xsZWN0b3JNYXJrU3RhY2soKSB7IHJldHVybiBtX2NvbGxlY3RvclN0YWNrOyB9CisvLyAg
ICBNYXJrU3RhY2tBcnJheSYgbXV0YXRvck1hcmtTdGFjaygpIHsgcmV0dXJuIG1fbXV0YXRvclN0
YWNrOyB9CisvLyAgICBjb25zdCBNYXJrU3RhY2tBcnJheSYgY29sbGVjdG9yTWFya1N0YWNrKCkg
Y29uc3QgeyByZXR1cm4gbV9jb2xsZWN0b3JTdGFjazsgfQorLy8gICAgY29uc3QgTWFya1N0YWNr
QXJyYXkmIG11dGF0b3JNYXJrU3RhY2soKSBjb25zdCB7IHJldHVybiBtX211dGF0b3JTdGFjazsg
fQorICAgIAorLy8gICAgVk0mIHZtKCk7CisvLyAgICBjb25zdCBWTSYgdm0oKSBjb25zdDsKKy8v
ICAgIEhlYXAqIGhlYXAoKSBjb25zdDsKKworICAgIHZvaWQgYXBwZW5kX0NvbnNlcnZhdGl2ZVJv
b3RzKGNvbnN0IENvbnNlcnZhdGl2ZVJvb3RzJikgZmluYWw7CisKKyAgICB1c2luZyBCYXNlOjph
cHBlbmQ7CisvLyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBUcmFpdHM+IHZvaWQg
YXBwZW5kKGNvbnN0IFdyaXRlQmFycmllckJhc2U8VCwgVHJhaXRzPiYpOworLy8gICAgdGVtcGxh
dGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVHJhaXRzPiB2b2lkIGFwcGVuZEhpZGRlbihjb25zdCBX
cml0ZUJhcnJpZXJCYXNlPFQsIFRyYWl0cz4mKTsKKy8vICAgIHRlbXBsYXRlPHR5cGVuYW1lIEl0
ZXJhdG9yPiB2b2lkIGFwcGVuZChJdGVyYXRvciBiZWdpbiAsIEl0ZXJhdG9yIGVuZCk7CisvLyAg
ICB2b2lkIGFwcGVuZFZhbHVlcyhjb25zdCBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24sIFJhd1Zh
bHVlVHJhaXRzPFVua25vd24+PiosIHNpemVfdCBjb3VudCk7CisvLyAgICB2b2lkIGFwcGVuZFZh
bHVlc0hpZGRlbihjb25zdCBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24sIFJhd1ZhbHVlVHJhaXRz
PFVua25vd24+PiosIHNpemVfdCBjb3VudCk7CiAgICAgCiAgICAgLy8gVGhlc2UgZG9uJ3QgcmVx
dWlyZSB5b3UgdG8gcHJvdmUgdGhhdCB5b3UgaGF2ZSBhIFdyaXRlQmFycmllcjw+LiBUaGF0IG1h
a2VzIHNlbnNlCiAgICAgLy8gZm9yOgpAQCAtMTAzLDMyICsxMzQsMzYgQEAgcHVibGljOgogICAg
IC8vCiAgICAgLy8gSWYgeW91IGFyZSBub3QgYSByb290IGFuZCB5b3UgZG9uJ3Qga25vdyB3aGF0
IGtpbmQgb2YgYmFycmllciB5b3UgaGF2ZSwgdGhlbiB5b3UKICAgICAvLyBzaG91bGRuJ3QgY2Fs
bCB0aGVzZSBtZXRob2RzLgotICAgIHZvaWQgYXBwZW5kVW5iYXJyaWVyZWQoSlNWYWx1ZSk7Ci0g
ICAgdm9pZCBhcHBlbmRVbmJhcnJpZXJlZChKU1ZhbHVlKiwgc2l6ZV90KTsKLSAgICB2b2lkIGFw
cGVuZFVuYmFycmllcmVkKEpTQ2VsbCopOworLy8gICAgdm9pZCBhcHBlbmRVbmJhcnJpZXJlZChK
U1ZhbHVlKSBmaW5hbDsKKy8vICAgIHZvaWQgYXBwZW5kVW5iYXJyaWVyZWQoSlNWYWx1ZSosIHNp
emVfdCk7CisgICAgdm9pZCBhcHBlbmRVbmJhcnJpZXJlZEltcGwoSlNDZWxsKikgZmluYWw7CiAg
ICAgCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICB2b2lkIGFwcGVuZChjb25zdCBXZWFr
PFQ+JiB3ZWFrKTsKKy8vICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisvLyAgICB2b2lkIGFwcGVu
ZChjb25zdCBXZWFrPFQ+JiB3ZWFrKTsKICAgICAKLSAgICB2b2lkIGFwcGVuZEhpZGRlblVuYmFy
cmllcmVkKEpTVmFsdWUpOwotICAgIHZvaWQgYXBwZW5kSGlkZGVuVW5iYXJyaWVyZWQoSlNDZWxs
Kik7CisvLyAgICB2b2lkIGFwcGVuZEhpZGRlblVuYmFycmllcmVkKEpTVmFsdWUpIGZpbmFsOwor
ICAgIHZvaWQgYXBwZW5kSGlkZGVuVW5iYXJyaWVyZWRJbXBsKEpTQ2VsbCopIGZpbmFsOwogCi0g
ICAgYm9vbCBhZGRPcGFxdWVSb290KHZvaWQqKTsgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSByb290
IHdhcyBuZXcuCisgICAgYm9vbCBhZGRPcGFxdWVSb290KHZvaWQqKSBmaW5hbDsgLy8gUmV0dXJu
cyB0cnVlIGlmIHRoZSByb290IHdhcyBuZXcuCiAgICAgCi0gICAgYm9vbCBjb250YWluc09wYXF1
ZVJvb3Qodm9pZCopIGNvbnN0OworICAgIGJvb2wgY29udGFpbnNPcGFxdWVSb290KHZvaWQqKSBj
b25zdCBmaW5hbDsKIAotICAgIGJvb2wgaXNFbXB0eSgpIHsgcmV0dXJuIG1fY29sbGVjdG9yU3Rh
Y2suaXNFbXB0eSgpICYmIG1fbXV0YXRvclN0YWNrLmlzRW1wdHkoKTsgfQorLy8gICAgYm9vbCBp
c0VtcHR5KCkgeyByZXR1cm4gbV9jb2xsZWN0b3JTdGFjay5pc0VtcHR5KCkgJiYgbV9tdXRhdG9y
U3RhY2suaXNFbXB0eSgpOyB9CiAKICAgICBib29sIGlzRmlyc3RWaXNpdCgpIGNvbnN0IHsgcmV0
dXJuIG1faXNGaXJzdFZpc2l0OyB9CiAKKyAgICBib29sIGlzTWFya2VkKGNvbnN0IHZvaWQqKSBj
b25zdCBmaW5hbDsKKyAgICBib29sIGlzTWFya2VkKE1hcmtlZEJsb2NrJiwgSGVhcENlbGwqKSBj
b25zdCBmaW5hbDsKKyAgICBib29sIGlzTWFya2VkKFByZWNpc2VBbGxvY2F0aW9uJiwgSGVhcENl
bGwqKSBjb25zdCBmaW5hbDsKKwogICAgIHZvaWQgZGlkU3RhcnRNYXJraW5nKCk7CiAgICAgdm9p
ZCByZXNldCgpOwogICAgIHZvaWQgY2xlYXJNYXJrU3RhY2tzKCk7CiAKICAgICBzaXplX3QgYnl0
ZXNWaXNpdGVkKCkgY29uc3QgeyByZXR1cm4gbV9ieXRlc1Zpc2l0ZWQ7IH0KLSAgICBzaXplX3Qg
dmlzaXRDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fdmlzaXRDb3VudDsgfQotICAgIAotICAgIHZv
aWQgYWRkVG9WaXNpdENvdW50KHNpemVfdCB2YWx1ZSkgeyBtX3Zpc2l0Q291bnQgKz0gdmFsdWU7
IH0KKy8vICAgIHNpemVfdCB2aXNpdENvdW50KCkgY29uc3QgeyByZXR1cm4gbV92aXNpdENvdW50
OyB9CisKKy8vICAgIHZvaWQgYWRkVG9WaXNpdENvdW50KHNpemVfdCB2YWx1ZSkgeyBtX3Zpc2l0
Q291bnQgKz0gdmFsdWU7IH0KIAogICAgIHZvaWQgZG9uYXRlKCk7CiAgICAgdm9pZCBkcmFpbihN
b25vdG9uaWNUaW1lIHRpbWVvdXQgPSBNb25vdG9uaWNUaW1lOjppbmZpbml0eSgpKTsKQEAgLTE1
MSwyNCArMTg2LDI0IEBAIHB1YmxpYzoKICAgICAKICAgICAvLyBUaGlzIGluZm9ybXMgdGhlIEdD
IGFib3V0IGF1eGlsaWFyeSBvZiBzb21lIHNpemUgdGhhdCB3ZSBhcmUga2VlcGluZyBhbGl2ZS4g
SWYgeW91IGRvbid0IGRvCiAgICAgLy8gdGhpcyB0aGVuIHRoZSBzcGFjZSB3aWxsIGJlIGZyZWVk
IGF0IGVuZCBvZiBHQy4KLSAgICB2b2lkIG1hcmtBdXhpbGlhcnkoY29uc3Qgdm9pZCogYmFzZSk7
CisgICAgdm9pZCBtYXJrQXV4aWxpYXJ5KGNvbnN0IHZvaWQqIGJhc2UpIGZpbmFsOwogCi0gICAg
dm9pZCByZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQoc2l6ZV90KTsKKyAgICB2b2lkIHJlcG9ydEV4
dHJhTWVtb3J5VmlzaXRlZChzaXplX3QpIGZpbmFsOwogI2lmIEVOQUJMRShSRVNPVVJDRV9VU0FH
RSkKLSAgICB2b2lkIHJlcG9ydEV4dGVybmFsTWVtb3J5VmlzaXRlZChzaXplX3QpOworICAgIHZv
aWQgcmVwb3J0RXh0ZXJuYWxNZW1vcnlWaXNpdGVkKHNpemVfdCkgZmluYWw7CiAjZW5kaWYKICAg
ICAKLSAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICB2b2lkIGR1bXAoUHJp
bnRTdHJlYW0mKSBjb25zdCBmaW5hbDsKIAotICAgIGJvb2wgaXNBbmFseXppbmdIZWFwKCkgY29u
c3QgeyByZXR1cm4gISFtX2hlYXBBbmFseXplcjsgfQotICAgIEhlYXBBbmFseXplciogaGVhcEFu
YWx5emVyKCkgY29uc3QgeyByZXR1cm4gbV9oZWFwQW5hbHl6ZXI7IH0KKy8vICAgIGJvb2wgaXNB
bmFseXppbmdIZWFwKCkgY29uc3QgeyByZXR1cm4gISFtX2hlYXBBbmFseXplcjsgfQorLy8gICAg
SGVhcEFuYWx5emVyKiBoZWFwQW5hbHl6ZXIoKSBjb25zdCB7IHJldHVybiBtX2hlYXBBbmFseXpl
cjsgfQogICAgIAotICAgIFJvb3RNYXJrUmVhc29uIHJvb3RNYXJrUmVhc29uKCkgY29uc3QgeyBy
ZXR1cm4gbV9yb290TWFya1JlYXNvbjsgfQotICAgIHZvaWQgc2V0Um9vdE1hcmtSZWFzb24oUm9v
dE1hcmtSZWFzb24gcmVhc29uKSB7IG1fcm9vdE1hcmtSZWFzb24gPSByZWFzb247IH0KKy8vICAg
IFJvb3RNYXJrUmVhc29uIHJvb3RNYXJrUmVhc29uKCkgY29uc3QgeyByZXR1cm4gbV9yb290TWFy
a1JlYXNvbjsgfQorLy8gICAgdm9pZCBzZXRSb290TWFya1JlYXNvbihSb290TWFya1JlYXNvbiBy
ZWFzb24pIHsgbV9yb290TWFya1JlYXNvbiA9IHJlYXNvbjsgfQogCiAgICAgSGVhcFZlcnNpb24g
bWFya2luZ1ZlcnNpb24oKSBjb25zdCB7IHJldHVybiBtX21hcmtpbmdWZXJzaW9uOyB9CiAKLSAg
ICBib29sIG11dGF0b3JJc1N0b3BwZWQoKSBjb25zdCB7IHJldHVybiBtX211dGF0b3JJc1N0b3Bw
ZWQ7IH0KKyAgICBib29sIG11dGF0b3JJc1N0b3BwZWQoKSBjb25zdCBmaW5hbCB7IHJldHVybiBt
X211dGF0b3JJc1N0b3BwZWQ7IH0KICAgICAKICAgICBMb2NrJiByaWdodFRvUnVuKCkgeyByZXR1
cm4gbV9yaWdodFRvUnVuOyB9CiAgICAgCkBAIC0xODAsMTAgKzIxNSwxMCBAQCBwdWJsaWM6CiAg
ICAgCiAgICAgdm9pZCBvcHRpbWl6ZUZvclN0b3BwZWRNdXRhdG9yKCk7CiAgICAgCi0gICAgdm9p
ZCBkaWRSYWNlKGNvbnN0IFZpc2l0UmFjZUtleSYpOworICAgIHZvaWQgZGlkUmFjZShjb25zdCBW
aXNpdFJhY2VLZXkmKSBmaW5hbDsKICAgICB2b2lkIGRpZFJhY2UoSlNDZWxsKiBjZWxsLCBjb25z
dCBjaGFyKiByZWFzb24pIHsgZGlkUmFjZShWaXNpdFJhY2VLZXkoY2VsbCwgcmVhc29uKSk7IH0K
ICAgICAKLSAgICB2b2lkIHZpc2l0QXNDb25zdHJhaW50KGNvbnN0IEpTQ2VsbCopOworICAgIHZv
aWQgdmlzaXRBc0NvbnN0cmFpbnQoY29uc3QgSlNDZWxsKikgZmluYWw7CiAgICAgCiAgICAgYm9v
bCBkaWRSZWFjaFRlcm1pbmF0aW9uKCk7CiAgICAgCkBAIC0xOTEsOSArMjI2LDkgQEAgcHVibGlj
OgogCiAgICAgdm9pZCBkb25hdGVBbGwoKTsKICAgICAKLSAgICBjb25zdCBjaGFyKiBjb2RlTmFt
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29kZU5hbWUuZGF0YSgpOyB9CisvLyAgICBjb25zdCBjaGFy
KiBjb2RlTmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29kZU5hbWUuZGF0YSgpOyB9CiAgICAgCi0g
ICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBhZGRQYXJhbGxlbENvbnN0cmFpbnRUYXNrKFJlZlB0
cjxTaGFyZWRUYXNrPHZvaWQoU2xvdFZpc2l0b3ImKT4+KTsKKyAgICB2b2lkIGFkZFBhcmFsbGVs
Q29uc3RyYWludFRhc2soUmVmUHRyPFNoYXJlZFRhc2s8dm9pZChBYnN0cmFjdFNsb3RWaXNpdG9y
Jik+PikgZmluYWw7CiAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIFBhcmFsbGVsTW9kZUVu
YWJsZXI7CkBAIC0yMzIsMzkgKzI2NywzOSBAQCBwcml2YXRlOgogCiAgICAgTWFya1N0YWNrQXJy
YXkmIGNvcnJlc3BvbmRpbmdHbG9iYWxTdGFjayhNYXJrU3RhY2tBcnJheSYpOwogCi0gICAgTWFy
a1N0YWNrQXJyYXkgbV9jb2xsZWN0b3JTdGFjazsKLSAgICBNYXJrU3RhY2tBcnJheSBtX211dGF0
b3JTdGFjazsKLSAgICAKKy8vICAgIE1hcmtTdGFja0FycmF5IG1fY29sbGVjdG9yU3RhY2s7Cisv
LyAgICBNYXJrU3RhY2tBcnJheSBtX211dGF0b3JTdGFjazsKKwogICAgIHNpemVfdCBtX2J5dGVz
VmlzaXRlZDsKLSAgICBzaXplX3QgbV92aXNpdENvdW50OworLy8gICAgc2l6ZV90IG1fdmlzaXRD
b3VudDsKICAgICBzaXplX3QgbV9ub25DZWxsVmlzaXRDb3VudCB7IDAgfTsgLy8gVXNlZCBmb3Ig
aW5jcmVtZW50YWwgZHJhaW5pbmcsIGlnbm9yZWQgb3RoZXJ3aXNlLgogICAgIENoZWNrZWRTaXpl
IG1fZXh0cmFNZW1vcnlTaXplIHsgMCB9OwogICAgIGJvb2wgbV9pc0luUGFyYWxsZWxNb2RlOwog
ICAgIGJvb2wgbV9pZ25vcmVOZXdPcGFxdWVSb290cyB7IGZhbHNlIH07IC8vIFVzZWZ1bCBhcyBh
IGRlYnVnZ2luZyBtb2RlLgogCiAgICAgSGVhcFZlcnNpb24gbV9tYXJraW5nVmVyc2lvbjsKLSAg
ICAKLSAgICBIZWFwJiBtX2hlYXA7CisKKy8vICAgIEhlYXAmIG1faGVhcDsKIAogICAgIEhlYXBB
bmFseXplciogbV9oZWFwQW5hbHl6ZXIgeyBudWxscHRyIH07CiAgICAgSlNDZWxsKiBtX2N1cnJl
bnRDZWxsIHsgbnVsbHB0ciB9OwotICAgIFJvb3RNYXJrUmVhc29uIG1fcm9vdE1hcmtSZWFzb24g
eyBSb290TWFya1JlYXNvbjo6Tm9uZSB9OworLy8gICAgUm9vdE1hcmtSZWFzb24gbV9yb290TWFy
a1JlYXNvbiB7IFJvb3RNYXJrUmVhc29uOjpOb25lIH07CiAgICAgYm9vbCBtX2lzRmlyc3RWaXNp
dCB7IGZhbHNlIH07CiAgICAgYm9vbCBtX211dGF0b3JJc1N0b3BwZWQgeyBmYWxzZSB9OwogICAg
IGJvb2wgbV9jYW5PcHRpbWl6ZUZvclN0b3BwZWRNdXRhdG9yIHsgZmFsc2UgfTsKICAgICBMb2Nr
IG1fcmlnaHRUb1J1bjsKICAgICAKLSAgICBDU3RyaW5nIG1fY29kZU5hbWU7CisvLyAgICBDU3Ry
aW5nIG1fY29kZU5hbWU7CiAgICAgCi0gICAgTWFya2luZ0NvbnN0cmFpbnQqIG1fY3VycmVudENv
bnN0cmFpbnQgeyBudWxscHRyIH07Ci0gICAgTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXIqIG1fY3Vy
cmVudFNvbHZlciB7IG51bGxwdHIgfTsKKy8vICAgIE1hcmtpbmdDb25zdHJhaW50KiBtX2N1cnJl
bnRDb25zdHJhaW50IHsgbnVsbHB0ciB9OworLy8gICAgTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXIq
IG1fY3VycmVudFNvbHZlciB7IG51bGxwdHIgfTsKICAgICAKICAgICAvLyBQdXQgcGFkZGluZyBo
ZXJlIHRvIG1pdGlnYXRlIGZhbHNlIHNoYXJpbmcgYmV0d2VlbiBtdWx0aXBsZSBTbG90VmlzaXRv
cnMuCiAgICAgY2hhciBwYWRkaW5nWzY0XTsKLXB1YmxpYzoKKy8vcHVibGljOgogI2lmIEFTU0VS
VF9FTkFCTEVECi0gICAgYm9vbCBtX2lzQ2hlY2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlvbjsK
LSAgICBib29sIG1faXNEcmFpbmluZzsKKyAgICBib29sIG1faXNDaGVja2luZ0ZvckRlZmF1bHRN
YXJrVmlvbGF0aW9uIHsgZmFsc2UgfTsKKy8vICAgIGJvb2wgbV9pc0RyYWluaW5nOwogI2VuZGlm
CiB9OwogCkBAIC0yODcsMjMgKzMyMiwyMyBAQCBwcml2YXRlOgogICAgIFNsb3RWaXNpdG9yJiBt
X3N0YWNrOwogfTsKIAotY2xhc3MgU2V0Um9vdE1hcmtSZWFzb25TY29wZSB7Ci1wdWJsaWM6Ci0g
ICAgU2V0Um9vdE1hcmtSZWFzb25TY29wZShTbG90VmlzaXRvciYgdmlzaXRvciwgU2xvdFZpc2l0
b3I6OlJvb3RNYXJrUmVhc29uIHJlYXNvbikKLSAgICAgICAgOiBtX3Zpc2l0b3IodmlzaXRvcikK
LSAgICAgICAgLCBtX3ByZXZpb3VzUmVhc29uKHZpc2l0b3Iucm9vdE1hcmtSZWFzb24oKSkKLSAg
ICB7Ci0gICAgICAgIG1fdmlzaXRvci5zZXRSb290TWFya1JlYXNvbihyZWFzb24pOwotICAgIH0K
LQotICAgIH5TZXRSb290TWFya1JlYXNvblNjb3BlKCkKLSAgICB7Ci0gICAgICAgIG1fdmlzaXRv
ci5zZXRSb290TWFya1JlYXNvbihtX3ByZXZpb3VzUmVhc29uKTsKLSAgICB9Ci0KLXByaXZhdGU6
Ci0gICAgU2xvdFZpc2l0b3ImIG1fdmlzaXRvcjsKLSAgICBTbG90VmlzaXRvcjo6Um9vdE1hcmtS
ZWFzb24gbV9wcmV2aW91c1JlYXNvbjsKLX07Ci0KKy8vY2xhc3MgU2V0Um9vdE1hcmtSZWFzb25T
Y29wZSB7CisvL3B1YmxpYzoKKy8vICAgIFNldFJvb3RNYXJrUmVhc29uU2NvcGUoU2xvdFZpc2l0
b3ImIHZpc2l0b3IsIFNsb3RWaXNpdG9yOjpSb290TWFya1JlYXNvbiByZWFzb24pCisvLyAgICAg
ICAgOiBtX3Zpc2l0b3IodmlzaXRvcikKKy8vICAgICAgICAsIG1fcHJldmlvdXNSZWFzb24odmlz
aXRvci5yb290TWFya1JlYXNvbigpKQorLy8gICAgeworLy8gICAgICAgIG1fdmlzaXRvci5zZXRS
b290TWFya1JlYXNvbihyZWFzb24pOworLy8gICAgfQorLy8KKy8vICAgIH5TZXRSb290TWFya1Jl
YXNvblNjb3BlKCkKKy8vICAgIHsKKy8vICAgICAgICBtX3Zpc2l0b3Iuc2V0Um9vdE1hcmtSZWFz
b24obV9wcmV2aW91c1JlYXNvbik7CisvLyAgICB9CisvLworLy9wcml2YXRlOgorLy8gICAgU2xv
dFZpc2l0b3ImIG1fdmlzaXRvcjsKKy8vICAgIFNsb3RWaXNpdG9yOjpSb290TWFya1JlYXNvbiBt
X3ByZXZpb3VzUmVhc29uOworLy99OworLy8KIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmgJKHJldmlz
aW9uIDI3MjcxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9ySW5s
aW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMi0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjUsMjYgKzI1LDI5IEBACiAKICNwcmFnbWEgb25j
ZQogCisjaW5jbHVkZSAiQWJzdHJhY3RTbG90VmlzaXRvcklubGluZXMuaCIKICNpbmNsdWRlICJT
bG90VmlzaXRvci5oIgotI2luY2x1ZGUgIldlYWsuaCIKLSNpbmNsdWRlICJXZWFrSW5saW5lcy5o
IgorI2luY2x1ZGUgIk1hcmtlZEJsb2NrLmgiCisjaW5jbHVkZSAiUHJlY2lzZUFsbG9jYXRpb24u
aCIKKy8vI2luY2x1ZGUgIldlYWsuaCIKKy8vI2luY2x1ZGUgIldlYWtJbmxpbmVzLmgiCiAKIG5h
bWVzcGFjZSBKU0MgewogCi1BTFdBWVNfSU5MSU5FIHZvaWQgU2xvdFZpc2l0b3I6OmFwcGVuZFVu
YmFycmllcmVkKEpTVmFsdWUqIHNsb3QsIHNpemVfdCBjb3VudCkKLXsKLSAgICBmb3IgKHNpemVf
dCBpID0gY291bnQ7IGktLTspCi0gICAgICAgIGFwcGVuZFVuYmFycmllcmVkKHNsb3RbaV0pOwot
fQorLy9BTFdBWVNfSU5MSU5FIHZvaWQgU2xvdFZpc2l0b3I6OmFwcGVuZFVuYmFycmllcmVkKEpT
VmFsdWUqIHNsb3QsIHNpemVfdCBjb3VudCkKKy8veworLy8gICAgZm9yIChzaXplX3QgaSA9IGNv
dW50OyBpLS07KQorLy8gICAgICAgIGFwcGVuZFVuYmFycmllcmVkKHNsb3RbaV0pOworLy99CiAK
LUFMV0FZU19JTkxJTkUgdm9pZCBTbG90VmlzaXRvcjo6YXBwZW5kVW5iYXJyaWVyZWQoSlNDZWxs
KiBjZWxsKQorQUxXQVlTX0lOTElORSB2b2lkIFNsb3RWaXNpdG9yOjphcHBlbmRVbmJhcnJpZXJl
ZEltcGwoSlNDZWxsKiBjZWxsKQogewogICAgIC8vIFRoaXMgbmVlZHMgdG8gYmUgd3JpdHRlbiBp
biBhIHZlcnkgc3BlY2lmaWMgd2F5IHRvIGVuc3VyZSB0aGF0IGl0IGdldHMgaW5saW5lZAogICAg
IC8vIHByb3Blcmx5LiBJbiBwYXJ0aWN1bGFyLCBpdCBhcHBlYXJzIHRoYXQgdXNpbmcgdGVtcGxh
dGVzIGhlcmUgYnJlYWtzIEFMV0FZU19JTkxJTkUuCiAgICAgCi0gICAgaWYgKCFjZWxsKQotICAg
ICAgICByZXR1cm47Ci0gICAgCisvLyAgICBpZiAoIWNlbGwpCisvLyAgICAgICAgcmV0dXJuOwor
Ly8KICAgICBEZXBlbmRlbmN5IGRlcGVuZGVuY3k7CiAgICAgaWYgKFVOTElLRUxZKGNlbGwtPmlz
UHJlY2lzZUFsbG9jYXRpb24oKSkpIHsKICAgICAgICAgaWYgKExJS0VMWShjZWxsLT5wcmVjaXNl
QWxsb2NhdGlvbigpLmlzTWFya2VkKCkpKSB7CkBAIC02MywyNSArNjYsMjUgQEAgQUxXQVlTX0lO
TElORSB2b2lkIFNsb3RWaXNpdG9yOjphcHBlbmRVbgogICAgIGFwcGVuZFNsb3coY2VsbCwgZGVw
ZW5kZW5jeSk7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBTbG90VmlzaXRvcjo6YXBwZW5kVW5i
YXJyaWVyZWQoSlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUuaXNDZWxsKCkpCi0gICAg
ICAgIGFwcGVuZFVuYmFycmllcmVkKHZhbHVlLmFzQ2VsbCgpKTsKLX0KKy8vQUxXQVlTX0lOTElO
RSB2b2lkIFNsb3RWaXNpdG9yOjphcHBlbmRVbmJhcnJpZXJlZChKU1ZhbHVlIHZhbHVlKQorLy97
CisvLyAgICBpZiAodmFsdWUuaXNDZWxsKCkpCisvLyAgICAgICAgYXBwZW5kVW5iYXJyaWVyZWQo
dmFsdWUuYXNDZWxsKCkpOworLy99CisKKy8vQUxXQVlTX0lOTElORSB2b2lkIFNsb3RWaXNpdG9y
OjphcHBlbmRIaWRkZW5VbmJhcnJpZXJlZChKU1ZhbHVlIHZhbHVlKQorLy97CisvLyAgICBpZiAo
dmFsdWUuaXNDZWxsKCkpCisvLyAgICAgICAgYXBwZW5kSGlkZGVuVW5iYXJyaWVyZWQodmFsdWUu
YXNDZWxsKCkpOworLy99CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBTbG90VmlzaXRvcjo6YXBwZW5k
SGlkZGVuVW5iYXJyaWVyZWQoSlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUuaXNDZWxs
KCkpCi0gICAgICAgIGFwcGVuZEhpZGRlblVuYmFycmllcmVkKHZhbHVlLmFzQ2VsbCgpKTsKLX0K
LQotQUxXQVlTX0lOTElORSB2b2lkIFNsb3RWaXNpdG9yOjphcHBlbmRIaWRkZW5VbmJhcnJpZXJl
ZChKU0NlbGwqIGNlbGwpCitBTFdBWVNfSU5MSU5FIHZvaWQgU2xvdFZpc2l0b3I6OmFwcGVuZEhp
ZGRlblVuYmFycmllcmVkSW1wbChKU0NlbGwqIGNlbGwpCiB7CiAgICAgLy8gVGhpcyBuZWVkcyB0
byBiZSB3cml0dGVuIGluIGEgdmVyeSBzcGVjaWZpYyB3YXkgdG8gZW5zdXJlIHRoYXQgaXQgZ2V0
cyBpbmxpbmVkCiAgICAgLy8gcHJvcGVybHkuIEluIHBhcnRpY3VsYXIsIGl0IGFwcGVhcnMgdGhh
dCB1c2luZyB0ZW1wbGF0ZXMgaGVyZSBicmVha3MgQUxXQVlTX0lOTElORS4KICAgICAKLSAgICBp
ZiAoIWNlbGwpCi0gICAgICAgIHJldHVybjsKKy8vICAgIGlmICghY2VsbCkKKy8vICAgICAgICBy
ZXR1cm47CiAgICAgCiAgICAgRGVwZW5kZW5jeSBkZXBlbmRlbmN5OwogICAgIGlmIChVTkxJS0VM
WShjZWxsLT5pc1ByZWNpc2VBbGxvY2F0aW9uKCkpKSB7CkBAIC05Nyw0MiArMTAwLDQyIEBAIEFM
V0FZU19JTkxJTkUgdm9pZCBTbG90VmlzaXRvcjo6YXBwZW5kSGkKICAgICBhcHBlbmRIaWRkZW5T
bG93KGNlbGwsIGRlcGVuZGVuY3kpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotQUxXQVlT
X0lOTElORSB2b2lkIFNsb3RWaXNpdG9yOjphcHBlbmQoY29uc3QgV2VhazxUPiYgd2VhaykKLXsK
LSAgICBhcHBlbmRVbmJhcnJpZXJlZCh3ZWFrLmdldCgpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5h
bWUgVCwgdHlwZW5hbWUgVHJhaXRzPgotQUxXQVlTX0lOTElORSB2b2lkIFNsb3RWaXNpdG9yOjph
cHBlbmQoY29uc3QgV3JpdGVCYXJyaWVyQmFzZTxULCBUcmFpdHM+JiBzbG90KQotewotICAgIGFw
cGVuZFVuYmFycmllcmVkKHNsb3QuZ2V0KCkpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0
eXBlbmFtZSBUcmFpdHM+Ci1BTFdBWVNfSU5MSU5FIHZvaWQgU2xvdFZpc2l0b3I6OmFwcGVuZEhp
ZGRlbihjb25zdCBXcml0ZUJhcnJpZXJCYXNlPFQsIFRyYWl0cz4mIHNsb3QpCi17Ci0gICAgYXBw
ZW5kSGlkZGVuVW5iYXJyaWVyZWQoc2xvdC5nZXQoKSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1l
IEl0ZXJhdG9yPgotQUxXQVlTX0lOTElORSB2b2lkIFNsb3RWaXNpdG9yOjphcHBlbmQoSXRlcmF0
b3IgYmVnaW4sIEl0ZXJhdG9yIGVuZCkKLXsKLSAgICBmb3IgKGF1dG8gaXQgPSBiZWdpbjsgaXQg
IT0gZW5kOyArK2l0KQotICAgICAgICBhcHBlbmQoKml0KTsKLX0KLQotQUxXQVlTX0lOTElORSB2
b2lkIFNsb3RWaXNpdG9yOjphcHBlbmRWYWx1ZXMoY29uc3QgV3JpdGVCYXJyaWVyQmFzZTxVbmtu
b3duPiogYmFycmllcnMsIHNpemVfdCBjb3VudCkKLXsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGNvdW50OyArK2kpCi0gICAgICAgIGFwcGVuZChiYXJyaWVyc1tpXSk7Ci19Ci0KLUFMV0FZ
U19JTkxJTkUgdm9pZCBTbG90VmlzaXRvcjo6YXBwZW5kVmFsdWVzSGlkZGVuKGNvbnN0IFdyaXRl
QmFycmllckJhc2U8VW5rbm93bj4qIGJhcnJpZXJzLCBzaXplX3QgY291bnQpCi17Ci0gICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKQotICAgICAgICBhcHBlbmRIaWRkZW4oYmFy
cmllcnNbaV0pOwotfQorLy90ZW1wbGF0ZTx0eXBlbmFtZSBUPgorLy9BTFdBWVNfSU5MSU5FIHZv
aWQgU2xvdFZpc2l0b3I6OmFwcGVuZChjb25zdCBXZWFrPFQ+JiB3ZWFrKQorLy97CisvLyAgICBh
cHBlbmRVbmJhcnJpZXJlZCh3ZWFrLmdldCgpKTsKKy8vfQorLy8KKy8vdGVtcGxhdGU8dHlwZW5h
bWUgVCwgdHlwZW5hbWUgVHJhaXRzPgorLy9BTFdBWVNfSU5MSU5FIHZvaWQgU2xvdFZpc2l0b3I6
OmFwcGVuZChjb25zdCBXcml0ZUJhcnJpZXJCYXNlPFQsIFRyYWl0cz4mIHNsb3QpCisvL3sKKy8v
ICAgIGFwcGVuZFVuYmFycmllcmVkKHNsb3QuZ2V0KCkpOworLy99CisvLworLy90ZW1wbGF0ZTx0
eXBlbmFtZSBULCB0eXBlbmFtZSBUcmFpdHM+CisvL0FMV0FZU19JTkxJTkUgdm9pZCBTbG90Vmlz
aXRvcjo6YXBwZW5kSGlkZGVuKGNvbnN0IFdyaXRlQmFycmllckJhc2U8VCwgVHJhaXRzPiYgc2xv
dCkKKy8veworLy8gICAgYXBwZW5kSGlkZGVuVW5iYXJyaWVyZWQoc2xvdC5nZXQoKSk7CisvL30K
Ky8vCisvL3RlbXBsYXRlPHR5cGVuYW1lIEl0ZXJhdG9yPgorLy9BTFdBWVNfSU5MSU5FIHZvaWQg
U2xvdFZpc2l0b3I6OmFwcGVuZChJdGVyYXRvciBiZWdpbiwgSXRlcmF0b3IgZW5kKQorLy97Cisv
LyAgICBmb3IgKGF1dG8gaXQgPSBiZWdpbjsgaXQgIT0gZW5kOyArK2l0KQorLy8gICAgICAgIGFw
cGVuZCgqaXQpOworLy99CisKKy8vQUxXQVlTX0lOTElORSB2b2lkIFNsb3RWaXNpdG9yOjphcHBl
bmRWYWx1ZXMoY29uc3QgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiogYmFycmllcnMsIHNpemVf
dCBjb3VudCkKKy8veworLy8gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKQor
Ly8gICAgICAgIGFwcGVuZChiYXJyaWVyc1tpXSk7CisvL30KKy8vCisvL0FMV0FZU19JTkxJTkUg
dm9pZCBTbG90VmlzaXRvcjo6YXBwZW5kVmFsdWVzSGlkZGVuKGNvbnN0IFdyaXRlQmFycmllckJh
c2U8VW5rbm93bj4qIGJhcnJpZXJzLCBzaXplX3QgY291bnQpCisvL3sKKy8vICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgY291bnQ7ICsraSkKKy8vICAgICAgICBhcHBlbmRIaWRkZW4oYmFycmll
cnNbaV0pOworLy99CiAKIGlubGluZSBib29sIFNsb3RWaXNpdG9yOjphZGRPcGFxdWVSb290KHZv
aWQqIHB0cikKIHsKQEAgLTE1MSw2ICsxNTQsMjEgQEAgaW5saW5lIGJvb2wgU2xvdFZpc2l0b3I6
OmNvbnRhaW5zT3BhcXVlUgogICAgIHJldHVybiBoZWFwKCktPm1fb3BhcXVlUm9vdHMuY29udGFp
bnMocHRyKTsKIH0KIAoraW5saW5lIGJvb2wgU2xvdFZpc2l0b3I6OmlzTWFya2VkKGNvbnN0IHZv
aWQqIHApIGNvbnN0Cit7CisgICAgcmV0dXJuIGhlYXAoKS0+aXNNYXJrZWQocCk7Cit9CisKK2lu
bGluZSBib29sIFNsb3RWaXNpdG9yOjppc01hcmtlZChNYXJrZWRCbG9jayYgY29udGFpbmVyLCBI
ZWFwQ2VsbCogY2VsbCkgY29uc3QKK3sKKyAgICByZXR1cm4gY29udGFpbmVyLmlzTWFya2VkKG1h
cmtpbmdWZXJzaW9uKCksIGNlbGwpOworfQorCitpbmxpbmUgYm9vbCBTbG90VmlzaXRvcjo6aXNN
YXJrZWQoUHJlY2lzZUFsbG9jYXRpb24mIGNvbnRhaW5lciwgSGVhcENlbGwqIGNlbGwpIGNvbnN0
Cit7CisgICAgcmV0dXJuIGNvbnRhaW5lci5pc01hcmtlZChtYXJraW5nVmVyc2lvbigpLCBjZWxs
KTsKK30KKwogaW5saW5lIHZvaWQgU2xvdFZpc2l0b3I6OnJlcG9ydEV4dHJhTWVtb3J5VmlzaXRl
ZChzaXplX3Qgc2l6ZSkKIHsKICAgICBpZiAobV9pc0ZpcnN0VmlzaXQpIHsKQEAgLTE2OSwyMCAr
MTg3LDIwIEBAIGlubGluZSB2b2lkIFNsb3RWaXNpdG9yOjpyZXBvcnRFeHRlcm5hbE0KIH0KICNl
bmRpZgogCi1pbmxpbmUgSGVhcCogU2xvdFZpc2l0b3I6OmhlYXAoKSBjb25zdAotewotICAgIHJl
dHVybiAmbV9oZWFwOwotfQotCi1pbmxpbmUgVk0mIFNsb3RWaXNpdG9yOjp2bSgpCi17Ci0gICAg
cmV0dXJuIG1faGVhcC52bSgpOwotfQotCi1pbmxpbmUgY29uc3QgVk0mIFNsb3RWaXNpdG9yOjp2
bSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1faGVhcC52bSgpOwotfQorLy9pbmxpbmUgSGVhcCog
U2xvdFZpc2l0b3I6OmhlYXAoKSBjb25zdAorLy97CisvLyAgICByZXR1cm4gJm1faGVhcDsKKy8v
fQorLy8KKy8vaW5saW5lIFZNJiBTbG90VmlzaXRvcjo6dm0oKQorLy97CisvLyAgICByZXR1cm4g
bV9oZWFwLnZtKCk7CisvL30KKy8vCisvL2lubGluZSBjb25zdCBWTSYgU2xvdFZpc2l0b3I6OnZt
KCkgY29uc3QKKy8veworLy8gICAgcmV0dXJuIG1faGVhcC52bSgpOworLy99CiAKIHRlbXBsYXRl
PHR5cGVuYW1lIEZ1bmM+CiBJdGVyYXRpb25TdGF0dXMgU2xvdFZpc2l0b3I6OmZvckVhY2hNYXJr
U3RhY2soY29uc3QgRnVuYyYgZnVuYykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L1Nsb3RWaXNpdG9yTWFjcm9zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvU2xvdFZpc2l0b3JNYWNyb3MuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9TbG90VmlzaXRvck1hY3Jvcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMTMzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I3ByYWdtYSBvbmNlCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBBYnN0cmFjdFNsb3RWaXNp
dG9yOworY2xhc3MgSlNDZWxsOworY2xhc3MgU2xvdFZpc2l0b3I7CisKKyNkZWZpbmUgREVDTEFS
RV9VTlVTRURfU0xPVF9WSVNJVE9SX1NUUlVDVF9FWFBBTkRFUjIoY291bnRlcl8pIFwKKyAgICBz
dHJ1Y3QgVW51c2VkU2xvdFZpc2l0b3JTdHJ1Y3RTb1dlQ2FuSGF2ZUFTZW1pY29sb24jI2NvdW50
ZXJfIHsgfQorCisjZGVmaW5lIERFQ0xBUkVfVU5VU0VEX1NMT1RfVklTSVRPUl9TVFJVQ1RfRVhQ
QU5ERVIoY291bnRlcl8pIFwKKyAgICBERUNMQVJFX1VOVVNFRF9TTE9UX1ZJU0lUT1JfU1RSVUNU
X0VYUEFOREVSMihjb3VudGVyXykKKworI2RlZmluZSBERUNMQVJFX1VOVVNFRF9TTE9UX1ZJU0lU
T1JfU1RSVUNUKCkgXAorICAgIERFQ0xBUkVfVU5VU0VEX1NMT1RfVklTSVRPUl9TVFJVQ1RfRVhQ
QU5ERVIoX19DT1VOVEVSX18pCisKKy8vIE1hY3JvcyBmb3IgaW5zdGFuY2UgY3VzdG9tIHZpc2l0
b3IgbWV0aG9kLgorCisjZGVmaW5lIERFQ0xBUkVfSU5TVEFOQ0VfU0xPVF9WSVNJVE9SX01FVEhP
RF9JTVBMKHJldHVyblR5cGVfLCBtZXRob2ROYW1lXywgcG9zdE1vZGlmaWVyXykgXAorICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHJldHVyblR5cGVfIG1ldGhvZE5hbWVfIyNJbXBsKFZp
c2l0b3ImIHZpc2l0b3IpOyBcCisgICAgcmV0dXJuVHlwZV8gbWV0aG9kTmFtZV8oU2xvdFZpc2l0
b3ImKSBwb3N0TW9kaWZpZXJfOyBcCisgICAgcmV0dXJuVHlwZV8gbWV0aG9kTmFtZV8oQWJzdHJh
Y3RTbG90VmlzaXRvciYpIHBvc3RNb2RpZmllcl87IFwKKyAgICBERUNMQVJFX1VOVVNFRF9TTE9U
X1ZJU0lUT1JfU1RSVUNUKCkKKworI2RlZmluZSBERUNMQVJFX0lOU1RBTkNFX1NMT1RfVklTSVRP
Ul9NRVRIT0QocmV0dXJuVHlwZV8sIG1ldGhvZE5hbWVfKSBcCisgICAgREVDTEFSRV9JTlNUQU5D
RV9TTE9UX1ZJU0lUT1JfTUVUSE9EX0lNUEwocmV0dXJuVHlwZV8sIG1ldGhvZE5hbWVfLCApCisK
KworI2RlZmluZSBERUZJTkVfSU5TVEFOQ0VfU0xPVF9WSVNJVE9SX01FVEhPRChyZXR1cm5UeXBl
XywgY2xhc3NOYW1lXywgbWV0aG9kTmFtZV8pIFwKKyAgICByZXR1cm5UeXBlXyBjbGFzc05hbWVf
OjptZXRob2ROYW1lXyhTbG90VmlzaXRvciYgdmlzaXRvcikgeyBtZXRob2ROYW1lXyMjSW1wbCh2
aXNpdG9yKTsgfSBcCisgICAgcmV0dXJuVHlwZV8gY2xhc3NOYW1lXzo6bWV0aG9kTmFtZV8oQWJz
dHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikgIHsgbWV0aG9kTmFtZV8jI0ltcGwodmlzaXRvcik7
IH0gXAorICAgIERFQ0xBUkVfVU5VU0VEX1NMT1RfVklTSVRPUl9TVFJVQ1QoKQorCisvLyBNYWNy
b3MgZm9yIGluc3RhbmNlIHZpc2l0Q2hpbGRyZW4oKS4KKworI2RlZmluZSBERUNMQVJFX0lOU1RB
TkNFX1ZJU0lUX0NISUxEUkVOIFwKKyAgICBERUNMQVJFX0lOU1RBTkNFX1NMT1RfVklTSVRPUl9N
RVRIT0Qodm9pZCwgdmlzaXRDaGlsZHJlbikKKworCisjZGVmaW5lIERFRklORV9JTlNUQU5DRV9W
SVNJVF9DSElMRFJFTihjbGFzc05hbWVfKSBcCisgICAgREVGSU5FX0lOU1RBTkNFX1NMT1RfVklT
SVRPUl9NRVRIT0Qodm9pZCwgY2xhc3NOYW1lXywgdmlzaXRDaGlsZHJlbikKKworLy8gTWFjcm9z
IGZvciBzdGF0aWMgdmlzaXRDaGlsZHJlbigpLgorCisjZGVmaW5lIERFQ0xBUkVfVklTSVRfQ0hJ
TERSRU5fSU1QTCBcCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gc3RhdGljIHZvaWQg
dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiwgVmlzaXRvciYpCisKKyNkZWZpbmUgREVDTEFSRV9W
SVNJVF9DSElMRFJFTiBcCisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTl9JTVBMOyBcCisgICAg
c3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIEFic3RyYWN0U2xvdFZpc2l0
b3ImIHZpc2l0b3IpOyBcCisgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqIGNl
bGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorCisjZGVmaW5lIERFQ0xBUkVfRVhQT1JUX1ZJU0lU
X0NISUxEUkVOIFwKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOX0lNUEw7IFwKKyAgICBKU19F
WFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIEFic3RyYWN0
U2xvdFZpc2l0b3ImKTsgXAorICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIHZpc2l0
Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKQorCisjZGVmaW5lIERFQ0xBUkVfSU5MSU5F
X1ZJU0lUX0NISUxEUkVOIFwKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOX0lNUEw7IFwKKyAg
ICBpbmxpbmUgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBBYnN0cmFjdFNsb3RW
aXNpdG9yJik7IFwKKyAgICBpbmxpbmUgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwq
LCBTbG90VmlzaXRvciYpCisKKyNkZWZpbmUgREVDTEFSRV9URU1QTEFURV9WSVNJVF9DSElMRFJF
TiBcCisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTgorCisKKyNkZWZpbmUgREVGSU5FX1ZJU0lU
X0NISUxEUkVOKGNsYXNzTmFtZV8pIFwKKyAgICB2b2lkIGNsYXNzTmFtZV86OnZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKiBjZWxsLCBBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBcCisgICAgeyBc
CisgICAgICAgIEFic3RyYWN0U2xvdFZpc2l0b3I6OkNvbnRleHQgY29udGV4dCh2aXNpdG9yLCBj
ZWxsKTsgXAorICAgICAgICB2aXNpdENoaWxkcmVuSW1wbChjZWxsLCB2aXNpdG9yKTsgXAorICAg
IH0gXAorICAgIHZvaWQgY2xhc3NOYW1lXzo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNs
b3RWaXNpdG9yJiB2aXNpdG9yKSB7IHZpc2l0Q2hpbGRyZW5JbXBsKGNlbGwsIHZpc2l0b3IpOyB9
IFwKKyAgICBERUNMQVJFX1VOVVNFRF9TTE9UX1ZJU0lUT1JfU1RSVUNUKCkKKworI2RlZmluZSBE
RUZJTkVfRVhQT1JUX1ZJU0lUX0NISUxEUkVOKGNsYXNzTmFtZV8pIFwKKyAgICBKU19FWFBPUlRf
UFJJVkFURSB2b2lkIGNsYXNzTmFtZV86OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBBYnN0
cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBcCisgICAgeyBcCisgICAgICAgIEFic3RyYWN0U2xv
dFZpc2l0b3I6OkNvbnRleHQgY29udGV4dCh2aXNpdG9yLCBjZWxsKTsgXAorICAgICAgICB2aXNp
dENoaWxkcmVuSW1wbChjZWxsLCB2aXNpdG9yKTsgXAorICAgIH0gXAorICAgIEpTX0VYUE9SVF9Q
UklWQVRFIHZvaWQgY2xhc3NOYW1lXzo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RW
aXNpdG9yJiB2aXNpdG9yKSB7IHZpc2l0Q2hpbGRyZW5JbXBsKGNlbGwsIHZpc2l0b3IpOyB9IFwK
KyAgICBERUNMQVJFX1VOVVNFRF9TTE9UX1ZJU0lUT1JfU1RSVUNUKCkKKworI2RlZmluZSBERUZJ
TkVfSU5MSU5FX1ZJU0lUX0NISUxEUkVOKGNsYXNzTmFtZV8pIFwKKyAgICBpbmxpbmUgdm9pZCBj
bGFzc05hbWVfOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgQWJzdHJhY3RTbG90VmlzaXRv
ciYgdmlzaXRvcikgXAorICAgIHsgXAorICAgICAgICBBYnN0cmFjdFNsb3RWaXNpdG9yOjpDb250
ZXh0IGNvbnRleHQodmlzaXRvciwgY2VsbCk7IFwKKyAgICAgICAgdmlzaXRDaGlsZHJlbkltcGwo
Y2VsbCwgdmlzaXRvcik7IFwKKyAgICB9IFwKKyAgICBpbmxpbmUgdm9pZCBjbGFzc05hbWVfOjp2
aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsgdmlzaXRD
aGlsZHJlbkltcGwoY2VsbCwgdmlzaXRvcik7IH0gXAorICAgIERFQ0xBUkVfVU5VU0VEX1NMT1Rf
VklTSVRPUl9TVFJVQ1QoKQorCisjZGVmaW5lIERFRklORV9URU1QTEFURV9WSVNJVF9DSElMRFJF
Tih0ZW1wbGF0ZUNsYXVzZV8sIGNsYXNzTmFtZV8pIFwKKyAgICB0ZW1wbGF0ZUNsYXVzZV8gdm9p
ZCBjbGFzc05hbWVfOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgQWJzdHJhY3RTbG90Vmlz
aXRvciYgdmlzaXRvcikgXAorICAgIHsgXAorICAgICAgICBBYnN0cmFjdFNsb3RWaXNpdG9yOjpD
b250ZXh0IGNvbnRleHQodmlzaXRvciwgY2VsbCk7IFwKKyAgICAgICAgdmlzaXRDaGlsZHJlbklt
cGwoY2VsbCwgdmlzaXRvcik7IFwKKyAgICB9IFwKKyAgICB0ZW1wbGF0ZUNsYXVzZV8gdm9pZCBj
bGFzc05hbWVfOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0
b3IpIHsgdmlzaXRDaGlsZHJlbkltcGwoY2VsbCwgdmlzaXRvcik7IH0gXAorICAgIERFQ0xBUkVf
VU5VU0VEX1NMT1RfVklTSVRPUl9TVFJVQ1QoKQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwordXNp
bmcgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yOwordXNpbmcgSlNDOjpKU0NlbGw7Cit1c2luZyBK
U0M6OlNsb3RWaXNpdG9yOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3Vic3Bh
Y2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdWJzcGFjZS5o
CShyZXZpc2lvbiAyNzI3MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdWJzcGFj
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCw3IEBACiAKIG5hbWVzcGFjZSBKU0Mgewog
CitjbGFzcyBBYnN0cmFjdFNsb3RWaXNpdG9yOyAvLyBtbGFtCiBjbGFzcyBBbGlnbmVkTWVtb3J5
QWxsb2NhdG9yOwogY2xhc3MgSGVhcENlbGxUeXBlOwogCkBAIC04Nyw3ICs4OCw3IEBAIHB1Ymxp
YzoKICAgICB2b2lkIGZvckVhY2hNYXJrZWRDZWxsKGNvbnN0IEZ1bmMmKTsKICAgICAKICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgotICAgIFJlZjxTaGFyZWRUYXNrPHZvaWQoU2xvdFZpc2l0
b3ImKT4+IGZvckVhY2hNYXJrZWRDZWxsSW5QYXJhbGxlbChjb25zdCBGdW5jJik7CisgICAgUmVm
PFNoYXJlZFRhc2s8dm9pZChBYnN0cmFjdFNsb3RWaXNpdG9yJik+PiBmb3JFYWNoTWFya2VkQ2Vs
bEluUGFyYWxsZWwoY29uc3QgRnVuYyYpOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4K
ICAgICB2b2lkIGZvckVhY2hMaXZlQ2VsbChjb25zdCBGdW5jJik7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9TdWJzcGFjZUlubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9TdWJzcGFjZUlubGluZXMuaAkocmV2aXNpb24gMjcyNzEwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3Vic3BhY2VJbmxpbmVzLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTg2LDkgKzg2LDkgQEAgdm9pZCBTdWJzcGFjZTo6Zm9yRWFjaE1hcmtlZENlbGwo
Y29uc3QgRgogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgotUmVmPFNoYXJlZFRhc2s8dm9p
ZChTbG90VmlzaXRvciYpPj4gU3Vic3BhY2U6OmZvckVhY2hNYXJrZWRDZWxsSW5QYXJhbGxlbChj
b25zdCBGdW5jJiBmdW5jKQorUmVmPFNoYXJlZFRhc2s8dm9pZChBYnN0cmFjdFNsb3RWaXNpdG9y
Jik+PiBTdWJzcGFjZTo6Zm9yRWFjaE1hcmtlZENlbGxJblBhcmFsbGVsKGNvbnN0IEZ1bmMmIGZ1
bmMpCiB7Ci0gICAgY2xhc3MgVGFzayBmaW5hbCA6IHB1YmxpYyBTaGFyZWRUYXNrPHZvaWQoU2xv
dFZpc2l0b3ImKT4geworICAgIGNsYXNzIFRhc2sgZmluYWwgOiBwdWJsaWMgU2hhcmVkVGFzazx2
b2lkKEFic3RyYWN0U2xvdFZpc2l0b3ImKT4gewogICAgIHB1YmxpYzoKICAgICAgICAgVGFzayhT
dWJzcGFjZSYgc3Vic3BhY2UsIGNvbnN0IEZ1bmMmIGZ1bmMpCiAgICAgICAgICAgICA6IG1fc3Vi
c3BhY2Uoc3Vic3BhY2UpCkBAIC05Nyw3ICs5Nyw3IEBAIFJlZjxTaGFyZWRUYXNrPHZvaWQoU2xv
dFZpc2l0b3ImKT4+IFN1YnMKICAgICAgICAgewogICAgICAgICB9CiAgICAgICAgIAotICAgICAg
ICB2b2lkIHJ1bihTbG90VmlzaXRvciYgdmlzaXRvcikgZmluYWwKKyAgICAgICAgdm9pZCBydW4o
QWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikgZmluYWwKICAgICAgICAgewogICAgICAgICAg
ICAgd2hpbGUgKE1hcmtlZEJsb2NrOjpIYW5kbGUqIGhhbmRsZSA9IG1fYmxvY2tTb3VyY2UtPnJ1
bigpKSB7CiAgICAgICAgICAgICAgICAgaGFuZGxlLT5mb3JFYWNoTWFya2VkQ2VsbCgKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1ZlcmlmaWVyU2xvdFZpc2l0b3IuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1ZlcmlmaWVyU2xvdFZpc2l0b3Iu
Y3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1ZlcmlmaWVy
U2xvdFZpc2l0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzQ1IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlZlcmlmaWVyU2xvdFZpc2l0b3Iu
aCIKKworI2luY2x1ZGUgIkNvbnNlcnZhdGl2ZVJvb3RzLmgiCisjaW5jbHVkZSAiR0NTZWdtZW50
ZWRBcnJheUlubGluZXMuaCIKKyNpbmNsdWRlICJIZWFwQ2VsbC5oIgorI2luY2x1ZGUgIkpTQ0lu
bGluZXMuaCIKKyNpbmNsdWRlICJWTS5oIgorI2luY2x1ZGUgPHd0Zi9TdGFja1RyYWNlLmg+CisK
K25hbWVzcGFjZSBKU0MgeworCit1c2luZyBNYXJrZXJEYXRhID0gVmVyaWZpZXJTbG90VmlzaXRv
cjo6TWFya2VyRGF0YTsKKworY29uc3RleHByIGludCBtYXhNYXJraW5nU3RhY2tGcmFtZXNUb0Nh
cHR1cmUgPSAxMDA7CisKK01hcmtlckRhdGE6Ok1hcmtlckRhdGEoSGVhcENlbGwqIHBhcmVudCwg
c3RkOjp1bmlxdWVfcHRyPFN0YWNrVHJhY2U+JiYgc3RhY2spCisgICAgOiBwYXJlbnQocGFyZW50
KQorICAgICwgc3RhY2soV1RGTW92ZShzdGFjaykpCit7Cit9CisKK1ZlcmlmaWVyU2xvdFZpc2l0
b3I6Ok1hcmtlZEJsb2NrRGF0YTo6TWFya2VkQmxvY2tEYXRhKE1hcmtlZEJsb2NrKiBibG9jaykK
KyAgICA6IG1fYmxvY2soYmxvY2spCisgICAgLCBtX2F0b21zKE1hcmtlZEJsb2NrOjphdG9tc1Bl
ckJsb2NrKQoreworfQorCit2b2lkIFZlcmlmaWVyU2xvdFZpc2l0b3I6Ok1hcmtlZEJsb2NrRGF0
YTo6YWRkTWFya2VyRGF0YSh1bnNpZ25lZCBhdG9tTnVtYmVyLCBNYXJrZXJEYXRhJiYgbWFya2Vy
KQoreworICAgIGlmIChtX21hcmtlcnMuaXNFbXB0eSgpKQorICAgICAgICBtX21hcmtlcnMuZ3Jv
dyhNYXJrZWRCbG9jazo6YXRvbXNQZXJCbG9jayk7CisgICAgbV9tYXJrZXJzW2F0b21OdW1iZXJd
ID0gV1RGTW92ZShtYXJrZXIpOworfQorCitjb25zdCBNYXJrZXJEYXRhKiBWZXJpZmllclNsb3RW
aXNpdG9yOjpNYXJrZWRCbG9ja0RhdGE6Om1hcmtlckRhdGEodW5zaWduZWQgYXRvbU51bWJlcikg
Y29uc3QKK3sKKyAgICBhdXRvJiBtYXJrZXIgPSBtX21hcmtlcnNbYXRvbU51bWJlcl07CisgICAg
aWYgKG1hcmtlci5zdGFjaykKKyAgICAgICAgcmV0dXJuICZtYXJrZXI7CisgICAgcmV0dXJuIG51
bGxwdHI7Cit9CisKK1ZlcmlmaWVyU2xvdFZpc2l0b3I6OlByZWNpc2VBbGxvY2F0aW9uRGF0YTo6
UHJlY2lzZUFsbG9jYXRpb25EYXRhKFByZWNpc2VBbGxvY2F0aW9uKiBhbGxvY2F0aW9uKQorICAg
IDogbV9hbGxvY2F0aW9uKGFsbG9jYXRpb24pCit7Cit9CisKK2NvbnN0IE1hcmtlckRhdGEqIFZl
cmlmaWVyU2xvdFZpc2l0b3I6OlByZWNpc2VBbGxvY2F0aW9uRGF0YTo6bWFya2VyRGF0YSgpIGNv
bnN0Cit7CisgICAgaWYgKG1fbWFya2VyLnN0YWNrKQorICAgICAgICByZXR1cm4gJm1fbWFya2Vy
OworICAgIHJldHVybiBudWxscHRyOworfQorCit2b2lkIFZlcmlmaWVyU2xvdFZpc2l0b3I6OlBy
ZWNpc2VBbGxvY2F0aW9uRGF0YTo6YWRkTWFya2VyRGF0YShNYXJrZXJEYXRhJiYgbWFya2VyKQor
eworICAgIG1fbWFya2VyID0gV1RGTW92ZShtYXJrZXIpOworfQorCitWZXJpZmllclNsb3RWaXNp
dG9yOjpWZXJpZmllclNsb3RWaXNpdG9yKEhlYXAmIGhlYXApCisgICAgOiBCYXNlKGhlYXAsICJW
ZXJpZmllciIpCit7Cit9CisKK1ZlcmlmaWVyU2xvdFZpc2l0b3I6On5WZXJpZmllclNsb3RWaXNp
dG9yKCkKK3sKK30KKwordm9pZCBWZXJpZmllclNsb3RWaXNpdG9yOjphZGRQYXJhbGxlbENvbnN0
cmFpbnRUYXNrKFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoQWJzdHJhY3RTbG90VmlzaXRvciYpPj4g
dGFzaykKK3sKKyAgICBtX2NvbnN0cmFpbnRUYXNrcy5hcHBlbmQoV1RGTW92ZSh0YXNrKSk7Cit9
CisKK3ZvaWQgVmVyaWZpZXJTbG90VmlzaXRvcjo6ZXhlY3V0ZUNvbnN0cmFpbnRUYXNrcygpCit7
CisgICAgd2hpbGUgKCFtX2NvbnN0cmFpbnRUYXNrcy5pc0VtcHR5KCkpCisgICAgICAgIG1fY29u
c3RyYWludFRhc2tzLnRha2VGaXJzdCgpLT5ydW4oKnRoaXMpOworfQorCit2b2lkIFZlcmlmaWVy
U2xvdFZpc2l0b3I6OmFwcGVuZF9Db25zZXJ2YXRpdmVSb290cyhjb25zdCBDb25zZXJ2YXRpdmVS
b290cyYgY29uc2VydmF0aXZlUm9vdHMpCit7CisgICAgYXV0byBhcHBlbmRKU0NlbGxPckF1eGls
aWFyeSA9IFsmXSAoSGVhcENlbGwqIGhlYXBDZWxsKQorICAgIHsKKyAgICAgICAgaWYgKCFoZWFw
Q2VsbCkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBpZiAodGVzdEFuZFNldE1hcmtl
ZChoZWFwQ2VsbCkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgc3dpdGNoIChoZWFw
Q2VsbC0+Y2VsbEtpbmQoKSkgeworICAgICAgICBjYXNlIEhlYXBDZWxsOjpKU0NlbGw6CisgICAg
ICAgIGNhc2UgSGVhcENlbGw6OkpTQ2VsbFdpdGhJbmRleGluZ0hlYWRlcjogeworICAgICAgICAg
ICAgSlNDZWxsKiBqc0NlbGwgPSBzdGF0aWNfY2FzdDxKU0NlbGwqPihoZWFwQ2VsbCk7CisgICAg
ICAgICAgICBhcHBlbmRUb01hcmtTdGFjayhqc0NlbGwpOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisKKyAgICAgICAgY2FzZSBIZWFwQ2VsbDo6QXV4aWxpYXJ5OgorICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisgICAgfTsKKworICAgIEhlYXBDZWxsKiogcm9vdHMgPSBj
b25zZXJ2YXRpdmVSb290cy5yb290cygpOworICAgIHNpemVfdCBzaXplID0gY29uc2VydmF0aXZl
Um9vdHMuc2l6ZSgpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKQorICAg
ICAgICBhcHBlbmRKU0NlbGxPckF1eGlsaWFyeShyb290c1tpXSk7Cit9CisKK3ZvaWQgVmVyaWZp
ZXJTbG90VmlzaXRvcjo6YXBwZW5kVG9NYXJrU3RhY2soSlNDZWxsKiBjZWxsKQoreworLy8gICAg
QVNTRVJUKG1faGVhcC5pc01hcmtlZChjZWxsKSk7IC8vIG1sYW0gVEVTVCBzYW5pdHkgY2hlY2su
CisgICAgQVNTRVJUKCFjZWxsLT5pc1phcHBlZCgpKTsKKyAgICBtX2NvbGxlY3RvclN0YWNrLmFw
cGVuZChjZWxsKTsKK30KKwordm9pZCBWZXJpZmllclNsb3RWaXNpdG9yOjphcHBlbmRVbmJhcnJp
ZXJlZEltcGwoSlNDZWxsKiBjZWxsKQoreworICAgIGlmIChVTkxJS0VMWShjZWxsLT5pc1ByZWNp
c2VBbGxvY2F0aW9uKCkpKSB7CisgICAgICAgIGlmIChMSUtFTFkoaXNNYXJrZWQoY2VsbC0+cHJl
Y2lzZUFsbG9jYXRpb24oKSwgY2VsbCkpKQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0gZWxz
ZSB7CisgICAgICAgIE1hcmtlZEJsb2NrJiBibG9jayA9IGNlbGwtPm1hcmtlZEJsb2NrKCk7Cisg
ICAgICAgIGlmIChMSUtFTFkoaXNNYXJrZWQoYmxvY2ssIGNlbGwpKSkKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBhcHBlbmRTbG93KGNlbGwpOworfQorCit2b2lkIFZlcmlmaWVy
U2xvdFZpc2l0b3I6OmFwcGVuZEhpZGRlblVuYmFycmllcmVkSW1wbChKU0NlbGwqIGNlbGwpCit7
CisgICAgYXBwZW5kVW5iYXJyaWVyZWRJbXBsKGNlbGwpOworfQorCitib29sIFZlcmlmaWVyU2xv
dFZpc2l0b3I6OmFkZE9wYXF1ZVJvb3Qodm9pZCogcHRyKQoreworICAgIGlmICghcHRyKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFtX29wYXF1ZVJvb3RzLmFkZChwdHIpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgVmVyaWZpZXJT
bG90VmlzaXRvcjo6Y29udGFpbnNPcGFxdWVSb290KHZvaWQqIHB0cikgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbV9vcGFxdWVSb290cy5jb250YWlucyhwdHIpOworfQorCit2b2lkIFZlcmlmaWVyU2xv
dFZpc2l0b3I6OmRyYWluKCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChtX211dGF0b3JTdGFjay5p
c0VtcHR5KCkpOworCisgICAgTWFya1N0YWNrQXJyYXkmIHN0YWNrID0gbV9jb2xsZWN0b3JTdGFj
azsKKyAgICBpZiAoc3RhY2suaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBzdGFj
ay5yZWZpbGwoKTsKKyAgICB3aGlsZSAoc3RhY2suY2FuUmVtb3ZlTGFzdCgpKSB7CisgICAgICAg
IHZpc2l0Q2hpbGRyZW4oc3RhY2sucmVtb3ZlTGFzdCgpKTsKKyAgICB9Cit9CisKK3ZvaWQgVmVy
aWZpZXJTbG90VmlzaXRvcjo6ZHVtcE1hcmtlckRhdGEoSGVhcENlbGwqIGNlbGwpCit7CisgICAg
aWYgKGNlbGwtPmlzUHJlY2lzZUFsbG9jYXRpb24oKSkKKyAgICAgICAgcmV0dXJuIGR1bXBNYXJr
ZXJEYXRhKGNlbGwtPnByZWNpc2VBbGxvY2F0aW9uKCksIGNlbGwpOworICAgIHJldHVybiBkdW1w
TWFya2VyRGF0YShjZWxsLT5tYXJrZWRCbG9jaygpLCBjZWxsKTsKK30KKwordm9pZCBWZXJpZmll
clNsb3RWaXNpdG9yOjpkdW1wTWFya2VyRGF0YShQcmVjaXNlQWxsb2NhdGlvbiYgYWxsb2NhdGlv
biwgSGVhcENlbGwqIGNlbGwpCit7CisgICAgYXV0byBpdGVyYXRvciA9IG1fcHJlY2lzZUFsbG9j
YXRpb25NYXAuZmluZCgmYWxsb2NhdGlvbik7CisgICAgaWYgKGl0ZXJhdG9yICE9IG1fcHJlY2lz
ZUFsbG9jYXRpb25NYXAuZW5kKCkpIHsKKyAgICAgICAgZHVtcE1hcmtlckRhdGEoY2VsbCwgaXRl
cmF0b3ItPnZhbHVlLT5tYXJrZXJEYXRhKCkpOworICAgICAgICByZXR1cm47CisgICAgfQorICAg
IGRhdGFMb2dMbigiQ2VsbCAiLCBSYXdQb2ludGVyKGNlbGwpLCAiIG5vdCBmb3VuZCIpOworfQor
Cit2b2lkIFZlcmlmaWVyU2xvdFZpc2l0b3I6OmR1bXBNYXJrZXJEYXRhKE1hcmtlZEJsb2NrJiBi
bG9jaywgSGVhcENlbGwqIGNlbGwpCit7CisgICAgYXV0byBpdGVyYXRvciA9IG1fbWFya2VkQmxv
Y2tNYXAuZmluZCgmYmxvY2spOworICAgIGlmIChpdGVyYXRvciAhPSBtX21hcmtlZEJsb2NrTWFw
LmVuZCgpKSB7CisgICAgICAgIHVuc2lnbmVkIGF0b21OdW1iZXIgPSBibG9jay5hdG9tTnVtYmVy
KGNlbGwpOworICAgICAgICBkdW1wTWFya2VyRGF0YShjZWxsLCBpdGVyYXRvci0+dmFsdWUtPm1h
cmtlckRhdGEoYXRvbU51bWJlcikpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGRhdGFM
b2dMbigiQ2VsbCAiLCBSYXdQb2ludGVyKGNlbGwpLCAiIG5vdCBmb3VuZCIpOworfQorCit2b2lk
IFZlcmlmaWVyU2xvdFZpc2l0b3I6OmR1bXBNYXJrZXJEYXRhKEhlYXBDZWxsKiBjZWxsLCBjb25z
dCBNYXJrZXJEYXRhKiBtYXJrZXIpCit7CisgICAgaWYgKCFtYXJrZXIpIHsKKyAgICAgICAgZGF0
YUxvZ0xuKCJNYXJrZXIgZGF0YSBpcyBub3QgYXZhaWxhYmxlIGZvciBjZWxsICIsIFJhd1BvaW50
ZXIoY2VsbCkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgZGF0YUxvZ0xuKCJDZWxs
ICIsIFJhd1BvaW50ZXIoY2VsbCksICIgd2FzIHJlYWNoYWJsZSB2aWEgY2VsbCAiLCBSYXdQb2lu
dGVyKG1hcmtlci0+cGFyZW50KSwgIiBhdDoiKTsKKyAgICBtYXJrZXItPnN0YWNrLT5kdW1wKFdU
Rjo6ZGF0YUZpbGUoKSwgIiAgICAiKTsKK30KKworYm9vbCBWZXJpZmllclNsb3RWaXNpdG9yOjpp
c0ZpcnN0VmlzaXQoKSBjb25zdAoreworICAgIC8vIFdlIG5lZWQgdG8gYWx3YXlzIHJldHVybiBm
YWxzZSBiZWNhdXNlIHRoaXMgaXMgdXNlZCB0byBhZ2VkIGFuIFVubGlua2VkQ29kZUJsb2NrCisg
ICAgLy8gaW4gdGhlIHJlZ3VsYXIgR0M6IHNlZSBVbmxpbmtlZENvZGVCbG9jazo6dmlzaXRDaGls
ZHJlbkltcGwoKS4gV2Ugc2hvdWxkIG5vdAorICAgIC8vIHNob3VsZCBkbyB0aGF0IGFnaW5nIGFj
dGlvbi4KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgVmVyaWZpZXJTbG90VmlzaXRvcjo6
aXNNYXJrZWQoY29uc3Qgdm9pZCogcmF3Q2VsbCkgY29uc3QKK3sKKyAgICBIZWFwQ2VsbCogY2Vs
bCA9IGJpdHdpc2VfY2FzdDxIZWFwQ2VsbCo+KHJhd0NlbGwpOworICAgIGlmIChjZWxsLT5pc1By
ZWNpc2VBbGxvY2F0aW9uKCkpCisgICAgICAgIHJldHVybiBpc01hcmtlZChjZWxsLT5wcmVjaXNl
QWxsb2NhdGlvbigpLCBjZWxsKTsKKyAgICByZXR1cm4gaXNNYXJrZWQoY2VsbC0+bWFya2VkQmxv
Y2soKSwgY2VsbCk7Cit9CisKK2Jvb2wgVmVyaWZpZXJTbG90VmlzaXRvcjo6aXNNYXJrZWQoUHJl
Y2lzZUFsbG9jYXRpb24mIGFsbG9jYXRpb24sIEhlYXBDZWxsKikgY29uc3QKK3sKKyAgICByZXR1
cm4gbV9wcmVjaXNlQWxsb2NhdGlvbk1hcC5jb250YWlucygmYWxsb2NhdGlvbik7Cit9CisKK2Jv
b2wgVmVyaWZpZXJTbG90VmlzaXRvcjo6aXNNYXJrZWQoTWFya2VkQmxvY2smIGJsb2NrLCBIZWFw
Q2VsbCogY2VsbCkgY29uc3QKK3sKKyAgICBhdXRvIGVudHJ5ID0gbV9tYXJrZWRCbG9ja01hcC5m
aW5kKCZibG9jayk7CisgICAgaWYgKGVudHJ5ID09IG1fbWFya2VkQmxvY2tNYXAuZW5kKCkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8mIGRhdGEgPSBlbnRyeS0+dmFsdWU7Cisg
ICAgdW5zaWduZWQgYXRvbU51bWJlciA9IGJsb2NrLmF0b21OdW1iZXIoY2VsbCk7CisgICAgcmV0
dXJuIGRhdGEtPmlzTWFya2VkKGF0b21OdW1iZXIpOworfQorCit2b2lkIFZlcmlmaWVyU2xvdFZp
c2l0b3I6Om1hcmtBdXhpbGlhcnkoY29uc3Qgdm9pZCogYmFzZSkKK3sKKyAgICBIZWFwQ2VsbCog
Y2VsbCA9IGJpdHdpc2VfY2FzdDxIZWFwQ2VsbCo+KGJhc2UpOworCisgICAgQVNTRVJUKGNlbGwt
PmhlYXAoKSA9PSBoZWFwKCkpOworICAgIHRlc3RBbmRTZXRNYXJrZWQoY2VsbCk7Cit9CisKK2Jv
b2wgVmVyaWZpZXJTbG90VmlzaXRvcjo6bXV0YXRvcklzU3RvcHBlZCgpIGNvbnN0Cit7CisgICAg
cmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgVmVyaWZpZXJTbG90VmlzaXRvcjo6dGVzdEFuZFNldE1h
cmtlZChjb25zdCB2b2lkKiByYXdDZWxsKQoreworICAgIEhlYXBDZWxsKiBjZWxsID0gYml0d2lz
ZV9jYXN0PEhlYXBDZWxsKj4ocmF3Q2VsbCk7CisgICAgaWYgKGNlbGwtPmlzUHJlY2lzZUFsbG9j
YXRpb24oKSkKKyAgICAgICAgcmV0dXJuIHRlc3RBbmRTZXRNYXJrZWQoY2VsbC0+cHJlY2lzZUFs
bG9jYXRpb24oKSk7CisgICAgcmV0dXJuIHRlc3RBbmRTZXRNYXJrZWQoY2VsbC0+bWFya2VkQmxv
Y2soKSwgY2VsbCk7Cit9CisKK2Jvb2wgVmVyaWZpZXJTbG90VmlzaXRvcjo6dGVzdEFuZFNldE1h
cmtlZChQcmVjaXNlQWxsb2NhdGlvbiYgYWxsb2NhdGlvbikKK3sKKyAgICBzdGQ6OnVuaXF1ZV9w
dHI8UHJlY2lzZUFsbG9jYXRpb25EYXRhPiYgZGF0YSA9IG1fcHJlY2lzZUFsbG9jYXRpb25NYXAu
YWRkKCZhbGxvY2F0aW9uLCBudWxscHRyKS5pdGVyYXRvci0+dmFsdWU7CisgICAgaWYgKCFkYXRh
KSB7CisgICAgICAgIGRhdGEgPSBtYWtlVW5pcXVlPFByZWNpc2VBbGxvY2F0aW9uRGF0YT4oJmFs
bG9jYXRpb24pOworICAgICAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6dmVyYm9zZVZlcmlmeUdD
KCkpKQorICAgICAgICAgICAgZGF0YS0+YWRkTWFya2VyRGF0YSh7IHBhcmVudENlbGwoKSwgU3Rh
Y2tUcmFjZTo6Y2FwdHVyZVN0YWNrVHJhY2UobWF4TWFya2luZ1N0YWNrRnJhbWVzVG9DYXB0dXJl
LCAyKSB9KTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsK
K30KKworYm9vbCBWZXJpZmllclNsb3RWaXNpdG9yOjp0ZXN0QW5kU2V0TWFya2VkKE1hcmtlZEJs
b2NrJiBibG9jaywgSGVhcENlbGwqIGNlbGwpCit7CisgICAgc3RkOjp1bmlxdWVfcHRyPE1hcmtl
ZEJsb2NrRGF0YT4mIGRhdGEgPSBtX21hcmtlZEJsb2NrTWFwLmFkZCgmYmxvY2ssIG51bGxwdHIp
Lml0ZXJhdG9yLT52YWx1ZTsKKyAgICBpZiAoIWRhdGEpCisgICAgICAgIGRhdGEgPSBtYWtlVW5p
cXVlPE1hcmtlZEJsb2NrRGF0YT4oJmJsb2NrKTsKKworICAgIHVuc2lnbmVkIGF0b21OdW1iZXIg
PSBibG9jay5hdG9tTnVtYmVyKGNlbGwpOworICAgIGJvb2wgYWxyZWFkeVNldCA9IGRhdGEtPnRl
c3RBbmRTZXRNYXJrZWQoYXRvbU51bWJlcik7CisgICAgaWYgKCFhbHJlYWR5U2V0ICYmIFVOTElL
RUxZKE9wdGlvbnM6OnZlcmJvc2VWZXJpZnlHQygpKSkKKyAgICAgICAgZGF0YS0+YWRkTWFya2Vy
RGF0YShhdG9tTnVtYmVyLCB7IHBhcmVudENlbGwoKSwgU3RhY2tUcmFjZTo6Y2FwdHVyZVN0YWNr
VHJhY2UobWF4TWFya2luZ1N0YWNrRnJhbWVzVG9DYXB0dXJlLCAyKSB9KTsKKyAgICByZXR1cm4g
YWxyZWFkeVNldDsKK30KKwordm9pZCBWZXJpZmllclNsb3RWaXNpdG9yOjpzZXRNYXJrZWRBbmRB
cHBlbmRUb01hcmtTdGFjayhKU0NlbGwqIGNlbGwpCit7CisgICAgaWYgKG1fc3VwcHJlc3NWZXJp
ZmllcikKKyAgICAgICAgcmV0dXJuOworICAgIGlmICh0ZXN0QW5kU2V0TWFya2VkKGNlbGwpKQor
ICAgICAgICByZXR1cm47CisgICAgYXBwZW5kVG9NYXJrU3RhY2soY2VsbCk7Cit9CisKK3ZvaWQg
VmVyaWZpZXJTbG90VmlzaXRvcjo6dmlzaXRBc0NvbnN0cmFpbnQoY29uc3QgSlNDZWxsKiBjZWxs
KQoreworICAgIHZpc2l0Q2hpbGRyZW4oY2VsbCk7Cit9CisKK3ZvaWQgVmVyaWZpZXJTbG90Vmlz
aXRvcjo6dmlzaXRDaGlsZHJlbihjb25zdCBKU0NlbGwqIGNlbGwpCit7CisgICAgUkVMRUFTRV9B
U1NFUlQoaXNNYXJrZWQoY2VsbCkpOyAvLyBtbGFtIE1BS0UgaW50byBBU1NFUlQKKyAgICAKKyAg
ICBzd2l0Y2ggKGNlbGwtPnR5cGUoKSkgeworICAgIGNhc2UgU3RyaW5nVHlwZToKKyAgICAgICAg
SlNTdHJpbmc6OnZpc2l0Q2hpbGRyZW4oY29uc3RfY2FzdDxKU0NlbGwqPihjZWxsKSwgKnRoaXMp
OworICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAgY2FzZSBGaW5hbE9iamVjdFR5cGU6Cisg
ICAgICAgIEpTRmluYWxPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oY29uc3RfY2FzdDxKU0NlbGwqPihj
ZWxsKSwgKnRoaXMpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgQXJyYXlUeXBlOgorICAg
ICAgICBKU0FycmF5Ojp2aXNpdENoaWxkcmVuKGNvbnN0X2Nhc3Q8SlNDZWxsKj4oY2VsbCksICp0
aGlzKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIC8v
IEZJWE1FOiBUaGlzIGNvdWxkIGJlIHNvIG11Y2ggYmV0dGVyLgorICAgICAgICAvLyBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYyNDYyCisgICAgICAgIGNlbGwtPm1l
dGhvZFRhYmxlKHZtKCkpLT52aXNpdENoaWxkcmVuKGNvbnN0X2Nhc3Q8SlNDZWxsKj4oY2VsbCks
ICp0aGlzKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCit9IC8vIG5hbWVzcGFjZSBKU0MK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1ZlcmlmaWVyU2xvdFZpc2l0b3IuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9WZXJpZmllclNsb3RWaXNp
dG9yLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVmVyaWZp
ZXJTbG90VmlzaXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTcyIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNp
bmNsdWRlICJBYnN0cmFjdFNsb3RWaXNpdG9yLmgiCisjaW5jbHVkZSAiSlNDSlNWYWx1ZS5oIgor
I2luY2x1ZGUgIlZpc2l0UmFjZUtleS5oIgorI2luY2x1ZGUgIldlYWsuaCIKKyNpbmNsdWRlIDxt
ZW1vcnk+CisjaW5jbHVkZSA8d3RmL0JpdFZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi9Db25jdXJy
ZW50UHRySGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CisjaW5jbHVkZSA8
d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1No
YXJlZFRhc2suaD4KKworbmFtZXNwYWNlIFdURiB7CisKK2NsYXNzIFN0YWNrVHJhY2U7CisKK30g
Ly8gbmFtZXNwYWNlIFdURgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgQ29uc2VydmF0aXZl
Um9vdHM7CitjbGFzcyBIZWFwOworY2xhc3MgSGVhcENlbGw7CitjbGFzcyBQcmVjaXNlQWxsb2Nh
dGlvbjsKK2NsYXNzIE1hcmtlZEJsb2NrOworCit1c2luZyBXVEY6OlN0YWNrVHJhY2U7CisKK2Ns
YXNzIFZlcmlmaWVyU2xvdFZpc2l0b3IgOiBwdWJsaWMgQWJzdHJhY3RTbG90VmlzaXRvciB7Cisg
ICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoVmVyaWZpZXJTbG90VmlzaXRvcik7CisgICAgV1RGX01B
S0VfRkFTVF9BTExPQ0FURUQ7CisgICAgdXNpbmcgQmFzZSA9IEFic3RyYWN0U2xvdFZpc2l0b3I7
CitwdWJsaWM6CisgICAgc3RydWN0IE1hcmtlckRhdGEgeworICAgICAgICBNYXJrZXJEYXRhKCkg
PSBkZWZhdWx0OworICAgICAgICBNYXJrZXJEYXRhKE1hcmtlckRhdGEmJikgPSBkZWZhdWx0Owor
ICAgICAgICBNYXJrZXJEYXRhKEhlYXBDZWxsKiwgc3RkOjp1bmlxdWVfcHRyPFN0YWNrVHJhY2U+
JiYpOworICAgICAgICBNYXJrZXJEYXRhJiBvcGVyYXRvcj0oTWFya2VyRGF0YSYmKSA9IGRlZmF1
bHQ7CisKKyAgICAgICAgSGVhcENlbGwqIHBhcmVudCB7IG51bGxwdHIgfTsKKyAgICAgICAgc3Rk
Ojp1bmlxdWVfcHRyPFN0YWNrVHJhY2U+IHN0YWNrOworICAgIH07CisKKyAgICBWZXJpZmllclNs
b3RWaXNpdG9yKEhlYXAmKTsKKyAgICB+VmVyaWZpZXJTbG90VmlzaXRvcigpOworCisgICAgdm9p
ZCBhcHBlbmRfQ29uc2VydmF0aXZlUm9vdHMoY29uc3QgQ29uc2VydmF0aXZlUm9vdHMmKSBmaW5h
bDsKKyAgICB2b2lkIGFwcGVuZFVuYmFycmllcmVkSW1wbChKU0NlbGwqKSBmaW5hbDsKKyAgICB2
b2lkIGFwcGVuZEhpZGRlblVuYmFycmllcmVkSW1wbChKU0NlbGwqKSBmaW5hbDsKKworICAgIGJv
b2wgYWRkT3BhcXVlUm9vdCh2b2lkKikgZmluYWw7IC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgcm9v
dCB3YXMgbmV3LgorICAgIGJvb2wgY29udGFpbnNPcGFxdWVSb290KHZvaWQqKSBjb25zdCBmaW5h
bDsKKworICAgIGJvb2wgaXNGaXJzdFZpc2l0KCkgY29uc3QgZmluYWw7CisgICAgYm9vbCBpc01h
cmtlZChjb25zdCB2b2lkKikgY29uc3QgZmluYWw7CisgICAgYm9vbCBpc01hcmtlZChNYXJrZWRC
bG9jayYsIEhlYXBDZWxsKikgY29uc3QgZmluYWw7CisgICAgYm9vbCBpc01hcmtlZChQcmVjaXNl
QWxsb2NhdGlvbiYsIEhlYXBDZWxsKikgY29uc3QgZmluYWw7CisKKyAgICB2b2lkIG1hcmtBdXhp
bGlhcnkoY29uc3Qgdm9pZCopIGZpbmFsOworCisgICAgdm9pZCByZXBvcnRFeHRyYU1lbW9yeVZp
c2l0ZWQoc2l6ZV90KSBmaW5hbCB7IH0KKyNpZiBFTkFCTEUoUkVTT1VSQ0VfVVNBR0UpCisgICAg
dm9pZCByZXBvcnRFeHRlcm5hbE1lbW9yeVZpc2l0ZWQoc2l6ZV90KSBmaW5hbCB7IH0KKyNlbmRp
ZgorCisgICAgYm9vbCBtdXRhdG9ySXNTdG9wcGVkKCkgY29uc3QgZmluYWw7CisKKyAgICB2b2lk
IGRpZFJhY2UoY29uc3QgVmlzaXRSYWNlS2V5JikgZmluYWwgeyB9CisgICAgdm9pZCBkdW1wKFBy
aW50U3RyZWFtJikgY29uc3QgZmluYWwgeyB9CisKKyAgICB2b2lkIHZpc2l0QXNDb25zdHJhaW50
KGNvbnN0IEpTQ2VsbCopIGZpbmFsOworCisgICAgdm9pZCBkcmFpbigpOworCisgICAgdm9pZCBh
ZGRQYXJhbGxlbENvbnN0cmFpbnRUYXNrKFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoQWJzdHJhY3RT
bG90VmlzaXRvciYpPj4pIGZpbmFsOworICAgIHZvaWQgZXhlY3V0ZUNvbnN0cmFpbnRUYXNrcygp
OworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBmb3JFYWNoTGl2ZUNlbGwo
Y29uc3QgRnVuY3RvciYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9y
RWFjaExpdmVQcmVjaXNlQWxsb2NhdGlvbihjb25zdCBGdW5jdG9yJik7CisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBmb3JFYWNoTGl2ZU1hcmtlZEJsb2NrQ2VsbChjb25zdCBG
dW5jdG9yJik7CisKKyAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGR1bXBNYXJrZXJEYXRhKEhl
YXBDZWxsKik7CisKK3ByaXZhdGU6CisgICAgY2xhc3MgTWFya2VkQmxvY2tEYXRhIHsKKyAgICAg
ICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CisgICAgICAgIFdURl9NQUtFX05PTkNPUFlBQkxF
KE1hcmtlZEJsb2NrRGF0YSk7CisgICAgcHVibGljOgorICAgICAgICBNYXJrZWRCbG9ja0RhdGEo
TWFya2VkQmxvY2sqKTsKKworICAgICAgICBNYXJrZWRCbG9jayogYmxvY2soKSBjb25zdCB7IHJl
dHVybiBtX2Jsb2NrOyB9CisgICAgICAgIGNvbnN0IEJpdFZlY3RvciYgYXRvbXMoKSBjb25zdCB7
IHJldHVybiBtX2F0b21zOyB9CisKKyAgICAgICAgYm9vbCBpc01hcmtlZCh1bnNpZ25lZCBhdG9t
TnVtYmVyKSB7IHJldHVybiBtX2F0b21zLnF1aWNrR2V0KGF0b21OdW1iZXIpOyB9CisgICAgICAg
IGJvb2wgdGVzdEFuZFNldE1hcmtlZCh1bnNpZ25lZCBhdG9tTnVtYmVyKSB7IHJldHVybiBtX2F0
b21zLnF1aWNrU2V0KGF0b21OdW1iZXIpOyB9CisKKyAgICAgICAgdm9pZCBhZGRNYXJrZXJEYXRh
KHVuc2lnbmVkIGF0b21OdW1iZXIsIE1hcmtlckRhdGEmJik7CisgICAgICAgIGNvbnN0IE1hcmtl
ckRhdGEqIG1hcmtlckRhdGEodW5zaWduZWQgYXRvbU51bWJlcikgY29uc3Q7CisKKyAgICBwcml2
YXRlOgorICAgICAgICBNYXJrZWRCbG9jayogbV9ibG9jayB7IG51bGxwdHIgfTsKKyAgICAgICAg
Qml0VmVjdG9yIG1fYXRvbXM7CisgICAgICAgIFZlY3RvcjxNYXJrZXJEYXRhPiBtX21hcmtlcnM7
CisgICAgfTsKKworICAgIGNsYXNzIFByZWNpc2VBbGxvY2F0aW9uRGF0YSB7CisgICAgICAgIFdU
Rl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworICAgICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShQcmVj
aXNlQWxsb2NhdGlvbkRhdGEpOworICAgIHB1YmxpYzoKKyAgICAgICAgUHJlY2lzZUFsbG9jYXRp
b25EYXRhKFByZWNpc2VBbGxvY2F0aW9uKik7CisgICAgICAgIFByZWNpc2VBbGxvY2F0aW9uKiBh
bGxvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9hbGxvY2F0aW9uOyB9CisKKyAgICAgICAgdm9p
ZCBhZGRNYXJrZXJEYXRhKE1hcmtlckRhdGEmJik7CisgICAgICAgIGNvbnN0IE1hcmtlckRhdGEq
IG1hcmtlckRhdGEoKSBjb25zdDsKKworICAgIHByaXZhdGU6CisgICAgICAgIFByZWNpc2VBbGxv
Y2F0aW9uKiBtX2FsbG9jYXRpb24geyBudWxscHRyIH07CisgICAgICAgIE1hcmtlckRhdGEgbV9t
YXJrZXI7CisgICAgfTsKKworICAgIHVzaW5nIE1hcmtlZEJsb2NrTWFwID0gSGFzaE1hcDxNYXJr
ZWRCbG9jayosIHN0ZDo6dW5pcXVlX3B0cjxNYXJrZWRCbG9ja0RhdGE+PjsKKyAgICB1c2luZyBQ
cmVjaXNlQWxsb2NhdGlvbk1hcCA9IEhhc2hNYXA8UHJlY2lzZUFsbG9jYXRpb24qLCBzdGQ6OnVu
aXF1ZV9wdHI8UHJlY2lzZUFsbG9jYXRpb25EYXRhPj47CisKKyAgICB2b2lkIGFwcGVuZFRvTWFy
a1N0YWNrKEpTQ2VsbCopOworICAgIHZvaWQgYXBwZW5kU2xvdyhKU0NlbGwqIGNlbGwpIHsgc2V0
TWFya2VkQW5kQXBwZW5kVG9NYXJrU3RhY2soY2VsbCk7IH0KKworICAgIGJvb2wgdGVzdEFuZFNl
dE1hcmtlZChjb25zdCB2b2lkKiByYXdDZWxsKTsKKyAgICBib29sIHRlc3RBbmRTZXRNYXJrZWQo
UHJlY2lzZUFsbG9jYXRpb24mKTsKKyAgICBib29sIHRlc3RBbmRTZXRNYXJrZWQoTWFya2VkQmxv
Y2smLCBIZWFwQ2VsbCopOworCisgICAgdm9pZCBzZXRNYXJrZWRBbmRBcHBlbmRUb01hcmtTdGFj
ayhKU0NlbGwqKTsKKworICAgIHZvaWQgdmlzaXRDaGlsZHJlbihjb25zdCBKU0NlbGwqKTsKKwor
ICAgIHZvaWQgZHVtcE1hcmtlckRhdGEoUHJlY2lzZUFsbG9jYXRpb24mLCBIZWFwQ2VsbCopOwor
ICAgIHZvaWQgZHVtcE1hcmtlckRhdGEoTWFya2VkQmxvY2smLCBIZWFwQ2VsbCopOworICAgIHZv
aWQgZHVtcE1hcmtlckRhdGEoSGVhcENlbGwqLCBjb25zdCBNYXJrZXJEYXRhKik7CisKKyAgICBQ
cmVjaXNlQWxsb2NhdGlvbk1hcCBtX3ByZWNpc2VBbGxvY2F0aW9uTWFwOworICAgIE1hcmtlZEJs
b2NrTWFwIG1fbWFya2VkQmxvY2tNYXA7CisgICAgQ29uY3VycmVudFB0ckhhc2hTZXQgbV9vcGFx
dWVSb290czsKKyAgICBEZXF1ZTxSZWZQdHI8U2hhcmVkVGFzazx2b2lkKEFic3RyYWN0U2xvdFZp
c2l0b3ImKT4+LCAzMj4gbV9jb25zdHJhaW50VGFza3M7Cit9OworCit9IC8vIG5hbWVzcGFjZSBK
U0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1ZlcmlmaWVyU2xvdFZpc2l0b3JJ
bmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVmVyaWZp
ZXJTbG90VmlzaXRvcklubGluZXMuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9WZXJpZmllclNsb3RWaXNpdG9ySW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlZlcmlmaWVyU2xvdFZpc2l0b3IuaCIKKwor
I2luY2x1ZGUgIkFic3RyYWN0U2xvdFZpc2l0b3JJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0Mg
eworCit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgordm9pZCBWZXJpZmllclNsb3RWaXNpdG9y
Ojpmb3JFYWNoTGl2ZUNlbGwoY29uc3QgRnVuY3RvciYgZnVuY3RvcikKK3sKKyAgICBmb3JFYWNo
TGl2ZVByZWNpc2VBbGxvY2F0aW9uKGZ1bmN0b3IpOworICAgIGZvckVhY2hMaXZlTWFya2VkQmxv
Y2tDZWxsKGZ1bmN0b3IpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgordm9pZCBW
ZXJpZmllclNsb3RWaXNpdG9yOjpmb3JFYWNoTGl2ZVByZWNpc2VBbGxvY2F0aW9uKGNvbnN0IEZ1
bmN0b3ImIGZ1bmMpCit7CisgICAgZm9yIChhdXRvJiBlbnRyeSA6IG1fcHJlY2lzZUFsbG9jYXRp
b25NYXApIHsKKyAgICAgICAgUHJlY2lzZUFsbG9jYXRpb24qIGFsbG9jYXRpb24gPSBlbnRyeS52
YWx1ZS0+YWxsb2NhdGlvbigpOworICAgICAgICBmdW5jKGFsbG9jYXRpb24tPmNlbGwoKSk7Cisg
ICAgfQorfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgordm9pZCBWZXJpZmllclNsb3RW
aXNpdG9yOjpmb3JFYWNoTGl2ZU1hcmtlZEJsb2NrQ2VsbChjb25zdCBGdW5jdG9yJiBmdW5jKQor
eworICAgIGZvciAoYXV0byYgZW50cnkgOiBtX21hcmtlZEJsb2NrTWFwKSB7CisgICAgICAgIGF1
dG8mIGRhdGEgPSBlbnRyeS52YWx1ZTsKKyAgICAgICAgTWFya2VkQmxvY2sqIGJsb2NrID0gZGF0
YS0+YmxvY2soKTsKKyAgICAgICAgY29uc3QgQml0VmVjdG9yJiBhdG9tcyA9ICBkYXRhLT5hdG9t
cygpOworICAgICAgICBmb3IgKGF1dG8gYXRvbU51bWJlciA6IGF0b21zKSB7CisgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVChhdG9tcy5xdWlja0dldChhdG9tTnVtYmVyKSk7IC8vIG1sYW0gVEVT
VCBTYW5pdHkgQ2hlY2sKKyAgICAgICAgICAgIGZ1bmMoYml0d2lzZV9jYXN0PEhlYXBDZWxsKj4o
YmxvY2stPmhhbmRsZSgpLmF0b21BdChhdG9tTnVtYmVyKSkpOworICAgICAgICB9CisgICAgfQor
fQorCit9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L1Zpc2l0Q291bnRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L1Zpc2l0Q291bnRlci5oCShyZXZpc2lvbiAyNzI3MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9WaXNpdENvdW50ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjUsNyArMjUsNyBAQAog
CiAjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgIlNsb3RWaXNpdG9yLmgiCisjaW5jbHVkZSAiQWJz
dHJhY3RTbG90VmlzaXRvci5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIApAQCAtMzMsMTMgKzMzLDEz
IEBAIGNsYXNzIFZpc2l0Q291bnRlciB7CiBwdWJsaWM6CiAgICAgVmlzaXRDb3VudGVyKCkgeyB9
CiAgICAgCi0gICAgVmlzaXRDb3VudGVyKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorICAgIFZpc2l0
Q291bnRlcihBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogICAgICAgICA6IG1fdmlzaXRv
cigmdmlzaXRvcikKICAgICAgICAgLCBtX2luaXRpYWxWaXNpdENvdW50KHZpc2l0b3IudmlzaXRD
b3VudCgpKQogICAgIHsKICAgICB9CiAgICAgCi0gICAgU2xvdFZpc2l0b3ImIHZpc2l0b3IoKSBj
b25zdCB7IHJldHVybiAqbV92aXNpdG9yOyB9CisgICAgQWJzdHJhY3RTbG90VmlzaXRvciYgdmlz
aXRvcigpIGNvbnN0IHsgcmV0dXJuICptX3Zpc2l0b3I7IH0KICAgICAKICAgICBzaXplX3Qgdmlz
aXRDb3VudCgpIGNvbnN0CiAgICAgewpAQCAtNDcsNyArNDcsNyBAQCBwdWJsaWM6CiAgICAgfQog
ICAgIAogcHJpdmF0ZToKLSAgICBTbG90VmlzaXRvciogbV92aXNpdG9yIHsgbnVsbHB0ciB9Owor
ICAgIEFic3RyYWN0U2xvdFZpc2l0b3IqIG1fdmlzaXRvciB7IG51bGxwdHIgfTsKICAgICBzaXpl
X3QgbV9pbml0aWFsVmlzaXRDb3VudCB7IDAgfTsKIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL1dlYWtCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvV2Vha0Jsb2NrLmNwcAkocmV2aXNpb24gMjcyNzEwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvV2Vha0Jsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTgsMTIg
Kzk4LDEzIEBAIHZvaWQgV2Vha0Jsb2NrOjpzd2VlcCgpCiAgICAgQVNTRVJUKCFtX3N3ZWVwUmVz
dWx0LmlzTnVsbCgpKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgQ29udGFpbmVyVHlwZT4KLXZv
aWQgV2Vha0Jsb2NrOjpzcGVjaWFsaXplZFZpc2l0KENvbnRhaW5lclR5cGUmIGNvbnRhaW5lciwg
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBDb250YWluZXJUeXBlLCB0
eXBlbmFtZSBWaXNpdG9yPgordm9pZCBXZWFrQmxvY2s6OnNwZWNpYWxpemVkVmlzaXQoQ29udGFp
bmVyVHlwZSYgY29udGFpbmVyLCBWaXNpdG9yJiB2aXNpdG9yKQogewotICAgIEhlYXBWZXJzaW9u
IG1hcmtpbmdWZXJzaW9uID0gdmlzaXRvci5tYXJraW5nVmVyc2lvbigpOworLy8gICAgSGVhcFZl
cnNpb24gbWFya2luZ1ZlcnNpb24gPSB2aXNpdG9yLm1hcmtpbmdWZXJzaW9uKCk7CiAKICAgICBz
aXplX3QgY291bnQgPSB3ZWFrSW1wbENvdW50KCk7CisgICAgSGVhcEFuYWx5emVyKiBoZWFwQW5h
bHl6ZXIgPSB2aXNpdG9yLnZtKCkuYWN0aXZlSGVhcEFuYWx5emVyKCk7CiAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7CiAgICAgICAgIFdlYWtJbXBsKiB3ZWFrSW1wbCA9
ICZ3ZWFrSW1wbHMoKVtpXTsKICAgICAgICAgaWYgKHdlYWtJbXBsLT5zdGF0ZSgpICE9IFdlYWtJ
bXBsOjpMaXZlKQpAQCAtMTE0LDEyICsxMTUsMTMgQEAgdm9pZCBXZWFrQmxvY2s6OnNwZWNpYWxp
emVkVmlzaXQoQ29udGFpbgogICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgSlNWYWx1
ZSBqc1ZhbHVlID0gd2Vha0ltcGwtPmpzVmFsdWUoKTsKLSAgICAgICAgaWYgKGNvbnRhaW5lci5p
c01hcmtlZChtYXJraW5nVmVyc2lvbiwganNWYWx1ZS5hc0NlbGwoKSkpCisvLyAgICAgICAgaWYg
KGNvbnRhaW5lci5pc01hcmtlZChtYXJraW5nVmVyc2lvbiwganNWYWx1ZS5hc0NlbGwoKSkpCisg
ICAgICAgIGlmICh2aXNpdG9yLmlzTWFya2VkKGNvbnRhaW5lciwganNWYWx1ZS5hc0NlbGwoKSkp
CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgCiAgICAgICAgIGNvbnN0IGNoYXIqIHJl
YXNvbiA9ICIiOwogICAgICAgICBjb25zdCBjaGFyKiogcmVhc29uUHRyID0gbnVsbHB0cjsKLSAg
ICAgICAgaWYgKFVOTElLRUxZKHZpc2l0b3IuaXNBbmFseXppbmdIZWFwKCkpKQorICAgICAgICBp
ZiAoVU5MSUtFTFkoaGVhcEFuYWx5emVyKSkKICAgICAgICAgICAgIHJlYXNvblB0ciA9ICZyZWFz
b247CiAKICAgICAgICAgaWYgKCF3ZWFrSGFuZGxlT3duZXItPmlzUmVhY2hhYmxlRnJvbU9wYXF1
ZVJvb3RzKEhhbmRsZTxVbmtub3duPjo6d3JhcFNsb3QoJmNvbnN0X2Nhc3Q8SlNWYWx1ZSY+KGpz
VmFsdWUpKSwgd2Vha0ltcGwtPmNvbnRleHQoKSwgdmlzaXRvciwgcmVhc29uUHRyKSkKQEAgLTEy
NywxNCArMTI5LDE2IEBAIHZvaWQgV2Vha0Jsb2NrOjpzcGVjaWFsaXplZFZpc2l0KENvbnRhaW4K
IAogICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKGpzVmFsdWUpOwogCi0gICAgICAg
IGlmIChVTkxJS0VMWSh2aXNpdG9yLmlzQW5hbHl6aW5nSGVhcCgpKSkgeworICAgICAgICBpZiAo
VU5MSUtFTFkoaGVhcEFuYWx5emVyKSkgewogICAgICAgICAgICAgaWYgKGpzVmFsdWUuaXNDZWxs
KCkpCi0gICAgICAgICAgICAgICAgdmlzaXRvci5oZWFwQW5hbHl6ZXIoKS0+c2V0T3BhcXVlUm9v
dFJlYWNoYWJpbGl0eVJlYXNvbkZvckNlbGwoanNWYWx1ZS5hc0NlbGwoKSwgKnJlYXNvblB0cik7
CisgICAgICAgICAgICAgICAgaGVhcEFuYWx5emVyLT5zZXRPcGFxdWVSb290UmVhY2hhYmlsaXR5
UmVhc29uRm9yQ2VsbChqc1ZhbHVlLmFzQ2VsbCgpLCAqcmVhc29uUHRyKTsKICAgICAgICAgfQog
ICAgIH0KIH0KIAotdm9pZCBXZWFrQmxvY2s6OnZpc2l0KFNsb3RWaXNpdG9yJiB2aXNpdG9yKQor
Ly90ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgorLy92b2lkIFdlYWtCbG9jazo6dmlzaXQoVmlz
aXRvciYgdmlzaXRvcikKK3ZvaWQgV2Vha0Jsb2NrOjp2aXNpdDEoQWJzdHJhY3RTbG90VmlzaXRv
ciYgdmlzaXRvcikKIHsKICAgICAvLyBJZiBhIGJsb2NrIGlzIGNvbXBsZXRlbHkgZW1wdHksIGEg
dmlzaXQgd29uJ3QgaGF2ZSBhbnkgZWZmZWN0LgogICAgIGlmIChpc0VtcHR5KCkpCkBAIC0xNDks
NiArMTUzLDkgQEAgdm9pZCBXZWFrQmxvY2s6OnZpc2l0KFNsb3RWaXNpdG9yJiB2aXNpdAogICAg
ICAgICBzcGVjaWFsaXplZFZpc2l0KG1fY29udGFpbmVyLm1hcmtlZEJsb2NrKCksIHZpc2l0b3Ip
OwogfQogCisvL3RlbXBsYXRlIHZvaWQgV2Vha0Jsb2NrOjp2aXNpdChTbG90VmlzaXRvciYpOwor
Ly90ZW1wbGF0ZSB2b2lkIFdlYWtCbG9jazo6dmlzaXQoVmVyaWZpZXJTbG90VmlzaXRvciYpOwor
CiB2b2lkIFdlYWtCbG9jazo6cmVhcCgpCiB7CiAgICAgLy8gSWYgYSBibG9jayBpcyBjb21wbGV0
ZWx5IGVtcHR5LCBhIHJlYXBpbmcgd29uJ3QgaGF2ZSBhbnkgZWZmZWN0LgpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha0Jsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvV2Vha0Jsb2NrLmgJKHJldmlzaW9uIDI3MjcxMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw4
ICszMiw5IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCitjbGFzcyBBYnN0cmFjdFNsb3RWaXNpdG9y
OwogY2xhc3MgSGVhcDsKLWNsYXNzIFNsb3RWaXNpdG9yOworLy9jbGFzcyBTbG90VmlzaXRvcjsK
IAogREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoV2Vha0Jsb2NrKTsKIApA
QCAtNjUsNyArNjYsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzd2VlcCgpOwogICAgIFN3ZWVwUmVz
dWx0IHRha2VTd2VlcFJlc3VsdCgpOwogCi0gICAgdm9pZCB2aXNpdChTbG90VmlzaXRvciYpOwor
Ly8gICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCB2aXNpdChWaXNpdG9yJik7Cisg
ICAgdm9pZCB2aXNpdDEoQWJzdHJhY3RTbG90VmlzaXRvciYpOwogCiAgICAgdm9pZCByZWFwKCk7
CiAKQEAgLTc1LDggKzc3LDggQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBzdGF0aWMgRnJlZUNl
bGwqIGFzRnJlZUNlbGwoV2Vha0ltcGwqKTsKICAgICAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBD
b250YWluZXJUeXBlPgotICAgIHZvaWQgc3BlY2lhbGl6ZWRWaXNpdChDb250YWluZXJUeXBlJiwg
U2xvdFZpc2l0b3ImKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDb250YWluZXJUeXBlLCB0eXBl
bmFtZSBWaXNpdG9yPgorICAgIHZvaWQgc3BlY2lhbGl6ZWRWaXNpdChDb250YWluZXJUeXBlJiwg
VmlzaXRvciYpOwogCiAgICAgZXhwbGljaXQgV2Vha0Jsb2NrKENlbGxDb250YWluZXIpOwogICAg
IHZvaWQgZmluYWxpemUoV2Vha0ltcGwqKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL1dlYWtIYW5kbGVPd25lci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvV2Vha0hhbmRsZU93bmVyLmNwcAkocmV2aXNpb24gMjcyNzEwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha0hhbmRsZU93bmVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzUsNyArMzUsNyBAQCBXZWFrSGFuZGxlT3duZXI6On5XZWFrSGFuZGxlT3duZXIoKQogewog
fQogCi1ib29sIFdlYWtIYW5kbGVPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSGFu
ZGxlPFVua25vd24+LCB2b2lkKiwgU2xvdFZpc2l0b3ImLCBjb25zdCBjaGFyKiopCitib29sIFdl
YWtIYW5kbGVPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSGFuZGxlPFVua25vd24+
LCB2b2lkKiwgQWJzdHJhY3RTbG90VmlzaXRvciYsIGNvbnN0IGNoYXIqKikKIHsKICAgICByZXR1
cm4gZmFsc2U7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrSGFuZGxl
T3duZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrSGFu
ZGxlT3duZXIuaAkocmV2aXNpb24gMjcyNzEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvV2Vha0hhbmRsZU93bmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDEzICsyOSwxMyBAQAog
CiBuYW1lc3BhY2UgSlNDIHsKIAotY2xhc3MgU2xvdFZpc2l0b3I7CitjbGFzcyBBYnN0cmFjdFNs
b3RWaXNpdG9yOwogCiBjbGFzcyBKU19FWFBPUlRfUFJJVkFURSBXZWFrSGFuZGxlT3duZXIgewog
cHVibGljOgogICAgIHZpcnR1YWwgfldlYWtIYW5kbGVPd25lcigpOwogICAgIC8vIHJlYXNvbiB3
aWxsIG9ubHkgYmUgbm9uLW51bGwgd2hlbiBnZW5lcmF0aW5nIGEgZGVidWcgR0MgaGVhcCBzbmFw
c2hvdC4KLSAgICB2aXJ0dWFsIGJvb2wgaXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSGFuZGxl
PFVua25vd24+LCB2b2lkKiBjb250ZXh0LCBTbG90VmlzaXRvciYsIGNoYXIgY29uc3QqKiByZWFz
b24gPSBudWxscHRyKTsKKyAgICB2aXJ0dWFsIGJvb2wgaXNSZWFjaGFibGVGcm9tT3BhcXVlUm9v
dHMoSGFuZGxlPFVua25vd24+LCB2b2lkKiBjb250ZXh0LCBBYnN0cmFjdFNsb3RWaXNpdG9yJiwg
Y2hhciBjb25zdCoqIHJlYXNvbiA9IG51bGxwdHIpOwogICAgIHZpcnR1YWwgdm9pZCBmaW5hbGl6
ZShIYW5kbGU8VW5rbm93bj4sIHZvaWQqIGNvbnRleHQpOwogfTsKIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvV2Vha0lubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9XZWFrSW5saW5lcy5oCShyZXZpc2lvbiAyNzI3MTApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
Niw2ICsyNiw3IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkpTQ2FzdC5oIgorI2luY2x1
ZGUgIldlYWsuaCIKICNpbmNsdWRlICJXZWFrU2V0SW5saW5lcy5oIgogI2luY2x1ZGUgPHd0Zi9B
c3NlcnRpb25zLmg+CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtTZXQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrU2V0LmgJKHJl
dmlzaW9uIDI3MjcxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtTZXQuaAko
d29ya2luZyBjb3B5KQpAQCAtNTEsNyArNTEsOCBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc0VtcHR5
KCkgY29uc3Q7CiAgICAgYm9vbCBpc1RyaXZpYWxseURlc3RydWN0aWJsZSgpIGNvbnN0OwogCi0g
ICAgdm9pZCB2aXNpdChTbG90VmlzaXRvciYpOworLy8gICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlz
aXRvcj4gdm9pZCB2aXNpdChWaXNpdG9yJik7CisgICAgdm9pZCB2aXNpdDEoQWJzdHJhY3RTbG90
VmlzaXRvciYpOwogCiAgICAgdm9pZCByZWFwKCk7CiAgICAgdm9pZCBzd2VlcCgpOwpAQCAtMTE0
LDEwICsxMTUsMTIgQEAgaW5saW5lIHZvaWQgV2Vha1NldDo6bGFzdENoYW5jZVRvRmluYWxpegog
ICAgICAgICBibG9jay0+bGFzdENoYW5jZVRvRmluYWxpemUoKTsKIH0KIAotaW5saW5lIHZvaWQg
V2Vha1NldDo6dmlzaXQoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3RlbXBsYXRlPHR5cGVuYW1l
IFZpc2l0b3I+CisvL2lubGluZSB2b2lkIFdlYWtTZXQ6OnZpc2l0KFZpc2l0b3ImIHZpc2l0b3Ip
CitpbmxpbmUgdm9pZCBXZWFrU2V0Ojp2aXNpdDEoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRv
cikKIHsKICAgICBmb3IgKFdlYWtCbG9jayogYmxvY2sgPSBtX2Jsb2Nrcy5oZWFkKCk7IGJsb2Nr
OyBibG9jayA9IGJsb2NrLT5uZXh0KCkpCi0gICAgICAgIGJsb2NrLT52aXNpdCh2aXNpdG9yKTsK
KyAgICAgICAgYmxvY2stPnZpc2l0MSh2aXNpdG9yKTsKIH0KIAogaW5saW5lIHZvaWQgV2Vha1Nl
dDo6cmVhcCgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU2hhZG93
Q2hpY2tlbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJl
dGVyL1NoYWRvd0NoaWNrZW4uY3BwCShyZXZpc2lvbiAyNzI3MTApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW50ZXJwcmV0ZXIvU2hhZG93Q2hpY2tlbi5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQ0MCw3ICs0NDAsNyBAQCB2b2lkIFNoYWRvd0NoaWNrZW46OnVwZGF0ZShWTSYgdm0sIENhbGxG
CiAgICAgICAgIGRhdGFMb2coIiAgICBBZnRlciBjbGVhbi11cDogIiwgKnRoaXMsICJcbiIpOwog
fQogCi12b2lkIFNoYWRvd0NoaWNrZW46OnZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0
b3IpCit2b2lkIFNoYWRvd0NoaWNrZW46OnZpc2l0Q2hpbGRyZW4oQWJzdHJhY3RTbG90VmlzaXRv
ciYgdmlzaXRvcikKIHsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2xvZ0N1cnNvciAtIG1fbG9n
OyBpLS07KSB7CiAgICAgICAgIEpTT2JqZWN0KiBjYWxsZWUgPSBtX2xvZ1tpXS5jYWxsZWU7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU2hhZG93Q2hpY2tlbi5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TaGFkb3dDaGlj
a2VuLmgJKHJldmlzaW9uIDI3MjcxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnBy
ZXRlci9TaGFkb3dDaGlja2VuLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDEzICszNSwxMyBAQAog
CiBuYW1lc3BhY2UgSlNDIHsKIAorY2xhc3MgQWJzdHJhY3RTbG90VmlzaXRvcjsKIGNsYXNzIENh
bGxGcmFtZTsKIGNsYXNzIENvZGVCbG9jazsKIGNsYXNzIEpTQXJyYXk7CiBjbGFzcyBKU09iamVj
dDsKIGNsYXNzIEpTU2NvcGU7CiBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7Ci1jbGFzcyBT
bG90VmlzaXRvcjsKIGNsYXNzIFZNOwogCiAvLyBTaGFkb3dDaGlja2VuIGlzIGEgbG9nIHRoYXQg
Y2FuIGJlIHVzZWQgdG8gcHJvZHVjZSBhIHNoYWRvdyBzdGFjayBvZiBDSElDS0VOLXN0eWxlIHN0
YWNrIGZyYW1lcy4KQEAgLTE5Niw3ICsxOTYsNyBAQCBwdWJsaWM6CiAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgRnVuY3Rvcj4KICAgICB2b2lkIGl0ZXJhdGUoVk0mLCBDYWxsRnJhbWUqLCBjb25zdCBG
dW5jdG9yJik7CiAgICAgCi0gICAgdm9pZCB2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJik7Cisg
ICAgdm9pZCB2aXNpdENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKICAgICB2b2lkIHJl
c2V0KCk7CiAgICAgCiAgICAgLy8gSklUIHN1cHBvcnQuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0dDQXdhcmVKSVRTdHViUm91dGluZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9HQ0F3YXJlSklUU3R1YlJvdXRpbmUuY3BwCShyZXZpc2lvbiAy
NzI3MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0dDQXdhcmVKSVRTdHViUm91dGlu
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTczLDEwICs3MywxNSBAQCB2b2lkIEdDQXdhcmVKSVRT
dHViUm91dGluZTo6ZGVsZXRlRnJvbUdDCiAgICAgZGVsZXRlIHRoaXM7CiB9CiAKLXZvaWQgR0NB
d2FyZUpJVFN0dWJSb3V0aW5lOjptYXJrUmVxdWlyZWRPYmplY3RzSW50ZXJuYWwoU2xvdFZpc2l0
b3ImKQorLy92b2lkIEdDQXdhcmVKSVRTdHViUm91dGluZTo6bWFya1JlcXVpcmVkT2JqZWN0c0lu
dGVybmFsKFNsb3RWaXNpdG9yJikKK3ZvaWQgR0NBd2FyZUpJVFN0dWJSb3V0aW5lOjptYXJrUmVx
dWlyZWRPYmplY3RzSW50ZXJuYWwxKEFic3RyYWN0U2xvdFZpc2l0b3ImKQogewogfQogCisvL3Zv
aWQgR0NBd2FyZUpJVFN0dWJSb3V0aW5lOjptYXJrUmVxdWlyZWRPYmplY3RzSW50ZXJuYWwoVmVy
aWZpZXJTbG90VmlzaXRvciYpCisvL3sKKy8vfQorCiBNYXJraW5nR0NBd2FyZUpJVFN0dWJSb3V0
aW5lOjpNYXJraW5nR0NBd2FyZUpJVFN0dWJSb3V0aW5lKAogICAgIGNvbnN0IE1hY3JvQXNzZW1i
bGVyQ29kZVJlZjxKSVRTdHViUm91dGluZVB0clRhZz4mIGNvZGUsIFZNJiB2bSwgY29uc3QgSlND
ZWxsKiBvd25lciwKICAgICBjb25zdCBWZWN0b3I8SlNDZWxsKj4mIGNlbGxzLCBCYWc8Q2FsbExp
bmtJbmZvPiYmIGNhbGxMaW5rSW5mb3MpCkBAIC05MiwxMiArOTcsMTkgQEAgTWFya2luZ0dDQXdh
cmVKSVRTdHViUm91dGluZTo6fk1hcmtpbmdHQwogewogfQogCi12b2lkIE1hcmtpbmdHQ0F3YXJl
SklUU3R1YlJvdXRpbmU6Om1hcmtSZXF1aXJlZE9iamVjdHNJbnRlcm5hbChTbG90VmlzaXRvciYg
dmlzaXRvcikKKy8vdm9pZCBNYXJraW5nR0NBd2FyZUpJVFN0dWJSb3V0aW5lOjptYXJrUmVxdWly
ZWRPYmplY3RzSW50ZXJuYWwoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIE1hcmtpbmdHQ0F3
YXJlSklUU3R1YlJvdXRpbmU6Om1hcmtSZXF1aXJlZE9iamVjdHNJbnRlcm5hbDEoQWJzdHJhY3RT
bG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBmb3IgKGF1dG8mIGVudHJ5IDogbV9jZWxscykK
ICAgICAgICAgdmlzaXRvci5hcHBlbmQoZW50cnkpOwogfQogCisvLyBGSVhNRSBkZWR1cGU/Cisv
L3ZvaWQgTWFya2luZ0dDQXdhcmVKSVRTdHViUm91dGluZTo6bWFya1JlcXVpcmVkT2JqZWN0c0lu
dGVybmFsKFZlcmlmaWVyU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3sKKy8vICAgIGZvciAoYXV0
byYgZW50cnkgOiBtX2NlbGxzKQorLy8gICAgICAgIHZpc2l0b3IuYXBwZW5kKGVudHJ5KTsKKy8v
fQogCiBHQ0F3YXJlSklUU3R1YlJvdXRpbmVXaXRoRXhjZXB0aW9uSGFuZGxlcjo6R0NBd2FyZUpJ
VFN0dWJSb3V0aW5lV2l0aEV4Y2VwdGlvbkhhbmRsZXIoCiAgICAgY29uc3QgTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiYgY29kZSwgVk0mIHZtLCAgY29uc3QgSlND
ZWxsKiBvd25lciwgY29uc3QgVmVjdG9yPEpTQ2VsbCo+JiBjZWxscywgQmFnPENhbGxMaW5rSW5m
bz4mJiBjYWxsTGlua0luZm9zLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9HQ0F3
YXJlSklUU3R1YlJvdXRpbmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0dDQXdhcmVKSVRTdHViUm91dGluZS5oCShyZXZpc2lvbiAyNzI3MTApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0dDQXdhcmVKSVRTdHViUm91dGluZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC02MCwxMCArNjAsMTIgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKCpuZXcgR0NBd2FyZUpJVFN0dWJSb3V0aW5lKGNvZGUsIHZtKSk7CiAgICAgfQotICAgIAot
ICAgIHZvaWQgbWFya1JlcXVpcmVkT2JqZWN0cyhTbG90VmlzaXRvciYgdmlzaXRvcikKKworLy8g
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KKy8vICAgIHZvaWQgbWFya1JlcXVpcmVkT2Jq
ZWN0cyhWaXNpdG9yJiB2aXNpdG9yKQorICAgIHZvaWQgbWFya1JlcXVpcmVkT2JqZWN0czEoQWJz
dHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKICAgICB7Ci0gICAgICAgIG1hcmtSZXF1aXJlZE9i
amVjdHNJbnRlcm5hbCh2aXNpdG9yKTsKKyAgICAgICAgbWFya1JlcXVpcmVkT2JqZWN0c0ludGVy
bmFsMSh2aXNpdG9yKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBkZWxldGVGcm9tR0MoKTsKQEAg
LTcxLDcgKzczLDkgQEAgcHVibGljOgogcHJvdGVjdGVkOgogICAgIHZvaWQgb2JzZXJ2ZVplcm9S
ZWZDb3VudCgpIG92ZXJyaWRlOwogICAgIAotICAgIHZpcnR1YWwgdm9pZCBtYXJrUmVxdWlyZWRP
YmplY3RzSW50ZXJuYWwoU2xvdFZpc2l0b3ImKTsKKy8vICAgIHZpcnR1YWwgdm9pZCBtYXJrUmVx
dWlyZWRPYmplY3RzSW50ZXJuYWwoU2xvdFZpc2l0b3ImKTsKKy8vICAgIHZpcnR1YWwgdm9pZCBt
YXJrUmVxdWlyZWRPYmplY3RzSW50ZXJuYWwoVmVyaWZpZXJTbG90VmlzaXRvciYpOworICAgIHZp
cnR1YWwgdm9pZCBtYXJrUmVxdWlyZWRPYmplY3RzSW50ZXJuYWwxKEFic3RyYWN0U2xvdFZpc2l0
b3ImKTsKIAogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgSklUU3R1YlJvdXRpbmVTZXQ7CkBA
IC04OSw3ICs5Myw5IEBAIHB1YmxpYzoKICAgICB+TWFya2luZ0dDQXdhcmVKSVRTdHViUm91dGlu
ZSgpIG92ZXJyaWRlOwogICAgIAogcHJvdGVjdGVkOgotICAgIHZvaWQgbWFya1JlcXVpcmVkT2Jq
ZWN0c0ludGVybmFsKFNsb3RWaXNpdG9yJikgb3ZlcnJpZGU7CisvLyAgICB2b2lkIG1hcmtSZXF1
aXJlZE9iamVjdHNJbnRlcm5hbChTbG90VmlzaXRvciYpIG92ZXJyaWRlOworLy8gICAgdm9pZCBt
YXJrUmVxdWlyZWRPYmplY3RzSW50ZXJuYWwoVmVyaWZpZXJTbG90VmlzaXRvciYpIG92ZXJyaWRl
OworICAgIHZvaWQgbWFya1JlcXVpcmVkT2JqZWN0c0ludGVybmFsMShBYnN0cmFjdFNsb3RWaXNp
dG9yJikgb3ZlcnJpZGU7CiAKIHByaXZhdGU6CiAgICAgVmVjdG9yPFdyaXRlQmFycmllcjxKU0Nl
bGw+PiBtX2NlbGxzOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRXb3JrbGlz
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRXb3JrbGlz
dC5jcHAJKHJldmlzaW9uIDI3MjcxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
V29ya2xpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw4IEBACiAKIG5hbWVzcGFj
ZSBKU0MgewogCitleHRlcm4gYm9vbCBtbGFtVmVyYm9zZTsKKwogY2xhc3MgSklUV29ya2xpc3Q6
OlBsYW4gOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8SklUV29ya2xpc3Q6OlBsYW4+IHsK
IHB1YmxpYzoKICAgICBQbGFuKENvZGVCbG9jayogY29kZUJsb2NrLCBCeXRlY29kZUluZGV4IGxv
b3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpCkBAIC01MCw3ICs1Miw3IEBAIHB1YmxpYzoKICAgICAg
ICAgbV9pc0ZpbmlzaGVkQ29tcGlsaW5nID0gdHJ1ZTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBm
aW5hbGl6ZSgpCisgICAgdm9pZCBmaW5hbGl6ZTIwNDgoKQogICAgIHsKICAgICAgICAgQ29tcGls
YXRpb25SZXN1bHQgcmVzdWx0ID0gbV9qaXQubGluaygpOwogICAgICAgICBzd2l0Y2ggKHJlc3Vs
dCkgewpAQCAtNjIsOCArNjQsMTcgQEAgcHVibGljOgogICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICBjYXNlIENvbXBpbGF0aW9uU3VjY2Vzc2Z1bDoKICAgICAgICAgICAgIGRhdGFMb2dMbklm
KE9wdGlvbnM6OnZlcmJvc2VPU1IoKSwgIiAgICBKSVQgY29tcGlsYXRpb24gc3VjY2Vzc2Z1bC4i
KTsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBDb2RlQmxvY2sqIG9sZENvZGVCbG9j
ayA9IG1fY29kZUJsb2NrOworCiAgICAgICAgICAgICBtX2NvZGVCbG9jay0+b3duZXJFeGVjdXRh
YmxlKCktPmluc3RhbGxDb2RlKG1fY29kZUJsb2NrKTsKICAgICAgICAgICAgIG1fY29kZUJsb2Nr
LT5qaXRTb29uKCk7CisKKyAgICAgICAgICAgICAgICBpZiAobWxhbVZlcmJvc2UpIGRhdGFMb2dM
bigiICAgIG1sYW0gSklUV29ya2xpc3Q6OlBsYW46OmZpbmFsaXplKCkgSU5TVEFMTEVEIGNiICIs
IG9sZENvZGVCbG9jaywgIiA9PiAiLCBtX2NvZGVCbG9jaywgIiBCRUZPUkUgYmFycmllcnMgfCBp
c1dpdGhpblRocmVzaG9sZDo6IG9sZENCICIsIGlzV2l0aGluVGhyZXNob2xkKG9sZENvZGVCbG9j
ay0+Y2VsbFN0YXRlKCksIHZtKCkuaGVhcC5iYXJyaWVyVGhyZXNob2xkKCkpLCAiIG5ldyBDQiAi
LCBpc1dpdGhpblRocmVzaG9sZChtX2NvZGVCbG9jay0+Y2VsbFN0YXRlKCksIHZtKCkuaGVhcC5i
YXJyaWVyVGhyZXNob2xkKCkpLCAiIHwgbXV0YXRvclNob3VsZEJlRmVuY2VkKCkgIiwgdm0oKS5o
ZWFwLm11dGF0b3JTaG91bGRCZUZlbmNlZCgpLCAiIHwgaXNQb3NzaWJseUJsYWNrIG9sZENCICIs
IChvbGRDb2RlQmxvY2stPmNlbGxTdGF0ZSgpID09IENlbGxTdGF0ZTo6UG9zc2libHlCbGFjayks
ICIgbmV3IENCICIsIChtX2NvZGVCbG9jay0+Y2VsbFN0YXRlKCkgPT0gQ2VsbFN0YXRlOjpQb3Nz
aWJseUJsYWNrKSk7CisvLyAgICAgICAgICAgICAgICB2bSgpLmhlYXAud3JpdGVCYXJyaWVyKG9s
ZENvZGVCbG9jayk7IC8vIG1sYW0gRklYTUUgSEFDSworLy8gICAgICAgICAgICAgICAgdm0oKS5o
ZWFwLndyaXRlQmFycmllcihtX2NvZGVCbG9jayk7IC8vIG1sYW0gRklYTUUgSEFDSworICAgICAg
ICAgICAgICAgIGlmIChtbGFtVmVyYm9zZSkgZGF0YUxvZ0xuKCIgICAgbWxhbSBKSVRXb3JrbGlz
dDo6UGxhbjo6ZmluYWxpemUoKSBJTlNUQUxMRUQgY2IgIiwgb2xkQ29kZUJsb2NrLCAiID0+ICIs
IG1fY29kZUJsb2NrLCAiIEFGVEVSIGJhcnJpZXJzIik7CisgICAgICAgICAgICB9CiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOwpAQCAtODQsNyArOTUsNyBAQCBwdWJsaWM6CiAgICAgewogICAgICAg
ICBQbGFuIHBsYW4oY29kZUJsb2NrLCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4KTsKICAgICAg
ICAgcGxhbi5jb21waWxlSW5UaHJlYWQoKTsKLSAgICAgICAgcGxhbi5maW5hbGl6ZSgpOworICAg
ICAgICBwbGFuLmZpbmFsaXplMjA0OCgpOwogICAgIH0KICAgICAKIHByaXZhdGU6CkBAIC0xNjMs
NyArMTc0LDcgQEAgSklUV29ya2xpc3Q6On5KSVRXb3JrbGlzdCgpCiAgICAgVU5SRUFDSEFCTEVf
Rk9SX1BMQVRGT1JNKCk7CiB9CiAKLWJvb2wgSklUV29ya2xpc3Q6OmNvbXBsZXRlQWxsRm9yVk0o
Vk0mIHZtKQorYm9vbCBKSVRXb3JrbGlzdDo6Y29tcGxldGVBbGxGb3JWTShWTSYgdm0sIFNsb3RW
aXNpdG9yKikKIHsKICAgICBib29sIHJlc3VsdCA9IGZhbHNlOwogICAgIERlZmVyR0MgZGVmZXJH
Qyh2bS5oZWFwKTsKQEAgLTE3Nyw2ICsxODgsMTAgQEAgYm9vbCBKSVRXb3JrbGlzdDo6Y29tcGxl
dGVBbGxGb3JWTShWTSYgdgogICAgICAgICAgICAgICAgICAgICBbJl0gKFJlZlB0cjxQbGFuPiYg
cGxhbikgewogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCZwbGFuLT52bSgpICE9ICZ2bSkK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAobWxhbVZlcmJvc2UpIGRhdGFMb2dMbigiXG4gICAgbWxhbSBKSVRXb3Jr
bGlzdDo6Y29tcGxldGVBbGxGb3JWTTogRklOSVNIaW5nIGNiICIsIHBsYW4tPmNvZGVCbG9jaygp
LCAiXG4iKTsKKy8vICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6
OnZlcmlmeUdDKCkgJiYgdmlzaXRvcikpIHsKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHZtLmhlYXAud3JpdGVCYXJyaWVyKHBsYW4tPmNvZGVCbG9jaygpKTsgLy8gbWxhbSBGSVhNRSBI
QUNLCisvLyAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAg
IGlmICghcGxhbi0+aXNGaW5pc2hlZENvbXBpbGluZygpKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZGlkRmluZFVuZmluaXNoZWRQbGFuID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0zMTEsNyArMzI2LDcgQEAgdm9pZCBKSVRXb3Jr
bGlzdDo6Y29tcGlsZU5vdyhDb2RlQmxvY2sqIAogdm9pZCBKSVRXb3JrbGlzdDo6ZmluYWxpemVQ
bGFucyhQbGFucyYgbXlQbGFucykKIHsKICAgICBmb3IgKFJlZlB0cjxQbGFuPiYgcGxhbiA6IG15
UGxhbnMpIHsKLSAgICAgICAgcGxhbi0+ZmluYWxpemUoKTsKKyAgICAgICAgcGxhbi0+ZmluYWxp
emUyMDQ4KCk7CiAgICAgICAgIAogICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcigqbV9sb2NrKTsK
ICAgICAgICAgbV9wbGFubmVkLnJlbW92ZShwbGFuLT5jb2RlQmxvY2soKSk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFdvcmtsaXN0LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRXb3JrbGlzdC5oCShyZXZpc2lvbiAyNzI3MTApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFdvcmtsaXN0LmgJKHdvcmtpbmcgY29weSkKQEAg
LTM5LDYgKzM5LDcgQEAKIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBDb2RlQmxvY2s7CitjbGFz
cyBTbG90VmlzaXRvcjsgLy8gbWxhbQogY2xhc3MgVk07CiAKIGNsYXNzIEpJVFdvcmtsaXN0IHsK
QEAgLTUxLDcgKzUyLDcgQEAgY2xhc3MgSklUV29ya2xpc3QgewogcHVibGljOgogICAgIH5KSVRX
b3JrbGlzdCgpOwogICAgIAotICAgIGJvb2wgY29tcGxldGVBbGxGb3JWTShWTSYpOyAvLyBSZXR1
cm4gdHJ1ZSBpZiBhbnkgSklUIHdvcmsgaGFwcGVuZWQuCisgICAgYm9vbCBjb21wbGV0ZUFsbEZv
clZNKFZNJiwgU2xvdFZpc2l0b3IqID0gbnVsbHB0cik7IC8vIFJldHVybiB0cnVlIGlmIGFueSBK
SVQgd29yayBoYXBwZW5lZC4KICAgICB2b2lkIHBvbGwoVk0mKTsKICAgICAKICAgICB2b2lkIGNv
bXBpbGVMYXRlcihDb2RlQmxvY2sqLCBCeXRlY29kZUluZGV4IGxvb3BPU1JFbnRyeUJ5dGVjb2Rl
SW5kZXggPSBCeXRlY29kZUluZGV4KDApKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUuY3BwCShyZXZpc2lv
biAyNzI3MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1BvbHltb3JwaGljQ2FsbFN0
dWJSb3V0aW5lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM1LDEyICsxMzUsMjAgQEAgYm9vbCBQ
b2x5bW9ycGhpY0NhbGxTdHViUm91dGluZTo6dmlzaXRXZQogICAgIHJldHVybiBpc1N0aWxsTGl2
ZTsKIH0KIAotdm9pZCBQb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZTo6bWFya1JlcXVpcmVkT2Jq
ZWN0c0ludGVybmFsKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy92b2lkIFBvbHltb3JwaGljQ2Fs
bFN0dWJSb3V0aW5lOjptYXJrUmVxdWlyZWRPYmplY3RzSW50ZXJuYWwoU2xvdFZpc2l0b3ImIHZp
c2l0b3IpCit2b2lkIFBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lOjptYXJrUmVxdWlyZWRPYmpl
Y3RzSW50ZXJuYWwxKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgZm9yIChh
dXRvJiB2YXJpYW50IDogbV92YXJpYW50cykKICAgICAgICAgdmlzaXRvci5hcHBlbmQodmFyaWFu
dCk7CiB9CiAKKy8vLy8gbWxhbSBGSVhNRSBkZWR1cGU/Pz8KKy8vdm9pZCBQb2x5bW9ycGhpY0Nh
bGxTdHViUm91dGluZTo6bWFya1JlcXVpcmVkT2JqZWN0c0ludGVybmFsKFZlcmlmaWVyU2xvdFZp
c2l0b3ImIHZpc2l0b3IpCisvL3sKKy8vICAgIGZvciAoYXV0byYgdmFyaWFudCA6IG1fdmFyaWFu
dHMpCisvLyAgICAgICAgdmlzaXRvci5hcHBlbmQodmFyaWFudCk7CisvL30KKwogfSAvLyBuYW1l
c3BhY2UgSlNDCiAKICNlbmRpZiAvLyBFTkFCTEUoSklUKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9Qb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUuaAkocmV2
aXNpb24gMjcyNzEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Qb2x5bW9ycGhpY0Nh
bGxTdHViUm91dGluZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDUsNyArMTA1LDkgQEAgcHVibGlj
OgogICAgIGJvb2wgdmlzaXRXZWFrKFZNJikgZmluYWw7CiAKIHByaXZhdGU6Ci0gICAgdm9pZCBt
YXJrUmVxdWlyZWRPYmplY3RzSW50ZXJuYWwoU2xvdFZpc2l0b3ImKSBmaW5hbDsKKy8vICAgIHZv
aWQgbWFya1JlcXVpcmVkT2JqZWN0c0ludGVybmFsKFNsb3RWaXNpdG9yJikgZmluYWw7CisvLyAg
ICB2b2lkIG1hcmtSZXF1aXJlZE9iamVjdHNJbnRlcm5hbChWZXJpZmllclNsb3RWaXNpdG9yJikg
ZmluYWw7CisgICAgdm9pZCBtYXJrUmVxdWlyZWRPYmplY3RzSW50ZXJuYWwxKEFic3RyYWN0U2xv
dFZpc2l0b3ImKSBmaW5hbDsKIAogICAgIFZlY3RvcjxXcml0ZUJhcnJpZXI8SlNDZWxsPiwgMj4g
bV92YXJpYW50czsKICAgICBVbmlxdWVBcnJheTx1aW50MzJfdD4gbV9mYXN0Q291bnRzOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQWJzdHJhY3RNb2R1bGVSZWNvcmQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Fic3RyYWN0TW9k
dWxlUmVjb3JkLmNwcAkocmV2aXNpb24gMjcyNzEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQWJzdHJhY3RNb2R1bGVSZWNvcmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MCw3
ICs2MCw4IEBAIHZvaWQgQWJzdHJhY3RNb2R1bGVSZWNvcmQ6OmZpbmlzaENyZWF0aW8KICAgICBw
dXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJkZXBlbmRlbmNpZXNNYXAi
X3MpLCBtX2RlcGVuZGVuY2llc01hcC5nZXQoKSk7CiB9CiAKLXZvaWQgQWJzdHJhY3RNb2R1bGVS
ZWNvcmQ6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikK
K3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEFic3RyYWN0TW9kdWxlUmVjb3JkOjp2
aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAg
QWJzdHJhY3RNb2R1bGVSZWNvcmQqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8QWJzdHJhY3RNb2R1bGVS
ZWNvcmQqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3Qs
IGluZm8oKSk7CkBAIC03MCw2ICs3MSw4IEBAIHZvaWQgQWJzdHJhY3RNb2R1bGVSZWNvcmQ6OnZp
c2l0Q2hpbGRyZW4KICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2RlcGVuZGVuY2ll
c01hcCk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihBYnN0cmFjdE1vZHVsZVJlY29yZCk7
CisKIHZvaWQgQWJzdHJhY3RNb2R1bGVSZWNvcmQ6OmFwcGVuZFJlcXVlc3RlZE1vZHVsZShjb25z
dCBJZGVudGlmaWVyJiBtb2R1bGVOYW1lKQogewogICAgIG1fcmVxdWVzdGVkTW9kdWxlcy5hZGQo
bW9kdWxlTmFtZS5pbXBsKCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
QWJzdHJhY3RNb2R1bGVSZWNvcmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9BYnN0cmFjdE1vZHVsZVJlY29yZC5oCShyZXZpc2lvbiAyNzI3MTApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BYnN0cmFjdE1vZHVsZVJlY29yZC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMzYsNyArMTM2LDcgQEAgcHJvdGVjdGVkOgogICAgIEFic3RyYWN0TW9k
dWxlUmVjb3JkKFZNJiwgU3RydWN0dXJlKiwgY29uc3QgSWRlbnRpZmllciYpOwogICAgIHZvaWQg
ZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxPYmplY3QqLCBWTSYpOwogCi0gICAgc3RhdGljIHZvaWQg
dmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRf
Q0hJTERSRU47CiAKICAgICB2b2lkIHNldE1vZHVsZUVudmlyb25tZW50KEpTR2xvYmFsT2JqZWN0
KiwgSlNNb2R1bGVFbnZpcm9ubWVudCopOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9BcmdMaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9BcmdMaXN0LmNwcAkocmV2aXNpb24gMjcyNzEwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQXJnTGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUxLDcgKzUxLDcg
QEAgdm9pZCBBcmdMaXN0OjpnZXRTbGljZShpbnQgc3RhcnRJbmRleCwgQQogICAgIHJlc3VsdC5t
X2FyZ0NvdW50ID0gIG1fYXJnQ291bnQgLSBzdGFydEluZGV4OwogfQogCi12b2lkIE1hcmtlZEFy
Z3VtZW50QnVmZmVyOjptYXJrTGlzdHMoU2xvdFZpc2l0b3ImIHZpc2l0b3IsIExpc3RTZXQmIG1h
cmtTZXQpCit2b2lkIE1hcmtlZEFyZ3VtZW50QnVmZmVyOjptYXJrTGlzdHMoQWJzdHJhY3RTbG90
VmlzaXRvciYgdmlzaXRvciwgTGlzdFNldCYgbWFya1NldCkKIHsKICAgICBMaXN0U2V0OjppdGVy
YXRvciBlbmQgPSBtYXJrU2V0LmVuZCgpOwogICAgIGZvciAoTGlzdFNldDo6aXRlcmF0b3IgaXQg
PSBtYXJrU2V0LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQXJnTGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0FyZ0xpc3QuaAkocmV2aXNpb24gMjcyNzEwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJnTGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTgsNyAr
MTE4LDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KICAgICAgICAg
Ci0gICAgc3RhdGljIHZvaWQgbWFya0xpc3RzKFNsb3RWaXNpdG9yJiwgTGlzdFNldCYpOworICAg
IHN0YXRpYyB2b2lkIG1hcmtMaXN0cyhBYnN0cmFjdFNsb3RWaXNpdG9yJiwgTGlzdFNldCYpOwog
CiAgICAgdm9pZCBlbnN1cmVDYXBhY2l0eShzaXplX3QgcmVxdWVzdGVkQ2FwYWNpdHkpCiAgICAg
ewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVhYmxlSWRlbnRpZmll
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlYWJs
ZUlkZW50aWZpZXIuaAkocmV2aXNpb24gMjcyNzEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQ2FjaGVhYmxlSWRlbnRpZmllci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSwxMCAr
MzksMTEgQEAgdXNpbmcgV1RGOjpVbmlxdWVkU3RyaW5nSW1wbDsKIAogbmFtZXNwYWNlIEpTQyB7
CiAKK2NsYXNzIEFic3RyYWN0U2xvdFZpc2l0b3I7CiBjbGFzcyBDb2RlQmxvY2s7CiBjbGFzcyBJ
ZGVudGlmaWVyOwogY2xhc3MgSlNDZWxsOwotY2xhc3MgU2xvdFZpc2l0b3I7CisvL2NsYXNzIFNs
b3RWaXNpdG9yOwogCiBjbGFzcyBDYWNoZWFibGVJZGVudGlmaWVyIHsKIHB1YmxpYzoKQEAgLTg3
LDcgKzg4LDggQEAgcHVibGljOgogCiAgICAgdWludHB0cl90IHJhd0JpdHMoKSBjb25zdCB7IHJl
dHVybiBtX2JpdHM7IH0KIAotICAgIGlubGluZSB2b2lkIHZpc2l0QWdncmVnYXRlKFNsb3RWaXNp
dG9yJikgY29uc3Q7CisvLyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiBpbmxpbmUgdm9p
ZCB2aXNpdEFnZ3JlZ2F0ZShWaXNpdG9yJikgY29uc3Q7CisgICAgaW5saW5lIHZvaWQgdmlzaXRB
Z2dyZWdhdGUxKEFic3RyYWN0U2xvdFZpc2l0b3ImKSBjb25zdDsKIAogICAgIEpTX0VYUE9SVF9Q
UklWQVRFIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWFibGVJZGVudGlmaWVySW5saW5lcy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlYWJsZUlkZW50aWZpZXJJ
bmxpbmVzLmgJKHJldmlzaW9uIDI3MjcxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0NhY2hlYWJsZUlkZW50aWZpZXJJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEzNywx
MiArMTM3LDE2IEBAIGlubGluZSB2b2lkIENhY2hlYWJsZUlkZW50aWZpZXI6OnNldFVpZEIKICAg
ICBtX2JpdHMgPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90Pih1aWQpIHwgc191aWRUYWc7CiB9CiAK
LWlubGluZSB2b2lkIENhY2hlYWJsZUlkZW50aWZpZXI6OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNp
dG9yJiB2aXNpdG9yKSBjb25zdAorLy90ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgorLy9pbmxp
bmUgdm9pZCBDYWNoZWFibGVJZGVudGlmaWVyOjp2aXNpdEFnZ3JlZ2F0ZShWaXNpdG9yJiB2aXNp
dG9yKSBjb25zdAoraW5saW5lIHZvaWQgQ2FjaGVhYmxlSWRlbnRpZmllcjo6dmlzaXRBZ2dyZWdh
dGUxKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0CiB7CiAgICAgaWYgKG1fYml0
cyAmJiBpc0NlbGwoKSkKICAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZChjZWxsKCkp
OwogfQogCisvL3RlbXBsYXRlIHZvaWQgQ2FjaGVhYmxlSWRlbnRpZmllcjo6dmlzaXRBZ2dyZWdh
dGUoU2xvdFZpc2l0b3ImKSBjb25zdDsKKy8vdGVtcGxhdGUgdm9pZCBDYWNoZWFibGVJZGVudGlm
aWVyOjp2aXNpdEFnZ3JlZ2F0ZShWZXJpZmllclNsb3RWaXNpdG9yJikgY29uc3Q7CiAKIGlubGlu
ZSBib29sIENhY2hlYWJsZUlkZW50aWZpZXI6Om9wZXJhdG9yPT0oY29uc3QgQ2FjaGVhYmxlSWRl
bnRpZmllciYgb3RoZXIpIGNvbnN0CiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9DbGFzc0luZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9DbGFzc0luZm8uaAkocmV2aXNpb24gMjcyNzEwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQ2xhc3NJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDkgKzQ0LDYgQEAg
c3RydWN0IE1ldGhvZFRhYmxlIHsKICAgICB1c2luZyBEZXN0cm95RnVuY3Rpb25QdHIgPSB2b2lk
ICgqKShKU0NlbGwqKTsKICAgICBEZXN0cm95RnVuY3Rpb25QdHIgTUVUSE9EX1RBQkxFX0VOVFJZ
KGRlc3Ryb3kpOwogCi0gICAgdXNpbmcgVmlzaXRDaGlsZHJlbkZ1bmN0aW9uUHRyID0gdm9pZCAo
KikoSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKLSAgICBWaXNpdENoaWxkcmVuRnVuY3Rpb25QdHIg
TUVUSE9EX1RBQkxFX0VOVFJZKHZpc2l0Q2hpbGRyZW4pOwotCiAgICAgdXNpbmcgR2V0Q2FsbERh
dGFGdW5jdGlvblB0ciA9IENhbGxEYXRhICgqKShKU0NlbGwqKTsKICAgICBHZXRDYWxsRGF0YUZ1
bmN0aW9uUHRyIE1FVEhPRF9UQUJMRV9FTlRSWShnZXRDYWxsRGF0YSk7CiAKQEAgLTEyMCw3ICsx
MTcsMTggQEAgc3RydWN0IE1ldGhvZFRhYmxlIHsKICAgICB1c2luZyBFc3RpbWF0ZWRTaXplRnVu
Y3Rpb25QdHIgPSBzaXplX3QgKCopKEpTQ2VsbCosIFZNJik7CiAgICAgRXN0aW1hdGVkU2l6ZUZ1
bmN0aW9uUHRyIE1FVEhPRF9UQUJMRV9FTlRSWShlc3RpbWF0ZWRTaXplKTsKIAotICAgIHVzaW5n
IFZpc2l0T3V0cHV0Q29uc3RyYWludHNQdHIgPSB2b2lkICgqKShKU0NlbGwqLCBTbG90VmlzaXRv
ciYpOworICAgIHVzaW5nIFZpc2l0Q2hpbGRyZW5GdW5jdGlvblB0ciA9IHZvaWQgKCopKEpTQ2Vs
bCosIFNsb3RWaXNpdG9yJik7CisgICAgVmlzaXRDaGlsZHJlbkZ1bmN0aW9uUHRyIE1FVEhPRF9U
QUJMRV9FTlRSWSh2aXNpdENoaWxkcmVuV2l0aFNsb3RWaXNpdG9yKTsKKworLy8gICAgdXNpbmcg
VmlzaXRDaGlsZHJlbldpdGhWZXJpZmllclNsb3RWaXNpdG9yUHRyID0gdm9pZCAoKikoSlNDZWxs
KiwgVmVyaWZpZXJTbG90VmlzaXRvciYpOworICAgIHVzaW5nIFZpc2l0Q2hpbGRyZW5XaXRoQWJz
dHJhY3RTbG90VmlzaXRvclB0ciA9IHZvaWQgKCopKEpTQ2VsbCosIEFic3RyYWN0U2xvdFZpc2l0
b3ImKTsKKyAgICBWaXNpdENoaWxkcmVuV2l0aEFic3RyYWN0U2xvdFZpc2l0b3JQdHIgTUVUSE9E
X1RBQkxFX0VOVFJZKHZpc2l0Q2hpbGRyZW5XaXRoQWJzdHJhY3RTbG90VmlzaXRvcik7CisKKyAg
ICBBTFdBWVNfSU5MSU5FIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNp
dG9yJiB2aXNpdG9yKSBjb25zdCB7IHZpc2l0Q2hpbGRyZW5XaXRoU2xvdFZpc2l0b3IoY2VsbCwg
dmlzaXRvcik7IH0KKy8vICAgIEFMV0FZU19JTkxJTkUgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2Vs
bCogY2VsbCwgVmVyaWZpZXJTbG90VmlzaXRvciYgdmlzaXRvcikgY29uc3QgeyB2aXNpdENoaWxk
cmVuV2l0aFZlcmlmaWVyU2xvdFZpc2l0b3IoY2VsbCwgdmlzaXRvcik7IH0KKyAgICBBTFdBWVNf
SU5MSU5FIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIEFic3RyYWN0U2xvdFZpc2l0
b3ImIHZpc2l0b3IpIGNvbnN0IHsgdmlzaXRDaGlsZHJlbldpdGhBYnN0cmFjdFNsb3RWaXNpdG9y
KGNlbGwsIHZpc2l0b3IpOyB9CisKKyAgICB1c2luZyBWaXNpdE91dHB1dENvbnN0cmFpbnRzUHRy
ID0gdm9pZCAoKikoSlNDZWxsKiwgQWJzdHJhY3RTbG90VmlzaXRvciYpOwogICAgIFZpc2l0T3V0
cHV0Q29uc3RyYWludHNQdHIgTUVUSE9EX1RBQkxFX0VOVFJZKHZpc2l0T3V0cHV0Q29uc3RyYWlu
dHMpOwogfTsKIApAQCAtMTQ3LDcgKzE1NSw2IEBAIHN0cnVjdCBNZXRob2RUYWJsZSB7CiAgICAg
SlNDYXN0aW5nSGVscGVyczo6SW5oZXJpdHNUcmFpdHM8Q2xhc3NOYW1lPjo6dHlwZVJhbmdlLCBc
CiAgICAgeyBcCiAgICAgICAgICZDbGFzc05hbWU6OmRlc3Ryb3ksIFwKLSAgICAgICAgJkNsYXNz
TmFtZTo6dmlzaXRDaGlsZHJlbiwgXAogICAgICAgICAmQ2xhc3NOYW1lOjpnZXRDYWxsRGF0YSwg
XAogICAgICAgICAmQ2xhc3NOYW1lOjpnZXRDb25zdHJ1Y3REYXRhLCBcCiAgICAgICAgICZDbGFz
c05hbWU6OnB1dCwgXApAQCAtMTczLDYgKzE4MCw4IEBAIHN0cnVjdCBNZXRob2RUYWJsZSB7CiAg
ICAgICAgICZDbGFzc05hbWU6OmR1bXBUb1N0cmVhbSwgXAogICAgICAgICAmQ2xhc3NOYW1lOjph
bmFseXplSGVhcCwgXAogICAgICAgICAmQ2xhc3NOYW1lOjplc3RpbWF0ZWRTaXplLCBcCisgICAg
ICAgICZDbGFzc05hbWU6OnZpc2l0Q2hpbGRyZW4sIFwKKyAgICAgICAgJkNsYXNzTmFtZTo6dmlz
aXRDaGlsZHJlbiwgXAogICAgICAgICAmQ2xhc3NOYW1lOjp2aXNpdE91dHB1dENvbnN0cmFpbnRz
LCBcCiAgICAgfSwgXAogICAgIENsYXNzTmFtZTo6VHlwZWRBcnJheVN0b3JhZ2VUeXBlLCBcCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DbG9uZWRBcmd1bWVudHMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Nsb25lZEFyZ3VtZW50
cy5jcHAJKHJldmlzaW9uIDI3MjcxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0Nsb25lZEFyZ3VtZW50cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2Nyw3ICsyNjcsOCBAQCB2
b2lkIENsb25lZEFyZ3VtZW50czo6bWF0ZXJpYWxpemVTcGVjaWFsCiAgICAgICAgIG1hdGVyaWFs
aXplU3BlY2lhbHMoZ2xvYmFsT2JqZWN0KTsKIH0KIAotdm9pZCBDbG9uZWRBcmd1bWVudHM6OnZp
c2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRl
PHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIENsb25lZEFyZ3VtZW50czo6dmlzaXRDaGlsZHJlbklt
cGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIENsb25lZEFyZ3VtZW50
cyogdGhpc09iamVjdCA9IGpzQ2FzdDxDbG9uZWRBcmd1bWVudHMqPihjZWxsKTsKICAgICBBU1NF
UlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC0yNzUsNSArMjc2
LDcgQEAgdm9pZCBDbG9uZWRBcmd1bWVudHM6OnZpc2l0Q2hpbGRyZW4oSlNDZQogICAgIHZpc2l0
b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fY2FsbGVlKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxE
UkVOKENsb25lZEFyZ3VtZW50cyk7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DbG9uZWRBcmd1bWVudHMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DbG9uZWRBcmd1bWVudHMuaAkocmV2aXNp
b24gMjcyNzEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xvbmVkQXJndW1l
bnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTYyLDcgKzYyLDcgQEAgcHVibGljOgogICAgIHN0YXRp
YyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1
ZSBwcm90b3R5cGUpOwogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVNsb3dQdXRTdHJ1Y3R1
cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUgcHJvdG90eXBlKTsKIAotICAgIHN0YXRp
YyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJF
X1ZJU0lUX0NISUxEUkVOOwogCiAgICAgREVDTEFSRV9JTkZPOwogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9EaXJlY3RBcmd1bWVudHMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5jcHAJKHJldmlzaW9u
IDI3MjcxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkwLDcgKzkwLDggQEAgc2l6ZV90IERpcmVjdEFyZ3Vt
ZW50czo6ZXN0aW1hdGVkU2l6ZShKUwogICAgIHJldHVybiBCYXNlOjplc3RpbWF0ZWRTaXplKGNl
bGwsIHZtKSArIG1hcHBlZEFyZ3VtZW50c1NpemUgKyBtb2RpZmllZEFyZ3VtZW50c1NpemU7CiB9
CiAKLXZvaWQgRGlyZWN0QXJndW1lbnRzOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogdGhpc0NlbGws
IFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQg
RGlyZWN0QXJndW1lbnRzOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIHRoaXNDZWxsLCBWaXNp
dG9yJiB2aXNpdG9yKQogewogICAgIERpcmVjdEFyZ3VtZW50cyogdGhpc09iamVjdCA9IHN0YXRp
Y19jYXN0PERpcmVjdEFyZ3VtZW50cyo+KHRoaXNDZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNU
X0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC0xMDQsNiArMTA1LDggQEAgdm9pZCBE
aXJlY3RBcmd1bWVudHM6OnZpc2l0Q2hpbGRyZW4oSlNDZQogICAgIEdlbmVyaWNBcmd1bWVudHM8
RGlyZWN0QXJndW1lbnRzPjo6dmlzaXRDaGlsZHJlbih0aGlzQ2VsbCwgdmlzaXRvcik7CiB9CiAK
K0RFRklORV9WSVNJVF9DSElMRFJFTihEaXJlY3RBcmd1bWVudHMpOworCiBTdHJ1Y3R1cmUqIERp
cmVjdEFyZ3VtZW50czo6Y3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCiB7CiAgICAgcmV0dXJuIFN0cnVjdHVyZTo6
Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oRGlyZWN0QXJndW1l
bnRzVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvRGlyZWN0QXJndW1lbnRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvRGlyZWN0QXJndW1lbnRzLmgJKHJldmlzaW9uIDI3MjcxMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC02NSw3ICs2NSw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgRGlyZWN0QXJn
dW1lbnRzKiBjcmVhdGVCeUNvcHlpbmcoSlNHbG9iYWxPYmplY3QqLCBDYWxsRnJhbWUqKTsKIAog
ICAgIHN0YXRpYyBzaXplX3QgZXN0aW1hdGVkU2l6ZShKU0NlbGwqLCBWTSYpOwotICAgIHN0YXRp
YyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJF
X1ZJU0lUX0NISUxEUkVOOwogICAgIAogICAgIHVpbnQzMl90IGludGVybmFsTGVuZ3RoKCkgY29u
c3QKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FdmFsRXhlY3V0
YWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXZh
bEV4ZWN1dGFibGUuY3BwCShyZXZpc2lvbiAyNzI3MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9FdmFsRXhlY3V0YWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMw
LDkgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKK2V4dGVybiB1bnNpZ25lZCBtbGFtVGltZTsKK2V4
dGVybiBib29sIG1sYW1WZXJib3NlOworCiBjb25zdCBDbGFzc0luZm8gRXZhbEV4ZWN1dGFibGU6
OnNfaW5mbyA9IHsgIkV2YWxFeGVjdXRhYmxlIiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVs
bHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShFdmFsRXhlY3V0YWJsZSkgfTsKIAogRXZhbEV4ZWN1
dGFibGU6OkV2YWxFeGVjdXRhYmxlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0
IFNvdXJjZUNvZGUmIHNvdXJjZSwgYm9vbCBpblN0cmljdENvbnRleHQsIERlcml2ZWRDb250ZXh0
VHlwZSBkZXJpdmVkQ29udGV4dFR5cGUsIGJvb2wgaXNBcnJvd0Z1bmN0aW9uQ29udGV4dCwgYm9v
bCBpc0luc2lkZU9yZGluYXJ5RnVuY3Rpb24sIEV2YWxDb250ZXh0VHlwZSBldmFsQ29udGV4dFR5
cGUsIE5lZWRzQ2xhc3NGaWVsZEluaXRpYWxpemVyIG5lZWRzQ2xhc3NGaWVsZEluaXRpYWxpemVy
LCBQcml2YXRlQnJhbmRSZXF1aXJlbWVudCBwcml2YXRlQnJhbmRSZXF1aXJlbWVudCkKQEAgLTUw
LDE4ICs1MywyNyBAQCBhdXRvIEV2YWxFeGVjdXRhYmxlOjplbnN1cmVUZW1wbGF0ZU9iamVjCiAg
ICAgcmV0dXJuIGVuc3VyZVRlbXBsYXRlT2JqZWN0TWFwSW1wbChtX3RlbXBsYXRlT2JqZWN0TWFw
KTsKIH0KIAotdm9pZCBFdmFsRXhlY3V0YWJsZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGws
IFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQg
RXZhbEV4ZWN1dGFibGU6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYg
dmlzaXRvcikKIHsKKyAgICBpZiAobWxhbVZlcmJvc2UpIGRhdGFMb2dMbigiICAgIG1sYW0gRXZh
bEV4ZWN1dGFibGU8IiwgUmF3UG9pbnRlcihjZWxsKSwgIj46OnZpc2l0Q2hpbGRyZW5JbXBsOiA8
Z2MjIiwgbWxhbVRpbWUsICI+IHZpc2l0b3IgIiwgdmlzaXRvci5jb2RlTmFtZSgpKTsKKwogICAg
IEV2YWxFeGVjdXRhYmxlKiB0aGlzT2JqZWN0ID0ganNDYXN0PEV2YWxFeGVjdXRhYmxlKj4oY2Vs
bCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwog
ICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CisgICAgaWYgKG1s
YW1WZXJib3NlKSBkYXRhTG9nTG4oIiAgICBtbGFtIEV2YWxFeGVjdXRhYmxlPCIsIFJhd1BvaW50
ZXIoY2VsbCksICI+Ojp2aXNpdENoaWxkcmVuSW1wbDogPGdjIyIsIG1sYW1UaW1lLCAiPiB2aXNp
dG9yICIsIHZpc2l0b3IuY29kZU5hbWUoKSwgIiB8IGFwcGVuZCBtX3VubGlua2VkRXZhbENvZGVC
bG9jayAiLCBSYXdQb2ludGVyKHRoaXNPYmplY3QtPm1fdW5saW5rZWRFdmFsQ29kZUJsb2NrLmdl
dCgpKSk7CiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV91bmxpbmtlZEV2YWxDb2Rl
QmxvY2spOworICAgIGlmIChtbGFtVmVyYm9zZSkgZGF0YUxvZ0xuKCIgICAgbWxhbSBFdmFsRXhl
Y3V0YWJsZTwiLCBSYXdQb2ludGVyKGNlbGwpLCAiPjo6dmlzaXRDaGlsZHJlbkltcGw6IDxnYyMi
LCBtbGFtVGltZSwgIj4gdmlzaXRvciAiLCB2aXNpdG9yLmNvZGVOYW1lKCksICIgfCBhcHBlbmQg
bV9ldmFsQ29kZUJsb2NrICIsIFJhd1BvaW50ZXIodGhpc09iamVjdC0+bV9ldmFsQ29kZUJsb2Nr
LmdldCgpKSk7CiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9ldmFsQ29kZUJsb2Nr
KTsKICAgICBpZiAoVGVtcGxhdGVPYmplY3RNYXAqIG1hcCA9IHRoaXNPYmplY3QtPm1fdGVtcGxh
dGVPYmplY3RNYXAuZ2V0KCkpIHsKICAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayh0aGlz
T2JqZWN0LT5jZWxsTG9jaygpKTsKLSAgICAgICAgZm9yIChhdXRvJiBlbnRyeSA6ICptYXApCisg
ICAgICAgIGZvciAoYXV0byYgZW50cnkgOiAqbWFwKSB7CisgICAgICAgICAgICBpZiAobWxhbVZl
cmJvc2UpIGRhdGFMb2dMbigiICAgIG1sYW0gRXZhbEV4ZWN1dGFibGU8IiwgUmF3UG9pbnRlcihj
ZWxsKSwgIj46OnZpc2l0Q2hpbGRyZW5JbXBsOiA8Z2MjIiwgbWxhbVRpbWUsICI+IHZpc2l0b3Ig
IiwgdmlzaXRvci5jb2RlTmFtZSgpLCAiIHwgYXBwZW5kIG1fdGVtcGxhdGVPYmplY3RNYXAgIiwg
UmF3UG9pbnRlcihlbnRyeS52YWx1ZS5nZXQoKSkpOwogICAgICAgICAgICAgdmlzaXRvci5hcHBl
bmQoZW50cnkudmFsdWUpOworICAgICAgICB9CiAgICAgfQogfQogCitERUZJTkVfVklTSVRfQ0hJ
TERSRU4oRXZhbEV4ZWN1dGFibGUpOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V2YWxFeGVjdXRhYmxlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXZhbEV4ZWN1dGFibGUuaAkocmV2aXNpb24g
MjcyNzEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXZhbEV4ZWN1dGFibGUu
aAkod29ya2luZyBjb3B5KQpAQCAtNzksNyArNzksNyBAQCBwcm90ZWN0ZWQ6CiAgICAgdXNpbmcg
QmFzZTo6ZmluaXNoQ3JlYXRpb247CiAgICAgRXZhbEV4ZWN1dGFibGUoSlNHbG9iYWxPYmplY3Qq
LCBjb25zdCBTb3VyY2VDb2RlJiwgYm9vbCBpblN0cmljdENvbnRleHQsIERlcml2ZWRDb250ZXh0
VHlwZSwgYm9vbCBpc0Fycm93RnVuY3Rpb25Db250ZXh0LCBib29sIGlzSW5zaWRlT3JkaW5hcnlG
dW5jdGlvbiwgRXZhbENvbnRleHRUeXBlLCBOZWVkc0NsYXNzRmllbGRJbml0aWFsaXplciwgUHJp
dmF0ZUJyYW5kUmVxdWlyZW1lbnQpOwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihK
U0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAg
ICB1bnNpZ25lZCBtX25lZWRzQ2xhc3NGaWVsZEluaXRpYWxpemVyIDogMTsKICAgICB1bnNpZ25l
ZCBtX3ByaXZhdGVCcmFuZFJlcXVpcmVtZW50IDogMTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0V4Y2VwdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9uLmNwcAkocmV2aXNpb24gMjcyNzEwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTMsNyArNTMsOCBAQCBTdHJ1Y3R1cmUqIEV4Y2VwdGlvbjo6Y3JlYXRlU3RydWN0dXJlKFZNCiAg
ICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwg
VHlwZUluZm8oQ2VsbFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKIH0KIAotdm9pZCBF
eGNlcHRpb246OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRv
cikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEV4Y2VwdGlvbjo6dmlzaXRDaGls
ZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEV4Y2VwdGlv
biogdGhpc09iamVjdCA9IGpzQ2FzdDxFeGNlcHRpb24qPihjZWxsKTsKICAgICBBU1NFUlRfR0Nf
T0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC02NCw2ICs2NSw4IEBAIHZv
aWQgRXhjZXB0aW9uOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2UKICAgICAgICAgZnJhbWUudmlz
aXRDaGlsZHJlbih2aXNpdG9yKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEV4Y2VwdGlv
bik7CisKIEV4Y2VwdGlvbjo6RXhjZXB0aW9uKFZNJiB2bSkKICAgICA6IEJhc2Uodm0sIHZtLmV4
Y2VwdGlvblN0cnVjdHVyZS5nZXQoKSkKIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0V4Y2VwdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0V4Y2VwdGlvbi5oCShyZXZpc2lvbiAyNzI3MTApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9FeGNlcHRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtNTEsNyArNTEsNyBA
QCBwdWJsaWM6CiAKICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBK
U0dsb2JhbE9iamVjdCosIEpTVmFsdWUgcHJvdG90eXBlKTsKIAotICAgIHN0YXRpYyB2b2lkIHZp
c2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NI
SUxEUkVOOwogCiAgICAgREVDTEFSRV9FWFBPUlRfSU5GTzsKIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25FeGVjdXRhYmxlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvbkV4ZWN1dGFibGUuY3BwCShyZXZp
c2lvbiAyNzI3MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvbkV4
ZWN1dGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Nyw3ICs2Nyw4IEBAIEZ1bmN0aW9uQ29k
ZUJsb2NrKiBGdW5jdGlvbkV4ZWN1dGFibGU6OmIKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RnVu
Y3Rpb25Db2RlQmxvY2sqPihlZGdlLT5jb2RlQmxvY2soKS0+YmFzZWxpbmVBbHRlcm5hdGl2ZSgp
KTsKIH0KIAotdm9pZCBGdW5jdGlvbkV4ZWN1dGFibGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBj
ZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2
b2lkIEZ1bmN0aW9uRXhlY3V0YWJsZTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBW
aXNpdG9yJiB2aXNpdG9yKQogewogICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogdGhpc09iamVjdCA9
IGpzQ2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNU
X0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC04Niw2ICs4Nyw4IEBAIHZvaWQgRnVu
Y3Rpb25FeGVjdXRhYmxlOjp2aXNpdENoaWxkcmVuKEoKICAgICB9CiB9CiAKK0RFRklORV9WSVNJ
VF9DSElMRFJFTihGdW5jdGlvbkV4ZWN1dGFibGUpOworCiBGdW5jdGlvbkV4ZWN1dGFibGUqIEZ1
bmN0aW9uRXhlY3V0YWJsZTo6ZnJvbUdsb2JhbENvZGUoCiAgICAgY29uc3QgSWRlbnRpZmllciYg
bmFtZSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgU291cmNlQ29kZSYgc291
cmNlLCAKICAgICBKU09iamVjdComIGV4Y2VwdGlvbiwgaW50IG92ZXJyaWRlTGluZU51bWJlciwg
T3B0aW9uYWw8aW50PiBmdW5jdGlvbkNvbnN0cnVjdG9yUGFyYW1ldGVyc0VuZFBvc2l0aW9uKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25FeGVjdXRhYmxlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25FeGVj
dXRhYmxlLmgJKHJldmlzaW9uIDI3MjcxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNjYsNyArMTY2LDcg
QEAgcHVibGljOgogICAgIEpTUGFyc2VyU2NyaXB0TW9kZSBzY3JpcHRNb2RlKCkgY29uc3QgeyBy
ZXR1cm4gbV91bmxpbmtlZEV4ZWN1dGFibGUtPnNjcmlwdE1vZGUoKTsgfQogICAgIFNvdXJjZUNv
ZGUgY2xhc3NTb3VyY2UoKSBjb25zdCB7IHJldHVybiBtX3VubGlua2VkRXhlY3V0YWJsZS0+Y2xh
c3NTb3VyY2UoKTsgfQogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBT
bG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAgICAgc3RhdGljIFN0
cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgSlNWYWx1ZSBwcm90bykKICAgICB7CiAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNy
ZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90bywgVHlwZUluZm8oRnVuY3Rpb25FeGVjdXRhYmxl
VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvRnVuY3Rpb25SYXJlRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25SYXJlRGF0YS5jcHAJKHJldmlzaW9uIDI3Mjcx
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uUmFyZURhdGEuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC01MSw3ICs1MSw4IEBAIFN0cnVjdHVyZSogRnVuY3Rpb25SYXJl
RGF0YTo6Y3JlYXRlU3RydWMKICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2Jh
bE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhDZWxsVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBp
bmZvKCkpOwogfQogCi12b2lkIEZ1bmN0aW9uUmFyZURhdGE6OnZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+
Cit2b2lkIEZ1bmN0aW9uUmFyZURhdGE6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwg
VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBGdW5jdGlvblJhcmVEYXRhKiByYXJlRGF0YSA9IGpz
Q2FzdDxGdW5jdGlvblJhcmVEYXRhKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhF
UklUUyhjZWxsLCBpbmZvKCkpOwpAQCAtNjMsNiArNjQsOCBAQCB2b2lkIEZ1bmN0aW9uUmFyZURh
dGE6OnZpc2l0Q2hpbGRyZW4oSlNDCiAgICAgdmlzaXRvci5hcHBlbmQocmFyZURhdGEtPm1fZXhl
Y3V0YWJsZSk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihGdW5jdGlvblJhcmVEYXRhKTsK
KwogRnVuY3Rpb25SYXJlRGF0YTo6RnVuY3Rpb25SYXJlRGF0YShWTSYgdm0sIEV4ZWN1dGFibGVC
YXNlKiBleGVjdXRhYmxlKQogICAgIDogQmFzZSh2bSwgdm0uZnVuY3Rpb25SYXJlRGF0YVN0cnVj
dHVyZS5nZXQoKSkKICAgICAsIG1fb2JqZWN0QWxsb2NhdGlvblByb2ZpbGUoKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25SYXJlRGF0YS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uUmFyZURhdGEuaAkocmV2
aXNpb24gMjcyNzEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25S
YXJlRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC02NSw3ICs2NSw3IEBAIHB1YmxpYzoKIAogICAg
IHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0Kiwg
SlNWYWx1ZSBwcm90b3R5cGUpOwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0Nl
bGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBE
RUNMQVJFX0lORk87CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVy
aWNBcmd1bWVudHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9HZW5lcmljQXJndW1lbnRzLmgJKHJldmlzaW9uIDI3MjcxMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0dlbmVyaWNBcmd1bWVudHMuaAkod29ya2luZyBjb3B5KQpAQCAtNDQs
NyArNDQsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgewogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIHZp
c2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1RFTVBMQVRF
X1ZJU0lUX0NISUxEUkVOOwogICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU09i
amVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKICAg
ICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTT2JqZWN0KiwgSlNHbG9i
YWxPYmplY3QqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwogICAgIHN0
YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCos
IFByb3BlcnR5TmFtZUFycmF5JiwgRG9udEVudW1Qcm9wZXJ0aWVzTW9kZSk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljQXJndW1lbnRzSW5saW5lcy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNBcmd1bWVudHNJ
bmxpbmVzLmgJKHJldmlzaW9uIDI3MjcxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0dlbmVyaWNBcmd1bWVudHNJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMx
LDggQEAKIG5hbWVzcGFjZSBKU0MgewogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlPgotdm9pZCBH
ZW5lcmljQXJndW1lbnRzPFR5cGU+Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogdGhpc0NlbGwsIFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgR2Vu
ZXJpY0FyZ3VtZW50czxUeXBlPjo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiB0aGlzQ2VsbCwg
VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBUeXBlKiB0aGlzT2JqZWN0ID0gc3RhdGljX2Nhc3Q8
VHlwZSo+KHRoaXNDZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmpl
Y3QsIGluZm8oKSk7CkBAIC00MSw2ICs0Miw4IEBAIHZvaWQgR2VuZXJpY0FyZ3VtZW50czxUeXBl
Pjo6dmlzaXRDaGlsZHIKICAgICAgICAgdmlzaXRvci5tYXJrQXV4aWxpYXJ5KHRoaXNPYmplY3Qt
Pm1fbW9kaWZpZWRBcmd1bWVudHNEZXNjcmlwdG9yLmdldFVuc2FmZSgpKTsKIH0KIAorREVGSU5F
X1RFTVBMQVRFX1ZJU0lUX0NISUxEUkVOKHRlbXBsYXRlPHR5cGVuYW1lIFR5cGU+LCBHZW5lcmlj
QXJndW1lbnRzPFR5cGU+KTsKKwogdGVtcGxhdGU8dHlwZW5hbWUgVHlwZT4KIGJvb2wgR2VuZXJp
Y0FyZ3VtZW50czxUeXBlPjo6Z2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiBvYmplY3QsIEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZSBpZGVudCwgUHJvcGVydHlT
bG90JiBzbG90KQogewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2V0dGVy
U2V0dGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9H
ZXR0ZXJTZXR0ZXIuY3BwCShyZXZpc2lvbiAyNzI3MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9HZXR0ZXJTZXR0ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3ICszMyw4
IEBAIFNUQVRJQ19BU1NFUlRfSVNfVFJJVklBTExZX0RFU1RSVUNUSUJMRSgKIAogY29uc3QgQ2xh
c3NJbmZvIEdldHRlclNldHRlcjo6c19pbmZvID0geyAiR2V0dGVyU2V0dGVyIiwgbnVsbHB0ciwg
bnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShHZXR0ZXJTZXR0ZXIpIH07CiAK
LXZvaWQgR2V0dGVyU2V0dGVyOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0
b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBHZXR0ZXJTZXR0
ZXI6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsK
ICAgICBHZXR0ZXJTZXR0ZXIqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8R2V0dGVyU2V0dGVyKj4oY2Vs
bCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpA
QCAtNDMsNiArNDQsOCBAQCB2b2lkIEdldHRlclNldHRlcjo6dmlzaXRDaGlsZHJlbihKU0NlbGwq
CiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9zZXR0ZXIpOwogfQogCitERUZJTkVf
VklTSVRfQ0hJTERSRU4oR2V0dGVyU2V0dGVyKTsKKwogSlNWYWx1ZSBjYWxsR2V0dGVyKEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgYmFzZSwgSlNWYWx1ZSBnZXR0ZXJTZXR0
ZXIpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvR2V0dGVyU2V0dGVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2V0dGVyU2V0dGVyLmgJKHJldmlzaW9uIDI3MjcxMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dldHRlclNldHRlci5oCSh3b3JraW5n
IGNvcHkpCkBAIC04Miw3ICs4Miw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGNyZWF0ZSh2
bSwgZ2xvYmFsT2JqZWN0LCBnZXR0ZXJPYmplY3QsIHNldHRlck9iamVjdCk7CiAgICAgfQogCi0g
ICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAg
IERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBKU09iamVjdCogZ2V0dGVyKCkgY29uc3Qg
eyByZXR1cm4gbV9nZXR0ZXIuZ2V0KCk7IH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSGFzaE1hcEltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0hhc2hNYXBJbXBsLmNwcAkocmV2aXNpb24gMjcyNzEwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSGFzaE1hcEltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zMCw2ICszMCw5IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCitERUZJTkVfVEVNUExBVEVfVklT
SVRfQ0hJTERSRU4odGVtcGxhdGU8PiwgSGFzaE1hcEJ1Y2tldDxIYXNoTWFwQnVja2V0RGF0YUtl
eT4pOworREVGSU5FX1RFTVBMQVRFX1ZJU0lUX0NISUxEUkVOKHRlbXBsYXRlPD4sIEhhc2hNYXBC
dWNrZXQ8SGFzaE1hcEJ1Y2tldERhdGFLZXlWYWx1ZT4pOworCiB0ZW1wbGF0ZTw+CiBjb25zdCBD
bGFzc0luZm8gSGFzaE1hcEJ1Y2tldDxIYXNoTWFwQnVja2V0RGF0YUtleT46OnNfaW5mbyA9CiAg
ICAgeyAiSGFzaE1hcEJ1Y2tldCIsIG51bGxwdHIsIG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9N
RVRIT0RfVEFCTEUoSGFzaE1hcEJ1Y2tldDxIYXNoTWFwQnVja2V0RGF0YUtleT4pIH07CkBAIC0z
OCw4ICs0MSw5IEBAIHRlbXBsYXRlPD4KIGNvbnN0IENsYXNzSW5mbyBIYXNoTWFwQnVja2V0PEhh
c2hNYXBCdWNrZXREYXRhS2V5VmFsdWU+OjpzX2luZm8gPQogICAgIHsgIkhhc2hNYXBCdWNrZXQi
LCBudWxscHRyLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEhhc2hNYXBC
dWNrZXQ8SGFzaE1hcEJ1Y2tldERhdGFLZXlWYWx1ZT4pIH07CiAKLXRlbXBsYXRlIDx0eXBlbmFt
ZSBEYXRhPgotdm9pZCBIYXNoTWFwQnVja2V0PERhdGE+Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCog
Y2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBEYXRhPgordGVt
cGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSGFzaE1hcEJ1Y2tldDxEYXRhPjo6dmlzaXRD
aGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEhhc2hN
YXBCdWNrZXQqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SGFzaE1hcEJ1Y2tldCo+KGNlbGwpOwogICAg
IEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTUyLDgg
KzU2LDkgQEAgdm9pZCBIYXNoTWFwQnVja2V0PERhdGE+Ojp2aXNpdENoaWxkcmVuKAogICAgIHZp
c2l0b3IuYXBwZW5kVmFsdWVzKGJpdHdpc2VfY2FzdDxXcml0ZUJhcnJpZXI8VW5rbm93bj4qPigm
dGhpc09iamVjdC0+bV9kYXRhKSwgc2l6ZW9mKERhdGEpIC8gc2l6ZW9mKFdyaXRlQmFycmllcjxV
bmtub3duPikpOwogfQogCi10ZW1wbGF0ZSA8dHlwZW5hbWUgSGFzaE1hcEJ1Y2tldD4KLXZvaWQg
SGFzaE1hcEltcGw8SGFzaE1hcEJ1Y2tldD46OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBT
bG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIEhhc2hNYXBCdWNrZXQ+Cit0
ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBIYXNoTWFwSW1wbDxIYXNoTWFwQnVja2V0
Pjo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewog
ICAgIEhhc2hNYXBJbXBsKiB0aGlzT2JqZWN0ID0ganNDYXN0PEhhc2hNYXBJbXBsKj4oY2VsbCk7
CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAt
NjYsNiArNzEsOCBAQCB2b2lkIEhhc2hNYXBJbXBsPEhhc2hNYXBCdWNrZXQ+Ojp2aXNpdENoCiAg
ICAgICAgIHZpc2l0b3IubWFya0F1eGlsaWFyeShidWZmZXIpOwogfQogCitERUZJTkVfVEVNUExB
VEVfVklTSVRfQ0hJTERSRU4odGVtcGxhdGU8dHlwZW5hbWUgSGFzaE1hcEJ1Y2tldD4sIEhhc2hN
YXBJbXBsPEhhc2hNYXBCdWNrZXQ+KTsKKwogdGVtcGxhdGUgPHR5cGVuYW1lIEhhc2hNYXBCdWNr
ZXQ+CiBzaXplX3QgSGFzaE1hcEltcGw8SGFzaE1hcEJ1Y2tldD46OmVzdGltYXRlZFNpemUoSlND
ZWxsKiBjZWxsLCBWTSYgdm0pCiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9IYXNoTWFwSW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0hhc2hNYXBJbXBsLmgJKHJldmlzaW9uIDI3MjcxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0hhc2hNYXBJbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0OCw3ICsxNDgs
NyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX2RhdGEudmFsdWUuZ2V0KCk7CiAgICAgfQog
Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwor
ICAgIERFQ0xBUkVfVEVNUExBVEVfVklTSVRfQ0hJTERSRU47CiAKICAgICBBTFdBWVNfSU5MSU5F
IEhhc2hNYXBCdWNrZXQqIG5leHQoKSBjb25zdCB7IHJldHVybiBtX25leHQuZ2V0KCk7IH0KICAg
ICBBTFdBWVNfSU5MSU5FIEhhc2hNYXBCdWNrZXQqIHByZXYoKSBjb25zdCB7IHJldHVybiBtX3By
ZXYuZ2V0KCk7IH0KQEAgLTM2NCw3ICszNjQsNyBAQCBjbGFzcyBIYXNoTWFwSW1wbCA6IHB1Ymxp
YyBKU05vbkZpbmFsT2JqCiBwdWJsaWM6CiAgICAgdXNpbmcgQnVja2V0VHlwZSA9IEhhc2hNYXBC
dWNrZXRUeXBlOwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90
VmlzaXRvciYpOworICAgIERFQ0xBUkVfVEVNUExBVEVfVklTSVRfQ0hJTERSRU47CiAKICAgICBz
dGF0aWMgc2l6ZV90IGVzdGltYXRlZFNpemUoSlNDZWxsKiwgVk0mKTsKIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50ZXJuYWxGdW5jdGlvbi5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50ZXJuYWxGdW5jdGlvbi5jcHAJKHJl
dmlzaW9uIDI3MjcxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGVybmFs
RnVuY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NCw3ICs2NCw4IEBAIHZvaWQgSW50ZXJu
YWxGdW5jdGlvbjo6ZmluaXNoQ3JlYXRpb24oVk0KICAgICB9CiB9CiAKLXZvaWQgSW50ZXJuYWxG
dW5jdGlvbjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9y
KQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSW50ZXJuYWxGdW5jdGlvbjo6dmlz
aXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIElu
dGVybmFsRnVuY3Rpb24qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SW50ZXJuYWxGdW5jdGlvbio+KGNl
bGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsK
QEAgLTczLDYgKzc0LDggQEAgdm9pZCBJbnRlcm5hbEZ1bmN0aW9uOjp2aXNpdENoaWxkcmVuKEpT
QwogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fb3JpZ2luYWxOYW1lKTsKIH0KIAor
REVGSU5FX0VYUE9SVF9WSVNJVF9DSElMRFJFTihJbnRlcm5hbEZ1bmN0aW9uKTsKKwogY29uc3Qg
U3RyaW5nJiBJbnRlcm5hbEZ1bmN0aW9uOjpuYW1lKCkKIHsKICAgICBjb25zdCBTdHJpbmcmIG5h
bWUgPSBtX29yaWdpbmFsTmFtZS0+dHJ5R2V0VmFsdWUoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0ludGVybmFsRnVuY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRlcm5hbEZ1bmN0aW9uLmgJKHJldmlzaW9uIDI3Mjcx
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGVybmFsRnVuY3Rpb24uaAko
d29ya2luZyBjb3B5KQpAQCAtNDYsNyArNDYsNyBAQCBwdWJsaWM6CiAKICAgICBERUNMQVJFX0VY
UE9SVF9JTkZPOwogCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgdmlzaXRDaGls
ZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfRVhQT1JUX1ZJU0lUX0NI
SUxEUkVOOwogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgY29uc3QgU3RyaW5nJiBuYW1lKCk7CiAg
ICAgY29uc3QgU3RyaW5nIGRpc3BsYXlOYW1lKFZNJik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9JbnRsQ29sbGF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0ludGxDb2xsYXRvci5jcHAJKHJldmlzaW9uIDI3MjcxMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxDb2xsYXRvci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTY1LDcgKzY1LDggQEAgdm9pZCBJbnRsQ29sbGF0b3I6OmZpbmlzaENyZWF0aW9u
KFZNJiB2bQogICAgIEFTU0VSVChpbmhlcml0cyh2bSwgaW5mbygpKSk7CiB9CiAKLXZvaWQgSW50
bENvbGxhdG9yOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0
b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBJbnRsQ29sbGF0b3I6OnZpc2l0
Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBJbnRs
Q29sbGF0b3IqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SW50bENvbGxhdG9yKj4oY2VsbCk7CiAgICAg
QVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNzUsNiAr
NzYsOCBAQCB2b2lkIEludGxDb2xsYXRvcjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqCiAgICAgdmlz
aXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9ib3VuZENvbXBhcmUpOwogfQogCitERUZJTkVfVklT
SVRfQ0hJTERSRU4oSW50bENvbGxhdG9yKTsKKwogVmVjdG9yPFN0cmluZz4gSW50bENvbGxhdG9y
Ojpzb3J0TG9jYWxlRGF0YShjb25zdCBTdHJpbmcmIGxvY2FsZSwgUmVsZXZhbnRFeHRlbnNpb25L
ZXkga2V5KQogewogICAgIC8vIDkuMSBJbnRlcm5hbCBzbG90cyBvZiBTZXJ2aWNlIENvbnN0cnVj
dG9ycyAmIDEwLjIuMyBJbnRlcm5hbCBzbG90cyAoRUNNQS00MDIgMi4wKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bENvbGxhdG9yLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bENvbGxhdG9yLmgJKHJldmlzaW9uIDI3Mjcx
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxDb2xsYXRvci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC04MCw3ICs4MCw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgSW50bENv
bGxhdG9yKFZNJiwgU3RydWN0dXJlKik7CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOwot
ICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAg
ICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgYm9vbCB1cGRhdGVDYW5Eb0FTQ0lJVUNB
RFVDRVRDb21wYXJpc29uKCkgY29uc3Q7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0ludGxEYXRlVGltZUZvcm1hdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSW50bERhdGVUaW1lRm9ybWF0LmNwcAkocmV2aXNpb24gMjcyNzEw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERhdGVUaW1lRm9ybWF0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtOTAsNyArOTAsOCBAQCB2b2lkIEludGxEYXRlVGltZUZvcm1h
dDo6ZmluaXNoQ3JlYXRpb24oCiAgICAgQVNTRVJUKGluaGVyaXRzKHZtLCBpbmZvKCkpKTsKIH0K
IAotdm9pZCBJbnRsRGF0ZVRpbWVGb3JtYXQ6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBT
bG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIElu
dGxEYXRlVGltZUZvcm1hdDo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9y
JiB2aXNpdG9yKQogewogICAgIEludGxEYXRlVGltZUZvcm1hdCogdGhpc09iamVjdCA9IGpzQ2Fz
dDxJbnRsRGF0ZVRpbWVGb3JtYXQqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVS
SVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC0xMDAsNiArMTAxLDggQEAgdm9pZCBJbnRsRGF0
ZVRpbWVGb3JtYXQ6OnZpc2l0Q2hpbGRyZW4oSgogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmpl
Y3QtPm1fYm91bmRGb3JtYXQpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSW50bERhdGVU
aW1lRm9ybWF0KTsKKwogdm9pZCBJbnRsRGF0ZVRpbWVGb3JtYXQ6OnNldEJvdW5kRm9ybWF0KFZN
JiB2bSwgSlNCb3VuZEZ1bmN0aW9uKiBmb3JtYXQpCiB7CiAgICAgbV9ib3VuZEZvcm1hdC5zZXQo
dm0sIHRoaXMsIGZvcm1hdCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9J
bnRsRGF0ZVRpbWVGb3JtYXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9JbnRsRGF0ZVRpbWVGb3JtYXQuaAkocmV2aXNpb24gMjcyNzEwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERhdGVUaW1lRm9ybWF0LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTg1LDcgKzg1LDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBJbnRsRGF0ZVRpbWVG
b3JtYXQoVk0mLCBTdHJ1Y3R1cmUqKTsKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7Ci0g
ICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAg
IERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBzdGF0aWMgVmVjdG9yPFN0cmluZz4gbG9j
YWxlRGF0YShjb25zdCBTdHJpbmcmLCBSZWxldmFudEV4dGVuc2lvbktleSk7CiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxMb2NhbGUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxMb2NhbGUuY3BwCShyZXZpc2lvbiAy
NzI3MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTG9jYWxlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNTgsNyArNTgsOCBAQCB2b2lkIEludGxMb2NhbGU6OmZpbmlzaENy
ZWF0aW9uKFZNJiB2bSkKICAgICBBU1NFUlQoaW5oZXJpdHModm0sIGluZm8oKSkpOwogfQogCi12
b2lkIEludGxMb2NhbGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYg
dmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEludGxMb2NhbGU6OnZp
c2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBh
dXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEludGxMb2NhbGUqPihjZWxsKTsKICAgICBBU1NFUlRf
R0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC02Niw2ICs2Nyw4IEBA
IHZvaWQgSW50bExvY2FsZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGMKICAgICBCYXNlOjp2aXNp
dENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERS
RU4oSW50bExvY2FsZSk7CisKIGNsYXNzIExvY2FsZUlEQnVpbGRlciBmaW5hbCB7CiBwdWJsaWM6
CiAgICAgYm9vbCBpbml0aWFsaXplKGNvbnN0IFN0cmluZyYpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSW50bExvY2FsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0ludGxMb2NhbGUuaAkocmV2aXNpb24gMjcyNzEwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bExvY2FsZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC03MSw3ICs3MSw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgSW50bExvY2FsZShWTSYsIFN0
cnVjdHVyZSopOwogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKLSAgICBzdGF0aWMgdm9p
ZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJ
VF9DSElMRFJFTjsKIAogICAgIFN0cmluZyBrZXl3b3JkVmFsdWUoQVNDSUlMaXRlcmFsLCBib29s
IGlzQm9vbGVhbiA9IGZhbHNlKSBjb25zdDsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSW50bE51bWJlckZvcm1hdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSW50bE51bWJlckZvcm1hdC5jcHAJKHJldmlzaW9uIDI3MjcxMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxOdW1iZXJGb3JtYXQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC03Myw3ICs3Myw4IEBAIHZvaWQgSW50bE51bWJlckZvcm1hdDo6Zmlu
aXNoQ3JlYXRpb24oVk0KICAgICBBU1NFUlQoaW5oZXJpdHModm0sIGluZm8oKSkpOwogfQogCi12
b2lkIEludGxOdW1iZXJGb3JtYXQ6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90Vmlz
aXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEludGxOdW1i
ZXJGb3JtYXQ6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRv
cikKIHsKICAgICBJbnRsTnVtYmVyRm9ybWF0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEludGxOdW1i
ZXJGb3JtYXQqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmpl
Y3QsIGluZm8oKSk7CkBAIC04Myw2ICs4NCw4IEBAIHZvaWQgSW50bE51bWJlckZvcm1hdDo6dmlz
aXRDaGlsZHJlbihKU0MKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2JvdW5kRm9y
bWF0KTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEludGxOdW1iZXJGb3JtYXQpOworCiBW
ZWN0b3I8U3RyaW5nPiBJbnRsTnVtYmVyRm9ybWF0Ojpsb2NhbGVEYXRhKGNvbnN0IFN0cmluZyYg
bG9jYWxlLCBSZWxldmFudEV4dGVuc2lvbktleSBrZXkpCiB7CiAgICAgLy8gOS4xIEludGVybmFs
IHNsb3RzIG9mIFNlcnZpY2UgQ29uc3RydWN0b3JzICYgMTEuMi4zIEludGVybmFsIHNsb3RzIChF
Q01BLTQwMiAyLjApCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTnVt
YmVyRm9ybWF0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SW50bE51bWJlckZvcm1hdC5oCShyZXZpc2lvbiAyNzI3MTApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9JbnRsTnVtYmVyRm9ybWF0LmgJKHdvcmtpbmcgY29weSkKQEAgLTk2LDcg
Kzk2LDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBJbnRsTnVtYmVyRm9ybWF0KFZNJiwgU3Ry
dWN0dXJlKik7CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOwotICAgIHN0YXRpYyB2b2lk
IHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lU
X0NISUxEUkVOOwogCiAgICAgc3RhdGljIFZlY3RvcjxTdHJpbmc+IGxvY2FsZURhdGEoY29uc3Qg
U3RyaW5nJiwgUmVsZXZhbnRFeHRlbnNpb25LZXkpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9JbnRsUGx1cmFsUnVsZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxQbHVyYWxSdWxlcy5jcHAJKHJldmlzaW9uIDI3Mjcx
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxQbHVyYWxSdWxlcy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTYxLDcgKzYxLDggQEAgdm9pZCBJbnRsUGx1cmFsUnVsZXM6OmZp
bmlzaENyZWF0aW9uKFZNJgogICAgIEFTU0VSVChpbmhlcml0cyh2bSwgaW5mbygpKSk7CiB9CiAK
LXZvaWQgSW50bFBsdXJhbFJ1bGVzOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZp
c2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBJbnRsUGx1
cmFsUnVsZXM6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRv
cikKIHsKICAgICBJbnRsUGx1cmFsUnVsZXMqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SW50bFBsdXJh
bFJ1bGVzKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0
LCBpbmZvKCkpOwpAQCAtNjksNiArNzAsOCBAQCB2b2lkIEludGxQbHVyYWxSdWxlczo6dmlzaXRD
aGlsZHJlbihKU0NlCiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9y
KTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEludGxQbHVyYWxSdWxlcyk7CisKIFZlY3Rv
cjxTdHJpbmc+IEludGxQbHVyYWxSdWxlczo6bG9jYWxlRGF0YShjb25zdCBTdHJpbmcmLCBSZWxl
dmFudEV4dGVuc2lvbktleSkKIHsKICAgICByZXR1cm4geyB9OwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSW50bFBsdXJhbFJ1bGVzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFBsdXJhbFJ1bGVzLmgJKHJldmlzaW9uIDI3Mjcx
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxQbHVyYWxSdWxlcy5oCSh3
b3JraW5nIGNvcHkpCkBAIC02Niw3ICs2Niw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgSW50
bFBsdXJhbFJ1bGVzKFZNJiwgU3RydWN0dXJlKik7CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihW
TSYpOwotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3Im
KTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgc3RhdGljIFZlY3RvcjxTdHJp
bmc+IGxvY2FsZURhdGEoY29uc3QgU3RyaW5nJiwgUmVsZXZhbnRFeHRlbnNpb25LZXkpOwogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsUmVsYXRpdmVUaW1lRm9ybWF0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsUmVs
YXRpdmVUaW1lRm9ybWF0LmNwcAkocmV2aXNpb24gMjcyNzEwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSW50bFJlbGF0aXZlVGltZUZvcm1hdC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTYyLDcgKzYyLDggQEAgdm9pZCBJbnRsUmVsYXRpdmVUaW1lRm9ybWF0OjpmaW5pc2hDcmVh
dAogICAgIEFTU0VSVChpbmhlcml0cyh2bSwgaW5mbygpKSk7CiB9CiAKLXZvaWQgSW50bFJlbGF0
aXZlVGltZUZvcm1hdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSW50bFJlbGF0aXZlVGlt
ZUZvcm1hdDo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9y
KQogewogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SW50bFJlbGF0aXZlVGltZUZvcm1h
dCo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5m
bygpKTsKQEAgLTcwLDYgKzcxLDggQEAgdm9pZCBJbnRsUmVsYXRpdmVUaW1lRm9ybWF0Ojp2aXNp
dENoaWxkcgogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CiB9
CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihJbnRsUmVsYXRpdmVUaW1lRm9ybWF0KTsKKwogVmVj
dG9yPFN0cmluZz4gSW50bFJlbGF0aXZlVGltZUZvcm1hdDo6bG9jYWxlRGF0YShjb25zdCBTdHJp
bmcmIGxvY2FsZSwgUmVsZXZhbnRFeHRlbnNpb25LZXkga2V5KQogewogICAgIEFTU0VSVF9VTlVT
RUQoa2V5LCBrZXkgPT0gUmVsZXZhbnRFeHRlbnNpb25LZXk6Ok51KTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxSZWxhdGl2ZVRpbWVGb3JtYXQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsUmVsYXRpdmVUaW1lRm9ybWF0
LmgJKHJldmlzaW9uIDI3MjcxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lu
dGxSZWxhdGl2ZVRpbWVGb3JtYXQuaAkod29ya2luZyBjb3B5KQpAQCAtNjQsNyArNjQsNyBAQCBw
dWJsaWM6CiBwcml2YXRlOgogICAgIEludGxSZWxhdGl2ZVRpbWVGb3JtYXQoVk0mLCBTdHJ1Y3R1
cmUqKTsKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7Ci0gICAgc3RhdGljIHZvaWQgdmlz
aXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJ
TERSRU47CiAKICAgICBzdGF0aWMgVmVjdG9yPFN0cmluZz4gbG9jYWxlRGF0YShjb25zdCBTdHJp
bmcmLCBSZWxldmFudEV4dGVuc2lvbktleSk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0ludGxTZWdtZW50SXRlcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxTZWdtZW50SXRlcmF0b3IuY3BwCShyZXZpc2lvbiAy
NzI3MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsU2VnbWVudEl0ZXJh
dG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjQsMTMgKzY0LDE2IEBAIHZvaWQgSW50bFNlZ21l
bnRJdGVyYXRvcjo6ZmluaXNoQ3JlYXRpb24KICAgICBtX3N0cmluZy5zZXQodm0sIHRoaXMsIHN0
cmluZyk7CiB9CiAKLXZvaWQgSW50bFNlZ21lbnRJdGVyYXRvcjo6dmlzaXRDaGlsZHJlbihKU0Nl
bGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRv
cj4KK3ZvaWQgSW50bFNlZ21lbnRJdGVyYXRvcjo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBj
ZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8
SW50bFNlZ21lbnRJdGVyYXRvcio+KGNlbGwpOwogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhp
c09iamVjdCwgdmlzaXRvcik7CiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9zdHJp
bmcpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSW50bFNlZ21lbnRJdGVyYXRvcik7CisK
IEpTT2JqZWN0KiBJbnRsU2VnbWVudEl0ZXJhdG9yOjpuZXh0KEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFNlZ21lbnRJdGVyYXRvci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxTZWdtZW50SXRlcmF0b3Iu
aAkocmV2aXNpb24gMjcyNzEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50
bFNlZ21lbnRJdGVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC01Myw3ICs1Myw3IEBAIHB1Ymxp
YzoKIAogICAgIEpTT2JqZWN0KiBuZXh0KEpTR2xvYmFsT2JqZWN0Kik7CiAKLSAgICBzdGF0aWMg
dm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9W
SVNJVF9DSElMRFJFTjsKIAogcHJpdmF0ZToKICAgICBJbnRsU2VnbWVudEl0ZXJhdG9yKFZNJiwg
U3RydWN0dXJlKiwgc3RkOjp1bmlxdWVfcHRyPFVCcmVha0l0ZXJhdG9yLCBVQnJlYWtJdGVyYXRv
ckRlbGV0ZXI+JiYsIEJveDxWZWN0b3I8VUNoYXI+PiYmLCBJbnRsU2VnbWVudGVyOjpHcmFudWxh
cml0eSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsU2VnbWVudHMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxTZWdt
ZW50cy5jcHAJKHJldmlzaW9uIDI3MjcxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0ludGxTZWdtZW50cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwOSwxMSArMTA5LDE0IEBA
IEpTT2JqZWN0KiBJbnRsU2VnbWVudHM6OmNyZWF0ZVNlZ21lbnRJdGUKICAgICByZXR1cm4gSW50
bFNlZ21lbnRJdGVyYXRvcjo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QtPnNlZ21lbnRJdGVyYXRv
clN0cnVjdHVyZSgpLCBXVEZNb3ZlKHNlZ21lbnRlciksIG1fYnVmZmVyLCBtX3N0cmluZy5nZXQo
KSwgbV9ncmFudWxhcml0eSk7CiB9CiAKLXZvaWQgSW50bFNlZ21lbnRzOjp2aXNpdENoaWxkcmVu
KEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPgordm9pZCBJbnRsU2VnbWVudHM6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2Vs
bCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PElu
dGxTZWdtZW50cyo+KGNlbGwpOwogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwg
dmlzaXRvcik7CiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9zdHJpbmcpOwogfQog
CitERUZJTkVfVklTSVRfQ0hJTERSRU4oSW50bFNlZ21lbnRzKTsKKwogfSAvLyBuYW1lc3BhY2Ug
SlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsU2VnbWVudHMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsU2VnbWVudHMu
aAkocmV2aXNpb24gMjcyNzEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50
bFNlZ21lbnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTU0LDcgKzU0LDcgQEAgcHVibGljOgogICAg
IEpTVmFsdWUgY29udGFpbmluZyhKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUgaW5kZXhWYWx1ZSk7
CiAgICAgSlNPYmplY3QqIGNyZWF0ZVNlZ21lbnRJdGVyYXRvcihKU0dsb2JhbE9iamVjdCopOwog
Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwor
ICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKIHByaXZhdGU6CiAgICAgSW50bFNlZ21lbnRz
KFZNJiwgU3RydWN0dXJlKiwgc3RkOjp1bmlxdWVfcHRyPFVCcmVha0l0ZXJhdG9yLCBVQnJlYWtJ
dGVyYXRvckRlbGV0ZXI+JiYsIEJveDxWZWN0b3I8VUNoYXI+PiYmLCBJbnRsU2VnbWVudGVyOjpH
cmFudWxhcml0eSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5
QnVmZmVyVmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNBcnJheUJ1ZmZlclZpZXcuY3BwCShyZXZpc2lvbiAyNzI3MTApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTE1NSw3ICsxNTUsOCBAQCB2b2lkIEpTQXJyYXlCdWZmZXJWaWV3OjpmaW5pc2hDcmVhdGlv
bihWCiAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAotdm9pZCBKU0FycmF5
QnVmZmVyVmlldzo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNp
dG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNBcnJheUJ1ZmZlclZpZXc6
OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAg
ICBKU0FycmF5QnVmZmVyVmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0FycmF5QnVmZmVyVmll
dyo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5m
bygpKTsKQEAgLTE2OSw2ICsxNzAsOCBAQCB2b2lkIEpTQXJyYXlCdWZmZXJWaWV3Ojp2aXNpdENo
aWxkcmVuKEpTCiAgICAgfQogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNBcnJheUJ1ZmZl
clZpZXcpOworCiBib29sIEpTQXJyYXlCdWZmZXJWaWV3OjpwdXQoCiAgICAgSlNDZWxsKiBjZWxs
LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1l
LCBKU1ZhbHVlIHZhbHVlLAogICAgIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuaAkocmV2
aXNpb24gMjcyNzEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1
ZmZlclZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAtMTcyLDcgKzE3Miw3IEBAIHByb3RlY3RlZDoK
ICAgICAKICAgICBzdGF0aWMgYm9vbCBwdXQoSlNDZWxsKiwgSlNHbG9iYWxPYmplY3QqLCBQcm9w
ZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOwogCi0gICAgc3RhdGljIHZvaWQg
dmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRf
Q0hJTERSRU47CiAgICAgCiBwdWJsaWM6CiAgICAgVHlwZWRBcnJheU1vZGUgbW9kZSgpIGNvbnN0
IHsgcmV0dXJuIG1fbW9kZTsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNBcnJheUl0ZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0FycmF5SXRlcmF0b3IuY3BwCShyZXZpc2lvbiAyNzI3MTApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5SXRlcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC02OCwxMSArNjgsMTQgQEAgdm9pZCBKU0FycmF5SXRlcmF0b3I6OmZpbmlzaENyZWF0aW9u
KFZNJgogICAgICAgICBCYXNlOjppbnRlcm5hbEZpZWxkKGluZGV4KS5zZXQodm0sIHRoaXMsIHZh
bHVlc1tpbmRleF0pOwogfQogCi12b2lkIEpTQXJyYXlJdGVyYXRvcjo6dmlzaXRDaGlsZHJlbihK
U0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlz
aXRvcj4KK3ZvaWQgSlNBcnJheUl0ZXJhdG9yOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNl
bGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxK
U0FycmF5SXRlcmF0b3IqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRo
aXNPYmplY3QsIGluZm8oKSk7CiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2
aXNpdG9yKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTQXJyYXlJdGVyYXRvcik7CisK
IH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNBcnJheUl0ZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNBcnJheUl0ZXJhdG9yLmgJKHJldmlzaW9uIDI3MjcxMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlJdGVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC03
OCw3ICs3OCw3IEBAIHB1YmxpYzoKIAogICAgIERFQ0xBUkVfSU5GTzsKIAotICAgIHN0YXRpYyB2
b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJ
U0lUX0NISUxEUkVOOwogCiBwcml2YXRlOgogICAgIEpTQXJyYXlJdGVyYXRvcihWTSYsIFN0cnVj
dHVyZSopOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBc3luY0dlbmVy
YXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNB
c3luY0dlbmVyYXRvci5jcHAJKHJldmlzaW9uIDI3MjcxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTQXN5bmNHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OSwx
MSArNTksMTQgQEAgdm9pZCBKU0FzeW5jR2VuZXJhdG9yOjpmaW5pc2hDcmVhdGlvbihWTQogICAg
ICAgICBpbnRlcm5hbEZpZWxkKGluZGV4KS5zZXQodm0sIHRoaXMsIHZhbHVlc1tpbmRleF0pOwog
fQogCi12b2lkIEpTQXN5bmNHZW5lcmF0b3I6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBT
bG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpT
QXN5bmNHZW5lcmF0b3I6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYg
dmlzaXRvcikKIHsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQXN5bmNHZW5lcmF0
b3IqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGlu
Zm8oKSk7CiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKIH0K
IAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTQXN5bmNHZW5lcmF0b3IpOworCiB9IC8vIG5hbWVz
cGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXN5bmNHZW5l
cmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Fz
eW5jR2VuZXJhdG9yLmgJKHJldmlzaW9uIDI3MjcxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQXN5bmNHZW5lcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtOTUsNyArOTUs
NyBAQCBwdWJsaWM6CiAKICAgICBERUNMQVJFX0VYUE9SVF9JTkZPOwogCi0gICAgc3RhdGljIHZv
aWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklT
SVRfQ0hJTERSRU47CiAKIHByaXZhdGU6CiAgICAgSlNBc3luY0dlbmVyYXRvcihWTSYsIFN0cnVj
dHVyZSopOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCaWdJbnQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQmlnSW50LmNw
cAkocmV2aXNpb24gMjcyNzEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNC
aWdJbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Nyw3ICs2Nyw4IEBAIEpTQmlnSW50OjpKU0Jp
Z0ludChWTSYgdm0sIFN0cnVjdHVyZSogc3QKICAgICAsIG1fZGF0YSh2bSwgdGhpcywgZGF0YSwg
bGVuZ3RoKQogeyB9CiAKLXZvaWQgSlNCaWdJbnQ6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxs
LCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lk
IEpTQmlnSW50Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0
b3IpCiB7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0JpZ0ludCo+KGNlbGwpOwog
ICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTc2
LDYgKzc3LDggQEAgdm9pZCBKU0JpZ0ludDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbAogICAg
ICAgICB2aXNpdG9yLm1hcmtBdXhpbGlhcnkoZGF0YSk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElM
RFJFTihKU0JpZ0ludCk7CisKIHZvaWQgSlNCaWdJbnQ6OmluaXRpYWxpemUoSW5pdGlhbGl6YXRp
b25UeXBlIGluaXRUeXBlKQogewogICAgIGlmIChpbml0VHlwZSA9PSBJbml0aWFsaXphdGlvblR5
cGU6OldpdGhaZXJvKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCaWdJ
bnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JpZ0lu
dC5oCShyZXZpc2lvbiAyNzI3MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0JpZ0ludC5oCSh3b3JraW5nIGNvcHkpCkBAIC01MCw3ICs1MCw3IEBAIHB1YmxpYzoKICAgICBz
dGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJl
RmxhZ3MgfCBTdHJ1Y3R1cmVJc0ltbW9ydGFsIHwgT3ZlcnJpZGVzVG9UaGlzOwogICAgIGZyaWVu
ZCBjbGFzcyBDYWNoZWRCaWdJbnQ7CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpT
Q2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAg
IHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2Vzcz4KICAgICBzdGF0aWMg
SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTQm91bmRGdW5jdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCb3VuZEZ1bmN0aW9uLmNwcAkocmV2aXNpb24gMjcyNzEw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCb3VuZEZ1bmN0aW9uLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjQ5LDcgKzI0OSw4IEBAIHZvaWQgSlNCb3VuZEZ1bmN0aW9uOjpm
aW5pc2hDcmVhdGlvbihWTSYKICAgICBBU1NFUlQoaW5oZXJpdHModm0sIGluZm8oKSkpOwogfQog
Ci12b2lkIEpTQm91bmRGdW5jdGlvbjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNCb3Vu
ZEZ1bmN0aW9uOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0
b3IpCiB7CiAgICAgSlNCb3VuZEZ1bmN0aW9uKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQm91bmRG
dW5jdGlvbio+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVj
dCwgaW5mbygpKTsKQEAgLTI2MSw0ICsyNjIsNiBAQCB2b2lkIEpTQm91bmRGdW5jdGlvbjo6dmlz
aXRDaGlsZHJlbihKU0NlCiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9uYW1lTWF5
QmVOdWxsKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTQm91bmRGdW5jdGlvbik7CisK
IH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNCb3VuZEZ1bmN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNCb3VuZEZ1bmN0aW9uLmgJKHJldmlzaW9uIDI3MjcxMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTQm91bmRGdW5jdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC04
NCw3ICs4NCw3IEBAIHByaXZhdGU6CiAgICAgSlNCb3VuZEZ1bmN0aW9uKFZNJiwgTmF0aXZlRXhl
Y3V0YWJsZSosIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKiwgSlNPYmplY3QqIHRhcmdldEZ1
bmN0aW9uLCBKU1ZhbHVlIGJvdW5kVGhpcywgSlNJbW11dGFibGVCdXR0ZXJmbHkqIGJvdW5kQXJn
cywgSlNTdHJpbmcqIG5hbWVNYXlCZU51bGwsIGRvdWJsZSBsZW5ndGgpOwogCiAgICAgdm9pZCBm
aW5pc2hDcmVhdGlvbihWTSYpOwotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgV3Jp
dGVCYXJyaWVyPEpTT2JqZWN0PiBtX3RhcmdldEZ1bmN0aW9uOwogICAgIFdyaXRlQmFycmllcjxV
bmtub3duPiBtX2JvdW5kVGhpczsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTQ2FsbGVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0NhbGxlZS5jcHAJKHJldmlzaW9uIDI3MjcxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQ2FsbGVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTAsNyArNTAsOCBAQCB2
b2lkIEpTQ2FsbGVlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCiAgICAgQVNTRVJUKGluaGVyaXRz
KHZtLCBpbmZvKCkpKTsKIH0KIAotdm9pZCBKU0NhbGxlZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwq
IGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4K
K3ZvaWQgSlNDYWxsZWU6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYg
dmlzaXRvcikKIHsKICAgICBKU0NhbGxlZSogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0NhbGxlZSo+
KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygp
KTsKQEAgLTU5LDQgKzYwLDYgQEAgdm9pZCBKU0NhbGxlZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwq
IGNlbAogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fc2NvcGUpOwogfQogCitERUZJ
TkVfVklTSVRfQ0hJTERSRU4oSlNDYWxsZWUpOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2FsbGVlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDYWxsZWUuaAkocmV2aXNpb24gMjcyNzEw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDYWxsZWUuaAkod29ya2luZyBj
b3B5KQpAQCAtMTAwLDcgKzEwMCw3IEBAIHByb3RlY3RlZDoKICAgICB2b2lkIGZpbmlzaENyZWF0
aW9uKFZNJik7CiAgICAgdXNpbmcgQmFzZTo6ZmluaXNoQ3JlYXRpb247CiAKLSAgICBzdGF0aWMg
dm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9W
SVNJVF9DSElMRFJFTjsKIAogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRz
RXh0cmFjdG9yOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgJKHJl
dmlzaW9uIDI3MjcxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5
OTktMjAwMSBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQogICogIENvcHlyaWdodCAoQykg
MjAwMSBQZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQotICogIENvcHlyaWdodCAoQykgMjAwMy0y
MDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIw
MDMtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAq
ICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYwpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIkpTTG9jay5oIgogI2luY2x1ZGUgIkpT
VHlwZUluZm8uaCIKICNpbmNsdWRlICJTbG90VmlzaXRvci5oIgorI2luY2x1ZGUgIlNsb3RWaXNp
dG9yTWFjcm9zLmgiCiAjaW5jbHVkZSAiU3Vic3BhY2VBY2Nlc3MuaCIKICNpbmNsdWRlICJUeXBl
ZEFycmF5VHlwZS5oIgogI2luY2x1ZGUgIldyaXRlQmFycmllci5oIgpAQCAtMTY3LDggKzE2OCw4
IEBAIHB1YmxpYzoKICAgICBzaXplX3QgZXN0aW1hdGVkU2l6ZUluQnl0ZXMoVk0mKSBjb25zdDsK
ICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgc2l6ZV90IGVzdGltYXRlZFNpemUoSlNDZWxs
KiwgVk0mKTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZp
c2l0b3ImKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdE91dHB1dENvbnN0cmFpbnRzKEpTQ2VsbCos
IFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9JTkxJTkVfVklTSVRfQ0hJTERSRU47CisgICAg
c3RhdGljIHZvaWQgdmlzaXRPdXRwdXRDb25zdHJhaW50cyhKU0NlbGwqLCBBYnN0cmFjdFNsb3RW
aXNpdG9yJik7CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBhbmFseXplSGVh
cChKU0NlbGwqLCBIZWFwQW5hbHl6ZXImKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNDZWxsSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTQ2VsbElubGluZXMuaAkocmV2aXNpb24gMjcyNzEwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yNSw2ICsyNSw3IEBACiAKICNwcmFnbWEgb25jZQogCisjaW5jbHVkZSAiQWJzdHJhY3RTbG90
VmlzaXRvcklubGluZXMuaCIKICNpbmNsdWRlICJBbGxvY2F0b3JGb3JNb2RlLmgiCiAjaW5jbHVk
ZSAiQWxsb2NhdG9ySW5saW5lcy5oIgogI2luY2x1ZGUgIkNvbXBsZXRlU3Vic3BhY2VJbmxpbmVz
LmgiCkBAIC0xNDEsMTIgKzE0MiwxNSBAQCBBTFdBWVNfSU5MSU5FIFN0cnVjdHVyZSogSlNDZWxs
OjpzdHJ1Y3R1CiAgICAgcmV0dXJuIHZtLmdldFN0cnVjdHVyZShtX3N0cnVjdHVyZUlEKTsKIH0K
IAotaW5saW5lIHZvaWQgSlNDZWxsOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZp
c2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgoraW5saW5lIHZvaWQg
SlNDZWxsOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3Ip
CiB7CiAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZChjZWxsLT5zdHJ1Y3R1cmUodmlzaXRv
ci52bSgpKSk7CiB9CiAKLWlubGluZSB2b2lkIEpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50
cyhKU0NlbGwqLCBTbG90VmlzaXRvciYpCitERUZJTkVfSU5MSU5FX1ZJU0lUX0NISUxEUkVOKEpT
Q2VsbCk7CisKK2lubGluZSB2b2lkIEpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50cyhKU0Nl
bGwqLCBBYnN0cmFjdFNsb3RWaXNpdG9yJikKIHsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNDdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbi5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDdXN0b21HZXR0ZXJTZXR0ZXJG
dW5jdGlvbi5jcHAJKHJldmlzaW9uIDI3MjcxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTQ3VzdG9tR2V0dGVyU2V0dGVyRnVuY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC04NSw3ICs4NSw4IEBAIEpTQ3VzdG9tR2V0dGVyU2V0dGVyRnVuY3Rpb24qIEpTQ3VzdG9tR2UK
ICAgICByZXR1cm4gZnVuY3Rpb247CiB9CiAKLXZvaWQgSlNDdXN0b21HZXR0ZXJTZXR0ZXJGdW5j
dGlvbjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQor
dGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNDdXN0b21HZXR0ZXJTZXR0ZXJGdW5j
dGlvbjo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQog
ewogICAgIEpTQ3VzdG9tR2V0dGVyU2V0dGVyRnVuY3Rpb24qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8
SlNDdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbio+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpF
Q1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTk0LDYgKzk1LDggQEAgdm9pZCBK
U0N1c3RvbUdldHRlclNldHRlckZ1bmN0aW9uOjp2aXNpdAogICAgIHZpc2l0b3IuYXBwZW5kKHRo
aXNPYmplY3QtPm1fZ2V0dGVyU2V0dGVyKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpT
Q3VzdG9tR2V0dGVyU2V0dGVyRnVuY3Rpb24pOworCiB2b2lkIEpTQ3VzdG9tR2V0dGVyU2V0dGVy
RnVuY3Rpb246OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgTmF0aXZlRXhlY3V0YWJsZSogZXhlY3V0
YWJsZSwgQ3VzdG9tR2V0dGVyU2V0dGVyKiBnZXR0ZXJTZXR0ZXIsIGNvbnN0IFN0cmluZyYgbmFt
ZSkKIHsKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSwgZXhlY3V0YWJsZSwgaXNTZXR0ZXIo
KSwgbmFtZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0N1c3RvbUdl
dHRlclNldHRlckZ1bmN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNDdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbi5oCShyZXZpc2lvbiAyNzI3MTAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0N1c3RvbUdldHRlclNldHRlckZ1
bmN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTYzLDcgKzYzLDcgQEAgcHVibGljOgogcHJpdmF0
ZToKICAgICBKU0N1c3RvbUdldHRlclNldHRlckZ1bmN0aW9uKFZNJiwgTmF0aXZlRXhlY3V0YWJs
ZSosIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKiwgVHlwZSwgY29uc3QgUHJvcGVydHlOYW1l
Jik7CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIE5hdGl2ZUV4ZWN1dGFibGUqLCBDdXN0
b21HZXR0ZXJTZXR0ZXIqLCBjb25zdCBTdHJpbmcmKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENo
aWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJF
TjsKIAogICAgIFdyaXRlQmFycmllcjxDdXN0b21HZXR0ZXJTZXR0ZXI+IG1fZ2V0dGVyU2V0dGVy
OwogICAgIFR5cGUgbV90eXBlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNGaW5hbGl6YXRpb25SZWdpc3RyeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNGaW5hbGl6YXRpb25SZWdpc3RyeS5jcHAJKHJldmlzaW9uIDI3Mjcx
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRmluYWxpemF0aW9uUmVnaXN0
cnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSAiY29uZmln
LmgiCiAjaW5jbHVkZSAiSlNGaW5hbGl6YXRpb25SZWdpc3RyeS5oIgogCisjaW5jbHVkZSAiQWJz
dHJhY3RTbG90VmlzaXRvci5oIgogI2luY2x1ZGUgIkRlZmVycmVkV29ya1RpbWVyLmgiCiAjaW5j
bHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTSW50ZXJuYWxGaWVsZE9iamVjdEltcGxJ
bmxpbmVzLmgiCkBAIC02MCw3ICs2MSw4IEBAIHZvaWQgSlNGaW5hbGl6YXRpb25SZWdpc3RyeTo6
ZmluaXNoQ3JlYXQKICAgICBnbG9iYWxPYmplY3QtPmdsb2JhbE9iamVjdE1ldGhvZFRhYmxlKCkt
PmN1cnJlbnRTY3JpcHRFeGVjdXRpb25Pd25lcihnbG9iYWxPYmplY3QpOwogfQogCi12b2lkIEpT
RmluYWxpemF0aW9uUmVnaXN0cnk6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90Vmlz
aXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTRmluYWxp
emF0aW9uUmVnaXN0cnk6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYg
dmlzaXRvcikKIHsKICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKGNlbGwsIHZpc2l0b3IpOwogCkBA
IC04MCwxMyArODIsMTUgQEAgdm9pZCBKU0ZpbmFsaXphdGlvblJlZ2lzdHJ5Ojp2aXNpdENoaWxk
cgogICAgIGZvciAoYXV0byYgaG9sZGluZ3MgOiB0aGlzT2JqZWN0LT5tX25vVW5yZWdpc3RyYXRp
b25EZWFkKQogICAgICAgICB2aXNpdG9yLmFwcGVuZChob2xkaW5ncyk7CiAKLSAgICBzaXplX3Qg
dG90YWxCdWZmZXJTaXplc0luQnl0ZXMgPSB0aGlzT2JqZWN0LT5tX2RlYWRSZWdpc3RyYXRpb25z
LmNhcGFjaXR5KCkgKiBzaXplb2YoZGVjbHR5cGUodGhpc09iamVjdC0+bV9kZWFkUmVnaXN0cmF0
aW9ucyk6OktleVZhbHVlUGFpclR5cGUpOwotICAgIHRvdGFsQnVmZmVyU2l6ZXNJbkJ5dGVzICs9
IHRoaXNPYmplY3QtPm1fbGl2ZVJlZ2lzdHJhdGlvbnMuY2FwYWNpdHkoKSAqIHNpemVvZihkZWNs
dHlwZSh0aGlzT2JqZWN0LT5tX2RlYWRSZWdpc3RyYXRpb25zKTo6S2V5VmFsdWVQYWlyVHlwZSk7
CisgICAgc2l6ZV90IHRvdGFsQnVmZmVyU2l6ZXNJbkJ5dGVzID0gdGhpc09iamVjdC0+bV9kZWFk
UmVnaXN0cmF0aW9ucy5jYXBhY2l0eSgpICogc2l6ZW9mKHR5cGVuYW1lIGRlY2x0eXBlKHRoaXNP
YmplY3QtPm1fZGVhZFJlZ2lzdHJhdGlvbnMpOjpLZXlWYWx1ZVBhaXJUeXBlKTsKKyAgICB0b3Rh
bEJ1ZmZlclNpemVzSW5CeXRlcyArPSB0aGlzT2JqZWN0LT5tX2xpdmVSZWdpc3RyYXRpb25zLmNh
cGFjaXR5KCkgKiBzaXplb2YodHlwZW5hbWUgZGVjbHR5cGUodGhpc09iamVjdC0+bV9kZWFkUmVn
aXN0cmF0aW9ucyk6OktleVZhbHVlUGFpclR5cGUpOwogICAgIHRvdGFsQnVmZmVyU2l6ZXNJbkJ5
dGVzICs9IHRoaXNPYmplY3QtPm1fbm9VbnJlZ2lzdHJhdGlvbkxpdmUuY2FwYWNpdHkoKSAqIHNp
emVvZihkZWNsdHlwZSh0aGlzT2JqZWN0LT5tX25vVW5yZWdpc3RyYXRpb25MaXZlLnRha2VMYXN0
KCkpKTsKICAgICB0b3RhbEJ1ZmZlclNpemVzSW5CeXRlcyArPSB0aGlzT2JqZWN0LT5tX25vVW5y
ZWdpc3RyYXRpb25EZWFkLmNhcGFjaXR5KCkgKiBzaXplb2YoZGVjbHR5cGUodGhpc09iamVjdC0+
bV9ub1VucmVnaXN0cmF0aW9uTGl2ZS50YWtlTGFzdCgpKSk7CiAgICAgdmlzaXRvci52bSgpLmhl
YXAucmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKHRvdGFsQnVmZmVyU2l6ZXNJbkJ5dGVzKTsKIH0K
IAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTRmluYWxpemF0aW9uUmVnaXN0cnkpOworCiB2b2lk
IEpTRmluYWxpemF0aW9uUmVnaXN0cnk6OmRlc3Ryb3koSlNDZWxsKiB0YWJsZSkKIHsKICAgICBz
dGF0aWNfY2FzdDxKU0ZpbmFsaXphdGlvblJlZ2lzdHJ5Kj4odGFibGUpLT5+SlNGaW5hbGl6YXRp
b25SZWdpc3RyeSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGaW5h
bGl6YXRpb25SZWdpc3RyeS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTRmluYWxpemF0aW9uUmVnaXN0cnkuaAkocmV2aXNpb24gMjcyNzEwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGaW5hbGl6YXRpb25SZWdpc3RyeS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC03MCw3ICs3MCw3IEBAIHB1YmxpYzoKICAgICBERUNMQVJFX0VYUE9SVF9J
TkZPOwogCiAgICAgdm9pZCBmaW5hbGl6ZVVuY29uZGl0aW9uYWxseShWTSYpOwotICAgIHN0YXRp
YyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJF
X1ZJU0lUX0NISUxEUkVOOwogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CiAgICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOwogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmNwcAkocmV2aXNpb24g
MjcyNzEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI1Miw3ICsyNTIsOCBAQCBjb25zdCBTb3VyY2VDb2RlKiBKU0Z1
bmN0aW9uOjpzb3VyY2VDb2RlCiAgICAgcmV0dXJuICZqc0V4ZWN1dGFibGUoKS0+c291cmNlKCk7
CiB9CiAgICAgCi12b2lkIEpTRnVuY3Rpb246OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBT
bG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpT
RnVuY3Rpb246OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRv
cikKIHsKICAgICBKU0Z1bmN0aW9uKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTRnVuY3Rpb24qPihj
ZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7
CkBAIC0yNjEsNiArMjYyLDggQEAgdm9pZCBKU0Z1bmN0aW9uOjp2aXNpdENoaWxkcmVuKEpTQ2Vs
bCogYwogICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQoYml0d2lzZV9jYXN0PEpTQ2VsbCo+
KGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KHRoaXNPYmplY3QtPm1fZXhlY3V0YWJsZU9yUmFyZURh
dGEpICYgfnJhcmVEYXRhVGFnKSk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU0Z1bmN0
aW9uKTsKKwogQ2FsbERhdGEgSlNGdW5jdGlvbjo6Z2V0Q2FsbERhdGEoSlNDZWxsKiBjZWxsKQog
ewogICAgIC8vIEtlZXAgdGhpcyBmdW5jdGlvbiBPSyBmb3IgaW52b2NhdGlvbiBmcm9tIGNvbmN1
cnJlbnQgY29tcGlsZXJzLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNG
dW5jdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
RnVuY3Rpb24uaAkocmV2aXNpb24gMjcyNzEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNGdW5jdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xODAsNyArMTgwLDcgQEAgcHJv
dGVjdGVkOgogCiAgICAgc3RhdGljIGJvb2wgZGVsZXRlUHJvcGVydHkoSlNDZWxsKiwgSlNHbG9i
YWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIERlbGV0ZVByb3BlcnR5U2xvdCYpOwogCi0gICAgc3Rh
dGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xB
UkVfVklTSVRfQ0hJTERSRU47CiAKIHByaXZhdGU6CiAgICAgc3RhdGljIEpTRnVuY3Rpb24qIGNy
ZWF0ZUltcGwoVk0mIHZtLCBGdW5jdGlvbkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUsIEpTU2NvcGUq
IHNjb3BlLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTR2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0dlbmVyYXRvci5jcHAJKHJldmlzaW9uIDI3MjcxMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNTksMTEgKzU5LDE0IEBAIHZvaWQgSlNHZW5lcmF0b3I6OmZpbmlzaENyZWF0aW9uKFZNJiB2
bSkKICAgICAgICAgaW50ZXJuYWxGaWVsZChpbmRleCkuc2V0KHZtLCB0aGlzLCB2YWx1ZXNbaW5k
ZXhdKTsKIH0KIAotdm9pZCBKU0dlbmVyYXRvcjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGws
IFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQg
SlNHZW5lcmF0b3I6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlz
aXRvcikKIHsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTR2VuZXJhdG9yKj4oY2Vs
bCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwog
ICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CiB9CiAKK0RFRklO
RV9WSVNJVF9DSElMRFJFTihKU0dlbmVyYXRvcik7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmF0b3IuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyYXRvci5oCShyZXZpc2lv
biAyNzI3MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyYXRvci5o
CSh3b3JraW5nIGNvcHkpCkBAIC05NCw3ICs5NCw3IEBAIHB1YmxpYzoKIAogICAgIERFQ0xBUkVf
RVhQT1JUX0lORk87CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNs
b3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogcHJpdmF0ZToKICAg
ICBKU0dlbmVyYXRvcihWTSYsIFN0cnVjdHVyZSopOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXcuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlldy5oCShyZXZp
c2lvbiAyNzI3MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNU
eXBlZEFycmF5Vmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMTMsNyArMzEzLDcgQEAgcHJpdmF0
ZToKICAgICBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgSlNHbG9i
YWxPYmplY3QqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIERvbnRFbnVtUHJvcGVydGllc01vZGUpOwog
CiAgICAgc3RhdGljIHNpemVfdCBlc3RpbWF0ZWRTaXplKEpTQ2VsbCosIFZNJik7Ci0gICAgc3Rh
dGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xB
UkVfVEVNUExBVEVfVklTSVRfQ0hJTERSRU47CiAKICAgICAvLyBSZXR1cm5zIHRydWUgaWYgc3Vj
Y2Vzc2Z1bCwgYW5kIGZhbHNlIG9uIGVycm9yOyBpdCB3aWxsIHRocm93IG9uIGVycm9yLgogICAg
IHRlbXBsYXRlPHR5cGVuYW1lIE90aGVyQWRhcHRvcj4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3
SW5saW5lcy5oCShyZXZpc2lvbiAyNzI3MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAt
NTE3LDcgKzUxNyw4IEBAIHNpemVfdCBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjoK
IH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KLXZvaWQgSlNHZW5lcmljVHlwZWRBcnJh
eVZpZXc8QWRhcHRvcj46OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYg
dmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTR2VuZXJpY1R5cGVk
QXJyYXlWaWV3PEFkYXB0b3I+Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0
b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcqIHRoaXNPYmplY3Qg
PSBqc0Nhc3Q8SlNHZW5lcmljVHlwZWRBcnJheVZpZXcqPihjZWxsKTsKICAgICBBU1NFUlRfR0Nf
T0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC01NTUsNCArNTU2LDYgQEAg
dm9pZCBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6dgogICAgIH0KIH0KIAorREVG
SU5FX1RFTVBMQVRFX1ZJU0lUX0NISUxEUkVOKHRlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+LCBK
U0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPik7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0
LmNwcAkocmV2aXNpb24gMjcyNzEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNHbG9iYWxPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODkyLDcgKzE4OTIsOCBAQCB2
b2lkIEpTR2xvYmFsT2JqZWN0OjpyZXNldFByb3RvdHlwZShWTSYgCiAgICAgc2V0R2xvYmFsVGhp
cyh2bSwgSlNQcm94eTo6Y3JlYXRlKHZtLCBKU1Byb3h5OjpjcmVhdGVTdHJ1Y3R1cmUodm0sIHRo
aXMsIHByb3RvdHlwZSwgUHVyZUZvcndhcmRpbmdQcm94eVR5cGUpLCB0aGlzKSk7CiB9CiAKLXZv
aWQgSlNHbG9iYWxPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRv
ciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTR2xvYmFsT2Jq
ZWN0Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7
IAogICAgIEpTR2xvYmFsT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTR2xvYmFsT2JqZWN0
Kj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZv
KCkpOwpAQCAtMjA2MCw2ICsyMDYxLDggQEAgdm9pZCBKU0dsb2JhbE9iamVjdDo6dmlzaXRDaGls
ZHJlbihKU0NlbAogICAgIHRoaXNPYmplY3QtPm1fcmVnRXhwR2xvYmFsRGF0YS52aXNpdEFnZ3Jl
Z2F0ZSh2aXNpdG9yKTsKIH0KIAorREVGSU5FX0VYUE9SVF9WSVNJVF9DSElMRFJFTihKU0dsb2Jh
bE9iamVjdCk7CisKIENhbGxGcmFtZSogSlNHbG9iYWxPYmplY3Q6OmRlcHJlY2F0ZWRDYWxsRnJh
bWVGb3JEZWJ1Z2dlcigpCiB7CiAgICAgcmV0dXJuIENhbGxGcmFtZTo6Y3JlYXRlKG1fZGVwcmVj
YXRlZENhbGxGcmFtZUZvckRlYnVnZ2VyKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTR2xvYmFsT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAkocmV2aXNpb24gMjcyNzEwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAkod29ya2luZyBjb3B5KQpA
QCAtNjA5LDcgKzYwOSw3IEBAIHB1YmxpYzoKICAgICBKU19FWFBPUlRfUFJJVkFURSB+SlNHbG9i
YWxPYmplY3QoKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBkZXN0cm95KEpT
Q2VsbCopOwogCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJl
bihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfRVhQT1JUX1ZJU0lUX0NISUxE
UkVOOwogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlT
bG90KEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xv
dCYpOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBib29sIHB1dChKU0NlbGwqLCBKU0ds
b2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgUHV0UHJvcGVydHlTbG90Jik7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ltbXV0YWJsZUJ1dHRlcmZseS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbW11dGFi
bGVCdXR0ZXJmbHkuY3BwCShyZXZpc2lvbiAyNzI3MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0ltbXV0YWJsZUJ1dHRlcmZseS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMy
LDcgKzMyLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAKIGNvbnN0IENsYXNzSW5mbyBKU0ltbXV0YWJs
ZUJ1dHRlcmZseTo6c19pbmZvID0geyAiSW1tdXRhYmxlIEJ1dHRlcmZseSIsIG51bGxwdHIsIG51
bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNJbW11dGFibGVCdXR0ZXJmbHkp
IH07CiAKLXZvaWQgSlNJbW11dGFibGVCdXR0ZXJmbHk6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBj
ZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2
b2lkIEpTSW1tdXRhYmxlQnV0dGVyZmx5Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGws
IFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjZWxs
LCBpbmZvKCkpOwogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4oY2VsbCwgdmlzaXRvcik7CkBAIC00
NSw2ICs0Niw4IEBAIHZvaWQgSlNJbW11dGFibGVCdXR0ZXJmbHk6OnZpc2l0Q2hpbGRyZW4KICAg
ICB2aXNpdG9yLmFwcGVuZFZhbHVlc0hpZGRlbihidXR0ZXJmbHktPmNvbnRpZ3VvdXMoKS5kYXRh
KCksIGJ1dHRlcmZseS0+cHVibGljTGVuZ3RoKCkpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERS
RU4oSlNJbW11dGFibGVCdXR0ZXJmbHkpOworCiB2b2lkIEpTSW1tdXRhYmxlQnV0dGVyZmx5Ojpj
b3B5VG9Bcmd1bWVudHMoSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlKiBmaXJzdEVsZW1lbnREZXN0
LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKIHsKICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTSW1tdXRhYmxlQnV0dGVyZmx5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNJbW11dGFibGVCdXR0ZXJmbHkuaAkocmV2aXNpb24gMjcyNzEw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbW11dGFibGVCdXR0ZXJmbHku
aAkod29ya2luZyBjb3B5KQpAQCAtMTQ1LDcgKzE0NSw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0
dXJuIGpzRG91YmxlTnVtYmVyKHZhbHVlKTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNp
dENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElM
RFJFTjsKIAogICAgIHZvaWQgY29weVRvQXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1
ZSogZmlyc3RFbGVtZW50RGVzdCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOwog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ludGVybmFsRmllbGRPYmpl
Y3RJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJ
bnRlcm5hbEZpZWxkT2JqZWN0SW1wbC5oCShyZXZpc2lvbiAyNzI3MTApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0ludGVybmFsRmllbGRPYmplY3RJbXBsLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTY2LDcgKzY2LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zm
c2V0T2ZJbnRlcm5hbEZpZWxkKHVuc2lnbmVkIGluZGV4KSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VU
T0YoSlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbCwgbV9pbnRlcm5hbEZpZWxkcykgKyBpbmRleCAq
IHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pOyB9CiAKIHByb3RlY3RlZDoKLSAgICBzdGF0
aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFS
RV9URU1QTEFURV9WSVNJVF9DSElMRFJFTjsKIAogICAgIEpTSW50ZXJuYWxGaWVsZE9iamVjdElt
cGwoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKICAgICAgICAgOiBCYXNlKHZtLCBzdHJ1
Y3R1cmUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ludGVybmFsRmll
bGRPYmplY3RJbXBsSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTSW50ZXJuYWxGaWVsZE9iamVjdEltcGxJbmxpbmVzLmgJKHJldmlzaW9uIDI3
MjcxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTSW50ZXJuYWxGaWVsZE9i
amVjdEltcGxJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDggQEAKIG5hbWVz
cGFjZSBKU0MgewogCiB0ZW1wbGF0ZTx1bnNpZ25lZCBwYXNzZWROdW1iZXJPZkludGVybmFsRmll
bGRzPgotdm9pZCBKU0ludGVybmFsRmllbGRPYmplY3RJbXBsPHBhc3NlZE51bWJlck9mSW50ZXJu
YWxGaWVsZHM+Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0
b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0ludGVybmFsRmllbGRPYmpl
Y3RJbXBsPHBhc3NlZE51bWJlck9mSW50ZXJuYWxGaWVsZHM+Ojp2aXNpdENoaWxkcmVuSW1wbChK
U0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0byogdGhpc09iamVjdCA9
IGpzQ2FzdDxKU0ludGVybmFsRmllbGRPYmplY3RJbXBsKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dD
X09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtMzgsNCArMzksNiBAQCB2
b2lkIEpTSW50ZXJuYWxGaWVsZE9iamVjdEltcGw8cGFzc2VkTnVtCiAgICAgdmlzaXRvci5hcHBl
bmRWYWx1ZXModGhpc09iamVjdC0+bV9pbnRlcm5hbEZpZWxkcywgbnVtYmVyT2ZJbnRlcm5hbEZp
ZWxkcyk7CiB9CiAKK0RFRklORV9URU1QTEFURV9WSVNJVF9DSElMRFJFTih0ZW1wbGF0ZTx1bnNp
Z25lZCBwYXNzZWROdW1iZXJPZkludGVybmFsRmllbGRzPiwgSlNJbnRlcm5hbEZpZWxkT2JqZWN0
SW1wbDxwYXNzZWROdW1iZXJPZkludGVybmFsRmllbGRzPik7CisKIH0gLy8gbmFtZXNwYWNlIEpT
QwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMZXhpY2FsRW52aXJvbm1l
bnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTGV4
aWNhbEVudmlyb25tZW50LmNwcAkocmV2aXNpb24gMjcyNzEwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNMZXhpY2FsRW52aXJvbm1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zNiw3ICszNiw4IEBAIG5hbWVzcGFjZSBKU0MgewogCiBjb25zdCBDbGFzc0luZm8gSlNMZXhp
Y2FsRW52aXJvbm1lbnQ6OnNfaW5mbyA9IHsgIkpTTGV4aWNhbEVudmlyb25tZW50IiwgJkJhc2U6
OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU0xleGljYWxF
bnZpcm9ubWVudCkgfTsKIAotdm9pZCBKU0xleGljYWxFbnZpcm9ubWVudDo6dmlzaXRDaGlsZHJl
bihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUg
VmlzaXRvcj4KK3ZvaWQgSlNMZXhpY2FsRW52aXJvbm1lbnQ6OnZpc2l0Q2hpbGRyZW5JbXBsKEpT
Q2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0g
anNDYXN0PEpTTGV4aWNhbEVudmlyb25tZW50Kj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVD
VF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNDQsNiArNDUsOCBAQCB2b2lkIEpT
TGV4aWNhbEVudmlyb25tZW50Ojp2aXNpdENoaWxkcmVuCiAgICAgdmlzaXRvci5hcHBlbmRWYWx1
ZXNIaWRkZW4odGhpc09iamVjdC0+dmFyaWFibGVzKCksIHRoaXNPYmplY3QtPnN5bWJvbFRhYmxl
KCktPnNjb3BlU2l6ZSgpKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTTGV4aWNhbEVu
dmlyb25tZW50KTsKKwogdm9pZCBKU0xleGljYWxFbnZpcm9ubWVudDo6YW5hbHl6ZUhlYXAoSlND
ZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQogewogICAgIGF1dG8qIHRoaXNPYmpl
Y3QgPSBqc0Nhc3Q8SlNMZXhpY2FsRW52aXJvbm1lbnQqPihjZWxsKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTGV4aWNhbEVudmlyb25tZW50LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMZXhpY2FsRW52aXJvbm1lbnQuaAko
cmV2aXNpb24gMjcyNzEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMZXhp
Y2FsRW52aXJvbm1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMTM0LDcgKzEzNCw3IEBAIHByb3Rl
Y3RlZDoKICAgICAgICAgfQogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4o
SlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogICAg
IHN0YXRpYyB2b2lkIGFuYWx5emVIZWFwKEpTQ2VsbCosIEhlYXBBbmFseXplciYpOwogfTsKIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNYXBJdGVyYXRvci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNYXBJdGVyYXRvci5j
cHAJKHJldmlzaW9uIDI3MjcxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
TWFwSXRlcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NywxMyArNTcsMTYgQEAgdm9pZCBK
U01hcEl0ZXJhdG9yOjpmaW5pc2hDcmVhdGlvbihWTSYgdgogICAgICAgICBCYXNlOjppbnRlcm5h
bEZpZWxkKGluZGV4KS5zZXQodm0sIHRoaXMsIHZhbHVlc1tpbmRleF0pOwogfQogCi12b2lkIEpT
TWFwSXRlcmF0b3I6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlz
aXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTTWFwSXRlcmF0b3I6OnZp
c2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBh
dXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTTWFwSXRlcmF0b3IqPihjZWxsKTsKICAgICBBU1NF
UlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAgICAgQmFzZTo6dmlz
aXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxE
UkVOKEpTTWFwSXRlcmF0b3IpOworCiBKU1ZhbHVlIEpTTWFwSXRlcmF0b3I6OmNyZWF0ZVBhaXIo
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBrZXksIEpTVmFsdWUgdmFsdWUp
CiB7CiAgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgYXJnczsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTTWFwSXRlcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU01hcEl0ZXJhdG9yLmgJKHJldmlzaW9uIDI3MjcxMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTWFwSXRlcmF0b3IuaAkod29ya2luZyBj
b3B5KQpAQCAtMTQyLDcgKzE0Miw3IEBAIHByaXZhdGU6CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUg
dm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIEpTTWFwKiwgSXRlcmF0aW9uS2luZCk7CiAgICAgdm9p
ZCBmaW5pc2hDcmVhdGlvbihWTSYpOwogICAgIEpTVmFsdWUgY3JlYXRlUGFpcihKU0dsb2JhbE9i
amVjdCosIEpTVmFsdWUsIEpTVmFsdWUpOwotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4o
SlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogfTsK
IFNUQVRJQ19BU1NFUlRfSVNfVFJJVklBTExZX0RFU1RSVUNUSUJMRShKU01hcEl0ZXJhdG9yKTsK
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVFbnZpcm9ubWVu
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1
bGVFbnZpcm9ubWVudC5jcHAJKHJldmlzaW9uIDI3MjcxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTTW9kdWxlRW52aXJvbm1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02
NSw3ICs2NSw4IEBAIHZvaWQgSlNNb2R1bGVFbnZpcm9ubWVudDo6ZmluaXNoQ3JlYXRpb24KICAg
ICB0aGlzLT5tb2R1bGVSZWNvcmRTbG90KCkuc2V0KHZtLCB0aGlzLCBtb2R1bGVSZWNvcmQpOwog
fQogCi12b2lkIEpTTW9kdWxlRW52aXJvbm1lbnQ6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxs
LCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lk
IEpTTW9kdWxlRW52aXJvbm1lbnQ6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlz
aXRvciYgdmlzaXRvcikKIHsKICAgICBKU01vZHVsZUVudmlyb25tZW50KiB0aGlzT2JqZWN0ID0g
anNDYXN0PEpTTW9kdWxlRW52aXJvbm1lbnQqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNU
X0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC03NCw2ICs3NSw4IEBAIHZvaWQgSlNN
b2R1bGVFbnZpcm9ubWVudDo6dmlzaXRDaGlsZHJlbigKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlz
T2JqZWN0LT5tb2R1bGVSZWNvcmRTbG90KCkpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4o
SlNNb2R1bGVFbnZpcm9ubWVudCk7CisKIGJvb2wgSlNNb2R1bGVFbnZpcm9ubWVudDo6Z2V0T3du
UHJvcGVydHlTbG90KEpTT2JqZWN0KiBjZWxsLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAg
Vk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNNb2R1bGVFbnZpcm9ubWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlRW52aXJvbm1lbnQuaAkocmV2aXNpb24gMjcyNzEw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVFbnZpcm9ubWVudC5o
CSh3b3JraW5nIGNvcHkpCkBAIC04OSw3ICs4OSw3IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVy
biAqYml0d2lzZV9jYXN0PFdyaXRlQmFycmllckJhc2U8QWJzdHJhY3RNb2R1bGVSZWNvcmQ+Kj4o
Yml0d2lzZV9jYXN0PGNoYXIqPih0aGlzKSArIG9mZnNldE9mTW9kdWxlUmVjb3JkKHN5bWJvbFRh
YmxlKCkpKTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCos
IFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIH07CiAKIGlubGlu
ZSBKU01vZHVsZUVudmlyb25tZW50OjpKU01vZHVsZUVudmlyb25tZW50KFZNJiB2bSwgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUsIEpTU2NvcGUqIGN1cnJlbnRTY29wZSwgU3ltYm9sVGFibGUqIHN5bWJv
bFRhYmxlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVOYW1l
c3BhY2VPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTTW9kdWxlTmFtZXNwYWNlT2JqZWN0LmNwcAkocmV2aXNpb24gMjcyNzEwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC04NSw3ICs4NSw4IEBAIHZvaWQgSlNNb2R1bGVOYW1lc3BhY2VPYmpl
Y3Q6OmRlc3Ryb3koSlMKICAgICB0aGlzT2JqZWN0LT5KU01vZHVsZU5hbWVzcGFjZU9iamVjdDo6
fkpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0KCk7CiB9CiAKLXZvaWQgSlNNb2R1bGVOYW1lc3BhY2VP
YmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikK
K3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0
Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAg
ICAgSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNNb2R1bGVO
YW1lc3BhY2VPYmplY3QqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRo
aXNPYmplY3QsIGluZm8oKSk7CkBAIC05OCw2ICs5OSw4IEBAIHZvaWQgSlNNb2R1bGVOYW1lc3Bh
Y2VPYmplY3Q6OnZpc2l0Q2hpbGQKICAgICB9CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihK
U01vZHVsZU5hbWVzcGFjZU9iamVjdCk7CisKIHN0YXRpYyBKU1ZhbHVlIGdldFZhbHVlKEpTTW9k
dWxlRW52aXJvbm1lbnQqIGVudmlyb25tZW50LCBQcm9wZXJ0eU5hbWUgbG9jYWxOYW1lLCBTY29w
ZU9mZnNldCYgc2NvcGVPZmZzZXQpCiB7CiAgICAgU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlID0g
ZW52aXJvbm1lbnQtPnN5bWJvbFRhYmxlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU01vZHVsZU5hbWVzcGFjZU9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlTmFtZXNwYWNlT2JqZWN0LmgJKHJldmlzaW9u
IDI3MjcxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlTmFtZXNw
YWNlT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTcyLDcgKzcyLDcgQEAgcHVibGljOgogcHJp
dmF0ZToKICAgICBKU19FWFBPUlRfUFJJVkFURSBKU01vZHVsZU5hbWVzcGFjZU9iamVjdChWTSYs
IFN0cnVjdHVyZSopOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZmluaXNoQ3JlYXRpb24o
SlNHbG9iYWxPYmplY3QqLCBBYnN0cmFjdE1vZHVsZVJlY29yZCosIFZlY3RvcjxzdGQ6OnBhaXI8
SWRlbnRpZmllciwgQWJzdHJhY3RNb2R1bGVSZWNvcmQ6OlJlc29sdXRpb24+PiYmKTsKLSAgICBz
dGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVD
TEFSRV9WSVNJVF9DSElMRFJFTjsKICAgICBib29sIGdldE93blByb3BlcnR5U2xvdENvbW1vbihK
U0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CiAKICAgICBzdHJ1
Y3QgRXhwb3J0RW50cnkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNN
b2R1bGVSZWNvcmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTTW9kdWxlUmVjb3JkLmNwcAkocmV2aXNpb24gMjcyNzEwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVSZWNvcmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03
MCw3ICs3MCw4IEBAIHZvaWQgSlNNb2R1bGVSZWNvcmQ6OmZpbmlzaENyZWF0aW9uKEpTR2wKICAg
ICBBU1NFUlQoaW5oZXJpdHModm0sIGluZm8oKSkpOwogfQogCi12b2lkIEpTTW9kdWxlUmVjb3Jk
Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1w
bGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU01vZHVsZVJlY29yZDo6dmlzaXRDaGlsZHJl
bkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTTW9kdWxlUmVj
b3JkKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTTW9kdWxlUmVjb3JkKj4oY2VsbCk7CiAgICAgQVNT
RVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNzgsNiArNzks
OCBAQCB2b2lkIEpTTW9kdWxlUmVjb3JkOjp2aXNpdENoaWxkcmVuKEpTQ2VsCiAgICAgdmlzaXRv
ci5hcHBlbmQodGhpc09iamVjdC0+bV9tb2R1bGVQcm9ncmFtRXhlY3V0YWJsZSk7CiB9CiAKK0RF
RklORV9WSVNJVF9DSElMRFJFTihKU01vZHVsZVJlY29yZCk7CisKIHZvaWQgSlNNb2R1bGVSZWNv
cmQ6OmxpbmsoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBzY3JpcHRGZXRj
aGVyKQogewogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlUmVjb3JkLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVSZWNvcmQuaAkocmV2aXNpb24gMjcy
NzEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVSZWNvcmQuaAko
d29ya2luZyBjb3B5KQpAQCAtNjYsNyArNjYsNyBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBmaW5p
c2hDcmVhdGlvbihKU0dsb2JhbE9iamVjdCosIFZNJik7CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNp
dENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElM
RFJFTjsKIAogICAgIHZvaWQgaW5zdGFudGlhdGVEZWNsYXJhdGlvbnMoSlNHbG9iYWxPYmplY3Qq
LCBNb2R1bGVQcm9ncmFtRXhlY3V0YWJsZSosIEpTVmFsdWUgc2NyaXB0RmV0Y2hlcik7CiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTmF0aXZlU3RkRnVuY3Rpb24uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTmF0aXZlU3Rk
RnVuY3Rpb24uY3BwCShyZXZpc2lvbiAyNzI3MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU05hdGl2ZVN0ZEZ1bmN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEsMTMg
KzQxLDE2IEBAIEpTTmF0aXZlU3RkRnVuY3Rpb246OkpTTmF0aXZlU3RkRnVuY3Rpb24KIHsKIH0K
IAotdm9pZCBKU05hdGl2ZVN0ZEZ1bmN0aW9uOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwg
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBK
U05hdGl2ZVN0ZEZ1bmN0aW9uOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0
b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNOYXRpdmVTdGRGdW5jdGlvbiogdGhpc09iamVjdCA9IGpz
Q2FzdDxKU05hdGl2ZVN0ZEZ1bmN0aW9uKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9J
TkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhp
c09iamVjdCwgdmlzaXRvcik7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU05hdGl2ZVN0
ZEZ1bmN0aW9uKTsKKwogdm9pZCBKU05hdGl2ZVN0ZEZ1bmN0aW9uOjpmaW5pc2hDcmVhdGlvbihW
TSYgdm0sIE5hdGl2ZUV4ZWN1dGFibGUqIGV4ZWN1dGFibGUsIHVuc2lnbmVkIGxlbmd0aCwgY29u
c3QgU3RyaW5nJiBuYW1lKQogewogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtLCBleGVjdXRh
YmxlLCBsZW5ndGgsIG5hbWUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNOYXRpdmVTdGRGdW5jdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTTmF0aXZlU3RkRnVuY3Rpb24uaAkocmV2aXNpb24gMjcyNzEwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNOYXRpdmVTdGRGdW5jdGlvbi5oCSh3b3JraW5n
IGNvcHkpCkBAIC02NSw3ICs2NSw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgSlNOYXRpdmVT
dGRGdW5jdGlvbihWTSYsIE5hdGl2ZUV4ZWN1dGFibGUqLCBKU0dsb2JhbE9iamVjdCosIFN0cnVj
dHVyZSosIE5hdGl2ZVN0ZEZ1bmN0aW9uJiYpOwogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0m
LCBOYXRpdmVFeGVjdXRhYmxlKiwgdW5zaWduZWQgbGVuZ3RoLCBjb25zdCBTdHJpbmcmIG5hbWUp
OwotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsK
KyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgTmF0aXZlU3RkRnVuY3Rpb24gbV9m
dW5jdGlvbjsKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVj
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmpl
Y3QuY3BwCShyZXZpc2lvbiAyNzI3MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU09iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcyLDcgKzcyLDggQEAgY29uc3QgQ2xh
c3NJbmZvIEpTT2JqZWN0OjpzX2luZm8gPSB7ICJPYgogCiBjb25zdCBDbGFzc0luZm8gSlNGaW5h
bE9iamVjdDo6c19pbmZvID0geyAiT2JqZWN0IiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVs
bHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU0ZpbmFsT2JqZWN0KSB9OwogCi1BTFdBWVNfSU5M
SU5FIHZvaWQgSlNPYmplY3Q6Om1hcmtBdXhpbGlhcnlBbmRWaXNpdE91dE9mTGluZVByb3BlcnRp
ZXMoU2xvdFZpc2l0b3ImIHZpc2l0b3IsIEJ1dHRlcmZseSogYnV0dGVyZmx5LCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgbWF4T2Zmc2V0KQordGVtcGxhdGU8dHlwZW5hbWUg
VmlzaXRvcj4KK0FMV0FZU19JTkxJTkUgdm9pZCBKU09iamVjdDo6bWFya0F1eGlsaWFyeUFuZFZp
c2l0T3V0T2ZMaW5lUHJvcGVydGllcyhWaXNpdG9yJiB2aXNpdG9yLCBCdXR0ZXJmbHkqIGJ1dHRl
cmZseSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IG1heE9mZnNldCkKIHsK
ICAgICAvLyBXZSBjYWxsIHRoaXMgd2hlbiB3ZSBmb3VuZCBldmVyeXRoaW5nIHdpdGhvdXQgcmFj
ZXMuCiAgICAgQVNTRVJUKHN0cnVjdHVyZSk7CkBAIC0xMDMsNyArMTA0LDggQEAgQUxXQVlTX0lO
TElORSB2b2lkIEpTT2JqZWN0OjptYXJrQXV4aWxpYQogICAgIHZpc2l0b3IuYXBwZW5kVmFsdWVz
SGlkZGVuKGJ1dHRlcmZseS0+cHJvcGVydHlTdG9yYWdlKCkgLSBvdXRPZkxpbmVTaXplLCBvdXRP
ZkxpbmVTaXplKTsKIH0KIAotQUxXQVlTX0lOTElORSBTdHJ1Y3R1cmUqIEpTT2JqZWN0Ojp2aXNp
dEJ1dHRlcmZseShTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0
b3I+CitBTFdBWVNfSU5MSU5FIFN0cnVjdHVyZSogSlNPYmplY3Q6OnZpc2l0QnV0dGVyZmx5KFZp
c2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IHJhY2VSZWFz
b24gPSAiSlNPYmplY3Q6OnZpc2l0QnV0dGVyZmx5IjsKICAgICBTdHJ1Y3R1cmUqIHJlc3VsdCA9
IHZpc2l0QnV0dGVyZmx5SW1wbCh2aXNpdG9yKTsKQEAgLTExMiw3ICsxMTQsOCBAQCBBTFdBWVNf
SU5MSU5FIFN0cnVjdHVyZSogSlNPYmplY3Q6OnZpc2l0CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0K
IAotQUxXQVlTX0lOTElORSBTdHJ1Y3R1cmUqIEpTT2JqZWN0Ojp2aXNpdEJ1dHRlcmZseUltcGwo
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgorQUxXQVlT
X0lOTElORSBTdHJ1Y3R1cmUqIEpTT2JqZWN0Ojp2aXNpdEJ1dHRlcmZseUltcGwoVmlzaXRvciYg
dmlzaXRvcikKIHsKICAgICBWTSYgdm0gPSB2aXNpdG9yLnZtKCk7CiAgICAgCkBAIC00MTIsMjQg
KzQxNSwyMCBAQCBzaXplX3QgSlNPYmplY3Q6OmVzdGltYXRlZFNpemUoSlNDZWxsKiBjCiAgICAg
cmV0dXJuIEJhc2U6OmVzdGltYXRlZFNpemUoY2VsbCwgdm0pICsgYnV0dGVyZmx5T3V0T2ZMaW5l
U2l6ZTsKIH0KIAotdm9pZCBKU09iamVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNP
YmplY3Q6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikK
IHsKICAgICBKU09iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU09iamVjdCo+KGNlbGwpOwog
ICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKLSNpZiBB
U1NFUlRfRU5BQkxFRAotICAgIGJvb2wgd2FzQ2hlY2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlv
biA9IHZpc2l0b3IubV9pc0NoZWNraW5nRm9yRGVmYXVsdE1hcmtWaW9sYXRpb247Ci0gICAgdmlz
aXRvci5tX2lzQ2hlY2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlvbiA9IGZhbHNlOwotI2VuZGlm
Ci0gICAgCisgICAgdHlwZW5hbWUgVmlzaXRvcjo6RGVmYXVsdE1hcmtpbmdWaW9sYXRpb25Bc3Nl
cnRpb25TY29wZSBhc3NlcnRpb25TY29wZSh2aXNpdG9yKTsKKwogICAgIEpTQ2VsbDo6dmlzaXRD
aGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKLSAgICAKKwogICAgIHRoaXNPYmplY3QtPnZp
c2l0QnV0dGVyZmx5KHZpc2l0b3IpOwotICAgIAotI2lmIEFTU0VSVF9FTkFCTEVECi0gICAgdmlz
aXRvci5tX2lzQ2hlY2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlvbiA9IHdhc0NoZWNraW5nRm9y
RGVmYXVsdE1hcmtWaW9sYXRpb247Ci0jZW5kaWYKIH0KIAorREVGSU5FX0VYUE9SVF9WSVNJVF9D
SElMRFJFTihKU09iamVjdCk7CisKIHZvaWQgSlNPYmplY3Q6OmFuYWx5emVIZWFwKEpTQ2VsbCog
Y2VsbCwgSGVhcEFuYWx5emVyJiBhbmFseXplcikKIHsKICAgICBKU09iamVjdCogdGhpc09iamVj
dCA9IGpzQ2FzdDxKU09iamVjdCo+KGNlbGwpOwpAQCAtNDY4LDE0ICs0NjcsMTIgQEAgdm9pZCBK
U09iamVjdDo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLAogICAgIH0KIH0KIAotdm9pZCBKU0Zp
bmFsT2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0
b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0ZpbmFsT2JqZWN0Ojp2aXNp
dENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNG
aW5hbE9iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0ZpbmFsT2JqZWN0Kj4oY2VsbCk7CiAg
ICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwotI2lmIEFT
U0VSVF9FTkFCTEVECi0gICAgYm9vbCB3YXNDaGVja2luZ0ZvckRlZmF1bHRNYXJrVmlvbGF0aW9u
ID0gdmlzaXRvci5tX2lzQ2hlY2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlvbjsKLSAgICB2aXNp
dG9yLm1faXNDaGVja2luZ0ZvckRlZmF1bHRNYXJrVmlvbGF0aW9uID0gZmFsc2U7Ci0jZW5kaWYK
KyAgICB0eXBlbmFtZSBWaXNpdG9yOjpEZWZhdWx0TWFya2luZ1Zpb2xhdGlvbkFzc2VydGlvblNj
b3BlIGFzc2VydGlvblNjb3BlKHZpc2l0b3IpOwogICAgIAogICAgIEpTQ2VsbDo6dmlzaXRDaGls
ZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKICAgICAKQEAgLTQ4MywxMiArNDgwLDEwIEBAIHZv
aWQgSlNGaW5hbE9iamVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwKICAgICAgICAgaWYgKHVuc2ln
bmVkIHN0b3JhZ2VTaXplID0gc3RydWN0dXJlLT5pbmxpbmVTaXplKCkpCiAgICAgICAgICAgICB2
aXNpdG9yLmFwcGVuZFZhbHVlc0hpZGRlbih0aGlzT2JqZWN0LT5pbmxpbmVTdG9yYWdlKCksIHN0
b3JhZ2VTaXplKTsKICAgICB9Ci0gICAgCi0jaWYgQVNTRVJUX0VOQUJMRUQKLSAgICB2aXNpdG9y
Lm1faXNDaGVja2luZ0ZvckRlZmF1bHRNYXJrVmlvbGF0aW9uID0gd2FzQ2hlY2tpbmdGb3JEZWZh
dWx0TWFya1Zpb2xhdGlvbjsKLSNlbmRpZgogfQogCitERUZJTkVfRVhQT1JUX1ZJU0lUX0NISUxE
UkVOKEpTRmluYWxPYmplY3QpOworCiBTdHJpbmcgSlNPYmplY3Q6OmNsYXNzTmFtZShjb25zdCBK
U09iamVjdCogb2JqZWN0LCBWTSYgdm0pCiB7CiAgICAgY29uc3QgQ2xhc3NJbmZvKiBpbmZvID0g
b2JqZWN0LT5jbGFzc0luZm8odm0pOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU09iamVjdC5oCShyZXZpc2lvbiAyNzI3MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU09iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDgsOCArMTA4LDkgQEAgY2xh
c3MgSlNPYmplY3QgOiBwdWJsaWMgSlNDZWxsIHsKIHB1YmxpYzoKICAgICB1c2luZyBCYXNlID0g
SlNDZWxsOwogCisgICAgREVDTEFSRV9FWFBPUlRfVklTSVRfQ0hJTERSRU47CisKICAgICBKU19F
WFBPUlRfUFJJVkFURSBzdGF0aWMgc2l6ZV90IGVzdGltYXRlZFNpemUoSlNDZWxsKiwgVk0mKTsK
LSAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCos
IFNsb3RWaXNpdG9yJik7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgYW5hbHl6
ZUhlYXAoSlNDZWxsKiwgSGVhcEFuYWx5emVyJik7CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSBz
dGF0aWMgU3RyaW5nIGNsYXNzTmFtZShjb25zdCBKU09iamVjdCosIFZNJik7CkBAIC05ODIsMTEg
Kzk4MywxMSBAQCBwcm90ZWN0ZWQ6CiAgICAgSlNPYmplY3QoVk0mLCBTdHJ1Y3R1cmUqLCBCdXR0
ZXJmbHkqID0gbnVsbHB0cik7CiAgICAgCiAgICAgLy8gVmlzaXRzIHRoZSBidXR0ZXJmbHkgdW5s
ZXNzIHRoZXJlIGlzIGEgcmFjZS4gUmV0dXJucyB0aGUgc3RydWN0dXJlIGlmIHRoZXJlIHdhcyBu
byByYWNlLgotICAgIFN0cnVjdHVyZSogdmlzaXRCdXR0ZXJmbHkoU2xvdFZpc2l0b3ImKTsKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiBTdHJ1Y3R1cmUqIHZpc2l0QnV0dGVyZmx5KFZp
c2l0b3ImKTsKICAgICAKLSAgICBTdHJ1Y3R1cmUqIHZpc2l0QnV0dGVyZmx5SW1wbChTbG90Vmlz
aXRvciYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IFN0cnVjdHVyZSogdmlzaXRC
dXR0ZXJmbHlJbXBsKFZpc2l0b3ImKTsKICAgICAKLSAgICB2b2lkIG1hcmtBdXhpbGlhcnlBbmRW
aXNpdE91dE9mTGluZVByb3BlcnRpZXMoU2xvdFZpc2l0b3ImLCBCdXR0ZXJmbHkqLCBTdHJ1Y3R1
cmUqLCBQcm9wZXJ0eU9mZnNldCBtYXhPZmZzZXQpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZp
c2l0b3I+IHZvaWQgbWFya0F1eGlsaWFyeUFuZFZpc2l0T3V0T2ZMaW5lUHJvcGVydGllcyhWaXNp
dG9yJiwgQnV0dGVyZmx5KiwgU3RydWN0dXJlKiwgUHJvcGVydHlPZmZzZXQgbWF4T2Zmc2V0KTsK
IAogICAgIC8vIENhbGwgdGhpcyBpZiB5b3Uga25vdyB0aGF0IHRoZSBvYmplY3QgaXMgaW4gYSBt
b2RlIHdoZXJlIGl0IGhhcyBhcnJheQogICAgIC8vIHN0b3JhZ2UuIFRoaXMgd2lsbCBhc3NlcnQg
b3RoZXJ3aXNlLgpAQCAtMTE3NCw4ICsxMTc1LDYgQEAgcHJvdGVjdGVkOgogICAgIH0KIH07CiAK
LWNsYXNzIEpTRmluYWxPYmplY3Q7Ci0KIC8vIEpTRmluYWxPYmplY3QgaXMgYSB0eXBlIG9mIEpT
T2JqZWN0IHRoYXQgY29udGFpbnMgc3VmZmljaWVudCBpbnRlcm5hbAogLy8gc3RvcmFnZSB0byBm
dWxseSBtYWtlIHVzZSBvZiB0aGUgY29sbGVjdG9yIGNlbGwgY29udGFpbmluZyBpdC4KIGNsYXNz
IEpTRmluYWxPYmplY3QgZmluYWwgOiBwdWJsaWMgSlNPYmplY3QgewpAQCAtMTIxNCwxNSArMTIx
MywxMyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xv
YmFsT2JqZWN0LCBwcm90b3R5cGUsIHR5cGVJbmZvKCksIGluZm8oKSwgZGVmYXVsdEluZGV4aW5n
VHlwZSwgaW5saW5lQ2FwYWNpdHkpOwogICAgIH0KIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0
YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNM
QVJFX0VYUE9SVF9WSVNJVF9DSElMRFJFTjsKIAogICAgIERFQ0xBUkVfRVhQT1JUX0lORk87CiAK
IHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKIAotICAg
IHZvaWQgdmlzaXRDaGlsZHJlbkNvbW1vbihTbG90VmlzaXRvciYpOwotCiAgICAgZXhwbGljaXQg
SlNGaW5hbE9iamVjdChWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBCdXR0ZXJmbHkqIGJ1
dHRlcmZseSkKICAgICAgICAgOiBKU09iamVjdCh2bSwgc3RydWN0dXJlLCBidXR0ZXJmbHkpCiAg
ICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9taXNlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb21pc2UuY3Bw
CShyZXZpc2lvbiAyNzI3MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1By
b21pc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NywxMyArNjcsMTYgQEAgdm9pZCBKU1Byb21p
c2U6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKICAgICAgICAgQmFzZTo6aW50ZXJuYWxGaWVsZChp
bmRleCkuc2V0KHZtLCB0aGlzLCB2YWx1ZXNbaW5kZXhdKTsKIH0KIAotdm9pZCBKU1Byb21pc2U6
OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBs
YXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTUHJvbWlzZTo6dmlzaXRDaGlsZHJlbkltcGwo
SlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGF1dG8qIHRoaXNPYmplY3Qg
PSBqc0Nhc3Q8SlNQcm9taXNlKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklU
Uyh0aGlzT2JqZWN0LCBpbmZvKCkpOwogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVj
dCwgdmlzaXRvcik7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU1Byb21pc2UpOworCiBh
dXRvIEpTUHJvbWlzZTo6c3RhdHVzKFZNJikgY29uc3QgLT4gU3RhdHVzCiB7CiAgICAgSlNWYWx1
ZSB2YWx1ZSA9IGludGVybmFsRmllbGQoRmllbGQ6OkZsYWdzKS5nZXQoKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvbWlzZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvbWlzZS5oCShyZXZpc2lvbiAyNzI3MTApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb21pc2UuaAkod29ya2luZyBjb3B5
KQpAQCAtOTYsNyArOTYsNyBAQCBwdWJsaWM6CiAgICAgfTsKICAgICBzdGF0aWMgRGVmZXJyZWRE
YXRhIGNyZWF0ZURlZmVycmVkRGF0YShKU0dsb2JhbE9iamVjdCosIEpTUHJvbWlzZUNvbnN0cnVj
dG9yKik7CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNp
dG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogcHJvdGVjdGVkOgogICAgIEpT
UHJvbWlzZShWTSYsIFN0cnVjdHVyZSopOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuY3BwCShyZXZp
c2lvbiAyNzI3MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3BlcnR5
TmFtZUVudW1lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MCw3ICs3MCw4IEBAIHZvaWQg
SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpmaW5pc2hDcmUKICAgICB9CiB9CiAKLXZvaWQgSlNQ
cm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZp
c2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1Byb3Bl
cnR5TmFtZUVudW1lcmF0b3I6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRv
ciYgdmlzaXRvcikKIHsKICAgICBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqIHRoaXNPYmplY3Qg
PSBqc0Nhc3Q8SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dD
X09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtODcsNiArODgsOCBAQCB2
b2lkIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6dmlzaXRDaGlsCiAgICAgfQogfQogCitERUZJ
TkVfVklTSVRfQ0hJTERSRU4oSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKTsKKwogLy8gRklYTUU6
IEFzc2VydCB0aGF0IHByb3BlcnRpZXMgcmV0dXJuZWQgYnkgZ2V0T3duUHJvcGVydHlOYW1lcygp
IGFyZSByZXBvcnRlZCBlbnVtZXJhYmxlIGJ5IGdldE93blByb3BlcnR5U2xvdCgpLgogLy8gaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxOTkyNgogdm9pZCBnZXRFbnVt
ZXJhYmxlUHJvcGVydHlOYW1lcyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU09iamVj
dCogYmFzZSwgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIHVpbnQzMl90JiBpbmRl
eGVkTGVuZ3RoLCB1aW50MzJfdCYgc3RydWN0dXJlUHJvcGVydHlDb3VudCkKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVydHlOYW1lRW51bWVyYXRvci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVydHlOYW1lRW51
bWVyYXRvci5oCShyZXZpc2lvbiAyNzI3MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtODQsNyAr
ODQsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yLCBtX3Byb3BlcnR5TmFtZXMpOwogICAgIH0KIAotICAgIHN0YXRpYyB2
b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJ
U0lUX0NISUxEUkVOOwogCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNF
eHRyYWN0b3I7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3h5LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3h5LmNw
cAkocmV2aXNpb24gMjcyNzEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQ
cm94eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDcgKzM1LDggQEAgU1RBVElDX0FTU0VSVF9J
U19UUklWSUFMTFlfREVTVFJVQ1RJQkxFKAogCiBjb25zdCBDbGFzc0luZm8gSlNQcm94eTo6c19p
bmZvID0geyAiSlNQcm94eSIsICZCYXNlOjpzX2luZm8sIG51bGxwdHIsIG51bGxwdHIsIENSRUFU
RV9NRVRIT0RfVEFCTEUoSlNQcm94eSkgfTsKIAotdm9pZCBKU1Byb3h5Ojp2aXNpdENoaWxkcmVu
KEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPgordm9pZCBKU1Byb3h5Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZp
c2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNQcm94eSogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1By
b3h5Kj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBp
bmZvKCkpOwpAQCAtNDMsNiArNDQsOCBAQCB2b2lkIEpTUHJveHk6OnZpc2l0Q2hpbGRyZW4oSlND
ZWxsKiBjZWxsCiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV90YXJnZXQpOwogfQog
CitERUZJTkVfRVhQT1JUX1ZJU0lUX0NISUxEUkVOKEpTUHJveHkpOworCiB2b2lkIEpTUHJveHk6
OnNldFRhcmdldChWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCiB7CiAgICAg
bV90YXJnZXQuc2V0KHZtLCB0aGlzLCBnbG9iYWxPYmplY3QpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNQcm94eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTUHJveHkuaAkocmV2aXNpb24gMjcyNzEwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm94eS5oCSh3b3JraW5nIGNvcHkpCkBAIC04NSw3ICs4
NSw3IEBAIHByb3RlY3RlZDoKICAgICAgICAgbV90YXJnZXQuc2V0KHZtLCB0aGlzLCB0YXJnZXQp
OwogICAgIH0KIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX0VYUE9SVF9WSVNJVF9DSElM
RFJFTjsKIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBTdHJpbmcgY2xhc3NOYW1lKGNv
bnN0IEpTT2JqZWN0KiwgVk0mKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgU3RyaW5n
IHRvU3RyaW5nTmFtZShjb25zdCBKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0Kik7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Njb3BlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Njb3BlLmNwcAkocmV2aXNpb24gMjcyNzEw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTY29wZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM5LDcgKzM5LDggQEAgU1RBVElDX0FTU0VSVF9JU19UUklWSUFMTFlfREVTVFJV
Q1RJQkxFKAogCiBjb25zdCBDbGFzc0luZm8gSlNTY29wZTo6c19pbmZvID0geyAiU2NvcGUiLCAm
QmFzZTo6c19pbmZvLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTU2Nv
cGUpIH07CiAKLXZvaWQgSlNTY29wZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNTY29w
ZTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewog
ICAgIEpTU2NvcGUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNTY29wZSo+KGNlbGwpOwogICAgIEFT
U0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTQ3LDYgKzQ4
LDggQEAgdm9pZCBKU1Njb3BlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbAogICAgIHZpc2l0
b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fbmV4dCk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJF
TihKU1Njb3BlKTsKKwogLy8gUmV0dXJucyB0cnVlIGlmIHdlIGZvdW5kIGVub3VnaCBpbmZvcm1h
dGlvbiB0byB0ZXJtaW5hdGUgb3B0aW1pemF0aW9uLgogc3RhdGljIGlubGluZSBib29sIGFic3Ry
YWN0QWNjZXNzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTU2NvcGUqIHNjb3BlLCBj
b25zdCBJZGVudGlmaWVyJiBpZGVudCwgR2V0T3JQdXQgZ2V0T3JQdXQsIHNpemVfdCBkZXB0aCwg
Ym9vbCYgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MsIFJlc29sdmVPcCYgb3AsIEluaXRpYWxpemF0
aW9uTW9kZSBpbml0aWFsaXphdGlvbk1vZGUpCiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1Njb3BlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNTY29wZS5oCShyZXZpc2lvbiAyNzI3MTApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU1Njb3BlLmgJKHdvcmtpbmcgY29weSkKQEAgLTY0LDcgKzY0LDcgQEAg
cHVibGljOgogCiAgICAgc3RhdGljIHZvaWQgY29sbGVjdENsb3N1cmVWYXJpYWJsZXNVbmRlclRE
WihKU1Njb3BlKiwgVERaRW52aXJvbm1lbnQmIHJlc3VsdCwgUHJpdmF0ZU5hbWVFbnZpcm9ubWVu
dCYpOwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRv
ciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBib29sIGlzVmFyU2NvcGUo
KTsKICAgICBib29sIGlzTGV4aWNhbFNjb3BlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmNw
cAkocmV2aXNpb24gMjcyNzEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNT
ZWdtZW50ZWRWYXJpYWJsZU9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYyLDE5ICs2Miwy
MiBAQCBTY29wZU9mZnNldCBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0OjphCiAgICAgcmV0dXJu
IFNjb3BlT2Zmc2V0KG9sZFNpemUpOwogfQogCi12b2lkIEpTU2VnbWVudGVkVmFyaWFibGVPYmpl
Y3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgc2xvdFZpc2l0b3Ip
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1NlZ21lbnRlZFZhcmlhYmxlT2Jq
ZWN0Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7
CiAgICAgSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Nl
Z21lbnRlZFZhcmlhYmxlT2JqZWN0Kj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhF
UklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwotICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09i
amVjdCwgc2xvdFZpc2l0b3IpOworICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwg
dmlzaXRvcik7CiAgICAgCiAgICAgLy8gRklYTUU6IFdlIGNvdWxkIGF2b2lkIGxvY2tpbmcgaGVy
ZSBpZiBTZWdtZW50ZWRWZWN0b3Igd2FzIGxvY2stZnJlZS4gSXQgY291bGQgYmUgbWFkZSBsb2Nr
LWZyZWUKICAgICAvLyByZWxhdGl2ZWx5IGVhc2lseS4KICAgICBhdXRvIGxvY2tlciA9IGhvbGRM
b2NrKHRoaXNPYmplY3QtPmNlbGxMb2NrKCkpOwogICAgIGZvciAodW5zaWduZWQgaSA9IHRoaXNP
YmplY3QtPm1fdmFyaWFibGVzLnNpemUoKTsgaS0tOykKLSAgICAgICAgc2xvdFZpc2l0b3IuYXBw
ZW5kSGlkZGVuKHRoaXNPYmplY3QtPm1fdmFyaWFibGVzW2ldKTsKKyAgICAgICAgdmlzaXRvci5h
cHBlbmRIaWRkZW4odGhpc09iamVjdC0+bV92YXJpYWJsZXNbaV0pOwogfQogCitERUZJTkVfRVhQ
T1JUX1ZJU0lUX0NISUxEUkVOKEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3QpOworCiB2b2lkIEpT
U2VnbWVudGVkVmFyaWFibGVPYmplY3Q6OmFuYWx5emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFu
YWx5emVyJiBhbmFseXplcikKIHsKICAgICBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0KiB0aGlz
T2JqZWN0ID0ganNDYXN0PEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3QqPihjZWxsKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVPYmplY3Qu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NlZ21lbnRl
ZFZhcmlhYmxlT2JqZWN0LmgJKHJldmlzaW9uIDI3MjcxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVPYmplY3QuaAkod29ya2luZyBjb3B5KQpA
QCAtODYsNyArODYsNyBAQCBwdWJsaWM6CiAgICAgLy8gdGhlIGluZGV4IG9mIHRoZSBmaXJzdCBv
bmUgYWRkZWQuCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgU2NvcGVPZmZzZXQgYWRkVmFyaWFibGVz
KHVuc2lnbmVkIG51bWJlck9mVmFyaWFibGVzVG9BZGQsIEpTVmFsdWUpOwogICAgIAotICAgIEpT
X0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZp
c2l0b3ImKTsKKyAgICBERUNMQVJFX0VYUE9SVF9WSVNJVF9DSElMRFJFTjsKICAgICBKU19FWFBP
UlRfUFJJVkFURSBzdGF0aWMgdm9pZCBhbmFseXplSGVhcChKU0NlbGwqLCBIZWFwQW5hbHl6ZXIm
KTsKICAgICAKIHByb3RlY3RlZDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTU2V0SXRlcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTU2V0SXRlcmF0b3IuY3BwCShyZXZpc2lvbiAyNzI3MTApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU1NldEl0ZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTcsMTMgKzU3LDE2IEBAIHZvaWQgSlNTZXRJdGVyYXRvcjo6ZmluaXNoQ3JlYXRpb24oVk0mIHYK
ICAgICAgICAgQmFzZTo6aW50ZXJuYWxGaWVsZChpbmRleCkuc2V0KHZtLCB0aGlzLCB2YWx1ZXNb
aW5kZXhdKTsKIH0KIAotdm9pZCBKU1NldEl0ZXJhdG9yOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCog
Y2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgor
dm9pZCBKU1NldEl0ZXJhdG9yOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0
b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1NldEl0ZXJh
dG9yKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBp
bmZvKCkpOwogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CiB9
CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU1NldEl0ZXJhdG9yKTsKKwogSlNWYWx1ZSBKU1Nl
dEl0ZXJhdG9yOjpjcmVhdGVQYWlyKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFs
dWUga2V5LCBKU1ZhbHVlIHZhbHVlKQogewogICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3M7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NldEl0ZXJhdG9yLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZXRJdGVyYXRvci5o
CShyZXZpc2lvbiAyNzI3MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Nl
dEl0ZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTEzMCw3ICsxMzAsNyBAQCBwcml2YXRlOgog
ICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBKU1NldCosIEl0
ZXJhdGlvbktpbmQpOwogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKICAgICBKU19FWFBP
UlRfUFJJVkFURSBKU1ZhbHVlIGNyZWF0ZVBhaXIoSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlLCBK
U1ZhbHVlKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNp
dG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIH07CiBTVEFUSUNfQVNTRVJUX0lT
X1RSSVZJQUxMWV9ERVNUUlVDVElCTEUoSlNTZXRJdGVyYXRvcik7CiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU291cmNlQ29kZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTb3VyY2VDb2RlLmNwcAkocmV2aXNpb24gMjcy
NzEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTb3VyY2VDb2RlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsOCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2lu
Y2x1ZGUgIkpTU291cmNlQ29kZS5oIgogCisjaW5jbHVkZSAiSlNDZWxsSW5saW5lcy5oIiAvLyBt
bGFtIFRFU1QKKwogbmFtZXNwYWNlIEpTQyB7CiAKIGNvbnN0IENsYXNzSW5mbyBKU1NvdXJjZUNv
ZGU6OnNfaW5mbyA9IHsgIkpTU291cmNlQ29kZSIsIG51bGxwdHIsIG51bGxwdHIsIG51bGxwdHIs
IENSRUFURV9NRVRIT0RfVEFCTEUoSlNTb3VyY2VDb2RlKSB9OwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmNwcAkocmV2aXNpb24gMjcyNzEwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMDUsNyArMTA1LDggQEAgc2l6ZV90IEpTU3RyaW5nOjplc3RpbWF0ZWRTaXplKEpTQ2VsbCog
YwogICAgIHJldHVybiBCYXNlOjplc3RpbWF0ZWRTaXplKGNlbGwsIHZtKSArIGJpdHdpc2VfY2Fz
dDxTdHJpbmdJbXBsKj4ocG9pbnRlciktPmNvc3REdXJpbmdHQygpOwogfQogCi12b2lkIEpTU3Ry
aW5nOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0
ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1N0cmluZzo6dmlzaXRDaGlsZHJlbklt
cGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTU3RyaW5nKiB0aGlz
T2JqZWN0ID0gYXNTdHJpbmcoY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0
aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtMTQzLDYgKzE0NCw4IEBAIHZvaWQgSlNTdHJpbmc6OnZp
c2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWwKICAgICAgICAgdmlzaXRvci5yZXBvcnRFeHRyYU1lbW9y
eVZpc2l0ZWQoaW1wbC0+Y29zdER1cmluZ0dDKCkpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERS
RU4oSlNTdHJpbmcpOworCiBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG1heExlbmd0aEZvck9u
U3RhY2tSZXNvbHZlID0gMjA0ODsKIAogdm9pZCBKU1JvcGVTdHJpbmc6OnJlc29sdmVSb3BlSW50
ZXJuYWw4KExDaGFyKiBidWZmZXIpIGNvbnN0CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU1N0cmluZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTU3RyaW5nLmgJKHJldmlzaW9uIDI3MjcxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTU3RyaW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTIxNyw3ICsyMTcsNyBA
QCBwdWJsaWM6CiAKICAgICBzdGF0aWMgdm9pZCBkdW1wVG9TdHJlYW0oY29uc3QgSlNDZWxsKiwg
UHJpbnRTdHJlYW0mKTsKICAgICBzdGF0aWMgc2l6ZV90IGVzdGltYXRlZFNpemUoSlNDZWxsKiwg
Vk0mKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9y
Jik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIEFMV0FZU19JTkxJTkUgYm9v
bCBpc1JvcGUoKSBjb25zdAogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTU3RyaW5nSXRlcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTU3RyaW5nSXRlcmF0b3IuY3BwCShyZXZpc2lvbiAyNzI3MTApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZ0l0ZXJhdG9yLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTEsMTEgKzUxLDE0IEBAIEpTU3RyaW5nSXRlcmF0b3IqIEpTU3RyaW5nSXRl
cmF0b3I6OmNsb24KICAgICByZXR1cm4gY2xvbmU7CiB9CiAKLXZvaWQgSlNTdHJpbmdJdGVyYXRv
cjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVt
cGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNTdHJpbmdJdGVyYXRvcjo6dmlzaXRDaGls
ZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGF1dG8qIHRo
aXNPYmplY3QgPSBqc0Nhc3Q8SlNTdHJpbmdJdGVyYXRvcio+KGNlbGwpOwogICAgIEFTU0VSVF9H
Q19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKICAgICBCYXNlOjp2aXNpdENo
aWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4o
SlNTdHJpbmdJdGVyYXRvcik7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmdJdGVyYXRvci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nSXRlcmF0b3IuaAkocmV2aXNpb24g
MjcyNzEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmdJdGVyYXRv
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC03OSw3ICs3OSw3IEBAIHB1YmxpYzoKICAgICBKU1ZhbHVl
IGluZGV4KCkgY29uc3QgeyByZXR1cm4gaW50ZXJuYWxGaWVsZChGaWVsZDo6SW5kZXgpLmdldCgp
OyB9CiAgICAgSlNTdHJpbmdJdGVyYXRvciogY2xvbmUoSlNHbG9iYWxPYmplY3QqKTsKIAotICAg
IHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBE
RUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiBwcml2YXRlOgogICAgIEpTU3RyaW5nSXRlcmF0b3Io
Vk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuY3BwCShyZXZpc2lvbiAy
NzI3MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N5bWJvbFRhYmxlT2Jq
ZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsOCBAQCBuYW1lc3BhY2UgSlNDIHsK
IAogY29uc3QgQ2xhc3NJbmZvIEpTU3ltYm9sVGFibGVPYmplY3Q6OnNfaW5mbyA9IHsgIlN5bWJv
bFRhYmxlT2JqZWN0IiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01F
VEhPRF9UQUJMRShKU1N5bWJvbFRhYmxlT2JqZWN0KSB9OwogCi12b2lkIEpTU3ltYm9sVGFibGVP
YmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikK
K3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTU3ltYm9sVGFibGVPYmplY3Q6OnZp
c2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBK
U1N5bWJvbFRhYmxlT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTU3ltYm9sVGFibGVPYmpl
Y3QqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGlu
Zm8oKSk7CkBAIC00NCw2ICs0NSw4IEBAIHZvaWQgSlNTeW1ib2xUYWJsZU9iamVjdDo6dmlzaXRD
aGlsZHJlbigKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX3N5bWJvbFRhYmxlKTsK
IH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTU3ltYm9sVGFibGVPYmplY3QpOworCiBib29s
IEpTU3ltYm9sVGFibGVPYmplY3Q6OmRlbGV0ZVByb3BlcnR5KEpTQ2VsbCogY2VsbCwgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgRGVsZXRl
UHJvcGVydHlTbG90JiBzbG90KQogewogICAgIEpTU3ltYm9sVGFibGVPYmplY3QqIHRoaXNPYmpl
Y3QgPSBqc0Nhc3Q8SlNTeW1ib2xUYWJsZU9iamVjdCo+KGNlbGwpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVjdC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuaAkocmV2
aXNpb24gMjcyNzEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTeW1ib2xU
YWJsZU9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC03MCw3ICs3MCw3IEBAIHByb3RlY3RlZDoK
ICAgICAgICAgbV9zeW1ib2xUYWJsZS5zZXQodm0sIHRoaXMsIHN5bWJvbFRhYmxlKTsKICAgICB9
CiAgICAgCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRv
ciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAgICAgCiBwcml2YXRlOgogICAgIFdy
aXRlQmFycmllcjxTeW1ib2xUYWJsZT4gbV9zeW1ib2xUYWJsZTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTV2Vha09iamVjdFJlZi5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNXZWFrT2JqZWN0UmVmLmNwcAkocmV2aXNpb24g
MjcyNzEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNXZWFrT2JqZWN0UmVm
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksNyArMzksOCBAQCB2b2lkIEpTV2Vha09iamVjdFJl
Zjo6ZmluaXNoQ3JlYXRpb24oVk0mCiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwogfQog
Ci12b2lkIEpTV2Vha09iamVjdFJlZjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNXZWFr
T2JqZWN0UmVmOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0
b3IpCiB7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1dlYWtPYmplY3RSZWYqPihj
ZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7
CkBAIC01MSw2ICs1Miw4IEBAIHZvaWQgSlNXZWFrT2JqZWN0UmVmOjp2aXNpdENoaWxkcmVuKEpT
Q2UKICAgICB9CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU1dlYWtPYmplY3RSZWYpOwor
CiB2b2lkIEpTV2Vha09iamVjdFJlZjo6ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoVk0mIHZtKQog
ewogICAgIGlmIChtX3ZhbHVlICYmICF2bS5oZWFwLmlzTWFya2VkKG1fdmFsdWUuZ2V0KCkpKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNXZWFrT2JqZWN0UmVmLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNXZWFrT2JqZWN0UmVm
LmgJKHJldmlzaW9uIDI3MjcxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
V2Vha09iamVjdFJlZi5oCSh3b3JraW5nIGNvcHkpCkBAIC02NSw3ICs2NSw3IEBAIHB1YmxpYzoK
ICAgICB9CiAKICAgICB2b2lkIGZpbmFsaXplVW5jb25kaXRpb25hbGx5KFZNJik7Ci0gICAgc3Rh
dGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xB
UkVfVklTSVRfQ0hJTERSRU47CiAKIHByaXZhdGU6CiAgICAgSlNXZWFrT2JqZWN0UmVmKFZNJiB2
bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1dpdGhTY29wZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNXaXRoU2NvcGUuY3BwCShyZXZpc2lvbiAyNzI3MTApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU1dpdGhTY29wZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQx
LDcgKzQxLDggQEAgSlNXaXRoU2NvcGUqIEpTV2l0aFNjb3BlOjpjcmVhdGUoCiAgICAgcmV0dXJu
IHdpdGhTY29wZTsKIH0KIAotdm9pZCBKU1dpdGhTY29wZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwq
IGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4K
K3ZvaWQgSlNXaXRoU2NvcGU6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRv
ciYgdmlzaXRvcikKIHsKICAgICBKU1dpdGhTY29wZSogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1dp
dGhTY29wZSo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVj
dCwgaW5mbygpKTsKQEAgLTQ5LDYgKzUwLDggQEAgdm9pZCBKU1dpdGhTY29wZTo6dmlzaXRDaGls
ZHJlbihKU0NlbGwqIAogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fb2JqZWN0KTsK
IH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTV2l0aFNjb3BlKTsKKwogU3RydWN0dXJlKiBK
U1dpdGhTY29wZTo6Y3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgSlNWYWx1ZSBwcm90bykKIHsKICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUo
dm0sIGdsb2JhbE9iamVjdCwgcHJvdG8sIFR5cGVJbmZvKFdpdGhTY29wZVR5cGUsIFN0cnVjdHVy
ZUZsYWdzKSwgaW5mbygpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
V2l0aFNjb3BlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNXaXRoU2NvcGUuaAkocmV2aXNpb24gMjcyNzEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNXaXRoU2NvcGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDMsNyArNDMsNyBAQCBw
dWJsaWM6CiAKICAgICBKU09iamVjdCogb2JqZWN0KCkgeyByZXR1cm4gbV9vYmplY3QuZ2V0KCk7
IH0KIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3Im
KTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgc3RhdGljIFN0cnVjdHVyZSog
Y3JlYXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlIHByb3RvKTsKIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNXcmFwcGVyT2JqZWN0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1dyYXBwZXJPYmpl
Y3QuY3BwCShyZXZpc2lvbiAyNzI3MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU1dyYXBwZXJPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSwxMSArMjksMTQgQEAg
bmFtZXNwYWNlIEpTQyB7CiAKIFNUQVRJQ19BU1NFUlRfSVNfVFJJVklBTExZX0RFU1RSVUNUSUJM
RShKU1dyYXBwZXJPYmplY3QpOwogCi12b2lkIEpTV3JhcHBlck9iamVjdDo6dmlzaXRDaGlsZHJl
bihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUg
VmlzaXRvcj4KK3ZvaWQgSlNXcmFwcGVyT2JqZWN0Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwq
IGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2Fz
dDxKU1dyYXBwZXJPYmplY3QqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRT
KHRoaXNPYmplY3QsIGluZm8oKSk7CiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0
LCB2aXNpdG9yKTsKIH0KIAorREVGSU5FX0VYUE9SVF9WSVNJVF9DSElMRFJFTihKU1dyYXBwZXJP
YmplY3QpOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTV3JhcHBlck9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTV3JhcHBlck9iamVjdC5oCShyZXZpc2lvbiAyNzI3MTApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1dyYXBwZXJPYmplY3QuaAkod29ya2luZyBj
b3B5KQpAQCAtNjQsNyArNjQsNyBAQCBwdWJsaWM6CiBwcm90ZWN0ZWQ6CiAgICAgZXhwbGljaXQg
SlNXcmFwcGVyT2JqZWN0KFZNJiwgU3RydWN0dXJlKik7CiAKLSAgICBKU19FWFBPUlRfUFJJVkFU
RSBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAg
REVDTEFSRV9FWFBPUlRfVklTSVRfQ0hJTERSRU47CiB9OwogCiBpbmxpbmUgSlNXcmFwcGVyT2Jq
ZWN0OjpKU1dyYXBwZXJPYmplY3QoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0xhenlDbGFzc1N0cnVjdHVyZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTGF6eUNsYXNzU3RydWN0
dXJlLmNwcAkocmV2aXNpb24gMjcyNzEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvTGF6eUNsYXNzU3RydWN0dXJlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzIsMTIgKzcyLDE2
IEBAIHZvaWQgTGF6eUNsYXNzU3RydWN0dXJlOjpJbml0aWFsaXplcjo6c2UKICAgICBjbGFzc1N0
cnVjdHVyZS5tX2NvbnN0cnVjdG9yLnNldCh2bSwgZ2xvYmFsLCBjb25zdHJ1Y3Rvcik7CiB9CiAK
LXZvaWQgTGF6eUNsYXNzU3RydWN0dXJlOjp2aXNpdChTbG90VmlzaXRvciYgdmlzaXRvcikKK3Rl
bXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIExhenlDbGFzc1N0cnVjdHVyZTo6dmlzaXQo
VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBtX3N0cnVjdHVyZS52aXNpdCh2aXNpdG9yKTsKICAg
ICB2aXNpdG9yLmFwcGVuZChtX2NvbnN0cnVjdG9yKTsKIH0KIAordGVtcGxhdGUgdm9pZCBMYXp5
Q2xhc3NTdHJ1Y3R1cmU6OnZpc2l0KEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZv
aWQgTGF6eUNsYXNzU3RydWN0dXJlOjp2aXNpdChTbG90VmlzaXRvciYpOworCiB2b2lkIExhenlD
bGFzc1N0cnVjdHVyZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAogewogICAgIG91dC5w
cmludCgiPHN0cnVjdHVyZSA9ICIsIG1fc3RydWN0dXJlLCAiLCBjb25zdHJ1Y3RvciA9ICIsIFJh
d1BvaW50ZXIobV9jb25zdHJ1Y3Rvci5nZXQoKSksICI+Iik7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9MYXp5Q2xhc3NTdHJ1Y3R1cmUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9MYXp5Q2xhc3NTdHJ1Y3R1cmUuaAkocmV2aXNpb24g
MjcyNzEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTGF6eUNsYXNzU3RydWN0
dXJlLmgJKHdvcmtpbmcgY29weSkKQEAgLTExNyw3ICsxMTcsNyBAQCBwdWJsaWM6CiAgICAgICAg
IHJldHVybiBtX2NvbnN0cnVjdG9yLmdldCgpOwogICAgIH0KICAgICAKLSAgICB2b2lkIHZpc2l0
KFNsb3RWaXNpdG9yJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCB2aXNp
dChWaXNpdG9yJik7CiAgICAgCiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0xhenlQcm9wZXJ0eS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0xhenlQcm9wZXJ0eS5oCShy
ZXZpc2lvbiAyNzI3MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9MYXp5UHJv
cGVydHkuaAkod29ya2luZyBjb3B5KQpAQCAtMTAzLDcgKzEwMyw3IEBAIHB1YmxpYzoKICAgICB2
b2lkIHNldE1heUJlTnVsbChWTSYsIGNvbnN0IE93bmVyVHlwZSogb3duZXIsIEVsZW1lbnRUeXBl
Kik7CiAgICAgdm9pZCBzZXQoVk0mLCBjb25zdCBPd25lclR5cGUqIG93bmVyLCBFbGVtZW50VHlw
ZSopOwogICAgIAotICAgIHZvaWQgdmlzaXQoU2xvdFZpc2l0b3ImKTsKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBWaXNpdG9yPiB2b2lkIHZpc2l0KFZpc2l0b3ImKTsKICAgICAKICAgICB2b2lkIGR1
bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0xhenlQcm9wZXJ0eUlubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9MYXp5UHJvcGVydHlJbmxpbmVzLmgJKHJldmlzaW9uIDI3Mjcx
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0xhenlQcm9wZXJ0eUlubGluZXMu
aAkod29ya2luZyBjb3B5KQpAQCAtNjYsNyArNjYsOCBAQCB2b2lkIExhenlQcm9wZXJ0eTxPd25l
clR5cGUsIEVsZW1lbnRUeXBlCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE93bmVyVHlwZSwgdHlw
ZW5hbWUgRWxlbWVudFR5cGU+Ci12b2lkIExhenlQcm9wZXJ0eTxPd25lclR5cGUsIEVsZW1lbnRU
eXBlPjo6dmlzaXQoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNp
dG9yPgordm9pZCBMYXp5UHJvcGVydHk8T3duZXJUeXBlLCBFbGVtZW50VHlwZT46OnZpc2l0KFZp
c2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgaWYgKG1fcG9pbnRlciAmJiAhKG1fcG9pbnRlciAmIGxh
enlUYWcpKQogICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKGJpdHdpc2VfY2FzdDxF
bGVtZW50VHlwZSo+KG1fcG9pbnRlcikpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL01vZHVsZVByb2dyYW1FeGVjdXRhYmxlLmNwcAkocmV2aXNp
b24gMjcyNzEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTW9kdWxlUHJvZ3Jh
bUV4ZWN1dGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03OSw3ICs3OSw4IEBAIGF1dG8gTW9k
dWxlUHJvZ3JhbUV4ZWN1dGFibGU6OmVuc3VyZVRlbXAKICAgICByZXR1cm4gZW5zdXJlVGVtcGxh
dGVPYmplY3RNYXBJbXBsKG1fdGVtcGxhdGVPYmplY3RNYXApOwogfQogCi12b2lkIE1vZHVsZVBy
b2dyYW1FeGVjdXRhYmxlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3Im
IHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBNb2R1bGVQcm9ncmFt
RXhlY3V0YWJsZTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNp
dG9yKQogewogICAgIE1vZHVsZVByb2dyYW1FeGVjdXRhYmxlKiB0aGlzT2JqZWN0ID0ganNDYXN0
PE1vZHVsZVByb2dyYW1FeGVjdXRhYmxlKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9J
TkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtOTQsNCArOTUsNiBAQCB2b2lkIE1vZHVs
ZVByb2dyYW1FeGVjdXRhYmxlOjp2aXNpdENoaWxkCiAgICAgfQogfQogCitERUZJTkVfVklTSVRf
Q0hJTERSRU4oTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUpOworCiB9IC8vIG5hbWVzcGFjZSBKU0MK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01vZHVsZVByb2dyYW1FeGVjdXRh
YmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTW9kdWxl
UHJvZ3JhbUV4ZWN1dGFibGUuaAkocmV2aXNpb24gMjcyNzEwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUuaAkod29ya2luZyBjb3B5KQpA
QCAtNzcsNyArNzcsNyBAQCBwcml2YXRlOgogCiAgICAgTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUo
SlNHbG9iYWxPYmplY3QqLCBjb25zdCBTb3VyY2VDb2RlJik7CiAKLSAgICBzdGF0aWMgdm9pZCB2
aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9D
SElMRFJFTjsKIAogICAgIFdyaXRlQmFycmllcjxVbmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxv
Y2s+IG1fdW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrOwogICAgIFdyaXRlQmFycmllcjxT
eW1ib2xUYWJsZT4gbV9tb2R1bGVFbnZpcm9ubWVudFN5bWJvbFRhYmxlOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAJKHJldmlzaW9uIDI3MjcxMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC01NTgsNiArNTU4LDEwIEBAIHZvaWQgT3B0aW9uczo6cmVjb21wdXRlRGVwZW5kZW50T3B0
aW9ucygKIAogICAgIGlmIChPcHRpb25zOjp1c2VQcml2YXRlU3RhdGljQ2xhc3NGaWVsZHMoKSkK
ICAgICAgICAgT3B0aW9uczo6dXNlUHJpdmF0ZUNsYXNzRmllbGRzKCkgPSB0cnVlOworCisgICAg
aWYgKE9wdGlvbnM6OnZlcmJvc2VWZXJpZnlHQygpKQorICAgICAgICBPcHRpb25zOjp2ZXJpZnlH
QygpID0gdHJ1ZTsKKyAgICBPcHRpb25zOjp2ZXJpZnlHQygpID0gdHJ1ZTsgLy8gbWxhbSBURVNU
IEhBQ0sKIH0KIAogaW5saW5lIHZvaWQqIE9wdGlvbnM6OmFkZHJlc3NPZk9wdGlvbihPcHRpb25z
OjpJRCBpZCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xp
c3QuaAkocmV2aXNpb24gMjcyNzEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
T3B0aW9uc0xpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMzY5LDYgKzM2OSw4IEBAIEpTX0VYUE9S
VF9QUklWQVRFIGJvb2wgY2FuVXNlSklUQ2FnZSgpOwogICAgIHYoQm9vbCwgYWx3YXlzR2VuZXJh
dGVQQ1RvQ29kZU9yaWdpbk1hcCwgZmFsc2UsIE5vcm1hbCwgIlRoaXMgd2lsbCBtYWtlIHN1cmUg
d2UgYWx3YXlzIGdlbmVyYXRlIGEgUENUb0NvZGVPcmlnaW5NYXAgZm9yIEpJVGVkIGNvZGUuIikg
XAogICAgIFwKICAgICB2KERvdWJsZSwgcmFuZG9tSW50ZWdyaXR5QXVkaXRSYXRlLCAwLjA1LCBO
b3JtYWwsICJQcm9iYWJpbGl0eSBvZiByYW5kb20gaW50ZWdyaXR5IGF1ZGl0cyBbMC4wIC0gMS4w
XSIpIFwKKyAgICB2KEJvb2wsIHZlcmlmeUdDLCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCisg
ICAgdihCb29sLCB2ZXJib3NlVmVyaWZ5R0MsIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpIFwKICAg
ICB2KEJvb2wsIHZlcmlmeUhlYXAsIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KFVu
c2lnbmVkLCBudW1iZXJPZkdDQ3ljbGVzVG9SZWNvcmRGb3JWZXJpZmljYXRpb24sIDMsIE5vcm1h
bCwgbnVsbHB0cikgXAogICAgIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1Byb2dyYW1FeGVjdXRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9Qcm9ncmFtRXhlY3V0YWJsZS5jcHAJKHJldmlzaW9uIDI3MjcxMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb2dyYW1FeGVjdXRhYmxlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjA4LDcgKzIwOCw4IEBAIGF1dG8gUHJvZ3JhbUV4ZWN1dGFibGU6OmVuc3Vy
ZVRlbXBsYXRlT2IKICAgICByZXR1cm4gZW5zdXJlVGVtcGxhdGVPYmplY3RNYXBJbXBsKG1fdGVt
cGxhdGVPYmplY3RNYXApOwogfQogCi12b2lkIFByb2dyYW1FeGVjdXRhYmxlOjp2aXNpdENoaWxk
cmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBWaXNpdG9yPgordm9pZCBQcm9ncmFtRXhlY3V0YWJsZTo6dmlzaXRDaGlsZHJlbkltcGwoSlND
ZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFByb2dyYW1FeGVjdXRhYmxlKiB0
aGlzT2JqZWN0ID0ganNDYXN0PFByb2dyYW1FeGVjdXRhYmxlKj4oY2VsbCk7CiAgICAgQVNTRVJU
X0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtMjIyLDQgKzIyMyw2
IEBAIHZvaWQgUHJvZ3JhbUV4ZWN1dGFibGU6OnZpc2l0Q2hpbGRyZW4oSlMKICAgICB9CiB9CiAK
K0RFRklORV9WSVNJVF9DSElMRFJFTihQcm9ncmFtRXhlY3V0YWJsZSk7CisKIH0gLy8gbmFtZXNw
YWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvZ3JhbUV4ZWN1
dGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9n
cmFtRXhlY3V0YWJsZS5oCShyZXZpc2lvbiAyNzI3MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9Qcm9ncmFtRXhlY3V0YWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC04MSw3ICs4
MSw3IEBAIHByaXZhdGU6CiAKICAgICBQcm9ncmFtRXhlY3V0YWJsZShKU0dsb2JhbE9iamVjdCos
IGNvbnN0IFNvdXJjZUNvZGUmKTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlND
ZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAg
V3JpdGVCYXJyaWVyPFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jaz4gbV91bmxpbmtlZFByb2dyYW1D
b2RlQmxvY2s7CiAgICAgV3JpdGVCYXJyaWVyPEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2U+IG1f
cHJvZ3JhbUNvZGVCbG9jazsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1By
b3BlcnR5TWFwSGFzaFRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvUHJvcGVydHlNYXBIYXNoVGFibGUuaAkocmV2aXNpb24gMjcyNzEwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlNYXBIYXNoVGFibGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTMzLDcgKzEzMyw3IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBuZWVkc0Rlc3RydWN0aW9uID0gdHJ1ZTsKICAgICBzdGF0aWMgdm9pZCBkZXN0cm95
KEpTQ2VsbCopOwotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZp
c2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgREVDTEFSRV9FWFBP
UlRfSU5GTzsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlU
YWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJv
cGVydHlUYWJsZS5jcHAJKHJldmlzaW9uIDI3MjcxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1Byb3BlcnR5VGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTgsNyArMTE4
LDggQEAgdm9pZCBQcm9wZXJ0eVRhYmxlOjpmaW5pc2hDcmVhdGlvbihWTSYgdgogICAgIHZtLmhl
YXAucmVwb3J0RXh0cmFNZW1vcnlBbGxvY2F0ZWQoZGF0YVNpemUoKSk7CiB9CiAKLXZvaWQgUHJv
cGVydHlUYWJsZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNp
dG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgUHJvcGVydHlUYWJsZTo6dmlz
aXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGF1
dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8UHJvcGVydHlUYWJsZSo+KGNlbGwpOwogICAgIEFTU0VS
VF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTEyNiw2ICsxMjcs
OCBAQCB2b2lkIFByb3BlcnR5VGFibGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsCiAgICAgdmlzaXRv
ci5yZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQodGhpc09iamVjdC0+ZGF0YVNpemUoKSk7CiB9CiAK
K0RFRklORV9WSVNJVF9DSElMRFJFTihQcm9wZXJ0eVRhYmxlKTsKKwogdm9pZCBQcm9wZXJ0eVRh
YmxlOjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKIHsKICAgICBzdGF0aWNfY2FzdDxQcm9wZXJ0eVRh
YmxlKj4oY2VsbCktPlByb3BlcnR5VGFibGU6On5Qcm9wZXJ0eVRhYmxlKCk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm94eU9iamVjdC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJveHlPYmplY3QuY3BwCShyZXZpc2lvbiAy
NzI3MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm94eU9iamVjdC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTExNTgsNyArMTE1OCw4IEBAIGJvb2wgUHJveHlPYmplY3Q6Omlz
UmV2b2tlZCgpIGNvbnN0CiAgICAgcmV0dXJuIGhhbmRsZXIoKS5pc051bGwoKTsKIH0KIAotdm9p
ZCBQcm94eU9iamVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgUHJveHlPYmplY3Q6OnZp
c2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBQ
cm94eU9iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxQcm94eU9iamVjdCo+KGNlbGwpOwogICAg
IEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTExNjgs
NCArMTE2OSw2IEBAIHZvaWQgUHJveHlPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiAKICAg
ICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2hhbmRsZXIpOwogfQogCitERUZJTkVfVklT
SVRfQ0hJTERSRU4oUHJveHlPYmplY3QpOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3h5T2JqZWN0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJveHlPYmplY3QuaAkocmV2aXNpb24gMjcy
NzEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJveHlPYmplY3QuaAkod29y
a2luZyBjb3B5KQpAQCAtOTEsNyArOTEsNyBAQCBwcml2YXRlOgogICAgIHN0YXRpYyB2b2lkIGdl
dE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFt
ZUFycmF5JiwgRG9udEVudW1Qcm9wZXJ0aWVzTW9kZSk7CiAgICAgc3RhdGljIGJvb2wgc2V0UHJv
dG90eXBlKEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlIHByb3RvdHlwZSwgYm9v
bCBzaG91bGRUaHJvd0lmQ2FudFNldCk7CiAgICAgc3RhdGljIEpTVmFsdWUgZ2V0UHJvdG90eXBl
KEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxk
cmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsK
IAogICAgIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90Q29tbW9uKEpTR2xvYmFsT2JqZWN0KiwgUHJv
cGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKICAgICBib29sIHBlcmZvcm1JbnRlcm5hbE1ldGhv
ZEdldE93blByb3BlcnR5KEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNs
b3QmKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3h5UmV2b2tlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm94eVJldm9r
ZS5jcHAJKHJldmlzaW9uIDI3MjcxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1Byb3h5UmV2b2tlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjksNyArNjksOCBAQCBKU0NfREVG
SU5FX0hPU1RfRlVOQ1RJT04ocGVyZm9ybVByb3h5UmV2CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKIH0KIAotdm9pZCBQcm94eVJldm9rZTo6dmlzaXRDaGlsZHJl
bihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUg
VmlzaXRvcj4KK3ZvaWQgUHJveHlSZXZva2U6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2Vs
bCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBQcm94eVJldm9rZSogdGhpc09iamVjdCA9IGpz
Q2FzdDxQcm94eVJldm9rZSo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMo
dGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTc4LDQgKzc5LDYgQEAgdm9pZCBQcm94eVJldm9rZTo6
dmlzaXRDaGlsZHJlbihKU0NlbGwqIAogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1f
cHJveHkpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oUHJveHlSZXZva2UpOworCiB9IC8v
IG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3h5
UmV2b2tlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJv
eHlSZXZva2UuaAkocmV2aXNpb24gMjcyNzEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvUHJveHlSZXZva2UuaAkod29ya2luZyBjb3B5KQpAQCAtNTIsNyArNTIsNyBAQCBwdWJs
aWM6CiAgICAgfQogCiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIFByb3h5T2JqZWN0Kik7
Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwor
ICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAgICAgSlNWYWx1ZSBwcm94eSgpIHsgcmV0dXJu
IG1fcHJveHkuZ2V0KCk7IH0KICAgICB2b2lkIHNldFByb3h5VG9OdWxsKFZNJiB2bSkgeyByZXR1
cm4gbV9wcm94eS5zZXQodm0sIHRoaXMsIGpzTnVsbCgpKTsgfQogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBDYWNoZWRSZXN1bHQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENhY2hlZFJlc3VsdC5jcHAJKHJl
dmlzaW9uIDI3MjcxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENh
Y2hlZFJlc3VsdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDggQEAKIAogbmFtZXNw
YWNlIEpTQyB7CiAKLXZvaWQgUmVnRXhwQ2FjaGVkUmVzdWx0Ojp2aXNpdEFnZ3JlZ2F0ZShTbG90
VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFJlZ0V4
cENhY2hlZFJlc3VsdDo6dmlzaXRBZ2dyZWdhdGUoVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB2
aXNpdG9yLmFwcGVuZChtX2xhc3RJbnB1dCk7CiAgICAgdmlzaXRvci5hcHBlbmQobV9sYXN0UmVn
RXhwKTsKQEAgLTQzLDYgKzQ0LDkgQEAgdm9pZCBSZWdFeHBDYWNoZWRSZXN1bHQ6OnZpc2l0QWdn
cmVnYXRlKAogICAgIH0KIH0KIAordGVtcGxhdGUgdm9pZCBSZWdFeHBDYWNoZWRSZXN1bHQ6OnZp
c2l0QWdncmVnYXRlKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgUmVnRXhw
Q2FjaGVkUmVzdWx0Ojp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYpOworCiBKU0FycmF5KiBS
ZWdFeHBDYWNoZWRSZXN1bHQ6Omxhc3RSZXN1bHQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgSlNPYmplY3QqIG93bmVyKQogewogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENhY2hlZFJlc3VsdC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENhY2hl
ZFJlc3VsdC5oCShyZXZpc2lvbiAyNzI3MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9SZWdFeHBDYWNoZWRSZXN1bHQuaAkod29ya2luZyBjb3B5KQpAQCAtNjUsNyArNjUsNyBA
QCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX3JlaWZpZWQgPyBtX3JlaWZpZWRJbnB1dC5nZXQo
KSA6IG1fbGFzdElucHV0LmdldCgpOwogICAgIH0KIAotICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUo
U2xvdFZpc2l0b3ImKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIHZpc2l0
QWdncmVnYXRlKFZpc2l0b3ImKTsKIAogICAgIC8vIG1fbGFzdFJlZ0V4cCB3b3VsZCBiZSBudWxs
cHRyIHdoZW4gUmVnRXhwQ2FjaGVkUmVzdWx0IGlzIG5vdCByZWlmaWVkLgogICAgIC8vIElmIHdl
IGZpbmQgbV9sYXN0UmVnRXhwIGlzIG51bGxwdHIsIGl0IG1lYW5zIHRoaXMgc2hvdWxkIGhvbGQg
dGhlIGVtcHR5IFJlZ0V4cC4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Jl
Z0V4cEdsb2JhbERhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1JlZ0V4cEdsb2JhbERhdGEuY3BwCShyZXZpc2lvbiAyNzI3MTApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBHbG9iYWxEYXRhLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzAsMTEgKzMwLDE1IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi12b2lkIFJlZ0V4cEds
b2JhbERhdGE6OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8
dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgUmVnRXhwR2xvYmFsRGF0YTo6dmlzaXRBZ2dyZWdhdGUo
VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBtX2NhY2hlZFJlc3VsdC52aXNpdEFnZ3JlZ2F0ZSh2
aXNpdG9yKTsKIH0KIAordGVtcGxhdGUgdm9pZCBSZWdFeHBHbG9iYWxEYXRhOjp2aXNpdEFnZ3Jl
Z2F0ZShBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIFJlZ0V4cEdsb2JhbERh
dGE6OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJik7CisKIEpTVmFsdWUgUmVnRXhwR2xvYmFs
RGF0YTo6Z2V0QmFja3JlZihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCB1bnNpZ25lZCBp
KQogewogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cEdsb2JhbERhdGEuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBHbG9iYWxEYXRhLmgJKHJldmlzaW9uIDI3
MjcxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cEdsb2JhbERhdGEu
aAkod29ya2luZyBjb3B5KQpAQCAtNDEsNyArNDEsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRJ
bnB1dChKU0dsb2JhbE9iamVjdCosIEpTU3RyaW5nKik7CiAgICAgSlNTdHJpbmcqIGlucHV0KCkg
eyByZXR1cm4gbV9jYWNoZWRSZXN1bHQuaW5wdXQoKTsgfQogCi0gICAgdm9pZCB2aXNpdEFnZ3Jl
Z2F0ZShTbG90VmlzaXRvciYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQg
dmlzaXRBZ2dyZWdhdGUoVmlzaXRvciYpOwogCiAgICAgSlNWYWx1ZSBnZXRCYWNrcmVmKEpTR2xv
YmFsT2JqZWN0KiwgdW5zaWduZWQpOwogICAgIEpTVmFsdWUgZ2V0TGFzdFBhcmVuKEpTR2xvYmFs
T2JqZWN0Kik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBPYmpl
Y3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4
cE9iamVjdC5jcHAJKHJldmlzaW9uIDI3MjcxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1JlZ0V4cE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDcgKzQ2LDggQEAg
dm9pZCBSZWdFeHBPYmplY3Q6OmZpbmlzaENyZWF0aW9uKFZNJiB2bQogICAgIEFTU0VSVCh0eXBl
KCkgPT0gUmVnRXhwT2JqZWN0VHlwZSk7CiB9CiAKLXZvaWQgUmVnRXhwT2JqZWN0Ojp2aXNpdENo
aWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBl
bmFtZSBWaXNpdG9yPgordm9pZCBSZWdFeHBPYmplY3Q6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2Vs
bCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBSZWdFeHBPYmplY3QqIHRoaXNPYmpl
Y3QgPSBqc0Nhc3Q8UmVnRXhwT2JqZWN0Kj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9J
TkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNTUsNiArNTYsOCBAQCB2b2lkIFJlZ0V4
cE9iamVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqCiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09i
amVjdC0+bV9sYXN0SW5kZXgpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oUmVnRXhwT2Jq
ZWN0KTsKKwogYm9vbCBSZWdFeHBPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdChKU09iamVjdCog
b2JqZWN0LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWUgcHJvcGVy
dHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0
LT52bSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwT2Jq
ZWN0LmgJKHJldmlzaW9uIDI3MjcxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1JlZ0V4cE9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzMsNyArMTMzLDcgQEAgcHJpdmF0
ZToKICAgICBKU19FWFBPUlRfUFJJVkFURSBSZWdFeHBPYmplY3QoVk0mLCBTdHJ1Y3R1cmUqLCBS
ZWdFeHAqKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7
CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7
CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIGJvb2wgbGFzdEluZGV4SXNXcml0
YWJsZSgpIGNvbnN0CiAgICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U2FtcGxpbmdQcm9maWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5jcHAJKHJldmlzaW9uIDI3MjcxMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NhbXBsaW5nUHJvZmlsZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC02NTIsNyArNjUyLDcgQEAgdm9pZCBTYW1wbGluZ1Byb2ZpbGVyOjpwcm9jZXNzVW52
ZXJpZmllZAogICAgIG1fdW5wcm9jZXNzZWRTdGFja1RyYWNlcy5jbGVhcigpOwogfQogCi12b2lk
IFNhbXBsaW5nUHJvZmlsZXI6OnZpc2l0KFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvcikKK3ZvaWQg
U2FtcGxpbmdQcm9maWxlcjo6dmlzaXQoQWJzdHJhY3RTbG90VmlzaXRvciYgc2xvdFZpc2l0b3Ip
CiB7CiAgICAgUkVMRUFTRV9BU1NFUlQobV9sb2NrLmlzTG9ja2VkKCkpOwogICAgIGZvciAoSlND
ZWxsKiBjZWxsIDogbV9saXZlQ2VsbFBvaW50ZXJzKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1NhbXBsaW5nUHJvZmlsZXIuaAkocmV2aXNpb24gMjcyNzEwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNzEsNyArMTcxLDcgQEAgcHVibGljOgogICAgIHZvaWQgbm90aWNlSlNM
b2NrQWNxdWlzaXRpb24oKTsKICAgICB2b2lkIG5vdGljZVZNRW50cnkoKTsKICAgICB2b2lkIHNo
dXRkb3duKCk7Ci0gICAgdm9pZCB2aXNpdChTbG90VmlzaXRvciYpOworICAgIHZvaWQgdmlzaXQo
QWJzdHJhY3RTbG90VmlzaXRvciYpOwogICAgIExvY2smIGdldExvY2soKSB7IHJldHVybiBtX2xv
Y2s7IH0KICAgICB2b2lkIHNldFRpbWluZ0ludGVydmFsKFNlY29uZHMgaW50ZXJ2YWwpIHsgbV90
aW1pbmdJbnRlcnZhbCA9IGludGVydmFsOyB9CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBz
dGFydCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVkQXJndW1l
bnRzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29w
ZWRBcmd1bWVudHMuY3BwCShyZXZpc2lvbiAyNzI3MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TY29wZWRBcmd1bWVudHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05OCw3ICs5
OCw4IEBAIFNjb3BlZEFyZ3VtZW50cyogU2NvcGVkQXJndW1lbnRzOjpjcmVhdGUKICAgICByZXR1
cm4gcmVzdWx0OwogfQogCi12b2lkIFNjb3BlZEFyZ3VtZW50czo6dmlzaXRDaGlsZHJlbihKU0Nl
bGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRv
cj4KK3ZvaWQgU2NvcGVkQXJndW1lbnRzOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGws
IFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgU2NvcGVkQXJndW1lbnRzKiB0aGlzT2JqZWN0ID0g
c3RhdGljX2Nhc3Q8U2NvcGVkQXJndW1lbnRzKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVD
VF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtMTE1LDYgKzExNiw4IEBAIHZvaWQg
U2NvcGVkQXJndW1lbnRzOjp2aXNpdENoaWxkcmVuKEpTQ2UKICAgICB9CiB9CiAKK0RFRklORV9W
SVNJVF9DSElMRFJFTihTY29wZWRBcmd1bWVudHMpOworCiBTdHJ1Y3R1cmUqIFNjb3BlZEFyZ3Vt
ZW50czo6Y3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgSlNWYWx1ZSBwcm90b3R5cGUpCiB7CiAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZt
LCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oU2NvcGVkQXJndW1lbnRzVHlwZSwg
U3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU2NvcGVkQXJndW1lbnRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvU2NvcGVkQXJndW1lbnRzLmgJKHJldmlzaW9uIDI3MjcxMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlZEFyZ3VtZW50cy5oCSh3b3JraW5nIGNvcHkp
CkBAIC02Myw5ICs2Myw5IEBAIHB1YmxpYzoKICAgICAKICAgICAvLyBDcmVhdGVzIGFuIGFyZ3Vt
ZW50cyBvYmplY3QgYnkgY29weWluZyB0aGUgYXJndW1lbnRzIGZyb20gYSB3ZWxsLWRlZmluZWQg
c3RhY2sgbG9jYXRpb24uCiAgICAgc3RhdGljIFNjb3BlZEFyZ3VtZW50cyogY3JlYXRlQnlDb3B5
aW5nRnJvbShWTSYsIFN0cnVjdHVyZSosIFJlZ2lzdGVyKiBhcmd1bWVudHNTdGFydCwgdW5zaWdu
ZWQgdG90YWxMZW5ndGgsIEpTRnVuY3Rpb24qIGNhbGxlZSwgU2NvcGVkQXJndW1lbnRzVGFibGUq
LCBKU0xleGljYWxFbnZpcm9ubWVudCopOwotICAgIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hp
bGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKLSAgICAKKworICAgIERFQ0xBUkVfVklTSVRf
Q0hJTERSRU47CisKICAgICB1aW50MzJfdCBpbnRlcm5hbExlbmd0aCgpIGNvbnN0CiAgICAgewog
ICAgICAgICByZXR1cm4gbV90b3RhbExlbmd0aDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1NjcmlwdEV4ZWN1dGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1NjcmlwdEV4ZWN1dGFibGUuY3BwCShyZXZpc2lvbiAyNzI3MTAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY3JpcHRFeGVjdXRhYmxlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDQsNiArNDQsOCBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAorZXh0
ZXJuIGJvb2wgbWxhbVZlcmJvc2U7CisKIGNvbnN0IENsYXNzSW5mbyBTY3JpcHRFeGVjdXRhYmxl
OjpzX2luZm8gPSB7ICJTY3JpcHRFeGVjdXRhYmxlIiwgJkV4ZWN1dGFibGVCYXNlOjpzX2luZm8s
IG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoU2NyaXB0RXhlY3V0YWJsZSkg
fTsKIAogU2NyaXB0RXhlY3V0YWJsZTo6U2NyaXB0RXhlY3V0YWJsZShTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSwgVk0mIHZtLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIGJvb2wgaXNJblN0cmljdENv
bnRleHQsIERlcml2ZWRDb250ZXh0VHlwZSBkZXJpdmVkQ29udGV4dFR5cGUsIGJvb2wgaXNJbkFy
cm93RnVuY3Rpb25Db250ZXh0LCBib29sIGlzSW5zaWRlT3JkaW5hcnlGdW5jdGlvbiwgRXZhbENv
bnRleHRUeXBlIGV2YWxDb250ZXh0VHlwZSwgSW50cmluc2ljIGludHJpbnNpYykKQEAgLTIwNiw4
ICsyMDgsMTQgQEAgdm9pZCBTY3JpcHRFeGVjdXRhYmxlOjppbnN0YWxsQ29kZShWTSYgdgogICAg
ICAgICAgICAgZGVidWdnZXItPnJlZ2lzdGVyQ29kZUJsb2NrKGdlbmVyaWNDb2RlQmxvY2spOwog
ICAgIH0KIAotICAgIGlmIChvbGRDb2RlQmxvY2spCisgICAgaWYgKG9sZENvZGVCbG9jaykgewog
ICAgICAgICBvbGRDb2RlQmxvY2stPnVubGlua0luY29taW5nQ2FsbHMoKTsKKy8vICAgICAgICBp
ZiAobWxhbVZlcmJvc2UgJiYgb2xkQ29kZUJsb2NrLT5tX21sYW1GbGFnKSB7CisvLyAgICAgICAg
ICAgIGRhdGFMb2dMbigiXG4gICAgKioqIG1sYW0gU2NyaXB0RXhlY3V0YWJsZTo6aW5zdGFsbENv
ZGUoKTogSU5TVEFMTGluZyBvdmVyIG9sZCBDQiAod2l0aCBtbGFtRmxhZyBzZXQpICIsIG9sZENv
ZGVCbG9jayk7CisvLyAgICAgICAgICAgIFdURlJlcG9ydEJhY2t0cmFjZSgpOworLy8gICAgICAg
ICAgICBkYXRhTG9nTG4oKTsKKy8vICAgICAgICB9CisgICAgfQogCiAgICAgdm0uaGVhcC53cml0
ZUJhcnJpZXIodGhpcyk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
aW1wbGVUeXBlZEFycmF5Q29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwCShyZXZpc2lv
biAyNzI3MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TaW1wbGVUeXBlZEFy
cmF5Q29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYyLDcgKzYyLDcgQEAgYm9vbCBT
aW1wbGVUeXBlZEFycmF5Q29udHJvbGxlcjo6aXNBdG9taQogICAgIHJldHVybiBtX2FsbG93QXRv
bWljc1dhaXQ7CiB9CiAKLWJvb2wgU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXI6OkpTQXJyYXlC
dWZmZXJPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpV
bmtub3duPiBoYW5kbGUsIHZvaWQqLCBKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBj
aGFyKiogcmVhc29uKQorYm9vbCBTaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlcjo6SlNBcnJheUJ1
ZmZlck93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVu
a25vd24+IGhhbmRsZSwgdm9pZCosIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvciwg
Y29uc3QgY2hhcioqIHJlYXNvbikKIHsKICAgICBpZiAoVU5MSUtFTFkocmVhc29uKSkKICAgICAg
ICAgKnJlYXNvbiA9ICJKU0FycmF5QnVmZmVyIGlzIG9wYXF1ZSByb290IjsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2ltcGxlVHlwZWRBcnJh
eUNvbnRyb2xsZXIuaAkocmV2aXNpb24gMjcyNzEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXIuaAkod29ya2luZyBjb3B5KQpAQCAt
NTgsNyArNTgsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIGNsYXNzIEpTQXJyYXlCdWZmZXJP
d25lciBmaW5hbCA6IHB1YmxpYyBXZWFrSGFuZGxlT3duZXIgewogICAgIHB1YmxpYzoKLSAgICAg
ICAgYm9vbCBpc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25v
d24+LCB2b2lkKiBjb250ZXh0LCBTbG90VmlzaXRvciYsIGNvbnN0IGNoYXIqKiByZWFzb24pIGZp
bmFsOworICAgICAgICBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxl
PEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIEFic3RyYWN0U2xvdFZpc2l0b3ImLCBjb25z
dCBjaGFyKiogcmVhc29uKSBmaW5hbDsKICAgICAgICAgdm9pZCBmaW5hbGl6ZShKU0M6OkhhbmRs
ZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0KSBmaW5hbDsKICAgICB9OwogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TbWFsbFN0cmluZ3MuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NtYWxsU3RyaW5ncy5jcHAJKHJldmlz
aW9uIDI3MjcxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NtYWxsU3RyaW5n
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY2LDcgKzY2LDcgQEAgdm9pZCBTbWFsbFN0cmluZ3M6
OmluaXRpYWxpemVDb21tb25TdHJpbgogICAgIHNldElzSW5pdGlhbGl6ZWQodHJ1ZSk7CiB9CiAK
LXZvaWQgU21hbGxTdHJpbmdzOjp2aXNpdFN0cm9uZ1JlZmVyZW5jZXMoU2xvdFZpc2l0b3ImIHZp
c2l0b3IpCit2b2lkIFNtYWxsU3RyaW5nczo6dmlzaXRTdHJvbmdSZWZlcmVuY2VzKEFic3RyYWN0
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgbV9uZWVkc1RvQmVWaXNpdGVkID0gZmFsc2U7
CiAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZChtX2VtcHR5U3RyaW5nKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NtYWxsU3RyaW5ncy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NtYWxsU3RyaW5ncy5oCShyZXZpc2lvbiAy
NzI3MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TbWFsbFN0cmluZ3MuaAko
d29ya2luZyBjb3B5KQpAQCAtNDksOSArNDksOSBAQCBjbGFzcyBTdHJpbmdJbXBsOwogCiBuYW1l
c3BhY2UgSlNDIHsKIAorY2xhc3MgQWJzdHJhY3RTbG90VmlzaXRvcjsKIGNsYXNzIFZNOwogY2xh
c3MgSlNTdHJpbmc7Ci1jbGFzcyBTbG90VmlzaXRvcjsKIAogc3RhdGljIGNvbnN0ZXhwciB1bnNp
Z25lZCBtYXhTaW5nbGVDaGFyYWN0ZXJTdHJpbmcgPSAweEZGOwogCkBAIC03OCw3ICs3OCw3IEBA
IHB1YmxpYzoKICAgICBKU1N0cmluZyoqIHNpbmdsZUNoYXJhY3RlclN0cmluZ3MoKSB7IHJldHVy
biAmbV9zaW5nbGVDaGFyYWN0ZXJTdHJpbmdzWzBdOyB9CiAKICAgICB2b2lkIGluaXRpYWxpemVD
b21tb25TdHJpbmdzKFZNJik7Ci0gICAgdm9pZCB2aXNpdFN0cm9uZ1JlZmVyZW5jZXMoU2xvdFZp
c2l0b3ImKTsKKyAgICB2b2lkIHZpc2l0U3Ryb25nUmVmZXJlbmNlcyhBYnN0cmFjdFNsb3RWaXNp
dG9yJik7CiAKICNkZWZpbmUgSlNDX0NPTU1PTl9TVFJJTkdTX0FDQ0VTU09SX0RFRklOSVRJT04o
bmFtZSkgXAogICAgIEpTU3RyaW5nKiBuYW1lIyNTdHJpbmcoKSBjb25zdCAgICAgICAgICAgICAg
ICAgICBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TcGFyc2VBcnJheVZh
bHVlTWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
cGFyc2VBcnJheVZhbHVlTWFwLmNwcAkocmV2aXNpb24gMjcyNzEwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU3BhcnNlQXJyYXlWYWx1ZU1hcC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTIxMCw3ICsyMTAsOCBAQCBKU1ZhbHVlIFNwYXJzZUFycmF5RW50cnk6OmdldE5vblNwYXJz
ZU1vCiAgICAgcmV0dXJuIEJhc2U6OmdldCgpOwogfQogCi12b2lkIFNwYXJzZUFycmF5VmFsdWVN
YXA6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3Rl
bXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFNwYXJzZUFycmF5VmFsdWVNYXA6OnZpc2l0
Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBTcGFy
c2VBcnJheVZhbHVlTWFwKiB0aGlzT2JqZWN0ID0ganNDYXN0PFNwYXJzZUFycmF5VmFsdWVNYXAq
PihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8o
KSk7CkBAIC0yMjMsNSArMjI0LDcgQEAgdm9pZCBTcGFyc2VBcnJheVZhbHVlTWFwOjp2aXNpdENo
aWxkcmVuKAogICAgIHZpc2l0b3IucmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKHRoaXNPYmplY3Qt
Pm1fcmVwb3J0ZWRDYXBhY2l0eSAqIHNpemVvZihNYXA6OktleVZhbHVlUGFpclR5cGUpKTsKIH0K
IAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKFNwYXJzZUFycmF5VmFsdWVNYXApOworCiB9IC8vIG5h
bWVzcGFjZSBKU0MKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3BhcnNl
QXJyYXlWYWx1ZU1hcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1NwYXJzZUFycmF5VmFsdWVNYXAuaAkocmV2aXNpb24gMjcyNzEwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU3BhcnNlQXJyYXlWYWx1ZU1hcC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xMTUsNyArMTE1LDcgQEAgcHVibGljOgogICAgIAogICAgIHN0YXRpYyBTdHJ1Y3R1cmUq
IGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBwcm90b3R5cGUp
OwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYp
OworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBib29sIHNwYXJzZU1vZGUoKQog
ICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0YWNrRnJhbWUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0YWNrRnJhbWUu
Y3BwCShyZXZpc2lvbiAyNzI3MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
dGFja0ZyYW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQxLDcgKzE0MSw4IEBAIFN0cmluZyBT
dGFja0ZyYW1lOjp0b1N0cmluZyhWTSYgdm0pIGNvbnMKICAgICByZXR1cm4gdHJhY2VCdWlsZC50
b1N0cmluZygpLmltcGwoKTsKIH0KIAotdm9pZCBTdGFja0ZyYW1lOjp2aXNpdENoaWxkcmVuKFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgU3Rh
Y2tGcmFtZTo6dmlzaXRDaGlsZHJlbkltcGwoVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBpZiAo
bV9jYWxsZWUpCiAgICAgICAgIHZpc2l0b3IuYXBwZW5kKG1fY2FsbGVlKTsKQEAgLTE0OSw1ICsx
NTAsNyBAQCB2b2lkIFN0YWNrRnJhbWU6OnZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0CiAgICAgICAg
IHZpc2l0b3IuYXBwZW5kKG1fY29kZUJsb2NrKTsKIH0KIAorREVGSU5FX0lOU1RBTkNFX1ZJU0lU
X0NISUxEUkVOKFN0YWNrRnJhbWUpOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RhY2tGcmFtZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0YWNrRnJhbWUuaAkocmV2aXNpb24gMjcyNzEw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RhY2tGcmFtZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAKICNpbmNsdWRlICJIZWFwLmgiCiAjaW5jbHVkZSAi
Vk0uaCIKKyNpbmNsdWRlICJTbG90VmlzaXRvck1hY3Jvcy5oIgogI2luY2x1ZGUgIldhc21JbmRl
eE9yTmFtZS5oIgogI2luY2x1ZGUgIldyaXRlQmFycmllci5oIgogI2luY2x1ZGUgPGxpbWl0cy5o
PgpAQCAtMzUsNyArMzYsNiBAQCBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgQ29kZUJsb2NrOwog
Y2xhc3MgSlNPYmplY3Q7Ci1jbGFzcyBTbG90VmlzaXRvcjsKIAogY2xhc3MgU3RhY2tGcmFtZSB7
CiBwdWJsaWM6CkBAIC01OCw3ICs1OCw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fYnl0
ZWNvZGVJbmRleDsKICAgICB9CiAgICAgCi0gICAgdm9pZCB2aXNpdENoaWxkcmVuKFNsb3RWaXNp
dG9yJik7CisgICAgREVDTEFSRV9JTlNUQU5DRV9WSVNJVF9DSElMRFJFTjsKICAgICBib29sIGlz
TWFya2VkKFZNJiB2bSkgY29uc3QgeyByZXR1cm4gKCFtX2NhbGxlZSB8fCB2bS5oZWFwLmlzTWFy
a2VkKG1fY2FsbGVlLmdldCgpKSkgJiYgKCFtX2NvZGVCbG9jayB8fCB2bS5oZWFwLmlzTWFya2Vk
KG1fY29kZUJsb2NrLmdldCgpKSk7IH0KIAogcHJpdmF0ZToKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAkocmV2aXNpb24gMjcyNzEwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTI2OCw3ICsxMjY4LDggQEAgdm9pZCBTdHJ1Y3R1cmU6OmRpZFRyYW5zaXRpb25Gcm9tVGhp
c1N0cgogICAgICAgICBtX3RyYW5zaXRpb25XYXRjaHBvaW50U2V0LmZpcmVBbGwodm0oKSwgU3Ry
dWN0dXJlRmlyZURldGFpbCh0aGlzKSk7CiB9CiAKLXZvaWQgU3RydWN0dXJlOjp2aXNpdENoaWxk
cmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBWaXNpdG9yPgordm9pZCBTdHJ1Y3R1cmU6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2Vs
bCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBTdHJ1Y3R1cmUqIHRoaXNPYmplY3QgPSBqc0Nh
c3Q8U3RydWN0dXJlKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlz
T2JqZWN0LCBpbmZvKCkpOwpAQCAtMTI5MCwzMiArMTI5MSw0NiBAQCB2b2lkIFN0cnVjdHVyZTo6
dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlCiAgICAgICAgIC8vIE5PVEU6IFRoaXMgY2FuIGludGVy
bGVhdmUgaW4gcGluKCksIGluIHdoaWNoIGNhc2UgaXQgbWF5IHNlZSBhIG51bGwgcHJvcGVydHkg
dGFibGUuCiAgICAgICAgIC8vIFRoYXQncyBmaW5lLCBiZWNhdXNlIHRoZW4gdGhlIGJhcnJpZXIg
d2lsbCBmaXJlIGFuZCB3ZSB3aWxsIHNjYW4gdGhpcyBhZ2Fpbi4KICAgICAgICAgdmlzaXRvci5h
cHBlbmQodGhpc09iamVjdC0+bV9wcm9wZXJ0eVRhYmxlVW5zYWZlKTsKLSAgICB9IGVsc2UgaWYg
KHZpc2l0b3IuaXNBbmFseXppbmdIZWFwKCkpCisgICAgfSBlbHNlIGlmICh2aXNpdG9yLnZtKCku
aXNBbmFseXppbmdIZWFwKCkpCiAgICAgICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1f
cHJvcGVydHlUYWJsZVVuc2FmZSk7CiAgICAgZWxzZSBpZiAodGhpc09iamVjdC0+bV9wcm9wZXJ0
eVRhYmxlVW5zYWZlKQogICAgICAgICB0aGlzT2JqZWN0LT5tX3Byb3BlcnR5VGFibGVVbnNhZmUu
Y2xlYXIoKTsKIH0KIAotYm9vbCBTdHJ1Y3R1cmU6OmlzQ2hlYXBEdXJpbmdHQyhWTSYgdm0pCitE
RUZJTkVfVklTSVRfQ0hJTERSRU4oU3RydWN0dXJlKTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVmlz
aXRvcj4KK2Jvb2wgU3RydWN0dXJlOjppc0NoZWFwRHVyaW5nR0MoVmlzaXRvciYgdmlzaXRvcikK
IHsKICAgICAvLyBGSVhNRTogV2UgY291bGQgbWFrZSB0aGlzIGV2ZW4gc2FmZXIgYnkgcmV0dXJu
aW5nIGZhbHNlIGlmIHRoaXMgc3RydWN0dXJlJ3MgcHJvcGVydHkgdGFibGUKICAgICAvLyBoYXMg
YW55IGxhcmdlIHByb3BlcnR5IG5hbWVzLgogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNTczMzQKICAgICAKLSAgICByZXR1cm4gKCFtX2dsb2JhbE9iamVj
dCB8fCB2bS5oZWFwLmlzTWFya2VkKG1fZ2xvYmFsT2JqZWN0LmdldCgpKSkKLSAgICAgICAgJiYg
KGhhc1BvbHlQcm90bygpIHx8ICFzdG9yZWRQcm90b3R5cGVPYmplY3QoKSB8fCB2bS5oZWFwLmlz
TWFya2VkKHN0b3JlZFByb3RvdHlwZU9iamVjdCgpKSk7CisgICAgcmV0dXJuICghbV9nbG9iYWxP
YmplY3QgfHwgdmlzaXRvci5pc01hcmtlZChtX2dsb2JhbE9iamVjdC5nZXQoKSkpCisgICAgICAg
ICYmIChoYXNQb2x5UHJvdG8oKSB8fCAhc3RvcmVkUHJvdG90eXBlT2JqZWN0KCkgfHwgdmlzaXRv
ci5pc01hcmtlZChzdG9yZWRQcm90b3R5cGVPYmplY3QoKSkpOwogfQogCi1ib29sIFN0cnVjdHVy
ZTo6bWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCi17Ci0gICAgVk0mIHZtID0gdmlz
aXRvci52bSgpOwotICAgIGlmICghaXNDaGVhcER1cmluZ0dDKHZtKSkKLSAgICAgICAgcmV0dXJu
IHZtLmhlYXAuaXNNYXJrZWQodGhpcyk7Ci0gICAgCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
PgorYm9vbCBTdHJ1Y3R1cmU6Om1hcmtJZkNoZWFwMShWaXNpdG9yJiB2aXNpdG9yKQorLy9ib29s
IFN0cnVjdHVyZTo6bWFya0lmQ2hlYXAxKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7
CisvLyAgICBWTSYgdm0gPSB2aXNpdG9yLnZtKCk7CisgICAgaWYgKCFpc0NoZWFwRHVyaW5nR0Mo
dmlzaXRvcikpCisvLyAgICAgICAgcmV0dXJuIHZtLmhlYXAuaXNNYXJrZWQodGhpcyk7IC8vIG1s
YW0gRklYTUUKKyAgICAgICAgcmV0dXJuIHZpc2l0b3IuaXNNYXJrZWQodGhpcyk7IC8vIG1sYW0g
RklYTUUKKwogICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQodGhpcyk7CiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKKy8vdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KKy8vYm9vbCBTdHJ1Y3R1
cmU6Om1hcmtJZkNoZWFwKFZpc2l0b3ImIHZpc2l0b3IpCisvL3sKKy8vICAgIHJldHVybiBtYXJr
SWZDaGVhcDEodmlzaXRvcik7IC8vIG1sYW0gRklYTUUgSEFDSyB0byBnZXQgdGhpcyBjb21waWxp
bmchISEKKy8vfQordGVtcGxhdGUgYm9vbCBTdHJ1Y3R1cmU6Om1hcmtJZkNoZWFwMShTbG90Vmlz
aXRvciYpOwordGVtcGxhdGUgYm9vbCBTdHJ1Y3R1cmU6Om1hcmtJZkNoZWFwMShBYnN0cmFjdFNs
b3RWaXNpdG9yJik7CisKIFJlZjxTdHJ1Y3R1cmVTaGFwZT4gU3RydWN0dXJlOjp0b1N0cnVjdHVy
ZVNoYXBlKEpTVmFsdWUgdmFsdWUsIGJvb2wmIHNhd1BvbHlQcm90b1N0cnVjdHVyZSkKIHsKICAg
ICBSZWY8U3RydWN0dXJlU2hhcGU+IGJhc2VTaGFwZSA9IFN0cnVjdHVyZVNoYXBlOjpjcmVhdGUo
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCShyZXZp
c2lvbiAyNzI3MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUu
aAkod29ya2luZyBjb3B5KQpAQCAtNjAsNyArNjAsNiBAQCBjbGFzcyBQcm9wZXJ0eU5hbWVBcnJh
eURhdGE7CiBjbGFzcyBQcm9wZXJ0eVRhYmxlOwogY2xhc3MgU3RydWN0dXJlQ2hhaW47CiBjbGFz
cyBTdHJ1Y3R1cmVTaGFwZTsKLWNsYXNzIFNsb3RWaXNpdG9yOwogY2xhc3MgSlNTdHJpbmc7CiBz
dHJ1Y3QgRHVtcENvbnRleHQ7CiBzdHJ1Y3QgSGFzaFRhYmxlOwpAQCAtMzEwLDcgKzMwOSw3IEBA
IHB1YmxpYzoKICAgICBKU1ZhbHVlIHByb3RvdHlwZUZvckxvb2t1cChKU0dsb2JhbE9iamVjdCos
IEpTQ2VsbCogYmFzZSkgY29uc3Q7CiAgICAgU3RydWN0dXJlQ2hhaW4qIHByb3RvdHlwZUNoYWlu
KFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU09iamVjdCogYmFzZSkgY29uc3Q7CiAgICAgU3RydWN0
dXJlQ2hhaW4qIHByb3RvdHlwZUNoYWluKEpTR2xvYmFsT2JqZWN0KiwgSlNPYmplY3QqIGJhc2Up
IGNvbnN0OwotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0
b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogICAgIAogICAgIC8vIEEgU3RydWN0
dXJlIGlzIGNoZWFwIHRvIG1hcmsgZHVyaW5nIEdDIGlmIGRvaW5nIHNvIHdvdWxkIG9ubHkgYWRk
IGEgc21hbGwgYW5kIGJvdW5kZWQgYW1vdW50CiAgICAgLy8gdG8gb3VyIGhlYXAgZm9vdHByaW50
LiBGb3IgZXhhbXBsZSwgaWYgdGhlIHN0cnVjdHVyZSByZWZlcnMgdG8gYSBnbG9iYWwgb2JqZWN0
IHRoYXQgaXMgbm90CkBAIC0zMTgsMTAgKzMxNywxMiBAQCBwdWJsaWM6CiAgICAgLy8gaW5jcmVh
c2UgaW4gZm9vdHByaW50IGJlY2F1c2Ugbm8gb3RoZXIgb2JqZWN0IHJlZmVycyB0byB0aGF0IGds
b2JhbCBvYmplY3QuIFRoaXMgbWV0aG9kCiAgICAgLy8gcmV0dXJucyB0cnVlIGlmIGFsbCB1c2Vy
LWNvbnRyb2xsZWQgKGFuZCBoZW5jZSB1bmJvdW5kZWQgaW4gc2l6ZSkgb2JqZWN0cyByZWZlcmVu
Y2VkIGZyb20gdGhlCiAgICAgLy8gU3RydWN0dXJlIGFyZSBhbHJlYWR5IG1hcmtlZC4KLSAgICBi
b29sIGlzQ2hlYXBEdXJpbmdHQyhWTSYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+
IGJvb2wgaXNDaGVhcER1cmluZ0dDKFZpc2l0b3ImKTsKICAgICAKICAgICAvLyBSZXR1cm5zIHRy
dWUgaWYgdGhpcyBzdHJ1Y3R1cmUgaXMgbm93IG1hcmtlZC4KLSAgICBib29sIG1hcmtJZkNoZWFw
KFNsb3RWaXNpdG9yJik7CisvLyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiBib29sIG1h
cmtJZkNoZWFwKFZpc2l0b3ImKTsKKy8vICAgIGJvb2wgbWFya0lmQ2hlYXAxKEFic3RyYWN0U2xv
dFZpc2l0b3ImKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiBib29sIG1hcmtJZkNo
ZWFwMShWaXNpdG9yJik7IC8vIG1sYW0gVEVTVAogICAgIAogICAgIGJvb2wgaGFzUmFyZURhdGEo
KSBjb25zdAogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVj
dHVyZUNoYWluLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TdHJ1Y3R1cmVDaGFpbi5jcHAJKHJldmlzaW9uIDI3MjcxMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUNoYWluLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjYs
NyArNjYsOCBAQCB2b2lkIFN0cnVjdHVyZUNoYWluOjpmaW5pc2hDcmVhdGlvbihWTSYgCiAgICAg
fQogfQogCi12b2lkIFN0cnVjdHVyZUNoYWluOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwg
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBT
dHJ1Y3R1cmVDaGFpbjo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2
aXNpdG9yKQogewogICAgIFN0cnVjdHVyZUNoYWluKiB0aGlzT2JqZWN0ID0ganNDYXN0PFN0cnVj
dHVyZUNoYWluKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2Jq
ZWN0LCBpbmZvKCkpOwpAQCAtODAsNCArODEsNiBAQCB2b2lkIFN0cnVjdHVyZUNoYWluOjp2aXNp
dENoaWxkcmVuKEpTQ2VsCiAgICAgfQogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oU3RydWN0
dXJlQ2hhaW4pOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1N0cnVjdHVyZUNoYWluLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlQ2hhaW4uaAkocmV2aXNpb24gMjcyNzEwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlQ2hhaW4uaAkod29ya2luZyBj
b3B5KQpAQCAtNTEsNyArNTEsNyBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgU3RydWN0dXJlQ2hh
aW4qIGNyZWF0ZShWTSYsIEpTT2JqZWN0Kik7CiAgICAgU3RydWN0dXJlSUQqIGhlYWQoKSB7IHJl
dHVybiBtX3ZlY3Rvci5nZXQoKTsgfQotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlND
ZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAg
c3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCiAgICAgewpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlUmFyZURhdGEuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZVJhcmVEYXRhLmNwcAkocmV2
aXNpb24gMjcyNzEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJl
UmFyZURhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Nyw3ICs2Nyw4IEBAIFN0cnVjdHVyZVJh
cmVEYXRhOjpTdHJ1Y3R1cmVSYXJlRGF0YShWTSYKICAgICAgICAgbV9wcmV2aW91cy5zZXQodm0s
IHRoaXMsIHByZXZpb3VzKTsKIH0KIAotdm9pZCBTdHJ1Y3R1cmVSYXJlRGF0YTo6dmlzaXRDaGls
ZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5h
bWUgVmlzaXRvcj4KK3ZvaWQgU3RydWN0dXJlUmFyZURhdGE6OnZpc2l0Q2hpbGRyZW5JbXBsKEpT
Q2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBTdHJ1Y3R1cmVSYXJlRGF0YSog
dGhpc09iamVjdCA9IGpzQ2FzdDxTdHJ1Y3R1cmVSYXJlRGF0YSo+KGNlbGwpOwogICAgIEFTU0VS
VF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTg2LDYgKzg3LDgg
QEAgdm9pZCBTdHJ1Y3R1cmVSYXJlRGF0YTo6dmlzaXRDaGlsZHJlbihKUwogICAgIH0KIH0KIAor
REVGSU5FX1ZJU0lUX0NISUxEUkVOKFN0cnVjdHVyZVJhcmVEYXRhKTsKKwogLy8gLS0tLS0tLS0t
LS0gQ2FjaGVkIHNwZWNpYWwgcHJvcGVydGllcyBoZWxwZXIgd2F0Y2hwb2ludCBjbGFzc2VzIC0t
LS0tLS0tLS0tCiAKIGNsYXNzIENhY2hlZFNwZWNpYWxQcm9wZXJ0eUFkYXB0aXZlSW5mZXJyZWRQ
cm9wZXJ0eVZhbHVlV2F0Y2hwb2ludCBmaW5hbCA6IHB1YmxpYyBBZGFwdGl2ZUluZmVycmVkUHJv
cGVydHlWYWx1ZVdhdGNocG9pbnRCYXNlIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1N0cnVjdHVyZVJhcmVEYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlUmFyZURhdGEuaAkocmV2aXNpb24gMjcyNzEwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlUmFyZURhdGEuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNjgsNyArNjgsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOwogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlND
ZWxsKik7CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNp
dG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIHN0YXRpYyBTdHJ1Y3R1
cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBwcm90b3R5
cGUpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TeW1ib2xUYWJsZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFi
bGUuY3BwCShyZXZpc2lvbiAyNzI3MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TeW1ib2xUYWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkyLDcgKzkyLDggQEAgdm9pZCBT
eW1ib2xUYWJsZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQogICAgIEJhc2U6OmZpbmlzaENyZWF0
aW9uKHZtKTsKIH0KIAotdm9pZCBTeW1ib2xUYWJsZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIHRo
aXNDZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+
Cit2b2lkIFN5bWJvbFRhYmxlOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIHRoaXNDZWxsLCBW
aXNpdG9yJiB2aXNpdG9yKQogewogICAgIFN5bWJvbFRhYmxlKiB0aGlzU3ltYm9sVGFibGUgPSBq
c0Nhc3Q8U3ltYm9sVGFibGUqPih0aGlzQ2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhF
UklUUyh0aGlzU3ltYm9sVGFibGUsIGluZm8oKSk7CkBAIC0xMDgsNiArMTA5LDggQEAgdm9pZCBT
eW1ib2xUYWJsZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIAogICAgIHRoaXNTeW1ib2xUYWJsZS0+
bV9sb2NhbFRvRW50cnkgPSBudWxscHRyOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oU3lt
Ym9sVGFibGUpOworCiBjb25zdCBTeW1ib2xUYWJsZTo6TG9jYWxUb0VudHJ5VmVjJiBTeW1ib2xU
YWJsZTo6bG9jYWxUb0VudHJ5KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYpCiB7CiAgICAgaWYg
KFVOTElLRUxZKCFtX2xvY2FsVG9FbnRyeSkpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1N5bWJvbFRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvU3ltYm9sVGFibGUuaAkocmV2aXNpb24gMjcyNzEwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtNzMz
LDcgKzczMyw3IEBAIHB1YmxpYzoKICAgICAgICAgbV9zaW5nbGV0b24ubm90aWZ5V3JpdGUodm0s
IHRoaXMsIHNjb3BlLCByZWFzb24pOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hp
bGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVO
OwogCiAgICAgREVDTEFSRV9FWFBPUlRfSU5GTzsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvVHlwZVByb2ZpbGVyTG9nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9UeXBlUHJvZmlsZXJMb2cuY3BwCShyZXZpc2lvbiAyNzI3MTAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlUHJvZmlsZXJMb2cuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMjQsNyArMTI0LDcgQEAgdm9pZCBUeXBlUHJvZmlsZXJMb2c6OnBy
b2Nlc3NMb2dFbnRyaWVzKAogICAgIH0KIH0KIAotdm9pZCBUeXBlUHJvZmlsZXJMb2c6OnZpc2l0
KFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBUeXBlUHJvZmlsZXJMb2c6OnZpc2l0KEFic3Ry
YWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgZm9yIChMb2dFbnRyeSogZW50cnkgPSBt
X2xvZ1N0YXJ0UHRyOyBlbnRyeSAhPSBtX2N1cnJlbnRMb2dFbnRyeVB0cjsgKytlbnRyeSkgewog
ICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKGVudHJ5LT52YWx1ZSk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlUHJvZmlsZXJMb2cuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlUHJvZmlsZXJMb2cuaAkocmV2
aXNpb24gMjcyNzEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZVByb2Zp
bGVyTG9nLmgJKHdvcmtpbmcgY29weSkKQEAgLTU5LDcgKzU5LDcgQEAgcHVibGljOgogICAgIEpT
X0VYUE9SVF9QUklWQVRFIHZvaWQgcHJvY2Vzc0xvZ0VudHJpZXMoVk0mLCBjb25zdCBTdHJpbmcm
KTsKICAgICBMb2dFbnRyeSogbG9nRW5kUHRyKCkgY29uc3QgeyByZXR1cm4gbV9sb2dFbmRQdHI7
IH0KIAotICAgIHZvaWQgdmlzaXQoU2xvdFZpc2l0b3ImKTsKKyAgICB2b2lkIHZpc2l0KEFic3Ry
YWN0U2xvdFZpc2l0b3ImKTsKIAogICAgIHN0YXRpYyBwdHJkaWZmX3QgbG9nU3RhcnRPZmZzZXQo
KSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoVHlwZVByb2ZpbGVyTG9nLCBtX2xvZ1N0YXJ0UHRy
KTsgfQogICAgIHN0YXRpYyBwdHJkaWZmX3QgY3VycmVudExvZ0VudHJ5T2Zmc2V0KCkgeyByZXR1
cm4gT0JKRUNUX09GRlNFVE9GKFR5cGVQcm9maWxlckxvZywgbV9jdXJyZW50TG9nRW50cnlQdHIp
OyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHJldmlzaW9uIDI3MjcxMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEyMSw2ICsxMjEsNyBAQCBjbGFzcyBGYXN0TWFsbG9jQWxpZ25lZE1lbW9yeUFsbG9jYXRvcjsK
IGNsYXNzIEdpZ2FjYWdlQWxpZ25lZE1lbW9yeUFsbG9jYXRvcjsKIGNsYXNzIEhhbmRsZVN0YWNr
OwogY2xhc3MgSGFzT3duUHJvcGVydHlDYWNoZTsKK2NsYXNzIEhlYXBBbmFseXplcjsKIGNsYXNz
IEhlYXBQcm9maWxlcjsKIGNsYXNzIElkZW50aWZpZXI7CiBjbGFzcyBJbnRlcnByZXRlcjsKQEAg
LTMxMCw2ICszMTEsMTAgQEAgcHVibGljOgogICAgIEhlYXBQcm9maWxlciogaGVhcFByb2ZpbGVy
KCkgY29uc3QgeyByZXR1cm4gbV9oZWFwUHJvZmlsZXIuZ2V0KCk7IH0KICAgICBKU19FWFBPUlRf
UFJJVkFURSBIZWFwUHJvZmlsZXImIGVuc3VyZUhlYXBQcm9maWxlcigpOwogCisgICAgYm9vbCBp
c0FuYWx5emluZ0hlYXAoKSBjb25zdCB7IHJldHVybiBtX2FjdGl2ZUhlYXBBbmFseXplcjsgfQor
ICAgIEhlYXBBbmFseXplciogYWN0aXZlSGVhcEFuYWx5emVyKCkgY29uc3QgeyByZXR1cm4gbV9h
Y3RpdmVIZWFwQW5hbHl6ZXI7IH0KKyAgICB2b2lkIHNldEFjdGl2ZUhlYXBBbmFseXplcihIZWFw
QW5hbHl6ZXIqIGFuYWx5emVyKSB7IG1fYWN0aXZlSGVhcEFuYWx5emVyID0gYW5hbHl6ZXI7IH0K
KwogI2lmIEVOQUJMRShTQU1QTElOR19QUk9GSUxFUikKICAgICBTYW1wbGluZ1Byb2ZpbGVyKiBz
YW1wbGluZ1Byb2ZpbGVyKCkgeyByZXR1cm4gbV9zYW1wbGluZ1Byb2ZpbGVyLmdldCgpOyB9CiAg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgU2FtcGxpbmdQcm9maWxlciYgZW5zdXJlU2FtcGxpbmdQcm9m
aWxlcihSZWY8U3RvcHdhdGNoPiYmKTsKQEAgLTExOTUsOSArMTIwMCwxMCBAQCBwdWJsaWM6CiAg
ICAgYm9vbCBkaWRFbnRlclZNIHsgZmFsc2UgfTsKIHByaXZhdGU6CiAgICAgYm9vbCBtX2ZhaWxO
ZXh0TmV3Q29kZUJsb2NrIHsgZmFsc2UgfTsKLSAgICBEZWxldGVQcm9wZXJ0eU1vZGUgbV9kZWxl
dGVQcm9wZXJ0eU1vZGUgeyBEZWxldGVQcm9wZXJ0eU1vZGU6OkRlZmF1bHQgfTsKICAgICBib29s
IG1fZ2xvYmFsQ29uc3RSZWRlY2xhcmF0aW9uU2hvdWxkVGhyb3cgeyB0cnVlIH07CiAgICAgYm9v
bCBtX3Nob3VsZEJ1aWxkUENUb0NvZGVPcmlnaW5NYXBwaW5nIHsgZmFsc2UgfTsKKyAgICBEZWxl
dGVQcm9wZXJ0eU1vZGUgbV9kZWxldGVQcm9wZXJ0eU1vZGUgeyBEZWxldGVQcm9wZXJ0eU1vZGU6
OkRlZmF1bHQgfTsKKyAgICBIZWFwQW5hbHl6ZXIqIG1fYWN0aXZlSGVhcEFuYWx5emVyIHsgbnVs
bHB0ciB9OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxDb2RlQ2FjaGU+IG1fY29kZUNhY2hlOwogICAg
IHN0ZDo6dW5pcXVlX3B0cjxJbnRsQ2FjaGU+IG1faW50bENhY2hlOwogICAgIHN0ZDo6dW5pcXVl
X3B0cjxCdWlsdGluRXhlY3V0YWJsZXM+IG1fYnVpbHRpbkV4ZWN1dGFibGVzOwpAQCAtMTIzOCw2
ICsxMjQ0LDcgQEAgcHJpdmF0ZToKICAgICBWTSogbV9wcmV2OyAvLyBSZXF1aXJlZCBieSBEb3Vi
bHlMaW5rZWRMaXN0Tm9kZS4KICAgICBWTSogbV9uZXh0OyAvLyBSZXF1aXJlZCBieSBEb3VibHlM
aW5rZWRMaXN0Tm9kZS4KIAorcHVibGljOgogICAgIC8vIEZyaWVuZHMgZm9yIGV4Y2VwdGlvbiBj
aGVja2luZyBwdXJwb3NlIG9ubHkuCiAgICAgZnJpZW5kIGNsYXNzIEhlYXA7CiAgICAgZnJpZW5k
IGNsYXNzIENhdGNoU2NvcGU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9X
ZWFrTWFwSW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvV2Vha01hcEltcGwuY3BwCShyZXZpc2lvbiAyNzI3MTApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9XZWFrTWFwSW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDggKzM5
LDkgQEAgdm9pZCBXZWFrTWFwSW1wbDxXZWFrTWFwQnVja2V0Pjo6ZGVzdHJveQogICAgIHN0YXRp
Y19jYXN0PFdlYWtNYXBJbXBsKj4oY2VsbCktPn5XZWFrTWFwSW1wbCgpOwogfQogCi10ZW1wbGF0
ZSA8dHlwZW5hbWUgV2Vha01hcEJ1Y2tldD4KLXZvaWQgV2Vha01hcEltcGw8V2Vha01hcEJ1Y2tl
dD46OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3Rl
bXBsYXRlPHR5cGVuYW1lIFdlYWtNYXBCdWNrZXQ+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
Pgordm9pZCBXZWFrTWFwSW1wbDxXZWFrTWFwQnVja2V0Pjo6dmlzaXRDaGlsZHJlbkltcGwoSlND
ZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFdlYWtNYXBJbXBsKiB0aGlzT2Jq
ZWN0ID0ganNDYXN0PFdlYWtNYXBJbXBsKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9J
TkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNDgsNiArNDksOCBAQCB2b2lkIFdlYWtN
YXBJbXBsPFdlYWtNYXBCdWNrZXQ+Ojp2aXNpdENoCiAgICAgdmlzaXRvci5yZXBvcnRFeHRyYU1l
bW9yeVZpc2l0ZWQodGhpc09iamVjdC0+bV9jYXBhY2l0eSAqIHNpemVvZihXZWFrTWFwQnVja2V0
KSk7CiB9CiAKK0RFRklORV9URU1QTEFURV9WSVNJVF9DSElMRFJFTih0ZW1wbGF0ZTx0eXBlbmFt
ZSBXZWFrTWFwQnVja2V0PiwgV2Vha01hcEltcGw8V2Vha01hcEJ1Y2tldD4pOworCiB0ZW1wbGF0
ZSA8dHlwZW5hbWUgV2Vha01hcEJ1Y2tldD4KIHNpemVfdCBXZWFrTWFwSW1wbDxXZWFrTWFwQnVj
a2V0Pjo6ZXN0aW1hdGVkU2l6ZShKU0NlbGwqIGNlbGwsIFZNJiB2bSkKIHsKQEAgLTU2LDE1ICs1
OSwxNSBAQCBzaXplX3QgV2Vha01hcEltcGw8V2Vha01hcEJ1Y2tldD46OmVzdGltCiB9CiAKIHRl
bXBsYXRlIDw+Ci12b2lkIFdlYWtNYXBJbXBsPFdlYWtNYXBCdWNrZXQ8V2Vha01hcEJ1Y2tldERh
dGFLZXk+Pjo6dmlzaXRPdXRwdXRDb25zdHJhaW50cyhKU0NlbGwqLCBTbG90VmlzaXRvciYpCit2
b2lkIFdlYWtNYXBJbXBsPFdlYWtNYXBCdWNrZXQ8V2Vha01hcEJ1Y2tldERhdGFLZXk+Pjo6dmlz
aXRPdXRwdXRDb25zdHJhaW50cyhKU0NlbGwqLCBBYnN0cmFjdFNsb3RWaXNpdG9yJikKIHsKICAg
ICAvLyBPbmx5IEpTV2Vha01hcCBuZWVkcyB0byBoYXJ2ZXN0IHZhbHVlIHJlZmVyZW5jZXMKIH0K
IAogdGVtcGxhdGUgPD4KLXZvaWQgV2Vha01hcEltcGw8V2Vha01hcEJ1Y2tldDxXZWFrTWFwQnVj
a2V0RGF0YUtleVZhbHVlPj46OnZpc2l0T3V0cHV0Q29uc3RyYWludHMoSlNDZWxsKiBjZWxsLCBT
bG90VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgV2Vha01hcEltcGw8V2Vha01hcEJ1Y2tldDxXZWFr
TWFwQnVja2V0RGF0YUtleVZhbHVlPj46OnZpc2l0T3V0cHV0Q29uc3RyYWludHMoSlNDZWxsKiBj
ZWxsLCBBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewotICAgIFZNJiB2bSA9IHZpc2l0
b3Iudm0oKTsKKy8vICAgIFZNJiB2bSA9IHZpc2l0b3Iudm0oKTsKICAgICBhdXRvKiB0aGlzT2Jq
ZWN0ID0ganNDYXN0PFdlYWtNYXBJbXBsKj4oY2VsbCk7CiAgICAgYXV0byBsb2NrZXIgPSBob2xk
TG9jayh0aGlzT2JqZWN0LT5jZWxsTG9jaygpKTsKICAgICBhdXRvKiBidWZmZXIgPSB0aGlzT2Jq
ZWN0LT5idWZmZXIoKTsKQEAgLTcyLDcgKzc1LDggQEAgdm9pZCBXZWFrTWFwSW1wbDxXZWFrTWFw
QnVja2V0PFdlYWtNYXBCdQogICAgICAgICBhdXRvKiBidWNrZXQgPSBidWZmZXIgKyBpbmRleDsK
ICAgICAgICAgaWYgKGJ1Y2tldC0+aXNFbXB0eSgpIHx8IGJ1Y2tldC0+aXNEZWxldGVkKCkpCiAg
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgaWYgKCF2bS5oZWFwLmlzTWFya2VkKGJ1Y2tl
dC0+a2V5KCkpKQorLy8gICAgICAgIGlmICghdm0uaGVhcC5pc01hcmtlZChidWNrZXQtPmtleSgp
KSkgLy8gbWxhbQorICAgICAgICBpZiAoIXZpc2l0b3IuaXNNYXJrZWQoYnVja2V0LT5rZXkoKSkp
CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgYnVja2V0LT52aXNpdEFnZ3JlZ2F0ZSh2
aXNpdG9yKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9XZWFr
TWFwSW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dl
YWtNYXBJbXBsLmgJKHJldmlzaW9uIDI3MjcxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1dlYWtNYXBJbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0NCw4ICsxNDQsMTAgQEAg
cHVibGljOgogICAgICAgICBjbGVhclZhbHVlKCk7CiAgICAgfQogCisvLyAgICB0ZW1wbGF0ZSA8
dHlwZW5hbWUgVmlzaXRvciwgdHlwZW5hbWUgVCA9IERhdGE+CisvLyAgICBBTFdBWVNfSU5MSU5F
IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTxULCBXZWFrTWFwQnVja2V0RGF0
YUtleVZhbHVlPjo6dmFsdWU+Ojp0eXBlIHZpc2l0QWdncmVnYXRlKFZpc2l0b3ImIHZpc2l0b3Ip
CiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQgPSBEYXRhPgotICAgIEFMV0FZU19JTkxJTkUgdHlw
ZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19zYW1lPFQsIFdlYWtNYXBCdWNrZXREYXRhS2V5
VmFsdWU+Ojp2YWx1ZT46OnR5cGUgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3Ip
CisgICAgQUxXQVlTX0lOTElORSB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8
VCwgV2Vha01hcEJ1Y2tldERhdGFLZXlWYWx1ZT46OnZhbHVlPjo6dHlwZSB2aXNpdEFnZ3JlZ2F0
ZShBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogICAgIHsKICAgICAgICAgdmlzaXRvci5h
cHBlbmQobV9kYXRhLnZhbHVlKTsKICAgICB9CkBAIC0yMDIsNyArMjA0LDcgQEAgcHVibGljOgog
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0Rlc3RydWN0aW9uID0gdHJ1ZTsKICAgICBz
dGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGls
ZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVEVNUExBVEVfVklTSVRf
Q0hJTERSRU47CiAKICAgICBzdGF0aWMgc2l6ZV90IGVzdGltYXRlZFNpemUoSlNDZWxsKiwgVk0m
KTsKIApAQCAtMzExLDcgKzMxMyw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHZtLndlYWtT
ZXRTcGFjZTxtb2RlPigpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0T3V0cHV0Q29u
c3RyYWludHMoSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBzdGF0aWMgdm9pZCB2aXNpdE91
dHB1dENvbnN0cmFpbnRzKEpTQ2VsbCosIEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKICAgICB2b2lk
IGZpbmFsaXplVW5jb25kaXRpb25hbGx5KFZNJik7CiAKIHByaXZhdGU6CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvdG9vbHMvSlNEb2xsYXJWTS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3Rvb2xzL0pTRG9sbGFyVk0uY3BwCShyZXZpc2lvbiAyNzI3MTApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvSlNEb2xsYXJWTS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTIyNCwxNCArMjI0LDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBmaW5pc2hDcmVhdGlv
bihWTSYsIFJvb3QqKTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBj
ZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKLSAgICB7Ci0gICAgICAgIERvbGxhclZNQXNzZXJ0
U2NvcGUgYXNzZXJ0U2NvcGU7Ci0gICAgICAgIEVsZW1lbnQqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8
RWxlbWVudCo+KGNlbGwpOwotICAgICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNP
YmplY3QsIGluZm8oKSk7Ci0gICAgICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwg
dmlzaXRvcik7Ci0gICAgICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fcm9vdCk7Ci0g
ICAgfQorICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBzdGF0aWMgRWxlbWVudEhh
bmRsZU93bmVyKiBoYW5kbGVPd25lcigpOwogCkBAIC0yNDcsMTAgKzI0MCwyMiBAQCBwcml2YXRl
OgogICAgIFdyaXRlQmFycmllcjxSb290PiBtX3Jvb3Q7CiB9OwogCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBWaXNpdG9yPgordm9pZCBFbGVtZW50Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGws
IFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgRG9sbGFyVk1Bc3NlcnRTY29wZSBhc3NlcnRTY29w
ZTsKKyAgICBFbGVtZW50KiB0aGlzT2JqZWN0ID0ganNDYXN0PEVsZW1lbnQqPihjZWxsKTsKKyAg
ICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CisgICAgQmFz
ZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKKyAgICB2aXNpdG9yLmFwcGVu
ZCh0aGlzT2JqZWN0LT5tX3Jvb3QpOworfQorCitERUZJTkVfVklTSVRfQ0hJTERSRU4oRWxlbWVu
dCk7CisKIGNsYXNzIEVsZW1lbnRIYW5kbGVPd25lciBmaW5hbCA6IHB1YmxpYyBXZWFrSGFuZGxl
T3duZXIgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIGJvb2wg
aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5k
bGUsIHZvaWQqLCBTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikgZmlu
YWwKKyAgICBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6
VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvciwgY29u
c3QgY2hhcioqIHJlYXNvbikgZmluYWwKICAgICB7CiAgICAgICAgIERvbGxhclZNQXNzZXJ0U2Nv
cGUgYXNzZXJ0U2NvcGU7CiAgICAgICAgIGlmIChVTkxJS0VMWShyZWFzb24pKQpAQCAtMzA0LDE4
ICszMDksMjMgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0s
IGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVG
bGFncyksIGluZm8oKSk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihK
U0NlbGwqIHRoaXNPYmplY3QsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQotICAgIHsKLSAgICAgICAg
RG9sbGFyVk1Bc3NlcnRTY29wZSBhc3NlcnRTY29wZTsKLSAgICAgICAgQVNTRVJUX0dDX09CSkVD
VF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwotICAgICAgICBCYXNlOjp2aXNpdENoaWxk
cmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwotICAgICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qo
dGhpc09iamVjdCk7Ci0gICAgfQorICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKIHByaXZh
dGU6CiAgICAgV2VhazxFbGVtZW50PiBtX2VsZW1lbnQ7CiB9OwogCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBWaXNpdG9yPgordm9pZCBSb290Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIHRoaXNPYmpl
Y3QsIFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgRG9sbGFyVk1Bc3NlcnRTY29wZSBhc3NlcnRT
Y29wZTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7
CisgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKKyAgICB2aXNp
dG9yLmFkZE9wYXF1ZVJvb3QodGhpc09iamVjdCk7Cit9CisKK0RFRklORV9WSVNJVF9DSElMRFJF
TihSb290KTsKKwogY2xhc3MgU2ltcGxlT2JqZWN0IDogcHVibGljIEpTTm9uRmluYWxPYmplY3Qg
ewogcHVibGljOgogICAgIFNpbXBsZU9iamVjdChWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJl
KQpAQCAtMzQwLDE0ICszNTAsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBzaW1wbGVPYmpl
Y3Q7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGws
IFNsb3RWaXNpdG9yJiB2aXNpdG9yKQotICAgIHsKLSAgICAgICAgRG9sbGFyVk1Bc3NlcnRTY29w
ZSBhc3NlcnRTY29wZTsKLSAgICAgICAgU2ltcGxlT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0
PFNpbXBsZU9iamVjdCo+KGNlbGwpOwotICAgICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRT
KHRoaXNPYmplY3QsIGluZm8oKSk7Ci0gICAgICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09i
amVjdCwgdmlzaXRvcik7Ci0gICAgICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1faGlk
ZGVuVmFsdWUpOwotICAgIH0KKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgc3Rh
dGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCiAgICAgewpAQCAtMzgwLDYgKzM4MywxOCBA
QCBwcml2YXRlOgogICAgIFdyaXRlQmFycmllcjxKU0M6OlVua25vd24+IG1faGlkZGVuVmFsdWU7
CiB9OwogCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBTaW1wbGVPYmplY3Q6OnZp
c2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBE
b2xsYXJWTUFzc2VydFNjb3BlIGFzc2VydFNjb3BlOworICAgIFNpbXBsZU9iamVjdCogdGhpc09i
amVjdCA9IGpzQ2FzdDxTaW1wbGVPYmplY3QqPihjZWxsKTsKKyAgICBBU1NFUlRfR0NfT0JKRUNU
X0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CisgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0
aGlzT2JqZWN0LCB2aXNpdG9yKTsKKyAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2hp
ZGRlblZhbHVlKTsKK30KKworREVGSU5FX1ZJU0lUX0NISUxEUkVOKFNpbXBsZU9iamVjdCk7CisK
IGNsYXNzIEltcHVyZUdldHRlciA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKIHB1YmxpYzoK
ICAgICBJbXB1cmVHZXR0ZXIoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKQEAgLTQzNiwx
NCArNDUxLDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gQmFzZTo6Z2V0T3duUHJvcGVydHlT
bG90KG9iamVjdCwgZ2xvYmFsT2JqZWN0LCBuYW1lLCBzbG90KTsKICAgICB9CiAKLSAgICBzdGF0
aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3Ip
Ci0gICAgewotICAgICAgICBEb2xsYXJWTUFzc2VydFNjb3BlIGFzc2VydFNjb3BlOwotICAgICAg
ICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNlbGwsIGluZm8oKSk7Ci0gICAgICAgIEJhc2U6
OnZpc2l0Q2hpbGRyZW4oY2VsbCwgdmlzaXRvcik7Ci0gICAgICAgIEltcHVyZUdldHRlciogdGhp
c09iamVjdCA9IGpzQ2FzdDxJbXB1cmVHZXR0ZXIqPihjZWxsKTsKLSAgICAgICAgdmlzaXRvci5h
cHBlbmQodGhpc09iamVjdC0+bV9kZWxlZ2F0ZSk7Ci0gICAgfQorICAgIERFQ0xBUkVfVklTSVRf
Q0hJTERSRU47CiAKICAgICB2b2lkIHNldERlbGVnYXRlKFZNJiB2bSwgSlNPYmplY3QqIGRlbGVn
YXRlKQogICAgIHsKQEAgLTQ1NCw2ICs0NjIsMTggQEAgcHJpdmF0ZToKICAgICBXcml0ZUJhcnJp
ZXI8SlNPYmplY3Q+IG1fZGVsZWdhdGU7CiB9OwogCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
Pgordm9pZCBJbXB1cmVHZXR0ZXI6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlz
aXRvciYgdmlzaXRvcikKK3sKKyAgICBEb2xsYXJWTUFzc2VydFNjb3BlIGFzc2VydFNjb3BlOwor
ICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2VsbCwgaW5mbygpKTsKKyAgICBCYXNlOjp2
aXNpdENoaWxkcmVuKGNlbGwsIHZpc2l0b3IpOworICAgIEltcHVyZUdldHRlciogdGhpc09iamVj
dCA9IGpzQ2FzdDxJbXB1cmVHZXR0ZXIqPihjZWxsKTsKKyAgICB2aXNpdG9yLmFwcGVuZCh0aGlz
T2JqZWN0LT5tX2RlbGVnYXRlKTsKK30KKworREVGSU5FX1ZJU0lUX0NISUxEUkVOKEltcHVyZUdl
dHRlcik7CisKIHN0YXRpYyBKU0NfREVDTEFSRV9DVVNUT01fR0VUVEVSKGN1c3RvbUdldHRlclZh
bHVlR2V0dGVyKTsKIHN0YXRpYyBKU0NfREVDTEFSRV9DVVNUT01fR0VUVEVSKGN1c3RvbUdldHRl
ckFjZXNzb3JHZXR0ZXIpOwogCkBAIC0xODIyLDE0ICsxODQyLDcgQEAgcHVibGljOgogICAgICAg
ICBwdXREaXJlY3ROYXRpdmVGdW5jdGlvbih2bSwgZ2xvYmFsT2JqZWN0LCBJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKHZtLCAiYWRkQnl0ZXMiKSwgMCwgZnVuY3Rpb25XYXNtU3RyZWFtaW5nQ29tcGls
ZXJBZGRCeXRlcywgTm9JbnRyaW5zaWMsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0
dHJpYnV0ZTo6RG9udEVudW0pKTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxk
cmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCi0gICAgewotICAgICAgICBE
b2xsYXJWTUFzc2VydFNjb3BlIGFzc2VydFNjb3BlOwotICAgICAgICBhdXRvKiB0aGlzT2JqZWN0
ID0ganNDYXN0PFdhc21TdHJlYW1pbmdDb21waWxlcio+KGNlbGwpOwotICAgICAgICBBU1NFUlRf
R0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7Ci0gICAgICAgIEJhc2U6OnZp
c2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7Ci0gICAgICAgIHZpc2l0b3IuYXBwZW5k
KHRoaXNPYmplY3QtPm1fcHJvbWlzZSk7Ci0gICAgfQorICAgIERFQ0xBUkVfVklTSVRfQ0hJTERS
RU47CiAKICAgICBERUNMQVJFX0lORk87CiAKQEAgLTE4MzcsNiArMTg1MCwxOCBAQCBwdWJsaWM6
CiAgICAgUmVmPFdhc206OlN0cmVhbWluZ0NvbXBpbGVyPiBtX3N0cmVhbWluZ0NvbXBpbGVyOwog
fTsKIAordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgV2FzbVN0cmVhbWluZ0NvbXBp
bGVyOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCit7
CisgICAgRG9sbGFyVk1Bc3NlcnRTY29wZSBhc3NlcnRTY29wZTsKKyAgICBhdXRvKiB0aGlzT2Jq
ZWN0ID0ganNDYXN0PFdhc21TdHJlYW1pbmdDb21waWxlcio+KGNlbGwpOworICAgIEFTU0VSVF9H
Q19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKKyAgICBCYXNlOjp2aXNpdENo
aWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOworICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmpl
Y3QtPm1fcHJvbWlzZSk7Cit9CisKK0RFRklORV9WSVNJVF9DSElMRFJFTihXYXNtU3RyZWFtaW5n
Q29tcGlsZXIpOworCiBjb25zdCBDbGFzc0luZm8gV2FzbVN0cmVhbWluZ0NvbXBpbGVyOjpzX2lu
Zm8gPSB7ICJXYXNtU3RyZWFtaW5nQ29tcGlsZXIiLCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBu
dWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKFdhc21TdHJlYW1pbmdDb21waWxlcikgfTsKIAog
SlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGZ1bmN0aW9uV2FzbVN0cmVhbWluZ0NvbXBpbGVyQWRk
Qnl0ZXMsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFt
ZSkpCkBAIC0zNjk5LDEzICszNzI0LDE2IEBAIHZvaWQgSlNEb2xsYXJWTTo6YWRkQ29uc3RydWN0
aWJsZUZ1bmN0aW8KICAgICBwdXREaXJlY3Qodm0sIGlkZW50aWZpZXIsIEpTRnVuY3Rpb246OmNy
ZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBhcmd1bWVudHMsIGlkZW50aWZpZXIuc3RyaW5nKCksIGZ1
bmN0aW9uLCBOb0ludHJpbnNpYywgZnVuY3Rpb24pLCBqc0RvbGxhclZNUHJvcGVydHlBdHRyaWJ1
dGVzKTsKIH0KIAotdm9pZCBKU0RvbGxhclZNOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwg
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBK
U0RvbGxhclZNOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0
b3IpCiB7CiAgICAgSlNEb2xsYXJWTSogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0RvbGxhclZNKj4o
Y2VsbCk7CiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKICAg
ICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX29iamVjdERvaW5nU2lkZUVmZmVjdFB1dFdp
dGhvdXRDb3JyZWN0U2xvdFN0YXR1c1N0cnVjdHVyZSk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElM
RFJFTihKU0RvbGxhclZNKTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKIElHTk9SRV9XQVJOSU5H
U19FTkQKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9KU0RvbGxhclZNLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0pTRG9sbGFyVk0uaAkocmV2
aXNpb24gMjcyNzEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0pTRG9sbGFyVk0u
aAkod29ya2luZyBjb3B5KQpAQCAtNzQsNyArNzQsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgYWRk
RnVuY3Rpb24oVk0mLCBKU0dsb2JhbE9iamVjdCosIGNvbnN0IGNoYXIqIG5hbWUsIE5hdGl2ZUZ1
bmN0aW9uLCB1bnNpZ25lZCBhcmd1bWVudHMpOwogICAgIHZvaWQgYWRkQ29uc3RydWN0aWJsZUZ1
bmN0aW9uKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBjb25zdCBjaGFyKiBuYW1lLCBOYXRpdmVGdW5j
dGlvbiwgdW5zaWduZWQgYXJndW1lbnRzKTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwog
CiAgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gbV9vYmplY3REb2luZ1NpZGVFZmZlY3RQdXRX
aXRob3V0Q29ycmVjdFNsb3RTdGF0dXNTdHJ1Y3R1cmU7CiB9OwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbUdsb2JhbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbUdsb2JhbC5jcHAJKHJldmlzaW9uIDI3MjcxMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21HbG9iYWwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MDMsNyArMTAzLDggQEAgdm9pZCBHbG9iYWw6OnNldChKU0dsb2JhbE9iamVjdCogZ2xvYmFsTwog
ICAgIH0KIH0KIAotdm9pZCBHbG9iYWw6OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJiB2aXNp
dG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgR2xvYmFsOjp2aXNpdEFnZ3Jl
Z2F0ZShWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHN3aXRjaCAobV90eXBlKSB7CiAgICAgY2Fz
ZSBXYXNtOjpUeXBlOjpFeHRlcm5yZWY6CkBAIC0xMTcsNiArMTE4LDkgQEAgdm9pZCBHbG9iYWw6
OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJgogICAgIH0KIH0KIAordGVtcGxhdGUgdm9pZCBH
bG9iYWw6OnZpc2l0QWdncmVnYXRlKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZv
aWQgR2xvYmFsOjp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYpOworCiB9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6R2xvYmFsCiAKICNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtR2xvYmFsLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUdsb2JhbC5oCShyZXZpc2lvbiAyNzI3MTApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtR2xvYmFsLmgJKHdvcmtpbmcgY29weSkK
QEAgLTU3LDcgKzU3LDcgQEAgcHVibGljOgogICAgIEpTVmFsdWUgZ2V0KEpTR2xvYmFsT2JqZWN0
KikgY29uc3Q7CiAgICAgdWludDY0X3QgZ2V0UHJpbWl0aXZlKCkgY29uc3QgeyByZXR1cm4gbV92
YWx1ZS5tX3ByaW1pdGl2ZTsgfQogICAgIHZvaWQgc2V0KEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1
ZSk7Ci0gICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYpOworICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgdmlzaXRBZ2dyZWdhdGUoVmlzaXRvciYpOwogCiAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgVD4gVCogb3duZXIoKSBjb25zdCB7IHJldHVybiByZWludGVycHJl
dF9jYXN0PFQqPihtX293bmVyKTsgfQogICAgIHZvaWQgc2V0T3duZXIoSlNPYmplY3QqIG93bmVy
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRhYmxlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGFibGUuY3BwCShyZXZpc2lv
biAyNzI3MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGFibGUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xNjYsNyArMTY2LDggQEAgSlNWYWx1ZSBUYWJsZTo6Z2V0KHVpbnQz
Ml90IGluZGV4KSBjb25zdAogICAgIHJldHVybiBtX2pzVmFsdWVzLmdldCgpW2luZGV4ICYgbV9t
YXNrXS5nZXQoKTsKIH0KIAotdm9pZCBUYWJsZTo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3Im
IHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBUYWJsZTo6dmlzaXRB
Z2dyZWdhdGUoVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBSRUxFQVNFX0FTU0VSVChtX293bmVy
KTsKICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fb3duZXItPmNlbGxMb2NrKCkpOwpAQCAt
MTc0LDYgKzE3NSw5IEBAIHZvaWQgVGFibGU6OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJiAK
ICAgICAgICAgdmlzaXRvci5hcHBlbmQobV9qc1ZhbHVlcy5nZXQoKVtpXSk7CiB9CiAKK3RlbXBs
YXRlIHZvaWQgVGFibGU6OnZpc2l0QWdncmVnYXRlKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3Rl
bXBsYXRlIHZvaWQgVGFibGU6OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJik7CisKIFR5cGUg
VGFibGU6Ondhc21UeXBlKCkgY29uc3QKIHsKICAgICBpZiAoaXNFeHRlcm5yZWZUYWJsZSgpKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRhYmxlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRhYmxlLmgJKHJldmlzaW9uIDI3Mjcx
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UYWJsZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC04MCw3ICs4MCw3IEBAIHB1YmxpYzoKICAgICBPcHRpb25hbDx1aW50MzJfdD4gZ3Jv
dyh1aW50MzJfdCBkZWx0YSwgSlNWYWx1ZSBkZWZhdWx0VmFsdWUpOwogICAgIHZvaWQgY29weShj
b25zdCBUYWJsZSogc3JjVGFibGUsIHVpbnQzMl90IGRzdEluZGV4LCB1aW50MzJfdCBzcmNJbmRl
eCk7CiAKLSAgICB2b2lkIHZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJik7CisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCB2aXNpdEFnZ3JlZ2F0ZShWaXNpdG9yJik7CiAKIHBy
b3RlY3RlZDoKICAgICBUYWJsZSh1aW50MzJfdCBpbml0aWFsLCBPcHRpb25hbDx1aW50MzJfdD4g
bWF4aW11bSwgVGFibGVFbGVtZW50VHlwZSA9IFRhYmxlRWxlbWVudFR5cGU6OkV4dGVybnJlZik7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1RvV2FzbUlDQ2FsbGVlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1RvV2FzbUlD
Q2FsbGVlLmNwcAkocmV2aXNpb24gMjcyNzEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vanMvSlNUb1dhc21JQ0NhbGxlZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDcgKzQ5LDgg
QEAgU3RydWN0dXJlKiBKU1RvV2FzbUlDQ2FsbGVlOjpjcmVhdGVTdHJ1YwogICAgIHJldHVybiBT
dHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKEpT
Q2FsbGVlVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwogfQogCi12b2lkIEpTVG9XYXNt
SUNDYWxsZWU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRv
cikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTVG9XYXNtSUNDYWxsZWU6OnZp
c2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBK
U1RvV2FzbUlDQ2FsbGVlKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVG9XYXNtSUNDYWxsZWUqPihj
ZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7
CkBAIC01OCw2ICs1OSw4IEBAIHZvaWQgSlNUb1dhc21JQ0NhbGxlZTo6dmlzaXRDaGlsZHJlbihK
U0MKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2Z1bmN0aW9uKTsKIH0KIAorREVG
SU5FX1ZJU0lUX0NISUxEUkVOKEpTVG9XYXNtSUNDYWxsZWUpOworCiB9IC8vIG5hbWVzcGFjZSBK
U0MKIAogI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL0pTVG9XYXNtSUNDYWxsZWUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1RvV2FzbUlDQ2FsbGVlLmgJKHJldmlzaW9uIDI3Mjcx
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTVG9XYXNtSUNDYWxsZWUuaAko
d29ya2luZyBjb3B5KQpAQCAtNTYsNyArNTYsNyBAQCBwcml2YXRlOgogICAgIEpTVG9XYXNtSUND
YWxsZWUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSkKICAgICAgICAgOiBCYXNlKHZtLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSkKICAg
ICB7IH0KLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9y
Jik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIFdyaXRlQmFycmllcjxXZWJB
c3NlbWJseUZ1bmN0aW9uPiBtX2Z1bmN0aW9uOwogfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suY3BwCShy
ZXZpc2lvbiAyNzI3MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFz
c2VtYmx5Q29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODIsNyArODIsOCBAQCB2b2lk
IEpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6OmNsZWFySlNDYWxsCiAgICAgICAgICgqaXRlciktPnVu
bGluayh2bSk7CiB9CiAKLXZvaWQgSlNXZWJBc3NlbWJseUNvZGVCbG9jazo6dmlzaXRDaGlsZHJl
bihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUg
VmlzaXRvcj4KK3ZvaWQgSlNXZWJBc3NlbWJseUNvZGVCbG9jazo6dmlzaXRDaGlsZHJlbkltcGwo
SlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTV2ViQXNzZW1ibHlDb2Rl
QmxvY2sqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNXZWJBc3NlbWJseUNvZGVCbG9jayo+KGNlbGwp
OwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAg
LTkwLDYgKzkxLDggQEAgdm9pZCBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrOjp2aXNpdENoaWxkcgog
ICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CiB9CiAKK0RFRklO
RV9WSVNJVF9DSElMRFJFTihKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKTsKKwogdm9pZCBKU1dlYkFz
c2VtYmx5Q29kZUJsb2NrOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxseShWTSYgdm0pCiB7CiAgICAg
Zm9yIChhdXRvIGl0ZXIgPSBtX2NhbGxMaW5rSW5mb3MuYmVnaW4oKTsgISFpdGVyOyArK2l0ZXIp
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJs
b2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJB
c3NlbWJseUNvZGVCbG9jay5oCShyZXZpc2lvbiAyNzI3MTApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAg
LTg2LDcgKzg2LDcgQEAgcHJpdmF0ZToKICAgICBERUNMQVJFX0VYUE9SVF9JTkZPOwogICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0Rlc3RydWN0aW9uID0gdHJ1ZTsKICAgICBzdGF0aWMg
dm9pZCBkZXN0cm95KEpTQ2VsbCopOwotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlND
ZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAg
UmVmPFdhc206OkNvZGVCbG9jaz4gbV9jb2RlQmxvY2s7CiAgICAgVmVjdG9yPE1hY3JvQXNzZW1i
bGVyQ29kZVJlZjxXYXNtRW50cnlQdHJUYWc+PiBtX3dhc21Ub0pTRXhpdFN0dWJzOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUdsb2JhbC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUds
b2JhbC5jcHAJKHJldmlzaW9uIDI3MjcxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL0pTV2ViQXNzZW1ibHlHbG9iYWwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MSw3ICs3MSw4
IEBAIHZvaWQgSlNXZWJBc3NlbWJseUdsb2JhbDo6ZGVzdHJveShKU0NlbGwKICAgICBzdGF0aWNf
Y2FzdDxKU1dlYkFzc2VtYmx5R2xvYmFsKj4oY2VsbCktPkpTV2ViQXNzZW1ibHlHbG9iYWw6On5K
U1dlYkFzc2VtYmx5R2xvYmFsKCk7CiB9CiAKLXZvaWQgSlNXZWJBc3NlbWJseUdsb2JhbDo6dmlz
aXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8
dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNXZWJBc3NlbWJseUdsb2JhbDo6dmlzaXRDaGlsZHJl
bkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTV2ViQXNzZW1i
bHlHbG9iYWwqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNXZWJBc3NlbWJseUdsb2JhbCo+KGNlbGwp
OwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAg
LTgwLDYgKzgxLDggQEAgdm9pZCBKU1dlYkFzc2VtYmx5R2xvYmFsOjp2aXNpdENoaWxkcmVuKAog
ICAgIHRoaXNPYmplY3QtPmdsb2JhbCgpLT52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKIH0KIAor
REVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTV2ViQXNzZW1ibHlHbG9iYWwpOworCiB9IC8vIG5hbWVz
cGFjZSBKU0MKIAogI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlHbG9iYWwuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5R2xvYmFsLmgJKHJl
dmlzaW9uIDI3MjcxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNz
ZW1ibHlHbG9iYWwuaAkod29ya2luZyBjb3B5KQpAQCAtNTksNyArNTksNyBAQCBwdWJsaWM6CiBw
cml2YXRlOgogICAgIEpTV2ViQXNzZW1ibHlHbG9iYWwoVk0mLCBTdHJ1Y3R1cmUqLCBSZWY8V2Fz
bTo6R2xvYmFsPiYmKTsKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7Ci0gICAgc3RhdGlj
IHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVf
VklTSVRfQ0hJTERSRU47CiAKICAgICBSZWY8V2FzbTo6R2xvYmFsPiBtX2dsb2JhbDsKIH07Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNz
ZW1ibHlJbnN0YW5jZS5jcHAJKHJldmlzaW9uIDI3MjcxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTczLDcgKzczLDggQEAgdm9pZCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OmRlc3Ryb3koSlNDZQog
ICAgIHN0YXRpY19jYXN0PEpTV2ViQXNzZW1ibHlJbnN0YW5jZSo+KGNlbGwpLT5KU1dlYkFzc2Vt
Ymx5SW5zdGFuY2U6On5KU1dlYkFzc2VtYmx5SW5zdGFuY2UoKTsKIH0KIAotdm9pZCBKU1dlYkFz
c2VtYmx5SW5zdGFuY2U6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYg
dmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTV2ViQXNzZW1ibHlJ
bnN0YW5jZTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9y
KQogewogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNXZWJBc3NlbWJseUluc3RhbmNl
Kj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZv
KCkpOwpAQCAtMTAyLDYgKzEwMyw4IEBAIHZvaWQgSlNXZWJBc3NlbWJseUluc3RhbmNlOjp2aXNp
dENoaWxkcmUKICAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZCh3cmFwcGVyLmdldCgp
KTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTV2ViQXNzZW1ibHlJbnN0YW5jZSk7CisK
IHZvaWQgSlNXZWJBc3NlbWJseUluc3RhbmNlOjpmaW5hbGl6ZUNyZWF0aW9uKFZNJiB2bSwgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmPFdhc206OkNvZGVCbG9jaz4mJiB3YXNtQ29k
ZUJsb2NrLCBKU09iamVjdCogaW1wb3J0T2JqZWN0LCBXYXNtOjpDcmVhdGlvbk1vZGUgY3JlYXRp
b25Nb2RlKQogewogICAgIG1faW5zdGFuY2UtPmZpbmFsaXplQ3JlYXRpb24odGhpcywgd2FzbUNv
ZGVCbG9jay5jb3B5UmVmKCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
SlNXZWJBc3NlbWJseUluc3RhbmNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmgJKHJldmlzaW9uIDI3MjcxMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xMDUsNyArMTA1LDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBK
U1dlYkFzc2VtYmx5SW5zdGFuY2UoVk0mLCBTdHJ1Y3R1cmUqLCBSZWY8V2FzbTo6SW5zdGFuY2U+
JiYpOwogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBKU1dlYkFzc2VtYmx5TW9kdWxlKiwg
V2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQqKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVu
KEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAog
ICAgIFJlZjxXYXNtOjpJbnN0YW5jZT4gbV9pbnN0YW5jZTsKICAgICBWTSogbV92bTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNZW1vcnkuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlN
ZW1vcnkuY3BwCShyZXZpc2lvbiAyNzI3MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9KU1dlYkFzc2VtYmx5TWVtb3J5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU5LDcgKzE1
OSw4IEBAIHZvaWQgSlNXZWJBc3NlbWJseU1lbW9yeTo6ZGVzdHJveShKU0NlbGwKICAgICBtZW1v
cnktPkpTV2ViQXNzZW1ibHlNZW1vcnk6On5KU1dlYkFzc2VtYmx5TWVtb3J5KCk7CiB9CiAKLXZv
aWQgSlNXZWJBc3NlbWJseU1lbW9yeTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNXZWJB
c3NlbWJseU1lbW9yeTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2
aXNpdG9yKQogewogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNXZWJBc3NlbWJseU1l
bW9yeSo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwg
aW5mbygpKTsKQEAgLTE2OSw2ICsxNzAsOCBAQCB2b2lkIEpTV2ViQXNzZW1ibHlNZW1vcnk6OnZp
c2l0Q2hpbGRyZW4oCiAgICAgdmlzaXRvci5yZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQodGhpc09i
amVjdC0+bWVtb3J5KCkuc2l6ZSgpKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTV2Vi
QXNzZW1ibHlNZW1vcnkpOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIEVOQUJM
RShXRUJBU1NFTUJMWSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2Vi
QXNzZW1ibHlNZW1vcnkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9KU1dlYkFzc2VtYmx5TWVtb3J5LmgJKHJldmlzaW9uIDI3MjcxMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNZW1vcnkuaAkod29ya2luZyBjb3B5
KQpAQCAtNjMsNyArNjMsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIEpTV2ViQXNzZW1ibHlN
ZW1vcnkoVk0mLCBTdHJ1Y3R1cmUqKTsKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7Ci0g
ICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAg
IERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBSZWY8V2FzbTo6TWVtb3J5PiBtX21lbW9y
eTsKICAgICBXcml0ZUJhcnJpZXI8SlNBcnJheUJ1ZmZlcj4gbV9idWZmZXJXcmFwcGVyOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJs
eU1vZHVsZS5jcHAJKHJldmlzaW9uIDI3MjcxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjQsNyAr
MTI0LDggQEAgdm9pZCBKU1dlYkFzc2VtYmx5TW9kdWxlOjpzZXRDb2RlQmxvY2soVgogICAgIG1f
Y29kZUJsb2Nrc1tzdGF0aWNfY2FzdDxzaXplX3Q+KG1vZGUpXS5zZXQodm0sIHRoaXMsIGNvZGVC
bG9jayk7CiB9CiAKLXZvaWQgSlNXZWJBc3NlbWJseU1vZHVsZTo6dmlzaXRDaGlsZHJlbihKU0Nl
bGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRv
cj4KK3ZvaWQgSlNXZWJBc3NlbWJseU1vZHVsZTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBj
ZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTV2ViQXNzZW1ibHlNb2R1bGUqIHRoaXNP
YmplY3QgPSBqc0Nhc3Q8SlNXZWJBc3NlbWJseU1vZHVsZSo+KGNlbGwpOwogICAgIEFTU0VSVF9H
Q19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTEzNSw2ICsxMzYsOCBA
QCB2b2lkIEpTV2ViQXNzZW1ibHlNb2R1bGU6OnZpc2l0Q2hpbGRyZW4oCiAgICAgICAgIHZpc2l0
b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fY29kZUJsb2Nrc1tpXSk7CiB9CiAKK0RFRklORV9WSVNJ
VF9DSElMRFJFTihKU1dlYkFzc2VtYmx5TW9kdWxlKTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAK
ICNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5oCShyZXZpc2lvbiAyNzI3
MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTgwLDcgKzgwLDcgQEAgcHJpdmF0ZToKIAogICAgIEpTV2Vi
QXNzZW1ibHlNb2R1bGUoVk0mLCBTdHJ1Y3R1cmUqLCBSZWY8V2FzbTo6TW9kdWxlPiYmKTsKICAg
ICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJl
bihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAK
ICAgICBSZWY8V2FzbTo6TW9kdWxlPiBtX21vZHVsZTsKICAgICBXcml0ZUJhcnJpZXI8U3ltYm9s
VGFibGU+IG1fZXhwb3J0U3ltYm9sVGFibGU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9qcy9KU1dlYkFzc2VtYmx5VGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlUYWJsZS5jcHAJKHJldmlzaW9uIDI3Mjcx
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlUYWJsZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTcyLDcgKzcyLDggQEAgdm9pZCBKU1dlYkFzc2VtYmx5VGFi
bGU6OmRlc3Ryb3koSlNDZWxsKgogICAgIHN0YXRpY19jYXN0PEpTV2ViQXNzZW1ibHlUYWJsZSo+
KGNlbGwpLT5KU1dlYkFzc2VtYmx5VGFibGU6On5KU1dlYkFzc2VtYmx5VGFibGUoKTsKIH0KIAot
dm9pZCBKU1dlYkFzc2VtYmx5VGFibGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90
VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTV2Vi
QXNzZW1ibHlUYWJsZTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2
aXNpdG9yKQogewogICAgIEpTV2ViQXNzZW1ibHlUYWJsZSogdGhpc09iamVjdCA9IGpzQ2FzdDxK
U1dlYkFzc2VtYmx5VGFibGUqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRT
KHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC04MSw2ICs4Miw4IEBAIHZvaWQgSlNXZWJBc3NlbWJs
eVRhYmxlOjp2aXNpdENoaWxkcmVuKEoKICAgICB0aGlzT2JqZWN0LT50YWJsZSgpLT52aXNpdEFn
Z3JlZ2F0ZSh2aXNpdG9yKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTV2ViQXNzZW1i
bHlUYWJsZSk7CisKIGJvb2wgSlNXZWJBc3NlbWJseVRhYmxlOjpncm93KHVpbnQzMl90IGRlbHRh
LCBKU1ZhbHVlIGRlZmF1bHRWYWx1ZSkKIHsKICAgICBpZiAoZGVsdGEgPT0gMCkKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlUYWJsZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlUYWJsZS5o
CShyZXZpc2lvbiAyNzI3MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dl
YkFzc2VtYmx5VGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtNzAsOCArNzAsOCBAQCBwdWJsaWM6
CiBwcml2YXRlOgogICAgIEpTV2ViQXNzZW1ibHlUYWJsZShWTSYsIFN0cnVjdHVyZSosIFJlZjxX
YXNtOjpUYWJsZT4mJik7CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOwotICAgIHN0YXRp
YyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKLQorICAgIERFQ0xB
UkVfVklTSVRfQ0hJTERSRU47CisvLwogICAgIFJlZjxXYXNtOjpUYWJsZT4gbV90YWJsZTsKIH07
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rp
b24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFz
c2VtYmx5RnVuY3Rpb24uY3BwCShyZXZpc2lvbiAyNzI3MTApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDUyLDcgKzQ1Miw4IEBAIFdlYkFzc2VtYmx5RnVuY3Rpb246OldlYkFzc2VtYmx5RnVuY3Rpb24K
ICAgICAsIG1faW1wb3J0YWJsZUZ1bmN0aW9uIHsgc2lnbmF0dXJlSW5kZXgsIHdhc21Ub1dhc21F
bnRyeXBvaW50TG9hZExvY2F0aW9uIH0KIHsgfQogCi12b2lkIFdlYkFzc2VtYmx5RnVuY3Rpb246
OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBs
YXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFdlYkFzc2VtYmx5RnVuY3Rpb246OnZpc2l0Q2hp
bGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBXZWJBc3Nl
bWJseUZ1bmN0aW9uKiB0aGlzT2JqZWN0ID0ganNDYXN0PFdlYkFzc2VtYmx5RnVuY3Rpb24qPihj
ZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7
CkBAIC00NjEsNiArNDYyLDggQEAgdm9pZCBXZWJBc3NlbWJseUZ1bmN0aW9uOjp2aXNpdENoaWxk
cmVuKAogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fanNUb1dhc21JQ0NhbGxlZSk7
CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihXZWJBc3NlbWJseUZ1bmN0aW9uKTsKKwogdm9p
ZCBXZWJBc3NlbWJseUZ1bmN0aW9uOjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKIHsKICAgICBzdGF0
aWNfY2FzdDxXZWJBc3NlbWJseUZ1bmN0aW9uKj4oY2VsbCktPldlYkFzc2VtYmx5RnVuY3Rpb246
On5XZWJBc3NlbWJseUZ1bmN0aW9uKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5oCShyZXZpc2lvbiAyNzI3MTApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmgJKHdv
cmtpbmcgY29weSkKQEAgLTg2LDcgKzg2LDcgQEAgcHVibGljOgogICAgIFdhc206Okluc3RhbmNl
KiBwcmV2aW91c0luc3RhbmNlKENhbGxGcmFtZSopOwogCiBwcml2YXRlOgotICAgIHN0YXRpYyB2
b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJ
U0lUX0NISUxEUkVOOwogICAgIFdlYkFzc2VtYmx5RnVuY3Rpb24oVk0mLCBOYXRpdmVFeGVjdXRh
YmxlKiwgSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqLCBXYXNtOjpDYWxsZWUmIGpzRW50cnlw
b2ludCwgV2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbjo6TG9hZExvY2F0aW9uIGVudHJ5cG9p
bnRMb2FkTG9jYXRpb24sIFdhc206OlNpZ25hdHVyZUluZGV4KTsKIAogICAgIE1hY3JvQXNzZW1i
bGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBqc0NhbGxFbnRyeXBvaW50U2xvdygpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbkJhc2UuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5
RnVuY3Rpb25CYXNlLmNwcAkocmV2aXNpb24gMjcyNzEwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbkJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00MSw3ICs0MSw4IEBAIFdlYkFzc2VtYmx5RnVuY3Rpb25CYXNlOjpXZWJBc3NlbWJseUZ1bmMK
ICAgICA6IEJhc2Uodm0sIGV4ZWN1dGFibGUsIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKQogeyB9
CiAKLXZvaWQgV2ViQXNzZW1ibHlGdW5jdGlvbkJhc2U6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBj
ZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2
b2lkIFdlYkFzc2VtYmx5RnVuY3Rpb25CYXNlOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNl
bGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgV2ViQXNzZW1ibHlGdW5jdGlvbkJhc2UqIHRo
aXNPYmplY3QgPSBqc0Nhc3Q8V2ViQXNzZW1ibHlGdW5jdGlvbkJhc2UqPihjZWxsKTsKICAgICBB
U1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC00OSw2ICs1
MCw4IEBAIHZvaWQgV2ViQXNzZW1ibHlGdW5jdGlvbkJhc2U6OnZpc2l0Q2hpbGQKICAgICB2aXNp
dG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2luc3RhbmNlKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NI
SUxEUkVOKFdlYkFzc2VtYmx5RnVuY3Rpb25CYXNlKTsKKwogdm9pZCBXZWJBc3NlbWJseUZ1bmN0
aW9uQmFzZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBOYXRpdmVFeGVjdXRhYmxlKiBleGVjdXRh
YmxlLCB1bnNpZ25lZCBsZW5ndGgsIGNvbnN0IFN0cmluZyYgbmFtZSwgSlNXZWJBc3NlbWJseUlu
c3RhbmNlKiBpbnN0YW5jZSkKIHsKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSwgZXhlY3V0
YWJsZSwgbGVuZ3RoLCBuYW1lKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L1dlYkFzc2VtYmx5RnVuY3Rpb25CYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbkJhc2UuaAkocmV2aXNpb24gMjcyNzEw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbkJh
c2UuaAkod29ya2luZyBjb3B5KQpAQCAtNDYsNyArNDYsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGlj
IHB0cmRpZmZfdCBvZmZzZXRPZkluc3RhbmNlKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFdl
YkFzc2VtYmx5RnVuY3Rpb25CYXNlLCBtX2luc3RhbmNlKTsgfQogCiBwcm90ZWN0ZWQ6Ci0gICAg
c3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERF
Q0xBUkVfVklTSVRfQ0hJTERSRU47CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIE5hdGl2
ZUV4ZWN1dGFibGUqLCB1bnNpZ25lZCBsZW5ndGgsIGNvbnN0IFN0cmluZyYgbmFtZSwgSlNXZWJB
c3NlbWJseUluc3RhbmNlKik7CiAgICAgV2ViQXNzZW1ibHlGdW5jdGlvbkJhc2UoVk0mLCBOYXRp
dmVFeGVjdXRhYmxlKiwgSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqKTsKIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9k
dWxlUmVjb3JkLmNwcAkocmV2aXNpb24gMjcyNzEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03
OCw3ICs3OCw4IEBAIHZvaWQgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmZpbmlzaENyZWEKICAg
ICB9CiB9CiAKLXZvaWQgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OnZpc2l0Q2hpbGRyZW4oSlND
ZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0
b3I+Cit2b2lkIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjp2aXNpdENoaWxkcmVuSW1wbChKU0Nl
bGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgV2ViQXNzZW1ibHlNb2R1bGVSZWNv
cmQqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8V2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQqPihjZWxsKTsK
ICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC04
OCw2ICs4OSw4IEBAIHZvaWQgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OnZpc2l0Q2hpbGQKICAg
ICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2V4cG9ydHNPYmplY3QpOwogfQogCitERUZJ
TkVfVklTSVRfQ0hJTERSRU4oV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQpOworCiB2b2lkIFdlYkFz
c2VtYmx5TW9kdWxlUmVjb3JkOjpwcmVwYXJlTGluayhWTSYgdm0sIEpTV2ViQXNzZW1ibHlJbnN0
YW5jZSogaW5zdGFuY2UpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoIW1faW5zdGFuY2UpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJs
eU1vZHVsZVJlY29yZC5oCShyZXZpc2lvbiAyNzI3MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZVJlY29yZC5oCSh3b3JraW5nIGNvcHkpCkBAIC02
OSw3ICs2OSw3IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTR2xvYmFs
T2JqZWN0KiwgVk0mLCBjb25zdCBXYXNtOjpNb2R1bGVJbmZvcm1hdGlvbiYpOwogCi0gICAgc3Rh
dGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xB
UkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBXcml0ZUJhcnJpZXI8SlNXZWJBc3NlbWJseUluc3Rh
bmNlPiBtX2luc3RhbmNlOwogICAgIFdyaXRlQmFycmllcjxKU09iamVjdD4gbV9zdGFydEZ1bmN0
aW9uOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlXcmFw
cGVyRnVuY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL1dlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmNwcAkocmV2aXNpb24gMjcyNzEwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Nyw3ICs2Nyw4IEBAIFN0cnVjdHVyZSogV2ViQXNzZW1i
bHlXcmFwcGVyRnVuY3Rpb246OmMKICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGds
b2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhKU0Z1bmN0aW9uVHlwZSwgU3RydWN0dXJl
RmxhZ3MpLCBpbmZvKCkpOwogfQogCi12b2lkIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uOjp2
aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0
ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbjo6dmlz
aXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFdl
YkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uKiB0aGlzT2JqZWN0ID0ganNDYXN0PFdlYkFzc2VtYmx5
V3JhcHBlckZ1bmN0aW9uKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0
aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNzYsNiArNzcsOCBAQCB2b2lkIFdlYkFzc2VtYmx5V3Jh
cHBlckZ1bmN0aW9uOjp2aXNpdENoCiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9m
dW5jdGlvbik7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihXZWJBc3NlbWJseVdyYXBwZXJG
dW5jdGlvbik7CisKIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihjYWxsV2ViQXNzZW1ibHlXcmFw
cGVyRnVuY3Rpb24sIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNh
bGxGcmFtZSkpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVdy
YXBwZXJGdW5jdGlvbi5oCShyZXZpc2lvbiAyNzI3MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9XZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBA
IC01OSw3ICs1OSw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgV2ViQXNzZW1ibHlXcmFwcGVy
RnVuY3Rpb24oVk0mLCBOYXRpdmVFeGVjdXRhYmxlKiwgSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1
cmUqLCBXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9uKTsKICAgICB2b2lkIGZpbmlzaENyZWF0
aW9uKFZNJiwgTmF0aXZlRXhlY3V0YWJsZSosIHVuc2lnbmVkIGxlbmd0aCwgY29uc3QgU3RyaW5n
JiBuYW1lLCBKU09iamVjdCosIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSopOwotICAgIHN0YXRpYyB2
b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJ
U0lUX0NISUxEUkVOOwogCiAgICAgV3JpdGVCYXJyaWVyPEpTT2JqZWN0PiBtX2Z1bmN0aW9uOwog
ICAgIC8vIEl0J3Mgc2FmZSB0byBqdXN0IGhvbGQgdGhlIHJhdyBXYXNtVG9XYXNtSW1wb3J0YWJs
ZUZ1bmN0aW9uIGJlY2F1c2Ugd2UgaGF2ZSBhIHJlZmVyZW5jZQpJbmRleDogU291cmNlL1dURi93
dGYvQXNzZXJ0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvQXNzZXJ0aW9u
cy5jcHAJKHJldmlzaW9uIDI3MjcxMCkKKysrIFNvdXJjZS9XVEYvd3RmL0Fzc2VydGlvbnMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xNDYsMTIgKzE0NiwxMiBAQCBzdGF0aWMgdm9pZCB2cHJpbnRm
X3N0ZGVycl9jb21tb24oY29uc3QgCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSNpZiBQTEFU
Rk9STShDT0NPQSkKLSAgICB2YV9saXN0IGNvcHlPZkFyZ3M7Ci0gICAgdmFfY29weShjb3B5T2ZB
cmdzLCBhcmdzKTsKLSAgICBvc19sb2dfd2l0aF9hcmdzKE9TX0xPR19ERUZBVUxULCBPU19MT0df
VFlQRV9ERUZBVUxULCBmb3JtYXQsIGNvcHlPZkFyZ3MsIF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVz
cygwKSk7Ci0gICAgdmFfZW5kKGNvcHlPZkFyZ3MpOwotI2VuZGlmCisvLyNpZiBQTEFURk9STShD
T0NPQSkKKy8vICAgIHZhX2xpc3QgY29weU9mQXJnczsKKy8vICAgIHZhX2NvcHkoY29weU9mQXJn
cywgYXJncyk7CisvLyAgICBvc19sb2dfd2l0aF9hcmdzKE9TX0xPR19ERUZBVUxULCBPU19MT0df
VFlQRV9ERUZBVUxULCBmb3JtYXQsIGNvcHlPZkFyZ3MsIF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVz
cygwKSk7CisvLyAgICB2YV9lbmQoY29weU9mQXJncyk7CisvLyNlbmRpZgogCiAgICAgLy8gRmFs
bCB0aHJvdWdoIHRvIHdyaXRlIHRvIHN0ZGVyciBpbiB0aGUgc2FtZSBtYW5uZXIgYXMgb3RoZXIg
cGxhdGZvcm1zLgogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJP
YmplY3RTdG9yZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCT2JqZWN0U3RvcmUuY3BwCShyZXZpc2lvbiAyNzI3MTApCisrKyBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTcyOCw3ICs3MjgsOSBAQCB2b2lkIElEQk9iamVjdFN0b3JlOjpyb2xsYmFja0ZvclZlcnNp
b25DCiAgICAgfQogfQogCi12b2lkIElEQk9iamVjdFN0b3JlOjp2aXNpdFJlZmVyZW5jZWRJbmRl
eGVzKFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBjb25zdAorLy92b2lkIElEQk9iamVjdFN0b3JlOjp2
aXNpdFJlZmVyZW5jZWRJbmRleGVzKFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBjb25zdAordGVtcGxh
dGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSURCT2JqZWN0U3RvcmU6OnZpc2l0UmVmZXJlbmNl
ZEluZGV4ZXMoVmlzaXRvciYgdmlzaXRvcikgY29uc3QKIHsKICAgICBMb2NrZXI8TG9jaz4gbG9j
a2VyKG1fcmVmZXJlbmNlZEluZGV4TG9jayk7CiAgICAgZm9yIChhdXRvJiBpbmRleCA6IG1fcmVm
ZXJlbmNlZEluZGV4ZXMudmFsdWVzKCkpCkBAIC03MzcsNiArNzM5LDkgQEAgdm9pZCBJREJPYmpl
Y3RTdG9yZTo6dmlzaXRSZWZlcmVuY2VkSW5kZQogICAgICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJv
b3QoaW5kZXguZ2V0KCkpOwogfQogCit0ZW1wbGF0ZSB2b2lkIElEQk9iamVjdFN0b3JlOjp2aXNp
dFJlZmVyZW5jZWRJbmRleGVzKEFic3RyYWN0U2xvdFZpc2l0b3ImKSBjb25zdDsKK3RlbXBsYXRl
IHZvaWQgSURCT2JqZWN0U3RvcmU6OnZpc2l0UmVmZXJlbmNlZEluZGV4ZXMoU2xvdFZpc2l0b3Im
KSBjb25zdDsKKwogdm9pZCBJREJPYmplY3RTdG9yZTo6cmVuYW1lUmVmZXJlbmNlZEluZGV4KElE
QkluZGV4JiBpbmRleCwgY29uc3QgU3RyaW5nJiBuZXdOYW1lKQogewogICAgIExPRyhJbmRleGVk
REIsICJJREJPYmplY3RTdG9yZTo6cmVuYW1lUmVmZXJlbmNlZEluZGV4Iik7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmgJKHJl
dmlzaW9uIDI3MjcxMCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9i
amVjdFN0b3JlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwOSw3ICsxMDksOCBAQCBwdWJsaWM6CiAg
ICAgdm9pZCByZWYoKTsKICAgICB2b2lkIGRlcmVmKCk7CiAKLSAgICB2b2lkIHZpc2l0UmVmZXJl
bmNlZEluZGV4ZXMoSlNDOjpTbG90VmlzaXRvciYpIGNvbnN0OworLy8gICAgdm9pZCB2aXNpdFJl
ZmVyZW5jZWRJbmRleGVzKEpTQzo6U2xvdFZpc2l0b3ImKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBWaXNpdG9yPiB2b2lkIHZpc2l0UmVmZXJlbmNlZEluZGV4ZXMoVmlzaXRvciYpIGNv
bnN0OwogICAgIHZvaWQgcmVuYW1lUmVmZXJlbmNlZEluZGV4KElEQkluZGV4JiwgY29uc3QgU3Ry
aW5nJiBuZXdOYW1lKTsKIAogcHJpdmF0ZToKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5jcHAJKHJldmlzaW9uIDI3MjcxMCkK
KysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTQ1NSw3ICsxNDU1LDggQEAgdm9pZCBJREJUcmFuc2FjdGlvbjo6
Y29ubmVjdGlvbkNsb3NlZEZybwogICAgIGZpcmVPbkFib3J0KCk7CiB9CiAKLXZvaWQgSURCVHJh
bnNhY3Rpb246OnZpc2l0UmVmZXJlbmNlZE9iamVjdFN0b3JlcyhKU0M6OlNsb3RWaXNpdG9yJiB2
aXNpdG9yKSBjb25zdAordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSURCVHJhbnNh
Y3Rpb246OnZpc2l0UmVmZXJlbmNlZE9iamVjdFN0b3JlcyhWaXNpdG9yJiB2aXNpdG9yKSBjb25z
dAogewogICAgIExvY2tlcjxMb2NrPiBsb2NrZXIobV9yZWZlcmVuY2VkT2JqZWN0U3RvcmVMb2Nr
KTsKICAgICBmb3IgKGF1dG8mIG9iamVjdFN0b3JlIDogbV9yZWZlcmVuY2VkT2JqZWN0U3RvcmVz
LnZhbHVlcygpKQpAQCAtMTQ2NCw2ICsxNDY1LDkgQEAgdm9pZCBJREJUcmFuc2FjdGlvbjo6dmlz
aXRSZWZlcmVuY2VkT2JqZQogICAgICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qob2JqZWN0U3Rv
cmUuZ2V0KCkpOwogfQogCit0ZW1wbGF0ZSB2b2lkIElEQlRyYW5zYWN0aW9uOjp2aXNpdFJlZmVy
ZW5jZWRPYmplY3RTdG9yZXMoSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBjb25z
dDsKK3RlbXBsYXRlIHZvaWQgSURCVHJhbnNhY3Rpb246OnZpc2l0UmVmZXJlbmNlZE9iamVjdFN0
b3JlcyhKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKSBjb25zdDsKKwogdm9pZCBJREJUcmFuc2Fj
dGlvbjo6aGFuZGxlUGVuZGluZ09wZXJhdGlvbnMoKQogewogICAgIEFTU0VSVChjYW5DdXJyZW50
VGhyZWFkQWNjZXNzVGhyZWFkTG9jYWxEYXRhKG1fZGF0YWJhc2UtPm9yaWdpblRocmVhZCgpKSk7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5z
YWN0aW9uLmgJKHJldmlzaW9uIDI3MjcxMCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0OSw3ICsxNDksOCBA
QCBwdWJsaWM6CiAKICAgICB2b2lkIGNvbm5lY3Rpb25DbG9zZWRGcm9tU2VydmVyKGNvbnN0IElE
QkVycm9yJik7CiAKLSAgICB2b2lkIHZpc2l0UmVmZXJlbmNlZE9iamVjdFN0b3JlcyhKU0M6OlNs
b3RWaXNpdG9yJikgY29uc3Q7CisvLyAgICB2b2lkIHZpc2l0UmVmZXJlbmNlZE9iamVjdFN0b3Jl
cyhKU0M6OlNsb3RWaXNpdG9yJikgY29uc3Q7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRv
cj4gdm9pZCB2aXNpdFJlZmVyZW5jZWRPYmplY3RTdG9yZXMoVmlzaXRvciYpIGNvbnN0OwogCiAg
ICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIHN0ZDo6YXRvbWljPHVuc2lnbmVkPiBudW1iZXJPZklE
QlRyYW5zYWN0aW9uczsKIApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9B
dWRpb0J1ZmZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJh
dWRpby9BdWRpb0J1ZmZlci5jcHAJKHJldmlzaW9uIDI3MjcxMCkKKysrIFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViYXVkaW8vQXVkaW9CdWZmZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTQs
MTIgKzE1NCwxNyBAQCBFeGNlcHRpb25PcjxKU0M6OkpTVmFsdWU+IEF1ZGlvQnVmZmVyOjpnCiAg
ICAgcmV0dXJuIGNvbnN0cnVjdEpTQXJyYXkoKTsKIH0KIAotdm9pZCBBdWRpb0J1ZmZlcjo6dmlz
aXRDaGFubmVsV3JhcHBlcnMoSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vdm9pZCBBdWRp
b0J1ZmZlcjo6dmlzaXRDaGFubmVsV3JhcHBlcnMoSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikK
K3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEF1ZGlvQnVmZmVyOjp2aXNpdENoYW5u
ZWxXcmFwcGVycyhWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGZvciAoYXV0byYgY2hhbm5lbFdy
YXBwZXIgOiBtX2NoYW5uZWxXcmFwcGVycykKICAgICAgICAgY2hhbm5lbFdyYXBwZXIudmlzaXQo
dmlzaXRvcik7CiB9CiAKK3RlbXBsYXRlIHZvaWQgQXVkaW9CdWZmZXI6OnZpc2l0Q2hhbm5lbFdy
YXBwZXJzKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBBdWRpb0J1
ZmZlcjo6dmlzaXRDaGFubmVsV3JhcHBlcnMoSlNDOjpTbG90VmlzaXRvciYpOworCiBSZWZQdHI8
RmxvYXQzMkFycmF5PiBBdWRpb0J1ZmZlcjo6Y2hhbm5lbERhdGEodW5zaWduZWQgY2hhbm5lbElu
ZGV4KQogewogICAgIGlmIChjaGFubmVsSW5kZXggPj0gbV9jaGFubmVscy5zaXplKCkpCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQnVmZmVyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0J1ZmZlci5oCShyZXZp
c2lvbiAyNzI3MTApCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQnVm
ZmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTc1LDcgKzc1LDggQEAgcHVibGljOgogCiAgICAgc2l6
ZV90IG1lbW9yeUNvc3QoKSBjb25zdDsKIAotICAgIHZvaWQgdmlzaXRDaGFubmVsV3JhcHBlcnMo
SlNDOjpTbG90VmlzaXRvciYpOworLy8gICAgdm9pZCB2aXNpdENoYW5uZWxXcmFwcGVycyhKU0M6
OlNsb3RWaXNpdG9yJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCB2aXNp
dENoYW5uZWxXcmFwcGVycyhWaXNpdG9yJik7CiAgICAgCiBwcml2YXRlOgogICAgIEF1ZGlvQnVm
ZmVyKHVuc2lnbmVkIG51bWJlck9mQ2hhbm5lbHMsIHNpemVfdCBsZW5ndGgsIGZsb2F0IHNhbXBs
ZVJhdGUsIExlZ2FjeVByZXZlbnREZXRhY2hpbmcgPSBMZWdhY3lQcmV2ZW50RGV0YWNoaW5nOjpO
byk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9ET01HQ091dHB1dENvbnN0cmFp
bnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0RPTUdDT3V0
cHV0Q29uc3RyYWludC5jcHAJKHJldmlzaW9uIDI3MjcxMCkKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0RPTUdDT3V0cHV0Q29uc3RyYWludC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5
LDcgKzQ5LDcgQEAgRE9NR0NPdXRwdXRDb25zdHJhaW50Ojp+RE9NR0NPdXRwdXRDb25zdAogewog
fQogCi12b2lkIERPTUdDT3V0cHV0Q29uc3RyYWludDo6ZXhlY3V0ZUltcGwoU2xvdFZpc2l0b3Im
IHZpc2l0b3IpCit2b2lkIERPTUdDT3V0cHV0Q29uc3RyYWludDo6ZXhlY3V0ZUltcGwoQWJzdHJh
Y3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBIZWFwJiBoZWFwID0gbV92bS5oZWFwOwog
ICAgIApAQCAtNjAsOCArNjAsOCBAQCB2b2lkIERPTUdDT3V0cHV0Q29uc3RyYWludDo6ZXhlY3V0
ZUltcGwoCiAgICAgCiAgICAgbV9jbGllbnREYXRhLmZvckVhY2hPdXRwdXRDb25zdHJhaW50U3Bh
Y2UoCiAgICAgICAgIFsmXSAoU3Vic3BhY2UmIHN1YnNwYWNlKSB7Ci0gICAgICAgICAgICBhdXRv
IGZ1bmMgPSBbXSAoU2xvdFZpc2l0b3ImIHZpc2l0b3IsIEhlYXBDZWxsKiBoZWFwQ2VsbCwgSGVh
cENlbGw6OktpbmQpIHsKLSAgICAgICAgICAgICAgICBTZXRSb290TWFya1JlYXNvblNjb3BlIHJv
b3RTY29wZSh2aXNpdG9yLCBTbG90VmlzaXRvcjo6Um9vdE1hcmtSZWFzb246OkRPTUdDT3V0cHV0
KTsKKyAgICAgICAgICAgIGF1dG8gZnVuYyA9IFtdIChBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNp
dG9yLCBIZWFwQ2VsbCogaGVhcENlbGwsIEhlYXBDZWxsOjpLaW5kKSB7CisgICAgICAgICAgICAg
ICAgU2V0Um9vdE1hcmtSZWFzb25TY29wZSByb290U2NvcGUodmlzaXRvciwgQWJzdHJhY3RTbG90
VmlzaXRvcjo6Um9vdE1hcmtSZWFzb246OkRPTUdDT3V0cHV0KTsKICAgICAgICAgICAgICAgICBK
U0NlbGwqIGNlbGwgPSBzdGF0aWNfY2FzdDxKU0NlbGwqPihoZWFwQ2VsbCk7CiAgICAgICAgICAg
ICAgICAgY2VsbC0+bWV0aG9kVGFibGUodmlzaXRvci52bSgpKS0+dmlzaXRPdXRwdXRDb25zdHJh
aW50cyhjZWxsLCB2aXNpdG9yKTsKICAgICAgICAgICAgIH07CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9ET01HQ091dHB1dENvbnN0cmFpbnQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9ET01HQ091dHB1dENvbnN0cmFpbnQuaAkocmV2aXNpb24g
MjcyNzEwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvRE9NR0NPdXRwdXRDb25zdHJh
aW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDcgKzQyLDcgQEAgcHVibGljOgogICAgIH5ET01H
Q091dHB1dENvbnN0cmFpbnQoKTsKICAgICAKIHByb3RlY3RlZDoKLSAgICB2b2lkIGV4ZWN1dGVJ
bXBsKEpTQzo6U2xvdFZpc2l0b3ImKSBvdmVycmlkZTsKKyAgICB2b2lkIGV4ZWN1dGVJbXBsKEpT
Qzo6QWJzdHJhY3RTbG90VmlzaXRvciYpIG92ZXJyaWRlOwogCiBwcml2YXRlOgogICAgIEpTQzo6
Vk0mIG1fdm07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Fib3J0Q29udHJv
bGxlckN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNBYm9ydENvbnRyb2xsZXJDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI3MTApCisrKyBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Fib3J0Q29udHJvbGxlckN1c3RvbS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI4LDkgKzI4LDE0IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBK
U0Fib3J0Q29udHJvbGxlcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRv
ciYgdmlzaXRvcikKKy8vdm9pZCBKU0Fib3J0Q29udHJvbGxlcjo6dmlzaXRBZGRpdGlvbmFsQ2hp
bGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0
b3I+Cit2b2lkIEpTQWJvcnRDb250cm9sbGVyOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNp
dG9yJiB2aXNpdG9yKQogewogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdCgmd3JhcHBlZCgpLnNp
Z25hbCgpKTsKIH0KIAordGVtcGxhdGUgdm9pZCBKU0Fib3J0Q29udHJvbGxlcjo6dmlzaXRBZGRp
dGlvbmFsQ2hpbGRyZW4oSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lk
IEpTQWJvcnRDb250cm9sbGVyOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNp
dG9yJik7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTQWJvcnRTaWduYWxDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTQWJvcnRTaWduYWxDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI3
MTApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Fib3J0U2lnbmFsQ3VzdG9tLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjgsNyArMjgsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLWJvb2wgSlNBYm9ydFNpZ25hbE93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhK
U0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIEpTQzo6U2xvdFZpc2l0b3Im
IHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCitib29sIEpTQWJvcnRTaWduYWxPd25lcjo6
aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5k
bGUsIHZvaWQqLCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIq
KiByZWFzb24pCiB7CiAgICAgYXV0byYgYWJvcnRTaWduYWwgPSBKU0M6OmpzQ2FzdDxKU0Fib3J0
U2lnbmFsKj4oaGFuZGxlLnNsb3QoKS0+YXNDZWxsKCkpLT53cmFwcGVkKCk7CiAgICAgaWYgKGFi
b3J0U2lnbmFsLmlzRmlyaW5nRXZlbnRMaXN0ZW5lcnMoKSkgewpJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNBdHRyQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0F0dHJDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI3MTApCisrKyBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0F0dHJDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zMywxMCArMzMsMTUgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIEpTQXR0
cjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKKy8v
dm9pZCBKU0F0dHI6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZp
c2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0F0dHI6OnZpc2l0QWRk
aXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgaWYgKEVsZW1lbnQqIGVs
ZW1lbnQgPSB3cmFwcGVkKCkub3duZXJFbGVtZW50KCkpCiAgICAgICAgIHZpc2l0b3IuYWRkT3Bh
cXVlUm9vdChyb290KGVsZW1lbnQpKTsKIH0KIAordGVtcGxhdGUgdm9pZCBKU0F0dHI6OnZpc2l0
QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUg
dm9pZCBKU0F0dHI6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImKTsK
KwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNBdWRpb0J1ZmZlckN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNBdWRpb0J1ZmZlckN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjcxMCkKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXVkaW9CdWZmZXJDdXN0b20uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMSwxMSArMzEsMTYgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5n
IG5hbWVzcGFjZSBKU0M7CiAKLXZvaWQgSlNBdWRpb0J1ZmZlcjo6dmlzaXRBZGRpdGlvbmFsQ2hp
bGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3ZvaWQgSlNBdWRpb0J1ZmZlcjo6dmlzaXRB
ZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBWaXNpdG9yPgordm9pZCBKU0F1ZGlvQnVmZmVyOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihW
aXNpdG9yJiB2aXNpdG9yKQogewogICAgIHdyYXBwZWQoKS52aXNpdENoYW5uZWxXcmFwcGVycyh2
aXNpdG9yKTsKIH0KIAordGVtcGxhdGUgdm9pZCBKU0F1ZGlvQnVmZmVyOjp2aXNpdEFkZGl0aW9u
YWxDaGlsZHJlbihBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTQXVkaW9C
dWZmZXI6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CisKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShXRUJfQVVESU8pCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0F1ZGlvVHJhY2tDdXN0b20uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXVkaW9UcmFja0N1c3RvbS5jcHAJKHJl
dmlzaW9uIDI3MjcxMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXVkaW9UcmFj
a0N1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDExICszNSwxNiBAQAogbmFtZXNwYWNl
IFdlYkNvcmUgewogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAotdm9pZCBKU0F1ZGlvVHJhY2s6OnZp
c2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy92b2lkIEpTQXVk
aW9UcmFjazo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0
ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0F1ZGlvVHJhY2s6OnZpc2l0QWRkaXRp
b25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVS
b290KHJvb3QoJndyYXBwZWQoKSkpOwogfQogCit0ZW1wbGF0ZSB2b2lkIEpTQXVkaW9UcmFjazo6
dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oQWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUg
dm9pZCBKU0F1ZGlvVHJhY2s6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJik7
CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0F1ZGlvVHJhY2tMaXN0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0F1ZGlvVHJhY2tMaXN0Q3VzdG9tLmNwcAkocmV2
aXNpb24gMjcyNzEwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNBdWRpb1RyYWNr
TGlzdEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDExICszNiwxNiBAQAogbmFtZXNw
YWNlIFdlYkNvcmUgewogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAotdm9pZCBKU0F1ZGlvVHJhY2tM
aXN0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vdm9p
ZCBKU0F1ZGlvVHJhY2tMaXN0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYg
dmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTQXVkaW9UcmFja0xp
c3Q6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgdmlz
aXRvci5hZGRPcGFxdWVSb290KHJvb3Qod3JhcHBlZCgpLmVsZW1lbnQoKSkpOwogfQogCit0ZW1w
bGF0ZSB2b2lkIEpTQXVkaW9UcmFja0xpc3Q6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEFic3Ry
YWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNBdWRpb1RyYWNrTGlzdDo6dmlzaXRB
ZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQogCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXVkaW9Xb3Jr
bGV0UHJvY2Vzc29yQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0F1ZGlvV29ya2xldFByb2Nlc3NvckN1c3RvbS5jcHAJKHJldmlzaW9uIDI3Mjcx
MCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXVkaW9Xb3JrbGV0UHJvY2Vzc29y
Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsOSBAQAogbmFtZXNwYWNlIFdl
YkNvcmUgewogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAotdm9pZCBKU0F1ZGlvV29ya2xldFByb2Nl
c3Nvcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3Zv
aWQgSlNBdWRpb1dvcmtsZXRQcm9jZXNzb3I6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNBdWRp
b1dvcmtsZXRQcm9jZXNzb3I6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0
b3IpCiB7CiAgICAgYXV0byYgcHJvY2Vzc29yID0gd3JhcHBlZCgpOwogICAgIHByb2Nlc3Nvci5q
c0lucHV0c1dyYXBwZXIoKS52aXNpdCh2aXNpdG9yKTsKQEAgLTM5LDYgKzQxLDkgQEAgdm9pZCBK
U0F1ZGlvV29ya2xldFByb2Nlc3Nvcjo6dmlzaXRBZGRpdAogICAgIHByb2Nlc3Nvci5qc1BhcmFt
VmFsdWVzV3JhcHBlcigpLnZpc2l0KHZpc2l0b3IpOwogfQogCit0ZW1wbGF0ZSB2b2lkIEpTQXVk
aW9Xb3JrbGV0UHJvY2Vzc29yOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihBYnN0cmFjdFNsb3RW
aXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTQXVkaW9Xb3JrbGV0UHJvY2Vzc29yOjp2aXNpdEFk
ZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYpOworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CiAKICNlbmRpZiAvLyBFTkFCTEUoV0VCX0FVRElPKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNDU1NSdWxlQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0NTU1J1bGVDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI3MTApCisrKyBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NTU1J1bGVDdXN0b20uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC01MSwxMSArNTEsMTYgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVz
cGFjZSBKU0M7CiAKLXZvaWQgSlNDU1NSdWxlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90
VmlzaXRvciYgdmlzaXRvcikKKy8vdm9pZCBKU0NTU1J1bGU6OnZpc2l0QWRkaXRpb25hbENoaWxk
cmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3Zv
aWQgSlNDU1NSdWxlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQog
ewogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChyb290KCZ3cmFwcGVkKCkpKTsKIH0KIAordGVt
cGxhdGUgdm9pZCBKU0NTU1J1bGU6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEFic3RyYWN0U2xv
dFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNDU1NSdWxlOjp2aXNpdEFkZGl0aW9uYWxDaGls
ZHJlbihTbG90VmlzaXRvciYpOworCiBKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNHbG9iYWxP
YmplY3QqLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWY8Q1NTUnVsZT4mJiBy
dWxlKQogewogICAgIHN3aXRjaCAocnVsZS0+dHlwZSgpKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0NTU1J1bGVMaXN0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NTU1J1bGVMaXN0Q3VzdG9tLmNwcAkocmV2aXNpb24g
MjcyNzEwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDU1NSdWxlTGlzdEN1c3Rv
bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDcgKzM2LDcgQEAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKLWJvb2wgSlNDU1NSdWxlTGlzdE93bmVyOjppc1Jl
YWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwg
dm9pZCosIFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQorYm9vbCBK
U0NTU1J1bGVMaXN0T3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxl
PEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRv
ciwgY29uc3QgY2hhcioqIHJlYXNvbikKIHsKICAgICBKU0NTU1J1bGVMaXN0KiBqc0NTU1J1bGVM
aXN0ID0ganNDYXN0PEpTQ1NTUnVsZUxpc3QqPihoYW5kbGUuc2xvdCgpLT5hc0NlbGwoKSk7CiAg
ICAgaWYgKCFqc0NTU1J1bGVMaXN0LT5oYXNDdXN0b21Qcm9wZXJ0aWVzKGpzQ1NTUnVsZUxpc3Qt
PnZtKCkpKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDU1NTdHlsZURlY2xh
cmF0aW9uQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0NTU1N0eWxlRGVjbGFyYXRpb25DdXN0b20uY3BwCShyZXZpc2lvbiAyNzI3MTApCisrKyBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NTU1N0eWxlRGVjbGFyYXRpb25DdXN0b20uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC01MSw5ICs1MSwxNCBAQCB2b2lkKiByb290KENTU1N0eWxlRGVj
bGFyYXRpb24qIHN0eWxlKQogICAgIHJldHVybiBzdHlsZTsKIH0KIAotdm9pZCBKU0NTU1N0eWxl
RGVjbGFyYXRpb246OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9y
KQorLy92b2lkIEpTQ1NTU3R5bGVEZWNsYXJhdGlvbjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4o
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBK
U0NTU1N0eWxlRGVjbGFyYXRpb246OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZp
c2l0b3IpCiB7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHJvb3QoJndyYXBwZWQoKSkpOwog
fQogCit0ZW1wbGF0ZSB2b2lkIEpTQ1NTU3R5bGVEZWNsYXJhdGlvbjo6dmlzaXRBZGRpdGlvbmFs
Q2hpbGRyZW4oQWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU0NTU1N0eWxl
RGVjbGFyYXRpb246OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CisKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
Q2FsbGJhY2tEYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0NhbGxiYWNrRGF0YS5jcHAJKHJldmlzaW9uIDI3MjcxMCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTQ2FsbGJhY2tEYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTUsMTIg
Kzk1LDE2IEBAIEpTVmFsdWUgSlNDYWxsYmFja0RhdGE6Omludm9rZUNhbGxiYWNrKEoKICAgICBy
ZXR1cm4gcmVzdWx0OwogfQogCi12b2lkIEpTQ2FsbGJhY2tEYXRhV2Vhazo6dmlzaXRKU0Z1bmN0
aW9uKEpTQzo6U2xvdFZpc2l0b3ImIHZpc3RvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+
Cit2b2lkIEpTQ2FsbGJhY2tEYXRhV2Vhazo6dmlzaXRKU0Z1bmN0aW9uKFZpc2l0b3ImIHZpc2l0
b3IpCiB7Ci0gICAgdmlzdG9yLmFwcGVuZChtX2NhbGxiYWNrKTsKKyAgICB2aXNpdG9yLmFwcGVu
ZChtX2NhbGxiYWNrKTsKIH0KIAotYm9vbCBKU0NhbGxiYWNrRGF0YVdlYWs6OldlYWtPd25lcjo6
aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9p
ZCogY29udGV4dCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCit0
ZW1wbGF0ZSB2b2lkIEpTQ2FsbGJhY2tEYXRhV2Vhazo6dmlzaXRKU0Z1bmN0aW9uKEpTQzo6QWJz
dHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU0NhbGxiYWNrRGF0YVdlYWs6OnZp
c2l0SlNGdW5jdGlvbihKU0M6OlNsb3RWaXNpdG9yJik7CisKK2Jvb2wgSlNDYWxsYmFja0RhdGFX
ZWFrOjpXZWFrT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpT
Qzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3Is
IGNvbnN0IGNoYXIqKiByZWFzb24pCiB7CiAgICAgaWYgKFVOTElLRUxZKHJlYXNvbikpCiAgICAg
ICAgICpyZWFzb24gPSAiQ29udGV4dCBpcyBvcGFxdWUgcm9vdCI7IC8vIEZJWE1FOiB3aGF0IGlz
IHRoZSBjb250ZXh0LgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDYWxsYmFj
a0RhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NhbGxi
YWNrRGF0YS5oCShyZXZpc2lvbiAyNzI3MTApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0NhbGxiYWNrRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTMsMTEgKzExMywxMiBAQCBw
dWJsaWM6CiAgICAgICAgIHJldHVybiBKU0NhbGxiYWNrRGF0YTo6aW52b2tlQ2FsbGJhY2soKmds
b2JhbE9iamVjdCwgY2FsbGJhY2soKSwgdGhpc1ZhbHVlLCBhcmdzLCBjYWxsYmFja1R5cGUsIGZ1
bmN0aW9uTmFtZSwgcmV0dXJuZWRFeGNlcHRpb24pOwogICAgIH0KIAotICAgIHZvaWQgdmlzaXRK
U0Z1bmN0aW9uKEpTQzo6U2xvdFZpc2l0b3ImKTsKKy8vICAgIHZvaWQgdmlzaXRKU0Z1bmN0aW9u
KEpTQzo6U2xvdFZpc2l0b3ImKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lk
IHZpc2l0SlNGdW5jdGlvbihWaXNpdG9yJik7CiAKIHByaXZhdGU6CiAgICAgY2xhc3MgV2Vha093
bmVyIDogcHVibGljIEpTQzo6V2Vha0hhbmRsZU93bmVyIHsKLSAgICAgICAgYm9vbCBpc1JlYWNo
YWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250
ZXh0LCBKU0M6OlNsb3RWaXNpdG9yJiwgY29uc3QgY2hhcioqKSBvdmVycmlkZTsKKyAgICAgICAg
Ym9vbCBpc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+
LCB2b2lkKiBjb250ZXh0LCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImLCBjb25zdCBjaGFyKiop
IG92ZXJyaWRlOwogICAgIH07CiAgICAgV2Vha093bmVyIG1fd2Vha093bmVyOwogICAgIEpTQzo6
V2VhazxKU0M6OkpTT2JqZWN0PiBtX2NhbGxiYWNrOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRDdXN0b20uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
Q3VzdG9tLmNwcAkocmV2aXNpb24gMjcyNzEwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yNCw3ICsyNCw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotYm9vbCBKU0NhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyRE93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6Okhh
bmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0
b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCitib29sIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
T3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93
bj4gaGFuZGxlLCB2b2lkKiwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25z
dCBjaGFyKiogcmVhc29uKQogewogICAgIGlmIChVTkxJS0VMWShyZWFzb24pKQogICAgICAgICAq
cmVhc29uID0gIkNhbnZhcyBpcyBvcGFxdWUgcm9vdCI7CkBAIC0zNCw5ICszNCwxNCBAQCBib29s
IEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJET3duZXI6OmlzCiAgICAgcmV0dXJuIHZpc2l0b3Iu
Y29udGFpbnNPcGFxdWVSb290KHJvb3QpOwogfQogCi12b2lkIEpTQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9y
KQorLy92b2lkIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjp2aXNpdEFkZGl0aW9uYWxDaGls
ZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRv
cj4KK3ZvaWQgSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnZpc2l0QWRkaXRpb25hbENoaWxk
cmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHJvb3Qo
d3JhcHBlZCgpLmNhbnZhcygpKSk7CiB9CiAKK3RlbXBsYXRlIHZvaWQgSlNDYW52YXNSZW5kZXJp
bmdDb250ZXh0MkQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6QWJzdHJhY3RTbG90Vmlz
aXRvciYpOwordGVtcGxhdGUgdm9pZCBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6dmlzaXRB
ZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYpOworCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0N1c3RvbUV2ZW50Q3Vz
dG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0N1c3Rv
bUV2ZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gMjcyNzEwKQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNDdXN0b21FdmVudEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyLDEw
ICs0MiwxNSBAQCBKU0M6OkpTVmFsdWUgSlNDdXN0b21FdmVudDo6ZGV0YWlsKEpTQzo6CiAgICAg
fSk7CiB9CiAKLXZvaWQgSlNDdXN0b21FdmVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlND
OjpTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vdm9pZCBKU0N1c3RvbUV2ZW50Ojp2aXNpdEFkZGl0
aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5h
bWUgVmlzaXRvcj4KK3ZvaWQgSlNDdXN0b21FdmVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4o
VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB3cmFwcGVkKCkuZGV0YWlsKCkudmlzaXQodmlzaXRv
cik7CiAgICAgd3JhcHBlZCgpLmNhY2hlZERldGFpbCgpLnZpc2l0KHZpc2l0b3IpOwogfQogCit0
ZW1wbGF0ZSB2b2lkIEpTQ3VzdG9tRXZlbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6
QWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU0N1c3RvbUV2ZW50Ojp2aXNp
dEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJik7CisKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQnVpbHRpbkNv
bnN0cnVjdG9yQmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNET01CdWlsdGluQ29uc3RydWN0b3JCYXNlLmNwcAkocmV2aXNpb24gMjcyNzEwKQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CdWlsdGluQ29uc3RydWN0b3JCYXNlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDUsNyArNDUsOCBAQCB2b2lkIEpTRE9NQnVpbHRpbkNvbnN0
cnVjdG9yQmFzZTo6Y2FsbEZ1CiAgICAgSlNDOjpjYWxsKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAm
ZnVuY3Rpb24sIGNhbGxEYXRhLCAmdGhpc09iamVjdCwgYXJndW1lbnRzKTsKIH0KIAotdm9pZCBK
U0RPTUJ1aWx0aW5Db25zdHJ1Y3RvckJhc2U6OnZpc2l0Q2hpbGRyZW4oSlNDOjpKU0NlbGwqIGNl
bGwsIEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
Pgordm9pZCBKU0RPTUJ1aWx0aW5Db25zdHJ1Y3RvckJhc2U6OnZpc2l0Q2hpbGRyZW5JbXBsKEpT
Qzo6SlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGF1dG8qIHRoaXNPYmpl
Y3QgPSBqc0Nhc3Q8SlNET01CdWlsdGluQ29uc3RydWN0b3JCYXNlKj4oY2VsbCk7CiAgICAgQVNT
RVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNTMsNiArNTQs
OCBAQCB2b2lkIEpTRE9NQnVpbHRpbkNvbnN0cnVjdG9yQmFzZTo6dmlzaXRDCiAgICAgdmlzaXRv
ci5hcHBlbmQodGhpc09iamVjdC0+bV9pbml0aWFsaXplRnVuY3Rpb24pOwogfQogCitERUZJTkVf
VklTSVRfQ0hJTERSRU4oSlNET01CdWlsdGluQ29uc3RydWN0b3JCYXNlKTsKKwogSlNDOjpJc29T
dWJzcGFjZSogSlNET01CdWlsdGluQ29uc3RydWN0b3JCYXNlOjpzdWJzcGFjZUZvckltcGwoSlND
OjpWTSYgdm0pCiB7CiAgICAgcmV0dXJuICZzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZt
LmNsaWVudERhdGEpLT5kb21CdWlsdGluQ29uc3RydWN0b3JTcGFjZSgpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CdWlsdGluQ29uc3RydWN0b3JCYXNlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CdWlsdGluQ29uc3RydWN0
b3JCYXNlLmgJKHJldmlzaW9uIDI3MjcxMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTRE9NQnVpbHRpbkNvbnN0cnVjdG9yQmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00Miw3ICs0
Miw3IEBAIHByb3RlY3RlZDoKICAgICB7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRD
aGlsZHJlbihKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJ
U0lUX0NISUxEUkVOOwogCiAgICAgSlNDOjpKU0Z1bmN0aW9uKiBpbml0aWFsaXplRnVuY3Rpb24o
KTsKICAgICB2b2lkIHNldEluaXRpYWxpemVGdW5jdGlvbihKU0M6OlZNJiwgSlNDOjpKU0Z1bmN0
aW9uJik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVj
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01HbG9i
YWxPYmplY3QuY3BwCShyZXZpc2lvbiAyNzI3MTApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0RPTUdsb2JhbE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzOCw3ICsyMzgs
OCBAQCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBKU0RPTUdsb2JhbE9iamVjCiAgICAgcmV0dXJu
IG51bGxwdHI7CiB9CiAKLXZvaWQgSlNET01HbG9iYWxPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlND
ZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0
b3I+Cit2b2lkIEpTRE9NR2xvYmFsT2JqZWN0Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNl
bGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNET01HbG9iYWxPYmplY3QqIHRoaXNPYmpl
Y3QgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JK
RUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC0yNjAsNiArMjYxLDggQEAgdm9p
ZCBKU0RPTUdsb2JhbE9iamVjdDo6dmlzaXRDaGlsZHJlbihKUwogICAgIHRoaXNPYmplY3QtPm1f
YnVpbHRpbkludGVybmFsRnVuY3Rpb25zLnZpc2l0KHZpc2l0b3IpOwogfQogCitERUZJTkVfVklT
SVRfQ0hJTERSRU4oSlNET01HbG9iYWxPYmplY3QpOworCiB2b2lkIEpTRE9NR2xvYmFsT2JqZWN0
Ojpwcm9taXNlUmVqZWN0aW9uVHJhY2tlcihKU0dsb2JhbE9iamVjdCoganNHbG9iYWxPYmplY3Qs
IEpTUHJvbWlzZSogcHJvbWlzZSwgSlNQcm9taXNlUmVqZWN0aW9uT3BlcmF0aW9uIG9wZXJhdGlv
bikKIHsKICAgICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS93ZWJh
cHBhcGlzLmh0bWwjdGhlLWhvc3Rwcm9taXNlcmVqZWN0aW9udHJhY2tlci1pbXBsZW1lbnRhdGlv
bgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01HbG9iYWxPYmplY3QuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVj
dC5oCShyZXZpc2lvbiAyNzI3MTApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RP
TUdsb2JhbE9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC02OSw3ICs2OSw3IEBAIHB1YmxpYzoK
ICAgICAvLyBNYWtlIGJpbmRpbmcgY29kZSBnZW5lcmF0aW9uIGVhc2llci4KICAgICBKU0RPTUds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KCkgeyByZXR1cm4gdGhpczsgfQogCi0gICAgc3RhdGlj
IHZvaWQgdmlzaXRDaGlsZHJlbihKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKTsKKyAg
ICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgRE9NV3JhcHBlcldvcmxkJiB3b3JsZCgp
IHsgcmV0dXJuIG1fd29ybGQuZ2V0KCk7IH0KICAgICBib29sIHdvcmxkSXNOb3JtYWwoKSBjb25z
dCB7IHJldHVybiBtX3dvcmxkSXNOb3JtYWw7IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTRE9NR3VhcmRlZE9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTRE9NR3VhcmRlZE9iamVjdC5oCShyZXZpc2lvbiAyNzI3MTApCisrKyBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUd1YXJkZWRPYmplY3QuaAkod29ya2luZyBj
b3B5KQpAQCAtNDAsNyArNDAsOCBAQCBwdWJsaWM6CiAKICAgICBib29sIGlzU3VzcGVuZGVkKCkg
Y29uc3QgeyByZXR1cm4gIW1fZ3VhcmRlZCB8fCAhY2FuSW52b2tlQ2FsbGJhY2soKTsgfSAvLyBU
aGUgd3JhcHBlciB3b3JsZCBoYXMgZ29uZSBhd2F5IG9yIGFjdGl2ZSBET00gb2JqZWN0cyBoYXZl
IGJlZW4gc3VzcGVuZGVkLgogCi0gICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShKU0M6OlNsb3RWaXNp
dG9yJiB2aXNpdG9yKSB7IHZpc2l0b3IuYXBwZW5kKG1fZ3VhcmRlZCk7IH0KKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBWaXNpdG9yPgorICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoVmlzaXRvciYgdmlz
aXRvcikgeyB2aXNpdG9yLmFwcGVuZChtX2d1YXJkZWQpOyB9CiAKICAgICBKU0M6OkpTVmFsdWUg
Z3VhcmRlZE9iamVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fZ3VhcmRlZC5nZXQoKTsgfQogICAgIEpT
RE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QoKSBjb25zdCB7IHJldHVybiBtX2dsb2JhbE9i
amVjdC5nZXQoKTsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01RdWFk
Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RP
TVF1YWRDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI3MTApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0RPTVF1YWRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3ICszMyw5
IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCi12b2lkIEpT
RE9NUXVhZDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisv
L3ZvaWQgSlNET01RdWFkOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlz
aXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTRE9NUXVhZDo6dmlzaXRB
ZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB2aXNpdG9yLmFkZE9w
YXF1ZVJvb3QoY29uc3RfY2FzdDxET01Qb2ludCo+KCZ3cmFwcGVkKCkucDEoKSkpOwogICAgIHZp
c2l0b3IuYWRkT3BhcXVlUm9vdChjb25zdF9jYXN0PERPTVBvaW50Kj4oJndyYXBwZWQoKS5wMigp
KSk7CkBAIC00MSw0ICs0Myw3IEBAIHZvaWQgSlNET01RdWFkOjp2aXNpdEFkZGl0aW9uYWxDaGls
ZHJlbigKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QoY29uc3RfY2FzdDxET01Qb2ludCo+KCZ3
cmFwcGVkKCkucDQoKSkpOwogfQogCi19Cit0ZW1wbGF0ZSB2b2lkIEpTRE9NUXVhZDo6dmlzaXRB
ZGRpdGlvbmFsQ2hpbGRyZW4oQWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBK
U0RPTVF1YWQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9N
V2luZG93Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0RPTVdpbmRvd0N1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjcxMCkKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTE2LDcgKzExNiw5IEBAIEpTQ19ERUZJTkVfQ1VTVE9NX0dFVFRFUihqc0RPTVdpbmRvd0luc3QK
ICAgICByZXR1cm4gbm9uQ2FjaGluZ1N0YXRpY0Z1bmN0aW9uR2V0dGVySW1wbDxqc0RPTVdpbmRv
d0luc3RhbmNlRnVuY3Rpb25fcG9zdE1lc3NhZ2UsIDI+KGdsb2JhbE9iamVjdCwgcHJvcGVydHlO
YW1lKTsKIH0KIAotdm9pZCBKU0RPTVdpbmRvdzo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xv
dFZpc2l0b3ImIHZpc2l0b3IpCisvL3ZvaWQgSlNET01XaW5kb3c6OnZpc2l0QWRkaXRpb25hbENo
aWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4K
K3ZvaWQgSlNET01XaW5kb3c6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0
b3IpCiB7CiAgICAgaWYgKEZyYW1lKiBmcmFtZSA9IHdyYXBwZWQoKS5mcmFtZSgpKQogICAgICAg
ICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QoZnJhbWUpOwpAQCAtMTI5LDYgKzEzMSw5IEBAIHZvaWQg
SlNET01XaW5kb3c6OnZpc2l0QWRkaXRpb25hbENoaWxkcmUKICAgICB3cmFwcGVkKCkudmlzaXRK
U0V2ZW50TGlzdGVuZXJzKHZpc2l0b3IpOwogfQogCit0ZW1wbGF0ZSB2b2lkIEpTRE9NV2luZG93
Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0
ZSB2b2lkIEpTRE9NV2luZG93Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYp
OworCiAjaWYgRU5BQkxFKFVTRVJfTUVTU0FHRV9IQU5ETEVSUykKIEpTQ19ERUZJTkVfQ1VTVE9N
X0dFVFRFUihqc0RPTVdpbmRvd193ZWJraXQsIChKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2Jh
bE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpKQogewpJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNEZXByZWNhdGVkQ1NTT01WYWx1ZUN1c3Rv
bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNEZXByZWNh
dGVkQ1NTT01WYWx1ZUN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjcxMCkKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTRGVwcmVjYXRlZENTU09NVmFsdWVDdXN0b20uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zNSw3ICszNSw3IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1l
c3BhY2UgSlNDOwogCi1ib29sIEpTRGVwcmVjYXRlZENTU09NVmFsdWVPd25lcjo6aXNSZWFjaGFi
bGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQq
LCBTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikKK2Jvb2wgSlNEZXBy
ZWNhdGVkQ1NTT01WYWx1ZU93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6Okhh
bmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIEFic3RyYWN0U2xvdFZpc2l0b3ImIHZp
c2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCiB7CiAgICAgSlNEZXByZWNhdGVkQ1NTT01WYWx1
ZSoganNDU1NWYWx1ZSA9IGpzQ2FzdDxKU0RlcHJlY2F0ZWRDU1NPTVZhbHVlKj4oaGFuZGxlLnNs
b3QoKS0+YXNDZWxsKCkpOwogICAgIGlmICghanNDU1NWYWx1ZS0+aGFzQ3VzdG9tUHJvcGVydGll
cyhqc0NTU1ZhbHVlLT52bSgpKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
RG9jdW1lbnRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTRG9jdW1lbnRDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI3MTApCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0RvY3VtZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
OTEsMTEgKzkxLDE2IEBAIEpTVmFsdWUgdG9KUyhKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2IK
ICAgICByZXR1cm4gdG9KU05ld2x5Q3JlYXRlZChsZXhpY2FsR2xvYmFsT2JqZWN0LCBnbG9iYWxP
YmplY3QsIFJlZjxEb2N1bWVudD4oZG9jdW1lbnQpKTsKIH0KIAotdm9pZCBKU0RvY3VtZW50Ojp2
aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vdm9pZCBKU0Rv
Y3VtZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3Rl
bXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTRG9jdW1lbnQ6OnZpc2l0QWRkaXRpb25h
bENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290
KHN0YXRpY19jYXN0PFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqPigmd3JhcHBlZCgpKSk7CiB9CiAK
K3RlbXBsYXRlIHZvaWQgSlNEb2N1bWVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oQWJzdHJh
Y3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU0RvY3VtZW50Ojp2aXNpdEFkZGl0aW9u
YWxDaGlsZHJlbihTbG90VmlzaXRvciYpOworCiB2b2lkIEpTRG9jdW1lbnQ6OmFuYWx5emVIZWFw
KEpTQ2VsbCogY2VsbCwgSGVhcEFuYWx5emVyJiBhbmFseXplcikKIHsKICAgICBCYXNlOjphbmFs
eXplSGVhcChjZWxsLCBhbmFseXplcik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0Vycm9yRXZlbnRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTRXJyb3JFdmVudEN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjcxMCkKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXJyb3JFdmVudEN1c3RvbS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI4LDkgKzI4LDE0IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBK
U0Vycm9yRXZlbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZp
c2l0b3IpCisvL3ZvaWQgSlNFcnJvckV2ZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6
OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQg
SlNFcnJvckV2ZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQog
ewogICAgIHdyYXBwZWQoKS5vcmlnaW5hbEVycm9yKCkudmlzaXQodmlzaXRvcik7CiB9CiAKK3Rl
bXBsYXRlIHZvaWQgSlNFcnJvckV2ZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OkFi
c3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNFcnJvckV2ZW50Ojp2aXNpdEFk
ZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJik7CisKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRMaXN0ZW5lci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudExpc3Rl
bmVyLmNwcAkocmV2aXNpb24gMjcyNzEwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNFdmVudExpc3RlbmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzgsNyArNzgsOCBAQCBKU09i
amVjdCogSlNFdmVudExpc3RlbmVyOjppbml0aWFsaXplSlNGCiAgICAgcmV0dXJuIG51bGxwdHI7
CiB9CiAKLXZvaWQgSlNFdmVudExpc3RlbmVyOjp2aXNpdEpTRnVuY3Rpb24oU2xvdFZpc2l0b3Im
IHZpc2l0b3IpCisvL3ZvaWQgSlNFdmVudExpc3RlbmVyOjp2aXNpdEpTRnVuY3Rpb24oU2xvdFZp
c2l0b3ImIHZpc2l0b3IpCit2b2lkIEpTRXZlbnRMaXN0ZW5lcjo6dmlzaXRKU0Z1bmN0aW9uKEFi
c3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgLy8gSWYgbV93cmFwcGVyIGlzIG51
bGwsIHdlIGFyZSBub3Qga2VlcGluZyBtX2pzRnVuY3Rpb24gYWxpdmUuCiAgICAgaWYgKCFtX3dy
YXBwZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50TGlzdGVuZXIu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50TGlzdGVu
ZXIuaAkocmV2aXNpb24gMjcyNzEwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNF
dmVudExpc3RlbmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTYyLDcgKzYyLDggQEAgcHVibGljOgog
CiBwcml2YXRlOgogICAgIHZpcnR1YWwgSlNDOjpKU09iamVjdCogaW5pdGlhbGl6ZUpTRnVuY3Rp
b24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYpIGNvbnN0OwotICAgIHZvaWQgdmlzaXRKU0Z1bmN0
aW9uKEpTQzo6U2xvdFZpc2l0b3ImKSBmaW5hbDsKKy8vICAgIHZvaWQgdmlzaXRKU0Z1bmN0aW9u
KEpTQzo6U2xvdFZpc2l0b3ImKSBmaW5hbDsKKyAgICB2b2lkIHZpc2l0SlNGdW5jdGlvbihKU0M6
OkFic3RyYWN0U2xvdFZpc2l0b3ImKSBmaW5hbDsKIAogcHJvdGVjdGVkOgogICAgIEpTRXZlbnRM
aXN0ZW5lcihKU0M6OkpTT2JqZWN0KiBmdW5jdGlvbiwgSlNDOjpKU09iamVjdCogd3JhcHBlciwg
Ym9vbCBpc0F0dHJpYnV0ZSwgRE9NV3JhcHBlcldvcmxkJik7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0V2ZW50VGFyZ2V0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50VGFyZ2V0Q3VzdG9tLmNwcAkocmV2aXNpb24g
MjcyNzEwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudFRhcmdldEN1c3Rv
bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcyLDkgKzcyLDE0IEBAIHN0ZDo6dW5pcXVlX3B0cjxK
U0V2ZW50VGFyZ2V0V3JhcHBlcj4ganMKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotdm9pZCBK
U0V2ZW50VGFyZ2V0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRv
cikKKy8vdm9pZCBKU0V2ZW50VGFyZ2V0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90Vmlz
aXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTRXZlbnRU
YXJnZXQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAg
d3JhcHBlZCgpLnZpc2l0SlNFdmVudExpc3RlbmVycyh2aXNpdG9yKTsKIH0KIAordGVtcGxhdGUg
dm9pZCBKU0V2ZW50VGFyZ2V0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihBYnN0cmFjdFNsb3RW
aXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTRXZlbnRUYXJnZXQ6OnZpc2l0QWRkaXRpb25hbENo
aWxkcmVuKFNsb3RWaXNpdG9yJik7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRmV0Y2hFdmVudEN1c3RvbS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNGZXRjaEV2ZW50Q3VzdG9tLmNwcAko
cmV2aXNpb24gMjcyNzEwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNGZXRjaEV2
ZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsMTEgKzMwLDE2IEBACiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotdm9pZCBKU0ZldGNoRXZlbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxk
cmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3ZvaWQgSlNGZXRjaEV2ZW50Ojp2aXNp
dEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8
dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNGZXRjaEV2ZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGls
ZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdCgmd3Jh
cHBlZCgpLnJlcXVlc3QoKSk7CiB9CiAKLX0KK3RlbXBsYXRlIHZvaWQgSlNGZXRjaEV2ZW50Ojp2
aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBs
YXRlIHZvaWQgSlNGZXRjaEV2ZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RW
aXNpdG9yJik7CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxDYW52YXNFbGVtZW50Q3VzdG9tLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxDYW52YXNFbGVtZW50
Q3VzdG9tLmNwcAkocmV2aXNpb24gMjcyNzEwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNIVE1MQ2FudmFzRWxlbWVudEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDkg
KzMxLDE0IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBKU0hUTUxDYW52YXNFbGVt
ZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQor
Ly92b2lkIEpTSFRNTENhbnZhc0VsZW1lbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBK
U0hUTUxDYW52YXNFbGVtZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNp
dG9yKQogewogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChzdGF0aWNfY2FzdDxDYW52YXNCYXNl
Kj4oJndyYXBwZWQoKSkpOwogfQogCit0ZW1wbGF0ZSB2b2lkIEpTSFRNTENhbnZhc0VsZW1lbnQ6
OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVt
cGxhdGUgdm9pZCBKU0hUTUxDYW52YXNFbGVtZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihK
U0M6OlNsb3RWaXNpdG9yJik7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTFRlbXBsYXRlRWxlbWVudEN1c3RvbS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MVGVtcGxhdGVFbGVt
ZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gMjcyNzEwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNIVE1MVGVtcGxhdGVFbGVtZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzcsMTAgKzM3LDE1IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2UgSlND
OwogCi12b2lkIEpTSFRNTFRlbXBsYXRlRWxlbWVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4o
SlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vdm9pZCBKU0hUTUxUZW1wbGF0ZUVsZW1lbnQ6
OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1w
bGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0hUTUxUZW1wbGF0ZUVsZW1lbnQ6OnZpc2l0
QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgaWYgKGF1dG8qIGNv
bnRlbnQgPSB3cmFwcGVkKCkuY29udGVudElmQXZhaWxhYmxlKCkpCiAgICAgICAgIHZpc2l0b3Iu
YWRkT3BhcXVlUm9vdChyb290KGNvbnRlbnQpKTsKIH0KIAordGVtcGxhdGUgdm9pZCBKU0hUTUxU
ZW1wbGF0ZUVsZW1lbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6QWJzdHJhY3RTbG90
VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU0hUTUxUZW1wbGF0ZUVsZW1lbnQ6OnZpc2l0QWRk
aXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImKTsKKwogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIaXN0b3J5Q3VzdG9tLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hpc3RvcnlDdXN0
b20uY3BwCShyZXZpc2lvbiAyNzI3MTApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0hpc3RvcnlDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NCw5ICs0NCwxNCBAQCBKU1Zh
bHVlIEpTSGlzdG9yeTo6c3RhdGUoSlNHbG9iYWxPYmplY3QmCiAgICAgfSk7CiB9CiAKLXZvaWQg
SlNIaXN0b3J5Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikK
Ky8vdm9pZCBKU0hpc3Rvcnk6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNIaXN0b3J5Ojp2aXNp
dEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHdyYXBwZWQoKS5j
YWNoZWRTdGF0ZUZvckdDKCkudmlzaXQodmlzaXRvcik7CiB9CiAKK3RlbXBsYXRlIHZvaWQgSlNI
aXN0b3J5Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0
ZW1wbGF0ZSB2b2lkIEpTSGlzdG9yeTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0
b3ImKTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNJREJDdXJzb3JDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTSURCQ3Vyc29yQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcyNzEwKQor
KysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJDdXJzb3JDdXN0b20uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC01MCw3ICs1MCw5IEBAIEpTQzo6SlNWYWx1ZSBKU0lEQkN1cnNvcjo6cHJp
bWFyeUtleShKU0MKICAgICB9KTsKIH0KIAotdm9pZCBKU0lEQkN1cnNvcjo6dmlzaXRBZGRpdGlv
bmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3ZvaWQgSlNJREJDdXJzb3I6OnZp
c2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlw
ZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNJREJDdXJzb3I6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVu
KFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0byYgY3Vyc29yID0gd3JhcHBlZCgpOwogICAg
IGlmIChhdXRvKiByZXF1ZXN0ID0gY3Vyc29yLnJlcXVlc3QoKSkKQEAgLTU5LDYgKzYxLDkgQEAg
dm9pZCBKU0lEQkN1cnNvcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZQogICAgIGN1cnNvci5wcmlt
YXJ5S2V5V3JhcHBlcigpLnZpc2l0KHZpc2l0b3IpOwogfQogCit0ZW1wbGF0ZSB2b2lkIEpTSURC
Q3Vyc29yOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0
ZW1wbGF0ZSB2b2lkIEpTSURCQ3Vyc29yOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90Vmlz
aXRvciYpOworCiBKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpKU0dsb2JhbE9iamVjdCos
IEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZjxJREJDdXJzb3I+JiYgY3Vyc29y
KQogewogICAgIGlmIChpczxJREJDdXJzb3JXaXRoVmFsdWU+KGN1cnNvcikpCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQkN1cnNvcldpdGhWYWx1ZUN1c3RvbS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJDdXJzb3JXaXRoVmFs
dWVDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI3MTApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0lEQkN1cnNvcldpdGhWYWx1ZUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQz
LDEyICs0MywxNyBAQCBKU0M6OkpTVmFsdWUgSlNJREJDdXJzb3JXaXRoVmFsdWU6OnZhbHVlCiAg
ICAgfSk7CiB9CiAKLXZvaWQgSlNJREJDdXJzb3JXaXRoVmFsdWU6OnZpc2l0QWRkaXRpb25hbENo
aWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy92b2lkIEpTSURCQ3Vyc29yV2l0aFZhbHVl
Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRl
PHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTSURCQ3Vyc29yV2l0aFZhbHVlOjp2aXNpdEFkZGl0
aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTSURCQ3Vyc29yOjp2aXNp
dEFkZGl0aW9uYWxDaGlsZHJlbih2aXNpdG9yKTsKICAgICB3cmFwcGVkKCkudmFsdWVXcmFwcGVy
KCkudmlzaXQodmlzaXRvcik7CiB9CiAKK3RlbXBsYXRlIHZvaWQgSlNJREJDdXJzb3JXaXRoVmFs
dWU6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBs
YXRlIHZvaWQgSlNJREJDdXJzb3JXaXRoVmFsdWU6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNs
b3RWaXNpdG9yJik7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJM
RShJTkRFWEVEX0RBVEFCQVNFKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJ
REJJbmRleEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNJREJJbmRleEN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjcxMCkKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTSURCSW5kZXhDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
NCwxMSArMzQsMTYgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBKU0M7
CiAKLXZvaWQgSlNJREJJbmRleDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3Im
IHZpc2l0b3IpCisvL3ZvaWQgSlNJREJJbmRleDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xv
dFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0lE
QkluZGV4Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAg
IHZpc2l0b3IuYWRkT3BhcXVlUm9vdChzdGF0aWNfY2FzdDxJREJJbmRleCY+KHdyYXBwZWQoKSku
b2JqZWN0U3RvcmVBc09wYXF1ZVJvb3QoKSk7CiB9CiAKK3RlbXBsYXRlIHZvaWQgSlNJREJJbmRl
eDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oQWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxh
dGUgdm9pZCBKU0lEQkluZGV4Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYp
OworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9E
QVRBQkFTRSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCT2JqZWN0U3Rv
cmVDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
SURCT2JqZWN0U3RvcmVDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI3MTApCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0lEQk9iamVjdFN0b3JlQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzYsMTEgKzM2LDE2IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3Bh
Y2UgSlNDOwogCi12b2lkIEpTSURCT2JqZWN0U3RvcmU6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVu
KFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy92b2lkIEpTSURCT2JqZWN0U3RvcmU6OnZpc2l0QWRk
aXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUg
VmlzaXRvcj4KK3ZvaWQgSlNJREJPYmplY3RTdG9yZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4o
VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBzdGF0aWNfY2FzdDxJREJPYmplY3RTdG9yZSY+KHdy
YXBwZWQoKSkudmlzaXRSZWZlcmVuY2VkSW5kZXhlcyh2aXNpdG9yKTsKIH0KIAotfQordGVtcGxh
dGUgdm9pZCBKU0lEQk9iamVjdFN0b3JlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihBYnN0cmFj
dFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTSURCT2JqZWN0U3RvcmU6OnZpc2l0QWRk
aXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
IAogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQlJlcXVlc3RD
dXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURC
UmVxdWVzdEN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjcxMCkKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTSURCUmVxdWVzdEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg5LDEy
ICs4OSwxOCBAQCBKU0M6OkpTVmFsdWUgSlNJREJSZXF1ZXN0OjpyZXN1bHQoSlNDOjpKCiAgICAg
fSk7CiB9CiAKLXZvaWQgSlNJREJSZXF1ZXN0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90
VmlzaXRvciYgdmlzaXRvcikKKy8vdm9pZCBKU0lEQlJlcXVlc3Q6OnZpc2l0QWRkaXRpb25hbENo
aWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4K
K3ZvaWQgSlNJREJSZXF1ZXN0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNp
dG9yKQogewogICAgIGF1dG8mIHJlcXVlc3QgPSB3cmFwcGVkKCk7CiAgICAgcmVxdWVzdC5yZXN1
bHRXcmFwcGVyKCkudmlzaXQodmlzaXRvcik7CiAgICAgcmVxdWVzdC5jdXJzb3JXcmFwcGVyKCku
dmlzaXQodmlzaXRvcik7CiB9CiAKLX0KK3RlbXBsYXRlIHZvaWQgSlNJREJSZXF1ZXN0Ojp2aXNp
dEFkZGl0aW9uYWxDaGlsZHJlbihBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lk
IEpTSURCUmVxdWVzdDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCiAjZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJB
U0UpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQlRyYW5zYWN0aW9uQ3Vz
dG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQlRy
YW5zYWN0aW9uQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcyNzEwKQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNJREJUcmFuc2FjdGlvbkN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM0LDExICszNCwxNiBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogdXNpbmcgbmFtZXNwYWNlIEpT
QzsKIAotdm9pZCBKU0lEQlRyYW5zYWN0aW9uOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90
VmlzaXRvciYgdmlzaXRvcikKKy8vdm9pZCBKU0lEQlRyYW5zYWN0aW9uOjp2aXNpdEFkZGl0aW9u
YWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0
b3I+Cit2b2lkIEpTSURCVHJhbnNhY3Rpb246OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0
b3ImIHZpc2l0b3IpCiB7CiAgICAgc3RhdGljX2Nhc3Q8SURCVHJhbnNhY3Rpb24mPih3cmFwcGVk
KCkpLnZpc2l0UmVmZXJlbmNlZE9iamVjdFN0b3Jlcyh2aXNpdG9yKTsKIH0KIAotfQordGVtcGxh
dGUgdm9pZCBKU0lEQlRyYW5zYWN0aW9uOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihBYnN0cmFj
dFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTSURCVHJhbnNhY3Rpb246OnZpc2l0QWRk
aXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
IAogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0ludGVyc2VjdGlv
bk9ic2VydmVyQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0ludGVyc2VjdGlvbk9ic2VydmVyQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcyNzEwKQor
KysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJbnRlcnNlY3Rpb25PYnNlcnZlckN1c3Rv
bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDEwICszMCwxNSBAQAogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLXZvaWQgSlNJbnRlcnNlY3Rpb25PYnNlcnZlcjo6dmlzaXRBZGRpdGlvbmFsQ2hp
bGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vdm9pZCBKU0ludGVyc2VjdGlvbk9i
c2VydmVyOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9y
KQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNJbnRlcnNlY3Rpb25PYnNlcnZl
cjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBpZiAo
YXV0byogY2FsbGJhY2sgPSB3cmFwcGVkKCkuY2FsbGJhY2tDb25jdXJyZW50bHkoKSkKICAgICAg
ICAgY2FsbGJhY2stPnZpc2l0SlNGdW5jdGlvbih2aXNpdG9yKTsKIH0KIAotfQordGVtcGxhdGUg
dm9pZCBKU0ludGVyc2VjdGlvbk9ic2VydmVyOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6
OkFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNJbnRlcnNlY3Rpb25PYnNl
cnZlcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYpOworCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lu
dGVyc2VjdGlvbk9ic2VydmVyRW50cnlDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW50ZXJzZWN0aW9uT2JzZXJ2ZXJFbnRyeUN1c3RvbS5jcHAJ
KHJldmlzaW9uIDI3MjcxMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW50ZXJz
ZWN0aW9uT2JzZXJ2ZXJFbnRyeUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMw
LDkgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIEpTSW50ZXJzZWN0aW9uT2JzZXJ2
ZXJFbnRyeTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRv
cikKKy8vdm9pZCBKU0ludGVyc2VjdGlvbk9ic2VydmVyRW50cnk6OnZpc2l0QWRkaXRpb25hbENo
aWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNp
dG9yPgordm9pZCBKU0ludGVyc2VjdGlvbk9ic2VydmVyRW50cnk6OnZpc2l0QWRkaXRpb25hbENo
aWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHJv
b3Qod3JhcHBlZCgpLnRhcmdldCgpKSk7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHdyYXBw
ZWQoKS5ib3VuZGluZ0NsaWVudFJlY3QoKSk7CkBAIC0zOCw0ICs0MCw3IEBAIHZvaWQgSlNJbnRl
cnNlY3Rpb25PYnNlcnZlckVudHJ5Ojp2aXNpdEEKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qo
d3JhcHBlZCgpLnJvb3RCb3VuZHMoKSk7CiB9CiAKLX0KK3RlbXBsYXRlIHZvaWQgSlNJbnRlcnNl
Y3Rpb25PYnNlcnZlckVudHJ5Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OkFic3RyYWN0
U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNJbnRlcnNlY3Rpb25PYnNlcnZlckVudHJ5
Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJik7CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWVzc2Fn
ZUNoYW5uZWxDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTTWVzc2FnZUNoYW5uZWxDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI3MTApCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01lc3NhZ2VDaGFubmVsQ3VzdG9tLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzMsNyArMzMsOSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQg
SlNNZXNzYWdlQ2hhbm5lbDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRv
ciYgdmlzaXRvcikKKy8vdm9pZCBKU01lc3NhZ2VDaGFubmVsOjp2aXNpdEFkZGl0aW9uYWxDaGls
ZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRv
cj4KK3ZvaWQgSlNNZXNzYWdlQ2hhbm5lbDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRv
ciYgdmlzaXRvcikKIHsKICAgICBpZiAoTWVzc2FnZVBvcnQqIHBvcnQgPSB3cmFwcGVkKCkucG9y
dDEoKSkKICAgICAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHBvcnQpOwpAQCAtNDIsNiArNDQs
OSBAQCB2b2lkIEpTTWVzc2FnZUNoYW5uZWw6OnZpc2l0QWRkaXRpb25hbENoCiAgICAgICAgIHZp
c2l0b3IuYWRkT3BhcXVlUm9vdChwb3J0KTsKIH0KIAordGVtcGxhdGUgdm9pZCBKU01lc3NhZ2VD
aGFubmVsOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3Im
KTsKK3RlbXBsYXRlIHZvaWQgSlNNZXNzYWdlQ2hhbm5lbDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRy
ZW4oSlNDOjpTbG90VmlzaXRvciYpOworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRp
ZiAvLyBFTkFCTEUoQ0hBTk5FTF9NRVNTQUdJTkcpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU01lc3NhZ2VFdmVudEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNNZXNzYWdlRXZlbnRDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI3
MTApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01lc3NhZ2VFdmVudEN1c3RvbS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTcwLDcgKzcwLDkgQEAgSlNDOjpKU1ZhbHVlIEpTTWVzc2Fn
ZUV2ZW50OjpkYXRhKEpTQzo6SgogICAgIH0pOwogfQogCi12b2lkIEpTTWVzc2FnZUV2ZW50Ojp2
aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy92b2lk
IEpTTWVzc2FnZUV2ZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9y
JiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNNZXNzYWdlRXZl
bnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgV1RG
Ojpzd2l0Y2hPbih3cmFwcGVkKCkuZGF0YSgpLCBbJnZpc2l0b3JdIChjb25zdCBKU1ZhbHVlSW5X
cmFwcGVkT2JqZWN0JiBkYXRhKSB7CiAgICAgICAgIGRhdGEudmlzaXQodmlzaXRvcik7CkBAIC04
NCw0ICs4Niw3IEBAIHZvaWQgSlNNZXNzYWdlRXZlbnQ6OnZpc2l0QWRkaXRpb25hbENoaWwKICAg
ICB3cmFwcGVkKCkuY2FjaGVkUG9ydHMoKS52aXNpdCh2aXNpdG9yKTsKIH0KIAordGVtcGxhdGUg
dm9pZCBKU01lc3NhZ2VFdmVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpBYnN0cmFj
dFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTTWVzc2FnZUV2ZW50Ojp2aXNpdEFkZGl0
aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJik7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWVzc2FnZVBvcnRDdXN0b20u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWVzc2FnZVBv
cnRDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI3MTApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU01lc3NhZ2VQb3J0Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsMTEgKzMx
LDE2IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCi12b2lk
IEpTTWVzc2FnZVBvcnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNp
dG9yKQorLy92b2lkIEpTTWVzc2FnZVBvcnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNNZXNz
YWdlUG9ydDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAg
ICAvLyBJZiB3ZSBoYXZlIGEgbG9jYWxseSBlbnRhbmdsZWQgcG9ydCwgd2UgY2FuIGRpcmVjdGx5
IG1hcmsgaXQgYXMgcmVhY2hhYmxlLiBQb3J0cyB0aGF0IGFyZSByZW1vdGVseSBlbnRhbmdsZWQg
YXJlIG1hcmtlZCBpbi11c2UgYnkgbWFya0FjdGl2ZU9iamVjdHNGb3JDb250ZXh0KCkuCiAgICAg
aWYgKE1lc3NhZ2VQb3J0KiBwb3J0ID0gd3JhcHBlZCgpLmxvY2FsbHlFbnRhbmdsZWRQb3J0KCkp
CiAgICAgICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChwb3J0KTsKIH0KIAordGVtcGxhdGUgdm9p
ZCBKU01lc3NhZ2VQb3J0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihBYnN0cmFjdFNsb3RWaXNp
dG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTTWVzc2FnZVBvcnQ6OnZpc2l0QWRkaXRpb25hbENoaWxk
cmVuKFNsb3RWaXNpdG9yJik7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTXV0YXRpb25PYnNlcnZlckN1c3RvbS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNdXRhdGlvbk9ic2VydmVyQ3Vz
dG9tLmNwcAkocmV2aXNpb24gMjcyNzEwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNNdXRhdGlvbk9ic2VydmVyQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksMTIgKzM5
LDE3IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCi12b2lk
IEpTTXV0YXRpb25PYnNlcnZlcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90Vmlz
aXRvciYgdmlzaXRvcikKKy8vdm9pZCBKU011dGF0aW9uT2JzZXJ2ZXI6OnZpc2l0QWRkaXRpb25h
bENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPgordm9pZCBKU011dGF0aW9uT2JzZXJ2ZXI6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVu
KFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgd3JhcHBlZCgpLmNhbGxiYWNrKCkudmlzaXRKU0Z1
bmN0aW9uKHZpc2l0b3IpOwogfQogCi1ib29sIEpTTXV0YXRpb25PYnNlcnZlck93bmVyOjppc1Jl
YWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwg
dm9pZCosIFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKipyZWFzb24pCit0ZW1wbGF0
ZSB2b2lkIEpTTXV0YXRpb25PYnNlcnZlcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpB
YnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTTXV0YXRpb25PYnNlcnZlcjo6
dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYpOworCitib29sIEpTTXV0
YXRpb25PYnNlcnZlck93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRs
ZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0
b3IsIGNvbnN0IGNoYXIqKnJlYXNvbikKIHsKICAgICBmb3IgKGF1dG8qIG5vZGUgOiBqc0Nhc3Q8
SlNNdXRhdGlvbk9ic2VydmVyKj4oaGFuZGxlLnNsb3QoKS0+YXNDZWxsKCkpLT53cmFwcGVkKCku
b2JzZXJ2ZWROb2RlcygpKSB7CiAgICAgICAgIGlmICh2aXNpdG9yLmNvbnRhaW5zT3BhcXVlUm9v
dChyb290KG5vZGUpKSkgewpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNdXRh
dGlvblJlY29yZEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNNdXRhdGlvblJlY29yZEN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjcxMCkKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTXV0YXRpb25SZWNvcmRDdXN0b20uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMCw5ICszMCwxNCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZv
aWQgSlNNdXRhdGlvblJlY29yZDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90Vmlz
aXRvciYgdmlzaXRvcikKKy8vdm9pZCBKU011dGF0aW9uUmVjb3JkOjp2aXNpdEFkZGl0aW9uYWxD
aGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlz
aXRvcj4KK3ZvaWQgSlNNdXRhdGlvblJlY29yZDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlz
aXRvciYgdmlzaXRvcikKIHsKICAgICB3cmFwcGVkKCkudmlzaXROb2Rlc0NvbmN1cnJlbnRseSh2
aXNpdG9yKTsKIH0KLSAgICAKKwordGVtcGxhdGUgdm9pZCBKU011dGF0aW9uUmVjb3JkOjp2aXNp
dEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRl
IHZvaWQgSlNNdXRhdGlvblJlY29yZDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90
VmlzaXRvciYpOworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU05hdmlnYXRvckN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNOYXZpZ2F0b3JDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI3
MTApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05hdmlnYXRvckN1c3RvbS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMyLDExICszMiwxNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLXZvaWQgSlNOYXZpZ2F0b3I6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZp
c2l0b3ImIHZpc2l0b3IpCisvL3ZvaWQgSlNOYXZpZ2F0b3I6OnZpc2l0QWRkaXRpb25hbENoaWxk
cmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
Pgordm9pZCBKU05hdmlnYXRvcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlz
aXRvcikKIHsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qoc3RhdGljX2Nhc3Q8TmF2aWdhdG9y
QmFzZSo+KCZ3cmFwcGVkKCkpKTsKIH0KIAordGVtcGxhdGUgdm9pZCBKU05hdmlnYXRvcjo6dmlz
aXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0
ZSB2b2lkIEpTTmF2aWdhdG9yOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNp
dG9yJik7CisKICNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQogSlNDOjpKU1ZhbHVlIEpTTmF2aWdh
dG9yOjpnZXRVc2VyTWVkaWEoSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVj
dCwgSlNDOjpDYWxsRnJhbWUmIGNhbGxGcmFtZSkKIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTTm9kZUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNOb2RlQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcyNzEwKQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NzQsNyArNzQsOCBAQCB1c2luZyBuYW1lc3BhY2UgSlNDOwogCiB1c2luZyBuYW1lc3BhY2UgSFRN
TE5hbWVzOwogCi1zdGF0aWMgaW5saW5lIGJvb2wgaXNSZWFjaGFibGVGcm9tRE9NKE5vZGUqIG5v
ZGUsIFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQorLy9zdGF0aWMg
aW5saW5lIGJvb2wgaXNSZWFjaGFibGVGcm9tRE9NKE5vZGUqIG5vZGUsIFNsb3RWaXNpdG9yJiB2
aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQorc3RhdGljIGlubGluZSBib29sIGlzUmVhY2hh
YmxlRnJvbURPTShOb2RlKiBub2RlLCBBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25z
dCBjaGFyKiogcmVhc29uKQogewogICAgIGlmICghbm9kZS0+aXNDb25uZWN0ZWQoKSkgewogICAg
ICAgICBpZiAoaXM8RWxlbWVudD4oKm5vZGUpKSB7CkBAIC0xMjMsNyArMTI0LDcgQEAgc3RhdGlj
IGlubGluZSBib29sIGlzUmVhY2hhYmxlRnJvbURPTShObwogICAgIHJldHVybiB2aXNpdG9yLmNv
bnRhaW5zT3BhcXVlUm9vdChyb290KG5vZGUpKTsKIH0KIAotYm9vbCBKU05vZGVPd25lcjo6aXNS
ZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUs
IHZvaWQqLCBTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikKK2Jvb2wg
SlNOb2RlT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6
VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvciwgY29u
c3QgY2hhcioqIHJlYXNvbikKIHsKICAgICBKU05vZGUqIGpzTm9kZSA9IGpzQ2FzdDxKU05vZGUq
PihoYW5kbGUuc2xvdCgpLT5hc0NlbGwoKSk7CiAgICAgcmV0dXJuIGlzUmVhY2hhYmxlRnJvbURP
TSgmanNOb2RlLT53cmFwcGVkKCksIHZpc2l0b3IsIHJlYXNvbik7CkBAIC0xMzYsMTEgKzEzNywx
NiBAQCBKU1Njb3BlKiBKU05vZGU6OnB1c2hFdmVudEhhbmRsZXJTY29wZShKCiAgICAgcmV0dXJu
IG5vZGU7CiB9CiAKLXZvaWQgSlNOb2RlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90Vmlz
aXRvciYgdmlzaXRvcikKKy8vdm9pZCBKU05vZGU6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNO
b2RlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHZp
c2l0b3IuYWRkT3BhcXVlUm9vdChyb290KHdyYXBwZWQoKSkpOwogfQogCit0ZW1wbGF0ZSB2b2lk
IEpTTm9kZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oQWJzdHJhY3RTbG90VmlzaXRvciYpOwor
dGVtcGxhdGUgdm9pZCBKU05vZGU6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9y
Jik7CisKIHN0YXRpYyBBTFdBWVNfSU5MSU5FIEpTVmFsdWUgY3JlYXRlV3JhcHBlcklubGluZShK
U0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNET01HbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgUmVmPE5vZGU+JiYgbm9kZSkKIHsKICAgICBBU1NFUlQoIWdldENhY2hlZFdy
YXBwZXIoZ2xvYmFsT2JqZWN0LT53b3JsZCgpLCBub2RlKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU05vZGVJdGVyYXRvckN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlSXRlcmF0b3JDdXN0b20uY3BwCShyZXZpc2lv
biAyNzI3MTApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVJdGVyYXRvckN1
c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1LDEwICsyNSwxNSBAQAogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLXZvaWQgSlNOb2RlSXRlcmF0b3I6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVu
KEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3ZvaWQgSlNOb2RlSXRlcmF0b3I6OnZpc2l0
QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0
eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU05vZGVJdGVyYXRvcjo6dmlzaXRBZGRpdGlvbmFsQ2hp
bGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBpZiAoTm9kZUZpbHRlciogZmlsdGVyID0g
d3JhcHBlZCgpLmZpbHRlcigpKQogICAgICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QoZmlsdGVy
KTsKIH0KIAotfQordGVtcGxhdGUgdm9pZCBKU05vZGVJdGVyYXRvcjo6dmlzaXRBZGRpdGlvbmFs
Q2hpbGRyZW4oSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTTm9k
ZUl0ZXJhdG9yOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJik7CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTTm9kZUxpc3RDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTTm9kZUxpc3RDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI3MTApCisrKyBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVMaXN0Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzcsNyArMzcsNyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogdXNpbmcgbmFtZXNwYWNlIEpT
QzsKIAotYm9vbCBKU05vZGVMaXN0T3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpT
Qzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgU2xvdFZpc2l0b3ImIHZpc2l0
b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCitib29sIEpTTm9kZUxpc3RPd25lcjo6aXNSZWFjaGFi
bGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQq
LCBBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQogewog
ICAgIEpTTm9kZUxpc3QqIGpzTm9kZUxpc3QgPSBqc0Nhc3Q8SlNOb2RlTGlzdCo+KGhhbmRsZS5z
bG90KCktPmFzQ2VsbCgpKTsKICAgICBpZiAoIWpzTm9kZUxpc3QtPmhhc0N1c3RvbVByb3BlcnRp
ZXMoanNOb2RlTGlzdC0+dm0oKSkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U09mZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyREN1c3RvbS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNPZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdD
b250ZXh0MkRDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI3MTApCisrKyBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU09mZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyREN1c3RvbS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDcgQEAgaW5saW5lIHZvaWQqIHJvb3QoT2Zmc2Ny
ZWVuQ2FudmFzKiBjYW52YQogICAgIHJldHVybiBjYW52YXM7CiB9CiAKLWJvb2wgSlNPZmZzY3Jl
ZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9v
dHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBTbG90VmlzaXRvciYg
dmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikKK2Jvb2wgSlNPZmZzY3JlZW5DYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkRPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5k
bGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNp
dG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQogewogICAgIGlmIChVTkxJS0VMWShyZWFzb24pKQog
ICAgICAgICAqcmVhc29uID0gIkNhbnZhcyBpcyBvcGFxdWUgcm9vdCI7CkBAIC00MSwxMSArNDEs
MTYgQEAgYm9vbCBKU09mZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRAogICAgIHJldHVy
biB2aXNpdG9yLmNvbnRhaW5zT3BhcXVlUm9vdChyb290KTsKIH0KIAotdm9pZCBKU09mZnNjcmVl
bkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZp
c2l0b3ImIHZpc2l0b3IpCisvL3ZvaWQgSlNPZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0
MkQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxh
dGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNPZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdDb250
ZXh0MkQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAg
dmlzaXRvci5hZGRPcGFxdWVSb290KHJvb3QoJndyYXBwZWQoKS5jYW52YXMoKSkpOwogfQogCit0
ZW1wbGF0ZSB2b2lkIEpTT2Zmc2NyZWVuQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjp2aXNpdEFk
ZGl0aW9uYWxDaGlsZHJlbihBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpT
T2Zmc2NyZWVuQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJl
bihTbG90VmlzaXRvciYpOworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZgpJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNQYWludFJlbmRlcmluZ0NvbnRleHQyREN1
c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNQYWlu
dFJlbmRlcmluZ0NvbnRleHQyREN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjcxMCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUGFpbnRSZW5kZXJpbmdDb250ZXh0MkRDdXN0b20uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3ICszNiw3IEBAIGlubGluZSB2b2lkKiByb290KEN1c3Rv
bVBhaW50Q2FudmFzKiBjYW4KICAgICByZXR1cm4gY2FudmFzOwogfQogCi1ib29sIEpTUGFpbnRS
ZW5kZXJpbmdDb250ZXh0MkRPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpI
YW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBTbG90VmlzaXRvciYgdmlzaXRvciwg
Y29uc3QgY2hhcioqIHJlYXNvbikKK2Jvb2wgSlNQYWludFJlbmRlcmluZ0NvbnRleHQyRE93bmVy
Ojppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhh
bmRsZSwgdm9pZCosIEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiBy
ZWFzb24pCiB7CiAgICAgaWYgKFVOTElLRUxZKHJlYXNvbikpCiAgICAgICAgICpyZWFzb24gPSAi
Q2FudmFzIGlzIG9wYXF1ZSByb290IjsKQEAgLTQ2LDExICs0NiwxNiBAQCBib29sIEpTUGFpbnRS
ZW5kZXJpbmdDb250ZXh0MkRPd25lcjo6aXNSCiAgICAgcmV0dXJuIHZpc2l0b3IuY29udGFpbnNP
cGFxdWVSb290KHJvb3QpOwogfQogCi12b2lkIEpTUGFpbnRSZW5kZXJpbmdDb250ZXh0MkQ6OnZp
c2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy92b2lkIEpTUGFp
bnRSZW5kZXJpbmdDb250ZXh0MkQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9y
JiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNQYWludFJlbmRl
cmluZ0NvbnRleHQyRDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikK
IHsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qocm9vdCgmd3JhcHBlZCgpLmNhbnZhcygpKSk7
CiB9CiAKK3RlbXBsYXRlIHZvaWQgSlNQYWludFJlbmRlcmluZ0NvbnRleHQyRDo6dmlzaXRBZGRp
dGlvbmFsQ2hpbGRyZW4oQWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU1Bh
aW50UmVuZGVyaW5nQ29udGV4dDJEOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRv
ciYpOworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAjZW5kaWYKIApJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNQYWludFdvcmtsZXRHbG9iYWxTY29wZUN1c3RvbS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNQYWludFdvcmtsZXRHbG9i
YWxTY29wZUN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjcxMCkKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTUGFpbnRXb3JrbGV0R2xvYmFsU2NvcGVDdXN0b20uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zMSw3ICszMSw5IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3Bh
Y2UgSlNDOwogCi12b2lkIEpTUGFpbnRXb3JrbGV0R2xvYmFsU2NvcGU6OnZpc2l0QWRkaXRpb25h
bENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3ZvaWQgSlNQYWludFdvcmts
ZXRHbG9iYWxTY29wZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYg
dmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTUGFpbnRXb3JrbGV0
R2xvYmFsU2NvcGU6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7
CiAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayh3cmFwcGVkKCkucGFpbnREZWZpbml0aW9uTG9j
aygpKTsKICAgICBmb3IgKGF1dG8mIHJlZ2lzdGVyZWQgOiB3cmFwcGVkKCkucGFpbnREZWZpbml0
aW9uTWFwKCkudmFsdWVzKCkpIHsKQEAgLTQwLDUgKzQyLDkgQEAgdm9pZCBKU1BhaW50V29ya2xl
dEdsb2JhbFNjb3BlOjp2aXNpdEFkZAogICAgIH0KIH0KIAotfQordGVtcGxhdGUgdm9pZCBKU1Bh
aW50V29ya2xldEdsb2JhbFNjb3BlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OkFic3Ry
YWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNQYWludFdvcmtsZXRHbG9iYWxTY29w
ZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYpOworCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNQYXltZW50TWV0aG9kQ2hhbmdlRXZlbnRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUGF5bWVudE1ldGhvZENoYW5nZUV2ZW50Q3VzdG9t
LmNwcAkocmV2aXNpb24gMjcyNzEwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNQ
YXltZW50TWV0aG9kQ2hhbmdlRXZlbnRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSw3
ICs0MSw5IEBAIEpTQzo6SlNWYWx1ZSBKU1BheW1lbnRNZXRob2RDaGFuZ2VFdmVudDoKICAgICB9
KTsKIH0KIAotdm9pZCBKU1BheW1lbnRNZXRob2RDaGFuZ2VFdmVudDo6dmlzaXRBZGRpdGlvbmFs
Q2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vdm9pZCBKU1BheW1lbnRNZXRo
b2RDaGFuZ2VFdmVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYg
dmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTUGF5bWVudE1ldGhv
ZENoYW5nZUV2ZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQog
ewogICAgIFdURjo6c3dpdGNoT24od3JhcHBlZCgpLm1ldGhvZERldGFpbHMoKSwgWyZ2aXNpdG9y
XShjb25zdCBKU1ZhbHVlSW5XcmFwcGVkT2JqZWN0JiBtZXRob2REZXRhaWxzKSB7CiAgICAgICAg
IG1ldGhvZERldGFpbHMudmlzaXQodmlzaXRvcik7CkBAIC01MSw2ICs1Myw5IEBAIHZvaWQgSlNQ
YXltZW50TWV0aG9kQ2hhbmdlRXZlbnQ6OnZpc2l0QWQKICAgICB3cmFwcGVkKCkuY2FjaGVkTWV0
aG9kRGV0YWlscygpLnZpc2l0KHZpc2l0b3IpOwogfQogCit0ZW1wbGF0ZSB2b2lkIEpTUGF5bWVu
dE1ldGhvZENoYW5nZUV2ZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OkFic3RyYWN0
U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNQYXltZW50TWV0aG9kQ2hhbmdlRXZlbnQ6
OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImKTsKKwogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKFBBWU1FTlRfUkVRVUVTVCkKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUGF5bWVudFJlc3BvbnNlQ3VzdG9tLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1BheW1lbnRSZXNwb25z
ZUN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjcxMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTUGF5bWVudFJlc3BvbnNlQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsMTEg
KzM3LDE2IEBAIEpTQzo6SlNWYWx1ZSBKU1BheW1lbnRSZXNwb25zZTo6ZGV0YWlscygKICAgICB9
KTsKIH0KIAotdm9pZCBKU1BheW1lbnRSZXNwb25zZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4o
SlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vdm9pZCBKU1BheW1lbnRSZXNwb25zZTo6dmlz
aXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRl
PHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTUGF5bWVudFJlc3BvbnNlOjp2aXNpdEFkZGl0aW9u
YWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHdyYXBwZWQoKS5jYWNoZWREZXRh
aWxzKCkudmlzaXQodmlzaXRvcik7CiB9CiAKK3RlbXBsYXRlIHZvaWQgSlNQYXltZW50UmVzcG9u
c2U6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpOwor
dGVtcGxhdGUgdm9pZCBKU1BheW1lbnRSZXNwb25zZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4o
SlNDOjpTbG90VmlzaXRvciYpOworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAv
LyBFTkFCTEUoUEFZTUVOVF9SRVFVRVNUKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNQZXJmb3JtYW5jZU9ic2VydmVyQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU1BlcmZvcm1hbmNlT2JzZXJ2ZXJDdXN0b20uY3BwCShyZXZp
c2lvbiAyNzI3MTApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1BlcmZvcm1hbmNl
T2JzZXJ2ZXJDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwxMiArMzEsMTcgQEAKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIEpTUGVyZm9ybWFuY2VPYnNlcnZlcjo6dmlzaXRB
ZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vdm9pZCBKU1Bl
cmZvcm1hbmNlT2JzZXJ2ZXI6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0
b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1BlcmZvcm1h
bmNlT2JzZXJ2ZXI6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7
CiAgICAgd3JhcHBlZCgpLmNhbGxiYWNrKCkudmlzaXRKU0Z1bmN0aW9uKHZpc2l0b3IpOwogfQog
Ci1ib29sIEpTUGVyZm9ybWFuY2VPYnNlcnZlck93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVS
b290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIEpTQzo6U2xvdFZp
c2l0b3ImLCBjb25zdCBjaGFyKiogcmVhc29uKQordGVtcGxhdGUgdm9pZCBKU1BlcmZvcm1hbmNl
T2JzZXJ2ZXI6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRv
ciYpOwordGVtcGxhdGUgdm9pZCBKU1BlcmZvcm1hbmNlT2JzZXJ2ZXI6OnZpc2l0QWRkaXRpb25h
bENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImKTsKKworYm9vbCBKU1BlcmZvcm1hbmNlT2JzZXJ2
ZXJPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtu
b3duPiBoYW5kbGUsIHZvaWQqLCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImLCBjb25zdCBjaGFy
KiogcmVhc29uKQogewogICAgIGlmIChVTkxJS0VMWShyZWFzb24pKQogICAgICAgICAqcmVhc29u
ID0gIlJlZ2lzdGVyZWQgUGVyZm9ybWFuY2VPYnNlcnZlciBjYWxsYmFjayI7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1BvcFN0YXRlRXZlbnRDdXN0b20uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUG9wU3RhdGVFdmVudEN1c3RvbS5j
cHAJKHJldmlzaW9uIDI3MjcxMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUG9w
U3RhdGVFdmVudEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkwLDkgKzkwLDE0IEBAIEpT
VmFsdWUgSlNQb3BTdGF0ZUV2ZW50OjpzdGF0ZShKU0dsb2JhbE8KICAgICByZXR1cm4gY2FjaGVT
dGF0ZShyZXN1bHQpOwogfQogCi12b2lkIEpTUG9wU3RhdGVFdmVudDo6dmlzaXRBZGRpdGlvbmFs
Q2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vdm9pZCBKU1BvcFN0YXRlRXZl
bnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0
ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1BvcFN0YXRlRXZlbnQ6OnZpc2l0QWRk
aXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgd3JhcHBlZCgpLnN0YXRl
KCkudmlzaXQodmlzaXRvcik7CiB9CiAKK3RlbXBsYXRlIHZvaWQgSlNQb3BTdGF0ZUV2ZW50Ojp2
aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBs
YXRlIHZvaWQgSlNQb3BTdGF0ZUV2ZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNs
b3RWaXNpdG9yJik7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTUHJvbWlzZVJlamVjdGlvbkV2ZW50Q3VzdG9tLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1Byb21pc2VSZWplY3Rpb25FdmVu
dEN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjcxMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTUHJvbWlzZVJlamVjdGlvbkV2ZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzIsOSArMzIsMTQgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIEpTUHJvbWlzZVJl
amVjdGlvbkV2ZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2
aXNpdG9yKQorLy92b2lkIEpTUHJvbWlzZVJlamVjdGlvbkV2ZW50Ojp2aXNpdEFkZGl0aW9uYWxD
aGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlz
aXRvcj4KK3ZvaWQgSlNQcm9taXNlUmVqZWN0aW9uRXZlbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxk
cmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgd3JhcHBlZCgpLnJlYXNvbigpLnZpc2l0KHZp
c2l0b3IpOwogfQogCit0ZW1wbGF0ZSB2b2lkIEpTUHJvbWlzZVJlamVjdGlvbkV2ZW50Ojp2aXNp
dEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRl
IHZvaWQgSlNQcm9taXNlUmVqZWN0aW9uRXZlbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpT
Qzo6U2xvdFZpc2l0b3ImKTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNSZXNpemVPYnNlcnZlckN1c3RvbS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNSZXNpemVPYnNlcnZlckN1c3RvbS5j
cHAJKHJldmlzaW9uIDI3MjcxMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUmVz
aXplT2JzZXJ2ZXJDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCwxMSArMzAsMTYgQEAK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIEpTUmVzaXplT2JzZXJ2ZXI6OnZpc2l0QWRk
aXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3ZvaWQgSlNSZXNp
emVPYnNlcnZlcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlz
aXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTUmVzaXplT2JzZXJ2ZXI6
OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgUmVzaXpl
T2JzZXJ2ZXJDYWxsYmFjayogY2FsbGJhY2sgPSB3cmFwcGVkKCkuY2FsbGJhY2tDb25jdXJyZW50
bHkoKTsKICAgICBpZiAoY2FsbGJhY2spCiAgICAgICAgIGNhbGxiYWNrLT52aXNpdEpTRnVuY3Rp
b24odmlzaXRvcik7CiB9CiAKLX0KK3RlbXBsYXRlIHZvaWQgSlNSZXNpemVPYnNlcnZlcjo6dmlz
aXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0
ZSB2b2lkIEpTUmVzaXplT2JzZXJ2ZXI6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xv
dFZpc2l0b3ImKTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNSZXNpemVPYnNlcnZlckVudHJ5Q3VzdG9tLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1Jlc2l6ZU9ic2VydmVyRW50cnlDdXN0
b20uY3BwCShyZXZpc2lvbiAyNzI3MTApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U1Jlc2l6ZU9ic2VydmVyRW50cnlDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCwxMCAr
MzAsMTUgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIEpTUmVzaXplT2JzZXJ2ZXJF
bnRyeTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikK
Ky8vdm9pZCBKU1Jlc2l6ZU9ic2VydmVyRW50cnk6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpT
Qzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9p
ZCBKU1Jlc2l6ZU9ic2VydmVyRW50cnk6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3Im
IHZpc2l0b3IpCiB7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHJvb3Qod3JhcHBlZCgpLnRh
cmdldCgpKSk7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHdyYXBwZWQoKS5jb250ZW50UmVj
dCgpKTsKIH0KIAotfQordGVtcGxhdGUgdm9pZCBKU1Jlc2l6ZU9ic2VydmVyRW50cnk6OnZpc2l0
QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUg
dm9pZCBKU1Jlc2l6ZU9ic2VydmVyRW50cnk6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6
U2xvdFZpc2l0b3ImKTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNTVkdWaWV3U3BlY0N1c3RvbS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNTVkdWaWV3U3BlY0N1c3RvbS5jcHAJKHJldmlz
aW9uIDI3MjcxMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU1ZHVmlld1NwZWND
dXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCwxMCArMzAsMTUgQEAKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi12b2lkIEpTU1ZHVmlld1NwZWM6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVu
KEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3ZvaWQgSlNTVkdWaWV3U3BlYzo6dmlzaXRB
ZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5
cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTU1ZHVmlld1NwZWM6OnZpc2l0QWRkaXRpb25hbENoaWxk
cmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgQVNTRVJUKHdyYXBwZWQoKS5jb250ZXh0RWxl
bWVudENvbmN1cnJlbnRseSgpLmdldCgpKTsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qocm9v
dCh3cmFwcGVkKCkuY29udGV4dEVsZW1lbnRDb25jdXJyZW50bHkoKS5nZXQoKSkpOwogfQogCi19
Cit0ZW1wbGF0ZSB2b2lkIEpTU1ZHVmlld1NwZWM6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpT
Qzo6QWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU1NWR1ZpZXdTcGVjOjp2
aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJik7CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU2VydmljZVdv
cmtlckdsb2JhbFNjb3BlQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU1NlcnZpY2VXb3JrZXJHbG9iYWxTY29wZUN1c3RvbS5jcHAJKHJldmlzaW9u
IDI3MjcxMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU2VydmljZVdvcmtlckds
b2JhbFNjb3BlQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsMTIgKzM0LDE3IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAotdm9pZCBKU1NlcnZp
Y2VXb3JrZXJHbG9iYWxTY29wZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3Im
IHZpc2l0b3IpCisvL3ZvaWQgSlNTZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGU6OnZpc2l0QWRkaXRp
b25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlz
aXRvcj4KK3ZvaWQgSlNTZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGU6OnZpc2l0QWRkaXRpb25hbENo
aWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KCZ3
cmFwcGVkKCkuY2xpZW50cygpKTsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QoJndyYXBwZWQo
KS5yZWdpc3RyYXRpb24oKSk7CiB9CiAKK3RlbXBsYXRlIHZvaWQgSlNTZXJ2aWNlV29ya2VyR2xv
YmFsU2NvcGU6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsK
K3RlbXBsYXRlIHZvaWQgSlNTZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGU6OnZpc2l0QWRkaXRpb25h
bENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2Vu
ZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1N0YXRpY1JhbmdlQ3VzdG9t
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1N0YXRpY1Jh
bmdlQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcyNzEwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNTdGF0aWNSYW5nZUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDkgKzMw
LDE0IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBKU1N0YXRpY1JhbmdlOjp2aXNp
dEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy92b2lkIEpT
U3RhdGljUmFuZ2U6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZp
c2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1N0YXRpY1JhbmdlOjp2
aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHdyYXBwZWQo
KS52aXNpdE5vZGVzQ29uY3VycmVudGx5KHZpc2l0b3IpOwogfQogCit0ZW1wbGF0ZSB2b2lkIEpT
U3RhdGljUmFuZ2U6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6QWJzdHJhY3RTbG90Vmlz
aXRvciYpOwordGVtcGxhdGUgdm9pZCBKU1N0YXRpY1JhbmdlOjp2aXNpdEFkZGl0aW9uYWxDaGls
ZHJlbihKU0M6OlNsb3RWaXNpdG9yJik7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU3R5bGVTaGVldEN1c3RvbS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNTdHlsZVNoZWV0Q3VzdG9tLmNw
cAkocmV2aXNpb24gMjcyNzEwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNTdHls
ZVNoZWV0Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsMTEgKzMwLDE2IEBACiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBKU1N0eWxlU2hlZXQ6OnZpc2l0QWRkaXRpb25hbENo
aWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3ZvaWQgSlNTdHlsZVNoZWV0Ojp2
aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxh
dGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNTdHlsZVNoZWV0Ojp2aXNpdEFkZGl0aW9uYWxD
aGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChy
b290KCZ3cmFwcGVkKCkpKTsKIH0KIAordGVtcGxhdGUgdm9pZCBKU1N0eWxlU2hlZXQ6OnZpc2l0
QWRkaXRpb25hbENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQg
SlNTdHlsZVNoZWV0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYpOworCiBK
U0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNET01H
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmPFN0eWxlU2hlZXQ+JiYgc3R5bGVTaGVldCkK
IHsKICAgICBpZiAoc3R5bGVTaGVldC0+aXNDU1NTdHlsZVNoZWV0KCkpCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU1RleHRUcmFja0N1ZUN1c3RvbS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNUZXh0VHJhY2tDdWVDdXN0b20uY3BwCShy
ZXZpc2lvbiAyNzI3MTApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1RleHRUcmFj
a0N1ZUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDcgQEAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKLWJvb2wgSlNUZXh0VHJhY2tDdWVP
d25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3du
PiBoYW5kbGUsIHZvaWQqLCBTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNv
bikKK2Jvb2wgSlNUZXh0VHJhY2tDdWVPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMo
SlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBBYnN0cmFjdFNsb3RWaXNp
dG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQogewogICAgIEpTVGV4dFRyYWNrQ3Vl
KiBqc1RleHRUcmFja0N1ZSA9IGpzQ2FzdDxKU1RleHRUcmFja0N1ZSo+KGhhbmRsZS5zbG90KCkt
PmFzQ2VsbCgpKTsKICAgICBUZXh0VHJhY2tDdWUmIHRleHRUcmFja0N1ZSA9IGpzVGV4dFRyYWNr
Q3VlLT53cmFwcGVkKCk7CkBAIC04MiwxMiArODIsMTcgQEAgSlNWYWx1ZSB0b0pTKEpTR2xvYmFs
T2JqZWN0KiBsZXhpY2FsR2xvYgogICAgIHJldHVybiB3cmFwKGxleGljYWxHbG9iYWxPYmplY3Qs
IGdsb2JhbE9iamVjdCwgY3VlKTsKIH0KIAotdm9pZCBKU1RleHRUcmFja0N1ZTo6dmlzaXRBZGRp
dGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3ZvaWQgSlNUZXh0VHJhY2tD
dWU6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxh
dGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNUZXh0VHJhY2tDdWU6OnZpc2l0QWRkaXRpb25h
bENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgaWYgKFRleHRUcmFjayogdGV4dFRy
YWNrID0gd3JhcHBlZCgpLnRyYWNrKCkpCiAgICAgICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChy
b290KHRleHRUcmFjaykpOwogfQogCit0ZW1wbGF0ZSB2b2lkIEpTVGV4dFRyYWNrQ3VlOjp2aXNp
dEFkZGl0aW9uYWxDaGlsZHJlbihBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lk
IEpTVGV4dFRyYWNrQ3VlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYpOwor
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNUZXh0VHJhY2tDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTVGV4dFRyYWNrQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcyNzEw
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNUZXh0VHJhY2tDdXN0b20uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zNiwxMSArMzYsMTYgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVz
aW5nIG5hbWVzcGFjZSBKU0M7CiAKLXZvaWQgSlNUZXh0VHJhY2s6OnZpc2l0QWRkaXRpb25hbENo
aWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy92b2lkIEpTVGV4dFRyYWNrOjp2aXNpdEFk
ZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1l
IFZpc2l0b3I+Cit2b2lkIEpTVGV4dFRyYWNrOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNp
dG9yJiB2aXNpdG9yKQogewogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChyb290KCZ3cmFwcGVk
KCkpKTsKIH0KIAordGVtcGxhdGUgdm9pZCBKU1RleHRUcmFjazo6dmlzaXRBZGRpdGlvbmFsQ2hp
bGRyZW4oQWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU1RleHRUcmFjazo6
dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKKwogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQogCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVGV4
dFRyYWNrTGlzdEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNUZXh0VHJhY2tMaXN0Q3VzdG9tLmNwcAkocmV2aXNpb24gMjcyNzEwKQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNUZXh0VHJhY2tMaXN0Q3VzdG9tLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzYsMTEgKzM2LDE2IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBu
YW1lc3BhY2UgSlNDOwogCi12b2lkIEpTVGV4dFRyYWNrTGlzdDo6dmlzaXRBZGRpdGlvbmFsQ2hp
bGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vdm9pZCBKU1RleHRUcmFja0xpc3Q6
OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1w
bGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1RleHRUcmFja0xpc3Q6OnZpc2l0QWRkaXRp
b25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVS
b290KHJvb3Qod3JhcHBlZCgpLmVsZW1lbnQoKSkpOwogfQogICAgIAordGVtcGxhdGUgdm9pZCBK
U1RleHRUcmFja0xpc3Q6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0
b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNUZXh0VHJhY2tMaXN0Ojp2aXNpdEFkZGl0aW9uYWxDaGls
ZHJlbihTbG90VmlzaXRvciYpOworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZgpJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNUcmVlV2Fsa2VyQ3VzdG9tLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1RyZWVXYWxrZXJDdXN0
b20uY3BwCShyZXZpc2lvbiAyNzI3MTApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U1RyZWVXYWxrZXJDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNSwxMCArMjUsMTUgQEAK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIEpTVHJlZVdhbGtlcjo6dmlzaXRBZGRpdGlv
bmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vdm9pZCBKU1RyZWVXYWxr
ZXI6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0
ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1RyZWVXYWxrZXI6OnZpc2l0QWRkaXRp
b25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgaWYgKE5vZGVGaWx0ZXIqIGZp
bHRlciA9IHdyYXBwZWQoKS5maWx0ZXIoKSkKICAgICAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290
KGZpbHRlcik7CiB9CiAKLX0KK3RlbXBsYXRlIHZvaWQgSlNUcmVlV2Fsa2VyOjp2aXNpdEFkZGl0
aW9uYWxDaGlsZHJlbihKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQg
SlNUcmVlV2Fsa2VyOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJik7
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTVW5kb0l0ZW1DdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTVW5kb0l0ZW1DdXN0b20uY3BwCShyZXZpc2lvbiAyNzI3MTApCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1VuZG9JdGVtQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjksMTMgKzI5LDE4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBKU1Vu
ZG9JdGVtOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9y
KQorLy92b2lkIEpTVW5kb0l0ZW06OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZp
c2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1VuZG9J
dGVtOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHdy
YXBwZWQoKS51bmRvSGFuZGxlcigpLnZpc2l0SlNGdW5jdGlvbih2aXNpdG9yKTsKICAgICB3cmFw
cGVkKCkucmVkb0hhbmRsZXIoKS52aXNpdEpTRnVuY3Rpb24odmlzaXRvcik7CiB9CiAKLWJvb2wg
SlNVbmRvSXRlbU93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxK
U0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNv
bnN0IGNoYXIqKiByZWFzb24pCit0ZW1wbGF0ZSB2b2lkIEpTVW5kb0l0ZW06OnZpc2l0QWRkaXRp
b25hbENoaWxkcmVuKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBK
U1VuZG9JdGVtOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJik7CisK
K2Jvb2wgSlNVbmRvSXRlbU93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6Okhh
bmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRv
ciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikKIHsKICAgICBpZiAoVU5MSUtFTFkocmVh
c29uKSkKICAgICAgICAgKnJlYXNvbiA9ICJEb2N1bWVudCBpcyBhbiBvcGFxdWUgcm9vdC4iOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNWYWx1ZUluV3JhcHBlZE9iamVjdC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVmFsdWVJbldyYXBw
ZWRPYmplY3QuaAkocmV2aXNpb24gMjcyNzEwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNWYWx1ZUluV3JhcHBlZE9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw4
IEBAIHB1YmxpYzoKICAgICBvcGVyYXRvciBKU0M6OkpTVmFsdWUoKSBjb25zdDsKICAgICBleHBs
aWNpdCBvcGVyYXRvciBib29sKCkgY29uc3Q7CiAgICAgSlNWYWx1ZUluV3JhcHBlZE9iamVjdCYg
b3BlcmF0b3I9KGNvbnN0IEpTVmFsdWVJbldyYXBwZWRPYmplY3QmIG90aGVyKTsKLSAgICB2b2lk
IHZpc2l0KEpTQzo6U2xvdFZpc2l0b3ImKSBjb25zdDsKKy8vICAgIHZvaWQgdmlzaXQoSlNDOjpT
bG90VmlzaXRvciYpIGNvbnN0OworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQg
dmlzaXQoVmlzaXRvciYpIGNvbnN0OwogICAgIHZvaWQgY2xlYXIoKTsKIAogcHJpdmF0ZToKQEAg
LTk4LDcgKzk5LDggQEAgaW5saW5lIEpTVmFsdWVJbldyYXBwZWRPYmplY3QmIEpTVmFsdWVJbgog
ICAgIHJldHVybiAqdGhpczsKIH0KIAotaW5saW5lIHZvaWQgSlNWYWx1ZUluV3JhcHBlZE9iamVj
dDo6dmlzaXQoSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikgY29uc3QKK3RlbXBsYXRlPHR5cGVu
YW1lIFZpc2l0b3I+CitpbmxpbmUgdm9pZCBKU1ZhbHVlSW5XcmFwcGVkT2JqZWN0Ojp2aXNpdChW
aXNpdG9yJiB2aXNpdG9yKSBjb25zdAogewogICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKG1fdmFs
dWUsIFtdIChKU0M6OkpTVmFsdWUpIHsKICAgICAgICAgLy8gTm90aGluZyB0byB2aXNpdC4KQEAg
LTEwNyw2ICsxMDksOSBAQCBpbmxpbmUgdm9pZCBKU1ZhbHVlSW5XcmFwcGVkT2JqZWN0Ojp2aXNp
CiAgICAgfSk7CiB9CiAKK3RlbXBsYXRlIHZvaWQgSlNWYWx1ZUluV3JhcHBlZE9iamVjdDo6dmlz
aXQoSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJikgY29uc3Q7Cit0ZW1wbGF0ZSB2b2lkIEpTVmFs
dWVJbldyYXBwZWRPYmplY3Q6OnZpc2l0KEpTQzo6U2xvdFZpc2l0b3ImKSBjb25zdDsKKwogaW5s
aW5lIHZvaWQgSlNWYWx1ZUluV3JhcHBlZE9iamVjdDo6Y2xlYXIoKQogewogICAgIFdURjo6c3dp
dGNoT24obV92YWx1ZSwgW10gKFdlYWsmIHZhbHVlKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU1ZpZGVvVHJhY2tDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTVmlkZW9UcmFja0N1c3RvbS5jcHAJKHJldmlzaW9uIDI3Mjcx
MCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVmlkZW9UcmFja0N1c3RvbS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM1LDExICszNSwxNiBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewog
dXNpbmcgbmFtZXNwYWNlIEpTQzsKIAotdm9pZCBKU1ZpZGVvVHJhY2s6OnZpc2l0QWRkaXRpb25h
bENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy92b2lkIEpTVmlkZW9UcmFjazo6dmlz
aXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBl
bmFtZSBWaXNpdG9yPgordm9pZCBKU1ZpZGVvVHJhY2s6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVu
KFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHJvb3QoJndy
YXBwZWQoKSkpOwogfQogCit0ZW1wbGF0ZSB2b2lkIEpTVmlkZW9UcmFjazo6dmlzaXRBZGRpdGlv
bmFsQ2hpbGRyZW4oSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpT
VmlkZW9UcmFjazo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYpOwor
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNWaWRlb1RyYWNrTGlzdEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNWaWRlb1RyYWNrTGlzdEN1c3RvbS5jcHAJKHJldmlz
aW9uIDI3MjcxMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVmlkZW9UcmFja0xp
c3RDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSwxMSArMzUsMTYgQEAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKLXZvaWQgSlNWaWRlb1RyYWNrTGlz
dDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3ZvaWQg
SlNWaWRlb1RyYWNrTGlzdDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZp
c2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1ZpZGVvVHJhY2tMaXN0
Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHZpc2l0
b3IuYWRkT3BhcXVlUm9vdChyb290KHdyYXBwZWQoKS5lbGVtZW50KCkpKTsKIH0KIAordGVtcGxh
dGUgdm9pZCBKU1ZpZGVvVHJhY2tMaXN0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihBYnN0cmFj
dFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTVmlkZW9UcmFja0xpc3Q6OnZpc2l0QWRk
aXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
IAogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYkdMMlJlbmRl
cmluZ0NvbnRleHRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTV2ViR0wyUmVuZGVyaW5nQ29udGV4dEN1c3RvbS5jcHAJKHJldmlzaW9uIDI3Mjcx
MCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViR0wyUmVuZGVyaW5nQ29udGV4
dEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDEyICszMywxNyBAQAogbmFtZXNwYWNl
IFdlYkNvcmUgewogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAotdm9pZCBKU1dlYkdMMlJlbmRlcmlu
Z0NvbnRleHQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQor
Ly92b2lkIEpTV2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4o
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBK
U1dlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3Im
IHZpc2l0b3IpCiB7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KCZ3cmFwcGVkKCkpOwogICAg
IHdyYXBwZWQoKS5hZGRNZW1iZXJzVG9PcGFxdWVSb290cyh2aXNpdG9yKTsKIH0KIAordGVtcGxh
dGUgdm9pZCBKU1dlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVu
KEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU1dlYkdMMlJlbmRl
cmluZ0NvbnRleHQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImKTsK
KwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQkdMKQpJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRDdXN0
b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViR0xS
ZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcAkocmV2aXNpb24gMjcyNzEwKQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRDdXN0b20uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMywxMiArMzMsMTcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5n
IG5hbWVzcGFjZSBKU0M7CiAKLXZvaWQgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZpc2l0QWRk
aXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy92b2lkIEpTV2ViR0xSZW5k
ZXJpbmdDb250ZXh0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRv
cikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTV2ViR0xSZW5kZXJpbmdDb250
ZXh0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHZp
c2l0b3IuYWRkT3BhcXVlUm9vdCgmd3JhcHBlZCgpKTsKICAgICB3cmFwcGVkKCkuYWRkTWVtYmVy
c1RvT3BhcXVlUm9vdHModmlzaXRvcik7CiB9CiAKK3RlbXBsYXRlIHZvaWQgSlNXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0b3Im
KTsKK3RlbXBsYXRlIHZvaWQgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZpc2l0QWRkaXRpb25h
bENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2Vu
ZGlmIC8vIEVOQUJMRShXRUJHTCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
V29ya2VyR2xvYmFsU2NvcGVCYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU1dvcmtlckdsb2JhbFNjb3BlQmFzZS5jcHAJKHJldmlzaW9uIDI3MjcxMCkK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyR2xvYmFsU2NvcGVCYXNlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtOTIsNyArOTIsOCBAQCB2b2lkIEpTV29ya2VyR2xvYmFsU2Nv
cGVCYXNlOjpmaW5pc2hDcmVhCiAgICAgQVNTRVJUKGluaGVyaXRzKHZtLCBpbmZvKCkpKTsKIH0K
IAotdm9pZCBKU1dvcmtlckdsb2JhbFNjb3BlQmFzZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNl
bGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3Zv
aWQgSlNXb3JrZXJHbG9iYWxTY29wZUJhc2U6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2Vs
bCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU1dvcmtlckdsb2JhbFNjb3BlQmFzZSogdGhp
c09iamVjdCA9IGpzQ2FzdDxKU1dvcmtlckdsb2JhbFNjb3BlQmFzZSo+KGNlbGwpOwogICAgIEFT
U0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTEwMCw2ICsx
MDEsOCBAQCB2b2lkIEpTV29ya2VyR2xvYmFsU2NvcGVCYXNlOjp2aXNpdENoaWxkCiAgICAgdmlz
aXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9wcm94eSk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElM
RFJFTihKU1dvcmtlckdsb2JhbFNjb3BlQmFzZSk7CisKIHZvaWQgSlNXb3JrZXJHbG9iYWxTY29w
ZUJhc2U6OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQogewogICAgIHN0YXRpY19jYXN0PEpTV29ya2Vy
R2xvYmFsU2NvcGVCYXNlKj4oY2VsbCktPkpTV29ya2VyR2xvYmFsU2NvcGVCYXNlOjp+SlNXb3Jr
ZXJHbG9iYWxTY29wZUJhc2UoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
V29ya2VyR2xvYmFsU2NvcGVCYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNXb3JrZXJHbG9iYWxTY29wZUJhc2UuaAkocmV2aXNpb24gMjcyNzEwKQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrZXJHbG9iYWxTY29wZUJhc2UuaAkod29y
a2luZyBjb3B5KQpAQCAtNzksNyArNzksNyBAQCBwcm90ZWN0ZWQ6CiAgICAgSlNXb3JrZXJHbG9i
YWxTY29wZUJhc2UoSlNDOjpWTSYsIEpTQzo6U3RydWN0dXJlKiwgUmVmUHRyPFdvcmtlckdsb2Jh
bFNjb3BlPiYmKTsKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mLCBKU0M6OkpTUHJv
eHkqKTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDOjpKU0NlbGwqLCBKU0M6
OlNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogcHJpdmF0ZToK
ICAgICBSZWZQdHI8V29ya2VyR2xvYmFsU2NvcGU+IG1fd3JhcHBlZDsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyR2xvYmFsU2NvcGVDdXN0b20uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyR2xvYmFsU2NvcGVDdXN0
b20uY3BwCShyZXZpc2lvbiAyNzI3MTApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U1dvcmtlckdsb2JhbFNjb3BlQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNyArMzMs
OSBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAotdm9pZCBK
U1dvcmtlckdsb2JhbFNjb3BlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYg
dmlzaXRvcikKKy8vdm9pZCBKU1dvcmtlckdsb2JhbFNjb3BlOjp2aXNpdEFkZGl0aW9uYWxDaGls
ZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2
b2lkIEpTV29ya2VyR2xvYmFsU2NvcGU6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3Im
IHZpc2l0b3IpCiB7CiAgICAgaWYgKGF1dG8qIGxvY2F0aW9uID0gd3JhcHBlZCgpLm9wdGlvbmFs
TG9jYXRpb24oKSkKICAgICAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KGxvY2F0aW9uKTsKQEAg
LTQ4LDYgKzUwLDkgQEAgdm9pZCBKU1dvcmtlckdsb2JhbFNjb3BlOjp2aXNpdEFkZGl0aW9uYQog
ICAgIHdyYXBwZWQoKS52aXNpdEpTRXZlbnRMaXN0ZW5lcnModmlzaXRvcik7CiB9CiAKK3RlbXBs
YXRlIHZvaWQgSlNXb3JrZXJHbG9iYWxTY29wZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oQWJz
dHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU1dvcmtlckdsb2JhbFNjb3BlOjp2
aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYpOworCiBKU1ZhbHVlIEpTV29ya2Vy
R2xvYmFsU2NvcGU6OnF1ZXVlTWljcm90YXNrKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFs
T2JqZWN0LCBDYWxsRnJhbWUmIGNhbGxGcmFtZSkKIHsKICAgICBWTSYgdm0gPSBsZXhpY2FsR2xv
YmFsT2JqZWN0LnZtKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtl
ck5hdmlnYXRvckN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNXb3JrZXJOYXZpZ2F0b3JDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI3MTApCisrKyBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlck5hdmlnYXRvckN1c3RvbS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI4LDkgKzI4LDE0IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAot
dm9pZCBKU1dvcmtlck5hdmlnYXRvcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90
VmlzaXRvciYgdmlzaXRvcikKKy8vdm9pZCBKU1dvcmtlck5hdmlnYXRvcjo6dmlzaXRBZGRpdGlv
bmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1l
IFZpc2l0b3I+Cit2b2lkIEpTV29ya2VyTmF2aWdhdG9yOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJl
bihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChzdGF0aWNf
Y2FzdDxOYXZpZ2F0b3JCYXNlKj4oJndyYXBwZWQoKSkpOwogfQogCi19Cit0ZW1wbGF0ZSB2b2lk
IEpTV29ya2VyTmF2aWdhdG9yOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OkFic3RyYWN0
U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNXb3JrZXJOYXZpZ2F0b3I6OnZpc2l0QWRk
aXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImKTsKKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrbGV0R2xvYmFsU2Nv
cGVCYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dv
cmtsZXRHbG9iYWxTY29wZUJhc2UuY3BwCShyZXZpc2lvbiAyNzI3MTApCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU1dvcmtsZXRHbG9iYWxTY29wZUJhc2UuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC04Miw3ICs4Miw4IEBAIHZvaWQgSlNXb3JrbGV0R2xvYmFsU2NvcGVCYXNlOjpmaW5p
c2hDcmUKICAgICBBU1NFUlQoaW5oZXJpdHModm0sIGluZm8oKSkpOwogfQogCi12b2lkIEpTV29y
a2xldEdsb2JhbFNjb3BlQmFzZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNp
dG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNXb3JrbGV0
R2xvYmFsU2NvcGVCYXNlOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3Im
IHZpc2l0b3IpCiB7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1dvcmtsZXRHbG9i
YWxTY29wZUJhc2UqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNP
YmplY3QsIGluZm8oKSk7CkBAIC05MCw2ICs5MSw4IEBAIHZvaWQgSlNXb3JrbGV0R2xvYmFsU2Nv
cGVCYXNlOjp2aXNpdENoaWwKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX3Byb3h5
KTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTV29ya2xldEdsb2JhbFNjb3BlQmFzZSk7
CisKIHZvaWQgSlNXb3JrbGV0R2xvYmFsU2NvcGVCYXNlOjpkZXN0cm95KEpTQ2VsbCogY2VsbCkK
IHsKICAgICBzdGF0aWNfY2FzdDxKU1dvcmtsZXRHbG9iYWxTY29wZUJhc2UqPihjZWxsKS0+SlNX
b3JrbGV0R2xvYmFsU2NvcGVCYXNlOjp+SlNXb3JrbGV0R2xvYmFsU2NvcGVCYXNlKCk7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtsZXRHbG9iYWxTY29wZUJhc2UuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtsZXRHbG9iYWxT
Y29wZUJhc2UuaAkocmV2aXNpb24gMjcyNzEwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNXb3JrbGV0R2xvYmFsU2NvcGVCYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTY3LDcgKzY3
LDcgQEAgcHJvdGVjdGVkOgogICAgIEpTV29ya2xldEdsb2JhbFNjb3BlQmFzZShKU0M6OlZNJiwg
SlNDOjpTdHJ1Y3R1cmUqLCBSZWZQdHI8V29ya2xldEdsb2JhbFNjb3BlPiYmKTsKICAgICB2b2lk
IGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mLCBKU0M6OkpTUHJveHkqKTsKIAotICAgIHN0YXRpYyB2
b2lkIHZpc2l0Q2hpbGRyZW4oSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJik7CisgICAg
REVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogcHJpdmF0ZToKICAgICBSZWZQdHI8V29ya2xldEds
b2JhbFNjb3BlPiBtX3dyYXBwZWQ7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U1hNTEh0dHBSZXF1ZXN0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU1hNTEh0dHBSZXF1ZXN0Q3VzdG9tLmNwcAkocmV2aXNpb24gMjcyNzEwKQor
KysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNYTUxIdHRwUmVxdWVzdEN1c3RvbS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQxLDcgKzQxLDkgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVz
aW5nIG5hbWVzcGFjZSBKU0M7CiAKLXZvaWQgSlNYTUxIdHRwUmVxdWVzdDo6dmlzaXRBZGRpdGlv
bmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3ZvaWQgSlNYTUxIdHRwUmVxdWVz
dDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0
ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1hNTEh0dHBSZXF1ZXN0Ojp2aXNpdEFkZGl0aW9u
YWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGlmIChhdXRvKiB1cGxvYWQgPSB3
cmFwcGVkKCkub3B0aW9uYWxVcGxvYWQoKSkKICAgICAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290
KHVwbG9hZCk7CkBAIC01MCw2ICs1Miw5IEBAIHZvaWQgSlNYTUxIdHRwUmVxdWVzdDo6dmlzaXRB
ZGRpdGlvbmFsQ2gKICAgICAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHJlc3BvbnNlRG9jdW1l
bnQpOwogfQogCit0ZW1wbGF0ZSB2b2lkIEpTWE1MSHR0cFJlcXVlc3Q6OnZpc2l0QWRkaXRpb25h
bENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNYTUxIdHRw
UmVxdWVzdDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKKwogSlNWYWx1
ZSBKU1hNTEh0dHBSZXF1ZXN0OjpyZXNwb25zZShKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2Jh
bE9iamVjdCkgY29uc3QKIHsKICAgICBhdXRvIGNhY2hlUmVzdWx0ID0gWyZdIChKU1ZhbHVlIHZh
bHVlKSAtPiBKU1ZhbHVlIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTWFBh
dGhSZXN1bHRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTWFBhdGhSZXN1bHRDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI3MTApCisrKyBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU1hQYXRoUmVzdWx0Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzEsNyArMzEsOSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgSlNYUGF0
aFJlc3VsdDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRv
cikKKy8vdm9pZCBKU1hQYXRoUmVzdWx0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNs
b3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNY
UGF0aFJlc3VsdDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsK
ICAgICBhdXRvJiB2YWx1ZSA9IHdyYXBwZWQoKS52YWx1ZSgpOwogICAgIGlmICh2YWx1ZS5pc05v
ZGVTZXQoKSkgewpAQCAtNDEsNCArNDMsNyBAQCB2b2lkIEpTWFBhdGhSZXN1bHQ6OnZpc2l0QWRk
aXRpb25hbENoaWxkCiAgICAgfQogfQogCit0ZW1wbGF0ZSB2b2lkIEpTWFBhdGhSZXN1bHQ6OnZp
c2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxh
dGUgdm9pZCBKU1hQYXRoUmVzdWx0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RW
aXNpdG9yJik7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL1dlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVy
LmNwcAkocmV2aXNpb24gMjcyNzEwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV2Vi
Q29yZVR5cGVkQXJyYXlDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTYsNyArNTYs
NyBAQCBib29sIFdlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlcjo6aXNBdG9tCiAgICAgcmV0dXJu
IG1fYWxsb3dBdG9taWNzV2FpdDsKIH0KIAotYm9vbCBXZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xs
ZXI6OkpTQXJyYXlCdWZmZXJPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpI
YW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBKU0M6OlNsb3RWaXNpdG9yJiB2aXNp
dG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQorYm9vbCBXZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xs
ZXI6OkpTQXJyYXlCdWZmZXJPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpI
YW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0
b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCiB7CiAgICAgaWYgKFVOTElLRUxZKHJl
YXNvbikpCiAgICAgICAgICpyZWFzb24gPSAiQXJyYXlCdWZmZXIgaXMgb3BhcXVlIHJvb3QiOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV2ViQ29yZVR5cGVkQXJyYXlDb250cm9s
bGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV2ViQ29yZVR5
cGVkQXJyYXlDb250cm9sbGVyLmgJKHJldmlzaW9uIDI3MjcxMCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL1dlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlci5oCSh3b3JraW5nIGNvcHkp
CkBAIC00OCw3ICs0OCw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgY2xhc3MgSlNBcnJheUJ1
ZmZlck93bmVyIDogcHVibGljIEpTQzo6V2Vha0hhbmRsZU93bmVyIHsKICAgICBwdWJsaWM6Ci0g
ICAgICAgIGJvb2wgaXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpV
bmtub3duPiwgdm9pZCogY29udGV4dCwgSlNDOjpTbG90VmlzaXRvciYsIGNvbnN0IGNoYXIqKikg
b3ZlcnJpZGU7CisgICAgICAgIGJvb2wgaXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpI
YW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCwgSlNDOjpBYnN0cmFjdFNsb3RWaXNp
dG9yJiwgY29uc3QgY2hhcioqKSBvdmVycmlkZTsKICAgICAgICAgdm9pZCBmaW5hbGl6ZShKU0M6
OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0KSBvdmVycmlkZTsKICAgICB9Owog
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5w
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5l
cmF0b3JKUy5wbQkocmV2aXNpb24gMjcyNzEwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0JKHdvcmtpbmcgY29weSkKQEAgLTMwNzgsOCArMzA3
OCwxMCBAQCBzdWIgR2VuZXJhdGVIZWFkZXIKIAogICAgICMgdmlzaXQgZnVuY3Rpb24KICAgICBp
ZiAoJG5lZWRzVmlzaXRDaGlsZHJlbikgewotICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAi
ICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYp
O1xuIik7Ci0gICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgdm9pZCB2aXNpdEFkZGl0
aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJik7XG4iKSBpZiAkaW50ZXJmYWNlLT5leHRl
bmRlZEF0dHJpYnV0ZXMtPntKU0N1c3RvbU1hcmtGdW5jdGlvbn07CisgICAgICAgIHB1c2goQGhl
YWRlckNvbnRlbnQsICIgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjtcbiIpOworIyAgICAgICAg
cHVzaChAaGVhZGVyQ29udGVudCwgIiAgICB2b2lkIHZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpT
Qzo6U2xvdFZpc2l0b3ImKTtcbiIpIGlmICRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+
e0pTQ3VzdG9tTWFya0Z1bmN0aW9ufTsgIyBtbGFtCisjICAgICAgICBwdXNoKEBoZWFkZXJDb250
ZW50LCAiICAgIHZvaWQgdmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpBYnN0cmFjdFNsb3RW
aXNpdG9yJik7XG4iKSBpZiAkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntKU0N1c3Rv
bU1hcmtGdW5jdGlvbn07CisgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgdGVtcGxh
dGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCB2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9y
Jik7XG4iKSBpZiAkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntKU0N1c3RvbU1hcmtG
dW5jdGlvbn07CiAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJcbiIpOwogCiAgICAgICAg
IGlmICgkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntKU0N1c3RvbU1hcmtGdW5jdGlv
bn0pIHsKQEAgLTMwOTQsNyArMzA5Niw5IEBAIHN1YiBHZW5lcmF0ZUhlYWRlcgogICAgICAgICAg
ICAgIyB0aGF0IHRoZSBHQyBjYWxscyB0byBhc2sgYW4gb2JqZWN0IGlzIGl0IHdvdWxkIGxpa2Ug
dG8gbWFyayBhbnl0aGluZyBlbHNlIGFmdGVyIHRoZQogICAgICAgICAgICAgIyBwcm9ncmFtIHJl
c3VtZWQgc2luY2UgdGhlIGxhc3QgY2FsbCB0byB2aXNpdENoaWxkcmVuIG9yIHZpc2l0T3V0cHV0
Q29uc3RyYWludHMuIFNpbmNlCiAgICAgICAgICAgICAjIHRoaXMganVzdCBjYWxscyB2aXNpdEFk
ZGl0aW9uYWxDaGlsZHJlbiwgeW91IHVzdWFsbHkgZG9uJ3QgaGF2ZSB0byB3b3JyeSBhYm91dCB0
aGlzLgotICAgICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICBzdGF0aWMgdm9pZCB2
aXNpdE91dHB1dENvbnN0cmFpbnRzKEpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKTtcbiIpOwor
ICAgICAgICAgICAgIyBtbGFtIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgc3RhdGljIHZvaWQg
dmlzaXRPdXRwdXRDb25zdHJhaW50cyhKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJik7XG4iKTsK
KyAgICAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgc3RhdGljIHZvaWQgdmlzaXRP
dXRwdXRDb25zdHJhaW50cyhKU0NlbGwqLCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKTtcbiIp
OworICAgICAgICAgICAgIyBtbGFtIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgREVDTEFSRV9W
SVNJVF9PVVRQVVRfQ09OU1RSQUlOVFM7XG4iKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMzIx
NSw3ICszMjE5LDcgQEAgc3ViIEdlbmVyYXRlSGVhZGVyCiAgICAgICAgIH0KICAgICAgICAgJGhl
YWRlckluY2x1ZGVzeyI8d3RmL05ldmVyRGVzdHJveWVkLmg+In0gPSAxOwogICAgICAgICBwdXNo
KEBoZWFkZXJDb250ZW50LCAicHVibGljOlxuIik7Ci0gICAgICAgIHB1c2goQGhlYWRlckNvbnRl
bnQsICIgICAgYm9vbCBpc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6
OlVua25vd24+LCB2b2lkKiBjb250ZXh0LCBKU0M6OlNsb3RWaXNpdG9yJiwgY29uc3QgY2hhcioq
KSAke292ZXJyaWRlRGVjbH07XG4iKTsKKyAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAg
ICBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93
bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYsIGNvbnN0IGNoYXIq
KikgJHtvdmVycmlkZURlY2x9O1xuIik7CiAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIg
ICAgdm9pZCBmaW5hbGl6ZShKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0
KSAke292ZXJyaWRlRGVjbH07XG4iKTsKICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIn07
XG4iKTsKICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIlxuIik7CkBAIC00OTM5LDYgKzQ5
NDMsNyBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgIEFkZFRvSW1wbEluY2x1ZGVz
KCJET01Jc29TdWJzcGFjZXMuaCIpOwogICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJXZWJDb3JlSlND
bGllbnREYXRhLmgiKTsKICAgICBBZGRUb0ltcGxJbmNsdWRlcygiPEphdmFTY3JpcHRDb3JlL0pT
RGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLmg+Iik7CisgICAgQWRkVG9JbXBsSW5jbHVk
ZXMoIjxKYXZhU2NyaXB0Q29yZS9TbG90VmlzaXRvck1hY3Jvcy5oPiIpOwogICAgIEFkZFRvSW1w
bEluY2x1ZGVzKCI8SmF2YVNjcmlwdENvcmUvU3Vic3BhY2VJbmxpbmVzLmg+Iik7CiAgICAgcHVz
aChAaW1wbENvbnRlbnQsICJKU0M6Oklzb1N1YnNwYWNlKiAke2NsYXNzTmFtZX06OnN1YnNwYWNl
Rm9ySW1wbChKU0M6OlZNJiB2bSlcbiIpOwogICAgIHB1c2goQGltcGxDb250ZW50LCAie1xuIik7
CkBAIC00OTY2LDcgKzQ5NzEsOCBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgIHB1
c2goQGltcGxDb250ZW50LCAifVxuXG4iKTsKIAogICAgIGlmICgkbmVlZHNWaXNpdENoaWxkcmVu
KSB7Ci0gICAgICAgIHB1c2goQGltcGxDb250ZW50LCAidm9pZCAke2NsYXNzTmFtZX06OnZpc2l0
Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcilcbiIpOworICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgInRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+XG4iKTsKKyAg
ICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ2b2lkICR7Y2xhc3NOYW1lfTo6dmlzaXRDaGlsZHJl
bkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKVxuIik7CiAgICAgICAgIHB1c2go
QGltcGxDb250ZW50LCAie1xuIik7CiAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGF1
dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8JHtjbGFzc05hbWV9Kj4oY2VsbCk7XG4iKTsKICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlz
T2JqZWN0LCBpbmZvKCkpO1xuIik7CkBAIC00OTkxLDggKzQ5OTcsMTAgQEAgc3ViIEdlbmVyYXRl
SW1wbGVtZW50YXRpb24KICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBwdXNoKEBp
bXBsQ29udGVudCwgIn1cblxuIik7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiREVGSU5F
X1ZJU0lUX0NISUxEUkVOKCR7Y2xhc3NOYW1lfSk7XG5cbiIpOworCiAgICAgICAgIGlmICgkaW50
ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntKU0N1c3RvbU1hcmtGdW5jdGlvbn0pIHsKLSAg
ICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAidm9pZCAke2NsYXNzTmFtZX06OnZpc2l0T3V0
cHV0Q29uc3RyYWludHMoSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcilcbiIpOwor
ICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ2b2lkICR7Y2xhc3NOYW1lfTo6dmlzaXRP
dXRwdXRDb25zdHJhaW50cyhKU0NlbGwqIGNlbGwsIEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0
b3IpXG4iKTsKICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAie1xuIik7CiAgICAgICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PCR7
Y2xhc3NOYW1lfSo+KGNlbGwpO1xuIik7CiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwg
IiAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7XG4iKTsK
QEAgLTUwMzMsNyArNTA0MSw3IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgfQog
CiAgICAgaWYgKFNob3VsZEdlbmVyYXRlV3JhcHBlck93bmVyQ29kZSgkaGFzUGFyZW50LCAkaW50
ZXJmYWNlKSAmJiAhR2V0Q3VzdG9tSXNSZWFjaGFibGUoJGludGVyZmFjZSkpIHsKLSAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICJib29sIEpTJHtpbnRlcmZhY2VOYW1lfU93bmVyOjppc1JlYWNo
YWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9p
ZCosIFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKVxuIik7CisgICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAiYm9vbCBKUyR7aW50ZXJmYWNlTmFtZX1Pd25lcjo6aXNS
ZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUs
IHZvaWQqLCBBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29u
KVxuIik7CiAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAie1xuIik7CiAgICAgICAgICMgQWxs
IEFjdGl2ZURPTU9iamVjdHMgaW1wbGVtZW50IGhhc1BlbmRpbmdBY3Rpdml0eSgpLCBidXQgbm90
IGFsbCBvZiB0aGVtCiAgICAgICAgICMgaW5jcmVtZW50IHRoZWlyIEMrKyByZWZlcmVuY2UgY291
bnRzIHdoZW4gaGFzUGVuZGluZ0FjdGl2aXR5KCkgYmVjb21lcwpAQCAtNjQzMiw3ICs2NDQwLDgg
QEAgc3ViIEdlbmVyYXRlQ2FsbGJhY2tIZWFkZXJDb250ZW50CiAgICAgICAgIHB1c2goQCRjb250
ZW50UmVmLCAiICAgIGJvb2wgaGFzQ2FsbGJhY2soKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2Rh
dGEgJiYgbV9kYXRhLT5jYWxsYmFjaygpOyB9XG5cbiIpOwogICAgIH0KIAotICAgIHB1c2goQCRj
b250ZW50UmVmLCAiICAgIHZvaWQgdmlzaXRKU0Z1bmN0aW9uKEpTQzo6U2xvdFZpc2l0b3ImKSBv
dmVycmlkZTtcblxuIikgaWYgJGludGVyZmFjZU9yQ2FsbGJhY2stPmV4dGVuZGVkQXR0cmlidXRl
cy0+e0lzV2Vha0NhbGxiYWNrfTsKKyMgICAgcHVzaChAJGNvbnRlbnRSZWYsICIgICAgdm9pZCB2
aXNpdEpTRnVuY3Rpb24oSlNDOjpTbG90VmlzaXRvciYpIG92ZXJyaWRlO1xuXG4iKSBpZiAkaW50
ZXJmYWNlT3JDYWxsYmFjay0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57SXNXZWFrQ2FsbGJhY2t9Owor
ICAgIHB1c2goQCRjb250ZW50UmVmLCAiICAgIHZvaWQgdmlzaXRKU0Z1bmN0aW9uKEpTQzo6QWJz
dHJhY3RTbG90VmlzaXRvciYpIG92ZXJyaWRlO1xuXG4iKSBpZiAkaW50ZXJmYWNlT3JDYWxsYmFj
ay0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57SXNXZWFrQ2FsbGJhY2t9OwogCiAgICAgcHVzaChAJGNv
bnRlbnRSZWYsICIgICAgJHtjYWxsYmFja0RhdGFUeXBlfSogbV9kYXRhO1xuIik7CiAgICAgcHVz
aChAJGNvbnRlbnRSZWYsICJ9O1xuXG4iKTsKQEAgLTY2MjMsNyArNjYzMiw4IEBAIHN1YiBHZW5l
cmF0ZUNhbGxiYWNrSW1wbGVtZW50YXRpb25Db250ZW4KICAgICB9CiAKICAgICBpZiAoJGludGVy
ZmFjZU9yQ2FsbGJhY2stPmV4dGVuZGVkQXR0cmlidXRlcy0+e0lzV2Vha0NhbGxiYWNrfSkgewot
ICAgICAgICBwdXNoKEAkY29udGVudFJlZiwgInZvaWQgJHtjbGFzc05hbWV9Ojp2aXNpdEpTRnVu
Y3Rpb24oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcilcbiIpOworIyAgICAgICAgcHVzaChAJGNv
bnRlbnRSZWYsICJ2b2lkICR7Y2xhc3NOYW1lfTo6dmlzaXRKU0Z1bmN0aW9uKEpTQzo6U2xvdFZp
c2l0b3ImIHZpc2l0b3IpXG4iKTsKKyAgICAgICAgcHVzaChAJGNvbnRlbnRSZWYsICJ2b2lkICR7
Y2xhc3NOYW1lfTo6dmlzaXRKU0Z1bmN0aW9uKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYgdmlz
aXRvcilcbiIpOwogICAgICAgICBwdXNoKEAkY29udGVudFJlZiwgIntcbiIpOwogICAgICAgICBw
dXNoKEAkY29udGVudFJlZiwgIiAgICBtX2RhdGEtPnZpc2l0SlNGdW5jdGlvbih2aXNpdG9yKTtc
biIpOwogICAgICAgICBwdXNoKEAkY29udGVudFJlZiwgIn1cblxuIik7CkBAIC02NzM0LDYgKzY3
NDQsNyBAQCBzdWIgR2VuZXJhdGVJdGVyYWJsZURlZmluaXRpb24KICAgICBteSAkdmlzaWJsZUlu
dGVyZmFjZU5hbWUgPSAkY29kZUdlbmVyYXRvci0+R2V0VmlzaWJsZUludGVyZmFjZU5hbWUoJGlu
dGVyZmFjZSk7CiAKICAgICBBZGRUb0ltcGxJbmNsdWRlcygiSlNET01JdGVyYXRvci5oIik7Cisg
ICAgQWRkVG9JbXBsSW5jbHVkZXMoIjxKYXZhU2NyaXB0Q29yZS9TbG90VmlzaXRvck1hY3Jvcy5o
PiIpOwogCiAgICAgcmV0dXJuIHVubGVzcyBJc0tleVZhbHVlSXRlcmFibGVJbnRlcmZhY2UoJGlu
dGVyZmFjZSk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9BY3RpdmVET01DYWxsYmFjay5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9BY3RpdmVET01DYWxsYmFjay5oCShy
ZXZpc2lvbiAyNzI3MTApCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vQWN0aXZlRE9NQ2FsbGJhY2su
aAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIkNvbnRleHREZXN0
cnVjdGlvbk9ic2VydmVyLmgiCiAKIG5hbWVzcGFjZSBKU0MgeworY2xhc3MgQWJzdHJhY3RTbG90
VmlzaXRvcjsKIGNsYXNzIFNsb3RWaXNpdG9yOwogfQogCkBAIC01NSw3ICs1Niw4IEBAIHB1Ymxp
YzoKICAgICBXRUJDT1JFX0VYUE9SVCBib29sIGFjdGl2ZURPTU9iamVjdHNBcmVTdXNwZW5kZWQo
KSBjb25zdDsKICAgICBXRUJDT1JFX0VYUE9SVCBib29sIGFjdGl2ZURPTU9iamVjdEFyZVN0b3Bw
ZWQoKSBjb25zdDsKICAgICAKLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXRKU0Z1bmN0aW9uKEpTQzo6
U2xvdFZpc2l0b3ImKSB7IH0KKy8vICAgIHZpcnR1YWwgdm9pZCB2aXNpdEpTRnVuY3Rpb24oSlND
OjpTbG90VmlzaXRvciYpIHsgfQorICAgIHZpcnR1YWwgdm9pZCB2aXNpdEpTRnVuY3Rpb24oSlND
OjpBYnN0cmFjdFNsb3RWaXNpdG9yJikgeyB9CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRMaXN0ZW5lci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2RvbS9FdmVudExpc3RlbmVyLmgJKHJldmlzaW9uIDI3MjcxMCkKKysr
IFNvdXJjZS9XZWJDb3JlL2RvbS9FdmVudExpc3RlbmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI0
LDggKzI0LDkgQEAKICNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgogCiBuYW1lc3BhY2UgSlNDIHsK
K2NsYXNzIEFic3RyYWN0U2xvdFZpc2l0b3I7CiBjbGFzcyBKU09iamVjdDsKLWNsYXNzIFNsb3RW
aXNpdG9yOworLy9jbGFzcyBTbG90VmlzaXRvcjsKIH0KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpA
QCAtNTIsNyArNTMsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGhhbmRsZUV2ZW50KFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBFdmVudCYpID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgd2Fz
Q3JlYXRlZEZyb21NYXJrdXAoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogCi0gICAgdmlydHVh
bCB2b2lkIHZpc2l0SlNGdW5jdGlvbihKU0M6OlNsb3RWaXNpdG9yJikgeyB9CisvLyAgICB2aXJ0
dWFsIHZvaWQgdmlzaXRKU0Z1bmN0aW9uKEpTQzo6U2xvdFZpc2l0b3ImKSB7IH0KKyAgICB2aXJ0
dWFsIHZvaWQgdmlzaXRKU0Z1bmN0aW9uKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpIHsgfQog
CiAgICAgdmlydHVhbCBib29sIGlzQXR0cmlidXRlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0K
ICAgICBUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2RvbS9FdmVudFRhcmdldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
ZG9tL0V2ZW50VGFyZ2V0LmNwcAkocmV2aXNpb24gMjcyNzEwKQorKysgU291cmNlL1dlYkNvcmUv
ZG9tL0V2ZW50VGFyZ2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzg0LDcgKzM4NCw5IEBAIHZv
aWQgRXZlbnRUYXJnZXQ6OnJlbW92ZUFsbEV2ZW50TGlzdGVuZXIKICAgICB0aHJlYWREYXRhLnNl
dElzSW5SZW1vdmVBbGxFdmVudExpc3RlbmVycyhmYWxzZSk7CiB9CiAKLXZvaWQgRXZlbnRUYXJn
ZXQ6OnZpc2l0SlNFdmVudExpc3RlbmVycyhKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy92
b2lkIEV2ZW50VGFyZ2V0Ojp2aXNpdEpTRXZlbnRMaXN0ZW5lcnMoSlNDOjpTbG90VmlzaXRvciYg
dmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEV2ZW50VGFyZ2V0Ojp2
aXNpdEpTRXZlbnRMaXN0ZW5lcnMoVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBFdmVudFRhcmdl
dERhdGEqIGRhdGEgPSBldmVudFRhcmdldERhdGFDb25jdXJyZW50bHkoKTsKICAgICBpZiAoIWRh
dGEpCkBAIC0zOTYsNiArMzk4LDkgQEAgdm9pZCBFdmVudFRhcmdldDo6dmlzaXRKU0V2ZW50TGlz
dGVuZXJzKAogICAgICAgICBsaXN0ZW5lci0+dmlzaXRKU0Z1bmN0aW9uKHZpc2l0b3IpOwogfQog
Cit0ZW1wbGF0ZSB2b2lkIEV2ZW50VGFyZ2V0Ojp2aXNpdEpTRXZlbnRMaXN0ZW5lcnMoSlNDOjpB
YnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEV2ZW50VGFyZ2V0Ojp2aXNpdEpT
RXZlbnRMaXN0ZW5lcnMoSlNDOjpTbG90VmlzaXRvciYpOworCiB2b2lkIEV2ZW50VGFyZ2V0Ojpp
bnZhbGlkYXRlRXZlbnRMaXN0ZW5lclJlZ2lvbnMoKQogewogICAgIGlmIChpczxFbGVtZW50Pigq
dGhpcykpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9FdmVudFRhcmdldC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9FdmVudFRhcmdldC5oCShyZXZpc2lvbiAyNzI3MTAp
CisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRUYXJnZXQuaAkod29ya2luZyBjb3B5KQpAQCAt
OTcsNyArOTcsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBmaXJlRXZlbnRMaXN0ZW5lcnMoRXZlbnQm
LCBFdmVudEludm9rZVBoYXNlKTsKICAgICBib29sIGlzRmlyaW5nRXZlbnRMaXN0ZW5lcnMoKSBj
b25zdDsKIAotICAgIHZvaWQgdmlzaXRKU0V2ZW50TGlzdGVuZXJzKEpTQzo6U2xvdFZpc2l0b3Im
KTsKKy8vICAgIHZvaWQgdmlzaXRKU0V2ZW50TGlzdGVuZXJzKEpTQzo6U2xvdFZpc2l0b3ImKTsK
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIHZpc2l0SlNFdmVudExpc3RlbmVy
cyhWaXNpdG9yJik7CiAgICAgdm9pZCBpbnZhbGlkYXRlSlNFdmVudExpc3RlbmVycyhKU0M6OkpT
T2JqZWN0Kik7CiAKICAgICBjb25zdCBFdmVudFRhcmdldERhdGEqIGV2ZW50VGFyZ2V0RGF0YSgp
IGNvbnN0OwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL011dGF0aW9uUmVjb3JkLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vTXV0YXRpb25SZWNvcmQuY3BwCShyZXZpc2lv
biAyNzI3MTApCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vTXV0YXRpb25SZWNvcmQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00MSw3ICs0MSw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogbmFtZXNw
YWNlIHsKIAotc3RhdGljIHZvaWQgdmlzaXROb2RlTGlzdChKU0M6OlNsb3RWaXNpdG9yJiB2aXNp
dG9yLCBOb2RlTGlzdCYgbm9kZUxpc3QpCisvL3N0YXRpYyB2b2lkIHZpc2l0Tm9kZUxpc3QoSlND
OjpTbG90VmlzaXRvciYgdmlzaXRvciwgTm9kZUxpc3QmIG5vZGVMaXN0KQorc3RhdGljIHZvaWQg
dmlzaXROb2RlTGlzdChKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIE5vZGVMaXN0
JiBub2RlTGlzdCkKIHsKICAgICBBU1NFUlQoIW5vZGVMaXN0LmlzTGl2ZU5vZGVMaXN0KCkpOwog
ICAgIHVuc2lnbmVkIGxlbmd0aCA9IG5vZGVMaXN0Lmxlbmd0aCgpOwpAQCAtNjgsNyArNjksOCBA
QCBwcml2YXRlOgogICAgIE5vZGUqIHByZXZpb3VzU2libGluZygpIG92ZXJyaWRlIHsgcmV0dXJu
IG1fcHJldmlvdXNTaWJsaW5nLmdldCgpOyB9CiAgICAgTm9kZSogbmV4dFNpYmxpbmcoKSBvdmVy
cmlkZSB7IHJldHVybiBtX25leHRTaWJsaW5nLmdldCgpOyB9CiAKLSAgICB2b2lkIHZpc2l0Tm9k
ZXNDb25jdXJyZW50bHkoSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikgY29uc3QgZmluYWwKKy8v
ICAgIHZvaWQgdmlzaXROb2Rlc0NvbmN1cnJlbnRseShKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9y
KSBjb25zdCBmaW5hbAorICAgIHZvaWQgdmlzaXROb2Rlc0NvbmN1cnJlbnRseShKU0M6OkFic3Ry
YWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0IGZpbmFsCiAgICAgewogICAgICAgICB2aXNp
dG9yLmFkZE9wYXF1ZVJvb3Qocm9vdChtX3RhcmdldC5wdHIoKSkpOwogICAgICAgICBpZiAobV9h
ZGRlZE5vZGVzKQpAQCAtMTA1LDcgKzEwNyw4IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiBu
b2RlTGlzdC5nZXQoKTsKICAgICB9CiAKLSAgICB2b2lkIHZpc2l0Tm9kZXNDb25jdXJyZW50bHko
SlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikgY29uc3QgZmluYWwKKy8vICAgIHZvaWQgdmlzaXRO
b2Rlc0NvbmN1cnJlbnRseShKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKSBjb25zdCBmaW5hbAor
ICAgIHZvaWQgdmlzaXROb2Rlc0NvbmN1cnJlbnRseShKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3Im
IHZpc2l0b3IpIGNvbnN0IGZpbmFsCiAgICAgewogICAgICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJv
b3Qocm9vdChtX3RhcmdldC5wdHIoKSkpOwogICAgIH0KQEAgLTE2NCw3ICsxNjcsOCBAQCBwcml2
YXRlOgogCiAgICAgU3RyaW5nIG9sZFZhbHVlKCkgb3ZlcnJpZGUgeyByZXR1cm4gU3RyaW5nKCk7
IH0KIAotICAgIHZvaWQgdmlzaXROb2Rlc0NvbmN1cnJlbnRseShKU0M6OlNsb3RWaXNpdG9yJiB2
aXNpdG9yKSBjb25zdCBmaW5hbAorLy8gICAgdm9pZCB2aXNpdE5vZGVzQ29uY3VycmVudGx5KEpT
Qzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0IGZpbmFsCisgICAgdm9pZCB2aXNpdE5vZGVz
Q29uY3VycmVudGx5KEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikgY29uc3QgZmlu
YWwKICAgICB7CiAgICAgICAgIG1fcmVjb3JkLT52aXNpdE5vZGVzQ29uY3VycmVudGx5KHZpc2l0
b3IpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9NdXRhdGlvblJlY29yZC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9NdXRhdGlvblJlY29yZC5oCShyZXZpc2lv
biAyNzI3MTApCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vTXV0YXRpb25SZWNvcmQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNzIsNyArNzIsOCBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIFN0cmluZyBv
bGRWYWx1ZSgpIHsgcmV0dXJuIFN0cmluZygpOyB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXRO
b2Rlc0NvbmN1cnJlbnRseShKU0M6OlNsb3RWaXNpdG9yJikgY29uc3QgPSAwOworLy8gICAgdmly
dHVhbCB2b2lkIHZpc2l0Tm9kZXNDb25jdXJyZW50bHkoSlNDOjpTbG90VmlzaXRvciYpIGNvbnN0
ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXROb2Rlc0NvbmN1cnJlbnRseShKU0M6OkFic3Ry
YWN0U2xvdFZpc2l0b3ImKSBjb25zdCA9IDA7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vU3RhdGljUmFuZ2UuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2RvbS9TdGF0aWNSYW5nZS5jcHAJKHJldmlzaW9uIDI3MjcxMCkKKysr
IFNvdXJjZS9XZWJDb3JlL2RvbS9TdGF0aWNSYW5nZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc2
LDcgKzc2LDcgQEAgRXhjZXB0aW9uT3I8UmVmPFN0YXRpY1JhbmdlPj4gU3RhdGljUmFuZwogICAg
IHJldHVybiBjcmVhdGUoeyB7IGluaXQuc3RhcnRDb250YWluZXIucmVsZWFzZU5vbk51bGwoKSwg
aW5pdC5zdGFydE9mZnNldCB9LCB7IGluaXQuZW5kQ29udGFpbmVyLnJlbGVhc2VOb25OdWxsKCks
IGluaXQuZW5kT2Zmc2V0IH0gfSk7CiB9CiAKLXZvaWQgU3RhdGljUmFuZ2U6OnZpc2l0Tm9kZXND
b25jdXJyZW50bHkoSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikgY29uc3QKK3ZvaWQgU3RhdGlj
UmFuZ2U6OnZpc2l0Tm9kZXNDb25jdXJyZW50bHkoSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiB2
aXNpdG9yKSBjb25zdAogewogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChyb290KHN0YXJ0LmNv
bnRhaW5lci5nZXQoKSkpOwogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChyb290KGVuZC5jb250
YWluZXIuZ2V0KCkpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9TdGF0aWNSYW5nZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9TdGF0aWNSYW5nZS5oCShyZXZpc2lvbiAy
NzI3MTApCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vU3RhdGljUmFuZ2UuaAkod29ya2luZyBjb3B5
KQpAQCAtNTgsNyArNTgsNyBAQCBwdWJsaWM6CiAgICAgdW5zaWduZWQgZW5kT2Zmc2V0KCkgY29u
c3QgZmluYWwgeyByZXR1cm4gU2ltcGxlUmFuZ2U6OmVuZE9mZnNldCgpOyB9CiAgICAgYm9vbCBj
b2xsYXBzZWQoKSBjb25zdCBmaW5hbCB7IHJldHVybiBTaW1wbGVSYW5nZTo6Y29sbGFwc2VkKCk7
IH0KIAotICAgIHZvaWQgdmlzaXROb2Rlc0NvbmN1cnJlbnRseShKU0M6OlNsb3RWaXNpdG9yJikg
Y29uc3Q7CisgICAgdm9pZCB2aXNpdE5vZGVzQ29uY3VycmVudGx5KEpTQzo6QWJzdHJhY3RTbG90
VmlzaXRvciYpIGNvbnN0OwogCiBwcml2YXRlOgogICAgIFN0YXRpY1JhbmdlKFNpbXBsZVJhbmdl
JiYpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0wyUmVuZGVyaW5nQ29u
dGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0wy
UmVuZGVyaW5nQ29udGV4dC5jcHAJKHJldmlzaW9uIDI3MjcxMCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL1dlYkdMMlJlbmRlcmluZ0NvbnRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zMDc4LDE4ICszMDc4LDIwIEBAIGJvb2wgV2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6Y2hlY2tB
bmRUcmEKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBXZWJHTDJSZW5kZXJpbmdDb250ZXh0
OjphZGRNZW1iZXJzVG9PcGFxdWVSb290cyhKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy92
b2lkIFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OmFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKEpTQzo6
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OmFkZE1l
bWJlcnNUb09wYXF1ZVJvb3RzKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsK
ICAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjphZGRNZW1iZXJzVG9PcGFxdWVSb290cyh2
aXNpdG9yKTsKIAogICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sob2JqZWN0R3JhcGhMb2NrKCkp
OwogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChtX3JlYWRGcmFtZWJ1ZmZlckJpbmRpbmcuZ2V0
KCkpOwogICAgIGlmIChtX3JlYWRGcmFtZWJ1ZmZlckJpbmRpbmcpCi0gICAgICAgIG1fcmVhZEZy
YW1lYnVmZmVyQmluZGluZy0+YWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMobG9ja2VyLCB2aXNpdG9y
KTsKKyAgICAgICAgbV9yZWFkRnJhbWVidWZmZXJCaW5kaW5nLT5hZGRNZW1iZXJzVG9PcGFxdWVS
b290czMwMChsb2NrZXIsIHZpc2l0b3IpOwogCiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KG1f
Ym91bmRUcmFuc2Zvcm1GZWVkYmFjay5nZXQoKSk7CiAgICAgaWYgKG1fYm91bmRUcmFuc2Zvcm1G
ZWVkYmFjaykKLSAgICAgICAgbV9ib3VuZFRyYW5zZm9ybUZlZWRiYWNrLT5hZGRNZW1iZXJzVG9P
cGFxdWVSb290cyhsb2NrZXIsIHZpc2l0b3IpOworLy8gICAgICAgIG1fYm91bmRUcmFuc2Zvcm1G
ZWVkYmFjay0+YWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMobG9ja2VyLCB2aXNpdG9yKTsKKyAgICAg
ICAgbV9ib3VuZFRyYW5zZm9ybUZlZWRiYWNrLT5hZGRNZW1iZXJzVG9PcGFxdWVSb290czEwMChs
b2NrZXIsIHZpc2l0b3IpOwogCiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KG1fYm91bmRDb3B5
UmVhZEJ1ZmZlci5nZXQoKSk7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KG1fYm91bmRDb3B5
V3JpdGVCdWZmZXIuZ2V0KCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2Vi
R0wyUmVuZGVyaW5nQ29udGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL1dlYkdMMlJlbmRlcmluZ0NvbnRleHQuaAkocmV2aXNpb24gMjcyNzEwKQorKysgU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yNjEsNyArMjYxLDggQEAgcHVibGljOgogCiAgICAgYm9vbCBjaGVja0FuZFRy
YW5zbGF0ZUF0dGFjaG1lbnRzKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0NHTGVudW0sIFZl
Y3RvcjxHQ0dMZW51bT4mKTsKIAotICAgIHZvaWQgYWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMoSlND
OjpTbG90VmlzaXRvciYpIG92ZXJyaWRlOworLy8gICAgdm9pZCBhZGRNZW1iZXJzVG9PcGFxdWVS
b290cyhKU0M6OlNsb3RWaXNpdG9yJikgb3ZlcnJpZGU7CisgICAgdm9pZCBhZGRNZW1iZXJzVG9P
cGFxdWVSb290cyhKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKSBvdmVycmlkZTsKIAogcHJpdmF0
ZToKICAgICBXZWJHTDJSZW5kZXJpbmdDb250ZXh0KENhbnZhc0Jhc2UmLCBHcmFwaGljc0NvbnRl
eHRHTEF0dHJpYnV0ZXMpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xG
cmFtZWJ1ZmZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
V2ViR0xGcmFtZWJ1ZmZlci5jcHAJKHJldmlzaW9uIDI3MjcxMCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL1dlYkdMRnJhbWVidWZmZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Myw3
ICs2Myw4IEBAIG5hbWVzcGFjZSB7CiAgICAgICAgIHZvaWQgb25EZXRhY2hlZChjb25zdCBBYnN0
cmFjdExvY2tlciYsIEdyYXBoaWNzQ29udGV4dEdMKikgb3ZlcnJpZGU7CiAgICAgICAgIHZvaWQg
YXR0YWNoKEdyYXBoaWNzQ29udGV4dEdMKiwgR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBhdHRh
Y2htZW50KSBvdmVycmlkZTsKICAgICAgICAgdm9pZCB1bmF0dGFjaChHcmFwaGljc0NvbnRleHRH
TCosIEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gYXR0YWNobWVudCkgb3ZlcnJpZGU7Ci0gICAg
ICAgIHZvaWQgYWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMoY29uc3QgQWJzdHJhY3RMb2NrZXImLCBK
U0M6OlNsb3RWaXNpdG9yJikgb3ZlcnJpZGU7CisvLyAgICAgICAgdm9pZCBhZGRNZW1iZXJzVG9P
cGFxdWVSb290cyhjb25zdCBBYnN0cmFjdExvY2tlciYsIEpTQzo6U2xvdFZpc2l0b3ImKSBvdmVy
cmlkZTsKKyAgICAgICAgdm9pZCBhZGRNZW1iZXJzVG9PcGFxdWVSb290czQwMChjb25zdCBBYnN0
cmFjdExvY2tlciYsIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpIG92ZXJyaWRlOwogCiAgICAg
ICAgIFdlYkdMUmVuZGVyYnVmZmVyQXR0YWNobWVudCgpIHsgfTsKIApAQCAtMTQ1LDcgKzE0Niw4
IEBAIG5hbWVzcGFjZSB7CiAgICAgICAgICAgICBjb250ZXh0LT5mcmFtZWJ1ZmZlclJlbmRlcmJ1
ZmZlcih0YXJnZXQsIGF0dGFjaG1lbnQsIEdyYXBoaWNzQ29udGV4dEdMOjpSRU5ERVJCVUZGRVIs
IDApOwogICAgIH0KIAotICAgIHZvaWQgV2ViR0xSZW5kZXJidWZmZXJBdHRhY2htZW50OjphZGRN
ZW1iZXJzVG9PcGFxdWVSb290cyhjb25zdCBBYnN0cmFjdExvY2tlciYsIEpTQzo6U2xvdFZpc2l0
b3ImIHZpc2l0b3IpCisvLyAgICB2b2lkIFdlYkdMUmVuZGVyYnVmZmVyQXR0YWNobWVudDo6YWRk
TWVtYmVyc1RvT3BhcXVlUm9vdHMoY29uc3QgQWJzdHJhY3RMb2NrZXImLCBKU0M6OlNsb3RWaXNp
dG9yJiB2aXNpdG9yKQorICAgIHZvaWQgV2ViR0xSZW5kZXJidWZmZXJBdHRhY2htZW50OjphZGRN
ZW1iZXJzVG9PcGFxdWVSb290czQwMChjb25zdCBBYnN0cmFjdExvY2tlciYsIEpTQzo6QWJzdHJh
Y3RTbG90VmlzaXRvciYgdmlzaXRvcikKICAgICB7CiAgICAgICAgIHZpc2l0b3IuYWRkT3BhcXVl
Um9vdChtX3JlbmRlcmJ1ZmZlci5nZXQoKSk7CiAgICAgfQpAQCAtMTY5LDcgKzE3MSw4IEBAIG5h
bWVzcGFjZSB7CiAgICAgICAgIHZvaWQgb25EZXRhY2hlZChjb25zdCBBYnN0cmFjdExvY2tlciYs
IEdyYXBoaWNzQ29udGV4dEdMKikgb3ZlcnJpZGU7CiAgICAgICAgIHZvaWQgYXR0YWNoKEdyYXBo
aWNzQ29udGV4dEdMKiwgR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBhdHRhY2htZW50KSBvdmVy
cmlkZTsKICAgICAgICAgdm9pZCB1bmF0dGFjaChHcmFwaGljc0NvbnRleHRHTCosIEdDR0xlbnVt
IHRhcmdldCwgR0NHTGVudW0gYXR0YWNobWVudCkgb3ZlcnJpZGU7Ci0gICAgICAgIHZvaWQgYWRk
TWVtYmVyc1RvT3BhcXVlUm9vdHMoY29uc3QgQWJzdHJhY3RMb2NrZXImLCBKU0M6OlNsb3RWaXNp
dG9yJikgb3ZlcnJpZGU7CisvLyAgICAgICAgdm9pZCBhZGRNZW1iZXJzVG9PcGFxdWVSb290cyhj
b25zdCBBYnN0cmFjdExvY2tlciYsIEpTQzo6U2xvdFZpc2l0b3ImKSBvdmVycmlkZTsKKyAgICAg
ICAgdm9pZCBhZGRNZW1iZXJzVG9PcGFxdWVSb290czQwMChjb25zdCBBYnN0cmFjdExvY2tlciYs
IEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpIG92ZXJyaWRlOwogCiAgICAgICAgIFdlYkdMVGV4
dHVyZUF0dGFjaG1lbnQoKSB7IH07CiAKQEAgLTI2Nyw3ICsyNzAsOCBAQCBuYW1lc3BhY2Ugewog
I2VuZGlmCiAgICAgfQogCi0gICAgdm9pZCBXZWJHTFRleHR1cmVBdHRhY2htZW50OjphZGRNZW1i
ZXJzVG9PcGFxdWVSb290cyhjb25zdCBBYnN0cmFjdExvY2tlciYsIEpTQzo6U2xvdFZpc2l0b3Im
IHZpc2l0b3IpCisvLyAgICB2b2lkIFdlYkdMVGV4dHVyZUF0dGFjaG1lbnQ6OmFkZE1lbWJlcnNU
b09wYXF1ZVJvb3RzKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgSlNDOjpTbG90VmlzaXRvciYgdmlz
aXRvcikKKyAgICB2b2lkIFdlYkdMVGV4dHVyZUF0dGFjaG1lbnQ6OmFkZE1lbWJlcnNUb09wYXF1
ZVJvb3RzNDAwKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9y
JiB2aXNpdG9yKQogICAgIHsKICAgICAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KG1fdGV4dHVy
ZS5nZXQoKSk7CiAgICAgfQpAQCAtNzIxLDEwICs3MjUsMTEgQEAgR0NHTGVudW0gV2ViR0xGcmFt
ZWJ1ZmZlcjo6Z2V0RHJhd0J1ZmZlcgogICAgIHJldHVybiBHcmFwaGljc0NvbnRleHRHTDo6Tk9O
RTsKIH0KIAotdm9pZCBXZWJHTEZyYW1lYnVmZmVyOjphZGRNZW1iZXJzVG9PcGFxdWVSb290cyhj
b25zdCBBYnN0cmFjdExvY2tlciYgbG9ja2VyLCBKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQor
Ly92b2lkIFdlYkdMRnJhbWVidWZmZXI6OmFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKGNvbnN0IEFi
c3RyYWN0TG9ja2VyJiBsb2NrZXIsIEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIFdl
YkdMRnJhbWVidWZmZXI6OmFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzMzAwKGNvbnN0IEFic3RyYWN0
TG9ja2VyJiBsb2NrZXIsIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAg
ICBmb3IgKGF1dG8mIGVudHJ5IDogbV9hdHRhY2htZW50cykKLSAgICAgICAgZW50cnkudmFsdWUt
PmFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKGxvY2tlciwgdmlzaXRvcik7CisgICAgICAgIGVudHJ5
LnZhbHVlLT5hZGRNZW1iZXJzVG9PcGFxdWVSb290czQwMChsb2NrZXIsIHZpc2l0b3IpOwogfQog
CiB2b2lkIFdlYkdMRnJhbWVidWZmZXI6OnNldEF0dGFjaG1lbnRJbnRlcm5hbChHQ0dMZW51bSBh
dHRhY2htZW50LCBHQ0dMZW51bSB0ZXhUYXJnZXQsIFdlYkdMVGV4dHVyZSogdGV4dHVyZSwgR0NH
TGludCBsZXZlbCwgR0NHTGludCBsYXllcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2Fu
dmFzL1dlYkdMRnJhbWVidWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9XZWJHTEZyYW1lYnVmZmVyLmgJKHJldmlzaW9uIDI3MjcxMCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRnJhbWVidWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAt
MzQsNyArMzQsOCBAQAogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIEpTQyB7
Ci1jbGFzcyBTbG90VmlzaXRvcjsKKy8vY2xhc3MgU2xvdFZpc2l0b3I7CitjbGFzcyBBYnN0cmFj
dFNsb3RWaXNpdG9yOwogfQogCiBuYW1lc3BhY2UgV1RGIHsKQEAgLTY1LDcgKzY2LDggQEAgcHVi
bGljOgogICAgICAgICB2aXJ0dWFsIHZvaWQgb25EZXRhY2hlZChjb25zdCBXVEY6OkFic3RyYWN0
TG9ja2VyJiwgR3JhcGhpY3NDb250ZXh0R0wqKSA9IDA7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBh
dHRhY2goR3JhcGhpY3NDb250ZXh0R0wqLCBHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIGF0dGFj
aG1lbnQpID0gMDsKICAgICAgICAgdmlydHVhbCB2b2lkIHVuYXR0YWNoKEdyYXBoaWNzQ29udGV4
dEdMKiwgR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBhdHRhY2htZW50KSA9IDA7Ci0gICAgICAg
IHZpcnR1YWwgdm9pZCBhZGRNZW1iZXJzVG9PcGFxdWVSb290cyhjb25zdCBXVEY6OkFic3RyYWN0
TG9ja2VyJiwgSlNDOjpTbG90VmlzaXRvciYpID0gMDsKKy8vICAgICAgICB2aXJ0dWFsIHZvaWQg
YWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMoY29uc3QgV1RGOjpBYnN0cmFjdExvY2tlciYsIEpTQzo6
U2xvdFZpc2l0b3ImKSA9IDA7CisgICAgICAgIHZpcnR1YWwgdm9pZCBhZGRNZW1iZXJzVG9PcGFx
dWVSb290czQwMChjb25zdCBXVEY6OkFic3RyYWN0TG9ja2VyJiwgSlNDOjpBYnN0cmFjdFNsb3RW
aXNpdG9yJikgPSAwOwogCiAgICAgcHJvdGVjdGVkOgogICAgICAgICBXZWJHTEF0dGFjaG1lbnQo
KTsKQEAgLTExNCw3ICsxMTYsOCBAQCBwdWJsaWM6CiAKICAgICBHQ0dMZW51bSBnZXREcmF3QnVm
ZmVyKEdDR0xlbnVtKTsKIAotICAgIHZvaWQgYWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMoY29uc3Qg
V1RGOjpBYnN0cmFjdExvY2tlciYsIEpTQzo6U2xvdFZpc2l0b3ImKTsKKy8vICAgIHZvaWQgYWRk
TWVtYmVyc1RvT3BhcXVlUm9vdHMoY29uc3QgV1RGOjpBYnN0cmFjdExvY2tlciYsIEpTQzo6U2xv
dFZpc2l0b3ImKTsKKyAgICB2b2lkIGFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzMzAwKGNvbnN0IFdU
Rjo6QWJzdHJhY3RMb2NrZXImLCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKTsKIAogcHJpdmF0
ZToKICAgICBXZWJHTEZyYW1lYnVmZmVyKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UmKTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUHJvZ3JhbS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xQcm9ncmFtLmNwcAkocmV2aXNp
b24gMjcyNzEwKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xQcm9ncmFtLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjA2LDcgKzIwNiw4IEBAIGJvb2wgV2ViR0xQcm9ncmFtOjpk
ZXRhY2hTaGFkZXIoY29uc3QgQWIKICAgICB9CiB9CiAKLXZvaWQgV2ViR0xQcm9ncmFtOjphZGRN
ZW1iZXJzVG9PcGFxdWVSb290cyhjb25zdCBBYnN0cmFjdExvY2tlciYsIEpTQzo6U2xvdFZpc2l0
b3ImIHZpc2l0b3IpCisvL3ZvaWQgV2ViR0xQcm9ncmFtOjphZGRNZW1iZXJzVG9PcGFxdWVSb290
cyhjb25zdCBBYnN0cmFjdExvY2tlciYsIEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2b2lk
IFdlYkdMUHJvZ3JhbTo6YWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMyMDAoY29uc3QgQWJzdHJhY3RM
b2NrZXImLCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgdmlzaXRv
ci5hZGRPcGFxdWVSb290KG1fdmVydGV4U2hhZGVyLmdldCgpKTsKICAgICB2aXNpdG9yLmFkZE9w
YXF1ZVJvb3QobV9mcmFnbWVudFNoYWRlci5nZXQoKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9XZWJHTFByb2dyYW0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9XZWJHTFByb2dyYW0uaAkocmV2aXNpb24gMjcyNzEwKQorKysgU291cmNlL1dl
YkNvcmUvaHRtbC9jYW52YXMvV2ViR0xQcm9ncmFtLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDcg
KzM1LDggQEAKICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBKU0MgewotY2xh
c3MgU2xvdFZpc2l0b3I7CisvL2NsYXNzIFNsb3RWaXNpdG9yOworY2xhc3MgQWJzdHJhY3RTbG90
VmlzaXRvcjsKIH0KIAogbmFtZXNwYWNlIFdURiB7CkBAIC04OCw3ICs4OSw4IEBAIHB1YmxpYzoK
ICAgICAgICAgcmV0dXJuIG1fcmVxdWlyZWRUcmFuc2Zvcm1GZWVkYmFja0J1ZmZlckNvdW50Owog
ICAgIH0KIAotICAgIHZvaWQgYWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMoY29uc3QgV1RGOjpBYnN0
cmFjdExvY2tlciYsIEpTQzo6U2xvdFZpc2l0b3ImKTsKKy8vICAgIHZvaWQgYWRkTWVtYmVyc1Rv
T3BhcXVlUm9vdHMoY29uc3QgV1RGOjpBYnN0cmFjdExvY2tlciYsIEpTQzo6U2xvdFZpc2l0b3Im
KTsKKyAgICB2b2lkIGFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzMjAwKGNvbnN0IFdURjo6QWJzdHJh
Y3RMb2NrZXImLCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKTsKIAogcHJpdmF0ZToKICAgICBX
ZWJHTFByb2dyYW0oV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSYpOwpJbmRleDogU291cmNlL1dl
YkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZS5jcHAJKHJldmlzaW9uIDI3MjcxMCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dl
YkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03OTMxLDIzICs3
OTMxLDI2IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6ZGlzcGF0Y2gKICAgICBx
dWV1ZVRhc2tUb0Rpc3BhdGNoRXZlbnQoKmNhbnZhcywgVGFza1NvdXJjZTo6V2ViR0wsIFdlYkdM
Q29udGV4dEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLndlYmdsY29udGV4dGNoYW5nZWRFdmVu
dCwgRXZlbnQ6OkNhbkJ1YmJsZTo6Tm8sIEV2ZW50OjpJc0NhbmNlbGFibGU6OlllcywgZW1wdHlT
dHJpbmcoKSkpOwogfQogCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmFkZE1lbWJl
cnNUb09wYXF1ZVJvb3RzKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3ZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZTo6YWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMoSlNDOjpTbG90Vmlz
aXRvciYgdmlzaXRvcikKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6YWRkTWVtYmVy
c1RvT3BhcXVlUm9vdHMoSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAg
IGF1dG8gbG9ja2VyID0gaG9sZExvY2sob2JqZWN0R3JhcGhMb2NrKCkpOwogCisgICAgLy8gbWxh
bSBGSVhNRTogd2h5IGFyZSB3ZSBub3QgYWxzbyB2aXNpdGluZyBtX2RlZmF1bHRWZXJ0ZXhBcnJh
eU9iamVjdD8KKwogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChtX2JvdW5kQXJyYXlCdWZmZXIu
Z2V0KCkpOwogCiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KG1fYm91bmRWZXJ0ZXhBcnJheU9i
amVjdC5nZXQoKSk7CiAgICAgaWYgKG1fYm91bmRWZXJ0ZXhBcnJheU9iamVjdCkKLSAgICAgICAg
bV9ib3VuZFZlcnRleEFycmF5T2JqZWN0LT5hZGRNZW1iZXJzVG9PcGFxdWVSb290cyhsb2NrZXIs
IHZpc2l0b3IpOworICAgICAgICBtX2JvdW5kVmVydGV4QXJyYXlPYmplY3QtPmFkZE1lbWJlcnNU
b09wYXF1ZVJvb3RzNjAwKGxvY2tlciwgdmlzaXRvcik7CiAKICAgICB2aXNpdG9yLmFkZE9wYXF1
ZVJvb3QobV9jdXJyZW50UHJvZ3JhbS5nZXQoKSk7CiAgICAgaWYgKG1fY3VycmVudFByb2dyYW0p
Ci0gICAgICAgIG1fY3VycmVudFByb2dyYW0tPmFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKGxvY2tl
ciwgdmlzaXRvcik7CisgICAgICAgIG1fY3VycmVudFByb2dyYW0tPmFkZE1lbWJlcnNUb09wYXF1
ZVJvb3RzMjAwKGxvY2tlciwgdmlzaXRvcik7CiAKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qo
bV9mcmFtZWJ1ZmZlckJpbmRpbmcuZ2V0KCkpOwogICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGlu
ZykKLSAgICAgICAgbV9mcmFtZWJ1ZmZlckJpbmRpbmctPmFkZE1lbWJlcnNUb09wYXF1ZVJvb3Rz
KGxvY2tlciwgdmlzaXRvcik7CisgICAgICAgIG1fZnJhbWVidWZmZXJCaW5kaW5nLT5hZGRNZW1i
ZXJzVG9PcGFxdWVSb290czMwMChsb2NrZXIsIHZpc2l0b3IpOwogCiAgICAgdmlzaXRvci5hZGRP
cGFxdWVSb290KG1fcmVuZGVyYnVmZmVyQmluZGluZy5nZXQoKSk7CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
LmgJKHJldmlzaW9uIDI3MjcxMCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtNTgsNyArNTgsOCBAQAog
I2VuZGlmCiAKIG5hbWVzcGFjZSBKU0MgewotY2xhc3MgU2xvdFZpc2l0b3I7CisvL2NsYXNzIFNs
b3RWaXNpdG9yOworY2xhc3MgQWJzdHJhY3RTbG90VmlzaXRvcjsKIH0KIAogbmFtZXNwYWNlIFdU
RiB7CkBAIC00MTEsNyArNDEyLDggQEAgcHVibGljOgogICAgIHZvaWQgcmVjeWNsZUNvbnRleHQo
KSBvdmVycmlkZTsKICAgICB2b2lkIGRpc3BhdGNoQ29udGV4dENoYW5nZWROb3RpZmljYXRpb24o
KSBvdmVycmlkZTsKIAotICAgIHZpcnR1YWwgdm9pZCBhZGRNZW1iZXJzVG9PcGFxdWVSb290cyhK
U0M6OlNsb3RWaXNpdG9yJik7CisvLyAgICB2aXJ0dWFsIHZvaWQgYWRkTWVtYmVyc1RvT3BhcXVl
Um9vdHMoSlNDOjpTbG90VmlzaXRvciYpOworICAgIHZpcnR1YWwgdm9pZCBhZGRNZW1iZXJzVG9P
cGFxdWVSb290cyhKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKTsKICAgICAvLyBUaGlzIGxvY2sg
bXVzdCBiZSBoZWxkIGFjcm9zcyBhbGwgbXV0YXRpb25zIG9mIGNvbnRhaW5lcnMgbGlrZQogICAg
IC8vIFZlY3RvcnMsIEhhc2hTZXRzLCBldGMuIHdoaWNoIGNvbnRhaW4gUmVmUHRyPFdlYkdMT2Jq
ZWN0PiwgYW5kCiAgICAgLy8gd2hpY2ggYXJlIHRyYXZlcnNlZCBieSBhZGRNZW1iZXJzVG9PcGFx
dWVSb290cygpIG9yIGFueSBvZiB0aGUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L1dlYkdMVHJhbnNmb3JtRmVlZGJhY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL1dlYkdMVHJhbnNmb3JtRmVlZGJhY2suY3BwCShyZXZpc2lvbiAyNzI3MTAp
CisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFRyYW5zZm9ybUZlZWRiYWNrLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzAsOCArMzAsOSBAQAogCiAjaW5jbHVkZSAiV2ViR0xDb250
ZXh0R3JvdXAuaCIKICNpbmNsdWRlICJXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmgiCi0jaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvU2xvdFZpc2l0b3IuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9TbG90VmlzaXRvcklubGluZXMuaD4KKy8vI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1Ns
b3RWaXNpdG9yLmg+CisvLyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9TbG90VmlzaXRvcklubGlu
ZXMuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9BYnN0cmFjdFNsb3RWaXNpdG9ySW5saW5l
cy5oPgogI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CiAjaW5jbHVkZSA8d3RmL0xvY2tlci5oPgogCkBA
IC05MywxNCArOTQsMTUgQEAgYm9vbCBXZWJHTFRyYW5zZm9ybUZlZWRiYWNrOjpoYXNFbm91Z2hC
dQogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIFdlYkdMVHJhbnNmb3JtRmVlZGJhY2s6OmFk
ZE1lbWJlcnNUb09wYXF1ZVJvb3RzKGNvbnN0IEFic3RyYWN0TG9ja2VyJiBsb2NrZXIsIEpTQzo6
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvL3ZvaWQgV2ViR0xUcmFuc2Zvcm1GZWVkYmFjazo6YWRk
TWVtYmVyc1RvT3BhcXVlUm9vdHMoY29uc3QgQWJzdHJhY3RMb2NrZXImIGxvY2tlciwgSlNDOjpT
bG90VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgV2ViR0xUcmFuc2Zvcm1GZWVkYmFjazo6YWRkTWVt
YmVyc1RvT3BhcXVlUm9vdHMxMDAoY29uc3QgQWJzdHJhY3RMb2NrZXImIGxvY2tlciwgSlNDOjpB
YnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGZvciAoYXV0byYgYnVmZmVyIDog
bV9ib3VuZEluZGV4ZWRUcmFuc2Zvcm1GZWVkYmFja0J1ZmZlcnMpCiAgICAgICAgIHZpc2l0b3Iu
YWRkT3BhcXVlUm9vdChidWZmZXIuZ2V0KCkpOwogCiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290
KG1fcHJvZ3JhbS5nZXQoKSk7CiAgICAgaWYgKG1fcHJvZ3JhbSkKLSAgICAgICAgbV9wcm9ncmFt
LT5hZGRNZW1iZXJzVG9PcGFxdWVSb290cyhsb2NrZXIsIHZpc2l0b3IpOworICAgICAgICBtX3By
b2dyYW0tPmFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzMjAwKGxvY2tlciwgdmlzaXRvcik7CiB9CiAK
IHZvaWQgV2ViR0xUcmFuc2Zvcm1GZWVkYmFjazo6dW5iaW5kQnVmZmVyKGNvbnN0IEFic3RyYWN0
TG9ja2VyJiwgV2ViR0xCdWZmZXImIGJ1ZmZlcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL1dlYkdMVHJhbnNmb3JtRmVlZGJhY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9odG1sL2NhbnZhcy9XZWJHTFRyYW5zZm9ybUZlZWRiYWNrLmgJKHJldmlzaW9uIDI3Mjcx
MCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVHJhbnNmb3JtRmVlZGJhY2su
aAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsOCBAQAogI2luY2x1ZGUgIldlYkdMU2hhcmVk
T2JqZWN0LmgiCiAKIG5hbWVzcGFjZSBKU0MgewotY2xhc3MgU2xvdFZpc2l0b3I7CisvL2NsYXNz
IFNsb3RWaXNpdG9yOworY2xhc3MgQWJzdHJhY3RTbG90VmlzaXRvcjsKIH0KIAogbmFtZXNwYWNl
IFdURiB7CkBAIC03MCw3ICs3MSw4IEBAIHB1YmxpYzoKICAgICAKICAgICBib29sIGhhc0Vub3Vn
aEJ1ZmZlcnMoR0NHTHVpbnQgbnVtUmVxdWlyZWQpIGNvbnN0OwogCi0gICAgdm9pZCBhZGRNZW1i
ZXJzVG9PcGFxdWVSb290cyhjb25zdCBBYnN0cmFjdExvY2tlciYsIEpTQzo6U2xvdFZpc2l0b3Im
KTsKKy8vICAgIHZvaWQgYWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMoY29uc3QgQWJzdHJhY3RMb2Nr
ZXImLCBKU0M6OlNsb3RWaXNpdG9yJik7CisgICAgdm9pZCBhZGRNZW1iZXJzVG9PcGFxdWVSb290
czEwMChjb25zdCBBYnN0cmFjdExvY2tlciYsIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpOwog
CiBwcml2YXRlOgogICAgIFdlYkdMVHJhbnNmb3JtRmVlZGJhY2soV2ViR0wyUmVuZGVyaW5nQ29u
dGV4dCYpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xWZXJ0ZXhBcnJh
eU9iamVjdEJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L1dlYkdMVmVydGV4QXJyYXlPYmplY3RCYXNlLmNwcAkocmV2aXNpb24gMjcyNzEwKQorKysgU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xWZXJ0ZXhBcnJheU9iamVjdEJhc2UuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yOSw4ICsyOSw5IEBACiAjaWYgRU5BQkxFKFdFQkdMKQogCiAjaW5j
bHVkZSAiV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL1Nsb3RWaXNpdG9yLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvU2xvdFZpc2l0b3JJ
bmxpbmVzLmg+CisvLyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9TbG90VmlzaXRvci5oPgorLy8j
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvU2xvdFZpc2l0b3JJbmxpbmVzLmg+CisjaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvQWJzdHJhY3RTbG90VmlzaXRvcklubGluZXMuaD4KICNpbmNsdWRlIDx3
dGYvTG9ja2VyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTEwOSw3ICsxMTAsOCBAQCB2
b2lkIFdlYkdMVmVydGV4QXJyYXlPYmplY3RCYXNlOjpzZXRWZXJ0CiAgICAgbV92ZXJ0ZXhBdHRy
aWJTdGF0ZVtpbmRleF0uZGl2aXNvciA9IGRpdmlzb3I7CiB9CiAKLXZvaWQgV2ViR0xWZXJ0ZXhB
cnJheU9iamVjdEJhc2U6OmFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKGNvbnN0IEFic3RyYWN0TG9j
a2VyJiwgSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vdm9pZCBXZWJHTFZlcnRleEFycmF5
T2JqZWN0QmFzZTo6YWRkTWVtYmVyc1RvT3BhcXVlUm9vdHM2MDAoY29uc3QgQWJzdHJhY3RMb2Nr
ZXImLCBKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBXZWJHTFZlcnRleEFycmF5T2Jq
ZWN0QmFzZTo6YWRkTWVtYmVyc1RvT3BhcXVlUm9vdHM2MDAoY29uc3QgQWJzdHJhY3RMb2NrZXIm
LCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgdmlzaXRvci5hZGRP
cGFxdWVSb290KG1fYm91bmRFbGVtZW50QXJyYXlCdWZmZXIuZ2V0KCkpOwogICAgIGZvciAoYXV0
byYgc3RhdGUgOiBtX3ZlcnRleEF0dHJpYlN0YXRlKQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvV2ViR0xWZXJ0ZXhBcnJheU9iamVjdEJhc2UuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFZlcnRleEFycmF5T2JqZWN0QmFzZS5oCShyZXZp
c2lvbiAyNzI3MTApCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFZlcnRleEFy
cmF5T2JqZWN0QmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw4IEBACiAjaW5jbHVk
ZSAiV2ViR0xDb250ZXh0T2JqZWN0LmgiCiAKIG5hbWVzcGFjZSBKU0MgewotY2xhc3MgU2xvdFZp
c2l0b3I7CisvL2NsYXNzIFNsb3RWaXNpdG9yOworY2xhc3MgQWJzdHJhY3RTbG90VmlzaXRvcjsK
IH0KIAogbmFtZXNwYWNlIFdURiB7CkBAIC03Nyw3ICs3OCw4IEBAIHB1YmxpYzoKIAogICAgIHZv
aWQgc2V0VmVydGV4QXR0cmliRGl2aXNvcihHQ0dMdWludCBpbmRleCwgR0NHTHVpbnQgZGl2aXNv
cik7CiAKLSAgICB2b2lkIGFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKGNvbnN0IFdURjo6QWJzdHJh
Y3RMb2NrZXImLCBKU0M6OlNsb3RWaXNpdG9yJik7CisvLyAgICB2b2lkIGFkZE1lbWJlcnNUb09w
YXF1ZVJvb3RzNjAwKGNvbnN0IFdURjo6QWJzdHJhY3RMb2NrZXImLCBKU0M6OlNsb3RWaXNpdG9y
Jik7CisgICAgdm9pZCBhZGRNZW1iZXJzVG9PcGFxdWVSb290czYwMChjb25zdCBXVEY6OkFic3Ry
YWN0TG9ja2VyJiwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAKIHByb3RlY3RlZDoKICAg
ICBXZWJHTFZlcnRleEFycmF5T2JqZWN0QmFzZShXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlJiwg
VHlwZSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>419968</attachid>
            <date>2021-02-11 02:23:50 -0800</date>
            <delta_ts>2021-02-11 22:09:18 -0800</delta_ts>
            <desc>work in progress.</desc>
            <filename>bug-217274i-dirty.patch</filename>
            <type>text/plain</type>
            <size>516432</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDI3MjcxMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtNjEzLDYgKzYxMyw4IEBAIHNldChKYXZhU2NyaXB0Q29yZV9QUklWQVRFX0ZSQU1FV09SS19I
RUEKICAgICBkb21qaXQvRE9NSklUSGVhcFJhbmdlLmgKICAgICBkb21qaXQvRE9NSklUU2lnbmF0
dXJlLmgKIAorICAgIGhlYXAvQWJzdHJhY3RTbG90VmlzaXRvci5oCisgICAgaGVhcC9BYnN0cmFj
dFNsb3RWaXNpdG9ySW5saW5lcy5oCiAgICAgaGVhcC9BbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmgK
ICAgICBoZWFwL0FsbG9jYXRpb25GYWlsdXJlTW9kZS5oCiAgICAgaGVhcC9BbGxvY2F0b3IuaApA
QCAtNjg2LDEyICs2ODgsMTQgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1BSSVZBVEVfRlJBTUVXT1JL
X0hFQQogICAgIGhlYXAvU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQuaAogICAgIGhlYXAvU2xvdFZp
c2l0b3IuaAogICAgIGhlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmgKKyAgICBoZWFwL1Nsb3RWaXNp
dG9yTWFjcm9zLmgKICAgICBoZWFwL1N0cm9uZy5oCiAgICAgaGVhcC9TdHJvbmdJbmxpbmVzLmgK
ICAgICBoZWFwL1N1YnNwYWNlLmgKICAgICBoZWFwL1N1YnNwYWNlSW5saW5lcy5oCiAgICAgaGVh
cC9TeW5jaHJvbm91c25lc3MuaAogICAgIGhlYXAvVGlueUJsb29tRmlsdGVyLmgKKyAgICBoZWFw
L1ZlcmlmaWVyU2xvdFZpc2l0b3IuaAogICAgIGhlYXAvVmlzaXRSYWNlS2V5LmgKICAgICBoZWFw
L1dlYWsuaAogICAgIGhlYXAvV2Vha0Jsb2NrLmgKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9Tb3VyY2VzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNl
cy50eHQJKHJldmlzaW9uIDI3MjcxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2Vz
LnR4dAkod29ya2luZyBjb3B5KQpAQCAtNTA1LDYgKzUwNSw3IEBAIGZ0bC9GVExTdGF0ZS5jcHAK
IGZ0bC9GVExUaHVua3MuY3BwCiBmdGwvRlRMVmFsdWVSYW5nZS5jcHAKIAoraGVhcC9BYnN0cmFj
dFNsb3RWaXNpdG9yLmNwcAogaGVhcC9BbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmNwcAogaGVhcC9B
bGxvY2F0b3IuY3BwCiBoZWFwL0Jsb2NrRGlyZWN0b3J5LmNwcApAQCAtNTYzLDYgKzU2NCw3IEBA
IGhlYXAvU3RvcElmTmVjZXNzYXJ5VGltZXIuY3BwCiBoZWFwL1N1YnNwYWNlLmNwcAogaGVhcC9T
eW5jaHJvbm91c1N0b3BUaGVXb3JsZE11dGF0b3JTY2hlZHVsZXIuY3BwCiBoZWFwL1N5bmNocm9u
b3VzbmVzcy5jcHAKK2hlYXAvVmVyaWZpZXJTbG90VmlzaXRvci5jcHAKIGhlYXAvVmlzaXRSYWNl
S2V5LmNwcAogaGVhcC9XZWFrLmNwcAogaGVhcC9XZWFrQmxvY2suY3BwCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQVBJL0pTQVBJV3JhcHBlck9iamVjdC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNBUElXcmFwcGVyT2JqZWN0LmgJKHJldmlzaW9uIDI3
MjcxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNBUElXcmFwcGVyT2JqZWN0LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC00MSw3ICs0MSw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9p
ZCBzdWJzcGFjZUZvcihWTSYpIHsgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQogICAg
IAogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENo
aWxkcmVuKEpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX0VYUE9SVF9W
SVNJVF9DSElMRFJFTjsKICAgICAKICAgICB2b2lkKiB3cmFwcGVkT2JqZWN0KCkgeyByZXR1cm4g
bV93cmFwcGVkT2JqZWN0OyB9CiAgICAgdm9pZCBzZXRXcmFwcGVkT2JqZWN0KHZvaWQqKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNBUElXcmFwcGVyT2JqZWN0Lm1tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNBUElXcmFwcGVyT2JqZWN0Lm1t
CShyZXZpc2lvbiAyNzI3MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQVBJV3Jh
cHBlck9iamVjdC5tbQkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM3LDcgKzM3LDcgQEAKIGNsYXNzIEpT
QVBJV3JhcHBlck9iamVjdEhhbmRsZU93bmVyIGZpbmFsIDogcHVibGljIEpTQzo6V2Vha0hhbmRs
ZU93bmVyIHsKIHB1YmxpYzoKICAgICB2b2lkIGZpbmFsaXplKEpTQzo6SGFuZGxlPEpTQzo6VW5r
bm93bj4sIHZvaWQqKSBmaW5hbDsKLSAgICBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3Rz
KEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6U2xvdFZpc2l0
b3ImLCBjb25zdCBjaGFyKiopIGZpbmFsOworICAgIGJvb2wgaXNSZWFjaGFibGVGcm9tT3BhcXVl
Um9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCwgSlNDOjpBYnN0
cmFjdFNsb3RWaXNpdG9yJiwgY29uc3QgY2hhcioqKSBmaW5hbDsKIH07CiAKIHN0YXRpYyBKU0FQ
SVdyYXBwZXJPYmplY3RIYW5kbGVPd25lcioganNBUElXcmFwcGVyT2JqZWN0SGFuZGxlT3duZXIo
KQpAQCAtNTYsMTQgKzU2LDE0IEBAIHZvaWQgSlNBUElXcmFwcGVyT2JqZWN0SGFuZGxlT3duZXI6
OmZpbmEKICAgICBKU0M6OldlYWtTZXQ6OmRlYWxsb2NhdGUoSlNDOjpXZWFrSW1wbDo6YXNXZWFr
SW1wbChoYW5kbGUuc2xvdCgpKSk7CiB9CiAKLWJvb2wgSlNBUElXcmFwcGVyT2JqZWN0SGFuZGxl
T3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93
bj4gaGFuZGxlLCB2b2lkKiwgSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioq
KQorYm9vbCBKU0FQSVdyYXBwZXJPYmplY3RIYW5kbGVPd25lcjo6aXNSZWFjaGFibGVGcm9tT3Bh
cXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBKU0M6OkFi
c3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKikKIHsKICAgICBKU0M6OkpT
QVBJV3JhcHBlck9iamVjdCogd3JhcHBlck9iamVjdCA9IEpTQzo6anNDYXN0PEpTQzo6SlNBUElX
cmFwcGVyT2JqZWN0Kj4oaGFuZGxlLmdldCgpLmFzQ2VsbCgpKTsKICAgICAvLyBXZSB1c2UgdGhl
IEpTR2xvYmFsT2JqZWN0IHdoZW4gcHJvY2Vzc2luZyB3ZWFrIGhhbmRsZXMgdG8gcHJldmVudCB0
aGUgc2l0dWF0aW9uIHdoZXJlIHVzaW5nCiAgICAgLy8gdGhlIHNhbWUgT2JqZWN0aXZlLUMgb2Jq
ZWN0IGluIG11bHRpcGxlIGdsb2JhbCBvYmplY3RzIGtlZXBzIGFsbCBvZiB0aGUgZ2xvYmFsIG9i
amVjdHMgYWxpdmUuCiAgICAgaWYgKCF3cmFwcGVyT2JqZWN0LT53cmFwcGVkT2JqZWN0KCkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gdmlzaXRvci52bSgpLmhlYXAuaXNNYXJr
ZWQod3JhcHBlck9iamVjdC0+c3RydWN0dXJlKCktPmdsb2JhbE9iamVjdCgpKSAmJiB2aXNpdG9y
LmNvbnRhaW5zT3BhcXVlUm9vdCh3cmFwcGVyT2JqZWN0LT53cmFwcGVkT2JqZWN0KCkpOworICAg
IHJldHVybiB2aXNpdG9yLmlzTWFya2VkKHdyYXBwZXJPYmplY3QtPnN0cnVjdHVyZSgpLT5nbG9i
YWxPYmplY3QoKSkgJiYgdmlzaXRvci5jb250YWluc09wYXF1ZVJvb3Qod3JhcHBlck9iamVjdC0+
d3JhcHBlZE9iamVjdCgpKTsKIH0KIAogbmFtZXNwYWNlIEpTQyB7CkBAIC03Myw2ICs3Myw4IEBA
IHN0YXRpYyBKU0NfREVDTEFSRV9IT1NUX0ZVTkNUSU9OKGNvbnN0cnUKIHN0YXRpYyBKU0NfREVD
TEFSRV9DVVNUT01fR0VUVEVSKGNhbGxiYWNrR2V0dGVySlNBUElXcmFwcGVyT2JqZWN0Q2FsbGJh
Y2tPYmplY3QpOwogc3RhdGljIEpTQ19ERUNMQVJFX0NVU1RPTV9HRVRURVIoc3RhdGljRnVuY3Rp
b25HZXR0ZXJKU0FQSVdyYXBwZXJPYmplY3RDYWxsYmFja09iamVjdCk7CiAKK0RFRklORV9URU1Q
TEFURV9WSVNJVF9DSElMRFJFTih0ZW1wbGF0ZTw+LCBKU0NhbGxiYWNrT2JqZWN0PEpTQVBJV3Jh
cHBlck9iamVjdD4pOworCiB0ZW1wbGF0ZSA8PiBjb25zdCBDbGFzc0luZm8gSlNDYWxsYmFja09i
amVjdDxKU0FQSVdyYXBwZXJPYmplY3Q+OjpzX2luZm8gPSB7ICJKU0FQSVdyYXBwZXJPYmplY3Qi
LCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpT
Q2FsbGJhY2tPYmplY3QpIH07CiB0ZW1wbGF0ZSA8PiBjb25zdCBib29sIEpTQ2FsbGJhY2tPYmpl
Y3Q8SlNBUElXcmFwcGVyT2JqZWN0Pjo6bmVlZHNEZXN0cnVjdGlvbiA9IHRydWU7CiAKQEAgLTEy
Myw3ICsxMjUsOCBAQCB2b2lkIEpTQVBJV3JhcHBlck9iamVjdDo6c2V0V3JhcHBlZE9iamVjCiAg
ICAgbV93cmFwcGVkT2JqZWN0ID0gW3N0YXRpY19jYXN0PGlkPih3cmFwcGVkT2JqZWN0KSByZXRh
aW5dOwogfQogCi12b2lkIEpTQVBJV3JhcHBlck9iamVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwq
IGNlbGwsIEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNp
dG9yPgordm9pZCBKU0FQSVdyYXBwZXJPYmplY3Q6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCog
Y2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU0FQSVdyYXBwZXJPYmplY3QqIHRoaXNP
YmplY3QgPSBKU0M6OmpzQ2FzdDxKU0FQSVdyYXBwZXJPYmplY3QqPihjZWxsKTsKICAgICBCYXNl
Ojp2aXNpdENoaWxkcmVuKGNlbGwsIHZpc2l0b3IpOwpAQCAtMTMzLDYgKzEzNiw4IEBAIHZvaWQg
SlNBUElXcmFwcGVyT2JqZWN0Ojp2aXNpdENoaWxkcmVuKEoKICAgICAgICAgc2NhbkV4dGVybmFs
T2JqZWN0R3JhcGgodmlzaXRvci52bSgpLCB2aXNpdG9yLCB3cmFwcGVkT2JqZWN0KTsKIH0KIAor
REVGSU5FX0VYUE9SVF9WSVNJVF9DSElMRFJFTihKU0FQSVdyYXBwZXJPYmplY3QpOworCiB0ZW1w
bGF0ZSA8PgogSXNvU3Vic3BhY2UqIEpTQ2FsbGJhY2tPYmplY3Q8SlNBUElXcmFwcGVyT2JqZWN0
Pjo6c3Vic3BhY2VGb3JJbXBsKFZNJiB2bSwgU3Vic3BhY2VBY2Nlc3MgbW9kZSkKIHsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0LmNwcAkocmV2
aXNpb24gMjcyNzEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2Jq
ZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDYtMjAxNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDA2LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29w
eXJpZ2h0IChDKSAyMDA3IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CkBAIC00MSw2ICs0MSw5IEBAIHN0YXRpYyBKU0NfREVDTEFSRV9DVVNUT01fR0VUVEVS
KHN0YXRpY0YKIHN0YXRpYyBKU0NfREVDTEFSRV9DVVNUT01fR0VUVEVSKGNhbGxiYWNrR2V0dGVy
SlNHbG9iYWxPYmplY3RDYWxsYmFja09iamVjdCk7CiBzdGF0aWMgSlNDX0RFQ0xBUkVfQ1VTVE9N
X0dFVFRFUihzdGF0aWNGdW5jdGlvbkdldHRlckpTR2xvYmFsT2JqZWN0Q2FsbGJhY2tPYmplY3Qp
OwogCitERUZJTkVfVEVNUExBVEVfVklTSVRfQ0hJTERSRU4odGVtcGxhdGU8PiwgSlNDYWxsYmFj
a09iamVjdDxKU05vbkZpbmFsT2JqZWN0Pik7CitERUZJTkVfVEVNUExBVEVfVklTSVRfQ0hJTERS
RU4odGVtcGxhdGU8PiwgSlNDYWxsYmFja09iamVjdDxKU0dsb2JhbE9iamVjdD4pOworCiAvLyBE
ZWZpbmUgdGhlIHR3byB0eXBlcyBvZiBKU0NhbGxiYWNrT2JqZWN0cyB3ZSBzdXBwb3J0LgogdGVt
cGxhdGUgPD4gY29uc3QgQ2xhc3NJbmZvIEpTQ2FsbGJhY2tPYmplY3Q8SlNOb25GaW5hbE9iamVj
dD46OnNfaW5mbyA9IHsgIkNhbGxiYWNrT2JqZWN0IiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwg
bnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU0NhbGxiYWNrT2JqZWN0KSB9OwogdGVtcGxh
dGUgPD4gY29uc3QgQ2xhc3NJbmZvIEpTQ2FsbGJhY2tPYmplY3Q8SlNHbG9iYWxPYmplY3Q+Ojpz
X2luZm8gPSB7ICJDYWxsYmFja0dsb2JhbE9iamVjdCIsICZCYXNlOjpzX2luZm8sIG51bGxwdHIs
IG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNDYWxsYmFja09iamVjdCkgfTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdC5oCShyZXZpc2lv
biAyNzI3MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3Qu
aAkod29ya2luZyBjb3B5KQpAQCAtNjksNyArNjksMTAgQEAgcHVibGljOgogICAgICAgICBtX3By
aXZhdGVQcm9wZXJ0aWVzLT5kZWxldGVQcml2YXRlUHJvcGVydHkocHJvcGVydHlOYW1lKTsKICAg
ICB9CiAKLSAgICB2b2lkIHZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisgICAg
REVDTEFSRV9WSVNJVF9DSElMRFJFTjsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+
CisgICAgdm9pZCB2aXNpdENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiAgICAgewogICAgICAg
ICBKU1ByaXZhdGVQcm9wZXJ0eU1hcCogcHJvcGVydGllcyA9IG1fcHJpdmF0ZVByb3BlcnRpZXMu
Z2V0KCk7CiAgICAgICAgIGlmICghcHJvcGVydGllcykKQEAgLTEwMyw3ICsxMDYsOCBAQCBwdWJs
aWM6CiAgICAgICAgICAgICBtX3Byb3BlcnR5TWFwLnJlbW92ZShwcm9wZXJ0eU5hbWUuaW1wbCgp
KTsKICAgICAgICAgfQogCi0gICAgICAgIHZvaWQgdmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYg
dmlzaXRvcikKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KKyAgICAgICAgdm9p
ZCB2aXNpdENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiAgICAgICAgIHsKICAgICAgICAgICAg
IExvY2tIb2xkZXIgbG9ja2VyKG1fbG9jayk7CiAgICAgICAgICAgICBmb3IgKGF1dG8mIHBhaXIg
OiBtX3Byb3BlcnR5TWFwKSB7CkBAIC0yMTYsMTMgKzIyMCw3IEBAIHByaXZhdGU6CiAgICAgc3Rh
dGljIENhbGxEYXRhIGdldENvbnN0cnVjdERhdGEoSlNDZWxsKik7CiAgICAgc3RhdGljIENhbGxE
YXRhIGdldENhbGxEYXRhKEpTQ2VsbCopOwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJl
bihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQotICAgIHsKLSAgICAgICAgSlND
YWxsYmFja09iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0NhbGxiYWNrT2JqZWN0Kj4oY2Vs
bCk7Ci0gICAgICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoKHN0YXRpY19jYXN0PFBhcmVu
dCo+KHRoaXNPYmplY3QpKSwgSlNDYWxsYmFja09iamVjdDxQYXJlbnQ+OjppbmZvKCkpOwotICAg
ICAgICBQYXJlbnQ6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7Ci0gICAgICAg
IHRoaXNPYmplY3QtPm1fY2FsbGJhY2tPYmplY3REYXRhLT52aXNpdENoaWxkcmVuKHZpc2l0b3Ip
OwotICAgIH0KKyAgICBERUNMQVJFX1RFTVBMQVRFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgdm9p
ZCBpbml0KEpTR2xvYmFsT2JqZWN0Kik7CiAgCkBAIC0yNDUsNiArMjQzLDE2IEBAIHByaXZhdGU6
CiAgICAgY29uc3QgQ2xhc3NJbmZvKiBtX2NsYXNzSW5mbyB7IG51bGxwdHIgfTsKIH07CiAKK3Rl
bXBsYXRlIDxjbGFzcyBQYXJlbnQ+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBK
U0NhbGxiYWNrT2JqZWN0PFBhcmVudD46OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwg
VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBKU0NhbGxiYWNrT2JqZWN0KiB0aGlzT2JqZWN0ID0g
anNDYXN0PEpTQ2FsbGJhY2tPYmplY3QqPihjZWxsKTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lO
SEVSSVRTKChzdGF0aWNfY2FzdDxQYXJlbnQqPih0aGlzT2JqZWN0KSksIEpTQ2FsbGJhY2tPYmpl
Y3Q8UGFyZW50Pjo6aW5mbygpKTsKKyAgICBQYXJlbnQ6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVj
dCwgdmlzaXRvcik7CisgICAgdGhpc09iamVjdC0+bV9jYWxsYmFja09iamVjdERhdGEtPnZpc2l0
Q2hpbGRyZW4odmlzaXRvcik7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAvLyBpbmNsdWRl
IHRoZSBhY3R1YWwgdGVtcGxhdGUgY2xhc3MgaW1wbGVtZW50YXRpb24KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9BUEkvSlNNYW5hZ2VkVmFsdWUubW0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL0FQSS9KU01hbmFnZWRWYWx1ZS5tbQkocmV2aXNpb24gMjcyNzEwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU01hbmFnZWRWYWx1ZS5tbQkod29ya2luZyBj
b3B5KQpAQCAtNDIsNyArNDIsNyBAQAogY2xhc3MgSlNNYW5hZ2VkVmFsdWVIYW5kbGVPd25lciBm
aW5hbCA6IHB1YmxpYyBKU0M6OldlYWtIYW5kbGVPd25lciB7CiBwdWJsaWM6CiAgICAgdm9pZCBm
aW5hbGl6ZShKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0KSBmaW5hbDsK
LSAgICBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5r
bm93bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6U2xvdFZpc2l0b3ImLCBjb25zdCBjaGFyKiopIGZp
bmFsOworICAgIGJvb2wgaXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlND
OjpVbmtub3duPiwgdm9pZCogY29udGV4dCwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiwgY29u
c3QgY2hhcioqKSBmaW5hbDsKIH07CiAKIHN0YXRpYyBKU01hbmFnZWRWYWx1ZUhhbmRsZU93bmVy
JiBtYW5hZ2VkVmFsdWVIYW5kbGVPd25lcigpCkBAIC0xODAsNyArMTgwLDcgQEAgQGludGVyZmFj
ZSBKU01hbmFnZWRWYWx1ZSAoUHJpdmF0ZU1ldGhvZAogLSAodm9pZClkaXNjb25uZWN0VmFsdWU7
CiBAZW5kCiAKLWJvb2wgSlNNYW5hZ2VkVmFsdWVIYW5kbGVPd25lcjo6aXNSZWFjaGFibGVGcm9t
T3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCwgSlND
OjpTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikKK2Jvb2wgSlNNYW5h
Z2VkVmFsdWVIYW5kbGVPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5k
bGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9y
JiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQogewogICAgIGlmIChVTkxJS0VMWShyZWFz
b24pKQogICAgICAgICAqcmVhc29uID0gIkpTTWFuYWdlZFZhbHVlIGlzIG9wYXF1ZSByb290IjsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNNYXJraW5nQ29uc3RyYWludFByaXZh
dGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNNYXJraW5n
Q29uc3RyYWludFByaXZhdGUuY3BwCShyZXZpc2lvbiAyNzI3MTApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvQVBJL0pTTWFya2luZ0NvbnN0cmFpbnRQcml2YXRlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzYsNyArMzYsNyBAQCBuYW1lc3BhY2UgewogQXRvbWljPHVuc2lnbmVkPiBjb25zdHJh
aW50Q291bnRlcjsKIAogc3RydWN0IE1hcmtlciA6IEpTTWFya2VyIHsKLSAgICBTbG90VmlzaXRv
ciogdmlzaXRvcjsKKyAgICBBYnN0cmFjdFNsb3RWaXNpdG9yKiB2aXNpdG9yOwogfTsKIAogYm9v
bCBpc01hcmtlZChKU01hcmtlclJlZiBtYXJrZXJSZWYsIEpTT2JqZWN0UmVmIG9iamVjdFJlZikK
QEAgLTQ0LDcgKzQ0LDcgQEAgYm9vbCBpc01hcmtlZChKU01hcmtlclJlZiBtYXJrZXJSZWYsIEpT
TwogICAgIGlmICghb2JqZWN0UmVmKQogICAgICAgICByZXR1cm4gdHJ1ZTsgLy8gTnVsbCBpcyBh
biBpbW1vcnRhbCBvYmplY3QuCiAgICAgCi0gICAgcmV0dXJuIHN0YXRpY19jYXN0PE1hcmtlcio+
KG1hcmtlclJlZiktPnZpc2l0b3ItPnZtKCkuaGVhcC5pc01hcmtlZCh0b0pTKG9iamVjdFJlZikp
OworICAgIHJldHVybiBzdGF0aWNfY2FzdDxNYXJrZXIqPihtYXJrZXJSZWYpLT52aXNpdG9yLT5p
c01hcmtlZCh0b0pTKG9iamVjdFJlZikpOwogfQogCiB2b2lkIG1hcmsoSlNNYXJrZXJSZWYgbWFy
a2VyUmVmLCBKU09iamVjdFJlZiBvYmplY3RSZWYpCkBAIC03NCwxMSArNzQsMTEgQEAgdm9pZCBK
U0NvbnRleHRHcm91cEFkZE1hcmtpbmdDb25zdHJhaW50KAogICAgICAgICB0b0NTdHJpbmcoIkFt
YyIsIGNvbnN0cmFpbnRJbmRleCwgIigiLCBSYXdQb2ludGVyKGJpdHdpc2VfY2FzdDx2b2lkKj4o
Y29uc3RyYWludENhbGxiYWNrKSksICIpIiksCiAgICAgICAgIHRvQ1N0cmluZygiQVBJIE1hcmtp
bmcgQ29uc3RyYWludCAjIiwgY29uc3RyYWludEluZGV4LCAiICgiLCBSYXdQb2ludGVyKGJpdHdp
c2VfY2FzdDx2b2lkKj4oY29uc3RyYWludENhbGxiYWNrKSksICIsICIsIFJhd1BvaW50ZXIodXNl
ckRhdGEpLCAiKSIpLAogICAgICAgICBbY29uc3RyYWludENhbGxiYWNrLCB1c2VyRGF0YV0KLSAg
ICAgICAgKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvcikgeworICAgICAgICAoQWJzdHJhY3RTbG90
VmlzaXRvciYgdmlzaXRvcikgewogICAgICAgICAgICAgTWFya2VyIG1hcmtlcjsKICAgICAgICAg
ICAgIG1hcmtlci5Jc01hcmtlZCA9IGlzTWFya2VkOwogICAgICAgICAgICAgbWFya2VyLk1hcmsg
PSBtYXJrOwotICAgICAgICAgICAgbWFya2VyLnZpc2l0b3IgPSAmc2xvdFZpc2l0b3I7CisgICAg
ICAgICAgICBtYXJrZXIudmlzaXRvciA9ICZ2aXNpdG9yOwogICAgICAgICAgICAgCiAgICAgICAg
ICAgICBjb25zdHJhaW50Q2FsbGJhY2soJm1hcmtlciwgdXNlckRhdGEpOwogICAgICAgICB9LApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1ZpcnR1YWxNYWNoaW5lLm1tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWaXJ0dWFsTWFjaGluZS5tbQko
cmV2aXNpb24gMjcyNzEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1ZpcnR1YWxN
YWNoaW5lLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zMTUsNyArMzE1LDggQEAgKyAodm9pZClzZXRD
cmFzaE9uVk1DcmVhdGlvbjooQk9PTClzaG91bAogCiBAZW5kCiAKLXN0YXRpYyB2b2lkIHNjYW5F
eHRlcm5hbE9iamVjdEdyYXBoKEpTQzo6Vk0mIHZtLCBKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9y
LCB2b2lkKiByb290LCBib29sIGxvY2tBY3F1aXJlZCkKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0
b3I+CitzdGF0aWMgdm9pZCBzY2FuRXh0ZXJuYWxPYmplY3RHcmFwaChKU0M6OlZNJiB2bSwgVmlz
aXRvciYgdmlzaXRvciwgdm9pZCogcm9vdCwgYm9vbCBsb2NrQWNxdWlyZWQpCiB7CiAgICAgQGF1
dG9yZWxlYXNlcG9vbCB7CiAgICAgICAgIEpTVmlydHVhbE1hY2hpbmUgKnZpcnR1YWxNYWNoaW5l
ID0gW0pTVk1XcmFwcGVyQ2FjaGUgd3JhcHBlckZvckpTQ29udGV4dEdyb3VwUmVmOnRvUmVmKCZ2
bSldOwpAQCAtMzQ3LDEzICszNDgsMTcgQEAgc3RhdGljIHZvaWQgc2NhbkV4dGVybmFsT2JqZWN0
R3JhcGgoSlNDOgogICAgIH0KIH0KIAotdm9pZCBzY2FuRXh0ZXJuYWxPYmplY3RHcmFwaChKU0M6
OlZNJiB2bSwgSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvciwgdm9pZCogcm9vdCkKK3RlbXBsYXRl
PHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIHNjYW5FeHRlcm5hbE9iamVjdEdyYXBoKEpTQzo6Vk0m
IHZtLCBWaXNpdG9yJiB2aXNpdG9yLCB2b2lkKiByb290KQogewogICAgIGJvb2wgbG9ja0FjcXVp
cmVkID0gZmFsc2U7CiAgICAgc2NhbkV4dGVybmFsT2JqZWN0R3JhcGgodm0sIHZpc2l0b3IsIHJv
b3QsIGxvY2tBY3F1aXJlZCk7CiB9CiAKLXZvaWQgc2NhbkV4dGVybmFsUmVtZW1iZXJlZFNldChK
U0M6OlZNJiB2bSwgSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlIHZvaWQgc2Nh
bkV4dGVybmFsT2JqZWN0R3JhcGgoSlNDOjpWTSYsIEpTQzo6U2xvdFZpc2l0b3ImLCB2b2lkKik7
Cit0ZW1wbGF0ZSB2b2lkIHNjYW5FeHRlcm5hbE9iamVjdEdyYXBoKEpTQzo6Vk0mLCBKU0M6OkFi
c3RyYWN0U2xvdFZpc2l0b3ImLCB2b2lkKik7CisKK3ZvaWQgc2NhbkV4dGVybmFsUmVtZW1iZXJl
ZFNldChKU0M6OlZNJiB2bSwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewog
ICAgIEBhdXRvcmVsZWFzZXBvb2wgewogICAgICAgICBKU1ZpcnR1YWxNYWNoaW5lICp2aXJ0dWFs
TWFjaGluZSA9IFtKU1ZNV3JhcHBlckNhY2hlIHdyYXBwZXJGb3JKU0NvbnRleHRHcm91cFJlZjp0
b1JlZigmdm0pXTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWaXJ0dWFsTWFj
aGluZUludGVybmFsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9K
U1ZpcnR1YWxNYWNoaW5lSW50ZXJuYWwuaAkocmV2aXNpb24gMjcyNzEwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL0FQSS9KU1ZpcnR1YWxNYWNoaW5lSW50ZXJuYWwuaAkod29ya2luZyBjb3B5
KQpAQCAtMzIsNyArMzIsNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIGNsYXNzIFZNOwotY2xhc3Mg
U2xvdFZpc2l0b3I7CitjbGFzcyBBYnN0cmFjdFNsb3RWaXNpdG9yOwogfQogCiAjaWYgZGVmaW5l
ZChfX09CSkNfXykKQEAgLTU0LDggKzU0LDggQEAgSlNDb250ZXh0R3JvdXBSZWYgZ2V0R3JvdXBG
cm9tVmlydHVhbE1hYwogCiAjZW5kaWYgLy8gZGVmaW5lZChfX09CSkNfXykKIAotdm9pZCBzY2Fu
RXh0ZXJuYWxPYmplY3RHcmFwaChKU0M6OlZNJiwgSlNDOjpTbG90VmlzaXRvciYsIHZvaWQqIHJv
b3QpOwotdm9pZCBzY2FuRXh0ZXJuYWxSZW1lbWJlcmVkU2V0KEpTQzo6Vk0mLCBKU0M6OlNsb3RW
aXNpdG9yJik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIHNjYW5FeHRlcm5hbE9i
amVjdEdyYXBoKEpTQzo6Vk0mLCBWaXNpdG9yJiwgdm9pZCogcm9vdCk7Cit2b2lkIHNjYW5FeHRl
cm5hbFJlbWVtYmVyZWRTZXQoSlNDOjpWTSYsIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpOwog
CiAjZW5kaWYgLy8gSlNDX09CSkNfQVBJX0VOQUJMRUQKIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL0FQSS9NYXJrZWRKU1ZhbHVlUmVmQXJyYXkuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9BUEkvTWFya2VkSlNWYWx1ZVJlZkFycmF5LmNwcAkocmV2aXNpb24g
MjcyNzEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9NYXJrZWRKU1ZhbHVlUmVmQXJy
YXkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Niw3ICs0Niw3IEBAIE1hcmtlZEpTVmFsdWVSZWZB
cnJheTo6fk1hcmtlZEpTVmFsdWVSZWYKICAgICAgICAgcmVtb3ZlKCk7CiB9CiAKLXZvaWQgTWFy
a2VkSlNWYWx1ZVJlZkFycmF5Ojp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYgdmlzaXRvcikK
K3ZvaWQgTWFya2VkSlNWYWx1ZVJlZkFycmF5Ojp2aXNpdEFnZ3JlZ2F0ZShBYnN0cmFjdFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTVmFsdWVSZWYqIGJ1ZmZlciA9IGRhdGEoKTsKICAg
ICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gMDsgaW5kZXggPCBtX3NpemU7ICsraW5kZXgpIHsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvTWFya2VkSlNWYWx1ZVJlZkFycmF5LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9NYXJrZWRKU1ZhbHVlUmVmQXJy
YXkuaAkocmV2aXNpb24gMjcyNzEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9NYXJr
ZWRKU1ZhbHVlUmVmQXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtNjIsNyArNjIsNyBAQCBwdWJs
aWM6CiAgICAgICAgIHJldHVybiBtX2lubGluZUJ1ZmZlcjsKICAgICB9CiAKLSAgICB2b2lkIHZp
c2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJik7CisgICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShBYnN0
cmFjdFNsb3RWaXNpdG9yJik7CiAKIHByaXZhdGU6CiAgICAgdW5zaWduZWQgbV9zaXplOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQVBJV3JhcHBlckdsb2JhbE9iamVj
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQVBJ
V3JhcHBlckdsb2JhbE9iamVjdC5jcHAJKHJldmlzaW9uIDI3MjcxMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0FQSVdyYXBwZXJHbG9iYWxPYmplY3QuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC01OSw2ICs1OSw4IEBAIHN0YXRpYyBKU0NfREVDTEFSRV9IT1NUX0ZVTkNUSU9O
KGNvbnN0cnUKIHN0YXRpYyBKU0NfREVDTEFSRV9DVVNUT01fR0VUVEVSKGNhbGxiYWNrR2V0dGVy
SlNBUElXcmFwcGVyR2xvYmFsT2JqZWN0Q2FsbGJhY2tPYmplY3QpOwogc3RhdGljIEpTQ19ERUNM
QVJFX0NVU1RPTV9HRVRURVIoc3RhdGljRnVuY3Rpb25HZXR0ZXJKU0FQSVdyYXBwZXJHbG9iYWxP
YmplY3RDYWxsYmFja09iamVjdCk7CiAKK0RFRklORV9URU1QTEFURV9WSVNJVF9DSElMRFJFTih0
ZW1wbGF0ZTw+LCBKU0NhbGxiYWNrT2JqZWN0PEpTQVBJV3JhcHBlckdsb2JhbE9iamVjdD4pOwor
CiB0ZW1wbGF0ZSA8PiBjb25zdCBDbGFzc0luZm8gSlNDYWxsYmFja09iamVjdDxKU0FQSVdyYXBw
ZXJHbG9iYWxPYmplY3Q+OjpzX2luZm8gPSB7ICJKU0FQSVdyYXBwZXJHbG9iYWxPYmplY3QiLCAm
QmFzZTo6c19pbmZvLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTQ2Fs
bGJhY2tPYmplY3QpIH07CiB0ZW1wbGF0ZTw+IGNvbnN0IGJvb2wgSlNDYWxsYmFja09iamVjdDxK
U0FQSVdyYXBwZXJHbG9iYWxPYmplY3Q+OjpuZWVkc0Rlc3RydWN0aW9uID0gdHJ1ZTsKIApAQCAt
MTQ0LDkgKzE0Niw0IEBAIHZvaWQgSlNBUElXcmFwcGVyR2xvYmFsT2JqZWN0OjpmaW5pc2hDcmUK
ICAgICBXZWFrU2V0OjphbGxvY2F0ZSh0aGlzLCBqc0FQSVdyYXBwZXJHbG9iYWxPYmplY3RIYW5k
bGVPd25lcigpLCAwKTsgLy8gQmFsYW5jZWQgaW4gSlNBUElXcmFwcGVyR2xvYmFsT2JqZWN0SGFu
ZGxlT3duZXI6OmZpbmFsaXplLgogfQogCi12b2lkIEpTQVBJV3JhcHBlckdsb2JhbE9iamVjdDo6
dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCi17
Ci0gICAgQmFzZTo6dmlzaXRDaGlsZHJlbihjZWxsLCB2aXNpdG9yKTsKLX0KLQogfSAvLyBuYW1l
c3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNBUElXcmFw
cGVyR2xvYmFsT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQ
SS9nbGliL0pTQVBJV3JhcHBlckdsb2JhbE9iamVjdC5oCShyZXZpc2lvbiAyNzI3MTApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNBUElXcmFwcGVyR2xvYmFsT2JqZWN0LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTM5LDcgKzM5LDYgQEAgcHVibGljOgogICAgIHN0YXRpYyB2b2lk
IHN1YnNwYWNlRm9yKFZNJikgeyBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9CiAKICAg
ICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJl
bihKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJik7CiAKICAgICBKU0NHTGliV3JhcHBlck9iamVj
dCogd3JhcHBlZE9iamVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fd3JhcHBlZE9iamVjdDsgfQogICAg
IHZvaWQgc2V0V3JhcHBlZE9iamVjdChKU0NHTGliV3JhcHBlck9iamVjdCogd3JhcHBlZE9iamVj
dCkgeyBtX3dyYXBwZWRPYmplY3QgPSB3cmFwcGVkT2JqZWN0OyB9CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNBUElXcmFwcGVyT2JqZWN0R0xpYi5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQVBJV3JhcHBlck9iamVjdEdM
aWIuY3BwCShyZXZpc2lvbiAyNzI3MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2ds
aWIvSlNBUElXcmFwcGVyT2JqZWN0R0xpYi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3
LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJKU0FQSVdyYXBwZXJPYmplY3Qu
aCIKIAorI2luY2x1ZGUgIkFic3RyYWN0U2xvdFZpc2l0b3IuaCIKICNpbmNsdWRlICJKU0NHTGli
V3JhcHBlck9iamVjdC5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJKU0Nh
bGxiYWNrT2JqZWN0LmgiCkBAIC0zNiw3ICszNyw3IEBACiBjbGFzcyBKU0FQSVdyYXBwZXJPYmpl
Y3RIYW5kbGVPd25lciBmaW5hbCA6IHB1YmxpYyBKU0M6OldlYWtIYW5kbGVPd25lciB7CiBwdWJs
aWM6CiAgICAgdm9pZCBmaW5hbGl6ZShKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKikg
ZmluYWw7Ci0gICAgYm9vbCBpc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxK
U0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0LCBKU0M6OlNsb3RWaXNpdG9yJiwgY29uc3QgY2hh
cioqKSBmaW5hbDsKKyAgICBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFu
ZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRv
ciYsIGNvbnN0IGNoYXIqKikgZmluYWw7CiB9OwogCiBzdGF0aWMgSlNBUElXcmFwcGVyT2JqZWN0
SGFuZGxlT3duZXIqIGpzQVBJV3JhcHBlck9iamVjdEhhbmRsZU93bmVyKCkKQEAgLTU1LDcgKzU2
LDcgQEAgdm9pZCBKU0FQSVdyYXBwZXJPYmplY3RIYW5kbGVPd25lcjo6ZmluYQogICAgIEpTQzo6
V2Vha1NldDo6ZGVhbGxvY2F0ZShKU0M6OldlYWtJbXBsOjphc1dlYWtJbXBsKGhhbmRsZS5zbG90
KCkpKTsKIH0KIAotYm9vbCBKU0FQSVdyYXBwZXJPYmplY3RIYW5kbGVPd25lcjo6aXNSZWFjaGFi
bGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQq
LCBKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiopCitib29sIEpTQVBJV3Jh
cHBlck9iamVjdEhhbmRsZU93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6Okhh
bmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRv
ciYgdmlzaXRvciwgY29uc3QgY2hhcioqKQogewogICAgIEpTQzo6SlNBUElXcmFwcGVyT2JqZWN0
KiB3cmFwcGVyT2JqZWN0ID0gSlNDOjpqc0Nhc3Q8SlNDOjpKU0FQSVdyYXBwZXJPYmplY3QqPiho
YW5kbGUuZ2V0KCkuYXNDZWxsKCkpOwogICAgIC8vIFdlIHVzZSB0aGUgSlNHbG9iYWxPYmplY3Qg
d2hlbiBwcm9jZXNzaW5nIHdlYWsgaGFuZGxlcyB0byBwcmV2ZW50IHRoZSBzaXR1YXRpb24gd2hl
cmUgdXNpbmcKQEAgLTcyLDYgKzczLDggQEAgc3RhdGljIEpTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJ
T04oY29uc3RydQogc3RhdGljIEpTQ19ERUNMQVJFX0NVU1RPTV9HRVRURVIoY2FsbGJhY2tHZXR0
ZXJKU0FQSVdyYXBwZXJPYmplY3RDYWxsYmFja09iamVjdCk7CiBzdGF0aWMgSlNDX0RFQ0xBUkVf
Q1VTVE9NX0dFVFRFUihzdGF0aWNGdW5jdGlvbkdldHRlckpTQVBJV3JhcHBlck9iamVjdENhbGxi
YWNrT2JqZWN0KTsKIAorREVGSU5FX1RFTVBMQVRFX1ZJU0lUX0NISUxEUkVOKHRlbXBsYXRlPD4s
IEpTQ2FsbGJhY2tPYmplY3Q8SlNBUElXcmFwcGVyT2JqZWN0Pik7CisKIHRlbXBsYXRlIDw+IGNv
bnN0IENsYXNzSW5mbyBKU0NhbGxiYWNrT2JqZWN0PEpTQVBJV3JhcHBlck9iamVjdD46OnNfaW5m
byA9IHsgIkpTQVBJV3JhcHBlck9iamVjdCIsICZCYXNlOjpzX2luZm8sIG51bGxwdHIsIG51bGxw
dHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNDYWxsYmFja09iamVjdCkgfTsKIHRlbXBsYXRlPD4g
Y29uc3QgYm9vbCBKU0NhbGxiYWNrT2JqZWN0PEpTQVBJV3JhcHBlck9iamVjdD46Om5lZWRzRGVz
dHJ1Y3Rpb24gPSB0cnVlOwogCkBAIC0xNTUsOSArMTU4LDEyIEBAIHZvaWQgSlNBUElXcmFwcGVy
T2JqZWN0OjpzZXRXcmFwcGVkT2JqZWMKICAgICBtX3dyYXBwZWRPYmplY3QgPSB3cmFwcGVkT2Jq
ZWN0OwogfQogCi12b2lkIEpTQVBJV3JhcHBlck9iamVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwq
IGNlbGwsIEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNp
dG9yPgordm9pZCBKU0FQSVdyYXBwZXJPYmplY3Q6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCog
Y2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKGNlbGws
IHZpc2l0b3IpOwogfQogCitERUZJTkVfRVhQT1JUX1ZJU0lUX0NISUxEUkVOKEpTQVBJV3JhcHBl
ck9iamVjdCk7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oJKHJldmlzaW9uIDI3MjcxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0x
MTU4LDYgKzExNTgsNyBAQAogCQk2NUI4MzkyRTFCQUNBRDM2MDA0NEU4MjQgLyogQ2FjaGVkUmVj
b3ZlcnkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1
QjgzOTJDMUJBQ0E5MkEwMDQ0RTgyNCAvKiBDYWNoZWRSZWNvdmVyeS5oICovOyB9OwogCQk2QTM4
Q0ZBQTFFMzJCNUFCMDA2MDIwNkYgLyogQXN5bmNTdGFja1RyYWNlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2QTM4Q0ZBODFFMzJCNThCMDA2MDIwNkYg
LyogQXN5bmNTdGFja1RyYWNlLmggKi87IH07CiAJCTZBRDJDQjREMTlCOTE0MDEwMDA2NTcxOSAv
KiBEZWJ1Z2dlckV2YWxFbmFibGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA2QUQyQ0I0QzE5QjkxNDAxMDAwNjU3MTkgLyogRGVidWdnZXJFdmFsRW5h
Ymxlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJ
CTZCQ0NFQzA0MjVEMUZBMjcwMDBGMzkxRCAvKiBWZXJpZmllclNsb3RWaXNpdG9ySW5saW5lcy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkJDQ0VDMDMy
NUQxRkEyNzAwMEYzOTFEIC8qIFZlcmlmaWVyU2xvdFZpc2l0b3JJbmxpbmVzLmggKi87IH07CiAJ
CTcwMTEzRDRDMUE4REIwOTMwMDM4NDhDNCAvKiBJdGVyYXRvck9wZXJhdGlvbnMuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcwMTEzRDRBMUE4REIwOTMw
MDM4NDhDNCAvKiBJdGVyYXRvck9wZXJhdGlvbnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3MDEzQ0E4QzFCNDkxQTk0MDBDQUU2MTMgLyogSlNN
aWNyb3Rhc2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDcwMTNDQThBMUI0OTFBOTQwMENBRTYxMyAvKiBKU01pY3JvdGFzay5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTcwNUI0MUFDMUE2RTUwMUUwMDcx
Njc1NyAvKiBTeW1ib2wuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDcwNUI0MUE0MUE2RTUwMUUwMDcxNjc1NyAvKiBTeW1ib2wuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMTkxNiw2ICsxOTE3LDcgQEAK
IAkJRTNGRjc1MzMxRDlDRUExODAwQzdFMTZEIC8qIERPTUpJVEdldHRlclNldHRlci5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTNGRjc1MkYxRDlDRUEx
MjAwQzdFMTZEIC8qIERPTUpJVEdldHRlclNldHRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUU0OURDMTZDMTJFRjI5NEUwMDE4NEExRiAvKiBT
b3VyY2VQcm92aWRlckNhY2hlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBFNDlEQzE1MTEyRUYyNzIyMDAxODRBMUYgLyogU291cmNlUHJvdmlkZXJDYWNo
ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUU0
OURDMTZEMTJFRjI5NTMwMDE4NEExRiAvKiBTb3VyY2VQcm92aWRlckNhY2hlSXRlbS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQ5REMxNDkxMkVGMjYx
QTAwMTg0QTFGIC8qIFNvdXJjZVByb3ZpZGVyQ2FjaGVJdGVtLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJRkUwNDE1NTMyNTJFQzA3MzAwOTFFQjVE
IC8qIFNsb3RWaXNpdG9yTWFjcm9zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBGRTA0MTU1MjI1MkVDMDczMDA5MUVCNUQgLyogU2xvdFZpc2l0b3JNYWNy
b3MuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlG
RTA1RkFGRDFGRTRDRURBMDAwOTMyMzAgLyogRGVwcmVjYXRlZEluc3BlY3RvclZhbHVlcy5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5OTJENkExMTFG
QkQ0OTFEMDAwMjQ1RjQgLyogRGVwcmVjYXRlZEluc3BlY3RvclZhbHVlcy5jcHAgKi87IH07CiAJ
CUZFMDg2QkNBMjEyM0RFRkIwMDNGMjkyOSAvKiBFbnRyeUZyYW1lLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTA4NkJDOTIxMjNERUZBMDAzRjI5Mjkg
LyogRW50cnlGcmFtZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCUZFMEQ0QTA2MUFCOEREMEEwMDJGNTRCRiAvKiBFeGVjdXRpb25UaW1lTGltaXRU
ZXN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZF
MEQ0QTA0MUFCOEREMEEwMDJGNTRCRiAvKiBFeGVjdXRpb25UaW1lTGltaXRUZXN0LmNwcCAqLzsg
fTsKQEAgLTE5MzgsNiArMTk0MCw3IEBACiAJCUZFMUUyQzNGMjI0MERENTgwMEY2QjcyOSAvKiBN
YWNyb0Fzc2VtYmxlckFSTTY0RS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRkUxRTJDM0UyMjQwRDMwQjAwRjZCNzI5IC8qIE1hY3JvQXNzZW1ibGVyQVJN
NjRFLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
RkUxRTJDNDAyMjQwREQ2MjAwRjZCNzI5IC8qIEFSTTY0RUFzc2VtYmxlci5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUxRTJDM0QyMjQwRDJGNjAwRjZC
NzI5IC8qIEFSTTY0RUFzc2VtYmxlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCUZFMjBDRTlFMTVGMDRBOTUwMERGMzQzMCAvKiBMTEludENMb29w
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTIwQ0U5
QzE1RjA0QTk1MDBERjM0MzAgLyogTExJbnRDTG9vcC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUZFMjg3RDAyMjUyRkIyRTgwMEQ3MjNGOSAvKiBW
ZXJpZmllclNsb3RWaXNpdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBGRTI4N0QwMTI1MkZCMkU4MDBENzIzRjkgLyogVmVyaWZpZXJTbG90VmlzaXRv
ci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUZF
MkE4NzYwMUYwMjM4MTYwMEVCMzFCMiAvKiBNaW5pbXVtUmVzZXJ2ZWRab25lU2l6ZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUyQTg3NUYxRjAyMzgx
NjAwRUIzMUIyIC8qIE1pbmltdW1SZXNlcnZlZFpvbmVTaXplLmggKi87IH07CiAJCUZFMzAyMkQz
MUUzRDczQTUwMEJBQzQ5MyAvKiBTaWdpbGxDcmFzaEFuYWx5emVyLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTMwMjJEMTFFM0Q3Mzk2MDBCQUM0OTMg
LyogU2lnaWxsQ3Jhc2hBbmFseXplci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCUZFMzAyMkQ3MUU0Mjg1NzMwMEJBQzQ5MyAvKiBWTUluc3BlY3Rv
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUzMDIy
RDUxRTQyODU2NzAwQkFDNDkzIC8qIFZNSW5zcGVjdG9yLmggKi87IH07CkBAIC0xOTc1LDYgKzE5
NzgsOCBAQAogCQlGRTgwQzE5NzFENzc1Q0REMDA4NTEwQzAgLyogQ2F0Y2hTY29wZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkU4MEMxOTYxRDc3NUIy
NzAwODUxMEMwIC8qIENhdGNoU2NvcGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQlGRThERTU0QjIzQUMxREFEMDA1QzkxNDIgLyogQ2FjaGVhYmxl
SWRlbnRpZmllci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRkU4REU1NEEyM0FDMURBRDAwNUM5MTQyIC8qIENhY2hlYWJsZUlkZW50aWZpZXIuaCAqLzsg
fTsKIAkJRkU4REU1NEQyM0FDMUU4NjAwNUM5MTQyIC8qIENhY2hlYWJsZUlkZW50aWZpZXJJbmxp
bmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRThE
RTU0QzIzQUMxRTg2MDA1QzkxNDIgLyogQ2FjaGVhYmxlSWRlbnRpZmllcklubGluZXMuaCAqLzsg
fTsKKwkJRkU5MTJCNEYyNTMxMTkzMzAwRkFCRERGIC8qIEFic3RyYWN0U2xvdFZpc2l0b3IuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFOTEyQjRFMjUz
MTE5MzMwMEZBQkRERiAvKiBBYnN0cmFjdFNsb3RWaXNpdG9yLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJRkU5MTJCNTEyNTMxMUFEMTAwRkFCRERG
IC8qIEFic3RyYWN0U2xvdFZpc2l0b3JJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTkxMkI1MDI1MzExQUQxMDBGQUJEREYgLyogQWJzdHJh
Y3RTbG90VmlzaXRvcklubGluZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQlGRTk5QjI0OTFDMjRDM0QzMDBDODIxNTkgLyogSklUTmVnR2VuZXJh
dG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTk5
QjI0ODFDMjRCNkQzMDBDODIxNTkgLyogSklUTmVnR2VuZXJhdG9yLmggKi87IH07CiAJCUZFQTA4
NjIwMTgyQjdBMDQwMEY2RDg1MSAvKiBCcmVha3BvaW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRUEwODYxRTE4MkI3QTA0MDBGNkQ4NTEgLyogQnJl
YWtwb2ludC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCUZFQTA4NjIxMTgyQjdBMDQwMEY2RDg1MSAvKiBEZWJ1Z2dlclByaW1pdGl2ZXMuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFQTA4NjFGMTgyQjdB
MDQwMEY2RDg1MSAvKiBEZWJ1Z2dlclByaW1pdGl2ZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMzk4Nyw2ICszOTkyLDcgQEAKIAkJNkEzOENG
QTgxRTMyQjU4QjAwNjAyMDZGIC8qIEFzeW5jU3RhY2tUcmFjZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBBc3luY1N0YWNrVHJhY2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNkFEMkNCNEMxOUI5MTQwMTAwMDY1NzE5IC8qIERlYnVnZ2VyRXZhbEVuYWJsZXIu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGVidWdnZXJFdmFsRW5hYmxlci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2QkE5M0M5NTkwNDg0QzVCQUQ5MzE2RUEg
LyogSlNTY3JpcHRGZXRjaGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpT
U2NyaXB0RmV0Y2hlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk2QkNDRUMwMzI1
RDFGQTI3MDAwRjM5MUQgLyogVmVyaWZpZXJTbG90VmlzaXRvcklubGluZXMuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVmVyaWZpZXJTbG90VmlzaXRvcklubGluZXMuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzAxMTNENDkxQThEQjA5MzAwMzg0OEM0IC8qIEl0
ZXJhdG9yT3BlcmF0aW9ucy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBJdGVyYXRvck9wZXJhdGlvbnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3
MDExM0Q0QTFBOERCMDkzMDAzODQ4QzQgLyogSXRlcmF0b3JPcGVyYXRpb25zLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEl0ZXJhdG9yT3BlcmF0aW9ucy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk3MDEzQ0E4OTFCNDkxQTk0MDBDQUU2MTMgLyogSlNNaWNyb3Rh
c2suY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNNaWNyb3Rhc2su
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNTIyMCw2ICs1MjI2LDcgQEAKIAkJ
RjY5MkE4ODcwMjU1NTk3RDAxRkY2MEY3IC8qIEpTQ0pTVmFsdWUuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNDSlNWYWx1ZS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgfTsKIAkJRjczOTI2OTE4REM2
NDMzMEFGQ0RGMEQ3IC8qIEpTU291cmNlQ29kZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBKU1NvdXJjZUNvZGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlGRTAwMjYyMjIzRjNBRjMzMDAzQTM1OEYgLyogV2ViQXNzZW1ibHkuYXNtICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5hc20u
YXNtOyBuYW1lID0gV2ViQXNzZW1ibHkuYXNtOyBwYXRoID0gbGxpbnQvV2ViQXNzZW1ibHkuYXNt
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRTA0MTU1MjI1MkVDMDczMDA5MUVCNUQg
LyogU2xvdFZpc2l0b3JNYWNyb3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
U2xvdFZpc2l0b3JNYWNyb3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkUwODZC
QzkyMTIzREVGQTAwM0YyOTI5IC8qIEVudHJ5RnJhbWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gRW50cnlGcmFtZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlG
RTBENEEwNDFBQjhERDBBMDAyRjU0QkYgLyogRXhlY3V0aW9uVGltZUxpbWl0VGVzdC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBFeGVjdXRpb25UaW1lTGltaXRUZXN0
LmNwcDsgcGF0aCA9IEFQSS90ZXN0cy9FeGVjdXRpb25UaW1lTGltaXRUZXN0LmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkUwRDRBMDUxQUI4REQwQTAwMkY1NEJGIC8qIEV4ZWN1
dGlvblRpbWVMaW1pdFRlc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRXhl
Y3V0aW9uVGltZUxpbWl0VGVzdC5oOyBwYXRoID0gQVBJL3Rlc3RzL0V4ZWN1dGlvblRpbWVMaW1p
dFRlc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTUyMzMsNiArNTI0MCw3IEBA
CiAJCUZFMTIyMDI1MUJFN0Y1NjQwMDM5RTZGMiAvKiBKSVRBZGRHZW5lcmF0b3IuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSklUQWRkR2VuZXJhdG9yLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkUxMjIwMjYxQkU3RjU2NDAwMzlFNkYyIC8qIEpJ
VEFkZEdlbmVyYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKSVRBZGRH
ZW5lcmF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkUxNDA5MDYyMDU2RjNG
RTAwQ0ZFMzE4IC8qIE5hdGl2ZUZ1bmN0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IE5hdGl2ZUZ1bmN0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZF
MTc4Q0MzMjU1RjIwNTUwMEZGRDY3NyAvKiBBYnN0cmFjdFNsb3RWaXNpdG9yLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEFic3RyYWN0U2xvdFZpc2l0b3IuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTE4NzlGRjFCRkJDNzNDMDAzOEJCQ0EgLyog
SklUTXVsR2VuZXJhdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEpJVE11bEdlbmVyYXRvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFMTg3
QTAwMUJGQkM3M0MwMDM4QkJDQSAvKiBKSVRNdWxHZW5lcmF0b3IuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gSklUTXVsR2VuZXJhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUZFMTg3QTBBMUMwMjI5MjMwMDM4QkJDQSAvKiBKSVREaXZHZW5lcmF0b3IuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSklURGl2R2VuZXJhdG9yLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTUyNTQsNyArNTI2Miw5IEBACiAJCUZF
MUUyQzNFMjI0MEQzMEIwMEY2QjcyOSAvKiBNYWNyb0Fzc2VtYmxlckFSTTY0RS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNYWNyb0Fzc2VtYmxlckFSTTY0RS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlGRTIwQ0U5QjE1RjA0QTk1MDBERjM0MzAgLyogTExJbnRD
TG9vcC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBMTEludENMb29w
LmNwcDsgcGF0aCA9IGxsaW50L0xMSW50Q0xvb3AuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlGRTIwQ0U5QzE1RjA0QTk1MDBERjM0MzAgLyogTExJbnRDTG9vcC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBMTEludENMb29wLmg7IHBhdGggPSBsbGludC9MTElu
dENMb29wLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZFMjg3RDAxMjUyRkIyRTgw
MEQ3MjNGOSAvKiBWZXJpZmllclNsb3RWaXNpdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFZlcmlmaWVyU2xvdFZpc2l0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJRkUyQTg3NUYxRjAyMzgxNjAwRUIzMUIyIC8qIE1pbmltdW1SZXNlcnZlZFpvbmVTaXpl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IE1pbmltdW1SZXNlcnZlZFpvbmVTaXplLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUZFMkJENjZFMjVDMERDODIwMDk5OUQzQiAvKiBWZXJpZmllclNs
b3RWaXNpdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFZlcmlm
aWVyU2xvdFZpc2l0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTJFNkE3
QTFENkVBNUZFMDA2MEY4OTYgLyogVGhyb3dTY29wZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBUaHJvd1Njb3BlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJRkUzMDIyRDAxRTNENzM5NjAwQkFDNDkzIC8qIFNpZ2lsbENyYXNoQW5hbHl6ZXIuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2lnaWxsQ3Jhc2hBbmFseXpl
ci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFMzAyMkQxMUUzRDczOTYwMEJB
QzQ5MyAvKiBTaWdpbGxDcmFzaEFuYWx5emVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFNpZ2lsbENyYXNoQW5hbHl6ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTUzMjcsNiArNTMzNyw4IEBACiAJCUZFOERFNTRDMjNBQzFFODYwMDVDOTE0MiAvKiBDYWNo
ZWFibGVJZGVudGlmaWVySW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBDYWNoZWFibGVJZGVudGlmaWVySW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlGRThERTU0RTIzQUMzQThFMDA1QzkxNDIgLyogQ2FjaGVhYmxlSWRlbnRpZmllci5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBDYWNoZWFibGVJZGVudGlmaWVyLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJRkU5MEJCM0ExQjdDRjY0RTAwNkIzRjAzIC8qIFZNSW5saW5lcy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBWTUlubGluZXMuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkU5MTJCNEUyNTMxMTkzMzAwRkFCRERGIC8qIEFic3RyYWN0
U2xvdFZpc2l0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQWJzdHJhY3RT
bG90VmlzaXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRTkxMkI1MDI1MzEx
QUQxMDBGQUJEREYgLyogQWJzdHJhY3RTbG90VmlzaXRvcklubGluZXMuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gQWJzdHJhY3RTbG90VmlzaXRvcklubGluZXMuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkU5OEI1QjYxQkI5QUUxMTAwNzNFN0E2IC8qIEpJVFN1
YkdlbmVyYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKSVRTdWJHZW5l
cmF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkU5OUIyNDcxQzI0QjZEMzAw
QzgyMTU5IC8qIEpJVE5lZ0dlbmVyYXRvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBKSVROZWdHZW5lcmF0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlGRTk5QjI0ODFDMjRCNkQzMDBDODIxNTkgLyogSklUTmVnR2VuZXJhdG9yLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpJVE5lZ0dlbmVyYXRvci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtNjI3Niw2ICs2Mjg4LDkgQEAKIAkJMTQyRTMxMkExMzRGRjBB
NjAwQUZBREI1IC8qIGhlYXAgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVu
ID0gKAorCQkJCUZFMTc4Q0MzMjU1RjIwNTUwMEZGRDY3NyAvKiBBYnN0cmFjdFNsb3RWaXNpdG9y
LmNwcCAqLywKKwkJCQlGRTkxMkI0RTI1MzExOTMzMDBGQUJEREYgLyogQWJzdHJhY3RTbG90Vmlz
aXRvci5oICovLAorCQkJCUZFOTEyQjUwMjUzMTFBRDEwMEZBQkRERiAvKiBBYnN0cmFjdFNsb3RW
aXNpdG9ySW5saW5lcy5oICovLAogCQkJCTBGRUMzQzUwMUYzM0E0MTYwMEY1OUI2QyAvKiBBbGln
bmVkTWVtb3J5QWxsb2NhdG9yLmNwcCAqLywKIAkJCQkwRkVDM0M1MTFGMzNBNDE2MDBGNTlCNkMg
LyogQWxpZ25lZE1lbW9yeUFsbG9jYXRvci5oICovLAogCQkJCTBGQTc2MjBBMURCOTU5RjYwMEI3
QTJGRCAvKiBBbGxvY2F0aW5nU2NvcGUuaCAqLywKQEAgLTY0MzIsNiArNjQ0Nyw3IEBACiAJCQkJ
QzIyNTQ5NDIxNUY3REJBQTAwNjVFODk4IC8qIFNsb3RWaXNpdG9yLmNwcCAqLywKIAkJCQkxNEJB
NzhGMDEzQUFCODhGMDA1QjdDMkMgLyogU2xvdFZpc2l0b3IuaCAqLywKIAkJCQkwRkNCNDA4NTE1
QzBBM0MzMDA0ODkzMkIgLyogU2xvdFZpc2l0b3JJbmxpbmVzLmggKi8sCisJCQkJRkUwNDE1NTIy
NTJFQzA3MzAwOTFFQjVEIC8qIFNsb3RWaXNpdG9yTWFjcm9zLmggKi8sCiAJCQkJMEZERTg3RkEx
REZFNkU1MDAwNjRDMzkwIC8qIFNwYWNlVGltZU11dGF0b3JTY2hlZHVsZXIuY3BwICovLAogCQkJ
CTBGREU4N0ZCMURGRTZFNTAwMDY0QzM5MCAvKiBTcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyLmgg
Ki8sCiAJCQkJMEY0RjgyODkxRTMxQjk3MTAwNzUxODRDIC8qIFN0b2NoYXN0aWNTcGFjZVRpbWVN
dXRhdG9yU2NoZWR1bGVyLmNwcCAqLywKQEAgLTY0NDksNiArNjQ2NSw5IEBACiAJCQkJMEYxRkIz
OEExRTE3M0E2MjAwQTlCRTUwIC8qIFN5bmNocm9ub3VzU3RvcFRoZVdvcmxkTXV0YXRvclNjaGVk
dWxlci5jcHAgKi8sCiAJCQkJMEYxRkIzOEIxRTE3M0E2MjAwQTlCRTUwIC8qIFN5bmNocm9ub3Vz
U3RvcFRoZVdvcmxkTXV0YXRvclNjaGVkdWxlci5oICovLAogCQkJCTE0MTQ0OENDMTNBMTc4Mzcw
MEY1QkExQSAvKiBUaW55Qmxvb21GaWx0ZXIuaCAqLywKKwkJCQlGRTJCRDY2RTI1QzBEQzgyMDA5
OTlEM0IgLyogVmVyaWZpZXJTbG90VmlzaXRvci5jcHAgKi8sCisJCQkJRkUyODdEMDEyNTJGQjJF
ODAwRDcyM0Y5IC8qIFZlcmlmaWVyU2xvdFZpc2l0b3IuaCAqLywKKwkJCQk2QkNDRUMwMzI1RDFG
QTI3MDAwRjM5MUQgLyogVmVyaWZpZXJTbG90VmlzaXRvcklubGluZXMuaCAqLywKIAkJCQkwRjRE
OEM3MjFGQzdBOTczMDAxRDMyQUMgLyogVmlzaXRDb3VudGVyLmggKi8sCiAJCQkJMEY5NTJBOUYx
REY3ODYwNzAwRTA2RkJEIC8qIFZpc2l0UmFjZUtleS5jcHAgKi8sCiAJCQkJMEY5NTJBQTAxREY3
ODYwNzAwRTA2RkJEIC8qIFZpc2l0UmFjZUtleS5oICovLApAQCAtOTI5MCw2ICs5MzA5LDcgQEAK
IAkJCQkxNDdCODNBQzBFNkRCOEM5MDA0Nzc1QTQgLyogQmF0Y2hlZFRyYW5zaXRpb25PcHRpbWl6
ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUUzNUU4OUZEMjVDNTBGODcwMDcxRUUxRSAvKiBCaWdJ
bnQ2NEFycmF5LmggaW4gSGVhZGVycyAqLywKIAkJCQk4Njk3NkU1RjFGQTNFOEJDMDBFN0M0RTEg
LyogQmlnSW50Q29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJCUZFMDQxNTUzMjUyRUMw
NzMwMDkxRUI1RCAvKiBTbG90VmlzaXRvck1hY3Jvcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODY2
NzM5RDIxM0JGREU3MTAwMjNEODdDIC8qIEJpZ0ludGVnZXIuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTg2MTgxNjc3MUZCNzkyNDIwMEVDQzRFQyAvKiBCaWdJbnRPYmplY3QuaCBpbiBIZWFkZXJzICov
LAogCQkJCTg2OTc2RTVFMUZBM0U4QjYwMEU3QzRFMSAvKiBCaWdJbnRQcm90b3R5cGUuaCBpbiBI
ZWFkZXJzICovLApAQCAtOTU3MSw2ICs5NTkxLDcgQEAKIAkJCQkwRkQ4MkU1NzE0MURBRjEwMDAx
NzlDOTQgLyogREZHT1NSRW50cnkuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRDhBMzI2MTdENTFG
NTcwMENBMkM0MCAvKiBERkdPU1JFbnRyeXBvaW50Q3JlYXRpb25QaGFzZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEZDMDk3NkExNDY4QTZGNzAwQ0YyNDQyIC8qIERGR09TUkV4aXQuaCBpbiBIZWFk
ZXJzICovLAorCQkJCUZFOTEyQjRGMjUzMTE5MzMwMEZBQkRERiAvKiBBYnN0cmFjdFNsb3RWaXNp
dG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjIzNUJFQzE3MTc4RTczMDA2OTBDN0YgLyogREZH
T1NSRXhpdEJhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRkI5MjFDMTZEMDJGMTEwMDU1QTVE
QiAvKiBERkdPU1JFeGl0Q29tcGlsYXRpb25JbmZvLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjcw
MjVBQTE3MTRCMEZDMDAzODJDMEUgLyogREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmggaW4gSGVh
ZGVycyAqLywKQEAgLTk4NTYsNiArOTg3Nyw3IEBACiAJCQkJQTUxM0U1QkUxODVCRkFDQzAwN0U5
NUFEIC8qIEluamVjdGVkU2NyaXB0SG9zdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTUxM0U1Q0Ix
ODVGOTYyNDAwN0U5NUFEIC8qIEluamVjdGVkU2NyaXB0TWFuYWdlci5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQTU4NDBFMjExODdCN0I4NjAwODQzQjEwIC8qIEluamVjdGVkU2NyaXB0TW9kdWxlLmgg
aW4gSGVhZGVycyAqLywKKwkJCQlGRTI4N0QwMjI1MkZCMkU4MDBENzIzRjkgLyogVmVyaWZpZXJT
bG90VmlzaXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTUxM0U1QzcxODVGOTQ0NjAwN0U5NUFE
IC8qIEluamVjdGVkU2NyaXB0U291cmNlLmggaW4gSGVhZGVycyAqLywKIAkJCQk5OTU5RTkzMjFC
RDE4Mjc5MDAxQUE0MTMgLyogaW5saW5lLWFuZC1taW5pZnktc3R5bGVzaGVldHMtYW5kLXNjcmlw
dHMucHkgaW4gSGVhZGVycyAqLywKIAkJCQk3OTA1QkI2OTFEMTIwNTBFMDAxOUZFNTcgLyogSW5s
aW5lQWNjZXNzLmggaW4gSGVhZGVycyAqLywKQEAgLTEwMDMxLDYgKzEwMDUzLDcgQEAKIAkJCQlB
NThDMDI0MjE4RTRBNDFBMDAwMzJCQzUgLyogSlNDb250ZXh0UHJpdmF0ZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQkMxOEM0MUUwRTE2RjVDRDAwQjM0NDYwIC8qIEpTQ29udGV4dFJlZi5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQTVFQTcwRUUxOUY1QjVDNDAwOThGNUVDIC8qIEpTQ29udGV4dFJlZklu
c3BlY3RvclN1cHBvcnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTZCQ0NFQzA0MjVEMUZBMjcwMDBG
MzkxRCAvKiBWZXJpZmllclNsb3RWaXNpdG9ySW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QTVEMkU2NjUxOTVFMTc0MDAwQTUxOEU3IC8qIEpTQ29udGV4dFJlZkludGVybmFsLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkxNDhDRDFEODEwOENGOTAyMDA4MTYzQzYgLyogSlNDb250ZXh0UmVmUHJp
dmF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkU3NDk3RTYyMDkwMDFCMTAwMDM1NjVCIC8qIEpT
Q1B0clRhZy5oIGluIEhlYWRlcnMgKi8sCkBAIC0xMDE2MSw2ICsxMDE4NCw3IEBACiAJCQkJNzk1
QUM2MTgyMEEyMzU1RTAwNTJDNzZDIC8qIEpTVmlydHVhbE1hY2hpbmVQcml2YXRlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlBN0NBM0FFODE3REE0MUFFMDA2NTM4QUYgLyogSlNXZWFrTWFwLmggaW4g
SGVhZGVycyAqLywKIAkJCQlBNzQ4MkU5MzExNkE3Q0FEMDAzQjA3MTIgLyogSlNXZWFrT2JqZWN0
TWFwUmVmSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAorCQkJCUZFOTEyQjUxMjUzMTFBRDEwMEZB
QkRERiAvKiBBYnN0cmFjdFNsb3RWaXNpdG9ySW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QTc0ODJCOTMxMTY3MTE0NzAwM0IwNzEyIC8qIEpTV2Vha09iamVjdE1hcFJlZlByaXZhdGUuaCBp
biBIZWFkZXJzICovLAogCQkJCTUzOUJGQkIwMjJBRDNDREMwMDIzRjRDMCAvKiBKU1dlYWtPYmpl
Y3RSZWYuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMEIyODZCMUVCOEU2Q0YwMDBFQjVEMiAvKiBK
U1dlYWtQcml2YXRlLmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9TY3JpcHRzL3drYnVpbHRpbnMvYnVpbHRpbnNfZ2VuZXJhdGVfaW50ZXJuYWxzX3dyYXBwZXJf
aGVhZGVyLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL3dr
YnVpbHRpbnMvYnVpbHRpbnNfZ2VuZXJhdGVfaW50ZXJuYWxzX3dyYXBwZXJfaGVhZGVyLnB5CShy
ZXZpc2lvbiAyNzI3MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy93a2J1aWx0
aW5zL2J1aWx0aW5zX2dlbmVyYXRlX2ludGVybmFsc193cmFwcGVyX2hlYWRlci5weQkod29ya2lu
ZyBjb3B5KQpAQCAtOTMsNyArOTMsNyBAQCBjbGFzcyBCdWlsdGluc0ludGVybmFsc1dyYXBwZXJI
ZWFkZXJHZW5lCiAKICAgICBkZWYgZ2VuZXJhdGVfbWV0aG9kcyhzZWxmKToKICAgICAgICAgcmV0
dXJuICIiIgotICAgIHZvaWQgdmlzaXQoSlNDOjpTbG90VmlzaXRvciYpOworICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgdmlzaXQoVmlzaXRvciYpOwogICAgIHZvaWQgaW5pdGlh
bGl6ZShKU0RPTUdsb2JhbE9iamVjdCYpOwogIiIiCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9TY3JpcHRzL3drYnVpbHRpbnMvYnVpbHRpbnNfZ2VuZXJhdGVfaW50ZXJuYWxzX3dyYXBw
ZXJfaW1wbGVtZW50YXRpb24ucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L1NjcmlwdHMvd2tidWlsdGlucy9idWlsdGluc19nZW5lcmF0ZV9pbnRlcm5hbHNfd3JhcHBlcl9p
bXBsZW1lbnRhdGlvbi5weQkocmV2aXNpb24gMjcyNzEwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL1NjcmlwdHMvd2tidWlsdGlucy9idWlsdGluc19nZW5lcmF0ZV9pbnRlcm5hbHNfd3JhcHBl
cl9pbXBsZW1lbnRhdGlvbi5weQkod29ya2luZyBjb3B5KQpAQCAtMTIwLDEzICsxMjAsMTYgQEAg
Y2xhc3MgQnVpbHRpbnNJbnRlcm5hbHNXcmFwcGVySW1wbGVtZW50YQogICAgICAgICByZXR1cm4g
J1xuJy5qb2luKGxpbmVzKQogCiAgICAgZGVmIGdlbmVyYXRlX3Zpc2l0X21ldGhvZChzZWxmKToK
LSAgICAgICAgbGluZXMgPSBbInZvaWQgSlNCdWlsdGluSW50ZXJuYWxGdW5jdGlvbnM6OnZpc2l0
KEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpIiwKKyAgICAgICAgbGluZXMgPSBbInRlbXBsYXRl
PHR5cGVuYW1lIFZpc2l0b3I+IiwKKyAgICAgICAgICAgICAgICAgInZvaWQgSlNCdWlsdGluSW50
ZXJuYWxGdW5jdGlvbnM6OnZpc2l0KFZpc2l0b3ImIHZpc2l0b3IpIiwKICAgICAgICAgICAgICAg
ICAgInsiXQogICAgICAgICBmb3Igb2JqZWN0IGluIHNlbGYuaW50ZXJuYWxzOgogICAgICAgICAg
ICAgdmlzaXQgPSAiICAgICVzLnZpc2l0KHZpc2l0b3IpOyIgJSBzZWxmLm1lbWJlcl9uYW1lKG9i
amVjdCkKICAgICAgICAgICAgIGxpbmVzLmFwcGVuZChCdWlsdGluc0dlbmVyYXRvci53cmFwX3dp
dGhfZ3VhcmQob2JqZWN0LmFubm90YXRpb25zLmdldCgnY29uZGl0aW9uYWwnKSwgdmlzaXQpKQog
ICAgICAgICBsaW5lcy5hcHBlbmQoIiAgICBVTlVTRURfUEFSQU0odmlzaXRvcik7IikKICAgICAg
ICAgbGluZXMuYXBwZW5kKCJ9XG4iKQorICAgICAgICBsaW5lcy5hcHBlbmQoInRlbXBsYXRlIHZv
aWQgSlNCdWlsdGluSW50ZXJuYWxGdW5jdGlvbnM6OnZpc2l0KEFic3RyYWN0U2xvdFZpc2l0b3Im
KTsiKQorICAgICAgICBsaW5lcy5hcHBlbmQoInRlbXBsYXRlIHZvaWQgSlNCdWlsdGluSW50ZXJu
YWxGdW5jdGlvbnM6OnZpc2l0KFNsb3RWaXNpdG9yJik7XG4iKQogICAgICAgICByZXR1cm4gJ1xu
Jy5qb2luKGxpbmVzKQogCiAgICAgZGVmIF9nZW5lcmF0ZV9pbml0aWFsaXplX3N0YXRpY19nbG9i
YWxzKHNlbGYpOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvd2tidWlsdGlu
cy9idWlsdGluc190ZW1wbGF0ZXMucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL1NjcmlwdHMvd2tidWlsdGlucy9idWlsdGluc190ZW1wbGF0ZXMucHkJKHJldmlzaW9uIDI3
MjcxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL3drYnVpbHRpbnMvYnVpbHRp
bnNfdGVtcGxhdGVzLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0xODgsNyArMTg4LDcgQEAgcHVibGlj
OgogICAgIGV4cGxpY2l0ICR7b2JqZWN0TmFtZX1CdWlsdGluRnVuY3Rpb25zKEpTQzo6Vk0mIHZt
KSA6IG1fdm0odm0pIHsgfQogCiAgICAgdm9pZCBpbml0KEpTQzo6SlNHbG9iYWxPYmplY3QmKTsK
LSAgICB2b2lkIHZpc2l0KEpTQzo6U2xvdFZpc2l0b3ImKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBWaXNpdG9yPiB2b2lkIHZpc2l0KFZpc2l0b3ImKTsKIAogcHVibGljOgogICAgIEpTQzo6Vk0m
IG1fdm07CkBAIC0yMDcsMTAgKzIwNywxNSBAQCBpbmxpbmUgdm9pZCAke29iamVjdE5hbWV9QnVp
bHRpbkZ1bmN0aW9uCiAjdW5kZWYgRVhQT1JUX0ZVTkNUSU9OCiB9CiAKLWlubGluZSB2b2lkICR7
b2JqZWN0TmFtZX1CdWlsdGluRnVuY3Rpb25zOjp2aXNpdChKU0M6OlNsb3RWaXNpdG9yJiB2aXNp
dG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK2lubGluZSB2b2lkICR7b2JqZWN0TmFt
ZX1CdWlsdGluRnVuY3Rpb25zOjp2aXNpdChWaXNpdG9yJiB2aXNpdG9yKQogewogI2RlZmluZSBW
SVNJVF9GVU5DVElPTihuYW1lKSB2aXNpdG9yLmFwcGVuZChtXyMjbmFtZSMjRnVuY3Rpb24pOwog
ICAgICR7bWFjcm9QcmVmaXh9X0ZPUkVBQ0hfJHtvYmplY3RNYWNyb31fQlVJTFRJTl9GVU5DVElP
Tl9OQU1FKFZJU0lUX0ZVTkNUSU9OKQogI3VuZGVmIFZJU0lUX0ZVTkNUSU9OCiB9CisKK3RlbXBs
YXRlIHZvaWQgJHtvYmplY3ROYW1lfUJ1aWx0aW5GdW5jdGlvbnM6OnZpc2l0KEpTQzo6QWJzdHJh
Y3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCAke29iamVjdE5hbWV9QnVpbHRpbkZ1bmN0
aW9uczo6dmlzaXQoSlNDOjpTbG90VmlzaXRvciYpOworCiAiIiIpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCShyZXZpc2lvbiAyNzI3MTAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTc1Nyw3ICs3NTcsOCBAQCBib29sIEFjY2Vzc0Nhc2U6OnZpc2l0V2VhayhW
TSYgdm0pIGNvbnN0CiAgICAgcmV0dXJuIGlzVmFsaWQ7CiB9CiAKLWJvb2wgQWNjZXNzQ2FzZTo6
cHJvcGFnYXRlVHJhbnNpdGlvbnMoU2xvdFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0Cit0ZW1wbGF0
ZTx0eXBlbmFtZSBWaXNpdG9yPgorYm9vbCBBY2Nlc3NDYXNlOjpwcm9wYWdhdGVUcmFuc2l0aW9u
cyhWaXNpdG9yJiB2aXNpdG9yKSBjb25zdAogewogICAgIGJvb2wgcmVzdWx0ID0gdHJ1ZTsKIApA
QCAtNzcyLDcgKzc3Myw3IEBAIGJvb2wgQWNjZXNzQ2FzZTo6cHJvcGFnYXRlVHJhbnNpdGlvbnMo
U2wKICAgICBzd2l0Y2ggKG1fdHlwZSkgewogICAgIGNhc2UgVHJhbnNpdGlvbjoKICAgICBjYXNl
IERlbGV0ZToKLSAgICAgICAgaWYgKHZpc2l0b3Iudm0oKS5oZWFwLmlzTWFya2VkKG1fc3RydWN0
dXJlLT5wcmV2aW91c0lEKCkpKQorICAgICAgICBpZiAodmlzaXRvci5pc01hcmtlZChtX3N0cnVj
dHVyZS0+cHJldmlvdXNJRCgpKSkKICAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVy
ZWQobV9zdHJ1Y3R1cmUuZ2V0KCkpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICByZXN1bHQg
PSBmYWxzZTsKQEAgLTc4NCw3ICs3ODUsMTAgQEAgYm9vbCBBY2Nlc3NDYXNlOjpwcm9wYWdhdGVU
cmFuc2l0aW9ucyhTbAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQgQWNjZXNzQ2FzZTo6
dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0Cit0ZW1wbGF0ZSBib29s
IEFjY2Vzc0Nhc2U6OnByb3BhZ2F0ZVRyYW5zaXRpb25zKFNsb3RWaXNpdG9yJikgY29uc3Q7Cit0
ZW1wbGF0ZSBib29sIEFjY2Vzc0Nhc2U6OnByb3BhZ2F0ZVRyYW5zaXRpb25zKEFic3RyYWN0U2xv
dFZpc2l0b3ImKSBjb25zdDsKKwordm9pZCBBY2Nlc3NDYXNlOjp2aXNpdEFnZ3JlZ2F0ZShBYnN0
cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBjb25zdAogewogICAgIG1faWRlbnRpZmllci52aXNp
dEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9BY2Nlc3NDYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0FjY2Vzc0Nhc2UuaAkocmV2aXNpb24gMjcyNzEwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMjgwLDkgKzI4
MCw5IEBAIHByaXZhdGU6CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KICAgICB2b2lk
IGZvckVhY2hEZXBlbmRlbnRDZWxsKFZNJiwgY29uc3QgRnVuY3RvciYpIGNvbnN0OwogCi0gICAg
dm9pZCB2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYpIGNvbnN0OworICAgIHZvaWQgdmlzaXRB
Z2dyZWdhdGUoQWJzdHJhY3RTbG90VmlzaXRvciYpIGNvbnN0OwogICAgIGJvb2wgdmlzaXRXZWFr
KFZNJikgY29uc3Q7Ci0gICAgYm9vbCBwcm9wYWdhdGVUcmFuc2l0aW9ucyhTbG90VmlzaXRvciYp
IGNvbnN0OworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IGJvb2wgcHJvcGFnYXRlVHJh
bnNpdGlvbnMoVmlzaXRvciYpIGNvbnN0OwogCiAgICAgLy8gRklYTUU6IFRoaXMgb25seSBleGlz
dHMgYmVjYXVzZSBvZiBob3cgQWNjZXNzQ2FzZSBwdXRzIHBvc3QtZ2VuZXJhdGlvbiB0aGluZ3Mg
aW50byBpdHNlbGYuCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE1NjQ1NgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5VmFsSW5m
by5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5VmFs
SW5mby5jcHAJKHJldmlzaW9uIDI3MjcxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9CeVZhbEluZm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00LDcgKzQsNyBAQAogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKICAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogMS4gUmVk
aXN0cmlidXRWZXJpZmllclNsb3RWaXNpdG9yaW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CiAgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCiAgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAogICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQpAQCAtMzIsNyArMzIsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogI2lmIEVOQUJM
RShKSVQpCiAKLXZvaWQgQnlWYWxJbmZvOjp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYgdmlz
aXRvcikKK3ZvaWQgQnlWYWxJbmZvOjp2aXNpdEFnZ3JlZ2F0ZShBYnN0cmFjdFNsb3RWaXNpdG9y
JiB2aXNpdG9yKQogewogICAgIGNhY2hlZElkLnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOwogfQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5VmFsSW5mby5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeVZhbEluZm8uaAkocmV2aXNp
b24gMjcyNzEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5VmFsSW5mby5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yNjAsNyArMjYwLDcgQEAgc3RydWN0IEJ5VmFsSW5mbyB7CiAg
ICAgICAgIHRoaXMtPnNlZW4gPSBmYWxzZTsKICAgICB9CiAKLSAgICB2b2lkIHZpc2l0QWdncmVn
YXRlKFNsb3RWaXNpdG9yJik7CisgICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShBYnN0cmFjdFNsb3RW
aXNpdG9yJik7CiAKICAgICBDb2RlTG9jYXRpb25KdW1wPEpTSW50ZXJuYWxQdHJUYWc+IG5vdElu
ZGV4SnVtcDsKICAgICBDb2RlTG9jYXRpb25KdW1wPEpTSW50ZXJuYWxQdHJUYWc+IGJhZFR5cGVK
dW1wOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NoZWNrUHJpdmF0ZUJy
YW5kU3RhdHVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQ2hlY2tQcml2YXRlQnJhbmRTdGF0dXMuY3BwCShyZXZpc2lvbiAyNzI3MTApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2hlY2tQcml2YXRlQnJhbmRTdGF0dXMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yMjgsMTMgKzIyOCwxMyBAQCBDYWNoZWFibGVJZGVudGlmaWVyIENo
ZWNrUHJpdmF0ZUJyYW5kU3RhCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotdm9pZCBDaGVja1By
aXZhdGVCcmFuZFN0YXR1czo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2
b2lkIENoZWNrUHJpdmF0ZUJyYW5kU3RhdHVzOjp2aXNpdEFnZ3JlZ2F0ZShBYnN0cmFjdFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQogewogICAgIGZvciAoQ2hlY2tQcml2YXRlQnJhbmRWYXJpYW50JiB2
YXJpYW50IDogbV92YXJpYW50cykKICAgICAgICAgdmFyaWFudC52aXNpdEFnZ3JlZ2F0ZSh2aXNp
dG9yKTsKIH0KIAotdm9pZCBDaGVja1ByaXZhdGVCcmFuZFN0YXR1czo6bWFya0lmQ2hlYXAoU2xv
dFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIENoZWNrUHJpdmF0ZUJyYW5kU3RhdHVzOjptYXJrSWZD
aGVhcChBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGZvciAoQ2hlY2tQcml2
YXRlQnJhbmRWYXJpYW50JiB2YXJpYW50IDogbV92YXJpYW50cykKICAgICAgICAgdmFyaWFudC5t
YXJrSWZDaGVhcCh2aXNpdG9yKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9DaGVja1ByaXZhdGVCcmFuZFN0YXR1cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9DaGVja1ByaXZhdGVCcmFuZFN0YXR1cy5oCShyZXZpc2lvbiAyNzI3
MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2hlY2tQcml2YXRlQnJhbmRT
dGF0dXMuaAkod29ya2luZyBjb3B5KQpAQCAtODIsOCArODIsOCBAQCBwdWJsaWM6CiAgICAgLy8g
QXR0ZW1wdHMgdG8gcmVkdWNlIHRoZSBzZXQgb2YgdmFyaWFudHMgdG8gZml0IHRoZSBnaXZlbiBz
dHJ1Y3R1cmUgc2V0LiBUaGlzIG1heSBiZSBhcHByb3hpbWF0ZS4KICAgICB2b2lkIGZpbHRlcihj
b25zdCBTdHJ1Y3R1cmVTZXQmKTsKIAotICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0
b3ImKTsKLSAgICB2b2lkIG1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJik7CisgICAgdm9pZCB2aXNp
dEFnZ3JlZ2F0ZShBYnN0cmFjdFNsb3RWaXNpdG9yJik7CisgICAgdm9pZCBtYXJrSWZDaGVhcChB
YnN0cmFjdFNsb3RWaXNpdG9yJik7CiAgICAgYm9vbCBmaW5hbGl6ZShWTSYpOwogCiAgICAgYm9v
bCBhcHBlbmRWYXJpYW50KGNvbnN0IENoZWNrUHJpdmF0ZUJyYW5kVmFyaWFudCYpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NoZWNrUHJpdmF0ZUJyYW5kVmFyaWFudC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NoZWNrUHJp
dmF0ZUJyYW5kVmFyaWFudC5jcHAJKHJldmlzaW9uIDI3MjcxMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9DaGVja1ByaXZhdGVCcmFuZFZhcmlhbnQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC01MSw3ICs1MSw3IEBAIGJvb2wgQ2hlY2tQcml2YXRlQnJhbmRWYXJpYW50OjphdHRl
bXB0VG8KICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBDaGVja1ByaXZhdGVCcmFuZFZhcmlh
bnQ6Om1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBDaGVja1ByaXZhdGVC
cmFuZFZhcmlhbnQ6Om1hcmtJZkNoZWFwKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7
CiAgICAgbV9zdHJ1Y3R1cmVTZXQubWFya0lmQ2hlYXAodmlzaXRvcik7CiB9CkBAIC02Myw3ICs2
Myw3IEBAIGJvb2wgQ2hlY2tQcml2YXRlQnJhbmRWYXJpYW50OjpmaW5hbGl6ZSgKICAgICByZXR1
cm4gdHJ1ZTsKIH0KIAotdm9pZCBDaGVja1ByaXZhdGVCcmFuZFZhcmlhbnQ6OnZpc2l0QWdncmVn
YXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBDaGVja1ByaXZhdGVCcmFuZFZhcmlhbnQ6
OnZpc2l0QWdncmVnYXRlKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgbV9p
ZGVudGlmaWVyLnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOwogfQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NoZWNrUHJpdmF0ZUJyYW5kVmFyaWFudC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DaGVja1ByaXZhdGVCcmFuZFZhcmlh
bnQuaAkocmV2aXNpb24gMjcyNzEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NoZWNrUHJpdmF0ZUJyYW5kVmFyaWFudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3
IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCitjbGFzcyBBYnN0cmFjdFNsb3RWaXNpdG9yOwogY2xh
c3MgQ2hlY2tQcml2YXRlQnJhbmRTdGF0dXM7CiAKIGNsYXNzIENoZWNrUHJpdmF0ZUJyYW5kVmFy
aWFudCB7CkBAIC00Niw4ICs0Nyw4IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgYXR0ZW1wdFRvTWVy
Z2UoY29uc3QgQ2hlY2tQcml2YXRlQnJhbmRWYXJpYW50JiBvdGhlcik7CiAKLSAgICB2b2lkIHZp
c2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJik7Ci0gICAgdm9pZCBtYXJrSWZDaGVhcChTbG90Vmlz
aXRvciYpOworICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoQWJzdHJhY3RTbG90VmlzaXRvciYpOwor
ICAgIHZvaWQgbWFya0lmQ2hlYXAoQWJzdHJhY3RTbG90VmlzaXRvciYpOwogICAgIGJvb2wgZmlu
YWxpemUoVk0mKTsKIAogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJldmlzaW9u
IDI3MjcxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw5IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAj
aW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAKKyNpbmNsdWRlICJBYnN0cmFjdFNsb3RWaXNpdG9yLmgi
IC8vIG1sYW0gVEVTVAorI2luY2x1ZGUgIlBvbHltb3JwaGljQWNjZXNzLmgiIC8vIG1sYW0gVEVT
VAorCiAjaW5jbHVkZSAiQXJpdGhQcm9maWxlLmgiCiAjaW5jbHVkZSAiQmFzaWNCbG9ja0xvY2F0
aW9uLmgiCiAjaW5jbHVkZSAiQnlWYWxJbmZvLmgiCkBAIC05NCw2ICs5Nyw5IEBACiAKIG5hbWVz
cGFjZSBKU0MgewogCitleHRlcm4gdW5zaWduZWQgbWxhbVRpbWU7CitleHRlcm4gYm9vbCBtbGFt
VmVyYm9zZTsKKwogREVGSU5FX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihDb2RlQmxv
Y2tSYXJlRGF0YSk7CiAKIGNvbnN0IENsYXNzSW5mbyBDb2RlQmxvY2s6OnNfaW5mbyA9IHsKQEAg
LTMwNSw2ICszMTEsOCBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhWTSYgdm0sIFN0cnVjdHVyZSog
CiAgICAgLCBtX21ldGFkYXRhKG90aGVyLm1fbWV0YWRhdGEpCiAgICAgLCBtX2NyZWF0aW9uVGlt
ZShNb25vdG9uaWNUaW1lOjpub3coKSkKIHsKKyAgICBpZiAobWxhbVZlcmJvc2UpIGRhdGFMb2dM
bigiICAgIG1sYW0gQ29kZUJsb2NrPCIsIFJhd1BvaW50ZXIodGhpcyksICI+OjpDb2RlQmxvY2sg
MTogUkVTRVQgbV9jcmVhdGlvblRpbWUgdG8gIiwgbV9jcmVhdGlvblRpbWUsICI+IDxnYyMiLCBt
bGFtVGltZSwgIj4iKTsKKwogICAgIEFTU0VSVChoZWFwKCktPmlzRGVmZXJyZWQoKSk7CiAgICAg
QVNTRVJUKG1fc2NvcGVSZWdpc3Rlci5pc0xvY2FsKCkpOwogCkBAIC0zNTksNiArMzY3LDggQEAg
Q29kZUJsb2NrOjpDb2RlQmxvY2soVk0mIHZtLCBTdHJ1Y3R1cmUqIAogICAgICwgbV9tZXRhZGF0
YSh1bmxpbmtlZENvZGVCbG9jay0+bWV0YWRhdGEoKS5saW5rKCkpCiAgICAgLCBtX2NyZWF0aW9u
VGltZShNb25vdG9uaWNUaW1lOjpub3coKSkKIHsKKyAgICBpZiAobWxhbVZlcmJvc2UpIGRhdGFM
b2dMbigiICAgIG1sYW0gQ29kZUJsb2NrPCIsIFJhd1BvaW50ZXIodGhpcyksICI+OjpDb2RlQmxv
Y2sgMjogUkVTRVQgbV9jcmVhdGlvblRpbWUgdG8gIiwgbV9jcmVhdGlvblRpbWUsICI+IDxnYyMi
LCBtbGFtVGltZSwgIj4iKTsKKwogICAgIEFTU0VSVChoZWFwKCktPmlzRGVmZXJyZWQoKSk7CiAg
ICAgQVNTRVJUKG1fc2NvcGVSZWdpc3Rlci5pc0xvY2FsKCkpOwogCkBAIC0xMDAxLDcgKzEwMTEs
OCBAQCBzaXplX3QgQ29kZUJsb2NrOjplc3RpbWF0ZWRTaXplKEpTQ2VsbCogCiAgICAgcmV0dXJu
IEJhc2U6OmVzdGltYXRlZFNpemUoY2VsbCwgdm0pICsgZXh0cmFNZW1vcnlBbGxvY2F0ZWQ7CiB9
CiAKLXZvaWQgQ29kZUJsb2NrOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0
b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBDb2RlQmxvY2s6
OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAg
ICBDb2RlQmxvY2sqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8Q29kZUJsb2NrKj4oY2VsbCk7CiAgICAg
QVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtMTAxMCw5
ICsxMDIxLDE1IEBAIHZvaWQgQ29kZUJsb2NrOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2UKICAg
ICB0aGlzT2JqZWN0LT52aXNpdENoaWxkcmVuKHZpc2l0b3IpOwogfQogCi12b2lkIENvZGVCbG9j
azo6dmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK0RFRklORV9WSVNJVF9DSElM
RFJFTihDb2RlQmxvY2spOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBDb2Rl
QmxvY2s6OnZpc2l0Q2hpbGRyZW5JbXBsKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgQ29uY3Vy
cmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2spOworICAgIGlmIChtbGFtVmVyYm9zZSkgZGF0YUxv
Z0xuKCIgICAgbWxhbSAxMDIzIENvZGVCbG9jazwiLCBSYXdQb2ludGVyKHRoaXMpLCAiPjo6dmlz
aXRDaGlsZHJlbkltcGw6IG1fZGlyZWN0RXZhbENvZGVDYWNoZTwiLCBSYXdQb2ludGVyKCZtX3Jh
cmVEYXRhLT5tX2RpcmVjdEV2YWxDb2RlQ2FjaGUpLCAiPiA8Z2MjIiwgbWxhbVRpbWUsICI+IHZp
c2l0b3IgIiwgdmlzaXRvci5jb2RlTmFtZSgpKTsKKworICAgIG1fdmlzaXRDaGlsZHJlblNraXBw
ZWREdWVUb09sZEFnZSA9IGZhbHNlOwogICAgIGlmIChDb2RlQmxvY2sqIG90aGVyQmxvY2sgPSBz
cGVjaWFsT1NSRW50cnlCbG9ja09yTnVsbCgpKQogICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFy
cmllcmVkKG90aGVyQmxvY2spOwogCkBAIC0xMDI5LDEzICsxMDQ2LDIzIEBAIHZvaWQgQ29kZUJs
b2NrOjp2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG8KICAgICBWTTo6U3BhY2VBbmRTZXQ6OnNldEZv
cigqc3Vic3BhY2UoKSkuYWRkKHRoaXMpOwogfQogCi1ib29sIENvZGVCbG9jazo6c2hvdWxkVmlz
aXRTdHJvbmdseShjb25zdCBDb25jdXJyZW50SlNMb2NrZXImIGxvY2tlcikKK0RFRklORV9JTlNU
QU5DRV9WSVNJVF9DSElMRFJFTihDb2RlQmxvY2spOworCitib29sIENvZGVCbG9jazo6c2hvdWxk
VmlzaXRTdHJvbmdseShjb25zdCBDb25jdXJyZW50SlNMb2NrZXImIGxvY2tlciwgQWJzdHJhY3RT
bG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBpZiAoT3B0aW9uczo6Zm9yY2VDb2RlQmxvY2tM
aXZlbmVzcygpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIGlmIChzaG91bGRKZXR0aXNv
bkR1ZVRvT2xkQWdlKGxvY2tlcikpCisgICAgaWYgKHNob3VsZEpldHRpc29uRHVlVG9PbGRBZ2Uo
bG9ja2VyLCB2aXNpdG9yKSkgeworICAgICAgICBpZiAoT3B0aW9uczo6dmVyaWZ5R0MoKSkKKyAg
ICAgICAgICAgIG1fdmlzaXRDaGlsZHJlblNraXBwZWREdWVUb09sZEFnZSA9IHRydWU7CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAobV92aXNpdENoaWxkcmVuU2tpcHBl
ZER1ZVRvT2xkQWdlKSB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKE9wdGlvbnM6OnZlcmlmeUdD
KCkpOyAvLyBtbGFtIEZJWE1FIG1ha2UgaW50byBBU1NFUlQKICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KIAogICAgIC8vIEludGVycHJldGVyIGFuZCBCYXNlbGluZSBKSVQgQ29kZUJsb2Nr
cyBkb24ndCBuZWVkIHRvIGJlIGpldHRpc29uZWQgd2hlbgogICAgIC8vIHRoZWlyIHdlYWsgcmVm
ZXJlbmNlcyBnbyBzdGFsZS4gU28gaWYgYSBiYXNsaW5lIEpJVCBDb2RlQmxvY2sgZ2V0cwpAQCAt
MTA4Niw5ICsxMTEzLDkgQEAgc3RhdGljIFNlY29uZHMgdGltZVRvTGl2ZShKSVRUeXBlIGppdFR5
cAogICAgIH0KIH0KIAotYm9vbCBDb2RlQmxvY2s6OnNob3VsZEpldHRpc29uRHVlVG9PbGRBZ2Uo
Y29uc3QgQ29uY3VycmVudEpTTG9ja2VyJikKK2Jvb2wgQ29kZUJsb2NrOjpzaG91bGRKZXR0aXNv
bkR1ZVRvT2xkQWdlKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIEFic3RyYWN0U2xvdFZpc2l0
b3ImIHZpc2l0b3IpCiB7Ci0gICAgaWYgKG1fdm0tPmhlYXAuaXNNYXJrZWQodGhpcykpCisgICAg
aWYgKHZpc2l0b3IuaXNNYXJrZWQodGhpcykpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAg
IGlmIChVTkxJS0VMWShPcHRpb25zOjpmb3JjZUNvZGVCbG9ja1RvSmV0dGlzb25EdWVUb09sZEFn
ZSgpKSkKQEAgLTExMDEsMTIgKzExMjgsMTIgQEAgYm9vbCBDb2RlQmxvY2s6OnNob3VsZEpldHRp
c29uRHVlVG9PbGRBZwogfQogCiAjaWYgRU5BQkxFKERGR19KSVQpCi1zdGF0aWMgYm9vbCBzaG91
bGRNYXJrVHJhbnNpdGlvbihWTSYgdm0sIERGRzo6V2Vha1JlZmVyZW5jZVRyYW5zaXRpb24mIHRy
YW5zaXRpb24pCitzdGF0aWMgaW5saW5lIGJvb2wgc2hvdWxkTWFya1RyYW5zaXRpb24oQWJzdHJh
Y3RTbG90VmlzaXRvciYgdmlzaXRvciwgREZHOjpXZWFrUmVmZXJlbmNlVHJhbnNpdGlvbiYgdHJh
bnNpdGlvbikKIHsKLSAgICBpZiAodHJhbnNpdGlvbi5tX2NvZGVPcmlnaW4gJiYgIXZtLmhlYXAu
aXNNYXJrZWQodHJhbnNpdGlvbi5tX2NvZGVPcmlnaW4uZ2V0KCkpKQorICAgIGlmICh0cmFuc2l0
aW9uLm1fY29kZU9yaWdpbiAmJiAhdmlzaXRvci5pc01hcmtlZCh0cmFuc2l0aW9uLm1fY29kZU9y
aWdpbi5nZXQoKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKLSAgICBpZiAoIXZtLmhl
YXAuaXNNYXJrZWQodHJhbnNpdGlvbi5tX2Zyb20uZ2V0KCkpKQorICAgIGlmICghdmlzaXRvci5p
c01hcmtlZCh0cmFuc2l0aW9uLm1fZnJvbS5nZXQoKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICAKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTExMjIsMTMgKzExNDksNDQgQEAgQnl0ZWNvZGVJ
bmRleCBDb2RlQmxvY2s6OmJ5dGVjb2RlSW5kZXhGbwogfQogI2VuZGlmIC8vIEVOQUJMRShERkdf
SklUKQogCi12b2lkIENvZGVCbG9jazo6cHJvcGFnYXRlVHJhbnNpdGlvbnMoY29uc3QgQ29uY3Vy
cmVudEpTTG9ja2VyJiwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisjaWYgRU5BQkxFKEpJVCkKKwor
Ym9vbCBTdHJ1Y3R1cmVTdHViSW5mbzo6cHJvcGFnYXRlVHJhbnNpdGlvbnMoQWJzdHJhY3RTbG90
VmlzaXRvciYgdmlzaXRvcikKIHsKKyAgICBzd2l0Y2ggKG1fY2FjaGVUeXBlKSB7CisgICAgY2Fz
ZSBDYWNoZVR5cGU6OlVuc2V0OgorICAgIGNhc2UgQ2FjaGVUeXBlOjpBcnJheUxlbmd0aDoKKyAg
ICBjYXNlIENhY2hlVHlwZTo6U3RyaW5nTGVuZ3RoOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICBjYXNlIENhY2hlVHlwZTo6R2V0QnlJZFNlbGY6CisgICAgY2FzZSBDYWNoZVR5cGU6OlB1dEJ5
SWRSZXBsYWNlOgorICAgIGNhc2UgQ2FjaGVUeXBlOjpJbkJ5SWRTZWxmOgorICAgICAgICByZXR1
cm4gdS5ieUlkU2VsZi5iYXNlT2JqZWN0U3RydWN0dXJlLT5tYXJrSWZDaGVhcCh2aXNpdG9yKTsK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGNhc2UgQ2FjaGVUeXBlOjpTdHViOgorICAgICAg
ICByZXR1cm4gdS5zdHViLT5wcm9wYWdhdGVUcmFuc2l0aW9ucyh2aXNpdG9yKTsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAKKy8vICAgIFVOVVNFRF9QQVJBTSh2aXNpdG9yKTsg
Ly8gbWxhbSBURVNUCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKworI2VuZGlmIC8vIEVOQUJMRShKSVQpCisKK3ZvaWQgQ29kZUJsb2NrOjpw
cm9wYWdhdGVUcmFuc2l0aW9ucyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBBYnN0cmFjdFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIEFic3RyYWN0U2xvdFZpc2l0b3I6OkNvbnRleHQg
Y29udGV4dCh2aXNpdG9yLCB0aGlzKTsKKyAgICBBYnN0cmFjdFNsb3RWaXNpdG9yOjpTdXBwcmVz
c0dDVmVyaWZpZXJTY29wZSBzdXBwcmVzc1Njb3BlKHZpc2l0b3IpOwogICAgIFZNJiB2bSA9ICpt
X3ZtOwogCisgICAgaWYgKG1sYW1WZXJib3NlKSBkYXRhTG9nTG4oIiAgICBtbGFtIENvZGVCbG9j
azwiLCBSYXdQb2ludGVyKHRoaXMpLCAiPjo6cHJvcGFnYXRlVHJhbnNpdGlvbnM8Z2MjIiwgbWxh
bVRpbWUsICI+OiBTVEVQIDAgdmlzaXRvciAiLCB2aXNpdG9yLmNvZGVOYW1lKCksICIgaml0VHlw
ZSAiLCBqaXRUeXBlKCkpOwogICAgIGlmIChqaXRUeXBlKCkgPT0gSklUVHlwZTo6SW50ZXJwcmV0
ZXJUaHVuaykgeworICAgICAgICBpZiAobWxhbVZlcmJvc2UpIGRhdGFMb2dMbigiICAgIG1sYW0g
Q29kZUJsb2NrPCIsIFJhd1BvaW50ZXIodGhpcyksICI+Ojpwcm9wYWdhdGVUcmFuc2l0aW9uczxn
YyMiLCBtbGFtVGltZSwgIj46IFNURVAgMC41IHZpc2l0b3IgIiwgdmlzaXRvci5jb2RlTmFtZSgp
LCAiIG1fbWV0YWRhdGEgIiwgUmF3UG9pbnRlcihtX21ldGFkYXRhLmdldCgpKSk7CiAgICAgICAg
IGlmIChtX21ldGFkYXRhKSB7CiAgICAgICAgICAgICBtX21ldGFkYXRhLT5mb3JFYWNoPE9wUHV0
QnlJZD4oWyZdIChhdXRvJiBtZXRhZGF0YSkgeworLy8gICAgICAgICAgICAgICAgQWJzdHJhY3RT
bG90VmlzaXRvcjo6U3VwcHJlc3NHQ1ZlcmlmaWVyU2NvcGUgc3VwcHJlc3NTY29wZSh2aXNpdG9y
KTsKICAgICAgICAgICAgICAgICBTdHJ1Y3R1cmVJRCBvbGRTdHJ1Y3R1cmVJRCA9IG1ldGFkYXRh
Lm1fb2xkU3RydWN0dXJlSUQ7CiAgICAgICAgICAgICAgICAgU3RydWN0dXJlSUQgbmV3U3RydWN0
dXJlSUQgPSBtZXRhZGF0YS5tX25ld1N0cnVjdHVyZUlEOwogICAgICAgICAgICAgICAgIGlmICgh
b2xkU3RydWN0dXJlSUQgfHwgIW5ld1N0cnVjdHVyZUlEKQpAQCAtMTEzNyw4ICsxMTk1LDI2IEBA
IHZvaWQgQ29kZUJsb2NrOjpwcm9wYWdhdGVUcmFuc2l0aW9ucyhjb24KICAgICAgICAgICAgICAg
ICAgICAgdm0uaGVhcC5zdHJ1Y3R1cmVJRFRhYmxlKCkuZ2V0KG9sZFN0cnVjdHVyZUlEKTsKICAg
ICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9CiAgICAgICAgICAgICAgICAg
ICAgIHZtLmhlYXAuc3RydWN0dXJlSURUYWJsZSgpLmdldChuZXdTdHJ1Y3R1cmVJRCk7Ci0gICAg
ICAgICAgICAgICAgaWYgKHZtLmhlYXAuaXNNYXJrZWQob2xkU3RydWN0dXJlKSkKKyAgICAgICAg
ICAgICAgICBpZiAobWxhbVZlcmJvc2UpIGRhdGFMb2dMbigiICAgIG1sYW0gQ29kZUJsb2NrPCIs
IFJhd1BvaW50ZXIodGhpcyksICI+Ojpwcm9wYWdhdGVUcmFuc2l0aW9uczxnYyMiLCBtbGFtVGlt
ZSwgIj46IFNURVAgMC42IHZpc2l0b3IgIiwgdmlzaXRvci5jb2RlTmFtZSgpLCAiIG9sZFN0cnVj
dHVyZSAiLCBSYXdQb2ludGVyKG9sZFN0cnVjdHVyZSksICIgdmlzaXRvci5pc01hcmtlZChvbGRT
dHJ1Y3R1cmUpICIsIHZpc2l0b3IuaXNNYXJrZWQob2xkU3RydWN0dXJlKSk7CisvLyAgICAgICAg
ICAgICAgICBpZiAodmlzaXRvci5pc01hcmtlZChvbGRTdHJ1Y3R1cmUpKSB7CisgICAgICAgICAg
ICAgICAgaWYgKCF2aXNpdG9yLmlzTWFya2VkKG9sZFN0cnVjdHVyZSkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgLy8gV2hldGhlciBvbGRTdHJ1Y3R1cmUgaXMgbWFya2VkIG9yIG5vdCBpcyBpbmhl
cmVudGx5IHJhY3ksIGFuZCBkZXBlbmRzIG9uIHRoZQorICAgICAgICAgICAgICAgICAgICAvLyBv
cmRlciBpbiB3aGljaCBHQyBtYXJrZXJzIHZpc2l0IG9iamVjdHMuIEFzIGEgcmVzdWx0LCB0aGUg
R0MgdmVyaWZpZXIgbWF5IHNlZQorICAgICAgICAgICAgICAgICAgICAvLyBvbGRTdHJ1Y3R1cmUg
YXMgbWFya2VkIGF0IHRoaXMgcG9pbnQgdGhvdWdoIHRoZSByZWFsIEdDIGRvZXMgbm90IGR1ZSB0
byBkaWZmZXJlbnQKKyAgICAgICAgICAgICAgICAgICAgLy8gdmlzaXRpbmcgb3JkZXJzLiBOb3Rl
IHRoYXQgdGhpcyBpcyBPSzogZmluYWxpemVMTEludElubGluZUNhY2hlcygpIHdpbGwgY2xlYW4K
KyAgICAgICAgICAgICAgICAgICAgLy8gdGhpbmdzIHVwIGFuZCBtYWtlIHRoZW0gY29uc2lzdGVu
dCBpZiB3ZSBlbmQgdXAgbm90IHZpc2l0aW5nIG5ld1N0cnVjdHVyZS4KKyAgICAgICAgICAgICAg
ICAgICAgLy8KKyAgICAgICAgICAgICAgICAgICAgLy8gVG8gbWFrZSBpdCBzbyB0aGF0IHRoZSBH
QyB2ZXJpZmllciB3aWxsIHNlZSBhIGNvbnNpc3RlbnQgdmlldyBvZiB3aGV0aGVyIHdlCisgICAg
ICAgICAgICAgICAgICAgIC8vIHNhdyB0aGlzIG9sZFN0cnVjdHVyZSBpcyBtYXJrZWQgb3Igbm90
LCBsZXQncyBmbGFnIHRoZSBjYWNoZSBhcyBjbGVhcmVkIGlmCisgICAgICAgICAgICAgICAgICAg
IC8vIGFscmVhZHkgZGVjaWRlZCB0byBub3QgdmlzaXQgbmV3U3RydWN0dXJlLgorICAgICAgICAg
ICAgICAgICAgICAvLworICAgICAgICAgICAgICAgICAgICAvLyBUaGUgbXV0YXRvciBpcyBmaW5l
IHdpdGggdGhpcyBiZWNhdXNlIGl0IGFsd2F5cyByZWFkcyBtX29sZFN0cnVjdHVyZUlEIGZpcnN0
CisgICAgICAgICAgICAgICAgICAgIC8vIGJlZm9yZSByZWFkaW5nIGFueSBvZiB0aGUgb3RoZXIg
ZmllbGRzLiBUaGUgbXV0YXRvciB3aWxsIGp1c3Qgd29yay4KKyAgICAgICAgICAgICAgICAgICAg
bWV0YWRhdGEubV9vbGRTdHJ1Y3R1cmVJRCA9IDA7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKG1sYW1WZXJib3NlKSBkYXRhTG9nTG4oIiAgICBtbGFt
IENvZGVCbG9jazwiLCBSYXdQb2ludGVyKHRoaXMpLCAiPjo6cHJvcGFnYXRlVHJhbnNpdGlvbnM8
Z2MjIiwgbWxhbVRpbWUsICI+OiBTVEVQIDEgdmlzaXRvciAiLCB2aXNpdG9yLmNvZGVOYW1lKCks
ICIgbmV3U3RydWN0dXJlICIsIFJhd1BvaW50ZXIobmV3U3RydWN0dXJlKSk7CiAgICAgICAgICAg
ICAgICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQobmV3U3RydWN0dXJlKTsKKyAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICB9KTsKIAogICAgICAgICAgICAgbV9tZXRhZGF0YS0+
Zm9yRWFjaDxPcFB1dFByaXZhdGVOYW1lPihbJl0gKGF1dG8mIG1ldGFkYXRhKSB7CkBAIC0xMTQ5
LDIxICsxMjI1LDI0IEBAIHZvaWQgQ29kZUJsb2NrOjpwcm9wYWdhdGVUcmFuc2l0aW9ucyhjb24K
IAogICAgICAgICAgICAgICAgIEpTQ2VsbCogcHJvcGVydHkgPSBtZXRhZGF0YS5tX3Byb3BlcnR5
LmdldCgpOwogICAgICAgICAgICAgICAgIEFTU0VSVChwcm9wZXJ0eSk7Ci0gICAgICAgICAgICAg
ICAgaWYgKCF2bS5oZWFwLmlzTWFya2VkKHByb3BlcnR5KSkKKyAgICAgICAgICAgICAgICBpZiAo
IXZpc2l0b3IuaXNNYXJrZWQocHJvcGVydHkpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm47
CiAKICAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSA9CiAgICAgICAgICAg
ICAgICAgICAgIHZtLmhlYXAuc3RydWN0dXJlSURUYWJsZSgpLmdldChvbGRTdHJ1Y3R1cmVJRCk7
CiAgICAgICAgICAgICAgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPQogICAgICAgICAgICAg
ICAgICAgICB2bS5oZWFwLnN0cnVjdHVyZUlEVGFibGUoKS5nZXQobmV3U3RydWN0dXJlSUQpOwot
ICAgICAgICAgICAgICAgIGlmICh2bS5oZWFwLmlzTWFya2VkKG9sZFN0cnVjdHVyZSkpCisgICAg
ICAgICAgICAgICAgaWYgKHZpc2l0b3IuaXNNYXJrZWQob2xkU3RydWN0dXJlKSkgeworICAgICAg
ICAgICAgICAgICAgICBpZiAobWxhbVZlcmJvc2UpIGRhdGFMb2dMbigiICAgIG1sYW0gQ29kZUJs
b2NrPCIsIFJhd1BvaW50ZXIodGhpcyksICI+Ojpwcm9wYWdhdGVUcmFuc2l0aW9uczxnYyMiLCBt
bGFtVGltZSwgIj46IFNURVAgMiB2aXNpdG9yICIsIHZpc2l0b3IuY29kZU5hbWUoKSwgIiBuZXdT
dHJ1Y3R1cmUgIiwgUmF3UG9pbnRlcihuZXdTdHJ1Y3R1cmUpKTsKICAgICAgICAgICAgICAgICAg
ICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZChuZXdTdHJ1Y3R1cmUpOworICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIH0pOwogICAgICAgICB9CiAgICAgfQogCiAjaWYgRU5BQkxFKEpJ
VCkKICAgICBpZiAoSklUQ29kZTo6aXNKSVQoaml0VHlwZSgpKSkgeworLy8gICAgICAgIEFic3Ry
YWN0U2xvdFZpc2l0b3I6OlN1cHByZXNzR0NWZXJpZmllclNjb3BlIHN1cHByZXNzU2NvcGUodmlz
aXRvcik7CiAgICAgICAgIGlmIChhdXRvKiBqaXREYXRhID0gbV9qaXREYXRhLmdldCgpKSB7CiAg
ICAgICAgICAgICBmb3IgKFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA6IGppdERhdGEtPm1f
c3R1YkluZm9zKQogICAgICAgICAgICAgICAgIHN0dWJJbmZvLT5wcm9wYWdhdGVUcmFuc2l0aW9u
cyh2aXNpdG9yKTsKQEAgLTExODEsNyArMTI2MCw3IEBAIHZvaWQgQ29kZUJsb2NrOjpwcm9wYWdh
dGVUcmFuc2l0aW9ucyhjb24KICAgICAgICAgICAgIHZtLmdldFN0cnVjdHVyZShzdHJ1Y3R1cmVJ
RCktPm1hcmtJZkNoZWFwKHZpc2l0b3IpOwogCiAgICAgICAgIGZvciAoYXV0byYgdHJhbnNpdGlv
biA6IGRmZ0NvbW1vbi0+dHJhbnNpdGlvbnMpIHsKLSAgICAgICAgICAgIGlmIChzaG91bGRNYXJr
VHJhbnNpdGlvbih2bSwgdHJhbnNpdGlvbikpIHsKKyAgICAgICAgICAgIGlmIChzaG91bGRNYXJr
VHJhbnNpdGlvbih2aXNpdG9yLCB0cmFuc2l0aW9uKSkgewogICAgICAgICAgICAgICAgIC8vIElm
IHRoZSBmb2xsb3dpbmcgdGhyZWUgdGhpbmdzIGFyZSBsaXZlLCB0aGVuIHRoZSB0YXJnZXQgb2Yg
dGhlCiAgICAgICAgICAgICAgICAgLy8gdHJhbnNpdGlvbiBpcyBhbHNvIGxpdmU6CiAgICAgICAg
ICAgICAgICAgLy8KQEAgLTEyMDEsNiArMTI4MCw3IEBAIHZvaWQgQ29kZUJsb2NrOjpwcm9wYWdh
dGVUcmFuc2l0aW9ucyhjb24KICAgICAgICAgICAgICAgICAvLyB0byBtYXJrIChpLmUuIGl0cyBn
bG9iYWwgb2JqZWN0IGFuZCBwcm90b3R5cGUgYXJlIGJvdGggYWxyZWFkeQogICAgICAgICAgICAg
ICAgIC8vIGxpdmUpLgogCisgICAgICAgICAgICAgICAgaWYgKG1sYW1WZXJib3NlKSBkYXRhTG9n
TG4oIiAgICBtbGFtIENvZGVCbG9jazwiLCBSYXdQb2ludGVyKHRoaXMpLCAiPjo6cHJvcGFnYXRl
VHJhbnNpdGlvbnM8Z2MjIiwgbWxhbVRpbWUsICI+OiBTVEVQIDMgdmlzaXRvciAiLCB2aXNpdG9y
LmNvZGVOYW1lKCksICIgdHJhbnNpdGlvbi5tX3RvICIsIFJhd1BvaW50ZXIodHJhbnNpdGlvbi5t
X3RvLmdldCgpKSk7CiAgICAgICAgICAgICAgICAgdmlzaXRvci5hcHBlbmQodHJhbnNpdGlvbi5t
X3RvKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMTIwOCwxMyArMTI4OCwxMyBAQCB2
b2lkIENvZGVCbG9jazo6cHJvcGFnYXRlVHJhbnNpdGlvbnMoY29uCiAjZW5kaWYgLy8gRU5BQkxF
KERGR19KSVQpCiB9CiAKLXZvaWQgQ29kZUJsb2NrOjpkZXRlcm1pbmVMaXZlbmVzcyhjb25zdCBD
b25jdXJyZW50SlNMb2NrZXImLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgQ29kZUJsb2Nr
OjpkZXRlcm1pbmVMaXZlbmVzcyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBBYnN0cmFjdFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFVOVVNFRF9QQVJBTSh2aXNpdG9yKTsKICAgICAK
ICNpZiBFTkFCTEUoREZHX0pJVCkKICAgICBWTSYgdm0gPSAqbV92bTsKLSAgICBpZiAodm0uaGVh
cC5pc01hcmtlZCh0aGlzKSkKKyAgICBpZiAodmlzaXRvci5pc01hcmtlZCh0aGlzKSkKICAgICAg
ICAgcmV0dXJuOwogICAgIAogICAgIC8vIEluIHJhcmUgYW5kIHdlaXJkIGNhc2VzLCB0aGlzIGNv
dWxkIGJlIGNhbGxlZCBvbiBhIGJhc2VsaW5lIENvZGVCbG9jay4gT25lIHRoYXQgSSBmb3VuZCB3
YXMKQEAgLTEyMzEsNyArMTMxMSw3IEBAIHZvaWQgQ29kZUJsb2NrOjpkZXRlcm1pbmVMaXZlbmVz
cyhjb25zdCAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGZnQ29tbW9uLT53ZWFrUmVm
ZXJlbmNlcy5zaXplKCk7ICsraSkgewogICAgICAgICBKU0NlbGwqIHJlZmVyZW5jZSA9IGRmZ0Nv
bW1vbi0+d2Vha1JlZmVyZW5jZXNbaV0uZ2V0KCk7CiAgICAgICAgIEFTU0VSVCghanNEeW5hbWlj
Q2FzdDxDb2RlQmxvY2sqPih2bSwgcmVmZXJlbmNlKSk7Ci0gICAgICAgIGlmICghdm0uaGVhcC5p
c01hcmtlZChyZWZlcmVuY2UpKSB7CisgICAgICAgIGlmICghdmlzaXRvci5pc01hcmtlZChyZWZl
cmVuY2UpKSB7CiAgICAgICAgICAgICBhbGxBcmVMaXZlU29GYXIgPSBmYWxzZTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9CkBAIC0xMjM5LDcgKzEzMTksNyBAQCB2b2lkIENvZGVCbG9j
azo6ZGV0ZXJtaW5lTGl2ZW5lc3MoY29uc3QgCiAgICAgaWYgKGFsbEFyZUxpdmVTb0Zhcikgewog
ICAgICAgICBmb3IgKFN0cnVjdHVyZUlEIHN0cnVjdHVyZUlEIDogZGZnQ29tbW9uLT53ZWFrU3Ry
dWN0dXJlUmVmZXJlbmNlcykgewogICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB2
bS5nZXRTdHJ1Y3R1cmUoc3RydWN0dXJlSUQpOwotICAgICAgICAgICAgaWYgKCF2bS5oZWFwLmlz
TWFya2VkKHN0cnVjdHVyZSkpIHsKKyAgICAgICAgICAgIGlmICghdmlzaXRvci5pc01hcmtlZChz
dHJ1Y3R1cmUpKSB7CiAgICAgICAgICAgICAgICAgYWxsQXJlTGl2ZVNvRmFyID0gZmFsc2U7CiAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CkBAIC0xMzE0LDcgKzEzOTQsMTEg
QEAgdm9pZCBDb2RlQmxvY2s6OmZpbmFsaXplTExJbnRJbmxpbmVDYWNoZQogICAgICAgICAgICAg
U3RydWN0dXJlSUQgb2xkU3RydWN0dXJlSUQgPSBtZXRhZGF0YS5tX29sZFN0cnVjdHVyZUlEOwog
ICAgICAgICAgICAgU3RydWN0dXJlSUQgbmV3U3RydWN0dXJlSUQgPSBtZXRhZGF0YS5tX25ld1N0
cnVjdHVyZUlEOwogICAgICAgICAgICAgU3RydWN0dXJlQ2hhaW4qIGNoYWluID0gbWV0YWRhdGEu
bV9zdHJ1Y3R1cmVDaGFpbi5nZXQoKTsKLSAgICAgICAgICAgIGlmICgoIW9sZFN0cnVjdHVyZUlE
IHx8IHZtLmhlYXAuaXNNYXJrZWQodm0uaGVhcC5zdHJ1Y3R1cmVJRFRhYmxlKCkuZ2V0KG9sZFN0
cnVjdHVyZUlEKSkpCisgICAgICAgICAgICAvLyBtbGFtIEZJWE1FIHJlLXRoaW5rIGlmIHdlIGNh
biBtYWtlIHRoaXMgbGVzcyBwZXNzaW1pc3RpYyAoYW5kIGRvIHdlIG5lZWQgdG8pPworLy8gICAg
ICAgICAgICBpZiAoKCFvbGRTdHJ1Y3R1cmVJRCB8fCB2bS5oZWFwLmlzTWFya2VkKHZtLmhlYXAu
c3RydWN0dXJlSURUYWJsZSgpLmdldChvbGRTdHJ1Y3R1cmVJRCkpKQorLy8gICAgICAgICAgICAg
ICAgJiYgKCFuZXdTdHJ1Y3R1cmVJRCB8fCB2bS5oZWFwLmlzTWFya2VkKHZtLmhlYXAuc3RydWN0
dXJlSURUYWJsZSgpLmdldChuZXdTdHJ1Y3R1cmVJRCkpKQorLy8gICAgICAgICAgICAgICAgJiYg
KCFjaGFpbiB8fCB2bS5oZWFwLmlzTWFya2VkKGNoYWluKSkpCisgICAgICAgICAgICBpZiAob2xk
U3RydWN0dXJlSUQgJiYgdm0uaGVhcC5pc01hcmtlZCh2bS5oZWFwLnN0cnVjdHVyZUlEVGFibGUo
KS5nZXQob2xkU3RydWN0dXJlSUQpKQogICAgICAgICAgICAgICAgICYmICghbmV3U3RydWN0dXJl
SUQgfHwgdm0uaGVhcC5pc01hcmtlZCh2bS5oZWFwLnN0cnVjdHVyZUlEVGFibGUoKS5nZXQobmV3
U3RydWN0dXJlSUQpKSkKICAgICAgICAgICAgICAgICAmJiAoIWNoYWluIHx8IHZtLmhlYXAuaXNN
YXJrZWQoY2hhaW4pKSkKICAgICAgICAgICAgICAgICByZXR1cm47CkBAIC0xNjAwLDYgKzE2ODQs
NyBAQCB2b2lkIENvZGVCbG9jazo6ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoCiAgICAgdXBkYXRl
QWN0aXZpdHkoKTsKIAogICAgIFZNOjpTcGFjZUFuZFNldDo6c2V0Rm9yKCpzdWJzcGFjZSgpKS5y
ZW1vdmUodGhpcyk7CisgICAgbV92aXNpdENoaWxkcmVuU2tpcHBlZER1ZVRvT2xkQWdlID0gZmFs
c2U7CiB9CiAKIHZvaWQgQ29kZUJsb2NrOjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKQEAgLTE3OTIs
NyArMTg3Nyw4IEBAIHZvaWQgQ29kZUJsb2NrOjpyZXNldEpJVERhdGEoKQogfQogI2VuZGlmCiAK
LXZvaWQgQ29kZUJsb2NrOjp2aXNpdE9TUkV4aXRUYXJnZXRzKGNvbnN0IENvbmN1cnJlbnRKU0xv
Y2tlciYsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4K
K3ZvaWQgQ29kZUJsb2NrOjp2aXNpdE9TUkV4aXRUYXJnZXRzKGNvbnN0IENvbmN1cnJlbnRKU0xv
Y2tlciYsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgLy8gV2Ugc3Ryb25nbHkgdmlzaXQgT1NS
IGV4aXRzIHRhcmdldHMgYmVjYXVzZSB3ZSBkb24ndCB3YW50IHRvIGRlYWwgd2l0aAogICAgIC8v
IHRoZSBjb21wbGV4aXR5IG9mIGdlbmVyYXRpbmcgYW4gZXhpdCB0YXJnZXQgQ29kZUJsb2NrIG9u
IGRlbWFuZCBhbmQKQEAgLTE4MTIsMTUgKzE4OTgsMjEgQEAgdm9pZCBDb2RlQmxvY2s6OnZpc2l0
T1NSRXhpdFRhcmdldHMoY29ucwogI2VuZGlmCiB9CiAKLXZvaWQgQ29kZUJsb2NrOjpzdHJvbmds
eVZpc2l0U3Ryb25nUmVmZXJlbmNlcyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImIGxvY2tlciwg
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZSB2b2lkIENvZGVCbG9jazo6dmlzaXRPU1JF
eGl0VGFyZ2V0cyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBTbG90VmlzaXRvciYpOwordGVt
cGxhdGUgdm9pZCBDb2RlQmxvY2s6OnZpc2l0T1NSRXhpdFRhcmdldHMoY29uc3QgQ29uY3VycmVu
dEpTTG9ja2VyJiwgQWJzdHJhY3RTbG90VmlzaXRvciYpOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPgordm9pZCBDb2RlQmxvY2s6OnN0cm9uZ2x5VmlzaXRTdHJvbmdSZWZlcmVuY2VzKGNv
bnN0IENvbmN1cnJlbnRKU0xvY2tlciYgbG9ja2VyLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAg
IFVOVVNFRF9QQVJBTShsb2NrZXIpOwogICAgIAogICAgIHZpc2l0b3IuYXBwZW5kKG1fZ2xvYmFs
T2JqZWN0KTsKICAgICB2aXNpdG9yLmFwcGVuZChtX293bmVyRXhlY3V0YWJsZSk7IC8vIFRoaXMg
aXMgZXh0cmEgaW1wb3J0YW50IHNpbmNlIGl0IGNhdXNlcyB0aGUgRXhlY3V0YWJsZVRvQ29kZUJs
b2NrRWRnZSB0byBiZSBtYXJrZWQuCiAgICAgdmlzaXRvci5hcHBlbmQobV91bmxpbmtlZENvZGUp
OwotICAgIGlmIChtX3JhcmVEYXRhKQorICAgIGlmIChtX3JhcmVEYXRhKSB7CisgICAgICAgIGlm
IChtbGFtVmVyYm9zZSkgZGF0YUxvZ0xuKCIgICAgbWxhbSBDb2RlQmxvY2s8IiwgUmF3UG9pbnRl
cih0aGlzKSwgIj46OnN0cm9uZ2x5VmlzaXRTdHJvbmdSZWZlcmVuY2VzOiBtX2RpcmVjdEV2YWxD
b2RlQ2FjaGU8IiwgUmF3UG9pbnRlcigmbV9yYXJlRGF0YS0+bV9kaXJlY3RFdmFsQ29kZUNhY2hl
KSwgIj4udmlzaXRBZ2dyZWdhdGUoKSA8Z2MjIiwgbWxhbVRpbWUsICI+IHZpc2l0b3IgIiwgdmlz
aXRvci5jb2RlTmFtZSgpKTsKICAgICAgICAgbV9yYXJlRGF0YS0+bV9kaXJlY3RFdmFsQ29kZUNh
Y2hlLnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOworICAgIH0KICAgICB2aXNpdG9yLmFwcGVuZFZh
bHVlcyhtX2NvbnN0YW50UmVnaXN0ZXJzLmRhdGEoKSwgbV9jb25zdGFudFJlZ2lzdGVycy5zaXpl
KCkpOwogICAgIGZvciAoYXV0byYgZnVuY3Rpb25FeHByIDogbV9mdW5jdGlvbkV4cHJzKQogICAg
ICAgICB2aXNpdG9yLmFwcGVuZChmdW5jdGlvbkV4cHIpOwpAQCAtMTg0OCw3ICsxOTQwLDggQEAg
dm9pZCBDb2RlQmxvY2s6OnN0cm9uZ2x5VmlzaXRTdHJvbmdSZWZlcgogI2VuZGlmCiB9CiAKLXZv
aWQgQ29kZUJsb2NrOjpzdHJvbmdseVZpc2l0V2Vha1JlZmVyZW5jZXMoY29uc3QgQ29uY3VycmVu
dEpTTG9ja2VyJiwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNp
dG9yPgordm9pZCBDb2RlQmxvY2s6OnN0cm9uZ2x5VmlzaXRXZWFrUmVmZXJlbmNlcyhjb25zdCBD
b25jdXJyZW50SlNMb2NrZXImLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFVOVVNFRF9QQVJB
TSh2aXNpdG9yKTsKIApAQCAtMTg3NSw2ICsxOTY4LDkgQEAgdm9pZCBDb2RlQmxvY2s6OnN0cm9u
Z2x5VmlzaXRXZWFrUmVmZXJlbgogI2VuZGlmICAgIAogfQogCit0ZW1wbGF0ZSB2b2lkIENvZGVC
bG9jazo6c3Ryb25nbHlWaXNpdFdlYWtSZWZlcmVuY2VzKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tl
ciYsIFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIENvZGVCbG9jazo6c3Ryb25nbHlWaXNp
dFdlYWtSZWZlcmVuY2VzKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIEFic3RyYWN0U2xvdFZp
c2l0b3ImKTsKKwogQ29kZUJsb2NrKiBDb2RlQmxvY2s6OmJhc2VsaW5lQWx0ZXJuYXRpdmUoKQog
ewogI2lmIEVOQUJMRShKSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Q29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NvZGVCbG9jay5oCShyZXZpc2lvbiAyNzI3MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTIwMSwxMCArMjAxLDExIEBA
IHB1YmxpYzoKICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTIzNjc3CiAgICAgQ29kZUJsb2NrKiBiYXNlbGluZVZlcnNpb24oKTsKIAorICAgIERFQ0xBUkVf
VklTSVRfQ0hJTERSRU47CisKICAgICBzdGF0aWMgc2l6ZV90IGVzdGltYXRlZFNpemUoSlNDZWxs
KiwgVk0mKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNp
dG9yJik7CiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKLSAgICB2b2lkIHZpc2l0
Q2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX0lOU1RBTkNFX1ZJU0lUX0NISUxE
UkVOOwogICAgIHZvaWQgZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoVk0mKTsKIAogICAgIHZvaWQg
bm90aWZ5TGV4aWNhbEJpbmRpbmdVcGRhdGUoKTsKQEAgLTk2MywxNiArOTY0LDE2IEBAIHByaXZh
dGU6CiAgICAgICAgIG1fY29uc3RhbnRSZWdpc3RlcnNbcmVnLnRvQ29uc3RhbnRJbmRleCgpXS5z
ZXQoKm1fdm0sIHRoaXMsIHZhbHVlKTsKICAgICB9CiAKLSAgICBib29sIHNob3VsZFZpc2l0U3Ry
b25nbHkoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJik7CisgICAgYm9vbCBzaG91bGRWaXNpdFN0
cm9uZ2x5KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIEFic3RyYWN0U2xvdFZpc2l0b3ImKTsK
ICAgICBib29sIHNob3VsZEpldHRpc29uRHVlVG9XZWFrUmVmZXJlbmNlKFZNJik7Ci0gICAgYm9v
bCBzaG91bGRKZXR0aXNvbkR1ZVRvT2xkQWdlKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYpOwor
ICAgIGJvb2wgc2hvdWxkSmV0dGlzb25EdWVUb09sZEFnZShjb25zdCBDb25jdXJyZW50SlNMb2Nr
ZXImLCBBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAgICAgCi0gICAgdm9pZCBwcm9wYWdhdGVUcmFu
c2l0aW9ucyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBTbG90VmlzaXRvciYpOwotICAgIHZv
aWQgZGV0ZXJtaW5lTGl2ZW5lc3MoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgU2xvdFZpc2l0
b3ImKTsKKyAgICB2b2lkIHByb3BhZ2F0ZVRyYW5zaXRpb25zKGNvbnN0IENvbmN1cnJlbnRKU0xv
Y2tlciYsIEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKKyAgICB2b2lkIGRldGVybWluZUxpdmVuZXNz
KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKICAgICAg
ICAgCi0gICAgdm9pZCBzdHJvbmdseVZpc2l0U3Ryb25nUmVmZXJlbmNlcyhjb25zdCBDb25jdXJy
ZW50SlNMb2NrZXImLCBTbG90VmlzaXRvciYpOwotICAgIHZvaWQgc3Ryb25nbHlWaXNpdFdlYWtS
ZWZlcmVuY2VzKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIFNsb3RWaXNpdG9yJik7Ci0gICAg
dm9pZCB2aXNpdE9TUkV4aXRUYXJnZXRzKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIFNsb3RW
aXNpdG9yJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCBzdHJvbmdseVZp
c2l0U3Ryb25nUmVmZXJlbmNlcyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBWaXNpdG9yJik7
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCBzdHJvbmdseVZpc2l0V2Vha1Jl
ZmVyZW5jZXMoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgVmlzaXRvciYpOworICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgdmlzaXRPU1JFeGl0VGFyZ2V0cyhjb25zdCBDb25j
dXJyZW50SlNMb2NrZXImLCBWaXNpdG9yJik7CiAKICAgICB1bnNpZ25lZCBudW1iZXJPZk5vbkFy
Z3VtZW50VmFsdWVQcm9maWxlcygpIHsgcmV0dXJuIG1fbnVtYmVyT2ZOb25Bcmd1bWVudFZhbHVl
UHJvZmlsZXM7IH0KICAgICB1bnNpZ25lZCB0b3RhbE51bWJlck9mVmFsdWVQcm9maWxlcygpIHsg
cmV0dXJuIG51bWJlck9mQXJndW1lbnRWYWx1ZVByb2ZpbGVzKCkgKyBudW1iZXJPZk5vbkFyZ3Vt
ZW50VmFsdWVQcm9maWxlcygpOyB9CkBAIC0xMDExLDYgKzEwMTIsNyBAQCBwcml2YXRlOgogICAg
IHVuc2lnbmVkIG1fYnl0ZWNvZGVDb3N0IHsgMCB9OwogICAgIFZpcnR1YWxSZWdpc3RlciBtX3Nj
b3BlUmVnaXN0ZXI7CiAgICAgbXV0YWJsZSBDb2RlQmxvY2tIYXNoIG1faGFzaDsKKyAgICBib29s
IG1fdmlzaXRDaGlsZHJlblNraXBwZWREdWVUb09sZEFnZSB7IGZhbHNlIH07CiAKICAgICBXcml0
ZUJhcnJpZXI8VW5saW5rZWRDb2RlQmxvY2s+IG1fdW5saW5rZWRDb2RlOwogICAgIFdyaXRlQmFy
cmllcjxTY3JpcHRFeGVjdXRhYmxlPiBtX293bmVyRXhlY3V0YWJsZTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9EZWxldGVCeUlkVmFyaWFudC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0RlbGV0ZUJ5SWRWYXJpYW50LmNwcAko
cmV2aXNpb24gMjcyNzEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0RlbGV0
ZUJ5SWRWYXJpYW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODgsMTIgKzg4LDEyIEBAIGJvb2wg
RGVsZXRlQnlJZFZhcmlhbnQ6OndyaXRlc1N0cnVjdHVyZXMKICAgICByZXR1cm4gISFuZXdTdHJ1
Y3R1cmUoKTsKIH0KIAotdm9pZCBEZWxldGVCeUlkVmFyaWFudDo6dmlzaXRBZ2dyZWdhdGUoU2xv
dFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIERlbGV0ZUJ5SWRWYXJpYW50Ojp2aXNpdEFnZ3JlZ2F0
ZShBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIG1faWRlbnRpZmllci52aXNp
dEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKIH0KIAotdm9pZCBEZWxldGVCeUlkVmFyaWFudDo6bWFya0lm
Q2hlYXAoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIERlbGV0ZUJ5SWRWYXJpYW50OjptYXJr
SWZDaGVhcChBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGlmIChtX29sZFN0
cnVjdHVyZSkKICAgICAgICAgbV9vbGRTdHJ1Y3R1cmUtPm1hcmtJZkNoZWFwKHZpc2l0b3IpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0RlbGV0ZUJ5SWRWYXJpYW50LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0RlbGV0ZUJ5SWRW
YXJpYW50LmgJKHJldmlzaW9uIDI3MjcxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9EZWxldGVCeUlkVmFyaWFudC5oCSh3b3JraW5nIGNvcHkpCkBAIC02MSw4ICs2MSw4IEBA
IHB1YmxpYzoKIAogICAgIGJvb2wgYXR0ZW1wdFRvTWVyZ2UoY29uc3QgRGVsZXRlQnlJZFZhcmlh
bnQmIG90aGVyKTsKIAotICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImKTsKLSAg
ICB2b2lkIG1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJik7CisgICAgdm9pZCB2aXNpdEFnZ3JlZ2F0
ZShBYnN0cmFjdFNsb3RWaXNpdG9yJik7CisgICAgdm9pZCBtYXJrSWZDaGVhcChBYnN0cmFjdFNs
b3RWaXNpdG9yJik7CiAgICAgYm9vbCBmaW5hbGl6ZShWTSYpOwogCiAgICAgdm9pZCBkdW1wKFBy
aW50U3RyZWFtJikgY29uc3Q7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
RGVsZXRlQnlTdGF0dXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9EZWxldGVCeVN0YXR1cy5jcHAJKHJldmlzaW9uIDI3MjcxMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9EZWxldGVCeVN0YXR1cy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI1NCwxMyArMjU0LDEzIEBAIENhY2hlYWJsZUlkZW50aWZpZXIgRGVsZXRlQnlTdGF0dXM6
OnNpbmcKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi12b2lkIERlbGV0ZUJ5U3RhdHVzOjp2aXNp
dEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgRGVsZXRlQnlTdGF0dXM6OnZp
c2l0QWdncmVnYXRlKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgZm9yIChE
ZWxldGVCeUlkVmFyaWFudCYgdmFyaWFudCA6IG1fdmFyaWFudHMpCiAgICAgICAgIHZhcmlhbnQu
dmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7CiB9CiAKLXZvaWQgRGVsZXRlQnlTdGF0dXM6Om1hcmtJ
ZkNoZWFwKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBEZWxldGVCeVN0YXR1czo6bWFya0lm
Q2hlYXAoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBmb3IgKERlbGV0ZUJ5
SWRWYXJpYW50JiB2YXJpYW50IDogbV92YXJpYW50cykKICAgICAgICAgdmFyaWFudC5tYXJrSWZD
aGVhcCh2aXNpdG9yKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9EZWxl
dGVCeVN0YXR1cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9EZWxldGVCeVN0YXR1cy5oCShyZXZpc2lvbiAyNzI3MTApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvRGVsZXRlQnlTdGF0dXMuaAkod29ya2luZyBjb3B5KQpAQCAtODEsOCAr
ODEsOCBAQCBwdWJsaWM6CiAgICAgLy8gQXR0ZW1wdHMgdG8gcmVkdWNlIHRoZSBzZXQgb2YgdmFy
aWFudHMgdG8gZml0IHRoZSBnaXZlbiBzdHJ1Y3R1cmUgc2V0LiBUaGlzIG1heSBiZSBhcHByb3hp
bWF0ZS4KICAgICB2b2lkIGZpbHRlcihjb25zdCBTdHJ1Y3R1cmVTZXQmKTsKIAotICAgIHZvaWQg
dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImKTsKLSAgICB2b2lkIG1hcmtJZkNoZWFwKFNsb3RW
aXNpdG9yJik7CisgICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShBYnN0cmFjdFNsb3RWaXNpdG9yJik7
CisgICAgdm9pZCBtYXJrSWZDaGVhcChBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAgICAgYm9vbCBm
aW5hbGl6ZShWTSYpOwogCiAgICAgYm9vbCBhcHBlbmRWYXJpYW50KGNvbnN0IERlbGV0ZUJ5SWRW
YXJpYW50Jik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRGlyZWN0RXZh
bENvZGVDYWNoZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0RpcmVjdEV2YWxDb2RlQ2FjaGUuY3BwCShyZXZpc2lvbiAyNzI3MTApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRGlyZWN0RXZhbENvZGVDYWNoZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTMwLDYgKzMwLDkgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKK2V4dGVybiB1bnNp
Z25lZCBtbGFtVGltZTsKK2V4dGVybiBib29sIG1sYW1WZXJib3NlOworCiB2b2lkIERpcmVjdEV2
YWxDb2RlQ2FjaGU6OnNldFNsb3coSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDZWxs
KiBvd25lciwgY29uc3QgU3RyaW5nJiBldmFsU291cmNlLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRl
SW5kZXgsIERpcmVjdEV2YWxFeGVjdXRhYmxlKiBldmFsRXhlY3V0YWJsZSkKIHsKICAgICBpZiAo
IWV2YWxFeGVjdXRhYmxlLT5hbGxvd0RpcmVjdEV2YWxDYWNoZSgpKQpAQCAtNDUsMTMgKzQ4LDE4
IEBAIHZvaWQgRGlyZWN0RXZhbENvZGVDYWNoZTo6Y2xlYXIoKQogICAgIG1fY2FjaGVNYXAuY2xl
YXIoKTsKIH0KIAotdm9pZCBEaXJlY3RFdmFsQ29kZUNhY2hlOjp2aXNpdEFnZ3JlZ2F0ZShTbG90
VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIERpcmVj
dEV2YWxDb2RlQ2FjaGU6OnZpc2l0QWdncmVnYXRlKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAg
TG9ja0hvbGRlciBsb2NrZXIobV9sb2NrKTsKICAgICBFdmFsQ2FjaGVNYXA6Oml0ZXJhdG9yIGVu
ZCA9IG1fY2FjaGVNYXAuZW5kKCk7Ci0gICAgZm9yIChFdmFsQ2FjaGVNYXA6Oml0ZXJhdG9yIHB0
ciA9IG1fY2FjaGVNYXAuYmVnaW4oKTsgcHRyICE9IGVuZDsgKytwdHIpCisgICAgZm9yIChFdmFs
Q2FjaGVNYXA6Oml0ZXJhdG9yIHB0ciA9IG1fY2FjaGVNYXAuYmVnaW4oKTsgcHRyICE9IGVuZDsg
KytwdHIpIHsKKyAgICAgICAgaWYgKG1sYW1WZXJib3NlKSBkYXRhTG9nTG4oIiAgICBtbGFtIERp
cmVjdEV2YWxDb2RlQ2FjaGU8IiwgUmF3UG9pbnRlcih0aGlzKSwgIj46OnZpc2l0QWdncmVnYXRl
OiBleGVjdXRhYmxlPCIsIFJhd1BvaW50ZXIocHRyLT52YWx1ZS5nZXQoKSksICI+IDxnYyMiLCBt
bGFtVGltZSwgIj4gdmlzaXRvciAiLCB2aXNpdG9yLmNvZGVOYW1lKCkpOwogICAgICAgICB2aXNp
dG9yLmFwcGVuZChwdHItPnZhbHVlKTsKKyAgICB9CiB9CiAKLX0gLy8gbmFtZXNwYWNlIEpTQwor
dGVtcGxhdGUgdm9pZCBEaXJlY3RFdmFsQ29kZUNhY2hlOjp2aXNpdEFnZ3JlZ2F0ZShBYnN0cmFj
dFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIERpcmVjdEV2YWxDb2RlQ2FjaGU6OnZpc2l0
QWdncmVnYXRlKFNsb3RWaXNpdG9yJik7CiAKK30gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0RpcmVjdEV2YWxDb2RlQ2FjaGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRGlyZWN0RXZhbENvZGVDYWNo
ZS5oCShyZXZpc2lvbiAyNzI3MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
RGlyZWN0RXZhbENvZGVDYWNoZS5oCSh3b3JraW5nIGNvcHkpCkBAIC05Nyw3ICs5Nyw3IEBAIG5h
bWVzcGFjZSBKU0MgewogCiAgICAgICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1f
Y2FjaGVNYXAuaXNFbXB0eSgpOyB9CiAKLSAgICAgICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShTbG90
VmlzaXRvciYpOworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIHZpc2l0
QWdncmVnYXRlKFZpc2l0b3ImKTsKIAogICAgICAgICB2b2lkIGNsZWFyKCk7CiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhlY3V0YWJs
ZVRvQ29kZUJsb2NrRWRnZS5jcHAJKHJldmlzaW9uIDI3MjcxMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9FeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMjAgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC0zMyw2ICszMyw5IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCitleHRlcm4gdW5zaWduZWQg
bWxhbVRpbWU7CitleHRlcm4gYm9vbCBtbGFtVmVyYm9zZTsKKwogY29uc3QgQ2xhc3NJbmZvIEV4
ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2U6OnNfaW5mbyA9IHsgIkV4ZWN1dGFibGVUb0NvZGVCbG9j
a0VkZ2UiLCBudWxscHRyLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEV4
ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UpIH07CiAKIFN0cnVjdHVyZSogRXhlY3V0YWJsZVRvQ29k
ZUJsb2NrRWRnZTo6Y3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCkBAIC01Myw3ICs1Niw4IEBAIHZvaWQgRXhlY3V0
YWJsZVRvQ29kZUJsb2NrRWRnZTo6ZmluaXNoQ3IKICAgICBBU1NFUlQoIWlzQWN0aXZlKCkpOwog
fQogCi12b2lkIEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2U6OnZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+
Cit2b2lkIEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2U6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2Vs
bCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBWTSYgdm0gPSB2aXNpdG9yLnZtKCk7
CiAgICAgRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZSogZWRnZSA9IGpzQ2FzdDxFeGVjdXRhYmxl
VG9Db2RlQmxvY2tFZGdlKj4oY2VsbCk7CkBAIC02MSw3ICs2NSw4IEBAIHZvaWQgRXhlY3V0YWJs
ZVRvQ29kZUJsb2NrRWRnZTo6dmlzaXRDaGkKICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKGNlbGws
IHZpc2l0b3IpOwogCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBlZGdlLT5tX2NvZGVCbG9j
ay5nZXQoKTsKLSAgICAKKyAgICBpZiAobWxhbVZlcmJvc2UpIGRhdGFMb2dMbigiICAgIG1sYW0g
RXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZTwiLCBSYXdQb2ludGVyKGNlbGwpLCAiPjo6dmlzaXRD
aGlsZHJlbkltcGw6IFNURVAgMTogQ29kZUJsb2NrPCIsIFJhd1BvaW50ZXIoY29kZUJsb2NrKSwg
Ij4gPGdjIyIsIG1sYW1UaW1lLCAiPiB2aXNpdG9yICIsIHZpc2l0b3IuY29kZU5hbWUoKSwgIiB8
IGVkZ2UtPmlzQWN0aXZlKCkgIiwgZWRnZS0+aXNBY3RpdmUoKSk7CisKICAgICAvLyBJdCdzIHBv
c3NpYmxlIGZvciBzb21lb25lIHRvIGhvbGQgYSBwb2ludGVyIHRvIHRoZSBlZGdlIGFmdGVyIHRo
ZSBlZGdlIGhhcyBjbGVhcmVkIGl0cyB3ZWFrCiAgICAgLy8gcmVmZXJlbmNlIHRvIHRoZSBjb2Rl
QmxvY2suIEluIGEgY29uc2VydmF0aXZlIEdDIGxpa2Ugb3VycywgdGhhdCBjb3VsZCBoYXBwZW4g
YXQgcmFuZG9tIGZvcgogICAgIC8vIG5vIGdvb2QgcmVhc29uIGFuZCBpdCdzIFRvdGFsbHkgT0sg
KFRNKS4gU2VlIGZpbmFsaXplVW5jb25kaXRpb25hbGx5KCkgZm9yIHdoZXJlIHdlIGNsZWFyCkBA
IC03NSwxMSArODAsNTEgQEAgdm9pZCBFeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlOjp2aXNpdENo
aQogICAgIH0KICAgICAKICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+
bV9sb2NrKTsKLSAgICAKLSAgICBpZiAoY29kZUJsb2NrLT5zaG91bGRWaXNpdFN0cm9uZ2x5KGxv
Y2tlcikpCisKKyAgICAvLyBtbGFtIFRFU1QKKyAgICBhdXRvIHRpbWVUb0xpdmUgPSBbXSAoSklU
VHlwZSBqaXRUeXBlKSAtPiBTZWNvbmRzCisgICAgeworICAgICAgICBpZiAoVU5MSUtFTFkoT3B0
aW9uczo6dXNlRWFnZXJDb2RlQmxvY2tKZXR0aXNvblRpbWluZygpKSkgeworICAgICAgICAgICAg
c3dpdGNoIChqaXRUeXBlKSB7CisgICAgICAgICAgICBjYXNlIEpJVFR5cGU6OkludGVycHJldGVy
VGh1bms6CisgICAgICAgICAgICAgICAgcmV0dXJuIDEwX21zOworICAgICAgICAgICAgY2FzZSBK
SVRUeXBlOjpCYXNlbGluZUpJVDoKKyAgICAgICAgICAgICAgICByZXR1cm4gMzBfbXM7CisgICAg
ICAgICAgICBjYXNlIEpJVFR5cGU6OkRGR0pJVDoKKyAgICAgICAgICAgICAgICByZXR1cm4gNDBf
bXM7CisgICAgICAgICAgICBjYXNlIEpJVFR5cGU6OkZUTEpJVDoKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gMTIwX21zOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1
cm4gU2Vjb25kczo6aW5maW5pdHkoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAg
ICAgIHN3aXRjaCAoaml0VHlwZSkgeworICAgICAgICBjYXNlIEpJVFR5cGU6OkludGVycHJldGVy
VGh1bms6CisgICAgICAgICAgICByZXR1cm4gNV9zOworICAgICAgICBjYXNlIEpJVFR5cGU6OkJh
c2VsaW5lSklUOgorICAgICAgICAgICAgLy8gRWZmZWN0aXZlbHkgMTAgYWRkaXRpb25hbCBzZWNv
bmRzLCBzaW5jZSBCYXNlbGluZUpJVCBhbmQKKyAgICAgICAgICAgIC8vIEludGVycHJldGVyVGh1
bmsgc2hhcmUgYSBDb2RlQmxvY2suCisgICAgICAgICAgICByZXR1cm4gMTVfczsKKyAgICAgICAg
Y2FzZSBKSVRUeXBlOjpERkdKSVQ6CisgICAgICAgICAgICByZXR1cm4gMjBfczsKKyAgICAgICAg
Y2FzZSBKSVRUeXBlOjpGVExKSVQ6CisgICAgICAgICAgICByZXR1cm4gNjBfczsKKyAgICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBTZWNvbmRzOjppbmZpbml0eSgpOworICAgICAg
ICB9CisgICAgfTsKKyAgICAvLyBtbGFtIFRFU1QgKi8KKworICAgIGlmIChtbGFtVmVyYm9zZSkg
eworICAgICAgICBhdXRvIHRpbWVTaW5jZUNyZWF0aW9uID0gY29kZUJsb2NrLT50aW1lU2luY2VD
cmVhdGlvbigpOworICAgICAgICBhdXRvIHRpbWVUb0xpdmUxID0gdGltZVRvTGl2ZShjb2RlQmxv
Y2stPmppdFR5cGUoKSk7CisgICAgICAgIGRhdGFMb2dMbigiICAgIG1sYW0gRXhlY3V0YWJsZVRv
Q29kZUJsb2NrRWRnZTwiLCBSYXdQb2ludGVyKGNlbGwpLCAiPjo6dmlzaXRDaGlsZHJlbkltcGw6
IFNURVAgMS41OiBDb2RlQmxvY2s8IiwgUmF3UG9pbnRlcihjb2RlQmxvY2spLCAiPiA8Z2MjIiwg
bWxhbVRpbWUsICI+IHZpc2l0b3IgIiwgdmlzaXRvci5jb2RlTmFtZSgpLCAiIHwgY29kZUJsb2Nr
LT5zaG91bGRWaXNpdFN0cm9uZ2x5KGxvY2tlciwgdmlzaXRvcikgIiwgY29kZUJsb2NrLT5zaG91
bGRWaXNpdFN0cm9uZ2x5KGxvY2tlciwgdmlzaXRvciksICIgfCBzaG91bGRKZXR0aXNvbkR1ZVRv
T2xkQWdlICIsIGNvZGVCbG9jay0+c2hvdWxkSmV0dGlzb25EdWVUb09sZEFnZShsb2NrZXIsIHZp
c2l0b3IpLCAiIHwgSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUICIsIEpJVENvZGU6OmlzT3B0aW1p
emluZ0pJVChjb2RlQmxvY2stPmppdFR5cGUoKSksICIgfCB2aXNpdG9yLmlzTWFya2VkKGNiKSAi
LCB2aXNpdG9yLmlzTWFya2VkKGNvZGVCbG9jayksICIgfCBjb2RlQmxvY2stPmppdFR5cGUoKSAi
LCBjb2RlQmxvY2stPmppdFR5cGUoKSwgIiB8IHRpbWVTaW5jZUNyZWF0aW9uKCkgIiwgdGltZVNp
bmNlQ3JlYXRpb24sICIgPCB0aW1lVG9MaXZlKGppdFR5cGUoKSAiLCB0aW1lVG9MaXZlMSwgIiA9
PiAiLCAodGltZVNpbmNlQ3JlYXRpb24gPCB0aW1lVG9MaXZlMSkpOworICAgIH0KKyAgICBpZiAo
Y29kZUJsb2NrLT5zaG91bGRWaXNpdFN0cm9uZ2x5KGxvY2tlciwgdmlzaXRvcikpCiAgICAgICAg
IHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQoY29kZUJsb2NrKTsKICAgICAKLSAgICBpZiAoIXZt
LmhlYXAuaXNNYXJrZWQoY29kZUJsb2NrKSkKKyAgICBpZiAoIXZpc2l0b3IuaXNNYXJrZWQoY29k
ZUJsb2NrKSkKICAgICAgICAgdm0uZXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZXNXaXRoRmluYWxp
emVycy5hZGQoZWRnZSk7CiAgICAgCiAgICAgaWYgKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChj
b2RlQmxvY2stPmppdFR5cGUoKSkpIHsKQEAgLTExNCwxMCArMTU5LDEzIEBAIHZvaWQgRXhlY3V0
YWJsZVRvQ29kZUJsb2NrRWRnZTo6dmlzaXRDaGkKICAgICAvLyB3aWxsIGtlZXAgZml4cG9pbnRp
bmcgdW50aWwgdGhlIGVuZC4KICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKGNvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpOwogICAgIHZtLmV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2VzV2l0
aENvbnN0cmFpbnRzLmFkZChlZGdlKTsKLSAgICBlZGdlLT5ydW5Db25zdHJhaW50KGxvY2tlciwg
dm0sIHZpc2l0b3IpOworICAgIGlmIChtbGFtVmVyYm9zZSkgZGF0YUxvZ0xuKCIgICAgbWxhbSBF
eGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlPCIsIFJhd1BvaW50ZXIoY2VsbCksICI+Ojp2aXNpdENo
aWxkcmVuSW1wbDogU1RFUCAyOiBDb2RlQmxvY2s8IiwgUmF3UG9pbnRlcihjb2RlQmxvY2spLCAi
PiA8Z2MjIiwgbWxhbVRpbWUsICI+IHZpc2l0b3IgIiwgdmlzaXRvci5jb2RlTmFtZSgpKTsKKyAg
ICBlZGdlLT5ydW5Db25zdHJhaW50KGxvY2tlciwgdm0sIHZpc2l0b3IpOyAvLyBtbGFtIEZJWE1F
CiB9CiAKLXZvaWQgRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZTo6dmlzaXRPdXRwdXRDb25zdHJh
aW50cyhKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorREVGSU5FX1ZJU0lUX0NI
SUxEUkVOKEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UpOworCit2b2lkIEV4ZWN1dGFibGVUb0Nv
ZGVCbG9ja0VkZ2U6OnZpc2l0T3V0cHV0Q29uc3RyYWludHMoSlNDZWxsKiBjZWxsLCBBYnN0cmFj
dFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFZNJiB2bSA9IHZpc2l0b3Iudm0oKTsKICAg
ICBFeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlKiBlZGdlID0ganNDYXN0PEV4ZWN1dGFibGVUb0Nv
ZGVCbG9ja0VkZ2UqPihjZWxsKTsKQEAgLTE4NiwxNiArMjM0LDIwIEBAIEV4ZWN1dGFibGVUb0Nv
ZGVCbG9ja0VkZ2U6OkV4ZWN1dGFibGVUb0MKIHsKIH0KIAotdm9pZCBFeGVjdXRhYmxlVG9Db2Rl
QmxvY2tFZGdlOjpydW5Db25zdHJhaW50KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYgbG9ja2Vy
LCBWTSYgdm0sIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBFeGVjdXRhYmxlVG9Db2RlQmxv
Y2tFZGdlOjpydW5Db25zdHJhaW50KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYgbG9ja2VyLCBW
TSYgdm0sIEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgQ29kZUJsb2NrKiBj
b2RlQmxvY2sgPSBtX2NvZGVCbG9jay5nZXQoKTsKICAgICAKKyAgICBpZiAobWxhbVZlcmJvc2Up
IGRhdGFMb2dMbigiICAgIG1sYW0gRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZTwiLCBSYXdQb2lu
dGVyKHRoaXMpLCAiPjo6cnVuQ29uc3RyYWludDE6IFNURVAgMTogQ29kZUJsb2NrPCIsIFJhd1Bv
aW50ZXIoY29kZUJsb2NrKSwgIj4gPGdjIyIsIG1sYW1UaW1lLCAiPiB2aXNpdG9yICIsIHZpc2l0
b3IuY29kZU5hbWUoKSk7CiAgICAgY29kZUJsb2NrLT5wcm9wYWdhdGVUcmFuc2l0aW9ucyhsb2Nr
ZXIsIHZpc2l0b3IpOworICAgIGlmIChtbGFtVmVyYm9zZSkgZGF0YUxvZ0xuKCIgICAgbWxhbSBF
eGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlPCIsIFJhd1BvaW50ZXIodGhpcyksICI+OjpydW5Db25z
dHJhaW50MTogU1RFUCAyOiBDb2RlQmxvY2s8IiwgUmF3UG9pbnRlcihjb2RlQmxvY2spLCAiPiA8
Z2MjIiwgbWxhbVRpbWUsICI+IHZpc2l0b3IgIiwgdmlzaXRvci5jb2RlTmFtZSgpKTsKICAgICBj
b2RlQmxvY2stPmRldGVybWluZUxpdmVuZXNzKGxvY2tlciwgdmlzaXRvcik7Ci0gICAgCi0gICAg
aWYgKHZtLmhlYXAuaXNNYXJrZWQoY29kZUJsb2NrKSkKKyAgICBpZiAobWxhbVZlcmJvc2UpIGRh
dGFMb2dMbigiICAgIG1sYW0gRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZTwiLCBSYXdQb2ludGVy
KHRoaXMpLCAiPjo6cnVuQ29uc3RyYWludDE6IFNURVAgMzogQ29kZUJsb2NrPCIsIFJhd1BvaW50
ZXIoY29kZUJsb2NrKSwgIj4gPGdjIyIsIG1sYW1UaW1lLCAiPiB2aXNpdG9yICIsIHZpc2l0b3Iu
Y29kZU5hbWUoKSk7CisKKyAgICBpZiAodmlzaXRvci5pc01hcmtlZChjb2RlQmxvY2spKSB7Cisg
ICAgICAgIGlmIChtbGFtVmVyYm9zZSkgZGF0YUxvZ0xuKCIgICAgbWxhbSBFeGVjdXRhYmxlVG9D
b2RlQmxvY2tFZGdlPCIsIFJhd1BvaW50ZXIodGhpcyksICI+OjpydW5Db25zdHJhaW50MTogU1RF
UCA0OiBDb2RlQmxvY2s8IiwgUmF3UG9pbnRlcihjb2RlQmxvY2spLCAiPiA8Z2MjIiwgbWxhbVRp
bWUsICI+IHZpc2l0b3IgIiwgdmlzaXRvci5jb2RlTmFtZSgpKTsKICAgICAgICAgdm0uZXhlY3V0
YWJsZVRvQ29kZUJsb2NrRWRnZXNXaXRoQ29uc3RyYWludHMucmVtb3ZlKHRoaXMpOworICAgIH0K
IH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCi0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9FeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UuaAkocmV2
aXNpb24gMjcyNzEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGFi
bGVUb0NvZGVCbG9ja0VkZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTUzLDkgKzUzLDkgQEAgcHVi
bGljOgogICAgIERFQ0xBUkVfSU5GTzsKIAogICAgIENvZGVCbG9jayogY29kZUJsb2NrKCkgY29u
c3QgeyByZXR1cm4gbV9jb2RlQmxvY2suZ2V0KCk7IH0KLSAgICAKLSAgICBzdGF0aWMgdm9pZCB2
aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7Ci0gICAgc3RhdGljIHZvaWQgdmlz
aXRPdXRwdXRDb25zdHJhaW50cyhKU0NlbGwqLCBTbG90VmlzaXRvciYpOworCisgICAgREVDTEFS
RV9WSVNJVF9DSElMRFJFTjsKKyAgICBzdGF0aWMgdm9pZCB2aXNpdE91dHB1dENvbnN0cmFpbnRz
KEpTQ2VsbCosIEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKICAgICB2b2lkIGZpbmFsaXplVW5jb25k
aXRpb25hbGx5KFZNJik7CiAgICAgCiAgICAgc3RhdGljIENvZGVCbG9jayogdW53cmFwKEV4ZWN1
dGFibGVUb0NvZGVCbG9ja0VkZ2UqIGVkZ2UpCkBAIC04MSw5ICs4MSw5IEBAIHByaXZhdGU6CiAg
ICAgdm9pZCBhY3RpdmF0ZSgpOwogICAgIHZvaWQgZGVhY3RpdmF0ZSgpOwogICAgIGJvb2wgaXNB
Y3RpdmUoKSBjb25zdDsKLSAgICAKLSAgICB2b2lkIHJ1bkNvbnN0cmFpbnQoY29uc3QgQ29uY3Vy
cmVudEpTTG9ja2VyJiwgVk0mLCBTbG90VmlzaXRvciYpOwotICAgIAorCisgICAgdm9pZCBydW5D
b25zdHJhaW50KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIFZNJiwgQWJzdHJhY3RTbG90Vmlz
aXRvciYpOworCiAgICAgV3JpdGVCYXJyaWVyPENvZGVCbG9jaz4gbV9jb2RlQmxvY2s7CiB9Owog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFZhcmlhbnQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkVmFy
aWFudC5jcHAJKHJldmlzaW9uIDI3MjcxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9HZXRCeUlkVmFyaWFudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1NiwxMiArMTU2LDEy
IEBAIGJvb2wgR2V0QnlJZFZhcmlhbnQ6OmF0dGVtcHRUb01lcmdlKGNvbnMKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIAotdm9pZCBHZXRCeUlkVmFyaWFudDo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0
b3ImIHZpc2l0b3IpCit2b2lkIEdldEJ5SWRWYXJpYW50Ojp2aXNpdEFnZ3JlZ2F0ZShBYnN0cmFj
dFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIG1faWRlbnRpZmllci52aXNpdEFnZ3JlZ2F0
ZSh2aXNpdG9yKTsKIH0KIAotdm9pZCBHZXRCeUlkVmFyaWFudDo6bWFya0lmQ2hlYXAoU2xvdFZp
c2l0b3ImIHZpc2l0b3IpCit2b2lkIEdldEJ5SWRWYXJpYW50OjptYXJrSWZDaGVhcChBYnN0cmFj
dFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIG1fc3RydWN0dXJlU2V0Lm1hcmtJZkNoZWFw
KHZpc2l0b3IpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5
SWRWYXJpYW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0dldEJ5SWRWYXJpYW50LmgJKHJldmlzaW9uIDI3MjcxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9HZXRCeUlkVmFyaWFudC5oCSh3b3JraW5nIGNvcHkpCkBAIC03Nyw4ICs3
Nyw4IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgYXR0ZW1wdFRvTWVyZ2UoY29uc3QgR2V0QnlJZFZh
cmlhbnQmIG90aGVyKTsKICAgICAKLSAgICB2b2lkIHZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9y
Jik7Ci0gICAgdm9pZCBtYXJrSWZDaGVhcChTbG90VmlzaXRvciYpOworICAgIHZvaWQgdmlzaXRB
Z2dyZWdhdGUoQWJzdHJhY3RTbG90VmlzaXRvciYpOworICAgIHZvaWQgbWFya0lmQ2hlYXAoQWJz
dHJhY3RTbG90VmlzaXRvciYpOwogICAgIGJvb2wgZmluYWxpemUoVk0mKTsKICAgICAKICAgICB2
b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9HZXRCeVN0YXR1cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0dldEJ5U3RhdHVzLmNwcAkocmV2aXNpb24gMjcyNzEwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5U3RhdHVzLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNTMwLDcgKzUzMCw3IEBAIHZvaWQgR2V0QnlTdGF0dXM6OmZpbHRlcihjb25zdCBTdHJ1
Y3R1cmUKICAgICAgICAgbV9zdGF0ZSA9IE5vSW5mb3JtYXRpb247CiB9CiAKLXZvaWQgR2V0QnlT
dGF0dXM6OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBHZXRCeVN0
YXR1czo6dmlzaXRBZ2dyZWdhdGUoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAg
ICBpZiAoaXNNb2R1bGVOYW1lc3BhY2UoKSkKICAgICAgICAgbV9tb2R1bGVOYW1lc3BhY2VEYXRh
LT5tX2lkZW50aWZpZXIudmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7CkBAIC01MzgsMTIgKzUzOCwx
MyBAQCB2b2lkIEdldEJ5U3RhdHVzOjp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzCiAgICAgICAgIHZh
cmlhbnQudmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7CiB9CiAKLXZvaWQgR2V0QnlTdGF0dXM6Om1h
cmtJZkNoZWFwKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBHZXRCeVN0YXR1czo6bWFya0lm
Q2hlYXAoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBmb3IgKEdldEJ5SWRW
YXJpYW50JiB2YXJpYW50IDogbV92YXJpYW50cykKICAgICAgICAgdmFyaWFudC5tYXJrSWZDaGVh
cCh2aXNpdG9yKTsKIH0KIAorCiBib29sIEdldEJ5U3RhdHVzOjpmaW5hbGl6ZShWTSYgdm0pCiB7
CiAgICAgZm9yIChHZXRCeUlkVmFyaWFudCYgdmFyaWFudCA6IG1fdmFyaWFudHMpIHsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeVN0YXR1cy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeVN0YXR1cy5oCShyZXZpc2lv
biAyNzI3MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlTdGF0dXMu
aAkod29ya2luZyBjb3B5KQpAQCAtMTE4LDggKzExOCw4IEBAIHB1YmxpYzoKICAgICBKU01vZHVs
ZUVudmlyb25tZW50KiBtb2R1bGVFbnZpcm9ubWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fbW9kdWxl
TmFtZXNwYWNlRGF0YS0+bV9tb2R1bGVFbnZpcm9ubWVudDsgfQogICAgIFNjb3BlT2Zmc2V0IHNj
b3BlT2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9tb2R1bGVOYW1lc3BhY2VEYXRhLT5tX3Njb3Bl
T2Zmc2V0OyB9CiAgICAgCi0gICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYpOwot
ICAgIHZvaWQgbWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImKTsKKyAgICB2b2lkIHZpc2l0QWdncmVn
YXRlKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKKyAgICB2b2lkIG1hcmtJZkNoZWFwKEFic3RyYWN0
U2xvdFZpc2l0b3ImKTsKICAgICBib29sIGZpbmFsaXplKFZNJik7IC8vIFJldHVybiB0cnVlIGlm
IHRoaXMgZ2V0cyB0byBsaXZlLgogCiAgICAgYm9vbCBhcHBlbmRWYXJpYW50KGNvbnN0IEdldEJ5
SWRWYXJpYW50Jik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5CeUlk
U3RhdHVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
SW5CeUlkU3RhdHVzLmNwcAkocmV2aXNpb24gMjcyNzEwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0luQnlJZFN0YXR1cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1MSw3ICsy
NTEsNyBAQCB2b2lkIEluQnlJZFN0YXR1czo6ZmlsdGVyKGNvbnN0IFN0cnVjdHVyCiAgICAgICAg
IG1fc3RhdGUgPSBOb0luZm9ybWF0aW9uOwogfQogCi12b2lkIEluQnlJZFN0YXR1czo6bWFya0lm
Q2hlYXAoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIEluQnlJZFN0YXR1czo6bWFya0lmQ2hl
YXAoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBmb3IgKEluQnlJZFZhcmlh
bnQmIHZhcmlhbnQgOiBtX3ZhcmlhbnRzKQogICAgICAgICB2YXJpYW50Lm1hcmtJZkNoZWFwKHZp
c2l0b3IpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luQnlJZFN0YXR1
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbkJ5SWRT
dGF0dXMuaAkocmV2aXNpb24gMjcyNzEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0luQnlJZFN0YXR1cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDYsNyArMTA2LDcgQEAgcHVi
bGljOgogICAgIC8vIEF0dGVtcHRzIHRvIHJlZHVjZSB0aGUgc2V0IG9mIHZhcmlhbnRzIHRvIGZp
dCB0aGUgZ2l2ZW4gc3RydWN0dXJlIHNldC4gVGhpcyBtYXkgYmUgYXBwcm94aW1hdGUuCiAgICAg
dm9pZCBmaWx0ZXIoY29uc3QgU3RydWN0dXJlU2V0Jik7CiAgICAgCi0gICAgdm9pZCBtYXJrSWZD
aGVhcChTbG90VmlzaXRvciYpOworICAgIHZvaWQgbWFya0lmQ2hlYXAoQWJzdHJhY3RTbG90Vmlz
aXRvciYpOwogICAgIGJvb2wgZmluYWxpemUoVk0mKTsKIAogICAgIHZvaWQgZHVtcChQcmludFN0
cmVhbSYpIGNvbnN0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luQnlJ
ZFZhcmlhbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9JbkJ5SWRWYXJpYW50LmNwcAkocmV2aXNpb24gMjcyNzEwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0luQnlJZFZhcmlhbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NCw3
ICs2NCw3IEBAIGJvb2wgSW5CeUlkVmFyaWFudDo6YXR0ZW1wdFRvTWVyZ2UoY29uc3QKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBJbkJ5SWRWYXJpYW50OjptYXJrSWZDaGVhcChTbG90Vmlz
aXRvciYgdmlzaXRvcikKK3ZvaWQgSW5CeUlkVmFyaWFudDo6bWFya0lmQ2hlYXAoQWJzdHJhY3RT
bG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBtX3N0cnVjdHVyZVNldC5tYXJrSWZDaGVhcCh2
aXNpdG9yKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbkJ5SWRW
YXJpYW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lu
QnlJZFZhcmlhbnQuaAkocmV2aXNpb24gMjcyNzEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0luQnlJZFZhcmlhbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNTcsNyArNTcsNyBA
QCBwdWJsaWM6CiAKICAgICBib29sIGF0dGVtcHRUb01lcmdlKGNvbnN0IEluQnlJZFZhcmlhbnQm
IG90aGVyKTsKICAgICAKLSAgICB2b2lkIG1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJik7CisgICAg
dm9pZCBtYXJrSWZDaGVhcChBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAgICAgYm9vbCBmaW5hbGl6
ZShWTSYpOwogCiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW50ZXJuYWxGdW5jdGlvbkFsbG9jYXRpb25Qcm9m
aWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0ludGVy
bmFsRnVuY3Rpb25BbGxvY2F0aW9uUHJvZmlsZS5oCShyZXZpc2lvbiAyNzI3MTApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW50ZXJuYWxGdW5jdGlvbkFsbG9jYXRpb25Qcm9m
aWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDcgKzM5LDcgQEAgcHVibGljOgogICAgIFN0cnVj
dHVyZSogY3JlYXRlQWxsb2NhdGlvblN0cnVjdHVyZUZyb21CYXNlKFZNJiwgSlNHbG9iYWxPYmpl
Y3QqLCBKU0NlbGwqIG93bmVyLCBKU09iamVjdCogcHJvdG90eXBlLCBTdHJ1Y3R1cmUqIGJhc2Up
OwogCiAgICAgdm9pZCBjbGVhcigpIHsgbV9zdHJ1Y3R1cmUuY2xlYXIoKTsgfQotICAgIHZvaWQg
dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsgdmlzaXRvci5hcHBlbmQobV9z
dHJ1Y3R1cmUpOyB9CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCB2aXNpdEFn
Z3JlZ2F0ZShWaXNpdG9yJiB2aXNpdG9yKSB7IHZpc2l0b3IuYXBwZW5kKG1fc3RydWN0dXJlKTsg
fQogCiBwcml2YXRlOgogICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1fc3RydWN0dXJlOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09iamVjdEFsbG9jYXRpb25Qcm9m
aWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09iamVj
dEFsbG9jYXRpb25Qcm9maWxlLmgJKHJldmlzaW9uIDI3MjcxMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9PYmplY3RBbGxvY2F0aW9uUHJvZmlsZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC02NCw3ICs2NCw4IEBAIHByb3RlY3RlZDoKICAgICAgICAgQVNTRVJUKGlzTnVsbCgpKTsK
ICAgICB9CiAKLSAgICB2b2lkIHZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+CisgICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShW
aXNpdG9yJiB2aXNpdG9yKQogICAgIHsKICAgICAgICAgdmlzaXRvci5hcHBlbmQobV9zdHJ1Y3R1
cmUpOwogICAgIH0KQEAgLTExMCw3ICsxMTEsOCBAQCBwdWJsaWM6CiAgICAgICAgIEFTU0VSVChp
c051bGwoKSk7CiAgICAgfQogCi0gICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYg
dmlzaXRvcikKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgorICAgIHZvaWQgdmlzaXRB
Z2dyZWdhdGUoVmlzaXRvciYgdmlzaXRvcikKICAgICB7CiAgICAgICAgIEJhc2U6OnZpc2l0QWdn
cmVnYXRlKHZpc2l0b3IpOwogICAgICAgICB2aXNpdG9yLmFwcGVuZChtX3Byb3RvdHlwZSk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhp
Y0FjY2Vzcy5jcHAJKHJldmlzaW9uIDI3MjcxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1OCw3ICsz
NTgsNyBAQCBib29sIFBvbHltb3JwaGljQWNjZXNzOjp2aXNpdFdlYWsoVk0mIHZtCiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKLWJvb2wgUG9seW1vcnBoaWNBY2Nlc3M6OnByb3BhZ2F0ZVRyYW5zaXRp
b25zKFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBjb25zdAorYm9vbCBQb2x5bW9ycGhpY0FjY2Vzczo6
cHJvcGFnYXRlVHJhbnNpdGlvbnMoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikgY29uc3QK
IHsKICAgICBib29sIHJlc3VsdCA9IHRydWU7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IHNpemUoKTsgKytpKQpAQCAtMzY2LDcgKzM2Niw3IEBAIGJvb2wgUG9seW1vcnBoaWNBY2Nlc3M6
OnByb3BhZ2F0ZVRyYW5zaXQKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi12b2lkIFBvbHltb3Jw
aGljQWNjZXNzOjp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgUG9s
eW1vcnBoaWNBY2Nlc3M6OnZpc2l0QWdncmVnYXRlKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0
b3IpCiB7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemUoKTsgKytpKQogICAgICAg
ICBhdChpKS52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5oCShyZXZpc2lvbiAyNzI3
MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3Mu
aAkod29ya2luZyBjb3B5KQpAQCAtMTUyLDE0ICsxNTIsMTQgQEAgcHVibGljOgogICAgIGNvbnN0
IEFjY2Vzc0Nhc2UmIGF0KHVuc2lnbmVkIGkpIGNvbnN0IHsgcmV0dXJuICptX2xpc3RbaV07IH0K
ICAgICBjb25zdCBBY2Nlc3NDYXNlJiBvcGVyYXRvcltdKHVuc2lnbmVkIGkpIGNvbnN0IHsgcmV0
dXJuICptX2xpc3RbaV07IH0KIAotICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3Im
KTsKKyAgICB2b2lkIHZpc2l0QWdncmVnYXRlKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKIAogICAg
IC8vIElmIHRoaXMgcmV0dXJucyBmYWxzZSB0aGVuIHdlIGFyZSByZXF1ZXN0aW5nIGEgcmVzZXQg
b2YgdGhlIG93bmluZyBTdHJ1Y3R1cmVTdHViSW5mby4KICAgICBib29sIHZpc2l0V2VhayhWTSYp
IGNvbnN0OwogICAgIAogICAgIC8vIFRoaXMgcmV0dXJucyB0cnVlIGlmIGl0IGhhcyBtYXJrZWQg
ZXZlcnl0aGluZyBpdCB3aWxsIGV2ZXIgbWFya2VkLiBUaGlzIGNhbiBiZSB1c2VkIGFzIGFuCiAg
ICAgLy8gb3B0aW1pemF0aW9uIHRvIHRoZW4gYXZvaWQgY2FsbGluZyB0aGlzIG1ldGhvZCBhZ2Fp
biBkdXJpbmcgdGhlIGZpeHBvaW50LgotICAgIGJvb2wgcHJvcGFnYXRlVHJhbnNpdGlvbnMoU2xv
dFZpc2l0b3ImKSBjb25zdDsKKyAgICBib29sIHByb3BhZ2F0ZVRyYW5zaXRpb25zKEFic3RyYWN0
U2xvdFZpc2l0b3ImKSBjb25zdDsKIAogICAgIHZvaWQgYWJvdXRUb0RpZSgpOwogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuY3BwCShy
ZXZpc2lvbiAyNzI3MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJ
ZFN0YXR1cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5Niw3ICszOTYsNyBAQCBQdXRCeUlkU3Rh
dHVzIFB1dEJ5SWRTdGF0dXM6OnNsb3dWZXJzaW9uCiAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMo
bWFrZXNDYWxscygpID8gTWFrZXNDYWxscyA6IFRha2VzU2xvd1BhdGgpOwogfQogCi12b2lkIFB1
dEJ5SWRTdGF0dXM6Om1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBQdXRC
eUlkU3RhdHVzOjptYXJrSWZDaGVhcChBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewog
ICAgIGZvciAoUHV0QnlJZFZhcmlhbnQmIHZhcmlhbnQgOiBtX3ZhcmlhbnRzKQogICAgICAgICB2
YXJpYW50Lm1hcmtJZkNoZWFwKHZpc2l0b3IpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5oCShyZXZpc2lvbiAyNzI3MTApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xMTcsNyArMTE3LDcgQEAgcHVibGljOgogICAgIGNvbnN0IFB1dEJ5SWRWYXJpYW50JiBh
dChzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fdmFyaWFudHNbaW5kZXhdOyB9CiAgICAg
Y29uc3QgUHV0QnlJZFZhcmlhbnQmIG9wZXJhdG9yW10oc2l6ZV90IGluZGV4KSBjb25zdCB7IHJl
dHVybiBhdChpbmRleCk7IH0KICAgICAKLSAgICB2b2lkIG1hcmtJZkNoZWFwKFNsb3RWaXNpdG9y
Jik7CisgICAgdm9pZCBtYXJrSWZDaGVhcChBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAgICAgYm9v
bCBmaW5hbGl6ZShWTSYpOwogICAgIAogICAgIHZvaWQgbWVyZ2UoY29uc3QgUHV0QnlJZFN0YXR1
cyYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJ
ZFZhcmlhbnQuY3BwCShyZXZpc2lvbiAyNzI3MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNjIsNyArMjYy
LDcgQEAgYm9vbCBQdXRCeUlkVmFyaWFudDo6YXR0ZW1wdFRvTWVyZ2VUcmFucwogICAgIHJldHVy
biB0cnVlOwogfQogCi12b2lkIFB1dEJ5SWRWYXJpYW50OjptYXJrSWZDaGVhcChTbG90VmlzaXRv
ciYgdmlzaXRvcikKK3ZvaWQgUHV0QnlJZFZhcmlhbnQ6Om1hcmtJZkNoZWFwKEFic3RyYWN0U2xv
dFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgbV9vbGRTdHJ1Y3R1cmUubWFya0lmQ2hlYXAodmlz
aXRvcik7CiAgICAgaWYgKG1fbmV3U3RydWN0dXJlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmgJKHJldmlzaW9uIDI3MjcxMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkVmFyaWFudC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xMzIsNyArMTMyLDcgQEAgcHVibGljOgogCiAgICAgYm9vbCBhdHRlbXB0VG9N
ZXJnZShjb25zdCBQdXRCeUlkVmFyaWFudCYgb3RoZXIpOwogICAgIAotICAgIHZvaWQgbWFya0lm
Q2hlYXAoU2xvdFZpc2l0b3ImKTsKKyAgICB2b2lkIG1hcmtJZkNoZWFwKEFic3RyYWN0U2xvdFZp
c2l0b3ImKTsKICAgICBib29sIGZpbmFsaXplKFZNJik7CiAgICAgCiAgICAgdm9pZCBkdW1wKFBy
aW50U3RyZWFtJikgY29uc3Q7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
UmVjb3JkZWRTdGF0dXNlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1JlY29yZGVkU3RhdHVzZXMuY3BwCShyZXZpc2lvbiAyNzI3MTApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUmVjb3JkZWRTdGF0dXNlcy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEwMiwzMiArMTAyLDMyIEBAIFNldFByaXZhdGVCcmFuZFN0YXR1cyogUmVjb3Jk
ZWRTdGF0dXNlczoKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi12b2lkIFJlY29yZGVkU3RhdHVz
ZXM6OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvcikKK3ZvaWQgUmVjb3Jk
ZWRTdGF0dXNlczo6dmlzaXRBZ2dyZWdhdGUoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikK
IHsKICAgICBmb3IgKGF1dG8mIHBhaXIgOiBnZXRzKQotICAgICAgICBwYWlyLnNlY29uZC0+dmlz
aXRBZ2dyZWdhdGUoc2xvdFZpc2l0b3IpOworICAgICAgICBwYWlyLnNlY29uZC0+dmlzaXRBZ2dy
ZWdhdGUodmlzaXRvcik7CiAgICAgZm9yIChhdXRvJiBwYWlyIDogZGVsZXRlcykKLSAgICAgICAg
cGFpci5zZWNvbmQtPnZpc2l0QWdncmVnYXRlKHNsb3RWaXNpdG9yKTsKKyAgICAgICAgcGFpci5z
ZWNvbmQtPnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOwogICAgIGZvciAoYXV0byYgcGFpciA6IGNo
ZWNrUHJpdmF0ZUJyYW5kcykKLSAgICAgICAgcGFpci5zZWNvbmQtPnZpc2l0QWdncmVnYXRlKHNs
b3RWaXNpdG9yKTsKKyAgICAgICAgcGFpci5zZWNvbmQtPnZpc2l0QWdncmVnYXRlKHZpc2l0b3Ip
OwogICAgIGZvciAoYXV0byYgcGFpciA6IHNldFByaXZhdGVCcmFuZHMpCi0gICAgICAgIHBhaXIu
c2Vjb25kLT52aXNpdEFnZ3JlZ2F0ZShzbG90VmlzaXRvcik7CisgICAgICAgIHBhaXIuc2Vjb25k
LT52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKIH0KIAotdm9pZCBSZWNvcmRlZFN0YXR1c2VzOjpt
YXJrSWZDaGVhcChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IpCit2b2lkIFJlY29yZGVkU3RhdHVz
ZXM6Om1hcmtJZkNoZWFwKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgZm9y
IChhdXRvJiBwYWlyIDogZ2V0cykKLSAgICAgICAgcGFpci5zZWNvbmQtPm1hcmtJZkNoZWFwKHNs
b3RWaXNpdG9yKTsKKyAgICAgICAgcGFpci5zZWNvbmQtPm1hcmtJZkNoZWFwKHZpc2l0b3IpOwog
ICAgIGZvciAoYXV0byYgcGFpciA6IHB1dHMpCi0gICAgICAgIHBhaXIuc2Vjb25kLT5tYXJrSWZD
aGVhcChzbG90VmlzaXRvcik7CisgICAgICAgIHBhaXIuc2Vjb25kLT5tYXJrSWZDaGVhcCh2aXNp
dG9yKTsKICAgICBmb3IgKGF1dG8mIHBhaXIgOiBpbnMpCi0gICAgICAgIHBhaXIuc2Vjb25kLT5t
YXJrSWZDaGVhcChzbG90VmlzaXRvcik7CisgICAgICAgIHBhaXIuc2Vjb25kLT5tYXJrSWZDaGVh
cCh2aXNpdG9yKTsKICAgICBmb3IgKGF1dG8mIHBhaXIgOiBkZWxldGVzKQotICAgICAgICBwYWly
LnNlY29uZC0+bWFya0lmQ2hlYXAoc2xvdFZpc2l0b3IpOworICAgICAgICBwYWlyLnNlY29uZC0+
bWFya0lmQ2hlYXAodmlzaXRvcik7CiAgICAgZm9yIChhdXRvJiBwYWlyIDogY2hlY2tQcml2YXRl
QnJhbmRzKQotICAgICAgICBwYWlyLnNlY29uZC0+bWFya0lmQ2hlYXAoc2xvdFZpc2l0b3IpOwor
ICAgICAgICBwYWlyLnNlY29uZC0+bWFya0lmQ2hlYXAodmlzaXRvcik7CiAgICAgZm9yIChhdXRv
JiBwYWlyIDogc2V0UHJpdmF0ZUJyYW5kcykKLSAgICAgICAgcGFpci5zZWNvbmQtPm1hcmtJZkNo
ZWFwKHNsb3RWaXNpdG9yKTsKKyAgICAgICAgcGFpci5zZWNvbmQtPm1hcmtJZkNoZWFwKHZpc2l0
b3IpOwogfQogCiB2b2lkIFJlY29yZGVkU3RhdHVzZXM6OmZpbmFsaXplV2l0aG91dERlbGV0aW5n
KFZNJiB2bSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9SZWNvcmRlZFN0
YXR1c2VzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Jl
Y29yZGVkU3RhdHVzZXMuaAkocmV2aXNpb24gMjcyNzEwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1JlY29yZGVkU3RhdHVzZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNTQsOCAr
NTQsOCBAQCBzdHJ1Y3QgUmVjb3JkZWRTdGF0dXNlcyB7CiAgICAgQ2hlY2tQcml2YXRlQnJhbmRT
dGF0dXMqIGFkZENoZWNrUHJpdmF0ZUJyYW5kU3RhdHVzKGNvbnN0IENvZGVPcmlnaW4mLCBjb25z
dCBDaGVja1ByaXZhdGVCcmFuZFN0YXR1cyYpOwogICAgIFNldFByaXZhdGVCcmFuZFN0YXR1cyog
YWRkU2V0UHJpdmF0ZUJyYW5kU3RhdHVzKGNvbnN0IENvZGVPcmlnaW4mLCBjb25zdCBTZXRQcml2
YXRlQnJhbmRTdGF0dXMmKTsKICAgICAKLSAgICB2b2lkIHZpc2l0QWdncmVnYXRlKFNsb3RWaXNp
dG9yJik7Ci0gICAgdm9pZCBtYXJrSWZDaGVhcChTbG90VmlzaXRvciYpOworICAgIHZvaWQgdmlz
aXRBZ2dyZWdhdGUoQWJzdHJhY3RTbG90VmlzaXRvciYpOworICAgIHZvaWQgbWFya0lmQ2hlYXAo
QWJzdHJhY3RTbG90VmlzaXRvciYpOwogICAgIAogICAgIHZvaWQgZmluYWxpemVXaXRob3V0RGVs
ZXRpbmcoVk0mKTsKICAgICB2b2lkIGZpbmFsaXplKFZNJik7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvU2V0UHJpdmF0ZUJyYW5kU3RhdHVzLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU2V0UHJpdmF0ZUJyYW5kU3RhdHVzLmNw
cAkocmV2aXNpb24gMjcyNzEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Nl
dFByaXZhdGVCcmFuZFN0YXR1cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzNSwxMyArMjM1LDEz
IEBAIENhY2hlYWJsZUlkZW50aWZpZXIgU2V0UHJpdmF0ZUJyYW5kU3RhdHUKICAgICByZXR1cm4g
cmVzdWx0OwogfQogCi12b2lkIFNldFByaXZhdGVCcmFuZFN0YXR1czo6dmlzaXRBZ2dyZWdhdGUo
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIFNldFByaXZhdGVCcmFuZFN0YXR1czo6dmlzaXRB
Z2dyZWdhdGUoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBmb3IgKFNldFBy
aXZhdGVCcmFuZFZhcmlhbnQmIHZhcmlhbnQgOiBtX3ZhcmlhbnRzKQogICAgICAgICB2YXJpYW50
LnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOwogfQogCi12b2lkIFNldFByaXZhdGVCcmFuZFN0YXR1
czo6bWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIFNldFByaXZhdGVCcmFu
ZFN0YXR1czo6bWFya0lmQ2hlYXAoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAg
ICBmb3IgKFNldFByaXZhdGVCcmFuZFZhcmlhbnQmIHZhcmlhbnQgOiBtX3ZhcmlhbnRzKQogICAg
ICAgICB2YXJpYW50Lm1hcmtJZkNoZWFwKHZpc2l0b3IpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1NldFByaXZhdGVCcmFuZFN0YXR1cy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TZXRQcml2YXRlQnJhbmRTdGF0dXMuaAkocmV2
aXNpb24gMjcyNzEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NldFByaXZh
dGVCcmFuZFN0YXR1cy5oCSh3b3JraW5nIGNvcHkpCkBAIC04Myw4ICs4Myw4IEBAIHB1YmxpYzoK
ICAgICAvLyBBdHRlbXB0cyB0byByZWR1Y2UgdGhlIHNldCBvZiB2YXJpYW50cyB0byBmaXQgdGhl
IGdpdmVuIHN0cnVjdHVyZSBzZXQuIFRoaXMgbWF5IGJlIGFwcHJveGltYXRlLgogICAgIHZvaWQg
ZmlsdGVyKGNvbnN0IFN0cnVjdHVyZVNldCYpOwogCi0gICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShT
bG90VmlzaXRvciYpOwotICAgIHZvaWQgbWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImKTsKKyAgICB2
b2lkIHZpc2l0QWdncmVnYXRlKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKKyAgICB2b2lkIG1hcmtJ
ZkNoZWFwKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKICAgICBib29sIGZpbmFsaXplKFZNJik7CiAK
ICAgICBib29sIGFwcGVuZFZhcmlhbnQoY29uc3QgU2V0UHJpdmF0ZUJyYW5kVmFyaWFudCYpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NldFByaXZhdGVCcmFuZFZhcmlh
bnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TZXRQ
cml2YXRlQnJhbmRWYXJpYW50LmNwcAkocmV2aXNpb24gMjcyNzEwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1NldFByaXZhdGVCcmFuZFZhcmlhbnQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC01NCw3ICs1NCw3IEBAIGJvb2wgU2V0UHJpdmF0ZUJyYW5kVmFyaWFudDo6YXR0ZW1w
dFRvTWUKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBTZXRQcml2YXRlQnJhbmRWYXJpYW50
OjptYXJrSWZDaGVhcChTbG90VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgU2V0UHJpdmF0ZUJyYW5k
VmFyaWFudDo6bWFya0lmQ2hlYXAoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAg
ICBpZiAobV9vbGRTdHJ1Y3R1cmUpCiAgICAgICAgIG1fb2xkU3RydWN0dXJlLT5tYXJrSWZDaGVh
cCh2aXNpdG9yKTsKQEAgLTcxLDcgKzcxLDcgQEAgYm9vbCBTZXRQcml2YXRlQnJhbmRWYXJpYW50
OjpmaW5hbGl6ZShWTQogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIFNldFByaXZhdGVCcmFu
ZFZhcmlhbnQ6OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBTZXRQ
cml2YXRlQnJhbmRWYXJpYW50Ojp2aXNpdEFnZ3JlZ2F0ZShBYnN0cmFjdFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQogewogICAgIG1faWRlbnRpZmllci52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKIH0K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TZXRQcml2YXRlQnJhbmRWYXJp
YW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NldFBy
aXZhdGVCcmFuZFZhcmlhbnQuaAkocmV2aXNpb24gMjcyNzEwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1NldFByaXZhdGVCcmFuZFZhcmlhbnQuaAkod29ya2luZyBjb3B5KQpA
QCAtNDUsOCArNDUsOCBAQCBwdWJsaWM6CiAKICAgICBib29sIGF0dGVtcHRUb01lcmdlKGNvbnN0
IFNldFByaXZhdGVCcmFuZFZhcmlhbnQmIG90aGVyKTsKIAotICAgIHZvaWQgdmlzaXRBZ2dyZWdh
dGUoU2xvdFZpc2l0b3ImKTsKLSAgICB2b2lkIG1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJik7Cisg
ICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShBYnN0cmFjdFNsb3RWaXNpdG9yJik7CisgICAgdm9pZCBt
YXJrSWZDaGVhcChBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAgICAgYm9vbCBmaW5hbGl6ZShWTSYp
OwogCiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU2V0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU2V0LmNwcAkocmV2aXNpb24gMjcy
NzEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVNldC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLXZv
aWQgU3RydWN0dXJlU2V0OjptYXJrSWZDaGVhcChTbG90VmlzaXRvciYgdmlzaXRvcikgY29uc3QK
K3ZvaWQgU3RydWN0dXJlU2V0OjptYXJrSWZDaGVhcChBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNp
dG9yKSBjb25zdAogewogICAgIGZvciAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUgOiAqdGhpcykKICAg
ICAgICAgc3RydWN0dXJlLT5tYXJrSWZDaGVhcCh2aXNpdG9yKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTZXQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU2V0LmgJKHJldmlzaW9uIDI3MjcxMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTZXQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNTQsNyArNTQsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBvbmx5RW50
cnkoKTsKICAgICB9CiAKLSAgICB2b2lkIG1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJikgY29uc3Q7
CisgICAgdm9pZCBtYXJrSWZDaGVhcChBYnN0cmFjdFNsb3RWaXNpdG9yJikgY29uc3Q7CiAgICAg
Ym9vbCBpc1N0aWxsQWxpdmUoVk0mKSBjb25zdDsKICAgICAKICAgICB2b2lkIGR1bXBJbkNvbnRl
eHQoUHJpbnRTdHJlYW0mLCBEdW1wQ29udGV4dCopIGNvbnN0OwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwCShyZXZp
c2lvbiAyNzI3MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJl
U3R1YkluZm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOTYsNyArMjk2LDcgQEAgdm9pZCBTdHJ1
Y3R1cmVTdHViSW5mbzo6cmVzZXQoY29uc3QgQ29uYwogICAgIHNldENhY2hlVHlwZShsb2NrZXIs
IENhY2hlVHlwZTo6VW5zZXQpOwogfQogCi12b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjp2aXNpdEFn
Z3JlZ2F0ZShTbG90VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgU3RydWN0dXJlU3R1YkluZm86OnZp
c2l0QWdncmVnYXRlKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgewogICAg
ICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fYnVmZmVyZWRTdHJ1Y3R1cmVzTG9jayk7CkBA
IC0zNTIsMjUgKzM1Miw2IEBAIHZvaWQgU3RydWN0dXJlU3R1YkluZm86OnZpc2l0V2Vha1JlZmVy
ZW4KICAgICByZXNldEJ5R0MgPSB0cnVlOwogfQogCi1ib29sIFN0cnVjdHVyZVN0dWJJbmZvOjpw
cm9wYWdhdGVUcmFuc2l0aW9ucyhTbG90VmlzaXRvciYgdmlzaXRvcikKLXsKLSAgICBzd2l0Y2gg
KG1fY2FjaGVUeXBlKSB7Ci0gICAgY2FzZSBDYWNoZVR5cGU6OlVuc2V0OgotICAgIGNhc2UgQ2Fj
aGVUeXBlOjpBcnJheUxlbmd0aDoKLSAgICBjYXNlIENhY2hlVHlwZTo6U3RyaW5nTGVuZ3RoOgot
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBjYXNlIENhY2hlVHlwZTo6R2V0QnlJZFNlbGY6Ci0g
ICAgY2FzZSBDYWNoZVR5cGU6OlB1dEJ5SWRSZXBsYWNlOgotICAgIGNhc2UgQ2FjaGVUeXBlOjpJ
bkJ5SWRTZWxmOgotICAgICAgICByZXR1cm4gdS5ieUlkU2VsZi5iYXNlT2JqZWN0U3RydWN0dXJl
LT5tYXJrSWZDaGVhcCh2aXNpdG9yKTsKLSAgICBjYXNlIENhY2hlVHlwZTo6U3R1YjoKLSAgICAg
ICAgcmV0dXJuIHUuc3R1Yi0+cHJvcGFnYXRlVHJhbnNpdGlvbnModmlzaXRvcik7Ci0gICAgfQot
ICAgIAotICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIHRydWU7
Ci19Ci0KIFN0dWJJbmZvU3VtbWFyeSBTdHJ1Y3R1cmVTdHViSW5mbzo6c3VtbWFyeShWTSYgdm0p
IGNvbnN0CiB7CiAgICAgU3R1YkluZm9TdW1tYXJ5IHRha2VzU2xvd1BhdGggPSBTdHViSW5mb1N1
bW1hcnk6OlRha2VzU2xvd1BhdGg7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvU3RydWN0dXJlU3R1YkluZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaAkocmV2aXNpb24gMjcyNzEwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTkzLDE0ICs5MywxNCBAQCBwdWJsaWM6CiAgICAgdm9pZCBkZXJlZigpOwogICAg
IHZvaWQgYWJvdXRUb0RpZSgpOwogCi0gICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRv
ciYpOworICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoQWJzdHJhY3RTbG90VmlzaXRvciYpOwogCiAg
ICAgLy8gQ2hlY2sgaWYgdGhlIHN0dWIgaGFzIHdlYWsgcmVmZXJlbmNlcyB0aGF0IGFyZSBkZWFk
LiBJZiBpdCBkb2VzLCB0aGVuIGl0IHJlc2V0cyBpdHNlbGYsCiAgICAgLy8gZWl0aGVyIGVudGly
ZWx5IG9yIGp1c3QgZW5vdWdoIHRvIGVuc3VyZSB0aGF0IHRob3NlIGRlYWQgcG9pbnRlcnMgZG9u
J3QgZ2V0IHVzZWQgYW55bW9yZS4KICAgICB2b2lkIHZpc2l0V2Vha1JlZmVyZW5jZXMoY29uc3Qg
Q29uY3VycmVudEpTTG9ja2VyQmFzZSYsIENvZGVCbG9jayopOwogICAgIAogICAgIC8vIFRoaXMg
cmV0dXJucyB0cnVlIGlmIGl0IGhhcyBtYXJrZWQgZXZlcnl0aGluZyB0aGF0IGl0IHdpbGwgZXZl
ciBtYXJrLgotICAgIGJvb2wgcHJvcGFnYXRlVHJhbnNpdGlvbnMoU2xvdFZpc2l0b3ImKTsKKyAg
ICBib29sIHByb3BhZ2F0ZVRyYW5zaXRpb25zKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKICAgICAg
ICAgCiAgICAgU3R1YkluZm9TdW1tYXJ5IHN1bW1hcnkoVk0mKSBjb25zdDsKICAgICAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJs
b2NrLmNwcAkocmV2aXNpb24gMjcyNzEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxOSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMCBBcHBsZSBJbmMuIEFsbCBSaWdodHMg
UmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTc1LDcgKzc1LDgg
QEAgVW5saW5rZWRDb2RlQmxvY2s6OlVubGlua2VkQ29kZUJsb2NrKFZNJgogICAgIH0KIH0KIAot
dm9pZCBVbmxpbmtlZENvZGVCbG9jazo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgVW5saW5r
ZWRDb2RlQmxvY2s6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlz
aXRvcikKIHsKICAgICBVbmxpbmtlZENvZGVCbG9jayogdGhpc09iamVjdCA9IGpzQ2FzdDxVbmxp
bmtlZENvZGVCbG9jayo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhp
c09iamVjdCwgaW5mbygpKTsKQEAgLTk0LDYgKzk1LDggQEAgdm9pZCBVbmxpbmtlZENvZGVCbG9j
azo6dmlzaXRDaGlsZHJlbihKUwogICAgIHZpc2l0b3IucmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVk
KGV4dHJhTWVtb3J5KTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKFVubGlua2VkQ29kZUJs
b2NrKTsKKwogc2l6ZV90IFVubGlua2VkQ29kZUJsb2NrOjplc3RpbWF0ZWRTaXplKEpTQ2VsbCog
Y2VsbCwgVk0mIHZtKQogewogICAgIFVubGlua2VkQ29kZUJsb2NrKiB0aGlzT2JqZWN0ID0ganND
YXN0PFVubGlua2VkQ29kZUJsb2NrKj4oY2VsbCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaAkocmV2aXNpb24gMjcyNzEw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEy
LTIwMTkgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEyLTIwMjAgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC00MzEsNyArNDMxLDcgQEAgcHJpdmF0ZToKICAgICBSZWZDb3Vu
dGVkQXJyYXk8RXhwcmVzc2lvblJhbmdlSW5mbz4gbV9leHByZXNzaW9uSW5mbzsKIAogcHJvdGVj
dGVkOgotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3Im
KTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogICAgIHN0YXRpYyBzaXplX3QgZXN0aW1h
dGVkU2l6ZShKU0NlbGwqLCBWTSYpOwogCiBwdWJsaWM6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9uRXhlY3V0
YWJsZS5jcHAJKHJldmlzaW9uIDI3MjcxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9VbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTkgQXBwbGUgSW5jLiBBbGwg
UmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjAgQXBwbGUgSW5jLiBB
bGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0x
NDYsNyArMTQ2LDggQEAgdm9pZCBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6ZGVzdHJveQog
ICAgIHN0YXRpY19jYXN0PFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKj4oY2VsbCktPn5Vbmxp
bmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSgpOwogfQogCi12b2lkIFVubGlua2VkRnVuY3Rpb25FeGVj
dXRhYmxlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3Ip
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0
YWJsZTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQog
ewogICAgIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiB0aGlzT2JqZWN0ID0ganNDYXN0PFVu
bGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9J
TkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtMTY5LDYgKzE3MCw4IEBAIHZvaWQgVW5s
aW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU6OnZpc2l0Q2gKICAgICB9CiB9CiAKK0RFRklORV9WSVNJ
VF9DSElMRFJFTihVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSk7CisKIFNvdXJjZUNvZGUgVW5s
aW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU6OmxpbmtlZFNvdXJjZUNvZGUoY29uc3QgU291cmNlQ29k
ZSYgcGFzc2VkUGFyZW50U291cmNlKSBjb25zdAogewogICAgIGNvbnN0IFNvdXJjZUNvZGUmIHBh
cmVudFNvdXJjZSA9ICFtX2lzQnVpbHRpbkRlZmF1bHRDbGFzc0NvbnN0cnVjdG9yID8gcGFzc2Vk
UGFyZW50U291cmNlIDogQnVpbHRpbkV4ZWN1dGFibGVzOjpkZWZhdWx0Q29uc3RydWN0b3JTb3Vy
Y2VDb2RlKGNvbnN0cnVjdG9yS2luZCgpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5oCShy
ZXZpc2lvbiAyNzI3MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5r
ZWRGdW5jdGlvbkV4ZWN1dGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxOSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI0Miw3ICsyNDIsNyBA
QCBwcml2YXRlOgogICAgIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKFZNJiwgU3RydWN0dXJl
KiwgY29uc3QgU291cmNlQ29kZSYsIEZ1bmN0aW9uTWV0YWRhdGFOb2RlKiwgVW5saW5rZWRGdW5j
dGlvbktpbmQsIENvbnN0cnVjdEFiaWxpdHksIEpTUGFyc2VyU2NyaXB0TW9kZSwgUmVmUHRyPFRE
WkVudmlyb25tZW50TGluaz4sIE9wdGlvbmFsPFByaXZhdGVOYW1lRW52aXJvbm1lbnQ+LCBKU0M6
OkRlcml2ZWRDb250ZXh0VHlwZSwgSlNDOjpOZWVkc0NsYXNzRmllbGRJbml0aWFsaXplciwgUHJp
dmF0ZUJyYW5kUmVxdWlyZW1lbnQsIGJvb2wgaXNCdWlsdGluRGVmYXVsdENsYXNzQ29uc3RydWN0
b3IpOwogICAgIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKERlY29kZXImLCBjb25zdCBDYWNo
ZWRGdW5jdGlvbkV4ZWN1dGFibGUmKTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4o
SlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAg
ICAgdm9pZCBkZWNvZGVDYWNoZWRDb2RlQmxvY2tzKFZNJik7CiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlclNjb3BlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXJTY29wZS5jcHAJKHJldmlzaW9uIDI3
MjcxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlclNjb3BlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDgtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDgtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTU1LDcgKzU1LDggQEAgdm9pZCBEZWJ1Z2dlclNjb3BlOjpm
aW5pc2hDcmVhdGlvbihWTSYgdgogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKIH0KIAot
dm9pZCBEZWJ1Z2dlclNjb3BlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0
b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBEZWJ1Z2dlclNj
b3BlOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7
CiAgICAgRGVidWdnZXJTY29wZSogdGhpc09iamVjdCA9IGpzQ2FzdDxEZWJ1Z2dlclNjb3BlKj4o
Y2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkp
OwpAQCAtNjUsNiArNjYsOCBAQCB2b2lkIERlYnVnZ2VyU2NvcGU6OnZpc2l0Q2hpbGRyZW4oSlND
ZWxsCiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9uZXh0KTsKIH0KIAorREVGSU5F
X1ZJU0lUX0NISUxEUkVOKERlYnVnZ2VyU2NvcGUpOworCiBTdHJpbmcgRGVidWdnZXJTY29wZTo6
Y2xhc3NOYW1lKGNvbnN0IEpTT2JqZWN0KiBvYmplY3QsIFZNJiB2bSkKIHsKICAgICBjb25zdCBE
ZWJ1Z2dlclNjb3BlKiBzY29wZSA9IGpzQ2FzdDxjb25zdCBEZWJ1Z2dlclNjb3BlKj4ob2JqZWN0
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlclNjb3BlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyU2Nv
cGUuaAkocmV2aXNpb24gMjcyNzEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2Vy
L0RlYnVnZ2VyU2NvcGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDYsNyArNDYsNyBAQCBwdWJsaWM6
CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgRGVidWdnZXJTY29wZSogY3JlYXRlKFZN
JiB2bSwgSlNTY29wZSogc2NvcGUpOwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihK
U0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAgICAg
c3RhdGljIFN0cmluZyBjbGFzc05hbWUoY29uc3QgSlNPYmplY3QqLCBWTSYpOwogICAgIHN0YXRp
YyBTdHJpbmcgdG9TdHJpbmdOYW1lKGNvbnN0IEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqKTsK
ICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqLCBKU0dsb2JhbE9i
amVjdCosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRUcmFuc2l0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkVHJhbnNpdGlvbnMuY3BwCShyZXZpc2lv
biAyNzI3MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRUcmFuc2l0
aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUyLDcgKzUyLDcgQEAgdm9pZCBEZXNpcmVkVHJh
bnNpdGlvbjo6cmVhbGx5QWRkKFZNJiB2bQogICAgICAgICAgICAgbV9vbGRTdHJ1Y3R1cmUsIG1f
bmV3U3RydWN0dXJlKSk7CiB9CiAKLXZvaWQgRGVzaXJlZFRyYW5zaXRpb246OnZpc2l0Q2hpbGRy
ZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIERlc2lyZWRUcmFuc2l0aW9uOjp2aXNpdENo
aWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgdmlzaXRvci5hcHBl
bmRVbmJhcnJpZXJlZChtX2NvZGVPcmlnaW5Pd25lcik7CiAgICAgdmlzaXRvci5hcHBlbmRVbmJh
cnJpZXJlZChtX29sZFN0cnVjdHVyZSk7CkBAIC03OCw3ICs3OCw3IEBAIHZvaWQgRGVzaXJlZFRy
YW5zaXRpb25zOjpyZWFsbHlBZGQoVk0mIHYKICAgICAgICAgbV90cmFuc2l0aW9uc1tpXS5yZWFs
bHlBZGQodm0sIGNvbW1vbik7CiB9CiAKLXZvaWQgRGVzaXJlZFRyYW5zaXRpb25zOjp2aXNpdENo
aWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBEZXNpcmVkVHJhbnNpdGlvbnM6OnZp
c2l0Q2hpbGRyZW4oQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbV90cmFuc2l0aW9ucy5zaXplKCk7IGkrKykKICAgICAgICAgbV90
cmFuc2l0aW9uc1tpXS52aXNpdENoaWxkcmVuKHZpc2l0b3IpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkVHJhbnNpdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRUcmFuc2l0aW9ucy5oCShyZXZpc2lvbiAy
NzI3MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRUcmFuc2l0aW9u
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC00Niw4ICs0Niw3IEBAIHB1YmxpYzoKICAgICBEZXNpcmVk
VHJhbnNpdGlvbihDb2RlQmxvY2sqLCBDb2RlQmxvY2sqIGNvZGVPcmlnaW5Pd25lciwgU3RydWN0
dXJlKiwgU3RydWN0dXJlKik7CiAKICAgICB2b2lkIHJlYWxseUFkZChWTSYsIENvbW1vbkRhdGEq
KTsKLSAgICAKLSAgICB2b2lkIHZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKKyAgICB2b2lk
IHZpc2l0Q2hpbGRyZW4oQWJzdHJhY3RTbG90VmlzaXRvciYpOwogCiBwcml2YXRlOgogICAgIENv
ZGVCbG9jayogbV9jb2RlQmxvY2s7CkBAIC02Myw3ICs2Miw3IEBAIHB1YmxpYzoKIAogICAgIHZv
aWQgYWRkTGF6aWx5KENvZGVCbG9jayosIENvZGVCbG9jayogY29kZU9yaWdpbk93bmVyLCBTdHJ1
Y3R1cmUqLCBTdHJ1Y3R1cmUqKTsKICAgICB2b2lkIHJlYWxseUFkZChWTSYsIENvbW1vbkRhdGEq
KTsKLSAgICB2b2lkIHZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKKyAgICB2b2lkIHZpc2l0
Q2hpbGRyZW4oQWJzdHJhY3RTbG90VmlzaXRvciYpOwogCiBwcml2YXRlOgogICAgIFZlY3RvcjxE
ZXNpcmVkVHJhbnNpdGlvbj4gbV90cmFuc2l0aW9uczsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHRGVzaXJlZFdlYWtSZWZlcmVuY2VzLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXZWFrUmVmZXJlbmNlcy5jcHAJKHJldmlz
aW9uIDI3MjcxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFdlYWtS
ZWZlcmVuY2VzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODcsNyArODcsNyBAQCB2b2lkIERlc2ly
ZWRXZWFrUmVmZXJlbmNlczo6cmVhbGx5QWRkKFZNCiAgICAgfQogfQogCi12b2lkIERlc2lyZWRX
ZWFrUmVmZXJlbmNlczo6dmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQg
RGVzaXJlZFdlYWtSZWZlcmVuY2VzOjp2aXNpdENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0b3Im
IHZpc2l0b3IpCiB7CiAgICAgZm9yIChKU0NlbGwqIHRhcmdldCA6IG1fcmVmZXJlbmNlcykKICAg
ICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZCh0YXJnZXQpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2Vha1JlZmVyZW5jZXMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXZWFrUmVmZXJlbmNlcy5oCShy
ZXZpc2lvbiAyNzI3MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRX
ZWFrUmVmZXJlbmNlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwxMCArMzEsMTAgQEAKIAogbmFt
ZXNwYWNlIEpTQyB7IAogCitjbGFzcyBBYnN0cmFjdFNsb3RWaXNpdG9yOwogY2xhc3MgQ29kZUJs
b2NrOwogY2xhc3MgSlNDZWxsOwogY2xhc3MgSlNWYWx1ZTsKLWNsYXNzIFNsb3RWaXNpdG9yOwog
Y2xhc3MgVk07CiAKIG5hbWVzcGFjZSBERkcgewpAQCAtNTIsOCArNTIsOCBAQCBwdWJsaWM6CiAg
ICAgYm9vbCBjb250YWlucyhKU0NlbGwqKTsKICAgICAKICAgICB2b2lkIHJlYWxseUFkZChWTSYs
IENvbW1vbkRhdGEqKTsKLSAgICAKLSAgICB2b2lkIHZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3Im
KTsKKworICAgIHZvaWQgdmlzaXRDaGlsZHJlbihBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAKIHBy
aXZhdGU6CiAgICAgQ29kZUJsb2NrKiBtX2NvZGVCbG9jazsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHR3JhcGguY3BwCShyZXZpc2lvbiAyNzI3MTApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTc3LDcgKzk3Nyw3
IEBAIEJsb2NrTGlzdCBHcmFwaDo6YmxvY2tzSW5Qb3N0T3JkZXIoYm9vbCAKICAgICAgICAgfQog
ICAgIH0KIAotICAgIGlmIChpc1NhZmVUb1ZhbGlkYXRlICYmIHZhbGlkYXRpb25FbmFibGVkKCkp
IHsgLy8gVGhlcmUgYXJlIHVzZXJzIG9mIHRoaXMgd2hlcmUgd2UgaGF2ZW4ndCB5ZXQgYnVpbHQg
b2YgdGhlIENGRyBlbm91Z2ggdG8gYmUgYWJsZSB0byBydW4gZG9taW5hdG9ycy4KKyAgICBpZiAo
aXNTYWZlVG9WYWxpZGF0ZSAmJiB2YWxpZGF0aW9uRW5hYmxlZCgpKSB7IC8vIFRoZXJlIGFyZSB1
c2VycyBvZiB0aGlzIHdoZXJlIHdlIGhhdmVuJ3QgeWV0IGJ1aWx0IHRoZSBDRkcgZW5vdWdoIHRv
IGJlIGFibGUgdG8gcnVuIGRvbWluYXRvcnMuCiAgICAgICAgIGF1dG8gdmFsaWRhdGVSZXN1bHRz
ID0gWyZdIChhdXRvJiBkb21pbmF0b3JzKSB7CiAgICAgICAgICAgICAvLyBXaGVuIGl0ZXJhdGlu
ZyBvdmVyIHJldmVyc2UgcG9zdCBvcmRlciwgd2Ugc2hvdWxkIHNlZSBkb21pbmF0b3JzCiAgICAg
ICAgICAgICAvLyBiZWZvcmUgdGhpbmdzIHRoZXkgZG9taW5hdGUuCkBAIC0xNDQ4LDcgKzE0NDgs
NyBAQCB2b2lkIEdyYXBoOjpyZWdpc3RlckZyb3plblZhbHVlcygpCiAgICAgbV9jb2RlQmxvY2st
PmNvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbigpLnNocmlua1RvRml0KCk7CiB9CiAK
LXZvaWQgR3JhcGg6OnZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIEdy
YXBoOjp2aXNpdENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAg
Zm9yIChGcm96ZW5WYWx1ZSogdmFsdWUgOiBtX2Zyb3plblZhbHVlcykgewogICAgICAgICB2aXNp
dG9yLmFwcGVuZFVuYmFycmllcmVkKHZhbHVlLT52YWx1ZSgpKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0dyYXBoLmgJKHJldmlzaW9uIDI3MjcxMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHR3JhcGguaAkod29ya2luZyBjb3B5KQpAQCAtMTAwMCw5ICsxMDAwLDkg
QEAgcHVibGljOgogICAgIGJvb2wgY2FuRG9GYXN0U3ByZWFkKE5vZGUqLCBjb25zdCBBYnN0cmFj
dFZhbHVlJik7CiAgICAgCiAgICAgdm9pZCByZWdpc3RlckZyb3plblZhbHVlcygpOwotICAgIAot
ICAgIHZvaWQgdmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYpIGZpbmFsOwotICAgIAorCisgICAg
dm9pZCB2aXNpdENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImKSBmaW5hbDsKKwogICAgIHZv
aWQgbG9nQXNzZXJ0aW9uRmFpbHVyZSgKICAgICAgICAgc3RkOjpudWxscHRyX3QsIGNvbnN0IGNo
YXIqIGZpbGUsIGludCBsaW5lLCBjb25zdCBjaGFyKiBmdW5jdGlvbiwKICAgICAgICAgY29uc3Qg
Y2hhciogYXNzZXJ0aW9uKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxh
bi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNw
cAkocmV2aXNpb24gMjcyNzEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFu
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjcyLDkgKzY3Miw5IEBAIENvbXBpbGF0aW9uS2V5IFBs
YW46OmtleSgpCiAgICAgcmV0dXJuIENvbXBpbGF0aW9uS2V5KG1fY29kZUJsb2NrLT5hbHRlcm5h
dGl2ZSgpLCBtX21vZGUpOwogfQogCi12b2lkIFBsYW46OmNoZWNrTGl2ZW5lc3NBbmRWaXNpdENo
aWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBQbGFuOjpjaGVja0xpdmVuZXNzQW5k
VmlzaXRDaGlsZHJlbihBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewotICAgIGlmICgh
aXNLbm93blRvQmVMaXZlRHVyaW5nR0MoKSkKKyAgICBpZiAoIWlzS25vd25Ub0JlTGl2ZUR1cmlu
Z0dDKHZpc2l0b3IpKQogICAgICAgICByZXR1cm47CiAKICAgICBjbGVhbk11c3RIYW5kbGVWYWx1
ZXNJZk5lY2Vzc2FyeSgpOwpAQCAtNzA4LDcgKzcwOCwyMCBAQCB2b2lkIFBsYW46OmZpbmFsaXpl
SW5HQygpCiAgICAgbV9yZWNvcmRlZFN0YXR1c2VzLmZpbmFsaXplV2l0aG91dERlbGV0aW5nKCpt
X3ZtKTsKIH0KIAotYm9vbCBQbGFuOjppc0tub3duVG9CZUxpdmVEdXJpbmdHQygpCitib29sIFBs
YW46OmlzS25vd25Ub0JlTGl2ZUR1cmluZ0dDKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3Ip
Cit7CisgICAgaWYgKG1fc3RhZ2UgPT0gQ2FuY2VsbGVkKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgaWYgKCF2aXNpdG9yLmlzTWFya2VkKG1fY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUo
KSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIXZpc2l0b3IuaXNNYXJrZWQobV9j
b2RlQmxvY2stPmFsdGVybmF0aXZlKCkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYg
KCEhbV9wcm9maWxlZERGR0NvZGVCbG9jayAmJiAhdmlzaXRvci5pc01hcmtlZChtX3Byb2ZpbGVk
REZHQ29kZUJsb2NrKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiB0cnVlOwor
fQorCitib29sIFBsYW46OmlzS25vd25Ub0JlTGl2ZUFmdGVyR0MoKQogewogICAgIGlmIChtX3N0
YWdlID09IENhbmNlbGxlZCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdQbGFuLmgJKHJldmlzaW9uIDI3MjcxMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHUGxhbi5oCSh3b3JraW5nIGNvcHkpCkBAIC00Myw4ICs0Myw4IEBACiAK
IG5hbWVzcGFjZSBKU0MgewogCitjbGFzcyBBYnN0cmFjdFNsb3RWaXNpdG9yOwogY2xhc3MgQ29k
ZUJsb2NrOwotY2xhc3MgU2xvdFZpc2l0b3I7CiAKIG5hbWVzcGFjZSBERkcgewogCkBAIC03MSw5
ICs3MSwxMCBAQCBwdWJsaWM6CiAgICAgQ29tcGlsYXRpb25LZXkga2V5KCk7CiAgICAgCiAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KLSAgICB2b2lkIGl0ZXJhdGVDb2RlQmxvY2tzRm9yR0Mo
Y29uc3QgRnVuYyYpOwotICAgIHZvaWQgY2hlY2tMaXZlbmVzc0FuZFZpc2l0Q2hpbGRyZW4oU2xv
dFZpc2l0b3ImKTsKLSAgICBib29sIGlzS25vd25Ub0JlTGl2ZUR1cmluZ0dDKCk7CisgICAgdm9p
ZCBpdGVyYXRlQ29kZUJsb2Nrc0ZvckdDKEFic3RyYWN0U2xvdFZpc2l0b3ImLCBjb25zdCBGdW5j
Jik7CisgICAgdm9pZCBjaGVja0xpdmVuZXNzQW5kVmlzaXRDaGlsZHJlbihBYnN0cmFjdFNsb3RW
aXNpdG9yJik7CisgICAgYm9vbCBpc0tub3duVG9CZUxpdmVEdXJpbmdHQyhBYnN0cmFjdFNsb3RW
aXNpdG9yJik7CisgICAgYm9vbCBpc0tub3duVG9CZUxpdmVBZnRlckdDKCk7CiAgICAgdm9pZCBm
aW5hbGl6ZUluR0MoKTsKICAgICB2b2lkIGNhbmNlbCgpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1BsYW5JbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdQbGFuSW5saW5lcy5oCShyZXZpc2lvbiAyNzI3MTApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW5JbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTMyLDkgKzMyLDkgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogI2lmIEVOQUJM
RShERkdfSklUKQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgotdm9pZCBQbGFuOjppdGVyYXRl
Q29kZUJsb2Nrc0ZvckdDKGNvbnN0IEZ1bmMmIGZ1bmMpCit2b2lkIFBsYW46Oml0ZXJhdGVDb2Rl
QmxvY2tzRm9yR0MoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgRnVuYyYgZnVu
YykKIHsKLSAgICBpZiAoIWlzS25vd25Ub0JlTGl2ZUR1cmluZ0dDKCkpCisgICAgaWYgKCFpc0tu
b3duVG9CZUxpdmVEdXJpbmdHQyh2aXNpdG9yKSkKICAgICAgICAgcmV0dXJuOwogICAgIAogICAg
IC8vIENvbXBpbGF0aW9uIHdyaXRlcyBsb3RzIG9mIHZhbHVlcyB0byBhIENvZGVCbG9jayB3aXRo
b3V0IHBlcmZvcm1pbmcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZXBv
aW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVw
b2ludC5jcHAJKHJldmlzaW9uIDI3MjcxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU2FmZXBvaW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODMsMjggKzgzLDM4IEBAIHZvaWQg
U2FmZXBvaW50OjpiZWdpbigpCiAgICAgfQogfQogCi12b2lkIFNhZmVwb2ludDo6Y2hlY2tMaXZl
bmVzc0FuZFZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIFNhZmVwb2lu
dDo6Y2hlY2tMaXZlbmVzc0FuZFZpc2l0Q2hpbGRyZW4oQWJzdHJhY3RTbG90VmlzaXRvciYgdmlz
aXRvcikKIHsKICAgICBSRUxFQVNFX0FTU0VSVChtX2RpZENhbGxCZWdpbik7CiAKICAgICBpZiAo
bV9yZXN1bHQubV9kaWRHZXRDYW5jZWxsZWQpCiAgICAgICAgIHJldHVybjsgLy8gV2Ugd2VyZSBj
YW5jZWxsZWQgZHVyaW5nIGEgcHJldmlvdXMgR0MhCiAgICAgCi0gICAgaWYgKCFpc0tub3duVG9C
ZUxpdmVEdXJpbmdHQygpKQorICAgIGlmICghaXNLbm93blRvQmVMaXZlRHVyaW5nR0ModmlzaXRv
cikpCiAgICAgICAgIHJldHVybjsKICAgICAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX3NjYW5u
YWJsZXMuc2l6ZSgpOyBpLS07KQogICAgICAgICBtX3NjYW5uYWJsZXNbaV0tPnZpc2l0Q2hpbGRy
ZW4odmlzaXRvcik7CiB9CiAKLWJvb2wgU2FmZXBvaW50Ojppc0tub3duVG9CZUxpdmVEdXJpbmdH
QygpCitib29sIFNhZmVwb2ludDo6aXNLbm93blRvQmVMaXZlRHVyaW5nR0MoQWJzdHJhY3RTbG90
VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBSRUxFQVNFX0FTU0VSVChtX2RpZENhbGxCZWdpbik7
CiAgICAgCiAgICAgaWYgKG1fcmVzdWx0Lm1fZGlkR2V0Q2FuY2VsbGVkKQogICAgICAgICByZXR1
cm4gdHJ1ZTsgLy8gV2Ugd2VyZSBjYW5jZWxsZWQgZHVyaW5nIGEgcHJldmlvdXMgR0MsIHNvIGxl
dCdzIG5vdCBtZXNzIHdpdGggaXQgdGhpcyB0aW1lIGFyb3VuZCAtIHByZXRlbmQgaXQncyBsaXZl
IGFuZCBtb3ZlIG9uLgogICAgIAotICAgIHJldHVybiBtX3BsYW4uaXNLbm93blRvQmVMaXZlRHVy
aW5nR0MoKTsKKyAgICByZXR1cm4gbV9wbGFuLmlzS25vd25Ub0JlTGl2ZUR1cmluZ0dDKHZpc2l0
b3IpOworfQorCitib29sIFNhZmVwb2ludDo6aXNLbm93blRvQmVMaXZlQWZ0ZXJHQygpCit7Cisg
ICAgUkVMRUFTRV9BU1NFUlQobV9kaWRDYWxsQmVnaW4pOworICAgIAorICAgIGlmIChtX3Jlc3Vs
dC5tX2RpZEdldENhbmNlbGxlZCkKKyAgICAgICAgcmV0dXJuIHRydWU7IC8vIFdlIHdlcmUgY2Fu
Y2VsbGVkIGR1cmluZyBhIHByZXZpb3VzIEdDLCBzbyBsZXQncyBub3QgbWVzcyB3aXRoIGl0IHRo
aXMgdGltZSBhcm91bmQgLSBwcmV0ZW5kIGl0J3MgbGl2ZSBhbmQgbW92ZSBvbi4KKyAgICAKKyAg
ICByZXR1cm4gbV9wbGFuLmlzS25vd25Ub0JlTGl2ZUFmdGVyR0MoKTsKIH0KIAogdm9pZCBTYWZl
cG9pbnQ6OmNhbmNlbCgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVw
b2ludC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZXBv
aW50LmgJKHJldmlzaW9uIDI3MjcxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U2FmZXBvaW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDcgQEAKIAogbmFtZXNwYWNl
IEpTQyB7CiAKLWNsYXNzIFNsb3RWaXNpdG9yOworY2xhc3MgQWJzdHJhY3RTbG90VmlzaXRvcjsK
IGNsYXNzIFZNOwogCiBuYW1lc3BhY2UgREZHIHsKQEAgLTY2LDkgKzY2LDEwIEBAIHB1YmxpYzoK
ICAgICB2b2lkIGFkZChTY2FubmFibGUqKTsKICAgICAKICAgICB2b2lkIGJlZ2luKCk7Ci0gICAg
Ci0gICAgdm9pZCBjaGVja0xpdmVuZXNzQW5kVmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYpOwot
ICAgIGJvb2wgaXNLbm93blRvQmVMaXZlRHVyaW5nR0MoKTsKKworICAgIHZvaWQgY2hlY2tMaXZl
bmVzc0FuZFZpc2l0Q2hpbGRyZW4oQWJzdHJhY3RTbG90VmlzaXRvciYpOworICAgIGJvb2wgaXNL
bm93blRvQmVMaXZlRHVyaW5nR0MoQWJzdHJhY3RTbG90VmlzaXRvciYpOworICAgIGJvb2wgaXNL
bm93blRvQmVMaXZlQWZ0ZXJHQygpOwogICAgIHZvaWQgY2FuY2VsKCk7CiAgICAgCiAgICAgVk0q
IHZtKCkgY29uc3Q7IC8vIE1heSByZXR1cm4gbnVsbCBpZiB3ZSd2ZSBiZWVuIGNhbmNlbGxlZC4K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2Nhbm5hYmxlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTY2FubmFibGUuaAkocmV2aXNpb24g
MjcyNzEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTY2FubmFibGUuaAkod29y
a2luZyBjb3B5KQpAQCAtMjksNyArMjksNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotY2xhc3Mg
U2xvdFZpc2l0b3I7CitjbGFzcyBBYnN0cmFjdFNsb3RWaXNpdG9yOwogCiBuYW1lc3BhY2UgREZH
IHsKIApAQCAtMzgsNyArMzgsNyBAQCBwdWJsaWM6CiAgICAgU2Nhbm5hYmxlKCkgeyB9CiAgICAg
dmlydHVhbCB+U2Nhbm5hYmxlKCkgeyB9CiAgICAgCi0gICAgdmlydHVhbCB2b2lkIHZpc2l0Q2hp
bGRyZW4oU2xvdFZpc2l0b3ImKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0Q2hpbGRyZW4o
QWJzdHJhY3RTbG90VmlzaXRvciYpID0gMDsKIH07CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpE
RkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3QuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3QuY3BwCShyZXZp
c2lvbiAyNzI3MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzcyLDcgKzM3Miw3IEBAIHZvaWQgV29ya2xpc3Q6OnJlc3Vt
ZUFsbFRocmVhZHMoKQogICAgIG1fc3VzcGVuc2lvbkxvY2sudW5sb2NrKCk7CiB9CiAKLXZvaWQg
V29ya2xpc3Q6OnZpc2l0V2Vha1JlZmVyZW5jZXMoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2b2lk
IFdvcmtsaXN0Ojp2aXNpdFdlYWtSZWZlcmVuY2VzKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0
b3IpCiB7CiAgICAgVk0qIHZtID0gJnZpc2l0b3IuaGVhcCgpLT52bSgpOwogICAgIHsKQEAgLTQw
NSw3ICs0MDUsNyBAQCB2b2lkIFdvcmtsaXN0OjpyZW1vdmVEZWFkUGxhbnMoVk0mIHZtKQogICAg
ICAgICAgICAgUGxhbiogcGxhbiA9IGl0ZXItPnZhbHVlLmdldCgpOwogICAgICAgICAgICAgaWYg
KHBsYW4tPnZtKCkgIT0gJnZtKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAg
ICAgaWYgKHBsYW4tPmlzS25vd25Ub0JlTGl2ZUR1cmluZ0dDKCkpIHsKKyAgICAgICAgICAgIGlm
IChwbGFuLT5pc0tub3duVG9CZUxpdmVBZnRlckdDKCkpIHsKICAgICAgICAgICAgICAgICBwbGFu
LT5maW5hbGl6ZUluR0MoKTsKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAg
IH0KQEAgLTQ0MCw3ICs0NDAsNyBAQCB2b2lkIFdvcmtsaXN0OjpyZW1vdmVEZWFkUGxhbnMoVk0m
IHZtKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIGlmIChzYWZlcG9pbnQtPnZtKCkg
IT0gJnZtKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlmIChzYWZlcG9pbnQtPmlz
S25vd25Ub0JlTGl2ZUR1cmluZ0dDKCkpCisgICAgICAgIGlmIChzYWZlcG9pbnQtPmlzS25vd25U
b0JlTGl2ZUFmdGVyR0MoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBzYWZlcG9p
bnQtPmNhbmNlbCgpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
V29ya2xpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dv
cmtsaXN0LmgJKHJldmlzaW9uIDI3MjcxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHV29ya2xpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsNyArMzUsNyBAQAogCiBuYW1lc3Bh
Y2UgSlNDIHsKIAotY2xhc3MgU2xvdFZpc2l0b3I7CitjbGFzcyBBYnN0cmFjdFNsb3RWaXNpdG9y
OwogCiBuYW1lc3BhY2UgREZHIHsKIApAQCAtNTcsNyArNTcsNyBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBjb21wbGV0ZUFsbFBsYW5zRm9yVk0oVk0mKTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1
bmM+Ci0gICAgdm9pZCBpdGVyYXRlQ29kZUJsb2Nrc0ZvckdDKFZNJiwgY29uc3QgRnVuYyYpOwor
ICAgIHZvaWQgaXRlcmF0ZUNvZGVCbG9ja3NGb3JHQyhBYnN0cmFjdFNsb3RWaXNpdG9yJiwgVk0m
LCBjb25zdCBGdW5jJik7CiAKICAgICB2b2lkIHdhaXRVbnRpbEFsbFBsYW5zRm9yVk1BcmVSZWFk
eShWTSYpOwogICAgIFN0YXRlIGNvbXBsZXRlQWxsUmVhZHlQbGFuc0ZvclZNKFZNJiwgQ29tcGls
YXRpb25LZXkgPSBDb21waWxhdGlvbktleSgpKTsKQEAgLTczLDcgKzczLDcgQEAgcHVibGljOgog
ICAgIGJvb2wgaXNBY3RpdmVGb3JWTShWTSYpIGNvbnN0OwogICAgIAogICAgIC8vIE9ubHkgY2Fs
bGVkIG9uIHRoZSBtYWluIHRocmVhZCBhZnRlciBzdXNwZW5kaW5nIGFsbCB0aHJlYWRzLgotICAg
IHZvaWQgdmlzaXRXZWFrUmVmZXJlbmNlcyhTbG90VmlzaXRvciYpOworICAgIHZvaWQgdmlzaXRX
ZWFrUmVmZXJlbmNlcyhBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAgICAgdm9pZCByZW1vdmVEZWFk
UGxhbnMoVk0mKTsKICAgICAKICAgICB2b2lkIHJlbW92ZU5vbkNvbXBpbGluZ1BsYW5zRm9yVk0o
Vk0mKTsKQEAgLTE0NCw3ICsxNDQsNyBAQCBXb3JrbGlzdCYgZXhpc3RpbmdXb3JrbGlzdEZvcklu
ZGV4KHVuc2lnCiB2b2lkIGNvbXBsZXRlQWxsUGxhbnNGb3JWTShWTSYpOwogCiB0ZW1wbGF0ZTx0
eXBlbmFtZSBGdW5jPgotdm9pZCBpdGVyYXRlQ29kZUJsb2Nrc0ZvckdDKFZNJiwgY29uc3QgRnVu
YyYpOwordm9pZCBpdGVyYXRlQ29kZUJsb2Nrc0ZvckdDKEFic3RyYWN0U2xvdFZpc2l0b3ImLCBW
TSYsIGNvbnN0IEZ1bmMmKTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0SW5saW5lcy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3RJbmxpbmVzLmgJKHJldmlz
aW9uIDI3MjcxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3RJbmxp
bmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDMwICszMywzMCBAQCBuYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIERGRyB7CiAjaWYgRU5BQkxFKERGR19KSVQpCiAKIHRlbXBsYXRlPHR5cGVuYW1l
IEZ1bmM+Ci12b2lkIGl0ZXJhdGVDb2RlQmxvY2tzRm9yR0MoVk0mIHZtLCBjb25zdCBGdW5jJiBm
dW5jKQordm9pZCBpdGVyYXRlQ29kZUJsb2Nrc0ZvckdDKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZp
c2l0b3IsIFZNJiB2bSwgY29uc3QgRnVuYyYgZnVuYykKIHsKICAgICBmb3IgKHVuc2lnbmVkIGkg
PSBERkc6Om51bWJlck9mV29ya2xpc3RzKCk7IGktLTspIHsKICAgICAgICAgaWYgKERGRzo6V29y
a2xpc3QqIHdvcmtsaXN0ID0gREZHOjpleGlzdGluZ1dvcmtsaXN0Rm9ySW5kZXhPck51bGwoaSkp
Ci0gICAgICAgICAgICB3b3JrbGlzdC0+aXRlcmF0ZUNvZGVCbG9ja3NGb3JHQyh2bSwgZnVuYyk7
CisgICAgICAgICAgICB3b3JrbGlzdC0+aXRlcmF0ZUNvZGVCbG9ja3NGb3JHQyh2aXNpdG9yLCB2
bSwgZnVuYyk7CiAgICAgfQogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgotdm9pZCBXb3Jr
bGlzdDo6aXRlcmF0ZUNvZGVCbG9ja3NGb3JHQyhWTSYgdm0sIGNvbnN0IEZ1bmMmIGZ1bmMpCit2
b2lkIFdvcmtsaXN0OjppdGVyYXRlQ29kZUJsb2Nrc0ZvckdDKEFic3RyYWN0U2xvdFZpc2l0b3Im
IHZpc2l0b3IsIFZNJiB2bSwgY29uc3QgRnVuYyYgZnVuYykKIHsKICAgICBMb2NrSG9sZGVyIGxv
Y2tlcigqbV9sb2NrKTsKICAgICBmb3IgKFBsYW5NYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX3BsYW5z
LmJlZ2luKCk7IGl0ZXIgIT0gbV9wbGFucy5lbmQoKTsgKytpdGVyKSB7CiAgICAgICAgIFBsYW4q
IHBsYW4gPSBpdGVyLT52YWx1ZS5nZXQoKTsKICAgICAgICAgaWYgKHBsYW4tPnZtKCkgIT0gJnZt
KQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIHBsYW4tPml0ZXJhdGVDb2RlQmxvY2tz
Rm9yR0MoZnVuYyk7CisgICAgICAgIHBsYW4tPml0ZXJhdGVDb2RlQmxvY2tzRm9yR0ModmlzaXRv
ciwgZnVuYyk7CiAgICAgfQogfQogCiAjZWxzZSAvLyBFTkFCTEUoREZHX0pJVCkKIAogdGVtcGxh
dGU8dHlwZW5hbWUgRnVuYz4KLXZvaWQgaXRlcmF0ZUNvZGVCbG9ja3NGb3JHQyhWTSYsIGNvbnN0
IEZ1bmMmKQordm9pZCBpdGVyYXRlQ29kZUJsb2Nrc0ZvckdDKEFic3RyYWN0U2xvdFZpc2l0b3Im
LCBWTSYsIGNvbnN0IEZ1bmMmKQogewogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9BYnN0cmFjdFNsb3RWaXNpdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9BYnN0cmFjdFNsb3RWaXNpdG9yLmNwcAkobm9uZXhpc3RlbnQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9BYnN0cmFjdFNsb3RWaXNpdG9yLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDMzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkFic3RyYWN0U2xvdFZpc2l0b3IuaCIKKworI2luY2x1ZGUgIkFic3RyYWN0
U2xvdFZpc2l0b3JJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0MgeworCit9IC8vIG5hbWVzcGFj
ZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Fic3RyYWN0U2xvdFZpc2l0
b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9BYnN0cmFjdFNs
b3RWaXNpdG9yLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
QWJzdHJhY3RTbG90VmlzaXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjMyIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNl
CisKKyNpbmNsdWRlICJKU0NKU1ZhbHVlLmgiCisjaW5jbHVkZSAiTWFya1N0YWNrLmgiCisjaW5j
bHVkZSAiVmlzaXRSYWNlS2V5LmgiIC8vIG1sYW0KKyNpbmNsdWRlIDx3dGYvU2hhcmVkVGFzay5o
PgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2Ns
YXNzIENvbnNlcnZhdGl2ZVJvb3RzOworY2xhc3MgSGVhcDsKK2NsYXNzIEhlYXBDZWxsOworY2xh
c3MgSlNDZWxsOworY2xhc3MgTWFya2VkQmxvY2s7CitjbGFzcyBNYXJraW5nQ29uc3RyYWludDsK
K2NsYXNzIE1hcmtpbmdDb25zdHJhaW50U29sdmVyOworY2xhc3MgUHJlY2lzZUFsbG9jYXRpb247
CitjbGFzcyBTbG90VmlzaXRvcjsKK2NsYXNzIFZNOworY2xhc3MgVmVyaWZpZXJTbG90VmlzaXRv
cjsKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGNsYXNzIFdlYWs7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBU
LCB0eXBlbmFtZSBUcmFpdHM+IGNsYXNzIFdyaXRlQmFycmllckJhc2U7CisKK2NsYXNzIEFic3Ry
YWN0U2xvdFZpc2l0b3IgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEFic3RyYWN0U2xvdFZp
c2l0b3IpOworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIGNsYXNz
IENvbnRleHQgeworICAgIHB1YmxpYzoKKyAgICAgICAgQ29udGV4dChBYnN0cmFjdFNsb3RWaXNp
dG9yJiwgSGVhcENlbGwqKTsKKyAgICAgICAgfkNvbnRleHQoKTsKKyAgICAgICAgSGVhcENlbGwq
IGNlbGwoKSBjb25zdCB7IHJldHVybiBtX2NlbGw7IH0KKyAgICBwcml2YXRlOgorICAgICAgICBB
YnN0cmFjdFNsb3RWaXNpdG9yJiBtX3Zpc2l0b3I7CisgICAgICAgIEhlYXBDZWxsKiBtX2NlbGw7
CisgICAgICAgIENvbnRleHQqIG1fcHJldmlvdXM7CisgICAgfTsKKworICAgIGNsYXNzIFN1cHBy
ZXNzR0NWZXJpZmllclNjb3BlIHsKKyAgICBwdWJsaWM6CisgICAgICAgIFN1cHByZXNzR0NWZXJp
ZmllclNjb3BlKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCisgICAgICAgICAgICA6IG1f
dmlzaXRvcih2aXNpdG9yKQorICAgICAgICB7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCgh
bV92aXNpdG9yLm1fc3VwcHJlc3NWZXJpZmllcik7IC8vIG1sYW0gRklYTUUgbWFrZSBBU1NFUlQu
CisgICAgICAgICAgICBtX3Zpc2l0b3IubV9zdXBwcmVzc1ZlcmlmaWVyID0gdHJ1ZTsKKyAgICAg
ICAgfQorICAgICAgICB+U3VwcHJlc3NHQ1ZlcmlmaWVyU2NvcGUoKSB7IG1fdmlzaXRvci5tX3N1
cHByZXNzVmVyaWZpZXIgPSBmYWxzZTsgfQorICAgIHByaXZhdGU6CisgICAgICAgIEFic3RyYWN0
U2xvdFZpc2l0b3ImIG1fdmlzaXRvcjsKKyAgICB9OworCisgICAgZW51bSBSb290TWFya1JlYXNv
biB7CisgICAgICAgIE5vbmUsCisgICAgICAgIENvbnNlcnZhdGl2ZVNjYW4sCisgICAgICAgIFN0
cm9uZ1JlZmVyZW5jZXMsCisgICAgICAgIFByb3RlY3RlZFZhbHVlcywKKyAgICAgICAgTWFya0xp
c3RTZXQsCisgICAgICAgIFZNRXhjZXB0aW9ucywKKyAgICAgICAgU3Ryb25nSGFuZGxlcywKKyAg
ICAgICAgRGVidWdnZXIsCisgICAgICAgIEpJVFN0dWJSb3V0aW5lcywKKyAgICAgICAgV2Vha1Nl
dHMsCisgICAgICAgIE91dHB1dCwKKyAgICAgICAgREZHV29ya0xpc3RzLAorICAgICAgICBDb2Rl
QmxvY2tzLAorICAgICAgICBET01HQ091dHB1dCwKKyAgICB9OworICAgIHVzaW5nIFJvb3RNYXJr
UmVhc29uU3RvcmFnZSA9IHVpbnQ4X3Q7CisKKyAgICBjbGFzcyBEZWZhdWx0TWFya2luZ1Zpb2xh
dGlvbkFzc2VydGlvblNjb3BlIHsKKyAgICBwdWJsaWM6CisgICAgICAgIERlZmF1bHRNYXJraW5n
VmlvbGF0aW9uQXNzZXJ0aW9uU2NvcGUoQWJzdHJhY3RTbG90VmlzaXRvciYpIHsgfQorICAgIH07
CisKKyAgICB2aXJ0dWFsIH5BYnN0cmFjdFNsb3RWaXNpdG9yKCkgPSBkZWZhdWx0OworCisgICAg
TWFya1N0YWNrQXJyYXkmIGNvbGxlY3Rvck1hcmtTdGFjaygpIHsgcmV0dXJuIG1fY29sbGVjdG9y
U3RhY2s7IH0KKyAgICBNYXJrU3RhY2tBcnJheSYgbXV0YXRvck1hcmtTdGFjaygpIHsgcmV0dXJu
IG1fbXV0YXRvclN0YWNrOyB9CisgICAgY29uc3QgTWFya1N0YWNrQXJyYXkmIGNvbGxlY3Rvck1h
cmtTdGFjaygpIGNvbnN0IHsgcmV0dXJuIG1fY29sbGVjdG9yU3RhY2s7IH0KKyAgICBjb25zdCBN
YXJrU3RhY2tBcnJheSYgbXV0YXRvck1hcmtTdGFjaygpIGNvbnN0IHsgcmV0dXJuIG1fbXV0YXRv
clN0YWNrOyB9CisKKyAgICBib29sIGlzRW1wdHkoKSB7IHJldHVybiBtX2NvbGxlY3RvclN0YWNr
LmlzRW1wdHkoKSAmJiBtX211dGF0b3JTdGFjay5pc0VtcHR5KCk7IH0KKworICAgIFZNJiB2bSgp
OworICAgIGNvbnN0IFZNJiB2bSgpIGNvbnN0OworICAgIEhlYXAqIGhlYXAoKSBjb25zdDsKKwor
ICAgIHZpcnR1YWwgdm9pZCBhcHBlbmRfQ29uc2VydmF0aXZlUm9vdHMoY29uc3QgQ29uc2VydmF0
aXZlUm9vdHMmKSA9IDA7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBUcmFp
dHM+IHZvaWQgYXBwZW5kKGNvbnN0IFdyaXRlQmFycmllckJhc2U8VCwgVHJhaXRzPiYpOworICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFRyYWl0cz4gdm9pZCBhcHBlbmRIaWRkZW4o
Y29uc3QgV3JpdGVCYXJyaWVyQmFzZTxULCBUcmFpdHM+Jik7CisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgSXRlcmF0b3I+IHZvaWQgYXBwZW5kKEl0ZXJhdG9yIGJlZ2luICwgSXRlcmF0b3IgZW5kKTsK
KyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgYXBwZW5kVmFsdWVzKGNvbnN0IFdyaXRlQmFycmllckJh
c2U8VW5rbm93biwgUmF3VmFsdWVUcmFpdHM8VW5rbm93bj4+Kiwgc2l6ZV90IGNvdW50KTsKKyAg
ICBBTFdBWVNfSU5MSU5FIHZvaWQgYXBwZW5kVmFsdWVzSGlkZGVuKGNvbnN0IFdyaXRlQmFycmll
ckJhc2U8VW5rbm93biwgUmF3VmFsdWVUcmFpdHM8VW5rbm93bj4+Kiwgc2l6ZV90IGNvdW50KTsK
KworICAgIC8vIFRoZXNlIGRvbid0IHJlcXVpcmUgeW91IHRvIHByb3ZlIHRoYXQgeW91IGhhdmUg
YSBXcml0ZUJhcnJpZXI8Pi4gVGhhdCBtYWtlcyBzZW5zZQorICAgIC8vIGZvcjoKKyAgICAvLwor
ICAgIC8vIC0gcm9vdHMuCisgICAgLy8gLSBzb3BoaXN0aWNhdGVkIGRhdGEgc3RydWN0dXJlcyB0
aGF0IGJhcnJpZXIgdGhyb3VnaCBvdGhlciBtZWFucyAobGlrZSBERkc6OlBsYW4gYW5kCisgICAg
Ly8gICBmcmllbmRzKS4KKyAgICAvLworICAgIC8vIElmIHlvdSBhcmUgbm90IGEgcm9vdCBhbmQg
eW91IGRvbid0IGtub3cgd2hhdCBraW5kIG9mIGJhcnJpZXIgeW91IGhhdmUsIHRoZW4geW91Cisg
ICAgLy8gc2hvdWxkbid0IGNhbGwgdGhlc2UgbWV0aG9kcy4KKyAgICBBTFdBWVNfSU5MSU5FIHZv
aWQgYXBwZW5kVW5iYXJyaWVyZWQoSlNWYWx1ZSk7CisgICAgQUxXQVlTX0lOTElORSB2b2lkIGFw
cGVuZFVuYmFycmllcmVkKEpTVmFsdWUqLCBzaXplX3QpOworICAgIEFMV0FZU19JTkxJTkUgdm9p
ZCBhcHBlbmRVbmJhcnJpZXJlZChKU0NlbGwqIGNlbGwpCisgICAgeworICAgICAgICBpZiAoIWNl
bGwpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGFwcGVuZFVuYmFycmllcmVkSW1wbChj
ZWxsKTsKKyAgICB9CisgICAgdmlydHVhbCB2b2lkIGFwcGVuZFVuYmFycmllcmVkSW1wbChKU0Nl
bGwqKSA9IDA7CisKKyAgICB2aXJ0dWFsIGJvb2wgYWRkT3BhcXVlUm9vdCh2b2lkKikgPSAwOyAv
LyBSZXR1cm5zIHRydWUgaWYgdGhlIHJvb3Qgd2FzIG5ldy4KKyAgICB2aXJ0dWFsIGJvb2wgY29u
dGFpbnNPcGFxdWVSb290KHZvaWQqKSBjb25zdCA9IDA7CisKKyAgICB2aXJ0dWFsIGJvb2wgaXNG
aXJzdFZpc2l0KCkgY29uc3QgPSAwOyAvLyBtbGFtIEZJWE1FCisKKyAgICB2aXJ0dWFsIGJvb2wg
aXNNYXJrZWQoY29uc3Qgdm9pZCopIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNNYXJr
ZWQoTWFya2VkQmxvY2smLCBIZWFwQ2VsbCopIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wg
aXNNYXJrZWQoUHJlY2lzZUFsbG9jYXRpb24mLCBIZWFwQ2VsbCopIGNvbnN0ID0gMDsKKworICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgdm9pZCBhcHBlbmQoY29uc3QgV2VhazxUPiYgd2Vh
ayk7CisKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgYXBwZW5kSGlkZGVuVW5iYXJyaWVyZWQoSlNW
YWx1ZSk7CisgICAgQUxXQVlTX0lOTElORSB2b2lkIGFwcGVuZEhpZGRlblVuYmFycmllcmVkKEpT
Q2VsbCogY2VsbCkKKyAgICB7CisgICAgICAgIGlmICghY2VsbCkKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgYXBwZW5kSGlkZGVuVW5iYXJyaWVyZWRJbXBsKGNlbGwpOworICAgIH0KKyAg
ICB2aXJ0dWFsIHZvaWQgYXBwZW5kSGlkZGVuVW5iYXJyaWVyZWRJbXBsKEpTQ2VsbCopID0gMDsK
KworICAgIHNpemVfdCB2aXNpdENvdW50KCkgY29uc3QgeyByZXR1cm4gbV92aXNpdENvdW50OyB9
CisKKyAgICB2b2lkIGFkZFRvVmlzaXRDb3VudChzaXplX3QgdmFsdWUpIHsgbV92aXNpdENvdW50
ICs9IHZhbHVlOyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYWRkUGFyYWxsZWxDb25zdHJhaW50VGFz
ayhSZWZQdHI8U2hhcmVkVGFzazx2b2lkKEFic3RyYWN0U2xvdFZpc2l0b3ImKT4+KSA9IDA7CisK
KyAgICB2aXJ0dWFsIHZvaWQgbWFya0F1eGlsaWFyeShjb25zdCB2b2lkKiBiYXNlKSA9IDA7CisK
KyAgICB2aXJ0dWFsIHZvaWQgcmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKHNpemVfdCkgPSAwOwor
I2lmIEVOQUJMRShSRVNPVVJDRV9VU0FHRSkKKyAgICB2aXJ0dWFsIHZvaWQgcmVwb3J0RXh0ZXJu
YWxNZW1vcnlWaXNpdGVkKHNpemVfdCkgPSAwOworI2VuZGlmCisKKyAgICB2aXJ0dWFsIHZvaWQg
ZHVtcChQcmludFN0cmVhbSYpIGNvbnN0ID0gMDsKKworICAgIFJvb3RNYXJrUmVhc29uIHJvb3RN
YXJrUmVhc29uKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Um9vdE1hcmtSZWFzb24+KG1f
cm9vdE1hcmtSZWFzb24pOyB9CisgICAgdm9pZCBzZXRSb290TWFya1JlYXNvbihSb290TWFya1Jl
YXNvbiByZWFzb24pIHsgbV9yb290TWFya1JlYXNvbiA9IHJlYXNvbjsgfQorCisgICAgdmlydHVh
bCBib29sIG11dGF0b3JJc1N0b3BwZWQoKSBjb25zdCA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQg
ZGlkUmFjZShjb25zdCBWaXNpdFJhY2VLZXkmKSA9IDA7CisgICAgdm9pZCBkaWRSYWNlKEpTQ2Vs
bCogY2VsbCwgY29uc3QgY2hhciogcmVhc29uKSB7IGRpZFJhY2UoVmlzaXRSYWNlS2V5KGNlbGws
IHJlYXNvbikpOyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXRBc0NvbnN0cmFpbnQoY29uc3Qg
SlNDZWxsKikgPSAwOworCisgICAgY29uc3QgY2hhciogY29kZU5hbWUoKSBjb25zdCB7IHJldHVy
biBtX2NvZGVOYW1lLmRhdGEoKTsgfQorCitwcm90ZWN0ZWQ6CisgICAgaW5saW5lIEFic3RyYWN0
U2xvdFZpc2l0b3IoSGVhcCYsIENTdHJpbmcgY29kZU5hbWUpOworCisgICAgSGVhcENlbGwqIHBh
cmVudENlbGwoKSBjb25zdDsKKyAgICB2b2lkIHJlc2V0KCk7CisKKyAgICBNYXJrU3RhY2tBcnJh
eSBtX2NvbGxlY3RvclN0YWNrOworICAgIE1hcmtTdGFja0FycmF5IG1fbXV0YXRvclN0YWNrOwor
CisgICAgc2l6ZV90IG1fdmlzaXRDb3VudCB7IDAgfTsKKworICAgIEhlYXAmIG1faGVhcDsKKyAg
ICBDb250ZXh0KiBtX2NvbnRleHQgeyBudWxscHRyIH07CisgICAgQ1N0cmluZyBtX2NvZGVOYW1l
OworCisgICAgUm9vdE1hcmtSZWFzb25TdG9yYWdlIG1fcm9vdE1hcmtSZWFzb24geyBSb290TWFy
a1JlYXNvbjo6Tm9uZSB9OworICAgIGJvb2wgbV9zdXBwcmVzc1ZlcmlmaWVyIHsgZmFsc2UgfTsK
KworICAgIE1hcmtpbmdDb25zdHJhaW50KiBtX2N1cnJlbnRDb25zdHJhaW50IHsgbnVsbHB0ciB9
OworICAgIE1hcmtpbmdDb25zdHJhaW50U29sdmVyKiBtX2N1cnJlbnRTb2x2ZXIgeyBudWxscHRy
IH07CisKKyAgICBmcmllbmQgY2xhc3MgTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXI7Cit9OworCitj
bGFzcyBTZXRSb290TWFya1JlYXNvblNjb3BlIHsKK3B1YmxpYzoKKyAgICBTZXRSb290TWFya1Jl
YXNvblNjb3BlKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIEFic3RyYWN0U2xvdFZpc2l0
b3I6OlJvb3RNYXJrUmVhc29uIHJlYXNvbikKKyAgICAgICAgOiBtX3Zpc2l0b3IodmlzaXRvcikK
KyAgICAgICAgLCBtX3ByZXZpb3VzUmVhc29uKHZpc2l0b3Iucm9vdE1hcmtSZWFzb24oKSkKKyAg
ICB7CisgICAgICAgIG1fdmlzaXRvci5zZXRSb290TWFya1JlYXNvbihyZWFzb24pOworICAgIH0K
KworICAgIH5TZXRSb290TWFya1JlYXNvblNjb3BlKCkKKyAgICB7CisgICAgICAgIG1fdmlzaXRv
ci5zZXRSb290TWFya1JlYXNvbihtX3ByZXZpb3VzUmVhc29uKTsKKyAgICB9CisKK3ByaXZhdGU6
CisgICAgQWJzdHJhY3RTbG90VmlzaXRvciYgbV92aXNpdG9yOworICAgIEFic3RyYWN0U2xvdFZp
c2l0b3I6OlJvb3RNYXJrUmVhc29uIG1fcHJldmlvdXNSZWFzb247Cit9OworCit9IC8vIG5hbWVz
cGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Fic3RyYWN0U2xvdFZp
c2l0b3JJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
QWJzdHJhY3RTbG90VmlzaXRvcklubGluZXMuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9BYnN0cmFjdFNsb3RWaXNpdG9ySW5saW5lcy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMTM2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJBYnN0cmFjdFNsb3RWaXNpdG9y
LmgiCisjaW5jbHVkZSAiSGVhcC5oIgorI2luY2x1ZGUgIldlYWtJbmxpbmVzLmgiCisjaW5jbHVk
ZSAiV3JpdGVCYXJyaWVyLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitpbmxpbmUgQWJzdHJhY3RT
bG90VmlzaXRvcjo6Q29udGV4dDo6Q29udGV4dChBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9y
LCBIZWFwQ2VsbCogY2VsbCkKKyAgICA6IG1fdmlzaXRvcih2aXNpdG9yKQorICAgICwgbV9jZWxs
KGNlbGwpCit7CisgICAgbV9wcmV2aW91cyA9IG1fdmlzaXRvci5tX2NvbnRleHQ7CisgICAgbV92
aXNpdG9yLm1fY29udGV4dCA9IHRoaXM7Cit9CisKK2lubGluZSBBYnN0cmFjdFNsb3RWaXNpdG9y
OjpDb250ZXh0Ojp+Q29udGV4dCgpCit7CisgICAgbV92aXNpdG9yLm1fY29udGV4dCA9IG1fcHJl
dmlvdXM7Cit9CisKK2lubGluZSBBYnN0cmFjdFNsb3RWaXNpdG9yOjpBYnN0cmFjdFNsb3RWaXNp
dG9yKEhlYXAmIGhlYXAsIENTdHJpbmcgY29kZU5hbWUpCisgICAgOiBtX2hlYXAoaGVhcCkKKyAg
ICAsIG1fY29kZU5hbWUoY29kZU5hbWUpCit7Cit9CisKK2lubGluZSBIZWFwKiBBYnN0cmFjdFNs
b3RWaXNpdG9yOjpoZWFwKCkgY29uc3QKK3sKKyAgICByZXR1cm4gJm1faGVhcDsKK30KKworaW5s
aW5lIFZNJiBBYnN0cmFjdFNsb3RWaXNpdG9yOjp2bSgpCit7CisgICAgcmV0dXJuIG1faGVhcC52
bSgpOworfQorCitpbmxpbmUgY29uc3QgVk0mIEFic3RyYWN0U2xvdFZpc2l0b3I6OnZtKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gbV9oZWFwLnZtKCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+
CitBTFdBWVNfSU5MSU5FIHZvaWQgQWJzdHJhY3RTbG90VmlzaXRvcjo6YXBwZW5kKGNvbnN0IFdl
YWs8VD4mIHdlYWspCit7CisgICAgYXBwZW5kVW5iYXJyaWVyZWQod2Vhay5nZXQoKSk7Cit9CisK
K3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFRyYWl0cz4KK0FMV0FZU19JTkxJTkUgdm9p
ZCBBYnN0cmFjdFNsb3RWaXNpdG9yOjphcHBlbmQoY29uc3QgV3JpdGVCYXJyaWVyQmFzZTxULCBU
cmFpdHM+JiBzbG90KQoreworICAgIGFwcGVuZFVuYmFycmllcmVkKHNsb3QuZ2V0KCkpOworfQor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBUcmFpdHM+CitBTFdBWVNfSU5MSU5FIHZv
aWQgQWJzdHJhY3RTbG90VmlzaXRvcjo6YXBwZW5kSGlkZGVuKGNvbnN0IFdyaXRlQmFycmllckJh
c2U8VCwgVHJhaXRzPiYgc2xvdCkKK3sKKyAgICBhcHBlbmRIaWRkZW5VbmJhcnJpZXJlZChzbG90
LmdldCgpKTsKK30KKworQUxXQVlTX0lOTElORSB2b2lkIEFic3RyYWN0U2xvdFZpc2l0b3I6OmFw
cGVuZEhpZGRlblVuYmFycmllcmVkKEpTVmFsdWUgdmFsdWUpCit7CisgICAgaWYgKHZhbHVlLmlz
Q2VsbCgpKQorICAgICAgICBhcHBlbmRIaWRkZW5VbmJhcnJpZXJlZCh2YWx1ZS5hc0NlbGwoKSk7
Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEl0ZXJhdG9yPgorQUxXQVlTX0lOTElORSB2b2lkIEFi
c3RyYWN0U2xvdFZpc2l0b3I6OmFwcGVuZChJdGVyYXRvciBiZWdpbiwgSXRlcmF0b3IgZW5kKQor
eworICAgIGZvciAoYXV0byBpdCA9IGJlZ2luOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgIGFw
cGVuZCgqaXQpOworfQorCitBTFdBWVNfSU5MSU5FIHZvaWQgQWJzdHJhY3RTbG90VmlzaXRvcjo6
YXBwZW5kVmFsdWVzKGNvbnN0IFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4qIGJhcnJpZXJzLCBz
aXplX3QgY291bnQpCit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKQor
ICAgICAgICBhcHBlbmQoYmFycmllcnNbaV0pOworfQorCitBTFdBWVNfSU5MSU5FIHZvaWQgQWJz
dHJhY3RTbG90VmlzaXRvcjo6YXBwZW5kVmFsdWVzSGlkZGVuKGNvbnN0IFdyaXRlQmFycmllckJh
c2U8VW5rbm93bj4qIGJhcnJpZXJzLCBzaXplX3QgY291bnQpCit7CisgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBjb3VudDsgKytpKQorICAgICAgICBhcHBlbmRIaWRkZW4oYmFycmllcnNbaV0p
OworfQorCitBTFdBWVNfSU5MSU5FIHZvaWQgQWJzdHJhY3RTbG90VmlzaXRvcjo6YXBwZW5kVW5i
YXJyaWVyZWQoSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUuaXNDZWxsKCkpCisgICAg
ICAgIGFwcGVuZFVuYmFycmllcmVkKHZhbHVlLmFzQ2VsbCgpKTsKK30KKworQUxXQVlTX0lOTElO
RSB2b2lkIEFic3RyYWN0U2xvdFZpc2l0b3I6OmFwcGVuZFVuYmFycmllcmVkKEpTVmFsdWUqIHNs
b3QsIHNpemVfdCBjb3VudCkKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gY291bnQ7IGktLTspCisg
ICAgICAgIGFwcGVuZFVuYmFycmllcmVkKHNsb3RbaV0pOworfQorCitBTFdBWVNfSU5MSU5FIEhl
YXBDZWxsKiBBYnN0cmFjdFNsb3RWaXNpdG9yOjpwYXJlbnRDZWxsKCkgY29uc3QKK3sKKyAgICBp
ZiAoIW1fY29udGV4dCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIG1fY29u
dGV4dC0+Y2VsbCgpOworfQorCitBTFdBWVNfSU5MSU5FIHZvaWQgQWJzdHJhY3RTbG90VmlzaXRv
cjo6cmVzZXQoKQoreworICAgIG1fdmlzaXRDb3VudCA9IDA7Cit9CisKK30gLy8gbmFtZXNwYWNl
IEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGFuZGxlU2V0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IYW5kbGVTZXQuY3BwCShyZXZp
c2lvbiAyNzI3MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IYW5kbGVTZXQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC01Niw3ICs1Niw3IEBAIHZvaWQgSGFuZGxlU2V0Ojpncm93KCkK
ICAgICB9CiB9CiAKLXZvaWQgSGFuZGxlU2V0Ojp2aXNpdFN0cm9uZ0hhbmRsZXMoU2xvdFZpc2l0
b3ImIHZpc2l0b3IpCit2b2lkIEhhbmRsZVNldDo6dmlzaXRTdHJvbmdIYW5kbGVzKEFic3RyYWN0
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgTm9kZSogZW5kID0gbV9zdHJvbmdMaXN0LmVu
ZCgpOwogICAgIGZvciAoTm9kZSogbm9kZSA9IG1fc3Ryb25nTGlzdC5iZWdpbigpOyBub2RlICE9
IGVuZDsgbm9kZSA9IG5vZGUtPm5leHQoKSkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvSGFuZGxlU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvSGFuZGxlU2V0LmgJKHJldmlzaW9uIDI3MjcxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0hhbmRsZVNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSwxMCArMzUsMTAgQEAKIAog
bmFtZXNwYWNlIEpTQyB7CiAKK2NsYXNzIEFic3RyYWN0U2xvdFZpc2l0b3I7CiBjbGFzcyBIYW5k
bGVTZXQ7CiBjbGFzcyBWTTsKIGNsYXNzIEpTVmFsdWU7Ci1jbGFzcyBTbG90VmlzaXRvcjsKIAog
Y2xhc3MgSGFuZGxlTm9kZSB7CiBwdWJsaWM6CkBAIC03Myw3ICs3Myw3IEBAIHB1YmxpYzoKICAg
ICBIYW5kbGVTbG90IGFsbG9jYXRlKCk7CiAgICAgdm9pZCBkZWFsbG9jYXRlKEhhbmRsZVNsb3Qp
OwogCi0gICAgdm9pZCB2aXNpdFN0cm9uZ0hhbmRsZXMoU2xvdFZpc2l0b3ImKTsKKyAgICB2b2lk
IHZpc2l0U3Ryb25nSGFuZGxlcyhBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAKICAgICBKU19FWFBP
UlRfUFJJVkFURSB2b2lkIHdyaXRlQmFycmllcihIYW5kbGVTbG90LCBjb25zdCBKU1ZhbHVlJik7
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCShyZXZpc2lvbiAyNzI3MTAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNzIsNiArNzIsNyBAQAogI2luY2x1ZGUgIlR5cGVQcm9maWxlci5oIgogI2luY2x1ZGUgIlR5
cGVQcm9maWxlckxvZy5oIgogI2luY2x1ZGUgIlZNLmgiCisjaW5jbHVkZSAiVmVyaWZpZXJTbG90
VmlzaXRvcklubGluZXMuaCIKICNpbmNsdWRlICJXZWFrTWFwSW1wbElubGluZXMuaCIKICNpbmNs
dWRlICJXZWFrU2V0SW5saW5lcy5oIgogI2luY2x1ZGUgPGFsZ29yaXRobT4KQEAgLTk2LDYgKzk3
LDkgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKK3Vuc2lnbmVkIG1sYW1UaW1lID0gMDsKK2Jvb2wg
bWxhbVZlcmJvc2UgPSBmYWxzZTsKKwogbmFtZXNwYWNlIHsKIAogc3RhdGljIGNvbnN0ZXhwciBi
b29sIHZlcmJvc2VTdG9wID0gZmFsc2U7CkBAIC0zMDQsNiArMzA4LDcgQEAgSGVhcDo6SGVhcChW
TSYgdm0sIEhlYXBUeXBlIGhlYXBUeXBlKQogICAgICwgbV90aHJlYWRMb2NrKEJveDxMb2NrPjo6
Y3JlYXRlKCkpCiAgICAgLCBtX3RocmVhZENvbmRpdGlvbihBdXRvbWF0aWNUaHJlYWRDb25kaXRp
b246OmNyZWF0ZSgpKQogeworICAgIG1sYW1WZXJib3NlID0gZ2V0ZW52KCJtbGFtVmVyYm9zZSIp
OwogICAgIG1fd29ybGRTdGF0ZS5zdG9yZSgwKTsKIAogICAgIGZvciAodW5zaWduZWQgaSA9IDAs
IG51bWJlck9mUGFyYWxsZWxUaHJlYWRzID0gaGVhcEhlbHBlclBvb2woKS5udW1iZXJPZlRocmVh
ZHMoKTsgaSA8IG51bWJlck9mUGFyYWxsZWxUaHJlYWRzOyArK2kpIHsKQEAgLTY0NCwxOCArNjQ5
LDE4IEBAIHZvaWQgSGVhcDo6Y29tcGxldGVBbGxKSVRQbGFucygpCiB9CiAKIHRlbXBsYXRlPHR5
cGVuYW1lIEZ1bmM+Ci12b2lkIEhlYXA6Oml0ZXJhdGVFeGVjdXRpbmdBbmRDb21waWxpbmdDb2Rl
QmxvY2tzKGNvbnN0IEZ1bmMmIGZ1bmMpCit2b2lkIEhlYXA6Oml0ZXJhdGVFeGVjdXRpbmdBbmRD
b21waWxpbmdDb2RlQmxvY2tzKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IEZ1
bmMmIGZ1bmMpCiB7CiAgICAgbV9jb2RlQmxvY2tzLT5pdGVyYXRlQ3VycmVudGx5RXhlY3V0aW5n
KGZ1bmMpOwogICAgIGlmIChPcHRpb25zOjp1c2VKSVQoKSkKLSAgICAgICAgREZHOjppdGVyYXRl
Q29kZUJsb2Nrc0ZvckdDKG1fdm0sIGZ1bmMpOworICAgICAgICBERkc6Oml0ZXJhdGVDb2RlQmxv
Y2tzRm9yR0ModmlzaXRvciwgbV92bSwgZnVuYyk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEZ1
bmM+Ci12b2lkIEhlYXA6Oml0ZXJhdGVFeGVjdXRpbmdBbmRDb21waWxpbmdDb2RlQmxvY2tzV2l0
aG91dEhvbGRpbmdMb2Nrcyhjb25zdCBGdW5jJiBmdW5jKQordm9pZCBIZWFwOjppdGVyYXRlRXhl
Y3V0aW5nQW5kQ29tcGlsaW5nQ29kZUJsb2Nrc1dpdGhvdXRIb2xkaW5nTG9ja3MoQWJzdHJhY3RT
bG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgRnVuYyYgZnVuYykKIHsKICAgICBWZWN0b3I8Q29k
ZUJsb2NrKiwgMjU2PiBjb2RlQmxvY2tzOwotICAgIGl0ZXJhdGVFeGVjdXRpbmdBbmRDb21waWxp
bmdDb2RlQmxvY2tzKAorICAgIGl0ZXJhdGVFeGVjdXRpbmdBbmRDb21waWxpbmdDb2RlQmxvY2tz
KHZpc2l0b3IsCiAgICAgICAgIFsmXSAoQ29kZUJsb2NrKiBjb2RlQmxvY2spIHsKICAgICAgICAg
ICAgIGNvZGVCbG9ja3MuYXBwZW5kKGNvZGVCbG9jayk7CiAgICAgICAgIH0pOwpAQCAtNzMzLDE0
ICs3MzgsNiBAQCB2b2lkIEhlYXA6OnJlbW92ZURlYWRDb21waWxlcldvcmtsaXN0RW50CiAjZW5k
aWYKIH0KIAotYm9vbCBIZWFwOjppc0FuYWx5emluZ0hlYXAoKSBjb25zdAotewotICAgIEhlYXBQ
cm9maWxlciogaGVhcFByb2ZpbGVyID0gbV92bS5oZWFwUHJvZmlsZXIoKTsKLSAgICBpZiAoVU5M
SUtFTFkoaGVhcFByb2ZpbGVyKSkKLSAgICAgICAgcmV0dXJuIGhlYXBQcm9maWxlci0+YWN0aXZl
SGVhcEFuYWx5emVyKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCiBzdHJ1Y3QgR2F0aGVyRXh0
cmFIZWFwRGF0YSA6IE1hcmtlZEJsb2NrOjpDb3VudEZ1bmN0b3IgewogICAgIEdhdGhlckV4dHJh
SGVhcERhdGEoVk0mIHZtLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQogICAgICAgICA6IG1fdm0o
dm0pCkBAIC0xMDM1LDYgKzEwMzIsNyBAQCB2b2lkIEhlYXA6OmFkZFRvUmVtZW1iZXJlZFNldChj
b25zdCBKU0NlCiAgICAgLy8gZ2V0IHNjYW5uZWQgYWdhaW4uIElmIHdlIGxvc2UgdGhlbiBzb21l
b25lIGVsc2Ugd2lsbCBiYXJyaWVyIHRoZSBvYmplY3QgYWdhaW4uIFRoYXQgd291bGQKICAgICAv
LyBiZSB1bmZvcnR1bmF0ZSBidXQgbm90IHRoZSBlbmQgb2YgdGhlIHdvcmxkLgogICAgIGNlbGwt
PnNldENlbGxTdGF0ZShDZWxsU3RhdGU6OlBvc3NpYmx5R3JleSk7CisgICAgaWYgKG1sYW1WZXJi
b3NlKSBkYXRhTG9nTG4oIiAgICBtbGFtIEhlYXA6OmFkZFRvUmVtZW1iZXJlZFNldCgpIG1fbXV0
YXRvck1hcmtTdGFjay0+YXBwZW5kKGNlbGwpOiBjZWxsICIsIFJhd1BvaW50ZXIoY2VsbCkpOwog
ICAgIG1fbXV0YXRvck1hcmtTdGFjay0+YXBwZW5kKGNlbGwpOwogfQogCkBAIC0xMjQ1LDYgKzEy
NDMsOCBAQCBORVZFUl9JTkxJTkUgYm9vbCBIZWFwOjpydW5Ob3RSdW5uaW5nUGhhCiAKIE5FVkVS
X0lOTElORSBib29sIEhlYXA6OnJ1bkJlZ2luUGhhc2UoR0NDb25kdWN0b3IgY29ubikKIHsKKyAg
ICBtbGFtVGltZSsrOworICAgIGlmIChtbGFtVmVyYm9zZSkgZGF0YUxvZ0xuKCIgICAgbWxhbSA8
Z2MjIiwgbWxhbVRpbWUsICI+IEhlYXA6OnJ1bkJlZ2luUGhhc2UoKSBoZWFwLm1fbXV0YXRvck1h
cmtTdGFjay0+c2l6ZSgpICIsIG1fbXV0YXRvck1hcmtTdGFjay0+c2l6ZSgpLCAiIG1fcmFjZU1h
cmtTdGFjay0+c2l6ZSgpICIsIG1fcmFjZU1hcmtTdGFjay0+c2l6ZSgpKTsKICAgICBtX2N1cnJl
bnRHQ1N0YXJ0VGltZSA9IE1vbm90b25pY1RpbWU6Om5vdygpOwogICAgIAogICAgIHsKQEAgLTEz
NDYsNiArMTM0Niw3IEBAIE5FVkVSX0lOTElORSBib29sIEhlYXA6OnJ1bkJlZ2luUGhhc2UoR0MK
IAogTkVWRVJfSU5MSU5FIGJvb2wgSGVhcDo6cnVuRml4cG9pbnRQaGFzZShHQ0NvbmR1Y3RvciBj
b25uKQogeworICAgIGlmIChtbGFtVmVyYm9zZSkgZGF0YUxvZ0xuKCIgICAgbWxhbSBIZWFwOjpy
dW5GaXhwb2ludFBoYXNlKCkgaGVhcC5tX211dGF0b3JNYXJrU3RhY2stPnNpemUoKSAiLCBtX211
dGF0b3JNYXJrU3RhY2stPnNpemUoKSwgIiBtX3JhY2VNYXJrU3RhY2stPnNpemUoKSAiLCBtX3Jh
Y2VNYXJrU3RhY2stPnNpemUoKSk7CiAgICAgUkVMRUFTRV9BU1NFUlQoY29ubiA9PSBHQ0NvbmR1
Y3Rvcjo6Q29sbGVjdG9yIHx8IG1fY3VycmVudFRocmVhZFN0YXRlKTsKICAgICAKICAgICBTbG90
VmlzaXRvciYgc2xvdFZpc2l0b3IgPSAqbV9jb2xsZWN0b3JTbG90VmlzaXRvcjsKQEAgLTE0MTMs
NyArMTQxNCw3IEBAIE5FVkVSX0lOTElORSBib29sIEhlYXA6OnJ1bkZpeHBvaW50UGhhc2UKICAg
ICAvLyBUaGlzIGRvZXNuJ3QgaGF2ZSB0byBjaGVjayB0aGUgbXV0YXRvciBTbG90VmlzaXRvciBi
ZWNhdXNlIHRoYXQgb25lIGJlY29tZXMgZW1wdHkgYWZ0ZXIgZXZlcnkgR0MKICAgICAvLyB3b3Jr
IGluY3JlbWVudCwgc28gaXQgbXVzdCBiZSBlbXB0eSBub3cuCiAgICAgaWYgKHNsb3RWaXNpdG9y
LmRpZFJlYWNoVGVybWluYXRpb24oKSkKLSAgICAgICAgcmV0dXJuIHRydWU7IC8vIFRoaXMgaXMg
bGlrZSByZWxvb3BpbmcgdG8gdGhlIHRvcCBpZiBydW5GaXhwb2ludFBoYXNlKCkuCisgICAgICAg
IHJldHVybiB0cnVlOyAvLyBUaGlzIGlzIGxpa2UgcmVsb29waW5nIHRvIHRoZSB0b3Agb2YgcnVu
Rml4cG9pbnRQaGFzZSgpLgogICAgICAgICAKICAgICBpZiAoIW1fc2NoZWR1bGVyLT5zaG91bGRS
ZXN1bWUoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0xNDM0LDYgKzE0MzUsNyBAQCBORVZF
Ul9JTkxJTkUgYm9vbCBIZWFwOjpydW5GaXhwb2ludFBoYXNlCiAKIE5FVkVSX0lOTElORSBib29s
IEhlYXA6OnJ1bkNvbmN1cnJlbnRQaGFzZShHQ0NvbmR1Y3RvciBjb25uKQogeworICAgIGlmICht
bGFtVmVyYm9zZSkgZGF0YUxvZ0xuKCIgICAgbWxhbSBIZWFwOjpydW5Db25jdXJyZW50UGhhc2Uo
KSBoZWFwLm1fbXV0YXRvck1hcmtTdGFjay0+c2l6ZSgpICIsIG1fbXV0YXRvck1hcmtTdGFjay0+
c2l6ZSgpLCAiIG1fcmFjZU1hcmtTdGFjay0+c2l6ZSgpICIsIG1fcmFjZU1hcmtTdGFjay0+c2l6
ZSgpKTsKICAgICBTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IgPSAqbV9jb2xsZWN0b3JTbG90Vmlz
aXRvcjsKIAogICAgIHN3aXRjaCAoY29ubikgewpAQCAtMTQ2NCw2ICsxNDY2LDcgQEAgTkVWRVJf
SU5MSU5FIGJvb2wgSGVhcDo6cnVuQ29uY3VycmVudFBoYQogCiBORVZFUl9JTkxJTkUgYm9vbCBI
ZWFwOjpydW5SZWxvb3BQaGFzZShHQ0NvbmR1Y3RvciBjb25uKQogeworICAgIGlmIChtbGFtVmVy
Ym9zZSkgZGF0YUxvZ0xuKCIgICAgbWxhbSBIZWFwOjpydW5SZWxvb3BQaGFzZSgpIGhlYXAubV9t
dXRhdG9yTWFya1N0YWNrLT5zaXplKCkgIiwgbV9tdXRhdG9yTWFya1N0YWNrLT5zaXplKCksICIg
bV9yYWNlTWFya1N0YWNrLT5zaXplKCkgIiwgbV9yYWNlTWFya1N0YWNrLT5zaXplKCkpOwogICAg
IGRhdGFMb2dJZihPcHRpb25zOjpsb2dHQygpLCAiW0dDPCIsIFJhd1BvaW50ZXIodGhpcyksICI+
OiAiLCBnY0NvbmR1Y3RvclNob3J0TmFtZShjb25uKSwgIiAiKTsKICAgICAKICAgICBtX3NjaGVk
dWxlci0+ZGlkU3RvcCgpOwpAQCAtMTQ3Niw3ICsxNDc5LDkgQEAgTkVWRVJfSU5MSU5FIGJvb2wg
SGVhcDo6cnVuUmVsb29wUGhhc2UoRwogCiBORVZFUl9JTkxJTkUgYm9vbCBIZWFwOjpydW5FbmRQ
aGFzZShHQ0NvbmR1Y3RvciBjb25uKQogeworICAgIGlmIChtbGFtVmVyYm9zZSkgZGF0YUxvZ0xu
KCIgICAgbWxhbSBIZWFwOjpydW5FbmRQaGFzZSgpIGhlYXAubV9tdXRhdG9yTWFya1N0YWNrLT5z
aXplKCkgIiwgbV9tdXRhdG9yTWFya1N0YWNrLT5zaXplKCksICIgbV9yYWNlTWFya1N0YWNrLT5z
aXplKCkgIiwgbV9yYWNlTWFya1N0YWNrLT5zaXplKCkpOwogICAgIG1fc2NoZWR1bGVyLT5lbmRD
b2xsZWN0aW9uKCk7CisgICAgaWYgKG1sYW1WZXJib3NlKSBkYXRhTG9nTG4oIiAgICBtbGFtIEhl
YXA6OnJ1bkVuZFBoYXNlKCkgU1RFUCAxOiBoZWFwLm1fbXV0YXRvck1hcmtTdGFjay0+c2l6ZSgp
ICIsIG1fbXV0YXRvck1hcmtTdGFjay0+c2l6ZSgpLCAiIG1fcmFjZU1hcmtTdGFjay0+c2l6ZSgp
ICIsIG1fcmFjZU1hcmtTdGFjay0+c2l6ZSgpKTsKICAgICAgICAgCiAgICAgewogICAgICAgICBh
dXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbWFya2luZ011dGV4KTsKQEAgLTE0ODQsMTQgKzE0ODks
MjcgQEAgTkVWRVJfSU5MSU5FIGJvb2wgSGVhcDo6cnVuRW5kUGhhc2UoR0NDbwogICAgICAgICBt
X21hcmtpbmdDb25kaXRpb25WYXJpYWJsZS5ub3RpZnlBbGwoKTsKICAgICB9CiAgICAgbV9oZWxw
ZXJDbGllbnQuZmluaXNoKCk7CisgICAgaWYgKG1sYW1WZXJib3NlKSBkYXRhTG9nTG4oIiAgICBt
bGFtIEhlYXA6OnJ1bkVuZFBoYXNlKCkgU1RFUCAyOiBoZWFwLm1fbXV0YXRvck1hcmtTdGFjay0+
c2l6ZSgpICIsIG1fbXV0YXRvck1hcmtTdGFjay0+c2l6ZSgpLCAiIG1fcmFjZU1hcmtTdGFjay0+
c2l6ZSgpICIsIG1fcmFjZU1hcmtTdGFjay0+c2l6ZSgpKTsKICAgICAKLSAgICBpdGVyYXRlRXhl
Y3V0aW5nQW5kQ29tcGlsaW5nQ29kZUJsb2NrcygKKyAgICBSRUxFQVNFX0FTU0VSVChtX211dGF0
b3JNYXJrU3RhY2stPmlzRW1wdHkoKSk7IC8vIG1sYW0gTWFrZSBpbnRvIEFTU0VSVAorICAgIFJF
TEVBU0VfQVNTRVJUKG1fcmFjZU1hcmtTdGFjay0+aXNFbXB0eSgpKTsgLy8gbWxhbSBNYWtlIGlu
dG8gQVNTRVJUCisKKyAgICBTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IgPSAqbV9jb2xsZWN0b3JT
bG90VmlzaXRvcjsKKyAgICBpdGVyYXRlRXhlY3V0aW5nQW5kQ29tcGlsaW5nQ29kZUJsb2Nrcyhz
bG90VmlzaXRvciwKICAgICAgICAgWyZdIChDb2RlQmxvY2sqIGNvZGVCbG9jaykgewogICAgICAg
ICAgICAgd3JpdGVCYXJyaWVyKGNvZGVCbG9jayk7CiAgICAgICAgIH0pOwotICAgICAgICAKKyAg
ICBpZiAobWxhbVZlcmJvc2UpIGRhdGFMb2dMbigiICAgIG1sYW0gSGVhcDo6cnVuRW5kUGhhc2Uo
KSBTVEVQIDM6IGhlYXAubV9tdXRhdG9yTWFya1N0YWNrLT5zaXplKCkgIiwgbV9tdXRhdG9yTWFy
a1N0YWNrLT5zaXplKCksICIgbV9yYWNlTWFya1N0YWNrLT5zaXplKCkgIiwgbV9yYWNlTWFya1N0
YWNrLT5zaXplKCkpOworCiAgICAgdXBkYXRlT2JqZWN0Q291bnRzKCk7CisgICAgaWYgKG1sYW1W
ZXJib3NlKSBkYXRhTG9nTG4oIiAgICBtbGFtIEhlYXA6OnJ1bkVuZFBoYXNlKCkgU1RFUCA0OiBo
ZWFwLm1fbXV0YXRvck1hcmtTdGFjay0+c2l6ZSgpICIsIG1fbXV0YXRvck1hcmtTdGFjay0+c2l6
ZSgpLCAiIG1fcmFjZU1hcmtTdGFjay0+c2l6ZSgpICIsIG1fcmFjZU1hcmtTdGFjay0+c2l6ZSgp
KTsKICAgICBlbmRNYXJraW5nKCk7CisgICAgaWYgKG1sYW1WZXJib3NlKSBkYXRhTG9nTG4oIiAg
ICBtbGFtIEhlYXA6OnJ1bkVuZFBoYXNlKCkgQkVGT1JFIHZlcmlmeUdDOiBoZWFwLm1fbXV0YXRv
ck1hcmtTdGFjay0+c2l6ZSgpICIsIG1fbXV0YXRvck1hcmtTdGFjay0+c2l6ZSgpLCAiIG1fcmFj
ZU1hcmtTdGFjay0+c2l6ZSgpICIsIG1fcmFjZU1hcmtTdGFjay0+c2l6ZSgpKTsKKworICAgIC8v
IG1sYW0KKyAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6dmVyaWZ5R0MoKSkpCisgICAgICAgIHZl
cmlmeUdDKCk7CisgICAgLy8gbWxhbSAqLwogCiAgICAgaWYgKFVOTElLRUxZKG1fdmVyaWZpZXIp
KSB7CiAgICAgICAgIG1fdmVyaWZpZXItPmdhdGhlckxpdmVDZWxscyhIZWFwVmVyaWZpZXI6OlBo
YXNlOjpBZnRlck1hcmtpbmcpOwpAQCAtMjE3MCw2ICsyMTg4LDEzIEBAIHZvaWQgSGVhcDo6c3Vz
cGVuZENvbXBpbGVyVGhyZWFkcygpCiAKIHZvaWQgSGVhcDo6d2lsbFN0YXJ0Q29sbGVjdGlvbigp
CiB7CisgICAgLy8gbWxhbQorICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjp2ZXJpZnlHQygpKSkg
eworICAgICAgICBtX3ZlcmlmaWVyU2xvdFZpc2l0b3IgPSBtYWtlVW5pcXVlPFZlcmlmaWVyU2xv
dFZpc2l0b3I+KCp0aGlzKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoIW1faXNWZXJpZnlpbmdH
Qyk7IC8vIG1sYW0gVEVTVCBzYW5pdHkgY2hlY2suCisgICAgfQorICAgIC8vIG1sYW0gKi8KKwog
ICAgIGRhdGFMb2dJZihPcHRpb25zOjpsb2dHQygpLCAiPT4gIik7CiAgICAgCiAgICAgaWYgKHNo
b3VsZERvRnVsbENvbGxlY3Rpb24oKSkgewpAQCAtMjcwMSw5ICsyNzI2LDE0IEBAIHZvaWQgSGVh
cDo6YWRkQ29yZUNvbnN0cmFpbnRzKCkKIHsKICAgICBtX2NvbnN0cmFpbnRTZXQtPmFkZCgKICAg
ICAgICAgIkNzIiwgIkNvbnNlcnZhdGl2ZSBTY2FuIiwKLSAgICAgICAgW3RoaXMsIGxhc3RWZXJz
aW9uID0gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KDApXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9y
KSBtdXRhYmxlIHsKKyAgICAgICAgW3RoaXMsIGxhc3RWZXJzaW9uID0gc3RhdGljX2Nhc3Q8dWlu
dDY0X3Q+KDApXSAoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikgbXV0YWJsZSB7CiAgICAg
ICAgICAgICBib29sIHNob3VsZE5vdFByb2R1Y2VXb3JrID0gbGFzdFZlcnNpb24gPT0gbV9waGFz
ZVZlcnNpb247Ci0gICAgICAgICAgICBpZiAoc2hvdWxkTm90UHJvZHVjZVdvcmspCisKKyAgICAg
ICAgICAgIC8vIEZvciB0aGUgR0MgVmVyZmllciwgd2Ugd291bGQgbGlrZSB0byB1c2UgdGhlIGlk
ZW50aWNhbCBzZXQgb2YgY29uc2VydmF0aXZlIHJvb3RzCisgICAgICAgICAgICAvLyBhcyB0aGUg
cmVhbCBHQy4gT3RoZXJ3aXNlLCB0aGUgR0MgdmVyaWZpZXIgbWF5IHJlcG9ydCBmYWxzZSBuZWdh
dGl2ZXMgZHVlIHRvCisgICAgICAgICAgICAvLyB2YXJpYXRpb25zIGluIHN0YWNrIHZhbHVlcy4g
Rm9yIHRoaXMgc2FtZSByZWFzb24sIHdlIHdpbGwgc2tpcCB0aGlzIGNvbnN0cmFpbnQKKyAgICAg
ICAgICAgIC8vIHdoZW4gd2UncmUgcnVubmluZyB0aGUgR0MgdmVyaWZpY2F0aW9uIGluIHRoZSBF
bmQgcGhhc2UuCisgICAgICAgICAgICBpZiAoc2hvdWxkTm90UHJvZHVjZVdvcmsgfHwgbV9pc1Zl
cmlmeWluZ0dDKQogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIAogICAgICAg
ICAgICAgVGltaW5nU2NvcGUgcHJlQ29udmVyZ2VuY2VUaW1pbmdTY29wZSgqdGhpcywgIkNvbnN0
cmFpbnQ6IGNvbnNlcnZhdGl2ZSBzY2FuIik7CkBAIC0yNzE4LDEzICsyNzQ4LDE3IEBAIHZvaWQg
SGVhcDo6YWRkQ29yZUNvbnN0cmFpbnRzKCkKICAgICAgICAgICAgICAgICBnYXRoZXJKU1N0YWNr
Um9vdHMoY29uc2VydmF0aXZlUm9vdHMpOwogICAgICAgICAgICAgICAgIGdhdGhlclNjcmF0Y2hC
dWZmZXJSb290cyhjb25zZXJ2YXRpdmVSb290cyk7CiAKLSAgICAgICAgICAgICAgICBTZXRSb290
TWFya1JlYXNvblNjb3BlIHJvb3RTY29wZShzbG90VmlzaXRvciwgU2xvdFZpc2l0b3I6OlJvb3RN
YXJrUmVhc29uOjpDb25zZXJ2YXRpdmVTY2FuKTsKLSAgICAgICAgICAgICAgICBzbG90VmlzaXRv
ci5hcHBlbmQoY29uc2VydmF0aXZlUm9vdHMpOworICAgICAgICAgICAgICAgIFNldFJvb3RNYXJr
UmVhc29uU2NvcGUgcm9vdFNjb3BlKHZpc2l0b3IsIEFic3RyYWN0U2xvdFZpc2l0b3I6OlJvb3RN
YXJrUmVhc29uOjpDb25zZXJ2YXRpdmVTY2FuKTsKKyAgICAgICAgICAgICAgICB2aXNpdG9yLmFw
cGVuZF9Db25zZXJ2YXRpdmVSb290cyhjb25zZXJ2YXRpdmVSb290cyk7CisgICAgICAgICAgICAg
ICAgaWYgKFVOTElLRUxZKG1fdmVyaWZpZXJTbG90VmlzaXRvcikpCisgICAgICAgICAgICAgICAg
ICAgIG1fdmVyaWZpZXJTbG90VmlzaXRvci0+YXBwZW5kX0NvbnNlcnZhdGl2ZVJvb3RzKGNvbnNl
cnZhdGl2ZVJvb3RzKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChPcHRpb25zOjp1
c2VKSVQoKSkgewogICAgICAgICAgICAgICAgIC8vIEpJVFN0dWJSb3V0aW5lcyBtdXN0IGJlIHZp
c2l0ZWQgYWZ0ZXIgc2Nhbm5pbmcgQ29uc2VydmF0aXZlUm9vdHMgc2luY2UgSklUU3R1YlJvdXRp
bmVzIGRlcGVuZCBvbiB0aGUgaG9vayBleGVjdXRlZCBkdXJpbmcgZ2F0aGVyaW5nIENvbnNlcnZh
dGl2ZVJvb3RzLgotICAgICAgICAgICAgICAgIFNldFJvb3RNYXJrUmVhc29uU2NvcGUgcm9vdFNj
b3BlKHNsb3RWaXNpdG9yLCBTbG90VmlzaXRvcjo6Um9vdE1hcmtSZWFzb246OkpJVFN0dWJSb3V0
aW5lcyk7Ci0gICAgICAgICAgICAgICAgbV9qaXRTdHViUm91dGluZXMtPnRyYWNlTWFya2VkU3R1
YlJvdXRpbmVzKHNsb3RWaXNpdG9yKTsKKyAgICAgICAgICAgICAgICBTZXRSb290TWFya1JlYXNv
blNjb3BlIHJvb3RTY29wZSh2aXNpdG9yLCBBYnN0cmFjdFNsb3RWaXNpdG9yOjpSb290TWFya1Jl
YXNvbjo6SklUU3R1YlJvdXRpbmVzKTsKKyAgICAgICAgICAgICAgICBtX2ppdFN0dWJSb3V0aW5l
cy0+dHJhY2VNYXJrZWRTdHViUm91dGluZXModmlzaXRvcik7CisgICAgICAgICAgICAgICAgaWYg
KFVOTElLRUxZKG1fdmVyaWZpZXJTbG90VmlzaXRvcikpCisgICAgICAgICAgICAgICAgICAgIG1f
aml0U3R1YlJvdXRpbmVzLT50cmFjZU1hcmtlZFN0dWJSb3V0aW5lcygqbV92ZXJpZmllclNsb3RW
aXNpdG9yKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICAgICAgbGFzdFZl
cnNpb24gPSBtX3BoYXNlVmVyc2lvbjsKQEAgLTI3MzMsOTIgKzI3NjcsOTIgQEAgdm9pZCBIZWFw
OjphZGRDb3JlQ29uc3RyYWludHMoKQogICAgIAogICAgIG1fY29uc3RyYWludFNldC0+YWRkKAog
ICAgICAgICAiTXNyIiwgIk1pc2MgU21hbGwgUm9vdHMiLAotICAgICAgICBbdGhpc10gKFNsb3RW
aXNpdG9yJiBzbG90VmlzaXRvcikgeworICAgICAgICBbdGhpc10gKEFic3RyYWN0U2xvdFZpc2l0
b3ImIHZpc2l0b3IpIHsKIAogI2lmIEpTQ19PQkpDX0FQSV9FTkFCTEVECi0gICAgICAgICAgICBz
Y2FuRXh0ZXJuYWxSZW1lbWJlcmVkU2V0KG1fdm0sIHNsb3RWaXNpdG9yKTsKKyAgICAgICAgICAg
IHNjYW5FeHRlcm5hbFJlbWVtYmVyZWRTZXQobV92bSwgdmlzaXRvcik7CiAjZW5kaWYKICAgICAg
ICAgICAgIGlmIChtX3ZtLnNtYWxsU3RyaW5ncy5uZWVkc1RvQmVWaXNpdGVkKCptX2NvbGxlY3Rp
b25TY29wZSkpIHsKLSAgICAgICAgICAgICAgICBTZXRSb290TWFya1JlYXNvblNjb3BlIHJvb3RT
Y29wZShzbG90VmlzaXRvciwgU2xvdFZpc2l0b3I6OlJvb3RNYXJrUmVhc29uOjpTdHJvbmdSZWZl
cmVuY2VzKTsKLSAgICAgICAgICAgICAgICBtX3ZtLnNtYWxsU3RyaW5ncy52aXNpdFN0cm9uZ1Jl
ZmVyZW5jZXMoc2xvdFZpc2l0b3IpOworICAgICAgICAgICAgICAgIFNldFJvb3RNYXJrUmVhc29u
U2NvcGUgcm9vdFNjb3BlKHZpc2l0b3IsIEFic3RyYWN0U2xvdFZpc2l0b3I6OlJvb3RNYXJrUmVh
c29uOjpTdHJvbmdSZWZlcmVuY2VzKTsKKyAgICAgICAgICAgICAgICBtX3ZtLnNtYWxsU3RyaW5n
cy52aXNpdFN0cm9uZ1JlZmVyZW5jZXModmlzaXRvcik7CiAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBTZXRSb290TWFya1JlYXNvblNj
b3BlIHJvb3RTY29wZShzbG90VmlzaXRvciwgU2xvdFZpc2l0b3I6OlJvb3RNYXJrUmVhc29uOjpQ
cm90ZWN0ZWRWYWx1ZXMpOworICAgICAgICAgICAgICAgIFNldFJvb3RNYXJrUmVhc29uU2NvcGUg
cm9vdFNjb3BlKHZpc2l0b3IsIEFic3RyYWN0U2xvdFZpc2l0b3I6OlJvb3RNYXJrUmVhc29uOjpQ
cm90ZWN0ZWRWYWx1ZXMpOwogICAgICAgICAgICAgICAgIGZvciAoYXV0byYgcGFpciA6IG1fcHJv
dGVjdGVkVmFsdWVzKQotICAgICAgICAgICAgICAgICAgICBzbG90VmlzaXRvci5hcHBlbmRVbmJh
cnJpZXJlZChwYWlyLmtleSk7CisgICAgICAgICAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kVW5i
YXJyaWVyZWQocGFpci5rZXkpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAg
ICAgICBpZiAobV9tYXJrTGlzdFNldCAmJiBtX21hcmtMaXN0U2V0LT5zaXplKCkpIHsKLSAgICAg
ICAgICAgICAgICBTZXRSb290TWFya1JlYXNvblNjb3BlIHJvb3RTY29wZShzbG90VmlzaXRvciwg
U2xvdFZpc2l0b3I6OlJvb3RNYXJrUmVhc29uOjpDb25zZXJ2YXRpdmVTY2FuKTsKLSAgICAgICAg
ICAgICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlcjo6bWFya0xpc3RzKHNsb3RWaXNpdG9yLCAqbV9t
YXJrTGlzdFNldCk7CisgICAgICAgICAgICAgICAgU2V0Um9vdE1hcmtSZWFzb25TY29wZSByb290
U2NvcGUodmlzaXRvciwgQWJzdHJhY3RTbG90VmlzaXRvcjo6Um9vdE1hcmtSZWFzb246OkNvbnNl
cnZhdGl2ZVNjYW4pOworICAgICAgICAgICAgICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyOjptYXJr
TGlzdHModmlzaXRvciwgKm1fbWFya0xpc3RTZXQpOwogICAgICAgICAgICAgfQogCiAgICAgICAg
ICAgICBtX21hcmtlZEpTVmFsdWVSZWZBcnJheXMuZm9yRWFjaChbJl0gKE1hcmtlZEpTVmFsdWVS
ZWZBcnJheSogYXJyYXkpIHsKLSAgICAgICAgICAgICAgICBhcnJheS0+dmlzaXRBZ2dyZWdhdGUo
c2xvdFZpc2l0b3IpOworICAgICAgICAgICAgICAgIGFycmF5LT52aXNpdEFnZ3JlZ2F0ZSh2aXNp
dG9yKTsKICAgICAgICAgICAgIH0pOwogCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
U2V0Um9vdE1hcmtSZWFzb25TY29wZSByb290U2NvcGUoc2xvdFZpc2l0b3IsIFNsb3RWaXNpdG9y
OjpSb290TWFya1JlYXNvbjo6Vk1FeGNlcHRpb25zKTsKLSAgICAgICAgICAgICAgICBzbG90Vmlz
aXRvci5hcHBlbmRVbmJhcnJpZXJlZChtX3ZtLmV4Y2VwdGlvbigpKTsKLSAgICAgICAgICAgICAg
ICBzbG90VmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZChtX3ZtLmxhc3RFeGNlcHRpb24oKSk7Cisg
ICAgICAgICAgICAgICAgU2V0Um9vdE1hcmtSZWFzb25TY29wZSByb290U2NvcGUodmlzaXRvciwg
QWJzdHJhY3RTbG90VmlzaXRvcjo6Um9vdE1hcmtSZWFzb246OlZNRXhjZXB0aW9ucyk7CisgICAg
ICAgICAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZChtX3ZtLmV4Y2VwdGlvbigpKTsK
KyAgICAgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKG1fdm0ubGFzdEV4Y2Vw
dGlvbigpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSwKICAgICAgICAgQ29uc3RyYWludFZv
bGF0aWxpdHk6OkdyZXllZEJ5RXhlY3V0aW9uKTsKICAgICAKICAgICBtX2NvbnN0cmFpbnRTZXQt
PmFkZCgKICAgICAgICAgIlNoIiwgIlN0cm9uZyBIYW5kbGVzIiwKLSAgICAgICAgW3RoaXNdIChT
bG90VmlzaXRvciYgc2xvdFZpc2l0b3IpIHsKLSAgICAgICAgICAgIFNldFJvb3RNYXJrUmVhc29u
U2NvcGUgcm9vdFNjb3BlKHNsb3RWaXNpdG9yLCBTbG90VmlzaXRvcjo6Um9vdE1hcmtSZWFzb246
OlN0cm9uZ0hhbmRsZXMpOwotICAgICAgICAgICAgbV9oYW5kbGVTZXQudmlzaXRTdHJvbmdIYW5k
bGVzKHNsb3RWaXNpdG9yKTsKKyAgICAgICAgW3RoaXNdIChBYnN0cmFjdFNsb3RWaXNpdG9yJiB2
aXNpdG9yKSB7CisgICAgICAgICAgICBTZXRSb290TWFya1JlYXNvblNjb3BlIHJvb3RTY29wZSh2
aXNpdG9yLCBBYnN0cmFjdFNsb3RWaXNpdG9yOjpSb290TWFya1JlYXNvbjo6U3Ryb25nSGFuZGxl
cyk7CisgICAgICAgICAgICBtX2hhbmRsZVNldC52aXNpdFN0cm9uZ0hhbmRsZXModmlzaXRvcik7
CiAgICAgICAgIH0sCiAgICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5OjpHcmV5ZWRCeUV4ZWN1
dGlvbik7CiAgICAgCiAgICAgbV9jb25zdHJhaW50U2V0LT5hZGQoCiAgICAgICAgICJEIiwgIkRl
YnVnZ2VyIiwKLSAgICAgICAgW3RoaXNdIChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IpIHsKLSAg
ICAgICAgICAgIFNldFJvb3RNYXJrUmVhc29uU2NvcGUgcm9vdFNjb3BlKHNsb3RWaXNpdG9yLCBT
bG90VmlzaXRvcjo6Um9vdE1hcmtSZWFzb246OkRlYnVnZ2VyKTsKKyAgICAgICAgW3RoaXNdIChB
YnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKSB7CisgICAgICAgICAgICBTZXRSb290TWFya1Jl
YXNvblNjb3BlIHJvb3RTY29wZSh2aXNpdG9yLCBBYnN0cmFjdFNsb3RWaXNpdG9yOjpSb290TWFy
a1JlYXNvbjo6RGVidWdnZXIpOwogCiAjaWYgRU5BQkxFKFNBTVBMSU5HX1BST0ZJTEVSKQogICAg
ICAgICAgICAgaWYgKFNhbXBsaW5nUHJvZmlsZXIqIHNhbXBsaW5nUHJvZmlsZXIgPSBtX3ZtLnNh
bXBsaW5nUHJvZmlsZXIoKSkgewogICAgICAgICAgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExv
Y2soc2FtcGxpbmdQcm9maWxlci0+Z2V0TG9jaygpKTsKICAgICAgICAgICAgICAgICBzYW1wbGlu
Z1Byb2ZpbGVyLT5wcm9jZXNzVW52ZXJpZmllZFN0YWNrVHJhY2VzKGxvY2tlcik7Ci0gICAgICAg
ICAgICAgICAgc2FtcGxpbmdQcm9maWxlci0+dmlzaXQoc2xvdFZpc2l0b3IpOworICAgICAgICAg
ICAgICAgIHNhbXBsaW5nUHJvZmlsZXItPnZpc2l0KHZpc2l0b3IpOwogICAgICAgICAgICAgICAg
IGlmIChPcHRpb25zOjpsb2dHQygpID09IEdDTG9nZ2luZzo6VmVyYm9zZSkKLSAgICAgICAgICAg
ICAgICAgICAgZGF0YUxvZygiU2FtcGxpbmcgUHJvZmlsZXIgZGF0YTpcbiIsIHNsb3RWaXNpdG9y
KTsKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiU2FtcGxpbmcgUHJvZmlsZXIgZGF0YTpc
biIsIHZpc2l0b3IpOwogICAgICAgICAgICAgfQogI2VuZGlmIC8vIEVOQUJMRShTQU1QTElOR19Q
Uk9GSUxFUikKIAogICAgICAgICAgICAgaWYgKG1fdm0udHlwZVByb2ZpbGVyKCkpCi0gICAgICAg
ICAgICAgICAgbV92bS50eXBlUHJvZmlsZXJMb2coKS0+dmlzaXQoc2xvdFZpc2l0b3IpOworICAg
ICAgICAgICAgICAgIG1fdm0udHlwZVByb2ZpbGVyTG9nKCktPnZpc2l0KHZpc2l0b3IpOwogICAg
ICAgICAgICAgCiAgICAgICAgICAgICBpZiAoYXV0byogc2hhZG93Q2hpY2tlbiA9IG1fdm0uc2hh
ZG93Q2hpY2tlbigpKQotICAgICAgICAgICAgICAgIHNoYWRvd0NoaWNrZW4tPnZpc2l0Q2hpbGRy
ZW4oc2xvdFZpc2l0b3IpOworICAgICAgICAgICAgICAgIHNoYWRvd0NoaWNrZW4tPnZpc2l0Q2hp
bGRyZW4odmlzaXRvcik7CiAgICAgICAgIH0sCiAgICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5
OjpHcmV5ZWRCeUV4ZWN1dGlvbik7CiAgICAgCiAgICAgbV9jb25zdHJhaW50U2V0LT5hZGQoCiAg
ICAgICAgICJXcyIsICJXZWFrIFNldHMiLAotICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiBz
bG90VmlzaXRvcikgewotICAgICAgICAgICAgU2V0Um9vdE1hcmtSZWFzb25TY29wZSByb290U2Nv
cGUoc2xvdFZpc2l0b3IsIFNsb3RWaXNpdG9yOjpSb290TWFya1JlYXNvbjo6V2Vha1NldHMpOwot
ICAgICAgICAgICAgbV9vYmplY3RTcGFjZS52aXNpdFdlYWtTZXRzKHNsb3RWaXNpdG9yKTsKKyAg
ICAgICAgW3RoaXNdIChBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKSB7CisgICAgICAgICAg
ICBTZXRSb290TWFya1JlYXNvblNjb3BlIHJvb3RTY29wZSh2aXNpdG9yLCBBYnN0cmFjdFNsb3RW
aXNpdG9yOjpSb290TWFya1JlYXNvbjo6V2Vha1NldHMpOworICAgICAgICAgICAgbV9vYmplY3RT
cGFjZS52aXNpdFdlYWtTZXRzKHZpc2l0b3IpOwogICAgICAgICB9LAogICAgICAgICBDb25zdHJh
aW50Vm9sYXRpbGl0eTo6R3JleWVkQnlNYXJraW5nKTsKICAgICAKICAgICBtX2NvbnN0cmFpbnRT
ZXQtPmFkZCgKICAgICAgICAgIk8iLCAiT3V0cHV0IiwKLSAgICAgICAgW10gKFNsb3RWaXNpdG9y
JiBzbG90VmlzaXRvcikgewotICAgICAgICAgICAgVk0mIHZtID0gc2xvdFZpc2l0b3Iudm0oKTsK
KyAgICAgICAgW10gKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsKKyAgICAgICAgICAg
IFZNJiB2bSA9IHZpc2l0b3Iudm0oKTsKIAotICAgICAgICAgICAgYXV0byBjYWxsT3V0cHV0Q29u
c3RyYWludCA9IFtdIChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IsIEhlYXBDZWxsKiBoZWFwQ2Vs
bCwgSGVhcENlbGw6OktpbmQpIHsKLSAgICAgICAgICAgICAgICBTZXRSb290TWFya1JlYXNvblNj
b3BlIHJvb3RTY29wZShzbG90VmlzaXRvciwgU2xvdFZpc2l0b3I6OlJvb3RNYXJrUmVhc29uOjpP
dXRwdXQpOwotICAgICAgICAgICAgICAgIFZNJiB2bSA9IHNsb3RWaXNpdG9yLnZtKCk7CisgICAg
ICAgICAgICBhdXRvIGNhbGxPdXRwdXRDb25zdHJhaW50ID0gW10gKEFic3RyYWN0U2xvdFZpc2l0
b3ImIHZpc2l0b3IsIEhlYXBDZWxsKiBoZWFwQ2VsbCwgSGVhcENlbGw6OktpbmQpIHsKKyAgICAg
ICAgICAgICAgICBTZXRSb290TWFya1JlYXNvblNjb3BlIHJvb3RTY29wZSh2aXNpdG9yLCBBYnN0
cmFjdFNsb3RWaXNpdG9yOjpSb290TWFya1JlYXNvbjo6T3V0cHV0KTsKKyAgICAgICAgICAgICAg
ICBWTSYgdm0gPSB2aXNpdG9yLnZtKCk7CiAgICAgICAgICAgICAgICAgSlNDZWxsKiBjZWxsID0g
c3RhdGljX2Nhc3Q8SlNDZWxsKj4oaGVhcENlbGwpOwotICAgICAgICAgICAgICAgIGNlbGwtPm1l
dGhvZFRhYmxlKHZtKS0+dmlzaXRPdXRwdXRDb25zdHJhaW50cyhjZWxsLCBzbG90VmlzaXRvcik7
CisgICAgICAgICAgICAgICAgY2VsbC0+bWV0aG9kVGFibGUodm0pLT52aXNpdE91dHB1dENvbnN0
cmFpbnRzKGNlbGwsIHZpc2l0b3IpOwogICAgICAgICAgICAgfTsKICAgICAgICAgICAgIAogICAg
ICAgICAgICAgYXV0byBhZGQgPSBbJl0gKGF1dG8mIHNldCkgewotICAgICAgICAgICAgICAgIHNs
b3RWaXNpdG9yLmFkZFBhcmFsbGVsQ29uc3RyYWludFRhc2soc2V0LmZvckVhY2hNYXJrZWRDZWxs
SW5QYXJhbGxlbChjYWxsT3V0cHV0Q29uc3RyYWludCkpOworICAgICAgICAgICAgICAgIHZpc2l0
b3IuYWRkUGFyYWxsZWxDb25zdHJhaW50VGFzayhzZXQuZm9yRWFjaE1hcmtlZENlbGxJblBhcmFs
bGVsKGNhbGxPdXRwdXRDb25zdHJhaW50KSk7CiAgICAgICAgICAgICB9OwogICAgICAgICAgICAg
CiAgICAgICAgICAgICBhZGQodm0uZXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZXNXaXRoQ29uc3Ry
YWludHMpOwpAQCAtMjgzMiwyMiArMjg2NiwyMiBAQCB2b2lkIEhlYXA6OmFkZENvcmVDb25zdHJh
aW50cygpCiAgICAgaWYgKE9wdGlvbnM6OnVzZUpJVCgpKSB7CiAgICAgICAgIG1fY29uc3RyYWlu
dFNldC0+YWRkKAogICAgICAgICAgICAgIkR3IiwgIkRGRyBXb3JrbGlzdHMiLAotICAgICAgICAg
ICAgW3RoaXNdIChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IpIHsKLSAgICAgICAgICAgICAgICBT
ZXRSb290TWFya1JlYXNvblNjb3BlIHJvb3RTY29wZShzbG90VmlzaXRvciwgU2xvdFZpc2l0b3I6
OlJvb3RNYXJrUmVhc29uOjpERkdXb3JrTGlzdHMpOworICAgICAgICAgICAgW3RoaXNdIChBYnN0
cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKSB7CisgICAgICAgICAgICAgICAgU2V0Um9vdE1hcmtS
ZWFzb25TY29wZSByb290U2NvcGUodmlzaXRvciwgQWJzdHJhY3RTbG90VmlzaXRvcjo6Um9vdE1h
cmtSZWFzb246OkRGR1dvcmtMaXN0cyk7CiAKICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSBERkc6Om51bWJlck9mV29ya2xpc3RzKCk7IGktLTspCi0gICAgICAgICAgICAgICAgICAg
IERGRzo6ZXhpc3RpbmdXb3JrbGlzdEZvckluZGV4KGkpLnZpc2l0V2Vha1JlZmVyZW5jZXMoc2xv
dFZpc2l0b3IpOworICAgICAgICAgICAgICAgICAgICBERkc6OmV4aXN0aW5nV29ya2xpc3RGb3JJ
bmRleChpKS52aXNpdFdlYWtSZWZlcmVuY2VzKHZpc2l0b3IpOwogICAgICAgICAgICAgICAgIAog
ICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBUaGlzIGlzIGFsbW9zdCBjZXJ0YWlubHkgdW5uZWNl
c3NhcnkuCiAgICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE2NjgyOQotICAgICAgICAgICAgICAgIERGRzo6aXRlcmF0ZUNvZGVCbG9ja3NG
b3JHQygKKyAgICAgICAgICAgICAgICBERkc6Oml0ZXJhdGVDb2RlQmxvY2tzRm9yR0ModmlzaXRv
ciwKICAgICAgICAgICAgICAgICAgICAgbV92bSwKICAgICAgICAgICAgICAgICAgICAgWyZdIChD
b2RlQmxvY2sqIGNvZGVCbG9jaykgewotICAgICAgICAgICAgICAgICAgICAgICAgc2xvdFZpc2l0
b3IuYXBwZW5kVW5iYXJyaWVyZWQoY29kZUJsb2NrKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQoY29kZUJsb2NrKTsKICAgICAgICAgICAgICAgICAg
ICAgfSk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgaWYgKE9wdGlvbnM6Omxv
Z0dDKCkgPT0gR0NMb2dnaW5nOjpWZXJib3NlKQotICAgICAgICAgICAgICAgICAgICBkYXRhTG9n
KCJERkcgV29ya2xpc3RzOlxuIiwgc2xvdFZpc2l0b3IpOworICAgICAgICAgICAgICAgICAgICBk
YXRhTG9nKCJERkcgV29ya2xpc3RzOlxuIiwgdmlzaXRvcik7CiAgICAgICAgICAgICB9LAogICAg
ICAgICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHk6OkdyZXllZEJ5TWFya2luZyk7CiAgICAgfQpA
QCAtMjg1NSwxNCArMjg4OSwxNSBAQCB2b2lkIEhlYXA6OmFkZENvcmVDb25zdHJhaW50cygpCiAg
ICAgCiAgICAgbV9jb25zdHJhaW50U2V0LT5hZGQoCiAgICAgICAgICJDYiIsICJDb2RlQmxvY2tz
IiwKLSAgICAgICAgW3RoaXNdIChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IpIHsKLSAgICAgICAg
ICAgIFNldFJvb3RNYXJrUmVhc29uU2NvcGUgcm9vdFNjb3BlKHNsb3RWaXNpdG9yLCBTbG90Vmlz
aXRvcjo6Um9vdE1hcmtSZWFzb246OkNvZGVCbG9ja3MpOwotICAgICAgICAgICAgaXRlcmF0ZUV4
ZWN1dGluZ0FuZENvbXBpbGluZ0NvZGVCbG9ja3NXaXRob3V0SG9sZGluZ0xvY2tzKAorICAgICAg
ICBbdGhpc10gKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsKKyAgICAgICAgICAgIFNl
dFJvb3RNYXJrUmVhc29uU2NvcGUgcm9vdFNjb3BlKHZpc2l0b3IsIEFic3RyYWN0U2xvdFZpc2l0
b3I6OlJvb3RNYXJrUmVhc29uOjpDb2RlQmxvY2tzKTsKKyAgICAgICAgICAgIGl0ZXJhdGVFeGVj
dXRpbmdBbmRDb21waWxpbmdDb2RlQmxvY2tzV2l0aG91dEhvbGRpbmdMb2Nrcyh2aXNpdG9yLAog
ICAgICAgICAgICAgICAgIFsmXSAoQ29kZUJsb2NrKiBjb2RlQmxvY2spIHsKICAgICAgICAgICAg
ICAgICAgICAgLy8gVmlzaXQgdGhlIENvZGVCbG9jayBhcyBhIGNvbnN0cmFpbnQgb25seSBpZiBp
dCdzIGJsYWNrLgotICAgICAgICAgICAgICAgICAgICBpZiAoaXNNYXJrZWQoY29kZUJsb2NrKQor
ICAgICAgICAgICAgICAgICAgICAvLyBtbGFtIEZJWE1FCisgICAgICAgICAgICAgICAgICAgIGlm
ICh2aXNpdG9yLmlzTWFya2VkKGNvZGVCbG9jaykKICAgICAgICAgICAgICAgICAgICAgICAgICYm
IGNvZGVCbG9jay0+Y2VsbFN0YXRlKCkgPT0gQ2VsbFN0YXRlOjpQb3NzaWJseUJsYWNrKQotICAg
ICAgICAgICAgICAgICAgICAgICAgc2xvdFZpc2l0b3IudmlzaXRBc0NvbnN0cmFpbnQoY29kZUJs
b2NrKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZpc2l0b3IudmlzaXRBc0NvbnN0cmFpbnQo
Y29kZUJsb2NrKTsKICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgfSwKICAgICAgICAgQ29u
c3RyYWludFZvbGF0aWxpdHk6OlNlbGRvbUdyZXllZCk7CkBAIC0zMDIzLDQgKzMwNTgsNjAgQEAg
dm9pZCBIZWFwOjpydW5UYXNrSW5QYXJhbGxlbChSZWZQdHI8U2hhcgogICAgIH0KIH0KIAorLy8g
bWxhbQordm9pZCBIZWFwOjp2ZXJpZnlHQygpCit7CisgICAgYm9vbCB2ZXJib3NlID0gZ2V0ZW52
KCJtbGFtVmVyYm9zZSIpOworCisgICAgUkVMRUFTRV9BU1NFUlQobV92ZXJpZmllclNsb3RWaXNp
dG9yKTsKKyAgICBSRUxFQVNFX0FTU0VSVCghbV9pc1ZlcmlmeWluZ0dDKTsKKyAgICBtX2lzVmVy
aWZ5aW5nR0MgPSB0cnVlOworCisgICAgaWYgKHZlcmJvc2UpIGRhdGFMb2dMbigiICAgIG1sYW0g
SGVhcDo6dmVyaWZ5R0MoKSBTVEVQIDEgaGVhcC5tX211dGF0b3JNYXJrU3RhY2stPnNpemUoKSAi
LCBtX211dGF0b3JNYXJrU3RhY2stPnNpemUoKSwgIiBtX3JhY2VNYXJrU3RhY2stPnNpemUoKSAi
LCBtX3JhY2VNYXJrU3RhY2stPnNpemUoKSk7CisgICAgVmVyaWZpZXJTbG90VmlzaXRvciYgdmlz
aXRvciA9ICptX3ZlcmlmaWVyU2xvdFZpc2l0b3I7CisgICAgYXV0byByZXBvcnRGYWlsdXJlID0g
W10gKFZlcmlmaWVyU2xvdFZpc2l0b3ImIHZpc2l0b3IsIEhlYXBDZWxsKiBjZWxsKSB7CisgICAg
ICAgIGRhdGFMb2dMbigiXG4iICJHQyBWZXJpZmllcjogRVJST1IgY2VsbCAiLCBSYXdQb2ludGVy
KGNlbGwpLCAiIHdhcyBub3QgbWFya2VkIik7CisgICAgICAgIHZpc2l0b3IuZHVtcE1hcmtlckRh
dGEoY2VsbCk7CisgICAgfTsKKworICAgIGRvIHsKKyAgICAgICAgaWYgKHZlcmJvc2UpIGRhdGFM
b2dMbigiICAgIG1sYW0gSGVhcDo6dmVyaWZ5R0MoKSBTVEVQIDI6IHZpc2l0b3IuZHJhaW4oKSBo
ZWFwLm1fbXV0YXRvck1hcmtTdGFjay0+c2l6ZSgpICIsIG1fbXV0YXRvck1hcmtTdGFjay0+c2l6
ZSgpLCAiIG1fcmFjZU1hcmtTdGFjay0+c2l6ZSgpICIsIG1fcmFjZU1hcmtTdGFjay0+c2l6ZSgp
KTsKKyAgICAgICAgdmlzaXRvci5kcmFpbigpOworICAgICAgICBpZiAodmVyYm9zZSkgZGF0YUxv
Z0xuKCIgICAgbWxhbSBIZWFwOjp2ZXJpZnlHQygpIFNURVAgMzogbV9jb25zdHJhaW50U2V0LT5l
eGVjdXRlQWxsU3luY2hyb25vdXNseSgpIGhlYXAubV9tdXRhdG9yTWFya1N0YWNrLT5zaXplKCkg
IiwgbV9tdXRhdG9yTWFya1N0YWNrLT5zaXplKCksICIgbV9yYWNlTWFya1N0YWNrLT5zaXplKCkg
IiwgbV9yYWNlTWFya1N0YWNrLT5zaXplKCkpOworICAgICAgICBtX2NvbnN0cmFpbnRTZXQtPmV4
ZWN1dGVBbGxTeW5jaHJvbm91c2x5KHZpc2l0b3IpOworICAgICAgICBpZiAodmVyYm9zZSkgZGF0
YUxvZ0xuKCIgICAgbWxhbSBIZWFwOjp2ZXJpZnlHQygpIFNURVAgNDogdmlzaXRvci5leGVjdXRl
Q29uc3RyYWludFRhc2tzKCkgaGVhcC5tX211dGF0b3JNYXJrU3RhY2stPnNpemUoKSAiLCBtX211
dGF0b3JNYXJrU3RhY2stPnNpemUoKSwgIiBtX3JhY2VNYXJrU3RhY2stPnNpemUoKSAiLCBtX3Jh
Y2VNYXJrU3RhY2stPnNpemUoKSk7CisgICAgICAgIHZpc2l0b3IuZXhlY3V0ZUNvbnN0cmFpbnRU
YXNrcygpOworICAgIH0gd2hpbGUgKCF2aXNpdG9yLmlzRW1wdHkoKSk7CisKKyAgICBtX2lzVmVy
aWZ5aW5nR0MgPSBmYWxzZTsKKyAgICBpZiAodmVyYm9zZSkgZGF0YUxvZ0xuKCIgICAgbWxhbSBI
ZWFwOjp2ZXJpZnlHQygpIFNURVAgNTogRU5EIGhlYXAubV9tdXRhdG9yTWFya1N0YWNrLT5zaXpl
KCkgIiwgbV9tdXRhdG9yTWFya1N0YWNrLT5zaXplKCksICIgbV9yYWNlTWFya1N0YWNrLT5zaXpl
KCkgIiwgbV9yYWNlTWFya1N0YWNrLT5zaXplKCkpOworCisgICAgdmlzaXRvci5mb3JFYWNoTGl2
ZUNlbGwoWyZdIChIZWFwQ2VsbCogY2VsbCkgeworICAgICAgICBpZiAoSGVhcDo6aXNNYXJrZWQo
Y2VsbCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGlmIChVTkxJS0VMWShPcHRpb25z
Ojp2ZXJib3NlVmVyaWZ5R0MoKSkpCisgICAgICAgICAgICByZXBvcnRGYWlsdXJlKHZpc2l0b3Is
IGNlbGwpOworICAgICAgICBSRUxFQVNFX0FTU0VSVCh0aGlzLT5pc01hcmtlZChjZWxsKSk7Cisg
ICAgfSk7CisKKyAgICAvLyAgICB2aXNpdG9yLmZvckVhY2hMaXZlUHJlY2lzZUFsbG9jYXRpb24o
WyZdIChIZWFwQ2VsbCogY2VsbCkgeworLy8gICAgICAgIFJFTEVBU0VfQVNTRVJUKGNlbGwtPmlz
UHJlY2lzZUFsbG9jYXRpb24oKSk7CisvLy8vICAgICAgICBSRUxFQVNFX0FTU0VSVChjZWxsLT5w
cmVjaXNlQWxsb2NhdGlvbigpLmlzTWFya2VkKCkpOworLy8gICAgICAgIGlmIChVTkxJS0VMWShP
cHRpb25zOjp2ZXJib3NlVmVyaWZ5R0MoKSAmJiAhSGVhcDo6aXNNYXJrZWQoY2VsbCkpKQorLy8g
ICAgICAgICAgICB2aXNpdG9yLmR1bXBNYXJrZXJEYXRhKGNlbGwpOworLy8gICAgICAgIFJFTEVB
U0VfQVNTRVJUKEhlYXA6OmlzTWFya2VkKGNlbGwpKTsKKy8vICAgIH0pOworLy8gICAgdmlzaXRv
ci5mb3JFYWNoTGl2ZU1hcmtlZEJsb2NrQ2VsbChbJl0gKEhlYXBDZWxsKiBjZWxsKSB7CisvLyAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoIWNlbGwtPmlzUHJlY2lzZUFsbG9jYXRpb24oKSk7CisvLy8v
ICAgICAgICBSRUxFQVNFX0FTU0VSVChjZWxsLT5tYXJrZWRCbG9jaygpLmlzTWFya2VkKGNlbGwp
KTsKKy8vICAgICAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6dmVyYm9zZVZlcmlmeUdDKCkgJiYg
IUhlYXA6OmlzTWFya2VkKGNlbGwpKSkKKy8vICAgICAgICAgICAgdmlzaXRvci5kdW1wTWFya2Vy
RGF0YShjZWxsKTsKKy8vICAgICAgICBSRUxFQVNFX0FTU0VSVChIZWFwOjppc01hcmtlZChjZWxs
KSk7CisvLyAgICB9KTsKKworICAgIGlmICh2ZXJib3NlKSBkYXRhTG9nTG4oIiAgICBtbGFtIEhl
YXA6OnZlcmlmeUdDKCkgU1RFUCA2OiBFTkQgaGVhcC5tX211dGF0b3JNYXJrU3RhY2stPnNpemUo
KSAiLCBtX211dGF0b3JNYXJrU3RhY2stPnNpemUoKSwgIiBtX3JhY2VNYXJrU3RhY2stPnNpemUo
KSAiLCBtX3JhY2VNYXJrU3RhY2stPnNpemUoKSk7CisgICAgbV92ZXJpZmllclNsb3RWaXNpdG9y
ID0gbnVsbHB0cjsKK30KKy8vIG1sYW0gKi8KKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCShyZXZpc2lvbiAyNzI3MTApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTg2LDYgKzg2LDcgQEAg
Y2xhc3MgU3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlcjsKIGNsYXNzIFN0b3BJZk5lY2Vzc2FyeVRp
bWVyOwogY2xhc3MgU3dlZXBpbmdTY29wZTsKIGNsYXNzIFZNOworY2xhc3MgVmVyaWZpZXJTbG90
VmlzaXRvcjsKIGNsYXNzIFdlYWtHQ01hcEJhc2U7CiBzdHJ1Y3QgQ3VycmVudFRocmVhZFN0YXRl
OwogCkBAIC0xODQsOCArMTg1LDYgQEAgcHVibGljOgogICAgIAogICAgIGJvb2wgaXNTaHV0dGlu
Z0Rvd24oKSBjb25zdCB7IHJldHVybiBtX2lzU2h1dHRpbmdEb3duOyB9CiAKLSAgICBKU19FWFBP
UlRfUFJJVkFURSBib29sIGlzQW5hbHl6aW5nSGVhcCgpIGNvbnN0OwotCiAgICAgSlNfRVhQT1JU
X1BSSVZBVEUgdm9pZCBzd2VlcFN5bmNocm9ub3VzbHkoKTsKIAogICAgIGJvb2wgc2hvdWxkQ29s
bGVjdEhldXJpc3RpYygpOwpAQCAtMzg1LDggKzM4NCw2IEBAIHB1YmxpYzoKICAgICAKICAgICBK
U19FWFBPUlRfUFJJVkFURSB2b2lkIGFkZE1hcmtpbmdDb25zdHJhaW50KHN0ZDo6dW5pcXVlX3B0
cjxNYXJraW5nQ29uc3RyYWludD4pOwogICAgIAotICAgIHNpemVfdCBudW1PcGFxdWVSb290cygp
IGNvbnN0IHsgcmV0dXJuIG1fb3BhcXVlUm9vdHMuc2l6ZSgpOyB9Ci0KICAgICBIZWFwVmVyaWZp
ZXIqIHZlcmlmaWVyKCkgY29uc3QgeyByZXR1cm4gbV92ZXJpZmllci5nZXQoKTsgfQogICAgIAog
ICAgIHZvaWQgYWRkSGVhcEZpbmFsaXplckNhbGxiYWNrKGNvbnN0IEhlYXBGaW5hbGl6ZXJDYWxs
YmFjayYpOwpAQCAtNTc2LDEwICs1NzMsMTAgQEAgcHJpdmF0ZToKICAgICBib29sIG92ZXJDcml0
aWNhbE1lbW9yeVRocmVzaG9sZChNZW1vcnlUaHJlc2hvbGRDYWxsVHlwZSBtZW1vcnlUaHJlc2hv
bGRDYWxsVHlwZSA9IE1lbW9yeVRocmVzaG9sZENhbGxUeXBlOjpDYWNoZWQpOwogICAgIAogICAg
IHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+Ci0gICAgdm9pZCBpdGVyYXRlRXhlY3V0aW5nQW5kQ29t
cGlsaW5nQ29kZUJsb2Nrcyhjb25zdCBGdW5jJik7CisgICAgdm9pZCBpdGVyYXRlRXhlY3V0aW5n
QW5kQ29tcGlsaW5nQ29kZUJsb2NrcyhBYnN0cmFjdFNsb3RWaXNpdG9yJiwgY29uc3QgRnVuYyYp
OwogICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+Ci0gICAgdm9pZCBpdGVyYXRlRXhl
Y3V0aW5nQW5kQ29tcGlsaW5nQ29kZUJsb2Nrc1dpdGhvdXRIb2xkaW5nTG9ja3MoY29uc3QgRnVu
YyYpOworICAgIHZvaWQgaXRlcmF0ZUV4ZWN1dGluZ0FuZENvbXBpbGluZ0NvZGVCbG9ja3NXaXRo
b3V0SG9sZGluZ0xvY2tzKEFic3RyYWN0U2xvdFZpc2l0b3ImLCBjb25zdCBGdW5jJik7CiAgICAg
CiAgICAgdm9pZCBhc3NlcnRNYXJrU3RhY2tzRW1wdHkoKTsKIApAQCAtNTkwLDYgKzU4Nyw4IEBA
IHByaXZhdGU6CiAgICAgc3RhdGljIGJvb2wgdXNlR2VuZXJhdGlvbmFsR0MoKTsKICAgICBzdGF0
aWMgYm9vbCBzaG91bGRTd2VlcFN5bmNocm9ub3VzbHkoKTsKICAgICAKKyAgICB2b2lkIHZlcmlm
eUdDKCk7CisKICAgICBjb25zdCBIZWFwVHlwZSBtX2hlYXBUeXBlOwogICAgIE11dGF0b3JTdGF0
ZSBtX211dGF0b3JTdGF0ZSB7IE11dGF0b3JTdGF0ZTo6UnVubmluZyB9OwogICAgIGNvbnN0IHNp
emVfdCBtX3JhbVNpemU7CkBAIC02MzYsNiArNjM1LDcgQEAgcHJpdmF0ZToKICAgICBzdGQ6OnVu
aXF1ZV9wdHI8TWFya1N0YWNrQXJyYXk+IG1fbXV0YXRvck1hcmtTdGFjazsKICAgICBzdGQ6OnVu
aXF1ZV9wdHI8TWFya1N0YWNrQXJyYXk+IG1fcmFjZU1hcmtTdGFjazsKICAgICBzdGQ6OnVuaXF1
ZV9wdHI8TWFya2luZ0NvbnN0cmFpbnRTZXQ+IG1fY29uc3RyYWludFNldDsKKyAgICBzdGQ6OnVu
aXF1ZV9wdHI8VmVyaWZpZXJTbG90VmlzaXRvcj4gbV92ZXJpZmllclNsb3RWaXNpdG9yOwogCiAg
ICAgLy8gV2UgcG9vbCB0aGUgc2xvdCB2aXNpdG9ycyB1c2VkIGJ5IHBhcmFsbGVsIG1hcmtpbmcg
dGhyZWFkcy4gSXQncyB1c2VmdWwgdG8gYmUgYWJsZSB0bwogICAgIC8vIGVudW1lcmF0ZSBvdmVy
IHRoZW0sIGFuZCBpdCdzIHVzZWZ1bCB0byBoYXZlIHRoZW0gY2FjaGUgc29tZSBzbWFsbCBhbW91
bnQgb2YgbWVtb3J5IGZyb20KQEAgLTY1NCw2ICs2NTQsNyBAQCBwcml2YXRlOgogICAgIGJvb2wg
bV9pc1NhZmVUb0NvbGxlY3QgeyBmYWxzZSB9OwogICAgIGJvb2wgbV9pc1NodXR0aW5nRG93biB7
IGZhbHNlIH07CiAgICAgYm9vbCBtX211dGF0b3JTaG91bGRCZUZlbmNlZCB7IE9wdGlvbnM6OmZv
cmNlRmVuY2VkQmFycmllcigpIH07CisgICAgYm9vbCBtX2lzVmVyaWZ5aW5nR0MgeyBmYWxzZSB9
OwogCiAgICAgdW5zaWduZWQgbV9iYXJyaWVyVGhyZXNob2xkIHsgT3B0aW9uczo6Zm9yY2VGZW5j
ZWRCYXJyaWVyKCkgPyB0YXV0b2xvZ2ljYWxUaHJlc2hvbGQgOiBibGFja1RocmVzaG9sZCB9Owog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwSW5saW5lcy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBJbmxpbmVzLmgJKHJldmlzaW9u
IDI3MjcxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBJbmxpbmVzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTY5LDYgKzY5LDggQEAgaW5saW5lIGJvb2wgSGVhcDo6d29ybGRJc1N0
b3BwZWQoKSBjb25zdAogCiBBTFdBWVNfSU5MSU5FIGJvb2wgSGVhcDo6aXNNYXJrZWQoY29uc3Qg
dm9pZCogcmF3Q2VsbCkKIHsKKyAgICBSRUxFQVNFX0FTU0VSVCghbV9pc1ZlcmlmeWluZ0dDKTsg
Ly8gbWxhbSBURVNUIG9ubHkKKwogICAgIEhlYXBDZWxsKiBjZWxsID0gYml0d2lzZV9jYXN0PEhl
YXBDZWxsKj4ocmF3Q2VsbCk7CiAgICAgaWYgKGNlbGwtPmlzUHJlY2lzZUFsbG9jYXRpb24oKSkK
ICAgICAgICAgcmV0dXJuIGNlbGwtPnByZWNpc2VBbGxvY2F0aW9uKCkuaXNNYXJrZWQoKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBQcm9maWxlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcFByb2ZpbGVyLmNwcAkocmV2aXNp
b24gMjcyNzEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcFByb2ZpbGVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNjAsNiArNjAsNyBAQCB2b2lkIEhlYXBQcm9maWxlcjo6c2V0
QWN0aXZlSGVhcEFuYWx5emVyCiB7CiAgICAgQVNTRVJUKCEhbV9hY3RpdmVBbmFseXplciAhPSAh
IWFuYWx5emVyKTsKICAgICBtX2FjdGl2ZUFuYWx5emVyID0gYW5hbHl6ZXI7CisgICAgbV92bS5z
ZXRBY3RpdmVIZWFwQW5hbHl6ZXIoYW5hbHl6ZXIpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0lzb0NlbGxTZXQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Jc29DZWxsU2V0LmgJKHJldmlzaW9uIDI3
MjcxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0lzb0NlbGxTZXQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzQsNiArMzQsNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAorY2xhc3MgQWJz
dHJhY3RTbG90VmlzaXRvcjsKIGNsYXNzIEhlYXBDZWxsOwogY2xhc3MgSXNvU3Vic3BhY2U7CiAK
QEAgLTU5LDcgKzYwLDcgQEAgcHVibGljOgogICAgIHZvaWQgZm9yRWFjaE1hcmtlZENlbGwoY29u
c3QgRnVuYyYpOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KLSAgICBSZWY8U2hhcmVk
VGFzazx2b2lkKFNsb3RWaXNpdG9yJik+PiBmb3JFYWNoTWFya2VkQ2VsbEluUGFyYWxsZWwoY29u
c3QgRnVuYyYpOworICAgIFJlZjxTaGFyZWRUYXNrPHZvaWQoQWJzdHJhY3RTbG90VmlzaXRvciYp
Pj4gZm9yRWFjaE1hcmtlZENlbGxJblBhcmFsbGVsKGNvbnN0IEZ1bmMmKTsKICAgICAKICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgogICAgIHZvaWQgZm9yRWFjaExpdmVDZWxsKGNvbnN0IEZ1
bmMmKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0lzb0NlbGxTZXRJbmxpbmVz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvQ2VsbFNldElu
bGluZXMuaAkocmV2aXNpb24gMjcyNzEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
SXNvQ2VsbFNldElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtOTIsOSArOTIsOSBAQCB2b2lk
IElzb0NlbGxTZXQ6OmZvckVhY2hNYXJrZWRDZWxsKGNvbnN0CiB9CiAKIHRlbXBsYXRlPHR5cGVu
YW1lIEZ1bmM+Ci1SZWY8U2hhcmVkVGFzazx2b2lkKFNsb3RWaXNpdG9yJik+PiBJc29DZWxsU2V0
Ojpmb3JFYWNoTWFya2VkQ2VsbEluUGFyYWxsZWwoY29uc3QgRnVuYyYgZnVuYykKK1JlZjxTaGFy
ZWRUYXNrPHZvaWQoQWJzdHJhY3RTbG90VmlzaXRvciYpPj4gSXNvQ2VsbFNldDo6Zm9yRWFjaE1h
cmtlZENlbGxJblBhcmFsbGVsKGNvbnN0IEZ1bmMmIGZ1bmMpCiB7Ci0gICAgY2xhc3MgVGFzayBm
aW5hbCA6IHB1YmxpYyBTaGFyZWRUYXNrPHZvaWQoU2xvdFZpc2l0b3ImKT4geworICAgIGNsYXNz
IFRhc2sgZmluYWwgOiBwdWJsaWMgU2hhcmVkVGFzazx2b2lkKEFic3RyYWN0U2xvdFZpc2l0b3Im
KT4gewogICAgIHB1YmxpYzoKICAgICAgICAgVGFzayhJc29DZWxsU2V0JiBzZXQsIGNvbnN0IEZ1
bmMmIGZ1bmMpCiAgICAgICAgICAgICA6IG1fc2V0KHNldCkKQEAgLTEwMyw3ICsxMDMsNyBAQCBS
ZWY8U2hhcmVkVGFzazx2b2lkKFNsb3RWaXNpdG9yJik+PiBJc29DCiAgICAgICAgIHsKICAgICAg
ICAgfQogICAgICAgICAKLSAgICAgICAgdm9pZCBydW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpIGZp
bmFsCisgICAgICAgIHZvaWQgcnVuKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpIGZpbmFs
CiAgICAgICAgIHsKICAgICAgICAgICAgIHdoaWxlIChNYXJrZWRCbG9jazo6SGFuZGxlKiBoYW5k
bGUgPSBtX2Jsb2NrU291cmNlLT5ydW4oKSkgewogICAgICAgICAgICAgICAgIHVuc2lnbmVkIGJs
b2NrSW5kZXggPSBoYW5kbGUtPmluZGV4KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9KSVRTdHViUm91dGluZVNldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvSklUU3R1YlJvdXRpbmVTZXQuY3BwCShyZXZpc2lvbiAyNzI3MTApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9KSVRTdHViUm91dGluZVNldC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEyOCw3ICsxMjgsNyBAQCB2b2lkIEpJVFN0dWJSb3V0aW5lU2V0OjpkZWxldGVV
bm1hcmtlZEplCiAgICAgbV9yb3V0aW5lcy5zaHJpbmsoZHN0SW5kZXgpOwogfQogCi12b2lkIEpJ
VFN0dWJSb3V0aW5lU2V0Ojp0cmFjZU1hcmtlZFN0dWJSb3V0aW5lcyhTbG90VmlzaXRvciYgdmlz
aXRvcikKK3ZvaWQgSklUU3R1YlJvdXRpbmVTZXQ6OnRyYWNlTWFya2VkU3R1YlJvdXRpbmVzKEFi
c3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgZm9yIChhdXRvJiBlbnRyeSA6IG1f
cm91dGluZXMpIHsKICAgICAgICAgR0NBd2FyZUpJVFN0dWJSb3V0aW5lKiByb3V0aW5lID0gZW50
cnkucm91dGluZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0pJVFN0dWJSb3V0
aW5lU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSklUU3R1
YlJvdXRpbmVTZXQuaAkocmV2aXNpb24gMjcyNzEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvSklUU3R1YlJvdXRpbmVTZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsOCArMzUsOCBA
QCB1c2luZyBXVEY6OlJhbmdlOwogCiBuYW1lc3BhY2UgSlNDIHsKIAorY2xhc3MgQWJzdHJhY3RT
bG90VmlzaXRvcjsKIGNsYXNzIEdDQXdhcmVKSVRTdHViUm91dGluZTsKLWNsYXNzIFNsb3RWaXNp
dG9yOwogCiAjaWYgRU5BQkxFKEpJVCkKIApAQCAtNjMsOCArNjMsOCBAQCBwdWJsaWM6CiAgICAg
dm9pZCBwcmVwYXJlRm9yQ29uc2VydmF0aXZlU2NhbigpOwogICAgIAogICAgIHZvaWQgZGVsZXRl
VW5tYXJrZWRKZXR0aXNvbmVkU3R1YlJvdXRpbmVzKCk7Ci0gICAgCi0gICAgdm9pZCB0cmFjZU1h
cmtlZFN0dWJSb3V0aW5lcyhTbG90VmlzaXRvciYpOworCisgICAgdm9pZCB0cmFjZU1hcmtlZFN0
dWJSb3V0aW5lcyhBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAgICAgCiBwcml2YXRlOgogICAgIHZv
aWQgbWFya1Nsb3codWludHB0cl90IGFkZHJlc3MpOwpAQCAtOTIsNyArOTIsNyBAQCBwdWJsaWM6
CiAgICAgdm9pZCBtYXJrKHZvaWQqKSB7IH0KICAgICB2b2lkIHByZXBhcmVGb3JDb25zZXJ2YXRp
dmVTY2FuKCkgeyB9CiAgICAgdm9pZCBkZWxldGVVbm1hcmtlZEpldHRpc29uZWRTdHViUm91dGlu
ZXMoKSB7IH0KLSAgICB2b2lkIHRyYWNlTWFya2VkU3R1YlJvdXRpbmVzKFNsb3RWaXNpdG9yJikg
eyB9CisgICAgdm9pZCB0cmFjZU1hcmtlZFN0dWJSb3V0aW5lcyhBYnN0cmFjdFNsb3RWaXNpdG9y
JikgeyB9CiB9OwogCiAjZW5kaWYgLy8gIUVOQUJMRShKSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9NYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQu
Y3BwCShyZXZpc2lvbiAyNzI3MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJr
U3RhY2tNZXJnaW5nQ29uc3RyYWludC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1LDEyICsyNSwx
MyBAQAogCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiTWFya1N0YWNrTWVyZ2luZ0Nv
bnN0cmFpbnQuaCIKLQogI2luY2x1ZGUgIkdDU2VnbWVudGVkQXJyYXlJbmxpbmVzLmgiCiAjaW5j
bHVkZSAiSlNDSW5saW5lcy5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIAorc3RhdGljIGNvbnN0ZXhw
ciBib29sIG1sYW1WZXJib3NlID0gZmFsc2U7CisKIE1hcmtTdGFja01lcmdpbmdDb25zdHJhaW50
OjpNYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludChIZWFwJiBoZWFwKQogICAgIDogTWFya2luZ0Nv
bnN0cmFpbnQoIk1zbSIsICJNYXJrIFN0YWNrIE1lcmdpbmciLCBDb25zdHJhaW50Vm9sYXRpbGl0
eTo6R3JleWVkQnlFeGVjdXRpb24pCiAgICAgLCBtX2hlYXAoaGVhcCkKQEAgLTQxLDEyICs0Miwx
MiBAQCBNYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludDo6fk1hcmtTdGFja01lCiB7CiB9CiAKLWRv
dWJsZSBNYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludDo6cXVpY2tXb3JrRXN0aW1hdGUoU2xvdFZp
c2l0b3ImKQorZG91YmxlIE1hcmtTdGFja01lcmdpbmdDb25zdHJhaW50OjpxdWlja1dvcmtFc3Rp
bWF0ZShBYnN0cmFjdFNsb3RWaXNpdG9yJikKIHsKICAgICByZXR1cm4gbV9oZWFwLm1fbXV0YXRv
ck1hcmtTdGFjay0+c2l6ZSgpICsgbV9oZWFwLm1fcmFjZU1hcmtTdGFjay0+c2l6ZSgpOwogfQog
Ci12b2lkIE1hcmtTdGFja01lcmdpbmdDb25zdHJhaW50OjpwcmVwYXJlVG9FeGVjdXRlSW1wbChj
b25zdCBBYnN0cmFjdExvY2tlciYsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBNYXJrU3Rh
Y2tNZXJnaW5nQ29uc3RyYWludDo6cHJlcGFyZVRvRXhlY3V0ZUltcGwoY29uc3QgQWJzdHJhY3RM
b2NrZXImLCBBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIC8vIExvZ2dpbmcg
dGhlIHdvcmsgaGVyZSBlbnN1cmVzIHRoYXQgdGhlIGNvbnN0cmFpbnQgc29sdmVyIGtub3dzIHRo
YXQgaXQgZG9lc24ndCBuZWVkIHRvIHByb2R1Y2UKICAgICAvLyBhbnltb3JlIHdvcmsuCkBAIC01
Niw4ICs1NywxOCBAQCB2b2lkIE1hcmtTdGFja01lcmdpbmdDb25zdHJhaW50OjpwcmVwYXJlCiAg
ICAgZGF0YUxvZ0lmKE9wdGlvbnM6OmxvZ0dDKCksICIoIiwgc2l6ZSwgIikiKTsKIH0KIAotdm9p
ZCBNYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludDo6ZXhlY3V0ZUltcGwoU2xvdFZpc2l0b3ImIHZp
c2l0b3IpCit2b2lkIE1hcmtTdGFja01lcmdpbmdDb25zdHJhaW50OjpleGVjdXRlSW1wbChBYnN0
cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogeworICAgIC8vIFdlIHdhbnQgdG8gc2tpcCB0aGlz
IGNvbnN0cmFpbnQgZm9yIHRoZSBHQyB2ZXJpZmllciBiZWNhdXNlOgorICAgIC8vIDEuIFRoZXJl
IHNob3VsZCBiZSBubyBtdXRhdG9yIG1hcmtpbmcgYWN0aW9uIGJldHdlZW4gdGhlIEVuZCBwaGFz
ZSBhbmQgdmVyaWZ5R0MoKS4KKyAgICAvLyAgICBIZW5jZSwgd2UgY2FuIGlnbm9yZSB0aHNlIHN0
YWNrcy4KKyAgICAvLyAyLiBUaGUgRW5kIHBoYXNlIGV4cGxpY3RseSBjYWxscyBpdGVyYXRlRXhl
Y3V0aW5nQW5kQ29tcGlsaW5nQ29kZUJsb2NrcygpCisgICAgLy8gICAgdG8gYWRkIGV4ZWN1dGlu
ZyBDb2RlQmxvY2tzIHRvIG1faGVhcC5tX211dGF0b3JNYXJrU3RhY2suIFdlIHdhbnQgdG8KKyAg
ICAvLyAgICBsZWF2ZSB0aG9zZSB1bnBlcnR1cmJlZC4KKyAgICBpZiAobV9oZWFwLm1faXNWZXJp
ZnlpbmdHQykKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG1sYW1WZXJib3NlKSBkYXRhTG9n
TG4oIiAgICBtbGFtIE1hcmtTdGFja01lcmdpbmdDb25zdHJhaW50OjpleGVjdXRlSW1wbCgpIG1f
aGVhcC5tX211dGF0b3JNYXJrU3RhY2stPnRyYW5zZmVyVG8odmlzaXRvci5tdXRhdG9yTWFya1N0
YWNrKCkpOyIpOwogICAgIG1faGVhcC5tX211dGF0b3JNYXJrU3RhY2stPnRyYW5zZmVyVG8odmlz
aXRvci5tdXRhdG9yTWFya1N0YWNrKCkpOwogICAgIG1faGVhcC5tX3JhY2VNYXJrU3RhY2stPnRy
YW5zZmVyVG8odmlzaXRvci5tdXRhdG9yTWFya1N0YWNrKCkpOwogfQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWlu
dC5oCShyZXZpc2lvbiAyNzI3MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJr
U3RhY2tNZXJnaW5nQ29uc3RyYWludC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCwxOCArMzAsMTgg
QEAKIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBIZWFwOwotY2xhc3MgU2xvdFZpc2l0b3I7Citj
bGFzcyBBYnN0cmFjdFNsb3RWaXNpdG9yOwogCiBjbGFzcyBNYXJrU3RhY2tNZXJnaW5nQ29uc3Ry
YWludCBmaW5hbCA6IHB1YmxpYyBNYXJraW5nQ29uc3RyYWludCB7CiBwdWJsaWM6CiAgICAgTWFy
a1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQoSGVhcCYpOwogICAgIH5NYXJrU3RhY2tNZXJnaW5nQ29u
c3RyYWludCgpIGZpbmFsOwogICAgIAotICAgIGRvdWJsZSBxdWlja1dvcmtFc3RpbWF0ZShTbG90
VmlzaXRvciYpIGZpbmFsOworICAgIGRvdWJsZSBxdWlja1dvcmtFc3RpbWF0ZShBYnN0cmFjdFNs
b3RWaXNpdG9yJikgZmluYWw7CiAgICAgCiBwcml2YXRlOgotICAgIHZvaWQgcHJlcGFyZVRvRXhl
Y3V0ZUltcGwoY29uc3QgQWJzdHJhY3RMb2NrZXImIGNvbnN0cmFpbnRTb2x2aW5nTG9ja2VyLCBT
bG90VmlzaXRvciYpIGZpbmFsOwotICAgIHZvaWQgZXhlY3V0ZUltcGwoU2xvdFZpc2l0b3ImKSBm
aW5hbDsKKyAgICB2b2lkIHByZXBhcmVUb0V4ZWN1dGVJbXBsKGNvbnN0IEFic3RyYWN0TG9ja2Vy
JiBjb25zdHJhaW50U29sdmluZ0xvY2tlciwgQWJzdHJhY3RTbG90VmlzaXRvciYpIGZpbmFsOwor
ICAgIHZvaWQgZXhlY3V0ZUltcGwoQWJzdHJhY3RTbG90VmlzaXRvciYpIGZpbmFsOwogICAgIAog
ICAgIEhlYXAmIG1faGVhcDsKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9N
YXJrZWRCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01h
cmtlZEJsb2NrLmgJKHJldmlzaW9uIDI3MjcxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL01hcmtlZEJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSw3IEBACiAvKgogICog
IENvcHlyaWdodCAoQykgMTk5OS0yMDAwIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCiAg
KiAgQ29weXJpZ2h0IChDKSAyMDAxIFBldGVyIEtlbGx5IChwbWtAcG9zdC5jb20pCi0gKiAgQ29w
eXJpZ2h0IChDKSAyMDAzLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
IENvcHlyaWdodCAoQykgMjAwMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
ZXNzZXIgR2VuZXJhbCBQdWJsaWMKQEAgLTE1MSw3ICsxNTEsNyBAQCBwdWJsaWM6CiAgICAgICAg
IAogICAgICAgICB2b2lkIHNocmluaygpOwogICAgICAgICAgICAgCi0gICAgICAgIHZvaWQgdmlz
aXRXZWFrU2V0KFNsb3RWaXNpdG9yJik7CisgICAgICAgIHZvaWQgdmlzaXRXZWFrU2V0KEFic3Ry
YWN0U2xvdFZpc2l0b3ImKTsKICAgICAgICAgdm9pZCByZWFwV2Vha1NldCgpOwogICAgICAgICAg
ICAgCiAgICAgICAgIC8vIFdoaWxlIGFsbG9jYXRpbmcgZnJvbSBhIGZyZWUgbGlzdCwgTWFya2Vk
QmxvY2sgdGVtcG9yYXJpbHkgaGFzIGJvZ3VzCkBAIC0yMDMsNiArMjAzLDcgQEAgcHVibGljOgog
ICAgICAgICAKICAgICAgICAgdm9pZCogc3RhcnQoKSBjb25zdCB7IHJldHVybiAmbV9ibG9jay0+
YXRvbXMoKVswXTsgfQogICAgICAgICB2b2lkKiBlbmQoKSBjb25zdCB7IHJldHVybiAmbV9ibG9j
ay0+YXRvbXMoKVttX2VuZEF0b21dOyB9CisgICAgICAgIHZvaWQqIGF0b21BdChzaXplX3QgaSkg
Y29uc3QgeyByZXR1cm4gJm1fYmxvY2stPmF0b21zKClbaV07IH0KICAgICAgICAgYm9vbCBjb250
YWlucyh2b2lkKiBwKSBjb25zdCB7IHJldHVybiBzdGFydCgpIDw9IHAgJiYgcCA8IGVuZCgpOyB9
CiAKICAgICAgICAgdm9pZCBkdW1wU3RhdGUoUHJpbnRTdHJlYW0mKTsKQEAgLTQ5OCw3ICs0OTks
NyBAQCBpbmxpbmUgdm9pZCBNYXJrZWRCbG9jazo6SGFuZGxlOjpzaHJpbmsoCiAgICAgbV93ZWFr
U2V0LnNocmluaygpOwogfQogCi1pbmxpbmUgdm9pZCBNYXJrZWRCbG9jazo6SGFuZGxlOjp2aXNp
dFdlYWtTZXQoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCitpbmxpbmUgdm9pZCBNYXJrZWRCbG9jazo6
SGFuZGxlOjp2aXNpdFdlYWtTZXQoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAg
ICByZXR1cm4gbV93ZWFrU2V0LnZpc2l0KHZpc2l0b3IpOwogfQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvTWFya2VkU3BhY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL01hcmtlZFNwYWNlLmNwcAkocmV2aXNpb24gMjcyNzEwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkU3BhY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yNzIsNyArMjcyLDcgQEAgdm9pZCBNYXJrZWRTcGFjZTo6ZW5hYmxlUHJlY2lzZUFsbG9jYXRp
bwogICAgICAgICBtX3ByZWNpc2VBbGxvY2F0aW9uU2V0LT5hZGQoYWxsb2NhdGlvbi0+Y2VsbCgp
KTsKIH0KIAotdm9pZCBNYXJrZWRTcGFjZTo6dmlzaXRXZWFrU2V0cyhTbG90VmlzaXRvciYgdmlz
aXRvcikKK3ZvaWQgTWFya2VkU3BhY2U6OnZpc2l0V2Vha1NldHMoQWJzdHJhY3RTbG90VmlzaXRv
ciYgdmlzaXRvcikKIHsKICAgICBhdXRvIHZpc2l0ID0gWyZdIChXZWFrU2V0KiB3ZWFrU2V0KSB7
CiAgICAgICAgIHdlYWtTZXQtPnZpc2l0KHZpc2l0b3IpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvTWFya2VkU3BhY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9NYXJrZWRTcGFjZS5oCShyZXZpc2lvbiAyNzI3MTApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRTcGFjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw2ICsz
Nyw3IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCitjbGFzcyBBYnN0cmFjdFNsb3RWaXNpdG9yOyAv
LyBtbGFtIEZJWE1FID8KIGNsYXNzIENvbXBsZXRlU3Vic3BhY2U7CiBjbGFzcyBIZWFwOwogY2xh
c3MgSGVhcENlbGw7CkBAIC0xMDUsNyArMTA2LDcgQEAgcHVibGljOgogICAgIAogICAgIHZvaWQg
cHJlcGFyZUZvckFsbG9jYXRpb24oKTsKIAotICAgIHZvaWQgdmlzaXRXZWFrU2V0cyhTbG90Vmlz
aXRvciYpOworICAgIHZvaWQgdmlzaXRXZWFrU2V0cyhBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAg
ICAgdm9pZCByZWFwV2Vha1NldHMoKTsKIAogICAgIE1hcmtlZEJsb2NrU2V0JiBibG9ja3MoKSB7
IHJldHVybiBtX2Jsb2NrczsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFy
a2luZ0NvbnN0cmFpbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL01hcmtpbmdDb25zdHJhaW50LmNwcAkocmV2aXNpb24gMjcyNzEwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiTWFya2luZ0Nv
bnN0cmFpbnQuaCIKIAorI2luY2x1ZGUgIkFic3RyYWN0U2xvdFZpc2l0b3JJbmxpbmVzLmgiCiAj
aW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIlZpc2l0Q291bnRlci5oIgogCkBAIC01
MSw3ICs1Miw3IEBAIHZvaWQgTWFya2luZ0NvbnN0cmFpbnQ6OnJlc2V0U3RhdHMoKQogICAgIG1f
bGFzdFZpc2l0Q291bnQgPSAwOwogfQogCi12b2lkIE1hcmtpbmdDb25zdHJhaW50OjpleGVjdXRl
KFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBNYXJraW5nQ29uc3RyYWludDo6ZXhlY3V0ZShB
YnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFZpc2l0Q291bnRlciB2aXNpdENv
dW50ZXIodmlzaXRvcik7CiAgICAgZXhlY3V0ZUltcGwodmlzaXRvcik7CkBAIC02MCwxNyArNjEs
MjMgQEAgdm9pZCBNYXJraW5nQ29uc3RyYWludDo6ZXhlY3V0ZShTbG90VmlzaQogICAgICAgICBk
YXRhTG9nKCIoIiwgYWJicmV2aWF0ZWROYW1lKCksICIgdmlzaXRlZCAiLCB2aXNpdENvdW50ZXIu
dmlzaXRDb3VudCgpLCAiIGluIGV4ZWN1dGUpIik7CiB9CiAKLWRvdWJsZSBNYXJraW5nQ29uc3Ry
YWludDo6cXVpY2tXb3JrRXN0aW1hdGUoU2xvdFZpc2l0b3ImKQordm9pZCBNYXJraW5nQ29uc3Ry
YWludDo6ZXhlY3V0ZVN5bmNocm9ub3VzbHkoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikK
K3sKKyAgICBwcmVwYXJlVG9FeGVjdXRlSW1wbChOb0xvY2tpbmdOZWNlc3NhcnksIHZpc2l0b3Ip
OworICAgIGV4ZWN1dGVJbXBsKHZpc2l0b3IpOworfQorCitkb3VibGUgTWFya2luZ0NvbnN0cmFp
bnQ6OnF1aWNrV29ya0VzdGltYXRlKEFic3RyYWN0U2xvdFZpc2l0b3ImKQogewogICAgIHJldHVy
biAwOwogfQogCi1kb3VibGUgTWFya2luZ0NvbnN0cmFpbnQ6OndvcmtFc3RpbWF0ZShTbG90Vmlz
aXRvciYgdmlzaXRvcikKK2RvdWJsZSBNYXJraW5nQ29uc3RyYWludDo6d29ya0VzdGltYXRlKEFi
c3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgcmV0dXJuIGxhc3RWaXNpdENvdW50
KCkgKyBxdWlja1dvcmtFc3RpbWF0ZSh2aXNpdG9yKTsKIH0KIAotdm9pZCBNYXJraW5nQ29uc3Ry
YWludDo6cHJlcGFyZVRvRXhlY3V0ZShjb25zdCBBYnN0cmFjdExvY2tlciYgY29uc3RyYWludFNv
bHZpbmdMb2NrZXIsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBNYXJraW5nQ29uc3RyYWlu
dDo6cHJlcGFyZVRvRXhlY3V0ZShjb25zdCBBYnN0cmFjdExvY2tlciYgY29uc3RyYWludFNvbHZp
bmdMb2NrZXIsIEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgZGF0YUxvZ0lm
KE9wdGlvbnM6OmxvZ0dDKCksIGFiYnJldmlhdGVkTmFtZSgpKTsKICAgICBWaXNpdENvdW50ZXIg
dmlzaXRDb3VudGVyKHZpc2l0b3IpOwpAQCAtODAsNyArODcsNyBAQCB2b2lkIE1hcmtpbmdDb25z
dHJhaW50OjpwcmVwYXJlVG9FeGVjdXRlCiAgICAgICAgIGRhdGFMb2coIigiLCBhYmJyZXZpYXRl
ZE5hbWUoKSwgIiB2aXNpdGVkICIsIHZpc2l0Q291bnRlci52aXNpdENvdW50KCksICIgaW4gcHJl
cGFyZVRvRXhlY3V0ZSkiKTsKIH0KIAotdm9pZCBNYXJraW5nQ29uc3RyYWludDo6ZG9QYXJhbGxl
bFdvcmsoU2xvdFZpc2l0b3ImIHZpc2l0b3IsIFNoYXJlZFRhc2s8dm9pZChTbG90VmlzaXRvciYp
PiYgdGFzaykKK3ZvaWQgTWFya2luZ0NvbnN0cmFpbnQ6OmRvUGFyYWxsZWxXb3JrKEFic3RyYWN0
U2xvdFZpc2l0b3ImIHZpc2l0b3IsIFNoYXJlZFRhc2s8dm9pZChBYnN0cmFjdFNsb3RWaXNpdG9y
Jik+JiB0YXNrKQogewogICAgIFZpc2l0Q291bnRlciB2aXNpdENvdW50ZXIodmlzaXRvcik7CiAg
ICAgdGFzay5ydW4odmlzaXRvcik7CkBAIC05Miw3ICs5OSw3IEBAIHZvaWQgTWFya2luZ0NvbnN0
cmFpbnQ6OmRvUGFyYWxsZWxXb3JrKFMKICAgICB9CiB9CiAKLXZvaWQgTWFya2luZ0NvbnN0cmFp
bnQ6OnByZXBhcmVUb0V4ZWN1dGVJbXBsKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgU2xvdFZpc2l0
b3ImKQordm9pZCBNYXJraW5nQ29uc3RyYWludDo6cHJlcGFyZVRvRXhlY3V0ZUltcGwoY29uc3Qg
QWJzdHJhY3RMb2NrZXImLCBBYnN0cmFjdFNsb3RWaXNpdG9yJikKIHsKIH0KIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludC5oCShyZXZpc2lv
biAyNzI3MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWlu
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3ICszOCw3IEBACiBuYW1lc3BhY2UgSlNDIHsKIAog
Y2xhc3MgTWFya2luZ0NvbnN0cmFpbnRTZXQ7Ci1jbGFzcyBTbG90VmlzaXRvcjsKK2NsYXNzIEFi
c3RyYWN0U2xvdFZpc2l0b3I7CiAKIGNsYXNzIE1hcmtpbmdDb25zdHJhaW50IHsKICAgICBXVEZf
TUFLRV9OT05DT1BZQUJMRShNYXJraW5nQ29uc3RyYWludCk7CkBAIC02MCwxNSArNjAsMTYgQEAg
cHVibGljOgogICAgIAogICAgIHNpemVfdCBsYXN0VmlzaXRDb3VudCgpIGNvbnN0IHsgcmV0dXJu
IG1fbGFzdFZpc2l0Q291bnQ7IH0KICAgICAKLSAgICB2b2lkIGV4ZWN1dGUoU2xvdFZpc2l0b3Im
KTsKLSAgICAKLSAgICBKU19FWFBPUlRfUFJJVkFURSB2aXJ0dWFsIGRvdWJsZSBxdWlja1dvcmtF
c3RpbWF0ZShTbG90VmlzaXRvciYgdmlzaXRvcik7CisgICAgdm9pZCBleGVjdXRlKEFic3RyYWN0
U2xvdFZpc2l0b3ImKTsKKworICAgIC8vIEZJWE1FIG1sYW0KKyAgICBKU19FWFBPUlRfUFJJVkFU
RSB2aXJ0dWFsIGRvdWJsZSBxdWlja1dvcmtFc3RpbWF0ZShBYnN0cmFjdFNsb3RWaXNpdG9yJiB2
aXNpdG9yKTsKICAgICAKLSAgICBkb3VibGUgd29ya0VzdGltYXRlKFNsb3RWaXNpdG9yJiB2aXNp
dG9yKTsKKyAgICBkb3VibGUgd29ya0VzdGltYXRlKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0
b3IpOwogICAgIAotICAgIHZvaWQgcHJlcGFyZVRvRXhlY3V0ZShjb25zdCBBYnN0cmFjdExvY2tl
ciYgY29uc3RyYWludFNvbHZpbmdMb2NrZXIsIFNsb3RWaXNpdG9yJik7CisgICAgdm9pZCBwcmVw
YXJlVG9FeGVjdXRlKGNvbnN0IEFic3RyYWN0TG9ja2VyJiBjb25zdHJhaW50U29sdmluZ0xvY2tl
ciwgQWJzdHJhY3RTbG90VmlzaXRvciYpOwogICAgIAotICAgIHZvaWQgZG9QYXJhbGxlbFdvcmso
U2xvdFZpc2l0b3ImLCBTaGFyZWRUYXNrPHZvaWQoU2xvdFZpc2l0b3ImKT4mKTsKKyAgICB2b2lk
IGRvUGFyYWxsZWxXb3JrKEFic3RyYWN0U2xvdFZpc2l0b3ImLCBTaGFyZWRUYXNrPHZvaWQoQWJz
dHJhY3RTbG90VmlzaXRvciYpPiYpOwogICAgIAogICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5IHZv
bGF0aWxpdHkoKSBjb25zdCB7IHJldHVybiBtX3ZvbGF0aWxpdHk7IH0KICAgICAKQEAgLTc2LDkg
Kzc3LDExIEBAIHB1YmxpYzoKICAgICBDb25zdHJhaW50UGFyYWxsZWxpc20gcGFyYWxsZWxpc20o
KSBjb25zdCB7IHJldHVybiBtX3BhcmFsbGVsaXNtOyB9CiAKIHByb3RlY3RlZDoKLSAgICB2aXJ0
dWFsIHZvaWQgZXhlY3V0ZUltcGwoU2xvdFZpc2l0b3ImKSA9IDA7Ci0gICAgSlNfRVhQT1JUX1BS
SVZBVEUgdmlydHVhbCB2b2lkIHByZXBhcmVUb0V4ZWN1dGVJbXBsKGNvbnN0IEFic3RyYWN0TG9j
a2VyJiBjb25zdHJhaW50U29sdmluZ0xvY2tlciwgU2xvdFZpc2l0b3ImKTsKLSAgICAKKyAgICB2
aXJ0dWFsIHZvaWQgZXhlY3V0ZUltcGwoQWJzdHJhY3RTbG90VmlzaXRvciYpID0gMDsKKyAgICBK
U19FWFBPUlRfUFJJVkFURSB2aXJ0dWFsIHZvaWQgcHJlcGFyZVRvRXhlY3V0ZUltcGwoY29uc3Qg
QWJzdHJhY3RMb2NrZXImIGNvbnN0cmFpbnRTb2x2aW5nTG9ja2VyLCBBYnN0cmFjdFNsb3RWaXNp
dG9yJik7CisKKyAgICB2b2lkIGV4ZWN1dGVTeW5jaHJvbm91c2x5KEFic3RyYWN0U2xvdFZpc2l0
b3ImKTsKKwogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgTWFya2luZ0NvbnN0cmFpbnRTZXQ7
IC8vIFNvIGl0IGNhbiBzZXQgbV9pbmRleC4KICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50U2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludFNldC5jcHAJKHJldmlzaW9uIDI3
MjcxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50U2V0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjMsNyArNjMsNyBAQCB2b2lkIE1hcmtpbmdDb25zdHJh
aW50U2V0OjpkaWRTdGFydE1hcmtpCiAgICAgbV9pdGVyYXRpb24gPSAxOwogfQogCi12b2lkIE1h
cmtpbmdDb25zdHJhaW50U2V0OjphZGQoQ1N0cmluZyBhYmJyZXZpYXRlZE5hbWUsIENTdHJpbmcg
bmFtZSwgOjpGdW5jdGlvbjx2b2lkKFNsb3RWaXNpdG9yJik+IGZ1bmN0aW9uLCBDb25zdHJhaW50
Vm9sYXRpbGl0eSB2b2xhdGlsaXR5LCBDb25zdHJhaW50Q29uY3VycmVuY3kgY29uY3VycmVuY3ks
IENvbnN0cmFpbnRQYXJhbGxlbGlzbSBwYXJhbGxlbGlzbSkKK3ZvaWQgTWFya2luZ0NvbnN0cmFp
bnRTZXQ6OmFkZChDU3RyaW5nIGFiYnJldmlhdGVkTmFtZSwgQ1N0cmluZyBuYW1lLCA6OkZ1bmN0
aW9uPHZvaWQoQWJzdHJhY3RTbG90VmlzaXRvciYpPiBmdW5jdGlvbiwgQ29uc3RyYWludFZvbGF0
aWxpdHkgdm9sYXRpbGl0eSwgQ29uc3RyYWludENvbmN1cnJlbmN5IGNvbmN1cnJlbmN5LCBDb25z
dHJhaW50UGFyYWxsZWxpc20gcGFyYWxsZWxpc20pCiB7CiAgICAgYWRkKG1ha2VVbmlxdWU8U2lt
cGxlTWFya2luZ0NvbnN0cmFpbnQ+KFdURk1vdmUoYWJicmV2aWF0ZWROYW1lKSwgV1RGTW92ZShu
YW1lKSwgV1RGTW92ZShmdW5jdGlvbiksIHZvbGF0aWxpdHksIGNvbmN1cnJlbmN5LCBwYXJhbGxl
bGlzbSkpOwogfQpAQCAtNzgsMTQgKzc4LDE0IEBAIHZvaWQgTWFya2luZ0NvbnN0cmFpbnRTZXQ6
OmFkZCgKICAgICBtX3NldC5hcHBlbmQoV1RGTW92ZShjb25zdHJhaW50KSk7CiB9CiAKLWJvb2wg
TWFya2luZ0NvbnN0cmFpbnRTZXQ6OmV4ZWN1dGVDb252ZXJnZW5jZShTbG90VmlzaXRvciYgdmlz
aXRvcikKK2Jvb2wgTWFya2luZ0NvbnN0cmFpbnRTZXQ6OmV4ZWN1dGVDb252ZXJnZW5jZShBYnN0
cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGJvb2wgcmVzdWx0ID0gZXhlY3V0ZUNv
bnZlcmdlbmNlSW1wbCh2aXNpdG9yKTsKICAgICBkYXRhTG9nSWYoT3B0aW9uczo6bG9nR0MoKSwg
IiAiKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1ib29sIE1hcmtpbmdDb25zdHJhaW50U2V0
Ojppc1dhdmVmcm9udEFkdmFuY2luZyhTbG90VmlzaXRvciYgdmlzaXRvcikKK2Jvb2wgTWFya2lu
Z0NvbnN0cmFpbnRTZXQ6OmlzV2F2ZWZyb250QWR2YW5jaW5nKEFic3RyYWN0U2xvdFZpc2l0b3Im
IHZpc2l0b3IpCiB7CiAgICAgZm9yIChNYXJraW5nQ29uc3RyYWludCogb3V0Z3Jvd3RoIDogbV9v
dXRncm93dGhzKSB7CiAgICAgICAgIGlmIChvdXRncm93dGgtPndvcmtFc3RpbWF0ZSh2aXNpdG9y
KSkKQEAgLTk0LDcgKzk0LDcgQEAgYm9vbCBNYXJraW5nQ29uc3RyYWludFNldDo6aXNXYXZlZnJv
bnRBZAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBNYXJraW5nQ29uc3RyYWludFNldDo6
ZXhlY3V0ZUNvbnZlcmdlbmNlSW1wbChTbG90VmlzaXRvciYgdmlzaXRvcikKK2Jvb2wgTWFya2lu
Z0NvbnN0cmFpbnRTZXQ6OmV4ZWN1dGVDb252ZXJnZW5jZUltcGwoQWJzdHJhY3RTbG90VmlzaXRv
ciYgdmlzaXRvcikKIHsKICAgICBTdXBlclNhbXBsZXJTY29wZSBzdXBlclNhbXBsZXJTY29wZShm
YWxzZSk7CiAgICAgTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXIgc29sdmVyKCp0aGlzKTsKQEAgLTE2
NiwxMCArMTY2LDEwIEBAIGJvb2wgTWFya2luZ0NvbnN0cmFpbnRTZXQ6OmV4ZWN1dGVDb252ZXIK
ICAgICByZXR1cm4gIXNvbHZlci5kaWRWaXNpdFNvbWV0aGluZygpOwogfQogCi12b2lkIE1hcmtp
bmdDb25zdHJhaW50U2V0OjpleGVjdXRlQWxsKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBN
YXJraW5nQ29uc3RyYWludFNldDo6ZXhlY3V0ZUFsbFN5bmNocm9ub3VzbHkoQWJzdHJhY3RTbG90
VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBmb3IgKGF1dG8mIGNvbnN0cmFpbnQgOiBtX3NldCkK
LSAgICAgICAgY29uc3RyYWludC0+ZXhlY3V0ZSh2aXNpdG9yKTsKKyAgICAgICAgY29uc3RyYWlu
dC0+ZXhlY3V0ZVN5bmNocm9ub3VzbHkodmlzaXRvcik7CiAgICAgZGF0YUxvZ0lmKE9wdGlvbnM6
OmxvZ0dDKCksICIgIik7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01h
cmtpbmdDb25zdHJhaW50U2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvTWFya2luZ0NvbnN0cmFpbnRTZXQuaAkocmV2aXNpb24gMjcyNzEwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnRTZXQuaAkod29ya2luZyBjb3B5
KQpAQCAtNDYsMTQgKzQ2LDE0IEBAIHB1YmxpYzoKICAgICB2b2lkIGFkZCgKICAgICAgICAgQ1N0
cmluZyBhYmJyZXZpYXRlZE5hbWUsCiAgICAgICAgIENTdHJpbmcgbmFtZSwKLSAgICAgICAgOjpG
dW5jdGlvbjx2b2lkKFNsb3RWaXNpdG9yJik+LAorICAgICAgICA6OkZ1bmN0aW9uPHZvaWQoQWJz
dHJhY3RTbG90VmlzaXRvciYpPiwKICAgICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHksCiAgICAg
ICAgIENvbnN0cmFpbnRDb25jdXJyZW5jeSA9IENvbnN0cmFpbnRDb25jdXJyZW5jeTo6Q29uY3Vy
cmVudCwKICAgICAgICAgQ29uc3RyYWludFBhcmFsbGVsaXNtID0gQ29uc3RyYWludFBhcmFsbGVs
aXNtOjpTZXF1ZW50aWFsKTsKICAgICAKICAgICB2b2lkIGFkZCgKICAgICAgICAgQ1N0cmluZyBh
YmJyZXZpYXRlZE5hbWUsIENTdHJpbmcgbmFtZSwKLSAgICAgICAgOjpGdW5jdGlvbjx2b2lkKFNs
b3RWaXNpdG9yJik+IGZ1bmMsCisgICAgICAgIDo6RnVuY3Rpb248dm9pZChBYnN0cmFjdFNsb3RW
aXNpdG9yJik+IGZ1bmMsCiAgICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5IHZvbGF0aWxpdHks
CiAgICAgICAgIENvbnN0cmFpbnRQYXJhbGxlbGlzbSBwYXJhbGxlbGlzbSkKICAgICB7CkBAIC02
NCwyMCArNjQsMjAgQEAgcHVibGljOgogICAgIAogICAgIC8vIEFzc3VtaW5nIHRoYXQgdGhlIG1h
cmsgc3RhY2tzIGFyZSBhbGwgZW1wdHksIHRoaXMgd2lsbCBnaXZlIHlvdSBhIGd1ZXNzIGFzIHRv
IHdoZXRoZXIgb3IKICAgICAvLyBub3QgdGhlIHdhdmVmcm9udCBpcyBhZHZhbmNpbmcuCi0gICAg
Ym9vbCBpc1dhdmVmcm9udEFkdmFuY2luZyhTbG90VmlzaXRvciYpOwotICAgIGJvb2wgaXNXYXZl
ZnJvbnRSZXRyZWF0aW5nKFNsb3RWaXNpdG9yJiB2aXNpdG9yKSB7IHJldHVybiAhaXNXYXZlZnJv
bnRBZHZhbmNpbmcodmlzaXRvcik7IH0KKyAgICBib29sIGlzV2F2ZWZyb250QWR2YW5jaW5nKEFi
c3RyYWN0U2xvdFZpc2l0b3ImKTsKKyAgICBib29sIGlzV2F2ZWZyb250UmV0cmVhdGluZyhBYnN0
cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKSB7IHJldHVybiAhaXNXYXZlZnJvbnRBZHZhbmNpbmco
dmlzaXRvcik7IH0KICAgICAKICAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhpcyBleGVjdXRlZCBh
bGwgY29uc3RyYWludHMgYW5kIG5vbmUgb2YgdGhlbSBwcm9kdWNlZCBuZXcgd29yay4gVGhpcwog
ICAgIC8vIGFzc3VtZXMgdGhhdCB5b3UndmUgYWxyYWVkeSB2aXNpdGVkIHJvb3RzIGFuZCBkcmFp
bmVkIGZyb20gdGhlcmUuCi0gICAgYm9vbCBleGVjdXRlQ29udmVyZ2VuY2UoU2xvdFZpc2l0b3Im
KTsKLSAgICAKKyAgICBib29sIGV4ZWN1dGVDb252ZXJnZW5jZShBYnN0cmFjdFNsb3RWaXNpdG9y
Jik7CisKICAgICAvLyBTaW1wbHkgcnVucyBhbGwgY29uc3RyYWludHMgd2l0aG91dCBhbnkgc2hl
bmFuaWdhbnMuCi0gICAgdm9pZCBleGVjdXRlQWxsKFNsb3RWaXNpdG9yJik7CisgICAgdm9pZCBl
eGVjdXRlQWxsU3luY2hyb25vdXNseShBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAgICAgCiBwcml2
YXRlOgogICAgIGZyaWVuZCBjbGFzcyBNYXJraW5nQ29uc3RyYWludFNvbHZlcjsKLSAgICAKLSAg
ICBib29sIGV4ZWN1dGVDb252ZXJnZW5jZUltcGwoU2xvdFZpc2l0b3ImKTsKKworICAgIGJvb2wg
ZXhlY3V0ZUNvbnZlcmdlbmNlSW1wbChBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAgICAgCiAgICAg
SGVhcCYgbV9oZWFwOwogICAgIEJpdFZlY3RvciBtX3VuZXhlY3V0ZWRSb290czsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50U29sdmVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludFNv
bHZlci5jcHAJKHJldmlzaW9uIDI3MjcxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L01hcmtpbmdDb25zdHJhaW50U29sdmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNyArMzMs
NyBAQCBuYW1lc3BhY2UgSlNDIHsgCiAKIE1hcmtpbmdDb25zdHJhaW50U29sdmVyOjpNYXJraW5n
Q29uc3RyYWludFNvbHZlcihNYXJraW5nQ29uc3RyYWludFNldCYgc2V0KQogICAgIDogbV9oZWFw
KHNldC5tX2hlYXApCi0gICAgLCBtX21haW5WaXNpdG9yKG1faGVhcC5jb2xsZWN0b3JTbG90Vmlz
aXRvcigpKQorICAgICwgbV9tYWluVmlzaXRvcihtX2hlYXAuY29sbGVjdG9yU2xvdFZpc2l0b3Io
KSkgLy8gbWxhbSBGSVhNRSBuZWVkIHN1cHBvcnQgZm9yIFZlcmlmaWVyU2xvdFZpc2l0b3IKICAg
ICAsIG1fc2V0KHNldCkKIHsKICAgICBtX2hlYXAuZm9yRWFjaFNsb3RWaXNpdG9yKApAQCAtMTUw
LDEzICsxNTAsMTMgQEAgdm9pZCBNYXJraW5nQ29uc3RyYWludFNvbHZlcjo6ZXhlY3V0ZShNYQog
ICAgIG1fZXhlY3V0ZWQuc2V0KGNvbnN0cmFpbnQuaW5kZXgoKSk7CiB9CiAKLXZvaWQgTWFya2lu
Z0NvbnN0cmFpbnRTb2x2ZXI6OmFkZFBhcmFsbGVsVGFzayhSZWZQdHI8U2hhcmVkVGFzazx2b2lk
KFNsb3RWaXNpdG9yJik+PiB0YXNrLCBNYXJraW5nQ29uc3RyYWludCYgY29uc3RyYWludCkKK3Zv
aWQgTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXI6OmFkZFBhcmFsbGVsVGFzayhSZWZQdHI8U2hhcmVk
VGFzazx2b2lkKEFic3RyYWN0U2xvdFZpc2l0b3ImKT4+IHRhc2ssIE1hcmtpbmdDb25zdHJhaW50
JiBjb25zdHJhaW50KQogewogICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKICAg
ICBtX3RvRXhlY3V0ZUluUGFyYWxsZWwuYXBwZW5kKFRhc2tXaXRoQ29uc3RyYWludChXVEZNb3Zl
KHRhc2spLCAmY29uc3RyYWludCkpOwogfQogCi12b2lkIE1hcmtpbmdDb25zdHJhaW50U29sdmVy
OjpydW5FeGVjdXRpb25UaHJlYWQoU2xvdFZpc2l0b3ImIHZpc2l0b3IsIFNjaGVkdWxlclByZWZl
cmVuY2UgcHJlZmVyZW5jZSwgU2NvcGVkTGFtYmRhPE9wdGlvbmFsPHVuc2lnbmVkPigpPiBwaWNr
TmV4dCkKK3ZvaWQgTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXI6OnJ1bkV4ZWN1dGlvblRocmVhZChB
YnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBTY2hlZHVsZXJQcmVmZXJlbmNlIHByZWZlcmVu
Y2UsIFNjb3BlZExhbWJkYTxPcHRpb25hbDx1bnNpZ25lZD4oKT4gcGlja05leHQpCiB7CiAgICAg
Zm9yICg7OykgewogICAgICAgICBib29sIGRvUGFyYWxsZWxXb3JrTW9kZTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50U29sdmVyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXIu
aAkocmV2aXNpb24gMjcyNzEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2lu
Z0NvbnN0cmFpbnRTb2x2ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNjUsMTUgKzY1LDE1IEBAIHB1
YmxpYzoKICAgICB2b2lkIGV4ZWN1dGUoTWFya2luZ0NvbnN0cmFpbnQmKTsKICAgICAKICAgICAv
LyBQYXJhbGxlbCBjb25zdHJhaW50cyBjYW4gYWRkIHBhcmFsbGVsIHRhc2tzLgotICAgIHZvaWQg
YWRkUGFyYWxsZWxUYXNrKFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoU2xvdFZpc2l0b3ImKT4+LCBN
YXJraW5nQ29uc3RyYWludCYpOworICAgIHZvaWQgYWRkUGFyYWxsZWxUYXNrKFJlZlB0cjxTaGFy
ZWRUYXNrPHZvaWQoQWJzdHJhY3RTbG90VmlzaXRvciYpPj4sIE1hcmtpbmdDb25zdHJhaW50Jik7
CiAgICAgCiBwcml2YXRlOgotICAgIHZvaWQgcnVuRXhlY3V0aW9uVGhyZWFkKFNsb3RWaXNpdG9y
JiwgU2NoZWR1bGVyUHJlZmVyZW5jZSwgU2NvcGVkTGFtYmRhPE9wdGlvbmFsPHVuc2lnbmVkPigp
PiBwaWNrTmV4dCk7CisgICAgdm9pZCBydW5FeGVjdXRpb25UaHJlYWQoQWJzdHJhY3RTbG90Vmlz
aXRvciYsIFNjaGVkdWxlclByZWZlcmVuY2UsIFNjb3BlZExhbWJkYTxPcHRpb25hbDx1bnNpZ25l
ZD4oKT4gcGlja05leHQpOwogICAgIAogICAgIHN0cnVjdCBUYXNrV2l0aENvbnN0cmFpbnQgewog
ICAgICAgICBUYXNrV2l0aENvbnN0cmFpbnQoKSB7IH0KICAgICAgICAgCi0gICAgICAgIFRhc2tX
aXRoQ29uc3RyYWludChSZWZQdHI8U2hhcmVkVGFzazx2b2lkKFNsb3RWaXNpdG9yJik+PiB0YXNr
LCBNYXJraW5nQ29uc3RyYWludCogY29uc3RyYWludCkKKyAgICAgICAgVGFza1dpdGhDb25zdHJh
aW50KFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoQWJzdHJhY3RTbG90VmlzaXRvciYpPj4gdGFzaywg
TWFya2luZ0NvbnN0cmFpbnQqIGNvbnN0cmFpbnQpCiAgICAgICAgICAgICA6IHRhc2soV1RGTW92
ZSh0YXNrKSkKICAgICAgICAgICAgICwgY29uc3RyYWludChjb25zdHJhaW50KQogICAgICAgICB7
CkBAIC04NSwxMiArODUsMTIgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAmJiBjb25zdHJh
aW50ID09IG90aGVyLmNvbnN0cmFpbnQ7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIFJl
ZlB0cjxTaGFyZWRUYXNrPHZvaWQoU2xvdFZpc2l0b3ImKT4+IHRhc2s7CisgICAgICAgIFJlZlB0
cjxTaGFyZWRUYXNrPHZvaWQoQWJzdHJhY3RTbG90VmlzaXRvciYpPj4gdGFzazsKICAgICAgICAg
TWFya2luZ0NvbnN0cmFpbnQqIGNvbnN0cmFpbnQgeyBudWxscHRyIH07CiAgICAgfTsKICAgICAK
ICAgICBIZWFwJiBtX2hlYXA7Ci0gICAgU2xvdFZpc2l0b3ImIG1fbWFpblZpc2l0b3I7CisgICAg
QWJzdHJhY3RTbG90VmlzaXRvciYgbV9tYWluVmlzaXRvcjsKICAgICBNYXJraW5nQ29uc3RyYWlu
dFNldCYgbV9zZXQ7CiAgICAgQml0VmVjdG9yIG1fZXhlY3V0ZWQ7CiAgICAgRGVxdWU8VGFza1dp
dGhDb25zdHJhaW50LCAzMj4gbV90b0V4ZWN1dGVJblBhcmFsbGVsOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvUHJlY2lzZUFsbG9jYXRpb24uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1ByZWNpc2VBbGxvY2F0aW9uLmNwcAkocmV2aXNpb24g
MjcyNzEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvUHJlY2lzZUFsbG9jYXRpb24u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDAsNyArMjAwLDcgQEAgdm9pZCBQcmVjaXNlQWxsb2Nh
dGlvbjo6c2hyaW5rKCkKICAgICBtX3dlYWtTZXQuc2hyaW5rKCk7CiB9CiAKLXZvaWQgUHJlY2lz
ZUFsbG9jYXRpb246OnZpc2l0V2Vha1NldChTbG90VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgUHJl
Y2lzZUFsbG9jYXRpb246OnZpc2l0V2Vha1NldChBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9y
KQogewogICAgIG1fd2Vha1NldC52aXNpdCh2aXNpdG9yKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL1ByZWNpc2VBbGxvY2F0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvUHJlY2lzZUFsbG9jYXRpb24uaAkocmV2aXNpb24gMjcyNzEw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvUHJlY2lzZUFsbG9jYXRpb24uaAkod29y
a2luZyBjb3B5KQpAQCAtODIsNyArODIsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgdm9pZCBzaHJp
bmsoKTsKICAgICAKLSAgICB2b2lkIHZpc2l0V2Vha1NldChTbG90VmlzaXRvciYpOworICAgIHZv
aWQgdmlzaXRXZWFrU2V0KEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKICAgICB2b2lkIHJlYXBXZWFr
U2V0KCk7CiAgICAgCiAgICAgdm9pZCBjbGVhck5ld2x5QWxsb2NhdGVkKCkgeyBtX2lzTmV3bHlB
bGxvY2F0ZWQgPSBmYWxzZTsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2lt
cGxlTWFya2luZ0NvbnN0cmFpbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL1NpbXBsZU1hcmtpbmdDb25zdHJhaW50LmNwcAkocmV2aXNpb24gMjcyNzEwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiBTaW1w
bGVNYXJraW5nQ29uc3RyYWludDo6U2ltcGxlTWFya2luZ0NvbnN0cmFpbnQoCiAgICAgQ1N0cmlu
ZyBhYmJyZXZpYXRlZE5hbWUsIENTdHJpbmcgbmFtZSwKLSAgICA6OkZ1bmN0aW9uPHZvaWQoU2xv
dFZpc2l0b3ImKT4gZXhlY3V0ZUZ1bmN0aW9uLAorICAgIDo6RnVuY3Rpb248dm9pZChBYnN0cmFj
dFNsb3RWaXNpdG9yJik+IGV4ZWN1dGVGdW5jdGlvbiwKICAgICBDb25zdHJhaW50Vm9sYXRpbGl0
eSB2b2xhdGlsaXR5LCBDb25zdHJhaW50Q29uY3VycmVuY3kgY29uY3VycmVuY3ksCiAgICAgQ29u
c3RyYWludFBhcmFsbGVsaXNtIHBhcmFsbGVsaXNtKQogICAgIDogTWFya2luZ0NvbnN0cmFpbnQo
V1RGTW92ZShhYmJyZXZpYXRlZE5hbWUpLCBXVEZNb3ZlKG5hbWUpLCB2b2xhdGlsaXR5LCBjb25j
dXJyZW5jeSwgcGFyYWxsZWxpc20pCkBAIC00Miw3ICs0Miw3IEBAIFNpbXBsZU1hcmtpbmdDb25z
dHJhaW50Ojp+U2ltcGxlTWFya2luZ0MKIHsKIH0KIAotdm9pZCBTaW1wbGVNYXJraW5nQ29uc3Ry
YWludDo6ZXhlY3V0ZUltcGwoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIFNpbXBsZU1hcmtp
bmdDb25zdHJhaW50OjpleGVjdXRlSW1wbChBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQog
ewogICAgIG1fZXhlY3V0ZUZ1bmN0aW9uKHZpc2l0b3IpOwogfQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TaW1wbGVNYXJraW5nQ29uc3RyYWludC5oCShyZXZp
c2lvbiAyNzI3MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TaW1wbGVNYXJraW5n
Q29uc3RyYWludC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNywxNCArMzcsMTQgQEAgY2xhc3MgU2lt
cGxlTWFya2luZ0NvbnN0cmFpbnQgZmluYWwgOiBwdQogcHVibGljOgogICAgIEpTX0VYUE9SVF9Q
UklWQVRFIFNpbXBsZU1hcmtpbmdDb25zdHJhaW50KAogICAgICAgICBDU3RyaW5nIGFiYnJldmlh
dGVkTmFtZSwgQ1N0cmluZyBuYW1lLAotICAgICAgICA6OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0
b3ImKT4sCisgICAgICAgIDo6RnVuY3Rpb248dm9pZChBYnN0cmFjdFNsb3RWaXNpdG9yJik+LAog
ICAgICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eSwKICAgICAgICAgQ29uc3RyYWludENvbmN1cnJl
bmN5ID0gQ29uc3RyYWludENvbmN1cnJlbmN5OjpDb25jdXJyZW50LAogICAgICAgICBDb25zdHJh
aW50UGFyYWxsZWxpc20gPSBDb25zdHJhaW50UGFyYWxsZWxpc206OlNlcXVlbnRpYWwpOwogICAg
IAogICAgIFNpbXBsZU1hcmtpbmdDb25zdHJhaW50KAogICAgICAgICBDU3RyaW5nIGFiYnJldmlh
dGVkTmFtZSwgQ1N0cmluZyBuYW1lLAotICAgICAgICA6OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0
b3ImKT4gZnVuYywKKyAgICAgICAgOjpGdW5jdGlvbjx2b2lkKEFic3RyYWN0U2xvdFZpc2l0b3Im
KT4gZnVuYywKICAgICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHkgdm9sYXRpbGl0eSwKICAgICAg
ICAgQ29uc3RyYWludFBhcmFsbGVsaXNtIHBhcmFsbGVsaXNtKQogICAgICAgICA6IFNpbXBsZU1h
cmtpbmdDb25zdHJhaW50KGFiYnJldmlhdGVkTmFtZSwgbmFtZSwgV1RGTW92ZShmdW5jKSwgdm9s
YXRpbGl0eSwgQ29uc3RyYWludENvbmN1cnJlbmN5OjpDb25jdXJyZW50LCBwYXJhbGxlbGlzbSkK
QEAgLTU0LDkgKzU0LDkgQEAgcHVibGljOgogICAgIEpTX0VYUE9SVF9QUklWQVRFIH5TaW1wbGVN
YXJraW5nQ29uc3RyYWludCgpIGZpbmFsOwogICAgIAogcHJpdmF0ZToKLSAgICB2b2lkIGV4ZWN1
dGVJbXBsKFNsb3RWaXNpdG9yJikgZmluYWw7CisgICAgdm9pZCBleGVjdXRlSW1wbChBYnN0cmFj
dFNsb3RWaXNpdG9yJikgZmluYWw7CiAKLSAgICA6OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3Im
KT4gbV9leGVjdXRlRnVuY3Rpb247CisgICAgOjpGdW5jdGlvbjx2b2lkKEFic3RyYWN0U2xvdFZp
c2l0b3ImKT4gbV9leGVjdXRlRnVuY3Rpb247CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5jcHAJKHJldmlzaW9u
IDI3MjcxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIt
MjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTItMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNp
bmNsdWRlICJTbG90VmlzaXRvci5oIgogCisjaW5jbHVkZSAiQWJzdHJhY3RTbG90VmlzaXRvcklu
bGluZXMuaCIKICNpbmNsdWRlICJDb25zZXJ2YXRpdmVSb290cy5oIgogI2luY2x1ZGUgIkdDU2Vn
bWVudGVkQXJyYXlJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSGVhcEFuYWx5emVyLmgiCkBAIC03Nywx
NSArNzgsMTcgQEAgc3RhdGljIHZvaWQgdmFsaWRhdGUoSlNDZWxsKiBjZWxsKQogI2VuZGlmCiAK
IFNsb3RWaXNpdG9yOjpTbG90VmlzaXRvcihIZWFwJiBoZWFwLCBDU3RyaW5nIGNvZGVOYW1lKQot
ICAgIDogbV9ieXRlc1Zpc2l0ZWQoMCkKLSAgICAsIG1fdmlzaXRDb3VudCgwKQorLy8gICAgOiBC
YXNlKFR5cGU6OlNsb3RWaXNpdG9yLCBoZWFwLCBjb2RlTmFtZSkKKyAgICA6IEJhc2UoaGVhcCwg
Y29kZU5hbWUpCisgICAgLCBtX2J5dGVzVmlzaXRlZCgwKQorLy8gICAgLCBtX3Zpc2l0Q291bnQo
MCkKICAgICAsIG1faXNJblBhcmFsbGVsTW9kZShmYWxzZSkKICAgICAsIG1fbWFya2luZ1ZlcnNp
b24oTWFya2VkU3BhY2U6OmluaXRpYWxWZXJzaW9uKQotICAgICwgbV9oZWFwKGhlYXApCi0gICAg
LCBtX2NvZGVOYW1lKGNvZGVOYW1lKQorLy8gICAgLCBtX2hlYXAoaGVhcCkKKy8vICAgICwgbV9j
b2RlTmFtZShjb2RlTmFtZSkKICNpZiBBU1NFUlRfRU5BQkxFRAogICAgICwgbV9pc0NoZWNraW5n
Rm9yRGVmYXVsdE1hcmtWaW9sYXRpb24oZmFsc2UpCi0gICAgLCBtX2lzRHJhaW5pbmcoZmFsc2Up
CisvLy8vICAgICwgbV9pc0RyYWluaW5nKGZhbHNlKQogI2VuZGlmCiB7CiB9CkBAIC0xMTcsOCAr
MTIwLDkgQEAgdm9pZCBTbG90VmlzaXRvcjo6ZGlkU3RhcnRNYXJraW5nKCkKIAogdm9pZCBTbG90
VmlzaXRvcjo6cmVzZXQoKQogeworICAgIEFic3RyYWN0U2xvdFZpc2l0b3I6OnJlc2V0KCk7CiAg
ICAgbV9ieXRlc1Zpc2l0ZWQgPSAwOwotICAgIG1fdmlzaXRDb3VudCA9IDA7CisvLyAgICBtX3Zp
c2l0Q291bnQgPSAwOwogICAgIG1faGVhcEFuYWx5emVyID0gbnVsbHB0cjsKICAgICBSRUxFQVNF
X0FTU0VSVCghbV9jdXJyZW50Q2VsbCk7CiB9CkBAIC0xMzIsNyArMTM2LDcgQEAgdm9pZCBTbG90
VmlzaXRvcjo6Y2xlYXJNYXJrU3RhY2tzKCkKICAgICAgICAgfSk7CiB9CiAKLXZvaWQgU2xvdFZp
c2l0b3I6OmFwcGVuZChjb25zdCBDb25zZXJ2YXRpdmVSb290cyYgY29uc2VydmF0aXZlUm9vdHMp
Cit2b2lkIFNsb3RWaXNpdG9yOjphcHBlbmRfQ29uc2VydmF0aXZlUm9vdHMoY29uc3QgQ29uc2Vy
dmF0aXZlUm9vdHMmIGNvbnNlcnZhdGl2ZVJvb3RzKQogewogICAgIEhlYXBDZWxsKiogcm9vdHMg
PSBjb25zZXJ2YXRpdmVSb290cy5yb290cygpOwogICAgIHNpemVfdCBzaXplID0gY29uc2VydmF0
aXZlUm9vdHMuc2l6ZSgpOwpAQCAtMjMwLDcgKzIzNCw3IEBAIHZvaWQgU2xvdFZpc2l0b3I6OmFw
cGVuZEpTQ2VsbE9yQXV4aWxpYXIKIHZvaWQgU2xvdFZpc2l0b3I6OmFwcGVuZFNsb3coSlNDZWxs
KiBjZWxsLCBEZXBlbmRlbmN5IGRlcGVuZGVuY3kpCiB7CiAgICAgaWYgKFVOTElLRUxZKG1faGVh
cEFuYWx5emVyKSkKLSAgICAgICAgbV9oZWFwQW5hbHl6ZXItPmFuYWx5emVFZGdlKG1fY3VycmVu
dENlbGwsIGNlbGwsIG1fcm9vdE1hcmtSZWFzb24pOworICAgICAgICBtX2hlYXBBbmFseXplci0+
YW5hbHl6ZUVkZ2UobV9jdXJyZW50Q2VsbCwgY2VsbCwgcm9vdE1hcmtSZWFzb24oKSk7CiAKICAg
ICBhcHBlbmRIaWRkZW5TbG93SW1wbChjZWxsLCBkZXBlbmRlbmN5KTsKIH0KQEAgLTgwNywxMiAr
ODExLDEyIEBAIE1hcmtTdGFja0FycmF5JiBTbG90VmlzaXRvcjo6Y29ycmVzcG9uZGkKICAgICBy
ZXR1cm4gKm1faGVhcC5tX3NoYXJlZE11dGF0b3JNYXJrU3RhY2s7CiB9CiAKLXZvaWQgU2xvdFZp
c2l0b3I6OmFkZFBhcmFsbGVsQ29uc3RyYWludFRhc2soUmVmUHRyPFNoYXJlZFRhc2s8dm9pZChT
bG90VmlzaXRvciYpPj4gdGFzaykKK3ZvaWQgU2xvdFZpc2l0b3I6OmFkZFBhcmFsbGVsQ29uc3Ry
YWludFRhc2soUmVmUHRyPFNoYXJlZFRhc2s8dm9pZChBYnN0cmFjdFNsb3RWaXNpdG9yJik+PiB0
YXNrKQogewogICAgIFJFTEVBU0VfQVNTRVJUKG1fY3VycmVudFNvbHZlcik7CiAgICAgUkVMRUFT
RV9BU1NFUlQobV9jdXJyZW50Q29uc3RyYWludCk7CiAgICAgUkVMRUFTRV9BU1NFUlQodGFzayk7
Ci0gICAgCisKICAgICBtX2N1cnJlbnRTb2x2ZXItPmFkZFBhcmFsbGVsVGFzayh0YXNrLCAqbV9j
dXJyZW50Q29uc3RyYWludCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L1Nsb3RWaXNpdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
U2xvdFZpc2l0b3IuaAkocmV2aXNpb24gMjcyNzEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvU2xvdFZpc2l0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI1LDc0ICsyNSwxMDUgQEAK
IAogI3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRlICJBYnN0cmFjdFNsb3RWaXNpdG9yLmgiCiAjaW5j
bHVkZSAiSGFuZGxlVHlwZXMuaCIKICNpbmNsdWRlICJJdGVyYXRpb25TdGF0dXMuaCIKLSNpbmNs
dWRlICJNYXJrU3RhY2suaCIKLSNpbmNsdWRlICJWaXNpdFJhY2VLZXkuaCIKKy8vI2luY2x1ZGUg
Ik1hcmtTdGFjay5oIgorLy8jaW5jbHVkZSAiVmlzaXRSYWNlS2V5LmgiCiAjaW5jbHVkZSA8d3Rm
L0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3dGYvTW9ub3RvbmljVGltZS5oPgotI2luY2x1ZGUgPHd0
Zi9TaGFyZWRUYXNrLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorLy8jaW5jbHVk
ZSA8d3RmL1NoYXJlZFRhc2suaD4KKy8vI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAog
bmFtZXNwYWNlIEpTQyB7CiAKLWNsYXNzIENvbnNlcnZhdGl2ZVJvb3RzOworLy9jbGFzcyBDb25z
ZXJ2YXRpdmVSb290czsKIGNsYXNzIEdDVGhyZWFkU2hhcmVkRGF0YTsKLWNsYXNzIEhlYXA7Cisv
L2NsYXNzIEhlYXA7CiBjbGFzcyBIZWFwQ2VsbDsKIGNsYXNzIEhlYXBBbmFseXplcjsKLWNsYXNz
IE1hcmtlZEJsb2NrOwogY2xhc3MgTWFya2luZ0NvbnN0cmFpbnQ7CiBjbGFzcyBNYXJraW5nQ29u
c3RyYWludFNvbHZlcjsKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNsYXNzIFdlYWs7Ci10ZW1wbGF0
ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBUcmFpdHM+IGNsYXNzIFdyaXRlQmFycmllckJhc2U7Cisv
L3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGNsYXNzIFdlYWs7CisvL3RlbXBsYXRlPHR5cGVuYW1lIFQs
IHR5cGVuYW1lIFRyYWl0cz4gY2xhc3MgV3JpdGVCYXJyaWVyQmFzZTsKIAogdHlwZWRlZiB1aW50
MzJfdCBIZWFwVmVyc2lvbjsKIAotY2xhc3MgU2xvdFZpc2l0b3IgeworY2xhc3MgU2xvdFZpc2l0
b3IgZmluYWwgOiBwdWJsaWMgQWJzdHJhY3RTbG90VmlzaXRvciB7CiAgICAgV1RGX01BS0VfTk9O
Q09QWUFCTEUoU2xvdFZpc2l0b3IpOwogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogCisg
ICAgdXNpbmcgQmFzZSA9IEFic3RyYWN0U2xvdFZpc2l0b3I7CisKICAgICBmcmllbmQgY2xhc3Mg
U2V0Q3VycmVudENlbGxTY29wZTsKICAgICBmcmllbmQgY2xhc3MgSGVhcDsKIAogcHVibGljOgot
ICAgIGVudW0gUm9vdE1hcmtSZWFzb24gewotICAgICAgICBOb25lLAotICAgICAgICBDb25zZXJ2
YXRpdmVTY2FuLAotICAgICAgICBTdHJvbmdSZWZlcmVuY2VzLAotICAgICAgICBQcm90ZWN0ZWRW
YWx1ZXMsCi0gICAgICAgIE1hcmtMaXN0U2V0LAotICAgICAgICBWTUV4Y2VwdGlvbnMsCi0gICAg
ICAgIFN0cm9uZ0hhbmRsZXMsCi0gICAgICAgIERlYnVnZ2VyLAotICAgICAgICBKSVRTdHViUm91
dGluZXMsCi0gICAgICAgIFdlYWtTZXRzLAotICAgICAgICBPdXRwdXQsCi0gICAgICAgIERGR1dv
cmtMaXN0cywKLSAgICAgICAgQ29kZUJsb2NrcywKLSAgICAgICAgRE9NR0NPdXRwdXQsCisgICAg
Y2xhc3MgQ29udGV4dCB7CisgICAgcHVibGljOgorICAgICAgICBBTFdBWVNfSU5MSU5FIENvbnRl
eHQoQWJzdHJhY3RTbG90VmlzaXRvciYsIEhlYXBDZWxsKikgeyB9CisgICAgfTsKKworICAgIGNs
YXNzIERlZmF1bHRNYXJraW5nVmlvbGF0aW9uQXNzZXJ0aW9uU2NvcGUgeworICAgIHB1YmxpYzoK
KyNpZiBBU1NFUlRfRU5BQkxFRAorICAgICAgICBEZWZhdWx0TWFya2luZ1Zpb2xhdGlvbkFzc2Vy
dGlvblNjb3BlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorICAgICAgICAgICAgOiBtX3Zpc2l0b3Io
dmlzaXRvcikKKyAgICAgICAgeworICAgICAgICAgICAgbV93YXNDaGVja2luZ0ZvckRlZmF1bHRN
YXJrVmlvbGF0aW9uID0gbV92aXNpdG9yLm1faXNDaGVja2luZ0ZvckRlZmF1bHRNYXJrVmlvbGF0
aW9uOworICAgICAgICAgICAgbV92aXNpdG9yLm1faXNDaGVja2luZ0ZvckRlZmF1bHRNYXJrVmlv
bGF0aW9uID0gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICB+RGVmYXVsdE1hcmtpbmdWaW9s
YXRpb25Bc3NlcnRpb25TY29wZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1fdmlzaXRvci5t
X2lzQ2hlY2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlvbiA9IG1fd2FzQ2hlY2tpbmdGb3JEZWZh
dWx0TWFya1Zpb2xhdGlvbjsKKyAgICAgICAgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgU2xv
dFZpc2l0b3ImIG1fdmlzaXRvcjsKKyAgICAgICAgYm9vbCBtX3dhc0NoZWNraW5nRm9yRGVmYXVs
dE1hcmtWaW9sYXRpb247CisjZWxzZQorICAgICAgICBEZWZhdWx0TWFya2luZ1Zpb2xhdGlvbkFz
c2VydGlvblNjb3BlKFNsb3RWaXNpdG9yJikgeyB9CisjZW5kaWYKICAgICB9OwogCisvLyAgICBl
bnVtIFJvb3RNYXJrUmVhc29uIHsKKy8vICAgICAgICBOb25lLAorLy8gICAgICAgIENvbnNlcnZh
dGl2ZVNjYW4sCisvLyAgICAgICAgU3Ryb25nUmVmZXJlbmNlcywKKy8vICAgICAgICBQcm90ZWN0
ZWRWYWx1ZXMsCisvLyAgICAgICAgTWFya0xpc3RTZXQsCisvLyAgICAgICAgVk1FeGNlcHRpb25z
LAorLy8gICAgICAgIFN0cm9uZ0hhbmRsZXMsCisvLyAgICAgICAgRGVidWdnZXIsCisvLyAgICAg
ICAgSklUU3R1YlJvdXRpbmVzLAorLy8gICAgICAgIFdlYWtTZXRzLAorLy8gICAgICAgIE91dHB1
dCwKKy8vICAgICAgICBERkdXb3JrTGlzdHMsCisvLyAgICAgICAgQ29kZUJsb2NrcywKKy8vICAg
ICAgICBET01HQ091dHB1dCwKKy8vICAgIH07CisKICAgICBTbG90VmlzaXRvcihIZWFwJiwgQ1N0
cmluZyBjb2RlTmFtZSk7CiAgICAgflNsb3RWaXNpdG9yKCk7CiAKLSAgICBNYXJrU3RhY2tBcnJh
eSYgY29sbGVjdG9yTWFya1N0YWNrKCkgeyByZXR1cm4gbV9jb2xsZWN0b3JTdGFjazsgfQotICAg
IE1hcmtTdGFja0FycmF5JiBtdXRhdG9yTWFya1N0YWNrKCkgeyByZXR1cm4gbV9tdXRhdG9yU3Rh
Y2s7IH0KLSAgICBjb25zdCBNYXJrU3RhY2tBcnJheSYgY29sbGVjdG9yTWFya1N0YWNrKCkgY29u
c3QgeyByZXR1cm4gbV9jb2xsZWN0b3JTdGFjazsgfQotICAgIGNvbnN0IE1hcmtTdGFja0FycmF5
JiBtdXRhdG9yTWFya1N0YWNrKCkgY29uc3QgeyByZXR1cm4gbV9tdXRhdG9yU3RhY2s7IH0KLSAg
ICAKLSAgICBWTSYgdm0oKTsKLSAgICBjb25zdCBWTSYgdm0oKSBjb25zdDsKLSAgICBIZWFwKiBo
ZWFwKCkgY29uc3Q7Ci0KLSAgICB2b2lkIGFwcGVuZChjb25zdCBDb25zZXJ2YXRpdmVSb290cyYp
OwotICAgIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFRyYWl0cz4gdm9pZCBh
cHBlbmQoY29uc3QgV3JpdGVCYXJyaWVyQmFzZTxULCBUcmFpdHM+Jik7Ci0gICAgdGVtcGxhdGU8
dHlwZW5hbWUgVCwgdHlwZW5hbWUgVHJhaXRzPiB2b2lkIGFwcGVuZEhpZGRlbihjb25zdCBXcml0
ZUJhcnJpZXJCYXNlPFQsIFRyYWl0cz4mKTsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJdGVyYXRv
cj4gdm9pZCBhcHBlbmQoSXRlcmF0b3IgYmVnaW4gLCBJdGVyYXRvciBlbmQpOwotICAgIHZvaWQg
YXBwZW5kVmFsdWVzKGNvbnN0IFdyaXRlQmFycmllckJhc2U8VW5rbm93biwgUmF3VmFsdWVUcmFp
dHM8VW5rbm93bj4+Kiwgc2l6ZV90IGNvdW50KTsKLSAgICB2b2lkIGFwcGVuZFZhbHVlc0hpZGRl
bihjb25zdCBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24sIFJhd1ZhbHVlVHJhaXRzPFVua25vd24+
PiosIHNpemVfdCBjb3VudCk7CisvLyAgICBNYXJrU3RhY2tBcnJheSYgY29sbGVjdG9yTWFya1N0
YWNrKCkgeyByZXR1cm4gbV9jb2xsZWN0b3JTdGFjazsgfQorLy8gICAgTWFya1N0YWNrQXJyYXkm
IG11dGF0b3JNYXJrU3RhY2soKSB7IHJldHVybiBtX211dGF0b3JTdGFjazsgfQorLy8gICAgY29u
c3QgTWFya1N0YWNrQXJyYXkmIGNvbGxlY3Rvck1hcmtTdGFjaygpIGNvbnN0IHsgcmV0dXJuIG1f
Y29sbGVjdG9yU3RhY2s7IH0KKy8vICAgIGNvbnN0IE1hcmtTdGFja0FycmF5JiBtdXRhdG9yTWFy
a1N0YWNrKCkgY29uc3QgeyByZXR1cm4gbV9tdXRhdG9yU3RhY2s7IH0KKyAgICAKKy8vICAgIFZN
JiB2bSgpOworLy8gICAgY29uc3QgVk0mIHZtKCkgY29uc3Q7CisvLyAgICBIZWFwKiBoZWFwKCkg
Y29uc3Q7CisKKyAgICB2b2lkIGFwcGVuZF9Db25zZXJ2YXRpdmVSb290cyhjb25zdCBDb25zZXJ2
YXRpdmVSb290cyYpIGZpbmFsOworCisgICAgdXNpbmcgQmFzZTo6YXBwZW5kOworLy8gICAgdGVt
cGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVHJhaXRzPiB2b2lkIGFwcGVuZChjb25zdCBXcml0
ZUJhcnJpZXJCYXNlPFQsIFRyYWl0cz4mKTsKKy8vICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5
cGVuYW1lIFRyYWl0cz4gdm9pZCBhcHBlbmRIaWRkZW4oY29uc3QgV3JpdGVCYXJyaWVyQmFzZTxU
LCBUcmFpdHM+Jik7CisvLyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJdGVyYXRvcj4gdm9pZCBhcHBl
bmQoSXRlcmF0b3IgYmVnaW4gLCBJdGVyYXRvciBlbmQpOworLy8gICAgdm9pZCBhcHBlbmRWYWx1
ZXMoY29uc3QgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duLCBSYXdWYWx1ZVRyYWl0czxVbmtub3du
Pj4qLCBzaXplX3QgY291bnQpOworLy8gICAgdm9pZCBhcHBlbmRWYWx1ZXNIaWRkZW4oY29uc3Qg
V3JpdGVCYXJyaWVyQmFzZTxVbmtub3duLCBSYXdWYWx1ZVRyYWl0czxVbmtub3duPj4qLCBzaXpl
X3QgY291bnQpOwogICAgIAogICAgIC8vIFRoZXNlIGRvbid0IHJlcXVpcmUgeW91IHRvIHByb3Zl
IHRoYXQgeW91IGhhdmUgYSBXcml0ZUJhcnJpZXI8Pi4gVGhhdCBtYWtlcyBzZW5zZQogICAgIC8v
IGZvcjoKQEAgLTEwMywzMiArMTM0LDM2IEBAIHB1YmxpYzoKICAgICAvLwogICAgIC8vIElmIHlv
dSBhcmUgbm90IGEgcm9vdCBhbmQgeW91IGRvbid0IGtub3cgd2hhdCBraW5kIG9mIGJhcnJpZXIg
eW91IGhhdmUsIHRoZW4geW91CiAgICAgLy8gc2hvdWxkbid0IGNhbGwgdGhlc2UgbWV0aG9kcy4K
LSAgICB2b2lkIGFwcGVuZFVuYmFycmllcmVkKEpTVmFsdWUpOwotICAgIHZvaWQgYXBwZW5kVW5i
YXJyaWVyZWQoSlNWYWx1ZSosIHNpemVfdCk7Ci0gICAgdm9pZCBhcHBlbmRVbmJhcnJpZXJlZChK
U0NlbGwqKTsKKy8vICAgIHZvaWQgYXBwZW5kVW5iYXJyaWVyZWQoSlNWYWx1ZSkgZmluYWw7Cisv
LyAgICB2b2lkIGFwcGVuZFVuYmFycmllcmVkKEpTVmFsdWUqLCBzaXplX3QpOworICAgIHZvaWQg
YXBwZW5kVW5iYXJyaWVyZWRJbXBsKEpTQ2VsbCopIGZpbmFsOwogICAgIAotICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFQ+Ci0gICAgdm9pZCBhcHBlbmQoY29uc3QgV2VhazxUPiYgd2Vhayk7CisvLyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorLy8gICAgdm9pZCBhcHBlbmQoY29uc3QgV2VhazxUPiYg
d2Vhayk7CiAgICAgCi0gICAgdm9pZCBhcHBlbmRIaWRkZW5VbmJhcnJpZXJlZChKU1ZhbHVlKTsK
LSAgICB2b2lkIGFwcGVuZEhpZGRlblVuYmFycmllcmVkKEpTQ2VsbCopOworLy8gICAgdm9pZCBh
cHBlbmRIaWRkZW5VbmJhcnJpZXJlZChKU1ZhbHVlKSBmaW5hbDsKKyAgICB2b2lkIGFwcGVuZEhp
ZGRlblVuYmFycmllcmVkSW1wbChKU0NlbGwqKSBmaW5hbDsKIAotICAgIGJvb2wgYWRkT3BhcXVl
Um9vdCh2b2lkKik7IC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgcm9vdCB3YXMgbmV3LgorICAgIGJv
b2wgYWRkT3BhcXVlUm9vdCh2b2lkKikgZmluYWw7IC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgcm9v
dCB3YXMgbmV3LgogICAgIAotICAgIGJvb2wgY29udGFpbnNPcGFxdWVSb290KHZvaWQqKSBjb25z
dDsKKyAgICBib29sIGNvbnRhaW5zT3BhcXVlUm9vdCh2b2lkKikgY29uc3QgZmluYWw7CiAKLSAg
ICBib29sIGlzRW1wdHkoKSB7IHJldHVybiBtX2NvbGxlY3RvclN0YWNrLmlzRW1wdHkoKSAmJiBt
X211dGF0b3JTdGFjay5pc0VtcHR5KCk7IH0KKy8vICAgIGJvb2wgaXNFbXB0eSgpIHsgcmV0dXJu
IG1fY29sbGVjdG9yU3RhY2suaXNFbXB0eSgpICYmIG1fbXV0YXRvclN0YWNrLmlzRW1wdHkoKTsg
fQogCiAgICAgYm9vbCBpc0ZpcnN0VmlzaXQoKSBjb25zdCB7IHJldHVybiBtX2lzRmlyc3RWaXNp
dDsgfQogCisgICAgYm9vbCBpc01hcmtlZChjb25zdCB2b2lkKikgY29uc3QgZmluYWw7CisgICAg
Ym9vbCBpc01hcmtlZChNYXJrZWRCbG9jayYsIEhlYXBDZWxsKikgY29uc3QgZmluYWw7CisgICAg
Ym9vbCBpc01hcmtlZChQcmVjaXNlQWxsb2NhdGlvbiYsIEhlYXBDZWxsKikgY29uc3QgZmluYWw7
CisKICAgICB2b2lkIGRpZFN0YXJ0TWFya2luZygpOwogICAgIHZvaWQgcmVzZXQoKTsKICAgICB2
b2lkIGNsZWFyTWFya1N0YWNrcygpOwogCiAgICAgc2l6ZV90IGJ5dGVzVmlzaXRlZCgpIGNvbnN0
IHsgcmV0dXJuIG1fYnl0ZXNWaXNpdGVkOyB9Ci0gICAgc2l6ZV90IHZpc2l0Q291bnQoKSBjb25z
dCB7IHJldHVybiBtX3Zpc2l0Q291bnQ7IH0KLSAgICAKLSAgICB2b2lkIGFkZFRvVmlzaXRDb3Vu
dChzaXplX3QgdmFsdWUpIHsgbV92aXNpdENvdW50ICs9IHZhbHVlOyB9CisvLyAgICBzaXplX3Qg
dmlzaXRDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fdmlzaXRDb3VudDsgfQorCisvLyAgICB2b2lk
IGFkZFRvVmlzaXRDb3VudChzaXplX3QgdmFsdWUpIHsgbV92aXNpdENvdW50ICs9IHZhbHVlOyB9
CiAKICAgICB2b2lkIGRvbmF0ZSgpOwogICAgIHZvaWQgZHJhaW4oTW9ub3RvbmljVGltZSB0aW1l
b3V0ID0gTW9ub3RvbmljVGltZTo6aW5maW5pdHkoKSk7CkBAIC0xNTEsMjQgKzE4NiwyNCBAQCBw
dWJsaWM6CiAgICAgCiAgICAgLy8gVGhpcyBpbmZvcm1zIHRoZSBHQyBhYm91dCBhdXhpbGlhcnkg
b2Ygc29tZSBzaXplIHRoYXQgd2UgYXJlIGtlZXBpbmcgYWxpdmUuIElmIHlvdSBkb24ndCBkbwog
ICAgIC8vIHRoaXMgdGhlbiB0aGUgc3BhY2Ugd2lsbCBiZSBmcmVlZCBhdCBlbmQgb2YgR0MuCi0g
ICAgdm9pZCBtYXJrQXV4aWxpYXJ5KGNvbnN0IHZvaWQqIGJhc2UpOworICAgIHZvaWQgbWFya0F1
eGlsaWFyeShjb25zdCB2b2lkKiBiYXNlKSBmaW5hbDsKIAotICAgIHZvaWQgcmVwb3J0RXh0cmFN
ZW1vcnlWaXNpdGVkKHNpemVfdCk7CisgICAgdm9pZCByZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQo
c2l6ZV90KSBmaW5hbDsKICNpZiBFTkFCTEUoUkVTT1VSQ0VfVVNBR0UpCi0gICAgdm9pZCByZXBv
cnRFeHRlcm5hbE1lbW9yeVZpc2l0ZWQoc2l6ZV90KTsKKyAgICB2b2lkIHJlcG9ydEV4dGVybmFs
TWVtb3J5VmlzaXRlZChzaXplX3QpIGZpbmFsOwogI2VuZGlmCiAgICAgCi0gICAgdm9pZCBkdW1w
KFByaW50U3RyZWFtJikgY29uc3Q7CisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Qg
ZmluYWw7CiAKLSAgICBib29sIGlzQW5hbHl6aW5nSGVhcCgpIGNvbnN0IHsgcmV0dXJuICEhbV9o
ZWFwQW5hbHl6ZXI7IH0KLSAgICBIZWFwQW5hbHl6ZXIqIGhlYXBBbmFseXplcigpIGNvbnN0IHsg
cmV0dXJuIG1faGVhcEFuYWx5emVyOyB9CisvLyAgICBib29sIGlzQW5hbHl6aW5nSGVhcCgpIGNv
bnN0IHsgcmV0dXJuICEhbV9oZWFwQW5hbHl6ZXI7IH0KKy8vICAgIEhlYXBBbmFseXplciogaGVh
cEFuYWx5emVyKCkgY29uc3QgeyByZXR1cm4gbV9oZWFwQW5hbHl6ZXI7IH0KICAgICAKLSAgICBS
b290TWFya1JlYXNvbiByb290TWFya1JlYXNvbigpIGNvbnN0IHsgcmV0dXJuIG1fcm9vdE1hcmtS
ZWFzb247IH0KLSAgICB2b2lkIHNldFJvb3RNYXJrUmVhc29uKFJvb3RNYXJrUmVhc29uIHJlYXNv
bikgeyBtX3Jvb3RNYXJrUmVhc29uID0gcmVhc29uOyB9CisvLyAgICBSb290TWFya1JlYXNvbiBy
b290TWFya1JlYXNvbigpIGNvbnN0IHsgcmV0dXJuIG1fcm9vdE1hcmtSZWFzb247IH0KKy8vICAg
IHZvaWQgc2V0Um9vdE1hcmtSZWFzb24oUm9vdE1hcmtSZWFzb24gcmVhc29uKSB7IG1fcm9vdE1h
cmtSZWFzb24gPSByZWFzb247IH0KIAogICAgIEhlYXBWZXJzaW9uIG1hcmtpbmdWZXJzaW9uKCkg
Y29uc3QgeyByZXR1cm4gbV9tYXJraW5nVmVyc2lvbjsgfQogCi0gICAgYm9vbCBtdXRhdG9ySXNT
dG9wcGVkKCkgY29uc3QgeyByZXR1cm4gbV9tdXRhdG9ySXNTdG9wcGVkOyB9CisgICAgYm9vbCBt
dXRhdG9ySXNTdG9wcGVkKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9tdXRhdG9ySXNTdG9wcGVk
OyB9CiAgICAgCiAgICAgTG9jayYgcmlnaHRUb1J1bigpIHsgcmV0dXJuIG1fcmlnaHRUb1J1bjsg
fQogICAgIApAQCAtMTgwLDEwICsyMTUsMTAgQEAgcHVibGljOgogICAgIAogICAgIHZvaWQgb3B0
aW1pemVGb3JTdG9wcGVkTXV0YXRvcigpOwogICAgIAotICAgIHZvaWQgZGlkUmFjZShjb25zdCBW
aXNpdFJhY2VLZXkmKTsKKyAgICB2b2lkIGRpZFJhY2UoY29uc3QgVmlzaXRSYWNlS2V5JikgZmlu
YWw7CiAgICAgdm9pZCBkaWRSYWNlKEpTQ2VsbCogY2VsbCwgY29uc3QgY2hhciogcmVhc29uKSB7
IGRpZFJhY2UoVmlzaXRSYWNlS2V5KGNlbGwsIHJlYXNvbikpOyB9CiAgICAgCi0gICAgdm9pZCB2
aXNpdEFzQ29uc3RyYWludChjb25zdCBKU0NlbGwqKTsKKyAgICB2b2lkIHZpc2l0QXNDb25zdHJh
aW50KGNvbnN0IEpTQ2VsbCopIGZpbmFsOwogICAgIAogICAgIGJvb2wgZGlkUmVhY2hUZXJtaW5h
dGlvbigpOwogICAgIApAQCAtMTkxLDkgKzIyNiw5IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgZG9u
YXRlQWxsKCk7CiAgICAgCi0gICAgY29uc3QgY2hhciogY29kZU5hbWUoKSBjb25zdCB7IHJldHVy
biBtX2NvZGVOYW1lLmRhdGEoKTsgfQorLy8gICAgY29uc3QgY2hhciogY29kZU5hbWUoKSBjb25z
dCB7IHJldHVybiBtX2NvZGVOYW1lLmRhdGEoKTsgfQogICAgIAotICAgIEpTX0VYUE9SVF9QUklW
QVRFIHZvaWQgYWRkUGFyYWxsZWxDb25zdHJhaW50VGFzayhSZWZQdHI8U2hhcmVkVGFzazx2b2lk
KFNsb3RWaXNpdG9yJik+Pik7CisgICAgdm9pZCBhZGRQYXJhbGxlbENvbnN0cmFpbnRUYXNrKFJl
ZlB0cjxTaGFyZWRUYXNrPHZvaWQoQWJzdHJhY3RTbG90VmlzaXRvciYpPj4pIGZpbmFsOwogCiBw
cml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBQYXJhbGxlbE1vZGVFbmFibGVyOwpAQCAtMjMyLDM5
ICsyNjcsMzkgQEAgcHJpdmF0ZToKIAogICAgIE1hcmtTdGFja0FycmF5JiBjb3JyZXNwb25kaW5n
R2xvYmFsU3RhY2soTWFya1N0YWNrQXJyYXkmKTsKIAotICAgIE1hcmtTdGFja0FycmF5IG1fY29s
bGVjdG9yU3RhY2s7Ci0gICAgTWFya1N0YWNrQXJyYXkgbV9tdXRhdG9yU3RhY2s7Ci0gICAgCisv
LyAgICBNYXJrU3RhY2tBcnJheSBtX2NvbGxlY3RvclN0YWNrOworLy8gICAgTWFya1N0YWNrQXJy
YXkgbV9tdXRhdG9yU3RhY2s7CisKICAgICBzaXplX3QgbV9ieXRlc1Zpc2l0ZWQ7Ci0gICAgc2l6
ZV90IG1fdmlzaXRDb3VudDsKKy8vICAgIHNpemVfdCBtX3Zpc2l0Q291bnQ7CiAgICAgc2l6ZV90
IG1fbm9uQ2VsbFZpc2l0Q291bnQgeyAwIH07IC8vIFVzZWQgZm9yIGluY3JlbWVudGFsIGRyYWlu
aW5nLCBpZ25vcmVkIG90aGVyd2lzZS4KICAgICBDaGVja2VkU2l6ZSBtX2V4dHJhTWVtb3J5U2l6
ZSB7IDAgfTsKICAgICBib29sIG1faXNJblBhcmFsbGVsTW9kZTsKICAgICBib29sIG1faWdub3Jl
TmV3T3BhcXVlUm9vdHMgeyBmYWxzZSB9OyAvLyBVc2VmdWwgYXMgYSBkZWJ1Z2dpbmcgbW9kZS4K
IAogICAgIEhlYXBWZXJzaW9uIG1fbWFya2luZ1ZlcnNpb247Ci0gICAgCi0gICAgSGVhcCYgbV9o
ZWFwOworCisvLyAgICBIZWFwJiBtX2hlYXA7CiAKICAgICBIZWFwQW5hbHl6ZXIqIG1faGVhcEFu
YWx5emVyIHsgbnVsbHB0ciB9OwogICAgIEpTQ2VsbCogbV9jdXJyZW50Q2VsbCB7IG51bGxwdHIg
fTsKLSAgICBSb290TWFya1JlYXNvbiBtX3Jvb3RNYXJrUmVhc29uIHsgUm9vdE1hcmtSZWFzb246
Ok5vbmUgfTsKKy8vICAgIFJvb3RNYXJrUmVhc29uIG1fcm9vdE1hcmtSZWFzb24geyBSb290TWFy
a1JlYXNvbjo6Tm9uZSB9OwogICAgIGJvb2wgbV9pc0ZpcnN0VmlzaXQgeyBmYWxzZSB9OwogICAg
IGJvb2wgbV9tdXRhdG9ySXNTdG9wcGVkIHsgZmFsc2UgfTsKICAgICBib29sIG1fY2FuT3B0aW1p
emVGb3JTdG9wcGVkTXV0YXRvciB7IGZhbHNlIH07CiAgICAgTG9jayBtX3JpZ2h0VG9SdW47CiAg
ICAgCi0gICAgQ1N0cmluZyBtX2NvZGVOYW1lOworLy8gICAgQ1N0cmluZyBtX2NvZGVOYW1lOwog
ICAgIAotICAgIE1hcmtpbmdDb25zdHJhaW50KiBtX2N1cnJlbnRDb25zdHJhaW50IHsgbnVsbHB0
ciB9OwotICAgIE1hcmtpbmdDb25zdHJhaW50U29sdmVyKiBtX2N1cnJlbnRTb2x2ZXIgeyBudWxs
cHRyIH07CisvLyAgICBNYXJraW5nQ29uc3RyYWludCogbV9jdXJyZW50Q29uc3RyYWludCB7IG51
bGxwdHIgfTsKKy8vICAgIE1hcmtpbmdDb25zdHJhaW50U29sdmVyKiBtX2N1cnJlbnRTb2x2ZXIg
eyBudWxscHRyIH07CiAgICAgCiAgICAgLy8gUHV0IHBhZGRpbmcgaGVyZSB0byBtaXRpZ2F0ZSBm
YWxzZSBzaGFyaW5nIGJldHdlZW4gbXVsdGlwbGUgU2xvdFZpc2l0b3JzLgogICAgIGNoYXIgcGFk
ZGluZ1s2NF07Ci1wdWJsaWM6CisvL3B1YmxpYzoKICNpZiBBU1NFUlRfRU5BQkxFRAotICAgIGJv
b2wgbV9pc0NoZWNraW5nRm9yRGVmYXVsdE1hcmtWaW9sYXRpb247Ci0gICAgYm9vbCBtX2lzRHJh
aW5pbmc7CisgICAgYm9vbCBtX2lzQ2hlY2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlvbiB7IGZh
bHNlIH07CisvLyAgICBib29sIG1faXNEcmFpbmluZzsKICNlbmRpZgogfTsKIApAQCAtMjg3LDIz
ICszMjIsMjMgQEAgcHJpdmF0ZToKICAgICBTbG90VmlzaXRvciYgbV9zdGFjazsKIH07CiAKLWNs
YXNzIFNldFJvb3RNYXJrUmVhc29uU2NvcGUgewotcHVibGljOgotICAgIFNldFJvb3RNYXJrUmVh
c29uU2NvcGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IsIFNsb3RWaXNpdG9yOjpSb290TWFya1JlYXNv
biByZWFzb24pCi0gICAgICAgIDogbV92aXNpdG9yKHZpc2l0b3IpCi0gICAgICAgICwgbV9wcmV2
aW91c1JlYXNvbih2aXNpdG9yLnJvb3RNYXJrUmVhc29uKCkpCi0gICAgewotICAgICAgICBtX3Zp
c2l0b3Iuc2V0Um9vdE1hcmtSZWFzb24ocmVhc29uKTsKLSAgICB9Ci0KLSAgICB+U2V0Um9vdE1h
cmtSZWFzb25TY29wZSgpCi0gICAgewotICAgICAgICBtX3Zpc2l0b3Iuc2V0Um9vdE1hcmtSZWFz
b24obV9wcmV2aW91c1JlYXNvbik7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIFNsb3RWaXNpdG9y
JiBtX3Zpc2l0b3I7Ci0gICAgU2xvdFZpc2l0b3I6OlJvb3RNYXJrUmVhc29uIG1fcHJldmlvdXNS
ZWFzb247Ci19OwotCisvL2NsYXNzIFNldFJvb3RNYXJrUmVhc29uU2NvcGUgeworLy9wdWJsaWM6
CisvLyAgICBTZXRSb290TWFya1JlYXNvblNjb3BlKFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBTbG90
VmlzaXRvcjo6Um9vdE1hcmtSZWFzb24gcmVhc29uKQorLy8gICAgICAgIDogbV92aXNpdG9yKHZp
c2l0b3IpCisvLyAgICAgICAgLCBtX3ByZXZpb3VzUmVhc29uKHZpc2l0b3Iucm9vdE1hcmtSZWFz
b24oKSkKKy8vICAgIHsKKy8vICAgICAgICBtX3Zpc2l0b3Iuc2V0Um9vdE1hcmtSZWFzb24ocmVh
c29uKTsKKy8vICAgIH0KKy8vCisvLyAgICB+U2V0Um9vdE1hcmtSZWFzb25TY29wZSgpCisvLyAg
ICB7CisvLyAgICAgICAgbV92aXNpdG9yLnNldFJvb3RNYXJrUmVhc29uKG1fcHJldmlvdXNSZWFz
b24pOworLy8gICAgfQorLy8KKy8vcHJpdmF0ZToKKy8vICAgIFNsb3RWaXNpdG9yJiBtX3Zpc2l0
b3I7CisvLyAgICBTbG90VmlzaXRvcjo6Um9vdE1hcmtSZWFzb24gbV9wcmV2aW91c1JlYXNvbjsK
Ky8vfTsKKy8vCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL1Nsb3RWaXNpdG9ySW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9ySW5saW5lcy5oCShyZXZpc2lvbiAyNzI3MTApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvcklubGluZXMuaAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxOSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTI1LDI2ICsyNSwyOSBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgIkFi
c3RyYWN0U2xvdFZpc2l0b3JJbmxpbmVzLmgiCiAjaW5jbHVkZSAiU2xvdFZpc2l0b3IuaCIKLSNp
bmNsdWRlICJXZWFrLmgiCi0jaW5jbHVkZSAiV2Vha0lubGluZXMuaCIKKyNpbmNsdWRlICJNYXJr
ZWRCbG9jay5oIgorI2luY2x1ZGUgIlByZWNpc2VBbGxvY2F0aW9uLmgiCisvLyNpbmNsdWRlICJX
ZWFrLmgiCisvLyNpbmNsdWRlICJXZWFrSW5saW5lcy5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIAot
QUxXQVlTX0lOTElORSB2b2lkIFNsb3RWaXNpdG9yOjphcHBlbmRVbmJhcnJpZXJlZChKU1ZhbHVl
KiBzbG90LCBzaXplX3QgY291bnQpCi17Ci0gICAgZm9yIChzaXplX3QgaSA9IGNvdW50OyBpLS07
KQotICAgICAgICBhcHBlbmRVbmJhcnJpZXJlZChzbG90W2ldKTsKLX0KKy8vQUxXQVlTX0lOTElO
RSB2b2lkIFNsb3RWaXNpdG9yOjphcHBlbmRVbmJhcnJpZXJlZChKU1ZhbHVlKiBzbG90LCBzaXpl
X3QgY291bnQpCisvL3sKKy8vICAgIGZvciAoc2l6ZV90IGkgPSBjb3VudDsgaS0tOykKKy8vICAg
ICAgICBhcHBlbmRVbmJhcnJpZXJlZChzbG90W2ldKTsKKy8vfQogCi1BTFdBWVNfSU5MSU5FIHZv
aWQgU2xvdFZpc2l0b3I6OmFwcGVuZFVuYmFycmllcmVkKEpTQ2VsbCogY2VsbCkKK0FMV0FZU19J
TkxJTkUgdm9pZCBTbG90VmlzaXRvcjo6YXBwZW5kVW5iYXJyaWVyZWRJbXBsKEpTQ2VsbCogY2Vs
bCkKIHsKICAgICAvLyBUaGlzIG5lZWRzIHRvIGJlIHdyaXR0ZW4gaW4gYSB2ZXJ5IHNwZWNpZmlj
IHdheSB0byBlbnN1cmUgdGhhdCBpdCBnZXRzIGlubGluZWQKICAgICAvLyBwcm9wZXJseS4gSW4g
cGFydGljdWxhciwgaXQgYXBwZWFycyB0aGF0IHVzaW5nIHRlbXBsYXRlcyBoZXJlIGJyZWFrcyBB
TFdBWVNfSU5MSU5FLgogICAgIAotICAgIGlmICghY2VsbCkKLSAgICAgICAgcmV0dXJuOwotICAg
IAorLy8gICAgaWYgKCFjZWxsKQorLy8gICAgICAgIHJldHVybjsKKy8vCiAgICAgRGVwZW5kZW5j
eSBkZXBlbmRlbmN5OwogICAgIGlmIChVTkxJS0VMWShjZWxsLT5pc1ByZWNpc2VBbGxvY2F0aW9u
KCkpKSB7CiAgICAgICAgIGlmIChMSUtFTFkoY2VsbC0+cHJlY2lzZUFsbG9jYXRpb24oKS5pc01h
cmtlZCgpKSkgewpAQCAtNjMsMjUgKzY2LDI1IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBTbG90Vmlz
aXRvcjo6YXBwZW5kVW4KICAgICBhcHBlbmRTbG93KGNlbGwsIGRlcGVuZGVuY3kpOwogfQogCi1B
TFdBWVNfSU5MSU5FIHZvaWQgU2xvdFZpc2l0b3I6OmFwcGVuZFVuYmFycmllcmVkKEpTVmFsdWUg
dmFsdWUpCi17Ci0gICAgaWYgKHZhbHVlLmlzQ2VsbCgpKQotICAgICAgICBhcHBlbmRVbmJhcnJp
ZXJlZCh2YWx1ZS5hc0NlbGwoKSk7Ci19CisvL0FMV0FZU19JTkxJTkUgdm9pZCBTbG90VmlzaXRv
cjo6YXBwZW5kVW5iYXJyaWVyZWQoSlNWYWx1ZSB2YWx1ZSkKKy8veworLy8gICAgaWYgKHZhbHVl
LmlzQ2VsbCgpKQorLy8gICAgICAgIGFwcGVuZFVuYmFycmllcmVkKHZhbHVlLmFzQ2VsbCgpKTsK
Ky8vfQorCisvL0FMV0FZU19JTkxJTkUgdm9pZCBTbG90VmlzaXRvcjo6YXBwZW5kSGlkZGVuVW5i
YXJyaWVyZWQoSlNWYWx1ZSB2YWx1ZSkKKy8veworLy8gICAgaWYgKHZhbHVlLmlzQ2VsbCgpKQor
Ly8gICAgICAgIGFwcGVuZEhpZGRlblVuYmFycmllcmVkKHZhbHVlLmFzQ2VsbCgpKTsKKy8vfQog
Ci1BTFdBWVNfSU5MSU5FIHZvaWQgU2xvdFZpc2l0b3I6OmFwcGVuZEhpZGRlblVuYmFycmllcmVk
KEpTVmFsdWUgdmFsdWUpCi17Ci0gICAgaWYgKHZhbHVlLmlzQ2VsbCgpKQotICAgICAgICBhcHBl
bmRIaWRkZW5VbmJhcnJpZXJlZCh2YWx1ZS5hc0NlbGwoKSk7Ci19Ci0KLUFMV0FZU19JTkxJTkUg
dm9pZCBTbG90VmlzaXRvcjo6YXBwZW5kSGlkZGVuVW5iYXJyaWVyZWQoSlNDZWxsKiBjZWxsKQor
QUxXQVlTX0lOTElORSB2b2lkIFNsb3RWaXNpdG9yOjphcHBlbmRIaWRkZW5VbmJhcnJpZXJlZElt
cGwoSlNDZWxsKiBjZWxsKQogewogICAgIC8vIFRoaXMgbmVlZHMgdG8gYmUgd3JpdHRlbiBpbiBh
IHZlcnkgc3BlY2lmaWMgd2F5IHRvIGVuc3VyZSB0aGF0IGl0IGdldHMgaW5saW5lZAogICAgIC8v
IHByb3Blcmx5LiBJbiBwYXJ0aWN1bGFyLCBpdCBhcHBlYXJzIHRoYXQgdXNpbmcgdGVtcGxhdGVz
IGhlcmUgYnJlYWtzIEFMV0FZU19JTkxJTkUuCiAgICAgCi0gICAgaWYgKCFjZWxsKQotICAgICAg
ICByZXR1cm47CisvLyAgICBpZiAoIWNlbGwpCisvLyAgICAgICAgcmV0dXJuOwogICAgIAogICAg
IERlcGVuZGVuY3kgZGVwZW5kZW5jeTsKICAgICBpZiAoVU5MSUtFTFkoY2VsbC0+aXNQcmVjaXNl
QWxsb2NhdGlvbigpKSkgewpAQCAtOTcsNDIgKzEwMCw0MiBAQCBBTFdBWVNfSU5MSU5FIHZvaWQg
U2xvdFZpc2l0b3I6OmFwcGVuZEhpCiAgICAgYXBwZW5kSGlkZGVuU2xvdyhjZWxsLCBkZXBlbmRl
bmN5KTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLUFMV0FZU19JTkxJTkUgdm9pZCBTbG90
VmlzaXRvcjo6YXBwZW5kKGNvbnN0IFdlYWs8VD4mIHdlYWspCi17Ci0gICAgYXBwZW5kVW5iYXJy
aWVyZWQod2Vhay5nZXQoKSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFRy
YWl0cz4KLUFMV0FZU19JTkxJTkUgdm9pZCBTbG90VmlzaXRvcjo6YXBwZW5kKGNvbnN0IFdyaXRl
QmFycmllckJhc2U8VCwgVHJhaXRzPiYgc2xvdCkKLXsKLSAgICBhcHBlbmRVbmJhcnJpZXJlZChz
bG90LmdldCgpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVHJhaXRzPgot
QUxXQVlTX0lOTElORSB2b2lkIFNsb3RWaXNpdG9yOjphcHBlbmRIaWRkZW4oY29uc3QgV3JpdGVC
YXJyaWVyQmFzZTxULCBUcmFpdHM+JiBzbG90KQotewotICAgIGFwcGVuZEhpZGRlblVuYmFycmll
cmVkKHNsb3QuZ2V0KCkpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBJdGVyYXRvcj4KLUFMV0FZ
U19JTkxJTkUgdm9pZCBTbG90VmlzaXRvcjo6YXBwZW5kKEl0ZXJhdG9yIGJlZ2luLCBJdGVyYXRv
ciBlbmQpCi17Ci0gICAgZm9yIChhdXRvIGl0ID0gYmVnaW47IGl0ICE9IGVuZDsgKytpdCkKLSAg
ICAgICAgYXBwZW5kKCppdCk7Ci19Ci0KLUFMV0FZU19JTkxJTkUgdm9pZCBTbG90VmlzaXRvcjo6
YXBwZW5kVmFsdWVzKGNvbnN0IFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4qIGJhcnJpZXJzLCBz
aXplX3QgY291bnQpCi17Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKQot
ICAgICAgICBhcHBlbmQoYmFycmllcnNbaV0pOwotfQotCi1BTFdBWVNfSU5MSU5FIHZvaWQgU2xv
dFZpc2l0b3I6OmFwcGVuZFZhbHVlc0hpZGRlbihjb25zdCBXcml0ZUJhcnJpZXJCYXNlPFVua25v
d24+KiBiYXJyaWVycywgc2l6ZV90IGNvdW50KQotewotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgY291bnQ7ICsraSkKLSAgICAgICAgYXBwZW5kSGlkZGVuKGJhcnJpZXJzW2ldKTsKLX0KKy8v
dGVtcGxhdGU8dHlwZW5hbWUgVD4KKy8vQUxXQVlTX0lOTElORSB2b2lkIFNsb3RWaXNpdG9yOjph
cHBlbmQoY29uc3QgV2VhazxUPiYgd2VhaykKKy8veworLy8gICAgYXBwZW5kVW5iYXJyaWVyZWQo
d2Vhay5nZXQoKSk7CisvL30KKy8vCisvL3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFRy
YWl0cz4KKy8vQUxXQVlTX0lOTElORSB2b2lkIFNsb3RWaXNpdG9yOjphcHBlbmQoY29uc3QgV3Jp
dGVCYXJyaWVyQmFzZTxULCBUcmFpdHM+JiBzbG90KQorLy97CisvLyAgICBhcHBlbmRVbmJhcnJp
ZXJlZChzbG90LmdldCgpKTsKKy8vfQorLy8KKy8vdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5h
bWUgVHJhaXRzPgorLy9BTFdBWVNfSU5MSU5FIHZvaWQgU2xvdFZpc2l0b3I6OmFwcGVuZEhpZGRl
bihjb25zdCBXcml0ZUJhcnJpZXJCYXNlPFQsIFRyYWl0cz4mIHNsb3QpCisvL3sKKy8vICAgIGFw
cGVuZEhpZGRlblVuYmFycmllcmVkKHNsb3QuZ2V0KCkpOworLy99CisvLworLy90ZW1wbGF0ZTx0
eXBlbmFtZSBJdGVyYXRvcj4KKy8vQUxXQVlTX0lOTElORSB2b2lkIFNsb3RWaXNpdG9yOjphcHBl
bmQoSXRlcmF0b3IgYmVnaW4sIEl0ZXJhdG9yIGVuZCkKKy8veworLy8gICAgZm9yIChhdXRvIGl0
ID0gYmVnaW47IGl0ICE9IGVuZDsgKytpdCkKKy8vICAgICAgICBhcHBlbmQoKml0KTsKKy8vfQor
CisvL0FMV0FZU19JTkxJTkUgdm9pZCBTbG90VmlzaXRvcjo6YXBwZW5kVmFsdWVzKGNvbnN0IFdy
aXRlQmFycmllckJhc2U8VW5rbm93bj4qIGJhcnJpZXJzLCBzaXplX3QgY291bnQpCisvL3sKKy8v
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY291bnQ7ICsraSkKKy8vICAgICAgICBhcHBlbmQo
YmFycmllcnNbaV0pOworLy99CisvLworLy9BTFdBWVNfSU5MSU5FIHZvaWQgU2xvdFZpc2l0b3I6
OmFwcGVuZFZhbHVlc0hpZGRlbihjb25zdCBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+KiBiYXJy
aWVycywgc2l6ZV90IGNvdW50KQorLy97CisvLyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNv
dW50OyArK2kpCisvLyAgICAgICAgYXBwZW5kSGlkZGVuKGJhcnJpZXJzW2ldKTsKKy8vfQogCiBp
bmxpbmUgYm9vbCBTbG90VmlzaXRvcjo6YWRkT3BhcXVlUm9vdCh2b2lkKiBwdHIpCiB7CkBAIC0x
NTEsNiArMTU0LDIxIEBAIGlubGluZSBib29sIFNsb3RWaXNpdG9yOjpjb250YWluc09wYXF1ZVIK
ICAgICByZXR1cm4gaGVhcCgpLT5tX29wYXF1ZVJvb3RzLmNvbnRhaW5zKHB0cik7CiB9CiAKK2lu
bGluZSBib29sIFNsb3RWaXNpdG9yOjppc01hcmtlZChjb25zdCB2b2lkKiBwKSBjb25zdAorewor
ICAgIHJldHVybiBoZWFwKCktPmlzTWFya2VkKHApOworfQorCitpbmxpbmUgYm9vbCBTbG90Vmlz
aXRvcjo6aXNNYXJrZWQoTWFya2VkQmxvY2smIGNvbnRhaW5lciwgSGVhcENlbGwqIGNlbGwpIGNv
bnN0Cit7CisgICAgcmV0dXJuIGNvbnRhaW5lci5pc01hcmtlZChtYXJraW5nVmVyc2lvbigpLCBj
ZWxsKTsKK30KKworaW5saW5lIGJvb2wgU2xvdFZpc2l0b3I6OmlzTWFya2VkKFByZWNpc2VBbGxv
Y2F0aW9uJiBjb250YWluZXIsIEhlYXBDZWxsKiBjZWxsKSBjb25zdAoreworICAgIHJldHVybiBj
b250YWluZXIuaXNNYXJrZWQobWFya2luZ1ZlcnNpb24oKSwgY2VsbCk7Cit9CisKIGlubGluZSB2
b2lkIFNsb3RWaXNpdG9yOjpyZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQoc2l6ZV90IHNpemUpCiB7
CiAgICAgaWYgKG1faXNGaXJzdFZpc2l0KSB7CkBAIC0xNjksMjAgKzE4NywyMCBAQCBpbmxpbmUg
dm9pZCBTbG90VmlzaXRvcjo6cmVwb3J0RXh0ZXJuYWxNCiB9CiAjZW5kaWYKIAotaW5saW5lIEhl
YXAqIFNsb3RWaXNpdG9yOjpoZWFwKCkgY29uc3QKLXsKLSAgICByZXR1cm4gJm1faGVhcDsKLX0K
LQotaW5saW5lIFZNJiBTbG90VmlzaXRvcjo6dm0oKQotewotICAgIHJldHVybiBtX2hlYXAudm0o
KTsKLX0KLQotaW5saW5lIGNvbnN0IFZNJiBTbG90VmlzaXRvcjo6dm0oKSBjb25zdAotewotICAg
IHJldHVybiBtX2hlYXAudm0oKTsKLX0KKy8vaW5saW5lIEhlYXAqIFNsb3RWaXNpdG9yOjpoZWFw
KCkgY29uc3QKKy8veworLy8gICAgcmV0dXJuICZtX2hlYXA7CisvL30KKy8vCisvL2lubGluZSBW
TSYgU2xvdFZpc2l0b3I6OnZtKCkKKy8veworLy8gICAgcmV0dXJuIG1faGVhcC52bSgpOworLy99
CisvLworLy9pbmxpbmUgY29uc3QgVk0mIFNsb3RWaXNpdG9yOjp2bSgpIGNvbnN0CisvL3sKKy8v
ICAgIHJldHVybiBtX2hlYXAudm0oKTsKKy8vfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgog
SXRlcmF0aW9uU3RhdHVzIFNsb3RWaXNpdG9yOjpmb3JFYWNoTWFya1N0YWNrKGNvbnN0IEZ1bmMm
IGZ1bmMpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvck1hY3Jv
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9y
TWFjcm9zLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xv
dFZpc2l0b3JNYWNyb3MuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEzMyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCitu
YW1lc3BhY2UgSlNDIHsKKworY2xhc3MgQWJzdHJhY3RTbG90VmlzaXRvcjsKK2NsYXNzIEpTQ2Vs
bDsKK2NsYXNzIFNsb3RWaXNpdG9yOworCisjZGVmaW5lIERFQ0xBUkVfVU5VU0VEX1NMT1RfVklT
SVRPUl9TVFJVQ1RfRVhQQU5ERVIyKGNvdW50ZXJfKSBcCisgICAgc3RydWN0IFVudXNlZFNsb3RW
aXNpdG9yU3RydWN0U29XZUNhbkhhdmVBU2VtaWNvbG9uIyNjb3VudGVyXyB7IH0KKworI2RlZmlu
ZSBERUNMQVJFX1VOVVNFRF9TTE9UX1ZJU0lUT1JfU1RSVUNUX0VYUEFOREVSKGNvdW50ZXJfKSBc
CisgICAgREVDTEFSRV9VTlVTRURfU0xPVF9WSVNJVE9SX1NUUlVDVF9FWFBBTkRFUjIoY291bnRl
cl8pCisKKyNkZWZpbmUgREVDTEFSRV9VTlVTRURfU0xPVF9WSVNJVE9SX1NUUlVDVCgpIFwKKyAg
ICBERUNMQVJFX1VOVVNFRF9TTE9UX1ZJU0lUT1JfU1RSVUNUX0VYUEFOREVSKF9fQ09VTlRFUl9f
KQorCisvLyBNYWNyb3MgZm9yIGluc3RhbmNlIGN1c3RvbSB2aXNpdG9yIG1ldGhvZC4KKworI2Rl
ZmluZSBERUNMQVJFX0lOU1RBTkNFX1NMT1RfVklTSVRPUl9NRVRIT0RfSU1QTChyZXR1cm5UeXBl
XywgbWV0aG9kTmFtZV8sIHBvc3RNb2RpZmllcl8pIFwKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPiByZXR1cm5UeXBlXyBtZXRob2ROYW1lXyMjSW1wbChWaXNpdG9yJiB2aXNpdG9yKTsg
XAorICAgIHJldHVyblR5cGVfIG1ldGhvZE5hbWVfKFNsb3RWaXNpdG9yJikgcG9zdE1vZGlmaWVy
XzsgXAorICAgIHJldHVyblR5cGVfIG1ldGhvZE5hbWVfKEFic3RyYWN0U2xvdFZpc2l0b3ImKSBw
b3N0TW9kaWZpZXJfOyBcCisgICAgREVDTEFSRV9VTlVTRURfU0xPVF9WSVNJVE9SX1NUUlVDVCgp
CisKKyNkZWZpbmUgREVDTEFSRV9JTlNUQU5DRV9TTE9UX1ZJU0lUT1JfTUVUSE9EKHJldHVyblR5
cGVfLCBtZXRob2ROYW1lXykgXAorICAgIERFQ0xBUkVfSU5TVEFOQ0VfU0xPVF9WSVNJVE9SX01F
VEhPRF9JTVBMKHJldHVyblR5cGVfLCBtZXRob2ROYW1lXywgKQorCisKKyNkZWZpbmUgREVGSU5F
X0lOU1RBTkNFX1NMT1RfVklTSVRPUl9NRVRIT0QocmV0dXJuVHlwZV8sIGNsYXNzTmFtZV8sIG1l
dGhvZE5hbWVfKSBcCisgICAgcmV0dXJuVHlwZV8gY2xhc3NOYW1lXzo6bWV0aG9kTmFtZV8oU2xv
dFZpc2l0b3ImIHZpc2l0b3IpIHsgbWV0aG9kTmFtZV8jI0ltcGwodmlzaXRvcik7IH0gXAorICAg
IHJldHVyblR5cGVfIGNsYXNzTmFtZV86Om1ldGhvZE5hbWVfKEFic3RyYWN0U2xvdFZpc2l0b3Im
IHZpc2l0b3IpICB7IG1ldGhvZE5hbWVfIyNJbXBsKHZpc2l0b3IpOyB9IFwKKyAgICBERUNMQVJF
X1VOVVNFRF9TTE9UX1ZJU0lUT1JfU1RSVUNUKCkKKworLy8gTWFjcm9zIGZvciBpbnN0YW5jZSB2
aXNpdENoaWxkcmVuKCkuCisKKyNkZWZpbmUgREVDTEFSRV9JTlNUQU5DRV9WSVNJVF9DSElMRFJF
TiBcCisgICAgREVDTEFSRV9JTlNUQU5DRV9TTE9UX1ZJU0lUT1JfTUVUSE9EKHZvaWQsIHZpc2l0
Q2hpbGRyZW4pCisKKworI2RlZmluZSBERUZJTkVfSU5TVEFOQ0VfVklTSVRfQ0hJTERSRU4oY2xh
c3NOYW1lXykgXAorICAgIERFRklORV9JTlNUQU5DRV9TTE9UX1ZJU0lUT1JfTUVUSE9EKHZvaWQs
IGNsYXNzTmFtZV8sIHZpc2l0Q2hpbGRyZW4pCisKKy8vIE1hY3JvcyBmb3Igc3RhdGljIHZpc2l0
Q2hpbGRyZW4oKS4KKworI2RlZmluZSBERUNMQVJFX1ZJU0lUX0NISUxEUkVOX0lNUEwgXAorICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW5JbXBs
KEpTQ2VsbCosIFZpc2l0b3ImKQorCisjZGVmaW5lIERFQ0xBUkVfVklTSVRfQ0hJTERSRU4gXAor
ICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU5fSU1QTDsgXAorICAgIHN0YXRpYyB2b2lkIHZpc2l0
Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKTsgXAor
ICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYg
dmlzaXRvcikKKworI2RlZmluZSBERUNMQVJFX0VYUE9SVF9WSVNJVF9DSElMRFJFTiBcCisgICAg
REVDTEFSRV9WSVNJVF9DSElMRFJFTl9JTVBMOyBcCisgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3Rh
dGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBBYnN0cmFjdFNsb3RWaXNpdG9yJik7IFwK
KyAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCos
IFNsb3RWaXNpdG9yJikKKworI2RlZmluZSBERUNMQVJFX0lOTElORV9WSVNJVF9DSElMRFJFTiBc
CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTl9JTVBMOyBcCisgICAgaW5saW5lIHN0YXRpYyB2
b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgQWJzdHJhY3RTbG90VmlzaXRvciYpOyBcCisgICAg
aW5saW5lIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKQor
CisjZGVmaW5lIERFQ0xBUkVfVEVNUExBVEVfVklTSVRfQ0hJTERSRU4gXAorICAgIERFQ0xBUkVf
VklTSVRfQ0hJTERSRU4KKworCisjZGVmaW5lIERFRklORV9WSVNJVF9DSElMRFJFTihjbGFzc05h
bWVfKSBcCisgICAgdm9pZCBjbGFzc05hbWVfOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwg
QWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikgXAorICAgIHsgXAorICAgICAgICBBYnN0cmFj
dFNsb3RWaXNpdG9yOjpDb250ZXh0IGNvbnRleHQodmlzaXRvciwgY2VsbCk7IFwKKyAgICAgICAg
dmlzaXRDaGlsZHJlbkltcGwoY2VsbCwgdmlzaXRvcik7IFwKKyAgICB9IFwKKyAgICB2b2lkIGNs
YXNzTmFtZV86OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRv
cikgeyB2aXNpdENoaWxkcmVuSW1wbChjZWxsLCB2aXNpdG9yKTsgfSBcCisgICAgREVDTEFSRV9V
TlVTRURfU0xPVF9WSVNJVE9SX1NUUlVDVCgpCisKKyNkZWZpbmUgREVGSU5FX0VYUE9SVF9WSVNJ
VF9DSElMRFJFTihjbGFzc05hbWVfKSBcCisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBjbGFz
c05hbWVfOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgQWJzdHJhY3RTbG90VmlzaXRvciYg
dmlzaXRvcikgXAorICAgIHsgXAorICAgICAgICBBYnN0cmFjdFNsb3RWaXNpdG9yOjpDb250ZXh0
IGNvbnRleHQodmlzaXRvciwgY2VsbCk7IFwKKyAgICAgICAgdmlzaXRDaGlsZHJlbkltcGwoY2Vs
bCwgdmlzaXRvcik7IFwKKyAgICB9IFwKKyAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGNsYXNz
TmFtZV86OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikg
eyB2aXNpdENoaWxkcmVuSW1wbChjZWxsLCB2aXNpdG9yKTsgfSBcCisgICAgREVDTEFSRV9VTlVT
RURfU0xPVF9WSVNJVE9SX1NUUlVDVCgpCisKKyNkZWZpbmUgREVGSU5FX0lOTElORV9WSVNJVF9D
SElMRFJFTihjbGFzc05hbWVfKSBcCisgICAgaW5saW5lIHZvaWQgY2xhc3NOYW1lXzo6dmlzaXRD
aGlsZHJlbihKU0NlbGwqIGNlbGwsIEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpIFwKKyAg
ICB7IFwKKyAgICAgICAgQWJzdHJhY3RTbG90VmlzaXRvcjo6Q29udGV4dCBjb250ZXh0KHZpc2l0
b3IsIGNlbGwpOyBcCisgICAgICAgIHZpc2l0Q2hpbGRyZW5JbXBsKGNlbGwsIHZpc2l0b3IpOyBc
CisgICAgfSBcCisgICAgaW5saW5lIHZvaWQgY2xhc3NOYW1lXzo6dmlzaXRDaGlsZHJlbihKU0Nl
bGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKSB7IHZpc2l0Q2hpbGRyZW5JbXBsKGNlbGws
IHZpc2l0b3IpOyB9IFwKKyAgICBERUNMQVJFX1VOVVNFRF9TTE9UX1ZJU0lUT1JfU1RSVUNUKCkK
KworI2RlZmluZSBERUZJTkVfVEVNUExBVEVfVklTSVRfQ0hJTERSRU4odGVtcGxhdGVDbGF1c2Vf
LCBjbGFzc05hbWVfKSBcCisgICAgdGVtcGxhdGVDbGF1c2VfIHZvaWQgY2xhc3NOYW1lXzo6dmlz
aXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpIFwK
KyAgICB7IFwKKyAgICAgICAgQWJzdHJhY3RTbG90VmlzaXRvcjo6Q29udGV4dCBjb250ZXh0KHZp
c2l0b3IsIGNlbGwpOyBcCisgICAgICAgIHZpc2l0Q2hpbGRyZW5JbXBsKGNlbGwsIHZpc2l0b3Ip
OyBcCisgICAgfSBcCisgICAgdGVtcGxhdGVDbGF1c2VfIHZvaWQgY2xhc3NOYW1lXzo6dmlzaXRD
aGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKSB7IHZpc2l0Q2hpbGRy
ZW5JbXBsKGNlbGwsIHZpc2l0b3IpOyB9IFwKKyAgICBERUNMQVJFX1VOVVNFRF9TTE9UX1ZJU0lU
T1JfU1RSVUNUKCkKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKK3VzaW5nIEpTQzo6QWJzdHJhY3RT
bG90VmlzaXRvcjsKK3VzaW5nIEpTQzo6SlNDZWxsOwordXNpbmcgSlNDOjpTbG90VmlzaXRvcjsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N1YnNwYWNlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3Vic3BhY2UuaAkocmV2aXNpb24gMjcyNzEw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3Vic3BhY2UuaAkod29ya2luZyBjb3B5
KQpAQCAtMzQsNiArMzQsNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAorY2xhc3MgQWJzdHJhY3RT
bG90VmlzaXRvcjsgLy8gbWxhbQogY2xhc3MgQWxpZ25lZE1lbW9yeUFsbG9jYXRvcjsKIGNsYXNz
IEhlYXBDZWxsVHlwZTsKIApAQCAtODcsNyArODgsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBmb3JF
YWNoTWFya2VkQ2VsbChjb25zdCBGdW5jJik7CiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
RnVuYz4KLSAgICBSZWY8U2hhcmVkVGFzazx2b2lkKFNsb3RWaXNpdG9yJik+PiBmb3JFYWNoTWFy
a2VkQ2VsbEluUGFyYWxsZWwoY29uc3QgRnVuYyYpOworICAgIFJlZjxTaGFyZWRUYXNrPHZvaWQo
QWJzdHJhY3RTbG90VmlzaXRvciYpPj4gZm9yRWFjaE1hcmtlZENlbGxJblBhcmFsbGVsKGNvbnN0
IEZ1bmMmKTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CiAgICAgdm9pZCBmb3JFYWNo
TGl2ZUNlbGwoY29uc3QgRnVuYyYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
U3Vic3BhY2VJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvU3Vic3BhY2VJbmxpbmVzLmgJKHJldmlzaW9uIDI3MjcxMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL1N1YnNwYWNlSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC04Niw5ICs4
Niw5IEBAIHZvaWQgU3Vic3BhY2U6OmZvckVhY2hNYXJrZWRDZWxsKGNvbnN0IEYKIH0KIAogdGVt
cGxhdGU8dHlwZW5hbWUgRnVuYz4KLVJlZjxTaGFyZWRUYXNrPHZvaWQoU2xvdFZpc2l0b3ImKT4+
IFN1YnNwYWNlOjpmb3JFYWNoTWFya2VkQ2VsbEluUGFyYWxsZWwoY29uc3QgRnVuYyYgZnVuYykK
K1JlZjxTaGFyZWRUYXNrPHZvaWQoQWJzdHJhY3RTbG90VmlzaXRvciYpPj4gU3Vic3BhY2U6OmZv
ckVhY2hNYXJrZWRDZWxsSW5QYXJhbGxlbChjb25zdCBGdW5jJiBmdW5jKQogewotICAgIGNsYXNz
IFRhc2sgZmluYWwgOiBwdWJsaWMgU2hhcmVkVGFzazx2b2lkKFNsb3RWaXNpdG9yJik+IHsKKyAg
ICBjbGFzcyBUYXNrIGZpbmFsIDogcHVibGljIFNoYXJlZFRhc2s8dm9pZChBYnN0cmFjdFNsb3RW
aXNpdG9yJik+IHsKICAgICBwdWJsaWM6CiAgICAgICAgIFRhc2soU3Vic3BhY2UmIHN1YnNwYWNl
LCBjb25zdCBGdW5jJiBmdW5jKQogICAgICAgICAgICAgOiBtX3N1YnNwYWNlKHN1YnNwYWNlKQpA
QCAtOTcsNyArOTcsNyBAQCBSZWY8U2hhcmVkVGFzazx2b2lkKFNsb3RWaXNpdG9yJik+PiBTdWJz
CiAgICAgICAgIHsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgdm9pZCBydW4oU2xvdFZp
c2l0b3ImIHZpc2l0b3IpIGZpbmFsCisgICAgICAgIHZvaWQgcnVuKEFic3RyYWN0U2xvdFZpc2l0
b3ImIHZpc2l0b3IpIGZpbmFsCiAgICAgICAgIHsKICAgICAgICAgICAgIHdoaWxlIChNYXJrZWRC
bG9jazo6SGFuZGxlKiBoYW5kbGUgPSBtX2Jsb2NrU291cmNlLT5ydW4oKSkgewogICAgICAgICAg
ICAgICAgIGhhbmRsZS0+Zm9yRWFjaE1hcmtlZENlbGwoCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9WZXJpZmllclNsb3RWaXNpdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9WZXJpZmllclNsb3RWaXNpdG9yLmNwcAkobm9uZXhpc3RlbnQp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9WZXJpZmllclNsb3RWaXNpdG9yLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJWZXJpZmllclNsb3RWaXNpdG9yLmgiCisKKyNpbmNsdWRlICJD
b25zZXJ2YXRpdmVSb290cy5oIgorI2luY2x1ZGUgIkdDU2VnbWVudGVkQXJyYXlJbmxpbmVzLmgi
CisjaW5jbHVkZSAiSGVhcENlbGwuaCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVk
ZSAiVk0uaCIKKyNpbmNsdWRlIDx3dGYvU3RhY2tUcmFjZS5oPgorCituYW1lc3BhY2UgSlNDIHsK
KwordXNpbmcgTWFya2VyRGF0YSA9IFZlcmlmaWVyU2xvdFZpc2l0b3I6Ok1hcmtlckRhdGE7CisK
K2NvbnN0ZXhwciBpbnQgbWF4TWFya2luZ1N0YWNrRnJhbWVzVG9DYXB0dXJlID0gMTAwOworCitN
YXJrZXJEYXRhOjpNYXJrZXJEYXRhKEhlYXBDZWxsKiBwYXJlbnQsIHN0ZDo6dW5pcXVlX3B0cjxT
dGFja1RyYWNlPiYmIHN0YWNrKQorICAgIDogcGFyZW50KHBhcmVudCkKKyAgICAsIHN0YWNrKFdU
Rk1vdmUoc3RhY2spKQoreworfQorCitWZXJpZmllclNsb3RWaXNpdG9yOjpNYXJrZWRCbG9ja0Rh
dGE6Ok1hcmtlZEJsb2NrRGF0YShNYXJrZWRCbG9jayogYmxvY2spCisgICAgOiBtX2Jsb2NrKGJs
b2NrKQorICAgICwgbV9hdG9tcyhNYXJrZWRCbG9jazo6YXRvbXNQZXJCbG9jaykKK3sKK30KKwor
dm9pZCBWZXJpZmllclNsb3RWaXNpdG9yOjpNYXJrZWRCbG9ja0RhdGE6OmFkZE1hcmtlckRhdGEo
dW5zaWduZWQgYXRvbU51bWJlciwgTWFya2VyRGF0YSYmIG1hcmtlcikKK3sKKyAgICBpZiAobV9t
YXJrZXJzLmlzRW1wdHkoKSkKKyAgICAgICAgbV9tYXJrZXJzLmdyb3coTWFya2VkQmxvY2s6OmF0
b21zUGVyQmxvY2spOworICAgIG1fbWFya2Vyc1thdG9tTnVtYmVyXSA9IFdURk1vdmUobWFya2Vy
KTsKK30KKworY29uc3QgTWFya2VyRGF0YSogVmVyaWZpZXJTbG90VmlzaXRvcjo6TWFya2VkQmxv
Y2tEYXRhOjptYXJrZXJEYXRhKHVuc2lnbmVkIGF0b21OdW1iZXIpIGNvbnN0Cit7CisgICAgYXV0
byYgbWFya2VyID0gbV9tYXJrZXJzW2F0b21OdW1iZXJdOworICAgIGlmIChtYXJrZXIuc3RhY2sp
CisgICAgICAgIHJldHVybiAmbWFya2VyOworICAgIHJldHVybiBudWxscHRyOworfQorCitWZXJp
ZmllclNsb3RWaXNpdG9yOjpQcmVjaXNlQWxsb2NhdGlvbkRhdGE6OlByZWNpc2VBbGxvY2F0aW9u
RGF0YShQcmVjaXNlQWxsb2NhdGlvbiogYWxsb2NhdGlvbikKKyAgICA6IG1fYWxsb2NhdGlvbihh
bGxvY2F0aW9uKQoreworfQorCitjb25zdCBNYXJrZXJEYXRhKiBWZXJpZmllclNsb3RWaXNpdG9y
OjpQcmVjaXNlQWxsb2NhdGlvbkRhdGE6Om1hcmtlckRhdGEoKSBjb25zdAoreworICAgIGlmICht
X21hcmtlci5zdGFjaykKKyAgICAgICAgcmV0dXJuICZtX21hcmtlcjsKKyAgICByZXR1cm4gbnVs
bHB0cjsKK30KKwordm9pZCBWZXJpZmllclNsb3RWaXNpdG9yOjpQcmVjaXNlQWxsb2NhdGlvbkRh
dGE6OmFkZE1hcmtlckRhdGEoTWFya2VyRGF0YSYmIG1hcmtlcikKK3sKKyAgICBtX21hcmtlciA9
IFdURk1vdmUobWFya2VyKTsKK30KKworVmVyaWZpZXJTbG90VmlzaXRvcjo6VmVyaWZpZXJTbG90
VmlzaXRvcihIZWFwJiBoZWFwKQorICAgIDogQmFzZShoZWFwLCAiVmVyaWZpZXIiKQoreworfQor
CitWZXJpZmllclNsb3RWaXNpdG9yOjp+VmVyaWZpZXJTbG90VmlzaXRvcigpCit7Cit9CisKK3Zv
aWQgVmVyaWZpZXJTbG90VmlzaXRvcjo6YWRkUGFyYWxsZWxDb25zdHJhaW50VGFzayhSZWZQdHI8
U2hhcmVkVGFzazx2b2lkKEFic3RyYWN0U2xvdFZpc2l0b3ImKT4+IHRhc2spCit7CisgICAgbV9j
b25zdHJhaW50VGFza3MuYXBwZW5kKFdURk1vdmUodGFzaykpOworfQorCit2b2lkIFZlcmlmaWVy
U2xvdFZpc2l0b3I6OmV4ZWN1dGVDb25zdHJhaW50VGFza3MoKQoreworICAgIHdoaWxlICghbV9j
b25zdHJhaW50VGFza3MuaXNFbXB0eSgpKQorICAgICAgICBtX2NvbnN0cmFpbnRUYXNrcy50YWtl
Rmlyc3QoKS0+cnVuKCp0aGlzKTsKK30KKwordm9pZCBWZXJpZmllclNsb3RWaXNpdG9yOjphcHBl
bmRfQ29uc2VydmF0aXZlUm9vdHMoY29uc3QgQ29uc2VydmF0aXZlUm9vdHMmIGNvbnNlcnZhdGl2
ZVJvb3RzKQoreworICAgIGF1dG8gYXBwZW5kSlNDZWxsT3JBdXhpbGlhcnkgPSBbJl0gKEhlYXBD
ZWxsKiBoZWFwQ2VsbCkKKyAgICB7CisgICAgICAgIGlmICghaGVhcENlbGwpCisgICAgICAgICAg
ICByZXR1cm47CisKKyAgICAgICAgaWYgKHRlc3RBbmRTZXRNYXJrZWQoaGVhcENlbGwpKQorICAg
ICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHN3aXRjaCAoaGVhcENlbGwtPmNlbGxLaW5kKCkp
IHsKKyAgICAgICAgY2FzZSBIZWFwQ2VsbDo6SlNDZWxsOgorICAgICAgICBjYXNlIEhlYXBDZWxs
OjpKU0NlbGxXaXRoSW5kZXhpbmdIZWFkZXI6IHsKKyAgICAgICAgICAgIEpTQ2VsbCoganNDZWxs
ID0gc3RhdGljX2Nhc3Q8SlNDZWxsKj4oaGVhcENlbGwpOworICAgICAgICAgICAgYXBwZW5kVG9N
YXJrU3RhY2soanNDZWxsKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAg
ICAgIGNhc2UgSGVhcENlbGw6OkF1eGlsaWFyeToKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorICAgIH07CisKKyAgICBIZWFwQ2VsbCoqIHJvb3RzID0gY29uc2VydmF0aXZlUm9vdHMu
cm9vdHMoKTsKKyAgICBzaXplX3Qgc2l6ZSA9IGNvbnNlcnZhdGl2ZVJvb3RzLnNpemUoKTsKKyAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkKKyAgICAgICAgYXBwZW5kSlNDZWxs
T3JBdXhpbGlhcnkocm9vdHNbaV0pOworfQorCit2b2lkIFZlcmlmaWVyU2xvdFZpc2l0b3I6OmFw
cGVuZFRvTWFya1N0YWNrKEpTQ2VsbCogY2VsbCkKK3sKKy8vICAgIEFTU0VSVChtX2hlYXAuaXNN
YXJrZWQoY2VsbCkpOyAvLyBtbGFtIFRFU1Qgc2FuaXR5IGNoZWNrLgorICAgIEFTU0VSVCghY2Vs
bC0+aXNaYXBwZWQoKSk7CisgICAgbV9jb2xsZWN0b3JTdGFjay5hcHBlbmQoY2VsbCk7Cit9CisK
K3ZvaWQgVmVyaWZpZXJTbG90VmlzaXRvcjo6YXBwZW5kVW5iYXJyaWVyZWRJbXBsKEpTQ2VsbCog
Y2VsbCkKK3sKKyAgICBpZiAoVU5MSUtFTFkoY2VsbC0+aXNQcmVjaXNlQWxsb2NhdGlvbigpKSkg
eworICAgICAgICBpZiAoTElLRUxZKGlzTWFya2VkKGNlbGwtPnByZWNpc2VBbGxvY2F0aW9uKCks
IGNlbGwpKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9IGVsc2UgeworICAgICAgICBNYXJr
ZWRCbG9jayYgYmxvY2sgPSBjZWxsLT5tYXJrZWRCbG9jaygpOworICAgICAgICBpZiAoTElLRUxZ
KGlzTWFya2VkKGJsb2NrLCBjZWxsKSkpCisgICAgICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgYXBwZW5kU2xvdyhjZWxsKTsKK30KKwordm9pZCBWZXJpZmllclNsb3RWaXNpdG9yOjphcHBl
bmRIaWRkZW5VbmJhcnJpZXJlZEltcGwoSlNDZWxsKiBjZWxsKQoreworICAgIGFwcGVuZFVuYmFy
cmllcmVkSW1wbChjZWxsKTsKK30KKworYm9vbCBWZXJpZmllclNsb3RWaXNpdG9yOjphZGRPcGFx
dWVSb290KHZvaWQqIHB0cikKK3sKKyAgICBpZiAoIXB0cikKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIGlmICghbV9vcGFxdWVSb290cy5hZGQocHRyKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFZlcmlmaWVyU2xvdFZpc2l0b3I6OmNvbnRh
aW5zT3BhcXVlUm9vdCh2b2lkKiBwdHIpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fb3BhcXVlUm9v
dHMuY29udGFpbnMocHRyKTsKK30KKwordm9pZCBWZXJpZmllclNsb3RWaXNpdG9yOjpkcmFpbigp
Cit7CisgICAgUkVMRUFTRV9BU1NFUlQobV9tdXRhdG9yU3RhY2suaXNFbXB0eSgpKTsKKworICAg
IE1hcmtTdGFja0FycmF5JiBzdGFjayA9IG1fY29sbGVjdG9yU3RhY2s7CisgICAgaWYgKHN0YWNr
LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgc3RhY2sucmVmaWxsKCk7CisgICAg
d2hpbGUgKHN0YWNrLmNhblJlbW92ZUxhc3QoKSkgeworICAgICAgICB2aXNpdENoaWxkcmVuKHN0
YWNrLnJlbW92ZUxhc3QoKSk7CisgICAgfQorfQorCit2b2lkIFZlcmlmaWVyU2xvdFZpc2l0b3I6
OmR1bXBNYXJrZXJEYXRhKEhlYXBDZWxsKiBjZWxsKQoreworICAgIGlmIChjZWxsLT5pc1ByZWNp
c2VBbGxvY2F0aW9uKCkpCisgICAgICAgIHJldHVybiBkdW1wTWFya2VyRGF0YShjZWxsLT5wcmVj
aXNlQWxsb2NhdGlvbigpLCBjZWxsKTsKKyAgICByZXR1cm4gZHVtcE1hcmtlckRhdGEoY2VsbC0+
bWFya2VkQmxvY2soKSwgY2VsbCk7Cit9CisKK3ZvaWQgVmVyaWZpZXJTbG90VmlzaXRvcjo6ZHVt
cE1hcmtlckRhdGEoUHJlY2lzZUFsbG9jYXRpb24mIGFsbG9jYXRpb24sIEhlYXBDZWxsKiBjZWxs
KQoreworICAgIGF1dG8gaXRlcmF0b3IgPSBtX3ByZWNpc2VBbGxvY2F0aW9uTWFwLmZpbmQoJmFs
bG9jYXRpb24pOworICAgIGlmIChpdGVyYXRvciAhPSBtX3ByZWNpc2VBbGxvY2F0aW9uTWFwLmVu
ZCgpKSB7CisgICAgICAgIGR1bXBNYXJrZXJEYXRhKGNlbGwsIGl0ZXJhdG9yLT52YWx1ZS0+bWFy
a2VyRGF0YSgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBkYXRhTG9nTG4oIkNlbGwg
IiwgUmF3UG9pbnRlcihjZWxsKSwgIiBub3QgZm91bmQiKTsKK30KKwordm9pZCBWZXJpZmllclNs
b3RWaXNpdG9yOjpkdW1wTWFya2VyRGF0YShNYXJrZWRCbG9jayYgYmxvY2ssIEhlYXBDZWxsKiBj
ZWxsKQoreworICAgIGF1dG8gaXRlcmF0b3IgPSBtX21hcmtlZEJsb2NrTWFwLmZpbmQoJmJsb2Nr
KTsKKyAgICBpZiAoaXRlcmF0b3IgIT0gbV9tYXJrZWRCbG9ja01hcC5lbmQoKSkgeworICAgICAg
ICB1bnNpZ25lZCBhdG9tTnVtYmVyID0gYmxvY2suYXRvbU51bWJlcihjZWxsKTsKKyAgICAgICAg
ZHVtcE1hcmtlckRhdGEoY2VsbCwgaXRlcmF0b3ItPnZhbHVlLT5tYXJrZXJEYXRhKGF0b21OdW1i
ZXIpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBkYXRhTG9nTG4oIkNlbGwgIiwgUmF3
UG9pbnRlcihjZWxsKSwgIiBub3QgZm91bmQiKTsKK30KKwordm9pZCBWZXJpZmllclNsb3RWaXNp
dG9yOjpkdW1wTWFya2VyRGF0YShIZWFwQ2VsbCogY2VsbCwgY29uc3QgTWFya2VyRGF0YSogbWFy
a2VyKQoreworICAgIGlmICghbWFya2VyKSB7CisgICAgICAgIGRhdGFMb2dMbigiTWFya2VyIGRh
dGEgaXMgbm90IGF2YWlsYWJsZSBmb3IgY2VsbCAiLCBSYXdQb2ludGVyKGNlbGwpKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIGRhdGFMb2dMbigiQ2VsbCAiLCBSYXdQb2ludGVyKGNl
bGwpLCAiIHdhcyByZWFjaGFibGUgdmlhIGNlbGwgIiwgUmF3UG9pbnRlcihtYXJrZXItPnBhcmVu
dCksICIgYXQ6Iik7CisgICAgbWFya2VyLT5zdGFjay0+ZHVtcChXVEY6OmRhdGFGaWxlKCksICIg
ICAgIik7Cit9CisKK2Jvb2wgVmVyaWZpZXJTbG90VmlzaXRvcjo6aXNGaXJzdFZpc2l0KCkgY29u
c3QKK3sKKyAgICAvLyBXZSBuZWVkIHRvIGFsd2F5cyByZXR1cm4gZmFsc2UgYmVjYXVzZSB0aGlz
IGlzIHVzZWQgdG8gYWdlZCBhbiBVbmxpbmtlZENvZGVCbG9jaworICAgIC8vIGluIHRoZSByZWd1
bGFyIEdDOiBzZWUgVW5saW5rZWRDb2RlQmxvY2s6OnZpc2l0Q2hpbGRyZW5JbXBsKCkuIFdlIHNo
b3VsZCBub3QKKyAgICAvLyBzaG91bGQgZG8gdGhhdCBhZ2luZyBhY3Rpb24uCisgICAgcmV0dXJu
IGZhbHNlOworfQorCitib29sIFZlcmlmaWVyU2xvdFZpc2l0b3I6OmlzTWFya2VkKGNvbnN0IHZv
aWQqIHJhd0NlbGwpIGNvbnN0Cit7CisgICAgSGVhcENlbGwqIGNlbGwgPSBiaXR3aXNlX2Nhc3Q8
SGVhcENlbGwqPihyYXdDZWxsKTsKKyAgICBpZiAoY2VsbC0+aXNQcmVjaXNlQWxsb2NhdGlvbigp
KQorICAgICAgICByZXR1cm4gaXNNYXJrZWQoY2VsbC0+cHJlY2lzZUFsbG9jYXRpb24oKSwgY2Vs
bCk7CisgICAgcmV0dXJuIGlzTWFya2VkKGNlbGwtPm1hcmtlZEJsb2NrKCksIGNlbGwpOworfQor
Citib29sIFZlcmlmaWVyU2xvdFZpc2l0b3I6OmlzTWFya2VkKFByZWNpc2VBbGxvY2F0aW9uJiBh
bGxvY2F0aW9uLCBIZWFwQ2VsbCopIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcHJlY2lzZUFsbG9j
YXRpb25NYXAuY29udGFpbnMoJmFsbG9jYXRpb24pOworfQorCitib29sIFZlcmlmaWVyU2xvdFZp
c2l0b3I6OmlzTWFya2VkKE1hcmtlZEJsb2NrJiBibG9jaywgSGVhcENlbGwqIGNlbGwpIGNvbnN0
Cit7CisgICAgYXV0byBlbnRyeSA9IG1fbWFya2VkQmxvY2tNYXAuZmluZCgmYmxvY2spOworICAg
IGlmIChlbnRyeSA9PSBtX21hcmtlZEJsb2NrTWFwLmVuZCgpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICBhdXRvJiBkYXRhID0gZW50cnktPnZhbHVlOworICAgIHVuc2lnbmVkIGF0b21O
dW1iZXIgPSBibG9jay5hdG9tTnVtYmVyKGNlbGwpOworICAgIHJldHVybiBkYXRhLT5pc01hcmtl
ZChhdG9tTnVtYmVyKTsKK30KKwordm9pZCBWZXJpZmllclNsb3RWaXNpdG9yOjptYXJrQXV4aWxp
YXJ5KGNvbnN0IHZvaWQqIGJhc2UpCit7CisgICAgSGVhcENlbGwqIGNlbGwgPSBiaXR3aXNlX2Nh
c3Q8SGVhcENlbGwqPihiYXNlKTsKKworICAgIEFTU0VSVChjZWxsLT5oZWFwKCkgPT0gaGVhcCgp
KTsKKyAgICB0ZXN0QW5kU2V0TWFya2VkKGNlbGwpOworfQorCitib29sIFZlcmlmaWVyU2xvdFZp
c2l0b3I6Om11dGF0b3JJc1N0b3BwZWQoKSBjb25zdAoreworICAgIHJldHVybiB0cnVlOworfQor
Citib29sIFZlcmlmaWVyU2xvdFZpc2l0b3I6OnRlc3RBbmRTZXRNYXJrZWQoY29uc3Qgdm9pZCog
cmF3Q2VsbCkKK3sKKyAgICBIZWFwQ2VsbCogY2VsbCA9IGJpdHdpc2VfY2FzdDxIZWFwQ2VsbCo+
KHJhd0NlbGwpOworICAgIGlmIChjZWxsLT5pc1ByZWNpc2VBbGxvY2F0aW9uKCkpCisgICAgICAg
IHJldHVybiB0ZXN0QW5kU2V0TWFya2VkKGNlbGwtPnByZWNpc2VBbGxvY2F0aW9uKCkpOworICAg
IHJldHVybiB0ZXN0QW5kU2V0TWFya2VkKGNlbGwtPm1hcmtlZEJsb2NrKCksIGNlbGwpOworfQor
Citib29sIFZlcmlmaWVyU2xvdFZpc2l0b3I6OnRlc3RBbmRTZXRNYXJrZWQoUHJlY2lzZUFsbG9j
YXRpb24mIGFsbG9jYXRpb24pCit7CisgICAgc3RkOjp1bmlxdWVfcHRyPFByZWNpc2VBbGxvY2F0
aW9uRGF0YT4mIGRhdGEgPSBtX3ByZWNpc2VBbGxvY2F0aW9uTWFwLmFkZCgmYWxsb2NhdGlvbiwg
bnVsbHB0cikuaXRlcmF0b3ItPnZhbHVlOworICAgIGlmICghZGF0YSkgeworICAgICAgICBkYXRh
ID0gbWFrZVVuaXF1ZTxQcmVjaXNlQWxsb2NhdGlvbkRhdGE+KCZhbGxvY2F0aW9uKTsKKyAgICAg
ICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OnZlcmJvc2VWZXJpZnlHQygpKSkKKyAgICAgICAgICAg
IGRhdGEtPmFkZE1hcmtlckRhdGEoeyBwYXJlbnRDZWxsKCksIFN0YWNrVHJhY2U6OmNhcHR1cmVT
dGFja1RyYWNlKG1heE1hcmtpbmdTdGFja0ZyYW1lc1RvQ2FwdHVyZSwgMikgfSk7CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgVmVyaWZp
ZXJTbG90VmlzaXRvcjo6dGVzdEFuZFNldE1hcmtlZChNYXJrZWRCbG9jayYgYmxvY2ssIEhlYXBD
ZWxsKiBjZWxsKQoreworICAgIHN0ZDo6dW5pcXVlX3B0cjxNYXJrZWRCbG9ja0RhdGE+JiBkYXRh
ID0gbV9tYXJrZWRCbG9ja01hcC5hZGQoJmJsb2NrLCBudWxscHRyKS5pdGVyYXRvci0+dmFsdWU7
CisgICAgaWYgKCFkYXRhKQorICAgICAgICBkYXRhID0gbWFrZVVuaXF1ZTxNYXJrZWRCbG9ja0Rh
dGE+KCZibG9jayk7CisKKyAgICB1bnNpZ25lZCBhdG9tTnVtYmVyID0gYmxvY2suYXRvbU51bWJl
cihjZWxsKTsKKyAgICBib29sIGFscmVhZHlTZXQgPSBkYXRhLT50ZXN0QW5kU2V0TWFya2VkKGF0
b21OdW1iZXIpOworICAgIGlmICghYWxyZWFkeVNldCAmJiBVTkxJS0VMWShPcHRpb25zOjp2ZXJi
b3NlVmVyaWZ5R0MoKSkpCisgICAgICAgIGRhdGEtPmFkZE1hcmtlckRhdGEoYXRvbU51bWJlciwg
eyBwYXJlbnRDZWxsKCksIFN0YWNrVHJhY2U6OmNhcHR1cmVTdGFja1RyYWNlKG1heE1hcmtpbmdT
dGFja0ZyYW1lc1RvQ2FwdHVyZSwgMikgfSk7CisgICAgcmV0dXJuIGFscmVhZHlTZXQ7Cit9CisK
K3ZvaWQgVmVyaWZpZXJTbG90VmlzaXRvcjo6c2V0TWFya2VkQW5kQXBwZW5kVG9NYXJrU3RhY2so
SlNDZWxsKiBjZWxsKQoreworICAgIGlmIChtX3N1cHByZXNzVmVyaWZpZXIpCisgICAgICAgIHJl
dHVybjsKKyAgICBpZiAodGVzdEFuZFNldE1hcmtlZChjZWxsKSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIGFwcGVuZFRvTWFya1N0YWNrKGNlbGwpOworfQorCit2b2lkIFZlcmlmaWVyU2xvdFZpc2l0
b3I6OnZpc2l0QXNDb25zdHJhaW50KGNvbnN0IEpTQ2VsbCogY2VsbCkKK3sKKyAgICB2aXNpdENo
aWxkcmVuKGNlbGwpOworfQorCit2b2lkIFZlcmlmaWVyU2xvdFZpc2l0b3I6OnZpc2l0Q2hpbGRy
ZW4oY29uc3QgSlNDZWxsKiBjZWxsKQoreworICAgIFJFTEVBU0VfQVNTRVJUKGlzTWFya2VkKGNl
bGwpKTsgLy8gbWxhbSBNQUtFIGludG8gQVNTRVJUCisgICAgCisgICAgc3dpdGNoIChjZWxsLT50
eXBlKCkpIHsKKyAgICBjYXNlIFN0cmluZ1R5cGU6CisgICAgICAgIEpTU3RyaW5nOjp2aXNpdENo
aWxkcmVuKGNvbnN0X2Nhc3Q8SlNDZWxsKj4oY2VsbCksICp0aGlzKTsKKyAgICAgICAgYnJlYWs7
CisgICAgICAgIAorICAgIGNhc2UgRmluYWxPYmplY3RUeXBlOgorICAgICAgICBKU0ZpbmFsT2Jq
ZWN0Ojp2aXNpdENoaWxkcmVuKGNvbnN0X2Nhc3Q8SlNDZWxsKj4oY2VsbCksICp0aGlzKTsKKyAg
ICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEFycmF5VHlwZToKKyAgICAgICAgSlNBcnJheTo6dmlz
aXRDaGlsZHJlbihjb25zdF9jYXN0PEpTQ2VsbCo+KGNlbGwpLCAqdGhpcyk7CisgICAgICAgIGJy
ZWFrOworICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICAvLyBGSVhNRTogVGhpcyBjb3Vs
ZCBiZSBzbyBtdWNoIGJldHRlci4KKyAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE2MjQ2MgorICAgICAgICBjZWxsLT5tZXRob2RUYWJsZSh2bSgpKS0+
dmlzaXRDaGlsZHJlbihjb25zdF9jYXN0PEpTQ2VsbCo+KGNlbGwpLCAqdGhpcyk7CisgICAgICAg
IGJyZWFrOworICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9WZXJpZmllclNsb3RWaXNpdG9yLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVmVyaWZpZXJTbG90VmlzaXRvci5oCShub25leGlzdGVu
dCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1ZlcmlmaWVyU2xvdFZpc2l0b3IuaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE3MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQWJzdHJhY3RT
bG90VmlzaXRvci5oIgorI2luY2x1ZGUgIkpTQ0pTVmFsdWUuaCIKKyNpbmNsdWRlICJWaXNpdFJh
Y2VLZXkuaCIKKyNpbmNsdWRlICJXZWFrLmgiCisjaW5jbHVkZSA8bWVtb3J5PgorI2luY2x1ZGUg
PHd0Zi9CaXRWZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvQ29uY3VycmVudFB0ckhhc2hTZXQuaD4K
KyNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Cisj
aW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9TaGFyZWRUYXNrLmg+CisKK25h
bWVzcGFjZSBXVEYgeworCitjbGFzcyBTdGFja1RyYWNlOworCit9IC8vIG5hbWVzcGFjZSBXVEYK
KworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIENvbnNlcnZhdGl2ZVJvb3RzOworY2xhc3MgSGVh
cDsKK2NsYXNzIEhlYXBDZWxsOworY2xhc3MgUHJlY2lzZUFsbG9jYXRpb247CitjbGFzcyBNYXJr
ZWRCbG9jazsKKwordXNpbmcgV1RGOjpTdGFja1RyYWNlOworCitjbGFzcyBWZXJpZmllclNsb3RW
aXNpdG9yIDogcHVibGljIEFic3RyYWN0U2xvdFZpc2l0b3IgeworICAgIFdURl9NQUtFX05PTkNP
UFlBQkxFKFZlcmlmaWVyU2xvdFZpc2l0b3IpOworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OworICAgIHVzaW5nIEJhc2UgPSBBYnN0cmFjdFNsb3RWaXNpdG9yOworcHVibGljOgorICAgIHN0
cnVjdCBNYXJrZXJEYXRhIHsKKyAgICAgICAgTWFya2VyRGF0YSgpID0gZGVmYXVsdDsKKyAgICAg
ICAgTWFya2VyRGF0YShNYXJrZXJEYXRhJiYpID0gZGVmYXVsdDsKKyAgICAgICAgTWFya2VyRGF0
YShIZWFwQ2VsbCosIHN0ZDo6dW5pcXVlX3B0cjxTdGFja1RyYWNlPiYmKTsKKyAgICAgICAgTWFy
a2VyRGF0YSYgb3BlcmF0b3I9KE1hcmtlckRhdGEmJikgPSBkZWZhdWx0OworCisgICAgICAgIEhl
YXBDZWxsKiBwYXJlbnQgeyBudWxscHRyIH07CisgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxTdGFj
a1RyYWNlPiBzdGFjazsKKyAgICB9OworCisgICAgVmVyaWZpZXJTbG90VmlzaXRvcihIZWFwJik7
CisgICAgflZlcmlmaWVyU2xvdFZpc2l0b3IoKTsKKworICAgIHZvaWQgYXBwZW5kX0NvbnNlcnZh
dGl2ZVJvb3RzKGNvbnN0IENvbnNlcnZhdGl2ZVJvb3RzJikgZmluYWw7CisgICAgdm9pZCBhcHBl
bmRVbmJhcnJpZXJlZEltcGwoSlNDZWxsKikgZmluYWw7CisgICAgdm9pZCBhcHBlbmRIaWRkZW5V
bmJhcnJpZXJlZEltcGwoSlNDZWxsKikgZmluYWw7CisKKyAgICBib29sIGFkZE9wYXF1ZVJvb3Qo
dm9pZCopIGZpbmFsOyAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIHJvb3Qgd2FzIG5ldy4KKyAgICBi
b29sIGNvbnRhaW5zT3BhcXVlUm9vdCh2b2lkKikgY29uc3QgZmluYWw7CisKKyAgICBib29sIGlz
Rmlyc3RWaXNpdCgpIGNvbnN0IGZpbmFsOworICAgIGJvb2wgaXNNYXJrZWQoY29uc3Qgdm9pZCop
IGNvbnN0IGZpbmFsOworICAgIGJvb2wgaXNNYXJrZWQoTWFya2VkQmxvY2smLCBIZWFwQ2VsbCop
IGNvbnN0IGZpbmFsOworICAgIGJvb2wgaXNNYXJrZWQoUHJlY2lzZUFsbG9jYXRpb24mLCBIZWFw
Q2VsbCopIGNvbnN0IGZpbmFsOworCisgICAgdm9pZCBtYXJrQXV4aWxpYXJ5KGNvbnN0IHZvaWQq
KSBmaW5hbDsKKworICAgIHZvaWQgcmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKHNpemVfdCkgZmlu
YWwgeyB9CisjaWYgRU5BQkxFKFJFU09VUkNFX1VTQUdFKQorICAgIHZvaWQgcmVwb3J0RXh0ZXJu
YWxNZW1vcnlWaXNpdGVkKHNpemVfdCkgZmluYWwgeyB9CisjZW5kaWYKKworICAgIGJvb2wgbXV0
YXRvcklzU3RvcHBlZCgpIGNvbnN0IGZpbmFsOworCisgICAgdm9pZCBkaWRSYWNlKGNvbnN0IFZp
c2l0UmFjZUtleSYpIGZpbmFsIHsgfQorICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0
IGZpbmFsIHsgfQorCisgICAgdm9pZCB2aXNpdEFzQ29uc3RyYWludChjb25zdCBKU0NlbGwqKSBm
aW5hbDsKKworICAgIHZvaWQgZHJhaW4oKTsKKworICAgIHZvaWQgYWRkUGFyYWxsZWxDb25zdHJh
aW50VGFzayhSZWZQdHI8U2hhcmVkVGFzazx2b2lkKEFic3RyYWN0U2xvdFZpc2l0b3ImKT4+KSBm
aW5hbDsKKyAgICB2b2lkIGV4ZWN1dGVDb25zdHJhaW50VGFza3MoKTsKKworICAgIHRlbXBsYXRl
PHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaExpdmVDZWxsKGNvbnN0IEZ1bmN0b3ImKTsK
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hMaXZlUHJlY2lzZUFs
bG9jYXRpb24oY29uc3QgRnVuY3RvciYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+
IHZvaWQgZm9yRWFjaExpdmVNYXJrZWRCbG9ja0NlbGwoY29uc3QgRnVuY3RvciYpOworCisgICAg
SlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBkdW1wTWFya2VyRGF0YShIZWFwQ2VsbCopOworCitwcml2
YXRlOgorICAgIGNsYXNzIE1hcmtlZEJsb2NrRGF0YSB7CisgICAgICAgIFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEOworICAgICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShNYXJrZWRCbG9ja0RhdGEp
OworICAgIHB1YmxpYzoKKyAgICAgICAgTWFya2VkQmxvY2tEYXRhKE1hcmtlZEJsb2NrKik7CisK
KyAgICAgICAgTWFya2VkQmxvY2sqIGJsb2NrKCkgY29uc3QgeyByZXR1cm4gbV9ibG9jazsgfQor
ICAgICAgICBjb25zdCBCaXRWZWN0b3ImIGF0b21zKCkgY29uc3QgeyByZXR1cm4gbV9hdG9tczsg
fQorCisgICAgICAgIGJvb2wgaXNNYXJrZWQodW5zaWduZWQgYXRvbU51bWJlcikgeyByZXR1cm4g
bV9hdG9tcy5xdWlja0dldChhdG9tTnVtYmVyKTsgfQorICAgICAgICBib29sIHRlc3RBbmRTZXRN
YXJrZWQodW5zaWduZWQgYXRvbU51bWJlcikgeyByZXR1cm4gbV9hdG9tcy5xdWlja1NldChhdG9t
TnVtYmVyKTsgfQorCisgICAgICAgIHZvaWQgYWRkTWFya2VyRGF0YSh1bnNpZ25lZCBhdG9tTnVt
YmVyLCBNYXJrZXJEYXRhJiYpOworICAgICAgICBjb25zdCBNYXJrZXJEYXRhKiBtYXJrZXJEYXRh
KHVuc2lnbmVkIGF0b21OdW1iZXIpIGNvbnN0OworCisgICAgcHJpdmF0ZToKKyAgICAgICAgTWFy
a2VkQmxvY2sqIG1fYmxvY2sgeyBudWxscHRyIH07CisgICAgICAgIEJpdFZlY3RvciBtX2F0b21z
OworICAgICAgICBWZWN0b3I8TWFya2VyRGF0YT4gbV9tYXJrZXJzOworICAgIH07CisKKyAgICBj
bGFzcyBQcmVjaXNlQWxsb2NhdGlvbkRhdGEgeworICAgICAgICBXVEZfTUFLRV9GQVNUX0FMTE9D
QVRFRDsKKyAgICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUHJlY2lzZUFsbG9jYXRpb25EYXRh
KTsKKyAgICBwdWJsaWM6CisgICAgICAgIFByZWNpc2VBbGxvY2F0aW9uRGF0YShQcmVjaXNlQWxs
b2NhdGlvbiopOworICAgICAgICBQcmVjaXNlQWxsb2NhdGlvbiogYWxsb2NhdGlvbigpIGNvbnN0
IHsgcmV0dXJuIG1fYWxsb2NhdGlvbjsgfQorCisgICAgICAgIHZvaWQgYWRkTWFya2VyRGF0YShN
YXJrZXJEYXRhJiYpOworICAgICAgICBjb25zdCBNYXJrZXJEYXRhKiBtYXJrZXJEYXRhKCkgY29u
c3Q7CisKKyAgICBwcml2YXRlOgorICAgICAgICBQcmVjaXNlQWxsb2NhdGlvbiogbV9hbGxvY2F0
aW9uIHsgbnVsbHB0ciB9OworICAgICAgICBNYXJrZXJEYXRhIG1fbWFya2VyOworICAgIH07CisK
KyAgICB1c2luZyBNYXJrZWRCbG9ja01hcCA9IEhhc2hNYXA8TWFya2VkQmxvY2sqLCBzdGQ6OnVu
aXF1ZV9wdHI8TWFya2VkQmxvY2tEYXRhPj47CisgICAgdXNpbmcgUHJlY2lzZUFsbG9jYXRpb25N
YXAgPSBIYXNoTWFwPFByZWNpc2VBbGxvY2F0aW9uKiwgc3RkOjp1bmlxdWVfcHRyPFByZWNpc2VB
bGxvY2F0aW9uRGF0YT4+OworCisgICAgdm9pZCBhcHBlbmRUb01hcmtTdGFjayhKU0NlbGwqKTsK
KyAgICB2b2lkIGFwcGVuZFNsb3coSlNDZWxsKiBjZWxsKSB7IHNldE1hcmtlZEFuZEFwcGVuZFRv
TWFya1N0YWNrKGNlbGwpOyB9CisKKyAgICBib29sIHRlc3RBbmRTZXRNYXJrZWQoY29uc3Qgdm9p
ZCogcmF3Q2VsbCk7CisgICAgYm9vbCB0ZXN0QW5kU2V0TWFya2VkKFByZWNpc2VBbGxvY2F0aW9u
Jik7CisgICAgYm9vbCB0ZXN0QW5kU2V0TWFya2VkKE1hcmtlZEJsb2NrJiwgSGVhcENlbGwqKTsK
KworICAgIHZvaWQgc2V0TWFya2VkQW5kQXBwZW5kVG9NYXJrU3RhY2soSlNDZWxsKik7CisKKyAg
ICB2b2lkIHZpc2l0Q2hpbGRyZW4oY29uc3QgSlNDZWxsKik7CisKKyAgICB2b2lkIGR1bXBNYXJr
ZXJEYXRhKFByZWNpc2VBbGxvY2F0aW9uJiwgSGVhcENlbGwqKTsKKyAgICB2b2lkIGR1bXBNYXJr
ZXJEYXRhKE1hcmtlZEJsb2NrJiwgSGVhcENlbGwqKTsKKyAgICB2b2lkIGR1bXBNYXJrZXJEYXRh
KEhlYXBDZWxsKiwgY29uc3QgTWFya2VyRGF0YSopOworCisgICAgUHJlY2lzZUFsbG9jYXRpb25N
YXAgbV9wcmVjaXNlQWxsb2NhdGlvbk1hcDsKKyAgICBNYXJrZWRCbG9ja01hcCBtX21hcmtlZEJs
b2NrTWFwOworICAgIENvbmN1cnJlbnRQdHJIYXNoU2V0IG1fb3BhcXVlUm9vdHM7CisgICAgRGVx
dWU8UmVmUHRyPFNoYXJlZFRhc2s8dm9pZChBYnN0cmFjdFNsb3RWaXNpdG9yJik+PiwgMzI+IG1f
Y29uc3RyYWludFRhc2tzOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9WZXJpZmllclNsb3RWaXNpdG9ySW5saW5lcy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1ZlcmlmaWVyU2xvdFZpc2l0b3JJbmxp
bmVzLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVmVyaWZp
ZXJTbG90VmlzaXRvcklubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY0IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNl
CisKKyNpbmNsdWRlICJWZXJpZmllclNsb3RWaXNpdG9yLmgiCisKKyNpbmNsdWRlICJBYnN0cmFj
dFNsb3RWaXNpdG9ySW5saW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsKKwordGVtcGxhdGU8dHlw
ZW5hbWUgRnVuY3Rvcj4KK3ZvaWQgVmVyaWZpZXJTbG90VmlzaXRvcjo6Zm9yRWFjaExpdmVDZWxs
KGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCit7CisgICAgZm9yRWFjaExpdmVQcmVjaXNlQWxsb2Nh
dGlvbihmdW5jdG9yKTsKKyAgICBmb3JFYWNoTGl2ZU1hcmtlZEJsb2NrQ2VsbChmdW5jdG9yKTsK
K30KKwordGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KK3ZvaWQgVmVyaWZpZXJTbG90VmlzaXRv
cjo6Zm9yRWFjaExpdmVQcmVjaXNlQWxsb2NhdGlvbihjb25zdCBGdW5jdG9yJiBmdW5jKQorewor
ICAgIGZvciAoYXV0byYgZW50cnkgOiBtX3ByZWNpc2VBbGxvY2F0aW9uTWFwKSB7CisgICAgICAg
IFByZWNpc2VBbGxvY2F0aW9uKiBhbGxvY2F0aW9uID0gZW50cnkudmFsdWUtPmFsbG9jYXRpb24o
KTsKKyAgICAgICAgZnVuYyhhbGxvY2F0aW9uLT5jZWxsKCkpOworICAgIH0KK30KKwordGVtcGxh
dGU8dHlwZW5hbWUgRnVuY3Rvcj4KK3ZvaWQgVmVyaWZpZXJTbG90VmlzaXRvcjo6Zm9yRWFjaExp
dmVNYXJrZWRCbG9ja0NlbGwoY29uc3QgRnVuY3RvciYgZnVuYykKK3sKKyAgICBmb3IgKGF1dG8m
IGVudHJ5IDogbV9tYXJrZWRCbG9ja01hcCkgeworICAgICAgICBhdXRvJiBkYXRhID0gZW50cnku
dmFsdWU7CisgICAgICAgIE1hcmtlZEJsb2NrKiBibG9jayA9IGRhdGEtPmJsb2NrKCk7CisgICAg
ICAgIGNvbnN0IEJpdFZlY3RvciYgYXRvbXMgPSAgZGF0YS0+YXRvbXMoKTsKKyAgICAgICAgZm9y
IChhdXRvIGF0b21OdW1iZXIgOiBhdG9tcykgeworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQo
YXRvbXMucXVpY2tHZXQoYXRvbU51bWJlcikpOyAvLyBtbGFtIFRFU1QgU2FuaXR5IENoZWNrCisg
ICAgICAgICAgICBmdW5jKGJpdHdpc2VfY2FzdDxIZWFwQ2VsbCo+KGJsb2NrLT5oYW5kbGUoKS5h
dG9tQXQoYXRvbU51bWJlcikpKTsKKyAgICAgICAgfQorICAgIH0KK30KKworfSAvLyBuYW1lc3Bh
Y2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9WaXNpdENvdW50ZXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9WaXNpdENvdW50ZXIuaAko
cmV2aXNpb24gMjcyNzEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVmlzaXRDb3Vu
dGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDcgKzI1LDcgQEAKIAogI3ByYWdtYSBvbmNlCiAK
LSNpbmNsdWRlICJTbG90VmlzaXRvci5oIgorI2luY2x1ZGUgIkFic3RyYWN0U2xvdFZpc2l0b3Iu
aCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAgLTMzLDEzICszMywxMyBAQCBjbGFzcyBWaXNpdENv
dW50ZXIgewogcHVibGljOgogICAgIFZpc2l0Q291bnRlcigpIHsgfQogICAgIAotICAgIFZpc2l0
Q291bnRlcihTbG90VmlzaXRvciYgdmlzaXRvcikKKyAgICBWaXNpdENvdW50ZXIoQWJzdHJhY3RT
bG90VmlzaXRvciYgdmlzaXRvcikKICAgICAgICAgOiBtX3Zpc2l0b3IoJnZpc2l0b3IpCiAgICAg
ICAgICwgbV9pbml0aWFsVmlzaXRDb3VudCh2aXNpdG9yLnZpc2l0Q291bnQoKSkKICAgICB7CiAg
ICAgfQogICAgIAotICAgIFNsb3RWaXNpdG9yJiB2aXNpdG9yKCkgY29uc3QgeyByZXR1cm4gKm1f
dmlzaXRvcjsgfQorICAgIEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IoKSBjb25zdCB7IHJl
dHVybiAqbV92aXNpdG9yOyB9CiAgICAgCiAgICAgc2l6ZV90IHZpc2l0Q291bnQoKSBjb25zdAog
ICAgIHsKQEAgLTQ3LDcgKzQ3LDcgQEAgcHVibGljOgogICAgIH0KICAgICAKIHByaXZhdGU6Ci0g
ICAgU2xvdFZpc2l0b3IqIG1fdmlzaXRvciB7IG51bGxwdHIgfTsKKyAgICBBYnN0cmFjdFNsb3RW
aXNpdG9yKiBtX3Zpc2l0b3IgeyBudWxscHRyIH07CiAgICAgc2l6ZV90IG1faW5pdGlhbFZpc2l0
Q291bnQgeyAwIH07CiB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFr
QmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtC
bG9jay5jcHAJKHJldmlzaW9uIDI3MjcxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L1dlYWtCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk4LDEyICs5OCwxMSBAQCB2b2lkIFdl
YWtCbG9jazo6c3dlZXAoKQogICAgIEFTU0VSVCghbV9zd2VlcFJlc3VsdC5pc051bGwoKSk7CiB9
CiAKLXRlbXBsYXRlPHR5cGVuYW1lIENvbnRhaW5lclR5cGU+Ci12b2lkIFdlYWtCbG9jazo6c3Bl
Y2lhbGl6ZWRWaXNpdChDb250YWluZXJUeXBlJiBjb250YWluZXIsIFNsb3RWaXNpdG9yJiB2aXNp
dG9yKQordGVtcGxhdGU8dHlwZW5hbWUgQ29udGFpbmVyVHlwZSwgdHlwZW5hbWUgVmlzaXRvcj4K
K3ZvaWQgV2Vha0Jsb2NrOjpzcGVjaWFsaXplZFZpc2l0KENvbnRhaW5lclR5cGUmIGNvbnRhaW5l
ciwgVmlzaXRvciYgdmlzaXRvcikKIHsKLSAgICBIZWFwVmVyc2lvbiBtYXJraW5nVmVyc2lvbiA9
IHZpc2l0b3IubWFya2luZ1ZlcnNpb24oKTsKLQogICAgIHNpemVfdCBjb3VudCA9IHdlYWtJbXBs
Q291bnQoKTsKKyAgICBIZWFwQW5hbHl6ZXIqIGhlYXBBbmFseXplciA9IHZpc2l0b3Iudm0oKS5h
Y3RpdmVIZWFwQW5hbHl6ZXIoKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyAr
K2kpIHsKICAgICAgICAgV2Vha0ltcGwqIHdlYWtJbXBsID0gJndlYWtJbXBscygpW2ldOwogICAg
ICAgICBpZiAod2Vha0ltcGwtPnN0YXRlKCkgIT0gV2Vha0ltcGw6OkxpdmUpCkBAIC0xMTQsMTIg
KzExMywxMiBAQCB2b2lkIFdlYWtCbG9jazo6c3BlY2lhbGl6ZWRWaXNpdChDb250YWluCiAgICAg
ICAgICAgICBjb250aW51ZTsKIAogICAgICAgICBKU1ZhbHVlIGpzVmFsdWUgPSB3ZWFrSW1wbC0+
anNWYWx1ZSgpOwotICAgICAgICBpZiAoY29udGFpbmVyLmlzTWFya2VkKG1hcmtpbmdWZXJzaW9u
LCBqc1ZhbHVlLmFzQ2VsbCgpKSkKKyAgICAgICAgaWYgKHZpc2l0b3IuaXNNYXJrZWQoY29udGFp
bmVyLCBqc1ZhbHVlLmFzQ2VsbCgpKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAK
ICAgICAgICAgY29uc3QgY2hhciogcmVhc29uID0gIiI7CiAgICAgICAgIGNvbnN0IGNoYXIqKiBy
ZWFzb25QdHIgPSBudWxscHRyOwotICAgICAgICBpZiAoVU5MSUtFTFkodmlzaXRvci5pc0FuYWx5
emluZ0hlYXAoKSkpCisgICAgICAgIGlmIChVTkxJS0VMWShoZWFwQW5hbHl6ZXIpKQogICAgICAg
ICAgICAgcmVhc29uUHRyID0gJnJlYXNvbjsKIAogICAgICAgICBpZiAoIXdlYWtIYW5kbGVPd25l
ci0+aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSGFuZGxlPFVua25vd24+Ojp3cmFwU2xvdCgm
Y29uc3RfY2FzdDxKU1ZhbHVlJj4oanNWYWx1ZSkpLCB3ZWFrSW1wbC0+Y29udGV4dCgpLCB2aXNp
dG9yLCByZWFzb25QdHIpKQpAQCAtMTI3LDE0ICsxMjYsMTQgQEAgdm9pZCBXZWFrQmxvY2s6OnNw
ZWNpYWxpemVkVmlzaXQoQ29udGFpbgogCiAgICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVy
ZWQoanNWYWx1ZSk7CiAKLSAgICAgICAgaWYgKFVOTElLRUxZKHZpc2l0b3IuaXNBbmFseXppbmdI
ZWFwKCkpKSB7CisgICAgICAgIGlmIChVTkxJS0VMWShoZWFwQW5hbHl6ZXIpKSB7CiAgICAgICAg
ICAgICBpZiAoanNWYWx1ZS5pc0NlbGwoKSkKLSAgICAgICAgICAgICAgICB2aXNpdG9yLmhlYXBB
bmFseXplcigpLT5zZXRPcGFxdWVSb290UmVhY2hhYmlsaXR5UmVhc29uRm9yQ2VsbChqc1ZhbHVl
LmFzQ2VsbCgpLCAqcmVhc29uUHRyKTsKKyAgICAgICAgICAgICAgICBoZWFwQW5hbHl6ZXItPnNl
dE9wYXF1ZVJvb3RSZWFjaGFiaWxpdHlSZWFzb25Gb3JDZWxsKGpzVmFsdWUuYXNDZWxsKCksICpy
ZWFzb25QdHIpOwogICAgICAgICB9CiAgICAgfQogfQogCi12b2lkIFdlYWtCbG9jazo6dmlzaXQo
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIFdlYWtCbG9jazo6dmlzaXQoQWJzdHJhY3RTbG90
VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICAvLyBJZiBhIGJsb2NrIGlzIGNvbXBsZXRlbHkgZW1w
dHksIGEgdmlzaXQgd29uJ3QgaGF2ZSBhbnkgZWZmZWN0LgogICAgIGlmIChpc0VtcHR5KCkpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrQmxvY2suaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrQmxvY2suaAkocmV2aXNpb24gMjcyNzEw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha0Jsb2NrLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTMyLDggKzMyLDggQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKK2NsYXNzIEFic3RyYWN0
U2xvdFZpc2l0b3I7CiBjbGFzcyBIZWFwOwotY2xhc3MgU2xvdFZpc2l0b3I7CiAKIERFQ0xBUkVf
QUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKFdlYWtCbG9jayk7CiAKQEAgLTY1LDcgKzY1
LDcgQEAgcHVibGljOgogICAgIHZvaWQgc3dlZXAoKTsKICAgICBTd2VlcFJlc3VsdCB0YWtlU3dl
ZXBSZXN1bHQoKTsKIAotICAgIHZvaWQgdmlzaXQoU2xvdFZpc2l0b3ImKTsKKyAgICB2b2lkIHZp
c2l0KEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKIAogICAgIHZvaWQgcmVhcCgpOwogCkBAIC03NSw4
ICs3NSw4IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgc3RhdGljIEZyZWVDZWxsKiBhc0ZyZWVD
ZWxsKFdlYWtJbXBsKik7CiAgICAgCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgQ29udGFpbmVyVHlw
ZT4KLSAgICB2b2lkIHNwZWNpYWxpemVkVmlzaXQoQ29udGFpbmVyVHlwZSYsIFNsb3RWaXNpdG9y
Jik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ29udGFpbmVyVHlwZSwgdHlwZW5hbWUgVmlzaXRv
cj4KKyAgICB2b2lkIHNwZWNpYWxpemVkVmlzaXQoQ29udGFpbmVyVHlwZSYsIFZpc2l0b3ImKTsK
IAogICAgIGV4cGxpY2l0IFdlYWtCbG9jayhDZWxsQ29udGFpbmVyKTsKICAgICB2b2lkIGZpbmFs
aXplKFdlYWtJbXBsKik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrSGFu
ZGxlT3duZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dl
YWtIYW5kbGVPd25lci5jcHAJKHJldmlzaW9uIDI3MjcxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL1dlYWtIYW5kbGVPd25lci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDcgKzM1
LDcgQEAgV2Vha0hhbmRsZU93bmVyOjp+V2Vha0hhbmRsZU93bmVyKCkKIHsKIH0KIAotYm9vbCBX
ZWFrSGFuZGxlT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEhhbmRsZTxVbmtub3du
Piwgdm9pZCosIFNsb3RWaXNpdG9yJiwgY29uc3QgY2hhcioqKQorYm9vbCBXZWFrSGFuZGxlT3du
ZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEhhbmRsZTxVbmtub3duPiwgdm9pZCosIEFi
c3RyYWN0U2xvdFZpc2l0b3ImLCBjb25zdCBjaGFyKiopCiB7CiAgICAgcmV0dXJuIGZhbHNlOwog
fQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha0hhbmRsZU93bmVyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha0hhbmRsZU93bmVyLmgJ
KHJldmlzaW9uIDI3MjcxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtIYW5k
bGVPd25lci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSwxMyArMjksMTMgQEAKIAogbmFtZXNwYWNl
IEpTQyB7CiAKLWNsYXNzIFNsb3RWaXNpdG9yOworY2xhc3MgQWJzdHJhY3RTbG90VmlzaXRvcjsK
IAogY2xhc3MgSlNfRVhQT1JUX1BSSVZBVEUgV2Vha0hhbmRsZU93bmVyIHsKIHB1YmxpYzoKICAg
ICB2aXJ0dWFsIH5XZWFrSGFuZGxlT3duZXIoKTsKICAgICAvLyByZWFzb24gd2lsbCBvbmx5IGJl
IG5vbi1udWxsIHdoZW4gZ2VuZXJhdGluZyBhIGRlYnVnIEdDIGhlYXAgc25hcHNob3QuCi0gICAg
dmlydHVhbCBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEhhbmRsZTxVbmtub3duPiwg
dm9pZCogY29udGV4dCwgU2xvdFZpc2l0b3ImLCBjaGFyIGNvbnN0KiogcmVhc29uID0gbnVsbHB0
cik7CisgICAgdmlydHVhbCBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEhhbmRsZTxV
bmtub3duPiwgdm9pZCogY29udGV4dCwgQWJzdHJhY3RTbG90VmlzaXRvciYsIGNoYXIgY29uc3Qq
KiByZWFzb24gPSBudWxscHRyKTsKICAgICB2aXJ0dWFsIHZvaWQgZmluYWxpemUoSGFuZGxlPFVu
a25vd24+LCB2b2lkKiBjb250ZXh0KTsKIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL1dlYWtJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvV2Vha0lubGluZXMuaAkocmV2aXNpb24gMjcyNzEwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvV2Vha0lubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBA
QAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJKU0Nhc3QuaCIKKyNpbmNsdWRlICJXZWFrLmgi
CiAjaW5jbHVkZSAiV2Vha1NldElubGluZXMuaCIKICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5o
PgogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrU2V0LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha1NldC5oCShyZXZpc2lvbiAyNzI3
MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrU2V0LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTUxLDcgKzUxLDcgQEAgcHVibGljOgogICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0Owog
ICAgIGJvb2wgaXNUcml2aWFsbHlEZXN0cnVjdGlibGUoKSBjb25zdDsKIAotICAgIHZvaWQgdmlz
aXQoU2xvdFZpc2l0b3ImKTsKKyAgICB2b2lkIHZpc2l0KEFic3RyYWN0U2xvdFZpc2l0b3ImKTsK
IAogICAgIHZvaWQgcmVhcCgpOwogICAgIHZvaWQgc3dlZXAoKTsKQEAgLTExNCw3ICsxMTQsNyBA
QCBpbmxpbmUgdm9pZCBXZWFrU2V0OjpsYXN0Q2hhbmNlVG9GaW5hbGl6CiAgICAgICAgIGJsb2Nr
LT5sYXN0Q2hhbmNlVG9GaW5hbGl6ZSgpOwogfQogCi1pbmxpbmUgdm9pZCBXZWFrU2V0Ojp2aXNp
dChTbG90VmlzaXRvciYgdmlzaXRvcikKK2lubGluZSB2b2lkIFdlYWtTZXQ6OnZpc2l0KEFic3Ry
YWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgZm9yIChXZWFrQmxvY2sqIGJsb2NrID0g
bV9ibG9ja3MuaGVhZCgpOyBibG9jazsgYmxvY2sgPSBibG9jay0+bmV4dCgpKQogICAgICAgICBi
bG9jay0+dmlzaXQodmlzaXRvcik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJw
cmV0ZXIvU2hhZG93Q2hpY2tlbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ludGVycHJldGVyL1NoYWRvd0NoaWNrZW4uY3BwCShyZXZpc2lvbiAyNzI3MTApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU2hhZG93Q2hpY2tlbi5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQ0MCw3ICs0NDAsNyBAQCB2b2lkIFNoYWRvd0NoaWNrZW46OnVwZGF0ZShW
TSYgdm0sIENhbGxGCiAgICAgICAgIGRhdGFMb2coIiAgICBBZnRlciBjbGVhbi11cDogIiwgKnRo
aXMsICJcbiIpOwogfQogCi12b2lkIFNoYWRvd0NoaWNrZW46OnZpc2l0Q2hpbGRyZW4oU2xvdFZp
c2l0b3ImIHZpc2l0b3IpCit2b2lkIFNoYWRvd0NoaWNrZW46OnZpc2l0Q2hpbGRyZW4oQWJzdHJh
Y3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2xvZ0N1
cnNvciAtIG1fbG9nOyBpLS07KSB7CiAgICAgICAgIEpTT2JqZWN0KiBjYWxsZWUgPSBtX2xvZ1tp
XS5jYWxsZWU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU2hhZG93
Q2hpY2tlbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRl
ci9TaGFkb3dDaGlja2VuLmgJKHJldmlzaW9uIDI3MjcxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnRlcnByZXRlci9TaGFkb3dDaGlja2VuLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDEz
ICszNSwxMyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAorY2xhc3MgQWJzdHJhY3RTbG90VmlzaXRv
cjsKIGNsYXNzIENhbGxGcmFtZTsKIGNsYXNzIENvZGVCbG9jazsKIGNsYXNzIEpTQXJyYXk7CiBj
bGFzcyBKU09iamVjdDsKIGNsYXNzIEpTU2NvcGU7CiBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0
b3I7Ci1jbGFzcyBTbG90VmlzaXRvcjsKIGNsYXNzIFZNOwogCiAvLyBTaGFkb3dDaGlja2VuIGlz
IGEgbG9nIHRoYXQgY2FuIGJlIHVzZWQgdG8gcHJvZHVjZSBhIHNoYWRvdyBzdGFjayBvZiBDSElD
S0VOLXN0eWxlIHN0YWNrIGZyYW1lcy4KQEAgLTE5Niw3ICsxOTYsNyBAQCBwdWJsaWM6CiAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KICAgICB2b2lkIGl0ZXJhdGUoVk0mLCBDYWxsRnJh
bWUqLCBjb25zdCBGdW5jdG9yJik7CiAgICAgCi0gICAgdm9pZCB2aXNpdENoaWxkcmVuKFNsb3RW
aXNpdG9yJik7CisgICAgdm9pZCB2aXNpdENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsK
ICAgICB2b2lkIHJlc2V0KCk7CiAgICAgCiAgICAgLy8gSklUIHN1cHBvcnQuCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0dDQXdhcmVKSVRTdHViUm91dGluZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9HQ0F3YXJlSklUU3R1YlJvdXRpbmUuY3Bw
CShyZXZpc2lvbiAyNzI3MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0dDQXdhcmVK
SVRTdHViUm91dGluZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTczLDcgKzczLDcgQEAgdm9pZCBH
Q0F3YXJlSklUU3R1YlJvdXRpbmU6OmRlbGV0ZUZyb21HQwogICAgIGRlbGV0ZSB0aGlzOwogfQog
Ci12b2lkIEdDQXdhcmVKSVRTdHViUm91dGluZTo6bWFya1JlcXVpcmVkT2JqZWN0c0ludGVybmFs
KFNsb3RWaXNpdG9yJikKK3ZvaWQgR0NBd2FyZUpJVFN0dWJSb3V0aW5lOjptYXJrUmVxdWlyZWRP
YmplY3RzSW50ZXJuYWwoQWJzdHJhY3RTbG90VmlzaXRvciYpCiB7CiB9CiAKQEAgLTkyLDEzICs5
MiwxMiBAQCBNYXJraW5nR0NBd2FyZUpJVFN0dWJSb3V0aW5lOjp+TWFya2luZ0dDCiB7CiB9CiAK
LXZvaWQgTWFya2luZ0dDQXdhcmVKSVRTdHViUm91dGluZTo6bWFya1JlcXVpcmVkT2JqZWN0c0lu
dGVybmFsKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBNYXJraW5nR0NBd2FyZUpJVFN0dWJS
b3V0aW5lOjptYXJrUmVxdWlyZWRPYmplY3RzSW50ZXJuYWwoQWJzdHJhY3RTbG90VmlzaXRvciYg
dmlzaXRvcikKIHsKICAgICBmb3IgKGF1dG8mIGVudHJ5IDogbV9jZWxscykKICAgICAgICAgdmlz
aXRvci5hcHBlbmQoZW50cnkpOwogfQogCi0KIEdDQXdhcmVKSVRTdHViUm91dGluZVdpdGhFeGNl
cHRpb25IYW5kbGVyOjpHQ0F3YXJlSklUU3R1YlJvdXRpbmVXaXRoRXhjZXB0aW9uSGFuZGxlcigK
ICAgICBjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUU3R1YlJvdXRpbmVQdHJUYWc+JiBj
b2RlLCBWTSYgdm0sICBjb25zdCBKU0NlbGwqIG93bmVyLCBjb25zdCBWZWN0b3I8SlNDZWxsKj4m
IGNlbGxzLCBCYWc8Q2FsbExpbmtJbmZvPiYmIGNhbGxMaW5rSW5mb3MsCiAgICAgQ29kZUJsb2Nr
KiBjb2RlQmxvY2tGb3JFeGNlcHRpb25IYW5kbGVycywgRGlzcG9zYWJsZUNhbGxTaXRlSW5kZXgg
ZXhjZXB0aW9uSGFuZGxlckNhbGxTaXRlSW5kZXgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0dDQXdhcmVKSVRTdHViUm91dGluZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvR0NBd2FyZUpJVFN0dWJSb3V0aW5lLmgJKHJldmlzaW9uIDI3MjcxMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvR0NBd2FyZUpJVFN0dWJSb3V0aW5lLmgJKHdv
cmtpbmcgY29weSkKQEAgLTYwLDggKzYwLDggQEAgcHVibGljOgogICAgIHsKICAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKCpuZXcgR0NBd2FyZUpJVFN0dWJSb3V0aW5lKGNvZGUsIHZtKSk7CiAgICAg
fQotICAgIAotICAgIHZvaWQgbWFya1JlcXVpcmVkT2JqZWN0cyhTbG90VmlzaXRvciYgdmlzaXRv
cikKKworICAgIHZvaWQgbWFya1JlcXVpcmVkT2JqZWN0cyhBYnN0cmFjdFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQogICAgIHsKICAgICAgICAgbWFya1JlcXVpcmVkT2JqZWN0c0ludGVybmFsKHZpc2l0
b3IpOwogICAgIH0KQEAgLTcxLDcgKzcxLDcgQEAgcHVibGljOgogcHJvdGVjdGVkOgogICAgIHZv
aWQgb2JzZXJ2ZVplcm9SZWZDb3VudCgpIG92ZXJyaWRlOwogICAgIAotICAgIHZpcnR1YWwgdm9p
ZCBtYXJrUmVxdWlyZWRPYmplY3RzSW50ZXJuYWwoU2xvdFZpc2l0b3ImKTsKKyAgICB2aXJ0dWFs
IHZvaWQgbWFya1JlcXVpcmVkT2JqZWN0c0ludGVybmFsKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsK
IAogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgSklUU3R1YlJvdXRpbmVTZXQ7CkBAIC04OSw3
ICs4OSw3IEBAIHB1YmxpYzoKICAgICB+TWFya2luZ0dDQXdhcmVKSVRTdHViUm91dGluZSgpIG92
ZXJyaWRlOwogICAgIAogcHJvdGVjdGVkOgotICAgIHZvaWQgbWFya1JlcXVpcmVkT2JqZWN0c0lu
dGVybmFsKFNsb3RWaXNpdG9yJikgb3ZlcnJpZGU7CisgICAgdm9pZCBtYXJrUmVxdWlyZWRPYmpl
Y3RzSW50ZXJuYWwoQWJzdHJhY3RTbG90VmlzaXRvciYpIG92ZXJyaWRlOwogCiBwcml2YXRlOgog
ICAgIFZlY3RvcjxXcml0ZUJhcnJpZXI8SlNDZWxsPj4gbV9jZWxsczsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUV29ya2xpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUV29ya2xpc3QuY3BwCShyZXZpc2lvbiAyNzI3MTApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFdvcmtsaXN0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzMsNiArMzMsOCBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAorZXh0ZXJuIGJvb2wgbWxhbVZl
cmJvc2U7CisKIGNsYXNzIEpJVFdvcmtsaXN0OjpQbGFuIDogcHVibGljIFRocmVhZFNhZmVSZWZD
b3VudGVkPEpJVFdvcmtsaXN0OjpQbGFuPiB7CiBwdWJsaWM6CiAgICAgUGxhbihDb2RlQmxvY2sq
IGNvZGVCbG9jaywgQnl0ZWNvZGVJbmRleCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4KQpAQCAt
NjIsOCArNjQsMTcgQEAgcHVibGljOgogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBjYXNl
IENvbXBpbGF0aW9uU3VjY2Vzc2Z1bDoKICAgICAgICAgICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6
OnZlcmJvc2VPU1IoKSwgIiAgICBKSVQgY29tcGlsYXRpb24gc3VjY2Vzc2Z1bC4iKTsKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICBDb2RlQmxvY2sqIG9sZENvZGVCbG9jayA9IG1fY29k
ZUJsb2NrOworCiAgICAgICAgICAgICBtX2NvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCktPmlu
c3RhbGxDb2RlKG1fY29kZUJsb2NrKTsKICAgICAgICAgICAgIG1fY29kZUJsb2NrLT5qaXRTb29u
KCk7CisKKyAgICAgICAgICAgICAgICBpZiAobWxhbVZlcmJvc2UpIGRhdGFMb2dMbigiICAgIG1s
YW0gSklUV29ya2xpc3Q6OlBsYW46OmZpbmFsaXplKCkgSU5TVEFMTEVEIGNiICIsIG9sZENvZGVC
bG9jaywgIiA9PiAiLCBtX2NvZGVCbG9jaywgIiBCRUZPUkUgYmFycmllcnMgfCBpc1dpdGhpblRo
cmVzaG9sZDo6IG9sZENCICIsIGlzV2l0aGluVGhyZXNob2xkKG9sZENvZGVCbG9jay0+Y2VsbFN0
YXRlKCksIHZtKCkuaGVhcC5iYXJyaWVyVGhyZXNob2xkKCkpLCAiIG5ldyBDQiAiLCBpc1dpdGhp
blRocmVzaG9sZChtX2NvZGVCbG9jay0+Y2VsbFN0YXRlKCksIHZtKCkuaGVhcC5iYXJyaWVyVGhy
ZXNob2xkKCkpLCAiIHwgbXV0YXRvclNob3VsZEJlRmVuY2VkKCkgIiwgdm0oKS5oZWFwLm11dGF0
b3JTaG91bGRCZUZlbmNlZCgpLCAiIHwgaXNQb3NzaWJseUJsYWNrIG9sZENCICIsIChvbGRDb2Rl
QmxvY2stPmNlbGxTdGF0ZSgpID09IENlbGxTdGF0ZTo6UG9zc2libHlCbGFjayksICIgbmV3IENC
ICIsIChtX2NvZGVCbG9jay0+Y2VsbFN0YXRlKCkgPT0gQ2VsbFN0YXRlOjpQb3NzaWJseUJsYWNr
KSk7CisvLyAgICAgICAgICAgICAgICB2bSgpLmhlYXAud3JpdGVCYXJyaWVyKG9sZENvZGVCbG9j
ayk7IC8vIG1sYW0gRklYTUUgSEFDSworLy8gICAgICAgICAgICAgICAgdm0oKS5oZWFwLndyaXRl
QmFycmllcihtX2NvZGVCbG9jayk7IC8vIG1sYW0gRklYTUUgSEFDSworICAgICAgICAgICAgICAg
IGlmIChtbGFtVmVyYm9zZSkgZGF0YUxvZ0xuKCIgICAgbWxhbSBKSVRXb3JrbGlzdDo6UGxhbjo6
ZmluYWxpemUoKSBJTlNUQUxMRUQgY2IgIiwgb2xkQ29kZUJsb2NrLCAiID0+ICIsIG1fY29kZUJs
b2NrLCAiIEFGVEVSIGJhcnJpZXJzIik7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOwpAQCAtMTc3LDYgKzE4OCwxMCBAQCBib29sIEpJVFdvcmtsaXN0Ojpjb21wbGV0ZUFs
bEZvclZNKFZNJiB2CiAgICAgICAgICAgICAgICAgICAgIFsmXSAoUmVmUHRyPFBsYW4+JiBwbGFu
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJnBsYW4tPnZtKCkgIT0gJnZtKQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChtbGFtVmVyYm9zZSkgZGF0YUxvZ0xuKCJcbiAgICBtbGFtIEpJVFdvcmtsaXN0
Ojpjb21wbGV0ZUFsbEZvclZNOiBGSU5JU0hpbmcgY2IgIiwgcGxhbi0+Y29kZUJsb2NrKCksICJc
biIpOworLy8gICAgICAgICAgICAgICAgICAgICAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6dmVy
aWZ5R0MoKSAmJiB2aXNpdG9yKSkgeworLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgdm0u
aGVhcC53cml0ZUJhcnJpZXIocGxhbi0+Y29kZUJsb2NrKCkpOyAvLyBtbGFtIEZJWE1FIEhBQ0sK
Ky8vICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCFwbGFuLT5pc0ZpbmlzaGVkQ29tcGlsaW5nKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBkaWRGaW5kVW5maW5pc2hlZFBsYW4gPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUG9s
eW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUuY3BwCShyZXZpc2lvbiAyNzI3
MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1BvbHltb3JwaGljQ2FsbFN0dWJSb3V0
aW5lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM1LDcgKzEzNSw3IEBAIGJvb2wgUG9seW1vcnBo
aWNDYWxsU3R1YlJvdXRpbmU6OnZpc2l0V2UKICAgICByZXR1cm4gaXNTdGlsbExpdmU7CiB9CiAK
LXZvaWQgUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmU6Om1hcmtSZXF1aXJlZE9iamVjdHNJbnRl
cm5hbChTbG90VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRp
bmU6Om1hcmtSZXF1aXJlZE9iamVjdHNJbnRlcm5hbChBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNp
dG9yKQogewogICAgIGZvciAoYXV0byYgdmFyaWFudCA6IG1fdmFyaWFudHMpCiAgICAgICAgIHZp
c2l0b3IuYXBwZW5kKHZhcmlhbnQpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Q
b2x5bW9ycGhpY0NhbGxTdHViUm91dGluZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUuaAkocmV2aXNpb24gMjcyNzEw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Qb2x5bW9ycGhpY0NhbGxTdHViUm91dGlu
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDUsNyArMTA1LDcgQEAgcHVibGljOgogICAgIGJvb2wg
dmlzaXRXZWFrKFZNJikgZmluYWw7CiAKIHByaXZhdGU6Ci0gICAgdm9pZCBtYXJrUmVxdWlyZWRP
YmplY3RzSW50ZXJuYWwoU2xvdFZpc2l0b3ImKSBmaW5hbDsKKyAgICB2b2lkIG1hcmtSZXF1aXJl
ZE9iamVjdHNJbnRlcm5hbChBYnN0cmFjdFNsb3RWaXNpdG9yJikgZmluYWw7CiAKICAgICBWZWN0
b3I8V3JpdGVCYXJyaWVyPEpTQ2VsbD4sIDI+IG1fdmFyaWFudHM7CiAgICAgVW5pcXVlQXJyYXk8
dWludDMyX3Q+IG1fZmFzdENvdW50czsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0Fic3RyYWN0TW9kdWxlUmVjb3JkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9BYnN0cmFjdE1vZHVsZVJlY29yZC5jcHAJKHJldmlzaW9uIDI3Mjcx
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Fic3RyYWN0TW9kdWxlUmVjb3Jk
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjAsNyArNjAsOCBAQCB2b2lkIEFic3RyYWN0TW9kdWxl
UmVjb3JkOjpmaW5pc2hDcmVhdGlvCiAgICAgcHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKHZtLCAiZGVwZW5kZW5jaWVzTWFwIl9zKSwgbV9kZXBlbmRlbmNpZXNNYXAuZ2V0KCkp
OwogfQogCi12b2lkIEFic3RyYWN0TW9kdWxlUmVjb3JkOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCog
Y2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgor
dm9pZCBBYnN0cmFjdE1vZHVsZVJlY29yZDo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxs
LCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEFic3RyYWN0TW9kdWxlUmVjb3JkKiB0aGlzT2Jq
ZWN0ID0ganNDYXN0PEFic3RyYWN0TW9kdWxlUmVjb3JkKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dD
X09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNzAsNiArNzEsOCBAQCB2
b2lkIEFic3RyYWN0TW9kdWxlUmVjb3JkOjp2aXNpdENoaWxkcmVuCiAgICAgdmlzaXRvci5hcHBl
bmQodGhpc09iamVjdC0+bV9kZXBlbmRlbmNpZXNNYXApOwogfQogCitERUZJTkVfVklTSVRfQ0hJ
TERSRU4oQWJzdHJhY3RNb2R1bGVSZWNvcmQpOworCiB2b2lkIEFic3RyYWN0TW9kdWxlUmVjb3Jk
OjphcHBlbmRSZXF1ZXN0ZWRNb2R1bGUoY29uc3QgSWRlbnRpZmllciYgbW9kdWxlTmFtZSkKIHsK
ICAgICBtX3JlcXVlc3RlZE1vZHVsZXMuYWRkKG1vZHVsZU5hbWUuaW1wbCgpKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Fic3RyYWN0TW9kdWxlUmVjb3JkLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQWJzdHJhY3RNb2R1bGVSZWNv
cmQuaAkocmV2aXNpb24gMjcyNzEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
QWJzdHJhY3RNb2R1bGVSZWNvcmQuaAkod29ya2luZyBjb3B5KQpAQCAtMTM2LDcgKzEzNiw3IEBA
IHByb3RlY3RlZDoKICAgICBBYnN0cmFjdE1vZHVsZVJlY29yZChWTSYsIFN0cnVjdHVyZSosIGNv
bnN0IElkZW50aWZpZXImKTsKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTR2xvYmFsT2JqZWN0
KiwgVk0mKTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZp
c2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgdm9pZCBzZXRNb2R1
bGVFbnZpcm9ubWVudChKU0dsb2JhbE9iamVjdCosIEpTTW9kdWxlRW52aXJvbm1lbnQqKTsKIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJnTGlzdC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJnTGlzdC5jcHAJKHJldmlzaW9u
IDI3MjcxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FyZ0xpc3QuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC01MSw3ICs1MSw3IEBAIHZvaWQgQXJnTGlzdDo6Z2V0U2xpY2UoaW50
IHN0YXJ0SW5kZXgsIEEKICAgICByZXN1bHQubV9hcmdDb3VudCA9ICBtX2FyZ0NvdW50IC0gc3Rh
cnRJbmRleDsKIH0KIAotdm9pZCBNYXJrZWRBcmd1bWVudEJ1ZmZlcjo6bWFya0xpc3RzKFNsb3RW
aXNpdG9yJiB2aXNpdG9yLCBMaXN0U2V0JiBtYXJrU2V0KQordm9pZCBNYXJrZWRBcmd1bWVudEJ1
ZmZlcjo6bWFya0xpc3RzKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIExpc3RTZXQmIG1h
cmtTZXQpCiB7CiAgICAgTGlzdFNldDo6aXRlcmF0b3IgZW5kID0gbWFya1NldC5lbmQoKTsKICAg
ICBmb3IgKExpc3RTZXQ6Oml0ZXJhdG9yIGl0ID0gbWFya1NldC5iZWdpbigpOyBpdCAhPSBlbmQ7
ICsraXQpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FyZ0xpc3QuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcmdMaXN0LmgJKHJl
dmlzaW9uIDI3MjcxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FyZ0xpc3Qu
aAkod29ya2luZyBjb3B5KQpAQCAtMTE4LDcgKzExOCw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0
dXJuIHJlc3VsdDsKICAgICB9CiAgICAgICAgIAotICAgIHN0YXRpYyB2b2lkIG1hcmtMaXN0cyhT
bG90VmlzaXRvciYsIExpc3RTZXQmKTsKKyAgICBzdGF0aWMgdm9pZCBtYXJrTGlzdHMoQWJzdHJh
Y3RTbG90VmlzaXRvciYsIExpc3RTZXQmKTsKIAogICAgIHZvaWQgZW5zdXJlQ2FwYWNpdHkoc2l6
ZV90IHJlcXVlc3RlZENhcGFjaXR5KQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0NhY2hlYWJsZUlkZW50aWZpZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWFibGVJZGVudGlmaWVyLmgJKHJldmlzaW9uIDI3Mjcx
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlYWJsZUlkZW50aWZpZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtMzksMTAgKzM5LDEwIEBAIHVzaW5nIFdURjo6VW5pcXVlZFN0
cmluZ0ltcGw7CiAKIG5hbWVzcGFjZSBKU0MgewogCitjbGFzcyBBYnN0cmFjdFNsb3RWaXNpdG9y
OwogY2xhc3MgQ29kZUJsb2NrOwogY2xhc3MgSWRlbnRpZmllcjsKIGNsYXNzIEpTQ2VsbDsKLWNs
YXNzIFNsb3RWaXNpdG9yOwogCiBjbGFzcyBDYWNoZWFibGVJZGVudGlmaWVyIHsKIHB1YmxpYzoK
QEAgLTg3LDcgKzg3LDcgQEAgcHVibGljOgogCiAgICAgdWludHB0cl90IHJhd0JpdHMoKSBjb25z
dCB7IHJldHVybiBtX2JpdHM7IH0KIAotICAgIGlubGluZSB2b2lkIHZpc2l0QWdncmVnYXRlKFNs
b3RWaXNpdG9yJikgY29uc3Q7CisgICAgaW5saW5lIHZvaWQgdmlzaXRBZ2dyZWdhdGUoQWJzdHJh
Y3RTbG90VmlzaXRvciYpIGNvbnN0OwogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBkdW1w
KFByaW50U3RyZWFtJikgY29uc3Q7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0NhY2hlYWJsZUlkZW50aWZpZXJJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVhYmxlSWRlbnRpZmllcklubGluZXMuaAkocmV2aXNp
b24gMjcyNzEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVhYmxlSWRl
bnRpZmllcklubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMTM3LDEzICsxMzcsMTIgQEAgaW5s
aW5lIHZvaWQgQ2FjaGVhYmxlSWRlbnRpZmllcjo6c2V0VWlkQgogICAgIG1fYml0cyA9IGJpdHdp
c2VfY2FzdDx1aW50cHRyX3Q+KHVpZCkgfCBzX3VpZFRhZzsKIH0KIAotaW5saW5lIHZvaWQgQ2Fj
aGVhYmxlSWRlbnRpZmllcjo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpIGNv
bnN0CitpbmxpbmUgdm9pZCBDYWNoZWFibGVJZGVudGlmaWVyOjp2aXNpdEFnZ3JlZ2F0ZShBYnN0
cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBjb25zdAogewogICAgIGlmIChtX2JpdHMgJiYgaXND
ZWxsKCkpCiAgICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQoY2VsbCgpKTsKIH0KIAot
CiBpbmxpbmUgYm9vbCBDYWNoZWFibGVJZGVudGlmaWVyOjpvcGVyYXRvcj09KGNvbnN0IENhY2hl
YWJsZUlkZW50aWZpZXImIG90aGVyKSBjb25zdAogewogICAgIHJldHVybiB1aWQoKSA9PSBvdGhl
ci51aWQoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NsYXNzSW5mby5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NsYXNzSW5mby5o
CShyZXZpc2lvbiAyNzI3MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DbGFz
c0luZm8uaAkod29ya2luZyBjb3B5KQpAQCAtNDQsOSArNDQsNiBAQCBzdHJ1Y3QgTWV0aG9kVGFi
bGUgewogICAgIHVzaW5nIERlc3Ryb3lGdW5jdGlvblB0ciA9IHZvaWQgKCopKEpTQ2VsbCopOwog
ICAgIERlc3Ryb3lGdW5jdGlvblB0ciBNRVRIT0RfVEFCTEVfRU5UUlkoZGVzdHJveSk7CiAKLSAg
ICB1c2luZyBWaXNpdENoaWxkcmVuRnVuY3Rpb25QdHIgPSB2b2lkICgqKShKU0NlbGwqLCBTbG90
VmlzaXRvciYpOwotICAgIFZpc2l0Q2hpbGRyZW5GdW5jdGlvblB0ciBNRVRIT0RfVEFCTEVfRU5U
UlkodmlzaXRDaGlsZHJlbik7Ci0KICAgICB1c2luZyBHZXRDYWxsRGF0YUZ1bmN0aW9uUHRyID0g
Q2FsbERhdGEgKCopKEpTQ2VsbCopOwogICAgIEdldENhbGxEYXRhRnVuY3Rpb25QdHIgTUVUSE9E
X1RBQkxFX0VOVFJZKGdldENhbGxEYXRhKTsKIApAQCAtMTIwLDcgKzExNywxNiBAQCBzdHJ1Y3Qg
TWV0aG9kVGFibGUgewogICAgIHVzaW5nIEVzdGltYXRlZFNpemVGdW5jdGlvblB0ciA9IHNpemVf
dCAoKikoSlNDZWxsKiwgVk0mKTsKICAgICBFc3RpbWF0ZWRTaXplRnVuY3Rpb25QdHIgTUVUSE9E
X1RBQkxFX0VOVFJZKGVzdGltYXRlZFNpemUpOwogCi0gICAgdXNpbmcgVmlzaXRPdXRwdXRDb25z
dHJhaW50c1B0ciA9IHZvaWQgKCopKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgdXNpbmcg
VmlzaXRDaGlsZHJlbkZ1bmN0aW9uUHRyID0gdm9pZCAoKikoSlNDZWxsKiwgU2xvdFZpc2l0b3Im
KTsKKyAgICBWaXNpdENoaWxkcmVuRnVuY3Rpb25QdHIgTUVUSE9EX1RBQkxFX0VOVFJZKHZpc2l0
Q2hpbGRyZW5XaXRoU2xvdFZpc2l0b3IpOworCisgICAgdXNpbmcgVmlzaXRDaGlsZHJlbldpdGhB
YnN0cmFjdFNsb3RWaXNpdG9yUHRyID0gdm9pZCAoKikoSlNDZWxsKiwgQWJzdHJhY3RTbG90Vmlz
aXRvciYpOworICAgIFZpc2l0Q2hpbGRyZW5XaXRoQWJzdHJhY3RTbG90VmlzaXRvclB0ciBNRVRI
T0RfVEFCTEVfRU5UUlkodmlzaXRDaGlsZHJlbldpdGhBYnN0cmFjdFNsb3RWaXNpdG9yKTsKKwor
ICAgIEFMV0FZU19JTkxJTkUgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZp
c2l0b3ImIHZpc2l0b3IpIGNvbnN0IHsgdmlzaXRDaGlsZHJlbldpdGhTbG90VmlzaXRvcihjZWxs
LCB2aXNpdG9yKTsgfQorICAgIEFMV0FZU19JTkxJTkUgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2Vs
bCogY2VsbCwgQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikgY29uc3QgeyB2aXNpdENoaWxk
cmVuV2l0aEFic3RyYWN0U2xvdFZpc2l0b3IoY2VsbCwgdmlzaXRvcik7IH0KKworICAgIHVzaW5n
IFZpc2l0T3V0cHV0Q29uc3RyYWludHNQdHIgPSB2b2lkICgqKShKU0NlbGwqLCBBYnN0cmFjdFNs
b3RWaXNpdG9yJik7CiAgICAgVmlzaXRPdXRwdXRDb25zdHJhaW50c1B0ciBNRVRIT0RfVEFCTEVf
RU5UUlkodmlzaXRPdXRwdXRDb25zdHJhaW50cyk7CiB9OwogCkBAIC0xNDcsNyArMTUzLDYgQEAg
c3RydWN0IE1ldGhvZFRhYmxlIHsKICAgICBKU0Nhc3RpbmdIZWxwZXJzOjpJbmhlcml0c1RyYWl0
czxDbGFzc05hbWU+Ojp0eXBlUmFuZ2UsIFwKICAgICB7IFwKICAgICAgICAgJkNsYXNzTmFtZTo6
ZGVzdHJveSwgXAotICAgICAgICAmQ2xhc3NOYW1lOjp2aXNpdENoaWxkcmVuLCBcCiAgICAgICAg
ICZDbGFzc05hbWU6OmdldENhbGxEYXRhLCBcCiAgICAgICAgICZDbGFzc05hbWU6OmdldENvbnN0
cnVjdERhdGEsIFwKICAgICAgICAgJkNsYXNzTmFtZTo6cHV0LCBcCkBAIC0xNzMsNiArMTc4LDgg
QEAgc3RydWN0IE1ldGhvZFRhYmxlIHsKICAgICAgICAgJkNsYXNzTmFtZTo6ZHVtcFRvU3RyZWFt
LCBcCiAgICAgICAgICZDbGFzc05hbWU6OmFuYWx5emVIZWFwLCBcCiAgICAgICAgICZDbGFzc05h
bWU6OmVzdGltYXRlZFNpemUsIFwKKyAgICAgICAgJkNsYXNzTmFtZTo6dmlzaXRDaGlsZHJlbiwg
XAorICAgICAgICAmQ2xhc3NOYW1lOjp2aXNpdENoaWxkcmVuLCBcCiAgICAgICAgICZDbGFzc05h
bWU6OnZpc2l0T3V0cHV0Q29uc3RyYWludHMsIFwKICAgICB9LCBcCiAgICAgQ2xhc3NOYW1lOjpU
eXBlZEFycmF5U3RvcmFnZVR5cGUsIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0Nsb25lZEFyZ3VtZW50cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQ2xvbmVkQXJndW1lbnRzLmNwcAkocmV2aXNpb24gMjcyNzEwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xvbmVkQXJndW1lbnRzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjY3LDcgKzI2Nyw4IEBAIHZvaWQgQ2xvbmVkQXJndW1lbnRzOjptYXRlcmlhbGl6
ZVNwZWNpYWwKICAgICAgICAgbWF0ZXJpYWxpemVTcGVjaWFscyhnbG9iYWxPYmplY3QpOwogfQog
Ci12b2lkIENsb25lZEFyZ3VtZW50czo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgQ2xvbmVk
QXJndW1lbnRzOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0
b3IpCiB7CiAgICAgQ2xvbmVkQXJndW1lbnRzKiB0aGlzT2JqZWN0ID0ganNDYXN0PENsb25lZEFy
Z3VtZW50cyo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVj
dCwgaW5mbygpKTsKQEAgLTI3NSw1ICsyNzYsNyBAQCB2b2lkIENsb25lZEFyZ3VtZW50czo6dmlz
aXRDaGlsZHJlbihKU0NlCiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9jYWxsZWUp
OwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oQ2xvbmVkQXJndW1lbnRzKTsKKwogfSAvLyBu
YW1lc3BhY2UgSlNDCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Nsb25l
ZEFyZ3VtZW50cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0Nsb25lZEFyZ3VtZW50cy5oCShyZXZpc2lvbiAyNzI3MTApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9DbG9uZWRBcmd1bWVudHMuaAkod29ya2luZyBjb3B5KQpAQCAtNjIsNyAr
NjIsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZN
JiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlIHByb3RvdHlwZSk7CiAgICAgc3RhdGljIFN0cnVj
dHVyZSogY3JlYXRlU2xvd1B1dFN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1
ZSBwcm90b3R5cGUpOwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBT
bG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBERUNMQVJF
X0lORk87CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3Vt
ZW50cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGly
ZWN0QXJndW1lbnRzLmNwcAkocmV2aXNpb24gMjcyNzEwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvRGlyZWN0QXJndW1lbnRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTAsNyAr
OTAsOCBAQCBzaXplX3QgRGlyZWN0QXJndW1lbnRzOjplc3RpbWF0ZWRTaXplKEpTCiAgICAgcmV0
dXJuIEJhc2U6OmVzdGltYXRlZFNpemUoY2VsbCwgdm0pICsgbWFwcGVkQXJndW1lbnRzU2l6ZSAr
IG1vZGlmaWVkQXJndW1lbnRzU2l6ZTsKIH0KIAotdm9pZCBEaXJlY3RBcmd1bWVudHM6OnZpc2l0
Q2hpbGRyZW4oSlNDZWxsKiB0aGlzQ2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0
ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBEaXJlY3RBcmd1bWVudHM6OnZpc2l0Q2hpbGRyZW5J
bXBsKEpTQ2VsbCogdGhpc0NlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgRGlyZWN0QXJn
dW1lbnRzKiB0aGlzT2JqZWN0ID0gc3RhdGljX2Nhc3Q8RGlyZWN0QXJndW1lbnRzKj4odGhpc0Nl
bGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsK
QEAgLTEwNCw2ICsxMDUsOCBAQCB2b2lkIERpcmVjdEFyZ3VtZW50czo6dmlzaXRDaGlsZHJlbihK
U0NlCiAgICAgR2VuZXJpY0FyZ3VtZW50czxEaXJlY3RBcmd1bWVudHM+Ojp2aXNpdENoaWxkcmVu
KHRoaXNDZWxsLCB2aXNpdG9yKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKERpcmVjdEFy
Z3VtZW50cyk7CisKIFN0cnVjdHVyZSogRGlyZWN0QXJndW1lbnRzOjpjcmVhdGVTdHJ1Y3R1cmUo
Vk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkK
IHsKICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90
eXBlLCBUeXBlSW5mbyhEaXJlY3RBcmd1bWVudHNUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8o
KSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EaXJlY3RBcmd1bWVudHMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EaXJlY3RBcmd1
bWVudHMuaAkocmV2aXNpb24gMjcyNzEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvRGlyZWN0QXJndW1lbnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTY1LDcgKzY1LDcgQEAgcHVi
bGljOgogICAgIHN0YXRpYyBEaXJlY3RBcmd1bWVudHMqIGNyZWF0ZUJ5Q29weWluZyhKU0dsb2Jh
bE9iamVjdCosIENhbGxGcmFtZSopOwogCiAgICAgc3RhdGljIHNpemVfdCBlc3RpbWF0ZWRTaXpl
KEpTQ2VsbCosIFZNJik7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBT
bG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAgICAgCiAgICAgdWlu
dDMyX3QgaW50ZXJuYWxMZW5ndGgoKSBjb25zdAogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0V2YWxFeGVjdXRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9FdmFsRXhlY3V0YWJsZS5jcHAJKHJldmlzaW9uIDI3Mjcx
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V2YWxFeGVjdXRhYmxlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsOSBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAorZXh0
ZXJuIHVuc2lnbmVkIG1sYW1UaW1lOworZXh0ZXJuIGJvb2wgbWxhbVZlcmJvc2U7CisKIGNvbnN0
IENsYXNzSW5mbyBFdmFsRXhlY3V0YWJsZTo6c19pbmZvID0geyAiRXZhbEV4ZWN1dGFibGUiLCAm
QmFzZTo6c19pbmZvLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEV2YWxF
eGVjdXRhYmxlKSB9OwogCiBFdmFsRXhlY3V0YWJsZTo6RXZhbEV4ZWN1dGFibGUoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBib29sIGluU3Ry
aWN0Q29udGV4dCwgRGVyaXZlZENvbnRleHRUeXBlIGRlcml2ZWRDb250ZXh0VHlwZSwgYm9vbCBp
c0Fycm93RnVuY3Rpb25Db250ZXh0LCBib29sIGlzSW5zaWRlT3JkaW5hcnlGdW5jdGlvbiwgRXZh
bENvbnRleHRUeXBlIGV2YWxDb250ZXh0VHlwZSwgTmVlZHNDbGFzc0ZpZWxkSW5pdGlhbGl6ZXIg
bmVlZHNDbGFzc0ZpZWxkSW5pdGlhbGl6ZXIsIFByaXZhdGVCcmFuZFJlcXVpcmVtZW50IHByaXZh
dGVCcmFuZFJlcXVpcmVtZW50KQpAQCAtNTAsMTggKzUzLDI3IEBAIGF1dG8gRXZhbEV4ZWN1dGFi
bGU6OmVuc3VyZVRlbXBsYXRlT2JqZWMKICAgICByZXR1cm4gZW5zdXJlVGVtcGxhdGVPYmplY3RN
YXBJbXBsKG1fdGVtcGxhdGVPYmplY3RNYXApOwogfQogCi12b2lkIEV2YWxFeGVjdXRhYmxlOjp2
aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0
ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBFdmFsRXhlY3V0YWJsZTo6dmlzaXRDaGlsZHJlbklt
cGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogeworICAgIGlmIChtbGFtVmVyYm9z
ZSkgZGF0YUxvZ0xuKCIgICAgbWxhbSBFdmFsRXhlY3V0YWJsZTwiLCBSYXdQb2ludGVyKGNlbGwp
LCAiPjo6dmlzaXRDaGlsZHJlbkltcGw6IDxnYyMiLCBtbGFtVGltZSwgIj4gdmlzaXRvciAiLCB2
aXNpdG9yLmNvZGVOYW1lKCkpOworCiAgICAgRXZhbEV4ZWN1dGFibGUqIHRoaXNPYmplY3QgPSBq
c0Nhc3Q8RXZhbEV4ZWN1dGFibGUqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVS
SVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2Jq
ZWN0LCB2aXNpdG9yKTsKKyAgICBpZiAobWxhbVZlcmJvc2UpIGRhdGFMb2dMbigiICAgIG1sYW0g
RXZhbEV4ZWN1dGFibGU8IiwgUmF3UG9pbnRlcihjZWxsKSwgIj46OnZpc2l0Q2hpbGRyZW5JbXBs
OiA8Z2MjIiwgbWxhbVRpbWUsICI+IHZpc2l0b3IgIiwgdmlzaXRvci5jb2RlTmFtZSgpLCAiIHwg
YXBwZW5kIG1fdW5saW5rZWRFdmFsQ29kZUJsb2NrICIsIFJhd1BvaW50ZXIodGhpc09iamVjdC0+
bV91bmxpbmtlZEV2YWxDb2RlQmxvY2suZ2V0KCkpKTsKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlz
T2JqZWN0LT5tX3VubGlua2VkRXZhbENvZGVCbG9jayk7CisgICAgaWYgKG1sYW1WZXJib3NlKSBk
YXRhTG9nTG4oIiAgICBtbGFtIEV2YWxFeGVjdXRhYmxlPCIsIFJhd1BvaW50ZXIoY2VsbCksICI+
Ojp2aXNpdENoaWxkcmVuSW1wbDogPGdjIyIsIG1sYW1UaW1lLCAiPiB2aXNpdG9yICIsIHZpc2l0
b3IuY29kZU5hbWUoKSwgIiB8IGFwcGVuZCBtX2V2YWxDb2RlQmxvY2sgIiwgUmF3UG9pbnRlcih0
aGlzT2JqZWN0LT5tX2V2YWxDb2RlQmxvY2suZ2V0KCkpKTsKICAgICB2aXNpdG9yLmFwcGVuZCh0
aGlzT2JqZWN0LT5tX2V2YWxDb2RlQmxvY2spOwogICAgIGlmIChUZW1wbGF0ZU9iamVjdE1hcCog
bWFwID0gdGhpc09iamVjdC0+bV90ZW1wbGF0ZU9iamVjdE1hcC5nZXQoKSkgewogICAgICAgICBh
dXRvIGxvY2tlciA9IGhvbGRMb2NrKHRoaXNPYmplY3QtPmNlbGxMb2NrKCkpOwotICAgICAgICBm
b3IgKGF1dG8mIGVudHJ5IDogKm1hcCkKKyAgICAgICAgZm9yIChhdXRvJiBlbnRyeSA6ICptYXAp
IHsKKyAgICAgICAgICAgIGlmIChtbGFtVmVyYm9zZSkgZGF0YUxvZ0xuKCIgICAgbWxhbSBFdmFs
RXhlY3V0YWJsZTwiLCBSYXdQb2ludGVyKGNlbGwpLCAiPjo6dmlzaXRDaGlsZHJlbkltcGw6IDxn
YyMiLCBtbGFtVGltZSwgIj4gdmlzaXRvciAiLCB2aXNpdG9yLmNvZGVOYW1lKCksICIgfCBhcHBl
bmQgbV90ZW1wbGF0ZU9iamVjdE1hcCAiLCBSYXdQb2ludGVyKGVudHJ5LnZhbHVlLmdldCgpKSk7
CiAgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZChlbnRyeS52YWx1ZSk7CisgICAgICAgIH0KICAg
ICB9CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihFdmFsRXhlY3V0YWJsZSk7CisKIH0gLy8g
bmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXZhbEV4
ZWN1dGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9F
dmFsRXhlY3V0YWJsZS5oCShyZXZpc2lvbiAyNzI3MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9FdmFsRXhlY3V0YWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03OSw3ICs3OSw3
IEBAIHByb3RlY3RlZDoKICAgICB1c2luZyBCYXNlOjpmaW5pc2hDcmVhdGlvbjsKICAgICBFdmFs
RXhlY3V0YWJsZShKU0dsb2JhbE9iamVjdCosIGNvbnN0IFNvdXJjZUNvZGUmLCBib29sIGluU3Ry
aWN0Q29udGV4dCwgRGVyaXZlZENvbnRleHRUeXBlLCBib29sIGlzQXJyb3dGdW5jdGlvbkNvbnRl
eHQsIGJvb2wgaXNJbnNpZGVPcmRpbmFyeUZ1bmN0aW9uLCBFdmFsQ29udGV4dFR5cGUsIE5lZWRz
Q2xhc3NGaWVsZEluaXRpYWxpemVyLCBQcml2YXRlQnJhbmRSZXF1aXJlbWVudCk7CiAKLSAgICBz
dGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVD
TEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIHVuc2lnbmVkIG1fbmVlZHNDbGFzc0ZpZWxkSW5p
dGlhbGl6ZXIgOiAxOwogICAgIHVuc2lnbmVkIG1fcHJpdmF0ZUJyYW5kUmVxdWlyZW1lbnQgOiAx
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9uLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGNlcHRpb24uY3BwCShy
ZXZpc2lvbiAyNzI3MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGNlcHRp
b24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Myw3ICs1Myw4IEBAIFN0cnVjdHVyZSogRXhjZXB0
aW9uOjpjcmVhdGVTdHJ1Y3R1cmUoVk0KICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0s
IGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhDZWxsVHlwZSwgU3RydWN0dXJlRmxh
Z3MpLCBpbmZvKCkpOwogfQogCi12b2lkIEV4Y2VwdGlvbjo6dmlzaXRDaGlsZHJlbihKU0NlbGwq
IGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4K
K3ZvaWQgRXhjZXB0aW9uOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3Im
IHZpc2l0b3IpCiB7CiAgICAgRXhjZXB0aW9uKiB0aGlzT2JqZWN0ID0ganNDYXN0PEV4Y2VwdGlv
bio+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5m
bygpKTsKQEAgLTY0LDYgKzY1LDggQEAgdm9pZCBFeGNlcHRpb246OnZpc2l0Q2hpbGRyZW4oSlND
ZWxsKiBjZQogICAgICAgICBmcmFtZS52aXNpdENoaWxkcmVuKHZpc2l0b3IpOwogfQogCitERUZJ
TkVfVklTSVRfQ0hJTERSRU4oRXhjZXB0aW9uKTsKKwogRXhjZXB0aW9uOjpFeGNlcHRpb24oVk0m
IHZtKQogICAgIDogQmFzZSh2bSwgdm0uZXhjZXB0aW9uU3RydWN0dXJlLmdldCgpKQogewpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9uLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9uLmgJKHJldmlzaW9uIDI3
MjcxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbi5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC01MSw3ICs1MSw3IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBTdHJ1Y3R1
cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBwcm90b3R5
cGUpOwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRv
ciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBERUNMQVJFX0VYUE9SVF9J
TkZPOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvbkV4ZWN1
dGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1
bmN0aW9uRXhlY3V0YWJsZS5jcHAJKHJldmlzaW9uIDI3MjcxMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTY3LDcgKzY3LDggQEAgRnVuY3Rpb25Db2RlQmxvY2sqIEZ1bmN0aW9uRXhlY3V0YWJsZTo6Ygog
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxGdW5jdGlvbkNvZGVCbG9jayo+KGVkZ2UtPmNvZGVCbG9j
aygpLT5iYXNlbGluZUFsdGVybmF0aXZlKCkpOwogfQogCi12b2lkIEZ1bmN0aW9uRXhlY3V0YWJs
ZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVt
cGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgRnVuY3Rpb25FeGVjdXRhYmxlOjp2aXNpdENo
aWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgRnVuY3Rp
b25FeGVjdXRhYmxlKiB0aGlzT2JqZWN0ID0ganNDYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGNl
bGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsK
QEAgLTg2LDYgKzg3LDggQEAgdm9pZCBGdW5jdGlvbkV4ZWN1dGFibGU6OnZpc2l0Q2hpbGRyZW4o
SgogICAgIH0KIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEZ1bmN0aW9uRXhlY3V0YWJsZSk7
CisKIEZ1bmN0aW9uRXhlY3V0YWJsZSogRnVuY3Rpb25FeGVjdXRhYmxlOjpmcm9tR2xvYmFsQ29k
ZSgKICAgICBjb25zdCBJZGVudGlmaWVyJiBuYW1lLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIAogICAgIEpTT2JqZWN0KiYgZXhjZXB0aW9u
LCBpbnQgb3ZlcnJpZGVMaW5lTnVtYmVyLCBPcHRpb25hbDxpbnQ+IGZ1bmN0aW9uQ29uc3RydWN0
b3JQYXJhbWV0ZXJzRW5kUG9zaXRpb24pCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9GdW5jdGlvbkV4ZWN1dGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9GdW5jdGlvbkV4ZWN1dGFibGUuaAkocmV2aXNpb24gMjcyNzEwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25FeGVjdXRhYmxlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTE2Niw3ICsxNjYsNyBAQCBwdWJsaWM6CiAgICAgSlNQYXJzZXJTY3JpcHRN
b2RlIHNjcmlwdE1vZGUoKSBjb25zdCB7IHJldHVybiBtX3VubGlua2VkRXhlY3V0YWJsZS0+c2Ny
aXB0TW9kZSgpOyB9CiAgICAgU291cmNlQ29kZSBjbGFzc1NvdXJjZSgpIGNvbnN0IHsgcmV0dXJu
IG1fdW5saW5rZWRFeGVjdXRhYmxlLT5jbGFzc1NvdXJjZSgpOyB9CiAKLSAgICBzdGF0aWMgdm9p
ZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJ
VF9DSElMRFJFTjsKICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZt
LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvKQogICAgIHsKICAg
ICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvLCBU
eXBlSW5mbyhGdW5jdGlvbkV4ZWN1dGFibGVUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvblJhcmVEYXRhLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvblJh
cmVEYXRhLmNwcAkocmV2aXNpb24gMjcyNzEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvRnVuY3Rpb25SYXJlRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUxLDcgKzUxLDgg
QEAgU3RydWN0dXJlKiBGdW5jdGlvblJhcmVEYXRhOjpjcmVhdGVTdHJ1YwogICAgIHJldHVybiBT
dHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKENl
bGxUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CiB9CiAKLXZvaWQgRnVuY3Rpb25SYXJl
RGF0YTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQor
dGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgRnVuY3Rpb25SYXJlRGF0YTo6dmlzaXRD
aGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEZ1bmN0
aW9uUmFyZURhdGEqIHJhcmVEYXRhID0ganNDYXN0PEZ1bmN0aW9uUmFyZURhdGEqPihjZWxsKTsK
ICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNlbGwsIGluZm8oKSk7CkBAIC02Myw2ICs2
NCw4IEBAIHZvaWQgRnVuY3Rpb25SYXJlRGF0YTo6dmlzaXRDaGlsZHJlbihKU0MKICAgICB2aXNp
dG9yLmFwcGVuZChyYXJlRGF0YS0+bV9leGVjdXRhYmxlKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NI
SUxEUkVOKEZ1bmN0aW9uUmFyZURhdGEpOworCiBGdW5jdGlvblJhcmVEYXRhOjpGdW5jdGlvblJh
cmVEYXRhKFZNJiB2bSwgRXhlY3V0YWJsZUJhc2UqIGV4ZWN1dGFibGUpCiAgICAgOiBCYXNlKHZt
LCB2bS5mdW5jdGlvblJhcmVEYXRhU3RydWN0dXJlLmdldCgpKQogICAgICwgbV9vYmplY3RBbGxv
Y2F0aW9uUHJvZmlsZSgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5j
dGlvblJhcmVEYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvRnVuY3Rpb25SYXJlRGF0YS5oCShyZXZpc2lvbiAyNzI3MTApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9GdW5jdGlvblJhcmVEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTY1
LDcgKzY1LDcgQEAgcHVibGljOgogCiAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0
dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlIHByb3RvdHlwZSk7CiAKLSAgICBzdGF0
aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFS
RV9WSVNJVF9DSElMRFJFTjsKIAogICAgIERFQ0xBUkVfSU5GTzsKIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50cy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNBcmd1bWVudHMuaAkocmV2aXNpb24g
MjcyNzEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCw3ICs0NCw3IEBAIHByb3RlY3RlZDoKICAgICB7CiAg
ICAgfQogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRv
ciYpOworICAgIERFQ0xBUkVfVEVNUExBVEVfVklTSVRfQ0hJTERSRU47CiAgICAgc3RhdGljIGJv
b2wgZ2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0
eU5hbWUsIFByb3BlcnR5U2xvdCYpOwogICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xv
dEJ5SW5kZXgoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIHVuc2lnbmVkIHByb3BlcnR5TmFt
ZSwgUHJvcGVydHlTbG90Jik7CiAgICAgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhK
U09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lQXJyYXkmLCBEb250RW51bVBy
b3BlcnRpZXNNb2RlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVy
aWNBcmd1bWVudHNJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50c0lubGluZXMuaAkocmV2aXNpb24gMjcyNzEwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50c0lubGluZXMuaAko
d29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsOCBAQAogbmFtZXNwYWNlIEpTQyB7CiAKIHRlbXBs
YXRlPHR5cGVuYW1lIFR5cGU+Ci12b2lkIEdlbmVyaWNBcmd1bWVudHM8VHlwZT46OnZpc2l0Q2hp
bGRyZW4oSlNDZWxsKiB0aGlzQ2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0
eXBlbmFtZSBWaXNpdG9yPgordm9pZCBHZW5lcmljQXJndW1lbnRzPFR5cGU+Ojp2aXNpdENoaWxk
cmVuSW1wbChKU0NlbGwqIHRoaXNDZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFR5cGUq
IHRoaXNPYmplY3QgPSBzdGF0aWNfY2FzdDxUeXBlKj4odGhpc0NlbGwpOwogICAgIEFTU0VSVF9H
Q19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTQxLDYgKzQyLDggQEAg
dm9pZCBHZW5lcmljQXJndW1lbnRzPFR5cGU+Ojp2aXNpdENoaWxkcgogICAgICAgICB2aXNpdG9y
Lm1hcmtBdXhpbGlhcnkodGhpc09iamVjdC0+bV9tb2RpZmllZEFyZ3VtZW50c0Rlc2NyaXB0b3Iu
Z2V0VW5zYWZlKCkpOwogfQogCitERUZJTkVfVEVNUExBVEVfVklTSVRfQ0hJTERSRU4odGVtcGxh
dGU8dHlwZW5hbWUgVHlwZT4sIEdlbmVyaWNBcmd1bWVudHM8VHlwZT4pOworCiB0ZW1wbGF0ZTx0
eXBlbmFtZSBUeXBlPgogYm9vbCBHZW5lcmljQXJndW1lbnRzPFR5cGU+OjpnZXRPd25Qcm9wZXJ0
eVNsb3QoSlNPYmplY3QqIG9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUHJv
cGVydHlOYW1lIGlkZW50LCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9HZXR0ZXJTZXR0ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dldHRlclNldHRlci5jcHAJKHJldmlzaW9uIDI3Mjcx
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dldHRlclNldHRlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTMzLDcgKzMzLDggQEAgU1RBVElDX0FTU0VSVF9JU19UUklWSUFMTFlf
REVTVFJVQ1RJQkxFKAogCiBjb25zdCBDbGFzc0luZm8gR2V0dGVyU2V0dGVyOjpzX2luZm8gPSB7
ICJHZXR0ZXJTZXR0ZXIiLCBudWxscHRyLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9E
X1RBQkxFKEdldHRlclNldHRlcikgfTsKIAotdm9pZCBHZXR0ZXJTZXR0ZXI6OnZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1l
IFZpc2l0b3I+Cit2b2lkIEdldHRlclNldHRlcjo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBj
ZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEdldHRlclNldHRlciogdGhpc09iamVjdCA9
IGpzQ2FzdDxHZXR0ZXJTZXR0ZXIqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVS
SVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC00Myw2ICs0NCw4IEBAIHZvaWQgR2V0dGVyU2V0
dGVyOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCoKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0
LT5tX3NldHRlcik7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihHZXR0ZXJTZXR0ZXIpOwor
CiBKU1ZhbHVlIGNhbGxHZXR0ZXIoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1
ZSBiYXNlLCBKU1ZhbHVlIGdldHRlclNldHRlcikKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmpl
Y3QtPnZtKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZXR0ZXJTZXR0
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZXR0ZXJT
ZXR0ZXIuaAkocmV2aXNpb24gMjcyNzEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvR2V0dGVyU2V0dGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTgyLDcgKzgyLDcgQEAgcHVibGlj
OgogICAgICAgICByZXR1cm4gY3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIGdldHRlck9iamVjdCwg
c2V0dGVyT2JqZWN0KTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpT
Q2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAg
IEpTT2JqZWN0KiBnZXR0ZXIoKSBjb25zdCB7IHJldHVybiBtX2dldHRlci5nZXQoKTsgfQogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9IYXNoTWFwSW1wbC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSGFzaE1hcEltcGwuY3BwCShy
ZXZpc2lvbiAyNzI3MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9IYXNoTWFw
SW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDkgQEAKIAogbmFtZXNwYWNlIEpT
QyB7CiAKK0RFRklORV9URU1QTEFURV9WSVNJVF9DSElMRFJFTih0ZW1wbGF0ZTw+LCBIYXNoTWFw
QnVja2V0PEhhc2hNYXBCdWNrZXREYXRhS2V5Pik7CitERUZJTkVfVEVNUExBVEVfVklTSVRfQ0hJ
TERSRU4odGVtcGxhdGU8PiwgSGFzaE1hcEJ1Y2tldDxIYXNoTWFwQnVja2V0RGF0YUtleVZhbHVl
Pik7CisKIHRlbXBsYXRlPD4KIGNvbnN0IENsYXNzSW5mbyBIYXNoTWFwQnVja2V0PEhhc2hNYXBC
dWNrZXREYXRhS2V5Pjo6c19pbmZvID0KICAgICB7ICJIYXNoTWFwQnVja2V0IiwgbnVsbHB0ciwg
bnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShIYXNoTWFwQnVja2V0PEhhc2hN
YXBCdWNrZXREYXRhS2V5PikgfTsKQEAgLTM4LDggKzQxLDkgQEAgdGVtcGxhdGU8PgogY29uc3Qg
Q2xhc3NJbmZvIEhhc2hNYXBCdWNrZXQ8SGFzaE1hcEJ1Y2tldERhdGFLZXlWYWx1ZT46OnNfaW5m
byA9CiAgICAgeyAiSGFzaE1hcEJ1Y2tldCIsIG51bGxwdHIsIG51bGxwdHIsIG51bGxwdHIsIENS
RUFURV9NRVRIT0RfVEFCTEUoSGFzaE1hcEJ1Y2tldDxIYXNoTWFwQnVja2V0RGF0YUtleVZhbHVl
PikgfTsKIAotdGVtcGxhdGUgPHR5cGVuYW1lIERhdGE+Ci12b2lkIEhhc2hNYXBCdWNrZXQ8RGF0
YT46OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3Rl
bXBsYXRlPHR5cGVuYW1lIERhdGE+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBI
YXNoTWFwQnVja2V0PERhdGE+Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0
b3ImIHZpc2l0b3IpCiB7CiAgICAgSGFzaE1hcEJ1Y2tldCogdGhpc09iamVjdCA9IGpzQ2FzdDxI
YXNoTWFwQnVja2V0Kj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlz
T2JqZWN0LCBpbmZvKCkpOwpAQCAtNTIsOCArNTYsOSBAQCB2b2lkIEhhc2hNYXBCdWNrZXQ8RGF0
YT46OnZpc2l0Q2hpbGRyZW4oCiAgICAgdmlzaXRvci5hcHBlbmRWYWx1ZXMoYml0d2lzZV9jYXN0
PFdyaXRlQmFycmllcjxVbmtub3duPio+KCZ0aGlzT2JqZWN0LT5tX2RhdGEpLCBzaXplb2YoRGF0
YSkgLyBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSk7CiB9CiAKLXRlbXBsYXRlIDx0eXBl
bmFtZSBIYXNoTWFwQnVja2V0Pgotdm9pZCBIYXNoTWFwSW1wbDxIYXNoTWFwQnVja2V0Pjo6dmlz
aXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8
dHlwZW5hbWUgSGFzaE1hcEJ1Y2tldD4KK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lk
IEhhc2hNYXBJbXBsPEhhc2hNYXBCdWNrZXQ+Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNl
bGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSGFzaE1hcEltcGwqIHRoaXNPYmplY3QgPSBq
c0Nhc3Q8SGFzaE1hcEltcGwqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRT
KHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC02Niw2ICs3MSw4IEBAIHZvaWQgSGFzaE1hcEltcGw8
SGFzaE1hcEJ1Y2tldD46OnZpc2l0Q2gKICAgICAgICAgdmlzaXRvci5tYXJrQXV4aWxpYXJ5KGJ1
ZmZlcik7CiB9CiAKK0RFRklORV9URU1QTEFURV9WSVNJVF9DSElMRFJFTih0ZW1wbGF0ZTx0eXBl
bmFtZSBIYXNoTWFwQnVja2V0PiwgSGFzaE1hcEltcGw8SGFzaE1hcEJ1Y2tldD4pOworCiB0ZW1w
bGF0ZSA8dHlwZW5hbWUgSGFzaE1hcEJ1Y2tldD4KIHNpemVfdCBIYXNoTWFwSW1wbDxIYXNoTWFw
QnVja2V0Pjo6ZXN0aW1hdGVkU2l6ZShKU0NlbGwqIGNlbGwsIFZNJiB2bSkKIHsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0hhc2hNYXBJbXBsLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSGFzaE1hcEltcGwuaAkocmV2aXNpb24gMjcy
NzEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSGFzaE1hcEltcGwuaAkod29y
a2luZyBjb3B5KQpAQCAtMTQ4LDcgKzE0OCw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1f
ZGF0YS52YWx1ZS5nZXQoKTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVu
KEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9URU1QTEFURV9WSVNJVF9DSElM
RFJFTjsKIAogICAgIEFMV0FZU19JTkxJTkUgSGFzaE1hcEJ1Y2tldCogbmV4dCgpIGNvbnN0IHsg
cmV0dXJuIG1fbmV4dC5nZXQoKTsgfQogICAgIEFMV0FZU19JTkxJTkUgSGFzaE1hcEJ1Y2tldCog
cHJldigpIGNvbnN0IHsgcmV0dXJuIG1fcHJldi5nZXQoKTsgfQpAQCAtMzY0LDcgKzM2NCw3IEBA
IGNsYXNzIEhhc2hNYXBJbXBsIDogcHVibGljIEpTTm9uRmluYWxPYmoKIHB1YmxpYzoKICAgICB1
c2luZyBCdWNrZXRUeXBlID0gSGFzaE1hcEJ1Y2tldFR5cGU7CiAKLSAgICBzdGF0aWMgdm9pZCB2
aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9URU1QTEFU
RV9WSVNJVF9DSElMRFJFTjsKIAogICAgIHN0YXRpYyBzaXplX3QgZXN0aW1hdGVkU2l6ZShKU0Nl
bGwqLCBWTSYpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRlcm5h
bEZ1bmN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9JbnRlcm5hbEZ1bmN0aW9uLmNwcAkocmV2aXNpb24gMjcyNzEwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSW50ZXJuYWxGdW5jdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTY0LDcgKzY0LDggQEAgdm9pZCBJbnRlcm5hbEZ1bmN0aW9uOjpmaW5pc2hDcmVhdGlvbihWTQog
ICAgIH0KIH0KIAotdm9pZCBJbnRlcm5hbEZ1bmN0aW9uOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCog
Y2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgor
dm9pZCBJbnRlcm5hbEZ1bmN0aW9uOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZp
c2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSW50ZXJuYWxGdW5jdGlvbiogdGhpc09iamVjdCA9IGpz
Q2FzdDxJbnRlcm5hbEZ1bmN0aW9uKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhF
UklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNzMsNiArNzQsOCBAQCB2b2lkIEludGVybmFs
RnVuY3Rpb246OnZpc2l0Q2hpbGRyZW4oSlNDCiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVj
dC0+bV9vcmlnaW5hbE5hbWUpOwogfQogCitERUZJTkVfRVhQT1JUX1ZJU0lUX0NISUxEUkVOKElu
dGVybmFsRnVuY3Rpb24pOworCiBjb25zdCBTdHJpbmcmIEludGVybmFsRnVuY3Rpb246Om5hbWUo
KQogewogICAgIGNvbnN0IFN0cmluZyYgbmFtZSA9IG1fb3JpZ2luYWxOYW1lLT50cnlHZXRWYWx1
ZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50ZXJuYWxGdW5jdGlv
bi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGVybmFs
RnVuY3Rpb24uaAkocmV2aXNpb24gMjcyNzEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSW50ZXJuYWxGdW5jdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC00Niw3ICs0Niw3IEBA
IHB1YmxpYzoKIAogICAgIERFQ0xBUkVfRVhQT1JUX0lORk87CiAKLSAgICBKU19FWFBPUlRfUFJJ
VkFURSBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7Cisg
ICAgREVDTEFSRV9FWFBPUlRfVklTSVRfQ0hJTERSRU47CiAKICAgICBKU19FWFBPUlRfUFJJVkFU
RSBjb25zdCBTdHJpbmcmIG5hbWUoKTsKICAgICBjb25zdCBTdHJpbmcgZGlzcGxheU5hbWUoVk0m
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxDb2xsYXRvci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bENvbGxhdG9y
LmNwcAkocmV2aXNpb24gMjcyNzEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SW50bENvbGxhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjUsNyArNjUsOCBAQCB2b2lkIElu
dGxDb2xsYXRvcjo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtCiAgICAgQVNTRVJUKGluaGVyaXRzKHZt
LCBpbmZvKCkpKTsKIH0KIAotdm9pZCBJbnRsQ29sbGF0b3I6OnZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+
Cit2b2lkIEludGxDb2xsYXRvcjo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNp
dG9yJiB2aXNpdG9yKQogewogICAgIEludGxDb2xsYXRvciogdGhpc09iamVjdCA9IGpzQ2FzdDxJ
bnRsQ29sbGF0b3IqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNP
YmplY3QsIGluZm8oKSk7CkBAIC03NSw2ICs3Niw4IEBAIHZvaWQgSW50bENvbGxhdG9yOjp2aXNp
dENoaWxkcmVuKEpTQ2VsbCoKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2JvdW5k
Q29tcGFyZSk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihJbnRsQ29sbGF0b3IpOworCiBW
ZWN0b3I8U3RyaW5nPiBJbnRsQ29sbGF0b3I6OnNvcnRMb2NhbGVEYXRhKGNvbnN0IFN0cmluZyYg
bG9jYWxlLCBSZWxldmFudEV4dGVuc2lvbktleSBrZXkpCiB7CiAgICAgLy8gOS4xIEludGVybmFs
IHNsb3RzIG9mIFNlcnZpY2UgQ29uc3RydWN0b3JzICYgMTAuMi4zIEludGVybmFsIHNsb3RzIChF
Q01BLTQwMiAyLjApCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsQ29s
bGF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRs
Q29sbGF0b3IuaAkocmV2aXNpb24gMjcyNzEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSW50bENvbGxhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTgwLDcgKzgwLDcgQEAgcHVi
bGljOgogcHJpdmF0ZToKICAgICBJbnRsQ29sbGF0b3IoVk0mLCBTdHJ1Y3R1cmUqKTsKICAgICB2
b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihK
U0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAg
ICBib29sIHVwZGF0ZUNhbkRvQVNDSUlVQ0FEVUNFVENvbXBhcmlzb24oKSBjb25zdDsKIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERhdGVUaW1lRm9ybWF0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsRGF0ZVRpbWVG
b3JtYXQuY3BwCShyZXZpc2lvbiAyNzI3MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9JbnRsRGF0ZVRpbWVGb3JtYXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MCw3ICs5MCw4
IEBAIHZvaWQgSW50bERhdGVUaW1lRm9ybWF0OjpmaW5pc2hDcmVhdGlvbigKICAgICBBU1NFUlQo
aW5oZXJpdHModm0sIGluZm8oKSkpOwogfQogCi12b2lkIEludGxEYXRlVGltZUZvcm1hdDo6dmlz
aXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8
dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSW50bERhdGVUaW1lRm9ybWF0Ojp2aXNpdENoaWxkcmVu
SW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSW50bERhdGVUaW1l
Rm9ybWF0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEludGxEYXRlVGltZUZvcm1hdCo+KGNlbGwpOwog
ICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTEw
MCw2ICsxMDEsOCBAQCB2b2lkIEludGxEYXRlVGltZUZvcm1hdDo6dmlzaXRDaGlsZHJlbihKCiAg
ICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9ib3VuZEZvcm1hdCk7CiB9CiAKK0RFRklO
RV9WSVNJVF9DSElMRFJFTihJbnRsRGF0ZVRpbWVGb3JtYXQpOworCiB2b2lkIEludGxEYXRlVGlt
ZUZvcm1hdDo6c2V0Qm91bmRGb3JtYXQoVk0mIHZtLCBKU0JvdW5kRnVuY3Rpb24qIGZvcm1hdCkK
IHsKICAgICBtX2JvdW5kRm9ybWF0LnNldCh2bSwgdGhpcywgZm9ybWF0KTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxEYXRlVGltZUZvcm1hdC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxEYXRlVGltZUZvcm1hdC5oCShy
ZXZpc2lvbiAyNzI3MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsRGF0
ZVRpbWVGb3JtYXQuaAkod29ya2luZyBjb3B5KQpAQCAtODUsNyArODUsNyBAQCBwdWJsaWM6CiBw
cml2YXRlOgogICAgIEludGxEYXRlVGltZUZvcm1hdChWTSYsIFN0cnVjdHVyZSopOwogICAgIHZv
aWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpT
Q2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAg
IHN0YXRpYyBWZWN0b3I8U3RyaW5nPiBsb2NhbGVEYXRhKGNvbnN0IFN0cmluZyYsIFJlbGV2YW50
RXh0ZW5zaW9uS2V5KTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50
bExvY2FsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SW50bExvY2FsZS5jcHAJKHJldmlzaW9uIDI3MjcxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0ludGxMb2NhbGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OCw3ICs1OCw4IEBA
IHZvaWQgSW50bExvY2FsZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQogICAgIEFTU0VSVChpbmhl
cml0cyh2bSwgaW5mbygpKSk7CiB9CiAKLXZvaWQgSW50bExvY2FsZTo6dmlzaXRDaGlsZHJlbihK
U0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlz
aXRvcj4KK3ZvaWQgSW50bExvY2FsZTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBW
aXNpdG9yJiB2aXNpdG9yKQogewogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SW50bExv
Y2FsZSo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwg
aW5mbygpKTsKQEAgLTY2LDYgKzY3LDggQEAgdm9pZCBJbnRsTG9jYWxlOjp2aXNpdENoaWxkcmVu
KEpTQ2VsbCogYwogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7
CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihJbnRsTG9jYWxlKTsKKwogY2xhc3MgTG9jYWxl
SURCdWlsZGVyIGZpbmFsIHsKIHB1YmxpYzoKICAgICBib29sIGluaXRpYWxpemUoY29uc3QgU3Ry
aW5nJik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTG9jYWxlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bExvY2FsZS5o
CShyZXZpc2lvbiAyNzI3MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRs
TG9jYWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTcxLDcgKzcxLDcgQEAgcHVibGljOgogcHJpdmF0
ZToKICAgICBJbnRsTG9jYWxlKFZNJiwgU3RydWN0dXJlKik7CiAgICAgdm9pZCBmaW5pc2hDcmVh
dGlvbihWTSYpOwotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZp
c2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgU3RyaW5nIGtleXdv
cmRWYWx1ZShBU0NJSUxpdGVyYWwsIGJvb2wgaXNCb29sZWFuID0gZmFsc2UpIGNvbnN0OwogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTnVtYmVyRm9ybWF0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTnVtYmVyRm9y
bWF0LmNwcAkocmV2aXNpb24gMjcyNzEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSW50bE51bWJlckZvcm1hdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTczLDcgKzczLDggQEAg
dm9pZCBJbnRsTnVtYmVyRm9ybWF0OjpmaW5pc2hDcmVhdGlvbihWTQogICAgIEFTU0VSVChpbmhl
cml0cyh2bSwgaW5mbygpKSk7CiB9CiAKLXZvaWQgSW50bE51bWJlckZvcm1hdDo6dmlzaXRDaGls
ZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5h
bWUgVmlzaXRvcj4KK3ZvaWQgSW50bE51bWJlckZvcm1hdDo6dmlzaXRDaGlsZHJlbkltcGwoSlND
ZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEludGxOdW1iZXJGb3JtYXQqIHRo
aXNPYmplY3QgPSBqc0Nhc3Q8SW50bE51bWJlckZvcm1hdCo+KGNlbGwpOwogICAgIEFTU0VSVF9H
Q19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTgzLDYgKzg0LDggQEAg
dm9pZCBJbnRsTnVtYmVyRm9ybWF0Ojp2aXNpdENoaWxkcmVuKEpTQwogICAgIHZpc2l0b3IuYXBw
ZW5kKHRoaXNPYmplY3QtPm1fYm91bmRGb3JtYXQpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERS
RU4oSW50bE51bWJlckZvcm1hdCk7CisKIFZlY3RvcjxTdHJpbmc+IEludGxOdW1iZXJGb3JtYXQ6
OmxvY2FsZURhdGEoY29uc3QgU3RyaW5nJiBsb2NhbGUsIFJlbGV2YW50RXh0ZW5zaW9uS2V5IGtl
eSkKIHsKICAgICAvLyA5LjEgSW50ZXJuYWwgc2xvdHMgb2YgU2VydmljZSBDb25zdHJ1Y3RvcnMg
JiAxMS4yLjMgSW50ZXJuYWwgc2xvdHMgKEVDTUEtNDAyIDIuMCkKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0ludGxOdW1iZXJGb3JtYXQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTnVtYmVyRm9ybWF0LmgJKHJldmlzaW9uIDI3
MjcxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxOdW1iZXJGb3JtYXQu
aAkod29ya2luZyBjb3B5KQpAQCAtOTYsNyArOTYsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAg
IEludGxOdW1iZXJGb3JtYXQoVk0mLCBTdHJ1Y3R1cmUqKTsKICAgICB2b2lkIGZpbmlzaENyZWF0
aW9uKFZNJik7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90Vmlz
aXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBzdGF0aWMgVmVjdG9y
PFN0cmluZz4gbG9jYWxlRGF0YShjb25zdCBTdHJpbmcmLCBSZWxldmFudEV4dGVuc2lvbktleSk7
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxQbHVyYWxSdWxlcy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFBsdXJh
bFJ1bGVzLmNwcAkocmV2aXNpb24gMjcyNzEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSW50bFBsdXJhbFJ1bGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjEsNyArNjEsOCBA
QCB2b2lkIEludGxQbHVyYWxSdWxlczo6ZmluaXNoQ3JlYXRpb24oVk0mCiAgICAgQVNTRVJUKGlu
aGVyaXRzKHZtLCBpbmZvKCkpKTsKIH0KIAotdm9pZCBJbnRsUGx1cmFsUnVsZXM6OnZpc2l0Q2hp
bGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVu
YW1lIFZpc2l0b3I+Cit2b2lkIEludGxQbHVyYWxSdWxlczo6dmlzaXRDaGlsZHJlbkltcGwoSlND
ZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEludGxQbHVyYWxSdWxlcyogdGhp
c09iamVjdCA9IGpzQ2FzdDxJbnRsUGx1cmFsUnVsZXMqPihjZWxsKTsKICAgICBBU1NFUlRfR0Nf
T0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC02OSw2ICs3MCw4IEBAIHZv
aWQgSW50bFBsdXJhbFJ1bGVzOjp2aXNpdENoaWxkcmVuKEpTQ2UKICAgICBCYXNlOjp2aXNpdENo
aWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4o
SW50bFBsdXJhbFJ1bGVzKTsKKwogVmVjdG9yPFN0cmluZz4gSW50bFBsdXJhbFJ1bGVzOjpsb2Nh
bGVEYXRhKGNvbnN0IFN0cmluZyYsIFJlbGV2YW50RXh0ZW5zaW9uS2V5KQogewogICAgIHJldHVy
biB7IH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsUGx1cmFsUnVs
ZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsUGx1
cmFsUnVsZXMuaAkocmV2aXNpb24gMjcyNzEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSW50bFBsdXJhbFJ1bGVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTY2LDcgKzY2LDcgQEAg
cHVibGljOgogcHJpdmF0ZToKICAgICBJbnRsUGx1cmFsUnVsZXMoVk0mLCBTdHJ1Y3R1cmUqKTsK
ICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGls
ZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47
CiAKICAgICBzdGF0aWMgVmVjdG9yPFN0cmluZz4gbG9jYWxlRGF0YShjb25zdCBTdHJpbmcmLCBS
ZWxldmFudEV4dGVuc2lvbktleSk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0ludGxSZWxhdGl2ZVRpbWVGb3JtYXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0ludGxSZWxhdGl2ZVRpbWVGb3JtYXQuY3BwCShyZXZpc2lvbiAy
NzI3MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsUmVsYXRpdmVUaW1l
Rm9ybWF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjIsNyArNjIsOCBAQCB2b2lkIEludGxSZWxh
dGl2ZVRpbWVGb3JtYXQ6OmZpbmlzaENyZWF0CiAgICAgQVNTRVJUKGluaGVyaXRzKHZtLCBpbmZv
KCkpKTsKIH0KIAotdm9pZCBJbnRsUmVsYXRpdmVUaW1lRm9ybWF0Ojp2aXNpdENoaWxkcmVuKEpT
Q2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNp
dG9yPgordm9pZCBJbnRsUmVsYXRpdmVUaW1lRm9ybWF0Ojp2aXNpdENoaWxkcmVuSW1wbChKU0Nl
bGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpz
Q2FzdDxJbnRsUmVsYXRpdmVUaW1lRm9ybWF0Kj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVD
VF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNzAsNiArNzEsOCBAQCB2b2lkIElu
dGxSZWxhdGl2ZVRpbWVGb3JtYXQ6OnZpc2l0Q2hpbGRyCiAgICAgQmFzZTo6dmlzaXRDaGlsZHJl
bih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEludGxS
ZWxhdGl2ZVRpbWVGb3JtYXQpOworCiBWZWN0b3I8U3RyaW5nPiBJbnRsUmVsYXRpdmVUaW1lRm9y
bWF0Ojpsb2NhbGVEYXRhKGNvbnN0IFN0cmluZyYgbG9jYWxlLCBSZWxldmFudEV4dGVuc2lvbktl
eSBrZXkpCiB7CiAgICAgQVNTRVJUX1VOVVNFRChrZXksIGtleSA9PSBSZWxldmFudEV4dGVuc2lv
bktleTo6TnUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFJlbGF0
aXZlVGltZUZvcm1hdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0ludGxSZWxhdGl2ZVRpbWVGb3JtYXQuaAkocmV2aXNpb24gMjcyNzEwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFJlbGF0aXZlVGltZUZvcm1hdC5oCSh3b3JraW5n
IGNvcHkpCkBAIC02NCw3ICs2NCw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgSW50bFJlbGF0
aXZlVGltZUZvcm1hdChWTSYsIFN0cnVjdHVyZSopOwogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24o
Vk0mKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9y
Jik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIHN0YXRpYyBWZWN0b3I8U3Ry
aW5nPiBsb2NhbGVEYXRhKGNvbnN0IFN0cmluZyYsIFJlbGV2YW50RXh0ZW5zaW9uS2V5KTsKIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFNlZ21lbnRJdGVyYXRvci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFNlZ21l
bnRJdGVyYXRvci5jcHAJKHJldmlzaW9uIDI3MjcxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0ludGxTZWdtZW50SXRlcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NCwx
MyArNjQsMTYgQEAgdm9pZCBJbnRsU2VnbWVudEl0ZXJhdG9yOjpmaW5pc2hDcmVhdGlvbgogICAg
IG1fc3RyaW5nLnNldCh2bSwgdGhpcywgc3RyaW5nKTsKIH0KIAotdm9pZCBJbnRsU2VnbWVudEl0
ZXJhdG9yOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3Ip
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBJbnRsU2VnbWVudEl0ZXJhdG9yOjp2
aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAg
YXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxJbnRsU2VnbWVudEl0ZXJhdG9yKj4oY2VsbCk7CiAg
ICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKICAgICB2aXNpdG9y
LmFwcGVuZCh0aGlzT2JqZWN0LT5tX3N0cmluZyk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJF
TihJbnRsU2VnbWVudEl0ZXJhdG9yKTsKKwogSlNPYmplY3QqIEludGxTZWdtZW50SXRlcmF0b3I6
Om5leHQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKIHsKICAgICBWTSYgdm0gPSBnbG9i
YWxPYmplY3QtPnZtKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRs
U2VnbWVudEl0ZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSW50bFNlZ21lbnRJdGVyYXRvci5oCShyZXZpc2lvbiAyNzI3MTApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsU2VnbWVudEl0ZXJhdG9yLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTUzLDcgKzUzLDcgQEAgcHVibGljOgogCiAgICAgSlNPYmplY3QqIG5leHQoSlNHbG9i
YWxPYmplY3QqKTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xv
dFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiBwcml2YXRlOgogICAg
IEludGxTZWdtZW50SXRlcmF0b3IoVk0mLCBTdHJ1Y3R1cmUqLCBzdGQ6OnVuaXF1ZV9wdHI8VUJy
ZWFrSXRlcmF0b3IsIFVCcmVha0l0ZXJhdG9yRGVsZXRlcj4mJiwgQm94PFZlY3RvcjxVQ2hhcj4+
JiYsIEludGxTZWdtZW50ZXI6OkdyYW51bGFyaXR5KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0ludGxTZWdtZW50cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSW50bFNlZ21lbnRzLmNwcAkocmV2aXNpb24gMjcyNzEwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFNlZ21lbnRzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTA5LDExICsxMDksMTQgQEAgSlNPYmplY3QqIEludGxTZWdtZW50czo6Y3JlYXRl
U2VnbWVudEl0ZQogICAgIHJldHVybiBJbnRsU2VnbWVudEl0ZXJhdG9yOjpjcmVhdGUodm0sIGds
b2JhbE9iamVjdC0+c2VnbWVudEl0ZXJhdG9yU3RydWN0dXJlKCksIFdURk1vdmUoc2VnbWVudGVy
KSwgbV9idWZmZXIsIG1fc3RyaW5nLmdldCgpLCBtX2dyYW51bGFyaXR5KTsKIH0KIAotdm9pZCBJ
bnRsU2VnbWVudHM6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlz
aXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEludGxTZWdtZW50czo6dmlz
aXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGF1
dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SW50bFNlZ21lbnRzKj4oY2VsbCk7CiAgICAgQmFzZTo6
dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKICAgICB2aXNpdG9yLmFwcGVuZCh0
aGlzT2JqZWN0LT5tX3N0cmluZyk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihJbnRsU2Vn
bWVudHMpOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0ludGxTZWdtZW50cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0ludGxTZWdtZW50cy5oCShyZXZpc2lvbiAyNzI3MTApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsU2VnbWVudHMuaAkod29ya2luZyBjb3B5KQpAQCAt
NTQsNyArNTQsNyBAQCBwdWJsaWM6CiAgICAgSlNWYWx1ZSBjb250YWluaW5nKEpTR2xvYmFsT2Jq
ZWN0KiwgSlNWYWx1ZSBpbmRleFZhbHVlKTsKICAgICBKU09iamVjdCogY3JlYXRlU2VnbWVudEl0
ZXJhdG9yKEpTR2xvYmFsT2JqZWN0Kik7CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVu
KEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAog
cHJpdmF0ZToKICAgICBJbnRsU2VnbWVudHMoVk0mLCBTdHJ1Y3R1cmUqLCBzdGQ6OnVuaXF1ZV9w
dHI8VUJyZWFrSXRlcmF0b3IsIFVCcmVha0l0ZXJhdG9yRGVsZXRlcj4mJiwgQm94PFZlY3RvcjxV
Q2hhcj4+JiYsIEludGxTZWdtZW50ZXI6OkdyYW51bGFyaXR5KTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5jcHAJKHJldmlz
aW9uIDI3MjcxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZm
ZXJWaWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU1LDcgKzE1NSw4IEBAIHZvaWQgSlNBcnJh
eUJ1ZmZlclZpZXc6OmZpbmlzaENyZWF0aW9uKFYKICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOwogfQogCi12b2lkIEpTQXJyYXlCdWZmZXJWaWV3Ojp2aXNpdENoaWxkcmVuKEpTQ2Vs
bCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
Pgordm9pZCBKU0FycmF5QnVmZmVyVmlldzo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxs
LCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTQXJyYXlCdWZmZXJWaWV3KiB0aGlzT2JqZWN0
ID0ganNDYXN0PEpTQXJyYXlCdWZmZXJWaWV3Kj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVD
VF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtMTY5LDYgKzE3MCw4IEBAIHZvaWQg
SlNBcnJheUJ1ZmZlclZpZXc6OnZpc2l0Q2hpbGRyZW4oSlMKICAgICB9CiB9CiAKK0RFRklORV9W
SVNJVF9DSElMRFJFTihKU0FycmF5QnVmZmVyVmlldyk7CisKIGJvb2wgSlNBcnJheUJ1ZmZlclZp
ZXc6OnB1dCgKICAgICBKU0NlbGwqIGNlbGwsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsCiAgICAgUHV0UHJvcGVy
dHlTbG90JiBzbG90KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJh
eUJ1ZmZlclZpZXcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0FycmF5QnVmZmVyVmlldy5oCShyZXZpc2lvbiAyNzI3MTApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
NzIsNyArMTcyLDcgQEAgcHJvdGVjdGVkOgogICAgIAogICAgIHN0YXRpYyBib29sIHB1dChKU0Nl
bGwqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgUHV0UHJvcGVydHlT
bG90Jik7CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNp
dG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKICAgICAKIHB1YmxpYzoKICAgICBU
eXBlZEFycmF5TW9kZSBtb2RlKCkgY29uc3QgeyByZXR1cm4gbV9tb2RlOyB9CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5SXRlcmF0b3IuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlJdGVyYXRvci5jcHAJKHJl
dmlzaW9uIDI3MjcxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlJ
dGVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY4LDExICs2OCwxNCBAQCB2b2lkIEpTQXJy
YXlJdGVyYXRvcjo6ZmluaXNoQ3JlYXRpb24oVk0mCiAgICAgICAgIEJhc2U6OmludGVybmFsRmll
bGQoaW5kZXgpLnNldCh2bSwgdGhpcywgdmFsdWVzW2luZGV4XSk7CiB9CiAKLXZvaWQgSlNBcnJh
eUl0ZXJhdG9yOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0
b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0FycmF5SXRlcmF0b3I6OnZp
c2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBh
dXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQXJyYXlJdGVyYXRvcio+KGNlbGwpOwogICAgIEFT
U0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKICAgICBCYXNlOjp2
aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwogfQogCitERUZJTkVfVklTSVRfQ0hJ
TERSRU4oSlNBcnJheUl0ZXJhdG9yKTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5SXRlcmF0b3IuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5SXRlcmF0b3IuaAkocmV2aXNp
b24gMjcyNzEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUl0ZXJh
dG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTc4LDcgKzc4LDcgQEAgcHVibGljOgogCiAgICAgREVD
TEFSRV9JTkZPOwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90
VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKIHByaXZhdGU6CiAgICAg
SlNBcnJheUl0ZXJhdG9yKFZNJiwgU3RydWN0dXJlKik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0FzeW5jR2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FzeW5jR2VuZXJhdG9yLmNwcAkocmV2aXNpb24gMjcy
NzEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBc3luY0dlbmVyYXRvci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTU5LDExICs1OSwxNCBAQCB2b2lkIEpTQXN5bmNHZW5lcmF0
b3I6OmZpbmlzaENyZWF0aW9uKFZNCiAgICAgICAgIGludGVybmFsRmllbGQoaW5kZXgpLnNldCh2
bSwgdGhpcywgdmFsdWVzW2luZGV4XSk7CiB9CiAKLXZvaWQgSlNBc3luY0dlbmVyYXRvcjo6dmlz
aXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8
dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNBc3luY0dlbmVyYXRvcjo6dmlzaXRDaGlsZHJlbklt
cGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGF1dG8qIHRoaXNPYmpl
Y3QgPSBqc0Nhc3Q8SlNBc3luY0dlbmVyYXRvcio+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpF
Q1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKICAgICBCYXNlOjp2aXNpdENoaWxkcmVu
KHRoaXNPYmplY3QsIHZpc2l0b3IpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNBc3lu
Y0dlbmVyYXRvcik7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNBc3luY0dlbmVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXN5bmNHZW5lcmF0b3IuaAkocmV2aXNpb24gMjcyNzEw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBc3luY0dlbmVyYXRvci5oCSh3
b3JraW5nIGNvcHkpCkBAIC05NSw3ICs5NSw3IEBAIHB1YmxpYzoKIAogICAgIERFQ0xBUkVfRVhQ
T1JUX0lORk87CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RW
aXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogcHJpdmF0ZToKICAgICBK
U0FzeW5jR2VuZXJhdG9yKFZNJiwgU3RydWN0dXJlKik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0JpZ0ludC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNCaWdJbnQuY3BwCShyZXZpc2lvbiAyNzI3MTApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JpZ0ludC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY3
LDcgKzY3LDggQEAgSlNCaWdJbnQ6OkpTQmlnSW50KFZNJiB2bSwgU3RydWN0dXJlKiBzdAogICAg
ICwgbV9kYXRhKHZtLCB0aGlzLCBkYXRhLCBsZW5ndGgpCiB7IH0KIAotdm9pZCBKU0JpZ0ludDo6
dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxh
dGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNCaWdJbnQ6OnZpc2l0Q2hpbGRyZW5JbXBsKEpT
Q2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0g
anNDYXN0PEpTQmlnSW50Kj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0
aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNzYsNiArNzcsOCBAQCB2b2lkIEpTQmlnSW50Ojp2aXNp
dENoaWxkcmVuKEpTQ2VsbCogY2VsCiAgICAgICAgIHZpc2l0b3IubWFya0F1eGlsaWFyeShkYXRh
KTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTQmlnSW50KTsKKwogdm9pZCBKU0JpZ0lu
dDo6aW5pdGlhbGl6ZShJbml0aWFsaXphdGlvblR5cGUgaW5pdFR5cGUpCiB7CiAgICAgaWYgKGlu
aXRUeXBlID09IEluaXRpYWxpemF0aW9uVHlwZTo6V2l0aFplcm8pCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0JpZ0ludC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTQmlnSW50LmgJKHJldmlzaW9uIDI3MjcxMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQmlnSW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTUw
LDcgKzUwLDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0
dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IFN0cnVjdHVyZUlzSW1tb3J0YWwgfCBP
dmVycmlkZXNUb1RoaXM7CiAgICAgZnJpZW5kIGNsYXNzIENhY2hlZEJpZ0ludDsKIAotICAgIHN0
YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNM
QVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1
YnNwYWNlQWNjZXNzPgogICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZt
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCb3VuZEZ1bmN0aW9uLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JvdW5kRnVu
Y3Rpb24uY3BwCShyZXZpc2lvbiAyNzI3MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0JvdW5kRnVuY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNDksNyArMjQ5LDgg
QEAgdm9pZCBKU0JvdW5kRnVuY3Rpb246OmZpbmlzaENyZWF0aW9uKFZNJgogICAgIEFTU0VSVChp
bmhlcml0cyh2bSwgaW5mbygpKSk7CiB9CiAKLXZvaWQgSlNCb3VuZEZ1bmN0aW9uOjp2aXNpdENo
aWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBl
bmFtZSBWaXNpdG9yPgordm9pZCBKU0JvdW5kRnVuY3Rpb246OnZpc2l0Q2hpbGRyZW5JbXBsKEpT
Q2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU0JvdW5kRnVuY3Rpb24qIHRo
aXNPYmplY3QgPSBqc0Nhc3Q8SlNCb3VuZEZ1bmN0aW9uKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dD
X09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtMjYxLDQgKzI2Miw2IEBA
IHZvaWQgSlNCb3VuZEZ1bmN0aW9uOjp2aXNpdENoaWxkcmVuKEpTQ2UKICAgICB2aXNpdG9yLmFw
cGVuZCh0aGlzT2JqZWN0LT5tX25hbWVNYXlCZU51bGwpOwogfQogCitERUZJTkVfVklTSVRfQ0hJ
TERSRU4oSlNCb3VuZEZ1bmN0aW9uKTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JvdW5kRnVuY3Rpb24uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JvdW5kRnVuY3Rpb24uaAkocmV2aXNp
b24gMjcyNzEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCb3VuZEZ1bmN0
aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTg0LDcgKzg0LDcgQEAgcHJpdmF0ZToKICAgICBKU0Jv
dW5kRnVuY3Rpb24oVk0mLCBOYXRpdmVFeGVjdXRhYmxlKiwgSlNHbG9iYWxPYmplY3QqLCBTdHJ1
Y3R1cmUqLCBKU09iamVjdCogdGFyZ2V0RnVuY3Rpb24sIEpTVmFsdWUgYm91bmRUaGlzLCBKU0lt
bXV0YWJsZUJ1dHRlcmZseSogYm91bmRBcmdzLCBKU1N0cmluZyogbmFtZU1heUJlTnVsbCwgZG91
YmxlIGxlbmd0aCk7CiAKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7Ci0gICAgc3RhdGlj
IHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVf
VklTSVRfQ0hJTERSRU47CiAKICAgICBXcml0ZUJhcnJpZXI8SlNPYmplY3Q+IG1fdGFyZ2V0RnVu
Y3Rpb247CiAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+IG1fYm91bmRUaGlzOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDYWxsZWUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2FsbGVlLmNwcAkocmV2aXNpb24gMjcyNzEw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDYWxsZWUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC01MCw3ICs1MCw4IEBAIHZvaWQgSlNDYWxsZWU6OmZpbmlzaENyZWF0aW9uKFZN
JiB2bSkKICAgICBBU1NFUlQoaW5oZXJpdHModm0sIGluZm8oKSkpOwogfQogCi12b2lkIEpTQ2Fs
bGVlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0
ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0NhbGxlZTo6dmlzaXRDaGlsZHJlbklt
cGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTQ2FsbGVlKiB0aGlz
T2JqZWN0ID0ganNDYXN0PEpTQ2FsbGVlKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9J
TkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNTksNCArNjAsNiBAQCB2b2lkIEpTQ2Fs
bGVlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsCiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09i
amVjdC0+bV9zY29wZSk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU0NhbGxlZSk7CisK
IH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNDYWxsZWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0NhbGxlZS5oCShyZXZpc2lvbiAyNzI3MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0NhbGxlZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDAsNyArMTAwLDcgQEAgcHJvdGVj
dGVkOgogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKICAgICB1c2luZyBCYXNlOjpmaW5p
c2hDcmVhdGlvbjsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xv
dFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiBwcml2YXRlOgogICAg
IGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0NlbGwuaAkocmV2aXNpb24gMjcyNzEwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSw3IEBA
CiAvKgogICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAxIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtk
ZS5vcmcpCiAgKiAgQ29weXJpZ2h0IChDKSAyMDAxIFBldGVyIEtlbGx5IChwbWtAcG9zdC5jb20p
Ci0gKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogIENvcHlyaWdodCAoQykgMjAwMy0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVk
ZSAiSlNMb2NrLmgiCiAjaW5jbHVkZSAiSlNUeXBlSW5mby5oIgogI2luY2x1ZGUgIlNsb3RWaXNp
dG9yLmgiCisjaW5jbHVkZSAiU2xvdFZpc2l0b3JNYWNyb3MuaCIKICNpbmNsdWRlICJTdWJzcGFj
ZUFjY2Vzcy5oIgogI2luY2x1ZGUgIlR5cGVkQXJyYXlUeXBlLmgiCiAjaW5jbHVkZSAiV3JpdGVC
YXJyaWVyLmgiCkBAIC0xNjcsOCArMTY4LDggQEAgcHVibGljOgogICAgIHNpemVfdCBlc3RpbWF0
ZWRTaXplSW5CeXRlcyhWTSYpIGNvbnN0OwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBz
aXplX3QgZXN0aW1hdGVkU2l6ZShKU0NlbGwqLCBWTSYpOwogCi0gICAgc3RhdGljIHZvaWQgdmlz
aXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwotICAgIHN0YXRpYyB2b2lkIHZpc2l0
T3V0cHV0Q29uc3RyYWludHMoSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX0lO
TElORV9WSVNJVF9DSElMRFJFTjsKKyAgICBzdGF0aWMgdm9pZCB2aXNpdE91dHB1dENvbnN0cmFp
bnRzKEpTQ2VsbCosIEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKIAogICAgIEpTX0VYUE9SVF9QUklW
QVRFIHN0YXRpYyB2b2lkIGFuYWx5emVIZWFwKEpTQ2VsbCosIEhlYXBBbmFseXplciYpOwogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGxJbmxpbmVzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsSW5saW5lcy5oCShy
ZXZpc2lvbiAyNzI3MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGxJ
bmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDYgKzI1LDcgQEAKIAogI3ByYWdtYSBvbmNl
CiAKKyNpbmNsdWRlICJBYnN0cmFjdFNsb3RWaXNpdG9ySW5saW5lcy5oIgogI2luY2x1ZGUgIkFs
bG9jYXRvckZvck1vZGUuaCIKICNpbmNsdWRlICJBbGxvY2F0b3JJbmxpbmVzLmgiCiAjaW5jbHVk
ZSAiQ29tcGxldGVTdWJzcGFjZUlubGluZXMuaCIKQEAgLTE0MSwxMiArMTQyLDE1IEBAIEFMV0FZ
U19JTkxJTkUgU3RydWN0dXJlKiBKU0NlbGw6OnN0cnVjdHUKICAgICByZXR1cm4gdm0uZ2V0U3Ry
dWN0dXJlKG1fc3RydWN0dXJlSUQpOwogfQogCi1pbmxpbmUgdm9pZCBKU0NlbGw6OnZpc2l0Q2hp
bGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVu
YW1lIFZpc2l0b3I+CitpbmxpbmUgdm9pZCBKU0NlbGw6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2Vs
bCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmll
cmVkKGNlbGwtPnN0cnVjdHVyZSh2aXNpdG9yLnZtKCkpKTsKIH0KIAotaW5saW5lIHZvaWQgSlND
ZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzKEpTQ2VsbCosIFNsb3RWaXNpdG9yJikKK0RFRklO
RV9JTkxJTkVfVklTSVRfQ0hJTERSRU4oSlNDZWxsKTsKKworaW5saW5lIHZvaWQgSlNDZWxsOjp2
aXNpdE91dHB1dENvbnN0cmFpbnRzKEpTQ2VsbCosIEFic3RyYWN0U2xvdFZpc2l0b3ImKQogewog
fQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0N1c3RvbUdldHRlclNl
dHRlckZ1bmN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0N1c3RvbUdldHRlclNldHRlckZ1bmN0aW9uLmNwcAkocmV2aXNpb24gMjcyNzEwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDdXN0b21HZXR0ZXJTZXR0ZXJGdW5j
dGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg1LDcgKzg1LDggQEAgSlNDdXN0b21HZXR0ZXJT
ZXR0ZXJGdW5jdGlvbiogSlNDdXN0b21HZQogICAgIHJldHVybiBmdW5jdGlvbjsKIH0KIAotdm9p
ZCBKU0N1c3RvbUdldHRlclNldHRlckZ1bmN0aW9uOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2Vs
bCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9p
ZCBKU0N1c3RvbUdldHRlclNldHRlckZ1bmN0aW9uOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwq
IGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNDdXN0b21HZXR0ZXJTZXR0ZXJGdW5j
dGlvbiogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0N1c3RvbUdldHRlclNldHRlckZ1bmN0aW9uKj4o
Y2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkp
OwpAQCAtOTQsNiArOTUsOCBAQCB2b2lkIEpTQ3VzdG9tR2V0dGVyU2V0dGVyRnVuY3Rpb246OnZp
c2l0CiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9nZXR0ZXJTZXR0ZXIpOwogfQog
CitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNDdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbik7CisK
IHZvaWQgSlNDdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbjo6ZmluaXNoQ3JlYXRpb24oVk0mIHZt
LCBOYXRpdmVFeGVjdXRhYmxlKiBleGVjdXRhYmxlLCBDdXN0b21HZXR0ZXJTZXR0ZXIqIGdldHRl
clNldHRlciwgY29uc3QgU3RyaW5nJiBuYW1lKQogewogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9u
KHZtLCBleGVjdXRhYmxlLCBpc1NldHRlcigpLCBuYW1lKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTQ3VzdG9tR2V0dGVyU2V0dGVyRnVuY3Rpb24uaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0N1c3RvbUdldHRlclNldHRlckZ1
bmN0aW9uLmgJKHJldmlzaW9uIDI3MjcxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTQ3VzdG9tR2V0dGVyU2V0dGVyRnVuY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtNjMs
NyArNjMsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIEpTQ3VzdG9tR2V0dGVyU2V0dGVyRnVu
Y3Rpb24oVk0mLCBOYXRpdmVFeGVjdXRhYmxlKiwgSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUq
LCBUeXBlLCBjb25zdCBQcm9wZXJ0eU5hbWUmKTsKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZN
JiwgTmF0aXZlRXhlY3V0YWJsZSosIEN1c3RvbUdldHRlclNldHRlciosIGNvbnN0IFN0cmluZyYp
OwotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsK
KyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgV3JpdGVCYXJyaWVyPEN1c3RvbUdl
dHRlclNldHRlcj4gbV9nZXR0ZXJTZXR0ZXI7CiAgICAgVHlwZSBtX3R5cGU7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ZpbmFsaXphdGlvblJlZ2lzdHJ5LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ZpbmFsaXphdGlvblJl
Z2lzdHJ5LmNwcAkocmV2aXNpb24gMjcyNzEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNGaW5hbGl6YXRpb25SZWdpc3RyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYg
KzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJKU0ZpbmFsaXphdGlvblJl
Z2lzdHJ5LmgiCiAKKyNpbmNsdWRlICJBYnN0cmFjdFNsb3RWaXNpdG9yLmgiCiAjaW5jbHVkZSAi
RGVmZXJyZWRXb3JrVGltZXIuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAi
SlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbElubGluZXMuaCIKQEAgLTYwLDcgKzYxLDggQEAgdm9p
ZCBKU0ZpbmFsaXphdGlvblJlZ2lzdHJ5OjpmaW5pc2hDcmVhdAogICAgIGdsb2JhbE9iamVjdC0+
Z2xvYmFsT2JqZWN0TWV0aG9kVGFibGUoKS0+Y3VycmVudFNjcmlwdEV4ZWN1dGlvbk93bmVyKGds
b2JhbE9iamVjdCk7CiB9CiAKLXZvaWQgSlNGaW5hbGl6YXRpb25SZWdpc3RyeTo6dmlzaXRDaGls
ZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5h
bWUgVmlzaXRvcj4KK3ZvaWQgSlNGaW5hbGl6YXRpb25SZWdpc3RyeTo6dmlzaXRDaGlsZHJlbklt
cGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEJhc2U6OnZpc2l0Q2hp
bGRyZW4oY2VsbCwgdmlzaXRvcik7CiAKQEAgLTgwLDEzICs4MiwxNSBAQCB2b2lkIEpTRmluYWxp
emF0aW9uUmVnaXN0cnk6OnZpc2l0Q2hpbGRyCiAgICAgZm9yIChhdXRvJiBob2xkaW5ncyA6IHRo
aXNPYmplY3QtPm1fbm9VbnJlZ2lzdHJhdGlvbkRlYWQpCiAgICAgICAgIHZpc2l0b3IuYXBwZW5k
KGhvbGRpbmdzKTsKIAotICAgIHNpemVfdCB0b3RhbEJ1ZmZlclNpemVzSW5CeXRlcyA9IHRoaXNP
YmplY3QtPm1fZGVhZFJlZ2lzdHJhdGlvbnMuY2FwYWNpdHkoKSAqIHNpemVvZihkZWNsdHlwZSh0
aGlzT2JqZWN0LT5tX2RlYWRSZWdpc3RyYXRpb25zKTo6S2V5VmFsdWVQYWlyVHlwZSk7Ci0gICAg
dG90YWxCdWZmZXJTaXplc0luQnl0ZXMgKz0gdGhpc09iamVjdC0+bV9saXZlUmVnaXN0cmF0aW9u
cy5jYXBhY2l0eSgpICogc2l6ZW9mKGRlY2x0eXBlKHRoaXNPYmplY3QtPm1fZGVhZFJlZ2lzdHJh
dGlvbnMpOjpLZXlWYWx1ZVBhaXJUeXBlKTsKKyAgICBzaXplX3QgdG90YWxCdWZmZXJTaXplc0lu
Qnl0ZXMgPSB0aGlzT2JqZWN0LT5tX2RlYWRSZWdpc3RyYXRpb25zLmNhcGFjaXR5KCkgKiBzaXpl
b2YodHlwZW5hbWUgZGVjbHR5cGUodGhpc09iamVjdC0+bV9kZWFkUmVnaXN0cmF0aW9ucyk6Oktl
eVZhbHVlUGFpclR5cGUpOworICAgIHRvdGFsQnVmZmVyU2l6ZXNJbkJ5dGVzICs9IHRoaXNPYmpl
Y3QtPm1fbGl2ZVJlZ2lzdHJhdGlvbnMuY2FwYWNpdHkoKSAqIHNpemVvZih0eXBlbmFtZSBkZWNs
dHlwZSh0aGlzT2JqZWN0LT5tX2RlYWRSZWdpc3RyYXRpb25zKTo6S2V5VmFsdWVQYWlyVHlwZSk7
CiAgICAgdG90YWxCdWZmZXJTaXplc0luQnl0ZXMgKz0gdGhpc09iamVjdC0+bV9ub1VucmVnaXN0
cmF0aW9uTGl2ZS5jYXBhY2l0eSgpICogc2l6ZW9mKGRlY2x0eXBlKHRoaXNPYmplY3QtPm1fbm9V
bnJlZ2lzdHJhdGlvbkxpdmUudGFrZUxhc3QoKSkpOwogICAgIHRvdGFsQnVmZmVyU2l6ZXNJbkJ5
dGVzICs9IHRoaXNPYmplY3QtPm1fbm9VbnJlZ2lzdHJhdGlvbkRlYWQuY2FwYWNpdHkoKSAqIHNp
emVvZihkZWNsdHlwZSh0aGlzT2JqZWN0LT5tX25vVW5yZWdpc3RyYXRpb25MaXZlLnRha2VMYXN0
KCkpKTsKICAgICB2aXNpdG9yLnZtKCkuaGVhcC5yZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQodG90
YWxCdWZmZXJTaXplc0luQnl0ZXMpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNGaW5h
bGl6YXRpb25SZWdpc3RyeSk7CisKIHZvaWQgSlNGaW5hbGl6YXRpb25SZWdpc3RyeTo6ZGVzdHJv
eShKU0NlbGwqIHRhYmxlKQogewogICAgIHN0YXRpY19jYXN0PEpTRmluYWxpemF0aW9uUmVnaXN0
cnkqPih0YWJsZSktPn5KU0ZpbmFsaXphdGlvblJlZ2lzdHJ5KCk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0ZpbmFsaXphdGlvblJlZ2lzdHJ5LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGaW5hbGl6YXRpb25SZWdpc3RyeS5o
CShyZXZpc2lvbiAyNzI3MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Zp
bmFsaXphdGlvblJlZ2lzdHJ5LmgJKHdvcmtpbmcgY29weSkKQEAgLTcwLDcgKzcwLDcgQEAgcHVi
bGljOgogICAgIERFQ0xBUkVfRVhQT1JUX0lORk87CiAKICAgICB2b2lkIGZpbmFsaXplVW5jb25k
aXRpb25hbGx5KFZNJik7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBT
bG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAgICAgc3RhdGljIHZv
aWQgZGVzdHJveShKU0NlbGwqKTsKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNEZXN0
cnVjdGlvbiA9IHRydWU7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
RnVuY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTRnVuY3Rpb24uY3BwCShyZXZpc2lvbiAyNzI3MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0Z1bmN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUyLDcgKzI1Miw4
IEBAIGNvbnN0IFNvdXJjZUNvZGUqIEpTRnVuY3Rpb246OnNvdXJjZUNvZGUKICAgICByZXR1cm4g
JmpzRXhlY3V0YWJsZSgpLT5zb3VyY2UoKTsKIH0KICAgICAKLXZvaWQgSlNGdW5jdGlvbjo6dmlz
aXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8
dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNGdW5jdGlvbjo6dmlzaXRDaGlsZHJlbkltcGwoSlND
ZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTRnVuY3Rpb24qIHRoaXNPYmpl
Y3QgPSBqc0Nhc3Q8SlNGdW5jdGlvbio+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5I
RVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTI2MSw2ICsyNjIsOCBAQCB2b2lkIEpTRnVu
Y3Rpb246OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjCiAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJp
ZXJlZChiaXR3aXNlX2Nhc3Q8SlNDZWxsKj4oYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4odGhpc09i
amVjdC0+bV9leGVjdXRhYmxlT3JSYXJlRGF0YSkgJiB+cmFyZURhdGFUYWcpKTsKIH0KIAorREVG
SU5FX1ZJU0lUX0NISUxEUkVOKEpTRnVuY3Rpb24pOworCiBDYWxsRGF0YSBKU0Z1bmN0aW9uOjpn
ZXRDYWxsRGF0YShKU0NlbGwqIGNlbGwpCiB7CiAgICAgLy8gS2VlcCB0aGlzIGZ1bmN0aW9uIE9L
IGZvciBpbnZvY2F0aW9uIGZyb20gY29uY3VycmVudCBjb21waWxlcnMuCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5oCShyZXZpc2lvbiAyNzI3MTApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTE4MCw3ICsxODAsNyBAQCBwcm90ZWN0ZWQ6CiAKICAgICBzdGF0aWMgYm9vbCBkZWxl
dGVQcm9wZXJ0eShKU0NlbGwqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSwgRGVsZXRl
UHJvcGVydHlTbG90Jik7CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCos
IFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogcHJpdmF0ZToK
ICAgICBzdGF0aWMgSlNGdW5jdGlvbiogY3JlYXRlSW1wbChWTSYgdm0sIEZ1bmN0aW9uRXhlY3V0
YWJsZSogZXhlY3V0YWJsZSwgSlNTY29wZSogc2NvcGUsIFN0cnVjdHVyZSogc3RydWN0dXJlKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmF0b3IuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJhdG9yLmNwcAko
cmV2aXNpb24gMjcyNzEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5l
cmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OSwxMSArNTksMTQgQEAgdm9pZCBKU0dlbmVy
YXRvcjo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQogICAgICAgICBpbnRlcm5hbEZpZWxkKGluZGV4
KS5zZXQodm0sIHRoaXMsIHZhbHVlc1tpbmRleF0pOwogfQogCi12b2lkIEpTR2VuZXJhdG9yOjp2
aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0
ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0dlbmVyYXRvcjo6dmlzaXRDaGlsZHJlbkltcGwo
SlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGF1dG8qIHRoaXNPYmplY3Qg
PSBqc0Nhc3Q8SlNHZW5lcmF0b3IqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVS
SVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2Jq
ZWN0LCB2aXNpdG9yKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTR2VuZXJhdG9yKTsK
KwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0dlbmVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTR2VuZXJhdG9yLmgJKHJldmlzaW9uIDI3MjcxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTR2VuZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTk0LDcgKzk0LDcg
QEAgcHVibGljOgogCiAgICAgREVDTEFSRV9FWFBPUlRfSU5GTzsKIAotICAgIHN0YXRpYyB2b2lk
IHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lU
X0NISUxEUkVOOwogCiBwcml2YXRlOgogICAgIEpTR2VuZXJhdG9yKFZNJiwgU3RydWN0dXJlKik7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5
Vmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3LmgJKHJldmlzaW9uIDI3MjcxMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmgJKHdvcmtpbmcgY29weSkK
QEAgLTMxMyw3ICszMTMsNyBAQCBwcml2YXRlOgogICAgIHN0YXRpYyB2b2lkIGdldE93blByb3Bl
cnR5TmFtZXMoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZUFycmF5Jiwg
RG9udEVudW1Qcm9wZXJ0aWVzTW9kZSk7CiAKICAgICBzdGF0aWMgc2l6ZV90IGVzdGltYXRlZFNp
emUoSlNDZWxsKiwgVk0mKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCos
IFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9URU1QTEFURV9WSVNJVF9DSElMRFJFTjsKIAog
ICAgIC8vIFJldHVybnMgdHJ1ZSBpZiBzdWNjZXNzZnVsLCBhbmQgZmFsc2Ugb24gZXJyb3I7IGl0
IHdpbGwgdGhyb3cgb24gZXJyb3IuCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3RoZXJBZGFwdG9y
PgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJh
eVZpZXdJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmgJKHJldmlzaW9uIDI3MjcxMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5s
aW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC01MTcsNyArNTE3LDggQEAgc2l6ZV90IEpTR2VuZXJp
Y1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OgogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9y
Pgotdm9pZCBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6dmlzaXRDaGlsZHJlbihK
U0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlz
aXRvcj4KK3ZvaWQgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OnZpc2l0Q2hpbGRy
ZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU0dlbmVyaWNU
eXBlZEFycmF5VmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0dlbmVyaWNUeXBlZEFycmF5Vmll
dyo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5m
bygpKTsKQEAgLTU1NSw0ICs1NTYsNiBAQCB2b2lkIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFk
YXB0b3I+Ojp2CiAgICAgfQogfQogCitERUZJTkVfVEVNUExBVEVfVklTSVRfQ0hJTERSRU4odGVt
cGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4sIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+
KTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0dsb2JhbE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCShyZXZpc2lvbiAyNzI3MTApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE4OTIsNyArMTg5Miw4IEBAIHZvaWQgSlNHbG9iYWxPYmplY3Q6OnJlc2V0UHJvdG90
eXBlKFZNJiAKICAgICBzZXRHbG9iYWxUaGlzKHZtLCBKU1Byb3h5OjpjcmVhdGUodm0sIEpTUHJv
eHk6OmNyZWF0ZVN0cnVjdHVyZSh2bSwgdGhpcywgcHJvdG90eXBlLCBQdXJlRm9yd2FyZGluZ1By
b3h5VHlwZSksIHRoaXMpKTsKIH0KIAotdm9pZCBKU0dsb2JhbE9iamVjdDo6dmlzaXRDaGlsZHJl
bihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUg
VmlzaXRvcj4KK3ZvaWQgSlNHbG9iYWxPYmplY3Q6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCog
Y2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsgCiAgICAgSlNHbG9iYWxPYmplY3QqIHRoaXNPYmpl
Y3QgPSBqc0Nhc3Q8SlNHbG9iYWxPYmplY3QqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNU
X0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC0yMDYwLDYgKzIwNjEsOCBAQCB2b2lk
IEpTR2xvYmFsT2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsCiAgICAgdGhpc09iamVjdC0+bV9y
ZWdFeHBHbG9iYWxEYXRhLnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOwogfQogCitERUZJTkVfRVhQ
T1JUX1ZJU0lUX0NISUxEUkVOKEpTR2xvYmFsT2JqZWN0KTsKKwogQ2FsbEZyYW1lKiBKU0dsb2Jh
bE9iamVjdDo6ZGVwcmVjYXRlZENhbGxGcmFtZUZvckRlYnVnZ2VyKCkKIHsKICAgICByZXR1cm4g
Q2FsbEZyYW1lOjpjcmVhdGUobV9kZXByZWNhdGVkQ2FsbEZyYW1lRm9yRGVidWdnZXIpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCShy
ZXZpc2lvbiAyNzI3MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2Jh
bE9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC02MDksNyArNjA5LDcgQEAgcHVibGljOgogICAg
IEpTX0VYUE9SVF9QUklWQVRFIH5KU0dsb2JhbE9iamVjdCgpOwogICAgIEpTX0VYUE9SVF9QUklW
QVRFIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CiAKLSAgICBKU19FWFBPUlRfUFJJVkFU
RSBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAg
REVDTEFSRV9FWFBPUlRfVklTSVRfQ0hJTERSRU47CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSBz
dGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCos
IFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3Rh
dGljIGJvb2wgcHV0KEpTQ2VsbCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBKU1Zh
bHVlLCBQdXRQcm9wZXJ0eVNsb3QmKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTSW1tdXRhYmxlQnV0dGVyZmx5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0ltbXV0YWJsZUJ1dHRlcmZseS5jcHAJKHJldmlzaW9uIDI3Mjcx
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTSW1tdXRhYmxlQnV0dGVyZmx5
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsOCBAQCBuYW1lc3BhY2UgSlNDIHsKIAog
Y29uc3QgQ2xhc3NJbmZvIEpTSW1tdXRhYmxlQnV0dGVyZmx5OjpzX2luZm8gPSB7ICJJbW11dGFi
bGUgQnV0dGVyZmx5IiwgbnVsbHB0ciwgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9U
QUJMRShKU0ltbXV0YWJsZUJ1dHRlcmZseSkgfTsKIAotdm9pZCBKU0ltbXV0YWJsZUJ1dHRlcmZs
eTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVt
cGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNJbW11dGFibGVCdXR0ZXJmbHk6OnZpc2l0
Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBBU1NF
UlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNlbGwsIGluZm8oKSk7CiAgICAgQmFzZTo6dmlzaXRDaGls
ZHJlbihjZWxsLCB2aXNpdG9yKTsKQEAgLTQ1LDYgKzQ2LDggQEAgdm9pZCBKU0ltbXV0YWJsZUJ1
dHRlcmZseTo6dmlzaXRDaGlsZHJlbgogICAgIHZpc2l0b3IuYXBwZW5kVmFsdWVzSGlkZGVuKGJ1
dHRlcmZseS0+Y29udGlndW91cygpLmRhdGEoKSwgYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKSk7
CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU0ltbXV0YWJsZUJ1dHRlcmZseSk7CisKIHZv
aWQgSlNJbW11dGFibGVCdXR0ZXJmbHk6OmNvcHlUb0FyZ3VtZW50cyhKU0dsb2JhbE9iamVjdCos
IEpTVmFsdWUqIGZpcnN0RWxlbWVudERlc3QsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVu
Z3RoKQogewogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbW11dGFibGVCdXR0ZXJmbHkuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ltbXV0YWJsZUJ1
dHRlcmZseS5oCShyZXZpc2lvbiAyNzI3MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0ltbXV0YWJsZUJ1dHRlcmZseS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDUsNyArMTQ1
LDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4ganNEb3VibGVOdW1iZXIodmFsdWUpOwogICAg
IH0KIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3Im
KTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgdm9pZCBjb3B5VG9Bcmd1bWVu
dHMoSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlKiBmaXJzdEVsZW1lbnREZXN0LCB1bnNpZ25lZCBv
ZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTSW50ZXJuYWxGaWVsZE9iamVjdEltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ludGVybmFsRmllbGRPYmplY3RJbXBsLmgJKHJldmlz
aW9uIDI3MjcxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTSW50ZXJuYWxG
aWVsZE9iamVjdEltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtNjYsNyArNjYsNyBAQCBwdWJsaWM6
CiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkludGVybmFsRmllbGQodW5zaWduZWQgaW5k
ZXgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU0ludGVybmFsRmllbGRPYmplY3RJbXBsLCBt
X2ludGVybmFsRmllbGRzKSArIGluZGV4ICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPik7
IH0KIAogcHJvdGVjdGVkOgotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwg
U2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1RFTVBMQVRFX1ZJU0lUX0NISUxEUkVOOwogCiAg
ICAgSlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbChWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJl
KQogICAgICAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTSW50ZXJuYWxGaWVsZE9iamVjdEltcGxJbmxpbmVzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbnRlcm5hbEZpZWxkT2JqZWN0
SW1wbElubGluZXMuaAkocmV2aXNpb24gMjcyNzEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbElubGluZXMuaAkod29ya2luZyBjb3B5
KQpAQCAtMzAsNyArMzAsOCBAQAogbmFtZXNwYWNlIEpTQyB7CiAKIHRlbXBsYXRlPHVuc2lnbmVk
IHBhc3NlZE51bWJlck9mSW50ZXJuYWxGaWVsZHM+Ci12b2lkIEpTSW50ZXJuYWxGaWVsZE9iamVj
dEltcGw8cGFzc2VkTnVtYmVyT2ZJbnRlcm5hbEZpZWxkcz46OnZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+
Cit2b2lkIEpTSW50ZXJuYWxGaWVsZE9iamVjdEltcGw8cGFzc2VkTnVtYmVyT2ZJbnRlcm5hbEZp
ZWxkcz46OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikK
IHsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTSW50ZXJuYWxGaWVsZE9iamVjdElt
cGwqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGlu
Zm8oKSk7CkBAIC0zOCw0ICszOSw2IEBAIHZvaWQgSlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbDxw
YXNzZWROdW0KICAgICB2aXNpdG9yLmFwcGVuZFZhbHVlcyh0aGlzT2JqZWN0LT5tX2ludGVybmFs
RmllbGRzLCBudW1iZXJPZkludGVybmFsRmllbGRzKTsKIH0KIAorREVGSU5FX1RFTVBMQVRFX1ZJ
U0lUX0NISUxEUkVOKHRlbXBsYXRlPHVuc2lnbmVkIHBhc3NlZE51bWJlck9mSW50ZXJuYWxGaWVs
ZHM+LCBKU0ludGVybmFsRmllbGRPYmplY3RJbXBsPHBhc3NlZE51bWJlck9mSW50ZXJuYWxGaWVs
ZHM+KTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0xleGljYWxFbnZpcm9ubWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMZXhpY2FsRW52aXJvbm1lbnQuY3BwCShyZXZpc2lvbiAy
NzI3MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xleGljYWxFbnZpcm9u
bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDcgKzM2LDggQEAgbmFtZXNwYWNlIEpTQyB7
CiAKIGNvbnN0IENsYXNzSW5mbyBKU0xleGljYWxFbnZpcm9ubWVudDo6c19pbmZvID0geyAiSlNM
ZXhpY2FsRW52aXJvbm1lbnQiLCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBudWxscHRyLCBDUkVB
VEVfTUVUSE9EX1RBQkxFKEpTTGV4aWNhbEVudmlyb25tZW50KSB9OwogCi12b2lkIEpTTGV4aWNh
bEVudmlyb25tZW50Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZp
c2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0xleGljYWxFbnZpcm9u
bWVudDo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQog
ewogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNMZXhpY2FsRW52aXJvbm1lbnQqPihj
ZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7
CkBAIC00NCw2ICs0NSw4IEBAIHZvaWQgSlNMZXhpY2FsRW52aXJvbm1lbnQ6OnZpc2l0Q2hpbGRy
ZW4KICAgICB2aXNpdG9yLmFwcGVuZFZhbHVlc0hpZGRlbih0aGlzT2JqZWN0LT52YXJpYWJsZXMo
KSwgdGhpc09iamVjdC0+c3ltYm9sVGFibGUoKS0+c2NvcGVTaXplKCkpOwogfQogCitERUZJTkVf
VklTSVRfQ0hJTERSRU4oSlNMZXhpY2FsRW52aXJvbm1lbnQpOworCiB2b2lkIEpTTGV4aWNhbEVu
dmlyb25tZW50OjphbmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5hbHl6
ZXIpCiB7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0xleGljYWxFbnZpcm9ubWVu
dCo+KGNlbGwpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMZXhpY2Fs
RW52aXJvbm1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0xleGljYWxFbnZpcm9ubWVudC5oCShyZXZpc2lvbiAyNzI3MTApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0xleGljYWxFbnZpcm9ubWVudC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xMzQsNyArMTM0LDcgQEAgcHJvdGVjdGVkOgogICAgICAgICB9CiAgICAgfQogCi0gICAg
c3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERF
Q0xBUkVfVklTSVRfQ0hJTERSRU47CiAgICAgc3RhdGljIHZvaWQgYW5hbHl6ZUhlYXAoSlNDZWxs
KiwgSGVhcEFuYWx5emVyJik7CiB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU01hcEl0ZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU01hcEl0ZXJhdG9yLmNwcAkocmV2aXNpb24gMjcyNzEwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNYXBJdGVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTU3LDEzICs1NywxNiBAQCB2b2lkIEpTTWFwSXRlcmF0b3I6OmZpbmlzaENyZWF0aW9uKFZN
JiB2CiAgICAgICAgIEJhc2U6OmludGVybmFsRmllbGQoaW5kZXgpLnNldCh2bSwgdGhpcywgdmFs
dWVzW2luZGV4XSk7CiB9CiAKLXZvaWQgSlNNYXBJdGVyYXRvcjo6dmlzaXRDaGlsZHJlbihKU0Nl
bGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRv
cj4KK3ZvaWQgSlNNYXBJdGVyYXRvcjo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBW
aXNpdG9yJiB2aXNpdG9yKQogewogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNNYXBJ
dGVyYXRvcio+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVj
dCwgaW5mbygpKTsKICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3Ip
OwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNNYXBJdGVyYXRvcik7CisKIEpTVmFsdWUg
SlNNYXBJdGVyYXRvcjo6Y3JlYXRlUGFpcihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBK
U1ZhbHVlIGtleSwgSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBh
cmdzOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNYXBJdGVyYXRvci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTWFwSXRlcmF0
b3IuaAkocmV2aXNpb24gMjcyNzEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNNYXBJdGVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDIsNyArMTQyLDcgQEAgcHJpdmF0
ZToKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgSlNNYXAq
LCBJdGVyYXRpb25LaW5kKTsKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7CiAgICAgSlNW
YWx1ZSBjcmVhdGVQYWlyKEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSwgSlNWYWx1ZSk7Ci0gICAg
c3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERF
Q0xBUkVfVklTSVRfQ0hJTERSRU47CiB9OwogU1RBVElDX0FTU0VSVF9JU19UUklWSUFMTFlfREVT
VFJVQ1RJQkxFKEpTTWFwSXRlcmF0b3IpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU01vZHVsZUVudmlyb25tZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZUVudmlyb25tZW50LmNwcAkocmV2aXNpb24gMjcy
NzEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVFbnZpcm9ubWVu
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY1LDcgKzY1LDggQEAgdm9pZCBKU01vZHVsZUVudmly
b25tZW50OjpmaW5pc2hDcmVhdGlvbgogICAgIHRoaXMtPm1vZHVsZVJlY29yZFNsb3QoKS5zZXQo
dm0sIHRoaXMsIG1vZHVsZVJlY29yZCk7CiB9CiAKLXZvaWQgSlNNb2R1bGVFbnZpcm9ubWVudDo6
dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxh
dGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNNb2R1bGVFbnZpcm9ubWVudDo6dmlzaXRDaGls
ZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTTW9kdWxl
RW52aXJvbm1lbnQqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNNb2R1bGVFbnZpcm9ubWVudCo+KGNl
bGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsK
QEAgLTc0LDYgKzc1LDggQEAgdm9pZCBKU01vZHVsZUVudmlyb25tZW50Ojp2aXNpdENoaWxkcmVu
KAogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1vZHVsZVJlY29yZFNsb3QoKSk7CiB9
CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU01vZHVsZUVudmlyb25tZW50KTsKKwogYm9vbCBK
U01vZHVsZUVudmlyb25tZW50OjpnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqIGNlbGwsIEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFBy
b3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZUVudmlyb25tZW50LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVFbnZp
cm9ubWVudC5oCShyZXZpc2lvbiAyNzI3MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU01vZHVsZUVudmlyb25tZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTg5LDcgKzg5LDcg
QEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuICpiaXR3aXNlX2Nhc3Q8V3JpdGVCYXJyaWVyQmFz
ZTxBYnN0cmFjdE1vZHVsZVJlY29yZD4qPihiaXR3aXNlX2Nhc3Q8Y2hhcio+KHRoaXMpICsgb2Zm
c2V0T2ZNb2R1bGVSZWNvcmQoc3ltYm9sVGFibGUoKSkpOwogICAgIH0KIAotICAgIHN0YXRpYyB2
b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJ
U0lUX0NISUxEUkVOOwogfTsKIAogaW5saW5lIEpTTW9kdWxlRW52aXJvbm1lbnQ6OkpTTW9kdWxl
RW52aXJvbm1lbnQoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNTY29wZSogY3VycmVu
dFNjb3BlLCBTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU01vZHVsZU5hbWVzcGFjZU9iamVjdC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QuY3Bw
CShyZXZpc2lvbiAyNzI3MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01v
ZHVsZU5hbWVzcGFjZU9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg1LDcgKzg1LDggQEAg
dm9pZCBKU01vZHVsZU5hbWVzcGFjZU9iamVjdDo6ZGVzdHJveShKUwogICAgIHRoaXNPYmplY3Qt
PkpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0Ojp+SlNNb2R1bGVOYW1lc3BhY2VPYmplY3QoKTsKIH0K
IAotdm9pZCBKU01vZHVsZU5hbWVzcGFjZU9iamVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNl
bGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3Zv
aWQgSlNNb2R1bGVOYW1lc3BhY2VPYmplY3Q6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2Vs
bCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU01vZHVsZU5hbWVzcGFjZU9iamVjdCogdGhp
c09iamVjdCA9IGpzQ2FzdDxKU01vZHVsZU5hbWVzcGFjZU9iamVjdCo+KGNlbGwpOwogICAgIEFT
U0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTk4LDYgKzk5
LDggQEAgdm9pZCBKU01vZHVsZU5hbWVzcGFjZU9iamVjdDo6dmlzaXRDaGlsZAogICAgIH0KIH0K
IAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0KTsKKwogc3Rh
dGljIEpTVmFsdWUgZ2V0VmFsdWUoSlNNb2R1bGVFbnZpcm9ubWVudCogZW52aXJvbm1lbnQsIFBy
b3BlcnR5TmFtZSBsb2NhbE5hbWUsIFNjb3BlT2Zmc2V0JiBzY29wZU9mZnNldCkKIHsKICAgICBT
eW1ib2xUYWJsZSogc3ltYm9sVGFibGUgPSBlbnZpcm9ubWVudC0+c3ltYm9sVGFibGUoKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlTmFtZXNwYWNlT2JqZWN0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVO
YW1lc3BhY2VPYmplY3QuaAkocmV2aXNpb24gMjcyNzEwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAt
NzIsNyArNzIsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIEpTX0VYUE9SVF9QUklWQVRFIEpT
TW9kdWxlTmFtZXNwYWNlT2JqZWN0KFZNJiwgU3RydWN0dXJlKik7CiAgICAgSlNfRVhQT1JUX1BS
SVZBVEUgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0dsb2JhbE9iamVjdCosIEFic3RyYWN0TW9kdWxl
UmVjb3JkKiwgVmVjdG9yPHN0ZDo6cGFpcjxJZGVudGlmaWVyLCBBYnN0cmFjdE1vZHVsZVJlY29y
ZDo6UmVzb2x1dGlvbj4+JiYpOwotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogICAgIGJvb2wg
Z2V0T3duUHJvcGVydHlTbG90Q29tbW9uKEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBQ
cm9wZXJ0eVNsb3QmKTsKIAogICAgIHN0cnVjdCBFeHBvcnRFbnRyeSB7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZVJlY29yZC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVSZWNvcmQuY3BwCShyZXZpc2lv
biAyNzI3MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZVJlY29y
ZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcwLDcgKzcwLDggQEAgdm9pZCBKU01vZHVsZVJlY29y
ZDo6ZmluaXNoQ3JlYXRpb24oSlNHbAogICAgIEFTU0VSVChpbmhlcml0cyh2bSwgaW5mbygpKSk7
CiB9CiAKLXZvaWQgSlNNb2R1bGVSZWNvcmQ6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBT
bG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpT
TW9kdWxlUmVjb3JkOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZp
c2l0b3IpCiB7CiAgICAgSlNNb2R1bGVSZWNvcmQqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNNb2R1
bGVSZWNvcmQqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmpl
Y3QsIGluZm8oKSk7CkBAIC03OCw2ICs3OSw4IEBAIHZvaWQgSlNNb2R1bGVSZWNvcmQ6OnZpc2l0
Q2hpbGRyZW4oSlNDZWwKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX21vZHVsZVBy
b2dyYW1FeGVjdXRhYmxlKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTTW9kdWxlUmVj
b3JkKTsKKwogdm9pZCBKU01vZHVsZVJlY29yZDo6bGluayhKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBKU1ZhbHVlIHNjcmlwdEZldGNoZXIpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2Jq
ZWN0LT52bSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVS
ZWNvcmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01v
ZHVsZVJlY29yZC5oCShyZXZpc2lvbiAyNzI3MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU01vZHVsZVJlY29yZC5oCSh3b3JraW5nIGNvcHkpCkBAIC02Niw3ICs2Niw3IEBA
IHByaXZhdGU6CiAKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTR2xvYmFsT2JqZWN0KiwgVk0m
KTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3Im
KTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgdm9pZCBpbnN0YW50aWF0ZURl
Y2xhcmF0aW9ucyhKU0dsb2JhbE9iamVjdCosIE1vZHVsZVByb2dyYW1FeGVjdXRhYmxlKiwgSlNW
YWx1ZSBzY3JpcHRGZXRjaGVyKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNOYXRpdmVTdGRGdW5jdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNOYXRpdmVTdGRGdW5jdGlvbi5jcHAJKHJldmlzaW9uIDI3MjcxMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTmF0aXZlU3RkRnVuY3Rpb24uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00MSwxMyArNDEsMTYgQEAgSlNOYXRpdmVTdGRGdW5jdGlvbjo6
SlNOYXRpdmVTdGRGdW5jdGlvbgogewogfQogCi12b2lkIEpTTmF0aXZlU3RkRnVuY3Rpb246OnZp
c2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRl
PHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTTmF0aXZlU3RkRnVuY3Rpb246OnZpc2l0Q2hpbGRy
ZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU05hdGl2ZVN0
ZEZ1bmN0aW9uKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTTmF0aXZlU3RkRnVuY3Rpb24qPihjZWxs
KTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAg
ICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKIH0KIAorREVGSU5F
X1ZJU0lUX0NISUxEUkVOKEpTTmF0aXZlU3RkRnVuY3Rpb24pOworCiB2b2lkIEpTTmF0aXZlU3Rk
RnVuY3Rpb246OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgTmF0aXZlRXhlY3V0YWJsZSogZXhlY3V0
YWJsZSwgdW5zaWduZWQgbGVuZ3RoLCBjb25zdCBTdHJpbmcmIG5hbWUpCiB7CiAgICAgQmFzZTo6
ZmluaXNoQ3JlYXRpb24odm0sIGV4ZWN1dGFibGUsIGxlbmd0aCwgbmFtZSk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU05hdGl2ZVN0ZEZ1bmN0aW9uLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNOYXRpdmVTdGRGdW5jdGlvbi5o
CShyZXZpc2lvbiAyNzI3MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU05h
dGl2ZVN0ZEZ1bmN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTY1LDcgKzY1LDcgQEAgcHVibGlj
OgogcHJpdmF0ZToKICAgICBKU05hdGl2ZVN0ZEZ1bmN0aW9uKFZNJiwgTmF0aXZlRXhlY3V0YWJs
ZSosIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKiwgTmF0aXZlU3RkRnVuY3Rpb24mJik7CiAg
ICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIE5hdGl2ZUV4ZWN1dGFibGUqLCB1bnNpZ25lZCBs
ZW5ndGgsIGNvbnN0IFN0cmluZyYgbmFtZSk7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJl
bihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAK
ICAgICBOYXRpdmVTdGRGdW5jdGlvbiBtX2Z1bmN0aW9uOwogfTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAJKHJldmlzaW9uIDI3MjcxMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNzIsNyArNzIsOCBAQCBjb25zdCBDbGFzc0luZm8gSlNPYmplY3Q6OnNfaW5mbyA9IHsgIk9i
CiAKIGNvbnN0IENsYXNzSW5mbyBKU0ZpbmFsT2JqZWN0OjpzX2luZm8gPSB7ICJPYmplY3QiLCAm
QmFzZTo6c19pbmZvLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTRmlu
YWxPYmplY3QpIH07CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKU09iamVjdDo6bWFya0F1eGlsaWFy
eUFuZFZpc2l0T3V0T2ZMaW5lUHJvcGVydGllcyhTbG90VmlzaXRvciYgdmlzaXRvciwgQnV0dGVy
Zmx5KiBidXR0ZXJmbHksIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBtYXhP
ZmZzZXQpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgorQUxXQVlTX0lOTElORSB2b2lkIEpT
T2JqZWN0OjptYXJrQXV4aWxpYXJ5QW5kVmlzaXRPdXRPZkxpbmVQcm9wZXJ0aWVzKFZpc2l0b3Im
IHZpc2l0b3IsIEJ1dHRlcmZseSogYnV0dGVyZmx5LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUHJv
cGVydHlPZmZzZXQgbWF4T2Zmc2V0KQogewogICAgIC8vIFdlIGNhbGwgdGhpcyB3aGVuIHdlIGZv
dW5kIGV2ZXJ5dGhpbmcgd2l0aG91dCByYWNlcy4KICAgICBBU1NFUlQoc3RydWN0dXJlKTsKQEAg
LTEwMyw3ICsxMDQsOCBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSlNPYmplY3Q6Om1hcmtBdXhpbGlh
CiAgICAgdmlzaXRvci5hcHBlbmRWYWx1ZXNIaWRkZW4oYnV0dGVyZmx5LT5wcm9wZXJ0eVN0b3Jh
Z2UoKSAtIG91dE9mTGluZVNpemUsIG91dE9mTGluZVNpemUpOwogfQogCi1BTFdBWVNfSU5MSU5F
IFN0cnVjdHVyZSogSlNPYmplY3Q6OnZpc2l0QnV0dGVyZmx5KFNsb3RWaXNpdG9yJiB2aXNpdG9y
KQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK0FMV0FZU19JTkxJTkUgU3RydWN0dXJlKiBK
U09iamVjdDo6dmlzaXRCdXR0ZXJmbHkoVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBzdGF0aWMg
Y29uc3QgY2hhciogY29uc3QgcmFjZVJlYXNvbiA9ICJKU09iamVjdDo6dmlzaXRCdXR0ZXJmbHki
OwogICAgIFN0cnVjdHVyZSogcmVzdWx0ID0gdmlzaXRCdXR0ZXJmbHlJbXBsKHZpc2l0b3IpOwpA
QCAtMTEyLDcgKzExNCw4IEBAIEFMV0FZU19JTkxJTkUgU3RydWN0dXJlKiBKU09iamVjdDo6dmlz
aXQKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1BTFdBWVNfSU5MSU5FIFN0cnVjdHVyZSogSlNP
YmplY3Q6OnZpc2l0QnV0dGVyZmx5SW1wbChTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRl
PHR5cGVuYW1lIFZpc2l0b3I+CitBTFdBWVNfSU5MSU5FIFN0cnVjdHVyZSogSlNPYmplY3Q6OnZp
c2l0QnV0dGVyZmx5SW1wbChWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFZNJiB2bSA9IHZpc2l0
b3Iudm0oKTsKICAgICAKQEAgLTQxMiwyNCArNDE1LDIwIEBAIHNpemVfdCBKU09iamVjdDo6ZXN0
aW1hdGVkU2l6ZShKU0NlbGwqIGMKICAgICByZXR1cm4gQmFzZTo6ZXN0aW1hdGVkU2l6ZShjZWxs
LCB2bSkgKyBidXR0ZXJmbHlPdXRPZkxpbmVTaXplOwogfQogCi12b2lkIEpTT2JqZWN0Ojp2aXNp
dENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0
eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU09iamVjdDo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxs
KiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTT2JqZWN0KiB0aGlzT2JqZWN0ID0g
anNDYXN0PEpTT2JqZWN0Kj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0
aGlzT2JqZWN0LCBpbmZvKCkpOwotI2lmIEFTU0VSVF9FTkFCTEVECi0gICAgYm9vbCB3YXNDaGVj
a2luZ0ZvckRlZmF1bHRNYXJrVmlvbGF0aW9uID0gdmlzaXRvci5tX2lzQ2hlY2tpbmdGb3JEZWZh
dWx0TWFya1Zpb2xhdGlvbjsKLSAgICB2aXNpdG9yLm1faXNDaGVja2luZ0ZvckRlZmF1bHRNYXJr
VmlvbGF0aW9uID0gZmFsc2U7Ci0jZW5kaWYKLSAgICAKKyAgICB0eXBlbmFtZSBWaXNpdG9yOjpE
ZWZhdWx0TWFya2luZ1Zpb2xhdGlvbkFzc2VydGlvblNjb3BlIGFzc2VydGlvblNjb3BlKHZpc2l0
b3IpOworCiAgICAgSlNDZWxsOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwot
ICAgIAorCiAgICAgdGhpc09iamVjdC0+dmlzaXRCdXR0ZXJmbHkodmlzaXRvcik7Ci0gICAgCi0j
aWYgQVNTRVJUX0VOQUJMRUQKLSAgICB2aXNpdG9yLm1faXNDaGVja2luZ0ZvckRlZmF1bHRNYXJr
VmlvbGF0aW9uID0gd2FzQ2hlY2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlvbjsKLSNlbmRpZgog
fQogCitERUZJTkVfRVhQT1JUX1ZJU0lUX0NISUxEUkVOKEpTT2JqZWN0KTsKKwogdm9pZCBKU09i
amVjdDo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQog
ewogICAgIEpTT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTT2JqZWN0Kj4oY2VsbCk7CkBA
IC00NjgsMTQgKzQ2NywxMiBAQCB2b2lkIEpTT2JqZWN0OjphbmFseXplSGVhcChKU0NlbGwqIGNl
bGwsCiAgICAgfQogfQogCi12b2lkIEpTRmluYWxPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+
Cit2b2lkIEpTRmluYWxPYmplY3Q6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlz
aXRvciYgdmlzaXRvcikKIHsKICAgICBKU0ZpbmFsT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0
PEpTRmluYWxPYmplY3QqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRo
aXNPYmplY3QsIGluZm8oKSk7Ci0jaWYgQVNTRVJUX0VOQUJMRUQKLSAgICBib29sIHdhc0NoZWNr
aW5nRm9yRGVmYXVsdE1hcmtWaW9sYXRpb24gPSB2aXNpdG9yLm1faXNDaGVja2luZ0ZvckRlZmF1
bHRNYXJrVmlvbGF0aW9uOwotICAgIHZpc2l0b3IubV9pc0NoZWNraW5nRm9yRGVmYXVsdE1hcmtW
aW9sYXRpb24gPSBmYWxzZTsKLSNlbmRpZgorICAgIHR5cGVuYW1lIFZpc2l0b3I6OkRlZmF1bHRN
YXJraW5nVmlvbGF0aW9uQXNzZXJ0aW9uU2NvcGUgYXNzZXJ0aW9uU2NvcGUodmlzaXRvcik7CiAg
ICAgCiAgICAgSlNDZWxsOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwogICAg
IApAQCAtNDgzLDEyICs0ODAsMTAgQEAgdm9pZCBKU0ZpbmFsT2JqZWN0Ojp2aXNpdENoaWxkcmVu
KEpTQ2VsbAogICAgICAgICBpZiAodW5zaWduZWQgc3RvcmFnZVNpemUgPSBzdHJ1Y3R1cmUtPmlu
bGluZVNpemUoKSkKICAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kVmFsdWVzSGlkZGVuKHRoaXNP
YmplY3QtPmlubGluZVN0b3JhZ2UoKSwgc3RvcmFnZVNpemUpOwogICAgIH0KLSAgICAKLSNpZiBB
U1NFUlRfRU5BQkxFRAotICAgIHZpc2l0b3IubV9pc0NoZWNraW5nRm9yRGVmYXVsdE1hcmtWaW9s
YXRpb24gPSB3YXNDaGVja2luZ0ZvckRlZmF1bHRNYXJrVmlvbGF0aW9uOwotI2VuZGlmCiB9CiAK
K0RFRklORV9FWFBPUlRfVklTSVRfQ0hJTERSRU4oSlNGaW5hbE9iamVjdCk7CisKIFN0cmluZyBK
U09iamVjdDo6Y2xhc3NOYW1lKGNvbnN0IEpTT2JqZWN0KiBvYmplY3QsIFZNJiB2bSkKIHsKICAg
ICBjb25zdCBDbGFzc0luZm8qIGluZm8gPSBvYmplY3QtPmNsYXNzSW5mbyh2bSk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJKHJldmlzaW9uIDI3MjcxMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEwOCw4ICsxMDgsOSBAQCBjbGFzcyBKU09iamVjdCA6IHB1YmxpYyBKU0NlbGwgewog
cHVibGljOgogICAgIHVzaW5nIEJhc2UgPSBKU0NlbGw7CiAKKyAgICBERUNMQVJFX0VYUE9SVF9W
SVNJVF9DSElMRFJFTjsKKwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBzaXplX3QgZXN0
aW1hdGVkU2l6ZShKU0NlbGwqLCBWTSYpOwotICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2
b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKICAgICBKU19FWFBPUlRf
UFJJVkFURSBzdGF0aWMgdm9pZCBhbmFseXplSGVhcChKU0NlbGwqLCBIZWFwQW5hbHl6ZXImKTsK
IAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBTdHJpbmcgY2xhc3NOYW1lKGNvbnN0IEpT
T2JqZWN0KiwgVk0mKTsKQEAgLTk4MiwxMSArOTgzLDExIEBAIHByb3RlY3RlZDoKICAgICBKU09i
amVjdChWTSYsIFN0cnVjdHVyZSosIEJ1dHRlcmZseSogPSBudWxscHRyKTsKICAgICAKICAgICAv
LyBWaXNpdHMgdGhlIGJ1dHRlcmZseSB1bmxlc3MgdGhlcmUgaXMgYSByYWNlLiBSZXR1cm5zIHRo
ZSBzdHJ1Y3R1cmUgaWYgdGhlcmUgd2FzIG5vIHJhY2UuCi0gICAgU3RydWN0dXJlKiB2aXNpdEJ1
dHRlcmZseShTbG90VmlzaXRvciYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IFN0
cnVjdHVyZSogdmlzaXRCdXR0ZXJmbHkoVmlzaXRvciYpOwogICAgIAotICAgIFN0cnVjdHVyZSog
dmlzaXRCdXR0ZXJmbHlJbXBsKFNsb3RWaXNpdG9yJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
VmlzaXRvcj4gU3RydWN0dXJlKiB2aXNpdEJ1dHRlcmZseUltcGwoVmlzaXRvciYpOwogICAgIAot
ICAgIHZvaWQgbWFya0F1eGlsaWFyeUFuZFZpc2l0T3V0T2ZMaW5lUHJvcGVydGllcyhTbG90Vmlz
aXRvciYsIEJ1dHRlcmZseSosIFN0cnVjdHVyZSosIFByb3BlcnR5T2Zmc2V0IG1heE9mZnNldCk7
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCBtYXJrQXV4aWxpYXJ5QW5kVmlz
aXRPdXRPZkxpbmVQcm9wZXJ0aWVzKFZpc2l0b3ImLCBCdXR0ZXJmbHkqLCBTdHJ1Y3R1cmUqLCBQ
cm9wZXJ0eU9mZnNldCBtYXhPZmZzZXQpOwogCiAgICAgLy8gQ2FsbCB0aGlzIGlmIHlvdSBrbm93
IHRoYXQgdGhlIG9iamVjdCBpcyBpbiBhIG1vZGUgd2hlcmUgaXQgaGFzIGFycmF5CiAgICAgLy8g
c3RvcmFnZS4gVGhpcyB3aWxsIGFzc2VydCBvdGhlcndpc2UuCkBAIC0xMTc0LDggKzExNzUsNiBA
QCBwcm90ZWN0ZWQ6CiAgICAgfQogfTsKIAotY2xhc3MgSlNGaW5hbE9iamVjdDsKLQogLy8gSlNG
aW5hbE9iamVjdCBpcyBhIHR5cGUgb2YgSlNPYmplY3QgdGhhdCBjb250YWlucyBzdWZmaWNpZW50
IGludGVybmFsCiAvLyBzdG9yYWdlIHRvIGZ1bGx5IG1ha2UgdXNlIG9mIHRoZSBjb2xsZWN0b3Ig
Y2VsbCBjb250YWluaW5nIGl0LgogY2xhc3MgSlNGaW5hbE9iamVjdCBmaW5hbCA6IHB1YmxpYyBK
U09iamVjdCB7CkBAIC0xMjE0LDE1ICsxMjEzLDEzIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJu
IFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgdHlwZUluZm8o
KSwgaW5mbygpLCBkZWZhdWx0SW5kZXhpbmdUeXBlLCBpbmxpbmVDYXBhY2l0eSk7CiAgICAgfQog
Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwq
LCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfRVhQT1JUX1ZJU0lUX0NISUxEUkVOOwogCiAg
ICAgREVDTEFSRV9FWFBPUlRfSU5GTzsKIAogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgTExJ
bnRPZmZzZXRzRXh0cmFjdG9yOwogCi0gICAgdm9pZCB2aXNpdENoaWxkcmVuQ29tbW9uKFNsb3RW
aXNpdG9yJik7Ci0KICAgICBleHBsaWNpdCBKU0ZpbmFsT2JqZWN0KFZNJiB2bSwgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUsIEJ1dHRlcmZseSogYnV0dGVyZmx5KQogICAgICAgICA6IEpTT2JqZWN0KHZt
LCBzdHJ1Y3R1cmUsIGJ1dHRlcmZseSkKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1Byb21pc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTUHJvbWlzZS5jcHAJKHJldmlzaW9uIDI3MjcxMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvbWlzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY3
LDEzICs2NywxNiBAQCB2b2lkIEpTUHJvbWlzZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQogICAg
ICAgICBCYXNlOjppbnRlcm5hbEZpZWxkKGluZGV4KS5zZXQodm0sIHRoaXMsIHZhbHVlc1tpbmRl
eF0pOwogfQogCi12b2lkIEpTUHJvbWlzZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNQ
cm9taXNlOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3Ip
CiB7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Byb21pc2UqPihjZWxsKTsKICAg
ICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAgICAgQmFz
ZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKIH0KIAorREVGSU5FX1ZJU0lU
X0NISUxEUkVOKEpTUHJvbWlzZSk7CisKIGF1dG8gSlNQcm9taXNlOjpzdGF0dXMoVk0mKSBjb25z
dCAtPiBTdGF0dXMKIHsKICAgICBKU1ZhbHVlIHZhbHVlID0gaW50ZXJuYWxGaWVsZChGaWVsZDo6
RmxhZ3MpLmdldCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9t
aXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9t
aXNlLmgJKHJldmlzaW9uIDI3MjcxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTUHJvbWlzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC05Niw3ICs5Niw3IEBAIHB1YmxpYzoKICAg
ICB9OwogICAgIHN0YXRpYyBEZWZlcnJlZERhdGEgY3JlYXRlRGVmZXJyZWREYXRhKEpTR2xvYmFs
T2JqZWN0KiwgSlNQcm9taXNlQ29uc3RydWN0b3IqKTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0
Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxE
UkVOOwogCiBwcm90ZWN0ZWQ6CiAgICAgSlNQcm9taXNlKFZNJiwgU3RydWN0dXJlKik7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3Iu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVy
dHlOYW1lRW51bWVyYXRvci5jcHAJKHJldmlzaW9uIDI3MjcxMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTUHJvcGVydHlOYW1lRW51bWVyYXRvci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTcwLDcgKzcwLDggQEAgdm9pZCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmZpbmlz
aENyZQogICAgIH0KIH0KIAotdm9pZCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OnZpc2l0Q2hp
bGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVu
YW1lIFZpc2l0b3I+Cit2b2lkIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6dmlzaXRDaGlsZHJl
bkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTUHJvcGVydHlO
YW1lRW51bWVyYXRvciogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Byb3BlcnR5TmFtZUVudW1lcmF0
b3IqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGlu
Zm8oKSk7CkBAIC04Nyw2ICs4OCw4IEBAIHZvaWQgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjp2
aXNpdENoaWwKICAgICB9CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU1Byb3BlcnR5TmFt
ZUVudW1lcmF0b3IpOworCiAvLyBGSVhNRTogQXNzZXJ0IHRoYXQgcHJvcGVydGllcyByZXR1cm5l
ZCBieSBnZXRPd25Qcm9wZXJ0eU5hbWVzKCkgYXJlIHJlcG9ydGVkIGVudW1lcmFibGUgYnkgZ2V0
T3duUHJvcGVydHlTbG90KCkuCiAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjE5OTI2CiB2b2lkIGdldEVudW1lcmFibGVQcm9wZXJ0eU5hbWVzKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEpTT2JqZWN0KiBiYXNlLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJv
cGVydHlOYW1lcywgdWludDMyX3QmIGluZGV4ZWRMZW5ndGgsIHVpbnQzMl90JiBzdHJ1Y3R1cmVQ
cm9wZXJ0eUNvdW50KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9w
ZXJ0eU5hbWVFbnVtZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmgJKHJldmlzaW9uIDI3MjcxMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVydHlOYW1lRW51bWVyYXRvci5o
CSh3b3JraW5nIGNvcHkpCkBAIC04NCw3ICs4NCw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJu
IE9CSkVDVF9PRkZTRVRPRihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IsIG1fcHJvcGVydHlOYW1l
cyk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90
VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKIHByaXZhdGU6CiAgICAg
ZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTUHJveHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTUHJveHkuY3BwCShyZXZpc2lvbiAyNzI3MTApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUs
NyArMzUsOCBAQCBTVEFUSUNfQVNTRVJUX0lTX1RSSVZJQUxMWV9ERVNUUlVDVElCTEUoCiAKIGNv
bnN0IENsYXNzSW5mbyBKU1Byb3h5OjpzX2luZm8gPSB7ICJKU1Byb3h5IiwgJkJhc2U6OnNfaW5m
bywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1Byb3h5KSB9OwogCi12
b2lkIEpTUHJveHk6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlz
aXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTUHJveHk6OnZpc2l0Q2hp
bGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU1Byb3h5
KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTUHJveHkqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JK
RUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC00Myw2ICs0NCw4IEBAIHZvaWQg
SlNQcm94eTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwKICAgICB2aXNpdG9yLmFwcGVuZCh0
aGlzT2JqZWN0LT5tX3RhcmdldCk7CiB9CiAKK0RFRklORV9FWFBPUlRfVklTSVRfQ0hJTERSRU4o
SlNQcm94eSk7CisKIHZvaWQgSlNQcm94eTo6c2V0VGFyZ2V0KFZNJiB2bSwgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCkKIHsKICAgICBtX3RhcmdldC5zZXQodm0sIHRoaXMsIGdsb2JhbE9i
amVjdCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3h5LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm94eS5oCShyZXZp
c2lvbiAyNzI3MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3h5LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTg1LDcgKzg1LDcgQEAgcHJvdGVjdGVkOgogICAgICAgICBtX3Rh
cmdldC5zZXQodm0sIHRoaXMsIHRhcmdldCk7CiAgICAgfQogCi0gICAgSlNfRVhQT1JUX1BSSVZB
VEUgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAg
IERFQ0xBUkVfRVhQT1JUX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUg
c3RhdGljIFN0cmluZyBjbGFzc05hbWUoY29uc3QgSlNPYmplY3QqLCBWTSYpOwogICAgIEpTX0VY
UE9SVF9QUklWQVRFIHN0YXRpYyBTdHJpbmcgdG9TdHJpbmdOYW1lKGNvbnN0IEpTT2JqZWN0Kiwg
SlNHbG9iYWxPYmplY3QqKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
U2NvcGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
U2NvcGUuY3BwCShyZXZpc2lvbiAyNzI3MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1Njb3BlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksNyArMzksOCBAQCBTVEFUSUNf
QVNTRVJUX0lTX1RSSVZJQUxMWV9ERVNUUlVDVElCTEUoCiAKIGNvbnN0IENsYXNzSW5mbyBKU1Nj
b3BlOjpzX2luZm8gPSB7ICJTY29wZSIsICZCYXNlOjpzX2luZm8sIG51bGxwdHIsIG51bGxwdHIs
IENSRUFURV9NRVRIT0RfVEFCTEUoSlNTY29wZSkgfTsKIAotdm9pZCBKU1Njb3BlOjp2aXNpdENo
aWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBl
bmFtZSBWaXNpdG9yPgordm9pZCBKU1Njb3BlOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNl
bGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNTY29wZSogdGhpc09iamVjdCA9IGpzQ2Fz
dDxKU1Njb3BlKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2Jq
ZWN0LCBpbmZvKCkpOwpAQCAtNDcsNiArNDgsOCBAQCB2b2lkIEpTU2NvcGU6OnZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKiBjZWxsCiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9uZXh0KTsK
IH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTU2NvcGUpOworCiAvLyBSZXR1cm5zIHRydWUg
aWYgd2UgZm91bmQgZW5vdWdoIGluZm9ybWF0aW9uIHRvIHRlcm1pbmF0ZSBvcHRpbWl6YXRpb24u
CiBzdGF0aWMgaW5saW5lIGJvb2wgYWJzdHJhY3RBY2Nlc3MoSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgSlNTY29wZSogc2NvcGUsIGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBHZXRPclB1
dCBnZXRPclB1dCwgc2l6ZV90IGRlcHRoLCBib29sJiBuZWVkc1ZhckluamVjdGlvbkNoZWNrcywg
UmVzb2x2ZU9wJiBvcCwgSW5pdGlhbGl6YXRpb25Nb2RlIGluaXRpYWxpemF0aW9uTW9kZSkKIHsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2NvcGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Njb3BlLmgJKHJldmlzaW9uIDI3
MjcxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2NvcGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNjQsNyArNjQsNyBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgdm9pZCBjb2xs
ZWN0Q2xvc3VyZVZhcmlhYmxlc1VuZGVyVERaKEpTU2NvcGUqLCBURFpFbnZpcm9ubWVudCYgcmVz
dWx0LCBQcml2YXRlTmFtZUVudmlyb25tZW50Jik7CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENo
aWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJF
TjsKIAogICAgIGJvb2wgaXNWYXJTY29wZSgpOwogICAgIGJvb2wgaXNMZXhpY2FsU2NvcGUoKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVP
YmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
U2VnbWVudGVkVmFyaWFibGVPYmplY3QuY3BwCShyZXZpc2lvbiAyNzI3MTApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNjIsMTkgKzYyLDIyIEBAIFNjb3BlT2Zmc2V0IEpTU2VnbWVudGVkVmFy
aWFibGVPYmplY3Q6OmEKICAgICByZXR1cm4gU2NvcGVPZmZzZXQob2xkU2l6ZSk7CiB9CiAKLXZv
aWQgSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGws
IFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2
b2lkIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3Q6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCog
Y2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0
KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3QqPihjZWxsKTsK
ICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7Ci0gICAg
QmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCBzbG90VmlzaXRvcik7CisgICAgQmFzZTo6
dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKICAgICAKICAgICAvLyBGSVhNRTog
V2UgY291bGQgYXZvaWQgbG9ja2luZyBoZXJlIGlmIFNlZ21lbnRlZFZlY3RvciB3YXMgbG9jay1m
cmVlLiBJdCBjb3VsZCBiZSBtYWRlIGxvY2stZnJlZQogICAgIC8vIHJlbGF0aXZlbHkgZWFzaWx5
LgogICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sodGhpc09iamVjdC0+Y2VsbExvY2soKSk7CiAg
ICAgZm9yICh1bnNpZ25lZCBpID0gdGhpc09iamVjdC0+bV92YXJpYWJsZXMuc2l6ZSgpOyBpLS07
KQotICAgICAgICBzbG90VmlzaXRvci5hcHBlbmRIaWRkZW4odGhpc09iamVjdC0+bV92YXJpYWJs
ZXNbaV0pOworICAgICAgICB2aXNpdG9yLmFwcGVuZEhpZGRlbih0aGlzT2JqZWN0LT5tX3Zhcmlh
Ymxlc1tpXSk7CiB9CiAKK0RFRklORV9FWFBPUlRfVklTSVRfQ0hJTERSRU4oSlNTZWdtZW50ZWRW
YXJpYWJsZU9iamVjdCk7CisKIHZvaWQgSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdDo6YW5hbHl6
ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQogewogICAgIEpTU2Vn
bWVudGVkVmFyaWFibGVPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNTZWdtZW50ZWRWYXJp
YWJsZU9iamVjdCo+KGNlbGwpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVPYmplY3QuaAkocmV2aXNpb24gMjcy
NzEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJs
ZU9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC04Niw3ICs4Niw3IEBAIHB1YmxpYzoKICAgICAv
LyB0aGUgaW5kZXggb2YgdGhlIGZpcnN0IG9uZSBhZGRlZC4KICAgICBKU19FWFBPUlRfUFJJVkFU
RSBTY29wZU9mZnNldCBhZGRWYXJpYWJsZXModW5zaWduZWQgbnVtYmVyT2ZWYXJpYWJsZXNUb0Fk
ZCwgSlNWYWx1ZSk7CiAgICAgCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgdmlz
aXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfRVhQT1JUX1ZJ
U0lUX0NISUxEUkVOOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGFuYWx5emVI
ZWFwKEpTQ2VsbCosIEhlYXBBbmFseXplciYpOwogICAgIAogcHJvdGVjdGVkOgpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZXRJdGVyYXRvci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZXRJdGVyYXRvci5jcHAJKHJldmlz
aW9uIDI3MjcxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2V0SXRlcmF0
b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NywxMyArNTcsMTYgQEAgdm9pZCBKU1NldEl0ZXJh
dG9yOjpmaW5pc2hDcmVhdGlvbihWTSYgdgogICAgICAgICBCYXNlOjppbnRlcm5hbEZpZWxkKGlu
ZGV4KS5zZXQodm0sIHRoaXMsIHZhbHVlc1tpbmRleF0pOwogfQogCi12b2lkIEpTU2V0SXRlcmF0
b3I6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3Rl
bXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTU2V0SXRlcmF0b3I6OnZpc2l0Q2hpbGRy
ZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBhdXRvKiB0aGlz
T2JqZWN0ID0ganNDYXN0PEpTU2V0SXRlcmF0b3IqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JK
RUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAgICAgQmFzZTo6dmlzaXRDaGlsZHJl
bih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTU2V0
SXRlcmF0b3IpOworCiBKU1ZhbHVlIEpTU2V0SXRlcmF0b3I6OmNyZWF0ZVBhaXIoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBrZXksIEpTVmFsdWUgdmFsdWUpCiB7CiAgICAg
TWFya2VkQXJndW1lbnRCdWZmZXIgYXJnczsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTU2V0SXRlcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1NldEl0ZXJhdG9yLmgJKHJldmlzaW9uIDI3MjcxMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2V0SXRlcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAt
MTMwLDcgKzEzMCw3IEBAIHByaXZhdGU6CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBmaW5p
c2hDcmVhdGlvbihWTSYsIEpTU2V0KiwgSXRlcmF0aW9uS2luZCk7CiAgICAgdm9pZCBmaW5pc2hD
cmVhdGlvbihWTSYpOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIEpTVmFsdWUgY3JlYXRlUGFpcihK
U0dsb2JhbE9iamVjdCosIEpTVmFsdWUsIEpTVmFsdWUpOwotICAgIHN0YXRpYyB2b2lkIHZpc2l0
Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxE
UkVOOwogfTsKIFNUQVRJQ19BU1NFUlRfSVNfVFJJVklBTExZX0RFU1RSVUNUSUJMRShKU1NldEl0
ZXJhdG9yKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTb3VyY2VD
b2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Nv
dXJjZUNvZGUuY3BwCShyZXZpc2lvbiAyNzI3MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU1NvdXJjZUNvZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw4IEBA
CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSlNTb3VyY2VDb2RlLmgiCiAKKyNpbmNs
dWRlICJKU0NlbGxJbmxpbmVzLmgiIC8vIG1sYW0gVEVTVAorCiBuYW1lc3BhY2UgSlNDIHsKIAog
Y29uc3QgQ2xhc3NJbmZvIEpTU291cmNlQ29kZTo6c19pbmZvID0geyAiSlNTb3VyY2VDb2RlIiwg
bnVsbHB0ciwgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1NvdXJjZUNv
ZGUpIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuY3Bw
CShyZXZpc2lvbiAyNzI3MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0
cmluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNSw3ICsxMDUsOCBAQCBzaXplX3QgSlNTdHJp
bmc6OmVzdGltYXRlZFNpemUoSlNDZWxsKiBjCiAgICAgcmV0dXJuIEJhc2U6OmVzdGltYXRlZFNp
emUoY2VsbCwgdm0pICsgYml0d2lzZV9jYXN0PFN0cmluZ0ltcGwqPihwb2ludGVyKS0+Y29zdER1
cmluZ0dDKCk7CiB9CiAKLXZvaWQgSlNTdHJpbmc6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxs
LCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lk
IEpTU3RyaW5nOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0
b3IpCiB7CiAgICAgSlNTdHJpbmcqIHRoaXNPYmplY3QgPSBhc1N0cmluZyhjZWxsKTsKICAgICBB
U1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC0xNDMsNiAr
MTQ0LDggQEAgdm9pZCBKU1N0cmluZzo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbAogICAgICAg
ICB2aXNpdG9yLnJlcG9ydEV4dHJhTWVtb3J5VmlzaXRlZChpbXBsLT5jb3N0RHVyaW5nR0MoKSk7
CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU1N0cmluZyk7CisKIHN0YXRpYyBjb25zdGV4
cHIgdW5zaWduZWQgbWF4TGVuZ3RoRm9yT25TdGFja1Jlc29sdmUgPSAyMDQ4OwogCiB2b2lkIEpT
Um9wZVN0cmluZzo6cmVzb2x2ZVJvcGVJbnRlcm5hbDgoTENoYXIqIGJ1ZmZlcikgY29uc3QKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuaAkocmV2aXNpb24gMjcy
NzEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjE3LDcgKzIxNyw3IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyB2b2lkIGR1
bXBUb1N0cmVhbShjb25zdCBKU0NlbGwqLCBQcmludFN0cmVhbSYpOwogICAgIHN0YXRpYyBzaXpl
X3QgZXN0aW1hdGVkU2l6ZShKU0NlbGwqLCBWTSYpOwotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hp
bGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVO
OwogCiAgICAgQUxXQVlTX0lOTElORSBib29sIGlzUm9wZSgpIGNvbnN0CiAgICAgewpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmdJdGVyYXRvci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmdJdGVyYXRvci5j
cHAJKHJldmlzaW9uIDI3MjcxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
U3RyaW5nSXRlcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MSwxMSArNTEsMTQgQEAgSlNT
dHJpbmdJdGVyYXRvciogSlNTdHJpbmdJdGVyYXRvcjo6Y2xvbgogICAgIHJldHVybiBjbG9uZTsK
IH0KIAotdm9pZCBKU1N0cmluZ0l0ZXJhdG9yOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwg
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBK
U1N0cmluZ0l0ZXJhdG9yOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3Im
IHZpc2l0b3IpCiB7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1N0cmluZ0l0ZXJh
dG9yKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBp
bmZvKCkpOwogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CiB9
CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU1N0cmluZ0l0ZXJhdG9yKTsKKwogfSAvLyBuYW1l
c3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZ0l0
ZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNT
dHJpbmdJdGVyYXRvci5oCShyZXZpc2lvbiAyNzI3MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1N0cmluZ0l0ZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTc5LDcgKzc5
LDcgQEAgcHVibGljOgogICAgIEpTVmFsdWUgaW5kZXgoKSBjb25zdCB7IHJldHVybiBpbnRlcm5h
bEZpZWxkKEZpZWxkOjpJbmRleCkuZ2V0KCk7IH0KICAgICBKU1N0cmluZ0l0ZXJhdG9yKiBjbG9u
ZShKU0dsb2JhbE9iamVjdCopOwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0Nl
bGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKIHByaXZh
dGU6CiAgICAgSlNTdHJpbmdJdGVyYXRvcihWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVjdC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTeW1ib2xU
YWJsZU9iamVjdC5jcHAJKHJldmlzaW9uIDI3MjcxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3
ICszNiw4IEBAIG5hbWVzcGFjZSBKU0MgewogCiBjb25zdCBDbGFzc0luZm8gSlNTeW1ib2xUYWJs
ZU9iamVjdDo6c19pbmZvID0geyAiU3ltYm9sVGFibGVPYmplY3QiLCAmQmFzZTo6c19pbmZvLCBu
dWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTU3ltYm9sVGFibGVPYmplY3Qp
IH07CiAKLXZvaWQgSlNTeW1ib2xUYWJsZU9iamVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNl
bGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3Zv
aWQgSlNTeW1ib2xUYWJsZU9iamVjdDo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBW
aXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTU3ltYm9sVGFibGVPYmplY3QqIHRoaXNPYmplY3Qg
PSBqc0Nhc3Q8SlNTeW1ib2xUYWJsZU9iamVjdCo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpF
Q1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTQ0LDYgKzQ1LDggQEAgdm9pZCBK
U1N5bWJvbFRhYmxlT2JqZWN0Ojp2aXNpdENoaWxkcmVuKAogICAgIHZpc2l0b3IuYXBwZW5kKHRo
aXNPYmplY3QtPm1fc3ltYm9sVGFibGUpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNT
eW1ib2xUYWJsZU9iamVjdCk7CisKIGJvb2wgSlNTeW1ib2xUYWJsZU9iamVjdDo6ZGVsZXRlUHJv
cGVydHkoSlNDZWxsKiBjZWxsLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0
eU5hbWUgcHJvcGVydHlOYW1lLCBEZWxldGVQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgSlNT
eW1ib2xUYWJsZU9iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1N5bWJvbFRhYmxlT2JqZWN0
Kj4oY2VsbCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N5bWJvbFRh
YmxlT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNTeW1ib2xUYWJsZU9iamVjdC5oCShyZXZpc2lvbiAyNzI3MTApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAg
LTcwLDcgKzcwLDcgQEAgcHJvdGVjdGVkOgogICAgICAgICBtX3N5bWJvbFRhYmxlLnNldCh2bSwg
dGhpcywgc3ltYm9sVGFibGUpOwogICAgIH0KICAgICAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENo
aWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJF
TjsKICAgICAKIHByaXZhdGU6CiAgICAgV3JpdGVCYXJyaWVyPFN5bWJvbFRhYmxlPiBtX3N5bWJv
bFRhYmxlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNXZWFrT2JqZWN0
UmVmLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1dl
YWtPYmplY3RSZWYuY3BwCShyZXZpc2lvbiAyNzI3MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1dlYWtPYmplY3RSZWYuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw3ICsz
OSw4IEBAIHZvaWQgSlNXZWFrT2JqZWN0UmVmOjpmaW5pc2hDcmVhdGlvbihWTSYKICAgICBCYXNl
OjpmaW5pc2hDcmVhdGlvbih2bSk7CiB9CiAKLXZvaWQgSlNXZWFrT2JqZWN0UmVmOjp2aXNpdENo
aWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBl
bmFtZSBWaXNpdG9yPgordm9pZCBKU1dlYWtPYmplY3RSZWY6OnZpc2l0Q2hpbGRyZW5JbXBsKEpT
Q2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0g
anNDYXN0PEpTV2Vha09iamVjdFJlZio+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5I
RVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTUxLDYgKzUyLDggQEAgdm9pZCBKU1dlYWtP
YmplY3RSZWY6OnZpc2l0Q2hpbGRyZW4oSlNDZQogICAgIH0KIH0KIAorREVGSU5FX1ZJU0lUX0NI
SUxEUkVOKEpTV2Vha09iamVjdFJlZik7CisKIHZvaWQgSlNXZWFrT2JqZWN0UmVmOjpmaW5hbGl6
ZVVuY29uZGl0aW9uYWxseShWTSYgdm0pCiB7CiAgICAgaWYgKG1fdmFsdWUgJiYgIXZtLmhlYXAu
aXNNYXJrZWQobV92YWx1ZS5nZXQoKSkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1dlYWtPYmplY3RSZWYuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1dlYWtPYmplY3RSZWYuaAkocmV2aXNpb24gMjcyNzEwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNXZWFrT2JqZWN0UmVmLmgJKHdvcmtpbmcgY29weSkK
QEAgLTY1LDcgKzY1LDcgQEAgcHVibGljOgogICAgIH0KIAogICAgIHZvaWQgZmluYWxpemVVbmNv
bmRpdGlvbmFsbHkoVk0mKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCos
IFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogcHJpdmF0ZToK
ICAgICBKU1dlYWtPYmplY3RSZWYoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTV2l0aFNjb3BlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1dpdGhTY29wZS5jcHAJKHJldmlz
aW9uIDI3MjcxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTV2l0aFNjb3Bl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEsNyArNDEsOCBAQCBKU1dpdGhTY29wZSogSlNXaXRo
U2NvcGU6OmNyZWF0ZSgKICAgICByZXR1cm4gd2l0aFNjb3BlOwogfQogCi12b2lkIEpTV2l0aFNj
b3BlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0
ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1dpdGhTY29wZTo6dmlzaXRDaGlsZHJl
bkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTV2l0aFNjb3Bl
KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTV2l0aFNjb3BlKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dD
X09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNDksNiArNTAsOCBAQCB2
b2lkIEpTV2l0aFNjb3BlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogCiAgICAgdmlzaXRvci5hcHBl
bmQodGhpc09iamVjdC0+bV9vYmplY3QpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNX
aXRoU2NvcGUpOworCiBTdHJ1Y3R1cmUqIEpTV2l0aFNjb3BlOjpjcmVhdGVTdHJ1Y3R1cmUoVk0m
IHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvKQogewogICAg
IHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90bywgVHlwZUlu
Zm8oV2l0aFNjb3BlVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNXaXRoU2NvcGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1dpdGhTY29wZS5oCShyZXZpc2lvbiAyNzI3MTAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1dpdGhTY29wZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC00Myw3ICs0Myw3IEBAIHB1YmxpYzoKIAogICAgIEpTT2JqZWN0KiBvYmplY3Qo
KSB7IHJldHVybiBtX29iamVjdC5nZXQoKTsgfQogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGls
ZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47
CiAKICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9i
amVjdCosIEpTVmFsdWUgcHJvdG8pOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1dyYXBwZXJPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTV3JhcHBlck9iamVjdC5jcHAJKHJldmlzaW9uIDI3MjcxMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTV3JhcHBlck9iamVjdC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI5LDExICsyOSwxNCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogU1RBVElDX0FTU0VS
VF9JU19UUklWSUFMTFlfREVTVFJVQ1RJQkxFKEpTV3JhcHBlck9iamVjdCk7CiAKLXZvaWQgSlNX
cmFwcGVyT2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZp
c2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1dyYXBwZXJPYmplY3Q6
OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAg
ICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTV3JhcHBlck9iamVjdCo+KGNlbGwpOwogICAg
IEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKICAgICBCYXNl
Ojp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwogfQogCitERUZJTkVfRVhQT1JU
X1ZJU0lUX0NISUxEUkVOKEpTV3JhcHBlck9iamVjdCk7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNXcmFwcGVyT2JqZWN0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNXcmFwcGVyT2JqZWN0
LmgJKHJldmlzaW9uIDI3MjcxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
V3JhcHBlck9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC02NCw3ICs2NCw3IEBAIHB1YmxpYzoK
IHByb3RlY3RlZDoKICAgICBleHBsaWNpdCBKU1dyYXBwZXJPYmplY3QoVk0mLCBTdHJ1Y3R1cmUq
KTsKIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlND
ZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX0VYUE9SVF9WSVNJVF9DSElMRFJFTjsK
IH07CiAKIGlubGluZSBKU1dyYXBwZXJPYmplY3Q6OkpTV3JhcHBlck9iamVjdChWTSYgdm0sIFN0
cnVjdHVyZSogc3RydWN0dXJlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
TGF6eUNsYXNzU3RydWN0dXJlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9MYXp5Q2xhc3NTdHJ1Y3R1cmUuY3BwCShyZXZpc2lvbiAyNzI3MTApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9MYXp5Q2xhc3NTdHJ1Y3R1cmUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC03MiwxMiArNzIsMTYgQEAgdm9pZCBMYXp5Q2xhc3NTdHJ1Y3R1cmU6Oklu
aXRpYWxpemVyOjpzZQogICAgIGNsYXNzU3RydWN0dXJlLm1fY29uc3RydWN0b3Iuc2V0KHZtLCBn
bG9iYWwsIGNvbnN0cnVjdG9yKTsKIH0KIAotdm9pZCBMYXp5Q2xhc3NTdHJ1Y3R1cmU6OnZpc2l0
KFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQg
TGF6eUNsYXNzU3RydWN0dXJlOjp2aXNpdChWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIG1fc3Ry
dWN0dXJlLnZpc2l0KHZpc2l0b3IpOwogICAgIHZpc2l0b3IuYXBwZW5kKG1fY29uc3RydWN0b3Ip
OwogfQogCit0ZW1wbGF0ZSB2b2lkIExhenlDbGFzc1N0cnVjdHVyZTo6dmlzaXQoQWJzdHJhY3RT
bG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBMYXp5Q2xhc3NTdHJ1Y3R1cmU6OnZpc2l0KFNs
b3RWaXNpdG9yJik7CisKIHZvaWQgTGF6eUNsYXNzU3RydWN0dXJlOjpkdW1wKFByaW50U3RyZWFt
JiBvdXQpIGNvbnN0CiB7CiAgICAgb3V0LnByaW50KCI8c3RydWN0dXJlID0gIiwgbV9zdHJ1Y3R1
cmUsICIsIGNvbnN0cnVjdG9yID0gIiwgUmF3UG9pbnRlcihtX2NvbnN0cnVjdG9yLmdldCgpKSwg
Ij4iKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0xhenlDbGFzc1N0cnVj
dHVyZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0xhenlD
bGFzc1N0cnVjdHVyZS5oCShyZXZpc2lvbiAyNzI3MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9MYXp5Q2xhc3NTdHJ1Y3R1cmUuaAkod29ya2luZyBjb3B5KQpAQCAtMTE3LDcg
KzExNyw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fY29uc3RydWN0b3IuZ2V0KCk7CiAg
ICAgfQogICAgIAotICAgIHZvaWQgdmlzaXQoU2xvdFZpc2l0b3ImKTsKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBWaXNpdG9yPiB2b2lkIHZpc2l0KFZpc2l0b3ImKTsKICAgICAKICAgICB2b2lkIGR1
bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvTGF6eVByb3BlcnR5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvTGF6eVByb3BlcnR5LmgJKHJldmlzaW9uIDI3MjcxMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0xhenlQcm9wZXJ0eS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDMs
NyArMTAzLDcgQEAgcHVibGljOgogICAgIHZvaWQgc2V0TWF5QmVOdWxsKFZNJiwgY29uc3QgT3du
ZXJUeXBlKiBvd25lciwgRWxlbWVudFR5cGUqKTsKICAgICB2b2lkIHNldChWTSYsIGNvbnN0IE93
bmVyVHlwZSogb3duZXIsIEVsZW1lbnRUeXBlKik7CiAgICAgCi0gICAgdm9pZCB2aXNpdChTbG90
VmlzaXRvciYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgdmlzaXQoVmlz
aXRvciYpOwogICAgIAogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwogICAgIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTGF6eVByb3BlcnR5SW5saW5lcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0xhenlQcm9wZXJ0
eUlubGluZXMuaAkocmV2aXNpb24gMjcyNzEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvTGF6eVByb3BlcnR5SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC02Niw3ICs2Niw4
IEBAIHZvaWQgTGF6eVByb3BlcnR5PE93bmVyVHlwZSwgRWxlbWVudFR5cGUKIH0KIAogdGVtcGxh
dGU8dHlwZW5hbWUgT3duZXJUeXBlLCB0eXBlbmFtZSBFbGVtZW50VHlwZT4KLXZvaWQgTGF6eVBy
b3BlcnR5PE93bmVyVHlwZSwgRWxlbWVudFR5cGU+Ojp2aXNpdChTbG90VmlzaXRvciYgdmlzaXRv
cikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIExhenlQcm9wZXJ0eTxPd25lclR5
cGUsIEVsZW1lbnRUeXBlPjo6dmlzaXQoVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBpZiAobV9w
b2ludGVyICYmICEobV9wb2ludGVyICYgbGF6eVRhZykpCiAgICAgICAgIHZpc2l0b3IuYXBwZW5k
VW5iYXJyaWVyZWQoYml0d2lzZV9jYXN0PEVsZW1lbnRUeXBlKj4obV9wb2ludGVyKSk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Nb2R1bGVQcm9ncmFtRXhlY3V0YWJsZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTW9kdWxlUHJv
Z3JhbUV4ZWN1dGFibGUuY3BwCShyZXZpc2lvbiAyNzI3MTApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9Nb2R1bGVQcm9ncmFtRXhlY3V0YWJsZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTc5LDcgKzc5LDggQEAgYXV0byBNb2R1bGVQcm9ncmFtRXhlY3V0YWJsZTo6ZW5zdXJlVGVt
cAogICAgIHJldHVybiBlbnN1cmVUZW1wbGF0ZU9iamVjdE1hcEltcGwobV90ZW1wbGF0ZU9iamVj
dE1hcCk7CiB9CiAKLXZvaWQgTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGU6OnZpc2l0Q2hpbGRyZW4o
SlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZp
c2l0b3I+Cit2b2lkIE1vZHVsZVByb2dyYW1FeGVjdXRhYmxlOjp2aXNpdENoaWxkcmVuSW1wbChK
U0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgTW9kdWxlUHJvZ3JhbUV4ZWN1
dGFibGUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8TW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUqPihjZWxs
KTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBA
IC05NCw0ICs5NSw2IEBAIHZvaWQgTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGU6OnZpc2l0Q2hpbGQK
ICAgICB9CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihNb2R1bGVQcm9ncmFtRXhlY3V0YWJs
ZSk7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9Nb2R1bGVQcm9ncmFtRXhlY3V0YWJsZS5oCShyZXZpc2lvbiAy
NzI3MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Nb2R1bGVQcm9ncmFtRXhl
Y3V0YWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03Nyw3ICs3Nyw3IEBAIHByaXZhdGU6CiAKICAg
ICBNb2R1bGVQcm9ncmFtRXhlY3V0YWJsZShKU0dsb2JhbE9iamVjdCosIGNvbnN0IFNvdXJjZUNv
ZGUmKTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0
b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgV3JpdGVCYXJyaWVyPFVu
bGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jaz4gbV91bmxpbmtlZE1vZHVsZVByb2dyYW1Db2Rl
QmxvY2s7CiAgICAgV3JpdGVCYXJyaWVyPFN5bWJvbFRhYmxlPiBtX21vZHVsZUVudmlyb25tZW50
U3ltYm9sVGFibGU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25z
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25z
LmNwcAkocmV2aXNpb24gMjcyNzEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
T3B0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU1OCw2ICs1NTgsMTAgQEAgdm9pZCBPcHRp
b25zOjpyZWNvbXB1dGVEZXBlbmRlbnRPcHRpb25zKAogCiAgICAgaWYgKE9wdGlvbnM6OnVzZVBy
aXZhdGVTdGF0aWNDbGFzc0ZpZWxkcygpKQogICAgICAgICBPcHRpb25zOjp1c2VQcml2YXRlQ2xh
c3NGaWVsZHMoKSA9IHRydWU7CisKKyAgICBpZiAoT3B0aW9uczo6dmVyYm9zZVZlcmlmeUdDKCkp
CisgICAgICAgIE9wdGlvbnM6OnZlcmlmeUdDKCkgPSB0cnVlOworICAgIE9wdGlvbnM6OnZlcmlm
eUdDKCkgPSB0cnVlOyAvLyBtbGFtIFRFU1QgSEFDSwogfQogCiBpbmxpbmUgdm9pZCogT3B0aW9u
czo6YWRkcmVzc09mT3B0aW9uKE9wdGlvbnM6OklEIGlkKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9PcHRpb25zTGlzdC5oCShyZXZpc2lvbiAyNzI3MTApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zTGlzdC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zNjksNiArMzY5LDggQEAgSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBjYW5Vc2VKSVRDYWdlKCk7
CiAgICAgdihCb29sLCBhbHdheXNHZW5lcmF0ZVBDVG9Db2RlT3JpZ2luTWFwLCBmYWxzZSwgTm9y
bWFsLCAiVGhpcyB3aWxsIG1ha2Ugc3VyZSB3ZSBhbHdheXMgZ2VuZXJhdGUgYSBQQ1RvQ29kZU9y
aWdpbk1hcCBmb3IgSklUZWQgY29kZS4iKSBcCiAgICAgXAogICAgIHYoRG91YmxlLCByYW5kb21J
bnRlZ3JpdHlBdWRpdFJhdGUsIDAuMDUsIE5vcm1hbCwgIlByb2JhYmlsaXR5IG9mIHJhbmRvbSBp
bnRlZ3JpdHkgYXVkaXRzIFswLjAgLSAxLjBdIikgXAorICAgIHYoQm9vbCwgdmVyaWZ5R0MsIGZh
bHNlLCBOb3JtYWwsIG51bGxwdHIpIFwKKyAgICB2KEJvb2wsIHZlcmJvc2VWZXJpZnlHQywgZmFs
c2UsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoQm9vbCwgdmVyaWZ5SGVhcCwgZmFsc2UsIE5v
cm1hbCwgbnVsbHB0cikgXAogICAgIHYoVW5zaWduZWQsIG51bWJlck9mR0NDeWNsZXNUb1JlY29y
ZEZvclZlcmlmaWNhdGlvbiwgMywgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgXApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvZ3JhbUV4ZWN1dGFibGUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb2dyYW1FeGVjdXRhYmxlLmNw
cAkocmV2aXNpb24gMjcyNzEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJv
Z3JhbUV4ZWN1dGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDgsNyArMjA4LDggQEAgYXV0
byBQcm9ncmFtRXhlY3V0YWJsZTo6ZW5zdXJlVGVtcGxhdGVPYgogICAgIHJldHVybiBlbnN1cmVU
ZW1wbGF0ZU9iamVjdE1hcEltcGwobV90ZW1wbGF0ZU9iamVjdE1hcCk7CiB9CiAKLXZvaWQgUHJv
Z3JhbUV4ZWN1dGFibGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYg
dmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFByb2dyYW1FeGVjdXRh
YmxlOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7
CiAgICAgUHJvZ3JhbUV4ZWN1dGFibGUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8UHJvZ3JhbUV4ZWN1
dGFibGUqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3Qs
IGluZm8oKSk7CkBAIC0yMjIsNCArMjIzLDYgQEAgdm9pZCBQcm9ncmFtRXhlY3V0YWJsZTo6dmlz
aXRDaGlsZHJlbihKUwogICAgIH0KIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKFByb2dyYW1F
eGVjdXRhYmxlKTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9Qcm9ncmFtRXhlY3V0YWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb2dyYW1FeGVjdXRhYmxlLmgJKHJldmlzaW9uIDI3Mjcx
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb2dyYW1FeGVjdXRhYmxlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTgxLDcgKzgxLDcgQEAgcHJpdmF0ZToKIAogICAgIFByb2dyYW1F
eGVjdXRhYmxlKEpTR2xvYmFsT2JqZWN0KiwgY29uc3QgU291cmNlQ29kZSYpOwogCi0gICAgc3Rh
dGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xB
UkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBXcml0ZUJhcnJpZXI8VW5saW5rZWRQcm9ncmFtQ29k
ZUJsb2NrPiBtX3VubGlua2VkUHJvZ3JhbUNvZGVCbG9jazsKICAgICBXcml0ZUJhcnJpZXI8RXhl
Y3V0YWJsZVRvQ29kZUJsb2NrRWRnZT4gbV9wcm9ncmFtQ29kZUJsb2NrOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlNYXBIYXNoVGFibGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eU1hcEhhc2hUYWJsZS5o
CShyZXZpc2lvbiAyNzI3MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9w
ZXJ0eU1hcEhhc2hUYWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzMsNyArMTMzLDcgQEAgcHVi
bGljOgogCiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVl
OwogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7Ci0gICAgc3RhdGljIHZvaWQgdmlz
aXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJ
TERSRU47CiAKICAgICBERUNMQVJFX0VYUE9SVF9JTkZPOwogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eVRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eVRhYmxlLmNwcAkocmV2aXNpb24gMjcyNzEw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlUYWJsZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTExOCw3ICsxMTgsOCBAQCB2b2lkIFByb3BlcnR5VGFibGU6OmZpbmlz
aENyZWF0aW9uKFZNJiB2CiAgICAgdm0uaGVhcC5yZXBvcnRFeHRyYU1lbW9yeUFsbG9jYXRlZChk
YXRhU2l6ZSgpKTsKIH0KIAotdm9pZCBQcm9wZXJ0eVRhYmxlOjp2aXNpdENoaWxkcmVuKEpTQ2Vs
bCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
Pgordm9pZCBQcm9wZXJ0eVRhYmxlOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZp
c2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxQcm9wZXJ0
eVRhYmxlKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0
LCBpbmZvKCkpOwpAQCAtMTI2LDYgKzEyNyw4IEBAIHZvaWQgUHJvcGVydHlUYWJsZTo6dmlzaXRD
aGlsZHJlbihKU0NlbGwKICAgICB2aXNpdG9yLnJlcG9ydEV4dHJhTWVtb3J5VmlzaXRlZCh0aGlz
T2JqZWN0LT5kYXRhU2l6ZSgpKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKFByb3BlcnR5
VGFibGUpOworCiB2b2lkIFByb3BlcnR5VGFibGU6OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQogewog
ICAgIHN0YXRpY19jYXN0PFByb3BlcnR5VGFibGUqPihjZWxsKS0+UHJvcGVydHlUYWJsZTo6flBy
b3BlcnR5VGFibGUoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3h5
T2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Q
cm94eU9iamVjdC5jcHAJKHJldmlzaW9uIDI3MjcxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1Byb3h5T2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE1OCw3ICsxMTU4
LDggQEAgYm9vbCBQcm94eU9iamVjdDo6aXNSZXZva2VkKCkgY29uc3QKICAgICByZXR1cm4gaGFu
ZGxlcigpLmlzTnVsbCgpOwogfQogCi12b2lkIFByb3h5T2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpT
Q2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNp
dG9yPgordm9pZCBQcm94eU9iamVjdDo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBW
aXNpdG9yJiB2aXNpdG9yKQogewogICAgIFByb3h5T2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0
PFByb3h5T2JqZWN0Kj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlz
T2JqZWN0LCBpbmZvKCkpOwpAQCAtMTE2OCw0ICsxMTY5LDYgQEAgdm9pZCBQcm94eU9iamVjdDo6
dmlzaXRDaGlsZHJlbihKU0NlbGwqIAogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1f
aGFuZGxlcik7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihQcm94eU9iamVjdCk7CisKIH0g
Ly8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJv
eHlPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Q
cm94eU9iamVjdC5oCShyZXZpc2lvbiAyNzI3MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9Qcm94eU9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC05MSw3ICs5MSw3IEBAIHBy
aXZhdGU6CiAgICAgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCosIEpT
R2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lQXJyYXkmLCBEb250RW51bVByb3BlcnRpZXNNb2Rl
KTsKICAgICBzdGF0aWMgYm9vbCBzZXRQcm90b3R5cGUoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVj
dCosIEpTVmFsdWUgcHJvdG90eXBlLCBib29sIHNob3VsZFRocm93SWZDYW50U2V0KTsKICAgICBz
dGF0aWMgSlNWYWx1ZSBnZXRQcm90b3R5cGUoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCopOwot
ICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAg
ICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3RD
b21tb24oSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwogICAg
IGJvb2wgcGVyZm9ybUludGVybmFsTWV0aG9kR2V0T3duUHJvcGVydHkoSlNHbG9iYWxPYmplY3Qq
LCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvUHJveHlSZXZva2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1Byb3h5UmV2b2tlLmNwcAkocmV2aXNpb24gMjcyNzEwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJveHlSZXZva2UuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC02OSw3ICs2OSw4IEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihwZXJmb3JtUHJveHlS
ZXYKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCi12b2lk
IFByb3h5UmV2b2tlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZp
c2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBQcm94eVJldm9rZTo6dmlz
aXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFBy
b3h5UmV2b2tlKiB0aGlzT2JqZWN0ID0ganNDYXN0PFByb3h5UmV2b2tlKj4oY2VsbCk7CiAgICAg
QVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNzgsNCAr
NzksNiBAQCB2b2lkIFByb3h5UmV2b2tlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogCiAgICAgdmlz
aXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9wcm94eSk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElM
RFJFTihQcm94eVJldm9rZSk7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJveHlSZXZva2UuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm94eVJldm9rZS5oCShyZXZpc2lvbiAyNzI3MTApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm94eVJldm9rZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC01Miw3ICs1Miw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICB2b2lkIGZpbmlzaENy
ZWF0aW9uKFZNJiwgUHJveHlPYmplY3QqKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVu
KEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKICAg
ICBKU1ZhbHVlIHByb3h5KCkgeyByZXR1cm4gbV9wcm94eS5nZXQoKTsgfQogICAgIHZvaWQgc2V0
UHJveHlUb051bGwoVk0mIHZtKSB7IHJldHVybiBtX3Byb3h5LnNldCh2bSwgdGhpcywganNOdWxs
KCkpOyB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENhY2hl
ZFJlc3VsdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
UmVnRXhwQ2FjaGVkUmVzdWx0LmNwcAkocmV2aXNpb24gMjcyNzEwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwQ2FjaGVkUmVzdWx0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzEsNyArMzEsOCBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotdm9pZCBSZWdFeHBDYWNoZWRS
ZXN1bHQ6OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlw
ZW5hbWUgVmlzaXRvcj4KK3ZvaWQgUmVnRXhwQ2FjaGVkUmVzdWx0Ojp2aXNpdEFnZ3JlZ2F0ZShW
aXNpdG9yJiB2aXNpdG9yKQogewogICAgIHZpc2l0b3IuYXBwZW5kKG1fbGFzdElucHV0KTsKICAg
ICB2aXNpdG9yLmFwcGVuZChtX2xhc3RSZWdFeHApOwpAQCAtNDMsNiArNDQsOSBAQCB2b2lkIFJl
Z0V4cENhY2hlZFJlc3VsdDo6dmlzaXRBZ2dyZWdhdGUoCiAgICAgfQogfQogCit0ZW1wbGF0ZSB2
b2lkIFJlZ0V4cENhY2hlZFJlc3VsdDo6dmlzaXRBZ2dyZWdhdGUoQWJzdHJhY3RTbG90VmlzaXRv
ciYpOwordGVtcGxhdGUgdm9pZCBSZWdFeHBDYWNoZWRSZXN1bHQ6OnZpc2l0QWdncmVnYXRlKFNs
b3RWaXNpdG9yJik7CisKIEpTQXJyYXkqIFJlZ0V4cENhY2hlZFJlc3VsdDo6bGFzdFJlc3VsdChK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU09iamVjdCogb3duZXIpCiB7CiAgICAgVk0m
IHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvUmVnRXhwQ2FjaGVkUmVzdWx0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvUmVnRXhwQ2FjaGVkUmVzdWx0LmgJKHJldmlzaW9uIDI3MjcxMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENhY2hlZFJlc3VsdC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC02NSw3ICs2NSw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fcmVp
ZmllZCA/IG1fcmVpZmllZElucHV0LmdldCgpIDogbV9sYXN0SW5wdXQuZ2V0KCk7CiAgICAgfQog
Ci0gICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYpOworICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFZpc2l0b3I+IHZvaWQgdmlzaXRBZ2dyZWdhdGUoVmlzaXRvciYpOwogCiAgICAgLy8g
bV9sYXN0UmVnRXhwIHdvdWxkIGJlIG51bGxwdHIgd2hlbiBSZWdFeHBDYWNoZWRSZXN1bHQgaXMg
bm90IHJlaWZpZWQuCiAgICAgLy8gSWYgd2UgZmluZCBtX2xhc3RSZWdFeHAgaXMgbnVsbHB0ciwg
aXQgbWVhbnMgdGhpcyBzaG91bGQgaG9sZCB0aGUgZW1wdHkgUmVnRXhwLgpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwR2xvYmFsRGF0YS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwR2xvYmFsRGF0YS5jcHAJKHJl
dmlzaW9uIDI3MjcxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cEds
b2JhbERhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCwxMSArMzAsMTUgQEAKIAogbmFtZXNw
YWNlIEpTQyB7CiAKLXZvaWQgUmVnRXhwR2xvYmFsRGF0YTo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZp
c2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBSZWdFeHBH
bG9iYWxEYXRhOjp2aXNpdEFnZ3JlZ2F0ZShWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIG1fY2Fj
aGVkUmVzdWx0LnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOwogfQogCit0ZW1wbGF0ZSB2b2lkIFJl
Z0V4cEdsb2JhbERhdGE6OnZpc2l0QWdncmVnYXRlKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3Rl
bXBsYXRlIHZvaWQgUmVnRXhwR2xvYmFsRGF0YTo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3Im
KTsKKwogSlNWYWx1ZSBSZWdFeHBHbG9iYWxEYXRhOjpnZXRCYWNrcmVmKEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIHVuc2lnbmVkIGkpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0
LT52bSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwR2xvYmFs
RGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4
cEdsb2JhbERhdGEuaAkocmV2aXNpb24gMjcyNzEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvUmVnRXhwR2xvYmFsRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0MSw3
IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldElucHV0KEpTR2xvYmFsT2JqZWN0KiwgSlNTdHJpbmcq
KTsKICAgICBKU1N0cmluZyogaW5wdXQoKSB7IHJldHVybiBtX2NhY2hlZFJlc3VsdC5pbnB1dCgp
OyB9CiAKLSAgICB2b2lkIHZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJik7CisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCB2aXNpdEFnZ3JlZ2F0ZShWaXNpdG9yJik7CiAKICAg
ICBKU1ZhbHVlIGdldEJhY2tyZWYoSlNHbG9iYWxPYmplY3QqLCB1bnNpZ25lZCk7CiAgICAgSlNW
YWx1ZSBnZXRMYXN0UGFyZW4oSlNHbG9iYWxPYmplY3QqKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1JlZ0V4cE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0LmNwcAkocmV2aXNpb24gMjcyNzEwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDYsNyArNDYsOCBAQCB2b2lkIFJlZ0V4cE9iamVjdDo6ZmluaXNoQ3JlYXRp
b24oVk0mIHZtCiAgICAgQVNTRVJUKHR5cGUoKSA9PSBSZWdFeHBPYmplY3RUeXBlKTsKIH0KIAot
dm9pZCBSZWdFeHBPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRv
ciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFJlZ0V4cE9iamVj
dDo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewog
ICAgIFJlZ0V4cE9iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxSZWdFeHBPYmplY3QqPihjZWxs
KTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBA
IC01NSw2ICs1Niw4IEBAIHZvaWQgUmVnRXhwT2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCoK
ICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2xhc3RJbmRleCk7CiB9CiAKK0RFRklO
RV9WSVNJVF9DSElMRFJFTihSZWdFeHBPYmplY3QpOworCiBib29sIFJlZ0V4cE9iamVjdDo6Z2V0
T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiBvYmplY3QsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKIHsK
ICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9SZWdFeHBPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9SZWdFeHBPYmplY3QuaAkocmV2aXNpb24gMjcyNzEwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0LmgJKHdvcmtpbmcgY29weSkK
QEAgLTEzMyw3ICsxMzMsNyBAQCBwcml2YXRlOgogICAgIEpTX0VYUE9SVF9QUklWQVRFIFJlZ0V4
cE9iamVjdChWTSYsIFN0cnVjdHVyZSosIFJlZ0V4cCopOwogICAgIEpTX0VYUE9SVF9QUklWQVRF
IHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwog
CiAgICAgYm9vbCBsYXN0SW5kZXhJc1dyaXRhYmxlKCkgY29uc3QKICAgICB7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TYW1wbGluZ1Byb2ZpbGVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TYW1wbGluZ1Byb2ZpbGVyLmNwcAko
cmV2aXNpb24gMjcyNzEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2FtcGxp
bmdQcm9maWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY1Miw3ICs2NTIsNyBAQCB2b2lkIFNh
bXBsaW5nUHJvZmlsZXI6OnByb2Nlc3NVbnZlcmlmaWVkCiAgICAgbV91bnByb2Nlc3NlZFN0YWNr
VHJhY2VzLmNsZWFyKCk7CiB9CiAKLXZvaWQgU2FtcGxpbmdQcm9maWxlcjo6dmlzaXQoU2xvdFZp
c2l0b3ImIHNsb3RWaXNpdG9yKQordm9pZCBTYW1wbGluZ1Byb2ZpbGVyOjp2aXNpdChBYnN0cmFj
dFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvcikKIHsKICAgICBSRUxFQVNFX0FTU0VSVChtX2xvY2su
aXNMb2NrZWQoKSk7CiAgICAgZm9yIChKU0NlbGwqIGNlbGwgOiBtX2xpdmVDZWxsUG9pbnRlcnMp
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TYW1wbGluZ1Byb2ZpbGVyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2FtcGxpbmdQcm9m
aWxlci5oCShyZXZpc2lvbiAyNzI3MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TYW1wbGluZ1Byb2ZpbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTE3MSw3ICsxNzEsNyBAQCBw
dWJsaWM6CiAgICAgdm9pZCBub3RpY2VKU0xvY2tBY3F1aXNpdGlvbigpOwogICAgIHZvaWQgbm90
aWNlVk1FbnRyeSgpOwogICAgIHZvaWQgc2h1dGRvd24oKTsKLSAgICB2b2lkIHZpc2l0KFNsb3RW
aXNpdG9yJik7CisgICAgdm9pZCB2aXNpdChBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAgICAgTG9j
ayYgZ2V0TG9jaygpIHsgcmV0dXJuIG1fbG9jazsgfQogICAgIHZvaWQgc2V0VGltaW5nSW50ZXJ2
YWwoU2Vjb25kcyBpbnRlcnZhbCkgeyBtX3RpbWluZ0ludGVydmFsID0gaW50ZXJ2YWw7IH0KICAg
ICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHN0YXJ0KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TY29wZWRBcmd1bWVudHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlZEFyZ3VtZW50cy5jcHAJKHJldmlzaW9uIDI3Mjcx
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlZEFyZ3VtZW50cy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTk4LDcgKzk4LDggQEAgU2NvcGVkQXJndW1lbnRzKiBTY29wZWRB
cmd1bWVudHM6OmNyZWF0ZQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQgU2NvcGVkQXJn
dW1lbnRzOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3Ip
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBTY29wZWRBcmd1bWVudHM6OnZpc2l0
Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBTY29w
ZWRBcmd1bWVudHMqIHRoaXNPYmplY3QgPSBzdGF0aWNfY2FzdDxTY29wZWRBcmd1bWVudHMqPihj
ZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7
CkBAIC0xMTUsNiArMTE2LDggQEAgdm9pZCBTY29wZWRBcmd1bWVudHM6OnZpc2l0Q2hpbGRyZW4o
SlNDZQogICAgIH0KIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKFNjb3BlZEFyZ3VtZW50cyk7
CisKIFN0cnVjdHVyZSogU2NvcGVkQXJndW1lbnRzOjpjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKIHsKICAgICBy
ZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBl
SW5mbyhTY29wZWRBcmd1bWVudHNUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29wZWRBcmd1bWVudHMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29wZWRBcmd1bWVudHMuaAko
cmV2aXNpb24gMjcyNzEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVk
QXJndW1lbnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTYzLDkgKzYzLDkgQEAgcHVibGljOgogICAg
IAogICAgIC8vIENyZWF0ZXMgYW4gYXJndW1lbnRzIG9iamVjdCBieSBjb3B5aW5nIHRoZSBhcmd1
bWVudHMgZnJvbSBhIHdlbGwtZGVmaW5lZCBzdGFjayBsb2NhdGlvbi4KICAgICBzdGF0aWMgU2Nv
cGVkQXJndW1lbnRzKiBjcmVhdGVCeUNvcHlpbmdGcm9tKFZNJiwgU3RydWN0dXJlKiwgUmVnaXN0
ZXIqIGFyZ3VtZW50c1N0YXJ0LCB1bnNpZ25lZCB0b3RhbExlbmd0aCwgSlNGdW5jdGlvbiogY2Fs
bGVlLCBTY29wZWRBcmd1bWVudHNUYWJsZSosIEpTTGV4aWNhbEVudmlyb25tZW50Kik7Ci0gICAg
Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwot
ICAgIAorCisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKKwogICAgIHVpbnQzMl90IGludGVy
bmFsTGVuZ3RoKCkgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiBtX3RvdGFsTGVuZ3RoOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2ltcGxlVHlwZWRBcnJheUNvbnRy
b2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Np
bXBsZVR5cGVkQXJyYXlDb250cm9sbGVyLmNwcAkocmV2aXNpb24gMjcyNzEwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC02Miw3ICs2Miw3IEBAIGJvb2wgU2ltcGxlVHlwZWRBcnJheUNvbnRy
b2xsZXI6OmlzQXRvbWkKICAgICByZXR1cm4gbV9hbGxvd0F0b21pY3NXYWl0OwogfQogCi1ib29s
IFNpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyOjpKU0FycmF5QnVmZmVyT3duZXI6OmlzUmVhY2hh
YmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lk
KiwgSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikKK2Jvb2wg
U2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXI6OkpTQXJyYXlCdWZmZXJPd25lcjo6aXNSZWFjaGFi
bGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQq
LCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24p
CiB7CiAgICAgaWYgKFVOTElLRUxZKHJlYXNvbikpCiAgICAgICAgICpyZWFzb24gPSAiSlNBcnJh
eUJ1ZmZlciBpcyBvcGFxdWUgcm9vdCI7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1NpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyLmgJKHJldmlz
aW9uIDI3MjcxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NpbXBsZVR5cGVk
QXJyYXlDb250cm9sbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTU4LDcgKzU4LDcgQEAgcHVibGlj
OgogcHJpdmF0ZToKICAgICBjbGFzcyBKU0FycmF5QnVmZmVyT3duZXIgZmluYWwgOiBwdWJsaWMg
V2Vha0hhbmRsZU93bmVyIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIGJvb2wgaXNSZWFjaGFibGVG
cm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCwg
U2xvdFZpc2l0b3ImLCBjb25zdCBjaGFyKiogcmVhc29uKSBmaW5hbDsKKyAgICAgICAgYm9vbCBp
c1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lk
KiBjb250ZXh0LCBBYnN0cmFjdFNsb3RWaXNpdG9yJiwgY29uc3QgY2hhcioqIHJlYXNvbikgZmlu
YWw7CiAgICAgICAgIHZvaWQgZmluYWxpemUoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9p
ZCogY29udGV4dCkgZmluYWw7CiAgICAgfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU21hbGxTdHJpbmdzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TbWFsbFN0cmluZ3MuY3BwCShyZXZpc2lvbiAyNzI3MTApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TbWFsbFN0cmluZ3MuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC02Niw3ICs2Niw3IEBAIHZvaWQgU21hbGxTdHJpbmdzOjppbml0aWFsaXplQ29tbW9uU3Ry
aW4KICAgICBzZXRJc0luaXRpYWxpemVkKHRydWUpOwogfQogCi12b2lkIFNtYWxsU3RyaW5nczo6
dmlzaXRTdHJvbmdSZWZlcmVuY2VzKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBTbWFsbFN0
cmluZ3M6OnZpc2l0U3Ryb25nUmVmZXJlbmNlcyhBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9y
KQogewogICAgIG1fbmVlZHNUb0JlVmlzaXRlZCA9IGZhbHNlOwogICAgIHZpc2l0b3IuYXBwZW5k
VW5iYXJyaWVyZWQobV9lbXB0eVN0cmluZyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TbWFsbFN0cmluZ3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TbWFsbFN0cmluZ3MuaAkocmV2aXNpb24gMjcyNzEwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU21hbGxTdHJpbmdzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5
LDkgKzQ5LDkgQEAgY2xhc3MgU3RyaW5nSW1wbDsKIAogbmFtZXNwYWNlIEpTQyB7CiAKK2NsYXNz
IEFic3RyYWN0U2xvdFZpc2l0b3I7CiBjbGFzcyBWTTsKIGNsYXNzIEpTU3RyaW5nOwotY2xhc3Mg
U2xvdFZpc2l0b3I7CiAKIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbWF4U2luZ2xlQ2hhcmFj
dGVyU3RyaW5nID0gMHhGRjsKIApAQCAtNzgsNyArNzgsNyBAQCBwdWJsaWM6CiAgICAgSlNTdHJp
bmcqKiBzaW5nbGVDaGFyYWN0ZXJTdHJpbmdzKCkgeyByZXR1cm4gJm1fc2luZ2xlQ2hhcmFjdGVy
U3RyaW5nc1swXTsgfQogCiAgICAgdm9pZCBpbml0aWFsaXplQ29tbW9uU3RyaW5ncyhWTSYpOwot
ICAgIHZvaWQgdmlzaXRTdHJvbmdSZWZlcmVuY2VzKFNsb3RWaXNpdG9yJik7CisgICAgdm9pZCB2
aXNpdFN0cm9uZ1JlZmVyZW5jZXMoQWJzdHJhY3RTbG90VmlzaXRvciYpOwogCiAjZGVmaW5lIEpT
Q19DT01NT05fU1RSSU5HU19BQ0NFU1NPUl9ERUZJTklUSU9OKG5hbWUpIFwKICAgICBKU1N0cmlu
ZyogbmFtZSMjU3RyaW5nKCkgY29uc3QgICAgICAgICAgICAgICAgICAgXApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3BhcnNlQXJyYXlWYWx1ZU1hcC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3BhcnNlQXJyYXlWYWx1ZU1hcC5j
cHAJKHJldmlzaW9uIDI3MjcxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Nw
YXJzZUFycmF5VmFsdWVNYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTAsNyArMjEwLDggQEAg
SlNWYWx1ZSBTcGFyc2VBcnJheUVudHJ5OjpnZXROb25TcGFyc2VNbwogICAgIHJldHVybiBCYXNl
OjpnZXQoKTsKIH0KIAotdm9pZCBTcGFyc2VBcnJheVZhbHVlTWFwOjp2aXNpdENoaWxkcmVuKEpT
Q2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNp
dG9yPgordm9pZCBTcGFyc2VBcnJheVZhbHVlTWFwOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwq
IGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCogdGhp
c09iamVjdCA9IGpzQ2FzdDxTcGFyc2VBcnJheVZhbHVlTWFwKj4oY2VsbCk7CiAgICAgQVNTRVJU
X0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtMjIzLDUgKzIyNCw3
IEBAIHZvaWQgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6dmlzaXRDaGlsZHJlbigKICAgICB2aXNpdG9y
LnJlcG9ydEV4dHJhTWVtb3J5VmlzaXRlZCh0aGlzT2JqZWN0LT5tX3JlcG9ydGVkQ2FwYWNpdHkg
KiBzaXplb2YoTWFwOjpLZXlWYWx1ZVBhaXJUeXBlKSk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElM
RFJFTihTcGFyc2VBcnJheVZhbHVlTWFwKTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NwYXJzZUFycmF5VmFsdWVNYXAuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TcGFyc2VBcnJheVZhbHVl
TWFwLmgJKHJldmlzaW9uIDI3MjcxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1NwYXJzZUFycmF5VmFsdWVNYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMTE1LDcgKzExNSw3IEBA
IHB1YmxpYzoKICAgICAKICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0m
LCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUgcHJvdG90eXBlKTsKIAotICAgIHN0YXRpYyB2b2lk
IHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lU
X0NISUxEUkVOOwogCiAgICAgYm9vbCBzcGFyc2VNb2RlKCkKICAgICB7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TdGFja0ZyYW1lLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdGFja0ZyYW1lLmNwcAkocmV2aXNpb24gMjcyNzEw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RhY2tGcmFtZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE0MSw3ICsxNDEsOCBAQCBTdHJpbmcgU3RhY2tGcmFtZTo6dG9TdHJpbmco
Vk0mIHZtKSBjb25zCiAgICAgcmV0dXJuIHRyYWNlQnVpbGQudG9TdHJpbmcoKS5pbXBsKCk7CiB9
CiAKLXZvaWQgU3RhY2tGcmFtZTo6dmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikK
K3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFN0YWNrRnJhbWU6OnZpc2l0Q2hpbGRy
ZW5JbXBsKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgaWYgKG1fY2FsbGVlKQogICAgICAgICB2
aXNpdG9yLmFwcGVuZChtX2NhbGxlZSk7CkBAIC0xNDksNSArMTUwLDcgQEAgdm9pZCBTdGFja0Zy
YW1lOjp2aXNpdENoaWxkcmVuKFNsb3RWaXNpdAogICAgICAgICB2aXNpdG9yLmFwcGVuZChtX2Nv
ZGVCbG9jayk7CiB9CiAKK0RFRklORV9JTlNUQU5DRV9WSVNJVF9DSElMRFJFTihTdGFja0ZyYW1l
KTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1N0YWNrRnJhbWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TdGFja0ZyYW1lLmgJKHJldmlzaW9uIDI3MjcxMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1N0YWNrRnJhbWUuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcs
NyBAQAogCiAjaW5jbHVkZSAiSGVhcC5oIgogI2luY2x1ZGUgIlZNLmgiCisjaW5jbHVkZSAiU2xv
dFZpc2l0b3JNYWNyb3MuaCIKICNpbmNsdWRlICJXYXNtSW5kZXhPck5hbWUuaCIKICNpbmNsdWRl
ICJXcml0ZUJhcnJpZXIuaCIKICNpbmNsdWRlIDxsaW1pdHMuaD4KQEAgLTM1LDcgKzM2LDYgQEAg
bmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIENvZGVCbG9jazsKIGNsYXNzIEpTT2JqZWN0OwotY2xh
c3MgU2xvdFZpc2l0b3I7CiAKIGNsYXNzIFN0YWNrRnJhbWUgewogcHVibGljOgpAQCAtNTgsNyAr
NTgsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX2J5dGVjb2RlSW5kZXg7CiAgICAgfQog
ICAgIAotICAgIHZvaWQgdmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVf
SU5TVEFOQ0VfVklTSVRfQ0hJTERSRU47CiAgICAgYm9vbCBpc01hcmtlZChWTSYgdm0pIGNvbnN0
IHsgcmV0dXJuICghbV9jYWxsZWUgfHwgdm0uaGVhcC5pc01hcmtlZChtX2NhbGxlZS5nZXQoKSkp
ICYmICghbV9jb2RlQmxvY2sgfHwgdm0uaGVhcC5pc01hcmtlZChtX2NvZGVCbG9jay5nZXQoKSkp
OyB9CiAKIHByaXZhdGU6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1
Y3R1cmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0
cnVjdHVyZS5jcHAJKHJldmlzaW9uIDI3MjcxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1N0cnVjdHVyZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNjgsNyArMTI2OCw4IEBA
IHZvaWQgU3RydWN0dXJlOjpkaWRUcmFuc2l0aW9uRnJvbVRoaXNTdHIKICAgICAgICAgbV90cmFu
c2l0aW9uV2F0Y2hwb2ludFNldC5maXJlQWxsKHZtKCksIFN0cnVjdHVyZUZpcmVEZXRhaWwodGhp
cykpOwogfQogCi12b2lkIFN0cnVjdHVyZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgU3Ry
dWN0dXJlOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3Ip
CiB7CiAgICAgU3RydWN0dXJlKiB0aGlzT2JqZWN0ID0ganNDYXN0PFN0cnVjdHVyZSo+KGNlbGwp
OwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAg
LTEyOTAsMzIgKzEyOTEsMzggQEAgdm9pZCBTdHJ1Y3R1cmU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiBjZQogICAgICAgICAvLyBOT1RFOiBUaGlzIGNhbiBpbnRlcmxlYXZlIGluIHBpbigpLCBpbiB3
aGljaCBjYXNlIGl0IG1heSBzZWUgYSBudWxsIHByb3BlcnR5IHRhYmxlLgogICAgICAgICAvLyBU
aGF0J3MgZmluZSwgYmVjYXVzZSB0aGVuIHRoZSBiYXJyaWVyIHdpbGwgZmlyZSBhbmQgd2Ugd2ls
bCBzY2FuIHRoaXMgYWdhaW4uCiAgICAgICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1f
cHJvcGVydHlUYWJsZVVuc2FmZSk7Ci0gICAgfSBlbHNlIGlmICh2aXNpdG9yLmlzQW5hbHl6aW5n
SGVhcCgpKQorICAgIH0gZWxzZSBpZiAodmlzaXRvci52bSgpLmlzQW5hbHl6aW5nSGVhcCgpKQog
ICAgICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX3Byb3BlcnR5VGFibGVVbnNhZmUp
OwogICAgIGVsc2UgaWYgKHRoaXNPYmplY3QtPm1fcHJvcGVydHlUYWJsZVVuc2FmZSkKICAgICAg
ICAgdGhpc09iamVjdC0+bV9wcm9wZXJ0eVRhYmxlVW5zYWZlLmNsZWFyKCk7CiB9CiAKLWJvb2wg
U3RydWN0dXJlOjppc0NoZWFwRHVyaW5nR0MoVk0mIHZtKQorREVGSU5FX1ZJU0lUX0NISUxEUkVO
KFN0cnVjdHVyZSk7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Citib29sIFN0cnVjdHVy
ZTo6aXNDaGVhcER1cmluZ0dDKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgLy8gRklYTUU6IFdl
IGNvdWxkIG1ha2UgdGhpcyBldmVuIHNhZmVyIGJ5IHJldHVybmluZyBmYWxzZSBpZiB0aGlzIHN0
cnVjdHVyZSdzIHByb3BlcnR5IHRhYmxlCiAgICAgLy8gaGFzIGFueSBsYXJnZSBwcm9wZXJ0eSBu
YW1lcy4KICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU3
MzM0CiAgICAgCi0gICAgcmV0dXJuICghbV9nbG9iYWxPYmplY3QgfHwgdm0uaGVhcC5pc01hcmtl
ZChtX2dsb2JhbE9iamVjdC5nZXQoKSkpCi0gICAgICAgICYmIChoYXNQb2x5UHJvdG8oKSB8fCAh
c3RvcmVkUHJvdG90eXBlT2JqZWN0KCkgfHwgdm0uaGVhcC5pc01hcmtlZChzdG9yZWRQcm90b3R5
cGVPYmplY3QoKSkpOworICAgIHJldHVybiAoIW1fZ2xvYmFsT2JqZWN0IHx8IHZpc2l0b3IuaXNN
YXJrZWQobV9nbG9iYWxPYmplY3QuZ2V0KCkpKQorICAgICAgICAmJiAoaGFzUG9seVByb3RvKCkg
fHwgIXN0b3JlZFByb3RvdHlwZU9iamVjdCgpIHx8IHZpc2l0b3IuaXNNYXJrZWQoc3RvcmVkUHJv
dG90eXBlT2JqZWN0KCkpKTsKIH0KIAotYm9vbCBTdHJ1Y3R1cmU6Om1hcmtJZkNoZWFwKFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK2Jvb2wgU3RydWN0
dXJlOjptYXJrSWZDaGVhcChWaXNpdG9yJiB2aXNpdG9yKQogewotICAgIFZNJiB2bSA9IHZpc2l0
b3Iudm0oKTsKLSAgICBpZiAoIWlzQ2hlYXBEdXJpbmdHQyh2bSkpCi0gICAgICAgIHJldHVybiB2
bS5oZWFwLmlzTWFya2VkKHRoaXMpOwotICAgIAorICAgIGlmICghaXNDaGVhcER1cmluZ0dDKHZp
c2l0b3IpKQorICAgICAgICByZXR1cm4gdmlzaXRvci5pc01hcmtlZCh0aGlzKTsKKwogICAgIHZp
c2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQodGhpcyk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK3Rl
bXBsYXRlIGJvb2wgU3RydWN0dXJlOjptYXJrSWZDaGVhcChTbG90VmlzaXRvciYpOwordGVtcGxh
dGUgYm9vbCBTdHJ1Y3R1cmU6Om1hcmtJZkNoZWFwKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKKwog
UmVmPFN0cnVjdHVyZVNoYXBlPiBTdHJ1Y3R1cmU6OnRvU3RydWN0dXJlU2hhcGUoSlNWYWx1ZSB2
YWx1ZSwgYm9vbCYgc2F3UG9seVByb3RvU3RydWN0dXJlKQogewogICAgIFJlZjxTdHJ1Y3R1cmVT
aGFwZT4gYmFzZVNoYXBlID0gU3RydWN0dXJlU2hhcGU6OmNyZWF0ZSgpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgJKHJldmlzaW9uIDI3MjcxMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC02MCw3ICs2MCw2IEBAIGNsYXNzIFByb3BlcnR5TmFtZUFycmF5RGF0YTsKIGNsYXNzIFBy
b3BlcnR5VGFibGU7CiBjbGFzcyBTdHJ1Y3R1cmVDaGFpbjsKIGNsYXNzIFN0cnVjdHVyZVNoYXBl
OwotY2xhc3MgU2xvdFZpc2l0b3I7CiBjbGFzcyBKU1N0cmluZzsKIHN0cnVjdCBEdW1wQ29udGV4
dDsKIHN0cnVjdCBIYXNoVGFibGU7CkBAIC0zMTAsNyArMzA5LDcgQEAgcHVibGljOgogICAgIEpT
VmFsdWUgcHJvdG90eXBlRm9yTG9va3VwKEpTR2xvYmFsT2JqZWN0KiwgSlNDZWxsKiBiYXNlKSBj
b25zdDsKICAgICBTdHJ1Y3R1cmVDaGFpbiogcHJvdG90eXBlQ2hhaW4oVk0mLCBKU0dsb2JhbE9i
amVjdCosIEpTT2JqZWN0KiBiYXNlKSBjb25zdDsKICAgICBTdHJ1Y3R1cmVDaGFpbiogcHJvdG90
eXBlQ2hhaW4oSlNHbG9iYWxPYmplY3QqLCBKU09iamVjdCogYmFzZSkgY29uc3Q7Ci0gICAgc3Rh
dGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xB
UkVfVklTSVRfQ0hJTERSRU47CiAgICAgCiAgICAgLy8gQSBTdHJ1Y3R1cmUgaXMgY2hlYXAgdG8g
bWFyayBkdXJpbmcgR0MgaWYgZG9pbmcgc28gd291bGQgb25seSBhZGQgYSBzbWFsbCBhbmQgYm91
bmRlZCBhbW91bnQKICAgICAvLyB0byBvdXIgaGVhcCBmb290cHJpbnQuIEZvciBleGFtcGxlLCBp
ZiB0aGUgc3RydWN0dXJlIHJlZmVycyB0byBhIGdsb2JhbCBvYmplY3QgdGhhdCBpcyBub3QKQEAg
LTMxOCwxMCArMzE3LDEwIEBAIHB1YmxpYzoKICAgICAvLyBpbmNyZWFzZSBpbiBmb290cHJpbnQg
YmVjYXVzZSBubyBvdGhlciBvYmplY3QgcmVmZXJzIHRvIHRoYXQgZ2xvYmFsIG9iamVjdC4gVGhp
cyBtZXRob2QKICAgICAvLyByZXR1cm5zIHRydWUgaWYgYWxsIHVzZXItY29udHJvbGxlZCAoYW5k
IGhlbmNlIHVuYm91bmRlZCBpbiBzaXplKSBvYmplY3RzIHJlZmVyZW5jZWQgZnJvbSB0aGUKICAg
ICAvLyBTdHJ1Y3R1cmUgYXJlIGFscmVhZHkgbWFya2VkLgotICAgIGJvb2wgaXNDaGVhcER1cmlu
Z0dDKFZNJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gYm9vbCBpc0NoZWFwRHVy
aW5nR0MoVmlzaXRvciYpOwogICAgIAogICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGlzIHN0cnVj
dHVyZSBpcyBub3cgbWFya2VkLgotICAgIGJvb2wgbWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImKTsK
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiBib29sIG1hcmtJZkNoZWFwKFZpc2l0b3Im
KTsKICAgICAKICAgICBib29sIGhhc1JhcmVEYXRhKCkgY29uc3QKICAgICB7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVDaGFpbi5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlQ2hhaW4uY3BwCShyZXZp
c2lvbiAyNzI3MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVD
aGFpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY2LDcgKzY2LDggQEAgdm9pZCBTdHJ1Y3R1cmVD
aGFpbjo6ZmluaXNoQ3JlYXRpb24oVk0mIAogICAgIH0KIH0KIAotdm9pZCBTdHJ1Y3R1cmVDaGFp
bjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVt
cGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgU3RydWN0dXJlQ2hhaW46OnZpc2l0Q2hpbGRy
ZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBTdHJ1Y3R1cmVD
aGFpbiogdGhpc09iamVjdCA9IGpzQ2FzdDxTdHJ1Y3R1cmVDaGFpbio+KGNlbGwpOwogICAgIEFT
U0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTgwLDQgKzgx
LDYgQEAgdm9pZCBTdHJ1Y3R1cmVDaGFpbjo6dmlzaXRDaGlsZHJlbihKU0NlbAogICAgIH0KIH0K
IAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKFN0cnVjdHVyZUNoYWluKTsKKwogfSAvLyBuYW1lc3Bh
Y2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVDaGFp
bi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVy
ZUNoYWluLmgJKHJldmlzaW9uIDI3MjcxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1N0cnVjdHVyZUNoYWluLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxLDcgKzUxLDcgQEAgcHVi
bGljOgogCiAgICAgc3RhdGljIFN0cnVjdHVyZUNoYWluKiBjcmVhdGUoVk0mLCBKU09iamVjdCop
OwogICAgIFN0cnVjdHVyZUlEKiBoZWFkKCkgeyByZXR1cm4gbV92ZWN0b3IuZ2V0KCk7IH0KLSAg
ICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAg
REVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0
cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJv
dG90eXBlKQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVj
dHVyZVJhcmVEYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TdHJ1Y3R1cmVSYXJlRGF0YS5jcHAJKHJldmlzaW9uIDI3MjcxMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZVJhcmVEYXRhLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNjcsNyArNjcsOCBAQCBTdHJ1Y3R1cmVSYXJlRGF0YTo6U3RydWN0dXJlUmFyZURhdGEo
Vk0mCiAgICAgICAgIG1fcHJldmlvdXMuc2V0KHZtLCB0aGlzLCBwcmV2aW91cyk7CiB9CiAKLXZv
aWQgU3RydWN0dXJlUmFyZURhdGE6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90Vmlz
aXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFN0cnVjdHVy
ZVJhcmVEYXRhOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0
b3IpCiB7CiAgICAgU3RydWN0dXJlUmFyZURhdGEqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8U3RydWN0
dXJlUmFyZURhdGEqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNP
YmplY3QsIGluZm8oKSk7CkBAIC04Niw2ICs4Nyw4IEBAIHZvaWQgU3RydWN0dXJlUmFyZURhdGE6
OnZpc2l0Q2hpbGRyZW4oSlMKICAgICB9CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihTdHJ1
Y3R1cmVSYXJlRGF0YSk7CisKIC8vIC0tLS0tLS0tLS0tIENhY2hlZCBzcGVjaWFsIHByb3BlcnRp
ZXMgaGVscGVyIHdhdGNocG9pbnQgY2xhc3NlcyAtLS0tLS0tLS0tLQogCiBjbGFzcyBDYWNoZWRT
cGVjaWFsUHJvcGVydHlBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQgZmlu
YWwgOiBwdWJsaWMgQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50QmFzZSB7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVSYXJlRGF0YS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZVJh
cmVEYXRhLmgJKHJldmlzaW9uIDI3MjcxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1N0cnVjdHVyZVJhcmVEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTY4LDcgKzY4LDcgQEAg
cHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0Rlc3RydWN0aW9uID0gdHJ1
ZTsKICAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwogCi0gICAgc3RhdGljIHZvaWQg
dmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRf
Q0hJTERSRU47CiAKICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBK
U0dsb2JhbE9iamVjdCosIEpTVmFsdWUgcHJvdG90eXBlKTsKIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJvbFRhYmxlLmNwcAkocmV2aXNpb24gMjcyNzEwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFibGUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC05Miw3ICs5Miw4IEBAIHZvaWQgU3ltYm9sVGFibGU6OmZpbmlzaENyZWF0aW9u
KFZNJiB2bSkKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CiB9CiAKLXZvaWQgU3ltYm9s
VGFibGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiB0aGlzQ2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0
b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBTeW1ib2xUYWJsZTo6dmlzaXRD
aGlsZHJlbkltcGwoSlNDZWxsKiB0aGlzQ2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBT
eW1ib2xUYWJsZSogdGhpc1N5bWJvbFRhYmxlID0ganNDYXN0PFN5bWJvbFRhYmxlKj4odGhpc0Nl
bGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc1N5bWJvbFRhYmxlLCBpbmZv
KCkpOwpAQCAtMTA4LDYgKzEwOSw4IEBAIHZvaWQgU3ltYm9sVGFibGU6OnZpc2l0Q2hpbGRyZW4o
SlNDZWxsKiAKICAgICB0aGlzU3ltYm9sVGFibGUtPm1fbG9jYWxUb0VudHJ5ID0gbnVsbHB0cjsK
IH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKFN5bWJvbFRhYmxlKTsKKwogY29uc3QgU3ltYm9s
VGFibGU6OkxvY2FsVG9FbnRyeVZlYyYgU3ltYm9sVGFibGU6OmxvY2FsVG9FbnRyeShjb25zdCBD
b25jdXJyZW50SlNMb2NrZXImKQogewogICAgIGlmIChVTkxJS0VMWSghbV9sb2NhbFRvRW50cnkp
KSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TeW1ib2xUYWJsZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJvbFRhYmxlLmgJ
KHJldmlzaW9uIDI3MjcxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJv
bFRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTczMyw3ICs3MzMsNyBAQCBwdWJsaWM6CiAgICAg
ICAgIG1fc2luZ2xldG9uLm5vdGlmeVdyaXRlKHZtLCB0aGlzLCBzY29wZSwgcmVhc29uKTsKICAg
ICB9CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9y
Jik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIERFQ0xBUkVfRVhQT1JUX0lO
Rk87CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVQcm9maWxlckxv
Zy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZVBy
b2ZpbGVyTG9nLmNwcAkocmV2aXNpb24gMjcyNzEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvVHlwZVByb2ZpbGVyTG9nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI0LDcgKzEy
NCw3IEBAIHZvaWQgVHlwZVByb2ZpbGVyTG9nOjpwcm9jZXNzTG9nRW50cmllcygKICAgICB9CiB9
CiAKLXZvaWQgVHlwZVByb2ZpbGVyTG9nOjp2aXNpdChTbG90VmlzaXRvciYgdmlzaXRvcikKK3Zv
aWQgVHlwZVByb2ZpbGVyTG9nOjp2aXNpdChBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQog
ewogICAgIGZvciAoTG9nRW50cnkqIGVudHJ5ID0gbV9sb2dTdGFydFB0cjsgZW50cnkgIT0gbV9j
dXJyZW50TG9nRW50cnlQdHI7ICsrZW50cnkpIHsKICAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJh
cnJpZXJlZChlbnRyeS0+dmFsdWUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvVHlwZVByb2ZpbGVyTG9nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvVHlwZVByb2ZpbGVyTG9nLmgJKHJldmlzaW9uIDI3MjcxMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVQcm9maWxlckxvZy5oCSh3b3JraW5nIGNvcHkpCkBA
IC01OSw3ICs1OSw3IEBAIHB1YmxpYzoKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHByb2Nl
c3NMb2dFbnRyaWVzKFZNJiwgY29uc3QgU3RyaW5nJik7CiAgICAgTG9nRW50cnkqIGxvZ0VuZFB0
cigpIGNvbnN0IHsgcmV0dXJuIG1fbG9nRW5kUHRyOyB9CiAKLSAgICB2b2lkIHZpc2l0KFNsb3RW
aXNpdG9yJik7CisgICAgdm9pZCB2aXNpdChBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAKICAgICBz
dGF0aWMgcHRyZGlmZl90IGxvZ1N0YXJ0T2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9G
KFR5cGVQcm9maWxlckxvZywgbV9sb2dTdGFydFB0cik7IH0KICAgICBzdGF0aWMgcHRyZGlmZl90
IGN1cnJlbnRMb2dFbnRyeU9mZnNldCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihUeXBlUHJv
ZmlsZXJMb2csIG1fY3VycmVudExvZ0VudHJ5UHRyKTsgfQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvVk0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9WTS5oCShyZXZpc2lvbiAyNzI3MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9WTS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjEsNiArMTIxLDcgQEAgY2xhc3MgRmFz
dE1hbGxvY0FsaWduZWRNZW1vcnlBbGxvY2F0b3I7CiBjbGFzcyBHaWdhY2FnZUFsaWduZWRNZW1v
cnlBbGxvY2F0b3I7CiBjbGFzcyBIYW5kbGVTdGFjazsKIGNsYXNzIEhhc093blByb3BlcnR5Q2Fj
aGU7CitjbGFzcyBIZWFwQW5hbHl6ZXI7CiBjbGFzcyBIZWFwUHJvZmlsZXI7CiBjbGFzcyBJZGVu
dGlmaWVyOwogY2xhc3MgSW50ZXJwcmV0ZXI7CkBAIC0zMTAsNiArMzExLDEwIEBAIHB1YmxpYzoK
ICAgICBIZWFwUHJvZmlsZXIqIGhlYXBQcm9maWxlcigpIGNvbnN0IHsgcmV0dXJuIG1faGVhcFBy
b2ZpbGVyLmdldCgpOyB9CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgSGVhcFByb2ZpbGVyJiBlbnN1
cmVIZWFwUHJvZmlsZXIoKTsKIAorICAgIGJvb2wgaXNBbmFseXppbmdIZWFwKCkgY29uc3QgeyBy
ZXR1cm4gbV9hY3RpdmVIZWFwQW5hbHl6ZXI7IH0KKyAgICBIZWFwQW5hbHl6ZXIqIGFjdGl2ZUhl
YXBBbmFseXplcigpIGNvbnN0IHsgcmV0dXJuIG1fYWN0aXZlSGVhcEFuYWx5emVyOyB9CisgICAg
dm9pZCBzZXRBY3RpdmVIZWFwQW5hbHl6ZXIoSGVhcEFuYWx5emVyKiBhbmFseXplcikgeyBtX2Fj
dGl2ZUhlYXBBbmFseXplciA9IGFuYWx5emVyOyB9CisKICNpZiBFTkFCTEUoU0FNUExJTkdfUFJP
RklMRVIpCiAgICAgU2FtcGxpbmdQcm9maWxlciogc2FtcGxpbmdQcm9maWxlcigpIHsgcmV0dXJu
IG1fc2FtcGxpbmdQcm9maWxlci5nZXQoKTsgfQogICAgIEpTX0VYUE9SVF9QUklWQVRFIFNhbXBs
aW5nUHJvZmlsZXImIGVuc3VyZVNhbXBsaW5nUHJvZmlsZXIoUmVmPFN0b3B3YXRjaD4mJik7CkBA
IC0xMTk1LDkgKzEyMDAsMTAgQEAgcHVibGljOgogICAgIGJvb2wgZGlkRW50ZXJWTSB7IGZhbHNl
IH07CiBwcml2YXRlOgogICAgIGJvb2wgbV9mYWlsTmV4dE5ld0NvZGVCbG9jayB7IGZhbHNlIH07
Ci0gICAgRGVsZXRlUHJvcGVydHlNb2RlIG1fZGVsZXRlUHJvcGVydHlNb2RlIHsgRGVsZXRlUHJv
cGVydHlNb2RlOjpEZWZhdWx0IH07CiAgICAgYm9vbCBtX2dsb2JhbENvbnN0UmVkZWNsYXJhdGlv
blNob3VsZFRocm93IHsgdHJ1ZSB9OwogICAgIGJvb2wgbV9zaG91bGRCdWlsZFBDVG9Db2RlT3Jp
Z2luTWFwcGluZyB7IGZhbHNlIH07CisgICAgRGVsZXRlUHJvcGVydHlNb2RlIG1fZGVsZXRlUHJv
cGVydHlNb2RlIHsgRGVsZXRlUHJvcGVydHlNb2RlOjpEZWZhdWx0IH07CisgICAgSGVhcEFuYWx5
emVyKiBtX2FjdGl2ZUhlYXBBbmFseXplciB7IG51bGxwdHIgfTsKICAgICBzdGQ6OnVuaXF1ZV9w
dHI8Q29kZUNhY2hlPiBtX2NvZGVDYWNoZTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SW50bENhY2hl
PiBtX2ludGxDYWNoZTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8QnVpbHRpbkV4ZWN1dGFibGVzPiBt
X2J1aWx0aW5FeGVjdXRhYmxlczsKQEAgLTEyMzgsNiArMTI0NCw3IEBAIHByaXZhdGU6CiAgICAg
Vk0qIG1fcHJldjsgLy8gUmVxdWlyZWQgYnkgRG91Ymx5TGlua2VkTGlzdE5vZGUuCiAgICAgVk0q
IG1fbmV4dDsgLy8gUmVxdWlyZWQgYnkgRG91Ymx5TGlua2VkTGlzdE5vZGUuCiAKK3B1YmxpYzoK
ICAgICAvLyBGcmllbmRzIGZvciBleGNlcHRpb24gY2hlY2tpbmcgcHVycG9zZSBvbmx5LgogICAg
IGZyaWVuZCBjbGFzcyBIZWFwOwogICAgIGZyaWVuZCBjbGFzcyBDYXRjaFNjb3BlOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha01hcEltcGwuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtNYXBJbXBsLmNwcAkocmV2aXNp
b24gMjcyNzEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha01hcEltcGwu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw4ICszOSw5IEBAIHZvaWQgV2Vha01hcEltcGw8V2Vh
a01hcEJ1Y2tldD46OmRlc3Ryb3kKICAgICBzdGF0aWNfY2FzdDxXZWFrTWFwSW1wbCo+KGNlbGwp
LT5+V2Vha01hcEltcGwoKTsKIH0KIAotdGVtcGxhdGUgPHR5cGVuYW1lIFdlYWtNYXBCdWNrZXQ+
Ci12b2lkIFdlYWtNYXBJbXBsPFdlYWtNYXBCdWNrZXQ+Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCog
Y2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBXZWFrTWFwQnVj
a2V0PgordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgV2Vha01hcEltcGw8V2Vha01h
cEJ1Y2tldD46OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRv
cikKIHsKICAgICBXZWFrTWFwSW1wbCogdGhpc09iamVjdCA9IGpzQ2FzdDxXZWFrTWFwSW1wbCo+
KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygp
KTsKQEAgLTQ4LDYgKzQ5LDggQEAgdm9pZCBXZWFrTWFwSW1wbDxXZWFrTWFwQnVja2V0Pjo6dmlz
aXRDaAogICAgIHZpc2l0b3IucmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKHRoaXNPYmplY3QtPm1f
Y2FwYWNpdHkgKiBzaXplb2YoV2Vha01hcEJ1Y2tldCkpOwogfQogCitERUZJTkVfVEVNUExBVEVf
VklTSVRfQ0hJTERSRU4odGVtcGxhdGU8dHlwZW5hbWUgV2Vha01hcEJ1Y2tldD4sIFdlYWtNYXBJ
bXBsPFdlYWtNYXBCdWNrZXQ+KTsKKwogdGVtcGxhdGUgPHR5cGVuYW1lIFdlYWtNYXBCdWNrZXQ+
CiBzaXplX3QgV2Vha01hcEltcGw8V2Vha01hcEJ1Y2tldD46OmVzdGltYXRlZFNpemUoSlNDZWxs
KiBjZWxsLCBWTSYgdm0pCiB7CkBAIC01NiwxNSArNTksMTQgQEAgc2l6ZV90IFdlYWtNYXBJbXBs
PFdlYWtNYXBCdWNrZXQ+Ojplc3RpbQogfQogCiB0ZW1wbGF0ZSA8Pgotdm9pZCBXZWFrTWFwSW1w
bDxXZWFrTWFwQnVja2V0PFdlYWtNYXBCdWNrZXREYXRhS2V5Pj46OnZpc2l0T3V0cHV0Q29uc3Ry
YWludHMoSlNDZWxsKiwgU2xvdFZpc2l0b3ImKQordm9pZCBXZWFrTWFwSW1wbDxXZWFrTWFwQnVj
a2V0PFdlYWtNYXBCdWNrZXREYXRhS2V5Pj46OnZpc2l0T3V0cHV0Q29uc3RyYWludHMoSlNDZWxs
KiwgQWJzdHJhY3RTbG90VmlzaXRvciYpCiB7CiAgICAgLy8gT25seSBKU1dlYWtNYXAgbmVlZHMg
dG8gaGFydmVzdCB2YWx1ZSByZWZlcmVuY2VzCiB9CiAKIHRlbXBsYXRlIDw+Ci12b2lkIFdlYWtN
YXBJbXBsPFdlYWtNYXBCdWNrZXQ8V2Vha01hcEJ1Y2tldERhdGFLZXlWYWx1ZT4+Ojp2aXNpdE91
dHB1dENvbnN0cmFpbnRzKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2b2lk
IFdlYWtNYXBJbXBsPFdlYWtNYXBCdWNrZXQ8V2Vha01hcEJ1Y2tldERhdGFLZXlWYWx1ZT4+Ojp2
aXNpdE91dHB1dENvbnN0cmFpbnRzKEpTQ2VsbCogY2VsbCwgQWJzdHJhY3RTbG90VmlzaXRvciYg
dmlzaXRvcikKIHsKLSAgICBWTSYgdm0gPSB2aXNpdG9yLnZtKCk7CiAgICAgYXV0byogdGhpc09i
amVjdCA9IGpzQ2FzdDxXZWFrTWFwSW1wbCo+KGNlbGwpOwogICAgIGF1dG8gbG9ja2VyID0gaG9s
ZExvY2sodGhpc09iamVjdC0+Y2VsbExvY2soKSk7CiAgICAgYXV0byogYnVmZmVyID0gdGhpc09i
amVjdC0+YnVmZmVyKCk7CkBAIC03Miw3ICs3NCw3IEBAIHZvaWQgV2Vha01hcEltcGw8V2Vha01h
cEJ1Y2tldDxXZWFrTWFwQnUKICAgICAgICAgYXV0byogYnVja2V0ID0gYnVmZmVyICsgaW5kZXg7
CiAgICAgICAgIGlmIChidWNrZXQtPmlzRW1wdHkoKSB8fCBidWNrZXQtPmlzRGVsZXRlZCgpKQog
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlmICghdm0uaGVhcC5pc01hcmtlZChidWNr
ZXQtPmtleSgpKSkKKyAgICAgICAgaWYgKCF2aXNpdG9yLmlzTWFya2VkKGJ1Y2tldC0+a2V5KCkp
KQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIGJ1Y2tldC0+dmlzaXRBZ2dyZWdhdGUo
dmlzaXRvcik7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vh
a01hcEltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9X
ZWFrTWFwSW1wbC5oCShyZXZpc2lvbiAyNzI3MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9XZWFrTWFwSW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDUsNyArMTQ1LDcgQEAg
cHVibGljOgogICAgIH0KIAogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUID0gRGF0YT4KLSAgICBB
TFdBWVNfSU5MSU5FIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTxULCBXZWFr
TWFwQnVja2V0RGF0YUtleVZhbHVlPjo6dmFsdWU+Ojp0eXBlIHZpc2l0QWdncmVnYXRlKFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQorICAgIEFMV0FZU19JTkxJTkUgdHlwZW5hbWUgc3RkOjplbmFibGVf
aWY8c3RkOjppc19zYW1lPFQsIFdlYWtNYXBCdWNrZXREYXRhS2V5VmFsdWU+Ojp2YWx1ZT46OnR5
cGUgdmlzaXRBZ2dyZWdhdGUoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKICAgICB7CiAg
ICAgICAgIHZpc2l0b3IuYXBwZW5kKG1fZGF0YS52YWx1ZSk7CiAgICAgfQpAQCAtMjAyLDcgKzIw
Miw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNEZXN0cnVjdGlv
biA9IHRydWU7CiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKIAotICAgIHN0YXRp
YyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJF
X1RFTVBMQVRFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgc3RhdGljIHNpemVfdCBlc3RpbWF0ZWRT
aXplKEpTQ2VsbCosIFZNJik7CiAKQEAgLTMxMSw3ICszMTEsNyBAQCBwdWJsaWM6CiAgICAgICAg
IHJldHVybiB2bS53ZWFrU2V0U3BhY2U8bW9kZT4oKTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9p
ZCB2aXNpdE91dHB1dENvbnN0cmFpbnRzKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgc3Rh
dGljIHZvaWQgdmlzaXRPdXRwdXRDb25zdHJhaW50cyhKU0NlbGwqLCBBYnN0cmFjdFNsb3RWaXNp
dG9yJik7CiAgICAgdm9pZCBmaW5hbGl6ZVVuY29uZGl0aW9uYWxseShWTSYpOwogCiBwcml2YXRl
OgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0pTRG9sbGFyVk0uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9KU0RvbGxhclZNLmNwcAkocmV2
aXNpb24gMjcyNzEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0pTRG9sbGFyVk0u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjQsMTQgKzIyNCw3IEBAIHB1YmxpYzoKIAogICAgIHZv
aWQgZmluaXNoQ3JlYXRpb24oVk0mLCBSb290Kik7CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENo
aWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCi0gICAgewotICAgICAg
ICBEb2xsYXJWTUFzc2VydFNjb3BlIGFzc2VydFNjb3BlOwotICAgICAgICBFbGVtZW50KiB0aGlz
T2JqZWN0ID0ganNDYXN0PEVsZW1lbnQqPihjZWxsKTsKLSAgICAgICAgQVNTRVJUX0dDX09CSkVD
VF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwotICAgICAgICBCYXNlOjp2aXNpdENoaWxk
cmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwotICAgICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2Jq
ZWN0LT5tX3Jvb3QpOwotICAgIH0KKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAg
c3RhdGljIEVsZW1lbnRIYW5kbGVPd25lciogaGFuZGxlT3duZXIoKTsKIApAQCAtMjQ3LDEwICsy
NDAsMjIgQEAgcHJpdmF0ZToKICAgICBXcml0ZUJhcnJpZXI8Um9vdD4gbV9yb290OwogfTsKIAor
dGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgRWxlbWVudDo6dmlzaXRDaGlsZHJlbklt
cGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIERvbGxhclZNQXNzZXJ0
U2NvcGUgYXNzZXJ0U2NvcGU7CisgICAgRWxlbWVudCogdGhpc09iamVjdCA9IGpzQ2FzdDxFbGVt
ZW50Kj4oY2VsbCk7CisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBp
bmZvKCkpOworICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7Cisg
ICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9yb290KTsKK30KKworREVGSU5FX1ZJU0lU
X0NISUxEUkVOKEVsZW1lbnQpOworCiBjbGFzcyBFbGVtZW50SGFuZGxlT3duZXIgZmluYWwgOiBw
dWJsaWMgV2Vha0hhbmRsZU93bmVyIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1
YmxpYzoKLSAgICBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpT
Qzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgU2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNo
YXIqKiByZWFzb24pIGZpbmFsCisgICAgYm9vbCBpc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhK
U0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIEFic3RyYWN0U2xvdFZpc2l0
b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pIGZpbmFsCiAgICAgewogICAgICAgICBE
b2xsYXJWTUFzc2VydFNjb3BlIGFzc2VydFNjb3BlOwogICAgICAgICBpZiAoVU5MSUtFTFkocmVh
c29uKSkKQEAgLTMwNCwxOCArMzA5LDIzIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIFN0cnVj
dHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0
VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lk
IHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiB0aGlzT2JqZWN0LCBTbG90VmlzaXRvciYgdmlzaXRvcikK
LSAgICB7Ci0gICAgICAgIERvbGxhclZNQXNzZXJ0U2NvcGUgYXNzZXJ0U2NvcGU7Ci0gICAgICAg
IEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKLSAgICAgICAg
QmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKLSAgICAgICAgdmlzaXRv
ci5hZGRPcGFxdWVSb290KHRoaXNPYmplY3QpOwotICAgIH0KKyAgICBERUNMQVJFX1ZJU0lUX0NI
SUxEUkVOOwogCiBwcml2YXRlOgogICAgIFdlYWs8RWxlbWVudD4gbV9lbGVtZW50OwogfTsKIAor
dGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgUm9vdDo6dmlzaXRDaGlsZHJlbkltcGwo
SlNDZWxsKiB0aGlzT2JqZWN0LCBWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIERvbGxhclZNQXNz
ZXJ0U2NvcGUgYXNzZXJ0U2NvcGU7CisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlz
T2JqZWN0LCBpbmZvKCkpOworICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlz
aXRvcik7CisgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHRoaXNPYmplY3QpOworfQorCitERUZJ
TkVfVklTSVRfQ0hJTERSRU4oUm9vdCk7CisKIGNsYXNzIFNpbXBsZU9iamVjdCA6IHB1YmxpYyBK
U05vbkZpbmFsT2JqZWN0IHsKIHB1YmxpYzoKICAgICBTaW1wbGVPYmplY3QoVk0mIHZtLCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSkKQEAgLTM0MCwxNCArMzUwLDcgQEAgcHVibGljOgogICAgICAgICBy
ZXR1cm4gc2ltcGxlT2JqZWN0OwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKLSAgICB7Ci0gICAgICAgIERv
bGxhclZNQXNzZXJ0U2NvcGUgYXNzZXJ0U2NvcGU7Ci0gICAgICAgIFNpbXBsZU9iamVjdCogdGhp
c09iamVjdCA9IGpzQ2FzdDxTaW1wbGVPYmplY3QqPihjZWxsKTsKLSAgICAgICAgQVNTRVJUX0dD
X09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwotICAgICAgICBCYXNlOjp2aXNp
dENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwotICAgICAgICB2aXNpdG9yLmFwcGVuZCh0
aGlzT2JqZWN0LT5tX2hpZGRlblZhbHVlKTsKLSAgICB9CisgICAgREVDTEFSRV9WSVNJVF9DSElM
RFJFTjsKIAogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQogICAgIHsKQEAg
LTM4MCw2ICszODMsMTggQEAgcHJpdmF0ZToKICAgICBXcml0ZUJhcnJpZXI8SlNDOjpVbmtub3du
PiBtX2hpZGRlblZhbHVlOwogfTsKIAordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQg
U2ltcGxlT2JqZWN0Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZp
c2l0b3IpCit7CisgICAgRG9sbGFyVk1Bc3NlcnRTY29wZSBhc3NlcnRTY29wZTsKKyAgICBTaW1w
bGVPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8U2ltcGxlT2JqZWN0Kj4oY2VsbCk7CisgICAg
QVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOworICAgIEJhc2U6
OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CisgICAgdmlzaXRvci5hcHBlbmQo
dGhpc09iamVjdC0+bV9oaWRkZW5WYWx1ZSk7Cit9CisKK0RFRklORV9WSVNJVF9DSElMRFJFTihT
aW1wbGVPYmplY3QpOworCiBjbGFzcyBJbXB1cmVHZXR0ZXIgOiBwdWJsaWMgSlNOb25GaW5hbE9i
amVjdCB7CiBwdWJsaWM6CiAgICAgSW1wdXJlR2V0dGVyKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUpCkBAIC00MzYsMTQgKzQ1MSw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIEJhc2U6
OmdldE93blByb3BlcnR5U2xvdChvYmplY3QsIGdsb2JhbE9iamVjdCwgbmFtZSwgc2xvdCk7CiAg
ICAgfQogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQotICAgIHsKLSAgICAgICAgRG9sbGFyVk1Bc3NlcnRTY29wZSBhc3Nl
cnRTY29wZTsKLSAgICAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjZWxsLCBpbmZvKCkp
OwotICAgICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKGNlbGwsIHZpc2l0b3IpOwotICAgICAgICBJ
bXB1cmVHZXR0ZXIqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SW1wdXJlR2V0dGVyKj4oY2VsbCk7Ci0g
ICAgICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fZGVsZWdhdGUpOwotICAgIH0KKyAg
ICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgdm9pZCBzZXREZWxlZ2F0ZShWTSYgdm0s
IEpTT2JqZWN0KiBkZWxlZ2F0ZSkKICAgICB7CkBAIC00NTQsNiArNDYyLDE4IEBAIHByaXZhdGU6
CiAgICAgV3JpdGVCYXJyaWVyPEpTT2JqZWN0PiBtX2RlbGVnYXRlOwogfTsKIAordGVtcGxhdGU8
dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSW1wdXJlR2V0dGVyOjp2aXNpdENoaWxkcmVuSW1wbChK
U0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgRG9sbGFyVk1Bc3NlcnRTY29w
ZSBhc3NlcnRTY29wZTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNlbGwsIGluZm8o
KSk7CisgICAgQmFzZTo6dmlzaXRDaGlsZHJlbihjZWxsLCB2aXNpdG9yKTsKKyAgICBJbXB1cmVH
ZXR0ZXIqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SW1wdXJlR2V0dGVyKj4oY2VsbCk7CisgICAgdmlz
aXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9kZWxlZ2F0ZSk7Cit9CisKK0RFRklORV9WSVNJVF9D
SElMRFJFTihJbXB1cmVHZXR0ZXIpOworCiBzdGF0aWMgSlNDX0RFQ0xBUkVfQ1VTVE9NX0dFVFRF
UihjdXN0b21HZXR0ZXJWYWx1ZUdldHRlcik7CiBzdGF0aWMgSlNDX0RFQ0xBUkVfQ1VTVE9NX0dF
VFRFUihjdXN0b21HZXR0ZXJBY2Vzc29yR2V0dGVyKTsKIApAQCAtMTgyMiwxNCArMTg0Miw3IEBA
IHB1YmxpYzoKICAgICAgICAgcHV0RGlyZWN0TmF0aXZlRnVuY3Rpb24odm0sIGdsb2JhbE9iamVj
dCwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImFkZEJ5dGVzIiksIDAsIGZ1bmN0aW9uV2Fz
bVN0cmVhbWluZ0NvbXBpbGVyQWRkQnl0ZXMsIE5vSW50cmluc2ljLCBzdGF0aWNfY2FzdDx1bnNp
Z25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSk7CiAgICAgfQogCi0gICAgc3RhdGlj
IHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQot
ICAgIHsKLSAgICAgICAgRG9sbGFyVk1Bc3NlcnRTY29wZSBhc3NlcnRTY29wZTsKLSAgICAgICAg
YXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxXYXNtU3RyZWFtaW5nQ29tcGlsZXIqPihjZWxsKTsK
LSAgICAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwot
ICAgICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwotICAgICAg
ICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX3Byb21pc2UpOwotICAgIH0KKyAgICBERUNM
QVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgREVDTEFSRV9JTkZPOwogCkBAIC0xODM3LDYgKzE4
NTAsMTggQEAgcHVibGljOgogICAgIFJlZjxXYXNtOjpTdHJlYW1pbmdDb21waWxlcj4gbV9zdHJl
YW1pbmdDb21waWxlcjsKIH07CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFdh
c21TdHJlYW1pbmdDb21waWxlcjo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNp
dG9yJiB2aXNpdG9yKQoreworICAgIERvbGxhclZNQXNzZXJ0U2NvcGUgYXNzZXJ0U2NvcGU7Cisg
ICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxXYXNtU3RyZWFtaW5nQ29tcGlsZXIqPihjZWxs
KTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7Cisg
ICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKKyAgICB2aXNpdG9y
LmFwcGVuZCh0aGlzT2JqZWN0LT5tX3Byb21pc2UpOworfQorCitERUZJTkVfVklTSVRfQ0hJTERS
RU4oV2FzbVN0cmVhbWluZ0NvbXBpbGVyKTsKKwogY29uc3QgQ2xhc3NJbmZvIFdhc21TdHJlYW1p
bmdDb21waWxlcjo6c19pbmZvID0geyAiV2FzbVN0cmVhbWluZ0NvbXBpbGVyIiwgJkJhc2U6OnNf
aW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShXYXNtU3RyZWFtaW5n
Q29tcGlsZXIpIH07CiAKIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihmdW5jdGlvbldhc21TdHJl
YW1pbmdDb21waWxlckFkZEJ5dGVzLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2Fs
bEZyYW1lKiBjYWxsRnJhbWUpKQpAQCAtMzY5OSwxMyArMzcyNCwxNiBAQCB2b2lkIEpTRG9sbGFy
Vk06OmFkZENvbnN0cnVjdGlibGVGdW5jdGlvCiAgICAgcHV0RGlyZWN0KHZtLCBpZGVudGlmaWVy
LCBKU0Z1bmN0aW9uOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgYXJndW1lbnRzLCBpZGVudGlm
aWVyLnN0cmluZygpLCBmdW5jdGlvbiwgTm9JbnRyaW5zaWMsIGZ1bmN0aW9uKSwganNEb2xsYXJW
TVByb3BlcnR5QXR0cmlidXRlcyk7CiB9CiAKLXZvaWQgSlNEb2xsYXJWTTo6dmlzaXRDaGlsZHJl
bihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUg
VmlzaXRvcj4KK3ZvaWQgSlNEb2xsYXJWTTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxs
LCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTRG9sbGFyVk0qIHRoaXNPYmplY3QgPSBqc0Nh
c3Q8SlNEb2xsYXJWTSo+KGNlbGwpOwogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVj
dCwgdmlzaXRvcik7CiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9vYmplY3REb2lu
Z1NpZGVFZmZlY3RQdXRXaXRob3V0Q29ycmVjdFNsb3RTdGF0dXNTdHJ1Y3R1cmUpOwogfQogCitE
RUZJTkVfVklTSVRfQ0hJTERSRU4oSlNEb2xsYXJWTSk7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwog
CiBJR05PUkVfV0FSTklOR1NfRU5ECkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMv
SlNEb2xsYXJWTS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9K
U0RvbGxhclZNLmgJKHJldmlzaW9uIDI3MjcxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90
b29scy9KU0RvbGxhclZNLmgJKHdvcmtpbmcgY29weSkKQEAgLTc0LDcgKzc0LDcgQEAgcHJpdmF0
ZToKICAgICB2b2lkIGFkZEZ1bmN0aW9uKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBjb25zdCBjaGFy
KiBuYW1lLCBOYXRpdmVGdW5jdGlvbiwgdW5zaWduZWQgYXJndW1lbnRzKTsKICAgICB2b2lkIGFk
ZENvbnN0cnVjdGlibGVGdW5jdGlvbihWTSYsIEpTR2xvYmFsT2JqZWN0KiwgY29uc3QgY2hhciog
bmFtZSwgTmF0aXZlRnVuY3Rpb24sIHVuc2lnbmVkIGFyZ3VtZW50cyk7CiAKLSAgICBzdGF0aWMg
dm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9W
SVNJVF9DSElMRFJFTjsKIAogICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1fb2JqZWN0RG9p
bmdTaWRlRWZmZWN0UHV0V2l0aG91dENvcnJlY3RTbG90U3RhdHVzU3RydWN0dXJlOwogfTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21HbG9iYWwuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21HbG9iYWwuY3BwCShyZXZpc2lvbiAy
NzI3MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtR2xvYmFsLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTAzLDcgKzEwMyw4IEBAIHZvaWQgR2xvYmFsOjpzZXQoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE8KICAgICB9CiB9CiAKLXZvaWQgR2xvYmFsOjp2aXNpdEFnZ3JlZ2F0ZShT
bG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEds
b2JhbDo6dmlzaXRBZ2dyZWdhdGUoVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBzd2l0Y2ggKG1f
dHlwZSkgewogICAgIGNhc2UgV2FzbTo6VHlwZTo6RXh0ZXJucmVmOgpAQCAtMTE3LDYgKzExOCw5
IEBAIHZvaWQgR2xvYmFsOjp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYKICAgICB9CiB9CiAK
K3RlbXBsYXRlIHZvaWQgR2xvYmFsOjp2aXNpdEFnZ3JlZ2F0ZShBYnN0cmFjdFNsb3RWaXNpdG9y
Jik7Cit0ZW1wbGF0ZSB2b2lkIEdsb2JhbDo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImKTsK
KwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6Okdsb2JhbAogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQkFT
U0VNQkxZKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUdsb2JhbC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21HbG9iYWwuaAkocmV2
aXNpb24gMjcyNzEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUdsb2JhbC5o
CSh3b3JraW5nIGNvcHkpCkBAIC01Nyw3ICs1Nyw3IEBAIHB1YmxpYzoKICAgICBKU1ZhbHVlIGdl
dChKU0dsb2JhbE9iamVjdCopIGNvbnN0OwogICAgIHVpbnQ2NF90IGdldFByaW1pdGl2ZSgpIGNv
bnN0IHsgcmV0dXJuIG1fdmFsdWUubV9wcmltaXRpdmU7IH0KICAgICB2b2lkIHNldChKU0dsb2Jh
bE9iamVjdCosIEpTVmFsdWUpOwotICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3Im
KTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIHZpc2l0QWdncmVnYXRlKFZp
c2l0b3ImKTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IFQqIG93bmVyKCkgY29uc3QgeyBy
ZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxUKj4obV9vd25lcik7IH0KICAgICB2b2lkIHNldE93bmVy
KEpTT2JqZWN0KiBvd25lcikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21U
YWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRh
YmxlLmNwcAkocmV2aXNpb24gMjcyNzEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbVRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY2LDcgKzE2Niw4IEBAIEpTVmFsdWUg
VGFibGU6OmdldCh1aW50MzJfdCBpbmRleCkgY29uc3QKICAgICByZXR1cm4gbV9qc1ZhbHVlcy5n
ZXQoKVtpbmRleCAmIG1fbWFza10uZ2V0KCk7CiB9CiAKLXZvaWQgVGFibGU6OnZpc2l0QWdncmVn
YXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3Zv
aWQgVGFibGU6OnZpc2l0QWdncmVnYXRlKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgUkVMRUFT
RV9BU1NFUlQobV9vd25lcik7CiAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX293bmVyLT5j
ZWxsTG9jaygpKTsKQEAgLTE3NCw2ICsxNzUsOSBAQCB2b2lkIFRhYmxlOjp2aXNpdEFnZ3JlZ2F0
ZShTbG90VmlzaXRvciYgCiAgICAgICAgIHZpc2l0b3IuYXBwZW5kKG1fanNWYWx1ZXMuZ2V0KClb
aV0pOwogfQogCit0ZW1wbGF0ZSB2b2lkIFRhYmxlOjp2aXNpdEFnZ3JlZ2F0ZShBYnN0cmFjdFNs
b3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIFRhYmxlOjp2aXNpdEFnZ3JlZ2F0ZShTbG90Vmlz
aXRvciYpOworCiBUeXBlIFRhYmxlOjp3YXNtVHlwZSgpIGNvbnN0CiB7CiAgICAgaWYgKGlzRXh0
ZXJucmVmVGFibGUoKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UYWJs
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UYWJsZS5o
CShyZXZpc2lvbiAyNzI3MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGFi
bGUuaAkod29ya2luZyBjb3B5KQpAQCAtODAsNyArODAsNyBAQCBwdWJsaWM6CiAgICAgT3B0aW9u
YWw8dWludDMyX3Q+IGdyb3codWludDMyX3QgZGVsdGEsIEpTVmFsdWUgZGVmYXVsdFZhbHVlKTsK
ICAgICB2b2lkIGNvcHkoY29uc3QgVGFibGUqIHNyY1RhYmxlLCB1aW50MzJfdCBkc3RJbmRleCwg
dWludDMyX3Qgc3JjSW5kZXgpOwogCi0gICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRv
ciYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgdmlzaXRBZ2dyZWdhdGUo
VmlzaXRvciYpOwogCiBwcm90ZWN0ZWQ6CiAgICAgVGFibGUodWludDMyX3QgaW5pdGlhbCwgT3B0
aW9uYWw8dWludDMyX3Q+IG1heGltdW0sIFRhYmxlRWxlbWVudFR5cGUgPSBUYWJsZUVsZW1lbnRU
eXBlOjpFeHRlcm5yZWYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNU
b1dhc21JQ0NhbGxlZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vanMvSlNUb1dhc21JQ0NhbGxlZS5jcHAJKHJldmlzaW9uIDI3MjcxMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTVG9XYXNtSUNDYWxsZWUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00OSw3ICs0OSw4IEBAIFN0cnVjdHVyZSogSlNUb1dhc21JQ0NhbGxlZTo6Y3JlYXRlU3Ry
dWMKICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90
eXBlLCBUeXBlSW5mbyhKU0NhbGxlZVR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKIH0K
IAotdm9pZCBKU1RvV2FzbUlDQ2FsbGVlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xv
dFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1Rv
V2FzbUlDQ2FsbGVlOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZp
c2l0b3IpCiB7CiAgICAgSlNUb1dhc21JQ0NhbGxlZSogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rv
V2FzbUlDQ2FsbGVlKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlz
T2JqZWN0LCBpbmZvKCkpOwpAQCAtNTgsNiArNTksOCBAQCB2b2lkIEpTVG9XYXNtSUNDYWxsZWU6
OnZpc2l0Q2hpbGRyZW4oSlNDCiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9mdW5j
dGlvbik7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU1RvV2FzbUlDQ2FsbGVlKTsKKwog
fSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1RvV2FzbUlDQ2FsbGVlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNUb1dhc21JQ0NhbGxlZS5o
CShyZXZpc2lvbiAyNzI3MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1Rv
V2FzbUlDQ2FsbGVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTU2LDcgKzU2LDcgQEAgcHJpdmF0ZToK
ICAgICBKU1RvV2FzbUlDQ2FsbGVlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiAgICAgICAgIDogQmFzZSh2bSwgZ2xvYmFsT2JqZWN0
LCBzdHJ1Y3R1cmUpCiAgICAgeyB9Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0Nl
bGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBX
cml0ZUJhcnJpZXI8V2ViQXNzZW1ibHlGdW5jdGlvbj4gbV9mdW5jdGlvbjsKIH07CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5
Q29kZUJsb2NrLmNwcAkocmV2aXNpb24gMjcyNzEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgy
LDcgKzgyLDggQEAgdm9pZCBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrOjpjbGVhckpTQ2FsbAogICAg
ICAgICAoKml0ZXIpLT51bmxpbmsodm0pOwogfQogCi12b2lkIEpTV2ViQXNzZW1ibHlDb2RlQmxv
Y2s6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3Rl
bXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6OnZp
c2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBK
U1dlYkFzc2VtYmx5Q29kZUJsb2NrKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTV2ViQXNzZW1ibHlD
b2RlQmxvY2sqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmpl
Y3QsIGluZm8oKSk7CkBAIC05MCw2ICs5MSw4IEBAIHZvaWQgSlNXZWJBc3NlbWJseUNvZGVCbG9j
azo6dmlzaXRDaGlsZHIKICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0
b3IpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNXZWJBc3NlbWJseUNvZGVCbG9jayk7
CisKIHZvaWQgSlNXZWJBc3NlbWJseUNvZGVCbG9jazo6ZmluYWxpemVVbmNvbmRpdGlvbmFsbHko
Vk0mIHZtKQogewogICAgIGZvciAoYXV0byBpdGVyID0gbV9jYWxsTGlua0luZm9zLmJlZ2luKCk7
ICEhaXRlcjsgKytpdGVyKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNX
ZWJBc3NlbWJseUNvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suaAkocmV2aXNpb24gMjcyNzEwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9jay5oCSh3
b3JraW5nIGNvcHkpCkBAIC04Niw3ICs4Niw3IEBAIHByaXZhdGU6CiAgICAgREVDTEFSRV9FWFBP
UlRfSU5GTzsKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNEZXN0cnVjdGlvbiA9IHRy
dWU7CiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKLSAgICBzdGF0aWMgdm9pZCB2
aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9D
SElMRFJFTjsKIAogICAgIFJlZjxXYXNtOjpDb2RlQmxvY2s+IG1fY29kZUJsb2NrOwogICAgIFZl
Y3RvcjxNYWNyb0Fzc2VtYmxlckNvZGVSZWY8V2FzbUVudHJ5UHRyVGFnPj4gbV93YXNtVG9KU0V4
aXRTdHViczsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1i
bHlHbG9iYWwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L0pTV2ViQXNzZW1ibHlHbG9iYWwuY3BwCShyZXZpc2lvbiAyNzI3MTApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5R2xvYmFsLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNzEsNyArNzEsOCBAQCB2b2lkIEpTV2ViQXNzZW1ibHlHbG9iYWw6OmRlc3Ryb3koSlND
ZWxsCiAgICAgc3RhdGljX2Nhc3Q8SlNXZWJBc3NlbWJseUdsb2JhbCo+KGNlbGwpLT5KU1dlYkFz
c2VtYmx5R2xvYmFsOjp+SlNXZWJBc3NlbWJseUdsb2JhbCgpOwogfQogCi12b2lkIEpTV2ViQXNz
ZW1ibHlHbG9iYWw6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlz
aXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTV2ViQXNzZW1ibHlHbG9i
YWw6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsK
ICAgICBKU1dlYkFzc2VtYmx5R2xvYmFsKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTV2ViQXNzZW1i
bHlHbG9iYWwqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmpl
Y3QsIGluZm8oKSk7CkBAIC04MCw2ICs4MSw4IEBAIHZvaWQgSlNXZWJBc3NlbWJseUdsb2JhbDo6
dmlzaXRDaGlsZHJlbigKICAgICB0aGlzT2JqZWN0LT5nbG9iYWwoKS0+dmlzaXRBZ2dyZWdhdGUo
dmlzaXRvcik7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU1dlYkFzc2VtYmx5R2xvYmFs
KTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkp
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5R2xvYmFs
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3Nl
bWJseUdsb2JhbC5oCShyZXZpc2lvbiAyNzI3MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9qcy9KU1dlYkFzc2VtYmx5R2xvYmFsLmgJKHdvcmtpbmcgY29weSkKQEAgLTU5LDcgKzU5
LDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBKU1dlYkFzc2VtYmx5R2xvYmFsKFZNJiwgU3Ry
dWN0dXJlKiwgUmVmPFdhc206Okdsb2JhbD4mJik7CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihW
TSYpOwotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3Im
KTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgUmVmPFdhc206Okdsb2JhbD4g
bV9nbG9iYWw7CiB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJB
c3NlbWJseUluc3RhbmNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuY3BwCShyZXZpc2lvbiAyNzI3MTApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC03Myw3ICs3Myw4IEBAIHZvaWQgSlNXZWJBc3NlbWJseUluc3RhbmNl
OjpkZXN0cm95KEpTQ2UKICAgICBzdGF0aWNfY2FzdDxKU1dlYkFzc2VtYmx5SW5zdGFuY2UqPihj
ZWxsKS0+SlNXZWJBc3NlbWJseUluc3RhbmNlOjp+SlNXZWJBc3NlbWJseUluc3RhbmNlKCk7CiB9
CiAKLXZvaWQgSlNXZWJBc3NlbWJseUluc3RhbmNlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2Vs
bCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9p
ZCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwg
VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTV2Vi
QXNzZW1ibHlJbnN0YW5jZSo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMo
dGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTEwMiw2ICsxMDMsOCBAQCB2b2lkIEpTV2ViQXNzZW1i
bHlJbnN0YW5jZTo6dmlzaXRDaGlsZHJlCiAgICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVy
ZWQod3JhcHBlci5nZXQoKSk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU1dlYkFzc2Vt
Ymx5SW5zdGFuY2UpOworCiB2b2lkIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6ZmluYWxpemVDcmVh
dGlvbihWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZjxXYXNtOjpDb2Rl
QmxvY2s+JiYgd2FzbUNvZGVCbG9jaywgSlNPYmplY3QqIGltcG9ydE9iamVjdCwgV2FzbTo6Q3Jl
YXRpb25Nb2RlIGNyZWF0aW9uTW9kZSkKIHsKICAgICBtX2luc3RhbmNlLT5maW5hbGl6ZUNyZWF0
aW9uKHRoaXMsIHdhc21Db2RlQmxvY2suY29weVJlZigpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5oCShyZXZp
c2lvbiAyNzI3MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2Vt
Ymx5SW5zdGFuY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMTA1LDcgKzEwNSw3IEBAIHB1YmxpYzoK
IHByaXZhdGU6CiAgICAgSlNXZWJBc3NlbWJseUluc3RhbmNlKFZNJiwgU3RydWN0dXJlKiwgUmVm
PFdhc206Okluc3RhbmNlPiYmKTsKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgSlNXZWJB
c3NlbWJseU1vZHVsZSosIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkKik7Ci0gICAgc3RhdGljIHZv
aWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklT
SVRfQ0hJTERSRU47CiAKICAgICBSZWY8V2FzbTo6SW5zdGFuY2U+IG1faW5zdGFuY2U7CiAgICAg
Vk0qIG1fdm07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2Vt
Ymx5TWVtb3J5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9KU1dlYkFzc2VtYmx5TWVtb3J5LmNwcAkocmV2aXNpb24gMjcyNzEwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1lbW9yeS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE1OSw3ICsxNTksOCBAQCB2b2lkIEpTV2ViQXNzZW1ibHlNZW1vcnk6OmRlc3Ryb3ko
SlNDZWxsCiAgICAgbWVtb3J5LT5KU1dlYkFzc2VtYmx5TWVtb3J5Ojp+SlNXZWJBc3NlbWJseU1l
bW9yeSgpOwogfQogCi12b2lkIEpTV2ViQXNzZW1ibHlNZW1vcnk6OnZpc2l0Q2hpbGRyZW4oSlND
ZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0
b3I+Cit2b2lkIEpTV2ViQXNzZW1ibHlNZW1vcnk6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCog
Y2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0
PEpTV2ViQXNzZW1ibHlNZW1vcnkqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVS
SVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC0xNjksNiArMTcwLDggQEAgdm9pZCBKU1dlYkFz
c2VtYmx5TWVtb3J5Ojp2aXNpdENoaWxkcmVuKAogICAgIHZpc2l0b3IucmVwb3J0RXh0cmFNZW1v
cnlWaXNpdGVkKHRoaXNPYmplY3QtPm1lbW9yeSgpLnNpemUoKSk7CiB9CiAKK0RFRklORV9WSVNJ
VF9DSElMRFJFTihKU1dlYkFzc2VtYmx5TWVtb3J5KTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAK
ICNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TWVtb3J5LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1lbW9yeS5oCShyZXZpc2lvbiAyNzI3
MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TWVtb3J5
LmgJKHdvcmtpbmcgY29weSkKQEAgLTYzLDcgKzYzLDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAg
ICBKU1dlYkFzc2VtYmx5TWVtb3J5KFZNJiwgU3RydWN0dXJlKik7CiAgICAgdm9pZCBmaW5pc2hD
cmVhdGlvbihWTSYpOwotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xv
dFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgUmVmPFdhc206
Ok1lbW9yeT4gbV9tZW1vcnk7CiAgICAgV3JpdGVCYXJyaWVyPEpTQXJyYXlCdWZmZXI+IG1fYnVm
ZmVyV3JhcHBlcjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNz
ZW1ibHlNb2R1bGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuY3BwCShyZXZpc2lvbiAyNzI3MTApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTI0LDcgKzEyNCw4IEBAIHZvaWQgSlNXZWJBc3NlbWJseU1vZHVsZTo6c2V0Q29k
ZUJsb2NrKFYKICAgICBtX2NvZGVCbG9ja3Nbc3RhdGljX2Nhc3Q8c2l6ZV90Pihtb2RlKV0uc2V0
KHZtLCB0aGlzLCBjb2RlQmxvY2spOwogfQogCi12b2lkIEpTV2ViQXNzZW1ibHlNb2R1bGU6OnZp
c2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRl
PHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTV2ViQXNzZW1ibHlNb2R1bGU6OnZpc2l0Q2hpbGRy
ZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU1dlYkFzc2Vt
Ymx5TW9kdWxlKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTV2ViQXNzZW1ibHlNb2R1bGUqPihjZWxs
KTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBA
IC0xMzUsNiArMTM2LDggQEAgdm9pZCBKU1dlYkFzc2VtYmx5TW9kdWxlOjp2aXNpdENoaWxkcmVu
KAogICAgICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2NvZGVCbG9ja3NbaV0pOwog
fQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNXZWJBc3NlbWJseU1vZHVsZSk7CisKIH0gLy8g
bmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUu
aAkocmV2aXNpb24gMjcyNzEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNX
ZWJBc3NlbWJseU1vZHVsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC04MCw3ICs4MCw3IEBAIHByaXZh
dGU6CiAKICAgICBKU1dlYkFzc2VtYmx5TW9kdWxlKFZNJiwgU3RydWN0dXJlKiwgUmVmPFdhc206
Ok1vZHVsZT4mJik7CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOwotICAgIHN0YXRpYyB2
b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJ
U0lUX0NISUxEUkVOOwogCiAgICAgUmVmPFdhc206Ok1vZHVsZT4gbV9tb2R1bGU7CiAgICAgV3Jp
dGVCYXJyaWVyPFN5bWJvbFRhYmxlPiBtX2V4cG9ydFN5bWJvbFRhYmxlOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseVRhYmxlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5VGFibGUuY3Bw
CShyZXZpc2lvbiAyNzI3MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dl
YkFzc2VtYmx5VGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Miw3ICs3Miw4IEBAIHZvaWQg
SlNXZWJBc3NlbWJseVRhYmxlOjpkZXN0cm95KEpTQ2VsbCoKICAgICBzdGF0aWNfY2FzdDxKU1dl
YkFzc2VtYmx5VGFibGUqPihjZWxsKS0+SlNXZWJBc3NlbWJseVRhYmxlOjp+SlNXZWJBc3NlbWJs
eVRhYmxlKCk7CiB9CiAKLXZvaWQgSlNXZWJBc3NlbWJseVRhYmxlOjp2aXNpdENoaWxkcmVuKEpT
Q2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNp
dG9yPgordm9pZCBKU1dlYkFzc2VtYmx5VGFibGU6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCog
Y2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU1dlYkFzc2VtYmx5VGFibGUqIHRoaXNP
YmplY3QgPSBqc0Nhc3Q8SlNXZWJBc3NlbWJseVRhYmxlKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dD
X09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtODEsNiArODIsOCBAQCB2
b2lkIEpTV2ViQXNzZW1ibHlUYWJsZTo6dmlzaXRDaGlsZHJlbihKCiAgICAgdGhpc09iamVjdC0+
dGFibGUoKS0+dmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7CiB9CiAKK0RFRklORV9WSVNJVF9DSElM
RFJFTihKU1dlYkFzc2VtYmx5VGFibGUpOworCiBib29sIEpTV2ViQXNzZW1ibHlUYWJsZTo6Z3Jv
dyh1aW50MzJfdCBkZWx0YSwgSlNWYWx1ZSBkZWZhdWx0VmFsdWUpCiB7CiAgICAgaWYgKGRlbHRh
ID09IDApCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5
VGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dl
YkFzc2VtYmx5VGFibGUuaAkocmV2aXNpb24gMjcyNzEwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvSlNXZWJBc3NlbWJseVRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTcwLDgg
KzcwLDggQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBKU1dlYkFzc2VtYmx5VGFibGUoVk0mLCBT
dHJ1Y3R1cmUqLCBSZWY8V2FzbTo6VGFibGU+JiYpOwogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24o
Vk0mKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9y
Jik7Ci0KKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOworLy8KICAgICBSZWY8V2FzbTo6VGFi
bGU+IG1fdGFibGU7CiB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9X
ZWJBc3NlbWJseUZ1bmN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmNwcAkocmV2aXNpb24gMjcyNzEwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQ1Miw3ICs0NTIsOCBAQCBXZWJBc3NlbWJseUZ1bmN0aW9uOjpXZWJB
c3NlbWJseUZ1bmN0aW9uCiAgICAgLCBtX2ltcG9ydGFibGVGdW5jdGlvbiB7IHNpZ25hdHVyZUlu
ZGV4LCB3YXNtVG9XYXNtRW50cnlwb2ludExvYWRMb2NhdGlvbiB9CiB7IH0KIAotdm9pZCBXZWJB
c3NlbWJseUZ1bmN0aW9uOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3Im
IHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBXZWJBc3NlbWJseUZ1
bmN0aW9uOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3Ip
CiB7CiAgICAgV2ViQXNzZW1ibHlGdW5jdGlvbiogdGhpc09iamVjdCA9IGpzQ2FzdDxXZWJBc3Nl
bWJseUZ1bmN0aW9uKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlz
T2JqZWN0LCBpbmZvKCkpOwpAQCAtNDYxLDYgKzQ2Miw4IEBAIHZvaWQgV2ViQXNzZW1ibHlGdW5j
dGlvbjo6dmlzaXRDaGlsZHJlbigKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2pz
VG9XYXNtSUNDYWxsZWUpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oV2ViQXNzZW1ibHlG
dW5jdGlvbik7CisKIHZvaWQgV2ViQXNzZW1ibHlGdW5jdGlvbjo6ZGVzdHJveShKU0NlbGwqIGNl
bGwpCiB7CiAgICAgc3RhdGljX2Nhc3Q8V2ViQXNzZW1ibHlGdW5jdGlvbio+KGNlbGwpLT5XZWJB
c3NlbWJseUZ1bmN0aW9uOjp+V2ViQXNzZW1ibHlGdW5jdGlvbigpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uaAkocmV2
aXNpb24gMjcyNzEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1i
bHlGdW5jdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC04Niw3ICs4Niw3IEBAIHB1YmxpYzoKICAg
ICBXYXNtOjpJbnN0YW5jZSogcHJldmlvdXNJbnN0YW5jZShDYWxsRnJhbWUqKTsKIAogcHJpdmF0
ZToKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7
CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKICAgICBXZWJBc3NlbWJseUZ1bmN0aW9uKFZN
JiwgTmF0aXZlRXhlY3V0YWJsZSosIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKiwgV2FzbTo6
Q2FsbGVlJiBqc0VudHJ5cG9pbnQsIFdhc21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rpb246OkxvYWRM
b2NhdGlvbiBlbnRyeXBvaW50TG9hZExvY2F0aW9uLCBXYXNtOjpTaWduYXR1cmVJbmRleCk7CiAK
ICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4ganNDYWxsRW50cnlwb2lu
dFNsb3coKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5
RnVuY3Rpb25CYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uQmFzZS5jcHAJKHJldmlzaW9uIDI3MjcxMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb25CYXNlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDEsNyArNDEsOCBAQCBXZWJBc3NlbWJseUZ1bmN0aW9uQmFzZTo6
V2ViQXNzZW1ibHlGdW5jCiAgICAgOiBCYXNlKHZtLCBleGVjdXRhYmxlLCBnbG9iYWxPYmplY3Qs
IHN0cnVjdHVyZSkKIHsgfQogCi12b2lkIFdlYkFzc2VtYmx5RnVuY3Rpb25CYXNlOjp2aXNpdENo
aWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBl
bmFtZSBWaXNpdG9yPgordm9pZCBXZWJBc3NlbWJseUZ1bmN0aW9uQmFzZTo6dmlzaXRDaGlsZHJl
bkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFdlYkFzc2VtYmx5
RnVuY3Rpb25CYXNlKiB0aGlzT2JqZWN0ID0ganNDYXN0PFdlYkFzc2VtYmx5RnVuY3Rpb25CYXNl
Kj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZv
KCkpOwpAQCAtNDksNiArNTAsOCBAQCB2b2lkIFdlYkFzc2VtYmx5RnVuY3Rpb25CYXNlOjp2aXNp
dENoaWxkCiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9pbnN0YW5jZSk7CiB9CiAK
K0RFRklORV9WSVNJVF9DSElMRFJFTihXZWJBc3NlbWJseUZ1bmN0aW9uQmFzZSk7CisKIHZvaWQg
V2ViQXNzZW1ibHlGdW5jdGlvbkJhc2U6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgTmF0aXZlRXhl
Y3V0YWJsZSogZXhlY3V0YWJsZSwgdW5zaWduZWQgbGVuZ3RoLCBjb25zdCBTdHJpbmcmIG5hbWUs
IEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogaW5zdGFuY2UpCiB7CiAgICAgQmFzZTo6ZmluaXNoQ3Jl
YXRpb24odm0sIGV4ZWN1dGFibGUsIGxlbmd0aCwgbmFtZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uQmFzZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb25CYXNlLmgJ
KHJldmlzaW9uIDI3MjcxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFz
c2VtYmx5RnVuY3Rpb25CYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDcgKzQ2LDcgQEAgcHVi
bGljOgogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZJbnN0YW5jZSgpIHsgcmV0dXJuIE9C
SkVDVF9PRkZTRVRPRihXZWJBc3NlbWJseUZ1bmN0aW9uQmFzZSwgbV9pbnN0YW5jZSk7IH0KIAog
cHJvdGVjdGVkOgotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZp
c2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogICAgIHZvaWQgZmluaXNoQ3Jl
YXRpb24oVk0mLCBOYXRpdmVFeGVjdXRhYmxlKiwgdW5zaWduZWQgbGVuZ3RoLCBjb25zdCBTdHJp
bmcmIG5hbWUsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSopOwogICAgIFdlYkFzc2VtYmx5RnVuY3Rp
b25CYXNlKFZNJiwgTmF0aXZlRXhlY3V0YWJsZSosIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJl
Kik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9k
dWxlUmVjb3JkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9XZWJBc3NlbWJseU1vZHVsZVJlY29yZC5jcHAJKHJldmlzaW9uIDI3MjcxMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNzgsNyArNzgsOCBAQCB2b2lkIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3Jk
OjpmaW5pc2hDcmVhCiAgICAgfQogfQogCi12b2lkIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjp2
aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0
ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6dmlzaXRD
aGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFdlYkFz
c2VtYmx5TW9kdWxlUmVjb3JkKiB0aGlzT2JqZWN0ID0ganNDYXN0PFdlYkFzc2VtYmx5TW9kdWxl
UmVjb3JkKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0
LCBpbmZvKCkpOwpAQCAtODgsNiArODksOCBAQCB2b2lkIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3Jk
Ojp2aXNpdENoaWxkCiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9leHBvcnRzT2Jq
ZWN0KTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKFdlYkFzc2VtYmx5TW9kdWxlUmVjb3Jk
KTsKKwogdm9pZCBXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6cHJlcGFyZUxpbmsoVk0mIHZtLCBK
U1dlYkFzc2VtYmx5SW5zdGFuY2UqIGluc3RhbmNlKQogewogICAgIFJFTEVBU0VfQVNTRVJUKCFt
X2luc3RhbmNlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2Vt
Ymx5TW9kdWxlUmVjb3JkLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuaAkocmV2aXNpb24gMjcyNzEwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuaAkod29y
a2luZyBjb3B5KQpAQCAtNjksNyArNjksNyBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBmaW5pc2hD
cmVhdGlvbihKU0dsb2JhbE9iamVjdCosIFZNJiwgY29uc3QgV2FzbTo6TW9kdWxlSW5mb3JtYXRp
b24mKTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0
b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgV3JpdGVCYXJyaWVyPEpT
V2ViQXNzZW1ibHlJbnN0YW5jZT4gbV9pbnN0YW5jZTsKICAgICBXcml0ZUJhcnJpZXI8SlNPYmpl
Y3Q+IG1fc3RhcnRGdW5jdGlvbjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L1dlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5jcHAJKHJldmlz
aW9uIDI3MjcxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5
V3JhcHBlckZ1bmN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjcsNyArNjcsOCBAQCBTdHJ1
Y3R1cmUqIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uOjpjCiAgICAgcmV0dXJuIFN0cnVjdHVy
ZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oSlNGdW5jdGlv
blR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKIH0KIAotdm9pZCBXZWJBc3NlbWJseVdy
YXBwZXJGdW5jdGlvbjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgV2ViQXNzZW1ibHlXcmFw
cGVyRnVuY3Rpb246OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlz
aXRvcikKIHsKICAgICBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbiogdGhpc09iamVjdCA9IGpz
Q2FzdDxXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbio+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19P
QkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTc2LDYgKzc3LDggQEAgdm9p
ZCBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbjo6dmlzaXRDaAogICAgIHZpc2l0b3IuYXBwZW5k
KHRoaXNPYmplY3QtPm1fZnVuY3Rpb24pOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oV2Vi
QXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24pOworCiBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oY2Fs
bFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpKQogewogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+
dm0oKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5V3Jh
cHBlckZ1bmN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
anMvV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uaAkocmV2aXNpb24gMjcyNzEwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uaAko
d29ya2luZyBjb3B5KQpAQCAtNTksNyArNTksNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIFdl
YkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uKFZNJiwgTmF0aXZlRXhlY3V0YWJsZSosIEpTR2xvYmFs
T2JqZWN0KiwgU3RydWN0dXJlKiwgV2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbik7CiAgICAg
dm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIE5hdGl2ZUV4ZWN1dGFibGUqLCB1bnNpZ25lZCBsZW5n
dGgsIGNvbnN0IFN0cmluZyYgbmFtZSwgSlNPYmplY3QqLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2Uq
KTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7
CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIFdyaXRlQmFycmllcjxKU09iamVj
dD4gbV9mdW5jdGlvbjsKICAgICAvLyBJdCdzIHNhZmUgdG8ganVzdCBob2xkIHRoZSByYXcgV2Fz
bVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbiBiZWNhdXNlIHdlIGhhdmUgYSByZWZlcmVuY2UKSW5k
ZXg6IFNvdXJjZS9XVEYvd3RmL0Fzc2VydGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
VEYvd3RmL0Fzc2VydGlvbnMuY3BwCShyZXZpc2lvbiAyNzI3MTApCisrKyBTb3VyY2UvV1RGL3d0
Zi9Bc3NlcnRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ2LDEyICsxNDYsMTIgQEAgc3Rh
dGljIHZvaWQgdnByaW50Zl9zdGRlcnJfY29tbW9uKGNvbnN0IAogICAgICAgICByZXR1cm47CiAg
ICAgfQogCi0jaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgdmFfbGlzdCBjb3B5T2ZBcmdzOwotICAg
IHZhX2NvcHkoY29weU9mQXJncywgYXJncyk7Ci0gICAgb3NfbG9nX3dpdGhfYXJncyhPU19MT0df
REVGQVVMVCwgT1NfTE9HX1RZUEVfREVGQVVMVCwgZm9ybWF0LCBjb3B5T2ZBcmdzLCBfX2J1aWx0
aW5fcmV0dXJuX2FkZHJlc3MoMCkpOwotICAgIHZhX2VuZChjb3B5T2ZBcmdzKTsKLSNlbmRpZgor
Ly8jaWYgUExBVEZPUk0oQ09DT0EpCisvLyAgICB2YV9saXN0IGNvcHlPZkFyZ3M7CisvLyAgICB2
YV9jb3B5KGNvcHlPZkFyZ3MsIGFyZ3MpOworLy8gICAgb3NfbG9nX3dpdGhfYXJncyhPU19MT0df
REVGQVVMVCwgT1NfTE9HX1RZUEVfREVGQVVMVCwgZm9ybWF0LCBjb3B5T2ZBcmdzLCBfX2J1aWx0
aW5fcmV0dXJuX2FkZHJlc3MoMCkpOworLy8gICAgdmFfZW5kKGNvcHlPZkFyZ3MpOworLy8jZW5k
aWYKIAogICAgIC8vIEZhbGwgdGhyb3VnaCB0byB3cml0ZSB0byBzdGRlcnIgaW4gdGhlIHNhbWUg
bWFubmVyIGFzIG90aGVyIHBsYXRmb3Jtcy4KIApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmNwcAkocmV2aXNpb24gMjcyNzEw
KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC03MjgsNyArNzI4LDggQEAgdm9pZCBJREJPYmplY3RTdG9yZTo6
cm9sbGJhY2tGb3JWZXJzaW9uQwogICAgIH0KIH0KIAotdm9pZCBJREJPYmplY3RTdG9yZTo6dmlz
aXRSZWZlcmVuY2VkSW5kZXhlcyhTbG90VmlzaXRvciYgdmlzaXRvcikgY29uc3QKK3RlbXBsYXRl
PHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIElEQk9iamVjdFN0b3JlOjp2aXNpdFJlZmVyZW5jZWRJ
bmRleGVzKFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0CiB7CiAgICAgTG9ja2VyPExvY2s+IGxvY2tl
cihtX3JlZmVyZW5jZWRJbmRleExvY2spOwogICAgIGZvciAoYXV0byYgaW5kZXggOiBtX3JlZmVy
ZW5jZWRJbmRleGVzLnZhbHVlcygpKQpAQCAtNzM3LDYgKzczOCw5IEBAIHZvaWQgSURCT2JqZWN0
U3RvcmU6OnZpc2l0UmVmZXJlbmNlZEluZGUKICAgICAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290
KGluZGV4LmdldCgpKTsKIH0KIAordGVtcGxhdGUgdm9pZCBJREJPYmplY3RTdG9yZTo6dmlzaXRS
ZWZlcmVuY2VkSW5kZXhlcyhBYnN0cmFjdFNsb3RWaXNpdG9yJikgY29uc3Q7Cit0ZW1wbGF0ZSB2
b2lkIElEQk9iamVjdFN0b3JlOjp2aXNpdFJlZmVyZW5jZWRJbmRleGVzKFNsb3RWaXNpdG9yJikg
Y29uc3Q7CisKIHZvaWQgSURCT2JqZWN0U3RvcmU6OnJlbmFtZVJlZmVyZW5jZWRJbmRleChJREJJ
bmRleCYgaW5kZXgsIGNvbnN0IFN0cmluZyYgbmV3TmFtZSkKIHsKICAgICBMT0coSW5kZXhlZERC
LCAiSURCT2JqZWN0U3RvcmU6OnJlbmFtZVJlZmVyZW5jZWRJbmRleCIpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5oCShyZXZp
c2lvbiAyNzI3MTApCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmpl
Y3RTdG9yZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDksNyArMTA5LDcgQEAgcHVibGljOgogICAg
IHZvaWQgcmVmKCk7CiAgICAgdm9pZCBkZXJlZigpOwogCi0gICAgdm9pZCB2aXNpdFJlZmVyZW5j
ZWRJbmRleGVzKEpTQzo6U2xvdFZpc2l0b3ImKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBWaXNpdG9yPiB2b2lkIHZpc2l0UmVmZXJlbmNlZEluZGV4ZXMoVmlzaXRvciYpIGNvbnN0Owog
ICAgIHZvaWQgcmVuYW1lUmVmZXJlbmNlZEluZGV4KElEQkluZGV4JiwgY29uc3QgU3RyaW5nJiBu
ZXdOYW1lKTsKIAogcHJpdmF0ZToKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQlRyYW5zYWN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5jcHAJKHJldmlzaW9uIDI3MjcxMCkKKysrIFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTQ1NSw3ICsxNDU1LDggQEAgdm9pZCBJREJUcmFuc2FjdGlvbjo6Y29ubmVj
dGlvbkNsb3NlZEZybwogICAgIGZpcmVPbkFib3J0KCk7CiB9CiAKLXZvaWQgSURCVHJhbnNhY3Rp
b246OnZpc2l0UmVmZXJlbmNlZE9iamVjdFN0b3JlcyhKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9y
KSBjb25zdAordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSURCVHJhbnNhY3Rpb246
OnZpc2l0UmVmZXJlbmNlZE9iamVjdFN0b3JlcyhWaXNpdG9yJiB2aXNpdG9yKSBjb25zdAogewog
ICAgIExvY2tlcjxMb2NrPiBsb2NrZXIobV9yZWZlcmVuY2VkT2JqZWN0U3RvcmVMb2NrKTsKICAg
ICBmb3IgKGF1dG8mIG9iamVjdFN0b3JlIDogbV9yZWZlcmVuY2VkT2JqZWN0U3RvcmVzLnZhbHVl
cygpKQpAQCAtMTQ2NCw2ICsxNDY1LDkgQEAgdm9pZCBJREJUcmFuc2FjdGlvbjo6dmlzaXRSZWZl
cmVuY2VkT2JqZQogICAgICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qob2JqZWN0U3RvcmUuZ2V0
KCkpOwogfQogCit0ZW1wbGF0ZSB2b2lkIElEQlRyYW5zYWN0aW9uOjp2aXNpdFJlZmVyZW5jZWRP
YmplY3RTdG9yZXMoSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBjb25zdDsKK3Rl
bXBsYXRlIHZvaWQgSURCVHJhbnNhY3Rpb246OnZpc2l0UmVmZXJlbmNlZE9iamVjdFN0b3JlcyhK
U0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKSBjb25zdDsKKwogdm9pZCBJREJUcmFuc2FjdGlvbjo6
aGFuZGxlUGVuZGluZ09wZXJhdGlvbnMoKQogewogICAgIEFTU0VSVChjYW5DdXJyZW50VGhyZWFk
QWNjZXNzVGhyZWFkTG9jYWxEYXRhKG1fZGF0YWJhc2UtPm9yaWdpblRocmVhZCgpKSk7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9u
LmgJKHJldmlzaW9uIDI3MjcxMCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQlRyYW5zYWN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0OSw3ICsxNDksNyBAQCBwdWJs
aWM6CiAKICAgICB2b2lkIGNvbm5lY3Rpb25DbG9zZWRGcm9tU2VydmVyKGNvbnN0IElEQkVycm9y
Jik7CiAKLSAgICB2b2lkIHZpc2l0UmVmZXJlbmNlZE9iamVjdFN0b3JlcyhKU0M6OlNsb3RWaXNp
dG9yJikgY29uc3Q7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCB2aXNpdFJl
ZmVyZW5jZWRPYmplY3RTdG9yZXMoVmlzaXRvciYpIGNvbnN0OwogCiAgICAgV0VCQ09SRV9FWFBP
UlQgc3RhdGljIHN0ZDo6YXRvbWljPHVuc2lnbmVkPiBudW1iZXJPZklEQlRyYW5zYWN0aW9uczsK
IApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0J1ZmZlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0J1ZmZl
ci5jcHAJKHJldmlzaW9uIDI3MjcxMCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVk
aW8vQXVkaW9CdWZmZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTQsMTIgKzE1NCwxNiBAQCBF
eGNlcHRpb25PcjxKU0M6OkpTVmFsdWU+IEF1ZGlvQnVmZmVyOjpnCiAgICAgcmV0dXJuIGNvbnN0
cnVjdEpTQXJyYXkoKTsKIH0KIAotdm9pZCBBdWRpb0J1ZmZlcjo6dmlzaXRDaGFubmVsV3JhcHBl
cnMoSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+
Cit2b2lkIEF1ZGlvQnVmZmVyOjp2aXNpdENoYW5uZWxXcmFwcGVycyhWaXNpdG9yJiB2aXNpdG9y
KQogewogICAgIGZvciAoYXV0byYgY2hhbm5lbFdyYXBwZXIgOiBtX2NoYW5uZWxXcmFwcGVycykK
ICAgICAgICAgY2hhbm5lbFdyYXBwZXIudmlzaXQodmlzaXRvcik7CiB9CiAKK3RlbXBsYXRlIHZv
aWQgQXVkaW9CdWZmZXI6OnZpc2l0Q2hhbm5lbFdyYXBwZXJzKEpTQzo6QWJzdHJhY3RTbG90Vmlz
aXRvciYpOwordGVtcGxhdGUgdm9pZCBBdWRpb0J1ZmZlcjo6dmlzaXRDaGFubmVsV3JhcHBlcnMo
SlNDOjpTbG90VmlzaXRvciYpOworCiBSZWZQdHI8RmxvYXQzMkFycmF5PiBBdWRpb0J1ZmZlcjo6
Y2hhbm5lbERhdGEodW5zaWduZWQgY2hhbm5lbEluZGV4KQogewogICAgIGlmIChjaGFubmVsSW5k
ZXggPj0gbV9jaGFubmVscy5zaXplKCkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmF1ZGlvL0F1ZGlvQnVmZmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJhdWRpby9BdWRpb0J1ZmZlci5oCShyZXZpc2lvbiAyNzI3MTApCisrKyBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQnVmZmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTc1
LDcgKzc1LDcgQEAgcHVibGljOgogCiAgICAgc2l6ZV90IG1lbW9yeUNvc3QoKSBjb25zdDsKIAot
ICAgIHZvaWQgdmlzaXRDaGFubmVsV3JhcHBlcnMoSlNDOjpTbG90VmlzaXRvciYpOworICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgdmlzaXRDaGFubmVsV3JhcHBlcnMoVmlzaXRv
ciYpOwogICAgIAogcHJpdmF0ZToKICAgICBBdWRpb0J1ZmZlcih1bnNpZ25lZCBudW1iZXJPZkNo
YW5uZWxzLCBzaXplX3QgbGVuZ3RoLCBmbG9hdCBzYW1wbGVSYXRlLCBMZWdhY3lQcmV2ZW50RGV0
YWNoaW5nID0gTGVnYWN5UHJldmVudERldGFjaGluZzo6Tm8pOwpJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvRE9NR0NPdXRwdXRDb25zdHJhaW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9ET01HQ091dHB1dENvbnN0cmFpbnQuY3BwCShyZXZp
c2lvbiAyNzI3MTApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9ET01HQ091dHB1dENv
bnN0cmFpbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OSw3ICs0OSw3IEBAIERPTUdDT3V0cHV0
Q29uc3RyYWludDo6fkRPTUdDT3V0cHV0Q29uc3QKIHsKIH0KIAotdm9pZCBET01HQ091dHB1dENv
bnN0cmFpbnQ6OmV4ZWN1dGVJbXBsKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBET01HQ091
dHB1dENvbnN0cmFpbnQ6OmV4ZWN1dGVJbXBsKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3Ip
CiB7CiAgICAgSGVhcCYgaGVhcCA9IG1fdm0uaGVhcDsKICAgICAKQEAgLTYwLDggKzYwLDggQEAg
dm9pZCBET01HQ091dHB1dENvbnN0cmFpbnQ6OmV4ZWN1dGVJbXBsKAogICAgIAogICAgIG1fY2xp
ZW50RGF0YS5mb3JFYWNoT3V0cHV0Q29uc3RyYWludFNwYWNlKAogICAgICAgICBbJl0gKFN1YnNw
YWNlJiBzdWJzcGFjZSkgewotICAgICAgICAgICAgYXV0byBmdW5jID0gW10gKFNsb3RWaXNpdG9y
JiB2aXNpdG9yLCBIZWFwQ2VsbCogaGVhcENlbGwsIEhlYXBDZWxsOjpLaW5kKSB7Ci0gICAgICAg
ICAgICAgICAgU2V0Um9vdE1hcmtSZWFzb25TY29wZSByb290U2NvcGUodmlzaXRvciwgU2xvdFZp
c2l0b3I6OlJvb3RNYXJrUmVhc29uOjpET01HQ091dHB1dCk7CisgICAgICAgICAgICBhdXRvIGZ1
bmMgPSBbXSAoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvciwgSGVhcENlbGwqIGhlYXBDZWxs
LCBIZWFwQ2VsbDo6S2luZCkgeworICAgICAgICAgICAgICAgIFNldFJvb3RNYXJrUmVhc29uU2Nv
cGUgcm9vdFNjb3BlKHZpc2l0b3IsIEFic3RyYWN0U2xvdFZpc2l0b3I6OlJvb3RNYXJrUmVhc29u
OjpET01HQ091dHB1dCk7CiAgICAgICAgICAgICAgICAgSlNDZWxsKiBjZWxsID0gc3RhdGljX2Nh
c3Q8SlNDZWxsKj4oaGVhcENlbGwpOwogICAgICAgICAgICAgICAgIGNlbGwtPm1ldGhvZFRhYmxl
KHZpc2l0b3Iudm0oKSktPnZpc2l0T3V0cHV0Q29uc3RyYWludHMoY2VsbCwgdmlzaXRvcik7CiAg
ICAgICAgICAgICB9OwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvRE9NR0NPdXRw
dXRDb25zdHJhaW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
RE9NR0NPdXRwdXRDb25zdHJhaW50LmgJKHJldmlzaW9uIDI3MjcxMCkKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0RPTUdDT3V0cHV0Q29uc3RyYWludC5oCSh3b3JraW5nIGNvcHkpCkBA
IC00Miw3ICs0Miw3IEBAIHB1YmxpYzoKICAgICB+RE9NR0NPdXRwdXRDb25zdHJhaW50KCk7CiAg
ICAgCiBwcm90ZWN0ZWQ6Ci0gICAgdm9pZCBleGVjdXRlSW1wbChKU0M6OlNsb3RWaXNpdG9yJikg
b3ZlcnJpZGU7CisgICAgdm9pZCBleGVjdXRlSW1wbChKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3Im
KSBvdmVycmlkZTsKIAogcHJpdmF0ZToKICAgICBKU0M6OlZNJiBtX3ZtOwpJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNBYm9ydENvbnRyb2xsZXJDdXN0b20uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQWJvcnRDb250cm9sbGVyQ3VzdG9t
LmNwcAkocmV2aXNpb24gMjcyNzEwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNB
Ym9ydENvbnRyb2xsZXJDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw5ICsyOCwxMyBA
QAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgSlNBYm9ydENvbnRyb2xsZXI6OnZpc2l0
QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0
eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0Fib3J0Q29udHJvbGxlcjo6dmlzaXRBZGRpdGlvbmFs
Q2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qo
JndyYXBwZWQoKS5zaWduYWwoKSk7CiB9CiAKK3RlbXBsYXRlIHZvaWQgSlNBYm9ydENvbnRyb2xs
ZXI6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpOwor
dGVtcGxhdGUgdm9pZCBKU0Fib3J0Q29udHJvbGxlcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4o
SlNDOjpTbG90VmlzaXRvciYpOworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Fib3J0U2lnbmFsQ3VzdG9tLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Fib3J0U2lnbmFsQ3VzdG9tLmNwcAko
cmV2aXNpb24gMjcyNzEwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNBYm9ydFNp
Z25hbEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDcgQEAKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi1ib29sIEpTQWJvcnRTaWduYWxPd25lcjo6aXNSZWFjaGFibGVGcm9t
T3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBKU0M6
OlNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQorYm9vbCBKU0Fib3J0
U2lnbmFsT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6
VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9y
LCBjb25zdCBjaGFyKiogcmVhc29uKQogewogICAgIGF1dG8mIGFib3J0U2lnbmFsID0gSlNDOjpq
c0Nhc3Q8SlNBYm9ydFNpZ25hbCo+KGhhbmRsZS5zbG90KCktPmFzQ2VsbCgpKS0+d3JhcHBlZCgp
OwogICAgIGlmIChhYm9ydFNpZ25hbC5pc0ZpcmluZ0V2ZW50TGlzdGVuZXJzKCkpIHsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXR0ckN1c3RvbS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNBdHRyQ3VzdG9tLmNwcAkocmV2aXNpb24g
MjcyNzEwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNBdHRyQ3VzdG9tLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzMsMTAgKzMzLDE0IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAotdm9pZCBKU0F0dHI6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3Im
IHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0F0dHI6OnZpc2l0
QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgaWYgKEVsZW1lbnQq
IGVsZW1lbnQgPSB3cmFwcGVkKCkub3duZXJFbGVtZW50KCkpCiAgICAgICAgIHZpc2l0b3IuYWRk
T3BhcXVlUm9vdChyb290KGVsZW1lbnQpKTsKIH0KIAordGVtcGxhdGUgdm9pZCBKU0F0dHI6OnZp
c2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxh
dGUgdm9pZCBKU0F0dHI6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3Im
KTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNBdWRpb0J1ZmZlckN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNBdWRpb0J1ZmZlckN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjcxMCkK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXVkaW9CdWZmZXJDdXN0b20uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zMSwxMSArMzEsMTUgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVz
aW5nIG5hbWVzcGFjZSBKU0M7CiAKLXZvaWQgSlNBdWRpb0J1ZmZlcjo6dmlzaXRBZGRpdGlvbmFs
Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
Pgordm9pZCBKU0F1ZGlvQnVmZmVyOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2
aXNpdG9yKQogewogICAgIHdyYXBwZWQoKS52aXNpdENoYW5uZWxXcmFwcGVycyh2aXNpdG9yKTsK
IH0KIAordGVtcGxhdGUgdm9pZCBKU0F1ZGlvQnVmZmVyOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJl
bihBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTQXVkaW9CdWZmZXI6OnZp
c2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CisKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShXRUJfQVVESU8pCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0F1ZGlvVHJhY2tDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXVkaW9UcmFja0N1c3RvbS5jcHAJKHJldmlzaW9uIDI3
MjcxMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXVkaW9UcmFja0N1c3RvbS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDExICszNSwxNSBAQAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAotdm9pZCBKU0F1ZGlvVHJhY2s6OnZpc2l0QWRkaXRp
b25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlz
aXRvcj4KK3ZvaWQgSlNBdWRpb1RyYWNrOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9y
JiB2aXNpdG9yKQogewogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChyb290KCZ3cmFwcGVkKCkp
KTsKIH0KIAordGVtcGxhdGUgdm9pZCBKU0F1ZGlvVHJhY2s6OnZpc2l0QWRkaXRpb25hbENoaWxk
cmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNBdWRpb1RyYWNrOjp2
aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYpOworCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCiAKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNBdWRp
b1RyYWNrTGlzdEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNBdWRpb1RyYWNrTGlzdEN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjcxMCkKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXVkaW9UcmFja0xpc3RDdXN0b20uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNiwxMSArMzYsMTUgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5n
IG5hbWVzcGFjZSBKU0M7CiAKLXZvaWQgSlNBdWRpb1RyYWNrTGlzdDo6dmlzaXRBZGRpdGlvbmFs
Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
Pgordm9pZCBKU0F1ZGlvVHJhY2tMaXN0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9y
JiB2aXNpdG9yKQogewogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChyb290KHdyYXBwZWQoKS5l
bGVtZW50KCkpKTsKIH0KIAordGVtcGxhdGUgdm9pZCBKU0F1ZGlvVHJhY2tMaXN0Ojp2aXNpdEFk
ZGl0aW9uYWxDaGlsZHJlbihBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpT
QXVkaW9UcmFja0xpc3Q6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CisK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0F1ZGlvV29ya2xldFByb2Nlc3NvckN1c3RvbS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNBdWRpb1dvcmtsZXRQcm9jZXNzb3JDdXN0
b20uY3BwCShyZXZpc2lvbiAyNzI3MTApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0F1ZGlvV29ya2xldFByb2Nlc3NvckN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcg
KzMxLDggQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKLXZv
aWQgSlNBdWRpb1dvcmtsZXRQcm9jZXNzb3I6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNBdWRp
b1dvcmtsZXRQcm9jZXNzb3I6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0
b3IpCiB7CiAgICAgYXV0byYgcHJvY2Vzc29yID0gd3JhcHBlZCgpOwogICAgIHByb2Nlc3Nvci5q
c0lucHV0c1dyYXBwZXIoKS52aXNpdCh2aXNpdG9yKTsKQEAgLTM5LDYgKzQwLDkgQEAgdm9pZCBK
U0F1ZGlvV29ya2xldFByb2Nlc3Nvcjo6dmlzaXRBZGRpdAogICAgIHByb2Nlc3Nvci5qc1BhcmFt
VmFsdWVzV3JhcHBlcigpLnZpc2l0KHZpc2l0b3IpOwogfQogCit0ZW1wbGF0ZSB2b2lkIEpTQXVk
aW9Xb3JrbGV0UHJvY2Vzc29yOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihBYnN0cmFjdFNsb3RW
aXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTQXVkaW9Xb3JrbGV0UHJvY2Vzc29yOjp2aXNpdEFk
ZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYpOworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CiAKICNlbmRpZiAvLyBFTkFCTEUoV0VCX0FVRElPKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNDU1NSdWxlQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0NTU1J1bGVDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI3MTApCisrKyBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NTU1J1bGVDdXN0b20uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC01MSwxMSArNTEsMTUgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVz
cGFjZSBKU0M7CiAKLXZvaWQgSlNDU1NSdWxlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90
VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTQ1NT
UnVsZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB2
aXNpdG9yLmFkZE9wYXF1ZVJvb3Qocm9vdCgmd3JhcHBlZCgpKSk7CiB9CiAKK3RlbXBsYXRlIHZv
aWQgSlNDU1NSdWxlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihBYnN0cmFjdFNsb3RWaXNpdG9y
Jik7Cit0ZW1wbGF0ZSB2b2lkIEpTQ1NTUnVsZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xv
dFZpc2l0b3ImKTsKKwogSlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTR2xvYmFsT2JqZWN0Kiwg
SlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmPENTU1J1bGU+JiYgcnVsZSkKIHsK
ICAgICBzd2l0Y2ggKHJ1bGUtPnR5cGUoKSkgewpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNDU1NSdWxlTGlzdEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNDU1NSdWxlTGlzdEN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjcxMCkK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ1NTUnVsZUxpc3RDdXN0b20uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zNiw3ICszNiw3IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2lu
ZyBuYW1lc3BhY2UgSlNDOwogCi1ib29sIEpTQ1NTUnVsZUxpc3RPd25lcjo6aXNSZWFjaGFibGVG
cm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBT
bG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikKK2Jvb2wgSlNDU1NSdWxl
TGlzdE93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVu
a25vd24+IGhhbmRsZSwgdm9pZCosIEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0
IGNoYXIqKiByZWFzb24pCiB7CiAgICAgSlNDU1NSdWxlTGlzdCoganNDU1NSdWxlTGlzdCA9IGpz
Q2FzdDxKU0NTU1J1bGVMaXN0Kj4oaGFuZGxlLnNsb3QoKS0+YXNDZWxsKCkpOwogICAgIGlmICgh
anNDU1NSdWxlTGlzdC0+aGFzQ3VzdG9tUHJvcGVydGllcyhqc0NTU1J1bGVMaXN0LT52bSgpKSkK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ1NTU3R5bGVEZWNsYXJhdGlvbkN1
c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDU1NT
dHlsZURlY2xhcmF0aW9uQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcyNzEwKQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNDU1NTdHlsZURlY2xhcmF0aW9uQ3VzdG9tLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTEsOSArNTEsMTMgQEAgdm9pZCogcm9vdChDU1NTdHlsZURlY2xhcmF0aW9u
KiBzdHlsZSkKICAgICByZXR1cm4gc3R5bGU7CiB9CiAKLXZvaWQgSlNDU1NTdHlsZURlY2xhcmF0
aW9uOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBs
YXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTQ1NTU3R5bGVEZWNsYXJhdGlvbjo6dmlzaXRB
ZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB2aXNpdG9yLmFkZE9w
YXF1ZVJvb3Qocm9vdCgmd3JhcHBlZCgpKSk7CiB9CiAKK3RlbXBsYXRlIHZvaWQgSlNDU1NTdHls
ZURlY2xhcmF0aW9uOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihBYnN0cmFjdFNsb3RWaXNpdG9y
Jik7Cit0ZW1wbGF0ZSB2b2lkIEpTQ1NTU3R5bGVEZWNsYXJhdGlvbjo6dmlzaXRBZGRpdGlvbmFs
Q2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDog
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDYWxsYmFja0RhdGEuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2FsbGJhY2tEYXRhLmNwcAkocmV2aXNp
b24gMjcyNzEwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDYWxsYmFja0RhdGEu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NSwxMiArOTUsMTYgQEAgSlNWYWx1ZSBKU0NhbGxiYWNr
RGF0YTo6aW52b2tlQ2FsbGJhY2soSgogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQgSlND
YWxsYmFja0RhdGFXZWFrOjp2aXNpdEpTRnVuY3Rpb24oSlNDOjpTbG90VmlzaXRvciYgdmlzdG9y
KQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNDYWxsYmFja0RhdGFXZWFrOjp2
aXNpdEpTRnVuY3Rpb24oVmlzaXRvciYgdmlzaXRvcikKIHsKLSAgICB2aXN0b3IuYXBwZW5kKG1f
Y2FsbGJhY2spOworICAgIHZpc2l0b3IuYXBwZW5kKG1fY2FsbGJhY2spOwogfQogCi1ib29sIEpT
Q2FsbGJhY2tEYXRhV2Vhazo6V2Vha093bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhK
U0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0LCBTbG90VmlzaXRvciYgdmlz
aXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikKK3RlbXBsYXRlIHZvaWQgSlNDYWxsYmFja0RhdGFX
ZWFrOjp2aXNpdEpTRnVuY3Rpb24oSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0
ZSB2b2lkIEpTQ2FsbGJhY2tEYXRhV2Vhazo6dmlzaXRKU0Z1bmN0aW9uKEpTQzo6U2xvdFZpc2l0
b3ImKTsKKworYm9vbCBKU0NhbGxiYWNrRGF0YVdlYWs6OldlYWtPd25lcjo6aXNSZWFjaGFibGVG
cm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCwg
QWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikKIHsKICAg
ICBpZiAoVU5MSUtFTFkocmVhc29uKSkKICAgICAgICAgKnJlYXNvbiA9ICJDb250ZXh0IGlzIG9w
YXF1ZSByb290IjsgLy8gRklYTUU6IHdoYXQgaXMgdGhlIGNvbnRleHQuCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NhbGxiYWNrRGF0YS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2FsbGJhY2tEYXRhLmgJKHJldmlzaW9uIDI3MjcxMCkK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2FsbGJhY2tEYXRhLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTExMywxMSArMTEzLDExIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIEpTQ2Fs
bGJhY2tEYXRhOjppbnZva2VDYWxsYmFjaygqZ2xvYmFsT2JqZWN0LCBjYWxsYmFjaygpLCB0aGlz
VmFsdWUsIGFyZ3MsIGNhbGxiYWNrVHlwZSwgZnVuY3Rpb25OYW1lLCByZXR1cm5lZEV4Y2VwdGlv
bik7CiAgICAgfQogCi0gICAgdm9pZCB2aXNpdEpTRnVuY3Rpb24oSlNDOjpTbG90VmlzaXRvciYp
OworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgdmlzaXRKU0Z1bmN0aW9uKFZp
c2l0b3ImKTsKIAogcHJpdmF0ZToKICAgICBjbGFzcyBXZWFrT3duZXIgOiBwdWJsaWMgSlNDOjpX
ZWFrSGFuZGxlT3duZXIgewotICAgICAgICBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3Rz
KEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6U2xvdFZpc2l0
b3ImLCBjb25zdCBjaGFyKiopIG92ZXJyaWRlOworICAgICAgICBib29sIGlzUmVhY2hhYmxlRnJv
bU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIEpT
Qzo6QWJzdHJhY3RTbG90VmlzaXRvciYsIGNvbnN0IGNoYXIqKikgb3ZlcnJpZGU7CiAgICAgfTsK
ICAgICBXZWFrT3duZXIgbV93ZWFrT3duZXI7CiAgICAgSlNDOjpXZWFrPEpTQzo6SlNPYmplY3Q+
IG1fY2FsbGJhY2s7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyREN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRDdXN0b20uY3BwCShyZXZpc2lv
biAyNzI3MTApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyREN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0LDcgKzI0LDcgQEAKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi1ib29sIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJET3du
ZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4g
aGFuZGxlLCB2b2lkKiwgSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJl
YXNvbikKK2Jvb2wgSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRPd25lcjo6aXNSZWFjaGFibGVG
cm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBK
U0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCiB7
CiAgICAgaWYgKFVOTElLRUxZKHJlYXNvbikpCiAgICAgICAgICpyZWFzb24gPSAiQ2FudmFzIGlz
IG9wYXF1ZSByb290IjsKQEAgLTM0LDkgKzM0LDEzIEBAIGJvb2wgSlNDYW52YXNSZW5kZXJpbmdD
b250ZXh0MkRPd25lcjo6aXMKICAgICByZXR1cm4gdmlzaXRvci5jb250YWluc09wYXF1ZVJvb3Qo
cm9vdCk7CiB9CiAKLXZvaWQgSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnZpc2l0QWRkaXRp
b25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBWaXNpdG9yPgordm9pZCBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6dmlzaXRBZGRpdGlv
bmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJv
b3Qocm9vdCh3cmFwcGVkKCkuY2FudmFzKCkpKTsKIH0KIAordGVtcGxhdGUgdm9pZCBKU0NhbnZh
c1JlbmRlcmluZ0NvbnRleHQyRDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpBYnN0cmFj
dFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJik7CisKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9t
RXZlbnRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTQ3VzdG9tRXZlbnRDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI3MTApCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0N1c3RvbUV2ZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDIsMTAgKzQyLDE0IEBAIEpTQzo6SlNWYWx1ZSBKU0N1c3RvbUV2ZW50OjpkZXRhaWwoSlND
OjoKICAgICB9KTsKIH0KIAotdm9pZCBKU0N1c3RvbUV2ZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGls
ZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRv
cj4KK3ZvaWQgSlNDdXN0b21FdmVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYg
dmlzaXRvcikKIHsKICAgICB3cmFwcGVkKCkuZGV0YWlsKCkudmlzaXQodmlzaXRvcik7CiAgICAg
d3JhcHBlZCgpLmNhY2hlZERldGFpbCgpLnZpc2l0KHZpc2l0b3IpOwogfQogCit0ZW1wbGF0ZSB2
b2lkIEpTQ3VzdG9tRXZlbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6QWJzdHJhY3RT
bG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU0N1c3RvbUV2ZW50Ojp2aXNpdEFkZGl0aW9u
YWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJik7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQnVpbHRpbkNvbnN0cnVjdG9y
QmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01C
dWlsdGluQ29uc3RydWN0b3JCYXNlLmNwcAkocmV2aXNpb24gMjcyNzEwKQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNET01CdWlsdGluQ29uc3RydWN0b3JCYXNlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDUsNyArNDUsOCBAQCB2b2lkIEpTRE9NQnVpbHRpbkNvbnN0cnVjdG9yQmFz
ZTo6Y2FsbEZ1CiAgICAgSlNDOjpjYWxsKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAmZnVuY3Rpb24s
IGNhbGxEYXRhLCAmdGhpc09iamVjdCwgYXJndW1lbnRzKTsKIH0KIAotdm9pZCBKU0RPTUJ1aWx0
aW5Db25zdHJ1Y3RvckJhc2U6OnZpc2l0Q2hpbGRyZW4oSlNDOjpKU0NlbGwqIGNlbGwsIEpTQzo6
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBK
U0RPTUJ1aWx0aW5Db25zdHJ1Y3RvckJhc2U6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQzo6SlNDZWxs
KiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nh
c3Q8SlNET01CdWlsdGluQ29uc3RydWN0b3JCYXNlKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09C
SkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNTMsNiArNTQsOCBAQCB2b2lk
IEpTRE9NQnVpbHRpbkNvbnN0cnVjdG9yQmFzZTo6dmlzaXRDCiAgICAgdmlzaXRvci5hcHBlbmQo
dGhpc09iamVjdC0+bV9pbml0aWFsaXplRnVuY3Rpb24pOwogfQogCitERUZJTkVfVklTSVRfQ0hJ
TERSRU4oSlNET01CdWlsdGluQ29uc3RydWN0b3JCYXNlKTsKKwogSlNDOjpJc29TdWJzcGFjZSog
SlNET01CdWlsdGluQ29uc3RydWN0b3JCYXNlOjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0p
CiB7CiAgICAgcmV0dXJuICZzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERh
dGEpLT5kb21CdWlsdGluQ29uc3RydWN0b3JTcGFjZSgpOwpJbmRleDogU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNET01CdWlsdGluQ29uc3RydWN0b3JCYXNlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CdWlsdGluQ29uc3RydWN0b3JCYXNlLmgJ
KHJldmlzaW9uIDI3MjcxMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQnVp
bHRpbkNvbnN0cnVjdG9yQmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00Miw3ICs0Miw3IEBAIHBy
b3RlY3RlZDoKICAgICB7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihK
U0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxE
UkVOOwogCiAgICAgSlNDOjpKU0Z1bmN0aW9uKiBpbml0aWFsaXplRnVuY3Rpb24oKTsKICAgICB2
b2lkIHNldEluaXRpYWxpemVGdW5jdGlvbihKU0M6OlZNJiwgSlNDOjpKU0Z1bmN0aW9uJik7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01HbG9iYWxPYmplY3Qu
Y3BwCShyZXZpc2lvbiAyNzI3MTApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RP
TUdsb2JhbE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzOCw3ICsyMzgsOCBAQCBTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiBKU0RPTUdsb2JhbE9iamVjCiAgICAgcmV0dXJuIG51bGxwdHI7
CiB9CiAKLXZvaWQgSlNET01HbG9iYWxPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxs
LCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lk
IEpTRE9NR2xvYmFsT2JqZWN0Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0
b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNET01HbG9iYWxPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nh
c3Q8SlNET01HbG9iYWxPYmplY3QqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVS
SVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC0yNjAsNiArMjYxLDggQEAgdm9pZCBKU0RPTUds
b2JhbE9iamVjdDo6dmlzaXRDaGlsZHJlbihKUwogICAgIHRoaXNPYmplY3QtPm1fYnVpbHRpbklu
dGVybmFsRnVuY3Rpb25zLnZpc2l0KHZpc2l0b3IpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERS
RU4oSlNET01HbG9iYWxPYmplY3QpOworCiB2b2lkIEpTRE9NR2xvYmFsT2JqZWN0Ojpwcm9taXNl
UmVqZWN0aW9uVHJhY2tlcihKU0dsb2JhbE9iamVjdCoganNHbG9iYWxPYmplY3QsIEpTUHJvbWlz
ZSogcHJvbWlzZSwgSlNQcm9taXNlUmVqZWN0aW9uT3BlcmF0aW9uIG9wZXJhdGlvbikKIHsKICAg
ICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS93ZWJhcHBhcGlzLmh0
bWwjdGhlLWhvc3Rwcm9taXNlcmVqZWN0aW9udHJhY2tlci1pbXBsZW1lbnRhdGlvbgpJbmRleDog
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01HbG9iYWxPYmplY3QuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5oCShyZXZp
c2lvbiAyNzI3MTApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9i
amVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC02OSw3ICs2OSw3IEBAIHB1YmxpYzoKICAgICAvLyBN
YWtlIGJpbmRpbmcgY29kZSBnZW5lcmF0aW9uIGVhc2llci4KICAgICBKU0RPTUdsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0KCkgeyByZXR1cm4gdGhpczsgfQogCi0gICAgc3RhdGljIHZvaWQgdmlz
aXRDaGlsZHJlbihKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJF
X1ZJU0lUX0NISUxEUkVOOwogCiAgICAgRE9NV3JhcHBlcldvcmxkJiB3b3JsZCgpIHsgcmV0dXJu
IG1fd29ybGQuZ2V0KCk7IH0KICAgICBib29sIHdvcmxkSXNOb3JtYWwoKSBjb25zdCB7IHJldHVy
biBtX3dvcmxkSXNOb3JtYWw7IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
RE9NR3VhcmRlZE9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTRE9NR3VhcmRlZE9iamVjdC5oCShyZXZpc2lvbiAyNzI3MTApCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0RPTUd1YXJkZWRPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAt
NDAsNyArNDAsOCBAQCBwdWJsaWM6CiAKICAgICBib29sIGlzU3VzcGVuZGVkKCkgY29uc3QgeyBy
ZXR1cm4gIW1fZ3VhcmRlZCB8fCAhY2FuSW52b2tlQ2FsbGJhY2soKTsgfSAvLyBUaGUgd3JhcHBl
ciB3b3JsZCBoYXMgZ29uZSBhd2F5IG9yIGFjdGl2ZSBET00gb2JqZWN0cyBoYXZlIGJlZW4gc3Vz
cGVuZGVkLgogCi0gICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShKU0M6OlNsb3RWaXNpdG9yJiB2aXNp
dG9yKSB7IHZpc2l0b3IuYXBwZW5kKG1fZ3VhcmRlZCk7IH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBWaXNpdG9yPgorICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoVmlzaXRvciYgdmlzaXRvcikgeyB2
aXNpdG9yLmFwcGVuZChtX2d1YXJkZWQpOyB9CiAKICAgICBKU0M6OkpTVmFsdWUgZ3VhcmRlZE9i
amVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fZ3VhcmRlZC5nZXQoKTsgfQogICAgIEpTRE9NR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QoKSBjb25zdCB7IHJldHVybiBtX2dsb2JhbE9iamVjdC5nZXQo
KTsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01RdWFkQ3VzdG9tLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVF1YWRDdXN0
b20uY3BwCShyZXZpc2lvbiAyNzI3MTApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0RPTVF1YWRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3ICszMyw4IEBACiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCi12b2lkIEpTRE9NUXVhZDo6
dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0
eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0RPTVF1YWQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVu
KFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KGNvbnN0X2Nh
c3Q8RE9NUG9pbnQqPigmd3JhcHBlZCgpLnAxKCkpKTsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJv
b3QoY29uc3RfY2FzdDxET01Qb2ludCo+KCZ3cmFwcGVkKCkucDIoKSkpOwpAQCAtNDEsNCArNDIs
NyBAQCB2b2lkIEpTRE9NUXVhZDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oCiAgICAgdmlzaXRv
ci5hZGRPcGFxdWVSb290KGNvbnN0X2Nhc3Q8RE9NUG9pbnQqPigmd3JhcHBlZCgpLnA0KCkpKTsK
IH0KIAotfQordGVtcGxhdGUgdm9pZCBKU0RPTVF1YWQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVu
KEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNET01RdWFkOjp2aXNpdEFk
ZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYpOworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0N1c3RvbS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dDdXN0
b20uY3BwCShyZXZpc2lvbiAyNzI3MTApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0RPTVdpbmRvd0N1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNiw3ICsxMTYsOCBAQCBK
U0NfREVGSU5FX0NVU1RPTV9HRVRURVIoanNET01XaW5kb3dJbnN0CiAgICAgcmV0dXJuIG5vbkNh
Y2hpbmdTdGF0aWNGdW5jdGlvbkdldHRlckltcGw8anNET01XaW5kb3dJbnN0YW5jZUZ1bmN0aW9u
X3Bvc3RNZXNzYWdlLCAyPihnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSk7CiB9CiAKLXZvaWQg
SlNET01XaW5kb3c6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9y
KQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNET01XaW5kb3c6OnZpc2l0QWRk
aXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgaWYgKEZyYW1lKiBmcmFt
ZSA9IHdyYXBwZWQoKS5mcmFtZSgpKQogICAgICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QoZnJh
bWUpOwpAQCAtMTI5LDYgKzEzMCw5IEBAIHZvaWQgSlNET01XaW5kb3c6OnZpc2l0QWRkaXRpb25h
bENoaWxkcmUKICAgICB3cmFwcGVkKCkudmlzaXRKU0V2ZW50TGlzdGVuZXJzKHZpc2l0b3IpOwog
fQogCit0ZW1wbGF0ZSB2b2lkIEpTRE9NV2luZG93Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihB
YnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTRE9NV2luZG93Ojp2aXNpdEFk
ZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYpOworCiAjaWYgRU5BQkxFKFVTRVJfTUVTU0FH
RV9IQU5ETEVSUykKIEpTQ19ERUZJTkVfQ1VTVE9NX0dFVFRFUihqc0RPTVdpbmRvd193ZWJraXQs
IChKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhp
c1ZhbHVlLCBQcm9wZXJ0eU5hbWUpKQogewpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNEZXByZWNhdGVkQ1NTT01WYWx1ZUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNEZXByZWNhdGVkQ1NTT01WYWx1ZUN1c3RvbS5jcHAJKHJl
dmlzaW9uIDI3MjcxMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGVwcmVjYXRl
ZENTU09NVmFsdWVDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw3ICszNSw3IEBACiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCi1ib29sIEpTRGVwcmVj
YXRlZENTU09NVmFsdWVPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5k
bGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBTbG90VmlzaXRvciYgdmlzaXRvciwgY29u
c3QgY2hhcioqIHJlYXNvbikKK2Jvb2wgSlNEZXByZWNhdGVkQ1NTT01WYWx1ZU93bmVyOjppc1Jl
YWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwg
dm9pZCosIEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24p
CiB7CiAgICAgSlNEZXByZWNhdGVkQ1NTT01WYWx1ZSoganNDU1NWYWx1ZSA9IGpzQ2FzdDxKU0Rl
cHJlY2F0ZWRDU1NPTVZhbHVlKj4oaGFuZGxlLnNsb3QoKS0+YXNDZWxsKCkpOwogICAgIGlmICgh
anNDU1NWYWx1ZS0+aGFzQ3VzdG9tUHJvcGVydGllcyhqc0NTU1ZhbHVlLT52bSgpKSkKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRG9jdW1lbnRDdXN0b20uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRG9jdW1lbnRDdXN0b20uY3BwCShy
ZXZpc2lvbiAyNzI3MTApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RvY3VtZW50
Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTEsMTEgKzkxLDE1IEBAIEpTVmFsdWUgdG9K
UyhKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2IKICAgICByZXR1cm4gdG9KU05ld2x5Q3JlYXRl
ZChsZXhpY2FsR2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QsIFJlZjxEb2N1bWVudD4oZG9jdW1l
bnQpKTsKIH0KIAotdm9pZCBKU0RvY3VtZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90
VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTRG9j
dW1lbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAg
dmlzaXRvci5hZGRPcGFxdWVSb290KHN0YXRpY19jYXN0PFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
Pigmd3JhcHBlZCgpKSk7CiB9CiAKK3RlbXBsYXRlIHZvaWQgSlNEb2N1bWVudDo6dmlzaXRBZGRp
dGlvbmFsQ2hpbGRyZW4oQWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU0Rv
Y3VtZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYpOworCiB2b2lkIEpT
RG9jdW1lbnQ6OmFuYWx5emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFuYWx5emVyJiBhbmFseXpl
cikKIHsKICAgICBCYXNlOjphbmFseXplSGVhcChjZWxsLCBhbmFseXplcik7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Vycm9yRXZlbnRDdXN0b20uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXJyb3JFdmVudEN1c3RvbS5jcHAJKHJl
dmlzaW9uIDI3MjcxMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXJyb3JFdmVu
dEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDkgKzI4LDEzIEBACiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotdm9pZCBKU0Vycm9yRXZlbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVu
KEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgor
dm9pZCBKU0Vycm9yRXZlbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0
b3IpCiB7CiAgICAgd3JhcHBlZCgpLm9yaWdpbmFsRXJyb3IoKS52aXNpdCh2aXNpdG9yKTsKIH0K
IAordGVtcGxhdGUgdm9pZCBKU0Vycm9yRXZlbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpT
Qzo6QWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU0Vycm9yRXZlbnQ6OnZp
c2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImKTsKKwogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudExpc3Rl
bmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50
TGlzdGVuZXIuY3BwCShyZXZpc2lvbiAyNzI3MTApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0V2ZW50TGlzdGVuZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03OCw3ICs3OCw3IEBA
IEpTT2JqZWN0KiBKU0V2ZW50TGlzdGVuZXI6OmluaXRpYWxpemVKU0YKICAgICByZXR1cm4gbnVs
bHB0cjsKIH0KIAotdm9pZCBKU0V2ZW50TGlzdGVuZXI6OnZpc2l0SlNGdW5jdGlvbihTbG90Vmlz
aXRvciYgdmlzaXRvcikKK3ZvaWQgSlNFdmVudExpc3RlbmVyOjp2aXNpdEpTRnVuY3Rpb24oQWJz
dHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICAvLyBJZiBtX3dyYXBwZXIgaXMgbnVs
bCwgd2UgYXJlIG5vdCBrZWVwaW5nIG1fanNGdW5jdGlvbiBhbGl2ZS4KICAgICBpZiAoIW1fd3Jh
cHBlcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRMaXN0ZW5lci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRMaXN0ZW5l
ci5oCShyZXZpc2lvbiAyNzI3MTApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2
ZW50TGlzdGVuZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNjIsNyArNjIsNyBAQCBwdWJsaWM6CiAK
IHByaXZhdGU6CiAgICAgdmlydHVhbCBKU0M6OkpTT2JqZWN0KiBpbml0aWFsaXplSlNGdW5jdGlv
bihTY3JpcHRFeGVjdXRpb25Db250ZXh0JikgY29uc3Q7Ci0gICAgdm9pZCB2aXNpdEpTRnVuY3Rp
b24oSlNDOjpTbG90VmlzaXRvciYpIGZpbmFsOworICAgIHZvaWQgdmlzaXRKU0Z1bmN0aW9uKEpT
Qzo6QWJzdHJhY3RTbG90VmlzaXRvciYpIGZpbmFsOwogCiBwcm90ZWN0ZWQ6CiAgICAgSlNFdmVu
dExpc3RlbmVyKEpTQzo6SlNPYmplY3QqIGZ1bmN0aW9uLCBKU0M6OkpTT2JqZWN0KiB3cmFwcGVy
LCBib29sIGlzQXR0cmlidXRlLCBET01XcmFwcGVyV29ybGQmKTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRUYXJnZXRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRUYXJnZXRDdXN0b20uY3BwCShyZXZpc2lv
biAyNzI3MTApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50VGFyZ2V0Q3Vz
dG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzIsOSArNzIsMTMgQEAgc3RkOjp1bmlxdWVfcHRy
PEpTRXZlbnRUYXJnZXRXcmFwcGVyPiBqcwogICAgIHJldHVybiBudWxscHRyOwogfQogCi12b2lk
IEpTRXZlbnRUYXJnZXQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNp
dG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNFdmVudFRhcmdldDo6dmlz
aXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB3cmFwcGVkKCku
dmlzaXRKU0V2ZW50TGlzdGVuZXJzKHZpc2l0b3IpOwogfQogCit0ZW1wbGF0ZSB2b2lkIEpTRXZl
bnRUYXJnZXQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsK
K3RlbXBsYXRlIHZvaWQgSlNFdmVudFRhcmdldDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xv
dFZpc2l0b3ImKTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNGZXRjaEV2ZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0ZldGNoRXZlbnRDdXN0b20uY3BwCShyZXZpc2lvbiAy
NzI3MTApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0ZldGNoRXZlbnRDdXN0b20u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCwxMSArMzAsMTUgQEAKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi12b2lkIEpTRmV0Y2hFdmVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpT
bG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpT
RmV0Y2hFdmVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsK
ICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QoJndyYXBwZWQoKS5yZXF1ZXN0KCkpOwogfQogCi19
Cit0ZW1wbGF0ZSB2b2lkIEpTRmV0Y2hFdmVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlND
OjpBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTRmV0Y2hFdmVudDo6dmlz
aXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYpOworCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCiAKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNI
VE1MQ2FudmFzRWxlbWVudEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNIVE1MQ2FudmFzRWxlbWVudEN1c3RvbS5jcHAJKHJldmlzaW9uIDI3Mjcx
MCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTENhbnZhc0VsZW1lbnRDdXN0
b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw5ICszMSwxMyBAQAogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLXZvaWQgSlNIVE1MQ2FudmFzRWxlbWVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRy
ZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+
Cit2b2lkIEpTSFRNTENhbnZhc0VsZW1lbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0
b3ImIHZpc2l0b3IpCiB7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHN0YXRpY19jYXN0PENh
bnZhc0Jhc2UqPigmd3JhcHBlZCgpKSk7CiB9CiAKK3RlbXBsYXRlIHZvaWQgSlNIVE1MQ2FudmFz
RWxlbWVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9y
Jik7Cit0ZW1wbGF0ZSB2b2lkIEpTSFRNTENhbnZhc0VsZW1lbnQ6OnZpc2l0QWRkaXRpb25hbENo
aWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImKTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MVGVtcGxhdGVFbGVtZW50Q3VzdG9t
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxUZW1w
bGF0ZUVsZW1lbnRDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI3MTApCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0hUTUxUZW1wbGF0ZUVsZW1lbnRDdXN0b20uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zNywxMCArMzcsMTQgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVz
cGFjZSBKU0M7CiAKLXZvaWQgSlNIVE1MVGVtcGxhdGVFbGVtZW50Ojp2aXNpdEFkZGl0aW9uYWxD
aGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlz
aXRvcj4KK3ZvaWQgSlNIVE1MVGVtcGxhdGVFbGVtZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJl
bihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGlmIChhdXRvKiBjb250ZW50ID0gd3JhcHBlZCgp
LmNvbnRlbnRJZkF2YWlsYWJsZSgpKQogICAgICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qocm9v
dChjb250ZW50KSk7CiB9CiAKK3RlbXBsYXRlIHZvaWQgSlNIVE1MVGVtcGxhdGVFbGVtZW50Ojp2
aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBs
YXRlIHZvaWQgSlNIVE1MVGVtcGxhdGVFbGVtZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihK
U0M6OlNsb3RWaXNpdG9yJik7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSGlzdG9yeUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIaXN0b3J5Q3VzdG9tLmNwcAkocmV2aXNpb24g
MjcyNzEwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIaXN0b3J5Q3VzdG9tLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDQsOSArNDQsMTMgQEAgSlNWYWx1ZSBKU0hpc3Rvcnk6OnN0
YXRlKEpTR2xvYmFsT2JqZWN0JgogICAgIH0pOwogfQogCi12b2lkIEpTSGlzdG9yeTo6dmlzaXRB
ZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBWaXNpdG9yPgordm9pZCBKU0hpc3Rvcnk6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0
b3ImIHZpc2l0b3IpCiB7CiAgICAgd3JhcHBlZCgpLmNhY2hlZFN0YXRlRm9yR0MoKS52aXNpdCh2
aXNpdG9yKTsKIH0KIAordGVtcGxhdGUgdm9pZCBKU0hpc3Rvcnk6OnZpc2l0QWRkaXRpb25hbENo
aWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNIaXN0b3J5Ojp2
aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYpOworCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQkN1cnNvckN1c3Rv
bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJDdXJz
b3JDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI3MTApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0lEQkN1cnNvckN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUwLDcgKzUwLDgg
QEAgSlNDOjpKU1ZhbHVlIEpTSURCQ3Vyc29yOjpwcmltYXJ5S2V5KEpTQwogICAgIH0pOwogfQog
Ci12b2lkIEpTSURCQ3Vyc29yOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYg
dmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTSURCQ3Vyc29yOjp2
aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGF1dG8mIGN1
cnNvciA9IHdyYXBwZWQoKTsKICAgICBpZiAoYXV0byogcmVxdWVzdCA9IGN1cnNvci5yZXF1ZXN0
KCkpCkBAIC01OSw2ICs2MCw5IEBAIHZvaWQgSlNJREJDdXJzb3I6OnZpc2l0QWRkaXRpb25hbENo
aWxkcmUKICAgICBjdXJzb3IucHJpbWFyeUtleVdyYXBwZXIoKS52aXNpdCh2aXNpdG9yKTsKIH0K
IAordGVtcGxhdGUgdm9pZCBKU0lEQkN1cnNvcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oQWJz
dHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU0lEQkN1cnNvcjo6dmlzaXRBZGRp
dGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKKwogSlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVk
KEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBS
ZWY8SURCQ3Vyc29yPiYmIGN1cnNvcikKIHsKICAgICBpZiAoaXM8SURCQ3Vyc29yV2l0aFZhbHVl
PihjdXJzb3IpKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJDdXJzb3JX
aXRoVmFsdWVDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTSURCQ3Vyc29yV2l0aFZhbHVlQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcyNzEwKQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJDdXJzb3JXaXRoVmFsdWVDdXN0b20uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00MywxMiArNDMsMTYgQEAgSlNDOjpKU1ZhbHVlIEpTSURCQ3Vy
c29yV2l0aFZhbHVlOjp2YWx1ZQogICAgIH0pOwogfQogCi12b2lkIEpTSURCQ3Vyc29yV2l0aFZh
bHVlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBs
YXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTSURCQ3Vyc29yV2l0aFZhbHVlOjp2aXNpdEFk
ZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTSURCQ3Vyc29yOjp2
aXNpdEFkZGl0aW9uYWxDaGlsZHJlbih2aXNpdG9yKTsKICAgICB3cmFwcGVkKCkudmFsdWVXcmFw
cGVyKCkudmlzaXQodmlzaXRvcik7CiB9CiAKK3RlbXBsYXRlIHZvaWQgSlNJREJDdXJzb3JXaXRo
VmFsdWU6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3Rl
bXBsYXRlIHZvaWQgSlNJREJDdXJzb3JXaXRoVmFsdWU6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVu
KFNsb3RWaXNpdG9yJik7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVO
QUJMRShJTkRFWEVEX0RBVEFCQVNFKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNJREJJbmRleEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNJREJJbmRleEN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjcxMCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCSW5kZXhDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zNCwxMSArMzQsMTUgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBK
U0M7CiAKLXZvaWQgSlNJREJJbmRleDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0
b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0lEQkluZGV4
Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHZpc2l0
b3IuYWRkT3BhcXVlUm9vdChzdGF0aWNfY2FzdDxJREJJbmRleCY+KHdyYXBwZWQoKSkub2JqZWN0
U3RvcmVBc09wYXF1ZVJvb3QoKSk7CiB9CiAKK3RlbXBsYXRlIHZvaWQgSlNJREJJbmRleDo6dmlz
aXRBZGRpdGlvbmFsQ2hpbGRyZW4oQWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9p
ZCBKU0lEQkluZGV4Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYpOworCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFT
RSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCT2JqZWN0U3RvcmVDdXN0
b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCT2Jq
ZWN0U3RvcmVDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI3MTApCisrKyBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0lEQk9iamVjdFN0b3JlQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzYsMTEgKzM2LDE1IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2UgSlND
OwogCi12b2lkIEpTSURCT2JqZWN0U3RvcmU6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNJREJP
YmplY3RTdG9yZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsK
ICAgICBzdGF0aWNfY2FzdDxJREJPYmplY3RTdG9yZSY+KHdyYXBwZWQoKSkudmlzaXRSZWZlcmVu
Y2VkSW5kZXhlcyh2aXNpdG9yKTsKIH0KIAotfQordGVtcGxhdGUgdm9pZCBKU0lEQk9iamVjdFN0
b3JlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1w
bGF0ZSB2b2lkIEpTSURCT2JqZWN0U3RvcmU6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RW
aXNpdG9yJik7CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQlJlcXVlc3RDdXN0b20uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCUmVxdWVzdEN1c3RvbS5jcHAJKHJl
dmlzaW9uIDI3MjcxMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCUmVxdWVz
dEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg5LDEyICs4OSwxNyBAQCBKU0M6OkpTVmFs
dWUgSlNJREJSZXF1ZXN0OjpyZXN1bHQoSlNDOjpKCiAgICAgfSk7CiB9CiAKLXZvaWQgSlNJREJS
ZXF1ZXN0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3Rl
bXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTSURCUmVxdWVzdDo6dmlzaXRBZGRpdGlv
bmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBhdXRvJiByZXF1ZXN0ID0gd3Jh
cHBlZCgpOwogICAgIHJlcXVlc3QucmVzdWx0V3JhcHBlcigpLnZpc2l0KHZpc2l0b3IpOwogICAg
IHJlcXVlc3QuY3Vyc29yV3JhcHBlcigpLnZpc2l0KHZpc2l0b3IpOwogfQogCi19Cit0ZW1wbGF0
ZSB2b2lkIEpTSURCUmVxdWVzdDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oQWJzdHJhY3RTbG90
VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU0lEQlJlcXVlc3Q6OnZpc2l0QWRkaXRpb25hbENo
aWxkcmVuKFNsb3RWaXNpdG9yJik7CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwogI2VuZGlm
IC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNJREJUcmFuc2FjdGlvbkN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNJREJUcmFuc2FjdGlvbkN1c3RvbS5jcHAJKHJldmlzaW9uIDI3
MjcxMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCVHJhbnNhY3Rpb25DdXN0
b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCwxMSArMzQsMTUgQEAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKLXZvaWQgSlNJREJUcmFuc2FjdGlvbjo6dmlz
aXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBl
bmFtZSBWaXNpdG9yPgordm9pZCBKU0lEQlRyYW5zYWN0aW9uOjp2aXNpdEFkZGl0aW9uYWxDaGls
ZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHN0YXRpY19jYXN0PElEQlRyYW5zYWN0aW9u
Jj4od3JhcHBlZCgpKS52aXNpdFJlZmVyZW5jZWRPYmplY3RTdG9yZXModmlzaXRvcik7CiB9CiAK
LX0KK3RlbXBsYXRlIHZvaWQgSlNJREJUcmFuc2FjdGlvbjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRy
ZW4oQWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU0lEQlRyYW5zYWN0aW9u
Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYpOworCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCiAKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJ
bnRlcnNlY3Rpb25PYnNlcnZlckN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNJbnRlcnNlY3Rpb25PYnNlcnZlckN1c3RvbS5jcHAJKHJldmlzaW9u
IDI3MjcxMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW50ZXJzZWN0aW9uT2Jz
ZXJ2ZXJDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCwxMCArMzAsMTQgQEAKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIEpTSW50ZXJzZWN0aW9uT2JzZXJ2ZXI6OnZpc2l0QWRk
aXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBl
bmFtZSBWaXNpdG9yPgordm9pZCBKU0ludGVyc2VjdGlvbk9ic2VydmVyOjp2aXNpdEFkZGl0aW9u
YWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGlmIChhdXRvKiBjYWxsYmFjayA9
IHdyYXBwZWQoKS5jYWxsYmFja0NvbmN1cnJlbnRseSgpKQogICAgICAgICBjYWxsYmFjay0+dmlz
aXRKU0Z1bmN0aW9uKHZpc2l0b3IpOwogfQogCi19Cit0ZW1wbGF0ZSB2b2lkIEpTSW50ZXJzZWN0
aW9uT2JzZXJ2ZXI6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6QWJzdHJhY3RTbG90Vmlz
aXRvciYpOwordGVtcGxhdGUgdm9pZCBKU0ludGVyc2VjdGlvbk9ic2VydmVyOjp2aXNpdEFkZGl0
aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJik7CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW50ZXJzZWN0aW9uT2JzZXJ2
ZXJFbnRyeUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNJbnRlcnNlY3Rpb25PYnNlcnZlckVudHJ5Q3VzdG9tLmNwcAkocmV2aXNpb24gMjcyNzEw
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJbnRlcnNlY3Rpb25PYnNlcnZlckVu
dHJ5Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAsOCBAQAogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLXZvaWQgSlNJbnRlcnNlY3Rpb25PYnNlcnZlckVudHJ5Ojp2aXNpdEFk
ZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlw
ZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNJbnRlcnNlY3Rpb25PYnNlcnZlckVudHJ5Ojp2aXNpdEFk
ZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHZpc2l0b3IuYWRkT3Bh
cXVlUm9vdChyb290KHdyYXBwZWQoKS50YXJnZXQoKSkpOwogICAgIHZpc2l0b3IuYWRkT3BhcXVl
Um9vdCh3cmFwcGVkKCkuYm91bmRpbmdDbGllbnRSZWN0KCkpOwpAQCAtMzgsNCArMzksNyBAQCB2
b2lkIEpTSW50ZXJzZWN0aW9uT2JzZXJ2ZXJFbnRyeTo6dmlzaXRBCiAgICAgdmlzaXRvci5hZGRP
cGFxdWVSb290KHdyYXBwZWQoKS5yb290Qm91bmRzKCkpOwogfQogCi19Cit0ZW1wbGF0ZSB2b2lk
IEpTSW50ZXJzZWN0aW9uT2JzZXJ2ZXJFbnRyeTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlND
OjpBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTSW50ZXJzZWN0aW9uT2Jz
ZXJ2ZXJFbnRyeTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYpOwor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU01lc3NhZ2VDaGFubmVsQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU01lc3NhZ2VDaGFubmVsQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcyNzEw
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNZXNzYWdlQ2hhbm5lbEN1c3RvbS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDcgKzMzLDggQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCi12b2lkIEpTTWVzc2FnZUNoYW5uZWw6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBK
U01lc3NhZ2VDaGFubmVsOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9y
KQogewogICAgIGlmIChNZXNzYWdlUG9ydCogcG9ydCA9IHdyYXBwZWQoKS5wb3J0MSgpKQogICAg
ICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QocG9ydCk7CkBAIC00Miw2ICs0Myw5IEBAIHZvaWQg
SlNNZXNzYWdlQ2hhbm5lbDo6dmlzaXRBZGRpdGlvbmFsQ2gKICAgICAgICAgdmlzaXRvci5hZGRP
cGFxdWVSb290KHBvcnQpOwogfQogCit0ZW1wbGF0ZSB2b2lkIEpTTWVzc2FnZUNoYW5uZWw6OnZp
c2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxh
dGUgdm9pZCBKU01lc3NhZ2VDaGFubmVsOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNs
b3RWaXNpdG9yJik7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJM
RShDSEFOTkVMX01FU1NBR0lORykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
TWVzc2FnZUV2ZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU01lc3NhZ2VFdmVudEN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjcxMCkKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWVzc2FnZUV2ZW50Q3VzdG9tLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNzAsNyArNzAsOCBAQCBKU0M6OkpTVmFsdWUgSlNNZXNzYWdlRXZlbnQ6OmRh
dGEoSlNDOjpKCiAgICAgfSk7CiB9CiAKLXZvaWQgSlNNZXNzYWdlRXZlbnQ6OnZpc2l0QWRkaXRp
b25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBWaXNpdG9yPgordm9pZCBKU01lc3NhZ2VFdmVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4o
VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBXVEY6OnN3aXRjaE9uKHdyYXBwZWQoKS5kYXRhKCks
IFsmdmlzaXRvcl0gKGNvbnN0IEpTVmFsdWVJbldyYXBwZWRPYmplY3QmIGRhdGEpIHsKICAgICAg
ICAgZGF0YS52aXNpdCh2aXNpdG9yKTsKQEAgLTg0LDQgKzg1LDcgQEAgdm9pZCBKU01lc3NhZ2VF
dmVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbAogICAgIHdyYXBwZWQoKS5jYWNoZWRQb3J0cygpLnZp
c2l0KHZpc2l0b3IpOwogfQogCit0ZW1wbGF0ZSB2b2lkIEpTTWVzc2FnZUV2ZW50Ojp2aXNpdEFk
ZGl0aW9uYWxDaGlsZHJlbihKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZv
aWQgSlNNZXNzYWdlRXZlbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0
b3ImKTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNNZXNzYWdlUG9ydEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNNZXNzYWdlUG9ydEN1c3RvbS5jcHAJKHJldmlzaW9uIDI3Mjcx
MCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWVzc2FnZVBvcnRDdXN0b20uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zMSwxMSArMzEsMTUgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKLXZvaWQgSlNNZXNzYWdlUG9ydDo6dmlzaXRBZGRpdGlv
bmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNp
dG9yPgordm9pZCBKU01lc3NhZ2VQb3J0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9y
JiB2aXNpdG9yKQogewogICAgIC8vIElmIHdlIGhhdmUgYSBsb2NhbGx5IGVudGFuZ2xlZCBwb3J0
LCB3ZSBjYW4gZGlyZWN0bHkgbWFyayBpdCBhcyByZWFjaGFibGUuIFBvcnRzIHRoYXQgYXJlIHJl
bW90ZWx5IGVudGFuZ2xlZCBhcmUgbWFya2VkIGluLXVzZSBieSBtYXJrQWN0aXZlT2JqZWN0c0Zv
ckNvbnRleHQoKS4KICAgICBpZiAoTWVzc2FnZVBvcnQqIHBvcnQgPSB3cmFwcGVkKCkubG9jYWxs
eUVudGFuZ2xlZFBvcnQoKSkKICAgICAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHBvcnQpOwog
fQogCit0ZW1wbGF0ZSB2b2lkIEpTTWVzc2FnZVBvcnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVu
KEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNNZXNzYWdlUG9ydDo6dmlz
aXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKKwogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNdXRhdGlvbk9ic2VydmVy
Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU011
dGF0aW9uT2JzZXJ2ZXJDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI3MTApCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU011dGF0aW9uT2JzZXJ2ZXJDdXN0b20uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zOSwxMiArMzksMTYgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVz
cGFjZSBKU0M7CiAKLXZvaWQgSlNNdXRhdGlvbk9ic2VydmVyOjp2aXNpdEFkZGl0aW9uYWxDaGls
ZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRv
cj4KK3ZvaWQgSlNNdXRhdGlvbk9ic2VydmVyOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNp
dG9yJiB2aXNpdG9yKQogewogICAgIHdyYXBwZWQoKS5jYWxsYmFjaygpLnZpc2l0SlNGdW5jdGlv
bih2aXNpdG9yKTsKIH0KIAotYm9vbCBKU011dGF0aW9uT2JzZXJ2ZXJPd25lcjo6aXNSZWFjaGFi
bGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQq
LCBTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqcmVhc29uKQordGVtcGxhdGUgdm9p
ZCBKU011dGF0aW9uT2JzZXJ2ZXI6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6QWJzdHJh
Y3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU011dGF0aW9uT2JzZXJ2ZXI6OnZpc2l0
QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImKTsKKworYm9vbCBKU011dGF0aW9u
T2JzZXJ2ZXJPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlND
OjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBj
b25zdCBjaGFyKipyZWFzb24pCiB7CiAgICAgZm9yIChhdXRvKiBub2RlIDoganNDYXN0PEpTTXV0
YXRpb25PYnNlcnZlcio+KGhhbmRsZS5zbG90KCktPmFzQ2VsbCgpKS0+d3JhcHBlZCgpLm9ic2Vy
dmVkTm9kZXMoKSkgewogICAgICAgICBpZiAodmlzaXRvci5jb250YWluc09wYXF1ZVJvb3Qocm9v
dChub2RlKSkpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTXV0YXRpb25S
ZWNvcmRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTTXV0YXRpb25SZWNvcmRDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI3MTApCisrKyBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU011dGF0aW9uUmVjb3JkQ3VzdG9tLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzAsOSArMzAsMTMgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIEpT
TXV0YXRpb25SZWNvcmQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3Im
IHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU011dGF0aW9uUmVj
b3JkOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHdy
YXBwZWQoKS52aXNpdE5vZGVzQ29uY3VycmVudGx5KHZpc2l0b3IpOwogfQotICAgIAorCit0ZW1w
bGF0ZSB2b2lkIEpTTXV0YXRpb25SZWNvcmQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6
QWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU011dGF0aW9uUmVjb3JkOjp2
aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJik7CisKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTmF2aWdhdG9y
Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05h
dmlnYXRvckN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjcxMCkKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTTmF2aWdhdG9yQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsMTEg
KzMyLDE1IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBKU05hdmlnYXRvcjo6dmlz
aXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRl
PHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTTmF2aWdhdG9yOjp2aXNpdEFkZGl0aW9uYWxDaGls
ZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChzdGF0
aWNfY2FzdDxOYXZpZ2F0b3JCYXNlKj4oJndyYXBwZWQoKSkpOwogfQogCit0ZW1wbGF0ZSB2b2lk
IEpTTmF2aWdhdG9yOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OkFic3RyYWN0U2xvdFZp
c2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNOYXZpZ2F0b3I6OnZpc2l0QWRkaXRpb25hbENoaWxk
cmVuKEpTQzo6U2xvdFZpc2l0b3ImKTsKKwogI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCiBKU0M6
OkpTVmFsdWUgSlNOYXZpZ2F0b3I6OmdldFVzZXJNZWRpYShKU0M6OkpTR2xvYmFsT2JqZWN0JiBs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OkNhbGxGcmFtZSYgY2FsbEZyYW1lKQogewpJbmRleDog
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlQ3VzdG9tLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVDdXN0b20uY3BwCShyZXZpc2lvbiAy
NzI3MTApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVDdXN0b20uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC03NCw3ICs3NCw4IEBAIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKIHVz
aW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBpc1JlYWNoYWJs
ZUZyb21ET00oTm9kZSogbm9kZSwgU2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiBy
ZWFzb24pCisvL3N0YXRpYyBpbmxpbmUgYm9vbCBpc1JlYWNoYWJsZUZyb21ET00oTm9kZSogbm9k
ZSwgU2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCitzdGF0aWMgaW5s
aW5lIGJvb2wgaXNSZWFjaGFibGVGcm9tRE9NKE5vZGUqIG5vZGUsIEFic3RyYWN0U2xvdFZpc2l0
b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCiB7CiAgICAgaWYgKCFub2RlLT5pc0Nv
bm5lY3RlZCgpKSB7CiAgICAgICAgIGlmIChpczxFbGVtZW50Pigqbm9kZSkpIHsKQEAgLTEyMyw3
ICsxMjQsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaXNSZWFjaGFibGVGcm9tRE9NKE5vCiAgICAg
cmV0dXJuIHZpc2l0b3IuY29udGFpbnNPcGFxdWVSb290KHJvb3Qobm9kZSkpOwogfQogCi1ib29s
IEpTTm9kZU93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6
OlVua25vd24+IGhhbmRsZSwgdm9pZCosIFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFy
KiogcmVhc29uKQorYm9vbCBKU05vZGVPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMo
SlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBBYnN0cmFjdFNsb3RWaXNp
dG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQogewogICAgIEpTTm9kZSoganNOb2Rl
ID0ganNDYXN0PEpTTm9kZSo+KGhhbmRsZS5zbG90KCktPmFzQ2VsbCgpKTsKICAgICByZXR1cm4g
aXNSZWFjaGFibGVGcm9tRE9NKCZqc05vZGUtPndyYXBwZWQoKSwgdmlzaXRvciwgcmVhc29uKTsK
QEAgLTEzNiwxMSArMTM3LDE1IEBAIEpTU2NvcGUqIEpTTm9kZTo6cHVzaEV2ZW50SGFuZGxlclNj
b3BlKEoKICAgICByZXR1cm4gbm9kZTsKIH0KIAotdm9pZCBKU05vZGU6OnZpc2l0QWRkaXRpb25h
bENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRv
cj4KK3ZvaWQgSlNOb2RlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9y
KQogewogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChyb290KHdyYXBwZWQoKSkpOwogfQogCit0
ZW1wbGF0ZSB2b2lkIEpTTm9kZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oQWJzdHJhY3RTbG90
VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU05vZGU6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVu
KFNsb3RWaXNpdG9yJik7CisKIHN0YXRpYyBBTFdBWVNfSU5MSU5FIEpTVmFsdWUgY3JlYXRlV3Jh
cHBlcklubGluZShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNET01HbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmPE5vZGU+JiYgbm9kZSkKIHsKICAgICBBU1NFUlQo
IWdldENhY2hlZFdyYXBwZXIoZ2xvYmFsT2JqZWN0LT53b3JsZCgpLCBub2RlKSk7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVJdGVyYXRvckN1c3RvbS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlSXRlcmF0b3JDdXN0b20u
Y3BwCShyZXZpc2lvbiAyNzI3MTApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05v
ZGVJdGVyYXRvckN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1LDEwICsyNSwxNCBAQAog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgSlNOb2RlSXRlcmF0b3I6OnZpc2l0QWRkaXRp
b25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBWaXNpdG9yPgordm9pZCBKU05vZGVJdGVyYXRvcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4o
VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBpZiAoTm9kZUZpbHRlciogZmlsdGVyID0gd3JhcHBl
ZCgpLmZpbHRlcigpKQogICAgICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QoZmlsdGVyKTsKIH0K
IAotfQordGVtcGxhdGUgdm9pZCBKU05vZGVJdGVyYXRvcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRy
ZW4oSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTTm9kZUl0ZXJh
dG9yOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJik7CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9k
ZUxpc3RDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTTm9kZUxpc3RDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI3MTApCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU05vZGVMaXN0Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcs
NyArMzcsNyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAot
Ym9vbCBKU05vZGVMaXN0T3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFu
ZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgU2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNv
bnN0IGNoYXIqKiByZWFzb24pCitib29sIEpTTm9kZUxpc3RPd25lcjo6aXNSZWFjaGFibGVGcm9t
T3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBBYnN0
cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQogewogICAgIEpT
Tm9kZUxpc3QqIGpzTm9kZUxpc3QgPSBqc0Nhc3Q8SlNOb2RlTGlzdCo+KGhhbmRsZS5zbG90KCkt
PmFzQ2VsbCgpKTsKICAgICBpZiAoIWpzTm9kZUxpc3QtPmhhc0N1c3RvbVByb3BlcnRpZXMoanNO
b2RlTGlzdC0+dm0oKSkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU09mZnNj
cmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyREN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNPZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0
MkRDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI3MTApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU09mZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyREN1c3RvbS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTMxLDcgKzMxLDcgQEAgaW5saW5lIHZvaWQqIHJvb3QoT2Zmc2NyZWVuQ2Fu
dmFzKiBjYW52YQogICAgIHJldHVybiBjYW52YXM7CiB9CiAKLWJvb2wgSlNPZmZzY3JlZW5DYW52
YXNSZW5kZXJpbmdDb250ZXh0MkRPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlND
OjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBTbG90VmlzaXRvciYgdmlzaXRv
ciwgY29uc3QgY2hhcioqIHJlYXNvbikKK2Jvb2wgSlNPZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdD
b250ZXh0MkRPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlND
OjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBj
b25zdCBjaGFyKiogcmVhc29uKQogewogICAgIGlmIChVTkxJS0VMWShyZWFzb24pKQogICAgICAg
ICAqcmVhc29uID0gIkNhbnZhcyBpcyBvcGFxdWUgcm9vdCI7CkBAIC00MSwxMSArNDEsMTUgQEAg
Ym9vbCBKU09mZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRAogICAgIHJldHVybiB2aXNp
dG9yLmNvbnRhaW5zT3BhcXVlUm9vdChyb290KTsKIH0KIAotdm9pZCBKU09mZnNjcmVlbkNhbnZh
c1JlbmRlcmluZ0NvbnRleHQyRDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3Im
IHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU09mZnNjcmVlbkNh
bnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYg
dmlzaXRvcikKIHsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qocm9vdCgmd3JhcHBlZCgpLmNh
bnZhcygpKSk7CiB9CiAKK3RlbXBsYXRlIHZvaWQgSlNPZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdD
b250ZXh0MkQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsK
K3RlbXBsYXRlIHZvaWQgSlNPZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnZpc2l0
QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKIAogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1BhaW50UmVu
ZGVyaW5nQ29udGV4dDJEQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU1BhaW50UmVuZGVyaW5nQ29udGV4dDJEQ3VzdG9tLmNwcAkocmV2aXNpb24g
MjcyNzEwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNQYWludFJlbmRlcmluZ0Nv
bnRleHQyREN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDcgKzM2LDcgQEAgaW5saW5l
IHZvaWQqIHJvb3QoQ3VzdG9tUGFpbnRDYW52YXMqIGNhbgogICAgIHJldHVybiBjYW52YXM7CiB9
CiAKLWJvb2wgSlNQYWludFJlbmRlcmluZ0NvbnRleHQyRE93bmVyOjppc1JlYWNoYWJsZUZyb21P
cGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIFNsb3RW
aXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQorYm9vbCBKU1BhaW50UmVuZGVy
aW5nQ29udGV4dDJET3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxl
PEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRv
ciwgY29uc3QgY2hhcioqIHJlYXNvbikKIHsKICAgICBpZiAoVU5MSUtFTFkocmVhc29uKSkKICAg
ICAgICAgKnJlYXNvbiA9ICJDYW52YXMgaXMgb3BhcXVlIHJvb3QiOwpAQCAtNDYsMTEgKzQ2LDE1
IEBAIGJvb2wgSlNQYWludFJlbmRlcmluZ0NvbnRleHQyRE93bmVyOjppc1IKICAgICByZXR1cm4g
dmlzaXRvci5jb250YWluc09wYXF1ZVJvb3Qocm9vdCk7CiB9CiAKLXZvaWQgSlNQYWludFJlbmRl
cmluZ0NvbnRleHQyRDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0
b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1BhaW50UmVuZGVyaW5nQ29u
dGV4dDJEOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAg
IHZpc2l0b3IuYWRkT3BhcXVlUm9vdChyb290KCZ3cmFwcGVkKCkuY2FudmFzKCkpKTsKIH0KIAor
dGVtcGxhdGUgdm9pZCBKU1BhaW50UmVuZGVyaW5nQ29udGV4dDJEOjp2aXNpdEFkZGl0aW9uYWxD
aGlsZHJlbihBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTUGFpbnRSZW5k
ZXJpbmdDb250ZXh0MkQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CisK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKICNlbmRpZgogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU1BhaW50V29ya2xldEdsb2JhbFNjb3BlQ3VzdG9tLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1BhaW50V29ya2xldEdsb2JhbFNjb3Bl
Q3VzdG9tLmNwcAkocmV2aXNpb24gMjcyNzEwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNQYWludFdvcmtsZXRHbG9iYWxTY29wZUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMxLDcgKzMxLDggQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBKU0M7
CiAKLXZvaWQgSlNQYWludFdvcmtsZXRHbG9iYWxTY29wZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRy
ZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+
Cit2b2lkIEpTUGFpbnRXb3JrbGV0R2xvYmFsU2NvcGU6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVu
KFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayh3cmFwcGVk
KCkucGFpbnREZWZpbml0aW9uTG9jaygpKTsKICAgICBmb3IgKGF1dG8mIHJlZ2lzdGVyZWQgOiB3
cmFwcGVkKCkucGFpbnREZWZpbml0aW9uTWFwKCkudmFsdWVzKCkpIHsKQEAgLTQwLDUgKzQxLDkg
QEAgdm9pZCBKU1BhaW50V29ya2xldEdsb2JhbFNjb3BlOjp2aXNpdEFkZAogICAgIH0KIH0KIAot
fQordGVtcGxhdGUgdm9pZCBKU1BhaW50V29ya2xldEdsb2JhbFNjb3BlOjp2aXNpdEFkZGl0aW9u
YWxDaGlsZHJlbihKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNQ
YWludFdvcmtsZXRHbG9iYWxTY29wZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90
VmlzaXRvciYpOworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKICNlbmRpZgpJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNQYXltZW50TWV0aG9kQ2hhbmdlRXZlbnRDdXN0b20u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUGF5bWVudE1l
dGhvZENoYW5nZUV2ZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gMjcyNzEwKQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNQYXltZW50TWV0aG9kQ2hhbmdlRXZlbnRDdXN0b20uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0MSw4IEBAIEpTQzo6SlNWYWx1ZSBKU1BheW1lbnRNZXRo
b2RDaGFuZ2VFdmVudDoKICAgICB9KTsKIH0KIAotdm9pZCBKU1BheW1lbnRNZXRob2RDaGFuZ2VF
dmVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikK
K3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTUGF5bWVudE1ldGhvZENoYW5nZUV2
ZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFdU
Rjo6c3dpdGNoT24od3JhcHBlZCgpLm1ldGhvZERldGFpbHMoKSwgWyZ2aXNpdG9yXShjb25zdCBK
U1ZhbHVlSW5XcmFwcGVkT2JqZWN0JiBtZXRob2REZXRhaWxzKSB7CiAgICAgICAgIG1ldGhvZERl
dGFpbHMudmlzaXQodmlzaXRvcik7CkBAIC01MSw2ICs1Miw5IEBAIHZvaWQgSlNQYXltZW50TWV0
aG9kQ2hhbmdlRXZlbnQ6OnZpc2l0QWQKICAgICB3cmFwcGVkKCkuY2FjaGVkTWV0aG9kRGV0YWls
cygpLnZpc2l0KHZpc2l0b3IpOwogfQogCit0ZW1wbGF0ZSB2b2lkIEpTUGF5bWVudE1ldGhvZENo
YW5nZUV2ZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OkFic3RyYWN0U2xvdFZpc2l0
b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNQYXltZW50TWV0aG9kQ2hhbmdlRXZlbnQ6OnZpc2l0QWRk
aXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImKTsKKwogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKFBBWU1FTlRfUkVRVUVTVCkKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTUGF5bWVudFJlc3BvbnNlQ3VzdG9tLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1BheW1lbnRSZXNwb25zZUN1c3RvbS5j
cHAJKHJldmlzaW9uIDI3MjcxMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUGF5
bWVudFJlc3BvbnNlQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsMTEgKzM3LDE1IEBA
IEpTQzo6SlNWYWx1ZSBKU1BheW1lbnRSZXNwb25zZTo6ZGV0YWlscygKICAgICB9KTsKIH0KIAot
dm9pZCBKU1BheW1lbnRSZXNwb25zZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90
VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTUGF5
bWVudFJlc3BvbnNlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQog
ewogICAgIHdyYXBwZWQoKS5jYWNoZWREZXRhaWxzKCkudmlzaXQodmlzaXRvcik7CiB9CiAKK3Rl
bXBsYXRlIHZvaWQgSlNQYXltZW50UmVzcG9uc2U6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpT
Qzo6QWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU1BheW1lbnRSZXNwb25z
ZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYpOworCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoUEFZTUVOVF9SRVFVRVNUKQpJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNQZXJmb3JtYW5jZU9ic2VydmVyQ3VzdG9t
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1BlcmZvcm1h
bmNlT2JzZXJ2ZXJDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI3MTApCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU1BlcmZvcm1hbmNlT2JzZXJ2ZXJDdXN0b20uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zMSwxMiArMzEsMTYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIEpT
UGVyZm9ybWFuY2VPYnNlcnZlcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90Vmlz
aXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTUGVyZm9y
bWFuY2VPYnNlcnZlcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikK
IHsKICAgICB3cmFwcGVkKCkuY2FsbGJhY2soKS52aXNpdEpTRnVuY3Rpb24odmlzaXRvcik7CiB9
CiAKLWJvb2wgSlNQZXJmb3JtYW5jZU9ic2VydmVyT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1
ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgSlNDOjpTbG90
VmlzaXRvciYsIGNvbnN0IGNoYXIqKiByZWFzb24pCit0ZW1wbGF0ZSB2b2lkIEpTUGVyZm9ybWFu
Y2VPYnNlcnZlcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpBYnN0cmFjdFNsb3RWaXNp
dG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTUGVyZm9ybWFuY2VPYnNlcnZlcjo6dmlzaXRBZGRpdGlv
bmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYpOworCitib29sIEpTUGVyZm9ybWFuY2VPYnNl
cnZlck93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVu
a25vd24+IGhhbmRsZSwgdm9pZCosIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYsIGNvbnN0IGNo
YXIqKiByZWFzb24pCiB7CiAgICAgaWYgKFVOTElLRUxZKHJlYXNvbikpCiAgICAgICAgICpyZWFz
b24gPSAiUmVnaXN0ZXJlZCBQZXJmb3JtYW5jZU9ic2VydmVyIGNhbGxiYWNrIjsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUG9wU3RhdGVFdmVudEN1c3RvbS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNQb3BTdGF0ZUV2ZW50Q3VzdG9t
LmNwcAkocmV2aXNpb24gMjcyNzEwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNQ
b3BTdGF0ZUV2ZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTAsOSArOTAsMTMgQEAg
SlNWYWx1ZSBKU1BvcFN0YXRlRXZlbnQ6OnN0YXRlKEpTR2xvYmFsTwogICAgIHJldHVybiBjYWNo
ZVN0YXRlKHJlc3VsdCk7CiB9CiAKLXZvaWQgSlNQb3BTdGF0ZUV2ZW50Ojp2aXNpdEFkZGl0aW9u
YWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUg
VmlzaXRvcj4KK3ZvaWQgSlNQb3BTdGF0ZUV2ZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihW
aXNpdG9yJiB2aXNpdG9yKQogewogICAgIHdyYXBwZWQoKS5zdGF0ZSgpLnZpc2l0KHZpc2l0b3Ip
OwogfQogCit0ZW1wbGF0ZSB2b2lkIEpTUG9wU3RhdGVFdmVudDo6dmlzaXRBZGRpdGlvbmFsQ2hp
bGRyZW4oSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTUG9wU3Rh
dGVFdmVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYpOworCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U1Byb21pc2VSZWplY3Rpb25FdmVudEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNQcm9taXNlUmVqZWN0aW9uRXZlbnRDdXN0b20uY3BwCShyZXZp
c2lvbiAyNzI3MTApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1Byb21pc2VSZWpl
Y3Rpb25FdmVudEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDkgKzMyLDEzIEBACiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBKU1Byb21pc2VSZWplY3Rpb25FdmVudDo6dmlz
aXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRl
PHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTUHJvbWlzZVJlamVjdGlvbkV2ZW50Ojp2aXNpdEFk
ZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHdyYXBwZWQoKS5yZWFz
b24oKS52aXNpdCh2aXNpdG9yKTsKIH0KIAordGVtcGxhdGUgdm9pZCBKU1Byb21pc2VSZWplY3Rp
b25FdmVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9y
Jik7Cit0ZW1wbGF0ZSB2b2lkIEpTUHJvbWlzZVJlamVjdGlvbkV2ZW50Ojp2aXNpdEFkZGl0aW9u
YWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJik7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUmVzaXplT2JzZXJ2ZXJDdXN0b20u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUmVzaXplT2Jz
ZXJ2ZXJDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI3MTApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU1Jlc2l6ZU9ic2VydmVyQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAs
MTEgKzMwLDE1IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBKU1Jlc2l6ZU9ic2Vy
dmVyOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQor
dGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNSZXNpemVPYnNlcnZlcjo6dmlzaXRB
ZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBSZXNpemVPYnNlcnZl
ckNhbGxiYWNrKiBjYWxsYmFjayA9IHdyYXBwZWQoKS5jYWxsYmFja0NvbmN1cnJlbnRseSgpOwog
ICAgIGlmIChjYWxsYmFjaykKICAgICAgICAgY2FsbGJhY2stPnZpc2l0SlNGdW5jdGlvbih2aXNp
dG9yKTsKIH0KIAotfQordGVtcGxhdGUgdm9pZCBKU1Jlc2l6ZU9ic2VydmVyOjp2aXNpdEFkZGl0
aW9uYWxDaGlsZHJlbihKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQg
SlNSZXNpemVPYnNlcnZlcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRv
ciYpOworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU1Jlc2l6ZU9ic2VydmVyRW50cnlDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUmVzaXplT2JzZXJ2ZXJFbnRyeUN1c3RvbS5jcHAJ
KHJldmlzaW9uIDI3MjcxMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUmVzaXpl
T2JzZXJ2ZXJFbnRyeUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDEwICszMCwxNCBA
QAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgSlNSZXNpemVPYnNlcnZlckVudHJ5Ojp2
aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxh
dGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNSZXNpemVPYnNlcnZlckVudHJ5Ojp2aXNpdEFk
ZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHZpc2l0b3IuYWRkT3Bh
cXVlUm9vdChyb290KHdyYXBwZWQoKS50YXJnZXQoKSkpOwogICAgIHZpc2l0b3IuYWRkT3BhcXVl
Um9vdCh3cmFwcGVkKCkuY29udGVudFJlY3QoKSk7CiB9CiAKLX0KK3RlbXBsYXRlIHZvaWQgSlNS
ZXNpemVPYnNlcnZlckVudHJ5Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OkFic3RyYWN0
U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNSZXNpemVPYnNlcnZlckVudHJ5Ojp2aXNp
dEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJik7CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU1ZHVmlld1NwZWND
dXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU1ZH
Vmlld1NwZWNDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI3MTApCisrKyBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU1NWR1ZpZXdTcGVjQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAs
MTAgKzMwLDE0IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBKU1NWR1ZpZXdTcGVj
Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVt
cGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNTVkdWaWV3U3BlYzo6dmlzaXRBZGRpdGlv
bmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBBU1NFUlQod3JhcHBlZCgpLmNv
bnRleHRFbGVtZW50Q29uY3VycmVudGx5KCkuZ2V0KCkpOwogICAgIHZpc2l0b3IuYWRkT3BhcXVl
Um9vdChyb290KHdyYXBwZWQoKS5jb250ZXh0RWxlbWVudENvbmN1cnJlbnRseSgpLmdldCgpKSk7
CiB9CiAKLX0KK3RlbXBsYXRlIHZvaWQgSlNTVkdWaWV3U3BlYzo6dmlzaXRBZGRpdGlvbmFsQ2hp
bGRyZW4oSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTU1ZHVmll
d1NwZWM6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImKTsKKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNT
ZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGVDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTU2VydmljZVdvcmtlckdsb2JhbFNjb3BlQ3VzdG9tLmNwcAko
cmV2aXNpb24gMjcyNzEwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNTZXJ2aWNl
V29ya2VyR2xvYmFsU2NvcGVDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCwxMiArMzQs
MTYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCi12b2lk
IEpTU2VydmljZVdvcmtlckdsb2JhbFNjb3BlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90
VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTU2Vy
dmljZVdvcmtlckdsb2JhbFNjb3BlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2
aXNpdG9yKQogewogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdCgmd3JhcHBlZCgpLmNsaWVudHMo
KSk7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KCZ3cmFwcGVkKCkucmVnaXN0cmF0aW9uKCkp
OwogfQogCit0ZW1wbGF0ZSB2b2lkIEpTU2VydmljZVdvcmtlckdsb2JhbFNjb3BlOjp2aXNpdEFk
ZGl0aW9uYWxDaGlsZHJlbihBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpT
U2VydmljZVdvcmtlckdsb2JhbFNjb3BlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90Vmlz
aXRvciYpOworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZgpJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNTdGF0aWNSYW5nZUN1c3RvbS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNTdGF0aWNSYW5nZUN1c3RvbS5jcHAJKHJl
dmlzaW9uIDI3MjcxMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU3RhdGljUmFu
Z2VDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw5ICszMCwxMyBAQAogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLXZvaWQgSlNTdGF0aWNSYW5nZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRy
ZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+
Cit2b2lkIEpTU3RhdGljUmFuZ2U6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZp
c2l0b3IpCiB7CiAgICAgd3JhcHBlZCgpLnZpc2l0Tm9kZXNDb25jdXJyZW50bHkodmlzaXRvcik7
CiB9CiAKK3RlbXBsYXRlIHZvaWQgSlNTdGF0aWNSYW5nZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRy
ZW4oSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTU3RhdGljUmFu
Z2U6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImKTsKKwogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNTdHls
ZVNoZWV0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU1N0eWxlU2hlZXRDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI3MTApCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU1N0eWxlU2hlZXRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zMCwxMSArMzAsMTUgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIEpTU3R5bGVT
aGVldDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikK
K3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTU3R5bGVTaGVldDo6dmlzaXRBZGRp
dGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB2aXNpdG9yLmFkZE9wYXF1
ZVJvb3Qocm9vdCgmd3JhcHBlZCgpKSk7CiB9CiAKK3RlbXBsYXRlIHZvaWQgSlNTdHlsZVNoZWV0
Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0
ZSB2b2lkIEpTU3R5bGVTaGVldDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3Im
KTsKKwogSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpKU0dsb2JhbE9iamVjdCos
IEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZjxTdHlsZVNoZWV0PiYmIHN0eWxl
U2hlZXQpCiB7CiAgICAgaWYgKHN0eWxlU2hlZXQtPmlzQ1NTU3R5bGVTaGVldCgpKQpJbmRleDog
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNUZXh0VHJhY2tDdWVDdXN0b20uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVGV4dFRyYWNrQ3VlQ3VzdG9t
LmNwcAkocmV2aXNpb24gMjcyNzEwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNU
ZXh0VHJhY2tDdWVDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3ICszOCw3IEBACiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCi1ib29sIEpTVGV4dFRy
YWNrQ3VlT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6
VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgU2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIq
KiByZWFzb24pCitib29sIEpTVGV4dFRyYWNrQ3VlT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1
ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgQWJzdHJhY3RT
bG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikKIHsKICAgICBKU1RleHRU
cmFja0N1ZSoganNUZXh0VHJhY2tDdWUgPSBqc0Nhc3Q8SlNUZXh0VHJhY2tDdWUqPihoYW5kbGUu
c2xvdCgpLT5hc0NlbGwoKSk7CiAgICAgVGV4dFRyYWNrQ3VlJiB0ZXh0VHJhY2tDdWUgPSBqc1Rl
eHRUcmFja0N1ZS0+d3JhcHBlZCgpOwpAQCAtODIsMTIgKzgyLDE2IEBAIEpTVmFsdWUgdG9KUyhK
U0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2IKICAgICByZXR1cm4gd3JhcChsZXhpY2FsR2xvYmFs
T2JqZWN0LCBnbG9iYWxPYmplY3QsIGN1ZSk7CiB9CiAKLXZvaWQgSlNUZXh0VHJhY2tDdWU6OnZp
c2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlw
ZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNUZXh0VHJhY2tDdWU6OnZpc2l0QWRkaXRpb25hbENoaWxk
cmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgaWYgKFRleHRUcmFjayogdGV4dFRyYWNrID0g
d3JhcHBlZCgpLnRyYWNrKCkpCiAgICAgICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChyb290KHRl
eHRUcmFjaykpOwogfQogCit0ZW1wbGF0ZSB2b2lkIEpTVGV4dFRyYWNrQ3VlOjp2aXNpdEFkZGl0
aW9uYWxDaGlsZHJlbihBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTVGV4
dFRyYWNrQ3VlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYpOworCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNUZXh0VHJhY2tDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTVGV4dFRyYWNrQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcyNzEwKQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNUZXh0VHJhY2tDdXN0b20uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zNiwxMSArMzYsMTUgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5h
bWVzcGFjZSBKU0M7CiAKLXZvaWQgSlNUZXh0VHJhY2s6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVu
KFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQg
SlNUZXh0VHJhY2s6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7
CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHJvb3QoJndyYXBwZWQoKSkpOwogfQogCit0ZW1w
bGF0ZSB2b2lkIEpTVGV4dFRyYWNrOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihBYnN0cmFjdFNs
b3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTVGV4dFRyYWNrOjp2aXNpdEFkZGl0aW9uYWxD
aGlsZHJlbihTbG90VmlzaXRvciYpOworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRp
ZgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNUZXh0VHJhY2tMaXN0Q3VzdG9t
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1RleHRUcmFj
a0xpc3RDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI3MTApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU1RleHRUcmFja0xpc3RDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiwx
MSArMzYsMTUgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAK
LXZvaWQgSlNUZXh0VHJhY2tMaXN0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RW
aXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNUZXh0
VHJhY2tMaXN0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewog
ICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChyb290KHdyYXBwZWQoKS5lbGVtZW50KCkpKTsKIH0K
ICAgICAKK3RlbXBsYXRlIHZvaWQgSlNUZXh0VHJhY2tMaXN0Ojp2aXNpdEFkZGl0aW9uYWxDaGls
ZHJlbihBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTVGV4dFRyYWNrTGlz
dDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKKwogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQogCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
VHJlZVdhbGtlckN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNUcmVlV2Fsa2VyQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcyNzEwKQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNUcmVlV2Fsa2VyQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjUsMTAgKzI1LDE0IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBKU1Ry
ZWVXYWxrZXI6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0
b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1RyZWVXYWxrZXI6OnZpc2l0
QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgaWYgKE5vZGVGaWx0
ZXIqIGZpbHRlciA9IHdyYXBwZWQoKS5maWx0ZXIoKSkKICAgICAgICAgdmlzaXRvci5hZGRPcGFx
dWVSb290KGZpbHRlcik7CiB9CiAKLX0KK3RlbXBsYXRlIHZvaWQgSlNUcmVlV2Fsa2VyOjp2aXNp
dEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRl
IHZvaWQgSlNUcmVlV2Fsa2VyOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNp
dG9yJik7CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTVW5kb0l0ZW1DdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTVW5kb0l0ZW1DdXN0b20uY3BwCShyZXZpc2lvbiAyNzI3MTApCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1VuZG9JdGVtQ3VzdG9tLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjksMTMgKzI5LDE3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9p
ZCBKU1VuZG9JdGVtOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2
aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNVbmRvSXRlbTo6dmlz
aXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB3cmFwcGVkKCku
dW5kb0hhbmRsZXIoKS52aXNpdEpTRnVuY3Rpb24odmlzaXRvcik7CiAgICAgd3JhcHBlZCgpLnJl
ZG9IYW5kbGVyKCkudmlzaXRKU0Z1bmN0aW9uKHZpc2l0b3IpOwogfQogCi1ib29sIEpTVW5kb0l0
ZW1Pd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtu
b3duPiBoYW5kbGUsIHZvaWQqLCBKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFy
KiogcmVhc29uKQordGVtcGxhdGUgdm9pZCBKU1VuZG9JdGVtOjp2aXNpdEFkZGl0aW9uYWxDaGls
ZHJlbihKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNVbmRvSXRl
bTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYpOworCitib29sIEpT
VW5kb0l0ZW1Pd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlND
OjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0
b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCiB7CiAgICAgaWYgKFVOTElLRUxZKHJlYXNvbikpCiAg
ICAgICAgICpyZWFzb24gPSAiRG9jdW1lbnQgaXMgYW4gb3BhcXVlIHJvb3QuIjsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVmFsdWVJbldyYXBwZWRPYmplY3QuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1ZhbHVlSW5XcmFwcGVkT2JqZWN0
LmgJKHJldmlzaW9uIDI3MjcxMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVmFs
dWVJbldyYXBwZWRPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtNDAsNyArNDAsNyBAQCBwdWJs
aWM6CiAgICAgb3BlcmF0b3IgSlNDOjpKU1ZhbHVlKCkgY29uc3Q7CiAgICAgZXhwbGljaXQgb3Bl
cmF0b3IgYm9vbCgpIGNvbnN0OwogICAgIEpTVmFsdWVJbldyYXBwZWRPYmplY3QmIG9wZXJhdG9y
PShjb25zdCBKU1ZhbHVlSW5XcmFwcGVkT2JqZWN0JiBvdGhlcik7Ci0gICAgdm9pZCB2aXNpdChK
U0M6OlNsb3RWaXNpdG9yJikgY29uc3Q7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4g
dm9pZCB2aXNpdChWaXNpdG9yJikgY29uc3Q7CiAgICAgdm9pZCBjbGVhcigpOwogCiBwcml2YXRl
OgpAQCAtOTgsNyArOTgsOCBAQCBpbmxpbmUgSlNWYWx1ZUluV3JhcHBlZE9iamVjdCYgSlNWYWx1
ZUluCiAgICAgcmV0dXJuICp0aGlzOwogfQogCi1pbmxpbmUgdm9pZCBKU1ZhbHVlSW5XcmFwcGVk
T2JqZWN0Ojp2aXNpdChKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKSBjb25zdAordGVtcGxhdGU8
dHlwZW5hbWUgVmlzaXRvcj4KK2lubGluZSB2b2lkIEpTVmFsdWVJbldyYXBwZWRPYmplY3Q6OnZp
c2l0KFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0CiB7CiAgICAgcmV0dXJuIFdURjo6c3dpdGNoT24o
bV92YWx1ZSwgW10gKEpTQzo6SlNWYWx1ZSkgewogICAgICAgICAvLyBOb3RoaW5nIHRvIHZpc2l0
LgpAQCAtMTA3LDYgKzEwOCw5IEBAIGlubGluZSB2b2lkIEpTVmFsdWVJbldyYXBwZWRPYmplY3Q6
OnZpc2kKICAgICB9KTsKIH0KIAordGVtcGxhdGUgdm9pZCBKU1ZhbHVlSW5XcmFwcGVkT2JqZWN0
Ojp2aXNpdChKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKSBjb25zdDsKK3RlbXBsYXRlIHZvaWQg
SlNWYWx1ZUluV3JhcHBlZE9iamVjdDo6dmlzaXQoSlNDOjpTbG90VmlzaXRvciYpIGNvbnN0Owor
CiBpbmxpbmUgdm9pZCBKU1ZhbHVlSW5XcmFwcGVkT2JqZWN0OjpjbGVhcigpCiB7CiAgICAgV1RG
Ojpzd2l0Y2hPbihtX3ZhbHVlLCBbXSAoV2VhayYgdmFsdWUpIHsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTVmlkZW9UcmFja0N1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNWaWRlb1RyYWNrQ3VzdG9tLmNwcAkocmV2aXNpb24g
MjcyNzEwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNWaWRlb1RyYWNrQ3VzdG9t
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsMTEgKzM1LDE1IEBACiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCi12b2lkIEpTVmlkZW9UcmFjazo6dmlzaXRBZGRp
dGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPgordm9pZCBKU1ZpZGVvVHJhY2s6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0
b3ImIHZpc2l0b3IpCiB7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHJvb3QoJndyYXBwZWQo
KSkpOwogfQogCit0ZW1wbGF0ZSB2b2lkIEpTVmlkZW9UcmFjazo6dmlzaXRBZGRpdGlvbmFsQ2hp
bGRyZW4oSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTVmlkZW9U
cmFjazo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYpOworCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNWaWRlb1RyYWNrTGlzdEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNWaWRlb1RyYWNrTGlzdEN1c3RvbS5jcHAJKHJldmlzaW9uIDI3
MjcxMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVmlkZW9UcmFja0xpc3RDdXN0
b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSwxMSArMzUsMTUgQEAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKLXZvaWQgSlNWaWRlb1RyYWNrTGlzdDo6dmlz
aXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBl
bmFtZSBWaXNpdG9yPgordm9pZCBKU1ZpZGVvVHJhY2tMaXN0Ojp2aXNpdEFkZGl0aW9uYWxDaGls
ZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChyb290
KHdyYXBwZWQoKS5lbGVtZW50KCkpKTsKIH0KIAordGVtcGxhdGUgdm9pZCBKU1ZpZGVvVHJhY2tM
aXN0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1w
bGF0ZSB2b2lkIEpTVmlkZW9UcmFja0xpc3Q6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RW
aXNpdG9yJik7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYkdMMlJlbmRlcmluZ0NvbnRleHRDdXN0b20uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViR0wyUmVuZGVy
aW5nQ29udGV4dEN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjcxMCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTV2ViR0wyUmVuZGVyaW5nQ29udGV4dEN1c3RvbS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTMzLDEyICszMywxNiBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogdXNpbmcgbmFt
ZXNwYWNlIEpTQzsKIAotdm9pZCBKU1dlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OnZpc2l0QWRkaXRp
b25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlz
aXRvcj4KK3ZvaWQgSlNXZWJHTDJSZW5kZXJpbmdDb250ZXh0Ojp2aXNpdEFkZGl0aW9uYWxDaGls
ZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdCgmd3Jh
cHBlZCgpKTsKICAgICB3cmFwcGVkKCkuYWRkTWVtYmVyc1RvT3BhcXVlUm9vdHModmlzaXRvcik7
CiB9CiAKK3RlbXBsYXRlIHZvaWQgSlNXZWJHTDJSZW5kZXJpbmdDb250ZXh0Ojp2aXNpdEFkZGl0
aW9uYWxDaGlsZHJlbihKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQg
SlNXZWJHTDJSZW5kZXJpbmdDb250ZXh0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNs
b3RWaXNpdG9yJik7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJM
RShXRUJHTCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViR0xSZW5kZXJp
bmdDb250ZXh0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU1dlYkdMUmVuZGVyaW5nQ29udGV4dEN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjcxMCkK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViR0xSZW5kZXJpbmdDb250ZXh0Q3Vz
dG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsMTIgKzMzLDE2IEBACiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCi12b2lkIEpTV2ViR0xSZW5kZXJpbmdDb250
ZXh0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBs
YXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2aXNp
dEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHZpc2l0b3IuYWRk
T3BhcXVlUm9vdCgmd3JhcHBlZCgpKTsKICAgICB3cmFwcGVkKCkuYWRkTWVtYmVyc1RvT3BhcXVl
Um9vdHModmlzaXRvcik7CiB9CiAKK3RlbXBsYXRlIHZvaWQgSlNXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBs
YXRlIHZvaWQgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVu
KFNsb3RWaXNpdG9yJik7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVO
QUJMRShXRUJHTCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyR2xv
YmFsU2NvcGVCYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU1dvcmtlckdsb2JhbFNjb3BlQmFzZS5jcHAJKHJldmlzaW9uIDI3MjcxMCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyR2xvYmFsU2NvcGVCYXNlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtOTIsNyArOTIsOCBAQCB2b2lkIEpTV29ya2VyR2xvYmFsU2NvcGVCYXNlOjpm
aW5pc2hDcmVhCiAgICAgQVNTRVJUKGluaGVyaXRzKHZtLCBpbmZvKCkpKTsKIH0KIAotdm9pZCBK
U1dvcmtlckdsb2JhbFNjb3BlQmFzZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNXb3Jr
ZXJHbG9iYWxTY29wZUJhc2U6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRv
ciYgdmlzaXRvcikKIHsKICAgICBKU1dvcmtlckdsb2JhbFNjb3BlQmFzZSogdGhpc09iamVjdCA9
IGpzQ2FzdDxKU1dvcmtlckdsb2JhbFNjb3BlQmFzZSo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19P
QkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTEwMCw2ICsxMDEsOCBAQCB2
b2lkIEpTV29ya2VyR2xvYmFsU2NvcGVCYXNlOjp2aXNpdENoaWxkCiAgICAgdmlzaXRvci5hcHBl
bmQodGhpc09iamVjdC0+bV9wcm94eSk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU1dv
cmtlckdsb2JhbFNjb3BlQmFzZSk7CisKIHZvaWQgSlNXb3JrZXJHbG9iYWxTY29wZUJhc2U6OmRl
c3Ryb3koSlNDZWxsKiBjZWxsKQogewogICAgIHN0YXRpY19jYXN0PEpTV29ya2VyR2xvYmFsU2Nv
cGVCYXNlKj4oY2VsbCktPkpTV29ya2VyR2xvYmFsU2NvcGVCYXNlOjp+SlNXb3JrZXJHbG9iYWxT
Y29wZUJhc2UoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyR2xv
YmFsU2NvcGVCYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNXb3JrZXJHbG9iYWxTY29wZUJhc2UuaAkocmV2aXNpb24gMjcyNzEwKQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNXb3JrZXJHbG9iYWxTY29wZUJhc2UuaAkod29ya2luZyBjb3B5
KQpAQCAtNzksNyArNzksNyBAQCBwcm90ZWN0ZWQ6CiAgICAgSlNXb3JrZXJHbG9iYWxTY29wZUJh
c2UoSlNDOjpWTSYsIEpTQzo6U3RydWN0dXJlKiwgUmVmUHRyPFdvcmtlckdsb2JhbFNjb3BlPiYm
KTsKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mLCBKU0M6OkpTUHJveHkqKTsKIAot
ICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNp
dG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogcHJpdmF0ZToKICAgICBSZWZQ
dHI8V29ya2VyR2xvYmFsU2NvcGU+IG1fd3JhcHBlZDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTV29ya2VyR2xvYmFsU2NvcGVDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyR2xvYmFsU2NvcGVDdXN0b20uY3BwCShy
ZXZpc2lvbiAyNzI3MTApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckds
b2JhbFNjb3BlQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNyArMzMsOCBAQAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAotdm9pZCBKU1dvcmtlckds
b2JhbFNjb3BlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikK
K3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTV29ya2VyR2xvYmFsU2NvcGU6OnZp
c2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgaWYgKGF1dG8q
IGxvY2F0aW9uID0gd3JhcHBlZCgpLm9wdGlvbmFsTG9jYXRpb24oKSkKICAgICAgICAgdmlzaXRv
ci5hZGRPcGFxdWVSb290KGxvY2F0aW9uKTsKQEAgLTQ4LDYgKzQ5LDkgQEAgdm9pZCBKU1dvcmtl
ckdsb2JhbFNjb3BlOjp2aXNpdEFkZGl0aW9uYQogICAgIHdyYXBwZWQoKS52aXNpdEpTRXZlbnRM
aXN0ZW5lcnModmlzaXRvcik7CiB9CiAKK3RlbXBsYXRlIHZvaWQgSlNXb3JrZXJHbG9iYWxTY29w
ZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oQWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxh
dGUgdm9pZCBKU1dvcmtlckdsb2JhbFNjb3BlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90
VmlzaXRvciYpOworCiBKU1ZhbHVlIEpTV29ya2VyR2xvYmFsU2NvcGU6OnF1ZXVlTWljcm90YXNr
KEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUmIGNhbGxGcmFt
ZSkKIHsKICAgICBWTSYgdm0gPSBsZXhpY2FsR2xvYmFsT2JqZWN0LnZtKCk7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlck5hdmlnYXRvckN1c3RvbS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrZXJOYXZpZ2F0b3JDdXN0
b20uY3BwCShyZXZpc2lvbiAyNzI3MTApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U1dvcmtlck5hdmlnYXRvckN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDkgKzI4LDEz
IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBKU1dvcmtlck5hdmlnYXRvcjo6dmlz
aXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRl
PHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTV29ya2VyTmF2aWdhdG9yOjp2aXNpdEFkZGl0aW9u
YWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9v
dChzdGF0aWNfY2FzdDxOYXZpZ2F0b3JCYXNlKj4oJndyYXBwZWQoKSkpOwogfQogCi19Cit0ZW1w
bGF0ZSB2b2lkIEpTV29ya2VyTmF2aWdhdG9yOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6
OkFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNXb3JrZXJOYXZpZ2F0b3I6
OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImKTsKKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrbGV0
R2xvYmFsU2NvcGVCYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU1dvcmtsZXRHbG9iYWxTY29wZUJhc2UuY3BwCShyZXZpc2lvbiAyNzI3MTApCisrKyBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtsZXRHbG9iYWxTY29wZUJhc2UuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC04Miw3ICs4Miw4IEBAIHZvaWQgSlNXb3JrbGV0R2xvYmFsU2NvcGVC
YXNlOjpmaW5pc2hDcmUKICAgICBBU1NFUlQoaW5oZXJpdHModm0sIGluZm8oKSkpOwogfQogCi12
b2lkIEpTV29ya2xldEdsb2JhbFNjb3BlQmFzZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGws
IFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQg
SlNXb3JrbGV0R2xvYmFsU2NvcGVCYXNlOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGws
IFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1dv
cmtsZXRHbG9iYWxTY29wZUJhc2UqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVS
SVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC05MCw2ICs5MSw4IEBAIHZvaWQgSlNXb3JrbGV0
R2xvYmFsU2NvcGVCYXNlOjp2aXNpdENoaWwKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0
LT5tX3Byb3h5KTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTV29ya2xldEdsb2JhbFNj
b3BlQmFzZSk7CisKIHZvaWQgSlNXb3JrbGV0R2xvYmFsU2NvcGVCYXNlOjpkZXN0cm95KEpTQ2Vs
bCogY2VsbCkKIHsKICAgICBzdGF0aWNfY2FzdDxKU1dvcmtsZXRHbG9iYWxTY29wZUJhc2UqPihj
ZWxsKS0+SlNXb3JrbGV0R2xvYmFsU2NvcGVCYXNlOjp+SlNXb3JrbGV0R2xvYmFsU2NvcGVCYXNl
KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtsZXRHbG9iYWxTY29w
ZUJhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmts
ZXRHbG9iYWxTY29wZUJhc2UuaAkocmV2aXNpb24gMjcyNzEwKQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNXb3JrbGV0R2xvYmFsU2NvcGVCYXNlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTY3LDcgKzY3LDcgQEAgcHJvdGVjdGVkOgogICAgIEpTV29ya2xldEdsb2JhbFNjb3BlQmFzZShK
U0M6OlZNJiwgSlNDOjpTdHJ1Y3R1cmUqLCBSZWZQdHI8V29ya2xldEdsb2JhbFNjb3BlPiYmKTsK
ICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mLCBKU0M6OkpTUHJveHkqKTsKIAotICAg
IHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9y
Jik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogcHJpdmF0ZToKICAgICBSZWZQdHI8
V29ya2xldEdsb2JhbFNjb3BlPiBtX3dyYXBwZWQ7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU1hNTEh0dHBSZXF1ZXN0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU1hNTEh0dHBSZXF1ZXN0Q3VzdG9tLmNwcAkocmV2aXNpb24g
MjcyNzEwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNYTUxIdHRwUmVxdWVzdEN1
c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDcgKzQxLDggQEAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKLXZvaWQgSlNYTUxIdHRwUmVxdWVzdDo6dmlz
aXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBl
bmFtZSBWaXNpdG9yPgordm9pZCBKU1hNTEh0dHBSZXF1ZXN0Ojp2aXNpdEFkZGl0aW9uYWxDaGls
ZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGlmIChhdXRvKiB1cGxvYWQgPSB3cmFwcGVk
KCkub3B0aW9uYWxVcGxvYWQoKSkKICAgICAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHVwbG9h
ZCk7CkBAIC01MCw2ICs1MSw5IEBAIHZvaWQgSlNYTUxIdHRwUmVxdWVzdDo6dmlzaXRBZGRpdGlv
bmFsQ2gKICAgICAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHJlc3BvbnNlRG9jdW1lbnQpOwog
fQogCit0ZW1wbGF0ZSB2b2lkIEpTWE1MSHR0cFJlcXVlc3Q6OnZpc2l0QWRkaXRpb25hbENoaWxk
cmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNYTUxIdHRwUmVxdWVz
dDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKKwogSlNWYWx1ZSBKU1hN
TEh0dHBSZXF1ZXN0OjpyZXNwb25zZShKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVj
dCkgY29uc3QKIHsKICAgICBhdXRvIGNhY2hlUmVzdWx0ID0gWyZdIChKU1ZhbHVlIHZhbHVlKSAt
PiBKU1ZhbHVlIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTWFBhdGhSZXN1
bHRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
WFBhdGhSZXN1bHRDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI3MTApCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU1hQYXRoUmVzdWx0Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzEsNyArMzEsOCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgSlNYUGF0aFJlc3Vs
dDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3Rl
bXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTWFBhdGhSZXN1bHQ6OnZpc2l0QWRkaXRp
b25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0byYgdmFsdWUgPSB3cmFw
cGVkKCkudmFsdWUoKTsKICAgICBpZiAodmFsdWUuaXNOb2RlU2V0KCkpIHsKQEAgLTQxLDQgKzQy
LDcgQEAgdm9pZCBKU1hQYXRoUmVzdWx0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZAogICAgIH0KIH0K
IAordGVtcGxhdGUgdm9pZCBKU1hQYXRoUmVzdWx0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihK
U0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNYUGF0aFJlc3VsdDo6
dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYpOworCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlVHlw
ZWRBcnJheUNvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL1dlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlci5jcHAJKHJldmlzaW9uIDI3MjcxMCkK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU2LDcgKzU2LDcgQEAgYm9vbCBXZWJDb3JlVHlwZWRB
cnJheUNvbnRyb2xsZXI6OmlzQXRvbQogICAgIHJldHVybiBtX2FsbG93QXRvbWljc1dhaXQ7CiB9
CiAKLWJvb2wgV2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyOjpKU0FycmF5QnVmZmVyT3duZXI6
OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFu
ZGxlLCB2b2lkKiwgSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNv
bikKK2Jvb2wgV2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyOjpKU0FycmF5QnVmZmVyT3duZXI6
OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFu
ZGxlLCB2b2lkKiwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFy
KiogcmVhc29uKQogewogICAgIGlmIChVTkxJS0VMWShyZWFzb24pKQogICAgICAgICAqcmVhc29u
ID0gIkFycmF5QnVmZmVyIGlzIG9wYXF1ZSByb290IjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL1dlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlci5oCShy
ZXZpc2lvbiAyNzI3MTApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlVHlw
ZWRBcnJheUNvbnRyb2xsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDgsNyArNDgsNyBAQCBwdWJs
aWM6CiBwcml2YXRlOgogICAgIGNsYXNzIEpTQXJyYXlCdWZmZXJPd25lciA6IHB1YmxpYyBKU0M6
OldlYWtIYW5kbGVPd25lciB7CiAgICAgcHVibGljOgotICAgICAgICBib29sIGlzUmVhY2hhYmxl
RnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQs
IEpTQzo6U2xvdFZpc2l0b3ImLCBjb25zdCBjaGFyKiopIG92ZXJyaWRlOworICAgICAgICBib29s
IGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZv
aWQqIGNvbnRleHQsIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYsIGNvbnN0IGNoYXIqKikgb3Zl
cnJpZGU7CiAgICAgICAgIHZvaWQgZmluYWxpemUoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwg
dm9pZCogY29udGV4dCkgb3ZlcnJpZGU7CiAgICAgfTsKIApJbmRleDogU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0JKHJldmlzaW9uIDI3
MjcxMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpT
LnBtCSh3b3JraW5nIGNvcHkpCkBAIC0zMDc4LDggKzMwNzgsOCBAQCBzdWIgR2VuZXJhdGVIZWFk
ZXIKIAogICAgICMgdmlzaXQgZnVuY3Rpb24KICAgICBpZiAoJG5lZWRzVmlzaXRDaGlsZHJlbikg
ewotICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hp
bGRyZW4oSlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpO1xuIik7Ci0gICAgICAgIHB1c2goQGhl
YWRlckNvbnRlbnQsICIgICAgdm9pZCB2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RW
aXNpdG9yJik7XG4iKSBpZiAkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntKU0N1c3Rv
bU1hcmtGdW5jdGlvbn07CisgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgREVDTEFS
RV9WSVNJVF9DSElMRFJFTjtcbiIpOworICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgdmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4o
VmlzaXRvciYpO1xuIikgaWYgJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57SlNDdXN0
b21NYXJrRnVuY3Rpb259OwogICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiXG4iKTsKIAog
ICAgICAgICBpZiAoJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57SlNDdXN0b21NYXJr
RnVuY3Rpb259KSB7CkBAIC0zMDk0LDcgKzMwOTQsNyBAQCBzdWIgR2VuZXJhdGVIZWFkZXIKICAg
ICAgICAgICAgICMgdGhhdCB0aGUgR0MgY2FsbHMgdG8gYXNrIGFuIG9iamVjdCBpcyBpdCB3b3Vs
ZCBsaWtlIHRvIG1hcmsgYW55dGhpbmcgZWxzZSBhZnRlciB0aGUKICAgICAgICAgICAgICMgcHJv
Z3JhbSByZXN1bWVkIHNpbmNlIHRoZSBsYXN0IGNhbGwgdG8gdmlzaXRDaGlsZHJlbiBvciB2aXNp
dE91dHB1dENvbnN0cmFpbnRzLiBTaW5jZQogICAgICAgICAgICAgIyB0aGlzIGp1c3QgY2FsbHMg
dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4sIHlvdSB1c3VhbGx5IGRvbid0IGhhdmUgdG8gd29ycnkg
YWJvdXQgdGhpcy4KLSAgICAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgc3RhdGlj
IHZvaWQgdmlzaXRPdXRwdXRDb25zdHJhaW50cyhKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJik7
XG4iKTsKKyAgICAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgc3RhdGljIHZvaWQg
dmlzaXRPdXRwdXRDb25zdHJhaW50cyhKU0NlbGwqLCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3Im
KTtcbiIpOwogICAgICAgICB9CiAgICAgfQogCkBAIC0zMjE1LDcgKzMyMTUsNyBAQCBzdWIgR2Vu
ZXJhdGVIZWFkZXIKICAgICAgICAgfQogICAgICAgICAkaGVhZGVySW5jbHVkZXN7Ijx3dGYvTmV2
ZXJEZXN0cm95ZWQuaD4ifSA9IDE7CiAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJwdWJs
aWM6XG4iKTsKLSAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICBib29sIGlzUmVhY2hh
YmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRl
eHQsIEpTQzo6U2xvdFZpc2l0b3ImLCBjb25zdCBjaGFyKiopICR7b3ZlcnJpZGVEZWNsfTtcbiIp
OworICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIGJvb2wgaXNSZWFjaGFibGVGcm9t
T3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCwgSlND
OjpBYnN0cmFjdFNsb3RWaXNpdG9yJiwgY29uc3QgY2hhcioqKSAke292ZXJyaWRlRGVjbH07XG4i
KTsKICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICB2b2lkIGZpbmFsaXplKEpTQzo6
SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQpICR7b3ZlcnJpZGVEZWNsfTtcbiIp
OwogICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAifTtcbiIpOwogICAgICAgICBwdXNoKEBo
ZWFkZXJDb250ZW50LCAiXG4iKTsKQEAgLTQ5MzksNiArNDkzOSw3IEBAIHN1YiBHZW5lcmF0ZUlt
cGxlbWVudGF0aW9uCiAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIkRPTUlzb1N1YnNwYWNlcy5oIik7
CiAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIldlYkNvcmVKU0NsaWVudERhdGEuaCIpOwogICAgIEFk
ZFRvSW1wbEluY2x1ZGVzKCI8SmF2YVNjcmlwdENvcmUvSlNEZXN0cnVjdGlibGVPYmplY3RIZWFw
Q2VsbFR5cGUuaD4iKTsKKyAgICBBZGRUb0ltcGxJbmNsdWRlcygiPEphdmFTY3JpcHRDb3JlL1Ns
b3RWaXNpdG9yTWFjcm9zLmg+Iik7CiAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIjxKYXZhU2NyaXB0
Q29yZS9TdWJzcGFjZUlubGluZXMuaD4iKTsKICAgICBwdXNoKEBpbXBsQ29udGVudCwgIkpTQzo6
SXNvU3Vic3BhY2UqICR7Y2xhc3NOYW1lfTo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKVxu
Iik7CiAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ7XG4iKTsKQEAgLTQ5NjYsNyArNDk2Nyw4IEBA
IHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ9XG5c
biIpOwogCiAgICAgaWYgKCRuZWVkc1Zpc2l0Q2hpbGRyZW4pIHsKLSAgICAgICAgcHVzaChAaW1w
bENvbnRlbnQsICJ2b2lkICR7Y2xhc3NOYW1lfTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGws
IFNsb3RWaXNpdG9yJiB2aXNpdG9yKVxuIik7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
dGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj5cbiIpOworICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgInZvaWQgJHtjbGFzc05hbWV9Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZp
c2l0b3ImIHZpc2l0b3IpXG4iKTsKICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ7XG4iKTsK
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2Fz
dDwke2NsYXNzTmFtZX0qPihjZWxsKTtcbiIpOwogICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwg
IiAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7XG4iKTsK
QEAgLTQ5OTEsOCArNDk5MywxMCBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgICAg
ICAgICAgfQogICAgICAgICB9CiAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAifVxuXG4iKTsK
KyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJERUZJTkVfVklTSVRfQ0hJTERSRU4oJHtjbGFz
c05hbWV9KTtcblxuIik7CisKICAgICAgICAgaWYgKCRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmli
dXRlcy0+e0pTQ3VzdG9tTWFya0Z1bmN0aW9ufSkgewotICAgICAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsICJ2b2lkICR7Y2xhc3NOYW1lfTo6dmlzaXRPdXRwdXRDb25zdHJhaW50cyhKU0NlbGwq
IGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKVxuIik7CisgICAgICAgICAgICBwdXNoKEBpbXBs
Q29udGVudCwgInZvaWQgJHtjbGFzc05hbWV9Ojp2aXNpdE91dHB1dENvbnN0cmFpbnRzKEpTQ2Vs
bCogY2VsbCwgQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcilcbiIpOwogICAgICAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICJ7XG4iKTsKICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50
LCAiICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8JHtjbGFzc05hbWV9Kj4oY2VsbCk7XG4i
KTsKICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIEFTU0VSVF9HQ19PQkpFQ1Rf
SU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTtcbiIpOwpAQCAtNTAzMyw3ICs1MDM3LDcgQEAg
c3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICB9CiAKICAgICBpZiAoU2hvdWxkR2VuZXJh
dGVXcmFwcGVyT3duZXJDb2RlKCRoYXNQYXJlbnQsICRpbnRlcmZhY2UpICYmICFHZXRDdXN0b21J
c1JlYWNoYWJsZSgkaW50ZXJmYWNlKSkgewotICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgImJv
b2wgSlMke2ludGVyZmFjZU5hbWV9T3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpT
Qzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgU2xvdFZpc2l0b3ImIHZpc2l0
b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pXG4iKTsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICJib29sIEpTJHtpbnRlcmZhY2VOYW1lfU93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290
cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIEFic3RyYWN0U2xvdFZp
c2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pXG4iKTsKICAgICAgICAgcHVzaChA
aW1wbENvbnRlbnQsICJ7XG4iKTsKICAgICAgICAgIyBBbGwgQWN0aXZlRE9NT2JqZWN0cyBpbXBs
ZW1lbnQgaGFzUGVuZGluZ0FjdGl2aXR5KCksIGJ1dCBub3QgYWxsIG9mIHRoZW0KICAgICAgICAg
IyBpbmNyZW1lbnQgdGhlaXIgQysrIHJlZmVyZW5jZSBjb3VudHMgd2hlbiBoYXNQZW5kaW5nQWN0
aXZpdHkoKSBiZWNvbWVzCkBAIC02NDMyLDcgKzY0MzYsNyBAQCBzdWIgR2VuZXJhdGVDYWxsYmFj
a0hlYWRlckNvbnRlbnQKICAgICAgICAgcHVzaChAJGNvbnRlbnRSZWYsICIgICAgYm9vbCBoYXND
YWxsYmFjaygpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fZGF0YSAmJiBtX2RhdGEtPmNhbGxiYWNr
KCk7IH1cblxuIik7CiAgICAgfQogCi0gICAgcHVzaChAJGNvbnRlbnRSZWYsICIgICAgdm9pZCB2
aXNpdEpTRnVuY3Rpb24oSlNDOjpTbG90VmlzaXRvciYpIG92ZXJyaWRlO1xuXG4iKSBpZiAkaW50
ZXJmYWNlT3JDYWxsYmFjay0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57SXNXZWFrQ2FsbGJhY2t9Owor
ICAgIHB1c2goQCRjb250ZW50UmVmLCAiICAgIHZvaWQgdmlzaXRKU0Z1bmN0aW9uKEpTQzo6QWJz
dHJhY3RTbG90VmlzaXRvciYpIG92ZXJyaWRlO1xuXG4iKSBpZiAkaW50ZXJmYWNlT3JDYWxsYmFj
ay0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57SXNXZWFrQ2FsbGJhY2t9OwogCiAgICAgcHVzaChAJGNv
bnRlbnRSZWYsICIgICAgJHtjYWxsYmFja0RhdGFUeXBlfSogbV9kYXRhO1xuIik7CiAgICAgcHVz
aChAJGNvbnRlbnRSZWYsICJ9O1xuXG4iKTsKQEAgLTY2MjMsNyArNjYyNyw3IEBAIHN1YiBHZW5l
cmF0ZUNhbGxiYWNrSW1wbGVtZW50YXRpb25Db250ZW4KICAgICB9CiAKICAgICBpZiAoJGludGVy
ZmFjZU9yQ2FsbGJhY2stPmV4dGVuZGVkQXR0cmlidXRlcy0+e0lzV2Vha0NhbGxiYWNrfSkgewot
ICAgICAgICBwdXNoKEAkY29udGVudFJlZiwgInZvaWQgJHtjbGFzc05hbWV9Ojp2aXNpdEpTRnVu
Y3Rpb24oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcilcbiIpOworICAgICAgICBwdXNoKEAkY29u
dGVudFJlZiwgInZvaWQgJHtjbGFzc05hbWV9Ojp2aXNpdEpTRnVuY3Rpb24oSlNDOjpBYnN0cmFj
dFNsb3RWaXNpdG9yJiB2aXNpdG9yKVxuIik7CiAgICAgICAgIHB1c2goQCRjb250ZW50UmVmLCAi
e1xuIik7CiAgICAgICAgIHB1c2goQCRjb250ZW50UmVmLCAiICAgIG1fZGF0YS0+dmlzaXRKU0Z1
bmN0aW9uKHZpc2l0b3IpO1xuIik7CiAgICAgICAgIHB1c2goQCRjb250ZW50UmVmLCAifVxuXG4i
KTsKQEAgLTY3MzQsNiArNjczOCw3IEBAIHN1YiBHZW5lcmF0ZUl0ZXJhYmxlRGVmaW5pdGlvbgog
ICAgIG15ICR2aXNpYmxlSW50ZXJmYWNlTmFtZSA9ICRjb2RlR2VuZXJhdG9yLT5HZXRWaXNpYmxl
SW50ZXJmYWNlTmFtZSgkaW50ZXJmYWNlKTsKIAogICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJKU0RP
TUl0ZXJhdG9yLmgiKTsKKyAgICBBZGRUb0ltcGxJbmNsdWRlcygiPEphdmFTY3JpcHRDb3JlL1Ns
b3RWaXNpdG9yTWFjcm9zLmg+Iik7CiAKICAgICByZXR1cm4gdW5sZXNzIElzS2V5VmFsdWVJdGVy
YWJsZUludGVyZmFjZSgkaW50ZXJmYWNlKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0Fj
dGl2ZURPTUNhbGxiYWNrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0FjdGl2
ZURPTUNhbGxiYWNrLmgJKHJldmlzaW9uIDI3MjcxMCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9B
Y3RpdmVET01DYWxsYmFjay5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw3IEBACiAjaW5j
bHVkZSAiQ29udGV4dERlc3RydWN0aW9uT2JzZXJ2ZXIuaCIKIAogbmFtZXNwYWNlIEpTQyB7Citj
bGFzcyBBYnN0cmFjdFNsb3RWaXNpdG9yOwogY2xhc3MgU2xvdFZpc2l0b3I7CiB9CiAKQEAgLTU1
LDcgKzU2LDcgQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgYWN0aXZlRE9NT2Jq
ZWN0c0FyZVN1c3BlbmRlZCgpIGNvbnN0OwogICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgYWN0aXZl
RE9NT2JqZWN0QXJlU3RvcHBlZCgpIGNvbnN0OwogICAgIAotICAgIHZpcnR1YWwgdm9pZCB2aXNp
dEpTRnVuY3Rpb24oSlNDOjpTbG90VmlzaXRvciYpIHsgfQorICAgIHZpcnR1YWwgdm9pZCB2aXNp
dEpTRnVuY3Rpb24oSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJikgeyB9CiB9OwogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRMaXN0ZW5lci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9FdmVudExpc3RlbmVyLmgJKHJldmlz
aW9uIDI3MjcxMCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9FdmVudExpc3RlbmVyLmgJKHdvcmtp
bmcgY29weSkKQEAgLTI0LDggKzI0LDggQEAKICNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgogCiBu
YW1lc3BhY2UgSlNDIHsKK2NsYXNzIEFic3RyYWN0U2xvdFZpc2l0b3I7CiBjbGFzcyBKU09iamVj
dDsKLWNsYXNzIFNsb3RWaXNpdG9yOwogfQogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC01Miw3
ICs1Miw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlRXZlbnQoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCYsIEV2ZW50JikgPSAwOwogICAgIHZpcnR1YWwgYm9vbCB3YXNDcmVhdGVk
RnJvbU1hcmt1cCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAKLSAgICB2aXJ0dWFsIHZvaWQg
dmlzaXRKU0Z1bmN0aW9uKEpTQzo6U2xvdFZpc2l0b3ImKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQg
dmlzaXRKU0Z1bmN0aW9uKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpIHsgfQogCiAgICAgdmly
dHVhbCBib29sIGlzQXR0cmlidXRlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICBUeXBl
IHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Rv
bS9FdmVudFRhcmdldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50
VGFyZ2V0LmNwcAkocmV2aXNpb24gMjcyNzEwKQorKysgU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50
VGFyZ2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzg0LDcgKzM4NCw4IEBAIHZvaWQgRXZlbnRU
YXJnZXQ6OnJlbW92ZUFsbEV2ZW50TGlzdGVuZXIKICAgICB0aHJlYWREYXRhLnNldElzSW5SZW1v
dmVBbGxFdmVudExpc3RlbmVycyhmYWxzZSk7CiB9CiAKLXZvaWQgRXZlbnRUYXJnZXQ6OnZpc2l0
SlNFdmVudExpc3RlbmVycyhKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlw
ZW5hbWUgVmlzaXRvcj4KK3ZvaWQgRXZlbnRUYXJnZXQ6OnZpc2l0SlNFdmVudExpc3RlbmVycyhW
aXNpdG9yJiB2aXNpdG9yKQogewogICAgIEV2ZW50VGFyZ2V0RGF0YSogZGF0YSA9IGV2ZW50VGFy
Z2V0RGF0YUNvbmN1cnJlbnRseSgpOwogICAgIGlmICghZGF0YSkKQEAgLTM5Niw2ICszOTcsOSBA
QCB2b2lkIEV2ZW50VGFyZ2V0Ojp2aXNpdEpTRXZlbnRMaXN0ZW5lcnMoCiAgICAgICAgIGxpc3Rl
bmVyLT52aXNpdEpTRnVuY3Rpb24odmlzaXRvcik7CiB9CiAKK3RlbXBsYXRlIHZvaWQgRXZlbnRU
YXJnZXQ6OnZpc2l0SlNFdmVudExpc3RlbmVycyhKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKTsK
K3RlbXBsYXRlIHZvaWQgRXZlbnRUYXJnZXQ6OnZpc2l0SlNFdmVudExpc3RlbmVycyhKU0M6OlNs
b3RWaXNpdG9yJik7CisKIHZvaWQgRXZlbnRUYXJnZXQ6OmludmFsaWRhdGVFdmVudExpc3RlbmVy
UmVnaW9ucygpCiB7CiAgICAgaWYgKGlzPEVsZW1lbnQ+KCp0aGlzKSkgewpJbmRleDogU291cmNl
L1dlYkNvcmUvZG9tL0V2ZW50VGFyZ2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
ZG9tL0V2ZW50VGFyZ2V0LmgJKHJldmlzaW9uIDI3MjcxMCkKKysrIFNvdXJjZS9XZWJDb3JlL2Rv
bS9FdmVudFRhcmdldC5oCSh3b3JraW5nIGNvcHkpCkBAIC05Nyw3ICs5Nyw3IEBAIHB1YmxpYzoK
ICAgICB2b2lkIGZpcmVFdmVudExpc3RlbmVycyhFdmVudCYsIEV2ZW50SW52b2tlUGhhc2UpOwog
ICAgIGJvb2wgaXNGaXJpbmdFdmVudExpc3RlbmVycygpIGNvbnN0OwogCi0gICAgdm9pZCB2aXNp
dEpTRXZlbnRMaXN0ZW5lcnMoSlNDOjpTbG90VmlzaXRvciYpOworICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFZpc2l0b3I+IHZvaWQgdmlzaXRKU0V2ZW50TGlzdGVuZXJzKFZpc2l0b3ImKTsKICAgICB2
b2lkIGludmFsaWRhdGVKU0V2ZW50TGlzdGVuZXJzKEpTQzo6SlNPYmplY3QqKTsKIAogICAgIGNv
bnN0IEV2ZW50VGFyZ2V0RGF0YSogZXZlbnRUYXJnZXREYXRhKCkgY29uc3Q7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9kb20vTXV0YXRpb25SZWNvcmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2RvbS9NdXRhdGlvblJlY29yZC5jcHAJKHJldmlzaW9uIDI3MjcxMCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2RvbS9NdXRhdGlvblJlY29yZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDcg
KzQxLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBuYW1lc3BhY2UgewogCi1zdGF0aWMgdm9p
ZCB2aXNpdE5vZGVMaXN0KEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IsIE5vZGVMaXN0JiBub2Rl
TGlzdCkKK3N0YXRpYyB2b2lkIHZpc2l0Tm9kZUxpc3QoSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9y
JiB2aXNpdG9yLCBOb2RlTGlzdCYgbm9kZUxpc3QpCiB7CiAgICAgQVNTRVJUKCFub2RlTGlzdC5p
c0xpdmVOb2RlTGlzdCgpKTsKICAgICB1bnNpZ25lZCBsZW5ndGggPSBub2RlTGlzdC5sZW5ndGgo
KTsKQEAgLTY4LDcgKzY4LDcgQEAgcHJpdmF0ZToKICAgICBOb2RlKiBwcmV2aW91c1NpYmxpbmco
KSBvdmVycmlkZSB7IHJldHVybiBtX3ByZXZpb3VzU2libGluZy5nZXQoKTsgfQogICAgIE5vZGUq
IG5leHRTaWJsaW5nKCkgb3ZlcnJpZGUgeyByZXR1cm4gbV9uZXh0U2libGluZy5nZXQoKTsgfQog
Ci0gICAgdm9pZCB2aXNpdE5vZGVzQ29uY3VycmVudGx5KEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0
b3IpIGNvbnN0IGZpbmFsCisgICAgdm9pZCB2aXNpdE5vZGVzQ29uY3VycmVudGx5KEpTQzo6QWJz
dHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikgY29uc3QgZmluYWwKICAgICB7CiAgICAgICAgIHZp
c2l0b3IuYWRkT3BhcXVlUm9vdChyb290KG1fdGFyZ2V0LnB0cigpKSk7CiAgICAgICAgIGlmICht
X2FkZGVkTm9kZXMpCkBAIC0xMDUsNyArMTA1LDcgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJu
IG5vZGVMaXN0LmdldCgpOwogICAgIH0KIAotICAgIHZvaWQgdmlzaXROb2Rlc0NvbmN1cnJlbnRs
eShKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKSBjb25zdCBmaW5hbAorICAgIHZvaWQgdmlzaXRO
b2Rlc0NvbmN1cnJlbnRseShKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0
IGZpbmFsCiAgICAgewogICAgICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qocm9vdChtX3Rhcmdl
dC5wdHIoKSkpOwogICAgIH0KQEAgLTE2NCw3ICsxNjQsNyBAQCBwcml2YXRlOgogCiAgICAgU3Ry
aW5nIG9sZFZhbHVlKCkgb3ZlcnJpZGUgeyByZXR1cm4gU3RyaW5nKCk7IH0KIAotICAgIHZvaWQg
dmlzaXROb2Rlc0NvbmN1cnJlbnRseShKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKSBjb25zdCBm
aW5hbAorICAgIHZvaWQgdmlzaXROb2Rlc0NvbmN1cnJlbnRseShKU0M6OkFic3RyYWN0U2xvdFZp
c2l0b3ImIHZpc2l0b3IpIGNvbnN0IGZpbmFsCiAgICAgewogICAgICAgICBtX3JlY29yZC0+dmlz
aXROb2Rlc0NvbmN1cnJlbnRseSh2aXNpdG9yKTsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9kb20vTXV0YXRpb25SZWNvcmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20v
TXV0YXRpb25SZWNvcmQuaAkocmV2aXNpb24gMjcyNzEwKQorKysgU291cmNlL1dlYkNvcmUvZG9t
L011dGF0aW9uUmVjb3JkLmgJKHdvcmtpbmcgY29weSkKQEAgLTcyLDcgKzcyLDggQEAgcHVibGlj
OgogCiAgICAgdmlydHVhbCBTdHJpbmcgb2xkVmFsdWUoKSB7IHJldHVybiBTdHJpbmcoKTsgfQog
Ci0gICAgdmlydHVhbCB2b2lkIHZpc2l0Tm9kZXNDb25jdXJyZW50bHkoSlNDOjpTbG90VmlzaXRv
ciYpIGNvbnN0ID0gMDsKKy8vICAgIHZpcnR1YWwgdm9pZCB2aXNpdE5vZGVzQ29uY3VycmVudGx5
KEpTQzo6U2xvdFZpc2l0b3ImKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0Tm9k
ZXNDb25jdXJyZW50bHkoSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJikgY29uc3QgPSAwOwogfTsK
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL1N0YXRp
Y1JhbmdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vU3RhdGljUmFuZ2Uu
Y3BwCShyZXZpc2lvbiAyNzI3MTApCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vU3RhdGljUmFuZ2Uu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Niw3ICs3Niw3IEBAIEV4Y2VwdGlvbk9yPFJlZjxTdGF0
aWNSYW5nZT4+IFN0YXRpY1JhbmcKICAgICByZXR1cm4gY3JlYXRlKHsgeyBpbml0LnN0YXJ0Q29u
dGFpbmVyLnJlbGVhc2VOb25OdWxsKCksIGluaXQuc3RhcnRPZmZzZXQgfSwgeyBpbml0LmVuZENv
bnRhaW5lci5yZWxlYXNlTm9uTnVsbCgpLCBpbml0LmVuZE9mZnNldCB9IH0pOwogfQogCi12b2lk
IFN0YXRpY1JhbmdlOjp2aXNpdE5vZGVzQ29uY3VycmVudGx5KEpTQzo6U2xvdFZpc2l0b3ImIHZp
c2l0b3IpIGNvbnN0Cit2b2lkIFN0YXRpY1JhbmdlOjp2aXNpdE5vZGVzQ29uY3VycmVudGx5KEpT
Qzo6QWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikgY29uc3QKIHsKICAgICB2aXNpdG9yLmFk
ZE9wYXF1ZVJvb3Qocm9vdChzdGFydC5jb250YWluZXIuZ2V0KCkpKTsKICAgICB2aXNpdG9yLmFk
ZE9wYXF1ZVJvb3Qocm9vdChlbmQuY29udGFpbmVyLmdldCgpKSk7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9kb20vU3RhdGljUmFuZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20v
U3RhdGljUmFuZ2UuaAkocmV2aXNpb24gMjcyNzEwKQorKysgU291cmNlL1dlYkNvcmUvZG9tL1N0
YXRpY1JhbmdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTU4LDcgKzU4LDcgQEAgcHVibGljOgogICAg
IHVuc2lnbmVkIGVuZE9mZnNldCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIFNpbXBsZVJhbmdlOjpl
bmRPZmZzZXQoKTsgfQogICAgIGJvb2wgY29sbGFwc2VkKCkgY29uc3QgZmluYWwgeyByZXR1cm4g
U2ltcGxlUmFuZ2U6OmNvbGxhcHNlZCgpOyB9CiAKLSAgICB2b2lkIHZpc2l0Tm9kZXNDb25jdXJy
ZW50bHkoSlNDOjpTbG90VmlzaXRvciYpIGNvbnN0OworICAgIHZvaWQgdmlzaXROb2Rlc0NvbmN1
cnJlbnRseShKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKSBjb25zdDsKIAogcHJpdmF0ZToKICAg
ICBTdGF0aWNSYW5nZShTaW1wbGVSYW5nZSYmKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL1dlYkdMMlJlbmRlcmluZ0NvbnRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMMlJlbmRlcmluZ0NvbnRleHQuY3BwCShyZXZpc2lvbiAy
NzI3MTApCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTDJSZW5kZXJpbmdDb250
ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzA3OCw3ICszMDc4LDcgQEAgYm9vbCBXZWJHTDJS
ZW5kZXJpbmdDb250ZXh0OjpjaGVja0FuZFRyYQogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lk
IFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OmFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKEpTQzo6U2xv
dFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OmFkZE1lbWJl
cnNUb09wYXF1ZVJvb3RzKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAg
ICBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjphZGRNZW1iZXJzVG9PcGFxdWVSb290cyh2aXNp
dG9yKTsKIApAQCAtMzA4OSw2ICszMDg5LDcgQEAgdm9pZCBXZWJHTDJSZW5kZXJpbmdDb250ZXh0
OjphZGRNZW1iZXJzVAogCiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KG1fYm91bmRUcmFuc2Zv
cm1GZWVkYmFjay5nZXQoKSk7CiAgICAgaWYgKG1fYm91bmRUcmFuc2Zvcm1GZWVkYmFjaykKKy8v
ICAgICAgICBtX2JvdW5kVHJhbnNmb3JtRmVlZGJhY2stPmFkZE1lbWJlcnNUb09wYXF1ZVJvb3Rz
KGxvY2tlciwgdmlzaXRvcik7CiAgICAgICAgIG1fYm91bmRUcmFuc2Zvcm1GZWVkYmFjay0+YWRk
TWVtYmVyc1RvT3BhcXVlUm9vdHMobG9ja2VyLCB2aXNpdG9yKTsKIAogICAgIHZpc2l0b3IuYWRk
T3BhcXVlUm9vdChtX2JvdW5kQ29weVJlYWRCdWZmZXIuZ2V0KCkpOwpJbmRleDogU291cmNlL1dl
YkNvcmUvaHRtbC9jYW52YXMvV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMMlJlbmRlcmluZ0NvbnRleHQuaAkocmV2
aXNpb24gMjcyNzEwKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0wyUmVuZGVy
aW5nQ29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNjEsNyArMjYxLDcgQEAgcHVibGljOgog
CiAgICAgYm9vbCBjaGVja0FuZFRyYW5zbGF0ZUF0dGFjaG1lbnRzKGNvbnN0IGNoYXIqIGZ1bmN0
aW9uTmFtZSwgR0NHTGVudW0sIFZlY3RvcjxHQ0dMZW51bT4mKTsKIAotICAgIHZvaWQgYWRkTWVt
YmVyc1RvT3BhcXVlUm9vdHMoSlNDOjpTbG90VmlzaXRvciYpIG92ZXJyaWRlOworICAgIHZvaWQg
YWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMoSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJikgb3ZlcnJp
ZGU7CiAKIHByaXZhdGU6CiAgICAgV2ViR0wyUmVuZGVyaW5nQ29udGV4dChDYW52YXNCYXNlJiwg
R3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL1dlYkdMRnJhbWVidWZmZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL1dlYkdMRnJhbWVidWZmZXIuY3BwCShyZXZpc2lvbiAyNzI3MTApCisrKyBT
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEZyYW1lYnVmZmVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNjMsNyArNjMsNyBAQCBuYW1lc3BhY2UgewogICAgICAgICB2b2lkIG9uRGV0YWNo
ZWQoY29uc3QgQWJzdHJhY3RMb2NrZXImLCBHcmFwaGljc0NvbnRleHRHTCopIG92ZXJyaWRlOwog
ICAgICAgICB2b2lkIGF0dGFjaChHcmFwaGljc0NvbnRleHRHTCosIEdDR0xlbnVtIHRhcmdldCwg
R0NHTGVudW0gYXR0YWNobWVudCkgb3ZlcnJpZGU7CiAgICAgICAgIHZvaWQgdW5hdHRhY2goR3Jh
cGhpY3NDb250ZXh0R0wqLCBHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIGF0dGFjaG1lbnQpIG92
ZXJyaWRlOwotICAgICAgICB2b2lkIGFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKGNvbnN0IEFic3Ry
YWN0TG9ja2VyJiwgSlNDOjpTbG90VmlzaXRvciYpIG92ZXJyaWRlOworICAgICAgICB2b2lkIGFk
ZE1lbWJlcnNUb09wYXF1ZVJvb3RzKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgSlNDOjpBYnN0cmFj
dFNsb3RWaXNpdG9yJikgb3ZlcnJpZGU7CiAKICAgICAgICAgV2ViR0xSZW5kZXJidWZmZXJBdHRh
Y2htZW50KCkgeyB9OwogCkBAIC0xNDUsNyArMTQ1LDcgQEAgbmFtZXNwYWNlIHsKICAgICAgICAg
ICAgIGNvbnRleHQtPmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKHRhcmdldCwgYXR0YWNobWVudCwg
R3JhcGhpY3NDb250ZXh0R0w6OlJFTkRFUkJVRkZFUiwgMCk7CiAgICAgfQogCi0gICAgdm9pZCBX
ZWJHTFJlbmRlcmJ1ZmZlckF0dGFjaG1lbnQ6OmFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKGNvbnN0
IEFic3RyYWN0TG9ja2VyJiwgSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKKyAgICB2b2lkIFdl
YkdMUmVuZGVyYnVmZmVyQXR0YWNobWVudDo6YWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMoY29uc3Qg
QWJzdHJhY3RMb2NrZXImLCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiAgICAg
ewogICAgICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QobV9yZW5kZXJidWZmZXIuZ2V0KCkpOwog
ICAgIH0KQEAgLTE2OSw3ICsxNjksNyBAQCBuYW1lc3BhY2UgewogICAgICAgICB2b2lkIG9uRGV0
YWNoZWQoY29uc3QgQWJzdHJhY3RMb2NrZXImLCBHcmFwaGljc0NvbnRleHRHTCopIG92ZXJyaWRl
OwogICAgICAgICB2b2lkIGF0dGFjaChHcmFwaGljc0NvbnRleHRHTCosIEdDR0xlbnVtIHRhcmdl
dCwgR0NHTGVudW0gYXR0YWNobWVudCkgb3ZlcnJpZGU7CiAgICAgICAgIHZvaWQgdW5hdHRhY2go
R3JhcGhpY3NDb250ZXh0R0wqLCBHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIGF0dGFjaG1lbnQp
IG92ZXJyaWRlOwotICAgICAgICB2b2lkIGFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKGNvbnN0IEFi
c3RyYWN0TG9ja2VyJiwgSlNDOjpTbG90VmlzaXRvciYpIG92ZXJyaWRlOworICAgICAgICB2b2lk
IGFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgSlNDOjpBYnN0
cmFjdFNsb3RWaXNpdG9yJikgb3ZlcnJpZGU7CiAKICAgICAgICAgV2ViR0xUZXh0dXJlQXR0YWNo
bWVudCgpIHsgfTsKIApAQCAtMjY3LDcgKzI2Nyw3IEBAIG5hbWVzcGFjZSB7CiAjZW5kaWYKICAg
ICB9CiAKLSAgICB2b2lkIFdlYkdMVGV4dHVyZUF0dGFjaG1lbnQ6OmFkZE1lbWJlcnNUb09wYXF1
ZVJvb3RzKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikK
KyAgICB2b2lkIFdlYkdMVGV4dHVyZUF0dGFjaG1lbnQ6OmFkZE1lbWJlcnNUb09wYXF1ZVJvb3Rz
KGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9y
KQogICAgIHsKICAgICAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KG1fdGV4dHVyZS5nZXQoKSk7
CiAgICAgfQpAQCAtNzIxLDcgKzcyMSw3IEBAIEdDR0xlbnVtIFdlYkdMRnJhbWVidWZmZXI6Omdl
dERyYXdCdWZmZXIKICAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0R0w6Ok5PTkU7CiB9CiAKLXZv
aWQgV2ViR0xGcmFtZWJ1ZmZlcjo6YWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMoY29uc3QgQWJzdHJh
Y3RMb2NrZXImIGxvY2tlciwgSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgV2ViR0xG
cmFtZWJ1ZmZlcjo6YWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMoY29uc3QgQWJzdHJhY3RMb2NrZXIm
IGxvY2tlciwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGZvciAo
YXV0byYgZW50cnkgOiBtX2F0dGFjaG1lbnRzKQogICAgICAgICBlbnRyeS52YWx1ZS0+YWRkTWVt
YmVyc1RvT3BhcXVlUm9vdHMobG9ja2VyLCB2aXNpdG9yKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL1dlYkdMRnJhbWVidWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9odG1sL2NhbnZhcy9XZWJHTEZyYW1lYnVmZmVyLmgJKHJldmlzaW9uIDI3MjcxMCkKKysr
IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRnJhbWVidWZmZXIuaAkod29ya2luZyBj
b3B5KQpAQCAtMzQsNyArMzQsNyBAQAogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNw
YWNlIEpTQyB7Ci1jbGFzcyBTbG90VmlzaXRvcjsKK2NsYXNzIEFic3RyYWN0U2xvdFZpc2l0b3I7
CiB9CiAKIG5hbWVzcGFjZSBXVEYgewpAQCAtNjUsNyArNjUsNyBAQCBwdWJsaWM6CiAgICAgICAg
IHZpcnR1YWwgdm9pZCBvbkRldGFjaGVkKGNvbnN0IFdURjo6QWJzdHJhY3RMb2NrZXImLCBHcmFw
aGljc0NvbnRleHRHTCopID0gMDsKICAgICAgICAgdmlydHVhbCB2b2lkIGF0dGFjaChHcmFwaGlj
c0NvbnRleHRHTCosIEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gYXR0YWNobWVudCkgPSAwOwog
ICAgICAgICB2aXJ0dWFsIHZvaWQgdW5hdHRhY2goR3JhcGhpY3NDb250ZXh0R0wqLCBHQ0dMZW51
bSB0YXJnZXQsIEdDR0xlbnVtIGF0dGFjaG1lbnQpID0gMDsKLSAgICAgICAgdmlydHVhbCB2b2lk
IGFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKGNvbnN0IFdURjo6QWJzdHJhY3RMb2NrZXImLCBKU0M6
OlNsb3RWaXNpdG9yJikgPSAwOworICAgICAgICB2aXJ0dWFsIHZvaWQgYWRkTWVtYmVyc1RvT3Bh
cXVlUm9vdHMoY29uc3QgV1RGOjpBYnN0cmFjdExvY2tlciYsIEpTQzo6QWJzdHJhY3RTbG90Vmlz
aXRvciYpID0gMDsKIAogICAgIHByb3RlY3RlZDoKICAgICAgICAgV2ViR0xBdHRhY2htZW50KCk7
CkBAIC0xMTQsNyArMTE0LDcgQEAgcHVibGljOgogCiAgICAgR0NHTGVudW0gZ2V0RHJhd0J1ZmZl
cihHQ0dMZW51bSk7CiAKLSAgICB2b2lkIGFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKGNvbnN0IFdU
Rjo6QWJzdHJhY3RMb2NrZXImLCBKU0M6OlNsb3RWaXNpdG9yJik7CisgICAgdm9pZCBhZGRNZW1i
ZXJzVG9PcGFxdWVSb290cyhjb25zdCBXVEY6OkFic3RyYWN0TG9ja2VyJiwgSlNDOjpBYnN0cmFj
dFNsb3RWaXNpdG9yJik7CiAKIHByaXZhdGU6CiAgICAgV2ViR0xGcmFtZWJ1ZmZlcihXZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlJik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9X
ZWJHTFByb2dyYW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L1dlYkdMUHJvZ3JhbS5jcHAJKHJldmlzaW9uIDI3MjcxMCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0
bWwvY2FudmFzL1dlYkdMUHJvZ3JhbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwNiw3ICsyMDYs
NyBAQCBib29sIFdlYkdMUHJvZ3JhbTo6ZGV0YWNoU2hhZGVyKGNvbnN0IEFiCiAgICAgfQogfQog
Ci12b2lkIFdlYkdMUHJvZ3JhbTo6YWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMoY29uc3QgQWJzdHJh
Y3RMb2NrZXImLCBKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBXZWJHTFByb2dyYW06
OmFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgSlNDOjpBYnN0
cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdCht
X3ZlcnRleFNoYWRlci5nZXQoKSk7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KG1fZnJhZ21l
bnRTaGFkZXIuZ2V0KCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xQ
cm9ncmFtLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xQ
cm9ncmFtLmgJKHJldmlzaW9uIDI3MjcxMCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L1dlYkdMUHJvZ3JhbS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw3ICszNSw3IEBACiAjaW5jbHVk
ZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgSlNDIHsKLWNsYXNzIFNsb3RWaXNpdG9yOwor
Y2xhc3MgQWJzdHJhY3RTbG90VmlzaXRvcjsKIH0KIAogbmFtZXNwYWNlIFdURiB7CkBAIC04OCw3
ICs4OCw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fcmVxdWlyZWRUcmFuc2Zvcm1GZWVk
YmFja0J1ZmZlckNvdW50OwogICAgIH0KIAotICAgIHZvaWQgYWRkTWVtYmVyc1RvT3BhcXVlUm9v
dHMoY29uc3QgV1RGOjpBYnN0cmFjdExvY2tlciYsIEpTQzo6U2xvdFZpc2l0b3ImKTsKKyAgICB2
b2lkIGFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKGNvbnN0IFdURjo6QWJzdHJhY3RMb2NrZXImLCBK
U0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKTsKIAogcHJpdmF0ZToKICAgICBXZWJHTFByb2dyYW0o
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSYpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9j
YW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHAJKHJldmlz
aW9uIDI3MjcxMCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03OTMxLDEwICs3OTMxLDEyIEBAIHZv
aWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6ZGlzcGF0Y2gKICAgICBxdWV1ZVRhc2tUb0Rp
c3BhdGNoRXZlbnQoKmNhbnZhcywgVGFza1NvdXJjZTo6V2ViR0wsIFdlYkdMQ29udGV4dEV2ZW50
OjpjcmVhdGUoZXZlbnROYW1lcygpLndlYmdsY29udGV4dGNoYW5nZWRFdmVudCwgRXZlbnQ6OkNh
bkJ1YmJsZTo6Tm8sIEV2ZW50OjpJc0NhbmNlbGFibGU6OlllcywgZW1wdHlTdHJpbmcoKSkpOwog
fQogCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmFkZE1lbWJlcnNUb09wYXF1ZVJv
b3RzKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2U6OmFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYg
dmlzaXRvcikKIHsKICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG9iamVjdEdyYXBoTG9jaygp
KTsKIAorICAgIC8vIG1sYW0gRklYTUU6IHdoeSBhcmUgd2Ugbm90IGFsc28gdmlzaXRpbmcgbV9k
ZWZhdWx0VmVydGV4QXJyYXlPYmplY3Q/CisKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QobV9i
b3VuZEFycmF5QnVmZmVyLmdldCgpKTsKIAogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChtX2Jv
dW5kVmVydGV4QXJyYXlPYmplY3QuZ2V0KCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9j
YW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuaAkocmV2aXNpb24g
MjcyNzEwKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01OCw3ICs1OCw3IEBACiAjZW5kaWYKIAogbmFt
ZXNwYWNlIEpTQyB7Ci1jbGFzcyBTbG90VmlzaXRvcjsKK2NsYXNzIEFic3RyYWN0U2xvdFZpc2l0
b3I7CiB9CiAKIG5hbWVzcGFjZSBXVEYgewpAQCAtNDExLDcgKzQxMSw3IEBAIHB1YmxpYzoKICAg
ICB2b2lkIHJlY3ljbGVDb250ZXh0KCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBkaXNwYXRjaENvbnRl
eHRDaGFuZ2VkTm90aWZpY2F0aW9uKCkgb3ZlcnJpZGU7CiAKLSAgICB2aXJ0dWFsIHZvaWQgYWRk
TWVtYmVyc1RvT3BhcXVlUm9vdHMoSlNDOjpTbG90VmlzaXRvciYpOworICAgIHZpcnR1YWwgdm9p
ZCBhZGRNZW1iZXJzVG9PcGFxdWVSb290cyhKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKTsKICAg
ICAvLyBUaGlzIGxvY2sgbXVzdCBiZSBoZWxkIGFjcm9zcyBhbGwgbXV0YXRpb25zIG9mIGNvbnRh
aW5lcnMgbGlrZQogICAgIC8vIFZlY3RvcnMsIEhhc2hTZXRzLCBldGMuIHdoaWNoIGNvbnRhaW4g
UmVmUHRyPFdlYkdMT2JqZWN0PiwgYW5kCiAgICAgLy8gd2hpY2ggYXJlIHRyYXZlcnNlZCBieSBh
ZGRNZW1iZXJzVG9PcGFxdWVSb290cygpIG9yIGFueSBvZiB0aGUKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2h0bWwvY2FudmFzL1dlYkdMVHJhbnNmb3JtRmVlZGJhY2suY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVHJhbnNmb3JtRmVlZGJhY2suY3BwCShy
ZXZpc2lvbiAyNzI3MTApCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFRyYW5z
Zm9ybUZlZWRiYWNrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsOCArMzAsNyBAQAogCiAjaW5j
bHVkZSAiV2ViR0xDb250ZXh0R3JvdXAuaCIKICNpbmNsdWRlICJXZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvU2xvdFZpc2l0b3IuaD4KLSNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9TbG90VmlzaXRvcklubGluZXMuaD4KKyNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9BYnN0cmFjdFNsb3RWaXNpdG9ySW5saW5lcy5oPgogI2luY2x1ZGUgPHd0Zi9M
b2NrLmg+CiAjaW5jbHVkZSA8d3RmL0xvY2tlci5oPgogCkBAIC05Myw3ICs5Miw3IEBAIGJvb2wg
V2ViR0xUcmFuc2Zvcm1GZWVkYmFjazo6aGFzRW5vdWdoQnUKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IAotdm9pZCBXZWJHTFRyYW5zZm9ybUZlZWRiYWNrOjphZGRNZW1iZXJzVG9PcGFxdWVSb290cyhj
b25zdCBBYnN0cmFjdExvY2tlciYgbG9ja2VyLCBKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQor
dm9pZCBXZWJHTFRyYW5zZm9ybUZlZWRiYWNrOjphZGRNZW1iZXJzVG9PcGFxdWVSb290cyhjb25z
dCBBYnN0cmFjdExvY2tlciYgbG9ja2VyLCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0
b3IpCiB7CiAgICAgZm9yIChhdXRvJiBidWZmZXIgOiBtX2JvdW5kSW5kZXhlZFRyYW5zZm9ybUZl
ZWRiYWNrQnVmZmVycykKICAgICAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KGJ1ZmZlci5nZXQo
KSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFRyYW5zZm9ybUZlZWRi
YWNrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xUcmFu
c2Zvcm1GZWVkYmFjay5oCShyZXZpc2lvbiAyNzI3MTApCisrKyBTb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9XZWJHTFRyYW5zZm9ybUZlZWRiYWNrLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcg
KzMxLDcgQEAKICNpbmNsdWRlICJXZWJHTFNoYXJlZE9iamVjdC5oIgogCiBuYW1lc3BhY2UgSlND
IHsKLWNsYXNzIFNsb3RWaXNpdG9yOworY2xhc3MgQWJzdHJhY3RTbG90VmlzaXRvcjsKIH0KIAog
bmFtZXNwYWNlIFdURiB7CkBAIC03MCw3ICs3MCw3IEBAIHB1YmxpYzoKICAgICAKICAgICBib29s
IGhhc0Vub3VnaEJ1ZmZlcnMoR0NHTHVpbnQgbnVtUmVxdWlyZWQpIGNvbnN0OwogCi0gICAgdm9p
ZCBhZGRNZW1iZXJzVG9PcGFxdWVSb290cyhjb25zdCBBYnN0cmFjdExvY2tlciYsIEpTQzo6U2xv
dFZpc2l0b3ImKTsKKyAgICB2b2lkIGFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKGNvbnN0IEFic3Ry
YWN0TG9ja2VyJiwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAKIHByaXZhdGU6CiAgICAg
V2ViR0xUcmFuc2Zvcm1GZWVkYmFjayhXZWJHTDJSZW5kZXJpbmdDb250ZXh0Jik7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFZlcnRleEFycmF5T2JqZWN0QmFzZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xWZXJ0ZXhBcnJh
eU9iamVjdEJhc2UuY3BwCShyZXZpc2lvbiAyNzI3MTApCisrKyBTb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9XZWJHTFZlcnRleEFycmF5T2JqZWN0QmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI5LDggKzI5LDcgQEAKICNpZiBFTkFCTEUoV0VCR0wpCiAKICNpbmNsdWRlICJXZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvU2xvdFZpc2l0b3Iu
aD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9TbG90VmlzaXRvcklubGluZXMuaD4KKyNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9BYnN0cmFjdFNsb3RWaXNpdG9ySW5saW5lcy5oPgogI2luY2x1
ZGUgPHd0Zi9Mb2NrZXIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMTA5LDcgKzEwOCw3
IEBAIHZvaWQgV2ViR0xWZXJ0ZXhBcnJheU9iamVjdEJhc2U6OnNldFZlcnQKICAgICBtX3ZlcnRl
eEF0dHJpYlN0YXRlW2luZGV4XS5kaXZpc29yID0gZGl2aXNvcjsKIH0KIAotdm9pZCBXZWJHTFZl
cnRleEFycmF5T2JqZWN0QmFzZTo6YWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMoY29uc3QgQWJzdHJh
Y3RMb2NrZXImLCBKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBXZWJHTFZlcnRleEFy
cmF5T2JqZWN0QmFzZTo6YWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMoY29uc3QgQWJzdHJhY3RMb2Nr
ZXImLCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgdmlzaXRvci5h
ZGRPcGFxdWVSb290KG1fYm91bmRFbGVtZW50QXJyYXlCdWZmZXIuZ2V0KCkpOwogICAgIGZvciAo
YXV0byYgc3RhdGUgOiBtX3ZlcnRleEF0dHJpYlN0YXRlKQpJbmRleDogU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvV2ViR0xWZXJ0ZXhBcnJheU9iamVjdEJhc2UuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFZlcnRleEFycmF5T2JqZWN0QmFzZS5oCShy
ZXZpc2lvbiAyNzI3MTApCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFZlcnRl
eEFycmF5T2JqZWN0QmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw3IEBACiAjaW5j
bHVkZSAiV2ViR0xDb250ZXh0T2JqZWN0LmgiCiAKIG5hbWVzcGFjZSBKU0MgewotY2xhc3MgU2xv
dFZpc2l0b3I7CitjbGFzcyBBYnN0cmFjdFNsb3RWaXNpdG9yOwogfQogCiBuYW1lc3BhY2UgV1RG
IHsKQEAgLTc3LDcgKzc3LDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBzZXRWZXJ0ZXhBdHRyaWJE
aXZpc29yKEdDR0x1aW50IGluZGV4LCBHQ0dMdWludCBkaXZpc29yKTsKIAotICAgIHZvaWQgYWRk
TWVtYmVyc1RvT3BhcXVlUm9vdHMoY29uc3QgV1RGOjpBYnN0cmFjdExvY2tlciYsIEpTQzo6U2xv
dFZpc2l0b3ImKTsKKyAgICB2b2lkIGFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKGNvbnN0IFdURjo6
QWJzdHJhY3RMb2NrZXImLCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKTsKIAogcHJvdGVjdGVk
OgogICAgIFdlYkdMVmVydGV4QXJyYXlPYmplY3RCYXNlKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2UmLCBUeXBlKTsK
</data>
<flag name="commit-queue"
          id="438383"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>420099</attachid>
            <date>2021-02-11 22:09:18 -0800</date>
            <delta_ts>2021-02-12 22:25:59 -0800</delta_ts>
            <desc>work in progress (clean).</desc>
            <filename>bug-217274j-clean.patch</filename>
            <type>text/plain</type>
            <size>596119</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDI3Mjc2OSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtNjEzLDYgKzYxMyw4IEBAIHNldChKYXZhU2NyaXB0Q29yZV9QUklWQVRFX0ZSQU1FV09SS19I
RUEKICAgICBkb21qaXQvRE9NSklUSGVhcFJhbmdlLmgKICAgICBkb21qaXQvRE9NSklUU2lnbmF0
dXJlLmgKIAorICAgIGhlYXAvQWJzdHJhY3RTbG90VmlzaXRvci5oCisgICAgaGVhcC9BYnN0cmFj
dFNsb3RWaXNpdG9ySW5saW5lcy5oCiAgICAgaGVhcC9BbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmgK
ICAgICBoZWFwL0FsbG9jYXRpb25GYWlsdXJlTW9kZS5oCiAgICAgaGVhcC9BbGxvY2F0b3IuaApA
QCAtNjg2LDEyICs2ODgsMTQgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1BSSVZBVEVfRlJBTUVXT1JL
X0hFQQogICAgIGhlYXAvU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQuaAogICAgIGhlYXAvU2xvdFZp
c2l0b3IuaAogICAgIGhlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmgKKyAgICBoZWFwL1Nsb3RWaXNp
dG9yTWFjcm9zLmgKICAgICBoZWFwL1N0cm9uZy5oCiAgICAgaGVhcC9TdHJvbmdJbmxpbmVzLmgK
ICAgICBoZWFwL1N1YnNwYWNlLmgKICAgICBoZWFwL1N1YnNwYWNlSW5saW5lcy5oCiAgICAgaGVh
cC9TeW5jaHJvbm91c25lc3MuaAogICAgIGhlYXAvVGlueUJsb29tRmlsdGVyLmgKKyAgICBoZWFw
L1ZlcmlmaWVyU2xvdFZpc2l0b3IuaAogICAgIGhlYXAvVmlzaXRSYWNlS2V5LmgKICAgICBoZWFw
L1dlYWsuaAogICAgIGhlYXAvV2Vha0Jsb2NrLmgKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9Tb3VyY2VzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNl
cy50eHQJKHJldmlzaW9uIDI3Mjc2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2Vz
LnR4dAkod29ya2luZyBjb3B5KQpAQCAtNTYzLDYgKzU2Myw3IEBAIGhlYXAvU3RvcElmTmVjZXNz
YXJ5VGltZXIuY3BwCiBoZWFwL1N1YnNwYWNlLmNwcAogaGVhcC9TeW5jaHJvbm91c1N0b3BUaGVX
b3JsZE11dGF0b3JTY2hlZHVsZXIuY3BwCiBoZWFwL1N5bmNocm9ub3VzbmVzcy5jcHAKK2hlYXAv
VmVyaWZpZXJTbG90VmlzaXRvci5jcHAKIGhlYXAvVmlzaXRSYWNlS2V5LmNwcAogaGVhcC9XZWFr
LmNwcAogaGVhcC9XZWFrQmxvY2suY3BwCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJ
L0pTQVBJV3JhcHBlck9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9BUEkvSlNBUElXcmFwcGVyT2JqZWN0LmgJKHJldmlzaW9uIDI3Mjc2OSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9BUEkvSlNBUElXcmFwcGVyT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTkgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC00MSw3ICs0MSw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBzdWJzcGFjZUZvcihWTSYp
IHsgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQogICAgIAogICAgIHZvaWQgZmluaXNo
Q3JlYXRpb24oVk0mKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIEpT
Qzo6U2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX0VYUE9SVF9WSVNJVF9DSElMRFJFTjsKICAg
ICAKICAgICB2b2lkKiB3cmFwcGVkT2JqZWN0KCkgeyByZXR1cm4gbV93cmFwcGVkT2JqZWN0OyB9
CiAgICAgdm9pZCBzZXRXcmFwcGVkT2JqZWN0KHZvaWQqKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvSlNBUElXcmFwcGVyT2JqZWN0Lm1tCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9BUEkvSlNBUElXcmFwcGVyT2JqZWN0Lm1tCShyZXZpc2lvbiAyNzI3Njkp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQVBJV3JhcHBlck9iamVjdC5tbQkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
OCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTM3LDcgKzM3LDcgQEAKIGNsYXNzIEpTQVBJV3JhcHBlck9iamVjdEhh
bmRsZU93bmVyIGZpbmFsIDogcHVibGljIEpTQzo6V2Vha0hhbmRsZU93bmVyIHsKIHB1YmxpYzoK
ICAgICB2b2lkIGZpbmFsaXplKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqKSBmaW5h
bDsKLSAgICBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6
VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6U2xvdFZpc2l0b3ImLCBjb25zdCBjaGFyKiop
IGZpbmFsOworICAgIGJvb2wgaXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8
SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiwg
Y29uc3QgY2hhcioqKSBmaW5hbDsKIH07CiAKIHN0YXRpYyBKU0FQSVdyYXBwZXJPYmplY3RIYW5k
bGVPd25lcioganNBUElXcmFwcGVyT2JqZWN0SGFuZGxlT3duZXIoKQpAQCAtNTYsMTQgKzU2LDE0
IEBAIHZvaWQgSlNBUElXcmFwcGVyT2JqZWN0SGFuZGxlT3duZXI6OmZpbmEKICAgICBKU0M6Oldl
YWtTZXQ6OmRlYWxsb2NhdGUoSlNDOjpXZWFrSW1wbDo6YXNXZWFrSW1wbChoYW5kbGUuc2xvdCgp
KSk7CiB9CiAKLWJvb2wgSlNBUElXcmFwcGVyT2JqZWN0SGFuZGxlT3duZXI6OmlzUmVhY2hhYmxl
RnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwg
SlNDOjpTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqKQorYm9vbCBKU0FQSVdyYXBw
ZXJPYmplY3RIYW5kbGVPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5k
bGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3Im
IHZpc2l0b3IsIGNvbnN0IGNoYXIqKikKIHsKICAgICBKU0M6OkpTQVBJV3JhcHBlck9iamVjdCog
d3JhcHBlck9iamVjdCA9IEpTQzo6anNDYXN0PEpTQzo6SlNBUElXcmFwcGVyT2JqZWN0Kj4oaGFu
ZGxlLmdldCgpLmFzQ2VsbCgpKTsKICAgICAvLyBXZSB1c2UgdGhlIEpTR2xvYmFsT2JqZWN0IHdo
ZW4gcHJvY2Vzc2luZyB3ZWFrIGhhbmRsZXMgdG8gcHJldmVudCB0aGUgc2l0dWF0aW9uIHdoZXJl
IHVzaW5nCiAgICAgLy8gdGhlIHNhbWUgT2JqZWN0aXZlLUMgb2JqZWN0IGluIG11bHRpcGxlIGds
b2JhbCBvYmplY3RzIGtlZXBzIGFsbCBvZiB0aGUgZ2xvYmFsIG9iamVjdHMgYWxpdmUuCiAgICAg
aWYgKCF3cmFwcGVyT2JqZWN0LT53cmFwcGVkT2JqZWN0KCkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICByZXR1cm4gdmlzaXRvci52bSgpLmhlYXAuaXNNYXJrZWQod3JhcHBlck9iamVjdC0+
c3RydWN0dXJlKCktPmdsb2JhbE9iamVjdCgpKSAmJiB2aXNpdG9yLmNvbnRhaW5zT3BhcXVlUm9v
dCh3cmFwcGVyT2JqZWN0LT53cmFwcGVkT2JqZWN0KCkpOworICAgIHJldHVybiB2aXNpdG9yLmlz
TWFya2VkKHdyYXBwZXJPYmplY3QtPnN0cnVjdHVyZSgpLT5nbG9iYWxPYmplY3QoKSkgJiYgdmlz
aXRvci5jb250YWluc09wYXF1ZVJvb3Qod3JhcHBlck9iamVjdC0+d3JhcHBlZE9iamVjdCgpKTsK
IH0KIAogbmFtZXNwYWNlIEpTQyB7CkBAIC03Myw2ICs3Myw4IEBAIHN0YXRpYyBKU0NfREVDTEFS
RV9IT1NUX0ZVTkNUSU9OKGNvbnN0cnUKIHN0YXRpYyBKU0NfREVDTEFSRV9DVVNUT01fR0VUVEVS
KGNhbGxiYWNrR2V0dGVySlNBUElXcmFwcGVyT2JqZWN0Q2FsbGJhY2tPYmplY3QpOwogc3RhdGlj
IEpTQ19ERUNMQVJFX0NVU1RPTV9HRVRURVIoc3RhdGljRnVuY3Rpb25HZXR0ZXJKU0FQSVdyYXBw
ZXJPYmplY3RDYWxsYmFja09iamVjdCk7CiAKK0RFRklORV9URU1QTEFURV9WSVNJVF9DSElMRFJF
Tih0ZW1wbGF0ZTw+LCBKU0NhbGxiYWNrT2JqZWN0PEpTQVBJV3JhcHBlck9iamVjdD4pOworCiB0
ZW1wbGF0ZSA8PiBjb25zdCBDbGFzc0luZm8gSlNDYWxsYmFja09iamVjdDxKU0FQSVdyYXBwZXJP
YmplY3Q+OjpzX2luZm8gPSB7ICJKU0FQSVdyYXBwZXJPYmplY3QiLCAmQmFzZTo6c19pbmZvLCBu
dWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTQ2FsbGJhY2tPYmplY3QpIH07
CiB0ZW1wbGF0ZSA8PiBjb25zdCBib29sIEpTQ2FsbGJhY2tPYmplY3Q8SlNBUElXcmFwcGVyT2Jq
ZWN0Pjo6bmVlZHNEZXN0cnVjdGlvbiA9IHRydWU7CiAKQEAgLTEyMyw3ICsxMjUsOCBAQCB2b2lk
IEpTQVBJV3JhcHBlck9iamVjdDo6c2V0V3JhcHBlZE9iamVjCiAgICAgbV93cmFwcGVkT2JqZWN0
ID0gW3N0YXRpY19jYXN0PGlkPih3cmFwcGVkT2JqZWN0KSByZXRhaW5dOwogfQogCi12b2lkIEpT
QVBJV3JhcHBlck9iamVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIEpTQzo6U2xvdFZp
c2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0FQSVdy
YXBwZXJPYmplY3Q6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlz
aXRvcikKIHsKICAgICBKU0FQSVdyYXBwZXJPYmplY3QqIHRoaXNPYmplY3QgPSBKU0M6OmpzQ2Fz
dDxKU0FQSVdyYXBwZXJPYmplY3QqPihjZWxsKTsKICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKGNl
bGwsIHZpc2l0b3IpOwpAQCAtMTMzLDYgKzEzNiw4IEBAIHZvaWQgSlNBUElXcmFwcGVyT2JqZWN0
Ojp2aXNpdENoaWxkcmVuKEoKICAgICAgICAgc2NhbkV4dGVybmFsT2JqZWN0R3JhcGgodmlzaXRv
ci52bSgpLCB2aXNpdG9yLCB3cmFwcGVkT2JqZWN0KTsKIH0KIAorREVGSU5FX0VYUE9SVF9WSVNJ
VF9DSElMRFJFTihKU0FQSVdyYXBwZXJPYmplY3QpOworCiB0ZW1wbGF0ZSA8PgogSXNvU3Vic3Bh
Y2UqIEpTQ2FsbGJhY2tPYmplY3Q8SlNBUElXcmFwcGVyT2JqZWN0Pjo6c3Vic3BhY2VGb3JJbXBs
KFZNJiB2bSwgU3Vic3BhY2VBY2Nlc3MgbW9kZSkKIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0LmNwcAkocmV2aXNpb24gMjcyNzY5KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNyBBcHBs
ZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA3IEVy
aWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC00MSw2ICs0
MSw5IEBAIHN0YXRpYyBKU0NfREVDTEFSRV9DVVNUT01fR0VUVEVSKHN0YXRpY0YKIHN0YXRpYyBK
U0NfREVDTEFSRV9DVVNUT01fR0VUVEVSKGNhbGxiYWNrR2V0dGVySlNHbG9iYWxPYmplY3RDYWxs
YmFja09iamVjdCk7CiBzdGF0aWMgSlNDX0RFQ0xBUkVfQ1VTVE9NX0dFVFRFUihzdGF0aWNGdW5j
dGlvbkdldHRlckpTR2xvYmFsT2JqZWN0Q2FsbGJhY2tPYmplY3QpOwogCitERUZJTkVfVEVNUExB
VEVfVklTSVRfQ0hJTERSRU4odGVtcGxhdGU8PiwgSlNDYWxsYmFja09iamVjdDxKU05vbkZpbmFs
T2JqZWN0Pik7CitERUZJTkVfVEVNUExBVEVfVklTSVRfQ0hJTERSRU4odGVtcGxhdGU8PiwgSlND
YWxsYmFja09iamVjdDxKU0dsb2JhbE9iamVjdD4pOworCiAvLyBEZWZpbmUgdGhlIHR3byB0eXBl
cyBvZiBKU0NhbGxiYWNrT2JqZWN0cyB3ZSBzdXBwb3J0LgogdGVtcGxhdGUgPD4gY29uc3QgQ2xh
c3NJbmZvIEpTQ2FsbGJhY2tPYmplY3Q8SlNOb25GaW5hbE9iamVjdD46OnNfaW5mbyA9IHsgIkNh
bGxiYWNrT2JqZWN0IiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01F
VEhPRF9UQUJMRShKU0NhbGxiYWNrT2JqZWN0KSB9OwogdGVtcGxhdGUgPD4gY29uc3QgQ2xhc3NJ
bmZvIEpTQ2FsbGJhY2tPYmplY3Q8SlNHbG9iYWxPYmplY3Q+OjpzX2luZm8gPSB7ICJDYWxsYmFj
a0dsb2JhbE9iamVjdCIsICZCYXNlOjpzX2luZm8sIG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9N
RVRIT0RfVEFCTEUoSlNDYWxsYmFja09iamVjdCkgfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdC5oCShyZXZpc2lvbiAyNzI3NjkpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3QuaAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcgRXJpYyBTZWlk
ZWwgPGVyaWNAd2Via2l0Lm9yZz4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTY5LDcgKzY5LDEwIEBA
IHB1YmxpYzoKICAgICAgICAgbV9wcml2YXRlUHJvcGVydGllcy0+ZGVsZXRlUHJpdmF0ZVByb3Bl
cnR5KHByb3BlcnR5TmFtZSk7CiAgICAgfQogCi0gICAgdm9pZCB2aXNpdENoaWxkcmVuKFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQorICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CisKKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgorICAgIHZvaWQgdmlzaXRDaGlsZHJlbihWaXNpdG9yJiB2
aXNpdG9yKQogICAgIHsKICAgICAgICAgSlNQcml2YXRlUHJvcGVydHlNYXAqIHByb3BlcnRpZXMg
PSBtX3ByaXZhdGVQcm9wZXJ0aWVzLmdldCgpOwogICAgICAgICBpZiAoIXByb3BlcnRpZXMpCkBA
IC0xMDMsNyArMTA2LDggQEAgcHVibGljOgogICAgICAgICAgICAgbV9wcm9wZXJ0eU1hcC5yZW1v
dmUocHJvcGVydHlOYW1lLmltcGwoKSk7CiAgICAgICAgIH0KIAotICAgICAgICB2b2lkIHZpc2l0
Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFZpc2l0b3I+CisgICAgICAgIHZvaWQgdmlzaXRDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQog
ICAgICAgICB7CiAgICAgICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2xvY2spOwogICAgICAg
ICAgICAgZm9yIChhdXRvJiBwYWlyIDogbV9wcm9wZXJ0eU1hcCkgewpAQCAtMjE2LDEzICsyMjAs
NyBAQCBwcml2YXRlOgogICAgIHN0YXRpYyBDYWxsRGF0YSBnZXRDb25zdHJ1Y3REYXRhKEpTQ2Vs
bCopOwogICAgIHN0YXRpYyBDYWxsRGF0YSBnZXRDYWxsRGF0YShKU0NlbGwqKTsKIAotICAgIHN0
YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRv
cikKLSAgICB7Ci0gICAgICAgIEpTQ2FsbGJhY2tPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8
SlNDYWxsYmFja09iamVjdCo+KGNlbGwpOwotICAgICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVS
SVRTKChzdGF0aWNfY2FzdDxQYXJlbnQqPih0aGlzT2JqZWN0KSksIEpTQ2FsbGJhY2tPYmplY3Q8
UGFyZW50Pjo6aW5mbygpKTsKLSAgICAgICAgUGFyZW50Ojp2aXNpdENoaWxkcmVuKHRoaXNPYmpl
Y3QsIHZpc2l0b3IpOwotICAgICAgICB0aGlzT2JqZWN0LT5tX2NhbGxiYWNrT2JqZWN0RGF0YS0+
dmlzaXRDaGlsZHJlbih2aXNpdG9yKTsKLSAgICB9CisgICAgREVDTEFSRV9URU1QTEFURV9WSVNJ
VF9DSElMRFJFTjsKIAogICAgIHZvaWQgaW5pdChKU0dsb2JhbE9iamVjdCopOwogIApAQCAtMjQ1
LDYgKzI0MywxNiBAQCBwcml2YXRlOgogICAgIGNvbnN0IENsYXNzSW5mbyogbV9jbGFzc0luZm8g
eyBudWxscHRyIH07CiB9OwogCit0ZW1wbGF0ZSA8Y2xhc3MgUGFyZW50PgordGVtcGxhdGU8dHlw
ZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNDYWxsYmFja09iamVjdDxQYXJlbnQ+Ojp2aXNpdENoaWxk
cmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgSlNDYWxsYmFj
a09iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0NhbGxiYWNrT2JqZWN0Kj4oY2VsbCk7Cisg
ICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUygoc3RhdGljX2Nhc3Q8UGFyZW50Kj4odGhpc09i
amVjdCkpLCBKU0NhbGxiYWNrT2JqZWN0PFBhcmVudD46OmluZm8oKSk7CisgICAgUGFyZW50Ojp2
aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOworICAgIHRoaXNPYmplY3QtPm1fY2Fs
bGJhY2tPYmplY3REYXRhLT52aXNpdENoaWxkcmVuKHZpc2l0b3IpOworfQorCiB9IC8vIG5hbWVz
cGFjZSBKU0MKIAogLy8gaW5jbHVkZSB0aGUgYWN0dWFsIHRlbXBsYXRlIGNsYXNzIGltcGxlbWVu
dGF0aW9uCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTTWFuYWdlZFZhbHVlLm1t
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNNYW5hZ2VkVmFsdWUu
bW0JKHJldmlzaW9uIDI3Mjc2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNNYW5h
Z2VkVmFsdWUubW0JKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDEzLCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDIsNyArNDIsNyBAQAogY2xhc3MgSlNN
YW5hZ2VkVmFsdWVIYW5kbGVPd25lciBmaW5hbCA6IHB1YmxpYyBKU0M6OldlYWtIYW5kbGVPd25l
ciB7CiBwdWJsaWM6CiAgICAgdm9pZCBmaW5hbGl6ZShKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+
LCB2b2lkKiBjb250ZXh0KSBmaW5hbDsKLSAgICBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJv
b3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6U2xvdFZp
c2l0b3ImLCBjb25zdCBjaGFyKiopIGZpbmFsOworICAgIGJvb2wgaXNSZWFjaGFibGVGcm9tT3Bh
cXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCwgSlNDOjpB
YnN0cmFjdFNsb3RWaXNpdG9yJiwgY29uc3QgY2hhcioqKSBmaW5hbDsKIH07CiAKIHN0YXRpYyBK
U01hbmFnZWRWYWx1ZUhhbmRsZU93bmVyJiBtYW5hZ2VkVmFsdWVIYW5kbGVPd25lcigpCkBAIC0x
ODAsNyArMTgwLDcgQEAgQGludGVyZmFjZSBKU01hbmFnZWRWYWx1ZSAoUHJpdmF0ZU1ldGhvZAog
LSAodm9pZClkaXNjb25uZWN0VmFsdWU7CiBAZW5kCiAKLWJvb2wgSlNNYW5hZ2VkVmFsdWVIYW5k
bGVPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtu
b3duPiwgdm9pZCogY29udGV4dCwgSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hh
cioqIHJlYXNvbikKK2Jvb2wgSlNNYW5hZ2VkVmFsdWVIYW5kbGVPd25lcjo6aXNSZWFjaGFibGVG
cm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCwg
SlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQog
ewogICAgIGlmIChVTkxJS0VMWShyZWFzb24pKQogICAgICAgICAqcmVhc29uID0gIkpTTWFuYWdl
ZFZhbHVlIGlzIG9wYXF1ZSByb290IjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkv
SlNNYXJraW5nQ29uc3RyYWludFByaXZhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9BUEkvSlNNYXJraW5nQ29uc3RyYWludFByaXZhdGUuY3BwCShyZXZpc2lvbiAy
NzI3NjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTTWFya2luZ0NvbnN0cmFpbnRQ
cml2YXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNy0yMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM2LDcgKzM2LDcgQEAgbmFtZXNwYWNlIHsKIEF0
b21pYzx1bnNpZ25lZD4gY29uc3RyYWludENvdW50ZXI7CiAKIHN0cnVjdCBNYXJrZXIgOiBKU01h
cmtlciB7Ci0gICAgU2xvdFZpc2l0b3IqIHZpc2l0b3I7CisgICAgQWJzdHJhY3RTbG90VmlzaXRv
ciogdmlzaXRvcjsKIH07CiAKIGJvb2wgaXNNYXJrZWQoSlNNYXJrZXJSZWYgbWFya2VyUmVmLCBK
U09iamVjdFJlZiBvYmplY3RSZWYpCkBAIC00NCw3ICs0NCw3IEBAIGJvb2wgaXNNYXJrZWQoSlNN
YXJrZXJSZWYgbWFya2VyUmVmLCBKU08KICAgICBpZiAoIW9iamVjdFJlZikKICAgICAgICAgcmV0
dXJuIHRydWU7IC8vIE51bGwgaXMgYW4gaW1tb3J0YWwgb2JqZWN0LgogICAgIAotICAgIHJldHVy
biBzdGF0aWNfY2FzdDxNYXJrZXIqPihtYXJrZXJSZWYpLT52aXNpdG9yLT52bSgpLmhlYXAuaXNN
YXJrZWQodG9KUyhvYmplY3RSZWYpKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8TWFya2VyKj4o
bWFya2VyUmVmKS0+dmlzaXRvci0+aXNNYXJrZWQodG9KUyhvYmplY3RSZWYpKTsKIH0KIAogdm9p
ZCBtYXJrKEpTTWFya2VyUmVmIG1hcmtlclJlZiwgSlNPYmplY3RSZWYgb2JqZWN0UmVmKQpAQCAt
NzQsMTEgKzc0LDExIEBAIHZvaWQgSlNDb250ZXh0R3JvdXBBZGRNYXJraW5nQ29uc3RyYWludCgK
ICAgICAgICAgdG9DU3RyaW5nKCJBbWMiLCBjb25zdHJhaW50SW5kZXgsICIoIiwgUmF3UG9pbnRl
cihiaXR3aXNlX2Nhc3Q8dm9pZCo+KGNvbnN0cmFpbnRDYWxsYmFjaykpLCAiKSIpLAogICAgICAg
ICB0b0NTdHJpbmcoIkFQSSBNYXJraW5nIENvbnN0cmFpbnQgIyIsIGNvbnN0cmFpbnRJbmRleCwg
IiAoIiwgUmF3UG9pbnRlcihiaXR3aXNlX2Nhc3Q8dm9pZCo+KGNvbnN0cmFpbnRDYWxsYmFjaykp
LCAiLCAiLCBSYXdQb2ludGVyKHVzZXJEYXRhKSwgIikiKSwKICAgICAgICAgW2NvbnN0cmFpbnRD
YWxsYmFjaywgdXNlckRhdGFdCi0gICAgICAgIChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IpIHsK
KyAgICAgICAgKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsKICAgICAgICAgICAgIE1h
cmtlciBtYXJrZXI7CiAgICAgICAgICAgICBtYXJrZXIuSXNNYXJrZWQgPSBpc01hcmtlZDsKICAg
ICAgICAgICAgIG1hcmtlci5NYXJrID0gbWFyazsKLSAgICAgICAgICAgIG1hcmtlci52aXNpdG9y
ID0gJnNsb3RWaXNpdG9yOworICAgICAgICAgICAgbWFya2VyLnZpc2l0b3IgPSAmdmlzaXRvcjsK
ICAgICAgICAgICAgIAogICAgICAgICAgICAgY29uc3RyYWludENhbGxiYWNrKCZtYXJrZXIsIHVz
ZXJEYXRhKTsKICAgICAgICAgfSwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNW
aXJ0dWFsTWFjaGluZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJ
L0pTVmlydHVhbE1hY2hpbmUubW0JKHJldmlzaW9uIDI3Mjc2OSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvSlNWaXJ0dWFsTWFjaGluZS5tbQkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMxNSw3
ICszMTUsOCBAQCArICh2b2lkKXNldENyYXNoT25WTUNyZWF0aW9uOihCT09MKXNob3VsCiAKIEBl
bmQKIAotc3RhdGljIHZvaWQgc2NhbkV4dGVybmFsT2JqZWN0R3JhcGgoSlNDOjpWTSYgdm0sIEpT
Qzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IsIHZvaWQqIHJvb3QsIGJvb2wgbG9ja0FjcXVpcmVkKQor
dGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3N0YXRpYyB2b2lkIHNjYW5FeHRlcm5hbE9iamVj
dEdyYXBoKEpTQzo6Vk0mIHZtLCBWaXNpdG9yJiB2aXNpdG9yLCB2b2lkKiByb290LCBib29sIGxv
Y2tBY3F1aXJlZCkKIHsKICAgICBAYXV0b3JlbGVhc2Vwb29sIHsKICAgICAgICAgSlNWaXJ0dWFs
TWFjaGluZSAqdmlydHVhbE1hY2hpbmUgPSBbSlNWTVdyYXBwZXJDYWNoZSB3cmFwcGVyRm9ySlND
b250ZXh0R3JvdXBSZWY6dG9SZWYoJnZtKV07CkBAIC0zNDcsMTMgKzM0OCwxNyBAQCBzdGF0aWMg
dm9pZCBzY2FuRXh0ZXJuYWxPYmplY3RHcmFwaChKU0M6CiAgICAgfQogfQogCi12b2lkIHNjYW5F
eHRlcm5hbE9iamVjdEdyYXBoKEpTQzo6Vk0mIHZtLCBKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9y
LCB2b2lkKiByb290KQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgc2NhbkV4dGVy
bmFsT2JqZWN0R3JhcGgoSlNDOjpWTSYgdm0sIFZpc2l0b3ImIHZpc2l0b3IsIHZvaWQqIHJvb3Qp
CiB7CiAgICAgYm9vbCBsb2NrQWNxdWlyZWQgPSBmYWxzZTsKICAgICBzY2FuRXh0ZXJuYWxPYmpl
Y3RHcmFwaCh2bSwgdmlzaXRvciwgcm9vdCwgbG9ja0FjcXVpcmVkKTsKIH0KIAotdm9pZCBzY2Fu
RXh0ZXJuYWxSZW1lbWJlcmVkU2V0KEpTQzo6Vk0mIHZtLCBKU0M6OlNsb3RWaXNpdG9yJiB2aXNp
dG9yKQordGVtcGxhdGUgdm9pZCBzY2FuRXh0ZXJuYWxPYmplY3RHcmFwaChKU0M6OlZNJiwgSlND
OjpTbG90VmlzaXRvciYsIHZvaWQqKTsKK3RlbXBsYXRlIHZvaWQgc2NhbkV4dGVybmFsT2JqZWN0
R3JhcGgoSlNDOjpWTSYsIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYsIHZvaWQqKTsKKwordm9p
ZCBzY2FuRXh0ZXJuYWxSZW1lbWJlcmVkU2V0KEpTQzo6Vk0mIHZtLCBKU0M6OkFic3RyYWN0U2xv
dFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgQGF1dG9yZWxlYXNlcG9vbCB7CiAgICAgICAgIEpT
VmlydHVhbE1hY2hpbmUgKnZpcnR1YWxNYWNoaW5lID0gW0pTVk1XcmFwcGVyQ2FjaGUgd3JhcHBl
ckZvckpTQ29udGV4dEdyb3VwUmVmOnRvUmVmKCZ2bSldOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL0FQSS9KU1ZpcnR1YWxNYWNoaW5lSW50ZXJuYWwuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmlydHVhbE1hY2hpbmVJbnRlcm5hbC5oCShyZXZpc2lv
biAyNzI3NjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmlydHVhbE1hY2hpbmVJ
bnRlcm5hbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMywgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMyLDcgKzMyLDcgQEAKIAogbmFtZXNwYWNl
IEpTQyB7CiBjbGFzcyBWTTsKLWNsYXNzIFNsb3RWaXNpdG9yOworY2xhc3MgQWJzdHJhY3RTbG90
VmlzaXRvcjsKIH0KIAogI2lmIGRlZmluZWQoX19PQkpDX18pCkBAIC01NCw4ICs1NCw4IEBAIEpT
Q29udGV4dEdyb3VwUmVmIGdldEdyb3VwRnJvbVZpcnR1YWxNYWMKIAogI2VuZGlmIC8vIGRlZmlu
ZWQoX19PQkpDX18pCiAKLXZvaWQgc2NhbkV4dGVybmFsT2JqZWN0R3JhcGgoSlNDOjpWTSYsIEpT
Qzo6U2xvdFZpc2l0b3ImLCB2b2lkKiByb290KTsKLXZvaWQgc2NhbkV4dGVybmFsUmVtZW1iZXJl
ZFNldChKU0M6OlZNJiwgSlNDOjpTbG90VmlzaXRvciYpOwordGVtcGxhdGU8dHlwZW5hbWUgVmlz
aXRvcj4gdm9pZCBzY2FuRXh0ZXJuYWxPYmplY3RHcmFwaChKU0M6OlZNJiwgVmlzaXRvciYsIHZv
aWQqIHJvb3QpOwordm9pZCBzY2FuRXh0ZXJuYWxSZW1lbWJlcmVkU2V0KEpTQzo6Vk0mLCBKU0M6
OkFic3RyYWN0U2xvdFZpc2l0b3ImKTsKIAogI2VuZGlmIC8vIEpTQ19PQkpDX0FQSV9FTkFCTEVE
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvTWFya2VkSlNWYWx1ZVJlZkFycmF5
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL01hcmtlZEpTVmFs
dWVSZWZBcnJheS5jcHAJKHJldmlzaW9uIDI3Mjc2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9BUEkvTWFya2VkSlNWYWx1ZVJlZkFycmF5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIwLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00Niw3ICs0Niw3
IEBAIE1hcmtlZEpTVmFsdWVSZWZBcnJheTo6fk1hcmtlZEpTVmFsdWVSZWYKICAgICAgICAgcmVt
b3ZlKCk7CiB9CiAKLXZvaWQgTWFya2VkSlNWYWx1ZVJlZkFycmF5Ojp2aXNpdEFnZ3JlZ2F0ZShT
bG90VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgTWFya2VkSlNWYWx1ZVJlZkFycmF5Ojp2aXNpdEFn
Z3JlZ2F0ZShBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTVmFsdWVSZWYq
IGJ1ZmZlciA9IGRhdGEoKTsKICAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gMDsgaW5kZXggPCBt
X3NpemU7ICsraW5kZXgpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvTWFya2Vk
SlNWYWx1ZVJlZkFycmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQ
SS9NYXJrZWRKU1ZhbHVlUmVmQXJyYXkuaAkocmV2aXNpb24gMjcyNzY5KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL0FQSS9NYXJrZWRKU1ZhbHVlUmVmQXJyYXkuaAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIwLTIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02
Miw3ICs2Miw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1faW5saW5lQnVmZmVyOwogICAg
IH0KIAotICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImKTsKKyAgICB2b2lkIHZp
c2l0QWdncmVnYXRlKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKIAogcHJpdmF0ZToKICAgICB1bnNp
Z25lZCBtX3NpemU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNBUElX
cmFwcGVyR2xvYmFsT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvQVBJL2dsaWIvSlNBUElXcmFwcGVyR2xvYmFsT2JqZWN0LmNwcAkocmV2aXNpb24gMjcyNzY5
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQVBJV3JhcHBlckdsb2JhbE9i
amVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU5LDYgKzU5LDggQEAgc3RhdGljIEpTQ19ERUNM
QVJFX0hPU1RfRlVOQ1RJT04oY29uc3RydQogc3RhdGljIEpTQ19ERUNMQVJFX0NVU1RPTV9HRVRU
RVIoY2FsbGJhY2tHZXR0ZXJKU0FQSVdyYXBwZXJHbG9iYWxPYmplY3RDYWxsYmFja09iamVjdCk7
CiBzdGF0aWMgSlNDX0RFQ0xBUkVfQ1VTVE9NX0dFVFRFUihzdGF0aWNGdW5jdGlvbkdldHRlckpT
QVBJV3JhcHBlckdsb2JhbE9iamVjdENhbGxiYWNrT2JqZWN0KTsKIAorREVGSU5FX1RFTVBMQVRF
X1ZJU0lUX0NISUxEUkVOKHRlbXBsYXRlPD4sIEpTQ2FsbGJhY2tPYmplY3Q8SlNBUElXcmFwcGVy
R2xvYmFsT2JqZWN0Pik7CisKIHRlbXBsYXRlIDw+IGNvbnN0IENsYXNzSW5mbyBKU0NhbGxiYWNr
T2JqZWN0PEpTQVBJV3JhcHBlckdsb2JhbE9iamVjdD46OnNfaW5mbyA9IHsgIkpTQVBJV3JhcHBl
ckdsb2JhbE9iamVjdCIsICZCYXNlOjpzX2luZm8sIG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9N
RVRIT0RfVEFCTEUoSlNDYWxsYmFja09iamVjdCkgfTsKIHRlbXBsYXRlPD4gY29uc3QgYm9vbCBK
U0NhbGxiYWNrT2JqZWN0PEpTQVBJV3JhcHBlckdsb2JhbE9iamVjdD46Om5lZWRzRGVzdHJ1Y3Rp
b24gPSB0cnVlOwogCkBAIC0xNDQsOSArMTQ2LDQgQEAgdm9pZCBKU0FQSVdyYXBwZXJHbG9iYWxP
YmplY3Q6OmZpbmlzaENyZQogICAgIFdlYWtTZXQ6OmFsbG9jYXRlKHRoaXMsIGpzQVBJV3JhcHBl
ckdsb2JhbE9iamVjdEhhbmRsZU93bmVyKCksIDApOyAvLyBCYWxhbmNlZCBpbiBKU0FQSVdyYXBw
ZXJHbG9iYWxPYmplY3RIYW5kbGVPd25lcjo6ZmluYWxpemUuCiB9CiAKLXZvaWQgSlNBUElXcmFw
cGVyR2xvYmFsT2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgSlNDOjpTbG90Vmlz
aXRvciYgdmlzaXRvcikKLXsKLSAgICBCYXNlOjp2aXNpdENoaWxkcmVuKGNlbGwsIHZpc2l0b3Ip
OwotfQotCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9B
UEkvZ2xpYi9KU0FQSVdyYXBwZXJHbG9iYWxPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNBUElXcmFwcGVyR2xvYmFsT2JqZWN0LmgJKHJldmlz
aW9uIDI3Mjc2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0FQSVdyYXBw
ZXJHbG9iYWxPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMzksNyArMzksNiBAQCBwdWJsaWM6
CiAgICAgc3RhdGljIHZvaWQgc3Vic3BhY2VGb3IoVk0mKSB7IFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7IH0KIAogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKLSAgICBzdGF0aWMg
dm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKTsKIAogICAgIEpT
Q0dMaWJXcmFwcGVyT2JqZWN0KiB3cmFwcGVkT2JqZWN0KCkgY29uc3QgeyByZXR1cm4gbV93cmFw
cGVkT2JqZWN0OyB9CiAgICAgdm9pZCBzZXRXcmFwcGVkT2JqZWN0KEpTQ0dMaWJXcmFwcGVyT2Jq
ZWN0KiB3cmFwcGVkT2JqZWN0KSB7IG1fd3JhcHBlZE9iamVjdCA9IHdyYXBwZWRPYmplY3Q7IH0K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0FQSVdyYXBwZXJPYmplY3RH
TGliLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNB
UElXcmFwcGVyT2JqZWN0R0xpYi5jcHAJKHJldmlzaW9uIDI3Mjc2OSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0FQSVdyYXBwZXJPYmplY3RHTGliLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkpT
QVBJV3JhcHBlck9iamVjdC5oIgogCisjaW5jbHVkZSAiQWJzdHJhY3RTbG90VmlzaXRvci5oIgog
I2luY2x1ZGUgIkpTQ0dMaWJXcmFwcGVyT2JqZWN0LmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5o
IgogI2luY2x1ZGUgIkpTQ2FsbGJhY2tPYmplY3QuaCIKQEAgLTM2LDcgKzM3LDcgQEAKIGNsYXNz
IEpTQVBJV3JhcHBlck9iamVjdEhhbmRsZU93bmVyIGZpbmFsIDogcHVibGljIEpTQzo6V2Vha0hh
bmRsZU93bmVyIHsKIHB1YmxpYzoKICAgICB2b2lkIGZpbmFsaXplKEpTQzo6SGFuZGxlPEpTQzo6
VW5rbm93bj4sIHZvaWQqKSBmaW5hbDsKLSAgICBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJv
b3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6U2xvdFZp
c2l0b3ImLCBjb25zdCBjaGFyKiopIGZpbmFsOworICAgIGJvb2wgaXNSZWFjaGFibGVGcm9tT3Bh
cXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCwgSlNDOjpB
YnN0cmFjdFNsb3RWaXNpdG9yJiwgY29uc3QgY2hhcioqKSBmaW5hbDsKIH07CiAKIHN0YXRpYyBK
U0FQSVdyYXBwZXJPYmplY3RIYW5kbGVPd25lcioganNBUElXcmFwcGVyT2JqZWN0SGFuZGxlT3du
ZXIoKQpAQCAtNTUsNyArNTYsNyBAQCB2b2lkIEpTQVBJV3JhcHBlck9iamVjdEhhbmRsZU93bmVy
OjpmaW5hCiAgICAgSlNDOjpXZWFrU2V0OjpkZWFsbG9jYXRlKEpTQzo6V2Vha0ltcGw6OmFzV2Vh
a0ltcGwoaGFuZGxlLnNsb3QoKSkpOwogfQogCi1ib29sIEpTQVBJV3JhcHBlck9iamVjdEhhbmRs
ZU93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25v
d24+IGhhbmRsZSwgdm9pZCosIEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIq
KikKK2Jvb2wgSlNBUElXcmFwcGVyT2JqZWN0SGFuZGxlT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9w
YXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgSlNDOjpB
YnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiopCiB7CiAgICAgSlNDOjpK
U0FQSVdyYXBwZXJPYmplY3QqIHdyYXBwZXJPYmplY3QgPSBKU0M6OmpzQ2FzdDxKU0M6OkpTQVBJ
V3JhcHBlck9iamVjdCo+KGhhbmRsZS5nZXQoKS5hc0NlbGwoKSk7CiAgICAgLy8gV2UgdXNlIHRo
ZSBKU0dsb2JhbE9iamVjdCB3aGVuIHByb2Nlc3Npbmcgd2VhayBoYW5kbGVzIHRvIHByZXZlbnQg
dGhlIHNpdHVhdGlvbiB3aGVyZSB1c2luZwpAQCAtNzIsNiArNzMsOCBAQCBzdGF0aWMgSlNDX0RF
Q0xBUkVfSE9TVF9GVU5DVElPTihjb25zdHJ1CiBzdGF0aWMgSlNDX0RFQ0xBUkVfQ1VTVE9NX0dF
VFRFUihjYWxsYmFja0dldHRlckpTQVBJV3JhcHBlck9iamVjdENhbGxiYWNrT2JqZWN0KTsKIHN0
YXRpYyBKU0NfREVDTEFSRV9DVVNUT01fR0VUVEVSKHN0YXRpY0Z1bmN0aW9uR2V0dGVySlNBUElX
cmFwcGVyT2JqZWN0Q2FsbGJhY2tPYmplY3QpOwogCitERUZJTkVfVEVNUExBVEVfVklTSVRfQ0hJ
TERSRU4odGVtcGxhdGU8PiwgSlNDYWxsYmFja09iamVjdDxKU0FQSVdyYXBwZXJPYmplY3Q+KTsK
KwogdGVtcGxhdGUgPD4gY29uc3QgQ2xhc3NJbmZvIEpTQ2FsbGJhY2tPYmplY3Q8SlNBUElXcmFw
cGVyT2JqZWN0Pjo6c19pbmZvID0geyAiSlNBUElXcmFwcGVyT2JqZWN0IiwgJkJhc2U6OnNfaW5m
bywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU0NhbGxiYWNrT2JqZWN0
KSB9OwogdGVtcGxhdGU8PiBjb25zdCBib29sIEpTQ2FsbGJhY2tPYmplY3Q8SlNBUElXcmFwcGVy
T2JqZWN0Pjo6bmVlZHNEZXN0cnVjdGlvbiA9IHRydWU7CiAKQEAgLTE1NSw5ICsxNTgsMTIgQEAg
dm9pZCBKU0FQSVdyYXBwZXJPYmplY3Q6OnNldFdyYXBwZWRPYmplYwogICAgIG1fd3JhcHBlZE9i
amVjdCA9IHdyYXBwZWRPYmplY3Q7CiB9CiAKLXZvaWQgSlNBUElXcmFwcGVyT2JqZWN0Ojp2aXNp
dENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBs
YXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTQVBJV3JhcHBlck9iamVjdDo6dmlzaXRDaGls
ZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEJhc2U6OnZp
c2l0Q2hpbGRyZW4oY2VsbCwgdmlzaXRvcik7CiB9CiAKK0RFRklORV9FWFBPUlRfVklTSVRfQ0hJ
TERSRU4oSlNBUElXcmFwcGVyT2JqZWN0KTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjcyNzY5KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdv
cmtpbmcgY29weSkKQEAgLTExNTgsNiArMTE1OCw3IEBACiAJCTY1QjgzOTJFMUJBQ0FEMzYwMDQ0
RTgyNCAvKiBDYWNoZWRSZWNvdmVyeS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNjVCODM5MkMxQkFDQTkyQTAwNDRFODI0IC8qIENhY2hlZFJlY292ZXJ5
LmggKi87IH07CiAJCTZBMzhDRkFBMUUzMkI1QUIwMDYwMjA2RiAvKiBBc3luY1N0YWNrVHJhY2Uu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZBMzhDRkE4
MUUzMkI1OEIwMDYwMjA2RiAvKiBBc3luY1N0YWNrVHJhY2UuaCAqLzsgfTsKIAkJNkFEMkNCNEQx
OUI5MTQwMTAwMDY1NzE5IC8qIERlYnVnZ2VyRXZhbEVuYWJsZXIuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZBRDJDQjRDMTlCOTE0MDEwMDA2NTcxOSAv
KiBEZWJ1Z2dlckV2YWxFbmFibGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKKwkJNkJDQ0VDMDQyNUQxRkEyNzAwMEYzOTFEIC8qIFZlcmlmaWVyU2xv
dFZpc2l0b3JJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA2QkNDRUMwMzI1RDFGQTI3MDAwRjM5MUQgLyogVmVyaWZpZXJTbG90VmlzaXRvcklu
bGluZXMuaCAqLzsgfTsKIAkJNzAxMTNENEMxQThEQjA5MzAwMzg0OEM0IC8qIEl0ZXJhdG9yT3Bl
cmF0aW9ucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NzAxMTNENEExQThEQjA5MzAwMzg0OEM0IC8qIEl0ZXJhdG9yT3BlcmF0aW9ucy5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTcwMTNDQThDMUI0OTFB
OTQwMENBRTYxMyAvKiBKU01pY3JvdGFzay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNzAxM0NBOEExQjQ5MUE5NDAwQ0FFNjEzIC8qIEpTTWljcm90YXNr
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzA1
QjQxQUMxQTZFNTAxRTAwNzE2NzU3IC8qIFN5bWJvbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzA1QjQxQTQxQTZFNTAxRTAwNzE2NzU3IC8qIFN5bWJv
bC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0x
OTE2LDYgKzE5MTcsNyBAQAogCQlFM0ZGNzUzMzFEOUNFQTE4MDBDN0UxNkQgLyogRE9NSklUR2V0
dGVyU2V0dGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBFM0ZGNzUyRjFEOUNFQTEyMDBDN0UxNkQgLyogRE9NSklUR2V0dGVyU2V0dGVyLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTQ5REMxNkMxMkVG
Mjk0RTAwMTg0QTFGIC8qIFNvdXJjZVByb3ZpZGVyQ2FjaGUuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0OURDMTUxMTJFRjI3MjIwMDE4NEExRiAvKiBT
b3VyY2VQcm92aWRlckNhY2hlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJRTQ5REMxNkQxMkVGMjk1MzAwMTg0QTFGIC8qIFNvdXJjZVByb3ZpZGVy
Q2FjaGVJdGVtLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBFNDlEQzE0OTEyRUYyNjFBMDAxODRBMUYgLyogU291cmNlUHJvdmlkZXJDYWNoZUl0ZW0uaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlGRTA0MTU1
MzI1MkVDMDczMDA5MUVCNUQgLyogU2xvdFZpc2l0b3JNYWNyb3MuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFMDQxNTUyMjUyRUMwNzMwMDkxRUI1RCAv
KiBTbG90VmlzaXRvck1hY3Jvcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCUZFMDVGQUZEMUZFNENFREEwMDA5MzIzMCAvKiBEZXByZWNhdGVkSW5z
cGVjdG9yVmFsdWVzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDk5MkQ2QTExMUZCRDQ5MUQwMDAyNDVGNCAvKiBEZXByZWNhdGVkSW5zcGVjdG9yVmFs
dWVzLmNwcCAqLzsgfTsKIAkJRkUwODZCQ0EyMTIzREVGQjAwM0YyOTI5IC8qIEVudHJ5RnJhbWUu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFMDg2QkM5
MjEyM0RFRkEwMDNGMjkyOSAvKiBFbnRyeUZyYW1lLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRkUwRDRBMDYxQUI4REQwQTAwMkY1NEJGIC8qIEV4
ZWN1dGlvblRpbWVMaW1pdFRlc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRkUwRDRBMDQxQUI4REQwQTAwMkY1NEJGIC8qIEV4ZWN1dGlvblRpbWVM
aW1pdFRlc3QuY3BwICovOyB9OwpAQCAtMTkzOCw2ICsxOTQwLDcgQEAKIAkJRkUxRTJDM0YyMjQw
REQ1ODAwRjZCNzI5IC8qIE1hY3JvQXNzZW1ibGVyQVJNNjRFLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTFFMkMzRTIyNDBEMzBCMDBGNkI3MjkgLyog
TWFjcm9Bc3NlbWJsZXJBUk02NEUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQlGRTFFMkM0MDIyNDBERDYyMDBGNkI3MjkgLyogQVJNNjRFQXNzZW1i
bGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTFF
MkMzRDIyNDBEMkY2MDBGNkI3MjkgLyogQVJNNjRFQXNzZW1ibGVyLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRkUyMENFOUUxNUYwNEE5NTAwREYz
NDMwIC8qIExMSW50Q0xvb3AuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEZFMjBDRTlDMTVGMDRBOTUwMERGMzQzMCAvKiBMTEludENMb29wLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJRkUyODdEMDIyNTJG
QjJFODAwRDcyM0Y5IC8qIFZlcmlmaWVyU2xvdFZpc2l0b3IuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFMjg3RDAxMjUyRkIyRTgwMEQ3MjNGOSAvKiBW
ZXJpZmllclNsb3RWaXNpdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJRkUyQTg3NjAxRjAyMzgxNjAwRUIzMUIyIC8qIE1pbmltdW1SZXNlcnZl
ZFpvbmVTaXplLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBGRTJBODc1RjFGMDIzODE2MDBFQjMxQjIgLyogTWluaW11bVJlc2VydmVkWm9uZVNpemUuaCAq
LzsgfTsKIAkJRkUzMDIyRDMxRTNENzNBNTAwQkFDNDkzIC8qIFNpZ2lsbENyYXNoQW5hbHl6ZXIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFMzAyMkQx
MUUzRDczOTYwMEJBQzQ5MyAvKiBTaWdpbGxDcmFzaEFuYWx5emVyLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRkUzMDIyRDcxRTQyODU3MzAwQkFD
NDkzIC8qIFZNSW5zcGVjdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBGRTMwMjJENTFFNDI4NTY3MDBCQUM0OTMgLyogVk1JbnNwZWN0b3IuaCAqLzsg
fTsKQEAgLTE5NzUsNiArMTk3OCw4IEBACiAJCUZFODBDMTk3MUQ3NzVDREQwMDg1MTBDMCAvKiBD
YXRjaFNjb3BlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBGRTgwQzE5NjFENzc1QjI3MDA4NTEwQzAgLyogQ2F0Y2hTY29wZS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUZFOERFNTRCMjNBQzFEQUQwMDVD
OTE0MiAvKiBDYWNoZWFibGVJZGVudGlmaWVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBGRThERTU0QTIzQUMxREFEMDA1QzkxNDIgLyogQ2FjaGVhYmxl
SWRlbnRpZmllci5oICovOyB9OwogCQlGRThERTU0RDIzQUMxRTg2MDA1QzkxNDIgLyogQ2FjaGVh
YmxlSWRlbnRpZmllcklubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEZFOERFNTRDMjNBQzFFODYwMDVDOTE0MiAvKiBDYWNoZWFibGVJZGVudGlm
aWVySW5saW5lcy5oICovOyB9OworCQlGRTkxMkI0RjI1MzExOTMzMDBGQUJEREYgLyogQWJzdHJh
Y3RTbG90VmlzaXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gRkU5MTJCNEUyNTMxMTkzMzAwRkFCRERGIC8qIEFic3RyYWN0U2xvdFZpc2l0b3IuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlGRTkxMkI1
MTI1MzExQUQxMDBGQUJEREYgLyogQWJzdHJhY3RTbG90VmlzaXRvcklubGluZXMuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFOTEyQjUwMjUzMTFBRDEw
MEZBQkRERiAvKiBBYnN0cmFjdFNsb3RWaXNpdG9ySW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUZFOTlCMjQ5MUMyNEMzRDMwMEM4MjE1
OSAvKiBKSVROZWdHZW5lcmF0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEZFOTlCMjQ4MUMyNEI2RDMwMEM4MjE1OSAvKiBKSVROZWdHZW5lcmF0b3Iu
aCAqLzsgfTsKIAkJRkVBMDg2MjAxODJCN0EwNDAwRjZEODUxIC8qIEJyZWFrcG9pbnQuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFQTA4NjFFMTgyQjdB
MDQwMEY2RDg1MSAvKiBCcmVha3BvaW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJRkVBMDg2MjExODJCN0EwNDAwRjZEODUxIC8qIERlYnVnZ2Vy
UHJpbWl0aXZlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRkVBMDg2MUYxODJCN0EwNDAwRjZEODUxIC8qIERlYnVnZ2VyUHJpbWl0aXZlcy5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0zOTg3LDYgKzM5
OTIsNyBAQAogCQk2QTM4Q0ZBODFFMzJCNThCMDA2MDIwNkYgLyogQXN5bmNTdGFja1RyYWNlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFzeW5jU3RhY2tUcmFjZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2QUQyQ0I0QzE5QjkxNDAxMDAwNjU3MTkgLyogRGVi
dWdnZXJFdmFsRW5hYmxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEZWJ1
Z2dlckV2YWxFbmFibGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZCQTkzQzk1
OTA0ODRDNUJBRDkzMTZFQSAvKiBKU1NjcmlwdEZldGNoZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSlNTY3JpcHRGZXRjaGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTZCQ0NFQzAzMjVEMUZBMjcwMDBGMzkxRCAvKiBWZXJpZmllclNsb3RWaXNpdG9ySW5s
aW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBWZXJpZmllclNsb3RWaXNp
dG9ySW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MDExM0Q0OTFBOERC
MDkzMDAzODQ4QzQgLyogSXRlcmF0b3JPcGVyYXRpb25zLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEl0ZXJhdG9yT3BlcmF0aW9ucy5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTcwMTEzRDRBMUE4REIwOTMwMDM4NDhDNCAvKiBJdGVyYXRvck9wZXJh
dGlvbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSXRlcmF0b3JPcGVyYXRp
b25zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcwMTNDQTg5MUI0OTFBOTQwMENB
RTYxMyAvKiBKU01pY3JvdGFzay5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBKU01pY3JvdGFzay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01MjIw
LDYgKzUyMjYsNyBAQAogCQlGNjkyQTg4NzAyNTU1OTdEMDFGRjYwRjcgLyogSlNDSlNWYWx1ZS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGluZGVu
dFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBKU0NKU1ZhbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB9
OwogCQlGNzM5MjY5MThEQzY0MzMwQUZDREYwRDcgLyogSlNTb3VyY2VDb2RlLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTU291cmNlQ29kZS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFMDAyNjIyMjNGM0FGMzMwMDNBMzU4RiAvKiBXZWJBc3Nl
bWJseS5hc20gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmFzbS5hc207IG5hbWUgPSBXZWJBc3NlbWJseS5hc207IHBhdGggPSBsbGlu
dC9XZWJBc3NlbWJseS5hc207IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZFMDQxNTUy
MjUyRUMwNzMwMDkxRUI1RCAvKiBTbG90VmlzaXRvck1hY3Jvcy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBTbG90VmlzaXRvck1hY3Jvcy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlGRTA4NkJDOTIxMjNERUZBMDAzRjI5MjkgLyogRW50cnlGcmFtZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFbnRyeUZyYW1lLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUZFMEQ0QTA0MUFCOEREMEEwMDJGNTRCRiAvKiBFeGVjdXRpb25UaW1l
TGltaXRUZXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEV4ZWN1
dGlvblRpbWVMaW1pdFRlc3QuY3BwOyBwYXRoID0gQVBJL3Rlc3RzL0V4ZWN1dGlvblRpbWVMaW1p
dFRlc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTBENEEwNTFBQjhERDBB
MDAyRjU0QkYgLyogRXhlY3V0aW9uVGltZUxpbWl0VGVzdC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBFeGVjdXRpb25UaW1lTGltaXRUZXN0Lmg7IHBhdGggPSBBUEkvdGVzdHMv
RXhlY3V0aW9uVGltZUxpbWl0VGVzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAt
NTI1NCw3ICs1MjYxLDkgQEAKIAkJRkUxRTJDM0UyMjQwRDMwQjAwRjZCNzI5IC8qIE1hY3JvQXNz
ZW1ibGVyQVJNNjRFLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1hY3JvQXNz
ZW1ibGVyQVJNNjRFLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFMjBDRTlCMTVG
MDRBOTUwMERGMzQzMCAvKiBMTEludENMb29wLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgbmFtZSA9IExMSW50Q0xvb3AuY3BwOyBwYXRoID0gbGxpbnQvTExJbnRDTG9vcC5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFMjBDRTlDMTVGMDRBOTUwMERGMzQzMCAv
KiBMTEludENMb29wLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IExMSW50Q0xv
b3AuaDsgcGF0aCA9IGxsaW50L0xMSW50Q0xvb3AuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJRkUyODdEMDEyNTJGQjJFODAwRDcyM0Y5IC8qIFZlcmlmaWVyU2xvdFZpc2l0b3IuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVmVyaWZpZXJTbG90VmlzaXRvci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTJBODc1RjFGMDIzODE2MDBFQjMxQjIgLyog
TWluaW11bVJlc2VydmVkWm9uZVNpemUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWluaW11bVJlc2VydmVk
Wm9uZVNpemUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkUyQkQ2NkUyNUMwREM4
MjAwOTk5RDNCIC8qIFZlcmlmaWVyU2xvdFZpc2l0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gVmVyaWZpZXJTbG90VmlzaXRvci5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUZFMkU2QTdBMUQ2RUE1RkUwMDYwRjg5NiAvKiBUaHJvd1Njb3BlLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRocm93U2NvcGUuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTMwMjJEMDFFM0Q3Mzk2MDBCQUM0OTMgLyog
U2lnaWxsQ3Jhc2hBbmFseXplci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBTaWdpbGxDcmFzaEFuYWx5emVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJRkUzMDIyRDExRTNENzM5NjAwQkFDNDkzIC8qIFNpZ2lsbENyYXNoQW5hbHl6ZXIuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2lnaWxsQ3Jhc2hBbmFseXplci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNTMyNyw2ICs1MzM2LDggQEAKIAkJRkU4REU1NEMy
M0FDMUU4NjAwNUM5MTQyIC8qIENhY2hlYWJsZUlkZW50aWZpZXJJbmxpbmVzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENhY2hlYWJsZUlkZW50aWZpZXJJbmxpbmVzLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFOERFNTRFMjNBQzNBOEUwMDVDOTE0MiAvKiBD
YWNoZWFibGVJZGVudGlmaWVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENhY2hlYWJsZUlkZW50
aWZpZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTkwQkIzQTFCN0NGNjRF
MDA2QjNGMDMgLyogVk1JbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFZNSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRTkxMkI0RTI1MzEx
OTMzMDBGQUJEREYgLyogQWJzdHJhY3RTbG90VmlzaXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBBYnN0cmFjdFNsb3RWaXNpdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUZFOTEyQjUwMjUzMTFBRDEwMEZBQkRERiAvKiBBYnN0cmFjdFNsb3RWaXNpdG9y
SW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBYnN0cmFjdFNsb3RW
aXNpdG9ySW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTk4QjVCNjFC
QjlBRTExMDA3M0U3QTYgLyogSklUU3ViR2VuZXJhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEpJVFN1YkdlbmVyYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlGRTk5QjI0NzFDMjRCNkQzMDBDODIxNTkgLyogSklUTmVnR2VuZXJhdG9yLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpJVE5lZ0dlbmVyYXRvci5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFOTlCMjQ4MUMyNEI2RDMwMEM4MjE1OSAvKiBK
SVROZWdHZW5lcmF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSklUTmVn
R2VuZXJhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC02Mjc2LDYgKzYyODcs
OCBAQAogCQkxNDJFMzEyQTEzNEZGMEE2MDBBRkFEQjUgLyogaGVhcCAqLyA9IHsKIAkJCWlzYSA9
IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJRkU5MTJCNEUyNTMxMTkzMzAwRkFCRERG
IC8qIEFic3RyYWN0U2xvdFZpc2l0b3IuaCAqLywKKwkJCQlGRTkxMkI1MDI1MzExQUQxMDBGQUJE
REYgLyogQWJzdHJhY3RTbG90VmlzaXRvcklubGluZXMuaCAqLywKIAkJCQkwRkVDM0M1MDFGMzNB
NDE2MDBGNTlCNkMgLyogQWxpZ25lZE1lbW9yeUFsbG9jYXRvci5jcHAgKi8sCiAJCQkJMEZFQzND
NTExRjMzQTQxNjAwRjU5QjZDIC8qIEFsaWduZWRNZW1vcnlBbGxvY2F0b3IuaCAqLywKIAkJCQkw
RkE3NjIwQTFEQjk1OUY2MDBCN0EyRkQgLyogQWxsb2NhdGluZ1Njb3BlLmggKi8sCkBAIC02NDMy
LDYgKzY0NDUsNyBAQAogCQkJCUMyMjU0OTQyMTVGN0RCQUEwMDY1RTg5OCAvKiBTbG90VmlzaXRv
ci5jcHAgKi8sCiAJCQkJMTRCQTc4RjAxM0FBQjg4RjAwNUI3QzJDIC8qIFNsb3RWaXNpdG9yLmgg
Ki8sCiAJCQkJMEZDQjQwODUxNUMwQTNDMzAwNDg5MzJCIC8qIFNsb3RWaXNpdG9ySW5saW5lcy5o
ICovLAorCQkJCUZFMDQxNTUyMjUyRUMwNzMwMDkxRUI1RCAvKiBTbG90VmlzaXRvck1hY3Jvcy5o
ICovLAogCQkJCTBGREU4N0ZBMURGRTZFNTAwMDY0QzM5MCAvKiBTcGFjZVRpbWVNdXRhdG9yU2No
ZWR1bGVyLmNwcCAqLywKIAkJCQkwRkRFODdGQjFERkU2RTUwMDA2NEMzOTAgLyogU3BhY2VUaW1l
TXV0YXRvclNjaGVkdWxlci5oICovLAogCQkJCTBGNEY4Mjg5MUUzMUI5NzEwMDc1MTg0QyAvKiBT
dG9jaGFzdGljU3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlci5jcHAgKi8sCkBAIC02NDQ5LDYgKzY0
NjMsOSBAQAogCQkJCTBGMUZCMzhBMUUxNzNBNjIwMEE5QkU1MCAvKiBTeW5jaHJvbm91c1N0b3BU
aGVXb3JsZE11dGF0b3JTY2hlZHVsZXIuY3BwICovLAogCQkJCTBGMUZCMzhCMUUxNzNBNjIwMEE5
QkU1MCAvKiBTeW5jaHJvbm91c1N0b3BUaGVXb3JsZE11dGF0b3JTY2hlZHVsZXIuaCAqLywKIAkJ
CQkxNDE0NDhDQzEzQTE3ODM3MDBGNUJBMUEgLyogVGlueUJsb29tRmlsdGVyLmggKi8sCisJCQkJ
RkUyQkQ2NkUyNUMwREM4MjAwOTk5RDNCIC8qIFZlcmlmaWVyU2xvdFZpc2l0b3IuY3BwICovLAor
CQkJCUZFMjg3RDAxMjUyRkIyRTgwMEQ3MjNGOSAvKiBWZXJpZmllclNsb3RWaXNpdG9yLmggKi8s
CisJCQkJNkJDQ0VDMDMyNUQxRkEyNzAwMEYzOTFEIC8qIFZlcmlmaWVyU2xvdFZpc2l0b3JJbmxp
bmVzLmggKi8sCiAJCQkJMEY0RDhDNzIxRkM3QTk3MzAwMUQzMkFDIC8qIFZpc2l0Q291bnRlci5o
ICovLAogCQkJCTBGOTUyQTlGMURGNzg2MDcwMEUwNkZCRCAvKiBWaXNpdFJhY2VLZXkuY3BwICov
LAogCQkJCTBGOTUyQUEwMURGNzg2MDcwMEUwNkZCRCAvKiBWaXNpdFJhY2VLZXkuaCAqLywKQEAg
LTkyOTAsNiArOTMwNyw3IEBACiAJCQkJMTQ3QjgzQUMwRTZEQjhDOTAwNDc3NUE0IC8qIEJhdGNo
ZWRUcmFuc2l0aW9uT3B0aW1pemVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMzVFODlGRDI1QzUw
Rjg3MDA3MUVFMUUgLyogQmlnSW50NjRBcnJheS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODY5NzZF
NUYxRkEzRThCQzAwRTdDNEUxIC8qIEJpZ0ludENvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywK
KwkJCQlGRTA0MTU1MzI1MkVDMDczMDA5MUVCNUQgLyogU2xvdFZpc2l0b3JNYWNyb3MuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTg2NjczOUQyMTNCRkRFNzEwMDIzRDg3QyAvKiBCaWdJbnRlZ2VyLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk4NjE4MTY3NzFGQjc5MjQyMDBFQ0M0RUMgLyogQmlnSW50T2Jq
ZWN0LmggaW4gSGVhZGVycyAqLywKIAkJCQk4Njk3NkU1RTFGQTNFOEI2MDBFN0M0RTEgLyogQmln
SW50UHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywKQEAgLTk1NzEsNiArOTU4OSw3IEBACiAJCQkJ
MEZEODJFNTcxNDFEQUYxMDAwMTc5Qzk0IC8qIERGR09TUkVudHJ5LmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRkQ4QTMyNjE3RDUxRjU3MDBDQTJDNDAgLyogREZHT1NSRW50cnlwb2ludENyZWF0aW9u
UGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQzA5NzZBMTQ2OEE2RjcwMENGMjQ0MiAvKiBE
RkdPU1JFeGl0LmggaW4gSGVhZGVycyAqLywKKwkJCQlGRTkxMkI0RjI1MzExOTMzMDBGQUJEREYg
LyogQWJzdHJhY3RTbG90VmlzaXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyMzVCRUMxNzE3
OEU3MzAwNjkwQzdGIC8qIERGR09TUkV4aXRCYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkZC
OTIxQzE2RDAyRjExMDA1NUE1REIgLyogREZHT1NSRXhpdENvbXBpbGF0aW9uSW5mby5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEY3MDI1QUExNzE0QjBGQzAwMzgyQzBFIC8qIERGR09TUkV4aXRDb21w
aWxlckNvbW1vbi5oIGluIEhlYWRlcnMgKi8sCkBAIC05ODU2LDYgKzk4NzUsNyBAQAogCQkJCUE1
MTNFNUJFMTg1QkZBQ0MwMDdFOTVBRCAvKiBJbmplY3RlZFNjcmlwdEhvc3QuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUE1MTNFNUNCMTg1Rjk2MjQwMDdFOTVBRCAvKiBJbmplY3RlZFNjcmlwdE1hbmFn
ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1ODQwRTIxMTg3QjdCODYwMDg0M0IxMCAvKiBJbmpl
Y3RlZFNjcmlwdE1vZHVsZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJRkUyODdEMDIyNTJGQjJFODAw
RDcyM0Y5IC8qIFZlcmlmaWVyU2xvdFZpc2l0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1MTNF
NUM3MTg1Rjk0NDYwMDdFOTVBRCAvKiBJbmplY3RlZFNjcmlwdFNvdXJjZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJOTk1OUU5MzIxQkQxODI3OTAwMUFBNDEzIC8qIGlubGluZS1hbmQtbWluaWZ5LXN0
eWxlc2hlZXRzLWFuZC1zY3JpcHRzLnB5IGluIEhlYWRlcnMgKi8sCiAJCQkJNzkwNUJCNjkxRDEy
MDUwRTAwMTlGRTU3IC8qIElubGluZUFjY2Vzcy5oIGluIEhlYWRlcnMgKi8sCkBAIC0xMDAzMSw2
ICsxMDA1MSw3IEBACiAJCQkJQTU4QzAyNDIxOEU0QTQxQTAwMDMyQkM1IC8qIEpTQ29udGV4dFBy
aXZhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDFFMEUxNkY1Q0QwMEIzNDQ2MCAvKiBK
U0NvbnRleHRSZWYuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1RUE3MEVFMTlGNUI1QzQwMDk4RjVF
QyAvKiBKU0NvbnRleHRSZWZJbnNwZWN0b3JTdXBwb3J0LmggaW4gSGVhZGVycyAqLywKKwkJCQk2
QkNDRUMwNDI1RDFGQTI3MDAwRjM5MUQgLyogVmVyaWZpZXJTbG90VmlzaXRvcklubGluZXMuaCBp
biBIZWFkZXJzICovLAogCQkJCUE1RDJFNjY1MTk1RTE3NDAwMEE1MThFNyAvKiBKU0NvbnRleHRS
ZWZJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQ4Q0QxRDgxMDhDRjkwMjAwODE2M0M2
IC8qIEpTQ29udGV4dFJlZlByaXZhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUZFNzQ5N0U2MjA5
MDAxQjEwMDAzNTY1QiAvKiBKU0NQdHJUYWcuaCBpbiBIZWFkZXJzICovLApAQCAtMTAxNjEsNiAr
MTAxODIsNyBAQAogCQkJCTc5NUFDNjE4MjBBMjM1NUUwMDUyQzc2QyAvKiBKU1ZpcnR1YWxNYWNo
aW5lUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdDQTNBRTgxN0RBNDFBRTAwNjUzOEFG
IC8qIEpTV2Vha01hcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc0ODJFOTMxMTZBN0NBRDAwM0Iw
NzEyIC8qIEpTV2Vha09iamVjdE1hcFJlZkludGVybmFsLmggaW4gSGVhZGVycyAqLywKKwkJCQlG
RTkxMkI1MTI1MzExQUQxMDBGQUJEREYgLyogQWJzdHJhY3RTbG90VmlzaXRvcklubGluZXMuaCBp
biBIZWFkZXJzICovLAogCQkJCUE3NDgyQjkzMTE2NzExNDcwMDNCMDcxMiAvKiBKU1dlYWtPYmpl
Y3RNYXBSZWZQcml2YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MzlCRkJCMDIyQUQzQ0RDMDAy
M0Y0QzAgLyogSlNXZWFrT2JqZWN0UmVmLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjBCMjg2QjFF
QjhFNkNGMDAwRUI1RDIgLyogSlNXZWFrUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy93a2J1aWx0aW5zL2J1aWx0aW5zX2dlbmVyYXRl
X2ludGVybmFsc193cmFwcGVyX2hlYWRlci5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvU2NyaXB0cy93a2J1aWx0aW5zL2J1aWx0aW5zX2dlbmVyYXRlX2ludGVybmFsc193
cmFwcGVyX2hlYWRlci5weQkocmV2aXNpb24gMjcyNzY5KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL1NjcmlwdHMvd2tidWlsdGlucy9idWlsdGluc19nZW5lcmF0ZV9pbnRlcm5hbHNfd3JhcHBl
cl9oZWFkZXIucHkJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAjIS91c3IvYmluL2Vu
diBweXRob24KICMKLSMgQ29weXJpZ2h0IChjKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyMgQ29weXJpZ2h0IChjKSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogIwogIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC05Myw3ICs5Myw3IEBA
IGNsYXNzIEJ1aWx0aW5zSW50ZXJuYWxzV3JhcHBlckhlYWRlckdlbmUKIAogICAgIGRlZiBnZW5l
cmF0ZV9tZXRob2RzKHNlbGYpOgogICAgICAgICByZXR1cm4gIiIiCi0gICAgdm9pZCB2aXNpdChK
U0M6OlNsb3RWaXNpdG9yJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCB2
aXNpdChWaXNpdG9yJik7CiAgICAgdm9pZCBpbml0aWFsaXplKEpTRE9NR2xvYmFsT2JqZWN0Jik7
CiAiIiIKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvd2tidWlsdGlucy9i
dWlsdGluc19nZW5lcmF0ZV9pbnRlcm5hbHNfd3JhcHBlcl9pbXBsZW1lbnRhdGlvbi5weQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy93a2J1aWx0aW5zL2J1aWx0
aW5zX2dlbmVyYXRlX2ludGVybmFsc193cmFwcGVyX2ltcGxlbWVudGF0aW9uLnB5CShyZXZpc2lv
biAyNzI3NjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy93a2J1aWx0aW5zL2J1
aWx0aW5zX2dlbmVyYXRlX2ludGVybmFsc193cmFwcGVyX2ltcGxlbWVudGF0aW9uLnB5CSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiAjCi0jIENv
cHlyaWdodCAoYykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjIENvcHly
aWdodCAoYykgMjAxNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICMKICMg
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTIwLDEzICsxMjAsMTYgQEAgY2xhc3MgQnVpbHRp
bnNJbnRlcm5hbHNXcmFwcGVySW1wbGVtZW50YQogICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGxp
bmVzKQogCiAgICAgZGVmIGdlbmVyYXRlX3Zpc2l0X21ldGhvZChzZWxmKToKLSAgICAgICAgbGlu
ZXMgPSBbInZvaWQgSlNCdWlsdGluSW50ZXJuYWxGdW5jdGlvbnM6OnZpc2l0KEpTQzo6U2xvdFZp
c2l0b3ImIHZpc2l0b3IpIiwKKyAgICAgICAgbGluZXMgPSBbInRlbXBsYXRlPHR5cGVuYW1lIFZp
c2l0b3I+IiwKKyAgICAgICAgICAgICAgICAgInZvaWQgSlNCdWlsdGluSW50ZXJuYWxGdW5jdGlv
bnM6OnZpc2l0KFZpc2l0b3ImIHZpc2l0b3IpIiwKICAgICAgICAgICAgICAgICAgInsiXQogICAg
ICAgICBmb3Igb2JqZWN0IGluIHNlbGYuaW50ZXJuYWxzOgogICAgICAgICAgICAgdmlzaXQgPSAi
ICAgICVzLnZpc2l0KHZpc2l0b3IpOyIgJSBzZWxmLm1lbWJlcl9uYW1lKG9iamVjdCkKICAgICAg
ICAgICAgIGxpbmVzLmFwcGVuZChCdWlsdGluc0dlbmVyYXRvci53cmFwX3dpdGhfZ3VhcmQob2Jq
ZWN0LmFubm90YXRpb25zLmdldCgnY29uZGl0aW9uYWwnKSwgdmlzaXQpKQogICAgICAgICBsaW5l
cy5hcHBlbmQoIiAgICBVTlVTRURfUEFSQU0odmlzaXRvcik7IikKICAgICAgICAgbGluZXMuYXBw
ZW5kKCJ9XG4iKQorICAgICAgICBsaW5lcy5hcHBlbmQoInRlbXBsYXRlIHZvaWQgSlNCdWlsdGlu
SW50ZXJuYWxGdW5jdGlvbnM6OnZpc2l0KEFic3RyYWN0U2xvdFZpc2l0b3ImKTsiKQorICAgICAg
ICBsaW5lcy5hcHBlbmQoInRlbXBsYXRlIHZvaWQgSlNCdWlsdGluSW50ZXJuYWxGdW5jdGlvbnM6
OnZpc2l0KFNsb3RWaXNpdG9yJik7XG4iKQogICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGxpbmVz
KQogCiAgICAgZGVmIF9nZW5lcmF0ZV9pbml0aWFsaXplX3N0YXRpY19nbG9iYWxzKHNlbGYpOgpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvd2tidWlsdGlucy9idWlsdGluc190
ZW1wbGF0ZXMucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMv
d2tidWlsdGlucy9idWlsdGluc190ZW1wbGF0ZXMucHkJKHJldmlzaW9uIDI3Mjc2OSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL3drYnVpbHRpbnMvYnVpbHRpbnNfdGVtcGxhdGVz
LnB5CSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogIyEvdXNyL2Jpbi9lbnYgcHl0aG9u
CiAjCi0jIENvcHlyaWdodCAoYykgMjAxNC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyMgQ29weXJpZ2h0IChjKSAyMDE0LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogIyBDb3B5cmlnaHQgKEMpIDIwMTUgQ2Fub24gSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogIwogIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTE4OCw3ICsxODgsNyBAQCBwdWJsaWM6CiAgICAgZXhw
bGljaXQgJHtvYmplY3ROYW1lfUJ1aWx0aW5GdW5jdGlvbnMoSlNDOjpWTSYgdm0pIDogbV92bSh2
bSkgeyB9CiAKICAgICB2b2lkIGluaXQoSlNDOjpKU0dsb2JhbE9iamVjdCYpOwotICAgIHZvaWQg
dmlzaXQoSlNDOjpTbG90VmlzaXRvciYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+
IHZvaWQgdmlzaXQoVmlzaXRvciYpOwogCiBwdWJsaWM6CiAgICAgSlNDOjpWTSYgbV92bTsKQEAg
LTIwNywxMCArMjA3LDE1IEBAIGlubGluZSB2b2lkICR7b2JqZWN0TmFtZX1CdWlsdGluRnVuY3Rp
b24KICN1bmRlZiBFWFBPUlRfRlVOQ1RJT04KIH0KIAotaW5saW5lIHZvaWQgJHtvYmplY3ROYW1l
fUJ1aWx0aW5GdW5jdGlvbnM6OnZpc2l0KEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1w
bGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgoraW5saW5lIHZvaWQgJHtvYmplY3ROYW1lfUJ1aWx0aW5G
dW5jdGlvbnM6OnZpc2l0KFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAjZGVmaW5lIFZJU0lUX0ZVTkNU
SU9OKG5hbWUpIHZpc2l0b3IuYXBwZW5kKG1fIyNuYW1lIyNGdW5jdGlvbik7CiAgICAgJHttYWNy
b1ByZWZpeH1fRk9SRUFDSF8ke29iamVjdE1hY3JvfV9CVUlMVElOX0ZVTkNUSU9OX05BTUUoVklT
SVRfRlVOQ1RJT04pCiAjdW5kZWYgVklTSVRfRlVOQ1RJT04KIH0KKwordGVtcGxhdGUgdm9pZCAk
e29iamVjdE5hbWV9QnVpbHRpbkZ1bmN0aW9uczo6dmlzaXQoSlNDOjpBYnN0cmFjdFNsb3RWaXNp
dG9yJik7Cit0ZW1wbGF0ZSB2b2lkICR7b2JqZWN0TmFtZX1CdWlsdGluRnVuY3Rpb25zOjp2aXNp
dChKU0M6OlNsb3RWaXNpdG9yJik7CisKICIiIikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAJKHJldmlzaW9uIDI3Mjc2OSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTc1Nyw3ICs3NTcsOCBAQCBib29sIEFjY2Vzc0Nhc2U6OnZpc2l0V2VhayhWTSYgdm0pIGNv
bnN0CiAgICAgcmV0dXJuIGlzVmFsaWQ7CiB9CiAKLWJvb2wgQWNjZXNzQ2FzZTo6cHJvcGFnYXRl
VHJhbnNpdGlvbnMoU2xvdFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0Cit0ZW1wbGF0ZTx0eXBlbmFt
ZSBWaXNpdG9yPgorYm9vbCBBY2Nlc3NDYXNlOjpwcm9wYWdhdGVUcmFuc2l0aW9ucyhWaXNpdG9y
JiB2aXNpdG9yKSBjb25zdAogewogICAgIGJvb2wgcmVzdWx0ID0gdHJ1ZTsKIApAQCAtNzcyLDcg
Kzc3Myw3IEBAIGJvb2wgQWNjZXNzQ2FzZTo6cHJvcGFnYXRlVHJhbnNpdGlvbnMoU2wKICAgICBz
d2l0Y2ggKG1fdHlwZSkgewogICAgIGNhc2UgVHJhbnNpdGlvbjoKICAgICBjYXNlIERlbGV0ZToK
LSAgICAgICAgaWYgKHZpc2l0b3Iudm0oKS5oZWFwLmlzTWFya2VkKG1fc3RydWN0dXJlLT5wcmV2
aW91c0lEKCkpKQorICAgICAgICBpZiAodmlzaXRvci5pc01hcmtlZChtX3N0cnVjdHVyZS0+cHJl
dmlvdXNJRCgpKSkKICAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQobV9zdHJ1
Y3R1cmUuZ2V0KCkpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICByZXN1bHQgPSBmYWxzZTsK
QEAgLTc4NCw3ICs3ODUsMTAgQEAgYm9vbCBBY2Nlc3NDYXNlOjpwcm9wYWdhdGVUcmFuc2l0aW9u
cyhTbAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQgQWNjZXNzQ2FzZTo6dmlzaXRBZ2dy
ZWdhdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0Cit0ZW1wbGF0ZSBib29sIEFjY2Vzc0Nh
c2U6OnByb3BhZ2F0ZVRyYW5zaXRpb25zKFNsb3RWaXNpdG9yJikgY29uc3Q7Cit0ZW1wbGF0ZSBi
b29sIEFjY2Vzc0Nhc2U6OnByb3BhZ2F0ZVRyYW5zaXRpb25zKEFic3RyYWN0U2xvdFZpc2l0b3Im
KSBjb25zdDsKKwordm9pZCBBY2Nlc3NDYXNlOjp2aXNpdEFnZ3JlZ2F0ZShBYnN0cmFjdFNsb3RW
aXNpdG9yJiB2aXNpdG9yKSBjb25zdAogewogICAgIG1faWRlbnRpZmllci52aXNpdEFnZ3JlZ2F0
ZSh2aXNpdG9yKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nl
c3NDYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Fj
Y2Vzc0Nhc2UuaAkocmV2aXNpb24gMjcyNzY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0FjY2Vzc0Nhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI4MCw5ICsyODAsOSBAQCBw
cml2YXRlOgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CiAgICAgdm9pZCBmb3JFYWNo
RGVwZW5kZW50Q2VsbChWTSYsIGNvbnN0IEZ1bmN0b3ImKSBjb25zdDsKIAotICAgIHZvaWQgdmlz
aXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImKSBjb25zdDsKKyAgICB2b2lkIHZpc2l0QWdncmVnYXRl
KEFic3RyYWN0U2xvdFZpc2l0b3ImKSBjb25zdDsKICAgICBib29sIHZpc2l0V2VhayhWTSYpIGNv
bnN0OwotICAgIGJvb2wgcHJvcGFnYXRlVHJhbnNpdGlvbnMoU2xvdFZpc2l0b3ImKSBjb25zdDsK
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiBib29sIHByb3BhZ2F0ZVRyYW5zaXRpb25z
KFZpc2l0b3ImKSBjb25zdDsKIAogICAgIC8vIEZJWE1FOiBUaGlzIG9ubHkgZXhpc3RzIGJlY2F1
c2Ugb2YgaG93IEFjY2Vzc0Nhc2UgcHV0cyBwb3N0LWdlbmVyYXRpb24gdGhpbmdzIGludG8gaXRz
ZWxmLgogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTY0
NTYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeVZhbEluZm8uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeVZhbEluZm8uY3Bw
CShyZXZpc2lvbiAyNzI3NjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnlW
YWxJbmZvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwxMCArMSwxMCBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMjAtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKICAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogMS4g
UmVkaXN0cmlidXRWZXJpZmllclNsb3RWaXNpdG9yaW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CiAgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCiAgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAogICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQpAQCAtMzIsNyArMzIsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogI2lmIEVO
QUJMRShKSVQpCiAKLXZvaWQgQnlWYWxJbmZvOjp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYg
dmlzaXRvcikKK3ZvaWQgQnlWYWxJbmZvOjp2aXNpdEFnZ3JlZ2F0ZShBYnN0cmFjdFNsb3RWaXNp
dG9yJiB2aXNpdG9yKQogewogICAgIGNhY2hlZElkLnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOwog
fQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5VmFsSW5mby5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeVZhbEluZm8uaAkocmV2
aXNpb24gMjcyNzY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5VmFsSW5m
by5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMi0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYwLDcgKzI2MCw3IEBAIHN0cnVjdCBCeVZhbEluZm8g
ewogICAgICAgICB0aGlzLT5zZWVuID0gZmFsc2U7CiAgICAgfQogCi0gICAgdm9pZCB2aXNpdEFn
Z3JlZ2F0ZShTbG90VmlzaXRvciYpOworICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoQWJzdHJhY3RT
bG90VmlzaXRvciYpOwogCiAgICAgQ29kZUxvY2F0aW9uSnVtcDxKU0ludGVybmFsUHRyVGFnPiBu
b3RJbmRleEp1bXA7CiAgICAgQ29kZUxvY2F0aW9uSnVtcDxKU0ludGVybmFsUHRyVGFnPiBiYWRU
eXBlSnVtcDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DaGVja1ByaXZh
dGVCcmFuZFN0YXR1cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0NoZWNrUHJpdmF0ZUJyYW5kU3RhdHVzLmNwcAkocmV2aXNpb24gMjcyNzY5KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NoZWNrUHJpdmF0ZUJyYW5kU3RhdHVzLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjI4LDEzICsyMjgsMTMgQEAgQ2FjaGVhYmxlSWRlbnRpZmll
ciBDaGVja1ByaXZhdGVCcmFuZFN0YQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQgQ2hl
Y2tQcml2YXRlQnJhbmRTdGF0dXM6OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9y
KQordm9pZCBDaGVja1ByaXZhdGVCcmFuZFN0YXR1czo6dmlzaXRBZ2dyZWdhdGUoQWJzdHJhY3RT
bG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBmb3IgKENoZWNrUHJpdmF0ZUJyYW5kVmFyaWFu
dCYgdmFyaWFudCA6IG1fdmFyaWFudHMpCiAgICAgICAgIHZhcmlhbnQudmlzaXRBZ2dyZWdhdGUo
dmlzaXRvcik7CiB9CiAKLXZvaWQgQ2hlY2tQcml2YXRlQnJhbmRTdGF0dXM6Om1hcmtJZkNoZWFw
KFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBDaGVja1ByaXZhdGVCcmFuZFN0YXR1czo6bWFy
a0lmQ2hlYXAoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBmb3IgKENoZWNr
UHJpdmF0ZUJyYW5kVmFyaWFudCYgdmFyaWFudCA6IG1fdmFyaWFudHMpCiAgICAgICAgIHZhcmlh
bnQubWFya0lmQ2hlYXAodmlzaXRvcik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQ2hlY2tQcml2YXRlQnJhbmRTdGF0dXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2hlY2tQcml2YXRlQnJhbmRTdGF0dXMuaAkocmV2aXNpb24g
MjcyNzY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NoZWNrUHJpdmF0ZUJy
YW5kU3RhdHVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTgyLDggKzgyLDggQEAgcHVibGljOgogICAg
IC8vIEF0dGVtcHRzIHRvIHJlZHVjZSB0aGUgc2V0IG9mIHZhcmlhbnRzIHRvIGZpdCB0aGUgZ2l2
ZW4gc3RydWN0dXJlIHNldC4gVGhpcyBtYXkgYmUgYXBwcm94aW1hdGUuCiAgICAgdm9pZCBmaWx0
ZXIoY29uc3QgU3RydWN0dXJlU2V0Jik7CiAKLSAgICB2b2lkIHZpc2l0QWdncmVnYXRlKFNsb3RW
aXNpdG9yJik7Ci0gICAgdm9pZCBtYXJrSWZDaGVhcChTbG90VmlzaXRvciYpOworICAgIHZvaWQg
dmlzaXRBZ2dyZWdhdGUoQWJzdHJhY3RTbG90VmlzaXRvciYpOworICAgIHZvaWQgbWFya0lmQ2hl
YXAoQWJzdHJhY3RTbG90VmlzaXRvciYpOwogICAgIGJvb2wgZmluYWxpemUoVk0mKTsKIAogICAg
IGJvb2wgYXBwZW5kVmFyaWFudChjb25zdCBDaGVja1ByaXZhdGVCcmFuZFZhcmlhbnQmKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DaGVja1ByaXZhdGVCcmFuZFZhcmlh
bnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DaGVj
a1ByaXZhdGVCcmFuZFZhcmlhbnQuY3BwCShyZXZpc2lvbiAyNzI3NjkpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2hlY2tQcml2YXRlQnJhbmRWYXJpYW50LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTEsNyArNTEsNyBAQCBib29sIENoZWNrUHJpdmF0ZUJyYW5kVmFyaWFudDo6
YXR0ZW1wdFRvCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgQ2hlY2tQcml2YXRlQnJhbmRW
YXJpYW50OjptYXJrSWZDaGVhcChTbG90VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgQ2hlY2tQcml2
YXRlQnJhbmRWYXJpYW50OjptYXJrSWZDaGVhcChBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9y
KQogewogICAgIG1fc3RydWN0dXJlU2V0Lm1hcmtJZkNoZWFwKHZpc2l0b3IpOwogfQpAQCAtNjMs
NyArNjMsNyBAQCBib29sIENoZWNrUHJpdmF0ZUJyYW5kVmFyaWFudDo6ZmluYWxpemUoCiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgQ2hlY2tQcml2YXRlQnJhbmRWYXJpYW50Ojp2aXNpdEFn
Z3JlZ2F0ZShTbG90VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgQ2hlY2tQcml2YXRlQnJhbmRWYXJp
YW50Ojp2aXNpdEFnZ3JlZ2F0ZShBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAg
IG1faWRlbnRpZmllci52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKIH0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DaGVja1ByaXZhdGVCcmFuZFZhcmlhbnQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2hlY2tQcml2YXRlQnJhbmRW
YXJpYW50LmgJKHJldmlzaW9uIDI3Mjc2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9DaGVja1ByaXZhdGVCcmFuZFZhcmlhbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiAr
MzIsNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAorY2xhc3MgQWJzdHJhY3RTbG90VmlzaXRvcjsK
IGNsYXNzIENoZWNrUHJpdmF0ZUJyYW5kU3RhdHVzOwogCiBjbGFzcyBDaGVja1ByaXZhdGVCcmFu
ZFZhcmlhbnQgewpAQCAtNDYsOCArNDcsOCBAQCBwdWJsaWM6CiAKICAgICBib29sIGF0dGVtcHRU
b01lcmdlKGNvbnN0IENoZWNrUHJpdmF0ZUJyYW5kVmFyaWFudCYgb3RoZXIpOwogCi0gICAgdm9p
ZCB2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYpOwotICAgIHZvaWQgbWFya0lmQ2hlYXAoU2xv
dFZpc2l0b3ImKTsKKyAgICB2b2lkIHZpc2l0QWdncmVnYXRlKEFic3RyYWN0U2xvdFZpc2l0b3Im
KTsKKyAgICB2b2lkIG1hcmtJZkNoZWFwKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKICAgICBib29s
IGZpbmFsaXplKFZNJik7CiAKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZp
c2lvbiAyNzI3NjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2Nr
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAwMSw3ICsxMDAxLDggQEAgc2l6ZV90IENvZGVCbG9j
azo6ZXN0aW1hdGVkU2l6ZShKU0NlbGwqIAogICAgIHJldHVybiBCYXNlOjplc3RpbWF0ZWRTaXpl
KGNlbGwsIHZtKSArIGV4dHJhTWVtb3J5QWxsb2NhdGVkOwogfQogCi12b2lkIENvZGVCbG9jazo6
dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxh
dGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgQ29kZUJsb2NrOjp2aXNpdENoaWxkcmVuSW1wbChK
U0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgQ29kZUJsb2NrKiB0aGlzT2Jq
ZWN0ID0ganNDYXN0PENvZGVCbG9jayo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5I
RVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTEwMTAsOSArMTAxMSwxNCBAQCB2b2lkIENv
ZGVCbG9jazo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlCiAgICAgdGhpc09iamVjdC0+dmlzaXRD
aGlsZHJlbih2aXNpdG9yKTsKIH0KIAotdm9pZCBDb2RlQmxvY2s6OnZpc2l0Q2hpbGRyZW4oU2xv
dFZpc2l0b3ImIHZpc2l0b3IpCitERUZJTkVfVklTSVRfQ0hJTERSRU4oQ29kZUJsb2NrKTsKKwor
dGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgQ29kZUJsb2NrOjp2aXNpdENoaWxkcmVu
SW1wbChWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIo
bV9sb2NrKTsKKworICAgIG1fdmlzaXRDaGlsZHJlblNraXBwZWREdWVUb09sZEFnZSA9IGZhbHNl
OwogICAgIGlmIChDb2RlQmxvY2sqIG90aGVyQmxvY2sgPSBzcGVjaWFsT1NSRW50cnlCbG9ja09y
TnVsbCgpKQogICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKG90aGVyQmxvY2spOwog
CkBAIC0xMDI5LDEzICsxMDM1LDIzIEBAIHZvaWQgQ29kZUJsb2NrOjp2aXNpdENoaWxkcmVuKFNs
b3RWaXNpdG8KICAgICBWTTo6U3BhY2VBbmRTZXQ6OnNldEZvcigqc3Vic3BhY2UoKSkuYWRkKHRo
aXMpOwogfQogCi1ib29sIENvZGVCbG9jazo6c2hvdWxkVmlzaXRTdHJvbmdseShjb25zdCBDb25j
dXJyZW50SlNMb2NrZXImIGxvY2tlcikKK0RFRklORV9JTlNUQU5DRV9WSVNJVF9DSElMRFJFTihD
b2RlQmxvY2spOworCitib29sIENvZGVCbG9jazo6c2hvdWxkVmlzaXRTdHJvbmdseShjb25zdCBD
b25jdXJyZW50SlNMb2NrZXImIGxvY2tlciwgQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikK
IHsKICAgICBpZiAoT3B0aW9uczo6Zm9yY2VDb2RlQmxvY2tMaXZlbmVzcygpKQogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKIAotICAgIGlmIChzaG91bGRKZXR0aXNvbkR1ZVRvT2xkQWdlKGxvY2tlcikp
CisgICAgaWYgKHNob3VsZEpldHRpc29uRHVlVG9PbGRBZ2UobG9ja2VyLCB2aXNpdG9yKSkgewor
ICAgICAgICBpZiAoT3B0aW9uczo6dmVyaWZ5R0MoKSkKKyAgICAgICAgICAgIG1fdmlzaXRDaGls
ZHJlblNraXBwZWREdWVUb09sZEFnZSA9IHRydWU7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisKKyAgICBpZiAobV92aXNpdENoaWxkcmVuU2tpcHBlZER1ZVRvT2xkQWdlKSB7CisgICAg
ICAgIEFTU0VSVChPcHRpb25zOjp2ZXJpZnlHQygpKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KIAogICAgIC8vIEludGVycHJldGVyIGFuZCBCYXNlbGluZSBKSVQgQ29kZUJsb2NrcyBk
b24ndCBuZWVkIHRvIGJlIGpldHRpc29uZWQgd2hlbgogICAgIC8vIHRoZWlyIHdlYWsgcmVmZXJl
bmNlcyBnbyBzdGFsZS4gU28gaWYgYSBiYXNsaW5lIEpJVCBDb2RlQmxvY2sgZ2V0cwpAQCAtMTA4
Niw5ICsxMTAyLDkgQEAgc3RhdGljIFNlY29uZHMgdGltZVRvTGl2ZShKSVRUeXBlIGppdFR5cAog
ICAgIH0KIH0KIAotYm9vbCBDb2RlQmxvY2s6OnNob3VsZEpldHRpc29uRHVlVG9PbGRBZ2UoY29u
c3QgQ29uY3VycmVudEpTTG9ja2VyJikKK2Jvb2wgQ29kZUJsb2NrOjpzaG91bGRKZXR0aXNvbkR1
ZVRvT2xkQWdlKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIEFic3RyYWN0U2xvdFZpc2l0b3Im
IHZpc2l0b3IpCiB7Ci0gICAgaWYgKG1fdm0tPmhlYXAuaXNNYXJrZWQodGhpcykpCisgICAgaWYg
KHZpc2l0b3IuaXNNYXJrZWQodGhpcykpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlm
IChVTkxJS0VMWShPcHRpb25zOjpmb3JjZUNvZGVCbG9ja1RvSmV0dGlzb25EdWVUb09sZEFnZSgp
KSkKQEAgLTExMDEsMTIgKzExMTcsMTIgQEAgYm9vbCBDb2RlQmxvY2s6OnNob3VsZEpldHRpc29u
RHVlVG9PbGRBZwogfQogCiAjaWYgRU5BQkxFKERGR19KSVQpCi1zdGF0aWMgYm9vbCBzaG91bGRN
YXJrVHJhbnNpdGlvbihWTSYgdm0sIERGRzo6V2Vha1JlZmVyZW5jZVRyYW5zaXRpb24mIHRyYW5z
aXRpb24pCitzdGF0aWMgaW5saW5lIGJvb2wgc2hvdWxkTWFya1RyYW5zaXRpb24oQWJzdHJhY3RT
bG90VmlzaXRvciYgdmlzaXRvciwgREZHOjpXZWFrUmVmZXJlbmNlVHJhbnNpdGlvbiYgdHJhbnNp
dGlvbikKIHsKLSAgICBpZiAodHJhbnNpdGlvbi5tX2NvZGVPcmlnaW4gJiYgIXZtLmhlYXAuaXNN
YXJrZWQodHJhbnNpdGlvbi5tX2NvZGVPcmlnaW4uZ2V0KCkpKQorICAgIGlmICh0cmFuc2l0aW9u
Lm1fY29kZU9yaWdpbiAmJiAhdmlzaXRvci5pc01hcmtlZCh0cmFuc2l0aW9uLm1fY29kZU9yaWdp
bi5nZXQoKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKLSAgICBpZiAoIXZtLmhlYXAu
aXNNYXJrZWQodHJhbnNpdGlvbi5tX2Zyb20uZ2V0KCkpKQorICAgIGlmICghdmlzaXRvci5pc01h
cmtlZCh0cmFuc2l0aW9uLm1fZnJvbS5nZXQoKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICAKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTExMjIsOCArMTEzOCw5IEBAIEJ5dGVjb2RlSW5kZXgg
Q29kZUJsb2NrOjpieXRlY29kZUluZGV4Rm8KIH0KICNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkK
IAotdm9pZCBDb2RlQmxvY2s6OnByb3BhZ2F0ZVRyYW5zaXRpb25zKGNvbnN0IENvbmN1cnJlbnRK
U0xvY2tlciYsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBDb2RlQmxvY2s6OnByb3BhZ2F0
ZVRyYW5zaXRpb25zKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIEFic3RyYWN0U2xvdFZpc2l0
b3ImIHZpc2l0b3IpCiB7CisgICAgQWJzdHJhY3RTbG90VmlzaXRvcjo6U3VwcHJlc3NHQ1Zlcmlm
aWVyU2NvcGUgc3VwcHJlc3NTY29wZSh2aXNpdG9yKTsKICAgICBWTSYgdm0gPSAqbV92bTsKIAog
ICAgIGlmIChqaXRUeXBlKCkgPT0gSklUVHlwZTo6SW50ZXJwcmV0ZXJUaHVuaykgewpAQCAtMTEz
Myw4ICsxMTUwLDkgQEAgdm9pZCBDb2RlQmxvY2s6OnByb3BhZ2F0ZVRyYW5zaXRpb25zKGNvbgog
ICAgICAgICAgICAgICAgIFN0cnVjdHVyZUlEIG5ld1N0cnVjdHVyZUlEID0gbWV0YWRhdGEubV9u
ZXdTdHJ1Y3R1cmVJRDsKICAgICAgICAgICAgICAgICBpZiAoIW9sZFN0cnVjdHVyZUlEIHx8ICFu
ZXdTdHJ1Y3R1cmVJRCkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworCiAgICAgICAgICAg
ICAgICAgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUgPSB2bS5oZWFwLnN0cnVjdHVyZUlEVGFibGUo
KS5nZXQob2xkU3RydWN0dXJlSUQpOwotICAgICAgICAgICAgICAgIGlmICh2bS5oZWFwLmlzTWFy
a2VkKG9sZFN0cnVjdHVyZSkpIHsKKyAgICAgICAgICAgICAgICBpZiAodmlzaXRvci5pc01hcmtl
ZChvbGRTdHJ1Y3R1cmUpKSB7CiAgICAgICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogbmV3U3Ry
dWN0dXJlID0gdm0uaGVhcC5zdHJ1Y3R1cmVJRFRhYmxlKCkuZ2V0KG5ld1N0cnVjdHVyZUlEKTsK
ICAgICAgICAgICAgICAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZChuZXdTdHJ1Y3R1
cmUpOwogICAgICAgICAgICAgICAgIH0KQEAgLTExNDgsMTEgKzExNjYsMTEgQEAgdm9pZCBDb2Rl
QmxvY2s6OnByb3BhZ2F0ZVRyYW5zaXRpb25zKGNvbgogCiAgICAgICAgICAgICAgICAgSlNDZWxs
KiBwcm9wZXJ0eSA9IG1ldGFkYXRhLm1fcHJvcGVydHkuZ2V0KCk7CiAgICAgICAgICAgICAgICAg
QVNTRVJUKHByb3BlcnR5KTsKLSAgICAgICAgICAgICAgICBpZiAoIXZtLmhlYXAuaXNNYXJrZWQo
cHJvcGVydHkpKQorICAgICAgICAgICAgICAgIGlmICghdmlzaXRvci5pc01hcmtlZChwcm9wZXJ0
eSkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICAgICAgICAgIFN0cnVj
dHVyZSogb2xkU3RydWN0dXJlID0gdm0uaGVhcC5zdHJ1Y3R1cmVJRFRhYmxlKCkuZ2V0KG9sZFN0
cnVjdHVyZUlEKTsKLSAgICAgICAgICAgICAgICBpZiAodm0uaGVhcC5pc01hcmtlZChvbGRTdHJ1
Y3R1cmUpKSB7CisgICAgICAgICAgICAgICAgaWYgKHZpc2l0b3IuaXNNYXJrZWQob2xkU3RydWN0
dXJlKSkgewogICAgICAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IHZt
LmhlYXAuc3RydWN0dXJlSURUYWJsZSgpLmdldChuZXdTdHJ1Y3R1cmVJRCk7CiAgICAgICAgICAg
ICAgICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQobmV3U3RydWN0dXJlKTsKICAgICAg
ICAgICAgICAgICB9CkBAIC0xMTcwLDcgKzExODgsNyBAQCB2b2lkIENvZGVCbG9jazo6cHJvcGFn
YXRlVHJhbnNpdGlvbnMoY29uCiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAg
ICAgICAgICAgIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlID0gdm0uaGVhcC5zdHJ1Y3R1cmVJRFRh
YmxlKCkuZ2V0KG9sZFN0cnVjdHVyZUlEKTsKLSAgICAgICAgICAgICAgICBpZiAodm0uaGVhcC5p
c01hcmtlZChvbGRTdHJ1Y3R1cmUpKSB7CisgICAgICAgICAgICAgICAgaWYgKHZpc2l0b3IuaXNN
YXJrZWQob2xkU3RydWN0dXJlKSkgewogICAgICAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIG5l
d1N0cnVjdHVyZSA9IHZtLmhlYXAuc3RydWN0dXJlSURUYWJsZSgpLmdldChuZXdTdHJ1Y3R1cmVJ
RCk7CiAgICAgICAgICAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQobmV3U3Ry
dWN0dXJlKTsKICAgICAgICAgICAgICAgICB9CkBAIC0xMTk3LDcgKzEyMTUsNyBAQCB2b2lkIENv
ZGVCbG9jazo6cHJvcGFnYXRlVHJhbnNpdGlvbnMoY29uCiAgICAgICAgICAgICB2bS5nZXRTdHJ1
Y3R1cmUoc3RydWN0dXJlSUQpLT5tYXJrSWZDaGVhcCh2aXNpdG9yKTsKIAogICAgICAgICBmb3Ig
KGF1dG8mIHRyYW5zaXRpb24gOiBkZmdDb21tb24tPnRyYW5zaXRpb25zKSB7Ci0gICAgICAgICAg
ICBpZiAoc2hvdWxkTWFya1RyYW5zaXRpb24odm0sIHRyYW5zaXRpb24pKSB7CisgICAgICAgICAg
ICBpZiAoc2hvdWxkTWFya1RyYW5zaXRpb24odmlzaXRvciwgdHJhbnNpdGlvbikpIHsKICAgICAg
ICAgICAgICAgICAvLyBJZiB0aGUgZm9sbG93aW5nIHRocmVlIHRoaW5ncyBhcmUgbGl2ZSwgdGhl
biB0aGUgdGFyZ2V0IG9mIHRoZQogICAgICAgICAgICAgICAgIC8vIHRyYW5zaXRpb24gaXMgYWxz
byBsaXZlOgogICAgICAgICAgICAgICAgIC8vCkBAIC0xMjI0LDEzICsxMjQyLDEzIEBAIHZvaWQg
Q29kZUJsb2NrOjpwcm9wYWdhdGVUcmFuc2l0aW9ucyhjb24KICNlbmRpZiAvLyBFTkFCTEUoREZH
X0pJVCkKIH0KIAotdm9pZCBDb2RlQmxvY2s6OmRldGVybWluZUxpdmVuZXNzKGNvbnN0IENvbmN1
cnJlbnRKU0xvY2tlciYsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBDb2RlQmxvY2s6OmRl
dGVybWluZUxpdmVuZXNzKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIEFic3RyYWN0U2xvdFZp
c2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHZpc2l0b3IpOwogICAgIAogI2lm
IEVOQUJMRShERkdfSklUKQogICAgIFZNJiB2bSA9ICptX3ZtOwotICAgIGlmICh2bS5oZWFwLmlz
TWFya2VkKHRoaXMpKQorICAgIGlmICh2aXNpdG9yLmlzTWFya2VkKHRoaXMpKQogICAgICAgICBy
ZXR1cm47CiAgICAgCiAgICAgLy8gSW4gcmFyZSBhbmQgd2VpcmQgY2FzZXMsIHRoaXMgY291bGQg
YmUgY2FsbGVkIG9uIGEgYmFzZWxpbmUgQ29kZUJsb2NrLiBPbmUgdGhhdCBJIGZvdW5kIHdhcwpA
QCAtMTI0Nyw3ICsxMjY1LDcgQEAgdm9pZCBDb2RlQmxvY2s6OmRldGVybWluZUxpdmVuZXNzKGNv
bnN0IAogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkZmdDb21tb24tPndlYWtSZWZlcmVu
Y2VzLnNpemUoKTsgKytpKSB7CiAgICAgICAgIEpTQ2VsbCogcmVmZXJlbmNlID0gZGZnQ29tbW9u
LT53ZWFrUmVmZXJlbmNlc1tpXS5nZXQoKTsKICAgICAgICAgQVNTRVJUKCFqc0R5bmFtaWNDYXN0
PENvZGVCbG9jayo+KHZtLCByZWZlcmVuY2UpKTsKLSAgICAgICAgaWYgKCF2bS5oZWFwLmlzTWFy
a2VkKHJlZmVyZW5jZSkpIHsKKyAgICAgICAgaWYgKCF2aXNpdG9yLmlzTWFya2VkKHJlZmVyZW5j
ZSkpIHsKICAgICAgICAgICAgIGFsbEFyZUxpdmVTb0ZhciA9IGZhbHNlOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KQEAgLTEyNTUsNyArMTI3Myw3IEBAIHZvaWQgQ29kZUJsb2NrOjpk
ZXRlcm1pbmVMaXZlbmVzcyhjb25zdCAKICAgICBpZiAoYWxsQXJlTGl2ZVNvRmFyKSB7CiAgICAg
ICAgIGZvciAoU3RydWN0dXJlSUQgc3RydWN0dXJlSUQgOiBkZmdDb21tb24tPndlYWtTdHJ1Y3R1
cmVSZWZlcmVuY2VzKSB7CiAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHZtLmdl
dFN0cnVjdHVyZShzdHJ1Y3R1cmVJRCk7Ci0gICAgICAgICAgICBpZiAoIXZtLmhlYXAuaXNNYXJr
ZWQoc3RydWN0dXJlKSkgeworICAgICAgICAgICAgaWYgKCF2aXNpdG9yLmlzTWFya2VkKHN0cnVj
dHVyZSkpIHsKICAgICAgICAgICAgICAgICBhbGxBcmVMaXZlU29GYXIgPSBmYWxzZTsKICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KQEAgLTE2MTYsNiArMTYzNCw3IEBAIHZv
aWQgQ29kZUJsb2NrOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSgKICAgICB1cGRhdGVBY3Rpdml0
eSgpOwogCiAgICAgVk06OlNwYWNlQW5kU2V0OjpzZXRGb3IoKnN1YnNwYWNlKCkpLnJlbW92ZSh0
aGlzKTsKKyAgICBtX3Zpc2l0Q2hpbGRyZW5Ta2lwcGVkRHVlVG9PbGRBZ2UgPSBmYWxzZTsKIH0K
IAogdm9pZCBDb2RlQmxvY2s6OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQpAQCAtMTgwOCw3ICsxODI3
LDggQEAgdm9pZCBDb2RlQmxvY2s6OnJlc2V0SklURGF0YSgpCiB9CiAjZW5kaWYKIAotdm9pZCBD
b2RlQmxvY2s6OnZpc2l0T1NSRXhpdFRhcmdldHMoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwg
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBD
b2RlQmxvY2s6OnZpc2l0T1NSRXhpdFRhcmdldHMoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwg
VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICAvLyBXZSBzdHJvbmdseSB2aXNpdCBPU1IgZXhpdHMg
dGFyZ2V0cyBiZWNhdXNlIHdlIGRvbid0IHdhbnQgdG8gZGVhbCB3aXRoCiAgICAgLy8gdGhlIGNv
bXBsZXhpdHkgb2YgZ2VuZXJhdGluZyBhbiBleGl0IHRhcmdldCBDb2RlQmxvY2sgb24gZGVtYW5k
IGFuZApAQCAtMTgyOCw3ICsxODQ4LDExIEBAIHZvaWQgQ29kZUJsb2NrOjp2aXNpdE9TUkV4aXRU
YXJnZXRzKGNvbnMKICNlbmRpZgogfQogCi12b2lkIENvZGVCbG9jazo6c3Ryb25nbHlWaXNpdFN0
cm9uZ1JlZmVyZW5jZXMoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiBsb2NrZXIsIFNsb3RWaXNp
dG9yJiB2aXNpdG9yKQordGVtcGxhdGUgdm9pZCBDb2RlQmxvY2s6OnZpc2l0T1NSRXhpdFRhcmdl
dHMoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgU2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZv
aWQgQ29kZUJsb2NrOjp2aXNpdE9TUkV4aXRUYXJnZXRzKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tl
ciYsIEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4K
K3ZvaWQgQ29kZUJsb2NrOjpzdHJvbmdseVZpc2l0U3Ryb25nUmVmZXJlbmNlcyhjb25zdCBDb25j
dXJyZW50SlNMb2NrZXImIGxvY2tlciwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBVTlVTRURf
UEFSQU0obG9ja2VyKTsKICAgICAKQEAgLTE4NjQsNyArMTg4OCw4IEBAIHZvaWQgQ29kZUJsb2Nr
OjpzdHJvbmdseVZpc2l0U3Ryb25nUmVmZXIKICNlbmRpZgogfQogCi12b2lkIENvZGVCbG9jazo6
c3Ryb25nbHlWaXNpdFdlYWtSZWZlcmVuY2VzKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgQ29k
ZUJsb2NrOjpzdHJvbmdseVZpc2l0V2Vha1JlZmVyZW5jZXMoY29uc3QgQ29uY3VycmVudEpTTG9j
a2VyJiwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBVTlVTRURfUEFSQU0odmlzaXRvcik7CiAK
QEAgLTE4OTEsNiArMTkxNiw5IEBAIHZvaWQgQ29kZUJsb2NrOjpzdHJvbmdseVZpc2l0V2Vha1Jl
ZmVyZW4KICNlbmRpZiAgICAKIH0KIAordGVtcGxhdGUgdm9pZCBDb2RlQmxvY2s6OnN0cm9uZ2x5
VmlzaXRXZWFrUmVmZXJlbmNlcyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBTbG90VmlzaXRv
ciYpOwordGVtcGxhdGUgdm9pZCBDb2RlQmxvY2s6OnN0cm9uZ2x5VmlzaXRXZWFrUmVmZXJlbmNl
cyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBBYnN0cmFjdFNsb3RWaXNpdG9yJik7CisKIENv
ZGVCbG9jayogQ29kZUJsb2NrOjpiYXNlbGluZUFsdGVybmF0aXZlKCkKIHsKICNpZiBFTkFCTEUo
SklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAko
cmV2aXNpb24gMjcyNzY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVC
bG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAwOC0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAwOC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHly
aWdodCAoQykgMjAwOCBDYW1lcm9uIFp3YXJpY2ggPGN3endhcmljaEB1d2F0ZXJsb28uY2E+CiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CkBAIC0yMDEsMTAgKzIwMSwxMSBAQCBwdWJsaWM6CiAgICAgLy8gaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyMzY3NwogICAgIENvZGVCbG9j
ayogYmFzZWxpbmVWZXJzaW9uKCk7CiAKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOworCiAg
ICAgc3RhdGljIHNpemVfdCBlc3RpbWF0ZWRTaXplKEpTQ2VsbCosIFZNJik7Ci0gICAgc3RhdGlj
IHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwogICAgIHN0YXRpYyB2
b2lkIGRlc3Ryb3koSlNDZWxsKik7Ci0gICAgdm9pZCB2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9y
Jik7CisgICAgREVDTEFSRV9JTlNUQU5DRV9WSVNJVF9DSElMRFJFTjsKICAgICB2b2lkIGZpbmFs
aXplVW5jb25kaXRpb25hbGx5KFZNJik7CiAKICAgICB2b2lkIG5vdGlmeUxleGljYWxCaW5kaW5n
VXBkYXRlKCk7CkBAIC05NjMsMTYgKzk2NCwxNiBAQCBwcml2YXRlOgogICAgICAgICBtX2NvbnN0
YW50UmVnaXN0ZXJzW3JlZy50b0NvbnN0YW50SW5kZXgoKV0uc2V0KCptX3ZtLCB0aGlzLCB2YWx1
ZSk7CiAgICAgfQogCi0gICAgYm9vbCBzaG91bGRWaXNpdFN0cm9uZ2x5KGNvbnN0IENvbmN1cnJl
bnRKU0xvY2tlciYpOworICAgIGJvb2wgc2hvdWxkVmlzaXRTdHJvbmdseShjb25zdCBDb25jdXJy
ZW50SlNMb2NrZXImLCBBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAgICAgYm9vbCBzaG91bGRKZXR0
aXNvbkR1ZVRvV2Vha1JlZmVyZW5jZShWTSYpOwotICAgIGJvb2wgc2hvdWxkSmV0dGlzb25EdWVU
b09sZEFnZShjb25zdCBDb25jdXJyZW50SlNMb2NrZXImKTsKKyAgICBib29sIHNob3VsZEpldHRp
c29uRHVlVG9PbGRBZ2UoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgQWJzdHJhY3RTbG90Vmlz
aXRvciYpOwogICAgIAotICAgIHZvaWQgcHJvcGFnYXRlVHJhbnNpdGlvbnMoY29uc3QgQ29uY3Vy
cmVudEpTTG9ja2VyJiwgU2xvdFZpc2l0b3ImKTsKLSAgICB2b2lkIGRldGVybWluZUxpdmVuZXNz
KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIFNsb3RWaXNpdG9yJik7CisgICAgdm9pZCBwcm9w
YWdhdGVUcmFuc2l0aW9ucyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBBYnN0cmFjdFNsb3RW
aXNpdG9yJik7CisgICAgdm9pZCBkZXRlcm1pbmVMaXZlbmVzcyhjb25zdCBDb25jdXJyZW50SlNM
b2NrZXImLCBBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAgICAgICAgIAotICAgIHZvaWQgc3Ryb25n
bHlWaXNpdFN0cm9uZ1JlZmVyZW5jZXMoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgU2xvdFZp
c2l0b3ImKTsKLSAgICB2b2lkIHN0cm9uZ2x5VmlzaXRXZWFrUmVmZXJlbmNlcyhjb25zdCBDb25j
dXJyZW50SlNMb2NrZXImLCBTbG90VmlzaXRvciYpOwotICAgIHZvaWQgdmlzaXRPU1JFeGl0VGFy
Z2V0cyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBTbG90VmlzaXRvciYpOworICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgc3Ryb25nbHlWaXNpdFN0cm9uZ1JlZmVyZW5jZXMo
Y29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgVmlzaXRvciYpOworICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFZpc2l0b3I+IHZvaWQgc3Ryb25nbHlWaXNpdFdlYWtSZWZlcmVuY2VzKGNvbnN0IENvbmN1
cnJlbnRKU0xvY2tlciYsIFZpc2l0b3ImKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
PiB2b2lkIHZpc2l0T1NSRXhpdFRhcmdldHMoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgVmlz
aXRvciYpOwogCiAgICAgdW5zaWduZWQgbnVtYmVyT2ZOb25Bcmd1bWVudFZhbHVlUHJvZmlsZXMo
KSB7IHJldHVybiBtX251bWJlck9mTm9uQXJndW1lbnRWYWx1ZVByb2ZpbGVzOyB9CiAgICAgdW5z
aWduZWQgdG90YWxOdW1iZXJPZlZhbHVlUHJvZmlsZXMoKSB7IHJldHVybiBudW1iZXJPZkFyZ3Vt
ZW50VmFsdWVQcm9maWxlcygpICsgbnVtYmVyT2ZOb25Bcmd1bWVudFZhbHVlUHJvZmlsZXMoKTsg
fQpAQCAtMTAxMSw2ICsxMDEyLDcgQEAgcHJpdmF0ZToKICAgICB1bnNpZ25lZCBtX2J5dGVjb2Rl
Q29zdCB7IDAgfTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgbV9zY29wZVJlZ2lzdGVyOwogICAgIG11
dGFibGUgQ29kZUJsb2NrSGFzaCBtX2hhc2g7CisgICAgYm9vbCBtX3Zpc2l0Q2hpbGRyZW5Ta2lw
cGVkRHVlVG9PbGRBZ2UgeyBmYWxzZSB9OwogCiAgICAgV3JpdGVCYXJyaWVyPFVubGlua2VkQ29k
ZUJsb2NrPiBtX3VubGlua2VkQ29kZTsKICAgICBXcml0ZUJhcnJpZXI8U2NyaXB0RXhlY3V0YWJs
ZT4gbV9vd25lckV4ZWN1dGFibGU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvRGVsZXRlQnlJZFZhcmlhbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9EZWxldGVCeUlkVmFyaWFudC5jcHAJKHJldmlzaW9uIDI3Mjc2OSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9EZWxldGVCeUlkVmFyaWFudC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDIwIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMC0yMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtODgsMTIgKzg4LDEyIEBAIGJvb2wgRGVsZXRlQnlJZFZhcmlhbnQ6OndyaXRl
c1N0cnVjdHVyZXMKICAgICByZXR1cm4gISFuZXdTdHJ1Y3R1cmUoKTsKIH0KIAotdm9pZCBEZWxl
dGVCeUlkVmFyaWFudDo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2b2lk
IERlbGV0ZUJ5SWRWYXJpYW50Ojp2aXNpdEFnZ3JlZ2F0ZShBYnN0cmFjdFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQogewogICAgIG1faWRlbnRpZmllci52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKIH0K
IAotdm9pZCBEZWxldGVCeUlkVmFyaWFudDo6bWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImIHZpc2l0
b3IpCit2b2lkIERlbGV0ZUJ5SWRWYXJpYW50OjptYXJrSWZDaGVhcChBYnN0cmFjdFNsb3RWaXNp
dG9yJiB2aXNpdG9yKQogewogICAgIGlmIChtX29sZFN0cnVjdHVyZSkKICAgICAgICAgbV9vbGRT
dHJ1Y3R1cmUtPm1hcmtJZkNoZWFwKHZpc2l0b3IpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0RlbGV0ZUJ5SWRWYXJpYW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0RlbGV0ZUJ5SWRWYXJpYW50LmgJKHJldmlzaW9uIDI3Mjc2
OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9EZWxldGVCeUlkVmFyaWFudC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAy
MCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAt
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTYxLDggKzYxLDggQEAgcHVibGljOgogCiAgICAgYm9vbCBhdHRlbXB0
VG9NZXJnZShjb25zdCBEZWxldGVCeUlkVmFyaWFudCYgb3RoZXIpOwogCi0gICAgdm9pZCB2aXNp
dEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYpOwotICAgIHZvaWQgbWFya0lmQ2hlYXAoU2xvdFZpc2l0
b3ImKTsKKyAgICB2b2lkIHZpc2l0QWdncmVnYXRlKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKKyAg
ICB2b2lkIG1hcmtJZkNoZWFwKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKICAgICBib29sIGZpbmFs
aXplKFZNJik7CiAKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9EZWxldGVCeVN0YXR1cy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0RlbGV0ZUJ5U3RhdHVzLmNwcAko
cmV2aXNpb24gMjcyNzY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0RlbGV0
ZUJ5U3RhdHVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDIwLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNTQsMTMgKzI1NCwxMyBAQCBDYWNoZWFibGVJ
ZGVudGlmaWVyIERlbGV0ZUJ5U3RhdHVzOjpzaW5nCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAot
dm9pZCBEZWxldGVCeVN0YXR1czo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3Ip
Cit2b2lkIERlbGV0ZUJ5U3RhdHVzOjp2aXNpdEFnZ3JlZ2F0ZShBYnN0cmFjdFNsb3RWaXNpdG9y
JiB2aXNpdG9yKQogewogICAgIGZvciAoRGVsZXRlQnlJZFZhcmlhbnQmIHZhcmlhbnQgOiBtX3Zh
cmlhbnRzKQogICAgICAgICB2YXJpYW50LnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOwogfQogCi12
b2lkIERlbGV0ZUJ5U3RhdHVzOjptYXJrSWZDaGVhcChTbG90VmlzaXRvciYgdmlzaXRvcikKK3Zv
aWQgRGVsZXRlQnlTdGF0dXM6Om1hcmtJZkNoZWFwKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0
b3IpCiB7CiAgICAgZm9yIChEZWxldGVCeUlkVmFyaWFudCYgdmFyaWFudCA6IG1fdmFyaWFudHMp
CiAgICAgICAgIHZhcmlhbnQubWFya0lmQ2hlYXAodmlzaXRvcik7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvRGVsZXRlQnlTdGF0dXMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRGVsZXRlQnlTdGF0dXMuaAkocmV2aXNpb24gMjcy
NzY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0RlbGV0ZUJ5U3RhdHVzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDIw
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMC0y
MDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtODEsOCArODEsOCBAQCBwdWJsaWM6CiAgICAgLy8gQXR0ZW1wdHMgdG8g
cmVkdWNlIHRoZSBzZXQgb2YgdmFyaWFudHMgdG8gZml0IHRoZSBnaXZlbiBzdHJ1Y3R1cmUgc2V0
LiBUaGlzIG1heSBiZSBhcHByb3hpbWF0ZS4KICAgICB2b2lkIGZpbHRlcihjb25zdCBTdHJ1Y3R1
cmVTZXQmKTsKIAotICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImKTsKLSAgICB2
b2lkIG1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJik7CisgICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShB
YnN0cmFjdFNsb3RWaXNpdG9yJik7CisgICAgdm9pZCBtYXJrSWZDaGVhcChBYnN0cmFjdFNsb3RW
aXNpdG9yJik7CiAgICAgYm9vbCBmaW5hbGl6ZShWTSYpOwogCiAgICAgYm9vbCBhcHBlbmRWYXJp
YW50KGNvbnN0IERlbGV0ZUJ5SWRWYXJpYW50Jik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvRGlyZWN0RXZhbENvZGVDYWNoZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0RpcmVjdEV2YWxDb2RlQ2FjaGUuY3BwCShyZXZpc2lv
biAyNzI3NjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRGlyZWN0RXZhbENv
ZGVDYWNoZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDUsNyArNDUsOCBAQCB2b2lkIERpcmVjdEV2YWxD
b2RlQ2FjaGU6OmNsZWFyKCkKICAgICBtX2NhY2hlTWFwLmNsZWFyKCk7CiB9CiAKLXZvaWQgRGly
ZWN0RXZhbENvZGVDYWNoZTo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0
ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBEaXJlY3RFdmFsQ29kZUNhY2hlOjp2aXNp
dEFnZ3JlZ2F0ZShWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIExvY2tIb2xkZXIgbG9ja2VyKG1f
bG9jayk7CiAgICAgRXZhbENhY2hlTWFwOjppdGVyYXRvciBlbmQgPSBtX2NhY2hlTWFwLmVuZCgp
OwpAQCAtNTMsNSArNTQsNyBAQCB2b2lkIERpcmVjdEV2YWxDb2RlQ2FjaGU6OnZpc2l0QWdncmVn
YXRlCiAgICAgICAgIHZpc2l0b3IuYXBwZW5kKHB0ci0+dmFsdWUpOwogfQogCi19IC8vIG5hbWVz
cGFjZSBKU0MKK3RlbXBsYXRlIHZvaWQgRGlyZWN0RXZhbENvZGVDYWNoZTo6dmlzaXRBZ2dyZWdh
dGUoQWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBEaXJlY3RFdmFsQ29kZUNh
Y2hlOjp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYpOwogCit9IC8vIG5hbWVzcGFjZSBKU0MK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9EaXJlY3RFdmFsQ29kZUNhY2hl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0RpcmVjdEV2
YWxDb2RlQ2FjaGUuaAkocmV2aXNpb24gMjcyNzY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0RpcmVjdEV2YWxDb2RlQ2FjaGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTk3LDcg
Kzk3LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgYm9vbCBpc0VtcHR5KCkgY29uc3Qg
eyByZXR1cm4gbV9jYWNoZU1hcC5pc0VtcHR5KCk7IH0KIAotICAgICAgICB2b2lkIHZpc2l0QWdn
cmVnYXRlKFNsb3RWaXNpdG9yJik7CisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+
IHZvaWQgdmlzaXRBZ2dyZWdhdGUoVmlzaXRvciYpOwogCiAgICAgICAgIHZvaWQgY2xlYXIoKTsK
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGFibGVUb0NvZGVC
bG9ja0VkZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9FeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlLmNwcAkocmV2aXNpb24gMjcyNzY5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
OCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTgt
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTUzLDcgKzUzLDggQEAgdm9pZCBFeGVjdXRhYmxlVG9Db2RlQmxvY2tF
ZGdlOjpmaW5pc2hDcgogICAgIEFTU0VSVCghaXNBY3RpdmUoKSk7CiB9CiAKLXZvaWQgRXhlY3V0
YWJsZVRvQ29kZUJsb2NrRWRnZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNp
dG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgRXhlY3V0YWJs
ZVRvQ29kZUJsb2NrRWRnZTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9y
JiB2aXNpdG9yKQogewogICAgIFZNJiB2bSA9IHZpc2l0b3Iudm0oKTsKICAgICBFeGVjdXRhYmxl
VG9Db2RlQmxvY2tFZGdlKiBlZGdlID0ganNDYXN0PEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2Uq
PihjZWxsKTsKQEAgLTYxLDcgKzYyLDcgQEAgdm9pZCBFeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdl
Ojp2aXNpdENoaQogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4oY2VsbCwgdmlzaXRvcik7CiAKICAg
ICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGVkZ2UtPm1fY29kZUJsb2NrLmdldCgpOwotICAgIAor
CiAgICAgLy8gSXQncyBwb3NzaWJsZSBmb3Igc29tZW9uZSB0byBob2xkIGEgcG9pbnRlciB0byB0
aGUgZWRnZSBhZnRlciB0aGUgZWRnZSBoYXMgY2xlYXJlZCBpdHMgd2VhawogICAgIC8vIHJlZmVy
ZW5jZSB0byB0aGUgY29kZUJsb2NrLiBJbiBhIGNvbnNlcnZhdGl2ZSBHQyBsaWtlIG91cnMsIHRo
YXQgY291bGQgaGFwcGVuIGF0IHJhbmRvbSBmb3IKICAgICAvLyBubyBnb29kIHJlYXNvbiBhbmQg
aXQncyBUb3RhbGx5IE9LIChUTSkuIFNlZSBmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSgpIGZvciB3
aGVyZSB3ZSBjbGVhcgpAQCAtNzUsMTEgKzc2LDExIEBAIHZvaWQgRXhlY3V0YWJsZVRvQ29kZUJs
b2NrRWRnZTo6dmlzaXRDaGkKICAgICB9CiAgICAgCiAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxv
Y2tlcihjb2RlQmxvY2stPm1fbG9jayk7Ci0gICAgCi0gICAgaWYgKGNvZGVCbG9jay0+c2hvdWxk
VmlzaXRTdHJvbmdseShsb2NrZXIpKQorCisgICAgaWYgKGNvZGVCbG9jay0+c2hvdWxkVmlzaXRT
dHJvbmdseShsb2NrZXIsIHZpc2l0b3IpKQogICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmll
cmVkKGNvZGVCbG9jayk7CiAgICAgCi0gICAgaWYgKCF2bS5oZWFwLmlzTWFya2VkKGNvZGVCbG9j
aykpCisgICAgaWYgKCF2aXNpdG9yLmlzTWFya2VkKGNvZGVCbG9jaykpCiAgICAgICAgIHZtLmV4
ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2VzV2l0aEZpbmFsaXplcnMuYWRkKGVkZ2UpOwogICAgIAog
ICAgIGlmIChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoY29kZUJsb2NrLT5qaXRUeXBlKCkpKSB7
CkBAIC0xMTcsNyArMTE4LDkgQEAgdm9pZCBFeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlOjp2aXNp
dENoaQogICAgIGVkZ2UtPnJ1bkNvbnN0cmFpbnQobG9ja2VyLCB2bSwgdmlzaXRvcik7CiB9CiAK
LXZvaWQgRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZTo6dmlzaXRPdXRwdXRDb25zdHJhaW50cyhK
U0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorREVGSU5FX1ZJU0lUX0NISUxEUkVO
KEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UpOworCit2b2lkIEV4ZWN1dGFibGVUb0NvZGVCbG9j
a0VkZ2U6OnZpc2l0T3V0cHV0Q29uc3RyYWludHMoSlNDZWxsKiBjZWxsLCBBYnN0cmFjdFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQogewogICAgIFZNJiB2bSA9IHZpc2l0b3Iudm0oKTsKICAgICBFeGVj
dXRhYmxlVG9Db2RlQmxvY2tFZGdlKiBlZGdlID0ganNDYXN0PEV4ZWN1dGFibGVUb0NvZGVCbG9j
a0VkZ2UqPihjZWxsKTsKQEAgLTE4NiwxNCArMTg5LDE0IEBAIEV4ZWN1dGFibGVUb0NvZGVCbG9j
a0VkZ2U6OkV4ZWN1dGFibGVUb0MKIHsKIH0KIAotdm9pZCBFeGVjdXRhYmxlVG9Db2RlQmxvY2tF
ZGdlOjpydW5Db25zdHJhaW50KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYgbG9ja2VyLCBWTSYg
dm0sIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBFeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdl
OjpydW5Db25zdHJhaW50KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYgbG9ja2VyLCBWTSYgdm0s
IEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxv
Y2sgPSBtX2NvZGVCbG9jay5nZXQoKTsKICAgICAKICAgICBjb2RlQmxvY2stPnByb3BhZ2F0ZVRy
YW5zaXRpb25zKGxvY2tlciwgdmlzaXRvcik7CiAgICAgY29kZUJsb2NrLT5kZXRlcm1pbmVMaXZl
bmVzcyhsb2NrZXIsIHZpc2l0b3IpOwotICAgIAotICAgIGlmICh2bS5oZWFwLmlzTWFya2VkKGNv
ZGVCbG9jaykpCisKKyAgICBpZiAodmlzaXRvci5pc01hcmtlZChjb2RlQmxvY2spKQogICAgICAg
ICB2bS5leGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlc1dpdGhDb25zdHJhaW50cy5yZW1vdmUodGhp
cyk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGVjdXRhYmxl
VG9Db2RlQmxvY2tFZGdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0V4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UuaAkocmV2aXNpb24gMjcyNzY5KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2Uu
aAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTgtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTgtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTUzLDkgKzUzLDkgQEAgcHVibGljOgogICAgIERFQ0xBUkVf
SU5GTzsKIAogICAgIENvZGVCbG9jayogY29kZUJsb2NrKCkgY29uc3QgeyByZXR1cm4gbV9jb2Rl
QmxvY2suZ2V0KCk7IH0KLSAgICAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2Vs
bCosIFNsb3RWaXNpdG9yJik7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRPdXRwdXRDb25zdHJhaW50
cyhKU0NlbGwqLCBTbG90VmlzaXRvciYpOworCisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsK
KyAgICBzdGF0aWMgdm9pZCB2aXNpdE91dHB1dENvbnN0cmFpbnRzKEpTQ2VsbCosIEFic3RyYWN0
U2xvdFZpc2l0b3ImKTsKICAgICB2b2lkIGZpbmFsaXplVW5jb25kaXRpb25hbGx5KFZNJik7CiAg
ICAgCiAgICAgc3RhdGljIENvZGVCbG9jayogdW53cmFwKEV4ZWN1dGFibGVUb0NvZGVCbG9ja0Vk
Z2UqIGVkZ2UpCkBAIC04MSw5ICs4MSw5IEBAIHByaXZhdGU6CiAgICAgdm9pZCBhY3RpdmF0ZSgp
OwogICAgIHZvaWQgZGVhY3RpdmF0ZSgpOwogICAgIGJvb2wgaXNBY3RpdmUoKSBjb25zdDsKLSAg
ICAKLSAgICB2b2lkIHJ1bkNvbnN0cmFpbnQoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgVk0m
LCBTbG90VmlzaXRvciYpOwotICAgIAorCisgICAgdm9pZCBydW5Db25zdHJhaW50KGNvbnN0IENv
bmN1cnJlbnRKU0xvY2tlciYsIFZNJiwgQWJzdHJhY3RTbG90VmlzaXRvciYpOworCiAgICAgV3Jp
dGVCYXJyaWVyPENvZGVCbG9jaz4gbV9jb2RlQmxvY2s7CiB9OwogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFZhcmlhbnQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkVmFyaWFudC5jcHAJKHJldmlzaW9u
IDI3Mjc2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkVmFyaWFu
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDE0LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE0LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xNTYsMTIgKzE1NiwxMiBAQCBib29sIEdldEJ5SWRW
YXJpYW50OjphdHRlbXB0VG9NZXJnZShjb25zCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQg
R2V0QnlJZFZhcmlhbnQ6OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordm9p
ZCBHZXRCeUlkVmFyaWFudDo6dmlzaXRBZ2dyZWdhdGUoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlz
aXRvcikKIHsKICAgICBtX2lkZW50aWZpZXIudmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7CiB9CiAK
LXZvaWQgR2V0QnlJZFZhcmlhbnQ6Om1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQor
dm9pZCBHZXRCeUlkVmFyaWFudDo6bWFya0lmQ2hlYXAoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlz
aXRvcikKIHsKICAgICBtX3N0cnVjdHVyZVNldC5tYXJrSWZDaGVhcCh2aXNpdG9yKTsKIH0KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkVmFyaWFudC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkVmFyaWFudC5o
CShyZXZpc2lvbiAyNzI3NjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0
QnlJZFZhcmlhbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTQtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTQtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTc3LDggKzc3LDggQEAgcHVibGljOgog
CiAgICAgYm9vbCBhdHRlbXB0VG9NZXJnZShjb25zdCBHZXRCeUlkVmFyaWFudCYgb3RoZXIpOwog
ICAgIAotICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImKTsKLSAgICB2b2lkIG1h
cmtJZkNoZWFwKFNsb3RWaXNpdG9yJik7CisgICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShBYnN0cmFj
dFNsb3RWaXNpdG9yJik7CisgICAgdm9pZCBtYXJrSWZDaGVhcChBYnN0cmFjdFNsb3RWaXNpdG9y
Jik7CiAgICAgYm9vbCBmaW5hbGl6ZShWTSYpOwogICAgIAogICAgIHZvaWQgZHVtcChQcmludFN0
cmVhbSYpIGNvbnN0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5
U3RhdHVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
R2V0QnlTdGF0dXMuY3BwCShyZXZpc2lvbiAyNzI3NjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvR2V0QnlTdGF0dXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTMwLDcgKzUz
MCw3IEBAIHZvaWQgR2V0QnlTdGF0dXM6OmZpbHRlcihjb25zdCBTdHJ1Y3R1cmUKICAgICAgICAg
bV9zdGF0ZSA9IE5vSW5mb3JtYXRpb247CiB9CiAKLXZvaWQgR2V0QnlTdGF0dXM6OnZpc2l0QWdn
cmVnYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBHZXRCeVN0YXR1czo6dmlzaXRBZ2dy
ZWdhdGUoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBpZiAoaXNNb2R1bGVO
YW1lc3BhY2UoKSkKICAgICAgICAgbV9tb2R1bGVOYW1lc3BhY2VEYXRhLT5tX2lkZW50aWZpZXIu
dmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7CkBAIC01MzgsNyArNTM4LDcgQEAgdm9pZCBHZXRCeVN0
YXR1czo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZpcwogICAgICAgICB2YXJpYW50LnZpc2l0QWdncmVn
YXRlKHZpc2l0b3IpOwogfQogCi12b2lkIEdldEJ5U3RhdHVzOjptYXJrSWZDaGVhcChTbG90Vmlz
aXRvciYgdmlzaXRvcikKK3ZvaWQgR2V0QnlTdGF0dXM6Om1hcmtJZkNoZWFwKEFic3RyYWN0U2xv
dFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgZm9yIChHZXRCeUlkVmFyaWFudCYgdmFyaWFudCA6
IG1fdmFyaWFudHMpCiAgICAgICAgIHZhcmlhbnQubWFya0lmQ2hlYXAodmlzaXRvcik7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlTdGF0dXMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlTdGF0dXMuaAkocmV2aXNp
b24gMjcyNzY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5U3RhdHVz
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDEyLTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEyLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0xMTgsOCArMTE4LDggQEAgcHVibGljOgogICAgIEpTTW9k
dWxlRW52aXJvbm1lbnQqIG1vZHVsZUVudmlyb25tZW50KCkgY29uc3QgeyByZXR1cm4gbV9tb2R1
bGVOYW1lc3BhY2VEYXRhLT5tX21vZHVsZUVudmlyb25tZW50OyB9CiAgICAgU2NvcGVPZmZzZXQg
c2NvcGVPZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX21vZHVsZU5hbWVzcGFjZURhdGEtPm1fc2Nv
cGVPZmZzZXQ7IH0KICAgICAKLSAgICB2b2lkIHZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJik7
Ci0gICAgdm9pZCBtYXJrSWZDaGVhcChTbG90VmlzaXRvciYpOworICAgIHZvaWQgdmlzaXRBZ2dy
ZWdhdGUoQWJzdHJhY3RTbG90VmlzaXRvciYpOworICAgIHZvaWQgbWFya0lmQ2hlYXAoQWJzdHJh
Y3RTbG90VmlzaXRvciYpOwogICAgIGJvb2wgZmluYWxpemUoVk0mKTsgLy8gUmV0dXJuIHRydWUg
aWYgdGhpcyBnZXRzIHRvIGxpdmUuCiAKICAgICBib29sIGFwcGVuZFZhcmlhbnQoY29uc3QgR2V0
QnlJZFZhcmlhbnQmKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbkJ5
SWRTdGF0dXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9JbkJ5SWRTdGF0dXMuY3BwCShyZXZpc2lvbiAyNzI3NjkpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvSW5CeUlkU3RhdHVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsx
LDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTggWXVzdWtlIFN1enVraSA8dXRhdGFuZS50
ZWFAZ21haWwuY29tPi4KLSAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI1MSw3
ICsyNTEsNyBAQCB2b2lkIEluQnlJZFN0YXR1czo6ZmlsdGVyKGNvbnN0IFN0cnVjdHVyCiAgICAg
ICAgIG1fc3RhdGUgPSBOb0luZm9ybWF0aW9uOwogfQogCi12b2lkIEluQnlJZFN0YXR1czo6bWFy
a0lmQ2hlYXAoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIEluQnlJZFN0YXR1czo6bWFya0lm
Q2hlYXAoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBmb3IgKEluQnlJZFZh
cmlhbnQmIHZhcmlhbnQgOiBtX3ZhcmlhbnRzKQogICAgICAgICB2YXJpYW50Lm1hcmtJZkNoZWFw
KHZpc2l0b3IpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luQnlJZFN0
YXR1cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbkJ5
SWRTdGF0dXMuaAkocmV2aXNpb24gMjcyNzY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0luQnlJZFN0YXR1cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoK
ICAqIENvcHlyaWdodCAoQykgMjAxOCBZdXN1a2UgU3V6dWtpIDx1dGF0YW5lLnRlYUBnbWFpbC5j
b20+LgotICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTA2LDcgKzEwNiw3IEBA
IHB1YmxpYzoKICAgICAvLyBBdHRlbXB0cyB0byByZWR1Y2UgdGhlIHNldCBvZiB2YXJpYW50cyB0
byBmaXQgdGhlIGdpdmVuIHN0cnVjdHVyZSBzZXQuIFRoaXMgbWF5IGJlIGFwcHJveGltYXRlLgog
ICAgIHZvaWQgZmlsdGVyKGNvbnN0IFN0cnVjdHVyZVNldCYpOwogICAgIAotICAgIHZvaWQgbWFy
a0lmQ2hlYXAoU2xvdFZpc2l0b3ImKTsKKyAgICB2b2lkIG1hcmtJZkNoZWFwKEFic3RyYWN0U2xv
dFZpc2l0b3ImKTsKICAgICBib29sIGZpbmFsaXplKFZNJik7CiAKICAgICB2b2lkIGR1bXAoUHJp
bnRTdHJlYW0mKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9J
bkJ5SWRWYXJpYW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvSW5CeUlkVmFyaWFudC5jcHAJKHJldmlzaW9uIDI3Mjc2OSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9JbkJ5SWRWYXJpYW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTggWXVzdWtlIFN1enVraSA8dXRh
dGFuZS50ZWFAZ21haWwuY29tPi4KLSAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTY0LDcgKzY0LDcgQEAgYm9vbCBJbkJ5SWRWYXJpYW50OjphdHRlbXB0VG9NZXJnZShjb25zdAog
ICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIEluQnlJZFZhcmlhbnQ6Om1hcmtJZkNoZWFwKFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBJbkJ5SWRWYXJpYW50OjptYXJrSWZDaGVhcChBYnN0
cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIG1fc3RydWN0dXJlU2V0Lm1hcmtJZkNo
ZWFwKHZpc2l0b3IpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lu
QnlJZFZhcmlhbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvSW5CeUlkVmFyaWFudC5oCShyZXZpc2lvbiAyNzI3NjkpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvSW5CeUlkVmFyaWFudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEs
NiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxOCBZdXN1a2UgU3V6dWtpIDx1dGF0YW5lLnRl
YUBnbWFpbC5jb20+LgotICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOC0yMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTcsNyAr
NTcsNyBAQCBwdWJsaWM6CiAKICAgICBib29sIGF0dGVtcHRUb01lcmdlKGNvbnN0IEluQnlJZFZh
cmlhbnQmIG90aGVyKTsKICAgICAKLSAgICB2b2lkIG1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJik7
CisgICAgdm9pZCBtYXJrSWZDaGVhcChBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAgICAgYm9vbCBm
aW5hbGl6ZShWTSYpOwogCiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW50ZXJuYWxGdW5jdGlvbkFsbG9jYXRp
b25Qcm9maWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0ludGVybmFsRnVuY3Rpb25BbGxvY2F0aW9uUHJvZmlsZS5oCShyZXZpc2lvbiAyNzI3NjkpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW50ZXJuYWxGdW5jdGlvbkFsbG9jYXRp
b25Qcm9maWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zOSw3ICszOSw3IEBAIHB1YmxpYzoKICAg
ICBTdHJ1Y3R1cmUqIGNyZWF0ZUFsbG9jYXRpb25TdHJ1Y3R1cmVGcm9tQmFzZShWTSYsIEpTR2xv
YmFsT2JqZWN0KiwgSlNDZWxsKiBvd25lciwgSlNPYmplY3QqIHByb3RvdHlwZSwgU3RydWN0dXJl
KiBiYXNlKTsKIAogICAgIHZvaWQgY2xlYXIoKSB7IG1fc3RydWN0dXJlLmNsZWFyKCk7IH0KLSAg
ICB2b2lkIHZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKSB7IHZpc2l0b3IuYXBw
ZW5kKG1fc3RydWN0dXJlKTsgfQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQg
dmlzaXRBZ2dyZWdhdGUoVmlzaXRvciYgdmlzaXRvcikgeyB2aXNpdG9yLmFwcGVuZChtX3N0cnVj
dHVyZSk7IH0KIAogcHJpdmF0ZToKICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX3N0cnVj
dHVyZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PYmplY3RBbGxvY2F0
aW9uUHJvZmlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9PYmplY3RBbGxvY2F0aW9uUHJvZmlsZS5oCShyZXZpc2lvbiAyNzI3NjkpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTY0LDcgKzY0LDggQEAgcHJvdGVjdGVkOgogICAgICAgICBBU1NFUlQoaXNO
dWxsKCkpOwogICAgIH0KIAotICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImIHZp
c2l0b3IpCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KKyAgICB2b2lkIHZpc2l0QWdn
cmVnYXRlKFZpc2l0b3ImIHZpc2l0b3IpCiAgICAgewogICAgICAgICB2aXNpdG9yLmFwcGVuZCht
X3N0cnVjdHVyZSk7CiAgICAgfQpAQCAtMTEwLDcgKzExMSw4IEBAIHB1YmxpYzoKICAgICAgICAg
QVNTRVJUKGlzTnVsbCgpKTsKICAgICB9CiAKLSAgICB2b2lkIHZpc2l0QWdncmVnYXRlKFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+CisgICAgdm9p
ZCB2aXNpdEFnZ3JlZ2F0ZShWaXNpdG9yJiB2aXNpdG9yKQogICAgIHsKICAgICAgICAgQmFzZTo6
dmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7CiAgICAgICAgIHZpc2l0b3IuYXBwZW5kKG1fcHJvdG90
eXBlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0Fj
Y2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Bv
bHltb3JwaGljQWNjZXNzLmNwcAkocmV2aXNpb24gMjcyNzY5KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAyMCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTM1OCw3ICszNTgsNyBAQCBib29sIFBvbHltb3JwaGljQWNjZXNzOjp2aXNpdFdlYWsoVk0mIHZt
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgUG9seW1vcnBoaWNBY2Nlc3M6OnByb3BhZ2F0
ZVRyYW5zaXRpb25zKFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBjb25zdAorYm9vbCBQb2x5bW9ycGhp
Y0FjY2Vzczo6cHJvcGFnYXRlVHJhbnNpdGlvbnMoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRv
cikgY29uc3QKIHsKICAgICBib29sIHJlc3VsdCA9IHRydWU7CiAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IHNpemUoKTsgKytpKQpAQCAtMzY2LDcgKzM2Niw3IEBAIGJvb2wgUG9seW1vcnBo
aWNBY2Nlc3M6OnByb3BhZ2F0ZVRyYW5zaXQKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi12b2lk
IFBvbHltb3JwaGljQWNjZXNzOjp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYgdmlzaXRvcikK
K3ZvaWQgUG9seW1vcnBoaWNBY2Nlc3M6OnZpc2l0QWdncmVnYXRlKEFic3RyYWN0U2xvdFZpc2l0
b3ImIHZpc2l0b3IpCiB7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemUoKTsgKytp
KQogICAgICAgICBhdChpKS52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5oCShyZXZp
c2lvbiAyNzI3NjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBo
aWNBY2Nlc3MuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTQtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTQtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE1MiwxNCArMTUyLDE0IEBAIHB1YmxpYzoK
ICAgICBjb25zdCBBY2Nlc3NDYXNlJiBhdCh1bnNpZ25lZCBpKSBjb25zdCB7IHJldHVybiAqbV9s
aXN0W2ldOyB9CiAgICAgY29uc3QgQWNjZXNzQ2FzZSYgb3BlcmF0b3JbXSh1bnNpZ25lZCBpKSBj
b25zdCB7IHJldHVybiAqbV9saXN0W2ldOyB9CiAKLSAgICB2b2lkIHZpc2l0QWdncmVnYXRlKFNs
b3RWaXNpdG9yJik7CisgICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShBYnN0cmFjdFNsb3RWaXNpdG9y
Jik7CiAKICAgICAvLyBJZiB0aGlzIHJldHVybnMgZmFsc2UgdGhlbiB3ZSBhcmUgcmVxdWVzdGlu
ZyBhIHJlc2V0IG9mIHRoZSBvd25pbmcgU3RydWN0dXJlU3R1YkluZm8uCiAgICAgYm9vbCB2aXNp
dFdlYWsoVk0mKSBjb25zdDsKICAgICAKICAgICAvLyBUaGlzIHJldHVybnMgdHJ1ZSBpZiBpdCBo
YXMgbWFya2VkIGV2ZXJ5dGhpbmcgaXQgd2lsbCBldmVyIG1hcmtlZC4gVGhpcyBjYW4gYmUgdXNl
ZCBhcyBhbgogICAgIC8vIG9wdGltaXphdGlvbiB0byB0aGVuIGF2b2lkIGNhbGxpbmcgdGhpcyBt
ZXRob2QgYWdhaW4gZHVyaW5nIHRoZSBmaXhwb2ludC4KLSAgICBib29sIHByb3BhZ2F0ZVRyYW5z
aXRpb25zKFNsb3RWaXNpdG9yJikgY29uc3Q7CisgICAgYm9vbCBwcm9wYWdhdGVUcmFuc2l0aW9u
cyhBYnN0cmFjdFNsb3RWaXNpdG9yJikgY29uc3Q7CiAKICAgICB2b2lkIGFib3V0VG9EaWUoKTsK
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3Rh
dHVzLmNwcAkocmV2aXNpb24gMjcyNzY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1B1dEJ5SWRTdGF0dXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzk2LDcgKzM5Niw3IEBA
IFB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6c2xvd1ZlcnNpb24KICAgICByZXR1cm4gUHV0
QnlJZFN0YXR1cyhtYWtlc0NhbGxzKCkgPyBNYWtlc0NhbGxzIDogVGFrZXNTbG93UGF0aCk7CiB9
CiAKLXZvaWQgUHV0QnlJZFN0YXR1czo6bWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImIHZpc2l0b3Ip
Cit2b2lkIFB1dEJ5SWRTdGF0dXM6Om1hcmtJZkNoZWFwKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZp
c2l0b3IpCiB7CiAgICAgZm9yIChQdXRCeUlkVmFyaWFudCYgdmFyaWFudCA6IG1fdmFyaWFudHMp
CiAgICAgICAgIHZhcmlhbnQubWFya0lmQ2hlYXAodmlzaXRvcik7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmgJKHJldmlzaW9uIDI3Mjc2
OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIw
MTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEy
LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0xMTcsNyArMTE3LDcgQEAgcHVibGljOgogICAgIGNvbnN0IFB1dEJ5
SWRWYXJpYW50JiBhdChzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fdmFyaWFudHNbaW5k
ZXhdOyB9CiAgICAgY29uc3QgUHV0QnlJZFZhcmlhbnQmIG9wZXJhdG9yW10oc2l6ZV90IGluZGV4
KSBjb25zdCB7IHJldHVybiBhdChpbmRleCk7IH0KICAgICAKLSAgICB2b2lkIG1hcmtJZkNoZWFw
KFNsb3RWaXNpdG9yJik7CisgICAgdm9pZCBtYXJrSWZDaGVhcChBYnN0cmFjdFNsb3RWaXNpdG9y
Jik7CiAgICAgYm9vbCBmaW5hbGl6ZShWTSYpOwogICAgIAogICAgIHZvaWQgbWVyZ2UoY29uc3Qg
UHV0QnlJZFN0YXR1cyYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1
dEJ5SWRWYXJpYW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvUHV0QnlJZFZhcmlhbnQuY3BwCShyZXZpc2lvbiAyNzI3NjkpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNC0yMDE4IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDIxIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtMjYyLDcgKzI2Miw3IEBAIGJvb2wgUHV0QnlJZFZhcmlhbnQ6OmF0dGVtcHRUb01lcmdlVHJh
bnMKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBQdXRCeUlkVmFyaWFudDo6bWFya0lmQ2hl
YXAoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIFB1dEJ5SWRWYXJpYW50OjptYXJrSWZDaGVh
cChBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIG1fb2xkU3RydWN0dXJlLm1h
cmtJZkNoZWFwKHZpc2l0b3IpOwogICAgIGlmIChtX25ld1N0cnVjdHVyZSkKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkVmFyaWFudC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkVmFyaWFudC5oCShyZXZpc2lv
biAyNzI3NjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlh
bnQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTQtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTQtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEzMiw3ICsxMzIsNyBAQCBwdWJsaWM6CiAKICAgICBi
b29sIGF0dGVtcHRUb01lcmdlKGNvbnN0IFB1dEJ5SWRWYXJpYW50JiBvdGhlcik7CiAgICAgCi0g
ICAgdm9pZCBtYXJrSWZDaGVhcChTbG90VmlzaXRvciYpOworICAgIHZvaWQgbWFya0lmQ2hlYXAo
QWJzdHJhY3RTbG90VmlzaXRvciYpOwogICAgIGJvb2wgZmluYWxpemUoVk0mKTsKICAgICAKICAg
ICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9SZWNvcmRlZFN0YXR1c2VzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUmVjb3JkZWRTdGF0dXNlcy5jcHAJKHJldmlzaW9uIDI3
Mjc2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9SZWNvcmRlZFN0YXR1c2Vz
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTgtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTgtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEwMiwzMiArMTAyLDMyIEBAIFNldFByaXZhdGVCcmFu
ZFN0YXR1cyogUmVjb3JkZWRTdGF0dXNlczoKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi12b2lk
IFJlY29yZGVkU3RhdHVzZXM6OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRv
cikKK3ZvaWQgUmVjb3JkZWRTdGF0dXNlczo6dmlzaXRBZ2dyZWdhdGUoQWJzdHJhY3RTbG90Vmlz
aXRvciYgdmlzaXRvcikKIHsKICAgICBmb3IgKGF1dG8mIHBhaXIgOiBnZXRzKQotICAgICAgICBw
YWlyLnNlY29uZC0+dmlzaXRBZ2dyZWdhdGUoc2xvdFZpc2l0b3IpOworICAgICAgICBwYWlyLnNl
Y29uZC0+dmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7CiAgICAgZm9yIChhdXRvJiBwYWlyIDogZGVs
ZXRlcykKLSAgICAgICAgcGFpci5zZWNvbmQtPnZpc2l0QWdncmVnYXRlKHNsb3RWaXNpdG9yKTsK
KyAgICAgICAgcGFpci5zZWNvbmQtPnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOwogICAgIGZvciAo
YXV0byYgcGFpciA6IGNoZWNrUHJpdmF0ZUJyYW5kcykKLSAgICAgICAgcGFpci5zZWNvbmQtPnZp
c2l0QWdncmVnYXRlKHNsb3RWaXNpdG9yKTsKKyAgICAgICAgcGFpci5zZWNvbmQtPnZpc2l0QWdn
cmVnYXRlKHZpc2l0b3IpOwogICAgIGZvciAoYXV0byYgcGFpciA6IHNldFByaXZhdGVCcmFuZHMp
Ci0gICAgICAgIHBhaXIuc2Vjb25kLT52aXNpdEFnZ3JlZ2F0ZShzbG90VmlzaXRvcik7CisgICAg
ICAgIHBhaXIuc2Vjb25kLT52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKIH0KIAotdm9pZCBSZWNv
cmRlZFN0YXR1c2VzOjptYXJrSWZDaGVhcChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IpCit2b2lk
IFJlY29yZGVkU3RhdHVzZXM6Om1hcmtJZkNoZWFwKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0
b3IpCiB7CiAgICAgZm9yIChhdXRvJiBwYWlyIDogZ2V0cykKLSAgICAgICAgcGFpci5zZWNvbmQt
Pm1hcmtJZkNoZWFwKHNsb3RWaXNpdG9yKTsKKyAgICAgICAgcGFpci5zZWNvbmQtPm1hcmtJZkNo
ZWFwKHZpc2l0b3IpOwogICAgIGZvciAoYXV0byYgcGFpciA6IHB1dHMpCi0gICAgICAgIHBhaXIu
c2Vjb25kLT5tYXJrSWZDaGVhcChzbG90VmlzaXRvcik7CisgICAgICAgIHBhaXIuc2Vjb25kLT5t
YXJrSWZDaGVhcCh2aXNpdG9yKTsKICAgICBmb3IgKGF1dG8mIHBhaXIgOiBpbnMpCi0gICAgICAg
IHBhaXIuc2Vjb25kLT5tYXJrSWZDaGVhcChzbG90VmlzaXRvcik7CisgICAgICAgIHBhaXIuc2Vj
b25kLT5tYXJrSWZDaGVhcCh2aXNpdG9yKTsKICAgICBmb3IgKGF1dG8mIHBhaXIgOiBkZWxldGVz
KQotICAgICAgICBwYWlyLnNlY29uZC0+bWFya0lmQ2hlYXAoc2xvdFZpc2l0b3IpOworICAgICAg
ICBwYWlyLnNlY29uZC0+bWFya0lmQ2hlYXAodmlzaXRvcik7CiAgICAgZm9yIChhdXRvJiBwYWly
IDogY2hlY2tQcml2YXRlQnJhbmRzKQotICAgICAgICBwYWlyLnNlY29uZC0+bWFya0lmQ2hlYXAo
c2xvdFZpc2l0b3IpOworICAgICAgICBwYWlyLnNlY29uZC0+bWFya0lmQ2hlYXAodmlzaXRvcik7
CiAgICAgZm9yIChhdXRvJiBwYWlyIDogc2V0UHJpdmF0ZUJyYW5kcykKLSAgICAgICAgcGFpci5z
ZWNvbmQtPm1hcmtJZkNoZWFwKHNsb3RWaXNpdG9yKTsKKyAgICAgICAgcGFpci5zZWNvbmQtPm1h
cmtJZkNoZWFwKHZpc2l0b3IpOwogfQogCiB2b2lkIFJlY29yZGVkU3RhdHVzZXM6OmZpbmFsaXpl
V2l0aG91dERlbGV0aW5nKFZNJiB2bSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9SZWNvcmRlZFN0YXR1c2VzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1JlY29yZGVkU3RhdHVzZXMuaAkocmV2aXNpb24gMjcyNzY5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1JlY29yZGVkU3RhdHVzZXMuaAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAyMCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTU0LDggKzU0LDggQEAgc3RydWN0IFJlY29yZGVkU3RhdHVzZXMgewogICAgIENo
ZWNrUHJpdmF0ZUJyYW5kU3RhdHVzKiBhZGRDaGVja1ByaXZhdGVCcmFuZFN0YXR1cyhjb25zdCBD
b2RlT3JpZ2luJiwgY29uc3QgQ2hlY2tQcml2YXRlQnJhbmRTdGF0dXMmKTsKICAgICBTZXRQcml2
YXRlQnJhbmRTdGF0dXMqIGFkZFNldFByaXZhdGVCcmFuZFN0YXR1cyhjb25zdCBDb2RlT3JpZ2lu
JiwgY29uc3QgU2V0UHJpdmF0ZUJyYW5kU3RhdHVzJik7CiAgICAgCi0gICAgdm9pZCB2aXNpdEFn
Z3JlZ2F0ZShTbG90VmlzaXRvciYpOwotICAgIHZvaWQgbWFya0lmQ2hlYXAoU2xvdFZpc2l0b3Im
KTsKKyAgICB2b2lkIHZpc2l0QWdncmVnYXRlKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKKyAgICB2
b2lkIG1hcmtJZkNoZWFwKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKICAgICAKICAgICB2b2lkIGZp
bmFsaXplV2l0aG91dERlbGV0aW5nKFZNJik7CiAgICAgdm9pZCBmaW5hbGl6ZShWTSYpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NldFByaXZhdGVCcmFuZFN0YXR1cy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NldFByaXZh
dGVCcmFuZFN0YXR1cy5jcHAJKHJldmlzaW9uIDI3Mjc2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9TZXRQcml2YXRlQnJhbmRTdGF0dXMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yMzUsMTMgKzIzNSwxMyBAQCBDYWNoZWFibGVJZGVudGlmaWVyIFNldFByaXZhdGVCcmFuZFN0
YXR1CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotdm9pZCBTZXRQcml2YXRlQnJhbmRTdGF0dXM6
OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBTZXRQcml2YXRlQnJh
bmRTdGF0dXM6OnZpc2l0QWdncmVnYXRlKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7
CiAgICAgZm9yIChTZXRQcml2YXRlQnJhbmRWYXJpYW50JiB2YXJpYW50IDogbV92YXJpYW50cykK
ICAgICAgICAgdmFyaWFudC52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKIH0KIAotdm9pZCBTZXRQ
cml2YXRlQnJhbmRTdGF0dXM6Om1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordm9p
ZCBTZXRQcml2YXRlQnJhbmRTdGF0dXM6Om1hcmtJZkNoZWFwKEFic3RyYWN0U2xvdFZpc2l0b3Im
IHZpc2l0b3IpCiB7CiAgICAgZm9yIChTZXRQcml2YXRlQnJhbmRWYXJpYW50JiB2YXJpYW50IDog
bV92YXJpYW50cykKICAgICAgICAgdmFyaWFudC5tYXJrSWZDaGVhcCh2aXNpdG9yKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TZXRQcml2YXRlQnJhbmRTdGF0dXMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU2V0UHJpdmF0ZUJy
YW5kU3RhdHVzLmgJKHJldmlzaW9uIDI3Mjc2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9TZXRQcml2YXRlQnJhbmRTdGF0dXMuaAkod29ya2luZyBjb3B5KQpAQCAtODMsOCAr
ODMsOCBAQCBwdWJsaWM6CiAgICAgLy8gQXR0ZW1wdHMgdG8gcmVkdWNlIHRoZSBzZXQgb2YgdmFy
aWFudHMgdG8gZml0IHRoZSBnaXZlbiBzdHJ1Y3R1cmUgc2V0LiBUaGlzIG1heSBiZSBhcHByb3hp
bWF0ZS4KICAgICB2b2lkIGZpbHRlcihjb25zdCBTdHJ1Y3R1cmVTZXQmKTsKIAotICAgIHZvaWQg
dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImKTsKLSAgICB2b2lkIG1hcmtJZkNoZWFwKFNsb3RW
aXNpdG9yJik7CisgICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShBYnN0cmFjdFNsb3RWaXNpdG9yJik7
CisgICAgdm9pZCBtYXJrSWZDaGVhcChBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAgICAgYm9vbCBm
aW5hbGl6ZShWTSYpOwogCiAgICAgYm9vbCBhcHBlbmRWYXJpYW50KGNvbnN0IFNldFByaXZhdGVC
cmFuZFZhcmlhbnQmKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TZXRQ
cml2YXRlQnJhbmRWYXJpYW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvU2V0UHJpdmF0ZUJyYW5kVmFyaWFudC5jcHAJKHJldmlzaW9uIDI3Mjc2OSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TZXRQcml2YXRlQnJhbmRWYXJpYW50
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTQsNyArNTQsNyBAQCBib29sIFNldFByaXZhdGVCcmFu
ZFZhcmlhbnQ6OmF0dGVtcHRUb01lCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgU2V0UHJp
dmF0ZUJyYW5kVmFyaWFudDo6bWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2b2lk
IFNldFByaXZhdGVCcmFuZFZhcmlhbnQ6Om1hcmtJZkNoZWFwKEFic3RyYWN0U2xvdFZpc2l0b3Im
IHZpc2l0b3IpCiB7CiAgICAgaWYgKG1fb2xkU3RydWN0dXJlKQogICAgICAgICBtX29sZFN0cnVj
dHVyZS0+bWFya0lmQ2hlYXAodmlzaXRvcik7CkBAIC03MSw3ICs3MSw3IEBAIGJvb2wgU2V0UHJp
dmF0ZUJyYW5kVmFyaWFudDo6ZmluYWxpemUoVk0KICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9p
ZCBTZXRQcml2YXRlQnJhbmRWYXJpYW50Ojp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYgdmlz
aXRvcikKK3ZvaWQgU2V0UHJpdmF0ZUJyYW5kVmFyaWFudDo6dmlzaXRBZ2dyZWdhdGUoQWJzdHJh
Y3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBtX2lkZW50aWZpZXIudmlzaXRBZ2dyZWdh
dGUodmlzaXRvcik7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU2V0
UHJpdmF0ZUJyYW5kVmFyaWFudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9TZXRQcml2YXRlQnJhbmRWYXJpYW50LmgJKHJldmlzaW9uIDI3Mjc2OSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TZXRQcml2YXRlQnJhbmRWYXJpYW50LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQ1LDggKzQ1LDggQEAgcHVibGljOgogCiAgICAgYm9vbCBhdHRl
bXB0VG9NZXJnZShjb25zdCBTZXRQcml2YXRlQnJhbmRWYXJpYW50JiBvdGhlcik7CiAKLSAgICB2
b2lkIHZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJik7Ci0gICAgdm9pZCBtYXJrSWZDaGVhcChT
bG90VmlzaXRvciYpOworICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoQWJzdHJhY3RTbG90VmlzaXRv
ciYpOworICAgIHZvaWQgbWFya0lmQ2hlYXAoQWJzdHJhY3RTbG90VmlzaXRvciYpOwogICAgIGJv
b2wgZmluYWxpemUoVk0mKTsKIAogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVNldC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVNldC5j
cHAJKHJldmlzaW9uIDI3Mjc2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9T
dHJ1Y3R1cmVTZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxNC0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzEsNyArMzEsNyBAQAogCiBuYW1l
c3BhY2UgSlNDIHsKIAotdm9pZCBTdHJ1Y3R1cmVTZXQ6Om1hcmtJZkNoZWFwKFNsb3RWaXNpdG9y
JiB2aXNpdG9yKSBjb25zdAordm9pZCBTdHJ1Y3R1cmVTZXQ6Om1hcmtJZkNoZWFwKEFic3RyYWN0
U2xvdFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0CiB7CiAgICAgZm9yIChTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSA6ICp0aGlzKQogICAgICAgICBzdHJ1Y3R1cmUtPm1hcmtJZkNoZWFwKHZpc2l0b3IpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVNldC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTZXQuaAko
cmV2aXNpb24gMjcyNzY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVj
dHVyZVNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMS0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTQsNyArNTQsNyBAQCBwdWJsaWM6CiAgICAg
ICAgIHJldHVybiBvbmx5RW50cnkoKTsKICAgICB9CiAKLSAgICB2b2lkIG1hcmtJZkNoZWFwKFNs
b3RWaXNpdG9yJikgY29uc3Q7CisgICAgdm9pZCBtYXJrSWZDaGVhcChBYnN0cmFjdFNsb3RWaXNp
dG9yJikgY29uc3Q7CiAgICAgYm9vbCBpc1N0aWxsQWxpdmUoVk0mKSBjb25zdDsKICAgICAKICAg
ICB2b2lkIGR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mLCBEdW1wQ29udGV4dCopIGNvbnN0OwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJl
U3R1YkluZm8uY3BwCShyZXZpc2lvbiAyNzI3NjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOC0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjk2LDcg
KzI5Niw3IEBAIHZvaWQgU3RydWN0dXJlU3R1YkluZm86OnJlc2V0KGNvbnN0IENvbmMKICAgICBz
ZXRDYWNoZVR5cGUobG9ja2VyLCBDYWNoZVR5cGU6OlVuc2V0KTsKIH0KIAotdm9pZCBTdHJ1Y3R1
cmVTdHViSW5mbzo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIFN0
cnVjdHVyZVN0dWJJbmZvOjp2aXNpdEFnZ3JlZ2F0ZShBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNp
dG9yKQogewogICAgIHsKICAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2J1ZmZlcmVk
U3RydWN0dXJlc0xvY2spOwpAQCAtMzUyLDcgKzM1Miw3IEBAIHZvaWQgU3RydWN0dXJlU3R1Yklu
Zm86OnZpc2l0V2Vha1JlZmVyZW4KICAgICByZXNldEJ5R0MgPSB0cnVlOwogfQogCi1ib29sIFN0
cnVjdHVyZVN0dWJJbmZvOjpwcm9wYWdhdGVUcmFuc2l0aW9ucyhTbG90VmlzaXRvciYgdmlzaXRv
cikKK2Jvb2wgU3RydWN0dXJlU3R1YkluZm86OnByb3BhZ2F0ZVRyYW5zaXRpb25zKEFic3RyYWN0
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgc3dpdGNoIChtX2NhY2hlVHlwZSkgewogICAg
IGNhc2UgQ2FjaGVUeXBlOjpVbnNldDoKQEAgLTM2Myw4ICszNjMsMTAgQEAgYm9vbCBTdHJ1Y3R1
cmVTdHViSW5mbzo6cHJvcGFnYXRlVHJhbnNpdAogICAgIGNhc2UgQ2FjaGVUeXBlOjpQdXRCeUlk
UmVwbGFjZToKICAgICBjYXNlIENhY2hlVHlwZTo6SW5CeUlkU2VsZjoKICAgICAgICAgcmV0dXJu
IHUuYnlJZFNlbGYuYmFzZU9iamVjdFN0cnVjdHVyZS0+bWFya0lmQ2hlYXAodmlzaXRvcik7Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICBjYXNlIENhY2hlVHlwZTo6U3R1YjoKICAgICAgICAg
cmV0dXJuIHUuc3R1Yi0+cHJvcGFnYXRlVHJhbnNpdGlvbnModmlzaXRvcik7CisgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICB9CiAgICAgCiAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5m
by5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1
cmVTdHViSW5mby5oCShyZXZpc2lvbiAyNzI3NjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTkzLDE0ICs5
MywxNCBAQCBwdWJsaWM6CiAgICAgdm9pZCBkZXJlZigpOwogICAgIHZvaWQgYWJvdXRUb0RpZSgp
OwogCi0gICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYpOworICAgIHZvaWQgdmlz
aXRBZ2dyZWdhdGUoQWJzdHJhY3RTbG90VmlzaXRvciYpOwogCiAgICAgLy8gQ2hlY2sgaWYgdGhl
IHN0dWIgaGFzIHdlYWsgcmVmZXJlbmNlcyB0aGF0IGFyZSBkZWFkLiBJZiBpdCBkb2VzLCB0aGVu
IGl0IHJlc2V0cyBpdHNlbGYsCiAgICAgLy8gZWl0aGVyIGVudGlyZWx5IG9yIGp1c3QgZW5vdWdo
IHRvIGVuc3VyZSB0aGF0IHRob3NlIGRlYWQgcG9pbnRlcnMgZG9uJ3QgZ2V0IHVzZWQgYW55bW9y
ZS4KICAgICB2b2lkIHZpc2l0V2Vha1JlZmVyZW5jZXMoY29uc3QgQ29uY3VycmVudEpTTG9ja2Vy
QmFzZSYsIENvZGVCbG9jayopOwogICAgIAogICAgIC8vIFRoaXMgcmV0dXJucyB0cnVlIGlmIGl0
IGhhcyBtYXJrZWQgZXZlcnl0aGluZyB0aGF0IGl0IHdpbGwgZXZlciBtYXJrLgotICAgIGJvb2wg
cHJvcGFnYXRlVHJhbnNpdGlvbnMoU2xvdFZpc2l0b3ImKTsKKyAgICBib29sIHByb3BhZ2F0ZVRy
YW5zaXRpb25zKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKICAgICAgICAgCiAgICAgU3R1YkluZm9T
dW1tYXJ5IHN1bW1hcnkoVk0mKSBjb25zdDsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcAkocmV2aXNpb24g
MjcyNzY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJs
b2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTItMjAxOSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTItMjAyMSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTc1LDcgKzc1LDggQEAgVW5saW5rZWRDb2RlQmxv
Y2s6OlVubGlua2VkQ29kZUJsb2NrKFZNJgogICAgIH0KIH0KIAotdm9pZCBVbmxpbmtlZENvZGVC
bG9jazo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQor
dGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgVW5saW5rZWRDb2RlQmxvY2s6OnZpc2l0
Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBVbmxp
bmtlZENvZGVCbG9jayogdGhpc09iamVjdCA9IGpzQ2FzdDxVbmxpbmtlZENvZGVCbG9jayo+KGNl
bGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsK
QEAgLTk0LDYgKzk1LDggQEAgdm9pZCBVbmxpbmtlZENvZGVCbG9jazo6dmlzaXRDaGlsZHJlbihK
UwogICAgIHZpc2l0b3IucmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKGV4dHJhTWVtb3J5KTsKIH0K
IAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKFVubGlua2VkQ29kZUJsb2NrKTsKKwogc2l6ZV90IFVu
bGlua2VkQ29kZUJsb2NrOjplc3RpbWF0ZWRTaXplKEpTQ2VsbCogY2VsbCwgVk0mIHZtKQogewog
ICAgIFVubGlua2VkQ29kZUJsb2NrKiB0aGlzT2JqZWN0ID0ganNDYXN0PFVubGlua2VkQ29kZUJs
b2NrKj4oY2VsbCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5r
ZWRDb2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvVW5saW5rZWRDb2RlQmxvY2suaAkocmV2aXNpb24gMjcyNzY5KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTkgQXBwbGUgSW5jLiBB
bGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjEgQXBwbGUgSW5j
LiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC00MzEsNyArNDMxLDcgQEAgcHJpdmF0ZToKICAgICBSZWZDb3VudGVkQXJyYXk8RXhwcmVzc2lv
blJhbmdlSW5mbz4gbV9leHByZXNzaW9uSW5mbzsKIAogcHJvdGVjdGVkOgotICAgIHN0YXRpYyB2
b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJ
U0lUX0NISUxEUkVOOwogICAgIHN0YXRpYyBzaXplX3QgZXN0aW1hdGVkU2l6ZShKU0NlbGwqLCBW
TSYpOwogCiBwdWJsaWM6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5s
aW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5jcHAJKHJldmlzaW9u
IDI3Mjc2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZEZ1bmN0
aW9uRXhlY3V0YWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDEyLTIwMTkgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjEgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xNDYsNyArMTQ2LDggQEAgdm9p
ZCBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6ZGVzdHJveQogICAgIHN0YXRpY19jYXN0PFVu
bGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKj4oY2VsbCktPn5VbmxpbmtlZEZ1bmN0aW9uRXhlY3V0
YWJsZSgpOwogfQogCi12b2lkIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlOjp2aXNpdENoaWxk
cmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBWaXNpdG9yPgordm9pZCBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6dmlzaXRDaGlsZHJl
bkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFVubGlua2VkRnVu
Y3Rpb25FeGVjdXRhYmxlKiB0aGlzT2JqZWN0ID0ganNDYXN0PFVubGlua2VkRnVuY3Rpb25FeGVj
dXRhYmxlKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0
LCBpbmZvKCkpOwpAQCAtMTY5LDYgKzE3MCw4IEBAIHZvaWQgVW5saW5rZWRGdW5jdGlvbkV4ZWN1
dGFibGU6OnZpc2l0Q2gKICAgICB9CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihVbmxpbmtl
ZEZ1bmN0aW9uRXhlY3V0YWJsZSk7CisKIFNvdXJjZUNvZGUgVW5saW5rZWRGdW5jdGlvbkV4ZWN1
dGFibGU6OmxpbmtlZFNvdXJjZUNvZGUoY29uc3QgU291cmNlQ29kZSYgcGFzc2VkUGFyZW50U291
cmNlKSBjb25zdAogewogICAgIGNvbnN0IFNvdXJjZUNvZGUmIHBhcmVudFNvdXJjZSA9ICFtX2lz
QnVpbHRpbkRlZmF1bHRDbGFzc0NvbnN0cnVjdG9yID8gcGFzc2VkUGFyZW50U291cmNlIDogQnVp
bHRpbkV4ZWN1dGFibGVzOjpkZWZhdWx0Q29uc3RydWN0b3JTb3VyY2VDb2RlKGNvbnN0cnVjdG9y
S2luZCgpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZEZ1
bmN0aW9uRXhlY3V0YWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5oCShyZXZpc2lvbiAyNzI3NjkpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFi
bGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTItMjAxOSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTItMjAyMSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI0Miw3ICsyNDIsNyBAQCBwcml2YXRlOgogICAgIFVu
bGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKFZNJiwgU3RydWN0dXJlKiwgY29uc3QgU291cmNlQ29k
ZSYsIEZ1bmN0aW9uTWV0YWRhdGFOb2RlKiwgVW5saW5rZWRGdW5jdGlvbktpbmQsIENvbnN0cnVj
dEFiaWxpdHksIEpTUGFyc2VyU2NyaXB0TW9kZSwgUmVmUHRyPFREWkVudmlyb25tZW50TGluaz4s
IE9wdGlvbmFsPFByaXZhdGVOYW1lRW52aXJvbm1lbnQ+LCBKU0M6OkRlcml2ZWRDb250ZXh0VHlw
ZSwgSlNDOjpOZWVkc0NsYXNzRmllbGRJbml0aWFsaXplciwgUHJpdmF0ZUJyYW5kUmVxdWlyZW1l
bnQsIGJvb2wgaXNCdWlsdGluRGVmYXVsdENsYXNzQ29uc3RydWN0b3IpOwogICAgIFVubGlua2Vk
RnVuY3Rpb25FeGVjdXRhYmxlKERlY29kZXImLCBjb25zdCBDYWNoZWRGdW5jdGlvbkV4ZWN1dGFi
bGUmKTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0
b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgdm9pZCBkZWNvZGVDYWNo
ZWRDb2RlQmxvY2tzKFZNJik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dl
ci9EZWJ1Z2dlclNjb3BlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGVidWdnZXIvRGVidWdnZXJTY29wZS5jcHAJKHJldmlzaW9uIDI3Mjc2OSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlclNjb3BlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxOSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAyMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTU1LDcgKzU1LDggQEAgdm9pZCBEZWJ1Z2dlclNjb3BlOjpmaW5pc2hDcmVhdGlvbihWTSYg
dgogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKIH0KIAotdm9pZCBEZWJ1Z2dlclNjb3Bl
Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1w
bGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBEZWJ1Z2dlclNjb3BlOjp2aXNpdENoaWxkcmVu
SW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgRGVidWdnZXJTY29w
ZSogdGhpc09iamVjdCA9IGpzQ2FzdDxEZWJ1Z2dlclNjb3BlKj4oY2VsbCk7CiAgICAgQVNTRVJU
X0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNjUsNiArNjYsOCBA
QCB2b2lkIERlYnVnZ2VyU2NvcGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsCiAgICAgdmlzaXRvci5h
cHBlbmQodGhpc09iamVjdC0+bV9uZXh0KTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKERl
YnVnZ2VyU2NvcGUpOworCiBTdHJpbmcgRGVidWdnZXJTY29wZTo6Y2xhc3NOYW1lKGNvbnN0IEpT
T2JqZWN0KiBvYmplY3QsIFZNJiB2bSkKIHsKICAgICBjb25zdCBEZWJ1Z2dlclNjb3BlKiBzY29w
ZSA9IGpzQ2FzdDxjb25zdCBEZWJ1Z2dlclNjb3BlKj4ob2JqZWN0KTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlclNjb3BlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyU2NvcGUuaAkocmV2aXNpb24gMjcy
NzY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyU2NvcGUuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgt
MjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDgtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTQ2LDcgKzQ2LDcgQEAgcHVibGljOgogCiAgICAgSlNfRVhQT1JU
X1BSSVZBVEUgc3RhdGljIERlYnVnZ2VyU2NvcGUqIGNyZWF0ZShWTSYgdm0sIEpTU2NvcGUqIHNj
b3BlKTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0
b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogICAgIHN0YXRpYyBTdHJpbmcgY2xh
c3NOYW1lKGNvbnN0IEpTT2JqZWN0KiwgVk0mKTsKICAgICBzdGF0aWMgU3RyaW5nIHRvU3RyaW5n
TmFtZShjb25zdCBKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0Kik7CiAgICAgc3RhdGljIGJvb2wg
Z2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5h
bWUsIFByb3BlcnR5U2xvdCYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdE
ZXNpcmVkVHJhbnNpdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHRGVzaXJlZFRyYW5zaXRpb25zLmNwcAkocmV2aXNpb24gMjcyNzY5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkVHJhbnNpdGlvbnMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtNTIsNyArNTIsNyBAQCB2b2lkIERlc2lyZWRUcmFuc2l0aW9uOjpyZWFsbHlB
ZGQoVk0mIHZtCiAgICAgICAgICAgICBtX29sZFN0cnVjdHVyZSwgbV9uZXdTdHJ1Y3R1cmUpKTsK
IH0KIAotdm9pZCBEZXNpcmVkVHJhbnNpdGlvbjo6dmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYg
dmlzaXRvcikKK3ZvaWQgRGVzaXJlZFRyYW5zaXRpb246OnZpc2l0Q2hpbGRyZW4oQWJzdHJhY3RT
bG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKG1f
Y29kZU9yaWdpbk93bmVyKTsKICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKG1fb2xkU3Ry
dWN0dXJlKTsKQEAgLTc4LDcgKzc4LDcgQEAgdm9pZCBEZXNpcmVkVHJhbnNpdGlvbnM6OnJlYWxs
eUFkZChWTSYgdgogICAgICAgICBtX3RyYW5zaXRpb25zW2ldLnJlYWxseUFkZCh2bSwgY29tbW9u
KTsKIH0KIAotdm9pZCBEZXNpcmVkVHJhbnNpdGlvbnM6OnZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0
b3ImIHZpc2l0b3IpCit2b2lkIERlc2lyZWRUcmFuc2l0aW9uczo6dmlzaXRDaGlsZHJlbihBYnN0
cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBtX3RyYW5zaXRpb25zLnNpemUoKTsgaSsrKQogICAgICAgICBtX3RyYW5zaXRpb25zW2ldLnZp
c2l0Q2hpbGRyZW4odmlzaXRvcik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0Rlc2lyZWRUcmFuc2l0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHRGVzaXJlZFRyYW5zaXRpb25zLmgJKHJldmlzaW9uIDI3Mjc2OSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFRyYW5zaXRpb25zLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtNDYsOCArNDYsNyBAQCBwdWJsaWM6CiAgICAgRGVzaXJlZFRyYW5zaXRpb24oQ29k
ZUJsb2NrKiwgQ29kZUJsb2NrKiBjb2RlT3JpZ2luT3duZXIsIFN0cnVjdHVyZSosIFN0cnVjdHVy
ZSopOwogCiAgICAgdm9pZCByZWFsbHlBZGQoVk0mLCBDb21tb25EYXRhKik7Ci0gICAgCi0gICAg
dm9pZCB2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CisgICAgdm9pZCB2aXNpdENoaWxkcmVu
KEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKIAogcHJpdmF0ZToKICAgICBDb2RlQmxvY2sqIG1fY29k
ZUJsb2NrOwpAQCAtNjMsNyArNjIsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGFkZExhemlseShD
b2RlQmxvY2sqLCBDb2RlQmxvY2sqIGNvZGVPcmlnaW5Pd25lciwgU3RydWN0dXJlKiwgU3RydWN0
dXJlKik7CiAgICAgdm9pZCByZWFsbHlBZGQoVk0mLCBDb21tb25EYXRhKik7Ci0gICAgdm9pZCB2
aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CisgICAgdm9pZCB2aXNpdENoaWxkcmVuKEFic3Ry
YWN0U2xvdFZpc2l0b3ImKTsKIAogcHJpdmF0ZToKICAgICBWZWN0b3I8RGVzaXJlZFRyYW5zaXRp
b24+IG1fdHJhbnNpdGlvbnM7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rl
c2lyZWRXZWFrUmVmZXJlbmNlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdEZXNpcmVkV2Vha1JlZmVyZW5jZXMuY3BwCShyZXZpc2lvbiAyNzI3NjkpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXZWFrUmVmZXJlbmNlcy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC04Nyw3ICs4Nyw3IEBAIHZvaWQgRGVzaXJlZFdlYWtSZWZlcmVu
Y2VzOjpyZWFsbHlBZGQoVk0KICAgICB9CiB9CiAKLXZvaWQgRGVzaXJlZFdlYWtSZWZlcmVuY2Vz
Ojp2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBEZXNpcmVkV2Vha1Jl
ZmVyZW5jZXM6OnZpc2l0Q2hpbGRyZW4oQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsK
ICAgICBmb3IgKEpTQ2VsbCogdGFyZ2V0IDogbV9yZWZlcmVuY2VzKQogICAgICAgICB2aXNpdG9y
LmFwcGVuZFVuYmFycmllcmVkKHRhcmdldCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Rlc2lyZWRXZWFrUmVmZXJlbmNlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFdlYWtSZWZlcmVuY2VzLmgJKHJldmlzaW9uIDI3Mjc2
OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFdlYWtSZWZlcmVuY2Vz
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0zMSwxMCArMzEsMTAgQEAKIAogbmFtZXNwYWNlIEpTQyB7
IAogCitjbGFzcyBBYnN0cmFjdFNsb3RWaXNpdG9yOwogY2xhc3MgQ29kZUJsb2NrOwogY2xhc3Mg
SlNDZWxsOwogY2xhc3MgSlNWYWx1ZTsKLWNsYXNzIFNsb3RWaXNpdG9yOwogY2xhc3MgVk07CiAK
IG5hbWVzcGFjZSBERkcgewpAQCAtNTIsOCArNTIsOCBAQCBwdWJsaWM6CiAgICAgYm9vbCBjb250
YWlucyhKU0NlbGwqKTsKICAgICAKICAgICB2b2lkIHJlYWxseUFkZChWTSYsIENvbW1vbkRhdGEq
KTsKLSAgICAKLSAgICB2b2lkIHZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKKworICAgIHZv
aWQgdmlzaXRDaGlsZHJlbihBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAKIHByaXZhdGU6CiAgICAg
Q29kZUJsb2NrKiBtX2NvZGVCbG9jazsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHR3JhcGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
R3JhcGguY3BwCShyZXZpc2lvbiAyNzI3NjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0dyYXBoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTEtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTEtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTk3Nyw3ICs5NzcsNyBAQCBCbG9ja0xp
c3QgR3JhcGg6OmJsb2Nrc0luUG9zdE9yZGVyKGJvb2wgCiAgICAgICAgIH0KICAgICB9CiAKLSAg
ICBpZiAoaXNTYWZlVG9WYWxpZGF0ZSAmJiB2YWxpZGF0aW9uRW5hYmxlZCgpKSB7IC8vIFRoZXJl
IGFyZSB1c2VycyBvZiB0aGlzIHdoZXJlIHdlIGhhdmVuJ3QgeWV0IGJ1aWx0IG9mIHRoZSBDRkcg
ZW5vdWdoIHRvIGJlIGFibGUgdG8gcnVuIGRvbWluYXRvcnMuCisgICAgaWYgKGlzU2FmZVRvVmFs
aWRhdGUgJiYgdmFsaWRhdGlvbkVuYWJsZWQoKSkgeyAvLyBUaGVyZSBhcmUgdXNlcnMgb2YgdGhp
cyB3aGVyZSB3ZSBoYXZlbid0IHlldCBidWlsdCB0aGUgQ0ZHIGVub3VnaCB0byBiZSBhYmxlIHRv
IHJ1biBkb21pbmF0b3JzLgogICAgICAgICBhdXRvIHZhbGlkYXRlUmVzdWx0cyA9IFsmXSAoYXV0
byYgZG9taW5hdG9ycykgewogICAgICAgICAgICAgLy8gV2hlbiBpdGVyYXRpbmcgb3ZlciByZXZl
cnNlIHBvc3Qgb3JkZXIsIHdlIHNob3VsZCBzZWUgZG9taW5hdG9ycwogICAgICAgICAgICAgLy8g
YmVmb3JlIHRoaW5ncyB0aGV5IGRvbWluYXRlLgpAQCAtMTQ0OCw3ICsxNDQ4LDcgQEAgdm9pZCBH
cmFwaDo6cmVnaXN0ZXJGcm96ZW5WYWx1ZXMoKQogICAgIG1fY29kZUJsb2NrLT5jb25zdGFudHNT
b3VyY2VDb2RlUmVwcmVzZW50YXRpb24oKS5zaHJpbmtUb0ZpdCgpOwogfQogCi12b2lkIEdyYXBo
Ojp2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBHcmFwaDo6dmlzaXRD
aGlsZHJlbihBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGZvciAoRnJvemVu
VmFsdWUqIHZhbHVlIDogbV9mcm96ZW5WYWx1ZXMpIHsKICAgICAgICAgdmlzaXRvci5hcHBlbmRV
bmJhcnJpZXJlZCh2YWx1ZS0+dmFsdWUoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0dyYXBoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdHcmFwaC5oCShyZXZpc2lvbiAyNzI3NjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0dyYXBoLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDExLTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDExLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMDAwLDkgKzEwMDAsOSBAQCBwdWJsaWM6
CiAgICAgYm9vbCBjYW5Eb0Zhc3RTcHJlYWQoTm9kZSosIGNvbnN0IEFic3RyYWN0VmFsdWUmKTsK
ICAgICAKICAgICB2b2lkIHJlZ2lzdGVyRnJvemVuVmFsdWVzKCk7Ci0gICAgCi0gICAgdm9pZCB2
aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJikgZmluYWw7Ci0gICAgCisKKyAgICB2b2lkIHZpc2l0
Q2hpbGRyZW4oQWJzdHJhY3RTbG90VmlzaXRvciYpIGZpbmFsOworCiAgICAgdm9pZCBsb2dBc3Nl
cnRpb25GYWlsdXJlKAogICAgICAgICBzdGQ6Om51bGxwdHJfdCwgY29uc3QgY2hhciogZmlsZSwg
aW50IGxpbmUsIGNvbnN0IGNoYXIqIGZ1bmN0aW9uLAogICAgICAgICBjb25zdCBjaGFyKiBhc3Nl
cnRpb24pOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCShyZXZpc2lv
biAyNzI3NjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIw
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtNjcyLDkgKzY3Miw5IEBAIENvbXBpbGF0aW9uS2V5IFBsYW46OmtleSgp
CiAgICAgcmV0dXJuIENvbXBpbGF0aW9uS2V5KG1fY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpLCBt
X21vZGUpOwogfQogCi12b2lkIFBsYW46OmNoZWNrTGl2ZW5lc3NBbmRWaXNpdENoaWxkcmVuKFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBQbGFuOjpjaGVja0xpdmVuZXNzQW5kVmlzaXRDaGls
ZHJlbihBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewotICAgIGlmICghaXNLbm93blRv
QmVMaXZlRHVyaW5nR0MoKSkKKyAgICBpZiAoIWlzS25vd25Ub0JlTGl2ZUR1cmluZ0dDKHZpc2l0
b3IpKQogICAgICAgICByZXR1cm47CiAKICAgICBjbGVhbk11c3RIYW5kbGVWYWx1ZXNJZk5lY2Vz
c2FyeSgpOwpAQCAtNzA4LDcgKzcwOCwyMCBAQCB2b2lkIFBsYW46OmZpbmFsaXplSW5HQygpCiAg
ICAgbV9yZWNvcmRlZFN0YXR1c2VzLmZpbmFsaXplV2l0aG91dERlbGV0aW5nKCptX3ZtKTsKIH0K
IAotYm9vbCBQbGFuOjppc0tub3duVG9CZUxpdmVEdXJpbmdHQygpCitib29sIFBsYW46OmlzS25v
d25Ub0JlTGl2ZUR1cmluZ0dDKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAg
aWYgKG1fc3RhZ2UgPT0gQ2FuY2VsbGVkKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYg
KCF2aXNpdG9yLmlzTWFya2VkKG1fY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIXZpc2l0b3IuaXNNYXJrZWQobV9jb2RlQmxvY2st
PmFsdGVybmF0aXZlKCkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCEhbV9wcm9m
aWxlZERGR0NvZGVCbG9jayAmJiAhdmlzaXRvci5pc01hcmtlZChtX3Byb2ZpbGVkREZHQ29kZUJs
b2NrKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiB0cnVlOworfQorCitib29s
IFBsYW46OmlzS25vd25Ub0JlTGl2ZUFmdGVyR0MoKQogewogICAgIGlmIChtX3N0YWdlID09IENh
bmNlbGxlZCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdQbGFuLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdQbGFuLmgJKHJldmlzaW9uIDI3Mjc2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHUGxhbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMy0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDMsOCArNDMsOCBAQAogCiBuYW1lc3Bh
Y2UgSlNDIHsKIAorY2xhc3MgQWJzdHJhY3RTbG90VmlzaXRvcjsKIGNsYXNzIENvZGVCbG9jazsK
LWNsYXNzIFNsb3RWaXNpdG9yOwogCiBuYW1lc3BhY2UgREZHIHsKIApAQCAtNzEsOSArNzEsMTAg
QEAgcHVibGljOgogICAgIENvbXBpbGF0aW9uS2V5IGtleSgpOwogICAgIAogICAgIHRlbXBsYXRl
PHR5cGVuYW1lIEZ1bmM+Ci0gICAgdm9pZCBpdGVyYXRlQ29kZUJsb2Nrc0ZvckdDKGNvbnN0IEZ1
bmMmKTsKLSAgICB2b2lkIGNoZWNrTGl2ZW5lc3NBbmRWaXNpdENoaWxkcmVuKFNsb3RWaXNpdG9y
Jik7Ci0gICAgYm9vbCBpc0tub3duVG9CZUxpdmVEdXJpbmdHQygpOworICAgIHZvaWQgaXRlcmF0
ZUNvZGVCbG9ja3NGb3JHQyhBYnN0cmFjdFNsb3RWaXNpdG9yJiwgY29uc3QgRnVuYyYpOworICAg
IHZvaWQgY2hlY2tMaXZlbmVzc0FuZFZpc2l0Q2hpbGRyZW4oQWJzdHJhY3RTbG90VmlzaXRvciYp
OworICAgIGJvb2wgaXNLbm93blRvQmVMaXZlRHVyaW5nR0MoQWJzdHJhY3RTbG90VmlzaXRvciYp
OworICAgIGJvb2wgaXNLbm93blRvQmVMaXZlQWZ0ZXJHQygpOwogICAgIHZvaWQgZmluYWxpemVJ
bkdDKCk7CiAgICAgdm9pZCBjYW5jZWwoKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdQbGFuSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHUGxhbklubGluZXMuaAkocmV2aXNpb24gMjcyNzY5KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdQbGFuSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNy0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzIsOSAr
MzIsOSBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAjaWYgRU5BQkxFKERGR19K
SVQpCiAKIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+Ci12b2lkIFBsYW46Oml0ZXJhdGVDb2RlQmxv
Y2tzRm9yR0MoY29uc3QgRnVuYyYgZnVuYykKK3ZvaWQgUGxhbjo6aXRlcmF0ZUNvZGVCbG9ja3NG
b3JHQyhBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBGdW5jJiBmdW5jKQogewot
ICAgIGlmICghaXNLbm93blRvQmVMaXZlRHVyaW5nR0MoKSkKKyAgICBpZiAoIWlzS25vd25Ub0Jl
TGl2ZUR1cmluZ0dDKHZpc2l0b3IpKQogICAgICAgICByZXR1cm47CiAgICAgCiAgICAgLy8gQ29t
cGlsYXRpb24gd3JpdGVzIGxvdHMgb2YgdmFsdWVzIHRvIGEgQ29kZUJsb2NrIHdpdGhvdXQgcGVy
Zm9ybWluZwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlcG9pbnQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZXBvaW50LmNw
cAkocmV2aXNpb24gMjcyNzY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZl
cG9pbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxNC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODMsMjggKzgzLDM4IEBAIHZvaWQgU2FmZXBv
aW50OjpiZWdpbigpCiAgICAgfQogfQogCi12b2lkIFNhZmVwb2ludDo6Y2hlY2tMaXZlbmVzc0Fu
ZFZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIFNhZmVwb2ludDo6Y2hl
Y2tMaXZlbmVzc0FuZFZpc2l0Q2hpbGRyZW4oQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikK
IHsKICAgICBSRUxFQVNFX0FTU0VSVChtX2RpZENhbGxCZWdpbik7CiAKICAgICBpZiAobV9yZXN1
bHQubV9kaWRHZXRDYW5jZWxsZWQpCiAgICAgICAgIHJldHVybjsgLy8gV2Ugd2VyZSBjYW5jZWxs
ZWQgZHVyaW5nIGEgcHJldmlvdXMgR0MhCiAgICAgCi0gICAgaWYgKCFpc0tub3duVG9CZUxpdmVE
dXJpbmdHQygpKQorICAgIGlmICghaXNLbm93blRvQmVMaXZlRHVyaW5nR0ModmlzaXRvcikpCiAg
ICAgICAgIHJldHVybjsKICAgICAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX3NjYW5uYWJsZXMu
c2l6ZSgpOyBpLS07KQogICAgICAgICBtX3NjYW5uYWJsZXNbaV0tPnZpc2l0Q2hpbGRyZW4odmlz
aXRvcik7CiB9CiAKLWJvb2wgU2FmZXBvaW50Ojppc0tub3duVG9CZUxpdmVEdXJpbmdHQygpCiti
b29sIFNhZmVwb2ludDo6aXNLbm93blRvQmVMaXZlRHVyaW5nR0MoQWJzdHJhY3RTbG90VmlzaXRv
ciYgdmlzaXRvcikKIHsKICAgICBSRUxFQVNFX0FTU0VSVChtX2RpZENhbGxCZWdpbik7CiAgICAg
CiAgICAgaWYgKG1fcmVzdWx0Lm1fZGlkR2V0Q2FuY2VsbGVkKQogICAgICAgICByZXR1cm4gdHJ1
ZTsgLy8gV2Ugd2VyZSBjYW5jZWxsZWQgZHVyaW5nIGEgcHJldmlvdXMgR0MsIHNvIGxldCdzIG5v
dCBtZXNzIHdpdGggaXQgdGhpcyB0aW1lIGFyb3VuZCAtIHByZXRlbmQgaXQncyBsaXZlIGFuZCBt
b3ZlIG9uLgogICAgIAotICAgIHJldHVybiBtX3BsYW4uaXNLbm93blRvQmVMaXZlRHVyaW5nR0Mo
KTsKKyAgICByZXR1cm4gbV9wbGFuLmlzS25vd25Ub0JlTGl2ZUR1cmluZ0dDKHZpc2l0b3IpOwor
fQorCitib29sIFNhZmVwb2ludDo6aXNLbm93blRvQmVMaXZlQWZ0ZXJHQygpCit7CisgICAgUkVM
RUFTRV9BU1NFUlQobV9kaWRDYWxsQmVnaW4pOworICAgIAorICAgIGlmIChtX3Jlc3VsdC5tX2Rp
ZEdldENhbmNlbGxlZCkKKyAgICAgICAgcmV0dXJuIHRydWU7IC8vIFdlIHdlcmUgY2FuY2VsbGVk
IGR1cmluZyBhIHByZXZpb3VzIEdDLCBzbyBsZXQncyBub3QgbWVzcyB3aXRoIGl0IHRoaXMgdGlt
ZSBhcm91bmQgLSBwcmV0ZW5kIGl0J3MgbGl2ZSBhbmQgbW92ZSBvbi4KKyAgICAKKyAgICByZXR1
cm4gbV9wbGFuLmlzS25vd25Ub0JlTGl2ZUFmdGVyR0MoKTsKIH0KIAogdm9pZCBTYWZlcG9pbnQ6
OmNhbmNlbCgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVwb2ludC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZXBvaW50LmgJ
KHJldmlzaW9uIDI3Mjc2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZXBv
aW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDE0LCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzEsNyArMzEsNyBAQAogCiBuYW1lc3BhY2UgSlND
IHsKIAotY2xhc3MgU2xvdFZpc2l0b3I7CitjbGFzcyBBYnN0cmFjdFNsb3RWaXNpdG9yOwogY2xh
c3MgVk07CiAKIG5hbWVzcGFjZSBERkcgewpAQCAtNjYsOSArNjYsMTAgQEAgcHVibGljOgogICAg
IHZvaWQgYWRkKFNjYW5uYWJsZSopOwogICAgIAogICAgIHZvaWQgYmVnaW4oKTsKLSAgICAKLSAg
ICB2b2lkIGNoZWNrTGl2ZW5lc3NBbmRWaXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJik7Ci0gICAg
Ym9vbCBpc0tub3duVG9CZUxpdmVEdXJpbmdHQygpOworCisgICAgdm9pZCBjaGVja0xpdmVuZXNz
QW5kVmlzaXRDaGlsZHJlbihBYnN0cmFjdFNsb3RWaXNpdG9yJik7CisgICAgYm9vbCBpc0tub3du
VG9CZUxpdmVEdXJpbmdHQyhBYnN0cmFjdFNsb3RWaXNpdG9yJik7CisgICAgYm9vbCBpc0tub3du
VG9CZUxpdmVBZnRlckdDKCk7CiAgICAgdm9pZCBjYW5jZWwoKTsKICAgICAKICAgICBWTSogdm0o
KSBjb25zdDsgLy8gTWF5IHJldHVybiBudWxsIGlmIHdlJ3ZlIGJlZW4gY2FuY2VsbGVkLgpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTY2FubmFibGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NjYW5uYWJsZS5oCShyZXZpc2lvbiAyNzI3
NjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NjYW5uYWJsZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAyMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTI5LDcgKzI5LDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLWNsYXNzIFNsb3RWaXNp
dG9yOworY2xhc3MgQWJzdHJhY3RTbG90VmlzaXRvcjsKIAogbmFtZXNwYWNlIERGRyB7CiAKQEAg
LTM4LDcgKzM4LDcgQEAgcHVibGljOgogICAgIFNjYW5uYWJsZSgpIHsgfQogICAgIHZpcnR1YWwg
flNjYW5uYWJsZSgpIHsgfQogICAgIAotICAgIHZpcnR1YWwgdm9pZCB2aXNpdENoaWxkcmVuKFNs
b3RWaXNpdG9yJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdENoaWxkcmVuKEFic3RyYWN0
U2xvdFZpc2l0b3ImKSA9IDA7CiB9OwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0LmNwcAkocmV2aXNpb24gMjcy
NzY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjAg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0zNzIsNyArMzcyLDcgQEAgdm9pZCBXb3JrbGlzdDo6cmVzdW1lQWxsVGhy
ZWFkcygpCiAgICAgbV9zdXNwZW5zaW9uTG9jay51bmxvY2soKTsKIH0KIAotdm9pZCBXb3JrbGlz
dDo6dmlzaXRXZWFrUmVmZXJlbmNlcyhTbG90VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgV29ya2xp
c3Q6OnZpc2l0V2Vha1JlZmVyZW5jZXMoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsK
ICAgICBWTSogdm0gPSAmdmlzaXRvci5oZWFwKCktPnZtKCk7CiAgICAgewpAQCAtNDA1LDcgKzQw
NSw3IEBAIHZvaWQgV29ya2xpc3Q6OnJlbW92ZURlYWRQbGFucyhWTSYgdm0pCiAgICAgICAgICAg
ICBQbGFuKiBwbGFuID0gaXRlci0+dmFsdWUuZ2V0KCk7CiAgICAgICAgICAgICBpZiAocGxhbi0+
dm0oKSAhPSAmdm0pCiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBpZiAo
cGxhbi0+aXNLbm93blRvQmVMaXZlRHVyaW5nR0MoKSkgeworICAgICAgICAgICAgaWYgKHBsYW4t
PmlzS25vd25Ub0JlTGl2ZUFmdGVyR0MoKSkgewogICAgICAgICAgICAgICAgIHBsYW4tPmZpbmFs
aXplSW5HQygpOwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQpAQCAt
NDQwLDcgKzQ0MCw3IEBAIHZvaWQgV29ya2xpc3Q6OnJlbW92ZURlYWRQbGFucyhWTSYgdm0pCiAg
ICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgaWYgKHNhZmVwb2ludC0+dm0oKSAhPSAmdm0p
CiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgaWYgKHNhZmVwb2ludC0+aXNLbm93blRv
QmVMaXZlRHVyaW5nR0MoKSkKKyAgICAgICAgaWYgKHNhZmVwb2ludC0+aXNLbm93blRvQmVMaXZl
QWZ0ZXJHQygpKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIHNhZmVwb2ludC0+Y2Fu
Y2VsKCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlz
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3Qu
aAkocmV2aXNpb24gMjcyNzY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3Jr
bGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzUsNyArMzUsNyBAQAogCiBuYW1lc3BhY2UgSlND
IHsKIAotY2xhc3MgU2xvdFZpc2l0b3I7CitjbGFzcyBBYnN0cmFjdFNsb3RWaXNpdG9yOwogCiBu
YW1lc3BhY2UgREZHIHsKIApAQCAtNTcsNyArNTcsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBjb21w
bGV0ZUFsbFBsYW5zRm9yVk0oVk0mKTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+Ci0g
ICAgdm9pZCBpdGVyYXRlQ29kZUJsb2Nrc0ZvckdDKFZNJiwgY29uc3QgRnVuYyYpOworICAgIHZv
aWQgaXRlcmF0ZUNvZGVCbG9ja3NGb3JHQyhBYnN0cmFjdFNsb3RWaXNpdG9yJiwgVk0mLCBjb25z
dCBGdW5jJik7CiAKICAgICB2b2lkIHdhaXRVbnRpbEFsbFBsYW5zRm9yVk1BcmVSZWFkeShWTSYp
OwogICAgIFN0YXRlIGNvbXBsZXRlQWxsUmVhZHlQbGFuc0ZvclZNKFZNJiwgQ29tcGlsYXRpb25L
ZXkgPSBDb21waWxhdGlvbktleSgpKTsKQEAgLTczLDcgKzczLDcgQEAgcHVibGljOgogICAgIGJv
b2wgaXNBY3RpdmVGb3JWTShWTSYpIGNvbnN0OwogICAgIAogICAgIC8vIE9ubHkgY2FsbGVkIG9u
IHRoZSBtYWluIHRocmVhZCBhZnRlciBzdXNwZW5kaW5nIGFsbCB0aHJlYWRzLgotICAgIHZvaWQg
dmlzaXRXZWFrUmVmZXJlbmNlcyhTbG90VmlzaXRvciYpOworICAgIHZvaWQgdmlzaXRXZWFrUmVm
ZXJlbmNlcyhBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAgICAgdm9pZCByZW1vdmVEZWFkUGxhbnMo
Vk0mKTsKICAgICAKICAgICB2b2lkIHJlbW92ZU5vbkNvbXBpbGluZ1BsYW5zRm9yVk0oVk0mKTsK
QEAgLTE0NCw3ICsxNDQsNyBAQCBXb3JrbGlzdCYgZXhpc3RpbmdXb3JrbGlzdEZvckluZGV4KHVu
c2lnCiB2b2lkIGNvbXBsZXRlQWxsUGxhbnNGb3JWTShWTSYpOwogCiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBGdW5jPgotdm9pZCBpdGVyYXRlQ29kZUJsb2Nrc0ZvckdDKFZNJiwgY29uc3QgRnVuYyYpOwor
dm9pZCBpdGVyYXRlQ29kZUJsb2Nrc0ZvckdDKEFic3RyYWN0U2xvdFZpc2l0b3ImLCBWTSYsIGNv
bnN0IEZ1bmMmKTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0SW5saW5lcy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3RJbmxpbmVzLmgJKHJldmlzaW9uIDI3
Mjc2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3RJbmxpbmVzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3
LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC0zMywzMCArMzMsMzAgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBERkcgewogI2lmIEVOQUJMRShERkdfSklUKQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5j
Pgotdm9pZCBpdGVyYXRlQ29kZUJsb2Nrc0ZvckdDKFZNJiB2bSwgY29uc3QgRnVuYyYgZnVuYykK
K3ZvaWQgaXRlcmF0ZUNvZGVCbG9ja3NGb3JHQyhBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9y
LCBWTSYgdm0sIGNvbnN0IEZ1bmMmIGZ1bmMpCiB7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gREZH
OjpudW1iZXJPZldvcmtsaXN0cygpOyBpLS07KSB7CiAgICAgICAgIGlmIChERkc6OldvcmtsaXN0
KiB3b3JrbGlzdCA9IERGRzo6ZXhpc3RpbmdXb3JrbGlzdEZvckluZGV4T3JOdWxsKGkpKQotICAg
ICAgICAgICAgd29ya2xpc3QtPml0ZXJhdGVDb2RlQmxvY2tzRm9yR0Modm0sIGZ1bmMpOworICAg
ICAgICAgICAgd29ya2xpc3QtPml0ZXJhdGVDb2RlQmxvY2tzRm9yR0ModmlzaXRvciwgdm0sIGZ1
bmMpOwogICAgIH0KIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KLXZvaWQgV29ya2xpc3Q6
Oml0ZXJhdGVDb2RlQmxvY2tzRm9yR0MoVk0mIHZtLCBjb25zdCBGdW5jJiBmdW5jKQordm9pZCBX
b3JrbGlzdDo6aXRlcmF0ZUNvZGVCbG9ja3NGb3JHQyhBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNp
dG9yLCBWTSYgdm0sIGNvbnN0IEZ1bmMmIGZ1bmMpCiB7CiAgICAgTG9ja0hvbGRlciBsb2NrZXIo
Km1fbG9jayk7CiAgICAgZm9yIChQbGFuTWFwOjppdGVyYXRvciBpdGVyID0gbV9wbGFucy5iZWdp
bigpOyBpdGVyICE9IG1fcGxhbnMuZW5kKCk7ICsraXRlcikgewogICAgICAgICBQbGFuKiBwbGFu
ID0gaXRlci0+dmFsdWUuZ2V0KCk7CiAgICAgICAgIGlmIChwbGFuLT52bSgpICE9ICZ2bSkKICAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBwbGFuLT5pdGVyYXRlQ29kZUJsb2Nrc0ZvckdD
KGZ1bmMpOworICAgICAgICBwbGFuLT5pdGVyYXRlQ29kZUJsb2Nrc0ZvckdDKHZpc2l0b3IsIGZ1
bmMpOwogICAgIH0KIH0KIAogI2Vsc2UgLy8gRU5BQkxFKERGR19KSVQpCiAKIHRlbXBsYXRlPHR5
cGVuYW1lIEZ1bmM+Ci12b2lkIGl0ZXJhdGVDb2RlQmxvY2tzRm9yR0MoVk0mLCBjb25zdCBGdW5j
JikKK3ZvaWQgaXRlcmF0ZUNvZGVCbG9ja3NGb3JHQyhBYnN0cmFjdFNsb3RWaXNpdG9yJiwgVk0m
LCBjb25zdCBGdW5jJikKIHsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
QWJzdHJhY3RTbG90VmlzaXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0Fic3RyYWN0U2xvdFZpc2l0b3IuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9BYnN0cmFjdFNsb3RWaXNpdG9yLmgJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwyMzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkpTQ0pTVmFsdWUuaCIKKyNpbmNsdWRlICJN
YXJrU3RhY2suaCIKKyNpbmNsdWRlICJWaXNpdFJhY2VLZXkuaCIKKyNpbmNsdWRlIDx3dGYvU2hh
cmVkVGFzay5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIEpT
QyB7CisKK2NsYXNzIENvbnNlcnZhdGl2ZVJvb3RzOworY2xhc3MgSGVhcDsKK2NsYXNzIEhlYXBD
ZWxsOworY2xhc3MgSlNDZWxsOworY2xhc3MgTWFya2VkQmxvY2s7CitjbGFzcyBNYXJraW5nQ29u
c3RyYWludDsKK2NsYXNzIE1hcmtpbmdDb25zdHJhaW50U29sdmVyOworY2xhc3MgUHJlY2lzZUFs
bG9jYXRpb247CitjbGFzcyBTbG90VmlzaXRvcjsKK2NsYXNzIFZNOworY2xhc3MgVmVyaWZpZXJT
bG90VmlzaXRvcjsKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGNsYXNzIFdlYWs7Cit0ZW1wbGF0ZTx0
eXBlbmFtZSBULCB0eXBlbmFtZSBUcmFpdHM+IGNsYXNzIFdyaXRlQmFycmllckJhc2U7CisKK2Ns
YXNzIEFic3RyYWN0U2xvdFZpc2l0b3IgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEFic3Ry
YWN0U2xvdFZpc2l0b3IpOworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgor
ICAgIGNsYXNzIENvbnRleHQgeworICAgIHB1YmxpYzoKKyAgICAgICAgQ29udGV4dChBYnN0cmFj
dFNsb3RWaXNpdG9yJiwgSGVhcENlbGwqKTsKKyAgICAgICAgfkNvbnRleHQoKTsKKyAgICAgICAg
SGVhcENlbGwqIGNlbGwoKSBjb25zdCB7IHJldHVybiBtX2NlbGw7IH0KKyAgICBwcml2YXRlOgor
ICAgICAgICBBYnN0cmFjdFNsb3RWaXNpdG9yJiBtX3Zpc2l0b3I7CisgICAgICAgIEhlYXBDZWxs
KiBtX2NlbGw7CisgICAgICAgIENvbnRleHQqIG1fcHJldmlvdXM7CisgICAgfTsKKworICAgIGNs
YXNzIFN1cHByZXNzR0NWZXJpZmllclNjb3BlIHsKKyAgICBwdWJsaWM6CisgICAgICAgIFN1cHBy
ZXNzR0NWZXJpZmllclNjb3BlKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCisgICAgICAg
ICAgICA6IG1fdmlzaXRvcih2aXNpdG9yKQorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQo
IW1fdmlzaXRvci5tX3N1cHByZXNzVmVyaWZpZXIpOworICAgICAgICAgICAgbV92aXNpdG9yLm1f
c3VwcHJlc3NWZXJpZmllciA9IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgflN1cHByZXNzR0NW
ZXJpZmllclNjb3BlKCkgeyBtX3Zpc2l0b3IubV9zdXBwcmVzc1ZlcmlmaWVyID0gZmFsc2U7IH0K
KyAgICBwcml2YXRlOgorICAgICAgICBBYnN0cmFjdFNsb3RWaXNpdG9yJiBtX3Zpc2l0b3I7Cisg
ICAgfTsKKworICAgIGVudW0gUm9vdE1hcmtSZWFzb24geworICAgICAgICBOb25lLAorICAgICAg
ICBDb25zZXJ2YXRpdmVTY2FuLAorICAgICAgICBTdHJvbmdSZWZlcmVuY2VzLAorICAgICAgICBQ
cm90ZWN0ZWRWYWx1ZXMsCisgICAgICAgIE1hcmtMaXN0U2V0LAorICAgICAgICBWTUV4Y2VwdGlv
bnMsCisgICAgICAgIFN0cm9uZ0hhbmRsZXMsCisgICAgICAgIERlYnVnZ2VyLAorICAgICAgICBK
SVRTdHViUm91dGluZXMsCisgICAgICAgIFdlYWtTZXRzLAorICAgICAgICBPdXRwdXQsCisgICAg
ICAgIERGR1dvcmtMaXN0cywKKyAgICAgICAgQ29kZUJsb2NrcywKKyAgICAgICAgRE9NR0NPdXRw
dXQsCisgICAgfTsKKyAgICB1c2luZyBSb290TWFya1JlYXNvblN0b3JhZ2UgPSB1aW50OF90Owor
CisgICAgY2xhc3MgRGVmYXVsdE1hcmtpbmdWaW9sYXRpb25Bc3NlcnRpb25TY29wZSB7CisgICAg
cHVibGljOgorICAgICAgICBEZWZhdWx0TWFya2luZ1Zpb2xhdGlvbkFzc2VydGlvblNjb3BlKEFi
c3RyYWN0U2xvdFZpc2l0b3ImKSB7IH0KKyAgICB9OworCisgICAgdmlydHVhbCB+QWJzdHJhY3RT
bG90VmlzaXRvcigpID0gZGVmYXVsdDsKKworICAgIE1hcmtTdGFja0FycmF5JiBjb2xsZWN0b3JN
YXJrU3RhY2soKSB7IHJldHVybiBtX2NvbGxlY3RvclN0YWNrOyB9CisgICAgTWFya1N0YWNrQXJy
YXkmIG11dGF0b3JNYXJrU3RhY2soKSB7IHJldHVybiBtX211dGF0b3JTdGFjazsgfQorICAgIGNv
bnN0IE1hcmtTdGFja0FycmF5JiBjb2xsZWN0b3JNYXJrU3RhY2soKSBjb25zdCB7IHJldHVybiBt
X2NvbGxlY3RvclN0YWNrOyB9CisgICAgY29uc3QgTWFya1N0YWNrQXJyYXkmIG11dGF0b3JNYXJr
U3RhY2soKSBjb25zdCB7IHJldHVybiBtX211dGF0b3JTdGFjazsgfQorCisgICAgYm9vbCBpc0Vt
cHR5KCkgeyByZXR1cm4gbV9jb2xsZWN0b3JTdGFjay5pc0VtcHR5KCkgJiYgbV9tdXRhdG9yU3Rh
Y2suaXNFbXB0eSgpOyB9CisKKyAgICBWTSYgdm0oKTsKKyAgICBjb25zdCBWTSYgdm0oKSBjb25z
dDsKKyAgICBIZWFwKiBoZWFwKCkgY29uc3Q7CisKKyAgICB2aXJ0dWFsIHZvaWQgYXBwZW5kKGNv
bnN0IENvbnNlcnZhdGl2ZVJvb3RzJikgPSAwOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgVHJhaXRzPiB2b2lkIGFwcGVuZChjb25zdCBXcml0ZUJhcnJpZXJCYXNlPFQsIFRy
YWl0cz4mKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBUcmFpdHM+IHZvaWQg
YXBwZW5kSGlkZGVuKGNvbnN0IFdyaXRlQmFycmllckJhc2U8VCwgVHJhaXRzPiYpOworICAgIHRl
bXBsYXRlPHR5cGVuYW1lIEl0ZXJhdG9yPiB2b2lkIGFwcGVuZChJdGVyYXRvciBiZWdpbiAsIEl0
ZXJhdG9yIGVuZCk7CisgICAgQUxXQVlTX0lOTElORSB2b2lkIGFwcGVuZFZhbHVlcyhjb25zdCBX
cml0ZUJhcnJpZXJCYXNlPFVua25vd24sIFJhd1ZhbHVlVHJhaXRzPFVua25vd24+PiosIHNpemVf
dCBjb3VudCk7CisgICAgQUxXQVlTX0lOTElORSB2b2lkIGFwcGVuZFZhbHVlc0hpZGRlbihjb25z
dCBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24sIFJhd1ZhbHVlVHJhaXRzPFVua25vd24+PiosIHNp
emVfdCBjb3VudCk7CisKKyAgICAvLyBUaGVzZSBkb24ndCByZXF1aXJlIHlvdSB0byBwcm92ZSB0
aGF0IHlvdSBoYXZlIGEgV3JpdGVCYXJyaWVyPD4uIFRoYXQgbWFrZXMgc2Vuc2UKKyAgICAvLyBm
b3I6CisgICAgLy8KKyAgICAvLyAtIHJvb3RzLgorICAgIC8vIC0gc29waGlzdGljYXRlZCBkYXRh
IHN0cnVjdHVyZXMgdGhhdCBiYXJyaWVyIHRocm91Z2ggb3RoZXIgbWVhbnMgKGxpa2UgREZHOjpQ
bGFuIGFuZAorICAgIC8vICAgZnJpZW5kcykuCisgICAgLy8KKyAgICAvLyBJZiB5b3UgYXJlIG5v
dCBhIHJvb3QgYW5kIHlvdSBkb24ndCBrbm93IHdoYXQga2luZCBvZiBiYXJyaWVyIHlvdSBoYXZl
LCB0aGVuIHlvdQorICAgIC8vIHNob3VsZG4ndCBjYWxsIHRoZXNlIG1ldGhvZHMuCisgICAgQUxX
QVlTX0lOTElORSB2b2lkIGFwcGVuZFVuYmFycmllcmVkKEpTVmFsdWUpOworICAgIEFMV0FZU19J
TkxJTkUgdm9pZCBhcHBlbmRVbmJhcnJpZXJlZChKU1ZhbHVlKiwgc2l6ZV90KTsKKyAgICBBTFdB
WVNfSU5MSU5FIHZvaWQgYXBwZW5kVW5iYXJyaWVyZWQoSlNDZWxsKiBjZWxsKQorICAgIHsKKyAg
ICAgICAgaWYgKCFjZWxsKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBhcHBlbmRVbmJh
cnJpZXJlZEltcGwoY2VsbCk7CisgICAgfQorICAgIHZpcnR1YWwgdm9pZCBhcHBlbmRVbmJhcnJp
ZXJlZEltcGwoSlNDZWxsKikgPSAwOworCisgICAgdmlydHVhbCBib29sIGFkZE9wYXF1ZVJvb3Qo
dm9pZCopID0gMDsgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSByb290IHdhcyBuZXcuCisgICAgdmly
dHVhbCBib29sIGNvbnRhaW5zT3BhcXVlUm9vdCh2b2lkKikgY29uc3QgPSAwOworCisgICAgdmly
dHVhbCBib29sIGlzRmlyc3RWaXNpdCgpIGNvbnN0ID0gMDsKKworICAgIHZpcnR1YWwgYm9vbCBp
c01hcmtlZChjb25zdCB2b2lkKikgY29uc3QgPSAwOworICAgIHZpcnR1YWwgYm9vbCBpc01hcmtl
ZChNYXJrZWRCbG9jayYsIEhlYXBDZWxsKikgY29uc3QgPSAwOworICAgIHZpcnR1YWwgYm9vbCBp
c01hcmtlZChQcmVjaXNlQWxsb2NhdGlvbiYsIEhlYXBDZWxsKikgY29uc3QgPSAwOworCisgICAg
dGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICB2b2lkIGFwcGVuZChjb25zdCBXZWFrPFQ+JiB3ZWFr
KTsKKworICAgIEFMV0FZU19JTkxJTkUgdm9pZCBhcHBlbmRIaWRkZW5VbmJhcnJpZXJlZChKU1Zh
bHVlKTsKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgYXBwZW5kSGlkZGVuVW5iYXJyaWVyZWQoSlND
ZWxsKiBjZWxsKQorICAgIHsKKyAgICAgICAgaWYgKCFjZWxsKQorICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICBhcHBlbmRIaWRkZW5VbmJhcnJpZXJlZEltcGwoY2VsbCk7CisgICAgfQorICAg
IHZpcnR1YWwgdm9pZCBhcHBlbmRIaWRkZW5VbmJhcnJpZXJlZEltcGwoSlNDZWxsKikgPSAwOwor
CisgICAgc2l6ZV90IHZpc2l0Q291bnQoKSBjb25zdCB7IHJldHVybiBtX3Zpc2l0Q291bnQ7IH0K
KworICAgIHZvaWQgYWRkVG9WaXNpdENvdW50KHNpemVfdCB2YWx1ZSkgeyBtX3Zpc2l0Q291bnQg
Kz0gdmFsdWU7IH0KKworICAgIHZpcnR1YWwgdm9pZCBhZGRQYXJhbGxlbENvbnN0cmFpbnRUYXNr
KFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoQWJzdHJhY3RTbG90VmlzaXRvciYpPj4pID0gMDsKKwor
ICAgIHZpcnR1YWwgdm9pZCBtYXJrQXV4aWxpYXJ5KGNvbnN0IHZvaWQqIGJhc2UpID0gMDsKKwor
ICAgIHZpcnR1YWwgdm9pZCByZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQoc2l6ZV90KSA9IDA7Cisj
aWYgRU5BQkxFKFJFU09VUkNFX1VTQUdFKQorICAgIHZpcnR1YWwgdm9pZCByZXBvcnRFeHRlcm5h
bE1lbW9yeVZpc2l0ZWQoc2l6ZV90KSA9IDA7CisjZW5kaWYKKworICAgIHZpcnR1YWwgdm9pZCBk
dW1wKFByaW50U3RyZWFtJikgY29uc3QgPSAwOworCisgICAgUm9vdE1hcmtSZWFzb24gcm9vdE1h
cmtSZWFzb24oKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxSb290TWFya1JlYXNvbj4obV9y
b290TWFya1JlYXNvbik7IH0KKyAgICB2b2lkIHNldFJvb3RNYXJrUmVhc29uKFJvb3RNYXJrUmVh
c29uIHJlYXNvbikgeyBtX3Jvb3RNYXJrUmVhc29uID0gcmVhc29uOyB9CisKKyAgICB2aXJ0dWFs
IGJvb2wgbXV0YXRvcklzU3RvcHBlZCgpIGNvbnN0ID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBk
aWRSYWNlKGNvbnN0IFZpc2l0UmFjZUtleSYpID0gMDsKKyAgICB2b2lkIGRpZFJhY2UoSlNDZWxs
KiBjZWxsLCBjb25zdCBjaGFyKiByZWFzb24pIHsgZGlkUmFjZShWaXNpdFJhY2VLZXkoY2VsbCwg
cmVhc29uKSk7IH0KKworICAgIHZpcnR1YWwgdm9pZCB2aXNpdEFzQ29uc3RyYWludChjb25zdCBK
U0NlbGwqKSA9IDA7CisKKyAgICBjb25zdCBjaGFyKiBjb2RlTmFtZSgpIGNvbnN0IHsgcmV0dXJu
IG1fY29kZU5hbWUuZGF0YSgpOyB9CisKK3Byb3RlY3RlZDoKKyAgICBpbmxpbmUgQWJzdHJhY3RT
bG90VmlzaXRvcihIZWFwJiwgQ1N0cmluZyBjb2RlTmFtZSk7CisKKyAgICBIZWFwQ2VsbCogcGFy
ZW50Q2VsbCgpIGNvbnN0OworICAgIHZvaWQgcmVzZXQoKTsKKworICAgIE1hcmtTdGFja0FycmF5
IG1fY29sbGVjdG9yU3RhY2s7CisgICAgTWFya1N0YWNrQXJyYXkgbV9tdXRhdG9yU3RhY2s7CisK
KyAgICBzaXplX3QgbV92aXNpdENvdW50IHsgMCB9OworCisgICAgSGVhcCYgbV9oZWFwOworICAg
IENvbnRleHQqIG1fY29udGV4dCB7IG51bGxwdHIgfTsKKyAgICBDU3RyaW5nIG1fY29kZU5hbWU7
CisKKyAgICBSb290TWFya1JlYXNvblN0b3JhZ2UgbV9yb290TWFya1JlYXNvbiB7IFJvb3RNYXJr
UmVhc29uOjpOb25lIH07CisgICAgYm9vbCBtX3N1cHByZXNzVmVyaWZpZXIgeyBmYWxzZSB9Owor
CisgICAgTWFya2luZ0NvbnN0cmFpbnQqIG1fY3VycmVudENvbnN0cmFpbnQgeyBudWxscHRyIH07
CisgICAgTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXIqIG1fY3VycmVudFNvbHZlciB7IG51bGxwdHIg
fTsKKworICAgIGZyaWVuZCBjbGFzcyBNYXJraW5nQ29uc3RyYWludFNvbHZlcjsKK307CisKK2Ns
YXNzIFNldFJvb3RNYXJrUmVhc29uU2NvcGUgeworcHVibGljOgorICAgIFNldFJvb3RNYXJrUmVh
c29uU2NvcGUoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvciwgQWJzdHJhY3RTbG90VmlzaXRv
cjo6Um9vdE1hcmtSZWFzb24gcmVhc29uKQorICAgICAgICA6IG1fdmlzaXRvcih2aXNpdG9yKQor
ICAgICAgICAsIG1fcHJldmlvdXNSZWFzb24odmlzaXRvci5yb290TWFya1JlYXNvbigpKQorICAg
IHsKKyAgICAgICAgbV92aXNpdG9yLnNldFJvb3RNYXJrUmVhc29uKHJlYXNvbik7CisgICAgfQor
CisgICAgflNldFJvb3RNYXJrUmVhc29uU2NvcGUoKQorICAgIHsKKyAgICAgICAgbV92aXNpdG9y
LnNldFJvb3RNYXJrUmVhc29uKG1fcHJldmlvdXNSZWFzb24pOworICAgIH0KKworcHJpdmF0ZToK
KyAgICBBYnN0cmFjdFNsb3RWaXNpdG9yJiBtX3Zpc2l0b3I7CisgICAgQWJzdHJhY3RTbG90Vmlz
aXRvcjo6Um9vdE1hcmtSZWFzb24gbV9wcmV2aW91c1JlYXNvbjsKK307CisKK30gLy8gbmFtZXNw
YWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQWJzdHJhY3RTbG90Vmlz
aXRvcklubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9B
YnN0cmFjdFNsb3RWaXNpdG9ySW5saW5lcy5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0Fic3RyYWN0U2xvdFZpc2l0b3JJbmxpbmVzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwxMzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkFic3RyYWN0U2xvdFZpc2l0b3Iu
aCIKKyNpbmNsdWRlICJIZWFwLmgiCisjaW5jbHVkZSAiV2Vha0lubGluZXMuaCIKKyNpbmNsdWRl
ICJXcml0ZUJhcnJpZXIuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2lubGluZSBBYnN0cmFjdFNs
b3RWaXNpdG9yOjpDb250ZXh0OjpDb250ZXh0KEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3Is
IEhlYXBDZWxsKiBjZWxsKQorICAgIDogbV92aXNpdG9yKHZpc2l0b3IpCisgICAgLCBtX2NlbGwo
Y2VsbCkKK3sKKyAgICBtX3ByZXZpb3VzID0gbV92aXNpdG9yLm1fY29udGV4dDsKKyAgICBtX3Zp
c2l0b3IubV9jb250ZXh0ID0gdGhpczsKK30KKworaW5saW5lIEFic3RyYWN0U2xvdFZpc2l0b3I6
OkNvbnRleHQ6On5Db250ZXh0KCkKK3sKKyAgICBtX3Zpc2l0b3IubV9jb250ZXh0ID0gbV9wcmV2
aW91czsKK30KKworaW5saW5lIEFic3RyYWN0U2xvdFZpc2l0b3I6OkFic3RyYWN0U2xvdFZpc2l0
b3IoSGVhcCYgaGVhcCwgQ1N0cmluZyBjb2RlTmFtZSkKKyAgICA6IG1faGVhcChoZWFwKQorICAg
ICwgbV9jb2RlTmFtZShjb2RlTmFtZSkKK3sKK30KKworaW5saW5lIEhlYXAqIEFic3RyYWN0U2xv
dFZpc2l0b3I6OmhlYXAoKSBjb25zdAoreworICAgIHJldHVybiAmbV9oZWFwOworfQorCitpbmxp
bmUgVk0mIEFic3RyYWN0U2xvdFZpc2l0b3I6OnZtKCkKK3sKKyAgICByZXR1cm4gbV9oZWFwLnZt
KCk7Cit9CisKK2lubGluZSBjb25zdCBWTSYgQWJzdHJhY3RTbG90VmlzaXRvcjo6dm0oKSBjb25z
dAoreworICAgIHJldHVybiBtX2hlYXAudm0oKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4K
K0FMV0FZU19JTkxJTkUgdm9pZCBBYnN0cmFjdFNsb3RWaXNpdG9yOjphcHBlbmQoY29uc3QgV2Vh
azxUPiYgd2VhaykKK3sKKyAgICBhcHBlbmRVbmJhcnJpZXJlZCh3ZWFrLmdldCgpKTsKK30KKwor
dGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVHJhaXRzPgorQUxXQVlTX0lOTElORSB2b2lk
IEFic3RyYWN0U2xvdFZpc2l0b3I6OmFwcGVuZChjb25zdCBXcml0ZUJhcnJpZXJCYXNlPFQsIFRy
YWl0cz4mIHNsb3QpCit7CisgICAgYXBwZW5kVW5iYXJyaWVyZWQoc2xvdC5nZXQoKSk7Cit9CisK
K3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFRyYWl0cz4KK0FMV0FZU19JTkxJTkUgdm9p
ZCBBYnN0cmFjdFNsb3RWaXNpdG9yOjphcHBlbmRIaWRkZW4oY29uc3QgV3JpdGVCYXJyaWVyQmFz
ZTxULCBUcmFpdHM+JiBzbG90KQoreworICAgIGFwcGVuZEhpZGRlblVuYmFycmllcmVkKHNsb3Qu
Z2V0KCkpOworfQorCitBTFdBWVNfSU5MSU5FIHZvaWQgQWJzdHJhY3RTbG90VmlzaXRvcjo6YXBw
ZW5kSGlkZGVuVW5iYXJyaWVyZWQoSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUuaXND
ZWxsKCkpCisgICAgICAgIGFwcGVuZEhpZGRlblVuYmFycmllcmVkKHZhbHVlLmFzQ2VsbCgpKTsK
K30KKwordGVtcGxhdGU8dHlwZW5hbWUgSXRlcmF0b3I+CitBTFdBWVNfSU5MSU5FIHZvaWQgQWJz
dHJhY3RTbG90VmlzaXRvcjo6YXBwZW5kKEl0ZXJhdG9yIGJlZ2luLCBJdGVyYXRvciBlbmQpCit7
CisgICAgZm9yIChhdXRvIGl0ID0gYmVnaW47IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgYXBw
ZW5kKCppdCk7Cit9CisKK0FMV0FZU19JTkxJTkUgdm9pZCBBYnN0cmFjdFNsb3RWaXNpdG9yOjph
cHBlbmRWYWx1ZXMoY29uc3QgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiogYmFycmllcnMsIHNp
emVfdCBjb3VudCkKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpCisg
ICAgICAgIGFwcGVuZChiYXJyaWVyc1tpXSk7Cit9CisKK0FMV0FZU19JTkxJTkUgdm9pZCBBYnN0
cmFjdFNsb3RWaXNpdG9yOjphcHBlbmRWYWx1ZXNIaWRkZW4oY29uc3QgV3JpdGVCYXJyaWVyQmFz
ZTxVbmtub3duPiogYmFycmllcnMsIHNpemVfdCBjb3VudCkKK3sKKyAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGNvdW50OyArK2kpCisgICAgICAgIGFwcGVuZEhpZGRlbihiYXJyaWVyc1tpXSk7
Cit9CisKK0FMV0FZU19JTkxJTkUgdm9pZCBBYnN0cmFjdFNsb3RWaXNpdG9yOjphcHBlbmRVbmJh
cnJpZXJlZChKU1ZhbHVlIHZhbHVlKQoreworICAgIGlmICh2YWx1ZS5pc0NlbGwoKSkKKyAgICAg
ICAgYXBwZW5kVW5iYXJyaWVyZWQodmFsdWUuYXNDZWxsKCkpOworfQorCitBTFdBWVNfSU5MSU5F
IHZvaWQgQWJzdHJhY3RTbG90VmlzaXRvcjo6YXBwZW5kVW5iYXJyaWVyZWQoSlNWYWx1ZSogc2xv
dCwgc2l6ZV90IGNvdW50KQoreworICAgIGZvciAoc2l6ZV90IGkgPSBjb3VudDsgaS0tOykKKyAg
ICAgICAgYXBwZW5kVW5iYXJyaWVyZWQoc2xvdFtpXSk7Cit9CisKK0FMV0FZU19JTkxJTkUgSGVh
cENlbGwqIEFic3RyYWN0U2xvdFZpc2l0b3I6OnBhcmVudENlbGwoKSBjb25zdAoreworICAgIGlm
ICghbV9jb250ZXh0KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gbV9jb250
ZXh0LT5jZWxsKCk7Cit9CisKK0FMV0FZU19JTkxJTkUgdm9pZCBBYnN0cmFjdFNsb3RWaXNpdG9y
OjpyZXNldCgpCit7CisgICAgbV92aXNpdENvdW50ID0gMDsKK30KKworfSAvLyBuYW1lc3BhY2Ug
SlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IYW5kbGVTZXQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hhbmRsZVNldC5jcHAJKHJldmlz
aW9uIDI3Mjc2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hhbmRsZVNldC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEx
LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDExLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC01Niw3ICs1Niw3IEBAIHZvaWQgSGFuZGxlU2V0Ojpncm93KCkK
ICAgICB9CiB9CiAKLXZvaWQgSGFuZGxlU2V0Ojp2aXNpdFN0cm9uZ0hhbmRsZXMoU2xvdFZpc2l0
b3ImIHZpc2l0b3IpCit2b2lkIEhhbmRsZVNldDo6dmlzaXRTdHJvbmdIYW5kbGVzKEFic3RyYWN0
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgTm9kZSogZW5kID0gbV9zdHJvbmdMaXN0LmVu
ZCgpOwogICAgIGZvciAoTm9kZSogbm9kZSA9IG1fc3Ryb25nTGlzdC5iZWdpbigpOyBub2RlICE9
IGVuZDsgbm9kZSA9IG5vZGUtPm5leHQoKSkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvSGFuZGxlU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvSGFuZGxlU2V0LmgJKHJldmlzaW9uIDI3Mjc2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0hhbmRsZVNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMS0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzUsMTAgKzM1LDEwIEBACiAK
IG5hbWVzcGFjZSBKU0MgewogCitjbGFzcyBBYnN0cmFjdFNsb3RWaXNpdG9yOwogY2xhc3MgSGFu
ZGxlU2V0OwogY2xhc3MgVk07CiBjbGFzcyBKU1ZhbHVlOwotY2xhc3MgU2xvdFZpc2l0b3I7CiAK
IGNsYXNzIEhhbmRsZU5vZGUgewogcHVibGljOgpAQCAtNzMsNyArNzMsNyBAQCBwdWJsaWM6CiAg
ICAgSGFuZGxlU2xvdCBhbGxvY2F0ZSgpOwogICAgIHZvaWQgZGVhbGxvY2F0ZShIYW5kbGVTbG90
KTsKIAotICAgIHZvaWQgdmlzaXRTdHJvbmdIYW5kbGVzKFNsb3RWaXNpdG9yJik7CisgICAgdm9p
ZCB2aXNpdFN0cm9uZ0hhbmRsZXMoQWJzdHJhY3RTbG90VmlzaXRvciYpOwogCiAgICAgSlNfRVhQ
T1JUX1BSSVZBVEUgdm9pZCB3cml0ZUJhcnJpZXIoSGFuZGxlU2xvdCwgY29uc3QgSlNWYWx1ZSYp
OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAkocmV2aXNpb24gMjcyNzY5
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogIENvcHlyaWdodCAoQykgMjAwMy0yMDIwIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAyMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA3IEVyaWMg
U2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTcyLDYgKzcyLDcgQEAK
ICNpbmNsdWRlICJUeXBlUHJvZmlsZXIuaCIKICNpbmNsdWRlICJUeXBlUHJvZmlsZXJMb2cuaCIK
ICNpbmNsdWRlICJWTS5oIgorI2luY2x1ZGUgIlZlcmlmaWVyU2xvdFZpc2l0b3JJbmxpbmVzLmgi
CiAjaW5jbHVkZSAiV2Vha01hcEltcGxJbmxpbmVzLmgiCiAjaW5jbHVkZSAiV2Vha1NldElubGlu
ZXMuaCIKICNpbmNsdWRlIDxhbGdvcml0aG0+CkBAIC02NDQsMTggKzY0NSwxOCBAQCB2b2lkIEhl
YXA6OmNvbXBsZXRlQWxsSklUUGxhbnMoKQogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgot
dm9pZCBIZWFwOjppdGVyYXRlRXhlY3V0aW5nQW5kQ29tcGlsaW5nQ29kZUJsb2Nrcyhjb25zdCBG
dW5jJiBmdW5jKQordm9pZCBIZWFwOjppdGVyYXRlRXhlY3V0aW5nQW5kQ29tcGlsaW5nQ29kZUJs
b2NrcyhBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBGdW5jJiBmdW5jKQogewog
ICAgIG1fY29kZUJsb2Nrcy0+aXRlcmF0ZUN1cnJlbnRseUV4ZWN1dGluZyhmdW5jKTsKICAgICBp
ZiAoT3B0aW9uczo6dXNlSklUKCkpCi0gICAgICAgIERGRzo6aXRlcmF0ZUNvZGVCbG9ja3NGb3JH
QyhtX3ZtLCBmdW5jKTsKKyAgICAgICAgREZHOjppdGVyYXRlQ29kZUJsb2Nrc0ZvckdDKHZpc2l0
b3IsIG1fdm0sIGZ1bmMpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgotdm9pZCBIZWFw
OjppdGVyYXRlRXhlY3V0aW5nQW5kQ29tcGlsaW5nQ29kZUJsb2Nrc1dpdGhvdXRIb2xkaW5nTG9j
a3MoY29uc3QgRnVuYyYgZnVuYykKK3ZvaWQgSGVhcDo6aXRlcmF0ZUV4ZWN1dGluZ0FuZENvbXBp
bGluZ0NvZGVCbG9ja3NXaXRob3V0SG9sZGluZ0xvY2tzKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZp
c2l0b3IsIGNvbnN0IEZ1bmMmIGZ1bmMpCiB7CiAgICAgVmVjdG9yPENvZGVCbG9jayosIDI1Nj4g
Y29kZUJsb2NrczsKLSAgICBpdGVyYXRlRXhlY3V0aW5nQW5kQ29tcGlsaW5nQ29kZUJsb2NrcygK
KyAgICBpdGVyYXRlRXhlY3V0aW5nQW5kQ29tcGlsaW5nQ29kZUJsb2Nrcyh2aXNpdG9yLAogICAg
ICAgICBbJl0gKENvZGVCbG9jayogY29kZUJsb2NrKSB7CiAgICAgICAgICAgICBjb2RlQmxvY2tz
LmFwcGVuZChjb2RlQmxvY2spOwogICAgICAgICB9KTsKQEAgLTczMywxNCArNzM0LDYgQEAgdm9p
ZCBIZWFwOjpyZW1vdmVEZWFkQ29tcGlsZXJXb3JrbGlzdEVudAogI2VuZGlmCiB9CiAKLWJvb2wg
SGVhcDo6aXNBbmFseXppbmdIZWFwKCkgY29uc3QKLXsKLSAgICBIZWFwUHJvZmlsZXIqIGhlYXBQ
cm9maWxlciA9IG1fdm0uaGVhcFByb2ZpbGVyKCk7Ci0gICAgaWYgKFVOTElLRUxZKGhlYXBQcm9m
aWxlcikpCi0gICAgICAgIHJldHVybiBoZWFwUHJvZmlsZXItPmFjdGl2ZUhlYXBBbmFseXplcigp
OwotICAgIHJldHVybiBmYWxzZTsKLX0KLQogc3RydWN0IEdhdGhlckV4dHJhSGVhcERhdGEgOiBN
YXJrZWRCbG9jazo6Q291bnRGdW5jdG9yIHsKICAgICBHYXRoZXJFeHRyYUhlYXBEYXRhKFZNJiB2
bSwgSGVhcEFuYWx5emVyJiBhbmFseXplcikKICAgICAgICAgOiBtX3ZtKHZtKQpAQCAtMTQxMyw3
ICsxNDA2LDcgQEAgTkVWRVJfSU5MSU5FIGJvb2wgSGVhcDo6cnVuRml4cG9pbnRQaGFzZQogICAg
IC8vIFRoaXMgZG9lc24ndCBoYXZlIHRvIGNoZWNrIHRoZSBtdXRhdG9yIFNsb3RWaXNpdG9yIGJl
Y2F1c2UgdGhhdCBvbmUgYmVjb21lcyBlbXB0eSBhZnRlciBldmVyeSBHQwogICAgIC8vIHdvcmsg
aW5jcmVtZW50LCBzbyBpdCBtdXN0IGJlIGVtcHR5IG5vdy4KICAgICBpZiAoc2xvdFZpc2l0b3Iu
ZGlkUmVhY2hUZXJtaW5hdGlvbigpKQotICAgICAgICByZXR1cm4gdHJ1ZTsgLy8gVGhpcyBpcyBs
aWtlIHJlbG9vcGluZyB0byB0aGUgdG9wIGlmIHJ1bkZpeHBvaW50UGhhc2UoKS4KKyAgICAgICAg
cmV0dXJuIHRydWU7IC8vIFRoaXMgaXMgbGlrZSByZWxvb3BpbmcgdG8gdGhlIHRvcCBvZiBydW5G
aXhwb2ludFBoYXNlKCkuCiAgICAgICAgIAogICAgIGlmICghbV9zY2hlZHVsZXItPnNob3VsZFJl
c3VtZSgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTE0ODUsMTQgKzE0NzgsMjEgQEAgTkVW
RVJfSU5MSU5FIGJvb2wgSGVhcDo6cnVuRW5kUGhhc2UoR0NDbwogICAgIH0KICAgICBtX2hlbHBl
ckNsaWVudC5maW5pc2goKTsKICAgICAKLSAgICBpdGVyYXRlRXhlY3V0aW5nQW5kQ29tcGlsaW5n
Q29kZUJsb2NrcygKKyAgICBBU1NFUlQobV9tdXRhdG9yTWFya1N0YWNrLT5pc0VtcHR5KCkpOwor
ICAgIEFTU0VSVChtX3JhY2VNYXJrU3RhY2stPmlzRW1wdHkoKSk7CisKKyAgICBTbG90VmlzaXRv
ciYgc2xvdFZpc2l0b3IgPSAqbV9jb2xsZWN0b3JTbG90VmlzaXRvcjsKKyAgICBpdGVyYXRlRXhl
Y3V0aW5nQW5kQ29tcGlsaW5nQ29kZUJsb2NrcyhzbG90VmlzaXRvciwKICAgICAgICAgWyZdIChD
b2RlQmxvY2sqIGNvZGVCbG9jaykgewogICAgICAgICAgICAgd3JpdGVCYXJyaWVyKGNvZGVCbG9j
ayk7CiAgICAgICAgIH0pOwotICAgICAgICAKKwogICAgIHVwZGF0ZU9iamVjdENvdW50cygpOwog
ICAgIGVuZE1hcmtpbmcoKTsKIAorICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjp2ZXJpZnlHQygp
KSkKKyAgICAgICAgdmVyaWZ5R0MoKTsKKwogICAgIGlmIChVTkxJS0VMWShtX3ZlcmlmaWVyKSkg
ewogICAgICAgICBtX3ZlcmlmaWVyLT5nYXRoZXJMaXZlQ2VsbHMoSGVhcFZlcmlmaWVyOjpQaGFz
ZTo6QWZ0ZXJNYXJraW5nKTsKICAgICAgICAgbV92ZXJpZmllci0+dmVyaWZ5KEhlYXBWZXJpZmll
cjo6UGhhc2U6OkFmdGVyTWFya2luZyk7CkBAIC0yMTcwLDYgKzIxNzAsMTEgQEAgdm9pZCBIZWFw
OjpzdXNwZW5kQ29tcGlsZXJUaHJlYWRzKCkKIAogdm9pZCBIZWFwOjp3aWxsU3RhcnRDb2xsZWN0
aW9uKCkKIHsKKyAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6dmVyaWZ5R0MoKSkpIHsKKyAgICAg
ICAgbV92ZXJpZmllclNsb3RWaXNpdG9yID0gbWFrZVVuaXF1ZTxWZXJpZmllclNsb3RWaXNpdG9y
PigqdGhpcyk7CisgICAgICAgIEFTU0VSVCghbV9pc01hcmtpbmdGb3JHQ1ZlcmlmaWVyKTsKKyAg
ICB9CisKICAgICBkYXRhTG9nSWYoT3B0aW9uczo6bG9nR0MoKSwgIj0+ICIpOwogICAgIAogICAg
IGlmIChzaG91bGREb0Z1bGxDb2xsZWN0aW9uKCkpIHsKQEAgLTI3MDEsOSArMjcwNiwxNCBAQCB2
b2lkIEhlYXA6OmFkZENvcmVDb25zdHJhaW50cygpCiB7CiAgICAgbV9jb25zdHJhaW50U2V0LT5h
ZGQoCiAgICAgICAgICJDcyIsICJDb25zZXJ2YXRpdmUgU2NhbiIsCi0gICAgICAgIFt0aGlzLCBs
YXN0VmVyc2lvbiA9IHN0YXRpY19jYXN0PHVpbnQ2NF90PigwKV0gKFNsb3RWaXNpdG9yJiBzbG90
VmlzaXRvcikgbXV0YWJsZSB7CisgICAgICAgIFt0aGlzLCBsYXN0VmVyc2lvbiA9IHN0YXRpY19j
YXN0PHVpbnQ2NF90PigwKV0gKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpIG11dGFibGUg
ewogICAgICAgICAgICAgYm9vbCBzaG91bGROb3RQcm9kdWNlV29yayA9IGxhc3RWZXJzaW9uID09
IG1fcGhhc2VWZXJzaW9uOwotICAgICAgICAgICAgaWYgKHNob3VsZE5vdFByb2R1Y2VXb3JrKQor
CisgICAgICAgICAgICAvLyBGb3IgdGhlIEdDIFZlcmZpZXIsIHdlIHdvdWxkIGxpa2UgdG8gdXNl
IHRoZSBpZGVudGljYWwgc2V0IG9mIGNvbnNlcnZhdGl2ZSByb290cworICAgICAgICAgICAgLy8g
YXMgdGhlIHJlYWwgR0MuIE90aGVyd2lzZSwgdGhlIEdDIHZlcmlmaWVyIG1heSByZXBvcnQgZmFs
c2UgbmVnYXRpdmVzIGR1ZSB0bworICAgICAgICAgICAgLy8gdmFyaWF0aW9ucyBpbiBzdGFjayB2
YWx1ZXMuIEZvciB0aGlzIHNhbWUgcmVhc29uLCB3ZSB3aWxsIHNraXAgdGhpcyBjb25zdHJhaW50
CisgICAgICAgICAgICAvLyB3aGVuIHdlJ3JlIHJ1bm5pbmcgdGhlIEdDIHZlcmlmaWNhdGlvbiBp
biB0aGUgRW5kIHBoYXNlLgorICAgICAgICAgICAgaWYgKHNob3VsZE5vdFByb2R1Y2VXb3JrIHx8
IG1faXNNYXJraW5nRm9yR0NWZXJpZmllcikKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgICAgICAKICAgICAgICAgICAgIFRpbWluZ1Njb3BlIHByZUNvbnZlcmdlbmNlVGltaW5nU2Nv
cGUoKnRoaXMsICJDb25zdHJhaW50OiBjb25zZXJ2YXRpdmUgc2NhbiIpOwpAQCAtMjcxOCwxMyAr
MjcyOCwxNyBAQCB2b2lkIEhlYXA6OmFkZENvcmVDb25zdHJhaW50cygpCiAgICAgICAgICAgICAg
ICAgZ2F0aGVySlNTdGFja1Jvb3RzKGNvbnNlcnZhdGl2ZVJvb3RzKTsKICAgICAgICAgICAgICAg
ICBnYXRoZXJTY3JhdGNoQnVmZmVyUm9vdHMoY29uc2VydmF0aXZlUm9vdHMpOwogCi0gICAgICAg
ICAgICAgICAgU2V0Um9vdE1hcmtSZWFzb25TY29wZSByb290U2NvcGUoc2xvdFZpc2l0b3IsIFNs
b3RWaXNpdG9yOjpSb290TWFya1JlYXNvbjo6Q29uc2VydmF0aXZlU2Nhbik7Ci0gICAgICAgICAg
ICAgICAgc2xvdFZpc2l0b3IuYXBwZW5kKGNvbnNlcnZhdGl2ZVJvb3RzKTsKKyAgICAgICAgICAg
ICAgICBTZXRSb290TWFya1JlYXNvblNjb3BlIHJvb3RTY29wZSh2aXNpdG9yLCBBYnN0cmFjdFNs
b3RWaXNpdG9yOjpSb290TWFya1JlYXNvbjo6Q29uc2VydmF0aXZlU2Nhbik7CisgICAgICAgICAg
ICAgICAgdmlzaXRvci5hcHBlbmQoY29uc2VydmF0aXZlUm9vdHMpOworICAgICAgICAgICAgICAg
IGlmIChVTkxJS0VMWShtX3ZlcmlmaWVyU2xvdFZpc2l0b3IpKQorICAgICAgICAgICAgICAgICAg
ICBtX3ZlcmlmaWVyU2xvdFZpc2l0b3ItPmFwcGVuZChjb25zZXJ2YXRpdmVSb290cyk7CiAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICBpZiAoT3B0aW9uczo6dXNlSklUKCkpIHsKICAgICAgICAg
ICAgICAgICAvLyBKSVRTdHViUm91dGluZXMgbXVzdCBiZSB2aXNpdGVkIGFmdGVyIHNjYW5uaW5n
IENvbnNlcnZhdGl2ZVJvb3RzIHNpbmNlIEpJVFN0dWJSb3V0aW5lcyBkZXBlbmQgb24gdGhlIGhv
b2sgZXhlY3V0ZWQgZHVyaW5nIGdhdGhlcmluZyBDb25zZXJ2YXRpdmVSb290cy4KLSAgICAgICAg
ICAgICAgICBTZXRSb290TWFya1JlYXNvblNjb3BlIHJvb3RTY29wZShzbG90VmlzaXRvciwgU2xv
dFZpc2l0b3I6OlJvb3RNYXJrUmVhc29uOjpKSVRTdHViUm91dGluZXMpOwotICAgICAgICAgICAg
ICAgIG1faml0U3R1YlJvdXRpbmVzLT50cmFjZU1hcmtlZFN0dWJSb3V0aW5lcyhzbG90VmlzaXRv
cik7CisgICAgICAgICAgICAgICAgU2V0Um9vdE1hcmtSZWFzb25TY29wZSByb290U2NvcGUodmlz
aXRvciwgQWJzdHJhY3RTbG90VmlzaXRvcjo6Um9vdE1hcmtSZWFzb246OkpJVFN0dWJSb3V0aW5l
cyk7CisgICAgICAgICAgICAgICAgbV9qaXRTdHViUm91dGluZXMtPnRyYWNlTWFya2VkU3R1YlJv
dXRpbmVzKHZpc2l0b3IpOworICAgICAgICAgICAgICAgIGlmIChVTkxJS0VMWShtX3ZlcmlmaWVy
U2xvdFZpc2l0b3IpKQorICAgICAgICAgICAgICAgICAgICBtX2ppdFN0dWJSb3V0aW5lcy0+dHJh
Y2VNYXJrZWRTdHViUm91dGluZXMoKm1fdmVyaWZpZXJTbG90VmlzaXRvcik7CiAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGxhc3RWZXJzaW9uID0gbV9waGFzZVZlcnNp
b247CkBAIC0yNzMzLDkyICsyNzQ3LDkyIEBAIHZvaWQgSGVhcDo6YWRkQ29yZUNvbnN0cmFpbnRz
KCkKICAgICAKICAgICBtX2NvbnN0cmFpbnRTZXQtPmFkZCgKICAgICAgICAgIk1zciIsICJNaXNj
IFNtYWxsIFJvb3RzIiwKLSAgICAgICAgW3RoaXNdIChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3Ip
IHsKKyAgICAgICAgW3RoaXNdIChBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKSB7CiAKICNp
ZiBKU0NfT0JKQ19BUElfRU5BQkxFRAotICAgICAgICAgICAgc2NhbkV4dGVybmFsUmVtZW1iZXJl
ZFNldChtX3ZtLCBzbG90VmlzaXRvcik7CisgICAgICAgICAgICBzY2FuRXh0ZXJuYWxSZW1lbWJl
cmVkU2V0KG1fdm0sIHZpc2l0b3IpOwogI2VuZGlmCiAgICAgICAgICAgICBpZiAobV92bS5zbWFs
bFN0cmluZ3MubmVlZHNUb0JlVmlzaXRlZCgqbV9jb2xsZWN0aW9uU2NvcGUpKSB7Ci0gICAgICAg
ICAgICAgICAgU2V0Um9vdE1hcmtSZWFzb25TY29wZSByb290U2NvcGUoc2xvdFZpc2l0b3IsIFNs
b3RWaXNpdG9yOjpSb290TWFya1JlYXNvbjo6U3Ryb25nUmVmZXJlbmNlcyk7Ci0gICAgICAgICAg
ICAgICAgbV92bS5zbWFsbFN0cmluZ3MudmlzaXRTdHJvbmdSZWZlcmVuY2VzKHNsb3RWaXNpdG9y
KTsKKyAgICAgICAgICAgICAgICBTZXRSb290TWFya1JlYXNvblNjb3BlIHJvb3RTY29wZSh2aXNp
dG9yLCBBYnN0cmFjdFNsb3RWaXNpdG9yOjpSb290TWFya1JlYXNvbjo6U3Ryb25nUmVmZXJlbmNl
cyk7CisgICAgICAgICAgICAgICAgbV92bS5zbWFsbFN0cmluZ3MudmlzaXRTdHJvbmdSZWZlcmVu
Y2VzKHZpc2l0b3IpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgU2V0Um9vdE1hcmtSZWFzb25TY29wZSByb290U2NvcGUoc2xvdFZp
c2l0b3IsIFNsb3RWaXNpdG9yOjpSb290TWFya1JlYXNvbjo6UHJvdGVjdGVkVmFsdWVzKTsKKyAg
ICAgICAgICAgICAgICBTZXRSb290TWFya1JlYXNvblNjb3BlIHJvb3RTY29wZSh2aXNpdG9yLCBB
YnN0cmFjdFNsb3RWaXNpdG9yOjpSb290TWFya1JlYXNvbjo6UHJvdGVjdGVkVmFsdWVzKTsKICAg
ICAgICAgICAgICAgICBmb3IgKGF1dG8mIHBhaXIgOiBtX3Byb3RlY3RlZFZhbHVlcykKLSAgICAg
ICAgICAgICAgICAgICAgc2xvdFZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQocGFpci5rZXkpOwor
ICAgICAgICAgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKHBhaXIua2V5KTsK
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKG1fbWFya0xpc3RT
ZXQgJiYgbV9tYXJrTGlzdFNldC0+c2l6ZSgpKSB7Ci0gICAgICAgICAgICAgICAgU2V0Um9vdE1h
cmtSZWFzb25TY29wZSByb290U2NvcGUoc2xvdFZpc2l0b3IsIFNsb3RWaXNpdG9yOjpSb290TWFy
a1JlYXNvbjo6Q29uc2VydmF0aXZlU2Nhbik7Ci0gICAgICAgICAgICAgICAgTWFya2VkQXJndW1l
bnRCdWZmZXI6Om1hcmtMaXN0cyhzbG90VmlzaXRvciwgKm1fbWFya0xpc3RTZXQpOworICAgICAg
ICAgICAgICAgIFNldFJvb3RNYXJrUmVhc29uU2NvcGUgcm9vdFNjb3BlKHZpc2l0b3IsIEFic3Ry
YWN0U2xvdFZpc2l0b3I6OlJvb3RNYXJrUmVhc29uOjpDb25zZXJ2YXRpdmVTY2FuKTsKKyAgICAg
ICAgICAgICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlcjo6bWFya0xpc3RzKHZpc2l0b3IsICptX21h
cmtMaXN0U2V0KTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgbV9tYXJrZWRKU1ZhbHVl
UmVmQXJyYXlzLmZvckVhY2goWyZdIChNYXJrZWRKU1ZhbHVlUmVmQXJyYXkqIGFycmF5KSB7Ci0g
ICAgICAgICAgICAgICAgYXJyYXktPnZpc2l0QWdncmVnYXRlKHNsb3RWaXNpdG9yKTsKKyAgICAg
ICAgICAgICAgICBhcnJheS0+dmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7CiAgICAgICAgICAgICB9
KTsKIAogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFNldFJvb3RNYXJrUmVhc29uU2Nv
cGUgcm9vdFNjb3BlKHNsb3RWaXNpdG9yLCBTbG90VmlzaXRvcjo6Um9vdE1hcmtSZWFzb246OlZN
RXhjZXB0aW9ucyk7Ci0gICAgICAgICAgICAgICAgc2xvdFZpc2l0b3IuYXBwZW5kVW5iYXJyaWVy
ZWQobV92bS5leGNlcHRpb24oKSk7Ci0gICAgICAgICAgICAgICAgc2xvdFZpc2l0b3IuYXBwZW5k
VW5iYXJyaWVyZWQobV92bS5sYXN0RXhjZXB0aW9uKCkpOworICAgICAgICAgICAgICAgIFNldFJv
b3RNYXJrUmVhc29uU2NvcGUgcm9vdFNjb3BlKHZpc2l0b3IsIEFic3RyYWN0U2xvdFZpc2l0b3I6
OlJvb3RNYXJrUmVhc29uOjpWTUV4Y2VwdGlvbnMpOworICAgICAgICAgICAgICAgIHZpc2l0b3Iu
YXBwZW5kVW5iYXJyaWVyZWQobV92bS5leGNlcHRpb24oKSk7CisgICAgICAgICAgICAgICAgdmlz
aXRvci5hcHBlbmRVbmJhcnJpZXJlZChtX3ZtLmxhc3RFeGNlcHRpb24oKSk7CiAgICAgICAgICAg
ICB9CiAgICAgICAgIH0sCiAgICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5OjpHcmV5ZWRCeUV4
ZWN1dGlvbik7CiAgICAgCiAgICAgbV9jb25zdHJhaW50U2V0LT5hZGQoCiAgICAgICAgICJTaCIs
ICJTdHJvbmcgSGFuZGxlcyIsCi0gICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNp
dG9yKSB7Ci0gICAgICAgICAgICBTZXRSb290TWFya1JlYXNvblNjb3BlIHJvb3RTY29wZShzbG90
VmlzaXRvciwgU2xvdFZpc2l0b3I6OlJvb3RNYXJrUmVhc29uOjpTdHJvbmdIYW5kbGVzKTsKLSAg
ICAgICAgICAgIG1faGFuZGxlU2V0LnZpc2l0U3Ryb25nSGFuZGxlcyhzbG90VmlzaXRvcik7Cisg
ICAgICAgIFt0aGlzXSAoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikgeworICAgICAgICAg
ICAgU2V0Um9vdE1hcmtSZWFzb25TY29wZSByb290U2NvcGUodmlzaXRvciwgQWJzdHJhY3RTbG90
VmlzaXRvcjo6Um9vdE1hcmtSZWFzb246OlN0cm9uZ0hhbmRsZXMpOworICAgICAgICAgICAgbV9o
YW5kbGVTZXQudmlzaXRTdHJvbmdIYW5kbGVzKHZpc2l0b3IpOwogICAgICAgICB9LAogICAgICAg
ICBDb25zdHJhaW50Vm9sYXRpbGl0eTo6R3JleWVkQnlFeGVjdXRpb24pOwogICAgIAogICAgIG1f
Y29uc3RyYWludFNldC0+YWRkKAogICAgICAgICAiRCIsICJEZWJ1Z2dlciIsCi0gICAgICAgIFt0
aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yKSB7Ci0gICAgICAgICAgICBTZXRSb290TWFy
a1JlYXNvblNjb3BlIHJvb3RTY29wZShzbG90VmlzaXRvciwgU2xvdFZpc2l0b3I6OlJvb3RNYXJr
UmVhc29uOjpEZWJ1Z2dlcik7CisgICAgICAgIFt0aGlzXSAoQWJzdHJhY3RTbG90VmlzaXRvciYg
dmlzaXRvcikgeworICAgICAgICAgICAgU2V0Um9vdE1hcmtSZWFzb25TY29wZSByb290U2NvcGUo
dmlzaXRvciwgQWJzdHJhY3RTbG90VmlzaXRvcjo6Um9vdE1hcmtSZWFzb246OkRlYnVnZ2VyKTsK
IAogI2lmIEVOQUJMRShTQU1QTElOR19QUk9GSUxFUikKICAgICAgICAgICAgIGlmIChTYW1wbGlu
Z1Byb2ZpbGVyKiBzYW1wbGluZ1Byb2ZpbGVyID0gbV92bS5zYW1wbGluZ1Byb2ZpbGVyKCkpIHsK
ICAgICAgICAgICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKHNhbXBsaW5nUHJvZmlsZXIt
PmdldExvY2soKSk7CiAgICAgICAgICAgICAgICAgc2FtcGxpbmdQcm9maWxlci0+cHJvY2Vzc1Vu
dmVyaWZpZWRTdGFja1RyYWNlcyhsb2NrZXIpOwotICAgICAgICAgICAgICAgIHNhbXBsaW5nUHJv
ZmlsZXItPnZpc2l0KHNsb3RWaXNpdG9yKTsKKyAgICAgICAgICAgICAgICBzYW1wbGluZ1Byb2Zp
bGVyLT52aXNpdCh2aXNpdG9yKTsKICAgICAgICAgICAgICAgICBpZiAoT3B0aW9uczo6bG9nR0Mo
KSA9PSBHQ0xvZ2dpbmc6OlZlcmJvc2UpCi0gICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIlNh
bXBsaW5nIFByb2ZpbGVyIGRhdGE6XG4iLCBzbG90VmlzaXRvcik7CisgICAgICAgICAgICAgICAg
ICAgIGRhdGFMb2coIlNhbXBsaW5nIFByb2ZpbGVyIGRhdGE6XG4iLCB2aXNpdG9yKTsKICAgICAg
ICAgICAgIH0KICNlbmRpZiAvLyBFTkFCTEUoU0FNUExJTkdfUFJPRklMRVIpCiAKICAgICAgICAg
ICAgIGlmIChtX3ZtLnR5cGVQcm9maWxlcigpKQotICAgICAgICAgICAgICAgIG1fdm0udHlwZVBy
b2ZpbGVyTG9nKCktPnZpc2l0KHNsb3RWaXNpdG9yKTsKKyAgICAgICAgICAgICAgICBtX3ZtLnR5
cGVQcm9maWxlckxvZygpLT52aXNpdCh2aXNpdG9yKTsKICAgICAgICAgICAgIAogICAgICAgICAg
ICAgaWYgKGF1dG8qIHNoYWRvd0NoaWNrZW4gPSBtX3ZtLnNoYWRvd0NoaWNrZW4oKSkKLSAgICAg
ICAgICAgICAgICBzaGFkb3dDaGlja2VuLT52aXNpdENoaWxkcmVuKHNsb3RWaXNpdG9yKTsKKyAg
ICAgICAgICAgICAgICBzaGFkb3dDaGlja2VuLT52aXNpdENoaWxkcmVuKHZpc2l0b3IpOwogICAg
ICAgICB9LAogICAgICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eTo6R3JleWVkQnlFeGVjdXRpb24p
OwogICAgIAogICAgIG1fY29uc3RyYWludFNldC0+YWRkKAogICAgICAgICAiV3MiLCAiV2VhayBT
ZXRzIiwKLSAgICAgICAgW3RoaXNdIChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IpIHsKLSAgICAg
ICAgICAgIFNldFJvb3RNYXJrUmVhc29uU2NvcGUgcm9vdFNjb3BlKHNsb3RWaXNpdG9yLCBTbG90
VmlzaXRvcjo6Um9vdE1hcmtSZWFzb246OldlYWtTZXRzKTsKLSAgICAgICAgICAgIG1fb2JqZWN0
U3BhY2UudmlzaXRXZWFrU2V0cyhzbG90VmlzaXRvcik7CisgICAgICAgIFt0aGlzXSAoQWJzdHJh
Y3RTbG90VmlzaXRvciYgdmlzaXRvcikgeworICAgICAgICAgICAgU2V0Um9vdE1hcmtSZWFzb25T
Y29wZSByb290U2NvcGUodmlzaXRvciwgQWJzdHJhY3RTbG90VmlzaXRvcjo6Um9vdE1hcmtSZWFz
b246OldlYWtTZXRzKTsKKyAgICAgICAgICAgIG1fb2JqZWN0U3BhY2UudmlzaXRXZWFrU2V0cyh2
aXNpdG9yKTsKICAgICAgICAgfSwKICAgICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHk6OkdyZXll
ZEJ5TWFya2luZyk7CiAgICAgCiAgICAgbV9jb25zdHJhaW50U2V0LT5hZGQoCiAgICAgICAgICJP
IiwgIk91dHB1dCIsCi0gICAgICAgIFtdIChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IpIHsKLSAg
ICAgICAgICAgIFZNJiB2bSA9IHNsb3RWaXNpdG9yLnZtKCk7CisgICAgICAgIFtdIChBYnN0cmFj
dFNsb3RWaXNpdG9yJiB2aXNpdG9yKSB7CisgICAgICAgICAgICBWTSYgdm0gPSB2aXNpdG9yLnZt
KCk7CiAKLSAgICAgICAgICAgIGF1dG8gY2FsbE91dHB1dENvbnN0cmFpbnQgPSBbXSAoU2xvdFZp
c2l0b3ImIHNsb3RWaXNpdG9yLCBIZWFwQ2VsbCogaGVhcENlbGwsIEhlYXBDZWxsOjpLaW5kKSB7
Ci0gICAgICAgICAgICAgICAgU2V0Um9vdE1hcmtSZWFzb25TY29wZSByb290U2NvcGUoc2xvdFZp
c2l0b3IsIFNsb3RWaXNpdG9yOjpSb290TWFya1JlYXNvbjo6T3V0cHV0KTsKLSAgICAgICAgICAg
ICAgICBWTSYgdm0gPSBzbG90VmlzaXRvci52bSgpOworICAgICAgICAgICAgYXV0byBjYWxsT3V0
cHV0Q29uc3RyYWludCA9IFtdIChBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBIZWFwQ2Vs
bCogaGVhcENlbGwsIEhlYXBDZWxsOjpLaW5kKSB7CisgICAgICAgICAgICAgICAgU2V0Um9vdE1h
cmtSZWFzb25TY29wZSByb290U2NvcGUodmlzaXRvciwgQWJzdHJhY3RTbG90VmlzaXRvcjo6Um9v
dE1hcmtSZWFzb246Ok91dHB1dCk7CisgICAgICAgICAgICAgICAgVk0mIHZtID0gdmlzaXRvci52
bSgpOwogICAgICAgICAgICAgICAgIEpTQ2VsbCogY2VsbCA9IHN0YXRpY19jYXN0PEpTQ2VsbCo+
KGhlYXBDZWxsKTsKLSAgICAgICAgICAgICAgICBjZWxsLT5tZXRob2RUYWJsZSh2bSktPnZpc2l0
T3V0cHV0Q29uc3RyYWludHMoY2VsbCwgc2xvdFZpc2l0b3IpOworICAgICAgICAgICAgICAgIGNl
bGwtPm1ldGhvZFRhYmxlKHZtKS0+dmlzaXRPdXRwdXRDb25zdHJhaW50cyhjZWxsLCB2aXNpdG9y
KTsKICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGF1dG8gYWRkID0g
WyZdIChhdXRvJiBzZXQpIHsKLSAgICAgICAgICAgICAgICBzbG90VmlzaXRvci5hZGRQYXJhbGxl
bENvbnN0cmFpbnRUYXNrKHNldC5mb3JFYWNoTWFya2VkQ2VsbEluUGFyYWxsZWwoY2FsbE91dHB1
dENvbnN0cmFpbnQpKTsKKyAgICAgICAgICAgICAgICB2aXNpdG9yLmFkZFBhcmFsbGVsQ29uc3Ry
YWludFRhc2soc2V0LmZvckVhY2hNYXJrZWRDZWxsSW5QYXJhbGxlbChjYWxsT3V0cHV0Q29uc3Ry
YWludCkpOwogICAgICAgICAgICAgfTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgYWRkKHZt
LmV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2VzV2l0aENvbnN0cmFpbnRzKTsKQEAgLTI4MzIsMjIg
KzI4NDYsMjIgQEAgdm9pZCBIZWFwOjphZGRDb3JlQ29uc3RyYWludHMoKQogICAgIGlmIChPcHRp
b25zOjp1c2VKSVQoKSkgewogICAgICAgICBtX2NvbnN0cmFpbnRTZXQtPmFkZCgKICAgICAgICAg
ICAgICJEdyIsICJERkcgV29ya2xpc3RzIiwKLSAgICAgICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0
b3ImIHNsb3RWaXNpdG9yKSB7Ci0gICAgICAgICAgICAgICAgU2V0Um9vdE1hcmtSZWFzb25TY29w
ZSByb290U2NvcGUoc2xvdFZpc2l0b3IsIFNsb3RWaXNpdG9yOjpSb290TWFya1JlYXNvbjo6REZH
V29ya0xpc3RzKTsKKyAgICAgICAgICAgIFt0aGlzXSAoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlz
aXRvcikgeworICAgICAgICAgICAgICAgIFNldFJvb3RNYXJrUmVhc29uU2NvcGUgcm9vdFNjb3Bl
KHZpc2l0b3IsIEFic3RyYWN0U2xvdFZpc2l0b3I6OlJvb3RNYXJrUmVhc29uOjpERkdXb3JrTGlz
dHMpOwogCiAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gREZHOjpudW1iZXJPZldv
cmtsaXN0cygpOyBpLS07KQotICAgICAgICAgICAgICAgICAgICBERkc6OmV4aXN0aW5nV29ya2xp
c3RGb3JJbmRleChpKS52aXNpdFdlYWtSZWZlcmVuY2VzKHNsb3RWaXNpdG9yKTsKKyAgICAgICAg
ICAgICAgICAgICAgREZHOjpleGlzdGluZ1dvcmtsaXN0Rm9ySW5kZXgoaSkudmlzaXRXZWFrUmVm
ZXJlbmNlcyh2aXNpdG9yKTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAvLyBG
SVhNRTogVGhpcyBpcyBhbG1vc3QgY2VydGFpbmx5IHVubmVjZXNzYXJ5LgogICAgICAgICAgICAg
ICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjY4MjkKLSAg
ICAgICAgICAgICAgICBERkc6Oml0ZXJhdGVDb2RlQmxvY2tzRm9yR0MoCisgICAgICAgICAgICAg
ICAgREZHOjppdGVyYXRlQ29kZUJsb2Nrc0ZvckdDKHZpc2l0b3IsCiAgICAgICAgICAgICAgICAg
ICAgIG1fdm0sCiAgICAgICAgICAgICAgICAgICAgIFsmXSAoQ29kZUJsb2NrKiBjb2RlQmxvY2sp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNsb3RWaXNpdG9yLmFwcGVuZFVuYmFycmllcmVk
KGNvZGVCbG9jayk7CisgICAgICAgICAgICAgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFy
cmllcmVkKGNvZGVCbG9jayk7CiAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAg
ICAgIAogICAgICAgICAgICAgICAgIGlmIChPcHRpb25zOjpsb2dHQygpID09IEdDTG9nZ2luZzo6
VmVyYm9zZSkKLSAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiREZHIFdvcmtsaXN0czpcbiIs
IHNsb3RWaXNpdG9yKTsKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiREZHIFdvcmtsaXN0
czpcbiIsIHZpc2l0b3IpOwogICAgICAgICAgICAgfSwKICAgICAgICAgICAgIENvbnN0cmFpbnRW
b2xhdGlsaXR5OjpHcmV5ZWRCeU1hcmtpbmcpOwogICAgIH0KQEAgLTI4NTUsMTQgKzI4NjksMTQg
QEAgdm9pZCBIZWFwOjphZGRDb3JlQ29uc3RyYWludHMoKQogICAgIAogICAgIG1fY29uc3RyYWlu
dFNldC0+YWRkKAogICAgICAgICAiQ2IiLCAiQ29kZUJsb2NrcyIsCi0gICAgICAgIFt0aGlzXSAo
U2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yKSB7Ci0gICAgICAgICAgICBTZXRSb290TWFya1JlYXNv
blNjb3BlIHJvb3RTY29wZShzbG90VmlzaXRvciwgU2xvdFZpc2l0b3I6OlJvb3RNYXJrUmVhc29u
OjpDb2RlQmxvY2tzKTsKLSAgICAgICAgICAgIGl0ZXJhdGVFeGVjdXRpbmdBbmRDb21waWxpbmdD
b2RlQmxvY2tzV2l0aG91dEhvbGRpbmdMb2NrcygKKyAgICAgICAgW3RoaXNdIChBYnN0cmFjdFNs
b3RWaXNpdG9yJiB2aXNpdG9yKSB7CisgICAgICAgICAgICBTZXRSb290TWFya1JlYXNvblNjb3Bl
IHJvb3RTY29wZSh2aXNpdG9yLCBBYnN0cmFjdFNsb3RWaXNpdG9yOjpSb290TWFya1JlYXNvbjo6
Q29kZUJsb2Nrcyk7CisgICAgICAgICAgICBpdGVyYXRlRXhlY3V0aW5nQW5kQ29tcGlsaW5nQ29k
ZUJsb2Nrc1dpdGhvdXRIb2xkaW5nTG9ja3ModmlzaXRvciwKICAgICAgICAgICAgICAgICBbJl0g
KENvZGVCbG9jayogY29kZUJsb2NrKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIFZpc2l0IHRo
ZSBDb2RlQmxvY2sgYXMgYSBjb25zdHJhaW50IG9ubHkgaWYgaXQncyBibGFjay4KLSAgICAgICAg
ICAgICAgICAgICAgaWYgKGlzTWFya2VkKGNvZGVCbG9jaykKKyAgICAgICAgICAgICAgICAgICAg
aWYgKHZpc2l0b3IuaXNNYXJrZWQoY29kZUJsb2NrKQogICAgICAgICAgICAgICAgICAgICAgICAg
JiYgY29kZUJsb2NrLT5jZWxsU3RhdGUoKSA9PSBDZWxsU3RhdGU6OlBvc3NpYmx5QmxhY2spCi0g
ICAgICAgICAgICAgICAgICAgICAgICBzbG90VmlzaXRvci52aXNpdEFzQ29uc3RyYWludChjb2Rl
QmxvY2spOworICAgICAgICAgICAgICAgICAgICAgICAgdmlzaXRvci52aXNpdEFzQ29uc3RyYWlu
dChjb2RlQmxvY2spOwogICAgICAgICAgICAgICAgIH0pOwogICAgICAgICB9LAogICAgICAgICBD
b25zdHJhaW50Vm9sYXRpbGl0eTo6U2VsZG9tR3JleWVkKTsKQEAgLTMwMjMsNCArMzAzNywzMyBA
QCB2b2lkIEhlYXA6OnJ1blRhc2tJblBhcmFsbGVsKFJlZlB0cjxTaGFyCiAgICAgfQogfQogCit2
b2lkIEhlYXA6OnZlcmlmeUdDKCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChtX3ZlcmlmaWVyU2xv
dFZpc2l0b3IpOworICAgIFJFTEVBU0VfQVNTRVJUKCFtX2lzTWFya2luZ0ZvckdDVmVyaWZpZXIp
OworICAgIG1faXNNYXJraW5nRm9yR0NWZXJpZmllciA9IHRydWU7CisKKyAgICBWZXJpZmllclNs
b3RWaXNpdG9yJiB2aXNpdG9yID0gKm1fdmVyaWZpZXJTbG90VmlzaXRvcjsKKworICAgIGRvIHsK
KyAgICAgICAgdmlzaXRvci5kcmFpbigpOworICAgICAgICBtX2NvbnN0cmFpbnRTZXQtPmV4ZWN1
dGVBbGxTeW5jaHJvbm91c2x5KHZpc2l0b3IpOworICAgICAgICB2aXNpdG9yLmV4ZWN1dGVDb25z
dHJhaW50VGFza3MoKTsKKyAgICB9IHdoaWxlICghdmlzaXRvci5pc0VtcHR5KCkpOworCisgICAg
bV9pc01hcmtpbmdGb3JHQ1ZlcmlmaWVyID0gZmFsc2U7CisKKyAgICB2aXNpdG9yLmZvckVhY2hM
aXZlQ2VsbChbJl0gKEhlYXBDZWxsKiBjZWxsKSB7CisgICAgICAgIGlmIChIZWFwOjppc01hcmtl
ZChjZWxsKSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBkYXRhTG9nTG4oIlxuIiAi
R0MgVmVyaWZpZXI6IEVSUk9SIGNlbGwgIiwgUmF3UG9pbnRlcihjZWxsKSwgIiB3YXMgbm90IG1h
cmtlZCIpOworICAgICAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6dmVyYm9zZVZlcmlmeUdDKCkp
KQorICAgICAgICAgICAgdmlzaXRvci5kdW1wTWFya2VyRGF0YShjZWxsKTsKKyAgICAgICAgUkVM
RUFTRV9BU1NFUlQodGhpcy0+aXNNYXJrZWQoY2VsbCkpOworICAgIH0pOworCisgICAgbV92ZXJp
ZmllclNsb3RWaXNpdG9yID0gbnVsbHB0cjsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCShyZXZpc2lvbiAyNzI3NjkpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSw3IEBA
CiAvKgogICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAwIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtk
ZS5vcmcpCiAgKiAgQ29weXJpZ2h0IChDKSAyMDAxIFBldGVyIEtlbGx5IChwbWtAcG9zdC5jb20p
Ci0gKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogIENvcHlyaWdodCAoQykgMjAwMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKQEAgLTg2LDYgKzg2LDcgQEAgY2xhc3MgU3Bh
Y2VUaW1lTXV0YXRvclNjaGVkdWxlcjsKIGNsYXNzIFN0b3BJZk5lY2Vzc2FyeVRpbWVyOwogY2xh
c3MgU3dlZXBpbmdTY29wZTsKIGNsYXNzIFZNOworY2xhc3MgVmVyaWZpZXJTbG90VmlzaXRvcjsK
IGNsYXNzIFdlYWtHQ01hcEJhc2U7CiBzdHJ1Y3QgQ3VycmVudFRocmVhZFN0YXRlOwogCkBAIC0x
ODQsOCArMTg1LDYgQEAgcHVibGljOgogICAgIAogICAgIGJvb2wgaXNTaHV0dGluZ0Rvd24oKSBj
b25zdCB7IHJldHVybiBtX2lzU2h1dHRpbmdEb3duOyB9CiAKLSAgICBKU19FWFBPUlRfUFJJVkFU
RSBib29sIGlzQW5hbHl6aW5nSGVhcCgpIGNvbnN0OwotCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUg
dm9pZCBzd2VlcFN5bmNocm9ub3VzbHkoKTsKIAogICAgIGJvb2wgc2hvdWxkQ29sbGVjdEhldXJp
c3RpYygpOwpAQCAtMzg1LDggKzM4NCw2IEBAIHB1YmxpYzoKICAgICAKICAgICBKU19FWFBPUlRf
UFJJVkFURSB2b2lkIGFkZE1hcmtpbmdDb25zdHJhaW50KHN0ZDo6dW5pcXVlX3B0cjxNYXJraW5n
Q29uc3RyYWludD4pOwogICAgIAotICAgIHNpemVfdCBudW1PcGFxdWVSb290cygpIGNvbnN0IHsg
cmV0dXJuIG1fb3BhcXVlUm9vdHMuc2l6ZSgpOyB9Ci0KICAgICBIZWFwVmVyaWZpZXIqIHZlcmlm
aWVyKCkgY29uc3QgeyByZXR1cm4gbV92ZXJpZmllci5nZXQoKTsgfQogICAgIAogICAgIHZvaWQg
YWRkSGVhcEZpbmFsaXplckNhbGxiYWNrKGNvbnN0IEhlYXBGaW5hbGl6ZXJDYWxsYmFjayYpOwpA
QCAtNTc2LDEwICs1NzMsMTAgQEAgcHJpdmF0ZToKICAgICBib29sIG92ZXJDcml0aWNhbE1lbW9y
eVRocmVzaG9sZChNZW1vcnlUaHJlc2hvbGRDYWxsVHlwZSBtZW1vcnlUaHJlc2hvbGRDYWxsVHlw
ZSA9IE1lbW9yeVRocmVzaG9sZENhbGxUeXBlOjpDYWNoZWQpOwogICAgIAogICAgIHRlbXBsYXRl
PHR5cGVuYW1lIEZ1bmM+Ci0gICAgdm9pZCBpdGVyYXRlRXhlY3V0aW5nQW5kQ29tcGlsaW5nQ29k
ZUJsb2Nrcyhjb25zdCBGdW5jJik7CisgICAgdm9pZCBpdGVyYXRlRXhlY3V0aW5nQW5kQ29tcGls
aW5nQ29kZUJsb2NrcyhBYnN0cmFjdFNsb3RWaXNpdG9yJiwgY29uc3QgRnVuYyYpOwogICAgIAog
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+Ci0gICAgdm9pZCBpdGVyYXRlRXhlY3V0aW5nQW5k
Q29tcGlsaW5nQ29kZUJsb2Nrc1dpdGhvdXRIb2xkaW5nTG9ja3MoY29uc3QgRnVuYyYpOworICAg
IHZvaWQgaXRlcmF0ZUV4ZWN1dGluZ0FuZENvbXBpbGluZ0NvZGVCbG9ja3NXaXRob3V0SG9sZGlu
Z0xvY2tzKEFic3RyYWN0U2xvdFZpc2l0b3ImLCBjb25zdCBGdW5jJik7CiAgICAgCiAgICAgdm9p
ZCBhc3NlcnRNYXJrU3RhY2tzRW1wdHkoKTsKIApAQCAtNTkwLDYgKzU4Nyw4IEBAIHByaXZhdGU6
CiAgICAgc3RhdGljIGJvb2wgdXNlR2VuZXJhdGlvbmFsR0MoKTsKICAgICBzdGF0aWMgYm9vbCBz
aG91bGRTd2VlcFN5bmNocm9ub3VzbHkoKTsKICAgICAKKyAgICB2b2lkIHZlcmlmeUdDKCk7CisK
ICAgICBjb25zdCBIZWFwVHlwZSBtX2hlYXBUeXBlOwogICAgIE11dGF0b3JTdGF0ZSBtX211dGF0
b3JTdGF0ZSB7IE11dGF0b3JTdGF0ZTo6UnVubmluZyB9OwogICAgIGNvbnN0IHNpemVfdCBtX3Jh
bVNpemU7CkBAIC02MzYsNiArNjM1LDcgQEAgcHJpdmF0ZToKICAgICBzdGQ6OnVuaXF1ZV9wdHI8
TWFya1N0YWNrQXJyYXk+IG1fbXV0YXRvck1hcmtTdGFjazsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8
TWFya1N0YWNrQXJyYXk+IG1fcmFjZU1hcmtTdGFjazsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8TWFy
a2luZ0NvbnN0cmFpbnRTZXQ+IG1fY29uc3RyYWludFNldDsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8
VmVyaWZpZXJTbG90VmlzaXRvcj4gbV92ZXJpZmllclNsb3RWaXNpdG9yOwogCiAgICAgLy8gV2Ug
cG9vbCB0aGUgc2xvdCB2aXNpdG9ycyB1c2VkIGJ5IHBhcmFsbGVsIG1hcmtpbmcgdGhyZWFkcy4g
SXQncyB1c2VmdWwgdG8gYmUgYWJsZSB0bwogICAgIC8vIGVudW1lcmF0ZSBvdmVyIHRoZW0sIGFu
ZCBpdCdzIHVzZWZ1bCB0byBoYXZlIHRoZW0gY2FjaGUgc29tZSBzbWFsbCBhbW91bnQgb2YgbWVt
b3J5IGZyb20KQEAgLTY1NCw2ICs2NTQsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9pc1NhZmVU
b0NvbGxlY3QgeyBmYWxzZSB9OwogICAgIGJvb2wgbV9pc1NodXR0aW5nRG93biB7IGZhbHNlIH07
CiAgICAgYm9vbCBtX211dGF0b3JTaG91bGRCZUZlbmNlZCB7IE9wdGlvbnM6OmZvcmNlRmVuY2Vk
QmFycmllcigpIH07CisgICAgYm9vbCBtX2lzTWFya2luZ0ZvckdDVmVyaWZpZXIgeyBmYWxzZSB9
OwogCiAgICAgdW5zaWduZWQgbV9iYXJyaWVyVGhyZXNob2xkIHsgT3B0aW9uczo6Zm9yY2VGZW5j
ZWRCYXJyaWVyKCkgPyB0YXV0b2xvZ2ljYWxUaHJlc2hvbGQgOiBibGFja1RocmVzaG9sZCB9Owog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwSW5saW5lcy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBJbmxpbmVzLmgJKHJldmlzaW9u
IDI3Mjc2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBJbmxpbmVzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0LTIw
MjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0
LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC02OSw2ICs2OSw3IEBAIGlubGluZSBib29sIEhlYXA6OndvcmxkSXNT
dG9wcGVkKCkgY29uc3QKIAogQUxXQVlTX0lOTElORSBib29sIEhlYXA6OmlzTWFya2VkKGNvbnN0
IHZvaWQqIHJhd0NlbGwpCiB7CisgICAgQVNTRVJUKCFtX2lzTWFya2luZ0ZvckdDVmVyaWZpZXIp
OwogICAgIEhlYXBDZWxsKiBjZWxsID0gYml0d2lzZV9jYXN0PEhlYXBDZWxsKj4ocmF3Q2VsbCk7
CiAgICAgaWYgKGNlbGwtPmlzUHJlY2lzZUFsbG9jYXRpb24oKSkKICAgICAgICAgcmV0dXJuIGNl
bGwtPnByZWNpc2VBbGxvY2F0aW9uKCkuaXNNYXJrZWQoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0hlYXBQcm9maWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvSGVhcFByb2ZpbGVyLmNwcAkocmV2aXNpb24gMjcyNzY5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcFByb2ZpbGVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02
MCw2ICs2MCw3IEBAIHZvaWQgSGVhcFByb2ZpbGVyOjpzZXRBY3RpdmVIZWFwQW5hbHl6ZXIKIHsK
ICAgICBBU1NFUlQoISFtX2FjdGl2ZUFuYWx5emVyICE9ICEhYW5hbHl6ZXIpOwogICAgIG1fYWN0
aXZlQW5hbHl6ZXIgPSBhbmFseXplcjsKKyAgICBtX3ZtLnNldEFjdGl2ZUhlYXBBbmFseXplcihh
bmFseXplcik7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvSXNvQ2VsbFNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0lzb0NlbGxTZXQuaAkocmV2aXNpb24gMjcyNzY5KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvSXNvQ2VsbFNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM0LDYgKzM0LDcgQEAK
IAogbmFtZXNwYWNlIEpTQyB7CiAKK2NsYXNzIEFic3RyYWN0U2xvdFZpc2l0b3I7CiBjbGFzcyBI
ZWFwQ2VsbDsKIGNsYXNzIElzb1N1YnNwYWNlOwogCkBAIC01OSw3ICs2MCw3IEBAIHB1YmxpYzoK
ICAgICB2b2lkIGZvckVhY2hNYXJrZWRDZWxsKGNvbnN0IEZ1bmMmKTsKIAogICAgIHRlbXBsYXRl
PHR5cGVuYW1lIEZ1bmM+Ci0gICAgUmVmPFNoYXJlZFRhc2s8dm9pZChTbG90VmlzaXRvciYpPj4g
Zm9yRWFjaE1hcmtlZENlbGxJblBhcmFsbGVsKGNvbnN0IEZ1bmMmKTsKKyAgICBSZWY8U2hhcmVk
VGFzazx2b2lkKEFic3RyYWN0U2xvdFZpc2l0b3ImKT4+IGZvckVhY2hNYXJrZWRDZWxsSW5QYXJh
bGxlbChjb25zdCBGdW5jJik7CiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KICAg
ICB2b2lkIGZvckVhY2hMaXZlQ2VsbChjb25zdCBGdW5jJik7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9Jc29DZWxsU2V0SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0lzb0NlbGxTZXRJbmxpbmVzLmgJKHJldmlzaW9uIDI3Mjc2OSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0lzb0NlbGxTZXRJbmxpbmVzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtOTIsOSArOTIsOSBAQCB2b2lkIElzb0NlbGxTZXQ6OmZvckVhY2hNYXJrZWRDZWxs
KGNvbnN0CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+Ci1SZWY8U2hhcmVkVGFzazx2b2lk
KFNsb3RWaXNpdG9yJik+PiBJc29DZWxsU2V0Ojpmb3JFYWNoTWFya2VkQ2VsbEluUGFyYWxsZWwo
Y29uc3QgRnVuYyYgZnVuYykKK1JlZjxTaGFyZWRUYXNrPHZvaWQoQWJzdHJhY3RTbG90VmlzaXRv
ciYpPj4gSXNvQ2VsbFNldDo6Zm9yRWFjaE1hcmtlZENlbGxJblBhcmFsbGVsKGNvbnN0IEZ1bmMm
IGZ1bmMpCiB7Ci0gICAgY2xhc3MgVGFzayBmaW5hbCA6IHB1YmxpYyBTaGFyZWRUYXNrPHZvaWQo
U2xvdFZpc2l0b3ImKT4geworICAgIGNsYXNzIFRhc2sgZmluYWwgOiBwdWJsaWMgU2hhcmVkVGFz
azx2b2lkKEFic3RyYWN0U2xvdFZpc2l0b3ImKT4gewogICAgIHB1YmxpYzoKICAgICAgICAgVGFz
ayhJc29DZWxsU2V0JiBzZXQsIGNvbnN0IEZ1bmMmIGZ1bmMpCiAgICAgICAgICAgICA6IG1fc2V0
KHNldCkKQEAgLTEwMyw3ICsxMDMsNyBAQCBSZWY8U2hhcmVkVGFzazx2b2lkKFNsb3RWaXNpdG9y
Jik+PiBJc29DCiAgICAgICAgIHsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgdm9pZCBy
dW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpIGZpbmFsCisgICAgICAgIHZvaWQgcnVuKEFic3RyYWN0
U2xvdFZpc2l0b3ImIHZpc2l0b3IpIGZpbmFsCiAgICAgICAgIHsKICAgICAgICAgICAgIHdoaWxl
IChNYXJrZWRCbG9jazo6SGFuZGxlKiBoYW5kbGUgPSBtX2Jsb2NrU291cmNlLT5ydW4oKSkgewog
ICAgICAgICAgICAgICAgIHVuc2lnbmVkIGJsb2NrSW5kZXggPSBoYW5kbGUtPmluZGV4KCk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9KSVRTdHViUm91dGluZVNldC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSklUU3R1YlJvdXRpbmVTZXQu
Y3BwCShyZXZpc2lvbiAyNzI3NjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9KSVRT
dHViUm91dGluZVNldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTI4LDcgKzEyOCw3IEBAIHZvaWQgSklU
U3R1YlJvdXRpbmVTZXQ6OmRlbGV0ZVVubWFya2VkSmUKICAgICBtX3JvdXRpbmVzLnNocmluayhk
c3RJbmRleCk7CiB9CiAKLXZvaWQgSklUU3R1YlJvdXRpbmVTZXQ6OnRyYWNlTWFya2VkU3R1YlJv
dXRpbmVzKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBKSVRTdHViUm91dGluZVNldDo6dHJh
Y2VNYXJrZWRTdHViUm91dGluZXMoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAg
ICBmb3IgKGF1dG8mIGVudHJ5IDogbV9yb3V0aW5lcykgewogICAgICAgICBHQ0F3YXJlSklUU3R1
YlJvdXRpbmUqIHJvdXRpbmUgPSBlbnRyeS5yb3V0aW5lOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvSklUU3R1YlJvdXRpbmVTZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9KSVRTdHViUm91dGluZVNldC5oCShyZXZpc2lvbiAyNzI3NjkpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9KSVRTdHViUm91dGluZVNldC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE4IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMzUsOCArMzUsOCBAQCB1c2luZyBXVEY6OlJhbmdlOwogCiBuYW1lc3BhY2Ug
SlNDIHsKIAorY2xhc3MgQWJzdHJhY3RTbG90VmlzaXRvcjsKIGNsYXNzIEdDQXdhcmVKSVRTdHVi
Um91dGluZTsKLWNsYXNzIFNsb3RWaXNpdG9yOwogCiAjaWYgRU5BQkxFKEpJVCkKIApAQCAtNjMs
OCArNjMsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBwcmVwYXJlRm9yQ29uc2VydmF0aXZlU2Nhbigp
OwogICAgIAogICAgIHZvaWQgZGVsZXRlVW5tYXJrZWRKZXR0aXNvbmVkU3R1YlJvdXRpbmVzKCk7
Ci0gICAgCi0gICAgdm9pZCB0cmFjZU1hcmtlZFN0dWJSb3V0aW5lcyhTbG90VmlzaXRvciYpOwor
CisgICAgdm9pZCB0cmFjZU1hcmtlZFN0dWJSb3V0aW5lcyhBYnN0cmFjdFNsb3RWaXNpdG9yJik7
CiAgICAgCiBwcml2YXRlOgogICAgIHZvaWQgbWFya1Nsb3codWludHB0cl90IGFkZHJlc3MpOwpA
QCAtOTIsNyArOTIsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBtYXJrKHZvaWQqKSB7IH0KICAgICB2
b2lkIHByZXBhcmVGb3JDb25zZXJ2YXRpdmVTY2FuKCkgeyB9CiAgICAgdm9pZCBkZWxldGVVbm1h
cmtlZEpldHRpc29uZWRTdHViUm91dGluZXMoKSB7IH0KLSAgICB2b2lkIHRyYWNlTWFya2VkU3R1
YlJvdXRpbmVzKFNsb3RWaXNpdG9yJikgeyB9CisgICAgdm9pZCB0cmFjZU1hcmtlZFN0dWJSb3V0
aW5lcyhBYnN0cmFjdFNsb3RWaXNpdG9yJikgeyB9CiB9OwogCiAjZW5kaWYgLy8gIUVOQUJMRShK
SVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3RhY2tNZXJnaW5nQ29u
c3RyYWludC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFy
a1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQuY3BwCShyZXZpc2lvbiAyNzI3NjkpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMjUsNyArMjUsNiBAQAogCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAi
TWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQuaCIKLQogI2luY2x1ZGUgIkdDU2VnbWVudGVkQXJy
YXlJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogCkBAIC00MSwxMiArNDAsMTIg
QEAgTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQ6On5NYXJrU3RhY2tNZQogewogfQogCi1kb3Vi
bGUgTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQ6OnF1aWNrV29ya0VzdGltYXRlKFNsb3RWaXNp
dG9yJikKK2RvdWJsZSBNYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludDo6cXVpY2tXb3JrRXN0aW1h
dGUoQWJzdHJhY3RTbG90VmlzaXRvciYpCiB7CiAgICAgcmV0dXJuIG1faGVhcC5tX211dGF0b3JN
YXJrU3RhY2stPnNpemUoKSArIG1faGVhcC5tX3JhY2VNYXJrU3RhY2stPnNpemUoKTsKIH0KIAot
dm9pZCBNYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludDo6cHJlcGFyZVRvRXhlY3V0ZUltcGwoY29u
c3QgQWJzdHJhY3RMb2NrZXImLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgTWFya1N0YWNr
TWVyZ2luZ0NvbnN0cmFpbnQ6OnByZXBhcmVUb0V4ZWN1dGVJbXBsKGNvbnN0IEFic3RyYWN0TG9j
a2VyJiwgQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICAvLyBMb2dnaW5nIHRo
ZSB3b3JrIGhlcmUgZW5zdXJlcyB0aGF0IHRoZSBjb25zdHJhaW50IHNvbHZlciBrbm93cyB0aGF0
IGl0IGRvZXNuJ3QgbmVlZCB0byBwcm9kdWNlCiAgICAgLy8gYW55bW9yZSB3b3JrLgpAQCAtNTYs
OCArNTUsMTcgQEAgdm9pZCBNYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludDo6cHJlcGFyZQogICAg
IGRhdGFMb2dJZihPcHRpb25zOjpsb2dHQygpLCAiKCIsIHNpemUsICIpIik7CiB9CiAKLXZvaWQg
TWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQ6OmV4ZWN1dGVJbXBsKFNsb3RWaXNpdG9yJiB2aXNp
dG9yKQordm9pZCBNYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludDo6ZXhlY3V0ZUltcGwoQWJzdHJh
Y3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKKyAgICAvLyBXZSB3YW50IHRvIHNraXAgdGhpcyBj
b25zdHJhaW50IGZvciB0aGUgR0MgdmVyaWZpZXIgYmVjYXVzZToKKyAgICAvLyAxLiBUaGVyZSBz
aG91bGQgYmUgbm8gbXV0YXRvciBtYXJraW5nIGFjdGlvbiBiZXR3ZWVuIHRoZSBFbmQgcGhhc2Ug
YW5kIHZlcmlmeUdDKCkuCisgICAgLy8gICAgSGVuY2UsIHdlIGNhbiBpZ25vcmUgdGhzZSBzdGFj
a3MuCisgICAgLy8gMi4gVGhlIEVuZCBwaGFzZSBleHBsaWN0bHkgY2FsbHMgaXRlcmF0ZUV4ZWN1
dGluZ0FuZENvbXBpbGluZ0NvZGVCbG9ja3MoKQorICAgIC8vICAgIHRvIGFkZCBleGVjdXRpbmcg
Q29kZUJsb2NrcyB0byBtX2hlYXAubV9tdXRhdG9yTWFya1N0YWNrLiBXZSB3YW50IHRvCisgICAg
Ly8gICAgbGVhdmUgdGhvc2UgdW5wZXJ0dXJiZWQuCisgICAgaWYgKG1faGVhcC5tX2lzTWFya2lu
Z0ZvckdDVmVyaWZpZXIpCisgICAgICAgIHJldHVybjsKKwogICAgIG1faGVhcC5tX211dGF0b3JN
YXJrU3RhY2stPnRyYW5zZmVyVG8odmlzaXRvci5tdXRhdG9yTWFya1N0YWNrKCkpOwogICAgIG1f
aGVhcC5tX3JhY2VNYXJrU3RhY2stPnRyYW5zZmVyVG8odmlzaXRvci5tdXRhdG9yTWFya1N0YWNr
KCkpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya1N0YWNrTWVyZ2lu
Z0NvbnN0cmFpbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9N
YXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludC5oCShyZXZpc2lvbiAyNzI3NjkpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zMCwxOCArMzAsMTggQEAKIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBIZWFw
OwotY2xhc3MgU2xvdFZpc2l0b3I7CitjbGFzcyBBYnN0cmFjdFNsb3RWaXNpdG9yOwogCiBjbGFz
cyBNYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludCBmaW5hbCA6IHB1YmxpYyBNYXJraW5nQ29uc3Ry
YWludCB7CiBwdWJsaWM6CiAgICAgTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQoSGVhcCYpOwog
ICAgIH5NYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludCgpIGZpbmFsOwogICAgIAotICAgIGRvdWJs
ZSBxdWlja1dvcmtFc3RpbWF0ZShTbG90VmlzaXRvciYpIGZpbmFsOworICAgIGRvdWJsZSBxdWlj
a1dvcmtFc3RpbWF0ZShBYnN0cmFjdFNsb3RWaXNpdG9yJikgZmluYWw7CiAgICAgCiBwcml2YXRl
OgotICAgIHZvaWQgcHJlcGFyZVRvRXhlY3V0ZUltcGwoY29uc3QgQWJzdHJhY3RMb2NrZXImIGNv
bnN0cmFpbnRTb2x2aW5nTG9ja2VyLCBTbG90VmlzaXRvciYpIGZpbmFsOwotICAgIHZvaWQgZXhl
Y3V0ZUltcGwoU2xvdFZpc2l0b3ImKSBmaW5hbDsKKyAgICB2b2lkIHByZXBhcmVUb0V4ZWN1dGVJ
bXBsKGNvbnN0IEFic3RyYWN0TG9ja2VyJiBjb25zdHJhaW50U29sdmluZ0xvY2tlciwgQWJzdHJh
Y3RTbG90VmlzaXRvciYpIGZpbmFsOworICAgIHZvaWQgZXhlY3V0ZUltcGwoQWJzdHJhY3RTbG90
VmlzaXRvciYpIGZpbmFsOwogICAgIAogICAgIEhlYXAmIG1faGVhcDsKIH07CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suY3BwCShyZXZpc2lvbiAyNzI3Njkp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTkgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmgJKHJl
dmlzaW9uIDI3Mjc2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2Nr
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSw3IEBACiAvKgogICogIENvcHlyaWdodCAoQykg
MTk5OS0yMDAwIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCiAgKiAgQ29weXJpZ2h0IChD
KSAyMDAxIFBldGVyIEtlbGx5IChwbWtAcG9zdC5jb20pCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAz
LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykg
MjAwMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgog
ICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQ
dWJsaWMKQEAgLTE1MSw3ICsxNTEsNyBAQCBwdWJsaWM6CiAgICAgICAgIAogICAgICAgICB2b2lk
IHNocmluaygpOwogICAgICAgICAgICAgCi0gICAgICAgIHZvaWQgdmlzaXRXZWFrU2V0KFNsb3RW
aXNpdG9yJik7CisgICAgICAgIHZvaWQgdmlzaXRXZWFrU2V0KEFic3RyYWN0U2xvdFZpc2l0b3Im
KTsKICAgICAgICAgdm9pZCByZWFwV2Vha1NldCgpOwogICAgICAgICAgICAgCiAgICAgICAgIC8v
IFdoaWxlIGFsbG9jYXRpbmcgZnJvbSBhIGZyZWUgbGlzdCwgTWFya2VkQmxvY2sgdGVtcG9yYXJp
bHkgaGFzIGJvZ3VzCkBAIC0yMDMsNiArMjAzLDcgQEAgcHVibGljOgogICAgICAgICAKICAgICAg
ICAgdm9pZCogc3RhcnQoKSBjb25zdCB7IHJldHVybiAmbV9ibG9jay0+YXRvbXMoKVswXTsgfQog
ICAgICAgICB2b2lkKiBlbmQoKSBjb25zdCB7IHJldHVybiAmbV9ibG9jay0+YXRvbXMoKVttX2Vu
ZEF0b21dOyB9CisgICAgICAgIHZvaWQqIGF0b21BdChzaXplX3QgaSkgY29uc3QgeyByZXR1cm4g
Jm1fYmxvY2stPmF0b21zKClbaV07IH0KICAgICAgICAgYm9vbCBjb250YWlucyh2b2lkKiBwKSBj
b25zdCB7IHJldHVybiBzdGFydCgpIDw9IHAgJiYgcCA8IGVuZCgpOyB9CiAKICAgICAgICAgdm9p
ZCBkdW1wU3RhdGUoUHJpbnRTdHJlYW0mKTsKQEAgLTQ5OCw3ICs0OTksNyBAQCBpbmxpbmUgdm9p
ZCBNYXJrZWRCbG9jazo6SGFuZGxlOjpzaHJpbmsoCiAgICAgbV93ZWFrU2V0LnNocmluaygpOwog
fQogCi1pbmxpbmUgdm9pZCBNYXJrZWRCbG9jazo6SGFuZGxlOjp2aXNpdFdlYWtTZXQoU2xvdFZp
c2l0b3ImIHZpc2l0b3IpCitpbmxpbmUgdm9pZCBNYXJrZWRCbG9jazo6SGFuZGxlOjp2aXNpdFdl
YWtTZXQoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICByZXR1cm4gbV93ZWFr
U2V0LnZpc2l0KHZpc2l0b3IpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
TWFya2VkU3BhY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L01hcmtlZFNwYWNlLmNwcAkocmV2aXNpb24gMjcyNzY5KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvTWFya2VkU3BhY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNzIsNyArMjcyLDcg
QEAgdm9pZCBNYXJrZWRTcGFjZTo6ZW5hYmxlUHJlY2lzZUFsbG9jYXRpbwogICAgICAgICBtX3By
ZWNpc2VBbGxvY2F0aW9uU2V0LT5hZGQoYWxsb2NhdGlvbi0+Y2VsbCgpKTsKIH0KIAotdm9pZCBN
YXJrZWRTcGFjZTo6dmlzaXRXZWFrU2V0cyhTbG90VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgTWFy
a2VkU3BhY2U6OnZpc2l0V2Vha1NldHMoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsK
ICAgICBhdXRvIHZpc2l0ID0gWyZdIChXZWFrU2V0KiB3ZWFrU2V0KSB7CiAgICAgICAgIHdlYWtT
ZXQtPnZpc2l0KHZpc2l0b3IpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFy
a2VkU3BhY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJr
ZWRTcGFjZS5oCShyZXZpc2lvbiAyNzI3NjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9NYXJrZWRTcGFjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqICBD
b3B5cmlnaHQgKEMpIDE5OTktMjAwMCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQogICog
IENvcHlyaWdodCAoQykgMjAwMSBQZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQotICogIENvcHly
aWdodCAoQykgMjAwMy0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBD
b3B5cmlnaHQgKEMpIDIwMDMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVz
c2VyIEdlbmVyYWwgUHVibGljCkBAIC0zNyw2ICszNyw3IEBACiAKIG5hbWVzcGFjZSBKU0Mgewog
CitjbGFzcyBBYnN0cmFjdFNsb3RWaXNpdG9yOwogY2xhc3MgQ29tcGxldGVTdWJzcGFjZTsKIGNs
YXNzIEhlYXA7CiBjbGFzcyBIZWFwQ2VsbDsKQEAgLTEwNSw3ICsxMDYsNyBAQCBwdWJsaWM6CiAg
ICAgCiAgICAgdm9pZCBwcmVwYXJlRm9yQWxsb2NhdGlvbigpOwogCi0gICAgdm9pZCB2aXNpdFdl
YWtTZXRzKFNsb3RWaXNpdG9yJik7CisgICAgdm9pZCB2aXNpdFdlYWtTZXRzKEFic3RyYWN0U2xv
dFZpc2l0b3ImKTsKICAgICB2b2lkIHJlYXBXZWFrU2V0cygpOwogCiAgICAgTWFya2VkQmxvY2tT
ZXQmIGJsb2NrcygpIHsgcmV0dXJuIG1fYmxvY2tzOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnQuY3BwCShyZXZpc2lvbiAyNzI3Njkp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUg
Ik1hcmtpbmdDb25zdHJhaW50LmgiCiAKKyNpbmNsdWRlICJBYnN0cmFjdFNsb3RWaXNpdG9ySW5s
aW5lcy5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJWaXNpdENvdW50ZXIu
aCIKIApAQCAtNTEsNyArNTIsNyBAQCB2b2lkIE1hcmtpbmdDb25zdHJhaW50OjpyZXNldFN0YXRz
KCkKICAgICBtX2xhc3RWaXNpdENvdW50ID0gMDsKIH0KIAotdm9pZCBNYXJraW5nQ29uc3RyYWlu
dDo6ZXhlY3V0ZShTbG90VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgTWFya2luZ0NvbnN0cmFpbnQ6
OmV4ZWN1dGUoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBWaXNpdENvdW50
ZXIgdmlzaXRDb3VudGVyKHZpc2l0b3IpOwogICAgIGV4ZWN1dGVJbXBsKHZpc2l0b3IpOwpAQCAt
NjAsMTcgKzYxLDIzIEBAIHZvaWQgTWFya2luZ0NvbnN0cmFpbnQ6OmV4ZWN1dGUoU2xvdFZpc2kK
ICAgICAgICAgZGF0YUxvZygiKCIsIGFiYnJldmlhdGVkTmFtZSgpLCAiIHZpc2l0ZWQgIiwgdmlz
aXRDb3VudGVyLnZpc2l0Q291bnQoKSwgIiBpbiBleGVjdXRlKSIpOwogfQogCi1kb3VibGUgTWFy
a2luZ0NvbnN0cmFpbnQ6OnF1aWNrV29ya0VzdGltYXRlKFNsb3RWaXNpdG9yJikKK3ZvaWQgTWFy
a2luZ0NvbnN0cmFpbnQ6OmV4ZWN1dGVTeW5jaHJvbm91c2x5KEFic3RyYWN0U2xvdFZpc2l0b3Im
IHZpc2l0b3IpCit7CisgICAgcHJlcGFyZVRvRXhlY3V0ZUltcGwoTm9Mb2NraW5nTmVjZXNzYXJ5
LCB2aXNpdG9yKTsKKyAgICBleGVjdXRlSW1wbCh2aXNpdG9yKTsKK30KKworZG91YmxlIE1hcmtp
bmdDb25zdHJhaW50OjpxdWlja1dvcmtFc3RpbWF0ZShBYnN0cmFjdFNsb3RWaXNpdG9yJikKIHsK
ICAgICByZXR1cm4gMDsKIH0KIAotZG91YmxlIE1hcmtpbmdDb25zdHJhaW50Ojp3b3JrRXN0aW1h
dGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCitkb3VibGUgTWFya2luZ0NvbnN0cmFpbnQ6OndvcmtF
c3RpbWF0ZShBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHJldHVybiBsYXN0
VmlzaXRDb3VudCgpICsgcXVpY2tXb3JrRXN0aW1hdGUodmlzaXRvcik7CiB9CiAKLXZvaWQgTWFy
a2luZ0NvbnN0cmFpbnQ6OnByZXBhcmVUb0V4ZWN1dGUoY29uc3QgQWJzdHJhY3RMb2NrZXImIGNv
bnN0cmFpbnRTb2x2aW5nTG9ja2VyLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgTWFya2lu
Z0NvbnN0cmFpbnQ6OnByZXBhcmVUb0V4ZWN1dGUoY29uc3QgQWJzdHJhY3RMb2NrZXImIGNvbnN0
cmFpbnRTb2x2aW5nTG9ja2VyLCBBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAg
IGRhdGFMb2dJZihPcHRpb25zOjpsb2dHQygpLCBhYmJyZXZpYXRlZE5hbWUoKSk7CiAgICAgVmlz
aXRDb3VudGVyIHZpc2l0Q291bnRlcih2aXNpdG9yKTsKQEAgLTgwLDcgKzg3LDcgQEAgdm9pZCBN
YXJraW5nQ29uc3RyYWludDo6cHJlcGFyZVRvRXhlY3V0ZQogICAgICAgICBkYXRhTG9nKCIoIiwg
YWJicmV2aWF0ZWROYW1lKCksICIgdmlzaXRlZCAiLCB2aXNpdENvdW50ZXIudmlzaXRDb3VudCgp
LCAiIGluIHByZXBhcmVUb0V4ZWN1dGUpIik7CiB9CiAKLXZvaWQgTWFya2luZ0NvbnN0cmFpbnQ6
OmRvUGFyYWxsZWxXb3JrKFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBTaGFyZWRUYXNrPHZvaWQoU2xv
dFZpc2l0b3ImKT4mIHRhc2spCit2b2lkIE1hcmtpbmdDb25zdHJhaW50Ojpkb1BhcmFsbGVsV29y
ayhBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBTaGFyZWRUYXNrPHZvaWQoQWJzdHJhY3RT
bG90VmlzaXRvciYpPiYgdGFzaykKIHsKICAgICBWaXNpdENvdW50ZXIgdmlzaXRDb3VudGVyKHZp
c2l0b3IpOwogICAgIHRhc2sucnVuKHZpc2l0b3IpOwpAQCAtOTIsNyArOTksNyBAQCB2b2lkIE1h
cmtpbmdDb25zdHJhaW50Ojpkb1BhcmFsbGVsV29yayhTCiAgICAgfQogfQogCi12b2lkIE1hcmtp
bmdDb25zdHJhaW50OjpwcmVwYXJlVG9FeGVjdXRlSW1wbChjb25zdCBBYnN0cmFjdExvY2tlciYs
IFNsb3RWaXNpdG9yJikKK3ZvaWQgTWFya2luZ0NvbnN0cmFpbnQ6OnByZXBhcmVUb0V4ZWN1dGVJ
bXBsKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgQWJzdHJhY3RTbG90VmlzaXRvciYpCiB7CiB9CiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnQu
aAkocmV2aXNpb24gMjcyNzY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2lu
Z0NvbnN0cmFpbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zOCw3ICszOCw3IEBACiBuYW1lc3BhY2UgSlND
IHsKIAogY2xhc3MgTWFya2luZ0NvbnN0cmFpbnRTZXQ7Ci1jbGFzcyBTbG90VmlzaXRvcjsKK2Ns
YXNzIEFic3RyYWN0U2xvdFZpc2l0b3I7CiAKIGNsYXNzIE1hcmtpbmdDb25zdHJhaW50IHsKICAg
ICBXVEZfTUFLRV9OT05DT1BZQUJMRShNYXJraW5nQ29uc3RyYWludCk7CkBAIC02MCwxNSArNjAs
MTUgQEAgcHVibGljOgogICAgIAogICAgIHNpemVfdCBsYXN0VmlzaXRDb3VudCgpIGNvbnN0IHsg
cmV0dXJuIG1fbGFzdFZpc2l0Q291bnQ7IH0KICAgICAKLSAgICB2b2lkIGV4ZWN1dGUoU2xvdFZp
c2l0b3ImKTsKLSAgICAKLSAgICBKU19FWFBPUlRfUFJJVkFURSB2aXJ0dWFsIGRvdWJsZSBxdWlj
a1dvcmtFc3RpbWF0ZShTbG90VmlzaXRvciYgdmlzaXRvcik7CisgICAgdm9pZCBleGVjdXRlKEFi
c3RyYWN0U2xvdFZpc2l0b3ImKTsKKworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZpcnR1YWwgZG91
YmxlIHF1aWNrV29ya0VzdGltYXRlKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpOwogICAg
IAotICAgIGRvdWJsZSB3b3JrRXN0aW1hdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpOworICAgIGRv
dWJsZSB3b3JrRXN0aW1hdGUoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcik7CiAgICAgCi0g
ICAgdm9pZCBwcmVwYXJlVG9FeGVjdXRlKGNvbnN0IEFic3RyYWN0TG9ja2VyJiBjb25zdHJhaW50
U29sdmluZ0xvY2tlciwgU2xvdFZpc2l0b3ImKTsKKyAgICB2b2lkIHByZXBhcmVUb0V4ZWN1dGUo
Y29uc3QgQWJzdHJhY3RMb2NrZXImIGNvbnN0cmFpbnRTb2x2aW5nTG9ja2VyLCBBYnN0cmFjdFNs
b3RWaXNpdG9yJik7CiAgICAgCi0gICAgdm9pZCBkb1BhcmFsbGVsV29yayhTbG90VmlzaXRvciYs
IFNoYXJlZFRhc2s8dm9pZChTbG90VmlzaXRvciYpPiYpOworICAgIHZvaWQgZG9QYXJhbGxlbFdv
cmsoQWJzdHJhY3RTbG90VmlzaXRvciYsIFNoYXJlZFRhc2s8dm9pZChBYnN0cmFjdFNsb3RWaXNp
dG9yJik+Jik7CiAgICAgCiAgICAgQ29uc3RyYWludFZvbGF0aWxpdHkgdm9sYXRpbGl0eSgpIGNv
bnN0IHsgcmV0dXJuIG1fdm9sYXRpbGl0eTsgfQogICAgIApAQCAtNzYsOSArNzYsMTEgQEAgcHVi
bGljOgogICAgIENvbnN0cmFpbnRQYXJhbGxlbGlzbSBwYXJhbGxlbGlzbSgpIGNvbnN0IHsgcmV0
dXJuIG1fcGFyYWxsZWxpc207IH0KIAogcHJvdGVjdGVkOgotICAgIHZpcnR1YWwgdm9pZCBleGVj
dXRlSW1wbChTbG90VmlzaXRvciYpID0gMDsKLSAgICBKU19FWFBPUlRfUFJJVkFURSB2aXJ0dWFs
IHZvaWQgcHJlcGFyZVRvRXhlY3V0ZUltcGwoY29uc3QgQWJzdHJhY3RMb2NrZXImIGNvbnN0cmFp
bnRTb2x2aW5nTG9ja2VyLCBTbG90VmlzaXRvciYpOwotICAgIAorICAgIHZpcnR1YWwgdm9pZCBl
eGVjdXRlSW1wbChBYnN0cmFjdFNsb3RWaXNpdG9yJikgPSAwOworICAgIEpTX0VYUE9SVF9QUklW
QVRFIHZpcnR1YWwgdm9pZCBwcmVwYXJlVG9FeGVjdXRlSW1wbChjb25zdCBBYnN0cmFjdExvY2tl
ciYgY29uc3RyYWludFNvbHZpbmdMb2NrZXIsIEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKKworICAg
IHZvaWQgZXhlY3V0ZVN5bmNocm9ub3VzbHkoQWJzdHJhY3RTbG90VmlzaXRvciYpOworCiBwcml2
YXRlOgogICAgIGZyaWVuZCBjbGFzcyBNYXJraW5nQ29uc3RyYWludFNldDsgLy8gU28gaXQgY2Fu
IHNldCBtX2luZGV4LgogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFy
a2luZ0NvbnN0cmFpbnRTZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL01hcmtpbmdDb25zdHJhaW50U2V0LmNwcAkocmV2aXNpb24gMjcyNzY5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnRTZXQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTYzLDcgKzYzLDcgQEAgdm9pZCBNYXJraW5nQ29uc3RyYWludFNldDo6ZGlkU3RhcnRN
YXJraQogICAgIG1faXRlcmF0aW9uID0gMTsKIH0KIAotdm9pZCBNYXJraW5nQ29uc3RyYWludFNl
dDo6YWRkKENTdHJpbmcgYWJicmV2aWF0ZWROYW1lLCBDU3RyaW5nIG5hbWUsIDo6RnVuY3Rpb248
dm9pZChTbG90VmlzaXRvciYpPiBmdW5jdGlvbiwgQ29uc3RyYWludFZvbGF0aWxpdHkgdm9sYXRp
bGl0eSwgQ29uc3RyYWludENvbmN1cnJlbmN5IGNvbmN1cnJlbmN5LCBDb25zdHJhaW50UGFyYWxs
ZWxpc20gcGFyYWxsZWxpc20pCit2b2lkIE1hcmtpbmdDb25zdHJhaW50U2V0OjphZGQoQ1N0cmlu
ZyBhYmJyZXZpYXRlZE5hbWUsIENTdHJpbmcgbmFtZSwgOjpGdW5jdGlvbjx2b2lkKEFic3RyYWN0
U2xvdFZpc2l0b3ImKT4gZnVuY3Rpb24sIENvbnN0cmFpbnRWb2xhdGlsaXR5IHZvbGF0aWxpdHks
IENvbnN0cmFpbnRDb25jdXJyZW5jeSBjb25jdXJyZW5jeSwgQ29uc3RyYWludFBhcmFsbGVsaXNt
IHBhcmFsbGVsaXNtKQogewogICAgIGFkZChtYWtlVW5pcXVlPFNpbXBsZU1hcmtpbmdDb25zdHJh
aW50PihXVEZNb3ZlKGFiYnJldmlhdGVkTmFtZSksIFdURk1vdmUobmFtZSksIFdURk1vdmUoZnVu
Y3Rpb24pLCB2b2xhdGlsaXR5LCBjb25jdXJyZW5jeSwgcGFyYWxsZWxpc20pKTsKIH0KQEAgLTc4
LDE0ICs3OCwxNCBAQCB2b2lkIE1hcmtpbmdDb25zdHJhaW50U2V0OjphZGQoCiAgICAgbV9zZXQu
YXBwZW5kKFdURk1vdmUoY29uc3RyYWludCkpOwogfQogCi1ib29sIE1hcmtpbmdDb25zdHJhaW50
U2V0OjpleGVjdXRlQ29udmVyZ2VuY2UoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCitib29sIE1hcmtp
bmdDb25zdHJhaW50U2V0OjpleGVjdXRlQ29udmVyZ2VuY2UoQWJzdHJhY3RTbG90VmlzaXRvciYg
dmlzaXRvcikKIHsKICAgICBib29sIHJlc3VsdCA9IGV4ZWN1dGVDb252ZXJnZW5jZUltcGwodmlz
aXRvcik7CiAgICAgZGF0YUxvZ0lmKE9wdGlvbnM6OmxvZ0dDKCksICIgIik7CiAgICAgcmV0dXJu
IHJlc3VsdDsKIH0KIAotYm9vbCBNYXJraW5nQ29uc3RyYWludFNldDo6aXNXYXZlZnJvbnRBZHZh
bmNpbmcoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCitib29sIE1hcmtpbmdDb25zdHJhaW50U2V0Ojpp
c1dhdmVmcm9udEFkdmFuY2luZyhBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAg
IGZvciAoTWFya2luZ0NvbnN0cmFpbnQqIG91dGdyb3d0aCA6IG1fb3V0Z3Jvd3RocykgewogICAg
ICAgICBpZiAob3V0Z3Jvd3RoLT53b3JrRXN0aW1hdGUodmlzaXRvcikpCkBAIC05NCw3ICs5NCw3
IEBAIGJvb2wgTWFya2luZ0NvbnN0cmFpbnRTZXQ6OmlzV2F2ZWZyb250QWQKICAgICByZXR1cm4g
ZmFsc2U7CiB9CiAKLWJvb2wgTWFya2luZ0NvbnN0cmFpbnRTZXQ6OmV4ZWN1dGVDb252ZXJnZW5j
ZUltcGwoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCitib29sIE1hcmtpbmdDb25zdHJhaW50U2V0Ojpl
eGVjdXRlQ29udmVyZ2VuY2VJbXBsKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAg
ICAgU3VwZXJTYW1wbGVyU2NvcGUgc3VwZXJTYW1wbGVyU2NvcGUoZmFsc2UpOwogICAgIE1hcmtp
bmdDb25zdHJhaW50U29sdmVyIHNvbHZlcigqdGhpcyk7CkBAIC0xNjYsMTAgKzE2NiwxMCBAQCBi
b29sIE1hcmtpbmdDb25zdHJhaW50U2V0OjpleGVjdXRlQ29udmVyCiAgICAgcmV0dXJuICFzb2x2
ZXIuZGlkVmlzaXRTb21ldGhpbmcoKTsKIH0KIAotdm9pZCBNYXJraW5nQ29uc3RyYWludFNldDo6
ZXhlY3V0ZUFsbChTbG90VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgTWFya2luZ0NvbnN0cmFpbnRT
ZXQ6OmV4ZWN1dGVBbGxTeW5jaHJvbm91c2x5KEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3Ip
CiB7CiAgICAgZm9yIChhdXRvJiBjb25zdHJhaW50IDogbV9zZXQpCi0gICAgICAgIGNvbnN0cmFp
bnQtPmV4ZWN1dGUodmlzaXRvcik7CisgICAgICAgIGNvbnN0cmFpbnQtPmV4ZWN1dGVTeW5jaHJv
bm91c2x5KHZpc2l0b3IpOwogICAgIGRhdGFMb2dJZihPcHRpb25zOjpsb2dHQygpLCAiICIpOwog
fQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludFNl
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25z
dHJhaW50U2V0LmgJKHJldmlzaW9uIDI3Mjc2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL01hcmtpbmdDb25zdHJhaW50U2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDYsMTQgKzQ2LDE0IEBA
IHB1YmxpYzoKICAgICB2b2lkIGFkZCgKICAgICAgICAgQ1N0cmluZyBhYmJyZXZpYXRlZE5hbWUs
CiAgICAgICAgIENTdHJpbmcgbmFtZSwKLSAgICAgICAgOjpGdW5jdGlvbjx2b2lkKFNsb3RWaXNp
dG9yJik+LAorICAgICAgICA6OkZ1bmN0aW9uPHZvaWQoQWJzdHJhY3RTbG90VmlzaXRvciYpPiwK
ICAgICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHksCiAgICAgICAgIENvbnN0cmFpbnRDb25jdXJy
ZW5jeSA9IENvbnN0cmFpbnRDb25jdXJyZW5jeTo6Q29uY3VycmVudCwKICAgICAgICAgQ29uc3Ry
YWludFBhcmFsbGVsaXNtID0gQ29uc3RyYWludFBhcmFsbGVsaXNtOjpTZXF1ZW50aWFsKTsKICAg
ICAKICAgICB2b2lkIGFkZCgKICAgICAgICAgQ1N0cmluZyBhYmJyZXZpYXRlZE5hbWUsIENTdHJp
bmcgbmFtZSwKLSAgICAgICAgOjpGdW5jdGlvbjx2b2lkKFNsb3RWaXNpdG9yJik+IGZ1bmMsCisg
ICAgICAgIDo6RnVuY3Rpb248dm9pZChBYnN0cmFjdFNsb3RWaXNpdG9yJik+IGZ1bmMsCiAgICAg
ICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5IHZvbGF0aWxpdHksCiAgICAgICAgIENvbnN0cmFpbnRQ
YXJhbGxlbGlzbSBwYXJhbGxlbGlzbSkKICAgICB7CkBAIC02NCwyMCArNjQsMjAgQEAgcHVibGlj
OgogICAgIAogICAgIC8vIEFzc3VtaW5nIHRoYXQgdGhlIG1hcmsgc3RhY2tzIGFyZSBhbGwgZW1w
dHksIHRoaXMgd2lsbCBnaXZlIHlvdSBhIGd1ZXNzIGFzIHRvIHdoZXRoZXIgb3IKICAgICAvLyBu
b3QgdGhlIHdhdmVmcm9udCBpcyBhZHZhbmNpbmcuCi0gICAgYm9vbCBpc1dhdmVmcm9udEFkdmFu
Y2luZyhTbG90VmlzaXRvciYpOwotICAgIGJvb2wgaXNXYXZlZnJvbnRSZXRyZWF0aW5nKFNsb3RW
aXNpdG9yJiB2aXNpdG9yKSB7IHJldHVybiAhaXNXYXZlZnJvbnRBZHZhbmNpbmcodmlzaXRvcik7
IH0KKyAgICBib29sIGlzV2F2ZWZyb250QWR2YW5jaW5nKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsK
KyAgICBib29sIGlzV2F2ZWZyb250UmV0cmVhdGluZyhBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNp
dG9yKSB7IHJldHVybiAhaXNXYXZlZnJvbnRBZHZhbmNpbmcodmlzaXRvcik7IH0KICAgICAKICAg
ICAvLyBSZXR1cm5zIHRydWUgaWYgdGhpcyBleGVjdXRlZCBhbGwgY29uc3RyYWludHMgYW5kIG5v
bmUgb2YgdGhlbSBwcm9kdWNlZCBuZXcgd29yay4gVGhpcwogICAgIC8vIGFzc3VtZXMgdGhhdCB5
b3UndmUgYWxyYWVkeSB2aXNpdGVkIHJvb3RzIGFuZCBkcmFpbmVkIGZyb20gdGhlcmUuCi0gICAg
Ym9vbCBleGVjdXRlQ29udmVyZ2VuY2UoU2xvdFZpc2l0b3ImKTsKLSAgICAKKyAgICBib29sIGV4
ZWN1dGVDb252ZXJnZW5jZShBYnN0cmFjdFNsb3RWaXNpdG9yJik7CisKICAgICAvLyBTaW1wbHkg
cnVucyBhbGwgY29uc3RyYWludHMgd2l0aG91dCBhbnkgc2hlbmFuaWdhbnMuCi0gICAgdm9pZCBl
eGVjdXRlQWxsKFNsb3RWaXNpdG9yJik7CisgICAgdm9pZCBleGVjdXRlQWxsU3luY2hyb25vdXNs
eShBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAgICAgCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFz
cyBNYXJraW5nQ29uc3RyYWludFNvbHZlcjsKLSAgICAKLSAgICBib29sIGV4ZWN1dGVDb252ZXJn
ZW5jZUltcGwoU2xvdFZpc2l0b3ImKTsKKworICAgIGJvb2wgZXhlY3V0ZUNvbnZlcmdlbmNlSW1w
bChBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAgICAgCiAgICAgSGVhcCYgbV9oZWFwOwogICAgIEJp
dFZlY3RvciBtX3VuZXhlY3V0ZWRSb290czsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL01hcmtpbmdDb25zdHJhaW50U29sdmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludFNvbHZlci5jcHAJKHJldmlzaW9uIDI3
Mjc2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50U29s
dmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0xNTAsMTMgKzE1MCwxMyBAQCB2b2lkIE1hcmtpbmdDb25z
dHJhaW50U29sdmVyOjpleGVjdXRlKE1hCiAgICAgbV9leGVjdXRlZC5zZXQoY29uc3RyYWludC5p
bmRleCgpKTsKIH0KIAotdm9pZCBNYXJraW5nQ29uc3RyYWludFNvbHZlcjo6YWRkUGFyYWxsZWxU
YXNrKFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoU2xvdFZpc2l0b3ImKT4+IHRhc2ssIE1hcmtpbmdD
b25zdHJhaW50JiBjb25zdHJhaW50KQordm9pZCBNYXJraW5nQ29uc3RyYWludFNvbHZlcjo6YWRk
UGFyYWxsZWxUYXNrKFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoQWJzdHJhY3RTbG90VmlzaXRvciYp
Pj4gdGFzaywgTWFya2luZ0NvbnN0cmFpbnQmIGNvbnN0cmFpbnQpCiB7CiAgICAgYXV0byBsb2Nr
ZXIgPSBob2xkTG9jayhtX2xvY2spOwogICAgIG1fdG9FeGVjdXRlSW5QYXJhbGxlbC5hcHBlbmQo
VGFza1dpdGhDb25zdHJhaW50KFdURk1vdmUodGFzayksICZjb25zdHJhaW50KSk7CiB9CiAKLXZv
aWQgTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXI6OnJ1bkV4ZWN1dGlvblRocmVhZChTbG90VmlzaXRv
ciYgdmlzaXRvciwgU2NoZWR1bGVyUHJlZmVyZW5jZSBwcmVmZXJlbmNlLCBTY29wZWRMYW1iZGE8
T3B0aW9uYWw8dW5zaWduZWQ+KCk+IHBpY2tOZXh0KQordm9pZCBNYXJraW5nQ29uc3RyYWludFNv
bHZlcjo6cnVuRXhlY3V0aW9uVGhyZWFkKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIFNj
aGVkdWxlclByZWZlcmVuY2UgcHJlZmVyZW5jZSwgU2NvcGVkTGFtYmRhPE9wdGlvbmFsPHVuc2ln
bmVkPigpPiBwaWNrTmV4dCkKIHsKICAgICBmb3IgKDs7KSB7CiAgICAgICAgIGJvb2wgZG9QYXJh
bGxlbFdvcmtNb2RlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0Nv
bnN0cmFpbnRTb2x2ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9NYXJraW5nQ29uc3RyYWludFNvbHZlci5oCShyZXZpc2lvbiAyNzI3NjkpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludFNvbHZlci5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTY1LDE1ICs2NSwxNSBAQCBwdWJsaWM6CiAgICAgdm9pZCBleGVjdXRlKE1hcmtpbmdDb25z
dHJhaW50Jik7CiAgICAgCiAgICAgLy8gUGFyYWxsZWwgY29uc3RyYWludHMgY2FuIGFkZCBwYXJh
bGxlbCB0YXNrcy4KLSAgICB2b2lkIGFkZFBhcmFsbGVsVGFzayhSZWZQdHI8U2hhcmVkVGFzazx2
b2lkKFNsb3RWaXNpdG9yJik+PiwgTWFya2luZ0NvbnN0cmFpbnQmKTsKKyAgICB2b2lkIGFkZFBh
cmFsbGVsVGFzayhSZWZQdHI8U2hhcmVkVGFzazx2b2lkKEFic3RyYWN0U2xvdFZpc2l0b3ImKT4+
LCBNYXJraW5nQ29uc3RyYWludCYpOwogICAgIAogcHJpdmF0ZToKLSAgICB2b2lkIHJ1bkV4ZWN1
dGlvblRocmVhZChTbG90VmlzaXRvciYsIFNjaGVkdWxlclByZWZlcmVuY2UsIFNjb3BlZExhbWJk
YTxPcHRpb25hbDx1bnNpZ25lZD4oKT4gcGlja05leHQpOworICAgIHZvaWQgcnVuRXhlY3V0aW9u
VGhyZWFkKEFic3RyYWN0U2xvdFZpc2l0b3ImLCBTY2hlZHVsZXJQcmVmZXJlbmNlLCBTY29wZWRM
YW1iZGE8T3B0aW9uYWw8dW5zaWduZWQ+KCk+IHBpY2tOZXh0KTsKICAgICAKICAgICBzdHJ1Y3Qg
VGFza1dpdGhDb25zdHJhaW50IHsKICAgICAgICAgVGFza1dpdGhDb25zdHJhaW50KCkgeyB9CiAg
ICAgICAgIAotICAgICAgICBUYXNrV2l0aENvbnN0cmFpbnQoUmVmUHRyPFNoYXJlZFRhc2s8dm9p
ZChTbG90VmlzaXRvciYpPj4gdGFzaywgTWFya2luZ0NvbnN0cmFpbnQqIGNvbnN0cmFpbnQpCisg
ICAgICAgIFRhc2tXaXRoQ29uc3RyYWludChSZWZQdHI8U2hhcmVkVGFzazx2b2lkKEFic3RyYWN0
U2xvdFZpc2l0b3ImKT4+IHRhc2ssIE1hcmtpbmdDb25zdHJhaW50KiBjb25zdHJhaW50KQogICAg
ICAgICAgICAgOiB0YXNrKFdURk1vdmUodGFzaykpCiAgICAgICAgICAgICAsIGNvbnN0cmFpbnQo
Y29uc3RyYWludCkKICAgICAgICAgewpAQCAtODUsMTIgKzg1LDEyIEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICAgICAgJiYgY29uc3RyYWludCA9PSBvdGhlci5jb25zdHJhaW50OwogICAgICAgICB9
CiAgICAgICAgIAotICAgICAgICBSZWZQdHI8U2hhcmVkVGFzazx2b2lkKFNsb3RWaXNpdG9yJik+
PiB0YXNrOworICAgICAgICBSZWZQdHI8U2hhcmVkVGFzazx2b2lkKEFic3RyYWN0U2xvdFZpc2l0
b3ImKT4+IHRhc2s7CiAgICAgICAgIE1hcmtpbmdDb25zdHJhaW50KiBjb25zdHJhaW50IHsgbnVs
bHB0ciB9OwogICAgIH07CiAgICAgCiAgICAgSGVhcCYgbV9oZWFwOwotICAgIFNsb3RWaXNpdG9y
JiBtX21haW5WaXNpdG9yOworICAgIEFic3RyYWN0U2xvdFZpc2l0b3ImIG1fbWFpblZpc2l0b3I7
CiAgICAgTWFya2luZ0NvbnN0cmFpbnRTZXQmIG1fc2V0OwogICAgIEJpdFZlY3RvciBtX2V4ZWN1
dGVkOwogICAgIERlcXVlPFRhc2tXaXRoQ29uc3RyYWludCwgMzI+IG1fdG9FeGVjdXRlSW5QYXJh
bGxlbDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1ByZWNpc2VBbGxvY2F0aW9u
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9QcmVjaXNlQWxs
b2NhdGlvbi5jcHAJKHJldmlzaW9uIDI3Mjc2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL1ByZWNpc2VBbGxvY2F0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTIwMCw3ICsyMDAs
NyBAQCB2b2lkIFByZWNpc2VBbGxvY2F0aW9uOjpzaHJpbmsoKQogICAgIG1fd2Vha1NldC5zaHJp
bmsoKTsKIH0KIAotdm9pZCBQcmVjaXNlQWxsb2NhdGlvbjo6dmlzaXRXZWFrU2V0KFNsb3RWaXNp
dG9yJiB2aXNpdG9yKQordm9pZCBQcmVjaXNlQWxsb2NhdGlvbjo6dmlzaXRXZWFrU2V0KEFic3Ry
YWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgbV93ZWFrU2V0LnZpc2l0KHZpc2l0b3Ip
OwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvUHJlY2lzZUFsbG9jYXRpb24u
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9QcmVjaXNlQWxsb2Nh
dGlvbi5oCShyZXZpc2lvbiAyNzI3NjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Q
cmVjaXNlQWxsb2NhdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxNi0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODIsNyArODIsNyBAQCBwdWJs
aWM6CiAgICAgCiAgICAgdm9pZCBzaHJpbmsoKTsKICAgICAKLSAgICB2b2lkIHZpc2l0V2Vha1Nl
dChTbG90VmlzaXRvciYpOworICAgIHZvaWQgdmlzaXRXZWFrU2V0KEFic3RyYWN0U2xvdFZpc2l0
b3ImKTsKICAgICB2b2lkIHJlYXBXZWFrU2V0KCk7CiAgICAgCiAgICAgdm9pZCBjbGVhck5ld2x5
QWxsb2NhdGVkKCkgeyBtX2lzTmV3bHlBbGxvY2F0ZWQgPSBmYWxzZTsgfQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1NpbXBsZU1hcmtpbmdDb25zdHJhaW50
LmNwcAkocmV2aXNpb24gMjcyNzY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2lt
cGxlTWFya2luZ0NvbnN0cmFpbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMwLDcgKzMwLDcgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAKIFNpbXBsZU1hcmtpbmdDb25zdHJhaW50OjpTaW1wbGVNYXJraW5nQ29u
c3RyYWludCgKICAgICBDU3RyaW5nIGFiYnJldmlhdGVkTmFtZSwgQ1N0cmluZyBuYW1lLAotICAg
IDo6RnVuY3Rpb248dm9pZChTbG90VmlzaXRvciYpPiBleGVjdXRlRnVuY3Rpb24sCisgICAgOjpG
dW5jdGlvbjx2b2lkKEFic3RyYWN0U2xvdFZpc2l0b3ImKT4gZXhlY3V0ZUZ1bmN0aW9uLAogICAg
IENvbnN0cmFpbnRWb2xhdGlsaXR5IHZvbGF0aWxpdHksIENvbnN0cmFpbnRDb25jdXJyZW5jeSBj
b25jdXJyZW5jeSwKICAgICBDb25zdHJhaW50UGFyYWxsZWxpc20gcGFyYWxsZWxpc20pCiAgICAg
OiBNYXJraW5nQ29uc3RyYWludChXVEZNb3ZlKGFiYnJldmlhdGVkTmFtZSksIFdURk1vdmUobmFt
ZSksIHZvbGF0aWxpdHksIGNvbmN1cnJlbmN5LCBwYXJhbGxlbGlzbSkKQEAgLTQyLDcgKzQyLDcg
QEAgU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQ6On5TaW1wbGVNYXJraW5nQwogewogfQogCi12b2lk
IFNpbXBsZU1hcmtpbmdDb25zdHJhaW50OjpleGVjdXRlSW1wbChTbG90VmlzaXRvciYgdmlzaXRv
cikKK3ZvaWQgU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQ6OmV4ZWN1dGVJbXBsKEFic3RyYWN0U2xv
dFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgbV9leGVjdXRlRnVuY3Rpb24odmlzaXRvcik7CiB9
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TaW1wbGVNYXJraW5nQ29uc3RyYWlu
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1NpbXBsZU1hcmtp
bmdDb25zdHJhaW50LmgJKHJldmlzaW9uIDI3Mjc2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL1NpbXBsZU1hcmtpbmdDb25zdHJhaW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzcsMTQgKzM3
LDE0IEBAIGNsYXNzIFNpbXBsZU1hcmtpbmdDb25zdHJhaW50IGZpbmFsIDogcHUKIHB1YmxpYzoK
ICAgICBKU19FWFBPUlRfUFJJVkFURSBTaW1wbGVNYXJraW5nQ29uc3RyYWludCgKICAgICAgICAg
Q1N0cmluZyBhYmJyZXZpYXRlZE5hbWUsIENTdHJpbmcgbmFtZSwKLSAgICAgICAgOjpGdW5jdGlv
bjx2b2lkKFNsb3RWaXNpdG9yJik+LAorICAgICAgICA6OkZ1bmN0aW9uPHZvaWQoQWJzdHJhY3RT
bG90VmlzaXRvciYpPiwKICAgICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHksCiAgICAgICAgIENv
bnN0cmFpbnRDb25jdXJyZW5jeSA9IENvbnN0cmFpbnRDb25jdXJyZW5jeTo6Q29uY3VycmVudCwK
ICAgICAgICAgQ29uc3RyYWludFBhcmFsbGVsaXNtID0gQ29uc3RyYWludFBhcmFsbGVsaXNtOjpT
ZXF1ZW50aWFsKTsKICAgICAKICAgICBTaW1wbGVNYXJraW5nQ29uc3RyYWludCgKICAgICAgICAg
Q1N0cmluZyBhYmJyZXZpYXRlZE5hbWUsIENTdHJpbmcgbmFtZSwKLSAgICAgICAgOjpGdW5jdGlv
bjx2b2lkKFNsb3RWaXNpdG9yJik+IGZ1bmMsCisgICAgICAgIDo6RnVuY3Rpb248dm9pZChBYnN0
cmFjdFNsb3RWaXNpdG9yJik+IGZ1bmMsCiAgICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5IHZv
bGF0aWxpdHksCiAgICAgICAgIENvbnN0cmFpbnRQYXJhbGxlbGlzbSBwYXJhbGxlbGlzbSkKICAg
ICAgICAgOiBTaW1wbGVNYXJraW5nQ29uc3RyYWludChhYmJyZXZpYXRlZE5hbWUsIG5hbWUsIFdU
Rk1vdmUoZnVuYyksIHZvbGF0aWxpdHksIENvbnN0cmFpbnRDb25jdXJyZW5jeTo6Q29uY3VycmVu
dCwgcGFyYWxsZWxpc20pCkBAIC01NCw5ICs1NCw5IEBAIHB1YmxpYzoKICAgICBKU19FWFBPUlRf
UFJJVkFURSB+U2ltcGxlTWFya2luZ0NvbnN0cmFpbnQoKSBmaW5hbDsKICAgICAKIHByaXZhdGU6
Ci0gICAgdm9pZCBleGVjdXRlSW1wbChTbG90VmlzaXRvciYpIGZpbmFsOworICAgIHZvaWQgZXhl
Y3V0ZUltcGwoQWJzdHJhY3RTbG90VmlzaXRvciYpIGZpbmFsOwogCi0gICAgOjpGdW5jdGlvbjx2
b2lkKFNsb3RWaXNpdG9yJik+IG1fZXhlY3V0ZUZ1bmN0aW9uOworICAgIDo6RnVuY3Rpb248dm9p
ZChBYnN0cmFjdFNsb3RWaXNpdG9yJik+IG1fZXhlY3V0ZUZ1bmN0aW9uOwogfTsKIAogfSAvLyBu
YW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRv
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0
b3IuY3BwCShyZXZpc2lvbiAyNzI3NjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9T
bG90VmlzaXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDEyLTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEyLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03NywxNSArNzcsMTIgQEAgc3RhdGlj
IHZvaWQgdmFsaWRhdGUoSlNDZWxsKiBjZWxsKQogI2VuZGlmCiAKIFNsb3RWaXNpdG9yOjpTbG90
VmlzaXRvcihIZWFwJiBoZWFwLCBDU3RyaW5nIGNvZGVOYW1lKQotICAgIDogbV9ieXRlc1Zpc2l0
ZWQoMCkKLSAgICAsIG1fdmlzaXRDb3VudCgwKQorICAgIDogQmFzZShoZWFwLCBjb2RlTmFtZSkK
KyAgICAsIG1fYnl0ZXNWaXNpdGVkKDApCiAgICAgLCBtX2lzSW5QYXJhbGxlbE1vZGUoZmFsc2Up
CiAgICAgLCBtX21hcmtpbmdWZXJzaW9uKE1hcmtlZFNwYWNlOjppbml0aWFsVmVyc2lvbikKLSAg
ICAsIG1faGVhcChoZWFwKQotICAgICwgbV9jb2RlTmFtZShjb2RlTmFtZSkKICNpZiBBU1NFUlRf
RU5BQkxFRAogICAgICwgbV9pc0NoZWNraW5nRm9yRGVmYXVsdE1hcmtWaW9sYXRpb24oZmFsc2Up
Ci0gICAgLCBtX2lzRHJhaW5pbmcoZmFsc2UpCiAjZW5kaWYKIHsKIH0KQEAgLTExNyw4ICsxMTQs
OCBAQCB2b2lkIFNsb3RWaXNpdG9yOjpkaWRTdGFydE1hcmtpbmcoKQogCiB2b2lkIFNsb3RWaXNp
dG9yOjpyZXNldCgpCiB7CisgICAgQWJzdHJhY3RTbG90VmlzaXRvcjo6cmVzZXQoKTsKICAgICBt
X2J5dGVzVmlzaXRlZCA9IDA7Ci0gICAgbV92aXNpdENvdW50ID0gMDsKICAgICBtX2hlYXBBbmFs
eXplciA9IG51bGxwdHI7CiAgICAgUkVMRUFTRV9BU1NFUlQoIW1fY3VycmVudENlbGwpOwogfQpA
QCAtMjMwLDcgKzIyNyw3IEBAIHZvaWQgU2xvdFZpc2l0b3I6OmFwcGVuZEpTQ2VsbE9yQXV4aWxp
YXIKIHZvaWQgU2xvdFZpc2l0b3I6OmFwcGVuZFNsb3coSlNDZWxsKiBjZWxsLCBEZXBlbmRlbmN5
IGRlcGVuZGVuY3kpCiB7CiAgICAgaWYgKFVOTElLRUxZKG1faGVhcEFuYWx5emVyKSkKLSAgICAg
ICAgbV9oZWFwQW5hbHl6ZXItPmFuYWx5emVFZGdlKG1fY3VycmVudENlbGwsIGNlbGwsIG1fcm9v
dE1hcmtSZWFzb24pOworICAgICAgICBtX2hlYXBBbmFseXplci0+YW5hbHl6ZUVkZ2UobV9jdXJy
ZW50Q2VsbCwgY2VsbCwgcm9vdE1hcmtSZWFzb24oKSk7CiAKICAgICBhcHBlbmRIaWRkZW5TbG93
SW1wbChjZWxsLCBkZXBlbmRlbmN5KTsKIH0KQEAgLTgwNywxMiArODA0LDEyIEBAIE1hcmtTdGFj
a0FycmF5JiBTbG90VmlzaXRvcjo6Y29ycmVzcG9uZGkKICAgICByZXR1cm4gKm1faGVhcC5tX3No
YXJlZE11dGF0b3JNYXJrU3RhY2s7CiB9CiAKLXZvaWQgU2xvdFZpc2l0b3I6OmFkZFBhcmFsbGVs
Q29uc3RyYWludFRhc2soUmVmUHRyPFNoYXJlZFRhc2s8dm9pZChTbG90VmlzaXRvciYpPj4gdGFz
aykKK3ZvaWQgU2xvdFZpc2l0b3I6OmFkZFBhcmFsbGVsQ29uc3RyYWludFRhc2soUmVmUHRyPFNo
YXJlZFRhc2s8dm9pZChBYnN0cmFjdFNsb3RWaXNpdG9yJik+PiB0YXNrKQogewogICAgIFJFTEVB
U0VfQVNTRVJUKG1fY3VycmVudFNvbHZlcik7CiAgICAgUkVMRUFTRV9BU1NFUlQobV9jdXJyZW50
Q29uc3RyYWludCk7CiAgICAgUkVMRUFTRV9BU1NFUlQodGFzayk7Ci0gICAgCisKICAgICBtX2N1
cnJlbnRTb2x2ZXItPmFkZFBhcmFsbGVsVGFzayh0YXNrLCAqbV9jdXJyZW50Q29uc3RyYWludCk7
CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuaAkocmV2
aXNpb24gMjcyNzY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3Iu
aAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTEtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTEtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTI1LDc0ICsyNSw2NiBAQAogCiAjcHJhZ21hIG9uY2UKIAor
I2luY2x1ZGUgIkFic3RyYWN0U2xvdFZpc2l0b3IuaCIKICNpbmNsdWRlICJIYW5kbGVUeXBlcy5o
IgogI2luY2x1ZGUgIkl0ZXJhdGlvblN0YXR1cy5oIgotI2luY2x1ZGUgIk1hcmtTdGFjay5oIgot
I2luY2x1ZGUgIlZpc2l0UmFjZUtleS5oIgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5j
bHVkZSA8d3RmL01vbm90b25pY1RpbWUuaD4KLSNpbmNsdWRlIDx3dGYvU2hhcmVkVGFzay5oPgot
I2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKLWNsYXNz
IENvbnNlcnZhdGl2ZVJvb3RzOwogY2xhc3MgR0NUaHJlYWRTaGFyZWREYXRhOwotY2xhc3MgSGVh
cDsKIGNsYXNzIEhlYXBDZWxsOwogY2xhc3MgSGVhcEFuYWx5emVyOwotY2xhc3MgTWFya2VkQmxv
Y2s7CiBjbGFzcyBNYXJraW5nQ29uc3RyYWludDsKIGNsYXNzIE1hcmtpbmdDb25zdHJhaW50U29s
dmVyOwotdGVtcGxhdGU8dHlwZW5hbWUgVD4gY2xhc3MgV2VhazsKLXRlbXBsYXRlPHR5cGVuYW1l
IFQsIHR5cGVuYW1lIFRyYWl0cz4gY2xhc3MgV3JpdGVCYXJyaWVyQmFzZTsKIAogdHlwZWRlZiB1
aW50MzJfdCBIZWFwVmVyc2lvbjsKIAotY2xhc3MgU2xvdFZpc2l0b3IgeworY2xhc3MgU2xvdFZp
c2l0b3IgZmluYWwgOiBwdWJsaWMgQWJzdHJhY3RTbG90VmlzaXRvciB7CiAgICAgV1RGX01BS0Vf
Tk9OQ09QWUFCTEUoU2xvdFZpc2l0b3IpOwogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwog
CisgICAgdXNpbmcgQmFzZSA9IEFic3RyYWN0U2xvdFZpc2l0b3I7CisKICAgICBmcmllbmQgY2xh
c3MgU2V0Q3VycmVudENlbGxTY29wZTsKICAgICBmcmllbmQgY2xhc3MgSGVhcDsKIAogcHVibGlj
OgotICAgIGVudW0gUm9vdE1hcmtSZWFzb24gewotICAgICAgICBOb25lLAotICAgICAgICBDb25z
ZXJ2YXRpdmVTY2FuLAotICAgICAgICBTdHJvbmdSZWZlcmVuY2VzLAotICAgICAgICBQcm90ZWN0
ZWRWYWx1ZXMsCi0gICAgICAgIE1hcmtMaXN0U2V0LAotICAgICAgICBWTUV4Y2VwdGlvbnMsCi0g
ICAgICAgIFN0cm9uZ0hhbmRsZXMsCi0gICAgICAgIERlYnVnZ2VyLAotICAgICAgICBKSVRTdHVi
Um91dGluZXMsCi0gICAgICAgIFdlYWtTZXRzLAotICAgICAgICBPdXRwdXQsCi0gICAgICAgIERG
R1dvcmtMaXN0cywKLSAgICAgICAgQ29kZUJsb2NrcywKLSAgICAgICAgRE9NR0NPdXRwdXQsCisg
ICAgY2xhc3MgQ29udGV4dCB7CisgICAgcHVibGljOgorICAgICAgICBBTFdBWVNfSU5MSU5FIENv
bnRleHQoQWJzdHJhY3RTbG90VmlzaXRvciYsIEhlYXBDZWxsKikgeyB9CisgICAgfTsKKworICAg
IGNsYXNzIERlZmF1bHRNYXJraW5nVmlvbGF0aW9uQXNzZXJ0aW9uU2NvcGUgeworICAgIHB1Ymxp
YzoKKyNpZiBBU1NFUlRfRU5BQkxFRAorICAgICAgICBEZWZhdWx0TWFya2luZ1Zpb2xhdGlvbkFz
c2VydGlvblNjb3BlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorICAgICAgICAgICAgOiBtX3Zpc2l0
b3IodmlzaXRvcikKKyAgICAgICAgeworICAgICAgICAgICAgbV93YXNDaGVja2luZ0ZvckRlZmF1
bHRNYXJrVmlvbGF0aW9uID0gbV92aXNpdG9yLm1faXNDaGVja2luZ0ZvckRlZmF1bHRNYXJrVmlv
bGF0aW9uOworICAgICAgICAgICAgbV92aXNpdG9yLm1faXNDaGVja2luZ0ZvckRlZmF1bHRNYXJr
VmlvbGF0aW9uID0gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICB+RGVmYXVsdE1hcmtpbmdW
aW9sYXRpb25Bc3NlcnRpb25TY29wZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1fdmlzaXRv
ci5tX2lzQ2hlY2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlvbiA9IG1fd2FzQ2hlY2tpbmdGb3JE
ZWZhdWx0TWFya1Zpb2xhdGlvbjsKKyAgICAgICAgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAg
U2xvdFZpc2l0b3ImIG1fdmlzaXRvcjsKKyAgICAgICAgYm9vbCBtX3dhc0NoZWNraW5nRm9yRGVm
YXVsdE1hcmtWaW9sYXRpb247CisjZWxzZQorICAgICAgICBEZWZhdWx0TWFya2luZ1Zpb2xhdGlv
bkFzc2VydGlvblNjb3BlKFNsb3RWaXNpdG9yJikgeyB9CisjZW5kaWYKICAgICB9OwogCiAgICAg
U2xvdFZpc2l0b3IoSGVhcCYsIENTdHJpbmcgY29kZU5hbWUpOwogICAgIH5TbG90VmlzaXRvcigp
OwogCi0gICAgTWFya1N0YWNrQXJyYXkmIGNvbGxlY3Rvck1hcmtTdGFjaygpIHsgcmV0dXJuIG1f
Y29sbGVjdG9yU3RhY2s7IH0KLSAgICBNYXJrU3RhY2tBcnJheSYgbXV0YXRvck1hcmtTdGFjaygp
IHsgcmV0dXJuIG1fbXV0YXRvclN0YWNrOyB9Ci0gICAgY29uc3QgTWFya1N0YWNrQXJyYXkmIGNv
bGxlY3Rvck1hcmtTdGFjaygpIGNvbnN0IHsgcmV0dXJuIG1fY29sbGVjdG9yU3RhY2s7IH0KLSAg
ICBjb25zdCBNYXJrU3RhY2tBcnJheSYgbXV0YXRvck1hcmtTdGFjaygpIGNvbnN0IHsgcmV0dXJu
IG1fbXV0YXRvclN0YWNrOyB9Ci0gICAgCi0gICAgVk0mIHZtKCk7Ci0gICAgY29uc3QgVk0mIHZt
KCkgY29uc3Q7Ci0gICAgSGVhcCogaGVhcCgpIGNvbnN0OwotCi0gICAgdm9pZCBhcHBlbmQoY29u
c3QgQ29uc2VydmF0aXZlUm9vdHMmKTsKLSAgICAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0
eXBlbmFtZSBUcmFpdHM+IHZvaWQgYXBwZW5kKGNvbnN0IFdyaXRlQmFycmllckJhc2U8VCwgVHJh
aXRzPiYpOwotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFRyYWl0cz4gdm9pZCBh
cHBlbmRIaWRkZW4oY29uc3QgV3JpdGVCYXJyaWVyQmFzZTxULCBUcmFpdHM+Jik7Ci0gICAgdGVt
cGxhdGU8dHlwZW5hbWUgSXRlcmF0b3I+IHZvaWQgYXBwZW5kKEl0ZXJhdG9yIGJlZ2luICwgSXRl
cmF0b3IgZW5kKTsKLSAgICB2b2lkIGFwcGVuZFZhbHVlcyhjb25zdCBXcml0ZUJhcnJpZXJCYXNl
PFVua25vd24sIFJhd1ZhbHVlVHJhaXRzPFVua25vd24+PiosIHNpemVfdCBjb3VudCk7Ci0gICAg
dm9pZCBhcHBlbmRWYWx1ZXNIaWRkZW4oY29uc3QgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duLCBS
YXdWYWx1ZVRyYWl0czxVbmtub3duPj4qLCBzaXplX3QgY291bnQpOworICAgIHZvaWQgYXBwZW5k
KGNvbnN0IENvbnNlcnZhdGl2ZVJvb3RzJikgZmluYWw7CisKKyAgICB1c2luZyBCYXNlOjphcHBl
bmQ7CiAgICAgCiAgICAgLy8gVGhlc2UgZG9uJ3QgcmVxdWlyZSB5b3UgdG8gcHJvdmUgdGhhdCB5
b3UgaGF2ZSBhIFdyaXRlQmFycmllcjw+LiBUaGF0IG1ha2VzIHNlbnNlCiAgICAgLy8gZm9yOgpA
QCAtMTAzLDMyICs5NSwyNSBAQCBwdWJsaWM6CiAgICAgLy8KICAgICAvLyBJZiB5b3UgYXJlIG5v
dCBhIHJvb3QgYW5kIHlvdSBkb24ndCBrbm93IHdoYXQga2luZCBvZiBiYXJyaWVyIHlvdSBoYXZl
LCB0aGVuIHlvdQogICAgIC8vIHNob3VsZG4ndCBjYWxsIHRoZXNlIG1ldGhvZHMuCi0gICAgdm9p
ZCBhcHBlbmRVbmJhcnJpZXJlZChKU1ZhbHVlKTsKLSAgICB2b2lkIGFwcGVuZFVuYmFycmllcmVk
KEpTVmFsdWUqLCBzaXplX3QpOwotICAgIHZvaWQgYXBwZW5kVW5iYXJyaWVyZWQoSlNDZWxsKik7
Ci0gICAgCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICB2b2lkIGFwcGVuZChjb25zdCBX
ZWFrPFQ+JiB3ZWFrKTsKKyAgICB2b2lkIGFwcGVuZFVuYmFycmllcmVkSW1wbChKU0NlbGwqKSBm
aW5hbDsKICAgICAKLSAgICB2b2lkIGFwcGVuZEhpZGRlblVuYmFycmllcmVkKEpTVmFsdWUpOwot
ICAgIHZvaWQgYXBwZW5kSGlkZGVuVW5iYXJyaWVyZWQoSlNDZWxsKik7CisgICAgdm9pZCBhcHBl
bmRIaWRkZW5VbmJhcnJpZXJlZEltcGwoSlNDZWxsKikgZmluYWw7CiAKLSAgICBib29sIGFkZE9w
YXF1ZVJvb3Qodm9pZCopOyAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIHJvb3Qgd2FzIG5ldy4KKyAg
ICBib29sIGFkZE9wYXF1ZVJvb3Qodm9pZCopIGZpbmFsOyAvLyBSZXR1cm5zIHRydWUgaWYgdGhl
IHJvb3Qgd2FzIG5ldy4KICAgICAKLSAgICBib29sIGNvbnRhaW5zT3BhcXVlUm9vdCh2b2lkKikg
Y29uc3Q7Ci0KLSAgICBib29sIGlzRW1wdHkoKSB7IHJldHVybiBtX2NvbGxlY3RvclN0YWNrLmlz
RW1wdHkoKSAmJiBtX211dGF0b3JTdGFjay5pc0VtcHR5KCk7IH0KKyAgICBib29sIGNvbnRhaW5z
T3BhcXVlUm9vdCh2b2lkKikgY29uc3QgZmluYWw7CiAKICAgICBib29sIGlzRmlyc3RWaXNpdCgp
IGNvbnN0IHsgcmV0dXJuIG1faXNGaXJzdFZpc2l0OyB9CiAKKyAgICBib29sIGlzTWFya2VkKGNv
bnN0IHZvaWQqKSBjb25zdCBmaW5hbDsKKyAgICBib29sIGlzTWFya2VkKE1hcmtlZEJsb2NrJiwg
SGVhcENlbGwqKSBjb25zdCBmaW5hbDsKKyAgICBib29sIGlzTWFya2VkKFByZWNpc2VBbGxvY2F0
aW9uJiwgSGVhcENlbGwqKSBjb25zdCBmaW5hbDsKKwogICAgIHZvaWQgZGlkU3RhcnRNYXJraW5n
KCk7CiAgICAgdm9pZCByZXNldCgpOwogICAgIHZvaWQgY2xlYXJNYXJrU3RhY2tzKCk7CiAKICAg
ICBzaXplX3QgYnl0ZXNWaXNpdGVkKCkgY29uc3QgeyByZXR1cm4gbV9ieXRlc1Zpc2l0ZWQ7IH0K
LSAgICBzaXplX3QgdmlzaXRDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fdmlzaXRDb3VudDsgfQot
ICAgIAotICAgIHZvaWQgYWRkVG9WaXNpdENvdW50KHNpemVfdCB2YWx1ZSkgeyBtX3Zpc2l0Q291
bnQgKz0gdmFsdWU7IH0KIAogICAgIHZvaWQgZG9uYXRlKCk7CiAgICAgdm9pZCBkcmFpbihNb25v
dG9uaWNUaW1lIHRpbWVvdXQgPSBNb25vdG9uaWNUaW1lOjppbmZpbml0eSgpKTsKQEAgLTE1MSwy
NCArMTM2LDE4IEBAIHB1YmxpYzoKICAgICAKICAgICAvLyBUaGlzIGluZm9ybXMgdGhlIEdDIGFi
b3V0IGF1eGlsaWFyeSBvZiBzb21lIHNpemUgdGhhdCB3ZSBhcmUga2VlcGluZyBhbGl2ZS4gSWYg
eW91IGRvbid0IGRvCiAgICAgLy8gdGhpcyB0aGVuIHRoZSBzcGFjZSB3aWxsIGJlIGZyZWVkIGF0
IGVuZCBvZiBHQy4KLSAgICB2b2lkIG1hcmtBdXhpbGlhcnkoY29uc3Qgdm9pZCogYmFzZSk7Cisg
ICAgdm9pZCBtYXJrQXV4aWxpYXJ5KGNvbnN0IHZvaWQqIGJhc2UpIGZpbmFsOwogCi0gICAgdm9p
ZCByZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQoc2l6ZV90KTsKKyAgICB2b2lkIHJlcG9ydEV4dHJh
TWVtb3J5VmlzaXRlZChzaXplX3QpIGZpbmFsOwogI2lmIEVOQUJMRShSRVNPVVJDRV9VU0FHRSkK
LSAgICB2b2lkIHJlcG9ydEV4dGVybmFsTWVtb3J5VmlzaXRlZChzaXplX3QpOworICAgIHZvaWQg
cmVwb3J0RXh0ZXJuYWxNZW1vcnlWaXNpdGVkKHNpemVfdCkgZmluYWw7CiAjZW5kaWYKICAgICAK
LSAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKLQotICAgIGJvb2wgaXNBbmFseXpp
bmdIZWFwKCkgY29uc3QgeyByZXR1cm4gISFtX2hlYXBBbmFseXplcjsgfQotICAgIEhlYXBBbmFs
eXplciogaGVhcEFuYWx5emVyKCkgY29uc3QgeyByZXR1cm4gbV9oZWFwQW5hbHl6ZXI7IH0KLSAg
ICAKLSAgICBSb290TWFya1JlYXNvbiByb290TWFya1JlYXNvbigpIGNvbnN0IHsgcmV0dXJuIG1f
cm9vdE1hcmtSZWFzb247IH0KLSAgICB2b2lkIHNldFJvb3RNYXJrUmVhc29uKFJvb3RNYXJrUmVh
c29uIHJlYXNvbikgeyBtX3Jvb3RNYXJrUmVhc29uID0gcmVhc29uOyB9CisgICAgdm9pZCBkdW1w
KFByaW50U3RyZWFtJikgY29uc3QgZmluYWw7CiAKICAgICBIZWFwVmVyc2lvbiBtYXJraW5nVmVy
c2lvbigpIGNvbnN0IHsgcmV0dXJuIG1fbWFya2luZ1ZlcnNpb247IH0KIAotICAgIGJvb2wgbXV0
YXRvcklzU3RvcHBlZCgpIGNvbnN0IHsgcmV0dXJuIG1fbXV0YXRvcklzU3RvcHBlZDsgfQorICAg
IGJvb2wgbXV0YXRvcklzU3RvcHBlZCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fbXV0YXRvcklz
U3RvcHBlZDsgfQogICAgIAogICAgIExvY2smIHJpZ2h0VG9SdW4oKSB7IHJldHVybiBtX3JpZ2h0
VG9SdW47IH0KICAgICAKQEAgLTE4MCwxMCArMTU5LDEwIEBAIHB1YmxpYzoKICAgICAKICAgICB2
b2lkIG9wdGltaXplRm9yU3RvcHBlZE11dGF0b3IoKTsKICAgICAKLSAgICB2b2lkIGRpZFJhY2Uo
Y29uc3QgVmlzaXRSYWNlS2V5Jik7CisgICAgdm9pZCBkaWRSYWNlKGNvbnN0IFZpc2l0UmFjZUtl
eSYpIGZpbmFsOwogICAgIHZvaWQgZGlkUmFjZShKU0NlbGwqIGNlbGwsIGNvbnN0IGNoYXIqIHJl
YXNvbikgeyBkaWRSYWNlKFZpc2l0UmFjZUtleShjZWxsLCByZWFzb24pKTsgfQogICAgIAotICAg
IHZvaWQgdmlzaXRBc0NvbnN0cmFpbnQoY29uc3QgSlNDZWxsKik7CisgICAgdm9pZCB2aXNpdEFz
Q29uc3RyYWludChjb25zdCBKU0NlbGwqKSBmaW5hbDsKICAgICAKICAgICBib29sIGRpZFJlYWNo
VGVybWluYXRpb24oKTsKICAgICAKQEAgLTE5MSw5ICsxNzAsNyBAQCBwdWJsaWM6CiAKICAgICB2
b2lkIGRvbmF0ZUFsbCgpOwogICAgIAotICAgIGNvbnN0IGNoYXIqIGNvZGVOYW1lKCkgY29uc3Qg
eyByZXR1cm4gbV9jb2RlTmFtZS5kYXRhKCk7IH0KLSAgICAKLSAgICBKU19FWFBPUlRfUFJJVkFU
RSB2b2lkIGFkZFBhcmFsbGVsQ29uc3RyYWludFRhc2soUmVmUHRyPFNoYXJlZFRhc2s8dm9pZChT
bG90VmlzaXRvciYpPj4pOworICAgIHZvaWQgYWRkUGFyYWxsZWxDb25zdHJhaW50VGFzayhSZWZQ
dHI8U2hhcmVkVGFzazx2b2lkKEFic3RyYWN0U2xvdFZpc2l0b3ImKT4+KSBmaW5hbDsKIAogcHJp
dmF0ZToKICAgICBmcmllbmQgY2xhc3MgUGFyYWxsZWxNb2RlRW5hYmxlcjsKQEAgLTIzMiwzOSAr
MjA5LDI1IEBAIHByaXZhdGU6CiAKICAgICBNYXJrU3RhY2tBcnJheSYgY29ycmVzcG9uZGluZ0ds
b2JhbFN0YWNrKE1hcmtTdGFja0FycmF5Jik7CiAKLSAgICBNYXJrU3RhY2tBcnJheSBtX2NvbGxl
Y3RvclN0YWNrOwotICAgIE1hcmtTdGFja0FycmF5IG1fbXV0YXRvclN0YWNrOwotICAgIAogICAg
IHNpemVfdCBtX2J5dGVzVmlzaXRlZDsKLSAgICBzaXplX3QgbV92aXNpdENvdW50OwogICAgIHNp
emVfdCBtX25vbkNlbGxWaXNpdENvdW50IHsgMCB9OyAvLyBVc2VkIGZvciBpbmNyZW1lbnRhbCBk
cmFpbmluZywgaWdub3JlZCBvdGhlcndpc2UuCiAgICAgQ2hlY2tlZFNpemUgbV9leHRyYU1lbW9y
eVNpemUgeyAwIH07CiAgICAgYm9vbCBtX2lzSW5QYXJhbGxlbE1vZGU7CiAgICAgYm9vbCBtX2ln
bm9yZU5ld09wYXF1ZVJvb3RzIHsgZmFsc2UgfTsgLy8gVXNlZnVsIGFzIGEgZGVidWdnaW5nIG1v
ZGUuCiAKICAgICBIZWFwVmVyc2lvbiBtX21hcmtpbmdWZXJzaW9uOwotICAgIAotICAgIEhlYXAm
IG1faGVhcDsKIAogICAgIEhlYXBBbmFseXplciogbV9oZWFwQW5hbHl6ZXIgeyBudWxscHRyIH07
CiAgICAgSlNDZWxsKiBtX2N1cnJlbnRDZWxsIHsgbnVsbHB0ciB9OwotICAgIFJvb3RNYXJrUmVh
c29uIG1fcm9vdE1hcmtSZWFzb24geyBSb290TWFya1JlYXNvbjo6Tm9uZSB9OwogICAgIGJvb2wg
bV9pc0ZpcnN0VmlzaXQgeyBmYWxzZSB9OwogICAgIGJvb2wgbV9tdXRhdG9ySXNTdG9wcGVkIHsg
ZmFsc2UgfTsKICAgICBib29sIG1fY2FuT3B0aW1pemVGb3JTdG9wcGVkTXV0YXRvciB7IGZhbHNl
IH07CiAgICAgTG9jayBtX3JpZ2h0VG9SdW47CiAgICAgCi0gICAgQ1N0cmluZyBtX2NvZGVOYW1l
OwotICAgIAotICAgIE1hcmtpbmdDb25zdHJhaW50KiBtX2N1cnJlbnRDb25zdHJhaW50IHsgbnVs
bHB0ciB9OwotICAgIE1hcmtpbmdDb25zdHJhaW50U29sdmVyKiBtX2N1cnJlbnRTb2x2ZXIgeyBu
dWxscHRyIH07Ci0gICAgCiAgICAgLy8gUHV0IHBhZGRpbmcgaGVyZSB0byBtaXRpZ2F0ZSBmYWxz
ZSBzaGFyaW5nIGJldHdlZW4gbXVsdGlwbGUgU2xvdFZpc2l0b3JzLgogICAgIGNoYXIgcGFkZGlu
Z1s2NF07Ci1wdWJsaWM6CiAjaWYgQVNTRVJUX0VOQUJMRUQKLSAgICBib29sIG1faXNDaGVja2lu
Z0ZvckRlZmF1bHRNYXJrVmlvbGF0aW9uOwotICAgIGJvb2wgbV9pc0RyYWluaW5nOworICAgIGJv
b2wgbV9pc0NoZWNraW5nRm9yRGVmYXVsdE1hcmtWaW9sYXRpb24geyBmYWxzZSB9OwogI2VuZGlm
CiB9OwogCkBAIC0yODcsMjMgKzI1MCwyMyBAQCBwcml2YXRlOgogICAgIFNsb3RWaXNpdG9yJiBt
X3N0YWNrOwogfTsKIAotY2xhc3MgU2V0Um9vdE1hcmtSZWFzb25TY29wZSB7Ci1wdWJsaWM6Ci0g
ICAgU2V0Um9vdE1hcmtSZWFzb25TY29wZShTbG90VmlzaXRvciYgdmlzaXRvciwgU2xvdFZpc2l0
b3I6OlJvb3RNYXJrUmVhc29uIHJlYXNvbikKLSAgICAgICAgOiBtX3Zpc2l0b3IodmlzaXRvcikK
LSAgICAgICAgLCBtX3ByZXZpb3VzUmVhc29uKHZpc2l0b3Iucm9vdE1hcmtSZWFzb24oKSkKLSAg
ICB7Ci0gICAgICAgIG1fdmlzaXRvci5zZXRSb290TWFya1JlYXNvbihyZWFzb24pOwotICAgIH0K
LQotICAgIH5TZXRSb290TWFya1JlYXNvblNjb3BlKCkKLSAgICB7Ci0gICAgICAgIG1fdmlzaXRv
ci5zZXRSb290TWFya1JlYXNvbihtX3ByZXZpb3VzUmVhc29uKTsKLSAgICB9Ci0KLXByaXZhdGU6
Ci0gICAgU2xvdFZpc2l0b3ImIG1fdmlzaXRvcjsKLSAgICBTbG90VmlzaXRvcjo6Um9vdE1hcmtS
ZWFzb24gbV9wcmV2aW91c1JlYXNvbjsKLX07Ci0KKy8vY2xhc3MgU2V0Um9vdE1hcmtSZWFzb25T
Y29wZSB7CisvL3B1YmxpYzoKKy8vICAgIFNldFJvb3RNYXJrUmVhc29uU2NvcGUoU2xvdFZpc2l0
b3ImIHZpc2l0b3IsIFNsb3RWaXNpdG9yOjpSb290TWFya1JlYXNvbiByZWFzb24pCisvLyAgICAg
ICAgOiBtX3Zpc2l0b3IodmlzaXRvcikKKy8vICAgICAgICAsIG1fcHJldmlvdXNSZWFzb24odmlz
aXRvci5yb290TWFya1JlYXNvbigpKQorLy8gICAgeworLy8gICAgICAgIG1fdmlzaXRvci5zZXRS
b290TWFya1JlYXNvbihyZWFzb24pOworLy8gICAgfQorLy8KKy8vICAgIH5TZXRSb290TWFya1Jl
YXNvblNjb3BlKCkKKy8vICAgIHsKKy8vICAgICAgICBtX3Zpc2l0b3Iuc2V0Um9vdE1hcmtSZWFz
b24obV9wcmV2aW91c1JlYXNvbik7CisvLyAgICB9CisvLworLy9wcml2YXRlOgorLy8gICAgU2xv
dFZpc2l0b3ImIG1fdmlzaXRvcjsKKy8vICAgIFNsb3RWaXNpdG9yOjpSb290TWFya1JlYXNvbiBt
X3ByZXZpb3VzUmVhc29uOworLy99OworLy8KIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmgJKHJldmlz
aW9uIDI3Mjc2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9ySW5s
aW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMi0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjUsMjYgKzI1LDE4IEBACiAKICNwcmFnbWEgb25j
ZQogCisjaW5jbHVkZSAiQWJzdHJhY3RTbG90VmlzaXRvcklubGluZXMuaCIKICNpbmNsdWRlICJT
bG90VmlzaXRvci5oIgotI2luY2x1ZGUgIldlYWsuaCIKLSNpbmNsdWRlICJXZWFrSW5saW5lcy5o
IgorI2luY2x1ZGUgIk1hcmtlZEJsb2NrLmgiCisjaW5jbHVkZSAiUHJlY2lzZUFsbG9jYXRpb24u
aCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBTbG90VmlzaXRvcjo6
YXBwZW5kVW5iYXJyaWVyZWQoSlNWYWx1ZSogc2xvdCwgc2l6ZV90IGNvdW50KQotewotICAgIGZv
ciAoc2l6ZV90IGkgPSBjb3VudDsgaS0tOykKLSAgICAgICAgYXBwZW5kVW5iYXJyaWVyZWQoc2xv
dFtpXSk7Ci19Ci0KLUFMV0FZU19JTkxJTkUgdm9pZCBTbG90VmlzaXRvcjo6YXBwZW5kVW5iYXJy
aWVyZWQoSlNDZWxsKiBjZWxsKQorQUxXQVlTX0lOTElORSB2b2lkIFNsb3RWaXNpdG9yOjphcHBl
bmRVbmJhcnJpZXJlZEltcGwoSlNDZWxsKiBjZWxsKQogewogICAgIC8vIFRoaXMgbmVlZHMgdG8g
YmUgd3JpdHRlbiBpbiBhIHZlcnkgc3BlY2lmaWMgd2F5IHRvIGVuc3VyZSB0aGF0IGl0IGdldHMg
aW5saW5lZAogICAgIC8vIHByb3Blcmx5LiBJbiBwYXJ0aWN1bGFyLCBpdCBhcHBlYXJzIHRoYXQg
dXNpbmcgdGVtcGxhdGVzIGhlcmUgYnJlYWtzIEFMV0FZU19JTkxJTkUuCiAgICAgCi0gICAgaWYg
KCFjZWxsKQotICAgICAgICByZXR1cm47Ci0gICAgCiAgICAgRGVwZW5kZW5jeSBkZXBlbmRlbmN5
OwogICAgIGlmIChVTkxJS0VMWShjZWxsLT5pc1ByZWNpc2VBbGxvY2F0aW9uKCkpKSB7CiAgICAg
ICAgIGlmIChMSUtFTFkoY2VsbC0+cHJlY2lzZUFsbG9jYXRpb24oKS5pc01hcmtlZCgpKSkgewpA
QCAtNjMsMjYgKzU1LDExIEBAIEFMV0FZU19JTkxJTkUgdm9pZCBTbG90VmlzaXRvcjo6YXBwZW5k
VW4KICAgICBhcHBlbmRTbG93KGNlbGwsIGRlcGVuZGVuY3kpOwogfQogCi1BTFdBWVNfSU5MSU5F
IHZvaWQgU2xvdFZpc2l0b3I6OmFwcGVuZFVuYmFycmllcmVkKEpTVmFsdWUgdmFsdWUpCi17Ci0g
ICAgaWYgKHZhbHVlLmlzQ2VsbCgpKQotICAgICAgICBhcHBlbmRVbmJhcnJpZXJlZCh2YWx1ZS5h
c0NlbGwoKSk7Ci19Ci0KLUFMV0FZU19JTkxJTkUgdm9pZCBTbG90VmlzaXRvcjo6YXBwZW5kSGlk
ZGVuVW5iYXJyaWVyZWQoSlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUuaXNDZWxsKCkp
Ci0gICAgICAgIGFwcGVuZEhpZGRlblVuYmFycmllcmVkKHZhbHVlLmFzQ2VsbCgpKTsKLX0KLQot
QUxXQVlTX0lOTElORSB2b2lkIFNsb3RWaXNpdG9yOjphcHBlbmRIaWRkZW5VbmJhcnJpZXJlZChK
U0NlbGwqIGNlbGwpCitBTFdBWVNfSU5MSU5FIHZvaWQgU2xvdFZpc2l0b3I6OmFwcGVuZEhpZGRl
blVuYmFycmllcmVkSW1wbChKU0NlbGwqIGNlbGwpCiB7CiAgICAgLy8gVGhpcyBuZWVkcyB0byBi
ZSB3cml0dGVuIGluIGEgdmVyeSBzcGVjaWZpYyB3YXkgdG8gZW5zdXJlIHRoYXQgaXQgZ2V0cyBp
bmxpbmVkCiAgICAgLy8gcHJvcGVybHkuIEluIHBhcnRpY3VsYXIsIGl0IGFwcGVhcnMgdGhhdCB1
c2luZyB0ZW1wbGF0ZXMgaGVyZSBicmVha3MgQUxXQVlTX0lOTElORS4KICAgICAKLSAgICBpZiAo
IWNlbGwpCi0gICAgICAgIHJldHVybjsKLSAgICAKICAgICBEZXBlbmRlbmN5IGRlcGVuZGVuY3k7
CiAgICAgaWYgKFVOTElLRUxZKGNlbGwtPmlzUHJlY2lzZUFsbG9jYXRpb24oKSkpIHsKICAgICAg
ICAgaWYgKExJS0VMWShjZWxsLT5wcmVjaXNlQWxsb2NhdGlvbigpLmlzTWFya2VkKCkpKQpAQCAt
OTcsNDMgKzc0LDYgQEAgQUxXQVlTX0lOTElORSB2b2lkIFNsb3RWaXNpdG9yOjphcHBlbmRIaQog
ICAgIGFwcGVuZEhpZGRlblNsb3coY2VsbCwgZGVwZW5kZW5jeSk7CiB9CiAKLXRlbXBsYXRlPHR5
cGVuYW1lIFQ+Ci1BTFdBWVNfSU5MSU5FIHZvaWQgU2xvdFZpc2l0b3I6OmFwcGVuZChjb25zdCBX
ZWFrPFQ+JiB3ZWFrKQotewotICAgIGFwcGVuZFVuYmFycmllcmVkKHdlYWsuZ2V0KCkpOwotfQot
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBUcmFpdHM+Ci1BTFdBWVNfSU5MSU5FIHZv
aWQgU2xvdFZpc2l0b3I6OmFwcGVuZChjb25zdCBXcml0ZUJhcnJpZXJCYXNlPFQsIFRyYWl0cz4m
IHNsb3QpCi17Ci0gICAgYXBwZW5kVW5iYXJyaWVyZWQoc2xvdC5nZXQoKSk7Ci19Ci0KLXRlbXBs
YXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFRyYWl0cz4KLUFMV0FZU19JTkxJTkUgdm9pZCBTbG90
VmlzaXRvcjo6YXBwZW5kSGlkZGVuKGNvbnN0IFdyaXRlQmFycmllckJhc2U8VCwgVHJhaXRzPiYg
c2xvdCkKLXsKLSAgICBhcHBlbmRIaWRkZW5VbmJhcnJpZXJlZChzbG90LmdldCgpKTsKLX0KLQot
dGVtcGxhdGU8dHlwZW5hbWUgSXRlcmF0b3I+Ci1BTFdBWVNfSU5MSU5FIHZvaWQgU2xvdFZpc2l0
b3I6OmFwcGVuZChJdGVyYXRvciBiZWdpbiwgSXRlcmF0b3IgZW5kKQotewotICAgIGZvciAoYXV0
byBpdCA9IGJlZ2luOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIGFwcGVuZCgqaXQpOwotfQot
Ci1BTFdBWVNfSU5MSU5FIHZvaWQgU2xvdFZpc2l0b3I6OmFwcGVuZFZhbHVlcyhjb25zdCBXcml0
ZUJhcnJpZXJCYXNlPFVua25vd24+KiBiYXJyaWVycywgc2l6ZV90IGNvdW50KQotewotICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgY291bnQ7ICsraSkKLSAgICAgICAgYXBwZW5kKGJhcnJpZXJz
W2ldKTsKLX0KLQotQUxXQVlTX0lOTElORSB2b2lkIFNsb3RWaXNpdG9yOjphcHBlbmRWYWx1ZXNI
aWRkZW4oY29uc3QgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiogYmFycmllcnMsIHNpemVfdCBj
b3VudCkKLXsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpCi0gICAgICAg
IGFwcGVuZEhpZGRlbihiYXJyaWVyc1tpXSk7Ci19Ci0KIGlubGluZSBib29sIFNsb3RWaXNpdG9y
OjphZGRPcGFxdWVSb290KHZvaWQqIHB0cikKIHsKICAgICBpZiAoIXB0cikKQEAgLTE1MSw2ICs5
MSwyMSBAQCBpbmxpbmUgYm9vbCBTbG90VmlzaXRvcjo6Y29udGFpbnNPcGFxdWVSCiAgICAgcmV0
dXJuIGhlYXAoKS0+bV9vcGFxdWVSb290cy5jb250YWlucyhwdHIpOwogfQogCitpbmxpbmUgYm9v
bCBTbG90VmlzaXRvcjo6aXNNYXJrZWQoY29uc3Qgdm9pZCogcCkgY29uc3QKK3sKKyAgICByZXR1
cm4gaGVhcCgpLT5pc01hcmtlZChwKTsKK30KKworaW5saW5lIGJvb2wgU2xvdFZpc2l0b3I6Omlz
TWFya2VkKE1hcmtlZEJsb2NrJiBjb250YWluZXIsIEhlYXBDZWxsKiBjZWxsKSBjb25zdAorewor
ICAgIHJldHVybiBjb250YWluZXIuaXNNYXJrZWQobWFya2luZ1ZlcnNpb24oKSwgY2VsbCk7Cit9
CisKK2lubGluZSBib29sIFNsb3RWaXNpdG9yOjppc01hcmtlZChQcmVjaXNlQWxsb2NhdGlvbiYg
Y29udGFpbmVyLCBIZWFwQ2VsbCogY2VsbCkgY29uc3QKK3sKKyAgICByZXR1cm4gY29udGFpbmVy
LmlzTWFya2VkKG1hcmtpbmdWZXJzaW9uKCksIGNlbGwpOworfQorCiBpbmxpbmUgdm9pZCBTbG90
VmlzaXRvcjo6cmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKHNpemVfdCBzaXplKQogewogICAgIGlm
IChtX2lzRmlyc3RWaXNpdCkgewpAQCAtMTY5LDIxICsxMjQsNiBAQCBpbmxpbmUgdm9pZCBTbG90
VmlzaXRvcjo6cmVwb3J0RXh0ZXJuYWxNCiB9CiAjZW5kaWYKIAotaW5saW5lIEhlYXAqIFNsb3RW
aXNpdG9yOjpoZWFwKCkgY29uc3QKLXsKLSAgICByZXR1cm4gJm1faGVhcDsKLX0KLQotaW5saW5l
IFZNJiBTbG90VmlzaXRvcjo6dm0oKQotewotICAgIHJldHVybiBtX2hlYXAudm0oKTsKLX0KLQot
aW5saW5lIGNvbnN0IFZNJiBTbG90VmlzaXRvcjo6dm0oKSBjb25zdAotewotICAgIHJldHVybiBt
X2hlYXAudm0oKTsKLX0KLQogdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KIEl0ZXJhdGlvblN0YXR1
cyBTbG90VmlzaXRvcjo6Zm9yRWFjaE1hcmtTdGFjayhjb25zdCBGdW5jJiBmdW5jKQogewpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3JNYWNyb3MuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvck1hY3Jvcy5oCShu
b25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yTWFj
cm9zLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMzMgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworbmFtZXNwYWNlIEpT
QyB7CisKK2NsYXNzIEFic3RyYWN0U2xvdFZpc2l0b3I7CitjbGFzcyBKU0NlbGw7CitjbGFzcyBT
bG90VmlzaXRvcjsKKworI2RlZmluZSBERUNMQVJFX1VOVVNFRF9TTE9UX1ZJU0lUT1JfU1RSVUNU
X0VYUEFOREVSMihjb3VudGVyXykgXAorICAgIHN0cnVjdCBVbnVzZWRTbG90VmlzaXRvclN0cnVj
dFNvV2VDYW5IYXZlQVNlbWljb2xvbiMjY291bnRlcl8geyB9CisKKyNkZWZpbmUgREVDTEFSRV9V
TlVTRURfU0xPVF9WSVNJVE9SX1NUUlVDVF9FWFBBTkRFUihjb3VudGVyXykgXAorICAgIERFQ0xB
UkVfVU5VU0VEX1NMT1RfVklTSVRPUl9TVFJVQ1RfRVhQQU5ERVIyKGNvdW50ZXJfKQorCisjZGVm
aW5lIERFQ0xBUkVfVU5VU0VEX1NMT1RfVklTSVRPUl9TVFJVQ1QoKSBcCisgICAgREVDTEFSRV9V
TlVTRURfU0xPVF9WSVNJVE9SX1NUUlVDVF9FWFBBTkRFUihfX0NPVU5URVJfXykKKworLy8gTWFj
cm9zIGZvciBpbnN0YW5jZSBjdXN0b20gdmlzaXRvciBtZXRob2QuCisKKyNkZWZpbmUgREVDTEFS
RV9JTlNUQU5DRV9TTE9UX1ZJU0lUT1JfTUVUSE9EX0lNUEwocmV0dXJuVHlwZV8sIG1ldGhvZE5h
bWVfLCBwb3N0TW9kaWZpZXJfKSBcCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gcmV0
dXJuVHlwZV8gbWV0aG9kTmFtZV8jI0ltcGwoVmlzaXRvciYgdmlzaXRvcik7IFwKKyAgICByZXR1
cm5UeXBlXyBtZXRob2ROYW1lXyhTbG90VmlzaXRvciYpIHBvc3RNb2RpZmllcl87IFwKKyAgICBy
ZXR1cm5UeXBlXyBtZXRob2ROYW1lXyhBYnN0cmFjdFNsb3RWaXNpdG9yJikgcG9zdE1vZGlmaWVy
XzsgXAorICAgIERFQ0xBUkVfVU5VU0VEX1NMT1RfVklTSVRPUl9TVFJVQ1QoKQorCisjZGVmaW5l
IERFQ0xBUkVfSU5TVEFOQ0VfU0xPVF9WSVNJVE9SX01FVEhPRChyZXR1cm5UeXBlXywgbWV0aG9k
TmFtZV8pIFwKKyAgICBERUNMQVJFX0lOU1RBTkNFX1NMT1RfVklTSVRPUl9NRVRIT0RfSU1QTChy
ZXR1cm5UeXBlXywgbWV0aG9kTmFtZV8sICkKKworCisjZGVmaW5lIERFRklORV9JTlNUQU5DRV9T
TE9UX1ZJU0lUT1JfTUVUSE9EKHJldHVyblR5cGVfLCBjbGFzc05hbWVfLCBtZXRob2ROYW1lXykg
XAorICAgIHJldHVyblR5cGVfIGNsYXNzTmFtZV86Om1ldGhvZE5hbWVfKFNsb3RWaXNpdG9yJiB2
aXNpdG9yKSB7IG1ldGhvZE5hbWVfIyNJbXBsKHZpc2l0b3IpOyB9IFwKKyAgICByZXR1cm5UeXBl
XyBjbGFzc05hbWVfOjptZXRob2ROYW1lXyhBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKSAg
eyBtZXRob2ROYW1lXyMjSW1wbCh2aXNpdG9yKTsgfSBcCisgICAgREVDTEFSRV9VTlVTRURfU0xP
VF9WSVNJVE9SX1NUUlVDVCgpCisKKy8vIE1hY3JvcyBmb3IgaW5zdGFuY2UgdmlzaXRDaGlsZHJl
bigpLgorCisjZGVmaW5lIERFQ0xBUkVfSU5TVEFOQ0VfVklTSVRfQ0hJTERSRU4gXAorICAgIERF
Q0xBUkVfSU5TVEFOQ0VfU0xPVF9WSVNJVE9SX01FVEhPRCh2b2lkLCB2aXNpdENoaWxkcmVuKQor
CisKKyNkZWZpbmUgREVGSU5FX0lOU1RBTkNFX1ZJU0lUX0NISUxEUkVOKGNsYXNzTmFtZV8pIFwK
KyAgICBERUZJTkVfSU5TVEFOQ0VfU0xPVF9WSVNJVE9SX01FVEhPRCh2b2lkLCBjbGFzc05hbWVf
LCB2aXNpdENoaWxkcmVuKQorCisvLyBNYWNyb3MgZm9yIHN0YXRpYyB2aXNpdENoaWxkcmVuKCku
CisKKyNkZWZpbmUgREVDTEFSRV9WSVNJVF9DSElMRFJFTl9JTVBMIFwKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBWaXNpdG9yPiBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqLCBW
aXNpdG9yJikKKworI2RlZmluZSBERUNMQVJFX1ZJU0lUX0NISUxEUkVOIFwKKyAgICBERUNMQVJF
X1ZJU0lUX0NISUxEUkVOX0lNUEw7IFwKKyAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpT
Q2VsbCogY2VsbCwgQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcik7IFwKKyAgICBzdGF0aWMg
dm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisK
KyNkZWZpbmUgREVDTEFSRV9FWFBPUlRfVklTSVRfQ0hJTERSRU4gXAorICAgIERFQ0xBUkVfVklT
SVRfQ0hJTERSRU5fSU1QTDsgXAorICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIHZp
c2l0Q2hpbGRyZW4oSlNDZWxsKiwgQWJzdHJhY3RTbG90VmlzaXRvciYpOyBcCisgICAgSlNfRVhQ
T1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRv
ciYpCisKKyNkZWZpbmUgREVDTEFSRV9JTkxJTkVfVklTSVRfQ0hJTERSRU4gXAorICAgIERFQ0xB
UkVfVklTSVRfQ0hJTERSRU5fSU1QTDsgXAorICAgIGlubGluZSBzdGF0aWMgdm9pZCB2aXNpdENo
aWxkcmVuKEpTQ2VsbCosIEFic3RyYWN0U2xvdFZpc2l0b3ImKTsgXAorICAgIGlubGluZSBzdGF0
aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJikKKworI2RlZmluZSBE
RUNMQVJFX1RFTVBMQVRFX1ZJU0lUX0NISUxEUkVOIFwKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxE
UkVOCisKKworI2RlZmluZSBERUZJTkVfVklTSVRfQ0hJTERSRU4oY2xhc3NOYW1lXykgXAorICAg
IHZvaWQgY2xhc3NOYW1lXzo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIEFic3RyYWN0U2xv
dFZpc2l0b3ImIHZpc2l0b3IpIFwKKyAgICB7IFwKKyAgICAgICAgQWJzdHJhY3RTbG90VmlzaXRv
cjo6Q29udGV4dCBjb250ZXh0KHZpc2l0b3IsIGNlbGwpOyBcCisgICAgICAgIHZpc2l0Q2hpbGRy
ZW5JbXBsKGNlbGwsIHZpc2l0b3IpOyBcCisgICAgfSBcCisgICAgdm9pZCBjbGFzc05hbWVfOjp2
aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsgdmlzaXRD
aGlsZHJlbkltcGwoY2VsbCwgdmlzaXRvcik7IH0gXAorICAgIERFQ0xBUkVfVU5VU0VEX1NMT1Rf
VklTSVRPUl9TVFJVQ1QoKQorCisjZGVmaW5lIERFRklORV9FWFBPUlRfVklTSVRfQ0hJTERSRU4o
Y2xhc3NOYW1lXykgXAorICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgY2xhc3NOYW1lXzo6dmlz
aXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpIFwK
KyAgICB7IFwKKyAgICAgICAgQWJzdHJhY3RTbG90VmlzaXRvcjo6Q29udGV4dCBjb250ZXh0KHZp
c2l0b3IsIGNlbGwpOyBcCisgICAgICAgIHZpc2l0Q2hpbGRyZW5JbXBsKGNlbGwsIHZpc2l0b3Ip
OyBcCisgICAgfSBcCisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBjbGFzc05hbWVfOjp2aXNp
dENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsgdmlzaXRDaGls
ZHJlbkltcGwoY2VsbCwgdmlzaXRvcik7IH0gXAorICAgIERFQ0xBUkVfVU5VU0VEX1NMT1RfVklT
SVRPUl9TVFJVQ1QoKQorCisjZGVmaW5lIERFRklORV9JTkxJTkVfVklTSVRfQ0hJTERSRU4oY2xh
c3NOYW1lXykgXAorICAgIGlubGluZSB2b2lkIGNsYXNzTmFtZV86OnZpc2l0Q2hpbGRyZW4oSlND
ZWxsKiBjZWxsLCBBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBcCisgICAgeyBcCisgICAg
ICAgIEFic3RyYWN0U2xvdFZpc2l0b3I6OkNvbnRleHQgY29udGV4dCh2aXNpdG9yLCBjZWxsKTsg
XAorICAgICAgICB2aXNpdENoaWxkcmVuSW1wbChjZWxsLCB2aXNpdG9yKTsgXAorICAgIH0gXAor
ICAgIGlubGluZSB2b2lkIGNsYXNzTmFtZV86OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBT
bG90VmlzaXRvciYgdmlzaXRvcikgeyB2aXNpdENoaWxkcmVuSW1wbChjZWxsLCB2aXNpdG9yKTsg
fSBcCisgICAgREVDTEFSRV9VTlVTRURfU0xPVF9WSVNJVE9SX1NUUlVDVCgpCisKKyNkZWZpbmUg
REVGSU5FX1RFTVBMQVRFX1ZJU0lUX0NISUxEUkVOKHRlbXBsYXRlQ2xhdXNlXywgY2xhc3NOYW1l
XykgXAorICAgIHRlbXBsYXRlQ2xhdXNlXyB2b2lkIGNsYXNzTmFtZV86OnZpc2l0Q2hpbGRyZW4o
SlNDZWxsKiBjZWxsLCBBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBcCisgICAgeyBcCisg
ICAgICAgIEFic3RyYWN0U2xvdFZpc2l0b3I6OkNvbnRleHQgY29udGV4dCh2aXNpdG9yLCBjZWxs
KTsgXAorICAgICAgICB2aXNpdENoaWxkcmVuSW1wbChjZWxsLCB2aXNpdG9yKTsgXAorICAgIH0g
XAorICAgIHRlbXBsYXRlQ2xhdXNlXyB2b2lkIGNsYXNzTmFtZV86OnZpc2l0Q2hpbGRyZW4oSlND
ZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikgeyB2aXNpdENoaWxkcmVuSW1wbChjZWxs
LCB2aXNpdG9yKTsgfSBcCisgICAgREVDTEFSRV9VTlVTRURfU0xPVF9WSVNJVE9SX1NUUlVDVCgp
CisKK30gLy8gbmFtZXNwYWNlIEpTQworCit1c2luZyBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3I7
Cit1c2luZyBKU0M6OkpTQ2VsbDsKK3VzaW5nIEpTQzo6U2xvdFZpc2l0b3I7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdWJzcGFjZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL1N1YnNwYWNlLmgJKHJldmlzaW9uIDI3Mjc2OSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N1YnNwYWNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMTggQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNCw2
ICszNCw3IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCitjbGFzcyBBYnN0cmFjdFNsb3RWaXNpdG9y
OwogY2xhc3MgQWxpZ25lZE1lbW9yeUFsbG9jYXRvcjsKIGNsYXNzIEhlYXBDZWxsVHlwZTsKIApA
QCAtODcsNyArODgsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBmb3JFYWNoTWFya2VkQ2VsbChjb25z
dCBGdW5jJik7CiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KLSAgICBSZWY8U2hh
cmVkVGFzazx2b2lkKFNsb3RWaXNpdG9yJik+PiBmb3JFYWNoTWFya2VkQ2VsbEluUGFyYWxsZWwo
Y29uc3QgRnVuYyYpOworICAgIFJlZjxTaGFyZWRUYXNrPHZvaWQoQWJzdHJhY3RTbG90VmlzaXRv
ciYpPj4gZm9yRWFjaE1hcmtlZENlbGxJblBhcmFsbGVsKGNvbnN0IEZ1bmMmKTsKIAogICAgIHRl
bXBsYXRlPHR5cGVuYW1lIEZ1bmM+CiAgICAgdm9pZCBmb3JFYWNoTGl2ZUNlbGwoY29uc3QgRnVu
YyYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3Vic3BhY2VJbmxpbmVzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3Vic3BhY2VJbmxpbmVz
LmgJKHJldmlzaW9uIDI3Mjc2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N1YnNw
YWNlSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxNy0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODYsOSArODYsOSBAQCB2b2lkIFN1YnNw
YWNlOjpmb3JFYWNoTWFya2VkQ2VsbChjb25zdCBGCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEZ1
bmM+Ci1SZWY8U2hhcmVkVGFzazx2b2lkKFNsb3RWaXNpdG9yJik+PiBTdWJzcGFjZTo6Zm9yRWFj
aE1hcmtlZENlbGxJblBhcmFsbGVsKGNvbnN0IEZ1bmMmIGZ1bmMpCitSZWY8U2hhcmVkVGFzazx2
b2lkKEFic3RyYWN0U2xvdFZpc2l0b3ImKT4+IFN1YnNwYWNlOjpmb3JFYWNoTWFya2VkQ2VsbElu
UGFyYWxsZWwoY29uc3QgRnVuYyYgZnVuYykKIHsKLSAgICBjbGFzcyBUYXNrIGZpbmFsIDogcHVi
bGljIFNoYXJlZFRhc2s8dm9pZChTbG90VmlzaXRvciYpPiB7CisgICAgY2xhc3MgVGFzayBmaW5h
bCA6IHB1YmxpYyBTaGFyZWRUYXNrPHZvaWQoQWJzdHJhY3RTbG90VmlzaXRvciYpPiB7CiAgICAg
cHVibGljOgogICAgICAgICBUYXNrKFN1YnNwYWNlJiBzdWJzcGFjZSwgY29uc3QgRnVuYyYgZnVu
YykKICAgICAgICAgICAgIDogbV9zdWJzcGFjZShzdWJzcGFjZSkKQEAgLTk3LDcgKzk3LDcgQEAg
UmVmPFNoYXJlZFRhc2s8dm9pZChTbG90VmlzaXRvciYpPj4gU3VicwogICAgICAgICB7CiAgICAg
ICAgIH0KICAgICAgICAgCi0gICAgICAgIHZvaWQgcnVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBm
aW5hbAorICAgICAgICB2b2lkIHJ1bihBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBmaW5h
bAogICAgICAgICB7CiAgICAgICAgICAgICB3aGlsZSAoTWFya2VkQmxvY2s6OkhhbmRsZSogaGFu
ZGxlID0gbV9ibG9ja1NvdXJjZS0+cnVuKCkpIHsKICAgICAgICAgICAgICAgICBoYW5kbGUtPmZv
ckVhY2hNYXJrZWRDZWxsKApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVmVyaWZp
ZXJTbG90VmlzaXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvVmVyaWZpZXJTbG90VmlzaXRvci5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvVmVyaWZpZXJTbG90VmlzaXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwzNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiVmVyaWZpZXJTbG90VmlzaXRvci5oIgorCisjaW5jbHVkZSAiQ29uc2VydmF0aXZlUm9vdHMu
aCIKKyNpbmNsdWRlICJHQ1NlZ21lbnRlZEFycmF5SW5saW5lcy5oIgorI2luY2x1ZGUgIkhlYXBD
ZWxsLmgiCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUgIlZNLmgiCisjaW5jbHVk
ZSAiVmVyaWZpZXJTbG90VmlzaXRvcklubGluZXMuaCIKKyNpbmNsdWRlIDx3dGYvU3RhY2tUcmFj
ZS5oPgorCituYW1lc3BhY2UgSlNDIHsKKwordXNpbmcgTWFya2VyRGF0YSA9IFZlcmlmaWVyU2xv
dFZpc2l0b3I6Ok1hcmtlckRhdGE7CisKK2NvbnN0ZXhwciBpbnQgbWF4TWFya2luZ1N0YWNrRnJh
bWVzVG9DYXB0dXJlID0gMTAwOworCitNYXJrZXJEYXRhOjpNYXJrZXJEYXRhKEhlYXBDZWxsKiBw
YXJlbnQsIHN0ZDo6dW5pcXVlX3B0cjxTdGFja1RyYWNlPiYmIHN0YWNrKQorICAgIDogcGFyZW50
KHBhcmVudCkKKyAgICAsIHN0YWNrKFdURk1vdmUoc3RhY2spKQoreworfQorCitWZXJpZmllclNs
b3RWaXNpdG9yOjpNYXJrZWRCbG9ja0RhdGE6Ok1hcmtlZEJsb2NrRGF0YShNYXJrZWRCbG9jayog
YmxvY2spCisgICAgOiBtX2Jsb2NrKGJsb2NrKQorICAgICwgbV9hdG9tcyhNYXJrZWRCbG9jazo6
YXRvbXNQZXJCbG9jaykKK3sKK30KKwordm9pZCBWZXJpZmllclNsb3RWaXNpdG9yOjpNYXJrZWRC
bG9ja0RhdGE6OmFkZE1hcmtlckRhdGEodW5zaWduZWQgYXRvbU51bWJlciwgTWFya2VyRGF0YSYm
IG1hcmtlcikKK3sKKyAgICBpZiAobV9tYXJrZXJzLmlzRW1wdHkoKSkKKyAgICAgICAgbV9tYXJr
ZXJzLmdyb3coTWFya2VkQmxvY2s6OmF0b21zUGVyQmxvY2spOworICAgIG1fbWFya2Vyc1thdG9t
TnVtYmVyXSA9IFdURk1vdmUobWFya2VyKTsKK30KKworY29uc3QgTWFya2VyRGF0YSogVmVyaWZp
ZXJTbG90VmlzaXRvcjo6TWFya2VkQmxvY2tEYXRhOjptYXJrZXJEYXRhKHVuc2lnbmVkIGF0b21O
dW1iZXIpIGNvbnN0Cit7CisgICAgYXV0byYgbWFya2VyID0gbV9tYXJrZXJzW2F0b21OdW1iZXJd
OworICAgIGlmIChtYXJrZXIuc3RhY2spCisgICAgICAgIHJldHVybiAmbWFya2VyOworICAgIHJl
dHVybiBudWxscHRyOworfQorCitWZXJpZmllclNsb3RWaXNpdG9yOjpQcmVjaXNlQWxsb2NhdGlv
bkRhdGE6OlByZWNpc2VBbGxvY2F0aW9uRGF0YShQcmVjaXNlQWxsb2NhdGlvbiogYWxsb2NhdGlv
bikKKyAgICA6IG1fYWxsb2NhdGlvbihhbGxvY2F0aW9uKQoreworfQorCitjb25zdCBNYXJrZXJE
YXRhKiBWZXJpZmllclNsb3RWaXNpdG9yOjpQcmVjaXNlQWxsb2NhdGlvbkRhdGE6Om1hcmtlckRh
dGEoKSBjb25zdAoreworICAgIGlmIChtX21hcmtlci5zdGFjaykKKyAgICAgICAgcmV0dXJuICZt
X21hcmtlcjsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKwordm9pZCBWZXJpZmllclNsb3RWaXNp
dG9yOjpQcmVjaXNlQWxsb2NhdGlvbkRhdGE6OmFkZE1hcmtlckRhdGEoTWFya2VyRGF0YSYmIG1h
cmtlcikKK3sKKyAgICBtX21hcmtlciA9IFdURk1vdmUobWFya2VyKTsKK30KKworVmVyaWZpZXJT
bG90VmlzaXRvcjo6VmVyaWZpZXJTbG90VmlzaXRvcihIZWFwJiBoZWFwKQorICAgIDogQmFzZSho
ZWFwLCAiVmVyaWZpZXIiKQoreworfQorCitWZXJpZmllclNsb3RWaXNpdG9yOjp+VmVyaWZpZXJT
bG90VmlzaXRvcigpCit7Cit9CisKK3ZvaWQgVmVyaWZpZXJTbG90VmlzaXRvcjo6YWRkUGFyYWxs
ZWxDb25zdHJhaW50VGFzayhSZWZQdHI8U2hhcmVkVGFzazx2b2lkKEFic3RyYWN0U2xvdFZpc2l0
b3ImKT4+IHRhc2spCit7CisgICAgbV9jb25zdHJhaW50VGFza3MuYXBwZW5kKFdURk1vdmUodGFz
aykpOworfQorCit2b2lkIFZlcmlmaWVyU2xvdFZpc2l0b3I6OmV4ZWN1dGVDb25zdHJhaW50VGFz
a3MoKQoreworICAgIHdoaWxlICghbV9jb25zdHJhaW50VGFza3MuaXNFbXB0eSgpKQorICAgICAg
ICBtX2NvbnN0cmFpbnRUYXNrcy50YWtlRmlyc3QoKS0+cnVuKCp0aGlzKTsKK30KKwordm9pZCBW
ZXJpZmllclNsb3RWaXNpdG9yOjphcHBlbmQoY29uc3QgQ29uc2VydmF0aXZlUm9vdHMmIGNvbnNl
cnZhdGl2ZVJvb3RzKQoreworICAgIGF1dG8gYXBwZW5kSlNDZWxsT3JBdXhpbGlhcnkgPSBbJl0g
KEhlYXBDZWxsKiBoZWFwQ2VsbCkKKyAgICB7CisgICAgICAgIGlmICghaGVhcENlbGwpCisgICAg
ICAgICAgICByZXR1cm47CisKKyAgICAgICAgaWYgKHRlc3RBbmRTZXRNYXJrZWQoaGVhcENlbGwp
KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHN3aXRjaCAoaGVhcENlbGwtPmNlbGxL
aW5kKCkpIHsKKyAgICAgICAgY2FzZSBIZWFwQ2VsbDo6SlNDZWxsOgorICAgICAgICBjYXNlIEhl
YXBDZWxsOjpKU0NlbGxXaXRoSW5kZXhpbmdIZWFkZXI6IHsKKyAgICAgICAgICAgIEpTQ2VsbCog
anNDZWxsID0gc3RhdGljX2Nhc3Q8SlNDZWxsKj4oaGVhcENlbGwpOworICAgICAgICAgICAgYXBw
ZW5kVG9NYXJrU3RhY2soanNDZWxsKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
CisgICAgICAgIGNhc2UgSGVhcENlbGw6OkF1eGlsaWFyeToKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorICAgIH07CisKKyAgICBIZWFwQ2VsbCoqIHJvb3RzID0gY29uc2VydmF0aXZl
Um9vdHMucm9vdHMoKTsKKyAgICBzaXplX3Qgc2l6ZSA9IGNvbnNlcnZhdGl2ZVJvb3RzLnNpemUo
KTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkKKyAgICAgICAgYXBwZW5k
SlNDZWxsT3JBdXhpbGlhcnkocm9vdHNbaV0pOworfQorCit2b2lkIFZlcmlmaWVyU2xvdFZpc2l0
b3I6OmFwcGVuZFRvTWFya1N0YWNrKEpTQ2VsbCogY2VsbCkKK3sKKyAgICBBU1NFUlQoIWNlbGwt
PmlzWmFwcGVkKCkpOworICAgIG1fY29sbGVjdG9yU3RhY2suYXBwZW5kKGNlbGwpOworfQorCit2
b2lkIFZlcmlmaWVyU2xvdFZpc2l0b3I6OmFwcGVuZFVuYmFycmllcmVkSW1wbChKU0NlbGwqIGNl
bGwpCit7CisgICAgaWYgKFVOTElLRUxZKGNlbGwtPmlzUHJlY2lzZUFsbG9jYXRpb24oKSkpIHsK
KyAgICAgICAgaWYgKExJS0VMWShpc01hcmtlZChjZWxsLT5wcmVjaXNlQWxsb2NhdGlvbigpLCBj
ZWxsKSkpCisgICAgICAgICAgICByZXR1cm47CisgICAgfSBlbHNlIHsKKyAgICAgICAgTWFya2Vk
QmxvY2smIGJsb2NrID0gY2VsbC0+bWFya2VkQmxvY2soKTsKKyAgICAgICAgaWYgKExJS0VMWShp
c01hcmtlZChibG9jaywgY2VsbCkpKQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IGFwcGVuZFNsb3coY2VsbCk7Cit9CisKK3ZvaWQgVmVyaWZpZXJTbG90VmlzaXRvcjo6YXBwZW5k
SGlkZGVuVW5iYXJyaWVyZWRJbXBsKEpTQ2VsbCogY2VsbCkKK3sKKyAgICBhcHBlbmRVbmJhcnJp
ZXJlZEltcGwoY2VsbCk7Cit9CisKK2Jvb2wgVmVyaWZpZXJTbG90VmlzaXRvcjo6YWRkT3BhcXVl
Um9vdCh2b2lkKiBwdHIpCit7CisgICAgaWYgKCFwdHIpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICBpZiAoIW1fb3BhcXVlUm9vdHMuYWRkKHB0cikpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBWZXJpZmllclNsb3RWaXNpdG9yOjpjb250YWlu
c09wYXF1ZVJvb3Qodm9pZCogcHRyKSBjb25zdAoreworICAgIHJldHVybiBtX29wYXF1ZVJvb3Rz
LmNvbnRhaW5zKHB0cik7Cit9CisKK3ZvaWQgVmVyaWZpZXJTbG90VmlzaXRvcjo6ZHJhaW4oKQor
eworICAgIFJFTEVBU0VfQVNTRVJUKG1fbXV0YXRvclN0YWNrLmlzRW1wdHkoKSk7CisKKyAgICBN
YXJrU3RhY2tBcnJheSYgc3RhY2sgPSBtX2NvbGxlY3RvclN0YWNrOworICAgIGlmIChzdGFjay5p
c0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIHN0YWNrLnJlZmlsbCgpOworICAgIHdo
aWxlIChzdGFjay5jYW5SZW1vdmVMYXN0KCkpIHsKKyAgICAgICAgdmlzaXRDaGlsZHJlbihzdGFj
ay5yZW1vdmVMYXN0KCkpOworICAgIH0KK30KKwordm9pZCBWZXJpZmllclNsb3RWaXNpdG9yOjpk
dW1wTWFya2VyRGF0YShIZWFwQ2VsbCogY2VsbCkKK3sKKyAgICBpZiAoY2VsbC0+aXNQcmVjaXNl
QWxsb2NhdGlvbigpKQorICAgICAgICByZXR1cm4gZHVtcE1hcmtlckRhdGEoY2VsbC0+cHJlY2lz
ZUFsbG9jYXRpb24oKSwgY2VsbCk7CisgICAgcmV0dXJuIGR1bXBNYXJrZXJEYXRhKGNlbGwtPm1h
cmtlZEJsb2NrKCksIGNlbGwpOworfQorCit2b2lkIFZlcmlmaWVyU2xvdFZpc2l0b3I6OmR1bXBN
YXJrZXJEYXRhKFByZWNpc2VBbGxvY2F0aW9uJiBhbGxvY2F0aW9uLCBIZWFwQ2VsbCogY2VsbCkK
K3sKKyAgICBhdXRvIGl0ZXJhdG9yID0gbV9wcmVjaXNlQWxsb2NhdGlvbk1hcC5maW5kKCZhbGxv
Y2F0aW9uKTsKKyAgICBpZiAoaXRlcmF0b3IgIT0gbV9wcmVjaXNlQWxsb2NhdGlvbk1hcC5lbmQo
KSkgeworICAgICAgICBkdW1wTWFya2VyRGF0YShjZWxsLCBpdGVyYXRvci0+dmFsdWUtPm1hcmtl
ckRhdGEoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgZGF0YUxvZ0xuKCJDZWxsICIs
IFJhd1BvaW50ZXIoY2VsbCksICIgbm90IGZvdW5kIik7Cit9CisKK3ZvaWQgVmVyaWZpZXJTbG90
VmlzaXRvcjo6ZHVtcE1hcmtlckRhdGEoTWFya2VkQmxvY2smIGJsb2NrLCBIZWFwQ2VsbCogY2Vs
bCkKK3sKKyAgICBhdXRvIGl0ZXJhdG9yID0gbV9tYXJrZWRCbG9ja01hcC5maW5kKCZibG9jayk7
CisgICAgaWYgKGl0ZXJhdG9yICE9IG1fbWFya2VkQmxvY2tNYXAuZW5kKCkpIHsKKyAgICAgICAg
dW5zaWduZWQgYXRvbU51bWJlciA9IGJsb2NrLmF0b21OdW1iZXIoY2VsbCk7CisgICAgICAgIGR1
bXBNYXJrZXJEYXRhKGNlbGwsIGl0ZXJhdG9yLT52YWx1ZS0+bWFya2VyRGF0YShhdG9tTnVtYmVy
KSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgZGF0YUxvZ0xuKCJDZWxsICIsIFJhd1Bv
aW50ZXIoY2VsbCksICIgbm90IGZvdW5kIik7Cit9CisKK3ZvaWQgVmVyaWZpZXJTbG90VmlzaXRv
cjo6ZHVtcE1hcmtlckRhdGEoSGVhcENlbGwqIGNlbGwsIGNvbnN0IE1hcmtlckRhdGEqIG1hcmtl
cikKK3sKKyAgICBpZiAoIW1hcmtlcikgeworICAgICAgICBkYXRhTG9nTG4oIk1hcmtlciBkYXRh
IGlzIG5vdCBhdmFpbGFibGUgZm9yIGNlbGwgIiwgUmF3UG9pbnRlcihjZWxsKSk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBkYXRhTG9nTG4oIkNlbGwgIiwgUmF3UG9pbnRlcihjZWxs
KSwgIiB3YXMgcmVhY2hhYmxlIHZpYSBjZWxsICIsIFJhd1BvaW50ZXIobWFya2VyLT5wYXJlbnQp
LCAiIGF0OiIpOworICAgIG1hcmtlci0+c3RhY2stPmR1bXAoV1RGOjpkYXRhRmlsZSgpLCAiICAg
ICIpOworfQorCitib29sIFZlcmlmaWVyU2xvdFZpc2l0b3I6OmlzRmlyc3RWaXNpdCgpIGNvbnN0
Cit7CisgICAgLy8gV2UgbmVlZCB0byBhbHdheXMgcmV0dXJuIGZhbHNlIGJlY2F1c2UgdGhpcyBp
cyB1c2VkIHRvIGFnZWQgYW4gVW5saW5rZWRDb2RlQmxvY2sKKyAgICAvLyBpbiB0aGUgcmVndWxh
ciBHQzogc2VlIFVubGlua2VkQ29kZUJsb2NrOjp2aXNpdENoaWxkcmVuSW1wbCgpLiBXZSBzaG91
bGQgbm90CisgICAgLy8gc2hvdWxkIGRvIHRoYXQgYWdpbmcgYWN0aW9uLgorICAgIHJldHVybiBm
YWxzZTsKK30KKworYm9vbCBWZXJpZmllclNsb3RWaXNpdG9yOjppc01hcmtlZChjb25zdCB2b2lk
KiByYXdDZWxsKSBjb25zdAoreworICAgIEhlYXBDZWxsKiBjZWxsID0gYml0d2lzZV9jYXN0PEhl
YXBDZWxsKj4ocmF3Q2VsbCk7CisgICAgaWYgKGNlbGwtPmlzUHJlY2lzZUFsbG9jYXRpb24oKSkK
KyAgICAgICAgcmV0dXJuIGlzTWFya2VkKGNlbGwtPnByZWNpc2VBbGxvY2F0aW9uKCksIGNlbGwp
OworICAgIHJldHVybiBpc01hcmtlZChjZWxsLT5tYXJrZWRCbG9jaygpLCBjZWxsKTsKK30KKwor
Ym9vbCBWZXJpZmllclNsb3RWaXNpdG9yOjppc01hcmtlZChQcmVjaXNlQWxsb2NhdGlvbiYgYWxs
b2NhdGlvbiwgSGVhcENlbGwqKSBjb25zdAoreworICAgIHJldHVybiBtX3ByZWNpc2VBbGxvY2F0
aW9uTWFwLmNvbnRhaW5zKCZhbGxvY2F0aW9uKTsKK30KKworYm9vbCBWZXJpZmllclNsb3RWaXNp
dG9yOjppc01hcmtlZChNYXJrZWRCbG9jayYgYmxvY2ssIEhlYXBDZWxsKiBjZWxsKSBjb25zdAor
eworICAgIGF1dG8gZW50cnkgPSBtX21hcmtlZEJsb2NrTWFwLmZpbmQoJmJsb2NrKTsKKyAgICBp
ZiAoZW50cnkgPT0gbV9tYXJrZWRCbG9ja01hcC5lbmQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgYXV0byYgZGF0YSA9IGVudHJ5LT52YWx1ZTsKKyAgICB1bnNpZ25lZCBhdG9tTnVt
YmVyID0gYmxvY2suYXRvbU51bWJlcihjZWxsKTsKKyAgICByZXR1cm4gZGF0YS0+aXNNYXJrZWQo
YXRvbU51bWJlcik7Cit9CisKK3ZvaWQgVmVyaWZpZXJTbG90VmlzaXRvcjo6bWFya0F1eGlsaWFy
eShjb25zdCB2b2lkKiBiYXNlKQoreworICAgIEhlYXBDZWxsKiBjZWxsID0gYml0d2lzZV9jYXN0
PEhlYXBDZWxsKj4oYmFzZSk7CisKKyAgICBBU1NFUlQoY2VsbC0+aGVhcCgpID09IGhlYXAoKSk7
CisgICAgdGVzdEFuZFNldE1hcmtlZChjZWxsKTsKK30KKworYm9vbCBWZXJpZmllclNsb3RWaXNp
dG9yOjptdXRhdG9ySXNTdG9wcGVkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
Ym9vbCBWZXJpZmllclNsb3RWaXNpdG9yOjp0ZXN0QW5kU2V0TWFya2VkKGNvbnN0IHZvaWQqIHJh
d0NlbGwpCit7CisgICAgSGVhcENlbGwqIGNlbGwgPSBiaXR3aXNlX2Nhc3Q8SGVhcENlbGwqPihy
YXdDZWxsKTsKKyAgICBpZiAoY2VsbC0+aXNQcmVjaXNlQWxsb2NhdGlvbigpKQorICAgICAgICBy
ZXR1cm4gdGVzdEFuZFNldE1hcmtlZChjZWxsLT5wcmVjaXNlQWxsb2NhdGlvbigpKTsKKyAgICBy
ZXR1cm4gdGVzdEFuZFNldE1hcmtlZChjZWxsLT5tYXJrZWRCbG9jaygpLCBjZWxsKTsKK30KKwor
Ym9vbCBWZXJpZmllclNsb3RWaXNpdG9yOjp0ZXN0QW5kU2V0TWFya2VkKFByZWNpc2VBbGxvY2F0
aW9uJiBhbGxvY2F0aW9uKQoreworICAgIHN0ZDo6dW5pcXVlX3B0cjxQcmVjaXNlQWxsb2NhdGlv
bkRhdGE+JiBkYXRhID0gbV9wcmVjaXNlQWxsb2NhdGlvbk1hcC5hZGQoJmFsbG9jYXRpb24sIG51
bGxwdHIpLml0ZXJhdG9yLT52YWx1ZTsKKyAgICBpZiAoIWRhdGEpIHsKKyAgICAgICAgZGF0YSA9
IG1ha2VVbmlxdWU8UHJlY2lzZUFsbG9jYXRpb25EYXRhPigmYWxsb2NhdGlvbik7CisgICAgICAg
IGlmIChVTkxJS0VMWShPcHRpb25zOjp2ZXJib3NlVmVyaWZ5R0MoKSkpCisgICAgICAgICAgICBk
YXRhLT5hZGRNYXJrZXJEYXRhKHsgcGFyZW50Q2VsbCgpLCBTdGFja1RyYWNlOjpjYXB0dXJlU3Rh
Y2tUcmFjZShtYXhNYXJraW5nU3RhY2tGcmFtZXNUb0NhcHR1cmUsIDIpIH0pOworICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCitib29sIFZlcmlmaWVy
U2xvdFZpc2l0b3I6OnRlc3RBbmRTZXRNYXJrZWQoTWFya2VkQmxvY2smIGJsb2NrLCBIZWFwQ2Vs
bCogY2VsbCkKK3sKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8TWFya2VkQmxvY2tEYXRhPiYgZGF0YSA9
IG1fbWFya2VkQmxvY2tNYXAuYWRkKCZibG9jaywgbnVsbHB0cikuaXRlcmF0b3ItPnZhbHVlOwor
ICAgIGlmICghZGF0YSkKKyAgICAgICAgZGF0YSA9IG1ha2VVbmlxdWU8TWFya2VkQmxvY2tEYXRh
PigmYmxvY2spOworCisgICAgdW5zaWduZWQgYXRvbU51bWJlciA9IGJsb2NrLmF0b21OdW1iZXIo
Y2VsbCk7CisgICAgYm9vbCBhbHJlYWR5U2V0ID0gZGF0YS0+dGVzdEFuZFNldE1hcmtlZChhdG9t
TnVtYmVyKTsKKyAgICBpZiAoIWFscmVhZHlTZXQgJiYgVU5MSUtFTFkoT3B0aW9uczo6dmVyYm9z
ZVZlcmlmeUdDKCkpKQorICAgICAgICBkYXRhLT5hZGRNYXJrZXJEYXRhKGF0b21OdW1iZXIsIHsg
cGFyZW50Q2VsbCgpLCBTdGFja1RyYWNlOjpjYXB0dXJlU3RhY2tUcmFjZShtYXhNYXJraW5nU3Rh
Y2tGcmFtZXNUb0NhcHR1cmUsIDIpIH0pOworICAgIHJldHVybiBhbHJlYWR5U2V0OworfQorCit2
b2lkIFZlcmlmaWVyU2xvdFZpc2l0b3I6OnNldE1hcmtlZEFuZEFwcGVuZFRvTWFya1N0YWNrKEpT
Q2VsbCogY2VsbCkKK3sKKyAgICBpZiAobV9zdXBwcmVzc1ZlcmlmaWVyKQorICAgICAgICByZXR1
cm47CisgICAgaWYgKHRlc3RBbmRTZXRNYXJrZWQoY2VsbCkpCisgICAgICAgIHJldHVybjsKKyAg
ICBhcHBlbmRUb01hcmtTdGFjayhjZWxsKTsKK30KKwordm9pZCBWZXJpZmllclNsb3RWaXNpdG9y
Ojp2aXNpdEFzQ29uc3RyYWludChjb25zdCBKU0NlbGwqIGNlbGwpCit7CisgICAgdmlzaXRDaGls
ZHJlbihjZWxsKTsKK30KKwordm9pZCBWZXJpZmllclNsb3RWaXNpdG9yOjp2aXNpdENoaWxkcmVu
KGNvbnN0IEpTQ2VsbCogY2VsbCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChpc01hcmtlZChjZWxs
KSk7CisgICAgc3dpdGNoIChjZWxsLT50eXBlKCkpIHsKKyAgICBjYXNlIFN0cmluZ1R5cGU6Cisg
ICAgICAgIEpTU3RyaW5nOjp2aXNpdENoaWxkcmVuKGNvbnN0X2Nhc3Q8SlNDZWxsKj4oY2VsbCks
ICp0aGlzKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAgIGNhc2UgRmluYWxPYmplY3RU
eXBlOgorICAgICAgICBKU0ZpbmFsT2JqZWN0Ojp2aXNpdENoaWxkcmVuKGNvbnN0X2Nhc3Q8SlND
ZWxsKj4oY2VsbCksICp0aGlzKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEFycmF5VHlw
ZToKKyAgICAgICAgSlNBcnJheTo6dmlzaXRDaGlsZHJlbihjb25zdF9jYXN0PEpTQ2VsbCo+KGNl
bGwpLCAqdGhpcyk7CisgICAgICAgIGJyZWFrOworICAgICAgICAKKyAgICBkZWZhdWx0OgorICAg
ICAgICAvLyBGSVhNRTogVGhpcyBjb3VsZCBiZSBzbyBtdWNoIGJldHRlci4KKyAgICAgICAgLy8g
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MjQ2MgorICAgICAgICBj
ZWxsLT5tZXRob2RUYWJsZSh2bSgpKS0+dmlzaXRDaGlsZHJlbihjb25zdF9jYXN0PEpTQ2VsbCo+
KGNlbGwpLCAqdGhpcyk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworfSAvLyBuYW1lc3Bh
Y2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9WZXJpZmllclNsb3RWaXNp
dG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVmVyaWZpZXJT
bG90VmlzaXRvci5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L1ZlcmlmaWVyU2xvdFZpc2l0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE3MyBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25j
ZQorCisjaW5jbHVkZSAiQWJzdHJhY3RTbG90VmlzaXRvci5oIgorI2luY2x1ZGUgIkpTQ0pTVmFs
dWUuaCIKKyNpbmNsdWRlICJWaXNpdFJhY2VLZXkuaCIKKyNpbmNsdWRlICJXZWFrLmgiCisjaW5j
bHVkZSA8bWVtb3J5PgorI2luY2x1ZGUgPHd0Zi9CaXRWZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYv
Q29uY3VycmVudFB0ckhhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KKyNpbmNsdWRl
IDx3dGYvRmFzdE1hbGxvYy5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8
d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9TaGFyZWRUYXNrLmg+CisKK25hbWVzcGFjZSBX
VEYgeworCitjbGFzcyBTdGFja1RyYWNlOworCit9IC8vIG5hbWVzcGFjZSBXVEYKKworbmFtZXNw
YWNlIEpTQyB7CisKK2NsYXNzIENvbnNlcnZhdGl2ZVJvb3RzOworY2xhc3MgSGVhcDsKK2NsYXNz
IEhlYXBDZWxsOworY2xhc3MgUHJlY2lzZUFsbG9jYXRpb247CitjbGFzcyBNYXJrZWRCbG9jazsK
KwordXNpbmcgV1RGOjpTdGFja1RyYWNlOworCitjbGFzcyBWZXJpZmllclNsb3RWaXNpdG9yIDog
cHVibGljIEFic3RyYWN0U2xvdFZpc2l0b3IgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFZl
cmlmaWVyU2xvdFZpc2l0b3IpOworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworICAgIHVz
aW5nIEJhc2UgPSBBYnN0cmFjdFNsb3RWaXNpdG9yOworcHVibGljOgorICAgIHN0cnVjdCBNYXJr
ZXJEYXRhIHsKKyAgICAgICAgTWFya2VyRGF0YSgpID0gZGVmYXVsdDsKKyAgICAgICAgTWFya2Vy
RGF0YShNYXJrZXJEYXRhJiYpID0gZGVmYXVsdDsKKyAgICAgICAgTWFya2VyRGF0YShIZWFwQ2Vs
bCosIHN0ZDo6dW5pcXVlX3B0cjxTdGFja1RyYWNlPiYmKTsKKyAgICAgICAgTWFya2VyRGF0YSYg
b3BlcmF0b3I9KE1hcmtlckRhdGEmJikgPSBkZWZhdWx0OworCisgICAgICAgIEhlYXBDZWxsKiBw
YXJlbnQgeyBudWxscHRyIH07CisgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxTdGFja1RyYWNlPiBz
dGFjazsKKyAgICB9OworCisgICAgVmVyaWZpZXJTbG90VmlzaXRvcihIZWFwJik7CisgICAgflZl
cmlmaWVyU2xvdFZpc2l0b3IoKTsKKworICAgIHZvaWQgYXBwZW5kKGNvbnN0IENvbnNlcnZhdGl2
ZVJvb3RzJikgZmluYWw7CisgICAgdm9pZCBhcHBlbmRVbmJhcnJpZXJlZEltcGwoSlNDZWxsKikg
ZmluYWw7CisgICAgdm9pZCBhcHBlbmRIaWRkZW5VbmJhcnJpZXJlZEltcGwoSlNDZWxsKikgZmlu
YWw7CisKKyAgICBib29sIGFkZE9wYXF1ZVJvb3Qodm9pZCopIGZpbmFsOyAvLyBSZXR1cm5zIHRy
dWUgaWYgdGhlIHJvb3Qgd2FzIG5ldy4KKyAgICBib29sIGNvbnRhaW5zT3BhcXVlUm9vdCh2b2lk
KikgY29uc3QgZmluYWw7CisKKyAgICBib29sIGlzRmlyc3RWaXNpdCgpIGNvbnN0IGZpbmFsOwor
ICAgIGJvb2wgaXNNYXJrZWQoY29uc3Qgdm9pZCopIGNvbnN0IGZpbmFsOworICAgIGJvb2wgaXNN
YXJrZWQoTWFya2VkQmxvY2smLCBIZWFwQ2VsbCopIGNvbnN0IGZpbmFsOworICAgIGJvb2wgaXNN
YXJrZWQoUHJlY2lzZUFsbG9jYXRpb24mLCBIZWFwQ2VsbCopIGNvbnN0IGZpbmFsOworCisgICAg
dm9pZCBtYXJrQXV4aWxpYXJ5KGNvbnN0IHZvaWQqKSBmaW5hbDsKKworICAgIHZvaWQgcmVwb3J0
RXh0cmFNZW1vcnlWaXNpdGVkKHNpemVfdCkgZmluYWwgeyB9CisjaWYgRU5BQkxFKFJFU09VUkNF
X1VTQUdFKQorICAgIHZvaWQgcmVwb3J0RXh0ZXJuYWxNZW1vcnlWaXNpdGVkKHNpemVfdCkgZmlu
YWwgeyB9CisjZW5kaWYKKworICAgIGJvb2wgbXV0YXRvcklzU3RvcHBlZCgpIGNvbnN0IGZpbmFs
OworCisgICAgdm9pZCBkaWRSYWNlKGNvbnN0IFZpc2l0UmFjZUtleSYpIGZpbmFsIHsgfQorICAg
IHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0IGZpbmFsIHsgfQorCisgICAgdm9pZCB2aXNp
dEFzQ29uc3RyYWludChjb25zdCBKU0NlbGwqKSBmaW5hbDsKKworICAgIHZvaWQgZHJhaW4oKTsK
KworICAgIHZvaWQgYWRkUGFyYWxsZWxDb25zdHJhaW50VGFzayhSZWZQdHI8U2hhcmVkVGFzazx2
b2lkKEFic3RyYWN0U2xvdFZpc2l0b3ImKT4+KSBmaW5hbDsKKyAgICB2b2lkIGV4ZWN1dGVDb25z
dHJhaW50VGFza3MoKTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9y
RWFjaExpdmVDZWxsKGNvbnN0IEZ1bmN0b3ImKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5j
dG9yPiB2b2lkIGZvckVhY2hMaXZlUHJlY2lzZUFsbG9jYXRpb24oY29uc3QgRnVuY3RvciYpOwor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaExpdmVNYXJrZWRCbG9j
a0NlbGwoY29uc3QgRnVuY3RvciYpOworCisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBkdW1w
TWFya2VyRGF0YShIZWFwQ2VsbCopOworCitwcml2YXRlOgorICAgIGNsYXNzIE1hcmtlZEJsb2Nr
RGF0YSB7CisgICAgICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworICAgICAgICBXVEZfTUFL
RV9OT05DT1BZQUJMRShNYXJrZWRCbG9ja0RhdGEpOworICAgIHB1YmxpYzoKKyAgICAgICAgTWFy
a2VkQmxvY2tEYXRhKE1hcmtlZEJsb2NrKik7CisKKyAgICAgICAgTWFya2VkQmxvY2sqIGJsb2Nr
KCkgY29uc3QgeyByZXR1cm4gbV9ibG9jazsgfQorICAgICAgICBjb25zdCBCaXRWZWN0b3ImIGF0
b21zKCkgY29uc3QgeyByZXR1cm4gbV9hdG9tczsgfQorCisgICAgICAgIGJvb2wgaXNNYXJrZWQo
dW5zaWduZWQgYXRvbU51bWJlcikgeyByZXR1cm4gbV9hdG9tcy5xdWlja0dldChhdG9tTnVtYmVy
KTsgfQorICAgICAgICBib29sIHRlc3RBbmRTZXRNYXJrZWQodW5zaWduZWQgYXRvbU51bWJlcikg
eyByZXR1cm4gbV9hdG9tcy5xdWlja1NldChhdG9tTnVtYmVyKTsgfQorCisgICAgICAgIHZvaWQg
YWRkTWFya2VyRGF0YSh1bnNpZ25lZCBhdG9tTnVtYmVyLCBNYXJrZXJEYXRhJiYpOworICAgICAg
ICBjb25zdCBNYXJrZXJEYXRhKiBtYXJrZXJEYXRhKHVuc2lnbmVkIGF0b21OdW1iZXIpIGNvbnN0
OworCisgICAgcHJpdmF0ZToKKyAgICAgICAgTWFya2VkQmxvY2sqIG1fYmxvY2sgeyBudWxscHRy
IH07CisgICAgICAgIEJpdFZlY3RvciBtX2F0b21zOworICAgICAgICBWZWN0b3I8TWFya2VyRGF0
YT4gbV9tYXJrZXJzOworICAgIH07CisKKyAgICBjbGFzcyBQcmVjaXNlQWxsb2NhdGlvbkRhdGEg
eworICAgICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKKyAgICAgICAgV1RGX01BS0VfTk9O
Q09QWUFCTEUoUHJlY2lzZUFsbG9jYXRpb25EYXRhKTsKKyAgICBwdWJsaWM6CisgICAgICAgIFBy
ZWNpc2VBbGxvY2F0aW9uRGF0YShQcmVjaXNlQWxsb2NhdGlvbiopOworICAgICAgICBQcmVjaXNl
QWxsb2NhdGlvbiogYWxsb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fYWxsb2NhdGlvbjsgfQor
CisgICAgICAgIHZvaWQgYWRkTWFya2VyRGF0YShNYXJrZXJEYXRhJiYpOworICAgICAgICBjb25z
dCBNYXJrZXJEYXRhKiBtYXJrZXJEYXRhKCkgY29uc3Q7CisKKyAgICBwcml2YXRlOgorICAgICAg
ICBQcmVjaXNlQWxsb2NhdGlvbiogbV9hbGxvY2F0aW9uIHsgbnVsbHB0ciB9OworICAgICAgICBN
YXJrZXJEYXRhIG1fbWFya2VyOworICAgIH07CisKKyAgICB1c2luZyBNYXJrZWRCbG9ja01hcCA9
IEhhc2hNYXA8TWFya2VkQmxvY2sqLCBzdGQ6OnVuaXF1ZV9wdHI8TWFya2VkQmxvY2tEYXRhPj47
CisgICAgdXNpbmcgUHJlY2lzZUFsbG9jYXRpb25NYXAgPSBIYXNoTWFwPFByZWNpc2VBbGxvY2F0
aW9uKiwgc3RkOjp1bmlxdWVfcHRyPFByZWNpc2VBbGxvY2F0aW9uRGF0YT4+OworCisgICAgdm9p
ZCBhcHBlbmRUb01hcmtTdGFjayhKU0NlbGwqKTsKKyAgICB2b2lkIGFwcGVuZFNsb3coSlNDZWxs
KiBjZWxsKSB7IHNldE1hcmtlZEFuZEFwcGVuZFRvTWFya1N0YWNrKGNlbGwpOyB9CisKKyAgICBi
b29sIHRlc3RBbmRTZXRNYXJrZWQoY29uc3Qgdm9pZCogcmF3Q2VsbCk7CisgICAgYm9vbCB0ZXN0
QW5kU2V0TWFya2VkKFByZWNpc2VBbGxvY2F0aW9uJik7CisgICAgYm9vbCB0ZXN0QW5kU2V0TWFy
a2VkKE1hcmtlZEJsb2NrJiwgSGVhcENlbGwqKTsKKworICAgIHZvaWQgc2V0TWFya2VkQW5kQXBw
ZW5kVG9NYXJrU3RhY2soSlNDZWxsKik7CisKKyAgICB2b2lkIHZpc2l0Q2hpbGRyZW4oY29uc3Qg
SlNDZWxsKik7CisKKyAgICB2b2lkIGR1bXBNYXJrZXJEYXRhKFByZWNpc2VBbGxvY2F0aW9uJiwg
SGVhcENlbGwqKTsKKyAgICB2b2lkIGR1bXBNYXJrZXJEYXRhKE1hcmtlZEJsb2NrJiwgSGVhcENl
bGwqKTsKKyAgICB2b2lkIGR1bXBNYXJrZXJEYXRhKEhlYXBDZWxsKiwgY29uc3QgTWFya2VyRGF0
YSopOworCisgICAgUHJlY2lzZUFsbG9jYXRpb25NYXAgbV9wcmVjaXNlQWxsb2NhdGlvbk1hcDsK
KyAgICBNYXJrZWRCbG9ja01hcCBtX21hcmtlZEJsb2NrTWFwOworICAgIENvbmN1cnJlbnRQdHJI
YXNoU2V0IG1fb3BhcXVlUm9vdHM7CisgICAgRGVxdWU8UmVmUHRyPFNoYXJlZFRhc2s8dm9pZChB
YnN0cmFjdFNsb3RWaXNpdG9yJik+PiwgMzI+IG1fY29uc3RyYWludFRhc2tzOworfTsKKworfSAv
LyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9WZXJpZmll
clNsb3RWaXNpdG9ySW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL1ZlcmlmaWVyU2xvdFZpc2l0b3JJbmxpbmVzLmgJKG5vbmV4aXN0ZW50KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVmVyaWZpZXJTbG90VmlzaXRvcklubGluZXMuaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDYyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJWZXJpZmllclNsb3RW
aXNpdG9yLmgiCisKKyNpbmNsdWRlICJBYnN0cmFjdFNsb3RWaXNpdG9ySW5saW5lcy5oIgorCitu
YW1lc3BhY2UgSlNDIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KK3ZvaWQgVmVyaWZp
ZXJTbG90VmlzaXRvcjo6Zm9yRWFjaExpdmVDZWxsKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCit7
CisgICAgZm9yRWFjaExpdmVQcmVjaXNlQWxsb2NhdGlvbihmdW5jdG9yKTsKKyAgICBmb3JFYWNo
TGl2ZU1hcmtlZEJsb2NrQ2VsbChmdW5jdG9yKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgRnVu
Y3Rvcj4KK3ZvaWQgVmVyaWZpZXJTbG90VmlzaXRvcjo6Zm9yRWFjaExpdmVQcmVjaXNlQWxsb2Nh
dGlvbihjb25zdCBGdW5jdG9yJiBmdW5jKQoreworICAgIGZvciAoYXV0byYgZW50cnkgOiBtX3By
ZWNpc2VBbGxvY2F0aW9uTWFwKSB7CisgICAgICAgIFByZWNpc2VBbGxvY2F0aW9uKiBhbGxvY2F0
aW9uID0gZW50cnkudmFsdWUtPmFsbG9jYXRpb24oKTsKKyAgICAgICAgZnVuYyhhbGxvY2F0aW9u
LT5jZWxsKCkpOworICAgIH0KK30KKwordGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KK3ZvaWQg
VmVyaWZpZXJTbG90VmlzaXRvcjo6Zm9yRWFjaExpdmVNYXJrZWRCbG9ja0NlbGwoY29uc3QgRnVu
Y3RvciYgZnVuYykKK3sKKyAgICBmb3IgKGF1dG8mIGVudHJ5IDogbV9tYXJrZWRCbG9ja01hcCkg
eworICAgICAgICBhdXRvJiBkYXRhID0gZW50cnkudmFsdWU7CisgICAgICAgIE1hcmtlZEJsb2Nr
KiBibG9jayA9IGRhdGEtPmJsb2NrKCk7CisgICAgICAgIGNvbnN0IEJpdFZlY3RvciYgYXRvbXMg
PSAgZGF0YS0+YXRvbXMoKTsKKyAgICAgICAgZm9yIChhdXRvIGF0b21OdW1iZXIgOiBhdG9tcykK
KyAgICAgICAgICAgIGZ1bmMoYml0d2lzZV9jYXN0PEhlYXBDZWxsKj4oYmxvY2stPmhhbmRsZSgp
LmF0b21BdChhdG9tTnVtYmVyKSkpOworICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9WaXNpdENvdW50ZXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9WaXNpdENvdW50ZXIuaAkocmV2aXNpb24g
MjcyNzY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVmlzaXRDb3VudGVyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMjUsNyArMjUsNyBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgIlNs
b3RWaXNpdG9yLmgiCisjaW5jbHVkZSAiQWJzdHJhY3RTbG90VmlzaXRvci5oIgogCiBuYW1lc3Bh
Y2UgSlNDIHsKIApAQCAtMzMsMTMgKzMzLDEzIEBAIGNsYXNzIFZpc2l0Q291bnRlciB7CiBwdWJs
aWM6CiAgICAgVmlzaXRDb3VudGVyKCkgeyB9CiAgICAgCi0gICAgVmlzaXRDb3VudGVyKFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQorICAgIFZpc2l0Q291bnRlcihBYnN0cmFjdFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQogICAgICAgICA6IG1fdmlzaXRvcigmdmlzaXRvcikKICAgICAgICAgLCBtX2luaXRp
YWxWaXNpdENvdW50KHZpc2l0b3IudmlzaXRDb3VudCgpKQogICAgIHsKICAgICB9CiAgICAgCi0g
ICAgU2xvdFZpc2l0b3ImIHZpc2l0b3IoKSBjb25zdCB7IHJldHVybiAqbV92aXNpdG9yOyB9Cisg
ICAgQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcigpIGNvbnN0IHsgcmV0dXJuICptX3Zpc2l0
b3I7IH0KICAgICAKICAgICBzaXplX3QgdmlzaXRDb3VudCgpIGNvbnN0CiAgICAgewpAQCAtNDcs
NyArNDcsNyBAQCBwdWJsaWM6CiAgICAgfQogICAgIAogcHJpdmF0ZToKLSAgICBTbG90VmlzaXRv
ciogbV92aXNpdG9yIHsgbnVsbHB0ciB9OworICAgIEFic3RyYWN0U2xvdFZpc2l0b3IqIG1fdmlz
aXRvciB7IG51bGxwdHIgfTsKICAgICBzaXplX3QgbV9pbml0aWFsVmlzaXRDb3VudCB7IDAgfTsK
IH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtCbG9jay5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha0Jsb2NrLmNwcAkocmV2
aXNpb24gMjcyNzY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha0Jsb2NrLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTItMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTItMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTk4LDEyICs5OCwxMSBAQCB2b2lkIFdlYWtCbG9jazo6c3dl
ZXAoKQogICAgIEFTU0VSVCghbV9zd2VlcFJlc3VsdC5pc051bGwoKSk7CiB9CiAKLXRlbXBsYXRl
PHR5cGVuYW1lIENvbnRhaW5lclR5cGU+Ci12b2lkIFdlYWtCbG9jazo6c3BlY2lhbGl6ZWRWaXNp
dChDb250YWluZXJUeXBlJiBjb250YWluZXIsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxh
dGU8dHlwZW5hbWUgQ29udGFpbmVyVHlwZSwgdHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgV2Vha0Js
b2NrOjpzcGVjaWFsaXplZFZpc2l0KENvbnRhaW5lclR5cGUmIGNvbnRhaW5lciwgVmlzaXRvciYg
dmlzaXRvcikKIHsKLSAgICBIZWFwVmVyc2lvbiBtYXJraW5nVmVyc2lvbiA9IHZpc2l0b3IubWFy
a2luZ1ZlcnNpb24oKTsKLQogICAgIHNpemVfdCBjb3VudCA9IHdlYWtJbXBsQ291bnQoKTsKKyAg
ICBIZWFwQW5hbHl6ZXIqIGhlYXBBbmFseXplciA9IHZpc2l0b3Iudm0oKS5hY3RpdmVIZWFwQW5h
bHl6ZXIoKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKICAgICAg
ICAgV2Vha0ltcGwqIHdlYWtJbXBsID0gJndlYWtJbXBscygpW2ldOwogICAgICAgICBpZiAod2Vh
a0ltcGwtPnN0YXRlKCkgIT0gV2Vha0ltcGw6OkxpdmUpCkBAIC0xMTQsMTIgKzExMywxMiBAQCB2
b2lkIFdlYWtCbG9jazo6c3BlY2lhbGl6ZWRWaXNpdChDb250YWluCiAgICAgICAgICAgICBjb250
aW51ZTsKIAogICAgICAgICBKU1ZhbHVlIGpzVmFsdWUgPSB3ZWFrSW1wbC0+anNWYWx1ZSgpOwot
ICAgICAgICBpZiAoY29udGFpbmVyLmlzTWFya2VkKG1hcmtpbmdWZXJzaW9uLCBqc1ZhbHVlLmFz
Q2VsbCgpKSkKKyAgICAgICAgaWYgKHZpc2l0b3IuaXNNYXJrZWQoY29udGFpbmVyLCBqc1ZhbHVl
LmFzQ2VsbCgpKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAKICAgICAgICAgY29u
c3QgY2hhciogcmVhc29uID0gIiI7CiAgICAgICAgIGNvbnN0IGNoYXIqKiByZWFzb25QdHIgPSBu
dWxscHRyOwotICAgICAgICBpZiAoVU5MSUtFTFkodmlzaXRvci5pc0FuYWx5emluZ0hlYXAoKSkp
CisgICAgICAgIGlmIChVTkxJS0VMWShoZWFwQW5hbHl6ZXIpKQogICAgICAgICAgICAgcmVhc29u
UHRyID0gJnJlYXNvbjsKIAogICAgICAgICBpZiAoIXdlYWtIYW5kbGVPd25lci0+aXNSZWFjaGFi
bGVGcm9tT3BhcXVlUm9vdHMoSGFuZGxlPFVua25vd24+Ojp3cmFwU2xvdCgmY29uc3RfY2FzdDxK
U1ZhbHVlJj4oanNWYWx1ZSkpLCB3ZWFrSW1wbC0+Y29udGV4dCgpLCB2aXNpdG9yLCByZWFzb25Q
dHIpKQpAQCAtMTI3LDE0ICsxMjYsMTQgQEAgdm9pZCBXZWFrQmxvY2s6OnNwZWNpYWxpemVkVmlz
aXQoQ29udGFpbgogCiAgICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQoanNWYWx1ZSk7
CiAKLSAgICAgICAgaWYgKFVOTElLRUxZKHZpc2l0b3IuaXNBbmFseXppbmdIZWFwKCkpKSB7Cisg
ICAgICAgIGlmIChVTkxJS0VMWShoZWFwQW5hbHl6ZXIpKSB7CiAgICAgICAgICAgICBpZiAoanNW
YWx1ZS5pc0NlbGwoKSkKLSAgICAgICAgICAgICAgICB2aXNpdG9yLmhlYXBBbmFseXplcigpLT5z
ZXRPcGFxdWVSb290UmVhY2hhYmlsaXR5UmVhc29uRm9yQ2VsbChqc1ZhbHVlLmFzQ2VsbCgpLCAq
cmVhc29uUHRyKTsKKyAgICAgICAgICAgICAgICBoZWFwQW5hbHl6ZXItPnNldE9wYXF1ZVJvb3RS
ZWFjaGFiaWxpdHlSZWFzb25Gb3JDZWxsKGpzVmFsdWUuYXNDZWxsKCksICpyZWFzb25QdHIpOwog
ICAgICAgICB9CiAgICAgfQogfQogCi12b2lkIFdlYWtCbG9jazo6dmlzaXQoU2xvdFZpc2l0b3Im
IHZpc2l0b3IpCit2b2lkIFdlYWtCbG9jazo6dmlzaXQoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlz
aXRvcikKIHsKICAgICAvLyBJZiBhIGJsb2NrIGlzIGNvbXBsZXRlbHkgZW1wdHksIGEgdmlzaXQg
d29uJ3QgaGF2ZSBhbnkgZWZmZWN0LgogICAgIGlmIChpc0VtcHR5KCkpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9XZWFrQmxvY2suaAkocmV2aXNpb24gMjcyNzY5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha0Jsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMiw4
ICszMiw4IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCitjbGFzcyBBYnN0cmFjdFNsb3RWaXNpdG9y
OwogY2xhc3MgSGVhcDsKLWNsYXNzIFNsb3RWaXNpdG9yOwogCiBERUNMQVJFX0FMTE9DQVRPUl9X
SVRIX0hFQVBfSURFTlRJRklFUihXZWFrQmxvY2spOwogCkBAIC02NSw3ICs2NSw3IEBAIHB1Ymxp
YzoKICAgICB2b2lkIHN3ZWVwKCk7CiAgICAgU3dlZXBSZXN1bHQgdGFrZVN3ZWVwUmVzdWx0KCk7
CiAKLSAgICB2b2lkIHZpc2l0KFNsb3RWaXNpdG9yJik7CisgICAgdm9pZCB2aXNpdChBYnN0cmFj
dFNsb3RWaXNpdG9yJik7CiAKICAgICB2b2lkIHJlYXAoKTsKIApAQCAtNzUsOCArNzUsOCBAQCBw
dWJsaWM6CiBwcml2YXRlOgogICAgIHN0YXRpYyBGcmVlQ2VsbCogYXNGcmVlQ2VsbChXZWFrSW1w
bCopOwogICAgIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIENvbnRhaW5lclR5cGU+Ci0gICAgdm9p
ZCBzcGVjaWFsaXplZFZpc2l0KENvbnRhaW5lclR5cGUmLCBTbG90VmlzaXRvciYpOworICAgIHRl
bXBsYXRlPHR5cGVuYW1lIENvbnRhaW5lclR5cGUsIHR5cGVuYW1lIFZpc2l0b3I+CisgICAgdm9p
ZCBzcGVjaWFsaXplZFZpc2l0KENvbnRhaW5lclR5cGUmLCBWaXNpdG9yJik7CiAKICAgICBleHBs
aWNpdCBXZWFrQmxvY2soQ2VsbENvbnRhaW5lcik7CiAgICAgdm9pZCBmaW5hbGl6ZShXZWFrSW1w
bCopOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha0hhbmRsZU93bmVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrSGFuZGxlT3du
ZXIuY3BwCShyZXZpc2lvbiAyNzI3NjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9X
ZWFrSGFuZGxlT3duZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTItMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM1LDcgKzM1LDcgQEAgV2Vha0hhbmRs
ZU93bmVyOjp+V2Vha0hhbmRsZU93bmVyKCkKIHsKIH0KIAotYm9vbCBXZWFrSGFuZGxlT3duZXI6
OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEhhbmRsZTxVbmtub3duPiwgdm9pZCosIFNsb3RW
aXNpdG9yJiwgY29uc3QgY2hhcioqKQorYm9vbCBXZWFrSGFuZGxlT3duZXI6OmlzUmVhY2hhYmxl
RnJvbU9wYXF1ZVJvb3RzKEhhbmRsZTxVbmtub3duPiwgdm9pZCosIEFic3RyYWN0U2xvdFZpc2l0
b3ImLCBjb25zdCBjaGFyKiopCiB7CiAgICAgcmV0dXJuIGZhbHNlOwogfQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha0hhbmRsZU93bmVyLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha0hhbmRsZU93bmVyLmgJKHJldmlzaW9uIDI3Mjc2
OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtIYW5kbGVPd25lci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTI5LDEzICsyOSwxMyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotY2xhc3MgU2xv
dFZpc2l0b3I7CitjbGFzcyBBYnN0cmFjdFNsb3RWaXNpdG9yOwogCiBjbGFzcyBKU19FWFBPUlRf
UFJJVkFURSBXZWFrSGFuZGxlT3duZXIgewogcHVibGljOgogICAgIHZpcnR1YWwgfldlYWtIYW5k
bGVPd25lcigpOwogICAgIC8vIHJlYXNvbiB3aWxsIG9ubHkgYmUgbm9uLW51bGwgd2hlbiBnZW5l
cmF0aW5nIGEgZGVidWcgR0MgaGVhcCBzbmFwc2hvdC4KLSAgICB2aXJ0dWFsIGJvb2wgaXNSZWFj
aGFibGVGcm9tT3BhcXVlUm9vdHMoSGFuZGxlPFVua25vd24+LCB2b2lkKiBjb250ZXh0LCBTbG90
VmlzaXRvciYsIGNoYXIgY29uc3QqKiByZWFzb24gPSBudWxscHRyKTsKKyAgICB2aXJ0dWFsIGJv
b2wgaXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSGFuZGxlPFVua25vd24+LCB2b2lkKiBjb250
ZXh0LCBBYnN0cmFjdFNsb3RWaXNpdG9yJiwgY2hhciBjb25zdCoqIHJlYXNvbiA9IG51bGxwdHIp
OwogICAgIHZpcnR1YWwgdm9pZCBmaW5hbGl6ZShIYW5kbGU8VW5rbm93bj4sIHZvaWQqIGNvbnRl
eHQpOwogfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha1NldC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtTZXQuaAkocmV2aXNp
b24gMjcyNzY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha1NldC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE5
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0y
MDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtNTEsNyArNTEsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc0VtcHR5KCkg
Y29uc3Q7CiAgICAgYm9vbCBpc1RyaXZpYWxseURlc3RydWN0aWJsZSgpIGNvbnN0OwogCi0gICAg
dm9pZCB2aXNpdChTbG90VmlzaXRvciYpOworICAgIHZvaWQgdmlzaXQoQWJzdHJhY3RTbG90Vmlz
aXRvciYpOwogCiAgICAgdm9pZCByZWFwKCk7CiAgICAgdm9pZCBzd2VlcCgpOwpAQCAtMTE0LDcg
KzExNCw3IEBAIGlubGluZSB2b2lkIFdlYWtTZXQ6Omxhc3RDaGFuY2VUb0ZpbmFsaXoKICAgICAg
ICAgYmxvY2stPmxhc3RDaGFuY2VUb0ZpbmFsaXplKCk7CiB9CiAKLWlubGluZSB2b2lkIFdlYWtT
ZXQ6OnZpc2l0KFNsb3RWaXNpdG9yJiB2aXNpdG9yKQoraW5saW5lIHZvaWQgV2Vha1NldDo6dmlz
aXQoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBmb3IgKFdlYWtCbG9jayog
YmxvY2sgPSBtX2Jsb2Nrcy5oZWFkKCk7IGJsb2NrOyBibG9jayA9IGJsb2NrLT5uZXh0KCkpCiAg
ICAgICAgIGJsb2NrLT52aXNpdCh2aXNpdG9yKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnRlcnByZXRlci9TaGFkb3dDaGlja2VuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU2hhZG93Q2hpY2tlbi5jcHAJKHJldmlzaW9uIDI3Mjc2
OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TaGFkb3dDaGlja2VuLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTYtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ0MCw3ICs0NDAsNyBAQCB2b2lkIFNoYWRvd0NoaWNrZW46
OnVwZGF0ZShWTSYgdm0sIENhbGxGCiAgICAgICAgIGRhdGFMb2coIiAgICBBZnRlciBjbGVhbi11
cDogIiwgKnRoaXMsICJcbiIpOwogfQogCi12b2lkIFNoYWRvd0NoaWNrZW46OnZpc2l0Q2hpbGRy
ZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIFNoYWRvd0NoaWNrZW46OnZpc2l0Q2hpbGRy
ZW4oQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBmb3IgKHVuc2lnbmVkIGkg
PSBtX2xvZ0N1cnNvciAtIG1fbG9nOyBpLS07KSB7CiAgICAgICAgIEpTT2JqZWN0KiBjYWxsZWUg
PSBtX2xvZ1tpXS5jYWxsZWU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0
ZXIvU2hhZG93Q2hpY2tlbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnRlcnByZXRlci9TaGFkb3dDaGlja2VuLmgJKHJldmlzaW9uIDI3Mjc2OSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TaGFkb3dDaGlja2VuLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MzUsMTMgKzM1LDEzIEBACiAKIG5hbWVzcGFjZSBKU0MgewogCitjbGFzcyBBYnN0cmFjdFNsb3RW
aXNpdG9yOwogY2xhc3MgQ2FsbEZyYW1lOwogY2xhc3MgQ29kZUJsb2NrOwogY2xhc3MgSlNBcnJh
eTsKIGNsYXNzIEpTT2JqZWN0OwogY2xhc3MgSlNTY29wZTsKIGNsYXNzIExMSW50T2Zmc2V0c0V4
dHJhY3RvcjsKLWNsYXNzIFNsb3RWaXNpdG9yOwogY2xhc3MgVk07CiAKIC8vIFNoYWRvd0NoaWNr
ZW4gaXMgYSBsb2cgdGhhdCBjYW4gYmUgdXNlZCB0byBwcm9kdWNlIGEgc2hhZG93IHN0YWNrIG9m
IENISUNLRU4tc3R5bGUgc3RhY2sgZnJhbWVzLgpAQCAtMTk2LDcgKzE5Niw3IEBAIHB1YmxpYzoK
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgogICAgIHZvaWQgaXRlcmF0ZShWTSYsIENh
bGxGcmFtZSosIGNvbnN0IEZ1bmN0b3ImKTsKICAgICAKLSAgICB2b2lkIHZpc2l0Q2hpbGRyZW4o
U2xvdFZpc2l0b3ImKTsKKyAgICB2b2lkIHZpc2l0Q2hpbGRyZW4oQWJzdHJhY3RTbG90VmlzaXRv
ciYpOwogICAgIHZvaWQgcmVzZXQoKTsKICAgICAKICAgICAvLyBKSVQgc3VwcG9ydC4KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvR0NBd2FyZUpJVFN0dWJSb3V0aW5lLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0dDQXdhcmVKSVRTdHViUm91dGlu
ZS5jcHAJKHJldmlzaW9uIDI3Mjc2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvR0NB
d2FyZUpJVFN0dWJSb3V0aW5lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTczLDcgKzczLDcgQEAg
dm9pZCBHQ0F3YXJlSklUU3R1YlJvdXRpbmU6OmRlbGV0ZUZyb21HQwogICAgIGRlbGV0ZSB0aGlz
OwogfQogCi12b2lkIEdDQXdhcmVKSVRTdHViUm91dGluZTo6bWFya1JlcXVpcmVkT2JqZWN0c0lu
dGVybmFsKFNsb3RWaXNpdG9yJikKK3ZvaWQgR0NBd2FyZUpJVFN0dWJSb3V0aW5lOjptYXJrUmVx
dWlyZWRPYmplY3RzSW50ZXJuYWwoQWJzdHJhY3RTbG90VmlzaXRvciYpCiB7CiB9CiAKQEAgLTky
LDcgKzkyLDcgQEAgTWFya2luZ0dDQXdhcmVKSVRTdHViUm91dGluZTo6fk1hcmtpbmdHQwogewog
fQogCi12b2lkIE1hcmtpbmdHQ0F3YXJlSklUU3R1YlJvdXRpbmU6Om1hcmtSZXF1aXJlZE9iamVj
dHNJbnRlcm5hbChTbG90VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgTWFya2luZ0dDQXdhcmVKSVRT
dHViUm91dGluZTo6bWFya1JlcXVpcmVkT2JqZWN0c0ludGVybmFsKEFic3RyYWN0U2xvdFZpc2l0
b3ImIHZpc2l0b3IpCiB7CiAgICAgZm9yIChhdXRvJiBlbnRyeSA6IG1fY2VsbHMpCiAgICAgICAg
IHZpc2l0b3IuYXBwZW5kKGVudHJ5KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
R0NBd2FyZUpJVFN0dWJSb3V0aW5lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9HQ0F3YXJlSklUU3R1YlJvdXRpbmUuaAkocmV2aXNpb24gMjcyNzY5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9HQ0F3YXJlSklUU3R1YlJvdXRpbmUuaAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxOCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTYwLDggKzYwLDggQEAgcHVibGljOgogICAgIHsKICAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKCpuZXcgR0NBd2FyZUpJVFN0dWJSb3V0aW5lKGNvZGUsIHZtKSk7CiAgICAgfQotICAg
IAotICAgIHZvaWQgbWFya1JlcXVpcmVkT2JqZWN0cyhTbG90VmlzaXRvciYgdmlzaXRvcikKKwor
ICAgIHZvaWQgbWFya1JlcXVpcmVkT2JqZWN0cyhBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9y
KQogICAgIHsKICAgICAgICAgbWFya1JlcXVpcmVkT2JqZWN0c0ludGVybmFsKHZpc2l0b3IpOwog
ICAgIH0KQEAgLTcxLDcgKzcxLDcgQEAgcHVibGljOgogcHJvdGVjdGVkOgogICAgIHZvaWQgb2Jz
ZXJ2ZVplcm9SZWZDb3VudCgpIG92ZXJyaWRlOwogICAgIAotICAgIHZpcnR1YWwgdm9pZCBtYXJr
UmVxdWlyZWRPYmplY3RzSW50ZXJuYWwoU2xvdFZpc2l0b3ImKTsKKyAgICB2aXJ0dWFsIHZvaWQg
bWFya1JlcXVpcmVkT2JqZWN0c0ludGVybmFsKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKIAogcHJp
dmF0ZToKICAgICBmcmllbmQgY2xhc3MgSklUU3R1YlJvdXRpbmVTZXQ7CkBAIC04OSw3ICs4OSw3
IEBAIHB1YmxpYzoKICAgICB+TWFya2luZ0dDQXdhcmVKSVRTdHViUm91dGluZSgpIG92ZXJyaWRl
OwogICAgIAogcHJvdGVjdGVkOgotICAgIHZvaWQgbWFya1JlcXVpcmVkT2JqZWN0c0ludGVybmFs
KFNsb3RWaXNpdG9yJikgb3ZlcnJpZGU7CisgICAgdm9pZCBtYXJrUmVxdWlyZWRPYmplY3RzSW50
ZXJuYWwoQWJzdHJhY3RTbG90VmlzaXRvciYpIG92ZXJyaWRlOwogCiBwcml2YXRlOgogICAgIFZl
Y3RvcjxXcml0ZUJhcnJpZXI8SlNDZWxsPj4gbV9jZWxsczsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUV29ya2xpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUV29ya2xpc3QuY3BwCShyZXZpc2lvbiAyNzI3NjkpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVFdvcmtsaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxOSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUG9seW1vcnBoaWNDYWxs
U3R1YlJvdXRpbmUuY3BwCShyZXZpc2lvbiAyNzI3NjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L1BvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxOCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTEzNSw3ICsxMzUsNyBAQCBib29sIFBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lOjp2aXNpdFdl
CiAgICAgcmV0dXJuIGlzU3RpbGxMaXZlOwogfQogCi12b2lkIFBvbHltb3JwaGljQ2FsbFN0dWJS
b3V0aW5lOjptYXJrUmVxdWlyZWRPYmplY3RzSW50ZXJuYWwoU2xvdFZpc2l0b3ImIHZpc2l0b3Ip
Cit2b2lkIFBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lOjptYXJrUmVxdWlyZWRPYmplY3RzSW50
ZXJuYWwoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBmb3IgKGF1dG8mIHZh
cmlhbnQgOiBtX3ZhcmlhbnRzKQogICAgICAgICB2aXNpdG9yLmFwcGVuZCh2YXJpYW50KTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1BvbHltb3JwaGljQ2Fs
bFN0dWJSb3V0aW5lLmgJKHJldmlzaW9uIDI3Mjc2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxOCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEw
NSw3ICsxMDUsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCB2aXNpdFdlYWsoVk0mKSBmaW5hbDsKIAog
cHJpdmF0ZToKLSAgICB2b2lkIG1hcmtSZXF1aXJlZE9iamVjdHNJbnRlcm5hbChTbG90VmlzaXRv
ciYpIGZpbmFsOworICAgIHZvaWQgbWFya1JlcXVpcmVkT2JqZWN0c0ludGVybmFsKEFic3RyYWN0
U2xvdFZpc2l0b3ImKSBmaW5hbDsKIAogICAgIFZlY3RvcjxXcml0ZUJhcnJpZXI8SlNDZWxsPiwg
Mj4gbV92YXJpYW50czsKICAgICBVbmlxdWVBcnJheTx1aW50MzJfdD4gbV9mYXN0Q291bnRzOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQWJzdHJhY3RNb2R1bGVSZWNvcmQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Fic3RyYWN0
TW9kdWxlUmVjb3JkLmNwcAkocmV2aXNpb24gMjcyNzY5KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQWJzdHJhY3RNb2R1bGVSZWNvcmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE5IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
NjAsNyArNjAsOCBAQCB2b2lkIEFic3RyYWN0TW9kdWxlUmVjb3JkOjpmaW5pc2hDcmVhdGlvCiAg
ICAgcHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiZGVwZW5kZW5jaWVz
TWFwIl9zKSwgbV9kZXBlbmRlbmNpZXNNYXAuZ2V0KCkpOwogfQogCi12b2lkIEFic3RyYWN0TW9k
dWxlUmVjb3JkOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0
b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBBYnN0cmFjdE1vZHVsZVJlY29y
ZDo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewog
ICAgIEFic3RyYWN0TW9kdWxlUmVjb3JkKiB0aGlzT2JqZWN0ID0ganNDYXN0PEFic3RyYWN0TW9k
dWxlUmVjb3JkKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2Jq
ZWN0LCBpbmZvKCkpOwpAQCAtNzAsNiArNzEsOCBAQCB2b2lkIEFic3RyYWN0TW9kdWxlUmVjb3Jk
Ojp2aXNpdENoaWxkcmVuCiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9kZXBlbmRl
bmNpZXNNYXApOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oQWJzdHJhY3RNb2R1bGVSZWNv
cmQpOworCiB2b2lkIEFic3RyYWN0TW9kdWxlUmVjb3JkOjphcHBlbmRSZXF1ZXN0ZWRNb2R1bGUo
Y29uc3QgSWRlbnRpZmllciYgbW9kdWxlTmFtZSkKIHsKICAgICBtX3JlcXVlc3RlZE1vZHVsZXMu
YWRkKG1vZHVsZU5hbWUuaW1wbCgpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0Fic3RyYWN0TW9kdWxlUmVjb3JkLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQWJzdHJhY3RNb2R1bGVSZWNvcmQuaAkocmV2aXNpb24gMjcyNzY5KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQWJzdHJhY3RNb2R1bGVSZWNvcmQuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIw
MjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0xMzYsNyArMTM2LDcgQEAgcHJvdGVjdGVkOgogICAgIEFic3RyYWN0TW9k
dWxlUmVjb3JkKFZNJiwgU3RydWN0dXJlKiwgY29uc3QgSWRlbnRpZmllciYpOwogICAgIHZvaWQg
ZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxPYmplY3QqLCBWTSYpOwogCi0gICAgc3RhdGljIHZvaWQg
dmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRf
Q0hJTERSRU47CiAKICAgICB2b2lkIHNldE1vZHVsZUVudmlyb25tZW50KEpTR2xvYmFsT2JqZWN0
KiwgSlNNb2R1bGVFbnZpcm9ubWVudCopOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9BcmdMaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9BcmdMaXN0LmNwcAkocmV2aXNpb24gMjcyNzY5KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQXJnTGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogIENvcHlyaWdodCAoQykgMjAwMy0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtNTEsNyArNTEsNyBAQCB2b2lk
IEFyZ0xpc3Q6OmdldFNsaWNlKGludCBzdGFydEluZGV4LCBBCiAgICAgcmVzdWx0Lm1fYXJnQ291
bnQgPSAgbV9hcmdDb3VudCAtIHN0YXJ0SW5kZXg7CiB9CiAKLXZvaWQgTWFya2VkQXJndW1lbnRC
dWZmZXI6Om1hcmtMaXN0cyhTbG90VmlzaXRvciYgdmlzaXRvciwgTGlzdFNldCYgbWFya1NldCkK
K3ZvaWQgTWFya2VkQXJndW1lbnRCdWZmZXI6Om1hcmtMaXN0cyhBYnN0cmFjdFNsb3RWaXNpdG9y
JiB2aXNpdG9yLCBMaXN0U2V0JiBtYXJrU2V0KQogewogICAgIExpc3RTZXQ6Oml0ZXJhdG9yIGVu
ZCA9IG1hcmtTZXQuZW5kKCk7CiAgICAgZm9yIChMaXN0U2V0OjppdGVyYXRvciBpdCA9IG1hcmtT
ZXQuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9BcmdMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQXJnTGlzdC5oCShyZXZpc2lvbiAyNzI3NjkpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9BcmdMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAv
KgogICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAxIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5v
cmcpCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0xMTgsNyArMTE4LDcgQEAgcHVi
bGljOgogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KICAgICAgICAgCi0gICAgc3RhdGlj
IHZvaWQgbWFya0xpc3RzKFNsb3RWaXNpdG9yJiwgTGlzdFNldCYpOworICAgIHN0YXRpYyB2b2lk
IG1hcmtMaXN0cyhBYnN0cmFjdFNsb3RWaXNpdG9yJiwgTGlzdFNldCYpOwogCiAgICAgdm9pZCBl
bnN1cmVDYXBhY2l0eShzaXplX3QgcmVxdWVzdGVkQ2FwYWNpdHkpCiAgICAgewpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVhYmxlSWRlbnRpZmllci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlYWJsZUlkZW50aWZpZXIu
aAkocmV2aXNpb24gMjcyNzY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2Fj
aGVhYmxlSWRlbnRpZmllci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMjAtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM5LDEwICszOSwxMCBAQCB1c2luZyBX
VEY6OlVuaXF1ZWRTdHJpbmdJbXBsOwogCiBuYW1lc3BhY2UgSlNDIHsKIAorY2xhc3MgQWJzdHJh
Y3RTbG90VmlzaXRvcjsKIGNsYXNzIENvZGVCbG9jazsKIGNsYXNzIElkZW50aWZpZXI7CiBjbGFz
cyBKU0NlbGw7Ci1jbGFzcyBTbG90VmlzaXRvcjsKIAogY2xhc3MgQ2FjaGVhYmxlSWRlbnRpZmll
ciB7CiBwdWJsaWM6CkBAIC04Nyw3ICs4Nyw3IEBAIHB1YmxpYzoKIAogICAgIHVpbnRwdHJfdCBy
YXdCaXRzKCkgY29uc3QgeyByZXR1cm4gbV9iaXRzOyB9CiAKLSAgICBpbmxpbmUgdm9pZCB2aXNp
dEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYpIGNvbnN0OworICAgIGlubGluZSB2b2lkIHZpc2l0QWdn
cmVnYXRlKEFic3RyYWN0U2xvdFZpc2l0b3ImKSBjb25zdDsKIAogICAgIEpTX0VYUE9SVF9QUklW
QVRFIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9DYWNoZWFibGVJZGVudGlmaWVySW5saW5lcy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlYWJsZUlkZW50aWZpZXJJbmxp
bmVzLmgJKHJldmlzaW9uIDI3Mjc2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0NhY2hlYWJsZUlkZW50aWZpZXJJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTM3LDcgKzEzNyw3
IEBAIGlubGluZSB2b2lkIENhY2hlYWJsZUlkZW50aWZpZXI6OnNldFVpZEIKICAgICBtX2JpdHMg
PSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90Pih1aWQpIHwgc191aWRUYWc7CiB9CiAKLWlubGluZSB2
b2lkIENhY2hlYWJsZUlkZW50aWZpZXI6OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJiB2aXNp
dG9yKSBjb25zdAoraW5saW5lIHZvaWQgQ2FjaGVhYmxlSWRlbnRpZmllcjo6dmlzaXRBZ2dyZWdh
dGUoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikgY29uc3QKIHsKICAgICBpZiAobV9iaXRz
ICYmIGlzQ2VsbCgpKQogICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKGNlbGwoKSk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DbGFzc0luZm8uaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DbGFzc0luZm8uaAkocmV2aXNp
b24gMjcyNzY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xhc3NJbmZvLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSw3IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMTk5
OS0yMDAxIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCiAgKiAgQ29weXJpZ2h0IChDKSAy
MDAxIFBldGVyIEtlbGx5IChwbWtAcG9zdC5jb20pCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIw
MTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAw
My0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICog
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCkBAIC00NCw5ICs0NCw2IEBAIHN0cnVjdCBNZXRob2RUYWJsZSB7CiAgICAgdXNpbmcgRGVz
dHJveUZ1bmN0aW9uUHRyID0gdm9pZCAoKikoSlNDZWxsKik7CiAgICAgRGVzdHJveUZ1bmN0aW9u
UHRyIE1FVEhPRF9UQUJMRV9FTlRSWShkZXN0cm95KTsKIAotICAgIHVzaW5nIFZpc2l0Q2hpbGRy
ZW5GdW5jdGlvblB0ciA9IHZvaWQgKCopKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7Ci0gICAgVmlz
aXRDaGlsZHJlbkZ1bmN0aW9uUHRyIE1FVEhPRF9UQUJMRV9FTlRSWSh2aXNpdENoaWxkcmVuKTsK
LQogICAgIHVzaW5nIEdldENhbGxEYXRhRnVuY3Rpb25QdHIgPSBDYWxsRGF0YSAoKikoSlNDZWxs
Kik7CiAgICAgR2V0Q2FsbERhdGFGdW5jdGlvblB0ciBNRVRIT0RfVEFCTEVfRU5UUlkoZ2V0Q2Fs
bERhdGEpOwogCkBAIC0xMjAsNyArMTE3LDE2IEBAIHN0cnVjdCBNZXRob2RUYWJsZSB7CiAgICAg
dXNpbmcgRXN0aW1hdGVkU2l6ZUZ1bmN0aW9uUHRyID0gc2l6ZV90ICgqKShKU0NlbGwqLCBWTSYp
OwogICAgIEVzdGltYXRlZFNpemVGdW5jdGlvblB0ciBNRVRIT0RfVEFCTEVfRU5UUlkoZXN0aW1h
dGVkU2l6ZSk7CiAKLSAgICB1c2luZyBWaXNpdE91dHB1dENvbnN0cmFpbnRzUHRyID0gdm9pZCAo
KikoSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICB1c2luZyBWaXNpdENoaWxkcmVuRnVuY3Rp
b25QdHIgPSB2b2lkICgqKShKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIFZpc2l0Q2hpbGRy
ZW5GdW5jdGlvblB0ciBNRVRIT0RfVEFCTEVfRU5UUlkodmlzaXRDaGlsZHJlbldpdGhTbG90Vmlz
aXRvcik7CisKKyAgICB1c2luZyBWaXNpdENoaWxkcmVuV2l0aEFic3RyYWN0U2xvdFZpc2l0b3JQ
dHIgPSB2b2lkICgqKShKU0NlbGwqLCBBYnN0cmFjdFNsb3RWaXNpdG9yJik7CisgICAgVmlzaXRD
aGlsZHJlbldpdGhBYnN0cmFjdFNsb3RWaXNpdG9yUHRyIE1FVEhPRF9UQUJMRV9FTlRSWSh2aXNp
dENoaWxkcmVuV2l0aEFic3RyYWN0U2xvdFZpc2l0b3IpOworCisgICAgQUxXQVlTX0lOTElORSB2
b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikgY29u
c3QgeyB2aXNpdENoaWxkcmVuV2l0aFNsb3RWaXNpdG9yKGNlbGwsIHZpc2l0b3IpOyB9CisgICAg
QUxXQVlTX0lOTElORSB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBBYnN0cmFjdFNs
b3RWaXNpdG9yJiB2aXNpdG9yKSBjb25zdCB7IHZpc2l0Q2hpbGRyZW5XaXRoQWJzdHJhY3RTbG90
VmlzaXRvcihjZWxsLCB2aXNpdG9yKTsgfQorCisgICAgdXNpbmcgVmlzaXRPdXRwdXRDb25zdHJh
aW50c1B0ciA9IHZvaWQgKCopKEpTQ2VsbCosIEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKICAgICBW
aXNpdE91dHB1dENvbnN0cmFpbnRzUHRyIE1FVEhPRF9UQUJMRV9FTlRSWSh2aXNpdE91dHB1dENv
bnN0cmFpbnRzKTsKIH07CiAKQEAgLTE0Nyw3ICsxNTMsNiBAQCBzdHJ1Y3QgTWV0aG9kVGFibGUg
ewogICAgIEpTQ2FzdGluZ0hlbHBlcnM6OkluaGVyaXRzVHJhaXRzPENsYXNzTmFtZT46OnR5cGVS
YW5nZSwgXAogICAgIHsgXAogICAgICAgICAmQ2xhc3NOYW1lOjpkZXN0cm95LCBcCi0gICAgICAg
ICZDbGFzc05hbWU6OnZpc2l0Q2hpbGRyZW4sIFwKICAgICAgICAgJkNsYXNzTmFtZTo6Z2V0Q2Fs
bERhdGEsIFwKICAgICAgICAgJkNsYXNzTmFtZTo6Z2V0Q29uc3RydWN0RGF0YSwgXAogICAgICAg
ICAmQ2xhc3NOYW1lOjpwdXQsIFwKQEAgLTE3Myw2ICsxNzgsOCBAQCBzdHJ1Y3QgTWV0aG9kVGFi
bGUgewogICAgICAgICAmQ2xhc3NOYW1lOjpkdW1wVG9TdHJlYW0sIFwKICAgICAgICAgJkNsYXNz
TmFtZTo6YW5hbHl6ZUhlYXAsIFwKICAgICAgICAgJkNsYXNzTmFtZTo6ZXN0aW1hdGVkU2l6ZSwg
XAorICAgICAgICAmQ2xhc3NOYW1lOjp2aXNpdENoaWxkcmVuLCBcCisgICAgICAgICZDbGFzc05h
bWU6OnZpc2l0Q2hpbGRyZW4sIFwKICAgICAgICAgJkNsYXNzTmFtZTo6dmlzaXRPdXRwdXRDb25z
dHJhaW50cywgXAogICAgIH0sIFwKICAgICBDbGFzc05hbWU6OlR5cGVkQXJyYXlTdG9yYWdlVHlw
ZSwgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xvbmVkQXJndW1lbnRz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DbG9uZWRB
cmd1bWVudHMuY3BwCShyZXZpc2lvbiAyNzI3NjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9DbG9uZWRBcmd1bWVudHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjY3LDcgKzI2
Nyw4IEBAIHZvaWQgQ2xvbmVkQXJndW1lbnRzOjptYXRlcmlhbGl6ZVNwZWNpYWwKICAgICAgICAg
bWF0ZXJpYWxpemVTcGVjaWFscyhnbG9iYWxPYmplY3QpOwogfQogCi12b2lkIENsb25lZEFyZ3Vt
ZW50czo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQor
dGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgQ2xvbmVkQXJndW1lbnRzOjp2aXNpdENo
aWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgQ2xvbmVk
QXJndW1lbnRzKiB0aGlzT2JqZWN0ID0ganNDYXN0PENsb25lZEFyZ3VtZW50cyo+KGNlbGwpOwog
ICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTI3
NSw1ICsyNzYsNyBAQCB2b2lkIENsb25lZEFyZ3VtZW50czo6dmlzaXRDaGlsZHJlbihKU0NlCiAg
ICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9jYWxsZWUpOwogfQogCitERUZJTkVfVklT
SVRfQ0hJTERSRU4oQ2xvbmVkQXJndW1lbnRzKTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Nsb25lZEFyZ3VtZW50cy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Nsb25lZEFyZ3VtZW50cy5o
CShyZXZpc2lvbiAyNzI3NjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DbG9u
ZWRBcmd1bWVudHMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTUtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTYyLDcgKzYyLDcgQEAgcHVibGljOgog
ICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0
KiwgSlNWYWx1ZSBwcm90b3R5cGUpOwogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVNsb3dQ
dXRTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUgcHJvdG90eXBlKTsKIAot
ICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAg
ICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgREVDTEFSRV9JTkZPOwogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EaXJlY3RBcmd1bWVudHMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5jcHAJ
KHJldmlzaW9uIDI3Mjc2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVj
dEFyZ3VtZW50cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDE1LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE1LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC05MCw3ICs5MCw4IEBAIHNpemVfdCBE
aXJlY3RBcmd1bWVudHM6OmVzdGltYXRlZFNpemUoSlMKICAgICByZXR1cm4gQmFzZTo6ZXN0aW1h
dGVkU2l6ZShjZWxsLCB2bSkgKyBtYXBwZWRBcmd1bWVudHNTaXplICsgbW9kaWZpZWRBcmd1bWVu
dHNTaXplOwogfQogCi12b2lkIERpcmVjdEFyZ3VtZW50czo6dmlzaXRDaGlsZHJlbihKU0NlbGwq
IHRoaXNDZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0
b3I+Cit2b2lkIERpcmVjdEFyZ3VtZW50czo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiB0aGlz
Q2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBEaXJlY3RBcmd1bWVudHMqIHRoaXNPYmpl
Y3QgPSBzdGF0aWNfY2FzdDxEaXJlY3RBcmd1bWVudHMqPih0aGlzQ2VsbCk7CiAgICAgQVNTRVJU
X0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtMTA0LDYgKzEwNSw4
IEBAIHZvaWQgRGlyZWN0QXJndW1lbnRzOjp2aXNpdENoaWxkcmVuKEpTQ2UKICAgICBHZW5lcmlj
QXJndW1lbnRzPERpcmVjdEFyZ3VtZW50cz46OnZpc2l0Q2hpbGRyZW4odGhpc0NlbGwsIHZpc2l0
b3IpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oRGlyZWN0QXJndW1lbnRzKTsKKwogU3Ry
dWN0dXJlKiBEaXJlY3RBcmd1bWVudHM6OmNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQogewogICAgIHJldHVybiBT
dHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKERp
cmVjdEFyZ3VtZW50c1R5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5oCShyZXZpc2lv
biAyNzI3NjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EaXJlY3RBcmd1bWVu
dHMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTUtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTUtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY1LDcgKzY1LDcgQEAgcHVibGljOgogICAgIHN0YXRp
YyBEaXJlY3RBcmd1bWVudHMqIGNyZWF0ZUJ5Q29weWluZyhKU0dsb2JhbE9iamVjdCosIENhbGxG
cmFtZSopOwogCiAgICAgc3RhdGljIHNpemVfdCBlc3RpbWF0ZWRTaXplKEpTQ2VsbCosIFZNJik7
Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwor
ICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAgICAgCiAgICAgdWludDMyX3QgaW50ZXJuYWxM
ZW5ndGgoKSBjb25zdAogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0V2YWxFeGVjdXRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9FdmFsRXhlY3V0YWJsZS5jcHAJKHJldmlzaW9uIDI3Mjc2OSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0V2YWxFeGVjdXRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAsIDIwMTMsIDIw
MTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDktMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTUwLDcgKzUwLDggQEAgYXV0byBFdmFsRXhlY3V0YWJsZTo6
ZW5zdXJlVGVtcGxhdGVPYmplYwogICAgIHJldHVybiBlbnN1cmVUZW1wbGF0ZU9iamVjdE1hcElt
cGwobV90ZW1wbGF0ZU9iamVjdE1hcCk7CiB9CiAKLXZvaWQgRXZhbEV4ZWN1dGFibGU6OnZpc2l0
Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5
cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEV2YWxFeGVjdXRhYmxlOjp2aXNpdENoaWxkcmVuSW1wbChK
U0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgRXZhbEV4ZWN1dGFibGUqIHRo
aXNPYmplY3QgPSBqc0Nhc3Q8RXZhbEV4ZWN1dGFibGUqPihjZWxsKTsKICAgICBBU1NFUlRfR0Nf
T0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC02NCw0ICs2NSw2IEBAIHZv
aWQgRXZhbEV4ZWN1dGFibGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWwKICAgICB9CiB9CiAKK0RFRklO
RV9WSVNJVF9DSElMRFJFTihFdmFsRXhlY3V0YWJsZSk7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXZhbEV4ZWN1dGFibGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FdmFsRXhlY3V0YWJsZS5o
CShyZXZpc2lvbiAyNzI3NjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FdmFs
RXhlY3V0YWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAwOS0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAwOS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNzksNyArNzksNyBAQCBwcm90ZWN0ZWQ6
CiAgICAgdXNpbmcgQmFzZTo6ZmluaXNoQ3JlYXRpb247CiAgICAgRXZhbEV4ZWN1dGFibGUoSlNH
bG9iYWxPYmplY3QqLCBjb25zdCBTb3VyY2VDb2RlJiwgYm9vbCBpblN0cmljdENvbnRleHQsIERl
cml2ZWRDb250ZXh0VHlwZSwgYm9vbCBpc0Fycm93RnVuY3Rpb25Db250ZXh0LCBib29sIGlzSW5z
aWRlT3JkaW5hcnlGdW5jdGlvbiwgRXZhbENvbnRleHRUeXBlLCBOZWVkc0NsYXNzRmllbGRJbml0
aWFsaXplciwgUHJpdmF0ZUJyYW5kUmVxdWlyZW1lbnQpOwogCi0gICAgc3RhdGljIHZvaWQgdmlz
aXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJ
TERSRU47CiAKICAgICB1bnNpZ25lZCBtX25lZWRzQ2xhc3NGaWVsZEluaXRpYWxpemVyIDogMTsK
ICAgICB1bnNpZ25lZCBtX3ByaXZhdGVCcmFuZFJlcXVpcmVtZW50IDogMTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9uLmNwcAkocmV2aXNpb24gMjcyNzY5
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9uLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxOSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTUzLDcgKzUzLDggQEAgU3RydWN0dXJlKiBFeGNlcHRpb246OmNyZWF0ZVN0
cnVjdHVyZShWTQogICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0
LCBwcm90b3R5cGUsIFR5cGVJbmZvKENlbGxUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7
CiB9CiAKLXZvaWQgRXhjZXB0aW9uOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZp
c2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBFeGNlcHRp
b246OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsK
ICAgICBFeGNlcHRpb24qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8RXhjZXB0aW9uKj4oY2VsbCk7CiAg
ICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNjQs
NiArNjUsOCBAQCB2b2lkIEV4Y2VwdGlvbjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlCiAgICAg
ICAgIGZyYW1lLnZpc2l0Q2hpbGRyZW4odmlzaXRvcik7CiB9CiAKK0RFRklORV9WSVNJVF9DSElM
RFJFTihFeGNlcHRpb24pOworCiBFeGNlcHRpb246OkV4Y2VwdGlvbihWTSYgdm0pCiAgICAgOiBC
YXNlKHZtLCB2bS5leGNlcHRpb25TdHJ1Y3R1cmUuZ2V0KCkpCiB7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9FeGNlcHRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9FeGNlcHRpb24uaAkocmV2aXNpb24gMjcyNzY5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTkgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC01MSw3ICs1MSw3IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0
cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBwcm90b3R5cGUpOwogCi0gICAg
c3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERF
Q0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBERUNMQVJFX0VYUE9SVF9JTkZPOwogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvbkV4ZWN1dGFibGUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uRXhlY3V0
YWJsZS5jcHAJKHJldmlzaW9uIDI3Mjc2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02Nyw3ICs2Nyw4
IEBAIEZ1bmN0aW9uQ29kZUJsb2NrKiBGdW5jdGlvbkV4ZWN1dGFibGU6OmIKICAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8RnVuY3Rpb25Db2RlQmxvY2sqPihlZGdlLT5jb2RlQmxvY2soKS0+YmFzZWxp
bmVBbHRlcm5hdGl2ZSgpKTsKIH0KIAotdm9pZCBGdW5jdGlvbkV4ZWN1dGFibGU6OnZpc2l0Q2hp
bGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVu
YW1lIFZpc2l0b3I+Cit2b2lkIEZ1bmN0aW9uRXhlY3V0YWJsZTo6dmlzaXRDaGlsZHJlbkltcGwo
SlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEZ1bmN0aW9uRXhlY3V0YWJs
ZSogdGhpc09iamVjdCA9IGpzQ2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihjZWxsKTsKICAgICBB
U1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC04Niw2ICs4
Nyw4IEBAIHZvaWQgRnVuY3Rpb25FeGVjdXRhYmxlOjp2aXNpdENoaWxkcmVuKEoKICAgICB9CiB9
CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihGdW5jdGlvbkV4ZWN1dGFibGUpOworCiBGdW5jdGlv
bkV4ZWN1dGFibGUqIEZ1bmN0aW9uRXhlY3V0YWJsZTo6ZnJvbUdsb2JhbENvZGUoCiAgICAgY29u
c3QgSWRlbnRpZmllciYgbmFtZSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3Qg
U291cmNlQ29kZSYgc291cmNlLCAKICAgICBKU09iamVjdComIGV4Y2VwdGlvbiwgaW50IG92ZXJy
aWRlTGluZU51bWJlciwgT3B0aW9uYWw8aW50PiBmdW5jdGlvbkNvbnN0cnVjdG9yUGFyYW1ldGVy
c0VuZFBvc2l0aW9uKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rp
b25FeGVjdXRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvRnVuY3Rpb25FeGVjdXRhYmxlLmgJKHJldmlzaW9uIDI3Mjc2OSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOS0yMDE5IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDIxIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtMTY2LDcgKzE2Niw3IEBAIHB1YmxpYzoKICAgICBKU1BhcnNlclNjcmlwdE1vZGUgc2NyaXB0
TW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fdW5saW5rZWRFeGVjdXRhYmxlLT5zY3JpcHRNb2RlKCk7
IH0KICAgICBTb3VyY2VDb2RlIGNsYXNzU291cmNlKCkgY29uc3QgeyByZXR1cm4gbV91bmxpbmtl
ZEV4ZWN1dGFibGUtPmNsYXNzU291cmNlKCk7IH0KIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hp
bGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVO
OwogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG8pCiAgICAgewogICAgICAgICByZXR1
cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG8sIFR5cGVJbmZvKEZ1
bmN0aW9uRXhlY3V0YWJsZVR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uUmFyZURhdGEuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uUmFyZURhdGEuY3Bw
CShyZXZpc2lvbiAyNzI3NjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5j
dGlvblJhcmVEYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTUtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTUxLDcgKzUxLDggQEAgU3RydWN0
dXJlKiBGdW5jdGlvblJhcmVEYXRhOjpjcmVhdGVTdHJ1YwogICAgIHJldHVybiBTdHJ1Y3R1cmU6
OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKENlbGxUeXBlLCBT
dHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CiB9CiAKLXZvaWQgRnVuY3Rpb25SYXJlRGF0YTo6dmlz
aXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8
dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgRnVuY3Rpb25SYXJlRGF0YTo6dmlzaXRDaGlsZHJlbklt
cGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEZ1bmN0aW9uUmFyZURh
dGEqIHJhcmVEYXRhID0ganNDYXN0PEZ1bmN0aW9uUmFyZURhdGEqPihjZWxsKTsKICAgICBBU1NF
UlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNlbGwsIGluZm8oKSk7CkBAIC02Myw2ICs2NCw4IEBAIHZv
aWQgRnVuY3Rpb25SYXJlRGF0YTo6dmlzaXRDaGlsZHJlbihKU0MKICAgICB2aXNpdG9yLmFwcGVu
ZChyYXJlRGF0YS0+bV9leGVjdXRhYmxlKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEZ1
bmN0aW9uUmFyZURhdGEpOworCiBGdW5jdGlvblJhcmVEYXRhOjpGdW5jdGlvblJhcmVEYXRhKFZN
JiB2bSwgRXhlY3V0YWJsZUJhc2UqIGV4ZWN1dGFibGUpCiAgICAgOiBCYXNlKHZtLCB2bS5mdW5j
dGlvblJhcmVEYXRhU3RydWN0dXJlLmdldCgpKQogICAgICwgbV9vYmplY3RBbGxvY2F0aW9uUHJv
ZmlsZSgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvblJhcmVE
YXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rp
b25SYXJlRGF0YS5oCShyZXZpc2lvbiAyNzI3NjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9GdW5jdGlvblJhcmVEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02NSw3ICs2NSw3
IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYs
IEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBwcm90b3R5cGUpOwogCi0gICAgc3RhdGljIHZvaWQg
dmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRf
Q0hJTERSRU47CiAKICAgICBERUNMQVJFX0lORk87CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0dlbmVyaWNBcmd1bWVudHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljQXJndW1lbnRzLmgJKHJldmlzaW9uIDI3Mjc2OSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNBcmd1bWVudHMuaAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAy
MCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUt
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTQ0LDcgKzQ0LDcgQEAgcHJvdGVjdGVkOgogICAgIHsKICAgICB9CiAK
LSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7Cisg
ICAgREVDTEFSRV9URU1QTEFURV9WSVNJVF9DSElMRFJFTjsKICAgICBzdGF0aWMgYm9vbCBnZXRP
d25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSwg
UHJvcGVydHlTbG90Jik7CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90QnlJbmRl
eChKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBQcm9w
ZXJ0eVNsb3QmKTsKICAgICBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0
KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIERvbnRFbnVtUHJvcGVydGll
c01vZGUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3Vt
ZW50c0lubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9HZW5lcmljQXJndW1lbnRzSW5saW5lcy5oCShyZXZpc2lvbiAyNzI3NjkpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljQXJndW1lbnRzSW5saW5lcy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIwIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMzEsNyArMzEsOCBAQAogbmFtZXNwYWNlIEpTQyB7CiAKIHRlbXBsYXRlPHR5
cGVuYW1lIFR5cGU+Ci12b2lkIEdlbmVyaWNBcmd1bWVudHM8VHlwZT46OnZpc2l0Q2hpbGRyZW4o
SlNDZWxsKiB0aGlzQ2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBWaXNpdG9yPgordm9pZCBHZW5lcmljQXJndW1lbnRzPFR5cGU+Ojp2aXNpdENoaWxkcmVuSW1w
bChKU0NlbGwqIHRoaXNDZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFR5cGUqIHRoaXNP
YmplY3QgPSBzdGF0aWNfY2FzdDxUeXBlKj4odGhpc0NlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpF
Q1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTQxLDYgKzQyLDggQEAgdm9pZCBH
ZW5lcmljQXJndW1lbnRzPFR5cGU+Ojp2aXNpdENoaWxkcgogICAgICAgICB2aXNpdG9yLm1hcmtB
dXhpbGlhcnkodGhpc09iamVjdC0+bV9tb2RpZmllZEFyZ3VtZW50c0Rlc2NyaXB0b3IuZ2V0VW5z
YWZlKCkpOwogfQogCitERUZJTkVfVEVNUExBVEVfVklTSVRfQ0hJTERSRU4odGVtcGxhdGU8dHlw
ZW5hbWUgVHlwZT4sIEdlbmVyaWNBcmd1bWVudHM8VHlwZT4pOworCiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUeXBlPgogYm9vbCBHZW5lcmljQXJndW1lbnRzPFR5cGU+OjpnZXRPd25Qcm9wZXJ0eVNsb3Qo
SlNPYmplY3QqIG9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUHJvcGVydHlO
YW1lIGlkZW50LCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9HZXR0ZXJTZXR0ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0dldHRlclNldHRlci5jcHAJKHJldmlzaW9uIDI3Mjc2OSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dldHRlclNldHRlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNyArMSw3IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAyIEhh
cnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCiAgKiAgQ29weXJpZ2h0IChDKSAyMDAxIFBldGVy
IEtlbGx5IChwbWtAcG9zdC5jb20pCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA0LTIwMTcgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwNC0yMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0z
Myw3ICszMyw4IEBAIFNUQVRJQ19BU1NFUlRfSVNfVFJJVklBTExZX0RFU1RSVUNUSUJMRSgKIAog
Y29uc3QgQ2xhc3NJbmZvIEdldHRlclNldHRlcjo6c19pbmZvID0geyAiR2V0dGVyU2V0dGVyIiwg
bnVsbHB0ciwgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShHZXR0ZXJTZXR0
ZXIpIH07CiAKLXZvaWQgR2V0dGVyU2V0dGVyOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwg
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBH
ZXR0ZXJTZXR0ZXI6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlz
aXRvcikKIHsKICAgICBHZXR0ZXJTZXR0ZXIqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8R2V0dGVyU2V0
dGVyKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBp
bmZvKCkpOwpAQCAtNDMsNiArNDQsOCBAQCB2b2lkIEdldHRlclNldHRlcjo6dmlzaXRDaGlsZHJl
bihKU0NlbGwqCiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9zZXR0ZXIpOwogfQog
CitERUZJTkVfVklTSVRfQ0hJTERSRU4oR2V0dGVyU2V0dGVyKTsKKwogSlNWYWx1ZSBjYWxsR2V0
dGVyKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgYmFzZSwgSlNWYWx1ZSBn
ZXR0ZXJTZXR0ZXIpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2V0dGVyU2V0dGVyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2V0dGVyU2V0dGVyLmgJKHJldmlzaW9u
IDI3Mjc2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dldHRlclNldHRlci5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5
OTktMjAwMSBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQogICogIENvcHlyaWdodCAoQykg
MjAwMSBQZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQotICogIENvcHlyaWdodCAoQykgMjAwMy0y
MDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIw
MDMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAq
ICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYwpAQCAtODIsNyArODIsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBjcmVhdGUodm0s
IGdsb2JhbE9iamVjdCwgZ2V0dGVyT2JqZWN0LCBzZXR0ZXJPYmplY3QpOwogICAgIH0KIAotICAg
IHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBE
RUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgSlNPYmplY3QqIGdldHRlcigpIGNvbnN0IHsg
cmV0dXJuIG1fZ2V0dGVyLmdldCgpOyB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0hhc2hNYXBJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9IYXNoTWFwSW1wbC5jcHAJKHJldmlzaW9uIDI3Mjc2OSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0hhc2hNYXBJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMCw2
ICszMCw5IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCitERUZJTkVfVEVNUExBVEVfVklTSVRfQ0hJ
TERSRU4odGVtcGxhdGU8PiwgSGFzaE1hcEJ1Y2tldDxIYXNoTWFwQnVja2V0RGF0YUtleT4pOwor
REVGSU5FX1RFTVBMQVRFX1ZJU0lUX0NISUxEUkVOKHRlbXBsYXRlPD4sIEhhc2hNYXBCdWNrZXQ8
SGFzaE1hcEJ1Y2tldERhdGFLZXlWYWx1ZT4pOworCiB0ZW1wbGF0ZTw+CiBjb25zdCBDbGFzc0lu
Zm8gSGFzaE1hcEJ1Y2tldDxIYXNoTWFwQnVja2V0RGF0YUtleT46OnNfaW5mbyA9CiAgICAgeyAi
SGFzaE1hcEJ1Y2tldCIsIG51bGxwdHIsIG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0Rf
VEFCTEUoSGFzaE1hcEJ1Y2tldDxIYXNoTWFwQnVja2V0RGF0YUtleT4pIH07CkBAIC0zOCw4ICs0
MSw5IEBAIHRlbXBsYXRlPD4KIGNvbnN0IENsYXNzSW5mbyBIYXNoTWFwQnVja2V0PEhhc2hNYXBC
dWNrZXREYXRhS2V5VmFsdWU+OjpzX2luZm8gPQogICAgIHsgIkhhc2hNYXBCdWNrZXQiLCBudWxs
cHRyLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEhhc2hNYXBCdWNrZXQ8
SGFzaE1hcEJ1Y2tldERhdGFLZXlWYWx1ZT4pIH07CiAKLXRlbXBsYXRlIDx0eXBlbmFtZSBEYXRh
Pgotdm9pZCBIYXNoTWFwQnVja2V0PERhdGE+Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwg
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBEYXRhPgordGVtcGxhdGU8
dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSGFzaE1hcEJ1Y2tldDxEYXRhPjo6dmlzaXRDaGlsZHJl
bkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEhhc2hNYXBCdWNr
ZXQqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SGFzaE1hcEJ1Y2tldCo+KGNlbGwpOwogICAgIEFTU0VS
VF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTUyLDggKzU2LDkg
QEAgdm9pZCBIYXNoTWFwQnVja2V0PERhdGE+Ojp2aXNpdENoaWxkcmVuKAogICAgIHZpc2l0b3Iu
YXBwZW5kVmFsdWVzKGJpdHdpc2VfY2FzdDxXcml0ZUJhcnJpZXI8VW5rbm93bj4qPigmdGhpc09i
amVjdC0+bV9kYXRhKSwgc2l6ZW9mKERhdGEpIC8gc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3du
PikpOwogfQogCi10ZW1wbGF0ZSA8dHlwZW5hbWUgSGFzaE1hcEJ1Y2tldD4KLXZvaWQgSGFzaE1h
cEltcGw8SGFzaE1hcEJ1Y2tldD46OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90Vmlz
aXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIEhhc2hNYXBCdWNrZXQ+Cit0ZW1wbGF0
ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBIYXNoTWFwSW1wbDxIYXNoTWFwQnVja2V0Pjo6dmlz
aXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEhh
c2hNYXBJbXBsKiB0aGlzT2JqZWN0ID0ganNDYXN0PEhhc2hNYXBJbXBsKj4oY2VsbCk7CiAgICAg
QVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNjYsNiAr
NzEsOCBAQCB2b2lkIEhhc2hNYXBJbXBsPEhhc2hNYXBCdWNrZXQ+Ojp2aXNpdENoCiAgICAgICAg
IHZpc2l0b3IubWFya0F1eGlsaWFyeShidWZmZXIpOwogfQogCitERUZJTkVfVEVNUExBVEVfVklT
SVRfQ0hJTERSRU4odGVtcGxhdGU8dHlwZW5hbWUgSGFzaE1hcEJ1Y2tldD4sIEhhc2hNYXBJbXBs
PEhhc2hNYXBCdWNrZXQ+KTsKKwogdGVtcGxhdGUgPHR5cGVuYW1lIEhhc2hNYXBCdWNrZXQ+CiBz
aXplX3QgSGFzaE1hcEltcGw8SGFzaE1hcEJ1Y2tldD46OmVzdGltYXRlZFNpemUoSlNDZWxsKiBj
ZWxsLCBWTSYgdm0pCiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9IYXNo
TWFwSW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0hh
c2hNYXBJbXBsLmgJKHJldmlzaW9uIDI3Mjc2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0hhc2hNYXBJbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xNDgsNyArMTQ4LDcgQEAg
cHVibGljOgogICAgICAgICByZXR1cm4gbV9kYXRhLnZhbHVlLmdldCgpOwogICAgIH0KIAotICAg
IHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBE
RUNMQVJFX1RFTVBMQVRFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgQUxXQVlTX0lOTElORSBIYXNo
TWFwQnVja2V0KiBuZXh0KCkgY29uc3QgeyByZXR1cm4gbV9uZXh0LmdldCgpOyB9CiAgICAgQUxX
QVlTX0lOTElORSBIYXNoTWFwQnVja2V0KiBwcmV2KCkgY29uc3QgeyByZXR1cm4gbV9wcmV2Lmdl
dCgpOyB9CkBAIC0zNjQsNyArMzY0LDcgQEAgY2xhc3MgSGFzaE1hcEltcGwgOiBwdWJsaWMgSlNO
b25GaW5hbE9iagogcHVibGljOgogICAgIHVzaW5nIEJ1Y2tldFR5cGUgPSBIYXNoTWFwQnVja2V0
VHlwZTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0
b3ImKTsKKyAgICBERUNMQVJFX1RFTVBMQVRFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgc3RhdGlj
IHNpemVfdCBlc3RpbWF0ZWRTaXplKEpTQ2VsbCosIFZNJik7CiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0ludGVybmFsRnVuY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGVybmFsRnVuY3Rpb24uY3BwCShyZXZpc2lv
biAyNzI3NjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRlcm5hbEZ1bmN0
aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiAgQ29weXJpZ2h0
IChDKSAxOTk5LTIwMDIgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKICAqICBDb3B5cmln
aHQgKEMpIDIwMDEgUGV0ZXIgS2VsbHkgKHBta0Bwb3N0LmNvbSkKLSAqICBDb3B5cmlnaHQgKEMp
IDIwMDQtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0
IChDKSAyMDA0LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKQEAgLTY0LDcgKzY0LDggQEAgdm9pZCBJbnRlcm5hbEZ1bmN0aW9uOjpmaW5p
c2hDcmVhdGlvbihWTQogICAgIH0KIH0KIAotdm9pZCBJbnRlcm5hbEZ1bmN0aW9uOjp2aXNpdENo
aWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBl
bmFtZSBWaXNpdG9yPgordm9pZCBJbnRlcm5hbEZ1bmN0aW9uOjp2aXNpdENoaWxkcmVuSW1wbChK
U0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSW50ZXJuYWxGdW5jdGlvbiog
dGhpc09iamVjdCA9IGpzQ2FzdDxJbnRlcm5hbEZ1bmN0aW9uKj4oY2VsbCk7CiAgICAgQVNTRVJU
X0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNzMsNiArNzQsOCBA
QCB2b2lkIEludGVybmFsRnVuY3Rpb246OnZpc2l0Q2hpbGRyZW4oSlNDCiAgICAgdmlzaXRvci5h
cHBlbmQodGhpc09iamVjdC0+bV9vcmlnaW5hbE5hbWUpOwogfQogCitERUZJTkVfRVhQT1JUX1ZJ
U0lUX0NISUxEUkVOKEludGVybmFsRnVuY3Rpb24pOworCiBjb25zdCBTdHJpbmcmIEludGVybmFs
RnVuY3Rpb246Om5hbWUoKQogewogICAgIGNvbnN0IFN0cmluZyYgbmFtZSA9IG1fb3JpZ2luYWxO
YW1lLT50cnlHZXRWYWx1ZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SW50ZXJuYWxGdW5jdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0ludGVybmFsRnVuY3Rpb24uaAkocmV2aXNpb24gMjcyNzY5KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50ZXJuYWxGdW5jdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDYgKzEsNiBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMCBIYXJyaSBQb3J0
ZW4gKHBvcnRlbkBrZGUub3JnKQotICogIENvcHlyaWdodCAoQykgMjAwMy0yMDE5IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAyMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA3IENhbWVy
b24gWndhcmljaCAoY3d6d2FyaWNoQHV3YXRlcmxvby5jYSkKICAqICBDb3B5cmlnaHQgKEMpIDIw
MDcgTWFrcyBPcmxvdmljaAogICoKQEAgLTQ2LDcgKzQ2LDcgQEAgcHVibGljOgogCiAgICAgREVD
TEFSRV9FWFBPUlRfSU5GTzsKIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIHZp
c2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX0VYUE9SVF9W
SVNJVF9DSElMRFJFTjsKIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIGNvbnN0IFN0cmluZyYgbmFt
ZSgpOwogICAgIGNvbnN0IFN0cmluZyBkaXNwbGF5TmFtZShWTSYpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bENvbGxhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsQ29sbGF0b3IuY3BwCShyZXZpc2lvbiAyNzI3
NjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsQ29sbGF0b3IuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxNSBB
bmR5IFZhbldhZ29uZXIgKGFuZHlAdmFud2Fnb25lci5mYW1pbHkpCiAgKiBDb3B5cmlnaHQgKEMp
IDIwMTUgU3Vrb2xzYWsgU2Frc2h1d29uZyAoc3Vrb2xzYWtAZ21haWwuY29tKQotICogQ29weXJp
Z2h0IChDKSAyMDE2LTIwMjAgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02NSw3ICs2NSw4IEBAIHZvaWQgSW50bENv
bGxhdG9yOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0KICAgICBBU1NFUlQoaW5oZXJpdHModm0sIGlu
Zm8oKSkpOwogfQogCi12b2lkIEludGxDb2xsYXRvcjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNl
bGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3Zv
aWQgSW50bENvbGxhdG9yOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3Im
IHZpc2l0b3IpCiB7CiAgICAgSW50bENvbGxhdG9yKiB0aGlzT2JqZWN0ID0ganNDYXN0PEludGxD
b2xsYXRvcio+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVj
dCwgaW5mbygpKTsKQEAgLTc1LDYgKzc2LDggQEAgdm9pZCBJbnRsQ29sbGF0b3I6OnZpc2l0Q2hp
bGRyZW4oSlNDZWxsKgogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fYm91bmRDb21w
YXJlKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEludGxDb2xsYXRvcik7CisKIFZlY3Rv
cjxTdHJpbmc+IEludGxDb2xsYXRvcjo6c29ydExvY2FsZURhdGEoY29uc3QgU3RyaW5nJiBsb2Nh
bGUsIFJlbGV2YW50RXh0ZW5zaW9uS2V5IGtleSkKIHsKICAgICAvLyA5LjEgSW50ZXJuYWwgc2xv
dHMgb2YgU2VydmljZSBDb25zdHJ1Y3RvcnMgJiAxMC4yLjMgSW50ZXJuYWwgc2xvdHMgKEVDTUEt
NDAyIDIuMCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxDb2xsYXRv
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxDb2xs
YXRvci5oCShyZXZpc2lvbiAyNzI3NjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9JbnRsQ29sbGF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBD
b3B5cmlnaHQgKEMpIDIwMTUgQW5keSBWYW5XYWdvbmVyIChhbmR5QHZhbndhZ29uZXIuZmFtaWx5
KQorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODAsNyArODEsNyBAQCBwdWJsaWM6
CiBwcml2YXRlOgogICAgIEludGxDb2xsYXRvcihWTSYsIFN0cnVjdHVyZSopOwogICAgIHZvaWQg
ZmluaXNoQ3JlYXRpb24oVk0mKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2Vs
bCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIGJv
b2wgdXBkYXRlQ2FuRG9BU0NJSVVDQURVQ0VUQ29tcGFyaXNvbigpIGNvbnN0OwogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsRGF0ZVRpbWVGb3JtYXQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxEYXRlVGltZUZvcm1h
dC5jcHAJKHJldmlzaW9uIDI3Mjc2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0ludGxEYXRlVGltZUZvcm1hdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAv
KgogICogQ29weXJpZ2h0IChDKSAyMDE1IEFuZHkgVmFuV2Fnb25lciAoYW5keUB2YW53YWdvbmVy
LmZhbWlseSkKLSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtOTAsNyAr
OTAsOCBAQCB2b2lkIEludGxEYXRlVGltZUZvcm1hdDo6ZmluaXNoQ3JlYXRpb24oCiAgICAgQVNT
RVJUKGluaGVyaXRzKHZtLCBpbmZvKCkpKTsKIH0KIAotdm9pZCBJbnRsRGF0ZVRpbWVGb3JtYXQ6
OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBs
YXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEludGxEYXRlVGltZUZvcm1hdDo6dmlzaXRDaGls
ZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEludGxEYXRl
VGltZUZvcm1hdCogdGhpc09iamVjdCA9IGpzQ2FzdDxJbnRsRGF0ZVRpbWVGb3JtYXQqPihjZWxs
KTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBA
IC0xMDAsNiArMTAxLDggQEAgdm9pZCBJbnRsRGF0ZVRpbWVGb3JtYXQ6OnZpc2l0Q2hpbGRyZW4o
SgogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fYm91bmRGb3JtYXQpOwogfQogCitE
RUZJTkVfVklTSVRfQ0hJTERSRU4oSW50bERhdGVUaW1lRm9ybWF0KTsKKwogdm9pZCBJbnRsRGF0
ZVRpbWVGb3JtYXQ6OnNldEJvdW5kRm9ybWF0KFZNJiB2bSwgSlNCb3VuZEZ1bmN0aW9uKiBmb3Jt
YXQpCiB7CiAgICAgbV9ib3VuZEZvcm1hdC5zZXQodm0sIHRoaXMsIGZvcm1hdCk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsRGF0ZVRpbWVGb3JtYXQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsRGF0ZVRpbWVGb3JtYXQu
aAkocmV2aXNpb24gMjcyNzY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50
bERhdGVUaW1lRm9ybWF0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKgogICog
Q29weXJpZ2h0IChDKSAyMDE1IEFuZHkgVmFuV2Fnb25lciAoYW5keUB2YW53YWdvbmVyLmZhbWls
eSkKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTg1LDcgKzg2LDcgQEAgcHVibGlj
OgogcHJpdmF0ZToKICAgICBJbnRsRGF0ZVRpbWVGb3JtYXQoVk0mLCBTdHJ1Y3R1cmUqKTsKICAg
ICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJl
bihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAK
ICAgICBzdGF0aWMgVmVjdG9yPFN0cmluZz4gbG9jYWxlRGF0YShjb25zdCBTdHJpbmcmLCBSZWxl
dmFudEV4dGVuc2lvbktleSk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0ludGxMb2NhbGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0ludGxMb2NhbGUuY3BwCShyZXZpc2lvbiAyNzI3NjkpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9JbnRsTG9jYWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYg
QEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMjAgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5t
ZW50IEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU4LDcgKzU5LDggQEAg
dm9pZCBJbnRsTG9jYWxlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCiAgICAgQVNTRVJUKGluaGVy
aXRzKHZtLCBpbmZvKCkpKTsKIH0KIAotdm9pZCBJbnRsTG9jYWxlOjp2aXNpdENoaWxkcmVuKEpT
Q2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNp
dG9yPgordm9pZCBJbnRsTG9jYWxlOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZp
c2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxJbnRsTG9j
YWxlKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBp
bmZvKCkpOwpAQCAtNjYsNiArNjgsOCBAQCB2b2lkIEludGxMb2NhbGU6OnZpc2l0Q2hpbGRyZW4o
SlNDZWxsKiBjCiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsK
IH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEludGxMb2NhbGUpOworCiBjbGFzcyBMb2NhbGVJ
REJ1aWxkZXIgZmluYWwgewogcHVibGljOgogICAgIGJvb2wgaW5pdGlhbGl6ZShjb25zdCBTdHJp
bmcmKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxMb2NhbGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTG9jYWxlLmgJ
KHJldmlzaW9uIDI3Mjc2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxM
b2NhbGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQg
KEMpIDIwMjAgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAqIENvcHlyaWdo
dCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTcxLDcgKzcyLDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAg
ICBJbnRsTG9jYWxlKFZNJiwgU3RydWN0dXJlKik7CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihW
TSYpOwotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3Im
KTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgU3RyaW5nIGtleXdvcmRWYWx1
ZShBU0NJSUxpdGVyYWwsIGJvb2wgaXNCb29sZWFuID0gZmFsc2UpIGNvbnN0OwogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTnVtYmVyRm9ybWF0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTnVtYmVyRm9ybWF0LmNw
cAkocmV2aXNpb24gMjcyNzY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50
bE51bWJlckZvcm1hdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSw3IEBACiAvKgogICog
Q29weXJpZ2h0IChDKSAyMDE1IEFuZHkgVmFuV2Fnb25lciAoYW5keUB2YW53YWdvbmVyLmZhbWls
eSkKICAqIENvcHlyaWdodCAoQykgMjAxNiBTdWtvbHNhayBTYWtzaHV3b25nIChzdWtvbHNha0Bn
bWFpbC5jb20pCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMjAgU29ueSBJbnRlcmFjdGl2ZSBF
bnRlcnRhaW5tZW50IEluYy4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTczLDcgKzczLDggQEAgdm9p
ZCBJbnRsTnVtYmVyRm9ybWF0OjpmaW5pc2hDcmVhdGlvbihWTQogICAgIEFTU0VSVChpbmhlcml0
cyh2bSwgaW5mbygpKSk7CiB9CiAKLXZvaWQgSW50bE51bWJlckZvcm1hdDo6dmlzaXRDaGlsZHJl
bihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUg
VmlzaXRvcj4KK3ZvaWQgSW50bE51bWJlckZvcm1hdDo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxs
KiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEludGxOdW1iZXJGb3JtYXQqIHRoaXNP
YmplY3QgPSBqc0Nhc3Q8SW50bE51bWJlckZvcm1hdCo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19P
QkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTgzLDYgKzg0LDggQEAgdm9p
ZCBJbnRsTnVtYmVyRm9ybWF0Ojp2aXNpdENoaWxkcmVuKEpTQwogICAgIHZpc2l0b3IuYXBwZW5k
KHRoaXNPYmplY3QtPm1fYm91bmRGb3JtYXQpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4o
SW50bE51bWJlckZvcm1hdCk7CisKIFZlY3RvcjxTdHJpbmc+IEludGxOdW1iZXJGb3JtYXQ6Omxv
Y2FsZURhdGEoY29uc3QgU3RyaW5nJiBsb2NhbGUsIFJlbGV2YW50RXh0ZW5zaW9uS2V5IGtleSkK
IHsKICAgICAvLyA5LjEgSW50ZXJuYWwgc2xvdHMgb2YgU2VydmljZSBDb25zdHJ1Y3RvcnMgJiAx
MS4yLjMgSW50ZXJuYWwgc2xvdHMgKEVDTUEtNDAyIDIuMCkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0ludGxOdW1iZXJGb3JtYXQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTnVtYmVyRm9ybWF0LmgJKHJldmlzaW9uIDI3Mjc2
OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxOdW1iZXJGb3JtYXQuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTUg
QW5keSBWYW5XYWdvbmVyIChhbmR5QHZhbndhZ29uZXIuZmFtaWx5KQogICogQ29weXJpZ2h0IChD
KSAyMDIwIFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC05Niw3ICs5Nyw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAg
SW50bE51bWJlckZvcm1hdChWTSYsIFN0cnVjdHVyZSopOwogICAgIHZvaWQgZmluaXNoQ3JlYXRp
b24oVk0mKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNp
dG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIHN0YXRpYyBWZWN0b3I8
U3RyaW5nPiBsb2NhbGVEYXRhKGNvbnN0IFN0cmluZyYsIFJlbGV2YW50RXh0ZW5zaW9uS2V5KTsK
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFBsdXJhbFJ1bGVzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsUGx1cmFs
UnVsZXMuY3BwCShyZXZpc2lvbiAyNzI3NjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9JbnRsUGx1cmFsUnVsZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAog
LyoKICAqIENvcHlyaWdodCAoQykgMjAxOCBBbmR5IFZhbldhZ29uZXIgKGFuZHlAdmFud2Fnb25l
ci5mYW1pbHkpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTYxLDcg
KzYxLDggQEAgdm9pZCBJbnRsUGx1cmFsUnVsZXM6OmZpbmlzaENyZWF0aW9uKFZNJgogICAgIEFT
U0VSVChpbmhlcml0cyh2bSwgaW5mbygpKSk7CiB9CiAKLXZvaWQgSW50bFBsdXJhbFJ1bGVzOjp2
aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0
ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBJbnRsUGx1cmFsUnVsZXM6OnZpc2l0Q2hpbGRyZW5J
bXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBJbnRsUGx1cmFsUnVs
ZXMqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SW50bFBsdXJhbFJ1bGVzKj4oY2VsbCk7CiAgICAgQVNT
RVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNjksNiArNzAs
OCBAQCB2b2lkIEludGxQbHVyYWxSdWxlczo6dmlzaXRDaGlsZHJlbihKU0NlCiAgICAgQmFzZTo6
dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NI
SUxEUkVOKEludGxQbHVyYWxSdWxlcyk7CisKIFZlY3RvcjxTdHJpbmc+IEludGxQbHVyYWxSdWxl
czo6bG9jYWxlRGF0YShjb25zdCBTdHJpbmcmLCBSZWxldmFudEV4dGVuc2lvbktleSkKIHsKICAg
ICByZXR1cm4geyB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFBs
dXJhbFJ1bGVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SW50bFBsdXJhbFJ1bGVzLmgJKHJldmlzaW9uIDI3Mjc2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0ludGxQbHVyYWxSdWxlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxOCBBbmR5IFZhbldhZ29uZXIgKGFuZHlAdmFu
d2Fnb25lci5mYW1pbHkpCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02Niw3ICs2
Nyw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgSW50bFBsdXJhbFJ1bGVzKFZNJiwgU3RydWN0
dXJlKik7CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOwotICAgIHN0YXRpYyB2b2lkIHZp
c2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NI
SUxEUkVOOwogCiAgICAgc3RhdGljIFZlY3RvcjxTdHJpbmc+IGxvY2FsZURhdGEoY29uc3QgU3Ry
aW5nJiwgUmVsZXZhbnRFeHRlbnNpb25LZXkpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9JbnRsUmVsYXRpdmVUaW1lRm9ybWF0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsUmVsYXRpdmVUaW1lRm9ybWF0LmNwcAkocmV2
aXNpb24gMjcyNzY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFJlbGF0
aXZlVGltZUZvcm1hdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKgogICog
Q29weXJpZ2h0IChDKSAyMDIwIFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02Miw3ICs2Myw4IEBAIHZvaWQgSW50bFJl
bGF0aXZlVGltZUZvcm1hdDo6ZmluaXNoQ3JlYXQKICAgICBBU1NFUlQoaW5oZXJpdHModm0sIGlu
Zm8oKSkpOwogfQogCi12b2lkIEludGxSZWxhdGl2ZVRpbWVGb3JtYXQ6OnZpc2l0Q2hpbGRyZW4o
SlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZp
c2l0b3I+Cit2b2lkIEludGxSZWxhdGl2ZVRpbWVGb3JtYXQ6OnZpc2l0Q2hpbGRyZW5JbXBsKEpT
Q2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0g
anNDYXN0PEludGxSZWxhdGl2ZVRpbWVGb3JtYXQqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JK
RUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC03MCw2ICs3Miw4IEBAIHZvaWQg
SW50bFJlbGF0aXZlVGltZUZvcm1hdDo6dmlzaXRDaGlsZHIKICAgICBCYXNlOjp2aXNpdENoaWxk
cmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSW50
bFJlbGF0aXZlVGltZUZvcm1hdCk7CisKIFZlY3RvcjxTdHJpbmc+IEludGxSZWxhdGl2ZVRpbWVG
b3JtYXQ6OmxvY2FsZURhdGEoY29uc3QgU3RyaW5nJiBsb2NhbGUsIFJlbGV2YW50RXh0ZW5zaW9u
S2V5IGtleSkKIHsKICAgICBBU1NFUlRfVU5VU0VEKGtleSwga2V5ID09IFJlbGV2YW50RXh0ZW5z
aW9uS2V5OjpOdSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsUmVs
YXRpdmVUaW1lRm9ybWF0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSW50bFJlbGF0aXZlVGltZUZvcm1hdC5oCShyZXZpc2lvbiAyNzI3NjkpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsUmVsYXRpdmVUaW1lRm9ybWF0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDIwIFNvbnkg
SW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIwLTIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC02NCw3ICs2NCw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgSW50bFJlbGF0
aXZlVGltZUZvcm1hdChWTSYsIFN0cnVjdHVyZSopOwogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24o
Vk0mKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9y
Jik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIHN0YXRpYyBWZWN0b3I8U3Ry
aW5nPiBsb2NhbGVEYXRhKGNvbnN0IFN0cmluZyYsIFJlbGV2YW50RXh0ZW5zaW9uS2V5KTsKIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFNlZ21lbnRJdGVyYXRvci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFNlZ21l
bnRJdGVyYXRvci5jcHAJKHJldmlzaW9uIDI3Mjc2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0ludGxTZWdtZW50SXRlcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02NCwxMyArNjUsMTYg
QEAgdm9pZCBJbnRsU2VnbWVudEl0ZXJhdG9yOjpmaW5pc2hDcmVhdGlvbgogICAgIG1fc3RyaW5n
LnNldCh2bSwgdGhpcywgc3RyaW5nKTsKIH0KIAotdm9pZCBJbnRsU2VnbWVudEl0ZXJhdG9yOjp2
aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0
ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBJbnRsU2VnbWVudEl0ZXJhdG9yOjp2aXNpdENoaWxk
cmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0byogdGhp
c09iamVjdCA9IGpzQ2FzdDxJbnRsU2VnbWVudEl0ZXJhdG9yKj4oY2VsbCk7CiAgICAgQmFzZTo6
dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKICAgICB2aXNpdG9yLmFwcGVuZCh0
aGlzT2JqZWN0LT5tX3N0cmluZyk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihJbnRsU2Vn
bWVudEl0ZXJhdG9yKTsKKwogSlNPYmplY3QqIEludGxTZWdtZW50SXRlcmF0b3I6Om5leHQoSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3Qt
PnZtKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsU2VnbWVudEl0
ZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50
bFNlZ21lbnRJdGVyYXRvci5oCShyZXZpc2lvbiAyNzI3NjkpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9JbnRsU2VnbWVudEl0ZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTUzLDcgKzU0LDcg
QEAgcHVibGljOgogCiAgICAgSlNPYmplY3QqIG5leHQoSlNHbG9iYWxPYmplY3QqKTsKIAotICAg
IHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBE
RUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiBwcml2YXRlOgogICAgIEludGxTZWdtZW50SXRlcmF0
b3IoVk0mLCBTdHJ1Y3R1cmUqLCBzdGQ6OnVuaXF1ZV9wdHI8VUJyZWFrSXRlcmF0b3IsIFVCcmVh
a0l0ZXJhdG9yRGVsZXRlcj4mJiwgQm94PFZlY3RvcjxVQ2hhcj4+JiYsIEludGxTZWdtZW50ZXI6
OkdyYW51bGFyaXR5KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxT
ZWdtZW50cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SW50bFNlZ21lbnRzLmNwcAkocmV2aXNpb24gMjcyNzY5KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSW50bFNlZ21lbnRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYg
QEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTA5LDExICsxMTAsMTQgQEAg
SlNPYmplY3QqIEludGxTZWdtZW50czo6Y3JlYXRlU2VnbWVudEl0ZQogICAgIHJldHVybiBJbnRs
U2VnbWVudEl0ZXJhdG9yOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdC0+c2VnbWVudEl0ZXJhdG9y
U3RydWN0dXJlKCksIFdURk1vdmUoc2VnbWVudGVyKSwgbV9idWZmZXIsIG1fc3RyaW5nLmdldCgp
LCBtX2dyYW51bGFyaXR5KTsKIH0KIAotdm9pZCBJbnRsU2VnbWVudHM6OnZpc2l0Q2hpbGRyZW4o
SlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZp
c2l0b3I+Cit2b2lkIEludGxTZWdtZW50czo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxs
LCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SW50
bFNlZ21lbnRzKj4oY2VsbCk7CiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2
aXNpdG9yKTsKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX3N0cmluZyk7CiB9CiAK
K0RFRklORV9WSVNJVF9DSElMRFJFTihJbnRsU2VnbWVudHMpOworCiB9IC8vIG5hbWVzcGFjZSBK
U0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxTZWdtZW50cy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxTZWdtZW50cy5o
CShyZXZpc2lvbiAyNzI3NjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRs
U2VnbWVudHMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmln
aHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtNTQsNyArNTUsNyBAQCBwdWJsaWM6CiAgICAgSlNWYWx1ZSBj
b250YWluaW5nKEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBpbmRleFZhbHVlKTsKICAgICBKU09i
amVjdCogY3JlYXRlU2VnbWVudEl0ZXJhdG9yKEpTR2xvYmFsT2JqZWN0Kik7CiAKLSAgICBzdGF0
aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFS
RV9WSVNJVF9DSElMRFJFTjsKIAogcHJpdmF0ZToKICAgICBJbnRsU2VnbWVudHMoVk0mLCBTdHJ1
Y3R1cmUqLCBzdGQ6OnVuaXF1ZV9wdHI8VUJyZWFrSXRlcmF0b3IsIFVCcmVha0l0ZXJhdG9yRGVs
ZXRlcj4mJiwgQm94PFZlY3RvcjxVQ2hhcj4+JiYsIEludGxTZWdtZW50ZXI6OkdyYW51bGFyaXR5
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5
QnVmZmVyVmlldy5jcHAJKHJldmlzaW9uIDI3Mjc2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE1NSw3
ICsxNTUsOCBAQCB2b2lkIEpTQXJyYXlCdWZmZXJWaWV3OjpmaW5pc2hDcmVhdGlvbihWCiAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAotdm9pZCBKU0FycmF5QnVmZmVyVmll
dzo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVt
cGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNBcnJheUJ1ZmZlclZpZXc6OnZpc2l0Q2hp
bGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU0FycmF5
QnVmZmVyVmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0FycmF5QnVmZmVyVmlldyo+KGNlbGwp
OwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAg
LTE2OSw2ICsxNzAsOCBAQCB2b2lkIEpTQXJyYXlCdWZmZXJWaWV3Ojp2aXNpdENoaWxkcmVuKEpT
CiAgICAgfQogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNBcnJheUJ1ZmZlclZpZXcpOwor
CiBib29sIEpTQXJyYXlCdWZmZXJWaWV3OjpwdXQoCiAgICAgSlNDZWxsKiBjZWxsLCBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVl
IHZhbHVlLAogICAgIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuaAkocmV2aXNpb24gMjcy
NzY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcu
aAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTE3Miw3ICsxNzIsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgCiAg
ICAgc3RhdGljIGJvb2wgcHV0KEpTQ2VsbCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1l
LCBKU1ZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmKTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hp
bGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVO
OwogICAgIAogcHVibGljOgogICAgIFR5cGVkQXJyYXlNb2RlIG1vZGUoKSBjb25zdCB7IHJldHVy
biBtX21vZGU7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlJ
dGVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNBcnJheUl0ZXJhdG9yLmNwcAkocmV2aXNpb24gMjcyNzY5KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNBcnJheUl0ZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIwLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02OCwxMSAr
NjgsMTQgQEAgdm9pZCBKU0FycmF5SXRlcmF0b3I6OmZpbmlzaENyZWF0aW9uKFZNJgogICAgICAg
ICBCYXNlOjppbnRlcm5hbEZpZWxkKGluZGV4KS5zZXQodm0sIHRoaXMsIHZhbHVlc1tpbmRleF0p
OwogfQogCi12b2lkIEpTQXJyYXlJdGVyYXRvcjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGws
IFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQg
SlNBcnJheUl0ZXJhdG9yOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3Im
IHZpc2l0b3IpCiB7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0FycmF5SXRlcmF0
b3IqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGlu
Zm8oKSk7CiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKIH0K
IAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTQXJyYXlJdGVyYXRvcik7CisKIH0gLy8gbmFtZXNw
YWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUl0ZXJh
dG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJh
eUl0ZXJhdG9yLmgJKHJldmlzaW9uIDI3Mjc2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTQXJyYXlJdGVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMjAtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTc4LDcgKzc4LDcgQEAgcHVi
bGljOgogCiAgICAgREVDTEFSRV9JTkZPOwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJl
bihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAK
IHByaXZhdGU6CiAgICAgSlNBcnJheUl0ZXJhdG9yKFZNJiwgU3RydWN0dXJlKik7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FzeW5jR2VuZXJhdG9yLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FzeW5jR2VuZXJhdG9yLmNw
cAkocmV2aXNpb24gMjcyNzY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNB
c3luY0dlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxOS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTksMTEgKzU5LDE0IEBAIHZvaWQgSlNB
c3luY0dlbmVyYXRvcjo6ZmluaXNoQ3JlYXRpb24oVk0KICAgICAgICAgaW50ZXJuYWxGaWVsZChp
bmRleCkuc2V0KHZtLCB0aGlzLCB2YWx1ZXNbaW5kZXhdKTsKIH0KIAotdm9pZCBKU0FzeW5jR2Vu
ZXJhdG9yOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3Ip
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0FzeW5jR2VuZXJhdG9yOjp2aXNp
dENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0
byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0FzeW5jR2VuZXJhdG9yKj4oY2VsbCk7CiAgICAgQVNT
RVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwogICAgIEJhc2U6OnZp
c2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CiB9CiAKK0RFRklORV9WSVNJVF9DSElM
RFJFTihKU0FzeW5jR2VuZXJhdG9yKTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FzeW5jR2VuZXJhdG9yLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBc3luY0dlbmVyYXRvci5oCShyZXZp
c2lvbiAyNzI3NjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FzeW5jR2Vu
ZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxOS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtOTUsNyArOTUsNyBAQCBwdWJsaWM6CiAKICAgICBERUNM
QVJFX0VYUE9SVF9JTkZPOwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwq
LCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKIHByaXZhdGU6
CiAgICAgSlNBc3luY0dlbmVyYXRvcihWTSYsIFN0cnVjdHVyZSopOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCaWdJbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQmlnSW50LmNwcAkocmV2aXNpb24gMjcyNzY5KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCaWdJbnQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxNyBDYWlvIExpbWEgPHRp
Y2Fpb2xpbWFAZ21haWwuY29tPgotICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjAgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC02Nyw3ICs2Nyw4IEBAIEpTQmlnSW50OjpKU0JpZ0ludChWTSYgdm0sIFN0cnVjdHVyZSog
c3QKICAgICAsIG1fZGF0YSh2bSwgdGhpcywgZGF0YSwgbGVuZ3RoKQogeyB9CiAKLXZvaWQgSlNC
aWdJbnQ6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikK
K3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTQmlnSW50Ojp2aXNpdENoaWxkcmVu
SW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0byogdGhpc09i
amVjdCA9IGpzQ2FzdDxKU0JpZ0ludCo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5I
RVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTc2LDYgKzc3LDggQEAgdm9pZCBKU0JpZ0lu
dDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbAogICAgICAgICB2aXNpdG9yLm1hcmtBdXhpbGlh
cnkoZGF0YSk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU0JpZ0ludCk7CisKIHZvaWQg
SlNCaWdJbnQ6OmluaXRpYWxpemUoSW5pdGlhbGl6YXRpb25UeXBlIGluaXRUeXBlKQogewogICAg
IGlmIChpbml0VHlwZSA9PSBJbml0aWFsaXphdGlvblR5cGU6OldpdGhaZXJvKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCaWdJbnQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JpZ0ludC5oCShyZXZpc2lvbiAyNzI3NjkpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JpZ0ludC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxNyBDYWlvIExpbWEgPHRp
Y2Fpb2xpbWFAZ21haWwuY29tPgotICogQ29weXJpZ2h0IChDKSAyMDE5LTIwMjAgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE5LTIwMjEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC01MCw3ICs1MCw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVk
IFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBTdHJ1Y3R1cmVJc0ltbW9y
dGFsIHwgT3ZlcnJpZGVzVG9UaGlzOwogICAgIGZyaWVuZCBjbGFzcyBDYWNoZWRCaWdJbnQ7CiAK
LSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7Cisg
ICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxU
eXBlLCBTdWJzcGFjZUFjY2Vzcz4KICAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9y
KFZNJiB2bSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQm91bmRGdW5j
dGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNC
b3VuZEZ1bmN0aW9uLmNwcAkocmV2aXNpb24gMjcyNzY5KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNCb3VuZEZ1bmN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTI0OSw3ICsyNDksOCBAQCB2b2lkIEpTQm91bmRGdW5jdGlvbjo6ZmluaXNoQ3JlYXRpb24oVk0m
CiAgICAgQVNTRVJUKGluaGVyaXRzKHZtLCBpbmZvKCkpKTsKIH0KIAotdm9pZCBKU0JvdW5kRnVu
Y3Rpb246OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikK
K3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTQm91bmRGdW5jdGlvbjo6dmlzaXRD
aGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTQm91
bmRGdW5jdGlvbiogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0JvdW5kRnVuY3Rpb24qPihjZWxsKTsK
ICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC0y
NjEsNCArMjYyLDYgQEAgdm9pZCBKU0JvdW5kRnVuY3Rpb246OnZpc2l0Q2hpbGRyZW4oSlNDZQog
ICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fbmFtZU1heUJlTnVsbCk7CiB9CiAKK0RF
RklORV9WSVNJVF9DSElMRFJFTihKU0JvdW5kRnVuY3Rpb24pOworCiB9IC8vIG5hbWVzcGFjZSBK
U0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQm91bmRGdW5jdGlvbi5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQm91bmRGdW5j
dGlvbi5oCShyZXZpc2lvbiAyNzI3NjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0JvdW5kRnVuY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTg0LDcgKzg0LDcgQEAgcHJp
dmF0ZToKICAgICBKU0JvdW5kRnVuY3Rpb24oVk0mLCBOYXRpdmVFeGVjdXRhYmxlKiwgSlNHbG9i
YWxPYmplY3QqLCBTdHJ1Y3R1cmUqLCBKU09iamVjdCogdGFyZ2V0RnVuY3Rpb24sIEpTVmFsdWUg
Ym91bmRUaGlzLCBKU0ltbXV0YWJsZUJ1dHRlcmZseSogYm91bmRBcmdzLCBKU1N0cmluZyogbmFt
ZU1heUJlTnVsbCwgZG91YmxlIGxlbmd0aCk7CiAKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZN
Jik7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYp
OworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBXcml0ZUJhcnJpZXI8SlNPYmpl
Y3Q+IG1fdGFyZ2V0RnVuY3Rpb247CiAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+IG1fYm91bmRU
aGlzOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDYWxsZWUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2FsbGVlLmNwcAko
cmV2aXNpb24gMjcyNzY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDYWxs
ZWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxNCwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTQtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTUwLDcgKzUwLDggQEAgdm9pZCBKU0NhbGxlZTo6
ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQogICAgIEFTU0VSVChpbmhlcml0cyh2bSwgaW5mbygpKSk7
CiB9CiAKLXZvaWQgSlNDYWxsZWU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90Vmlz
aXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTQ2FsbGVl
Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAg
ICAgSlNDYWxsZWUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNDYWxsZWUqPihjZWxsKTsKICAgICBB
U1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC01OSw0ICs2
MCw2IEBAIHZvaWQgSlNDYWxsZWU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWwKICAgICB2aXNp
dG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX3Njb3BlKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxE
UkVOKEpTQ2FsbGVlKTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0NhbGxlZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTQ2FsbGVlLmgJKHJldmlzaW9uIDI3Mjc2OSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2FsbGVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTAwLDcgKzEw
MCw3IEBAIHByb3RlY3RlZDoKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7CiAgICAgdXNp
bmcgQmFzZTo6ZmluaXNoQ3JlYXRpb247CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVu
KEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAog
cHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgJKHJldmlzaW9uIDI3Mjc2OSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDcgKzEsNyBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMSBIYXJyaSBQb3J0
ZW4gKHBvcnRlbkBrZGUub3JnKQogICogIENvcHlyaWdodCAoQykgMjAwMSBQZXRlciBLZWxseSAo
cG1rQHBvc3QuY29tKQotICogIENvcHlyaWdodCAoQykgMjAwMy0yMDE5IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMzIsNiArMzIs
NyBAQAogI2luY2x1ZGUgIkpTTG9jay5oIgogI2luY2x1ZGUgIkpTVHlwZUluZm8uaCIKICNpbmNs
dWRlICJTbG90VmlzaXRvci5oIgorI2luY2x1ZGUgIlNsb3RWaXNpdG9yTWFjcm9zLmgiCiAjaW5j
bHVkZSAiU3Vic3BhY2VBY2Nlc3MuaCIKICNpbmNsdWRlICJUeXBlZEFycmF5VHlwZS5oIgogI2lu
Y2x1ZGUgIldyaXRlQmFycmllci5oIgpAQCAtMTY3LDggKzE2OCw4IEBAIHB1YmxpYzoKICAgICBz
aXplX3QgZXN0aW1hdGVkU2l6ZUluQnl0ZXMoVk0mKSBjb25zdDsKICAgICBKU19FWFBPUlRfUFJJ
VkFURSBzdGF0aWMgc2l6ZV90IGVzdGltYXRlZFNpemUoSlNDZWxsKiwgVk0mKTsKIAotICAgIHN0
YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKLSAgICBzdGF0
aWMgdm9pZCB2aXNpdE91dHB1dENvbnN0cmFpbnRzKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7Cisg
ICAgREVDTEFSRV9JTkxJTkVfVklTSVRfQ0hJTERSRU47CisgICAgc3RhdGljIHZvaWQgdmlzaXRP
dXRwdXRDb25zdHJhaW50cyhKU0NlbGwqLCBBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAKICAgICBK
U19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBhbmFseXplSGVhcChKU0NlbGwqLCBIZWFwQW5h
bHl6ZXImKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsSW5s
aW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2Vs
bElubGluZXMuaAkocmV2aXNpb24gMjcyNzY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNDZWxsSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjUsNiArMjUsNyBAQAog
CiAjcHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgIkFic3RyYWN0U2xvdFZpc2l0b3JJbmxpbmVzLmgi
CiAjaW5jbHVkZSAiQWxsb2NhdG9yRm9yTW9kZS5oIgogI2luY2x1ZGUgIkFsbG9jYXRvcklubGlu
ZXMuaCIKICNpbmNsdWRlICJDb21wbGV0ZVN1YnNwYWNlSW5saW5lcy5oIgpAQCAtMTQxLDEyICsx
NDIsMTUgQEAgQUxXQVlTX0lOTElORSBTdHJ1Y3R1cmUqIEpTQ2VsbDo6c3RydWN0dQogICAgIHJl
dHVybiB2bS5nZXRTdHJ1Y3R1cmUobV9zdHJ1Y3R1cmVJRCk7CiB9CiAKLWlubGluZSB2b2lkIEpT
Q2VsbDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQor
dGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK2lubGluZSB2b2lkIEpTQ2VsbDo6dmlzaXRDaGls
ZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHZpc2l0b3Iu
YXBwZW5kVW5iYXJyaWVyZWQoY2VsbC0+c3RydWN0dXJlKHZpc2l0b3Iudm0oKSkpOwogfQogCi1p
bmxpbmUgdm9pZCBKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHMoSlNDZWxsKiwgU2xvdFZp
c2l0b3ImKQorREVGSU5FX0lOTElORV9WSVNJVF9DSElMRFJFTihKU0NlbGwpOworCitpbmxpbmUg
dm9pZCBKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHMoSlNDZWxsKiwgQWJzdHJhY3RTbG90
VmlzaXRvciYpCiB7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
Q3VzdG9tR2V0dGVyU2V0dGVyRnVuY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTQ3VzdG9tR2V0dGVyU2V0dGVyRnVuY3Rpb24uY3BwCShyZXZp
c2lvbiAyNzI3NjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0N1c3RvbUdl
dHRlclNldHRlckZ1bmN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTUsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC04NSw3ICs4NSw4IEBA
IEpTQ3VzdG9tR2V0dGVyU2V0dGVyRnVuY3Rpb24qIEpTQ3VzdG9tR2UKICAgICByZXR1cm4gZnVu
Y3Rpb247CiB9CiAKLXZvaWQgSlNDdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbjo6dmlzaXRDaGls
ZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5h
bWUgVmlzaXRvcj4KK3ZvaWQgSlNDdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbjo6dmlzaXRDaGls
ZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTQ3VzdG9t
R2V0dGVyU2V0dGVyRnVuY3Rpb24qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNDdXN0b21HZXR0ZXJT
ZXR0ZXJGdW5jdGlvbio+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhp
c09iamVjdCwgaW5mbygpKTsKQEAgLTk0LDYgKzk1LDggQEAgdm9pZCBKU0N1c3RvbUdldHRlclNl
dHRlckZ1bmN0aW9uOjp2aXNpdAogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fZ2V0
dGVyU2V0dGVyKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTQ3VzdG9tR2V0dGVyU2V0
dGVyRnVuY3Rpb24pOworCiB2b2lkIEpTQ3VzdG9tR2V0dGVyU2V0dGVyRnVuY3Rpb246OmZpbmlz
aENyZWF0aW9uKFZNJiB2bSwgTmF0aXZlRXhlY3V0YWJsZSogZXhlY3V0YWJsZSwgQ3VzdG9tR2V0
dGVyU2V0dGVyKiBnZXR0ZXJTZXR0ZXIsIGNvbnN0IFN0cmluZyYgbmFtZSkKIHsKICAgICBCYXNl
OjpmaW5pc2hDcmVhdGlvbih2bSwgZXhlY3V0YWJsZSwgaXNTZXR0ZXIoKSwgbmFtZSk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0N1c3RvbUdldHRlclNldHRlckZ1bmN0
aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDdXN0
b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbi5oCShyZXZpc2lvbiAyNzI3NjkpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0N1c3RvbUdldHRlclNldHRlckZ1bmN0aW9uLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTkg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIw
MjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC02Myw3ICs2Myw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgSlNDdXN0
b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbihWTSYsIE5hdGl2ZUV4ZWN1dGFibGUqLCBKU0dsb2JhbE9i
amVjdCosIFN0cnVjdHVyZSosIFR5cGUsIGNvbnN0IFByb3BlcnR5TmFtZSYpOwogICAgIHZvaWQg
ZmluaXNoQ3JlYXRpb24oVk0mLCBOYXRpdmVFeGVjdXRhYmxlKiwgQ3VzdG9tR2V0dGVyU2V0dGVy
KiwgY29uc3QgU3RyaW5nJik7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwq
LCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBXcml0
ZUJhcnJpZXI8Q3VzdG9tR2V0dGVyU2V0dGVyPiBtX2dldHRlclNldHRlcjsKICAgICBUeXBlIG1f
dHlwZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRmluYWxpemF0aW9u
UmVnaXN0cnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTRmluYWxpemF0aW9uUmVnaXN0cnkuY3BwCShyZXZpc2lvbiAyNzI3NjkpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ZpbmFsaXphdGlvblJlZ2lzdHJ5LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUs
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMC0yMDIxIEFw
cGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJK
U0ZpbmFsaXphdGlvblJlZ2lzdHJ5LmgiCiAKKyNpbmNsdWRlICJBYnN0cmFjdFNsb3RWaXNpdG9y
LmgiCiAjaW5jbHVkZSAiRGVmZXJyZWRXb3JrVGltZXIuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVz
LmgiCiAjaW5jbHVkZSAiSlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbElubGluZXMuaCIKQEAgLTYw
LDcgKzYxLDggQEAgdm9pZCBKU0ZpbmFsaXphdGlvblJlZ2lzdHJ5OjpmaW5pc2hDcmVhdAogICAg
IGdsb2JhbE9iamVjdC0+Z2xvYmFsT2JqZWN0TWV0aG9kVGFibGUoKS0+Y3VycmVudFNjcmlwdEV4
ZWN1dGlvbk93bmVyKGdsb2JhbE9iamVjdCk7CiB9CiAKLXZvaWQgSlNGaW5hbGl6YXRpb25SZWdp
c3RyeTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQor
dGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNGaW5hbGl6YXRpb25SZWdpc3RyeTo6
dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAg
IEJhc2U6OnZpc2l0Q2hpbGRyZW4oY2VsbCwgdmlzaXRvcik7CiAKQEAgLTgwLDEzICs4MiwxNSBA
QCB2b2lkIEpTRmluYWxpemF0aW9uUmVnaXN0cnk6OnZpc2l0Q2hpbGRyCiAgICAgZm9yIChhdXRv
JiBob2xkaW5ncyA6IHRoaXNPYmplY3QtPm1fbm9VbnJlZ2lzdHJhdGlvbkRlYWQpCiAgICAgICAg
IHZpc2l0b3IuYXBwZW5kKGhvbGRpbmdzKTsKIAotICAgIHNpemVfdCB0b3RhbEJ1ZmZlclNpemVz
SW5CeXRlcyA9IHRoaXNPYmplY3QtPm1fZGVhZFJlZ2lzdHJhdGlvbnMuY2FwYWNpdHkoKSAqIHNp
emVvZihkZWNsdHlwZSh0aGlzT2JqZWN0LT5tX2RlYWRSZWdpc3RyYXRpb25zKTo6S2V5VmFsdWVQ
YWlyVHlwZSk7Ci0gICAgdG90YWxCdWZmZXJTaXplc0luQnl0ZXMgKz0gdGhpc09iamVjdC0+bV9s
aXZlUmVnaXN0cmF0aW9ucy5jYXBhY2l0eSgpICogc2l6ZW9mKGRlY2x0eXBlKHRoaXNPYmplY3Qt
Pm1fZGVhZFJlZ2lzdHJhdGlvbnMpOjpLZXlWYWx1ZVBhaXJUeXBlKTsKKyAgICBzaXplX3QgdG90
YWxCdWZmZXJTaXplc0luQnl0ZXMgPSB0aGlzT2JqZWN0LT5tX2RlYWRSZWdpc3RyYXRpb25zLmNh
cGFjaXR5KCkgKiBzaXplb2YodHlwZW5hbWUgZGVjbHR5cGUodGhpc09iamVjdC0+bV9kZWFkUmVn
aXN0cmF0aW9ucyk6OktleVZhbHVlUGFpclR5cGUpOworICAgIHRvdGFsQnVmZmVyU2l6ZXNJbkJ5
dGVzICs9IHRoaXNPYmplY3QtPm1fbGl2ZVJlZ2lzdHJhdGlvbnMuY2FwYWNpdHkoKSAqIHNpemVv
Zih0eXBlbmFtZSBkZWNsdHlwZSh0aGlzT2JqZWN0LT5tX2RlYWRSZWdpc3RyYXRpb25zKTo6S2V5
VmFsdWVQYWlyVHlwZSk7CiAgICAgdG90YWxCdWZmZXJTaXplc0luQnl0ZXMgKz0gdGhpc09iamVj
dC0+bV9ub1VucmVnaXN0cmF0aW9uTGl2ZS5jYXBhY2l0eSgpICogc2l6ZW9mKGRlY2x0eXBlKHRo
aXNPYmplY3QtPm1fbm9VbnJlZ2lzdHJhdGlvbkxpdmUudGFrZUxhc3QoKSkpOwogICAgIHRvdGFs
QnVmZmVyU2l6ZXNJbkJ5dGVzICs9IHRoaXNPYmplY3QtPm1fbm9VbnJlZ2lzdHJhdGlvbkRlYWQu
Y2FwYWNpdHkoKSAqIHNpemVvZihkZWNsdHlwZSh0aGlzT2JqZWN0LT5tX25vVW5yZWdpc3RyYXRp
b25MaXZlLnRha2VMYXN0KCkpKTsKICAgICB2aXNpdG9yLnZtKCkuaGVhcC5yZXBvcnRFeHRyYU1l
bW9yeVZpc2l0ZWQodG90YWxCdWZmZXJTaXplc0luQnl0ZXMpOwogfQogCitERUZJTkVfVklTSVRf
Q0hJTERSRU4oSlNGaW5hbGl6YXRpb25SZWdpc3RyeSk7CisKIHZvaWQgSlNGaW5hbGl6YXRpb25S
ZWdpc3RyeTo6ZGVzdHJveShKU0NlbGwqIHRhYmxlKQogewogICAgIHN0YXRpY19jYXN0PEpTRmlu
YWxpemF0aW9uUmVnaXN0cnkqPih0YWJsZSktPn5KU0ZpbmFsaXphdGlvblJlZ2lzdHJ5KCk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ZpbmFsaXphdGlvblJlZ2lzdHJ5
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGaW5hbGl6
YXRpb25SZWdpc3RyeS5oCShyZXZpc2lvbiAyNzI3NjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0ZpbmFsaXphdGlvblJlZ2lzdHJ5LmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlLCBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAtMjAyMSBBcHBsZSwgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03MCw3
ICs3MCw3IEBAIHB1YmxpYzoKICAgICBERUNMQVJFX0VYUE9SVF9JTkZPOwogCiAgICAgdm9pZCBm
aW5hbGl6ZVVuY29uZGl0aW9uYWxseShWTSYpOwotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwog
ICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0Z1bmN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmNwcAkocmV2aXNpb24gMjcyNzY5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNyArMSw3IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAyIEhhcnJpIFBvcnRl
biAocG9ydGVuQGtkZS5vcmcpCiAgKiAgQ29weXJpZ2h0IChDKSAyMDAxIFBldGVyIEtlbGx5IChw
bWtAcG9zdC5jb20pCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMjAgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwMy0yMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqICBDb3B5cmlnaHQgKEMpIDIwMDcgQ2FtZXJvbiBad2Fy
aWNoIChjd3p3YXJpY2hAdXdhdGVybG9vLmNhKQogICogIENvcHlyaWdodCAoQykgMjAwNyBNYWtz
IE9ybG92aWNoCiAgKiAgQ29weXJpZ2h0IChDKSAyMDE1IENhbm9uIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KQEAgLTI1Miw3ICsyNTIsOCBAQCBjb25zdCBTb3VyY2VDb2RlKiBKU0Z1bmN0aW9u
Ojpzb3VyY2VDb2RlCiAgICAgcmV0dXJuICZqc0V4ZWN1dGFibGUoKS0+c291cmNlKCk7CiB9CiAg
ICAgCi12b2lkIEpTRnVuY3Rpb246OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90Vmlz
aXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTRnVuY3Rp
b246OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsK
ICAgICBKU0Z1bmN0aW9uKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTRnVuY3Rpb24qPihjZWxsKTsK
ICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC0y
NjEsNiArMjYyLDggQEAgdm9pZCBKU0Z1bmN0aW9uOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogYwog
ICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQoYml0d2lzZV9jYXN0PEpTQ2VsbCo+KGJpdHdp
c2VfY2FzdDx1aW50cHRyX3Q+KHRoaXNPYmplY3QtPm1fZXhlY3V0YWJsZU9yUmFyZURhdGEpICYg
fnJhcmVEYXRhVGFnKSk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU0Z1bmN0aW9uKTsK
KwogQ2FsbERhdGEgSlNGdW5jdGlvbjo6Z2V0Q2FsbERhdGEoSlNDZWxsKiBjZWxsKQogewogICAg
IC8vIEtlZXAgdGhpcyBmdW5jdGlvbiBPSyBmb3IgaW52b2NhdGlvbiBmcm9tIGNvbmN1cnJlbnQg
Y29tcGlsZXJzLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlv
bi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rp
b24uaAkocmV2aXNpb24gMjcyNzY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNGdW5jdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqICBDb3B5
cmlnaHQgKEMpIDE5OTktMjAwMCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQotICogIENv
cHlyaWdodCAoQykgMjAwMy0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
ICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKiAgQ29weXJpZ2h0IChDKSAyMDA3IENhbWVyb24gWndhcmljaCAoY3d6d2FyaWNoQHV3YXRl
cmxvby5jYSkKICAqICBDb3B5cmlnaHQgKEMpIDIwMDcgTWFrcyBPcmxvdmljaAogICoKQEAgLTE4
MCw3ICsxODAsNyBAQCBwcm90ZWN0ZWQ6CiAKICAgICBzdGF0aWMgYm9vbCBkZWxldGVQcm9wZXJ0
eShKU0NlbGwqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSwgRGVsZXRlUHJvcGVydHlT
bG90Jik7CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNp
dG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogcHJpdmF0ZToKICAgICBzdGF0
aWMgSlNGdW5jdGlvbiogY3JlYXRlSW1wbChWTSYgdm0sIEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhl
Y3V0YWJsZSwgSlNTY29wZSogc2NvcGUsIFN0cnVjdHVyZSogc3RydWN0dXJlKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJhdG9yLmNwcAkocmV2aXNpb24g
MjcyNzY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmF0b3IuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
OSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkt
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTU5LDExICs1OSwxNCBAQCB2b2lkIEpTR2VuZXJhdG9yOjpmaW5pc2hD
cmVhdGlvbihWTSYgdm0pCiAgICAgICAgIGludGVybmFsRmllbGQoaW5kZXgpLnNldCh2bSwgdGhp
cywgdmFsdWVzW2luZGV4XSk7CiB9CiAKLXZvaWQgSlNHZW5lcmF0b3I6OnZpc2l0Q2hpbGRyZW4o
SlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZp
c2l0b3I+Cit2b2lkIEpTR2VuZXJhdG9yOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGws
IFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0dl
bmVyYXRvcio+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVj
dCwgaW5mbygpKTsKICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3Ip
OwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNHZW5lcmF0b3IpOworCiB9IC8vIG5hbWVz
cGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJhdG9y
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmF0
b3IuaAkocmV2aXNpb24gMjcyNzY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNHZW5lcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE5LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC05NCw3ICs5NCw3IEBAIHB1YmxpYzoKIAogICAg
IERFQ0xBUkVfRVhQT1JUX0lORk87CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpT
Q2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogcHJp
dmF0ZToKICAgICBKU0dlbmVyYXRvcihWTSYsIFN0cnVjdHVyZSopOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXcuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmll
dy5oCShyZXZpc2lvbiAyNzI3NjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0dlbmVyaWNUeXBlZEFycmF5Vmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzEzLDcgKzMxMyw3
IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVj
dCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lQXJyYXkmLCBEb250RW51bVByb3BlcnRp
ZXNNb2RlKTsKIAogICAgIHN0YXRpYyBzaXplX3QgZXN0aW1hdGVkU2l6ZShKU0NlbGwqLCBWTSYp
OwotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsK
KyAgICBERUNMQVJFX1RFTVBMQVRFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgLy8gUmV0dXJucyB0
cnVlIGlmIHN1Y2Nlc3NmdWwsIGFuZCBmYWxzZSBvbiBlcnJvcjsgaXQgd2lsbCB0aHJvdyBvbiBl
cnJvci4KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPdGhlckFkYXB0b3I+CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBl
ZEFycmF5Vmlld0lubGluZXMuaAkocmV2aXNpb24gMjcyNzY5KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTkgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC01MTcsNyArNTE3LDggQEAgc2l6ZV90IEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3
PEFkYXB0b3I+OgogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgotdm9pZCBKU0dlbmVy
aWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNH
ZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCog
Y2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU0dlbmVyaWNUeXBlZEFycmF5Vmlldyog
dGhpc09iamVjdCA9IGpzQ2FzdDxKU0dlbmVyaWNUeXBlZEFycmF5Vmlldyo+KGNlbGwpOwogICAg
IEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTU1NSw0
ICs1NTYsNiBAQCB2b2lkIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+Ojp2CiAgICAg
fQogfQogCitERUZJTkVfVEVNUExBVEVfVklTSVRfQ0hJTERSRU4odGVtcGxhdGU8dHlwZW5hbWUg
QWRhcHRvcj4sIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+KTsKKwogfSAvLyBuYW1l
c3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9i
amVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNH
bG9iYWxPYmplY3QuY3BwCShyZXZpc2lvbiAyNzI3NjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA4IENhbWVyb24gWndhcmljaCAoY3d6
d2FyaWNoQHV3YXRlcmxvby5jYSkKICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTE4OTIsNyArMTg5Miw4
IEBAIHZvaWQgSlNHbG9iYWxPYmplY3Q6OnJlc2V0UHJvdG90eXBlKFZNJiAKICAgICBzZXRHbG9i
YWxUaGlzKHZtLCBKU1Byb3h5OjpjcmVhdGUodm0sIEpTUHJveHk6OmNyZWF0ZVN0cnVjdHVyZSh2
bSwgdGhpcywgcHJvdG90eXBlLCBQdXJlRm9yd2FyZGluZ1Byb3h5VHlwZSksIHRoaXMpKTsKIH0K
IAotdm9pZCBKU0dsb2JhbE9iamVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNHbG9i
YWxPYmplY3Q6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRv
cikKIHsgCiAgICAgSlNHbG9iYWxPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNHbG9iYWxP
YmplY3QqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3Qs
IGluZm8oKSk7CkBAIC0yMDYwLDYgKzIwNjEsOCBAQCB2b2lkIEpTR2xvYmFsT2JqZWN0Ojp2aXNp
dENoaWxkcmVuKEpTQ2VsCiAgICAgdGhpc09iamVjdC0+bV9yZWdFeHBHbG9iYWxEYXRhLnZpc2l0
QWdncmVnYXRlKHZpc2l0b3IpOwogfQogCitERUZJTkVfRVhQT1JUX1ZJU0lUX0NISUxEUkVOKEpT
R2xvYmFsT2JqZWN0KTsKKwogQ2FsbEZyYW1lKiBKU0dsb2JhbE9iamVjdDo6ZGVwcmVjYXRlZENh
bGxGcmFtZUZvckRlYnVnZ2VyKCkKIHsKICAgICByZXR1cm4gQ2FsbEZyYW1lOjpjcmVhdGUobV9k
ZXByZWNhdGVkQ2FsbEZyYW1lRm9yRGVidWdnZXIpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCShyZXZpc2lvbiAyNzI3NjkpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDIwMDcgRXJpYyBTZWlk
ZWwgPGVyaWNAd2Via2l0Lm9yZz4KLSAqICBDb3B5cmlnaHQgKEMpIDIwMDctMjAyMCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDA3LTIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTYw
OSw3ICs2MDksNyBAQCBwdWJsaWM6CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgfkpTR2xvYmFsT2Jq
ZWN0KCk7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwq
KTsKIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlND
ZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX0VYUE9SVF9WSVNJVF9DSElMRFJFTjsK
IAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChK
U09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsK
ICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgYm9vbCBwdXQoSlNDZWxsKiwgSlNHbG9iYWxP
YmplY3QqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbW11dGFibGVCdXR0ZXJmbHkuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTSW1tdXRhYmxlQnV0
dGVyZmx5LmNwcAkocmV2aXNpb24gMjcyNzY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNJbW11dGFibGVCdXR0ZXJmbHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMyLDcgKzMyLDgg
QEAgbmFtZXNwYWNlIEpTQyB7CiAKIGNvbnN0IENsYXNzSW5mbyBKU0ltbXV0YWJsZUJ1dHRlcmZs
eTo6c19pbmZvID0geyAiSW1tdXRhYmxlIEJ1dHRlcmZseSIsIG51bGxwdHIsIG51bGxwdHIsIG51
bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNJbW11dGFibGVCdXR0ZXJmbHkpIH07CiAKLXZv
aWQgSlNJbW11dGFibGVCdXR0ZXJmbHk6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90
VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTSW1t
dXRhYmxlQnV0dGVyZmx5Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3Im
IHZpc2l0b3IpCiB7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjZWxsLCBpbmZvKCkp
OwogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4oY2VsbCwgdmlzaXRvcik7CkBAIC00NSw2ICs0Niw4
IEBAIHZvaWQgSlNJbW11dGFibGVCdXR0ZXJmbHk6OnZpc2l0Q2hpbGRyZW4KICAgICB2aXNpdG9y
LmFwcGVuZFZhbHVlc0hpZGRlbihidXR0ZXJmbHktPmNvbnRpZ3VvdXMoKS5kYXRhKCksIGJ1dHRl
cmZseS0+cHVibGljTGVuZ3RoKCkpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNJbW11
dGFibGVCdXR0ZXJmbHkpOworCiB2b2lkIEpTSW1tdXRhYmxlQnV0dGVyZmx5Ojpjb3B5VG9Bcmd1
bWVudHMoSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlKiBmaXJzdEVsZW1lbnREZXN0LCB1bnNpZ25l
ZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKIHsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbGVuZ3RoOyArK2kpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
SW1tdXRhYmxlQnV0dGVyZmx5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNJbW11dGFibGVCdXR0ZXJmbHkuaAkocmV2aXNpb24gMjcyNzY5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbW11dGFibGVCdXR0ZXJmbHkuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAxOSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTE0NSw3ICsxNDUsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBqc0Rv
dWJsZU51bWJlcih2YWx1ZSk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJl
bihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAK
ICAgICB2b2lkIGNvcHlUb0FyZ3VtZW50cyhKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUqIGZpcnN0
RWxlbWVudERlc3QsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTSW50ZXJuYWxG
aWVsZE9iamVjdEltcGwuaAkocmV2aXNpb24gMjcyNzY5KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY2
LDcgKzY2LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZJbnRlcm5h
bEZpZWxkKHVuc2lnbmVkIGluZGV4KSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNJbnRlcm5h
bEZpZWxkT2JqZWN0SW1wbCwgbV9pbnRlcm5hbEZpZWxkcykgKyBpbmRleCAqIHNpemVvZihXcml0
ZUJhcnJpZXI8VW5rbm93bj4pOyB9CiAKIHByb3RlY3RlZDoKLSAgICBzdGF0aWMgdm9pZCB2aXNp
dENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9URU1QTEFURV9W
SVNJVF9DSElMRFJFTjsKIAogICAgIEpTSW50ZXJuYWxGaWVsZE9iamVjdEltcGwoVk0mIHZtLCBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSkKICAgICAgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ludGVybmFsRmllbGRPYmplY3RJbXBs
SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
SW50ZXJuYWxGaWVsZE9iamVjdEltcGxJbmxpbmVzLmgJKHJldmlzaW9uIDI3Mjc2OSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTSW50ZXJuYWxGaWVsZE9iamVjdEltcGxJbmxp
bmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxOS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMzAsNyArMzAsOCBAQAogbmFtZXNwYWNlIEpTQyB7CiAKIHRl
bXBsYXRlPHVuc2lnbmVkIHBhc3NlZE51bWJlck9mSW50ZXJuYWxGaWVsZHM+Ci12b2lkIEpTSW50
ZXJuYWxGaWVsZE9iamVjdEltcGw8cGFzc2VkTnVtYmVyT2ZJbnRlcm5hbEZpZWxkcz46OnZpc2l0
Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5
cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTSW50ZXJuYWxGaWVsZE9iamVjdEltcGw8cGFzc2VkTnVt
YmVyT2ZJbnRlcm5hbEZpZWxkcz46OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlz
aXRvciYgdmlzaXRvcikKIHsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTSW50ZXJu
YWxGaWVsZE9iamVjdEltcGwqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRT
KHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC0zOCw0ICszOSw2IEBAIHZvaWQgSlNJbnRlcm5hbEZp
ZWxkT2JqZWN0SW1wbDxwYXNzZWROdW0KICAgICB2aXNpdG9yLmFwcGVuZFZhbHVlcyh0aGlzT2Jq
ZWN0LT5tX2ludGVybmFsRmllbGRzLCBudW1iZXJPZkludGVybmFsRmllbGRzKTsKIH0KIAorREVG
SU5FX1RFTVBMQVRFX1ZJU0lUX0NISUxEUkVOKHRlbXBsYXRlPHVuc2lnbmVkIHBhc3NlZE51bWJl
ck9mSW50ZXJuYWxGaWVsZHM+LCBKU0ludGVybmFsRmllbGRPYmplY3RJbXBsPHBhc3NlZE51bWJl
ck9mSW50ZXJuYWxGaWVsZHM+KTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xleGljYWxFbnZpcm9ubWVudC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMZXhpY2FsRW52aXJvbm1lbnQu
Y3BwCShyZXZpc2lvbiAyNzI3NjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0xleGljYWxFbnZpcm9ubWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNiw3ICszNiw4IEBA
IG5hbWVzcGFjZSBKU0MgewogCiBjb25zdCBDbGFzc0luZm8gSlNMZXhpY2FsRW52aXJvbm1lbnQ6
OnNfaW5mbyA9IHsgIkpTTGV4aWNhbEVudmlyb25tZW50IiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0
ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU0xleGljYWxFbnZpcm9ubWVudCkgfTsK
IAotdm9pZCBKU0xleGljYWxFbnZpcm9ubWVudDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGws
IFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQg
SlNMZXhpY2FsRW52aXJvbm1lbnQ6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlz
aXRvciYgdmlzaXRvcikKIHsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTTGV4aWNh
bEVudmlyb25tZW50Kj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlz
T2JqZWN0LCBpbmZvKCkpOwpAQCAtNDQsNiArNDUsOCBAQCB2b2lkIEpTTGV4aWNhbEVudmlyb25t
ZW50Ojp2aXNpdENoaWxkcmVuCiAgICAgdmlzaXRvci5hcHBlbmRWYWx1ZXNIaWRkZW4odGhpc09i
amVjdC0+dmFyaWFibGVzKCksIHRoaXNPYmplY3QtPnN5bWJvbFRhYmxlKCktPnNjb3BlU2l6ZSgp
KTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTTGV4aWNhbEVudmlyb25tZW50KTsKKwog
dm9pZCBKU0xleGljYWxFbnZpcm9ubWVudDo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFw
QW5hbHl6ZXImIGFuYWx5emVyKQogewogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNM
ZXhpY2FsRW52aXJvbm1lbnQqPihjZWxsKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTTGV4aWNhbEVudmlyb25tZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNMZXhpY2FsRW52aXJvbm1lbnQuaAkocmV2aXNpb24gMjcyNzY5
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMZXhpY2FsRW52aXJvbm1lbnQu
aAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDgtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDgtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTEzNCw3ICsxMzQsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgICAg
IH0KICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RW
aXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKICAgICBzdGF0aWMgdm9pZCBh
bmFseXplSGVhcChKU0NlbGwqLCBIZWFwQW5hbHl6ZXImKTsKIH07CiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTWFwSXRlcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTWFwSXRlcmF0b3IuY3BwCShyZXZpc2lvbiAy
NzI3NjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01hcEl0ZXJhdG9yLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNyBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMjEgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTcsMTMgKzU3LDE2IEBAIHZvaWQgSlNNYXBJdGVyYXRv
cjo6ZmluaXNoQ3JlYXRpb24oVk0mIHYKICAgICAgICAgQmFzZTo6aW50ZXJuYWxGaWVsZChpbmRl
eCkuc2V0KHZtLCB0aGlzLCB2YWx1ZXNbaW5kZXhdKTsKIH0KIAotdm9pZCBKU01hcEl0ZXJhdG9y
Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1w
bGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU01hcEl0ZXJhdG9yOjp2aXNpdENoaWxkcmVu
SW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0byogdGhpc09i
amVjdCA9IGpzQ2FzdDxKU01hcEl0ZXJhdG9yKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVD
VF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4o
dGhpc09iamVjdCwgdmlzaXRvcik7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU01hcEl0
ZXJhdG9yKTsKKwogSlNWYWx1ZSBKU01hcEl0ZXJhdG9yOjpjcmVhdGVQYWlyKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUga2V5LCBKU1ZhbHVlIHZhbHVlKQogewogICAgIE1h
cmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3M7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU01hcEl0ZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNNYXBJdGVyYXRvci5oCShyZXZpc2lvbiAyNzI3NjkpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU01hcEl0ZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE2IEFwcGxlLCBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMSBBcHBsZSwgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0xNDIsNyArMTQyLDcgQEAgcHJpdmF0ZToKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGZp
bmlzaENyZWF0aW9uKFZNJiwgSlNNYXAqLCBJdGVyYXRpb25LaW5kKTsKICAgICB2b2lkIGZpbmlz
aENyZWF0aW9uKFZNJik7CiAgICAgSlNWYWx1ZSBjcmVhdGVQYWlyKEpTR2xvYmFsT2JqZWN0Kiwg
SlNWYWx1ZSwgSlNWYWx1ZSk7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwq
LCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiB9OwogU1RBVElD
X0FTU0VSVF9JU19UUklWSUFMTFlfREVTVFJVQ1RJQkxFKEpTTWFwSXRlcmF0b3IpOwogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZUVudmlyb25tZW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZUVudmly
b25tZW50LmNwcAkocmV2aXNpb24gMjcyNzY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNNb2R1bGVFbnZpcm9ubWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02NSw3ICs2
NSw4IEBAIHZvaWQgSlNNb2R1bGVFbnZpcm9ubWVudDo6ZmluaXNoQ3JlYXRpb24KICAgICB0aGlz
LT5tb2R1bGVSZWNvcmRTbG90KCkuc2V0KHZtLCB0aGlzLCBtb2R1bGVSZWNvcmQpOwogfQogCi12
b2lkIEpTTW9kdWxlRW52aXJvbm1lbnQ6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90
VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTTW9k
dWxlRW52aXJvbm1lbnQ6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYg
dmlzaXRvcikKIHsKICAgICBKU01vZHVsZUVudmlyb25tZW50KiB0aGlzT2JqZWN0ID0ganNDYXN0
PEpTTW9kdWxlRW52aXJvbm1lbnQqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVS
SVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC03NCw2ICs3NSw4IEBAIHZvaWQgSlNNb2R1bGVF
bnZpcm9ubWVudDo6dmlzaXRDaGlsZHJlbigKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0
LT5tb2R1bGVSZWNvcmRTbG90KCkpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNNb2R1
bGVFbnZpcm9ubWVudCk7CisKIGJvb2wgSlNNb2R1bGVFbnZpcm9ubWVudDo6Z2V0T3duUHJvcGVy
dHlTbG90KEpTT2JqZWN0KiBjZWxsLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcm9w
ZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgVk0mIHZt
ID0gZ2xvYmFsT2JqZWN0LT52bSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNNb2R1bGVFbnZpcm9ubWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTTW9kdWxlRW52aXJvbm1lbnQuaAkocmV2aXNpb24gMjcyNzY5KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVFbnZpcm9ubWVudC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIw
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0y
MDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtODksNyArODksNyBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gKmJp
dHdpc2VfY2FzdDxXcml0ZUJhcnJpZXJCYXNlPEFic3RyYWN0TW9kdWxlUmVjb3JkPio+KGJpdHdp
c2VfY2FzdDxjaGFyKj4odGhpcykgKyBvZmZzZXRPZk1vZHVsZVJlY29yZChzeW1ib2xUYWJsZSgp
KSk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90
VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiB9OwogCiBpbmxpbmUgSlNN
b2R1bGVFbnZpcm9ubWVudDo6SlNNb2R1bGVFbnZpcm9ubWVudChWTSYgdm0sIFN0cnVjdHVyZSog
c3RydWN0dXJlLCBKU1Njb3BlKiBjdXJyZW50U2NvcGUsIFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJs
ZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlTmFtZXNwYWNl
T2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U01vZHVsZU5hbWVzcGFjZU9iamVjdC5jcHAJKHJldmlzaW9uIDI3Mjc2OSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlTmFtZXNwYWNlT2JqZWN0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTg1LDcgKzg1LDggQEAgdm9pZCBKU01vZHVsZU5hbWVzcGFjZU9iamVjdDo6
ZGVzdHJveShKUwogICAgIHRoaXNPYmplY3QtPkpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0Ojp+SlNN
b2R1bGVOYW1lc3BhY2VPYmplY3QoKTsKIH0KIAotdm9pZCBKU01vZHVsZU5hbWVzcGFjZU9iamVj
dDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVt
cGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNNb2R1bGVOYW1lc3BhY2VPYmplY3Q6OnZp
c2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBK
U01vZHVsZU5hbWVzcGFjZU9iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU01vZHVsZU5hbWVz
cGFjZU9iamVjdCo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09i
amVjdCwgaW5mbygpKTsKQEAgLTk4LDYgKzk5LDggQEAgdm9pZCBKU01vZHVsZU5hbWVzcGFjZU9i
amVjdDo6dmlzaXRDaGlsZAogICAgIH0KIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTTW9k
dWxlTmFtZXNwYWNlT2JqZWN0KTsKKwogc3RhdGljIEpTVmFsdWUgZ2V0VmFsdWUoSlNNb2R1bGVF
bnZpcm9ubWVudCogZW52aXJvbm1lbnQsIFByb3BlcnR5TmFtZSBsb2NhbE5hbWUsIFNjb3BlT2Zm
c2V0JiBzY29wZU9mZnNldCkKIHsKICAgICBTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUgPSBlbnZp
cm9ubWVudC0+c3ltYm9sVGFibGUoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTTW9kdWxlTmFtZXNwYWNlT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QuaAkocmV2aXNpb24gMjcy
NzY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVOYW1lc3BhY2VP
YmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTUtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTUtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTcyLDcgKzcyLDcgQEAgcHVibGljOgogcHJpdmF0
ZToKICAgICBKU19FWFBPUlRfUFJJVkFURSBKU01vZHVsZU5hbWVzcGFjZU9iamVjdChWTSYsIFN0
cnVjdHVyZSopOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNH
bG9iYWxPYmplY3QqLCBBYnN0cmFjdE1vZHVsZVJlY29yZCosIFZlY3RvcjxzdGQ6OnBhaXI8SWRl
bnRpZmllciwgQWJzdHJhY3RNb2R1bGVSZWNvcmQ6OlJlc29sdXRpb24+PiYmKTsKLSAgICBzdGF0
aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFS
RV9WSVNJVF9DSElMRFJFTjsKICAgICBib29sIGdldE93blByb3BlcnR5U2xvdENvbW1vbihKU0ds
b2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CiAKICAgICBzdHJ1Y3Qg
RXhwb3J0RW50cnkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1
bGVSZWNvcmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTTW9kdWxlUmVjb3JkLmNwcAkocmV2aXNpb24gMjcyNzY5KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVSZWNvcmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE5IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNzAs
NyArNzAsOCBAQCB2b2lkIEpTTW9kdWxlUmVjb3JkOjpmaW5pc2hDcmVhdGlvbihKU0dsCiAgICAg
QVNTRVJUKGluaGVyaXRzKHZtLCBpbmZvKCkpKTsKIH0KIAotdm9pZCBKU01vZHVsZVJlY29yZDo6
dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxh
dGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNNb2R1bGVSZWNvcmQ6OnZpc2l0Q2hpbGRyZW5J
bXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU01vZHVsZVJlY29y
ZCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU01vZHVsZVJlY29yZCo+KGNlbGwpOwogICAgIEFTU0VS
VF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTc4LDYgKzc5LDgg
QEAgdm9pZCBKU01vZHVsZVJlY29yZDo6dmlzaXRDaGlsZHJlbihKU0NlbAogICAgIHZpc2l0b3Iu
YXBwZW5kKHRoaXNPYmplY3QtPm1fbW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUpOwogfQogCitERUZJ
TkVfVklTSVRfQ0hJTERSRU4oSlNNb2R1bGVSZWNvcmQpOworCiB2b2lkIEpTTW9kdWxlUmVjb3Jk
OjpsaW5rKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgc2NyaXB0RmV0Y2hl
cikKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZVJlY29yZC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlUmVjb3JkLmgJKHJldmlzaW9uIDI3Mjc2
OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlUmVjb3JkLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1
LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC02Niw3ICs2Niw3IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGZpbmlz
aENyZWF0aW9uKEpTR2xvYmFsT2JqZWN0KiwgVk0mKTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0
Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxE
UkVOOwogCiAgICAgdm9pZCBpbnN0YW50aWF0ZURlY2xhcmF0aW9ucyhKU0dsb2JhbE9iamVjdCos
IE1vZHVsZVByb2dyYW1FeGVjdXRhYmxlKiwgSlNWYWx1ZSBzY3JpcHRGZXRjaGVyKTsKIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNOYXRpdmVTdGRGdW5jdGlvbi5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNOYXRpdmVTdGRG
dW5jdGlvbi5jcHAJKHJldmlzaW9uIDI3Mjc2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTTmF0aXZlU3RkRnVuY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDEsMTMg
KzQxLDE2IEBAIEpTTmF0aXZlU3RkRnVuY3Rpb246OkpTTmF0aXZlU3RkRnVuY3Rpb24KIHsKIH0K
IAotdm9pZCBKU05hdGl2ZVN0ZEZ1bmN0aW9uOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwg
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBK
U05hdGl2ZVN0ZEZ1bmN0aW9uOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0
b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNOYXRpdmVTdGRGdW5jdGlvbiogdGhpc09iamVjdCA9IGpz
Q2FzdDxKU05hdGl2ZVN0ZEZ1bmN0aW9uKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9J
TkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhp
c09iamVjdCwgdmlzaXRvcik7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU05hdGl2ZVN0
ZEZ1bmN0aW9uKTsKKwogdm9pZCBKU05hdGl2ZVN0ZEZ1bmN0aW9uOjpmaW5pc2hDcmVhdGlvbihW
TSYgdm0sIE5hdGl2ZUV4ZWN1dGFibGUqIGV4ZWN1dGFibGUsIHVuc2lnbmVkIGxlbmd0aCwgY29u
c3QgU3RyaW5nJiBuYW1lKQogewogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtLCBleGVjdXRh
YmxlLCBsZW5ndGgsIG5hbWUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNOYXRpdmVTdGRGdW5jdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTTmF0aXZlU3RkRnVuY3Rpb24uaAkocmV2aXNpb24gMjcyNzY5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNOYXRpdmVTdGRGdW5jdGlvbi5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE4IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtNjUsNyArNjUsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIEpTTmF0aXZl
U3RkRnVuY3Rpb24oVk0mLCBOYXRpdmVFeGVjdXRhYmxlKiwgSlNHbG9iYWxPYmplY3QqLCBTdHJ1
Y3R1cmUqLCBOYXRpdmVTdGRGdW5jdGlvbiYmKTsKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZN
JiwgTmF0aXZlRXhlY3V0YWJsZSosIHVuc2lnbmVkIGxlbmd0aCwgY29uc3QgU3RyaW5nJiBuYW1l
KTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7
CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIE5hdGl2ZVN0ZEZ1bmN0aW9uIG1f
ZnVuY3Rpb247CiB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmpl
Y3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2Jq
ZWN0LmNwcAkocmV2aXNpb24gMjcyNzY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqICBD
b3B5cmlnaHQgKEMpIDE5OTktMjAwMSBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQogICog
IENvcHlyaWdodCAoQykgMjAwMSBQZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQotICogIENvcHly
aWdodCAoQykgMjAwMy0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBD
b3B5cmlnaHQgKEMpIDIwMDMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KiAgQ29weXJpZ2h0IChDKSAyMDA3IEVyaWMgU2VpZGVsIChlcmljQHdlYmtpdC5vcmcpCiAgKgog
ICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKQEAgLTcyLDcgKzcyLDggQEAgY29uc3QgQ2xhc3NJbmZvIEpTT2JqZWN0OjpzX2lu
Zm8gPSB7ICJPYgogCiBjb25zdCBDbGFzc0luZm8gSlNGaW5hbE9iamVjdDo6c19pbmZvID0geyAi
T2JqZWN0IiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9U
QUJMRShKU0ZpbmFsT2JqZWN0KSB9OwogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSlNPYmplY3Q6Om1h
cmtBdXhpbGlhcnlBbmRWaXNpdE91dE9mTGluZVByb3BlcnRpZXMoU2xvdFZpc2l0b3ImIHZpc2l0
b3IsIEJ1dHRlcmZseSogYnV0dGVyZmx5LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUHJvcGVydHlP
ZmZzZXQgbWF4T2Zmc2V0KQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK0FMV0FZU19JTkxJ
TkUgdm9pZCBKU09iamVjdDo6bWFya0F1eGlsaWFyeUFuZFZpc2l0T3V0T2ZMaW5lUHJvcGVydGll
cyhWaXNpdG9yJiB2aXNpdG9yLCBCdXR0ZXJmbHkqIGJ1dHRlcmZseSwgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IG1heE9mZnNldCkKIHsKICAgICAvLyBXZSBjYWxsIHRoaXMg
d2hlbiB3ZSBmb3VuZCBldmVyeXRoaW5nIHdpdGhvdXQgcmFjZXMuCiAgICAgQVNTRVJUKHN0cnVj
dHVyZSk7CkBAIC0xMDMsNyArMTA0LDggQEAgQUxXQVlTX0lOTElORSB2b2lkIEpTT2JqZWN0Ojpt
YXJrQXV4aWxpYQogICAgIHZpc2l0b3IuYXBwZW5kVmFsdWVzSGlkZGVuKGJ1dHRlcmZseS0+cHJv
cGVydHlTdG9yYWdlKCkgLSBvdXRPZkxpbmVTaXplLCBvdXRPZkxpbmVTaXplKTsKIH0KIAotQUxX
QVlTX0lOTElORSBTdHJ1Y3R1cmUqIEpTT2JqZWN0Ojp2aXNpdEJ1dHRlcmZseShTbG90VmlzaXRv
ciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+CitBTFdBWVNfSU5MSU5FIFN0
cnVjdHVyZSogSlNPYmplY3Q6OnZpc2l0QnV0dGVyZmx5KFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAg
ICAgc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IHJhY2VSZWFzb24gPSAiSlNPYmplY3Q6OnZpc2l0
QnV0dGVyZmx5IjsKICAgICBTdHJ1Y3R1cmUqIHJlc3VsdCA9IHZpc2l0QnV0dGVyZmx5SW1wbCh2
aXNpdG9yKTsKQEAgLTExMiw3ICsxMTQsOCBAQCBBTFdBWVNfSU5MSU5FIFN0cnVjdHVyZSogSlNP
YmplY3Q6OnZpc2l0CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotQUxXQVlTX0lOTElORSBTdHJ1
Y3R1cmUqIEpTT2JqZWN0Ojp2aXNpdEJ1dHRlcmZseUltcGwoU2xvdFZpc2l0b3ImIHZpc2l0b3Ip
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgorQUxXQVlTX0lOTElORSBTdHJ1Y3R1cmUqIEpT
T2JqZWN0Ojp2aXNpdEJ1dHRlcmZseUltcGwoVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBWTSYg
dm0gPSB2aXNpdG9yLnZtKCk7CiAgICAgCkBAIC00MTIsMjQgKzQxNSwyMCBAQCBzaXplX3QgSlNP
YmplY3Q6OmVzdGltYXRlZFNpemUoSlNDZWxsKiBjCiAgICAgcmV0dXJuIEJhc2U6OmVzdGltYXRl
ZFNpemUoY2VsbCwgdm0pICsgYnV0dGVyZmx5T3V0T2ZMaW5lU2l6ZTsKIH0KIAotdm9pZCBKU09i
amVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQor
dGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNPYmplY3Q6OnZpc2l0Q2hpbGRyZW5J
bXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU09iamVjdCogdGhp
c09iamVjdCA9IGpzQ2FzdDxKU09iamVjdCo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1Rf
SU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKLSNpZiBBU1NFUlRfRU5BQkxFRAotICAgIGJv
b2wgd2FzQ2hlY2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlvbiA9IHZpc2l0b3IubV9pc0NoZWNr
aW5nRm9yRGVmYXVsdE1hcmtWaW9sYXRpb247Ci0gICAgdmlzaXRvci5tX2lzQ2hlY2tpbmdGb3JE
ZWZhdWx0TWFya1Zpb2xhdGlvbiA9IGZhbHNlOwotI2VuZGlmCi0gICAgCisgICAgdHlwZW5hbWUg
VmlzaXRvcjo6RGVmYXVsdE1hcmtpbmdWaW9sYXRpb25Bc3NlcnRpb25TY29wZSBhc3NlcnRpb25T
Y29wZSh2aXNpdG9yKTsKKwogICAgIEpTQ2VsbDo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2
aXNpdG9yKTsKLSAgICAKKwogICAgIHRoaXNPYmplY3QtPnZpc2l0QnV0dGVyZmx5KHZpc2l0b3Ip
OwotICAgIAotI2lmIEFTU0VSVF9FTkFCTEVECi0gICAgdmlzaXRvci5tX2lzQ2hlY2tpbmdGb3JE
ZWZhdWx0TWFya1Zpb2xhdGlvbiA9IHdhc0NoZWNraW5nRm9yRGVmYXVsdE1hcmtWaW9sYXRpb247
Ci0jZW5kaWYKIH0KIAorREVGSU5FX0VYUE9SVF9WSVNJVF9DSElMRFJFTihKU09iamVjdCk7CisK
IHZvaWQgSlNPYmplY3Q6OmFuYWx5emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFuYWx5emVyJiBh
bmFseXplcikKIHsKICAgICBKU09iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU09iamVjdCo+
KGNlbGwpOwpAQCAtNDY4LDE0ICs0NjcsMTIgQEAgdm9pZCBKU09iamVjdDo6YW5hbHl6ZUhlYXAo
SlNDZWxsKiBjZWxsLAogICAgIH0KIH0KIAotdm9pZCBKU0ZpbmFsT2JqZWN0Ojp2aXNpdENoaWxk
cmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBWaXNpdG9yPgordm9pZCBKU0ZpbmFsT2JqZWN0Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwq
IGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNGaW5hbE9iamVjdCogdGhpc09iamVj
dCA9IGpzQ2FzdDxKU0ZpbmFsT2JqZWN0Kj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9J
TkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwotI2lmIEFTU0VSVF9FTkFCTEVECi0gICAgYm9v
bCB3YXNDaGVja2luZ0ZvckRlZmF1bHRNYXJrVmlvbGF0aW9uID0gdmlzaXRvci5tX2lzQ2hlY2tp
bmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlvbjsKLSAgICB2aXNpdG9yLm1faXNDaGVja2luZ0ZvckRl
ZmF1bHRNYXJrVmlvbGF0aW9uID0gZmFsc2U7Ci0jZW5kaWYKKyAgICB0eXBlbmFtZSBWaXNpdG9y
OjpEZWZhdWx0TWFya2luZ1Zpb2xhdGlvbkFzc2VydGlvblNjb3BlIGFzc2VydGlvblNjb3BlKHZp
c2l0b3IpOwogICAgIAogICAgIEpTQ2VsbDo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNp
dG9yKTsKICAgICAKQEAgLTQ4MywxMiArNDgwLDEwIEBAIHZvaWQgSlNGaW5hbE9iamVjdDo6dmlz
aXRDaGlsZHJlbihKU0NlbGwKICAgICAgICAgaWYgKHVuc2lnbmVkIHN0b3JhZ2VTaXplID0gc3Ry
dWN0dXJlLT5pbmxpbmVTaXplKCkpCiAgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZFZhbHVlc0hp
ZGRlbih0aGlzT2JqZWN0LT5pbmxpbmVTdG9yYWdlKCksIHN0b3JhZ2VTaXplKTsKICAgICB9Ci0g
ICAgCi0jaWYgQVNTRVJUX0VOQUJMRUQKLSAgICB2aXNpdG9yLm1faXNDaGVja2luZ0ZvckRlZmF1
bHRNYXJrVmlvbGF0aW9uID0gd2FzQ2hlY2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlvbjsKLSNl
bmRpZgogfQogCitERUZJTkVfRVhQT1JUX1ZJU0lUX0NISUxEUkVOKEpTRmluYWxPYmplY3QpOwor
CiBTdHJpbmcgSlNPYmplY3Q6OmNsYXNzTmFtZShjb25zdCBKU09iamVjdCogb2JqZWN0LCBWTSYg
dm0pCiB7CiAgICAgY29uc3QgQ2xhc3NJbmZvKiBpbmZvID0gb2JqZWN0LT5jbGFzc0luZm8odm0p
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCShyZXZpc2lv
biAyNzI3NjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTkt
MjAwMSBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQogICogIENvcHlyaWdodCAoQykgMjAw
MSBQZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQotICogIENvcHlyaWdodCAoQykgMjAwMy0yMDE5
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMt
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YwpAQCAtMTA4LDggKzEwOCw5IEBAIGNsYXNzIEpTT2JqZWN0IDogcHVibGljIEpTQ2VsbCB7CiBw
dWJsaWM6CiAgICAgdXNpbmcgQmFzZSA9IEpTQ2VsbDsKIAorICAgIERFQ0xBUkVfRVhQT1JUX1ZJ
U0lUX0NISUxEUkVOOworCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHNpemVfdCBlc3Rp
bWF0ZWRTaXplKEpTQ2VsbCosIFZNJik7Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZv
aWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwogICAgIEpTX0VYUE9SVF9Q
UklWQVRFIHN0YXRpYyB2b2lkIGFuYWx5emVIZWFwKEpTQ2VsbCosIEhlYXBBbmFseXplciYpOwog
CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFN0cmluZyBjbGFzc05hbWUoY29uc3QgSlNP
YmplY3QqLCBWTSYpOwpAQCAtOTgyLDExICs5ODMsMTEgQEAgcHJvdGVjdGVkOgogICAgIEpTT2Jq
ZWN0KFZNJiwgU3RydWN0dXJlKiwgQnV0dGVyZmx5KiA9IG51bGxwdHIpOwogICAgIAogICAgIC8v
IFZpc2l0cyB0aGUgYnV0dGVyZmx5IHVubGVzcyB0aGVyZSBpcyBhIHJhY2UuIFJldHVybnMgdGhl
IHN0cnVjdHVyZSBpZiB0aGVyZSB3YXMgbm8gcmFjZS4KLSAgICBTdHJ1Y3R1cmUqIHZpc2l0QnV0
dGVyZmx5KFNsb3RWaXNpdG9yJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gU3Ry
dWN0dXJlKiB2aXNpdEJ1dHRlcmZseShWaXNpdG9yJik7CiAgICAgCi0gICAgU3RydWN0dXJlKiB2
aXNpdEJ1dHRlcmZseUltcGwoU2xvdFZpc2l0b3ImKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPiBTdHJ1Y3R1cmUqIHZpc2l0QnV0dGVyZmx5SW1wbChWaXNpdG9yJik7CiAgICAgCi0g
ICAgdm9pZCBtYXJrQXV4aWxpYXJ5QW5kVmlzaXRPdXRPZkxpbmVQcm9wZXJ0aWVzKFNsb3RWaXNp
dG9yJiwgQnV0dGVyZmx5KiwgU3RydWN0dXJlKiwgUHJvcGVydHlPZmZzZXQgbWF4T2Zmc2V0KTsK
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIG1hcmtBdXhpbGlhcnlBbmRWaXNp
dE91dE9mTGluZVByb3BlcnRpZXMoVmlzaXRvciYsIEJ1dHRlcmZseSosIFN0cnVjdHVyZSosIFBy
b3BlcnR5T2Zmc2V0IG1heE9mZnNldCk7CiAKICAgICAvLyBDYWxsIHRoaXMgaWYgeW91IGtub3cg
dGhhdCB0aGUgb2JqZWN0IGlzIGluIGEgbW9kZSB3aGVyZSBpdCBoYXMgYXJyYXkKICAgICAvLyBz
dG9yYWdlLiBUaGlzIHdpbGwgYXNzZXJ0IG90aGVyd2lzZS4KQEAgLTExNzQsOCArMTE3NSw2IEBA
IHByb3RlY3RlZDoKICAgICB9CiB9OwogCi1jbGFzcyBKU0ZpbmFsT2JqZWN0OwotCiAvLyBKU0Zp
bmFsT2JqZWN0IGlzIGEgdHlwZSBvZiBKU09iamVjdCB0aGF0IGNvbnRhaW5zIHN1ZmZpY2llbnQg
aW50ZXJuYWwKIC8vIHN0b3JhZ2UgdG8gZnVsbHkgbWFrZSB1c2Ugb2YgdGhlIGNvbGxlY3RvciBj
ZWxsIGNvbnRhaW5pbmcgaXQuCiBjbGFzcyBKU0ZpbmFsT2JqZWN0IGZpbmFsIDogcHVibGljIEpT
T2JqZWN0IHsKQEAgLTEyMTQsMTUgKzEyMTMsMTMgQEAgcHVibGljOgogICAgICAgICByZXR1cm4g
U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCB0eXBlSW5mbygp
LCBpbmZvKCksIGRlZmF1bHRJbmRleGluZ1R5cGUsIGlubGluZUNhcGFjaXR5KTsKICAgICB9CiAK
LSAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCos
IFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9FWFBPUlRfVklTSVRfQ0hJTERSRU47CiAKICAg
ICBERUNMQVJFX0VYUE9SVF9JTkZPOwogCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBMTElu
dE9mZnNldHNFeHRyYWN0b3I7CiAKLSAgICB2b2lkIHZpc2l0Q2hpbGRyZW5Db21tb24oU2xvdFZp
c2l0b3ImKTsKLQogICAgIGV4cGxpY2l0IEpTRmluYWxPYmplY3QoVk0mIHZtLCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSwgQnV0dGVyZmx5KiBidXR0ZXJmbHkpCiAgICAgICAgIDogSlNPYmplY3Qodm0s
IHN0cnVjdHVyZSwgYnV0dGVyZmx5KQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTUHJvbWlzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNQcm9taXNlLmNwcAkocmV2aXNpb24gMjcyNzY5KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9taXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY3
LDEzICs2NywxNiBAQCB2b2lkIEpTUHJvbWlzZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQogICAg
ICAgICBCYXNlOjppbnRlcm5hbEZpZWxkKGluZGV4KS5zZXQodm0sIHRoaXMsIHZhbHVlc1tpbmRl
eF0pOwogfQogCi12b2lkIEpTUHJvbWlzZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNQ
cm9taXNlOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3Ip
CiB7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Byb21pc2UqPihjZWxsKTsKICAg
ICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAgICAgQmFz
ZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKIH0KIAorREVGSU5FX1ZJU0lU
X0NISUxEUkVOKEpTUHJvbWlzZSk7CisKIGF1dG8gSlNQcm9taXNlOjpzdGF0dXMoVk0mKSBjb25z
dCAtPiBTdGF0dXMKIHsKICAgICBKU1ZhbHVlIHZhbHVlID0gaW50ZXJuYWxGaWVsZChGaWVsZDo6
RmxhZ3MpLmdldCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9t
aXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9t
aXNlLmgJKHJldmlzaW9uIDI3Mjc2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTUHJvbWlzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTk2LDcgKzk2LDcgQEAgcHVibGljOgogICAgIH07
CiAgICAgc3RhdGljIERlZmVycmVkRGF0YSBjcmVhdGVEZWZlcnJlZERhdGEoSlNHbG9iYWxPYmpl
Y3QqLCBKU1Byb21pc2VDb25zdHJ1Y3RvciopOwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGls
ZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47
CiAKIHByb3RlY3RlZDoKICAgICBKU1Byb21pc2UoVk0mLCBTdHJ1Y3R1cmUqKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVydHlOYW1lRW51bWVyYXRvci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yLmNwcAkocmV2aXNpb24gMjcyNzY5KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxOSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAyMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTcwLDcgKzcwLDggQEAgdm9pZCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmZpbmlzaENy
ZQogICAgIH0KIH0KIAotdm9pZCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OnZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1l
IFZpc2l0b3I+Cit2b2lkIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6dmlzaXRDaGlsZHJlbklt
cGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTUHJvcGVydHlOYW1l
RW51bWVyYXRvciogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3Iq
PihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8o
KSk7CkBAIC04Nyw2ICs4OCw4IEBAIHZvaWQgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjp2aXNp
dENoaWwKICAgICB9CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU1Byb3BlcnR5TmFtZUVu
dW1lcmF0b3IpOworCiAvLyBGSVhNRTogQXNzZXJ0IHRoYXQgcHJvcGVydGllcyByZXR1cm5lZCBi
eSBnZXRPd25Qcm9wZXJ0eU5hbWVzKCkgYXJlIHJlcG9ydGVkIGVudW1lcmFibGUgYnkgZ2V0T3du
UHJvcGVydHlTbG90KCkuCiAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjE5OTI2CiB2b2lkIGdldEVudW1lcmFibGVQcm9wZXJ0eU5hbWVzKEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEpTT2JqZWN0KiBiYXNlLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVy
dHlOYW1lcywgdWludDMyX3QmIGluZGV4ZWRMZW5ndGgsIHVpbnQzMl90JiBzdHJ1Y3R1cmVQcm9w
ZXJ0eUNvdW50KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmgJKHJldmlzaW9uIDI3Mjc2OSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVydHlOYW1lRW51bWVyYXRvci5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNC0y
MDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
NC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtODQsNyArODQsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBP
QkpFQ1RfT0ZGU0VUT0YoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLCBtX3Byb3BlcnR5TmFtZXMp
OwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZp
c2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiBwcml2YXRlOgogICAgIGZy
aWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU1Byb3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU1Byb3h5LmNwcAkocmV2aXNpb24gMjcyNzY5KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm94eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTIsIDIwMTYtMjAxNyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAyMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTM1LDcgKzM1LDggQEAgU1RBVElDX0FTU0VSVF9JU19UUklWSUFMTFlfREVTVFJVQ1RJ
QkxFKAogCiBjb25zdCBDbGFzc0luZm8gSlNQcm94eTo6c19pbmZvID0geyAiSlNQcm94eSIsICZC
YXNlOjpzX2luZm8sIG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNQcm94
eSkgfTsKIAotdm9pZCBKU1Byb3h5Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZp
c2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1Byb3h5
Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAg
ICAgSlNQcm94eSogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Byb3h5Kj4oY2VsbCk7CiAgICAgQVNT
RVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNDMsNiArNDQs
OCBAQCB2b2lkIEpTUHJveHk6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsCiAgICAgdmlzaXRv
ci5hcHBlbmQodGhpc09iamVjdC0+bV90YXJnZXQpOwogfQogCitERUZJTkVfRVhQT1JUX1ZJU0lU
X0NISUxEUkVOKEpTUHJveHkpOworCiB2b2lkIEpTUHJveHk6OnNldFRhcmdldChWTSYgdm0sIEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCiB7CiAgICAgbV90YXJnZXQuc2V0KHZtLCB0aGlz
LCBnbG9iYWxPYmplY3QpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQ
cm94eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJv
eHkuaAkocmV2aXNpb24gMjcyNzY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNQcm94eS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMS0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODUsNyArODUsNyBAQCBwcm90ZWN0ZWQ6CiAg
ICAgICAgIG1fdGFyZ2V0LnNldCh2bSwgdGhpcywgdGFyZ2V0KTsKICAgICB9CiAKLSAgICBKU19F
WFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNp
dG9yJik7CisgICAgREVDTEFSRV9FWFBPUlRfVklTSVRfQ0hJTERSRU47CiAKICAgICBKU19FWFBP
UlRfUFJJVkFURSBzdGF0aWMgU3RyaW5nIGNsYXNzTmFtZShjb25zdCBKU09iamVjdCosIFZNJik7
CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFN0cmluZyB0b1N0cmluZ05hbWUoY29uc3Qg
SlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCopOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNTY29wZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNTY29wZS5jcHAJKHJldmlzaW9uIDI3Mjc2OSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTU2NvcGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDIwIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBS
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDIxIEFwcGxlIEluYy4gQWxsIFJpZ2h0
cyBSZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzksNyArMzks
OCBAQCBTVEFUSUNfQVNTRVJUX0lTX1RSSVZJQUxMWV9ERVNUUlVDVElCTEUoCiAKIGNvbnN0IENs
YXNzSW5mbyBKU1Njb3BlOjpzX2luZm8gPSB7ICJTY29wZSIsICZCYXNlOjpzX2luZm8sIG51bGxw
dHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNTY29wZSkgfTsKIAotdm9pZCBKU1Nj
b3BlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0
ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1Njb3BlOjp2aXNpdENoaWxkcmVuSW1w
bChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNTY29wZSogdGhpc09i
amVjdCA9IGpzQ2FzdDxKU1Njb3BlKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhF
UklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNDcsNiArNDgsOCBAQCB2b2lkIEpTU2NvcGU6
OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsCiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVj
dC0+bV9uZXh0KTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTU2NvcGUpOworCiAvLyBS
ZXR1cm5zIHRydWUgaWYgd2UgZm91bmQgZW5vdWdoIGluZm9ybWF0aW9uIHRvIHRlcm1pbmF0ZSBv
cHRpbWl6YXRpb24uCiBzdGF0aWMgaW5saW5lIGJvb2wgYWJzdHJhY3RBY2Nlc3MoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgSlNTY29wZSogc2NvcGUsIGNvbnN0IElkZW50aWZpZXImIGlk
ZW50LCBHZXRPclB1dCBnZXRPclB1dCwgc2l6ZV90IGRlcHRoLCBib29sJiBuZWVkc1ZhckluamVj
dGlvbkNoZWNrcywgUmVzb2x2ZU9wJiBvcCwgSW5pdGlhbGl6YXRpb25Nb2RlIGluaXRpYWxpemF0
aW9uTW9kZSkKIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2NvcGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Njb3BlLmgJ
KHJldmlzaW9uIDI3Mjc2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2Nv
cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTItMjAxOSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTItMjAyMSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY0LDcgKzY0LDcgQEAgcHVibGljOgogCiAgICAgc3Rh
dGljIHZvaWQgY29sbGVjdENsb3N1cmVWYXJpYWJsZXNVbmRlclREWihKU1Njb3BlKiwgVERaRW52
aXJvbm1lbnQmIHJlc3VsdCwgUHJpdmF0ZU5hbWVFbnZpcm9ubWVudCYpOwogCi0gICAgc3RhdGlj
IHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVf
VklTSVRfQ0hJTERSRU47CiAKICAgICBib29sIGlzVmFyU2NvcGUoKTsKICAgICBib29sIGlzTGV4
aWNhbFNjb3BlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NlZ21l
bnRlZFZhcmlhYmxlT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmNwcAkocmV2aXNpb24gMjcyNzY5
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9i
amVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDEyLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEyLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02MiwxOSArNjIsMjIgQEAgU2NvcGVPZmZzZXQg
SlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdDo6YQogICAgIHJldHVybiBTY29wZU9mZnNldChvbGRT
aXplKTsKIH0KIAotdm9pZCBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0Ojp2aXNpdENoaWxkcmVu
KEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yKQordGVtcGxhdGU8dHlwZW5h
bWUgVmlzaXRvcj4KK3ZvaWQgSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdDo6dmlzaXRDaGlsZHJl
bkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTU2VnbWVudGVk
VmFyaWFibGVPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNTZWdtZW50ZWRWYXJpYWJsZU9i
amVjdCo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwg
aW5mbygpKTsKLSAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHNsb3RWaXNpdG9y
KTsKKyAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwogICAgIAog
ICAgIC8vIEZJWE1FOiBXZSBjb3VsZCBhdm9pZCBsb2NraW5nIGhlcmUgaWYgU2VnbWVudGVkVmVj
dG9yIHdhcyBsb2NrLWZyZWUuIEl0IGNvdWxkIGJlIG1hZGUgbG9jay1mcmVlCiAgICAgLy8gcmVs
YXRpdmVseSBlYXNpbHkuCiAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayh0aGlzT2JqZWN0LT5j
ZWxsTG9jaygpKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSB0aGlzT2JqZWN0LT5tX3ZhcmlhYmxl
cy5zaXplKCk7IGktLTspCi0gICAgICAgIHNsb3RWaXNpdG9yLmFwcGVuZEhpZGRlbih0aGlzT2Jq
ZWN0LT5tX3ZhcmlhYmxlc1tpXSk7CisgICAgICAgIHZpc2l0b3IuYXBwZW5kSGlkZGVuKHRoaXNP
YmplY3QtPm1fdmFyaWFibGVzW2ldKTsKIH0KIAorREVGSU5FX0VYUE9SVF9WSVNJVF9DSElMRFJF
TihKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0KTsKKwogdm9pZCBKU1NlZ21lbnRlZFZhcmlhYmxl
T2JqZWN0OjphbmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5hbHl6ZXIp
CiB7CiAgICAgSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxK
U1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0Kj4oY2VsbCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdC5o
CShyZXZpc2lvbiAyNzI3NjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Nl
Z21lbnRlZFZhcmlhYmxlT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC04Niw3ICs4Niw3IEBA
IHB1YmxpYzoKICAgICAvLyB0aGUgaW5kZXggb2YgdGhlIGZpcnN0IG9uZSBhZGRlZC4KICAgICBK
U19FWFBPUlRfUFJJVkFURSBTY29wZU9mZnNldCBhZGRWYXJpYWJsZXModW5zaWduZWQgbnVtYmVy
T2ZWYXJpYWJsZXNUb0FkZCwgSlNWYWx1ZSk7CiAgICAgCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUg
c3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERF
Q0xBUkVfRVhQT1JUX1ZJU0lUX0NISUxEUkVOOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRp
YyB2b2lkIGFuYWx5emVIZWFwKEpTQ2VsbCosIEhlYXBBbmFseXplciYpOwogICAgIAogcHJvdGVj
dGVkOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZXRJdGVyYXRvci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZXRJdGVy
YXRvci5jcHAJKHJldmlzaW9uIDI3Mjc2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTU2V0SXRlcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE3IEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMSBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01NywxMyArNTcsMTYg
QEAgdm9pZCBKU1NldEl0ZXJhdG9yOjpmaW5pc2hDcmVhdGlvbihWTSYgdgogICAgICAgICBCYXNl
OjppbnRlcm5hbEZpZWxkKGluZGV4KS5zZXQodm0sIHRoaXMsIHZhbHVlc1tpbmRleF0pOwogfQog
Ci12b2lkIEpTU2V0SXRlcmF0b3I6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90Vmlz
aXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTU2V0SXRl
cmF0b3I6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikK
IHsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTU2V0SXRlcmF0b3IqPihjZWxsKTsK
ICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAgICAg
QmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKIH0KIAorREVGSU5FX1ZJ
U0lUX0NISUxEUkVOKEpTU2V0SXRlcmF0b3IpOworCiBKU1ZhbHVlIEpTU2V0SXRlcmF0b3I6OmNy
ZWF0ZVBhaXIoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBrZXksIEpTVmFs
dWUgdmFsdWUpCiB7CiAgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgYXJnczsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2V0SXRlcmF0b3IuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NldEl0ZXJhdG9yLmgJKHJldmlzaW9uIDI3
Mjc2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2V0SXRlcmF0b3IuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMs
IDIwMTYgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDIxIEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTEzMCw3ICsxMzAsNyBAQCBwcml2YXRlOgogICAgIEpTX0VY
UE9SVF9QUklWQVRFIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBKU1NldCosIEl0ZXJhdGlvbktp
bmQpOwogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKICAgICBKU19FWFBPUlRfUFJJVkFU
RSBKU1ZhbHVlIGNyZWF0ZVBhaXIoSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlLCBKU1ZhbHVlKTsK
LSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7Cisg
ICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIH07CiBTVEFUSUNfQVNTRVJUX0lTX1RSSVZJQUxM
WV9ERVNUUlVDVElCTEUoSlNTZXRJdGVyYXRvcik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTU3RyaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU1N0cmluZy5jcHAJKHJldmlzaW9uIDI3Mjc2OSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw3
ICsxLDcgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDIgSGFycmkgUG9ydGVuIChw
b3J0ZW5Aa2RlLm9yZykKICAqICBDb3B5cmlnaHQgKEMpIDIwMDEgUGV0ZXIgS2VsbHkgKHBta0Bw
b3N0LmNvbSkKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDA0LTIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTEwNSw3ICsxMDUsOCBA
QCBzaXplX3QgSlNTdHJpbmc6OmVzdGltYXRlZFNpemUoSlNDZWxsKiBjCiAgICAgcmV0dXJuIEJh
c2U6OmVzdGltYXRlZFNpemUoY2VsbCwgdm0pICsgYml0d2lzZV9jYXN0PFN0cmluZ0ltcGwqPihw
b2ludGVyKS0+Y29zdER1cmluZ0dDKCk7CiB9CiAKLXZvaWQgSlNTdHJpbmc6OnZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1l
IFZpc2l0b3I+Cit2b2lkIEpTU3RyaW5nOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGws
IFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNTdHJpbmcqIHRoaXNPYmplY3QgPSBhc1N0cmlu
ZyhjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8o
KSk7CkBAIC0xNDMsNiArMTQ0LDggQEAgdm9pZCBKU1N0cmluZzo6dmlzaXRDaGlsZHJlbihKU0Nl
bGwqIGNlbAogICAgICAgICB2aXNpdG9yLnJlcG9ydEV4dHJhTWVtb3J5VmlzaXRlZChpbXBsLT5j
b3N0RHVyaW5nR0MoKSk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU1N0cmluZyk7CisK
IHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbWF4TGVuZ3RoRm9yT25TdGFja1Jlc29sdmUgPSAy
MDQ4OwogCiB2b2lkIEpTUm9wZVN0cmluZzo6cmVzb2x2ZVJvcGVJbnRlcm5hbDgoTENoYXIqIGJ1
ZmZlcikgY29uc3QKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5n
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcu
aAkocmV2aXNpb24gMjcyNzY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNT
dHJpbmcuaAkod29ya2luZyBjb3B5KQpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiAgQ29weXJpZ2h0
IChDKSAxOTk5LTIwMDEgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKICAqICBDb3B5cmln
aHQgKEMpIDIwMDEgUGV0ZXIgS2VsbHkgKHBta0Bwb3N0LmNvbSkKLSAqICBDb3B5cmlnaHQgKEMp
IDIwMDMtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0
IChDKSAyMDAzLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKQEAgLTIxNyw3ICsyMTcsNyBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgdm9p
ZCBkdW1wVG9TdHJlYW0oY29uc3QgSlNDZWxsKiwgUHJpbnRTdHJlYW0mKTsKICAgICBzdGF0aWMg
c2l6ZV90IGVzdGltYXRlZFNpemUoSlNDZWxsKiwgVk0mKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNp
dENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElM
RFJFTjsKIAogICAgIEFMV0FZU19JTkxJTkUgYm9vbCBpc1JvcGUoKSBjb25zdAogICAgIHsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nSXRlcmF0b3IuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nSXRlcmF0
b3IuY3BwCShyZXZpc2lvbiAyNzI3NjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU1N0cmluZ0l0ZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8q
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMTUgWXVzdWtlIFN1enVraSA8dXRhdGFuZS50ZWFAZ21haWwu
Y29tPi4KLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTUxLDExICs1MSwxNCBA
QCBKU1N0cmluZ0l0ZXJhdG9yKiBKU1N0cmluZ0l0ZXJhdG9yOjpjbG9uCiAgICAgcmV0dXJuIGNs
b25lOwogfQogCi12b2lkIEpTU3RyaW5nSXRlcmF0b3I6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBj
ZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2
b2lkIEpTU3RyaW5nSXRlcmF0b3I6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlz
aXRvciYgdmlzaXRvcikKIHsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTU3RyaW5n
SXRlcmF0b3IqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmpl
Y3QsIGluZm8oKSk7CiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9y
KTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTU3RyaW5nSXRlcmF0b3IpOworCiB9IC8v
IG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3Ry
aW5nSXRlcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU1N0cmluZ0l0ZXJhdG9yLmgJKHJldmlzaW9uIDI3Mjc2OSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nSXRlcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTUgWXVzdWtlIFN1enVraSA8dXRhdGFu
ZS50ZWFAZ21haWwuY29tPi4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTc5LDcg
KzgwLDcgQEAgcHVibGljOgogICAgIEpTVmFsdWUgaW5kZXgoKSBjb25zdCB7IHJldHVybiBpbnRl
cm5hbEZpZWxkKEZpZWxkOjpJbmRleCkuZ2V0KCk7IH0KICAgICBKU1N0cmluZ0l0ZXJhdG9yKiBj
bG9uZShKU0dsb2JhbE9iamVjdCopOwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihK
U0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKIHBy
aXZhdGU6CiAgICAgSlNTdHJpbmdJdGVyYXRvcihWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJl
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVj
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTeW1i
b2xUYWJsZU9iamVjdC5jcHAJKHJldmlzaW9uIDI3Mjc2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE5IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MzYsNyArMzYsOCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogY29uc3QgQ2xhc3NJbmZvIEpTU3ltYm9s
VGFibGVPYmplY3Q6OnNfaW5mbyA9IHsgIlN5bWJvbFRhYmxlT2JqZWN0IiwgJkJhc2U6OnNfaW5m
bywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1N5bWJvbFRhYmxlT2Jq
ZWN0KSB9OwogCi12b2lkIEpTU3ltYm9sVGFibGVPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+
Cit2b2lkIEpTU3ltYm9sVGFibGVPYmplY3Q6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2Vs
bCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU1N5bWJvbFRhYmxlT2JqZWN0KiB0aGlzT2Jq
ZWN0ID0ganNDYXN0PEpTU3ltYm9sVGFibGVPYmplY3QqPihjZWxsKTsKICAgICBBU1NFUlRfR0Nf
T0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC00NCw2ICs0NSw4IEBAIHZv
aWQgSlNTeW1ib2xUYWJsZU9iamVjdDo6dmlzaXRDaGlsZHJlbigKICAgICB2aXNpdG9yLmFwcGVu
ZCh0aGlzT2JqZWN0LT5tX3N5bWJvbFRhYmxlKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVO
KEpTU3ltYm9sVGFibGVPYmplY3QpOworCiBib29sIEpTU3ltYm9sVGFibGVPYmplY3Q6OmRlbGV0
ZVByb3BlcnR5KEpTQ2VsbCogY2VsbCwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUHJv
cGVydHlOYW1lIHByb3BlcnR5TmFtZSwgRGVsZXRlUHJvcGVydHlTbG90JiBzbG90KQogewogICAg
IEpTU3ltYm9sVGFibGVPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNTeW1ib2xUYWJsZU9i
amVjdCo+KGNlbGwpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTeW1i
b2xUYWJsZU9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuaAkocmV2aXNpb24gMjcyNzY5KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVjdC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDIwIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDIxIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtNzAsNyArNzAsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIG1fc3ltYm9sVGFibGUuc2V0
KHZtLCB0aGlzLCBzeW1ib2xUYWJsZSk7CiAgICAgfQogICAgIAotICAgIHN0YXRpYyB2b2lkIHZp
c2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NI
SUxEUkVOOwogICAgIAogcHJpdmF0ZToKICAgICBXcml0ZUJhcnJpZXI8U3ltYm9sVGFibGU+IG1f
c3ltYm9sVGFibGU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1dlYWtP
YmplY3RSZWYuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTV2Vha09iamVjdFJlZi5jcHAJKHJldmlzaW9uIDI3Mjc2OSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTV2Vha09iamVjdFJlZi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlLCBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMSBBcHBsZSwgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zOSw3
ICszOSw4IEBAIHZvaWQgSlNXZWFrT2JqZWN0UmVmOjpmaW5pc2hDcmVhdGlvbihWTSYKICAgICBC
YXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CiB9CiAKLXZvaWQgSlNXZWFrT2JqZWN0UmVmOjp2aXNp
dENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0
eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1dlYWtPYmplY3RSZWY6OnZpc2l0Q2hpbGRyZW5JbXBs
KEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBhdXRvKiB0aGlzT2JqZWN0
ID0ganNDYXN0PEpTV2Vha09iamVjdFJlZio+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1Rf
SU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTUxLDYgKzUyLDggQEAgdm9pZCBKU1dl
YWtPYmplY3RSZWY6OnZpc2l0Q2hpbGRyZW4oSlNDZQogICAgIH0KIH0KIAorREVGSU5FX1ZJU0lU
X0NISUxEUkVOKEpTV2Vha09iamVjdFJlZik7CisKIHZvaWQgSlNXZWFrT2JqZWN0UmVmOjpmaW5h
bGl6ZVVuY29uZGl0aW9uYWxseShWTSYgdm0pCiB7CiAgICAgaWYgKG1fdmFsdWUgJiYgIXZtLmhl
YXAuaXNNYXJrZWQobV92YWx1ZS5nZXQoKSkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU1dlYWtPYmplY3RSZWYuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU1dlYWtPYmplY3RSZWYuaAkocmV2aXNpb24gMjcyNzY5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNXZWFrT2JqZWN0UmVmLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlLCBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMSBBcHBsZSwg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC02NSw3ICs2NSw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICB2b2lkIGZpbmFsaXplVW5j
b25kaXRpb25hbGx5KFZNJik7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwq
LCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKIHByaXZhdGU6
CiAgICAgSlNXZWFrT2JqZWN0UmVmKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1dpdGhTY29wZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNXaXRoU2NvcGUuY3BwCShyZXZp
c2lvbiAyNzI3NjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1dpdGhTY29w
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDEyLCAyMDE2IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMi0yMDIxIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDEsNyArNDEsOCBAQCBKU1dpdGhTY29wZSogSlNX
aXRoU2NvcGU6OmNyZWF0ZSgKICAgICByZXR1cm4gd2l0aFNjb3BlOwogfQogCi12b2lkIEpTV2l0
aFNjb3BlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3Ip
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1dpdGhTY29wZTo6dmlzaXRDaGls
ZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTV2l0aFNj
b3BlKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTV2l0aFNjb3BlKj4oY2VsbCk7CiAgICAgQVNTRVJU
X0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNDksNiArNTAsOCBA
QCB2b2lkIEpTV2l0aFNjb3BlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogCiAgICAgdmlzaXRvci5h
cHBlbmQodGhpc09iamVjdC0+bV9vYmplY3QpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4o
SlNXaXRoU2NvcGUpOworCiBTdHJ1Y3R1cmUqIEpTV2l0aFNjb3BlOjpjcmVhdGVTdHJ1Y3R1cmUo
Vk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvKQogewog
ICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90bywgVHlw
ZUluZm8oV2l0aFNjb3BlVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNXaXRoU2NvcGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1dpdGhTY29wZS5oCShyZXZpc2lvbiAyNzI3
NjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1dpdGhTY29wZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAx
NiBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIt
MjAyMSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTQzLDcgKzQzLDcgQEAgcHVibGljOgogCiAgICAgSlNPYmplY3QqIG9i
amVjdCgpIHsgcmV0dXJuIG1fb2JqZWN0LmdldCgpOyB9CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNp
dENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElM
RFJFTjsKIAogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xv
YmFsT2JqZWN0KiwgSlNWYWx1ZSBwcm90byk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTV3JhcHBlck9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNXcmFwcGVyT2JqZWN0LmNwcAkocmV2aXNpb24gMjcyNzY5KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNXcmFwcGVyT2JqZWN0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA2IE1h
a3MgT3Jsb3ZpY2gKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDksIDIwMTIgQXBwbGUsIElu
Yy4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMSBBcHBsZSwgSW5jLgogICoKICAqICBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKQEAgLTI5LDExICsyOSwxNCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogU1RBVElDX0FT
U0VSVF9JU19UUklWSUFMTFlfREVTVFJVQ1RJQkxFKEpTV3JhcHBlck9iamVjdCk7CiAKLXZvaWQg
SlNXcmFwcGVyT2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3Im
IHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1dyYXBwZXJPYmpl
Y3Q6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsK
ICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTV3JhcHBlck9iamVjdCo+KGNlbGwpOwog
ICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKICAgICBC
YXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwogfQogCitERUZJTkVfRVhQ
T1JUX1ZJU0lUX0NISUxEUkVOKEpTV3JhcHBlck9iamVjdCk7CisKIH0gLy8gbmFtZXNwYWNlIEpT
QwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNXcmFwcGVyT2JqZWN0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNXcmFwcGVyT2Jq
ZWN0LmgJKHJldmlzaW9uIDI3Mjc2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTV3JhcHBlck9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAq
ICBDb3B5cmlnaHQgKEMpIDIwMDYgTWFrcyBPcmxvdmljaAotICogIENvcHlyaWdodCAoQykgMjAw
NiwgMjAwNywgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAg
Q29weXJpZ2h0IChDKSAyMDA2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTY0LDcgKzY0LDcgQEAgcHVibGljOgogcHJvdGVjdGVk
OgogICAgIGV4cGxpY2l0IEpTV3JhcHBlck9iamVjdChWTSYsIFN0cnVjdHVyZSopOwogCi0gICAg
SlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90
VmlzaXRvciYpOworICAgIERFQ0xBUkVfRVhQT1JUX1ZJU0lUX0NISUxEUkVOOwogfTsKIAogaW5s
aW5lIEpTV3JhcHBlck9iamVjdDo6SlNXcmFwcGVyT2JqZWN0KFZNJiB2bSwgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9MYXp5Q2xhc3NT
dHJ1Y3R1cmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0xhenlDbGFzc1N0cnVjdHVyZS5jcHAJKHJldmlzaW9uIDI3Mjc2OSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0xhenlDbGFzc1N0cnVjdHVyZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTkgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC03MiwxMiArNzIsMTYgQEAgdm9pZCBMYXp5Q2xhc3NTdHJ1Y3R1cmU6OkluaXRpYWxpemVy
OjpzZQogICAgIGNsYXNzU3RydWN0dXJlLm1fY29uc3RydWN0b3Iuc2V0KHZtLCBnbG9iYWwsIGNv
bnN0cnVjdG9yKTsKIH0KIAotdm9pZCBMYXp5Q2xhc3NTdHJ1Y3R1cmU6OnZpc2l0KFNsb3RWaXNp
dG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgTGF6eUNsYXNz
U3RydWN0dXJlOjp2aXNpdChWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIG1fc3RydWN0dXJlLnZp
c2l0KHZpc2l0b3IpOwogICAgIHZpc2l0b3IuYXBwZW5kKG1fY29uc3RydWN0b3IpOwogfQogCit0
ZW1wbGF0ZSB2b2lkIExhenlDbGFzc1N0cnVjdHVyZTo6dmlzaXQoQWJzdHJhY3RTbG90VmlzaXRv
ciYpOwordGVtcGxhdGUgdm9pZCBMYXp5Q2xhc3NTdHJ1Y3R1cmU6OnZpc2l0KFNsb3RWaXNpdG9y
Jik7CisKIHZvaWQgTGF6eUNsYXNzU3RydWN0dXJlOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNv
bnN0CiB7CiAgICAgb3V0LnByaW50KCI8c3RydWN0dXJlID0gIiwgbV9zdHJ1Y3R1cmUsICIsIGNv
bnN0cnVjdG9yID0gIiwgUmF3UG9pbnRlcihtX2NvbnN0cnVjdG9yLmdldCgpKSwgIj4iKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0xhenlDbGFzc1N0cnVjdHVyZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0xhenlDbGFzc1N0cnVj
dHVyZS5oCShyZXZpc2lvbiAyNzI3NjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9MYXp5Q2xhc3NTdHJ1Y3R1cmUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMTcsNyArMTE3LDcgQEAgcHVi
bGljOgogICAgICAgICByZXR1cm4gbV9jb25zdHJ1Y3Rvci5nZXQoKTsKICAgICB9CiAgICAgCi0g
ICAgdm9pZCB2aXNpdChTbG90VmlzaXRvciYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0
b3I+IHZvaWQgdmlzaXQoVmlzaXRvciYpOwogICAgIAogICAgIHZvaWQgZHVtcChQcmludFN0cmVh
bSYpIGNvbnN0OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9MYXp5UHJv
cGVydHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9MYXp5
UHJvcGVydHkuaAkocmV2aXNpb24gMjcyNzY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvTGF6eVByb3BlcnR5LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMDMsNyArMTAzLDcgQEAg
cHVibGljOgogICAgIHZvaWQgc2V0TWF5QmVOdWxsKFZNJiwgY29uc3QgT3duZXJUeXBlKiBvd25l
ciwgRWxlbWVudFR5cGUqKTsKICAgICB2b2lkIHNldChWTSYsIGNvbnN0IE93bmVyVHlwZSogb3du
ZXIsIEVsZW1lbnRUeXBlKik7CiAgICAgCi0gICAgdm9pZCB2aXNpdChTbG90VmlzaXRvciYpOwor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgdmlzaXQoVmlzaXRvciYpOwogICAg
IAogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwogICAgIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTGF6eVByb3BlcnR5SW5saW5lcy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0xhenlQcm9wZXJ0eUlubGluZXMuaAko
cmV2aXNpb24gMjcyNzY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTGF6eVBy
b3BlcnR5SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY2LDcgKzY2LDggQEAgdm9pZCBMYXp5UHJv
cGVydHk8T3duZXJUeXBlLCBFbGVtZW50VHlwZQogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPd25l
clR5cGUsIHR5cGVuYW1lIEVsZW1lbnRUeXBlPgotdm9pZCBMYXp5UHJvcGVydHk8T3duZXJUeXBl
LCBFbGVtZW50VHlwZT46OnZpc2l0KFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlw
ZW5hbWUgVmlzaXRvcj4KK3ZvaWQgTGF6eVByb3BlcnR5PE93bmVyVHlwZSwgRWxlbWVudFR5cGU+
Ojp2aXNpdChWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGlmIChtX3BvaW50ZXIgJiYgIShtX3Bv
aW50ZXIgJiBsYXp5VGFnKSkKICAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZChiaXR3
aXNlX2Nhc3Q8RWxlbWVudFR5cGUqPihtX3BvaW50ZXIpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL01vZHVsZVByb2dyYW1FeGVjdXRhYmxlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Nb2R1bGVQcm9ncmFtRXhlY3V0YWJsZS5j
cHAJKHJldmlzaW9uIDI3Mjc2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01v
ZHVsZVByb2dyYW1FeGVjdXRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAsIDIwMTMsIDIwMTUtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAyMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTc5LDcgKzc5LDggQEAgYXV0byBNb2R1bGVQcm9ncmFtRXhlY3V0YWJsZTo6ZW5zdXJl
VGVtcAogICAgIHJldHVybiBlbnN1cmVUZW1wbGF0ZU9iamVjdE1hcEltcGwobV90ZW1wbGF0ZU9i
amVjdE1hcCk7CiB9CiAKLXZvaWQgTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGU6OnZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1l
IFZpc2l0b3I+Cit2b2lkIE1vZHVsZVByb2dyYW1FeGVjdXRhYmxlOjp2aXNpdENoaWxkcmVuSW1w
bChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgTW9kdWxlUHJvZ3JhbUV4
ZWN1dGFibGUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8TW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUqPihj
ZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7
CkBAIC05NCw0ICs5NSw2IEBAIHZvaWQgTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGU6OnZpc2l0Q2hp
bGQKICAgICB9CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihNb2R1bGVQcm9ncmFtRXhlY3V0
YWJsZSk7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9Nb2R1bGVQcm9ncmFtRXhlY3V0YWJsZS5oCShyZXZpc2lv
biAyNzI3NjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Nb2R1bGVQcm9ncmFt
RXhlY3V0YWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAwOS0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAwOS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNzcsNyArNzcsNyBAQCBwcml2YXRlOgog
CiAgICAgTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUoSlNHbG9iYWxPYmplY3QqLCBjb25zdCBTb3Vy
Y2VDb2RlJik7CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RW
aXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIFdyaXRlQmFycmll
cjxVbmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2s+IG1fdW5saW5rZWRNb2R1bGVQcm9ncmFt
Q29kZUJsb2NrOwogICAgIFdyaXRlQmFycmllcjxTeW1ib2xUYWJsZT4gbV9tb2R1bGVFbnZpcm9u
bWVudFN5bWJvbFRhYmxlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0
aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0
aW9ucy5jcHAJKHJldmlzaW9uIDI3Mjc2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL09wdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMS0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTU4LDYgKzU1OCw5IEBAIHZvaWQg
T3B0aW9uczo6cmVjb21wdXRlRGVwZW5kZW50T3B0aW9ucygKIAogICAgIGlmIChPcHRpb25zOjp1
c2VQcml2YXRlU3RhdGljQ2xhc3NGaWVsZHMoKSkKICAgICAgICAgT3B0aW9uczo6dXNlUHJpdmF0
ZUNsYXNzRmllbGRzKCkgPSB0cnVlOworCisgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VWZXJpZnlH
QygpKQorICAgICAgICBPcHRpb25zOjp2ZXJpZnlHQygpID0gdHJ1ZTsKIH0KIAogaW5saW5lIHZv
aWQqIE9wdGlvbnM6OmFkZHJlc3NPZk9wdGlvbihPcHRpb25zOjpJRCBpZCkKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaAkocmV2aXNpb24gMjcyNzY5
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzY5LDYgKzM2OSw4IEBAIEpTX0VYUE9SVF9QUklWQVRFIGJvb2wgY2FuVXNl
SklUQ2FnZSgpOwogICAgIHYoQm9vbCwgYWx3YXlzR2VuZXJhdGVQQ1RvQ29kZU9yaWdpbk1hcCwg
ZmFsc2UsIE5vcm1hbCwgIlRoaXMgd2lsbCBtYWtlIHN1cmUgd2UgYWx3YXlzIGdlbmVyYXRlIGEg
UENUb0NvZGVPcmlnaW5NYXAgZm9yIEpJVGVkIGNvZGUuIikgXAogICAgIFwKICAgICB2KERvdWJs
ZSwgcmFuZG9tSW50ZWdyaXR5QXVkaXRSYXRlLCAwLjA1LCBOb3JtYWwsICJQcm9iYWJpbGl0eSBv
ZiByYW5kb20gaW50ZWdyaXR5IGF1ZGl0cyBbMC4wIC0gMS4wXSIpIFwKKyAgICB2KEJvb2wsIHZl
cmlmeUdDLCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCisgICAgdihCb29sLCB2ZXJib3NlVmVy
aWZ5R0MsIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KEJvb2wsIHZlcmlmeUhlYXAs
IGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KFVuc2lnbmVkLCBudW1iZXJPZkdDQ3lj
bGVzVG9SZWNvcmRGb3JWZXJpZmljYXRpb24sIDMsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIFwK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb2dyYW1FeGVjdXRhYmxlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9ncmFtRXhl
Y3V0YWJsZS5jcHAJKHJldmlzaW9uIDI3Mjc2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1Byb2dyYW1FeGVjdXRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTIwOCw3ICsy
MDgsOCBAQCBhdXRvIFByb2dyYW1FeGVjdXRhYmxlOjplbnN1cmVUZW1wbGF0ZU9iCiAgICAgcmV0
dXJuIGVuc3VyZVRlbXBsYXRlT2JqZWN0TWFwSW1wbChtX3RlbXBsYXRlT2JqZWN0TWFwKTsKIH0K
IAotdm9pZCBQcm9ncmFtRXhlY3V0YWJsZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgUHJv
Z3JhbUV4ZWN1dGFibGU6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYg
dmlzaXRvcikKIHsKICAgICBQcm9ncmFtRXhlY3V0YWJsZSogdGhpc09iamVjdCA9IGpzQ2FzdDxQ
cm9ncmFtRXhlY3V0YWJsZSo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMo
dGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTIyMiw0ICsyMjMsNiBAQCB2b2lkIFByb2dyYW1FeGVj
dXRhYmxlOjp2aXNpdENoaWxkcmVuKEpTCiAgICAgfQogfQogCitERUZJTkVfVklTSVRfQ0hJTERS
RU4oUHJvZ3JhbUV4ZWN1dGFibGUpOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb2dyYW1FeGVjdXRhYmxlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvZ3JhbUV4ZWN1dGFibGUuaAkocmV2
aXNpb24gMjcyNzY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvZ3JhbUV4
ZWN1dGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDktMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDktMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTgxLDcgKzgxLDcgQEAgcHJpdmF0ZToKIAog
ICAgIFByb2dyYW1FeGVjdXRhYmxlKEpTR2xvYmFsT2JqZWN0KiwgY29uc3QgU291cmNlQ29kZSYp
OwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYp
OworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBXcml0ZUJhcnJpZXI8VW5saW5r
ZWRQcm9ncmFtQ29kZUJsb2NrPiBtX3VubGlua2VkUHJvZ3JhbUNvZGVCbG9jazsKICAgICBXcml0
ZUJhcnJpZXI8RXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZT4gbV9wcm9ncmFtQ29kZUJsb2NrOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlNYXBIYXNoVGFibGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eU1h
cEhhc2hUYWJsZS5oCShyZXZpc2lvbiAyNzI3NjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9Qcm9wZXJ0eU1hcEhhc2hUYWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDA0LTIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTEzMyw3ICsxMzMsNyBA
QCBwdWJsaWM6CiAKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNEZXN0cnVjdGlvbiA9
IHRydWU7CiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKLSAgICBzdGF0aWMgdm9p
ZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJ
VF9DSElMRFJFTjsKIAogICAgIERFQ0xBUkVfRVhQT1JUX0lORk87CiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5VGFibGUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5VGFibGUuY3BwCShyZXZpc2lvbiAy
NzI3NjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eVRhYmxlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0xMTgsNyArMTE4LDggQEAgdm9pZCBQcm9wZXJ0eVRhYmxl
OjpmaW5pc2hDcmVhdGlvbihWTSYgdgogICAgIHZtLmhlYXAucmVwb3J0RXh0cmFNZW1vcnlBbGxv
Y2F0ZWQoZGF0YVNpemUoKSk7CiB9CiAKLXZvaWQgUHJvcGVydHlUYWJsZTo6dmlzaXRDaGlsZHJl
bihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUg
VmlzaXRvcj4KK3ZvaWQgUHJvcGVydHlUYWJsZTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBj
ZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8
UHJvcGVydHlUYWJsZSo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhp
c09iamVjdCwgaW5mbygpKTsKQEAgLTEyNiw2ICsxMjcsOCBAQCB2b2lkIFByb3BlcnR5VGFibGU6
OnZpc2l0Q2hpbGRyZW4oSlNDZWxsCiAgICAgdmlzaXRvci5yZXBvcnRFeHRyYU1lbW9yeVZpc2l0
ZWQodGhpc09iamVjdC0+ZGF0YVNpemUoKSk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihQ
cm9wZXJ0eVRhYmxlKTsKKwogdm9pZCBQcm9wZXJ0eVRhYmxlOjpkZXN0cm95KEpTQ2VsbCogY2Vs
bCkKIHsKICAgICBzdGF0aWNfY2FzdDxQcm9wZXJ0eVRhYmxlKj4oY2VsbCktPlByb3BlcnR5VGFi
bGU6On5Qcm9wZXJ0eVRhYmxlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9Qcm94eU9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvUHJveHlPYmplY3QuY3BwCShyZXZpc2lvbiAyNzI3NjkpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9Qcm94eU9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjAgQXBwbGUgSW5jLiBBbGwgUmln
aHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwg
UmlnaHRzIFJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMTU4
LDcgKzExNTgsOCBAQCBib29sIFByb3h5T2JqZWN0Ojppc1Jldm9rZWQoKSBjb25zdAogICAgIHJl
dHVybiBoYW5kbGVyKCkuaXNOdWxsKCk7CiB9CiAKLXZvaWQgUHJveHlPYmplY3Q6OnZpc2l0Q2hp
bGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVu
YW1lIFZpc2l0b3I+Cit2b2lkIFByb3h5T2JqZWN0Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwq
IGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgUHJveHlPYmplY3QqIHRoaXNPYmplY3Qg
PSBqc0Nhc3Q8UHJveHlPYmplY3QqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVS
SVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC0xMTY4LDQgKzExNjksNiBAQCB2b2lkIFByb3h5
T2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogCiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09i
amVjdC0+bV9oYW5kbGVyKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKFByb3h5T2JqZWN0
KTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9Qcm94eU9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1Byb3h5T2JqZWN0LmgJKHJldmlzaW9uIDI3Mjc2OSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1Byb3h5T2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtOTEsNyArOTEsNyBA
QCBwcml2YXRlOgogICAgIHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3Qq
LCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZUFycmF5JiwgRG9udEVudW1Qcm9wZXJ0aWVz
TW9kZSk7CiAgICAgc3RhdGljIGJvb2wgc2V0UHJvdG90eXBlKEpTT2JqZWN0KiwgSlNHbG9iYWxP
YmplY3QqLCBKU1ZhbHVlIHByb3RvdHlwZSwgYm9vbCBzaG91bGRUaHJvd0lmQ2FudFNldCk7CiAg
ICAgc3RhdGljIEpTVmFsdWUgZ2V0UHJvdG90eXBlKEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3Qq
KTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7
CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIGJvb2wgZ2V0T3duUHJvcGVydHlT
bG90Q29tbW9uKEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsK
ICAgICBib29sIHBlcmZvcm1JbnRlcm5hbE1ldGhvZEdldE93blByb3BlcnR5KEpTR2xvYmFsT2Jq
ZWN0KiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1Byb3h5UmV2b2tlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9Qcm94eVJldm9rZS5jcHAJKHJldmlzaW9uIDI3Mjc2OSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3h5UmV2b2tlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5j
LiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjEgQXBwbGUg
SW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC02OSw3ICs2OSw4IEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihwZXJmb3JtUHJveHlS
ZXYKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCi12b2lk
IFByb3h5UmV2b2tlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZp
c2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBQcm94eVJldm9rZTo6dmlz
aXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFBy
b3h5UmV2b2tlKiB0aGlzT2JqZWN0ID0ganNDYXN0PFByb3h5UmV2b2tlKj4oY2VsbCk7CiAgICAg
QVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNzgsNCAr
NzksNiBAQCB2b2lkIFByb3h5UmV2b2tlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogCiAgICAgdmlz
aXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9wcm94eSk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElM
RFJFTihQcm94eVJldm9rZSk7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJveHlSZXZva2UuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm94eVJldm9rZS5oCShyZXZpc2lvbiAyNzI3NjkpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm94eVJldm9rZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE5IEFwcGxl
IEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIxIEFw
cGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtNTIsNyArNTIsNyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgdm9pZCBmaW5pc2hD
cmVhdGlvbihWTSYsIFByb3h5T2JqZWN0Kik7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJl
bihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAg
ICAgSlNWYWx1ZSBwcm94eSgpIHsgcmV0dXJuIG1fcHJveHkuZ2V0KCk7IH0KICAgICB2b2lkIHNl
dFByb3h5VG9OdWxsKFZNJiB2bSkgeyByZXR1cm4gbV9wcm94eS5zZXQodm0sIHRoaXMsIGpzTnVs
bCgpKTsgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBDYWNo
ZWRSZXN1bHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1JlZ0V4cENhY2hlZFJlc3VsdC5jcHAJKHJldmlzaW9uIDI3Mjc2OSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENhY2hlZFJlc3VsdC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDIxIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMzEsNyArMzEsOCBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotdm9pZCBSZWdFeHBDYWNo
ZWRSZXN1bHQ6OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8
dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgUmVnRXhwQ2FjaGVkUmVzdWx0Ojp2aXNpdEFnZ3JlZ2F0
ZShWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHZpc2l0b3IuYXBwZW5kKG1fbGFzdElucHV0KTsK
ICAgICB2aXNpdG9yLmFwcGVuZChtX2xhc3RSZWdFeHApOwpAQCAtNDMsNiArNDQsOSBAQCB2b2lk
IFJlZ0V4cENhY2hlZFJlc3VsdDo6dmlzaXRBZ2dyZWdhdGUoCiAgICAgfQogfQogCit0ZW1wbGF0
ZSB2b2lkIFJlZ0V4cENhY2hlZFJlc3VsdDo6dmlzaXRBZ2dyZWdhdGUoQWJzdHJhY3RTbG90Vmlz
aXRvciYpOwordGVtcGxhdGUgdm9pZCBSZWdFeHBDYWNoZWRSZXN1bHQ6OnZpc2l0QWdncmVnYXRl
KFNsb3RWaXNpdG9yJik7CisKIEpTQXJyYXkqIFJlZ0V4cENhY2hlZFJlc3VsdDo6bGFzdFJlc3Vs
dChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU09iamVjdCogb3duZXIpCiB7CiAgICAg
Vk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvUmVnRXhwQ2FjaGVkUmVzdWx0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwQ2FjaGVkUmVzdWx0LmgJKHJldmlzaW9uIDI3Mjc2OSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENhY2hlZFJlc3VsdC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiwg
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTItMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTY1LDcgKzY1LDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4g
bV9yZWlmaWVkID8gbV9yZWlmaWVkSW5wdXQuZ2V0KCkgOiBtX2xhc3RJbnB1dC5nZXQoKTsKICAg
ICB9CiAKLSAgICB2b2lkIHZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJik7CisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCB2aXNpdEFnZ3JlZ2F0ZShWaXNpdG9yJik7CiAKICAg
ICAvLyBtX2xhc3RSZWdFeHAgd291bGQgYmUgbnVsbHB0ciB3aGVuIFJlZ0V4cENhY2hlZFJlc3Vs
dCBpcyBub3QgcmVpZmllZC4KICAgICAvLyBJZiB3ZSBmaW5kIG1fbGFzdFJlZ0V4cCBpcyBudWxs
cHRyLCBpdCBtZWFucyB0aGlzIHNob3VsZCBob2xkIHRoZSBlbXB0eSBSZWdFeHAuCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBHbG9iYWxEYXRhLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBHbG9iYWxEYXRhLmNw
cAkocmV2aXNpb24gMjcyNzY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVn
RXhwR2xvYmFsRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxOS0yMDIxIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzAsMTEgKzMwLDE1IEBACiAKIG5hbWVz
cGFjZSBKU0MgewogCi12b2lkIFJlZ0V4cEdsb2JhbERhdGE6OnZpc2l0QWdncmVnYXRlKFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgUmVnRXhw
R2xvYmFsRGF0YTo6dmlzaXRBZ2dyZWdhdGUoVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBtX2Nh
Y2hlZFJlc3VsdC52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKIH0KIAordGVtcGxhdGUgdm9pZCBS
ZWdFeHBHbG9iYWxEYXRhOjp2aXNpdEFnZ3JlZ2F0ZShBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0
ZW1wbGF0ZSB2b2lkIFJlZ0V4cEdsb2JhbERhdGE6OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9y
Jik7CisKIEpTVmFsdWUgUmVnRXhwR2xvYmFsRGF0YTo6Z2V0QmFja3JlZihKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCB1bnNpZ25lZCBpKQogewogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVj
dC0+dm0oKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cEdsb2Jh
bERhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdF
eHBHbG9iYWxEYXRhLmgJKHJldmlzaW9uIDI3Mjc2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1JlZ0V4cEdsb2JhbERhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE5LTIwMjEgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00MSw3ICs0MSw3IEBA
IHB1YmxpYzoKICAgICB2b2lkIHNldElucHV0KEpTR2xvYmFsT2JqZWN0KiwgSlNTdHJpbmcqKTsK
ICAgICBKU1N0cmluZyogaW5wdXQoKSB7IHJldHVybiBtX2NhY2hlZFJlc3VsdC5pbnB1dCgpOyB9
CiAKLSAgICB2b2lkIHZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJik7CisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCB2aXNpdEFnZ3JlZ2F0ZShWaXNpdG9yJik7CiAKICAgICBK
U1ZhbHVlIGdldEJhY2tyZWYoSlNHbG9iYWxPYmplY3QqLCB1bnNpZ25lZCk7CiAgICAgSlNWYWx1
ZSBnZXRMYXN0UGFyZW4oSlNHbG9iYWxPYmplY3QqKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1JlZ0V4cE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0LmNwcAkocmV2aXNpb24gMjcyNzY5KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDAgSGFy
cmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAxOSBB
cHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIw
MjEgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwpA
QCAtNDYsNyArNDYsOCBAQCB2b2lkIFJlZ0V4cE9iamVjdDo6ZmluaXNoQ3JlYXRpb24oVk0mIHZt
CiAgICAgQVNTRVJUKHR5cGUoKSA9PSBSZWdFeHBPYmplY3RUeXBlKTsKIH0KIAotdm9pZCBSZWdF
eHBPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRv
cikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFJlZ0V4cE9iamVjdDo6dmlzaXRD
aGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFJlZ0V4
cE9iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxSZWdFeHBPYmplY3QqPihjZWxsKTsKICAgICBB
U1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC01NSw2ICs1
Niw4IEBAIHZvaWQgUmVnRXhwT2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCoKICAgICB2aXNp
dG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2xhc3RJbmRleCk7CiB9CiAKK0RFRklORV9WSVNJVF9D
SElMRFJFTihSZWdFeHBPYmplY3QpOworCiBib29sIFJlZ0V4cE9iamVjdDo6Z2V0T3duUHJvcGVy
dHlTbG90KEpTT2JqZWN0KiBvYmplY3QsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFBy
b3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBWTSYg
dm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9SZWdFeHBPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9SZWdFeHBPYmplY3QuaAkocmV2aXNpb24gMjcyNzY5KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiAr
MSw2IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAwIEhhcnJpIFBvcnRlbiAocG9y
dGVuQGtkZS5vcmcpCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMTkgQXBwbGUgSW5jLiBBbGwg
UmlnaHRzIFJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwMy0yMDIxIEFwcGxlIEluYy4g
QWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKQEAgLTEzMyw3ICsxMzMs
NyBAQCBwcml2YXRlOgogICAgIEpTX0VYUE9SVF9QUklWQVRFIFJlZ0V4cE9iamVjdChWTSYsIFN0
cnVjdHVyZSosIFJlZ0V4cCopOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZmluaXNoQ3Jl
YXRpb24oVk0mKTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xv
dFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgYm9vbCBsYXN0
SW5kZXhJc1dyaXRhYmxlKCkgY29uc3QKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TYW1wbGluZ1Byb2ZpbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TYW1wbGluZ1Byb2ZpbGVyLmNwcAkocmV2aXNpb24gMjcyNzY5
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2
LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC02NTIsNyArNjUyLDcgQEAgdm9pZCBTYW1wbGluZ1Byb2ZpbGVy
Ojpwcm9jZXNzVW52ZXJpZmllZAogICAgIG1fdW5wcm9jZXNzZWRTdGFja1RyYWNlcy5jbGVhcigp
OwogfQogCi12b2lkIFNhbXBsaW5nUHJvZmlsZXI6OnZpc2l0KFNsb3RWaXNpdG9yJiBzbG90Vmlz
aXRvcikKK3ZvaWQgU2FtcGxpbmdQcm9maWxlcjo6dmlzaXQoQWJzdHJhY3RTbG90VmlzaXRvciYg
c2xvdFZpc2l0b3IpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQobV9sb2NrLmlzTG9ja2VkKCkpOwog
ICAgIGZvciAoSlNDZWxsKiBjZWxsIDogbV9saXZlQ2VsbFBvaW50ZXJzKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NhbXBsaW5nUHJvZmlsZXIuaAkocmV2aXNp
b24gMjcyNzY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2FtcGxpbmdQcm9m
aWxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTE3MSw3ICsxNzEsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBu
b3RpY2VKU0xvY2tBY3F1aXNpdGlvbigpOwogICAgIHZvaWQgbm90aWNlVk1FbnRyeSgpOwogICAg
IHZvaWQgc2h1dGRvd24oKTsKLSAgICB2b2lkIHZpc2l0KFNsb3RWaXNpdG9yJik7CisgICAgdm9p
ZCB2aXNpdChBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAgICAgTG9jayYgZ2V0TG9jaygpIHsgcmV0
dXJuIG1fbG9jazsgfQogICAgIHZvaWQgc2V0VGltaW5nSW50ZXJ2YWwoU2Vjb25kcyBpbnRlcnZh
bCkgeyBtX3RpbWluZ0ludGVydmFsID0gaW50ZXJ2YWw7IH0KICAgICBKU19FWFBPUlRfUFJJVkFU
RSB2b2lkIHN0YXJ0KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29w
ZWRBcmd1bWVudHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1Njb3BlZEFyZ3VtZW50cy5jcHAJKHJldmlzaW9uIDI3Mjc2OSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlZEFyZ3VtZW50cy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTggQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC05OCw3ICs5OCw4IEBAIFNjb3BlZEFyZ3VtZW50cyogU2NvcGVkQXJndW1lbnRzOjpjcmVhdGUK
ICAgICByZXR1cm4gcmVzdWx0OwogfQogCi12b2lkIFNjb3BlZEFyZ3VtZW50czo6dmlzaXRDaGls
ZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5h
bWUgVmlzaXRvcj4KK3ZvaWQgU2NvcGVkQXJndW1lbnRzOjp2aXNpdENoaWxkcmVuSW1wbChKU0Nl
bGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgU2NvcGVkQXJndW1lbnRzKiB0aGlz
T2JqZWN0ID0gc3RhdGljX2Nhc3Q8U2NvcGVkQXJndW1lbnRzKj4oY2VsbCk7CiAgICAgQVNTRVJU
X0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtMTE1LDYgKzExNiw4
IEBAIHZvaWQgU2NvcGVkQXJndW1lbnRzOjp2aXNpdENoaWxkcmVuKEpTQ2UKICAgICB9CiB9CiAK
K0RFRklORV9WSVNJVF9DSElMRFJFTihTY29wZWRBcmd1bWVudHMpOworCiBTdHJ1Y3R1cmUqIFNj
b3BlZEFyZ3VtZW50czo6Y3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCiB7CiAgICAgcmV0dXJuIFN0cnVjdHVyZTo6
Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oU2NvcGVkQXJndW1l
bnRzVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU2NvcGVkQXJndW1lbnRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVkQXJndW1lbnRzLmgJKHJldmlzaW9uIDI3Mjc2OSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlZEFyZ3VtZW50cy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE5
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0y
MDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtNjMsOSArNjMsOSBAQCBwdWJsaWM6CiAgICAgCiAgICAgLy8gQ3JlYXRl
cyBhbiBhcmd1bWVudHMgb2JqZWN0IGJ5IGNvcHlpbmcgdGhlIGFyZ3VtZW50cyBmcm9tIGEgd2Vs
bC1kZWZpbmVkIHN0YWNrIGxvY2F0aW9uLgogICAgIHN0YXRpYyBTY29wZWRBcmd1bWVudHMqIGNy
ZWF0ZUJ5Q29weWluZ0Zyb20oVk0mLCBTdHJ1Y3R1cmUqLCBSZWdpc3RlciogYXJndW1lbnRzU3Rh
cnQsIHVuc2lnbmVkIHRvdGFsTGVuZ3RoLCBKU0Z1bmN0aW9uKiBjYWxsZWUsIFNjb3BlZEFyZ3Vt
ZW50c1RhYmxlKiwgSlNMZXhpY2FsRW52aXJvbm1lbnQqKTsKLSAgICAKLSAgICBzdGF0aWMgdm9p
ZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7Ci0gICAgCisKKyAgICBERUNM
QVJFX1ZJU0lUX0NISUxEUkVOOworCiAgICAgdWludDMyX3QgaW50ZXJuYWxMZW5ndGgoKSBjb25z
dAogICAgIHsKICAgICAgICAgcmV0dXJuIG1fdG90YWxMZW5ndGg7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2ltcGxlVHlwZWRBcnJheUNv
bnRyb2xsZXIuY3BwCShyZXZpc2lvbiAyNzI3NjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIxIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtNjIsNyArNjIsNyBAQCBib29sIFNpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyOjppc0F0b21p
CiAgICAgcmV0dXJuIG1fYWxsb3dBdG9taWNzV2FpdDsKIH0KIAotYm9vbCBTaW1wbGVUeXBlZEFy
cmF5Q29udHJvbGxlcjo6SlNBcnJheUJ1ZmZlck93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVS
b290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIEpTQzo6U2xvdFZp
c2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCitib29sIFNpbXBsZVR5cGVkQXJy
YXlDb250cm9sbGVyOjpKU0FycmF5QnVmZmVyT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJv
b3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgSlNDOjpBYnN0cmFj
dFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQogewogICAgIGlmIChV
TkxJS0VMWShyZWFzb24pKQogICAgICAgICAqcmVhc29uID0gIkpTQXJyYXlCdWZmZXIgaXMgb3Bh
cXVlIHJvb3QiOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2ltcGxlVHlw
ZWRBcnJheUNvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlci5oCShyZXZpc2lvbiAyNzI3NjkpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TaW1wbGVUeXBlZEFycmF5Q29udHJvbGxl
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTU4LDcgKzU4LDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBj
bGFzcyBKU0FycmF5QnVmZmVyT3duZXIgZmluYWwgOiBwdWJsaWMgV2Vha0hhbmRsZU93bmVyIHsK
ICAgICBwdWJsaWM6Ci0gICAgICAgIGJvb2wgaXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlND
OjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCwgU2xvdFZpc2l0b3ImLCBjb25z
dCBjaGFyKiogcmVhc29uKSBmaW5hbDsKKyAgICAgICAgYm9vbCBpc1JlYWNoYWJsZUZyb21PcGFx
dWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0LCBBYnN0cmFj
dFNsb3RWaXNpdG9yJiwgY29uc3QgY2hhcioqIHJlYXNvbikgZmluYWw7CiAgICAgICAgIHZvaWQg
ZmluYWxpemUoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCkgZmluYWw7
CiAgICAgfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU21hbGxTdHJp
bmdzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TbWFs
bFN0cmluZ3MuY3BwCShyZXZpc2lvbiAyNzI3NjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TbWFsbFN0cmluZ3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAxMCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAyMSBBcHBsZSBJbmMuIEFsbCBSaWdodHMg
UmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY2LDcgKzY2LDcg
QEAgdm9pZCBTbWFsbFN0cmluZ3M6OmluaXRpYWxpemVDb21tb25TdHJpbgogICAgIHNldElzSW5p
dGlhbGl6ZWQodHJ1ZSk7CiB9CiAKLXZvaWQgU21hbGxTdHJpbmdzOjp2aXNpdFN0cm9uZ1JlZmVy
ZW5jZXMoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIFNtYWxsU3RyaW5nczo6dmlzaXRTdHJv
bmdSZWZlcmVuY2VzKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgbV9uZWVk
c1RvQmVWaXNpdGVkID0gZmFsc2U7CiAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZChtX2Vt
cHR5U3RyaW5nKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NtYWxsU3Ry
aW5ncy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NtYWxs
U3RyaW5ncy5oCShyZXZpc2lvbiAyNzI3NjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TbWFsbFN0cmluZ3MuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxOSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAyMSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ5LDkgKzQ5LDkgQEAgY2xh
c3MgU3RyaW5nSW1wbDsKIAogbmFtZXNwYWNlIEpTQyB7CiAKK2NsYXNzIEFic3RyYWN0U2xvdFZp
c2l0b3I7CiBjbGFzcyBWTTsKIGNsYXNzIEpTU3RyaW5nOwotY2xhc3MgU2xvdFZpc2l0b3I7CiAK
IHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbWF4U2luZ2xlQ2hhcmFjdGVyU3RyaW5nID0gMHhG
RjsKIApAQCAtNzgsNyArNzgsNyBAQCBwdWJsaWM6CiAgICAgSlNTdHJpbmcqKiBzaW5nbGVDaGFy
YWN0ZXJTdHJpbmdzKCkgeyByZXR1cm4gJm1fc2luZ2xlQ2hhcmFjdGVyU3RyaW5nc1swXTsgfQog
CiAgICAgdm9pZCBpbml0aWFsaXplQ29tbW9uU3RyaW5ncyhWTSYpOwotICAgIHZvaWQgdmlzaXRT
dHJvbmdSZWZlcmVuY2VzKFNsb3RWaXNpdG9yJik7CisgICAgdm9pZCB2aXNpdFN0cm9uZ1JlZmVy
ZW5jZXMoQWJzdHJhY3RTbG90VmlzaXRvciYpOwogCiAjZGVmaW5lIEpTQ19DT01NT05fU1RSSU5H
U19BQ0NFU1NPUl9ERUZJTklUSU9OKG5hbWUpIFwKICAgICBKU1N0cmluZyogbmFtZSMjU3RyaW5n
KCkgY29uc3QgICAgICAgICAgICAgICAgICAgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU3BhcnNlQXJyYXlWYWx1ZU1hcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU3BhcnNlQXJyYXlWYWx1ZU1hcC5jcHAJKHJldmlzaW9uIDI3
Mjc2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NwYXJzZUFycmF5VmFsdWVN
YXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjEwLDcgKzIxMCw4IEBAIEpTVmFsdWUgU3BhcnNl
QXJyYXlFbnRyeTo6Z2V0Tm9uU3BhcnNlTW8KICAgICByZXR1cm4gQmFzZTo6Z2V0KCk7CiB9CiAK
LXZvaWQgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgU3Bh
cnNlQXJyYXlWYWx1ZU1hcDo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9y
JiB2aXNpdG9yKQogewogICAgIFNwYXJzZUFycmF5VmFsdWVNYXAqIHRoaXNPYmplY3QgPSBqc0Nh
c3Q8U3BhcnNlQXJyYXlWYWx1ZU1hcCo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5I
RVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTIyMyw1ICsyMjQsNyBAQCB2b2lkIFNwYXJz
ZUFycmF5VmFsdWVNYXA6OnZpc2l0Q2hpbGRyZW4oCiAgICAgdmlzaXRvci5yZXBvcnRFeHRyYU1l
bW9yeVZpc2l0ZWQodGhpc09iamVjdC0+bV9yZXBvcnRlZENhcGFjaXR5ICogc2l6ZW9mKE1hcDo6
S2V5VmFsdWVQYWlyVHlwZSkpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oU3BhcnNlQXJy
YXlWYWx1ZU1hcCk7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TcGFyc2VBcnJheVZhbHVlTWFwLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3BhcnNlQXJyYXlWYWx1ZU1hcC5oCShyZXZpc2lv
biAyNzI3NjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TcGFyc2VBcnJheVZh
bHVlTWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDExLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDExLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMTUsNyArMTE1LDcgQEAgcHVibGljOgogICAg
IAogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2Jq
ZWN0KiwgSlNWYWx1ZSBwcm90b3R5cGUpOwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJl
bihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAK
ICAgICBib29sIHNwYXJzZU1vZGUoKQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1N0YWNrRnJhbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1N0YWNrRnJhbWUuY3BwCShyZXZpc2lvbiAyNzI3NjkpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TdGFja0ZyYW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxOSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTE0MSw3ICsxNDEsOCBAQCBTdHJpbmcgU3RhY2tGcmFtZTo6dG9TdHJpbmcoVk0mIHZtKSBjb25z
CiAgICAgcmV0dXJuIHRyYWNlQnVpbGQudG9TdHJpbmcoKS5pbXBsKCk7CiB9CiAKLXZvaWQgU3Rh
Y2tGcmFtZTo6dmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5
cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFN0YWNrRnJhbWU6OnZpc2l0Q2hpbGRyZW5JbXBsKFZpc2l0
b3ImIHZpc2l0b3IpCiB7CiAgICAgaWYgKG1fY2FsbGVlKQogICAgICAgICB2aXNpdG9yLmFwcGVu
ZChtX2NhbGxlZSk7CkBAIC0xNDksNSArMTUwLDcgQEAgdm9pZCBTdGFja0ZyYW1lOjp2aXNpdENo
aWxkcmVuKFNsb3RWaXNpdAogICAgICAgICB2aXNpdG9yLmFwcGVuZChtX2NvZGVCbG9jayk7CiB9
CiAKK0RFRklORV9JTlNUQU5DRV9WSVNJVF9DSElMRFJFTihTdGFja0ZyYW1lKTsKKwogfSAvLyBu
YW1lc3BhY2UgSlNDCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0YWNr
RnJhbWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdGFj
a0ZyYW1lLmgJKHJldmlzaW9uIDI3Mjc2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1N0YWNrRnJhbWUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2lu
Y2x1ZGUgIkhlYXAuaCIKICNpbmNsdWRlICJWTS5oIgorI2luY2x1ZGUgIlNsb3RWaXNpdG9yTWFj
cm9zLmgiCiAjaW5jbHVkZSAiV2FzbUluZGV4T3JOYW1lLmgiCiAjaW5jbHVkZSAiV3JpdGVCYXJy
aWVyLmgiCiAjaW5jbHVkZSA8bGltaXRzLmg+CkBAIC0zNSw3ICszNiw2IEBAIG5hbWVzcGFjZSBK
U0MgewogCiBjbGFzcyBDb2RlQmxvY2s7CiBjbGFzcyBKU09iamVjdDsKLWNsYXNzIFNsb3RWaXNp
dG9yOwogCiBjbGFzcyBTdGFja0ZyYW1lIHsKIHB1YmxpYzoKQEAgLTU4LDcgKzU4LDcgQEAgcHVi
bGljOgogICAgICAgICByZXR1cm4gbV9ieXRlY29kZUluZGV4OwogICAgIH0KICAgICAKLSAgICB2
b2lkIHZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX0lOU1RBTkNFX1ZJ
U0lUX0NISUxEUkVOOwogICAgIGJvb2wgaXNNYXJrZWQoVk0mIHZtKSBjb25zdCB7IHJldHVybiAo
IW1fY2FsbGVlIHx8IHZtLmhlYXAuaXNNYXJrZWQobV9jYWxsZWUuZ2V0KCkpKSAmJiAoIW1fY29k
ZUJsb2NrIHx8IHZtLmhlYXAuaXNNYXJrZWQobV9jb2RlQmxvY2suZ2V0KCkpKTsgfQogCiBwcml2
YXRlOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3Bw
CShyZXZpc2lvbiAyNzI3NjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1
Y3R1cmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAwOC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAwOC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENv
cHlyaWdodCAoQykgMjAyMCBBbGV4ZXkgU2h2YXlrYSA8c2h2YWlrYWxlc2hAZ21haWwuY29tPi4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKQEAgLTEyNjgsNyArMTI2OCw4IEBAIHZvaWQgU3RydWN0dXJlOjpk
aWRUcmFuc2l0aW9uRnJvbVRoaXNTdHIKICAgICAgICAgbV90cmFuc2l0aW9uV2F0Y2hwb2ludFNl
dC5maXJlQWxsKHZtKCksIFN0cnVjdHVyZUZpcmVEZXRhaWwodGhpcykpOwogfQogCi12b2lkIFN0
cnVjdHVyZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9y
KQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgU3RydWN0dXJlOjp2aXNpdENoaWxk
cmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgU3RydWN0dXJl
KiB0aGlzT2JqZWN0ID0ganNDYXN0PFN0cnVjdHVyZSo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19P
QkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTEyOTAsMzIgKzEyOTEsMzgg
QEAgdm9pZCBTdHJ1Y3R1cmU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZQogICAgICAgICAvLyBO
T1RFOiBUaGlzIGNhbiBpbnRlcmxlYXZlIGluIHBpbigpLCBpbiB3aGljaCBjYXNlIGl0IG1heSBz
ZWUgYSBudWxsIHByb3BlcnR5IHRhYmxlLgogICAgICAgICAvLyBUaGF0J3MgZmluZSwgYmVjYXVz
ZSB0aGVuIHRoZSBiYXJyaWVyIHdpbGwgZmlyZSBhbmQgd2Ugd2lsbCBzY2FuIHRoaXMgYWdhaW4u
CiAgICAgICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fcHJvcGVydHlUYWJsZVVuc2Fm
ZSk7Ci0gICAgfSBlbHNlIGlmICh2aXNpdG9yLmlzQW5hbHl6aW5nSGVhcCgpKQorICAgIH0gZWxz
ZSBpZiAodmlzaXRvci52bSgpLmlzQW5hbHl6aW5nSGVhcCgpKQogICAgICAgICB2aXNpdG9yLmFw
cGVuZCh0aGlzT2JqZWN0LT5tX3Byb3BlcnR5VGFibGVVbnNhZmUpOwogICAgIGVsc2UgaWYgKHRo
aXNPYmplY3QtPm1fcHJvcGVydHlUYWJsZVVuc2FmZSkKICAgICAgICAgdGhpc09iamVjdC0+bV9w
cm9wZXJ0eVRhYmxlVW5zYWZlLmNsZWFyKCk7CiB9CiAKLWJvb2wgU3RydWN0dXJlOjppc0NoZWFw
RHVyaW5nR0MoVk0mIHZtKQorREVGSU5FX1ZJU0lUX0NISUxEUkVOKFN0cnVjdHVyZSk7CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Citib29sIFN0cnVjdHVyZTo6aXNDaGVhcER1cmluZ0dD
KFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgLy8gRklYTUU6IFdlIGNvdWxkIG1ha2UgdGhpcyBl
dmVuIHNhZmVyIGJ5IHJldHVybmluZyBmYWxzZSBpZiB0aGlzIHN0cnVjdHVyZSdzIHByb3BlcnR5
IHRhYmxlCiAgICAgLy8gaGFzIGFueSBsYXJnZSBwcm9wZXJ0eSBuYW1lcy4KICAgICAvLyBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU3MzM0CiAgICAgCi0gICAgcmV0
dXJuICghbV9nbG9iYWxPYmplY3QgfHwgdm0uaGVhcC5pc01hcmtlZChtX2dsb2JhbE9iamVjdC5n
ZXQoKSkpCi0gICAgICAgICYmIChoYXNQb2x5UHJvdG8oKSB8fCAhc3RvcmVkUHJvdG90eXBlT2Jq
ZWN0KCkgfHwgdm0uaGVhcC5pc01hcmtlZChzdG9yZWRQcm90b3R5cGVPYmplY3QoKSkpOworICAg
IHJldHVybiAoIW1fZ2xvYmFsT2JqZWN0IHx8IHZpc2l0b3IuaXNNYXJrZWQobV9nbG9iYWxPYmpl
Y3QuZ2V0KCkpKQorICAgICAgICAmJiAoaGFzUG9seVByb3RvKCkgfHwgIXN0b3JlZFByb3RvdHlw
ZU9iamVjdCgpIHx8IHZpc2l0b3IuaXNNYXJrZWQoc3RvcmVkUHJvdG90eXBlT2JqZWN0KCkpKTsK
IH0KIAotYm9vbCBTdHJ1Y3R1cmU6Om1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQor
dGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK2Jvb2wgU3RydWN0dXJlOjptYXJrSWZDaGVhcChW
aXNpdG9yJiB2aXNpdG9yKQogewotICAgIFZNJiB2bSA9IHZpc2l0b3Iudm0oKTsKLSAgICBpZiAo
IWlzQ2hlYXBEdXJpbmdHQyh2bSkpCi0gICAgICAgIHJldHVybiB2bS5oZWFwLmlzTWFya2VkKHRo
aXMpOwotICAgIAorICAgIGlmICghaXNDaGVhcER1cmluZ0dDKHZpc2l0b3IpKQorICAgICAgICBy
ZXR1cm4gdmlzaXRvci5pc01hcmtlZCh0aGlzKTsKKwogICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJy
aWVyZWQodGhpcyk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK3RlbXBsYXRlIGJvb2wgU3RydWN0
dXJlOjptYXJrSWZDaGVhcChTbG90VmlzaXRvciYpOwordGVtcGxhdGUgYm9vbCBTdHJ1Y3R1cmU6
Om1hcmtJZkNoZWFwKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKKwogUmVmPFN0cnVjdHVyZVNoYXBl
PiBTdHJ1Y3R1cmU6OnRvU3RydWN0dXJlU2hhcGUoSlNWYWx1ZSB2YWx1ZSwgYm9vbCYgc2F3UG9s
eVByb3RvU3RydWN0dXJlKQogewogICAgIFJlZjxTdHJ1Y3R1cmVTaGFwZT4gYmFzZVNoYXBlID0g
U3RydWN0dXJlU2hhcGU6OmNyZWF0ZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU3RydWN0dXJlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU3RydWN0dXJlLmgJKHJldmlzaW9uIDI3Mjc2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAwOC0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjAsNyArNjAsNiBA
QCBjbGFzcyBQcm9wZXJ0eU5hbWVBcnJheURhdGE7CiBjbGFzcyBQcm9wZXJ0eVRhYmxlOwogY2xh
c3MgU3RydWN0dXJlQ2hhaW47CiBjbGFzcyBTdHJ1Y3R1cmVTaGFwZTsKLWNsYXNzIFNsb3RWaXNp
dG9yOwogY2xhc3MgSlNTdHJpbmc7CiBzdHJ1Y3QgRHVtcENvbnRleHQ7CiBzdHJ1Y3QgSGFzaFRh
YmxlOwpAQCAtMzEwLDcgKzMwOSw3IEBAIHB1YmxpYzoKICAgICBKU1ZhbHVlIHByb3RvdHlwZUZv
ckxvb2t1cChKU0dsb2JhbE9iamVjdCosIEpTQ2VsbCogYmFzZSkgY29uc3Q7CiAgICAgU3RydWN0
dXJlQ2hhaW4qIHByb3RvdHlwZUNoYWluKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU09iamVjdCog
YmFzZSkgY29uc3Q7CiAgICAgU3RydWN0dXJlQ2hhaW4qIHByb3RvdHlwZUNoYWluKEpTR2xvYmFs
T2JqZWN0KiwgSlNPYmplY3QqIGJhc2UpIGNvbnN0OwotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hp
bGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVO
OwogICAgIAogICAgIC8vIEEgU3RydWN0dXJlIGlzIGNoZWFwIHRvIG1hcmsgZHVyaW5nIEdDIGlm
IGRvaW5nIHNvIHdvdWxkIG9ubHkgYWRkIGEgc21hbGwgYW5kIGJvdW5kZWQgYW1vdW50CiAgICAg
Ly8gdG8gb3VyIGhlYXAgZm9vdHByaW50LiBGb3IgZXhhbXBsZSwgaWYgdGhlIHN0cnVjdHVyZSBy
ZWZlcnMgdG8gYSBnbG9iYWwgb2JqZWN0IHRoYXQgaXMgbm90CkBAIC0zMTgsMTAgKzMxNywxMCBA
QCBwdWJsaWM6CiAgICAgLy8gaW5jcmVhc2UgaW4gZm9vdHByaW50IGJlY2F1c2Ugbm8gb3RoZXIg
b2JqZWN0IHJlZmVycyB0byB0aGF0IGdsb2JhbCBvYmplY3QuIFRoaXMgbWV0aG9kCiAgICAgLy8g
cmV0dXJucyB0cnVlIGlmIGFsbCB1c2VyLWNvbnRyb2xsZWQgKGFuZCBoZW5jZSB1bmJvdW5kZWQg
aW4gc2l6ZSkgb2JqZWN0cyByZWZlcmVuY2VkIGZyb20gdGhlCiAgICAgLy8gU3RydWN0dXJlIGFy
ZSBhbHJlYWR5IG1hcmtlZC4KLSAgICBib29sIGlzQ2hlYXBEdXJpbmdHQyhWTSYpOworICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IGJvb2wgaXNDaGVhcER1cmluZ0dDKFZpc2l0b3ImKTsK
ICAgICAKICAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhpcyBzdHJ1Y3R1cmUgaXMgbm93IG1hcmtl
ZC4KLSAgICBib29sIG1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJik7CisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVmlzaXRvcj4gYm9vbCBtYXJrSWZDaGVhcChWaXNpdG9yJik7CiAgICAgCiAgICAgYm9v
bCBoYXNSYXJlRGF0YSgpIGNvbnN0CiAgICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU3RydWN0dXJlQ2hhaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUNoYWluLmNwcAkocmV2aXNpb24gMjcyNzY5KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlQ2hhaW4uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAyMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTY2LDcgKzY2LDggQEAgdm9pZCBTdHJ1Y3R1cmVDaGFpbjo6ZmluaXNoQ3JlYXRpb24o
Vk0mIAogICAgIH0KIH0KIAotdm9pZCBTdHJ1Y3R1cmVDaGFpbjo6dmlzaXRDaGlsZHJlbihKU0Nl
bGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRv
cj4KK3ZvaWQgU3RydWN0dXJlQ2hhaW46OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwg
VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBTdHJ1Y3R1cmVDaGFpbiogdGhpc09iamVjdCA9IGpz
Q2FzdDxTdHJ1Y3R1cmVDaGFpbio+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJ
VFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTgwLDQgKzgxLDYgQEAgdm9pZCBTdHJ1Y3R1cmVD
aGFpbjo6dmlzaXRDaGlsZHJlbihKU0NlbAogICAgIH0KIH0KIAorREVGSU5FX1ZJU0lUX0NISUxE
UkVOKFN0cnVjdHVyZUNoYWluKTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVDaGFpbi5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUNoYWluLmgJKHJldmlzaW9uIDI3
Mjc2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUNoYWluLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4
LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDA4LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC01MSw3ICs1MSw3IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBT
dHJ1Y3R1cmVDaGFpbiogY3JlYXRlKFZNJiwgSlNPYmplY3QqKTsKICAgICBTdHJ1Y3R1cmVJRCog
aGVhZCgpIHsgcmV0dXJuIG1fdmVjdG9yLmdldCgpOyB9Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRD
aGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERS
RU47CiAKICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKICAgICB7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVSYXJlRGF0YS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlUmFyZURh
dGEuY3BwCShyZXZpc2lvbiAyNzI3NjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TdHJ1Y3R1cmVSYXJlRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02Nyw3ICs2Nyw4IEBA
IFN0cnVjdHVyZVJhcmVEYXRhOjpTdHJ1Y3R1cmVSYXJlRGF0YShWTSYKICAgICAgICAgbV9wcmV2
aW91cy5zZXQodm0sIHRoaXMsIHByZXZpb3VzKTsKIH0KIAotdm9pZCBTdHJ1Y3R1cmVSYXJlRGF0
YTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVt
cGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgU3RydWN0dXJlUmFyZURhdGE6OnZpc2l0Q2hp
bGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBTdHJ1Y3R1
cmVSYXJlRGF0YSogdGhpc09iamVjdCA9IGpzQ2FzdDxTdHJ1Y3R1cmVSYXJlRGF0YSo+KGNlbGwp
OwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAg
LTg2LDYgKzg3LDggQEAgdm9pZCBTdHJ1Y3R1cmVSYXJlRGF0YTo6dmlzaXRDaGlsZHJlbihKUwog
ICAgIH0KIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKFN0cnVjdHVyZVJhcmVEYXRhKTsKKwog
Ly8gLS0tLS0tLS0tLS0gQ2FjaGVkIHNwZWNpYWwgcHJvcGVydGllcyBoZWxwZXIgd2F0Y2hwb2lu
dCBjbGFzc2VzIC0tLS0tLS0tLS0tCiAKIGNsYXNzIENhY2hlZFNwZWNpYWxQcm9wZXJ0eUFkYXB0
aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludCBmaW5hbCA6IHB1YmxpYyBBZGFwdGl2
ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnRCYXNlIHsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZVJhcmVEYXRhLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlUmFyZURhdGEuaAkocmV2aXNpb24g
MjcyNzY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlUmFyZURh
dGEuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY4LDcgKzY4LDcgQEAgcHVibGljOgogICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBuZWVkc0Rlc3RydWN0aW9uID0gdHJ1ZTsKICAgICBzdGF0aWMgdm9p
ZCBkZXN0cm95KEpTQ2VsbCopOwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0Nl
bGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBz
dGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpT
VmFsdWUgcHJvdG90eXBlKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U3ltYm9sVGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1N5bWJvbFRhYmxlLmNwcAkocmV2aXNpb24gMjcyNzY5KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtOTIsNyAr
OTIsOCBAQCB2b2lkIFN5bWJvbFRhYmxlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCiAgICAgQmFz
ZTo6ZmluaXNoQ3JlYXRpb24odm0pOwogfQogCi12b2lkIFN5bWJvbFRhYmxlOjp2aXNpdENoaWxk
cmVuKEpTQ2VsbCogdGhpc0NlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlw
ZW5hbWUgVmlzaXRvcj4KK3ZvaWQgU3ltYm9sVGFibGU6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2Vs
bCogdGhpc0NlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgU3ltYm9sVGFibGUqIHRoaXNT
eW1ib2xUYWJsZSA9IGpzQ2FzdDxTeW1ib2xUYWJsZSo+KHRoaXNDZWxsKTsKICAgICBBU1NFUlRf
R0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNTeW1ib2xUYWJsZSwgaW5mbygpKTsKQEAgLTEwOCw2ICsx
MDksOCBAQCB2b2lkIFN5bWJvbFRhYmxlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogCiAgICAgdGhp
c1N5bWJvbFRhYmxlLT5tX2xvY2FsVG9FbnRyeSA9IG51bGxwdHI7CiB9CiAKK0RFRklORV9WSVNJ
VF9DSElMRFJFTihTeW1ib2xUYWJsZSk7CisKIGNvbnN0IFN5bWJvbFRhYmxlOjpMb2NhbFRvRW50
cnlWZWMmIFN5bWJvbFRhYmxlOjpsb2NhbFRvRW50cnkoY29uc3QgQ29uY3VycmVudEpTTG9ja2Vy
JikKIHsKICAgICBpZiAoVU5MSUtFTFkoIW1fbG9jYWxUb0VudHJ5KSkgewpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFibGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TeW1ib2xUYWJsZS5oCShyZXZpc2lvbiAyNzI3Njkp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TeW1ib2xUYWJsZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNy0yMDIwIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtNzMzLDcgKzczMyw3IEBAIHB1YmxpYzoKICAgICAgICAgbV9zaW5nbGV0b24u
bm90aWZ5V3JpdGUodm0sIHRoaXMsIHNjb3BlLCByZWFzb24pOwogICAgIH0KIAotICAgIHN0YXRp
YyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJF
X1ZJU0lUX0NISUxEUkVOOwogCiAgICAgREVDTEFSRV9FWFBPUlRfSU5GTzsKIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZVByb2ZpbGVyTG9nLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlUHJvZmlsZXJMb2cuY3BwCShy
ZXZpc2lvbiAyNzI3NjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlUHJv
ZmlsZXJMb2cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxNC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTI0LDcgKzEyNCw3IEBAIHZvaWQgVHlw
ZVByb2ZpbGVyTG9nOjpwcm9jZXNzTG9nRW50cmllcygKICAgICB9CiB9CiAKLXZvaWQgVHlwZVBy
b2ZpbGVyTG9nOjp2aXNpdChTbG90VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgVHlwZVByb2ZpbGVy
TG9nOjp2aXNpdChBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGZvciAoTG9n
RW50cnkqIGVudHJ5ID0gbV9sb2dTdGFydFB0cjsgZW50cnkgIT0gbV9jdXJyZW50TG9nRW50cnlQ
dHI7ICsrZW50cnkpIHsKICAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZChlbnRyeS0+
dmFsdWUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZVByb2ZpbGVy
TG9nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZVBy
b2ZpbGVyTG9nLmgJKHJldmlzaW9uIDI3Mjc2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1R5cGVQcm9maWxlckxvZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU5LDcgKzU5LDcgQEAgcHVi
bGljOgogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgcHJvY2Vzc0xvZ0VudHJpZXMoVk0mLCBj
b25zdCBTdHJpbmcmKTsKICAgICBMb2dFbnRyeSogbG9nRW5kUHRyKCkgY29uc3QgeyByZXR1cm4g
bV9sb2dFbmRQdHI7IH0KIAotICAgIHZvaWQgdmlzaXQoU2xvdFZpc2l0b3ImKTsKKyAgICB2b2lk
IHZpc2l0KEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKIAogICAgIHN0YXRpYyBwdHJkaWZmX3QgbG9n
U3RhcnRPZmZzZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoVHlwZVByb2ZpbGVyTG9nLCBt
X2xvZ1N0YXJ0UHRyKTsgfQogICAgIHN0YXRpYyBwdHJkaWZmX3QgY3VycmVudExvZ0VudHJ5T2Zm
c2V0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFR5cGVQcm9maWxlckxvZywgbV9jdXJyZW50
TG9nRW50cnlQdHIpOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHJldmlz
aW9uIDI3Mjc2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMjAg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIw
MjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0xMjEsNiArMTIxLDcgQEAgY2xhc3MgRmFzdE1hbGxvY0FsaWduZWRNZW1v
cnlBbGxvY2F0b3I7CiBjbGFzcyBHaWdhY2FnZUFsaWduZWRNZW1vcnlBbGxvY2F0b3I7CiBjbGFz
cyBIYW5kbGVTdGFjazsKIGNsYXNzIEhhc093blByb3BlcnR5Q2FjaGU7CitjbGFzcyBIZWFwQW5h
bHl6ZXI7CiBjbGFzcyBIZWFwUHJvZmlsZXI7CiBjbGFzcyBJZGVudGlmaWVyOwogY2xhc3MgSW50
ZXJwcmV0ZXI7CkBAIC0zMTAsNiArMzExLDEwIEBAIHB1YmxpYzoKICAgICBIZWFwUHJvZmlsZXIq
IGhlYXBQcm9maWxlcigpIGNvbnN0IHsgcmV0dXJuIG1faGVhcFByb2ZpbGVyLmdldCgpOyB9CiAg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgSGVhcFByb2ZpbGVyJiBlbnN1cmVIZWFwUHJvZmlsZXIoKTsK
IAorICAgIGJvb2wgaXNBbmFseXppbmdIZWFwKCkgY29uc3QgeyByZXR1cm4gbV9hY3RpdmVIZWFw
QW5hbHl6ZXI7IH0KKyAgICBIZWFwQW5hbHl6ZXIqIGFjdGl2ZUhlYXBBbmFseXplcigpIGNvbnN0
IHsgcmV0dXJuIG1fYWN0aXZlSGVhcEFuYWx5emVyOyB9CisgICAgdm9pZCBzZXRBY3RpdmVIZWFw
QW5hbHl6ZXIoSGVhcEFuYWx5emVyKiBhbmFseXplcikgeyBtX2FjdGl2ZUhlYXBBbmFseXplciA9
IGFuYWx5emVyOyB9CisKICNpZiBFTkFCTEUoU0FNUExJTkdfUFJPRklMRVIpCiAgICAgU2FtcGxp
bmdQcm9maWxlciogc2FtcGxpbmdQcm9maWxlcigpIHsgcmV0dXJuIG1fc2FtcGxpbmdQcm9maWxl
ci5nZXQoKTsgfQogICAgIEpTX0VYUE9SVF9QUklWQVRFIFNhbXBsaW5nUHJvZmlsZXImIGVuc3Vy
ZVNhbXBsaW5nUHJvZmlsZXIoUmVmPFN0b3B3YXRjaD4mJik7CkBAIC0xMTk1LDkgKzEyMDAsMTAg
QEAgcHVibGljOgogICAgIGJvb2wgZGlkRW50ZXJWTSB7IGZhbHNlIH07CiBwcml2YXRlOgogICAg
IGJvb2wgbV9mYWlsTmV4dE5ld0NvZGVCbG9jayB7IGZhbHNlIH07Ci0gICAgRGVsZXRlUHJvcGVy
dHlNb2RlIG1fZGVsZXRlUHJvcGVydHlNb2RlIHsgRGVsZXRlUHJvcGVydHlNb2RlOjpEZWZhdWx0
IH07CiAgICAgYm9vbCBtX2dsb2JhbENvbnN0UmVkZWNsYXJhdGlvblNob3VsZFRocm93IHsgdHJ1
ZSB9OwogICAgIGJvb2wgbV9zaG91bGRCdWlsZFBDVG9Db2RlT3JpZ2luTWFwcGluZyB7IGZhbHNl
IH07CisgICAgRGVsZXRlUHJvcGVydHlNb2RlIG1fZGVsZXRlUHJvcGVydHlNb2RlIHsgRGVsZXRl
UHJvcGVydHlNb2RlOjpEZWZhdWx0IH07CisgICAgSGVhcEFuYWx5emVyKiBtX2FjdGl2ZUhlYXBB
bmFseXplciB7IG51bGxwdHIgfTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q29kZUNhY2hlPiBtX2Nv
ZGVDYWNoZTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SW50bENhY2hlPiBtX2ludGxDYWNoZTsKICAg
ICBzdGQ6OnVuaXF1ZV9wdHI8QnVpbHRpbkV4ZWN1dGFibGVzPiBtX2J1aWx0aW5FeGVjdXRhYmxl
czsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtNYXBJbXBsLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9XZWFrTWFwSW1wbC5j
cHAJKHJldmlzaW9uIDI3Mjc2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dl
YWtNYXBJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29w
eXJpZ2h0IChDKSAyMDE3IFl1c3VrZSBTdXp1a2kgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4uCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CkBAIC0zOSw4ICszOSw5IEBAIHZvaWQgV2Vha01hcEltcGw8V2Vha01h
cEJ1Y2tldD46OmRlc3Ryb3kKICAgICBzdGF0aWNfY2FzdDxXZWFrTWFwSW1wbCo+KGNlbGwpLT5+
V2Vha01hcEltcGwoKTsKIH0KIAotdGVtcGxhdGUgPHR5cGVuYW1lIFdlYWtNYXBCdWNrZXQ+Ci12
b2lkIFdlYWtNYXBJbXBsPFdlYWtNYXBCdWNrZXQ+Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2Vs
bCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBXZWFrTWFwQnVja2V0
PgordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgV2Vha01hcEltcGw8V2Vha01hcEJ1
Y2tldD46OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikK
IHsKICAgICBXZWFrTWFwSW1wbCogdGhpc09iamVjdCA9IGpzQ2FzdDxXZWFrTWFwSW1wbCo+KGNl
bGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsK
QEAgLTQ4LDYgKzQ5LDggQEAgdm9pZCBXZWFrTWFwSW1wbDxXZWFrTWFwQnVja2V0Pjo6dmlzaXRD
aAogICAgIHZpc2l0b3IucmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKHRoaXNPYmplY3QtPm1fY2Fw
YWNpdHkgKiBzaXplb2YoV2Vha01hcEJ1Y2tldCkpOwogfQogCitERUZJTkVfVEVNUExBVEVfVklT
SVRfQ0hJTERSRU4odGVtcGxhdGU8dHlwZW5hbWUgV2Vha01hcEJ1Y2tldD4sIFdlYWtNYXBJbXBs
PFdlYWtNYXBCdWNrZXQ+KTsKKwogdGVtcGxhdGUgPHR5cGVuYW1lIFdlYWtNYXBCdWNrZXQ+CiBz
aXplX3QgV2Vha01hcEltcGw8V2Vha01hcEJ1Y2tldD46OmVzdGltYXRlZFNpemUoSlNDZWxsKiBj
ZWxsLCBWTSYgdm0pCiB7CkBAIC01NiwxNSArNTksMTQgQEAgc2l6ZV90IFdlYWtNYXBJbXBsPFdl
YWtNYXBCdWNrZXQ+Ojplc3RpbQogfQogCiB0ZW1wbGF0ZSA8Pgotdm9pZCBXZWFrTWFwSW1wbDxX
ZWFrTWFwQnVja2V0PFdlYWtNYXBCdWNrZXREYXRhS2V5Pj46OnZpc2l0T3V0cHV0Q29uc3RyYWlu
dHMoSlNDZWxsKiwgU2xvdFZpc2l0b3ImKQordm9pZCBXZWFrTWFwSW1wbDxXZWFrTWFwQnVja2V0
PFdlYWtNYXBCdWNrZXREYXRhS2V5Pj46OnZpc2l0T3V0cHV0Q29uc3RyYWludHMoSlNDZWxsKiwg
QWJzdHJhY3RTbG90VmlzaXRvciYpCiB7CiAgICAgLy8gT25seSBKU1dlYWtNYXAgbmVlZHMgdG8g
aGFydmVzdCB2YWx1ZSByZWZlcmVuY2VzCiB9CiAKIHRlbXBsYXRlIDw+Ci12b2lkIFdlYWtNYXBJ
bXBsPFdlYWtNYXBCdWNrZXQ8V2Vha01hcEJ1Y2tldERhdGFLZXlWYWx1ZT4+Ojp2aXNpdE91dHB1
dENvbnN0cmFpbnRzKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIFdl
YWtNYXBJbXBsPFdlYWtNYXBCdWNrZXQ8V2Vha01hcEJ1Y2tldERhdGFLZXlWYWx1ZT4+Ojp2aXNp
dE91dHB1dENvbnN0cmFpbnRzKEpTQ2VsbCogY2VsbCwgQWJzdHJhY3RTbG90VmlzaXRvciYgdmlz
aXRvcikKIHsKLSAgICBWTSYgdm0gPSB2aXNpdG9yLnZtKCk7CiAgICAgYXV0byogdGhpc09iamVj
dCA9IGpzQ2FzdDxXZWFrTWFwSW1wbCo+KGNlbGwpOwogICAgIGF1dG8gbG9ja2VyID0gaG9sZExv
Y2sodGhpc09iamVjdC0+Y2VsbExvY2soKSk7CiAgICAgYXV0byogYnVmZmVyID0gdGhpc09iamVj
dC0+YnVmZmVyKCk7CkBAIC03Miw3ICs3NCw3IEBAIHZvaWQgV2Vha01hcEltcGw8V2Vha01hcEJ1
Y2tldDxXZWFrTWFwQnUKICAgICAgICAgYXV0byogYnVja2V0ID0gYnVmZmVyICsgaW5kZXg7CiAg
ICAgICAgIGlmIChidWNrZXQtPmlzRW1wdHkoKSB8fCBidWNrZXQtPmlzRGVsZXRlZCgpKQogICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlmICghdm0uaGVhcC5pc01hcmtlZChidWNrZXQt
PmtleSgpKSkKKyAgICAgICAgaWYgKCF2aXNpdG9yLmlzTWFya2VkKGJ1Y2tldC0+a2V5KCkpKQog
ICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIGJ1Y2tldC0+dmlzaXRBZ2dyZWdhdGUodmlz
aXRvcik7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha01h
cEltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9XZWFr
TWFwSW1wbC5oCShyZXZpc2lvbiAyNzI3NjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9XZWFrTWFwSW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqIENvcHlyaWdodCAoQykgMjAxNyBZdXN1a2UgU3V6dWtpIDx1dGF0YW5lLnRlYUBnbWFp
bC5jb20+LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMTQ1LDcgKzE0NSw3IEBAIHB1YmxpYzoKICAg
ICB9CiAKICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVCA9IERhdGE+Ci0gICAgQUxXQVlTX0lOTElO
RSB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8VCwgV2Vha01hcEJ1Y2tldERh
dGFLZXlWYWx1ZT46OnZhbHVlPjo6dHlwZSB2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYgdmlz
aXRvcikKKyAgICBBTFdBWVNfSU5MSU5FIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNf
c2FtZTxULCBXZWFrTWFwQnVja2V0RGF0YUtleVZhbHVlPjo6dmFsdWU+Ojp0eXBlIHZpc2l0QWdn
cmVnYXRlKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiAgICAgewogICAgICAgICB2aXNp
dG9yLmFwcGVuZChtX2RhdGEudmFsdWUpOwogICAgIH0KQEAgLTIwMiw3ICsyMDIsNyBAQCBwdWJs
aWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOwog
ICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNp
dENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9URU1QTEFURV9W
SVNJVF9DSElMRFJFTjsKIAogICAgIHN0YXRpYyBzaXplX3QgZXN0aW1hdGVkU2l6ZShKU0NlbGwq
LCBWTSYpOwogCkBAIC0zMTEsNyArMzExLDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gdm0u
d2Vha1NldFNwYWNlPG1vZGU+KCk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRPdXRw
dXRDb25zdHJhaW50cyhKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIHN0YXRpYyB2b2lkIHZp
c2l0T3V0cHV0Q29uc3RyYWludHMoSlNDZWxsKiwgQWJzdHJhY3RTbG90VmlzaXRvciYpOwogICAg
IHZvaWQgZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoVk0mKTsKIAogcHJpdmF0ZToKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9KU0RvbGxhclZNLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvSlNEb2xsYXJWTS5jcHAJKHJldmlzaW9uIDI3Mjc2
OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9KU0RvbGxhclZNLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTIyNCwxNCArMjI0LDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBmaW5pc2hD
cmVhdGlvbihWTSYsIFJvb3QqKTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlND
ZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKLSAgICB7Ci0gICAgICAgIERvbGxhclZN
QXNzZXJ0U2NvcGUgYXNzZXJ0U2NvcGU7Ci0gICAgICAgIEVsZW1lbnQqIHRoaXNPYmplY3QgPSBq
c0Nhc3Q8RWxlbWVudCo+KGNlbGwpOwotICAgICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRT
KHRoaXNPYmplY3QsIGluZm8oKSk7Ci0gICAgICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09i
amVjdCwgdmlzaXRvcik7Ci0gICAgICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fcm9v
dCk7Ci0gICAgfQorICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBzdGF0aWMgRWxl
bWVudEhhbmRsZU93bmVyKiBoYW5kbGVPd25lcigpOwogCkBAIC0yNDcsMTAgKzI0MCwyMiBAQCBw
cml2YXRlOgogICAgIFdyaXRlQmFycmllcjxSb290PiBtX3Jvb3Q7CiB9OwogCit0ZW1wbGF0ZTx0
eXBlbmFtZSBWaXNpdG9yPgordm9pZCBFbGVtZW50Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwq
IGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgRG9sbGFyVk1Bc3NlcnRTY29wZSBhc3Nl
cnRTY29wZTsKKyAgICBFbGVtZW50KiB0aGlzT2JqZWN0ID0ganNDYXN0PEVsZW1lbnQqPihjZWxs
KTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7Cisg
ICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKKyAgICB2aXNpdG9y
LmFwcGVuZCh0aGlzT2JqZWN0LT5tX3Jvb3QpOworfQorCitERUZJTkVfVklTSVRfQ0hJTERSRU4o
RWxlbWVudCk7CisKIGNsYXNzIEVsZW1lbnRIYW5kbGVPd25lciBmaW5hbCA6IHB1YmxpYyBXZWFr
SGFuZGxlT3duZXIgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAg
IGJvb2wgaXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3du
PiBoYW5kbGUsIHZvaWQqLCBTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNv
bikgZmluYWwKKyAgICBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxl
PEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRv
ciwgY29uc3QgY2hhcioqIHJlYXNvbikgZmluYWwKICAgICB7CiAgICAgICAgIERvbGxhclZNQXNz
ZXJ0U2NvcGUgYXNzZXJ0U2NvcGU7CiAgICAgICAgIGlmIChVTkxJS0VMWShyZWFzb24pKQpAQCAt
MzA0LDE4ICszMDksMjMgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVh
dGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1
Y3R1cmVGbGFncyksIGluZm8oKSk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGls
ZHJlbihKU0NlbGwqIHRoaXNPYmplY3QsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQotICAgIHsKLSAg
ICAgICAgRG9sbGFyVk1Bc3NlcnRTY29wZSBhc3NlcnRTY29wZTsKLSAgICAgICAgQVNTRVJUX0dD
X09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwotICAgICAgICBCYXNlOjp2aXNp
dENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwotICAgICAgICB2aXNpdG9yLmFkZE9wYXF1
ZVJvb3QodGhpc09iamVjdCk7Ci0gICAgfQorICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAK
IHByaXZhdGU6CiAgICAgV2VhazxFbGVtZW50PiBtX2VsZW1lbnQ7CiB9OwogCit0ZW1wbGF0ZTx0
eXBlbmFtZSBWaXNpdG9yPgordm9pZCBSb290Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIHRo
aXNPYmplY3QsIFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgRG9sbGFyVk1Bc3NlcnRTY29wZSBh
c3NlcnRTY29wZTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGlu
Zm8oKSk7CisgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKKyAg
ICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QodGhpc09iamVjdCk7Cit9CisKK0RFRklORV9WSVNJVF9D
SElMRFJFTihSb290KTsKKwogY2xhc3MgU2ltcGxlT2JqZWN0IDogcHVibGljIEpTTm9uRmluYWxP
YmplY3QgewogcHVibGljOgogICAgIFNpbXBsZU9iamVjdChWTSYgdm0sIFN0cnVjdHVyZSogc3Ry
dWN0dXJlKQpAQCAtMzQwLDE0ICszNTAsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBzaW1w
bGVPYmplY3Q7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwq
IGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQotICAgIHsKLSAgICAgICAgRG9sbGFyVk1Bc3Nl
cnRTY29wZSBhc3NlcnRTY29wZTsKLSAgICAgICAgU2ltcGxlT2JqZWN0KiB0aGlzT2JqZWN0ID0g
anNDYXN0PFNpbXBsZU9iamVjdCo+KGNlbGwpOwotICAgICAgICBBU1NFUlRfR0NfT0JKRUNUX0lO
SEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7Ci0gICAgICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4o
dGhpc09iamVjdCwgdmlzaXRvcik7Ci0gICAgICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3Qt
Pm1faGlkZGVuVmFsdWUpOwotICAgIH0KKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAg
ICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCiAgICAgewpAQCAtMzgwLDYgKzM4
MywxOCBAQCBwcml2YXRlOgogICAgIFdyaXRlQmFycmllcjxKU0M6OlVua25vd24+IG1faGlkZGVu
VmFsdWU7CiB9OwogCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBTaW1wbGVPYmpl
Y3Q6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKK3sK
KyAgICBEb2xsYXJWTUFzc2VydFNjb3BlIGFzc2VydFNjb3BlOworICAgIFNpbXBsZU9iamVjdCog
dGhpc09iamVjdCA9IGpzQ2FzdDxTaW1wbGVPYmplY3QqPihjZWxsKTsKKyAgICBBU1NFUlRfR0Nf
T0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CisgICAgQmFzZTo6dmlzaXRDaGls
ZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKKyAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0
LT5tX2hpZGRlblZhbHVlKTsKK30KKworREVGSU5FX1ZJU0lUX0NISUxEUkVOKFNpbXBsZU9iamVj
dCk7CisKIGNsYXNzIEltcHVyZUdldHRlciA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKIHB1
YmxpYzoKICAgICBJbXB1cmVHZXR0ZXIoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKQEAg
LTQzNiwxNCArNDUxLDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gQmFzZTo6Z2V0T3duUHJv
cGVydHlTbG90KG9iamVjdCwgZ2xvYmFsT2JqZWN0LCBuYW1lLCBzbG90KTsKICAgICB9CiAKLSAg
ICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZp
c2l0b3IpCi0gICAgewotICAgICAgICBEb2xsYXJWTUFzc2VydFNjb3BlIGFzc2VydFNjb3BlOwot
ICAgICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNlbGwsIGluZm8oKSk7Ci0gICAgICAg
IEJhc2U6OnZpc2l0Q2hpbGRyZW4oY2VsbCwgdmlzaXRvcik7Ci0gICAgICAgIEltcHVyZUdldHRl
ciogdGhpc09iamVjdCA9IGpzQ2FzdDxJbXB1cmVHZXR0ZXIqPihjZWxsKTsKLSAgICAgICAgdmlz
aXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9kZWxlZ2F0ZSk7Ci0gICAgfQorICAgIERFQ0xBUkVf
VklTSVRfQ0hJTERSRU47CiAKICAgICB2b2lkIHNldERlbGVnYXRlKFZNJiB2bSwgSlNPYmplY3Qq
IGRlbGVnYXRlKQogICAgIHsKQEAgLTQ1NCw2ICs0NjIsMTggQEAgcHJpdmF0ZToKICAgICBXcml0
ZUJhcnJpZXI8SlNPYmplY3Q+IG1fZGVsZWdhdGU7CiB9OwogCit0ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPgordm9pZCBJbXB1cmVHZXR0ZXI6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2Vs
bCwgVmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBEb2xsYXJWTUFzc2VydFNjb3BlIGFzc2VydFNj
b3BlOworICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2VsbCwgaW5mbygpKTsKKyAgICBC
YXNlOjp2aXNpdENoaWxkcmVuKGNlbGwsIHZpc2l0b3IpOworICAgIEltcHVyZUdldHRlciogdGhp
c09iamVjdCA9IGpzQ2FzdDxJbXB1cmVHZXR0ZXIqPihjZWxsKTsKKyAgICB2aXNpdG9yLmFwcGVu
ZCh0aGlzT2JqZWN0LT5tX2RlbGVnYXRlKTsKK30KKworREVGSU5FX1ZJU0lUX0NISUxEUkVOKElt
cHVyZUdldHRlcik7CisKIHN0YXRpYyBKU0NfREVDTEFSRV9DVVNUT01fR0VUVEVSKGN1c3RvbUdl
dHRlclZhbHVlR2V0dGVyKTsKIHN0YXRpYyBKU0NfREVDTEFSRV9DVVNUT01fR0VUVEVSKGN1c3Rv
bUdldHRlckFjZXNzb3JHZXR0ZXIpOwogCkBAIC0xODIyLDE0ICsxODQyLDcgQEAgcHVibGljOgog
ICAgICAgICBwdXREaXJlY3ROYXRpdmVGdW5jdGlvbih2bSwgZ2xvYmFsT2JqZWN0LCBJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKHZtLCAiYWRkQnl0ZXMiKSwgMCwgZnVuY3Rpb25XYXNtU3RyZWFtaW5n
Q29tcGlsZXJBZGRCeXRlcywgTm9JbnRyaW5zaWMsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9w
ZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pKTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNp
dENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCi0gICAgewotICAg
ICAgICBEb2xsYXJWTUFzc2VydFNjb3BlIGFzc2VydFNjb3BlOwotICAgICAgICBhdXRvKiB0aGlz
T2JqZWN0ID0ganNDYXN0PFdhc21TdHJlYW1pbmdDb21waWxlcio+KGNlbGwpOwotICAgICAgICBB
U1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7Ci0gICAgICAgIEJh
c2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7Ci0gICAgICAgIHZpc2l0b3Iu
YXBwZW5kKHRoaXNPYmplY3QtPm1fcHJvbWlzZSk7Ci0gICAgfQorICAgIERFQ0xBUkVfVklTSVRf
Q0hJTERSRU47CiAKICAgICBERUNMQVJFX0lORk87CiAKQEAgLTE4MzcsNiArMTg1MCwxOCBAQCBw
dWJsaWM6CiAgICAgUmVmPFdhc206OlN0cmVhbWluZ0NvbXBpbGVyPiBtX3N0cmVhbWluZ0NvbXBp
bGVyOwogfTsKIAordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgV2FzbVN0cmVhbWlu
Z0NvbXBpbGVyOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0
b3IpCit7CisgICAgRG9sbGFyVk1Bc3NlcnRTY29wZSBhc3NlcnRTY29wZTsKKyAgICBhdXRvKiB0
aGlzT2JqZWN0ID0ganNDYXN0PFdhc21TdHJlYW1pbmdDb21waWxlcio+KGNlbGwpOworICAgIEFT
U0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKKyAgICBCYXNlOjp2
aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOworICAgIHZpc2l0b3IuYXBwZW5kKHRo
aXNPYmplY3QtPm1fcHJvbWlzZSk7Cit9CisKK0RFRklORV9WSVNJVF9DSElMRFJFTihXYXNtU3Ry
ZWFtaW5nQ29tcGlsZXIpOworCiBjb25zdCBDbGFzc0luZm8gV2FzbVN0cmVhbWluZ0NvbXBpbGVy
OjpzX2luZm8gPSB7ICJXYXNtU3RyZWFtaW5nQ29tcGlsZXIiLCAmQmFzZTo6c19pbmZvLCBudWxs
cHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKFdhc21TdHJlYW1pbmdDb21waWxlcikg
fTsKIAogSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGZ1bmN0aW9uV2FzbVN0cmVhbWluZ0NvbXBp
bGVyQWRkQnl0ZXMsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNh
bGxGcmFtZSkpCkBAIC0zNjk5LDEzICszNzI0LDE2IEBAIHZvaWQgSlNEb2xsYXJWTTo6YWRkQ29u
c3RydWN0aWJsZUZ1bmN0aW8KICAgICBwdXREaXJlY3Qodm0sIGlkZW50aWZpZXIsIEpTRnVuY3Rp
b246OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBhcmd1bWVudHMsIGlkZW50aWZpZXIuc3RyaW5n
KCksIGZ1bmN0aW9uLCBOb0ludHJpbnNpYywgZnVuY3Rpb24pLCBqc0RvbGxhclZNUHJvcGVydHlB
dHRyaWJ1dGVzKTsKIH0KIAotdm9pZCBKU0RvbGxhclZNOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCog
Y2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgor
dm9pZCBKU0RvbGxhclZNOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3Im
IHZpc2l0b3IpCiB7CiAgICAgSlNEb2xsYXJWTSogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0RvbGxh
clZNKj4oY2VsbCk7CiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9y
KTsKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX29iamVjdERvaW5nU2lkZUVmZmVj
dFB1dFdpdGhvdXRDb3JyZWN0U2xvdFN0YXR1c1N0cnVjdHVyZSk7CiB9CiAKK0RFRklORV9WSVNJ
VF9DSElMRFJFTihKU0RvbGxhclZNKTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKIElHTk9SRV9X
QVJOSU5HU19FTkQKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9KU0RvbGxhclZN
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0pTRG9sbGFyVk0u
aAkocmV2aXNpb24gMjcyNzY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0pTRG9s
bGFyVk0uaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTUtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTUtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTc0LDcgKzc0LDcgQEAgcHJpdmF0ZToKICAgICB2
b2lkIGFkZEZ1bmN0aW9uKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBjb25zdCBjaGFyKiBuYW1lLCBO
YXRpdmVGdW5jdGlvbiwgdW5zaWduZWQgYXJndW1lbnRzKTsKICAgICB2b2lkIGFkZENvbnN0cnVj
dGlibGVGdW5jdGlvbihWTSYsIEpTR2xvYmFsT2JqZWN0KiwgY29uc3QgY2hhciogbmFtZSwgTmF0
aXZlRnVuY3Rpb24sIHVuc2lnbmVkIGFyZ3VtZW50cyk7CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNp
dENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElM
RFJFTjsKIAogICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1fb2JqZWN0RG9pbmdTaWRlRWZm
ZWN0UHV0V2l0aG91dENvcnJlY3RTbG90U3RhdHVzU3RydWN0dXJlOwogfTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21HbG9iYWwuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21HbG9iYWwuY3BwCShyZXZpc2lvbiAyNzI3NjkpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtR2xvYmFsLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE5LTIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0xMDMsNyArMTAzLDggQEAgdm9pZCBHbG9iYWw6OnNldChKU0dsb2JhbE9iamVjdCogZ2xvYmFs
TwogICAgIH0KIH0KIAotdm9pZCBHbG9iYWw6OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgR2xvYmFsOjp2aXNpdEFn
Z3JlZ2F0ZShWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHN3aXRjaCAobV90eXBlKSB7CiAgICAg
Y2FzZSBXYXNtOjpUeXBlOjpFeHRlcm5yZWY6CkBAIC0xMTcsNiArMTE4LDkgQEAgdm9pZCBHbG9i
YWw6OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJgogICAgIH0KIH0KIAordGVtcGxhdGUgdm9p
ZCBHbG9iYWw6OnZpc2l0QWdncmVnYXRlKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRl
IHZvaWQgR2xvYmFsOjp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYpOworCiB9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6R2xvYmFsCiAKICNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtR2xvYmFsLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUdsb2JhbC5oCShyZXZpc2lvbiAyNzI3Njkp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtR2xvYmFsLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMTggQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC01Nyw3ICs1Nyw3IEBAIHB1YmxpYzoKICAgICBKU1ZhbHVlIGdldChKU0dsb2JhbE9i
amVjdCopIGNvbnN0OwogICAgIHVpbnQ2NF90IGdldFByaW1pdGl2ZSgpIGNvbnN0IHsgcmV0dXJu
IG1fdmFsdWUubV9wcmltaXRpdmU7IH0KICAgICB2b2lkIHNldChKU0dsb2JhbE9iamVjdCosIEpT
VmFsdWUpOwotICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImKTsKKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIHZpc2l0QWdncmVnYXRlKFZpc2l0b3ImKTsKIAog
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IFQqIG93bmVyKCkgY29uc3QgeyByZXR1cm4gcmVpbnRl
cnByZXRfY2FzdDxUKj4obV9vd25lcik7IH0KICAgICB2b2lkIHNldE93bmVyKEpTT2JqZWN0KiBv
d25lcikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UYWJsZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRhYmxlLmNwcAkocmV2
aXNpb24gMjcyNzY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRhYmxlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTctMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTE2Niw3ICsxNjYsOCBAQCBKU1ZhbHVlIFRhYmxlOjpnZXQo
dWludDMyX3QgaW5kZXgpIGNvbnN0CiAgICAgcmV0dXJuIG1fanNWYWx1ZXMuZ2V0KClbaW5kZXgg
JiBtX21hc2tdLmdldCgpOwogfQogCi12b2lkIFRhYmxlOjp2aXNpdEFnZ3JlZ2F0ZShTbG90Vmlz
aXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFRhYmxlOjp2
aXNpdEFnZ3JlZ2F0ZShWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFJFTEVBU0VfQVNTRVJUKG1f
b3duZXIpOwogICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9vd25lci0+Y2VsbExvY2soKSk7
CkBAIC0xNzQsNiArMTc1LDkgQEAgdm9pZCBUYWJsZTo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0
b3ImIAogICAgICAgICB2aXNpdG9yLmFwcGVuZChtX2pzVmFsdWVzLmdldCgpW2ldKTsKIH0KIAor
dGVtcGxhdGUgdm9pZCBUYWJsZTo6dmlzaXRBZ2dyZWdhdGUoQWJzdHJhY3RTbG90VmlzaXRvciYp
OwordGVtcGxhdGUgdm9pZCBUYWJsZTo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImKTsKKwog
VHlwZSBUYWJsZTo6d2FzbVR5cGUoKSBjb25zdAogewogICAgIGlmIChpc0V4dGVybnJlZlRhYmxl
KCkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGFibGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGFibGUuaAkocmV2aXNpb24g
MjcyNzY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRhYmxlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMTgg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIw
MjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC04MCw3ICs4MCw3IEBAIHB1YmxpYzoKICAgICBPcHRpb25hbDx1aW50MzJf
dD4gZ3Jvdyh1aW50MzJfdCBkZWx0YSwgSlNWYWx1ZSBkZWZhdWx0VmFsdWUpOwogICAgIHZvaWQg
Y29weShjb25zdCBUYWJsZSogc3JjVGFibGUsIHVpbnQzMl90IGRzdEluZGV4LCB1aW50MzJfdCBz
cmNJbmRleCk7CiAKLSAgICB2b2lkIHZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJik7CisgICAg
dGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCB2aXNpdEFnZ3JlZ2F0ZShWaXNpdG9yJik7
CiAKIHByb3RlY3RlZDoKICAgICBUYWJsZSh1aW50MzJfdCBpbml0aWFsLCBPcHRpb25hbDx1aW50
MzJfdD4gbWF4aW11bSwgVGFibGVFbGVtZW50VHlwZSA9IFRhYmxlRWxlbWVudFR5cGU6OkV4dGVy
bnJlZik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1RvV2FzbUlDQ2Fs
bGVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1Rv
V2FzbUlDQ2FsbGVlLmNwcAkocmV2aXNpb24gMjcyNzY5KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvSlNUb1dhc21JQ0NhbGxlZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDksNyArNDks
OCBAQCBTdHJ1Y3R1cmUqIEpTVG9XYXNtSUNDYWxsZWU6OmNyZWF0ZVN0cnVjCiAgICAgcmV0dXJu
IFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8o
SlNDYWxsZWVUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CiB9CiAKLXZvaWQgSlNUb1dh
c21JQ0NhbGxlZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNp
dG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNUb1dhc21JQ0NhbGxlZTo6
dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAg
IEpTVG9XYXNtSUNDYWxsZWUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUb1dhc21JQ0NhbGxlZSo+
KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygp
KTsKQEAgLTU4LDYgKzU5LDggQEAgdm9pZCBKU1RvV2FzbUlDQ2FsbGVlOjp2aXNpdENoaWxkcmVu
KEpTQwogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fZnVuY3Rpb24pOwogfQogCitE
RUZJTkVfVklTSVRfQ0hJTERSRU4oSlNUb1dhc21JQ0NhbGxlZSk7CisKIH0gLy8gbmFtZXNwYWNl
IEpTQwogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvSlNUb1dhc21JQ0NhbGxlZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTVG9XYXNtSUNDYWxsZWUuaAkocmV2aXNpb24gMjcy
NzY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNUb1dhc21JQ0NhbGxlZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
OSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkt
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTU2LDcgKzU2LDcgQEAgcHJpdmF0ZToKICAgICBKU1RvV2FzbUlDQ2Fs
bGVlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUpCiAgICAgICAgIDogQmFzZSh2bSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUpCiAgICAg
eyB9Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYp
OworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBXcml0ZUJhcnJpZXI8V2ViQXNz
ZW1ibHlGdW5jdGlvbj4gbV9mdW5jdGlvbjsKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmNwcAkocmV2
aXNpb24gMjcyNzY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3Nl
bWJseUNvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDE3LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC04Miw3ICs4Miw4IEBAIHZvaWQg
SlNXZWJBc3NlbWJseUNvZGVCbG9jazo6Y2xlYXJKU0NhbGwKICAgICAgICAgKCppdGVyKS0+dW5s
aW5rKHZtKTsKIH0KIAotdm9pZCBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrOjp2aXNpdENoaWxkcmVu
KEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPgordm9pZCBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrOjp2aXNpdENoaWxkcmVuSW1wbChK
U0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNXZWJBc3NlbWJseUNvZGVC
bG9jayogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKj4oY2VsbCk7
CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAt
OTAsNiArOTEsOCBAQCB2b2lkIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6OnZpc2l0Q2hpbGRyCiAg
ICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKIH0KIAorREVGSU5F
X1ZJU0lUX0NISUxEUkVOKEpTV2ViQXNzZW1ibHlDb2RlQmxvY2spOworCiB2b2lkIEpTV2ViQXNz
ZW1ibHlDb2RlQmxvY2s6OmZpbmFsaXplVW5jb25kaXRpb25hbGx5KFZNJiB2bSkKIHsKICAgICBm
b3IgKGF1dG8gaXRlciA9IG1fY2FsbExpbmtJbmZvcy5iZWdpbigpOyAhIWl0ZXI7ICsraXRlcikK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxv
Y2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFz
c2VtYmx5Q29kZUJsb2NrLmgJKHJldmlzaW9uIDI3Mjc2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTg2LDcgKzg2LDcgQEAgcHJpdmF0ZToKICAgICBERUNMQVJFX0VYUE9SVF9JTkZPOwogICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0Rlc3RydWN0aW9uID0gdHJ1ZTsKICAgICBzdGF0aWMg
dm9pZCBkZXN0cm95KEpTQ2VsbCopOwotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlND
ZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAg
UmVmPFdhc206OkNvZGVCbG9jaz4gbV9jb2RlQmxvY2s7CiAgICAgVmVjdG9yPE1hY3JvQXNzZW1i
bGVyQ29kZVJlZjxXYXNtRW50cnlQdHJUYWc+PiBtX3dhc21Ub0pTRXhpdFN0dWJzOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUdsb2JhbC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUds
b2JhbC5jcHAJKHJldmlzaW9uIDI3Mjc2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL0pTV2ViQXNzZW1ibHlHbG9iYWwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTcxLDcgKzcxLDggQEAg
dm9pZCBKU1dlYkFzc2VtYmx5R2xvYmFsOjpkZXN0cm95KEpTQ2VsbAogICAgIHN0YXRpY19jYXN0
PEpTV2ViQXNzZW1ibHlHbG9iYWwqPihjZWxsKS0+SlNXZWJBc3NlbWJseUdsb2JhbDo6fkpTV2Vi
QXNzZW1ibHlHbG9iYWwoKTsKIH0KIAotdm9pZCBKU1dlYkFzc2VtYmx5R2xvYmFsOjp2aXNpdENo
aWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBl
bmFtZSBWaXNpdG9yPgordm9pZCBKU1dlYkFzc2VtYmx5R2xvYmFsOjp2aXNpdENoaWxkcmVuSW1w
bChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNXZWJBc3NlbWJseUds
b2JhbCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1dlYkFzc2VtYmx5R2xvYmFsKj4oY2VsbCk7CiAg
ICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtODAs
NiArODEsOCBAQCB2b2lkIEpTV2ViQXNzZW1ibHlHbG9iYWw6OnZpc2l0Q2hpbGRyZW4oCiAgICAg
dGhpc09iamVjdC0+Z2xvYmFsKCktPnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOwogfQogCitERUZJ
TkVfVklTSVRfQ0hJTERSRU4oSlNXZWJBc3NlbWJseUdsb2JhbCk7CisKIH0gLy8gbmFtZXNwYWNl
IEpTQwogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUdsb2JhbC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlHbG9iYWwuaAkocmV2aXNp
b24gMjcyNzY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJs
eUdsb2JhbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTktMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU5LDcgKzU5LDcgQEAgcHVibGljOgogcHJpdmF0ZToK
ICAgICBKU1dlYkFzc2VtYmx5R2xvYmFsKFZNJiwgU3RydWN0dXJlKiwgUmVmPFdhc206Okdsb2Jh
bD4mJik7CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOwotICAgIHN0YXRpYyB2b2lkIHZp
c2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NI
SUxEUkVOOwogCiAgICAgUmVmPFdhc206Okdsb2JhbD4gbV9nbG9iYWw7CiB9OwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5z
dGFuY2UuY3BwCShyZXZpc2lvbiAyNzI3NjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNzMsNyAr
NzMsOCBAQCB2b2lkIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6ZGVzdHJveShKU0NlCiAgICAgc3Rh
dGljX2Nhc3Q8SlNXZWJBc3NlbWJseUluc3RhbmNlKj4oY2VsbCktPkpTV2ViQXNzZW1ibHlJbnN0
YW5jZTo6fkpTV2ViQXNzZW1ibHlJbnN0YW5jZSgpOwogfQogCi12b2lkIEpTV2ViQXNzZW1ibHlJ
bnN0YW5jZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9y
KQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNXZWJBc3NlbWJseUluc3RhbmNl
Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAg
ICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1dlYkFzc2VtYmx5SW5zdGFuY2UqPihjZWxs
KTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBA
IC0xMDIsNiArMTAzLDggQEAgdm9pZCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OnZpc2l0Q2hpbGRy
ZQogICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKHdyYXBwZXIuZ2V0KCkpOwogfQog
CitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNXZWJBc3NlbWJseUluc3RhbmNlKTsKKwogdm9pZCBK
U1dlYkFzc2VtYmx5SW5zdGFuY2U6OmZpbmFsaXplQ3JlYXRpb24oVk0mIHZtLCBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBSZWY8V2FzbTo6Q29kZUJsb2NrPiYmIHdhc21Db2RlQmxvY2ss
IEpTT2JqZWN0KiBpbXBvcnRPYmplY3QsIFdhc206OkNyZWF0aW9uTW9kZSBjcmVhdGlvbk1vZGUp
CiB7CiAgICAgbV9pbnN0YW5jZS0+ZmluYWxpemVDcmVhdGlvbih0aGlzLCB3YXNtQ29kZUJsb2Nr
LmNvcHlSZWYoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFz
c2VtYmx5SW5zdGFuY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuaAkocmV2aXNpb24gMjcyNzY5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTkgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0xMDUsNyArMTA1LDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBKU1dlYkFz
c2VtYmx5SW5zdGFuY2UoVk0mLCBTdHJ1Y3R1cmUqLCBSZWY8V2FzbTo6SW5zdGFuY2U+JiYpOwog
ICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBKU1dlYkFzc2VtYmx5TW9kdWxlKiwgV2ViQXNz
ZW1ibHlNb2R1bGVSZWNvcmQqKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2Vs
bCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIFJl
ZjxXYXNtOjpJbnN0YW5jZT4gbV9pbnN0YW5jZTsKICAgICBWTSogbV92bTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNZW1vcnkuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNZW1vcnku
Y3BwCShyZXZpc2lvbiAyNzI3NjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9K
U1dlYkFzc2VtYmx5TWVtb3J5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE1OSw3ICsxNTksOCBA
QCB2b2lkIEpTV2ViQXNzZW1ibHlNZW1vcnk6OmRlc3Ryb3koSlNDZWxsCiAgICAgbWVtb3J5LT5K
U1dlYkFzc2VtYmx5TWVtb3J5Ojp+SlNXZWJBc3NlbWJseU1lbW9yeSgpOwogfQogCi12b2lkIEpT
V2ViQXNzZW1ibHlNZW1vcnk6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRv
ciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTV2ViQXNzZW1i
bHlNZW1vcnk6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRv
cikKIHsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTV2ViQXNzZW1ibHlNZW1vcnkq
PihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8o
KSk7CkBAIC0xNjksNiArMTcwLDggQEAgdm9pZCBKU1dlYkFzc2VtYmx5TWVtb3J5Ojp2aXNpdENo
aWxkcmVuKAogICAgIHZpc2l0b3IucmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKHRoaXNPYmplY3Qt
Pm1lbW9yeSgpLnNpemUoKSk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU1dlYkFzc2Vt
Ymx5TWVtb3J5KTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBFTkFCTEUoV0VC
QVNTRU1CTFkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2Vt
Ymx5TWVtb3J5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
SlNXZWJBc3NlbWJseU1lbW9yeS5oCShyZXZpc2lvbiAyNzI3NjkpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TWVtb3J5LmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTkgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC02Myw3ICs2Myw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgSlNXZWJBc3NlbWJseU1lbW9y
eShWTSYsIFN0cnVjdHVyZSopOwogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKLSAgICBz
dGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVD
TEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIFJlZjxXYXNtOjpNZW1vcnk+IG1fbWVtb3J5Owog
ICAgIFdyaXRlQmFycmllcjxKU0FycmF5QnVmZmVyPiBtX2J1ZmZlcldyYXBwZXI7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9k
dWxlLmNwcAkocmV2aXNpb24gMjcyNzY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
anMvSlNXZWJBc3NlbWJseU1vZHVsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMjQsNyArMTI0
LDggQEAgdm9pZCBKU1dlYkFzc2VtYmx5TW9kdWxlOjpzZXRDb2RlQmxvY2soVgogICAgIG1fY29k
ZUJsb2Nrc1tzdGF0aWNfY2FzdDxzaXplX3Q+KG1vZGUpXS5zZXQodm0sIHRoaXMsIGNvZGVCbG9j
ayk7CiB9CiAKLXZvaWQgSlNXZWJBc3NlbWJseU1vZHVsZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwq
IGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4K
K3ZvaWQgSlNXZWJBc3NlbWJseU1vZHVsZTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxs
LCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTV2ViQXNzZW1ibHlNb2R1bGUqIHRoaXNPYmpl
Y3QgPSBqc0Nhc3Q8SlNXZWJBc3NlbWJseU1vZHVsZSo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19P
QkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTEzNSw2ICsxMzYsOCBAQCB2
b2lkIEpTV2ViQXNzZW1ibHlNb2R1bGU6OnZpc2l0Q2hpbGRyZW4oCiAgICAgICAgIHZpc2l0b3Iu
YXBwZW5kKHRoaXNPYmplY3QtPm1fY29kZUJsb2Nrc1tpXSk7CiB9CiAKK0RFRklORV9WSVNJVF9D
SElMRFJFTihKU1dlYkFzc2VtYmx5TW9kdWxlKTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNl
bmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5oCShyZXZpc2lvbiAyNzI3Njkp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2
LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC04MCw3ICs4MCw3IEBAIHByaXZhdGU6CiAKICAgICBKU1dlYkFz
c2VtYmx5TW9kdWxlKFZNJiwgU3RydWN0dXJlKiwgUmVmPFdhc206Ok1vZHVsZT4mJik7CiAgICAg
dm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOwotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4o
SlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAg
ICAgUmVmPFdhc206Ok1vZHVsZT4gbV9tb2R1bGU7CiAgICAgV3JpdGVCYXJyaWVyPFN5bWJvbFRh
YmxlPiBtX2V4cG9ydFN5bWJvbFRhYmxlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vanMvSlNXZWJBc3NlbWJseVRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5VGFibGUuY3BwCShyZXZpc2lvbiAyNzI3Njkp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5VGFibGUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
Ni0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtNzIsNyArNzIsOCBAQCB2b2lkIEpTV2ViQXNzZW1ibHlUYWJs
ZTo6ZGVzdHJveShKU0NlbGwqCiAgICAgc3RhdGljX2Nhc3Q8SlNXZWJBc3NlbWJseVRhYmxlKj4o
Y2VsbCktPkpTV2ViQXNzZW1ibHlUYWJsZTo6fkpTV2ViQXNzZW1ibHlUYWJsZSgpOwogfQogCi12
b2lkIEpTV2ViQXNzZW1ibHlUYWJsZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNXZWJB
c3NlbWJseVRhYmxlOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZp
c2l0b3IpCiB7CiAgICAgSlNXZWJBc3NlbWJseVRhYmxlKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpT
V2ViQXNzZW1ibHlUYWJsZSo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMo
dGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTgxLDYgKzgyLDggQEAgdm9pZCBKU1dlYkFzc2VtYmx5
VGFibGU6OnZpc2l0Q2hpbGRyZW4oSgogICAgIHRoaXNPYmplY3QtPnRhYmxlKCktPnZpc2l0QWdn
cmVnYXRlKHZpc2l0b3IpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNXZWJBc3NlbWJs
eVRhYmxlKTsKKwogYm9vbCBKU1dlYkFzc2VtYmx5VGFibGU6Omdyb3codWludDMyX3QgZGVsdGEs
IEpTVmFsdWUgZGVmYXVsdFZhbHVlKQogewogICAgIGlmIChkZWx0YSA9PSAwKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseVRhYmxlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseVRhYmxlLmgJ
KHJldmlzaW9uIDI3Mjc2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2Vi
QXNzZW1ibHlUYWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxNi0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNzAsNyArNzAsNyBAQCBwdWJsaWM6
CiBwcml2YXRlOgogICAgIEpTV2ViQXNzZW1ibHlUYWJsZShWTSYsIFN0cnVjdHVyZSosIFJlZjxX
YXNtOjpUYWJsZT4mJik7CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOwotICAgIHN0YXRp
YyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJF
X1ZJU0lUX0NISUxEUkVOOwogCiAgICAgUmVmPFdhc206OlRhYmxlPiBtX3RhYmxlOwogfTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5
RnVuY3Rpb24uY3BwCShyZXZpc2lvbiAyNzI3NjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ1Miw3
ICs0NTIsOCBAQCBXZWJBc3NlbWJseUZ1bmN0aW9uOjpXZWJBc3NlbWJseUZ1bmN0aW9uCiAgICAg
LCBtX2ltcG9ydGFibGVGdW5jdGlvbiB7IHNpZ25hdHVyZUluZGV4LCB3YXNtVG9XYXNtRW50cnlw
b2ludExvYWRMb2NhdGlvbiB9CiB7IH0KIAotdm9pZCBXZWJBc3NlbWJseUZ1bmN0aW9uOjp2aXNp
dENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0
eXBlbmFtZSBWaXNpdG9yPgordm9pZCBXZWJBc3NlbWJseUZ1bmN0aW9uOjp2aXNpdENoaWxkcmVu
SW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgV2ViQXNzZW1ibHlG
dW5jdGlvbiogdGhpc09iamVjdCA9IGpzQ2FzdDxXZWJBc3NlbWJseUZ1bmN0aW9uKj4oY2VsbCk7
CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAt
NDYxLDYgKzQ2Miw4IEBAIHZvaWQgV2ViQXNzZW1ibHlGdW5jdGlvbjo6dmlzaXRDaGlsZHJlbigK
ICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2pzVG9XYXNtSUNDYWxsZWUpOwogfQog
CitERUZJTkVfVklTSVRfQ0hJTERSRU4oV2ViQXNzZW1ibHlGdW5jdGlvbik7CisKIHZvaWQgV2Vi
QXNzZW1ibHlGdW5jdGlvbjo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCiB7CiAgICAgc3RhdGljX2Nh
c3Q8V2ViQXNzZW1ibHlGdW5jdGlvbio+KGNlbGwpLT5XZWJBc3NlbWJseUZ1bmN0aW9uOjp+V2Vi
QXNzZW1ibHlGdW5jdGlvbigpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
V2ViQXNzZW1ibHlGdW5jdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uaAkocmV2aXNpb24gMjcyNzY5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE5IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtODYsNyArODYsNyBAQCBwdWJsaWM6CiAgICAgV2FzbTo6SW5zdGFuY2UqIHBy
ZXZpb3VzSW5zdGFuY2UoQ2FsbEZyYW1lKik7CiAKIHByaXZhdGU6Ci0gICAgc3RhdGljIHZvaWQg
dmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRf
Q0hJTERSRU47CiAgICAgV2ViQXNzZW1ibHlGdW5jdGlvbihWTSYsIE5hdGl2ZUV4ZWN1dGFibGUq
LCBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSosIFdhc206OkNhbGxlZSYganNFbnRyeXBvaW50
LCBXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9uOjpMb2FkTG9jYXRpb24gZW50cnlwb2ludExv
YWRMb2NhdGlvbiwgV2FzbTo6U2lnbmF0dXJlSW5kZXgpOwogCiAgICAgTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyPEpTRW50cnlQdHJUYWc+IGpzQ2FsbEVudHJ5cG9pbnRTbG93KCk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uQmFzZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5j
dGlvbkJhc2UuY3BwCShyZXZpc2lvbiAyNzI3NjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uQmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDEsNyAr
NDEsOCBAQCBXZWJBc3NlbWJseUZ1bmN0aW9uQmFzZTo6V2ViQXNzZW1ibHlGdW5jCiAgICAgOiBC
YXNlKHZtLCBleGVjdXRhYmxlLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSkKIHsgfQogCi12b2lk
IFdlYkFzc2VtYmx5RnVuY3Rpb25CYXNlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xv
dFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBXZWJB
c3NlbWJseUZ1bmN0aW9uQmFzZTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNp
dG9yJiB2aXNpdG9yKQogewogICAgIFdlYkFzc2VtYmx5RnVuY3Rpb25CYXNlKiB0aGlzT2JqZWN0
ID0ganNDYXN0PFdlYkFzc2VtYmx5RnVuY3Rpb25CYXNlKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dD
X09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNDksNiArNTAsOCBAQCB2
b2lkIFdlYkFzc2VtYmx5RnVuY3Rpb25CYXNlOjp2aXNpdENoaWxkCiAgICAgdmlzaXRvci5hcHBl
bmQodGhpc09iamVjdC0+bV9pbnN0YW5jZSk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihX
ZWJBc3NlbWJseUZ1bmN0aW9uQmFzZSk7CisKIHZvaWQgV2ViQXNzZW1ibHlGdW5jdGlvbkJhc2U6
OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgTmF0aXZlRXhlY3V0YWJsZSogZXhlY3V0YWJsZSwgdW5z
aWduZWQgbGVuZ3RoLCBjb25zdCBTdHJpbmcmIG5hbWUsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSog
aW5zdGFuY2UpCiB7CiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0sIGV4ZWN1dGFibGUsIGxl
bmd0aCwgbmFtZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3Nl
bWJseUZ1bmN0aW9uQmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb25CYXNlLmgJKHJldmlzaW9uIDI3Mjc2OSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb25CYXNlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3LTIw
MTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3
LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC00Niw3ICs0Niw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgcHRyZGlm
Zl90IG9mZnNldE9mSW5zdGFuY2UoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoV2ViQXNzZW1i
bHlGdW5jdGlvbkJhc2UsIG1faW5zdGFuY2UpOyB9CiAKIHByb3RlY3RlZDoKLSAgICBzdGF0aWMg
dm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9W
SVNJVF9DSElMRFJFTjsKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgTmF0aXZlRXhlY3V0
YWJsZSosIHVuc2lnbmVkIGxlbmd0aCwgY29uc3QgU3RyaW5nJiBuYW1lLCBKU1dlYkFzc2VtYmx5
SW5zdGFuY2UqKTsKICAgICBXZWJBc3NlbWJseUZ1bmN0aW9uQmFzZShWTSYsIE5hdGl2ZUV4ZWN1
dGFibGUqLCBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSopOwogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZVJlY29yZC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNv
cmQuY3BwCShyZXZpc2lvbiAyNzI3NjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9XZWJBc3NlbWJseU1vZHVsZVJlY29yZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03OCw3ICs3
OCw4IEBAIHZvaWQgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmZpbmlzaENyZWEKICAgICB9CiB9
CiAKLXZvaWQgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBj
ZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2
b2lkIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNl
bGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQqIHRo
aXNPYmplY3QgPSBqc0Nhc3Q8V2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQqPihjZWxsKTsKICAgICBB
U1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC04OCw2ICs4
OSw4IEBAIHZvaWQgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OnZpc2l0Q2hpbGQKICAgICB2aXNp
dG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2V4cG9ydHNPYmplY3QpOwogfQogCitERUZJTkVfVklT
SVRfQ0hJTERSRU4oV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQpOworCiB2b2lkIFdlYkFzc2VtYmx5
TW9kdWxlUmVjb3JkOjpwcmVwYXJlTGluayhWTSYgdm0sIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSog
aW5zdGFuY2UpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoIW1faW5zdGFuY2UpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVs
ZVJlY29yZC5oCShyZXZpc2lvbiAyNzI3NjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9XZWJBc3NlbWJseU1vZHVsZVJlY29yZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjksNyAr
NjksNyBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0dsb2JhbE9iamVj
dCosIFZNJiwgY29uc3QgV2FzbTo6TW9kdWxlSW5mb3JtYXRpb24mKTsKIAotICAgIHN0YXRpYyB2
b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJ
U0lUX0NISUxEUkVOOwogCiAgICAgV3JpdGVCYXJyaWVyPEpTV2ViQXNzZW1ibHlJbnN0YW5jZT4g
bV9pbnN0YW5jZTsKICAgICBXcml0ZUJhcnJpZXI8SlNPYmplY3Q+IG1fc3RhcnRGdW5jdGlvbjsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5V3JhcHBlckZ1
bmN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9X
ZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5jcHAJKHJldmlzaW9uIDI3Mjc2OSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTct
MjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTY3LDcgKzY3LDggQEAgU3RydWN0dXJlKiBXZWJBc3NlbWJseVdy
YXBwZXJGdW5jdGlvbjo6YwogICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFs
T2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKEpTRnVuY3Rpb25UeXBlLCBTdHJ1Y3R1cmVGbGFn
cyksIGluZm8oKSk7CiB9CiAKLXZvaWQgV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb246OnZpc2l0
Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5
cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uOjp2aXNpdENo
aWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgV2ViQXNz
ZW1ibHlXcmFwcGVyRnVuY3Rpb24qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8V2ViQXNzZW1ibHlXcmFw
cGVyRnVuY3Rpb24qPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNP
YmplY3QsIGluZm8oKSk7CkBAIC03Niw2ICs3Nyw4IEBAIHZvaWQgV2ViQXNzZW1ibHlXcmFwcGVy
RnVuY3Rpb246OnZpc2l0Q2gKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2Z1bmN0
aW9uKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0
aW9uKTsKKwogSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGNhbGxXZWJBc3NlbWJseVdyYXBwZXJG
dW5jdGlvbiwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZy
YW1lKSkKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5V3JhcHBl
ckZ1bmN0aW9uLmgJKHJldmlzaW9uIDI3Mjc2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL2pzL1dlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMTkgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01
OSw3ICs1OSw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgV2ViQXNzZW1ibHlXcmFwcGVyRnVu
Y3Rpb24oVk0mLCBOYXRpdmVFeGVjdXRhYmxlKiwgSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUq
LCBXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9uKTsKICAgICB2b2lkIGZpbmlzaENyZWF0aW9u
KFZNJiwgTmF0aXZlRXhlY3V0YWJsZSosIHVuc2lnbmVkIGxlbmd0aCwgY29uc3QgU3RyaW5nJiBu
YW1lLCBKU09iamVjdCosIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSopOwotICAgIHN0YXRpYyB2b2lk
IHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lU
X0NISUxEUkVOOwogCiAgICAgV3JpdGVCYXJyaWVyPEpTT2JqZWN0PiBtX2Z1bmN0aW9uOwogICAg
IC8vIEl0J3Mgc2FmZSB0byBqdXN0IGhvbGQgdGhlIHJhdyBXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1
bmN0aW9uIGJlY2F1c2Ugd2UgaGF2ZSBhIHJlZmVyZW5jZQpJbmRleDogU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmNwcAkocmV2aXNpb24g
MjcyNzY5KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3Rv
cmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTUtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTcyOCw3ICs3MjgsOCBAQCB2b2lkIElEQk9iamVjdFN0b3Jl
Ojpyb2xsYmFja0ZvclZlcnNpb25DCiAgICAgfQogfQogCi12b2lkIElEQk9iamVjdFN0b3JlOjp2
aXNpdFJlZmVyZW5jZWRJbmRleGVzKFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBjb25zdAordGVtcGxh
dGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSURCT2JqZWN0U3RvcmU6OnZpc2l0UmVmZXJlbmNl
ZEluZGV4ZXMoVmlzaXRvciYgdmlzaXRvcikgY29uc3QKIHsKICAgICBMb2NrZXI8TG9jaz4gbG9j
a2VyKG1fcmVmZXJlbmNlZEluZGV4TG9jayk7CiAgICAgZm9yIChhdXRvJiBpbmRleCA6IG1fcmVm
ZXJlbmNlZEluZGV4ZXMudmFsdWVzKCkpCkBAIC03MzcsNiArNzM4LDkgQEAgdm9pZCBJREJPYmpl
Y3RTdG9yZTo6dmlzaXRSZWZlcmVuY2VkSW5kZQogICAgICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJv
b3QoaW5kZXguZ2V0KCkpOwogfQogCit0ZW1wbGF0ZSB2b2lkIElEQk9iamVjdFN0b3JlOjp2aXNp
dFJlZmVyZW5jZWRJbmRleGVzKEFic3RyYWN0U2xvdFZpc2l0b3ImKSBjb25zdDsKK3RlbXBsYXRl
IHZvaWQgSURCT2JqZWN0U3RvcmU6OnZpc2l0UmVmZXJlbmNlZEluZGV4ZXMoU2xvdFZpc2l0b3Im
KSBjb25zdDsKKwogdm9pZCBJREJPYmplY3RTdG9yZTo6cmVuYW1lUmVmZXJlbmNlZEluZGV4KElE
QkluZGV4JiBpbmRleCwgY29uc3QgU3RyaW5nJiBuZXdOYW1lKQogewogICAgIExPRyhJbmRleGVk
REIsICJJREJPYmplY3RTdG9yZTo6cmVuYW1lUmVmZXJlbmNlZEluZGV4Iik7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmgJKHJl
dmlzaW9uIDI3Mjc2OSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9i
amVjdFN0b3JlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTA5LDcgKzEwOSw3IEBAIHB1YmxpYzoKICAgICB2
b2lkIHJlZigpOwogICAgIHZvaWQgZGVyZWYoKTsKIAotICAgIHZvaWQgdmlzaXRSZWZlcmVuY2Vk
SW5kZXhlcyhKU0M6OlNsb3RWaXNpdG9yJikgY29uc3Q7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
VmlzaXRvcj4gdm9pZCB2aXNpdFJlZmVyZW5jZWRJbmRleGVzKFZpc2l0b3ImKSBjb25zdDsKICAg
ICB2b2lkIHJlbmFtZVJlZmVyZW5jZWRJbmRleChJREJJbmRleCYsIGNvbnN0IFN0cmluZyYgbmV3
TmFtZSk7CiAKIHByaXZhdGU6CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJUcmFuc2FjdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb24uY3BwCShyZXZpc2lvbiAyNzI3NjkpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTcgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0xNDU1LDcgKzE0NTUsOCBAQCB2b2lkIElEQlRyYW5zYWN0aW9uOjpjb25uZWN0
aW9uQ2xvc2VkRnJvCiAgICAgZmlyZU9uQWJvcnQoKTsKIH0KIAotdm9pZCBJREJUcmFuc2FjdGlv
bjo6dmlzaXRSZWZlcmVuY2VkT2JqZWN0U3RvcmVzKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3Ip
IGNvbnN0Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBJREJUcmFuc2FjdGlvbjo6
dmlzaXRSZWZlcmVuY2VkT2JqZWN0U3RvcmVzKFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0CiB7CiAg
ICAgTG9ja2VyPExvY2s+IGxvY2tlcihtX3JlZmVyZW5jZWRPYmplY3RTdG9yZUxvY2spOwogICAg
IGZvciAoYXV0byYgb2JqZWN0U3RvcmUgOiBtX3JlZmVyZW5jZWRPYmplY3RTdG9yZXMudmFsdWVz
KCkpCkBAIC0xNDY0LDYgKzE0NjUsOSBAQCB2b2lkIElEQlRyYW5zYWN0aW9uOjp2aXNpdFJlZmVy
ZW5jZWRPYmplCiAgICAgICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChvYmplY3RTdG9yZS5nZXQo
KSk7CiB9CiAKK3RlbXBsYXRlIHZvaWQgSURCVHJhbnNhY3Rpb246OnZpc2l0UmVmZXJlbmNlZE9i
amVjdFN0b3JlcyhKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0OwordGVt
cGxhdGUgdm9pZCBJREJUcmFuc2FjdGlvbjo6dmlzaXRSZWZlcmVuY2VkT2JqZWN0U3RvcmVzKEpT
Qzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0OworCiB2b2lkIElEQlRyYW5zYWN0aW9uOjpo
YW5kbGVQZW5kaW5nT3BlcmF0aW9ucygpCiB7CiAgICAgQVNTRVJUKGNhbkN1cnJlbnRUaHJlYWRB
Y2Nlc3NUaHJlYWRMb2NhbERhdGEobV9kYXRhYmFzZS0+b3JpZ2luVGhyZWFkKCkpKTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb24u
aAkocmV2aXNpb24gMjcyNzY5KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCVHJhbnNhY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE1LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xNDksNyArMTQ5LDcgQEAgcHVibGljOgog
CiAgICAgdm9pZCBjb25uZWN0aW9uQ2xvc2VkRnJvbVNlcnZlcihjb25zdCBJREJFcnJvciYpOwog
Ci0gICAgdm9pZCB2aXNpdFJlZmVyZW5jZWRPYmplY3RTdG9yZXMoSlNDOjpTbG90VmlzaXRvciYp
IGNvbnN0OworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgdmlzaXRSZWZlcmVu
Y2VkT2JqZWN0U3RvcmVzKFZpc2l0b3ImKSBjb25zdDsKIAogICAgIFdFQkNPUkVfRVhQT1JUIHN0
YXRpYyBzdGQ6OmF0b21pYzx1bnNpZ25lZD4gbnVtYmVyT2ZJREJUcmFuc2FjdGlvbnM7CiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9CdWZmZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9CdWZmZXIuY3Bw
CShyZXZpc2lvbiAyNzI3NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1
ZGlvQnVmZmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5
cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE1NCwxMiArMTU0LDE2IEBAIEV4Y2VwdGlvbk9y
PEpTQzo6SlNWYWx1ZT4gQXVkaW9CdWZmZXI6OmcKICAgICByZXR1cm4gY29uc3RydWN0SlNBcnJh
eSgpOwogfQogCi12b2lkIEF1ZGlvQnVmZmVyOjp2aXNpdENoYW5uZWxXcmFwcGVycyhKU0M6OlNs
b3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgQXVk
aW9CdWZmZXI6OnZpc2l0Q2hhbm5lbFdyYXBwZXJzKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAg
Zm9yIChhdXRvJiBjaGFubmVsV3JhcHBlciA6IG1fY2hhbm5lbFdyYXBwZXJzKQogICAgICAgICBj
aGFubmVsV3JhcHBlci52aXNpdCh2aXNpdG9yKTsKIH0KIAordGVtcGxhdGUgdm9pZCBBdWRpb0J1
ZmZlcjo6dmlzaXRDaGFubmVsV3JhcHBlcnMoSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0
ZW1wbGF0ZSB2b2lkIEF1ZGlvQnVmZmVyOjp2aXNpdENoYW5uZWxXcmFwcGVycyhKU0M6OlNsb3RW
aXNpdG9yJik7CisKIFJlZlB0cjxGbG9hdDMyQXJyYXk+IEF1ZGlvQnVmZmVyOjpjaGFubmVsRGF0
YSh1bnNpZ25lZCBjaGFubmVsSW5kZXgpCiB7CiAgICAgaWYgKGNoYW5uZWxJbmRleCA+PSBtX2No
YW5uZWxzLnNpemUoKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVk
aW9CdWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlv
L0F1ZGlvQnVmZmVyLmgJKHJldmlzaW9uIDI3Mjc2OSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViYXVkaW8vQXVkaW9CdWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAK
IC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTc1LDcgKzc1LDcgQEAgcHVi
bGljOgogCiAgICAgc2l6ZV90IG1lbW9yeUNvc3QoKSBjb25zdDsKIAotICAgIHZvaWQgdmlzaXRD
aGFubmVsV3JhcHBlcnMoSlNDOjpTbG90VmlzaXRvciYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFZpc2l0b3I+IHZvaWQgdmlzaXRDaGFubmVsV3JhcHBlcnMoVmlzaXRvciYpOwogICAgIAogcHJp
dmF0ZToKICAgICBBdWRpb0J1ZmZlcih1bnNpZ25lZCBudW1iZXJPZkNoYW5uZWxzLCBzaXplX3Qg
bGVuZ3RoLCBmbG9hdCBzYW1wbGVSYXRlLCBMZWdhY3lQcmV2ZW50RGV0YWNoaW5nID0gTGVnYWN5
UHJldmVudERldGFjaGluZzo6Tm8pOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
RE9NR0NPdXRwdXRDb25zdHJhaW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9ET01HQ091dHB1dENvbnN0cmFpbnQuY3BwCShyZXZpc2lvbiAyNzI3NjkpCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9ET01HQ091dHB1dENvbnN0cmFpbnQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNy0y
MDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
Ny0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtNDksNyArNDksNyBAQCBET01HQ091dHB1dENvbnN0cmFpbnQ6On5E
T01HQ091dHB1dENvbnN0CiB7CiB9CiAKLXZvaWQgRE9NR0NPdXRwdXRDb25zdHJhaW50OjpleGVj
dXRlSW1wbChTbG90VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgRE9NR0NPdXRwdXRDb25zdHJhaW50
OjpleGVjdXRlSW1wbChBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEhlYXAm
IGhlYXAgPSBtX3ZtLmhlYXA7CiAgICAgCkBAIC02MCw4ICs2MCw4IEBAIHZvaWQgRE9NR0NPdXRw
dXRDb25zdHJhaW50OjpleGVjdXRlSW1wbCgKICAgICAKICAgICBtX2NsaWVudERhdGEuZm9yRWFj
aE91dHB1dENvbnN0cmFpbnRTcGFjZSgKICAgICAgICAgWyZdIChTdWJzcGFjZSYgc3Vic3BhY2Up
IHsKLSAgICAgICAgICAgIGF1dG8gZnVuYyA9IFtdIChTbG90VmlzaXRvciYgdmlzaXRvciwgSGVh
cENlbGwqIGhlYXBDZWxsLCBIZWFwQ2VsbDo6S2luZCkgewotICAgICAgICAgICAgICAgIFNldFJv
b3RNYXJrUmVhc29uU2NvcGUgcm9vdFNjb3BlKHZpc2l0b3IsIFNsb3RWaXNpdG9yOjpSb290TWFy
a1JlYXNvbjo6RE9NR0NPdXRwdXQpOworICAgICAgICAgICAgYXV0byBmdW5jID0gW10gKEFic3Ry
YWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIEhlYXBDZWxsKiBoZWFwQ2VsbCwgSGVhcENlbGw6Oktp
bmQpIHsKKyAgICAgICAgICAgICAgICBTZXRSb290TWFya1JlYXNvblNjb3BlIHJvb3RTY29wZSh2
aXNpdG9yLCBBYnN0cmFjdFNsb3RWaXNpdG9yOjpSb290TWFya1JlYXNvbjo6RE9NR0NPdXRwdXQp
OwogICAgICAgICAgICAgICAgIEpTQ2VsbCogY2VsbCA9IHN0YXRpY19jYXN0PEpTQ2VsbCo+KGhl
YXBDZWxsKTsKICAgICAgICAgICAgICAgICBjZWxsLT5tZXRob2RUYWJsZSh2aXNpdG9yLnZtKCkp
LT52aXNpdE91dHB1dENvbnN0cmFpbnRzKGNlbGwsIHZpc2l0b3IpOwogICAgICAgICAgICAgfTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0RPTUdDT3V0cHV0Q29uc3RyYWludC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0RPTUdDT3V0cHV0Q29u
c3RyYWludC5oCShyZXZpc2lvbiAyNzI3NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9ET01HQ091dHB1dENvbnN0cmFpbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQyLDcgKzQyLDcg
QEAgcHVibGljOgogICAgIH5ET01HQ091dHB1dENvbnN0cmFpbnQoKTsKICAgICAKIHByb3RlY3Rl
ZDoKLSAgICB2b2lkIGV4ZWN1dGVJbXBsKEpTQzo6U2xvdFZpc2l0b3ImKSBvdmVycmlkZTsKKyAg
ICB2b2lkIGV4ZWN1dGVJbXBsKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpIG92ZXJyaWRlOwog
CiBwcml2YXRlOgogICAgIEpTQzo6Vk0mIG1fdm07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0Fib3J0Q29udHJvbGxlckN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNBYm9ydENvbnRyb2xsZXJDdXN0b20uY3BwCShyZXZpc2lv
biAyNzI3NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Fib3J0Q29udHJvbGxl
ckN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotKiBDb3B5cmln
aHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKiBDb3B5cmlnaHQg
KEMpIDIwMTktMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAqCiAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTI4LDkgKzI4LDEzIEBACiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotdm9pZCBKU0Fib3J0Q29udHJvbGxlcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlND
OjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lk
IEpTQWJvcnRDb250cm9sbGVyOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNp
dG9yKQogewogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdCgmd3JhcHBlZCgpLnNpZ25hbCgpKTsK
IH0KIAordGVtcGxhdGUgdm9pZCBKU0Fib3J0Q29udHJvbGxlcjo6dmlzaXRBZGRpdGlvbmFsQ2hp
bGRyZW4oSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTQWJvcnRD
b250cm9sbGVyOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJik7CisK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTQWJvcnRTaWduYWxDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTQWJvcnRTaWduYWxDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI3NjkpCisrKyBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Fib3J0U2lnbmFsQ3VzdG9tLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0qIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqIENvcHlyaWdodCAoQykgMjAxOS0yMDIxIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICoKICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtMjgsNyArMjgsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWJvb2wgSlNBYm9ydFNp
Z25hbE93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVu
a25vd24+IGhhbmRsZSwgdm9pZCosIEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNo
YXIqKiByZWFzb24pCitib29sIEpTQWJvcnRTaWduYWxPd25lcjo6aXNSZWFjaGFibGVGcm9tT3Bh
cXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBKU0M6OkFi
c3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCiB7CiAgICAg
YXV0byYgYWJvcnRTaWduYWwgPSBKU0M6OmpzQ2FzdDxKU0Fib3J0U2lnbmFsKj4oaGFuZGxlLnNs
b3QoKS0+YXNDZWxsKCkpLT53cmFwcGVkKCk7CiAgICAgaWYgKGFib3J0U2lnbmFsLmlzRmlyaW5n
RXZlbnRMaXN0ZW5lcnMoKSkgewpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNB
dHRyQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0F0dHJDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI3NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0F0dHJDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMzLDEw
ICszMywxNCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgSlNBdHRyOjp2aXNpdEFk
ZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlw
ZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNBdHRyOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNp
dG9yJiB2aXNpdG9yKQogewogICAgIGlmIChFbGVtZW50KiBlbGVtZW50ID0gd3JhcHBlZCgpLm93
bmVyRWxlbWVudCgpKQogICAgICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qocm9vdChlbGVtZW50
KSk7CiB9CiAKK3RlbXBsYXRlIHZvaWQgSlNBdHRyOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihK
U0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNBdHRyOjp2aXNpdEFk
ZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJik7CisKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXVkaW9CdWZmZXJDdXN0
b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXVkaW9C
dWZmZXJDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI3NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0F1ZGlvQnVmZmVyQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIwLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMSwxMSArMzEs
MTUgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKLXZvaWQg
SlNBdWRpb0J1ZmZlcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0
b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0F1ZGlvQnVmZmVyOjp2aXNp
dEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHdyYXBwZWQoKS52
aXNpdENoYW5uZWxXcmFwcGVycyh2aXNpdG9yKTsKIH0KIAordGVtcGxhdGUgdm9pZCBKU0F1ZGlv
QnVmZmVyOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0
ZW1wbGF0ZSB2b2lkIEpTQXVkaW9CdWZmZXI6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RW
aXNpdG9yJik7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShX
RUJfQVVESU8pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0F1ZGlvVHJhY2tD
dXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXVk
aW9UcmFja0N1c3RvbS5jcHAJKHJldmlzaW9uIDI3Mjc2OSkKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTQXVkaW9UcmFja0N1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzUsMTEgKzM1
LDE1IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCi12b2lk
IEpTQXVkaW9UcmFjazo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0
b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0F1ZGlvVHJhY2s6OnZpc2l0
QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgdmlzaXRvci5hZGRP
cGFxdWVSb290KHJvb3QoJndyYXBwZWQoKSkpOwogfQogCit0ZW1wbGF0ZSB2b2lkIEpTQXVkaW9U
cmFjazo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oQWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVt
cGxhdGUgdm9pZCBKU0F1ZGlvVHJhY2s6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNp
dG9yJik7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0F1ZGlvVHJhY2tMaXN0Q3VzdG9tLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0F1ZGlvVHJhY2tMaXN0Q3VzdG9tLmNw
cAkocmV2aXNpb24gMjcyNzY5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNBdWRp
b1RyYWNrTGlzdEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzYsMTEgKzM2LDE1IEBACiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCi12b2lkIEpTQXVkaW9UcmFj
a0xpc3Q6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVt
cGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNBdWRpb1RyYWNrTGlzdDo6dmlzaXRBZGRp
dGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB2aXNpdG9yLmFkZE9wYXF1
ZVJvb3Qocm9vdCh3cmFwcGVkKCkuZWxlbWVudCgpKSk7CiB9CiAKK3RlbXBsYXRlIHZvaWQgSlNB
dWRpb1RyYWNrTGlzdDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oQWJzdHJhY3RTbG90VmlzaXRv
ciYpOwordGVtcGxhdGUgdm9pZCBKU0F1ZGlvVHJhY2tMaXN0Ojp2aXNpdEFkZGl0aW9uYWxDaGls
ZHJlbihTbG90VmlzaXRvciYpOworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZgpJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNBdWRpb1dvcmtsZXRQcm9jZXNzb3JD
dXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXVk
aW9Xb3JrbGV0UHJvY2Vzc29yQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcyNzY5KQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNBdWRpb1dvcmtsZXRQcm9jZXNzb3JDdXN0b20uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAyMCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAtMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTMxLDcgKzMxLDggQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5h
bWVzcGFjZSBKU0M7CiAKLXZvaWQgSlNBdWRpb1dvcmtsZXRQcm9jZXNzb3I6OnZpc2l0QWRkaXRp
b25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlz
aXRvcj4KK3ZvaWQgSlNBdWRpb1dvcmtsZXRQcm9jZXNzb3I6OnZpc2l0QWRkaXRpb25hbENoaWxk
cmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0byYgcHJvY2Vzc29yID0gd3JhcHBlZCgp
OwogICAgIHByb2Nlc3Nvci5qc0lucHV0c1dyYXBwZXIoKS52aXNpdCh2aXNpdG9yKTsKQEAgLTM5
LDYgKzQwLDkgQEAgdm9pZCBKU0F1ZGlvV29ya2xldFByb2Nlc3Nvcjo6dmlzaXRBZGRpdAogICAg
IHByb2Nlc3Nvci5qc1BhcmFtVmFsdWVzV3JhcHBlcigpLnZpc2l0KHZpc2l0b3IpOwogfQogCit0
ZW1wbGF0ZSB2b2lkIEpTQXVkaW9Xb3JrbGV0UHJvY2Vzc29yOjp2aXNpdEFkZGl0aW9uYWxDaGls
ZHJlbihBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTQXVkaW9Xb3JrbGV0
UHJvY2Vzc29yOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYpOworCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoV0VCX0FVRElPKQpJbmRleDog
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDU1NSdWxlQ3VzdG9tLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NTU1J1bGVDdXN0b20uY3BwCShyZXZp
c2lvbiAyNzI3NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NTU1J1bGVDdXN0
b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMDctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTUxLDExICs1MSwxNSBAQAogbmFtZXNwYWNlIFdl
YkNvcmUgewogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAotdm9pZCBKU0NTU1J1bGU6OnZpc2l0QWRk
aXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUg
VmlzaXRvcj4KK3ZvaWQgSlNDU1NSdWxlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9y
JiB2aXNpdG9yKQogewogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChyb290KCZ3cmFwcGVkKCkp
KTsKIH0KIAordGVtcGxhdGUgdm9pZCBKU0NTU1J1bGU6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVu
KEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNDU1NSdWxlOjp2aXNpdEFk
ZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYpOworCiBKU1ZhbHVlIHRvSlNOZXdseUNyZWF0
ZWQoSlNHbG9iYWxPYmplY3QqLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWY8
Q1NTUnVsZT4mJiBydWxlKQogewogICAgIHN3aXRjaCAocnVsZS0+dHlwZSgpKSB7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NTU1J1bGVMaXN0Q3VzdG9tLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NTU1J1bGVMaXN0Q3VzdG9tLmNw
cAkocmV2aXNpb24gMjcyNzY5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDU1NS
dWxlTGlzdEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDA5LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHQgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDktMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodCByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzYsNyArMzYsNyBAQAogbmFtZXNw
YWNlIFdlYkNvcmUgewogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAotYm9vbCBKU0NTU1J1bGVMaXN0
T3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93
bj4gaGFuZGxlLCB2b2lkKiwgU2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFz
b24pCitib29sIEpTQ1NTUnVsZUxpc3RPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMo
SlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBBYnN0cmFjdFNsb3RWaXNp
dG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQogewogICAgIEpTQ1NTUnVsZUxpc3Qq
IGpzQ1NTUnVsZUxpc3QgPSBqc0Nhc3Q8SlNDU1NSdWxlTGlzdCo+KGhhbmRsZS5zbG90KCktPmFz
Q2VsbCgpKTsKICAgICBpZiAoIWpzQ1NTUnVsZUxpc3QtPmhhc0N1c3RvbVByb3BlcnRpZXMoanND
U1NSdWxlTGlzdC0+dm0oKSkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NT
U1N0eWxlRGVjbGFyYXRpb25DdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTQ1NTU3R5bGVEZWNsYXJhdGlvbkN1c3RvbS5jcHAJKHJldmlzaW9uIDI3
Mjc2OSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ1NTU3R5bGVEZWNsYXJhdGlv
bkN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDA3LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDA3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01MSw5ICs1MSwxMyBAQCB2b2lkKiByb290
KENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlKQogICAgIHJldHVybiBzdHlsZTsKIH0KIAotdm9p
ZCBKU0NTU1N0eWxlRGVjbGFyYXRpb246OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNp
dG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNDU1NTdHls
ZURlY2xhcmF0aW9uOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQog
ewogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChyb290KCZ3cmFwcGVkKCkpKTsKIH0KIAordGVt
cGxhdGUgdm9pZCBKU0NTU1N0eWxlRGVjbGFyYXRpb246OnZpc2l0QWRkaXRpb25hbENoaWxkcmVu
KEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNDU1NTdHlsZURlY2xhcmF0
aW9uOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYpOworCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NhbGxiYWNr
RGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDYWxs
YmFja0RhdGEuY3BwCShyZXZpc2lvbiAyNzI3NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0NhbGxiYWNrRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDksIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC05NSwxMiAr
OTUsMTYgQEAgSlNWYWx1ZSBKU0NhbGxiYWNrRGF0YTo6aW52b2tlQ2FsbGJhY2soSgogICAgIHJl
dHVybiByZXN1bHQ7CiB9CiAKLXZvaWQgSlNDYWxsYmFja0RhdGFXZWFrOjp2aXNpdEpTRnVuY3Rp
b24oSlNDOjpTbG90VmlzaXRvciYgdmlzdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4K
K3ZvaWQgSlNDYWxsYmFja0RhdGFXZWFrOjp2aXNpdEpTRnVuY3Rpb24oVmlzaXRvciYgdmlzaXRv
cikKIHsKLSAgICB2aXN0b3IuYXBwZW5kKG1fY2FsbGJhY2spOworICAgIHZpc2l0b3IuYXBwZW5k
KG1fY2FsbGJhY2spOwogfQogCi1ib29sIEpTQ2FsbGJhY2tEYXRhV2Vhazo6V2Vha093bmVyOjpp
c1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lk
KiBjb250ZXh0LCBTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikKK3Rl
bXBsYXRlIHZvaWQgSlNDYWxsYmFja0RhdGFXZWFrOjp2aXNpdEpTRnVuY3Rpb24oSlNDOjpBYnN0
cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTQ2FsbGJhY2tEYXRhV2Vhazo6dmlz
aXRKU0Z1bmN0aW9uKEpTQzo6U2xvdFZpc2l0b3ImKTsKKworYm9vbCBKU0NhbGxiYWNrRGF0YVdl
YWs6OldlYWtPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlND
OjpVbmtub3duPiwgdm9pZCogY29udGV4dCwgQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvciwg
Y29uc3QgY2hhcioqIHJlYXNvbikKIHsKICAgICBpZiAoVU5MSUtFTFkocmVhc29uKSkKICAgICAg
ICAgKnJlYXNvbiA9ICJDb250ZXh0IGlzIG9wYXF1ZSByb290IjsgLy8gRklYTUU6IHdoYXQgaXMg
dGhlIGNvbnRleHQuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NhbGxiYWNr
RGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2FsbGJh
Y2tEYXRhLmgJKHJldmlzaW9uIDI3Mjc2OSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTQ2FsbGJhY2tEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDA3LTIwMDksIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMTMsMTEgKzExMywx
MSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBKU0NhbGxiYWNrRGF0YTo6aW52b2tlQ2FsbGJh
Y2soKmdsb2JhbE9iamVjdCwgY2FsbGJhY2soKSwgdGhpc1ZhbHVlLCBhcmdzLCBjYWxsYmFja1R5
cGUsIGZ1bmN0aW9uTmFtZSwgcmV0dXJuZWRFeGNlcHRpb24pOwogICAgIH0KIAotICAgIHZvaWQg
dmlzaXRKU0Z1bmN0aW9uKEpTQzo6U2xvdFZpc2l0b3ImKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBWaXNpdG9yPiB2b2lkIHZpc2l0SlNGdW5jdGlvbihWaXNpdG9yJik7CiAKIHByaXZhdGU6CiAg
ICAgY2xhc3MgV2Vha093bmVyIDogcHVibGljIEpTQzo6V2Vha0hhbmRsZU93bmVyIHsKLSAgICAg
ICAgYm9vbCBpc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25v
d24+LCB2b2lkKiBjb250ZXh0LCBKU0M6OlNsb3RWaXNpdG9yJiwgY29uc3QgY2hhcioqKSBvdmVy
cmlkZTsKKyAgICAgICAgYm9vbCBpc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRs
ZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0LCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3Im
LCBjb25zdCBjaGFyKiopIG92ZXJyaWRlOwogICAgIH07CiAgICAgV2Vha093bmVyIG1fd2Vha093
bmVyOwogICAgIEpTQzo6V2VhazxKU0M6OkpTT2JqZWN0PiBtX2NhbGxiYWNrOwpJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRDdXN0b20u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcyNzY5KQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRDdXN0b20uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNi0y
MDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAw
Ni0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YwpAQCAtMjQsNyArMjQsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWJvb2wgSlNDYW52
YXNSZW5kZXJpbmdDb250ZXh0MkRPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlND
OjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBKU0M6OlNsb3RWaXNpdG9yJiB2
aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQorYm9vbCBKU0NhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyRE93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVu
a25vd24+IGhhbmRsZSwgdm9pZCosIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvciwg
Y29uc3QgY2hhcioqIHJlYXNvbikKIHsKICAgICBpZiAoVU5MSUtFTFkocmVhc29uKSkKICAgICAg
ICAgKnJlYXNvbiA9ICJDYW52YXMgaXMgb3BhcXVlIHJvb3QiOwpAQCAtMzQsOSArMzQsMTMgQEAg
Ym9vbCBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRE93bmVyOjppcwogICAgIHJldHVybiB2aXNp
dG9yLmNvbnRhaW5zT3BhcXVlUm9vdChyb290KTsKIH0KIAotdm9pZCBKU0NhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyRDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlz
aXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDJEOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewog
ICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChyb290KHdyYXBwZWQoKS5jYW52YXMoKSkpOwogfQog
Cit0ZW1wbGF0ZSB2b2lkIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjp2aXNpdEFkZGl0aW9u
YWxDaGlsZHJlbihKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlND
YW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xv
dFZpc2l0b3ImKTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNDdXN0b21FdmVudEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDdXN0b21FdmVudEN1c3RvbS5jcHAJKHJldmlzaW9u
IDI3Mjc2OSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9tRXZlbnRDdXN0
b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxNS0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDIsMTAgKzQyLDE0IEBAIEpTQzo6SlNWYWx1ZSBK
U0N1c3RvbUV2ZW50OjpkZXRhaWwoSlNDOjoKICAgICB9KTsKIH0KIAotdm9pZCBKU0N1c3RvbUV2
ZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQor
dGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNDdXN0b21FdmVudDo6dmlzaXRBZGRp
dGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB3cmFwcGVkKCkuZGV0YWls
KCkudmlzaXQodmlzaXRvcik7CiAgICAgd3JhcHBlZCgpLmNhY2hlZERldGFpbCgpLnZpc2l0KHZp
c2l0b3IpOwogfQogCit0ZW1wbGF0ZSB2b2lkIEpTQ3VzdG9tRXZlbnQ6OnZpc2l0QWRkaXRpb25h
bENoaWxkcmVuKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU0N1
c3RvbUV2ZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJik7CisK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTRE9NQnVpbHRpbkNvbnN0cnVjdG9yQmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNET01CdWlsdGluQ29uc3RydWN0b3JCYXNlLmNwcAkocmV2aXNp
b24gMjcyNzY5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CdWlsdGluQ29u
c3RydWN0b3JCYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiAg
Q29weXJpZ2h0IChDKSAxOTk5LTIwMDEgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKLSAq
ICBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiAgQ29weXJpZ2h0IChDKSAyMDA0LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICogIENvcHlyaWdodCAoQykgMjAwNyBTYW11ZWwgV2VpbmlnIDxzYW1Ad2Via2l0Lm9y
Zz4KICAqICBDb3B5cmlnaHQgKEMpIDIwMTMgTWljaGFlbCBQcnVldHQgPG1pY2hhZWxANjhrLm9y
Zz4KICAqCkBAIC00NSw3ICs0NSw4IEBAIHZvaWQgSlNET01CdWlsdGluQ29uc3RydWN0b3JCYXNl
OjpjYWxsRnUKICAgICBKU0M6OmNhbGwoJmxleGljYWxHbG9iYWxPYmplY3QsICZmdW5jdGlvbiwg
Y2FsbERhdGEsICZ0aGlzT2JqZWN0LCBhcmd1bWVudHMpOwogfQogCi12b2lkIEpTRE9NQnVpbHRp
bkNvbnN0cnVjdG9yQmFzZTo6dmlzaXRDaGlsZHJlbihKU0M6OkpTQ2VsbCogY2VsbCwgSlNDOjpT
bG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpT
RE9NQnVpbHRpbkNvbnN0cnVjdG9yQmFzZTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDOjpKU0NlbGwq
IGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2Fz
dDxKU0RPTUJ1aWx0aW5Db25zdHJ1Y3RvckJhc2UqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JK
RUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC01Myw2ICs1NCw4IEBAIHZvaWQg
SlNET01CdWlsdGluQ29uc3RydWN0b3JCYXNlOjp2aXNpdEMKICAgICB2aXNpdG9yLmFwcGVuZCh0
aGlzT2JqZWN0LT5tX2luaXRpYWxpemVGdW5jdGlvbik7CiB9CiAKK0RFRklORV9WSVNJVF9DSElM
RFJFTihKU0RPTUJ1aWx0aW5Db25zdHJ1Y3RvckJhc2UpOworCiBKU0M6Oklzb1N1YnNwYWNlKiBK
U0RPTUJ1aWx0aW5Db25zdHJ1Y3RvckJhc2U6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkK
IHsKICAgICByZXR1cm4gJnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0
YSktPmRvbUJ1aWx0aW5Db25zdHJ1Y3RvclNwYWNlKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0RPTUJ1aWx0aW5Db25zdHJ1Y3RvckJhc2UuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJ1aWx0aW5Db25zdHJ1Y3RvckJhc2UuaAko
cmV2aXNpb24gMjcyNzY5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CdWls
dGluQ29uc3RydWN0b3JCYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgog
ICogIENvcHlyaWdodCAoQykgMjAxNSwgMjAxNiBDYW5vbiBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiAgQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCkBAIC00Miw3ICs0Miw3IEBAIHByb3RlY3RlZDoK
ICAgICB7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0M6OkpTQ2Vs
bCosIEpTQzo6U2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAg
ICAgSlNDOjpKU0Z1bmN0aW9uKiBpbml0aWFsaXplRnVuY3Rpb24oKTsKICAgICB2b2lkIHNldElu
aXRpYWxpemVGdW5jdGlvbihKU0M6OlZNJiwgSlNDOjpKU0Z1bmN0aW9uJik7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01HbG9iYWxPYmplY3QuY3BwCShyZXZp
c2lvbiAyNzI3NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9i
amVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDA4LTIwMTggQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDA4LTIwMjEgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yMzgsNyArMjM4LDggQEAgU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCogSlNET01HbG9iYWxPYmplYwogICAgIHJldHVybiBudWxscHRyOwogfQogCi12
b2lkIEpTRE9NR2xvYmFsT2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZp
c2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0RPTUds
b2JhbE9iamVjdDo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNp
dG9yKQogewogICAgIEpTRE9NR2xvYmFsT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTRE9N
R2xvYmFsT2JqZWN0Kj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlz
T2JqZWN0LCBpbmZvKCkpOwpAQCAtMjYwLDYgKzI2MSw4IEBAIHZvaWQgSlNET01HbG9iYWxPYmpl
Y3Q6OnZpc2l0Q2hpbGRyZW4oSlMKICAgICB0aGlzT2JqZWN0LT5tX2J1aWx0aW5JbnRlcm5hbEZ1
bmN0aW9ucy52aXNpdCh2aXNpdG9yKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTRE9N
R2xvYmFsT2JqZWN0KTsKKwogdm9pZCBKU0RPTUdsb2JhbE9iamVjdDo6cHJvbWlzZVJlamVjdGlv
blRyYWNrZXIoSlNHbG9iYWxPYmplY3QqIGpzR2xvYmFsT2JqZWN0LCBKU1Byb21pc2UqIHByb21p
c2UsIEpTUHJvbWlzZVJlamVjdGlvbk9wZXJhdGlvbiBvcGVyYXRpb24pCiB7CiAgICAgLy8gaHR0
cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvd2ViYXBwYXBpcy5odG1sI3RoZS1o
b3N0cHJvbWlzZXJlamVjdGlvbnRyYWNrZXItaW1wbGVtZW50YXRpb24KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01HbG9iYWxPYmplY3QuaAkocmV2aXNpb24gMjcy
NzY5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01HbG9iYWxPYmplY3QuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgt
MjAxOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDgtMjAyMSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTY5LDcgKzY5LDcgQEAgcHVibGljOgogICAgIC8vIE1ha2UgYmlu
ZGluZyBjb2RlIGdlbmVyYXRpb24gZWFzaWVyLgogICAgIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QoKSB7IHJldHVybiB0aGlzOyB9CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxk
cmVuKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRf
Q0hJTERSRU47CiAKICAgICBET01XcmFwcGVyV29ybGQmIHdvcmxkKCkgeyByZXR1cm4gbV93b3Js
ZC5nZXQoKTsgfQogICAgIGJvb2wgd29ybGRJc05vcm1hbCgpIGNvbnN0IHsgcmV0dXJuIG1fd29y
bGRJc05vcm1hbDsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01HdWFy
ZGVkT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNE
T01HdWFyZGVkT2JqZWN0LmgJKHJldmlzaW9uIDI3Mjc2OSkKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTRE9NR3VhcmRlZE9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQwLDcgKzQwLDgg
QEAgcHVibGljOgogCiAgICAgYm9vbCBpc1N1c3BlbmRlZCgpIGNvbnN0IHsgcmV0dXJuICFtX2d1
YXJkZWQgfHwgIWNhbkludm9rZUNhbGxiYWNrKCk7IH0gLy8gVGhlIHdyYXBwZXIgd29ybGQgaGFz
IGdvbmUgYXdheSBvciBhY3RpdmUgRE9NIG9iamVjdHMgaGF2ZSBiZWVuIHN1c3BlbmRlZC4KIAot
ICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikgeyB2aXNp
dG9yLmFwcGVuZChtX2d1YXJkZWQpOyB9CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4K
KyAgICB2b2lkIHZpc2l0QWdncmVnYXRlKFZpc2l0b3ImIHZpc2l0b3IpIHsgdmlzaXRvci5hcHBl
bmQobV9ndWFyZGVkKTsgfQogCiAgICAgSlNDOjpKU1ZhbHVlIGd1YXJkZWRPYmplY3QoKSBjb25z
dCB7IHJldHVybiBtX2d1YXJkZWQuZ2V0KCk7IH0KICAgICBKU0RPTUdsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0KCkgY29uc3QgeyByZXR1cm4gbV9nbG9iYWxPYmplY3QuZ2V0KCk7IH0KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NUXVhZEN1c3RvbS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01RdWFkQ3VzdG9tLmNwcAkocmV2
aXNpb24gMjcyNzY5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01RdWFkQ3Vz
dG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0zMyw3ICszMyw4IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCi12b2lkIEpTRE9NUXVhZDo6dmlzaXRBZGRpdGlvbmFs
Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
Pgordm9pZCBKU0RPTVF1YWQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0
b3IpCiB7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KGNvbnN0X2Nhc3Q8RE9NUG9pbnQqPigm
d3JhcHBlZCgpLnAxKCkpKTsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QoY29uc3RfY2FzdDxE
T01Qb2ludCo+KCZ3cmFwcGVkKCkucDIoKSkpOwpAQCAtNDEsNCArNDIsNyBAQCB2b2lkIEpTRE9N
UXVhZDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oCiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290
KGNvbnN0X2Nhc3Q8RE9NUG9pbnQqPigmd3JhcHBlZCgpLnA0KCkpKTsKIH0KIAotfQordGVtcGxh
dGUgdm9pZCBKU0RPTVF1YWQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEFic3RyYWN0U2xvdFZp
c2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNET01RdWFkOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJl
bihTbG90VmlzaXRvciYpOworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0N1c3RvbS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dDdXN0b20uY3BwCShyZXZpc2lv
biAyNzI3NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0N1c3Rv
bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDA3LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDA3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJp
Z2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgpAQCAtMTE2LDcgKzExNiw4IEBAIEpTQ19ERUZJTkVfQ1VTVE9NX0dFVFRFUihqc0RPTVdpbmRv
d0luc3QKICAgICByZXR1cm4gbm9uQ2FjaGluZ1N0YXRpY0Z1bmN0aW9uR2V0dGVySW1wbDxqc0RP
TVdpbmRvd0luc3RhbmNlRnVuY3Rpb25fcG9zdE1lc3NhZ2UsIDI+KGdsb2JhbE9iamVjdCwgcHJv
cGVydHlOYW1lKTsKIH0KIAotdm9pZCBKU0RPTVdpbmRvdzo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRy
ZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9p
ZCBKU0RPTVdpbmRvdzo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikK
IHsKICAgICBpZiAoRnJhbWUqIGZyYW1lID0gd3JhcHBlZCgpLmZyYW1lKCkpCiAgICAgICAgIHZp
c2l0b3IuYWRkT3BhcXVlUm9vdChmcmFtZSk7CkBAIC0xMjksNiArMTMwLDkgQEAgdm9pZCBKU0RP
TVdpbmRvdzo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZQogICAgIHdyYXBwZWQoKS52aXNpdEpTRXZl
bnRMaXN0ZW5lcnModmlzaXRvcik7CiB9CiAKK3RlbXBsYXRlIHZvaWQgSlNET01XaW5kb3c6OnZp
c2l0QWRkaXRpb25hbENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZv
aWQgSlNET01XaW5kb3c6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CisK
ICNpZiBFTkFCTEUoVVNFUl9NRVNTQUdFX0hBTkRMRVJTKQogSlNDX0RFRklORV9DVVNUT01fR0VU
VEVSKGpzRE9NV2luZG93X3dlYmtpdCwgKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkpCiB7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RlcHJlY2F0ZWRDU1NPTVZhbHVlQ3VzdG9tLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RlcHJlY2F0ZWRD
U1NPTVZhbHVlQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcyNzY5KQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNEZXByZWNhdGVkQ1NTT01WYWx1ZUN1c3RvbS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMTkgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0zNSw3ICszNSw3IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3Bh
Y2UgSlNDOwogCi1ib29sIEpTRGVwcmVjYXRlZENTU09NVmFsdWVPd25lcjo6aXNSZWFjaGFibGVG
cm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBT
bG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikKK2Jvb2wgSlNEZXByZWNh
dGVkQ1NTT01WYWx1ZU93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRs
ZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0
b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCiB7CiAgICAgSlNEZXByZWNhdGVkQ1NTT01WYWx1ZSog
anNDU1NWYWx1ZSA9IGpzQ2FzdDxKU0RlcHJlY2F0ZWRDU1NPTVZhbHVlKj4oaGFuZGxlLnNsb3Qo
KS0+YXNDZWxsKCkpOwogICAgIGlmICghanNDU1NWYWx1ZS0+aGFzQ3VzdG9tUHJvcGVydGllcyhq
c0NTU1ZhbHVlLT52bSgpKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRG9j
dW1lbnRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTRG9jdW1lbnRDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI3NjkpCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0RvY3VtZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOSwgMjAxMSwgMjAxNiwgMjAx
NyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDct
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
QEAgLTkxLDExICs5MSwxNSBAQCBKU1ZhbHVlIHRvSlMoSlNHbG9iYWxPYmplY3QqIGxleGljYWxH
bG9iCiAgICAgcmV0dXJuIHRvSlNOZXdseUNyZWF0ZWQobGV4aWNhbEdsb2JhbE9iamVjdCwgZ2xv
YmFsT2JqZWN0LCBSZWY8RG9jdW1lbnQ+KGRvY3VtZW50KSk7CiB9CiAKLXZvaWQgSlNEb2N1bWVu
dDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0
ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0RvY3VtZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGls
ZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChzdGF0
aWNfY2FzdDxTY3JpcHRFeGVjdXRpb25Db250ZXh0Kj4oJndyYXBwZWQoKSkpOwogfQogCit0ZW1w
bGF0ZSB2b2lkIEpTRG9jdW1lbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEFic3RyYWN0U2xv
dFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNEb2N1bWVudDo6dmlzaXRBZGRpdGlvbmFsQ2hp
bGRyZW4oU2xvdFZpc2l0b3ImKTsKKwogdm9pZCBKU0RvY3VtZW50OjphbmFseXplSGVhcChKU0Nl
bGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCiB7CiAgICAgQmFzZTo6YW5hbHl6ZUhl
YXAoY2VsbCwgYW5hbHl6ZXIpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNF
cnJvckV2ZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0Vycm9yRXZlbnRDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI3NjkpCisrKyBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Vycm9yRXZlbnRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxOCBZdXN1a2UgU3V6dWtp
IDx5dXN1a2VzdXp1a2lAc2xvd3N0YXJ0Lm9yZz4uCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0yOCw5ICsyOSwxMyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgSlNF
cnJvckV2ZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNp
dG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNFcnJvckV2ZW50Ojp2aXNp
dEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHdyYXBwZWQoKS5v
cmlnaW5hbEVycm9yKCkudmlzaXQodmlzaXRvcik7CiB9CiAKK3RlbXBsYXRlIHZvaWQgSlNFcnJv
ckV2ZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3Im
KTsKK3RlbXBsYXRlIHZvaWQgSlNFcnJvckV2ZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihK
U0M6OlNsb3RWaXNpdG9yJik7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRMaXN0ZW5lci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudExpc3RlbmVyLmNwcAkocmV2aXNpb24g
MjcyNzY5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudExpc3RlbmVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAy
MDAxIFBldGVyIEtlbGx5IChwbWtAcG9zdC5jb20pCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIw
MTkgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAw
My0yMDIxIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICog
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJs
aWMKQEAgLTc4LDcgKzc4LDcgQEAgSlNPYmplY3QqIEpTRXZlbnRMaXN0ZW5lcjo6aW5pdGlhbGl6
ZUpTRgogICAgIHJldHVybiBudWxscHRyOwogfQogCi12b2lkIEpTRXZlbnRMaXN0ZW5lcjo6dmlz
aXRKU0Z1bmN0aW9uKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBKU0V2ZW50TGlzdGVuZXI6
OnZpc2l0SlNGdW5jdGlvbihBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIC8v
IElmIG1fd3JhcHBlciBpcyBudWxsLCB3ZSBhcmUgbm90IGtlZXBpbmcgbV9qc0Z1bmN0aW9uIGFs
aXZlLgogICAgIGlmICghbV93cmFwcGVyKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNFdmVudExpc3RlbmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNFdmVudExpc3RlbmVyLmgJKHJldmlzaW9uIDI3Mjc2OSkKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRMaXN0ZW5lci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYg
KzEsNiBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDIwMDEgUGV0ZXIgS2VsbHkgKHBta0Bwb3N0
LmNvbSkKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwpAQCAtNjIsNyArNjIsNyBAQCBwdWJs
aWM6CiAKIHByaXZhdGU6CiAgICAgdmlydHVhbCBKU0M6OkpTT2JqZWN0KiBpbml0aWFsaXplSlNG
dW5jdGlvbihTY3JpcHRFeGVjdXRpb25Db250ZXh0JikgY29uc3Q7Ci0gICAgdm9pZCB2aXNpdEpT
RnVuY3Rpb24oSlNDOjpTbG90VmlzaXRvciYpIGZpbmFsOworICAgIHZvaWQgdmlzaXRKU0Z1bmN0
aW9uKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpIGZpbmFsOwogCiBwcm90ZWN0ZWQ6CiAgICAg
SlNFdmVudExpc3RlbmVyKEpTQzo6SlNPYmplY3QqIGZ1bmN0aW9uLCBKU0M6OkpTT2JqZWN0KiB3
cmFwcGVyLCBib29sIGlzQXR0cmlidXRlLCBET01XcmFwcGVyV29ybGQmKTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRUYXJnZXRDdXN0b20uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRUYXJnZXRDdXN0b20uY3BwCShy
ZXZpc2lvbiAyNzI3NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50VGFy
Z2V0Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDgtMjAxNyBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDgtMjAyMSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTcyLDkgKzcyLDEzIEBAIHN0ZDo6dW5p
cXVlX3B0cjxKU0V2ZW50VGFyZ2V0V3JhcHBlcj4ganMKICAgICByZXR1cm4gbnVsbHB0cjsKIH0K
IAotdm9pZCBKU0V2ZW50VGFyZ2V0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRv
ciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTRXZlbnRUYXJn
ZXQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgd3Jh
cHBlZCgpLnZpc2l0SlNFdmVudExpc3RlbmVycyh2aXNpdG9yKTsKIH0KIAordGVtcGxhdGUgdm9p
ZCBKU0V2ZW50VGFyZ2V0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihBYnN0cmFjdFNsb3RWaXNp
dG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTRXZlbnRUYXJnZXQ6OnZpc2l0QWRkaXRpb25hbENoaWxk
cmVuKFNsb3RWaXNpdG9yJik7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRmV0Y2hFdmVudEN1c3RvbS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNGZXRjaEV2ZW50Q3VzdG9tLmNwcAkocmV2
aXNpb24gMjcyNzY5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNGZXRjaEV2ZW50
Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMCwxMSArMzAsMTUgQEAKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi12b2lkIEpTRmV0Y2hFdmVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlND
OjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lk
IEpTRmV0Y2hFdmVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikK
IHsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QoJndyYXBwZWQoKS5yZXF1ZXN0KCkpOwogfQog
Ci19Cit0ZW1wbGF0ZSB2b2lkIEpTRmV0Y2hFdmVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4o
SlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTRmV0Y2hFdmVudDo6
dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYpOworCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCiAKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNIVE1MQ2FudmFzRWxlbWVudEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNIVE1MQ2FudmFzRWxlbWVudEN1c3RvbS5jcHAJKHJldmlzaW9uIDI3
Mjc2OSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTENhbnZhc0VsZW1lbnRD
dXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMjAtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMxLDkgKzMxLDEzIEBACiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAotdm9pZCBKU0hUTUxDYW52YXNFbGVtZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJl
bihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4K
K3ZvaWQgSlNIVE1MQ2FudmFzRWxlbWVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRv
ciYgdmlzaXRvcikKIHsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qoc3RhdGljX2Nhc3Q8Q2Fu
dmFzQmFzZSo+KCZ3cmFwcGVkKCkpKTsKIH0KIAordGVtcGxhdGUgdm9pZCBKU0hUTUxDYW52YXNF
bGVtZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3Im
KTsKK3RlbXBsYXRlIHZvaWQgSlNIVE1MQ2FudmFzRWxlbWVudDo6dmlzaXRBZGRpdGlvbmFsQ2hp
bGRyZW4oSlNDOjpTbG90VmlzaXRvciYpOworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxUZW1wbGF0ZUVsZW1lbnRDdXN0b20u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTFRlbXBs
YXRlRWxlbWVudEN1c3RvbS5jcHAJKHJldmlzaW9uIDI3Mjc2OSkKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTSFRNTFRlbXBsYXRlRWxlbWVudEN1c3RvbS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQpA
QCAtMzcsMTAgKzM4LDE0IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2Ug
SlNDOwogCi12b2lkIEpTSFRNTFRlbXBsYXRlRWxlbWVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRy
ZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+
Cit2b2lkIEpTSFRNTFRlbXBsYXRlRWxlbWVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlz
aXRvciYgdmlzaXRvcikKIHsKICAgICBpZiAoYXV0byogY29udGVudCA9IHdyYXBwZWQoKS5jb250
ZW50SWZBdmFpbGFibGUoKSkKICAgICAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHJvb3QoY29u
dGVudCkpOwogfQogCit0ZW1wbGF0ZSB2b2lkIEpTSFRNTFRlbXBsYXRlRWxlbWVudDo6dmlzaXRB
ZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2
b2lkIEpTSFRNTFRlbXBsYXRlRWxlbWVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpT
bG90VmlzaXRvciYpOworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0hpc3RvcnlDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSGlzdG9yeUN1c3RvbS5jcHAJKHJldmlzaW9uIDI3Mjc2
OSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSGlzdG9yeUN1c3RvbS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LTIw
MTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4
LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC00NCw5ICs0NCwxMyBAQCBKU1ZhbHVlIEpTSGlzdG9yeTo6c3RhdGUo
SlNHbG9iYWxPYmplY3QmCiAgICAgfSk7CiB9CiAKLXZvaWQgSlNIaXN0b3J5Ojp2aXNpdEFkZGl0
aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZp
c2l0b3I+Cit2b2lkIEpTSGlzdG9yeTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYg
dmlzaXRvcikKIHsKICAgICB3cmFwcGVkKCkuY2FjaGVkU3RhdGVGb3JHQygpLnZpc2l0KHZpc2l0
b3IpOwogfQogCit0ZW1wbGF0ZSB2b2lkIEpTSGlzdG9yeTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRy
ZW4oQWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU0hpc3Rvcnk6OnZpc2l0
QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCQ3Vyc29yQ3VzdG9tLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQkN1cnNvckN1
c3RvbS5jcHAJKHJldmlzaW9uIDI3Mjc2OSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTSURCQ3Vyc29yQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01MCw3ICs1MCw4IEBAIEpTQzo6
SlNWYWx1ZSBKU0lEQkN1cnNvcjo6cHJpbWFyeUtleShKU0MKICAgICB9KTsKIH0KIAotdm9pZCBK
U0lEQkN1cnNvcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3Ip
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0lEQkN1cnNvcjo6dmlzaXRBZGRp
dGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBhdXRvJiBjdXJzb3IgPSB3
cmFwcGVkKCk7CiAgICAgaWYgKGF1dG8qIHJlcXVlc3QgPSBjdXJzb3IucmVxdWVzdCgpKQpAQCAt
NTksNiArNjAsOSBAQCB2b2lkIEpTSURCQ3Vyc29yOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlCiAg
ICAgY3Vyc29yLnByaW1hcnlLZXlXcmFwcGVyKCkudmlzaXQodmlzaXRvcik7CiB9CiAKK3RlbXBs
YXRlIHZvaWQgSlNJREJDdXJzb3I6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEFic3RyYWN0U2xv
dFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNJREJDdXJzb3I6OnZpc2l0QWRkaXRpb25hbENo
aWxkcmVuKFNsb3RWaXNpdG9yJik7CisKIEpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkpT
R2xvYmFsT2JqZWN0KiwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmPElEQkN1
cnNvcj4mJiBjdXJzb3IpCiB7CiAgICAgaWYgKGlzPElEQkN1cnNvcldpdGhWYWx1ZT4oY3Vyc29y
KSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCQ3Vyc29yV2l0aFZhbHVl
Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lE
QkN1cnNvcldpdGhWYWx1ZUN1c3RvbS5jcHAJKHJldmlzaW9uIDI3Mjc2OSkKKysrIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCQ3Vyc29yV2l0aFZhbHVlQ3VzdG9tLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC00MywxMiArNDMsMTYgQEAgSlNDOjpKU1ZhbHVlIEpTSURCQ3Vyc29yV2l0aFZhbHVl
Ojp2YWx1ZQogICAgIH0pOwogfQogCi12b2lkIEpTSURCQ3Vyc29yV2l0aFZhbHVlOjp2aXNpdEFk
ZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1l
IFZpc2l0b3I+Cit2b2lkIEpTSURCQ3Vyc29yV2l0aFZhbHVlOjp2aXNpdEFkZGl0aW9uYWxDaGls
ZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTSURCQ3Vyc29yOjp2aXNpdEFkZGl0aW9u
YWxDaGlsZHJlbih2aXNpdG9yKTsKICAgICB3cmFwcGVkKCkudmFsdWVXcmFwcGVyKCkudmlzaXQo
dmlzaXRvcik7CiB9CiAKK3RlbXBsYXRlIHZvaWQgSlNJREJDdXJzb3JXaXRoVmFsdWU6OnZpc2l0
QWRkaXRpb25hbENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQg
SlNJREJDdXJzb3JXaXRoVmFsdWU6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9y
Jik7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVE
X0RBVEFCQVNFKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJJbmRleEN1
c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJJ
bmRleEN1c3RvbS5jcHAJKHJldmlzaW9uIDI3Mjc2OSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTSURCSW5kZXhDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM0LDExICszNCwxNSBA
QAogbmFtZXNwYWNlIFdlYkNvcmUgewogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAotdm9pZCBKU0lE
QkluZGV4Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3Rl
bXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTSURCSW5kZXg6OnZpc2l0QWRkaXRpb25h
bENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290
KHN0YXRpY19jYXN0PElEQkluZGV4Jj4od3JhcHBlZCgpKS5vYmplY3RTdG9yZUFzT3BhcXVlUm9v
dCgpKTsKIH0KIAordGVtcGxhdGUgdm9pZCBKU0lEQkluZGV4Ojp2aXNpdEFkZGl0aW9uYWxDaGls
ZHJlbihBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTSURCSW5kZXg6OnZp
c2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CisKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQpJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJPYmplY3RTdG9yZUN1c3RvbS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJPYmplY3RTdG9yZUN1c3RvbS5j
cHAJKHJldmlzaW9uIDI3Mjc2OSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURC
T2JqZWN0U3RvcmVDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoK
ICAqIENvcHlyaWdodCAoQykgMjAxMiBNaWNoYWVsIFBydWV0dCA8bWljaGFlbEA2OGsub3JnPgor
ICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKQEAgLTM2LDExICszNywxNSBAQAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAotdm9pZCBKU0lEQk9iamVj
dFN0b3JlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3Rl
bXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTSURCT2JqZWN0U3RvcmU6OnZpc2l0QWRk
aXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgc3RhdGljX2Nhc3Q8SURC
T2JqZWN0U3RvcmUmPih3cmFwcGVkKCkpLnZpc2l0UmVmZXJlbmNlZEluZGV4ZXModmlzaXRvcik7
CiB9CiAKLX0KK3RlbXBsYXRlIHZvaWQgSlNJREJPYmplY3RTdG9yZTo6dmlzaXRBZGRpdGlvbmFs
Q2hpbGRyZW4oQWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU0lEQk9iamVj
dFN0b3JlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYpOworCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNJREJSZXF1ZXN0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0lEQlJlcXVlc3RDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI3NjkpCisrKyBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQlJlcXVlc3RDdXN0b20uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTg5LDEyICs4OSwxNyBAQCBKU0M6OkpTVmFsdWUgSlNJREJSZXF1ZXN0OjpyZXN1bHQo
SlNDOjpKCiAgICAgfSk7CiB9CiAKLXZvaWQgSlNJREJSZXF1ZXN0Ojp2aXNpdEFkZGl0aW9uYWxD
aGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+
Cit2b2lkIEpTSURCUmVxdWVzdDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlz
aXRvcikKIHsKICAgICBhdXRvJiByZXF1ZXN0ID0gd3JhcHBlZCgpOwogICAgIHJlcXVlc3QucmVz
dWx0V3JhcHBlcigpLnZpc2l0KHZpc2l0b3IpOwogICAgIHJlcXVlc3QuY3Vyc29yV3JhcHBlcigp
LnZpc2l0KHZpc2l0b3IpOwogfQogCi19Cit0ZW1wbGF0ZSB2b2lkIEpTSURCUmVxdWVzdDo6dmlz
aXRBZGRpdGlvbmFsQ2hpbGRyZW4oQWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9p
ZCBKU0lEQlJlcXVlc3Q6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwogI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFC
QVNFKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJUcmFuc2FjdGlvbkN1
c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJU
cmFuc2FjdGlvbkN1c3RvbS5jcHAJKHJldmlzaW9uIDI3Mjc2OSkKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTSURCVHJhbnNhY3Rpb25DdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM0
LDExICszNCwxNSBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogdXNpbmcgbmFtZXNwYWNlIEpTQzsK
IAotdm9pZCBKU0lEQlRyYW5zYWN0aW9uOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90Vmlz
aXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTSURCVHJh
bnNhY3Rpb246OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAg
ICAgc3RhdGljX2Nhc3Q8SURCVHJhbnNhY3Rpb24mPih3cmFwcGVkKCkpLnZpc2l0UmVmZXJlbmNl
ZE9iamVjdFN0b3Jlcyh2aXNpdG9yKTsKIH0KIAotfQordGVtcGxhdGUgdm9pZCBKU0lEQlRyYW5z
YWN0aW9uOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0
ZW1wbGF0ZSB2b2lkIEpTSURCVHJhbnNhY3Rpb246OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNs
b3RWaXNpdG9yJik7CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0ludGVyc2VjdGlvbk9ic2VydmVyQ3VzdG9tLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0ludGVyc2VjdGlv
bk9ic2VydmVyQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcyNzY5KQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNJbnRlcnNlY3Rpb25PYnNlcnZlckN1c3RvbS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDIwIElnYWxpYSBTLkwu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMCwxMCArMzEsMTQgQEAKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIEpTSW50ZXJzZWN0aW9uT2JzZXJ2ZXI6OnZpc2l0QWRk
aXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBl
bmFtZSBWaXNpdG9yPgordm9pZCBKU0ludGVyc2VjdGlvbk9ic2VydmVyOjp2aXNpdEFkZGl0aW9u
YWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGlmIChhdXRvKiBjYWxsYmFjayA9
IHdyYXBwZWQoKS5jYWxsYmFja0NvbmN1cnJlbnRseSgpKQogICAgICAgICBjYWxsYmFjay0+dmlz
aXRKU0Z1bmN0aW9uKHZpc2l0b3IpOwogfQogCi19Cit0ZW1wbGF0ZSB2b2lkIEpTSW50ZXJzZWN0
aW9uT2JzZXJ2ZXI6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6QWJzdHJhY3RTbG90Vmlz
aXRvciYpOwordGVtcGxhdGUgdm9pZCBKU0ludGVyc2VjdGlvbk9ic2VydmVyOjp2aXNpdEFkZGl0
aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJik7CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW50ZXJzZWN0aW9uT2JzZXJ2
ZXJFbnRyeUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNJbnRlcnNlY3Rpb25PYnNlcnZlckVudHJ5Q3VzdG9tLmNwcAkocmV2aXNpb24gMjcyNzY5
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJbnRlcnNlY3Rpb25PYnNlcnZlckVu
dHJ5Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5
cmlnaHQgKEMpIDIwMTggR29vZ2xlIExMQy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMwLDcgKzMxLDggQEAKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi12b2lkIEpTSW50ZXJzZWN0aW9uT2JzZXJ2ZXJFbnRyeTo6dmlzaXRBZGRpdGlvbmFs
Q2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZp
c2l0b3I+Cit2b2lkIEpTSW50ZXJzZWN0aW9uT2JzZXJ2ZXJFbnRyeTo6dmlzaXRBZGRpdGlvbmFs
Q2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qo
cm9vdCh3cmFwcGVkKCkudGFyZ2V0KCkpKTsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qod3Jh
cHBlZCgpLmJvdW5kaW5nQ2xpZW50UmVjdCgpKTsKQEAgLTM4LDQgKzQwLDcgQEAgdm9pZCBKU0lu
dGVyc2VjdGlvbk9ic2VydmVyRW50cnk6OnZpc2l0QQogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9v
dCh3cmFwcGVkKCkucm9vdEJvdW5kcygpKTsKIH0KIAotfQordGVtcGxhdGUgdm9pZCBKU0ludGVy
c2VjdGlvbk9ic2VydmVyRW50cnk6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6QWJzdHJh
Y3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU0ludGVyc2VjdGlvbk9ic2VydmVyRW50
cnk6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImKTsKKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNZXNz
YWdlQ2hhbm5lbEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNNZXNzYWdlQ2hhbm5lbEN1c3RvbS5jcHAJKHJldmlzaW9uIDI3Mjc2OSkKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWVzc2FnZUNoYW5uZWxDdXN0b20uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAw
OSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgt
MjAyMSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTMzLDcgKzMzLDggQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12
b2lkIEpTTWVzc2FnZUNoYW5uZWw6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZp
c2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU01lc3Nh
Z2VDaGFubmVsOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewog
ICAgIGlmIChNZXNzYWdlUG9ydCogcG9ydCA9IHdyYXBwZWQoKS5wb3J0MSgpKQogICAgICAgICB2
aXNpdG9yLmFkZE9wYXF1ZVJvb3QocG9ydCk7CkBAIC00Miw2ICs0Myw5IEBAIHZvaWQgSlNNZXNz
YWdlQ2hhbm5lbDo6dmlzaXRBZGRpdGlvbmFsQ2gKICAgICAgICAgdmlzaXRvci5hZGRPcGFxdWVS
b290KHBvcnQpOwogfQogCit0ZW1wbGF0ZSB2b2lkIEpTTWVzc2FnZUNoYW5uZWw6OnZpc2l0QWRk
aXRpb25hbENoaWxkcmVuKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9p
ZCBKU01lc3NhZ2VDaGFubmVsOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNp
dG9yJik7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShDSEFO
TkVMX01FU1NBR0lORykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWVzc2Fn
ZUV2ZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU01lc3NhZ2VFdmVudEN1c3RvbS5jcHAJKHJldmlzaW9uIDI3Mjc2OSkKKysrIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWVzc2FnZUV2ZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOS0yMDE4IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDIxIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKQEAgLTcwLDcgKzcwLDggQEAgSlNDOjpKU1ZhbHVlIEpTTWVzc2FnZUV2ZW50OjpkYXRh
KEpTQzo6SgogICAgIH0pOwogfQogCi12b2lkIEpTTWVzc2FnZUV2ZW50Ojp2aXNpdEFkZGl0aW9u
YWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUg
VmlzaXRvcj4KK3ZvaWQgSlNNZXNzYWdlRXZlbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZp
c2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgV1RGOjpzd2l0Y2hPbih3cmFwcGVkKCkuZGF0YSgpLCBb
JnZpc2l0b3JdIChjb25zdCBKU1ZhbHVlSW5XcmFwcGVkT2JqZWN0JiBkYXRhKSB7CiAgICAgICAg
IGRhdGEudmlzaXQodmlzaXRvcik7CkBAIC04NCw0ICs4NSw3IEBAIHZvaWQgSlNNZXNzYWdlRXZl
bnQ6OnZpc2l0QWRkaXRpb25hbENoaWwKICAgICB3cmFwcGVkKCkuY2FjaGVkUG9ydHMoKS52aXNp
dCh2aXNpdG9yKTsKIH0KIAordGVtcGxhdGUgdm9pZCBKU01lc3NhZ2VFdmVudDo6dmlzaXRBZGRp
dGlvbmFsQ2hpbGRyZW4oSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lk
IEpTTWVzc2FnZUV2ZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9y
Jik7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTTWVzc2FnZVBvcnRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTTWVzc2FnZVBvcnRDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI3Njkp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01lc3NhZ2VQb3J0Q3VzdG9tLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgt
MjAwOSwgMjAxNiBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDgtMjAyMSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKiBDb3B5cmln
aHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKQEAgLTMxLDExICszMSwxNSBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogdXNpbmcgbmFt
ZXNwYWNlIEpTQzsKIAotdm9pZCBKU01lc3NhZ2VQb3J0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJl
bihTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lk
IEpTTWVzc2FnZVBvcnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3Ip
CiB7CiAgICAgLy8gSWYgd2UgaGF2ZSBhIGxvY2FsbHkgZW50YW5nbGVkIHBvcnQsIHdlIGNhbiBk
aXJlY3RseSBtYXJrIGl0IGFzIHJlYWNoYWJsZS4gUG9ydHMgdGhhdCBhcmUgcmVtb3RlbHkgZW50
YW5nbGVkIGFyZSBtYXJrZWQgaW4tdXNlIGJ5IG1hcmtBY3RpdmVPYmplY3RzRm9yQ29udGV4dCgp
LgogICAgIGlmIChNZXNzYWdlUG9ydCogcG9ydCA9IHdyYXBwZWQoKS5sb2NhbGx5RW50YW5nbGVk
UG9ydCgpKQogICAgICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QocG9ydCk7CiB9CiAKK3RlbXBs
YXRlIHZvaWQgSlNNZXNzYWdlUG9ydDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oQWJzdHJhY3RT
bG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU01lc3NhZ2VQb3J0Ojp2aXNpdEFkZGl0aW9u
YWxDaGlsZHJlbihTbG90VmlzaXRvciYpOworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU011dGF0aW9uT2JzZXJ2ZXJDdXN0b20uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTXV0YXRpb25PYnNl
cnZlckN1c3RvbS5jcHAJKHJldmlzaW9uIDI3Mjc2OSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTTXV0YXRpb25PYnNlcnZlckN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
NiArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQpAQCAtMzks
MTIgKzM5LDE2IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2UgSlNDOwog
Ci12b2lkIEpTTXV0YXRpb25PYnNlcnZlcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpT
bG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpT
TXV0YXRpb25PYnNlcnZlcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRv
cikKIHsKICAgICB3cmFwcGVkKCkuY2FsbGJhY2soKS52aXNpdEpTRnVuY3Rpb24odmlzaXRvcik7
CiB9CiAKLWJvb2wgSlNNdXRhdGlvbk9ic2VydmVyT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1
ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgU2xvdFZpc2l0
b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKnJlYXNvbikKK3RlbXBsYXRlIHZvaWQgSlNNdXRhdGlv
bk9ic2VydmVyOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OkFic3RyYWN0U2xvdFZpc2l0
b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNNdXRhdGlvbk9ic2VydmVyOjp2aXNpdEFkZGl0aW9uYWxD
aGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJik7CisKK2Jvb2wgSlNNdXRhdGlvbk9ic2VydmVyT3du
ZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4g
aGFuZGxlLCB2b2lkKiwgQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioq
cmVhc29uKQogewogICAgIGZvciAoYXV0byogbm9kZSA6IGpzQ2FzdDxKU011dGF0aW9uT2JzZXJ2
ZXIqPihoYW5kbGUuc2xvdCgpLT5hc0NlbGwoKSktPndyYXBwZWQoKS5vYnNlcnZlZE5vZGVzKCkp
IHsKICAgICAgICAgaWYgKHZpc2l0b3IuY29udGFpbnNPcGFxdWVSb290KHJvb3Qobm9kZSkpKSB7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU011dGF0aW9uUmVjb3JkQ3VzdG9t
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU011dGF0aW9u
UmVjb3JkQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcyNzY5KQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNNdXRhdGlvblJlY29yZEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOC0yMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzAsOSAr
MzAsMTMgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIEpTTXV0YXRpb25SZWNvcmQ6
OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1w
bGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU011dGF0aW9uUmVjb3JkOjp2aXNpdEFkZGl0
aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHdyYXBwZWQoKS52aXNpdE5v
ZGVzQ29uY3VycmVudGx5KHZpc2l0b3IpOwogfQotICAgIAorCit0ZW1wbGF0ZSB2b2lkIEpTTXV0
YXRpb25SZWNvcmQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6QWJzdHJhY3RTbG90Vmlz
aXRvciYpOwordGVtcGxhdGUgdm9pZCBKU011dGF0aW9uUmVjb3JkOjp2aXNpdEFkZGl0aW9uYWxD
aGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJik7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTmF2aWdhdG9yQ3VzdG9tLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05hdmlnYXRvckN1c3RvbS5j
cHAJKHJldmlzaW9uIDI3Mjc2OSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTmF2
aWdhdG9yQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMiwxMSArMzIsMTUgQEAKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi12b2lkIEpTTmF2aWdhdG9yOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJl
bihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4K
K3ZvaWQgSlNOYXZpZ2F0b3I6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0
b3IpCiB7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHN0YXRpY19jYXN0PE5hdmlnYXRvckJh
c2UqPigmd3JhcHBlZCgpKSk7CiB9CiAKK3RlbXBsYXRlIHZvaWQgSlNOYXZpZ2F0b3I6OnZpc2l0
QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUg
dm9pZCBKU05hdmlnYXRvcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRv
ciYpOworCiAjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKIEpTQzo6SlNWYWx1ZSBKU05hdmlnYXRv
cjo6Z2V0VXNlck1lZGlhKEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3Qs
IEpTQzo6Q2FsbEZyYW1lJiBjYWxsRnJhbWUpCiB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU05vZGVDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTTm9kZUN1c3RvbS5jcHAJKHJldmlzaW9uIDI3Mjc2OSkKKysrIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA5LTIwMTAsIDIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC03NCw3ICs3NCw4IEBAIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKIHVzaW5nIG5h
bWVzcGFjZSBIVE1MTmFtZXM7CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBpc1JlYWNoYWJsZUZyb21E
T00oTm9kZSogbm9kZSwgU2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24p
CisvL3N0YXRpYyBpbmxpbmUgYm9vbCBpc1JlYWNoYWJsZUZyb21ET00oTm9kZSogbm9kZSwgU2xv
dFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCitzdGF0aWMgaW5saW5lIGJv
b2wgaXNSZWFjaGFibGVGcm9tRE9NKE5vZGUqIG5vZGUsIEFic3RyYWN0U2xvdFZpc2l0b3ImIHZp
c2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCiB7CiAgICAgaWYgKCFub2RlLT5pc0Nvbm5lY3Rl
ZCgpKSB7CiAgICAgICAgIGlmIChpczxFbGVtZW50Pigqbm9kZSkpIHsKQEAgLTEyMyw3ICsxMjQs
NyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaXNSZWFjaGFibGVGcm9tRE9NKE5vCiAgICAgcmV0dXJu
IHZpc2l0b3IuY29udGFpbnNPcGFxdWVSb290KHJvb3Qobm9kZSkpOwogfQogCi1ib29sIEpTTm9k
ZU93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25v
d24+IGhhbmRsZSwgdm9pZCosIFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVh
c29uKQorYm9vbCBKU05vZGVPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpI
YW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBBYnN0cmFjdFNsb3RWaXNpdG9yJiB2
aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQogewogICAgIEpTTm9kZSoganNOb2RlID0ganND
YXN0PEpTTm9kZSo+KGhhbmRsZS5zbG90KCktPmFzQ2VsbCgpKTsKICAgICByZXR1cm4gaXNSZWFj
aGFibGVGcm9tRE9NKCZqc05vZGUtPndyYXBwZWQoKSwgdmlzaXRvciwgcmVhc29uKTsKQEAgLTEz
NiwxMSArMTM3LDE1IEBAIEpTU2NvcGUqIEpTTm9kZTo6cHVzaEV2ZW50SGFuZGxlclNjb3BlKEoK
ICAgICByZXR1cm4gbm9kZTsKIH0KIAotdm9pZCBKU05vZGU6OnZpc2l0QWRkaXRpb25hbENoaWxk
cmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3Zv
aWQgSlNOb2RlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewog
ICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChyb290KHdyYXBwZWQoKSkpOwogfQogCit0ZW1wbGF0
ZSB2b2lkIEpTTm9kZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oQWJzdHJhY3RTbG90VmlzaXRv
ciYpOwordGVtcGxhdGUgdm9pZCBKU05vZGU6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RW
aXNpdG9yJik7CisKIHN0YXRpYyBBTFdBWVNfSU5MSU5FIEpTVmFsdWUgY3JlYXRlV3JhcHBlcklu
bGluZShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNET01HbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgUmVmPE5vZGU+JiYgbm9kZSkKIHsKICAgICBBU1NFUlQoIWdldENh
Y2hlZFdyYXBwZXIoZ2xvYmFsT2JqZWN0LT53b3JsZCgpLCBub2RlKSk7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVJdGVyYXRvckN1c3RvbS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlSXRlcmF0b3JDdXN0b20uY3BwCShy
ZXZpc2lvbiAyNzI3NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVJdGVy
YXRvckN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDA2LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjUsMTAgKzI1LDE0IEBACiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotdm9pZCBKU05vZGVJdGVyYXRvcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRy
ZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+
Cit2b2lkIEpTTm9kZUl0ZXJhdG9yOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2
aXNpdG9yKQogewogICAgIGlmIChOb2RlRmlsdGVyKiBmaWx0ZXIgPSB3cmFwcGVkKCkuZmlsdGVy
KCkpCiAgICAgICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChmaWx0ZXIpOwogfQogCi19Cit0ZW1w
bGF0ZSB2b2lkIEpTTm9kZUl0ZXJhdG9yOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OkFi
c3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNOb2RlSXRlcmF0b3I6OnZpc2l0
QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImKTsKKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlTGlzdEN1c3Rv
bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlTGlz
dEN1c3RvbS5jcHAJKHJldmlzaW9uIDI3Mjc2OSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTTm9kZUxpc3RDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAwNy0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzcsNyArMzcsNyBA
QAogbmFtZXNwYWNlIFdlYkNvcmUgewogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAotYm9vbCBKU05v
ZGVMaXN0T3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6
VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgU2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIq
KiByZWFzb24pCitib29sIEpTTm9kZUxpc3RPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9v
dHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBBYnN0cmFjdFNsb3RW
aXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQogewogICAgIEpTTm9kZUxpc3Qq
IGpzTm9kZUxpc3QgPSBqc0Nhc3Q8SlNOb2RlTGlzdCo+KGhhbmRsZS5zbG90KCktPmFzQ2VsbCgp
KTsKICAgICBpZiAoIWpzTm9kZUxpc3QtPmhhc0N1c3RvbVByb3BlcnRpZXMoanNOb2RlTGlzdC0+
dm0oKSkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU09mZnNjcmVlbkNhbnZh
c1JlbmRlcmluZ0NvbnRleHQyREN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNPZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRDdXN0b20u
Y3BwCShyZXZpc2lvbiAyNzI3NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU09m
ZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyREN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMzEsNyArMzEsNyBA
QCBpbmxpbmUgdm9pZCogcm9vdChPZmZzY3JlZW5DYW52YXMqIGNhbnZhCiAgICAgcmV0dXJuIGNh
bnZhczsKIH0KIAotYm9vbCBKU09mZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRE93bmVy
Ojppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhh
bmRsZSwgdm9pZCosIFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQor
Ym9vbCBKU09mZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRE93bmVyOjppc1JlYWNoYWJs
ZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCos
IEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCiB7CiAg
ICAgaWYgKFVOTElLRUxZKHJlYXNvbikpCiAgICAgICAgICpyZWFzb24gPSAiQ2FudmFzIGlzIG9w
YXF1ZSByb290IjsKQEAgLTQxLDExICs0MSwxNSBAQCBib29sIEpTT2Zmc2NyZWVuQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJECiAgICAgcmV0dXJuIHZpc2l0b3IuY29udGFpbnNPcGFxdWVSb290KHJv
b3QpOwogfQogCi12b2lkIEpTT2Zmc2NyZWVuQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjp2aXNp
dEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVu
YW1lIFZpc2l0b3I+Cit2b2lkIEpTT2Zmc2NyZWVuQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjp2
aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHZpc2l0b3Iu
YWRkT3BhcXVlUm9vdChyb290KCZ3cmFwcGVkKCkuY2FudmFzKCkpKTsKIH0KIAordGVtcGxhdGUg
dm9pZCBKU09mZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6dmlzaXRBZGRpdGlvbmFs
Q2hpbGRyZW4oQWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU09mZnNjcmVl
bkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZp
c2l0b3ImKTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUGFpbnRSZW5kZXJpbmdDb250ZXh0MkRDdXN0b20uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUGFpbnRSZW5kZXJp
bmdDb250ZXh0MkRDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI3NjkpCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU1BhaW50UmVuZGVyaW5nQ29udGV4dDJEQ3VzdG9tLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0zNiw3ICszNiw3IEBAIGlubGluZSB2b2lkKiByb290KEN1c3RvbVBhaW50Q2FudmFz
KiBjYW4KICAgICByZXR1cm4gY2FudmFzOwogfQogCi1ib29sIEpTUGFpbnRSZW5kZXJpbmdDb250
ZXh0MkRPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpV
bmtub3duPiBoYW5kbGUsIHZvaWQqLCBTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioq
IHJlYXNvbikKK2Jvb2wgSlNQYWludFJlbmRlcmluZ0NvbnRleHQyRE93bmVyOjppc1JlYWNoYWJs
ZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCos
IEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCiB7CiAg
ICAgaWYgKFVOTElLRUxZKHJlYXNvbikpCiAgICAgICAgICpyZWFzb24gPSAiQ2FudmFzIGlzIG9w
YXF1ZSByb290IjsKQEAgLTQ2LDExICs0NiwxNSBAQCBib29sIEpTUGFpbnRSZW5kZXJpbmdDb250
ZXh0MkRPd25lcjo6aXNSCiAgICAgcmV0dXJuIHZpc2l0b3IuY29udGFpbnNPcGFxdWVSb290KHJv
b3QpOwogfQogCi12b2lkIEpTUGFpbnRSZW5kZXJpbmdDb250ZXh0MkQ6OnZpc2l0QWRkaXRpb25h
bENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRv
cj4KK3ZvaWQgSlNQYWludFJlbmRlcmluZ0NvbnRleHQyRDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRy
ZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qocm9vdCgm
d3JhcHBlZCgpLmNhbnZhcygpKSk7CiB9CiAKK3RlbXBsYXRlIHZvaWQgSlNQYWludFJlbmRlcmlu
Z0NvbnRleHQyRDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oQWJzdHJhY3RTbG90VmlzaXRvciYp
OwordGVtcGxhdGUgdm9pZCBKU1BhaW50UmVuZGVyaW5nQ29udGV4dDJEOjp2aXNpdEFkZGl0aW9u
YWxDaGlsZHJlbihTbG90VmlzaXRvciYpOworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAjZW5k
aWYKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNQYWludFdvcmtsZXRHbG9i
YWxTY29wZUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNQYWludFdvcmtsZXRHbG9iYWxTY29wZUN1c3RvbS5jcHAJKHJldmlzaW9uIDI3Mjc2OSkK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUGFpbnRXb3JrbGV0R2xvYmFsU2NvcGVD
dXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTgtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMxLDcgKzMxLDggQEAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKLXZvaWQgSlNQYWludFdvcmtsZXRHbG9iYWxTY29w
ZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3Rl
bXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTUGFpbnRXb3JrbGV0R2xvYmFsU2NvcGU6
OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0byBs
b2NrZXIgPSBob2xkTG9jayh3cmFwcGVkKCkucGFpbnREZWZpbml0aW9uTG9jaygpKTsKICAgICBm
b3IgKGF1dG8mIHJlZ2lzdGVyZWQgOiB3cmFwcGVkKCkucGFpbnREZWZpbml0aW9uTWFwKCkudmFs
dWVzKCkpIHsKQEAgLTQwLDUgKzQxLDkgQEAgdm9pZCBKU1BhaW50V29ya2xldEdsb2JhbFNjb3Bl
Ojp2aXNpdEFkZAogICAgIH0KIH0KIAotfQordGVtcGxhdGUgdm9pZCBKU1BhaW50V29ya2xldEds
b2JhbFNjb3BlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OkFic3RyYWN0U2xvdFZpc2l0
b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNQYWludFdvcmtsZXRHbG9iYWxTY29wZTo6dmlzaXRBZGRp
dGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYpOworCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCisKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNQYXltZW50
TWV0aG9kQ2hhbmdlRXZlbnRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTUGF5bWVudE1ldGhvZENoYW5nZUV2ZW50Q3VzdG9tLmNwcAkocmV2aXNp
b24gMjcyNzY5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNQYXltZW50TWV0aG9k
Q2hhbmdlRXZlbnRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQxLDcgKzQxLDggQEAgSlNDOjpK
U1ZhbHVlIEpTUGF5bWVudE1ldGhvZENoYW5nZUV2ZW50OgogICAgIH0pOwogfQogCi12b2lkIEpT
UGF5bWVudE1ldGhvZENoYW5nZUV2ZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNs
b3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNQ
YXltZW50TWV0aG9kQ2hhbmdlRXZlbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3Im
IHZpc2l0b3IpCiB7CiAgICAgV1RGOjpzd2l0Y2hPbih3cmFwcGVkKCkubWV0aG9kRGV0YWlscygp
LCBbJnZpc2l0b3JdKGNvbnN0IEpTVmFsdWVJbldyYXBwZWRPYmplY3QmIG1ldGhvZERldGFpbHMp
IHsKICAgICAgICAgbWV0aG9kRGV0YWlscy52aXNpdCh2aXNpdG9yKTsKQEAgLTUxLDYgKzUyLDkg
QEAgdm9pZCBKU1BheW1lbnRNZXRob2RDaGFuZ2VFdmVudDo6dmlzaXRBZAogICAgIHdyYXBwZWQo
KS5jYWNoZWRNZXRob2REZXRhaWxzKCkudmlzaXQodmlzaXRvcik7CiB9CiAKK3RlbXBsYXRlIHZv
aWQgSlNQYXltZW50TWV0aG9kQ2hhbmdlRXZlbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpT
Qzo6QWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU1BheW1lbnRNZXRob2RD
aGFuZ2VFdmVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYpOwor
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoUEFZTUVOVF9SRVFV
RVNUKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNQYXltZW50UmVzcG9uc2VD
dXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUGF5
bWVudFJlc3BvbnNlQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcyNzY5KQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNQYXltZW50UmVzcG9uc2VDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTM3LDExICszNywxNSBAQCBKU0M6OkpTVmFsdWUgSlNQYXltZW50UmVzcG9uc2U6OmRldGFpbHMo
CiAgICAgfSk7CiB9CiAKLXZvaWQgSlNQYXltZW50UmVzcG9uc2U6OnZpc2l0QWRkaXRpb25hbENo
aWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNp
dG9yPgordm9pZCBKU1BheW1lbnRSZXNwb25zZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlz
aXRvciYgdmlzaXRvcikKIHsKICAgICB3cmFwcGVkKCkuY2FjaGVkRGV0YWlscygpLnZpc2l0KHZp
c2l0b3IpOwogfQogCit0ZW1wbGF0ZSB2b2lkIEpTUGF5bWVudFJlc3BvbnNlOjp2aXNpdEFkZGl0
aW9uYWxDaGlsZHJlbihKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQg
SlNQYXltZW50UmVzcG9uc2U6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0
b3ImKTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKFBBWU1F
TlRfUkVRVUVTVCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUGVyZm9ybWFu
Y2VPYnNlcnZlckN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNQZXJmb3JtYW5jZU9ic2VydmVyQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcyNzY5KQor
KysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNQZXJmb3JtYW5jZU9ic2VydmVyQ3VzdG9t
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE4LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC0zMSwxMiArMzEsMTYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCi12b2lkIEpTUGVyZm9ybWFuY2VPYnNlcnZlcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4o
SlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2
b2lkIEpTUGVyZm9ybWFuY2VPYnNlcnZlcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRv
ciYgdmlzaXRvcikKIHsKICAgICB3cmFwcGVkKCkuY2FsbGJhY2soKS52aXNpdEpTRnVuY3Rpb24o
dmlzaXRvcik7CiB9CiAKLWJvb2wgSlNQZXJmb3JtYW5jZU9ic2VydmVyT3duZXI6OmlzUmVhY2hh
YmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lk
KiwgSlNDOjpTbG90VmlzaXRvciYsIGNvbnN0IGNoYXIqKiByZWFzb24pCit0ZW1wbGF0ZSB2b2lk
IEpTUGVyZm9ybWFuY2VPYnNlcnZlcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpBYnN0
cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTUGVyZm9ybWFuY2VPYnNlcnZlcjo6
dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYpOworCitib29sIEpTUGVy
Zm9ybWFuY2VPYnNlcnZlck93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6Okhh
bmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRv
ciYsIGNvbnN0IGNoYXIqKiByZWFzb24pCiB7CiAgICAgaWYgKFVOTElLRUxZKHJlYXNvbikpCiAg
ICAgICAgICpyZWFzb24gPSAiUmVnaXN0ZXJlZCBQZXJmb3JtYW5jZU9ic2VydmVyIGNhbGxiYWNr
IjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUG9wU3RhdGVFdmVudEN1c3Rv
bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNQb3BTdGF0
ZUV2ZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gMjcyNzY5KQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNQb3BTdGF0ZUV2ZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCkBAIC05MCw5ICs5
MSwxMyBAQCBKU1ZhbHVlIEpTUG9wU3RhdGVFdmVudDo6c3RhdGUoSlNHbG9iYWxPCiAgICAgcmV0
dXJuIGNhY2hlU3RhdGUocmVzdWx0KTsKIH0KIAotdm9pZCBKU1BvcFN0YXRlRXZlbnQ6OnZpc2l0
QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0
eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1BvcFN0YXRlRXZlbnQ6OnZpc2l0QWRkaXRpb25hbENo
aWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgd3JhcHBlZCgpLnN0YXRlKCkudmlzaXQo
dmlzaXRvcik7CiB9CiAKK3RlbXBsYXRlIHZvaWQgSlNQb3BTdGF0ZUV2ZW50Ojp2aXNpdEFkZGl0
aW9uYWxDaGlsZHJlbihKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQg
SlNQb3BTdGF0ZUV2ZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9y
Jik7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTUHJvbWlzZVJlamVjdGlvbkV2ZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1Byb21pc2VSZWplY3Rpb25FdmVudEN1c3RvbS5j
cHAJKHJldmlzaW9uIDI3Mjc2OSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUHJv
bWlzZVJlamVjdGlvbkV2ZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYg
QEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTggWXVzdWtlIFN1enVraSA8eXVzdWtlc3V6dWtp
QHNsb3dzdGFydC5vcmc+LgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzIsOSAr
MzMsMTMgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIEpTUHJvbWlzZVJlamVjdGlv
bkV2ZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9y
KQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNQcm9taXNlUmVqZWN0aW9uRXZl
bnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgd3Jh
cHBlZCgpLnJlYXNvbigpLnZpc2l0KHZpc2l0b3IpOwogfQogCit0ZW1wbGF0ZSB2b2lkIEpTUHJv
bWlzZVJlamVjdGlvbkV2ZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OkFic3RyYWN0
U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNQcm9taXNlUmVqZWN0aW9uRXZlbnQ6OnZp
c2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImKTsKKwogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNSZXNpemVPYnNl
cnZlckN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNSZXNpemVPYnNlcnZlckN1c3RvbS5jcHAJKHJldmlzaW9uIDI3Mjc2OSkKKysrIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTUmVzaXplT2JzZXJ2ZXJDdXN0b20uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAyMCBJZ2FsaWEgUy5M
LgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzAsMTEgKzMxLDE1IEBACiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBKU1Jlc2l6ZU9ic2VydmVyOjp2aXNpdEFkZGl0aW9u
YWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUg
VmlzaXRvcj4KK3ZvaWQgSlNSZXNpemVPYnNlcnZlcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4o
VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBSZXNpemVPYnNlcnZlckNhbGxiYWNrKiBjYWxsYmFj
ayA9IHdyYXBwZWQoKS5jYWxsYmFja0NvbmN1cnJlbnRseSgpOwogICAgIGlmIChjYWxsYmFjaykK
ICAgICAgICAgY2FsbGJhY2stPnZpc2l0SlNGdW5jdGlvbih2aXNpdG9yKTsKIH0KIAotfQordGVt
cGxhdGUgdm9pZCBKU1Jlc2l6ZU9ic2VydmVyOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6
OkFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNSZXNpemVPYnNlcnZlcjo6
dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYpOworCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1Jlc2l6ZU9i
c2VydmVyRW50cnlDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTUmVzaXplT2JzZXJ2ZXJFbnRyeUN1c3RvbS5jcHAJKHJldmlzaW9uIDI3Mjc2OSkK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUmVzaXplT2JzZXJ2ZXJFbnRyeUN1c3Rv
bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChD
KSAyMDE5IElnYWxpYSBTLkwuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMCwx
MCArMzEsMTQgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIEpTUmVzaXplT2JzZXJ2
ZXJFbnRyeTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRv
cikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTUmVzaXplT2JzZXJ2ZXJFbnRy
eTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB2aXNp
dG9yLmFkZE9wYXF1ZVJvb3Qocm9vdCh3cmFwcGVkKCkudGFyZ2V0KCkpKTsKICAgICB2aXNpdG9y
LmFkZE9wYXF1ZVJvb3Qod3JhcHBlZCgpLmNvbnRlbnRSZWN0KCkpOwogfQogCi19Cit0ZW1wbGF0
ZSB2b2lkIEpTUmVzaXplT2JzZXJ2ZXJFbnRyeTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlND
OjpBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTUmVzaXplT2JzZXJ2ZXJF
bnRyeTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYpOworCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NW
R1ZpZXdTcGVjQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU1NWR1ZpZXdTcGVjQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcyNzY5KQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNTVkdWaWV3U3BlY0N1c3RvbS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOC0yMDIxIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtMzAsMTAgKzMwLDE0IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBKU1NWR1Zp
ZXdTcGVjOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9y
KQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNTVkdWaWV3U3BlYzo6dmlzaXRB
ZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBBU1NFUlQod3JhcHBl
ZCgpLmNvbnRleHRFbGVtZW50Q29uY3VycmVudGx5KCkuZ2V0KCkpOwogICAgIHZpc2l0b3IuYWRk
T3BhcXVlUm9vdChyb290KHdyYXBwZWQoKS5jb250ZXh0RWxlbWVudENvbmN1cnJlbnRseSgpLmdl
dCgpKSk7CiB9CiAKLX0KK3RlbXBsYXRlIHZvaWQgSlNTVkdWaWV3U3BlYzo6dmlzaXRBZGRpdGlv
bmFsQ2hpbGRyZW4oSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpT
U1ZHVmlld1NwZWM6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImKTsK
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNTZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGVDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU2VydmljZVdvcmtlckdsb2JhbFNjb3BlQ3VzdG9t
LmNwcAkocmV2aXNpb24gMjcyNzY5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNT
ZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGVDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM0LDEyICsz
NCwxNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKLXZv
aWQgSlNTZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGU6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNT
ZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGU6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3Im
IHZpc2l0b3IpCiB7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KCZ3cmFwcGVkKCkuY2xpZW50
cygpKTsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QoJndyYXBwZWQoKS5yZWdpc3RyYXRpb24o
KSk7CiB9CiAKK3RlbXBsYXRlIHZvaWQgSlNTZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGU6OnZpc2l0
QWRkaXRpb25hbENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQg
SlNTZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGU6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RW
aXNpdG9yJik7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1N0YXRpY1JhbmdlQ3VzdG9tLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1N0YXRpY1JhbmdlQ3VzdG9tLmNwcAko
cmV2aXNpb24gMjcyNzY5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNTdGF0aWNS
YW5nZUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDkgKzMwLDEzIEBACiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotdm9pZCBKU1N0YXRpY1JhbmdlOjp2aXNpdEFkZGl0aW9uYWxDaGls
ZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRv
cj4KK3ZvaWQgSlNTdGF0aWNSYW5nZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYg
dmlzaXRvcikKIHsKICAgICB3cmFwcGVkKCkudmlzaXROb2Rlc0NvbmN1cnJlbnRseSh2aXNpdG9y
KTsKIH0KIAordGVtcGxhdGUgdm9pZCBKU1N0YXRpY1JhbmdlOjp2aXNpdEFkZGl0aW9uYWxDaGls
ZHJlbihKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNTdGF0aWNS
YW5nZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYpOworCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1N0
eWxlU2hlZXRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTU3R5bGVTaGVldEN1c3RvbS5jcHAJKHJldmlzaW9uIDI3Mjc2OSkKKysrIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTU3R5bGVTaGVldEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4LCAyMDA5IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMzAsMTEgKzMwLDE1IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9p
ZCBKU1N0eWxlU2hlZXQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3Im
IHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1N0eWxlU2hlZXQ6
OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgdmlzaXRv
ci5hZGRPcGFxdWVSb290KHJvb3QoJndyYXBwZWQoKSkpOwogfQogCit0ZW1wbGF0ZSB2b2lkIEpT
U3R5bGVTaGVldDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oQWJzdHJhY3RTbG90VmlzaXRvciYp
OwordGVtcGxhdGUgdm9pZCBKU1N0eWxlU2hlZXQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNs
b3RWaXNpdG9yJik7CisKIEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6SlNHbG9i
YWxPYmplY3QqLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWY8U3R5bGVTaGVl
dD4mJiBzdHlsZVNoZWV0KQogewogICAgIGlmIChzdHlsZVNoZWV0LT5pc0NTU1N0eWxlU2hlZXQo
KSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVGV4dFRyYWNrQ3VlQ3VzdG9t
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1RleHRUcmFj
a0N1ZUN1c3RvbS5jcHAJKHJldmlzaW9uIDI3Mjc2OSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTVGV4dFRyYWNrQ3VlQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zOCw3ICszOCw3
IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCi1ib29sIEpT
VGV4dFRyYWNrQ3VlT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxl
PEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgU2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0
IGNoYXIqKiByZWFzb24pCitib29sIEpTVGV4dFRyYWNrQ3VlT3duZXI6OmlzUmVhY2hhYmxlRnJv
bU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgQWJz
dHJhY3RTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikKIHsKICAgICBK
U1RleHRUcmFja0N1ZSoganNUZXh0VHJhY2tDdWUgPSBqc0Nhc3Q8SlNUZXh0VHJhY2tDdWUqPiho
YW5kbGUuc2xvdCgpLT5hc0NlbGwoKSk7CiAgICAgVGV4dFRyYWNrQ3VlJiB0ZXh0VHJhY2tDdWUg
PSBqc1RleHRUcmFja0N1ZS0+d3JhcHBlZCgpOwpAQCAtODIsMTIgKzgyLDE2IEBAIEpTVmFsdWUg
dG9KUyhKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2IKICAgICByZXR1cm4gd3JhcChsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QsIGN1ZSk7CiB9CiAKLXZvaWQgSlNUZXh0VHJhY2tD
dWU6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxh
dGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNUZXh0VHJhY2tDdWU6OnZpc2l0QWRkaXRpb25h
bENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgaWYgKFRleHRUcmFjayogdGV4dFRy
YWNrID0gd3JhcHBlZCgpLnRyYWNrKCkpCiAgICAgICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChy
b290KHRleHRUcmFjaykpOwogfQogCit0ZW1wbGF0ZSB2b2lkIEpTVGV4dFRyYWNrQ3VlOjp2aXNp
dEFkZGl0aW9uYWxDaGlsZHJlbihBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lk
IEpTVGV4dFRyYWNrQ3VlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYpOwor
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNUZXh0VHJhY2tDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTVGV4dFRyYWNrQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcyNzY5
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNUZXh0VHJhY2tDdXN0b20uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTM2LDExICszNiwxNSBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogdXNpbmcg
bmFtZXNwYWNlIEpTQzsKIAotdm9pZCBKU1RleHRUcmFjazo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRy
ZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9p
ZCBKU1RleHRUcmFjazo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikK
IHsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qocm9vdCgmd3JhcHBlZCgpKSk7CiB9CiAKK3Rl
bXBsYXRlIHZvaWQgSlNUZXh0VHJhY2s6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEFic3RyYWN0
U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNUZXh0VHJhY2s6OnZpc2l0QWRkaXRpb25h
bENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2Vu
ZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1RleHRUcmFja0xpc3RDdXN0
b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVGV4dFRy
YWNrTGlzdEN1c3RvbS5jcHAJKHJldmlzaW9uIDI3Mjc2OSkKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTVGV4dFRyYWNrTGlzdEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzYsMTEg
KzM2LDE1IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCi12
b2lkIEpTVGV4dFRyYWNrTGlzdDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90Vmlz
aXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTVGV4dFRy
YWNrTGlzdDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAg
ICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qocm9vdCh3cmFwcGVkKCkuZWxlbWVudCgpKSk7CiB9CiAg
ICAgCit0ZW1wbGF0ZSB2b2lkIEpTVGV4dFRyYWNrTGlzdDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRy
ZW4oQWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU1RleHRUcmFja0xpc3Q6
OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CisKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKIAogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1Ry
ZWVXYWxrZXJDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTVHJlZVdhbGtlckN1c3RvbS5jcHAJKHJldmlzaW9uIDI3Mjc2OSkKKysrIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTVHJlZVdhbGtlckN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA4LCAyMDA5IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAt
MjUsMTAgKzI1LDE0IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBKU1RyZWVXYWxr
ZXI6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0
ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1RyZWVXYWxrZXI6OnZpc2l0QWRkaXRp
b25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgaWYgKE5vZGVGaWx0ZXIqIGZp
bHRlciA9IHdyYXBwZWQoKS5maWx0ZXIoKSkKICAgICAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290
KGZpbHRlcik7CiB9CiAKLX0KK3RlbXBsYXRlIHZvaWQgSlNUcmVlV2Fsa2VyOjp2aXNpdEFkZGl0
aW9uYWxDaGlsZHJlbihKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQg
SlNUcmVlV2Fsa2VyOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJik7
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTVW5kb0l0ZW1DdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTVW5kb0l0ZW1DdXN0b20uY3BwCShyZXZpc2lvbiAyNzI3NjkpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1VuZG9JdGVtQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE5LTIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0yOSwxMyArMjksMTcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIEpTVW5kb0l0
ZW06OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0
ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1VuZG9JdGVtOjp2aXNpdEFkZGl0aW9u
YWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHdyYXBwZWQoKS51bmRvSGFuZGxl
cigpLnZpc2l0SlNGdW5jdGlvbih2aXNpdG9yKTsKICAgICB3cmFwcGVkKCkucmVkb0hhbmRsZXIo
KS52aXNpdEpTRnVuY3Rpb24odmlzaXRvcik7CiB9CiAKLWJvb2wgSlNVbmRvSXRlbU93bmVyOjpp
c1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRs
ZSwgdm9pZCosIEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24p
Cit0ZW1wbGF0ZSB2b2lkIEpTVW5kb0l0ZW06OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6
QWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU1VuZG9JdGVtOjp2aXNpdEFk
ZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJik7CisKK2Jvb2wgSlNVbmRvSXRlbU93
bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+
IGhhbmRsZSwgdm9pZCosIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3Qg
Y2hhcioqIHJlYXNvbikKIHsKICAgICBpZiAoVU5MSUtFTFkocmVhc29uKSkKICAgICAgICAgKnJl
YXNvbiA9ICJEb2N1bWVudCBpcyBhbiBvcGFxdWUgcm9vdC4iOwpJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNWYWx1ZUluV3JhcHBlZE9iamVjdC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVmFsdWVJbldyYXBwZWRPYmplY3QuaAkocmV2aXNp
b24gMjcyNzY5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNWYWx1ZUluV3JhcHBl
ZE9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTgtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC00MCw3ICs0MCw3IEBAIHB1YmxpYzoKICAgICBvcGVyYXRv
ciBKU0M6OkpTVmFsdWUoKSBjb25zdDsKICAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29u
c3Q7CiAgICAgSlNWYWx1ZUluV3JhcHBlZE9iamVjdCYgb3BlcmF0b3I9KGNvbnN0IEpTVmFsdWVJ
bldyYXBwZWRPYmplY3QmIG90aGVyKTsKLSAgICB2b2lkIHZpc2l0KEpTQzo6U2xvdFZpc2l0b3Im
KSBjb25zdDsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIHZpc2l0KFZpc2l0
b3ImKSBjb25zdDsKICAgICB2b2lkIGNsZWFyKCk7CiAKIHByaXZhdGU6CkBAIC05OCw3ICs5OCw4
IEBAIGlubGluZSBKU1ZhbHVlSW5XcmFwcGVkT2JqZWN0JiBKU1ZhbHVlSW4KICAgICByZXR1cm4g
KnRoaXM7CiB9CiAKLWlubGluZSB2b2lkIEpTVmFsdWVJbldyYXBwZWRPYmplY3Q6OnZpc2l0KEpT
Qzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
PgoraW5saW5lIHZvaWQgSlNWYWx1ZUluV3JhcHBlZE9iamVjdDo6dmlzaXQoVmlzaXRvciYgdmlz
aXRvcikgY29uc3QKIHsKICAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbihtX3ZhbHVlLCBbXSAoSlND
OjpKU1ZhbHVlKSB7CiAgICAgICAgIC8vIE5vdGhpbmcgdG8gdmlzaXQuCkBAIC0xMDcsNiArMTA4
LDkgQEAgaW5saW5lIHZvaWQgSlNWYWx1ZUluV3JhcHBlZE9iamVjdDo6dmlzaQogICAgIH0pOwog
fQogCit0ZW1wbGF0ZSB2b2lkIEpTVmFsdWVJbldyYXBwZWRPYmplY3Q6OnZpc2l0KEpTQzo6QWJz
dHJhY3RTbG90VmlzaXRvciYpIGNvbnN0OwordGVtcGxhdGUgdm9pZCBKU1ZhbHVlSW5XcmFwcGVk
T2JqZWN0Ojp2aXNpdChKU0M6OlNsb3RWaXNpdG9yJikgY29uc3Q7CisKIGlubGluZSB2b2lkIEpT
VmFsdWVJbldyYXBwZWRPYmplY3Q6OmNsZWFyKCkKIHsKICAgICBXVEY6OnN3aXRjaE9uKG1fdmFs
dWUsIFtdIChXZWFrJiB2YWx1ZSkgewpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNWaWRlb1RyYWNrQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU1ZpZGVvVHJhY2tDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI3NjkpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1ZpZGVvVHJhY2tDdXN0b20uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAyMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTM1LDExICszNSwxNSBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogdXNpbmcgbmFtZXNwYWNl
IEpTQzsKIAotdm9pZCBKU1ZpZGVvVHJhY2s6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNWaWRl
b1RyYWNrOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAg
IHZpc2l0b3IuYWRkT3BhcXVlUm9vdChyb290KCZ3cmFwcGVkKCkpKTsKIH0KIAordGVtcGxhdGUg
dm9pZCBKU1ZpZGVvVHJhY2s6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6QWJzdHJhY3RT
bG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU1ZpZGVvVHJhY2s6OnZpc2l0QWRkaXRpb25h
bENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImKTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQog
CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVmlkZW9UcmFja0xp
c3RDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
VmlkZW9UcmFja0xpc3RDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI3NjkpCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU1ZpZGVvVHJhY2tMaXN0Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0zNSwxMSArMzUsMTUgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBK
U0M7CiAKLXZvaWQgSlNWaWRlb1RyYWNrTGlzdDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xv
dFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1Zp
ZGVvVHJhY2tMaXN0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQog
ewogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChyb290KHdyYXBwZWQoKS5lbGVtZW50KCkpKTsK
IH0KIAordGVtcGxhdGUgdm9pZCBKU1ZpZGVvVHJhY2tMaXN0Ojp2aXNpdEFkZGl0aW9uYWxDaGls
ZHJlbihBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTVmlkZW9UcmFja0xp
c3Q6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CisKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKIAogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U1dlYkdMMlJlbmRlcmluZ0NvbnRleHRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViR0wyUmVuZGVyaW5nQ29udGV4dEN1c3RvbS5jcHAJKHJl
dmlzaW9uIDI3Mjc2OSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViR0wyUmVu
ZGVyaW5nQ29udGV4dEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMywxMiArMzMsMTYg
QEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKLXZvaWQgSlNX
ZWJHTDJSZW5kZXJpbmdDb250ZXh0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRv
ciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTV2ViR0wyUmVu
ZGVyaW5nQ29udGV4dDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikK
IHsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QoJndyYXBwZWQoKSk7CiAgICAgd3JhcHBlZCgp
LmFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKHZpc2l0b3IpOwogfQogCit0ZW1wbGF0ZSB2b2lkIEpT
V2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpBYnN0
cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTV2ViR0wyUmVuZGVyaW5nQ29udGV4
dDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYpOworCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoV0VCR0wpCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYkdMUmVuZGVyaW5nQ29udGV4dEN1c3RvbS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJHTFJlbmRlcmluZ0Nv
bnRleHRDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI3NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU1dlYkdMUmVuZGVyaW5nQ29udGV4dEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MzMsMTIgKzMzLDE2IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2UgSlND
OwogCi12b2lkIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJl
bihTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lk
IEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9y
JiB2aXNpdG9yKQogewogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdCgmd3JhcHBlZCgpKTsKICAg
ICB3cmFwcGVkKCkuYWRkTWVtYmVyc1RvT3BhcXVlUm9vdHModmlzaXRvcik7CiB9CiAKK3RlbXBs
YXRlIHZvaWQgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVu
KEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CisKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShXRUJHTCkKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyR2xvYmFsU2NvcGVCYXNlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckdsb2JhbFNjb3BlQmFzZS5j
cHAJKHJldmlzaW9uIDI3Mjc2OSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29y
a2VyR2xvYmFsU2NvcGVCYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDksIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCBSaWdo
dHMgUmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC05Miw3ICs5Miw4IEBAIHZvaWQgSlNX
b3JrZXJHbG9iYWxTY29wZUJhc2U6OmZpbmlzaENyZWEKICAgICBBU1NFUlQoaW5oZXJpdHModm0s
IGluZm8oKSkpOwogfQogCi12b2lkIEpTV29ya2VyR2xvYmFsU2NvcGVCYXNlOjp2aXNpdENoaWxk
cmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBWaXNpdG9yPgordm9pZCBKU1dvcmtlckdsb2JhbFNjb3BlQmFzZTo6dmlzaXRDaGlsZHJlbklt
cGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTV29ya2VyR2xvYmFs
U2NvcGVCYXNlKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTV29ya2VyR2xvYmFsU2NvcGVCYXNlKj4o
Y2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkp
OwpAQCAtMTAwLDYgKzEwMSw4IEBAIHZvaWQgSlNXb3JrZXJHbG9iYWxTY29wZUJhc2U6OnZpc2l0
Q2hpbGQKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX3Byb3h5KTsKIH0KIAorREVG
SU5FX1ZJU0lUX0NISUxEUkVOKEpTV29ya2VyR2xvYmFsU2NvcGVCYXNlKTsKKwogdm9pZCBKU1dv
cmtlckdsb2JhbFNjb3BlQmFzZTo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCiB7CiAgICAgc3RhdGlj
X2Nhc3Q8SlNXb3JrZXJHbG9iYWxTY29wZUJhc2UqPihjZWxsKS0+SlNXb3JrZXJHbG9iYWxTY29w
ZUJhc2U6On5KU1dvcmtlckdsb2JhbFNjb3BlQmFzZSgpOwpJbmRleDogU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNXb3JrZXJHbG9iYWxTY29wZUJhc2UuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckdsb2JhbFNjb3BlQmFzZS5oCShyZXZpc2lv
biAyNzI3NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckdsb2JhbFNj
b3BlQmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDgtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTc5LDcgKzc5LDcgQEAgcHJvdGVjdGVkOgog
ICAgIEpTV29ya2VyR2xvYmFsU2NvcGVCYXNlKEpTQzo6Vk0mLCBKU0M6OlN0cnVjdHVyZSosIFJl
ZlB0cjxXb3JrZXJHbG9iYWxTY29wZT4mJik7CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6
OlZNJiwgSlNDOjpKU1Byb3h5Kik7CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpT
Qzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERS
RU47CiAKIHByaXZhdGU6CiAgICAgUmVmUHRyPFdvcmtlckdsb2JhbFNjb3BlPiBtX3dyYXBwZWQ7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckdsb2JhbFNjb3BlQ3Vz
dG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtl
ckdsb2JhbFNjb3BlQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcyNzY5KQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNXb3JrZXJHbG9iYWxTY29wZUN1c3RvbS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMDksIDIwMTEs
IDIwMTYgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDA4LTIwMjEgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC0zMyw3ICszMyw4IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1
c2luZyBuYW1lc3BhY2UgSlNDOwogCi12b2lkIEpTV29ya2VyR2xvYmFsU2NvcGU6OnZpc2l0QWRk
aXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUg
VmlzaXRvcj4KK3ZvaWQgSlNXb3JrZXJHbG9iYWxTY29wZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRy
ZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBpZiAoYXV0byogbG9jYXRpb24gPSB3cmFwcGVk
KCkub3B0aW9uYWxMb2NhdGlvbigpKQogICAgICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QobG9j
YXRpb24pOwpAQCAtNDgsNiArNDksOSBAQCB2b2lkIEpTV29ya2VyR2xvYmFsU2NvcGU6OnZpc2l0
QWRkaXRpb25hCiAgICAgd3JhcHBlZCgpLnZpc2l0SlNFdmVudExpc3RlbmVycyh2aXNpdG9yKTsK
IH0KIAordGVtcGxhdGUgdm9pZCBKU1dvcmtlckdsb2JhbFNjb3BlOjp2aXNpdEFkZGl0aW9uYWxD
aGlsZHJlbihBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTV29ya2VyR2xv
YmFsU2NvcGU6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CisKIEpTVmFs
dWUgSlNXb3JrZXJHbG9iYWxTY29wZTo6cXVldWVNaWNyb3Rhc2soSlNHbG9iYWxPYmplY3QmIGxl
eGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFtZSYgY2FsbEZyYW1lKQogewogICAgIFZNJiB2bSA9
IGxleGljYWxHbG9iYWxPYmplY3Qudm0oKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTV29ya2VyTmF2aWdhdG9yQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlck5hdmlnYXRvckN1c3RvbS5jcHAJKHJldmlzaW9uIDI3
Mjc2OSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyTmF2aWdhdG9yQ3Vz
dG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0yOCw5ICsyOCwxMyBAQAogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLXZvaWQgSlNXb3JrZXJOYXZpZ2F0b3I6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpT
Qzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9p
ZCBKU1dvcmtlck5hdmlnYXRvcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlz
aXRvcikKIHsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qoc3RhdGljX2Nhc3Q8TmF2aWdhdG9y
QmFzZSo+KCZ3cmFwcGVkKCkpKTsKIH0KIAotfQordGVtcGxhdGUgdm9pZCBKU1dvcmtlck5hdmln
YXRvcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJik7
Cit0ZW1wbGF0ZSB2b2lkIEpTV29ya2VyTmF2aWdhdG9yOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJl
bihKU0M6OlNsb3RWaXNpdG9yJik7CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2xldEdsb2JhbFNjb3BlQmFzZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrbGV0R2xvYmFsU2Nv
cGVCYXNlLmNwcAkocmV2aXNpb24gMjcyNzY5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNXb3JrbGV0R2xvYmFsU2NvcGVCYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC04Miw3ICs4Miw4
IEBAIHZvaWQgSlNXb3JrbGV0R2xvYmFsU2NvcGVCYXNlOjpmaW5pc2hDcmUKICAgICBBU1NFUlQo
aW5oZXJpdHModm0sIGluZm8oKSkpOwogfQogCi12b2lkIEpTV29ya2xldEdsb2JhbFNjb3BlQmFz
ZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVt
cGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNXb3JrbGV0R2xvYmFsU2NvcGVCYXNlOjp2
aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAg
YXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1dvcmtsZXRHbG9iYWxTY29wZUJhc2UqPihjZWxs
KTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBA
IC05MCw2ICs5MSw4IEBAIHZvaWQgSlNXb3JrbGV0R2xvYmFsU2NvcGVCYXNlOjp2aXNpdENoaWwK
ICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX3Byb3h5KTsKIH0KIAorREVGSU5FX1ZJ
U0lUX0NISUxEUkVOKEpTV29ya2xldEdsb2JhbFNjb3BlQmFzZSk7CisKIHZvaWQgSlNXb3JrbGV0
R2xvYmFsU2NvcGVCYXNlOjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKIHsKICAgICBzdGF0aWNfY2Fz
dDxKU1dvcmtsZXRHbG9iYWxTY29wZUJhc2UqPihjZWxsKS0+SlNXb3JrbGV0R2xvYmFsU2NvcGVC
YXNlOjp+SlNXb3JrbGV0R2xvYmFsU2NvcGVCYXNlKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU1dvcmtsZXRHbG9iYWxTY29wZUJhc2UuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtsZXRHbG9iYWxTY29wZUJhc2UuaAkocmV2aXNp
b24gMjcyNzY5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrbGV0R2xvYmFs
U2NvcGVCYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxOC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjcsNyArNjcsNyBAQCBwcm90ZWN0ZWQ6CiAgICAg
SlNXb3JrbGV0R2xvYmFsU2NvcGVCYXNlKEpTQzo6Vk0mLCBKU0M6OlN0cnVjdHVyZSosIFJlZlB0
cjxXb3JrbGV0R2xvYmFsU2NvcGU+JiYpOwogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpW
TSYsIEpTQzo6SlNQcm94eSopOwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0M6
OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVO
OwogCiBwcml2YXRlOgogICAgIFJlZlB0cjxXb3JrbGV0R2xvYmFsU2NvcGU+IG1fd3JhcHBlZDsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTWE1MSHR0cFJlcXVlc3RDdXN0b20u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTWE1MSHR0cFJl
cXVlc3RDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI3NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU1hNTEh0dHBSZXF1ZXN0Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00
MSw3ICs0MSw4IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2UgSlNDOwog
Ci12b2lkIEpTWE1MSHR0cFJlcXVlc3Q6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNp
dG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNYTUxIdHRw
UmVxdWVzdDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAg
ICBpZiAoYXV0byogdXBsb2FkID0gd3JhcHBlZCgpLm9wdGlvbmFsVXBsb2FkKCkpCiAgICAgICAg
IHZpc2l0b3IuYWRkT3BhcXVlUm9vdCh1cGxvYWQpOwpAQCAtNTAsNiArNTEsOSBAQCB2b2lkIEpT
WE1MSHR0cFJlcXVlc3Q6OnZpc2l0QWRkaXRpb25hbENoCiAgICAgICAgIHZpc2l0b3IuYWRkT3Bh
cXVlUm9vdChyZXNwb25zZURvY3VtZW50KTsKIH0KIAordGVtcGxhdGUgdm9pZCBKU1hNTEh0dHBS
ZXF1ZXN0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0
ZW1wbGF0ZSB2b2lkIEpTWE1MSHR0cFJlcXVlc3Q6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNs
b3RWaXNpdG9yJik7CisKIEpTVmFsdWUgSlNYTUxIdHRwUmVxdWVzdDo6cmVzcG9uc2UoSlNHbG9i
YWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QpIGNvbnN0CiB7CiAgICAgYXV0byBjYWNoZVJl
c3VsdCA9IFsmXSAoSlNWYWx1ZSB2YWx1ZSkgLT4gSlNWYWx1ZSB7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU1hQYXRoUmVzdWx0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1hQYXRoUmVzdWx0Q3VzdG9tLmNwcAkocmV2aXNp
b24gMjcyNzY5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNYUGF0aFJlc3VsdEN1
c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0
IChDKSAyMDExIEp1bGllbiBDaGFmZnJhaXggPGpjaGFmZnJhaXhAd2Via2l0Lm9yZz4KKyAqIENv
cHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMxLDcgKzMyLDggQEAKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi12b2lkIEpTWFBhdGhSZXN1bHQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpT
Qzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9p
ZCBKU1hQYXRoUmVzdWx0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9y
KQogewogICAgIGF1dG8mIHZhbHVlID0gd3JhcHBlZCgpLnZhbHVlKCk7CiAgICAgaWYgKHZhbHVl
LmlzTm9kZVNldCgpKSB7CkBAIC00MSw0ICs0Myw3IEBAIHZvaWQgSlNYUGF0aFJlc3VsdDo6dmlz
aXRBZGRpdGlvbmFsQ2hpbGQKICAgICB9CiB9CiAKK3RlbXBsYXRlIHZvaWQgSlNYUGF0aFJlc3Vs
dDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0
ZW1wbGF0ZSB2b2lkIEpTWFBhdGhSZXN1bHQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6
U2xvdFZpc2l0b3ImKTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvV2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlVHlwZWRBcnJheUNvbnRy
b2xsZXIuY3BwCShyZXZpc2lvbiAyNzI3NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9XZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU2LDcgKzU2
LDcgQEAgYm9vbCBXZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXI6OmlzQXRvbQogICAgIHJldHVy
biBtX2FsbG93QXRvbWljc1dhaXQ7CiB9CiAKLWJvb2wgV2ViQ29yZVR5cGVkQXJyYXlDb250cm9s
bGVyOjpKU0FycmF5QnVmZmVyT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6
SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgSlNDOjpTbG90VmlzaXRvciYgdmlz
aXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikKK2Jvb2wgV2ViQ29yZVR5cGVkQXJyYXlDb250cm9s
bGVyOjpKU0FycmF5QnVmZmVyT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6
SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgSlNDOjpBYnN0cmFjdFNsb3RWaXNp
dG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQogewogICAgIGlmIChVTkxJS0VMWShy
ZWFzb24pKQogICAgICAgICAqcmVhc29uID0gIkFycmF5QnVmZmVyIGlzIG9wYXF1ZSByb290IjsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dlYkNvcmVUeXBlZEFycmF5Q29udHJv
bGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dlYkNvcmVU
eXBlZEFycmF5Q29udHJvbGxlci5oCShyZXZpc2lvbiAyNzI3NjkpCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9XZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC00OCw3ICs0OCw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgY2xhc3MgSlNBcnJheUJ1ZmZl
ck93bmVyIDogcHVibGljIEpTQzo6V2Vha0hhbmRsZU93bmVyIHsKICAgICBwdWJsaWM6Ci0gICAg
ICAgIGJvb2wgaXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtu
b3duPiwgdm9pZCogY29udGV4dCwgSlNDOjpTbG90VmlzaXRvciYsIGNvbnN0IGNoYXIqKikgb3Zl
cnJpZGU7CisgICAgICAgIGJvb2wgaXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5k
bGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9y
JiwgY29uc3QgY2hhcioqKSBvdmVycmlkZTsKICAgICAgICAgdm9pZCBmaW5hbGl6ZShKU0M6Okhh
bmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0KSBvdmVycmlkZTsKICAgICB9OwogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0
b3JKUy5wbQkocmV2aXNpb24gMjcyNzY5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy9Db2RlR2VuZXJhdG9ySlMucG0JKHdvcmtpbmcgY29weSkKQEAgLTMsNyArMyw3IEBACiAj
IENvcHlyaWdodCAoQykgMjAwNiBBbmRlcnMgQ2FybHNzb24gPGFuZGVyc2NhQG1hYy5jb20+CiAj
IENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBTYW11ZWwgV2VpbmlnIDxzYW1Ad2Via2l0Lm9yZz4K
ICMgQ29weXJpZ2h0IChDKSAyMDA2IEFsZXhleSBQcm9za3VyeWFrb3YgPGFwQHdlYmtpdC5vcmc+
Ci0jIENvcHlyaWdodCAoQykgMjAwNi0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyMgQ29weXJpZ2h0IChDKSAyMDA2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogIyBDb3B5cmlnaHQgKEMpIDIwMDkgQ2FtZXJvbiBNY0Nvcm1hY2sgPGNhbUBtY2MuaWQu
YXU+CiAjIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICMgQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9u
IGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQpAQCAtMzA3OCw4ICszMDc4LDggQEAgc3ViIEdl
bmVyYXRlSGVhZGVyCiAKICAgICAjIHZpc2l0IGZ1bmN0aW9uCiAgICAgaWYgKCRuZWVkc1Zpc2l0
Q2hpbGRyZW4pIHsKLSAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICBzdGF0aWMgdm9p
ZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKTtcbiIpOwotICAgICAg
ICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHZvaWQgdmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4o
SlNDOjpTbG90VmlzaXRvciYpO1xuIikgaWYgJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVz
LT57SlNDdXN0b21NYXJrRnVuY3Rpb259OworICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAi
ICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47XG4iKTsKKyAgICAgICAgcHVzaChAaGVhZGVyQ29u
dGVudCwgIiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIHZpc2l0QWRkaXRpb25h
bENoaWxkcmVuKFZpc2l0b3ImKTtcbiIpIGlmICRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRl
cy0+e0pTQ3VzdG9tTWFya0Z1bmN0aW9ufTsKICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwg
IlxuIik7CiAKICAgICAgICAgaWYgKCRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+e0pT
Q3VzdG9tTWFya0Z1bmN0aW9ufSkgewpAQCAtMzA5NCw3ICszMDk0LDcgQEAgc3ViIEdlbmVyYXRl
SGVhZGVyCiAgICAgICAgICAgICAjIHRoYXQgdGhlIEdDIGNhbGxzIHRvIGFzayBhbiBvYmplY3Qg
aXMgaXQgd291bGQgbGlrZSB0byBtYXJrIGFueXRoaW5nIGVsc2UgYWZ0ZXIgdGhlCiAgICAgICAg
ICAgICAjIHByb2dyYW0gcmVzdW1lZCBzaW5jZSB0aGUgbGFzdCBjYWxsIHRvIHZpc2l0Q2hpbGRy
ZW4gb3IgdmlzaXRPdXRwdXRDb25zdHJhaW50cy4gU2luY2UKICAgICAgICAgICAgICMgdGhpcyBq
dXN0IGNhbGxzIHZpc2l0QWRkaXRpb25hbENoaWxkcmVuLCB5b3UgdXN1YWxseSBkb24ndCBoYXZl
IHRvIHdvcnJ5IGFib3V0IHRoaXMuCi0gICAgICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAi
ICAgIHN0YXRpYyB2b2lkIHZpc2l0T3V0cHV0Q29uc3RyYWludHMoSlNDZWxsKiwgSlNDOjpTbG90
VmlzaXRvciYpO1xuIik7CisgICAgICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHN0
YXRpYyB2b2lkIHZpc2l0T3V0cHV0Q29uc3RyYWludHMoSlNDZWxsKiwgSlNDOjpBYnN0cmFjdFNs
b3RWaXNpdG9yJik7XG4iKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMzIxNSw3ICszMjE1LDcg
QEAgc3ViIEdlbmVyYXRlSGVhZGVyCiAgICAgICAgIH0KICAgICAgICAgJGhlYWRlckluY2x1ZGVz
eyI8d3RmL05ldmVyRGVzdHJveWVkLmg+In0gPSAxOwogICAgICAgICBwdXNoKEBoZWFkZXJDb250
ZW50LCAicHVibGljOlxuIik7Ci0gICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgYm9v
bCBpc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2
b2lkKiBjb250ZXh0LCBKU0M6OlNsb3RWaXNpdG9yJiwgY29uc3QgY2hhcioqKSAke292ZXJyaWRl
RGVjbH07XG4iKTsKKyAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICBib29sIGlzUmVh
Y2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNv
bnRleHQsIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYsIGNvbnN0IGNoYXIqKikgJHtvdmVycmlk
ZURlY2x9O1xuIik7CiAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgdm9pZCBmaW5h
bGl6ZShKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0KSAke292ZXJyaWRl
RGVjbH07XG4iKTsKICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIn07XG4iKTsKICAgICAg
ICAgcHVzaChAaGVhZGVyQ29udGVudCwgIlxuIik7CkBAIC00OTM5LDYgKzQ5MzksNyBAQCBzdWIg
R2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJET01Jc29TdWJz
cGFjZXMuaCIpOwogICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJXZWJDb3JlSlNDbGllbnREYXRhLmgi
KTsKICAgICBBZGRUb0ltcGxJbmNsdWRlcygiPEphdmFTY3JpcHRDb3JlL0pTRGVzdHJ1Y3RpYmxl
T2JqZWN0SGVhcENlbGxUeXBlLmg+Iik7CisgICAgQWRkVG9JbXBsSW5jbHVkZXMoIjxKYXZhU2Ny
aXB0Q29yZS9TbG90VmlzaXRvck1hY3Jvcy5oPiIpOwogICAgIEFkZFRvSW1wbEluY2x1ZGVzKCI8
SmF2YVNjcmlwdENvcmUvU3Vic3BhY2VJbmxpbmVzLmg+Iik7CiAgICAgcHVzaChAaW1wbENvbnRl
bnQsICJKU0M6Oklzb1N1YnNwYWNlKiAke2NsYXNzTmFtZX06OnN1YnNwYWNlRm9ySW1wbChKU0M6
OlZNJiB2bSlcbiIpOwogICAgIHB1c2goQGltcGxDb250ZW50LCAie1xuIik7CkBAIC00OTY2LDcg
KzQ5NjcsOCBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgIHB1c2goQGltcGxDb250
ZW50LCAifVxuXG4iKTsKIAogICAgIGlmICgkbmVlZHNWaXNpdENoaWxkcmVuKSB7Ci0gICAgICAg
IHB1c2goQGltcGxDb250ZW50LCAidm9pZCAke2NsYXNzTmFtZX06OnZpc2l0Q2hpbGRyZW4oSlND
ZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcilcbiIpOworICAgICAgICBwdXNoKEBpbXBs
Q29udGVudCwgInRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+XG4iKTsKKyAgICAgICAgcHVzaChA
aW1wbENvbnRlbnQsICJ2b2lkICR7Y2xhc3NOYW1lfTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxs
KiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKVxuIik7CiAgICAgICAgIHB1c2goQGltcGxDb250ZW50
LCAie1xuIik7CiAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGF1dG8qIHRoaXNPYmpl
Y3QgPSBqc0Nhc3Q8JHtjbGFzc05hbWV9Kj4oY2VsbCk7XG4iKTsKICAgICAgICAgcHVzaChAaW1w
bENvbnRlbnQsICIgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZv
KCkpO1xuIik7CkBAIC00OTkxLDggKzQ5OTMsMTAgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRp
b24KICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwg
In1cblxuIik7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiREVGSU5FX1ZJU0lUX0NISUxE
UkVOKCR7Y2xhc3NOYW1lfSk7XG5cbiIpOworCiAgICAgICAgIGlmICgkaW50ZXJmYWNlLT5leHRl
bmRlZEF0dHJpYnV0ZXMtPntKU0N1c3RvbU1hcmtGdW5jdGlvbn0pIHsKLSAgICAgICAgICAgIHB1
c2goQGltcGxDb250ZW50LCAidm9pZCAke2NsYXNzTmFtZX06OnZpc2l0T3V0cHV0Q29uc3RyYWlu
dHMoSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcilcbiIpOworICAgICAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICJ2b2lkICR7Y2xhc3NOYW1lfTo6dmlzaXRPdXRwdXRDb25zdHJh
aW50cyhKU0NlbGwqIGNlbGwsIEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpXG4iKTsKICAg
ICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAie1xuIik7CiAgICAgICAgICAgICBwdXNoKEBp
bXBsQ29udGVudCwgIiAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PCR7Y2xhc3NOYW1lfSo+
KGNlbGwpO1xuIik7CiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBBU1NFUlRf
R0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7XG4iKTsKQEAgLTUwMzMsNyAr
NTAzNyw3IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgfQogCiAgICAgaWYgKFNo
b3VsZEdlbmVyYXRlV3JhcHBlck93bmVyQ29kZSgkaGFzUGFyZW50LCAkaW50ZXJmYWNlKSAmJiAh
R2V0Q3VzdG9tSXNSZWFjaGFibGUoJGludGVyZmFjZSkpIHsKLSAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsICJib29sIEpTJHtpbnRlcmZhY2VOYW1lfU93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFx
dWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIFNsb3RWaXNp
dG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKVxuIik7CisgICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAiYm9vbCBKUyR7aW50ZXJmYWNlTmFtZX1Pd25lcjo6aXNSZWFjaGFibGVGcm9t
T3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBBYnN0
cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKVxuIik7CiAgICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAie1xuIik7CiAgICAgICAgICMgQWxsIEFjdGl2ZURPTU9i
amVjdHMgaW1wbGVtZW50IGhhc1BlbmRpbmdBY3Rpdml0eSgpLCBidXQgbm90IGFsbCBvZiB0aGVt
CiAgICAgICAgICMgaW5jcmVtZW50IHRoZWlyIEMrKyByZWZlcmVuY2UgY291bnRzIHdoZW4gaGFz
UGVuZGluZ0FjdGl2aXR5KCkgYmVjb21lcwpAQCAtNjQzMiw3ICs2NDM2LDcgQEAgc3ViIEdlbmVy
YXRlQ2FsbGJhY2tIZWFkZXJDb250ZW50CiAgICAgICAgIHB1c2goQCRjb250ZW50UmVmLCAiICAg
IGJvb2wgaGFzQ2FsbGJhY2soKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2RhdGEgJiYgbV9kYXRh
LT5jYWxsYmFjaygpOyB9XG5cbiIpOwogICAgIH0KIAotICAgIHB1c2goQCRjb250ZW50UmVmLCAi
ICAgIHZvaWQgdmlzaXRKU0Z1bmN0aW9uKEpTQzo6U2xvdFZpc2l0b3ImKSBvdmVycmlkZTtcblxu
IikgaWYgJGludGVyZmFjZU9yQ2FsbGJhY2stPmV4dGVuZGVkQXR0cmlidXRlcy0+e0lzV2Vha0Nh
bGxiYWNrfTsKKyAgICBwdXNoKEAkY29udGVudFJlZiwgIiAgICB2b2lkIHZpc2l0SlNGdW5jdGlv
bihKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKSBvdmVycmlkZTtcblxuIikgaWYgJGludGVyZmFj
ZU9yQ2FsbGJhY2stPmV4dGVuZGVkQXR0cmlidXRlcy0+e0lzV2Vha0NhbGxiYWNrfTsKIAogICAg
IHB1c2goQCRjb250ZW50UmVmLCAiICAgICR7Y2FsbGJhY2tEYXRhVHlwZX0qIG1fZGF0YTtcbiIp
OwogICAgIHB1c2goQCRjb250ZW50UmVmLCAifTtcblxuIik7CkBAIC02NjIzLDcgKzY2MjcsNyBA
QCBzdWIgR2VuZXJhdGVDYWxsYmFja0ltcGxlbWVudGF0aW9uQ29udGVuCiAgICAgfQogCiAgICAg
aWYgKCRpbnRlcmZhY2VPckNhbGxiYWNrLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntJc1dlYWtDYWxs
YmFja30pIHsKLSAgICAgICAgcHVzaChAJGNvbnRlbnRSZWYsICJ2b2lkICR7Y2xhc3NOYW1lfTo6
dmlzaXRKU0Z1bmN0aW9uKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpXG4iKTsKKyAgICAgICAg
cHVzaChAJGNvbnRlbnRSZWYsICJ2b2lkICR7Y2xhc3NOYW1lfTo6dmlzaXRKU0Z1bmN0aW9uKEpT
Qzo6QWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcilcbiIpOwogICAgICAgICBwdXNoKEAkY29u
dGVudFJlZiwgIntcbiIpOwogICAgICAgICBwdXNoKEAkY29udGVudFJlZiwgIiAgICBtX2RhdGEt
PnZpc2l0SlNGdW5jdGlvbih2aXNpdG9yKTtcbiIpOwogICAgICAgICBwdXNoKEAkY29udGVudFJl
ZiwgIn1cblxuIik7CkBAIC02NzM0LDYgKzY3MzgsNyBAQCBzdWIgR2VuZXJhdGVJdGVyYWJsZURl
ZmluaXRpb24KICAgICBteSAkdmlzaWJsZUludGVyZmFjZU5hbWUgPSAkY29kZUdlbmVyYXRvci0+
R2V0VmlzaWJsZUludGVyZmFjZU5hbWUoJGludGVyZmFjZSk7CiAKICAgICBBZGRUb0ltcGxJbmNs
dWRlcygiSlNET01JdGVyYXRvci5oIik7CisgICAgQWRkVG9JbXBsSW5jbHVkZXMoIjxKYXZhU2Ny
aXB0Q29yZS9TbG90VmlzaXRvck1hY3Jvcy5oPiIpOwogCiAgICAgcmV0dXJuIHVubGVzcyBJc0tl
eVZhbHVlSXRlcmFibGVJbnRlcmZhY2UoJGludGVyZmFjZSk7CiAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2RvbS9BY3RpdmVET01DYWxsYmFjay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2RvbS9BY3RpdmVET01DYWxsYmFjay5oCShyZXZpc2lvbiAyNzI3NjkpCisrKyBTb3VyY2UvV2Vi
Q29yZS9kb20vQWN0aXZlRE9NQ2FsbGJhY2suaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYg
QEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCkBAIC0zMyw2ICsz
NCw3IEBACiAjaW5jbHVkZSAiQ29udGV4dERlc3RydWN0aW9uT2JzZXJ2ZXIuaCIKIAogbmFtZXNw
YWNlIEpTQyB7CitjbGFzcyBBYnN0cmFjdFNsb3RWaXNpdG9yOwogY2xhc3MgU2xvdFZpc2l0b3I7
CiB9CiAKQEAgLTU1LDcgKzU3LDcgQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wg
YWN0aXZlRE9NT2JqZWN0c0FyZVN1c3BlbmRlZCgpIGNvbnN0OwogICAgIFdFQkNPUkVfRVhQT1JU
IGJvb2wgYWN0aXZlRE9NT2JqZWN0QXJlU3RvcHBlZCgpIGNvbnN0OwogICAgIAotICAgIHZpcnR1
YWwgdm9pZCB2aXNpdEpTRnVuY3Rpb24oSlNDOjpTbG90VmlzaXRvciYpIHsgfQorICAgIHZpcnR1
YWwgdm9pZCB2aXNpdEpTRnVuY3Rpb24oSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJikgeyB9CiB9
OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRXZl
bnRMaXN0ZW5lci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9FdmVudExpc3Rl
bmVyLmgJKHJldmlzaW9uIDI3Mjc2OSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9FdmVudExpc3Rl
bmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDA2LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAwNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYwpAQCAtMjQsOCArMjQsOCBAQAogI2luY2x1ZGUgPHd0Zi9XZWFrUHRy
Lmg+CiAKIG5hbWVzcGFjZSBKU0MgeworY2xhc3MgQWJzdHJhY3RTbG90VmlzaXRvcjsKIGNsYXNz
IEpTT2JqZWN0OwotY2xhc3MgU2xvdFZpc2l0b3I7CiB9CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
QEAgLTUyLDcgKzUyLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVFdmVudChT
Y3JpcHRFeGVjdXRpb25Db250ZXh0JiwgRXZlbnQmKSA9IDA7CiAgICAgdmlydHVhbCBib29sIHdh
c0NyZWF0ZWRGcm9tTWFya3VwKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KIAotICAgIHZpcnR1
YWwgdm9pZCB2aXNpdEpTRnVuY3Rpb24oSlNDOjpTbG90VmlzaXRvciYpIHsgfQorICAgIHZpcnR1
YWwgdm9pZCB2aXNpdEpTRnVuY3Rpb24oSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJikgeyB9CiAK
ICAgICB2aXJ0dWFsIGJvb2wgaXNBdHRyaWJ1dGUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQog
ICAgIFR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQpJbmRleDogU291cmNlL1dl
YkNvcmUvZG9tL0V2ZW50VGFyZ2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9k
b20vRXZlbnRUYXJnZXQuY3BwCShyZXZpc2lvbiAyNzI3NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9k
b20vRXZlbnRUYXJnZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yLDcgKzIsNyBAQAogICogQ29w
eXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCiAgKiAgICAgICAgICAg
KEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCiAgKiAgICAgICAgICAg
KEMpIDIwMDEgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDQtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDQtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmln
aHQgKEMpIDIwMDYgQWxleGV5IFByb3NrdXJ5YWtvdiAoYXBAd2Via2l0Lm9yZykKICAqICAgICAg
ICAgICAoQykgMjAwNywgMjAwOCBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9y
Zz4KICAqCkBAIC0zODQsNyArMzg0LDggQEAgdm9pZCBFdmVudFRhcmdldDo6cmVtb3ZlQWxsRXZl
bnRMaXN0ZW5lcgogICAgIHRocmVhZERhdGEuc2V0SXNJblJlbW92ZUFsbEV2ZW50TGlzdGVuZXJz
KGZhbHNlKTsKIH0KIAotdm9pZCBFdmVudFRhcmdldDo6dmlzaXRKU0V2ZW50TGlzdGVuZXJzKEpT
Qzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9p
ZCBFdmVudFRhcmdldDo6dmlzaXRKU0V2ZW50TGlzdGVuZXJzKFZpc2l0b3ImIHZpc2l0b3IpCiB7
CiAgICAgRXZlbnRUYXJnZXREYXRhKiBkYXRhID0gZXZlbnRUYXJnZXREYXRhQ29uY3VycmVudGx5
KCk7CiAgICAgaWYgKCFkYXRhKQpAQCAtMzk2LDYgKzM5Nyw5IEBAIHZvaWQgRXZlbnRUYXJnZXQ6
OnZpc2l0SlNFdmVudExpc3RlbmVycygKICAgICAgICAgbGlzdGVuZXItPnZpc2l0SlNGdW5jdGlv
bih2aXNpdG9yKTsKIH0KIAordGVtcGxhdGUgdm9pZCBFdmVudFRhcmdldDo6dmlzaXRKU0V2ZW50
TGlzdGVuZXJzKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBFdmVu
dFRhcmdldDo6dmlzaXRKU0V2ZW50TGlzdGVuZXJzKEpTQzo6U2xvdFZpc2l0b3ImKTsKKwogdm9p
ZCBFdmVudFRhcmdldDo6aW52YWxpZGF0ZUV2ZW50TGlzdGVuZXJSZWdpb25zKCkKIHsKICAgICBp
ZiAoaXM8RWxlbWVudD4oKnRoaXMpKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRU
YXJnZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRUYXJnZXQuaAko
cmV2aXNpb24gMjcyNzY5KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50VGFyZ2V0LmgJKHdv
cmtpbmcgY29weSkKQEAgLTIsNyArMiw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDE5OTkgTGFycyBL
bm9sbCAoa25vbGxAa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0
byAoa29pdmlzdG9Aa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMjAwMSBEaXJrIE11ZWxsZXIg
KG11ZWxsZXJAa2RlLm9yZykKLSAqIENvcHlyaWdodCAoQykgMjAwNC0yMDE3IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDIxIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwNiBBbGV4ZXkgUHJv
c2t1cnlha292IChhcEB3ZWJraXQub3JnKQogICogICAgICAgICAgIChDKSAyMDA3LCAyMDA4IE5p
a29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgogICoKQEAgLTk3LDcgKzk3LDcg
QEAgcHVibGljOgogICAgIHZvaWQgZmlyZUV2ZW50TGlzdGVuZXJzKEV2ZW50JiwgRXZlbnRJbnZv
a2VQaGFzZSk7CiAgICAgYm9vbCBpc0ZpcmluZ0V2ZW50TGlzdGVuZXJzKCkgY29uc3Q7CiAKLSAg
ICB2b2lkIHZpc2l0SlNFdmVudExpc3RlbmVycyhKU0M6OlNsb3RWaXNpdG9yJik7CisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCB2aXNpdEpTRXZlbnRMaXN0ZW5lcnMoVmlzaXRv
ciYpOwogICAgIHZvaWQgaW52YWxpZGF0ZUpTRXZlbnRMaXN0ZW5lcnMoSlNDOjpKU09iamVjdCop
OwogCiAgICAgY29uc3QgRXZlbnRUYXJnZXREYXRhKiBldmVudFRhcmdldERhdGEoKSBjb25zdDsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9NdXRhdGlvblJlY29yZC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvZG9tL011dGF0aW9uUmVjb3JkLmNwcAkocmV2aXNpb24gMjcyNzY5
KQorKysgU291cmNlL1dlYkNvcmUvZG9tL011dGF0aW9uUmVjb3JkLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCkBA
IC00MSw3ICs0Miw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogbmFtZXNwYWNlIHsKIAotc3Rh
dGljIHZvaWQgdmlzaXROb2RlTGlzdChKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yLCBOb2RlTGlz
dCYgbm9kZUxpc3QpCitzdGF0aWMgdm9pZCB2aXNpdE5vZGVMaXN0KEpTQzo6QWJzdHJhY3RTbG90
VmlzaXRvciYgdmlzaXRvciwgTm9kZUxpc3QmIG5vZGVMaXN0KQogewogICAgIEFTU0VSVCghbm9k
ZUxpc3QuaXNMaXZlTm9kZUxpc3QoKSk7CiAgICAgdW5zaWduZWQgbGVuZ3RoID0gbm9kZUxpc3Qu
bGVuZ3RoKCk7CkBAIC02OCw3ICs2OSw3IEBAIHByaXZhdGU6CiAgICAgTm9kZSogcHJldmlvdXNT
aWJsaW5nKCkgb3ZlcnJpZGUgeyByZXR1cm4gbV9wcmV2aW91c1NpYmxpbmcuZ2V0KCk7IH0KICAg
ICBOb2RlKiBuZXh0U2libGluZygpIG92ZXJyaWRlIHsgcmV0dXJuIG1fbmV4dFNpYmxpbmcuZ2V0
KCk7IH0KIAotICAgIHZvaWQgdmlzaXROb2Rlc0NvbmN1cnJlbnRseShKU0M6OlNsb3RWaXNpdG9y
JiB2aXNpdG9yKSBjb25zdCBmaW5hbAorICAgIHZvaWQgdmlzaXROb2Rlc0NvbmN1cnJlbnRseShK
U0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0IGZpbmFsCiAgICAgewogICAg
ICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qocm9vdChtX3RhcmdldC5wdHIoKSkpOwogICAgICAg
ICBpZiAobV9hZGRlZE5vZGVzKQpAQCAtMTA1LDcgKzEwNiw3IEBAIHByaXZhdGU6CiAgICAgICAg
IHJldHVybiBub2RlTGlzdC5nZXQoKTsKICAgICB9CiAKLSAgICB2b2lkIHZpc2l0Tm9kZXNDb25j
dXJyZW50bHkoSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikgY29uc3QgZmluYWwKKyAgICB2b2lk
IHZpc2l0Tm9kZXNDb25jdXJyZW50bHkoSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9y
KSBjb25zdCBmaW5hbAogICAgIHsKICAgICAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHJvb3Qo
bV90YXJnZXQucHRyKCkpKTsKICAgICB9CkBAIC0xNjQsNyArMTY1LDcgQEAgcHJpdmF0ZToKIAog
ICAgIFN0cmluZyBvbGRWYWx1ZSgpIG92ZXJyaWRlIHsgcmV0dXJuIFN0cmluZygpOyB9CiAKLSAg
ICB2b2lkIHZpc2l0Tm9kZXNDb25jdXJyZW50bHkoSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikg
Y29uc3QgZmluYWwKKyAgICB2b2lkIHZpc2l0Tm9kZXNDb25jdXJyZW50bHkoSlNDOjpBYnN0cmFj
dFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBjb25zdCBmaW5hbAogICAgIHsKICAgICAgICAgbV9yZWNv
cmQtPnZpc2l0Tm9kZXNDb25jdXJyZW50bHkodmlzaXRvcik7CiAgICAgfQpJbmRleDogU291cmNl
L1dlYkNvcmUvZG9tL011dGF0aW9uUmVjb3JkLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvZG9tL011dGF0aW9uUmVjb3JkLmgJKHJldmlzaW9uIDI3Mjc2OSkKKysrIFNvdXJjZS9XZWJD
b3JlL2RvbS9NdXRhdGlvblJlY29yZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAog
LyoKICAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKQEAgLTM2LDcgKzM3LDcgQEAKIAog
bmFtZXNwYWNlIEpTQyB7CiAKLWNsYXNzIFNsb3RWaXNpdG9yOworY2xhc3MgQWJzdHJhY3RTbG90
VmlzaXRvcjsKIAogfQogCkBAIC03Miw3ICs3Myw3IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwg
U3RyaW5nIG9sZFZhbHVlKCkgeyByZXR1cm4gU3RyaW5nKCk7IH0KIAotICAgIHZpcnR1YWwgdm9p
ZCB2aXNpdE5vZGVzQ29uY3VycmVudGx5KEpTQzo6U2xvdFZpc2l0b3ImKSBjb25zdCA9IDA7Cisg
ICAgdmlydHVhbCB2b2lkIHZpc2l0Tm9kZXNDb25jdXJyZW50bHkoSlNDOjpBYnN0cmFjdFNsb3RW
aXNpdG9yJikgY29uc3QgPSAwOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDog
U291cmNlL1dlYkNvcmUvZG9tL1N0YXRpY1JhbmdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9kb20vU3RhdGljUmFuZ2UuY3BwCShyZXZpc2lvbiAyNzI3NjkpCisrKyBTb3VyY2Uv
V2ViQ29yZS9kb20vU3RhdGljUmFuZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNzYsNyArNzYs
NyBAQCBFeGNlcHRpb25PcjxSZWY8U3RhdGljUmFuZ2U+PiBTdGF0aWNSYW5nCiAgICAgcmV0dXJu
IGNyZWF0ZSh7IHsgaW5pdC5zdGFydENvbnRhaW5lci5yZWxlYXNlTm9uTnVsbCgpLCBpbml0LnN0
YXJ0T2Zmc2V0IH0sIHsgaW5pdC5lbmRDb250YWluZXIucmVsZWFzZU5vbk51bGwoKSwgaW5pdC5l
bmRPZmZzZXQgfSB9KTsKIH0KIAotdm9pZCBTdGF0aWNSYW5nZTo6dmlzaXROb2Rlc0NvbmN1cnJl
bnRseShKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKSBjb25zdAordm9pZCBTdGF0aWNSYW5nZTo6
dmlzaXROb2Rlc0NvbmN1cnJlbnRseShKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3Ip
IGNvbnN0CiB7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHJvb3Qoc3RhcnQuY29udGFpbmVy
LmdldCgpKSk7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHJvb3QoZW5kLmNvbnRhaW5lci5n
ZXQoKSkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL1N0YXRpY1JhbmdlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL1N0YXRpY1JhbmdlLmgJKHJldmlzaW9uIDI3Mjc2OSkK
KysrIFNvdXJjZS9XZWJDb3JlL2RvbS9TdGF0aWNSYW5nZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIwIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MzAsNyArMzAsNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotY2xhc3MgU2xvdFZpc2l0b3I7Citj
bGFzcyBBYnN0cmFjdFNsb3RWaXNpdG9yOwogCiB9CiAKQEAgLTU4LDcgKzU4LDcgQEAgcHVibGlj
OgogICAgIHVuc2lnbmVkIGVuZE9mZnNldCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIFNpbXBsZVJh
bmdlOjplbmRPZmZzZXQoKTsgfQogICAgIGJvb2wgY29sbGFwc2VkKCkgY29uc3QgZmluYWwgeyBy
ZXR1cm4gU2ltcGxlUmFuZ2U6OmNvbGxhcHNlZCgpOyB9CiAKLSAgICB2b2lkIHZpc2l0Tm9kZXND
b25jdXJyZW50bHkoSlNDOjpTbG90VmlzaXRvciYpIGNvbnN0OworICAgIHZvaWQgdmlzaXROb2Rl
c0NvbmN1cnJlbnRseShKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKSBjb25zdDsKIAogcHJpdmF0
ZToKICAgICBTdGF0aWNSYW5nZShTaW1wbGVSYW5nZSYmKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL1dlYkdMMlJlbmRlcmluZ0NvbnRleHQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMMlJlbmRlcmluZ0NvbnRleHQuY3BwCShyZXZp
c2lvbiAyNzI3NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTDJSZW5kZXJp
bmdDb250ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTUtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMwNzgsNyArMzA3OCw3IEBAIGJvb2wg
V2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6Y2hlY2tBbmRUcmEKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IAotdm9pZCBXZWJHTDJSZW5kZXJpbmdDb250ZXh0OjphZGRNZW1iZXJzVG9PcGFxdWVSb290cyhK
U0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBXZWJHTDJSZW5kZXJpbmdDb250ZXh0Ojph
ZGRNZW1iZXJzVG9PcGFxdWVSb290cyhKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3Ip
CiB7CiAgICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6YWRkTWVtYmVyc1RvT3BhcXVlUm9v
dHModmlzaXRvcik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMMlJl
bmRlcmluZ0NvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZh
cy9XZWJHTDJSZW5kZXJpbmdDb250ZXh0LmgJKHJldmlzaW9uIDI3Mjc2OSkKKysrIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMMlJlbmRlcmluZ0NvbnRleHQuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTI2MSw3ICsyNjEsNyBAQCBwdWJsaWM6CiAKICAgICBib29sIGNoZWNrQW5kVHJhbnNs
YXRlQXR0YWNobWVudHMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQ0dMZW51bSwgVmVjdG9y
PEdDR0xlbnVtPiYpOwogCi0gICAgdm9pZCBhZGRNZW1iZXJzVG9PcGFxdWVSb290cyhKU0M6OlNs
b3RWaXNpdG9yJikgb3ZlcnJpZGU7CisgICAgdm9pZCBhZGRNZW1iZXJzVG9PcGFxdWVSb290cyhK
U0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKSBvdmVycmlkZTsKIAogcHJpdmF0ZToKICAgICBXZWJH
TDJSZW5kZXJpbmdDb250ZXh0KENhbnZhc0Jhc2UmLCBHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0
ZXMpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xGcmFtZWJ1ZmZlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xGcmFtZWJ1
ZmZlci5jcHAJKHJldmlzaW9uIDI3Mjc2OSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L1dlYkdMRnJhbWVidWZmZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAwOS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjMsNyArNjMsNyBAQCBu
YW1lc3BhY2UgewogICAgICAgICB2b2lkIG9uRGV0YWNoZWQoY29uc3QgQWJzdHJhY3RMb2NrZXIm
LCBHcmFwaGljc0NvbnRleHRHTCopIG92ZXJyaWRlOwogICAgICAgICB2b2lkIGF0dGFjaChHcmFw
aGljc0NvbnRleHRHTCosIEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gYXR0YWNobWVudCkgb3Zl
cnJpZGU7CiAgICAgICAgIHZvaWQgdW5hdHRhY2goR3JhcGhpY3NDb250ZXh0R0wqLCBHQ0dMZW51
bSB0YXJnZXQsIEdDR0xlbnVtIGF0dGFjaG1lbnQpIG92ZXJyaWRlOwotICAgICAgICB2b2lkIGFk
ZE1lbWJlcnNUb09wYXF1ZVJvb3RzKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgSlNDOjpTbG90Vmlz
aXRvciYpIG92ZXJyaWRlOworICAgICAgICB2b2lkIGFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKGNv
bnN0IEFic3RyYWN0TG9ja2VyJiwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJikgb3ZlcnJpZGU7
CiAKICAgICAgICAgV2ViR0xSZW5kZXJidWZmZXJBdHRhY2htZW50KCkgeyB9OwogCkBAIC0xNDUs
NyArMTQ1LDcgQEAgbmFtZXNwYWNlIHsKICAgICAgICAgICAgIGNvbnRleHQtPmZyYW1lYnVmZmVy
UmVuZGVyYnVmZmVyKHRhcmdldCwgYXR0YWNobWVudCwgR3JhcGhpY3NDb250ZXh0R0w6OlJFTkRF
UkJVRkZFUiwgMCk7CiAgICAgfQogCi0gICAgdm9pZCBXZWJHTFJlbmRlcmJ1ZmZlckF0dGFjaG1l
bnQ6OmFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgSlNDOjpT
bG90VmlzaXRvciYgdmlzaXRvcikKKyAgICB2b2lkIFdlYkdMUmVuZGVyYnVmZmVyQXR0YWNobWVu
dDo6YWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMoY29uc3QgQWJzdHJhY3RMb2NrZXImLCBKU0M6OkFi
c3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiAgICAgewogICAgICAgICB2aXNpdG9yLmFkZE9w
YXF1ZVJvb3QobV9yZW5kZXJidWZmZXIuZ2V0KCkpOwogICAgIH0KQEAgLTE2OSw3ICsxNjksNyBA
QCBuYW1lc3BhY2UgewogICAgICAgICB2b2lkIG9uRGV0YWNoZWQoY29uc3QgQWJzdHJhY3RMb2Nr
ZXImLCBHcmFwaGljc0NvbnRleHRHTCopIG92ZXJyaWRlOwogICAgICAgICB2b2lkIGF0dGFjaChH
cmFwaGljc0NvbnRleHRHTCosIEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gYXR0YWNobWVudCkg
b3ZlcnJpZGU7CiAgICAgICAgIHZvaWQgdW5hdHRhY2goR3JhcGhpY3NDb250ZXh0R0wqLCBHQ0dM
ZW51bSB0YXJnZXQsIEdDR0xlbnVtIGF0dGFjaG1lbnQpIG92ZXJyaWRlOwotICAgICAgICB2b2lk
IGFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgSlNDOjpTbG90
VmlzaXRvciYpIG92ZXJyaWRlOworICAgICAgICB2b2lkIGFkZE1lbWJlcnNUb09wYXF1ZVJvb3Rz
KGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJikgb3ZlcnJp
ZGU7CiAKICAgICAgICAgV2ViR0xUZXh0dXJlQXR0YWNobWVudCgpIHsgfTsKIApAQCAtMjY3LDcg
KzI2Nyw3IEBAIG5hbWVzcGFjZSB7CiAjZW5kaWYKICAgICB9CiAKLSAgICB2b2lkIFdlYkdMVGV4
dHVyZUF0dGFjaG1lbnQ6OmFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKGNvbnN0IEFic3RyYWN0TG9j
a2VyJiwgSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKKyAgICB2b2lkIFdlYkdMVGV4dHVyZUF0
dGFjaG1lbnQ6OmFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwg
SlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogICAgIHsKICAgICAgICAgdmlzaXRv
ci5hZGRPcGFxdWVSb290KG1fdGV4dHVyZS5nZXQoKSk7CiAgICAgfQpAQCAtNzIxLDcgKzcyMSw3
IEBAIEdDR0xlbnVtIFdlYkdMRnJhbWVidWZmZXI6OmdldERyYXdCdWZmZXIKICAgICByZXR1cm4g
R3JhcGhpY3NDb250ZXh0R0w6Ok5PTkU7CiB9CiAKLXZvaWQgV2ViR0xGcmFtZWJ1ZmZlcjo6YWRk
TWVtYmVyc1RvT3BhcXVlUm9vdHMoY29uc3QgQWJzdHJhY3RMb2NrZXImIGxvY2tlciwgSlNDOjpT
bG90VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgV2ViR0xGcmFtZWJ1ZmZlcjo6YWRkTWVtYmVyc1Rv
T3BhcXVlUm9vdHMoY29uc3QgQWJzdHJhY3RMb2NrZXImIGxvY2tlciwgSlNDOjpBYnN0cmFjdFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGZvciAoYXV0byYgZW50cnkgOiBtX2F0dGFjaG1l
bnRzKQogICAgICAgICBlbnRyeS52YWx1ZS0+YWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMobG9ja2Vy
LCB2aXNpdG9yKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRnJhbWVi
dWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEZy
YW1lYnVmZmVyLmgJKHJldmlzaW9uIDI3Mjc2OSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2Fu
dmFzL1dlYkdMRnJhbWVidWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNCw3ICszNCw3IEBACiAjaW5j
bHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgSlNDIHsKLWNsYXNzIFNsb3RWaXNpdG9y
OworY2xhc3MgQWJzdHJhY3RTbG90VmlzaXRvcjsKIH0KIAogbmFtZXNwYWNlIFdURiB7CkBAIC02
NSw3ICs2NSw3IEBAIHB1YmxpYzoKICAgICAgICAgdmlydHVhbCB2b2lkIG9uRGV0YWNoZWQoY29u
c3QgV1RGOjpBYnN0cmFjdExvY2tlciYsIEdyYXBoaWNzQ29udGV4dEdMKikgPSAwOwogICAgICAg
ICB2aXJ0dWFsIHZvaWQgYXR0YWNoKEdyYXBoaWNzQ29udGV4dEdMKiwgR0NHTGVudW0gdGFyZ2V0
LCBHQ0dMZW51bSBhdHRhY2htZW50KSA9IDA7CiAgICAgICAgIHZpcnR1YWwgdm9pZCB1bmF0dGFj
aChHcmFwaGljc0NvbnRleHRHTCosIEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gYXR0YWNobWVu
dCkgPSAwOwotICAgICAgICB2aXJ0dWFsIHZvaWQgYWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMoY29u
c3QgV1RGOjpBYnN0cmFjdExvY2tlciYsIEpTQzo6U2xvdFZpc2l0b3ImKSA9IDA7CisgICAgICAg
IHZpcnR1YWwgdm9pZCBhZGRNZW1iZXJzVG9PcGFxdWVSb290cyhjb25zdCBXVEY6OkFic3RyYWN0
TG9ja2VyJiwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJikgPSAwOwogCiAgICAgcHJvdGVjdGVk
OgogICAgICAgICBXZWJHTEF0dGFjaG1lbnQoKTsKQEAgLTExNCw3ICsxMTQsNyBAQCBwdWJsaWM6
CiAKICAgICBHQ0dMZW51bSBnZXREcmF3QnVmZmVyKEdDR0xlbnVtKTsKIAotICAgIHZvaWQgYWRk
TWVtYmVyc1RvT3BhcXVlUm9vdHMoY29uc3QgV1RGOjpBYnN0cmFjdExvY2tlciYsIEpTQzo6U2xv
dFZpc2l0b3ImKTsKKyAgICB2b2lkIGFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKGNvbnN0IFdURjo6
QWJzdHJhY3RMb2NrZXImLCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKTsKIAogcHJpdmF0ZToK
ICAgICBXZWJHTEZyYW1lYnVmZmVyKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UmKTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUHJvZ3JhbS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xQcm9ncmFtLmNwcAkocmV2aXNpb24g
MjcyNzY5KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xQcm9ncmFtLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5LTIw
MjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0yMDYsNyArMjA2LDcgQEAgYm9vbCBXZWJHTFByb2dyYW06OmRldGFjaFNo
YWRlcihjb25zdCBBYgogICAgIH0KIH0KIAotdm9pZCBXZWJHTFByb2dyYW06OmFkZE1lbWJlcnNU
b09wYXF1ZVJvb3RzKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgSlNDOjpTbG90VmlzaXRvciYgdmlz
aXRvcikKK3ZvaWQgV2ViR0xQcm9ncmFtOjphZGRNZW1iZXJzVG9PcGFxdWVSb290cyhjb25zdCBB
YnN0cmFjdExvY2tlciYsIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAg
ICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QobV92ZXJ0ZXhTaGFkZXIuZ2V0KCkpOwogICAgIHZpc2l0
b3IuYWRkT3BhcXVlUm9vdChtX2ZyYWdtZW50U2hhZGVyLmdldCgpKTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUHJvZ3JhbS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUHJvZ3JhbS5oCShyZXZpc2lvbiAyNzI3NjkpCisrKyBT
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFByb2dyYW0uaAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxNyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAyMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTM1LDcgKzM1LDcgQEAKICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBK
U0MgewotY2xhc3MgU2xvdFZpc2l0b3I7CitjbGFzcyBBYnN0cmFjdFNsb3RWaXNpdG9yOwogfQog
CiBuYW1lc3BhY2UgV1RGIHsKQEAgLTg4LDcgKzg4LDcgQEAgcHVibGljOgogICAgICAgICByZXR1
cm4gbV9yZXF1aXJlZFRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyQ291bnQ7CiAgICAgfQogCi0gICAg
dm9pZCBhZGRNZW1iZXJzVG9PcGFxdWVSb290cyhjb25zdCBXVEY6OkFic3RyYWN0TG9ja2VyJiwg
SlNDOjpTbG90VmlzaXRvciYpOworICAgIHZvaWQgYWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMoY29u
c3QgV1RGOjpBYnN0cmFjdExvY2tlciYsIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpOwogCiBw
cml2YXRlOgogICAgIFdlYkdMUHJvZ3JhbShXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlJik7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlLmNwcAkocmV2aXNpb24gMjcyNzY5KQorKysgU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTcgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC03OTMxLDcgKzc5MzEsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmRp
c3BhdGNoCiAgICAgcXVldWVUYXNrVG9EaXNwYXRjaEV2ZW50KCpjYW52YXMsIFRhc2tTb3VyY2U6
OldlYkdMLCBXZWJHTENvbnRleHRFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS53ZWJnbGNvbnRl
eHRjaGFuZ2VkRXZlbnQsIEV2ZW50OjpDYW5CdWJibGU6Ok5vLCBFdmVudDo6SXNDYW5jZWxhYmxl
OjpZZXMsIGVtcHR5U3RyaW5nKCkpKTsKIH0KIAotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlOjphZGRNZW1iZXJzVG9PcGFxdWVSb290cyhKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQor
dm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjphZGRNZW1iZXJzVG9PcGFxdWVSb290cyhK
U0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0byBsb2NrZXIgPSBo
b2xkTG9jayhvYmplY3RHcmFwaExvY2soKSk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmgJKHJldmlzaW9u
IDI3Mjc2OSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTUtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU4LDcgKzU4LDcgQEAKICNlbmRpZgogCiBu
YW1lc3BhY2UgSlNDIHsKLWNsYXNzIFNsb3RWaXNpdG9yOworY2xhc3MgQWJzdHJhY3RTbG90Vmlz
aXRvcjsKIH0KIAogbmFtZXNwYWNlIFdURiB7CkBAIC00MTEsNyArNDExLDcgQEAgcHVibGljOgog
ICAgIHZvaWQgcmVjeWNsZUNvbnRleHQoKSBvdmVycmlkZTsKICAgICB2b2lkIGRpc3BhdGNoQ29u
dGV4dENoYW5nZWROb3RpZmljYXRpb24oKSBvdmVycmlkZTsKIAotICAgIHZpcnR1YWwgdm9pZCBh
ZGRNZW1iZXJzVG9PcGFxdWVSb290cyhKU0M6OlNsb3RWaXNpdG9yJik7CisgICAgdmlydHVhbCB2
b2lkIGFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpOwog
ICAgIC8vIFRoaXMgbG9jayBtdXN0IGJlIGhlbGQgYWNyb3NzIGFsbCBtdXRhdGlvbnMgb2YgY29u
dGFpbmVycyBsaWtlCiAgICAgLy8gVmVjdG9ycywgSGFzaFNldHMsIGV0Yy4gd2hpY2ggY29udGFp
biBSZWZQdHI8V2ViR0xPYmplY3Q+LCBhbmQKICAgICAvLyB3aGljaCBhcmUgdHJhdmVyc2VkIGJ5
IGFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKCkgb3IgYW55IG9mIHRoZQpJbmRleDogU291cmNlL1dl
YkNvcmUvaHRtbC9jYW52YXMvV2ViR0xUcmFuc2Zvcm1GZWVkYmFjay5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xUcmFuc2Zvcm1GZWVkYmFjay5jcHAJ
KHJldmlzaW9uIDI3Mjc2OSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVHJh
bnNmb3JtRmVlZGJhY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMwLDggKzMwLDcgQEAKIAogI2luY2x1
ZGUgIldlYkdMQ29udGV4dEdyb3VwLmgiCiAjaW5jbHVkZSAiV2ViR0xSZW5kZXJpbmdDb250ZXh0
QmFzZS5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1Nsb3RWaXNpdG9yLmg+Ci0jaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvU2xvdFZpc2l0b3JJbmxpbmVzLmg+CisjaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvQWJzdHJhY3RTbG90VmlzaXRvcklubGluZXMuaD4KICNpbmNsdWRlIDx3dGYvTG9j
ay5oPgogI2luY2x1ZGUgPHd0Zi9Mb2NrZXIuaD4KIApAQCAtOTMsNyArOTIsNyBAQCBib29sIFdl
YkdMVHJhbnNmb3JtRmVlZGJhY2s6Omhhc0Vub3VnaEJ1CiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
LXZvaWQgV2ViR0xUcmFuc2Zvcm1GZWVkYmFjazo6YWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMoY29u
c3QgQWJzdHJhY3RMb2NrZXImIGxvY2tlciwgSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3Zv
aWQgV2ViR0xUcmFuc2Zvcm1GZWVkYmFjazo6YWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMoY29uc3Qg
QWJzdHJhY3RMb2NrZXImIGxvY2tlciwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9y
KQogewogICAgIGZvciAoYXV0byYgYnVmZmVyIDogbV9ib3VuZEluZGV4ZWRUcmFuc2Zvcm1GZWVk
YmFja0J1ZmZlcnMpCiAgICAgICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChidWZmZXIuZ2V0KCkp
OwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xUcmFuc2Zvcm1GZWVkYmFj
ay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVHJhbnNm
b3JtRmVlZGJhY2suaAkocmV2aXNpb24gMjcyNzY5KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9j
YW52YXMvV2ViR0xUcmFuc2Zvcm1GZWVkYmFjay5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzEsNyAr
MzEsNyBAQAogI2luY2x1ZGUgIldlYkdMU2hhcmVkT2JqZWN0LmgiCiAKIG5hbWVzcGFjZSBKU0Mg
ewotY2xhc3MgU2xvdFZpc2l0b3I7CitjbGFzcyBBYnN0cmFjdFNsb3RWaXNpdG9yOwogfQogCiBu
YW1lc3BhY2UgV1RGIHsKQEAgLTcwLDcgKzcwLDcgQEAgcHVibGljOgogICAgIAogICAgIGJvb2wg
aGFzRW5vdWdoQnVmZmVycyhHQ0dMdWludCBudW1SZXF1aXJlZCkgY29uc3Q7CiAKLSAgICB2b2lk
IGFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgSlNDOjpTbG90
VmlzaXRvciYpOworICAgIHZvaWQgYWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMoY29uc3QgQWJzdHJh
Y3RMb2NrZXImLCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKTsKIAogcHJpdmF0ZToKICAgICBX
ZWJHTFRyYW5zZm9ybUZlZWRiYWNrKFdlYkdMMlJlbmRlcmluZ0NvbnRleHQmKTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVmVydGV4QXJyYXlPYmplY3RCYXNlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFZlcnRleEFycmF5
T2JqZWN0QmFzZS5jcHAJKHJldmlzaW9uIDI3Mjc2OSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL1dlYkdMVmVydGV4QXJyYXlPYmplY3RCYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTI5LDggKzI5LDcgQEAKICNpZiBFTkFCTEUoV0VCR0wpCiAKICNpbmNsdWRlICJXZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvU2xvdFZpc2l0b3Iu
aD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9TbG90VmlzaXRvcklubGluZXMuaD4KKyNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9BYnN0cmFjdFNsb3RWaXNpdG9ySW5saW5lcy5oPgogI2luY2x1
ZGUgPHd0Zi9Mb2NrZXIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMTA5LDcgKzEwOCw3
IEBAIHZvaWQgV2ViR0xWZXJ0ZXhBcnJheU9iamVjdEJhc2U6OnNldFZlcnQKICAgICBtX3ZlcnRl
eEF0dHJpYlN0YXRlW2luZGV4XS5kaXZpc29yID0gZGl2aXNvcjsKIH0KIAotdm9pZCBXZWJHTFZl
cnRleEFycmF5T2JqZWN0QmFzZTo6YWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMoY29uc3QgQWJzdHJh
Y3RMb2NrZXImLCBKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBXZWJHTFZlcnRleEFy
cmF5T2JqZWN0QmFzZTo6YWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMoY29uc3QgQWJzdHJhY3RMb2Nr
ZXImLCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgdmlzaXRvci5h
ZGRPcGFxdWVSb290KG1fYm91bmRFbGVtZW50QXJyYXlCdWZmZXIuZ2V0KCkpOwogICAgIGZvciAo
YXV0byYgc3RhdGUgOiBtX3ZlcnRleEF0dHJpYlN0YXRlKQpJbmRleDogU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvV2ViR0xWZXJ0ZXhBcnJheU9iamVjdEJhc2UuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFZlcnRleEFycmF5T2JqZWN0QmFzZS5oCShy
ZXZpc2lvbiAyNzI3NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFZlcnRl
eEFycmF5T2JqZWN0QmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxNS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzIsNyArMzIsNyBAQAogI2lu
Y2x1ZGUgIldlYkdMQ29udGV4dE9iamVjdC5oIgogCiBuYW1lc3BhY2UgSlNDIHsKLWNsYXNzIFNs
b3RWaXNpdG9yOworY2xhc3MgQWJzdHJhY3RTbG90VmlzaXRvcjsKIH0KIAogbmFtZXNwYWNlIFdU
RiB7CkBAIC03Nyw3ICs3Nyw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgc2V0VmVydGV4QXR0cmli
RGl2aXNvcihHQ0dMdWludCBpbmRleCwgR0NHTHVpbnQgZGl2aXNvcik7CiAKLSAgICB2b2lkIGFk
ZE1lbWJlcnNUb09wYXF1ZVJvb3RzKGNvbnN0IFdURjo6QWJzdHJhY3RMb2NrZXImLCBKU0M6OlNs
b3RWaXNpdG9yJik7CisgICAgdm9pZCBhZGRNZW1iZXJzVG9PcGFxdWVSb290cyhjb25zdCBXVEY6
OkFic3RyYWN0TG9ja2VyJiwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAKIHByb3RlY3Rl
ZDoKICAgICBXZWJHTFZlcnRleEFycmF5T2JqZWN0QmFzZShXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlJiwgVHlwZSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>420209</attachid>
            <date>2021-02-12 22:25:59 -0800</date>
            <delta_ts>2021-02-14 01:19:08 -0800</delta_ts>
            <desc>work in progress.</desc>
            <filename>bug-217274k.patch</filename>
            <type>text/plain</type>
            <size>580719</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDI3MjgzMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtNjEzLDYgKzYxMyw4IEBAIHNldChKYXZhU2NyaXB0Q29yZV9QUklWQVRFX0ZSQU1FV09SS19I
RUEKICAgICBkb21qaXQvRE9NSklUSGVhcFJhbmdlLmgKICAgICBkb21qaXQvRE9NSklUU2lnbmF0
dXJlLmgKIAorICAgIGhlYXAvQWJzdHJhY3RTbG90VmlzaXRvci5oCisgICAgaGVhcC9BYnN0cmFj
dFNsb3RWaXNpdG9ySW5saW5lcy5oCiAgICAgaGVhcC9BbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmgK
ICAgICBoZWFwL0FsbG9jYXRpb25GYWlsdXJlTW9kZS5oCiAgICAgaGVhcC9BbGxvY2F0b3IuaApA
QCAtNjg3LDEyICs2ODksMTQgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1BSSVZBVEVfRlJBTUVXT1JL
X0hFQQogICAgIGhlYXAvU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQuaAogICAgIGhlYXAvU2xvdFZp
c2l0b3IuaAogICAgIGhlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmgKKyAgICBoZWFwL1Nsb3RWaXNp
dG9yTWFjcm9zLmgKICAgICBoZWFwL1N0cm9uZy5oCiAgICAgaGVhcC9TdHJvbmdJbmxpbmVzLmgK
ICAgICBoZWFwL1N1YnNwYWNlLmgKICAgICBoZWFwL1N1YnNwYWNlSW5saW5lcy5oCiAgICAgaGVh
cC9TeW5jaHJvbm91c25lc3MuaAogICAgIGhlYXAvVGlueUJsb29tRmlsdGVyLmgKKyAgICBoZWFw
L1ZlcmlmaWVyU2xvdFZpc2l0b3IuaAogICAgIGhlYXAvVmlzaXRSYWNlS2V5LmgKICAgICBoZWFw
L1dlYWsuaAogICAgIGhlYXAvV2Vha0Jsb2NrLmgKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9Tb3VyY2VzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNl
cy50eHQJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2Vz
LnR4dAkod29ya2luZyBjb3B5KQpAQCAtNTYzLDYgKzU2Myw3IEBAIGhlYXAvU3RvcElmTmVjZXNz
YXJ5VGltZXIuY3BwCiBoZWFwL1N1YnNwYWNlLmNwcAogaGVhcC9TeW5jaHJvbm91c1N0b3BUaGVX
b3JsZE11dGF0b3JTY2hlZHVsZXIuY3BwCiBoZWFwL1N5bmNocm9ub3VzbmVzcy5jcHAKK2hlYXAv
VmVyaWZpZXJTbG90VmlzaXRvci5jcHAKIGhlYXAvVmlzaXRSYWNlS2V5LmNwcAogaGVhcC9XZWFr
LmNwcAogaGVhcC9XZWFrQmxvY2suY3BwCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJ
L0pTQVBJV3JhcHBlck9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9BUEkvSlNBUElXcmFwcGVyT2JqZWN0LmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9BUEkvSlNBUElXcmFwcGVyT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTkgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC00MSw3ICs0MSw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBzdWJzcGFjZUZvcihWTSYp
IHsgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQogICAgIAogICAgIHZvaWQgZmluaXNo
Q3JlYXRpb24oVk0mKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIEpT
Qzo6U2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX0VYUE9SVF9WSVNJVF9DSElMRFJFTjsKICAg
ICAKICAgICB2b2lkKiB3cmFwcGVkT2JqZWN0KCkgeyByZXR1cm4gbV93cmFwcGVkT2JqZWN0OyB9
CiAgICAgdm9pZCBzZXRXcmFwcGVkT2JqZWN0KHZvaWQqKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvSlNBUElXcmFwcGVyT2JqZWN0Lm1tCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9BUEkvSlNBUElXcmFwcGVyT2JqZWN0Lm1tCShyZXZpc2lvbiAyNzI4MzAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQVBJV3JhcHBlck9iamVjdC5tbQkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
OCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTM3LDcgKzM3LDcgQEAKIGNsYXNzIEpTQVBJV3JhcHBlck9iamVjdEhh
bmRsZU93bmVyIGZpbmFsIDogcHVibGljIEpTQzo6V2Vha0hhbmRsZU93bmVyIHsKIHB1YmxpYzoK
ICAgICB2b2lkIGZpbmFsaXplKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqKSBmaW5h
bDsKLSAgICBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6
VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6U2xvdFZpc2l0b3ImLCBjb25zdCBjaGFyKiop
IGZpbmFsOworICAgIGJvb2wgaXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8
SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiwg
Y29uc3QgY2hhcioqKSBmaW5hbDsKIH07CiAKIHN0YXRpYyBKU0FQSVdyYXBwZXJPYmplY3RIYW5k
bGVPd25lcioganNBUElXcmFwcGVyT2JqZWN0SGFuZGxlT3duZXIoKQpAQCAtNTYsMTQgKzU2LDE0
IEBAIHZvaWQgSlNBUElXcmFwcGVyT2JqZWN0SGFuZGxlT3duZXI6OmZpbmEKICAgICBKU0M6Oldl
YWtTZXQ6OmRlYWxsb2NhdGUoSlNDOjpXZWFrSW1wbDo6YXNXZWFrSW1wbChoYW5kbGUuc2xvdCgp
KSk7CiB9CiAKLWJvb2wgSlNBUElXcmFwcGVyT2JqZWN0SGFuZGxlT3duZXI6OmlzUmVhY2hhYmxl
RnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwg
SlNDOjpTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqKQorYm9vbCBKU0FQSVdyYXBw
ZXJPYmplY3RIYW5kbGVPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5k
bGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3Im
IHZpc2l0b3IsIGNvbnN0IGNoYXIqKikKIHsKICAgICBKU0M6OkpTQVBJV3JhcHBlck9iamVjdCog
d3JhcHBlck9iamVjdCA9IEpTQzo6anNDYXN0PEpTQzo6SlNBUElXcmFwcGVyT2JqZWN0Kj4oaGFu
ZGxlLmdldCgpLmFzQ2VsbCgpKTsKICAgICAvLyBXZSB1c2UgdGhlIEpTR2xvYmFsT2JqZWN0IHdo
ZW4gcHJvY2Vzc2luZyB3ZWFrIGhhbmRsZXMgdG8gcHJldmVudCB0aGUgc2l0dWF0aW9uIHdoZXJl
IHVzaW5nCiAgICAgLy8gdGhlIHNhbWUgT2JqZWN0aXZlLUMgb2JqZWN0IGluIG11bHRpcGxlIGds
b2JhbCBvYmplY3RzIGtlZXBzIGFsbCBvZiB0aGUgZ2xvYmFsIG9iamVjdHMgYWxpdmUuCiAgICAg
aWYgKCF3cmFwcGVyT2JqZWN0LT53cmFwcGVkT2JqZWN0KCkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICByZXR1cm4gdmlzaXRvci52bSgpLmhlYXAuaXNNYXJrZWQod3JhcHBlck9iamVjdC0+
c3RydWN0dXJlKCktPmdsb2JhbE9iamVjdCgpKSAmJiB2aXNpdG9yLmNvbnRhaW5zT3BhcXVlUm9v
dCh3cmFwcGVyT2JqZWN0LT53cmFwcGVkT2JqZWN0KCkpOworICAgIHJldHVybiB2aXNpdG9yLmlz
TWFya2VkKHdyYXBwZXJPYmplY3QtPnN0cnVjdHVyZSgpLT5nbG9iYWxPYmplY3QoKSkgJiYgdmlz
aXRvci5jb250YWluc09wYXF1ZVJvb3Qod3JhcHBlck9iamVjdC0+d3JhcHBlZE9iamVjdCgpKTsK
IH0KIAogbmFtZXNwYWNlIEpTQyB7CkBAIC03Myw2ICs3Myw4IEBAIHN0YXRpYyBKU0NfREVDTEFS
RV9IT1NUX0ZVTkNUSU9OKGNvbnN0cnUKIHN0YXRpYyBKU0NfREVDTEFSRV9DVVNUT01fR0VUVEVS
KGNhbGxiYWNrR2V0dGVySlNBUElXcmFwcGVyT2JqZWN0Q2FsbGJhY2tPYmplY3QpOwogc3RhdGlj
IEpTQ19ERUNMQVJFX0NVU1RPTV9HRVRURVIoc3RhdGljRnVuY3Rpb25HZXR0ZXJKU0FQSVdyYXBw
ZXJPYmplY3RDYWxsYmFja09iamVjdCk7CiAKK0RFRklORV9URU1QTEFURV9WSVNJVF9DSElMRFJF
Tih0ZW1wbGF0ZTw+LCBKU0NhbGxiYWNrT2JqZWN0PEpTQVBJV3JhcHBlck9iamVjdD4pOworCiB0
ZW1wbGF0ZSA8PiBjb25zdCBDbGFzc0luZm8gSlNDYWxsYmFja09iamVjdDxKU0FQSVdyYXBwZXJP
YmplY3Q+OjpzX2luZm8gPSB7ICJKU0FQSVdyYXBwZXJPYmplY3QiLCAmQmFzZTo6c19pbmZvLCBu
dWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTQ2FsbGJhY2tPYmplY3QpIH07
CiB0ZW1wbGF0ZSA8PiBjb25zdCBib29sIEpTQ2FsbGJhY2tPYmplY3Q8SlNBUElXcmFwcGVyT2Jq
ZWN0Pjo6bmVlZHNEZXN0cnVjdGlvbiA9IHRydWU7CiAKQEAgLTEyMyw3ICsxMjUsOCBAQCB2b2lk
IEpTQVBJV3JhcHBlck9iamVjdDo6c2V0V3JhcHBlZE9iamVjCiAgICAgbV93cmFwcGVkT2JqZWN0
ID0gW3N0YXRpY19jYXN0PGlkPih3cmFwcGVkT2JqZWN0KSByZXRhaW5dOwogfQogCi12b2lkIEpT
QVBJV3JhcHBlck9iamVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIEpTQzo6U2xvdFZp
c2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0FQSVdy
YXBwZXJPYmplY3Q6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlz
aXRvcikKIHsKICAgICBKU0FQSVdyYXBwZXJPYmplY3QqIHRoaXNPYmplY3QgPSBKU0M6OmpzQ2Fz
dDxKU0FQSVdyYXBwZXJPYmplY3QqPihjZWxsKTsKICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKGNl
bGwsIHZpc2l0b3IpOwpAQCAtMTMzLDYgKzEzNiw4IEBAIHZvaWQgSlNBUElXcmFwcGVyT2JqZWN0
Ojp2aXNpdENoaWxkcmVuKEoKICAgICAgICAgc2NhbkV4dGVybmFsT2JqZWN0R3JhcGgodmlzaXRv
ci52bSgpLCB2aXNpdG9yLCB3cmFwcGVkT2JqZWN0KTsKIH0KIAorREVGSU5FX0VYUE9SVF9WSVNJ
VF9DSElMRFJFTihKU0FQSVdyYXBwZXJPYmplY3QpOworCiB0ZW1wbGF0ZSA8PgogSXNvU3Vic3Bh
Y2UqIEpTQ2FsbGJhY2tPYmplY3Q8SlNBUElXcmFwcGVyT2JqZWN0Pjo6c3Vic3BhY2VGb3JJbXBs
KFZNJiB2bSwgU3Vic3BhY2VBY2Nlc3MgbW9kZSkKIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0LmNwcAkocmV2aXNpb24gMjcyODMwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNyBBcHBs
ZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA3IEVy
aWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC00MSw2ICs0
MSw5IEBAIHN0YXRpYyBKU0NfREVDTEFSRV9DVVNUT01fR0VUVEVSKHN0YXRpY0YKIHN0YXRpYyBK
U0NfREVDTEFSRV9DVVNUT01fR0VUVEVSKGNhbGxiYWNrR2V0dGVySlNHbG9iYWxPYmplY3RDYWxs
YmFja09iamVjdCk7CiBzdGF0aWMgSlNDX0RFQ0xBUkVfQ1VTVE9NX0dFVFRFUihzdGF0aWNGdW5j
dGlvbkdldHRlckpTR2xvYmFsT2JqZWN0Q2FsbGJhY2tPYmplY3QpOwogCitERUZJTkVfVEVNUExB
VEVfVklTSVRfQ0hJTERSRU4odGVtcGxhdGU8PiwgSlNDYWxsYmFja09iamVjdDxKU05vbkZpbmFs
T2JqZWN0Pik7CitERUZJTkVfVEVNUExBVEVfVklTSVRfQ0hJTERSRU4odGVtcGxhdGU8PiwgSlND
YWxsYmFja09iamVjdDxKU0dsb2JhbE9iamVjdD4pOworCiAvLyBEZWZpbmUgdGhlIHR3byB0eXBl
cyBvZiBKU0NhbGxiYWNrT2JqZWN0cyB3ZSBzdXBwb3J0LgogdGVtcGxhdGUgPD4gY29uc3QgQ2xh
c3NJbmZvIEpTQ2FsbGJhY2tPYmplY3Q8SlNOb25GaW5hbE9iamVjdD46OnNfaW5mbyA9IHsgIkNh
bGxiYWNrT2JqZWN0IiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01F
VEhPRF9UQUJMRShKU0NhbGxiYWNrT2JqZWN0KSB9OwogdGVtcGxhdGUgPD4gY29uc3QgQ2xhc3NJ
bmZvIEpTQ2FsbGJhY2tPYmplY3Q8SlNHbG9iYWxPYmplY3Q+OjpzX2luZm8gPSB7ICJDYWxsYmFj
a0dsb2JhbE9iamVjdCIsICZCYXNlOjpzX2luZm8sIG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9N
RVRIT0RfVEFCTEUoSlNDYWxsYmFja09iamVjdCkgfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdC5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3QuaAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcgRXJpYyBTZWlk
ZWwgPGVyaWNAd2Via2l0Lm9yZz4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTY5LDcgKzY5LDEwIEBA
IHB1YmxpYzoKICAgICAgICAgbV9wcml2YXRlUHJvcGVydGllcy0+ZGVsZXRlUHJpdmF0ZVByb3Bl
cnR5KHByb3BlcnR5TmFtZSk7CiAgICAgfQogCi0gICAgdm9pZCB2aXNpdENoaWxkcmVuKFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQorICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CisKKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgorICAgIHZvaWQgdmlzaXRDaGlsZHJlbihWaXNpdG9yJiB2
aXNpdG9yKQogICAgIHsKICAgICAgICAgSlNQcml2YXRlUHJvcGVydHlNYXAqIHByb3BlcnRpZXMg
PSBtX3ByaXZhdGVQcm9wZXJ0aWVzLmdldCgpOwogICAgICAgICBpZiAoIXByb3BlcnRpZXMpCkBA
IC0xMDMsNyArMTA2LDggQEAgcHVibGljOgogICAgICAgICAgICAgbV9wcm9wZXJ0eU1hcC5yZW1v
dmUocHJvcGVydHlOYW1lLmltcGwoKSk7CiAgICAgICAgIH0KIAotICAgICAgICB2b2lkIHZpc2l0
Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFZpc2l0b3I+CisgICAgICAgIHZvaWQgdmlzaXRDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQog
ICAgICAgICB7CiAgICAgICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2xvY2spOwogICAgICAg
ICAgICAgZm9yIChhdXRvJiBwYWlyIDogbV9wcm9wZXJ0eU1hcCkgewpAQCAtMjE2LDEzICsyMjAs
NyBAQCBwcml2YXRlOgogICAgIHN0YXRpYyBDYWxsRGF0YSBnZXRDb25zdHJ1Y3REYXRhKEpTQ2Vs
bCopOwogICAgIHN0YXRpYyBDYWxsRGF0YSBnZXRDYWxsRGF0YShKU0NlbGwqKTsKIAotICAgIHN0
YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRv
cikKLSAgICB7Ci0gICAgICAgIEpTQ2FsbGJhY2tPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8
SlNDYWxsYmFja09iamVjdCo+KGNlbGwpOwotICAgICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVS
SVRTKChzdGF0aWNfY2FzdDxQYXJlbnQqPih0aGlzT2JqZWN0KSksIEpTQ2FsbGJhY2tPYmplY3Q8
UGFyZW50Pjo6aW5mbygpKTsKLSAgICAgICAgUGFyZW50Ojp2aXNpdENoaWxkcmVuKHRoaXNPYmpl
Y3QsIHZpc2l0b3IpOwotICAgICAgICB0aGlzT2JqZWN0LT5tX2NhbGxiYWNrT2JqZWN0RGF0YS0+
dmlzaXRDaGlsZHJlbih2aXNpdG9yKTsKLSAgICB9CisgICAgREVDTEFSRV9URU1QTEFURV9WSVNJ
VF9DSElMRFJFTjsKIAogICAgIHZvaWQgaW5pdChKU0dsb2JhbE9iamVjdCopOwogIApAQCAtMjQ1
LDYgKzI0MywxNiBAQCBwcml2YXRlOgogICAgIGNvbnN0IENsYXNzSW5mbyogbV9jbGFzc0luZm8g
eyBudWxscHRyIH07CiB9OwogCit0ZW1wbGF0ZSA8Y2xhc3MgUGFyZW50PgordGVtcGxhdGU8dHlw
ZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNDYWxsYmFja09iamVjdDxQYXJlbnQ+Ojp2aXNpdENoaWxk
cmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgSlNDYWxsYmFj
a09iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0NhbGxiYWNrT2JqZWN0Kj4oY2VsbCk7Cisg
ICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUygoc3RhdGljX2Nhc3Q8UGFyZW50Kj4odGhpc09i
amVjdCkpLCBKU0NhbGxiYWNrT2JqZWN0PFBhcmVudD46OmluZm8oKSk7CisgICAgUGFyZW50Ojp2
aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOworICAgIHRoaXNPYmplY3QtPm1fY2Fs
bGJhY2tPYmplY3REYXRhLT52aXNpdENoaWxkcmVuKHZpc2l0b3IpOworfQorCiB9IC8vIG5hbWVz
cGFjZSBKU0MKIAogLy8gaW5jbHVkZSB0aGUgYWN0dWFsIHRlbXBsYXRlIGNsYXNzIGltcGxlbWVu
dGF0aW9uCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTTWFuYWdlZFZhbHVlLm1t
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNNYW5hZ2VkVmFsdWUu
bW0JKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNNYW5h
Z2VkVmFsdWUubW0JKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDEzLCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDIsNyArNDIsNyBAQAogY2xhc3MgSlNN
YW5hZ2VkVmFsdWVIYW5kbGVPd25lciBmaW5hbCA6IHB1YmxpYyBKU0M6OldlYWtIYW5kbGVPd25l
ciB7CiBwdWJsaWM6CiAgICAgdm9pZCBmaW5hbGl6ZShKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+
LCB2b2lkKiBjb250ZXh0KSBmaW5hbDsKLSAgICBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJv
b3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6U2xvdFZp
c2l0b3ImLCBjb25zdCBjaGFyKiopIGZpbmFsOworICAgIGJvb2wgaXNSZWFjaGFibGVGcm9tT3Bh
cXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCwgSlNDOjpB
YnN0cmFjdFNsb3RWaXNpdG9yJiwgY29uc3QgY2hhcioqKSBmaW5hbDsKIH07CiAKIHN0YXRpYyBK
U01hbmFnZWRWYWx1ZUhhbmRsZU93bmVyJiBtYW5hZ2VkVmFsdWVIYW5kbGVPd25lcigpCkBAIC0x
ODAsNyArMTgwLDcgQEAgQGludGVyZmFjZSBKU01hbmFnZWRWYWx1ZSAoUHJpdmF0ZU1ldGhvZAog
LSAodm9pZClkaXNjb25uZWN0VmFsdWU7CiBAZW5kCiAKLWJvb2wgSlNNYW5hZ2VkVmFsdWVIYW5k
bGVPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtu
b3duPiwgdm9pZCogY29udGV4dCwgSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hh
cioqIHJlYXNvbikKK2Jvb2wgSlNNYW5hZ2VkVmFsdWVIYW5kbGVPd25lcjo6aXNSZWFjaGFibGVG
cm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCwg
SlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQog
ewogICAgIGlmIChVTkxJS0VMWShyZWFzb24pKQogICAgICAgICAqcmVhc29uID0gIkpTTWFuYWdl
ZFZhbHVlIGlzIG9wYXF1ZSByb290IjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkv
SlNNYXJraW5nQ29uc3RyYWludFByaXZhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9BUEkvSlNNYXJraW5nQ29uc3RyYWludFByaXZhdGUuY3BwCShyZXZpc2lvbiAy
NzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTTWFya2luZ0NvbnN0cmFpbnRQ
cml2YXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsNyBAQCBuYW1lc3BhY2Ugewog
QXRvbWljPHVuc2lnbmVkPiBjb25zdHJhaW50Q291bnRlcjsKIAogc3RydWN0IE1hcmtlciA6IEpT
TWFya2VyIHsKLSAgICBTbG90VmlzaXRvciogdmlzaXRvcjsKKyAgICBBYnN0cmFjdFNsb3RWaXNp
dG9yKiB2aXNpdG9yOwogfTsKIAogYm9vbCBpc01hcmtlZChKU01hcmtlclJlZiBtYXJrZXJSZWYs
IEpTT2JqZWN0UmVmIG9iamVjdFJlZikKQEAgLTQ0LDcgKzQ0LDcgQEAgYm9vbCBpc01hcmtlZChK
U01hcmtlclJlZiBtYXJrZXJSZWYsIEpTTwogICAgIGlmICghb2JqZWN0UmVmKQogICAgICAgICBy
ZXR1cm4gdHJ1ZTsgLy8gTnVsbCBpcyBhbiBpbW1vcnRhbCBvYmplY3QuCiAgICAgCi0gICAgcmV0
dXJuIHN0YXRpY19jYXN0PE1hcmtlcio+KG1hcmtlclJlZiktPnZpc2l0b3ItPnZtKCkuaGVhcC5p
c01hcmtlZCh0b0pTKG9iamVjdFJlZikpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxNYXJrZXIq
PihtYXJrZXJSZWYpLT52aXNpdG9yLT5pc01hcmtlZCh0b0pTKG9iamVjdFJlZikpOwogfQogCiB2
b2lkIG1hcmsoSlNNYXJrZXJSZWYgbWFya2VyUmVmLCBKU09iamVjdFJlZiBvYmplY3RSZWYpCkBA
IC03Myw3ICs3Myw3IEBAIHZvaWQgSlNDb250ZXh0R3JvdXBBZGRNYXJraW5nQ29uc3RyYWludCgK
ICAgICBhdXRvIGNvbnN0cmFpbnQgPSBtYWtlVW5pcXVlPFNpbXBsZU1hcmtpbmdDb25zdHJhaW50
PigKICAgICAgICAgdG9DU3RyaW5nKCJBbWMiLCBjb25zdHJhaW50SW5kZXgsICIoIiwgUmF3UG9p
bnRlcihiaXR3aXNlX2Nhc3Q8dm9pZCo+KGNvbnN0cmFpbnRDYWxsYmFjaykpLCAiKSIpLAogICAg
ICAgICB0b0NTdHJpbmcoIkFQSSBNYXJraW5nIENvbnN0cmFpbnQgIyIsIGNvbnN0cmFpbnRJbmRl
eCwgIiAoIiwgUmF3UG9pbnRlcihiaXR3aXNlX2Nhc3Q8dm9pZCo+KGNvbnN0cmFpbnRDYWxsYmFj
aykpLCAiLCAiLCBSYXdQb2ludGVyKHVzZXJEYXRhKSwgIikiKSwKLSAgICAgICAgW2NvbnN0cmFp
bnRDYWxsYmFjaywgdXNlckRhdGFdIChTbG90VmlzaXRvciYgdmlzaXRvcikgeworICAgICAgICBb
Y29uc3RyYWludENhbGxiYWNrLCB1c2VyRGF0YV0gKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0
b3IpIHsKICAgICAgICAgICAgIE1hcmtlciBtYXJrZXI7CiAgICAgICAgICAgICBtYXJrZXIuSXNN
YXJrZWQgPSBpc01hcmtlZDsKICAgICAgICAgICAgIG1hcmtlci5NYXJrID0gbWFyazsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWaXJ0dWFsTWFjaGluZS5tbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmlydHVhbE1hY2hpbmUubW0JKHJldmlz
aW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWaXJ0dWFsTWFjaGlu
ZS5tbQkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMxNSw3ICszMTUsOCBAQCArICh2b2lkKXNldENyYXNo
T25WTUNyZWF0aW9uOihCT09MKXNob3VsCiAKIEBlbmQKIAotc3RhdGljIHZvaWQgc2NhbkV4dGVy
bmFsT2JqZWN0R3JhcGgoSlNDOjpWTSYgdm0sIEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IsIHZv
aWQqIHJvb3QsIGJvb2wgbG9ja0FjcXVpcmVkKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4K
K3N0YXRpYyB2b2lkIHNjYW5FeHRlcm5hbE9iamVjdEdyYXBoKEpTQzo6Vk0mIHZtLCBWaXNpdG9y
JiB2aXNpdG9yLCB2b2lkKiByb290LCBib29sIGxvY2tBY3F1aXJlZCkKIHsKICAgICBAYXV0b3Jl
bGVhc2Vwb29sIHsKICAgICAgICAgSlNWaXJ0dWFsTWFjaGluZSAqdmlydHVhbE1hY2hpbmUgPSBb
SlNWTVdyYXBwZXJDYWNoZSB3cmFwcGVyRm9ySlNDb250ZXh0R3JvdXBSZWY6dG9SZWYoJnZtKV07
CkBAIC0zNDcsMTMgKzM0OCwxNyBAQCBzdGF0aWMgdm9pZCBzY2FuRXh0ZXJuYWxPYmplY3RHcmFw
aChKU0M6CiAgICAgfQogfQogCi12b2lkIHNjYW5FeHRlcm5hbE9iamVjdEdyYXBoKEpTQzo6Vk0m
IHZtLCBKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yLCB2b2lkKiByb290KQordGVtcGxhdGU8dHlw
ZW5hbWUgVmlzaXRvcj4KK3ZvaWQgc2NhbkV4dGVybmFsT2JqZWN0R3JhcGgoSlNDOjpWTSYgdm0s
IFZpc2l0b3ImIHZpc2l0b3IsIHZvaWQqIHJvb3QpCiB7CiAgICAgYm9vbCBsb2NrQWNxdWlyZWQg
PSBmYWxzZTsKICAgICBzY2FuRXh0ZXJuYWxPYmplY3RHcmFwaCh2bSwgdmlzaXRvciwgcm9vdCwg
bG9ja0FjcXVpcmVkKTsKIH0KIAotdm9pZCBzY2FuRXh0ZXJuYWxSZW1lbWJlcmVkU2V0KEpTQzo6
Vk0mIHZtLCBKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGUgdm9pZCBzY2FuRXh0
ZXJuYWxPYmplY3RHcmFwaChKU0M6OlZNJiwgSlNDOjpTbG90VmlzaXRvciYsIHZvaWQqKTsKK3Rl
bXBsYXRlIHZvaWQgc2NhbkV4dGVybmFsT2JqZWN0R3JhcGgoSlNDOjpWTSYsIEpTQzo6QWJzdHJh
Y3RTbG90VmlzaXRvciYsIHZvaWQqKTsKKwordm9pZCBzY2FuRXh0ZXJuYWxSZW1lbWJlcmVkU2V0
KEpTQzo6Vk0mIHZtLCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAg
QGF1dG9yZWxlYXNlcG9vbCB7CiAgICAgICAgIEpTVmlydHVhbE1hY2hpbmUgKnZpcnR1YWxNYWNo
aW5lID0gW0pTVk1XcmFwcGVyQ2FjaGUgd3JhcHBlckZvckpTQ29udGV4dEdyb3VwUmVmOnRvUmVm
KCZ2bSldOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1ZpcnR1YWxNYWNoaW5l
SW50ZXJuYWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmly
dHVhbE1hY2hpbmVJbnRlcm5hbC5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvQVBJL0pTVmlydHVhbE1hY2hpbmVJbnRlcm5hbC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTMyLDcgKzMyLDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiBjbGFzcyBWTTsKLWNsYXNzIFNs
b3RWaXNpdG9yOworY2xhc3MgQWJzdHJhY3RTbG90VmlzaXRvcjsKIH0KIAogI2lmIGRlZmluZWQo
X19PQkpDX18pCkBAIC01NCw4ICs1NCw4IEBAIEpTQ29udGV4dEdyb3VwUmVmIGdldEdyb3VwRnJv
bVZpcnR1YWxNYWMKIAogI2VuZGlmIC8vIGRlZmluZWQoX19PQkpDX18pCiAKLXZvaWQgc2NhbkV4
dGVybmFsT2JqZWN0R3JhcGgoSlNDOjpWTSYsIEpTQzo6U2xvdFZpc2l0b3ImLCB2b2lkKiByb290
KTsKLXZvaWQgc2NhbkV4dGVybmFsUmVtZW1iZXJlZFNldChKU0M6OlZNJiwgSlNDOjpTbG90Vmlz
aXRvciYpOwordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCBzY2FuRXh0ZXJuYWxPYmpl
Y3RHcmFwaChKU0M6OlZNJiwgVmlzaXRvciYsIHZvaWQqIHJvb3QpOwordm9pZCBzY2FuRXh0ZXJu
YWxSZW1lbWJlcmVkU2V0KEpTQzo6Vk0mLCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKTsKIAog
I2VuZGlmIC8vIEpTQ19PQkpDX0FQSV9FTkFCTEVECiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9BUEkvTWFya2VkSlNWYWx1ZVJlZkFycmF5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQVBJL01hcmtlZEpTVmFsdWVSZWZBcnJheS5jcHAJKHJldmlzaW9uIDI3
MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvTWFya2VkSlNWYWx1ZVJlZkFycmF5
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDIwLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC00Niw3ICs0Niw3IEBAIE1hcmtlZEpTVmFsdWVSZWZBcnJheTo6
fk1hcmtlZEpTVmFsdWVSZWYKICAgICAgICAgcmVtb3ZlKCk7CiB9CiAKLXZvaWQgTWFya2VkSlNW
YWx1ZVJlZkFycmF5Ojp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQg
TWFya2VkSlNWYWx1ZVJlZkFycmF5Ojp2aXNpdEFnZ3JlZ2F0ZShBYnN0cmFjdFNsb3RWaXNpdG9y
JiB2aXNpdG9yKQogewogICAgIEpTVmFsdWVSZWYqIGJ1ZmZlciA9IGRhdGEoKTsKICAgICBmb3Ig
KHVuc2lnbmVkIGluZGV4ID0gMDsgaW5kZXggPCBtX3NpemU7ICsraW5kZXgpIHsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvTWFya2VkSlNWYWx1ZVJlZkFycmF5LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9NYXJrZWRKU1ZhbHVlUmVmQXJyYXkuaAko
cmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9NYXJrZWRKU1Zh
bHVlUmVmQXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDIwLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02Miw3ICs2Miw3IEBAIHB1YmxpYzoKICAgICAg
ICAgcmV0dXJuIG1faW5saW5lQnVmZmVyOwogICAgIH0KIAotICAgIHZvaWQgdmlzaXRBZ2dyZWdh
dGUoU2xvdFZpc2l0b3ImKTsKKyAgICB2b2lkIHZpc2l0QWdncmVnYXRlKEFic3RyYWN0U2xvdFZp
c2l0b3ImKTsKIAogcHJpdmF0ZToKICAgICB1bnNpZ25lZCBtX3NpemU7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNBUElXcmFwcGVyR2xvYmFsT2JqZWN0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNBUElXcmFwcGVyR2xv
YmFsT2JqZWN0LmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L0FQSS9nbGliL0pTQVBJV3JhcHBlckdsb2JhbE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTU5LDYgKzU5LDggQEAgc3RhdGljIEpTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJT04oY29uc3RydQog
c3RhdGljIEpTQ19ERUNMQVJFX0NVU1RPTV9HRVRURVIoY2FsbGJhY2tHZXR0ZXJKU0FQSVdyYXBw
ZXJHbG9iYWxPYmplY3RDYWxsYmFja09iamVjdCk7CiBzdGF0aWMgSlNDX0RFQ0xBUkVfQ1VTVE9N
X0dFVFRFUihzdGF0aWNGdW5jdGlvbkdldHRlckpTQVBJV3JhcHBlckdsb2JhbE9iamVjdENhbGxi
YWNrT2JqZWN0KTsKIAorREVGSU5FX1RFTVBMQVRFX1ZJU0lUX0NISUxEUkVOKHRlbXBsYXRlPD4s
IEpTQ2FsbGJhY2tPYmplY3Q8SlNBUElXcmFwcGVyR2xvYmFsT2JqZWN0Pik7CisKIHRlbXBsYXRl
IDw+IGNvbnN0IENsYXNzSW5mbyBKU0NhbGxiYWNrT2JqZWN0PEpTQVBJV3JhcHBlckdsb2JhbE9i
amVjdD46OnNfaW5mbyA9IHsgIkpTQVBJV3JhcHBlckdsb2JhbE9iamVjdCIsICZCYXNlOjpzX2lu
Zm8sIG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNDYWxsYmFja09iamVj
dCkgfTsKIHRlbXBsYXRlPD4gY29uc3QgYm9vbCBKU0NhbGxiYWNrT2JqZWN0PEpTQVBJV3JhcHBl
ckdsb2JhbE9iamVjdD46Om5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOwogCkBAIC0xNDQsOSArMTQ2
LDQgQEAgdm9pZCBKU0FQSVdyYXBwZXJHbG9iYWxPYmplY3Q6OmZpbmlzaENyZQogICAgIFdlYWtT
ZXQ6OmFsbG9jYXRlKHRoaXMsIGpzQVBJV3JhcHBlckdsb2JhbE9iamVjdEhhbmRsZU93bmVyKCks
IDApOyAvLyBCYWxhbmNlZCBpbiBKU0FQSVdyYXBwZXJHbG9iYWxPYmplY3RIYW5kbGVPd25lcjo6
ZmluYWxpemUuCiB9CiAKLXZvaWQgSlNBUElXcmFwcGVyR2xvYmFsT2JqZWN0Ojp2aXNpdENoaWxk
cmVuKEpTQ2VsbCogY2VsbCwgSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKLXsKLSAgICBCYXNl
Ojp2aXNpdENoaWxkcmVuKGNlbGwsIHZpc2l0b3IpOwotfQotCiB9IC8vIG5hbWVzcGFjZSBKU0MK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0FQSVdyYXBwZXJHbG9iYWxP
YmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNB
UElXcmFwcGVyR2xvYmFsT2JqZWN0LmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0FQSVdyYXBwZXJHbG9iYWxPYmplY3QuaAkod29ya2luZyBj
b3B5KQpAQCAtMzksNyArMzksNiBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgc3Vic3BhY2VG
b3IoVk0mKSB7IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KIAogICAgIHZvaWQgZmlu
aXNoQ3JlYXRpb24oVk0mKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCos
IEpTQzo6U2xvdFZpc2l0b3ImKTsKIAogICAgIEpTQ0dMaWJXcmFwcGVyT2JqZWN0KiB3cmFwcGVk
T2JqZWN0KCkgY29uc3QgeyByZXR1cm4gbV93cmFwcGVkT2JqZWN0OyB9CiAgICAgdm9pZCBzZXRX
cmFwcGVkT2JqZWN0KEpTQ0dMaWJXcmFwcGVyT2JqZWN0KiB3cmFwcGVkT2JqZWN0KSB7IG1fd3Jh
cHBlZE9iamVjdCA9IHdyYXBwZWRPYmplY3Q7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9BUEkvZ2xpYi9KU0FQSVdyYXBwZXJPYmplY3RHTGliLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNBUElXcmFwcGVyT2JqZWN0R0xpYi5jcHAJKHJl
dmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0FQSVdy
YXBwZXJPYmplY3RHTGliLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogI2lu
Y2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkpTQVBJV3JhcHBlck9iamVjdC5oIgogCisjaW5j
bHVkZSAiQWJzdHJhY3RTbG90VmlzaXRvci5oIgogI2luY2x1ZGUgIkpTQ0dMaWJXcmFwcGVyT2Jq
ZWN0LmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTQ2FsbGJhY2tPYmpl
Y3QuaCIKQEAgLTM2LDcgKzM3LDcgQEAKIGNsYXNzIEpTQVBJV3JhcHBlck9iamVjdEhhbmRsZU93
bmVyIGZpbmFsIDogcHVibGljIEpTQzo6V2Vha0hhbmRsZU93bmVyIHsKIHB1YmxpYzoKICAgICB2
b2lkIGZpbmFsaXplKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqKSBmaW5hbDsKLSAg
ICBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93
bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6U2xvdFZpc2l0b3ImLCBjb25zdCBjaGFyKiopIGZpbmFs
OworICAgIGJvb2wgaXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpV
bmtub3duPiwgdm9pZCogY29udGV4dCwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiwgY29uc3Qg
Y2hhcioqKSBmaW5hbDsKIH07CiAKIHN0YXRpYyBKU0FQSVdyYXBwZXJPYmplY3RIYW5kbGVPd25l
cioganNBUElXcmFwcGVyT2JqZWN0SGFuZGxlT3duZXIoKQpAQCAtNTUsNyArNTYsNyBAQCB2b2lk
IEpTQVBJV3JhcHBlck9iamVjdEhhbmRsZU93bmVyOjpmaW5hCiAgICAgSlNDOjpXZWFrU2V0Ojpk
ZWFsbG9jYXRlKEpTQzo6V2Vha0ltcGw6OmFzV2Vha0ltcGwoaGFuZGxlLnNsb3QoKSkpOwogfQog
Ci1ib29sIEpTQVBJV3JhcHBlck9iamVjdEhhbmRsZU93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFx
dWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIEpTQzo6U2xv
dFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKikKK2Jvb2wgSlNBUElXcmFwcGVyT2JqZWN0
SGFuZGxlT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6
VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9y
LCBjb25zdCBjaGFyKiopCiB7CiAgICAgSlNDOjpKU0FQSVdyYXBwZXJPYmplY3QqIHdyYXBwZXJP
YmplY3QgPSBKU0M6OmpzQ2FzdDxKU0M6OkpTQVBJV3JhcHBlck9iamVjdCo+KGhhbmRsZS5nZXQo
KS5hc0NlbGwoKSk7CiAgICAgLy8gV2UgdXNlIHRoZSBKU0dsb2JhbE9iamVjdCB3aGVuIHByb2Nl
c3Npbmcgd2VhayBoYW5kbGVzIHRvIHByZXZlbnQgdGhlIHNpdHVhdGlvbiB3aGVyZSB1c2luZwpA
QCAtNzIsNiArNzMsOCBAQCBzdGF0aWMgSlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElPTihjb25zdHJ1
CiBzdGF0aWMgSlNDX0RFQ0xBUkVfQ1VTVE9NX0dFVFRFUihjYWxsYmFja0dldHRlckpTQVBJV3Jh
cHBlck9iamVjdENhbGxiYWNrT2JqZWN0KTsKIHN0YXRpYyBKU0NfREVDTEFSRV9DVVNUT01fR0VU
VEVSKHN0YXRpY0Z1bmN0aW9uR2V0dGVySlNBUElXcmFwcGVyT2JqZWN0Q2FsbGJhY2tPYmplY3Qp
OwogCitERUZJTkVfVEVNUExBVEVfVklTSVRfQ0hJTERSRU4odGVtcGxhdGU8PiwgSlNDYWxsYmFj
a09iamVjdDxKU0FQSVdyYXBwZXJPYmplY3Q+KTsKKwogdGVtcGxhdGUgPD4gY29uc3QgQ2xhc3NJ
bmZvIEpTQ2FsbGJhY2tPYmplY3Q8SlNBUElXcmFwcGVyT2JqZWN0Pjo6c19pbmZvID0geyAiSlNB
UElXcmFwcGVyT2JqZWN0IiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRF
X01FVEhPRF9UQUJMRShKU0NhbGxiYWNrT2JqZWN0KSB9OwogdGVtcGxhdGU8PiBjb25zdCBib29s
IEpTQ2FsbGJhY2tPYmplY3Q8SlNBUElXcmFwcGVyT2JqZWN0Pjo6bmVlZHNEZXN0cnVjdGlvbiA9
IHRydWU7CiAKQEAgLTE1NSw5ICsxNTgsMTIgQEAgdm9pZCBKU0FQSVdyYXBwZXJPYmplY3Q6OnNl
dFdyYXBwZWRPYmplYwogICAgIG1fd3JhcHBlZE9iamVjdCA9IHdyYXBwZWRPYmplY3Q7CiB9CiAK
LXZvaWQgSlNBUElXcmFwcGVyT2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgSlND
OjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lk
IEpTQVBJV3JhcHBlck9iamVjdDo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNp
dG9yJiB2aXNpdG9yKQogewogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4oY2VsbCwgdmlzaXRvcik7
CiB9CiAKK0RFRklORV9FWFBPUlRfVklTSVRfQ0hJTERSRU4oSlNBUElXcmFwcGVyT2JqZWN0KTsK
KwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagko
cmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTExNTgsNiArMTE1
OCw3IEBACiAJCTY1QjgzOTJFMUJBQ0FEMzYwMDQ0RTgyNCAvKiBDYWNoZWRSZWNvdmVyeS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjVCODM5MkMxQkFD
QTkyQTAwNDRFODI0IC8qIENhY2hlZFJlY292ZXJ5LmggKi87IH07CiAJCTZBMzhDRkFBMUUzMkI1
QUIwMDYwMjA2RiAvKiBBc3luY1N0YWNrVHJhY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZBMzhDRkE4MUUzMkI1OEIwMDYwMjA2RiAvKiBBc3luY1N0
YWNrVHJhY2UuaCAqLzsgfTsKIAkJNkFEMkNCNEQxOUI5MTQwMTAwMDY1NzE5IC8qIERlYnVnZ2Vy
RXZhbEVuYWJsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDZBRDJDQjRDMTlCOTE0MDEwMDA2NTcxOSAvKiBEZWJ1Z2dlckV2YWxFbmFibGVyLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNkJDQ0VDMDQy
NUQxRkEyNzAwMEYzOTFEIC8qIFZlcmlmaWVyU2xvdFZpc2l0b3JJbmxpbmVzLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2QkNDRUMwMzI1RDFGQTI3MDAw
RjM5MUQgLyogVmVyaWZpZXJTbG90VmlzaXRvcklubGluZXMuaCAqLzsgfTsKIAkJNzAxMTNENEMx
QThEQjA5MzAwMzg0OEM0IC8qIEl0ZXJhdG9yT3BlcmF0aW9ucy5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzAxMTNENEExQThEQjA5MzAwMzg0OEM0IC8q
IEl0ZXJhdG9yT3BlcmF0aW9ucy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTcwMTNDQThDMUI0OTFBOTQwMENBRTYxMyAvKiBKU01pY3JvdGFzay5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzAxM0NBOEEx
QjQ5MUE5NDAwQ0FFNjEzIC8qIEpTTWljcm90YXNrLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzA1QjQxQUMxQTZFNTAxRTAwNzE2NzU3IC8qIFN5
bWJvbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzA1
QjQxQTQxQTZFNTAxRTAwNzE2NzU3IC8qIFN5bWJvbC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0xOTE2LDYgKzE5MTcsNyBAQAogCQlFM0ZGNzUz
MzFEOUNFQTE4MDBDN0UxNkQgLyogRE9NSklUR2V0dGVyU2V0dGVyLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFM0ZGNzUyRjFEOUNFQTEyMDBDN0UxNkQg
LyogRE9NSklUR2V0dGVyU2V0dGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJRTQ5REMxNkMxMkVGMjk0RTAwMTg0QTFGIC8qIFNvdXJjZVByb3Zp
ZGVyQ2FjaGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEU0OURDMTUxMTJFRjI3MjIwMDE4NEExRiAvKiBTb3VyY2VQcm92aWRlckNhY2hlLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTQ5REMxNkQxMkVG
Mjk1MzAwMTg0QTFGIC8qIFNvdXJjZVByb3ZpZGVyQ2FjaGVJdGVtLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDlEQzE0OTEyRUYyNjFBMDAxODRBMUYg
LyogU291cmNlUHJvdmlkZXJDYWNoZUl0ZW0uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OworCQlGRTA0MTU1MzI1MkVDMDczMDA5MUVCNUQgLyogU2xvdFZp
c2l0b3JNYWNyb3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEZFMDQxNTUyMjUyRUMwNzMwMDkxRUI1RCAvKiBTbG90VmlzaXRvck1hY3Jvcy5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUZFMDVGQUZEMUZF
NENFREEwMDA5MzIzMCAvKiBEZXByZWNhdGVkSW5zcGVjdG9yVmFsdWVzLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk5MkQ2QTExMUZCRDQ5MUQwMDAy
NDVGNCAvKiBEZXByZWNhdGVkSW5zcGVjdG9yVmFsdWVzLmNwcCAqLzsgfTsKIAkJRkUwODZCQ0Ey
MTIzREVGQjAwM0YyOTI5IC8qIEVudHJ5RnJhbWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFMDg2QkM5MjEyM0RFRkEwMDNGMjkyOSAvKiBFbnRyeUZy
YW1lLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
RkUwRDRBMDYxQUI4REQwQTAwMkY1NEJGIC8qIEV4ZWN1dGlvblRpbWVMaW1pdFRlc3QuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUwRDRBMDQxQUI4
REQwQTAwMkY1NEJGIC8qIEV4ZWN1dGlvblRpbWVMaW1pdFRlc3QuY3BwICovOyB9OwpAQCAtMTkz
OCw2ICsxOTQwLDcgQEAKIAkJRkUxRTJDM0YyMjQwREQ1ODAwRjZCNzI5IC8qIE1hY3JvQXNzZW1i
bGVyQVJNNjRFLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBGRTFFMkMzRTIyNDBEMzBCMDBGNkI3MjkgLyogTWFjcm9Bc3NlbWJsZXJBUk02NEUuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlGRTFFMkM0MDIy
NDBERDYyMDBGNkI3MjkgLyogQVJNNjRFQXNzZW1ibGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTFFMkMzRDIyNDBEMkY2MDBGNkI3MjkgLyogQVJN
NjRFQXNzZW1ibGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJRkUyMENFOUUxNUYwNEE5NTAwREYzNDMwIC8qIExMSW50Q0xvb3AuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFMjBDRTlDMTVGMDRBOTUw
MERGMzQzMCAvKiBMTEludENMb29wLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKKwkJRkUyODdEMDIyNTJGQjJFODAwRDcyM0Y5IC8qIFZlcmlmaWVyU2xv
dFZpc2l0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEZFMjg3RDAxMjUyRkIyRTgwMEQ3MjNGOSAvKiBWZXJpZmllclNsb3RWaXNpdG9yLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRkUyQTg3NjAxRjAy
MzgxNjAwRUIzMUIyIC8qIE1pbmltdW1SZXNlcnZlZFpvbmVTaXplLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTJBODc1RjFGMDIzODE2MDBFQjMxQjIg
LyogTWluaW11bVJlc2VydmVkWm9uZVNpemUuaCAqLzsgfTsKIAkJRkUzMDIyRDMxRTNENzNBNTAw
QkFDNDkzIC8qIFNpZ2lsbENyYXNoQW5hbHl6ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFMzAyMkQxMUUzRDczOTYwMEJBQzQ5MyAvKiBTaWdpbGxD
cmFzaEFuYWx5emVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJRkUzMDIyRDcxRTQyODU3MzAwQkFDNDkzIC8qIFZNSW5zcGVjdG9yLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTMwMjJENTFFNDI4NTY3
MDBCQUM0OTMgLyogVk1JbnNwZWN0b3IuaCAqLzsgfTsKQEAgLTE5NzYsNiArMTk3OSw4IEBACiAJ
CUZFODBDMTk3MUQ3NzVDREQwMDg1MTBDMCAvKiBDYXRjaFNjb3BlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTgwQzE5NjFENzc1QjI3MDA4NTEwQzAg
LyogQ2F0Y2hTY29wZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCUZFOERFNTRCMjNBQzFEQUQwMDVDOTE0MiAvKiBDYWNoZWFibGVJZGVudGlmaWVy
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRThERTU0
QTIzQUMxREFEMDA1QzkxNDIgLyogQ2FjaGVhYmxlSWRlbnRpZmllci5oICovOyB9OwogCQlGRThE
RTU0RDIzQUMxRTg2MDA1QzkxNDIgLyogQ2FjaGVhYmxlSWRlbnRpZmllcklubGluZXMuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFOERFNTRDMjNBQzFF
ODYwMDVDOTE0MiAvKiBDYWNoZWFibGVJZGVudGlmaWVySW5saW5lcy5oICovOyB9OworCQlGRTkx
MkI0RjI1MzExOTMzMDBGQUJEREYgLyogQWJzdHJhY3RTbG90VmlzaXRvci5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkU5MTJCNEUyNTMxMTkzMzAwRkFC
RERGIC8qIEFic3RyYWN0U2xvdFZpc2l0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OworCQlGRTkxMkI1MTI1MzExQUQxMDBGQUJEREYgLyogQWJzdHJh
Y3RTbG90VmlzaXRvcklubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEZFOTEyQjUwMjUzMTFBRDEwMEZBQkRERiAvKiBBYnN0cmFjdFNsb3RWaXNp
dG9ySW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCUZFOTlCMjQ5MUMyNEMzRDMwMEM4MjE1OSAvKiBKSVROZWdHZW5lcmF0b3IuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFOTlCMjQ4MUMyNEI2
RDMwMEM4MjE1OSAvKiBKSVROZWdHZW5lcmF0b3IuaCAqLzsgfTsKIAkJRkVBMDg2MjAxODJCN0Ew
NDAwRjZEODUxIC8qIEJyZWFrcG9pbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEZFQTA4NjFFMTgyQjdBMDQwMEY2RDg1MSAvKiBCcmVha3BvaW50Lmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRkVBMDg2
MjExODJCN0EwNDAwRjZEODUxIC8qIERlYnVnZ2VyUHJpbWl0aXZlcy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkVBMDg2MUYxODJCN0EwNDAwRjZEODUx
IC8qIERlYnVnZ2VyUHJpbWl0aXZlcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CkBAIC0zOTg4LDYgKzM5OTMsNyBAQAogCQk2QTM4Q0ZBODFFMzJCNThC
MDA2MDIwNkYgLyogQXN5bmNTdGFja1RyYWNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEFzeW5jU3RhY2tUcmFjZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2
QUQyQ0I0QzE5QjkxNDAxMDAwNjU3MTkgLyogRGVidWdnZXJFdmFsRW5hYmxlci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEZWJ1Z2dlckV2YWxFbmFibGVyLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZCQTkzQzk1OTA0ODRDNUJBRDkzMTZFQSAvKiBKU1Njcmlw
dEZldGNoZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNTY3JpcHRGZXRj
aGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTZCQ0NFQzAzMjVEMUZBMjcwMDBG
MzkxRCAvKiBWZXJpZmllclNsb3RWaXNpdG9ySW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBWZXJpZmllclNsb3RWaXNpdG9ySW5saW5lcy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk3MDExM0Q0OTFBOERCMDkzMDAzODQ4QzQgLyogSXRlcmF0b3JPcGVy
YXRpb25zLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEl0ZXJhdG9y
T3BlcmF0aW9ucy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcwMTEzRDRBMUE4
REIwOTMwMDM4NDhDNCAvKiBJdGVyYXRvck9wZXJhdGlvbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSXRlcmF0b3JPcGVyYXRpb25zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTcwMTNDQTg5MUI0OTFBOTQwMENBRTYxMyAvKiBKU01pY3JvdGFzay5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU01pY3JvdGFzay5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01MjIxLDYgKzUyMjcsNyBAQAogCQlGNjkyQTg4NzAy
NTU1OTdEMDFGRjYwRjcgLyogSlNDSlNWYWx1ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0NKU1ZhbHVlLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB9OwogCQlGNzM5MjY5MThEQzY0MzMwQUZDREYw
RDcgLyogSlNTb3VyY2VDb2RlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEpTU291cmNlQ29kZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFMDAy
NjIyMjNGM0FGMzMwMDNBMzU4RiAvKiBXZWJBc3NlbWJseS5hc20gKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmFzbS5hc207IG5hbWUg
PSBXZWJBc3NlbWJseS5hc207IHBhdGggPSBsbGludC9XZWJBc3NlbWJseS5hc207IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUZFMDQxNTUyMjUyRUMwNzMwMDkxRUI1RCAvKiBTbG90Vmlz
aXRvck1hY3Jvcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTbG90VmlzaXRv
ck1hY3Jvcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTA4NkJDOTIxMjNERUZB
MDAzRjI5MjkgLyogRW50cnlGcmFtZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBFbnRyeUZyYW1lLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFMEQ0QTA0MUFC
OEREMEEwMDJGNTRCRiAvKiBFeGVjdXRpb25UaW1lTGltaXRUZXN0LmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEV4ZWN1dGlvblRpbWVMaW1pdFRlc3QuY3BwOyBwYXRo
ID0gQVBJL3Rlc3RzL0V4ZWN1dGlvblRpbWVMaW1pdFRlc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlGRTBENEEwNTFBQjhERDBBMDAyRjU0QkYgLyogRXhlY3V0aW9uVGltZUxp
bWl0VGVzdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBFeGVjdXRpb25UaW1l
TGltaXRUZXN0Lmg7IHBhdGggPSBBUEkvdGVzdHMvRXhlY3V0aW9uVGltZUxpbWl0VGVzdC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNTI1NSw3ICs1MjYyLDkgQEAKIAkJRkUxRTJD
M0UyMjQwRDMwQjAwRjZCNzI5IC8qIE1hY3JvQXNzZW1ibGVyQVJNNjRFLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1hY3JvQXNzZW1ibGVyQVJNNjRFLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUZFMjBDRTlCMTVGMDRBOTUwMERGMzQzMCAvKiBMTEludENMb29w
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IExMSW50Q0xvb3AuY3Bw
OyBwYXRoID0gbGxpbnQvTExJbnRDTG9vcC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUZFMjBDRTlDMTVGMDRBOTUwMERGMzQzMCAvKiBMTEludENMb29wLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IExMSW50Q0xvb3AuaDsgcGF0aCA9IGxsaW50L0xMSW50Q0xv
b3AuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkUyODdEMDEyNTJGQjJFODAwRDcy
M0Y5IC8qIFZlcmlmaWVyU2xvdFZpc2l0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gVmVyaWZpZXJTbG90VmlzaXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlGRTJBODc1RjFGMDIzODE2MDBFQjMxQjIgLyogTWluaW11bVJlc2VydmVkWm9uZVNpemUuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gTWluaW11bVJlc2VydmVkWm9uZVNpemUuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJRkUyQkQ2NkUyNUMwREM4MjAwOTk5RDNCIC8qIFZlcmlmaWVyU2xvdFZp
c2l0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVmVyaWZpZXJT
bG90VmlzaXRvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFMkU2QTdBMUQ2
RUE1RkUwMDYwRjg5NiAvKiBUaHJvd1Njb3BlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFRocm93U2NvcGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlGRTMwMjJEMDFFM0Q3Mzk2MDBCQUM0OTMgLyogU2lnaWxsQ3Jhc2hBbmFseXplci5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTaWdpbGxDcmFzaEFuYWx5emVyLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkUzMDIyRDExRTNENzM5NjAwQkFDNDkz
IC8qIFNpZ2lsbENyYXNoQW5hbHl6ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gU2lnaWxsQ3Jhc2hBbmFseXplci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAt
NTMyOSw2ICs1MzM4LDggQEAKIAkJRkU4REU1NEMyM0FDMUU4NjAwNUM5MTQyIC8qIENhY2hlYWJs
ZUlkZW50aWZpZXJJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENh
Y2hlYWJsZUlkZW50aWZpZXJJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUZFOERFNTRFMjNBQzNBOEUwMDVDOTE0MiAvKiBDYWNoZWFibGVJZGVudGlmaWVyLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IENhY2hlYWJsZUlkZW50aWZpZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlGRTkwQkIzQTFCN0NGNjRFMDA2QjNGMDMgLyogVk1JbmxpbmVzLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZNSW5saW5lcy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlGRTkxMkI0RTI1MzExOTMzMDBGQUJEREYgLyogQWJzdHJhY3RTbG90
VmlzaXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBYnN0cmFjdFNsb3RW
aXNpdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZFOTEyQjUwMjUzMTFBRDEw
MEZBQkRERiAvKiBBYnN0cmFjdFNsb3RWaXNpdG9ySW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBBYnN0cmFjdFNsb3RWaXNpdG9ySW5saW5lcy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlGRTk4QjVCNjFCQjlBRTExMDA3M0U3QTYgLyogSklUU3ViR2Vu
ZXJhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpJVFN1YkdlbmVyYXRv
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTk5QjI0NzFDMjRCNkQzMDBDODIx
NTkgLyogSklUTmVnR2VuZXJhdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IEpJVE5lZ0dlbmVyYXRvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUZFOTlCMjQ4MUMyNEI2RDMwMEM4MjE1OSAvKiBKSVROZWdHZW5lcmF0b3IuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSklUTmVnR2VuZXJhdG9yLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC02Mjc4LDYgKzYyODksOCBAQAogCQkxNDJFMzEyQTEzNEZGMEE2MDBB
RkFEQjUgLyogaGVhcCAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAo
CisJCQkJRkU5MTJCNEUyNTMxMTkzMzAwRkFCRERGIC8qIEFic3RyYWN0U2xvdFZpc2l0b3IuaCAq
LywKKwkJCQlGRTkxMkI1MDI1MzExQUQxMDBGQUJEREYgLyogQWJzdHJhY3RTbG90VmlzaXRvcklu
bGluZXMuaCAqLywKIAkJCQkwRkVDM0M1MDFGMzNBNDE2MDBGNTlCNkMgLyogQWxpZ25lZE1lbW9y
eUFsbG9jYXRvci5jcHAgKi8sCiAJCQkJMEZFQzNDNTExRjMzQTQxNjAwRjU5QjZDIC8qIEFsaWdu
ZWRNZW1vcnlBbGxvY2F0b3IuaCAqLywKIAkJCQkwRkE3NjIwQTFEQjk1OUY2MDBCN0EyRkQgLyog
QWxsb2NhdGluZ1Njb3BlLmggKi8sCkBAIC02NDM1LDYgKzY0NDgsNyBAQAogCQkJCUMyMjU0OTQy
MTVGN0RCQUEwMDY1RTg5OCAvKiBTbG90VmlzaXRvci5jcHAgKi8sCiAJCQkJMTRCQTc4RjAxM0FB
Qjg4RjAwNUI3QzJDIC8qIFNsb3RWaXNpdG9yLmggKi8sCiAJCQkJMEZDQjQwODUxNUMwQTNDMzAw
NDg5MzJCIC8qIFNsb3RWaXNpdG9ySW5saW5lcy5oICovLAorCQkJCUZFMDQxNTUyMjUyRUMwNzMw
MDkxRUI1RCAvKiBTbG90VmlzaXRvck1hY3Jvcy5oICovLAogCQkJCTBGREU4N0ZBMURGRTZFNTAw
MDY0QzM5MCAvKiBTcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyLmNwcCAqLywKIAkJCQkwRkRFODdG
QjFERkU2RTUwMDA2NEMzOTAgLyogU3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlci5oICovLAogCQkJ
CTBGNEY4Mjg5MUUzMUI5NzEwMDc1MTg0QyAvKiBTdG9jaGFzdGljU3BhY2VUaW1lTXV0YXRvclNj
aGVkdWxlci5jcHAgKi8sCkBAIC02NDUyLDYgKzY0NjYsOSBAQAogCQkJCTBGMUZCMzhBMUUxNzNB
NjIwMEE5QkU1MCAvKiBTeW5jaHJvbm91c1N0b3BUaGVXb3JsZE11dGF0b3JTY2hlZHVsZXIuY3Bw
ICovLAogCQkJCTBGMUZCMzhCMUUxNzNBNjIwMEE5QkU1MCAvKiBTeW5jaHJvbm91c1N0b3BUaGVX
b3JsZE11dGF0b3JTY2hlZHVsZXIuaCAqLywKIAkJCQkxNDE0NDhDQzEzQTE3ODM3MDBGNUJBMUEg
LyogVGlueUJsb29tRmlsdGVyLmggKi8sCisJCQkJRkUyQkQ2NkUyNUMwREM4MjAwOTk5RDNCIC8q
IFZlcmlmaWVyU2xvdFZpc2l0b3IuY3BwICovLAorCQkJCUZFMjg3RDAxMjUyRkIyRTgwMEQ3MjNG
OSAvKiBWZXJpZmllclNsb3RWaXNpdG9yLmggKi8sCisJCQkJNkJDQ0VDMDMyNUQxRkEyNzAwMEYz
OTFEIC8qIFZlcmlmaWVyU2xvdFZpc2l0b3JJbmxpbmVzLmggKi8sCiAJCQkJMEY0RDhDNzIxRkM3
QTk3MzAwMUQzMkFDIC8qIFZpc2l0Q291bnRlci5oICovLAogCQkJCTBGOTUyQTlGMURGNzg2MDcw
MEUwNkZCRCAvKiBWaXNpdFJhY2VLZXkuY3BwICovLAogCQkJCTBGOTUyQUEwMURGNzg2MDcwMEUw
NkZCRCAvKiBWaXNpdFJhY2VLZXkuaCAqLywKQEAgLTkyOTMsNiArOTMxMCw3IEBACiAJCQkJMTQ3
QjgzQUMwRTZEQjhDOTAwNDc3NUE0IC8qIEJhdGNoZWRUcmFuc2l0aW9uT3B0aW1pemVyLmggaW4g
SGVhZGVycyAqLywKIAkJCQlFMzVFODlGRDI1QzUwRjg3MDA3MUVFMUUgLyogQmlnSW50NjRBcnJh
eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODY5NzZFNUYxRkEzRThCQzAwRTdDNEUxIC8qIEJpZ0lu
dENvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKKwkJCQlGRTA0MTU1MzI1MkVDMDczMDA5MUVC
NUQgLyogU2xvdFZpc2l0b3JNYWNyb3MuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2NjczOUQyMTNC
RkRFNzEwMDIzRDg3QyAvKiBCaWdJbnRlZ2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjE4MTY3
NzFGQjc5MjQyMDBFQ0M0RUMgLyogQmlnSW50T2JqZWN0LmggaW4gSGVhZGVycyAqLywKIAkJCQk4
Njk3NkU1RTFGQTNFOEI2MDBFN0M0RTEgLyogQmlnSW50UHJvdG90eXBlLmggaW4gSGVhZGVycyAq
LywKQEAgLTk1NzQsNiArOTU5Miw3IEBACiAJCQkJMEZEODJFNTcxNDFEQUYxMDAwMTc5Qzk0IC8q
IERGR09TUkVudHJ5LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkQ4QTMyNjE3RDUxRjU3MDBDQTJD
NDAgLyogREZHT1NSRW50cnlwb2ludENyZWF0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGQzA5NzZBMTQ2OEE2RjcwMENGMjQ0MiAvKiBERkdPU1JFeGl0LmggaW4gSGVhZGVycyAqLywK
KwkJCQlGRTkxMkI0RjI1MzExOTMzMDBGQUJEREYgLyogQWJzdHJhY3RTbG90VmlzaXRvci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEYyMzVCRUMxNzE3OEU3MzAwNjkwQzdGIC8qIERGR09TUkV4aXRC
YXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkZCOTIxQzE2RDAyRjExMDA1NUE1REIgLyogREZH
T1NSRXhpdENvbXBpbGF0aW9uSW5mby5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY3MDI1QUExNzE0
QjBGQzAwMzgyQzBFIC8qIERGR09TUkV4aXRDb21waWxlckNvbW1vbi5oIGluIEhlYWRlcnMgKi8s
CkBAIC05ODU5LDYgKzk4NzgsNyBAQAogCQkJCUE1MTNFNUJFMTg1QkZBQ0MwMDdFOTVBRCAvKiBJ
bmplY3RlZFNjcmlwdEhvc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1MTNFNUNCMTg1Rjk2MjQw
MDdFOTVBRCAvKiBJbmplY3RlZFNjcmlwdE1hbmFnZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1
ODQwRTIxMTg3QjdCODYwMDg0M0IxMCAvKiBJbmplY3RlZFNjcmlwdE1vZHVsZS5oIGluIEhlYWRl
cnMgKi8sCisJCQkJRkUyODdEMDIyNTJGQjJFODAwRDcyM0Y5IC8qIFZlcmlmaWVyU2xvdFZpc2l0
b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1MTNFNUM3MTg1Rjk0NDYwMDdFOTVBRCAvKiBJbmpl
Y3RlZFNjcmlwdFNvdXJjZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTk1OUU5MzIxQkQxODI3OTAw
MUFBNDEzIC8qIGlubGluZS1hbmQtbWluaWZ5LXN0eWxlc2hlZXRzLWFuZC1zY3JpcHRzLnB5IGlu
IEhlYWRlcnMgKi8sCiAJCQkJNzkwNUJCNjkxRDEyMDUwRTAwMTlGRTU3IC8qIElubGluZUFjY2Vz
cy5oIGluIEhlYWRlcnMgKi8sCkBAIC0xMDAzNCw2ICsxMDA1NCw3IEBACiAJCQkJQTU4QzAyNDIx
OEU0QTQxQTAwMDMyQkM1IC8qIEpTQ29udGV4dFByaXZhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUJDMThDNDFFMEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU0NvbnRleHRSZWYuaCBpbiBIZWFkZXJzICov
LAogCQkJCUE1RUE3MEVFMTlGNUI1QzQwMDk4RjVFQyAvKiBKU0NvbnRleHRSZWZJbnNwZWN0b3JT
dXBwb3J0LmggaW4gSGVhZGVycyAqLywKKwkJCQk2QkNDRUMwNDI1RDFGQTI3MDAwRjM5MUQgLyog
VmVyaWZpZXJTbG90VmlzaXRvcklubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1RDJFNjY1
MTk1RTE3NDAwMEE1MThFNyAvKiBKU0NvbnRleHRSZWZJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMTQ4Q0QxRDgxMDhDRjkwMjAwODE2M0M2IC8qIEpTQ29udGV4dFJlZlByaXZhdGUuaCBp
biBIZWFkZXJzICovLAogCQkJCUZFNzQ5N0U2MjA5MDAxQjEwMDAzNTY1QiAvKiBKU0NQdHJUYWcu
aCBpbiBIZWFkZXJzICovLApAQCAtMTAxNjQsNiArMTAxODUsNyBAQAogCQkJCTc5NUFDNjE4MjBB
MjM1NUUwMDUyQzc2QyAvKiBKU1ZpcnR1YWxNYWNoaW5lUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQTdDQTNBRTgxN0RBNDFBRTAwNjUzOEFGIC8qIEpTV2Vha01hcC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQTc0ODJFOTMxMTZBN0NBRDAwM0IwNzEyIC8qIEpTV2Vha09iamVjdE1hcFJlZklu
dGVybmFsLmggaW4gSGVhZGVycyAqLywKKwkJCQlGRTkxMkI1MTI1MzExQUQxMDBGQUJEREYgLyog
QWJzdHJhY3RTbG90VmlzaXRvcklubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3NDgyQjkz
MTE2NzExNDcwMDNCMDcxMiAvKiBKU1dlYWtPYmplY3RNYXBSZWZQcml2YXRlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk1MzlCRkJCMDIyQUQzQ0RDMDAyM0Y0QzAgLyogSlNXZWFrT2JqZWN0UmVmLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRjBCMjg2QjFFQjhFNkNGMDAwRUI1RDIgLyogSlNXZWFrUHJp
dmF0ZS5oIGluIEhlYWRlcnMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0
cy93a2J1aWx0aW5zL2J1aWx0aW5zX2dlbmVyYXRlX2ludGVybmFsc193cmFwcGVyX2hlYWRlci5w
eQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy93a2J1aWx0aW5z
L2J1aWx0aW5zX2dlbmVyYXRlX2ludGVybmFsc193cmFwcGVyX2hlYWRlci5weQkocmV2aXNpb24g
MjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvd2tidWlsdGlucy9idWls
dGluc19nZW5lcmF0ZV9pbnRlcm5hbHNfd3JhcHBlcl9oZWFkZXIucHkJKHdvcmtpbmcgY29weSkK
QEAgLTEsNiArMSw2IEBACiAjIS91c3IvYmluL2VudiBweXRob24KICMKLSMgQ29weXJpZ2h0IChj
KSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgQ29weXJpZ2h0IChjKSAy
MDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogIwogIyBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC05Myw3ICs5Myw3IEBAIGNsYXNzIEJ1aWx0aW5zSW50ZXJuYWxzV3Jh
cHBlckhlYWRlckdlbmUKIAogICAgIGRlZiBnZW5lcmF0ZV9tZXRob2RzKHNlbGYpOgogICAgICAg
ICByZXR1cm4gIiIiCi0gICAgdm9pZCB2aXNpdChKU0M6OlNsb3RWaXNpdG9yJik7CisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCB2aXNpdChWaXNpdG9yJik7CiAgICAgdm9pZCBp
bml0aWFsaXplKEpTRE9NR2xvYmFsT2JqZWN0Jik7CiAiIiIKIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL1NjcmlwdHMvd2tidWlsdGlucy9idWlsdGluc19nZW5lcmF0ZV9pbnRlcm5hbHNf
d3JhcHBlcl9pbXBsZW1lbnRhdGlvbi5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvU2NyaXB0cy93a2J1aWx0aW5zL2J1aWx0aW5zX2dlbmVyYXRlX2ludGVybmFsc193cmFw
cGVyX2ltcGxlbWVudGF0aW9uLnB5CShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvU2NyaXB0cy93a2J1aWx0aW5zL2J1aWx0aW5zX2dlbmVyYXRlX2ludGVybmFsc193
cmFwcGVyX2ltcGxlbWVudGF0aW9uLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAog
IyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiAjCi0jIENvcHlyaWdodCAoYykgMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjIENvcHlyaWdodCAoYykgMjAxNi0yMDIxIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICMKICMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAjIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MTIwLDEzICsxMjAsMTYgQEAgY2xhc3MgQnVpbHRpbnNJbnRlcm5hbHNXcmFwcGVySW1wbGVtZW50
YQogICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQogCiAgICAgZGVmIGdlbmVyYXRlX3Zp
c2l0X21ldGhvZChzZWxmKToKLSAgICAgICAgbGluZXMgPSBbInZvaWQgSlNCdWlsdGluSW50ZXJu
YWxGdW5jdGlvbnM6OnZpc2l0KEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpIiwKKyAgICAgICAg
bGluZXMgPSBbInRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IiwKKyAgICAgICAgICAgICAgICAg
InZvaWQgSlNCdWlsdGluSW50ZXJuYWxGdW5jdGlvbnM6OnZpc2l0KFZpc2l0b3ImIHZpc2l0b3Ip
IiwKICAgICAgICAgICAgICAgICAgInsiXQogICAgICAgICBmb3Igb2JqZWN0IGluIHNlbGYuaW50
ZXJuYWxzOgogICAgICAgICAgICAgdmlzaXQgPSAiICAgICVzLnZpc2l0KHZpc2l0b3IpOyIgJSBz
ZWxmLm1lbWJlcl9uYW1lKG9iamVjdCkKICAgICAgICAgICAgIGxpbmVzLmFwcGVuZChCdWlsdGlu
c0dlbmVyYXRvci53cmFwX3dpdGhfZ3VhcmQob2JqZWN0LmFubm90YXRpb25zLmdldCgnY29uZGl0
aW9uYWwnKSwgdmlzaXQpKQogICAgICAgICBsaW5lcy5hcHBlbmQoIiAgICBVTlVTRURfUEFSQU0o
dmlzaXRvcik7IikKICAgICAgICAgbGluZXMuYXBwZW5kKCJ9XG4iKQorICAgICAgICBsaW5lcy5h
cHBlbmQoInRlbXBsYXRlIHZvaWQgSlNCdWlsdGluSW50ZXJuYWxGdW5jdGlvbnM6OnZpc2l0KEFi
c3RyYWN0U2xvdFZpc2l0b3ImKTsiKQorICAgICAgICBsaW5lcy5hcHBlbmQoInRlbXBsYXRlIHZv
aWQgSlNCdWlsdGluSW50ZXJuYWxGdW5jdGlvbnM6OnZpc2l0KFNsb3RWaXNpdG9yJik7XG4iKQog
ICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQogCiAgICAgZGVmIF9nZW5lcmF0ZV9pbml0
aWFsaXplX3N0YXRpY19nbG9iYWxzKHNlbGYpOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L1NjcmlwdHMvd2tidWlsdGlucy9idWlsdGluc190ZW1wbGF0ZXMucHkKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvd2tidWlsdGlucy9idWlsdGluc190ZW1wbGF0
ZXMucHkJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRz
L3drYnVpbHRpbnMvYnVpbHRpbnNfdGVtcGxhdGVzLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0xLDYg
KzEsNiBAQAogIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiAjCi0jIENvcHlyaWdodCAoYykgMjAxNC0y
MDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgQ29weXJpZ2h0IChjKSAyMDE0
LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogIyBDb3B5cmlnaHQgKEMpIDIw
MTUgQ2Fub24gSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogIwogIyBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTE4
OCw3ICsxODgsNyBAQCBwdWJsaWM6CiAgICAgZXhwbGljaXQgJHtvYmplY3ROYW1lfUJ1aWx0aW5G
dW5jdGlvbnMoSlNDOjpWTSYgdm0pIDogbV92bSh2bSkgeyB9CiAKICAgICB2b2lkIGluaXQoSlND
OjpKU0dsb2JhbE9iamVjdCYpOwotICAgIHZvaWQgdmlzaXQoSlNDOjpTbG90VmlzaXRvciYpOwor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgdmlzaXQoVmlzaXRvciYpOwogCiBw
dWJsaWM6CiAgICAgSlNDOjpWTSYgbV92bTsKQEAgLTIwNywxMCArMjA3LDE1IEBAIGlubGluZSB2
b2lkICR7b2JqZWN0TmFtZX1CdWlsdGluRnVuY3Rpb24KICN1bmRlZiBFWFBPUlRfRlVOQ1RJT04K
IH0KIAotaW5saW5lIHZvaWQgJHtvYmplY3ROYW1lfUJ1aWx0aW5GdW5jdGlvbnM6OnZpc2l0KEpT
Qzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgoraW5s
aW5lIHZvaWQgJHtvYmplY3ROYW1lfUJ1aWx0aW5GdW5jdGlvbnM6OnZpc2l0KFZpc2l0b3ImIHZp
c2l0b3IpCiB7CiAjZGVmaW5lIFZJU0lUX0ZVTkNUSU9OKG5hbWUpIHZpc2l0b3IuYXBwZW5kKG1f
IyNuYW1lIyNGdW5jdGlvbik7CiAgICAgJHttYWNyb1ByZWZpeH1fRk9SRUFDSF8ke29iamVjdE1h
Y3JvfV9CVUlMVElOX0ZVTkNUSU9OX05BTUUoVklTSVRfRlVOQ1RJT04pCiAjdW5kZWYgVklTSVRf
RlVOQ1RJT04KIH0KKwordGVtcGxhdGUgdm9pZCAke29iamVjdE5hbWV9QnVpbHRpbkZ1bmN0aW9u
czo6dmlzaXQoSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkICR7b2Jq
ZWN0TmFtZX1CdWlsdGluRnVuY3Rpb25zOjp2aXNpdChKU0M6OlNsb3RWaXNpdG9yJik7CisKICIi
IikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5j
cHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9B
Y2Nlc3NDYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTctMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTc1Nyw3ICs3NTcsOCBAQCBib29sIEFj
Y2Vzc0Nhc2U6OnZpc2l0V2VhayhWTSYgdm0pIGNvbnN0CiAgICAgcmV0dXJuIGlzVmFsaWQ7CiB9
CiAKLWJvb2wgQWNjZXNzQ2FzZTo6cHJvcGFnYXRlVHJhbnNpdGlvbnMoU2xvdFZpc2l0b3ImIHZp
c2l0b3IpIGNvbnN0Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgorYm9vbCBBY2Nlc3NDYXNl
Ojpwcm9wYWdhdGVUcmFuc2l0aW9ucyhWaXNpdG9yJiB2aXNpdG9yKSBjb25zdAogewogICAgIGJv
b2wgcmVzdWx0ID0gdHJ1ZTsKIApAQCAtNzcyLDcgKzc3Myw3IEBAIGJvb2wgQWNjZXNzQ2FzZTo6
cHJvcGFnYXRlVHJhbnNpdGlvbnMoU2wKICAgICBzd2l0Y2ggKG1fdHlwZSkgewogICAgIGNhc2Ug
VHJhbnNpdGlvbjoKICAgICBjYXNlIERlbGV0ZToKLSAgICAgICAgaWYgKHZpc2l0b3Iudm0oKS5o
ZWFwLmlzTWFya2VkKG1fc3RydWN0dXJlLT5wcmV2aW91c0lEKCkpKQorICAgICAgICBpZiAodmlz
aXRvci5pc01hcmtlZChtX3N0cnVjdHVyZS0+cHJldmlvdXNJRCgpKSkKICAgICAgICAgICAgIHZp
c2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQobV9zdHJ1Y3R1cmUuZ2V0KCkpOwogICAgICAgICBlbHNl
CiAgICAgICAgICAgICByZXN1bHQgPSBmYWxzZTsKQEAgLTc4NCw3ICs3ODUsMTAgQEAgYm9vbCBB
Y2Nlc3NDYXNlOjpwcm9wYWdhdGVUcmFuc2l0aW9ucyhTbAogICAgIHJldHVybiByZXN1bHQ7CiB9
CiAKLXZvaWQgQWNjZXNzQ2FzZTo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3Ip
IGNvbnN0Cit0ZW1wbGF0ZSBib29sIEFjY2Vzc0Nhc2U6OnByb3BhZ2F0ZVRyYW5zaXRpb25zKFNs
b3RWaXNpdG9yJikgY29uc3Q7Cit0ZW1wbGF0ZSBib29sIEFjY2Vzc0Nhc2U6OnByb3BhZ2F0ZVRy
YW5zaXRpb25zKEFic3RyYWN0U2xvdFZpc2l0b3ImKSBjb25zdDsKKwordm9pZCBBY2Nlc3NDYXNl
Ojp2aXNpdEFnZ3JlZ2F0ZShBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBjb25zdAogewog
ICAgIG1faWRlbnRpZmllci52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKIH0KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuaAkocmV2aXNpb24gMjcyODMw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTI4MCw5ICsyODAsOSBAQCBwcml2YXRlOgogICAgIHRlbXBsYXRlPHR5cGVu
YW1lIEZ1bmN0b3I+CiAgICAgdm9pZCBmb3JFYWNoRGVwZW5kZW50Q2VsbChWTSYsIGNvbnN0IEZ1
bmN0b3ImKSBjb25zdDsKIAotICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImKSBj
b25zdDsKKyAgICB2b2lkIHZpc2l0QWdncmVnYXRlKEFic3RyYWN0U2xvdFZpc2l0b3ImKSBjb25z
dDsKICAgICBib29sIHZpc2l0V2VhayhWTSYpIGNvbnN0OwotICAgIGJvb2wgcHJvcGFnYXRlVHJh
bnNpdGlvbnMoU2xvdFZpc2l0b3ImKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNp
dG9yPiBib29sIHByb3BhZ2F0ZVRyYW5zaXRpb25zKFZpc2l0b3ImKSBjb25zdDsKIAogICAgIC8v
IEZJWE1FOiBUaGlzIG9ubHkgZXhpc3RzIGJlY2F1c2Ugb2YgaG93IEFjY2Vzc0Nhc2UgcHV0cyBw
b3N0LWdlbmVyYXRpb24gdGhpbmdzIGludG8gaXRzZWxmLgogICAgIC8vIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTY0NTYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9CeVZhbEluZm8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9CeVZhbEluZm8uY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnlWYWxJbmZvLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIwLTIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0z
Miw3ICszMiw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAjaWYgRU5BQkxFKEpJVCkKIAotdm9pZCBC
eVZhbEluZm86OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBCeVZh
bEluZm86OnZpc2l0QWdncmVnYXRlKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAg
ICAgY2FjaGVkSWQudmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7CiB9CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnlWYWxJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5VmFsSW5mby5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnlWYWxJbmZvLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTggQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC0yNjAsNyArMjYwLDcgQEAgc3RydWN0IEJ5VmFsSW5mbyB7CiAgICAgICAgIHRoaXMtPnNl
ZW4gPSBmYWxzZTsKICAgICB9CiAKLSAgICB2b2lkIHZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9y
Jik7CisgICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAKICAg
ICBDb2RlTG9jYXRpb25KdW1wPEpTSW50ZXJuYWxQdHJUYWc+IG5vdEluZGV4SnVtcDsKICAgICBD
b2RlTG9jYXRpb25KdW1wPEpTSW50ZXJuYWxQdHJUYWc+IGJhZFR5cGVKdW1wOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NoZWNrUHJpdmF0ZUJyYW5kU3RhdHVzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2hlY2tQcml2YXRl
QnJhbmRTdGF0dXMuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQ2hlY2tQcml2YXRlQnJhbmRTdGF0dXMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yMjgsMTMgKzIyOCwxMyBAQCBDYWNoZWFibGVJZGVudGlmaWVyIENoZWNrUHJpdmF0ZUJyYW5k
U3RhCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotdm9pZCBDaGVja1ByaXZhdGVCcmFuZFN0YXR1
czo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIENoZWNrUHJpdmF0
ZUJyYW5kU3RhdHVzOjp2aXNpdEFnZ3JlZ2F0ZShBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9y
KQogewogICAgIGZvciAoQ2hlY2tQcml2YXRlQnJhbmRWYXJpYW50JiB2YXJpYW50IDogbV92YXJp
YW50cykKICAgICAgICAgdmFyaWFudC52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKIH0KIAotdm9p
ZCBDaGVja1ByaXZhdGVCcmFuZFN0YXR1czo6bWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImIHZpc2l0
b3IpCit2b2lkIENoZWNrUHJpdmF0ZUJyYW5kU3RhdHVzOjptYXJrSWZDaGVhcChBYnN0cmFjdFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGZvciAoQ2hlY2tQcml2YXRlQnJhbmRWYXJpYW50
JiB2YXJpYW50IDogbV92YXJpYW50cykKICAgICAgICAgdmFyaWFudC5tYXJrSWZDaGVhcCh2aXNp
dG9yKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DaGVja1ByaXZhdGVC
cmFuZFN0YXR1cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9DaGVja1ByaXZhdGVCcmFuZFN0YXR1cy5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2hlY2tQcml2YXRlQnJhbmRTdGF0dXMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtODIsOCArODIsOCBAQCBwdWJsaWM6CiAgICAgLy8gQXR0ZW1wdHMgdG8gcmVk
dWNlIHRoZSBzZXQgb2YgdmFyaWFudHMgdG8gZml0IHRoZSBnaXZlbiBzdHJ1Y3R1cmUgc2V0LiBU
aGlzIG1heSBiZSBhcHByb3hpbWF0ZS4KICAgICB2b2lkIGZpbHRlcihjb25zdCBTdHJ1Y3R1cmVT
ZXQmKTsKIAotICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImKTsKLSAgICB2b2lk
IG1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJik7CisgICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShBYnN0
cmFjdFNsb3RWaXNpdG9yJik7CisgICAgdm9pZCBtYXJrSWZDaGVhcChBYnN0cmFjdFNsb3RWaXNp
dG9yJik7CiAgICAgYm9vbCBmaW5hbGl6ZShWTSYpOwogCiAgICAgYm9vbCBhcHBlbmRWYXJpYW50
KGNvbnN0IENoZWNrUHJpdmF0ZUJyYW5kVmFyaWFudCYpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0NoZWNrUHJpdmF0ZUJyYW5kVmFyaWFudC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NoZWNrUHJpdmF0ZUJyYW5kVmFyaWFu
dC5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9DaGVja1ByaXZhdGVCcmFuZFZhcmlhbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MSw3ICs1
MSw3IEBAIGJvb2wgQ2hlY2tQcml2YXRlQnJhbmRWYXJpYW50OjphdHRlbXB0VG8KICAgICByZXR1
cm4gdHJ1ZTsKIH0KIAotdm9pZCBDaGVja1ByaXZhdGVCcmFuZFZhcmlhbnQ6Om1hcmtJZkNoZWFw
KFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBDaGVja1ByaXZhdGVCcmFuZFZhcmlhbnQ6Om1h
cmtJZkNoZWFwKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgbV9zdHJ1Y3R1
cmVTZXQubWFya0lmQ2hlYXAodmlzaXRvcik7CiB9CkBAIC02Myw3ICs2Myw3IEBAIGJvb2wgQ2hl
Y2tQcml2YXRlQnJhbmRWYXJpYW50OjpmaW5hbGl6ZSgKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAot
dm9pZCBDaGVja1ByaXZhdGVCcmFuZFZhcmlhbnQ6OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9y
JiB2aXNpdG9yKQordm9pZCBDaGVja1ByaXZhdGVCcmFuZFZhcmlhbnQ6OnZpc2l0QWdncmVnYXRl
KEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgbV9pZGVudGlmaWVyLnZpc2l0
QWdncmVnYXRlKHZpc2l0b3IpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NoZWNrUHJpdmF0ZUJyYW5kVmFyaWFudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9DaGVja1ByaXZhdGVCcmFuZFZhcmlhbnQuaAkocmV2aXNpb24g
MjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NoZWNrUHJpdmF0ZUJy
YW5kVmFyaWFudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiAKIG5hbWVzcGFj
ZSBKU0MgewogCitjbGFzcyBBYnN0cmFjdFNsb3RWaXNpdG9yOwogY2xhc3MgQ2hlY2tQcml2YXRl
QnJhbmRTdGF0dXM7CiAKIGNsYXNzIENoZWNrUHJpdmF0ZUJyYW5kVmFyaWFudCB7CkBAIC00Niw4
ICs0Nyw4IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgYXR0ZW1wdFRvTWVyZ2UoY29uc3QgQ2hlY2tQ
cml2YXRlQnJhbmRWYXJpYW50JiBvdGhlcik7CiAKLSAgICB2b2lkIHZpc2l0QWdncmVnYXRlKFNs
b3RWaXNpdG9yJik7Ci0gICAgdm9pZCBtYXJrSWZDaGVhcChTbG90VmlzaXRvciYpOworICAgIHZv
aWQgdmlzaXRBZ2dyZWdhdGUoQWJzdHJhY3RTbG90VmlzaXRvciYpOworICAgIHZvaWQgbWFya0lm
Q2hlYXAoQWJzdHJhY3RTbG90VmlzaXRvciYpOwogICAgIGJvb2wgZmluYWxpemUoVk0mKTsKIAog
ICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMDAxLDcgKzEwMDEsOCBAQCBzaXplX3QgQ29kZUJsb2NrOjplc3RpbWF0ZWRTaXplKEpT
Q2VsbCogCiAgICAgcmV0dXJuIEJhc2U6OmVzdGltYXRlZFNpemUoY2VsbCwgdm0pICsgZXh0cmFN
ZW1vcnlBbGxvY2F0ZWQ7CiB9CiAKLXZvaWQgQ29kZUJsb2NrOjp2aXNpdENoaWxkcmVuKEpTQ2Vs
bCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
Pgordm9pZCBDb2RlQmxvY2s6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRv
ciYgdmlzaXRvcikKIHsKICAgICBDb2RlQmxvY2sqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8Q29kZUJs
b2NrKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBp
bmZvKCkpOwpAQCAtMTAxMCw5ICsxMDExLDE0IEBAIHZvaWQgQ29kZUJsb2NrOjp2aXNpdENoaWxk
cmVuKEpTQ2VsbCogY2UKICAgICB0aGlzT2JqZWN0LT52aXNpdENoaWxkcmVuKHZpc2l0b3IpOwog
fQogCi12b2lkIENvZGVCbG9jazo6dmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikK
K0RFRklORV9WSVNJVF9DSElMRFJFTihDb2RlQmxvY2spOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPgordm9pZCBDb2RlQmxvY2s6OnZpc2l0Q2hpbGRyZW5JbXBsKFZpc2l0b3ImIHZpc2l0
b3IpCiB7CiAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2spOworCisgICAgbV92
aXNpdENoaWxkcmVuU2tpcHBlZER1ZVRvT2xkQWdlID0gZmFsc2U7CiAgICAgaWYgKENvZGVCbG9j
ayogb3RoZXJCbG9jayA9IHNwZWNpYWxPU1JFbnRyeUJsb2NrT3JOdWxsKCkpCiAgICAgICAgIHZp
c2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQob3RoZXJCbG9jayk7CiAKQEAgLTEwMjksMTMgKzEwMzUs
MjMgQEAgdm9pZCBDb2RlQmxvY2s6OnZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0bwogICAgIFZNOjpT
cGFjZUFuZFNldDo6c2V0Rm9yKCpzdWJzcGFjZSgpKS5hZGQodGhpcyk7CiB9CiAKLWJvb2wgQ29k
ZUJsb2NrOjpzaG91bGRWaXNpdFN0cm9uZ2x5KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYgbG9j
a2VyKQorREVGSU5FX0lOU1RBTkNFX1ZJU0lUX0NISUxEUkVOKENvZGVCbG9jayk7CisKK2Jvb2wg
Q29kZUJsb2NrOjpzaG91bGRWaXNpdFN0cm9uZ2x5KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYg
bG9ja2VyLCBBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGlmIChPcHRpb25z
Ojpmb3JjZUNvZGVCbG9ja0xpdmVuZXNzKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAg
aWYgKHNob3VsZEpldHRpc29uRHVlVG9PbGRBZ2UobG9ja2VyKSkKKyAgICBpZiAoc2hvdWxkSmV0
dGlzb25EdWVUb09sZEFnZShsb2NrZXIsIHZpc2l0b3IpKSB7CisgICAgICAgIGlmIChPcHRpb25z
Ojp2ZXJpZnlHQygpKQorICAgICAgICAgICAgbV92aXNpdENoaWxkcmVuU2tpcHBlZER1ZVRvT2xk
QWdlID0gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmIChtX3Zp
c2l0Q2hpbGRyZW5Ta2lwcGVkRHVlVG9PbGRBZ2UpIHsKKyAgICAgICAgQVNTRVJUKE9wdGlvbnM6
OnZlcmlmeUdDKCkpOwogICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQogCiAgICAgLy8gSW50
ZXJwcmV0ZXIgYW5kIEJhc2VsaW5lIEpJVCBDb2RlQmxvY2tzIGRvbid0IG5lZWQgdG8gYmUgamV0
dGlzb25lZCB3aGVuCiAgICAgLy8gdGhlaXIgd2VhayByZWZlcmVuY2VzIGdvIHN0YWxlLiBTbyBp
ZiBhIGJhc2xpbmUgSklUIENvZGVCbG9jayBnZXRzCkBAIC0xMDg2LDkgKzExMDIsOSBAQCBzdGF0
aWMgU2Vjb25kcyB0aW1lVG9MaXZlKEpJVFR5cGUgaml0VHlwCiAgICAgfQogfQogCi1ib29sIENv
ZGVCbG9jazo6c2hvdWxkSmV0dGlzb25EdWVUb09sZEFnZShjb25zdCBDb25jdXJyZW50SlNMb2Nr
ZXImKQorYm9vbCBDb2RlQmxvY2s6OnNob3VsZEpldHRpc29uRHVlVG9PbGRBZ2UoY29uc3QgQ29u
Y3VycmVudEpTTG9ja2VyJiwgQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKLSAgICBp
ZiAobV92bS0+aGVhcC5pc01hcmtlZCh0aGlzKSkKKyAgICBpZiAodmlzaXRvci5pc01hcmtlZCh0
aGlzKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6
OmZvcmNlQ29kZUJsb2NrVG9KZXR0aXNvbkR1ZVRvT2xkQWdlKCkpKQpAQCAtMTEwMSwxMiArMTEx
NywxMiBAQCBib29sIENvZGVCbG9jazo6c2hvdWxkSmV0dGlzb25EdWVUb09sZEFnCiB9CiAKICNp
ZiBFTkFCTEUoREZHX0pJVCkKLXN0YXRpYyBib29sIHNob3VsZE1hcmtUcmFuc2l0aW9uKFZNJiB2
bSwgREZHOjpXZWFrUmVmZXJlbmNlVHJhbnNpdGlvbiYgdHJhbnNpdGlvbikKK3N0YXRpYyBpbmxp
bmUgYm9vbCBzaG91bGRNYXJrVHJhbnNpdGlvbihBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9y
LCBERkc6OldlYWtSZWZlcmVuY2VUcmFuc2l0aW9uJiB0cmFuc2l0aW9uKQogewotICAgIGlmICh0
cmFuc2l0aW9uLm1fY29kZU9yaWdpbiAmJiAhdm0uaGVhcC5pc01hcmtlZCh0cmFuc2l0aW9uLm1f
Y29kZU9yaWdpbi5nZXQoKSkpCisgICAgaWYgKHRyYW5zaXRpb24ubV9jb2RlT3JpZ2luICYmICF2
aXNpdG9yLmlzTWFya2VkKHRyYW5zaXRpb24ubV9jb2RlT3JpZ2luLmdldCgpKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIAotICAgIGlmICghdm0uaGVhcC5pc01hcmtlZCh0cmFuc2l0aW9u
Lm1fZnJvbS5nZXQoKSkpCisgICAgaWYgKCF2aXNpdG9yLmlzTWFya2VkKHRyYW5zaXRpb24ubV9m
cm9tLmdldCgpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAogICAgIHJldHVybiB0cnVl
OwpAQCAtMTEyMiw4ICsxMTM4LDkgQEAgQnl0ZWNvZGVJbmRleCBDb2RlQmxvY2s6OmJ5dGVjb2Rl
SW5kZXhGbwogfQogI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQogCi12b2lkIENvZGVCbG9jazo6
cHJvcGFnYXRlVHJhbnNpdGlvbnMoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgU2xvdFZpc2l0
b3ImIHZpc2l0b3IpCit2b2lkIENvZGVCbG9jazo6cHJvcGFnYXRlVHJhbnNpdGlvbnMoY29uc3Qg
Q29uY3VycmVudEpTTG9ja2VyJiwgQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKKyAg
ICBBYnN0cmFjdFNsb3RWaXNpdG9yOjpTdXBwcmVzc0dDVmVyaWZpZXJTY29wZSBzdXBwcmVzc1Nj
b3BlKHZpc2l0b3IpOwogICAgIFZNJiB2bSA9ICptX3ZtOwogCiAgICAgaWYgKGppdFR5cGUoKSA9
PSBKSVRUeXBlOjpJbnRlcnByZXRlclRodW5rKSB7CkBAIC0xMTMzLDggKzExNTAsOSBAQCB2b2lk
IENvZGVCbG9jazo6cHJvcGFnYXRlVHJhbnNpdGlvbnMoY29uCiAgICAgICAgICAgICAgICAgU3Ry
dWN0dXJlSUQgbmV3U3RydWN0dXJlSUQgPSBtZXRhZGF0YS5tX25ld1N0cnVjdHVyZUlEOwogICAg
ICAgICAgICAgICAgIGlmICghb2xkU3RydWN0dXJlSUQgfHwgIW5ld1N0cnVjdHVyZUlEKQogICAg
ICAgICAgICAgICAgICAgICByZXR1cm47CisKICAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIG9s
ZFN0cnVjdHVyZSA9IHZtLmhlYXAuc3RydWN0dXJlSURUYWJsZSgpLmdldChvbGRTdHJ1Y3R1cmVJ
RCk7Ci0gICAgICAgICAgICAgICAgaWYgKHZtLmhlYXAuaXNNYXJrZWQob2xkU3RydWN0dXJlKSkg
eworICAgICAgICAgICAgICAgIGlmICh2aXNpdG9yLmlzTWFya2VkKG9sZFN0cnVjdHVyZSkpIHsK
ICAgICAgICAgICAgICAgICAgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSB2bS5oZWFwLnN0
cnVjdHVyZUlEVGFibGUoKS5nZXQobmV3U3RydWN0dXJlSUQpOwogICAgICAgICAgICAgICAgICAg
ICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKG5ld1N0cnVjdHVyZSk7CiAgICAgICAgICAgICAg
ICAgfQpAQCAtMTE0OCwxMSArMTE2NiwxMSBAQCB2b2lkIENvZGVCbG9jazo6cHJvcGFnYXRlVHJh
bnNpdGlvbnMoY29uCiAKICAgICAgICAgICAgICAgICBKU0NlbGwqIHByb3BlcnR5ID0gbWV0YWRh
dGEubV9wcm9wZXJ0eS5nZXQoKTsKICAgICAgICAgICAgICAgICBBU1NFUlQocHJvcGVydHkpOwot
ICAgICAgICAgICAgICAgIGlmICghdm0uaGVhcC5pc01hcmtlZChwcm9wZXJ0eSkpCisgICAgICAg
ICAgICAgICAgaWYgKCF2aXNpdG9yLmlzTWFya2VkKHByb3BlcnR5KSkKICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuOwogCiAgICAgICAgICAgICAgICAgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUg
PSB2bS5oZWFwLnN0cnVjdHVyZUlEVGFibGUoKS5nZXQob2xkU3RydWN0dXJlSUQpOwotICAgICAg
ICAgICAgICAgIGlmICh2bS5oZWFwLmlzTWFya2VkKG9sZFN0cnVjdHVyZSkpIHsKKyAgICAgICAg
ICAgICAgICBpZiAodmlzaXRvci5pc01hcmtlZChvbGRTdHJ1Y3R1cmUpKSB7CiAgICAgICAgICAg
ICAgICAgICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0gdm0uaGVhcC5zdHJ1Y3R1cmVJRFRh
YmxlKCkuZ2V0KG5ld1N0cnVjdHVyZUlEKTsKICAgICAgICAgICAgICAgICAgICAgdmlzaXRvci5h
cHBlbmRVbmJhcnJpZXJlZChuZXdTdHJ1Y3R1cmUpOwogICAgICAgICAgICAgICAgIH0KQEAgLTEx
NzAsNyArMTE4OCw3IEBAIHZvaWQgQ29kZUJsb2NrOjpwcm9wYWdhdGVUcmFuc2l0aW9ucyhjb24K
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgICAgICAgICAgU3RydWN0dXJl
KiBvbGRTdHJ1Y3R1cmUgPSB2bS5oZWFwLnN0cnVjdHVyZUlEVGFibGUoKS5nZXQob2xkU3RydWN0
dXJlSUQpOwotICAgICAgICAgICAgICAgIGlmICh2bS5oZWFwLmlzTWFya2VkKG9sZFN0cnVjdHVy
ZSkpIHsKKyAgICAgICAgICAgICAgICBpZiAodmlzaXRvci5pc01hcmtlZChvbGRTdHJ1Y3R1cmUp
KSB7CiAgICAgICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0gdm0uaGVh
cC5zdHJ1Y3R1cmVJRFRhYmxlKCkuZ2V0KG5ld1N0cnVjdHVyZUlEKTsKICAgICAgICAgICAgICAg
ICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZChuZXdTdHJ1Y3R1cmUpOwogICAgICAgICAg
ICAgICAgIH0KQEAgLTExOTcsNyArMTIxNSw3IEBAIHZvaWQgQ29kZUJsb2NrOjpwcm9wYWdhdGVU
cmFuc2l0aW9ucyhjb24KICAgICAgICAgICAgIHZtLmdldFN0cnVjdHVyZShzdHJ1Y3R1cmVJRCkt
Pm1hcmtJZkNoZWFwKHZpc2l0b3IpOwogCiAgICAgICAgIGZvciAoYXV0byYgdHJhbnNpdGlvbiA6
IGRmZ0NvbW1vbi0+dHJhbnNpdGlvbnMpIHsKLSAgICAgICAgICAgIGlmIChzaG91bGRNYXJrVHJh
bnNpdGlvbih2bSwgdHJhbnNpdGlvbikpIHsKKyAgICAgICAgICAgIGlmIChzaG91bGRNYXJrVHJh
bnNpdGlvbih2aXNpdG9yLCB0cmFuc2l0aW9uKSkgewogICAgICAgICAgICAgICAgIC8vIElmIHRo
ZSBmb2xsb3dpbmcgdGhyZWUgdGhpbmdzIGFyZSBsaXZlLCB0aGVuIHRoZSB0YXJnZXQgb2YgdGhl
CiAgICAgICAgICAgICAgICAgLy8gdHJhbnNpdGlvbiBpcyBhbHNvIGxpdmU6CiAgICAgICAgICAg
ICAgICAgLy8KQEAgLTEyMjQsMTMgKzEyNDIsMTMgQEAgdm9pZCBDb2RlQmxvY2s6OnByb3BhZ2F0
ZVRyYW5zaXRpb25zKGNvbgogI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQogfQogCi12b2lkIENv
ZGVCbG9jazo6ZGV0ZXJtaW5lTGl2ZW5lc3MoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgU2xv
dFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIENvZGVCbG9jazo6ZGV0ZXJtaW5lTGl2ZW5lc3MoY29u
c3QgQ29uY3VycmVudEpTTG9ja2VyJiwgQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsK
ICAgICBVTlVTRURfUEFSQU0odmlzaXRvcik7CiAgICAgCiAjaWYgRU5BQkxFKERGR19KSVQpCiAg
ICAgVk0mIHZtID0gKm1fdm07Ci0gICAgaWYgKHZtLmhlYXAuaXNNYXJrZWQodGhpcykpCisgICAg
aWYgKHZpc2l0b3IuaXNNYXJrZWQodGhpcykpCiAgICAgICAgIHJldHVybjsKICAgICAKICAgICAv
LyBJbiByYXJlIGFuZCB3ZWlyZCBjYXNlcywgdGhpcyBjb3VsZCBiZSBjYWxsZWQgb24gYSBiYXNl
bGluZSBDb2RlQmxvY2suIE9uZSB0aGF0IEkgZm91bmQgd2FzCkBAIC0xMjQ3LDcgKzEyNjUsNyBA
QCB2b2lkIENvZGVCbG9jazo6ZGV0ZXJtaW5lTGl2ZW5lc3MoY29uc3QgCiAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IGRmZ0NvbW1vbi0+d2Vha1JlZmVyZW5jZXMuc2l6ZSgpOyArK2kpIHsK
ICAgICAgICAgSlNDZWxsKiByZWZlcmVuY2UgPSBkZmdDb21tb24tPndlYWtSZWZlcmVuY2VzW2ld
LmdldCgpOwogICAgICAgICBBU1NFUlQoIWpzRHluYW1pY0Nhc3Q8Q29kZUJsb2NrKj4odm0sIHJl
ZmVyZW5jZSkpOwotICAgICAgICBpZiAoIXZtLmhlYXAuaXNNYXJrZWQocmVmZXJlbmNlKSkgewor
ICAgICAgICBpZiAoIXZpc2l0b3IuaXNNYXJrZWQocmVmZXJlbmNlKSkgewogICAgICAgICAgICAg
YWxsQXJlTGl2ZVNvRmFyID0gZmFsc2U7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpA
QCAtMTI1NSw3ICsxMjczLDcgQEAgdm9pZCBDb2RlQmxvY2s6OmRldGVybWluZUxpdmVuZXNzKGNv
bnN0IAogICAgIGlmIChhbGxBcmVMaXZlU29GYXIpIHsKICAgICAgICAgZm9yIChTdHJ1Y3R1cmVJ
RCBzdHJ1Y3R1cmVJRCA6IGRmZ0NvbW1vbi0+d2Vha1N0cnVjdHVyZVJlZmVyZW5jZXMpIHsKICAg
ICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gdm0uZ2V0U3RydWN0dXJlKHN0cnVjdHVy
ZUlEKTsKLSAgICAgICAgICAgIGlmICghdm0uaGVhcC5pc01hcmtlZChzdHJ1Y3R1cmUpKSB7Cisg
ICAgICAgICAgICBpZiAoIXZpc2l0b3IuaXNNYXJrZWQoc3RydWN0dXJlKSkgewogICAgICAgICAg
ICAgICAgIGFsbEFyZUxpdmVTb0ZhciA9IGZhbHNlOwogICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgfQpAQCAtMTYxNiw2ICsxNjM0LDcgQEAgdm9pZCBDb2RlQmxvY2s6OmZpbmFs
aXplVW5jb25kaXRpb25hbGx5KAogICAgIHVwZGF0ZUFjdGl2aXR5KCk7CiAKICAgICBWTTo6U3Bh
Y2VBbmRTZXQ6OnNldEZvcigqc3Vic3BhY2UoKSkucmVtb3ZlKHRoaXMpOworICAgIG1fdmlzaXRD
aGlsZHJlblNraXBwZWREdWVUb09sZEFnZSA9IGZhbHNlOwogfQogCiB2b2lkIENvZGVCbG9jazo6
ZGVzdHJveShKU0NlbGwqIGNlbGwpCkBAIC0xODA4LDcgKzE4MjcsOCBAQCB2b2lkIENvZGVCbG9j
azo6cmVzZXRKSVREYXRhKCkKIH0KICNlbmRpZgogCi12b2lkIENvZGVCbG9jazo6dmlzaXRPU1JF
eGl0VGFyZ2V0cyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBTbG90VmlzaXRvciYgdmlzaXRv
cikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIENvZGVCbG9jazo6dmlzaXRPU1JF
eGl0VGFyZ2V0cyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBWaXNpdG9yJiB2aXNpdG9yKQog
ewogICAgIC8vIFdlIHN0cm9uZ2x5IHZpc2l0IE9TUiBleGl0cyB0YXJnZXRzIGJlY2F1c2Ugd2Ug
ZG9uJ3Qgd2FudCB0byBkZWFsIHdpdGgKICAgICAvLyB0aGUgY29tcGxleGl0eSBvZiBnZW5lcmF0
aW5nIGFuIGV4aXQgdGFyZ2V0IENvZGVCbG9jayBvbiBkZW1hbmQgYW5kCkBAIC0xODI4LDcgKzE4
NDgsMTEgQEAgdm9pZCBDb2RlQmxvY2s6OnZpc2l0T1NSRXhpdFRhcmdldHMoY29ucwogI2VuZGlm
CiB9CiAKLXZvaWQgQ29kZUJsb2NrOjpzdHJvbmdseVZpc2l0U3Ryb25nUmVmZXJlbmNlcyhjb25z
dCBDb25jdXJyZW50SlNMb2NrZXImIGxvY2tlciwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1w
bGF0ZSB2b2lkIENvZGVCbG9jazo6dmlzaXRPU1JFeGl0VGFyZ2V0cyhjb25zdCBDb25jdXJyZW50
SlNMb2NrZXImLCBTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBDb2RlQmxvY2s6OnZpc2l0
T1NSRXhpdFRhcmdldHMoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgQWJzdHJhY3RTbG90Vmlz
aXRvciYpOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBDb2RlQmxvY2s6OnN0
cm9uZ2x5VmlzaXRTdHJvbmdSZWZlcmVuY2VzKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYgbG9j
a2VyLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFVOVVNFRF9QQVJBTShsb2NrZXIpOwogICAg
IApAQCAtMTg2NCw3ICsxODg4LDggQEAgdm9pZCBDb2RlQmxvY2s6OnN0cm9uZ2x5VmlzaXRTdHJv
bmdSZWZlcgogI2VuZGlmCiB9CiAKLXZvaWQgQ29kZUJsb2NrOjpzdHJvbmdseVZpc2l0V2Vha1Jl
ZmVyZW5jZXMoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgU2xvdFZpc2l0b3ImIHZpc2l0b3Ip
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBDb2RlQmxvY2s6OnN0cm9uZ2x5Vmlz
aXRXZWFrUmVmZXJlbmNlcyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBWaXNpdG9yJiB2aXNp
dG9yKQogewogICAgIFVOVVNFRF9QQVJBTSh2aXNpdG9yKTsKIApAQCAtMTg5MSw2ICsxOTE2LDkg
QEAgdm9pZCBDb2RlQmxvY2s6OnN0cm9uZ2x5VmlzaXRXZWFrUmVmZXJlbgogI2VuZGlmICAgIAog
fQogCit0ZW1wbGF0ZSB2b2lkIENvZGVCbG9jazo6c3Ryb25nbHlWaXNpdFdlYWtSZWZlcmVuY2Vz
KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lk
IENvZGVCbG9jazo6c3Ryb25nbHlWaXNpdFdlYWtSZWZlcmVuY2VzKGNvbnN0IENvbmN1cnJlbnRK
U0xvY2tlciYsIEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKKwogQ29kZUJsb2NrKiBDb2RlQmxvY2s6
OmJhc2VsaW5lQWx0ZXJuYXRpdmUoKQogewogI2lmIEVOQUJMRShKSVQpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShyZXZpc2lvbiAyNzI4MzApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMjAgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA4IENhbWVy
b24gWndhcmljaCA8Y3d6d2FyaWNoQHV3YXRlcmxvby5jYT4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAg
LTIwMSwxMCArMjAxLDExIEBAIHB1YmxpYzoKICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTIzNjc3CiAgICAgQ29kZUJsb2NrKiBiYXNlbGluZVZlcnNpb24o
KTsKIAorICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CisKICAgICBzdGF0aWMgc2l6ZV90IGVz
dGltYXRlZFNpemUoSlNDZWxsKiwgVk0mKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVu
KEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwq
KTsKLSAgICB2b2lkIHZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX0lO
U1RBTkNFX1ZJU0lUX0NISUxEUkVOOwogICAgIHZvaWQgZmluYWxpemVVbmNvbmRpdGlvbmFsbHko
Vk0mKTsKIAogICAgIHZvaWQgbm90aWZ5TGV4aWNhbEJpbmRpbmdVcGRhdGUoKTsKQEAgLTk2Mywx
NiArOTY0LDE2IEBAIHByaXZhdGU6CiAgICAgICAgIG1fY29uc3RhbnRSZWdpc3RlcnNbcmVnLnRv
Q29uc3RhbnRJbmRleCgpXS5zZXQoKm1fdm0sIHRoaXMsIHZhbHVlKTsKICAgICB9CiAKLSAgICBi
b29sIHNob3VsZFZpc2l0U3Ryb25nbHkoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJik7CisgICAg
Ym9vbCBzaG91bGRWaXNpdFN0cm9uZ2x5KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIEFic3Ry
YWN0U2xvdFZpc2l0b3ImKTsKICAgICBib29sIHNob3VsZEpldHRpc29uRHVlVG9XZWFrUmVmZXJl
bmNlKFZNJik7Ci0gICAgYm9vbCBzaG91bGRKZXR0aXNvbkR1ZVRvT2xkQWdlKGNvbnN0IENvbmN1
cnJlbnRKU0xvY2tlciYpOworICAgIGJvb2wgc2hvdWxkSmV0dGlzb25EdWVUb09sZEFnZShjb25z
dCBDb25jdXJyZW50SlNMb2NrZXImLCBBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAgICAgCi0gICAg
dm9pZCBwcm9wYWdhdGVUcmFuc2l0aW9ucyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBTbG90
VmlzaXRvciYpOwotICAgIHZvaWQgZGV0ZXJtaW5lTGl2ZW5lc3MoY29uc3QgQ29uY3VycmVudEpT
TG9ja2VyJiwgU2xvdFZpc2l0b3ImKTsKKyAgICB2b2lkIHByb3BhZ2F0ZVRyYW5zaXRpb25zKGNv
bnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKKyAgICB2b2lk
IGRldGVybWluZUxpdmVuZXNzKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIEFic3RyYWN0U2xv
dFZpc2l0b3ImKTsKICAgICAgICAgCi0gICAgdm9pZCBzdHJvbmdseVZpc2l0U3Ryb25nUmVmZXJl
bmNlcyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBTbG90VmlzaXRvciYpOwotICAgIHZvaWQg
c3Ryb25nbHlWaXNpdFdlYWtSZWZlcmVuY2VzKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIFNs
b3RWaXNpdG9yJik7Ci0gICAgdm9pZCB2aXNpdE9TUkV4aXRUYXJnZXRzKGNvbnN0IENvbmN1cnJl
bnRKU0xvY2tlciYsIFNsb3RWaXNpdG9yJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRv
cj4gdm9pZCBzdHJvbmdseVZpc2l0U3Ryb25nUmVmZXJlbmNlcyhjb25zdCBDb25jdXJyZW50SlNM
b2NrZXImLCBWaXNpdG9yJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCBz
dHJvbmdseVZpc2l0V2Vha1JlZmVyZW5jZXMoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgVmlz
aXRvciYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgdmlzaXRPU1JFeGl0
VGFyZ2V0cyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBWaXNpdG9yJik7CiAKICAgICB1bnNp
Z25lZCBudW1iZXJPZk5vbkFyZ3VtZW50VmFsdWVQcm9maWxlcygpIHsgcmV0dXJuIG1fbnVtYmVy
T2ZOb25Bcmd1bWVudFZhbHVlUHJvZmlsZXM7IH0KICAgICB1bnNpZ25lZCB0b3RhbE51bWJlck9m
VmFsdWVQcm9maWxlcygpIHsgcmV0dXJuIG51bWJlck9mQXJndW1lbnRWYWx1ZVByb2ZpbGVzKCkg
KyBudW1iZXJPZk5vbkFyZ3VtZW50VmFsdWVQcm9maWxlcygpOyB9CkBAIC0xMDExLDYgKzEwMTIs
NyBAQCBwcml2YXRlOgogICAgIHVuc2lnbmVkIG1fYnl0ZWNvZGVDb3N0IHsgMCB9OwogICAgIFZp
cnR1YWxSZWdpc3RlciBtX3Njb3BlUmVnaXN0ZXI7CiAgICAgbXV0YWJsZSBDb2RlQmxvY2tIYXNo
IG1faGFzaDsKKyAgICBib29sIG1fdmlzaXRDaGlsZHJlblNraXBwZWREdWVUb09sZEFnZSB7IGZh
bHNlIH07CiAKICAgICBXcml0ZUJhcnJpZXI8VW5saW5rZWRDb2RlQmxvY2s+IG1fdW5saW5rZWRD
b2RlOwogICAgIFdyaXRlQmFycmllcjxTY3JpcHRFeGVjdXRhYmxlPiBtX293bmVyRXhlY3V0YWJs
ZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9EZWxldGVCeUlkVmFyaWFu
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0RlbGV0
ZUJ5SWRWYXJpYW50LmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0RlbGV0ZUJ5SWRWYXJpYW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIwLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC04OCwxMiAr
ODgsMTIgQEAgYm9vbCBEZWxldGVCeUlkVmFyaWFudDo6d3JpdGVzU3RydWN0dXJlcwogICAgIHJl
dHVybiAhIW5ld1N0cnVjdHVyZSgpOwogfQogCi12b2lkIERlbGV0ZUJ5SWRWYXJpYW50Ojp2aXNp
dEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgRGVsZXRlQnlJZFZhcmlhbnQ6
OnZpc2l0QWdncmVnYXRlKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgbV9p
ZGVudGlmaWVyLnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOwogfQogCi12b2lkIERlbGV0ZUJ5SWRW
YXJpYW50OjptYXJrSWZDaGVhcChTbG90VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgRGVsZXRlQnlJ
ZFZhcmlhbnQ6Om1hcmtJZkNoZWFwKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAg
ICAgaWYgKG1fb2xkU3RydWN0dXJlKQogICAgICAgICBtX29sZFN0cnVjdHVyZS0+bWFya0lmQ2hl
YXAodmlzaXRvcik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRGVsZXRl
QnlJZFZhcmlhbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvRGVsZXRlQnlJZFZhcmlhbnQuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0RlbGV0ZUJ5SWRWYXJpYW50LmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMC0yMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjEs
OCArNjEsOCBAQCBwdWJsaWM6CiAKICAgICBib29sIGF0dGVtcHRUb01lcmdlKGNvbnN0IERlbGV0
ZUJ5SWRWYXJpYW50JiBvdGhlcik7CiAKLSAgICB2b2lkIHZpc2l0QWdncmVnYXRlKFNsb3RWaXNp
dG9yJik7Ci0gICAgdm9pZCBtYXJrSWZDaGVhcChTbG90VmlzaXRvciYpOworICAgIHZvaWQgdmlz
aXRBZ2dyZWdhdGUoQWJzdHJhY3RTbG90VmlzaXRvciYpOworICAgIHZvaWQgbWFya0lmQ2hlYXAo
QWJzdHJhY3RTbG90VmlzaXRvciYpOwogICAgIGJvb2wgZmluYWxpemUoVk0mKTsKIAogICAgIHZv
aWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0RlbGV0ZUJ5U3RhdHVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvRGVsZXRlQnlTdGF0dXMuY3BwCShyZXZpc2lvbiAyNzI4MzApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRGVsZXRlQnlTdGF0dXMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAtMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTI1NCwxMyArMjU0LDEzIEBAIENhY2hlYWJsZUlkZW50aWZpZXIgRGVsZXRlQnlT
dGF0dXM6OnNpbmcKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi12b2lkIERlbGV0ZUJ5U3RhdHVz
Ojp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgRGVsZXRlQnlTdGF0
dXM6OnZpc2l0QWdncmVnYXRlKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAg
Zm9yIChEZWxldGVCeUlkVmFyaWFudCYgdmFyaWFudCA6IG1fdmFyaWFudHMpCiAgICAgICAgIHZh
cmlhbnQudmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7CiB9CiAKLXZvaWQgRGVsZXRlQnlTdGF0dXM6
Om1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBEZWxldGVCeVN0YXR1czo6
bWFya0lmQ2hlYXAoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBmb3IgKERl
bGV0ZUJ5SWRWYXJpYW50JiB2YXJpYW50IDogbV92YXJpYW50cykKICAgICAgICAgdmFyaWFudC5t
YXJrSWZDaGVhcCh2aXNpdG9yKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9EZWxldGVCeVN0YXR1cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9EZWxldGVCeVN0YXR1cy5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvRGVsZXRlQnlTdGF0dXMuaAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIwLTIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC04MSw4
ICs4MSw4IEBAIHB1YmxpYzoKICAgICAvLyBBdHRlbXB0cyB0byByZWR1Y2UgdGhlIHNldCBvZiB2
YXJpYW50cyB0byBmaXQgdGhlIGdpdmVuIHN0cnVjdHVyZSBzZXQuIFRoaXMgbWF5IGJlIGFwcHJv
eGltYXRlLgogICAgIHZvaWQgZmlsdGVyKGNvbnN0IFN0cnVjdHVyZVNldCYpOwogCi0gICAgdm9p
ZCB2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYpOwotICAgIHZvaWQgbWFya0lmQ2hlYXAoU2xv
dFZpc2l0b3ImKTsKKyAgICB2b2lkIHZpc2l0QWdncmVnYXRlKEFic3RyYWN0U2xvdFZpc2l0b3Im
KTsKKyAgICB2b2lkIG1hcmtJZkNoZWFwKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKICAgICBib29s
IGZpbmFsaXplKFZNJik7CiAKICAgICBib29sIGFwcGVuZFZhcmlhbnQoY29uc3QgRGVsZXRlQnlJ
ZFZhcmlhbnQmKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9EaXJlY3RF
dmFsQ29kZUNhY2hlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvRGlyZWN0RXZhbENvZGVDYWNoZS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9EaXJlY3RFdmFsQ29kZUNhY2hlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC00NSw3ICs0NSw4IEBAIHZvaWQgRGlyZWN0RXZhbENvZGVDYWNoZTo6Y2xlYXIoKQog
ICAgIG1fY2FjaGVNYXAuY2xlYXIoKTsKIH0KIAotdm9pZCBEaXJlY3RFdmFsQ29kZUNhY2hlOjp2
aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZp
c2l0b3I+Cit2b2lkIERpcmVjdEV2YWxDb2RlQ2FjaGU6OnZpc2l0QWdncmVnYXRlKFZpc2l0b3Im
IHZpc2l0b3IpCiB7CiAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9sb2NrKTsKICAgICBFdmFsQ2Fj
aGVNYXA6Oml0ZXJhdG9yIGVuZCA9IG1fY2FjaGVNYXAuZW5kKCk7CkBAIC01Myw1ICs1NCw3IEBA
IHZvaWQgRGlyZWN0RXZhbENvZGVDYWNoZTo6dmlzaXRBZ2dyZWdhdGUKICAgICAgICAgdmlzaXRv
ci5hcHBlbmQocHRyLT52YWx1ZSk7CiB9CiAKLX0gLy8gbmFtZXNwYWNlIEpTQwordGVtcGxhdGUg
dm9pZCBEaXJlY3RFdmFsQ29kZUNhY2hlOjp2aXNpdEFnZ3JlZ2F0ZShBYnN0cmFjdFNsb3RWaXNp
dG9yJik7Cit0ZW1wbGF0ZSB2b2lkIERpcmVjdEV2YWxDb2RlQ2FjaGU6OnZpc2l0QWdncmVnYXRl
KFNsb3RWaXNpdG9yJik7CiAKK30gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0RpcmVjdEV2YWxDb2RlQ2FjaGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRGlyZWN0RXZhbENvZGVDYWNoZS5oCShyZXZp
c2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRGlyZWN0RXZh
bENvZGVDYWNoZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAwOC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAwOC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtOTcsNyArOTcsNyBAQCBuYW1lc3BhY2Ug
SlNDIHsKIAogICAgICAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBtX2NhY2hlTWFw
LmlzRW1wdHkoKTsgfQogCi0gICAgICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3Im
KTsKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCB2aXNpdEFnZ3JlZ2F0
ZShWaXNpdG9yJik7CiAKICAgICAgICAgdm9pZCBjbGVhcigpOwogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGFibGVUb0NvZGVC
bG9ja0VkZ2UuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOC0yMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTMs
NyArNTMsOCBAQCB2b2lkIEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2U6OmZpbmlzaENyCiAgICAg
QVNTRVJUKCFpc0FjdGl2ZSgpKTsKIH0KIAotdm9pZCBFeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdl
Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1w
bGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBFeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlOjp2
aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAg
Vk0mIHZtID0gdmlzaXRvci52bSgpOwogICAgIEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UqIGVk
Z2UgPSBqc0Nhc3Q8RXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZSo+KGNlbGwpOwpAQCAtNjEsNyAr
NjIsNyBAQCB2b2lkIEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2U6OnZpc2l0Q2hpCiAgICAgQmFz
ZTo6dmlzaXRDaGlsZHJlbihjZWxsLCB2aXNpdG9yKTsKIAogICAgIENvZGVCbG9jayogY29kZUJs
b2NrID0gZWRnZS0+bV9jb2RlQmxvY2suZ2V0KCk7Ci0gICAgCisKICAgICAvLyBJdCdzIHBvc3Np
YmxlIGZvciBzb21lb25lIHRvIGhvbGQgYSBwb2ludGVyIHRvIHRoZSBlZGdlIGFmdGVyIHRoZSBl
ZGdlIGhhcyBjbGVhcmVkIGl0cyB3ZWFrCiAgICAgLy8gcmVmZXJlbmNlIHRvIHRoZSBjb2RlQmxv
Y2suIEluIGEgY29uc2VydmF0aXZlIEdDIGxpa2Ugb3VycywgdGhhdCBjb3VsZCBoYXBwZW4gYXQg
cmFuZG9tIGZvcgogICAgIC8vIG5vIGdvb2QgcmVhc29uIGFuZCBpdCdzIFRvdGFsbHkgT0sgKFRN
KS4gU2VlIGZpbmFsaXplVW5jb25kaXRpb25hbGx5KCkgZm9yIHdoZXJlIHdlIGNsZWFyCkBAIC03
NSwxMSArNzYsMTEgQEAgdm9pZCBFeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlOjp2aXNpdENoaQog
ICAgIH0KICAgICAKICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9s
b2NrKTsKLSAgICAKLSAgICBpZiAoY29kZUJsb2NrLT5zaG91bGRWaXNpdFN0cm9uZ2x5KGxvY2tl
cikpCisKKyAgICBpZiAoY29kZUJsb2NrLT5zaG91bGRWaXNpdFN0cm9uZ2x5KGxvY2tlciwgdmlz
aXRvcikpCiAgICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQoY29kZUJsb2NrKTsKICAg
ICAKLSAgICBpZiAoIXZtLmhlYXAuaXNNYXJrZWQoY29kZUJsb2NrKSkKKyAgICBpZiAoIXZpc2l0
b3IuaXNNYXJrZWQoY29kZUJsb2NrKSkKICAgICAgICAgdm0uZXhlY3V0YWJsZVRvQ29kZUJsb2Nr
RWRnZXNXaXRoRmluYWxpemVycy5hZGQoZWRnZSk7CiAgICAgCiAgICAgaWYgKEpJVENvZGU6Omlz
T3B0aW1pemluZ0pJVChjb2RlQmxvY2stPmppdFR5cGUoKSkpIHsKQEAgLTExNyw3ICsxMTgsOSBA
QCB2b2lkIEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2U6OnZpc2l0Q2hpCiAgICAgZWRnZS0+cnVu
Q29uc3RyYWludChsb2NrZXIsIHZtLCB2aXNpdG9yKTsKIH0KIAotdm9pZCBFeGVjdXRhYmxlVG9D
b2RlQmxvY2tFZGdlOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzKEpTQ2VsbCogY2VsbCwgU2xvdFZp
c2l0b3ImIHZpc2l0b3IpCitERUZJTkVfVklTSVRfQ0hJTERSRU4oRXhlY3V0YWJsZVRvQ29kZUJs
b2NrRWRnZSk7CisKK3ZvaWQgRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZTo6dmlzaXRPdXRwdXRD
b25zdHJhaW50cyhKU0NlbGwqIGNlbGwsIEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7
CiAgICAgVk0mIHZtID0gdmlzaXRvci52bSgpOwogICAgIEV4ZWN1dGFibGVUb0NvZGVCbG9ja0Vk
Z2UqIGVkZ2UgPSBqc0Nhc3Q8RXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZSo+KGNlbGwpOwpAQCAt
MTg2LDE0ICsxODksMTQgQEAgRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZTo6RXhlY3V0YWJsZVRv
QwogewogfQogCi12b2lkIEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2U6OnJ1bkNvbnN0cmFpbnQo
Y29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiBsb2NrZXIsIFZNJiB2bSwgU2xvdFZpc2l0b3ImIHZp
c2l0b3IpCit2b2lkIEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2U6OnJ1bkNvbnN0cmFpbnQoY29u
c3QgQ29uY3VycmVudEpTTG9ja2VyJiBsb2NrZXIsIFZNJiB2bSwgQWJzdHJhY3RTbG90VmlzaXRv
ciYgdmlzaXRvcikKIHsKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IG1fY29kZUJsb2NrLmdl
dCgpOwogICAgIAogICAgIGNvZGVCbG9jay0+cHJvcGFnYXRlVHJhbnNpdGlvbnMobG9ja2VyLCB2
aXNpdG9yKTsKICAgICBjb2RlQmxvY2stPmRldGVybWluZUxpdmVuZXNzKGxvY2tlciwgdmlzaXRv
cik7Ci0gICAgCi0gICAgaWYgKHZtLmhlYXAuaXNNYXJrZWQoY29kZUJsb2NrKSkKKworICAgIGlm
ICh2aXNpdG9yLmlzTWFya2VkKGNvZGVCbG9jaykpCiAgICAgICAgIHZtLmV4ZWN1dGFibGVUb0Nv
ZGVCbG9ja0VkZ2VzV2l0aENvbnN0cmFpbnRzLnJlbW92ZSh0aGlzKTsKIH0KIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhlY3V0YWJsZVRv
Q29kZUJsb2NrRWRnZS5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOC0yMDE5IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOC0yMDIxIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtNTMsOSArNTMsOSBAQCBwdWJsaWM6CiAgICAgREVDTEFSRV9JTkZPOwogCiAgICAgQ29kZUJs
b2NrKiBjb2RlQmxvY2soKSBjb25zdCB7IHJldHVybiBtX2NvZGVCbG9jay5nZXQoKTsgfQotICAg
IAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsK
LSAgICBzdGF0aWMgdm9pZCB2aXNpdE91dHB1dENvbnN0cmFpbnRzKEpTQ2VsbCosIFNsb3RWaXNp
dG9yJik7CisKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOworICAgIHN0YXRpYyB2b2lkIHZp
c2l0T3V0cHV0Q29uc3RyYWludHMoSlNDZWxsKiwgQWJzdHJhY3RTbG90VmlzaXRvciYpOwogICAg
IHZvaWQgZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoVk0mKTsKICAgICAKICAgICBzdGF0aWMgQ29k
ZUJsb2NrKiB1bndyYXAoRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZSogZWRnZSkKQEAgLTgxLDkg
KzgxLDkgQEAgcHJpdmF0ZToKICAgICB2b2lkIGFjdGl2YXRlKCk7CiAgICAgdm9pZCBkZWFjdGl2
YXRlKCk7CiAgICAgYm9vbCBpc0FjdGl2ZSgpIGNvbnN0OwotICAgIAotICAgIHZvaWQgcnVuQ29u
c3RyYWludChjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBWTSYsIFNsb3RWaXNpdG9yJik7Ci0g
ICAgCisKKyAgICB2b2lkIHJ1bkNvbnN0cmFpbnQoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwg
Vk0mLCBBYnN0cmFjdFNsb3RWaXNpdG9yJik7CisKICAgICBXcml0ZUJhcnJpZXI8Q29kZUJsb2Nr
PiBtX2NvZGVCbG9jazsKIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9HZXRCeUlkVmFyaWFudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0dldEJ5SWRWYXJpYW50LmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRWYXJpYW50LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAyMCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAyMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTE1NiwxMiArMTU2LDEyIEBAIGJvb2wgR2V0QnlJZFZhcmlhbnQ6OmF0dGVtcHRUb01l
cmdlKGNvbnMKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBHZXRCeUlkVmFyaWFudDo6dmlz
aXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIEdldEJ5SWRWYXJpYW50Ojp2
aXNpdEFnZ3JlZ2F0ZShBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIG1faWRl
bnRpZmllci52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKIH0KIAotdm9pZCBHZXRCeUlkVmFyaWFu
dDo6bWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIEdldEJ5SWRWYXJpYW50
OjptYXJrSWZDaGVhcChBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIG1fc3Ry
dWN0dXJlU2V0Lm1hcmtJZkNoZWFwKHZpc2l0b3IpOwogfQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRWYXJpYW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRWYXJpYW50LmgJKHJldmlzaW9uIDI3MjgzMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkVmFyaWFudC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNC0yMDIw
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNC0y
MDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtNzcsOCArNzcsOCBAQCBwdWJsaWM6CiAKICAgICBib29sIGF0dGVtcHRU
b01lcmdlKGNvbnN0IEdldEJ5SWRWYXJpYW50JiBvdGhlcik7CiAgICAgCi0gICAgdm9pZCB2aXNp
dEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYpOwotICAgIHZvaWQgbWFya0lmQ2hlYXAoU2xvdFZpc2l0
b3ImKTsKKyAgICB2b2lkIHZpc2l0QWdncmVnYXRlKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKKyAg
ICB2b2lkIG1hcmtJZkNoZWFwKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKICAgICBib29sIGZpbmFs
aXplKFZNJik7CiAgICAgCiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlTdGF0dXMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeVN0YXR1cy5jcHAJKHJl
dmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeVN0
YXR1cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDEyLTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEyLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01MzAsNyArNTMwLDcgQEAgdm9pZCBHZXRCeVN0
YXR1czo6ZmlsdGVyKGNvbnN0IFN0cnVjdHVyZQogICAgICAgICBtX3N0YXRlID0gTm9JbmZvcm1h
dGlvbjsKIH0KIAotdm9pZCBHZXRCeVN0YXR1czo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3Im
IHZpc2l0b3IpCit2b2lkIEdldEJ5U3RhdHVzOjp2aXNpdEFnZ3JlZ2F0ZShBYnN0cmFjdFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQogewogICAgIGlmIChpc01vZHVsZU5hbWVzcGFjZSgpKQogICAgICAg
ICBtX21vZHVsZU5hbWVzcGFjZURhdGEtPm1faWRlbnRpZmllci52aXNpdEFnZ3JlZ2F0ZSh2aXNp
dG9yKTsKQEAgLTUzOCw3ICs1MzgsNyBAQCB2b2lkIEdldEJ5U3RhdHVzOjp2aXNpdEFnZ3JlZ2F0
ZShTbG90VmlzCiAgICAgICAgIHZhcmlhbnQudmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7CiB9CiAK
LXZvaWQgR2V0QnlTdGF0dXM6Om1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordm9p
ZCBHZXRCeVN0YXR1czo6bWFya0lmQ2hlYXAoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikK
IHsKICAgICBmb3IgKEdldEJ5SWRWYXJpYW50JiB2YXJpYW50IDogbV92YXJpYW50cykKICAgICAg
ICAgdmFyaWFudC5tYXJrSWZDaGVhcCh2aXNpdG9yKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9HZXRCeVN0YXR1cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9HZXRCeVN0YXR1cy5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlTdGF0dXMuaAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTExOCw4ICsxMTgsOCBAQCBwdWJsaWM6CiAgICAgSlNNb2R1bGVFbnZpcm9ubWVudCogbW9k
dWxlRW52aXJvbm1lbnQoKSBjb25zdCB7IHJldHVybiBtX21vZHVsZU5hbWVzcGFjZURhdGEtPm1f
bW9kdWxlRW52aXJvbm1lbnQ7IH0KICAgICBTY29wZU9mZnNldCBzY29wZU9mZnNldCgpIGNvbnN0
IHsgcmV0dXJuIG1fbW9kdWxlTmFtZXNwYWNlRGF0YS0+bV9zY29wZU9mZnNldDsgfQogICAgIAot
ICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImKTsKLSAgICB2b2lkIG1hcmtJZkNo
ZWFwKFNsb3RWaXNpdG9yJik7CisgICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShBYnN0cmFjdFNsb3RW
aXNpdG9yJik7CisgICAgdm9pZCBtYXJrSWZDaGVhcChBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAg
ICAgYm9vbCBmaW5hbGl6ZShWTSYpOyAvLyBSZXR1cm4gdHJ1ZSBpZiB0aGlzIGdldHMgdG8gbGl2
ZS4KIAogICAgIGJvb2wgYXBwZW5kVmFyaWFudChjb25zdCBHZXRCeUlkVmFyaWFudCYpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luQnlJZFN0YXR1cy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luQnlJZFN0YXR1cy5jcHAJ
KHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbkJ5
SWRTdGF0dXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENvcHly
aWdodCAoQykgMjAxOCBZdXN1a2UgU3V6dWtpIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+LgotICog
Q29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxOC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjUxLDcgKzI1MSw3IEBAIHZvaWQgSW5C
eUlkU3RhdHVzOjpmaWx0ZXIoY29uc3QgU3RydWN0dXIKICAgICAgICAgbV9zdGF0ZSA9IE5vSW5m
b3JtYXRpb247CiB9CiAKLXZvaWQgSW5CeUlkU3RhdHVzOjptYXJrSWZDaGVhcChTbG90VmlzaXRv
ciYgdmlzaXRvcikKK3ZvaWQgSW5CeUlkU3RhdHVzOjptYXJrSWZDaGVhcChBYnN0cmFjdFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQogewogICAgIGZvciAoSW5CeUlkVmFyaWFudCYgdmFyaWFudCA6IG1f
dmFyaWFudHMpCiAgICAgICAgIHZhcmlhbnQubWFya0lmQ2hlYXAodmlzaXRvcik7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5CeUlkU3RhdHVzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luQnlJZFN0YXR1cy5oCShyZXZpc2lv
biAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5CeUlkU3RhdHVz
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAy
MDE4IFl1c3VrZSBTdXp1a2kgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4uCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE4LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0xMDYsNyArMTA2LDcgQEAgcHVibGljOgogICAgIC8vIEF0
dGVtcHRzIHRvIHJlZHVjZSB0aGUgc2V0IG9mIHZhcmlhbnRzIHRvIGZpdCB0aGUgZ2l2ZW4gc3Ry
dWN0dXJlIHNldC4gVGhpcyBtYXkgYmUgYXBwcm94aW1hdGUuCiAgICAgdm9pZCBmaWx0ZXIoY29u
c3QgU3RydWN0dXJlU2V0Jik7CiAgICAgCi0gICAgdm9pZCBtYXJrSWZDaGVhcChTbG90VmlzaXRv
ciYpOworICAgIHZvaWQgbWFya0lmQ2hlYXAoQWJzdHJhY3RTbG90VmlzaXRvciYpOwogICAgIGJv
b2wgZmluYWxpemUoVk0mKTsKIAogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luQnlJZFZhcmlhbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbkJ5SWRWYXJpYW50
LmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0luQnlJZFZhcmlhbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAq
IENvcHlyaWdodCAoQykgMjAxOCBZdXN1a2UgU3V6dWtpIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+
LgotICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxOC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjQsNyArNjQsNyBAQCBib29s
IEluQnlJZFZhcmlhbnQ6OmF0dGVtcHRUb01lcmdlKGNvbnN0CiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKLXZvaWQgSW5CeUlkVmFyaWFudDo6bWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImIHZpc2l0b3Ip
Cit2b2lkIEluQnlJZFZhcmlhbnQ6Om1hcmtJZkNoZWFwKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZp
c2l0b3IpCiB7CiAgICAgbV9zdHJ1Y3R1cmVTZXQubWFya0lmQ2hlYXAodmlzaXRvcik7CiB9Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5CeUlkVmFyaWFudC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbkJ5SWRWYXJpYW50LmgJ
KHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbkJ5
SWRWYXJpYW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogQ29weXJp
Z2h0IChDKSAyMDE4IFl1c3VrZSBTdXp1a2kgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4uCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE4LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01Nyw3ICs1Nyw3IEBAIHB1YmxpYzoKIAog
ICAgIGJvb2wgYXR0ZW1wdFRvTWVyZ2UoY29uc3QgSW5CeUlkVmFyaWFudCYgb3RoZXIpOwogICAg
IAotICAgIHZvaWQgbWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImKTsKKyAgICB2b2lkIG1hcmtJZkNo
ZWFwKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKICAgICBib29sIGZpbmFsaXplKFZNJik7CiAKICAg
ICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9JbnRlcm5hbEZ1bmN0aW9uQWxsb2NhdGlvblByb2ZpbGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW50ZXJuYWxGdW5jdGlvbkFs
bG9jYXRpb25Qcm9maWxlLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9JbnRlcm5hbEZ1bmN0aW9uQWxsb2NhdGlvblByb2ZpbGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTM5LDcgKzM5LDcgQEAgcHVibGljOgogICAgIFN0cnVjdHVyZSogY3JlYXRl
QWxsb2NhdGlvblN0cnVjdHVyZUZyb21CYXNlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU0NlbGwq
IG93bmVyLCBKU09iamVjdCogcHJvdG90eXBlLCBTdHJ1Y3R1cmUqIGJhc2UpOwogCiAgICAgdm9p
ZCBjbGVhcigpIHsgbV9zdHJ1Y3R1cmUuY2xlYXIoKTsgfQotICAgIHZvaWQgdmlzaXRBZ2dyZWdh
dGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsgdmlzaXRvci5hcHBlbmQobV9zdHJ1Y3R1cmUpOyB9
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCB2aXNpdEFnZ3JlZ2F0ZShWaXNp
dG9yJiB2aXNpdG9yKSB7IHZpc2l0b3IuYXBwZW5kKG1fc3RydWN0dXJlKTsgfQogCiBwcml2YXRl
OgogICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1fc3RydWN0dXJlOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09iamVjdEFsbG9jYXRpb25Qcm9maWxlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09iamVjdEFsbG9jYXRpb25Q
cm9maWxlLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9PYmplY3RBbGxvY2F0aW9uUHJvZmlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjQsNyAr
NjQsOCBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIEFTU0VSVChpc051bGwoKSk7CiAgICAgfQogCi0g
ICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYgdmlzaXRvcikKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBWaXNpdG9yPgorICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoVmlzaXRvciYgdmlz
aXRvcikKICAgICB7CiAgICAgICAgIHZpc2l0b3IuYXBwZW5kKG1fc3RydWN0dXJlKTsKICAgICB9
CkBAIC0xMTAsNyArMTExLDggQEAgcHVibGljOgogICAgICAgICBBU1NFUlQoaXNOdWxsKCkpOwog
ICAgIH0KIAotICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KKyAgICB2b2lkIHZpc2l0QWdncmVnYXRlKFZp
c2l0b3ImIHZpc2l0b3IpCiAgICAgewogICAgICAgICBCYXNlOjp2aXNpdEFnZ3JlZ2F0ZSh2aXNp
dG9yKTsKICAgICAgICAgdmlzaXRvci5hcHBlbmQobV9wcm90b3R5cGUpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3Bw
CShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9s
eW1vcnBoaWNBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxNC0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzU4LDcgKzM1OCw3IEBAIGJv
b2wgUG9seW1vcnBoaWNBY2Nlc3M6OnZpc2l0V2VhayhWTSYgdm0KICAgICByZXR1cm4gdHJ1ZTsK
IH0KIAotYm9vbCBQb2x5bW9ycGhpY0FjY2Vzczo6cHJvcGFnYXRlVHJhbnNpdGlvbnMoU2xvdFZp
c2l0b3ImIHZpc2l0b3IpIGNvbnN0Citib29sIFBvbHltb3JwaGljQWNjZXNzOjpwcm9wYWdhdGVU
cmFuc2l0aW9ucyhBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBjb25zdAogewogICAgIGJv
b2wgcmVzdWx0ID0gdHJ1ZTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZSgpOyAr
K2kpCkBAIC0zNjYsNyArMzY2LDcgQEAgYm9vbCBQb2x5bW9ycGhpY0FjY2Vzczo6cHJvcGFnYXRl
VHJhbnNpdAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQgUG9seW1vcnBoaWNBY2Nlc3M6
OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBQb2x5bW9ycGhpY0Fj
Y2Vzczo6dmlzaXRBZ2dyZWdhdGUoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZSgpOyArK2kpCiAgICAgICAgIGF0KGkpLnZp
c2l0QWdncmVnYXRlKHZpc2l0b3IpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1BvbHltb3JwaGljQWNjZXNzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNC0yMDIwIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMTUyLDE0ICsxNTIsMTQgQEAgcHVibGljOgogICAgIGNvbnN0IEFjY2Vzc0Nh
c2UmIGF0KHVuc2lnbmVkIGkpIGNvbnN0IHsgcmV0dXJuICptX2xpc3RbaV07IH0KICAgICBjb25z
dCBBY2Nlc3NDYXNlJiBvcGVyYXRvcltdKHVuc2lnbmVkIGkpIGNvbnN0IHsgcmV0dXJuICptX2xp
c3RbaV07IH0KIAotICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImKTsKKyAgICB2
b2lkIHZpc2l0QWdncmVnYXRlKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKIAogICAgIC8vIElmIHRo
aXMgcmV0dXJucyBmYWxzZSB0aGVuIHdlIGFyZSByZXF1ZXN0aW5nIGEgcmVzZXQgb2YgdGhlIG93
bmluZyBTdHJ1Y3R1cmVTdHViSW5mby4KICAgICBib29sIHZpc2l0V2VhayhWTSYpIGNvbnN0Owog
ICAgIAogICAgIC8vIFRoaXMgcmV0dXJucyB0cnVlIGlmIGl0IGhhcyBtYXJrZWQgZXZlcnl0aGlu
ZyBpdCB3aWxsIGV2ZXIgbWFya2VkLiBUaGlzIGNhbiBiZSB1c2VkIGFzIGFuCiAgICAgLy8gb3B0
aW1pemF0aW9uIHRvIHRoZW4gYXZvaWQgY2FsbGluZyB0aGlzIG1ldGhvZCBhZ2FpbiBkdXJpbmcg
dGhlIGZpeHBvaW50LgotICAgIGJvb2wgcHJvcGFnYXRlVHJhbnNpdGlvbnMoU2xvdFZpc2l0b3Im
KSBjb25zdDsKKyAgICBib29sIHByb3BhZ2F0ZVRyYW5zaXRpb25zKEFic3RyYWN0U2xvdFZpc2l0
b3ImKSBjb25zdDsKIAogICAgIHZvaWQgYWJvdXRUb0RpZSgpOwogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuY3BwCShyZXZpc2lvbiAy
NzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDEyLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEyLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0zOTYsNyArMzk2LDcgQEAgUHV0QnlJZFN0YXR1cyBQdXRC
eUlkU3RhdHVzOjpzbG93VmVyc2lvbgogICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKG1ha2VzQ2Fs
bHMoKSA/IE1ha2VzQ2FsbHMgOiBUYWtlc1Nsb3dQYXRoKTsKIH0KIAotdm9pZCBQdXRCeUlkU3Rh
dHVzOjptYXJrSWZDaGVhcChTbG90VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgUHV0QnlJZFN0YXR1
czo6bWFya0lmQ2hlYXAoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBmb3Ig
KFB1dEJ5SWRWYXJpYW50JiB2YXJpYW50IDogbV92YXJpYW50cykKICAgICAgICAgdmFyaWFudC5t
YXJrSWZDaGVhcCh2aXNpdG9yKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9QdXRCeUlkU3RhdHVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1B1dEJ5SWRTdGF0dXMuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxOCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEx
Nyw3ICsxMTcsNyBAQCBwdWJsaWM6CiAgICAgY29uc3QgUHV0QnlJZFZhcmlhbnQmIGF0KHNpemVf
dCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV92YXJpYW50c1tpbmRleF07IH0KICAgICBjb25zdCBQ
dXRCeUlkVmFyaWFudCYgb3BlcmF0b3JbXShzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIGF0
KGluZGV4KTsgfQogICAgIAotICAgIHZvaWQgbWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImKTsKKyAg
ICB2b2lkIG1hcmtJZkNoZWFwKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKICAgICBib29sIGZpbmFs
aXplKFZNJik7CiAgICAgCiAgICAgdm9pZCBtZXJnZShjb25zdCBQdXRCeUlkU3RhdHVzJik7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkVmFyaWFu
dC5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9QdXRCeUlkVmFyaWFudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNjIsNyArMjYyLDcgQEAg
Ym9vbCBQdXRCeUlkVmFyaWFudDo6YXR0ZW1wdFRvTWVyZ2VUcmFucwogICAgIHJldHVybiB0cnVl
OwogfQogCi12b2lkIFB1dEJ5SWRWYXJpYW50OjptYXJrSWZDaGVhcChTbG90VmlzaXRvciYgdmlz
aXRvcikKK3ZvaWQgUHV0QnlJZFZhcmlhbnQ6Om1hcmtJZkNoZWFwKEFic3RyYWN0U2xvdFZpc2l0
b3ImIHZpc2l0b3IpCiB7CiAgICAgbV9vbGRTdHJ1Y3R1cmUubWFya0lmQ2hlYXAodmlzaXRvcik7
CiAgICAgaWYgKG1fbmV3U3RydWN0dXJlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkVmFyaWFudC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNC0yMDE4IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDIxIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMTMyLDcgKzEzMiw3IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgYXR0ZW1wdFRvTWVyZ2Uo
Y29uc3QgUHV0QnlJZFZhcmlhbnQmIG90aGVyKTsKICAgICAKLSAgICB2b2lkIG1hcmtJZkNoZWFw
KFNsb3RWaXNpdG9yJik7CisgICAgdm9pZCBtYXJrSWZDaGVhcChBYnN0cmFjdFNsb3RWaXNpdG9y
Jik7CiAgICAgYm9vbCBmaW5hbGl6ZShWTSYpOwogICAgIAogICAgIHZvaWQgZHVtcChQcmludFN0
cmVhbSYpIGNvbnN0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1JlY29y
ZGVkU3RhdHVzZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9SZWNvcmRlZFN0YXR1c2VzLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1JlY29yZGVkU3RhdHVzZXMuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMDIsNyArMTAyLDcgQEAgU2V0UHJpdmF0ZUJyYW5kU3RhdHVzKiBSZWNvcmRlZFN0YXR1
c2VzOgogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQgUmVjb3JkZWRTdGF0dXNlczo6dmlz
aXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIFJlY29yZGVkU3RhdHVzZXM6
OnZpc2l0QWdncmVnYXRlKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgZm9y
IChhdXRvJiBwYWlyIDogZ2V0cykKICAgICAgICAgcGFpci5zZWNvbmQtPnZpc2l0QWdncmVnYXRl
KHZpc2l0b3IpOwpAQCAtMTE0LDcgKzExNCw3IEBAIHZvaWQgUmVjb3JkZWRTdGF0dXNlczo6dmlz
aXRBZ2dyZWdhdGUoU2wKICAgICAgICAgcGFpci5zZWNvbmQtPnZpc2l0QWdncmVnYXRlKHZpc2l0
b3IpOwogfQogCi12b2lkIFJlY29yZGVkU3RhdHVzZXM6Om1hcmtJZkNoZWFwKFNsb3RWaXNpdG9y
JiB2aXNpdG9yKQordm9pZCBSZWNvcmRlZFN0YXR1c2VzOjptYXJrSWZDaGVhcChBYnN0cmFjdFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGZvciAoYXV0byYgcGFpciA6IGdldHMpCiAgICAg
ICAgIHBhaXIuc2Vjb25kLT5tYXJrSWZDaGVhcCh2aXNpdG9yKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9SZWNvcmRlZFN0YXR1c2VzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1JlY29yZGVkU3RhdHVzZXMuaAkocmV2aXNpb24g
MjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1JlY29yZGVkU3RhdHVz
ZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTgtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTgtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU0LDggKzU0LDggQEAgc3RydWN0IFJlY29yZGVkU3Rh
dHVzZXMgewogICAgIENoZWNrUHJpdmF0ZUJyYW5kU3RhdHVzKiBhZGRDaGVja1ByaXZhdGVCcmFu
ZFN0YXR1cyhjb25zdCBDb2RlT3JpZ2luJiwgY29uc3QgQ2hlY2tQcml2YXRlQnJhbmRTdGF0dXMm
KTsKICAgICBTZXRQcml2YXRlQnJhbmRTdGF0dXMqIGFkZFNldFByaXZhdGVCcmFuZFN0YXR1cyhj
b25zdCBDb2RlT3JpZ2luJiwgY29uc3QgU2V0UHJpdmF0ZUJyYW5kU3RhdHVzJik7CiAgICAgCi0g
ICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYpOwotICAgIHZvaWQgbWFya0lmQ2hl
YXAoU2xvdFZpc2l0b3ImKTsKKyAgICB2b2lkIHZpc2l0QWdncmVnYXRlKEFic3RyYWN0U2xvdFZp
c2l0b3ImKTsKKyAgICB2b2lkIG1hcmtJZkNoZWFwKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKICAg
ICAKICAgICB2b2lkIGZpbmFsaXplV2l0aG91dERlbGV0aW5nKFZNJik7CiAgICAgdm9pZCBmaW5h
bGl6ZShWTSYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NldFByaXZh
dGVCcmFuZFN0YXR1cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1NldFByaXZhdGVCcmFuZFN0YXR1cy5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TZXRQcml2YXRlQnJhbmRTdGF0dXMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yMzUsMTMgKzIzNSwxMyBAQCBDYWNoZWFibGVJZGVudGlmaWVyIFNl
dFByaXZhdGVCcmFuZFN0YXR1CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotdm9pZCBTZXRQcml2
YXRlQnJhbmRTdGF0dXM6OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordm9p
ZCBTZXRQcml2YXRlQnJhbmRTdGF0dXM6OnZpc2l0QWdncmVnYXRlKEFic3RyYWN0U2xvdFZpc2l0
b3ImIHZpc2l0b3IpCiB7CiAgICAgZm9yIChTZXRQcml2YXRlQnJhbmRWYXJpYW50JiB2YXJpYW50
IDogbV92YXJpYW50cykKICAgICAgICAgdmFyaWFudC52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsK
IH0KIAotdm9pZCBTZXRQcml2YXRlQnJhbmRTdGF0dXM6Om1hcmtJZkNoZWFwKFNsb3RWaXNpdG9y
JiB2aXNpdG9yKQordm9pZCBTZXRQcml2YXRlQnJhbmRTdGF0dXM6Om1hcmtJZkNoZWFwKEFic3Ry
YWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgZm9yIChTZXRQcml2YXRlQnJhbmRWYXJp
YW50JiB2YXJpYW50IDogbV92YXJpYW50cykKICAgICAgICAgdmFyaWFudC5tYXJrSWZDaGVhcCh2
aXNpdG9yKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TZXRQcml2YXRl
QnJhbmRTdGF0dXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvU2V0UHJpdmF0ZUJyYW5kU3RhdHVzLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TZXRQcml2YXRlQnJhbmRTdGF0dXMuaAkod29ya2luZyBj
b3B5KQpAQCAtODMsOCArODMsOCBAQCBwdWJsaWM6CiAgICAgLy8gQXR0ZW1wdHMgdG8gcmVkdWNl
IHRoZSBzZXQgb2YgdmFyaWFudHMgdG8gZml0IHRoZSBnaXZlbiBzdHJ1Y3R1cmUgc2V0LiBUaGlz
IG1heSBiZSBhcHByb3hpbWF0ZS4KICAgICB2b2lkIGZpbHRlcihjb25zdCBTdHJ1Y3R1cmVTZXQm
KTsKIAotICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImKTsKLSAgICB2b2lkIG1h
cmtJZkNoZWFwKFNsb3RWaXNpdG9yJik7CisgICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShBYnN0cmFj
dFNsb3RWaXNpdG9yJik7CisgICAgdm9pZCBtYXJrSWZDaGVhcChBYnN0cmFjdFNsb3RWaXNpdG9y
Jik7CiAgICAgYm9vbCBmaW5hbGl6ZShWTSYpOwogCiAgICAgYm9vbCBhcHBlbmRWYXJpYW50KGNv
bnN0IFNldFByaXZhdGVCcmFuZFZhcmlhbnQmKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9TZXRQcml2YXRlQnJhbmRWYXJpYW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU2V0UHJpdmF0ZUJyYW5kVmFyaWFudC5jcHAJKHJl
dmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TZXRQcml2
YXRlQnJhbmRWYXJpYW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTQsNyArNTQsNyBAQCBib29s
IFNldFByaXZhdGVCcmFuZFZhcmlhbnQ6OmF0dGVtcHRUb01lCiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKLXZvaWQgU2V0UHJpdmF0ZUJyYW5kVmFyaWFudDo6bWFya0lmQ2hlYXAoU2xvdFZpc2l0b3Im
IHZpc2l0b3IpCit2b2lkIFNldFByaXZhdGVCcmFuZFZhcmlhbnQ6Om1hcmtJZkNoZWFwKEFic3Ry
YWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgaWYgKG1fb2xkU3RydWN0dXJlKQogICAg
ICAgICBtX29sZFN0cnVjdHVyZS0+bWFya0lmQ2hlYXAodmlzaXRvcik7CkBAIC03MSw3ICs3MSw3
IEBAIGJvb2wgU2V0UHJpdmF0ZUJyYW5kVmFyaWFudDo6ZmluYWxpemUoVk0KICAgICByZXR1cm4g
dHJ1ZTsKIH0KIAotdm9pZCBTZXRQcml2YXRlQnJhbmRWYXJpYW50Ojp2aXNpdEFnZ3JlZ2F0ZShT
bG90VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgU2V0UHJpdmF0ZUJyYW5kVmFyaWFudDo6dmlzaXRB
Z2dyZWdhdGUoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBtX2lkZW50aWZp
ZXIudmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvU2V0UHJpdmF0ZUJyYW5kVmFyaWFudC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TZXRQcml2YXRlQnJhbmRWYXJpYW50LmgJKHJldmlz
aW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TZXRQcml2YXRl
QnJhbmRWYXJpYW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDggKzQ1LDggQEAgcHVibGljOgog
CiAgICAgYm9vbCBhdHRlbXB0VG9NZXJnZShjb25zdCBTZXRQcml2YXRlQnJhbmRWYXJpYW50JiBv
dGhlcik7CiAKLSAgICB2b2lkIHZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJik7Ci0gICAgdm9p
ZCBtYXJrSWZDaGVhcChTbG90VmlzaXRvciYpOworICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoQWJz
dHJhY3RTbG90VmlzaXRvciYpOworICAgIHZvaWQgbWFya0lmQ2hlYXAoQWJzdHJhY3RTbG90Vmlz
aXRvciYpOwogICAgIGJvb2wgZmluYWxpemUoVk0mKTsKIAogICAgIHZvaWQgZHVtcChQcmludFN0
cmVhbSYpIGNvbnN0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVj
dHVyZVNldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1N0cnVjdHVyZVNldC5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNC0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzEsNyAr
MzEsNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotdm9pZCBTdHJ1Y3R1cmVTZXQ6Om1hcmtJZkNo
ZWFwKFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBjb25zdAordm9pZCBTdHJ1Y3R1cmVTZXQ6Om1hcmtJ
ZkNoZWFwKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0CiB7CiAgICAgZm9yIChT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSA6ICp0aGlzKQogICAgICAgICBzdHJ1Y3R1cmUtPm1hcmtJZkNo
ZWFwKHZpc2l0b3IpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVj
dHVyZVNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9T
dHJ1Y3R1cmVTZXQuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1N0cnVjdHVyZVNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMS0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTQsNyArNTQsNyBA
QCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBvbmx5RW50cnkoKTsKICAgICB9CiAKLSAgICB2b2lk
IG1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJikgY29uc3Q7CisgICAgdm9pZCBtYXJrSWZDaGVhcChB
YnN0cmFjdFNsb3RWaXNpdG9yJikgY29uc3Q7CiAgICAgYm9vbCBpc1N0aWxsQWxpdmUoVk0mKSBj
b25zdDsKICAgICAKICAgICB2b2lkIGR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mLCBEdW1wQ29u
dGV4dCopIGNvbnN0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVj
dHVyZVN0dWJJbmZvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOC0yMDIwIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMjk2LDcgKzI5Niw3IEBAIHZvaWQgU3RydWN0dXJlU3R1YkluZm86OnJlc2V0KGNv
bnN0IENvbmMKICAgICBzZXRDYWNoZVR5cGUobG9ja2VyLCBDYWNoZVR5cGU6OlVuc2V0KTsKIH0K
IAotdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImIHZp
c2l0b3IpCit2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjp2aXNpdEFnZ3JlZ2F0ZShBYnN0cmFjdFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHsKICAgICAgICAgYXV0byBsb2NrZXIgPSBob2xk
TG9jayhtX2J1ZmZlcmVkU3RydWN0dXJlc0xvY2spOwpAQCAtMzUyLDcgKzM1Miw3IEBAIHZvaWQg
U3RydWN0dXJlU3R1YkluZm86OnZpc2l0V2Vha1JlZmVyZW4KICAgICByZXNldEJ5R0MgPSB0cnVl
OwogfQogCi1ib29sIFN0cnVjdHVyZVN0dWJJbmZvOjpwcm9wYWdhdGVUcmFuc2l0aW9ucyhTbG90
VmlzaXRvciYgdmlzaXRvcikKK2Jvb2wgU3RydWN0dXJlU3R1YkluZm86OnByb3BhZ2F0ZVRyYW5z
aXRpb25zKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgc3dpdGNoIChtX2Nh
Y2hlVHlwZSkgewogICAgIGNhc2UgQ2FjaGVUeXBlOjpVbnNldDoKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCShyZXZpc2lv
biAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1
YkluZm8uaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDgtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMDgtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTkzLDE0ICs5MywxNCBAQCBwdWJsaWM6CiAgICAg
dm9pZCBkZXJlZigpOwogICAgIHZvaWQgYWJvdXRUb0RpZSgpOwogCi0gICAgdm9pZCB2aXNpdEFn
Z3JlZ2F0ZShTbG90VmlzaXRvciYpOworICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoQWJzdHJhY3RT
bG90VmlzaXRvciYpOwogCiAgICAgLy8gQ2hlY2sgaWYgdGhlIHN0dWIgaGFzIHdlYWsgcmVmZXJl
bmNlcyB0aGF0IGFyZSBkZWFkLiBJZiBpdCBkb2VzLCB0aGVuIGl0IHJlc2V0cyBpdHNlbGYsCiAg
ICAgLy8gZWl0aGVyIGVudGlyZWx5IG9yIGp1c3QgZW5vdWdoIHRvIGVuc3VyZSB0aGF0IHRob3Nl
IGRlYWQgcG9pbnRlcnMgZG9uJ3QgZ2V0IHVzZWQgYW55bW9yZS4KICAgICB2b2lkIHZpc2l0V2Vh
a1JlZmVyZW5jZXMoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyQmFzZSYsIENvZGVCbG9jayopOwog
ICAgIAogICAgIC8vIFRoaXMgcmV0dXJucyB0cnVlIGlmIGl0IGhhcyBtYXJrZWQgZXZlcnl0aGlu
ZyB0aGF0IGl0IHdpbGwgZXZlciBtYXJrLgotICAgIGJvb2wgcHJvcGFnYXRlVHJhbnNpdGlvbnMo
U2xvdFZpc2l0b3ImKTsKKyAgICBib29sIHByb3BhZ2F0ZVRyYW5zaXRpb25zKEFic3RyYWN0U2xv
dFZpc2l0b3ImKTsKICAgICAgICAgCiAgICAgU3R1YkluZm9TdW1tYXJ5IHN1bW1hcnkoVk0mKSBj
b25zdDsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Vbmxpbmtl
ZENvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxOSBBcHBsZSBJ
bmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMSBBcHBs
ZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTc1LDcgKzc1LDggQEAgVW5saW5rZWRDb2RlQmxvY2s6OlVubGlua2VkQ29kZUJsb2Nr
KFZNJgogICAgIH0KIH0KIAotdm9pZCBVbmxpbmtlZENvZGVCbG9jazo6dmlzaXRDaGlsZHJlbihK
U0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlz
aXRvcj4KK3ZvaWQgVW5saW5rZWRDb2RlQmxvY2s6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCog
Y2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBVbmxpbmtlZENvZGVCbG9jayogdGhpc09i
amVjdCA9IGpzQ2FzdDxVbmxpbmtlZENvZGVCbG9jayo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19P
QkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTk0LDYgKzk1LDggQEAgdm9p
ZCBVbmxpbmtlZENvZGVCbG9jazo6dmlzaXRDaGlsZHJlbihKUwogICAgIHZpc2l0b3IucmVwb3J0
RXh0cmFNZW1vcnlWaXNpdGVkKGV4dHJhTWVtb3J5KTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxE
UkVOKFVubGlua2VkQ29kZUJsb2NrKTsKKwogc2l6ZV90IFVubGlua2VkQ29kZUJsb2NrOjplc3Rp
bWF0ZWRTaXplKEpTQ2VsbCogY2VsbCwgVk0mIHZtKQogewogICAgIFVubGlua2VkQ29kZUJsb2Nr
KiB0aGlzT2JqZWN0ID0ganNDYXN0PFVubGlua2VkQ29kZUJsb2NrKj4oY2VsbCk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2su
aAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Vu
bGlua2VkQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDEyLTIwMTkgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjEgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00MzEsNyArNDMxLDcgQEAgcHJp
dmF0ZToKICAgICBSZWZDb3VudGVkQXJyYXk8RXhwcmVzc2lvblJhbmdlSW5mbz4gbV9leHByZXNz
aW9uSW5mbzsKIAogcHJvdGVjdGVkOgotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlND
ZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogICAgIHN0
YXRpYyBzaXplX3QgZXN0aW1hdGVkU2l6ZShKU0NlbGwqLCBWTSYpOwogCiBwdWJsaWM6CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFi
bGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Vbmxp
bmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIw
MTkgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEy
LTIwMjEgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0xNDYsNyArMTQ2LDggQEAgdm9pZCBVbmxpbmtlZEZ1bmN0aW9uRXhl
Y3V0YWJsZTo6ZGVzdHJveQogICAgIHN0YXRpY19jYXN0PFVubGlua2VkRnVuY3Rpb25FeGVjdXRh
YmxlKj4oY2VsbCktPn5VbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSgpOwogfQogCi12b2lkIFVu
bGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xv
dFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBVbmxp
bmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBW
aXNpdG9yJiB2aXNpdG9yKQogewogICAgIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiB0aGlz
T2JqZWN0ID0ganNDYXN0PFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKj4oY2VsbCk7CiAgICAg
QVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtMTY5LDYg
KzE3MCw4IEBAIHZvaWQgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU6OnZpc2l0Q2gKICAgICB9
CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSk7
CisKIFNvdXJjZUNvZGUgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU6OmxpbmtlZFNvdXJjZUNv
ZGUoY29uc3QgU291cmNlQ29kZSYgcGFzc2VkUGFyZW50U291cmNlKSBjb25zdAogewogICAgIGNv
bnN0IFNvdXJjZUNvZGUmIHBhcmVudFNvdXJjZSA9ICFtX2lzQnVpbHRpbkRlZmF1bHRDbGFzc0Nv
bnN0cnVjdG9yID8gcGFzc2VkUGFyZW50U291cmNlIDogQnVpbHRpbkV4ZWN1dGFibGVzOjpkZWZh
dWx0Q29uc3RydWN0b3JTb3VyY2VDb2RlKGNvbnN0cnVjdG9yS2luZCgpKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZEZ1bmN0
aW9uRXhlY3V0YWJsZS5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUuaAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxOSBBcHBsZSBJbmMu
IEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMSBBcHBsZSBJ
bmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTI0Miw3ICsyNDIsNyBAQCBwcml2YXRlOgogICAgIFVubGlua2VkRnVuY3Rpb25FeGVjdXRh
YmxlKFZNJiwgU3RydWN0dXJlKiwgY29uc3QgU291cmNlQ29kZSYsIEZ1bmN0aW9uTWV0YWRhdGFO
b2RlKiwgVW5saW5rZWRGdW5jdGlvbktpbmQsIENvbnN0cnVjdEFiaWxpdHksIEpTUGFyc2VyU2Ny
aXB0TW9kZSwgUmVmUHRyPFREWkVudmlyb25tZW50TGluaz4sIE9wdGlvbmFsPFByaXZhdGVOYW1l
RW52aXJvbm1lbnQ+LCBKU0M6OkRlcml2ZWRDb250ZXh0VHlwZSwgSlNDOjpOZWVkc0NsYXNzRmll
bGRJbml0aWFsaXplciwgUHJpdmF0ZUJyYW5kUmVxdWlyZW1lbnQsIGJvb2wgaXNCdWlsdGluRGVm
YXVsdENsYXNzQ29uc3RydWN0b3IpOwogICAgIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKERl
Y29kZXImLCBjb25zdCBDYWNoZWRGdW5jdGlvbkV4ZWN1dGFibGUmKTsKIAotICAgIHN0YXRpYyB2
b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJ
U0lUX0NISUxEUkVOOwogCiAgICAgdm9pZCBkZWNvZGVDYWNoZWRDb2RlQmxvY2tzKFZNJik7CiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlclNjb3BlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXJTY29w
ZS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dl
ci9EZWJ1Z2dlclNjb3BlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU1LDcgKzU1LDggQEAgdm9p
ZCBEZWJ1Z2dlclNjb3BlOjpmaW5pc2hDcmVhdGlvbihWTSYgdgogICAgIEJhc2U6OmZpbmlzaENy
ZWF0aW9uKHZtKTsKIH0KIAotdm9pZCBEZWJ1Z2dlclNjb3BlOjp2aXNpdENoaWxkcmVuKEpTQ2Vs
bCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
Pgordm9pZCBEZWJ1Z2dlclNjb3BlOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZp
c2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgRGVidWdnZXJTY29wZSogdGhpc09iamVjdCA9IGpzQ2Fz
dDxEZWJ1Z2dlclNjb3BlKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0
aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNjUsNiArNjYsOCBAQCB2b2lkIERlYnVnZ2VyU2NvcGU6
OnZpc2l0Q2hpbGRyZW4oSlNDZWxsCiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9u
ZXh0KTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKERlYnVnZ2VyU2NvcGUpOworCiBTdHJp
bmcgRGVidWdnZXJTY29wZTo6Y2xhc3NOYW1lKGNvbnN0IEpTT2JqZWN0KiBvYmplY3QsIFZNJiB2
bSkKIHsKICAgICBjb25zdCBEZWJ1Z2dlclNjb3BlKiBzY29wZSA9IGpzQ2FzdDxjb25zdCBEZWJ1
Z2dlclNjb3BlKj4ob2JqZWN0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dl
ci9EZWJ1Z2dlclNjb3BlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rl
YnVnZ2VyL0RlYnVnZ2VyU2NvcGUuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyU2NvcGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAyMCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAyMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ2
LDcgKzQ2LDcgQEAgcHVibGljOgogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIERlYnVn
Z2VyU2NvcGUqIGNyZWF0ZShWTSYgdm0sIEpTU2NvcGUqIHNjb3BlKTsKIAotICAgIHN0YXRpYyB2
b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJ
U0lUX0NISUxEUkVOOwogICAgIHN0YXRpYyBTdHJpbmcgY2xhc3NOYW1lKGNvbnN0IEpTT2JqZWN0
KiwgVk0mKTsKICAgICBzdGF0aWMgU3RyaW5nIHRvU3RyaW5nTmFtZShjb25zdCBKU09iamVjdCos
IEpTR2xvYmFsT2JqZWN0Kik7CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpT
T2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkVHJhbnNpdGlvbnMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFRyYW5z
aXRpb25zLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdEZXNpcmVkVHJhbnNpdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTIsNyArNTIs
NyBAQCB2b2lkIERlc2lyZWRUcmFuc2l0aW9uOjpyZWFsbHlBZGQoVk0mIHZtCiAgICAgICAgICAg
ICBtX29sZFN0cnVjdHVyZSwgbV9uZXdTdHJ1Y3R1cmUpKTsKIH0KIAotdm9pZCBEZXNpcmVkVHJh
bnNpdGlvbjo6dmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgRGVzaXJl
ZFRyYW5zaXRpb246OnZpc2l0Q2hpbGRyZW4oQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikK
IHsKICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKG1fY29kZU9yaWdpbk93bmVyKTsKICAg
ICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKG1fb2xkU3RydWN0dXJlKTsKQEAgLTc4LDcgKzc4
LDcgQEAgdm9pZCBEZXNpcmVkVHJhbnNpdGlvbnM6OnJlYWxseUFkZChWTSYgdgogICAgICAgICBt
X3RyYW5zaXRpb25zW2ldLnJlYWxseUFkZCh2bSwgY29tbW9uKTsKIH0KIAotdm9pZCBEZXNpcmVk
VHJhbnNpdGlvbnM6OnZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIERl
c2lyZWRUcmFuc2l0aW9uczo6dmlzaXRDaGlsZHJlbihBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNp
dG9yKQogewogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3RyYW5zaXRpb25zLnNpemUo
KTsgaSsrKQogICAgICAgICBtX3RyYW5zaXRpb25zW2ldLnZpc2l0Q2hpbGRyZW4odmlzaXRvcik7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRUcmFuc2l0aW9ucy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFRyYW5z
aXRpb25zLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHRGVzaXJlZFRyYW5zaXRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDYsOCArNDYsNyBA
QCBwdWJsaWM6CiAgICAgRGVzaXJlZFRyYW5zaXRpb24oQ29kZUJsb2NrKiwgQ29kZUJsb2NrKiBj
b2RlT3JpZ2luT3duZXIsIFN0cnVjdHVyZSosIFN0cnVjdHVyZSopOwogCiAgICAgdm9pZCByZWFs
bHlBZGQoVk0mLCBDb21tb25EYXRhKik7Ci0gICAgCi0gICAgdm9pZCB2aXNpdENoaWxkcmVuKFNs
b3RWaXNpdG9yJik7CisgICAgdm9pZCB2aXNpdENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0b3Im
KTsKIAogcHJpdmF0ZToKICAgICBDb2RlQmxvY2sqIG1fY29kZUJsb2NrOwpAQCAtNjMsNyArNjIs
NyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGFkZExhemlseShDb2RlQmxvY2sqLCBDb2RlQmxvY2sq
IGNvZGVPcmlnaW5Pd25lciwgU3RydWN0dXJlKiwgU3RydWN0dXJlKik7CiAgICAgdm9pZCByZWFs
bHlBZGQoVk0mLCBDb21tb25EYXRhKik7Ci0gICAgdm9pZCB2aXNpdENoaWxkcmVuKFNsb3RWaXNp
dG9yJik7CisgICAgdm9pZCB2aXNpdENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKIAog
cHJpdmF0ZToKICAgICBWZWN0b3I8RGVzaXJlZFRyYW5zaXRpb24+IG1fdHJhbnNpdGlvbnM7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXZWFrUmVmZXJlbmNlcy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2Vh
a1JlZmVyZW5jZXMuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Rlc2lyZWRXZWFrUmVmZXJlbmNlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC04
Nyw3ICs4Nyw3IEBAIHZvaWQgRGVzaXJlZFdlYWtSZWZlcmVuY2VzOjpyZWFsbHlBZGQoVk0KICAg
ICB9CiB9CiAKLXZvaWQgRGVzaXJlZFdlYWtSZWZlcmVuY2VzOjp2aXNpdENoaWxkcmVuKFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQordm9pZCBEZXNpcmVkV2Vha1JlZmVyZW5jZXM6OnZpc2l0Q2hpbGRy
ZW4oQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBmb3IgKEpTQ2VsbCogdGFy
Z2V0IDogbV9yZWZlcmVuY2VzKQogICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKHRh
cmdldCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXZWFrUmVm
ZXJlbmNlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVz
aXJlZFdlYWtSZWZlcmVuY2VzLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHRGVzaXJlZFdlYWtSZWZlcmVuY2VzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0zMSwxMCArMzEsMTAgQEAKIAogbmFtZXNwYWNlIEpTQyB7IAogCitjbGFzcyBBYnN0cmFjdFNs
b3RWaXNpdG9yOwogY2xhc3MgQ29kZUJsb2NrOwogY2xhc3MgSlNDZWxsOwogY2xhc3MgSlNWYWx1
ZTsKLWNsYXNzIFNsb3RWaXNpdG9yOwogY2xhc3MgVk07CiAKIG5hbWVzcGFjZSBERkcgewpAQCAt
NTIsOCArNTIsOCBAQCBwdWJsaWM6CiAgICAgYm9vbCBjb250YWlucyhKU0NlbGwqKTsKICAgICAK
ICAgICB2b2lkIHJlYWxseUFkZChWTSYsIENvbW1vbkRhdGEqKTsKLSAgICAKLSAgICB2b2lkIHZp
c2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKKworICAgIHZvaWQgdmlzaXRDaGlsZHJlbihBYnN0
cmFjdFNsb3RWaXNpdG9yJik7CiAKIHByaXZhdGU6CiAgICAgQ29kZUJsb2NrKiBtX2NvZGVCbG9j
azsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCShyZXZpc2lvbiAy
NzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTQ0OCw3ICsxNDQ4LDcgQEAgdm9pZCBHcmFwaDo6cmVnaXN0ZXJGcm96ZW5W
YWx1ZXMoKQogICAgIG1fY29kZUJsb2NrLT5jb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRp
b24oKS5zaHJpbmtUb0ZpdCgpOwogfQogCi12b2lkIEdyYXBoOjp2aXNpdENoaWxkcmVuKFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQordm9pZCBHcmFwaDo6dmlzaXRDaGlsZHJlbihBYnN0cmFjdFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQogewogICAgIGZvciAoRnJvemVuVmFsdWUqIHZhbHVlIDogbV9mcm96
ZW5WYWx1ZXMpIHsKICAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZCh2YWx1ZS0+dmFs
dWUoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCShyZXZpc2lvbiAy
NzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLTIwMjAgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0xMDAwLDkgKzEwMDAsOSBAQCBwdWJsaWM6CiAgICAgYm9vbCBjYW5Eb0Zhc3RT
cHJlYWQoTm9kZSosIGNvbnN0IEFic3RyYWN0VmFsdWUmKTsKICAgICAKICAgICB2b2lkIHJlZ2lz
dGVyRnJvemVuVmFsdWVzKCk7Ci0gICAgCi0gICAgdm9pZCB2aXNpdENoaWxkcmVuKFNsb3RWaXNp
dG9yJikgZmluYWw7Ci0gICAgCisKKyAgICB2b2lkIHZpc2l0Q2hpbGRyZW4oQWJzdHJhY3RTbG90
VmlzaXRvciYpIGZpbmFsOworCiAgICAgdm9pZCBsb2dBc3NlcnRpb25GYWlsdXJlKAogICAgICAg
ICBzdGQ6Om51bGxwdHJfdCwgY29uc3QgY2hhciogZmlsZSwgaW50IGxpbmUsIGNvbnN0IGNoYXIq
IGZ1bmN0aW9uLAogICAgICAgICBjb25zdCBjaGFyKiBhc3NlcnRpb24pOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjcyLDkg
KzY3Miw5IEBAIENvbXBpbGF0aW9uS2V5IFBsYW46OmtleSgpCiAgICAgcmV0dXJuIENvbXBpbGF0
aW9uS2V5KG1fY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpLCBtX21vZGUpOwogfQogCi12b2lkIFBs
YW46OmNoZWNrTGl2ZW5lc3NBbmRWaXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQor
dm9pZCBQbGFuOjpjaGVja0xpdmVuZXNzQW5kVmlzaXRDaGlsZHJlbihBYnN0cmFjdFNsb3RWaXNp
dG9yJiB2aXNpdG9yKQogewotICAgIGlmICghaXNLbm93blRvQmVMaXZlRHVyaW5nR0MoKSkKKyAg
ICBpZiAoIWlzS25vd25Ub0JlTGl2ZUR1cmluZ0dDKHZpc2l0b3IpKQogICAgICAgICByZXR1cm47
CiAKICAgICBjbGVhbk11c3RIYW5kbGVWYWx1ZXNJZk5lY2Vzc2FyeSgpOwpAQCAtNzA4LDcgKzcw
OCwyMCBAQCB2b2lkIFBsYW46OmZpbmFsaXplSW5HQygpCiAgICAgbV9yZWNvcmRlZFN0YXR1c2Vz
LmZpbmFsaXplV2l0aG91dERlbGV0aW5nKCptX3ZtKTsKIH0KIAotYm9vbCBQbGFuOjppc0tub3du
VG9CZUxpdmVEdXJpbmdHQygpCitib29sIFBsYW46OmlzS25vd25Ub0JlTGl2ZUR1cmluZ0dDKEFi
c3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgaWYgKG1fc3RhZ2UgPT0gQ2FuY2Vs
bGVkKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCF2aXNpdG9yLmlzTWFya2VkKG1f
Y29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICBpZiAoIXZpc2l0b3IuaXNNYXJrZWQobV9jb2RlQmxvY2stPmFsdGVybmF0aXZlKCkpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCEhbV9wcm9maWxlZERGR0NvZGVCbG9jayAmJiAh
dmlzaXRvci5pc01hcmtlZChtX3Byb2ZpbGVkREZHQ29kZUJsb2NrKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFBsYW46OmlzS25vd25Ub0JlTGl2
ZUFmdGVyR0MoKQogewogICAgIGlmIChtX3N0YWdlID09IENhbmNlbGxlZCkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmgJKHJldmlzaW9u
IDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIwIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtNDMsOCArNDMsOCBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAorY2xhc3MgQWJz
dHJhY3RTbG90VmlzaXRvcjsKIGNsYXNzIENvZGVCbG9jazsKLWNsYXNzIFNsb3RWaXNpdG9yOwog
CiBuYW1lc3BhY2UgREZHIHsKIApAQCAtNzEsOSArNzEsMTAgQEAgcHVibGljOgogICAgIENvbXBp
bGF0aW9uS2V5IGtleSgpOwogICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+Ci0gICAg
dm9pZCBpdGVyYXRlQ29kZUJsb2Nrc0ZvckdDKGNvbnN0IEZ1bmMmKTsKLSAgICB2b2lkIGNoZWNr
TGl2ZW5lc3NBbmRWaXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJik7Ci0gICAgYm9vbCBpc0tub3du
VG9CZUxpdmVEdXJpbmdHQygpOworICAgIHZvaWQgaXRlcmF0ZUNvZGVCbG9ja3NGb3JHQyhBYnN0
cmFjdFNsb3RWaXNpdG9yJiwgY29uc3QgRnVuYyYpOworICAgIHZvaWQgY2hlY2tMaXZlbmVzc0Fu
ZFZpc2l0Q2hpbGRyZW4oQWJzdHJhY3RTbG90VmlzaXRvciYpOworICAgIGJvb2wgaXNLbm93blRv
QmVMaXZlRHVyaW5nR0MoQWJzdHJhY3RTbG90VmlzaXRvciYpOworICAgIGJvb2wgaXNLbm93blRv
QmVMaXZlQWZ0ZXJHQygpOwogICAgIHZvaWQgZmluYWxpemVJbkdDKCk7CiAgICAgdm9pZCBjYW5j
ZWwoKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuSW5saW5lcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbklubGluZXMu
aAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFu
SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxNy0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzIsOSArMzIsOSBAQCBuYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIERGRyB7CiAjaWYgRU5BQkxFKERGR19KSVQpCiAKIHRlbXBsYXRlPHR5cGVu
YW1lIEZ1bmM+Ci12b2lkIFBsYW46Oml0ZXJhdGVDb2RlQmxvY2tzRm9yR0MoY29uc3QgRnVuYyYg
ZnVuYykKK3ZvaWQgUGxhbjo6aXRlcmF0ZUNvZGVCbG9ja3NGb3JHQyhBYnN0cmFjdFNsb3RWaXNp
dG9yJiB2aXNpdG9yLCBjb25zdCBGdW5jJiBmdW5jKQogewotICAgIGlmICghaXNLbm93blRvQmVM
aXZlRHVyaW5nR0MoKSkKKyAgICBpZiAoIWlzS25vd25Ub0JlTGl2ZUR1cmluZ0dDKHZpc2l0b3Ip
KQogICAgICAgICByZXR1cm47CiAgICAgCiAgICAgLy8gQ29tcGlsYXRpb24gd3JpdGVzIGxvdHMg
b2YgdmFsdWVzIHRvIGEgQ29kZUJsb2NrIHdpdGhvdXQgcGVyZm9ybWluZwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlcG9pbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZXBvaW50LmNwcAkocmV2aXNpb24gMjcyODMwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlcG9pbnQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNC0yMDE5IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtODMsMjggKzgzLDM4IEBAIHZvaWQgU2FmZXBvaW50OjpiZWdpbigpCiAgICAgfQog
fQogCi12b2lkIFNhZmVwb2ludDo6Y2hlY2tMaXZlbmVzc0FuZFZpc2l0Q2hpbGRyZW4oU2xvdFZp
c2l0b3ImIHZpc2l0b3IpCit2b2lkIFNhZmVwb2ludDo6Y2hlY2tMaXZlbmVzc0FuZFZpc2l0Q2hp
bGRyZW4oQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBSRUxFQVNFX0FTU0VS
VChtX2RpZENhbGxCZWdpbik7CiAKICAgICBpZiAobV9yZXN1bHQubV9kaWRHZXRDYW5jZWxsZWQp
CiAgICAgICAgIHJldHVybjsgLy8gV2Ugd2VyZSBjYW5jZWxsZWQgZHVyaW5nIGEgcHJldmlvdXMg
R0MhCiAgICAgCi0gICAgaWYgKCFpc0tub3duVG9CZUxpdmVEdXJpbmdHQygpKQorICAgIGlmICgh
aXNLbm93blRvQmVMaXZlRHVyaW5nR0ModmlzaXRvcikpCiAgICAgICAgIHJldHVybjsKICAgICAK
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX3NjYW5uYWJsZXMuc2l6ZSgpOyBpLS07KQogICAgICAg
ICBtX3NjYW5uYWJsZXNbaV0tPnZpc2l0Q2hpbGRyZW4odmlzaXRvcik7CiB9CiAKLWJvb2wgU2Fm
ZXBvaW50Ojppc0tub3duVG9CZUxpdmVEdXJpbmdHQygpCitib29sIFNhZmVwb2ludDo6aXNLbm93
blRvQmVMaXZlRHVyaW5nR0MoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBS
RUxFQVNFX0FTU0VSVChtX2RpZENhbGxCZWdpbik7CiAgICAgCiAgICAgaWYgKG1fcmVzdWx0Lm1f
ZGlkR2V0Q2FuY2VsbGVkKQogICAgICAgICByZXR1cm4gdHJ1ZTsgLy8gV2Ugd2VyZSBjYW5jZWxs
ZWQgZHVyaW5nIGEgcHJldmlvdXMgR0MsIHNvIGxldCdzIG5vdCBtZXNzIHdpdGggaXQgdGhpcyB0
aW1lIGFyb3VuZCAtIHByZXRlbmQgaXQncyBsaXZlIGFuZCBtb3ZlIG9uLgogICAgIAotICAgIHJl
dHVybiBtX3BsYW4uaXNLbm93blRvQmVMaXZlRHVyaW5nR0MoKTsKKyAgICByZXR1cm4gbV9wbGFu
LmlzS25vd25Ub0JlTGl2ZUR1cmluZ0dDKHZpc2l0b3IpOworfQorCitib29sIFNhZmVwb2ludDo6
aXNLbm93blRvQmVMaXZlQWZ0ZXJHQygpCit7CisgICAgUkVMRUFTRV9BU1NFUlQobV9kaWRDYWxs
QmVnaW4pOworICAgIAorICAgIGlmIChtX3Jlc3VsdC5tX2RpZEdldENhbmNlbGxlZCkKKyAgICAg
ICAgcmV0dXJuIHRydWU7IC8vIFdlIHdlcmUgY2FuY2VsbGVkIGR1cmluZyBhIHByZXZpb3VzIEdD
LCBzbyBsZXQncyBub3QgbWVzcyB3aXRoIGl0IHRoaXMgdGltZSBhcm91bmQgLSBwcmV0ZW5kIGl0
J3MgbGl2ZSBhbmQgbW92ZSBvbi4KKyAgICAKKyAgICByZXR1cm4gbV9wbGFuLmlzS25vd25Ub0Jl
TGl2ZUFmdGVyR0MoKTsKIH0KIAogdm9pZCBTYWZlcG9pbnQ6OmNhbmNlbCgpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVwb2ludC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZXBvaW50LmgJKHJldmlzaW9uIDI3MjgzMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZXBvaW50LmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0LCAyMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDIxIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMzEsNyArMzEsNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotY2xhc3MgU2xvdFZpc2l0
b3I7CitjbGFzcyBBYnN0cmFjdFNsb3RWaXNpdG9yOwogY2xhc3MgVk07CiAKIG5hbWVzcGFjZSBE
RkcgewpAQCAtNjYsOSArNjYsMTAgQEAgcHVibGljOgogICAgIHZvaWQgYWRkKFNjYW5uYWJsZSop
OwogICAgIAogICAgIHZvaWQgYmVnaW4oKTsKLSAgICAKLSAgICB2b2lkIGNoZWNrTGl2ZW5lc3NB
bmRWaXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJik7Ci0gICAgYm9vbCBpc0tub3duVG9CZUxpdmVE
dXJpbmdHQygpOworCisgICAgdm9pZCBjaGVja0xpdmVuZXNzQW5kVmlzaXRDaGlsZHJlbihBYnN0
cmFjdFNsb3RWaXNpdG9yJik7CisgICAgYm9vbCBpc0tub3duVG9CZUxpdmVEdXJpbmdHQyhBYnN0
cmFjdFNsb3RWaXNpdG9yJik7CisgICAgYm9vbCBpc0tub3duVG9CZUxpdmVBZnRlckdDKCk7CiAg
ICAgdm9pZCBjYW5jZWwoKTsKICAgICAKICAgICBWTSogdm0oKSBjb25zdDsgLy8gTWF5IHJldHVy
biBudWxsIGlmIHdlJ3ZlIGJlZW4gY2FuY2VsbGVkLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTY2FubmFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NjYW5uYWJsZS5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NjYW5uYWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI5LDcgKzI5LDcgQEAK
IAogbmFtZXNwYWNlIEpTQyB7CiAKLWNsYXNzIFNsb3RWaXNpdG9yOworY2xhc3MgQWJzdHJhY3RT
bG90VmlzaXRvcjsKIAogbmFtZXNwYWNlIERGRyB7CiAKQEAgLTM4LDcgKzM4LDcgQEAgcHVibGlj
OgogICAgIFNjYW5uYWJsZSgpIHsgfQogICAgIHZpcnR1YWwgflNjYW5uYWJsZSgpIHsgfQogICAg
IAotICAgIHZpcnR1YWwgdm9pZCB2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJikgPSAwOworICAg
IHZpcnR1YWwgdm9pZCB2aXNpdENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImKSA9IDA7CiB9
OwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1dvcmtsaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1dvcmtsaXN0LmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNzIsNyAr
MzcyLDcgQEAgdm9pZCBXb3JrbGlzdDo6cmVzdW1lQWxsVGhyZWFkcygpCiAgICAgbV9zdXNwZW5z
aW9uTG9jay51bmxvY2soKTsKIH0KIAotdm9pZCBXb3JrbGlzdDo6dmlzaXRXZWFrUmVmZXJlbmNl
cyhTbG90VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgV29ya2xpc3Q6OnZpc2l0V2Vha1JlZmVyZW5j
ZXMoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBWTSogdm0gPSAmdmlzaXRv
ci5oZWFwKCktPnZtKCk7CiAgICAgewpAQCAtNDA1LDcgKzQwNSw3IEBAIHZvaWQgV29ya2xpc3Q6
OnJlbW92ZURlYWRQbGFucyhWTSYgdm0pCiAgICAgICAgICAgICBQbGFuKiBwbGFuID0gaXRlci0+
dmFsdWUuZ2V0KCk7CiAgICAgICAgICAgICBpZiAocGxhbi0+dm0oKSAhPSAmdm0pCiAgICAgICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBpZiAocGxhbi0+aXNLbm93blRvQmVMaXZl
RHVyaW5nR0MoKSkgeworICAgICAgICAgICAgaWYgKHBsYW4tPmlzS25vd25Ub0JlTGl2ZUFmdGVy
R0MoKSkgewogICAgICAgICAgICAgICAgIHBsYW4tPmZpbmFsaXplSW5HQygpOwogICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQpAQCAtNDQwLDcgKzQ0MCw3IEBAIHZvaWQg
V29ya2xpc3Q6OnJlbW92ZURlYWRQbGFucyhWTSYgdm0pCiAgICAgICAgICAgICBjb250aW51ZTsK
ICAgICAgICAgaWYgKHNhZmVwb2ludC0+dm0oKSAhPSAmdm0pCiAgICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgaWYgKHNhZmVwb2ludC0+aXNLbm93blRvQmVMaXZlRHVyaW5nR0MoKSkKKyAg
ICAgICAgaWYgKHNhZmVwb2ludC0+aXNLbm93blRvQmVMaXZlQWZ0ZXJHQygpKQogICAgICAgICAg
ICAgY29udGludWU7CiAgICAgICAgIHNhZmVwb2ludC0+Y2FuY2VsKCk7CiAgICAgfQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3QuaAkocmV2aXNpb24gMjcyODMwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIwIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIxIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMzUsNyArMzUsNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotY2xhc3MgU2xvdFZpc2l0
b3I7CitjbGFzcyBBYnN0cmFjdFNsb3RWaXNpdG9yOwogCiBuYW1lc3BhY2UgREZHIHsKIApAQCAt
NTcsNyArNTcsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBjb21wbGV0ZUFsbFBsYW5zRm9yVk0oVk0m
KTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+Ci0gICAgdm9pZCBpdGVyYXRlQ29kZUJs
b2Nrc0ZvckdDKFZNJiwgY29uc3QgRnVuYyYpOworICAgIHZvaWQgaXRlcmF0ZUNvZGVCbG9ja3NG
b3JHQyhBYnN0cmFjdFNsb3RWaXNpdG9yJiwgVk0mLCBjb25zdCBGdW5jJik7CiAKICAgICB2b2lk
IHdhaXRVbnRpbEFsbFBsYW5zRm9yVk1BcmVSZWFkeShWTSYpOwogICAgIFN0YXRlIGNvbXBsZXRl
QWxsUmVhZHlQbGFuc0ZvclZNKFZNJiwgQ29tcGlsYXRpb25LZXkgPSBDb21waWxhdGlvbktleSgp
KTsKQEAgLTczLDcgKzczLDcgQEAgcHVibGljOgogICAgIGJvb2wgaXNBY3RpdmVGb3JWTShWTSYp
IGNvbnN0OwogICAgIAogICAgIC8vIE9ubHkgY2FsbGVkIG9uIHRoZSBtYWluIHRocmVhZCBhZnRl
ciBzdXNwZW5kaW5nIGFsbCB0aHJlYWRzLgotICAgIHZvaWQgdmlzaXRXZWFrUmVmZXJlbmNlcyhT
bG90VmlzaXRvciYpOworICAgIHZvaWQgdmlzaXRXZWFrUmVmZXJlbmNlcyhBYnN0cmFjdFNsb3RW
aXNpdG9yJik7CiAgICAgdm9pZCByZW1vdmVEZWFkUGxhbnMoVk0mKTsKICAgICAKICAgICB2b2lk
IHJlbW92ZU5vbkNvbXBpbGluZ1BsYW5zRm9yVk0oVk0mKTsKQEAgLTE0NCw3ICsxNDQsNyBAQCBX
b3JrbGlzdCYgZXhpc3RpbmdXb3JrbGlzdEZvckluZGV4KHVuc2lnCiB2b2lkIGNvbXBsZXRlQWxs
UGxhbnNGb3JWTShWTSYpOwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgotdm9pZCBpdGVyYXRl
Q29kZUJsb2Nrc0ZvckdDKFZNJiwgY29uc3QgRnVuYyYpOwordm9pZCBpdGVyYXRlQ29kZUJsb2Nr
c0ZvckdDKEFic3RyYWN0U2xvdFZpc2l0b3ImLCBWTSYsIGNvbnN0IEZ1bmMmKTsKIAogfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkRGRwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1dvcmtsaXN0SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHV29ya2xpc3RJbmxpbmVzLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3RJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMTggQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0z
MywzMCArMzMsMzAgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogI2lmIEVOQUJM
RShERkdfSklUKQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgotdm9pZCBpdGVyYXRlQ29kZUJs
b2Nrc0ZvckdDKFZNJiB2bSwgY29uc3QgRnVuYyYgZnVuYykKK3ZvaWQgaXRlcmF0ZUNvZGVCbG9j
a3NGb3JHQyhBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBWTSYgdm0sIGNvbnN0IEZ1bmMm
IGZ1bmMpCiB7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gREZHOjpudW1iZXJPZldvcmtsaXN0cygp
OyBpLS07KSB7CiAgICAgICAgIGlmIChERkc6OldvcmtsaXN0KiB3b3JrbGlzdCA9IERGRzo6ZXhp
c3RpbmdXb3JrbGlzdEZvckluZGV4T3JOdWxsKGkpKQotICAgICAgICAgICAgd29ya2xpc3QtPml0
ZXJhdGVDb2RlQmxvY2tzRm9yR0Modm0sIGZ1bmMpOworICAgICAgICAgICAgd29ya2xpc3QtPml0
ZXJhdGVDb2RlQmxvY2tzRm9yR0ModmlzaXRvciwgdm0sIGZ1bmMpOwogICAgIH0KIH0KIAogdGVt
cGxhdGU8dHlwZW5hbWUgRnVuYz4KLXZvaWQgV29ya2xpc3Q6Oml0ZXJhdGVDb2RlQmxvY2tzRm9y
R0MoVk0mIHZtLCBjb25zdCBGdW5jJiBmdW5jKQordm9pZCBXb3JrbGlzdDo6aXRlcmF0ZUNvZGVC
bG9ja3NGb3JHQyhBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBWTSYgdm0sIGNvbnN0IEZ1
bmMmIGZ1bmMpCiB7CiAgICAgTG9ja0hvbGRlciBsb2NrZXIoKm1fbG9jayk7CiAgICAgZm9yIChQ
bGFuTWFwOjppdGVyYXRvciBpdGVyID0gbV9wbGFucy5iZWdpbigpOyBpdGVyICE9IG1fcGxhbnMu
ZW5kKCk7ICsraXRlcikgewogICAgICAgICBQbGFuKiBwbGFuID0gaXRlci0+dmFsdWUuZ2V0KCk7
CiAgICAgICAgIGlmIChwbGFuLT52bSgpICE9ICZ2bSkKICAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICBwbGFuLT5pdGVyYXRlQ29kZUJsb2Nrc0ZvckdDKGZ1bmMpOworICAgICAgICBwbGFu
LT5pdGVyYXRlQ29kZUJsb2Nrc0ZvckdDKHZpc2l0b3IsIGZ1bmMpOwogICAgIH0KIH0KIAogI2Vs
c2UgLy8gRU5BQkxFKERGR19KSVQpCiAKIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+Ci12b2lkIGl0
ZXJhdGVDb2RlQmxvY2tzRm9yR0MoVk0mLCBjb25zdCBGdW5jJikKK3ZvaWQgaXRlcmF0ZUNvZGVC
bG9ja3NGb3JHQyhBYnN0cmFjdFNsb3RWaXNpdG9yJiwgVk0mLCBjb25zdCBGdW5jJikKIHsKIH0K
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQWJzdHJhY3RTbG90VmlzaXRvci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Fic3RyYWN0U2xvdFZp
c2l0b3IuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9BYnN0
cmFjdFNsb3RWaXNpdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMTkgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKwor
I2luY2x1ZGUgIkpTQ0pTVmFsdWUuaCIKKyNpbmNsdWRlICJNYXJrU3RhY2suaCIKKyNpbmNsdWRl
ICJSb290TWFya1JlYXNvbi5oIgorI2luY2x1ZGUgIlZpc2l0UmFjZUtleS5oIgorI2luY2x1ZGUg
PHd0Zi9Db25jdXJyZW50UHRySGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9TaGFyZWRUYXNrLmg+
CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgSlNDIHsKKworY2xh
c3MgQ29uc2VydmF0aXZlUm9vdHM7CitjbGFzcyBIZWFwOworY2xhc3MgSGVhcENlbGw7CitjbGFz
cyBKU0NlbGw7CitjbGFzcyBNYXJrZWRCbG9jazsKK2NsYXNzIE1hcmtpbmdDb25zdHJhaW50Owor
Y2xhc3MgTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXI7CitjbGFzcyBQcmVjaXNlQWxsb2NhdGlvbjsK
K2NsYXNzIFNsb3RWaXNpdG9yOworY2xhc3MgVk07CitjbGFzcyBWZXJpZmllclNsb3RWaXNpdG9y
OwordGVtcGxhdGU8dHlwZW5hbWUgVD4gY2xhc3MgV2VhazsKK3RlbXBsYXRlPHR5cGVuYW1lIFQs
IHR5cGVuYW1lIFRyYWl0cz4gY2xhc3MgV3JpdGVCYXJyaWVyQmFzZTsKKworY2xhc3MgQWJzdHJh
Y3RTbG90VmlzaXRvciB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQWJzdHJhY3RTbG90Vmlz
aXRvcik7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgY2xhc3Mg
Q29udGV4dCB7CisgICAgcHVibGljOgorICAgICAgICBDb250ZXh0KEFic3RyYWN0U2xvdFZpc2l0
b3ImLCBIZWFwQ2VsbCopOworICAgICAgICB+Q29udGV4dCgpOworICAgICAgICBIZWFwQ2VsbCog
Y2VsbCgpIGNvbnN0IHsgcmV0dXJuIG1fY2VsbDsgfQorICAgIHByaXZhdGU6CisgICAgICAgIEFi
c3RyYWN0U2xvdFZpc2l0b3ImIG1fdmlzaXRvcjsKKyAgICAgICAgSGVhcENlbGwqIG1fY2VsbDsK
KyAgICAgICAgQ29udGV4dCogbV9wcmV2aW91czsKKyAgICB9OworCisgICAgY2xhc3MgU3VwcHJl
c3NHQ1ZlcmlmaWVyU2NvcGUgeworICAgIHB1YmxpYzoKKyAgICAgICAgU3VwcHJlc3NHQ1Zlcmlm
aWVyU2NvcGUoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKKyAgICAgICAgICAgIDogbV92
aXNpdG9yKHZpc2l0b3IpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVCghbV92aXNpdG9y
Lm1fc3VwcHJlc3NWZXJpZmllcik7CisgICAgICAgICAgICBtX3Zpc2l0b3IubV9zdXBwcmVzc1Zl
cmlmaWVyID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICB+U3VwcHJlc3NHQ1ZlcmlmaWVyU2Nv
cGUoKSB7IG1fdmlzaXRvci5tX3N1cHByZXNzVmVyaWZpZXIgPSBmYWxzZTsgfQorICAgIHByaXZh
dGU6CisgICAgICAgIEFic3RyYWN0U2xvdFZpc2l0b3ImIG1fdmlzaXRvcjsKKyAgICB9OworCisg
ICAgY2xhc3MgRGVmYXVsdE1hcmtpbmdWaW9sYXRpb25Bc3NlcnRpb25TY29wZSB7CisgICAgcHVi
bGljOgorICAgICAgICBEZWZhdWx0TWFya2luZ1Zpb2xhdGlvbkFzc2VydGlvblNjb3BlKEFic3Ry
YWN0U2xvdFZpc2l0b3ImKSB7IH0KKyAgICB9OworCisgICAgdmlydHVhbCB+QWJzdHJhY3RTbG90
VmlzaXRvcigpID0gZGVmYXVsdDsKKworICAgIE1hcmtTdGFja0FycmF5JiBjb2xsZWN0b3JNYXJr
U3RhY2soKSB7IHJldHVybiBtX2NvbGxlY3RvclN0YWNrOyB9CisgICAgTWFya1N0YWNrQXJyYXkm
IG11dGF0b3JNYXJrU3RhY2soKSB7IHJldHVybiBtX211dGF0b3JTdGFjazsgfQorICAgIGNvbnN0
IE1hcmtTdGFja0FycmF5JiBjb2xsZWN0b3JNYXJrU3RhY2soKSBjb25zdCB7IHJldHVybiBtX2Nv
bGxlY3RvclN0YWNrOyB9CisgICAgY29uc3QgTWFya1N0YWNrQXJyYXkmIG11dGF0b3JNYXJrU3Rh
Y2soKSBjb25zdCB7IHJldHVybiBtX211dGF0b3JTdGFjazsgfQorCisgICAgYm9vbCBpc0VtcHR5
KCkgeyByZXR1cm4gbV9jb2xsZWN0b3JTdGFjay5pc0VtcHR5KCkgJiYgbV9tdXRhdG9yU3RhY2su
aXNFbXB0eSgpOyB9CisKKyAgICBWTSYgdm0oKTsKKyAgICBjb25zdCBWTSYgdm0oKSBjb25zdDsK
KyAgICBIZWFwKiBoZWFwKCkgY29uc3Q7CisKKyAgICB2aXJ0dWFsIHZvaWQgYXBwZW5kKGNvbnN0
IENvbnNlcnZhdGl2ZVJvb3RzJikgPSAwOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlw
ZW5hbWUgVHJhaXRzPiB2b2lkIGFwcGVuZChjb25zdCBXcml0ZUJhcnJpZXJCYXNlPFQsIFRyYWl0
cz4mKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBUcmFpdHM+IHZvaWQgYXBw
ZW5kSGlkZGVuKGNvbnN0IFdyaXRlQmFycmllckJhc2U8VCwgVHJhaXRzPiYpOworICAgIHRlbXBs
YXRlPHR5cGVuYW1lIEl0ZXJhdG9yPiB2b2lkIGFwcGVuZChJdGVyYXRvciBiZWdpbiAsIEl0ZXJh
dG9yIGVuZCk7CisgICAgQUxXQVlTX0lOTElORSB2b2lkIGFwcGVuZFZhbHVlcyhjb25zdCBXcml0
ZUJhcnJpZXJCYXNlPFVua25vd24sIFJhd1ZhbHVlVHJhaXRzPFVua25vd24+PiosIHNpemVfdCBj
b3VudCk7CisgICAgQUxXQVlTX0lOTElORSB2b2lkIGFwcGVuZFZhbHVlc0hpZGRlbihjb25zdCBX
cml0ZUJhcnJpZXJCYXNlPFVua25vd24sIFJhd1ZhbHVlVHJhaXRzPFVua25vd24+PiosIHNpemVf
dCBjb3VudCk7CisKKyAgICAvLyBUaGVzZSBkb24ndCByZXF1aXJlIHlvdSB0byBwcm92ZSB0aGF0
IHlvdSBoYXZlIGEgV3JpdGVCYXJyaWVyPD4uIFRoYXQgbWFrZXMgc2Vuc2UKKyAgICAvLyBmb3I6
CisgICAgLy8KKyAgICAvLyAtIHJvb3RzLgorICAgIC8vIC0gc29waGlzdGljYXRlZCBkYXRhIHN0
cnVjdHVyZXMgdGhhdCBiYXJyaWVyIHRocm91Z2ggb3RoZXIgbWVhbnMgKGxpa2UgREZHOjpQbGFu
IGFuZAorICAgIC8vICAgZnJpZW5kcykuCisgICAgLy8KKyAgICAvLyBJZiB5b3UgYXJlIG5vdCBh
IHJvb3QgYW5kIHlvdSBkb24ndCBrbm93IHdoYXQga2luZCBvZiBiYXJyaWVyIHlvdSBoYXZlLCB0
aGVuIHlvdQorICAgIC8vIHNob3VsZG4ndCBjYWxsIHRoZXNlIG1ldGhvZHMuCisgICAgQUxXQVlT
X0lOTElORSB2b2lkIGFwcGVuZFVuYmFycmllcmVkKEpTVmFsdWUpOworICAgIEFMV0FZU19JTkxJ
TkUgdm9pZCBhcHBlbmRVbmJhcnJpZXJlZChKU1ZhbHVlKiwgc2l6ZV90KTsKKyAgICBBTFdBWVNf
SU5MSU5FIHZvaWQgYXBwZW5kVW5iYXJyaWVyZWQoSlNDZWxsKiBjZWxsKQorICAgIHsKKyAgICAg
ICAgaWYgKCFjZWxsKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBhcHBlbmRVbmJhcnJp
ZXJlZEltcGwoY2VsbCk7CisgICAgfQorICAgIHZpcnR1YWwgdm9pZCBhcHBlbmRVbmJhcnJpZXJl
ZEltcGwoSlNDZWxsKikgPSAwOworCisgICAgaW5saW5lIGJvb2wgYWRkT3BhcXVlUm9vdCh2b2lk
Kik7IC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgcm9vdCB3YXMgbmV3LgorICAgIGlubGluZSBib29s
IGNvbnRhaW5zT3BhcXVlUm9vdCh2b2lkKikgY29uc3Q7CisgICAgdm9pZCBzZXRJZ25vcmVOZXdP
cGFxdWVSb290cyhib29sIHZhbHVlKSB7IG1faWdub3JlTmV3T3BhcXVlUm9vdHMgPSB2YWx1ZTsg
fQorCisgICAgdmlydHVhbCBib29sIGlzRmlyc3RWaXNpdCgpIGNvbnN0ID0gMDsKKworICAgIHZp
cnR1YWwgYm9vbCBpc01hcmtlZChjb25zdCB2b2lkKikgY29uc3QgPSAwOworICAgIHZpcnR1YWwg
Ym9vbCBpc01hcmtlZChNYXJrZWRCbG9jayYsIEhlYXBDZWxsKikgY29uc3QgPSAwOworICAgIHZp
cnR1YWwgYm9vbCBpc01hcmtlZChQcmVjaXNlQWxsb2NhdGlvbiYsIEhlYXBDZWxsKikgY29uc3Qg
PSAwOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICB2b2lkIGFwcGVuZChjb25zdCBX
ZWFrPFQ+JiB3ZWFrKTsKKworICAgIEFMV0FZU19JTkxJTkUgdm9pZCBhcHBlbmRIaWRkZW5VbmJh
cnJpZXJlZChKU1ZhbHVlKTsKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgYXBwZW5kSGlkZGVuVW5i
YXJyaWVyZWQoSlNDZWxsKiBjZWxsKQorICAgIHsKKyAgICAgICAgaWYgKCFjZWxsKQorICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICBhcHBlbmRIaWRkZW5VbmJhcnJpZXJlZEltcGwoY2VsbCk7
CisgICAgfQorICAgIHZpcnR1YWwgdm9pZCBhcHBlbmRIaWRkZW5VbmJhcnJpZXJlZEltcGwoSlND
ZWxsKikgPSAwOworCisgICAgc2l6ZV90IHZpc2l0Q291bnQoKSBjb25zdCB7IHJldHVybiBtX3Zp
c2l0Q291bnQ7IH0KKworICAgIHZvaWQgYWRkVG9WaXNpdENvdW50KHNpemVfdCB2YWx1ZSkgeyBt
X3Zpc2l0Q291bnQgKz0gdmFsdWU7IH0KKworICAgIHZpcnR1YWwgdm9pZCBhZGRQYXJhbGxlbENv
bnN0cmFpbnRUYXNrKFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoQWJzdHJhY3RTbG90VmlzaXRvciYp
Pj4pID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBtYXJrQXV4aWxpYXJ5KGNvbnN0IHZvaWQqIGJh
c2UpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCByZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQoc2l6
ZV90KSA9IDA7CisjaWYgRU5BQkxFKFJFU09VUkNFX1VTQUdFKQorICAgIHZpcnR1YWwgdm9pZCBy
ZXBvcnRFeHRlcm5hbE1lbW9yeVZpc2l0ZWQoc2l6ZV90KSA9IDA7CisjZW5kaWYKKworICAgIHZp
cnR1YWwgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3QgPSAwOworCisgICAgUm9vdE1hcmtS
ZWFzb24gcm9vdE1hcmtSZWFzb24oKSBjb25zdCB7IHJldHVybiBtX3Jvb3RNYXJrUmVhc29uOyB9
CisgICAgdm9pZCBzZXRSb290TWFya1JlYXNvbihSb290TWFya1JlYXNvbiByZWFzb24pIHsgbV9y
b290TWFya1JlYXNvbiA9IHJlYXNvbjsgfQorCisgICAgdmlydHVhbCBib29sIG11dGF0b3JJc1N0
b3BwZWQoKSBjb25zdCA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgZGlkUmFjZShjb25zdCBWaXNp
dFJhY2VLZXkmKSA9IDA7CisgICAgdm9pZCBkaWRSYWNlKEpTQ2VsbCogY2VsbCwgY29uc3QgY2hh
ciogcmVhc29uKSB7IGRpZFJhY2UoVmlzaXRSYWNlS2V5KGNlbGwsIHJlYXNvbikpOyB9CisKKyAg
ICB2aXJ0dWFsIHZvaWQgdmlzaXRBc0NvbnN0cmFpbnQoY29uc3QgSlNDZWxsKikgPSAwOworCisg
ICAgY29uc3QgY2hhciogY29kZU5hbWUoKSBjb25zdCB7IHJldHVybiBtX2NvZGVOYW1lLmRhdGEo
KTsgfQorCitwcm90ZWN0ZWQ6CisgICAgaW5saW5lIEFic3RyYWN0U2xvdFZpc2l0b3IoSGVhcCYs
IENTdHJpbmcgY29kZU5hbWUsIENvbmN1cnJlbnRQdHJIYXNoU2V0Jik7CisKKyAgICBIZWFwQ2Vs
bCogcGFyZW50Q2VsbCgpIGNvbnN0OworICAgIHZvaWQgcmVzZXQoKTsKKworICAgIE1hcmtTdGFj
a0FycmF5IG1fY29sbGVjdG9yU3RhY2s7CisgICAgTWFya1N0YWNrQXJyYXkgbV9tdXRhdG9yU3Rh
Y2s7CisKKyAgICBzaXplX3QgbV92aXNpdENvdW50IHsgMCB9OworCisgICAgSGVhcCYgbV9oZWFw
OworICAgIENvbnRleHQqIG1fY29udGV4dCB7IG51bGxwdHIgfTsKKyAgICBDU3RyaW5nIG1fY29k
ZU5hbWU7CisKKyAgICBSb290TWFya1JlYXNvbiBtX3Jvb3RNYXJrUmVhc29uIHsgUm9vdE1hcmtS
ZWFzb246Ok5vbmUgfTsKKyAgICBib29sIG1fc3VwcHJlc3NWZXJpZmllciB7IGZhbHNlIH07Cisg
ICAgYm9vbCBtX2lnbm9yZU5ld09wYXF1ZVJvb3RzIHsgZmFsc2UgfTsgLy8gVXNlZnVsIGFzIGEg
ZGVidWdnaW5nIG1vZGUuCisKKyAgICBNYXJraW5nQ29uc3RyYWludCogbV9jdXJyZW50Q29uc3Ry
YWludCB7IG51bGxwdHIgfTsKKyAgICBNYXJraW5nQ29uc3RyYWludFNvbHZlciogbV9jdXJyZW50
U29sdmVyIHsgbnVsbHB0ciB9OworICAgIENvbmN1cnJlbnRQdHJIYXNoU2V0JiBtX29wYXF1ZVJv
b3RzOworCisgICAgZnJpZW5kIGNsYXNzIE1hcmtpbmdDb25zdHJhaW50U29sdmVyOworfTsKKwor
Y2xhc3MgU2V0Um9vdE1hcmtSZWFzb25TY29wZSB7CitwdWJsaWM6CisgICAgU2V0Um9vdE1hcmtS
ZWFzb25TY29wZShBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBSb290TWFya1JlYXNvbiBy
ZWFzb24pCisgICAgICAgIDogbV92aXNpdG9yKHZpc2l0b3IpCisgICAgICAgICwgbV9wcmV2aW91
c1JlYXNvbih2aXNpdG9yLnJvb3RNYXJrUmVhc29uKCkpCisgICAgeworICAgICAgICBtX3Zpc2l0
b3Iuc2V0Um9vdE1hcmtSZWFzb24ocmVhc29uKTsKKyAgICB9CisKKyAgICB+U2V0Um9vdE1hcmtS
ZWFzb25TY29wZSgpCisgICAgeworICAgICAgICBtX3Zpc2l0b3Iuc2V0Um9vdE1hcmtSZWFzb24o
bV9wcmV2aW91c1JlYXNvbik7CisgICAgfQorCitwcml2YXRlOgorICAgIEFic3RyYWN0U2xvdFZp
c2l0b3ImIG1fdmlzaXRvcjsKKyAgICBSb290TWFya1JlYXNvbiBtX3ByZXZpb3VzUmVhc29uOwor
fTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9BYnN0cmFjdFNsb3RWaXNpdG9ySW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0Fic3RyYWN0U2xvdFZpc2l0b3JJbmxpbmVzLmgJKG5vbmV4aXN0ZW50
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQWJzdHJhY3RTbG90VmlzaXRvcklubGlu
ZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE1NCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQWJz
dHJhY3RTbG90VmlzaXRvci5oIgorI2luY2x1ZGUgIkhlYXAuaCIKKyNpbmNsdWRlICJXZWFrSW5s
aW5lcy5oIgorI2luY2x1ZGUgIldyaXRlQmFycmllci5oIgorCituYW1lc3BhY2UgSlNDIHsKKwor
aW5saW5lIEFic3RyYWN0U2xvdFZpc2l0b3I6OkNvbnRleHQ6OkNvbnRleHQoQWJzdHJhY3RTbG90
VmlzaXRvciYgdmlzaXRvciwgSGVhcENlbGwqIGNlbGwpCisgICAgOiBtX3Zpc2l0b3IodmlzaXRv
cikKKyAgICAsIG1fY2VsbChjZWxsKQoreworICAgIG1fcHJldmlvdXMgPSBtX3Zpc2l0b3IubV9j
b250ZXh0OworICAgIG1fdmlzaXRvci5tX2NvbnRleHQgPSB0aGlzOworfQorCitpbmxpbmUgQWJz
dHJhY3RTbG90VmlzaXRvcjo6Q29udGV4dDo6fkNvbnRleHQoKQoreworICAgIG1fdmlzaXRvci5t
X2NvbnRleHQgPSBtX3ByZXZpb3VzOworfQorCitpbmxpbmUgQWJzdHJhY3RTbG90VmlzaXRvcjo6
QWJzdHJhY3RTbG90VmlzaXRvcihIZWFwJiBoZWFwLCBDU3RyaW5nIGNvZGVOYW1lLCBDb25jdXJy
ZW50UHRySGFzaFNldCYgb3BhcXVlUm9vdHMpCisgICAgOiBtX2hlYXAoaGVhcCkKKyAgICAsIG1f
Y29kZU5hbWUoY29kZU5hbWUpCisgICAgLCBtX29wYXF1ZVJvb3RzKG9wYXF1ZVJvb3RzKQorewor
fQorCitpbmxpbmUgSGVhcCogQWJzdHJhY3RTbG90VmlzaXRvcjo6aGVhcCgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuICZtX2hlYXA7Cit9CisKK2lubGluZSBWTSYgQWJzdHJhY3RTbG90VmlzaXRvcjo6
dm0oKQoreworICAgIHJldHVybiBtX2hlYXAudm0oKTsKK30KKworaW5saW5lIGNvbnN0IFZNJiBB
YnN0cmFjdFNsb3RWaXNpdG9yOjp2bSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1faGVhcC52bSgp
OworfQorCitpbmxpbmUgYm9vbCBBYnN0cmFjdFNsb3RWaXNpdG9yOjphZGRPcGFxdWVSb290KHZv
aWQqIHB0cikKK3sKKyAgICBpZiAoIXB0cikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlm
IChtX2lnbm9yZU5ld09wYXF1ZVJvb3RzKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYg
KCFtX29wYXF1ZVJvb3RzLmFkZChwdHIpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgbV92
aXNpdENvdW50Kys7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2lubGluZSBib29sIEFic3RyYWN0
U2xvdFZpc2l0b3I6OmNvbnRhaW5zT3BhcXVlUm9vdCh2b2lkKiBwdHIpIGNvbnN0Cit7CisgICAg
cmV0dXJuIG1fb3BhcXVlUm9vdHMuY29udGFpbnMocHRyKTsKK30KKwordGVtcGxhdGU8dHlwZW5h
bWUgVD4KK0FMV0FZU19JTkxJTkUgdm9pZCBBYnN0cmFjdFNsb3RWaXNpdG9yOjphcHBlbmQoY29u
c3QgV2VhazxUPiYgd2VhaykKK3sKKyAgICBhcHBlbmRVbmJhcnJpZXJlZCh3ZWFrLmdldCgpKTsK
K30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVHJhaXRzPgorQUxXQVlTX0lOTElO
RSB2b2lkIEFic3RyYWN0U2xvdFZpc2l0b3I6OmFwcGVuZChjb25zdCBXcml0ZUJhcnJpZXJCYXNl
PFQsIFRyYWl0cz4mIHNsb3QpCit7CisgICAgYXBwZW5kVW5iYXJyaWVyZWQoc2xvdC5nZXQoKSk7
Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFRyYWl0cz4KK0FMV0FZU19JTkxJ
TkUgdm9pZCBBYnN0cmFjdFNsb3RWaXNpdG9yOjphcHBlbmRIaWRkZW4oY29uc3QgV3JpdGVCYXJy
aWVyQmFzZTxULCBUcmFpdHM+JiBzbG90KQoreworICAgIGFwcGVuZEhpZGRlblVuYmFycmllcmVk
KHNsb3QuZ2V0KCkpOworfQorCitBTFdBWVNfSU5MSU5FIHZvaWQgQWJzdHJhY3RTbG90VmlzaXRv
cjo6YXBwZW5kSGlkZGVuVW5iYXJyaWVyZWQoSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBpZiAodmFs
dWUuaXNDZWxsKCkpCisgICAgICAgIGFwcGVuZEhpZGRlblVuYmFycmllcmVkKHZhbHVlLmFzQ2Vs
bCgpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgSXRlcmF0b3I+CitBTFdBWVNfSU5MSU5FIHZv
aWQgQWJzdHJhY3RTbG90VmlzaXRvcjo6YXBwZW5kKEl0ZXJhdG9yIGJlZ2luLCBJdGVyYXRvciBl
bmQpCit7CisgICAgZm9yIChhdXRvIGl0ID0gYmVnaW47IGl0ICE9IGVuZDsgKytpdCkKKyAgICAg
ICAgYXBwZW5kKCppdCk7Cit9CisKK0FMV0FZU19JTkxJTkUgdm9pZCBBYnN0cmFjdFNsb3RWaXNp
dG9yOjphcHBlbmRWYWx1ZXMoY29uc3QgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiogYmFycmll
cnMsIHNpemVfdCBjb3VudCkKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyAr
K2kpCisgICAgICAgIGFwcGVuZChiYXJyaWVyc1tpXSk7Cit9CisKK0FMV0FZU19JTkxJTkUgdm9p
ZCBBYnN0cmFjdFNsb3RWaXNpdG9yOjphcHBlbmRWYWx1ZXNIaWRkZW4oY29uc3QgV3JpdGVCYXJy
aWVyQmFzZTxVbmtub3duPiogYmFycmllcnMsIHNpemVfdCBjb3VudCkKK3sKKyAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpCisgICAgICAgIGFwcGVuZEhpZGRlbihiYXJyaWVy
c1tpXSk7Cit9CisKK0FMV0FZU19JTkxJTkUgdm9pZCBBYnN0cmFjdFNsb3RWaXNpdG9yOjphcHBl
bmRVbmJhcnJpZXJlZChKU1ZhbHVlIHZhbHVlKQoreworICAgIGlmICh2YWx1ZS5pc0NlbGwoKSkK
KyAgICAgICAgYXBwZW5kVW5iYXJyaWVyZWQodmFsdWUuYXNDZWxsKCkpOworfQorCitBTFdBWVNf
SU5MSU5FIHZvaWQgQWJzdHJhY3RTbG90VmlzaXRvcjo6YXBwZW5kVW5iYXJyaWVyZWQoSlNWYWx1
ZSogc2xvdCwgc2l6ZV90IGNvdW50KQoreworICAgIGZvciAoc2l6ZV90IGkgPSBjb3VudDsgaS0t
OykKKyAgICAgICAgYXBwZW5kVW5iYXJyaWVyZWQoc2xvdFtpXSk7Cit9CisKK0FMV0FZU19JTkxJ
TkUgSGVhcENlbGwqIEFic3RyYWN0U2xvdFZpc2l0b3I6OnBhcmVudENlbGwoKSBjb25zdAorewor
ICAgIGlmICghbV9jb250ZXh0KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4g
bV9jb250ZXh0LT5jZWxsKCk7Cit9CisKK0FMV0FZU19JTkxJTkUgdm9pZCBBYnN0cmFjdFNsb3RW
aXNpdG9yOjpyZXNldCgpCit7CisgICAgbV92aXNpdENvdW50ID0gMDsKK30KKworfSAvLyBuYW1l
c3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IYW5kbGVTZXQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hhbmRsZVNldC5jcHAJ
KHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hhbmRsZVNl
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDExLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDExLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01Niw3ICs1Niw3IEBAIHZvaWQgSGFuZGxlU2V0Ojpn
cm93KCkKICAgICB9CiB9CiAKLXZvaWQgSGFuZGxlU2V0Ojp2aXNpdFN0cm9uZ0hhbmRsZXMoU2xv
dFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIEhhbmRsZVNldDo6dmlzaXRTdHJvbmdIYW5kbGVzKEFi
c3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgTm9kZSogZW5kID0gbV9zdHJvbmdM
aXN0LmVuZCgpOwogICAgIGZvciAoTm9kZSogbm9kZSA9IG1fc3Ryb25nTGlzdC5iZWdpbigpOyBu
b2RlICE9IGVuZDsgbm9kZSA9IG5vZGUtPm5leHQoKSkgewpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvSGFuZGxlU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvSGFuZGxlU2V0LmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0hhbmRsZVNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMS0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzUsMTAgKzM1LDEw
IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCitjbGFzcyBBYnN0cmFjdFNsb3RWaXNpdG9yOwogY2xh
c3MgSGFuZGxlU2V0OwogY2xhc3MgVk07CiBjbGFzcyBKU1ZhbHVlOwotY2xhc3MgU2xvdFZpc2l0
b3I7CiAKIGNsYXNzIEhhbmRsZU5vZGUgewogcHVibGljOgpAQCAtNzMsNyArNzMsNyBAQCBwdWJs
aWM6CiAgICAgSGFuZGxlU2xvdCBhbGxvY2F0ZSgpOwogICAgIHZvaWQgZGVhbGxvY2F0ZShIYW5k
bGVTbG90KTsKIAotICAgIHZvaWQgdmlzaXRTdHJvbmdIYW5kbGVzKFNsb3RWaXNpdG9yJik7Cisg
ICAgdm9pZCB2aXNpdFN0cm9uZ0hhbmRsZXMoQWJzdHJhY3RTbG90VmlzaXRvciYpOwogCiAgICAg
SlNfRVhQT1JUX1BSSVZBVEUgdm9pZCB3cml0ZUJhcnJpZXIoSGFuZGxlU2xvdCwgY29uc3QgSlNW
YWx1ZSYpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAkocmV2aXNpb24g
MjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTcyLDYgKzcyLDcgQEAKICNpbmNsdWRlICJUeXBlUHJvZmlsZXIuaCIKICNpbmNs
dWRlICJUeXBlUHJvZmlsZXJMb2cuaCIKICNpbmNsdWRlICJWTS5oIgorI2luY2x1ZGUgIlZlcmlm
aWVyU2xvdFZpc2l0b3JJbmxpbmVzLmgiCiAjaW5jbHVkZSAiV2Vha01hcEltcGxJbmxpbmVzLmgi
CiAjaW5jbHVkZSAiV2Vha1NldElubGluZXMuaCIKICNpbmNsdWRlIDxhbGdvcml0aG0+CkBAIC02
NDQsMTggKzY0NSwxOCBAQCB2b2lkIEhlYXA6OmNvbXBsZXRlQWxsSklUUGxhbnMoKQogfQogCiB0
ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgotdm9pZCBIZWFwOjppdGVyYXRlRXhlY3V0aW5nQW5kQ29t
cGlsaW5nQ29kZUJsb2Nrcyhjb25zdCBGdW5jJiBmdW5jKQordm9pZCBIZWFwOjppdGVyYXRlRXhl
Y3V0aW5nQW5kQ29tcGlsaW5nQ29kZUJsb2NrcyhBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9y
LCBjb25zdCBGdW5jJiBmdW5jKQogewogICAgIG1fY29kZUJsb2Nrcy0+aXRlcmF0ZUN1cnJlbnRs
eUV4ZWN1dGluZyhmdW5jKTsKICAgICBpZiAoT3B0aW9uczo6dXNlSklUKCkpCi0gICAgICAgIERG
Rzo6aXRlcmF0ZUNvZGVCbG9ja3NGb3JHQyhtX3ZtLCBmdW5jKTsKKyAgICAgICAgREZHOjppdGVy
YXRlQ29kZUJsb2Nrc0ZvckdDKHZpc2l0b3IsIG1fdm0sIGZ1bmMpOwogfQogCiB0ZW1wbGF0ZTx0
eXBlbmFtZSBGdW5jPgotdm9pZCBIZWFwOjppdGVyYXRlRXhlY3V0aW5nQW5kQ29tcGlsaW5nQ29k
ZUJsb2Nrc1dpdGhvdXRIb2xkaW5nTG9ja3MoY29uc3QgRnVuYyYgZnVuYykKK3ZvaWQgSGVhcDo6
aXRlcmF0ZUV4ZWN1dGluZ0FuZENvbXBpbGluZ0NvZGVCbG9ja3NXaXRob3V0SG9sZGluZ0xvY2tz
KEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IEZ1bmMmIGZ1bmMpCiB7CiAgICAg
VmVjdG9yPENvZGVCbG9jayosIDI1Nj4gY29kZUJsb2NrczsKLSAgICBpdGVyYXRlRXhlY3V0aW5n
QW5kQ29tcGlsaW5nQ29kZUJsb2NrcygKKyAgICBpdGVyYXRlRXhlY3V0aW5nQW5kQ29tcGlsaW5n
Q29kZUJsb2Nrcyh2aXNpdG9yLAogICAgICAgICBbJl0gKENvZGVCbG9jayogY29kZUJsb2NrKSB7
CiAgICAgICAgICAgICBjb2RlQmxvY2tzLmFwcGVuZChjb2RlQmxvY2spOwogICAgICAgICB9KTsK
QEAgLTczMywxNCArNzM0LDYgQEAgdm9pZCBIZWFwOjpyZW1vdmVEZWFkQ29tcGlsZXJXb3JrbGlz
dEVudAogI2VuZGlmCiB9CiAKLWJvb2wgSGVhcDo6aXNBbmFseXppbmdIZWFwKCkgY29uc3QKLXsK
LSAgICBIZWFwUHJvZmlsZXIqIGhlYXBQcm9maWxlciA9IG1fdm0uaGVhcFByb2ZpbGVyKCk7Ci0g
ICAgaWYgKFVOTElLRUxZKGhlYXBQcm9maWxlcikpCi0gICAgICAgIHJldHVybiBoZWFwUHJvZmls
ZXItPmFjdGl2ZUhlYXBBbmFseXplcigpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQogc3RydWN0
IEdhdGhlckV4dHJhSGVhcERhdGEgOiBNYXJrZWRCbG9jazo6Q291bnRGdW5jdG9yIHsKICAgICBH
YXRoZXJFeHRyYUhlYXBEYXRhKFZNJiB2bSwgSGVhcEFuYWx5emVyJiBhbmFseXplcikKICAgICAg
ICAgOiBtX3ZtKHZtKQpAQCAtMTQ4NSwxNCArMTQ3OCwyMSBAQCBORVZFUl9JTkxJTkUgYm9vbCBI
ZWFwOjpydW5FbmRQaGFzZShHQ0NvCiAgICAgfQogICAgIG1faGVscGVyQ2xpZW50LmZpbmlzaCgp
OwogICAgIAotICAgIGl0ZXJhdGVFeGVjdXRpbmdBbmRDb21waWxpbmdDb2RlQmxvY2tzKAorICAg
IEFTU0VSVChtX211dGF0b3JNYXJrU3RhY2stPmlzRW1wdHkoKSk7CisgICAgQVNTRVJUKG1fcmFj
ZU1hcmtTdGFjay0+aXNFbXB0eSgpKTsKKworICAgIFNsb3RWaXNpdG9yJiB2aXNpdG9yID0gKm1f
Y29sbGVjdG9yU2xvdFZpc2l0b3I7CisgICAgaXRlcmF0ZUV4ZWN1dGluZ0FuZENvbXBpbGluZ0Nv
ZGVCbG9ja3ModmlzaXRvciwKICAgICAgICAgWyZdIChDb2RlQmxvY2sqIGNvZGVCbG9jaykgewog
ICAgICAgICAgICAgd3JpdGVCYXJyaWVyKGNvZGVCbG9jayk7CiAgICAgICAgIH0pOwotICAgICAg
ICAKKwogICAgIHVwZGF0ZU9iamVjdENvdW50cygpOwogICAgIGVuZE1hcmtpbmcoKTsKIAorICAg
IGlmIChVTkxJS0VMWShPcHRpb25zOjp2ZXJpZnlHQygpKSkKKyAgICAgICAgdmVyaWZ5R0MoKTsK
KwogICAgIGlmIChVTkxJS0VMWShtX3ZlcmlmaWVyKSkgewogICAgICAgICBtX3ZlcmlmaWVyLT5n
YXRoZXJMaXZlQ2VsbHMoSGVhcFZlcmlmaWVyOjpQaGFzZTo6QWZ0ZXJNYXJraW5nKTsKICAgICAg
ICAgbV92ZXJpZmllci0+dmVyaWZ5KEhlYXBWZXJpZmllcjo6UGhhc2U6OkFmdGVyTWFya2luZyk7
CkBAIC0yMTcwLDYgKzIxNzAsMTEgQEAgdm9pZCBIZWFwOjpzdXNwZW5kQ29tcGlsZXJUaHJlYWRz
KCkKIAogdm9pZCBIZWFwOjp3aWxsU3RhcnRDb2xsZWN0aW9uKCkKIHsKKyAgICBpZiAoVU5MSUtF
TFkoT3B0aW9uczo6dmVyaWZ5R0MoKSkpIHsKKyAgICAgICAgbV92ZXJpZmllclNsb3RWaXNpdG9y
ID0gbWFrZVVuaXF1ZTxWZXJpZmllclNsb3RWaXNpdG9yPigqdGhpcyk7CisgICAgICAgIEFTU0VS
VCghbV9pc01hcmtpbmdGb3JHQ1ZlcmlmaWVyKTsKKyAgICB9CisKICAgICBkYXRhTG9nSWYoT3B0
aW9uczo6bG9nR0MoKSwgIj0+ICIpOwogICAgIAogICAgIGlmIChzaG91bGREb0Z1bGxDb2xsZWN0
aW9uKCkpIHsKQEAgLTI3MDEsOSArMjcwNiwxNCBAQCB2b2lkIEhlYXA6OmFkZENvcmVDb25zdHJh
aW50cygpCiB7CiAgICAgbV9jb25zdHJhaW50U2V0LT5hZGQoCiAgICAgICAgICJDcyIsICJDb25z
ZXJ2YXRpdmUgU2NhbiIsCi0gICAgICAgIFt0aGlzLCBsYXN0VmVyc2lvbiA9IHN0YXRpY19jYXN0
PHVpbnQ2NF90PigwKV0gKFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBtdXRhYmxlIHsKKyAgICAgICAg
W3RoaXMsIGxhc3RWZXJzaW9uID0gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KDApXSAoQWJzdHJhY3RT
bG90VmlzaXRvciYgdmlzaXRvcikgbXV0YWJsZSB7CiAgICAgICAgICAgICBib29sIHNob3VsZE5v
dFByb2R1Y2VXb3JrID0gbGFzdFZlcnNpb24gPT0gbV9waGFzZVZlcnNpb247Ci0gICAgICAgICAg
ICBpZiAoc2hvdWxkTm90UHJvZHVjZVdvcmspCisKKyAgICAgICAgICAgIC8vIEZvciB0aGUgR0Mg
VmVyZmllciwgd2Ugd291bGQgbGlrZSB0byB1c2UgdGhlIGlkZW50aWNhbCBzZXQgb2YgY29uc2Vy
dmF0aXZlIHJvb3RzCisgICAgICAgICAgICAvLyBhcyB0aGUgcmVhbCBHQy4gT3RoZXJ3aXNlLCB0
aGUgR0MgdmVyaWZpZXIgbWF5IHJlcG9ydCBmYWxzZSBuZWdhdGl2ZXMgZHVlIHRvCisgICAgICAg
ICAgICAvLyB2YXJpYXRpb25zIGluIHN0YWNrIHZhbHVlcy4gRm9yIHRoaXMgc2FtZSByZWFzb24s
IHdlIHdpbGwgc2tpcCB0aGlzIGNvbnN0cmFpbnQKKyAgICAgICAgICAgIC8vIHdoZW4gd2UncmUg
cnVubmluZyB0aGUgR0MgdmVyaWZpY2F0aW9uIGluIHRoZSBFbmQgcGhhc2UuCisgICAgICAgICAg
ICBpZiAoc2hvdWxkTm90UHJvZHVjZVdvcmsgfHwgbV9pc01hcmtpbmdGb3JHQ1ZlcmlmaWVyKQog
ICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIAogICAgICAgICAgICAgVGltaW5n
U2NvcGUgcHJlQ29udmVyZ2VuY2VUaW1pbmdTY29wZSgqdGhpcywgIkNvbnN0cmFpbnQ6IGNvbnNl
cnZhdGl2ZSBzY2FuIik7CkBAIC0yNzIwLDExICsyNzMwLDE1IEBAIHZvaWQgSGVhcDo6YWRkQ29y
ZUNvbnN0cmFpbnRzKCkKIAogICAgICAgICAgICAgICAgIFNldFJvb3RNYXJrUmVhc29uU2NvcGUg
cm9vdFNjb3BlKHZpc2l0b3IsIFJvb3RNYXJrUmVhc29uOjpDb25zZXJ2YXRpdmVTY2FuKTsKICAg
ICAgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZChjb25zZXJ2YXRpdmVSb290cyk7CisgICAgICAg
ICAgICAgICAgaWYgKFVOTElLRUxZKG1fdmVyaWZpZXJTbG90VmlzaXRvcikpCisgICAgICAgICAg
ICAgICAgICAgIG1fdmVyaWZpZXJTbG90VmlzaXRvci0+YXBwZW5kKGNvbnNlcnZhdGl2ZVJvb3Rz
KTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChPcHRpb25zOjp1c2VKSVQoKSkgewog
ICAgICAgICAgICAgICAgIC8vIEpJVFN0dWJSb3V0aW5lcyBtdXN0IGJlIHZpc2l0ZWQgYWZ0ZXIg
c2Nhbm5pbmcgQ29uc2VydmF0aXZlUm9vdHMgc2luY2UgSklUU3R1YlJvdXRpbmVzIGRlcGVuZCBv
biB0aGUgaG9vayBleGVjdXRlZCBkdXJpbmcgZ2F0aGVyaW5nIENvbnNlcnZhdGl2ZVJvb3RzLgog
ICAgICAgICAgICAgICAgIFNldFJvb3RNYXJrUmVhc29uU2NvcGUgcm9vdFNjb3BlKHZpc2l0b3Is
IFJvb3RNYXJrUmVhc29uOjpKSVRTdHViUm91dGluZXMpOwogICAgICAgICAgICAgICAgIG1faml0
U3R1YlJvdXRpbmVzLT50cmFjZU1hcmtlZFN0dWJSb3V0aW5lcyh2aXNpdG9yKTsKKyAgICAgICAg
ICAgICAgICBpZiAoVU5MSUtFTFkobV92ZXJpZmllclNsb3RWaXNpdG9yKSkKKyAgICAgICAgICAg
ICAgICAgICAgbV9qaXRTdHViUm91dGluZXMtPnRyYWNlTWFya2VkU3R1YlJvdXRpbmVzKCptX3Zl
cmlmaWVyU2xvdFZpc2l0b3IpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAg
ICAgICBsYXN0VmVyc2lvbiA9IG1fcGhhc2VWZXJzaW9uOwpAQCAtMjczMyw4ICsyNzQ3LDcgQEAg
dm9pZCBIZWFwOjphZGRDb3JlQ29uc3RyYWludHMoKQogICAgIAogICAgIG1fY29uc3RyYWludFNl
dC0+YWRkKAogICAgICAgICAiTXNyIiwgIk1pc2MgU21hbGwgUm9vdHMiLAotICAgICAgICBbdGhp
c10gKFNsb3RWaXNpdG9yJiB2aXNpdG9yKSB7Ci0KKyAgICAgICAgW3RoaXNdIChBYnN0cmFjdFNs
b3RWaXNpdG9yJiB2aXNpdG9yKSB7CiAjaWYgSlNDX09CSkNfQVBJX0VOQUJMRUQKICAgICAgICAg
ICAgIHNjYW5FeHRlcm5hbFJlbWVtYmVyZWRTZXQobV92bSwgdmlzaXRvcik7CiAjZW5kaWYKQEAg
LTI3NjgsNyArMjc4MSw3IEBAIHZvaWQgSGVhcDo6YWRkQ29yZUNvbnN0cmFpbnRzKCkKICAgICAK
ICAgICBtX2NvbnN0cmFpbnRTZXQtPmFkZCgKICAgICAgICAgIlNoIiwgIlN0cm9uZyBIYW5kbGVz
IiwKLSAgICAgICAgW3RoaXNdIChTbG90VmlzaXRvciYgdmlzaXRvcikgeworICAgICAgICBbdGhp
c10gKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsKICAgICAgICAgICAgIFNldFJvb3RN
YXJrUmVhc29uU2NvcGUgcm9vdFNjb3BlKHZpc2l0b3IsIFJvb3RNYXJrUmVhc29uOjpTdHJvbmdI
YW5kbGVzKTsKICAgICAgICAgICAgIG1faGFuZGxlU2V0LnZpc2l0U3Ryb25nSGFuZGxlcyh2aXNp
dG9yKTsKICAgICAgICAgfSwKQEAgLTI3NzYsNyArMjc4OSw3IEBAIHZvaWQgSGVhcDo6YWRkQ29y
ZUNvbnN0cmFpbnRzKCkKICAgICAKICAgICBtX2NvbnN0cmFpbnRTZXQtPmFkZCgKICAgICAgICAg
IkQiLCAiRGVidWdnZXIiLAotICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiB2aXNpdG9yKSB7
CisgICAgICAgIFt0aGlzXSAoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikgewogICAgICAg
ICAgICAgU2V0Um9vdE1hcmtSZWFzb25TY29wZSByb290U2NvcGUodmlzaXRvciwgUm9vdE1hcmtS
ZWFzb246OkRlYnVnZ2VyKTsKIAogI2lmIEVOQUJMRShTQU1QTElOR19QUk9GSUxFUikKQEAgLTI3
OTksNyArMjgxMiw3IEBAIHZvaWQgSGVhcDo6YWRkQ29yZUNvbnN0cmFpbnRzKCkKICAgICAKICAg
ICBtX2NvbnN0cmFpbnRTZXQtPmFkZCgKICAgICAgICAgIldzIiwgIldlYWsgU2V0cyIsCi0gICAg
ICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsKKyAgICAgICAgW3RoaXNdIChBYnN0
cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKSB7CiAgICAgICAgICAgICBTZXRSb290TWFya1JlYXNv
blNjb3BlIHJvb3RTY29wZSh2aXNpdG9yLCBSb290TWFya1JlYXNvbjo6V2Vha1NldHMpOwogICAg
ICAgICAgICAgbV9vYmplY3RTcGFjZS52aXNpdFdlYWtTZXRzKHZpc2l0b3IpOwogICAgICAgICB9
LApAQCAtMjgwNywxMCArMjgyMCwxMCBAQCB2b2lkIEhlYXA6OmFkZENvcmVDb25zdHJhaW50cygp
CiAgICAgCiAgICAgbV9jb25zdHJhaW50U2V0LT5hZGQoCiAgICAgICAgICJPIiwgIk91dHB1dCIs
Ci0gICAgICAgIFtdIChTbG90VmlzaXRvciYgdmlzaXRvcikgeworICAgICAgICBbXSAoQWJzdHJh
Y3RTbG90VmlzaXRvciYgdmlzaXRvcikgewogICAgICAgICAgICAgVk0mIHZtID0gdmlzaXRvci52
bSgpOwogCi0gICAgICAgICAgICBhdXRvIGNhbGxPdXRwdXRDb25zdHJhaW50ID0gW10gKFNsb3RW
aXNpdG9yJiB2aXNpdG9yLCBIZWFwQ2VsbCogaGVhcENlbGwsIEhlYXBDZWxsOjpLaW5kKSB7Cisg
ICAgICAgICAgICBhdXRvIGNhbGxPdXRwdXRDb25zdHJhaW50ID0gW10gKEFic3RyYWN0U2xvdFZp
c2l0b3ImIHZpc2l0b3IsIEhlYXBDZWxsKiBoZWFwQ2VsbCwgSGVhcENlbGw6OktpbmQpIHsKICAg
ICAgICAgICAgICAgICBTZXRSb290TWFya1JlYXNvblNjb3BlIHJvb3RTY29wZSh2aXNpdG9yLCBS
b290TWFya1JlYXNvbjo6T3V0cHV0KTsKICAgICAgICAgICAgICAgICBWTSYgdm0gPSB2aXNpdG9y
LnZtKCk7CiAgICAgICAgICAgICAgICAgSlNDZWxsKiBjZWxsID0gc3RhdGljX2Nhc3Q8SlNDZWxs
Kj4oaGVhcENlbGwpOwpAQCAtMjgzMiw3ICsyODQ1LDcgQEAgdm9pZCBIZWFwOjphZGRDb3JlQ29u
c3RyYWludHMoKQogICAgIGlmIChPcHRpb25zOjp1c2VKSVQoKSkgewogICAgICAgICBtX2NvbnN0
cmFpbnRTZXQtPmFkZCgKICAgICAgICAgICAgICJEdyIsICJERkcgV29ya2xpc3RzIiwKLSAgICAg
ICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsKKyAgICAgICAgICAgIFt0aGlz
XSAoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikgewogICAgICAgICAgICAgICAgIFNldFJv
b3RNYXJrUmVhc29uU2NvcGUgcm9vdFNjb3BlKHZpc2l0b3IsIFJvb3RNYXJrUmVhc29uOjpERkdX
b3JrTGlzdHMpOwogCiAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gREZHOjpudW1i
ZXJPZldvcmtsaXN0cygpOyBpLS07KQpAQCAtMjg0MCw3ICsyODUzLDcgQEAgdm9pZCBIZWFwOjph
ZGRDb3JlQ29uc3RyYWludHMoKQogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIC8v
IEZJWE1FOiBUaGlzIGlzIGFsbW9zdCBjZXJ0YWlubHkgdW5uZWNlc3NhcnkuCiAgICAgICAgICAg
ICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NjgyOQot
ICAgICAgICAgICAgICAgIERGRzo6aXRlcmF0ZUNvZGVCbG9ja3NGb3JHQygKKyAgICAgICAgICAg
ICAgICBERkc6Oml0ZXJhdGVDb2RlQmxvY2tzRm9yR0ModmlzaXRvciwKICAgICAgICAgICAgICAg
ICAgICAgbV92bSwKICAgICAgICAgICAgICAgICAgICAgWyZdIChDb2RlQmxvY2sqIGNvZGVCbG9j
aykgewogICAgICAgICAgICAgICAgICAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZChj
b2RlQmxvY2spOwpAQCAtMjg1NSwxMiArMjg2OCwxMiBAQCB2b2lkIEhlYXA6OmFkZENvcmVDb25z
dHJhaW50cygpCiAgICAgCiAgICAgbV9jb25zdHJhaW50U2V0LT5hZGQoCiAgICAgICAgICJDYiIs
ICJDb2RlQmxvY2tzIiwKLSAgICAgICAgW3RoaXNdIChTbG90VmlzaXRvciYgdmlzaXRvcikgewor
ICAgICAgICBbdGhpc10gKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsKICAgICAgICAg
ICAgIFNldFJvb3RNYXJrUmVhc29uU2NvcGUgcm9vdFNjb3BlKHZpc2l0b3IsIFJvb3RNYXJrUmVh
c29uOjpDb2RlQmxvY2tzKTsKLSAgICAgICAgICAgIGl0ZXJhdGVFeGVjdXRpbmdBbmRDb21waWxp
bmdDb2RlQmxvY2tzV2l0aG91dEhvbGRpbmdMb2NrcygKKyAgICAgICAgICAgIGl0ZXJhdGVFeGVj
dXRpbmdBbmRDb21waWxpbmdDb2RlQmxvY2tzV2l0aG91dEhvbGRpbmdMb2Nrcyh2aXNpdG9yLAog
ICAgICAgICAgICAgICAgIFsmXSAoQ29kZUJsb2NrKiBjb2RlQmxvY2spIHsKICAgICAgICAgICAg
ICAgICAgICAgLy8gVmlzaXQgdGhlIENvZGVCbG9jayBhcyBhIGNvbnN0cmFpbnQgb25seSBpZiBp
dCdzIGJsYWNrLgotICAgICAgICAgICAgICAgICAgICBpZiAoaXNNYXJrZWQoY29kZUJsb2NrKQor
ICAgICAgICAgICAgICAgICAgICBpZiAodmlzaXRvci5pc01hcmtlZChjb2RlQmxvY2spCiAgICAg
ICAgICAgICAgICAgICAgICAgICAmJiBjb2RlQmxvY2stPmNlbGxTdGF0ZSgpID09IENlbGxTdGF0
ZTo6UG9zc2libHlCbGFjaykKICAgICAgICAgICAgICAgICAgICAgICAgIHZpc2l0b3IudmlzaXRB
c0NvbnN0cmFpbnQoY29kZUJsb2NrKTsKICAgICAgICAgICAgICAgICB9KTsKQEAgLTMwMjMsNCAr
MzAzNiwzMyBAQCB2b2lkIEhlYXA6OnJ1blRhc2tJblBhcmFsbGVsKFJlZlB0cjxTaGFyCiAgICAg
fQogfQogCit2b2lkIEhlYXA6OnZlcmlmeUdDKCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChtX3Zl
cmlmaWVyU2xvdFZpc2l0b3IpOworICAgIFJFTEVBU0VfQVNTRVJUKCFtX2lzTWFya2luZ0ZvckdD
VmVyaWZpZXIpOworICAgIG1faXNNYXJraW5nRm9yR0NWZXJpZmllciA9IHRydWU7CisKKyAgICBW
ZXJpZmllclNsb3RWaXNpdG9yJiB2aXNpdG9yID0gKm1fdmVyaWZpZXJTbG90VmlzaXRvcjsKKwor
ICAgIGRvIHsKKyAgICAgICAgdmlzaXRvci5kcmFpbigpOworICAgICAgICBtX2NvbnN0cmFpbnRT
ZXQtPmV4ZWN1dGVBbGxTeW5jaHJvbm91c2x5KHZpc2l0b3IpOworICAgICAgICB2aXNpdG9yLmV4
ZWN1dGVDb25zdHJhaW50VGFza3MoKTsKKyAgICB9IHdoaWxlICghdmlzaXRvci5pc0VtcHR5KCkp
OworCisgICAgbV9pc01hcmtpbmdGb3JHQ1ZlcmlmaWVyID0gZmFsc2U7CisKKyAgICB2aXNpdG9y
LmZvckVhY2hMaXZlQ2VsbChbJl0gKEhlYXBDZWxsKiBjZWxsKSB7CisgICAgICAgIGlmIChIZWFw
Ojppc01hcmtlZChjZWxsKSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBkYXRhTG9n
TG4oIlxuIiAiR0MgVmVyaWZpZXI6IEVSUk9SIGNlbGwgIiwgUmF3UG9pbnRlcihjZWxsKSwgIiB3
YXMgbm90IG1hcmtlZCIpOworICAgICAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6dmVyYm9zZVZl
cmlmeUdDKCkpKQorICAgICAgICAgICAgdmlzaXRvci5kdW1wTWFya2VyRGF0YShjZWxsKTsKKyAg
ICAgICAgUkVMRUFTRV9BU1NFUlQodGhpcy0+aXNNYXJrZWQoY2VsbCkpOworICAgIH0pOworCisg
ICAgbV92ZXJpZmllclNsb3RWaXNpdG9yID0gbnVsbHB0cjsKK30KKwogfSAvLyBuYW1lc3BhY2Ug
SlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCShyZXZpc2lvbiAyNzI4MzApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NyArMSw3IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAwIEhhcnJpIFBvcnRlbiAo
cG9ydGVuQGtkZS5vcmcpCiAgKiAgQ29weXJpZ2h0IChDKSAyMDAxIFBldGVyIEtlbGx5IChwbWtA
cG9zdC5jb20pCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMjAgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwMy0yMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKQEAgLTg2LDYgKzg2LDcgQEAg
Y2xhc3MgU3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlcjsKIGNsYXNzIFN0b3BJZk5lY2Vzc2FyeVRp
bWVyOwogY2xhc3MgU3dlZXBpbmdTY29wZTsKIGNsYXNzIFZNOworY2xhc3MgVmVyaWZpZXJTbG90
VmlzaXRvcjsKIGNsYXNzIFdlYWtHQ01hcEJhc2U7CiBzdHJ1Y3QgQ3VycmVudFRocmVhZFN0YXRl
OwogCkBAIC0xODQsOCArMTg1LDYgQEAgcHVibGljOgogICAgIAogICAgIGJvb2wgaXNTaHV0dGlu
Z0Rvd24oKSBjb25zdCB7IHJldHVybiBtX2lzU2h1dHRpbmdEb3duOyB9CiAKLSAgICBKU19FWFBP
UlRfUFJJVkFURSBib29sIGlzQW5hbHl6aW5nSGVhcCgpIGNvbnN0OwotCiAgICAgSlNfRVhQT1JU
X1BSSVZBVEUgdm9pZCBzd2VlcFN5bmNocm9ub3VzbHkoKTsKIAogICAgIGJvb2wgc2hvdWxkQ29s
bGVjdEhldXJpc3RpYygpOwpAQCAtMzg1LDggKzM4NCw2IEBAIHB1YmxpYzoKICAgICAKICAgICBK
U19FWFBPUlRfUFJJVkFURSB2b2lkIGFkZE1hcmtpbmdDb25zdHJhaW50KHN0ZDo6dW5pcXVlX3B0
cjxNYXJraW5nQ29uc3RyYWludD4pOwogICAgIAotICAgIHNpemVfdCBudW1PcGFxdWVSb290cygp
IGNvbnN0IHsgcmV0dXJuIG1fb3BhcXVlUm9vdHMuc2l6ZSgpOyB9Ci0KICAgICBIZWFwVmVyaWZp
ZXIqIHZlcmlmaWVyKCkgY29uc3QgeyByZXR1cm4gbV92ZXJpZmllci5nZXQoKTsgfQogICAgIAog
ICAgIHZvaWQgYWRkSGVhcEZpbmFsaXplckNhbGxiYWNrKGNvbnN0IEhlYXBGaW5hbGl6ZXJDYWxs
YmFjayYpOwpAQCAtNTc2LDEwICs1NzMsMTAgQEAgcHJpdmF0ZToKICAgICBib29sIG92ZXJDcml0
aWNhbE1lbW9yeVRocmVzaG9sZChNZW1vcnlUaHJlc2hvbGRDYWxsVHlwZSBtZW1vcnlUaHJlc2hv
bGRDYWxsVHlwZSA9IE1lbW9yeVRocmVzaG9sZENhbGxUeXBlOjpDYWNoZWQpOwogICAgIAogICAg
IHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+Ci0gICAgdm9pZCBpdGVyYXRlRXhlY3V0aW5nQW5kQ29t
cGlsaW5nQ29kZUJsb2Nrcyhjb25zdCBGdW5jJik7CisgICAgdm9pZCBpdGVyYXRlRXhlY3V0aW5n
QW5kQ29tcGlsaW5nQ29kZUJsb2NrcyhBYnN0cmFjdFNsb3RWaXNpdG9yJiwgY29uc3QgRnVuYyYp
OwogICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+Ci0gICAgdm9pZCBpdGVyYXRlRXhl
Y3V0aW5nQW5kQ29tcGlsaW5nQ29kZUJsb2Nrc1dpdGhvdXRIb2xkaW5nTG9ja3MoY29uc3QgRnVu
YyYpOworICAgIHZvaWQgaXRlcmF0ZUV4ZWN1dGluZ0FuZENvbXBpbGluZ0NvZGVCbG9ja3NXaXRo
b3V0SG9sZGluZ0xvY2tzKEFic3RyYWN0U2xvdFZpc2l0b3ImLCBjb25zdCBGdW5jJik7CiAgICAg
CiAgICAgdm9pZCBhc3NlcnRNYXJrU3RhY2tzRW1wdHkoKTsKIApAQCAtNTkwLDYgKzU4Nyw4IEBA
IHByaXZhdGU6CiAgICAgc3RhdGljIGJvb2wgdXNlR2VuZXJhdGlvbmFsR0MoKTsKICAgICBzdGF0
aWMgYm9vbCBzaG91bGRTd2VlcFN5bmNocm9ub3VzbHkoKTsKICAgICAKKyAgICB2b2lkIHZlcmlm
eUdDKCk7CisKICAgICBjb25zdCBIZWFwVHlwZSBtX2hlYXBUeXBlOwogICAgIE11dGF0b3JTdGF0
ZSBtX211dGF0b3JTdGF0ZSB7IE11dGF0b3JTdGF0ZTo6UnVubmluZyB9OwogICAgIGNvbnN0IHNp
emVfdCBtX3JhbVNpemU7CkBAIC02MzYsNiArNjM1LDcgQEAgcHJpdmF0ZToKICAgICBzdGQ6OnVu
aXF1ZV9wdHI8TWFya1N0YWNrQXJyYXk+IG1fbXV0YXRvck1hcmtTdGFjazsKICAgICBzdGQ6OnVu
aXF1ZV9wdHI8TWFya1N0YWNrQXJyYXk+IG1fcmFjZU1hcmtTdGFjazsKICAgICBzdGQ6OnVuaXF1
ZV9wdHI8TWFya2luZ0NvbnN0cmFpbnRTZXQ+IG1fY29uc3RyYWludFNldDsKKyAgICBzdGQ6OnVu
aXF1ZV9wdHI8VmVyaWZpZXJTbG90VmlzaXRvcj4gbV92ZXJpZmllclNsb3RWaXNpdG9yOwogCiAg
ICAgLy8gV2UgcG9vbCB0aGUgc2xvdCB2aXNpdG9ycyB1c2VkIGJ5IHBhcmFsbGVsIG1hcmtpbmcg
dGhyZWFkcy4gSXQncyB1c2VmdWwgdG8gYmUgYWJsZSB0bwogICAgIC8vIGVudW1lcmF0ZSBvdmVy
IHRoZW0sIGFuZCBpdCdzIHVzZWZ1bCB0byBoYXZlIHRoZW0gY2FjaGUgc29tZSBzbWFsbCBhbW91
bnQgb2YgbWVtb3J5IGZyb20KQEAgLTY1NCw2ICs2NTQsNyBAQCBwcml2YXRlOgogICAgIGJvb2wg
bV9pc1NhZmVUb0NvbGxlY3QgeyBmYWxzZSB9OwogICAgIGJvb2wgbV9pc1NodXR0aW5nRG93biB7
IGZhbHNlIH07CiAgICAgYm9vbCBtX211dGF0b3JTaG91bGRCZUZlbmNlZCB7IE9wdGlvbnM6OmZv
cmNlRmVuY2VkQmFycmllcigpIH07CisgICAgYm9vbCBtX2lzTWFya2luZ0ZvckdDVmVyaWZpZXIg
eyBmYWxzZSB9OwogCiAgICAgdW5zaWduZWQgbV9iYXJyaWVyVGhyZXNob2xkIHsgT3B0aW9uczo6
Zm9yY2VGZW5jZWRCYXJyaWVyKCkgPyB0YXV0b2xvZ2ljYWxUaHJlc2hvbGQgOiBibGFja1RocmVz
aG9sZCB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwSW5saW5lcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBJbmxpbmVzLmgJ
KHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBJbmxp
bmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTY5LDYgKzY5LDcgQEAgaW5saW5lIGJvb2wgSGVhcDo6
d29ybGRJc1N0b3BwZWQoKSBjb25zdAogCiBBTFdBWVNfSU5MSU5FIGJvb2wgSGVhcDo6aXNNYXJr
ZWQoY29uc3Qgdm9pZCogcmF3Q2VsbCkKIHsKKyAgICBBU1NFUlQoIW1faXNNYXJraW5nRm9yR0NW
ZXJpZmllcik7CiAgICAgSGVhcENlbGwqIGNlbGwgPSBiaXR3aXNlX2Nhc3Q8SGVhcENlbGwqPihy
YXdDZWxsKTsKICAgICBpZiAoY2VsbC0+aXNQcmVjaXNlQWxsb2NhdGlvbigpKQogICAgICAgICBy
ZXR1cm4gY2VsbC0+cHJlY2lzZUFsbG9jYXRpb24oKS5pc01hcmtlZCgpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcFByb2ZpbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwUHJvZmlsZXIuY3BwCShyZXZpc2lvbiAyNzI4MzAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwUHJvZmlsZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTYwLDYgKzYwLDcgQEAgdm9pZCBIZWFwUHJvZmlsZXI6OnNldEFjdGl2ZUhlYXBBbmFs
eXplcgogewogICAgIEFTU0VSVCghIW1fYWN0aXZlQW5hbHl6ZXIgIT0gISFhbmFseXplcik7CiAg
ICAgbV9hY3RpdmVBbmFseXplciA9IGFuYWx5emVyOworICAgIG1fdm0uc2V0QWN0aXZlSGVhcEFu
YWx5emVyKGFuYWx5emVyKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9Jc29DZWxsU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvSXNvQ2VsbFNldC5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Jc29DZWxsU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzQsNiAr
MzQsNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAorY2xhc3MgQWJzdHJhY3RTbG90VmlzaXRvcjsK
IGNsYXNzIEhlYXBDZWxsOwogY2xhc3MgSXNvU3Vic3BhY2U7CiAKQEAgLTU5LDcgKzYwLDcgQEAg
cHVibGljOgogICAgIHZvaWQgZm9yRWFjaE1hcmtlZENlbGwoY29uc3QgRnVuYyYpOwogCiAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KLSAgICBSZWY8U2hhcmVkVGFzazx2b2lkKFNsb3RWaXNp
dG9yJik+PiBmb3JFYWNoTWFya2VkQ2VsbEluUGFyYWxsZWwoY29uc3QgRnVuYyYpOworICAgIFJl
ZjxTaGFyZWRUYXNrPHZvaWQoQWJzdHJhY3RTbG90VmlzaXRvciYpPj4gZm9yRWFjaE1hcmtlZENl
bGxJblBhcmFsbGVsKGNvbnN0IEZ1bmMmKTsKICAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBG
dW5jPgogICAgIHZvaWQgZm9yRWFjaExpdmVDZWxsKGNvbnN0IEZ1bmMmKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0lzb0NlbGxTZXRJbmxpbmVzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvQ2VsbFNldElubGluZXMuaAkocmV2aXNpb24g
MjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvQ2VsbFNldElubGluZXMu
aAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3
LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC05Miw5ICs5Miw5IEBAIHZvaWQgSXNvQ2VsbFNldDo6Zm9yRWFjaE1h
cmtlZENlbGwoY29uc3QKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KLVJlZjxTaGFyZWRU
YXNrPHZvaWQoU2xvdFZpc2l0b3ImKT4+IElzb0NlbGxTZXQ6OmZvckVhY2hNYXJrZWRDZWxsSW5Q
YXJhbGxlbChjb25zdCBGdW5jJiBmdW5jKQorUmVmPFNoYXJlZFRhc2s8dm9pZChBYnN0cmFjdFNs
b3RWaXNpdG9yJik+PiBJc29DZWxsU2V0Ojpmb3JFYWNoTWFya2VkQ2VsbEluUGFyYWxsZWwoY29u
c3QgRnVuYyYgZnVuYykKIHsKLSAgICBjbGFzcyBUYXNrIGZpbmFsIDogcHVibGljIFNoYXJlZFRh
c2s8dm9pZChTbG90VmlzaXRvciYpPiB7CisgICAgY2xhc3MgVGFzayBmaW5hbCA6IHB1YmxpYyBT
aGFyZWRUYXNrPHZvaWQoQWJzdHJhY3RTbG90VmlzaXRvciYpPiB7CiAgICAgcHVibGljOgogICAg
ICAgICBUYXNrKElzb0NlbGxTZXQmIHNldCwgY29uc3QgRnVuYyYgZnVuYykKICAgICAgICAgICAg
IDogbV9zZXQoc2V0KQpAQCAtMTAzLDcgKzEwMyw3IEBAIFJlZjxTaGFyZWRUYXNrPHZvaWQoU2xv
dFZpc2l0b3ImKT4+IElzb0MKICAgICAgICAgewogICAgICAgICB9CiAgICAgICAgIAotICAgICAg
ICB2b2lkIHJ1bihTbG90VmlzaXRvciYgdmlzaXRvcikgZmluYWwKKyAgICAgICAgdm9pZCBydW4o
QWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikgZmluYWwKICAgICAgICAgewogICAgICAgICAg
ICAgd2hpbGUgKE1hcmtlZEJsb2NrOjpIYW5kbGUqIGhhbmRsZSA9IG1fYmxvY2tTb3VyY2UtPnJ1
bigpKSB7CiAgICAgICAgICAgICAgICAgdW5zaWduZWQgYmxvY2tJbmRleCA9IGhhbmRsZS0+aW5k
ZXgoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0pJVFN0dWJSb3V0aW5lU2V0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9KSVRTdHViUm91
dGluZVNldC5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0pJVFN0dWJSb3V0aW5lU2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMjgsNyArMTI4LDcgQEAg
dm9pZCBKSVRTdHViUm91dGluZVNldDo6ZGVsZXRlVW5tYXJrZWRKZQogICAgIG1fcm91dGluZXMu
c2hyaW5rKGRzdEluZGV4KTsKIH0KIAotdm9pZCBKSVRTdHViUm91dGluZVNldDo6dHJhY2VNYXJr
ZWRTdHViUm91dGluZXMoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIEpJVFN0dWJSb3V0aW5l
U2V0Ojp0cmFjZU1hcmtlZFN0dWJSb3V0aW5lcyhBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9y
KQogewogICAgIGZvciAoYXV0byYgZW50cnkgOiBtX3JvdXRpbmVzKSB7CiAgICAgICAgIEdDQXdh
cmVKSVRTdHViUm91dGluZSogcm91dGluZSA9IGVudHJ5LnJvdXRpbmU7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9KSVRTdHViUm91dGluZVNldC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0pJVFN0dWJSb3V0aW5lU2V0LmgJKHJldmlzaW9uIDI3
MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0pJVFN0dWJSb3V0aW5lU2V0LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEy
LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEyLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC0zNSw4ICszNSw4IEBAIHVzaW5nIFdURjo6UmFuZ2U7CiAKIG5h
bWVzcGFjZSBKU0MgewogCitjbGFzcyBBYnN0cmFjdFNsb3RWaXNpdG9yOwogY2xhc3MgR0NBd2Fy
ZUpJVFN0dWJSb3V0aW5lOwotY2xhc3MgU2xvdFZpc2l0b3I7CiAKICNpZiBFTkFCTEUoSklUKQog
CkBAIC02Myw4ICs2Myw4IEBAIHB1YmxpYzoKICAgICB2b2lkIHByZXBhcmVGb3JDb25zZXJ2YXRp
dmVTY2FuKCk7CiAgICAgCiAgICAgdm9pZCBkZWxldGVVbm1hcmtlZEpldHRpc29uZWRTdHViUm91
dGluZXMoKTsKLSAgICAKLSAgICB2b2lkIHRyYWNlTWFya2VkU3R1YlJvdXRpbmVzKFNsb3RWaXNp
dG9yJik7CisKKyAgICB2b2lkIHRyYWNlTWFya2VkU3R1YlJvdXRpbmVzKEFic3RyYWN0U2xvdFZp
c2l0b3ImKTsKICAgICAKIHByaXZhdGU6CiAgICAgdm9pZCBtYXJrU2xvdyh1aW50cHRyX3QgYWRk
cmVzcyk7CkBAIC05Miw3ICs5Miw3IEBAIHB1YmxpYzoKICAgICB2b2lkIG1hcmsodm9pZCopIHsg
fQogICAgIHZvaWQgcHJlcGFyZUZvckNvbnNlcnZhdGl2ZVNjYW4oKSB7IH0KICAgICB2b2lkIGRl
bGV0ZVVubWFya2VkSmV0dGlzb25lZFN0dWJSb3V0aW5lcygpIHsgfQotICAgIHZvaWQgdHJhY2VN
YXJrZWRTdHViUm91dGluZXMoU2xvdFZpc2l0b3ImKSB7IH0KKyAgICB2b2lkIHRyYWNlTWFya2Vk
U3R1YlJvdXRpbmVzKEFic3RyYWN0U2xvdFZpc2l0b3ImKSB7IH0KIH07CiAKICNlbmRpZiAvLyAh
RU5BQkxFKEpJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtTdGFja01l
cmdpbmdDb25zdHJhaW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9NYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludC5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtTdGFja01lcmdpbmdDb25zdHJhaW50LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3
LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0yNSw3ICsyNSw2IEBACiAKICNpbmNsdWRlICJjb25maWcuaCIKICNp
bmNsdWRlICJNYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludC5oIgotCiAjaW5jbHVkZSAiR0NTZWdt
ZW50ZWRBcnJheUlubGluZXMuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAKQEAgLTQxLDEy
ICs0MCwxMiBAQCBNYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludDo6fk1hcmtTdGFja01lCiB7CiB9
CiAKLWRvdWJsZSBNYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludDo6cXVpY2tXb3JrRXN0aW1hdGUo
U2xvdFZpc2l0b3ImKQorZG91YmxlIE1hcmtTdGFja01lcmdpbmdDb25zdHJhaW50OjpxdWlja1dv
cmtFc3RpbWF0ZShBYnN0cmFjdFNsb3RWaXNpdG9yJikKIHsKICAgICByZXR1cm4gbV9oZWFwLm1f
bXV0YXRvck1hcmtTdGFjay0+c2l6ZSgpICsgbV9oZWFwLm1fcmFjZU1hcmtTdGFjay0+c2l6ZSgp
OwogfQogCi12b2lkIE1hcmtTdGFja01lcmdpbmdDb25zdHJhaW50OjpwcmVwYXJlVG9FeGVjdXRl
SW1wbChjb25zdCBBYnN0cmFjdExvY2tlciYsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBN
YXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludDo6cHJlcGFyZVRvRXhlY3V0ZUltcGwoY29uc3QgQWJz
dHJhY3RMb2NrZXImLCBBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIC8vIExv
Z2dpbmcgdGhlIHdvcmsgaGVyZSBlbnN1cmVzIHRoYXQgdGhlIGNvbnN0cmFpbnQgc29sdmVyIGtu
b3dzIHRoYXQgaXQgZG9lc24ndCBuZWVkIHRvIHByb2R1Y2UKICAgICAvLyBhbnltb3JlIHdvcmsu
CkBAIC01Niw4ICs1NSwxNyBAQCB2b2lkIE1hcmtTdGFja01lcmdpbmdDb25zdHJhaW50OjpwcmVw
YXJlCiAgICAgZGF0YUxvZ0lmKE9wdGlvbnM6OmxvZ0dDKCksICIoIiwgc2l6ZSwgIikiKTsKIH0K
IAotdm9pZCBNYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludDo6ZXhlY3V0ZUltcGwoU2xvdFZpc2l0
b3ImIHZpc2l0b3IpCit2b2lkIE1hcmtTdGFja01lcmdpbmdDb25zdHJhaW50OjpleGVjdXRlSW1w
bChBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogeworICAgIC8vIFdlIHdhbnQgdG8gc2tp
cCB0aGlzIGNvbnN0cmFpbnQgZm9yIHRoZSBHQyB2ZXJpZmllciBiZWNhdXNlOgorICAgIC8vIDEu
IFRoZXJlIHNob3VsZCBiZSBubyBtdXRhdG9yIG1hcmtpbmcgYWN0aW9uIGJldHdlZW4gdGhlIEVu
ZCBwaGFzZSBhbmQgdmVyaWZ5R0MoKS4KKyAgICAvLyAgICBIZW5jZSwgd2UgY2FuIGlnbm9yZSB0
aHNlIHN0YWNrcy4KKyAgICAvLyAyLiBUaGUgRW5kIHBoYXNlIGV4cGxpY3RseSBjYWxscyBpdGVy
YXRlRXhlY3V0aW5nQW5kQ29tcGlsaW5nQ29kZUJsb2NrcygpCisgICAgLy8gICAgdG8gYWRkIGV4
ZWN1dGluZyBDb2RlQmxvY2tzIHRvIG1faGVhcC5tX211dGF0b3JNYXJrU3RhY2suIFdlIHdhbnQg
dG8KKyAgICAvLyAgICBsZWF2ZSB0aG9zZSB1bnBlcnR1cmJlZC4KKyAgICBpZiAobV9oZWFwLm1f
aXNNYXJraW5nRm9yR0NWZXJpZmllcikKKyAgICAgICAgcmV0dXJuOworCiAgICAgbV9oZWFwLm1f
bXV0YXRvck1hcmtTdGFjay0+dHJhbnNmZXJUbyh2aXNpdG9yLm11dGF0b3JNYXJrU3RhY2soKSk7
CiAgICAgbV9oZWFwLm1fcmFjZU1hcmtTdGFjay0+dHJhbnNmZXJUbyh2aXNpdG9yLm11dGF0b3JN
YXJrU3RhY2soKSk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3Rh
Y2tNZXJnaW5nQ29uc3RyYWludC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL01hcmtTdGFja01lcmdpbmdDb25zdHJhaW50LmgJKHJldmlzaW9uIDI3MjgzMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtTdGFja01lcmdpbmdDb25zdHJhaW50LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTMwLDE4ICszMCwxOCBAQAogbmFtZXNwYWNlIEpTQyB7CiAKIGNs
YXNzIEhlYXA7Ci1jbGFzcyBTbG90VmlzaXRvcjsKK2NsYXNzIEFic3RyYWN0U2xvdFZpc2l0b3I7
CiAKIGNsYXNzIE1hcmtTdGFja01lcmdpbmdDb25zdHJhaW50IGZpbmFsIDogcHVibGljIE1hcmtp
bmdDb25zdHJhaW50IHsKIHB1YmxpYzoKICAgICBNYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludChI
ZWFwJik7CiAgICAgfk1hcmtTdGFja01lcmdpbmdDb25zdHJhaW50KCkgZmluYWw7CiAgICAgCi0g
ICAgZG91YmxlIHF1aWNrV29ya0VzdGltYXRlKFNsb3RWaXNpdG9yJikgZmluYWw7CisgICAgZG91
YmxlIHF1aWNrV29ya0VzdGltYXRlKEFic3RyYWN0U2xvdFZpc2l0b3ImKSBmaW5hbDsKICAgICAK
IHByaXZhdGU6Ci0gICAgdm9pZCBwcmVwYXJlVG9FeGVjdXRlSW1wbChjb25zdCBBYnN0cmFjdExv
Y2tlciYgY29uc3RyYWludFNvbHZpbmdMb2NrZXIsIFNsb3RWaXNpdG9yJikgZmluYWw7Ci0gICAg
dm9pZCBleGVjdXRlSW1wbChTbG90VmlzaXRvciYpIGZpbmFsOworICAgIHZvaWQgcHJlcGFyZVRv
RXhlY3V0ZUltcGwoY29uc3QgQWJzdHJhY3RMb2NrZXImIGNvbnN0cmFpbnRTb2x2aW5nTG9ja2Vy
LCBBYnN0cmFjdFNsb3RWaXNpdG9yJikgZmluYWw7CisgICAgdm9pZCBleGVjdXRlSW1wbChBYnN0
cmFjdFNsb3RWaXNpdG9yJikgZmluYWw7CiAgICAgCiAgICAgSGVhcCYgbV9oZWFwOwogfTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suaAkocmV2aXNpb24gMjcy
ODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjAwLDYgKzIwMCw3IEBAIHB1YmxpYzoKICAgICAgICAgCiAgICAgICAgIHZv
aWQqIHN0YXJ0KCkgY29uc3QgeyByZXR1cm4gJm1fYmxvY2stPmF0b21zKClbMF07IH0KICAgICAg
ICAgdm9pZCogZW5kKCkgY29uc3QgeyByZXR1cm4gJm1fYmxvY2stPmF0b21zKClbbV9lbmRBdG9t
XTsgfQorICAgICAgICB2b2lkKiBhdG9tQXQoc2l6ZV90IGkpIGNvbnN0IHsgcmV0dXJuICZtX2Js
b2NrLT5hdG9tcygpW2ldOyB9CiAgICAgICAgIGJvb2wgY29udGFpbnModm9pZCogcCkgY29uc3Qg
eyByZXR1cm4gc3RhcnQoKSA8PSBwICYmIHAgPCBlbmQoKTsgfQogCiAgICAgICAgIHZvaWQgZHVt
cFN0YXRlKFByaW50U3RyZWFtJik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9N
YXJrZWRTcGFjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
TWFya2VkU3BhY2UuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9NYXJrZWRTcGFjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3Miw3ICsyNzIsNyBA
QCB2b2lkIE1hcmtlZFNwYWNlOjplbmFibGVQcmVjaXNlQWxsb2NhdGlvCiAgICAgICAgIG1fcHJl
Y2lzZUFsbG9jYXRpb25TZXQtPmFkZChhbGxvY2F0aW9uLT5jZWxsKCkpOwogfQogCi12b2lkIE1h
cmtlZFNwYWNlOjp2aXNpdFdlYWtTZXRzKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBNYXJr
ZWRTcGFjZTo6dmlzaXRXZWFrU2V0cyhBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewog
ICAgIGF1dG8gdmlzaXQgPSBbJl0gKFdlYWtTZXQqIHdlYWtTZXQpIHsKICAgICAgICAgd2Vha1Nl
dC0+dmlzaXQodmlzaXRvcik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJr
ZWRTcGFjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtl
ZFNwYWNlLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L01hcmtlZFNwYWNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSw3IEBACiAvKgogICogIENv
cHlyaWdodCAoQykgMTk5OS0yMDAwIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCiAgKiAg
Q29weXJpZ2h0IChDKSAyMDAxIFBldGVyIEtlbGx5IChwbWtAcG9zdC5jb20pCi0gKiAgQ29weXJp
Z2h0IChDKSAyMDAzLTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENv
cHlyaWdodCAoQykgMjAwMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNz
ZXIgR2VuZXJhbCBQdWJsaWMKQEAgLTM3LDYgKzM3LDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAK
K2NsYXNzIEFic3RyYWN0U2xvdFZpc2l0b3I7CiBjbGFzcyBDb21wbGV0ZVN1YnNwYWNlOwogY2xh
c3MgSGVhcDsKIGNsYXNzIEhlYXBDZWxsOwpAQCAtMTA1LDcgKzEwNiw3IEBAIHB1YmxpYzoKICAg
ICAKICAgICB2b2lkIHByZXBhcmVGb3JBbGxvY2F0aW9uKCk7CiAKLSAgICB2b2lkIHZpc2l0V2Vh
a1NldHMoU2xvdFZpc2l0b3ImKTsKKyAgICB2b2lkIHZpc2l0V2Vha1NldHMoQWJzdHJhY3RTbG90
VmlzaXRvciYpOwogICAgIHZvaWQgcmVhcFdlYWtTZXRzKCk7CiAKICAgICBNYXJrZWRCbG9ja1Nl
dCYgYmxvY2tzKCkgeyByZXR1cm4gbV9ibG9ja3M7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludC5jcHAJKHJldmlzaW9uIDI3MjgzMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAi
TWFya2luZ0NvbnN0cmFpbnQuaCIKIAorI2luY2x1ZGUgIkFic3RyYWN0U2xvdFZpc2l0b3JJbmxp
bmVzLmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIlZpc2l0Q291bnRlci5o
IgogCkBAIC01MSw3ICs1Miw3IEBAIHZvaWQgTWFya2luZ0NvbnN0cmFpbnQ6OnJlc2V0U3RhdHMo
KQogICAgIG1fbGFzdFZpc2l0Q291bnQgPSAwOwogfQogCi12b2lkIE1hcmtpbmdDb25zdHJhaW50
OjpleGVjdXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBNYXJraW5nQ29uc3RyYWludDo6
ZXhlY3V0ZShBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFZpc2l0Q291bnRl
ciB2aXNpdENvdW50ZXIodmlzaXRvcik7CiAgICAgZXhlY3V0ZUltcGwodmlzaXRvcik7CkBAIC02
MCwxNyArNjEsMjMgQEAgdm9pZCBNYXJraW5nQ29uc3RyYWludDo6ZXhlY3V0ZShTbG90VmlzaQog
ICAgICAgICBkYXRhTG9nKCIoIiwgYWJicmV2aWF0ZWROYW1lKCksICIgdmlzaXRlZCAiLCB2aXNp
dENvdW50ZXIudmlzaXRDb3VudCgpLCAiIGluIGV4ZWN1dGUpIik7CiB9CiAKLWRvdWJsZSBNYXJr
aW5nQ29uc3RyYWludDo6cXVpY2tXb3JrRXN0aW1hdGUoU2xvdFZpc2l0b3ImKQordm9pZCBNYXJr
aW5nQ29uc3RyYWludDo6ZXhlY3V0ZVN5bmNocm9ub3VzbHkoQWJzdHJhY3RTbG90VmlzaXRvciYg
dmlzaXRvcikKK3sKKyAgICBwcmVwYXJlVG9FeGVjdXRlSW1wbChOb0xvY2tpbmdOZWNlc3Nhcnks
IHZpc2l0b3IpOworICAgIGV4ZWN1dGVJbXBsKHZpc2l0b3IpOworfQorCitkb3VibGUgTWFya2lu
Z0NvbnN0cmFpbnQ6OnF1aWNrV29ya0VzdGltYXRlKEFic3RyYWN0U2xvdFZpc2l0b3ImKQogewog
ICAgIHJldHVybiAwOwogfQogCi1kb3VibGUgTWFya2luZ0NvbnN0cmFpbnQ6OndvcmtFc3RpbWF0
ZShTbG90VmlzaXRvciYgdmlzaXRvcikKK2RvdWJsZSBNYXJraW5nQ29uc3RyYWludDo6d29ya0Vz
dGltYXRlKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgcmV0dXJuIGxhc3RW
aXNpdENvdW50KCkgKyBxdWlja1dvcmtFc3RpbWF0ZSh2aXNpdG9yKTsKIH0KIAotdm9pZCBNYXJr
aW5nQ29uc3RyYWludDo6cHJlcGFyZVRvRXhlY3V0ZShjb25zdCBBYnN0cmFjdExvY2tlciYgY29u
c3RyYWludFNvbHZpbmdMb2NrZXIsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBNYXJraW5n
Q29uc3RyYWludDo6cHJlcGFyZVRvRXhlY3V0ZShjb25zdCBBYnN0cmFjdExvY2tlciYgY29uc3Ry
YWludFNvbHZpbmdMb2NrZXIsIEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAg
ZGF0YUxvZ0lmKE9wdGlvbnM6OmxvZ0dDKCksIGFiYnJldmlhdGVkTmFtZSgpKTsKICAgICBWaXNp
dENvdW50ZXIgdmlzaXRDb3VudGVyKHZpc2l0b3IpOwpAQCAtODAsNyArODcsNyBAQCB2b2lkIE1h
cmtpbmdDb25zdHJhaW50OjpwcmVwYXJlVG9FeGVjdXRlCiAgICAgICAgIGRhdGFMb2coIigiLCBh
YmJyZXZpYXRlZE5hbWUoKSwgIiB2aXNpdGVkICIsIHZpc2l0Q291bnRlci52aXNpdENvdW50KCks
ICIgaW4gcHJlcGFyZVRvRXhlY3V0ZSkiKTsKIH0KIAotdm9pZCBNYXJraW5nQ29uc3RyYWludDo6
ZG9QYXJhbGxlbFdvcmsoU2xvdFZpc2l0b3ImIHZpc2l0b3IsIFNoYXJlZFRhc2s8dm9pZChTbG90
VmlzaXRvciYpPiYgdGFzaykKK3ZvaWQgTWFya2luZ0NvbnN0cmFpbnQ6OmRvUGFyYWxsZWxXb3Jr
KEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIFNoYXJlZFRhc2s8dm9pZChBYnN0cmFjdFNs
b3RWaXNpdG9yJik+JiB0YXNrKQogewogICAgIFZpc2l0Q291bnRlciB2aXNpdENvdW50ZXIodmlz
aXRvcik7CiAgICAgdGFzay5ydW4odmlzaXRvcik7CkBAIC05Miw3ICs5OSw3IEBAIHZvaWQgTWFy
a2luZ0NvbnN0cmFpbnQ6OmRvUGFyYWxsZWxXb3JrKFMKICAgICB9CiB9CiAKLXZvaWQgTWFya2lu
Z0NvbnN0cmFpbnQ6OnByZXBhcmVUb0V4ZWN1dGVJbXBsKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwg
U2xvdFZpc2l0b3ImKQordm9pZCBNYXJraW5nQ29uc3RyYWludDo6cHJlcGFyZVRvRXhlY3V0ZUlt
cGwoY29uc3QgQWJzdHJhY3RMb2NrZXImLCBBYnN0cmFjdFNsb3RWaXNpdG9yJikKIHsKIH0KIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludC5o
CShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5n
Q29uc3RyYWludC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM4LDcgKzM4LDcgQEAKIG5hbWVzcGFjZSBKU0Mg
ewogCiBjbGFzcyBNYXJraW5nQ29uc3RyYWludFNldDsKLWNsYXNzIFNsb3RWaXNpdG9yOworY2xh
c3MgQWJzdHJhY3RTbG90VmlzaXRvcjsKIAogY2xhc3MgTWFya2luZ0NvbnN0cmFpbnQgewogICAg
IFdURl9NQUtFX05PTkNPUFlBQkxFKE1hcmtpbmdDb25zdHJhaW50KTsKQEAgLTYwLDE1ICs2MCwx
NSBAQCBwdWJsaWM6CiAgICAgCiAgICAgc2l6ZV90IGxhc3RWaXNpdENvdW50KCkgY29uc3QgeyBy
ZXR1cm4gbV9sYXN0VmlzaXRDb3VudDsgfQogICAgIAotICAgIHZvaWQgZXhlY3V0ZShTbG90Vmlz
aXRvciYpOwotICAgIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIHZpcnR1YWwgZG91YmxlIHF1aWNr
V29ya0VzdGltYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKTsKKyAgICB2b2lkIGV4ZWN1dGUoQWJz
dHJhY3RTbG90VmlzaXRvciYpOworCisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdmlydHVhbCBkb3Vi
bGUgcXVpY2tXb3JrRXN0aW1hdGUoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcik7CiAgICAg
Ci0gICAgZG91YmxlIHdvcmtFc3RpbWF0ZShTbG90VmlzaXRvciYgdmlzaXRvcik7CisgICAgZG91
YmxlIHdvcmtFc3RpbWF0ZShBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKTsKICAgICAKLSAg
ICB2b2lkIHByZXBhcmVUb0V4ZWN1dGUoY29uc3QgQWJzdHJhY3RMb2NrZXImIGNvbnN0cmFpbnRT
b2x2aW5nTG9ja2VyLCBTbG90VmlzaXRvciYpOworICAgIHZvaWQgcHJlcGFyZVRvRXhlY3V0ZShj
b25zdCBBYnN0cmFjdExvY2tlciYgY29uc3RyYWludFNvbHZpbmdMb2NrZXIsIEFic3RyYWN0U2xv
dFZpc2l0b3ImKTsKICAgICAKLSAgICB2b2lkIGRvUGFyYWxsZWxXb3JrKFNsb3RWaXNpdG9yJiwg
U2hhcmVkVGFzazx2b2lkKFNsb3RWaXNpdG9yJik+Jik7CisgICAgdm9pZCBkb1BhcmFsbGVsV29y
ayhBYnN0cmFjdFNsb3RWaXNpdG9yJiwgU2hhcmVkVGFzazx2b2lkKEFic3RyYWN0U2xvdFZpc2l0
b3ImKT4mKTsKICAgICAKICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eSB2b2xhdGlsaXR5KCkgY29u
c3QgeyByZXR1cm4gbV92b2xhdGlsaXR5OyB9CiAgICAgCkBAIC03Niw5ICs3NiwxMSBAQCBwdWJs
aWM6CiAgICAgQ29uc3RyYWludFBhcmFsbGVsaXNtIHBhcmFsbGVsaXNtKCkgY29uc3QgeyByZXR1
cm4gbV9wYXJhbGxlbGlzbTsgfQogCiBwcm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCB2b2lkIGV4ZWN1
dGVJbXBsKFNsb3RWaXNpdG9yJikgPSAwOwotICAgIEpTX0VYUE9SVF9QUklWQVRFIHZpcnR1YWwg
dm9pZCBwcmVwYXJlVG9FeGVjdXRlSW1wbChjb25zdCBBYnN0cmFjdExvY2tlciYgY29uc3RyYWlu
dFNvbHZpbmdMb2NrZXIsIFNsb3RWaXNpdG9yJik7Ci0gICAgCisgICAgdmlydHVhbCB2b2lkIGV4
ZWN1dGVJbXBsKEFic3RyYWN0U2xvdFZpc2l0b3ImKSA9IDA7CisgICAgSlNfRVhQT1JUX1BSSVZB
VEUgdmlydHVhbCB2b2lkIHByZXBhcmVUb0V4ZWN1dGVJbXBsKGNvbnN0IEFic3RyYWN0TG9ja2Vy
JiBjb25zdHJhaW50U29sdmluZ0xvY2tlciwgQWJzdHJhY3RTbG90VmlzaXRvciYpOworCisgICAg
dm9pZCBleGVjdXRlU3luY2hyb25vdXNseShBYnN0cmFjdFNsb3RWaXNpdG9yJik7CisKIHByaXZh
dGU6CiAgICAgZnJpZW5kIGNsYXNzIE1hcmtpbmdDb25zdHJhaW50U2V0OyAvLyBTbyBpdCBjYW4g
c2V0IG1faW5kZXguCiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJr
aW5nQ29uc3RyYWludFNldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvTWFya2luZ0NvbnN0cmFpbnRTZXQuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludFNldC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIxIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtNjMsNyArNjMsNyBAQCB2b2lkIE1hcmtpbmdDb25zdHJhaW50U2V0OjpkaWRTdGFydE1h
cmtpCiAgICAgbV9pdGVyYXRpb24gPSAxOwogfQogCi12b2lkIE1hcmtpbmdDb25zdHJhaW50U2V0
OjphZGQoQ1N0cmluZyBhYmJyZXZpYXRlZE5hbWUsIENTdHJpbmcgbmFtZSwgOjpGdW5jdGlvbjx2
b2lkKFNsb3RWaXNpdG9yJik+IGZ1bmN0aW9uLCBDb25zdHJhaW50Vm9sYXRpbGl0eSB2b2xhdGls
aXR5LCBDb25zdHJhaW50Q29uY3VycmVuY3kgY29uY3VycmVuY3ksIENvbnN0cmFpbnRQYXJhbGxl
bGlzbSBwYXJhbGxlbGlzbSkKK3ZvaWQgTWFya2luZ0NvbnN0cmFpbnRTZXQ6OmFkZChDU3RyaW5n
IGFiYnJldmlhdGVkTmFtZSwgQ1N0cmluZyBuYW1lLCA6OkZ1bmN0aW9uPHZvaWQoQWJzdHJhY3RT
bG90VmlzaXRvciYpPiBmdW5jdGlvbiwgQ29uc3RyYWludFZvbGF0aWxpdHkgdm9sYXRpbGl0eSwg
Q29uc3RyYWludENvbmN1cnJlbmN5IGNvbmN1cnJlbmN5LCBDb25zdHJhaW50UGFyYWxsZWxpc20g
cGFyYWxsZWxpc20pCiB7CiAgICAgYWRkKG1ha2VVbmlxdWU8U2ltcGxlTWFya2luZ0NvbnN0cmFp
bnQ+KFdURk1vdmUoYWJicmV2aWF0ZWROYW1lKSwgV1RGTW92ZShuYW1lKSwgV1RGTW92ZShmdW5j
dGlvbiksIHZvbGF0aWxpdHksIGNvbmN1cnJlbmN5LCBwYXJhbGxlbGlzbSkpOwogfQpAQCAtNzgs
MTQgKzc4LDE0IEBAIHZvaWQgTWFya2luZ0NvbnN0cmFpbnRTZXQ6OmFkZCgKICAgICBtX3NldC5h
cHBlbmQoV1RGTW92ZShjb25zdHJhaW50KSk7CiB9CiAKLWJvb2wgTWFya2luZ0NvbnN0cmFpbnRT
ZXQ6OmV4ZWN1dGVDb252ZXJnZW5jZShTbG90VmlzaXRvciYgdmlzaXRvcikKK2Jvb2wgTWFya2lu
Z0NvbnN0cmFpbnRTZXQ6OmV4ZWN1dGVDb252ZXJnZW5jZShBYnN0cmFjdFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQogewogICAgIGJvb2wgcmVzdWx0ID0gZXhlY3V0ZUNvbnZlcmdlbmNlSW1wbCh2aXNp
dG9yKTsKICAgICBkYXRhTG9nSWYoT3B0aW9uczo6bG9nR0MoKSwgIiAiKTsKICAgICByZXR1cm4g
cmVzdWx0OwogfQogCi1ib29sIE1hcmtpbmdDb25zdHJhaW50U2V0Ojppc1dhdmVmcm9udEFkdmFu
Y2luZyhTbG90VmlzaXRvciYgdmlzaXRvcikKK2Jvb2wgTWFya2luZ0NvbnN0cmFpbnRTZXQ6Omlz
V2F2ZWZyb250QWR2YW5jaW5nKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAg
Zm9yIChNYXJraW5nQ29uc3RyYWludCogb3V0Z3Jvd3RoIDogbV9vdXRncm93dGhzKSB7CiAgICAg
ICAgIGlmIChvdXRncm93dGgtPndvcmtFc3RpbWF0ZSh2aXNpdG9yKSkKQEAgLTk0LDcgKzk0LDcg
QEAgYm9vbCBNYXJraW5nQ29uc3RyYWludFNldDo6aXNXYXZlZnJvbnRBZAogICAgIHJldHVybiBm
YWxzZTsKIH0KIAotYm9vbCBNYXJraW5nQ29uc3RyYWludFNldDo6ZXhlY3V0ZUNvbnZlcmdlbmNl
SW1wbChTbG90VmlzaXRvciYgdmlzaXRvcikKK2Jvb2wgTWFya2luZ0NvbnN0cmFpbnRTZXQ6OmV4
ZWN1dGVDb252ZXJnZW5jZUltcGwoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAg
ICBTdXBlclNhbXBsZXJTY29wZSBzdXBlclNhbXBsZXJTY29wZShmYWxzZSk7CiAgICAgTWFya2lu
Z0NvbnN0cmFpbnRTb2x2ZXIgc29sdmVyKCp0aGlzKTsKQEAgLTE2NiwxMCArMTY2LDEwIEBAIGJv
b2wgTWFya2luZ0NvbnN0cmFpbnRTZXQ6OmV4ZWN1dGVDb252ZXIKICAgICByZXR1cm4gIXNvbHZl
ci5kaWRWaXNpdFNvbWV0aGluZygpOwogfQogCi12b2lkIE1hcmtpbmdDb25zdHJhaW50U2V0Ojpl
eGVjdXRlQWxsKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBNYXJraW5nQ29uc3RyYWludFNl
dDo6ZXhlY3V0ZUFsbFN5bmNocm9ub3VzbHkoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikK
IHsKICAgICBmb3IgKGF1dG8mIGNvbnN0cmFpbnQgOiBtX3NldCkKLSAgICAgICAgY29uc3RyYWlu
dC0+ZXhlY3V0ZSh2aXNpdG9yKTsKKyAgICAgICAgY29uc3RyYWludC0+ZXhlY3V0ZVN5bmNocm9u
b3VzbHkodmlzaXRvcik7CiAgICAgZGF0YUxvZ0lmKE9wdGlvbnM6OmxvZ0dDKCksICIgIik7CiB9
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50U2V0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0
cmFpbnRTZXQuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvTWFya2luZ0NvbnN0cmFpbnRTZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00NiwxNCArNDYsMTQgQEAg
cHVibGljOgogICAgIHZvaWQgYWRkKAogICAgICAgICBDU3RyaW5nIGFiYnJldmlhdGVkTmFtZSwK
ICAgICAgICAgQ1N0cmluZyBuYW1lLAotICAgICAgICA6OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0
b3ImKT4sCisgICAgICAgIDo6RnVuY3Rpb248dm9pZChBYnN0cmFjdFNsb3RWaXNpdG9yJik+LAog
ICAgICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eSwKICAgICAgICAgQ29uc3RyYWludENvbmN1cnJl
bmN5ID0gQ29uc3RyYWludENvbmN1cnJlbmN5OjpDb25jdXJyZW50LAogICAgICAgICBDb25zdHJh
aW50UGFyYWxsZWxpc20gPSBDb25zdHJhaW50UGFyYWxsZWxpc206OlNlcXVlbnRpYWwpOwogICAg
IAogICAgIHZvaWQgYWRkKAogICAgICAgICBDU3RyaW5nIGFiYnJldmlhdGVkTmFtZSwgQ1N0cmlu
ZyBuYW1lLAotICAgICAgICA6OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3ImKT4gZnVuYywKKyAg
ICAgICAgOjpGdW5jdGlvbjx2b2lkKEFic3RyYWN0U2xvdFZpc2l0b3ImKT4gZnVuYywKICAgICAg
ICAgQ29uc3RyYWludFZvbGF0aWxpdHkgdm9sYXRpbGl0eSwKICAgICAgICAgQ29uc3RyYWludFBh
cmFsbGVsaXNtIHBhcmFsbGVsaXNtKQogICAgIHsKQEAgLTY0LDIwICs2NCwyMCBAQCBwdWJsaWM6
CiAgICAgCiAgICAgLy8gQXNzdW1pbmcgdGhhdCB0aGUgbWFyayBzdGFja3MgYXJlIGFsbCBlbXB0
eSwgdGhpcyB3aWxsIGdpdmUgeW91IGEgZ3Vlc3MgYXMgdG8gd2hldGhlciBvcgogICAgIC8vIG5v
dCB0aGUgd2F2ZWZyb250IGlzIGFkdmFuY2luZy4KLSAgICBib29sIGlzV2F2ZWZyb250QWR2YW5j
aW5nKFNsb3RWaXNpdG9yJik7Ci0gICAgYm9vbCBpc1dhdmVmcm9udFJldHJlYXRpbmcoU2xvdFZp
c2l0b3ImIHZpc2l0b3IpIHsgcmV0dXJuICFpc1dhdmVmcm9udEFkdmFuY2luZyh2aXNpdG9yKTsg
fQorICAgIGJvb2wgaXNXYXZlZnJvbnRBZHZhbmNpbmcoQWJzdHJhY3RTbG90VmlzaXRvciYpOwor
ICAgIGJvb2wgaXNXYXZlZnJvbnRSZXRyZWF0aW5nKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0
b3IpIHsgcmV0dXJuICFpc1dhdmVmcm9udEFkdmFuY2luZyh2aXNpdG9yKTsgfQogICAgIAogICAg
IC8vIFJldHVybnMgdHJ1ZSBpZiB0aGlzIGV4ZWN1dGVkIGFsbCBjb25zdHJhaW50cyBhbmQgbm9u
ZSBvZiB0aGVtIHByb2R1Y2VkIG5ldyB3b3JrLiBUaGlzCiAgICAgLy8gYXNzdW1lcyB0aGF0IHlv
dSd2ZSBhbHJhZWR5IHZpc2l0ZWQgcm9vdHMgYW5kIGRyYWluZWQgZnJvbSB0aGVyZS4KLSAgICBi
b29sIGV4ZWN1dGVDb252ZXJnZW5jZShTbG90VmlzaXRvciYpOwotICAgIAorICAgIGJvb2wgZXhl
Y3V0ZUNvbnZlcmdlbmNlKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKKwogICAgIC8vIFNpbXBseSBy
dW5zIGFsbCBjb25zdHJhaW50cyB3aXRob3V0IGFueSBzaGVuYW5pZ2Fucy4KLSAgICB2b2lkIGV4
ZWN1dGVBbGwoU2xvdFZpc2l0b3ImKTsKKyAgICB2b2lkIGV4ZWN1dGVBbGxTeW5jaHJvbm91c2x5
KEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKICAgICAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNz
IE1hcmtpbmdDb25zdHJhaW50U29sdmVyOwotICAgIAotICAgIGJvb2wgZXhlY3V0ZUNvbnZlcmdl
bmNlSW1wbChTbG90VmlzaXRvciYpOworCisgICAgYm9vbCBleGVjdXRlQ29udmVyZ2VuY2VJbXBs
KEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKICAgICAKICAgICBIZWFwJiBtX2hlYXA7CiAgICAgQml0
VmVjdG9yIG1fdW5leGVjdXRlZFJvb3RzOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50U29sdmVyLmNwcAkocmV2aXNpb24gMjcy
ODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnRTb2x2
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTE1MCwxMyArMTUwLDEzIEBAIHZvaWQgTWFya2luZ0NvbnN0
cmFpbnRTb2x2ZXI6OmV4ZWN1dGUoTWEKICAgICBtX2V4ZWN1dGVkLnNldChjb25zdHJhaW50Lmlu
ZGV4KCkpOwogfQogCi12b2lkIE1hcmtpbmdDb25zdHJhaW50U29sdmVyOjphZGRQYXJhbGxlbFRh
c2soUmVmUHRyPFNoYXJlZFRhc2s8dm9pZChTbG90VmlzaXRvciYpPj4gdGFzaywgTWFya2luZ0Nv
bnN0cmFpbnQmIGNvbnN0cmFpbnQpCit2b2lkIE1hcmtpbmdDb25zdHJhaW50U29sdmVyOjphZGRQ
YXJhbGxlbFRhc2soUmVmUHRyPFNoYXJlZFRhc2s8dm9pZChBYnN0cmFjdFNsb3RWaXNpdG9yJik+
PiB0YXNrLCBNYXJraW5nQ29uc3RyYWludCYgY29uc3RyYWludCkKIHsKICAgICBhdXRvIGxvY2tl
ciA9IGhvbGRMb2NrKG1fbG9jayk7CiAgICAgbV90b0V4ZWN1dGVJblBhcmFsbGVsLmFwcGVuZChU
YXNrV2l0aENvbnN0cmFpbnQoV1RGTW92ZSh0YXNrKSwgJmNvbnN0cmFpbnQpKTsKIH0KIAotdm9p
ZCBNYXJraW5nQ29uc3RyYWludFNvbHZlcjo6cnVuRXhlY3V0aW9uVGhyZWFkKFNsb3RWaXNpdG9y
JiB2aXNpdG9yLCBTY2hlZHVsZXJQcmVmZXJlbmNlIHByZWZlcmVuY2UsIFNjb3BlZExhbWJkYTxP
cHRpb25hbDx1bnNpZ25lZD4oKT4gcGlja05leHQpCit2b2lkIE1hcmtpbmdDb25zdHJhaW50U29s
dmVyOjpydW5FeGVjdXRpb25UaHJlYWQoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvciwgU2No
ZWR1bGVyUHJlZmVyZW5jZSBwcmVmZXJlbmNlLCBTY29wZWRMYW1iZGE8T3B0aW9uYWw8dW5zaWdu
ZWQ+KCk+IHBpY2tOZXh0KQogewogICAgIGZvciAoOzspIHsKICAgICAgICAgYm9vbCBkb1BhcmFs
bGVsV29ya01vZGU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29u
c3RyYWludFNvbHZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L01hcmtpbmdDb25zdHJhaW50U29sdmVyLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50U29sdmVyLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIxIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtNjUsMTUgKzY1LDE1IEBAIHB1YmxpYzoKICAgICB2b2lkIGV4ZWN1dGUoTWFya2luZ0NvbnN0
cmFpbnQmKTsKICAgICAKICAgICAvLyBQYXJhbGxlbCBjb25zdHJhaW50cyBjYW4gYWRkIHBhcmFs
bGVsIHRhc2tzLgotICAgIHZvaWQgYWRkUGFyYWxsZWxUYXNrKFJlZlB0cjxTaGFyZWRUYXNrPHZv
aWQoU2xvdFZpc2l0b3ImKT4+LCBNYXJraW5nQ29uc3RyYWludCYpOworICAgIHZvaWQgYWRkUGFy
YWxsZWxUYXNrKFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoQWJzdHJhY3RTbG90VmlzaXRvciYpPj4s
IE1hcmtpbmdDb25zdHJhaW50Jik7CiAgICAgCiBwcml2YXRlOgotICAgIHZvaWQgcnVuRXhlY3V0
aW9uVGhyZWFkKFNsb3RWaXNpdG9yJiwgU2NoZWR1bGVyUHJlZmVyZW5jZSwgU2NvcGVkTGFtYmRh
PE9wdGlvbmFsPHVuc2lnbmVkPigpPiBwaWNrTmV4dCk7CisgICAgdm9pZCBydW5FeGVjdXRpb25U
aHJlYWQoQWJzdHJhY3RTbG90VmlzaXRvciYsIFNjaGVkdWxlclByZWZlcmVuY2UsIFNjb3BlZExh
bWJkYTxPcHRpb25hbDx1bnNpZ25lZD4oKT4gcGlja05leHQpOwogICAgIAogICAgIHN0cnVjdCBU
YXNrV2l0aENvbnN0cmFpbnQgewogICAgICAgICBUYXNrV2l0aENvbnN0cmFpbnQoKSB7IH0KICAg
ICAgICAgCi0gICAgICAgIFRhc2tXaXRoQ29uc3RyYWludChSZWZQdHI8U2hhcmVkVGFzazx2b2lk
KFNsb3RWaXNpdG9yJik+PiB0YXNrLCBNYXJraW5nQ29uc3RyYWludCogY29uc3RyYWludCkKKyAg
ICAgICAgVGFza1dpdGhDb25zdHJhaW50KFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoQWJzdHJhY3RT
bG90VmlzaXRvciYpPj4gdGFzaywgTWFya2luZ0NvbnN0cmFpbnQqIGNvbnN0cmFpbnQpCiAgICAg
ICAgICAgICA6IHRhc2soV1RGTW92ZSh0YXNrKSkKICAgICAgICAgICAgICwgY29uc3RyYWludChj
b25zdHJhaW50KQogICAgICAgICB7CkBAIC04NSwxMiArODUsMTIgQEAgcHJpdmF0ZToKICAgICAg
ICAgICAgICAgICAmJiBjb25zdHJhaW50ID09IG90aGVyLmNvbnN0cmFpbnQ7CiAgICAgICAgIH0K
ICAgICAgICAgCi0gICAgICAgIFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoU2xvdFZpc2l0b3ImKT4+
IHRhc2s7CisgICAgICAgIFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoQWJzdHJhY3RTbG90VmlzaXRv
ciYpPj4gdGFzazsKICAgICAgICAgTWFya2luZ0NvbnN0cmFpbnQqIGNvbnN0cmFpbnQgeyBudWxs
cHRyIH07CiAgICAgfTsKICAgICAKICAgICBIZWFwJiBtX2hlYXA7Ci0gICAgU2xvdFZpc2l0b3Im
IG1fbWFpblZpc2l0b3I7CisgICAgQWJzdHJhY3RTbG90VmlzaXRvciYgbV9tYWluVmlzaXRvcjsK
ICAgICBNYXJraW5nQ29uc3RyYWludFNldCYgbV9zZXQ7CiAgICAgQml0VmVjdG9yIG1fZXhlY3V0
ZWQ7CiAgICAgRGVxdWU8VGFza1dpdGhDb25zdHJhaW50LCAzMj4gbV90b0V4ZWN1dGVJblBhcmFs
bGVsOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2ltcGxlTWFya2luZ0NvbnN0
cmFpbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1NpbXBs
ZU1hcmtpbmdDb25zdHJhaW50LmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTMwLDcgKzMwLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIFNpbXBsZU1hcmtpbmdDb25zdHJhaW50
OjpTaW1wbGVNYXJraW5nQ29uc3RyYWludCgKICAgICBDU3RyaW5nIGFiYnJldmlhdGVkTmFtZSwg
Q1N0cmluZyBuYW1lLAotICAgIDo6RnVuY3Rpb248dm9pZChTbG90VmlzaXRvciYpPiBleGVjdXRl
RnVuY3Rpb24sCisgICAgOjpGdW5jdGlvbjx2b2lkKEFic3RyYWN0U2xvdFZpc2l0b3ImKT4gZXhl
Y3V0ZUZ1bmN0aW9uLAogICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5IHZvbGF0aWxpdHksIENvbnN0
cmFpbnRDb25jdXJyZW5jeSBjb25jdXJyZW5jeSwKICAgICBDb25zdHJhaW50UGFyYWxsZWxpc20g
cGFyYWxsZWxpc20pCiAgICAgOiBNYXJraW5nQ29uc3RyYWludChXVEZNb3ZlKGFiYnJldmlhdGVk
TmFtZSksIFdURk1vdmUobmFtZSksIHZvbGF0aWxpdHksIGNvbmN1cnJlbmN5LCBwYXJhbGxlbGlz
bSkKQEAgLTQyLDcgKzQyLDcgQEAgU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQ6On5TaW1wbGVNYXJr
aW5nQwogewogfQogCi12b2lkIFNpbXBsZU1hcmtpbmdDb25zdHJhaW50OjpleGVjdXRlSW1wbChT
bG90VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQ6OmV4ZWN1
dGVJbXBsKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgbV9leGVjdXRlRnVu
Y3Rpb24odmlzaXRvcik7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TaW1w
bGVNYXJraW5nQ29uc3RyYWludC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL1NpbXBsZU1hcmtpbmdDb25zdHJhaW50LmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1NpbXBsZU1hcmtpbmdDb25zdHJhaW50LmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMzcsMTQgKzM3LDE0IEBAIGNsYXNzIFNpbXBsZU1hcmtpbmdDb25zdHJhaW50IGZp
bmFsIDogcHUKIHB1YmxpYzoKICAgICBKU19FWFBPUlRfUFJJVkFURSBTaW1wbGVNYXJraW5nQ29u
c3RyYWludCgKICAgICAgICAgQ1N0cmluZyBhYmJyZXZpYXRlZE5hbWUsIENTdHJpbmcgbmFtZSwK
LSAgICAgICAgOjpGdW5jdGlvbjx2b2lkKFNsb3RWaXNpdG9yJik+LAorICAgICAgICA6OkZ1bmN0
aW9uPHZvaWQoQWJzdHJhY3RTbG90VmlzaXRvciYpPiwKICAgICAgICAgQ29uc3RyYWludFZvbGF0
aWxpdHksCiAgICAgICAgIENvbnN0cmFpbnRDb25jdXJyZW5jeSA9IENvbnN0cmFpbnRDb25jdXJy
ZW5jeTo6Q29uY3VycmVudCwKICAgICAgICAgQ29uc3RyYWludFBhcmFsbGVsaXNtID0gQ29uc3Ry
YWludFBhcmFsbGVsaXNtOjpTZXF1ZW50aWFsKTsKICAgICAKICAgICBTaW1wbGVNYXJraW5nQ29u
c3RyYWludCgKICAgICAgICAgQ1N0cmluZyBhYmJyZXZpYXRlZE5hbWUsIENTdHJpbmcgbmFtZSwK
LSAgICAgICAgOjpGdW5jdGlvbjx2b2lkKFNsb3RWaXNpdG9yJik+IGZ1bmMsCisgICAgICAgIDo6
RnVuY3Rpb248dm9pZChBYnN0cmFjdFNsb3RWaXNpdG9yJik+IGZ1bmMsCiAgICAgICAgIENvbnN0
cmFpbnRWb2xhdGlsaXR5IHZvbGF0aWxpdHksCiAgICAgICAgIENvbnN0cmFpbnRQYXJhbGxlbGlz
bSBwYXJhbGxlbGlzbSkKICAgICAgICAgOiBTaW1wbGVNYXJraW5nQ29uc3RyYWludChhYmJyZXZp
YXRlZE5hbWUsIG5hbWUsIFdURk1vdmUoZnVuYyksIHZvbGF0aWxpdHksIENvbnN0cmFpbnRDb25j
dXJyZW5jeTo6Q29uY3VycmVudCwgcGFyYWxsZWxpc20pCkBAIC01NCw5ICs1NCw5IEBAIHB1Ymxp
YzoKICAgICBKU19FWFBPUlRfUFJJVkFURSB+U2ltcGxlTWFya2luZ0NvbnN0cmFpbnQoKSBmaW5h
bDsKICAgICAKIHByaXZhdGU6Ci0gICAgdm9pZCBleGVjdXRlSW1wbChTbG90VmlzaXRvciYpIGZp
bmFsOworICAgIHZvaWQgZXhlY3V0ZUltcGwoQWJzdHJhY3RTbG90VmlzaXRvciYpIGZpbmFsOwog
Ci0gICAgOjpGdW5jdGlvbjx2b2lkKFNsb3RWaXNpdG9yJik+IG1fZXhlY3V0ZUZ1bmN0aW9uOwor
ICAgIDo6RnVuY3Rpb248dm9pZChBYnN0cmFjdFNsb3RWaXNpdG9yJik+IG1fZXhlY3V0ZUZ1bmN0
aW9uOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9TbG90VmlzaXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvU2xvdFZpc2l0b3IuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjAgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03Nywx
NSArNzcsMTIgQEAgc3RhdGljIHZvaWQgdmFsaWRhdGUoSlNDZWxsKiBjZWxsKQogI2VuZGlmCiAK
IFNsb3RWaXNpdG9yOjpTbG90VmlzaXRvcihIZWFwJiBoZWFwLCBDU3RyaW5nIGNvZGVOYW1lKQot
ICAgIDogbV9ieXRlc1Zpc2l0ZWQoMCkKLSAgICAsIG1fdmlzaXRDb3VudCgwKQorICAgIDogQmFz
ZShoZWFwLCBjb2RlTmFtZSwgaGVhcC5tX29wYXF1ZVJvb3RzKQorICAgICwgbV9ieXRlc1Zpc2l0
ZWQoMCkKICAgICAsIG1faXNJblBhcmFsbGVsTW9kZShmYWxzZSkKICAgICAsIG1fbWFya2luZ1Zl
cnNpb24oTWFya2VkU3BhY2U6OmluaXRpYWxWZXJzaW9uKQotICAgICwgbV9oZWFwKGhlYXApCi0g
ICAgLCBtX2NvZGVOYW1lKGNvZGVOYW1lKQogI2lmIEFTU0VSVF9FTkFCTEVECiAgICAgLCBtX2lz
Q2hlY2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlvbihmYWxzZSkKLSAgICAsIG1faXNEcmFpbmlu
ZyhmYWxzZSkKICNlbmRpZgogewogfQpAQCAtMTE3LDggKzExNCw4IEBAIHZvaWQgU2xvdFZpc2l0
b3I6OmRpZFN0YXJ0TWFya2luZygpCiAKIHZvaWQgU2xvdFZpc2l0b3I6OnJlc2V0KCkKIHsKKyAg
ICBBYnN0cmFjdFNsb3RWaXNpdG9yOjpyZXNldCgpOwogICAgIG1fYnl0ZXNWaXNpdGVkID0gMDsK
LSAgICBtX3Zpc2l0Q291bnQgPSAwOwogICAgIG1faGVhcEFuYWx5emVyID0gbnVsbHB0cjsKICAg
ICBSRUxFQVNFX0FTU0VSVCghbV9jdXJyZW50Q2VsbCk7CiB9CkBAIC0yMzAsNyArMjI3LDcgQEAg
dm9pZCBTbG90VmlzaXRvcjo6YXBwZW5kSlNDZWxsT3JBdXhpbGlhcgogdm9pZCBTbG90VmlzaXRv
cjo6YXBwZW5kU2xvdyhKU0NlbGwqIGNlbGwsIERlcGVuZGVuY3kgZGVwZW5kZW5jeSkKIHsKICAg
ICBpZiAoVU5MSUtFTFkobV9oZWFwQW5hbHl6ZXIpKQotICAgICAgICBtX2hlYXBBbmFseXplci0+
YW5hbHl6ZUVkZ2UobV9jdXJyZW50Q2VsbCwgY2VsbCwgbV9yb290TWFya1JlYXNvbik7CisgICAg
ICAgIG1faGVhcEFuYWx5emVyLT5hbmFseXplRWRnZShtX2N1cnJlbnRDZWxsLCBjZWxsLCByb290
TWFya1JlYXNvbigpKTsKIAogICAgIGFwcGVuZEhpZGRlblNsb3dJbXBsKGNlbGwsIGRlcGVuZGVu
Y3kpOwogfQpAQCAtODA3LDEyICs4MDQsMTIgQEAgTWFya1N0YWNrQXJyYXkmIFNsb3RWaXNpdG9y
Ojpjb3JyZXNwb25kaQogICAgIHJldHVybiAqbV9oZWFwLm1fc2hhcmVkTXV0YXRvck1hcmtTdGFj
azsKIH0KIAotdm9pZCBTbG90VmlzaXRvcjo6YWRkUGFyYWxsZWxDb25zdHJhaW50VGFzayhSZWZQ
dHI8U2hhcmVkVGFzazx2b2lkKFNsb3RWaXNpdG9yJik+PiB0YXNrKQordm9pZCBTbG90VmlzaXRv
cjo6YWRkUGFyYWxsZWxDb25zdHJhaW50VGFzayhSZWZQdHI8U2hhcmVkVGFzazx2b2lkKEFic3Ry
YWN0U2xvdFZpc2l0b3ImKT4+IHRhc2spCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQobV9jdXJyZW50
U29sdmVyKTsKICAgICBSRUxFQVNFX0FTU0VSVChtX2N1cnJlbnRDb25zdHJhaW50KTsKICAgICBS
RUxFQVNFX0FTU0VSVCh0YXNrKTsKLSAgICAKKwogICAgIG1fY3VycmVudFNvbHZlci0+YWRkUGFy
YWxsZWxUYXNrKHRhc2ssICptX2N1cnJlbnRDb25zdHJhaW50KTsKIH0KIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yNSw1OCArMjUsNjYgQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRlICJBYnN0cmFjdFNs
b3RWaXNpdG9yLmgiCiAjaW5jbHVkZSAiSGFuZGxlVHlwZXMuaCIKICNpbmNsdWRlICJJdGVyYXRp
b25TdGF0dXMuaCIKLSNpbmNsdWRlICJNYXJrU3RhY2suaCIKLSNpbmNsdWRlICJSb290TWFya1Jl
YXNvbi5oIgotI2luY2x1ZGUgIlZpc2l0UmFjZUtleS5oIgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJk
Lmg+CiAjaW5jbHVkZSA8d3RmL01vbm90b25pY1RpbWUuaD4KLSNpbmNsdWRlIDx3dGYvU2hhcmVk
VGFzay5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEpTQyB7
CiAKLWNsYXNzIENvbnNlcnZhdGl2ZVJvb3RzOwogY2xhc3MgR0NUaHJlYWRTaGFyZWREYXRhOwot
Y2xhc3MgSGVhcDsKIGNsYXNzIEhlYXBDZWxsOwogY2xhc3MgSGVhcEFuYWx5emVyOwotY2xhc3Mg
TWFya2VkQmxvY2s7CiBjbGFzcyBNYXJraW5nQ29uc3RyYWludDsKIGNsYXNzIE1hcmtpbmdDb25z
dHJhaW50U29sdmVyOwotdGVtcGxhdGU8dHlwZW5hbWUgVD4gY2xhc3MgV2VhazsKLXRlbXBsYXRl
PHR5cGVuYW1lIFQsIHR5cGVuYW1lIFRyYWl0cz4gY2xhc3MgV3JpdGVCYXJyaWVyQmFzZTsKIAog
dHlwZWRlZiB1aW50MzJfdCBIZWFwVmVyc2lvbjsKIAotY2xhc3MgU2xvdFZpc2l0b3IgeworY2xh
c3MgU2xvdFZpc2l0b3IgZmluYWwgOiBwdWJsaWMgQWJzdHJhY3RTbG90VmlzaXRvciB7CiAgICAg
V1RGX01BS0VfTk9OQ09QWUFCTEUoU2xvdFZpc2l0b3IpOwogICAgIFdURl9NQUtFX0ZBU1RfQUxM
T0NBVEVEOwogCisgICAgdXNpbmcgQmFzZSA9IEFic3RyYWN0U2xvdFZpc2l0b3I7CisKICAgICBm
cmllbmQgY2xhc3MgU2V0Q3VycmVudENlbGxTY29wZTsKICAgICBmcmllbmQgY2xhc3MgSGVhcDsK
IAogcHVibGljOgorICAgIGNsYXNzIENvbnRleHQgeworICAgIHB1YmxpYzoKKyAgICAgICAgQUxX
QVlTX0lOTElORSBDb250ZXh0KEFic3RyYWN0U2xvdFZpc2l0b3ImLCBIZWFwQ2VsbCopIHsgfQor
ICAgIH07CisKKyAgICBjbGFzcyBEZWZhdWx0TWFya2luZ1Zpb2xhdGlvbkFzc2VydGlvblNjb3Bl
IHsKKyAgICBwdWJsaWM6CisjaWYgQVNTRVJUX0VOQUJMRUQKKyAgICAgICAgRGVmYXVsdE1hcmtp
bmdWaW9sYXRpb25Bc3NlcnRpb25TY29wZShTbG90VmlzaXRvciYgdmlzaXRvcikKKyAgICAgICAg
ICAgIDogbV92aXNpdG9yKHZpc2l0b3IpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1fd2FzQ2hl
Y2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlvbiA9IG1fdmlzaXRvci5tX2lzQ2hlY2tpbmdGb3JE
ZWZhdWx0TWFya1Zpb2xhdGlvbjsKKyAgICAgICAgICAgIG1fdmlzaXRvci5tX2lzQ2hlY2tpbmdG
b3JEZWZhdWx0TWFya1Zpb2xhdGlvbiA9IGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgfkRl
ZmF1bHRNYXJraW5nVmlvbGF0aW9uQXNzZXJ0aW9uU2NvcGUoKQorICAgICAgICB7CisgICAgICAg
ICAgICBtX3Zpc2l0b3IubV9pc0NoZWNraW5nRm9yRGVmYXVsdE1hcmtWaW9sYXRpb24gPSBtX3dh
c0NoZWNraW5nRm9yRGVmYXVsdE1hcmtWaW9sYXRpb247CisgICAgICAgIH0KKworICAgIHByaXZh
dGU6CisgICAgICAgIFNsb3RWaXNpdG9yJiBtX3Zpc2l0b3I7CisgICAgICAgIGJvb2wgbV93YXND
aGVja2luZ0ZvckRlZmF1bHRNYXJrVmlvbGF0aW9uOworI2Vsc2UKKyAgICAgICAgRGVmYXVsdE1h
cmtpbmdWaW9sYXRpb25Bc3NlcnRpb25TY29wZShTbG90VmlzaXRvciYpIHsgfQorI2VuZGlmCisg
ICAgfTsKKwogICAgIFNsb3RWaXNpdG9yKEhlYXAmLCBDU3RyaW5nIGNvZGVOYW1lKTsKICAgICB+
U2xvdFZpc2l0b3IoKTsKIAotICAgIE1hcmtTdGFja0FycmF5JiBjb2xsZWN0b3JNYXJrU3RhY2so
KSB7IHJldHVybiBtX2NvbGxlY3RvclN0YWNrOyB9Ci0gICAgTWFya1N0YWNrQXJyYXkmIG11dGF0
b3JNYXJrU3RhY2soKSB7IHJldHVybiBtX211dGF0b3JTdGFjazsgfQotICAgIGNvbnN0IE1hcmtT
dGFja0FycmF5JiBjb2xsZWN0b3JNYXJrU3RhY2soKSBjb25zdCB7IHJldHVybiBtX2NvbGxlY3Rv
clN0YWNrOyB9Ci0gICAgY29uc3QgTWFya1N0YWNrQXJyYXkmIG11dGF0b3JNYXJrU3RhY2soKSBj
b25zdCB7IHJldHVybiBtX211dGF0b3JTdGFjazsgfQotICAgIAotICAgIFZNJiB2bSgpOwotICAg
IGNvbnN0IFZNJiB2bSgpIGNvbnN0OwotICAgIEhlYXAqIGhlYXAoKSBjb25zdDsKLQotICAgIHZv
aWQgYXBwZW5kKGNvbnN0IENvbnNlcnZhdGl2ZVJvb3RzJik7Ci0gICAgCi0gICAgdGVtcGxhdGU8
dHlwZW5hbWUgVCwgdHlwZW5hbWUgVHJhaXRzPiB2b2lkIGFwcGVuZChjb25zdCBXcml0ZUJhcnJp
ZXJCYXNlPFQsIFRyYWl0cz4mKTsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBU
cmFpdHM+IHZvaWQgYXBwZW5kSGlkZGVuKGNvbnN0IFdyaXRlQmFycmllckJhc2U8VCwgVHJhaXRz
PiYpOwotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEl0ZXJhdG9yPiB2b2lkIGFwcGVuZChJdGVyYXRv
ciBiZWdpbiAsIEl0ZXJhdG9yIGVuZCk7Ci0gICAgdm9pZCBhcHBlbmRWYWx1ZXMoY29uc3QgV3Jp
dGVCYXJyaWVyQmFzZTxVbmtub3duLCBSYXdWYWx1ZVRyYWl0czxVbmtub3duPj4qLCBzaXplX3Qg
Y291bnQpOwotICAgIHZvaWQgYXBwZW5kVmFsdWVzSGlkZGVuKGNvbnN0IFdyaXRlQmFycmllckJh
c2U8VW5rbm93biwgUmF3VmFsdWVUcmFpdHM8VW5rbm93bj4+Kiwgc2l6ZV90IGNvdW50KTsKKyAg
ICB2b2lkIGFwcGVuZChjb25zdCBDb25zZXJ2YXRpdmVSb290cyYpIGZpbmFsOworCisgICAgdXNp
bmcgQmFzZTo6YXBwZW5kOwogICAgIAogICAgIC8vIFRoZXNlIGRvbid0IHJlcXVpcmUgeW91IHRv
IHByb3ZlIHRoYXQgeW91IGhhdmUgYSBXcml0ZUJhcnJpZXI8Pi4gVGhhdCBtYWtlcyBzZW5zZQog
ICAgIC8vIGZvcjoKQEAgLTg3LDMyICs5NSwyMSBAQCBwdWJsaWM6CiAgICAgLy8KICAgICAvLyBJ
ZiB5b3UgYXJlIG5vdCBhIHJvb3QgYW5kIHlvdSBkb24ndCBrbm93IHdoYXQga2luZCBvZiBiYXJy
aWVyIHlvdSBoYXZlLCB0aGVuIHlvdQogICAgIC8vIHNob3VsZG4ndCBjYWxsIHRoZXNlIG1ldGhv
ZHMuCi0gICAgdm9pZCBhcHBlbmRVbmJhcnJpZXJlZChKU1ZhbHVlKTsKLSAgICB2b2lkIGFwcGVu
ZFVuYmFycmllcmVkKEpTVmFsdWUqLCBzaXplX3QpOwotICAgIHZvaWQgYXBwZW5kVW5iYXJyaWVy
ZWQoSlNDZWxsKik7Ci0gICAgCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICB2b2lkIGFw
cGVuZChjb25zdCBXZWFrPFQ+JiB3ZWFrKTsKLSAgICAKLSAgICB2b2lkIGFwcGVuZEhpZGRlblVu
YmFycmllcmVkKEpTVmFsdWUpOwotICAgIHZvaWQgYXBwZW5kSGlkZGVuVW5iYXJyaWVyZWQoSlND
ZWxsKik7Ci0KLSAgICBib29sIGFkZE9wYXF1ZVJvb3Qodm9pZCopOyAvLyBSZXR1cm5zIHRydWUg
aWYgdGhlIHJvb3Qgd2FzIG5ldy4KKyAgICB2b2lkIGFwcGVuZFVuYmFycmllcmVkSW1wbChKU0Nl
bGwqKSBmaW5hbDsKICAgICAKLSAgICBib29sIGNvbnRhaW5zT3BhcXVlUm9vdCh2b2lkKikgY29u
c3Q7Ci0KLSAgICBib29sIGlzRW1wdHkoKSB7IHJldHVybiBtX2NvbGxlY3RvclN0YWNrLmlzRW1w
dHkoKSAmJiBtX211dGF0b3JTdGFjay5pc0VtcHR5KCk7IH0KKyAgICB2b2lkIGFwcGVuZEhpZGRl
blVuYmFycmllcmVkSW1wbChKU0NlbGwqKSBmaW5hbDsKIAogICAgIGJvb2wgaXNGaXJzdFZpc2l0
KCkgY29uc3QgeyByZXR1cm4gbV9pc0ZpcnN0VmlzaXQ7IH0KIAorICAgIGJvb2wgaXNNYXJrZWQo
Y29uc3Qgdm9pZCopIGNvbnN0IGZpbmFsOworICAgIGJvb2wgaXNNYXJrZWQoTWFya2VkQmxvY2sm
LCBIZWFwQ2VsbCopIGNvbnN0IGZpbmFsOworICAgIGJvb2wgaXNNYXJrZWQoUHJlY2lzZUFsbG9j
YXRpb24mLCBIZWFwQ2VsbCopIGNvbnN0IGZpbmFsOworCiAgICAgdm9pZCBkaWRTdGFydE1hcmtp
bmcoKTsKICAgICB2b2lkIHJlc2V0KCk7CiAgICAgdm9pZCBjbGVhck1hcmtTdGFja3MoKTsKIAog
ICAgIHNpemVfdCBieXRlc1Zpc2l0ZWQoKSBjb25zdCB7IHJldHVybiBtX2J5dGVzVmlzaXRlZDsg
fQotICAgIHNpemVfdCB2aXNpdENvdW50KCkgY29uc3QgeyByZXR1cm4gbV92aXNpdENvdW50OyB9
Ci0gICAgCi0gICAgdm9pZCBhZGRUb1Zpc2l0Q291bnQoc2l6ZV90IHZhbHVlKSB7IG1fdmlzaXRD
b3VudCArPSB2YWx1ZTsgfQogCiAgICAgdm9pZCBkb25hdGUoKTsKICAgICB2b2lkIGRyYWluKE1v
bm90b25pY1RpbWUgdGltZW91dCA9IE1vbm90b25pY1RpbWU6OmluZmluaXR5KCkpOwpAQCAtMTM1
LDI0ICsxMzIsMTggQEAgcHVibGljOgogICAgIAogICAgIC8vIFRoaXMgaW5mb3JtcyB0aGUgR0Mg
YWJvdXQgYXV4aWxpYXJ5IG9mIHNvbWUgc2l6ZSB0aGF0IHdlIGFyZSBrZWVwaW5nIGFsaXZlLiBJ
ZiB5b3UgZG9uJ3QgZG8KICAgICAvLyB0aGlzIHRoZW4gdGhlIHNwYWNlIHdpbGwgYmUgZnJlZWQg
YXQgZW5kIG9mIEdDLgotICAgIHZvaWQgbWFya0F1eGlsaWFyeShjb25zdCB2b2lkKiBiYXNlKTsK
KyAgICB2b2lkIG1hcmtBdXhpbGlhcnkoY29uc3Qgdm9pZCogYmFzZSkgZmluYWw7CiAKLSAgICB2
b2lkIHJlcG9ydEV4dHJhTWVtb3J5VmlzaXRlZChzaXplX3QpOworICAgIHZvaWQgcmVwb3J0RXh0
cmFNZW1vcnlWaXNpdGVkKHNpemVfdCkgZmluYWw7CiAjaWYgRU5BQkxFKFJFU09VUkNFX1VTQUdF
KQotICAgIHZvaWQgcmVwb3J0RXh0ZXJuYWxNZW1vcnlWaXNpdGVkKHNpemVfdCk7CisgICAgdm9p
ZCByZXBvcnRFeHRlcm5hbE1lbW9yeVZpc2l0ZWQoc2l6ZV90KSBmaW5hbDsKICNlbmRpZgogICAg
IAotICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwotCi0gICAgYm9vbCBpc0FuYWx5
emluZ0hlYXAoKSBjb25zdCB7IHJldHVybiAhIW1faGVhcEFuYWx5emVyOyB9Ci0gICAgSGVhcEFu
YWx5emVyKiBoZWFwQW5hbHl6ZXIoKSBjb25zdCB7IHJldHVybiBtX2hlYXBBbmFseXplcjsgfQot
ICAgIAotICAgIFJvb3RNYXJrUmVhc29uIHJvb3RNYXJrUmVhc29uKCkgY29uc3QgeyByZXR1cm4g
bV9yb290TWFya1JlYXNvbjsgfQotICAgIHZvaWQgc2V0Um9vdE1hcmtSZWFzb24oUm9vdE1hcmtS
ZWFzb24gcmVhc29uKSB7IG1fcm9vdE1hcmtSZWFzb24gPSByZWFzb247IH0KKyAgICB2b2lkIGR1
bXAoUHJpbnRTdHJlYW0mKSBjb25zdCBmaW5hbDsKIAogICAgIEhlYXBWZXJzaW9uIG1hcmtpbmdW
ZXJzaW9uKCkgY29uc3QgeyByZXR1cm4gbV9tYXJraW5nVmVyc2lvbjsgfQogCi0gICAgYm9vbCBt
dXRhdG9ySXNTdG9wcGVkKCkgY29uc3QgeyByZXR1cm4gbV9tdXRhdG9ySXNTdG9wcGVkOyB9Cisg
ICAgYm9vbCBtdXRhdG9ySXNTdG9wcGVkKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9tdXRhdG9y
SXNTdG9wcGVkOyB9CiAgICAgCiAgICAgTG9jayYgcmlnaHRUb1J1bigpIHsgcmV0dXJuIG1fcmln
aHRUb1J1bjsgfQogICAgIApAQCAtMTY0LDIwICsxNTUsMTYgQEAgcHVibGljOgogICAgIAogICAg
IHZvaWQgb3B0aW1pemVGb3JTdG9wcGVkTXV0YXRvcigpOwogICAgIAotICAgIHZvaWQgZGlkUmFj
ZShjb25zdCBWaXNpdFJhY2VLZXkmKTsKKyAgICB2b2lkIGRpZFJhY2UoY29uc3QgVmlzaXRSYWNl
S2V5JikgZmluYWw7CiAgICAgdm9pZCBkaWRSYWNlKEpTQ2VsbCogY2VsbCwgY29uc3QgY2hhciog
cmVhc29uKSB7IGRpZFJhY2UoVmlzaXRSYWNlS2V5KGNlbGwsIHJlYXNvbikpOyB9CiAgICAgCi0g
ICAgdm9pZCB2aXNpdEFzQ29uc3RyYWludChjb25zdCBKU0NlbGwqKTsKKyAgICB2b2lkIHZpc2l0
QXNDb25zdHJhaW50KGNvbnN0IEpTQ2VsbCopIGZpbmFsOwogICAgIAogICAgIGJvb2wgZGlkUmVh
Y2hUZXJtaW5hdGlvbigpOwogICAgIAotICAgIHZvaWQgc2V0SWdub3JlTmV3T3BhcXVlUm9vdHMo
Ym9vbCB2YWx1ZSkgeyBtX2lnbm9yZU5ld09wYXF1ZVJvb3RzID0gdmFsdWU7IH0KLQogICAgIHZv
aWQgZG9uYXRlQWxsKCk7CiAgICAgCi0gICAgY29uc3QgY2hhciogY29kZU5hbWUoKSBjb25zdCB7
IHJldHVybiBtX2NvZGVOYW1lLmRhdGEoKTsgfQotICAgIAotICAgIEpTX0VYUE9SVF9QUklWQVRF
IHZvaWQgYWRkUGFyYWxsZWxDb25zdHJhaW50VGFzayhSZWZQdHI8U2hhcmVkVGFzazx2b2lkKFNs
b3RWaXNpdG9yJik+Pik7CisgICAgdm9pZCBhZGRQYXJhbGxlbENvbnN0cmFpbnRUYXNrKFJlZlB0
cjxTaGFyZWRUYXNrPHZvaWQoQWJzdHJhY3RTbG90VmlzaXRvciYpPj4pIGZpbmFsOwogCiBwcml2
YXRlOgogICAgIGZyaWVuZCBjbGFzcyBQYXJhbGxlbE1vZGVFbmFibGVyOwpAQCAtMjE2LDM5ICsy
MDMsMjQgQEAgcHJpdmF0ZToKIAogICAgIE1hcmtTdGFja0FycmF5JiBjb3JyZXNwb25kaW5nR2xv
YmFsU3RhY2soTWFya1N0YWNrQXJyYXkmKTsKIAotICAgIE1hcmtTdGFja0FycmF5IG1fY29sbGVj
dG9yU3RhY2s7Ci0gICAgTWFya1N0YWNrQXJyYXkgbV9tdXRhdG9yU3RhY2s7Ci0gICAgCiAgICAg
c2l6ZV90IG1fYnl0ZXNWaXNpdGVkOwotICAgIHNpemVfdCBtX3Zpc2l0Q291bnQ7CiAgICAgc2l6
ZV90IG1fbm9uQ2VsbFZpc2l0Q291bnQgeyAwIH07IC8vIFVzZWQgZm9yIGluY3JlbWVudGFsIGRy
YWluaW5nLCBpZ25vcmVkIG90aGVyd2lzZS4KICAgICBDaGVja2VkU2l6ZSBtX2V4dHJhTWVtb3J5
U2l6ZSB7IDAgfTsKICAgICBib29sIG1faXNJblBhcmFsbGVsTW9kZTsKLSAgICBib29sIG1faWdu
b3JlTmV3T3BhcXVlUm9vdHMgeyBmYWxzZSB9OyAvLyBVc2VmdWwgYXMgYSBkZWJ1Z2dpbmcgbW9k
ZS4KIAogICAgIEhlYXBWZXJzaW9uIG1fbWFya2luZ1ZlcnNpb247Ci0gICAgCi0gICAgSGVhcCYg
bV9oZWFwOwogCiAgICAgSGVhcEFuYWx5emVyKiBtX2hlYXBBbmFseXplciB7IG51bGxwdHIgfTsK
ICAgICBKU0NlbGwqIG1fY3VycmVudENlbGwgeyBudWxscHRyIH07Ci0gICAgUm9vdE1hcmtSZWFz
b24gbV9yb290TWFya1JlYXNvbiB7IFJvb3RNYXJrUmVhc29uOjpOb25lIH07CiAgICAgYm9vbCBt
X2lzRmlyc3RWaXNpdCB7IGZhbHNlIH07CiAgICAgYm9vbCBtX211dGF0b3JJc1N0b3BwZWQgeyBm
YWxzZSB9OwogICAgIGJvb2wgbV9jYW5PcHRpbWl6ZUZvclN0b3BwZWRNdXRhdG9yIHsgZmFsc2Ug
fTsKICAgICBMb2NrIG1fcmlnaHRUb1J1bjsKICAgICAKLSAgICBDU3RyaW5nIG1fY29kZU5hbWU7
Ci0gICAgCi0gICAgTWFya2luZ0NvbnN0cmFpbnQqIG1fY3VycmVudENvbnN0cmFpbnQgeyBudWxs
cHRyIH07Ci0gICAgTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXIqIG1fY3VycmVudFNvbHZlciB7IG51
bGxwdHIgfTsKLSAgICAKICAgICAvLyBQdXQgcGFkZGluZyBoZXJlIHRvIG1pdGlnYXRlIGZhbHNl
IHNoYXJpbmcgYmV0d2VlbiBtdWx0aXBsZSBTbG90VmlzaXRvcnMuCiAgICAgY2hhciBwYWRkaW5n
WzY0XTsKLXB1YmxpYzoKICNpZiBBU1NFUlRfRU5BQkxFRAotICAgIGJvb2wgbV9pc0NoZWNraW5n
Rm9yRGVmYXVsdE1hcmtWaW9sYXRpb247Ci0gICAgYm9vbCBtX2lzRHJhaW5pbmc7CisgICAgYm9v
bCBtX2lzQ2hlY2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlvbiB7IGZhbHNlIH07CiAjZW5kaWYK
IH07CiAKQEAgLTI3MSwyMyArMjQzLDQgQEAgcHJpdmF0ZToKICAgICBTbG90VmlzaXRvciYgbV9z
dGFjazsKIH07CiAKLWNsYXNzIFNldFJvb3RNYXJrUmVhc29uU2NvcGUgewotcHVibGljOgotICAg
IFNldFJvb3RNYXJrUmVhc29uU2NvcGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IsIFJvb3RNYXJrUmVh
c29uIHJlYXNvbikKLSAgICAgICAgOiBtX3Zpc2l0b3IodmlzaXRvcikKLSAgICAgICAgLCBtX3By
ZXZpb3VzUmVhc29uKHZpc2l0b3Iucm9vdE1hcmtSZWFzb24oKSkKLSAgICB7Ci0gICAgICAgIG1f
dmlzaXRvci5zZXRSb290TWFya1JlYXNvbihyZWFzb24pOwotICAgIH0KLQotICAgIH5TZXRSb290
TWFya1JlYXNvblNjb3BlKCkKLSAgICB7Ci0gICAgICAgIG1fdmlzaXRvci5zZXRSb290TWFya1Jl
YXNvbihtX3ByZXZpb3VzUmVhc29uKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgU2xvdFZpc2l0
b3ImIG1fdmlzaXRvcjsKLSAgICBSb290TWFya1JlYXNvbiBtX3ByZXZpb3VzUmVhc29uOwotfTsK
LQogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9T
bG90VmlzaXRvcklubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9TbG90VmlzaXRvcklubGluZXMuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTkgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0yNSwyNiArMjUsMTggQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRlICJBYnN0cmFjdFNs
b3RWaXNpdG9ySW5saW5lcy5oIgogI2luY2x1ZGUgIlNsb3RWaXNpdG9yLmgiCi0jaW5jbHVkZSAi
V2Vhay5oIgotI2luY2x1ZGUgIldlYWtJbmxpbmVzLmgiCisjaW5jbHVkZSAiTWFya2VkQmxvY2su
aCIKKyNpbmNsdWRlICJQcmVjaXNlQWxsb2NhdGlvbi5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIAot
QUxXQVlTX0lOTElORSB2b2lkIFNsb3RWaXNpdG9yOjphcHBlbmRVbmJhcnJpZXJlZChKU1ZhbHVl
KiBzbG90LCBzaXplX3QgY291bnQpCi17Ci0gICAgZm9yIChzaXplX3QgaSA9IGNvdW50OyBpLS07
KQotICAgICAgICBhcHBlbmRVbmJhcnJpZXJlZChzbG90W2ldKTsKLX0KLQotQUxXQVlTX0lOTElO
RSB2b2lkIFNsb3RWaXNpdG9yOjphcHBlbmRVbmJhcnJpZXJlZChKU0NlbGwqIGNlbGwpCitBTFdB
WVNfSU5MSU5FIHZvaWQgU2xvdFZpc2l0b3I6OmFwcGVuZFVuYmFycmllcmVkSW1wbChKU0NlbGwq
IGNlbGwpCiB7CiAgICAgLy8gVGhpcyBuZWVkcyB0byBiZSB3cml0dGVuIGluIGEgdmVyeSBzcGVj
aWZpYyB3YXkgdG8gZW5zdXJlIHRoYXQgaXQgZ2V0cyBpbmxpbmVkCiAgICAgLy8gcHJvcGVybHku
IEluIHBhcnRpY3VsYXIsIGl0IGFwcGVhcnMgdGhhdCB1c2luZyB0ZW1wbGF0ZXMgaGVyZSBicmVh
a3MgQUxXQVlTX0lOTElORS4KICAgICAKLSAgICBpZiAoIWNlbGwpCi0gICAgICAgIHJldHVybjsK
LSAgICAKICAgICBEZXBlbmRlbmN5IGRlcGVuZGVuY3k7CiAgICAgaWYgKFVOTElLRUxZKGNlbGwt
PmlzUHJlY2lzZUFsbG9jYXRpb24oKSkpIHsKICAgICAgICAgaWYgKExJS0VMWShjZWxsLT5wcmVj
aXNlQWxsb2NhdGlvbigpLmlzTWFya2VkKCkpKSB7CkBAIC02MywyNiArNTUsMTEgQEAgQUxXQVlT
X0lOTElORSB2b2lkIFNsb3RWaXNpdG9yOjphcHBlbmRVbgogICAgIGFwcGVuZFNsb3coY2VsbCwg
ZGVwZW5kZW5jeSk7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBTbG90VmlzaXRvcjo6YXBwZW5k
VW5iYXJyaWVyZWQoSlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUuaXNDZWxsKCkpCi0g
ICAgICAgIGFwcGVuZFVuYmFycmllcmVkKHZhbHVlLmFzQ2VsbCgpKTsKLX0KLQotQUxXQVlTX0lO
TElORSB2b2lkIFNsb3RWaXNpdG9yOjphcHBlbmRIaWRkZW5VbmJhcnJpZXJlZChKU1ZhbHVlIHZh
bHVlKQotewotICAgIGlmICh2YWx1ZS5pc0NlbGwoKSkKLSAgICAgICAgYXBwZW5kSGlkZGVuVW5i
YXJyaWVyZWQodmFsdWUuYXNDZWxsKCkpOwotfQotCi1BTFdBWVNfSU5MSU5FIHZvaWQgU2xvdFZp
c2l0b3I6OmFwcGVuZEhpZGRlblVuYmFycmllcmVkKEpTQ2VsbCogY2VsbCkKK0FMV0FZU19JTkxJ
TkUgdm9pZCBTbG90VmlzaXRvcjo6YXBwZW5kSGlkZGVuVW5iYXJyaWVyZWRJbXBsKEpTQ2VsbCog
Y2VsbCkKIHsKICAgICAvLyBUaGlzIG5lZWRzIHRvIGJlIHdyaXR0ZW4gaW4gYSB2ZXJ5IHNwZWNp
ZmljIHdheSB0byBlbnN1cmUgdGhhdCBpdCBnZXRzIGlubGluZWQKICAgICAvLyBwcm9wZXJseS4g
SW4gcGFydGljdWxhciwgaXQgYXBwZWFycyB0aGF0IHVzaW5nIHRlbXBsYXRlcyBoZXJlIGJyZWFr
cyBBTFdBWVNfSU5MSU5FLgogICAgIAotICAgIGlmICghY2VsbCkKLSAgICAgICAgcmV0dXJuOwot
ICAgIAogICAgIERlcGVuZGVuY3kgZGVwZW5kZW5jeTsKICAgICBpZiAoVU5MSUtFTFkoY2VsbC0+
aXNQcmVjaXNlQWxsb2NhdGlvbigpKSkgewogICAgICAgICBpZiAoTElLRUxZKGNlbGwtPnByZWNp
c2VBbGxvY2F0aW9uKCkuaXNNYXJrZWQoKSkpCkBAIC05Nyw1OCArNzQsMTkgQEAgQUxXQVlTX0lO
TElORSB2b2lkIFNsb3RWaXNpdG9yOjphcHBlbmRIaQogICAgIGFwcGVuZEhpZGRlblNsb3coY2Vs
bCwgZGVwZW5kZW5jeSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1BTFdBWVNfSU5MSU5F
IHZvaWQgU2xvdFZpc2l0b3I6OmFwcGVuZChjb25zdCBXZWFrPFQ+JiB3ZWFrKQotewotICAgIGFw
cGVuZFVuYmFycmllcmVkKHdlYWsuZ2V0KCkpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0
eXBlbmFtZSBUcmFpdHM+Ci1BTFdBWVNfSU5MSU5FIHZvaWQgU2xvdFZpc2l0b3I6OmFwcGVuZChj
b25zdCBXcml0ZUJhcnJpZXJCYXNlPFQsIFRyYWl0cz4mIHNsb3QpCitpbmxpbmUgYm9vbCBTbG90
VmlzaXRvcjo6aXNNYXJrZWQoY29uc3Qgdm9pZCogcCkgY29uc3QKIHsKLSAgICBhcHBlbmRVbmJh
cnJpZXJlZChzbG90LmdldCgpKTsKKyAgICByZXR1cm4gaGVhcCgpLT5pc01hcmtlZChwKTsKIH0K
IAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVHJhaXRzPgotQUxXQVlTX0lOTElORSB2
b2lkIFNsb3RWaXNpdG9yOjphcHBlbmRIaWRkZW4oY29uc3QgV3JpdGVCYXJyaWVyQmFzZTxULCBU
cmFpdHM+JiBzbG90KQoraW5saW5lIGJvb2wgU2xvdFZpc2l0b3I6OmlzTWFya2VkKE1hcmtlZEJs
b2NrJiBjb250YWluZXIsIEhlYXBDZWxsKiBjZWxsKSBjb25zdAogewotICAgIGFwcGVuZEhpZGRl
blVuYmFycmllcmVkKHNsb3QuZ2V0KCkpOworICAgIHJldHVybiBjb250YWluZXIuaXNNYXJrZWQo
bWFya2luZ1ZlcnNpb24oKSwgY2VsbCk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIEl0ZXJhdG9y
PgotQUxXQVlTX0lOTElORSB2b2lkIFNsb3RWaXNpdG9yOjphcHBlbmQoSXRlcmF0b3IgYmVnaW4s
IEl0ZXJhdG9yIGVuZCkKK2lubGluZSBib29sIFNsb3RWaXNpdG9yOjppc01hcmtlZChQcmVjaXNl
QWxsb2NhdGlvbiYgY29udGFpbmVyLCBIZWFwQ2VsbCogY2VsbCkgY29uc3QKIHsKLSAgICBmb3Ig
KGF1dG8gaXQgPSBiZWdpbjsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBhcHBlbmQoKml0KTsK
LX0KLQotQUxXQVlTX0lOTElORSB2b2lkIFNsb3RWaXNpdG9yOjphcHBlbmRWYWx1ZXMoY29uc3Qg
V3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiogYmFycmllcnMsIHNpemVfdCBjb3VudCkKLXsKLSAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpCi0gICAgICAgIGFwcGVuZChiYXJy
aWVyc1tpXSk7Ci19Ci0KLUFMV0FZU19JTkxJTkUgdm9pZCBTbG90VmlzaXRvcjo6YXBwZW5kVmFs
dWVzSGlkZGVuKGNvbnN0IFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4qIGJhcnJpZXJzLCBzaXpl
X3QgY291bnQpCi17Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKQotICAg
ICAgICBhcHBlbmRIaWRkZW4oYmFycmllcnNbaV0pOwotfQotCi1pbmxpbmUgYm9vbCBTbG90Vmlz
aXRvcjo6YWRkT3BhcXVlUm9vdCh2b2lkKiBwdHIpCi17Ci0gICAgaWYgKCFwdHIpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICBpZiAobV9pZ25vcmVOZXdPcGFxdWVSb290cykKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIGlmICghaGVhcCgpLT5tX29wYXF1ZVJvb3RzLmFkZChwdHIpKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV92aXNpdENvdW50Kys7Ci0gICAgcmV0dXJuIHRy
dWU7Ci19Ci0KLWlubGluZSBib29sIFNsb3RWaXNpdG9yOjpjb250YWluc09wYXF1ZVJvb3Qodm9p
ZCogcHRyKSBjb25zdAotewotICAgIHJldHVybiBoZWFwKCktPm1fb3BhcXVlUm9vdHMuY29udGFp
bnMocHRyKTsKKyAgICByZXR1cm4gY29udGFpbmVyLmlzTWFya2VkKG1hcmtpbmdWZXJzaW9uKCks
IGNlbGwpOwogfQogCiBpbmxpbmUgdm9pZCBTbG90VmlzaXRvcjo6cmVwb3J0RXh0cmFNZW1vcnlW
aXNpdGVkKHNpemVfdCBzaXplKQpAQCAtMTY5LDIxICsxMDcsNiBAQCBpbmxpbmUgdm9pZCBTbG90
VmlzaXRvcjo6cmVwb3J0RXh0ZXJuYWxNCiB9CiAjZW5kaWYKIAotaW5saW5lIEhlYXAqIFNsb3RW
aXNpdG9yOjpoZWFwKCkgY29uc3QKLXsKLSAgICByZXR1cm4gJm1faGVhcDsKLX0KLQotaW5saW5l
IFZNJiBTbG90VmlzaXRvcjo6dm0oKQotewotICAgIHJldHVybiBtX2hlYXAudm0oKTsKLX0KLQot
aW5saW5lIGNvbnN0IFZNJiBTbG90VmlzaXRvcjo6dm0oKSBjb25zdAotewotICAgIHJldHVybiBt
X2hlYXAudm0oKTsKLX0KLQogdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KIEl0ZXJhdGlvblN0YXR1
cyBTbG90VmlzaXRvcjo6Zm9yRWFjaE1hcmtTdGFjayhjb25zdCBGdW5jJiBmdW5jKQogewpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3JNYWNyb3MuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvck1hY3Jvcy5oCShu
b25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yTWFj
cm9zLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMzMgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworbmFtZXNwYWNlIEpT
QyB7CisKK2NsYXNzIEFic3RyYWN0U2xvdFZpc2l0b3I7CitjbGFzcyBKU0NlbGw7CitjbGFzcyBT
bG90VmlzaXRvcjsKKworI2RlZmluZSBERUNMQVJFX1VOVVNFRF9TTE9UX1ZJU0lUT1JfU1RSVUNU
X0VYUEFOREVSMihjb3VudGVyXykgXAorICAgIHN0cnVjdCBVbnVzZWRTbG90VmlzaXRvclN0cnVj
dFNvV2VDYW5IYXZlQVNlbWljb2xvbiMjY291bnRlcl8geyB9CisKKyNkZWZpbmUgREVDTEFSRV9V
TlVTRURfU0xPVF9WSVNJVE9SX1NUUlVDVF9FWFBBTkRFUihjb3VudGVyXykgXAorICAgIERFQ0xB
UkVfVU5VU0VEX1NMT1RfVklTSVRPUl9TVFJVQ1RfRVhQQU5ERVIyKGNvdW50ZXJfKQorCisjZGVm
aW5lIERFQ0xBUkVfVU5VU0VEX1NMT1RfVklTSVRPUl9TVFJVQ1QoKSBcCisgICAgREVDTEFSRV9V
TlVTRURfU0xPVF9WSVNJVE9SX1NUUlVDVF9FWFBBTkRFUihfX0NPVU5URVJfXykKKworLy8gTWFj
cm9zIGZvciBpbnN0YW5jZSBjdXN0b20gdmlzaXRvciBtZXRob2QuCisKKyNkZWZpbmUgREVDTEFS
RV9JTlNUQU5DRV9TTE9UX1ZJU0lUT1JfTUVUSE9EX0lNUEwocmV0dXJuVHlwZV8sIG1ldGhvZE5h
bWVfLCBwb3N0TW9kaWZpZXJfKSBcCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gcmV0
dXJuVHlwZV8gbWV0aG9kTmFtZV8jI0ltcGwoVmlzaXRvciYgdmlzaXRvcik7IFwKKyAgICByZXR1
cm5UeXBlXyBtZXRob2ROYW1lXyhTbG90VmlzaXRvciYpIHBvc3RNb2RpZmllcl87IFwKKyAgICBy
ZXR1cm5UeXBlXyBtZXRob2ROYW1lXyhBYnN0cmFjdFNsb3RWaXNpdG9yJikgcG9zdE1vZGlmaWVy
XzsgXAorICAgIERFQ0xBUkVfVU5VU0VEX1NMT1RfVklTSVRPUl9TVFJVQ1QoKQorCisjZGVmaW5l
IERFQ0xBUkVfSU5TVEFOQ0VfU0xPVF9WSVNJVE9SX01FVEhPRChyZXR1cm5UeXBlXywgbWV0aG9k
TmFtZV8pIFwKKyAgICBERUNMQVJFX0lOU1RBTkNFX1NMT1RfVklTSVRPUl9NRVRIT0RfSU1QTChy
ZXR1cm5UeXBlXywgbWV0aG9kTmFtZV8sICkKKworCisjZGVmaW5lIERFRklORV9JTlNUQU5DRV9T
TE9UX1ZJU0lUT1JfTUVUSE9EKHJldHVyblR5cGVfLCBjbGFzc05hbWVfLCBtZXRob2ROYW1lXykg
XAorICAgIHJldHVyblR5cGVfIGNsYXNzTmFtZV86Om1ldGhvZE5hbWVfKFNsb3RWaXNpdG9yJiB2
aXNpdG9yKSB7IG1ldGhvZE5hbWVfIyNJbXBsKHZpc2l0b3IpOyB9IFwKKyAgICByZXR1cm5UeXBl
XyBjbGFzc05hbWVfOjptZXRob2ROYW1lXyhBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKSAg
eyBtZXRob2ROYW1lXyMjSW1wbCh2aXNpdG9yKTsgfSBcCisgICAgREVDTEFSRV9VTlVTRURfU0xP
VF9WSVNJVE9SX1NUUlVDVCgpCisKKy8vIE1hY3JvcyBmb3IgaW5zdGFuY2UgdmlzaXRDaGlsZHJl
bigpLgorCisjZGVmaW5lIERFQ0xBUkVfSU5TVEFOQ0VfVklTSVRfQ0hJTERSRU4gXAorICAgIERF
Q0xBUkVfSU5TVEFOQ0VfU0xPVF9WSVNJVE9SX01FVEhPRCh2b2lkLCB2aXNpdENoaWxkcmVuKQor
CisKKyNkZWZpbmUgREVGSU5FX0lOU1RBTkNFX1ZJU0lUX0NISUxEUkVOKGNsYXNzTmFtZV8pIFwK
KyAgICBERUZJTkVfSU5TVEFOQ0VfU0xPVF9WSVNJVE9SX01FVEhPRCh2b2lkLCBjbGFzc05hbWVf
LCB2aXNpdENoaWxkcmVuKQorCisvLyBNYWNyb3MgZm9yIHN0YXRpYyB2aXNpdENoaWxkcmVuKCku
CisKKyNkZWZpbmUgREVDTEFSRV9WSVNJVF9DSElMRFJFTl9JTVBMIFwKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBWaXNpdG9yPiBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqLCBW
aXNpdG9yJikKKworI2RlZmluZSBERUNMQVJFX1ZJU0lUX0NISUxEUkVOIFwKKyAgICBERUNMQVJF
X1ZJU0lUX0NISUxEUkVOX0lNUEw7IFwKKyAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpT
Q2VsbCogY2VsbCwgQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcik7IFwKKyAgICBzdGF0aWMg
dm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisK
KyNkZWZpbmUgREVDTEFSRV9FWFBPUlRfVklTSVRfQ0hJTERSRU4gXAorICAgIERFQ0xBUkVfVklT
SVRfQ0hJTERSRU5fSU1QTDsgXAorICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIHZp
c2l0Q2hpbGRyZW4oSlNDZWxsKiwgQWJzdHJhY3RTbG90VmlzaXRvciYpOyBcCisgICAgSlNfRVhQ
T1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRv
ciYpCisKKyNkZWZpbmUgREVDTEFSRV9JTkxJTkVfVklTSVRfQ0hJTERSRU4gXAorICAgIERFQ0xB
UkVfVklTSVRfQ0hJTERSRU5fSU1QTDsgXAorICAgIGlubGluZSBzdGF0aWMgdm9pZCB2aXNpdENo
aWxkcmVuKEpTQ2VsbCosIEFic3RyYWN0U2xvdFZpc2l0b3ImKTsgXAorICAgIGlubGluZSBzdGF0
aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJikKKworI2RlZmluZSBE
RUNMQVJFX1RFTVBMQVRFX1ZJU0lUX0NISUxEUkVOIFwKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxE
UkVOCisKKworI2RlZmluZSBERUZJTkVfVklTSVRfQ0hJTERSRU4oY2xhc3NOYW1lXykgXAorICAg
IHZvaWQgY2xhc3NOYW1lXzo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIEFic3RyYWN0U2xv
dFZpc2l0b3ImIHZpc2l0b3IpIFwKKyAgICB7IFwKKyAgICAgICAgQWJzdHJhY3RTbG90VmlzaXRv
cjo6Q29udGV4dCBjb250ZXh0KHZpc2l0b3IsIGNlbGwpOyBcCisgICAgICAgIHZpc2l0Q2hpbGRy
ZW5JbXBsKGNlbGwsIHZpc2l0b3IpOyBcCisgICAgfSBcCisgICAgdm9pZCBjbGFzc05hbWVfOjp2
aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsgdmlzaXRD
aGlsZHJlbkltcGwoY2VsbCwgdmlzaXRvcik7IH0gXAorICAgIERFQ0xBUkVfVU5VU0VEX1NMT1Rf
VklTSVRPUl9TVFJVQ1QoKQorCisjZGVmaW5lIERFRklORV9FWFBPUlRfVklTSVRfQ0hJTERSRU4o
Y2xhc3NOYW1lXykgXAorICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgY2xhc3NOYW1lXzo6dmlz
aXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpIFwK
KyAgICB7IFwKKyAgICAgICAgQWJzdHJhY3RTbG90VmlzaXRvcjo6Q29udGV4dCBjb250ZXh0KHZp
c2l0b3IsIGNlbGwpOyBcCisgICAgICAgIHZpc2l0Q2hpbGRyZW5JbXBsKGNlbGwsIHZpc2l0b3Ip
OyBcCisgICAgfSBcCisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBjbGFzc05hbWVfOjp2aXNp
dENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsgdmlzaXRDaGls
ZHJlbkltcGwoY2VsbCwgdmlzaXRvcik7IH0gXAorICAgIERFQ0xBUkVfVU5VU0VEX1NMT1RfVklT
SVRPUl9TVFJVQ1QoKQorCisjZGVmaW5lIERFRklORV9JTkxJTkVfVklTSVRfQ0hJTERSRU4oY2xh
c3NOYW1lXykgXAorICAgIGlubGluZSB2b2lkIGNsYXNzTmFtZV86OnZpc2l0Q2hpbGRyZW4oSlND
ZWxsKiBjZWxsLCBBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBcCisgICAgeyBcCisgICAg
ICAgIEFic3RyYWN0U2xvdFZpc2l0b3I6OkNvbnRleHQgY29udGV4dCh2aXNpdG9yLCBjZWxsKTsg
XAorICAgICAgICB2aXNpdENoaWxkcmVuSW1wbChjZWxsLCB2aXNpdG9yKTsgXAorICAgIH0gXAor
ICAgIGlubGluZSB2b2lkIGNsYXNzTmFtZV86OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBT
bG90VmlzaXRvciYgdmlzaXRvcikgeyB2aXNpdENoaWxkcmVuSW1wbChjZWxsLCB2aXNpdG9yKTsg
fSBcCisgICAgREVDTEFSRV9VTlVTRURfU0xPVF9WSVNJVE9SX1NUUlVDVCgpCisKKyNkZWZpbmUg
REVGSU5FX1RFTVBMQVRFX1ZJU0lUX0NISUxEUkVOKHRlbXBsYXRlQ2xhdXNlXywgY2xhc3NOYW1l
XykgXAorICAgIHRlbXBsYXRlQ2xhdXNlXyB2b2lkIGNsYXNzTmFtZV86OnZpc2l0Q2hpbGRyZW4o
SlNDZWxsKiBjZWxsLCBBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBcCisgICAgeyBcCisg
ICAgICAgIEFic3RyYWN0U2xvdFZpc2l0b3I6OkNvbnRleHQgY29udGV4dCh2aXNpdG9yLCBjZWxs
KTsgXAorICAgICAgICB2aXNpdENoaWxkcmVuSW1wbChjZWxsLCB2aXNpdG9yKTsgXAorICAgIH0g
XAorICAgIHRlbXBsYXRlQ2xhdXNlXyB2b2lkIGNsYXNzTmFtZV86OnZpc2l0Q2hpbGRyZW4oSlND
ZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikgeyB2aXNpdENoaWxkcmVuSW1wbChjZWxs
LCB2aXNpdG9yKTsgfSBcCisgICAgREVDTEFSRV9VTlVTRURfU0xPVF9WSVNJVE9SX1NUUlVDVCgp
CisKK30gLy8gbmFtZXNwYWNlIEpTQworCit1c2luZyBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3I7
Cit1c2luZyBKU0M6OkpTQ2VsbDsKK3VzaW5nIEpTQzo6U2xvdFZpc2l0b3I7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdWJzcGFjZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL1N1YnNwYWNlLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N1YnNwYWNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMTggQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNCw2
ICszNCw3IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCitjbGFzcyBBYnN0cmFjdFNsb3RWaXNpdG9y
OwogY2xhc3MgQWxpZ25lZE1lbW9yeUFsbG9jYXRvcjsKIGNsYXNzIEhlYXBDZWxsVHlwZTsKIApA
QCAtODcsNyArODgsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBmb3JFYWNoTWFya2VkQ2VsbChjb25z
dCBGdW5jJik7CiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KLSAgICBSZWY8U2hh
cmVkVGFzazx2b2lkKFNsb3RWaXNpdG9yJik+PiBmb3JFYWNoTWFya2VkQ2VsbEluUGFyYWxsZWwo
Y29uc3QgRnVuYyYpOworICAgIFJlZjxTaGFyZWRUYXNrPHZvaWQoQWJzdHJhY3RTbG90VmlzaXRv
ciYpPj4gZm9yRWFjaE1hcmtlZENlbGxJblBhcmFsbGVsKGNvbnN0IEZ1bmMmKTsKIAogICAgIHRl
bXBsYXRlPHR5cGVuYW1lIEZ1bmM+CiAgICAgdm9pZCBmb3JFYWNoTGl2ZUNlbGwoY29uc3QgRnVu
YyYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3Vic3BhY2VJbmxpbmVzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3Vic3BhY2VJbmxpbmVz
LmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N1YnNw
YWNlSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxNy0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODYsOSArODYsOSBAQCB2b2lkIFN1YnNw
YWNlOjpmb3JFYWNoTWFya2VkQ2VsbChjb25zdCBGCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEZ1
bmM+Ci1SZWY8U2hhcmVkVGFzazx2b2lkKFNsb3RWaXNpdG9yJik+PiBTdWJzcGFjZTo6Zm9yRWFj
aE1hcmtlZENlbGxJblBhcmFsbGVsKGNvbnN0IEZ1bmMmIGZ1bmMpCitSZWY8U2hhcmVkVGFzazx2
b2lkKEFic3RyYWN0U2xvdFZpc2l0b3ImKT4+IFN1YnNwYWNlOjpmb3JFYWNoTWFya2VkQ2VsbElu
UGFyYWxsZWwoY29uc3QgRnVuYyYgZnVuYykKIHsKLSAgICBjbGFzcyBUYXNrIGZpbmFsIDogcHVi
bGljIFNoYXJlZFRhc2s8dm9pZChTbG90VmlzaXRvciYpPiB7CisgICAgY2xhc3MgVGFzayBmaW5h
bCA6IHB1YmxpYyBTaGFyZWRUYXNrPHZvaWQoQWJzdHJhY3RTbG90VmlzaXRvciYpPiB7CiAgICAg
cHVibGljOgogICAgICAgICBUYXNrKFN1YnNwYWNlJiBzdWJzcGFjZSwgY29uc3QgRnVuYyYgZnVu
YykKICAgICAgICAgICAgIDogbV9zdWJzcGFjZShzdWJzcGFjZSkKQEAgLTk3LDcgKzk3LDcgQEAg
UmVmPFNoYXJlZFRhc2s8dm9pZChTbG90VmlzaXRvciYpPj4gU3VicwogICAgICAgICB7CiAgICAg
ICAgIH0KICAgICAgICAgCi0gICAgICAgIHZvaWQgcnVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBm
aW5hbAorICAgICAgICB2b2lkIHJ1bihBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBmaW5h
bAogICAgICAgICB7CiAgICAgICAgICAgICB3aGlsZSAoTWFya2VkQmxvY2s6OkhhbmRsZSogaGFu
ZGxlID0gbV9ibG9ja1NvdXJjZS0+cnVuKCkpIHsKICAgICAgICAgICAgICAgICBoYW5kbGUtPmZv
ckVhY2hNYXJrZWRDZWxsKApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVmVyaWZp
ZXJTbG90VmlzaXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvVmVyaWZpZXJTbG90VmlzaXRvci5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvVmVyaWZpZXJTbG90VmlzaXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwzMzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiVmVyaWZpZXJTbG90VmlzaXRvci5oIgorCisjaW5jbHVkZSAiQ29uc2VydmF0aXZlUm9vdHMu
aCIKKyNpbmNsdWRlICJHQ1NlZ21lbnRlZEFycmF5SW5saW5lcy5oIgorI2luY2x1ZGUgIkhlYXBD
ZWxsLmgiCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUgIlZNLmgiCisjaW5jbHVk
ZSAiVmVyaWZpZXJTbG90VmlzaXRvcklubGluZXMuaCIKKyNpbmNsdWRlIDx3dGYvU3RhY2tUcmFj
ZS5oPgorCituYW1lc3BhY2UgSlNDIHsKKwordXNpbmcgTWFya2VyRGF0YSA9IFZlcmlmaWVyU2xv
dFZpc2l0b3I6Ok1hcmtlckRhdGE7CisKK2NvbnN0ZXhwciBpbnQgbWF4TWFya2luZ1N0YWNrRnJh
bWVzVG9DYXB0dXJlID0gMTAwOworCitNYXJrZXJEYXRhOjpNYXJrZXJEYXRhKEhlYXBDZWxsKiBw
YXJlbnQsIHN0ZDo6dW5pcXVlX3B0cjxTdGFja1RyYWNlPiYmIHN0YWNrKQorICAgIDogcGFyZW50
KHBhcmVudCkKKyAgICAsIHN0YWNrKFdURk1vdmUoc3RhY2spKQoreworfQorCitWZXJpZmllclNs
b3RWaXNpdG9yOjpNYXJrZWRCbG9ja0RhdGE6Ok1hcmtlZEJsb2NrRGF0YShNYXJrZWRCbG9jayog
YmxvY2spCisgICAgOiBtX2Jsb2NrKGJsb2NrKQorICAgICwgbV9hdG9tcyhNYXJrZWRCbG9jazo6
YXRvbXNQZXJCbG9jaykKK3sKK30KKwordm9pZCBWZXJpZmllclNsb3RWaXNpdG9yOjpNYXJrZWRC
bG9ja0RhdGE6OmFkZE1hcmtlckRhdGEodW5zaWduZWQgYXRvbU51bWJlciwgTWFya2VyRGF0YSYm
IG1hcmtlcikKK3sKKyAgICBpZiAobV9tYXJrZXJzLmlzRW1wdHkoKSkKKyAgICAgICAgbV9tYXJr
ZXJzLmdyb3coTWFya2VkQmxvY2s6OmF0b21zUGVyQmxvY2spOworICAgIG1fbWFya2Vyc1thdG9t
TnVtYmVyXSA9IFdURk1vdmUobWFya2VyKTsKK30KKworY29uc3QgTWFya2VyRGF0YSogVmVyaWZp
ZXJTbG90VmlzaXRvcjo6TWFya2VkQmxvY2tEYXRhOjptYXJrZXJEYXRhKHVuc2lnbmVkIGF0b21O
dW1iZXIpIGNvbnN0Cit7CisgICAgYXV0byYgbWFya2VyID0gbV9tYXJrZXJzW2F0b21OdW1iZXJd
OworICAgIGlmIChtYXJrZXIuc3RhY2spCisgICAgICAgIHJldHVybiAmbWFya2VyOworICAgIHJl
dHVybiBudWxscHRyOworfQorCitWZXJpZmllclNsb3RWaXNpdG9yOjpQcmVjaXNlQWxsb2NhdGlv
bkRhdGE6OlByZWNpc2VBbGxvY2F0aW9uRGF0YShQcmVjaXNlQWxsb2NhdGlvbiogYWxsb2NhdGlv
bikKKyAgICA6IG1fYWxsb2NhdGlvbihhbGxvY2F0aW9uKQoreworfQorCitjb25zdCBNYXJrZXJE
YXRhKiBWZXJpZmllclNsb3RWaXNpdG9yOjpQcmVjaXNlQWxsb2NhdGlvbkRhdGE6Om1hcmtlckRh
dGEoKSBjb25zdAoreworICAgIGlmIChtX21hcmtlci5zdGFjaykKKyAgICAgICAgcmV0dXJuICZt
X21hcmtlcjsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKwordm9pZCBWZXJpZmllclNsb3RWaXNp
dG9yOjpQcmVjaXNlQWxsb2NhdGlvbkRhdGE6OmFkZE1hcmtlckRhdGEoTWFya2VyRGF0YSYmIG1h
cmtlcikKK3sKKyAgICBtX21hcmtlciA9IFdURk1vdmUobWFya2VyKTsKK30KKworVmVyaWZpZXJT
bG90VmlzaXRvcjo6VmVyaWZpZXJTbG90VmlzaXRvcihIZWFwJiBoZWFwKQorICAgIDogQmFzZSho
ZWFwLCAiVmVyaWZpZXIiLCBtX29wYXF1ZVJvb3RTdG9yYWdlKQoreworfQorCitWZXJpZmllclNs
b3RWaXNpdG9yOjp+VmVyaWZpZXJTbG90VmlzaXRvcigpCit7Cit9CisKK3ZvaWQgVmVyaWZpZXJT
bG90VmlzaXRvcjo6YWRkUGFyYWxsZWxDb25zdHJhaW50VGFzayhSZWZQdHI8U2hhcmVkVGFzazx2
b2lkKEFic3RyYWN0U2xvdFZpc2l0b3ImKT4+IHRhc2spCit7CisgICAgbV9jb25zdHJhaW50VGFz
a3MuYXBwZW5kKFdURk1vdmUodGFzaykpOworfQorCit2b2lkIFZlcmlmaWVyU2xvdFZpc2l0b3I6
OmV4ZWN1dGVDb25zdHJhaW50VGFza3MoKQoreworICAgIHdoaWxlICghbV9jb25zdHJhaW50VGFz
a3MuaXNFbXB0eSgpKQorICAgICAgICBtX2NvbnN0cmFpbnRUYXNrcy50YWtlRmlyc3QoKS0+cnVu
KCp0aGlzKTsKK30KKwordm9pZCBWZXJpZmllclNsb3RWaXNpdG9yOjphcHBlbmQoY29uc3QgQ29u
c2VydmF0aXZlUm9vdHMmIGNvbnNlcnZhdGl2ZVJvb3RzKQoreworICAgIGF1dG8gYXBwZW5kSlND
ZWxsT3JBdXhpbGlhcnkgPSBbJl0gKEhlYXBDZWxsKiBoZWFwQ2VsbCkKKyAgICB7CisgICAgICAg
IGlmICghaGVhcENlbGwpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgaWYgKHRlc3RB
bmRTZXRNYXJrZWQoaGVhcENlbGwpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHN3
aXRjaCAoaGVhcENlbGwtPmNlbGxLaW5kKCkpIHsKKyAgICAgICAgY2FzZSBIZWFwQ2VsbDo6SlND
ZWxsOgorICAgICAgICBjYXNlIEhlYXBDZWxsOjpKU0NlbGxXaXRoSW5kZXhpbmdIZWFkZXI6IHsK
KyAgICAgICAgICAgIEpTQ2VsbCoganNDZWxsID0gc3RhdGljX2Nhc3Q8SlNDZWxsKj4oaGVhcENl
bGwpOworICAgICAgICAgICAgYXBwZW5kVG9NYXJrU3RhY2soanNDZWxsKTsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgSGVhcENlbGw6OkF1eGlsaWFyeToK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH07CisKKyAgICBIZWFwQ2VsbCoq
IHJvb3RzID0gY29uc2VydmF0aXZlUm9vdHMucm9vdHMoKTsKKyAgICBzaXplX3Qgc2l6ZSA9IGNv
bnNlcnZhdGl2ZVJvb3RzLnNpemUoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7
ICsraSkKKyAgICAgICAgYXBwZW5kSlNDZWxsT3JBdXhpbGlhcnkocm9vdHNbaV0pOworfQorCit2
b2lkIFZlcmlmaWVyU2xvdFZpc2l0b3I6OmFwcGVuZFRvTWFya1N0YWNrKEpTQ2VsbCogY2VsbCkK
K3sKKyAgICBBU1NFUlQoIWNlbGwtPmlzWmFwcGVkKCkpOworICAgIG1fY29sbGVjdG9yU3RhY2su
YXBwZW5kKGNlbGwpOworfQorCit2b2lkIFZlcmlmaWVyU2xvdFZpc2l0b3I6OmFwcGVuZFVuYmFy
cmllcmVkSW1wbChKU0NlbGwqIGNlbGwpCit7CisgICAgaWYgKFVOTElLRUxZKGNlbGwtPmlzUHJl
Y2lzZUFsbG9jYXRpb24oKSkpIHsKKyAgICAgICAgaWYgKExJS0VMWShpc01hcmtlZChjZWxsLT5w
cmVjaXNlQWxsb2NhdGlvbigpLCBjZWxsKSkpCisgICAgICAgICAgICByZXR1cm47CisgICAgfSBl
bHNlIHsKKyAgICAgICAgTWFya2VkQmxvY2smIGJsb2NrID0gY2VsbC0+bWFya2VkQmxvY2soKTsK
KyAgICAgICAgaWYgKExJS0VMWShpc01hcmtlZChibG9jaywgY2VsbCkpKQorICAgICAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIGFwcGVuZFNsb3coY2VsbCk7Cit9CisKK3ZvaWQgVmVyaWZp
ZXJTbG90VmlzaXRvcjo6YXBwZW5kSGlkZGVuVW5iYXJyaWVyZWRJbXBsKEpTQ2VsbCogY2VsbCkK
K3sKKyAgICBhcHBlbmRVbmJhcnJpZXJlZEltcGwoY2VsbCk7Cit9CisKK3ZvaWQgVmVyaWZpZXJT
bG90VmlzaXRvcjo6ZHJhaW4oKQoreworICAgIFJFTEVBU0VfQVNTRVJUKG1fbXV0YXRvclN0YWNr
LmlzRW1wdHkoKSk7CisKKyAgICBNYXJrU3RhY2tBcnJheSYgc3RhY2sgPSBtX2NvbGxlY3RvclN0
YWNrOworICAgIGlmIChzdGFjay5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIHN0
YWNrLnJlZmlsbCgpOworICAgIHdoaWxlIChzdGFjay5jYW5SZW1vdmVMYXN0KCkpIHsKKyAgICAg
ICAgdmlzaXRDaGlsZHJlbihzdGFjay5yZW1vdmVMYXN0KCkpOworICAgIH0KK30KKwordm9pZCBW
ZXJpZmllclNsb3RWaXNpdG9yOjpkdW1wTWFya2VyRGF0YShIZWFwQ2VsbCogY2VsbCkKK3sKKyAg
ICBpZiAoY2VsbC0+aXNQcmVjaXNlQWxsb2NhdGlvbigpKQorICAgICAgICByZXR1cm4gZHVtcE1h
cmtlckRhdGEoY2VsbC0+cHJlY2lzZUFsbG9jYXRpb24oKSwgY2VsbCk7CisgICAgcmV0dXJuIGR1
bXBNYXJrZXJEYXRhKGNlbGwtPm1hcmtlZEJsb2NrKCksIGNlbGwpOworfQorCit2b2lkIFZlcmlm
aWVyU2xvdFZpc2l0b3I6OmR1bXBNYXJrZXJEYXRhKFByZWNpc2VBbGxvY2F0aW9uJiBhbGxvY2F0
aW9uLCBIZWFwQ2VsbCogY2VsbCkKK3sKKyAgICBhdXRvIGl0ZXJhdG9yID0gbV9wcmVjaXNlQWxs
b2NhdGlvbk1hcC5maW5kKCZhbGxvY2F0aW9uKTsKKyAgICBpZiAoaXRlcmF0b3IgIT0gbV9wcmVj
aXNlQWxsb2NhdGlvbk1hcC5lbmQoKSkgeworICAgICAgICBkdW1wTWFya2VyRGF0YShjZWxsLCBp
dGVyYXRvci0+dmFsdWUtPm1hcmtlckRhdGEoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgZGF0YUxvZ0xuKCJDZWxsICIsIFJhd1BvaW50ZXIoY2VsbCksICIgbm90IGZvdW5kIik7Cit9
CisKK3ZvaWQgVmVyaWZpZXJTbG90VmlzaXRvcjo6ZHVtcE1hcmtlckRhdGEoTWFya2VkQmxvY2sm
IGJsb2NrLCBIZWFwQ2VsbCogY2VsbCkKK3sKKyAgICBhdXRvIGl0ZXJhdG9yID0gbV9tYXJrZWRC
bG9ja01hcC5maW5kKCZibG9jayk7CisgICAgaWYgKGl0ZXJhdG9yICE9IG1fbWFya2VkQmxvY2tN
YXAuZW5kKCkpIHsKKyAgICAgICAgdW5zaWduZWQgYXRvbU51bWJlciA9IGJsb2NrLmF0b21OdW1i
ZXIoY2VsbCk7CisgICAgICAgIGR1bXBNYXJrZXJEYXRhKGNlbGwsIGl0ZXJhdG9yLT52YWx1ZS0+
bWFya2VyRGF0YShhdG9tTnVtYmVyKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgZGF0
YUxvZ0xuKCJDZWxsICIsIFJhd1BvaW50ZXIoY2VsbCksICIgbm90IGZvdW5kIik7Cit9CisKK3Zv
aWQgVmVyaWZpZXJTbG90VmlzaXRvcjo6ZHVtcE1hcmtlckRhdGEoSGVhcENlbGwqIGNlbGwsIGNv
bnN0IE1hcmtlckRhdGEqIG1hcmtlcikKK3sKKyAgICBpZiAoIW1hcmtlcikgeworICAgICAgICBk
YXRhTG9nTG4oIk1hcmtlciBkYXRhIGlzIG5vdCBhdmFpbGFibGUgZm9yIGNlbGwgIiwgUmF3UG9p
bnRlcihjZWxsKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBkYXRhTG9nTG4oIkNl
bGwgIiwgUmF3UG9pbnRlcihjZWxsKSwgIiB3YXMgcmVhY2hhYmxlIHZpYSBjZWxsICIsIFJhd1Bv
aW50ZXIobWFya2VyLT5wYXJlbnQpLCAiIGF0OiIpOworICAgIG1hcmtlci0+c3RhY2stPmR1bXAo
V1RGOjpkYXRhRmlsZSgpLCAiICAgICIpOworfQorCitib29sIFZlcmlmaWVyU2xvdFZpc2l0b3I6
OmlzRmlyc3RWaXNpdCgpIGNvbnN0Cit7CisgICAgLy8gV2UgbmVlZCB0byBhbHdheXMgcmV0dXJu
IGZhbHNlIGJlY2F1c2UgdGhpcyBpcyB1c2VkIHRvIGFnZWQgYW4gVW5saW5rZWRDb2RlQmxvY2sK
KyAgICAvLyBpbiB0aGUgcmVndWxhciBHQzogc2VlIFVubGlua2VkQ29kZUJsb2NrOjp2aXNpdENo
aWxkcmVuSW1wbCgpLiBXZSBzaG91bGQgbm90CisgICAgLy8gc2hvdWxkIGRvIHRoYXQgYWdpbmcg
YWN0aW9uLgorICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBWZXJpZmllclNsb3RWaXNpdG9y
Ojppc01hcmtlZChjb25zdCB2b2lkKiByYXdDZWxsKSBjb25zdAoreworICAgIEhlYXBDZWxsKiBj
ZWxsID0gYml0d2lzZV9jYXN0PEhlYXBDZWxsKj4ocmF3Q2VsbCk7CisgICAgaWYgKGNlbGwtPmlz
UHJlY2lzZUFsbG9jYXRpb24oKSkKKyAgICAgICAgcmV0dXJuIGlzTWFya2VkKGNlbGwtPnByZWNp
c2VBbGxvY2F0aW9uKCksIGNlbGwpOworICAgIHJldHVybiBpc01hcmtlZChjZWxsLT5tYXJrZWRC
bG9jaygpLCBjZWxsKTsKK30KKworYm9vbCBWZXJpZmllclNsb3RWaXNpdG9yOjppc01hcmtlZChQ
cmVjaXNlQWxsb2NhdGlvbiYgYWxsb2NhdGlvbiwgSGVhcENlbGwqKSBjb25zdAoreworICAgIHJl
dHVybiBtX3ByZWNpc2VBbGxvY2F0aW9uTWFwLmNvbnRhaW5zKCZhbGxvY2F0aW9uKTsKK30KKwor
Ym9vbCBWZXJpZmllclNsb3RWaXNpdG9yOjppc01hcmtlZChNYXJrZWRCbG9jayYgYmxvY2ssIEhl
YXBDZWxsKiBjZWxsKSBjb25zdAoreworICAgIGF1dG8gZW50cnkgPSBtX21hcmtlZEJsb2NrTWFw
LmZpbmQoJmJsb2NrKTsKKyAgICBpZiAoZW50cnkgPT0gbV9tYXJrZWRCbG9ja01hcC5lbmQoKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYXV0byYgZGF0YSA9IGVudHJ5LT52YWx1ZTsK
KyAgICB1bnNpZ25lZCBhdG9tTnVtYmVyID0gYmxvY2suYXRvbU51bWJlcihjZWxsKTsKKyAgICBy
ZXR1cm4gZGF0YS0+aXNNYXJrZWQoYXRvbU51bWJlcik7Cit9CisKK3ZvaWQgVmVyaWZpZXJTbG90
VmlzaXRvcjo6bWFya0F1eGlsaWFyeShjb25zdCB2b2lkKiBiYXNlKQoreworICAgIEhlYXBDZWxs
KiBjZWxsID0gYml0d2lzZV9jYXN0PEhlYXBDZWxsKj4oYmFzZSk7CisKKyAgICBBU1NFUlQoY2Vs
bC0+aGVhcCgpID09IGhlYXAoKSk7CisgICAgdGVzdEFuZFNldE1hcmtlZChjZWxsKTsKK30KKwor
Ym9vbCBWZXJpZmllclNsb3RWaXNpdG9yOjptdXRhdG9ySXNTdG9wcGVkKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBWZXJpZmllclNsb3RWaXNpdG9yOjp0ZXN0QW5kU2V0
TWFya2VkKGNvbnN0IHZvaWQqIHJhd0NlbGwpCit7CisgICAgSGVhcENlbGwqIGNlbGwgPSBiaXR3
aXNlX2Nhc3Q8SGVhcENlbGwqPihyYXdDZWxsKTsKKyAgICBpZiAoY2VsbC0+aXNQcmVjaXNlQWxs
b2NhdGlvbigpKQorICAgICAgICByZXR1cm4gdGVzdEFuZFNldE1hcmtlZChjZWxsLT5wcmVjaXNl
QWxsb2NhdGlvbigpKTsKKyAgICByZXR1cm4gdGVzdEFuZFNldE1hcmtlZChjZWxsLT5tYXJrZWRC
bG9jaygpLCBjZWxsKTsKK30KKworYm9vbCBWZXJpZmllclNsb3RWaXNpdG9yOjp0ZXN0QW5kU2V0
TWFya2VkKFByZWNpc2VBbGxvY2F0aW9uJiBhbGxvY2F0aW9uKQoreworICAgIHN0ZDo6dW5pcXVl
X3B0cjxQcmVjaXNlQWxsb2NhdGlvbkRhdGE+JiBkYXRhID0gbV9wcmVjaXNlQWxsb2NhdGlvbk1h
cC5hZGQoJmFsbG9jYXRpb24sIG51bGxwdHIpLml0ZXJhdG9yLT52YWx1ZTsKKyAgICBpZiAoIWRh
dGEpIHsKKyAgICAgICAgZGF0YSA9IG1ha2VVbmlxdWU8UHJlY2lzZUFsbG9jYXRpb25EYXRhPigm
YWxsb2NhdGlvbik7CisgICAgICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjp2ZXJib3NlVmVyaWZ5
R0MoKSkpCisgICAgICAgICAgICBkYXRhLT5hZGRNYXJrZXJEYXRhKHsgcGFyZW50Q2VsbCgpLCBT
dGFja1RyYWNlOjpjYXB0dXJlU3RhY2tUcmFjZShtYXhNYXJraW5nU3RhY2tGcmFtZXNUb0NhcHR1
cmUsIDIpIH0pOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVl
OworfQorCitib29sIFZlcmlmaWVyU2xvdFZpc2l0b3I6OnRlc3RBbmRTZXRNYXJrZWQoTWFya2Vk
QmxvY2smIGJsb2NrLCBIZWFwQ2VsbCogY2VsbCkKK3sKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8TWFy
a2VkQmxvY2tEYXRhPiYgZGF0YSA9IG1fbWFya2VkQmxvY2tNYXAuYWRkKCZibG9jaywgbnVsbHB0
cikuaXRlcmF0b3ItPnZhbHVlOworICAgIGlmICghZGF0YSkKKyAgICAgICAgZGF0YSA9IG1ha2VV
bmlxdWU8TWFya2VkQmxvY2tEYXRhPigmYmxvY2spOworCisgICAgdW5zaWduZWQgYXRvbU51bWJl
ciA9IGJsb2NrLmF0b21OdW1iZXIoY2VsbCk7CisgICAgYm9vbCBhbHJlYWR5U2V0ID0gZGF0YS0+
dGVzdEFuZFNldE1hcmtlZChhdG9tTnVtYmVyKTsKKyAgICBpZiAoIWFscmVhZHlTZXQgJiYgVU5M
SUtFTFkoT3B0aW9uczo6dmVyYm9zZVZlcmlmeUdDKCkpKQorICAgICAgICBkYXRhLT5hZGRNYXJr
ZXJEYXRhKGF0b21OdW1iZXIsIHsgcGFyZW50Q2VsbCgpLCBTdGFja1RyYWNlOjpjYXB0dXJlU3Rh
Y2tUcmFjZShtYXhNYXJraW5nU3RhY2tGcmFtZXNUb0NhcHR1cmUsIDIpIH0pOworICAgIHJldHVy
biBhbHJlYWR5U2V0OworfQorCit2b2lkIFZlcmlmaWVyU2xvdFZpc2l0b3I6OnNldE1hcmtlZEFu
ZEFwcGVuZFRvTWFya1N0YWNrKEpTQ2VsbCogY2VsbCkKK3sKKyAgICBpZiAobV9zdXBwcmVzc1Zl
cmlmaWVyKQorICAgICAgICByZXR1cm47CisgICAgaWYgKHRlc3RBbmRTZXRNYXJrZWQoY2VsbCkp
CisgICAgICAgIHJldHVybjsKKyAgICBhcHBlbmRUb01hcmtTdGFjayhjZWxsKTsKK30KKwordm9p
ZCBWZXJpZmllclNsb3RWaXNpdG9yOjp2aXNpdEFzQ29uc3RyYWludChjb25zdCBKU0NlbGwqIGNl
bGwpCit7CisgICAgdmlzaXRDaGlsZHJlbihjZWxsKTsKK30KKwordm9pZCBWZXJpZmllclNsb3RW
aXNpdG9yOjp2aXNpdENoaWxkcmVuKGNvbnN0IEpTQ2VsbCogY2VsbCkKK3sKKyAgICBSRUxFQVNF
X0FTU0VSVChpc01hcmtlZChjZWxsKSk7CisgICAgc3dpdGNoIChjZWxsLT50eXBlKCkpIHsKKyAg
ICBjYXNlIFN0cmluZ1R5cGU6CisgICAgICAgIEpTU3RyaW5nOjp2aXNpdENoaWxkcmVuKGNvbnN0
X2Nhc3Q8SlNDZWxsKj4oY2VsbCksICp0aGlzKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgIAor
ICAgIGNhc2UgRmluYWxPYmplY3RUeXBlOgorICAgICAgICBKU0ZpbmFsT2JqZWN0Ojp2aXNpdENo
aWxkcmVuKGNvbnN0X2Nhc3Q8SlNDZWxsKj4oY2VsbCksICp0aGlzKTsKKyAgICAgICAgYnJlYWs7
CisKKyAgICBjYXNlIEFycmF5VHlwZToKKyAgICAgICAgSlNBcnJheTo6dmlzaXRDaGlsZHJlbihj
b25zdF9jYXN0PEpTQ2VsbCo+KGNlbGwpLCAqdGhpcyk7CisgICAgICAgIGJyZWFrOworICAgICAg
ICAKKyAgICBkZWZhdWx0OgorICAgICAgICAvLyBGSVhNRTogVGhpcyBjb3VsZCBiZSBzbyBtdWNo
IGJldHRlci4KKyAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE2MjQ2MgorICAgICAgICBjZWxsLT5tZXRob2RUYWJsZSh2bSgpKS0+dmlzaXRDaGlsZHJl
bihjb25zdF9jYXN0PEpTQ2VsbCo+KGNlbGwpLCAqdGhpcyk7CisgICAgICAgIGJyZWFrOworICAg
IH0KK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9WZXJpZmllclNsb3RWaXNpdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvVmVyaWZpZXJTbG90VmlzaXRvci5oCShub25leGlzdGVudCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1ZlcmlmaWVyU2xvdFZpc2l0b3IuaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDE2OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQWJzdHJhY3RTbG90VmlzaXRvci5o
IgorI2luY2x1ZGUgIkpTQ0pTVmFsdWUuaCIKKyNpbmNsdWRlICJWaXNpdFJhY2VLZXkuaCIKKyNp
bmNsdWRlICJXZWFrLmgiCisjaW5jbHVkZSA8bWVtb3J5PgorI2luY2x1ZGUgPHd0Zi9CaXRWZWN0
b3IuaD4KKyNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KKyNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5o
PgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2lu
Y2x1ZGUgPHd0Zi9TaGFyZWRUYXNrLmg+CisKK25hbWVzcGFjZSBXVEYgeworCitjbGFzcyBTdGFj
a1RyYWNlOworCit9IC8vIG5hbWVzcGFjZSBXVEYKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNz
IENvbnNlcnZhdGl2ZVJvb3RzOworY2xhc3MgSGVhcDsKK2NsYXNzIEhlYXBDZWxsOworY2xhc3Mg
UHJlY2lzZUFsbG9jYXRpb247CitjbGFzcyBNYXJrZWRCbG9jazsKKwordXNpbmcgV1RGOjpTdGFj
a1RyYWNlOworCitjbGFzcyBWZXJpZmllclNsb3RWaXNpdG9yIDogcHVibGljIEFic3RyYWN0U2xv
dFZpc2l0b3IgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFZlcmlmaWVyU2xvdFZpc2l0b3Ip
OworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworICAgIHVzaW5nIEJhc2UgPSBBYnN0cmFj
dFNsb3RWaXNpdG9yOworcHVibGljOgorICAgIHN0cnVjdCBNYXJrZXJEYXRhIHsKKyAgICAgICAg
TWFya2VyRGF0YSgpID0gZGVmYXVsdDsKKyAgICAgICAgTWFya2VyRGF0YShNYXJrZXJEYXRhJiYp
ID0gZGVmYXVsdDsKKyAgICAgICAgTWFya2VyRGF0YShIZWFwQ2VsbCosIHN0ZDo6dW5pcXVlX3B0
cjxTdGFja1RyYWNlPiYmKTsKKyAgICAgICAgTWFya2VyRGF0YSYgb3BlcmF0b3I9KE1hcmtlckRh
dGEmJikgPSBkZWZhdWx0OworCisgICAgICAgIEhlYXBDZWxsKiBwYXJlbnQgeyBudWxscHRyIH07
CisgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxTdGFja1RyYWNlPiBzdGFjazsKKyAgICB9OworCisg
ICAgVmVyaWZpZXJTbG90VmlzaXRvcihIZWFwJik7CisgICAgflZlcmlmaWVyU2xvdFZpc2l0b3Io
KTsKKworICAgIHZvaWQgYXBwZW5kKGNvbnN0IENvbnNlcnZhdGl2ZVJvb3RzJikgZmluYWw7Cisg
ICAgdm9pZCBhcHBlbmRVbmJhcnJpZXJlZEltcGwoSlNDZWxsKikgZmluYWw7CisgICAgdm9pZCBh
cHBlbmRIaWRkZW5VbmJhcnJpZXJlZEltcGwoSlNDZWxsKikgZmluYWw7CisKKyAgICBib29sIGlz
Rmlyc3RWaXNpdCgpIGNvbnN0IGZpbmFsOworICAgIGJvb2wgaXNNYXJrZWQoY29uc3Qgdm9pZCop
IGNvbnN0IGZpbmFsOworICAgIGJvb2wgaXNNYXJrZWQoTWFya2VkQmxvY2smLCBIZWFwQ2VsbCop
IGNvbnN0IGZpbmFsOworICAgIGJvb2wgaXNNYXJrZWQoUHJlY2lzZUFsbG9jYXRpb24mLCBIZWFw
Q2VsbCopIGNvbnN0IGZpbmFsOworCisgICAgdm9pZCBtYXJrQXV4aWxpYXJ5KGNvbnN0IHZvaWQq
KSBmaW5hbDsKKworICAgIHZvaWQgcmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKHNpemVfdCkgZmlu
YWwgeyB9CisjaWYgRU5BQkxFKFJFU09VUkNFX1VTQUdFKQorICAgIHZvaWQgcmVwb3J0RXh0ZXJu
YWxNZW1vcnlWaXNpdGVkKHNpemVfdCkgZmluYWwgeyB9CisjZW5kaWYKKworICAgIGJvb2wgbXV0
YXRvcklzU3RvcHBlZCgpIGNvbnN0IGZpbmFsOworCisgICAgdm9pZCBkaWRSYWNlKGNvbnN0IFZp
c2l0UmFjZUtleSYpIGZpbmFsIHsgfQorICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0
IGZpbmFsIHsgfQorCisgICAgdm9pZCB2aXNpdEFzQ29uc3RyYWludChjb25zdCBKU0NlbGwqKSBm
aW5hbDsKKworICAgIHZvaWQgZHJhaW4oKTsKKworICAgIHZvaWQgYWRkUGFyYWxsZWxDb25zdHJh
aW50VGFzayhSZWZQdHI8U2hhcmVkVGFzazx2b2lkKEFic3RyYWN0U2xvdFZpc2l0b3ImKT4+KSBm
aW5hbDsKKyAgICB2b2lkIGV4ZWN1dGVDb25zdHJhaW50VGFza3MoKTsKKworICAgIHRlbXBsYXRl
PHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaExpdmVDZWxsKGNvbnN0IEZ1bmN0b3ImKTsK
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hMaXZlUHJlY2lzZUFs
bG9jYXRpb24oY29uc3QgRnVuY3RvciYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+
IHZvaWQgZm9yRWFjaExpdmVNYXJrZWRCbG9ja0NlbGwoY29uc3QgRnVuY3RvciYpOworCisgICAg
SlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBkdW1wTWFya2VyRGF0YShIZWFwQ2VsbCopOworCitwcml2
YXRlOgorICAgIGNsYXNzIE1hcmtlZEJsb2NrRGF0YSB7CisgICAgICAgIFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEOworICAgICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShNYXJrZWRCbG9ja0RhdGEp
OworICAgIHB1YmxpYzoKKyAgICAgICAgTWFya2VkQmxvY2tEYXRhKE1hcmtlZEJsb2NrKik7CisK
KyAgICAgICAgTWFya2VkQmxvY2sqIGJsb2NrKCkgY29uc3QgeyByZXR1cm4gbV9ibG9jazsgfQor
ICAgICAgICBjb25zdCBCaXRWZWN0b3ImIGF0b21zKCkgY29uc3QgeyByZXR1cm4gbV9hdG9tczsg
fQorCisgICAgICAgIGJvb2wgaXNNYXJrZWQodW5zaWduZWQgYXRvbU51bWJlcikgeyByZXR1cm4g
bV9hdG9tcy5xdWlja0dldChhdG9tTnVtYmVyKTsgfQorICAgICAgICBib29sIHRlc3RBbmRTZXRN
YXJrZWQodW5zaWduZWQgYXRvbU51bWJlcikgeyByZXR1cm4gbV9hdG9tcy5xdWlja1NldChhdG9t
TnVtYmVyKTsgfQorCisgICAgICAgIHZvaWQgYWRkTWFya2VyRGF0YSh1bnNpZ25lZCBhdG9tTnVt
YmVyLCBNYXJrZXJEYXRhJiYpOworICAgICAgICBjb25zdCBNYXJrZXJEYXRhKiBtYXJrZXJEYXRh
KHVuc2lnbmVkIGF0b21OdW1iZXIpIGNvbnN0OworCisgICAgcHJpdmF0ZToKKyAgICAgICAgTWFy
a2VkQmxvY2sqIG1fYmxvY2sgeyBudWxscHRyIH07CisgICAgICAgIEJpdFZlY3RvciBtX2F0b21z
OworICAgICAgICBWZWN0b3I8TWFya2VyRGF0YT4gbV9tYXJrZXJzOworICAgIH07CisKKyAgICBj
bGFzcyBQcmVjaXNlQWxsb2NhdGlvbkRhdGEgeworICAgICAgICBXVEZfTUFLRV9GQVNUX0FMTE9D
QVRFRDsKKyAgICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUHJlY2lzZUFsbG9jYXRpb25EYXRh
KTsKKyAgICBwdWJsaWM6CisgICAgICAgIFByZWNpc2VBbGxvY2F0aW9uRGF0YShQcmVjaXNlQWxs
b2NhdGlvbiopOworICAgICAgICBQcmVjaXNlQWxsb2NhdGlvbiogYWxsb2NhdGlvbigpIGNvbnN0
IHsgcmV0dXJuIG1fYWxsb2NhdGlvbjsgfQorCisgICAgICAgIHZvaWQgYWRkTWFya2VyRGF0YShN
YXJrZXJEYXRhJiYpOworICAgICAgICBjb25zdCBNYXJrZXJEYXRhKiBtYXJrZXJEYXRhKCkgY29u
c3Q7CisKKyAgICBwcml2YXRlOgorICAgICAgICBQcmVjaXNlQWxsb2NhdGlvbiogbV9hbGxvY2F0
aW9uIHsgbnVsbHB0ciB9OworICAgICAgICBNYXJrZXJEYXRhIG1fbWFya2VyOworICAgIH07CisK
KyAgICB1c2luZyBNYXJrZWRCbG9ja01hcCA9IEhhc2hNYXA8TWFya2VkQmxvY2sqLCBzdGQ6OnVu
aXF1ZV9wdHI8TWFya2VkQmxvY2tEYXRhPj47CisgICAgdXNpbmcgUHJlY2lzZUFsbG9jYXRpb25N
YXAgPSBIYXNoTWFwPFByZWNpc2VBbGxvY2F0aW9uKiwgc3RkOjp1bmlxdWVfcHRyPFByZWNpc2VB
bGxvY2F0aW9uRGF0YT4+OworCisgICAgdm9pZCBhcHBlbmRUb01hcmtTdGFjayhKU0NlbGwqKTsK
KyAgICB2b2lkIGFwcGVuZFNsb3coSlNDZWxsKiBjZWxsKSB7IHNldE1hcmtlZEFuZEFwcGVuZFRv
TWFya1N0YWNrKGNlbGwpOyB9CisKKyAgICBib29sIHRlc3RBbmRTZXRNYXJrZWQoY29uc3Qgdm9p
ZCogcmF3Q2VsbCk7CisgICAgYm9vbCB0ZXN0QW5kU2V0TWFya2VkKFByZWNpc2VBbGxvY2F0aW9u
Jik7CisgICAgYm9vbCB0ZXN0QW5kU2V0TWFya2VkKE1hcmtlZEJsb2NrJiwgSGVhcENlbGwqKTsK
KworICAgIHZvaWQgc2V0TWFya2VkQW5kQXBwZW5kVG9NYXJrU3RhY2soSlNDZWxsKik7CisKKyAg
ICB2b2lkIHZpc2l0Q2hpbGRyZW4oY29uc3QgSlNDZWxsKik7CisKKyAgICB2b2lkIGR1bXBNYXJr
ZXJEYXRhKFByZWNpc2VBbGxvY2F0aW9uJiwgSGVhcENlbGwqKTsKKyAgICB2b2lkIGR1bXBNYXJr
ZXJEYXRhKE1hcmtlZEJsb2NrJiwgSGVhcENlbGwqKTsKKyAgICB2b2lkIGR1bXBNYXJrZXJEYXRh
KEhlYXBDZWxsKiwgY29uc3QgTWFya2VyRGF0YSopOworCisgICAgUHJlY2lzZUFsbG9jYXRpb25N
YXAgbV9wcmVjaXNlQWxsb2NhdGlvbk1hcDsKKyAgICBNYXJrZWRCbG9ja01hcCBtX21hcmtlZEJs
b2NrTWFwOworICAgIENvbmN1cnJlbnRQdHJIYXNoU2V0IG1fb3BhcXVlUm9vdFN0b3JhZ2U7Cisg
ICAgRGVxdWU8UmVmUHRyPFNoYXJlZFRhc2s8dm9pZChBYnN0cmFjdFNsb3RWaXNpdG9yJik+Piwg
MzI+IG1fY29uc3RyYWludFRhc2tzOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9WZXJpZmllclNsb3RWaXNpdG9ySW5saW5lcy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1ZlcmlmaWVyU2xvdFZpc2l0
b3JJbmxpbmVzLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
VmVyaWZpZXJTbG90VmlzaXRvcklubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYy
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdt
YSBvbmNlCisKKyNpbmNsdWRlICJWZXJpZmllclNsb3RWaXNpdG9yLmgiCisKKyNpbmNsdWRlICJB
YnN0cmFjdFNsb3RWaXNpdG9ySW5saW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsKKwordGVtcGxh
dGU8dHlwZW5hbWUgRnVuY3Rvcj4KK3ZvaWQgVmVyaWZpZXJTbG90VmlzaXRvcjo6Zm9yRWFjaExp
dmVDZWxsKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCit7CisgICAgZm9yRWFjaExpdmVQcmVjaXNl
QWxsb2NhdGlvbihmdW5jdG9yKTsKKyAgICBmb3JFYWNoTGl2ZU1hcmtlZEJsb2NrQ2VsbChmdW5j
dG9yKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KK3ZvaWQgVmVyaWZpZXJTbG90
VmlzaXRvcjo6Zm9yRWFjaExpdmVQcmVjaXNlQWxsb2NhdGlvbihjb25zdCBGdW5jdG9yJiBmdW5j
KQoreworICAgIGZvciAoYXV0byYgZW50cnkgOiBtX3ByZWNpc2VBbGxvY2F0aW9uTWFwKSB7Cisg
ICAgICAgIFByZWNpc2VBbGxvY2F0aW9uKiBhbGxvY2F0aW9uID0gZW50cnkudmFsdWUtPmFsbG9j
YXRpb24oKTsKKyAgICAgICAgZnVuYyhhbGxvY2F0aW9uLT5jZWxsKCkpOworICAgIH0KK30KKwor
dGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KK3ZvaWQgVmVyaWZpZXJTbG90VmlzaXRvcjo6Zm9y
RWFjaExpdmVNYXJrZWRCbG9ja0NlbGwoY29uc3QgRnVuY3RvciYgZnVuYykKK3sKKyAgICBmb3Ig
KGF1dG8mIGVudHJ5IDogbV9tYXJrZWRCbG9ja01hcCkgeworICAgICAgICBhdXRvJiBkYXRhID0g
ZW50cnkudmFsdWU7CisgICAgICAgIE1hcmtlZEJsb2NrKiBibG9jayA9IGRhdGEtPmJsb2NrKCk7
CisgICAgICAgIGNvbnN0IEJpdFZlY3RvciYgYXRvbXMgPSAgZGF0YS0+YXRvbXMoKTsKKyAgICAg
ICAgZm9yIChhdXRvIGF0b21OdW1iZXIgOiBhdG9tcykKKyAgICAgICAgICAgIGZ1bmMoYml0d2lz
ZV9jYXN0PEhlYXBDZWxsKj4oYmxvY2stPmhhbmRsZSgpLmF0b21BdChhdG9tTnVtYmVyKSkpOwor
ICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9WaXNpdENvdW50ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9WaXNpdENvdW50ZXIuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvVmlzaXRDb3VudGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjUsNyArMjUsNyBA
QAogCiAjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgIlNsb3RWaXNpdG9yLmgiCisjaW5jbHVkZSAi
QWJzdHJhY3RTbG90VmlzaXRvci5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIApAQCAtMzMsMTMgKzMz
LDEzIEBAIGNsYXNzIFZpc2l0Q291bnRlciB7CiBwdWJsaWM6CiAgICAgVmlzaXRDb3VudGVyKCkg
eyB9CiAgICAgCi0gICAgVmlzaXRDb3VudGVyKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorICAgIFZp
c2l0Q291bnRlcihBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogICAgICAgICA6IG1fdmlz
aXRvcigmdmlzaXRvcikKICAgICAgICAgLCBtX2luaXRpYWxWaXNpdENvdW50KHZpc2l0b3Iudmlz
aXRDb3VudCgpKQogICAgIHsKICAgICB9CiAgICAgCi0gICAgU2xvdFZpc2l0b3ImIHZpc2l0b3Io
KSBjb25zdCB7IHJldHVybiAqbV92aXNpdG9yOyB9CisgICAgQWJzdHJhY3RTbG90VmlzaXRvciYg
dmlzaXRvcigpIGNvbnN0IHsgcmV0dXJuICptX3Zpc2l0b3I7IH0KICAgICAKICAgICBzaXplX3Qg
dmlzaXRDb3VudCgpIGNvbnN0CiAgICAgewpAQCAtNDcsNyArNDcsNyBAQCBwdWJsaWM6CiAgICAg
fQogICAgIAogcHJpdmF0ZToKLSAgICBTbG90VmlzaXRvciogbV92aXNpdG9yIHsgbnVsbHB0ciB9
OworICAgIEFic3RyYWN0U2xvdFZpc2l0b3IqIG1fdmlzaXRvciB7IG51bGxwdHIgfTsKICAgICBz
aXplX3QgbV9pbml0aWFsVmlzaXRDb3VudCB7IDAgfTsKIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL1dlYWtCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvV2Vha0Jsb2NrLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha0Jsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxNyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTk4
LDEyICs5OCwxMSBAQCB2b2lkIFdlYWtCbG9jazo6c3dlZXAoKQogICAgIEFTU0VSVCghbV9zd2Vl
cFJlc3VsdC5pc051bGwoKSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIENvbnRhaW5lclR5cGU+
Ci12b2lkIFdlYWtCbG9jazo6c3BlY2lhbGl6ZWRWaXNpdChDb250YWluZXJUeXBlJiBjb250YWlu
ZXIsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgQ29udGFpbmVyVHlw
ZSwgdHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgV2Vha0Jsb2NrOjpzcGVjaWFsaXplZFZpc2l0KENv
bnRhaW5lclR5cGUmIGNvbnRhaW5lciwgVmlzaXRvciYgdmlzaXRvcikKIHsKLSAgICBIZWFwVmVy
c2lvbiBtYXJraW5nVmVyc2lvbiA9IHZpc2l0b3IubWFya2luZ1ZlcnNpb24oKTsKLQogICAgIHNp
emVfdCBjb3VudCA9IHdlYWtJbXBsQ291bnQoKTsKKyAgICBIZWFwQW5hbHl6ZXIqIGhlYXBBbmFs
eXplciA9IHZpc2l0b3Iudm0oKS5hY3RpdmVIZWFwQW5hbHl6ZXIoKTsKICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKICAgICAgICAgV2Vha0ltcGwqIHdlYWtJbXBsID0g
JndlYWtJbXBscygpW2ldOwogICAgICAgICBpZiAod2Vha0ltcGwtPnN0YXRlKCkgIT0gV2Vha0lt
cGw6OkxpdmUpCkBAIC0xMTQsMTIgKzExMywxMiBAQCB2b2lkIFdlYWtCbG9jazo6c3BlY2lhbGl6
ZWRWaXNpdChDb250YWluCiAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICBKU1ZhbHVl
IGpzVmFsdWUgPSB3ZWFrSW1wbC0+anNWYWx1ZSgpOwotICAgICAgICBpZiAoY29udGFpbmVyLmlz
TWFya2VkKG1hcmtpbmdWZXJzaW9uLCBqc1ZhbHVlLmFzQ2VsbCgpKSkKKyAgICAgICAgaWYgKHZp
c2l0b3IuaXNNYXJrZWQoY29udGFpbmVyLCBqc1ZhbHVlLmFzQ2VsbCgpKSkKICAgICAgICAgICAg
IGNvbnRpbnVlOwogICAgICAgICAKICAgICAgICAgY29uc3QgY2hhciogcmVhc29uID0gIiI7CiAg
ICAgICAgIGNvbnN0IGNoYXIqKiByZWFzb25QdHIgPSBudWxscHRyOwotICAgICAgICBpZiAoVU5M
SUtFTFkodmlzaXRvci5pc0FuYWx5emluZ0hlYXAoKSkpCisgICAgICAgIGlmIChVTkxJS0VMWSho
ZWFwQW5hbHl6ZXIpKQogICAgICAgICAgICAgcmVhc29uUHRyID0gJnJlYXNvbjsKIAogICAgICAg
ICBpZiAoIXdlYWtIYW5kbGVPd25lci0+aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSGFuZGxl
PFVua25vd24+Ojp3cmFwU2xvdCgmY29uc3RfY2FzdDxKU1ZhbHVlJj4oanNWYWx1ZSkpLCB3ZWFr
SW1wbC0+Y29udGV4dCgpLCB2aXNpdG9yLCByZWFzb25QdHIpKQpAQCAtMTI3LDE0ICsxMjYsMTQg
QEAgdm9pZCBXZWFrQmxvY2s6OnNwZWNpYWxpemVkVmlzaXQoQ29udGFpbgogCiAgICAgICAgIHZp
c2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQoanNWYWx1ZSk7CiAKLSAgICAgICAgaWYgKFVOTElLRUxZ
KHZpc2l0b3IuaXNBbmFseXppbmdIZWFwKCkpKSB7CisgICAgICAgIGlmIChVTkxJS0VMWShoZWFw
QW5hbHl6ZXIpKSB7CiAgICAgICAgICAgICBpZiAoanNWYWx1ZS5pc0NlbGwoKSkKLSAgICAgICAg
ICAgICAgICB2aXNpdG9yLmhlYXBBbmFseXplcigpLT5zZXRPcGFxdWVSb290UmVhY2hhYmlsaXR5
UmVhc29uRm9yQ2VsbChqc1ZhbHVlLmFzQ2VsbCgpLCAqcmVhc29uUHRyKTsKKyAgICAgICAgICAg
ICAgICBoZWFwQW5hbHl6ZXItPnNldE9wYXF1ZVJvb3RSZWFjaGFiaWxpdHlSZWFzb25Gb3JDZWxs
KGpzVmFsdWUuYXNDZWxsKCksICpyZWFzb25QdHIpOwogICAgICAgICB9CiAgICAgfQogfQogCi12
b2lkIFdlYWtCbG9jazo6dmlzaXQoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIFdlYWtCbG9j
azo6dmlzaXQoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICAvLyBJZiBhIGJs
b2NrIGlzIGNvbXBsZXRlbHkgZW1wdHksIGEgdmlzaXQgd29uJ3QgaGF2ZSBhbnkgZWZmZWN0Lgog
ICAgIGlmIChpc0VtcHR5KCkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFr
QmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrQmxv
Y2suaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vh
a0Jsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDEyLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEyLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMiw4ICszMiw4IEBACiAKIG5hbWVzcGFjZSBK
U0MgewogCitjbGFzcyBBYnN0cmFjdFNsb3RWaXNpdG9yOwogY2xhc3MgSGVhcDsKLWNsYXNzIFNs
b3RWaXNpdG9yOwogCiBERUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihXZWFr
QmxvY2spOwogCkBAIC02NSw3ICs2NSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHN3ZWVwKCk7CiAg
ICAgU3dlZXBSZXN1bHQgdGFrZVN3ZWVwUmVzdWx0KCk7CiAKLSAgICB2b2lkIHZpc2l0KFNsb3RW
aXNpdG9yJik7CisgICAgdm9pZCB2aXNpdChBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAKICAgICB2
b2lkIHJlYXAoKTsKIApAQCAtNzUsOCArNzUsOCBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIHN0
YXRpYyBGcmVlQ2VsbCogYXNGcmVlQ2VsbChXZWFrSW1wbCopOwogICAgIAotICAgIHRlbXBsYXRl
PHR5cGVuYW1lIENvbnRhaW5lclR5cGU+Ci0gICAgdm9pZCBzcGVjaWFsaXplZFZpc2l0KENvbnRh
aW5lclR5cGUmLCBTbG90VmlzaXRvciYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIENvbnRhaW5l
clR5cGUsIHR5cGVuYW1lIFZpc2l0b3I+CisgICAgdm9pZCBzcGVjaWFsaXplZFZpc2l0KENvbnRh
aW5lclR5cGUmLCBWaXNpdG9yJik7CiAKICAgICBleHBsaWNpdCBXZWFrQmxvY2soQ2VsbENvbnRh
aW5lcik7CiAgICAgdm9pZCBmaW5hbGl6ZShXZWFrSW1wbCopOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvV2Vha0hhbmRsZU93bmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrSGFuZGxlT3duZXIuY3BwCShyZXZpc2lvbiAyNzI4MzAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrSGFuZGxlT3duZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTM1LDcgKzM1LDcgQEAgV2Vha0hhbmRsZU93bmVyOjp+V2Vha0hhbmRsZU93bmVy
KCkKIHsKIH0KIAotYm9vbCBXZWFrSGFuZGxlT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJv
b3RzKEhhbmRsZTxVbmtub3duPiwgdm9pZCosIFNsb3RWaXNpdG9yJiwgY29uc3QgY2hhcioqKQor
Ym9vbCBXZWFrSGFuZGxlT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEhhbmRsZTxV
bmtub3duPiwgdm9pZCosIEFic3RyYWN0U2xvdFZpc2l0b3ImLCBjb25zdCBjaGFyKiopCiB7CiAg
ICAgcmV0dXJuIGZhbHNlOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vh
a0hhbmRsZU93bmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
V2Vha0hhbmRsZU93bmVyLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL1dlYWtIYW5kbGVPd25lci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI5LDEzICsyOSwxMyBA
QAogCiBuYW1lc3BhY2UgSlNDIHsKIAotY2xhc3MgU2xvdFZpc2l0b3I7CitjbGFzcyBBYnN0cmFj
dFNsb3RWaXNpdG9yOwogCiBjbGFzcyBKU19FWFBPUlRfUFJJVkFURSBXZWFrSGFuZGxlT3duZXIg
ewogcHVibGljOgogICAgIHZpcnR1YWwgfldlYWtIYW5kbGVPd25lcigpOwogICAgIC8vIHJlYXNv
biB3aWxsIG9ubHkgYmUgbm9uLW51bGwgd2hlbiBnZW5lcmF0aW5nIGEgZGVidWcgR0MgaGVhcCBz
bmFwc2hvdC4KLSAgICB2aXJ0dWFsIGJvb2wgaXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSGFu
ZGxlPFVua25vd24+LCB2b2lkKiBjb250ZXh0LCBTbG90VmlzaXRvciYsIGNoYXIgY29uc3QqKiBy
ZWFzb24gPSBudWxscHRyKTsKKyAgICB2aXJ0dWFsIGJvb2wgaXNSZWFjaGFibGVGcm9tT3BhcXVl
Um9vdHMoSGFuZGxlPFVua25vd24+LCB2b2lkKiBjb250ZXh0LCBBYnN0cmFjdFNsb3RWaXNpdG9y
JiwgY2hhciBjb25zdCoqIHJlYXNvbiA9IG51bGxwdHIpOwogICAgIHZpcnR1YWwgdm9pZCBmaW5h
bGl6ZShIYW5kbGU8VW5rbm93bj4sIHZvaWQqIGNvbnRleHQpOwogfTsKIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha1NldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL1dlYWtTZXQuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvV2Vha1NldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTEsNyArNTEs
NyBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc0VtcHR5KCkgY29uc3Q7CiAgICAgYm9vbCBpc1RyaXZp
YWxseURlc3RydWN0aWJsZSgpIGNvbnN0OwogCi0gICAgdm9pZCB2aXNpdChTbG90VmlzaXRvciYp
OworICAgIHZvaWQgdmlzaXQoQWJzdHJhY3RTbG90VmlzaXRvciYpOwogCiAgICAgdm9pZCByZWFw
KCk7CiAgICAgdm9pZCBzd2VlcCgpOwpAQCAtMTE0LDcgKzExNCw3IEBAIGlubGluZSB2b2lkIFdl
YWtTZXQ6Omxhc3RDaGFuY2VUb0ZpbmFsaXoKICAgICAgICAgYmxvY2stPmxhc3RDaGFuY2VUb0Zp
bmFsaXplKCk7CiB9CiAKLWlubGluZSB2b2lkIFdlYWtTZXQ6OnZpc2l0KFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQoraW5saW5lIHZvaWQgV2Vha1NldDo6dmlzaXQoQWJzdHJhY3RTbG90VmlzaXRvciYg
dmlzaXRvcikKIHsKICAgICBmb3IgKFdlYWtCbG9jayogYmxvY2sgPSBtX2Jsb2Nrcy5oZWFkKCk7
IGJsb2NrOyBibG9jayA9IGJsb2NrLT5uZXh0KCkpCiAgICAgICAgIGJsb2NrLT52aXNpdCh2aXNp
dG9yKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TaGFkb3dDaGlj
a2VuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIv
U2hhZG93Q2hpY2tlbi5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnRlcnByZXRlci9TaGFkb3dDaGlja2VuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxOSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ0
MCw3ICs0NDAsNyBAQCB2b2lkIFNoYWRvd0NoaWNrZW46OnVwZGF0ZShWTSYgdm0sIENhbGxGCiAg
ICAgICAgIGRhdGFMb2coIiAgICBBZnRlciBjbGVhbi11cDogIiwgKnRoaXMsICJcbiIpOwogfQog
Ci12b2lkIFNoYWRvd0NoaWNrZW46OnZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3Ip
Cit2b2lkIFNoYWRvd0NoaWNrZW46OnZpc2l0Q2hpbGRyZW4oQWJzdHJhY3RTbG90VmlzaXRvciYg
dmlzaXRvcikKIHsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2xvZ0N1cnNvciAtIG1fbG9nOyBp
LS07KSB7CiAgICAgICAgIEpTT2JqZWN0KiBjYWxsZWUgPSBtX2xvZ1tpXS5jYWxsZWU7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU2hhZG93Q2hpY2tlbi5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TaGFkb3dDaGlja2Vu
LmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRl
ci9TaGFkb3dDaGlja2VuLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzUsMTMgKzM1LDEzIEBACiAKIG5hbWVz
cGFjZSBKU0MgewogCitjbGFzcyBBYnN0cmFjdFNsb3RWaXNpdG9yOwogY2xhc3MgQ2FsbEZyYW1l
OwogY2xhc3MgQ29kZUJsb2NrOwogY2xhc3MgSlNBcnJheTsKIGNsYXNzIEpTT2JqZWN0OwogY2xh
c3MgSlNTY29wZTsKIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKLWNsYXNzIFNsb3RWaXNp
dG9yOwogY2xhc3MgVk07CiAKIC8vIFNoYWRvd0NoaWNrZW4gaXMgYSBsb2cgdGhhdCBjYW4gYmUg
dXNlZCB0byBwcm9kdWNlIGEgc2hhZG93IHN0YWNrIG9mIENISUNLRU4tc3R5bGUgc3RhY2sgZnJh
bWVzLgpAQCAtMTk2LDcgKzE5Niw3IEBAIHB1YmxpYzoKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBG
dW5jdG9yPgogICAgIHZvaWQgaXRlcmF0ZShWTSYsIENhbGxGcmFtZSosIGNvbnN0IEZ1bmN0b3Im
KTsKICAgICAKLSAgICB2b2lkIHZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKKyAgICB2b2lk
IHZpc2l0Q2hpbGRyZW4oQWJzdHJhY3RTbG90VmlzaXRvciYpOwogICAgIHZvaWQgcmVzZXQoKTsK
ICAgICAKICAgICAvLyBKSVQgc3VwcG9ydC4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvR0NBd2FyZUpJVFN0dWJSb3V0aW5lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0dDQXdhcmVKSVRTdHViUm91dGluZS5jcHAJKHJldmlzaW9uIDI3MjgzMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvR0NBd2FyZUpJVFN0dWJSb3V0aW5lLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIt
MjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTItMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTczLDcgKzczLDcgQEAgdm9pZCBHQ0F3YXJlSklUU3R1YlJvdXRp
bmU6OmRlbGV0ZUZyb21HQwogICAgIGRlbGV0ZSB0aGlzOwogfQogCi12b2lkIEdDQXdhcmVKSVRT
dHViUm91dGluZTo6bWFya1JlcXVpcmVkT2JqZWN0c0ludGVybmFsKFNsb3RWaXNpdG9yJikKK3Zv
aWQgR0NBd2FyZUpJVFN0dWJSb3V0aW5lOjptYXJrUmVxdWlyZWRPYmplY3RzSW50ZXJuYWwoQWJz
dHJhY3RTbG90VmlzaXRvciYpCiB7CiB9CiAKQEAgLTkyLDcgKzkyLDcgQEAgTWFya2luZ0dDQXdh
cmVKSVRTdHViUm91dGluZTo6fk1hcmtpbmdHQwogewogfQogCi12b2lkIE1hcmtpbmdHQ0F3YXJl
SklUU3R1YlJvdXRpbmU6Om1hcmtSZXF1aXJlZE9iamVjdHNJbnRlcm5hbChTbG90VmlzaXRvciYg
dmlzaXRvcikKK3ZvaWQgTWFya2luZ0dDQXdhcmVKSVRTdHViUm91dGluZTo6bWFya1JlcXVpcmVk
T2JqZWN0c0ludGVybmFsKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgZm9y
IChhdXRvJiBlbnRyeSA6IG1fY2VsbHMpCiAgICAgICAgIHZpc2l0b3IuYXBwZW5kKGVudHJ5KTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvR0NBd2FyZUpJVFN0dWJSb3V0aW5lLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9HQ0F3YXJlSklUU3R1YlJv
dXRpbmUuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9H
Q0F3YXJlSklUU3R1YlJvdXRpbmUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTYwLDggKzYwLDggQEAg
cHVibGljOgogICAgIHsKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgR0NBd2FyZUpJVFN0
dWJSb3V0aW5lKGNvZGUsIHZtKSk7CiAgICAgfQotICAgIAotICAgIHZvaWQgbWFya1JlcXVpcmVk
T2JqZWN0cyhTbG90VmlzaXRvciYgdmlzaXRvcikKKworICAgIHZvaWQgbWFya1JlcXVpcmVkT2Jq
ZWN0cyhBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogICAgIHsKICAgICAgICAgbWFya1Jl
cXVpcmVkT2JqZWN0c0ludGVybmFsKHZpc2l0b3IpOwogICAgIH0KQEAgLTcxLDcgKzcxLDcgQEAg
cHVibGljOgogcHJvdGVjdGVkOgogICAgIHZvaWQgb2JzZXJ2ZVplcm9SZWZDb3VudCgpIG92ZXJy
aWRlOwogICAgIAotICAgIHZpcnR1YWwgdm9pZCBtYXJrUmVxdWlyZWRPYmplY3RzSW50ZXJuYWwo
U2xvdFZpc2l0b3ImKTsKKyAgICB2aXJ0dWFsIHZvaWQgbWFya1JlcXVpcmVkT2JqZWN0c0ludGVy
bmFsKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKIAogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3Mg
SklUU3R1YlJvdXRpbmVTZXQ7CkBAIC04OSw3ICs4OSw3IEBAIHB1YmxpYzoKICAgICB+TWFya2lu
Z0dDQXdhcmVKSVRTdHViUm91dGluZSgpIG92ZXJyaWRlOwogICAgIAogcHJvdGVjdGVkOgotICAg
IHZvaWQgbWFya1JlcXVpcmVkT2JqZWN0c0ludGVybmFsKFNsb3RWaXNpdG9yJikgb3ZlcnJpZGU7
CisgICAgdm9pZCBtYXJrUmVxdWlyZWRPYmplY3RzSW50ZXJuYWwoQWJzdHJhY3RTbG90VmlzaXRv
ciYpIG92ZXJyaWRlOwogCiBwcml2YXRlOgogICAgIFZlY3RvcjxXcml0ZUJhcnJpZXI8SlNDZWxs
Pj4gbV9jZWxsczsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUV29ya2xpc3Qu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUV29ya2xpc3Qu
Y3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFdv
cmtsaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTYtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTYtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUuY3BwCShyZXZpc2lv
biAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1BvbHltb3JwaGljQ2FsbFN0
dWJSb3V0aW5lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTUtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEzNSw3ICsxMzUsNyBAQCBib29sIFBv
bHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lOjp2aXNpdFdlCiAgICAgcmV0dXJuIGlzU3RpbGxMaXZl
OwogfQogCi12b2lkIFBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lOjptYXJrUmVxdWlyZWRPYmpl
Y3RzSW50ZXJuYWwoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIFBvbHltb3JwaGljQ2FsbFN0
dWJSb3V0aW5lOjptYXJrUmVxdWlyZWRPYmplY3RzSW50ZXJuYWwoQWJzdHJhY3RTbG90VmlzaXRv
ciYgdmlzaXRvcikKIHsKICAgICBmb3IgKGF1dG8mIHZhcmlhbnQgOiBtX3ZhcmlhbnRzKQogICAg
ICAgICB2aXNpdG9yLmFwcGVuZCh2YXJpYW50KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L1BvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lLmgJKHJldmlzaW9u
IDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUG9seW1vcnBoaWNDYWxsU3R1
YlJvdXRpbmUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTUtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTUtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEwNSw3ICsxMDUsNyBAQCBwdWJsaWM6CiAg
ICAgYm9vbCB2aXNpdFdlYWsoVk0mKSBmaW5hbDsKIAogcHJpdmF0ZToKLSAgICB2b2lkIG1hcmtS
ZXF1aXJlZE9iamVjdHNJbnRlcm5hbChTbG90VmlzaXRvciYpIGZpbmFsOworICAgIHZvaWQgbWFy
a1JlcXVpcmVkT2JqZWN0c0ludGVybmFsKEFic3RyYWN0U2xvdFZpc2l0b3ImKSBmaW5hbDsKIAog
ICAgIFZlY3RvcjxXcml0ZUJhcnJpZXI8SlNDZWxsPiwgMj4gbV92YXJpYW50czsKICAgICBVbmlx
dWVBcnJheTx1aW50MzJfdD4gbV9mYXN0Q291bnRzOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQWJzdHJhY3RNb2R1bGVSZWNvcmQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Fic3RyYWN0TW9kdWxlUmVjb3JkLmNwcAkocmV2aXNp
b24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQWJzdHJhY3RNb2R1
bGVSZWNvcmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxNS0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjAsNyArNjAsOCBAQCB2b2lkIEFic3Ry
YWN0TW9kdWxlUmVjb3JkOjpmaW5pc2hDcmVhdGlvCiAgICAgcHV0RGlyZWN0KHZtLCBJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKHZtLCAiZGVwZW5kZW5jaWVzTWFwIl9zKSwgbV9kZXBlbmRlbmNpZXNN
YXAuZ2V0KCkpOwogfQogCi12b2lkIEFic3RyYWN0TW9kdWxlUmVjb3JkOjp2aXNpdENoaWxkcmVu
KEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPgordm9pZCBBYnN0cmFjdE1vZHVsZVJlY29yZDo6dmlzaXRDaGlsZHJlbkltcGwoSlND
ZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEFic3RyYWN0TW9kdWxlUmVjb3Jk
KiB0aGlzT2JqZWN0ID0ganNDYXN0PEFic3RyYWN0TW9kdWxlUmVjb3JkKj4oY2VsbCk7CiAgICAg
QVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNzAsNiAr
NzEsOCBAQCB2b2lkIEFic3RyYWN0TW9kdWxlUmVjb3JkOjp2aXNpdENoaWxkcmVuCiAgICAgdmlz
aXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9kZXBlbmRlbmNpZXNNYXApOwogfQogCitERUZJTkVf
VklTSVRfQ0hJTERSRU4oQWJzdHJhY3RNb2R1bGVSZWNvcmQpOworCiB2b2lkIEFic3RyYWN0TW9k
dWxlUmVjb3JkOjphcHBlbmRSZXF1ZXN0ZWRNb2R1bGUoY29uc3QgSWRlbnRpZmllciYgbW9kdWxl
TmFtZSkKIHsKICAgICBtX3JlcXVlc3RlZE1vZHVsZXMuYWRkKG1vZHVsZU5hbWUuaW1wbCgpKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Fic3RyYWN0TW9kdWxlUmVjb3Jk
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQWJzdHJhY3RN
b2R1bGVSZWNvcmQuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQWJzdHJhY3RNb2R1bGVSZWNvcmQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMzYsNyArMTM2
LDcgQEAgcHJvdGVjdGVkOgogICAgIEFic3RyYWN0TW9kdWxlUmVjb3JkKFZNJiwgU3RydWN0dXJl
KiwgY29uc3QgSWRlbnRpZmllciYpOwogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxP
YmplY3QqLCBWTSYpOwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBT
bG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICB2b2lkIHNl
dE1vZHVsZUVudmlyb25tZW50KEpTR2xvYmFsT2JqZWN0KiwgSlNNb2R1bGVFbnZpcm9ubWVudCop
OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcmdMaXN0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcmdMaXN0LmNwcAkocmV2
aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJnTGlzdC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogIENvcHlyaWdodCAoQykg
MjAwMy0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQg
KEMpIDIwMDMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYwpAQCAtNTEsNyArNTEsNyBAQCB2b2lkIEFyZ0xpc3Q6OmdldFNsaWNlKGludCBz
dGFydEluZGV4LCBBCiAgICAgcmVzdWx0Lm1fYXJnQ291bnQgPSAgbV9hcmdDb3VudCAtIHN0YXJ0
SW5kZXg7CiB9CiAKLXZvaWQgTWFya2VkQXJndW1lbnRCdWZmZXI6Om1hcmtMaXN0cyhTbG90Vmlz
aXRvciYgdmlzaXRvciwgTGlzdFNldCYgbWFya1NldCkKK3ZvaWQgTWFya2VkQXJndW1lbnRCdWZm
ZXI6Om1hcmtMaXN0cyhBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBMaXN0U2V0JiBtYXJr
U2V0KQogewogICAgIExpc3RTZXQ6Oml0ZXJhdG9yIGVuZCA9IG1hcmtTZXQuZW5kKCk7CiAgICAg
Zm9yIChMaXN0U2V0OjppdGVyYXRvciBpdCA9IG1hcmtTZXQuYmVnaW4oKTsgaXQgIT0gZW5kOyAr
K2l0KSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcmdMaXN0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJnTGlzdC5oCShyZXZp
c2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcmdMaXN0LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMTk5
OS0yMDAxIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCi0gKiAgQ29weXJpZ2h0IChDKSAy
MDAzLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAo
QykgMjAwMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiAgVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCkBAIC0xMTgsNyArMTE4LDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gcmVz
dWx0OwogICAgIH0KICAgICAgICAgCi0gICAgc3RhdGljIHZvaWQgbWFya0xpc3RzKFNsb3RWaXNp
dG9yJiwgTGlzdFNldCYpOworICAgIHN0YXRpYyB2b2lkIG1hcmtMaXN0cyhBYnN0cmFjdFNsb3RW
aXNpdG9yJiwgTGlzdFNldCYpOwogCiAgICAgdm9pZCBlbnN1cmVDYXBhY2l0eShzaXplX3QgcmVx
dWVzdGVkQ2FwYWNpdHkpCiAgICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvQ2FjaGVhYmxlSWRlbnRpZmllci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0NhY2hlYWJsZUlkZW50aWZpZXIuaAkocmV2aXNpb24gMjcyODMwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVhYmxlSWRlbnRpZmllci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAtMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTM5LDEwICszOSwxMCBAQCB1c2luZyBXVEY6OlVuaXF1ZWRTdHJpbmdJbXBsOwog
CiBuYW1lc3BhY2UgSlNDIHsKIAorY2xhc3MgQWJzdHJhY3RTbG90VmlzaXRvcjsKIGNsYXNzIENv
ZGVCbG9jazsKIGNsYXNzIElkZW50aWZpZXI7CiBjbGFzcyBKU0NlbGw7Ci1jbGFzcyBTbG90Vmlz
aXRvcjsKIAogY2xhc3MgQ2FjaGVhYmxlSWRlbnRpZmllciB7CiBwdWJsaWM6CkBAIC04Nyw3ICs4
Nyw3IEBAIHB1YmxpYzoKIAogICAgIHVpbnRwdHJfdCByYXdCaXRzKCkgY29uc3QgeyByZXR1cm4g
bV9iaXRzOyB9CiAKLSAgICBpbmxpbmUgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYp
IGNvbnN0OworICAgIGlubGluZSB2b2lkIHZpc2l0QWdncmVnYXRlKEFic3RyYWN0U2xvdFZpc2l0
b3ImKSBjb25zdDsKIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZHVtcChQcmludFN0cmVh
bSYpIGNvbnN0OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWFi
bGVJZGVudGlmaWVySW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0NhY2hlYWJsZUlkZW50aWZpZXJJbmxpbmVzLmgJKHJldmlzaW9uIDI3MjgzMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlYWJsZUlkZW50aWZpZXJJbmxp
bmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAyMC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMTM3LDcgKzEzNyw3IEBAIGlubGluZSB2b2lkIENhY2hlYWJs
ZUlkZW50aWZpZXI6OnNldFVpZEIKICAgICBtX2JpdHMgPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90
Pih1aWQpIHwgc191aWRUYWc7CiB9CiAKLWlubGluZSB2b2lkIENhY2hlYWJsZUlkZW50aWZpZXI6
OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBjb25zdAoraW5saW5lIHZvaWQg
Q2FjaGVhYmxlSWRlbnRpZmllcjo6dmlzaXRBZ2dyZWdhdGUoQWJzdHJhY3RTbG90VmlzaXRvciYg
dmlzaXRvcikgY29uc3QKIHsKICAgICBpZiAobV9iaXRzICYmIGlzQ2VsbCgpKQogICAgICAgICB2
aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKGNlbGwoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9DbGFzc0luZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9DbGFzc0luZm8uaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xhc3NJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNyAr
MSw3IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAxIEhhcnJpIFBvcnRlbiAocG9y
dGVuQGtkZS5vcmcpCiAgKiAgQ29weXJpZ2h0IChDKSAyMDAxIFBldGVyIEtlbGx5IChwbWtAcG9z
dC5jb20pCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC00NCw5ICs0NCw2IEBAIHN0
cnVjdCBNZXRob2RUYWJsZSB7CiAgICAgdXNpbmcgRGVzdHJveUZ1bmN0aW9uUHRyID0gdm9pZCAo
KikoSlNDZWxsKik7CiAgICAgRGVzdHJveUZ1bmN0aW9uUHRyIE1FVEhPRF9UQUJMRV9FTlRSWShk
ZXN0cm95KTsKIAotICAgIHVzaW5nIFZpc2l0Q2hpbGRyZW5GdW5jdGlvblB0ciA9IHZvaWQgKCop
KEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7Ci0gICAgVmlzaXRDaGlsZHJlbkZ1bmN0aW9uUHRyIE1F
VEhPRF9UQUJMRV9FTlRSWSh2aXNpdENoaWxkcmVuKTsKLQogICAgIHVzaW5nIEdldENhbGxEYXRh
RnVuY3Rpb25QdHIgPSBDYWxsRGF0YSAoKikoSlNDZWxsKik7CiAgICAgR2V0Q2FsbERhdGFGdW5j
dGlvblB0ciBNRVRIT0RfVEFCTEVfRU5UUlkoZ2V0Q2FsbERhdGEpOwogCkBAIC0xMjAsNyArMTE3
LDE2IEBAIHN0cnVjdCBNZXRob2RUYWJsZSB7CiAgICAgdXNpbmcgRXN0aW1hdGVkU2l6ZUZ1bmN0
aW9uUHRyID0gc2l6ZV90ICgqKShKU0NlbGwqLCBWTSYpOwogICAgIEVzdGltYXRlZFNpemVGdW5j
dGlvblB0ciBNRVRIT0RfVEFCTEVfRU5UUlkoZXN0aW1hdGVkU2l6ZSk7CiAKLSAgICB1c2luZyBW
aXNpdE91dHB1dENvbnN0cmFpbnRzUHRyID0gdm9pZCAoKikoSlNDZWxsKiwgU2xvdFZpc2l0b3Im
KTsKKyAgICB1c2luZyBWaXNpdENoaWxkcmVuRnVuY3Rpb25QdHIgPSB2b2lkICgqKShKU0NlbGwq
LCBTbG90VmlzaXRvciYpOworICAgIFZpc2l0Q2hpbGRyZW5GdW5jdGlvblB0ciBNRVRIT0RfVEFC
TEVfRU5UUlkodmlzaXRDaGlsZHJlbldpdGhTbG90VmlzaXRvcik7CisKKyAgICB1c2luZyBWaXNp
dENoaWxkcmVuV2l0aEFic3RyYWN0U2xvdFZpc2l0b3JQdHIgPSB2b2lkICgqKShKU0NlbGwqLCBB
YnN0cmFjdFNsb3RWaXNpdG9yJik7CisgICAgVmlzaXRDaGlsZHJlbldpdGhBYnN0cmFjdFNsb3RW
aXNpdG9yUHRyIE1FVEhPRF9UQUJMRV9FTlRSWSh2aXNpdENoaWxkcmVuV2l0aEFic3RyYWN0U2xv
dFZpc2l0b3IpOworCisgICAgQUxXQVlTX0lOTElORSB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikgY29uc3QgeyB2aXNpdENoaWxkcmVuV2l0aFNs
b3RWaXNpdG9yKGNlbGwsIHZpc2l0b3IpOyB9CisgICAgQUxXQVlTX0lOTElORSB2b2lkIHZpc2l0
Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBjb25z
dCB7IHZpc2l0Q2hpbGRyZW5XaXRoQWJzdHJhY3RTbG90VmlzaXRvcihjZWxsLCB2aXNpdG9yKTsg
fQorCisgICAgdXNpbmcgVmlzaXRPdXRwdXRDb25zdHJhaW50c1B0ciA9IHZvaWQgKCopKEpTQ2Vs
bCosIEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKICAgICBWaXNpdE91dHB1dENvbnN0cmFpbnRzUHRy
IE1FVEhPRF9UQUJMRV9FTlRSWSh2aXNpdE91dHB1dENvbnN0cmFpbnRzKTsKIH07CiAKQEAgLTE0
Nyw3ICsxNTMsNiBAQCBzdHJ1Y3QgTWV0aG9kVGFibGUgewogICAgIEpTQ2FzdGluZ0hlbHBlcnM6
OkluaGVyaXRzVHJhaXRzPENsYXNzTmFtZT46OnR5cGVSYW5nZSwgXAogICAgIHsgXAogICAgICAg
ICAmQ2xhc3NOYW1lOjpkZXN0cm95LCBcCi0gICAgICAgICZDbGFzc05hbWU6OnZpc2l0Q2hpbGRy
ZW4sIFwKICAgICAgICAgJkNsYXNzTmFtZTo6Z2V0Q2FsbERhdGEsIFwKICAgICAgICAgJkNsYXNz
TmFtZTo6Z2V0Q29uc3RydWN0RGF0YSwgXAogICAgICAgICAmQ2xhc3NOYW1lOjpwdXQsIFwKQEAg
LTE3Myw2ICsxNzgsOCBAQCBzdHJ1Y3QgTWV0aG9kVGFibGUgewogICAgICAgICAmQ2xhc3NOYW1l
OjpkdW1wVG9TdHJlYW0sIFwKICAgICAgICAgJkNsYXNzTmFtZTo6YW5hbHl6ZUhlYXAsIFwKICAg
ICAgICAgJkNsYXNzTmFtZTo6ZXN0aW1hdGVkU2l6ZSwgXAorICAgICAgICAmQ2xhc3NOYW1lOjp2
aXNpdENoaWxkcmVuLCBcCisgICAgICAgICZDbGFzc05hbWU6OnZpc2l0Q2hpbGRyZW4sIFwKICAg
ICAgICAgJkNsYXNzTmFtZTo6dmlzaXRPdXRwdXRDb25zdHJhaW50cywgXAogICAgIH0sIFwKICAg
ICBDbGFzc05hbWU6OlR5cGVkQXJyYXlTdG9yYWdlVHlwZSwgXApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQ2xvbmVkQXJndW1lbnRzLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DbG9uZWRBcmd1bWVudHMuY3BwCShyZXZpc2lvbiAy
NzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DbG9uZWRBcmd1bWVudHMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxNS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjY3LDcgKzI2Nyw4IEBAIHZvaWQgQ2xvbmVkQXJndW1l
bnRzOjptYXRlcmlhbGl6ZVNwZWNpYWwKICAgICAgICAgbWF0ZXJpYWxpemVTcGVjaWFscyhnbG9i
YWxPYmplY3QpOwogfQogCi12b2lkIENsb25lZEFyZ3VtZW50czo6dmlzaXRDaGlsZHJlbihKU0Nl
bGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRv
cj4KK3ZvaWQgQ2xvbmVkQXJndW1lbnRzOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGws
IFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgQ2xvbmVkQXJndW1lbnRzKiB0aGlzT2JqZWN0ID0g
anNDYXN0PENsb25lZEFyZ3VtZW50cyo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5I
RVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTI3NSw1ICsyNzYsNyBAQCB2b2lkIENsb25l
ZEFyZ3VtZW50czo6dmlzaXRDaGlsZHJlbihKU0NlCiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09i
amVjdC0+bV9jYWxsZWUpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oQ2xvbmVkQXJndW1l
bnRzKTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0Nsb25lZEFyZ3VtZW50cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0Nsb25lZEFyZ3VtZW50cy5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DbG9uZWRBcmd1bWVudHMuaAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTYyLDcgKzYyLDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNy
ZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBwcm90b3R5cGUpOwog
ICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVNsb3dQdXRTdHJ1Y3R1cmUoVk0mLCBKU0dsb2Jh
bE9iamVjdCosIEpTVmFsdWUgcHJvdG90eXBlKTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hp
bGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVO
OwogCiAgICAgREVDTEFSRV9JTkZPOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9EaXJlY3RBcmd1bWVudHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTggQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC05MCw3ICs5MCw4IEBAIHNpemVfdCBEaXJlY3RBcmd1bWVudHM6OmVzdGltYXRl
ZFNpemUoSlMKICAgICByZXR1cm4gQmFzZTo6ZXN0aW1hdGVkU2l6ZShjZWxsLCB2bSkgKyBtYXBw
ZWRBcmd1bWVudHNTaXplICsgbW9kaWZpZWRBcmd1bWVudHNTaXplOwogfQogCi12b2lkIERpcmVj
dEFyZ3VtZW50czo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIHRoaXNDZWxsLCBTbG90VmlzaXRvciYg
dmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIERpcmVjdEFyZ3VtZW50
czo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiB0aGlzQ2VsbCwgVmlzaXRvciYgdmlzaXRvcikK
IHsKICAgICBEaXJlY3RBcmd1bWVudHMqIHRoaXNPYmplY3QgPSBzdGF0aWNfY2FzdDxEaXJlY3RB
cmd1bWVudHMqPih0aGlzQ2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlz
T2JqZWN0LCBpbmZvKCkpOwpAQCAtMTA0LDYgKzEwNSw4IEBAIHZvaWQgRGlyZWN0QXJndW1lbnRz
Ojp2aXNpdENoaWxkcmVuKEpTQ2UKICAgICBHZW5lcmljQXJndW1lbnRzPERpcmVjdEFyZ3VtZW50
cz46OnZpc2l0Q2hpbGRyZW4odGhpc0NlbGwsIHZpc2l0b3IpOwogfQogCitERUZJTkVfVklTSVRf
Q0hJTERSRU4oRGlyZWN0QXJndW1lbnRzKTsKKwogU3RydWN0dXJlKiBEaXJlY3RBcmd1bWVudHM6
OmNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpT
VmFsdWUgcHJvdG90eXBlKQogewogICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xv
YmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKERpcmVjdEFyZ3VtZW50c1R5cGUsIFN0cnVj
dHVyZUZsYWdzKSwgaW5mbygpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0RpcmVjdEFyZ3VtZW50cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0RpcmVjdEFyZ3VtZW50cy5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9EaXJlY3RBcmd1bWVudHMuaAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxOSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTY1LDcgKzY1LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBEaXJlY3RBcmd1bWVudHMqIGNyZWF0
ZUJ5Q29weWluZyhKU0dsb2JhbE9iamVjdCosIENhbGxGcmFtZSopOwogCiAgICAgc3RhdGljIHNp
emVfdCBlc3RpbWF0ZWRTaXplKEpTQ2VsbCosIFZNJik7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRD
aGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERS
RU47CiAgICAgCiAgICAgdWludDMyX3QgaW50ZXJuYWxMZW5ndGgoKSBjb25zdAogICAgIHsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V2YWxFeGVjdXRhYmxlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FdmFsRXhlY3V0YWJsZS5j
cHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V2
YWxFeGVjdXRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDksIDIwMTAsIDIwMTMsIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAyMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTUw
LDcgKzUwLDggQEAgYXV0byBFdmFsRXhlY3V0YWJsZTo6ZW5zdXJlVGVtcGxhdGVPYmplYwogICAg
IHJldHVybiBlbnN1cmVUZW1wbGF0ZU9iamVjdE1hcEltcGwobV90ZW1wbGF0ZU9iamVjdE1hcCk7
CiB9CiAKLXZvaWQgRXZhbEV4ZWN1dGFibGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBT
bG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEV2
YWxFeGVjdXRhYmxlOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZp
c2l0b3IpCiB7CiAgICAgRXZhbEV4ZWN1dGFibGUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8RXZhbEV4
ZWN1dGFibGUqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmpl
Y3QsIGluZm8oKSk7CkBAIC02NCw0ICs2NSw2IEBAIHZvaWQgRXZhbEV4ZWN1dGFibGU6OnZpc2l0
Q2hpbGRyZW4oSlNDZWwKICAgICB9CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihFdmFsRXhl
Y3V0YWJsZSk7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvRXZhbEV4ZWN1dGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9FdmFsRXhlY3V0YWJsZS5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FdmFsRXhlY3V0YWJsZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOS0yMDE5IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtNzksNyArNzksNyBAQCBwcm90ZWN0ZWQ6CiAgICAgdXNpbmcgQmFzZTo6ZmluaXNo
Q3JlYXRpb247CiAgICAgRXZhbEV4ZWN1dGFibGUoSlNHbG9iYWxPYmplY3QqLCBjb25zdCBTb3Vy
Y2VDb2RlJiwgYm9vbCBpblN0cmljdENvbnRleHQsIERlcml2ZWRDb250ZXh0VHlwZSwgYm9vbCBp
c0Fycm93RnVuY3Rpb25Db250ZXh0LCBib29sIGlzSW5zaWRlT3JkaW5hcnlGdW5jdGlvbiwgRXZh
bENvbnRleHRUeXBlLCBOZWVkc0NsYXNzRmllbGRJbml0aWFsaXplciwgUHJpdmF0ZUJyYW5kUmVx
dWlyZW1lbnQpOwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90
VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICB1bnNpZ25lZCBt
X25lZWRzQ2xhc3NGaWVsZEluaXRpYWxpemVyIDogMTsKICAgICB1bnNpZ25lZCBtX3ByaXZhdGVC
cmFuZFJlcXVpcmVtZW50IDogMTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0V4Y2VwdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvRXhjZXB0aW9uLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvRXhjZXB0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTUzLDcgKzUzLDgg
QEAgU3RydWN0dXJlKiBFeGNlcHRpb246OmNyZWF0ZVN0cnVjdHVyZShWTQogICAgIHJldHVybiBT
dHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKENl
bGxUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CiB9CiAKLXZvaWQgRXhjZXB0aW9uOjp2
aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0
ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBFeGNlcHRpb246OnZpc2l0Q2hpbGRyZW5JbXBsKEpT
Q2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBFeGNlcHRpb24qIHRoaXNPYmpl
Y3QgPSBqc0Nhc3Q8RXhjZXB0aW9uKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhF
UklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNjQsNiArNjUsOCBAQCB2b2lkIEV4Y2VwdGlv
bjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlCiAgICAgICAgIGZyYW1lLnZpc2l0Q2hpbGRyZW4o
dmlzaXRvcik7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihFeGNlcHRpb24pOworCiBFeGNl
cHRpb246OkV4Y2VwdGlvbihWTSYgdm0pCiAgICAgOiBCYXNlKHZtLCB2bS5leGNlcHRpb25TdHJ1
Y3R1cmUuZ2V0KCkpCiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGNl
cHRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGNl
cHRpb24uaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvRXhjZXB0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDE1LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE1LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01MSw3ICs1MSw3IEBAIHB1YmxpYzoK
IAogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2Jq
ZWN0KiwgSlNWYWx1ZSBwcm90b3R5cGUpOwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJl
bihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAK
ICAgICBERUNMQVJFX0VYUE9SVF9JTkZPOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9GdW5jdGlvbkV4ZWN1dGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZS5jcHAJKHJldmlzaW9uIDI3Mjgz
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDA5LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDA5LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC02Nyw3ICs2Nyw4IEBAIEZ1bmN0aW9uQ29kZUJsb2NrKiBG
dW5jdGlvbkV4ZWN1dGFibGU6OmIKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RnVuY3Rpb25Db2Rl
QmxvY2sqPihlZGdlLT5jb2RlQmxvY2soKS0+YmFzZWxpbmVBbHRlcm5hdGl2ZSgpKTsKIH0KIAot
dm9pZCBGdW5jdGlvbkV4ZWN1dGFibGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90
VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEZ1bmN0
aW9uRXhlY3V0YWJsZTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2
aXNpdG9yKQogewogICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogdGhpc09iamVjdCA9IGpzQ2FzdDxG
dW5jdGlvbkV4ZWN1dGFibGUqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRT
KHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC04Niw2ICs4Nyw4IEBAIHZvaWQgRnVuY3Rpb25FeGVj
dXRhYmxlOjp2aXNpdENoaWxkcmVuKEoKICAgICB9CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJF
TihGdW5jdGlvbkV4ZWN1dGFibGUpOworCiBGdW5jdGlvbkV4ZWN1dGFibGUqIEZ1bmN0aW9uRXhl
Y3V0YWJsZTo6ZnJvbUdsb2JhbENvZGUoCiAgICAgY29uc3QgSWRlbnRpZmllciYgbmFtZSwgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCAKICAg
ICBKU09iamVjdComIGV4Y2VwdGlvbiwgaW50IG92ZXJyaWRlTGluZU51bWJlciwgT3B0aW9uYWw8
aW50PiBmdW5jdGlvbkNvbnN0cnVjdG9yUGFyYW1ldGVyc0VuZFBvc2l0aW9uKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25FeGVjdXRhYmxlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25FeGVjdXRhYmxlLmgJ
KHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0
aW9uRXhlY3V0YWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAwOS0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAwOS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTY2LDcgKzE2Niw3IEBAIHB1Ymxp
YzoKICAgICBKU1BhcnNlclNjcmlwdE1vZGUgc2NyaXB0TW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1f
dW5saW5rZWRFeGVjdXRhYmxlLT5zY3JpcHRNb2RlKCk7IH0KICAgICBTb3VyY2VDb2RlIGNsYXNz
U291cmNlKCkgY29uc3QgeyByZXR1cm4gbV91bmxpbmtlZEV4ZWN1dGFibGUtPmNsYXNzU291cmNl
KCk7IH0KIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0
b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogICAgIHN0YXRpYyBTdHJ1Y3R1cmUq
IGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpT
VmFsdWUgcHJvdG8pCiAgICAgewogICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0s
IGdsb2JhbE9iamVjdCwgcHJvdG8sIFR5cGVJbmZvKEZ1bmN0aW9uRXhlY3V0YWJsZVR5cGUsIFN0
cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0Z1bmN0aW9uUmFyZURhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0Z1bmN0aW9uUmFyZURhdGEuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvblJhcmVEYXRhLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxOSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTUxLDcgKzUxLDggQEAgU3RydWN0dXJlKiBGdW5jdGlvblJhcmVEYXRhOjpj
cmVhdGVTdHJ1YwogICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0
LCBwcm90b3R5cGUsIFR5cGVJbmZvKENlbGxUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7
CiB9CiAKLXZvaWQgRnVuY3Rpb25SYXJlRGF0YTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGws
IFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQg
RnVuY3Rpb25SYXJlRGF0YTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9y
JiB2aXNpdG9yKQogewogICAgIEZ1bmN0aW9uUmFyZURhdGEqIHJhcmVEYXRhID0ganNDYXN0PEZ1
bmN0aW9uUmFyZURhdGEqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNl
bGwsIGluZm8oKSk7CkBAIC02Myw2ICs2NCw4IEBAIHZvaWQgRnVuY3Rpb25SYXJlRGF0YTo6dmlz
aXRDaGlsZHJlbihKU0MKICAgICB2aXNpdG9yLmFwcGVuZChyYXJlRGF0YS0+bV9leGVjdXRhYmxl
KTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEZ1bmN0aW9uUmFyZURhdGEpOworCiBGdW5j
dGlvblJhcmVEYXRhOjpGdW5jdGlvblJhcmVEYXRhKFZNJiB2bSwgRXhlY3V0YWJsZUJhc2UqIGV4
ZWN1dGFibGUpCiAgICAgOiBCYXNlKHZtLCB2bS5mdW5jdGlvblJhcmVEYXRhU3RydWN0dXJlLmdl
dCgpKQogICAgICwgbV9vYmplY3RBbGxvY2F0aW9uUHJvZmlsZSgpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvblJhcmVEYXRhLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25SYXJlRGF0YS5oCShyZXZpc2lvbiAy
NzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvblJhcmVEYXRh
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDE1LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE1LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC02NSw3ICs2NSw3IEBAIHB1YmxpYzoKIAogICAgIHN0YXRp
YyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1
ZSBwcm90b3R5cGUpOwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBT
bG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBERUNMQVJF
X0lORk87CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNBcmd1
bWVudHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5l
cmljQXJndW1lbnRzLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0dlbmVyaWNBcmd1bWVudHMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ0LDcgKzQ0
LDcgQEAgcHJvdGVjdGVkOgogICAgIHsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENo
aWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9URU1QTEFURV9WSVNJ
VF9DSElMRFJFTjsKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3Qq
LCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CiAgICAgc3Rh
dGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU09iamVjdCosIEpTR2xvYmFsT2Jq
ZWN0KiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKICAgICBzdGF0aWMg
dm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9w
ZXJ0eU5hbWVBcnJheSYsIERvbnRFbnVtUHJvcGVydGllc01vZGUpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50c0lubGluZXMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljQXJndW1lbnRzSW5saW5l
cy5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9H
ZW5lcmljQXJndW1lbnRzSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzEsNyArMzEsOCBA
QAogbmFtZXNwYWNlIEpTQyB7CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFR5cGU+Ci12b2lkIEdlbmVy
aWNBcmd1bWVudHM8VHlwZT46OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiB0aGlzQ2VsbCwgU2xvdFZp
c2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBHZW5lcmlj
QXJndW1lbnRzPFR5cGU+Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIHRoaXNDZWxsLCBWaXNp
dG9yJiB2aXNpdG9yKQogewogICAgIFR5cGUqIHRoaXNPYmplY3QgPSBzdGF0aWNfY2FzdDxUeXBl
Kj4odGhpc0NlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwg
aW5mbygpKTsKQEAgLTQxLDYgKzQyLDggQEAgdm9pZCBHZW5lcmljQXJndW1lbnRzPFR5cGU+Ojp2
aXNpdENoaWxkcgogICAgICAgICB2aXNpdG9yLm1hcmtBdXhpbGlhcnkodGhpc09iamVjdC0+bV9t
b2RpZmllZEFyZ3VtZW50c0Rlc2NyaXB0b3IuZ2V0VW5zYWZlKCkpOwogfQogCitERUZJTkVfVEVN
UExBVEVfVklTSVRfQ0hJTERSRU4odGVtcGxhdGU8dHlwZW5hbWUgVHlwZT4sIEdlbmVyaWNBcmd1
bWVudHM8VHlwZT4pOworCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlPgogYm9vbCBHZW5lcmljQXJn
dW1lbnRzPFR5cGU+OjpnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqIG9iamVjdCwgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lIGlkZW50LCBQcm9wZXJ0eVNsb3Qm
IHNsb3QpCiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZXR0ZXJTZXR0
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dldHRl
clNldHRlci5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0dldHRlclNldHRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSw3IEBACiAv
KgogICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAyIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5v
cmcpCiAgKiAgQ29weXJpZ2h0IChDKSAyMDAxIFBldGVyIEtlbGx5IChwbWtAcG9zdC5jb20pCi0g
KiAgQ29weXJpZ2h0IChDKSAyMDA0LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogIENvcHlyaWdodCAoQykgMjAwNC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0zMyw3ICszMyw4IEBAIFNUQVRJQ19BU1NF
UlRfSVNfVFJJVklBTExZX0RFU1RSVUNUSUJMRSgKIAogY29uc3QgQ2xhc3NJbmZvIEdldHRlclNl
dHRlcjo6c19pbmZvID0geyAiR2V0dGVyU2V0dGVyIiwgbnVsbHB0ciwgbnVsbHB0ciwgbnVsbHB0
ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShHZXR0ZXJTZXR0ZXIpIH07CiAKLXZvaWQgR2V0dGVyU2V0
dGVyOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0
ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBHZXR0ZXJTZXR0ZXI6OnZpc2l0Q2hpbGRy
ZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBHZXR0ZXJTZXR0
ZXIqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8R2V0dGVyU2V0dGVyKj4oY2VsbCk7CiAgICAgQVNTRVJU
X0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNDMsNiArNDQsOCBA
QCB2b2lkIEdldHRlclNldHRlcjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqCiAgICAgdmlzaXRvci5h
cHBlbmQodGhpc09iamVjdC0+bV9zZXR0ZXIpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4o
R2V0dGVyU2V0dGVyKTsKKwogSlNWYWx1ZSBjYWxsR2V0dGVyKEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIEpTVmFsdWUgYmFzZSwgSlNWYWx1ZSBnZXR0ZXJTZXR0ZXIpCiB7CiAgICAgVk0m
IHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvR2V0dGVyU2V0dGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvR2V0dGVyU2V0dGVyLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0dldHRlclNldHRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcg
KzEsNyBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMSBIYXJyaSBQb3J0ZW4gKHBv
cnRlbkBrZGUub3JnKQogICogIENvcHlyaWdodCAoQykgMjAwMSBQZXRlciBLZWxseSAocG1rQHBv
c3QuY29tKQotICogIENvcHlyaWdodCAoQykgMjAwMy0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtODIsNyArODIsNyBAQCBw
dWJsaWM6CiAgICAgICAgIHJldHVybiBjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgZ2V0dGVyT2Jq
ZWN0LCBzZXR0ZXJPYmplY3QpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwog
CiAgICAgSlNPYmplY3QqIGdldHRlcigpIGNvbnN0IHsgcmV0dXJuIG1fZ2V0dGVyLmdldCgpOyB9
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0hhc2hNYXBJbXBsLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9IYXNoTWFwSW1wbC5j
cHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0hh
c2hNYXBJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMCw2ICszMCw5IEBACiAKIG5hbWVzcGFjZSBK
U0MgewogCitERUZJTkVfVEVNUExBVEVfVklTSVRfQ0hJTERSRU4odGVtcGxhdGU8PiwgSGFzaE1h
cEJ1Y2tldDxIYXNoTWFwQnVja2V0RGF0YUtleT4pOworREVGSU5FX1RFTVBMQVRFX1ZJU0lUX0NI
SUxEUkVOKHRlbXBsYXRlPD4sIEhhc2hNYXBCdWNrZXQ8SGFzaE1hcEJ1Y2tldERhdGFLZXlWYWx1
ZT4pOworCiB0ZW1wbGF0ZTw+CiBjb25zdCBDbGFzc0luZm8gSGFzaE1hcEJ1Y2tldDxIYXNoTWFw
QnVja2V0RGF0YUtleT46OnNfaW5mbyA9CiAgICAgeyAiSGFzaE1hcEJ1Y2tldCIsIG51bGxwdHIs
IG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSGFzaE1hcEJ1Y2tldDxIYXNo
TWFwQnVja2V0RGF0YUtleT4pIH07CkBAIC0zOCw4ICs0MSw5IEBAIHRlbXBsYXRlPD4KIGNvbnN0
IENsYXNzSW5mbyBIYXNoTWFwQnVja2V0PEhhc2hNYXBCdWNrZXREYXRhS2V5VmFsdWU+OjpzX2lu
Zm8gPQogICAgIHsgIkhhc2hNYXBCdWNrZXQiLCBudWxscHRyLCBudWxscHRyLCBudWxscHRyLCBD
UkVBVEVfTUVUSE9EX1RBQkxFKEhhc2hNYXBCdWNrZXQ8SGFzaE1hcEJ1Y2tldERhdGFLZXlWYWx1
ZT4pIH07CiAKLXRlbXBsYXRlIDx0eXBlbmFtZSBEYXRhPgotdm9pZCBIYXNoTWFwQnVja2V0PERh
dGE+Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0
ZW1wbGF0ZTx0eXBlbmFtZSBEYXRhPgordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQg
SGFzaE1hcEJ1Y2tldDxEYXRhPjo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNp
dG9yJiB2aXNpdG9yKQogewogICAgIEhhc2hNYXBCdWNrZXQqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8
SGFzaE1hcEJ1Y2tldCo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhp
c09iamVjdCwgaW5mbygpKTsKQEAgLTUyLDggKzU2LDkgQEAgdm9pZCBIYXNoTWFwQnVja2V0PERh
dGE+Ojp2aXNpdENoaWxkcmVuKAogICAgIHZpc2l0b3IuYXBwZW5kVmFsdWVzKGJpdHdpc2VfY2Fz
dDxXcml0ZUJhcnJpZXI8VW5rbm93bj4qPigmdGhpc09iamVjdC0+bV9kYXRhKSwgc2l6ZW9mKERh
dGEpIC8gc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpOwogfQogCi10ZW1wbGF0ZSA8dHlw
ZW5hbWUgSGFzaE1hcEJ1Y2tldD4KLXZvaWQgSGFzaE1hcEltcGw8SGFzaE1hcEJ1Y2tldD46OnZp
c2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRl
PHR5cGVuYW1lIEhhc2hNYXBCdWNrZXQ+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9p
ZCBIYXNoTWFwSW1wbDxIYXNoTWFwQnVja2V0Pjo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBj
ZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEhhc2hNYXBJbXBsKiB0aGlzT2JqZWN0ID0g
anNDYXN0PEhhc2hNYXBJbXBsKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklU
Uyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNjYsNiArNzEsOCBAQCB2b2lkIEhhc2hNYXBJbXBs
PEhhc2hNYXBCdWNrZXQ+Ojp2aXNpdENoCiAgICAgICAgIHZpc2l0b3IubWFya0F1eGlsaWFyeShi
dWZmZXIpOwogfQogCitERUZJTkVfVEVNUExBVEVfVklTSVRfQ0hJTERSRU4odGVtcGxhdGU8dHlw
ZW5hbWUgSGFzaE1hcEJ1Y2tldD4sIEhhc2hNYXBJbXBsPEhhc2hNYXBCdWNrZXQ+KTsKKwogdGVt
cGxhdGUgPHR5cGVuYW1lIEhhc2hNYXBCdWNrZXQ+CiBzaXplX3QgSGFzaE1hcEltcGw8SGFzaE1h
cEJ1Y2tldD46OmVzdGltYXRlZFNpemUoSlNDZWxsKiBjZWxsLCBWTSYgdm0pCiB7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9IYXNoTWFwSW1wbC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0hhc2hNYXBJbXBsLmgJKHJldmlzaW9uIDI3
MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0hhc2hNYXBJbXBsLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIw
MTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2
LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0xNDgsNyArMTQ4LDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4g
bV9kYXRhLnZhbHVlLmdldCgpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1RFTVBMQVRFX1ZJU0lUX0NI
SUxEUkVOOwogCiAgICAgQUxXQVlTX0lOTElORSBIYXNoTWFwQnVja2V0KiBuZXh0KCkgY29uc3Qg
eyByZXR1cm4gbV9uZXh0LmdldCgpOyB9CiAgICAgQUxXQVlTX0lOTElORSBIYXNoTWFwQnVja2V0
KiBwcmV2KCkgY29uc3QgeyByZXR1cm4gbV9wcmV2LmdldCgpOyB9CkBAIC0zNjQsNyArMzY0LDcg
QEAgY2xhc3MgSGFzaE1hcEltcGwgOiBwdWJsaWMgSlNOb25GaW5hbE9iagogcHVibGljOgogICAg
IHVzaW5nIEJ1Y2tldFR5cGUgPSBIYXNoTWFwQnVja2V0VHlwZTsKIAotICAgIHN0YXRpYyB2b2lk
IHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1RFTVBM
QVRFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgc3RhdGljIHNpemVfdCBlc3RpbWF0ZWRTaXplKEpT
Q2VsbCosIFZNJik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGVy
bmFsRnVuY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0ludGVybmFsRnVuY3Rpb24uY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9JbnRlcm5hbEZ1bmN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw3ICsxLDcgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDIgSGFycmkgUG9y
dGVuIChwb3J0ZW5Aa2RlLm9yZykKICAqICBDb3B5cmlnaHQgKEMpIDIwMDEgUGV0ZXIgS2VsbHkg
KHBta0Bwb3N0LmNvbSkKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxOSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDA0LTIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTY0LDcgKzY0
LDggQEAgdm9pZCBJbnRlcm5hbEZ1bmN0aW9uOjpmaW5pc2hDcmVhdGlvbihWTQogICAgIH0KIH0K
IAotdm9pZCBJbnRlcm5hbEZ1bmN0aW9uOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xv
dFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBJbnRl
cm5hbEZ1bmN0aW9uOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZp
c2l0b3IpCiB7CiAgICAgSW50ZXJuYWxGdW5jdGlvbiogdGhpc09iamVjdCA9IGpzQ2FzdDxJbnRl
cm5hbEZ1bmN0aW9uKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlz
T2JqZWN0LCBpbmZvKCkpOwpAQCAtNzMsNiArNzQsOCBAQCB2b2lkIEludGVybmFsRnVuY3Rpb246
OnZpc2l0Q2hpbGRyZW4oSlNDCiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9vcmln
aW5hbE5hbWUpOwogfQogCitERUZJTkVfRVhQT1JUX1ZJU0lUX0NISUxEUkVOKEludGVybmFsRnVu
Y3Rpb24pOworCiBjb25zdCBTdHJpbmcmIEludGVybmFsRnVuY3Rpb246Om5hbWUoKQogewogICAg
IGNvbnN0IFN0cmluZyYgbmFtZSA9IG1fb3JpZ2luYWxOYW1lLT50cnlHZXRWYWx1ZSgpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50ZXJuYWxGdW5jdGlvbi5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGVybmFsRnVuY3Rpb24u
aAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50
ZXJuYWxGdW5jdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqICBD
b3B5cmlnaHQgKEMpIDE5OTktMjAwMCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQotICog
IENvcHlyaWdodCAoQykgMjAwMy0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA3IENhbWVyb24gWndhcmljaCAoY3d6d2FyaWNoQHV3
YXRlcmxvby5jYSkKICAqICBDb3B5cmlnaHQgKEMpIDIwMDcgTWFrcyBPcmxvdmljaAogICoKQEAg
LTQ2LDcgKzQ2LDcgQEAgcHVibGljOgogCiAgICAgREVDTEFSRV9FWFBPUlRfSU5GTzsKIAotICAg
IEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xv
dFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX0VYUE9SVF9WSVNJVF9DSElMRFJFTjsKIAogICAgIEpT
X0VYUE9SVF9QUklWQVRFIGNvbnN0IFN0cmluZyYgbmFtZSgpOwogICAgIGNvbnN0IFN0cmluZyBk
aXNwbGF5TmFtZShWTSYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50
bENvbGxhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9JbnRsQ29sbGF0b3IuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9JbnRsQ29sbGF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEs
NyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxNSBBbmR5IFZhbldhZ29uZXIgKGFuZHlAdmFu
d2Fnb25lci5mYW1pbHkpCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTUgU3Vrb2xzYWsgU2Frc2h1d29u
ZyAoc3Vrb2xzYWtAZ21haWwuY29tKQotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjAgQXBwbGUg
SW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjEgQXBw
bGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC02NSw3ICs2NSw4IEBAIHZvaWQgSW50bENvbGxhdG9yOjpmaW5pc2hDcmVhdGlvbihW
TSYgdm0KICAgICBBU1NFUlQoaW5oZXJpdHModm0sIGluZm8oKSkpOwogfQogCi12b2lkIEludGxD
b2xsYXRvcjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9y
KQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSW50bENvbGxhdG9yOjp2aXNpdENo
aWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSW50bENv
bGxhdG9yKiB0aGlzT2JqZWN0ID0ganNDYXN0PEludGxDb2xsYXRvcio+KGNlbGwpOwogICAgIEFT
U0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTc1LDYgKzc2
LDggQEAgdm9pZCBJbnRsQ29sbGF0b3I6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKgogICAgIHZpc2l0
b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fYm91bmRDb21wYXJlKTsKIH0KIAorREVGSU5FX1ZJU0lU
X0NISUxEUkVOKEludGxDb2xsYXRvcik7CisKIFZlY3RvcjxTdHJpbmc+IEludGxDb2xsYXRvcjo6
c29ydExvY2FsZURhdGEoY29uc3QgU3RyaW5nJiBsb2NhbGUsIFJlbGV2YW50RXh0ZW5zaW9uS2V5
IGtleSkKIHsKICAgICAvLyA5LjEgSW50ZXJuYWwgc2xvdHMgb2YgU2VydmljZSBDb25zdHJ1Y3Rv
cnMgJiAxMC4yLjMgSW50ZXJuYWwgc2xvdHMgKEVDTUEtNDAyIDIuMCkKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxDb2xsYXRvci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxDb2xsYXRvci5oCShyZXZpc2lvbiAyNzI4MzAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsQ29sbGF0b3IuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQW5keSBW
YW5XYWdvbmVyIChhbmR5QHZhbndhZ29uZXIuZmFtaWx5KQorICogQ29weXJpZ2h0IChDKSAyMDIx
IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtODAsNyArODEsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIEludGxDb2xs
YXRvcihWTSYsIFN0cnVjdHVyZSopOwogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKLSAg
ICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAg
REVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIGJvb2wgdXBkYXRlQ2FuRG9BU0NJSVVDQURV
Q0VUQ29tcGFyaXNvbigpIGNvbnN0OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9JbnRsRGF0ZVRpbWVGb3JtYXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0ludGxEYXRlVGltZUZvcm1hdC5jcHAJKHJldmlzaW9uIDI3MjgzMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxEYXRlVGltZUZvcm1hdC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDE1
IEFuZHkgVmFuV2Fnb25lciAoYW5keUB2YW53YWdvbmVyLmZhbWlseSkKLSAqIENvcHlyaWdodCAo
QykgMjAxNi0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtOTAsNyArOTAsOCBAQCB2b2lkIEludGxEYXRlVGlt
ZUZvcm1hdDo6ZmluaXNoQ3JlYXRpb24oCiAgICAgQVNTRVJUKGluaGVyaXRzKHZtLCBpbmZvKCkp
KTsKIH0KIAotdm9pZCBJbnRsRGF0ZVRpbWVGb3JtYXQ6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBj
ZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2
b2lkIEludGxEYXRlVGltZUZvcm1hdDo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBW
aXNpdG9yJiB2aXNpdG9yKQogewogICAgIEludGxEYXRlVGltZUZvcm1hdCogdGhpc09iamVjdCA9
IGpzQ2FzdDxJbnRsRGF0ZVRpbWVGb3JtYXQqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNU
X0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC0xMDAsNiArMTAxLDggQEAgdm9pZCBJ
bnRsRGF0ZVRpbWVGb3JtYXQ6OnZpc2l0Q2hpbGRyZW4oSgogICAgIHZpc2l0b3IuYXBwZW5kKHRo
aXNPYmplY3QtPm1fYm91bmRGb3JtYXQpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSW50
bERhdGVUaW1lRm9ybWF0KTsKKwogdm9pZCBJbnRsRGF0ZVRpbWVGb3JtYXQ6OnNldEJvdW5kRm9y
bWF0KFZNJiB2bSwgSlNCb3VuZEZ1bmN0aW9uKiBmb3JtYXQpCiB7CiAgICAgbV9ib3VuZEZvcm1h
dC5zZXQodm0sIHRoaXMsIGZvcm1hdCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9JbnRsRGF0ZVRpbWVGb3JtYXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9JbnRsRGF0ZVRpbWVGb3JtYXQuaAkocmV2aXNpb24gMjcyODMwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERhdGVUaW1lRm9ybWF0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDE1IEFuZHkg
VmFuV2Fnb25lciAoYW5keUB2YW53YWdvbmVyLmZhbWlseSkKKyAqIENvcHlyaWdodCAoQykgMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTg1LDcgKzg2LDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBJbnRsRGF0
ZVRpbWVGb3JtYXQoVk0mLCBTdHJ1Y3R1cmUqKTsKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZN
Jik7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYp
OworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBzdGF0aWMgVmVjdG9yPFN0cmlu
Zz4gbG9jYWxlRGF0YShjb25zdCBTdHJpbmcmLCBSZWxldmFudEV4dGVuc2lvbktleSk7CiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxMb2NhbGUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxMb2NhbGUuY3BwCShyZXZp
c2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTG9jYWxl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMp
IDIwMjAgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAqIENvcHlyaWdodCAo
QykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTU4LDcgKzU5LDggQEAgdm9pZCBJbnRsTG9jYWxlOjpmaW5pc2hD
cmVhdGlvbihWTSYgdm0pCiAgICAgQVNTRVJUKGluaGVyaXRzKHZtLCBpbmZvKCkpKTsKIH0KIAot
dm9pZCBJbnRsTG9jYWxlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3Im
IHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBJbnRsTG9jYWxlOjp2
aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAg
YXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxJbnRsTG9jYWxlKj4oY2VsbCk7CiAgICAgQVNTRVJU
X0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNjYsNiArNjgsOCBA
QCB2b2lkIEludGxMb2NhbGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjCiAgICAgQmFzZTo6dmlz
aXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxE
UkVOKEludGxMb2NhbGUpOworCiBjbGFzcyBMb2NhbGVJREJ1aWxkZXIgZmluYWwgewogcHVibGlj
OgogICAgIGJvb2wgaW5pdGlhbGl6ZShjb25zdCBTdHJpbmcmKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0ludGxMb2NhbGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTG9jYWxlLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxMb2NhbGUuaAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMjAgU29ueSBJbnRlcmFjdGl2
ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTcx
LDcgKzcyLDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBJbnRsTG9jYWxlKFZNJiwgU3RydWN0
dXJlKik7CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOwotICAgIHN0YXRpYyB2b2lkIHZp
c2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NI
SUxEUkVOOwogCiAgICAgU3RyaW5nIGtleXdvcmRWYWx1ZShBU0NJSUxpdGVyYWwsIGJvb2wgaXNC
b29sZWFuID0gZmFsc2UpIGNvbnN0OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9JbnRsTnVtYmVyRm9ybWF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9JbnRsTnVtYmVyRm9ybWF0LmNwcAkocmV2aXNpb24gMjcyODMwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE51bWJlckZvcm1hdC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNyArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDE1IEFuZHkg
VmFuV2Fnb25lciAoYW5keUB2YW53YWdvbmVyLmZhbWlseSkKICAqIENvcHlyaWdodCAoQykgMjAx
NiBTdWtvbHNhayBTYWtzaHV3b25nIChzdWtvbHNha0BnbWFpbC5jb20pCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTYtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5
cmlnaHQgKEMpIDIwMjAgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKQEAgLTczLDcgKzczLDggQEAgdm9pZCBJbnRsTnVtYmVyRm9ybWF0OjpmaW5p
c2hDcmVhdGlvbihWTQogICAgIEFTU0VSVChpbmhlcml0cyh2bSwgaW5mbygpKSk7CiB9CiAKLXZv
aWQgSW50bE51bWJlckZvcm1hdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNp
dG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSW50bE51bWJl
ckZvcm1hdDo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9y
KQogewogICAgIEludGxOdW1iZXJGb3JtYXQqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SW50bE51bWJl
ckZvcm1hdCo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVj
dCwgaW5mbygpKTsKQEAgLTgzLDYgKzg0LDggQEAgdm9pZCBJbnRsTnVtYmVyRm9ybWF0Ojp2aXNp
dENoaWxkcmVuKEpTQwogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fYm91bmRGb3Jt
YXQpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSW50bE51bWJlckZvcm1hdCk7CisKIFZl
Y3RvcjxTdHJpbmc+IEludGxOdW1iZXJGb3JtYXQ6OmxvY2FsZURhdGEoY29uc3QgU3RyaW5nJiBs
b2NhbGUsIFJlbGV2YW50RXh0ZW5zaW9uS2V5IGtleSkKIHsKICAgICAvLyA5LjEgSW50ZXJuYWwg
c2xvdHMgb2YgU2VydmljZSBDb25zdHJ1Y3RvcnMgJiAxMS4yLjMgSW50ZXJuYWwgc2xvdHMgKEVD
TUEtNDAyIDIuMCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxOdW1i
ZXJGb3JtYXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9J
bnRsTnVtYmVyRm9ybWF0LmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0ludGxOdW1iZXJGb3JtYXQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsx
LDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQW5keSBWYW5XYWdvbmVyIChhbmR5QHZh
bndhZ29uZXIuZmFtaWx5KQogICogQ29weXJpZ2h0IChDKSAyMDIwIFNvbnkgSW50ZXJhY3RpdmUg
RW50ZXJ0YWlubWVudCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC05Niw3
ICs5Nyw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgSW50bE51bWJlckZvcm1hdChWTSYsIFN0
cnVjdHVyZSopOwogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKLSAgICBzdGF0aWMgdm9p
ZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJ
VF9DSElMRFJFTjsKIAogICAgIHN0YXRpYyBWZWN0b3I8U3RyaW5nPiBsb2NhbGVEYXRhKGNvbnN0
IFN0cmluZyYsIFJlbGV2YW50RXh0ZW5zaW9uS2V5KTsKIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSW50bFBsdXJhbFJ1bGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsUGx1cmFsUnVsZXMuY3BwCShyZXZpc2lvbiAyNzI4
MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsUGx1cmFsUnVsZXMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAx
OCBBbmR5IFZhbldhZ29uZXIgKGFuZHlAdmFud2Fnb25lci5mYW1pbHkpCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTktMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTktMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTYxLDcgKzYxLDggQEAgdm9pZCBJbnRsUGx1cmFs
UnVsZXM6OmZpbmlzaENyZWF0aW9uKFZNJgogICAgIEFTU0VSVChpbmhlcml0cyh2bSwgaW5mbygp
KSk7CiB9CiAKLXZvaWQgSW50bFBsdXJhbFJ1bGVzOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2Vs
bCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9p
ZCBJbnRsUGx1cmFsUnVsZXM6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRv
ciYgdmlzaXRvcikKIHsKICAgICBJbnRsUGx1cmFsUnVsZXMqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8
SW50bFBsdXJhbFJ1bGVzKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0
aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNjksNiArNzAsOCBAQCB2b2lkIEludGxQbHVyYWxSdWxl
czo6dmlzaXRDaGlsZHJlbihKU0NlCiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0
LCB2aXNpdG9yKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEludGxQbHVyYWxSdWxlcyk7
CisKIFZlY3RvcjxTdHJpbmc+IEludGxQbHVyYWxSdWxlczo6bG9jYWxlRGF0YShjb25zdCBTdHJp
bmcmLCBSZWxldmFudEV4dGVuc2lvbktleSkKIHsKICAgICByZXR1cm4geyB9OwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFBsdXJhbFJ1bGVzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFBsdXJhbFJ1bGVzLmgJKHJldmlz
aW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxQbHVyYWxS
dWxlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAo
QykgMjAxOCBBbmR5IFZhbldhZ29uZXIgKGFuZHlAdmFud2Fnb25lci5mYW1pbHkpCisgKiBDb3B5
cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02Niw3ICs2Nyw3IEBAIHB1YmxpYzoKIHByaXZhdGU6
CiAgICAgSW50bFBsdXJhbFJ1bGVzKFZNJiwgU3RydWN0dXJlKik7CiAgICAgdm9pZCBmaW5pc2hD
cmVhdGlvbihWTSYpOwotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xv
dFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgc3RhdGljIFZl
Y3RvcjxTdHJpbmc+IGxvY2FsZURhdGEoY29uc3QgU3RyaW5nJiwgUmVsZXZhbnRFeHRlbnNpb25L
ZXkpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsUmVsYXRpdmVU
aW1lRm9ybWF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9JbnRsUmVsYXRpdmVUaW1lRm9ybWF0LmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFJlbGF0aXZlVGltZUZvcm1hdC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDIwIFNvbnkg
SW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC02Miw3ICs2Myw4IEBAIHZvaWQgSW50bFJlbGF0aXZlVGltZUZvcm1hdDo6ZmluaXNo
Q3JlYXQKICAgICBBU1NFUlQoaW5oZXJpdHModm0sIGluZm8oKSkpOwogfQogCi12b2lkIEludGxS
ZWxhdGl2ZVRpbWVGb3JtYXQ6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRv
ciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEludGxSZWxhdGl2
ZVRpbWVGb3JtYXQ6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlz
aXRvcikKIHsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEludGxSZWxhdGl2ZVRpbWVG
b3JtYXQqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3Qs
IGluZm8oKSk7CkBAIC03MCw2ICs3Miw4IEBAIHZvaWQgSW50bFJlbGF0aXZlVGltZUZvcm1hdDo6
dmlzaXRDaGlsZHIKICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3Ip
OwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSW50bFJlbGF0aXZlVGltZUZvcm1hdCk7CisK
IFZlY3RvcjxTdHJpbmc+IEludGxSZWxhdGl2ZVRpbWVGb3JtYXQ6OmxvY2FsZURhdGEoY29uc3Qg
U3RyaW5nJiBsb2NhbGUsIFJlbGV2YW50RXh0ZW5zaW9uS2V5IGtleSkKIHsKICAgICBBU1NFUlRf
VU5VU0VEKGtleSwga2V5ID09IFJlbGV2YW50RXh0ZW5zaW9uS2V5OjpOdSk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsUmVsYXRpdmVUaW1lRm9ybWF0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFJlbGF0aXZlVGltZUZv
cm1hdC5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9JbnRsUmVsYXRpdmVUaW1lRm9ybWF0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBA
CiAvKgogICogQ29weXJpZ2h0IChDKSAyMDIwIFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVu
dCBJbmMuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIwLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02NCw3ICs2NCw3IEBA
IHB1YmxpYzoKIHByaXZhdGU6CiAgICAgSW50bFJlbGF0aXZlVGltZUZvcm1hdChWTSYsIFN0cnVj
dHVyZSopOwogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKLSAgICBzdGF0aWMgdm9pZCB2
aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9D
SElMRFJFTjsKIAogICAgIHN0YXRpYyBWZWN0b3I8U3RyaW5nPiBsb2NhbGVEYXRhKGNvbnN0IFN0
cmluZyYsIFJlbGV2YW50RXh0ZW5zaW9uS2V5KTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSW50bFNlZ21lbnRJdGVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFNlZ21lbnRJdGVyYXRvci5jcHAJKHJldmlzaW9u
IDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxTZWdtZW50SXRl
cmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdo
dCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC02NCwxMyArNjUsMTYgQEAgdm9pZCBJbnRsU2VnbWVudEl0ZXJh
dG9yOjpmaW5pc2hDcmVhdGlvbgogICAgIG1fc3RyaW5nLnNldCh2bSwgdGhpcywgc3RyaW5nKTsK
IH0KIAotdm9pZCBJbnRsU2VnbWVudEl0ZXJhdG9yOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2Vs
bCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9p
ZCBJbnRsU2VnbWVudEl0ZXJhdG9yOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZp
c2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxJbnRsU2Vn
bWVudEl0ZXJhdG9yKj4oY2VsbCk7CiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0
LCB2aXNpdG9yKTsKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX3N0cmluZyk7CiB9
CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihJbnRsU2VnbWVudEl0ZXJhdG9yKTsKKwogSlNPYmpl
Y3QqIEludGxTZWdtZW50SXRlcmF0b3I6Om5leHQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCkKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9JbnRsU2VnbWVudEl0ZXJhdG9yLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFNlZ21lbnRJdGVyYXRvci5oCShyZXZp
c2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsU2VnbWVu
dEl0ZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJp
Z2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTUzLDcgKzU0LDcgQEAgcHVibGljOgogCiAgICAgSlNPYmpl
Y3QqIG5leHQoSlNHbG9iYWxPYmplY3QqKTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwog
CiBwcml2YXRlOgogICAgIEludGxTZWdtZW50SXRlcmF0b3IoVk0mLCBTdHJ1Y3R1cmUqLCBzdGQ6
OnVuaXF1ZV9wdHI8VUJyZWFrSXRlcmF0b3IsIFVCcmVha0l0ZXJhdG9yRGVsZXRlcj4mJiwgQm94
PFZlY3RvcjxVQ2hhcj4+JiYsIEludGxTZWdtZW50ZXI6OkdyYW51bGFyaXR5KTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxTZWdtZW50cy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFNlZ21lbnRzLmNwcAkocmV2aXNp
b24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFNlZ21lbnRz
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMp
IDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMTA5LDExICsxMTAsMTQgQEAgSlNPYmplY3QqIEludGxTZWdtZW50czo6
Y3JlYXRlU2VnbWVudEl0ZQogICAgIHJldHVybiBJbnRsU2VnbWVudEl0ZXJhdG9yOjpjcmVhdGUo
dm0sIGdsb2JhbE9iamVjdC0+c2VnbWVudEl0ZXJhdG9yU3RydWN0dXJlKCksIFdURk1vdmUoc2Vn
bWVudGVyKSwgbV9idWZmZXIsIG1fc3RyaW5nLmdldCgpLCBtX2dyYW51bGFyaXR5KTsKIH0KIAot
dm9pZCBJbnRsU2VnbWVudHM6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRv
ciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEludGxTZWdtZW50
czo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewog
ICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SW50bFNlZ21lbnRzKj4oY2VsbCk7CiAgICAg
QmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKICAgICB2aXNpdG9yLmFw
cGVuZCh0aGlzT2JqZWN0LT5tX3N0cmluZyk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihJ
bnRsU2VnbWVudHMpOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0ludGxTZWdtZW50cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0ludGxTZWdtZW50cy5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsU2VnbWVudHMuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTQs
NyArNTUsNyBAQCBwdWJsaWM6CiAgICAgSlNWYWx1ZSBjb250YWluaW5nKEpTR2xvYmFsT2JqZWN0
KiwgSlNWYWx1ZSBpbmRleFZhbHVlKTsKICAgICBKU09iamVjdCogY3JlYXRlU2VnbWVudEl0ZXJh
dG9yKEpTR2xvYmFsT2JqZWN0Kik7CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpT
Q2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogcHJp
dmF0ZToKICAgICBJbnRsU2VnbWVudHMoVk0mLCBTdHJ1Y3R1cmUqLCBzdGQ6OnVuaXF1ZV9wdHI8
VUJyZWFrSXRlcmF0b3IsIFVCcmVha0l0ZXJhdG9yRGVsZXRlcj4mJiwgQm94PFZlY3RvcjxVQ2hh
cj4+JiYsIEludGxTZWdtZW50ZXI6OkdyYW51bGFyaXR5KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5jcHAJKHJldmlzaW9u
IDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJW
aWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE1NSw3ICsxNTUsOCBAQCB2b2lkIEpTQXJyYXlC
dWZmZXJWaWV3OjpmaW5pc2hDcmVhdGlvbihWCiAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKIH0KIAotdm9pZCBKU0FycmF5QnVmZmVyVmlldzo6dmlzaXRDaGlsZHJlbihKU0NlbGwq
IGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4K
K3ZvaWQgSlNBcnJheUJ1ZmZlclZpZXc6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwg
VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU0FycmF5QnVmZmVyVmlldyogdGhpc09iamVjdCA9
IGpzQ2FzdDxKU0FycmF5QnVmZmVyVmlldyo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1Rf
SU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTE2OSw2ICsxNzAsOCBAQCB2b2lkIEpT
QXJyYXlCdWZmZXJWaWV3Ojp2aXNpdENoaWxkcmVuKEpTCiAgICAgfQogfQogCitERUZJTkVfVklT
SVRfQ0hJTERSRU4oSlNBcnJheUJ1ZmZlclZpZXcpOworCiBib29sIEpTQXJyYXlCdWZmZXJWaWV3
OjpwdXQoCiAgICAgSlNDZWxsKiBjZWxsLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQ
cm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLAogICAgIFB1dFByb3BlcnR5
U2xvdCYgc2xvdCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlC
dWZmZXJWaWV3LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNBcnJheUJ1ZmZlclZpZXcuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE3
Miw3ICsxNzIsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgCiAgICAgc3RhdGljIGJvb2wgcHV0KEpTQ2Vs
bCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBQdXRQcm9wZXJ0eVNs
b3QmKTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0
b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogICAgIAogcHVibGljOgogICAgIFR5
cGVkQXJyYXlNb2RlIG1vZGUoKSBjb25zdCB7IHJldHVybiBtX21vZGU7IH0KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlJdGVyYXRvci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUl0ZXJhdG9yLmNwcAkocmV2
aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUl0
ZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDIwLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02OCwxMSArNjgsMTQgQEAgdm9pZCBKU0FycmF5SXRl
cmF0b3I6OmZpbmlzaENyZWF0aW9uKFZNJgogICAgICAgICBCYXNlOjppbnRlcm5hbEZpZWxkKGlu
ZGV4KS5zZXQodm0sIHRoaXMsIHZhbHVlc1tpbmRleF0pOwogfQogCi12b2lkIEpTQXJyYXlJdGVy
YXRvcjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQor
dGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNBcnJheUl0ZXJhdG9yOjp2aXNpdENo
aWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0byog
dGhpc09iamVjdCA9IGpzQ2FzdDxKU0FycmF5SXRlcmF0b3IqPihjZWxsKTsKICAgICBBU1NFUlRf
R0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAgICAgQmFzZTo6dmlzaXRD
aGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVO
KEpTQXJyYXlJdGVyYXRvcik7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUl0ZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUl0ZXJhdG9yLmgJKHJldmlzaW9uIDI3
MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlJdGVyYXRvci5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAy
MCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAt
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTc4LDcgKzc4LDcgQEAgcHVibGljOgogCiAgICAgREVDTEFSRV9JTkZP
OwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYp
OworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKIHByaXZhdGU6CiAgICAgSlNBcnJheUl0
ZXJhdG9yKFZNJiwgU3RydWN0dXJlKik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0FzeW5jR2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0FzeW5jR2VuZXJhdG9yLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBc3luY0dlbmVyYXRvci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOS0yMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtNTksMTEgKzU5LDE0IEBAIHZvaWQgSlNBc3luY0dlbmVyYXRvcjo6ZmluaXNoQ3Jl
YXRpb24oVk0KICAgICAgICAgaW50ZXJuYWxGaWVsZChpbmRleCkuc2V0KHZtLCB0aGlzLCB2YWx1
ZXNbaW5kZXhdKTsKIH0KIAotdm9pZCBKU0FzeW5jR2VuZXJhdG9yOjp2aXNpdENoaWxkcmVuKEpT
Q2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNp
dG9yPgordm9pZCBKU0FzeW5jR2VuZXJhdG9yOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNl
bGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxK
U0FzeW5jR2VuZXJhdG9yKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0
aGlzT2JqZWN0LCBpbmZvKCkpOwogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwg
dmlzaXRvcik7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU0FzeW5jR2VuZXJhdG9yKTsK
KwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0FzeW5jR2VuZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNBc3luY0dlbmVyYXRvci5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FzeW5jR2VuZXJhdG9yLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOS0yMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
OTUsNyArOTUsNyBAQCBwdWJsaWM6CiAKICAgICBERUNMQVJFX0VYUE9SVF9JTkZPOwogCi0gICAg
c3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERF
Q0xBUkVfVklTSVRfQ0hJTERSRU47CiAKIHByaXZhdGU6CiAgICAgSlNBc3luY0dlbmVyYXRvcihW
TSYsIFN0cnVjdHVyZSopOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNC
aWdJbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
QmlnSW50LmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNCaWdJbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAq
IENvcHlyaWdodCAoQykgMjAxNyBDYWlvIExpbWEgPHRpY2Fpb2xpbWFAZ21haWwuY29tPgotICog
Q29weXJpZ2h0IChDKSAyMDE3LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02Nyw3ICs2Nyw4IEBAIEpTQmln
SW50OjpKU0JpZ0ludChWTSYgdm0sIFN0cnVjdHVyZSogc3QKICAgICAsIG1fZGF0YSh2bSwgdGhp
cywgZGF0YSwgbGVuZ3RoKQogeyB9CiAKLXZvaWQgSlNCaWdJbnQ6OnZpc2l0Q2hpbGRyZW4oSlND
ZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0
b3I+Cit2b2lkIEpTQmlnSW50Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0
b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0JpZ0ludCo+
KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygp
KTsKQEAgLTc2LDYgKzc3LDggQEAgdm9pZCBKU0JpZ0ludDo6dmlzaXRDaGlsZHJlbihKU0NlbGwq
IGNlbAogICAgICAgICB2aXNpdG9yLm1hcmtBdXhpbGlhcnkoZGF0YSk7CiB9CiAKK0RFRklORV9W
SVNJVF9DSElMRFJFTihKU0JpZ0ludCk7CisKIHZvaWQgSlNCaWdJbnQ6OmluaXRpYWxpemUoSW5p
dGlhbGl6YXRpb25UeXBlIGluaXRUeXBlKQogewogICAgIGlmIChpbml0VHlwZSA9PSBJbml0aWFs
aXphdGlvblR5cGU6OldpdGhaZXJvKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNCaWdJbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0JpZ0ludC5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0JpZ0ludC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAq
IENvcHlyaWdodCAoQykgMjAxNyBDYWlvIExpbWEgPHRpY2Fpb2xpbWFAZ21haWwuY29tPgotICog
Q29weXJpZ2h0IChDKSAyMDE5LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE5LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01MCw3ICs1MCw3IEBAIHB1Ymxp
YzoKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6
U3RydWN0dXJlRmxhZ3MgfCBTdHJ1Y3R1cmVJc0ltbW9ydGFsIHwgT3ZlcnJpZGVzVG9UaGlzOwog
ICAgIGZyaWVuZCBjbGFzcyBDYWNoZWRCaWdJbnQ7CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENo
aWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJF
TjsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2Vzcz4KICAg
ICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQm91bmRGdW5jdGlvbi5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCb3VuZEZ1bmN0aW9uLmNwcAkocmV2aXNp
b24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCb3VuZEZ1bmN0
aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTEsIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTEtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI0OSw3ICsyNDksOCBAQCB2b2lkIEpT
Qm91bmRGdW5jdGlvbjo6ZmluaXNoQ3JlYXRpb24oVk0mCiAgICAgQVNTRVJUKGluaGVyaXRzKHZt
LCBpbmZvKCkpKTsKIH0KIAotdm9pZCBKU0JvdW5kRnVuY3Rpb246OnZpc2l0Q2hpbGRyZW4oSlND
ZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0
b3I+Cit2b2lkIEpTQm91bmRGdW5jdGlvbjo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxs
LCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTQm91bmRGdW5jdGlvbiogdGhpc09iamVjdCA9
IGpzQ2FzdDxKU0JvdW5kRnVuY3Rpb24qPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lO
SEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC0yNjEsNCArMjYyLDYgQEAgdm9pZCBKU0Jv
dW5kRnVuY3Rpb246OnZpc2l0Q2hpbGRyZW4oSlNDZQogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNP
YmplY3QtPm1fbmFtZU1heUJlTnVsbCk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU0Jv
dW5kRnVuY3Rpb24pOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTQm91bmRGdW5jdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQm91bmRGdW5jdGlvbi5oCShyZXZpc2lvbiAyNzI4MzAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JvdW5kRnVuY3Rpb24uaAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAx
OCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEt
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTg0LDcgKzg0LDcgQEAgcHJpdmF0ZToKICAgICBKU0JvdW5kRnVuY3Rp
b24oVk0mLCBOYXRpdmVFeGVjdXRhYmxlKiwgSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqLCBK
U09iamVjdCogdGFyZ2V0RnVuY3Rpb24sIEpTVmFsdWUgYm91bmRUaGlzLCBKU0ltbXV0YWJsZUJ1
dHRlcmZseSogYm91bmRBcmdzLCBKU1N0cmluZyogbmFtZU1heUJlTnVsbCwgZG91YmxlIGxlbmd0
aCk7CiAKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7Ci0gICAgc3RhdGljIHZvaWQgdmlz
aXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJ
TERSRU47CiAKICAgICBXcml0ZUJhcnJpZXI8SlNPYmplY3Q+IG1fdGFyZ2V0RnVuY3Rpb247CiAg
ICAgV3JpdGVCYXJyaWVyPFVua25vd24+IG1fYm91bmRUaGlzOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNDYWxsZWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTQ2FsbGVlLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDYWxsZWUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAyMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTUwLDcgKzUwLDggQEAgdm9pZCBKU0NhbGxlZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQog
ICAgIEFTU0VSVChpbmhlcml0cyh2bSwgaW5mbygpKSk7CiB9CiAKLXZvaWQgSlNDYWxsZWU6OnZp
c2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRl
PHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTQ2FsbGVlOjp2aXNpdENoaWxkcmVuSW1wbChKU0Nl
bGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNDYWxsZWUqIHRoaXNPYmplY3Qg
PSBqc0Nhc3Q8SlNDYWxsZWUqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRT
KHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC01OSw0ICs2MCw2IEBAIHZvaWQgSlNDYWxsZWU6OnZp
c2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWwKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5t
X3Njb3BlKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTQ2FsbGVlKTsKKwogfSAvLyBu
YW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NhbGxl
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2FsbGVl
LmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
Q2FsbGVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTAwLDcgKzEwMCw3IEBAIHByb3RlY3RlZDoKICAgICB2
b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7CiAgICAgdXNpbmcgQmFzZTo6ZmluaXNoQ3JlYXRpb247
CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7
CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogcHJpdmF0ZToKICAgICBmcmllbmQgY2xh
c3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNDZWxsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNDZWxsLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTQ2VsbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqICBD
b3B5cmlnaHQgKEMpIDE5OTktMjAwMSBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQogICog
IENvcHlyaWdodCAoQykgMjAwMSBQZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQotICogIENvcHly
aWdodCAoQykgMjAwMy0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBD
b3B5cmlnaHQgKEMpIDIwMDMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIkpTTG9jay5o
IgogI2luY2x1ZGUgIkpTVHlwZUluZm8uaCIKICNpbmNsdWRlICJTbG90VmlzaXRvci5oIgorI2lu
Y2x1ZGUgIlNsb3RWaXNpdG9yTWFjcm9zLmgiCiAjaW5jbHVkZSAiU3Vic3BhY2VBY2Nlc3MuaCIK
ICNpbmNsdWRlICJUeXBlZEFycmF5VHlwZS5oIgogI2luY2x1ZGUgIldyaXRlQmFycmllci5oIgpA
QCAtMTY3LDggKzE2OCw4IEBAIHB1YmxpYzoKICAgICBzaXplX3QgZXN0aW1hdGVkU2l6ZUluQnl0
ZXMoVk0mKSBjb25zdDsKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgc2l6ZV90IGVzdGlt
YXRlZFNpemUoSlNDZWxsKiwgVk0mKTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4o
SlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdE91dHB1dENvbnN0
cmFpbnRzKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9JTkxJTkVfVklTSVRf
Q0hJTERSRU47CisgICAgc3RhdGljIHZvaWQgdmlzaXRPdXRwdXRDb25zdHJhaW50cyhKU0NlbGwq
LCBBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMg
dm9pZCBhbmFseXplSGVhcChKU0NlbGwqLCBIZWFwQW5hbHl6ZXImKTsKIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsSW5saW5lcy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbElubGluZXMuaAkocmV2aXNpb24gMjcy
ODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsSW5saW5lcy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMi0y
MDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
Mi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMjUsNiArMjUsNyBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2luY2x1
ZGUgIkFic3RyYWN0U2xvdFZpc2l0b3JJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQWxsb2NhdG9yRm9y
TW9kZS5oIgogI2luY2x1ZGUgIkFsbG9jYXRvcklubGluZXMuaCIKICNpbmNsdWRlICJDb21wbGV0
ZVN1YnNwYWNlSW5saW5lcy5oIgpAQCAtMTQxLDEyICsxNDIsMTUgQEAgQUxXQVlTX0lOTElORSBT
dHJ1Y3R1cmUqIEpTQ2VsbDo6c3RydWN0dQogICAgIHJldHVybiB2bS5nZXRTdHJ1Y3R1cmUobV9z
dHJ1Y3R1cmVJRCk7CiB9CiAKLWlubGluZSB2b2lkIEpTQ2VsbDo6dmlzaXRDaGlsZHJlbihKU0Nl
bGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRv
cj4KK2lubGluZSB2b2lkIEpTQ2VsbDo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBW
aXNpdG9yJiB2aXNpdG9yKQogewogICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQoY2VsbC0+
c3RydWN0dXJlKHZpc2l0b3Iudm0oKSkpOwogfQogCi1pbmxpbmUgdm9pZCBKU0NlbGw6OnZpc2l0
T3V0cHV0Q29uc3RyYWludHMoSlNDZWxsKiwgU2xvdFZpc2l0b3ImKQorREVGSU5FX0lOTElORV9W
SVNJVF9DSElMRFJFTihKU0NlbGwpOworCitpbmxpbmUgdm9pZCBKU0NlbGw6OnZpc2l0T3V0cHV0
Q29uc3RyYWludHMoSlNDZWxsKiwgQWJzdHJhY3RTbG90VmlzaXRvciYpCiB7CiB9CiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ3VzdG9tR2V0dGVyU2V0dGVyRnVuY3Rp
b24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ3Vz
dG9tR2V0dGVyU2V0dGVyRnVuY3Rpb24uY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0N1c3RvbUdldHRlclNldHRlckZ1bmN0aW9uLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUs
IDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE1LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC04NSw3ICs4NSw4IEBAIEpTQ3VzdG9tR2V0dGVyU2V0dGVyRnVu
Y3Rpb24qIEpTQ3VzdG9tR2UKICAgICByZXR1cm4gZnVuY3Rpb247CiB9CiAKLXZvaWQgSlNDdXN0
b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNDdXN0
b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbjo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBW
aXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTQ3VzdG9tR2V0dGVyU2V0dGVyRnVuY3Rpb24qIHRo
aXNPYmplY3QgPSBqc0Nhc3Q8SlNDdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbio+KGNlbGwpOwog
ICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTk0
LDYgKzk1LDggQEAgdm9pZCBKU0N1c3RvbUdldHRlclNldHRlckZ1bmN0aW9uOjp2aXNpdAogICAg
IHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fZ2V0dGVyU2V0dGVyKTsKIH0KIAorREVGSU5F
X1ZJU0lUX0NISUxEUkVOKEpTQ3VzdG9tR2V0dGVyU2V0dGVyRnVuY3Rpb24pOworCiB2b2lkIEpT
Q3VzdG9tR2V0dGVyU2V0dGVyRnVuY3Rpb246OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgTmF0aXZl
RXhlY3V0YWJsZSogZXhlY3V0YWJsZSwgQ3VzdG9tR2V0dGVyU2V0dGVyKiBnZXR0ZXJTZXR0ZXIs
IGNvbnN0IFN0cmluZyYgbmFtZSkKIHsKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSwgZXhl
Y3V0YWJsZSwgaXNTZXR0ZXIoKSwgbmFtZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0N1c3RvbUdldHRlclNldHRlckZ1bmN0aW9uLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbi5o
CShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0N1
c3RvbUdldHRlclNldHRlckZ1bmN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02Myw3ICs2Myw3
IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgSlNDdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbihW
TSYsIE5hdGl2ZUV4ZWN1dGFibGUqLCBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSosIFR5cGUs
IGNvbnN0IFByb3BlcnR5TmFtZSYpOwogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBOYXRp
dmVFeGVjdXRhYmxlKiwgQ3VzdG9tR2V0dGVyU2V0dGVyKiwgY29uc3QgU3RyaW5nJik7Ci0gICAg
c3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERF
Q0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBXcml0ZUJhcnJpZXI8Q3VzdG9tR2V0dGVyU2V0
dGVyPiBtX2dldHRlclNldHRlcjsKICAgICBUeXBlIG1fdHlwZTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTRmluYWxpemF0aW9uUmVnaXN0cnkuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRmluYWxpemF0aW9uUmVnaXN0cnku
Y3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0ZpbmFsaXphdGlvblJlZ2lzdHJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMC0yMDIxIEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2LDYgKzI2LDcgQEAK
ICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJKU0ZpbmFsaXphdGlvblJlZ2lzdHJ5Lmgi
CiAKKyNpbmNsdWRlICJBYnN0cmFjdFNsb3RWaXNpdG9yLmgiCiAjaW5jbHVkZSAiRGVmZXJyZWRX
b3JrVGltZXIuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNJbnRlcm5h
bEZpZWxkT2JqZWN0SW1wbElubGluZXMuaCIKQEAgLTYwLDcgKzYxLDggQEAgdm9pZCBKU0ZpbmFs
aXphdGlvblJlZ2lzdHJ5OjpmaW5pc2hDcmVhdAogICAgIGdsb2JhbE9iamVjdC0+Z2xvYmFsT2Jq
ZWN0TWV0aG9kVGFibGUoKS0+Y3VycmVudFNjcmlwdEV4ZWN1dGlvbk93bmVyKGdsb2JhbE9iamVj
dCk7CiB9CiAKLXZvaWQgSlNGaW5hbGl6YXRpb25SZWdpc3RyeTo6dmlzaXRDaGlsZHJlbihKU0Nl
bGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRv
cj4KK3ZvaWQgSlNGaW5hbGl6YXRpb25SZWdpc3RyeTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxs
KiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4oY2Vs
bCwgdmlzaXRvcik7CiAKQEAgLTgwLDEzICs4MiwxNSBAQCB2b2lkIEpTRmluYWxpemF0aW9uUmVn
aXN0cnk6OnZpc2l0Q2hpbGRyCiAgICAgZm9yIChhdXRvJiBob2xkaW5ncyA6IHRoaXNPYmplY3Qt
Pm1fbm9VbnJlZ2lzdHJhdGlvbkRlYWQpCiAgICAgICAgIHZpc2l0b3IuYXBwZW5kKGhvbGRpbmdz
KTsKIAotICAgIHNpemVfdCB0b3RhbEJ1ZmZlclNpemVzSW5CeXRlcyA9IHRoaXNPYmplY3QtPm1f
ZGVhZFJlZ2lzdHJhdGlvbnMuY2FwYWNpdHkoKSAqIHNpemVvZihkZWNsdHlwZSh0aGlzT2JqZWN0
LT5tX2RlYWRSZWdpc3RyYXRpb25zKTo6S2V5VmFsdWVQYWlyVHlwZSk7Ci0gICAgdG90YWxCdWZm
ZXJTaXplc0luQnl0ZXMgKz0gdGhpc09iamVjdC0+bV9saXZlUmVnaXN0cmF0aW9ucy5jYXBhY2l0
eSgpICogc2l6ZW9mKGRlY2x0eXBlKHRoaXNPYmplY3QtPm1fZGVhZFJlZ2lzdHJhdGlvbnMpOjpL
ZXlWYWx1ZVBhaXJUeXBlKTsKKyAgICBzaXplX3QgdG90YWxCdWZmZXJTaXplc0luQnl0ZXMgPSB0
aGlzT2JqZWN0LT5tX2RlYWRSZWdpc3RyYXRpb25zLmNhcGFjaXR5KCkgKiBzaXplb2YodHlwZW5h
bWUgZGVjbHR5cGUodGhpc09iamVjdC0+bV9kZWFkUmVnaXN0cmF0aW9ucyk6OktleVZhbHVlUGFp
clR5cGUpOworICAgIHRvdGFsQnVmZmVyU2l6ZXNJbkJ5dGVzICs9IHRoaXNPYmplY3QtPm1fbGl2
ZVJlZ2lzdHJhdGlvbnMuY2FwYWNpdHkoKSAqIHNpemVvZih0eXBlbmFtZSBkZWNsdHlwZSh0aGlz
T2JqZWN0LT5tX2RlYWRSZWdpc3RyYXRpb25zKTo6S2V5VmFsdWVQYWlyVHlwZSk7CiAgICAgdG90
YWxCdWZmZXJTaXplc0luQnl0ZXMgKz0gdGhpc09iamVjdC0+bV9ub1VucmVnaXN0cmF0aW9uTGl2
ZS5jYXBhY2l0eSgpICogc2l6ZW9mKGRlY2x0eXBlKHRoaXNPYmplY3QtPm1fbm9VbnJlZ2lzdHJh
dGlvbkxpdmUudGFrZUxhc3QoKSkpOwogICAgIHRvdGFsQnVmZmVyU2l6ZXNJbkJ5dGVzICs9IHRo
aXNPYmplY3QtPm1fbm9VbnJlZ2lzdHJhdGlvbkRlYWQuY2FwYWNpdHkoKSAqIHNpemVvZihkZWNs
dHlwZSh0aGlzT2JqZWN0LT5tX25vVW5yZWdpc3RyYXRpb25MaXZlLnRha2VMYXN0KCkpKTsKICAg
ICB2aXNpdG9yLnZtKCkuaGVhcC5yZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQodG90YWxCdWZmZXJT
aXplc0luQnl0ZXMpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNGaW5hbGl6YXRpb25S
ZWdpc3RyeSk7CisKIHZvaWQgSlNGaW5hbGl6YXRpb25SZWdpc3RyeTo6ZGVzdHJveShKU0NlbGwq
IHRhYmxlKQogewogICAgIHN0YXRpY19jYXN0PEpTRmluYWxpemF0aW9uUmVnaXN0cnkqPih0YWJs
ZSktPn5KU0ZpbmFsaXphdGlvblJlZ2lzdHJ5KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0ZpbmFsaXphdGlvblJlZ2lzdHJ5LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGaW5hbGl6YXRpb25SZWdpc3RyeS5oCShyZXZpc2lv
biAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ZpbmFsaXphdGlv
blJlZ2lzdHJ5LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDIwIEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMjAtMjAyMSBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03MCw3ICs3MCw3IEBAIHB1YmxpYzoKICAgICBE
RUNMQVJFX0VYUE9SVF9JTkZPOwogCiAgICAgdm9pZCBmaW5hbGl6ZVVuY29uZGl0aW9uYWxseShW
TSYpOwotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3Im
KTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3ko
SlNDZWxsKik7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSB0
cnVlOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9u
LmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNGdW5jdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSw3IEBACiAvKgogICogIENv
cHlyaWdodCAoQykgMTk5OS0yMDAyIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCiAgKiAg
Q29weXJpZ2h0IChDKSAyMDAxIFBldGVyIEtlbGx5IChwbWtAcG9zdC5jb20pCi0gKiAgQ29weXJp
Z2h0IChDKSAyMDAzLTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENv
cHlyaWdodCAoQykgMjAwMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
ICBDb3B5cmlnaHQgKEMpIDIwMDcgQ2FtZXJvbiBad2FyaWNoIChjd3p3YXJpY2hAdXdhdGVybG9v
LmNhKQogICogIENvcHlyaWdodCAoQykgMjAwNyBNYWtzIE9ybG92aWNoCiAgKiAgQ29weXJpZ2h0
IChDKSAyMDE1IENhbm9uIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KQEAgLTI1Miw3ICsyNTIs
OCBAQCBjb25zdCBTb3VyY2VDb2RlKiBKU0Z1bmN0aW9uOjpzb3VyY2VDb2RlCiAgICAgcmV0dXJu
ICZqc0V4ZWN1dGFibGUoKS0+c291cmNlKCk7CiB9CiAgICAgCi12b2lkIEpTRnVuY3Rpb246OnZp
c2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRl
PHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTRnVuY3Rpb246OnZpc2l0Q2hpbGRyZW5JbXBsKEpT
Q2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU0Z1bmN0aW9uKiB0aGlzT2Jq
ZWN0ID0ganNDYXN0PEpTRnVuY3Rpb24qPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lO
SEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC0yNjEsNiArMjYyLDggQEAgdm9pZCBKU0Z1
bmN0aW9uOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogYwogICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJy
aWVyZWQoYml0d2lzZV9jYXN0PEpTQ2VsbCo+KGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KHRoaXNP
YmplY3QtPm1fZXhlY3V0YWJsZU9yUmFyZURhdGEpICYgfnJhcmVEYXRhVGFnKSk7CiB9CiAKK0RF
RklORV9WSVNJVF9DSElMRFJFTihKU0Z1bmN0aW9uKTsKKwogQ2FsbERhdGEgSlNGdW5jdGlvbjo6
Z2V0Q2FsbERhdGEoSlNDZWxsKiBjZWxsKQogewogICAgIC8vIEtlZXAgdGhpcyBmdW5jdGlvbiBP
SyBmb3IgaW52b2NhdGlvbiBmcm9tIGNvbmN1cnJlbnQgY29tcGlsZXJzLgpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uaAkocmV2aXNpb24gMjcyODMwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMCBIYXJy
aSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQotICogIENvcHlyaWdodCAoQykgMjAwMy0yMDIwIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA3
IENhbWVyb24gWndhcmljaCAoY3d6d2FyaWNoQHV3YXRlcmxvby5jYSkKICAqICBDb3B5cmlnaHQg
KEMpIDIwMDcgTWFrcyBPcmxvdmljaAogICoKQEAgLTE4MCw3ICsxODAsNyBAQCBwcm90ZWN0ZWQ6
CiAKICAgICBzdGF0aWMgYm9vbCBkZWxldGVQcm9wZXJ0eShKU0NlbGwqLCBKU0dsb2JhbE9iamVj
dCosIFByb3BlcnR5TmFtZSwgRGVsZXRlUHJvcGVydHlTbG90Jik7CiAKLSAgICBzdGF0aWMgdm9p
ZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJ
VF9DSElMRFJFTjsKIAogcHJpdmF0ZToKICAgICBzdGF0aWMgSlNGdW5jdGlvbiogY3JlYXRlSW1w
bChWTSYgdm0sIEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJsZSwgSlNTY29wZSogc2NvcGUs
IFN0cnVjdHVyZSogc3RydWN0dXJlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTR2VuZXJhdG9yLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU5LDExICs1
OSwxNCBAQCB2b2lkIEpTR2VuZXJhdG9yOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCiAgICAgICAg
IGludGVybmFsRmllbGQoaW5kZXgpLnNldCh2bSwgdGhpcywgdmFsdWVzW2luZGV4XSk7CiB9CiAK
LXZvaWQgSlNHZW5lcmF0b3I6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRv
ciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTR2VuZXJhdG9y
Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAg
ICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0dlbmVyYXRvcio+KGNlbGwpOwogICAgIEFT
U0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKICAgICBCYXNlOjp2
aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwogfQogCitERUZJTkVfVklTSVRfQ0hJ
TERSRU4oSlNHZW5lcmF0b3IpOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmF0b3IuaAkocmV2aXNpb24gMjcyODMwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmF0b3IuaAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE5LTIwMjEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC05NCw3ICs5NCw3IEBAIHB1YmxpYzoKIAogICAgIERFQ0xBUkVfRVhQT1JUX0lORk87CiAK
LSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7Cisg
ICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogcHJpdmF0ZToKICAgICBKU0dlbmVyYXRvcihW
TSYsIFN0cnVjdHVyZSopOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNH
ZW5lcmljVHlwZWRBcnJheVZpZXcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlldy5oCShyZXZpc2lvbiAyNzI4MzApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlldy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
My0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMzEzLDcgKzMxMyw3IEBAIHByaXZhdGU6CiAgICAgc3RhdGlj
IHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJv
cGVydHlOYW1lQXJyYXkmLCBEb250RW51bVByb3BlcnRpZXNNb2RlKTsKIAogICAgIHN0YXRpYyBz
aXplX3QgZXN0aW1hdGVkU2l6ZShKU0NlbGwqLCBWTSYpOwotICAgIHN0YXRpYyB2b2lkIHZpc2l0
Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1RFTVBMQVRFX1ZJ
U0lUX0NISUxEUkVOOwogCiAgICAgLy8gUmV0dXJucyB0cnVlIGlmIHN1Y2Nlc3NmdWwsIGFuZCBm
YWxzZSBvbiBlcnJvcjsgaXQgd2lsbCB0aHJvdyBvbiBlcnJvci4KICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBPdGhlckFkYXB0b3I+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaAkocmV2
aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmlj
VHlwZWRBcnJheVZpZXdJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01MTcsNyArNTE3LDgg
QEAgc2l6ZV90IEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OgogfQogCiB0ZW1wbGF0
ZTx0eXBlbmFtZSBBZGFwdG9yPgotdm9pZCBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9y
Pjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVt
cGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRh
cHRvcj46OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikK
IHsKICAgICBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0dl
bmVyaWNUeXBlZEFycmF5Vmlldyo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJ
VFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTU1NSw0ICs1NTYsNiBAQCB2b2lkIEpTR2VuZXJp
Y1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+Ojp2CiAgICAgfQogfQogCitERUZJTkVfVEVNUExBVEVf
VklTSVRfQ0hJTERSRU4odGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4sIEpTR2VuZXJpY1R5cGVk
QXJyYXlWaWV3PEFkYXB0b3I+KTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCShyZXZpc2lv
biAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVj
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDA3LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDA3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJp
Z2h0IChDKSAyMDA4IENhbWVyb24gWndhcmljaCAoY3d6d2FyaWNoQHV3YXRlcmxvby5jYSkKICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKQEAgLTE4OTIsNyArMTg5Miw4IEBAIHZvaWQgSlNHbG9iYWxPYmplY3Q6
OnJlc2V0UHJvdG90eXBlKFZNJiAKICAgICBzZXRHbG9iYWxUaGlzKHZtLCBKU1Byb3h5OjpjcmVh
dGUodm0sIEpTUHJveHk6OmNyZWF0ZVN0cnVjdHVyZSh2bSwgdGhpcywgcHJvdG90eXBlLCBQdXJl
Rm9yd2FyZGluZ1Byb3h5VHlwZSksIHRoaXMpKTsKIH0KIAotdm9pZCBKU0dsb2JhbE9iamVjdDo6
dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxh
dGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNHbG9iYWxPYmplY3Q6OnZpc2l0Q2hpbGRyZW5J
bXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsgCiAgICAgSlNHbG9iYWxPYmpl
Y3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNHbG9iYWxPYmplY3QqPihjZWxsKTsKICAgICBBU1NF
UlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC0yMDYwLDYgKzIw
NjEsOCBAQCB2b2lkIEpTR2xvYmFsT2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsCiAgICAgdGhp
c09iamVjdC0+bV9yZWdFeHBHbG9iYWxEYXRhLnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOwogfQog
CitERUZJTkVfRVhQT1JUX1ZJU0lUX0NISUxEUkVOKEpTR2xvYmFsT2JqZWN0KTsKKwogQ2FsbEZy
YW1lKiBKU0dsb2JhbE9iamVjdDo6ZGVwcmVjYXRlZENhbGxGcmFtZUZvckRlYnVnZ2VyKCkKIHsK
ICAgICByZXR1cm4gQ2FsbEZyYW1lOjpjcmVhdGUobV9kZXByZWNhdGVkQ2FsbEZyYW1lRm9yRGVi
dWdnZXIpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmpl
Y3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2Jh
bE9iamVjdC5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0dsb2JhbE9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoK
ICAqICBDb3B5cmlnaHQgKEMpIDIwMDcgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KLSAq
ICBDb3B5cmlnaHQgKEMpIDIwMDctMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiAgQ29weXJpZ2h0IChDKSAyMDA3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTYwOSw3ICs2MDksNyBAQCBwdWJsaWM6CiAg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgfkpTR2xvYmFsT2JqZWN0KCk7CiAgICAgSlNfRVhQT1JUX1BS
SVZBVEUgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKIAotICAgIEpTX0VYUE9SVF9QUklW
QVRFIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAg
ICBERUNMQVJFX0VYUE9SVF9WSVNJVF9DSElMRFJFTjsKIAogICAgIEpTX0VYUE9SVF9QUklWQVRF
IHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0
KiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBz
dGF0aWMgYm9vbCBwdXQoSlNDZWxsKiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIEpT
VmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNJbW11dGFibGVCdXR0ZXJmbHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTSW1tdXRhYmxlQnV0dGVyZmx5LmNwcAkocmV2aXNpb24gMjcy
ODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbW11dGFibGVCdXR0ZXJm
bHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTgtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTMyLDcgKzMyLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAKIGNv
bnN0IENsYXNzSW5mbyBKU0ltbXV0YWJsZUJ1dHRlcmZseTo6c19pbmZvID0geyAiSW1tdXRhYmxl
IEJ1dHRlcmZseSIsIG51bGxwdHIsIG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFC
TEUoSlNJbW11dGFibGVCdXR0ZXJmbHkpIH07CiAKLXZvaWQgSlNJbW11dGFibGVCdXR0ZXJmbHk6
OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBs
YXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTSW1tdXRhYmxlQnV0dGVyZmx5Ojp2aXNpdENo
aWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgQVNTRVJU
X0dDX09CSkVDVF9JTkhFUklUUyhjZWxsLCBpbmZvKCkpOwogICAgIEJhc2U6OnZpc2l0Q2hpbGRy
ZW4oY2VsbCwgdmlzaXRvcik7CkBAIC00NSw2ICs0Niw4IEBAIHZvaWQgSlNJbW11dGFibGVCdXR0
ZXJmbHk6OnZpc2l0Q2hpbGRyZW4KICAgICB2aXNpdG9yLmFwcGVuZFZhbHVlc0hpZGRlbihidXR0
ZXJmbHktPmNvbnRpZ3VvdXMoKS5kYXRhKCksIGJ1dHRlcmZseS0+cHVibGljTGVuZ3RoKCkpOwog
fQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNJbW11dGFibGVCdXR0ZXJmbHkpOworCiB2b2lk
IEpTSW1tdXRhYmxlQnV0dGVyZmx5Ojpjb3B5VG9Bcmd1bWVudHMoSlNHbG9iYWxPYmplY3QqLCBK
U1ZhbHVlKiBmaXJzdEVsZW1lbnREZXN0LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0
aCkKIHsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTSW1tdXRhYmxlQnV0dGVyZmx5LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbW11dGFibGVCdXR0
ZXJmbHkuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNJbW11dGFibGVCdXR0ZXJmbHkuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE0NSw3ICsxNDUs
NyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBqc0RvdWJsZU51bWJlcih2YWx1ZSk7CiAgICAg
fQogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYp
OworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICB2b2lkIGNvcHlUb0FyZ3VtZW50
cyhKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUqIGZpcnN0RWxlbWVudERlc3QsIHVuc2lnbmVkIG9m
ZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTSW50ZXJuYWxGaWVsZE9iamVjdEltcGwuaAkocmV2aXNp
b24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbnRlcm5hbEZp
ZWxkT2JqZWN0SW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTktMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY2LDcgKzY2LDcgQEAgcHVibGljOgogICAg
IHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZJbnRlcm5hbEZpZWxkKHVuc2lnbmVkIGluZGV4KSB7
IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbCwgbV9pbnRl
cm5hbEZpZWxkcykgKyBpbmRleCAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pOyB9CiAK
IHByb3RlY3RlZDoKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RW
aXNpdG9yJik7CisgICAgREVDTEFSRV9URU1QTEFURV9WSVNJVF9DSElMRFJFTjsKIAogICAgIEpT
SW50ZXJuYWxGaWVsZE9iamVjdEltcGwoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKICAg
ICAgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0ludGVybmFsRmllbGRPYmplY3RJbXBsSW5saW5lcy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTSW50ZXJuYWxGaWVsZE9iamVjdEltcGxJ
bmxpbmVzLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTSW50ZXJuYWxGaWVsZE9iamVjdEltcGxJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOS0yMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzAs
NyArMzAsOCBAQAogbmFtZXNwYWNlIEpTQyB7CiAKIHRlbXBsYXRlPHVuc2lnbmVkIHBhc3NlZE51
bWJlck9mSW50ZXJuYWxGaWVsZHM+Ci12b2lkIEpTSW50ZXJuYWxGaWVsZE9iamVjdEltcGw8cGFz
c2VkTnVtYmVyT2ZJbnRlcm5hbEZpZWxkcz46OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBT
bG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpT
SW50ZXJuYWxGaWVsZE9iamVjdEltcGw8cGFzc2VkTnVtYmVyT2ZJbnRlcm5hbEZpZWxkcz46OnZp
c2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBh
dXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTSW50ZXJuYWxGaWVsZE9iamVjdEltcGwqPihjZWxs
KTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBA
IC0zOCw0ICszOSw2IEBAIHZvaWQgSlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbDxwYXNzZWROdW0K
ICAgICB2aXNpdG9yLmFwcGVuZFZhbHVlcyh0aGlzT2JqZWN0LT5tX2ludGVybmFsRmllbGRzLCBu
dW1iZXJPZkludGVybmFsRmllbGRzKTsKIH0KIAorREVGSU5FX1RFTVBMQVRFX1ZJU0lUX0NISUxE
UkVOKHRlbXBsYXRlPHVuc2lnbmVkIHBhc3NlZE51bWJlck9mSW50ZXJuYWxGaWVsZHM+LCBKU0lu
dGVybmFsRmllbGRPYmplY3RJbXBsPHBhc3NlZE51bWJlck9mSW50ZXJuYWxGaWVsZHM+KTsKKwog
fSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0xleGljYWxFbnZpcm9ubWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNMZXhpY2FsRW52aXJvbm1lbnQuY3BwCShyZXZpc2lvbiAyNzI4MzApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xleGljYWxFbnZpcm9ubWVudC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4
LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDA4LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC0zNiw3ICszNiw4IEBAIG5hbWVzcGFjZSBKU0MgewogCiBjb25z
dCBDbGFzc0luZm8gSlNMZXhpY2FsRW52aXJvbm1lbnQ6OnNfaW5mbyA9IHsgIkpTTGV4aWNhbEVu
dmlyb25tZW50IiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhP
RF9UQUJMRShKU0xleGljYWxFbnZpcm9ubWVudCkgfTsKIAotdm9pZCBKU0xleGljYWxFbnZpcm9u
bWVudDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQor
dGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNMZXhpY2FsRW52aXJvbm1lbnQ6OnZp
c2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBh
dXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTTGV4aWNhbEVudmlyb25tZW50Kj4oY2VsbCk7CiAg
ICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNDQs
NiArNDUsOCBAQCB2b2lkIEpTTGV4aWNhbEVudmlyb25tZW50Ojp2aXNpdENoaWxkcmVuCiAgICAg
dmlzaXRvci5hcHBlbmRWYWx1ZXNIaWRkZW4odGhpc09iamVjdC0+dmFyaWFibGVzKCksIHRoaXNP
YmplY3QtPnN5bWJvbFRhYmxlKCktPnNjb3BlU2l6ZSgpKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NI
SUxEUkVOKEpTTGV4aWNhbEVudmlyb25tZW50KTsKKwogdm9pZCBKU0xleGljYWxFbnZpcm9ubWVu
dDo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQogewog
ICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNMZXhpY2FsRW52aXJvbm1lbnQqPihjZWxs
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTGV4aWNhbEVudmlyb25t
ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMZXhp
Y2FsRW52aXJvbm1lbnQuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNMZXhpY2FsRW52aXJvbm1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAyMCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAyMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEz
NCw3ICsxMzQsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBzdGF0aWMg
dm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9W
SVNJVF9DSElMRFJFTjsKICAgICBzdGF0aWMgdm9pZCBhbmFseXplSGVhcChKU0NlbGwqLCBIZWFw
QW5hbHl6ZXImKTsKIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
TWFwSXRlcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTTWFwSXRlcmF0b3IuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU01hcEl0ZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNyBBcHBsZSwgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjEgQXBwbGUsIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
NTcsMTMgKzU3LDE2IEBAIHZvaWQgSlNNYXBJdGVyYXRvcjo6ZmluaXNoQ3JlYXRpb24oVk0mIHYK
ICAgICAgICAgQmFzZTo6aW50ZXJuYWxGaWVsZChpbmRleCkuc2V0KHZtLCB0aGlzLCB2YWx1ZXNb
aW5kZXhdKTsKIH0KIAotdm9pZCBKU01hcEl0ZXJhdG9yOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCog
Y2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgor
dm9pZCBKU01hcEl0ZXJhdG9yOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0
b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU01hcEl0ZXJh
dG9yKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBp
bmZvKCkpOwogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CiB9
CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU01hcEl0ZXJhdG9yKTsKKwogSlNWYWx1ZSBKU01h
cEl0ZXJhdG9yOjpjcmVhdGVQYWlyKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFs
dWUga2V5LCBKU1ZhbHVlIHZhbHVlKQogewogICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3M7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01hcEl0ZXJhdG9yLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNYXBJdGVyYXRvci5o
CShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01h
cEl0ZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDEzLCAyMDE2IEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAyMSBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xNDIsNyArMTQyLDcgQEAgcHJpdmF0
ZToKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgSlNNYXAq
LCBJdGVyYXRpb25LaW5kKTsKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7CiAgICAgSlNW
YWx1ZSBjcmVhdGVQYWlyKEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSwgSlNWYWx1ZSk7Ci0gICAg
c3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERF
Q0xBUkVfVklTSVRfQ0hJTERSRU47CiB9OwogU1RBVElDX0FTU0VSVF9JU19UUklWSUFMTFlfREVT
VFJVQ1RJQkxFKEpTTWFwSXRlcmF0b3IpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU01vZHVsZUVudmlyb25tZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZUVudmlyb25tZW50LmNwcAkocmV2aXNpb24gMjcy
ODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVFbnZpcm9ubWVu
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDE1LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE1LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02NSw3ICs2NSw4IEBAIHZvaWQgSlNNb2R1bGVFbnZp
cm9ubWVudDo6ZmluaXNoQ3JlYXRpb24KICAgICB0aGlzLT5tb2R1bGVSZWNvcmRTbG90KCkuc2V0
KHZtLCB0aGlzLCBtb2R1bGVSZWNvcmQpOwogfQogCi12b2lkIEpTTW9kdWxlRW52aXJvbm1lbnQ6
OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBs
YXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTTW9kdWxlRW52aXJvbm1lbnQ6OnZpc2l0Q2hp
bGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU01vZHVs
ZUVudmlyb25tZW50KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTTW9kdWxlRW52aXJvbm1lbnQqPihj
ZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7
CkBAIC03NCw2ICs3NSw4IEBAIHZvaWQgSlNNb2R1bGVFbnZpcm9ubWVudDo6dmlzaXRDaGlsZHJl
bigKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tb2R1bGVSZWNvcmRTbG90KCkpOwog
fQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNNb2R1bGVFbnZpcm9ubWVudCk7CisKIGJvb2wg
SlNNb2R1bGVFbnZpcm9ubWVudDo6Z2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiBjZWxsLCBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQ
cm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVFbnZpcm9ubWVudC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlRW52
aXJvbm1lbnQuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNNb2R1bGVFbnZpcm9ubWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODksNyArODks
NyBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gKmJpdHdpc2VfY2FzdDxXcml0ZUJhcnJpZXJC
YXNlPEFic3RyYWN0TW9kdWxlUmVjb3JkPio+KGJpdHdpc2VfY2FzdDxjaGFyKj4odGhpcykgKyBv
ZmZzZXRPZk1vZHVsZVJlY29yZChzeW1ib2xUYWJsZSgpKSk7CiAgICAgfQogCi0gICAgc3RhdGlj
IHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVf
VklTSVRfQ0hJTERSRU47CiB9OwogCiBpbmxpbmUgSlNNb2R1bGVFbnZpcm9ubWVudDo6SlNNb2R1
bGVFbnZpcm9ubWVudChWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU1Njb3BlKiBjdXJy
ZW50U2NvcGUsIFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlTmFtZXNwYWNlT2JqZWN0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZU5hbWVzcGFjZU9iamVjdC5j
cHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
TW9kdWxlTmFtZXNwYWNlT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTg1LDcgKzg1LDgg
QEAgdm9pZCBKU01vZHVsZU5hbWVzcGFjZU9iamVjdDo6ZGVzdHJveShKUwogICAgIHRoaXNPYmpl
Y3QtPkpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0Ojp+SlNNb2R1bGVOYW1lc3BhY2VPYmplY3QoKTsK
IH0KIAotdm9pZCBKU01vZHVsZU5hbWVzcGFjZU9iamVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwq
IGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4K
K3ZvaWQgSlNNb2R1bGVOYW1lc3BhY2VPYmplY3Q6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCog
Y2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU01vZHVsZU5hbWVzcGFjZU9iamVjdCog
dGhpc09iamVjdCA9IGpzQ2FzdDxKU01vZHVsZU5hbWVzcGFjZU9iamVjdCo+KGNlbGwpOwogICAg
IEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTk4LDYg
Kzk5LDggQEAgdm9pZCBKU01vZHVsZU5hbWVzcGFjZU9iamVjdDo6dmlzaXRDaGlsZAogICAgIH0K
IH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0KTsKKwog
c3RhdGljIEpTVmFsdWUgZ2V0VmFsdWUoSlNNb2R1bGVFbnZpcm9ubWVudCogZW52aXJvbm1lbnQs
IFByb3BlcnR5TmFtZSBsb2NhbE5hbWUsIFNjb3BlT2Zmc2V0JiBzY29wZU9mZnNldCkKIHsKICAg
ICBTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUgPSBlbnZpcm9ubWVudC0+c3ltYm9sVGFibGUoKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlTmFtZXNwYWNlT2Jq
ZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1
bGVOYW1lc3BhY2VPYmplY3QuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QuaAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTcyLDcgKzcyLDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBKU19FWFBPUlRfUFJJVkFU
RSBKU01vZHVsZU5hbWVzcGFjZU9iamVjdChWTSYsIFN0cnVjdHVyZSopOwogICAgIEpTX0VYUE9S
VF9QUklWQVRFIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxPYmplY3QqLCBBYnN0cmFjdE1v
ZHVsZVJlY29yZCosIFZlY3RvcjxzdGQ6OnBhaXI8SWRlbnRpZmllciwgQWJzdHJhY3RNb2R1bGVS
ZWNvcmQ6OlJlc29sdXRpb24+PiYmKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpT
Q2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKICAgICBi
b29sIGdldE93blByb3BlcnR5U2xvdENvbW1vbihKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFt
ZSwgUHJvcGVydHlTbG90Jik7CiAKICAgICBzdHJ1Y3QgRXhwb3J0RW50cnkgewpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVSZWNvcmQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlUmVjb3JkLmNwcAkocmV2
aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVS
ZWNvcmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxNS0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNzAsNyArNzAsOCBAQCB2b2lkIEpTTW9kdWxl
UmVjb3JkOjpmaW5pc2hDcmVhdGlvbihKU0dsCiAgICAgQVNTRVJUKGluaGVyaXRzKHZtLCBpbmZv
KCkpKTsKIH0KIAotdm9pZCBKU01vZHVsZVJlY29yZDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNl
bGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3Zv
aWQgSlNNb2R1bGVSZWNvcmQ6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRv
ciYgdmlzaXRvcikKIHsKICAgICBKU01vZHVsZVJlY29yZCogdGhpc09iamVjdCA9IGpzQ2FzdDxK
U01vZHVsZVJlY29yZCo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhp
c09iamVjdCwgaW5mbygpKTsKQEAgLTc4LDYgKzc5LDggQEAgdm9pZCBKU01vZHVsZVJlY29yZDo6
dmlzaXRDaGlsZHJlbihKU0NlbAogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fbW9k
dWxlUHJvZ3JhbUV4ZWN1dGFibGUpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNNb2R1
bGVSZWNvcmQpOworCiB2b2lkIEpTTW9kdWxlUmVjb3JkOjpsaW5rKEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIEpTVmFsdWUgc2NyaXB0RmV0Y2hlcikKIHsKICAgICBWTSYgdm0gPSBnbG9i
YWxPYmplY3QtPnZtKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01v
ZHVsZVJlY29yZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTTW9kdWxlUmVjb3JkLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTTW9kdWxlUmVjb3JkLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02Niw3ICs2
Niw3IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTR2xvYmFsT2JqZWN0
KiwgVk0mKTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZp
c2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgdm9pZCBpbnN0YW50
aWF0ZURlY2xhcmF0aW9ucyhKU0dsb2JhbE9iamVjdCosIE1vZHVsZVByb2dyYW1FeGVjdXRhYmxl
KiwgSlNWYWx1ZSBzY3JpcHRGZXRjaGVyKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNOYXRpdmVTdGRGdW5jdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNOYXRpdmVTdGRGdW5jdGlvbi5jcHAJKHJldmlzaW9uIDI3
MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTmF0aXZlU3RkRnVuY3Rp
b24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDEsMTMgKzQxLDE2IEBAIEpTTmF0aXZlU3RkRnVu
Y3Rpb246OkpTTmF0aXZlU3RkRnVuY3Rpb24KIHsKIH0KIAotdm9pZCBKU05hdGl2ZVN0ZEZ1bmN0
aW9uOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0
ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU05hdGl2ZVN0ZEZ1bmN0aW9uOjp2aXNp
dENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNO
YXRpdmVTdGRGdW5jdGlvbiogdGhpc09iamVjdCA9IGpzQ2FzdDxKU05hdGl2ZVN0ZEZ1bmN0aW9u
Kj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZv
KCkpOwogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CiB9CiAK
K0RFRklORV9WSVNJVF9DSElMRFJFTihKU05hdGl2ZVN0ZEZ1bmN0aW9uKTsKKwogdm9pZCBKU05h
dGl2ZVN0ZEZ1bmN0aW9uOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIE5hdGl2ZUV4ZWN1dGFibGUq
IGV4ZWN1dGFibGUsIHVuc2lnbmVkIGxlbmd0aCwgY29uc3QgU3RyaW5nJiBuYW1lKQogewogICAg
IEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtLCBleGVjdXRhYmxlLCBsZW5ndGgsIG5hbWUpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNOYXRpdmVTdGRGdW5jdGlvbi5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTmF0aXZlU3RkRnVu
Y3Rpb24uaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNOYXRpdmVTdGRGdW5jdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjUsNyArNjUsNyBA
QCBwdWJsaWM6CiBwcml2YXRlOgogICAgIEpTTmF0aXZlU3RkRnVuY3Rpb24oVk0mLCBOYXRpdmVF
eGVjdXRhYmxlKiwgSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqLCBOYXRpdmVTdGRGdW5jdGlv
biYmKTsKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgTmF0aXZlRXhlY3V0YWJsZSosIHVu
c2lnbmVkIGxlbmd0aCwgY29uc3QgU3RyaW5nJiBuYW1lKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNp
dENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElM
RFJFTjsKIAogICAgIE5hdGl2ZVN0ZEZ1bmN0aW9uIG1fZnVuY3Rpb247CiB9OwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAkocmV2aXNpb24gMjcyODMw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMSBI
YXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQogICogIENvcHlyaWdodCAoQykgMjAwMSBQZXRl
ciBLZWxseSAocG1rQHBvc3QuY29tKQotICogIENvcHlyaWdodCAoQykgMjAwMy0yMDIwIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA3IEVy
aWMgU2VpZGVsIChlcmljQHdlYmtpdC5vcmcpCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTcyLDcgKzcyLDgg
QEAgY29uc3QgQ2xhc3NJbmZvIEpTT2JqZWN0OjpzX2luZm8gPSB7ICJPYgogCiBjb25zdCBDbGFz
c0luZm8gSlNGaW5hbE9iamVjdDo6c19pbmZvID0geyAiT2JqZWN0IiwgJkJhc2U6OnNfaW5mbywg
bnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU0ZpbmFsT2JqZWN0KSB9Owog
Ci1BTFdBWVNfSU5MSU5FIHZvaWQgSlNPYmplY3Q6Om1hcmtBdXhpbGlhcnlBbmRWaXNpdE91dE9m
TGluZVByb3BlcnRpZXMoU2xvdFZpc2l0b3ImIHZpc2l0b3IsIEJ1dHRlcmZseSogYnV0dGVyZmx5
LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgbWF4T2Zmc2V0KQordGVtcGxh
dGU8dHlwZW5hbWUgVmlzaXRvcj4KK0FMV0FZU19JTkxJTkUgdm9pZCBKU09iamVjdDo6bWFya0F1
eGlsaWFyeUFuZFZpc2l0T3V0T2ZMaW5lUHJvcGVydGllcyhWaXNpdG9yJiB2aXNpdG9yLCBCdXR0
ZXJmbHkqIGJ1dHRlcmZseSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IG1h
eE9mZnNldCkKIHsKICAgICAvLyBXZSBjYWxsIHRoaXMgd2hlbiB3ZSBmb3VuZCBldmVyeXRoaW5n
IHdpdGhvdXQgcmFjZXMuCiAgICAgQVNTRVJUKHN0cnVjdHVyZSk7CkBAIC0xMDMsNyArMTA0LDgg
QEAgQUxXQVlTX0lOTElORSB2b2lkIEpTT2JqZWN0OjptYXJrQXV4aWxpYQogICAgIHZpc2l0b3Iu
YXBwZW5kVmFsdWVzSGlkZGVuKGJ1dHRlcmZseS0+cHJvcGVydHlTdG9yYWdlKCkgLSBvdXRPZkxp
bmVTaXplLCBvdXRPZkxpbmVTaXplKTsKIH0KIAotQUxXQVlTX0lOTElORSBTdHJ1Y3R1cmUqIEpT
T2JqZWN0Ojp2aXNpdEJ1dHRlcmZseShTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5
cGVuYW1lIFZpc2l0b3I+CitBTFdBWVNfSU5MSU5FIFN0cnVjdHVyZSogSlNPYmplY3Q6OnZpc2l0
QnV0dGVyZmx5KFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgc3RhdGljIGNvbnN0IGNoYXIqIGNv
bnN0IHJhY2VSZWFzb24gPSAiSlNPYmplY3Q6OnZpc2l0QnV0dGVyZmx5IjsKICAgICBTdHJ1Y3R1
cmUqIHJlc3VsdCA9IHZpc2l0QnV0dGVyZmx5SW1wbCh2aXNpdG9yKTsKQEAgLTExMiw3ICsxMTQs
OCBAQCBBTFdBWVNfSU5MSU5FIFN0cnVjdHVyZSogSlNPYmplY3Q6OnZpc2l0CiAgICAgcmV0dXJu
IHJlc3VsdDsKIH0KIAotQUxXQVlTX0lOTElORSBTdHJ1Y3R1cmUqIEpTT2JqZWN0Ojp2aXNpdEJ1
dHRlcmZseUltcGwoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNp
dG9yPgorQUxXQVlTX0lOTElORSBTdHJ1Y3R1cmUqIEpTT2JqZWN0Ojp2aXNpdEJ1dHRlcmZseUlt
cGwoVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBWTSYgdm0gPSB2aXNpdG9yLnZtKCk7CiAgICAg
CkBAIC00MTIsMjQgKzQxNSwyMCBAQCBzaXplX3QgSlNPYmplY3Q6OmVzdGltYXRlZFNpemUoSlND
ZWxsKiBjCiAgICAgcmV0dXJuIEJhc2U6OmVzdGltYXRlZFNpemUoY2VsbCwgdm0pICsgYnV0dGVy
Zmx5T3V0T2ZMaW5lU2l6ZTsKIH0KIAotdm9pZCBKU09iamVjdDo6dmlzaXRDaGlsZHJlbihKU0Nl
bGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRv
cj4KK3ZvaWQgSlNPYmplY3Q6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRv
ciYgdmlzaXRvcikKIHsKICAgICBKU09iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU09iamVj
dCo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5m
bygpKTsKLSNpZiBBU1NFUlRfRU5BQkxFRAotICAgIGJvb2wgd2FzQ2hlY2tpbmdGb3JEZWZhdWx0
TWFya1Zpb2xhdGlvbiA9IHZpc2l0b3IubV9pc0NoZWNraW5nRm9yRGVmYXVsdE1hcmtWaW9sYXRp
b247Ci0gICAgdmlzaXRvci5tX2lzQ2hlY2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlvbiA9IGZh
bHNlOwotI2VuZGlmCi0gICAgCisgICAgdHlwZW5hbWUgVmlzaXRvcjo6RGVmYXVsdE1hcmtpbmdW
aW9sYXRpb25Bc3NlcnRpb25TY29wZSBhc3NlcnRpb25TY29wZSh2aXNpdG9yKTsKKwogICAgIEpT
Q2VsbDo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKLSAgICAKKwogICAgIHRo
aXNPYmplY3QtPnZpc2l0QnV0dGVyZmx5KHZpc2l0b3IpOwotICAgIAotI2lmIEFTU0VSVF9FTkFC
TEVECi0gICAgdmlzaXRvci5tX2lzQ2hlY2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlvbiA9IHdh
c0NoZWNraW5nRm9yRGVmYXVsdE1hcmtWaW9sYXRpb247Ci0jZW5kaWYKIH0KIAorREVGSU5FX0VY
UE9SVF9WSVNJVF9DSElMRFJFTihKU09iamVjdCk7CisKIHZvaWQgSlNPYmplY3Q6OmFuYWx5emVI
ZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFuYWx5emVyJiBhbmFseXplcikKIHsKICAgICBKU09iamVj
dCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU09iamVjdCo+KGNlbGwpOwpAQCAtNDY4LDE0ICs0Njcs
MTIgQEAgdm9pZCBKU09iamVjdDo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLAogICAgIH0KIH0K
IAotdm9pZCBKU0ZpbmFsT2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZp
c2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0ZpbmFs
T2JqZWN0Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3Ip
CiB7CiAgICAgSlNGaW5hbE9iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0ZpbmFsT2JqZWN0
Kj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZv
KCkpOwotI2lmIEFTU0VSVF9FTkFCTEVECi0gICAgYm9vbCB3YXNDaGVja2luZ0ZvckRlZmF1bHRN
YXJrVmlvbGF0aW9uID0gdmlzaXRvci5tX2lzQ2hlY2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlv
bjsKLSAgICB2aXNpdG9yLm1faXNDaGVja2luZ0ZvckRlZmF1bHRNYXJrVmlvbGF0aW9uID0gZmFs
c2U7Ci0jZW5kaWYKKyAgICB0eXBlbmFtZSBWaXNpdG9yOjpEZWZhdWx0TWFya2luZ1Zpb2xhdGlv
bkFzc2VydGlvblNjb3BlIGFzc2VydGlvblNjb3BlKHZpc2l0b3IpOwogICAgIAogICAgIEpTQ2Vs
bDo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKICAgICAKQEAgLTQ4MywxMiAr
NDgwLDEwIEBAIHZvaWQgSlNGaW5hbE9iamVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwKICAgICAg
ICAgaWYgKHVuc2lnbmVkIHN0b3JhZ2VTaXplID0gc3RydWN0dXJlLT5pbmxpbmVTaXplKCkpCiAg
ICAgICAgICAgICB2aXNpdG9yLmFwcGVuZFZhbHVlc0hpZGRlbih0aGlzT2JqZWN0LT5pbmxpbmVT
dG9yYWdlKCksIHN0b3JhZ2VTaXplKTsKICAgICB9Ci0gICAgCi0jaWYgQVNTRVJUX0VOQUJMRUQK
LSAgICB2aXNpdG9yLm1faXNDaGVja2luZ0ZvckRlZmF1bHRNYXJrVmlvbGF0aW9uID0gd2FzQ2hl
Y2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlvbjsKLSNlbmRpZgogfQogCitERUZJTkVfRVhQT1JU
X1ZJU0lUX0NISUxEUkVOKEpTRmluYWxPYmplY3QpOworCiBTdHJpbmcgSlNPYmplY3Q6OmNsYXNz
TmFtZShjb25zdCBKU09iamVjdCogb2JqZWN0LCBWTSYgdm0pCiB7CiAgICAgY29uc3QgQ2xhc3NJ
bmZvKiBpbmZvID0gb2JqZWN0LT5jbGFzc0luZm8odm0pOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU09iamVjdC5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEs
NyBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMSBIYXJyaSBQb3J0ZW4gKHBvcnRl
bkBrZGUub3JnKQogICogIENvcHlyaWdodCAoQykgMjAwMSBQZXRlciBLZWxseSAocG1rQHBvc3Qu
Y29tKQotICogIENvcHlyaWdodCAoQykgMjAwMy0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMTA4LDggKzEwOCw5IEBAIGNs
YXNzIEpTT2JqZWN0IDogcHVibGljIEpTQ2VsbCB7CiBwdWJsaWM6CiAgICAgdXNpbmcgQmFzZSA9
IEpTQ2VsbDsKIAorICAgIERFQ0xBUkVfRVhQT1JUX1ZJU0lUX0NISUxEUkVOOworCiAgICAgSlNf
RVhQT1JUX1BSSVZBVEUgc3RhdGljIHNpemVfdCBlc3RpbWF0ZWRTaXplKEpTQ2VsbCosIFZNJik7
Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwq
LCBTbG90VmlzaXRvciYpOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGFuYWx5
emVIZWFwKEpTQ2VsbCosIEhlYXBBbmFseXplciYpOwogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUg
c3RhdGljIFN0cmluZyBjbGFzc05hbWUoY29uc3QgSlNPYmplY3QqLCBWTSYpOwpAQCAtOTgyLDEx
ICs5ODMsMTEgQEAgcHJvdGVjdGVkOgogICAgIEpTT2JqZWN0KFZNJiwgU3RydWN0dXJlKiwgQnV0
dGVyZmx5KiA9IG51bGxwdHIpOwogICAgIAogICAgIC8vIFZpc2l0cyB0aGUgYnV0dGVyZmx5IHVu
bGVzcyB0aGVyZSBpcyBhIHJhY2UuIFJldHVybnMgdGhlIHN0cnVjdHVyZSBpZiB0aGVyZSB3YXMg
bm8gcmFjZS4KLSAgICBTdHJ1Y3R1cmUqIHZpc2l0QnV0dGVyZmx5KFNsb3RWaXNpdG9yJik7Cisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gU3RydWN0dXJlKiB2aXNpdEJ1dHRlcmZseShW
aXNpdG9yJik7CiAgICAgCi0gICAgU3RydWN0dXJlKiB2aXNpdEJ1dHRlcmZseUltcGwoU2xvdFZp
c2l0b3ImKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiBTdHJ1Y3R1cmUqIHZpc2l0
QnV0dGVyZmx5SW1wbChWaXNpdG9yJik7CiAgICAgCi0gICAgdm9pZCBtYXJrQXV4aWxpYXJ5QW5k
VmlzaXRPdXRPZkxpbmVQcm9wZXJ0aWVzKFNsb3RWaXNpdG9yJiwgQnV0dGVyZmx5KiwgU3RydWN0
dXJlKiwgUHJvcGVydHlPZmZzZXQgbWF4T2Zmc2V0KTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPiB2b2lkIG1hcmtBdXhpbGlhcnlBbmRWaXNpdE91dE9mTGluZVByb3BlcnRpZXMoVmlz
aXRvciYsIEJ1dHRlcmZseSosIFN0cnVjdHVyZSosIFByb3BlcnR5T2Zmc2V0IG1heE9mZnNldCk7
CiAKICAgICAvLyBDYWxsIHRoaXMgaWYgeW91IGtub3cgdGhhdCB0aGUgb2JqZWN0IGlzIGluIGEg
bW9kZSB3aGVyZSBpdCBoYXMgYXJyYXkKICAgICAvLyBzdG9yYWdlLiBUaGlzIHdpbGwgYXNzZXJ0
IG90aGVyd2lzZS4KQEAgLTExNzQsOCArMTE3NSw2IEBAIHByb3RlY3RlZDoKICAgICB9CiB9Owog
Ci1jbGFzcyBKU0ZpbmFsT2JqZWN0OwotCiAvLyBKU0ZpbmFsT2JqZWN0IGlzIGEgdHlwZSBvZiBK
U09iamVjdCB0aGF0IGNvbnRhaW5zIHN1ZmZpY2llbnQgaW50ZXJuYWwKIC8vIHN0b3JhZ2UgdG8g
ZnVsbHkgbWFrZSB1c2Ugb2YgdGhlIGNvbGxlY3RvciBjZWxsIGNvbnRhaW5pbmcgaXQuCiBjbGFz
cyBKU0ZpbmFsT2JqZWN0IGZpbmFsIDogcHVibGljIEpTT2JqZWN0IHsKQEAgLTEyMTQsMTUgKzEy
MTMsMTMgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGds
b2JhbE9iamVjdCwgcHJvdG90eXBlLCB0eXBlSW5mbygpLCBpbmZvKCksIGRlZmF1bHRJbmRleGlu
Z1R5cGUsIGlubGluZUNhcGFjaXR5KTsKICAgICB9CiAKLSAgICBKU19FWFBPUlRfUFJJVkFURSBz
dGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVD
TEFSRV9FWFBPUlRfVklTSVRfQ0hJTERSRU47CiAKICAgICBERUNMQVJFX0VYUE9SVF9JTkZPOwog
CiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CiAKLSAg
ICB2b2lkIHZpc2l0Q2hpbGRyZW5Db21tb24oU2xvdFZpc2l0b3ImKTsKLQogICAgIGV4cGxpY2l0
IEpTRmluYWxPYmplY3QoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgQnV0dGVyZmx5KiBi
dXR0ZXJmbHkpCiAgICAgICAgIDogSlNPYmplY3Qodm0sIHN0cnVjdHVyZSwgYnV0dGVyZmx5KQog
ICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvbWlzZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9taXNlLmNw
cAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQ
cm9taXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY3LDEzICs2NywxNiBAQCB2b2lkIEpTUHJv
bWlzZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQogICAgICAgICBCYXNlOjppbnRlcm5hbEZpZWxk
KGluZGV4KS5zZXQodm0sIHRoaXMsIHZhbHVlc1tpbmRleF0pOwogfQogCi12b2lkIEpTUHJvbWlz
ZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVt
cGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNQcm9taXNlOjp2aXNpdENoaWxkcmVuSW1w
bChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0byogdGhpc09iamVj
dCA9IGpzQ2FzdDxKU1Byb21pc2UqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVS
SVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2Jq
ZWN0LCB2aXNpdG9yKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTUHJvbWlzZSk7CisK
IGF1dG8gSlNQcm9taXNlOjpzdGF0dXMoVk0mKSBjb25zdCAtPiBTdGF0dXMKIHsKICAgICBKU1Zh
bHVlIHZhbHVlID0gaW50ZXJuYWxGaWVsZChGaWVsZDo6RmxhZ3MpLmdldCgpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9taXNlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9taXNlLmgJKHJldmlzaW9uIDI3MjgzMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvbWlzZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTk2LDcgKzk2LDcgQEAgcHVibGljOgogICAgIH07CiAgICAgc3RhdGljIERlZmVycmVkRGF0
YSBjcmVhdGVEZWZlcnJlZERhdGEoSlNHbG9iYWxPYmplY3QqLCBKU1Byb21pc2VDb25zdHJ1Y3Rv
ciopOwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRv
ciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKIHByb3RlY3RlZDoKICAgICBKU1By
b21pc2UoVk0mLCBTdHJ1Y3R1cmUqKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTUHJvcGVydHlOYW1lRW51bWVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmNwcAkocmV2aXNp
b24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTQtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTcwLDcgKzcwLDggQEAgdm9pZCBK
U1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmZpbmlzaENyZQogICAgIH0KIH0KIAotdm9pZCBKU1By
b3BlcnR5TmFtZUVudW1lcmF0b3I6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90Vmlz
aXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTUHJvcGVy
dHlOYW1lRW51bWVyYXRvcjo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9y
JiB2aXNpdG9yKQogewogICAgIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvciogdGhpc09iamVjdCA9
IGpzQ2FzdDxKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqPihjZWxsKTsKICAgICBBU1NFUlRfR0Nf
T0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC04Nyw2ICs4OCw4IEBAIHZv
aWQgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjp2aXNpdENoaWwKICAgICB9CiB9CiAKK0RFRklO
RV9WSVNJVF9DSElMRFJFTihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IpOworCiAvLyBGSVhNRTog
QXNzZXJ0IHRoYXQgcHJvcGVydGllcyByZXR1cm5lZCBieSBnZXRPd25Qcm9wZXJ0eU5hbWVzKCkg
YXJlIHJlcG9ydGVkIGVudW1lcmFibGUgYnkgZ2V0T3duUHJvcGVydHlTbG90KCkuCiAvLyBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE5OTI2CiB2b2lkIGdldEVudW1l
cmFibGVQcm9wZXJ0eU5hbWVzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTT2JqZWN0
KiBiYXNlLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgdWludDMyX3QmIGluZGV4
ZWRMZW5ndGgsIHVpbnQzMl90JiBzdHJ1Y3R1cmVQcm9wZXJ0eUNvdW50KQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVFbnVt
ZXJhdG9yLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTUHJvcGVydHlOYW1lRW51bWVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODQsNyAr
ODQsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yLCBtX3Byb3BlcnR5TmFtZXMpOwogICAgIH0KIAotICAgIHN0YXRpYyB2
b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJ
U0lUX0NISUxEUkVOOwogCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNF
eHRyYWN0b3I7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3h5LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3h5LmNw
cAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQ
cm94eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDExLTIwMTIsIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM1LDcgKzM1LDggQEAgU1RB
VElDX0FTU0VSVF9JU19UUklWSUFMTFlfREVTVFJVQ1RJQkxFKAogCiBjb25zdCBDbGFzc0luZm8g
SlNQcm94eTo6c19pbmZvID0geyAiSlNQcm94eSIsICZCYXNlOjpzX2luZm8sIG51bGxwdHIsIG51
bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNQcm94eSkgfTsKIAotdm9pZCBKU1Byb3h5Ojp2
aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0
ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1Byb3h5Ojp2aXNpdENoaWxkcmVuSW1wbChKU0Nl
bGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNQcm94eSogdGhpc09iamVjdCA9
IGpzQ2FzdDxKU1Byb3h5Kj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0
aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNDMsNiArNDQsOCBAQCB2b2lkIEpTUHJveHk6OnZpc2l0
Q2hpbGRyZW4oSlNDZWxsKiBjZWxsCiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV90
YXJnZXQpOwogfQogCitERUZJTkVfRVhQT1JUX1ZJU0lUX0NISUxEUkVOKEpTUHJveHkpOworCiB2
b2lkIEpTUHJveHk6OnNldFRhcmdldChWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QpCiB7CiAgICAgbV90YXJnZXQuc2V0KHZtLCB0aGlzLCBnbG9iYWxPYmplY3QpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm94eS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJveHkuaAkocmV2aXNpb24gMjcyODMwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm94eS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMS0yMDIwIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDIxIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtODUsNyArODUsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIG1fdGFyZ2V0LnNldCh2bSwg
dGhpcywgdGFyZ2V0KTsKICAgICB9CiAKLSAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9p
ZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9FWFBP
UlRfVklTSVRfQ0hJTERSRU47CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgU3RyaW5n
IGNsYXNzTmFtZShjb25zdCBKU09iamVjdCosIFZNJik7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUg
c3RhdGljIFN0cmluZyB0b1N0cmluZ05hbWUoY29uc3QgSlNPYmplY3QqLCBKU0dsb2JhbE9iamVj
dCopOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTY29wZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTY29wZS5jcHAJKHJl
dmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2NvcGUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMi0yMDIwIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMi0yMDIxIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzksNyArMzksOCBAQCBTVEFUSUNfQVNTRVJUX0lTX1RS
SVZJQUxMWV9ERVNUUlVDVElCTEUoCiAKIGNvbnN0IENsYXNzSW5mbyBKU1Njb3BlOjpzX2luZm8g
PSB7ICJTY29wZSIsICZCYXNlOjpzX2luZm8sIG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRI
T0RfVEFCTEUoSlNTY29wZSkgfTsKIAotdm9pZCBKU1Njb3BlOjp2aXNpdENoaWxkcmVuKEpTQ2Vs
bCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
Pgordm9pZCBKU1Njb3BlOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3Im
IHZpc2l0b3IpCiB7CiAgICAgSlNTY29wZSogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Njb3BlKj4o
Y2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkp
OwpAQCAtNDcsNiArNDgsOCBAQCB2b2lkIEpTU2NvcGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBj
ZWxsCiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9uZXh0KTsKIH0KIAorREVGSU5F
X1ZJU0lUX0NISUxEUkVOKEpTU2NvcGUpOworCiAvLyBSZXR1cm5zIHRydWUgaWYgd2UgZm91bmQg
ZW5vdWdoIGluZm9ybWF0aW9uIHRvIHRlcm1pbmF0ZSBvcHRpbWl6YXRpb24uCiBzdGF0aWMgaW5s
aW5lIGJvb2wgYWJzdHJhY3RBY2Nlc3MoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNT
Y29wZSogc2NvcGUsIGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBHZXRPclB1dCBnZXRPclB1dCwg
c2l6ZV90IGRlcHRoLCBib29sJiBuZWVkc1ZhckluamVjdGlvbkNoZWNrcywgUmVzb2x2ZU9wJiBv
cCwgSW5pdGlhbGl6YXRpb25Nb2RlIGluaXRpYWxpemF0aW9uTW9kZSkKIHsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2NvcGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Njb3BlLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2NvcGUuaAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxOSBBcHBsZSBJbmMuIEFs
bCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMSBBcHBsZSBJbmMu
IEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTY0LDcgKzY0LDcgQEAgcHVibGljOgogCiAgICAgc3RhdGljIHZvaWQgY29sbGVjdENsb3N1cmVW
YXJpYWJsZXNVbmRlclREWihKU1Njb3BlKiwgVERaRW52aXJvbm1lbnQmIHJlc3VsdCwgUHJpdmF0
ZU5hbWVFbnZpcm9ubWVudCYpOwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0Nl
bGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBi
b29sIGlzVmFyU2NvcGUoKTsKICAgICBib29sIGlzTGV4aWNhbFNjb3BlKCk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NlZ21lbnRlZFZh
cmlhYmxlT2JqZWN0LmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTYyLDcgKzYyLDggQEAgU2NvcGVPZmZzZXQgSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdDo6
YQogICAgIHJldHVybiBTY29wZU9mZnNldChvbGRTaXplKTsKIH0KIAotdm9pZCBKU1NlZ21lbnRl
ZFZhcmlhYmxlT2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3Im
IHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1NlZ21lbnRlZFZh
cmlhYmxlT2JqZWN0Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZp
c2l0b3IpCiB7CiAgICAgSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdCogdGhpc09iamVjdCA9IGpz
Q2FzdDxKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0Kj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09C
SkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNzUsNiArNzYsOCBAQCB2b2lk
IEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3Q6OnZpc2l0Q2hpCiAgICAgICAgIHZpc2l0b3IuYXBw
ZW5kSGlkZGVuKHRoaXNPYmplY3QtPm1fdmFyaWFibGVzW2ldKTsKIH0KIAorREVGSU5FX0VYUE9S
VF9WSVNJVF9DSElMRFJFTihKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0KTsKKwogdm9pZCBKU1Nl
Z21lbnRlZFZhcmlhYmxlT2JqZWN0OjphbmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhlYXBBbmFs
eXplciYgYW5hbHl6ZXIpCiB7CiAgICAgSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdCogdGhpc09i
amVjdCA9IGpzQ2FzdDxKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0Kj4oY2VsbCk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZWdtZW50ZWRW
YXJpYWJsZU9iamVjdC5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTkgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC04Niw3ICs4Niw3IEBAIHB1YmxpYzoKICAgICAvLyB0aGUgaW5kZXggb2YgdGhlIGZpcnN0IG9u
ZSBhZGRlZC4KICAgICBKU19FWFBPUlRfUFJJVkFURSBTY29wZU9mZnNldCBhZGRWYXJpYWJsZXMo
dW5zaWduZWQgbnVtYmVyT2ZWYXJpYWJsZXNUb0FkZCwgSlNWYWx1ZSk7CiAgICAgCi0gICAgSlNf
RVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90Vmlz
aXRvciYpOworICAgIERFQ0xBUkVfRVhQT1JUX1ZJU0lUX0NISUxEUkVOOwogICAgIEpTX0VYUE9S
VF9QUklWQVRFIHN0YXRpYyB2b2lkIGFuYWx5emVIZWFwKEpTQ2VsbCosIEhlYXBBbmFseXplciYp
OwogICAgIAogcHJvdGVjdGVkOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNTZXRJdGVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNTZXRJdGVyYXRvci5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTU2V0SXRlcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE3IEFwcGxlLCBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMSBBcHBsZSwgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC01NywxMyArNTcsMTYgQEAgdm9pZCBKU1NldEl0ZXJhdG9yOjpmaW5pc2hDcmVhdGlvbihWTSYg
dgogICAgICAgICBCYXNlOjppbnRlcm5hbEZpZWxkKGluZGV4KS5zZXQodm0sIHRoaXMsIHZhbHVl
c1tpbmRleF0pOwogfQogCi12b2lkIEpTU2V0SXRlcmF0b3I6OnZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+
Cit2b2lkIEpTU2V0SXRlcmF0b3I6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlz
aXRvciYgdmlzaXRvcikKIHsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTU2V0SXRl
cmF0b3IqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3Qs
IGluZm8oKSk7CiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsK
IH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTU2V0SXRlcmF0b3IpOworCiBKU1ZhbHVlIEpT
U2V0SXRlcmF0b3I6OmNyZWF0ZVBhaXIoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNW
YWx1ZSBrZXksIEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgYXJn
czsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2V0SXRlcmF0b3IuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NldEl0ZXJhdG9y
LmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
U2V0SXRlcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMsIDIwMTYgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDIxIEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEzMCw3ICsxMzAsNyBAQCBwcml2
YXRlOgogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBKU1Nl
dCosIEl0ZXJhdGlvbktpbmQpOwogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKICAgICBK
U19FWFBPUlRfUFJJVkFURSBKU1ZhbHVlIGNyZWF0ZVBhaXIoSlNHbG9iYWxPYmplY3QqLCBKU1Zh
bHVlLCBKU1ZhbHVlKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNs
b3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIH07CiBTVEFUSUNfQVNT
RVJUX0lTX1RSSVZJQUxMWV9ERVNUUlVDVElCTEUoSlNTZXRJdGVyYXRvcik7CiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5jcHAJKHJldmlzaW9uIDI3Mjgz
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDIg
SGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKICAqICBDb3B5cmlnaHQgKEMpIDIwMDEgUGV0
ZXIgS2VsbHkgKHBta0Bwb3N0LmNvbSkKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxOSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDA0LTIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAg
LTEwNSw3ICsxMDUsOCBAQCBzaXplX3QgSlNTdHJpbmc6OmVzdGltYXRlZFNpemUoSlNDZWxsKiBj
CiAgICAgcmV0dXJuIEJhc2U6OmVzdGltYXRlZFNpemUoY2VsbCwgdm0pICsgYml0d2lzZV9jYXN0
PFN0cmluZ0ltcGwqPihwb2ludGVyKS0+Y29zdER1cmluZ0dDKCk7CiB9CiAKLXZvaWQgSlNTdHJp
bmc6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3Rl
bXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTU3RyaW5nOjp2aXNpdENoaWxkcmVuSW1w
bChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNTdHJpbmcqIHRoaXNP
YmplY3QgPSBhc1N0cmluZyhjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRo
aXNPYmplY3QsIGluZm8oKSk7CkBAIC0xNDMsNiArMTQ0LDggQEAgdm9pZCBKU1N0cmluZzo6dmlz
aXRDaGlsZHJlbihKU0NlbGwqIGNlbAogICAgICAgICB2aXNpdG9yLnJlcG9ydEV4dHJhTWVtb3J5
VmlzaXRlZChpbXBsLT5jb3N0RHVyaW5nR0MoKSk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJF
TihKU1N0cmluZyk7CisKIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbWF4TGVuZ3RoRm9yT25T
dGFja1Jlc29sdmUgPSAyMDQ4OwogCiB2b2lkIEpTUm9wZVN0cmluZzo6cmVzb2x2ZVJvcGVJbnRl
cm5hbDgoTENoYXIqIGJ1ZmZlcikgY29uc3QKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTU3RyaW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNTdHJpbmcuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNTdHJpbmcuaAkod29ya2luZyBjb3B5KQpAQCAtMSw3ICsxLDcgQEAKIC8q
CiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDEgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9y
ZykKICAqICBDb3B5cmlnaHQgKEMpIDIwMDEgUGV0ZXIgS2VsbHkgKHBta0Bwb3N0LmNvbSkKLSAq
ICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIxNyw3ICsyMTcsNyBAQCBwdWJsaWM6CiAK
ICAgICBzdGF0aWMgdm9pZCBkdW1wVG9TdHJlYW0oY29uc3QgSlNDZWxsKiwgUHJpbnRTdHJlYW0m
KTsKICAgICBzdGF0aWMgc2l6ZV90IGVzdGltYXRlZFNpemUoSlNDZWxsKiwgVk0mKTsKLSAgICBz
dGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVD
TEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIEFMV0FZU19JTkxJTkUgYm9vbCBpc1JvcGUoKSBj
b25zdAogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5n
SXRlcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTU3RyaW5nSXRlcmF0b3IuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU1N0cmluZ0l0ZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTUgWXVzdWtlIFN1enVraSA8dXRh
dGFuZS50ZWFAZ21haWwuY29tPi4KLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTUxLDExICs1MSwxNCBAQCBKU1N0cmluZ0l0ZXJhdG9yKiBKU1N0cmluZ0l0ZXJhdG9yOjpjbG9u
CiAgICAgcmV0dXJuIGNsb25lOwogfQogCi12b2lkIEpTU3RyaW5nSXRlcmF0b3I6OnZpc2l0Q2hp
bGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVu
YW1lIFZpc2l0b3I+Cit2b2lkIEpTU3RyaW5nSXRlcmF0b3I6OnZpc2l0Q2hpbGRyZW5JbXBsKEpT
Q2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0g
anNDYXN0PEpTU3RyaW5nSXRlcmF0b3IqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lO
SEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlz
T2JqZWN0LCB2aXNpdG9yKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTU3RyaW5nSXRl
cmF0b3IpOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTU3RyaW5nSXRlcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU1N0cmluZ0l0ZXJhdG9yLmgJKHJldmlzaW9uIDI3MjgzMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nSXRlcmF0b3IuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTUgWXVzdWtl
IFN1enVraSA8dXRhdGFuZS50ZWFAZ21haWwuY29tPi4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTc5LDcgKzgwLDcgQEAgcHVibGljOgogICAgIEpTVmFsdWUgaW5kZXgoKSBjb25z
dCB7IHJldHVybiBpbnRlcm5hbEZpZWxkKEZpZWxkOjpJbmRleCkuZ2V0KCk7IH0KICAgICBKU1N0
cmluZ0l0ZXJhdG9yKiBjbG9uZShKU0dsb2JhbE9iamVjdCopOwogCi0gICAgc3RhdGljIHZvaWQg
dmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRf
Q0hJTERSRU47CiAKIHByaXZhdGU6CiAgICAgSlNTdHJpbmdJdGVyYXRvcihWTSYgdm0sIFN0cnVj
dHVyZSogc3RydWN0dXJlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNT
eW1ib2xUYWJsZU9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVjdC5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE5
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0y
MDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMzYsNyArMzYsOCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogY29uc3QgQ2xh
c3NJbmZvIEpTU3ltYm9sVGFibGVPYmplY3Q6OnNfaW5mbyA9IHsgIlN5bWJvbFRhYmxlT2JqZWN0
IiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShK
U1N5bWJvbFRhYmxlT2JqZWN0KSB9OwogCi12b2lkIEpTU3ltYm9sVGFibGVPYmplY3Q6OnZpc2l0
Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5
cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTU3ltYm9sVGFibGVPYmplY3Q6OnZpc2l0Q2hpbGRyZW5J
bXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU1N5bWJvbFRhYmxl
T2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTU3ltYm9sVGFibGVPYmplY3QqPihjZWxsKTsK
ICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC00
NCw2ICs0NSw4IEBAIHZvaWQgSlNTeW1ib2xUYWJsZU9iamVjdDo6dmlzaXRDaGlsZHJlbigKICAg
ICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX3N5bWJvbFRhYmxlKTsKIH0KIAorREVGSU5F
X1ZJU0lUX0NISUxEUkVOKEpTU3ltYm9sVGFibGVPYmplY3QpOworCiBib29sIEpTU3ltYm9sVGFi
bGVPYmplY3Q6OmRlbGV0ZVByb3BlcnR5KEpTQ2VsbCogY2VsbCwgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgRGVsZXRlUHJvcGVydHlTbG90
JiBzbG90KQogewogICAgIEpTU3ltYm9sVGFibGVPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8
SlNTeW1ib2xUYWJsZU9iamVjdCo+KGNlbGwpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuaAkocmV2aXNpb24gMjcyODMw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVjdC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
Mi0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtNzAsNyArNzAsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIG1f
c3ltYm9sVGFibGUuc2V0KHZtLCB0aGlzLCBzeW1ib2xUYWJsZSk7CiAgICAgfQogICAgIAotICAg
IHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBE
RUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogICAgIAogcHJpdmF0ZToKICAgICBXcml0ZUJhcnJpZXI8
U3ltYm9sVGFibGU+IG1fc3ltYm9sVGFibGU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU1dlYWtPYmplY3RSZWYuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTV2Vha09iamVjdFJlZi5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTV2Vha09iamVjdFJlZi5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxl
LCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMSBB
cHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0zOSw3ICszOSw4IEBAIHZvaWQgSlNXZWFrT2JqZWN0UmVmOjpmaW5pc2hDcmVh
dGlvbihWTSYKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CiB9CiAKLXZvaWQgSlNXZWFr
T2JqZWN0UmVmOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0
b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1dlYWtPYmplY3RSZWY6OnZp
c2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBh
dXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTV2Vha09iamVjdFJlZio+KGNlbGwpOwogICAgIEFT
U0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTUxLDYgKzUy
LDggQEAgdm9pZCBKU1dlYWtPYmplY3RSZWY6OnZpc2l0Q2hpbGRyZW4oSlNDZQogICAgIH0KIH0K
IAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTV2Vha09iamVjdFJlZik7CisKIHZvaWQgSlNXZWFr
T2JqZWN0UmVmOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxseShWTSYgdm0pCiB7CiAgICAgaWYgKG1f
dmFsdWUgJiYgIXZtLmhlYXAuaXNNYXJrZWQobV92YWx1ZS5nZXQoKSkpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1dlYWtPYmplY3RSZWYuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1dlYWtPYmplY3RSZWYuaAkocmV2aXNpb24g
MjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNXZWFrT2JqZWN0UmVm
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDE5IEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTktMjAyMSBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC02NSw3ICs2NSw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICB2
b2lkIGZpbmFsaXplVW5jb25kaXRpb25hbGx5KFZNJik7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRD
aGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERS
RU47CiAKIHByaXZhdGU6CiAgICAgSlNXZWFrT2JqZWN0UmVmKFZNJiB2bSwgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1dpdGhTY29w
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNXaXRo
U2NvcGUuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1dpdGhTY29wZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDE2IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDIxIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDEsNyArNDEsOCBAQCBK
U1dpdGhTY29wZSogSlNXaXRoU2NvcGU6OmNyZWF0ZSgKICAgICByZXR1cm4gd2l0aFNjb3BlOwog
fQogCi12b2lkIEpTV2l0aFNjb3BlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZp
c2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1dpdGhT
Y29wZTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQog
ewogICAgIEpTV2l0aFNjb3BlKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTV2l0aFNjb3BlKj4oY2Vs
bCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpA
QCAtNDksNiArNTAsOCBAQCB2b2lkIEpTV2l0aFNjb3BlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCog
CiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9vYmplY3QpOwogfQogCitERUZJTkVf
VklTSVRfQ0hJTERSRU4oSlNXaXRoU2NvcGUpOworCiBTdHJ1Y3R1cmUqIEpTV2l0aFNjb3BlOjpj
cmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1Zh
bHVlIHByb3RvKQogewogICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2Jq
ZWN0LCBwcm90bywgVHlwZUluZm8oV2l0aFNjb3BlVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZv
KCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNXaXRoU2NvcGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1dpdGhTY29wZS5o
CShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1dp
dGhTY29wZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMiwgMjAxNiBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTItMjAyMSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQzLDcgKzQzLDcgQEAgcHVibGljOgogCiAg
ICAgSlNPYmplY3QqIG9iamVjdCgpIHsgcmV0dXJuIG1fb2JqZWN0LmdldCgpOyB9CiAKLSAgICBz
dGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVD
TEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVj
dHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBwcm90byk7CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTV3JhcHBlck9iamVjdC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNXcmFwcGVyT2JqZWN0LmNwcAkocmV2
aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNXcmFwcGVy
T2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJp
Z2h0IChDKSAyMDA2IE1ha3MgT3Jsb3ZpY2gKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDks
IDIwMTIgQXBwbGUsIEluYy4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMSBBcHBsZSwgSW5j
LgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI5LDExICsyOSwxNCBAQCBuYW1lc3BhY2UgSlND
IHsKIAogU1RBVElDX0FTU0VSVF9JU19UUklWSUFMTFlfREVTVFJVQ1RJQkxFKEpTV3JhcHBlck9i
amVjdCk7CiAKLXZvaWQgSlNXcmFwcGVyT2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2Vs
bCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9p
ZCBKU1dyYXBwZXJPYmplY3Q6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRv
ciYgdmlzaXRvcikKIHsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTV3JhcHBlck9i
amVjdCo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwg
aW5mbygpKTsKICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwog
fQogCitERUZJTkVfRVhQT1JUX1ZJU0lUX0NISUxEUkVOKEpTV3JhcHBlck9iamVjdCk7CisKIH0g
Ly8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNX
cmFwcGVyT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNXcmFwcGVyT2JqZWN0LmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTV3JhcHBlck9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYg
KzEsNiBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDIwMDYgTWFrcyBPcmxvdmljaAotICogIENv
cHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTY0LDcgKzY0LDcgQEAgcHVi
bGljOgogcHJvdGVjdGVkOgogICAgIGV4cGxpY2l0IEpTV3JhcHBlck9iamVjdChWTSYsIFN0cnVj
dHVyZSopOwogCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJl
bihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfRVhQT1JUX1ZJU0lUX0NISUxE
UkVOOwogfTsKIAogaW5saW5lIEpTV3JhcHBlck9iamVjdDo6SlNXcmFwcGVyT2JqZWN0KFZNJiB2
bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9MYXp5Q2xhc3NTdHJ1Y3R1cmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0xhenlDbGFzc1N0cnVjdHVyZS5jcHAJKHJldmlzaW9uIDI3MjgzMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0xhenlDbGFzc1N0cnVjdHVyZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2
LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC03MiwxMiArNzIsMTYgQEAgdm9pZCBMYXp5Q2xhc3NTdHJ1Y3R1
cmU6OkluaXRpYWxpemVyOjpzZQogICAgIGNsYXNzU3RydWN0dXJlLm1fY29uc3RydWN0b3Iuc2V0
KHZtLCBnbG9iYWwsIGNvbnN0cnVjdG9yKTsKIH0KIAotdm9pZCBMYXp5Q2xhc3NTdHJ1Y3R1cmU6
OnZpc2l0KFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4K
K3ZvaWQgTGF6eUNsYXNzU3RydWN0dXJlOjp2aXNpdChWaXNpdG9yJiB2aXNpdG9yKQogewogICAg
IG1fc3RydWN0dXJlLnZpc2l0KHZpc2l0b3IpOwogICAgIHZpc2l0b3IuYXBwZW5kKG1fY29uc3Ry
dWN0b3IpOwogfQogCit0ZW1wbGF0ZSB2b2lkIExhenlDbGFzc1N0cnVjdHVyZTo6dmlzaXQoQWJz
dHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBMYXp5Q2xhc3NTdHJ1Y3R1cmU6OnZp
c2l0KFNsb3RWaXNpdG9yJik7CisKIHZvaWQgTGF6eUNsYXNzU3RydWN0dXJlOjpkdW1wKFByaW50
U3RyZWFtJiBvdXQpIGNvbnN0CiB7CiAgICAgb3V0LnByaW50KCI8c3RydWN0dXJlID0gIiwgbV9z
dHJ1Y3R1cmUsICIsIGNvbnN0cnVjdG9yID0gIiwgUmF3UG9pbnRlcihtX2NvbnN0cnVjdG9yLmdl
dCgpKSwgIj4iKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0xhenlDbGFz
c1N0cnVjdHVyZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0xhenlDbGFzc1N0cnVjdHVyZS5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9MYXp5Q2xhc3NTdHJ1Y3R1cmUuaAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMTcs
NyArMTE3LDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9jb25zdHJ1Y3Rvci5nZXQoKTsK
ICAgICB9CiAgICAgCi0gICAgdm9pZCB2aXNpdChTbG90VmlzaXRvciYpOworICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgdmlzaXQoVmlzaXRvciYpOwogICAgIAogICAgIHZvaWQg
ZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9MYXp5UHJvcGVydHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9MYXp5UHJvcGVydHkuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvTGF6eVByb3BlcnR5LmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTkgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0x
MDMsNyArMTAzLDcgQEAgcHVibGljOgogICAgIHZvaWQgc2V0TWF5QmVOdWxsKFZNJiwgY29uc3Qg
T3duZXJUeXBlKiBvd25lciwgRWxlbWVudFR5cGUqKTsKICAgICB2b2lkIHNldChWTSYsIGNvbnN0
IE93bmVyVHlwZSogb3duZXIsIEVsZW1lbnRUeXBlKik7CiAgICAgCi0gICAgdm9pZCB2aXNpdChT
bG90VmlzaXRvciYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgdmlzaXQo
VmlzaXRvciYpOwogICAgIAogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwogICAg
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTGF6eVByb3BlcnR5SW5saW5l
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0xhenlQcm9w
ZXJ0eUlubGluZXMuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvTGF6eVByb3BlcnR5SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY2LDcgKzY2LDgg
QEAgdm9pZCBMYXp5UHJvcGVydHk8T3duZXJUeXBlLCBFbGVtZW50VHlwZQogfQogCiB0ZW1wbGF0
ZTx0eXBlbmFtZSBPd25lclR5cGUsIHR5cGVuYW1lIEVsZW1lbnRUeXBlPgotdm9pZCBMYXp5UHJv
cGVydHk8T3duZXJUeXBlLCBFbGVtZW50VHlwZT46OnZpc2l0KFNsb3RWaXNpdG9yJiB2aXNpdG9y
KQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgTGF6eVByb3BlcnR5PE93bmVyVHlw
ZSwgRWxlbWVudFR5cGU+Ojp2aXNpdChWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGlmIChtX3Bv
aW50ZXIgJiYgIShtX3BvaW50ZXIgJiBsYXp5VGFnKSkKICAgICAgICAgdmlzaXRvci5hcHBlbmRV
bmJhcnJpZXJlZChiaXR3aXNlX2Nhc3Q8RWxlbWVudFR5cGUqPihtX3BvaW50ZXIpKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01vZHVsZVByb2dyYW1FeGVjdXRhYmxlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Nb2R1bGVQcm9n
cmFtRXhlY3V0YWJsZS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL01vZHVsZVByb2dyYW1FeGVjdXRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAsIDIwMTMsIDIw
MTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDktMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTc5LDcgKzc5LDggQEAgYXV0byBNb2R1bGVQcm9ncmFtRXhl
Y3V0YWJsZTo6ZW5zdXJlVGVtcAogICAgIHJldHVybiBlbnN1cmVUZW1wbGF0ZU9iamVjdE1hcElt
cGwobV90ZW1wbGF0ZU9iamVjdE1hcCk7CiB9CiAKLXZvaWQgTW9kdWxlUHJvZ3JhbUV4ZWN1dGFi
bGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3Rl
bXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIE1vZHVsZVByb2dyYW1FeGVjdXRhYmxlOjp2
aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAg
TW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8TW9kdWxlUHJvZ3Jh
bUV4ZWN1dGFibGUqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNP
YmplY3QsIGluZm8oKSk7CkBAIC05NCw0ICs5NSw2IEBAIHZvaWQgTW9kdWxlUHJvZ3JhbUV4ZWN1
dGFibGU6OnZpc2l0Q2hpbGQKICAgICB9CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihNb2R1
bGVQcm9ncmFtRXhlY3V0YWJsZSk7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Nb2R1bGVQcm9ncmFtRXhlY3V0
YWJsZS5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9Nb2R1bGVQcm9ncmFtRXhlY3V0YWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOS0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNzcsNyArNzcs
NyBAQCBwcml2YXRlOgogCiAgICAgTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUoSlNHbG9iYWxPYmpl
Y3QqLCBjb25zdCBTb3VyY2VDb2RlJik7CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVu
KEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAog
ICAgIFdyaXRlQmFycmllcjxVbmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2s+IG1fdW5saW5r
ZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrOwogICAgIFdyaXRlQmFycmllcjxTeW1ib2xUYWJsZT4g
bV9tb2R1bGVFbnZpcm9ubWVudFN5bWJvbFRhYmxlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMS0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTU4LDYg
KzU1OCw5IEBAIHZvaWQgT3B0aW9uczo6cmVjb21wdXRlRGVwZW5kZW50T3B0aW9ucygKIAogICAg
IGlmIChPcHRpb25zOjp1c2VQcml2YXRlU3RhdGljQ2xhc3NGaWVsZHMoKSkKICAgICAgICAgT3B0
aW9uczo6dXNlUHJpdmF0ZUNsYXNzRmllbGRzKCkgPSB0cnVlOworCisgICAgaWYgKE9wdGlvbnM6
OnZlcmJvc2VWZXJpZnlHQygpKQorICAgICAgICBPcHRpb25zOjp2ZXJpZnlHQygpID0gdHJ1ZTsK
IH0KIAogaW5saW5lIHZvaWQqIE9wdGlvbnM6OmFkZHJlc3NPZk9wdGlvbihPcHRpb25zOjpJRCBp
ZCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaAko
cmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9u
c0xpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMzY5LDYgKzM2OSw4IEBAIEpTX0VYUE9SVF9QUklW
QVRFIGJvb2wgY2FuVXNlSklUQ2FnZSgpOwogICAgIHYoQm9vbCwgYWx3YXlzR2VuZXJhdGVQQ1Rv
Q29kZU9yaWdpbk1hcCwgZmFsc2UsIE5vcm1hbCwgIlRoaXMgd2lsbCBtYWtlIHN1cmUgd2UgYWx3
YXlzIGdlbmVyYXRlIGEgUENUb0NvZGVPcmlnaW5NYXAgZm9yIEpJVGVkIGNvZGUuIikgXAogICAg
IFwKICAgICB2KERvdWJsZSwgcmFuZG9tSW50ZWdyaXR5QXVkaXRSYXRlLCAwLjA1LCBOb3JtYWws
ICJQcm9iYWJpbGl0eSBvZiByYW5kb20gaW50ZWdyaXR5IGF1ZGl0cyBbMC4wIC0gMS4wXSIpIFwK
KyAgICB2KEJvb2wsIHZlcmlmeUdDLCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCisgICAgdihC
b29sLCB2ZXJib3NlVmVyaWZ5R0MsIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KEJv
b2wsIHZlcmlmeUhlYXAsIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KFVuc2lnbmVk
LCBudW1iZXJPZkdDQ3ljbGVzVG9SZWNvcmRGb3JWZXJpZmljYXRpb24sIDMsIE5vcm1hbCwgbnVs
bHB0cikgXAogICAgIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb2dy
YW1FeGVjdXRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9Qcm9ncmFtRXhlY3V0YWJsZS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb2dyYW1FeGVjdXRhYmxlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxOSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAyMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTIwOCw3ICsyMDgsOCBAQCBhdXRvIFByb2dyYW1FeGVjdXRhYmxlOjplbnN1cmVUZW1w
bGF0ZU9iCiAgICAgcmV0dXJuIGVuc3VyZVRlbXBsYXRlT2JqZWN0TWFwSW1wbChtX3RlbXBsYXRl
T2JqZWN0TWFwKTsKIH0KIAotdm9pZCBQcm9ncmFtRXhlY3V0YWJsZTo6dmlzaXRDaGlsZHJlbihK
U0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlz
aXRvcj4KK3ZvaWQgUHJvZ3JhbUV4ZWN1dGFibGU6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCog
Y2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBQcm9ncmFtRXhlY3V0YWJsZSogdGhpc09i
amVjdCA9IGpzQ2FzdDxQcm9ncmFtRXhlY3V0YWJsZSo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19P
QkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTIyMiw0ICsyMjMsNiBAQCB2
b2lkIFByb2dyYW1FeGVjdXRhYmxlOjp2aXNpdENoaWxkcmVuKEpTCiAgICAgfQogfQogCitERUZJ
TkVfVklTSVRfQ0hJTERSRU4oUHJvZ3JhbUV4ZWN1dGFibGUpOworCiB9IC8vIG5hbWVzcGFjZSBK
U0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb2dyYW1FeGVjdXRhYmxl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvZ3JhbUV4
ZWN1dGFibGUuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvUHJvZ3JhbUV4ZWN1dGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTgxLDcgKzgxLDcg
QEAgcHJpdmF0ZToKIAogICAgIFByb2dyYW1FeGVjdXRhYmxlKEpTR2xvYmFsT2JqZWN0KiwgY29u
c3QgU291cmNlQ29kZSYpOwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwq
LCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBXcml0
ZUJhcnJpZXI8VW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrPiBtX3VubGlua2VkUHJvZ3JhbUNvZGVC
bG9jazsKICAgICBXcml0ZUJhcnJpZXI8RXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZT4gbV9wcm9n
cmFtQ29kZUJsb2NrOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVy
dHlNYXBIYXNoVGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9Qcm9wZXJ0eU1hcEhhc2hUYWJsZS5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eU1hcEhhc2hUYWJsZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxOSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDA0LTIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAg
LTEzMyw3ICsxMzMsNyBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVl
ZHNEZXN0cnVjdGlvbiA9IHRydWU7CiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsK
LSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7Cisg
ICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIERFQ0xBUkVfRVhQT1JUX0lORk87CiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5VGFibGUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5VGFibGUu
Y3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Q
cm9wZXJ0eVRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMTgsNyArMTE4LDggQEAgdm9p
ZCBQcm9wZXJ0eVRhYmxlOjpmaW5pc2hDcmVhdGlvbihWTSYgdgogICAgIHZtLmhlYXAucmVwb3J0
RXh0cmFNZW1vcnlBbGxvY2F0ZWQoZGF0YVNpemUoKSk7CiB9CiAKLXZvaWQgUHJvcGVydHlUYWJs
ZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVt
cGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgUHJvcGVydHlUYWJsZTo6dmlzaXRDaGlsZHJl
bkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGF1dG8qIHRoaXNP
YmplY3QgPSBqc0Nhc3Q8UHJvcGVydHlUYWJsZSo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpF
Q1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTEyNiw2ICsxMjcsOCBAQCB2b2lk
IFByb3BlcnR5VGFibGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsCiAgICAgdmlzaXRvci5yZXBvcnRF
eHRyYU1lbW9yeVZpc2l0ZWQodGhpc09iamVjdC0+ZGF0YVNpemUoKSk7CiB9CiAKK0RFRklORV9W
SVNJVF9DSElMRFJFTihQcm9wZXJ0eVRhYmxlKTsKKwogdm9pZCBQcm9wZXJ0eVRhYmxlOjpkZXN0
cm95KEpTQ2VsbCogY2VsbCkKIHsKICAgICBzdGF0aWNfY2FzdDxQcm9wZXJ0eVRhYmxlKj4oY2Vs
bCktPlByb3BlcnR5VGFibGU6On5Qcm9wZXJ0eVRhYmxlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9Qcm94eU9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJveHlPYmplY3QuY3BwCShyZXZpc2lvbiAyNzI4MzApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm94eU9iamVjdC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjAgQXBw
bGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjEg
QXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0xMTU4LDcgKzExNTgsOCBAQCBib29sIFByb3h5T2JqZWN0Ojppc1Jldm9rZWQo
KSBjb25zdAogICAgIHJldHVybiBoYW5kbGVyKCkuaXNOdWxsKCk7CiB9CiAKLXZvaWQgUHJveHlP
YmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikK
K3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFByb3h5T2JqZWN0Ojp2aXNpdENoaWxk
cmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgUHJveHlPYmpl
Y3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8UHJveHlPYmplY3QqPihjZWxsKTsKICAgICBBU1NFUlRf
R0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC0xMTY4LDQgKzExNjks
NiBAQCB2b2lkIFByb3h5T2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogCiAgICAgdmlzaXRv
ci5hcHBlbmQodGhpc09iamVjdC0+bV9oYW5kbGVyKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxE
UkVOKFByb3h5T2JqZWN0KTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9Qcm94eU9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3h5T2JqZWN0LmgJKHJldmlzaW9uIDI3MjgzMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3h5T2JqZWN0LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIxIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtOTEsNyArOTEsNyBAQCBwcml2YXRlOgogICAgIHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5
TmFtZXMoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZUFycmF5JiwgRG9u
dEVudW1Qcm9wZXJ0aWVzTW9kZSk7CiAgICAgc3RhdGljIGJvb2wgc2V0UHJvdG90eXBlKEpTT2Jq
ZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlIHByb3RvdHlwZSwgYm9vbCBzaG91bGRUaHJv
d0lmQ2FudFNldCk7CiAgICAgc3RhdGljIEpTVmFsdWUgZ2V0UHJvdG90eXBlKEpTT2JqZWN0Kiwg
SlNHbG9iYWxPYmplY3QqKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCos
IFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIGJvb2wg
Z2V0T3duUHJvcGVydHlTbG90Q29tbW9uKEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBQ
cm9wZXJ0eVNsb3QmKTsKICAgICBib29sIHBlcmZvcm1JbnRlcm5hbE1ldGhvZEdldE93blByb3Bl
cnR5KEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3h5UmV2b2tlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm94eVJldm9rZS5jcHAJKHJldmlz
aW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3h5UmV2b2tl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTYgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC02OSw3ICs2OSw4IEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElP
TihwZXJmb3JtUHJveHlSZXYKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpOwogfQogCi12b2lkIFByb3h5UmV2b2tlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwg
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBQ
cm94eVJldm9rZTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNp
dG9yKQogewogICAgIFByb3h5UmV2b2tlKiB0aGlzT2JqZWN0ID0ganNDYXN0PFByb3h5UmV2b2tl
Kj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZv
KCkpOwpAQCAtNzgsNCArNzksNiBAQCB2b2lkIFByb3h5UmV2b2tlOjp2aXNpdENoaWxkcmVuKEpT
Q2VsbCogCiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9wcm94eSk7CiB9CiAKK0RF
RklORV9WSVNJVF9DSElMRFJFTihQcm94eVJldm9rZSk7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJveHlSZXZva2UuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm94eVJldm9rZS5oCShyZXZp
c2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm94eVJldm9r
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxNi0yMDE5IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNi0yMDIxIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTIsNyArNTIsNyBAQCBwdWJsaWM6CiAgICAgfQogCiAg
ICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIFByb3h5T2JqZWN0Kik7Ci0gICAgc3RhdGljIHZv
aWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklT
SVRfQ0hJTERSRU47CiAgICAgSlNWYWx1ZSBwcm94eSgpIHsgcmV0dXJuIG1fcHJveHkuZ2V0KCk7
IH0KICAgICB2b2lkIHNldFByb3h5VG9OdWxsKFZNJiB2bSkgeyByZXR1cm4gbV9wcm94eS5zZXQo
dm0sIHRoaXMsIGpzTnVsbCgpKTsgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9SZWdFeHBDYWNoZWRSZXN1bHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1JlZ0V4cENhY2hlZFJlc3VsdC5jcHAJKHJldmlzaW9uIDI3MjgzMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENhY2hlZFJlc3VsdC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEy
LCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMzEsNyArMzEsOCBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAot
dm9pZCBSZWdFeHBDYWNoZWRSZXN1bHQ6OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJiB2aXNp
dG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgUmVnRXhwQ2FjaGVkUmVzdWx0
Ojp2aXNpdEFnZ3JlZ2F0ZShWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHZpc2l0b3IuYXBwZW5k
KG1fbGFzdElucHV0KTsKICAgICB2aXNpdG9yLmFwcGVuZChtX2xhc3RSZWdFeHApOwpAQCAtNDMs
NiArNDQsOSBAQCB2b2lkIFJlZ0V4cENhY2hlZFJlc3VsdDo6dmlzaXRBZ2dyZWdhdGUoCiAgICAg
fQogfQogCit0ZW1wbGF0ZSB2b2lkIFJlZ0V4cENhY2hlZFJlc3VsdDo6dmlzaXRBZ2dyZWdhdGUo
QWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBSZWdFeHBDYWNoZWRSZXN1bHQ6
OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJik7CisKIEpTQXJyYXkqIFJlZ0V4cENhY2hlZFJl
c3VsdDo6bGFzdFJlc3VsdChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU09iamVjdCog
b3duZXIpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwQ2FjaGVkUmVzdWx0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwQ2FjaGVkUmVzdWx0LmgJKHJl
dmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENh
Y2hlZFJlc3VsdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMiwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTItMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY1LDcgKzY1LDcgQEAgcHVibGljOgog
ICAgICAgICByZXR1cm4gbV9yZWlmaWVkID8gbV9yZWlmaWVkSW5wdXQuZ2V0KCkgOiBtX2xhc3RJ
bnB1dC5nZXQoKTsKICAgICB9CiAKLSAgICB2b2lkIHZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9y
Jik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCB2aXNpdEFnZ3JlZ2F0ZShW
aXNpdG9yJik7CiAKICAgICAvLyBtX2xhc3RSZWdFeHAgd291bGQgYmUgbnVsbHB0ciB3aGVuIFJl
Z0V4cENhY2hlZFJlc3VsdCBpcyBub3QgcmVpZmllZC4KICAgICAvLyBJZiB3ZSBmaW5kIG1fbGFz
dFJlZ0V4cCBpcyBudWxscHRyLCBpdCBtZWFucyB0aGlzIHNob3VsZCBob2xkIHRoZSBlbXB0eSBS
ZWdFeHAuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBHbG9iYWxE
YXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdF
eHBHbG9iYWxEYXRhLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvUmVnRXhwR2xvYmFsRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBS
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOS0yMDIxIEFwcGxlIEluYy4gQWxsIFJpZ2h0
cyBSZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzAsMTEgKzMw
LDE1IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi12b2lkIFJlZ0V4cEdsb2JhbERhdGE6OnZpc2l0
QWdncmVnYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRv
cj4KK3ZvaWQgUmVnRXhwR2xvYmFsRGF0YTo6dmlzaXRBZ2dyZWdhdGUoVmlzaXRvciYgdmlzaXRv
cikKIHsKICAgICBtX2NhY2hlZFJlc3VsdC52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKIH0KIAor
dGVtcGxhdGUgdm9pZCBSZWdFeHBHbG9iYWxEYXRhOjp2aXNpdEFnZ3JlZ2F0ZShBYnN0cmFjdFNs
b3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIFJlZ0V4cEdsb2JhbERhdGE6OnZpc2l0QWdncmVn
YXRlKFNsb3RWaXNpdG9yJik7CisKIEpTVmFsdWUgUmVnRXhwR2xvYmFsRGF0YTo6Z2V0QmFja3Jl
ZihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCB1bnNpZ25lZCBpKQogewogICAgIFZNJiB2
bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1JlZ0V4cEdsb2JhbERhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9SZWdFeHBHbG9iYWxEYXRhLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cEdsb2JhbERhdGEuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBB
bGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE5LTIwMjEgQXBwbGUgSW5j
LiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC00MSw3ICs0MSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldElucHV0KEpTR2xvYmFsT2JqZWN0
KiwgSlNTdHJpbmcqKTsKICAgICBKU1N0cmluZyogaW5wdXQoKSB7IHJldHVybiBtX2NhY2hlZFJl
c3VsdC5pbnB1dCgpOyB9CiAKLSAgICB2b2lkIHZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJik7
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCB2aXNpdEFnZ3JlZ2F0ZShWaXNp
dG9yJik7CiAKICAgICBKU1ZhbHVlIGdldEJhY2tyZWYoSlNHbG9iYWxPYmplY3QqLCB1bnNpZ25l
ZCk7CiAgICAgSlNWYWx1ZSBnZXRMYXN0UGFyZW4oSlNHbG9iYWxPYmplY3QqKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE9iamVjdC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0LmNwcAkocmV2aXNp
b24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChD
KSAxOTk5LTIwMDAgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKLSAqICBDb3B5cmlnaHQg
KEMpIDIwMDMtMjAxOSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiAgQ29weXJp
Z2h0IChDKSAyMDAzLTIwMjEgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAq
ICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBH
ZW5lcmFsIFB1YmxpYwpAQCAtNDYsNyArNDYsOCBAQCB2b2lkIFJlZ0V4cE9iamVjdDo6ZmluaXNo
Q3JlYXRpb24oVk0mIHZtCiAgICAgQVNTRVJUKHR5cGUoKSA9PSBSZWdFeHBPYmplY3RUeXBlKTsK
IH0KIAotdm9pZCBSZWdFeHBPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90
VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFJlZ0V4
cE9iamVjdDo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9y
KQogewogICAgIFJlZ0V4cE9iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxSZWdFeHBPYmplY3Qq
PihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8o
KSk7CkBAIC01NSw2ICs1Niw4IEBAIHZvaWQgUmVnRXhwT2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpT
Q2VsbCoKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2xhc3RJbmRleCk7CiB9CiAK
K0RFRklORV9WSVNJVF9DSElMRFJFTihSZWdFeHBPYmplY3QpOworCiBib29sIFJlZ0V4cE9iamVj
dDo6Z2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiBvYmplY3QsIEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xv
dCkKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBPYmplY3QuaAkocmV2aXNpb24gMjcyODMwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAwIEhh
cnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMTkg
QXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwMy0y
MDIxIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMK
QEAgLTEzMyw3ICsxMzMsNyBAQCBwcml2YXRlOgogICAgIEpTX0VYUE9SVF9QUklWQVRFIFJlZ0V4
cE9iamVjdChWTSYsIFN0cnVjdHVyZSosIFJlZ0V4cCopOwogICAgIEpTX0VYUE9SVF9QUklWQVRF
IHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwog
CiAgICAgYm9vbCBsYXN0SW5kZXhJc1dyaXRhYmxlKCkgY29uc3QKICAgICB7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TYW1wbGluZ1Byb2ZpbGVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TYW1wbGluZ1Byb2ZpbGVyLmNwcAko
cmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2FtcGxp
bmdQcm9maWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY1Miw3ICs2NTIsNyBAQCB2b2lkIFNh
bXBsaW5nUHJvZmlsZXI6OnByb2Nlc3NVbnZlcmlmaWVkCiAgICAgbV91bnByb2Nlc3NlZFN0YWNr
VHJhY2VzLmNsZWFyKCk7CiB9CiAKLXZvaWQgU2FtcGxpbmdQcm9maWxlcjo6dmlzaXQoU2xvdFZp
c2l0b3ImIHZpc2l0b3IpCit2b2lkIFNhbXBsaW5nUHJvZmlsZXI6OnZpc2l0KEFic3RyYWN0U2xv
dFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQobV9sb2NrLmlzTG9ja2Vk
KCkpOwogICAgIGZvciAoSlNDZWxsKiBjZWxsIDogbV9saXZlQ2VsbFBvaW50ZXJzKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NhbXBsaW5nUHJvZmlsZXIuaAko
cmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2FtcGxp
bmdQcm9maWxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE3MSw3ICsxNzEsNyBAQCBwdWJsaWM6CiAgICAg
dm9pZCBub3RpY2VKU0xvY2tBY3F1aXNpdGlvbigpOwogICAgIHZvaWQgbm90aWNlVk1FbnRyeSgp
OwogICAgIHZvaWQgc2h1dGRvd24oKTsKLSAgICB2b2lkIHZpc2l0KFNsb3RWaXNpdG9yJik7Cisg
ICAgdm9pZCB2aXNpdChBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAgICAgTG9jayYgZ2V0TG9jaygp
IHsgcmV0dXJuIG1fbG9jazsgfQogICAgIHZvaWQgc2V0VGltaW5nSW50ZXJ2YWwoU2Vjb25kcyBp
bnRlcnZhbCkgeyBtX3RpbWluZ0ludGVydmFsID0gaW50ZXJ2YWw7IH0KICAgICBKU19FWFBPUlRf
UFJJVkFURSB2b2lkIHN0YXJ0KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TY29wZWRBcmd1bWVudHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1Njb3BlZEFyZ3VtZW50cy5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlZEFyZ3VtZW50cy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTggQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC05OCw3ICs5OCw4IEBAIFNjb3BlZEFyZ3VtZW50cyogU2NvcGVkQXJndW1lbnRzOjpj
cmVhdGUKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi12b2lkIFNjb3BlZEFyZ3VtZW50czo6dmlz
aXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8
dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgU2NvcGVkQXJndW1lbnRzOjp2aXNpdENoaWxkcmVuSW1w
bChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgU2NvcGVkQXJndW1lbnRz
KiB0aGlzT2JqZWN0ID0gc3RhdGljX2Nhc3Q8U2NvcGVkQXJndW1lbnRzKj4oY2VsbCk7CiAgICAg
QVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtMTE1LDYg
KzExNiw4IEBAIHZvaWQgU2NvcGVkQXJndW1lbnRzOjp2aXNpdENoaWxkcmVuKEpTQ2UKICAgICB9
CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihTY29wZWRBcmd1bWVudHMpOworCiBTdHJ1Y3R1
cmUqIFNjb3BlZEFyZ3VtZW50czo6Y3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCiB7CiAgICAgcmV0dXJuIFN0cnVj
dHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oU2NvcGVk
QXJndW1lbnRzVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVkQXJndW1lbnRzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVkQXJndW1lbnRzLmgJKHJldmlzaW9uIDI3
MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlZEFyZ3VtZW50cy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
NS0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtNjMsOSArNjMsOSBAQCBwdWJsaWM6CiAgICAgCiAgICAgLy8g
Q3JlYXRlcyBhbiBhcmd1bWVudHMgb2JqZWN0IGJ5IGNvcHlpbmcgdGhlIGFyZ3VtZW50cyBmcm9t
IGEgd2VsbC1kZWZpbmVkIHN0YWNrIGxvY2F0aW9uLgogICAgIHN0YXRpYyBTY29wZWRBcmd1bWVu
dHMqIGNyZWF0ZUJ5Q29weWluZ0Zyb20oVk0mLCBTdHJ1Y3R1cmUqLCBSZWdpc3RlciogYXJndW1l
bnRzU3RhcnQsIHVuc2lnbmVkIHRvdGFsTGVuZ3RoLCBKU0Z1bmN0aW9uKiBjYWxsZWUsIFNjb3Bl
ZEFyZ3VtZW50c1RhYmxlKiwgSlNMZXhpY2FsRW52aXJvbm1lbnQqKTsKLSAgICAKLSAgICBzdGF0
aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7Ci0gICAgCisKKyAg
ICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOworCiAgICAgdWludDMyX3QgaW50ZXJuYWxMZW5ndGgo
KSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJuIG1fdG90YWxMZW5ndGg7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2ltcGxlVHlwZWRB
cnJheUNvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtNjIsNyArNjIsNyBAQCBib29sIFNpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyOjpp
c0F0b21pCiAgICAgcmV0dXJuIG1fYWxsb3dBdG9taWNzV2FpdDsKIH0KIAotYm9vbCBTaW1wbGVU
eXBlZEFycmF5Q29udHJvbGxlcjo6SlNBcnJheUJ1ZmZlck93bmVyOjppc1JlYWNoYWJsZUZyb21P
cGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIEpTQzo6
U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCitib29sIFNpbXBsZVR5
cGVkQXJyYXlDb250cm9sbGVyOjpKU0FycmF5QnVmZmVyT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9w
YXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgSlNDOjpB
YnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQogewogICAg
IGlmIChVTkxJS0VMWShyZWFzb24pKQogICAgICAgICAqcmVhc29uID0gIkpTQXJyYXlCdWZmZXIg
aXMgb3BhcXVlIHJvb3QiOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2lt
cGxlVHlwZWRBcnJheUNvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlci5oCShyZXZpc2lvbiAyNzI4
MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TaW1wbGVUeXBlZEFycmF5Q29u
dHJvbGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU4LDcgKzU4LDcgQEAgcHVibGljOgogcHJpdmF0ZToK
ICAgICBjbGFzcyBKU0FycmF5QnVmZmVyT3duZXIgZmluYWwgOiBwdWJsaWMgV2Vha0hhbmRsZU93
bmVyIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIGJvb2wgaXNSZWFjaGFibGVGcm9tT3BhcXVlUm9v
dHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCwgU2xvdFZpc2l0b3Im
LCBjb25zdCBjaGFyKiogcmVhc29uKSBmaW5hbDsKKyAgICAgICAgYm9vbCBpc1JlYWNoYWJsZUZy
b21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0LCBB
YnN0cmFjdFNsb3RWaXNpdG9yJiwgY29uc3QgY2hhcioqIHJlYXNvbikgZmluYWw7CiAgICAgICAg
IHZvaWQgZmluYWxpemUoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCkg
ZmluYWw7CiAgICAgfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU21h
bGxTdHJpbmdzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TbWFsbFN0cmluZ3MuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TbWFsbFN0cmluZ3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAxMCBBcHBsZSBJbmMuIEFsbCBSaWdo
dHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAyMSBBcHBsZSBJbmMuIEFsbCBS
aWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY2LDcg
KzY2LDcgQEAgdm9pZCBTbWFsbFN0cmluZ3M6OmluaXRpYWxpemVDb21tb25TdHJpbgogICAgIHNl
dElzSW5pdGlhbGl6ZWQodHJ1ZSk7CiB9CiAKLXZvaWQgU21hbGxTdHJpbmdzOjp2aXNpdFN0cm9u
Z1JlZmVyZW5jZXMoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIFNtYWxsU3RyaW5nczo6dmlz
aXRTdHJvbmdSZWZlcmVuY2VzKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAg
bV9uZWVkc1RvQmVWaXNpdGVkID0gZmFsc2U7CiAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJl
ZChtX2VtcHR5U3RyaW5nKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Nt
YWxsU3RyaW5ncy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1NtYWxsU3RyaW5ncy5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TbWFsbFN0cmluZ3MuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxOSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAyMSBBcHBsZSBJbmMuIEFsbCBSaWdodHMg
UmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ5LDkgKzQ5LDkg
QEAgY2xhc3MgU3RyaW5nSW1wbDsKIAogbmFtZXNwYWNlIEpTQyB7CiAKK2NsYXNzIEFic3RyYWN0
U2xvdFZpc2l0b3I7CiBjbGFzcyBWTTsKIGNsYXNzIEpTU3RyaW5nOwotY2xhc3MgU2xvdFZpc2l0
b3I7CiAKIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbWF4U2luZ2xlQ2hhcmFjdGVyU3RyaW5n
ID0gMHhGRjsKIApAQCAtNzgsNyArNzgsNyBAQCBwdWJsaWM6CiAgICAgSlNTdHJpbmcqKiBzaW5n
bGVDaGFyYWN0ZXJTdHJpbmdzKCkgeyByZXR1cm4gJm1fc2luZ2xlQ2hhcmFjdGVyU3RyaW5nc1sw
XTsgfQogCiAgICAgdm9pZCBpbml0aWFsaXplQ29tbW9uU3RyaW5ncyhWTSYpOwotICAgIHZvaWQg
dmlzaXRTdHJvbmdSZWZlcmVuY2VzKFNsb3RWaXNpdG9yJik7CisgICAgdm9pZCB2aXNpdFN0cm9u
Z1JlZmVyZW5jZXMoQWJzdHJhY3RTbG90VmlzaXRvciYpOwogCiAjZGVmaW5lIEpTQ19DT01NT05f
U1RSSU5HU19BQ0NFU1NPUl9ERUZJTklUSU9OKG5hbWUpIFwKICAgICBKU1N0cmluZyogbmFtZSMj
U3RyaW5nKCkgY29uc3QgICAgICAgICAgICAgICAgICAgXApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU3BhcnNlQXJyYXlWYWx1ZU1hcC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3BhcnNlQXJyYXlWYWx1ZU1hcC5jcHAJKHJldmlz
aW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NwYXJzZUFycmF5
VmFsdWVNYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjEwLDcgKzIxMCw4IEBAIEpTVmFsdWUg
U3BhcnNlQXJyYXlFbnRyeTo6Z2V0Tm9uU3BhcnNlTW8KICAgICByZXR1cm4gQmFzZTo6Z2V0KCk7
CiB9CiAKLXZvaWQgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNl
bGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3Zv
aWQgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBW
aXNpdG9yJiB2aXNpdG9yKQogewogICAgIFNwYXJzZUFycmF5VmFsdWVNYXAqIHRoaXNPYmplY3Qg
PSBqc0Nhc3Q8U3BhcnNlQXJyYXlWYWx1ZU1hcCo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpF
Q1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTIyMyw1ICsyMjQsNyBAQCB2b2lk
IFNwYXJzZUFycmF5VmFsdWVNYXA6OnZpc2l0Q2hpbGRyZW4oCiAgICAgdmlzaXRvci5yZXBvcnRF
eHRyYU1lbW9yeVZpc2l0ZWQodGhpc09iamVjdC0+bV9yZXBvcnRlZENhcGFjaXR5ICogc2l6ZW9m
KE1hcDo6S2V5VmFsdWVQYWlyVHlwZSkpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oU3Bh
cnNlQXJyYXlWYWx1ZU1hcCk7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TcGFyc2VBcnJheVZhbHVlTWFwLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3BhcnNlQXJyYXlWYWx1ZU1hcC5oCShy
ZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TcGFyc2VB
cnJheVZhbHVlTWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDExLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDExLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMTUsNyArMTE1LDcgQEAgcHVibGlj
OgogICAgIAogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xv
YmFsT2JqZWN0KiwgSlNWYWx1ZSBwcm90b3R5cGUpOwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRD
aGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERS
RU47CiAKICAgICBib29sIHNwYXJzZU1vZGUoKQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1N0YWNrRnJhbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1N0YWNrRnJhbWUuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdGFja0ZyYW1lLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxOSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTE0MSw3ICsxNDEsOCBAQCBTdHJpbmcgU3RhY2tGcmFtZTo6dG9TdHJpbmcoVk0mIHZt
KSBjb25zCiAgICAgcmV0dXJuIHRyYWNlQnVpbGQudG9TdHJpbmcoKS5pbXBsKCk7CiB9CiAKLXZv
aWQgU3RhY2tGcmFtZTo6dmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBs
YXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFN0YWNrRnJhbWU6OnZpc2l0Q2hpbGRyZW5JbXBs
KFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgaWYgKG1fY2FsbGVlKQogICAgICAgICB2aXNpdG9y
LmFwcGVuZChtX2NhbGxlZSk7CkBAIC0xNDksNSArMTUwLDcgQEAgdm9pZCBTdGFja0ZyYW1lOjp2
aXNpdENoaWxkcmVuKFNsb3RWaXNpdAogICAgICAgICB2aXNpdG9yLmFwcGVuZChtX2NvZGVCbG9j
ayk7CiB9CiAKK0RFRklORV9JTlNUQU5DRV9WSVNJVF9DSElMRFJFTihTdGFja0ZyYW1lKTsKKwog
fSAvLyBuYW1lc3BhY2UgSlNDCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1N0YWNrRnJhbWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TdGFja0ZyYW1lLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1N0YWNrRnJhbWUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI3LDYgKzI3LDcgQEAK
IAogI2luY2x1ZGUgIkhlYXAuaCIKICNpbmNsdWRlICJWTS5oIgorI2luY2x1ZGUgIlNsb3RWaXNp
dG9yTWFjcm9zLmgiCiAjaW5jbHVkZSAiV2FzbUluZGV4T3JOYW1lLmgiCiAjaW5jbHVkZSAiV3Jp
dGVCYXJyaWVyLmgiCiAjaW5jbHVkZSA8bGltaXRzLmg+CkBAIC0zNSw3ICszNiw2IEBAIG5hbWVz
cGFjZSBKU0MgewogCiBjbGFzcyBDb2RlQmxvY2s7CiBjbGFzcyBKU09iamVjdDsKLWNsYXNzIFNs
b3RWaXNpdG9yOwogCiBjbGFzcyBTdGFja0ZyYW1lIHsKIHB1YmxpYzoKQEAgLTU4LDcgKzU4LDcg
QEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9ieXRlY29kZUluZGV4OwogICAgIH0KICAgICAK
LSAgICB2b2lkIHZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX0lOU1RB
TkNFX1ZJU0lUX0NISUxEUkVOOwogICAgIGJvb2wgaXNNYXJrZWQoVk0mIHZtKSBjb25zdCB7IHJl
dHVybiAoIW1fY2FsbGVlIHx8IHZtLmhlYXAuaXNNYXJrZWQobV9jYWxsZWUuZ2V0KCkpKSAmJiAo
IW1fY29kZUJsb2NrIHx8IHZtLmhlYXAuaXNNYXJrZWQobV9jb2RlQmxvY2suZ2V0KCkpKTsgfQog
CiBwcml2YXRlOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1
cmUuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TdHJ1Y3R1cmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAwOC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAwOC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqIENvcHlyaWdodCAoQykgMjAyMCBBbGV4ZXkgU2h2YXlrYSA8c2h2YWlrYWxlc2hAZ21haWwu
Y29tPi4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTEyNjgsNyArMTI2OCw4IEBAIHZvaWQgU3RydWN0
dXJlOjpkaWRUcmFuc2l0aW9uRnJvbVRoaXNTdHIKICAgICAgICAgbV90cmFuc2l0aW9uV2F0Y2hw
b2ludFNldC5maXJlQWxsKHZtKCksIFN0cnVjdHVyZUZpcmVEZXRhaWwodGhpcykpOwogfQogCi12
b2lkIFN0cnVjdHVyZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgU3RydWN0dXJlOjp2aXNp
dENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgU3Ry
dWN0dXJlKiB0aGlzT2JqZWN0ID0ganNDYXN0PFN0cnVjdHVyZSo+KGNlbGwpOwogICAgIEFTU0VS
VF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTEyOTAsMzIgKzEy
OTEsMzggQEAgdm9pZCBTdHJ1Y3R1cmU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZQogICAgICAg
ICAvLyBOT1RFOiBUaGlzIGNhbiBpbnRlcmxlYXZlIGluIHBpbigpLCBpbiB3aGljaCBjYXNlIGl0
IG1heSBzZWUgYSBudWxsIHByb3BlcnR5IHRhYmxlLgogICAgICAgICAvLyBUaGF0J3MgZmluZSwg
YmVjYXVzZSB0aGVuIHRoZSBiYXJyaWVyIHdpbGwgZmlyZSBhbmQgd2Ugd2lsbCBzY2FuIHRoaXMg
YWdhaW4uCiAgICAgICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fcHJvcGVydHlUYWJs
ZVVuc2FmZSk7Ci0gICAgfSBlbHNlIGlmICh2aXNpdG9yLmlzQW5hbHl6aW5nSGVhcCgpKQorICAg
IH0gZWxzZSBpZiAodmlzaXRvci52bSgpLmlzQW5hbHl6aW5nSGVhcCgpKQogICAgICAgICB2aXNp
dG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX3Byb3BlcnR5VGFibGVVbnNhZmUpOwogICAgIGVsc2Ug
aWYgKHRoaXNPYmplY3QtPm1fcHJvcGVydHlUYWJsZVVuc2FmZSkKICAgICAgICAgdGhpc09iamVj
dC0+bV9wcm9wZXJ0eVRhYmxlVW5zYWZlLmNsZWFyKCk7CiB9CiAKLWJvb2wgU3RydWN0dXJlOjpp
c0NoZWFwRHVyaW5nR0MoVk0mIHZtKQorREVGSU5FX1ZJU0lUX0NISUxEUkVOKFN0cnVjdHVyZSk7
CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Citib29sIFN0cnVjdHVyZTo6aXNDaGVhcER1
cmluZ0dDKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgLy8gRklYTUU6IFdlIGNvdWxkIG1ha2Ug
dGhpcyBldmVuIHNhZmVyIGJ5IHJldHVybmluZyBmYWxzZSBpZiB0aGlzIHN0cnVjdHVyZSdzIHBy
b3BlcnR5IHRhYmxlCiAgICAgLy8gaGFzIGFueSBsYXJnZSBwcm9wZXJ0eSBuYW1lcy4KICAgICAv
LyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU3MzM0CiAgICAgCi0g
ICAgcmV0dXJuICghbV9nbG9iYWxPYmplY3QgfHwgdm0uaGVhcC5pc01hcmtlZChtX2dsb2JhbE9i
amVjdC5nZXQoKSkpCi0gICAgICAgICYmIChoYXNQb2x5UHJvdG8oKSB8fCAhc3RvcmVkUHJvdG90
eXBlT2JqZWN0KCkgfHwgdm0uaGVhcC5pc01hcmtlZChzdG9yZWRQcm90b3R5cGVPYmplY3QoKSkp
OworICAgIHJldHVybiAoIW1fZ2xvYmFsT2JqZWN0IHx8IHZpc2l0b3IuaXNNYXJrZWQobV9nbG9i
YWxPYmplY3QuZ2V0KCkpKQorICAgICAgICAmJiAoaGFzUG9seVByb3RvKCkgfHwgIXN0b3JlZFBy
b3RvdHlwZU9iamVjdCgpIHx8IHZpc2l0b3IuaXNNYXJrZWQoc3RvcmVkUHJvdG90eXBlT2JqZWN0
KCkpKTsKIH0KIAotYm9vbCBTdHJ1Y3R1cmU6Om1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJiB2aXNp
dG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK2Jvb2wgU3RydWN0dXJlOjptYXJrSWZD
aGVhcChWaXNpdG9yJiB2aXNpdG9yKQogewotICAgIFZNJiB2bSA9IHZpc2l0b3Iudm0oKTsKLSAg
ICBpZiAoIWlzQ2hlYXBEdXJpbmdHQyh2bSkpCi0gICAgICAgIHJldHVybiB2bS5oZWFwLmlzTWFy
a2VkKHRoaXMpOwotICAgIAorICAgIGlmICghaXNDaGVhcER1cmluZ0dDKHZpc2l0b3IpKQorICAg
ICAgICByZXR1cm4gdmlzaXRvci5pc01hcmtlZCh0aGlzKTsKKwogICAgIHZpc2l0b3IuYXBwZW5k
VW5iYXJyaWVyZWQodGhpcyk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK3RlbXBsYXRlIGJvb2wg
U3RydWN0dXJlOjptYXJrSWZDaGVhcChTbG90VmlzaXRvciYpOwordGVtcGxhdGUgYm9vbCBTdHJ1
Y3R1cmU6Om1hcmtJZkNoZWFwKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKKwogUmVmPFN0cnVjdHVy
ZVNoYXBlPiBTdHJ1Y3R1cmU6OnRvU3RydWN0dXJlU2hhcGUoSlNWYWx1ZSB2YWx1ZSwgYm9vbCYg
c2F3UG9seVByb3RvU3RydWN0dXJlKQogewogICAgIFJlZjxTdHJ1Y3R1cmVTaGFwZT4gYmFzZVNo
YXBlID0gU3RydWN0dXJlU2hhcGU6OmNyZWF0ZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvU3RydWN0dXJlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvU3RydWN0dXJlLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOC0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjAsNyAr
NjAsNiBAQCBjbGFzcyBQcm9wZXJ0eU5hbWVBcnJheURhdGE7CiBjbGFzcyBQcm9wZXJ0eVRhYmxl
OwogY2xhc3MgU3RydWN0dXJlQ2hhaW47CiBjbGFzcyBTdHJ1Y3R1cmVTaGFwZTsKLWNsYXNzIFNs
b3RWaXNpdG9yOwogY2xhc3MgSlNTdHJpbmc7CiBzdHJ1Y3QgRHVtcENvbnRleHQ7CiBzdHJ1Y3Qg
SGFzaFRhYmxlOwpAQCAtMzEwLDcgKzMwOSw3IEBAIHB1YmxpYzoKICAgICBKU1ZhbHVlIHByb3Rv
dHlwZUZvckxvb2t1cChKU0dsb2JhbE9iamVjdCosIEpTQ2VsbCogYmFzZSkgY29uc3Q7CiAgICAg
U3RydWN0dXJlQ2hhaW4qIHByb3RvdHlwZUNoYWluKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU09i
amVjdCogYmFzZSkgY29uc3Q7CiAgICAgU3RydWN0dXJlQ2hhaW4qIHByb3RvdHlwZUNoYWluKEpT
R2xvYmFsT2JqZWN0KiwgSlNPYmplY3QqIGJhc2UpIGNvbnN0OwotICAgIHN0YXRpYyB2b2lkIHZp
c2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NI
SUxEUkVOOwogICAgIAogICAgIC8vIEEgU3RydWN0dXJlIGlzIGNoZWFwIHRvIG1hcmsgZHVyaW5n
IEdDIGlmIGRvaW5nIHNvIHdvdWxkIG9ubHkgYWRkIGEgc21hbGwgYW5kIGJvdW5kZWQgYW1vdW50
CiAgICAgLy8gdG8gb3VyIGhlYXAgZm9vdHByaW50LiBGb3IgZXhhbXBsZSwgaWYgdGhlIHN0cnVj
dHVyZSByZWZlcnMgdG8gYSBnbG9iYWwgb2JqZWN0IHRoYXQgaXMgbm90CkBAIC0zMTgsMTAgKzMx
NywxMCBAQCBwdWJsaWM6CiAgICAgLy8gaW5jcmVhc2UgaW4gZm9vdHByaW50IGJlY2F1c2Ugbm8g
b3RoZXIgb2JqZWN0IHJlZmVycyB0byB0aGF0IGdsb2JhbCBvYmplY3QuIFRoaXMgbWV0aG9kCiAg
ICAgLy8gcmV0dXJucyB0cnVlIGlmIGFsbCB1c2VyLWNvbnRyb2xsZWQgKGFuZCBoZW5jZSB1bmJv
dW5kZWQgaW4gc2l6ZSkgb2JqZWN0cyByZWZlcmVuY2VkIGZyb20gdGhlCiAgICAgLy8gU3RydWN0
dXJlIGFyZSBhbHJlYWR5IG1hcmtlZC4KLSAgICBib29sIGlzQ2hlYXBEdXJpbmdHQyhWTSYpOwor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IGJvb2wgaXNDaGVhcER1cmluZ0dDKFZpc2l0
b3ImKTsKICAgICAKICAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhpcyBzdHJ1Y3R1cmUgaXMgbm93
IG1hcmtlZC4KLSAgICBib29sIG1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJik7CisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgVmlzaXRvcj4gYm9vbCBtYXJrSWZDaGVhcChWaXNpdG9yJik7CiAgICAgCiAg
ICAgYm9vbCBoYXNSYXJlRGF0YSgpIGNvbnN0CiAgICAgewpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlQ2hhaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUNoYWluLmNwcAkocmV2aXNpb24gMjcyODMw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlQ2hhaW4uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTY2LDcgKzY2LDggQEAgdm9pZCBTdHJ1Y3R1cmVDaGFpbjo6ZmluaXNoQ3Jl
YXRpb24oVk0mIAogICAgIH0KIH0KIAotdm9pZCBTdHJ1Y3R1cmVDaGFpbjo6dmlzaXRDaGlsZHJl
bihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUg
VmlzaXRvcj4KK3ZvaWQgU3RydWN0dXJlQ2hhaW46OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCog
Y2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBTdHJ1Y3R1cmVDaGFpbiogdGhpc09iamVj
dCA9IGpzQ2FzdDxTdHJ1Y3R1cmVDaGFpbio+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1Rf
SU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTgwLDQgKzgxLDYgQEAgdm9pZCBTdHJ1
Y3R1cmVDaGFpbjo6dmlzaXRDaGlsZHJlbihKU0NlbAogICAgIH0KIH0KIAorREVGSU5FX1ZJU0lU
X0NISUxEUkVOKFN0cnVjdHVyZUNoYWluKTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVDaGFpbi5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUNoYWluLmgJKHJldmlz
aW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUNo
YWluLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDA4LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDA4LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01MSw3ICs1MSw3IEBAIHB1YmxpYzoKIAogICAgIHN0
YXRpYyBTdHJ1Y3R1cmVDaGFpbiogY3JlYXRlKFZNJiwgSlNPYmplY3QqKTsKICAgICBTdHJ1Y3R1
cmVJRCogaGVhZCgpIHsgcmV0dXJuIG1fdmVjdG9yLmdldCgpOyB9Ci0gICAgc3RhdGljIHZvaWQg
dmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRf
Q0hJTERSRU47CiAKICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZt
LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKICAgICB7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVSYXJlRGF0YS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJl
UmFyZURhdGEuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TdHJ1Y3R1cmVSYXJlRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02Nyw3ICs2
Nyw4IEBAIFN0cnVjdHVyZVJhcmVEYXRhOjpTdHJ1Y3R1cmVSYXJlRGF0YShWTSYKICAgICAgICAg
bV9wcmV2aW91cy5zZXQodm0sIHRoaXMsIHByZXZpb3VzKTsKIH0KIAotdm9pZCBTdHJ1Y3R1cmVS
YXJlRGF0YTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9y
KQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgU3RydWN0dXJlUmFyZURhdGE6OnZp
c2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBT
dHJ1Y3R1cmVSYXJlRGF0YSogdGhpc09iamVjdCA9IGpzQ2FzdDxTdHJ1Y3R1cmVSYXJlRGF0YSo+
KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygp
KTsKQEAgLTg2LDYgKzg3LDggQEAgdm9pZCBTdHJ1Y3R1cmVSYXJlRGF0YTo6dmlzaXRDaGlsZHJl
bihKUwogICAgIH0KIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKFN0cnVjdHVyZVJhcmVEYXRh
KTsKKwogLy8gLS0tLS0tLS0tLS0gQ2FjaGVkIHNwZWNpYWwgcHJvcGVydGllcyBoZWxwZXIgd2F0
Y2hwb2ludCBjbGFzc2VzIC0tLS0tLS0tLS0tCiAKIGNsYXNzIENhY2hlZFNwZWNpYWxQcm9wZXJ0
eUFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludCBmaW5hbCA6IHB1YmxpYyBB
ZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnRCYXNlIHsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZVJhcmVEYXRhLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlUmFyZURhdGEuaAkocmV2
aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJl
UmFyZURhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY4LDcgKzY4LDcgQEAgcHVibGljOgogICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0Rlc3RydWN0aW9uID0gdHJ1ZTsKICAgICBzdGF0
aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJl
bihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAK
ICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVj
dCosIEpTVmFsdWUgcHJvdG90eXBlKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU3ltYm9sVGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1N5bWJvbFRhYmxlLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE5IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
OTIsNyArOTIsOCBAQCB2b2lkIFN5bWJvbFRhYmxlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCiAg
ICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwogfQogCi12b2lkIFN5bWJvbFRhYmxlOjp2aXNp
dENoaWxkcmVuKEpTQ2VsbCogdGhpc0NlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxh
dGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgU3ltYm9sVGFibGU6OnZpc2l0Q2hpbGRyZW5JbXBs
KEpTQ2VsbCogdGhpc0NlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgU3ltYm9sVGFibGUq
IHRoaXNTeW1ib2xUYWJsZSA9IGpzQ2FzdDxTeW1ib2xUYWJsZSo+KHRoaXNDZWxsKTsKICAgICBB
U1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNTeW1ib2xUYWJsZSwgaW5mbygpKTsKQEAgLTEw
OCw2ICsxMDksOCBAQCB2b2lkIFN5bWJvbFRhYmxlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogCiAg
ICAgdGhpc1N5bWJvbFRhYmxlLT5tX2xvY2FsVG9FbnRyeSA9IG51bGxwdHI7CiB9CiAKK0RFRklO
RV9WSVNJVF9DSElMRFJFTihTeW1ib2xUYWJsZSk7CisKIGNvbnN0IFN5bWJvbFRhYmxlOjpMb2Nh
bFRvRW50cnlWZWMmIFN5bWJvbFRhYmxlOjpsb2NhbFRvRW50cnkoY29uc3QgQ29uY3VycmVudEpT
TG9ja2VyJikKIHsKICAgICBpZiAoVU5MSUtFTFkoIW1fbG9jYWxUb0VudHJ5KSkgewpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFibGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TeW1ib2xUYWJsZS5oCShyZXZpc2lvbiAy
NzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TeW1ib2xUYWJsZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNy0y
MDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAw
Ny0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtNzMzLDcgKzczMyw3IEBAIHB1YmxpYzoKICAgICAgICAgbV9zaW5n
bGV0b24ubm90aWZ5V3JpdGUodm0sIHRoaXMsIHNjb3BlLCByZWFzb24pOwogICAgIH0KIAotICAg
IHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBE
RUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgREVDTEFSRV9FWFBPUlRfSU5GTzsKIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZVByb2ZpbGVyTG9nLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlUHJvZmlsZXJMb2cu
Y3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9U
eXBlUHJvZmlsZXJMb2cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxNC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTI0LDcgKzEyNCw3IEBAIHZv
aWQgVHlwZVByb2ZpbGVyTG9nOjpwcm9jZXNzTG9nRW50cmllcygKICAgICB9CiB9CiAKLXZvaWQg
VHlwZVByb2ZpbGVyTG9nOjp2aXNpdChTbG90VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgVHlwZVBy
b2ZpbGVyTG9nOjp2aXNpdChBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGZv
ciAoTG9nRW50cnkqIGVudHJ5ID0gbV9sb2dTdGFydFB0cjsgZW50cnkgIT0gbV9jdXJyZW50TG9n
RW50cnlQdHI7ICsrZW50cnkpIHsKICAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZChl
bnRyeS0+dmFsdWUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZVBy
b2ZpbGVyTG9nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
VHlwZVByb2ZpbGVyTG9nLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1R5cGVQcm9maWxlckxvZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU5LDcgKzU5LDcg
QEAgcHVibGljOgogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgcHJvY2Vzc0xvZ0VudHJpZXMo
Vk0mLCBjb25zdCBTdHJpbmcmKTsKICAgICBMb2dFbnRyeSogbG9nRW5kUHRyKCkgY29uc3QgeyBy
ZXR1cm4gbV9sb2dFbmRQdHI7IH0KIAotICAgIHZvaWQgdmlzaXQoU2xvdFZpc2l0b3ImKTsKKyAg
ICB2b2lkIHZpc2l0KEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKIAogICAgIHN0YXRpYyBwdHJkaWZm
X3QgbG9nU3RhcnRPZmZzZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoVHlwZVByb2ZpbGVy
TG9nLCBtX2xvZ1N0YXJ0UHRyKTsgfQogICAgIHN0YXRpYyBwdHJkaWZmX3QgY3VycmVudExvZ0Vu
dHJ5T2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFR5cGVQcm9maWxlckxvZywgbV9j
dXJyZW50TG9nRW50cnlQdHIpOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9WTS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJ
KHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4
LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDA4LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC0xMjEsNiArMTIxLDcgQEAgY2xhc3MgRmFzdE1hbGxvY0FsaWdu
ZWRNZW1vcnlBbGxvY2F0b3I7CiBjbGFzcyBHaWdhY2FnZUFsaWduZWRNZW1vcnlBbGxvY2F0b3I7
CiBjbGFzcyBIYW5kbGVTdGFjazsKIGNsYXNzIEhhc093blByb3BlcnR5Q2FjaGU7CitjbGFzcyBI
ZWFwQW5hbHl6ZXI7CiBjbGFzcyBIZWFwUHJvZmlsZXI7CiBjbGFzcyBJZGVudGlmaWVyOwogY2xh
c3MgSW50ZXJwcmV0ZXI7CkBAIC0zMTAsNiArMzExLDEwIEBAIHB1YmxpYzoKICAgICBIZWFwUHJv
ZmlsZXIqIGhlYXBQcm9maWxlcigpIGNvbnN0IHsgcmV0dXJuIG1faGVhcFByb2ZpbGVyLmdldCgp
OyB9CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgSGVhcFByb2ZpbGVyJiBlbnN1cmVIZWFwUHJvZmls
ZXIoKTsKIAorICAgIGJvb2wgaXNBbmFseXppbmdIZWFwKCkgY29uc3QgeyByZXR1cm4gbV9hY3Rp
dmVIZWFwQW5hbHl6ZXI7IH0KKyAgICBIZWFwQW5hbHl6ZXIqIGFjdGl2ZUhlYXBBbmFseXplcigp
IGNvbnN0IHsgcmV0dXJuIG1fYWN0aXZlSGVhcEFuYWx5emVyOyB9CisgICAgdm9pZCBzZXRBY3Rp
dmVIZWFwQW5hbHl6ZXIoSGVhcEFuYWx5emVyKiBhbmFseXplcikgeyBtX2FjdGl2ZUhlYXBBbmFs
eXplciA9IGFuYWx5emVyOyB9CisKICNpZiBFTkFCTEUoU0FNUExJTkdfUFJPRklMRVIpCiAgICAg
U2FtcGxpbmdQcm9maWxlciogc2FtcGxpbmdQcm9maWxlcigpIHsgcmV0dXJuIG1fc2FtcGxpbmdQ
cm9maWxlci5nZXQoKTsgfQogICAgIEpTX0VYUE9SVF9QUklWQVRFIFNhbXBsaW5nUHJvZmlsZXIm
IGVuc3VyZVNhbXBsaW5nUHJvZmlsZXIoUmVmPFN0b3B3YXRjaD4mJik7CkBAIC0xMTk1LDkgKzEy
MDAsMTAgQEAgcHVibGljOgogICAgIGJvb2wgZGlkRW50ZXJWTSB7IGZhbHNlIH07CiBwcml2YXRl
OgogICAgIGJvb2wgbV9mYWlsTmV4dE5ld0NvZGVCbG9jayB7IGZhbHNlIH07Ci0gICAgRGVsZXRl
UHJvcGVydHlNb2RlIG1fZGVsZXRlUHJvcGVydHlNb2RlIHsgRGVsZXRlUHJvcGVydHlNb2RlOjpE
ZWZhdWx0IH07CiAgICAgYm9vbCBtX2dsb2JhbENvbnN0UmVkZWNsYXJhdGlvblNob3VsZFRocm93
IHsgdHJ1ZSB9OwogICAgIGJvb2wgbV9zaG91bGRCdWlsZFBDVG9Db2RlT3JpZ2luTWFwcGluZyB7
IGZhbHNlIH07CisgICAgRGVsZXRlUHJvcGVydHlNb2RlIG1fZGVsZXRlUHJvcGVydHlNb2RlIHsg
RGVsZXRlUHJvcGVydHlNb2RlOjpEZWZhdWx0IH07CisgICAgSGVhcEFuYWx5emVyKiBtX2FjdGl2
ZUhlYXBBbmFseXplciB7IG51bGxwdHIgfTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q29kZUNhY2hl
PiBtX2NvZGVDYWNoZTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SW50bENhY2hlPiBtX2ludGxDYWNo
ZTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8QnVpbHRpbkV4ZWN1dGFibGVzPiBtX2J1aWx0aW5FeGVj
dXRhYmxlczsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtNYXBJbXBs
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9XZWFrTWFw
SW1wbC5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1dlYWtNYXBJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICogQ29weXJpZ2h0IChDKSAyMDE3IFl1c3VrZSBTdXp1a2kgPHV0YXRhbmUudGVhQGdtYWlsLmNv
bT4uCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0zOSw4ICszOSw5IEBAIHZvaWQgV2Vha01hcEltcGw8
V2Vha01hcEJ1Y2tldD46OmRlc3Ryb3kKICAgICBzdGF0aWNfY2FzdDxXZWFrTWFwSW1wbCo+KGNl
bGwpLT5+V2Vha01hcEltcGwoKTsKIH0KIAotdGVtcGxhdGUgPHR5cGVuYW1lIFdlYWtNYXBCdWNr
ZXQ+Ci12b2lkIFdlYWtNYXBJbXBsPFdlYWtNYXBCdWNrZXQ+Ojp2aXNpdENoaWxkcmVuKEpTQ2Vs
bCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBXZWFrTWFw
QnVja2V0PgordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgV2Vha01hcEltcGw8V2Vh
a01hcEJ1Y2tldD46OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlz
aXRvcikKIHsKICAgICBXZWFrTWFwSW1wbCogdGhpc09iamVjdCA9IGpzQ2FzdDxXZWFrTWFwSW1w
bCo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5m
bygpKTsKQEAgLTQ4LDYgKzQ5LDggQEAgdm9pZCBXZWFrTWFwSW1wbDxXZWFrTWFwQnVja2V0Pjo6
dmlzaXRDaAogICAgIHZpc2l0b3IucmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKHRoaXNPYmplY3Qt
Pm1fY2FwYWNpdHkgKiBzaXplb2YoV2Vha01hcEJ1Y2tldCkpOwogfQogCitERUZJTkVfVEVNUExB
VEVfVklTSVRfQ0hJTERSRU4odGVtcGxhdGU8dHlwZW5hbWUgV2Vha01hcEJ1Y2tldD4sIFdlYWtN
YXBJbXBsPFdlYWtNYXBCdWNrZXQ+KTsKKwogdGVtcGxhdGUgPHR5cGVuYW1lIFdlYWtNYXBCdWNr
ZXQ+CiBzaXplX3QgV2Vha01hcEltcGw8V2Vha01hcEJ1Y2tldD46OmVzdGltYXRlZFNpemUoSlND
ZWxsKiBjZWxsLCBWTSYgdm0pCiB7CkBAIC01NiwxNSArNTksMTQgQEAgc2l6ZV90IFdlYWtNYXBJ
bXBsPFdlYWtNYXBCdWNrZXQ+Ojplc3RpbQogfQogCiB0ZW1wbGF0ZSA8Pgotdm9pZCBXZWFrTWFw
SW1wbDxXZWFrTWFwQnVja2V0PFdlYWtNYXBCdWNrZXREYXRhS2V5Pj46OnZpc2l0T3V0cHV0Q29u
c3RyYWludHMoSlNDZWxsKiwgU2xvdFZpc2l0b3ImKQordm9pZCBXZWFrTWFwSW1wbDxXZWFrTWFw
QnVja2V0PFdlYWtNYXBCdWNrZXREYXRhS2V5Pj46OnZpc2l0T3V0cHV0Q29uc3RyYWludHMoSlND
ZWxsKiwgQWJzdHJhY3RTbG90VmlzaXRvciYpCiB7CiAgICAgLy8gT25seSBKU1dlYWtNYXAgbmVl
ZHMgdG8gaGFydmVzdCB2YWx1ZSByZWZlcmVuY2VzCiB9CiAKIHRlbXBsYXRlIDw+Ci12b2lkIFdl
YWtNYXBJbXBsPFdlYWtNYXBCdWNrZXQ8V2Vha01hcEJ1Y2tldERhdGFLZXlWYWx1ZT4+Ojp2aXNp
dE91dHB1dENvbnN0cmFpbnRzKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2
b2lkIFdlYWtNYXBJbXBsPFdlYWtNYXBCdWNrZXQ8V2Vha01hcEJ1Y2tldERhdGFLZXlWYWx1ZT4+
Ojp2aXNpdE91dHB1dENvbnN0cmFpbnRzKEpTQ2VsbCogY2VsbCwgQWJzdHJhY3RTbG90VmlzaXRv
ciYgdmlzaXRvcikKIHsKLSAgICBWTSYgdm0gPSB2aXNpdG9yLnZtKCk7CiAgICAgYXV0byogdGhp
c09iamVjdCA9IGpzQ2FzdDxXZWFrTWFwSW1wbCo+KGNlbGwpOwogICAgIGF1dG8gbG9ja2VyID0g
aG9sZExvY2sodGhpc09iamVjdC0+Y2VsbExvY2soKSk7CiAgICAgYXV0byogYnVmZmVyID0gdGhp
c09iamVjdC0+YnVmZmVyKCk7CkBAIC03Miw3ICs3NCw3IEBAIHZvaWQgV2Vha01hcEltcGw8V2Vh
a01hcEJ1Y2tldDxXZWFrTWFwQnUKICAgICAgICAgYXV0byogYnVja2V0ID0gYnVmZmVyICsgaW5k
ZXg7CiAgICAgICAgIGlmIChidWNrZXQtPmlzRW1wdHkoKSB8fCBidWNrZXQtPmlzRGVsZXRlZCgp
KQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlmICghdm0uaGVhcC5pc01hcmtlZChi
dWNrZXQtPmtleSgpKSkKKyAgICAgICAgaWYgKCF2aXNpdG9yLmlzTWFya2VkKGJ1Y2tldC0+a2V5
KCkpKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIGJ1Y2tldC0+dmlzaXRBZ2dyZWdh
dGUodmlzaXRvcik7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
V2Vha01hcEltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9XZWFrTWFwSW1wbC5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9XZWFrTWFwSW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAxNyBZdXN1a2UgU3V6dWtpIDx1dGF0YW5lLnRl
YUBnbWFpbC5jb20+LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMTQ1LDcgKzE0NSw3IEBAIHB1Ymxp
YzoKICAgICB9CiAKICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVCA9IERhdGE+Ci0gICAgQUxXQVlT
X0lOTElORSB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8VCwgV2Vha01hcEJ1
Y2tldERhdGFLZXlWYWx1ZT46OnZhbHVlPjo6dHlwZSB2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRv
ciYgdmlzaXRvcikKKyAgICBBTFdBWVNfSU5MSU5FIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0
ZDo6aXNfc2FtZTxULCBXZWFrTWFwQnVja2V0RGF0YUtleVZhbHVlPjo6dmFsdWU+Ojp0eXBlIHZp
c2l0QWdncmVnYXRlKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiAgICAgewogICAgICAg
ICB2aXNpdG9yLmFwcGVuZChtX2RhdGEudmFsdWUpOwogICAgIH0KQEAgLTIwMiw3ICsyMDIsNyBA
QCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSB0
cnVlOwogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CiAKLSAgICBzdGF0aWMgdm9p
ZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9URU1Q
TEFURV9WSVNJVF9DSElMRFJFTjsKIAogICAgIHN0YXRpYyBzaXplX3QgZXN0aW1hdGVkU2l6ZShK
U0NlbGwqLCBWTSYpOwogCkBAIC0zMTEsNyArMzExLDcgQEAgcHVibGljOgogICAgICAgICByZXR1
cm4gdm0ud2Vha1NldFNwYWNlPG1vZGU+KCk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgdmlz
aXRPdXRwdXRDb25zdHJhaW50cyhKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIHN0YXRpYyB2
b2lkIHZpc2l0T3V0cHV0Q29uc3RyYWludHMoSlNDZWxsKiwgQWJzdHJhY3RTbG90VmlzaXRvciYp
OwogICAgIHZvaWQgZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoVk0mKTsKIAogcHJpdmF0ZToKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9KU0RvbGxhclZNLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvSlNEb2xsYXJWTS5jcHAJKHJldmlzaW9u
IDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9KU0RvbGxhclZNLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUt
MjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTUtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTIyNCwxNCArMjI0LDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBm
aW5pc2hDcmVhdGlvbihWTSYsIFJvb3QqKTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKLSAgICB7Ci0gICAgICAgIERv
bGxhclZNQXNzZXJ0U2NvcGUgYXNzZXJ0U2NvcGU7Ci0gICAgICAgIEVsZW1lbnQqIHRoaXNPYmpl
Y3QgPSBqc0Nhc3Q8RWxlbWVudCo+KGNlbGwpOwotICAgICAgICBBU1NFUlRfR0NfT0JKRUNUX0lO
SEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7Ci0gICAgICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4o
dGhpc09iamVjdCwgdmlzaXRvcik7Ci0gICAgICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3Qt
Pm1fcm9vdCk7Ci0gICAgfQorICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBzdGF0
aWMgRWxlbWVudEhhbmRsZU93bmVyKiBoYW5kbGVPd25lcigpOwogCkBAIC0yNDcsMTAgKzI0MCwy
MiBAQCBwcml2YXRlOgogICAgIFdyaXRlQmFycmllcjxSb290PiBtX3Jvb3Q7CiB9OwogCit0ZW1w
bGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBFbGVtZW50Ojp2aXNpdENoaWxkcmVuSW1wbChK
U0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgRG9sbGFyVk1Bc3NlcnRTY29w
ZSBhc3NlcnRTY29wZTsKKyAgICBFbGVtZW50KiB0aGlzT2JqZWN0ID0ganNDYXN0PEVsZW1lbnQq
PihjZWxsKTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8o
KSk7CisgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKKyAgICB2
aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX3Jvb3QpOworfQorCitERUZJTkVfVklTSVRfQ0hJ
TERSRU4oRWxlbWVudCk7CisKIGNsYXNzIEVsZW1lbnRIYW5kbGVPd25lciBmaW5hbCA6IHB1Ymxp
YyBXZWFrSGFuZGxlT3duZXIgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGlj
OgotICAgIGJvb2wgaXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpV
bmtub3duPiBoYW5kbGUsIHZvaWQqLCBTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioq
IHJlYXNvbikgZmluYWwKKyAgICBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6
SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgQWJzdHJhY3RTbG90VmlzaXRvciYg
dmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikgZmluYWwKICAgICB7CiAgICAgICAgIERvbGxh
clZNQXNzZXJ0U2NvcGUgYXNzZXJ0U2NvcGU7CiAgICAgICAgIGlmIChVTkxJS0VMWShyZWFzb24p
KQpAQCAtMzA0LDE4ICszMDksMjMgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gU3RydWN0dXJl
OjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBl
LCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgdmlz
aXRDaGlsZHJlbihKU0NlbGwqIHRoaXNPYmplY3QsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQotICAg
IHsKLSAgICAgICAgRG9sbGFyVk1Bc3NlcnRTY29wZSBhc3NlcnRTY29wZTsKLSAgICAgICAgQVNT
RVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwotICAgICAgICBCYXNl
Ojp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwotICAgICAgICB2aXNpdG9yLmFk
ZE9wYXF1ZVJvb3QodGhpc09iamVjdCk7Ci0gICAgfQorICAgIERFQ0xBUkVfVklTSVRfQ0hJTERS
RU47CiAKIHByaXZhdGU6CiAgICAgV2VhazxFbGVtZW50PiBtX2VsZW1lbnQ7CiB9OwogCit0ZW1w
bGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBSb290Ojp2aXNpdENoaWxkcmVuSW1wbChKU0Nl
bGwqIHRoaXNPYmplY3QsIFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgRG9sbGFyVk1Bc3NlcnRT
Y29wZSBhc3NlcnRTY29wZTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmpl
Y3QsIGluZm8oKSk7CisgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9y
KTsKKyAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QodGhpc09iamVjdCk7Cit9CisKK0RFRklORV9W
SVNJVF9DSElMRFJFTihSb290KTsKKwogY2xhc3MgU2ltcGxlT2JqZWN0IDogcHVibGljIEpTTm9u
RmluYWxPYmplY3QgewogcHVibGljOgogICAgIFNpbXBsZU9iamVjdChWTSYgdm0sIFN0cnVjdHVy
ZSogc3RydWN0dXJlKQpAQCAtMzQwLDE0ICszNTAsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVy
biBzaW1wbGVPYmplY3Q7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihK
U0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQotICAgIHsKLSAgICAgICAgRG9sbGFy
Vk1Bc3NlcnRTY29wZSBhc3NlcnRTY29wZTsKLSAgICAgICAgU2ltcGxlT2JqZWN0KiB0aGlzT2Jq
ZWN0ID0ganNDYXN0PFNpbXBsZU9iamVjdCo+KGNlbGwpOwotICAgICAgICBBU1NFUlRfR0NfT0JK
RUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7Ci0gICAgICAgIEJhc2U6OnZpc2l0Q2hp
bGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7Ci0gICAgICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNP
YmplY3QtPm1faGlkZGVuVmFsdWUpOwotICAgIH0KKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVO
OwogCiAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCiAgICAgewpAQCAtMzgw
LDYgKzM4MywxOCBAQCBwcml2YXRlOgogICAgIFdyaXRlQmFycmllcjxKU0M6OlVua25vd24+IG1f
aGlkZGVuVmFsdWU7CiB9OwogCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBTaW1w
bGVPYmplY3Q6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRv
cikKK3sKKyAgICBEb2xsYXJWTUFzc2VydFNjb3BlIGFzc2VydFNjb3BlOworICAgIFNpbXBsZU9i
amVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxTaW1wbGVPYmplY3QqPihjZWxsKTsKKyAgICBBU1NF
UlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CisgICAgQmFzZTo6dmlz
aXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKKyAgICB2aXNpdG9yLmFwcGVuZCh0aGlz
T2JqZWN0LT5tX2hpZGRlblZhbHVlKTsKK30KKworREVGSU5FX1ZJU0lUX0NISUxEUkVOKFNpbXBs
ZU9iamVjdCk7CisKIGNsYXNzIEltcHVyZUdldHRlciA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0
IHsKIHB1YmxpYzoKICAgICBJbXB1cmVHZXR0ZXIoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSkKQEAgLTQzNiwxNCArNDUxLDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gQmFzZTo6Z2V0
T3duUHJvcGVydHlTbG90KG9iamVjdCwgZ2xvYmFsT2JqZWN0LCBuYW1lLCBzbG90KTsKICAgICB9
CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0
b3ImIHZpc2l0b3IpCi0gICAgewotICAgICAgICBEb2xsYXJWTUFzc2VydFNjb3BlIGFzc2VydFNj
b3BlOwotICAgICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNlbGwsIGluZm8oKSk7Ci0g
ICAgICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4oY2VsbCwgdmlzaXRvcik7Ci0gICAgICAgIEltcHVy
ZUdldHRlciogdGhpc09iamVjdCA9IGpzQ2FzdDxJbXB1cmVHZXR0ZXIqPihjZWxsKTsKLSAgICAg
ICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9kZWxlZ2F0ZSk7Ci0gICAgfQorICAgIERF
Q0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICB2b2lkIHNldERlbGVnYXRlKFZNJiB2bSwgSlNP
YmplY3QqIGRlbGVnYXRlKQogICAgIHsKQEAgLTQ1NCw2ICs0NjIsMTggQEAgcHJpdmF0ZToKICAg
ICBXcml0ZUJhcnJpZXI8SlNPYmplY3Q+IG1fZGVsZWdhdGU7CiB9OwogCit0ZW1wbGF0ZTx0eXBl
bmFtZSBWaXNpdG9yPgordm9pZCBJbXB1cmVHZXR0ZXI6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2Vs
bCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBEb2xsYXJWTUFzc2VydFNjb3BlIGFz
c2VydFNjb3BlOworICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2VsbCwgaW5mbygpKTsK
KyAgICBCYXNlOjp2aXNpdENoaWxkcmVuKGNlbGwsIHZpc2l0b3IpOworICAgIEltcHVyZUdldHRl
ciogdGhpc09iamVjdCA9IGpzQ2FzdDxJbXB1cmVHZXR0ZXIqPihjZWxsKTsKKyAgICB2aXNpdG9y
LmFwcGVuZCh0aGlzT2JqZWN0LT5tX2RlbGVnYXRlKTsKK30KKworREVGSU5FX1ZJU0lUX0NISUxE
UkVOKEltcHVyZUdldHRlcik7CisKIHN0YXRpYyBKU0NfREVDTEFSRV9DVVNUT01fR0VUVEVSKGN1
c3RvbUdldHRlclZhbHVlR2V0dGVyKTsKIHN0YXRpYyBKU0NfREVDTEFSRV9DVVNUT01fR0VUVEVS
KGN1c3RvbUdldHRlckFjZXNzb3JHZXR0ZXIpOwogCkBAIC0xODIyLDE0ICsxODQyLDcgQEAgcHVi
bGljOgogICAgICAgICBwdXREaXJlY3ROYXRpdmVGdW5jdGlvbih2bSwgZ2xvYmFsT2JqZWN0LCBJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiYWRkQnl0ZXMiKSwgMCwgZnVuY3Rpb25XYXNtU3Ry
ZWFtaW5nQ29tcGlsZXJBZGRCeXRlcywgTm9JbnRyaW5zaWMsIHN0YXRpY19jYXN0PHVuc2lnbmVk
PihQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pKTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9p
ZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCi0gICAg
ewotICAgICAgICBEb2xsYXJWTUFzc2VydFNjb3BlIGFzc2VydFNjb3BlOwotICAgICAgICBhdXRv
KiB0aGlzT2JqZWN0ID0ganNDYXN0PFdhc21TdHJlYW1pbmdDb21waWxlcio+KGNlbGwpOwotICAg
ICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7Ci0gICAg
ICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7Ci0gICAgICAgIHZp
c2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fcHJvbWlzZSk7Ci0gICAgfQorICAgIERFQ0xBUkVf
VklTSVRfQ0hJTERSRU47CiAKICAgICBERUNMQVJFX0lORk87CiAKQEAgLTE4MzcsNiArMTg1MCwx
OCBAQCBwdWJsaWM6CiAgICAgUmVmPFdhc206OlN0cmVhbWluZ0NvbXBpbGVyPiBtX3N0cmVhbWlu
Z0NvbXBpbGVyOwogfTsKIAordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgV2FzbVN0
cmVhbWluZ0NvbXBpbGVyOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3Im
IHZpc2l0b3IpCit7CisgICAgRG9sbGFyVk1Bc3NlcnRTY29wZSBhc3NlcnRTY29wZTsKKyAgICBh
dXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PFdhc21TdHJlYW1pbmdDb21waWxlcio+KGNlbGwpOwor
ICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKKyAgICBC
YXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOworICAgIHZpc2l0b3IuYXBw
ZW5kKHRoaXNPYmplY3QtPm1fcHJvbWlzZSk7Cit9CisKK0RFRklORV9WSVNJVF9DSElMRFJFTihX
YXNtU3RyZWFtaW5nQ29tcGlsZXIpOworCiBjb25zdCBDbGFzc0luZm8gV2FzbVN0cmVhbWluZ0Nv
bXBpbGVyOjpzX2luZm8gPSB7ICJXYXNtU3RyZWFtaW5nQ29tcGlsZXIiLCAmQmFzZTo6c19pbmZv
LCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKFdhc21TdHJlYW1pbmdDb21w
aWxlcikgfTsKIAogSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGZ1bmN0aW9uV2FzbVN0cmVhbWlu
Z0NvbXBpbGVyQWRkQnl0ZXMsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJh
bWUqIGNhbGxGcmFtZSkpCkBAIC0zNjk5LDEzICszNzI0LDE2IEBAIHZvaWQgSlNEb2xsYXJWTTo6
YWRkQ29uc3RydWN0aWJsZUZ1bmN0aW8KICAgICBwdXREaXJlY3Qodm0sIGlkZW50aWZpZXIsIEpT
RnVuY3Rpb246OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBhcmd1bWVudHMsIGlkZW50aWZpZXIu
c3RyaW5nKCksIGZ1bmN0aW9uLCBOb0ludHJpbnNpYywgZnVuY3Rpb24pLCBqc0RvbGxhclZNUHJv
cGVydHlBdHRyaWJ1dGVzKTsKIH0KIAotdm9pZCBKU0RvbGxhclZNOjp2aXNpdENoaWxkcmVuKEpT
Q2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNp
dG9yPgordm9pZCBKU0RvbGxhclZNOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZp
c2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNEb2xsYXJWTSogdGhpc09iamVjdCA9IGpzQ2FzdDxK
U0RvbGxhclZNKj4oY2VsbCk7CiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2
aXNpdG9yKTsKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX29iamVjdERvaW5nU2lk
ZUVmZmVjdFB1dFdpdGhvdXRDb3JyZWN0U2xvdFN0YXR1c1N0cnVjdHVyZSk7CiB9CiAKK0RFRklO
RV9WSVNJVF9DSElMRFJFTihKU0RvbGxhclZNKTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKIElH
Tk9SRV9XQVJOSU5HU19FTkQKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9KU0Rv
bGxhclZNLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0pTRG9s
bGFyVk0uaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xz
L0pTRG9sbGFyVk0uaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTUtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTc0LDcgKzc0LDcgQEAgcHJpdmF0ZToK
ICAgICB2b2lkIGFkZEZ1bmN0aW9uKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBjb25zdCBjaGFyKiBu
YW1lLCBOYXRpdmVGdW5jdGlvbiwgdW5zaWduZWQgYXJndW1lbnRzKTsKICAgICB2b2lkIGFkZENv
bnN0cnVjdGlibGVGdW5jdGlvbihWTSYsIEpTR2xvYmFsT2JqZWN0KiwgY29uc3QgY2hhciogbmFt
ZSwgTmF0aXZlRnVuY3Rpb24sIHVuc2lnbmVkIGFyZ3VtZW50cyk7CiAKLSAgICBzdGF0aWMgdm9p
ZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJ
VF9DSElMRFJFTjsKIAogICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1fb2JqZWN0RG9pbmdT
aWRlRWZmZWN0UHV0V2l0aG91dENvcnJlY3RTbG90U3RhdHVzU3RydWN0dXJlOwogfTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21HbG9iYWwuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21HbG9iYWwuY3BwCShyZXZpc2lvbiAyNzI4
MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtR2xvYmFsLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE5LTIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0xMDMsNyArMTAzLDggQEAgdm9pZCBHbG9iYWw6OnNldChKU0dsb2JhbE9iamVjdCog
Z2xvYmFsTwogICAgIH0KIH0KIAotdm9pZCBHbG9iYWw6OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNp
dG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgR2xvYmFsOjp2
aXNpdEFnZ3JlZ2F0ZShWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHN3aXRjaCAobV90eXBlKSB7
CiAgICAgY2FzZSBXYXNtOjpUeXBlOjpFeHRlcm5yZWY6CkBAIC0xMTcsNiArMTE4LDkgQEAgdm9p
ZCBHbG9iYWw6OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJgogICAgIH0KIH0KIAordGVtcGxh
dGUgdm9pZCBHbG9iYWw6OnZpc2l0QWdncmVnYXRlKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3Rl
bXBsYXRlIHZvaWQgR2xvYmFsOjp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYpOworCiB9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6R2xvYmFsCiAKICNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkp
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtR2xvYmFsLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUdsb2JhbC5oCShyZXZpc2lvbiAy
NzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtR2xvYmFsLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMTgg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIw
MjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC01Nyw3ICs1Nyw3IEBAIHB1YmxpYzoKICAgICBKU1ZhbHVlIGdldChKU0ds
b2JhbE9iamVjdCopIGNvbnN0OwogICAgIHVpbnQ2NF90IGdldFByaW1pdGl2ZSgpIGNvbnN0IHsg
cmV0dXJuIG1fdmFsdWUubV9wcmltaXRpdmU7IH0KICAgICB2b2lkIHNldChKU0dsb2JhbE9iamVj
dCosIEpTVmFsdWUpOwotICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImKTsKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIHZpc2l0QWdncmVnYXRlKFZpc2l0b3Im
KTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IFQqIG93bmVyKCkgY29uc3QgeyByZXR1cm4g
cmVpbnRlcnByZXRfY2FzdDxUKj4obV9vd25lcik7IH0KICAgICB2b2lkIHNldE93bmVyKEpTT2Jq
ZWN0KiBvd25lcikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UYWJsZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRhYmxlLmNw
cAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRh
YmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTctMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE2Niw3ICsxNjYsOCBAQCBKU1ZhbHVlIFRhYmxl
OjpnZXQodWludDMyX3QgaW5kZXgpIGNvbnN0CiAgICAgcmV0dXJuIG1fanNWYWx1ZXMuZ2V0KClb
aW5kZXggJiBtX21hc2tdLmdldCgpOwogfQogCi12b2lkIFRhYmxlOjp2aXNpdEFnZ3JlZ2F0ZShT
bG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFRh
YmxlOjp2aXNpdEFnZ3JlZ2F0ZShWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFJFTEVBU0VfQVNT
RVJUKG1fb3duZXIpOwogICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9vd25lci0+Y2VsbExv
Y2soKSk7CkBAIC0xNzQsNiArMTc1LDkgQEAgdm9pZCBUYWJsZTo6dmlzaXRBZ2dyZWdhdGUoU2xv
dFZpc2l0b3ImIAogICAgICAgICB2aXNpdG9yLmFwcGVuZChtX2pzVmFsdWVzLmdldCgpW2ldKTsK
IH0KIAordGVtcGxhdGUgdm9pZCBUYWJsZTo6dmlzaXRBZ2dyZWdhdGUoQWJzdHJhY3RTbG90Vmlz
aXRvciYpOwordGVtcGxhdGUgdm9pZCBUYWJsZTo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3Im
KTsKKwogVHlwZSBUYWJsZTo6d2FzbVR5cGUoKSBjb25zdAogewogICAgIGlmIChpc0V4dGVybnJl
ZlRhYmxlKCkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGFibGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGFibGUuaAkocmV2
aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRhYmxlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3
LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC04MCw3ICs4MCw3IEBAIHB1YmxpYzoKICAgICBPcHRpb25hbDx1
aW50MzJfdD4gZ3Jvdyh1aW50MzJfdCBkZWx0YSwgSlNWYWx1ZSBkZWZhdWx0VmFsdWUpOwogICAg
IHZvaWQgY29weShjb25zdCBUYWJsZSogc3JjVGFibGUsIHVpbnQzMl90IGRzdEluZGV4LCB1aW50
MzJfdCBzcmNJbmRleCk7CiAKLSAgICB2b2lkIHZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJik7
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCB2aXNpdEFnZ3JlZ2F0ZShWaXNp
dG9yJik7CiAKIHByb3RlY3RlZDoKICAgICBUYWJsZSh1aW50MzJfdCBpbml0aWFsLCBPcHRpb25h
bDx1aW50MzJfdD4gbWF4aW11bSwgVGFibGVFbGVtZW50VHlwZSA9IFRhYmxlRWxlbWVudFR5cGU6
OkV4dGVybnJlZik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1RvV2Fz
bUlDQ2FsbGVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9KU1RvV2FzbUlDQ2FsbGVlLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvSlNUb1dhc21JQ0NhbGxlZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOS0yMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDks
NyArNDksOCBAQCBTdHJ1Y3R1cmUqIEpTVG9XYXNtSUNDYWxsZWU6OmNyZWF0ZVN0cnVjCiAgICAg
cmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlw
ZUluZm8oSlNDYWxsZWVUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CiB9CiAKLXZvaWQg
SlNUb1dhc21JQ0NhbGxlZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9y
JiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNUb1dhc21JQ0Nh
bGxlZTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQog
ewogICAgIEpTVG9XYXNtSUNDYWxsZWUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUb1dhc21JQ0Nh
bGxlZSo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwg
aW5mbygpKTsKQEAgLTU4LDYgKzU5LDggQEAgdm9pZCBKU1RvV2FzbUlDQ2FsbGVlOjp2aXNpdENo
aWxkcmVuKEpTQwogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fZnVuY3Rpb24pOwog
fQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNUb1dhc21JQ0NhbGxlZSk7CisKIH0gLy8gbmFt
ZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNUb1dhc21JQ0NhbGxlZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTVG9XYXNtSUNDYWxsZWUuaAkocmV2aXNp
b24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNUb1dhc21JQ0Nh
bGxlZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTktMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTU2LDcgKzU2LDcgQEAgcHJpdmF0ZToKICAgICBKU1RvV2Fz
bUlDQ2FsbGVlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUpCiAgICAgICAgIDogQmFzZSh2bSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUp
CiAgICAgeyB9Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90Vmlz
aXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBXcml0ZUJhcnJpZXI8
V2ViQXNzZW1ibHlGdW5jdGlvbj4gbV9mdW5jdGlvbjsKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmNw
cAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNX
ZWJBc3NlbWJseUNvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC04Miw3ICs4Miw4IEBA
IHZvaWQgSlNXZWJBc3NlbWJseUNvZGVCbG9jazo6Y2xlYXJKU0NhbGwKICAgICAgICAgKCppdGVy
KS0+dW5saW5rKHZtKTsKIH0KIAotdm9pZCBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrOjp2aXNpdENo
aWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBl
bmFtZSBWaXNpdG9yPgordm9pZCBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrOjp2aXNpdENoaWxkcmVu
SW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNXZWJBc3NlbWJs
eUNvZGVCbG9jayogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKj4o
Y2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkp
OwpAQCAtOTAsNiArOTEsOCBAQCB2b2lkIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6OnZpc2l0Q2hp
bGRyCiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKIH0KIAor
REVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTV2ViQXNzZW1ibHlDb2RlQmxvY2spOworCiB2b2lkIEpT
V2ViQXNzZW1ibHlDb2RlQmxvY2s6OmZpbmFsaXplVW5jb25kaXRpb25hbGx5KFZNJiB2bSkKIHsK
ICAgICBmb3IgKGF1dG8gaXRlciA9IG1fY2FsbExpbmtJbmZvcy5iZWdpbigpOyAhIWl0ZXI7ICsr
aXRlcikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlD
b2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9K
U1dlYkFzc2VtYmx5Q29kZUJsb2NrLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suaAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTg2LDcgKzg2LDcgQEAgcHJpdmF0ZToKICAgICBERUNMQVJFX0VYUE9SVF9JTkZPOwog
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0Rlc3RydWN0aW9uID0gdHJ1ZTsKICAgICBz
dGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwog
CiAgICAgUmVmPFdhc206OkNvZGVCbG9jaz4gbV9jb2RlQmxvY2s7CiAgICAgVmVjdG9yPE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZjxXYXNtRW50cnlQdHJUYWc+PiBtX3dhc21Ub0pTRXhpdFN0dWJzOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUdsb2JhbC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3Nl
bWJseUdsb2JhbC5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlHbG9iYWwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTcxLDcgKzcx
LDggQEAgdm9pZCBKU1dlYkFzc2VtYmx5R2xvYmFsOjpkZXN0cm95KEpTQ2VsbAogICAgIHN0YXRp
Y19jYXN0PEpTV2ViQXNzZW1ibHlHbG9iYWwqPihjZWxsKS0+SlNXZWJBc3NlbWJseUdsb2JhbDo6
fkpTV2ViQXNzZW1ibHlHbG9iYWwoKTsKIH0KIAotdm9pZCBKU1dlYkFzc2VtYmx5R2xvYmFsOjp2
aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0
ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1dlYkFzc2VtYmx5R2xvYmFsOjp2aXNpdENoaWxk
cmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNXZWJBc3Nl
bWJseUdsb2JhbCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1dlYkFzc2VtYmx5R2xvYmFsKj4oY2Vs
bCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpA
QCAtODAsNiArODEsOCBAQCB2b2lkIEpTV2ViQXNzZW1ibHlHbG9iYWw6OnZpc2l0Q2hpbGRyZW4o
CiAgICAgdGhpc09iamVjdC0+Z2xvYmFsKCktPnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOwogfQog
CitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNXZWJBc3NlbWJseUdsb2JhbCk7CisKIH0gLy8gbmFt
ZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUdsb2JhbC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlHbG9iYWwuaAko
cmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJB
c3NlbWJseUdsb2JhbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTktMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU5LDcgKzU5LDcgQEAgcHVibGljOgogcHJp
dmF0ZToKICAgICBKU1dlYkFzc2VtYmx5R2xvYmFsKFZNJiwgU3RydWN0dXJlKiwgUmVmPFdhc206
Okdsb2JhbD4mJik7CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOwotICAgIHN0YXRpYyB2
b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJ
U0lUX0NISUxEUkVOOwogCiAgICAgUmVmPFdhc206Okdsb2JhbD4gbV9nbG9iYWw7CiB9OwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2Vt
Ymx5SW5zdGFuY2UuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE5IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
NzMsNyArNzMsOCBAQCB2b2lkIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6ZGVzdHJveShKU0NlCiAg
ICAgc3RhdGljX2Nhc3Q8SlNXZWJBc3NlbWJseUluc3RhbmNlKj4oY2VsbCktPkpTV2ViQXNzZW1i
bHlJbnN0YW5jZTo6fkpTV2ViQXNzZW1ibHlJbnN0YW5jZSgpOwogfQogCi12b2lkIEpTV2ViQXNz
ZW1ibHlJbnN0YW5jZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNXZWJBc3NlbWJseUlu
c3RhbmNlOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3Ip
CiB7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1dlYkFzc2VtYmx5SW5zdGFuY2Uq
PihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8o
KSk7CkBAIC0xMDIsNiArMTAzLDggQEAgdm9pZCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OnZpc2l0
Q2hpbGRyZQogICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKHdyYXBwZXIuZ2V0KCkp
OwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNXZWJBc3NlbWJseUluc3RhbmNlKTsKKwog
dm9pZCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OmZpbmFsaXplQ3JlYXRpb24oVk0mIHZtLCBKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWY8V2FzbTo6Q29kZUJsb2NrPiYmIHdhc21Db2Rl
QmxvY2ssIEpTT2JqZWN0KiBpbXBvcnRPYmplY3QsIFdhc206OkNyZWF0aW9uTW9kZSBjcmVhdGlv
bk1vZGUpCiB7CiAgICAgbV9pbnN0YW5jZS0+ZmluYWxpemVDcmVhdGlvbih0aGlzLCB3YXNtQ29k
ZUJsb2NrLmNvcHlSZWYoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9K
U1dlYkFzc2VtYmx5SW5zdGFuY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuaAkocmV2aXNpb24gMjcyODMwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIw
MTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2
LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0xMDUsNyArMTA1LDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBK
U1dlYkFzc2VtYmx5SW5zdGFuY2UoVk0mLCBTdHJ1Y3R1cmUqLCBSZWY8V2FzbTo6SW5zdGFuY2U+
JiYpOwogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBKU1dlYkFzc2VtYmx5TW9kdWxlKiwg
V2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQqKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVu
KEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAog
ICAgIFJlZjxXYXNtOjpJbnN0YW5jZT4gbV9pbnN0YW5jZTsKICAgICBWTSogbV92bTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNZW1vcnkuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlN
ZW1vcnkuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9KU1dlYkFzc2VtYmx5TWVtb3J5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE1OSw3ICsx
NTksOCBAQCB2b2lkIEpTV2ViQXNzZW1ibHlNZW1vcnk6OmRlc3Ryb3koSlNDZWxsCiAgICAgbWVt
b3J5LT5KU1dlYkFzc2VtYmx5TWVtb3J5Ojp+SlNXZWJBc3NlbWJseU1lbW9yeSgpOwogfQogCi12
b2lkIEpTV2ViQXNzZW1ibHlNZW1vcnk6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90
VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTV2Vi
QXNzZW1ibHlNZW1vcnk6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYg
dmlzaXRvcikKIHsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTV2ViQXNzZW1ibHlN
ZW1vcnkqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3Qs
IGluZm8oKSk7CkBAIC0xNjksNiArMTcwLDggQEAgdm9pZCBKU1dlYkFzc2VtYmx5TWVtb3J5Ojp2
aXNpdENoaWxkcmVuKAogICAgIHZpc2l0b3IucmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKHRoaXNP
YmplY3QtPm1lbW9yeSgpLnNpemUoKSk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU1dl
YkFzc2VtYmx5TWVtb3J5KTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBFTkFC
TEUoV0VCQVNTRU1CTFkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dl
YkFzc2VtYmx5TWVtb3J5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vanMvSlNXZWJBc3NlbWJseU1lbW9yeS5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TWVtb3J5LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTkgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC02Myw3ICs2Myw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgSlNXZWJBc3NlbWJs
eU1lbW9yeShWTSYsIFN0cnVjdHVyZSopOwogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsK
LSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7Cisg
ICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIFJlZjxXYXNtOjpNZW1vcnk+IG1fbWVt
b3J5OwogICAgIFdyaXRlQmFycmllcjxKU0FycmF5QnVmZmVyPiBtX2J1ZmZlcldyYXBwZXI7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2Vt
Ymx5TW9kdWxlLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMjQs
NyArMTI0LDggQEAgdm9pZCBKU1dlYkFzc2VtYmx5TW9kdWxlOjpzZXRDb2RlQmxvY2soVgogICAg
IG1fY29kZUJsb2Nrc1tzdGF0aWNfY2FzdDxzaXplX3Q+KG1vZGUpXS5zZXQodm0sIHRoaXMsIGNv
ZGVCbG9jayk7CiB9CiAKLXZvaWQgSlNXZWJBc3NlbWJseU1vZHVsZTo6dmlzaXRDaGlsZHJlbihK
U0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlz
aXRvcj4KK3ZvaWQgSlNXZWJBc3NlbWJseU1vZHVsZTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxs
KiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTV2ViQXNzZW1ibHlNb2R1bGUqIHRo
aXNPYmplY3QgPSBqc0Nhc3Q8SlNXZWJBc3NlbWJseU1vZHVsZSo+KGNlbGwpOwogICAgIEFTU0VS
VF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTEzNSw2ICsxMzYs
OCBAQCB2b2lkIEpTV2ViQXNzZW1ibHlNb2R1bGU6OnZpc2l0Q2hpbGRyZW4oCiAgICAgICAgIHZp
c2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fY29kZUJsb2Nrc1tpXSk7CiB9CiAKK0RFRklORV9W
SVNJVF9DSElMRFJFTihKU1dlYkFzc2VtYmx5TW9kdWxlKTsKKwogfSAvLyBuYW1lc3BhY2UgSlND
CiAKICNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5oCShyZXZpc2lvbiAy
NzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9k
dWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDE2LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC04MCw3ICs4MCw3IEBAIHByaXZhdGU6CiAKICAgICBK
U1dlYkFzc2VtYmx5TW9kdWxlKFZNJiwgU3RydWN0dXJlKiwgUmVmPFdhc206Ok1vZHVsZT4mJik7
CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOwotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hp
bGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVO
OwogCiAgICAgUmVmPFdhc206Ok1vZHVsZT4gbV9tb2R1bGU7CiAgICAgV3JpdGVCYXJyaWVyPFN5
bWJvbFRhYmxlPiBtX2V4cG9ydFN5bWJvbFRhYmxlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvSlNXZWJBc3NlbWJseVRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5VGFibGUuY3BwCShyZXZpc2lvbiAy
NzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5VGFi
bGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxNi0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNzIsNyArNzIsOCBAQCB2b2lkIEpTV2ViQXNzZW1i
bHlUYWJsZTo6ZGVzdHJveShKU0NlbGwqCiAgICAgc3RhdGljX2Nhc3Q8SlNXZWJBc3NlbWJseVRh
YmxlKj4oY2VsbCktPkpTV2ViQXNzZW1ibHlUYWJsZTo6fkpTV2ViQXNzZW1ibHlUYWJsZSgpOwog
fQogCi12b2lkIEpTV2ViQXNzZW1ibHlUYWJsZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGws
IFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQg
SlNXZWJBc3NlbWJseVRhYmxlOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0
b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNXZWJBc3NlbWJseVRhYmxlKiB0aGlzT2JqZWN0ID0ganND
YXN0PEpTV2ViQXNzZW1ibHlUYWJsZSo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5I
RVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTgxLDYgKzgyLDggQEAgdm9pZCBKU1dlYkFz
c2VtYmx5VGFibGU6OnZpc2l0Q2hpbGRyZW4oSgogICAgIHRoaXNPYmplY3QtPnRhYmxlKCktPnZp
c2l0QWdncmVnYXRlKHZpc2l0b3IpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNXZWJB
c3NlbWJseVRhYmxlKTsKKwogYm9vbCBKU1dlYkFzc2VtYmx5VGFibGU6Omdyb3codWludDMyX3Qg
ZGVsdGEsIEpTVmFsdWUgZGVmYXVsdFZhbHVlKQogewogICAgIGlmIChkZWx0YSA9PSAwKQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseVRhYmxlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseVRh
YmxlLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L0pTV2ViQXNzZW1ibHlUYWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNzAsNyArNzAsNyBAQCBw
dWJsaWM6CiBwcml2YXRlOgogICAgIEpTV2ViQXNzZW1ibHlUYWJsZShWTSYsIFN0cnVjdHVyZSos
IFJlZjxXYXNtOjpUYWJsZT4mJik7CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOwotICAg
IHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBE
RUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgUmVmPFdhc206OlRhYmxlPiBtX3RhYmxlOwog
fTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rp
b24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFz
c2VtYmx5RnVuY3Rpb24uY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTQ1Miw3ICs0NTIsOCBAQCBXZWJBc3NlbWJseUZ1bmN0aW9uOjpXZWJBc3NlbWJseUZ1bmN0aW9u
CiAgICAgLCBtX2ltcG9ydGFibGVGdW5jdGlvbiB7IHNpZ25hdHVyZUluZGV4LCB3YXNtVG9XYXNt
RW50cnlwb2ludExvYWRMb2NhdGlvbiB9CiB7IH0KIAotdm9pZCBXZWJBc3NlbWJseUZ1bmN0aW9u
Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1w
bGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBXZWJBc3NlbWJseUZ1bmN0aW9uOjp2aXNpdENo
aWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgV2ViQXNz
ZW1ibHlGdW5jdGlvbiogdGhpc09iamVjdCA9IGpzQ2FzdDxXZWJBc3NlbWJseUZ1bmN0aW9uKj4o
Y2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkp
OwpAQCAtNDYxLDYgKzQ2Miw4IEBAIHZvaWQgV2ViQXNzZW1ibHlGdW5jdGlvbjo6dmlzaXRDaGls
ZHJlbigKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2pzVG9XYXNtSUNDYWxsZWUp
OwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oV2ViQXNzZW1ibHlGdW5jdGlvbik7CisKIHZv
aWQgV2ViQXNzZW1ibHlGdW5jdGlvbjo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCiB7CiAgICAgc3Rh
dGljX2Nhc3Q8V2ViQXNzZW1ibHlGdW5jdGlvbio+KGNlbGwpLT5XZWJBc3NlbWJseUZ1bmN0aW9u
Ojp+V2ViQXNzZW1ibHlGdW5jdGlvbigpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uaAkocmV2aXNpb24gMjcyODMwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNi0y
MDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
Ni0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtODYsNyArODYsNyBAQCBwdWJsaWM6CiAgICAgV2FzbTo6SW5zdGFu
Y2UqIHByZXZpb3VzSW5zdGFuY2UoQ2FsbEZyYW1lKik7CiAKIHByaXZhdGU6Ci0gICAgc3RhdGlj
IHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVf
VklTSVRfQ0hJTERSRU47CiAgICAgV2ViQXNzZW1ibHlGdW5jdGlvbihWTSYsIE5hdGl2ZUV4ZWN1
dGFibGUqLCBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSosIFdhc206OkNhbGxlZSYganNFbnRy
eXBvaW50LCBXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9uOjpMb2FkTG9jYXRpb24gZW50cnlw
b2ludExvYWRMb2NhdGlvbiwgV2FzbTo6U2lnbmF0dXJlSW5kZXgpOwogCiAgICAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGpzQ2FsbEVudHJ5cG9pbnRTbG93KCk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uQmFzZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1i
bHlGdW5jdGlvbkJhc2UuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uQmFzZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
NDEsNyArNDEsOCBAQCBXZWJBc3NlbWJseUZ1bmN0aW9uQmFzZTo6V2ViQXNzZW1ibHlGdW5jCiAg
ICAgOiBCYXNlKHZtLCBleGVjdXRhYmxlLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSkKIHsgfQog
Ci12b2lkIFdlYkFzc2VtYmx5RnVuY3Rpb25CYXNlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2Vs
bCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9p
ZCBXZWJBc3NlbWJseUZ1bmN0aW9uQmFzZTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxs
LCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFdlYkFzc2VtYmx5RnVuY3Rpb25CYXNlKiB0aGlz
T2JqZWN0ID0ganNDYXN0PFdlYkFzc2VtYmx5RnVuY3Rpb25CYXNlKj4oY2VsbCk7CiAgICAgQVNT
RVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNDksNiArNTAs
OCBAQCB2b2lkIFdlYkFzc2VtYmx5RnVuY3Rpb25CYXNlOjp2aXNpdENoaWxkCiAgICAgdmlzaXRv
ci5hcHBlbmQodGhpc09iamVjdC0+bV9pbnN0YW5jZSk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElM
RFJFTihXZWJBc3NlbWJseUZ1bmN0aW9uQmFzZSk7CisKIHZvaWQgV2ViQXNzZW1ibHlGdW5jdGlv
bkJhc2U6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgTmF0aXZlRXhlY3V0YWJsZSogZXhlY3V0YWJs
ZSwgdW5zaWduZWQgbGVuZ3RoLCBjb25zdCBTdHJpbmcmIG5hbWUsIEpTV2ViQXNzZW1ibHlJbnN0
YW5jZSogaW5zdGFuY2UpCiB7CiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0sIGV4ZWN1dGFi
bGUsIGxlbmd0aCwgbmFtZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9X
ZWJBc3NlbWJseUZ1bmN0aW9uQmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb25CYXNlLmgJKHJldmlzaW9uIDI3MjgzMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb25CYXNl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDE3LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC00Niw3ICs0Niw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMg
cHRyZGlmZl90IG9mZnNldE9mSW5zdGFuY2UoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoV2Vi
QXNzZW1ibHlGdW5jdGlvbkJhc2UsIG1faW5zdGFuY2UpOyB9CiAKIHByb3RlY3RlZDoKLSAgICBz
dGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVD
TEFSRV9WSVNJVF9DSElMRFJFTjsKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgTmF0aXZl
RXhlY3V0YWJsZSosIHVuc2lnbmVkIGxlbmd0aCwgY29uc3QgU3RyaW5nJiBuYW1lLCBKU1dlYkFz
c2VtYmx5SW5zdGFuY2UqKTsKICAgICBXZWJBc3NlbWJseUZ1bmN0aW9uQmFzZShWTSYsIE5hdGl2
ZUV4ZWN1dGFibGUqLCBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSopOwogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZVJlY29yZC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1
bGVSZWNvcmQuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZVJlY29yZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTkgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03
OCw3ICs3OCw4IEBAIHZvaWQgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmZpbmlzaENyZWEKICAg
ICB9CiB9CiAKLXZvaWQgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OnZpc2l0Q2hpbGRyZW4oSlND
ZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0
b3I+Cit2b2lkIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjp2aXNpdENoaWxkcmVuSW1wbChKU0Nl
bGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgV2ViQXNzZW1ibHlNb2R1bGVSZWNv
cmQqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8V2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQqPihjZWxsKTsK
ICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC04
OCw2ICs4OSw4IEBAIHZvaWQgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OnZpc2l0Q2hpbGQKICAg
ICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2V4cG9ydHNPYmplY3QpOwogfQogCitERUZJ
TkVfVklTSVRfQ0hJTERSRU4oV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQpOworCiB2b2lkIFdlYkFz
c2VtYmx5TW9kdWxlUmVjb3JkOjpwcmVwYXJlTGluayhWTSYgdm0sIEpTV2ViQXNzZW1ibHlJbnN0
YW5jZSogaW5zdGFuY2UpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoIW1faW5zdGFuY2UpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJs
eU1vZHVsZVJlY29yZC5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZVJlY29yZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE5IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
NjksNyArNjksNyBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0dsb2Jh
bE9iamVjdCosIFZNJiwgY29uc3QgV2FzbTo6TW9kdWxlSW5mb3JtYXRpb24mKTsKIAotICAgIHN0
YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNM
QVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgV3JpdGVCYXJyaWVyPEpTV2ViQXNzZW1ibHlJbnN0
YW5jZT4gbV9pbnN0YW5jZTsKICAgICBXcml0ZUJhcnJpZXI8SlNPYmplY3Q+IG1fc3RhcnRGdW5j
dGlvbjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5V3Jh
cHBlckZ1bmN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9XZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9u
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTctMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY3LDcgKzY3LDggQEAgU3RydWN0dXJlKiBXZWJBc3Nl
bWJseVdyYXBwZXJGdW5jdGlvbjo6YwogICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwg
Z2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKEpTRnVuY3Rpb25UeXBlLCBTdHJ1Y3R1
cmVGbGFncyksIGluZm8oKSk7CiB9CiAKLXZvaWQgV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb246
OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBs
YXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uOjp2
aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAg
V2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8V2ViQXNzZW1i
bHlXcmFwcGVyRnVuY3Rpb24qPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRT
KHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC03Niw2ICs3Nyw4IEBAIHZvaWQgV2ViQXNzZW1ibHlX
cmFwcGVyRnVuY3Rpb246OnZpc2l0Q2gKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5t
X2Z1bmN0aW9uKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKFdlYkFzc2VtYmx5V3JhcHBl
ckZ1bmN0aW9uKTsKKwogSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGNhbGxXZWJBc3NlbWJseVdy
YXBwZXJGdW5jdGlvbiwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSog
Y2FsbEZyYW1lKSkKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5
V3JhcHBlckZ1bmN0aW9uLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMTkgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC01OSw3ICs1OSw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgV2ViQXNzZW1ibHlXcmFw
cGVyRnVuY3Rpb24oVk0mLCBOYXRpdmVFeGVjdXRhYmxlKiwgSlNHbG9iYWxPYmplY3QqLCBTdHJ1
Y3R1cmUqLCBXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9uKTsKICAgICB2b2lkIGZpbmlzaENy
ZWF0aW9uKFZNJiwgTmF0aXZlRXhlY3V0YWJsZSosIHVuc2lnbmVkIGxlbmd0aCwgY29uc3QgU3Ry
aW5nJiBuYW1lLCBKU09iamVjdCosIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSopOwotICAgIHN0YXRp
YyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJF
X1ZJU0lUX0NISUxEUkVOOwogCiAgICAgV3JpdGVCYXJyaWVyPEpTT2JqZWN0PiBtX2Z1bmN0aW9u
OwogICAgIC8vIEl0J3Mgc2FmZSB0byBqdXN0IGhvbGQgdGhlIHJhdyBXYXNtVG9XYXNtSW1wb3J0
YWJsZUZ1bmN0aW9uIGJlY2F1c2Ugd2UgaGF2ZSBhIHJlZmVyZW5jZQpJbmRleDogU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmNwcAkocmV2
aXNpb24gMjcyODMwKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2Jq
ZWN0U3RvcmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTUtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTcyOCw3ICs3MjgsOCBAQCB2b2lkIElEQk9iamVj
dFN0b3JlOjpyb2xsYmFja0ZvclZlcnNpb25DCiAgICAgfQogfQogCi12b2lkIElEQk9iamVjdFN0
b3JlOjp2aXNpdFJlZmVyZW5jZWRJbmRleGVzKFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBjb25zdAor
dGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSURCT2JqZWN0U3RvcmU6OnZpc2l0UmVm
ZXJlbmNlZEluZGV4ZXMoVmlzaXRvciYgdmlzaXRvcikgY29uc3QKIHsKICAgICBMb2NrZXI8TG9j
az4gbG9ja2VyKG1fcmVmZXJlbmNlZEluZGV4TG9jayk7CiAgICAgZm9yIChhdXRvJiBpbmRleCA6
IG1fcmVmZXJlbmNlZEluZGV4ZXMudmFsdWVzKCkpCkBAIC03MzcsNiArNzM4LDkgQEAgdm9pZCBJ
REJPYmplY3RTdG9yZTo6dmlzaXRSZWZlcmVuY2VkSW5kZQogICAgICAgICB2aXNpdG9yLmFkZE9w
YXF1ZVJvb3QoaW5kZXguZ2V0KCkpOwogfQogCit0ZW1wbGF0ZSB2b2lkIElEQk9iamVjdFN0b3Jl
Ojp2aXNpdFJlZmVyZW5jZWRJbmRleGVzKEFic3RyYWN0U2xvdFZpc2l0b3ImKSBjb25zdDsKK3Rl
bXBsYXRlIHZvaWQgSURCT2JqZWN0U3RvcmU6OnZpc2l0UmVmZXJlbmNlZEluZGV4ZXMoU2xvdFZp
c2l0b3ImKSBjb25zdDsKKwogdm9pZCBJREJPYmplY3RTdG9yZTo6cmVuYW1lUmVmZXJlbmNlZElu
ZGV4KElEQkluZGV4JiBpbmRleCwgY29uc3QgU3RyaW5nJiBuZXdOYW1lKQogewogICAgIExPRyhJ
bmRleGVkREIsICJJREJPYmplY3RTdG9yZTo6cmVuYW1lUmVmZXJlbmNlZEluZGV4Iik7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3Jl
LmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQk9iamVjdFN0b3JlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTA5LDcgKzEwOSw3IEBAIHB1YmxpYzoK
ICAgICB2b2lkIHJlZigpOwogICAgIHZvaWQgZGVyZWYoKTsKIAotICAgIHZvaWQgdmlzaXRSZWZl
cmVuY2VkSW5kZXhlcyhKU0M6OlNsb3RWaXNpdG9yJikgY29uc3Q7CisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVmlzaXRvcj4gdm9pZCB2aXNpdFJlZmVyZW5jZWRJbmRleGVzKFZpc2l0b3ImKSBjb25z
dDsKICAgICB2b2lkIHJlbmFtZVJlZmVyZW5jZWRJbmRleChJREJJbmRleCYsIGNvbnN0IFN0cmlu
ZyYgbmV3TmFtZSk7CiAKIHByaXZhdGU6CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb24uY3BwCShyZXZpc2lvbiAyNzI4MzApCisr
KyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIw
MTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1
LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0xNDU1LDcgKzE0NTUsOCBAQCB2b2lkIElEQlRyYW5zYWN0aW9uOjpj
b25uZWN0aW9uQ2xvc2VkRnJvCiAgICAgZmlyZU9uQWJvcnQoKTsKIH0KIAotdm9pZCBJREJUcmFu
c2FjdGlvbjo6dmlzaXRSZWZlcmVuY2VkT2JqZWN0U3RvcmVzKEpTQzo6U2xvdFZpc2l0b3ImIHZp
c2l0b3IpIGNvbnN0Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBJREJUcmFuc2Fj
dGlvbjo6dmlzaXRSZWZlcmVuY2VkT2JqZWN0U3RvcmVzKFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0
CiB7CiAgICAgTG9ja2VyPExvY2s+IGxvY2tlcihtX3JlZmVyZW5jZWRPYmplY3RTdG9yZUxvY2sp
OwogICAgIGZvciAoYXV0byYgb2JqZWN0U3RvcmUgOiBtX3JlZmVyZW5jZWRPYmplY3RTdG9yZXMu
dmFsdWVzKCkpCkBAIC0xNDY0LDYgKzE0NjUsOSBAQCB2b2lkIElEQlRyYW5zYWN0aW9uOjp2aXNp
dFJlZmVyZW5jZWRPYmplCiAgICAgICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChvYmplY3RTdG9y
ZS5nZXQoKSk7CiB9CiAKK3RlbXBsYXRlIHZvaWQgSURCVHJhbnNhY3Rpb246OnZpc2l0UmVmZXJl
bmNlZE9iamVjdFN0b3JlcyhKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0
OwordGVtcGxhdGUgdm9pZCBJREJUcmFuc2FjdGlvbjo6dmlzaXRSZWZlcmVuY2VkT2JqZWN0U3Rv
cmVzKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0OworCiB2b2lkIElEQlRyYW5zYWN0
aW9uOjpoYW5kbGVQZW5kaW5nT3BlcmF0aW9ucygpCiB7CiAgICAgQVNTRVJUKGNhbkN1cnJlbnRU
aHJlYWRBY2Nlc3NUaHJlYWRMb2NhbERhdGEobV9kYXRhYmFzZS0+b3JpZ2luVGhyZWFkKCkpKTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNh
Y3Rpb24uaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCVHJhbnNhY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xNDksNyArMTQ5LDcgQEAgcHVi
bGljOgogCiAgICAgdm9pZCBjb25uZWN0aW9uQ2xvc2VkRnJvbVNlcnZlcihjb25zdCBJREJFcnJv
ciYpOwogCi0gICAgdm9pZCB2aXNpdFJlZmVyZW5jZWRPYmplY3RTdG9yZXMoSlNDOjpTbG90Vmlz
aXRvciYpIGNvbnN0OworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgdmlzaXRS
ZWZlcmVuY2VkT2JqZWN0U3RvcmVzKFZpc2l0b3ImKSBjb25zdDsKIAogICAgIFdFQkNPUkVfRVhQ
T1JUIHN0YXRpYyBzdGQ6OmF0b21pYzx1bnNpZ25lZD4gbnVtYmVyT2ZJREJUcmFuc2FjdGlvbnM7
CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9CdWZmZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9CdWZm
ZXIuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1
ZGlvL0F1ZGlvQnVmZmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAg
KiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE1NCwxMiArMTU0LDE2IEBAIEV4Y2Vw
dGlvbk9yPEpTQzo6SlNWYWx1ZT4gQXVkaW9CdWZmZXI6OmcKICAgICByZXR1cm4gY29uc3RydWN0
SlNBcnJheSgpOwogfQogCi12b2lkIEF1ZGlvQnVmZmVyOjp2aXNpdENoYW5uZWxXcmFwcGVycyhK
U0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3Zv
aWQgQXVkaW9CdWZmZXI6OnZpc2l0Q2hhbm5lbFdyYXBwZXJzKFZpc2l0b3ImIHZpc2l0b3IpCiB7
CiAgICAgZm9yIChhdXRvJiBjaGFubmVsV3JhcHBlciA6IG1fY2hhbm5lbFdyYXBwZXJzKQogICAg
ICAgICBjaGFubmVsV3JhcHBlci52aXNpdCh2aXNpdG9yKTsKIH0KIAordGVtcGxhdGUgdm9pZCBB
dWRpb0J1ZmZlcjo6dmlzaXRDaGFubmVsV3JhcHBlcnMoSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9y
Jik7Cit0ZW1wbGF0ZSB2b2lkIEF1ZGlvQnVmZmVyOjp2aXNpdENoYW5uZWxXcmFwcGVycyhKU0M6
OlNsb3RWaXNpdG9yJik7CisKIFJlZlB0cjxGbG9hdDMyQXJyYXk+IEF1ZGlvQnVmZmVyOjpjaGFu
bmVsRGF0YSh1bnNpZ25lZCBjaGFubmVsSW5kZXgpCiB7CiAgICAgaWYgKGNoYW5uZWxJbmRleCA+
PSBtX2NoYW5uZWxzLnNpemUoKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVk
aW8vQXVkaW9CdWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmF1ZGlvL0F1ZGlvQnVmZmVyLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViYXVkaW8vQXVkaW9CdWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsx
LDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTc1LDcgKzc1LDcg
QEAgcHVibGljOgogCiAgICAgc2l6ZV90IG1lbW9yeUNvc3QoKSBjb25zdDsKIAotICAgIHZvaWQg
dmlzaXRDaGFubmVsV3JhcHBlcnMoSlNDOjpTbG90VmlzaXRvciYpOworICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFZpc2l0b3I+IHZvaWQgdmlzaXRDaGFubmVsV3JhcHBlcnMoVmlzaXRvciYpOwogICAg
IAogcHJpdmF0ZToKICAgICBBdWRpb0J1ZmZlcih1bnNpZ25lZCBudW1iZXJPZkNoYW5uZWxzLCBz
aXplX3QgbGVuZ3RoLCBmbG9hdCBzYW1wbGVSYXRlLCBMZWdhY3lQcmV2ZW50RGV0YWNoaW5nID0g
TGVnYWN5UHJldmVudERldGFjaGluZzo6Tm8pOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvRE9NR0NPdXRwdXRDb25zdHJhaW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9ET01HQ091dHB1dENvbnN0cmFpbnQuY3BwCShyZXZpc2lvbiAyNzI4
MzApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9ET01HQ091dHB1dENvbnN0cmFpbnQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OSw3ICs0OSw3IEBAIERPTUdDT3V0cHV0Q29uc3RyYWlu
dDo6fkRPTUdDT3V0cHV0Q29uc3QKIHsKIH0KIAotdm9pZCBET01HQ091dHB1dENvbnN0cmFpbnQ6
OmV4ZWN1dGVJbXBsKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBET01HQ091dHB1dENvbnN0
cmFpbnQ6OmV4ZWN1dGVJbXBsKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAg
SGVhcCYgaGVhcCA9IG1fdm0uaGVhcDsKICAgICAKQEAgLTYwLDcgKzYwLDcgQEAgdm9pZCBET01H
Q091dHB1dENvbnN0cmFpbnQ6OmV4ZWN1dGVJbXBsKAogICAgIAogICAgIG1fY2xpZW50RGF0YS5m
b3JFYWNoT3V0cHV0Q29uc3RyYWludFNwYWNlKAogICAgICAgICBbJl0gKFN1YnNwYWNlJiBzdWJz
cGFjZSkgewotICAgICAgICAgICAgYXV0byBmdW5jID0gW10gKFNsb3RWaXNpdG9yJiB2aXNpdG9y
LCBIZWFwQ2VsbCogaGVhcENlbGwsIEhlYXBDZWxsOjpLaW5kKSB7CisgICAgICAgICAgICBhdXRv
IGZ1bmMgPSBbXSAoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvciwgSGVhcENlbGwqIGhlYXBD
ZWxsLCBIZWFwQ2VsbDo6S2luZCkgewogICAgICAgICAgICAgICAgIFNldFJvb3RNYXJrUmVhc29u
U2NvcGUgcm9vdFNjb3BlKHZpc2l0b3IsIFJvb3RNYXJrUmVhc29uOjpET01HQ091dHB1dCk7CiAg
ICAgICAgICAgICAgICAgSlNDZWxsKiBjZWxsID0gc3RhdGljX2Nhc3Q8SlNDZWxsKj4oaGVhcENl
bGwpOwogICAgICAgICAgICAgICAgIGNlbGwtPm1ldGhvZFRhYmxlKHZpc2l0b3Iudm0oKSktPnZp
c2l0T3V0cHV0Q29uc3RyYWludHMoY2VsbCwgdmlzaXRvcik7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9ET01HQ091dHB1dENvbnN0cmFpbnQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9ET01HQ091dHB1dENvbnN0cmFpbnQuaAkocmV2aXNpb24g
MjcyODMwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvRE9NR0NPdXRwdXRDb25zdHJh
aW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDE3LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00Miw3ICs0Miw3IEBAIHB1YmxpYzoKICAgICB+RE9N
R0NPdXRwdXRDb25zdHJhaW50KCk7CiAgICAgCiBwcm90ZWN0ZWQ6Ci0gICAgdm9pZCBleGVjdXRl
SW1wbChKU0M6OlNsb3RWaXNpdG9yJikgb3ZlcnJpZGU7CisgICAgdm9pZCBleGVjdXRlSW1wbChK
U0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKSBvdmVycmlkZTsKIAogcHJpdmF0ZToKICAgICBKU0M6
OlZNJiBtX3ZtOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNBYm9ydENvbnRy
b2xsZXJDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTQWJvcnRDb250cm9sbGVyQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNBYm9ydENvbnRyb2xsZXJDdXN0b20uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyogQ29weXJpZ2h0IChDKSAyMDE5LTIwMjEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogKgogKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0yOCw5ICsyOCwxMyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgSlNBYm9ydENv
bnRyb2xsZXI6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0
b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0Fib3J0Q29udHJvbGxlcjo6
dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB2aXNpdG9y
LmFkZE9wYXF1ZVJvb3QoJndyYXBwZWQoKS5zaWduYWwoKSk7CiB9CiAKK3RlbXBsYXRlIHZvaWQg
SlNBYm9ydENvbnRyb2xsZXI6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6QWJzdHJhY3RT
bG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU0Fib3J0Q29udHJvbGxlcjo6dmlzaXRBZGRp
dGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYpOworCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Fib3J0U2lnbmFsQ3VzdG9t
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Fib3J0U2ln
bmFsQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNBYm9ydFNpZ25hbEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorKiBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAqCiAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI4LDcgKzI4LDcgQEAKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi1ib29sIEpTQWJvcnRTaWduYWxPd25lcjo6aXNSZWFjaGFi
bGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQq
LCBKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQorYm9vbCBK
U0Fib3J0U2lnbmFsT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxl
PEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiB2
aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQogewogICAgIGF1dG8mIGFib3J0U2lnbmFsID0g
SlNDOjpqc0Nhc3Q8SlNBYm9ydFNpZ25hbCo+KGhhbmRsZS5zbG90KCktPmFzQ2VsbCgpKS0+d3Jh
cHBlZCgpOwogICAgIGlmIChhYm9ydFNpZ25hbC5pc0ZpcmluZ0V2ZW50TGlzdGVuZXJzKCkpIHsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXR0ckN1c3RvbS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNBdHRyQ3VzdG9tLmNwcAkocmV2
aXNpb24gMjcyODMwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNBdHRyQ3VzdG9t
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDcsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDA3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMywxMCArMzMsMTQgQEAKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi12b2lkIEpTQXR0cjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlND
OjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lk
IEpTQXR0cjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAg
ICBpZiAoRWxlbWVudCogZWxlbWVudCA9IHdyYXBwZWQoKS5vd25lckVsZW1lbnQoKSkKICAgICAg
ICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHJvb3QoZWxlbWVudCkpOwogfQogCit0ZW1wbGF0ZSB2
b2lkIEpTQXR0cjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpBYnN0cmFjdFNsb3RWaXNp
dG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTQXR0cjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlND
OjpTbG90VmlzaXRvciYpOworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0F1ZGlvQnVmZmVyQ3VzdG9tLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0F1ZGlvQnVmZmVyQ3VzdG9tLmNwcAkocmV2
aXNpb24gMjcyODMwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNBdWRpb0J1ZmZl
ckN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAyMC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzEsMTEgKzMxLDE1IEBACiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCi12b2lkIEpTQXVkaW9CdWZmZXI6OnZpc2l0
QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5h
bWUgVmlzaXRvcj4KK3ZvaWQgSlNBdWRpb0J1ZmZlcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4o
VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB3cmFwcGVkKCkudmlzaXRDaGFubmVsV3JhcHBlcnMo
dmlzaXRvcik7CiB9CiAKK3RlbXBsYXRlIHZvaWQgSlNBdWRpb0J1ZmZlcjo6dmlzaXRBZGRpdGlv
bmFsQ2hpbGRyZW4oQWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU0F1ZGlv
QnVmZmVyOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYpOworCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoV0VCX0FVRElPKQpJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNBdWRpb1RyYWNrQ3VzdG9tLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0F1ZGlvVHJhY2tDdXN0b20uY3BwCShy
ZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0F1ZGlvVHJh
Y2tDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTEtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM1LDExICszNSwxNSBAQAogbmFtZXNwYWNlIFdl
YkNvcmUgewogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAotdm9pZCBKU0F1ZGlvVHJhY2s6OnZpc2l0
QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5h
bWUgVmlzaXRvcj4KK3ZvaWQgSlNBdWRpb1RyYWNrOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihW
aXNpdG9yJiB2aXNpdG9yKQogewogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChyb290KCZ3cmFw
cGVkKCkpKTsKIH0KIAordGVtcGxhdGUgdm9pZCBKU0F1ZGlvVHJhY2s6OnZpc2l0QWRkaXRpb25h
bENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNBdWRpb1Ry
YWNrOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYpOworCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCiAKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNBdWRpb1RyYWNrTGlzdEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNBdWRpb1RyYWNrTGlzdEN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjgzMCkK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXVkaW9UcmFja0xpc3RDdXN0b20uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEt
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTM2LDExICszNiwxNSBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogdXNp
bmcgbmFtZXNwYWNlIEpTQzsKIAotdm9pZCBKU0F1ZGlvVHJhY2tMaXN0Ojp2aXNpdEFkZGl0aW9u
YWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0
b3I+Cit2b2lkIEpTQXVkaW9UcmFja0xpc3Q6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0
b3ImIHZpc2l0b3IpCiB7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHJvb3Qod3JhcHBlZCgp
LmVsZW1lbnQoKSkpOwogfQogCit0ZW1wbGF0ZSB2b2lkIEpTQXVkaW9UcmFja0xpc3Q6OnZpc2l0
QWRkaXRpb25hbENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQg
SlNBdWRpb1RyYWNrTGlzdDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsK
KwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTQXVkaW9Xb3JrbGV0UHJvY2Vzc29yQ3VzdG9tLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0F1ZGlvV29ya2xldFByb2Nlc3NvckN1
c3RvbS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTQXVkaW9Xb3JrbGV0UHJvY2Vzc29yQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIwLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMSw3ICsz
MSw4IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCi12b2lk
IEpTQXVkaW9Xb3JrbGV0UHJvY2Vzc29yOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90Vmlz
aXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTQXVkaW9X
b3JrbGV0UHJvY2Vzc29yOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9y
KQogewogICAgIGF1dG8mIHByb2Nlc3NvciA9IHdyYXBwZWQoKTsKICAgICBwcm9jZXNzb3IuanNJ
bnB1dHNXcmFwcGVyKCkudmlzaXQodmlzaXRvcik7CkBAIC0zOSw2ICs0MCw5IEBAIHZvaWQgSlNB
dWRpb1dvcmtsZXRQcm9jZXNzb3I6OnZpc2l0QWRkaXQKICAgICBwcm9jZXNzb3IuanNQYXJhbVZh
bHVlc1dyYXBwZXIoKS52aXNpdCh2aXNpdG9yKTsKIH0KIAordGVtcGxhdGUgdm9pZCBKU0F1ZGlv
V29ya2xldFByb2Nlc3Nvcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oQWJzdHJhY3RTbG90Vmlz
aXRvciYpOwordGVtcGxhdGUgdm9pZCBKU0F1ZGlvV29ya2xldFByb2Nlc3Nvcjo6dmlzaXRBZGRp
dGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQog
CiAjZW5kaWYgLy8gRU5BQkxFKFdFQl9BVURJTykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTQ1NTUnVsZUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNDU1NSdWxlQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDU1NSdWxlQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDggQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC01MSwxMSArNTEsMTUgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVz
cGFjZSBKU0M7CiAKLXZvaWQgSlNDU1NSdWxlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90
VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTQ1NT
UnVsZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB2
aXNpdG9yLmFkZE9wYXF1ZVJvb3Qocm9vdCgmd3JhcHBlZCgpKSk7CiB9CiAKK3RlbXBsYXRlIHZv
aWQgSlNDU1NSdWxlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihBYnN0cmFjdFNsb3RWaXNpdG9y
Jik7Cit0ZW1wbGF0ZSB2b2lkIEpTQ1NTUnVsZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xv
dFZpc2l0b3ImKTsKKwogSlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTR2xvYmFsT2JqZWN0Kiwg
SlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmPENTU1J1bGU+JiYgcnVsZSkKIHsK
ICAgICBzd2l0Y2ggKHJ1bGUtPnR5cGUoKSkgewpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNDU1NSdWxlTGlzdEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNDU1NSdWxlTGlzdEN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjgzMCkK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ1NTUnVsZUxpc3RDdXN0b20uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOS0y
MDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5
LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHQgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTM2LDcgKzM2LDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5n
IG5hbWVzcGFjZSBKU0M7CiAKLWJvb2wgSlNDU1NSdWxlTGlzdE93bmVyOjppc1JlYWNoYWJsZUZy
b21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIFNs
b3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQorYm9vbCBKU0NTU1J1bGVM
aXN0T3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5r
bm93bj4gaGFuZGxlLCB2b2lkKiwgQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3Qg
Y2hhcioqIHJlYXNvbikKIHsKICAgICBKU0NTU1J1bGVMaXN0KiBqc0NTU1J1bGVMaXN0ID0ganND
YXN0PEpTQ1NTUnVsZUxpc3QqPihoYW5kbGUuc2xvdCgpLT5hc0NlbGwoKSk7CiAgICAgaWYgKCFq
c0NTU1J1bGVMaXN0LT5oYXNDdXN0b21Qcm9wZXJ0aWVzKGpzQ1NTUnVsZUxpc3QtPnZtKCkpKQpJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDU1NTdHlsZURlY2xhcmF0aW9uQ3Vz
dG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NTU1N0
eWxlRGVjbGFyYXRpb25DdXN0b20uY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0NTU1N0eWxlRGVjbGFyYXRpb25DdXN0b20uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtNTEsOSArNTEsMTMgQEAgdm9pZCogcm9vdChDU1NTdHlsZURlY2xhcmF0aW9u
KiBzdHlsZSkKICAgICByZXR1cm4gc3R5bGU7CiB9CiAKLXZvaWQgSlNDU1NTdHlsZURlY2xhcmF0
aW9uOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBs
YXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTQ1NTU3R5bGVEZWNsYXJhdGlvbjo6dmlzaXRB
ZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB2aXNpdG9yLmFkZE9w
YXF1ZVJvb3Qocm9vdCgmd3JhcHBlZCgpKSk7CiB9CiAKK3RlbXBsYXRlIHZvaWQgSlNDU1NTdHls
ZURlY2xhcmF0aW9uOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihBYnN0cmFjdFNsb3RWaXNpdG9y
Jik7Cit0ZW1wbGF0ZSB2b2lkIEpTQ1NTU3R5bGVEZWNsYXJhdGlvbjo6dmlzaXRBZGRpdGlvbmFs
Q2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDog
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDYWxsYmFja0RhdGEuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2FsbGJhY2tEYXRhLmNwcAkocmV2aXNp
b24gMjcyODMwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDYWxsYmFja0RhdGEu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwNy0yMDA5LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAwNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtOTUsMTIgKzk1LDE2IEBAIEpTVmFsdWUgSlND
YWxsYmFja0RhdGE6Omludm9rZUNhbGxiYWNrKEoKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi12
b2lkIEpTQ2FsbGJhY2tEYXRhV2Vhazo6dmlzaXRKU0Z1bmN0aW9uKEpTQzo6U2xvdFZpc2l0b3Im
IHZpc3RvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTQ2FsbGJhY2tEYXRh
V2Vhazo6dmlzaXRKU0Z1bmN0aW9uKFZpc2l0b3ImIHZpc2l0b3IpCiB7Ci0gICAgdmlzdG9yLmFw
cGVuZChtX2NhbGxiYWNrKTsKKyAgICB2aXNpdG9yLmFwcGVuZChtX2NhbGxiYWNrKTsKIH0KIAot
Ym9vbCBKU0NhbGxiYWNrRGF0YVdlYWs6OldlYWtPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVl
Um9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCwgU2xvdFZpc2l0
b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCit0ZW1wbGF0ZSB2b2lkIEpTQ2FsbGJh
Y2tEYXRhV2Vhazo6dmlzaXRKU0Z1bmN0aW9uKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpOwor
dGVtcGxhdGUgdm9pZCBKU0NhbGxiYWNrRGF0YVdlYWs6OnZpc2l0SlNGdW5jdGlvbihKU0M6OlNs
b3RWaXNpdG9yJik7CisKK2Jvb2wgSlNDYWxsYmFja0RhdGFXZWFrOjpXZWFrT3duZXI6OmlzUmVh
Y2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNv
bnRleHQsIEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24p
CiB7CiAgICAgaWYgKFVOTElLRUxZKHJlYXNvbikpCiAgICAgICAgICpyZWFzb24gPSAiQ29udGV4
dCBpcyBvcGFxdWUgcm9vdCI7IC8vIEZJWE1FOiB3aGF0IGlzIHRoZSBjb250ZXh0LgpJbmRleDog
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDYWxsYmFja0RhdGEuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NhbGxiYWNrRGF0YS5oCShyZXZpc2lvbiAy
NzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NhbGxiYWNrRGF0YS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNy0y
MDA5LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAwNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTEzLDExICsxMTMsMTEgQEAgcHVibGljOgogICAgICAg
ICByZXR1cm4gSlNDYWxsYmFja0RhdGE6Omludm9rZUNhbGxiYWNrKCpnbG9iYWxPYmplY3QsIGNh
bGxiYWNrKCksIHRoaXNWYWx1ZSwgYXJncywgY2FsbGJhY2tUeXBlLCBmdW5jdGlvbk5hbWUsIHJl
dHVybmVkRXhjZXB0aW9uKTsKICAgICB9CiAKLSAgICB2b2lkIHZpc2l0SlNGdW5jdGlvbihKU0M6
OlNsb3RWaXNpdG9yJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCB2aXNp
dEpTRnVuY3Rpb24oVmlzaXRvciYpOwogCiBwcml2YXRlOgogICAgIGNsYXNzIFdlYWtPd25lciA6
IHB1YmxpYyBKU0M6OldlYWtIYW5kbGVPd25lciB7Ci0gICAgICAgIGJvb2wgaXNSZWFjaGFibGVG
cm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCwg
SlNDOjpTbG90VmlzaXRvciYsIGNvbnN0IGNoYXIqKikgb3ZlcnJpZGU7CisgICAgICAgIGJvb2wg
aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9p
ZCogY29udGV4dCwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiwgY29uc3QgY2hhcioqKSBvdmVy
cmlkZTsKICAgICB9OwogICAgIFdlYWtPd25lciBtX3dlYWtPd25lcjsKICAgICBKU0M6OldlYWs8
SlNDOjpKU09iamVjdD4gbV9jYWxsYmFjazsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREN1c3Rv
bS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI0LDcgKzI0LDcgQEAK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1ib29sIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
T3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93
bj4gaGFuZGxlLCB2b2lkKiwgSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioq
IHJlYXNvbikKK2Jvb2wgSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRPd25lcjo6aXNSZWFjaGFi
bGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQq
LCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24p
CiB7CiAgICAgaWYgKFVOTElLRUxZKHJlYXNvbikpCiAgICAgICAgICpyZWFzb24gPSAiQ2FudmFz
IGlzIG9wYXF1ZSByb290IjsKQEAgLTM0LDkgKzM0LDEzIEBAIGJvb2wgSlNDYW52YXNSZW5kZXJp
bmdDb250ZXh0MkRPd25lcjo6aXMKICAgICByZXR1cm4gdmlzaXRvci5jb250YWluc09wYXF1ZVJv
b3Qocm9vdCk7CiB9CiAKLXZvaWQgSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnZpc2l0QWRk
aXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBl
bmFtZSBWaXNpdG9yPgordm9pZCBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6dmlzaXRBZGRp
dGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB2aXNpdG9yLmFkZE9wYXF1
ZVJvb3Qocm9vdCh3cmFwcGVkKCkuY2FudmFzKCkpKTsKIH0KIAordGVtcGxhdGUgdm9pZCBKU0Nh
bnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpBYnN0
cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJik7CisKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3Vz
dG9tRXZlbnRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTQ3VzdG9tRXZlbnRDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0N1c3RvbUV2ZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxOCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTQyLDEwICs0MiwxNCBAQCBKU0M6OkpTVmFsdWUgSlNDdXN0b21FdmVudDo6ZGV0YWls
KEpTQzo6CiAgICAgfSk7CiB9CiAKLXZvaWQgSlNDdXN0b21FdmVudDo6dmlzaXRBZGRpdGlvbmFs
Q2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZp
c2l0b3I+Cit2b2lkIEpTQ3VzdG9tRXZlbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0
b3ImIHZpc2l0b3IpCiB7CiAgICAgd3JhcHBlZCgpLmRldGFpbCgpLnZpc2l0KHZpc2l0b3IpOwog
ICAgIHdyYXBwZWQoKS5jYWNoZWREZXRhaWwoKS52aXNpdCh2aXNpdG9yKTsKIH0KIAordGVtcGxh
dGUgdm9pZCBKU0N1c3RvbUV2ZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OkFic3Ry
YWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNDdXN0b21FdmVudDo6dmlzaXRBZGRp
dGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYpOworCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJ1aWx0aW5Db25zdHJ1
Y3RvckJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
RE9NQnVpbHRpbkNvbnN0cnVjdG9yQmFzZS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQnVpbHRpbkNvbnN0cnVjdG9yQmFzZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMTk5OS0y
MDAxIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA0
LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykg
MjAwNC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqICBDb3B5cmlnaHQg
KEMpIDIwMDcgU2FtdWVsIFdlaW5pZyA8c2FtQHdlYmtpdC5vcmc+CiAgKiAgQ29weXJpZ2h0IChD
KSAyMDEzIE1pY2hhZWwgUHJ1ZXR0IDxtaWNoYWVsQDY4ay5vcmc+CiAgKgpAQCAtNDUsNyArNDUs
OCBAQCB2b2lkIEpTRE9NQnVpbHRpbkNvbnN0cnVjdG9yQmFzZTo6Y2FsbEZ1CiAgICAgSlNDOjpj
YWxsKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAmZnVuY3Rpb24sIGNhbGxEYXRhLCAmdGhpc09iamVj
dCwgYXJndW1lbnRzKTsKIH0KIAotdm9pZCBKU0RPTUJ1aWx0aW5Db25zdHJ1Y3RvckJhc2U6OnZp
c2l0Q2hpbGRyZW4oSlNDOjpKU0NlbGwqIGNlbGwsIEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3Ip
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0RPTUJ1aWx0aW5Db25zdHJ1Y3Rv
ckJhc2U6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQzo6SlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNp
dG9yKQogewogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNET01CdWlsdGluQ29uc3Ry
dWN0b3JCYXNlKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2Jq
ZWN0LCBpbmZvKCkpOwpAQCAtNTMsNiArNTQsOCBAQCB2b2lkIEpTRE9NQnVpbHRpbkNvbnN0cnVj
dG9yQmFzZTo6dmlzaXRDCiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9pbml0aWFs
aXplRnVuY3Rpb24pOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNET01CdWlsdGluQ29u
c3RydWN0b3JCYXNlKTsKKwogSlNDOjpJc29TdWJzcGFjZSogSlNET01CdWlsdGluQ29uc3RydWN0
b3JCYXNlOjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCiB7CiAgICAgcmV0dXJuICZzdGF0
aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpLT5kb21CdWlsdGluQ29uc3Ry
dWN0b3JTcGFjZSgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CdWls
dGluQ29uc3RydWN0b3JCYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNET01CdWlsdGluQ29uc3RydWN0b3JCYXNlLmgJKHJldmlzaW9uIDI3MjgzMCkKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQnVpbHRpbkNvbnN0cnVjdG9yQmFzZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDIw
MTUsIDIwMTYgQ2Fub24gSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogIENvcHlyaWdodCAo
QykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChD
KSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFs
IFB1YmxpYwpAQCAtNDIsNyArNDIsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgewogICAgIH0KIAotICAg
IHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9y
Jik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIEpTQzo6SlNGdW5jdGlvbiog
aW5pdGlhbGl6ZUZ1bmN0aW9uKCk7CiAgICAgdm9pZCBzZXRJbml0aWFsaXplRnVuY3Rpb24oSlND
OjpWTSYsIEpTQzo6SlNGdW5jdGlvbiYpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNET01HbG9iYWxPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0LmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01HbG9iYWxPYmplY3QuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOC0yMDE4IEFwcGxl
IEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDIxIEFw
cGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMjM4LDcgKzIzOCw4IEBAIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIEpTRE9NR2xv
YmFsT2JqZWMKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotdm9pZCBKU0RPTUdsb2JhbE9iamVj
dDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVt
cGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNET01HbG9iYWxPYmplY3Q6OnZpc2l0Q2hp
bGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU0RPTUds
b2JhbE9iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGNlbGwp
OwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAg
LTI2MCw2ICsyNjEsOCBAQCB2b2lkIEpTRE9NR2xvYmFsT2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpT
CiAgICAgdGhpc09iamVjdC0+bV9idWlsdGluSW50ZXJuYWxGdW5jdGlvbnMudmlzaXQodmlzaXRv
cik7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU0RPTUdsb2JhbE9iamVjdCk7CisKIHZv
aWQgSlNET01HbG9iYWxPYmplY3Q6OnByb21pc2VSZWplY3Rpb25UcmFja2VyKEpTR2xvYmFsT2Jq
ZWN0KiBqc0dsb2JhbE9iamVjdCwgSlNQcm9taXNlKiBwcm9taXNlLCBKU1Byb21pc2VSZWplY3Rp
b25PcGVyYXRpb24gb3BlcmF0aW9uKQogewogICAgIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3
Zy5vcmcvbXVsdGlwYWdlL3dlYmFwcGFwaXMuaHRtbCN0aGUtaG9zdHByb21pc2VyZWplY3Rpb250
cmFja2VyLWltcGxlbWVudGF0aW9uCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0RPTUdsb2JhbE9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTRE9NR2xvYmFsT2JqZWN0LmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTggQXBwbGUgSW5jLiBBbGwg
UmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMjEgQXBwbGUgSW5jLiBB
bGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02
OSw3ICs2OSw3IEBAIHB1YmxpYzoKICAgICAvLyBNYWtlIGJpbmRpbmcgY29kZSBnZW5lcmF0aW9u
IGVhc2llci4KICAgICBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KCkgeyByZXR1cm4g
dGhpczsgfQogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0M6OkpTQ2VsbCosIEpT
Qzo6U2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgRE9N
V3JhcHBlcldvcmxkJiB3b3JsZCgpIHsgcmV0dXJuIG1fd29ybGQuZ2V0KCk7IH0KICAgICBib29s
IHdvcmxkSXNOb3JtYWwoKSBjb25zdCB7IHJldHVybiBtX3dvcmxkSXNOb3JtYWw7IH0KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR3VhcmRlZE9iamVjdC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR3VhcmRlZE9iamVjdC5oCShy
ZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUd1YXJk
ZWRPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00MCw3ICs0MCw4IEBAIHB1YmxpYzoKIAogICAgIGJv
b2wgaXNTdXNwZW5kZWQoKSBjb25zdCB7IHJldHVybiAhbV9ndWFyZGVkIHx8ICFjYW5JbnZva2VD
YWxsYmFjaygpOyB9IC8vIFRoZSB3cmFwcGVyIHdvcmxkIGhhcyBnb25lIGF3YXkgb3IgYWN0aXZl
IERPTSBvYmplY3RzIGhhdmUgYmVlbiBzdXNwZW5kZWQuCiAKLSAgICB2b2lkIHZpc2l0QWdncmVn
YXRlKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsgdmlzaXRvci5hcHBlbmQobV9ndWFyZGVk
KTsgfQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+CisgICAgdm9pZCB2aXNpdEFnZ3Jl
Z2F0ZShWaXNpdG9yJiB2aXNpdG9yKSB7IHZpc2l0b3IuYXBwZW5kKG1fZ3VhcmRlZCk7IH0KIAog
ICAgIEpTQzo6SlNWYWx1ZSBndWFyZGVkT2JqZWN0KCkgY29uc3QgeyByZXR1cm4gbV9ndWFyZGVk
LmdldCgpOyB9CiAgICAgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCgpIGNvbnN0IHsg
cmV0dXJuIG1fZ2xvYmFsT2JqZWN0LmdldCgpOyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0RPTVF1YWRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTRE9NUXVhZEN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NUXVhZEN1c3RvbS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIxIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtMzMsNyArMzMsOCBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogdXNpbmcgbmFtZXNwYWNlIEpT
QzsKIAotdm9pZCBKU0RPTVF1YWQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9y
JiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNET01RdWFkOjp2
aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHZpc2l0b3Iu
YWRkT3BhcXVlUm9vdChjb25zdF9jYXN0PERPTVBvaW50Kj4oJndyYXBwZWQoKS5wMSgpKSk7CiAg
ICAgdmlzaXRvci5hZGRPcGFxdWVSb290KGNvbnN0X2Nhc3Q8RE9NUG9pbnQqPigmd3JhcHBlZCgp
LnAyKCkpKTsKQEAgLTQxLDQgKzQyLDcgQEAgdm9pZCBKU0RPTVF1YWQ6OnZpc2l0QWRkaXRpb25h
bENoaWxkcmVuKAogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChjb25zdF9jYXN0PERPTVBvaW50
Kj4oJndyYXBwZWQoKS5wNCgpKSk7CiB9CiAKLX0KK3RlbXBsYXRlIHZvaWQgSlNET01RdWFkOjp2
aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2
b2lkIEpTRE9NUXVhZDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNET01XaW5kb3dDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTRE9NV2luZG93Q3VzdG9tLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNy0yMDIwIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDIxIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTExNiw3ICsxMTYsOCBA
QCBKU0NfREVGSU5FX0NVU1RPTV9HRVRURVIoanNET01XaW5kb3dJbnN0CiAgICAgcmV0dXJuIG5v
bkNhY2hpbmdTdGF0aWNGdW5jdGlvbkdldHRlckltcGw8anNET01XaW5kb3dJbnN0YW5jZUZ1bmN0
aW9uX3Bvc3RNZXNzYWdlLCAyPihnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSk7CiB9CiAKLXZv
aWQgSlNET01XaW5kb3c6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNp
dG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNET01XaW5kb3c6OnZpc2l0
QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgaWYgKEZyYW1lKiBm
cmFtZSA9IHdyYXBwZWQoKS5mcmFtZSgpKQogICAgICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qo
ZnJhbWUpOwpAQCAtMTI5LDYgKzEzMCw5IEBAIHZvaWQgSlNET01XaW5kb3c6OnZpc2l0QWRkaXRp
b25hbENoaWxkcmUKICAgICB3cmFwcGVkKCkudmlzaXRKU0V2ZW50TGlzdGVuZXJzKHZpc2l0b3Ip
OwogfQogCit0ZW1wbGF0ZSB2b2lkIEpTRE9NV2luZG93Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJl
bihBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTRE9NV2luZG93Ojp2aXNp
dEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYpOworCiAjaWYgRU5BQkxFKFVTRVJfTUVT
U0FHRV9IQU5ETEVSUykKIEpTQ19ERUZJTkVfQ1VTVE9NX0dFVFRFUihqc0RPTVdpbmRvd193ZWJr
aXQsIChKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUg
dGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpKQogewpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNEZXByZWNhdGVkQ1NTT01WYWx1ZUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNEZXByZWNhdGVkQ1NTT01WYWx1ZUN1c3RvbS5jcHAJ
KHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGVwcmVj
YXRlZENTU09NVmFsdWVDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAwNy0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzUsNyArMzUsNyBA
QAogbmFtZXNwYWNlIFdlYkNvcmUgewogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAotYm9vbCBKU0Rl
cHJlY2F0ZWRDU1NPTVZhbHVlT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6
SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgU2xvdFZpc2l0b3ImIHZpc2l0b3Is
IGNvbnN0IGNoYXIqKiByZWFzb24pCitib29sIEpTRGVwcmVjYXRlZENTU09NVmFsdWVPd25lcjo6
aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5k
bGUsIHZvaWQqLCBBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVh
c29uKQogewogICAgIEpTRGVwcmVjYXRlZENTU09NVmFsdWUqIGpzQ1NTVmFsdWUgPSBqc0Nhc3Q8
SlNEZXByZWNhdGVkQ1NTT01WYWx1ZSo+KGhhbmRsZS5zbG90KCktPmFzQ2VsbCgpKTsKICAgICBp
ZiAoIWpzQ1NTVmFsdWUtPmhhc0N1c3RvbVByb3BlcnRpZXMoanNDU1NWYWx1ZS0+dm0oKSkpCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RvY3VtZW50Q3VzdG9tLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RvY3VtZW50Q3VzdG9tLmNw
cAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNEb2N1
bWVudEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDA3LTIwMDksIDIwMTEsIDIwMTYsIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC05MSwxMSArOTEsMTUgQEAg
SlNWYWx1ZSB0b0pTKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYgogICAgIHJldHVybiB0b0pT
TmV3bHlDcmVhdGVkKGxleGljYWxHbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdCwgUmVmPERvY3Vt
ZW50Pihkb2N1bWVudCkpOwogfQogCi12b2lkIEpTRG9jdW1lbnQ6OnZpc2l0QWRkaXRpb25hbENo
aWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4K
K3ZvaWQgSlNEb2N1bWVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRv
cikKIHsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qoc3RhdGljX2Nhc3Q8U2NyaXB0RXhlY3V0
aW9uQ29udGV4dCo+KCZ3cmFwcGVkKCkpKTsKIH0KIAordGVtcGxhdGUgdm9pZCBKU0RvY3VtZW50
Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0
ZSB2b2lkIEpTRG9jdW1lbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJik7
CisKIHZvaWQgSlNEb2N1bWVudDo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6
ZXImIGFuYWx5emVyKQogewogICAgIEJhc2U6OmFuYWx5emVIZWFwKGNlbGwsIGFuYWx5emVyKTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXJyb3JFdmVudEN1c3RvbS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFcnJvckV2ZW50Q3Vz
dG9tLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNFcnJvckV2ZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8q
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMTggWXVzdWtlIFN1enVraSA8eXVzdWtlc3V6dWtpQHNsb3dz
dGFydC5vcmc+LgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjgsOSArMjksMTMg
QEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIEpTRXJyb3JFdmVudDo6dmlzaXRBZGRp
dGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVu
YW1lIFZpc2l0b3I+Cit2b2lkIEpTRXJyb3JFdmVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4o
VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB3cmFwcGVkKCkub3JpZ2luYWxFcnJvcigpLnZpc2l0
KHZpc2l0b3IpOwogfQogCit0ZW1wbGF0ZSB2b2lkIEpTRXJyb3JFdmVudDo6dmlzaXRBZGRpdGlv
bmFsQ2hpbGRyZW4oSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpT
RXJyb3JFdmVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYpOwor
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0V2ZW50TGlzdGVuZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTRXZlbnRMaXN0ZW5lci5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRMaXN0ZW5lci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNiArMSw2IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMjAwMSBQZXRlciBLZWxseSAocG1r
QHBvc3QuY29tKQotICogIENvcHlyaWdodCAoQykgMjAwMy0yMDE5IEFwcGxlIEluYy4gQWxsIFJp
Z2h0cyBSZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAyMSBBcHBsZSBJbmMuIEFs
bCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCkBAIC03OCw3ICs3OCw4IEBA
IEpTT2JqZWN0KiBKU0V2ZW50TGlzdGVuZXI6OmluaXRpYWxpemVKU0YKICAgICByZXR1cm4gbnVs
bHB0cjsKIH0KIAotdm9pZCBKU0V2ZW50TGlzdGVuZXI6OnZpc2l0SlNGdW5jdGlvbihTbG90Vmlz
aXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+CitpbmxpbmUgdm9pZCBK
U0V2ZW50TGlzdGVuZXI6OnZpc2l0SlNGdW5jdGlvbkltcGwoVmlzaXRvciYgdmlzaXRvcikKIHsK
ICAgICAvLyBJZiBtX3dyYXBwZXIgaXMgbnVsbCwgd2UgYXJlIG5vdCBrZWVwaW5nIG1fanNGdW5j
dGlvbiBhbGl2ZS4KICAgICBpZiAoIW1fd3JhcHBlcikKQEAgLTg3LDYgKzg4LDkgQEAgdm9pZCBK
U0V2ZW50TGlzdGVuZXI6OnZpc2l0SlNGdW5jdGlvbihTbAogICAgIHZpc2l0b3IuYXBwZW5kKG1f
anNGdW5jdGlvbik7CiB9CiAKK3ZvaWQgSlNFdmVudExpc3RlbmVyOjp2aXNpdEpTRnVuY3Rpb24o
QWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikgeyB2aXNpdEpTRnVuY3Rpb25JbXBsKHZpc2l0
b3IpOyB9Cit2b2lkIEpTRXZlbnRMaXN0ZW5lcjo6dmlzaXRKU0Z1bmN0aW9uKFNsb3RWaXNpdG9y
JiB2aXNpdG9yKSB7IHZpc2l0SlNGdW5jdGlvbkltcGwodmlzaXRvcik7IH0KKwogc3RhdGljIHZv
aWQgaGFuZGxlQmVmb3JlVW5sb2FkRXZlbnRSZXR1cm5WYWx1ZShCZWZvcmVVbmxvYWRFdmVudCYg
ZXZlbnQsIGNvbnN0IFN0cmluZyYgcmV0dXJuVmFsdWUpCiB7CiAgICAgaWYgKHJldHVyblZhbHVl
LmlzTnVsbCgpKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudExpc3Rl
bmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudExp
c3RlbmVyLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTRXZlbnRMaXN0ZW5lci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAq
ICBDb3B5cmlnaHQgKEMpIDIwMDEgUGV0ZXIgS2VsbHkgKHBta0Bwb3N0LmNvbSkKLSAqICBDb3B5
cmlnaHQgKEMpIDIwMDMtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAg
Q29weXJpZ2h0IChDKSAyMDAzLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExl
c3NlciBHZW5lcmFsIFB1YmxpYwpAQCAtNjIsNiArNjIsOSBAQCBwdWJsaWM6CiAKIHByaXZhdGU6
CiAgICAgdmlydHVhbCBKU0M6OkpTT2JqZWN0KiBpbml0aWFsaXplSlNGdW5jdGlvbihTY3JpcHRF
eGVjdXRpb25Db250ZXh0JikgY29uc3Q7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
PiB2b2lkIHZpc2l0SlNGdW5jdGlvbkltcGwoVmlzaXRvciYpOworICAgIHZvaWQgdmlzaXRKU0Z1
bmN0aW9uKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpIGZpbmFsOwogICAgIHZvaWQgdmlzaXRK
U0Z1bmN0aW9uKEpTQzo6U2xvdFZpc2l0b3ImKSBmaW5hbDsKIAogcHJvdGVjdGVkOgpJbmRleDog
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudFRhcmdldEN1c3RvbS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudFRhcmdldEN1c3RvbS5j
cHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZl
bnRUYXJnZXRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAwOC0yMDE3IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDIxIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNzIsOSArNzIsMTMgQEAgc3Rk
Ojp1bmlxdWVfcHRyPEpTRXZlbnRUYXJnZXRXcmFwcGVyPiBqcwogICAgIHJldHVybiBudWxscHRy
OwogfQogCi12b2lkIEpTRXZlbnRUYXJnZXQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNFdmVu
dFRhcmdldDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAg
ICB3cmFwcGVkKCkudmlzaXRKU0V2ZW50TGlzdGVuZXJzKHZpc2l0b3IpOwogfQogCit0ZW1wbGF0
ZSB2b2lkIEpTRXZlbnRUYXJnZXQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEFic3RyYWN0U2xv
dFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNFdmVudFRhcmdldDo6dmlzaXRBZGRpdGlvbmFs
Q2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDog
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNGZXRjaEV2ZW50Q3VzdG9tLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0ZldGNoRXZlbnRDdXN0b20uY3Bw
CShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0ZldGNo
RXZlbnRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMwLDExICszMCwxNSBAQAogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLXZvaWQgSlNGZXRjaEV2ZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJl
bihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4K
K3ZvaWQgSlNGZXRjaEV2ZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNp
dG9yKQogewogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdCgmd3JhcHBlZCgpLnJlcXVlc3QoKSk7
CiB9CiAKLX0KK3RlbXBsYXRlIHZvaWQgSlNGZXRjaEV2ZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGls
ZHJlbihKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNGZXRjaEV2
ZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJik7CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0hUTUxDYW52YXNFbGVtZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxDYW52YXNFbGVtZW50Q3VzdG9tLmNwcAkocmV2aXNp
b24gMjcyODMwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MQ2FudmFzRWxl
bWVudEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAyMC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzEsOSArMzEsMTMgQEAKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi12b2lkIEpTSFRNTENhbnZhc0VsZW1lbnQ6OnZpc2l0QWRkaXRpb25hbENo
aWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNp
dG9yPgordm9pZCBKU0hUTUxDYW52YXNFbGVtZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihW
aXNpdG9yJiB2aXNpdG9yKQogewogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChzdGF0aWNfY2Fz
dDxDYW52YXNCYXNlKj4oJndyYXBwZWQoKSkpOwogfQogCit0ZW1wbGF0ZSB2b2lkIEpTSFRNTENh
bnZhc0VsZW1lbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6QWJzdHJhY3RTbG90Vmlz
aXRvciYpOwordGVtcGxhdGUgdm9pZCBKU0hUTUxDYW52YXNFbGVtZW50Ojp2aXNpdEFkZGl0aW9u
YWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJik7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTFRlbXBsYXRlRWxlbWVudEN1
c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1M
VGVtcGxhdGVFbGVtZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNIVE1MVGVtcGxhdGVFbGVtZW50Q3VzdG9tLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCkBAIC0zNywxMCArMzgsMTQgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVz
cGFjZSBKU0M7CiAKLXZvaWQgSlNIVE1MVGVtcGxhdGVFbGVtZW50Ojp2aXNpdEFkZGl0aW9uYWxD
aGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlz
aXRvcj4KK3ZvaWQgSlNIVE1MVGVtcGxhdGVFbGVtZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJl
bihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGlmIChhdXRvKiBjb250ZW50ID0gd3JhcHBlZCgp
LmNvbnRlbnRJZkF2YWlsYWJsZSgpKQogICAgICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qocm9v
dChjb250ZW50KSk7CiB9CiAKK3RlbXBsYXRlIHZvaWQgSlNIVE1MVGVtcGxhdGVFbGVtZW50Ojp2
aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBs
YXRlIHZvaWQgSlNIVE1MVGVtcGxhdGVFbGVtZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihK
U0M6OlNsb3RWaXNpdG9yJik7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSGlzdG9yeUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIaXN0b3J5Q3VzdG9tLmNwcAkocmV2aXNpb24g
MjcyODMwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIaXN0b3J5Q3VzdG9tLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDgtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDgtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ0LDkgKzQ0LDEzIEBAIEpTVmFsdWUgSlNIaXN0b3J5Ojpz
dGF0ZShKU0dsb2JhbE9iamVjdCYKICAgICB9KTsKIH0KIAotdm9pZCBKU0hpc3Rvcnk6OnZpc2l0
QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5h
bWUgVmlzaXRvcj4KK3ZvaWQgSlNIaXN0b3J5Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNp
dG9yJiB2aXNpdG9yKQogewogICAgIHdyYXBwZWQoKS5jYWNoZWRTdGF0ZUZvckdDKCkudmlzaXQo
dmlzaXRvcik7CiB9CiAKK3RlbXBsYXRlIHZvaWQgSlNIaXN0b3J5Ojp2aXNpdEFkZGl0aW9uYWxD
aGlsZHJlbihBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTSGlzdG9yeTo6
dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKKwogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJDdXJzb3JDdXN0
b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCQ3Vy
c29yQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNJREJDdXJzb3JDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTUwLDcgKzUwLDggQEAg
SlNDOjpKU1ZhbHVlIEpTSURCQ3Vyc29yOjpwcmltYXJ5S2V5KEpTQwogICAgIH0pOwogfQogCi12
b2lkIEpTSURCQ3Vyc29yOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlz
aXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTSURCQ3Vyc29yOjp2aXNp
dEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGF1dG8mIGN1cnNv
ciA9IHdyYXBwZWQoKTsKICAgICBpZiAoYXV0byogcmVxdWVzdCA9IGN1cnNvci5yZXF1ZXN0KCkp
CkBAIC01OSw2ICs2MCw5IEBAIHZvaWQgSlNJREJDdXJzb3I6OnZpc2l0QWRkaXRpb25hbENoaWxk
cmUKICAgICBjdXJzb3IucHJpbWFyeUtleVdyYXBwZXIoKS52aXNpdCh2aXNpdG9yKTsKIH0KIAor
dGVtcGxhdGUgdm9pZCBKU0lEQkN1cnNvcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oQWJzdHJh
Y3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU0lEQkN1cnNvcjo6dmlzaXRBZGRpdGlv
bmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKKwogSlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpT
Qzo6SlNHbG9iYWxPYmplY3QqLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWY8
SURCQ3Vyc29yPiYmIGN1cnNvcikKIHsKICAgICBpZiAoaXM8SURCQ3Vyc29yV2l0aFZhbHVlPihj
dXJzb3IpKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJDdXJzb3JXaXRo
VmFsdWVDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTSURCQ3Vyc29yV2l0aFZhbHVlQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJDdXJzb3JXaXRoVmFsdWVDdXN0b20uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTQzLDEyICs0MywxNiBAQCBKU0M6OkpTVmFsdWUgSlNJREJDdXJzb3JXaXRo
VmFsdWU6OnZhbHVlCiAgICAgfSk7CiB9CiAKLXZvaWQgSlNJREJDdXJzb3JXaXRoVmFsdWU6OnZp
c2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlw
ZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNJREJDdXJzb3JXaXRoVmFsdWU6OnZpc2l0QWRkaXRpb25h
bENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNJREJDdXJzb3I6OnZpc2l0QWRk
aXRpb25hbENoaWxkcmVuKHZpc2l0b3IpOwogICAgIHdyYXBwZWQoKS52YWx1ZVdyYXBwZXIoKS52
aXNpdCh2aXNpdG9yKTsKIH0KIAordGVtcGxhdGUgdm9pZCBKU0lEQkN1cnNvcldpdGhWYWx1ZTo6
dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oQWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUg
dm9pZCBKU0lEQkN1cnNvcldpdGhWYWx1ZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZp
c2l0b3ImKTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKElO
REVYRURfREFUQUJBU0UpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQklu
ZGV4Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0lEQkluZGV4Q3VzdG9tLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNJREJJbmRleEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzQsMTEgKzM0
LDE1IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCi12b2lk
IEpTSURCSW5kZXg6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9y
KQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNJREJJbmRleDo6dmlzaXRBZGRp
dGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB2aXNpdG9yLmFkZE9wYXF1
ZVJvb3Qoc3RhdGljX2Nhc3Q8SURCSW5kZXgmPih3cmFwcGVkKCkpLm9iamVjdFN0b3JlQXNPcGFx
dWVSb290KCkpOwogfQogCit0ZW1wbGF0ZSB2b2lkIEpTSURCSW5kZXg6OnZpc2l0QWRkaXRpb25h
bENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNJREJJbmRl
eDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKKwogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQk9iamVjdFN0b3JlQ3VzdG9tLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQk9iamVjdFN0b3JlQ3Vz
dG9tLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNJREJPYmplY3RTdG9yZUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBA
CiAvKgogICogQ29weXJpZ2h0IChDKSAyMDEyIE1pY2hhZWwgUHJ1ZXR0IDxtaWNoYWVsQDY4ay5v
cmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQpAQCAtMzYsMTEgKzM3LDE1IEBA
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCi12b2lkIEpTSURC
T2JqZWN0U3RvcmU6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9y
KQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNJREJPYmplY3RTdG9yZTo6dmlz
aXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBzdGF0aWNfY2Fz
dDxJREJPYmplY3RTdG9yZSY+KHdyYXBwZWQoKSkudmlzaXRSZWZlcmVuY2VkSW5kZXhlcyh2aXNp
dG9yKTsKIH0KIAotfQordGVtcGxhdGUgdm9pZCBKU0lEQk9iamVjdFN0b3JlOjp2aXNpdEFkZGl0
aW9uYWxDaGlsZHJlbihBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTSURC
T2JqZWN0U3RvcmU6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0lEQlJlcXVlc3RDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTSURCUmVxdWVzdEN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjgzMCkK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCUmVxdWVzdEN1c3RvbS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE5IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOS0yMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtODksMTIgKzg5LDE3IEBAIEpTQzo6SlNWYWx1ZSBKU0lEQlJlcXVlc3Q6OnJl
c3VsdChKU0M6OkoKICAgICB9KTsKIH0KIAotdm9pZCBKU0lEQlJlcXVlc3Q6OnZpc2l0QWRkaXRp
b25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlz
aXRvcj4KK3ZvaWQgSlNJREJSZXF1ZXN0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9y
JiB2aXNpdG9yKQogewogICAgIGF1dG8mIHJlcXVlc3QgPSB3cmFwcGVkKCk7CiAgICAgcmVxdWVz
dC5yZXN1bHRXcmFwcGVyKCkudmlzaXQodmlzaXRvcik7CiAgICAgcmVxdWVzdC5jdXJzb3JXcmFw
cGVyKCkudmlzaXQodmlzaXRvcik7CiB9CiAKLX0KK3RlbXBsYXRlIHZvaWQgSlNJREJSZXF1ZXN0
Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0
ZSB2b2lkIEpTSURCUmVxdWVzdDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3Im
KTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCiAjZW5kaWYgLy8gRU5BQkxFKElOREVYRURf
REFUQUJBU0UpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQlRyYW5zYWN0
aW9uQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0lEQlRyYW5zYWN0aW9uQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNJREJUcmFuc2FjdGlvbkN1c3RvbS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIxIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtMzQsMTEgKzM0LDE1IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2Ug
SlNDOwogCi12b2lkIEpTSURCVHJhbnNhY3Rpb246OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNJ
REJUcmFuc2FjdGlvbjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikK
IHsKICAgICBzdGF0aWNfY2FzdDxJREJUcmFuc2FjdGlvbiY+KHdyYXBwZWQoKSkudmlzaXRSZWZl
cmVuY2VkT2JqZWN0U3RvcmVzKHZpc2l0b3IpOwogfQogCi19Cit0ZW1wbGF0ZSB2b2lkIEpTSURC
VHJhbnNhY3Rpb246OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0b3Im
KTsKK3RlbXBsYXRlIHZvaWQgSlNJREJUcmFuc2FjdGlvbjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRy
ZW4oU2xvdFZpc2l0b3ImKTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW50ZXJzZWN0aW9uT2JzZXJ2ZXJDdXN0
b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW50ZXJz
ZWN0aW9uT2JzZXJ2ZXJDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0ludGVyc2VjdGlvbk9ic2VydmVyQ3VzdG9tLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMjAgSWdhbGlh
IFMuTC4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMwLDEwICszMSwxNCBAQAog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgSlNJbnRlcnNlY3Rpb25PYnNlcnZlcjo6dmlz
aXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRl
PHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTSW50ZXJzZWN0aW9uT2JzZXJ2ZXI6OnZpc2l0QWRk
aXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgaWYgKGF1dG8qIGNhbGxi
YWNrID0gd3JhcHBlZCgpLmNhbGxiYWNrQ29uY3VycmVudGx5KCkpCiAgICAgICAgIGNhbGxiYWNr
LT52aXNpdEpTRnVuY3Rpb24odmlzaXRvcik7CiB9CiAKLX0KK3RlbXBsYXRlIHZvaWQgSlNJbnRl
cnNlY3Rpb25PYnNlcnZlcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpBYnN0cmFjdFNs
b3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTSW50ZXJzZWN0aW9uT2JzZXJ2ZXI6OnZpc2l0
QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImKTsKKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJbnRlcnNlY3Rpb25P
YnNlcnZlckVudHJ5Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0ludGVyc2VjdGlvbk9ic2VydmVyRW50cnlDdXN0b20uY3BwCShyZXZpc2lvbiAy
NzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0ludGVyc2VjdGlvbk9ic2Vy
dmVyRW50cnlDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAq
IENvcHlyaWdodCAoQykgMjAxOCBHb29nbGUgTExDLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzAsNyArMzEsOCBAQAogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLXZvaWQgSlNJbnRlcnNlY3Rpb25PYnNlcnZlckVudHJ5Ojp2aXNpdEFkZGl0
aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5h
bWUgVmlzaXRvcj4KK3ZvaWQgSlNJbnRlcnNlY3Rpb25PYnNlcnZlckVudHJ5Ojp2aXNpdEFkZGl0
aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHZpc2l0b3IuYWRkT3BhcXVl
Um9vdChyb290KHdyYXBwZWQoKS50YXJnZXQoKSkpOwogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9v
dCh3cmFwcGVkKCkuYm91bmRpbmdDbGllbnRSZWN0KCkpOwpAQCAtMzgsNCArNDAsNyBAQCB2b2lk
IEpTSW50ZXJzZWN0aW9uT2JzZXJ2ZXJFbnRyeTo6dmlzaXRBCiAgICAgdmlzaXRvci5hZGRPcGFx
dWVSb290KHdyYXBwZWQoKS5yb290Qm91bmRzKCkpOwogfQogCi19Cit0ZW1wbGF0ZSB2b2lkIEpT
SW50ZXJzZWN0aW9uT2JzZXJ2ZXJFbnRyeTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpB
YnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTSW50ZXJzZWN0aW9uT2JzZXJ2
ZXJFbnRyeTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYpOworCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U01lc3NhZ2VDaGFubmVsQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU01lc3NhZ2VDaGFubmVsQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcyODMwKQor
KysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNZXNzYWdlQ2hhbm5lbEN1c3RvbS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4
LCAyMDA5IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAwOC0yMDIxIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMzMsNyArMzMsOCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLXZvaWQgSlNNZXNzYWdlQ2hhbm5lbDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpT
bG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpT
TWVzc2FnZUNoYW5uZWw6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3Ip
CiB7CiAgICAgaWYgKE1lc3NhZ2VQb3J0KiBwb3J0ID0gd3JhcHBlZCgpLnBvcnQxKCkpCiAgICAg
ICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChwb3J0KTsKQEAgLTQyLDYgKzQzLDkgQEAgdm9pZCBK
U01lc3NhZ2VDaGFubmVsOjp2aXNpdEFkZGl0aW9uYWxDaAogICAgICAgICB2aXNpdG9yLmFkZE9w
YXF1ZVJvb3QocG9ydCk7CiB9CiAKK3RlbXBsYXRlIHZvaWQgSlNNZXNzYWdlQ2hhbm5lbDo6dmlz
aXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0
ZSB2b2lkIEpTTWVzc2FnZUNoYW5uZWw6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xv
dFZpc2l0b3ImKTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxF
KENIQU5ORUxfTUVTU0FHSU5HKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNN
ZXNzYWdlRXZlbnRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTTWVzc2FnZUV2ZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNZXNzYWdlRXZlbnRDdXN0b20uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTggQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zIGFyZQpAQCAtNzAsNyArNzAsOCBAQCBKU0M6OkpTVmFsdWUgSlNNZXNzYWdlRXZlbnQ6
OmRhdGEoSlNDOjpKCiAgICAgfSk7CiB9CiAKLXZvaWQgSlNNZXNzYWdlRXZlbnQ6OnZpc2l0QWRk
aXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBl
bmFtZSBWaXNpdG9yPgordm9pZCBKU01lc3NhZ2VFdmVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRy
ZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBXVEY6OnN3aXRjaE9uKHdyYXBwZWQoKS5kYXRh
KCksIFsmdmlzaXRvcl0gKGNvbnN0IEpTVmFsdWVJbldyYXBwZWRPYmplY3QmIGRhdGEpIHsKICAg
ICAgICAgZGF0YS52aXNpdCh2aXNpdG9yKTsKQEAgLTg0LDQgKzg1LDcgQEAgdm9pZCBKU01lc3Nh
Z2VFdmVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbAogICAgIHdyYXBwZWQoKS5jYWNoZWRQb3J0cygp
LnZpc2l0KHZpc2l0b3IpOwogfQogCit0ZW1wbGF0ZSB2b2lkIEpTTWVzc2FnZUV2ZW50Ojp2aXNp
dEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRl
IHZvaWQgSlNNZXNzYWdlRXZlbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZp
c2l0b3ImKTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNNZXNzYWdlUG9ydEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNNZXNzYWdlUG9ydEN1c3RvbS5jcHAJKHJldmlzaW9uIDI3
MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWVzc2FnZVBvcnRDdXN0b20u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwOC0yMDA5LCAyMDE2IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAwOC0yMDIxIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqIENv
cHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dApAQCAtMzEsMTEgKzMxLDE1IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2lu
ZyBuYW1lc3BhY2UgSlNDOwogCi12b2lkIEpTTWVzc2FnZVBvcnQ6OnZpc2l0QWRkaXRpb25hbENo
aWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4K
K3ZvaWQgSlNNZXNzYWdlUG9ydDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlz
aXRvcikKIHsKICAgICAvLyBJZiB3ZSBoYXZlIGEgbG9jYWxseSBlbnRhbmdsZWQgcG9ydCwgd2Ug
Y2FuIGRpcmVjdGx5IG1hcmsgaXQgYXMgcmVhY2hhYmxlLiBQb3J0cyB0aGF0IGFyZSByZW1vdGVs
eSBlbnRhbmdsZWQgYXJlIG1hcmtlZCBpbi11c2UgYnkgbWFya0FjdGl2ZU9iamVjdHNGb3JDb250
ZXh0KCkuCiAgICAgaWYgKE1lc3NhZ2VQb3J0KiBwb3J0ID0gd3JhcHBlZCgpLmxvY2FsbHlFbnRh
bmdsZWRQb3J0KCkpCiAgICAgICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChwb3J0KTsKIH0KIAor
dGVtcGxhdGUgdm9pZCBKU01lc3NhZ2VQb3J0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihBYnN0
cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTTWVzc2FnZVBvcnQ6OnZpc2l0QWRk
aXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTXV0YXRpb25PYnNlcnZlckN1c3Rv
bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNdXRhdGlv
bk9ic2VydmVyQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNNdXRhdGlvbk9ic2VydmVyQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCkBA
IC0zOSwxMiArMzksMTYgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBK
U0M7CiAKLXZvaWQgSlNNdXRhdGlvbk9ic2VydmVyOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihK
U0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3Zv
aWQgSlNNdXRhdGlvbk9ic2VydmVyOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2
aXNpdG9yKQogewogICAgIHdyYXBwZWQoKS5jYWxsYmFjaygpLnZpc2l0SlNGdW5jdGlvbih2aXNp
dG9yKTsKIH0KIAotYm9vbCBKU011dGF0aW9uT2JzZXJ2ZXJPd25lcjo6aXNSZWFjaGFibGVGcm9t
T3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBTbG90
VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqcmVhc29uKQordGVtcGxhdGUgdm9pZCBKU011
dGF0aW9uT2JzZXJ2ZXI6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6QWJzdHJhY3RTbG90
VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU011dGF0aW9uT2JzZXJ2ZXI6OnZpc2l0QWRkaXRp
b25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImKTsKKworYm9vbCBKU011dGF0aW9uT2JzZXJ2
ZXJPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtu
b3duPiBoYW5kbGUsIHZvaWQqLCBBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBj
aGFyKipyZWFzb24pCiB7CiAgICAgZm9yIChhdXRvKiBub2RlIDoganNDYXN0PEpTTXV0YXRpb25P
YnNlcnZlcio+KGhhbmRsZS5zbG90KCktPmFzQ2VsbCgpKS0+d3JhcHBlZCgpLm9ic2VydmVkTm9k
ZXMoKSkgewogICAgICAgICBpZiAodmlzaXRvci5jb250YWluc09wYXF1ZVJvb3Qocm9vdChub2Rl
KSkpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTXV0YXRpb25SZWNvcmRD
dXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTXV0
YXRpb25SZWNvcmRDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU011dGF0aW9uUmVjb3JkQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0z
MCw5ICszMCwxMyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgSlNNdXRhdGlvblJl
Y29yZDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikK
K3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTTXV0YXRpb25SZWNvcmQ6OnZpc2l0
QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgd3JhcHBlZCgpLnZp
c2l0Tm9kZXNDb25jdXJyZW50bHkodmlzaXRvcik7CiB9Ci0gICAgCisKK3RlbXBsYXRlIHZvaWQg
SlNNdXRhdGlvblJlY29yZDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpBYnN0cmFjdFNs
b3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTTXV0YXRpb25SZWNvcmQ6OnZpc2l0QWRkaXRp
b25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImKTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOYXZpZ2F0b3JDdXN0b20uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTmF2aWdhdG9yQ3Vz
dG9tLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNOYXZpZ2F0b3JDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMyLDExICszMiwxNSBAQAogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgSlNOYXZpZ2F0b3I6OnZpc2l0QWRkaXRpb25hbENo
aWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNp
dG9yPgordm9pZCBKU05hdmlnYXRvcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYg
dmlzaXRvcikKIHsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qoc3RhdGljX2Nhc3Q8TmF2aWdh
dG9yQmFzZSo+KCZ3cmFwcGVkKCkpKTsKIH0KIAordGVtcGxhdGUgdm9pZCBKU05hdmlnYXRvcjo6
dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1w
bGF0ZSB2b2lkIEpTTmF2aWdhdG9yOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RW
aXNpdG9yJik7CisKICNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQogSlNDOjpKU1ZhbHVlIEpTTmF2
aWdhdG9yOjpnZXRVc2VyTWVkaWEoSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9i
amVjdCwgSlNDOjpDYWxsRnJhbWUmIGNhbGxGcmFtZSkKIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTTm9kZUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNOb2RlQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDktMjAxMCwgMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDct
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTc0LDcgKzc0LDggQEAgdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAogdXNp
bmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAotc3RhdGljIGlubGluZSBib29sIGlzUmVhY2hhYmxl
RnJvbURPTShOb2RlKiBub2RlLCBTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJl
YXNvbikKKy8vc3RhdGljIGlubGluZSBib29sIGlzUmVhY2hhYmxlRnJvbURPTShOb2RlKiBub2Rl
LCBTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikKK3N0YXRpYyBpbmxp
bmUgYm9vbCBpc1JlYWNoYWJsZUZyb21ET00oTm9kZSogbm9kZSwgQWJzdHJhY3RTbG90VmlzaXRv
ciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikKIHsKICAgICBpZiAoIW5vZGUtPmlzQ29u
bmVjdGVkKCkpIHsKICAgICAgICAgaWYgKGlzPEVsZW1lbnQ+KCpub2RlKSkgewpAQCAtMTIzLDcg
KzEyNCw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpc1JlYWNoYWJsZUZyb21ET00oTm8KICAgICBy
ZXR1cm4gdmlzaXRvci5jb250YWluc09wYXF1ZVJvb3Qocm9vdChub2RlKSk7CiB9CiAKLWJvb2wg
SlNOb2RlT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6
VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgU2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIq
KiByZWFzb24pCitib29sIEpTTm9kZU93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhK
U0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIEFic3RyYWN0U2xvdFZpc2l0
b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCiB7CiAgICAgSlNOb2RlKiBqc05vZGUg
PSBqc0Nhc3Q8SlNOb2RlKj4oaGFuZGxlLnNsb3QoKS0+YXNDZWxsKCkpOwogICAgIHJldHVybiBp
c1JlYWNoYWJsZUZyb21ET00oJmpzTm9kZS0+d3JhcHBlZCgpLCB2aXNpdG9yLCByZWFzb24pOwpA
QCAtMTM2LDExICsxMzcsMTUgQEAgSlNTY29wZSogSlNOb2RlOjpwdXNoRXZlbnRIYW5kbGVyU2Nv
cGUoSgogICAgIHJldHVybiBub2RlOwogfQogCi12b2lkIEpTTm9kZTo6dmlzaXRBZGRpdGlvbmFs
Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
Pgordm9pZCBKU05vZGU6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3Ip
CiB7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHJvb3Qod3JhcHBlZCgpKSk7CiB9CiAKK3Rl
bXBsYXRlIHZvaWQgSlNOb2RlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihBYnN0cmFjdFNsb3RW
aXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTTm9kZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4o
U2xvdFZpc2l0b3ImKTsKKwogc3RhdGljIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBjcmVhdGVXcmFw
cGVySW5saW5lKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0RPTUdsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWY8Tm9kZT4mJiBub2RlKQogewogICAgIEFTU0VSVCgh
Z2V0Q2FjaGVkV3JhcHBlcihnbG9iYWxPYmplY3QtPndvcmxkKCksIG5vZGUpKTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUl0ZXJhdG9yQ3VzdG9tLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVJdGVyYXRvckN1c3RvbS5j
cHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9k
ZUl0ZXJhdG9yQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yNSwxMCArMjUsMTQgQEAKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIEpTTm9kZUl0ZXJhdG9yOjp2aXNpdEFkZGl0aW9uYWxD
aGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlz
aXRvcj4KK3ZvaWQgSlNOb2RlSXRlcmF0b3I6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0
b3ImIHZpc2l0b3IpCiB7CiAgICAgaWYgKE5vZGVGaWx0ZXIqIGZpbHRlciA9IHdyYXBwZWQoKS5m
aWx0ZXIoKSkKICAgICAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KGZpbHRlcik7CiB9CiAKLX0K
K3RlbXBsYXRlIHZvaWQgSlNOb2RlSXRlcmF0b3I6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpT
Qzo6QWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU05vZGVJdGVyYXRvcjo6
dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYpOworCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVMaXN0
Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05v
ZGVMaXN0Q3VzdG9tLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNOb2RlTGlzdEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNyw3ICsz
Nyw3IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCi1ib29s
IEpTTm9kZUxpc3RPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8
SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3Qg
Y2hhcioqIHJlYXNvbikKK2Jvb2wgSlNOb2RlTGlzdE93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFx
dWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIEFic3RyYWN0
U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCiB7CiAgICAgSlNOb2Rl
TGlzdCoganNOb2RlTGlzdCA9IGpzQ2FzdDxKU05vZGVMaXN0Kj4oaGFuZGxlLnNsb3QoKS0+YXND
ZWxsKCkpOwogICAgIGlmICghanNOb2RlTGlzdC0+aGFzQ3VzdG9tUHJvcGVydGllcyhqc05vZGVM
aXN0LT52bSgpKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTT2Zmc2NyZWVu
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU09mZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyREN1
c3RvbS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTT2Zmc2NyZWVuQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQ3VzdG9tLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0zMSw3ICsz
MSw3IEBAIGlubGluZSB2b2lkKiByb290KE9mZnNjcmVlbkNhbnZhcyogY2FudmEKICAgICByZXR1
cm4gY2FudmFzOwogfQogCi1ib29sIEpTT2Zmc2NyZWVuQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
T3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93
bj4gaGFuZGxlLCB2b2lkKiwgU2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFz
b24pCitib29sIEpTT2Zmc2NyZWVuQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJET3duZXI6OmlzUmVh
Y2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2
b2lkKiwgQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikK
IHsKICAgICBpZiAoVU5MSUtFTFkocmVhc29uKSkKICAgICAgICAgKnJlYXNvbiA9ICJDYW52YXMg
aXMgb3BhcXVlIHJvb3QiOwpAQCAtNDEsMTEgKzQxLDE1IEBAIGJvb2wgSlNPZmZzY3JlZW5DYW52
YXNSZW5kZXJpbmdDb250ZXh0MkQKICAgICByZXR1cm4gdmlzaXRvci5jb250YWluc09wYXF1ZVJv
b3Qocm9vdCk7CiB9CiAKLXZvaWQgSlNPZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6
OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8
dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNPZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0
MkQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgdmlz
aXRvci5hZGRPcGFxdWVSb290KHJvb3QoJndyYXBwZWQoKS5jYW52YXMoKSkpOwogfQogCit0ZW1w
bGF0ZSB2b2lkIEpTT2Zmc2NyZWVuQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjp2aXNpdEFkZGl0
aW9uYWxDaGlsZHJlbihBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTT2Zm
c2NyZWVuQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihT
bG90VmlzaXRvciYpOworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZgpJbmRleDog
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNQYWludFJlbmRlcmluZ0NvbnRleHQyREN1c3Rv
bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNQYWludFJl
bmRlcmluZ0NvbnRleHQyREN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTUGFpbnRSZW5kZXJpbmdDb250ZXh0MkRDdXN0b20uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTM2LDcgKzM2LDcgQEAgaW5saW5lIHZvaWQqIHJvb3QoQ3VzdG9tUGFpbnRD
YW52YXMqIGNhbgogICAgIHJldHVybiBjYW52YXM7CiB9CiAKLWJvb2wgSlNQYWludFJlbmRlcmlu
Z0NvbnRleHQyRE93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxK
U0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBj
aGFyKiogcmVhc29uKQorYm9vbCBKU1BhaW50UmVuZGVyaW5nQ29udGV4dDJET3duZXI6OmlzUmVh
Y2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2
b2lkKiwgQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikK
IHsKICAgICBpZiAoVU5MSUtFTFkocmVhc29uKSkKICAgICAgICAgKnJlYXNvbiA9ICJDYW52YXMg
aXMgb3BhcXVlIHJvb3QiOwpAQCAtNDYsMTEgKzQ2LDE1IEBAIGJvb2wgSlNQYWludFJlbmRlcmlu
Z0NvbnRleHQyRE93bmVyOjppc1IKICAgICByZXR1cm4gdmlzaXRvci5jb250YWluc09wYXF1ZVJv
b3Qocm9vdCk7CiB9CiAKLXZvaWQgSlNQYWludFJlbmRlcmluZ0NvbnRleHQyRDo6dmlzaXRBZGRp
dGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPgordm9pZCBKU1BhaW50UmVuZGVyaW5nQ29udGV4dDJEOjp2aXNpdEFkZGl0aW9uYWxD
aGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChy
b290KCZ3cmFwcGVkKCkuY2FudmFzKCkpKTsKIH0KIAordGVtcGxhdGUgdm9pZCBKU1BhaW50UmVu
ZGVyaW5nQ29udGV4dDJEOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihBYnN0cmFjdFNsb3RWaXNp
dG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTUGFpbnRSZW5kZXJpbmdDb250ZXh0MkQ6OnZpc2l0QWRk
aXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ICNlbmRpZgogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1BhaW50V29ya2xl
dEdsb2JhbFNjb3BlQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU1BhaW50V29ya2xldEdsb2JhbFNjb3BlQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcy
ODMwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNQYWludFdvcmtsZXRHbG9iYWxT
Y29wZUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxOC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzEsNyArMzEsOCBAQAogbmFtZXNwYWNlIFdl
YkNvcmUgewogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAotdm9pZCBKU1BhaW50V29ya2xldEdsb2Jh
bFNjb3BlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9y
KQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNQYWludFdvcmtsZXRHbG9iYWxT
Y29wZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBh
dXRvIGxvY2tlciA9IGhvbGRMb2NrKHdyYXBwZWQoKS5wYWludERlZmluaXRpb25Mb2NrKCkpOwog
ICAgIGZvciAoYXV0byYgcmVnaXN0ZXJlZCA6IHdyYXBwZWQoKS5wYWludERlZmluaXRpb25NYXAo
KS52YWx1ZXMoKSkgewpAQCAtNDAsNSArNDEsOSBAQCB2b2lkIEpTUGFpbnRXb3JrbGV0R2xvYmFs
U2NvcGU6OnZpc2l0QWRkCiAgICAgfQogfQogCi19Cit0ZW1wbGF0ZSB2b2lkIEpTUGFpbnRXb3Jr
bGV0R2xvYmFsU2NvcGU6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6QWJzdHJhY3RTbG90
VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU1BhaW50V29ya2xldEdsb2JhbFNjb3BlOjp2aXNp
dEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJik7CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKKwogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1Bh
eW1lbnRNZXRob2RDaGFuZ2VFdmVudEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNQYXltZW50TWV0aG9kQ2hhbmdlRXZlbnRDdXN0b20uY3BwCShy
ZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1BheW1lbnRN
ZXRob2RDaGFuZ2VFdmVudEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDEsNyArNDEsOCBAQCBK
U0M6OkpTVmFsdWUgSlNQYXltZW50TWV0aG9kQ2hhbmdlRXZlbnQ6CiAgICAgfSk7CiB9CiAKLXZv
aWQgSlNQYXltZW50TWV0aG9kQ2hhbmdlRXZlbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpT
Qzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9p
ZCBKU1BheW1lbnRNZXRob2RDaGFuZ2VFdmVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlz
aXRvciYgdmlzaXRvcikKIHsKICAgICBXVEY6OnN3aXRjaE9uKHdyYXBwZWQoKS5tZXRob2REZXRh
aWxzKCksIFsmdmlzaXRvcl0oY29uc3QgSlNWYWx1ZUluV3JhcHBlZE9iamVjdCYgbWV0aG9kRGV0
YWlscykgewogICAgICAgICBtZXRob2REZXRhaWxzLnZpc2l0KHZpc2l0b3IpOwpAQCAtNTEsNiAr
NTIsOSBAQCB2b2lkIEpTUGF5bWVudE1ldGhvZENoYW5nZUV2ZW50Ojp2aXNpdEFkCiAgICAgd3Jh
cHBlZCgpLmNhY2hlZE1ldGhvZERldGFpbHMoKS52aXNpdCh2aXNpdG9yKTsKIH0KIAordGVtcGxh
dGUgdm9pZCBKU1BheW1lbnRNZXRob2RDaGFuZ2VFdmVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRy
ZW4oSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTUGF5bWVudE1l
dGhvZENoYW5nZUV2ZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9y
Jik7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShQQVlNRU5U
X1JFUVVFU1QpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1BheW1lbnRSZXNw
b25zZUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNQYXltZW50UmVzcG9uc2VDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU1BheW1lbnRSZXNwb25zZUN1c3RvbS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOC0yMDIxIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMzcsMTEgKzM3LDE1IEBAIEpTQzo6SlNWYWx1ZSBKU1BheW1lbnRSZXNwb25zZTo6ZGV0
YWlscygKICAgICB9KTsKIH0KIAotdm9pZCBKU1BheW1lbnRSZXNwb25zZTo6dmlzaXRBZGRpdGlv
bmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1l
IFZpc2l0b3I+Cit2b2lkIEpTUGF5bWVudFJlc3BvbnNlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJl
bihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHdyYXBwZWQoKS5jYWNoZWREZXRhaWxzKCkudmlz
aXQodmlzaXRvcik7CiB9CiAKK3RlbXBsYXRlIHZvaWQgSlNQYXltZW50UmVzcG9uc2U6OnZpc2l0
QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUg
dm9pZCBKU1BheW1lbnRSZXNwb25zZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90
VmlzaXRvciYpOworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUo
UEFZTUVOVF9SRVFVRVNUKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNQZXJm
b3JtYW5jZU9ic2VydmVyQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU1BlcmZvcm1hbmNlT2JzZXJ2ZXJDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI4
MzApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1BlcmZvcm1hbmNlT2JzZXJ2ZXJD
dXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTgtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMxLDEyICszMSwxNiBAQAogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLXZvaWQgSlNQZXJmb3JtYW5jZU9ic2VydmVyOjp2aXNpdEFkZGl0aW9uYWxDaGls
ZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRv
cj4KK3ZvaWQgSlNQZXJmb3JtYW5jZU9ic2VydmVyOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihW
aXNpdG9yJiB2aXNpdG9yKQogewogICAgIHdyYXBwZWQoKS5jYWxsYmFjaygpLnZpc2l0SlNGdW5j
dGlvbih2aXNpdG9yKTsKIH0KIAotYm9vbCBKU1BlcmZvcm1hbmNlT2JzZXJ2ZXJPd25lcjo6aXNS
ZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUs
IHZvaWQqLCBKU0M6OlNsb3RWaXNpdG9yJiwgY29uc3QgY2hhcioqIHJlYXNvbikKK3RlbXBsYXRl
IHZvaWQgSlNQZXJmb3JtYW5jZU9ic2VydmVyOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6
OkFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNQZXJmb3JtYW5jZU9ic2Vy
dmVyOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJik7CisKK2Jvb2wg
SlNQZXJmb3JtYW5jZU9ic2VydmVyT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpT
Qzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgSlNDOjpBYnN0cmFjdFNsb3RW
aXNpdG9yJiwgY29uc3QgY2hhcioqIHJlYXNvbikKIHsKICAgICBpZiAoVU5MSUtFTFkocmVhc29u
KSkKICAgICAgICAgKnJlYXNvbiA9ICJSZWdpc3RlcmVkIFBlcmZvcm1hbmNlT2JzZXJ2ZXIgY2Fs
bGJhY2siOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNQb3BTdGF0ZUV2ZW50
Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1Bv
cFN0YXRlRXZlbnRDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU1BvcFN0YXRlRXZlbnRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKQEAgLTkw
LDkgKzkxLDEzIEBAIEpTVmFsdWUgSlNQb3BTdGF0ZUV2ZW50OjpzdGF0ZShKU0dsb2JhbE8KICAg
ICByZXR1cm4gY2FjaGVTdGF0ZShyZXN1bHQpOwogfQogCi12b2lkIEpTUG9wU3RhdGVFdmVudDo6
dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBs
YXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTUG9wU3RhdGVFdmVudDo6dmlzaXRBZGRpdGlv
bmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB3cmFwcGVkKCkuc3RhdGUoKS52
aXNpdCh2aXNpdG9yKTsKIH0KIAordGVtcGxhdGUgdm9pZCBKU1BvcFN0YXRlRXZlbnQ6OnZpc2l0
QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUg
dm9pZCBKU1BvcFN0YXRlRXZlbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZp
c2l0b3ImKTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNQcm9taXNlUmVqZWN0aW9uRXZlbnRDdXN0b20uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUHJvbWlzZVJlamVjdGlvbkV2ZW50Q3Vz
dG9tLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNQcm9taXNlUmVqZWN0aW9uRXZlbnRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxOCBZdXN1a2UgU3V6dWtpIDx5dXN1a2Vz
dXp1a2lAc2xvd3N0YXJ0Lm9yZz4uCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0z
Miw5ICszMywxMyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgSlNQcm9taXNlUmVq
ZWN0aW9uRXZlbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZp
c2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1Byb21pc2VSZWplY3Rp
b25FdmVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAg
ICB3cmFwcGVkKCkucmVhc29uKCkudmlzaXQodmlzaXRvcik7CiB9CiAKK3RlbXBsYXRlIHZvaWQg
SlNQcm9taXNlUmVqZWN0aW9uRXZlbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6QWJz
dHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU1Byb21pc2VSZWplY3Rpb25FdmVu
dDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYpOworCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1Jlc2l6
ZU9ic2VydmVyQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU1Jlc2l6ZU9ic2VydmVyQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNSZXNpemVPYnNlcnZlckN1c3RvbS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDIwIElnYWxp
YSBTLkwuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMCwxMSArMzEsMTUgQEAK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIEpTUmVzaXplT2JzZXJ2ZXI6OnZpc2l0QWRk
aXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBl
bmFtZSBWaXNpdG9yPgordm9pZCBKU1Jlc2l6ZU9ic2VydmVyOjp2aXNpdEFkZGl0aW9uYWxDaGls
ZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFJlc2l6ZU9ic2VydmVyQ2FsbGJhY2sqIGNh
bGxiYWNrID0gd3JhcHBlZCgpLmNhbGxiYWNrQ29uY3VycmVudGx5KCk7CiAgICAgaWYgKGNhbGxi
YWNrKQogICAgICAgICBjYWxsYmFjay0+dmlzaXRKU0Z1bmN0aW9uKHZpc2l0b3IpOwogfQogCi19
Cit0ZW1wbGF0ZSB2b2lkIEpTUmVzaXplT2JzZXJ2ZXI6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVu
KEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU1Jlc2l6ZU9ic2Vy
dmVyOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJik7CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUmVz
aXplT2JzZXJ2ZXJFbnRyeUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNSZXNpemVPYnNlcnZlckVudHJ5Q3VzdG9tLmNwcAkocmV2aXNpb24gMjcy
ODMwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNSZXNpemVPYnNlcnZlckVudHJ5
Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmln
aHQgKEMpIDIwMTkgSWdhbGlhIFMuTC4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTMwLDEwICszMSwxNCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgSlNSZXNpemVP
YnNlcnZlckVudHJ5Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2
aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNSZXNpemVPYnNlcnZl
ckVudHJ5Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAg
IHZpc2l0b3IuYWRkT3BhcXVlUm9vdChyb290KHdyYXBwZWQoKS50YXJnZXQoKSkpOwogICAgIHZp
c2l0b3IuYWRkT3BhcXVlUm9vdCh3cmFwcGVkKCkuY29udGVudFJlY3QoKSk7CiB9CiAKLX0KK3Rl
bXBsYXRlIHZvaWQgSlNSZXNpemVPYnNlcnZlckVudHJ5Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJl
bihKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNSZXNpemVPYnNl
cnZlckVudHJ5Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJik7CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTU1ZHVmlld1NwZWNDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTU1ZHVmlld1NwZWNDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NWR1ZpZXdTcGVjQ3VzdG9tLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0zMCwxMCArMzAsMTQgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIEpT
U1ZHVmlld1NwZWM6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZp
c2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1NWR1ZpZXdTcGVjOjp2
aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEFTU0VSVCh3
cmFwcGVkKCkuY29udGV4dEVsZW1lbnRDb25jdXJyZW50bHkoKS5nZXQoKSk7CiAgICAgdmlzaXRv
ci5hZGRPcGFxdWVSb290KHJvb3Qod3JhcHBlZCgpLmNvbnRleHRFbGVtZW50Q29uY3VycmVudGx5
KCkuZ2V0KCkpKTsKIH0KIAotfQordGVtcGxhdGUgdm9pZCBKU1NWR1ZpZXdTcGVjOjp2aXNpdEFk
ZGl0aW9uYWxDaGlsZHJlbihKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZv
aWQgSlNTVkdWaWV3U3BlYzo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRv
ciYpOworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU1NlcnZpY2VXb3JrZXJHbG9iYWxTY29wZUN1c3RvbS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNTZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGVD
dXN0b20uY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU1NlcnZpY2VXb3JrZXJHbG9iYWxTY29wZUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzQs
MTIgKzM0LDE2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNwYWNlIEpTQzsK
IAotdm9pZCBKU1NlcnZpY2VXb3JrZXJHbG9iYWxTY29wZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRy
ZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9p
ZCBKU1NlcnZpY2VXb3JrZXJHbG9iYWxTY29wZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlz
aXRvciYgdmlzaXRvcikKIHsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QoJndyYXBwZWQoKS5j
bGllbnRzKCkpOwogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdCgmd3JhcHBlZCgpLnJlZ2lzdHJh
dGlvbigpKTsKIH0KIAordGVtcGxhdGUgdm9pZCBKU1NlcnZpY2VXb3JrZXJHbG9iYWxTY29wZTo6
dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oQWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUg
dm9pZCBKU1NlcnZpY2VXb3JrZXJHbG9iYWxTY29wZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4o
U2xvdFZpc2l0b3ImKTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU3RhdGljUmFuZ2VDdXN0b20uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU3RhdGljUmFuZ2VDdXN0b20u
Y3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1N0
YXRpY1JhbmdlQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsOSArMzAsMTMgQEAKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIEpTU3RhdGljUmFuZ2U6OnZpc2l0QWRkaXRpb25h
bENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPgordm9pZCBKU1N0YXRpY1JhbmdlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNp
dG9yJiB2aXNpdG9yKQogewogICAgIHdyYXBwZWQoKS52aXNpdE5vZGVzQ29uY3VycmVudGx5KHZp
c2l0b3IpOwogfQogCit0ZW1wbGF0ZSB2b2lkIEpTU3RhdGljUmFuZ2U6OnZpc2l0QWRkaXRpb25h
bENoaWxkcmVuKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU1N0
YXRpY1JhbmdlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJik7CisK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTU3R5bGVTaGVldEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNTdHlsZVNoZWV0Q3VzdG9tLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNTdHlsZVNoZWV0Q3VzdG9tLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIw
MDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3
LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0zMCwxMSArMzAsMTUgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci12b2lkIEpTU3R5bGVTaGVldDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90Vmlz
aXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTU3R5bGVT
aGVldDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB2
aXNpdG9yLmFkZE9wYXF1ZVJvb3Qocm9vdCgmd3JhcHBlZCgpKSk7CiB9CiAKK3RlbXBsYXRlIHZv
aWQgSlNTdHlsZVNoZWV0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihBYnN0cmFjdFNsb3RWaXNp
dG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTU3R5bGVTaGVldDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRy
ZW4oU2xvdFZpc2l0b3ImKTsKKwogSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpK
U0dsb2JhbE9iamVjdCosIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZjxTdHls
ZVNoZWV0PiYmIHN0eWxlU2hlZXQpCiB7CiAgICAgaWYgKHN0eWxlU2hlZXQtPmlzQ1NTU3R5bGVT
aGVldCgpKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNUZXh0VHJhY2tDdWVD
dXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVGV4
dFRyYWNrQ3VlQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNUZXh0VHJhY2tDdWVDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM4LDcg
KzM4LDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKLWJv
b2wgSlNUZXh0VHJhY2tDdWVPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpI
YW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBTbG90VmlzaXRvciYgdmlzaXRvciwg
Y29uc3QgY2hhcioqIHJlYXNvbikKK2Jvb2wgSlNUZXh0VHJhY2tDdWVPd25lcjo6aXNSZWFjaGFi
bGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQq
LCBBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQogewog
ICAgIEpTVGV4dFRyYWNrQ3VlKiBqc1RleHRUcmFja0N1ZSA9IGpzQ2FzdDxKU1RleHRUcmFja0N1
ZSo+KGhhbmRsZS5zbG90KCktPmFzQ2VsbCgpKTsKICAgICBUZXh0VHJhY2tDdWUmIHRleHRUcmFj
a0N1ZSA9IGpzVGV4dFRyYWNrQ3VlLT53cmFwcGVkKCk7CkBAIC04MiwxMiArODIsMTYgQEAgSlNW
YWx1ZSB0b0pTKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYgogICAgIHJldHVybiB3cmFwKGxl
eGljYWxHbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdCwgY3VlKTsKIH0KIAotdm9pZCBKU1RleHRU
cmFja0N1ZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0
ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1RleHRUcmFja0N1ZTo6dmlzaXRBZGRp
dGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBpZiAoVGV4dFRyYWNrKiB0
ZXh0VHJhY2sgPSB3cmFwcGVkKCkudHJhY2soKSkKICAgICAgICAgdmlzaXRvci5hZGRPcGFxdWVS
b290KHJvb3QodGV4dFRyYWNrKSk7CiB9CiAKK3RlbXBsYXRlIHZvaWQgSlNUZXh0VHJhY2tDdWU6
OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRl
IHZvaWQgSlNUZXh0VHJhY2tDdWU6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9y
Jik7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU1RleHRUcmFja0N1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNUZXh0VHJhY2tDdXN0b20uY3BwCShyZXZpc2lvbiAy
NzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1RleHRUcmFja0N1c3RvbS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
MS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMzYsMTEgKzM2LDE1IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1
c2luZyBuYW1lc3BhY2UgSlNDOwogCi12b2lkIEpTVGV4dFRyYWNrOjp2aXNpdEFkZGl0aW9uYWxD
aGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+
Cit2b2lkIEpTVGV4dFRyYWNrOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNp
dG9yKQogewogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChyb290KCZ3cmFwcGVkKCkpKTsKIH0K
IAordGVtcGxhdGUgdm9pZCBKU1RleHRUcmFjazo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oQWJz
dHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU1RleHRUcmFjazo6dmlzaXRBZGRp
dGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQog
CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVGV4dFRyYWNrTGlz
dEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNU
ZXh0VHJhY2tMaXN0Q3VzdG9tLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNUZXh0VHJhY2tMaXN0Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0z
NiwxMSArMzYsMTUgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBKU0M7
CiAKLXZvaWQgSlNUZXh0VHJhY2tMaXN0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNs
b3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNU
ZXh0VHJhY2tMaXN0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQog
ewogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChyb290KHdyYXBwZWQoKS5lbGVtZW50KCkpKTsK
IH0KICAgICAKK3RlbXBsYXRlIHZvaWQgSlNUZXh0VHJhY2tMaXN0Ojp2aXNpdEFkZGl0aW9uYWxD
aGlsZHJlbihBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTVGV4dFRyYWNr
TGlzdDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKKwogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQogCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTVHJlZVdhbGtlckN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNUcmVlV2Fsa2VyQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNUcmVlV2Fsa2VyQ3VzdG9tLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDgsIDIw
MDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2
LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CkBAIC0yNSwxMCArMjUsMTQgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIEpTVHJl
ZVdhbGtlcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRv
cikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTVHJlZVdhbGtlcjo6dmlzaXRB
ZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBpZiAoTm9kZUZpbHRl
ciogZmlsdGVyID0gd3JhcHBlZCgpLmZpbHRlcigpKQogICAgICAgICB2aXNpdG9yLmFkZE9wYXF1
ZVJvb3QoZmlsdGVyKTsKIH0KIAotfQordGVtcGxhdGUgdm9pZCBKU1RyZWVXYWxrZXI6OnZpc2l0
QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUg
dm9pZCBKU1RyZWVXYWxrZXI6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0
b3ImKTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNVbmRvSXRlbUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNVbmRvSXRlbUN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVW5kb0l0ZW1DdXN0b20uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTI5LDEzICsyOSwxNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgSlNV
bmRvSXRlbTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRv
cikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTVW5kb0l0ZW06OnZpc2l0QWRk
aXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgd3JhcHBlZCgpLnVuZG9I
YW5kbGVyKCkudmlzaXRKU0Z1bmN0aW9uKHZpc2l0b3IpOwogICAgIHdyYXBwZWQoKS5yZWRvSGFu
ZGxlcigpLnZpc2l0SlNGdW5jdGlvbih2aXNpdG9yKTsKIH0KIAotYm9vbCBKU1VuZG9JdGVtT3du
ZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4g
aGFuZGxlLCB2b2lkKiwgSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJl
YXNvbikKK3RlbXBsYXRlIHZvaWQgSlNVbmRvSXRlbTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4o
SlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTVW5kb0l0ZW06OnZp
c2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImKTsKKworYm9vbCBKU1VuZG9J
dGVtT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5r
bm93bj4gaGFuZGxlLCB2b2lkKiwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBj
b25zdCBjaGFyKiogcmVhc29uKQogewogICAgIGlmIChVTkxJS0VMWShyZWFzb24pKQogICAgICAg
ICAqcmVhc29uID0gIkRvY3VtZW50IGlzIGFuIG9wYXF1ZSByb290LiI7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU1ZhbHVlSW5XcmFwcGVkT2JqZWN0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNWYWx1ZUluV3JhcHBlZE9iamVjdC5oCShy
ZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1ZhbHVlSW5X
cmFwcGVkT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxOC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIAogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQwLDcgKzQwLDcgQEAgcHVibGljOgogICAgIG9w
ZXJhdG9yIEpTQzo6SlNWYWx1ZSgpIGNvbnN0OwogICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2wo
KSBjb25zdDsKICAgICBKU1ZhbHVlSW5XcmFwcGVkT2JqZWN0JiBvcGVyYXRvcj0oY29uc3QgSlNW
YWx1ZUluV3JhcHBlZE9iamVjdCYgb3RoZXIpOwotICAgIHZvaWQgdmlzaXQoSlNDOjpTbG90Vmlz
aXRvciYpIGNvbnN0OworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgdmlzaXQo
VmlzaXRvciYpIGNvbnN0OwogICAgIHZvaWQgY2xlYXIoKTsKIAogcHJpdmF0ZToKQEAgLTk4LDcg
Kzk4LDggQEAgaW5saW5lIEpTVmFsdWVJbldyYXBwZWRPYmplY3QmIEpTVmFsdWVJbgogICAgIHJl
dHVybiAqdGhpczsKIH0KIAotaW5saW5lIHZvaWQgSlNWYWx1ZUluV3JhcHBlZE9iamVjdDo6dmlz
aXQoSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikgY29uc3QKK3RlbXBsYXRlPHR5cGVuYW1lIFZp
c2l0b3I+CitpbmxpbmUgdm9pZCBKU1ZhbHVlSW5XcmFwcGVkT2JqZWN0Ojp2aXNpdChWaXNpdG9y
JiB2aXNpdG9yKSBjb25zdAogewogICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKG1fdmFsdWUsIFtd
IChKU0M6OkpTVmFsdWUpIHsKICAgICAgICAgLy8gTm90aGluZyB0byB2aXNpdC4KQEAgLTEwNyw2
ICsxMDgsOSBAQCBpbmxpbmUgdm9pZCBKU1ZhbHVlSW5XcmFwcGVkT2JqZWN0Ojp2aXNpCiAgICAg
fSk7CiB9CiAKK3RlbXBsYXRlIHZvaWQgSlNWYWx1ZUluV3JhcHBlZE9iamVjdDo6dmlzaXQoSlND
OjpBYnN0cmFjdFNsb3RWaXNpdG9yJikgY29uc3Q7Cit0ZW1wbGF0ZSB2b2lkIEpTVmFsdWVJbldy
YXBwZWRPYmplY3Q6OnZpc2l0KEpTQzo6U2xvdFZpc2l0b3ImKSBjb25zdDsKKwogaW5saW5lIHZv
aWQgSlNWYWx1ZUluV3JhcHBlZE9iamVjdDo6Y2xlYXIoKQogewogICAgIFdURjo6c3dpdGNoT24o
bV92YWx1ZSwgW10gKFdlYWsmIHZhbHVlKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU1ZpZGVvVHJhY2tDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTVmlkZW9UcmFja0N1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVmlkZW9UcmFja0N1c3RvbS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMzUsMTEgKzM1LDE1IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1l
c3BhY2UgSlNDOwogCi12b2lkIEpTVmlkZW9UcmFjazo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4o
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBK
U1ZpZGVvVHJhY2s6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7
CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHJvb3QoJndyYXBwZWQoKSkpOwogfQogCit0ZW1w
bGF0ZSB2b2lkIEpTVmlkZW9UcmFjazo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpBYnN0
cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTVmlkZW9UcmFjazo6dmlzaXRBZGRp
dGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYpOworCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCiAKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNWaWRlb1Ry
YWNrTGlzdEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNWaWRlb1RyYWNrTGlzdEN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVmlkZW9UcmFja0xpc3RDdXN0b20uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAyMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTM1LDExICszNSwxNSBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogdXNpbmcgbmFtZXNw
YWNlIEpTQzsKIAotdm9pZCBKU1ZpZGVvVHJhY2tMaXN0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJl
bihTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lk
IEpTVmlkZW9UcmFja0xpc3Q6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0
b3IpCiB7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHJvb3Qod3JhcHBlZCgpLmVsZW1lbnQo
KSkpOwogfQogCit0ZW1wbGF0ZSB2b2lkIEpTVmlkZW9UcmFja0xpc3Q6OnZpc2l0QWRkaXRpb25h
bENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNWaWRlb1Ry
YWNrTGlzdDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKKwogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTV2ViR0wyUmVuZGVyaW5nQ29udGV4dEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJHTDJSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNw
cAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJH
TDJSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMzLDEyICsz
MywxNiBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAotdm9p
ZCBKU1dlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNXZWJH
TDJSZW5kZXJpbmdDb250ZXh0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNp
dG9yKQogewogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdCgmd3JhcHBlZCgpKTsKICAgICB3cmFw
cGVkKCkuYWRkTWVtYmVyc1RvT3BhcXVlUm9vdHModmlzaXRvcik7CiB9CiAKK3RlbXBsYXRlIHZv
aWQgSlNXZWJHTDJSZW5kZXJpbmdDb250ZXh0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6
OkFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNXZWJHTDJSZW5kZXJpbmdD
b250ZXh0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJik7CisKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShXRUJHTCkKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViR0xSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYkdMUmVuZGVy
aW5nQ29udGV4dEN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTV2ViR0xSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC0zMywxMiArMzMsMTYgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFj
ZSBKU0M7CiAKLXZvaWQgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZpc2l0QWRkaXRpb25hbENo
aWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4K
K3ZvaWQgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZp
c2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KCZ3cmFwcGVkKCkp
OwogICAgIHdyYXBwZWQoKS5hZGRNZW1iZXJzVG9PcGFxdWVSb290cyh2aXNpdG9yKTsKIH0KIAor
dGVtcGxhdGUgdm9pZCBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmlzaXRBZGRpdGlvbmFsQ2hp
bGRyZW4oQWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU1dlYkdMUmVuZGVy
aW5nQ29udGV4dDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKKwogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQkdMKQpJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrZXJHbG9iYWxTY29wZUJhc2UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyR2xvYmFsU2NvcGVC
YXNlLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNXb3JrZXJHbG9iYWxTY29wZUJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSwgMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAyMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxs
IFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTkyLDcgKzkyLDggQEAgdm9p
ZCBKU1dvcmtlckdsb2JhbFNjb3BlQmFzZTo6ZmluaXNoQ3JlYQogICAgIEFTU0VSVChpbmhlcml0
cyh2bSwgaW5mbygpKSk7CiB9CiAKLXZvaWQgSlNXb3JrZXJHbG9iYWxTY29wZUJhc2U6OnZpc2l0
Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5
cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTV29ya2VyR2xvYmFsU2NvcGVCYXNlOjp2aXNpdENoaWxk
cmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNXb3JrZXJH
bG9iYWxTY29wZUJhc2UqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNXb3JrZXJHbG9iYWxTY29wZUJh
c2UqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGlu
Zm8oKSk7CkBAIC0xMDAsNiArMTAxLDggQEAgdm9pZCBKU1dvcmtlckdsb2JhbFNjb3BlQmFzZTo6
dmlzaXRDaGlsZAogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fcHJveHkpOwogfQog
CitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNXb3JrZXJHbG9iYWxTY29wZUJhc2UpOworCiB2b2lk
IEpTV29ya2VyR2xvYmFsU2NvcGVCYXNlOjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKIHsKICAgICBz
dGF0aWNfY2FzdDxKU1dvcmtlckdsb2JhbFNjb3BlQmFzZSo+KGNlbGwpLT5KU1dvcmtlckdsb2Jh
bFNjb3BlQmFzZTo6fkpTV29ya2VyR2xvYmFsU2NvcGVCYXNlKCk7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckdsb2JhbFNjb3BlQmFzZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyR2xvYmFsU2NvcGVCYXNlLmgJKHJl
dmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyR2xv
YmFsU2NvcGVCYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAwOC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNzksNyArNzksNyBAQCBwcm90ZWN0
ZWQ6CiAgICAgSlNXb3JrZXJHbG9iYWxTY29wZUJhc2UoSlNDOjpWTSYsIEpTQzo6U3RydWN0dXJl
KiwgUmVmUHRyPFdvcmtlckdsb2JhbFNjb3BlPiYmKTsKICAgICB2b2lkIGZpbmlzaENyZWF0aW9u
KEpTQzo6Vk0mLCBKU0M6OkpTUHJveHkqKTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRy
ZW4oSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9D
SElMRFJFTjsKIAogcHJpdmF0ZToKICAgICBSZWZQdHI8V29ya2VyR2xvYmFsU2NvcGU+IG1fd3Jh
cHBlZDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyR2xvYmFsU2Nv
cGVDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
V29ya2VyR2xvYmFsU2NvcGVDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckdsb2JhbFNjb3BlQ3VzdG9tLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAwOSwg
MjAxMSwgMjAxNiBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDgtMjAyMSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMzLDcgKzMzLDggQEAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKLXZvaWQgSlNXb3JrZXJHbG9iYWxTY29wZTo6dmlz
aXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBl
bmFtZSBWaXNpdG9yPgordm9pZCBKU1dvcmtlckdsb2JhbFNjb3BlOjp2aXNpdEFkZGl0aW9uYWxD
aGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGlmIChhdXRvKiBsb2NhdGlvbiA9IHdy
YXBwZWQoKS5vcHRpb25hbExvY2F0aW9uKCkpCiAgICAgICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9v
dChsb2NhdGlvbik7CkBAIC00OCw2ICs0OSw5IEBAIHZvaWQgSlNXb3JrZXJHbG9iYWxTY29wZTo6
dmlzaXRBZGRpdGlvbmEKICAgICB3cmFwcGVkKCkudmlzaXRKU0V2ZW50TGlzdGVuZXJzKHZpc2l0
b3IpOwogfQogCit0ZW1wbGF0ZSB2b2lkIEpTV29ya2VyR2xvYmFsU2NvcGU6OnZpc2l0QWRkaXRp
b25hbENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNXb3Jr
ZXJHbG9iYWxTY29wZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKKwog
SlNWYWx1ZSBKU1dvcmtlckdsb2JhbFNjb3BlOjpxdWV1ZU1pY3JvdGFzayhKU0dsb2JhbE9iamVj
dCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lJiBjYWxsRnJhbWUpCiB7CiAgICAgVk0m
IHZtID0gbGV4aWNhbEdsb2JhbE9iamVjdC52bSgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNXb3JrZXJOYXZpZ2F0b3JDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyTmF2aWdhdG9yQ3VzdG9tLmNwcAkocmV2aXNp
b24gMjcyODMwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrZXJOYXZpZ2F0
b3JDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI4LDkgKzI4LDEzIEBACiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotdm9pZCBKU1dvcmtlck5hdmlnYXRvcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRy
ZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+
Cit2b2lkIEpTV29ya2VyTmF2aWdhdG9yOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9y
JiB2aXNpdG9yKQogewogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChzdGF0aWNfY2FzdDxOYXZp
Z2F0b3JCYXNlKj4oJndyYXBwZWQoKSkpOwogfQogCi19Cit0ZW1wbGF0ZSB2b2lkIEpTV29ya2Vy
TmF2aWdhdG9yOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OkFic3RyYWN0U2xvdFZpc2l0
b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNXb3JrZXJOYXZpZ2F0b3I6OnZpc2l0QWRkaXRpb25hbENo
aWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImKTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrbGV0R2xvYmFsU2NvcGVCYXNlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtsZXRHbG9i
YWxTY29wZUJhc2UuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU1dvcmtsZXRHbG9iYWxTY29wZUJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTgyLDcg
KzgyLDggQEAgdm9pZCBKU1dvcmtsZXRHbG9iYWxTY29wZUJhc2U6OmZpbmlzaENyZQogICAgIEFT
U0VSVChpbmhlcml0cyh2bSwgaW5mbygpKSk7CiB9CiAKLXZvaWQgSlNXb3JrbGV0R2xvYmFsU2Nv
cGVCYXNlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3Ip
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1dvcmtsZXRHbG9iYWxTY29wZUJh
c2U6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsK
ICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTV29ya2xldEdsb2JhbFNjb3BlQmFzZSo+
KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygp
KTsKQEAgLTkwLDYgKzkxLDggQEAgdm9pZCBKU1dvcmtsZXRHbG9iYWxTY29wZUJhc2U6OnZpc2l0
Q2hpbAogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fcHJveHkpOwogfQogCitERUZJ
TkVfVklTSVRfQ0hJTERSRU4oSlNXb3JrbGV0R2xvYmFsU2NvcGVCYXNlKTsKKwogdm9pZCBKU1dv
cmtsZXRHbG9iYWxTY29wZUJhc2U6OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQogewogICAgIHN0YXRp
Y19jYXN0PEpTV29ya2xldEdsb2JhbFNjb3BlQmFzZSo+KGNlbGwpLT5KU1dvcmtsZXRHbG9iYWxT
Y29wZUJhc2U6On5KU1dvcmtsZXRHbG9iYWxTY29wZUJhc2UoKTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTV29ya2xldEdsb2JhbFNjb3BlQmFzZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2xldEdsb2JhbFNjb3BlQmFzZS5oCShy
ZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtsZXRH
bG9iYWxTY29wZUJhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE4LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02Nyw3ICs2Nyw3IEBAIHByb3RlY3RlZDoK
ICAgICBKU1dvcmtsZXRHbG9iYWxTY29wZUJhc2UoSlNDOjpWTSYsIEpTQzo6U3RydWN0dXJlKiwg
UmVmUHRyPFdvcmtsZXRHbG9iYWxTY29wZT4mJik7CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihK
U0M6OlZNJiwgSlNDOjpKU1Byb3h5Kik7CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVu
KEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJ
TERSRU47CiAKIHByaXZhdGU6CiAgICAgUmVmUHRyPFdvcmtsZXRHbG9iYWxTY29wZT4gbV93cmFw
cGVkOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNYTUxIdHRwUmVxdWVzdEN1
c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNYTUxI
dHRwUmVxdWVzdEN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTWE1MSHR0cFJlcXVlc3RDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAyMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTQxLDcgKzQxLDggQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBK
U0M7CiAKLXZvaWQgSlNYTUxIdHRwUmVxdWVzdDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xv
dFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1hN
TEh0dHBSZXF1ZXN0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQog
ewogICAgIGlmIChhdXRvKiB1cGxvYWQgPSB3cmFwcGVkKCkub3B0aW9uYWxVcGxvYWQoKSkKICAg
ICAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHVwbG9hZCk7CkBAIC01MCw2ICs1MSw5IEBAIHZv
aWQgSlNYTUxIdHRwUmVxdWVzdDo6dmlzaXRBZGRpdGlvbmFsQ2gKICAgICAgICAgdmlzaXRvci5h
ZGRPcGFxdWVSb290KHJlc3BvbnNlRG9jdW1lbnQpOwogfQogCit0ZW1wbGF0ZSB2b2lkIEpTWE1M
SHR0cFJlcXVlc3Q6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0b3Im
KTsKK3RlbXBsYXRlIHZvaWQgSlNYTUxIdHRwUmVxdWVzdDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRy
ZW4oU2xvdFZpc2l0b3ImKTsKKwogSlNWYWx1ZSBKU1hNTEh0dHBSZXF1ZXN0OjpyZXNwb25zZShK
U0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCkgY29uc3QKIHsKICAgICBhdXRvIGNh
Y2hlUmVzdWx0ID0gWyZdIChKU1ZhbHVlIHZhbHVlKSAtPiBKU1ZhbHVlIHsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTWFBhdGhSZXN1bHRDdXN0b20uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTWFBhdGhSZXN1bHRDdXN0b20uY3BwCShy
ZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1hQYXRoUmVz
dWx0Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5
cmlnaHQgKEMpIDIwMTEgSnVsaWVuIENoYWZmcmFpeCA8amNoYWZmcmFpeEB3ZWJraXQub3JnPgor
ICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzEsNyArMzIsOCBAQAogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLXZvaWQgSlNYUGF0aFJlc3VsdDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRy
ZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+
Cit2b2lkIEpTWFBhdGhSZXN1bHQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZp
c2l0b3IpCiB7CiAgICAgYXV0byYgdmFsdWUgPSB3cmFwcGVkKCkudmFsdWUoKTsKICAgICBpZiAo
dmFsdWUuaXNOb2RlU2V0KCkpIHsKQEAgLTQxLDQgKzQzLDcgQEAgdm9pZCBKU1hQYXRoUmVzdWx0
Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZAogICAgIH0KIH0KIAordGVtcGxhdGUgdm9pZCBKU1hQYXRo
UmVzdWx0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3Im
KTsKK3RlbXBsYXRlIHZvaWQgSlNYUGF0aFJlc3VsdDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4o
SlNDOjpTbG90VmlzaXRvciYpOworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dlYkNvcmVUeXBlZEFycmF5
Q29udHJvbGxlci5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL1dlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTYs
NyArNTYsNyBAQCBib29sIFdlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlcjo6aXNBdG9tCiAgICAg
cmV0dXJuIG1fYWxsb3dBdG9taWNzV2FpdDsKIH0KIAotYm9vbCBXZWJDb3JlVHlwZWRBcnJheUNv
bnRyb2xsZXI6OkpTQXJyYXlCdWZmZXJPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMo
SlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBKU0M6OlNsb3RWaXNpdG9y
JiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQorYm9vbCBXZWJDb3JlVHlwZWRBcnJheUNv
bnRyb2xsZXI6OkpTQXJyYXlCdWZmZXJPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMo
SlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBKU0M6OkFic3RyYWN0U2xv
dFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCiB7CiAgICAgaWYgKFVOTElL
RUxZKHJlYXNvbikpCiAgICAgICAgICpyZWFzb24gPSAiQXJyYXlCdWZmZXIgaXMgb3BhcXVlIHJv
b3QiOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV2ViQ29yZVR5cGVkQXJyYXlD
b250cm9sbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV2Vi
Q29yZVR5cGVkQXJyYXlDb250cm9sbGVyLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL1dlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlci5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTQ4LDcgKzQ4LDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBjbGFzcyBKU0FycmF5
QnVmZmVyT3duZXIgOiBwdWJsaWMgSlNDOjpXZWFrSGFuZGxlT3duZXIgewogICAgIHB1YmxpYzoK
LSAgICAgICAgYm9vbCBpc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6
OlVua25vd24+LCB2b2lkKiBjb250ZXh0LCBKU0M6OlNsb3RWaXNpdG9yJiwgY29uc3QgY2hhcioq
KSBvdmVycmlkZTsKKyAgICAgICAgYm9vbCBpc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6
OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0LCBKU0M6OkFic3RyYWN0U2xvdFZp
c2l0b3ImLCBjb25zdCBjaGFyKiopIG92ZXJyaWRlOwogICAgICAgICB2b2lkIGZpbmFsaXplKEpT
Qzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQpIG92ZXJyaWRlOwogICAgIH07
CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpT
LnBtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdl
bmVyYXRvckpTLnBtCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQkod29ya2luZyBjb3B5KQpAQCAtMyw3ICszLDcg
QEAKICMgQ29weXJpZ2h0IChDKSAyMDA2IEFuZGVycyBDYXJsc3NvbiA8YW5kZXJzY2FAbWFjLmNv
bT4KICMgQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IFNhbXVlbCBXZWluaWcgPHNhbUB3ZWJraXQu
b3JnPgogIyBDb3B5cmlnaHQgKEMpIDIwMDYgQWxleGV5IFByb3NrdXJ5YWtvdiA8YXBAd2Via2l0
Lm9yZz4KLSMgQ29weXJpZ2h0IChDKSAyMDA2LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorIyBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAjIENvcHlyaWdodCAoQykgMjAwOSBDYW1lcm9uIE1jQ29ybWFjayA8Y2FtQG1j
Yy5pZC5hdT4KICMgQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEw
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogIyBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9y
YXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCkBAIC0zMDc4LDggKzMwNzgsOCBAQCBz
dWIgR2VuZXJhdGVIZWFkZXIKIAogICAgICMgdmlzaXQgZnVuY3Rpb24KICAgICBpZiAoJG5lZWRz
VmlzaXRDaGlsZHJlbikgewotICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHN0YXRp
YyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpO1xuIik7Ci0g
ICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgdm9pZCB2aXNpdEFkZGl0aW9uYWxDaGls
ZHJlbihKU0M6OlNsb3RWaXNpdG9yJik7XG4iKSBpZiAkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJp
YnV0ZXMtPntKU0N1c3RvbU1hcmtGdW5jdGlvbn07CisgICAgICAgIHB1c2goQGhlYWRlckNvbnRl
bnQsICIgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjtcbiIpOworICAgICAgICBwdXNoKEBoZWFk
ZXJDb250ZW50LCAiICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgdmlzaXRBZGRp
dGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYpO1xuIikgaWYgJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRy
aWJ1dGVzLT57SlNDdXN0b21NYXJrRnVuY3Rpb259OwogICAgICAgICBwdXNoKEBoZWFkZXJDb250
ZW50LCAiXG4iKTsKIAogICAgICAgICBpZiAoJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVz
LT57SlNDdXN0b21NYXJrRnVuY3Rpb259KSB7CkBAIC0zMDk0LDcgKzMwOTQsNyBAQCBzdWIgR2Vu
ZXJhdGVIZWFkZXIKICAgICAgICAgICAgICMgdGhhdCB0aGUgR0MgY2FsbHMgdG8gYXNrIGFuIG9i
amVjdCBpcyBpdCB3b3VsZCBsaWtlIHRvIG1hcmsgYW55dGhpbmcgZWxzZSBhZnRlciB0aGUKICAg
ICAgICAgICAgICMgcHJvZ3JhbSByZXN1bWVkIHNpbmNlIHRoZSBsYXN0IGNhbGwgdG8gdmlzaXRD
aGlsZHJlbiBvciB2aXNpdE91dHB1dENvbnN0cmFpbnRzLiBTaW5jZQogICAgICAgICAgICAgIyB0
aGlzIGp1c3QgY2FsbHMgdmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4sIHlvdSB1c3VhbGx5IGRvbid0
IGhhdmUgdG8gd29ycnkgYWJvdXQgdGhpcy4KLSAgICAgICAgICAgIHB1c2goQGhlYWRlckNvbnRl
bnQsICIgICAgc3RhdGljIHZvaWQgdmlzaXRPdXRwdXRDb25zdHJhaW50cyhKU0NlbGwqLCBKU0M6
OlNsb3RWaXNpdG9yJik7XG4iKTsKKyAgICAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIg
ICAgc3RhdGljIHZvaWQgdmlzaXRPdXRwdXRDb25zdHJhaW50cyhKU0NlbGwqLCBKU0M6OkFic3Ry
YWN0U2xvdFZpc2l0b3ImKTtcbiIpOwogICAgICAgICB9CiAgICAgfQogCkBAIC0zMjE1LDcgKzMy
MTUsNyBAQCBzdWIgR2VuZXJhdGVIZWFkZXIKICAgICAgICAgfQogICAgICAgICAkaGVhZGVySW5j
bHVkZXN7Ijx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4ifSA9IDE7CiAgICAgICAgIHB1c2goQGhlYWRl
ckNvbnRlbnQsICJwdWJsaWM6XG4iKTsKLSAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAg
ICBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93
bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6U2xvdFZpc2l0b3ImLCBjb25zdCBjaGFyKiopICR7b3Zl
cnJpZGVEZWNsfTtcbiIpOworICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIGJvb2wg
aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9p
ZCogY29udGV4dCwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiwgY29uc3QgY2hhcioqKSAke292
ZXJyaWRlRGVjbH07XG4iKTsKICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICB2b2lk
IGZpbmFsaXplKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQpICR7b3Zl
cnJpZGVEZWNsfTtcbiIpOwogICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAifTtcbiIpOwog
ICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiXG4iKTsKQEAgLTQ5MzksNiArNDkzOSw3IEBA
IHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIkRPTUlz
b1N1YnNwYWNlcy5oIik7CiAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIldlYkNvcmVKU0NsaWVudERh
dGEuaCIpOwogICAgIEFkZFRvSW1wbEluY2x1ZGVzKCI8SmF2YVNjcmlwdENvcmUvSlNEZXN0cnVj
dGlibGVPYmplY3RIZWFwQ2VsbFR5cGUuaD4iKTsKKyAgICBBZGRUb0ltcGxJbmNsdWRlcygiPEph
dmFTY3JpcHRDb3JlL1Nsb3RWaXNpdG9yTWFjcm9zLmg+Iik7CiAgICAgQWRkVG9JbXBsSW5jbHVk
ZXMoIjxKYXZhU2NyaXB0Q29yZS9TdWJzcGFjZUlubGluZXMuaD4iKTsKICAgICBwdXNoKEBpbXBs
Q29udGVudCwgIkpTQzo6SXNvU3Vic3BhY2UqICR7Y2xhc3NOYW1lfTo6c3Vic3BhY2VGb3JJbXBs
KEpTQzo6Vk0mIHZtKVxuIik7CiAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ7XG4iKTsKQEAgLTQ5
NjYsNyArNDk2Nyw4IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgcHVzaChAaW1w
bENvbnRlbnQsICJ9XG5cbiIpOwogCiAgICAgaWYgKCRuZWVkc1Zpc2l0Q2hpbGRyZW4pIHsKLSAg
ICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ2b2lkICR7Y2xhc3NOYW1lfTo6dmlzaXRDaGlsZHJl
bihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKVxuIik7CisgICAgICAgIHB1c2go
QGltcGxDb250ZW50LCAidGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj5cbiIpOworICAgICAgICBw
dXNoKEBpbXBsQ29udGVudCwgInZvaWQgJHtjbGFzc05hbWV9Ojp2aXNpdENoaWxkcmVuSW1wbChK
U0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpXG4iKTsKICAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsICJ7XG4iKTsKICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgYXV0byogdGhp
c09iamVjdCA9IGpzQ2FzdDwke2NsYXNzTmFtZX0qPihjZWxsKTtcbiIpOwogICAgICAgICBwdXNo
KEBpbXBsQ29udGVudCwgIiAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3Qs
IGluZm8oKSk7XG4iKTsKQEAgLTQ5OTEsOCArNDk5MywxMCBAQCBzdWIgR2VuZXJhdGVJbXBsZW1l
bnRhdGlvbgogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIHB1c2goQGltcGxDb250
ZW50LCAifVxuXG4iKTsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJERUZJTkVfVklTSVRf
Q0hJTERSRU4oJHtjbGFzc05hbWV9KTtcblxuIik7CisKICAgICAgICAgaWYgKCRpbnRlcmZhY2Ut
PmV4dGVuZGVkQXR0cmlidXRlcy0+e0pTQ3VzdG9tTWFya0Z1bmN0aW9ufSkgewotICAgICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICJ2b2lkICR7Y2xhc3NOYW1lfTo6dmlzaXRPdXRwdXRDb25z
dHJhaW50cyhKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKVxuIik7CisgICAgICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgInZvaWQgJHtjbGFzc05hbWV9Ojp2aXNpdE91dHB1dENv
bnN0cmFpbnRzKEpTQ2VsbCogY2VsbCwgQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcilcbiIp
OwogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ7XG4iKTsKICAgICAgICAgICAgIHB1
c2goQGltcGxDb250ZW50LCAiICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8JHtjbGFzc05h
bWV9Kj4oY2VsbCk7XG4iKTsKICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIEFT
U0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTtcbiIpOwpAQCAtNTAz
Myw3ICs1MDM3LDcgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICB9CiAKICAgICBp
ZiAoU2hvdWxkR2VuZXJhdGVXcmFwcGVyT3duZXJDb2RlKCRoYXNQYXJlbnQsICRpbnRlcmZhY2Up
ICYmICFHZXRDdXN0b21Jc1JlYWNoYWJsZSgkaW50ZXJmYWNlKSkgewotICAgICAgICBwdXNoKEBp
bXBsQ29udGVudCwgImJvb2wgSlMke2ludGVyZmFjZU5hbWV9T3duZXI6OmlzUmVhY2hhYmxlRnJv
bU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgU2xv
dFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pXG4iKTsKKyAgICAgICAgcHVz
aChAaW1wbENvbnRlbnQsICJib29sIEpTJHtpbnRlcmZhY2VOYW1lfU93bmVyOjppc1JlYWNoYWJs
ZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCos
IEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pXG4iKTsK
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ7XG4iKTsKICAgICAgICAgIyBBbGwgQWN0aXZl
RE9NT2JqZWN0cyBpbXBsZW1lbnQgaGFzUGVuZGluZ0FjdGl2aXR5KCksIGJ1dCBub3QgYWxsIG9m
IHRoZW0KICAgICAgICAgIyBpbmNyZW1lbnQgdGhlaXIgQysrIHJlZmVyZW5jZSBjb3VudHMgd2hl
biBoYXNQZW5kaW5nQWN0aXZpdHkoKSBiZWNvbWVzCkBAIC02NDMyLDYgKzY0MzYsNyBAQCBzdWIg
R2VuZXJhdGVDYWxsYmFja0hlYWRlckNvbnRlbnQKICAgICAgICAgcHVzaChAJGNvbnRlbnRSZWYs
ICIgICAgYm9vbCBoYXNDYWxsYmFjaygpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fZGF0YSAmJiBt
X2RhdGEtPmNhbGxiYWNrKCk7IH1cblxuIik7CiAgICAgfQogCisgICAgcHVzaChAJGNvbnRlbnRS
ZWYsICIgICAgdm9pZCB2aXNpdEpTRnVuY3Rpb24oSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJikg
b3ZlcnJpZGU7XG5cbiIpIGlmICRpbnRlcmZhY2VPckNhbGxiYWNrLT5leHRlbmRlZEF0dHJpYnV0
ZXMtPntJc1dlYWtDYWxsYmFja307CiAgICAgcHVzaChAJGNvbnRlbnRSZWYsICIgICAgdm9pZCB2
aXNpdEpTRnVuY3Rpb24oSlNDOjpTbG90VmlzaXRvciYpIG92ZXJyaWRlO1xuXG4iKSBpZiAkaW50
ZXJmYWNlT3JDYWxsYmFjay0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57SXNXZWFrQ2FsbGJhY2t9Owog
CiAgICAgcHVzaChAJGNvbnRlbnRSZWYsICIgICAgJHtjYWxsYmFja0RhdGFUeXBlfSogbV9kYXRh
O1xuIik7CkBAIC02NjIzLDYgKzY2MjgsMTAgQEAgc3ViIEdlbmVyYXRlQ2FsbGJhY2tJbXBsZW1l
bnRhdGlvbkNvbnRlbgogICAgIH0KIAogICAgIGlmICgkaW50ZXJmYWNlT3JDYWxsYmFjay0+ZXh0
ZW5kZWRBdHRyaWJ1dGVzLT57SXNXZWFrQ2FsbGJhY2t9KSB7CisgICAgICAgIHB1c2goQCRjb250
ZW50UmVmLCAidm9pZCAke2NsYXNzTmFtZX06OnZpc2l0SlNGdW5jdGlvbihKU0M6OkFic3RyYWN0
U2xvdFZpc2l0b3ImIHZpc2l0b3IpXG4iKTsKKyAgICAgICAgcHVzaChAJGNvbnRlbnRSZWYsICJ7
XG4iKTsKKyAgICAgICAgcHVzaChAJGNvbnRlbnRSZWYsICIgICAgbV9kYXRhLT52aXNpdEpTRnVu
Y3Rpb24odmlzaXRvcik7XG4iKTsKKyAgICAgICAgcHVzaChAJGNvbnRlbnRSZWYsICJ9XG5cbiIp
OwogICAgICAgICBwdXNoKEAkY29udGVudFJlZiwgInZvaWQgJHtjbGFzc05hbWV9Ojp2aXNpdEpT
RnVuY3Rpb24oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcilcbiIpOwogICAgICAgICBwdXNoKEAk
Y29udGVudFJlZiwgIntcbiIpOwogICAgICAgICBwdXNoKEAkY29udGVudFJlZiwgIiAgICBtX2Rh
dGEtPnZpc2l0SlNGdW5jdGlvbih2aXNpdG9yKTtcbiIpOwpAQCAtNjczNCw2ICs2NzQzLDcgQEAg
c3ViIEdlbmVyYXRlSXRlcmFibGVEZWZpbml0aW9uCiAgICAgbXkgJHZpc2libGVJbnRlcmZhY2VO
YW1lID0gJGNvZGVHZW5lcmF0b3ItPkdldFZpc2libGVJbnRlcmZhY2VOYW1lKCRpbnRlcmZhY2Up
OwogCiAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIkpTRE9NSXRlcmF0b3IuaCIpOworICAgIEFkZFRv
SW1wbEluY2x1ZGVzKCI8SmF2YVNjcmlwdENvcmUvU2xvdFZpc2l0b3JNYWNyb3MuaD4iKTsKIAog
ICAgIHJldHVybiB1bmxlc3MgSXNLZXlWYWx1ZUl0ZXJhYmxlSW50ZXJmYWNlKCRpbnRlcmZhY2Up
OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vQWN0aXZlRE9NQ2FsbGJhY2suaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vQWN0aXZlRE9NQ2FsbGJhY2suaAkocmV2aXNpb24g
MjcyODMwKQorKysgU291cmNlL1dlYkNvcmUvZG9tL0FjdGl2ZURPTUNhbGxiYWNrLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDEy
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zIGFyZQpAQCAtMzMsNiArMzQsNyBAQAogI2luY2x1ZGUgIkNvbnRleHREZXN0cnVjdGlv
bk9ic2VydmVyLmgiCiAKIG5hbWVzcGFjZSBKU0MgeworY2xhc3MgQWJzdHJhY3RTbG90VmlzaXRv
cjsKIGNsYXNzIFNsb3RWaXNpdG9yOwogfQogCkBAIC01NSw2ICs1Nyw3IEBAIHB1YmxpYzoKICAg
ICBXRUJDT1JFX0VYUE9SVCBib29sIGFjdGl2ZURPTU9iamVjdHNBcmVTdXNwZW5kZWQoKSBjb25z
dDsKICAgICBXRUJDT1JFX0VYUE9SVCBib29sIGFjdGl2ZURPTU9iamVjdEFyZVN0b3BwZWQoKSBj
b25zdDsKICAgICAKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXRKU0Z1bmN0aW9uKEpTQzo6QWJzdHJh
Y3RTbG90VmlzaXRvciYpIHsgfQogICAgIHZpcnR1YWwgdm9pZCB2aXNpdEpTRnVuY3Rpb24oSlND
OjpTbG90VmlzaXRvciYpIHsgfQogfTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50
TGlzdGVuZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRMaXN0ZW5l
ci5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRMaXN0ZW5l
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwNiwgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKQEAgLTI0LDYgKzI0LDcgQEAKICNpbmNsdWRlIDx3dGYvV2Vha1B0ci5o
PgogCiBuYW1lc3BhY2UgSlNDIHsKK2NsYXNzIEFic3RyYWN0U2xvdFZpc2l0b3I7CiBjbGFzcyBK
U09iamVjdDsKIGNsYXNzIFNsb3RWaXNpdG9yOwogfQpAQCAtNTIsNiArNTMsNyBAQCBwdWJsaWM6
CiAgICAgdmlydHVhbCB2b2lkIGhhbmRsZUV2ZW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBF
dmVudCYpID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgd2FzQ3JlYXRlZEZyb21NYXJrdXAoKSBjb25z
dCB7IHJldHVybiBmYWxzZTsgfQogCisgICAgdmlydHVhbCB2b2lkIHZpc2l0SlNGdW5jdGlvbihK
U0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgdmlzaXRKU0Z1
bmN0aW9uKEpTQzo6U2xvdFZpc2l0b3ImKSB7IH0KIAogICAgIHZpcnR1YWwgYm9vbCBpc0F0dHJp
YnV0ZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20v
RXZlbnRUYXJnZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9FdmVudFRh
cmdldC5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9FdmVudFRh
cmdldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIsNyArMiw3IEBACiAgKiBDb3B5cmlnaHQgKEMp
IDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMTk5OSBB
bnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMjAwMSBE
aXJrIE11ZWxsZXIgKG11ZWxsZXJAa2RlLm9yZykKLSAqIENvcHlyaWdodCAoQykgMjAwNC0yMDE3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNC0y
MDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAw
NiBBbGV4ZXkgUHJvc2t1cnlha292IChhcEB3ZWJraXQub3JnKQogICogICAgICAgICAgIChDKSAy
MDA3LCAyMDA4IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgogICoKQEAg
LTM4NCw3ICszODQsOCBAQCB2b2lkIEV2ZW50VGFyZ2V0OjpyZW1vdmVBbGxFdmVudExpc3RlbmVy
CiAgICAgdGhyZWFkRGF0YS5zZXRJc0luUmVtb3ZlQWxsRXZlbnRMaXN0ZW5lcnMoZmFsc2UpOwog
fQogCi12b2lkIEV2ZW50VGFyZ2V0Ojp2aXNpdEpTRXZlbnRMaXN0ZW5lcnMoSlNDOjpTbG90Vmlz
aXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEV2ZW50VGFy
Z2V0Ojp2aXNpdEpTRXZlbnRMaXN0ZW5lcnMoVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBFdmVu
dFRhcmdldERhdGEqIGRhdGEgPSBldmVudFRhcmdldERhdGFDb25jdXJyZW50bHkoKTsKICAgICBp
ZiAoIWRhdGEpCkBAIC0zOTYsNiArMzk3LDkgQEAgdm9pZCBFdmVudFRhcmdldDo6dmlzaXRKU0V2
ZW50TGlzdGVuZXJzKAogICAgICAgICBsaXN0ZW5lci0+dmlzaXRKU0Z1bmN0aW9uKHZpc2l0b3Ip
OwogfQogCit0ZW1wbGF0ZSB2b2lkIEV2ZW50VGFyZ2V0Ojp2aXNpdEpTRXZlbnRMaXN0ZW5lcnMo
SlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEV2ZW50VGFyZ2V0Ojp2
aXNpdEpTRXZlbnRMaXN0ZW5lcnMoSlNDOjpTbG90VmlzaXRvciYpOworCiB2b2lkIEV2ZW50VGFy
Z2V0OjppbnZhbGlkYXRlRXZlbnRMaXN0ZW5lclJlZ2lvbnMoKQogewogICAgIGlmIChpczxFbGVt
ZW50PigqdGhpcykpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9FdmVudFRhcmdldC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9FdmVudFRhcmdldC5oCShyZXZpc2lvbiAy
NzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRUYXJnZXQuaAkod29ya2luZyBjb3B5
KQpAQCAtMiw3ICsyLDcgQEAKICAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9s
bEBrZGUub3JnKQogICogICAgICAgICAgIChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0
b0BrZGUub3JnKQogICogICAgICAgICAgIChDKSAyMDAxIERpcmsgTXVlbGxlciAobXVlbGxlckBr
ZGUub3JnKQotICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA2IEFsZXhleSBQcm9za3VyeWFrb3Yg
KGFwQHdlYmtpdC5vcmcpCiAgKiAgICAgICAgICAgKEMpIDIwMDcsIDIwMDggTmlrb2xhcyBaaW1t
ZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CiAgKgpAQCAtOTcsNyArOTcsNyBAQCBwdWJsaWM6
CiAgICAgdm9pZCBmaXJlRXZlbnRMaXN0ZW5lcnMoRXZlbnQmLCBFdmVudEludm9rZVBoYXNlKTsK
ICAgICBib29sIGlzRmlyaW5nRXZlbnRMaXN0ZW5lcnMoKSBjb25zdDsKIAotICAgIHZvaWQgdmlz
aXRKU0V2ZW50TGlzdGVuZXJzKEpTQzo6U2xvdFZpc2l0b3ImKTsKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBWaXNpdG9yPiB2b2lkIHZpc2l0SlNFdmVudExpc3RlbmVycyhWaXNpdG9yJik7CiAgICAg
dm9pZCBpbnZhbGlkYXRlSlNFdmVudExpc3RlbmVycyhKU0M6OkpTT2JqZWN0Kik7CiAKICAgICBj
b25zdCBFdmVudFRhcmdldERhdGEqIGV2ZW50VGFyZ2V0RGF0YSgpIGNvbnN0OwpJbmRleDogU291
cmNlL1dlYkNvcmUvZG9tL011dGF0aW9uUmVjb3JkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9kb20vTXV0YXRpb25SZWNvcmQuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3Vy
Y2UvV2ViQ29yZS9kb20vTXV0YXRpb25SZWNvcmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKQEAgLTQxLDcgKzQy
LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBuYW1lc3BhY2UgewogCi1zdGF0aWMgdm9pZCB2
aXNpdE5vZGVMaXN0KEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IsIE5vZGVMaXN0JiBub2RlTGlz
dCkKK3N0YXRpYyB2b2lkIHZpc2l0Tm9kZUxpc3QoSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiB2
aXNpdG9yLCBOb2RlTGlzdCYgbm9kZUxpc3QpCiB7CiAgICAgQVNTRVJUKCFub2RlTGlzdC5pc0xp
dmVOb2RlTGlzdCgpKTsKICAgICB1bnNpZ25lZCBsZW5ndGggPSBub2RlTGlzdC5sZW5ndGgoKTsK
QEAgLTY4LDcgKzY5LDcgQEAgcHJpdmF0ZToKICAgICBOb2RlKiBwcmV2aW91c1NpYmxpbmcoKSBv
dmVycmlkZSB7IHJldHVybiBtX3ByZXZpb3VzU2libGluZy5nZXQoKTsgfQogICAgIE5vZGUqIG5l
eHRTaWJsaW5nKCkgb3ZlcnJpZGUgeyByZXR1cm4gbV9uZXh0U2libGluZy5nZXQoKTsgfQogCi0g
ICAgdm9pZCB2aXNpdE5vZGVzQ29uY3VycmVudGx5KEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3Ip
IGNvbnN0IGZpbmFsCisgICAgdm9pZCB2aXNpdE5vZGVzQ29uY3VycmVudGx5KEpTQzo6QWJzdHJh
Y3RTbG90VmlzaXRvciYgdmlzaXRvcikgY29uc3QgZmluYWwKICAgICB7CiAgICAgICAgIHZpc2l0
b3IuYWRkT3BhcXVlUm9vdChyb290KG1fdGFyZ2V0LnB0cigpKSk7CiAgICAgICAgIGlmIChtX2Fk
ZGVkTm9kZXMpCkBAIC0xMDUsNyArMTA2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIG5v
ZGVMaXN0LmdldCgpOwogICAgIH0KIAotICAgIHZvaWQgdmlzaXROb2Rlc0NvbmN1cnJlbnRseShK
U0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKSBjb25zdCBmaW5hbAorICAgIHZvaWQgdmlzaXROb2Rl
c0NvbmN1cnJlbnRseShKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0IGZp
bmFsCiAgICAgewogICAgICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qocm9vdChtX3RhcmdldC5w
dHIoKSkpOwogICAgIH0KQEAgLTE2NCw3ICsxNjUsNyBAQCBwcml2YXRlOgogCiAgICAgU3RyaW5n
IG9sZFZhbHVlKCkgb3ZlcnJpZGUgeyByZXR1cm4gU3RyaW5nKCk7IH0KIAotICAgIHZvaWQgdmlz
aXROb2Rlc0NvbmN1cnJlbnRseShKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKSBjb25zdCBmaW5h
bAorICAgIHZvaWQgdmlzaXROb2Rlc0NvbmN1cnJlbnRseShKU0M6OkFic3RyYWN0U2xvdFZpc2l0
b3ImIHZpc2l0b3IpIGNvbnN0IGZpbmFsCiAgICAgewogICAgICAgICBtX3JlY29yZC0+dmlzaXRO
b2Rlc0NvbmN1cnJlbnRseSh2aXNpdG9yKTsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9k
b20vTXV0YXRpb25SZWNvcmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vTXV0
YXRpb25SZWNvcmQuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL1dlYkNvcmUvZG9tL011
dGF0aW9uUmVjb3JkLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29w
eXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQpAQCAtMzYsNyArMzcsNyBAQAogCiBuYW1lc3BhY2Ug
SlNDIHsKIAotY2xhc3MgU2xvdFZpc2l0b3I7CitjbGFzcyBBYnN0cmFjdFNsb3RWaXNpdG9yOwog
CiB9CiAKQEAgLTcyLDcgKzczLDcgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBTdHJpbmcgb2xk
VmFsdWUoKSB7IHJldHVybiBTdHJpbmcoKTsgfQogCi0gICAgdmlydHVhbCB2b2lkIHZpc2l0Tm9k
ZXNDb25jdXJyZW50bHkoSlNDOjpTbG90VmlzaXRvciYpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFs
IHZvaWQgdmlzaXROb2Rlc0NvbmN1cnJlbnRseShKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKSBj
b25zdCA9IDA7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9kb20vU3RhdGljUmFuZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Rv
bS9TdGF0aWNSYW5nZS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2Rv
bS9TdGF0aWNSYW5nZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDE2LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03Niw3ICs3Niw3IEBAIEV4Y2Vw
dGlvbk9yPFJlZjxTdGF0aWNSYW5nZT4+IFN0YXRpY1JhbmcKICAgICByZXR1cm4gY3JlYXRlKHsg
eyBpbml0LnN0YXJ0Q29udGFpbmVyLnJlbGVhc2VOb25OdWxsKCksIGluaXQuc3RhcnRPZmZzZXQg
fSwgeyBpbml0LmVuZENvbnRhaW5lci5yZWxlYXNlTm9uTnVsbCgpLCBpbml0LmVuZE9mZnNldCB9
IH0pOwogfQogCi12b2lkIFN0YXRpY1JhbmdlOjp2aXNpdE5vZGVzQ29uY3VycmVudGx5KEpTQzo6
U2xvdFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0Cit2b2lkIFN0YXRpY1JhbmdlOjp2aXNpdE5vZGVz
Q29uY3VycmVudGx5KEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikgY29uc3QKIHsK
ICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qocm9vdChzdGFydC5jb250YWluZXIuZ2V0KCkpKTsK
ICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qocm9vdChlbmQuY29udGFpbmVyLmdldCgpKSk7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vU3RhdGljUmFuZ2UuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9kb20vU3RhdGljUmFuZ2UuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNl
L1dlYkNvcmUvZG9tL1N0YXRpY1JhbmdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMCw3ICszMCw3
IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1jbGFzcyBTbG90VmlzaXRvcjsKK2NsYXNzIEFic3Ry
YWN0U2xvdFZpc2l0b3I7CiAKIH0KIApAQCAtNTgsNyArNTgsNyBAQCBwdWJsaWM6CiAgICAgdW5z
aWduZWQgZW5kT2Zmc2V0KCkgY29uc3QgZmluYWwgeyByZXR1cm4gU2ltcGxlUmFuZ2U6OmVuZE9m
ZnNldCgpOyB9CiAgICAgYm9vbCBjb2xsYXBzZWQoKSBjb25zdCBmaW5hbCB7IHJldHVybiBTaW1w
bGVSYW5nZTo6Y29sbGFwc2VkKCk7IH0KIAotICAgIHZvaWQgdmlzaXROb2Rlc0NvbmN1cnJlbnRs
eShKU0M6OlNsb3RWaXNpdG9yJikgY29uc3Q7CisgICAgdm9pZCB2aXNpdE5vZGVzQ29uY3VycmVu
dGx5KEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpIGNvbnN0OwogCiBwcml2YXRlOgogICAgIFN0
YXRpY1JhbmdlKFNpbXBsZVJhbmdlJiYpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52
YXMvV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5jcHAJKHJldmlzaW9uIDI3Mjgz
MCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMMlJlbmRlcmluZ0NvbnRleHQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxNS0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzA3OCw3ICszMDc4LDcgQEAgYm9vbCBXZWJHTDJSZW5k
ZXJpbmdDb250ZXh0OjpjaGVja0FuZFRyYQogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIFdl
YkdMMlJlbmRlcmluZ0NvbnRleHQ6OmFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKEpTQzo6U2xvdFZp
c2l0b3ImIHZpc2l0b3IpCit2b2lkIFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OmFkZE1lbWJlcnNU
b09wYXF1ZVJvb3RzKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBX
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjphZGRNZW1iZXJzVG9PcGFxdWVSb290cyh2aXNpdG9y
KTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0wyUmVuZGVyaW5nQ29u
dGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMMlJl
bmRlcmluZ0NvbnRleHQuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE3IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYx
LDcgKzI2MSw3IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgY2hlY2tBbmRUcmFuc2xhdGVBdHRhY2ht
ZW50cyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDR0xlbnVtLCBWZWN0b3I8R0NHTGVudW0+
Jik7CiAKLSAgICB2b2lkIGFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKEpTQzo6U2xvdFZpc2l0b3Im
KSBvdmVycmlkZTsKKyAgICB2b2lkIGFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKEpTQzo6QWJzdHJh
Y3RTbG90VmlzaXRvciYpIG92ZXJyaWRlOwogCiBwcml2YXRlOgogICAgIFdlYkdMMlJlbmRlcmlu
Z0NvbnRleHQoQ2FudmFzQmFzZSYsIEdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcyk7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEZyYW1lYnVmZmVyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEZyYW1lYnVmZmVyLmNwcAko
cmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xGcmFt
ZWJ1ZmZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDA5LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDA5LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02Myw3ICs2Myw3IEBAIG5hbWVzcGFjZSB7
CiAgICAgICAgIHZvaWQgb25EZXRhY2hlZChjb25zdCBBYnN0cmFjdExvY2tlciYsIEdyYXBoaWNz
Q29udGV4dEdMKikgb3ZlcnJpZGU7CiAgICAgICAgIHZvaWQgYXR0YWNoKEdyYXBoaWNzQ29udGV4
dEdMKiwgR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBhdHRhY2htZW50KSBvdmVycmlkZTsKICAg
ICAgICAgdm9pZCB1bmF0dGFjaChHcmFwaGljc0NvbnRleHRHTCosIEdDR0xlbnVtIHRhcmdldCwg
R0NHTGVudW0gYXR0YWNobWVudCkgb3ZlcnJpZGU7Ci0gICAgICAgIHZvaWQgYWRkTWVtYmVyc1Rv
T3BhcXVlUm9vdHMoY29uc3QgQWJzdHJhY3RMb2NrZXImLCBKU0M6OlNsb3RWaXNpdG9yJikgb3Zl
cnJpZGU7CisgICAgICAgIHZvaWQgYWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMoY29uc3QgQWJzdHJh
Y3RMb2NrZXImLCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKSBvdmVycmlkZTsKIAogICAgICAg
ICBXZWJHTFJlbmRlcmJ1ZmZlckF0dGFjaG1lbnQoKSB7IH07CiAKQEAgLTE0NSw3ICsxNDUsNyBA
QCBuYW1lc3BhY2UgewogICAgICAgICAgICAgY29udGV4dC0+ZnJhbWVidWZmZXJSZW5kZXJidWZm
ZXIodGFyZ2V0LCBhdHRhY2htZW50LCBHcmFwaGljc0NvbnRleHRHTDo6UkVOREVSQlVGRkVSLCAw
KTsKICAgICB9CiAKLSAgICB2b2lkIFdlYkdMUmVuZGVyYnVmZmVyQXR0YWNobWVudDo6YWRkTWVt
YmVyc1RvT3BhcXVlUm9vdHMoY29uc3QgQWJzdHJhY3RMb2NrZXImLCBKU0M6OlNsb3RWaXNpdG9y
JiB2aXNpdG9yKQorICAgIHZvaWQgV2ViR0xSZW5kZXJidWZmZXJBdHRhY2htZW50OjphZGRNZW1i
ZXJzVG9PcGFxdWVSb290cyhjb25zdCBBYnN0cmFjdExvY2tlciYsIEpTQzo6QWJzdHJhY3RTbG90
VmlzaXRvciYgdmlzaXRvcikKICAgICB7CiAgICAgICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdCht
X3JlbmRlcmJ1ZmZlci5nZXQoKSk7CiAgICAgfQpAQCAtMTY5LDcgKzE2OSw3IEBAIG5hbWVzcGFj
ZSB7CiAgICAgICAgIHZvaWQgb25EZXRhY2hlZChjb25zdCBBYnN0cmFjdExvY2tlciYsIEdyYXBo
aWNzQ29udGV4dEdMKikgb3ZlcnJpZGU7CiAgICAgICAgIHZvaWQgYXR0YWNoKEdyYXBoaWNzQ29u
dGV4dEdMKiwgR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBhdHRhY2htZW50KSBvdmVycmlkZTsK
ICAgICAgICAgdm9pZCB1bmF0dGFjaChHcmFwaGljc0NvbnRleHRHTCosIEdDR0xlbnVtIHRhcmdl
dCwgR0NHTGVudW0gYXR0YWNobWVudCkgb3ZlcnJpZGU7Ci0gICAgICAgIHZvaWQgYWRkTWVtYmVy
c1RvT3BhcXVlUm9vdHMoY29uc3QgQWJzdHJhY3RMb2NrZXImLCBKU0M6OlNsb3RWaXNpdG9yJikg
b3ZlcnJpZGU7CisgICAgICAgIHZvaWQgYWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMoY29uc3QgQWJz
dHJhY3RMb2NrZXImLCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKSBvdmVycmlkZTsKIAogICAg
ICAgICBXZWJHTFRleHR1cmVBdHRhY2htZW50KCkgeyB9OwogCkBAIC0yNjcsNyArMjY3LDcgQEAg
bmFtZXNwYWNlIHsKICNlbmRpZgogICAgIH0KIAotICAgIHZvaWQgV2ViR0xUZXh0dXJlQXR0YWNo
bWVudDo6YWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMoY29uc3QgQWJzdHJhY3RMb2NrZXImLCBKU0M6
OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQorICAgIHZvaWQgV2ViR0xUZXh0dXJlQXR0YWNobWVudDo6
YWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMoY29uc3QgQWJzdHJhY3RMb2NrZXImLCBKU0M6OkFic3Ry
YWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiAgICAgewogICAgICAgICB2aXNpdG9yLmFkZE9wYXF1
ZVJvb3QobV90ZXh0dXJlLmdldCgpKTsKICAgICB9CkBAIC03MjEsNyArNzIxLDcgQEAgR0NHTGVu
dW0gV2ViR0xGcmFtZWJ1ZmZlcjo6Z2V0RHJhd0J1ZmZlcgogICAgIHJldHVybiBHcmFwaGljc0Nv
bnRleHRHTDo6Tk9ORTsKIH0KIAotdm9pZCBXZWJHTEZyYW1lYnVmZmVyOjphZGRNZW1iZXJzVG9P
cGFxdWVSb290cyhjb25zdCBBYnN0cmFjdExvY2tlciYgbG9ja2VyLCBKU0M6OlNsb3RWaXNpdG9y
JiB2aXNpdG9yKQordm9pZCBXZWJHTEZyYW1lYnVmZmVyOjphZGRNZW1iZXJzVG9PcGFxdWVSb290
cyhjb25zdCBBYnN0cmFjdExvY2tlciYgbG9ja2VyLCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3Im
IHZpc2l0b3IpCiB7CiAgICAgZm9yIChhdXRvJiBlbnRyeSA6IG1fYXR0YWNobWVudHMpCiAgICAg
ICAgIGVudHJ5LnZhbHVlLT5hZGRNZW1iZXJzVG9PcGFxdWVSb290cyhsb2NrZXIsIHZpc2l0b3Ip
OwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xGcmFtZWJ1ZmZlci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRnJhbWVidWZmZXIu
aAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xG
cmFtZWJ1ZmZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMDktMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM0LDcgKzM0LDcgQEAKICNpbmNsdWRlIDx3dGYv
VmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBKU0MgewotY2xhc3MgU2xvdFZpc2l0b3I7CitjbGFzcyBB
YnN0cmFjdFNsb3RWaXNpdG9yOwogfQogCiBuYW1lc3BhY2UgV1RGIHsKQEAgLTY1LDcgKzY1LDcg
QEAgcHVibGljOgogICAgICAgICB2aXJ0dWFsIHZvaWQgb25EZXRhY2hlZChjb25zdCBXVEY6OkFi
c3RyYWN0TG9ja2VyJiwgR3JhcGhpY3NDb250ZXh0R0wqKSA9IDA7CiAgICAgICAgIHZpcnR1YWwg
dm9pZCBhdHRhY2goR3JhcGhpY3NDb250ZXh0R0wqLCBHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVt
IGF0dGFjaG1lbnQpID0gMDsKICAgICAgICAgdmlydHVhbCB2b2lkIHVuYXR0YWNoKEdyYXBoaWNz
Q29udGV4dEdMKiwgR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBhdHRhY2htZW50KSA9IDA7Ci0g
ICAgICAgIHZpcnR1YWwgdm9pZCBhZGRNZW1iZXJzVG9PcGFxdWVSb290cyhjb25zdCBXVEY6OkFi
c3RyYWN0TG9ja2VyJiwgSlNDOjpTbG90VmlzaXRvciYpID0gMDsKKyAgICAgICAgdmlydHVhbCB2
b2lkIGFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKGNvbnN0IFdURjo6QWJzdHJhY3RMb2NrZXImLCBK
U0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKSA9IDA7CiAKICAgICBwcm90ZWN0ZWQ6CiAgICAgICAg
IFdlYkdMQXR0YWNobWVudCgpOwpAQCAtMTE0LDcgKzExNCw3IEBAIHB1YmxpYzoKIAogICAgIEdD
R0xlbnVtIGdldERyYXdCdWZmZXIoR0NHTGVudW0pOwogCi0gICAgdm9pZCBhZGRNZW1iZXJzVG9P
cGFxdWVSb290cyhjb25zdCBXVEY6OkFic3RyYWN0TG9ja2VyJiwgSlNDOjpTbG90VmlzaXRvciYp
OworICAgIHZvaWQgYWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMoY29uc3QgV1RGOjpBYnN0cmFjdExv
Y2tlciYsIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpOwogCiBwcml2YXRlOgogICAgIFdlYkdM
RnJhbWVidWZmZXIoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSYpOwpJbmRleDogU291cmNlL1dl
YkNvcmUvaHRtbC9jYW52YXMvV2ViR0xQcm9ncmFtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFByb2dyYW0uY3BwCShyZXZpc2lvbiAyNzI4MzApCisr
KyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFByb2dyYW0uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAyMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTIwNiw3ICsyMDYsNyBAQCBib29sIFdlYkdMUHJvZ3JhbTo6ZGV0YWNoU2hhZGVyKGNvbnN0
IEFiCiAgICAgfQogfQogCi12b2lkIFdlYkdMUHJvZ3JhbTo6YWRkTWVtYmVyc1RvT3BhcXVlUm9v
dHMoY29uc3QgQWJzdHJhY3RMb2NrZXImLCBKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordm9p
ZCBXZWJHTFByb2dyYW06OmFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKGNvbnN0IEFic3RyYWN0TG9j
a2VyJiwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHZpc2l0b3Iu
YWRkT3BhcXVlUm9vdChtX3ZlcnRleFNoYWRlci5nZXQoKSk7CiAgICAgdmlzaXRvci5hZGRPcGFx
dWVSb290KG1fZnJhZ21lbnRTaGFkZXIuZ2V0KCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvV2ViR0xQcm9ncmFtLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvV2ViR0xQcm9ncmFtLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJD
b3JlL2h0bWwvY2FudmFzL1dlYkdMUHJvZ3JhbS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzUsNyAr
MzUsNyBAQAogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIEpTQyB7Ci1jbGFz
cyBTbG90VmlzaXRvcjsKK2NsYXNzIEFic3RyYWN0U2xvdFZpc2l0b3I7CiB9CiAKIG5hbWVzcGFj
ZSBXVEYgewpAQCAtODgsNyArODgsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX3JlcXVp
cmVkVHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJDb3VudDsKICAgICB9CiAKLSAgICB2b2lkIGFkZE1l
bWJlcnNUb09wYXF1ZVJvb3RzKGNvbnN0IFdURjo6QWJzdHJhY3RMb2NrZXImLCBKU0M6OlNsb3RW
aXNpdG9yJik7CisgICAgdm9pZCBhZGRNZW1iZXJzVG9PcGFxdWVSb290cyhjb25zdCBXVEY6OkFi
c3RyYWN0TG9ja2VyJiwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAKIHByaXZhdGU6CiAg
ICAgV2ViR0xQcm9ncmFtKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UmKTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2UuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZh
cy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTc5MzEs
NyArNzkzMSw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6ZGlzcGF0Y2gKICAg
ICBxdWV1ZVRhc2tUb0Rpc3BhdGNoRXZlbnQoKmNhbnZhcywgVGFza1NvdXJjZTo6V2ViR0wsIFdl
YkdMQ29udGV4dEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLndlYmdsY29udGV4dGNoYW5nZWRF
dmVudCwgRXZlbnQ6OkNhbkJ1YmJsZTo6Tm8sIEV2ZW50OjpJc0NhbmNlbGFibGU6OlllcywgZW1w
dHlTdHJpbmcoKSkpOwogfQogCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmFkZE1l
bWJlcnNUb09wYXF1ZVJvb3RzKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2U6OmFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKEpTQzo6QWJzdHJh
Y3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG9i
amVjdEdyYXBoTG9jaygpKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2Vi
R0xSZW5kZXJpbmdDb250ZXh0QmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0
bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuaAkocmV2aXNpb24gMjcyODMwKQor
KysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
NS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtNTgsNyArNTgsNyBAQAogI2VuZGlmCiAKIG5hbWVzcGFjZSBK
U0MgewotY2xhc3MgU2xvdFZpc2l0b3I7CitjbGFzcyBBYnN0cmFjdFNsb3RWaXNpdG9yOwogfQog
CiBuYW1lc3BhY2UgV1RGIHsKQEAgLTQxMSw3ICs0MTEsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBy
ZWN5Y2xlQ29udGV4dCgpIG92ZXJyaWRlOwogICAgIHZvaWQgZGlzcGF0Y2hDb250ZXh0Q2hhbmdl
ZE5vdGlmaWNhdGlvbigpIG92ZXJyaWRlOwogCi0gICAgdmlydHVhbCB2b2lkIGFkZE1lbWJlcnNU
b09wYXF1ZVJvb3RzKEpTQzo6U2xvdFZpc2l0b3ImKTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRkTWVt
YmVyc1RvT3BhcXVlUm9vdHMoSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAgICAgLy8gVGhp
cyBsb2NrIG11c3QgYmUgaGVsZCBhY3Jvc3MgYWxsIG11dGF0aW9ucyBvZiBjb250YWluZXJzIGxp
a2UKICAgICAvLyBWZWN0b3JzLCBIYXNoU2V0cywgZXRjLiB3aGljaCBjb250YWluIFJlZlB0cjxX
ZWJHTE9iamVjdD4sIGFuZAogICAgIC8vIHdoaWNoIGFyZSB0cmF2ZXJzZWQgYnkgYWRkTWVtYmVy
c1RvT3BhcXVlUm9vdHMoKSBvciBhbnkgb2YgdGhlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9XZWJHTFRyYW5zZm9ybUZlZWRiYWNrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFRyYW5zZm9ybUZlZWRiYWNrLmNwcAkocmV2aXNpb24g
MjcyODMwKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xUcmFuc2Zvcm1GZWVk
YmFjay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzAsOCArMzAsNyBAQAogCiAjaW5jbHVkZSAiV2ViR0xD
b250ZXh0R3JvdXAuaCIKICNpbmNsdWRlICJXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmgiCi0j
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvU2xvdFZpc2l0b3IuaD4KLSNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9TbG90VmlzaXRvcklubGluZXMuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9B
YnN0cmFjdFNsb3RWaXNpdG9ySW5saW5lcy5oPgogI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CiAjaW5j
bHVkZSA8d3RmL0xvY2tlci5oPgogCkBAIC05Myw3ICs5Miw3IEBAIGJvb2wgV2ViR0xUcmFuc2Zv
cm1GZWVkYmFjazo6aGFzRW5vdWdoQnUKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBXZWJH
TFRyYW5zZm9ybUZlZWRiYWNrOjphZGRNZW1iZXJzVG9PcGFxdWVSb290cyhjb25zdCBBYnN0cmFj
dExvY2tlciYgbG9ja2VyLCBKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBXZWJHTFRy
YW5zZm9ybUZlZWRiYWNrOjphZGRNZW1iZXJzVG9PcGFxdWVSb290cyhjb25zdCBBYnN0cmFjdExv
Y2tlciYgbG9ja2VyLCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAg
Zm9yIChhdXRvJiBidWZmZXIgOiBtX2JvdW5kSW5kZXhlZFRyYW5zZm9ybUZlZWRiYWNrQnVmZmVy
cykKICAgICAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KGJ1ZmZlci5nZXQoKSk7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFRyYW5zZm9ybUZlZWRiYWNrLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xUcmFuc2Zvcm1GZWVkYmFj
ay5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJH
TFRyYW5zZm9ybUZlZWRiYWNrLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMSw3ICszMSw3IEBACiAj
aW5jbHVkZSAiV2ViR0xTaGFyZWRPYmplY3QuaCIKIAogbmFtZXNwYWNlIEpTQyB7Ci1jbGFzcyBT
bG90VmlzaXRvcjsKK2NsYXNzIEFic3RyYWN0U2xvdFZpc2l0b3I7CiB9CiAKIG5hbWVzcGFjZSBX
VEYgewpAQCAtNzAsNyArNzAsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgYm9vbCBoYXNFbm91Z2hC
dWZmZXJzKEdDR0x1aW50IG51bVJlcXVpcmVkKSBjb25zdDsKIAotICAgIHZvaWQgYWRkTWVtYmVy
c1RvT3BhcXVlUm9vdHMoY29uc3QgQWJzdHJhY3RMb2NrZXImLCBKU0M6OlNsb3RWaXNpdG9yJik7
CisgICAgdm9pZCBhZGRNZW1iZXJzVG9PcGFxdWVSb290cyhjb25zdCBBYnN0cmFjdExvY2tlciYs
IEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpOwogCiBwcml2YXRlOgogICAgIFdlYkdMVHJhbnNm
b3JtRmVlZGJhY2soV2ViR0wyUmVuZGVyaW5nQ29udGV4dCYpOwpJbmRleDogU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvV2ViR0xWZXJ0ZXhBcnJheU9iamVjdEJhc2UuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVmVydGV4QXJyYXlPYmplY3RCYXNl
LmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2Vi
R0xWZXJ0ZXhBcnJheU9iamVjdEJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjksOCArMjks
NyBAQAogI2lmIEVOQUJMRShXRUJHTCkKIAogI2luY2x1ZGUgIldlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2UuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9TbG90VmlzaXRvci5oPgotI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL1Nsb3RWaXNpdG9ySW5saW5lcy5oPgorI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL0Fic3RyYWN0U2xvdFZpc2l0b3JJbmxpbmVzLmg+CiAjaW5jbHVkZSA8d3RmL0xv
Y2tlci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0xMDksNyArMTA4LDcgQEAgdm9pZCBX
ZWJHTFZlcnRleEFycmF5T2JqZWN0QmFzZTo6c2V0VmVydAogICAgIG1fdmVydGV4QXR0cmliU3Rh
dGVbaW5kZXhdLmRpdmlzb3IgPSBkaXZpc29yOwogfQogCi12b2lkIFdlYkdMVmVydGV4QXJyYXlP
YmplY3RCYXNlOjphZGRNZW1iZXJzVG9PcGFxdWVSb290cyhjb25zdCBBYnN0cmFjdExvY2tlciYs
IEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIFdlYkdMVmVydGV4QXJyYXlPYmplY3RC
YXNlOjphZGRNZW1iZXJzVG9PcGFxdWVSb290cyhjb25zdCBBYnN0cmFjdExvY2tlciYsIEpTQzo6
QWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJv
b3QobV9ib3VuZEVsZW1lbnRBcnJheUJ1ZmZlci5nZXQoKSk7CiAgICAgZm9yIChhdXRvJiBzdGF0
ZSA6IG1fdmVydGV4QXR0cmliU3RhdGUpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZh
cy9XZWJHTFZlcnRleEFycmF5T2JqZWN0QmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2h0bWwvY2FudmFzL1dlYkdMVmVydGV4QXJyYXlPYmplY3RCYXNlLmgJKHJldmlzaW9uIDI3
MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVmVydGV4QXJyYXlPYmpl
Y3RCYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE1LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMiw3ICszMiw3IEBACiAjaW5jbHVkZSAiV2Vi
R0xDb250ZXh0T2JqZWN0LmgiCiAKIG5hbWVzcGFjZSBKU0MgewotY2xhc3MgU2xvdFZpc2l0b3I7
CitjbGFzcyBBYnN0cmFjdFNsb3RWaXNpdG9yOwogfQogCiBuYW1lc3BhY2UgV1RGIHsKQEAgLTc3
LDcgKzc3LDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBzZXRWZXJ0ZXhBdHRyaWJEaXZpc29yKEdD
R0x1aW50IGluZGV4LCBHQ0dMdWludCBkaXZpc29yKTsKIAotICAgIHZvaWQgYWRkTWVtYmVyc1Rv
T3BhcXVlUm9vdHMoY29uc3QgV1RGOjpBYnN0cmFjdExvY2tlciYsIEpTQzo6U2xvdFZpc2l0b3Im
KTsKKyAgICB2b2lkIGFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKGNvbnN0IFdURjo6QWJzdHJhY3RM
b2NrZXImLCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKTsKIAogcHJvdGVjdGVkOgogICAgIFdl
YkdMVmVydGV4QXJyYXlPYmplY3RCYXNlKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UmLCBUeXBl
KTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>420237</attachid>
            <date>2021-02-14 01:19:08 -0800</date>
            <delta_ts>2021-02-14 11:54:38 -0800</delta_ts>
            <desc>work in progress.</desc>
            <filename>bug-217274l.patch</filename>
            <type>text/plain</type>
            <size>577798</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDI3MjgzMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtNjEzLDYgKzYxMyw4IEBAIHNldChKYXZhU2NyaXB0Q29yZV9QUklWQVRFX0ZSQU1FV09SS19I
RUEKICAgICBkb21qaXQvRE9NSklUSGVhcFJhbmdlLmgKICAgICBkb21qaXQvRE9NSklUU2lnbmF0
dXJlLmgKIAorICAgIGhlYXAvQWJzdHJhY3RTbG90VmlzaXRvci5oCisgICAgaGVhcC9BYnN0cmFj
dFNsb3RWaXNpdG9ySW5saW5lcy5oCiAgICAgaGVhcC9BbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmgK
ICAgICBoZWFwL0FsbG9jYXRpb25GYWlsdXJlTW9kZS5oCiAgICAgaGVhcC9BbGxvY2F0b3IuaApA
QCAtNjg3LDEyICs2ODksMTQgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1BSSVZBVEVfRlJBTUVXT1JL
X0hFQQogICAgIGhlYXAvU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQuaAogICAgIGhlYXAvU2xvdFZp
c2l0b3IuaAogICAgIGhlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmgKKyAgICBoZWFwL1Nsb3RWaXNp
dG9yTWFjcm9zLmgKICAgICBoZWFwL1N0cm9uZy5oCiAgICAgaGVhcC9TdHJvbmdJbmxpbmVzLmgK
ICAgICBoZWFwL1N1YnNwYWNlLmgKICAgICBoZWFwL1N1YnNwYWNlSW5saW5lcy5oCiAgICAgaGVh
cC9TeW5jaHJvbm91c25lc3MuaAogICAgIGhlYXAvVGlueUJsb29tRmlsdGVyLmgKKyAgICBoZWFw
L1ZlcmlmaWVyU2xvdFZpc2l0b3IuaAogICAgIGhlYXAvVmlzaXRSYWNlS2V5LmgKICAgICBoZWFw
L1dlYWsuaAogICAgIGhlYXAvV2Vha0Jsb2NrLmgKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9Tb3VyY2VzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNl
cy50eHQJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2Vz
LnR4dAkod29ya2luZyBjb3B5KQpAQCAtNTYzLDYgKzU2Myw3IEBAIGhlYXAvU3RvcElmTmVjZXNz
YXJ5VGltZXIuY3BwCiBoZWFwL1N1YnNwYWNlLmNwcAogaGVhcC9TeW5jaHJvbm91c1N0b3BUaGVX
b3JsZE11dGF0b3JTY2hlZHVsZXIuY3BwCiBoZWFwL1N5bmNocm9ub3VzbmVzcy5jcHAKK2hlYXAv
VmVyaWZpZXJTbG90VmlzaXRvci5jcHAKIGhlYXAvVmlzaXRSYWNlS2V5LmNwcAogaGVhcC9XZWFr
LmNwcAogaGVhcC9XZWFrQmxvY2suY3BwCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJ
L0pTQVBJV3JhcHBlck9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9BUEkvSlNBUElXcmFwcGVyT2JqZWN0LmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9BUEkvSlNBUElXcmFwcGVyT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTkgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC00MSw3ICs0MSw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBzdWJzcGFjZUZvcihWTSYp
IHsgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQogICAgIAogICAgIHZvaWQgZmluaXNo
Q3JlYXRpb24oVk0mKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIEpT
Qzo6U2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX0VYUE9SVF9WSVNJVF9DSElMRFJFTjsKICAg
ICAKICAgICB2b2lkKiB3cmFwcGVkT2JqZWN0KCkgeyByZXR1cm4gbV93cmFwcGVkT2JqZWN0OyB9
CiAgICAgdm9pZCBzZXRXcmFwcGVkT2JqZWN0KHZvaWQqKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvSlNBUElXcmFwcGVyT2JqZWN0Lm1tCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9BUEkvSlNBUElXcmFwcGVyT2JqZWN0Lm1tCShyZXZpc2lvbiAyNzI4MzAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQVBJV3JhcHBlck9iamVjdC5tbQkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
OCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTM3LDcgKzM3LDcgQEAKIGNsYXNzIEpTQVBJV3JhcHBlck9iamVjdEhh
bmRsZU93bmVyIGZpbmFsIDogcHVibGljIEpTQzo6V2Vha0hhbmRsZU93bmVyIHsKIHB1YmxpYzoK
ICAgICB2b2lkIGZpbmFsaXplKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqKSBmaW5h
bDsKLSAgICBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6
VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6U2xvdFZpc2l0b3ImLCBjb25zdCBjaGFyKiop
IGZpbmFsOworICAgIGJvb2wgaXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8
SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiwg
Y29uc3QgY2hhcioqKSBmaW5hbDsKIH07CiAKIHN0YXRpYyBKU0FQSVdyYXBwZXJPYmplY3RIYW5k
bGVPd25lcioganNBUElXcmFwcGVyT2JqZWN0SGFuZGxlT3duZXIoKQpAQCAtNTYsMTQgKzU2LDE0
IEBAIHZvaWQgSlNBUElXcmFwcGVyT2JqZWN0SGFuZGxlT3duZXI6OmZpbmEKICAgICBKU0M6Oldl
YWtTZXQ6OmRlYWxsb2NhdGUoSlNDOjpXZWFrSW1wbDo6YXNXZWFrSW1wbChoYW5kbGUuc2xvdCgp
KSk7CiB9CiAKLWJvb2wgSlNBUElXcmFwcGVyT2JqZWN0SGFuZGxlT3duZXI6OmlzUmVhY2hhYmxl
RnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwg
SlNDOjpTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqKQorYm9vbCBKU0FQSVdyYXBw
ZXJPYmplY3RIYW5kbGVPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5k
bGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3Im
IHZpc2l0b3IsIGNvbnN0IGNoYXIqKikKIHsKICAgICBKU0M6OkpTQVBJV3JhcHBlck9iamVjdCog
d3JhcHBlck9iamVjdCA9IEpTQzo6anNDYXN0PEpTQzo6SlNBUElXcmFwcGVyT2JqZWN0Kj4oaGFu
ZGxlLmdldCgpLmFzQ2VsbCgpKTsKICAgICAvLyBXZSB1c2UgdGhlIEpTR2xvYmFsT2JqZWN0IHdo
ZW4gcHJvY2Vzc2luZyB3ZWFrIGhhbmRsZXMgdG8gcHJldmVudCB0aGUgc2l0dWF0aW9uIHdoZXJl
IHVzaW5nCiAgICAgLy8gdGhlIHNhbWUgT2JqZWN0aXZlLUMgb2JqZWN0IGluIG11bHRpcGxlIGds
b2JhbCBvYmplY3RzIGtlZXBzIGFsbCBvZiB0aGUgZ2xvYmFsIG9iamVjdHMgYWxpdmUuCiAgICAg
aWYgKCF3cmFwcGVyT2JqZWN0LT53cmFwcGVkT2JqZWN0KCkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICByZXR1cm4gdmlzaXRvci52bSgpLmhlYXAuaXNNYXJrZWQod3JhcHBlck9iamVjdC0+
c3RydWN0dXJlKCktPmdsb2JhbE9iamVjdCgpKSAmJiB2aXNpdG9yLmNvbnRhaW5zT3BhcXVlUm9v
dCh3cmFwcGVyT2JqZWN0LT53cmFwcGVkT2JqZWN0KCkpOworICAgIHJldHVybiB2aXNpdG9yLmlz
TWFya2VkKHdyYXBwZXJPYmplY3QtPnN0cnVjdHVyZSgpLT5nbG9iYWxPYmplY3QoKSkgJiYgdmlz
aXRvci5jb250YWluc09wYXF1ZVJvb3Qod3JhcHBlck9iamVjdC0+d3JhcHBlZE9iamVjdCgpKTsK
IH0KIAogbmFtZXNwYWNlIEpTQyB7CkBAIC03Myw2ICs3Myw4IEBAIHN0YXRpYyBKU0NfREVDTEFS
RV9IT1NUX0ZVTkNUSU9OKGNvbnN0cnUKIHN0YXRpYyBKU0NfREVDTEFSRV9DVVNUT01fR0VUVEVS
KGNhbGxiYWNrR2V0dGVySlNBUElXcmFwcGVyT2JqZWN0Q2FsbGJhY2tPYmplY3QpOwogc3RhdGlj
IEpTQ19ERUNMQVJFX0NVU1RPTV9HRVRURVIoc3RhdGljRnVuY3Rpb25HZXR0ZXJKU0FQSVdyYXBw
ZXJPYmplY3RDYWxsYmFja09iamVjdCk7CiAKK0RFRklORV9URU1QTEFURV9WSVNJVF9DSElMRFJF
Tih0ZW1wbGF0ZTw+LCBKU0NhbGxiYWNrT2JqZWN0PEpTQVBJV3JhcHBlck9iamVjdD4pOworCiB0
ZW1wbGF0ZSA8PiBjb25zdCBDbGFzc0luZm8gSlNDYWxsYmFja09iamVjdDxKU0FQSVdyYXBwZXJP
YmplY3Q+OjpzX2luZm8gPSB7ICJKU0FQSVdyYXBwZXJPYmplY3QiLCAmQmFzZTo6c19pbmZvLCBu
dWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTQ2FsbGJhY2tPYmplY3QpIH07
CiB0ZW1wbGF0ZSA8PiBjb25zdCBib29sIEpTQ2FsbGJhY2tPYmplY3Q8SlNBUElXcmFwcGVyT2Jq
ZWN0Pjo6bmVlZHNEZXN0cnVjdGlvbiA9IHRydWU7CiAKQEAgLTEyMyw3ICsxMjUsOCBAQCB2b2lk
IEpTQVBJV3JhcHBlck9iamVjdDo6c2V0V3JhcHBlZE9iamVjCiAgICAgbV93cmFwcGVkT2JqZWN0
ID0gW3N0YXRpY19jYXN0PGlkPih3cmFwcGVkT2JqZWN0KSByZXRhaW5dOwogfQogCi12b2lkIEpT
QVBJV3JhcHBlck9iamVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIEpTQzo6U2xvdFZp
c2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0FQSVdy
YXBwZXJPYmplY3Q6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlz
aXRvcikKIHsKICAgICBKU0FQSVdyYXBwZXJPYmplY3QqIHRoaXNPYmplY3QgPSBKU0M6OmpzQ2Fz
dDxKU0FQSVdyYXBwZXJPYmplY3QqPihjZWxsKTsKICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKGNl
bGwsIHZpc2l0b3IpOwpAQCAtMTMzLDYgKzEzNiw4IEBAIHZvaWQgSlNBUElXcmFwcGVyT2JqZWN0
Ojp2aXNpdENoaWxkcmVuKEoKICAgICAgICAgc2NhbkV4dGVybmFsT2JqZWN0R3JhcGgodmlzaXRv
ci52bSgpLCB2aXNpdG9yLCB3cmFwcGVkT2JqZWN0KTsKIH0KIAorREVGSU5FX0VYUE9SVF9WSVNJ
VF9DSElMRFJFTihKU0FQSVdyYXBwZXJPYmplY3QpOworCiB0ZW1wbGF0ZSA8PgogSXNvU3Vic3Bh
Y2UqIEpTQ2FsbGJhY2tPYmplY3Q8SlNBUElXcmFwcGVyT2JqZWN0Pjo6c3Vic3BhY2VGb3JJbXBs
KFZNJiB2bSwgU3Vic3BhY2VBY2Nlc3MgbW9kZSkKIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0LmNwcAkocmV2aXNpb24gMjcyODMwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNyBBcHBs
ZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA3IEVy
aWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC00MSw2ICs0
MSw5IEBAIHN0YXRpYyBKU0NfREVDTEFSRV9DVVNUT01fR0VUVEVSKHN0YXRpY0YKIHN0YXRpYyBK
U0NfREVDTEFSRV9DVVNUT01fR0VUVEVSKGNhbGxiYWNrR2V0dGVySlNHbG9iYWxPYmplY3RDYWxs
YmFja09iamVjdCk7CiBzdGF0aWMgSlNDX0RFQ0xBUkVfQ1VTVE9NX0dFVFRFUihzdGF0aWNGdW5j
dGlvbkdldHRlckpTR2xvYmFsT2JqZWN0Q2FsbGJhY2tPYmplY3QpOwogCitERUZJTkVfVEVNUExB
VEVfVklTSVRfQ0hJTERSRU4odGVtcGxhdGU8PiwgSlNDYWxsYmFja09iamVjdDxKU05vbkZpbmFs
T2JqZWN0Pik7CitERUZJTkVfVEVNUExBVEVfVklTSVRfQ0hJTERSRU4odGVtcGxhdGU8PiwgSlND
YWxsYmFja09iamVjdDxKU0dsb2JhbE9iamVjdD4pOworCiAvLyBEZWZpbmUgdGhlIHR3byB0eXBl
cyBvZiBKU0NhbGxiYWNrT2JqZWN0cyB3ZSBzdXBwb3J0LgogdGVtcGxhdGUgPD4gY29uc3QgQ2xh
c3NJbmZvIEpTQ2FsbGJhY2tPYmplY3Q8SlNOb25GaW5hbE9iamVjdD46OnNfaW5mbyA9IHsgIkNh
bGxiYWNrT2JqZWN0IiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01F
VEhPRF9UQUJMRShKU0NhbGxiYWNrT2JqZWN0KSB9OwogdGVtcGxhdGUgPD4gY29uc3QgQ2xhc3NJ
bmZvIEpTQ2FsbGJhY2tPYmplY3Q8SlNHbG9iYWxPYmplY3Q+OjpzX2luZm8gPSB7ICJDYWxsYmFj
a0dsb2JhbE9iamVjdCIsICZCYXNlOjpzX2luZm8sIG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9N
RVRIT0RfVEFCTEUoSlNDYWxsYmFja09iamVjdCkgfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdC5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3QuaAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcgRXJpYyBTZWlk
ZWwgPGVyaWNAd2Via2l0Lm9yZz4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTY5LDcgKzY5LDEwIEBA
IHB1YmxpYzoKICAgICAgICAgbV9wcml2YXRlUHJvcGVydGllcy0+ZGVsZXRlUHJpdmF0ZVByb3Bl
cnR5KHByb3BlcnR5TmFtZSk7CiAgICAgfQogCi0gICAgdm9pZCB2aXNpdENoaWxkcmVuKFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQorICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CisKKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgorICAgIHZvaWQgdmlzaXRDaGlsZHJlbihWaXNpdG9yJiB2
aXNpdG9yKQogICAgIHsKICAgICAgICAgSlNQcml2YXRlUHJvcGVydHlNYXAqIHByb3BlcnRpZXMg
PSBtX3ByaXZhdGVQcm9wZXJ0aWVzLmdldCgpOwogICAgICAgICBpZiAoIXByb3BlcnRpZXMpCkBA
IC0xMDMsNyArMTA2LDggQEAgcHVibGljOgogICAgICAgICAgICAgbV9wcm9wZXJ0eU1hcC5yZW1v
dmUocHJvcGVydHlOYW1lLmltcGwoKSk7CiAgICAgICAgIH0KIAotICAgICAgICB2b2lkIHZpc2l0
Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFZpc2l0b3I+CisgICAgICAgIHZvaWQgdmlzaXRDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQog
ICAgICAgICB7CiAgICAgICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2xvY2spOwogICAgICAg
ICAgICAgZm9yIChhdXRvJiBwYWlyIDogbV9wcm9wZXJ0eU1hcCkgewpAQCAtMjE2LDEzICsyMjAs
NyBAQCBwcml2YXRlOgogICAgIHN0YXRpYyBDYWxsRGF0YSBnZXRDb25zdHJ1Y3REYXRhKEpTQ2Vs
bCopOwogICAgIHN0YXRpYyBDYWxsRGF0YSBnZXRDYWxsRGF0YShKU0NlbGwqKTsKIAotICAgIHN0
YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRv
cikKLSAgICB7Ci0gICAgICAgIEpTQ2FsbGJhY2tPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8
SlNDYWxsYmFja09iamVjdCo+KGNlbGwpOwotICAgICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVS
SVRTKChzdGF0aWNfY2FzdDxQYXJlbnQqPih0aGlzT2JqZWN0KSksIEpTQ2FsbGJhY2tPYmplY3Q8
UGFyZW50Pjo6aW5mbygpKTsKLSAgICAgICAgUGFyZW50Ojp2aXNpdENoaWxkcmVuKHRoaXNPYmpl
Y3QsIHZpc2l0b3IpOwotICAgICAgICB0aGlzT2JqZWN0LT5tX2NhbGxiYWNrT2JqZWN0RGF0YS0+
dmlzaXRDaGlsZHJlbih2aXNpdG9yKTsKLSAgICB9CisgICAgREVDTEFSRV9URU1QTEFURV9WSVNJ
VF9DSElMRFJFTjsKIAogICAgIHZvaWQgaW5pdChKU0dsb2JhbE9iamVjdCopOwogIApAQCAtMjQ1
LDYgKzI0MywxNiBAQCBwcml2YXRlOgogICAgIGNvbnN0IENsYXNzSW5mbyogbV9jbGFzc0luZm8g
eyBudWxscHRyIH07CiB9OwogCit0ZW1wbGF0ZSA8Y2xhc3MgUGFyZW50PgordGVtcGxhdGU8dHlw
ZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNDYWxsYmFja09iamVjdDxQYXJlbnQ+Ojp2aXNpdENoaWxk
cmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgSlNDYWxsYmFj
a09iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0NhbGxiYWNrT2JqZWN0Kj4oY2VsbCk7Cisg
ICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUygoc3RhdGljX2Nhc3Q8UGFyZW50Kj4odGhpc09i
amVjdCkpLCBKU0NhbGxiYWNrT2JqZWN0PFBhcmVudD46OmluZm8oKSk7CisgICAgUGFyZW50Ojp2
aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOworICAgIHRoaXNPYmplY3QtPm1fY2Fs
bGJhY2tPYmplY3REYXRhLT52aXNpdENoaWxkcmVuKHZpc2l0b3IpOworfQorCiB9IC8vIG5hbWVz
cGFjZSBKU0MKIAogLy8gaW5jbHVkZSB0aGUgYWN0dWFsIHRlbXBsYXRlIGNsYXNzIGltcGxlbWVu
dGF0aW9uCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTTWFuYWdlZFZhbHVlLm1t
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNNYW5hZ2VkVmFsdWUu
bW0JKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNNYW5h
Z2VkVmFsdWUubW0JKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDEzLCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDIsNyArNDIsNyBAQAogY2xhc3MgSlNN
YW5hZ2VkVmFsdWVIYW5kbGVPd25lciBmaW5hbCA6IHB1YmxpYyBKU0M6OldlYWtIYW5kbGVPd25l
ciB7CiBwdWJsaWM6CiAgICAgdm9pZCBmaW5hbGl6ZShKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+
LCB2b2lkKiBjb250ZXh0KSBmaW5hbDsKLSAgICBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJv
b3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6U2xvdFZp
c2l0b3ImLCBjb25zdCBjaGFyKiopIGZpbmFsOworICAgIGJvb2wgaXNSZWFjaGFibGVGcm9tT3Bh
cXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCwgSlNDOjpB
YnN0cmFjdFNsb3RWaXNpdG9yJiwgY29uc3QgY2hhcioqKSBmaW5hbDsKIH07CiAKIHN0YXRpYyBK
U01hbmFnZWRWYWx1ZUhhbmRsZU93bmVyJiBtYW5hZ2VkVmFsdWVIYW5kbGVPd25lcigpCkBAIC0x
ODAsNyArMTgwLDcgQEAgQGludGVyZmFjZSBKU01hbmFnZWRWYWx1ZSAoUHJpdmF0ZU1ldGhvZAog
LSAodm9pZClkaXNjb25uZWN0VmFsdWU7CiBAZW5kCiAKLWJvb2wgSlNNYW5hZ2VkVmFsdWVIYW5k
bGVPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtu
b3duPiwgdm9pZCogY29udGV4dCwgSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hh
cioqIHJlYXNvbikKK2Jvb2wgSlNNYW5hZ2VkVmFsdWVIYW5kbGVPd25lcjo6aXNSZWFjaGFibGVG
cm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCwg
SlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQog
ewogICAgIGlmIChVTkxJS0VMWShyZWFzb24pKQogICAgICAgICAqcmVhc29uID0gIkpTTWFuYWdl
ZFZhbHVlIGlzIG9wYXF1ZSByb290IjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkv
SlNNYXJraW5nQ29uc3RyYWludFByaXZhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9BUEkvSlNNYXJraW5nQ29uc3RyYWludFByaXZhdGUuY3BwCShyZXZpc2lvbiAy
NzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTTWFya2luZ0NvbnN0cmFpbnRQ
cml2YXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsNyBAQCBuYW1lc3BhY2Ugewog
QXRvbWljPHVuc2lnbmVkPiBjb25zdHJhaW50Q291bnRlcjsKIAogc3RydWN0IE1hcmtlciA6IEpT
TWFya2VyIHsKLSAgICBTbG90VmlzaXRvciogdmlzaXRvcjsKKyAgICBBYnN0cmFjdFNsb3RWaXNp
dG9yKiB2aXNpdG9yOwogfTsKIAogYm9vbCBpc01hcmtlZChKU01hcmtlclJlZiBtYXJrZXJSZWYs
IEpTT2JqZWN0UmVmIG9iamVjdFJlZikKQEAgLTQ0LDcgKzQ0LDcgQEAgYm9vbCBpc01hcmtlZChK
U01hcmtlclJlZiBtYXJrZXJSZWYsIEpTTwogICAgIGlmICghb2JqZWN0UmVmKQogICAgICAgICBy
ZXR1cm4gdHJ1ZTsgLy8gTnVsbCBpcyBhbiBpbW1vcnRhbCBvYmplY3QuCiAgICAgCi0gICAgcmV0
dXJuIHN0YXRpY19jYXN0PE1hcmtlcio+KG1hcmtlclJlZiktPnZpc2l0b3ItPnZtKCkuaGVhcC5p
c01hcmtlZCh0b0pTKG9iamVjdFJlZikpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxNYXJrZXIq
PihtYXJrZXJSZWYpLT52aXNpdG9yLT5pc01hcmtlZCh0b0pTKG9iamVjdFJlZikpOwogfQogCiB2
b2lkIG1hcmsoSlNNYXJrZXJSZWYgbWFya2VyUmVmLCBKU09iamVjdFJlZiBvYmplY3RSZWYpCkBA
IC03Myw3ICs3Myw3IEBAIHZvaWQgSlNDb250ZXh0R3JvdXBBZGRNYXJraW5nQ29uc3RyYWludCgK
ICAgICBhdXRvIGNvbnN0cmFpbnQgPSBtYWtlVW5pcXVlPFNpbXBsZU1hcmtpbmdDb25zdHJhaW50
PigKICAgICAgICAgdG9DU3RyaW5nKCJBbWMiLCBjb25zdHJhaW50SW5kZXgsICIoIiwgUmF3UG9p
bnRlcihiaXR3aXNlX2Nhc3Q8dm9pZCo+KGNvbnN0cmFpbnRDYWxsYmFjaykpLCAiKSIpLAogICAg
ICAgICB0b0NTdHJpbmcoIkFQSSBNYXJraW5nIENvbnN0cmFpbnQgIyIsIGNvbnN0cmFpbnRJbmRl
eCwgIiAoIiwgUmF3UG9pbnRlcihiaXR3aXNlX2Nhc3Q8dm9pZCo+KGNvbnN0cmFpbnRDYWxsYmFj
aykpLCAiLCAiLCBSYXdQb2ludGVyKHVzZXJEYXRhKSwgIikiKSwKLSAgICAgICAgW2NvbnN0cmFp
bnRDYWxsYmFjaywgdXNlckRhdGFdIChTbG90VmlzaXRvciYgdmlzaXRvcikgeworICAgICAgICBb
Y29uc3RyYWludENhbGxiYWNrLCB1c2VyRGF0YV0gKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0
b3IpIHsKICAgICAgICAgICAgIE1hcmtlciBtYXJrZXI7CiAgICAgICAgICAgICBtYXJrZXIuSXNN
YXJrZWQgPSBpc01hcmtlZDsKICAgICAgICAgICAgIG1hcmtlci5NYXJrID0gbWFyazsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWaXJ0dWFsTWFjaGluZS5tbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmlydHVhbE1hY2hpbmUubW0JKHJldmlz
aW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWaXJ0dWFsTWFjaGlu
ZS5tbQkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMxNSw3ICszMTUsNyBAQCArICh2b2lkKXNldENyYXNo
T25WTUNyZWF0aW9uOihCT09MKXNob3VsCiAKIEBlbmQKIAotc3RhdGljIHZvaWQgc2NhbkV4dGVy
bmFsT2JqZWN0R3JhcGgoSlNDOjpWTSYgdm0sIEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IsIHZv
aWQqIHJvb3QsIGJvb2wgbG9ja0FjcXVpcmVkKQorc3RhdGljIHZvaWQgc2NhbkV4dGVybmFsT2Jq
ZWN0R3JhcGgoSlNDOjpWTSYgdm0sIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvciwg
dm9pZCogcm9vdCwgYm9vbCBsb2NrQWNxdWlyZWQpCiB7CiAgICAgQGF1dG9yZWxlYXNlcG9vbCB7
CiAgICAgICAgIEpTVmlydHVhbE1hY2hpbmUgKnZpcnR1YWxNYWNoaW5lID0gW0pTVk1XcmFwcGVy
Q2FjaGUgd3JhcHBlckZvckpTQ29udGV4dEdyb3VwUmVmOnRvUmVmKCZ2bSldOwpAQCAtMzQ3LDEz
ICszNDcsMTMgQEAgc3RhdGljIHZvaWQgc2NhbkV4dGVybmFsT2JqZWN0R3JhcGgoSlNDOgogICAg
IH0KIH0KIAotdm9pZCBzY2FuRXh0ZXJuYWxPYmplY3RHcmFwaChKU0M6OlZNJiB2bSwgSlNDOjpT
bG90VmlzaXRvciYgdmlzaXRvciwgdm9pZCogcm9vdCkKK3ZvaWQgc2NhbkV4dGVybmFsT2JqZWN0
R3JhcGgoSlNDOjpWTSYgdm0sIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvciwgdm9p
ZCogcm9vdCkKIHsKICAgICBib29sIGxvY2tBY3F1aXJlZCA9IGZhbHNlOwogICAgIHNjYW5FeHRl
cm5hbE9iamVjdEdyYXBoKHZtLCB2aXNpdG9yLCByb290LCBsb2NrQWNxdWlyZWQpOwogfQogCi12
b2lkIHNjYW5FeHRlcm5hbFJlbWVtYmVyZWRTZXQoSlNDOjpWTSYgdm0sIEpTQzo6U2xvdFZpc2l0
b3ImIHZpc2l0b3IpCit2b2lkIHNjYW5FeHRlcm5hbFJlbWVtYmVyZWRTZXQoSlNDOjpWTSYgdm0s
IEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBAYXV0b3JlbGVhc2Vw
b29sIHsKICAgICAgICAgSlNWaXJ0dWFsTWFjaGluZSAqdmlydHVhbE1hY2hpbmUgPSBbSlNWTVdy
YXBwZXJDYWNoZSB3cmFwcGVyRm9ySlNDb250ZXh0R3JvdXBSZWY6dG9SZWYoJnZtKV07CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmlydHVhbE1hY2hpbmVJbnRlcm5hbC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWaXJ0dWFsTWFjaGluZUlu
dGVybmFsLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkv
SlNWaXJ0dWFsTWFjaGluZUludGVybmFsLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzIsNyArMzIs
NyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIGNsYXNzIFZNOwotY2xhc3MgU2xvdFZpc2l0b3I7Citj
bGFzcyBBYnN0cmFjdFNsb3RWaXNpdG9yOwogfQogCiAjaWYgZGVmaW5lZChfX09CSkNfXykKQEAg
LTU0LDggKzU0LDggQEAgSlNDb250ZXh0R3JvdXBSZWYgZ2V0R3JvdXBGcm9tVmlydHVhbE1hYwog
CiAjZW5kaWYgLy8gZGVmaW5lZChfX09CSkNfXykKIAotdm9pZCBzY2FuRXh0ZXJuYWxPYmplY3RH
cmFwaChKU0M6OlZNJiwgSlNDOjpTbG90VmlzaXRvciYsIHZvaWQqIHJvb3QpOwotdm9pZCBzY2Fu
RXh0ZXJuYWxSZW1lbWJlcmVkU2V0KEpTQzo6Vk0mLCBKU0M6OlNsb3RWaXNpdG9yJik7Cit2b2lk
IHNjYW5FeHRlcm5hbE9iamVjdEdyYXBoKEpTQzo6Vk0mLCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0
b3ImLCB2b2lkKiByb290KTsKK3ZvaWQgc2NhbkV4dGVybmFsUmVtZW1iZXJlZFNldChKU0M6OlZN
JiwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAKICNlbmRpZiAvLyBKU0NfT0JKQ19BUElf
RU5BQkxFRAogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL01hcmtlZEpTVmFsdWVS
ZWZBcnJheS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9NYXJr
ZWRKU1ZhbHVlUmVmQXJyYXkuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvQVBJL01hcmtlZEpTVmFsdWVSZWZBcnJheS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMC0yMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDYs
NyArNDYsNyBAQCBNYXJrZWRKU1ZhbHVlUmVmQXJyYXk6On5NYXJrZWRKU1ZhbHVlUmVmCiAgICAg
ICAgIHJlbW92ZSgpOwogfQogCi12b2lkIE1hcmtlZEpTVmFsdWVSZWZBcnJheTo6dmlzaXRBZ2dy
ZWdhdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIE1hcmtlZEpTVmFsdWVSZWZBcnJheTo6
dmlzaXRBZ2dyZWdhdGUoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU1Zh
bHVlUmVmKiBidWZmZXIgPSBkYXRhKCk7CiAgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IDA7IGlu
ZGV4IDwgbV9zaXplOyArK2luZGV4KSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJ
L01hcmtlZEpTVmFsdWVSZWZBcnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9BUEkvTWFya2VkSlNWYWx1ZVJlZkFycmF5LmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvTWFya2VkSlNWYWx1ZVJlZkFycmF5LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMC0yMDIxIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtNjIsNyArNjIsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX2lubGluZUJ1ZmZl
cjsKICAgICB9CiAKLSAgICB2b2lkIHZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJik7CisgICAg
dm9pZCB2aXNpdEFnZ3JlZ2F0ZShBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAKIHByaXZhdGU6CiAg
ICAgdW5zaWduZWQgbV9zaXplOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGli
L0pTQVBJV3JhcHBlckdsb2JhbE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL0FQSS9nbGliL0pTQVBJV3JhcHBlckdsb2JhbE9iamVjdC5jcHAJKHJldmlzaW9u
IDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0FQSVdyYXBwZXJH
bG9iYWxPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OSw2ICs1OSw4IEBAIHN0YXRpYyBK
U0NfREVDTEFSRV9IT1NUX0ZVTkNUSU9OKGNvbnN0cnUKIHN0YXRpYyBKU0NfREVDTEFSRV9DVVNU
T01fR0VUVEVSKGNhbGxiYWNrR2V0dGVySlNBUElXcmFwcGVyR2xvYmFsT2JqZWN0Q2FsbGJhY2tP
YmplY3QpOwogc3RhdGljIEpTQ19ERUNMQVJFX0NVU1RPTV9HRVRURVIoc3RhdGljRnVuY3Rpb25H
ZXR0ZXJKU0FQSVdyYXBwZXJHbG9iYWxPYmplY3RDYWxsYmFja09iamVjdCk7CiAKK0RFRklORV9U
RU1QTEFURV9WSVNJVF9DSElMRFJFTih0ZW1wbGF0ZTw+LCBKU0NhbGxiYWNrT2JqZWN0PEpTQVBJ
V3JhcHBlckdsb2JhbE9iamVjdD4pOworCiB0ZW1wbGF0ZSA8PiBjb25zdCBDbGFzc0luZm8gSlND
YWxsYmFja09iamVjdDxKU0FQSVdyYXBwZXJHbG9iYWxPYmplY3Q+OjpzX2luZm8gPSB7ICJKU0FQ
SVdyYXBwZXJHbG9iYWxPYmplY3QiLCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBudWxscHRyLCBD
UkVBVEVfTUVUSE9EX1RBQkxFKEpTQ2FsbGJhY2tPYmplY3QpIH07CiB0ZW1wbGF0ZTw+IGNvbnN0
IGJvb2wgSlNDYWxsYmFja09iamVjdDxKU0FQSVdyYXBwZXJHbG9iYWxPYmplY3Q+OjpuZWVkc0Rl
c3RydWN0aW9uID0gdHJ1ZTsKIApAQCAtMTQ0LDkgKzE0Niw0IEBAIHZvaWQgSlNBUElXcmFwcGVy
R2xvYmFsT2JqZWN0OjpmaW5pc2hDcmUKICAgICBXZWFrU2V0OjphbGxvY2F0ZSh0aGlzLCBqc0FQ
SVdyYXBwZXJHbG9iYWxPYmplY3RIYW5kbGVPd25lcigpLCAwKTsgLy8gQmFsYW5jZWQgaW4gSlNB
UElXcmFwcGVyR2xvYmFsT2JqZWN0SGFuZGxlT3duZXI6OmZpbmFsaXplLgogfQogCi12b2lkIEpT
QVBJV3JhcHBlckdsb2JhbE9iamVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIEpTQzo6
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCi17Ci0gICAgQmFzZTo6dmlzaXRDaGlsZHJlbihjZWxsLCB2
aXNpdG9yKTsKLX0KLQogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvQVBJL2dsaWIvSlNBUElXcmFwcGVyR2xvYmFsT2JqZWN0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQVBJV3JhcHBlckdsb2JhbE9iamVjdC5o
CShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNB
UElXcmFwcGVyR2xvYmFsT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDcgKzM5LDYgQEAg
cHVibGljOgogICAgIHN0YXRpYyB2b2lkIHN1YnNwYWNlRm9yKFZNJikgeyBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOyB9CiAKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7Ci0gICAg
c3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJik7CiAK
ICAgICBKU0NHTGliV3JhcHBlck9iamVjdCogd3JhcHBlZE9iamVjdCgpIGNvbnN0IHsgcmV0dXJu
IG1fd3JhcHBlZE9iamVjdDsgfQogICAgIHZvaWQgc2V0V3JhcHBlZE9iamVjdChKU0NHTGliV3Jh
cHBlck9iamVjdCogd3JhcHBlZE9iamVjdCkgeyBtX3dyYXBwZWRPYmplY3QgPSB3cmFwcGVkT2Jq
ZWN0OyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNBUElXcmFwcGVy
T2JqZWN0R0xpYi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9n
bGliL0pTQVBJV3JhcHBlck9iamVjdEdMaWIuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNBUElXcmFwcGVyT2JqZWN0R0xpYi5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNs
dWRlICJKU0FQSVdyYXBwZXJPYmplY3QuaCIKIAorI2luY2x1ZGUgIkFic3RyYWN0U2xvdFZpc2l0
b3IuaCIKICNpbmNsdWRlICJKU0NHTGliV3JhcHBlck9iamVjdC5oIgogI2luY2x1ZGUgIkpTQ0lu
bGluZXMuaCIKICNpbmNsdWRlICJKU0NhbGxiYWNrT2JqZWN0LmgiCkBAIC0zNiw3ICszNyw3IEBA
CiBjbGFzcyBKU0FQSVdyYXBwZXJPYmplY3RIYW5kbGVPd25lciBmaW5hbCA6IHB1YmxpYyBKU0M6
OldlYWtIYW5kbGVPd25lciB7CiBwdWJsaWM6CiAgICAgdm9pZCBmaW5hbGl6ZShKU0M6OkhhbmRs
ZTxKU0M6OlVua25vd24+LCB2b2lkKikgZmluYWw7Ci0gICAgYm9vbCBpc1JlYWNoYWJsZUZyb21P
cGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0LCBKU0M6
OlNsb3RWaXNpdG9yJiwgY29uc3QgY2hhcioqKSBmaW5hbDsKKyAgICBib29sIGlzUmVhY2hhYmxl
RnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQs
IEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYsIGNvbnN0IGNoYXIqKikgZmluYWw7CiB9OwogCiBz
dGF0aWMgSlNBUElXcmFwcGVyT2JqZWN0SGFuZGxlT3duZXIqIGpzQVBJV3JhcHBlck9iamVjdEhh
bmRsZU93bmVyKCkKQEAgLTU1LDcgKzU2LDcgQEAgdm9pZCBKU0FQSVdyYXBwZXJPYmplY3RIYW5k
bGVPd25lcjo6ZmluYQogICAgIEpTQzo6V2Vha1NldDo6ZGVhbGxvY2F0ZShKU0M6OldlYWtJbXBs
Ojphc1dlYWtJbXBsKGhhbmRsZS5zbG90KCkpKTsKIH0KIAotYm9vbCBKU0FQSVdyYXBwZXJPYmpl
Y3RIYW5kbGVPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlND
OjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25z
dCBjaGFyKiopCitib29sIEpTQVBJV3JhcHBlck9iamVjdEhhbmRsZU93bmVyOjppc1JlYWNoYWJs
ZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCos
IEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqKQogewogICAg
IEpTQzo6SlNBUElXcmFwcGVyT2JqZWN0KiB3cmFwcGVyT2JqZWN0ID0gSlNDOjpqc0Nhc3Q8SlND
OjpKU0FQSVdyYXBwZXJPYmplY3QqPihoYW5kbGUuZ2V0KCkuYXNDZWxsKCkpOwogICAgIC8vIFdl
IHVzZSB0aGUgSlNHbG9iYWxPYmplY3Qgd2hlbiBwcm9jZXNzaW5nIHdlYWsgaGFuZGxlcyB0byBw
cmV2ZW50IHRoZSBzaXR1YXRpb24gd2hlcmUgdXNpbmcKQEAgLTcyLDYgKzczLDggQEAgc3RhdGlj
IEpTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJT04oY29uc3RydQogc3RhdGljIEpTQ19ERUNMQVJFX0NV
U1RPTV9HRVRURVIoY2FsbGJhY2tHZXR0ZXJKU0FQSVdyYXBwZXJPYmplY3RDYWxsYmFja09iamVj
dCk7CiBzdGF0aWMgSlNDX0RFQ0xBUkVfQ1VTVE9NX0dFVFRFUihzdGF0aWNGdW5jdGlvbkdldHRl
ckpTQVBJV3JhcHBlck9iamVjdENhbGxiYWNrT2JqZWN0KTsKIAorREVGSU5FX1RFTVBMQVRFX1ZJ
U0lUX0NISUxEUkVOKHRlbXBsYXRlPD4sIEpTQ2FsbGJhY2tPYmplY3Q8SlNBUElXcmFwcGVyT2Jq
ZWN0Pik7CisKIHRlbXBsYXRlIDw+IGNvbnN0IENsYXNzSW5mbyBKU0NhbGxiYWNrT2JqZWN0PEpT
QVBJV3JhcHBlck9iamVjdD46OnNfaW5mbyA9IHsgIkpTQVBJV3JhcHBlck9iamVjdCIsICZCYXNl
OjpzX2luZm8sIG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNDYWxsYmFj
a09iamVjdCkgfTsKIHRlbXBsYXRlPD4gY29uc3QgYm9vbCBKU0NhbGxiYWNrT2JqZWN0PEpTQVBJ
V3JhcHBlck9iamVjdD46Om5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOwogCkBAIC0xNTUsOSArMTU4
LDEyIEBAIHZvaWQgSlNBUElXcmFwcGVyT2JqZWN0OjpzZXRXcmFwcGVkT2JqZWMKICAgICBtX3dy
YXBwZWRPYmplY3QgPSB3cmFwcGVkT2JqZWN0OwogfQogCi12b2lkIEpTQVBJV3JhcHBlck9iamVj
dDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3Ip
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0FQSVdyYXBwZXJPYmplY3Q6OnZp
c2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBC
YXNlOjp2aXNpdENoaWxkcmVuKGNlbGwsIHZpc2l0b3IpOwogfQogCitERUZJTkVfRVhQT1JUX1ZJ
U0lUX0NISUxEUkVOKEpTQVBJV3JhcHBlck9iamVjdCk7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xMTU4LDYgKzExNTgsNyBAQAogCQk2NUI4MzkyRTFCQUNB
RDM2MDA0NEU4MjQgLyogQ2FjaGVkUmVjb3ZlcnkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1QjgzOTJDMUJBQ0E5MkEwMDQ0RTgyNCAvKiBDYWNoZWRS
ZWNvdmVyeS5oICovOyB9OwogCQk2QTM4Q0ZBQTFFMzJCNUFCMDA2MDIwNkYgLyogQXN5bmNTdGFj
a1RyYWNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2
QTM4Q0ZBODFFMzJCNThCMDA2MDIwNkYgLyogQXN5bmNTdGFja1RyYWNlLmggKi87IH07CiAJCTZB
RDJDQjREMTlCOTE0MDEwMDA2NTcxOSAvKiBEZWJ1Z2dlckV2YWxFbmFibGVyLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2QUQyQ0I0QzE5QjkxNDAxMDAw
NjU3MTkgLyogRGVidWdnZXJFdmFsRW5hYmxlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CisJCTZCQ0NFQzA0MjVEMUZBMjcwMDBGMzkxRCAvKiBWZXJp
ZmllclNsb3RWaXNpdG9ySW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNkJDQ0VDMDMyNUQxRkEyNzAwMEYzOTFEIC8qIFZlcmlmaWVyU2xvdFZp
c2l0b3JJbmxpbmVzLmggKi87IH07CiAJCTcwMTEzRDRDMUE4REIwOTMwMDM4NDhDNCAvKiBJdGVy
YXRvck9wZXJhdGlvbnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDcwMTEzRDRBMUE4REIwOTMwMDM4NDhDNCAvKiBJdGVyYXRvck9wZXJhdGlvbnMuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3MDEzQ0E4
QzFCNDkxQTk0MDBDQUU2MTMgLyogSlNNaWNyb3Rhc2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcwMTNDQThBMUI0OTFBOTQwMENBRTYxMyAvKiBKU01p
Y3JvdGFzay5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTcwNUI0MUFDMUE2RTUwMUUwMDcxNjc1NyAvKiBTeW1ib2wuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcwNUI0MUE0MUE2RTUwMUUwMDcxNjc1NyAv
KiBTeW1ib2wuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwpAQCAtMTkxNiw2ICsxOTE3LDcgQEAKIAkJRTNGRjc1MzMxRDlDRUExODAwQzdFMTZEIC8qIERP
TUpJVEdldHRlclNldHRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRTNGRjc1MkYxRDlDRUExMjAwQzdFMTZEIC8qIERPTUpJVEdldHRlclNldHRlci5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUU0OURD
MTZDMTJFRjI5NEUwMDE4NEExRiAvKiBTb3VyY2VQcm92aWRlckNhY2hlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDlEQzE1MTEyRUYyNzIyMDAxODRB
MUYgLyogU291cmNlUHJvdmlkZXJDYWNoZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCUU0OURDMTZEMTJFRjI5NTMwMDE4NEExRiAvKiBTb3VyY2VQ
cm92aWRlckNhY2hlSXRlbS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRTQ5REMxNDkxMkVGMjYxQTAwMTg0QTFGIC8qIFNvdXJjZVByb3ZpZGVyQ2FjaGVJ
dGVtLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJ
RkUwNDE1NTMyNTJFQzA3MzAwOTFFQjVEIC8qIFNsb3RWaXNpdG9yTWFjcm9zLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTA0MTU1MjI1MkVDMDczMDA5
MUVCNUQgLyogU2xvdFZpc2l0b3JNYWNyb3MuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQlGRTA1RkFGRDFGRTRDRURBMDAwOTMyMzAgLyogRGVwcmVj
YXRlZEluc3BlY3RvclZhbHVlcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA5OTJENkExMTFGQkQ0OTFEMDAwMjQ1RjQgLyogRGVwcmVjYXRlZEluc3Bl
Y3RvclZhbHVlcy5jcHAgKi87IH07CiAJCUZFMDg2QkNBMjEyM0RFRkIwMDNGMjkyOSAvKiBFbnRy
eUZyYW1lLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBG
RTA4NkJDOTIxMjNERUZBMDAzRjI5MjkgLyogRW50cnlGcmFtZS5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUZFMEQ0QTA2MUFCOEREMEEwMDJGNTRC
RiAvKiBFeGVjdXRpb25UaW1lTGltaXRUZXN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFMEQ0QTA0MUFCOEREMEEwMDJGNTRCRiAvKiBFeGVjdXRp
b25UaW1lTGltaXRUZXN0LmNwcCAqLzsgfTsKQEAgLTE5MzgsNiArMTk0MCw3IEBACiAJCUZFMUUy
QzNGMjI0MERENTgwMEY2QjcyOSAvKiBNYWNyb0Fzc2VtYmxlckFSTTY0RS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUxRTJDM0UyMjQwRDMwQjAwRjZC
NzI5IC8qIE1hY3JvQXNzZW1ibGVyQVJNNjRFLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRkUxRTJDNDAyMjQwREQ2MjAwRjZCNzI5IC8qIEFSTTY0
RUFzc2VtYmxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRkUxRTJDM0QyMjQwRDJGNjAwRjZCNzI5IC8qIEFSTTY0RUFzc2VtYmxlci5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUZFMjBDRTlFMTVGMDRB
OTUwMERGMzQzMCAvKiBMTEludENMb29wLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBGRTIwQ0U5QzE1RjA0QTk1MDBERjM0MzAgLyogTExJbnRDTG9vcC5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUZFMjg3
RDAyMjUyRkIyRTgwMEQ3MjNGOSAvKiBWZXJpZmllclNsb3RWaXNpdG9yLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTI4N0QwMTI1MkZCMkU4MDBENzIz
RjkgLyogVmVyaWZpZXJTbG90VmlzaXRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCUZFMkE4NzYwMUYwMjM4MTYwMEVCMzFCMiAvKiBNaW5pbXVt
UmVzZXJ2ZWRab25lU2l6ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRkUyQTg3NUYxRjAyMzgxNjAwRUIzMUIyIC8qIE1pbmltdW1SZXNlcnZlZFpvbmVT
aXplLmggKi87IH07CiAJCUZFMzAyMkQzMUUzRDczQTUwMEJBQzQ5MyAvKiBTaWdpbGxDcmFzaEFu
YWx5emVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBG
RTMwMjJEMTFFM0Q3Mzk2MDBCQUM0OTMgLyogU2lnaWxsQ3Jhc2hBbmFseXplci5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUZFMzAyMkQ3MUU0Mjg1
NzMwMEJBQzQ5MyAvKiBWTUluc3BlY3Rvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRkUzMDIyRDUxRTQyODU2NzAwQkFDNDkzIC8qIFZNSW5zcGVjdG9y
LmggKi87IH07CkBAIC0xOTc2LDYgKzE5NzksOCBAQAogCQlGRTgwQzE5NzFENzc1Q0REMDA4NTEw
QzAgLyogQ2F0Y2hTY29wZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRkU4MEMxOTYxRDc3NUIyNzAwODUxMEMwIC8qIENhdGNoU2NvcGUuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlGRThERTU0QjIzQUMx
REFEMDA1QzkxNDIgLyogQ2FjaGVhYmxlSWRlbnRpZmllci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkU4REU1NEEyM0FDMURBRDAwNUM5MTQyIC8qIENh
Y2hlYWJsZUlkZW50aWZpZXIuaCAqLzsgfTsKIAkJRkU4REU1NEQyM0FDMUU4NjAwNUM5MTQyIC8q
IENhY2hlYWJsZUlkZW50aWZpZXJJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBGRThERTU0QzIzQUMxRTg2MDA1QzkxNDIgLyogQ2FjaGVhYmxl
SWRlbnRpZmllcklubGluZXMuaCAqLzsgfTsKKwkJRkU5MTJCNEYyNTMxMTkzMzAwRkFCRERGIC8q
IEFic3RyYWN0U2xvdFZpc2l0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEZFOTEyQjRFMjUzMTE5MzMwMEZBQkRERiAvKiBBYnN0cmFjdFNsb3RWaXNp
dG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJ
RkU5MTJCNTEyNTMxMUFEMTAwRkFCRERGIC8qIEFic3RyYWN0U2xvdFZpc2l0b3JJbmxpbmVzLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTkxMkI1MDI1
MzExQUQxMDBGQUJEREYgLyogQWJzdHJhY3RTbG90VmlzaXRvcklubGluZXMuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlGRTk5QjI0OTFDMjRDM0Qz
MDBDODIxNTkgLyogSklUTmVnR2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBGRTk5QjI0ODFDMjRCNkQzMDBDODIxNTkgLyogSklUTmVnR2Vu
ZXJhdG9yLmggKi87IH07CiAJCUZFQTA4NjIwMTgyQjdBMDQwMEY2RDg1MSAvKiBCcmVha3BvaW50
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRUEwODYx
RTE4MkI3QTA0MDBGNkQ4NTEgLyogQnJlYWtwb2ludC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUZFQTA4NjIxMTgyQjdBMDQwMEY2RDg1MSAvKiBE
ZWJ1Z2dlclByaW1pdGl2ZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEZFQTA4NjFGMTgyQjdBMDQwMEY2RDg1MSAvKiBEZWJ1Z2dlclByaW1pdGl2ZXMu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMzk4
OCw2ICszOTkzLDcgQEAKIAkJNkEzOENGQTgxRTMyQjU4QjAwNjAyMDZGIC8qIEFzeW5jU3RhY2tU
cmFjZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBc3luY1N0YWNrVHJhY2Uu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkFEMkNCNEMxOUI5MTQwMTAwMDY1NzE5
IC8qIERlYnVnZ2VyRXZhbEVuYWJsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gRGVidWdnZXJFdmFsRW5hYmxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2
QkE5M0M5NTkwNDg0QzVCQUQ5MzE2RUEgLyogSlNTY3JpcHRGZXRjaGVyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTU2NyaXB0RmV0Y2hlci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk2QkNDRUMwMzI1RDFGQTI3MDAwRjM5MUQgLyogVmVyaWZpZXJTbG90Vmlz
aXRvcklubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVmVyaWZpZXJT
bG90VmlzaXRvcklubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzAxMTNE
NDkxQThEQjA5MzAwMzg0OEM0IC8qIEl0ZXJhdG9yT3BlcmF0aW9ucy5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJdGVyYXRvck9wZXJhdGlvbnMuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk3MDExM0Q0QTFBOERCMDkzMDAzODQ4QzQgLyogSXRlcmF0
b3JPcGVyYXRpb25zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEl0ZXJhdG9y
T3BlcmF0aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MDEzQ0E4OTFCNDkx
QTk0MDBDQUU2MTMgLyogSlNNaWNyb3Rhc2suY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gSlNNaWNyb3Rhc2suY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtNTIyMSw2ICs1MjI3LDcgQEAKIAkJRjY5MkE4ODcwMjU1NTk3RDAxRkY2MEY3IC8qIEpTQ0pT
VmFsdWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMw
OyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gSlNDSlNWYWx1ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRo
ID0gODsgfTsKIAkJRjczOTI2OTE4REM2NDMzMEFGQ0RGMEQ3IC8qIEpTU291cmNlQ29kZS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1NvdXJjZUNvZGUuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTAwMjYyMjIzRjNBRjMzMDAzQTM1OEYgLyog
V2ViQXNzZW1ibHkuYXNtICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5hc20uYXNtOyBuYW1lID0gV2ViQXNzZW1ibHkuYXNtOyBwYXRo
ID0gbGxpbnQvV2ViQXNzZW1ibHkuYXNtOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlG
RTA0MTU1MjI1MkVDMDczMDA5MUVCNUQgLyogU2xvdFZpc2l0b3JNYWNyb3MuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2xvdFZpc2l0b3JNYWNyb3MuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJRkUwODZCQzkyMTIzREVGQTAwM0YyOTI5IC8qIEVudHJ5RnJhbWUu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRW50cnlGcmFtZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlGRTBENEEwNDFBQjhERDBBMDAyRjU0QkYgLyogRXhlY3V0
aW9uVGltZUxpbWl0VGVzdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUg
PSBFeGVjdXRpb25UaW1lTGltaXRUZXN0LmNwcDsgcGF0aCA9IEFQSS90ZXN0cy9FeGVjdXRpb25U
aW1lTGltaXRUZXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkUwRDRBMDUx
QUI4REQwQTAwMkY1NEJGIC8qIEV4ZWN1dGlvblRpbWVMaW1pdFRlc3QuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gRXhlY3V0aW9uVGltZUxpbWl0VGVzdC5oOyBwYXRoID0gQVBJ
L3Rlc3RzL0V4ZWN1dGlvblRpbWVMaW1pdFRlc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTUyNTUsNyArNTI2Miw5IEBACiAJCUZFMUUyQzNFMjI0MEQzMEIwMEY2QjcyOSAvKiBN
YWNyb0Fzc2VtYmxlckFSTTY0RS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBN
YWNyb0Fzc2VtYmxlckFSTTY0RS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTIw
Q0U5QjE1RjA0QTk1MDBERjM0MzAgLyogTExJbnRDTG9vcC5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IG5hbWUgPSBMTEludENMb29wLmNwcDsgcGF0aCA9IGxsaW50L0xMSW50Q0xv
b3AuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTIwQ0U5QzE1RjA0QTk1MDBE
RjM0MzAgLyogTExJbnRDTG9vcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBM
TEludENMb29wLmg7IHBhdGggPSBsbGludC9MTEludENMb29wLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCUZFMjg3RDAxMjUyRkIyRTgwMEQ3MjNGOSAvKiBWZXJpZmllclNsb3RWaXNp
dG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZlcmlmaWVyU2xvdFZpc2l0
b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkUyQTg3NUYxRjAyMzgxNjAwRUIz
MUIyIC8qIE1pbmltdW1SZXNlcnZlZFpvbmVTaXplLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1pbmltdW1S
ZXNlcnZlZFpvbmVTaXplLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZFMkJENjZF
MjVDMERDODIwMDk5OUQzQiAvKiBWZXJpZmllclNsb3RWaXNpdG9yLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFZlcmlmaWVyU2xvdFZpc2l0b3IuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlGRTJFNkE3QTFENkVBNUZFMDA2MEY4OTYgLyogVGhyb3dT
Y29wZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUaHJvd1Njb3Bl
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkUzMDIyRDAxRTNENzM5NjAwQkFD
NDkzIC8qIFNpZ2lsbENyYXNoQW5hbHl6ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gU2lnaWxsQ3Jhc2hBbmFseXplci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUZFMzAyMkQxMUUzRDczOTYwMEJBQzQ5MyAvKiBTaWdpbGxDcmFzaEFuYWx5emVy
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNpZ2lsbENyYXNoQW5hbHl6ZXIu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTUzMjksNiArNTMzOCw4IEBACiAJCUZF
OERFNTRDMjNBQzFFODYwMDVDOTE0MiAvKiBDYWNoZWFibGVJZGVudGlmaWVySW5saW5lcy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDYWNoZWFibGVJZGVudGlmaWVySW5saW5l
cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRThERTU0RTIzQUMzQThFMDA1Qzkx
NDIgLyogQ2FjaGVhYmxlSWRlbnRpZmllci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDYWNoZWFi
bGVJZGVudGlmaWVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkU5MEJCM0Ex
QjdDRjY0RTAwNkIzRjAzIC8qIFZNSW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBWTUlubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkU5MTJC
NEUyNTMxMTkzMzAwRkFCRERGIC8qIEFic3RyYWN0U2xvdFZpc2l0b3IuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gQWJzdHJhY3RTbG90VmlzaXRvci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlGRTkxMkI1MDI1MzExQUQxMDBGQUJEREYgLyogQWJzdHJhY3RTbG90
VmlzaXRvcklubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQWJzdHJh
Y3RTbG90VmlzaXRvcklubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkU5
OEI1QjYxQkI5QUUxMTAwNzNFN0E2IC8qIEpJVFN1YkdlbmVyYXRvci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBKSVRTdWJHZW5lcmF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJRkU5OUIyNDcxQzI0QjZEMzAwQzgyMTU5IC8qIEpJVE5lZ0dlbmVyYXRvci5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKSVROZWdHZW5lcmF0b3Iu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTk5QjI0ODFDMjRCNkQzMDBDODIx
NTkgLyogSklUTmVnR2VuZXJhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEpJVE5lZ0dlbmVyYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNjI3OCw2
ICs2Mjg5LDggQEAKIAkJMTQyRTMxMkExMzRGRjBBNjAwQUZBREI1IC8qIGhlYXAgKi8gPSB7CiAJ
CQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCUZFOTEyQjRFMjUzMTE5MzMw
MEZBQkRERiAvKiBBYnN0cmFjdFNsb3RWaXNpdG9yLmggKi8sCisJCQkJRkU5MTJCNTAyNTMxMUFE
MTAwRkFCRERGIC8qIEFic3RyYWN0U2xvdFZpc2l0b3JJbmxpbmVzLmggKi8sCiAJCQkJMEZFQzND
NTAxRjMzQTQxNjAwRjU5QjZDIC8qIEFsaWduZWRNZW1vcnlBbGxvY2F0b3IuY3BwICovLAogCQkJ
CTBGRUMzQzUxMUYzM0E0MTYwMEY1OUI2QyAvKiBBbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmggKi8s
CiAJCQkJMEZBNzYyMEExREI5NTlGNjAwQjdBMkZEIC8qIEFsbG9jYXRpbmdTY29wZS5oICovLApA
QCAtNjQzNSw2ICs2NDQ4LDcgQEAKIAkJCQlDMjI1NDk0MjE1RjdEQkFBMDA2NUU4OTggLyogU2xv
dFZpc2l0b3IuY3BwICovLAogCQkJCTE0QkE3OEYwMTNBQUI4OEYwMDVCN0MyQyAvKiBTbG90Vmlz
aXRvci5oICovLAogCQkJCTBGQ0I0MDg1MTVDMEEzQzMwMDQ4OTMyQiAvKiBTbG90VmlzaXRvcklu
bGluZXMuaCAqLywKKwkJCQlGRTA0MTU1MjI1MkVDMDczMDA5MUVCNUQgLyogU2xvdFZpc2l0b3JN
YWNyb3MuaCAqLywKIAkJCQkwRkRFODdGQTFERkU2RTUwMDA2NEMzOTAgLyogU3BhY2VUaW1lTXV0
YXRvclNjaGVkdWxlci5jcHAgKi8sCiAJCQkJMEZERTg3RkIxREZFNkU1MDAwNjRDMzkwIC8qIFNw
YWNlVGltZU11dGF0b3JTY2hlZHVsZXIuaCAqLywKIAkJCQkwRjRGODI4OTFFMzFCOTcxMDA3NTE4
NEMgLyogU3RvY2hhc3RpY1NwYWNlVGltZU11dGF0b3JTY2hlZHVsZXIuY3BwICovLApAQCAtNjQ1
Miw2ICs2NDY2LDkgQEAKIAkJCQkwRjFGQjM4QTFFMTczQTYyMDBBOUJFNTAgLyogU3luY2hyb25v
dXNTdG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1bGVyLmNwcCAqLywKIAkJCQkwRjFGQjM4QjFFMTcz
QTYyMDBBOUJFNTAgLyogU3luY2hyb25vdXNTdG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1bGVyLmgg
Ki8sCiAJCQkJMTQxNDQ4Q0MxM0ExNzgzNzAwRjVCQTFBIC8qIFRpbnlCbG9vbUZpbHRlci5oICov
LAorCQkJCUZFMkJENjZFMjVDMERDODIwMDk5OUQzQiAvKiBWZXJpZmllclNsb3RWaXNpdG9yLmNw
cCAqLywKKwkJCQlGRTI4N0QwMTI1MkZCMkU4MDBENzIzRjkgLyogVmVyaWZpZXJTbG90VmlzaXRv
ci5oICovLAorCQkJCTZCQ0NFQzAzMjVEMUZBMjcwMDBGMzkxRCAvKiBWZXJpZmllclNsb3RWaXNp
dG9ySW5saW5lcy5oICovLAogCQkJCTBGNEQ4QzcyMUZDN0E5NzMwMDFEMzJBQyAvKiBWaXNpdENv
dW50ZXIuaCAqLywKIAkJCQkwRjk1MkE5RjFERjc4NjA3MDBFMDZGQkQgLyogVmlzaXRSYWNlS2V5
LmNwcCAqLywKIAkJCQkwRjk1MkFBMDFERjc4NjA3MDBFMDZGQkQgLyogVmlzaXRSYWNlS2V5Lmgg
Ki8sCkBAIC05MjkzLDYgKzkzMTAsNyBAQAogCQkJCTE0N0I4M0FDMEU2REI4QzkwMDQ3NzVBNCAv
KiBCYXRjaGVkVHJhbnNpdGlvbk9wdGltaXplci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTM1RTg5
RkQyNUM1MEY4NzAwNzFFRTFFIC8qIEJpZ0ludDY0QXJyYXkuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTg2OTc2RTVGMUZBM0U4QkMwMEU3QzRFMSAvKiBCaWdJbnRDb25zdHJ1Y3Rvci5oIGluIEhlYWRl
cnMgKi8sCisJCQkJRkUwNDE1NTMyNTJFQzA3MzAwOTFFQjVEIC8qIFNsb3RWaXNpdG9yTWFjcm9z
LmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjY3MzlEMjEzQkZERTcxMDAyM0Q4N0MgLyogQmlnSW50
ZWdlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODYxODE2NzcxRkI3OTI0MjAwRUNDNEVDIC8qIEJp
Z0ludE9iamVjdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODY5NzZFNUUxRkEzRThCNjAwRTdDNEUx
IC8qIEJpZ0ludFByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCkBAIC05NTc0LDYgKzk1OTIsNyBA
QAogCQkJCTBGRDgyRTU3MTQxREFGMTAwMDE3OUM5NCAvKiBERkdPU1JFbnRyeS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEZEOEEzMjYxN0Q1MUY1NzAwQ0EyQzQwIC8qIERGR09TUkVudHJ5cG9pbnRD
cmVhdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkMwOTc2QTE0NjhBNkY3MDBDRjI0
NDIgLyogREZHT1NSRXhpdC5oIGluIEhlYWRlcnMgKi8sCisJCQkJRkU5MTJCNEYyNTMxMTkzMzAw
RkFCRERGIC8qIEFic3RyYWN0U2xvdFZpc2l0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMjM1
QkVDMTcxNzhFNzMwMDY5MEM3RiAvKiBERkdPU1JFeGl0QmFzZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEZGQjkyMUMxNkQwMkYxMTAwNTVBNURCIC8qIERGR09TUkV4aXRDb21waWxhdGlvbkluZm8u
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGNzAyNUFBMTcxNEIwRkMwMDM4MkMwRSAvKiBERkdPU1JF
eGl0Q29tcGlsZXJDb21tb24uaCBpbiBIZWFkZXJzICovLApAQCAtOTg1OSw2ICs5ODc4LDcgQEAK
IAkJCQlBNTEzRTVCRTE4NUJGQUNDMDA3RTk1QUQgLyogSW5qZWN0ZWRTY3JpcHRIb3N0LmggaW4g
SGVhZGVycyAqLywKIAkJCQlBNTEzRTVDQjE4NUY5NjI0MDA3RTk1QUQgLyogSW5qZWN0ZWRTY3Jp
cHRNYW5hZ2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNTg0MEUyMTE4N0I3Qjg2MDA4NDNCMTAg
LyogSW5qZWN0ZWRTY3JpcHRNb2R1bGUuaCBpbiBIZWFkZXJzICovLAorCQkJCUZFMjg3RDAyMjUy
RkIyRTgwMEQ3MjNGOSAvKiBWZXJpZmllclNsb3RWaXNpdG9yLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBNTEzRTVDNzE4NUY5NDQ2MDA3RTk1QUQgLyogSW5qZWN0ZWRTY3JpcHRTb3VyY2UuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTk5NTlFOTMyMUJEMTgyNzkwMDFBQTQxMyAvKiBpbmxpbmUtYW5kLW1p
bmlmeS1zdHlsZXNoZWV0cy1hbmQtc2NyaXB0cy5weSBpbiBIZWFkZXJzICovLAogCQkJCTc5MDVC
QjY5MUQxMjA1MEUwMDE5RkU1NyAvKiBJbmxpbmVBY2Nlc3MuaCBpbiBIZWFkZXJzICovLApAQCAt
MTAwMzQsNiArMTAwNTQsNyBAQAogCQkJCUE1OEMwMjQyMThFNEE0MUEwMDAzMkJDNSAvKiBKU0Nv
bnRleHRQcml2YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQxRTBFMTZGNUNEMDBCMzQ0
NjAgLyogSlNDb250ZXh0UmVmLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNUVBNzBFRTE5RjVCNUM0
MDA5OEY1RUMgLyogSlNDb250ZXh0UmVmSW5zcGVjdG9yU3VwcG9ydC5oIGluIEhlYWRlcnMgKi8s
CisJCQkJNkJDQ0VDMDQyNUQxRkEyNzAwMEYzOTFEIC8qIFZlcmlmaWVyU2xvdFZpc2l0b3JJbmxp
bmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNUQyRTY2NTE5NUUxNzQwMDBBNTE4RTcgLyogSlND
b250ZXh0UmVmSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0OENEMUQ4MTA4Q0Y5MDIw
MDgxNjNDNiAvKiBKU0NvbnRleHRSZWZQcml2YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRTc0
OTdFNjIwOTAwMUIxMDAwMzU2NUIgLyogSlNDUHRyVGFnLmggaW4gSGVhZGVycyAqLywKQEAgLTEw
MTY0LDYgKzEwMTg1LDcgQEAKIAkJCQk3OTVBQzYxODIwQTIzNTVFMDA1MkM3NkMgLyogSlNWaXJ0
dWFsTWFjaGluZVByaXZhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3Q0EzQUU4MTdEQTQxQUUw
MDY1MzhBRiAvKiBKU1dlYWtNYXAuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3NDgyRTkzMTE2QTdD
QUQwMDNCMDcxMiAvKiBKU1dlYWtPYmplY3RNYXBSZWZJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8s
CisJCQkJRkU5MTJCNTEyNTMxMUFEMTAwRkFCRERGIC8qIEFic3RyYWN0U2xvdFZpc2l0b3JJbmxp
bmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzQ4MkI5MzExNjcxMTQ3MDAzQjA3MTIgLyogSlNX
ZWFrT2JqZWN0TWFwUmVmUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTM5QkZCQjAyMkFE
M0NEQzAwMjNGNEMwIC8qIEpTV2Vha09iamVjdFJlZi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYw
QjI4NkIxRUI4RTZDRjAwMEVCNUQyIC8qIEpTV2Vha1ByaXZhdGUuaCBpbiBIZWFkZXJzICovLApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvd2tidWlsdGlucy9idWlsdGluc19n
ZW5lcmF0ZV9pbnRlcm5hbHNfd3JhcHBlcl9oZWFkZXIucHkKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvd2tidWlsdGlucy9idWlsdGluc19nZW5lcmF0ZV9pbnRl
cm5hbHNfd3JhcHBlcl9oZWFkZXIucHkJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9TY3JpcHRzL3drYnVpbHRpbnMvYnVpbHRpbnNfZ2VuZXJhdGVfaW50ZXJuYWxz
X3dyYXBwZXJfaGVhZGVyLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogIyEvdXNy
L2Jpbi9lbnYgcHl0aG9uCiAjCi0jIENvcHlyaWdodCAoYykgMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisjIENvcHlyaWdodCAoYykgMjAxNi0yMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICMKICMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAjIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtOTMsNyAr
OTMsNyBAQCBjbGFzcyBCdWlsdGluc0ludGVybmFsc1dyYXBwZXJIZWFkZXJHZW5lCiAKICAgICBk
ZWYgZ2VuZXJhdGVfbWV0aG9kcyhzZWxmKToKICAgICAgICAgcmV0dXJuICIiIgotICAgIHZvaWQg
dmlzaXQoSlNDOjpTbG90VmlzaXRvciYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+
IHZvaWQgdmlzaXQoVmlzaXRvciYpOwogICAgIHZvaWQgaW5pdGlhbGl6ZShKU0RPTUdsb2JhbE9i
amVjdCYpOwogIiIiCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL3drYnVp
bHRpbnMvYnVpbHRpbnNfZ2VuZXJhdGVfaW50ZXJuYWxzX3dyYXBwZXJfaW1wbGVtZW50YXRpb24u
cHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvd2tidWlsdGlu
cy9idWlsdGluc19nZW5lcmF0ZV9pbnRlcm5hbHNfd3JhcHBlcl9pbXBsZW1lbnRhdGlvbi5weQko
cmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvd2tidWls
dGlucy9idWlsdGluc19nZW5lcmF0ZV9pbnRlcm5hbHNfd3JhcHBlcl9pbXBsZW1lbnRhdGlvbi5w
eQkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKICMhL3Vzci9iaW4vZW52IHB5dGhvbgog
IwotIyBDb3B5cmlnaHQgKGMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
IyBDb3B5cmlnaHQgKGMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAjCiAjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEyMCwxMyArMTIwLDE2IEBAIGNsYXNz
IEJ1aWx0aW5zSW50ZXJuYWxzV3JhcHBlckltcGxlbWVudGEKICAgICAgICAgcmV0dXJuICdcbicu
am9pbihsaW5lcykKIAogICAgIGRlZiBnZW5lcmF0ZV92aXNpdF9tZXRob2Qoc2VsZik6Ci0gICAg
ICAgIGxpbmVzID0gWyJ2b2lkIEpTQnVpbHRpbkludGVybmFsRnVuY3Rpb25zOjp2aXNpdChKU0M6
OlNsb3RWaXNpdG9yJiB2aXNpdG9yKSIsCisgICAgICAgIGxpbmVzID0gWyJ0ZW1wbGF0ZTx0eXBl
bmFtZSBWaXNpdG9yPiIsCisgICAgICAgICAgICAgICAgICJ2b2lkIEpTQnVpbHRpbkludGVybmFs
RnVuY3Rpb25zOjp2aXNpdChWaXNpdG9yJiB2aXNpdG9yKSIsCiAgICAgICAgICAgICAgICAgICJ7
Il0KICAgICAgICAgZm9yIG9iamVjdCBpbiBzZWxmLmludGVybmFsczoKICAgICAgICAgICAgIHZp
c2l0ID0gIiAgICAlcy52aXNpdCh2aXNpdG9yKTsiICUgc2VsZi5tZW1iZXJfbmFtZShvYmplY3Qp
CiAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoQnVpbHRpbnNHZW5lcmF0b3Iud3JhcF93aXRoX2d1
YXJkKG9iamVjdC5hbm5vdGF0aW9ucy5nZXQoJ2NvbmRpdGlvbmFsJyksIHZpc2l0KSkKICAgICAg
ICAgbGluZXMuYXBwZW5kKCIgICAgVU5VU0VEX1BBUkFNKHZpc2l0b3IpOyIpCiAgICAgICAgIGxp
bmVzLmFwcGVuZCgifVxuIikKKyAgICAgICAgbGluZXMuYXBwZW5kKCJ0ZW1wbGF0ZSB2b2lkIEpT
QnVpbHRpbkludGVybmFsRnVuY3Rpb25zOjp2aXNpdChBYnN0cmFjdFNsb3RWaXNpdG9yJik7IikK
KyAgICAgICAgbGluZXMuYXBwZW5kKCJ0ZW1wbGF0ZSB2b2lkIEpTQnVpbHRpbkludGVybmFsRnVu
Y3Rpb25zOjp2aXNpdChTbG90VmlzaXRvciYpO1xuIikKICAgICAgICAgcmV0dXJuICdcbicuam9p
bihsaW5lcykKIAogICAgIGRlZiBfZ2VuZXJhdGVfaW5pdGlhbGl6ZV9zdGF0aWNfZ2xvYmFscyhz
ZWxmKToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL3drYnVpbHRpbnMvYnVp
bHRpbnNfdGVtcGxhdGVzLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9T
Y3JpcHRzL3drYnVpbHRpbnMvYnVpbHRpbnNfdGVtcGxhdGVzLnB5CShyZXZpc2lvbiAyNzI4MzAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy93a2J1aWx0aW5zL2J1aWx0aW5zX3Rl
bXBsYXRlcy5weQkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKICMhL3Vzci9iaW4vZW52
IHB5dGhvbgogIwotIyBDb3B5cmlnaHQgKGMpIDIwMTQtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisjIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICMgQ29weXJpZ2h0IChDKSAyMDE1IENhbm9uIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICMKICMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0xODgsNyArMTg4LDcgQEAgcHVibGljOgog
ICAgIGV4cGxpY2l0ICR7b2JqZWN0TmFtZX1CdWlsdGluRnVuY3Rpb25zKEpTQzo6Vk0mIHZtKSA6
IG1fdm0odm0pIHsgfQogCiAgICAgdm9pZCBpbml0KEpTQzo6SlNHbG9iYWxPYmplY3QmKTsKLSAg
ICB2b2lkIHZpc2l0KEpTQzo6U2xvdFZpc2l0b3ImKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPiB2b2lkIHZpc2l0KFZpc2l0b3ImKTsKIAogcHVibGljOgogICAgIEpTQzo6Vk0mIG1f
dm07CkBAIC0yMDcsMTAgKzIwNywxNSBAQCBpbmxpbmUgdm9pZCAke29iamVjdE5hbWV9QnVpbHRp
bkZ1bmN0aW9uCiAjdW5kZWYgRVhQT1JUX0ZVTkNUSU9OCiB9CiAKLWlubGluZSB2b2lkICR7b2Jq
ZWN0TmFtZX1CdWlsdGluRnVuY3Rpb25zOjp2aXNpdChKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9y
KQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK2lubGluZSB2b2lkICR7b2JqZWN0TmFtZX1C
dWlsdGluRnVuY3Rpb25zOjp2aXNpdChWaXNpdG9yJiB2aXNpdG9yKQogewogI2RlZmluZSBWSVNJ
VF9GVU5DVElPTihuYW1lKSB2aXNpdG9yLmFwcGVuZChtXyMjbmFtZSMjRnVuY3Rpb24pOwogICAg
ICR7bWFjcm9QcmVmaXh9X0ZPUkVBQ0hfJHtvYmplY3RNYWNyb31fQlVJTFRJTl9GVU5DVElPTl9O
QU1FKFZJU0lUX0ZVTkNUSU9OKQogI3VuZGVmIFZJU0lUX0ZVTkNUSU9OCiB9CisKK3RlbXBsYXRl
IHZvaWQgJHtvYmplY3ROYW1lfUJ1aWx0aW5GdW5jdGlvbnM6OnZpc2l0KEpTQzo6QWJzdHJhY3RT
bG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCAke29iamVjdE5hbWV9QnVpbHRpbkZ1bmN0aW9u
czo6dmlzaXQoSlNDOjpTbG90VmlzaXRvciYpOworCiAiIiIpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCShyZXZpc2lvbiAyNzI4MzApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjAgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC03NTcsNyArNzU3LDcgQEAgYm9vbCBBY2Nlc3NDYXNlOjp2aXNpdFdlYWsoVk0m
IHZtKSBjb25zdAogICAgIHJldHVybiBpc1ZhbGlkOwogfQogCi1ib29sIEFjY2Vzc0Nhc2U6OnBy
b3BhZ2F0ZVRyYW5zaXRpb25zKFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBjb25zdAorYm9vbCBBY2Nl
c3NDYXNlOjpwcm9wYWdhdGVUcmFuc2l0aW9ucyhBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9y
KSBjb25zdAogewogICAgIGJvb2wgcmVzdWx0ID0gdHJ1ZTsKIApAQCAtNzcyLDcgKzc3Miw3IEBA
IGJvb2wgQWNjZXNzQ2FzZTo6cHJvcGFnYXRlVHJhbnNpdGlvbnMoU2wKICAgICBzd2l0Y2ggKG1f
dHlwZSkgewogICAgIGNhc2UgVHJhbnNpdGlvbjoKICAgICBjYXNlIERlbGV0ZToKLSAgICAgICAg
aWYgKHZpc2l0b3Iudm0oKS5oZWFwLmlzTWFya2VkKG1fc3RydWN0dXJlLT5wcmV2aW91c0lEKCkp
KQorICAgICAgICBpZiAodmlzaXRvci5pc01hcmtlZChtX3N0cnVjdHVyZS0+cHJldmlvdXNJRCgp
KSkKICAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQobV9zdHJ1Y3R1cmUuZ2V0
KCkpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICByZXN1bHQgPSBmYWxzZTsKQEAgLTc4NCw3
ICs3ODQsNyBAQCBib29sIEFjY2Vzc0Nhc2U6OnByb3BhZ2F0ZVRyYW5zaXRpb25zKFNsCiAgICAg
cmV0dXJuIHJlc3VsdDsKIH0KIAotdm9pZCBBY2Nlc3NDYXNlOjp2aXNpdEFnZ3JlZ2F0ZShTbG90
VmlzaXRvciYgdmlzaXRvcikgY29uc3QKK3ZvaWQgQWNjZXNzQ2FzZTo6dmlzaXRBZ2dyZWdhdGUo
QWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikgY29uc3QKIHsKICAgICBtX2lkZW50aWZpZXIu
dmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQWNjZXNzQ2FzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yODAs
OSArMjgwLDkgQEAgcHJpdmF0ZToKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgogICAg
IHZvaWQgZm9yRWFjaERlcGVuZGVudENlbGwoVk0mLCBjb25zdCBGdW5jdG9yJikgY29uc3Q7CiAK
LSAgICB2b2lkIHZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJikgY29uc3Q7CisgICAgdm9pZCB2
aXNpdEFnZ3JlZ2F0ZShBYnN0cmFjdFNsb3RWaXNpdG9yJikgY29uc3Q7CiAgICAgYm9vbCB2aXNp
dFdlYWsoVk0mKSBjb25zdDsKLSAgICBib29sIHByb3BhZ2F0ZVRyYW5zaXRpb25zKFNsb3RWaXNp
dG9yJikgY29uc3Q7CisgICAgYm9vbCBwcm9wYWdhdGVUcmFuc2l0aW9ucyhBYnN0cmFjdFNsb3RW
aXNpdG9yJikgY29uc3Q7CiAKICAgICAvLyBGSVhNRTogVGhpcyBvbmx5IGV4aXN0cyBiZWNhdXNl
IG9mIGhvdyBBY2Nlc3NDYXNlIHB1dHMgcG9zdC1nZW5lcmF0aW9uIHRoaW5ncyBpbnRvIGl0c2Vs
Zi4KICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU2NDU2
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnlWYWxJbmZvLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnlWYWxJbmZvLmNwcAko
cmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5VmFs
SW5mby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAyMC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzIsNyArMzIsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAog
I2lmIEVOQUJMRShKSVQpCiAKLXZvaWQgQnlWYWxJbmZvOjp2aXNpdEFnZ3JlZ2F0ZShTbG90Vmlz
aXRvciYgdmlzaXRvcikKK3ZvaWQgQnlWYWxJbmZvOjp2aXNpdEFnZ3JlZ2F0ZShBYnN0cmFjdFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGNhY2hlZElkLnZpc2l0QWdncmVnYXRlKHZpc2l0
b3IpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5VmFsSW5mby5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeVZhbEluZm8u
aAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5
VmFsSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMi0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYwLDcgKzI2MCw3IEBAIHN0cnVjdCBCeVZh
bEluZm8gewogICAgICAgICB0aGlzLT5zZWVuID0gZmFsc2U7CiAgICAgfQogCi0gICAgdm9pZCB2
aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYpOworICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoQWJz
dHJhY3RTbG90VmlzaXRvciYpOwogCiAgICAgQ29kZUxvY2F0aW9uSnVtcDxKU0ludGVybmFsUHRy
VGFnPiBub3RJbmRleEp1bXA7CiAgICAgQ29kZUxvY2F0aW9uSnVtcDxKU0ludGVybmFsUHRyVGFn
PiBiYWRUeXBlSnVtcDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DaGVj
a1ByaXZhdGVCcmFuZFN0YXR1cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0NoZWNrUHJpdmF0ZUJyYW5kU3RhdHVzLmNwcAkocmV2aXNpb24gMjcyODMw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NoZWNrUHJpdmF0ZUJyYW5kU3Rh
dHVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjI4LDEzICsyMjgsMTMgQEAgQ2FjaGVhYmxlSWRl
bnRpZmllciBDaGVja1ByaXZhdGVCcmFuZFN0YQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZv
aWQgQ2hlY2tQcml2YXRlQnJhbmRTdGF0dXM6OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQordm9pZCBDaGVja1ByaXZhdGVCcmFuZFN0YXR1czo6dmlzaXRBZ2dyZWdhdGUoQWJz
dHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBmb3IgKENoZWNrUHJpdmF0ZUJyYW5k
VmFyaWFudCYgdmFyaWFudCA6IG1fdmFyaWFudHMpCiAgICAgICAgIHZhcmlhbnQudmlzaXRBZ2dy
ZWdhdGUodmlzaXRvcik7CiB9CiAKLXZvaWQgQ2hlY2tQcml2YXRlQnJhbmRTdGF0dXM6Om1hcmtJ
ZkNoZWFwKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBDaGVja1ByaXZhdGVCcmFuZFN0YXR1
czo6bWFya0lmQ2hlYXAoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBmb3Ig
KENoZWNrUHJpdmF0ZUJyYW5kVmFyaWFudCYgdmFyaWFudCA6IG1fdmFyaWFudHMpCiAgICAgICAg
IHZhcmlhbnQubWFya0lmQ2hlYXAodmlzaXRvcik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQ2hlY2tQcml2YXRlQnJhbmRTdGF0dXMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2hlY2tQcml2YXRlQnJhbmRTdGF0dXMuaAkocmV2
aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NoZWNrUHJp
dmF0ZUJyYW5kU3RhdHVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTgyLDggKzgyLDggQEAgcHVibGlj
OgogICAgIC8vIEF0dGVtcHRzIHRvIHJlZHVjZSB0aGUgc2V0IG9mIHZhcmlhbnRzIHRvIGZpdCB0
aGUgZ2l2ZW4gc3RydWN0dXJlIHNldC4gVGhpcyBtYXkgYmUgYXBwcm94aW1hdGUuCiAgICAgdm9p
ZCBmaWx0ZXIoY29uc3QgU3RydWN0dXJlU2V0Jik7CiAKLSAgICB2b2lkIHZpc2l0QWdncmVnYXRl
KFNsb3RWaXNpdG9yJik7Ci0gICAgdm9pZCBtYXJrSWZDaGVhcChTbG90VmlzaXRvciYpOworICAg
IHZvaWQgdmlzaXRBZ2dyZWdhdGUoQWJzdHJhY3RTbG90VmlzaXRvciYpOworICAgIHZvaWQgbWFy
a0lmQ2hlYXAoQWJzdHJhY3RTbG90VmlzaXRvciYpOwogICAgIGJvb2wgZmluYWxpemUoVk0mKTsK
IAogICAgIGJvb2wgYXBwZW5kVmFyaWFudChjb25zdCBDaGVja1ByaXZhdGVCcmFuZFZhcmlhbnQm
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DaGVja1ByaXZhdGVCcmFu
ZFZhcmlhbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9DaGVja1ByaXZhdGVCcmFuZFZhcmlhbnQuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2hlY2tQcml2YXRlQnJhbmRWYXJpYW50LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNTEsNyArNTEsNyBAQCBib29sIENoZWNrUHJpdmF0ZUJyYW5kVmFy
aWFudDo6YXR0ZW1wdFRvCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgQ2hlY2tQcml2YXRl
QnJhbmRWYXJpYW50OjptYXJrSWZDaGVhcChTbG90VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgQ2hl
Y2tQcml2YXRlQnJhbmRWYXJpYW50OjptYXJrSWZDaGVhcChBYnN0cmFjdFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQogewogICAgIG1fc3RydWN0dXJlU2V0Lm1hcmtJZkNoZWFwKHZpc2l0b3IpOwogfQpA
QCAtNjMsNyArNjMsNyBAQCBib29sIENoZWNrUHJpdmF0ZUJyYW5kVmFyaWFudDo6ZmluYWxpemUo
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgQ2hlY2tQcml2YXRlQnJhbmRWYXJpYW50Ojp2
aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgQ2hlY2tQcml2YXRlQnJh
bmRWYXJpYW50Ojp2aXNpdEFnZ3JlZ2F0ZShBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQog
ewogICAgIG1faWRlbnRpZmllci52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKIH0KSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DaGVja1ByaXZhdGVCcmFuZFZhcmlhbnQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2hlY2tQcml2YXRl
QnJhbmRWYXJpYW50LmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9DaGVja1ByaXZhdGVCcmFuZFZhcmlhbnQuaAkod29ya2luZyBjb3B5KQpAQCAt
MzIsNiArMzIsNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAorY2xhc3MgQWJzdHJhY3RTbG90Vmlz
aXRvcjsKIGNsYXNzIENoZWNrUHJpdmF0ZUJyYW5kU3RhdHVzOwogCiBjbGFzcyBDaGVja1ByaXZh
dGVCcmFuZFZhcmlhbnQgewpAQCAtNDYsOCArNDcsOCBAQCBwdWJsaWM6CiAKICAgICBib29sIGF0
dGVtcHRUb01lcmdlKGNvbnN0IENoZWNrUHJpdmF0ZUJyYW5kVmFyaWFudCYgb3RoZXIpOwogCi0g
ICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYpOwotICAgIHZvaWQgbWFya0lmQ2hl
YXAoU2xvdFZpc2l0b3ImKTsKKyAgICB2b2lkIHZpc2l0QWdncmVnYXRlKEFic3RyYWN0U2xvdFZp
c2l0b3ImKTsKKyAgICB2b2lkIG1hcmtJZkNoZWFwKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKICAg
ICBib29sIGZpbmFsaXplKFZNJik7CiAKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25z
dDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3Bw
CShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29k
ZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAwMSw3ICsxMDAxLDggQEAgc2l6ZV90IENv
ZGVCbG9jazo6ZXN0aW1hdGVkU2l6ZShKU0NlbGwqIAogICAgIHJldHVybiBCYXNlOjplc3RpbWF0
ZWRTaXplKGNlbGwsIHZtKSArIGV4dHJhTWVtb3J5QWxsb2NhdGVkOwogfQogCi12b2lkIENvZGVC
bG9jazo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQor
dGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgQ29kZUJsb2NrOjp2aXNpdENoaWxkcmVu
SW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgQ29kZUJsb2NrKiB0
aGlzT2JqZWN0ID0ganNDYXN0PENvZGVCbG9jayo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpF
Q1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTEwMTAsOSArMTAxMSwxNCBAQCB2
b2lkIENvZGVCbG9jazo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlCiAgICAgdGhpc09iamVjdC0+
dmlzaXRDaGlsZHJlbih2aXNpdG9yKTsKIH0KIAotdm9pZCBDb2RlQmxvY2s6OnZpc2l0Q2hpbGRy
ZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCitERUZJTkVfVklTSVRfQ0hJTERSRU4oQ29kZUJsb2Nr
KTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgQ29kZUJsb2NrOjp2aXNpdENo
aWxkcmVuSW1wbChWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIENvbmN1cnJlbnRKU0xvY2tlciBs
b2NrZXIobV9sb2NrKTsKKworICAgIG1fdmlzaXRDaGlsZHJlblNraXBwZWREdWVUb09sZEFnZSA9
IGZhbHNlOwogICAgIGlmIChDb2RlQmxvY2sqIG90aGVyQmxvY2sgPSBzcGVjaWFsT1NSRW50cnlC
bG9ja09yTnVsbCgpKQogICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKG90aGVyQmxv
Y2spOwogCkBAIC0xMDI5LDEzICsxMDM1LDIzIEBAIHZvaWQgQ29kZUJsb2NrOjp2aXNpdENoaWxk
cmVuKFNsb3RWaXNpdG8KICAgICBWTTo6U3BhY2VBbmRTZXQ6OnNldEZvcigqc3Vic3BhY2UoKSku
YWRkKHRoaXMpOwogfQogCi1ib29sIENvZGVCbG9jazo6c2hvdWxkVmlzaXRTdHJvbmdseShjb25z
dCBDb25jdXJyZW50SlNMb2NrZXImIGxvY2tlcikKK0RFRklORV9JTlNUQU5DRV9WSVNJVF9DSElM
RFJFTihDb2RlQmxvY2spOworCitib29sIENvZGVCbG9jazo6c2hvdWxkVmlzaXRTdHJvbmdseShj
b25zdCBDb25jdXJyZW50SlNMb2NrZXImIGxvY2tlciwgQWJzdHJhY3RTbG90VmlzaXRvciYgdmlz
aXRvcikKIHsKICAgICBpZiAoT3B0aW9uczo6Zm9yY2VDb2RlQmxvY2tMaXZlbmVzcygpKQogICAg
ICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIGlmIChzaG91bGRKZXR0aXNvbkR1ZVRvT2xkQWdlKGxv
Y2tlcikpCisgICAgaWYgKHNob3VsZEpldHRpc29uRHVlVG9PbGRBZ2UobG9ja2VyLCB2aXNpdG9y
KSkgeworICAgICAgICBpZiAoT3B0aW9uczo6dmVyaWZ5R0MoKSkKKyAgICAgICAgICAgIG1fdmlz
aXRDaGlsZHJlblNraXBwZWREdWVUb09sZEFnZSA9IHRydWU7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisKKyAgICBpZiAobV92aXNpdENoaWxkcmVuU2tpcHBlZER1ZVRvT2xkQWdlKSB7
CisgICAgICAgIEFTU0VSVChPcHRpb25zOjp2ZXJpZnlHQygpKTsKICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KIAogICAgIC8vIEludGVycHJldGVyIGFuZCBCYXNlbGluZSBKSVQgQ29kZUJs
b2NrcyBkb24ndCBuZWVkIHRvIGJlIGpldHRpc29uZWQgd2hlbgogICAgIC8vIHRoZWlyIHdlYWsg
cmVmZXJlbmNlcyBnbyBzdGFsZS4gU28gaWYgYSBiYXNsaW5lIEpJVCBDb2RlQmxvY2sgZ2V0cwpA
QCAtMTA4Niw5ICsxMTAyLDkgQEAgc3RhdGljIFNlY29uZHMgdGltZVRvTGl2ZShKSVRUeXBlIGpp
dFR5cAogICAgIH0KIH0KIAotYm9vbCBDb2RlQmxvY2s6OnNob3VsZEpldHRpc29uRHVlVG9PbGRB
Z2UoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJikKK2Jvb2wgQ29kZUJsb2NrOjpzaG91bGRKZXR0
aXNvbkR1ZVRvT2xkQWdlKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIEFic3RyYWN0U2xvdFZp
c2l0b3ImIHZpc2l0b3IpCiB7Ci0gICAgaWYgKG1fdm0tPmhlYXAuaXNNYXJrZWQodGhpcykpCisg
ICAgaWYgKHZpc2l0b3IuaXNNYXJrZWQodGhpcykpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAog
ICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjpmb3JjZUNvZGVCbG9ja1RvSmV0dGlzb25EdWVUb09s
ZEFnZSgpKSkKQEAgLTExMDEsMTIgKzExMTcsMTIgQEAgYm9vbCBDb2RlQmxvY2s6OnNob3VsZEpl
dHRpc29uRHVlVG9PbGRBZwogfQogCiAjaWYgRU5BQkxFKERGR19KSVQpCi1zdGF0aWMgYm9vbCBz
aG91bGRNYXJrVHJhbnNpdGlvbihWTSYgdm0sIERGRzo6V2Vha1JlZmVyZW5jZVRyYW5zaXRpb24m
IHRyYW5zaXRpb24pCitzdGF0aWMgaW5saW5lIGJvb2wgc2hvdWxkTWFya1RyYW5zaXRpb24oQWJz
dHJhY3RTbG90VmlzaXRvciYgdmlzaXRvciwgREZHOjpXZWFrUmVmZXJlbmNlVHJhbnNpdGlvbiYg
dHJhbnNpdGlvbikKIHsKLSAgICBpZiAodHJhbnNpdGlvbi5tX2NvZGVPcmlnaW4gJiYgIXZtLmhl
YXAuaXNNYXJrZWQodHJhbnNpdGlvbi5tX2NvZGVPcmlnaW4uZ2V0KCkpKQorICAgIGlmICh0cmFu
c2l0aW9uLm1fY29kZU9yaWdpbiAmJiAhdmlzaXRvci5pc01hcmtlZCh0cmFuc2l0aW9uLm1fY29k
ZU9yaWdpbi5nZXQoKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKLSAgICBpZiAoIXZt
LmhlYXAuaXNNYXJrZWQodHJhbnNpdGlvbi5tX2Zyb20uZ2V0KCkpKQorICAgIGlmICghdmlzaXRv
ci5pc01hcmtlZCh0cmFuc2l0aW9uLm1fZnJvbS5nZXQoKSkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTExMjIsOCArMTEzOCw5IEBAIEJ5dGVjb2Rl
SW5kZXggQ29kZUJsb2NrOjpieXRlY29kZUluZGV4Rm8KIH0KICNlbmRpZiAvLyBFTkFCTEUoREZH
X0pJVCkKIAotdm9pZCBDb2RlQmxvY2s6OnByb3BhZ2F0ZVRyYW5zaXRpb25zKGNvbnN0IENvbmN1
cnJlbnRKU0xvY2tlciYsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBDb2RlQmxvY2s6OnBy
b3BhZ2F0ZVRyYW5zaXRpb25zKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIEFic3RyYWN0U2xv
dFZpc2l0b3ImIHZpc2l0b3IpCiB7CisgICAgQWJzdHJhY3RTbG90VmlzaXRvcjo6U3VwcHJlc3NH
Q1ZlcmlmaWVyU2NvcGUgc3VwcHJlc3NTY29wZSh2aXNpdG9yKTsKICAgICBWTSYgdm0gPSAqbV92
bTsKIAogICAgIGlmIChqaXRUeXBlKCkgPT0gSklUVHlwZTo6SW50ZXJwcmV0ZXJUaHVuaykgewpA
QCAtMTEzMyw4ICsxMTUwLDkgQEAgdm9pZCBDb2RlQmxvY2s6OnByb3BhZ2F0ZVRyYW5zaXRpb25z
KGNvbgogICAgICAgICAgICAgICAgIFN0cnVjdHVyZUlEIG5ld1N0cnVjdHVyZUlEID0gbWV0YWRh
dGEubV9uZXdTdHJ1Y3R1cmVJRDsKICAgICAgICAgICAgICAgICBpZiAoIW9sZFN0cnVjdHVyZUlE
IHx8ICFuZXdTdHJ1Y3R1cmVJRCkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworCiAgICAg
ICAgICAgICAgICAgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUgPSB2bS5oZWFwLnN0cnVjdHVyZUlE
VGFibGUoKS5nZXQob2xkU3RydWN0dXJlSUQpOwotICAgICAgICAgICAgICAgIGlmICh2bS5oZWFw
LmlzTWFya2VkKG9sZFN0cnVjdHVyZSkpIHsKKyAgICAgICAgICAgICAgICBpZiAodmlzaXRvci5p
c01hcmtlZChvbGRTdHJ1Y3R1cmUpKSB7CiAgICAgICAgICAgICAgICAgICAgIFN0cnVjdHVyZSog
bmV3U3RydWN0dXJlID0gdm0uaGVhcC5zdHJ1Y3R1cmVJRFRhYmxlKCkuZ2V0KG5ld1N0cnVjdHVy
ZUlEKTsKICAgICAgICAgICAgICAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZChuZXdT
dHJ1Y3R1cmUpOwogICAgICAgICAgICAgICAgIH0KQEAgLTExNDgsMTEgKzExNjYsMTEgQEAgdm9p
ZCBDb2RlQmxvY2s6OnByb3BhZ2F0ZVRyYW5zaXRpb25zKGNvbgogCiAgICAgICAgICAgICAgICAg
SlNDZWxsKiBwcm9wZXJ0eSA9IG1ldGFkYXRhLm1fcHJvcGVydHkuZ2V0KCk7CiAgICAgICAgICAg
ICAgICAgQVNTRVJUKHByb3BlcnR5KTsKLSAgICAgICAgICAgICAgICBpZiAoIXZtLmhlYXAuaXNN
YXJrZWQocHJvcGVydHkpKQorICAgICAgICAgICAgICAgIGlmICghdmlzaXRvci5pc01hcmtlZChw
cm9wZXJ0eSkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICAgICAgICAg
IFN0cnVjdHVyZSogb2xkU3RydWN0dXJlID0gdm0uaGVhcC5zdHJ1Y3R1cmVJRFRhYmxlKCkuZ2V0
KG9sZFN0cnVjdHVyZUlEKTsKLSAgICAgICAgICAgICAgICBpZiAodm0uaGVhcC5pc01hcmtlZChv
bGRTdHJ1Y3R1cmUpKSB7CisgICAgICAgICAgICAgICAgaWYgKHZpc2l0b3IuaXNNYXJrZWQob2xk
U3RydWN0dXJlKSkgewogICAgICAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVy
ZSA9IHZtLmhlYXAuc3RydWN0dXJlSURUYWJsZSgpLmdldChuZXdTdHJ1Y3R1cmVJRCk7CiAgICAg
ICAgICAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQobmV3U3RydWN0dXJlKTsK
ICAgICAgICAgICAgICAgICB9CkBAIC0xMTcwLDcgKzExODgsNyBAQCB2b2lkIENvZGVCbG9jazo6
cHJvcGFnYXRlVHJhbnNpdGlvbnMoY29uCiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKIAog
ICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlID0gdm0uaGVhcC5zdHJ1Y3R1
cmVJRFRhYmxlKCkuZ2V0KG9sZFN0cnVjdHVyZUlEKTsKLSAgICAgICAgICAgICAgICBpZiAodm0u
aGVhcC5pc01hcmtlZChvbGRTdHJ1Y3R1cmUpKSB7CisgICAgICAgICAgICAgICAgaWYgKHZpc2l0
b3IuaXNNYXJrZWQob2xkU3RydWN0dXJlKSkgewogICAgICAgICAgICAgICAgICAgICBTdHJ1Y3R1
cmUqIG5ld1N0cnVjdHVyZSA9IHZtLmhlYXAuc3RydWN0dXJlSURUYWJsZSgpLmdldChuZXdTdHJ1
Y3R1cmVJRCk7CiAgICAgICAgICAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQo
bmV3U3RydWN0dXJlKTsKICAgICAgICAgICAgICAgICB9CkBAIC0xMTk3LDcgKzEyMTUsNyBAQCB2
b2lkIENvZGVCbG9jazo6cHJvcGFnYXRlVHJhbnNpdGlvbnMoY29uCiAgICAgICAgICAgICB2bS5n
ZXRTdHJ1Y3R1cmUoc3RydWN0dXJlSUQpLT5tYXJrSWZDaGVhcCh2aXNpdG9yKTsKIAogICAgICAg
ICBmb3IgKGF1dG8mIHRyYW5zaXRpb24gOiBkZmdDb21tb24tPnRyYW5zaXRpb25zKSB7Ci0gICAg
ICAgICAgICBpZiAoc2hvdWxkTWFya1RyYW5zaXRpb24odm0sIHRyYW5zaXRpb24pKSB7CisgICAg
ICAgICAgICBpZiAoc2hvdWxkTWFya1RyYW5zaXRpb24odmlzaXRvciwgdHJhbnNpdGlvbikpIHsK
ICAgICAgICAgICAgICAgICAvLyBJZiB0aGUgZm9sbG93aW5nIHRocmVlIHRoaW5ncyBhcmUgbGl2
ZSwgdGhlbiB0aGUgdGFyZ2V0IG9mIHRoZQogICAgICAgICAgICAgICAgIC8vIHRyYW5zaXRpb24g
aXMgYWxzbyBsaXZlOgogICAgICAgICAgICAgICAgIC8vCkBAIC0xMjI0LDEzICsxMjQyLDEzIEBA
IHZvaWQgQ29kZUJsb2NrOjpwcm9wYWdhdGVUcmFuc2l0aW9ucyhjb24KICNlbmRpZiAvLyBFTkFC
TEUoREZHX0pJVCkKIH0KIAotdm9pZCBDb2RlQmxvY2s6OmRldGVybWluZUxpdmVuZXNzKGNvbnN0
IENvbmN1cnJlbnRKU0xvY2tlciYsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBDb2RlQmxv
Y2s6OmRldGVybWluZUxpdmVuZXNzKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIEFic3RyYWN0
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHZpc2l0b3IpOwogICAg
IAogI2lmIEVOQUJMRShERkdfSklUKQogICAgIFZNJiB2bSA9ICptX3ZtOwotICAgIGlmICh2bS5o
ZWFwLmlzTWFya2VkKHRoaXMpKQorICAgIGlmICh2aXNpdG9yLmlzTWFya2VkKHRoaXMpKQogICAg
ICAgICByZXR1cm47CiAgICAgCiAgICAgLy8gSW4gcmFyZSBhbmQgd2VpcmQgY2FzZXMsIHRoaXMg
Y291bGQgYmUgY2FsbGVkIG9uIGEgYmFzZWxpbmUgQ29kZUJsb2NrLiBPbmUgdGhhdCBJIGZvdW5k
IHdhcwpAQCAtMTI0Nyw3ICsxMjY1LDcgQEAgdm9pZCBDb2RlQmxvY2s6OmRldGVybWluZUxpdmVu
ZXNzKGNvbnN0IAogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkZmdDb21tb24tPndlYWtS
ZWZlcmVuY2VzLnNpemUoKTsgKytpKSB7CiAgICAgICAgIEpTQ2VsbCogcmVmZXJlbmNlID0gZGZn
Q29tbW9uLT53ZWFrUmVmZXJlbmNlc1tpXS5nZXQoKTsKICAgICAgICAgQVNTRVJUKCFqc0R5bmFt
aWNDYXN0PENvZGVCbG9jayo+KHZtLCByZWZlcmVuY2UpKTsKLSAgICAgICAgaWYgKCF2bS5oZWFw
LmlzTWFya2VkKHJlZmVyZW5jZSkpIHsKKyAgICAgICAgaWYgKCF2aXNpdG9yLmlzTWFya2VkKHJl
ZmVyZW5jZSkpIHsKICAgICAgICAgICAgIGFsbEFyZUxpdmVTb0ZhciA9IGZhbHNlOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTEyNTUsNyArMTI3Myw3IEBAIHZvaWQgQ29kZUJs
b2NrOjpkZXRlcm1pbmVMaXZlbmVzcyhjb25zdCAKICAgICBpZiAoYWxsQXJlTGl2ZVNvRmFyKSB7
CiAgICAgICAgIGZvciAoU3RydWN0dXJlSUQgc3RydWN0dXJlSUQgOiBkZmdDb21tb24tPndlYWtT
dHJ1Y3R1cmVSZWZlcmVuY2VzKSB7CiAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9
IHZtLmdldFN0cnVjdHVyZShzdHJ1Y3R1cmVJRCk7Ci0gICAgICAgICAgICBpZiAoIXZtLmhlYXAu
aXNNYXJrZWQoc3RydWN0dXJlKSkgeworICAgICAgICAgICAgaWYgKCF2aXNpdG9yLmlzTWFya2Vk
KHN0cnVjdHVyZSkpIHsKICAgICAgICAgICAgICAgICBhbGxBcmVMaXZlU29GYXIgPSBmYWxzZTsK
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KQEAgLTE2MTYsNiArMTYzNCw3
IEBAIHZvaWQgQ29kZUJsb2NrOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSgKICAgICB1cGRhdGVB
Y3Rpdml0eSgpOwogCiAgICAgVk06OlNwYWNlQW5kU2V0OjpzZXRGb3IoKnN1YnNwYWNlKCkpLnJl
bW92ZSh0aGlzKTsKKyAgICBtX3Zpc2l0Q2hpbGRyZW5Ta2lwcGVkRHVlVG9PbGRBZ2UgPSBmYWxz
ZTsKIH0KIAogdm9pZCBDb2RlQmxvY2s6OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQpAQCAtMTgwOCw3
ICsxODI3LDggQEAgdm9pZCBDb2RlQmxvY2s6OnJlc2V0SklURGF0YSgpCiB9CiAjZW5kaWYKIAot
dm9pZCBDb2RlQmxvY2s6OnZpc2l0T1NSRXhpdFRhcmdldHMoY29uc3QgQ29uY3VycmVudEpTTG9j
a2VyJiwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgor
dm9pZCBDb2RlQmxvY2s6OnZpc2l0T1NSRXhpdFRhcmdldHMoY29uc3QgQ29uY3VycmVudEpTTG9j
a2VyJiwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICAvLyBXZSBzdHJvbmdseSB2aXNpdCBPU1Ig
ZXhpdHMgdGFyZ2V0cyBiZWNhdXNlIHdlIGRvbid0IHdhbnQgdG8gZGVhbCB3aXRoCiAgICAgLy8g
dGhlIGNvbXBsZXhpdHkgb2YgZ2VuZXJhdGluZyBhbiBleGl0IHRhcmdldCBDb2RlQmxvY2sgb24g
ZGVtYW5kIGFuZApAQCAtMTgyOCw3ICsxODQ4LDExIEBAIHZvaWQgQ29kZUJsb2NrOjp2aXNpdE9T
UkV4aXRUYXJnZXRzKGNvbnMKICNlbmRpZgogfQogCi12b2lkIENvZGVCbG9jazo6c3Ryb25nbHlW
aXNpdFN0cm9uZ1JlZmVyZW5jZXMoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiBsb2NrZXIsIFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGUgdm9pZCBDb2RlQmxvY2s6OnZpc2l0T1NSRXhp
dFRhcmdldHMoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgU2xvdFZpc2l0b3ImKTsKK3RlbXBs
YXRlIHZvaWQgQ29kZUJsb2NrOjp2aXNpdE9TUkV4aXRUYXJnZXRzKGNvbnN0IENvbmN1cnJlbnRK
U0xvY2tlciYsIEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVmlz
aXRvcj4KK3ZvaWQgQ29kZUJsb2NrOjpzdHJvbmdseVZpc2l0U3Ryb25nUmVmZXJlbmNlcyhjb25z
dCBDb25jdXJyZW50SlNMb2NrZXImIGxvY2tlciwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBV
TlVTRURfUEFSQU0obG9ja2VyKTsKICAgICAKQEAgLTE4NjQsNyArMTg4OCw4IEBAIHZvaWQgQ29k
ZUJsb2NrOjpzdHJvbmdseVZpc2l0U3Ryb25nUmVmZXIKICNlbmRpZgogfQogCi12b2lkIENvZGVC
bG9jazo6c3Ryb25nbHlWaXNpdFdlYWtSZWZlcmVuY2VzKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tl
ciYsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3Zv
aWQgQ29kZUJsb2NrOjpzdHJvbmdseVZpc2l0V2Vha1JlZmVyZW5jZXMoY29uc3QgQ29uY3VycmVu
dEpTTG9ja2VyJiwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBVTlVTRURfUEFSQU0odmlzaXRv
cik7CiAKQEAgLTE4OTEsNiArMTkxNiw5IEBAIHZvaWQgQ29kZUJsb2NrOjpzdHJvbmdseVZpc2l0
V2Vha1JlZmVyZW4KICNlbmRpZiAgICAKIH0KIAordGVtcGxhdGUgdm9pZCBDb2RlQmxvY2s6OnN0
cm9uZ2x5VmlzaXRXZWFrUmVmZXJlbmNlcyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBTbG90
VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBDb2RlQmxvY2s6OnN0cm9uZ2x5VmlzaXRXZWFrUmVm
ZXJlbmNlcyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBBYnN0cmFjdFNsb3RWaXNpdG9yJik7
CisKIENvZGVCbG9jayogQ29kZUJsb2NrOjpiYXNlbGluZUFsdGVybmF0aXZlKCkKIHsKICNpZiBF
TkFCTEUoSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9j
ay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxv
Y2suaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAwOC0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAwOC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
IENvcHlyaWdodCAoQykgMjAwOCBDYW1lcm9uIFp3YXJpY2ggPGN3endhcmljaEB1d2F0ZXJsb28u
Y2E+CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0yMDEsMTAgKzIwMSwxMSBAQCBwdWJsaWM6CiAgICAg
Ly8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyMzY3NwogICAgIENv
ZGVCbG9jayogYmFzZWxpbmVWZXJzaW9uKCk7CiAKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVO
OworCiAgICAgc3RhdGljIHNpemVfdCBlc3RpbWF0ZWRTaXplKEpTQ2VsbCosIFZNJik7Ci0gICAg
c3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwogICAgIHN0
YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7Ci0gICAgdm9pZCB2aXNpdENoaWxkcmVuKFNsb3RW
aXNpdG9yJik7CisgICAgREVDTEFSRV9JTlNUQU5DRV9WSVNJVF9DSElMRFJFTjsKICAgICB2b2lk
IGZpbmFsaXplVW5jb25kaXRpb25hbGx5KFZNJik7CiAKICAgICB2b2lkIG5vdGlmeUxleGljYWxC
aW5kaW5nVXBkYXRlKCk7CkBAIC05NjMsMTYgKzk2NCwxNiBAQCBwcml2YXRlOgogICAgICAgICBt
X2NvbnN0YW50UmVnaXN0ZXJzW3JlZy50b0NvbnN0YW50SW5kZXgoKV0uc2V0KCptX3ZtLCB0aGlz
LCB2YWx1ZSk7CiAgICAgfQogCi0gICAgYm9vbCBzaG91bGRWaXNpdFN0cm9uZ2x5KGNvbnN0IENv
bmN1cnJlbnRKU0xvY2tlciYpOworICAgIGJvb2wgc2hvdWxkVmlzaXRTdHJvbmdseShjb25zdCBD
b25jdXJyZW50SlNMb2NrZXImLCBBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAgICAgYm9vbCBzaG91
bGRKZXR0aXNvbkR1ZVRvV2Vha1JlZmVyZW5jZShWTSYpOwotICAgIGJvb2wgc2hvdWxkSmV0dGlz
b25EdWVUb09sZEFnZShjb25zdCBDb25jdXJyZW50SlNMb2NrZXImKTsKKyAgICBib29sIHNob3Vs
ZEpldHRpc29uRHVlVG9PbGRBZ2UoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgQWJzdHJhY3RT
bG90VmlzaXRvciYpOwogICAgIAotICAgIHZvaWQgcHJvcGFnYXRlVHJhbnNpdGlvbnMoY29uc3Qg
Q29uY3VycmVudEpTTG9ja2VyJiwgU2xvdFZpc2l0b3ImKTsKLSAgICB2b2lkIGRldGVybWluZUxp
dmVuZXNzKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIFNsb3RWaXNpdG9yJik7CisgICAgdm9p
ZCBwcm9wYWdhdGVUcmFuc2l0aW9ucyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBBYnN0cmFj
dFNsb3RWaXNpdG9yJik7CisgICAgdm9pZCBkZXRlcm1pbmVMaXZlbmVzcyhjb25zdCBDb25jdXJy
ZW50SlNMb2NrZXImLCBBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAgICAgICAgIAotICAgIHZvaWQg
c3Ryb25nbHlWaXNpdFN0cm9uZ1JlZmVyZW5jZXMoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwg
U2xvdFZpc2l0b3ImKTsKLSAgICB2b2lkIHN0cm9uZ2x5VmlzaXRXZWFrUmVmZXJlbmNlcyhjb25z
dCBDb25jdXJyZW50SlNMb2NrZXImLCBTbG90VmlzaXRvciYpOwotICAgIHZvaWQgdmlzaXRPU1JF
eGl0VGFyZ2V0cyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBTbG90VmlzaXRvciYpOworICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgc3Ryb25nbHlWaXNpdFN0cm9uZ1JlZmVy
ZW5jZXMoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgVmlzaXRvciYpOworICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgc3Ryb25nbHlWaXNpdFdlYWtSZWZlcmVuY2VzKGNvbnN0
IENvbmN1cnJlbnRKU0xvY2tlciYsIFZpc2l0b3ImKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPiB2b2lkIHZpc2l0T1NSRXhpdFRhcmdldHMoY29uc3QgQ29uY3VycmVudEpTTG9ja2Vy
JiwgVmlzaXRvciYpOwogCiAgICAgdW5zaWduZWQgbnVtYmVyT2ZOb25Bcmd1bWVudFZhbHVlUHJv
ZmlsZXMoKSB7IHJldHVybiBtX251bWJlck9mTm9uQXJndW1lbnRWYWx1ZVByb2ZpbGVzOyB9CiAg
ICAgdW5zaWduZWQgdG90YWxOdW1iZXJPZlZhbHVlUHJvZmlsZXMoKSB7IHJldHVybiBudW1iZXJP
ZkFyZ3VtZW50VmFsdWVQcm9maWxlcygpICsgbnVtYmVyT2ZOb25Bcmd1bWVudFZhbHVlUHJvZmls
ZXMoKTsgfQpAQCAtMTAxMSw2ICsxMDEyLDcgQEAgcHJpdmF0ZToKICAgICB1bnNpZ25lZCBtX2J5
dGVjb2RlQ29zdCB7IDAgfTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgbV9zY29wZVJlZ2lzdGVyOwog
ICAgIG11dGFibGUgQ29kZUJsb2NrSGFzaCBtX2hhc2g7CisgICAgYm9vbCBtX3Zpc2l0Q2hpbGRy
ZW5Ta2lwcGVkRHVlVG9PbGRBZ2UgeyBmYWxzZSB9OwogCiAgICAgV3JpdGVCYXJyaWVyPFVubGlu
a2VkQ29kZUJsb2NrPiBtX3VubGlua2VkQ29kZTsKICAgICBXcml0ZUJhcnJpZXI8U2NyaXB0RXhl
Y3V0YWJsZT4gbV9vd25lckV4ZWN1dGFibGU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvRGVsZXRlQnlJZFZhcmlhbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9EZWxldGVCeUlkVmFyaWFudC5jcHAJKHJldmlzaW9uIDI3Mjgz
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9EZWxldGVCeUlkVmFyaWFudC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAy
MC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtODgsMTIgKzg4LDEyIEBAIGJvb2wgRGVsZXRlQnlJZFZhcmlhbnQ6
OndyaXRlc1N0cnVjdHVyZXMKICAgICByZXR1cm4gISFuZXdTdHJ1Y3R1cmUoKTsKIH0KIAotdm9p
ZCBEZWxldGVCeUlkVmFyaWFudDo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3Ip
Cit2b2lkIERlbGV0ZUJ5SWRWYXJpYW50Ojp2aXNpdEFnZ3JlZ2F0ZShBYnN0cmFjdFNsb3RWaXNp
dG9yJiB2aXNpdG9yKQogewogICAgIG1faWRlbnRpZmllci52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9y
KTsKIH0KIAotdm9pZCBEZWxldGVCeUlkVmFyaWFudDo6bWFya0lmQ2hlYXAoU2xvdFZpc2l0b3Im
IHZpc2l0b3IpCit2b2lkIERlbGV0ZUJ5SWRWYXJpYW50OjptYXJrSWZDaGVhcChBYnN0cmFjdFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGlmIChtX29sZFN0cnVjdHVyZSkKICAgICAgICAg
bV9vbGRTdHJ1Y3R1cmUtPm1hcmtJZkNoZWFwKHZpc2l0b3IpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0RlbGV0ZUJ5SWRWYXJpYW50LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0RlbGV0ZUJ5SWRWYXJpYW50LmgJKHJldmlzaW9u
IDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9EZWxldGVCeUlkVmFy
aWFudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMjAtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTYxLDggKzYxLDggQEAgcHVibGljOgogCiAgICAgYm9vbCBh
dHRlbXB0VG9NZXJnZShjb25zdCBEZWxldGVCeUlkVmFyaWFudCYgb3RoZXIpOwogCi0gICAgdm9p
ZCB2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYpOwotICAgIHZvaWQgbWFya0lmQ2hlYXAoU2xv
dFZpc2l0b3ImKTsKKyAgICB2b2lkIHZpc2l0QWdncmVnYXRlKEFic3RyYWN0U2xvdFZpc2l0b3Im
KTsKKyAgICB2b2lkIG1hcmtJZkNoZWFwKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKICAgICBib29s
IGZpbmFsaXplKFZNJik7CiAKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9EZWxldGVCeVN0YXR1cy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0RlbGV0ZUJ5U3RhdHVz
LmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0RlbGV0ZUJ5U3RhdHVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDIwLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNTQsMTMgKzI1NCwxMyBAQCBDYWNo
ZWFibGVJZGVudGlmaWVyIERlbGV0ZUJ5U3RhdHVzOjpzaW5nCiAgICAgcmV0dXJuIHJlc3VsdDsK
IH0KIAotdm9pZCBEZWxldGVCeVN0YXR1czo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImIHZp
c2l0b3IpCit2b2lkIERlbGV0ZUJ5U3RhdHVzOjp2aXNpdEFnZ3JlZ2F0ZShBYnN0cmFjdFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQogewogICAgIGZvciAoRGVsZXRlQnlJZFZhcmlhbnQmIHZhcmlhbnQg
OiBtX3ZhcmlhbnRzKQogICAgICAgICB2YXJpYW50LnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOwog
fQogCi12b2lkIERlbGV0ZUJ5U3RhdHVzOjptYXJrSWZDaGVhcChTbG90VmlzaXRvciYgdmlzaXRv
cikKK3ZvaWQgRGVsZXRlQnlTdGF0dXM6Om1hcmtJZkNoZWFwKEFic3RyYWN0U2xvdFZpc2l0b3Im
IHZpc2l0b3IpCiB7CiAgICAgZm9yIChEZWxldGVCeUlkVmFyaWFudCYgdmFyaWFudCA6IG1fdmFy
aWFudHMpCiAgICAgICAgIHZhcmlhbnQubWFya0lmQ2hlYXAodmlzaXRvcik7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRGVsZXRlQnlTdGF0dXMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRGVsZXRlQnlTdGF0dXMuaAkocmV2aXNp
b24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0RlbGV0ZUJ5U3Rh
dHVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAyMC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtODEsOCArODEsOCBAQCBwdWJsaWM6CiAgICAgLy8gQXR0ZW1w
dHMgdG8gcmVkdWNlIHRoZSBzZXQgb2YgdmFyaWFudHMgdG8gZml0IHRoZSBnaXZlbiBzdHJ1Y3R1
cmUgc2V0LiBUaGlzIG1heSBiZSBhcHByb3hpbWF0ZS4KICAgICB2b2lkIGZpbHRlcihjb25zdCBT
dHJ1Y3R1cmVTZXQmKTsKIAotICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImKTsK
LSAgICB2b2lkIG1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJik7CisgICAgdm9pZCB2aXNpdEFnZ3Jl
Z2F0ZShBYnN0cmFjdFNsb3RWaXNpdG9yJik7CisgICAgdm9pZCBtYXJrSWZDaGVhcChBYnN0cmFj
dFNsb3RWaXNpdG9yJik7CiAgICAgYm9vbCBmaW5hbGl6ZShWTSYpOwogCiAgICAgYm9vbCBhcHBl
bmRWYXJpYW50KGNvbnN0IERlbGV0ZUJ5SWRWYXJpYW50Jik7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvRGlyZWN0RXZhbENvZGVDYWNoZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0RpcmVjdEV2YWxDb2RlQ2FjaGUuY3BwCShy
ZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRGlyZWN0
RXZhbENvZGVDYWNoZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDUsNyArNDUsOCBAQCB2b2lkIERpcmVj
dEV2YWxDb2RlQ2FjaGU6OmNsZWFyKCkKICAgICBtX2NhY2hlTWFwLmNsZWFyKCk7CiB9CiAKLXZv
aWQgRGlyZWN0RXZhbENvZGVDYWNoZTo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImIHZpc2l0
b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBEaXJlY3RFdmFsQ29kZUNhY2hl
Ojp2aXNpdEFnZ3JlZ2F0ZShWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIExvY2tIb2xkZXIgbG9j
a2VyKG1fbG9jayk7CiAgICAgRXZhbENhY2hlTWFwOjppdGVyYXRvciBlbmQgPSBtX2NhY2hlTWFw
LmVuZCgpOwpAQCAtNTMsNSArNTQsNyBAQCB2b2lkIERpcmVjdEV2YWxDb2RlQ2FjaGU6OnZpc2l0
QWdncmVnYXRlCiAgICAgICAgIHZpc2l0b3IuYXBwZW5kKHB0ci0+dmFsdWUpOwogfQogCi19IC8v
IG5hbWVzcGFjZSBKU0MKK3RlbXBsYXRlIHZvaWQgRGlyZWN0RXZhbENvZGVDYWNoZTo6dmlzaXRB
Z2dyZWdhdGUoQWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBEaXJlY3RFdmFs
Q29kZUNhY2hlOjp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYpOwogCit9IC8vIG5hbWVzcGFj
ZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9EaXJlY3RFdmFsQ29k
ZUNhY2hlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Rp
cmVjdEV2YWxDb2RlQ2FjaGUuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0RpcmVjdEV2YWxDb2RlQ2FjaGUuaAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxOSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTk3LDcgKzk3LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgYm9vbCBpc0VtcHR5KCkg
Y29uc3QgeyByZXR1cm4gbV9jYWNoZU1hcC5pc0VtcHR5KCk7IH0KIAotICAgICAgICB2b2lkIHZp
c2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJik7CisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZp
c2l0b3I+IHZvaWQgdmlzaXRBZ2dyZWdhdGUoVmlzaXRvciYpOwogCiAgICAgICAgIHZvaWQgY2xl
YXIoKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGFibGVU
b0NvZGVCbG9ja0VkZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9FeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlLmNwcAkocmV2aXNpb24gMjcyODMwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGFibGVUb0NvZGVCbG9ja0Vk
Z2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTgtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTUzLDcgKzUzLDggQEAgdm9pZCBFeGVjdXRhYmxlVG9Db2Rl
QmxvY2tFZGdlOjpmaW5pc2hDcgogICAgIEFTU0VSVCghaXNBY3RpdmUoKSk7CiB9CiAKLXZvaWQg
RXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgRXhl
Y3V0YWJsZVRvQ29kZUJsb2NrRWRnZTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBW
aXNpdG9yJiB2aXNpdG9yKQogewogICAgIFZNJiB2bSA9IHZpc2l0b3Iudm0oKTsKICAgICBFeGVj
dXRhYmxlVG9Db2RlQmxvY2tFZGdlKiBlZGdlID0ganNDYXN0PEV4ZWN1dGFibGVUb0NvZGVCbG9j
a0VkZ2UqPihjZWxsKTsKQEAgLTYxLDcgKzYyLDcgQEAgdm9pZCBFeGVjdXRhYmxlVG9Db2RlQmxv
Y2tFZGdlOjp2aXNpdENoaQogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4oY2VsbCwgdmlzaXRvcik7
CiAKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGVkZ2UtPm1fY29kZUJsb2NrLmdldCgpOwot
ICAgIAorCiAgICAgLy8gSXQncyBwb3NzaWJsZSBmb3Igc29tZW9uZSB0byBob2xkIGEgcG9pbnRl
ciB0byB0aGUgZWRnZSBhZnRlciB0aGUgZWRnZSBoYXMgY2xlYXJlZCBpdHMgd2VhawogICAgIC8v
IHJlZmVyZW5jZSB0byB0aGUgY29kZUJsb2NrLiBJbiBhIGNvbnNlcnZhdGl2ZSBHQyBsaWtlIG91
cnMsIHRoYXQgY291bGQgaGFwcGVuIGF0IHJhbmRvbSBmb3IKICAgICAvLyBubyBnb29kIHJlYXNv
biBhbmQgaXQncyBUb3RhbGx5IE9LIChUTSkuIFNlZSBmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSgp
IGZvciB3aGVyZSB3ZSBjbGVhcgpAQCAtNzUsMTEgKzc2LDExIEBAIHZvaWQgRXhlY3V0YWJsZVRv
Q29kZUJsb2NrRWRnZTo6dmlzaXRDaGkKICAgICB9CiAgICAgCiAgICAgQ29uY3VycmVudEpTTG9j
a2VyIGxvY2tlcihjb2RlQmxvY2stPm1fbG9jayk7Ci0gICAgCi0gICAgaWYgKGNvZGVCbG9jay0+
c2hvdWxkVmlzaXRTdHJvbmdseShsb2NrZXIpKQorCisgICAgaWYgKGNvZGVCbG9jay0+c2hvdWxk
VmlzaXRTdHJvbmdseShsb2NrZXIsIHZpc2l0b3IpKQogICAgICAgICB2aXNpdG9yLmFwcGVuZFVu
YmFycmllcmVkKGNvZGVCbG9jayk7CiAgICAgCi0gICAgaWYgKCF2bS5oZWFwLmlzTWFya2VkKGNv
ZGVCbG9jaykpCisgICAgaWYgKCF2aXNpdG9yLmlzTWFya2VkKGNvZGVCbG9jaykpCiAgICAgICAg
IHZtLmV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2VzV2l0aEZpbmFsaXplcnMuYWRkKGVkZ2UpOwog
ICAgIAogICAgIGlmIChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoY29kZUJsb2NrLT5qaXRUeXBl
KCkpKSB7CkBAIC0xMTcsNyArMTE4LDkgQEAgdm9pZCBFeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdl
Ojp2aXNpdENoaQogICAgIGVkZ2UtPnJ1bkNvbnN0cmFpbnQobG9ja2VyLCB2bSwgdmlzaXRvcik7
CiB9CiAKLXZvaWQgRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZTo6dmlzaXRPdXRwdXRDb25zdHJh
aW50cyhKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorREVGSU5FX1ZJU0lUX0NI
SUxEUkVOKEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UpOworCit2b2lkIEV4ZWN1dGFibGVUb0Nv
ZGVCbG9ja0VkZ2U6OnZpc2l0T3V0cHV0Q29uc3RyYWludHMoSlNDZWxsKiBjZWxsLCBBYnN0cmFj
dFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFZNJiB2bSA9IHZpc2l0b3Iudm0oKTsKICAg
ICBFeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlKiBlZGdlID0ganNDYXN0PEV4ZWN1dGFibGVUb0Nv
ZGVCbG9ja0VkZ2UqPihjZWxsKTsKQEAgLTE4NiwxNCArMTg5LDE0IEBAIEV4ZWN1dGFibGVUb0Nv
ZGVCbG9ja0VkZ2U6OkV4ZWN1dGFibGVUb0MKIHsKIH0KIAotdm9pZCBFeGVjdXRhYmxlVG9Db2Rl
QmxvY2tFZGdlOjpydW5Db25zdHJhaW50KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYgbG9ja2Vy
LCBWTSYgdm0sIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBFeGVjdXRhYmxlVG9Db2RlQmxv
Y2tFZGdlOjpydW5Db25zdHJhaW50KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYgbG9ja2VyLCBW
TSYgdm0sIEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgQ29kZUJsb2NrKiBj
b2RlQmxvY2sgPSBtX2NvZGVCbG9jay5nZXQoKTsKICAgICAKICAgICBjb2RlQmxvY2stPnByb3Bh
Z2F0ZVRyYW5zaXRpb25zKGxvY2tlciwgdmlzaXRvcik7CiAgICAgY29kZUJsb2NrLT5kZXRlcm1p
bmVMaXZlbmVzcyhsb2NrZXIsIHZpc2l0b3IpOwotICAgIAotICAgIGlmICh2bS5oZWFwLmlzTWFy
a2VkKGNvZGVCbG9jaykpCisKKyAgICBpZiAodmlzaXRvci5pc01hcmtlZChjb2RlQmxvY2spKQog
ICAgICAgICB2bS5leGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlc1dpdGhDb25zdHJhaW50cy5yZW1v
dmUodGhpcyk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGVj
dXRhYmxlVG9Db2RlQmxvY2tFZGdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0V4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UuaAkocmV2aXNpb24gMjcyODMw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGFibGVUb0NvZGVCbG9j
a0VkZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTgtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTgtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTUzLDkgKzUzLDkgQEAgcHVibGljOgogICAgIERF
Q0xBUkVfSU5GTzsKIAogICAgIENvZGVCbG9jayogY29kZUJsb2NrKCkgY29uc3QgeyByZXR1cm4g
bV9jb2RlQmxvY2suZ2V0KCk7IH0KLSAgICAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVu
KEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRPdXRwdXRDb25z
dHJhaW50cyhKU0NlbGwqLCBTbG90VmlzaXRvciYpOworCisgICAgREVDTEFSRV9WSVNJVF9DSElM
RFJFTjsKKyAgICBzdGF0aWMgdm9pZCB2aXNpdE91dHB1dENvbnN0cmFpbnRzKEpTQ2VsbCosIEFi
c3RyYWN0U2xvdFZpc2l0b3ImKTsKICAgICB2b2lkIGZpbmFsaXplVW5jb25kaXRpb25hbGx5KFZN
Jik7CiAgICAgCiAgICAgc3RhdGljIENvZGVCbG9jayogdW53cmFwKEV4ZWN1dGFibGVUb0NvZGVC
bG9ja0VkZ2UqIGVkZ2UpCkBAIC04MSw5ICs4MSw5IEBAIHByaXZhdGU6CiAgICAgdm9pZCBhY3Rp
dmF0ZSgpOwogICAgIHZvaWQgZGVhY3RpdmF0ZSgpOwogICAgIGJvb2wgaXNBY3RpdmUoKSBjb25z
dDsKLSAgICAKLSAgICB2b2lkIHJ1bkNvbnN0cmFpbnQoY29uc3QgQ29uY3VycmVudEpTTG9ja2Vy
JiwgVk0mLCBTbG90VmlzaXRvciYpOwotICAgIAorCisgICAgdm9pZCBydW5Db25zdHJhaW50KGNv
bnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIFZNJiwgQWJzdHJhY3RTbG90VmlzaXRvciYpOworCiAg
ICAgV3JpdGVCYXJyaWVyPENvZGVCbG9jaz4gbV9jb2RlQmxvY2s7CiB9OwogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFZhcmlhbnQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkVmFyaWFudC5jcHAJKHJl
dmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlk
VmFyaWFudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDE0LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE0LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xNTYsMTIgKzE1NiwxMiBAQCBib29sIEdl
dEJ5SWRWYXJpYW50OjphdHRlbXB0VG9NZXJnZShjb25zCiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
LXZvaWQgR2V0QnlJZFZhcmlhbnQ6OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9y
KQordm9pZCBHZXRCeUlkVmFyaWFudDo6dmlzaXRBZ2dyZWdhdGUoQWJzdHJhY3RTbG90VmlzaXRv
ciYgdmlzaXRvcikKIHsKICAgICBtX2lkZW50aWZpZXIudmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7
CiB9CiAKLXZvaWQgR2V0QnlJZFZhcmlhbnQ6Om1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJiB2aXNp
dG9yKQordm9pZCBHZXRCeUlkVmFyaWFudDo6bWFya0lmQ2hlYXAoQWJzdHJhY3RTbG90VmlzaXRv
ciYgdmlzaXRvcikKIHsKICAgICBtX3N0cnVjdHVyZVNldC5tYXJrSWZDaGVhcCh2aXNpdG9yKTsK
IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkVmFyaWFudC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkVmFy
aWFudC5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvR2V0QnlJZFZhcmlhbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTc3LDggKzc3LDggQEAgcHVi
bGljOgogCiAgICAgYm9vbCBhdHRlbXB0VG9NZXJnZShjb25zdCBHZXRCeUlkVmFyaWFudCYgb3Ro
ZXIpOwogICAgIAotICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImKTsKLSAgICB2
b2lkIG1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJik7CisgICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShB
YnN0cmFjdFNsb3RWaXNpdG9yJik7CisgICAgdm9pZCBtYXJrSWZDaGVhcChBYnN0cmFjdFNsb3RW
aXNpdG9yJik7CiAgICAgYm9vbCBmaW5hbGl6ZShWTSYpOwogICAgIAogICAgIHZvaWQgZHVtcChQ
cmludFN0cmVhbSYpIGNvbnN0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0dldEJ5U3RhdHVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvR2V0QnlTdGF0dXMuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlTdGF0dXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDIwIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTMw
LDcgKzUzMCw3IEBAIHZvaWQgR2V0QnlTdGF0dXM6OmZpbHRlcihjb25zdCBTdHJ1Y3R1cmUKICAg
ICAgICAgbV9zdGF0ZSA9IE5vSW5mb3JtYXRpb247CiB9CiAKLXZvaWQgR2V0QnlTdGF0dXM6OnZp
c2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBHZXRCeVN0YXR1czo6dmlz
aXRBZ2dyZWdhdGUoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBpZiAoaXNN
b2R1bGVOYW1lc3BhY2UoKSkKICAgICAgICAgbV9tb2R1bGVOYW1lc3BhY2VEYXRhLT5tX2lkZW50
aWZpZXIudmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7CkBAIC01MzgsNyArNTM4LDcgQEAgdm9pZCBH
ZXRCeVN0YXR1czo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZpcwogICAgICAgICB2YXJpYW50LnZpc2l0
QWdncmVnYXRlKHZpc2l0b3IpOwogfQogCi12b2lkIEdldEJ5U3RhdHVzOjptYXJrSWZDaGVhcChT
bG90VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgR2V0QnlTdGF0dXM6Om1hcmtJZkNoZWFwKEFic3Ry
YWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgZm9yIChHZXRCeUlkVmFyaWFudCYgdmFy
aWFudCA6IG1fdmFyaWFudHMpCiAgICAgICAgIHZhcmlhbnQubWFya0lmQ2hlYXAodmlzaXRvcik7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlTdGF0dXMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlTdGF0dXMuaAko
cmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5
U3RhdHVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDEyLTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEyLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMTgsOCArMTE4LDggQEAgcHVibGljOgogICAg
IEpTTW9kdWxlRW52aXJvbm1lbnQqIG1vZHVsZUVudmlyb25tZW50KCkgY29uc3QgeyByZXR1cm4g
bV9tb2R1bGVOYW1lc3BhY2VEYXRhLT5tX21vZHVsZUVudmlyb25tZW50OyB9CiAgICAgU2NvcGVP
ZmZzZXQgc2NvcGVPZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX21vZHVsZU5hbWVzcGFjZURhdGEt
Pm1fc2NvcGVPZmZzZXQ7IH0KICAgICAKLSAgICB2b2lkIHZpc2l0QWdncmVnYXRlKFNsb3RWaXNp
dG9yJik7Ci0gICAgdm9pZCBtYXJrSWZDaGVhcChTbG90VmlzaXRvciYpOworICAgIHZvaWQgdmlz
aXRBZ2dyZWdhdGUoQWJzdHJhY3RTbG90VmlzaXRvciYpOworICAgIHZvaWQgbWFya0lmQ2hlYXAo
QWJzdHJhY3RTbG90VmlzaXRvciYpOwogICAgIGJvb2wgZmluYWxpemUoVk0mKTsgLy8gUmV0dXJu
IHRydWUgaWYgdGhpcyBnZXRzIHRvIGxpdmUuCiAKICAgICBib29sIGFwcGVuZFZhcmlhbnQoY29u
c3QgR2V0QnlJZFZhcmlhbnQmKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9JbkJ5SWRTdGF0dXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9JbkJ5SWRTdGF0dXMuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5CeUlkU3RhdHVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTggWXVzdWtlIFN1enVraSA8dXRh
dGFuZS50ZWFAZ21haWwuY29tPi4KLSAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTI1MSw3ICsyNTEsNyBAQCB2b2lkIEluQnlJZFN0YXR1czo6ZmlsdGVyKGNvbnN0IFN0cnVjdHVy
CiAgICAgICAgIG1fc3RhdGUgPSBOb0luZm9ybWF0aW9uOwogfQogCi12b2lkIEluQnlJZFN0YXR1
czo6bWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIEluQnlJZFN0YXR1czo6
bWFya0lmQ2hlYXAoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBmb3IgKElu
QnlJZFZhcmlhbnQmIHZhcmlhbnQgOiBtX3ZhcmlhbnRzKQogICAgICAgICB2YXJpYW50Lm1hcmtJ
ZkNoZWFwKHZpc2l0b3IpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lu
QnlJZFN0YXR1cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9JbkJ5SWRTdGF0dXMuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0luQnlJZFN0YXR1cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBA
QAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxOCBZdXN1a2UgU3V6dWtpIDx1dGF0YW5lLnRlYUBn
bWFpbC5jb20+LgotICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTA2LDcgKzEw
Niw3IEBAIHB1YmxpYzoKICAgICAvLyBBdHRlbXB0cyB0byByZWR1Y2UgdGhlIHNldCBvZiB2YXJp
YW50cyB0byBmaXQgdGhlIGdpdmVuIHN0cnVjdHVyZSBzZXQuIFRoaXMgbWF5IGJlIGFwcHJveGlt
YXRlLgogICAgIHZvaWQgZmlsdGVyKGNvbnN0IFN0cnVjdHVyZVNldCYpOwogICAgIAotICAgIHZv
aWQgbWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImKTsKKyAgICB2b2lkIG1hcmtJZkNoZWFwKEFic3Ry
YWN0U2xvdFZpc2l0b3ImKTsKICAgICBib29sIGZpbmFsaXplKFZNJik7CiAKICAgICB2b2lkIGR1
bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9JbkJ5SWRWYXJpYW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvSW5CeUlkVmFyaWFudC5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbkJ5SWRWYXJpYW50LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTggWXVzdWtlIFN1enVr
aSA8dXRhdGFuZS50ZWFAZ21haWwuY29tPi4KLSAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAyMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTY0LDcgKzY0LDcgQEAgYm9vbCBJbkJ5SWRWYXJpYW50OjphdHRlbXB0VG9NZXJnZShj
b25zdAogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIEluQnlJZFZhcmlhbnQ6Om1hcmtJZkNo
ZWFwKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBJbkJ5SWRWYXJpYW50OjptYXJrSWZDaGVh
cChBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIG1fc3RydWN0dXJlU2V0Lm1h
cmtJZkNoZWFwKHZpc2l0b3IpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0luQnlJZFZhcmlhbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvSW5CeUlkVmFyaWFudC5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5CeUlkVmFyaWFudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDYgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxOCBZdXN1a2UgU3V6dWtpIDx1dGF0
YW5lLnRlYUBnbWFpbC5jb20+LgotICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOC0yMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
NTcsNyArNTcsNyBAQCBwdWJsaWM6CiAKICAgICBib29sIGF0dGVtcHRUb01lcmdlKGNvbnN0IElu
QnlJZFZhcmlhbnQmIG90aGVyKTsKICAgICAKLSAgICB2b2lkIG1hcmtJZkNoZWFwKFNsb3RWaXNp
dG9yJik7CisgICAgdm9pZCBtYXJrSWZDaGVhcChBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAgICAg
Ym9vbCBmaW5hbGl6ZShWTSYpOwogCiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW50ZXJuYWxGdW5jdGlvbkFs
bG9jYXRpb25Qcm9maWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0ludGVybmFsRnVuY3Rpb25BbGxvY2F0aW9uUHJvZmlsZS5oCShyZXZpc2lvbiAyNzI4
MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW50ZXJuYWxGdW5jdGlvbkFs
bG9jYXRpb25Qcm9maWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zOSw3ICszOSw3IEBAIHB1Ymxp
YzoKICAgICBTdHJ1Y3R1cmUqIGNyZWF0ZUFsbG9jYXRpb25TdHJ1Y3R1cmVGcm9tQmFzZShWTSYs
IEpTR2xvYmFsT2JqZWN0KiwgSlNDZWxsKiBvd25lciwgSlNPYmplY3QqIHByb3RvdHlwZSwgU3Ry
dWN0dXJlKiBiYXNlKTsKIAogICAgIHZvaWQgY2xlYXIoKSB7IG1fc3RydWN0dXJlLmNsZWFyKCk7
IH0KLSAgICB2b2lkIHZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKSB7IHZpc2l0
b3IuYXBwZW5kKG1fc3RydWN0dXJlKTsgfQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+
IHZvaWQgdmlzaXRBZ2dyZWdhdGUoVmlzaXRvciYgdmlzaXRvcikgeyB2aXNpdG9yLmFwcGVuZCht
X3N0cnVjdHVyZSk7IH0KIAogcHJpdmF0ZToKICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBt
X3N0cnVjdHVyZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PYmplY3RB
bGxvY2F0aW9uUHJvZmlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9PYmplY3RBbGxvY2F0aW9uUHJvZmlsZS5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTY0LDcgKzY0LDggQEAgcHJvdGVjdGVkOgogICAgICAgICBBU1NF
UlQoaXNOdWxsKCkpOwogICAgIH0KIAotICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0
b3ImIHZpc2l0b3IpCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KKyAgICB2b2lkIHZp
c2l0QWdncmVnYXRlKFZpc2l0b3ImIHZpc2l0b3IpCiAgICAgewogICAgICAgICB2aXNpdG9yLmFw
cGVuZChtX3N0cnVjdHVyZSk7CiAgICAgfQpAQCAtMTEwLDcgKzExMSw4IEBAIHB1YmxpYzoKICAg
ICAgICAgQVNTRVJUKGlzTnVsbCgpKTsKICAgICB9CiAKLSAgICB2b2lkIHZpc2l0QWdncmVnYXRl
KFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cisg
ICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShWaXNpdG9yJiB2aXNpdG9yKQogICAgIHsKICAgICAgICAg
QmFzZTo6dmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7CiAgICAgICAgIHZpc2l0b3IuYXBwZW5kKG1f
cHJvdG90eXBlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9y
cGhpY0FjY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAyMCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAyMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTM1OCw3ICszNTgsNyBAQCBib29sIFBvbHltb3JwaGljQWNjZXNzOjp2aXNpdFdlYWso
Vk0mIHZtCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgUG9seW1vcnBoaWNBY2Nlc3M6OnBy
b3BhZ2F0ZVRyYW5zaXRpb25zKFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBjb25zdAorYm9vbCBQb2x5
bW9ycGhpY0FjY2Vzczo6cHJvcGFnYXRlVHJhbnNpdGlvbnMoQWJzdHJhY3RTbG90VmlzaXRvciYg
dmlzaXRvcikgY29uc3QKIHsKICAgICBib29sIHJlc3VsdCA9IHRydWU7CiAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IHNpemUoKTsgKytpKQpAQCAtMzY2LDcgKzM2Niw3IEBAIGJvb2wgUG9s
eW1vcnBoaWNBY2Nlc3M6OnByb3BhZ2F0ZVRyYW5zaXQKICAgICByZXR1cm4gcmVzdWx0OwogfQog
Ci12b2lkIFBvbHltb3JwaGljQWNjZXNzOjp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYgdmlz
aXRvcikKK3ZvaWQgUG9seW1vcnBoaWNBY2Nlc3M6OnZpc2l0QWdncmVnYXRlKEFic3RyYWN0U2xv
dFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemUo
KTsgKytpKQogICAgICAgICBhdChpKS52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5o
CShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9s
eW1vcnBoaWNBY2Nlc3MuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTQtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE1MiwxNCArMTUyLDE0IEBAIHB1
YmxpYzoKICAgICBjb25zdCBBY2Nlc3NDYXNlJiBhdCh1bnNpZ25lZCBpKSBjb25zdCB7IHJldHVy
biAqbV9saXN0W2ldOyB9CiAgICAgY29uc3QgQWNjZXNzQ2FzZSYgb3BlcmF0b3JbXSh1bnNpZ25l
ZCBpKSBjb25zdCB7IHJldHVybiAqbV9saXN0W2ldOyB9CiAKLSAgICB2b2lkIHZpc2l0QWdncmVn
YXRlKFNsb3RWaXNpdG9yJik7CisgICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShBYnN0cmFjdFNsb3RW
aXNpdG9yJik7CiAKICAgICAvLyBJZiB0aGlzIHJldHVybnMgZmFsc2UgdGhlbiB3ZSBhcmUgcmVx
dWVzdGluZyBhIHJlc2V0IG9mIHRoZSBvd25pbmcgU3RydWN0dXJlU3R1YkluZm8uCiAgICAgYm9v
bCB2aXNpdFdlYWsoVk0mKSBjb25zdDsKICAgICAKICAgICAvLyBUaGlzIHJldHVybnMgdHJ1ZSBp
ZiBpdCBoYXMgbWFya2VkIGV2ZXJ5dGhpbmcgaXQgd2lsbCBldmVyIG1hcmtlZC4gVGhpcyBjYW4g
YmUgdXNlZCBhcyBhbgogICAgIC8vIG9wdGltaXphdGlvbiB0byB0aGVuIGF2b2lkIGNhbGxpbmcg
dGhpcyBtZXRob2QgYWdhaW4gZHVyaW5nIHRoZSBmaXhwb2ludC4KLSAgICBib29sIHByb3BhZ2F0
ZVRyYW5zaXRpb25zKFNsb3RWaXNpdG9yJikgY29uc3Q7CisgICAgYm9vbCBwcm9wYWdhdGVUcmFu
c2l0aW9ucyhBYnN0cmFjdFNsb3RWaXNpdG9yJikgY29uc3Q7CiAKICAgICB2b2lkIGFib3V0VG9E
aWUoKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0
dXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRC
eUlkU3RhdHVzLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzk2LDcgKzM5
Niw3IEBAIFB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6c2xvd1ZlcnNpb24KICAgICByZXR1
cm4gUHV0QnlJZFN0YXR1cyhtYWtlc0NhbGxzKCkgPyBNYWtlc0NhbGxzIDogVGFrZXNTbG93UGF0
aCk7CiB9CiAKLXZvaWQgUHV0QnlJZFN0YXR1czo6bWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImIHZp
c2l0b3IpCit2b2lkIFB1dEJ5SWRTdGF0dXM6Om1hcmtJZkNoZWFwKEFic3RyYWN0U2xvdFZpc2l0
b3ImIHZpc2l0b3IpCiB7CiAgICAgZm9yIChQdXRCeUlkVmFyaWFudCYgdmFyaWFudCA6IG1fdmFy
aWFudHMpCiAgICAgICAgIHZhcmlhbnQubWFya0lmQ2hlYXAodmlzaXRvcik7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmgJKHJldmlzaW9u
IDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVz
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDEyLTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEyLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0xMTcsNyArMTE3LDcgQEAgcHVibGljOgogICAgIGNvbnN0
IFB1dEJ5SWRWYXJpYW50JiBhdChzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fdmFyaWFu
dHNbaW5kZXhdOyB9CiAgICAgY29uc3QgUHV0QnlJZFZhcmlhbnQmIG9wZXJhdG9yW10oc2l6ZV90
IGluZGV4KSBjb25zdCB7IHJldHVybiBhdChpbmRleCk7IH0KICAgICAKLSAgICB2b2lkIG1hcmtJ
ZkNoZWFwKFNsb3RWaXNpdG9yJik7CisgICAgdm9pZCBtYXJrSWZDaGVhcChBYnN0cmFjdFNsb3RW
aXNpdG9yJik7CiAgICAgYm9vbCBmaW5hbGl6ZShWTSYpOwogICAgIAogICAgIHZvaWQgbWVyZ2Uo
Y29uc3QgUHV0QnlJZFN0YXR1cyYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1B1dEJ5SWRWYXJpYW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNC0yMDE4IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMjYyLDcgKzI2Miw3IEBAIGJvb2wgUHV0QnlJZFZhcmlhbnQ6OmF0dGVtcHRUb01l
cmdlVHJhbnMKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBQdXRCeUlkVmFyaWFudDo6bWFy
a0lmQ2hlYXAoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIFB1dEJ5SWRWYXJpYW50OjptYXJr
SWZDaGVhcChBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIG1fb2xkU3RydWN0
dXJlLm1hcmtJZkNoZWFwKHZpc2l0b3IpOwogICAgIGlmIChtX25ld1N0cnVjdHVyZSkKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkVmFyaWFudC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkVmFyaWFudC5oCShy
ZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJ
ZFZhcmlhbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTQtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTQtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEzMiw3ICsxMzIsNyBAQCBwdWJsaWM6CiAK
ICAgICBib29sIGF0dGVtcHRUb01lcmdlKGNvbnN0IFB1dEJ5SWRWYXJpYW50JiBvdGhlcik7CiAg
ICAgCi0gICAgdm9pZCBtYXJrSWZDaGVhcChTbG90VmlzaXRvciYpOworICAgIHZvaWQgbWFya0lm
Q2hlYXAoQWJzdHJhY3RTbG90VmlzaXRvciYpOwogICAgIGJvb2wgZmluYWxpemUoVk0mKTsKICAg
ICAKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9SZWNvcmRlZFN0YXR1c2VzLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUmVjb3JkZWRTdGF0dXNlcy5jcHAJKHJldmlz
aW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9SZWNvcmRlZFN0
YXR1c2VzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAyLDcgKzEwMiw3IEBAIFNldFByaXZhdGVC
cmFuZFN0YXR1cyogUmVjb3JkZWRTdGF0dXNlczoKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi12
b2lkIFJlY29yZGVkU3RhdHVzZXM6OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9y
KQordm9pZCBSZWNvcmRlZFN0YXR1c2VzOjp2aXNpdEFnZ3JlZ2F0ZShBYnN0cmFjdFNsb3RWaXNp
dG9yJiB2aXNpdG9yKQogewogICAgIGZvciAoYXV0byYgcGFpciA6IGdldHMpCiAgICAgICAgIHBh
aXIuc2Vjb25kLT52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKQEAgLTExNCw3ICsxMTQsNyBAQCB2
b2lkIFJlY29yZGVkU3RhdHVzZXM6OnZpc2l0QWdncmVnYXRlKFNsCiAgICAgICAgIHBhaXIuc2Vj
b25kLT52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKIH0KIAotdm9pZCBSZWNvcmRlZFN0YXR1c2Vz
OjptYXJrSWZDaGVhcChTbG90VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgUmVjb3JkZWRTdGF0dXNl
czo6bWFya0lmQ2hlYXAoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBmb3Ig
KGF1dG8mIHBhaXIgOiBnZXRzKQogICAgICAgICBwYWlyLnNlY29uZC0+bWFya0lmQ2hlYXAodmlz
aXRvcik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUmVjb3JkZWRTdGF0
dXNlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9SZWNv
cmRlZFN0YXR1c2VzLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9SZWNvcmRlZFN0YXR1c2VzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01NCw4ICs1
NCw4IEBAIHN0cnVjdCBSZWNvcmRlZFN0YXR1c2VzIHsKICAgICBDaGVja1ByaXZhdGVCcmFuZFN0
YXR1cyogYWRkQ2hlY2tQcml2YXRlQnJhbmRTdGF0dXMoY29uc3QgQ29kZU9yaWdpbiYsIGNvbnN0
IENoZWNrUHJpdmF0ZUJyYW5kU3RhdHVzJik7CiAgICAgU2V0UHJpdmF0ZUJyYW5kU3RhdHVzKiBh
ZGRTZXRQcml2YXRlQnJhbmRTdGF0dXMoY29uc3QgQ29kZU9yaWdpbiYsIGNvbnN0IFNldFByaXZh
dGVCcmFuZFN0YXR1cyYpOwogICAgIAotICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0
b3ImKTsKLSAgICB2b2lkIG1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJik7CisgICAgdm9pZCB2aXNp
dEFnZ3JlZ2F0ZShBYnN0cmFjdFNsb3RWaXNpdG9yJik7CisgICAgdm9pZCBtYXJrSWZDaGVhcChB
YnN0cmFjdFNsb3RWaXNpdG9yJik7CiAgICAgCiAgICAgdm9pZCBmaW5hbGl6ZVdpdGhvdXREZWxl
dGluZyhWTSYpOwogICAgIHZvaWQgZmluYWxpemUoVk0mKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9TZXRQcml2YXRlQnJhbmRTdGF0dXMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TZXRQcml2YXRlQnJhbmRTdGF0dXMuY3Bw
CShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU2V0
UHJpdmF0ZUJyYW5kU3RhdHVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjM1LDEzICsyMzUsMTMg
QEAgQ2FjaGVhYmxlSWRlbnRpZmllciBTZXRQcml2YXRlQnJhbmRTdGF0dQogICAgIHJldHVybiBy
ZXN1bHQ7CiB9CiAKLXZvaWQgU2V0UHJpdmF0ZUJyYW5kU3RhdHVzOjp2aXNpdEFnZ3JlZ2F0ZShT
bG90VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgU2V0UHJpdmF0ZUJyYW5kU3RhdHVzOjp2aXNpdEFn
Z3JlZ2F0ZShBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGZvciAoU2V0UHJp
dmF0ZUJyYW5kVmFyaWFudCYgdmFyaWFudCA6IG1fdmFyaWFudHMpCiAgICAgICAgIHZhcmlhbnQu
dmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7CiB9CiAKLXZvaWQgU2V0UHJpdmF0ZUJyYW5kU3RhdHVz
OjptYXJrSWZDaGVhcChTbG90VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgU2V0UHJpdmF0ZUJyYW5k
U3RhdHVzOjptYXJrSWZDaGVhcChBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAg
IGZvciAoU2V0UHJpdmF0ZUJyYW5kVmFyaWFudCYgdmFyaWFudCA6IG1fdmFyaWFudHMpCiAgICAg
ICAgIHZhcmlhbnQubWFya0lmQ2hlYXAodmlzaXRvcik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvU2V0UHJpdmF0ZUJyYW5kU3RhdHVzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NldFByaXZhdGVCcmFuZFN0YXR1cy5oCShyZXZp
c2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU2V0UHJpdmF0
ZUJyYW5kU3RhdHVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTgzLDggKzgzLDggQEAgcHVibGljOgog
ICAgIC8vIEF0dGVtcHRzIHRvIHJlZHVjZSB0aGUgc2V0IG9mIHZhcmlhbnRzIHRvIGZpdCB0aGUg
Z2l2ZW4gc3RydWN0dXJlIHNldC4gVGhpcyBtYXkgYmUgYXBwcm94aW1hdGUuCiAgICAgdm9pZCBm
aWx0ZXIoY29uc3QgU3RydWN0dXJlU2V0Jik7CiAKLSAgICB2b2lkIHZpc2l0QWdncmVnYXRlKFNs
b3RWaXNpdG9yJik7Ci0gICAgdm9pZCBtYXJrSWZDaGVhcChTbG90VmlzaXRvciYpOworICAgIHZv
aWQgdmlzaXRBZ2dyZWdhdGUoQWJzdHJhY3RTbG90VmlzaXRvciYpOworICAgIHZvaWQgbWFya0lm
Q2hlYXAoQWJzdHJhY3RTbG90VmlzaXRvciYpOwogICAgIGJvb2wgZmluYWxpemUoVk0mKTsKIAog
ICAgIGJvb2wgYXBwZW5kVmFyaWFudChjb25zdCBTZXRQcml2YXRlQnJhbmRWYXJpYW50Jik7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU2V0UHJpdmF0ZUJyYW5kVmFyaWFu
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NldFBy
aXZhdGVCcmFuZFZhcmlhbnQuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvU2V0UHJpdmF0ZUJyYW5kVmFyaWFudC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTU0LDcgKzU0LDcgQEAgYm9vbCBTZXRQcml2YXRlQnJhbmRWYXJpYW50OjphdHRlbXB0
VG9NZQogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIFNldFByaXZhdGVCcmFuZFZhcmlhbnQ6
Om1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBTZXRQcml2YXRlQnJhbmRW
YXJpYW50OjptYXJrSWZDaGVhcChBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAg
IGlmIChtX29sZFN0cnVjdHVyZSkKICAgICAgICAgbV9vbGRTdHJ1Y3R1cmUtPm1hcmtJZkNoZWFw
KHZpc2l0b3IpOwpAQCAtNzEsNyArNzEsNyBAQCBib29sIFNldFByaXZhdGVCcmFuZFZhcmlhbnQ6
OmZpbmFsaXplKFZNCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgU2V0UHJpdmF0ZUJyYW5k
VmFyaWFudDo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIFNldFBy
aXZhdGVCcmFuZFZhcmlhbnQ6OnZpc2l0QWdncmVnYXRlKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZp
c2l0b3IpCiB7CiAgICAgbV9pZGVudGlmaWVyLnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOwogfQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NldFByaXZhdGVCcmFuZFZhcmlh
bnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU2V0UHJp
dmF0ZUJyYW5kVmFyaWFudC5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvU2V0UHJpdmF0ZUJyYW5kVmFyaWFudC5oCSh3b3JraW5nIGNvcHkpCkBA
IC00NSw4ICs0NSw4IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgYXR0ZW1wdFRvTWVyZ2UoY29uc3Qg
U2V0UHJpdmF0ZUJyYW5kVmFyaWFudCYgb3RoZXIpOwogCi0gICAgdm9pZCB2aXNpdEFnZ3JlZ2F0
ZShTbG90VmlzaXRvciYpOwotICAgIHZvaWQgbWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImKTsKKyAg
ICB2b2lkIHZpc2l0QWdncmVnYXRlKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKKyAgICB2b2lkIG1h
cmtJZkNoZWFwKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKICAgICBib29sIGZpbmFsaXplKFZNJik7
CiAKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTZXQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTZXQuY3BwCShyZXZpc2lvbiAyNzI4
MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU2V0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQt
MjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTQtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTMxLDcgKzMxLDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLXZv
aWQgU3RydWN0dXJlU2V0OjptYXJrSWZDaGVhcChTbG90VmlzaXRvciYgdmlzaXRvcikgY29uc3QK
K3ZvaWQgU3RydWN0dXJlU2V0OjptYXJrSWZDaGVhcChBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNp
dG9yKSBjb25zdAogewogICAgIGZvciAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUgOiAqdGhpcykKICAg
ICAgICAgc3RydWN0dXJlLT5tYXJrSWZDaGVhcCh2aXNpdG9yKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTZXQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU2V0LmgJKHJldmlzaW9uIDI3MjgzMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTZXQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxOCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTU0LDcgKzU0LDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gb25seUVu
dHJ5KCk7CiAgICAgfQogCi0gICAgdm9pZCBtYXJrSWZDaGVhcChTbG90VmlzaXRvciYpIGNvbnN0
OworICAgIHZvaWQgbWFya0lmQ2hlYXAoQWJzdHJhY3RTbG90VmlzaXRvciYpIGNvbnN0OwogICAg
IGJvb2wgaXNTdGlsbEFsaXZlKFZNJikgY29uc3Q7CiAgICAgCiAgICAgdm9pZCBkdW1wSW5Db250
ZXh0KFByaW50U3RyZWFtJiwgRHVtcENvbnRleHQqKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcAkocmV2
aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVy
ZVN0dWJJbmZvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDgtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDgtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI5Niw3ICsyOTYsNyBAQCB2b2lkIFN0
cnVjdHVyZVN0dWJJbmZvOjpyZXNldChjb25zdCBDb25jCiAgICAgc2V0Q2FjaGVUeXBlKGxvY2tl
ciwgQ2FjaGVUeXBlOjpVbnNldCk7CiB9CiAKLXZvaWQgU3RydWN0dXJlU3R1YkluZm86OnZpc2l0
QWdncmVnYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6
dmlzaXRBZ2dyZWdhdGUoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB7CiAg
ICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9idWZmZXJlZFN0cnVjdHVyZXNMb2NrKTsK
QEAgLTM1Miw3ICszNTIsNyBAQCB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjp2aXNpdFdlYWtSZWZl
cmVuCiAgICAgcmVzZXRCeUdDID0gdHJ1ZTsKIH0KIAotYm9vbCBTdHJ1Y3R1cmVTdHViSW5mbzo6
cHJvcGFnYXRlVHJhbnNpdGlvbnMoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCitib29sIFN0cnVjdHVy
ZVN0dWJJbmZvOjpwcm9wYWdhdGVUcmFuc2l0aW9ucyhBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNp
dG9yKQogewogICAgIHN3aXRjaCAobV9jYWNoZVR5cGUpIHsKICAgICBjYXNlIENhY2hlVHlwZTo6
VW5zZXQ6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1
YkluZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3Ry
dWN0dXJlU3R1YkluZm8uaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC05Mywx
NCArOTMsMTQgQEAgcHVibGljOgogICAgIHZvaWQgZGVyZWYoKTsKICAgICB2b2lkIGFib3V0VG9E
aWUoKTsKIAotICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImKTsKKyAgICB2b2lk
IHZpc2l0QWdncmVnYXRlKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKIAogICAgIC8vIENoZWNrIGlm
IHRoZSBzdHViIGhhcyB3ZWFrIHJlZmVyZW5jZXMgdGhhdCBhcmUgZGVhZC4gSWYgaXQgZG9lcywg
dGhlbiBpdCByZXNldHMgaXRzZWxmLAogICAgIC8vIGVpdGhlciBlbnRpcmVseSBvciBqdXN0IGVu
b3VnaCB0byBlbnN1cmUgdGhhdCB0aG9zZSBkZWFkIHBvaW50ZXJzIGRvbid0IGdldCB1c2VkIGFu
eW1vcmUuCiAgICAgdm9pZCB2aXNpdFdlYWtSZWZlcmVuY2VzKGNvbnN0IENvbmN1cnJlbnRKU0xv
Y2tlckJhc2UmLCBDb2RlQmxvY2sqKTsKICAgICAKICAgICAvLyBUaGlzIHJldHVybnMgdHJ1ZSBp
ZiBpdCBoYXMgbWFya2VkIGV2ZXJ5dGhpbmcgdGhhdCBpdCB3aWxsIGV2ZXIgbWFyay4KLSAgICBi
b29sIHByb3BhZ2F0ZVRyYW5zaXRpb25zKFNsb3RWaXNpdG9yJik7CisgICAgYm9vbCBwcm9wYWdh
dGVUcmFuc2l0aW9ucyhBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAgICAgICAgIAogICAgIFN0dWJJ
bmZvU3VtbWFyeSBzdW1tYXJ5KFZNJikgY29uc3Q7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAJKHJldmlz
aW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENv
ZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDEyLTIwMTkgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDEyLTIwMjEgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03NSw3ICs3NSw4IEBAIFVubGlua2VkQ29k
ZUJsb2NrOjpVbmxpbmtlZENvZGVCbG9jayhWTSYKICAgICB9CiB9CiAKLXZvaWQgVW5saW5rZWRD
b2RlQmxvY2s6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRv
cikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFVubGlua2VkQ29kZUJsb2NrOjp2
aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAg
VW5saW5rZWRDb2RlQmxvY2sqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8VW5saW5rZWRDb2RlQmxvY2sq
PihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8o
KSk7CkBAIC05NCw2ICs5NSw4IEBAIHZvaWQgVW5saW5rZWRDb2RlQmxvY2s6OnZpc2l0Q2hpbGRy
ZW4oSlMKICAgICB2aXNpdG9yLnJlcG9ydEV4dHJhTWVtb3J5VmlzaXRlZChleHRyYU1lbW9yeSk7
CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihVbmxpbmtlZENvZGVCbG9jayk7CisKIHNpemVf
dCBVbmxpbmtlZENvZGVCbG9jazo6ZXN0aW1hdGVkU2l6ZShKU0NlbGwqIGNlbGwsIFZNJiB2bSkK
IHsKICAgICBVbmxpbmtlZENvZGVCbG9jayogdGhpc09iamVjdCA9IGpzQ2FzdDxVbmxpbmtlZENv
ZGVCbG9jayo+KGNlbGwpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Vu
bGlua2VkQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE5IEFwcGxlIElu
Yy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDIxIEFwcGxl
IEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtNDMxLDcgKzQzMSw3IEBAIHByaXZhdGU6CiAgICAgUmVmQ291bnRlZEFycmF5PEV4cHJl
c3Npb25SYW5nZUluZm8+IG1fZXhwcmVzc2lvbkluZm87CiAKIHByb3RlY3RlZDoKLSAgICBzdGF0
aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFS
RV9WSVNJVF9DSElMRFJFTjsKICAgICBzdGF0aWMgc2l6ZV90IGVzdGltYXRlZFNpemUoSlNDZWxs
KiwgVk0mKTsKIAogcHVibGljOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1VubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUuY3BwCShyZXZp
c2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRG
dW5jdGlvbkV4ZWN1dGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE5IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDIxIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTQ2LDcgKzE0Niw4IEBA
IHZvaWQgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU6OmRlc3Ryb3kKICAgICBzdGF0aWNfY2Fz
dDxVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGNlbGwpLT5+VW5saW5rZWRGdW5jdGlvbkV4
ZWN1dGFibGUoKTsKIH0KIAotdm9pZCBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6dmlzaXRD
aGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlw
ZW5hbWUgVmlzaXRvcj4KK3ZvaWQgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU6OnZpc2l0Q2hp
bGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBVbmxpbmtl
ZEZ1bmN0aW9uRXhlY3V0YWJsZSogdGhpc09iamVjdCA9IGpzQ2FzdDxVbmxpbmtlZEZ1bmN0aW9u
RXhlY3V0YWJsZSo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09i
amVjdCwgaW5mbygpKTsKQEAgLTE2OSw2ICsxNzAsOCBAQCB2b2lkIFVubGlua2VkRnVuY3Rpb25F
eGVjdXRhYmxlOjp2aXNpdENoCiAgICAgfQogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oVW5s
aW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUpOworCiBTb3VyY2VDb2RlIFVubGlua2VkRnVuY3Rpb25F
eGVjdXRhYmxlOjpsaW5rZWRTb3VyY2VDb2RlKGNvbnN0IFNvdXJjZUNvZGUmIHBhc3NlZFBhcmVu
dFNvdXJjZSkgY29uc3QKIHsKICAgICBjb25zdCBTb3VyY2VDb2RlJiBwYXJlbnRTb3VyY2UgPSAh
bV9pc0J1aWx0aW5EZWZhdWx0Q2xhc3NDb25zdHJ1Y3RvciA/IHBhc3NlZFBhcmVudFNvdXJjZSA6
IEJ1aWx0aW5FeGVjdXRhYmxlczo6ZGVmYXVsdENvbnN0cnVjdG9yU291cmNlQ29kZShjb25zdHJ1
Y3RvcktpbmQoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5r
ZWRGdW5jdGlvbkV4ZWN1dGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUuaAkocmV2aXNpb24gMjcyODMw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkRnVuY3Rpb25FeGVj
dXRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDEyLTIwMTkgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEyLTIwMjEgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNDIsNyArMjQyLDcgQEAgcHJpdmF0ZToKICAg
ICBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZShWTSYsIFN0cnVjdHVyZSosIGNvbnN0IFNvdXJj
ZUNvZGUmLCBGdW5jdGlvbk1ldGFkYXRhTm9kZSosIFVubGlua2VkRnVuY3Rpb25LaW5kLCBDb25z
dHJ1Y3RBYmlsaXR5LCBKU1BhcnNlclNjcmlwdE1vZGUsIFJlZlB0cjxURFpFbnZpcm9ubWVudExp
bms+LCBPcHRpb25hbDxQcml2YXRlTmFtZUVudmlyb25tZW50PiwgSlNDOjpEZXJpdmVkQ29udGV4
dFR5cGUsIEpTQzo6TmVlZHNDbGFzc0ZpZWxkSW5pdGlhbGl6ZXIsIFByaXZhdGVCcmFuZFJlcXVp
cmVtZW50LCBib29sIGlzQnVpbHRpbkRlZmF1bHRDbGFzc0NvbnN0cnVjdG9yKTsKICAgICBVbmxp
bmtlZEZ1bmN0aW9uRXhlY3V0YWJsZShEZWNvZGVyJiwgY29uc3QgQ2FjaGVkRnVuY3Rpb25FeGVj
dXRhYmxlJik7CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RW
aXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIHZvaWQgZGVjb2Rl
Q2FjaGVkQ29kZUJsb2NrcyhWTSYpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVi
dWdnZXIvRGVidWdnZXJTY29wZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RlYnVnZ2VyL0RlYnVnZ2VyU2NvcGUuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXJTY29wZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTkgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC01NSw3ICs1NSw4IEBAIHZvaWQgRGVidWdnZXJTY29wZTo6ZmluaXNoQ3JlYXRpb24o
Vk0mIHYKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CiB9CiAKLXZvaWQgRGVidWdnZXJT
Y29wZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQor
dGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgRGVidWdnZXJTY29wZTo6dmlzaXRDaGls
ZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIERlYnVnZ2Vy
U2NvcGUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8RGVidWdnZXJTY29wZSo+KGNlbGwpOwogICAgIEFT
U0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTY1LDYgKzY2
LDggQEAgdm9pZCBEZWJ1Z2dlclNjb3BlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbAogICAgIHZpc2l0
b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fbmV4dCk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJF
TihEZWJ1Z2dlclNjb3BlKTsKKwogU3RyaW5nIERlYnVnZ2VyU2NvcGU6OmNsYXNzTmFtZShjb25z
dCBKU09iamVjdCogb2JqZWN0LCBWTSYgdm0pCiB7CiAgICAgY29uc3QgRGVidWdnZXJTY29wZSog
c2NvcGUgPSBqc0Nhc3Q8Y29uc3QgRGVidWdnZXJTY29wZSo+KG9iamVjdCk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXJTY29wZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlclNjb3BlLmgJKHJldmlzaW9u
IDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlclNjb3Bl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDA4LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDA4LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC00Niw3ICs0Niw3IEBAIHB1YmxpYzoKIAogICAgIEpTX0VY
UE9SVF9QUklWQVRFIHN0YXRpYyBEZWJ1Z2dlclNjb3BlKiBjcmVhdGUoVk0mIHZtLCBKU1Njb3Bl
KiBzY29wZSk7CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RW
aXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKICAgICBzdGF0aWMgU3RyaW5n
IGNsYXNzTmFtZShjb25zdCBKU09iamVjdCosIFZNJik7CiAgICAgc3RhdGljIFN0cmluZyB0b1N0
cmluZ05hbWUoY29uc3QgSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCopOwogICAgIHN0YXRpYyBi
b29sIGdldE93blByb3BlcnR5U2xvdChKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVy
dHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHRGVzaXJlZFRyYW5zaXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Rlc2lyZWRUcmFuc2l0aW9ucy5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFRyYW5zaXRpb25zLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTUyLDcgKzUyLDcgQEAgdm9pZCBEZXNpcmVkVHJhbnNpdGlvbjo6cmVh
bGx5QWRkKFZNJiB2bQogICAgICAgICAgICAgbV9vbGRTdHJ1Y3R1cmUsIG1fbmV3U3RydWN0dXJl
KSk7CiB9CiAKLXZvaWQgRGVzaXJlZFRyYW5zaXRpb246OnZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0
b3ImIHZpc2l0b3IpCit2b2lkIERlc2lyZWRUcmFuc2l0aW9uOjp2aXNpdENoaWxkcmVuKEFic3Ry
YWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJl
ZChtX2NvZGVPcmlnaW5Pd25lcik7CiAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZChtX29s
ZFN0cnVjdHVyZSk7CkBAIC03OCw3ICs3OCw3IEBAIHZvaWQgRGVzaXJlZFRyYW5zaXRpb25zOjpy
ZWFsbHlBZGQoVk0mIHYKICAgICAgICAgbV90cmFuc2l0aW9uc1tpXS5yZWFsbHlBZGQodm0sIGNv
bW1vbik7CiB9CiAKLXZvaWQgRGVzaXJlZFRyYW5zaXRpb25zOjp2aXNpdENoaWxkcmVuKFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQordm9pZCBEZXNpcmVkVHJhbnNpdGlvbnM6OnZpc2l0Q2hpbGRyZW4o
QWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbV90cmFuc2l0aW9ucy5zaXplKCk7IGkrKykKICAgICAgICAgbV90cmFuc2l0aW9uc1tp
XS52aXNpdENoaWxkcmVuKHZpc2l0b3IpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdEZXNpcmVkVHJhbnNpdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Rlc2lyZWRUcmFuc2l0aW9ucy5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRUcmFuc2l0aW9ucy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTQ2LDggKzQ2LDcgQEAgcHVibGljOgogICAgIERlc2lyZWRUcmFuc2l0aW9u
KENvZGVCbG9jayosIENvZGVCbG9jayogY29kZU9yaWdpbk93bmVyLCBTdHJ1Y3R1cmUqLCBTdHJ1
Y3R1cmUqKTsKIAogICAgIHZvaWQgcmVhbGx5QWRkKFZNJiwgQ29tbW9uRGF0YSopOwotICAgIAot
ICAgIHZvaWQgdmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYpOworICAgIHZvaWQgdmlzaXRDaGls
ZHJlbihBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAKIHByaXZhdGU6CiAgICAgQ29kZUJsb2NrKiBt
X2NvZGVCbG9jazsKQEAgLTYzLDcgKzYyLDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBhZGRMYXpp
bHkoQ29kZUJsb2NrKiwgQ29kZUJsb2NrKiBjb2RlT3JpZ2luT3duZXIsIFN0cnVjdHVyZSosIFN0
cnVjdHVyZSopOwogICAgIHZvaWQgcmVhbGx5QWRkKFZNJiwgQ29tbW9uRGF0YSopOwotICAgIHZv
aWQgdmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYpOworICAgIHZvaWQgdmlzaXRDaGlsZHJlbihB
YnN0cmFjdFNsb3RWaXNpdG9yJik7CiAKIHByaXZhdGU6CiAgICAgVmVjdG9yPERlc2lyZWRUcmFu
c2l0aW9uPiBtX3RyYW5zaXRpb25zOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdEZXNpcmVkV2Vha1JlZmVyZW5jZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHRGVzaXJlZFdlYWtSZWZlcmVuY2VzLmNwcAkocmV2aXNpb24gMjcyODMw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2Vha1JlZmVyZW5jZXMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODcsNyArODcsNyBAQCB2b2lkIERlc2lyZWRXZWFrUmVm
ZXJlbmNlczo6cmVhbGx5QWRkKFZNCiAgICAgfQogfQogCi12b2lkIERlc2lyZWRXZWFrUmVmZXJl
bmNlczo6dmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgRGVzaXJlZFdl
YWtSZWZlcmVuY2VzOjp2aXNpdENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3Ip
CiB7CiAgICAgZm9yIChKU0NlbGwqIHRhcmdldCA6IG1fcmVmZXJlbmNlcykKICAgICAgICAgdmlz
aXRvci5hcHBlbmRVbmJhcnJpZXJlZCh0YXJnZXQpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdEZXNpcmVkV2Vha1JlZmVyZW5jZXMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXZWFrUmVmZXJlbmNlcy5oCShyZXZpc2lvbiAy
NzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXZWFrUmVmZXJl
bmNlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzEsMTAgKzMxLDEwIEBACiAKIG5hbWVzcGFjZSBK
U0MgeyAKIAorY2xhc3MgQWJzdHJhY3RTbG90VmlzaXRvcjsKIGNsYXNzIENvZGVCbG9jazsKIGNs
YXNzIEpTQ2VsbDsKIGNsYXNzIEpTVmFsdWU7Ci1jbGFzcyBTbG90VmlzaXRvcjsKIGNsYXNzIFZN
OwogCiBuYW1lc3BhY2UgREZHIHsKQEAgLTUyLDggKzUyLDggQEAgcHVibGljOgogICAgIGJvb2wg
Y29udGFpbnMoSlNDZWxsKik7CiAgICAgCiAgICAgdm9pZCByZWFsbHlBZGQoVk0mLCBDb21tb25E
YXRhKik7Ci0gICAgCi0gICAgdm9pZCB2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CisKKyAg
ICB2b2lkIHZpc2l0Q2hpbGRyZW4oQWJzdHJhY3RTbG90VmlzaXRvciYpOwogCiBwcml2YXRlOgog
ICAgIENvZGVCbG9jayogbV9jb2RlQmxvY2s7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0dyYXBoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0dyYXBoLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdHcmFwaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0NDgsNyArMTQ0OCw3IEBAIHZv
aWQgR3JhcGg6OnJlZ2lzdGVyRnJvemVuVmFsdWVzKCkKICAgICBtX2NvZGVCbG9jay0+Y29uc3Rh
bnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uKCkuc2hyaW5rVG9GaXQoKTsKIH0KIAotdm9pZCBH
cmFwaDo6dmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgR3JhcGg6OnZp
c2l0Q2hpbGRyZW4oQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBmb3IgKEZy
b3plblZhbHVlKiB2YWx1ZSA6IG1fZnJvemVuVmFsdWVzKSB7CiAgICAgICAgIHZpc2l0b3IuYXBw
ZW5kVW5iYXJyaWVyZWQodmFsdWUtPnZhbHVlKCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdHcmFwaC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHR3JhcGguaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdHcmFwaC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMS0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTAwMCw5ICsxMDAwLDkgQEAgcHVi
bGljOgogICAgIGJvb2wgY2FuRG9GYXN0U3ByZWFkKE5vZGUqLCBjb25zdCBBYnN0cmFjdFZhbHVl
Jik7CiAgICAgCiAgICAgdm9pZCByZWdpc3RlckZyb3plblZhbHVlcygpOwotICAgIAotICAgIHZv
aWQgdmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYpIGZpbmFsOwotICAgIAorCisgICAgdm9pZCB2
aXNpdENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImKSBmaW5hbDsKKwogICAgIHZvaWQgbG9n
QXNzZXJ0aW9uRmFpbHVyZSgKICAgICAgICAgc3RkOjpudWxscHRyX3QsIGNvbnN0IGNoYXIqIGZp
bGUsIGludCBsaW5lLCBjb25zdCBjaGFyKiBmdW5jdGlvbiwKICAgICAgICAgY29uc3QgY2hhciog
YXNzZXJ0aW9uKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAkocmV2
aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTY3Miw5ICs2NzIsOSBAQCBDb21waWxhdGlvbktleSBQbGFuOjpr
ZXkoKQogICAgIHJldHVybiBDb21waWxhdGlvbktleShtX2NvZGVCbG9jay0+YWx0ZXJuYXRpdmUo
KSwgbV9tb2RlKTsKIH0KIAotdm9pZCBQbGFuOjpjaGVja0xpdmVuZXNzQW5kVmlzaXRDaGlsZHJl
bihTbG90VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgUGxhbjo6Y2hlY2tMaXZlbmVzc0FuZFZpc2l0
Q2hpbGRyZW4oQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKLSAgICBpZiAoIWlzS25v
d25Ub0JlTGl2ZUR1cmluZ0dDKCkpCisgICAgaWYgKCFpc0tub3duVG9CZUxpdmVEdXJpbmdHQyh2
aXNpdG9yKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgY2xlYW5NdXN0SGFuZGxlVmFsdWVzSWZO
ZWNlc3NhcnkoKTsKQEAgLTcwOCw3ICs3MDgsMjAgQEAgdm9pZCBQbGFuOjpmaW5hbGl6ZUluR0Mo
KQogICAgIG1fcmVjb3JkZWRTdGF0dXNlcy5maW5hbGl6ZVdpdGhvdXREZWxldGluZygqbV92bSk7
CiB9CiAKLWJvb2wgUGxhbjo6aXNLbm93blRvQmVMaXZlRHVyaW5nR0MoKQorYm9vbCBQbGFuOjpp
c0tub3duVG9CZUxpdmVEdXJpbmdHQyhBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorewor
ICAgIGlmIChtX3N0YWdlID09IENhbmNlbGxlZCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IGlmICghdmlzaXRvci5pc01hcmtlZChtX2NvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCkpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCF2aXNpdG9yLmlzTWFya2VkKG1fY29kZUJs
b2NrLT5hbHRlcm5hdGl2ZSgpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghIW1f
cHJvZmlsZWRERkdDb2RlQmxvY2sgJiYgIXZpc2l0b3IuaXNNYXJrZWQobV9wcm9maWxlZERGR0Nv
ZGVCbG9jaykpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
Ym9vbCBQbGFuOjppc0tub3duVG9CZUxpdmVBZnRlckdDKCkKIHsKICAgICBpZiAobV9zdGFnZSA9
PSBDYW5jZWxsZWQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHUGxhbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHUGxhbi5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1BsYW4uaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQzLDggKzQzLDggQEAKIAogbmFt
ZXNwYWNlIEpTQyB7CiAKK2NsYXNzIEFic3RyYWN0U2xvdFZpc2l0b3I7CiBjbGFzcyBDb2RlQmxv
Y2s7Ci1jbGFzcyBTbG90VmlzaXRvcjsKIAogbmFtZXNwYWNlIERGRyB7CiAKQEAgLTcxLDkgKzcx
LDEwIEBAIHB1YmxpYzoKICAgICBDb21waWxhdGlvbktleSBrZXkoKTsKICAgICAKICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBGdW5jPgotICAgIHZvaWQgaXRlcmF0ZUNvZGVCbG9ja3NGb3JHQyhjb25z
dCBGdW5jJik7Ci0gICAgdm9pZCBjaGVja0xpdmVuZXNzQW5kVmlzaXRDaGlsZHJlbihTbG90Vmlz
aXRvciYpOwotICAgIGJvb2wgaXNLbm93blRvQmVMaXZlRHVyaW5nR0MoKTsKKyAgICB2b2lkIGl0
ZXJhdGVDb2RlQmxvY2tzRm9yR0MoQWJzdHJhY3RTbG90VmlzaXRvciYsIGNvbnN0IEZ1bmMmKTsK
KyAgICB2b2lkIGNoZWNrTGl2ZW5lc3NBbmRWaXNpdENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0
b3ImKTsKKyAgICBib29sIGlzS25vd25Ub0JlTGl2ZUR1cmluZ0dDKEFic3RyYWN0U2xvdFZpc2l0
b3ImKTsKKyAgICBib29sIGlzS25vd25Ub0JlTGl2ZUFmdGVyR0MoKTsKICAgICB2b2lkIGZpbmFs
aXplSW5HQygpOwogICAgIHZvaWQgY2FuY2VsKCk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHUGxhbklubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1BsYW5JbmxpbmVzLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbklubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAxOCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMy
LDkgKzMyLDkgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogI2lmIEVOQUJMRShE
RkdfSklUKQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgotdm9pZCBQbGFuOjppdGVyYXRlQ29k
ZUJsb2Nrc0ZvckdDKGNvbnN0IEZ1bmMmIGZ1bmMpCit2b2lkIFBsYW46Oml0ZXJhdGVDb2RlQmxv
Y2tzRm9yR0MoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgRnVuYyYgZnVuYykK
IHsKLSAgICBpZiAoIWlzS25vd25Ub0JlTGl2ZUR1cmluZ0dDKCkpCisgICAgaWYgKCFpc0tub3du
VG9CZUxpdmVEdXJpbmdHQyh2aXNpdG9yKSkKICAgICAgICAgcmV0dXJuOwogICAgIAogICAgIC8v
IENvbXBpbGF0aW9uIHdyaXRlcyBsb3RzIG9mIHZhbHVlcyB0byBhIENvZGVCbG9jayB3aXRob3V0
IHBlcmZvcm1pbmcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZXBvaW50
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVwb2lu
dC5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U2FmZXBvaW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTQtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTQtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTgzLDI4ICs4MywzOCBAQCB2b2lkIFNh
ZmVwb2ludDo6YmVnaW4oKQogICAgIH0KIH0KIAotdm9pZCBTYWZlcG9pbnQ6OmNoZWNrTGl2ZW5l
c3NBbmRWaXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBTYWZlcG9pbnQ6
OmNoZWNrTGl2ZW5lc3NBbmRWaXNpdENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0
b3IpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQobV9kaWRDYWxsQmVnaW4pOwogCiAgICAgaWYgKG1f
cmVzdWx0Lm1fZGlkR2V0Q2FuY2VsbGVkKQogICAgICAgICByZXR1cm47IC8vIFdlIHdlcmUgY2Fu
Y2VsbGVkIGR1cmluZyBhIHByZXZpb3VzIEdDIQogICAgIAotICAgIGlmICghaXNLbm93blRvQmVM
aXZlRHVyaW5nR0MoKSkKKyAgICBpZiAoIWlzS25vd25Ub0JlTGl2ZUR1cmluZ0dDKHZpc2l0b3Ip
KQogICAgICAgICByZXR1cm47CiAgICAgCiAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9zY2FubmFi
bGVzLnNpemUoKTsgaS0tOykKICAgICAgICAgbV9zY2FubmFibGVzW2ldLT52aXNpdENoaWxkcmVu
KHZpc2l0b3IpOwogfQogCi1ib29sIFNhZmVwb2ludDo6aXNLbm93blRvQmVMaXZlRHVyaW5nR0Mo
KQorYm9vbCBTYWZlcG9pbnQ6OmlzS25vd25Ub0JlTGl2ZUR1cmluZ0dDKEFic3RyYWN0U2xvdFZp
c2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQobV9kaWRDYWxsQmVnaW4pOwog
ICAgIAogICAgIGlmIChtX3Jlc3VsdC5tX2RpZEdldENhbmNlbGxlZCkKICAgICAgICAgcmV0dXJu
IHRydWU7IC8vIFdlIHdlcmUgY2FuY2VsbGVkIGR1cmluZyBhIHByZXZpb3VzIEdDLCBzbyBsZXQn
cyBub3QgbWVzcyB3aXRoIGl0IHRoaXMgdGltZSBhcm91bmQgLSBwcmV0ZW5kIGl0J3MgbGl2ZSBh
bmQgbW92ZSBvbi4KICAgICAKLSAgICByZXR1cm4gbV9wbGFuLmlzS25vd25Ub0JlTGl2ZUR1cmlu
Z0dDKCk7CisgICAgcmV0dXJuIG1fcGxhbi5pc0tub3duVG9CZUxpdmVEdXJpbmdHQyh2aXNpdG9y
KTsKK30KKworYm9vbCBTYWZlcG9pbnQ6OmlzS25vd25Ub0JlTGl2ZUFmdGVyR0MoKQoreworICAg
IFJFTEVBU0VfQVNTRVJUKG1fZGlkQ2FsbEJlZ2luKTsKKyAgICAKKyAgICBpZiAobV9yZXN1bHQu
bV9kaWRHZXRDYW5jZWxsZWQpCisgICAgICAgIHJldHVybiB0cnVlOyAvLyBXZSB3ZXJlIGNhbmNl
bGxlZCBkdXJpbmcgYSBwcmV2aW91cyBHQywgc28gbGV0J3Mgbm90IG1lc3Mgd2l0aCBpdCB0aGlz
IHRpbWUgYXJvdW5kIC0gcHJldGVuZCBpdCdzIGxpdmUgYW5kIG1vdmUgb24uCisgICAgCisgICAg
cmV0dXJuIG1fcGxhbi5pc0tub3duVG9CZUxpdmVBZnRlckdDKCk7CiB9CiAKIHZvaWQgU2FmZXBv
aW50OjpjYW5jZWwoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlcG9p
bnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVwb2lu
dC5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nh
ZmVwb2ludC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxNCwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTQtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMxLDcgKzMxLDcgQEAKIAogbmFtZXNwYWNl
IEpTQyB7CiAKLWNsYXNzIFNsb3RWaXNpdG9yOworY2xhc3MgQWJzdHJhY3RTbG90VmlzaXRvcjsK
IGNsYXNzIFZNOwogCiBuYW1lc3BhY2UgREZHIHsKQEAgLTY2LDkgKzY2LDEwIEBAIHB1YmxpYzoK
ICAgICB2b2lkIGFkZChTY2FubmFibGUqKTsKICAgICAKICAgICB2b2lkIGJlZ2luKCk7Ci0gICAg
Ci0gICAgdm9pZCBjaGVja0xpdmVuZXNzQW5kVmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYpOwot
ICAgIGJvb2wgaXNLbm93blRvQmVMaXZlRHVyaW5nR0MoKTsKKworICAgIHZvaWQgY2hlY2tMaXZl
bmVzc0FuZFZpc2l0Q2hpbGRyZW4oQWJzdHJhY3RTbG90VmlzaXRvciYpOworICAgIGJvb2wgaXNL
bm93blRvQmVMaXZlRHVyaW5nR0MoQWJzdHJhY3RTbG90VmlzaXRvciYpOworICAgIGJvb2wgaXNL
bm93blRvQmVMaXZlQWZ0ZXJHQygpOwogICAgIHZvaWQgY2FuY2VsKCk7CiAgICAgCiAgICAgVk0q
IHZtKCkgY29uc3Q7IC8vIE1heSByZXR1cm4gbnVsbCBpZiB3ZSd2ZSBiZWVuIGNhbmNlbGxlZC4K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2Nhbm5hYmxlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTY2FubmFibGUuaAkocmV2aXNpb24g
MjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTY2FubmFibGUuaAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0yOSw3ICsyOSw3IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1jbGFzcyBTbG90
VmlzaXRvcjsKK2NsYXNzIEFic3RyYWN0U2xvdFZpc2l0b3I7CiAKIG5hbWVzcGFjZSBERkcgewog
CkBAIC0zOCw3ICszOCw3IEBAIHB1YmxpYzoKICAgICBTY2FubmFibGUoKSB7IH0KICAgICB2aXJ0
dWFsIH5TY2FubmFibGUoKSB7IH0KICAgICAKLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXRDaGlsZHJl
bihTbG90VmlzaXRvciYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXRDaGlsZHJlbihBYnN0
cmFjdFNsb3RWaXNpdG9yJikgPSAwOwogfTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5jcHAJKHJldmlzaW9u
IDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3QuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
My0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMzcyLDcgKzM3Miw3IEBAIHZvaWQgV29ya2xpc3Q6OnJlc3VtZUFs
bFRocmVhZHMoKQogICAgIG1fc3VzcGVuc2lvbkxvY2sudW5sb2NrKCk7CiB9CiAKLXZvaWQgV29y
a2xpc3Q6OnZpc2l0V2Vha1JlZmVyZW5jZXMoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIFdv
cmtsaXN0Ojp2aXNpdFdlYWtSZWZlcmVuY2VzKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3Ip
CiB7CiAgICAgVk0qIHZtID0gJnZpc2l0b3IuaGVhcCgpLT52bSgpOwogICAgIHsKQEAgLTQwNSw3
ICs0MDUsNyBAQCB2b2lkIFdvcmtsaXN0OjpyZW1vdmVEZWFkUGxhbnMoVk0mIHZtKQogICAgICAg
ICAgICAgUGxhbiogcGxhbiA9IGl0ZXItPnZhbHVlLmdldCgpOwogICAgICAgICAgICAgaWYgKHBs
YW4tPnZtKCkgIT0gJnZtKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAg
aWYgKHBsYW4tPmlzS25vd25Ub0JlTGl2ZUR1cmluZ0dDKCkpIHsKKyAgICAgICAgICAgIGlmIChw
bGFuLT5pc0tub3duVG9CZUxpdmVBZnRlckdDKCkpIHsKICAgICAgICAgICAgICAgICBwbGFuLT5m
aW5hbGl6ZUluR0MoKTsKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0K
QEAgLTQ0MCw3ICs0NDAsNyBAQCB2b2lkIFdvcmtsaXN0OjpyZW1vdmVEZWFkUGxhbnMoVk0mIHZt
KQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIGlmIChzYWZlcG9pbnQtPnZtKCkgIT0g
JnZtKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlmIChzYWZlcG9pbnQtPmlzS25v
d25Ub0JlTGl2ZUR1cmluZ0dDKCkpCisgICAgICAgIGlmIChzYWZlcG9pbnQtPmlzS25vd25Ub0Jl
TGl2ZUFmdGVyR0MoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBzYWZlcG9pbnQt
PmNhbmNlbCgpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV29y
a2xpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dvcmts
aXN0LmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
V29ya2xpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM1LDcgKzM1LDcgQEAKIAogbmFtZXNwYWNl
IEpTQyB7CiAKLWNsYXNzIFNsb3RWaXNpdG9yOworY2xhc3MgQWJzdHJhY3RTbG90VmlzaXRvcjsK
IAogbmFtZXNwYWNlIERGRyB7CiAKQEAgLTU3LDcgKzU3LDcgQEAgcHVibGljOgogICAgIHZvaWQg
Y29tcGxldGVBbGxQbGFuc0ZvclZNKFZNJik7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5j
PgotICAgIHZvaWQgaXRlcmF0ZUNvZGVCbG9ja3NGb3JHQyhWTSYsIGNvbnN0IEZ1bmMmKTsKKyAg
ICB2b2lkIGl0ZXJhdGVDb2RlQmxvY2tzRm9yR0MoQWJzdHJhY3RTbG90VmlzaXRvciYsIFZNJiwg
Y29uc3QgRnVuYyYpOwogCiAgICAgdm9pZCB3YWl0VW50aWxBbGxQbGFuc0ZvclZNQXJlUmVhZHko
Vk0mKTsKICAgICBTdGF0ZSBjb21wbGV0ZUFsbFJlYWR5UGxhbnNGb3JWTShWTSYsIENvbXBpbGF0
aW9uS2V5ID0gQ29tcGlsYXRpb25LZXkoKSk7CkBAIC03Myw3ICs3Myw3IEBAIHB1YmxpYzoKICAg
ICBib29sIGlzQWN0aXZlRm9yVk0oVk0mKSBjb25zdDsKICAgICAKICAgICAvLyBPbmx5IGNhbGxl
ZCBvbiB0aGUgbWFpbiB0aHJlYWQgYWZ0ZXIgc3VzcGVuZGluZyBhbGwgdGhyZWFkcy4KLSAgICB2
b2lkIHZpc2l0V2Vha1JlZmVyZW5jZXMoU2xvdFZpc2l0b3ImKTsKKyAgICB2b2lkIHZpc2l0V2Vh
a1JlZmVyZW5jZXMoQWJzdHJhY3RTbG90VmlzaXRvciYpOwogICAgIHZvaWQgcmVtb3ZlRGVhZFBs
YW5zKFZNJik7CiAgICAgCiAgICAgdm9pZCByZW1vdmVOb25Db21waWxpbmdQbGFuc0ZvclZNKFZN
Jik7CkBAIC0xNDQsNyArMTQ0LDcgQEAgV29ya2xpc3QmIGV4aXN0aW5nV29ya2xpc3RGb3JJbmRl
eCh1bnNpZwogdm9pZCBjb21wbGV0ZUFsbFBsYW5zRm9yVk0oVk0mKTsKIAogdGVtcGxhdGU8dHlw
ZW5hbWUgRnVuYz4KLXZvaWQgaXRlcmF0ZUNvZGVCbG9ja3NGb3JHQyhWTSYsIGNvbnN0IEZ1bmMm
KTsKK3ZvaWQgaXRlcmF0ZUNvZGVCbG9ja3NGb3JHQyhBYnN0cmFjdFNsb3RWaXNpdG9yJiwgVk0m
LCBjb25zdCBGdW5jJik7CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlzdElubGluZXMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0SW5saW5lcy5oCShyZXZpc2lv
biAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0SW5saW5l
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxNy0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzMsMzAgKzMzLDMwIEBAIG5hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgREZHIHsKICNpZiBFTkFCTEUoREZHX0pJVCkKIAogdGVtcGxhdGU8dHlwZW5hbWUg
RnVuYz4KLXZvaWQgaXRlcmF0ZUNvZGVCbG9ja3NGb3JHQyhWTSYgdm0sIGNvbnN0IEZ1bmMmIGZ1
bmMpCit2b2lkIGl0ZXJhdGVDb2RlQmxvY2tzRm9yR0MoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlz
aXRvciwgVk0mIHZtLCBjb25zdCBGdW5jJiBmdW5jKQogewogICAgIGZvciAodW5zaWduZWQgaSA9
IERGRzo6bnVtYmVyT2ZXb3JrbGlzdHMoKTsgaS0tOykgewogICAgICAgICBpZiAoREZHOjpXb3Jr
bGlzdCogd29ya2xpc3QgPSBERkc6OmV4aXN0aW5nV29ya2xpc3RGb3JJbmRleE9yTnVsbChpKSkK
LSAgICAgICAgICAgIHdvcmtsaXN0LT5pdGVyYXRlQ29kZUJsb2Nrc0ZvckdDKHZtLCBmdW5jKTsK
KyAgICAgICAgICAgIHdvcmtsaXN0LT5pdGVyYXRlQ29kZUJsb2Nrc0ZvckdDKHZpc2l0b3IsIHZt
LCBmdW5jKTsKICAgICB9CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+Ci12b2lkIFdvcmts
aXN0OjppdGVyYXRlQ29kZUJsb2Nrc0ZvckdDKFZNJiB2bSwgY29uc3QgRnVuYyYgZnVuYykKK3Zv
aWQgV29ya2xpc3Q6Oml0ZXJhdGVDb2RlQmxvY2tzRm9yR0MoQWJzdHJhY3RTbG90VmlzaXRvciYg
dmlzaXRvciwgVk0mIHZtLCBjb25zdCBGdW5jJiBmdW5jKQogewogICAgIExvY2tIb2xkZXIgbG9j
a2VyKCptX2xvY2spOwogICAgIGZvciAoUGxhbk1hcDo6aXRlcmF0b3IgaXRlciA9IG1fcGxhbnMu
YmVnaW4oKTsgaXRlciAhPSBtX3BsYW5zLmVuZCgpOyArK2l0ZXIpIHsKICAgICAgICAgUGxhbiog
cGxhbiA9IGl0ZXItPnZhbHVlLmdldCgpOwogICAgICAgICBpZiAocGxhbi0+dm0oKSAhPSAmdm0p
CiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgcGxhbi0+aXRlcmF0ZUNvZGVCbG9ja3NG
b3JHQyhmdW5jKTsKKyAgICAgICAgcGxhbi0+aXRlcmF0ZUNvZGVCbG9ja3NGb3JHQyh2aXNpdG9y
LCBmdW5jKTsKICAgICB9CiB9CiAKICNlbHNlIC8vIEVOQUJMRShERkdfSklUKQogCiB0ZW1wbGF0
ZTx0eXBlbmFtZSBGdW5jPgotdm9pZCBpdGVyYXRlQ29kZUJsb2Nrc0ZvckdDKFZNJiwgY29uc3Qg
RnVuYyYpCit2b2lkIGl0ZXJhdGVDb2RlQmxvY2tzRm9yR0MoQWJzdHJhY3RTbG90VmlzaXRvciYs
IFZNJiwgY29uc3QgRnVuYyYpCiB7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0Fic3RyYWN0U2xvdFZpc2l0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9BYnN0cmFjdFNsb3RWaXNpdG9yLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvQWJzdHJhY3RTbG90VmlzaXRvci5oCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMjA3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJKU0NKU1ZhbHVlLmgiCisjaW5jbHVk
ZSAiTWFya1N0YWNrLmgiCisjaW5jbHVkZSAiUm9vdE1hcmtSZWFzb24uaCIKKyNpbmNsdWRlICJW
aXNpdFJhY2VLZXkuaCIKKyNpbmNsdWRlIDx3dGYvQ29uY3VycmVudFB0ckhhc2hTZXQuaD4KKyNp
bmNsdWRlIDx3dGYvU2hhcmVkVGFzay5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4K
KworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIENvbnNlcnZhdGl2ZVJvb3RzOworY2xhc3MgSGVh
cDsKK2NsYXNzIEhlYXBDZWxsOworY2xhc3MgSlNDZWxsOworY2xhc3MgTWFya2VkQmxvY2s7Citj
bGFzcyBNYXJraW5nQ29uc3RyYWludDsKK2NsYXNzIE1hcmtpbmdDb25zdHJhaW50U29sdmVyOwor
Y2xhc3MgUHJlY2lzZUFsbG9jYXRpb247CitjbGFzcyBTbG90VmlzaXRvcjsKK2NsYXNzIFZNOwor
Y2xhc3MgVmVyaWZpZXJTbG90VmlzaXRvcjsKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGNsYXNzIFdl
YWs7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBUcmFpdHM+IGNsYXNzIFdyaXRlQmFy
cmllckJhc2U7CisKK2NsYXNzIEFic3RyYWN0U2xvdFZpc2l0b3IgeworICAgIFdURl9NQUtFX05P
TkNPUFlBQkxFKEFic3RyYWN0U2xvdFZpc2l0b3IpOworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOworcHVibGljOgorICAgIGNsYXNzIENvbnRleHQgeworICAgIHB1YmxpYzoKKyAgICAgICAg
Q29udGV4dChBYnN0cmFjdFNsb3RWaXNpdG9yJiwgSGVhcENlbGwqKTsKKyAgICAgICAgfkNvbnRl
eHQoKTsKKyAgICAgICAgSGVhcENlbGwqIGNlbGwoKSBjb25zdCB7IHJldHVybiBtX2NlbGw7IH0K
KyAgICBwcml2YXRlOgorICAgICAgICBBYnN0cmFjdFNsb3RWaXNpdG9yJiBtX3Zpc2l0b3I7Cisg
ICAgICAgIEhlYXBDZWxsKiBtX2NlbGw7CisgICAgICAgIENvbnRleHQqIG1fcHJldmlvdXM7Cisg
ICAgfTsKKworICAgIGNsYXNzIFN1cHByZXNzR0NWZXJpZmllclNjb3BlIHsKKyAgICBwdWJsaWM6
CisgICAgICAgIFN1cHByZXNzR0NWZXJpZmllclNjb3BlKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZp
c2l0b3IpCisgICAgICAgICAgICA6IG1fdmlzaXRvcih2aXNpdG9yKQorICAgICAgICB7CisgICAg
ICAgICAgICBBU1NFUlQoIW1fdmlzaXRvci5tX3N1cHByZXNzVmVyaWZpZXIpOworICAgICAgICAg
ICAgbV92aXNpdG9yLm1fc3VwcHJlc3NWZXJpZmllciA9IHRydWU7CisgICAgICAgIH0KKyAgICAg
ICAgflN1cHByZXNzR0NWZXJpZmllclNjb3BlKCkgeyBtX3Zpc2l0b3IubV9zdXBwcmVzc1Zlcmlm
aWVyID0gZmFsc2U7IH0KKyAgICBwcml2YXRlOgorICAgICAgICBBYnN0cmFjdFNsb3RWaXNpdG9y
JiBtX3Zpc2l0b3I7CisgICAgfTsKKworICAgIGNsYXNzIERlZmF1bHRNYXJraW5nVmlvbGF0aW9u
QXNzZXJ0aW9uU2NvcGUgeworICAgIHB1YmxpYzoKKyAgICAgICAgRGVmYXVsdE1hcmtpbmdWaW9s
YXRpb25Bc3NlcnRpb25TY29wZShBYnN0cmFjdFNsb3RWaXNpdG9yJikgeyB9CisgICAgfTsKKwor
ICAgIHZpcnR1YWwgfkFic3RyYWN0U2xvdFZpc2l0b3IoKSA9IGRlZmF1bHQ7CisKKyAgICBNYXJr
U3RhY2tBcnJheSYgY29sbGVjdG9yTWFya1N0YWNrKCkgeyByZXR1cm4gbV9jb2xsZWN0b3JTdGFj
azsgfQorICAgIE1hcmtTdGFja0FycmF5JiBtdXRhdG9yTWFya1N0YWNrKCkgeyByZXR1cm4gbV9t
dXRhdG9yU3RhY2s7IH0KKyAgICBjb25zdCBNYXJrU3RhY2tBcnJheSYgY29sbGVjdG9yTWFya1N0
YWNrKCkgY29uc3QgeyByZXR1cm4gbV9jb2xsZWN0b3JTdGFjazsgfQorICAgIGNvbnN0IE1hcmtT
dGFja0FycmF5JiBtdXRhdG9yTWFya1N0YWNrKCkgY29uc3QgeyByZXR1cm4gbV9tdXRhdG9yU3Rh
Y2s7IH0KKworICAgIGJvb2wgaXNFbXB0eSgpIHsgcmV0dXJuIG1fY29sbGVjdG9yU3RhY2suaXNF
bXB0eSgpICYmIG1fbXV0YXRvclN0YWNrLmlzRW1wdHkoKTsgfQorCisgICAgVk0mIHZtKCk7Cisg
ICAgY29uc3QgVk0mIHZtKCkgY29uc3Q7CisgICAgSGVhcCogaGVhcCgpIGNvbnN0OworCisgICAg
dmlydHVhbCB2b2lkIGFwcGVuZChjb25zdCBDb25zZXJ2YXRpdmVSb290cyYpID0gMDsKKworICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFRyYWl0cz4gdm9pZCBhcHBlbmQoY29uc3Qg
V3JpdGVCYXJyaWVyQmFzZTxULCBUcmFpdHM+Jik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgVHJhaXRzPiB2b2lkIGFwcGVuZEhpZGRlbihjb25zdCBXcml0ZUJhcnJpZXJCYXNl
PFQsIFRyYWl0cz4mKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJdGVyYXRvcj4gdm9pZCBhcHBl
bmQoSXRlcmF0b3IgYmVnaW4gLCBJdGVyYXRvciBlbmQpOworICAgIEFMV0FZU19JTkxJTkUgdm9p
ZCBhcHBlbmRWYWx1ZXMoY29uc3QgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duLCBSYXdWYWx1ZVRy
YWl0czxVbmtub3duPj4qLCBzaXplX3QgY291bnQpOworICAgIEFMV0FZU19JTkxJTkUgdm9pZCBh
cHBlbmRWYWx1ZXNIaWRkZW4oY29uc3QgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duLCBSYXdWYWx1
ZVRyYWl0czxVbmtub3duPj4qLCBzaXplX3QgY291bnQpOworCisgICAgLy8gVGhlc2UgZG9uJ3Qg
cmVxdWlyZSB5b3UgdG8gcHJvdmUgdGhhdCB5b3UgaGF2ZSBhIFdyaXRlQmFycmllcjw+LiBUaGF0
IG1ha2VzIHNlbnNlCisgICAgLy8gZm9yOgorICAgIC8vCisgICAgLy8gLSByb290cy4KKyAgICAv
LyAtIHNvcGhpc3RpY2F0ZWQgZGF0YSBzdHJ1Y3R1cmVzIHRoYXQgYmFycmllciB0aHJvdWdoIG90
aGVyIG1lYW5zIChsaWtlIERGRzo6UGxhbiBhbmQKKyAgICAvLyAgIGZyaWVuZHMpLgorICAgIC8v
CisgICAgLy8gSWYgeW91IGFyZSBub3QgYSByb290IGFuZCB5b3UgZG9uJ3Qga25vdyB3aGF0IGtp
bmQgb2YgYmFycmllciB5b3UgaGF2ZSwgdGhlbiB5b3UKKyAgICAvLyBzaG91bGRuJ3QgY2FsbCB0
aGVzZSBtZXRob2RzLgorICAgIEFMV0FZU19JTkxJTkUgdm9pZCBhcHBlbmRVbmJhcnJpZXJlZChK
U1ZhbHVlKTsKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgYXBwZW5kVW5iYXJyaWVyZWQoSlNWYWx1
ZSosIHNpemVfdCk7CisgICAgdmlydHVhbCB2b2lkIGFwcGVuZFVuYmFycmllcmVkKEpTQ2VsbCop
ID0gMDsKKworICAgIGlubGluZSBib29sIGFkZE9wYXF1ZVJvb3Qodm9pZCopOyAvLyBSZXR1cm5z
IHRydWUgaWYgdGhlIHJvb3Qgd2FzIG5ldy4KKyAgICBpbmxpbmUgYm9vbCBjb250YWluc09wYXF1
ZVJvb3Qodm9pZCopIGNvbnN0OworICAgIHZvaWQgc2V0SWdub3JlTmV3T3BhcXVlUm9vdHMoYm9v
bCB2YWx1ZSkgeyBtX2lnbm9yZU5ld09wYXF1ZVJvb3RzID0gdmFsdWU7IH0KKworICAgIHZpcnR1
YWwgYm9vbCBpc0ZpcnN0VmlzaXQoKSBjb25zdCA9IDA7CisKKyAgICB2aXJ0dWFsIGJvb2wgaXNN
YXJrZWQoY29uc3Qgdm9pZCopIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNNYXJrZWQo
TWFya2VkQmxvY2smLCBIZWFwQ2VsbCopIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNN
YXJrZWQoUHJlY2lzZUFsbG9jYXRpb24mLCBIZWFwQ2VsbCopIGNvbnN0ID0gMDsKKworICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgdm9pZCBhcHBlbmQoY29uc3QgV2VhazxUPiYpOworCisg
ICAgQUxXQVlTX0lOTElORSB2b2lkIGFwcGVuZEhpZGRlblVuYmFycmllcmVkKEpTVmFsdWUpOwor
ICAgIHZpcnR1YWwgdm9pZCBhcHBlbmRIaWRkZW5VbmJhcnJpZXJlZChKU0NlbGwqKSA9IDA7CisK
KyAgICBzaXplX3QgdmlzaXRDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fdmlzaXRDb3VudDsgfQor
CisgICAgdm9pZCBhZGRUb1Zpc2l0Q291bnQoc2l6ZV90IHZhbHVlKSB7IG1fdmlzaXRDb3VudCAr
PSB2YWx1ZTsgfQorCisgICAgdmlydHVhbCB2b2lkIGFkZFBhcmFsbGVsQ29uc3RyYWludFRhc2so
UmVmUHRyPFNoYXJlZFRhc2s8dm9pZChBYnN0cmFjdFNsb3RWaXNpdG9yJik+PikgPSAwOworCisg
ICAgdmlydHVhbCB2b2lkIG1hcmtBdXhpbGlhcnkoY29uc3Qgdm9pZCogYmFzZSkgPSAwOworCisg
ICAgdmlydHVhbCB2b2lkIHJlcG9ydEV4dHJhTWVtb3J5VmlzaXRlZChzaXplX3QpID0gMDsKKyNp
ZiBFTkFCTEUoUkVTT1VSQ0VfVVNBR0UpCisgICAgdmlydHVhbCB2b2lkIHJlcG9ydEV4dGVybmFs
TWVtb3J5VmlzaXRlZChzaXplX3QpID0gMDsKKyNlbmRpZgorCisgICAgdmlydHVhbCB2b2lkIGR1
bXAoUHJpbnRTdHJlYW0mKSBjb25zdCA9IDA7CisKKyAgICBSb290TWFya1JlYXNvbiByb290TWFy
a1JlYXNvbigpIGNvbnN0IHsgcmV0dXJuIG1fcm9vdE1hcmtSZWFzb247IH0KKyAgICB2b2lkIHNl
dFJvb3RNYXJrUmVhc29uKFJvb3RNYXJrUmVhc29uIHJlYXNvbikgeyBtX3Jvb3RNYXJrUmVhc29u
ID0gcmVhc29uOyB9CisKKyAgICB2aXJ0dWFsIGJvb2wgbXV0YXRvcklzU3RvcHBlZCgpIGNvbnN0
ID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBkaWRSYWNlKGNvbnN0IFZpc2l0UmFjZUtleSYpID0g
MDsKKyAgICB2b2lkIGRpZFJhY2UoSlNDZWxsKiBjZWxsLCBjb25zdCBjaGFyKiByZWFzb24pIHsg
ZGlkUmFjZShWaXNpdFJhY2VLZXkoY2VsbCwgcmVhc29uKSk7IH0KKworICAgIHZpcnR1YWwgdm9p
ZCB2aXNpdEFzQ29uc3RyYWludChjb25zdCBKU0NlbGwqKSA9IDA7CisKKyAgICBjb25zdCBjaGFy
KiBjb2RlTmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29kZU5hbWUuZGF0YSgpOyB9CisKK3Byb3Rl
Y3RlZDoKKyAgICBpbmxpbmUgQWJzdHJhY3RTbG90VmlzaXRvcihIZWFwJiwgQ1N0cmluZyBjb2Rl
TmFtZSwgQ29uY3VycmVudFB0ckhhc2hTZXQmKTsKKworICAgIEhlYXBDZWxsKiBwYXJlbnRDZWxs
KCkgY29uc3Q7CisgICAgdm9pZCByZXNldCgpOworCisgICAgTWFya1N0YWNrQXJyYXkgbV9jb2xs
ZWN0b3JTdGFjazsKKyAgICBNYXJrU3RhY2tBcnJheSBtX211dGF0b3JTdGFjazsKKworICAgIHNp
emVfdCBtX3Zpc2l0Q291bnQgeyAwIH07CisKKyAgICBIZWFwJiBtX2hlYXA7CisgICAgQ29udGV4
dCogbV9jb250ZXh0IHsgbnVsbHB0ciB9OworICAgIENTdHJpbmcgbV9jb2RlTmFtZTsKKworICAg
IE1hcmtpbmdDb25zdHJhaW50KiBtX2N1cnJlbnRDb25zdHJhaW50IHsgbnVsbHB0ciB9OworICAg
IE1hcmtpbmdDb25zdHJhaW50U29sdmVyKiBtX2N1cnJlbnRTb2x2ZXIgeyBudWxscHRyIH07Cisg
ICAgQ29uY3VycmVudFB0ckhhc2hTZXQmIG1fb3BhcXVlUm9vdHM7CisKKyAgICBSb290TWFya1Jl
YXNvbiBtX3Jvb3RNYXJrUmVhc29uIHsgUm9vdE1hcmtSZWFzb246Ok5vbmUgfTsKKyAgICBib29s
IG1fc3VwcHJlc3NWZXJpZmllciB7IGZhbHNlIH07CisgICAgYm9vbCBtX2lnbm9yZU5ld09wYXF1
ZVJvb3RzIHsgZmFsc2UgfTsgLy8gVXNlZnVsIGFzIGEgZGVidWdnaW5nIG1vZGUuCisKKyAgICBm
cmllbmQgY2xhc3MgTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXI7Cit9OworCitjbGFzcyBTZXRSb290
TWFya1JlYXNvblNjb3BlIHsKK3B1YmxpYzoKKyAgICBTZXRSb290TWFya1JlYXNvblNjb3BlKEFi
c3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIFJvb3RNYXJrUmVhc29uIHJlYXNvbikKKyAgICAg
ICAgOiBtX3Zpc2l0b3IodmlzaXRvcikKKyAgICAgICAgLCBtX3ByZXZpb3VzUmVhc29uKHZpc2l0
b3Iucm9vdE1hcmtSZWFzb24oKSkKKyAgICB7CisgICAgICAgIG1fdmlzaXRvci5zZXRSb290TWFy
a1JlYXNvbihyZWFzb24pOworICAgIH0KKworICAgIH5TZXRSb290TWFya1JlYXNvblNjb3BlKCkK
KyAgICB7CisgICAgICAgIG1fdmlzaXRvci5zZXRSb290TWFya1JlYXNvbihtX3ByZXZpb3VzUmVh
c29uKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgQWJzdHJhY3RTbG90VmlzaXRvciYgbV92aXNp
dG9yOworICAgIFJvb3RNYXJrUmVhc29uIG1fcHJldmlvdXNSZWFzb247Cit9OworCit9IC8vIG5h
bWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Fic3RyYWN0U2xv
dFZpc2l0b3JJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvQWJzdHJhY3RTbG90VmlzaXRvcklubGluZXMuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9BYnN0cmFjdFNsb3RWaXNpdG9ySW5saW5lcy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsMTU0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJBYnN0cmFjdFNsb3RWaXNp
dG9yLmgiCisjaW5jbHVkZSAiSGVhcC5oIgorI2luY2x1ZGUgIldlYWtJbmxpbmVzLmgiCisjaW5j
bHVkZSAiV3JpdGVCYXJyaWVyLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitpbmxpbmUgQWJzdHJh
Y3RTbG90VmlzaXRvcjo6Q29udGV4dDo6Q29udGV4dChBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNp
dG9yLCBIZWFwQ2VsbCogY2VsbCkKKyAgICA6IG1fdmlzaXRvcih2aXNpdG9yKQorICAgICwgbV9j
ZWxsKGNlbGwpCit7CisgICAgbV9wcmV2aW91cyA9IG1fdmlzaXRvci5tX2NvbnRleHQ7CisgICAg
bV92aXNpdG9yLm1fY29udGV4dCA9IHRoaXM7Cit9CisKK2lubGluZSBBYnN0cmFjdFNsb3RWaXNp
dG9yOjpDb250ZXh0Ojp+Q29udGV4dCgpCit7CisgICAgbV92aXNpdG9yLm1fY29udGV4dCA9IG1f
cHJldmlvdXM7Cit9CisKK2lubGluZSBBYnN0cmFjdFNsb3RWaXNpdG9yOjpBYnN0cmFjdFNsb3RW
aXNpdG9yKEhlYXAmIGhlYXAsIENTdHJpbmcgY29kZU5hbWUsIENvbmN1cnJlbnRQdHJIYXNoU2V0
JiBvcGFxdWVSb290cykKKyAgICA6IG1faGVhcChoZWFwKQorICAgICwgbV9jb2RlTmFtZShjb2Rl
TmFtZSkKKyAgICAsIG1fb3BhcXVlUm9vdHMob3BhcXVlUm9vdHMpCit7Cit9CisKK2lubGluZSBI
ZWFwKiBBYnN0cmFjdFNsb3RWaXNpdG9yOjpoZWFwKCkgY29uc3QKK3sKKyAgICByZXR1cm4gJm1f
aGVhcDsKK30KKworaW5saW5lIFZNJiBBYnN0cmFjdFNsb3RWaXNpdG9yOjp2bSgpCit7CisgICAg
cmV0dXJuIG1faGVhcC52bSgpOworfQorCitpbmxpbmUgY29uc3QgVk0mIEFic3RyYWN0U2xvdFZp
c2l0b3I6OnZtKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9oZWFwLnZtKCk7Cit9CisKK2lubGlu
ZSBib29sIEFic3RyYWN0U2xvdFZpc2l0b3I6OmFkZE9wYXF1ZVJvb3Qodm9pZCogcHRyKQorewor
ICAgIGlmICghcHRyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG1faWdub3JlTmV3
T3BhcXVlUm9vdHMpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIW1fb3BhcXVlUm9v
dHMuYWRkKHB0cikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBtX3Zpc2l0Q291bnQrKzsK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworaW5saW5lIGJvb2wgQWJzdHJhY3RTbG90VmlzaXRvcjo6
Y29udGFpbnNPcGFxdWVSb290KHZvaWQqIHB0cikgY29uc3QKK3sKKyAgICByZXR1cm4gbV9vcGFx
dWVSb290cy5jb250YWlucyhwdHIpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorQUxXQVlT
X0lOTElORSB2b2lkIEFic3RyYWN0U2xvdFZpc2l0b3I6OmFwcGVuZChjb25zdCBXZWFrPFQ+JiB3
ZWFrKQoreworICAgIGFwcGVuZFVuYmFycmllcmVkKHdlYWsuZ2V0KCkpOworfQorCit0ZW1wbGF0
ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBUcmFpdHM+CitBTFdBWVNfSU5MSU5FIHZvaWQgQWJzdHJh
Y3RTbG90VmlzaXRvcjo6YXBwZW5kKGNvbnN0IFdyaXRlQmFycmllckJhc2U8VCwgVHJhaXRzPiYg
c2xvdCkKK3sKKyAgICBhcHBlbmRVbmJhcnJpZXJlZChzbG90LmdldCgpKTsKK30KKwordGVtcGxh
dGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVHJhaXRzPgorQUxXQVlTX0lOTElORSB2b2lkIEFic3Ry
YWN0U2xvdFZpc2l0b3I6OmFwcGVuZEhpZGRlbihjb25zdCBXcml0ZUJhcnJpZXJCYXNlPFQsIFRy
YWl0cz4mIHNsb3QpCit7CisgICAgYXBwZW5kSGlkZGVuVW5iYXJyaWVyZWQoc2xvdC5nZXQoKSk7
Cit9CisKK0FMV0FZU19JTkxJTkUgdm9pZCBBYnN0cmFjdFNsb3RWaXNpdG9yOjphcHBlbmRIaWRk
ZW5VbmJhcnJpZXJlZChKU1ZhbHVlIHZhbHVlKQoreworICAgIGlmICh2YWx1ZS5pc0NlbGwoKSkK
KyAgICAgICAgYXBwZW5kSGlkZGVuVW5iYXJyaWVyZWQodmFsdWUuYXNDZWxsKCkpOworfQorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBJdGVyYXRvcj4KK0FMV0FZU19JTkxJTkUgdm9pZCBBYnN0cmFjdFNs
b3RWaXNpdG9yOjphcHBlbmQoSXRlcmF0b3IgYmVnaW4sIEl0ZXJhdG9yIGVuZCkKK3sKKyAgICBm
b3IgKGF1dG8gaXQgPSBiZWdpbjsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICBhcHBlbmQoKml0
KTsKK30KKworQUxXQVlTX0lOTElORSB2b2lkIEFic3RyYWN0U2xvdFZpc2l0b3I6OmFwcGVuZFZh
bHVlcyhjb25zdCBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+KiBiYXJyaWVycywgc2l6ZV90IGNv
dW50KQoreworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY291bnQ7ICsraSkKKyAgICAgICAg
YXBwZW5kKGJhcnJpZXJzW2ldKTsKK30KKworQUxXQVlTX0lOTElORSB2b2lkIEFic3RyYWN0U2xv
dFZpc2l0b3I6OmFwcGVuZFZhbHVlc0hpZGRlbihjb25zdCBXcml0ZUJhcnJpZXJCYXNlPFVua25v
d24+KiBiYXJyaWVycywgc2l6ZV90IGNvdW50KQoreworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgY291bnQ7ICsraSkKKyAgICAgICAgYXBwZW5kSGlkZGVuKGJhcnJpZXJzW2ldKTsKK30KKwor
QUxXQVlTX0lOTElORSB2b2lkIEFic3RyYWN0U2xvdFZpc2l0b3I6OmFwcGVuZFVuYmFycmllcmVk
KEpTVmFsdWUgdmFsdWUpCit7CisgICAgaWYgKHZhbHVlLmlzQ2VsbCgpKQorICAgICAgICBhcHBl
bmRVbmJhcnJpZXJlZCh2YWx1ZS5hc0NlbGwoKSk7Cit9CisKK0FMV0FZU19JTkxJTkUgdm9pZCBB
YnN0cmFjdFNsb3RWaXNpdG9yOjphcHBlbmRVbmJhcnJpZXJlZChKU1ZhbHVlKiBzbG90LCBzaXpl
X3QgY291bnQpCit7CisgICAgZm9yIChzaXplX3QgaSA9IGNvdW50OyBpLS07KQorICAgICAgICBh
cHBlbmRVbmJhcnJpZXJlZChzbG90W2ldKTsKK30KKworQUxXQVlTX0lOTElORSBIZWFwQ2VsbCog
QWJzdHJhY3RTbG90VmlzaXRvcjo6cGFyZW50Q2VsbCgpIGNvbnN0Cit7CisgICAgaWYgKCFtX2Nv
bnRleHQpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiBtX2NvbnRleHQtPmNl
bGwoKTsKK30KKworQUxXQVlTX0lOTElORSB2b2lkIEFic3RyYWN0U2xvdFZpc2l0b3I6OnJlc2V0
KCkKK3sKKyAgICBtX3Zpc2l0Q291bnQgPSAwOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hhbmRsZVNldC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGFuZGxlU2V0LmNwcAkocmV2aXNpb24gMjcy
ODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGFuZGxlU2V0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxOSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTU2LDcgKzU2LDcgQEAgdm9pZCBIYW5kbGVTZXQ6Omdyb3coKQogICAgIH0K
IH0KIAotdm9pZCBIYW5kbGVTZXQ6OnZpc2l0U3Ryb25nSGFuZGxlcyhTbG90VmlzaXRvciYgdmlz
aXRvcikKK3ZvaWQgSGFuZGxlU2V0Ojp2aXNpdFN0cm9uZ0hhbmRsZXMoQWJzdHJhY3RTbG90Vmlz
aXRvciYgdmlzaXRvcikKIHsKICAgICBOb2RlKiBlbmQgPSBtX3N0cm9uZ0xpc3QuZW5kKCk7CiAg
ICAgZm9yIChOb2RlKiBub2RlID0gbV9zdHJvbmdMaXN0LmJlZ2luKCk7IG5vZGUgIT0gZW5kOyBu
b2RlID0gbm9kZS0+bmV4dCgpKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9I
YW5kbGVTZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IYW5k
bGVTZXQuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
SGFuZGxlU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDExLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDExLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNSwxMCArMzUsMTAgQEAKIAogbmFtZXNw
YWNlIEpTQyB7CiAKK2NsYXNzIEFic3RyYWN0U2xvdFZpc2l0b3I7CiBjbGFzcyBIYW5kbGVTZXQ7
CiBjbGFzcyBWTTsKIGNsYXNzIEpTVmFsdWU7Ci1jbGFzcyBTbG90VmlzaXRvcjsKIAogY2xhc3Mg
SGFuZGxlTm9kZSB7CiBwdWJsaWM6CkBAIC03Myw3ICs3Myw3IEBAIHB1YmxpYzoKICAgICBIYW5k
bGVTbG90IGFsbG9jYXRlKCk7CiAgICAgdm9pZCBkZWFsbG9jYXRlKEhhbmRsZVNsb3QpOwogCi0g
ICAgdm9pZCB2aXNpdFN0cm9uZ0hhbmRsZXMoU2xvdFZpc2l0b3ImKTsKKyAgICB2b2lkIHZpc2l0
U3Ryb25nSGFuZGxlcyhBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAKICAgICBKU19FWFBPUlRfUFJJ
VkFURSB2b2lkIHdyaXRlQmFycmllcihIYW5kbGVTbG90LCBjb25zdCBKU1ZhbHVlJik7CiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzIs
NiArNzIsNyBAQAogI2luY2x1ZGUgIlR5cGVQcm9maWxlci5oIgogI2luY2x1ZGUgIlR5cGVQcm9m
aWxlckxvZy5oIgogI2luY2x1ZGUgIlZNLmgiCisjaW5jbHVkZSAiVmVyaWZpZXJTbG90VmlzaXRv
cklubGluZXMuaCIKICNpbmNsdWRlICJXZWFrTWFwSW1wbElubGluZXMuaCIKICNpbmNsdWRlICJX
ZWFrU2V0SW5saW5lcy5oIgogI2luY2x1ZGUgPGFsZ29yaXRobT4KQEAgLTY0NCwxOCArNjQ1LDE4
IEBAIHZvaWQgSGVhcDo6Y29tcGxldGVBbGxKSVRQbGFucygpCiB9CiAKIHRlbXBsYXRlPHR5cGVu
YW1lIEZ1bmM+Ci12b2lkIEhlYXA6Oml0ZXJhdGVFeGVjdXRpbmdBbmRDb21waWxpbmdDb2RlQmxv
Y2tzKGNvbnN0IEZ1bmMmIGZ1bmMpCit2b2lkIEhlYXA6Oml0ZXJhdGVFeGVjdXRpbmdBbmRDb21w
aWxpbmdDb2RlQmxvY2tzKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IEZ1bmMm
IGZ1bmMpCiB7CiAgICAgbV9jb2RlQmxvY2tzLT5pdGVyYXRlQ3VycmVudGx5RXhlY3V0aW5nKGZ1
bmMpOwogICAgIGlmIChPcHRpb25zOjp1c2VKSVQoKSkKLSAgICAgICAgREZHOjppdGVyYXRlQ29k
ZUJsb2Nrc0ZvckdDKG1fdm0sIGZ1bmMpOworICAgICAgICBERkc6Oml0ZXJhdGVDb2RlQmxvY2tz
Rm9yR0ModmlzaXRvciwgbV92bSwgZnVuYyk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+
Ci12b2lkIEhlYXA6Oml0ZXJhdGVFeGVjdXRpbmdBbmRDb21waWxpbmdDb2RlQmxvY2tzV2l0aG91
dEhvbGRpbmdMb2Nrcyhjb25zdCBGdW5jJiBmdW5jKQordm9pZCBIZWFwOjppdGVyYXRlRXhlY3V0
aW5nQW5kQ29tcGlsaW5nQ29kZUJsb2Nrc1dpdGhvdXRIb2xkaW5nTG9ja3MoQWJzdHJhY3RTbG90
VmlzaXRvciYgdmlzaXRvciwgY29uc3QgRnVuYyYgZnVuYykKIHsKICAgICBWZWN0b3I8Q29kZUJs
b2NrKiwgMjU2PiBjb2RlQmxvY2tzOwotICAgIGl0ZXJhdGVFeGVjdXRpbmdBbmRDb21waWxpbmdD
b2RlQmxvY2tzKAorICAgIGl0ZXJhdGVFeGVjdXRpbmdBbmRDb21waWxpbmdDb2RlQmxvY2tzKHZp
c2l0b3IsCiAgICAgICAgIFsmXSAoQ29kZUJsb2NrKiBjb2RlQmxvY2spIHsKICAgICAgICAgICAg
IGNvZGVCbG9ja3MuYXBwZW5kKGNvZGVCbG9jayk7CiAgICAgICAgIH0pOwpAQCAtNzMzLDE0ICs3
MzQsNiBAQCB2b2lkIEhlYXA6OnJlbW92ZURlYWRDb21waWxlcldvcmtsaXN0RW50CiAjZW5kaWYK
IH0KIAotYm9vbCBIZWFwOjppc0FuYWx5emluZ0hlYXAoKSBjb25zdAotewotICAgIEhlYXBQcm9m
aWxlciogaGVhcFByb2ZpbGVyID0gbV92bS5oZWFwUHJvZmlsZXIoKTsKLSAgICBpZiAoVU5MSUtF
TFkoaGVhcFByb2ZpbGVyKSkKLSAgICAgICAgcmV0dXJuIGhlYXBQcm9maWxlci0+YWN0aXZlSGVh
cEFuYWx5emVyKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCiBzdHJ1Y3QgR2F0aGVyRXh0cmFI
ZWFwRGF0YSA6IE1hcmtlZEJsb2NrOjpDb3VudEZ1bmN0b3IgewogICAgIEdhdGhlckV4dHJhSGVh
cERhdGEoVk0mIHZtLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQogICAgICAgICA6IG1fdm0odm0p
CkBAIC0xNDg1LDE0ICsxNDc4LDIxIEBAIE5FVkVSX0lOTElORSBib29sIEhlYXA6OnJ1bkVuZFBo
YXNlKEdDQ28KICAgICB9CiAgICAgbV9oZWxwZXJDbGllbnQuZmluaXNoKCk7CiAgICAgCi0gICAg
aXRlcmF0ZUV4ZWN1dGluZ0FuZENvbXBpbGluZ0NvZGVCbG9ja3MoCisgICAgQVNTRVJUKG1fbXV0
YXRvck1hcmtTdGFjay0+aXNFbXB0eSgpKTsKKyAgICBBU1NFUlQobV9yYWNlTWFya1N0YWNrLT5p
c0VtcHR5KCkpOworCisgICAgU2xvdFZpc2l0b3ImIHZpc2l0b3IgPSAqbV9jb2xsZWN0b3JTbG90
VmlzaXRvcjsKKyAgICBpdGVyYXRlRXhlY3V0aW5nQW5kQ29tcGlsaW5nQ29kZUJsb2Nrcyh2aXNp
dG9yLAogICAgICAgICBbJl0gKENvZGVCbG9jayogY29kZUJsb2NrKSB7CiAgICAgICAgICAgICB3
cml0ZUJhcnJpZXIoY29kZUJsb2NrKTsKICAgICAgICAgfSk7Ci0gICAgICAgIAorCiAgICAgdXBk
YXRlT2JqZWN0Q291bnRzKCk7CiAgICAgZW5kTWFya2luZygpOwogCisgICAgaWYgKFVOTElLRUxZ
KE9wdGlvbnM6OnZlcmlmeUdDKCkpKQorICAgICAgICB2ZXJpZnlHQygpOworCiAgICAgaWYgKFVO
TElLRUxZKG1fdmVyaWZpZXIpKSB7CiAgICAgICAgIG1fdmVyaWZpZXItPmdhdGhlckxpdmVDZWxs
cyhIZWFwVmVyaWZpZXI6OlBoYXNlOjpBZnRlck1hcmtpbmcpOwogICAgICAgICBtX3ZlcmlmaWVy
LT52ZXJpZnkoSGVhcFZlcmlmaWVyOjpQaGFzZTo6QWZ0ZXJNYXJraW5nKTsKQEAgLTIxNzAsNiAr
MjE3MCwxMSBAQCB2b2lkIEhlYXA6OnN1c3BlbmRDb21waWxlclRocmVhZHMoKQogCiB2b2lkIEhl
YXA6OndpbGxTdGFydENvbGxlY3Rpb24oKQogeworICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjp2
ZXJpZnlHQygpKSkgeworICAgICAgICBtX3ZlcmlmaWVyU2xvdFZpc2l0b3IgPSBtYWtlVW5pcXVl
PFZlcmlmaWVyU2xvdFZpc2l0b3I+KCp0aGlzKTsKKyAgICAgICAgQVNTRVJUKCFtX2lzTWFya2lu
Z0ZvckdDVmVyaWZpZXIpOworICAgIH0KKwogICAgIGRhdGFMb2dJZihPcHRpb25zOjpsb2dHQygp
LCAiPT4gIik7CiAgICAgCiAgICAgaWYgKHNob3VsZERvRnVsbENvbGxlY3Rpb24oKSkgewpAQCAt
MjcwMSw5ICsyNzA2LDE0IEBAIHZvaWQgSGVhcDo6YWRkQ29yZUNvbnN0cmFpbnRzKCkKIHsKICAg
ICBtX2NvbnN0cmFpbnRTZXQtPmFkZCgKICAgICAgICAgIkNzIiwgIkNvbnNlcnZhdGl2ZSBTY2Fu
IiwKLSAgICAgICAgW3RoaXMsIGxhc3RWZXJzaW9uID0gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KDAp
XSAoU2xvdFZpc2l0b3ImIHZpc2l0b3IpIG11dGFibGUgeworICAgICAgICBbdGhpcywgbGFzdFZl
cnNpb24gPSBzdGF0aWNfY2FzdDx1aW50NjRfdD4oMCldIChBYnN0cmFjdFNsb3RWaXNpdG9yJiB2
aXNpdG9yKSBtdXRhYmxlIHsKICAgICAgICAgICAgIGJvb2wgc2hvdWxkTm90UHJvZHVjZVdvcmsg
PSBsYXN0VmVyc2lvbiA9PSBtX3BoYXNlVmVyc2lvbjsKLSAgICAgICAgICAgIGlmIChzaG91bGRO
b3RQcm9kdWNlV29yaykKKworICAgICAgICAgICAgLy8gRm9yIHRoZSBHQyBWZXJmaWVyLCB3ZSB3
b3VsZCBsaWtlIHRvIHVzZSB0aGUgaWRlbnRpY2FsIHNldCBvZiBjb25zZXJ2YXRpdmUgcm9vdHMK
KyAgICAgICAgICAgIC8vIGFzIHRoZSByZWFsIEdDLiBPdGhlcndpc2UsIHRoZSBHQyB2ZXJpZmll
ciBtYXkgcmVwb3J0IGZhbHNlIG5lZ2F0aXZlcyBkdWUgdG8KKyAgICAgICAgICAgIC8vIHZhcmlh
dGlvbnMgaW4gc3RhY2sgdmFsdWVzLiBGb3IgdGhpcyBzYW1lIHJlYXNvbiwgd2Ugd2lsbCBza2lw
IHRoaXMgY29uc3RyYWludAorICAgICAgICAgICAgLy8gd2hlbiB3ZSdyZSBydW5uaW5nIHRoZSBH
QyB2ZXJpZmljYXRpb24gaW4gdGhlIEVuZCBwaGFzZS4KKyAgICAgICAgICAgIGlmIChzaG91bGRO
b3RQcm9kdWNlV29yayB8fCBtX2lzTWFya2luZ0ZvckdDVmVyaWZpZXIpCiAgICAgICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBUaW1pbmdTY29wZSBwcmVDb252
ZXJnZW5jZVRpbWluZ1Njb3BlKCp0aGlzLCAiQ29uc3RyYWludDogY29uc2VydmF0aXZlIHNjYW4i
KTsKQEAgLTI3MjAsMTEgKzI3MzAsMTUgQEAgdm9pZCBIZWFwOjphZGRDb3JlQ29uc3RyYWludHMo
KQogCiAgICAgICAgICAgICAgICAgU2V0Um9vdE1hcmtSZWFzb25TY29wZSByb290U2NvcGUodmlz
aXRvciwgUm9vdE1hcmtSZWFzb246OkNvbnNlcnZhdGl2ZVNjYW4pOwogICAgICAgICAgICAgICAg
IHZpc2l0b3IuYXBwZW5kKGNvbnNlcnZhdGl2ZVJvb3RzKTsKKyAgICAgICAgICAgICAgICBpZiAo
VU5MSUtFTFkobV92ZXJpZmllclNsb3RWaXNpdG9yKSkKKyAgICAgICAgICAgICAgICAgICAgbV92
ZXJpZmllclNsb3RWaXNpdG9yLT5hcHBlbmQoY29uc2VydmF0aXZlUm9vdHMpOwogICAgICAgICAg
ICAgfQogICAgICAgICAgICAgaWYgKE9wdGlvbnM6OnVzZUpJVCgpKSB7CiAgICAgICAgICAgICAg
ICAgLy8gSklUU3R1YlJvdXRpbmVzIG11c3QgYmUgdmlzaXRlZCBhZnRlciBzY2FubmluZyBDb25z
ZXJ2YXRpdmVSb290cyBzaW5jZSBKSVRTdHViUm91dGluZXMgZGVwZW5kIG9uIHRoZSBob29rIGV4
ZWN1dGVkIGR1cmluZyBnYXRoZXJpbmcgQ29uc2VydmF0aXZlUm9vdHMuCiAgICAgICAgICAgICAg
ICAgU2V0Um9vdE1hcmtSZWFzb25TY29wZSByb290U2NvcGUodmlzaXRvciwgUm9vdE1hcmtSZWFz
b246OkpJVFN0dWJSb3V0aW5lcyk7CiAgICAgICAgICAgICAgICAgbV9qaXRTdHViUm91dGluZXMt
PnRyYWNlTWFya2VkU3R1YlJvdXRpbmVzKHZpc2l0b3IpOworICAgICAgICAgICAgICAgIGlmIChV
TkxJS0VMWShtX3ZlcmlmaWVyU2xvdFZpc2l0b3IpKQorICAgICAgICAgICAgICAgICAgICBtX2pp
dFN0dWJSb3V0aW5lcy0+dHJhY2VNYXJrZWRTdHViUm91dGluZXMoKm1fdmVyaWZpZXJTbG90Vmlz
aXRvcik7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGxhc3RWZXJz
aW9uID0gbV9waGFzZVZlcnNpb247CkBAIC0yNzMzLDggKzI3NDcsNyBAQCB2b2lkIEhlYXA6OmFk
ZENvcmVDb25zdHJhaW50cygpCiAgICAgCiAgICAgbV9jb25zdHJhaW50U2V0LT5hZGQoCiAgICAg
ICAgICJNc3IiLCAiTWlzYyBTbWFsbCBSb290cyIsCi0gICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0
b3ImIHZpc2l0b3IpIHsKLQorICAgICAgICBbdGhpc10gKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZp
c2l0b3IpIHsKICNpZiBKU0NfT0JKQ19BUElfRU5BQkxFRAogICAgICAgICAgICAgc2NhbkV4dGVy
bmFsUmVtZW1iZXJlZFNldChtX3ZtLCB2aXNpdG9yKTsKICNlbmRpZgpAQCAtMjc2OCw3ICsyNzgx
LDcgQEAgdm9pZCBIZWFwOjphZGRDb3JlQ29uc3RyYWludHMoKQogICAgIAogICAgIG1fY29uc3Ry
YWludFNldC0+YWRkKAogICAgICAgICAiU2giLCAiU3Ryb25nIEhhbmRsZXMiLAotICAgICAgICBb
dGhpc10gKFNsb3RWaXNpdG9yJiB2aXNpdG9yKSB7CisgICAgICAgIFt0aGlzXSAoQWJzdHJhY3RT
bG90VmlzaXRvciYgdmlzaXRvcikgewogICAgICAgICAgICAgU2V0Um9vdE1hcmtSZWFzb25TY29w
ZSByb290U2NvcGUodmlzaXRvciwgUm9vdE1hcmtSZWFzb246OlN0cm9uZ0hhbmRsZXMpOwogICAg
ICAgICAgICAgbV9oYW5kbGVTZXQudmlzaXRTdHJvbmdIYW5kbGVzKHZpc2l0b3IpOwogICAgICAg
ICB9LApAQCAtMjc3Niw3ICsyNzg5LDcgQEAgdm9pZCBIZWFwOjphZGRDb3JlQ29uc3RyYWludHMo
KQogICAgIAogICAgIG1fY29uc3RyYWludFNldC0+YWRkKAogICAgICAgICAiRCIsICJEZWJ1Z2dl
ciIsCi0gICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsKKyAgICAgICAgW3Ro
aXNdIChBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKSB7CiAgICAgICAgICAgICBTZXRSb290
TWFya1JlYXNvblNjb3BlIHJvb3RTY29wZSh2aXNpdG9yLCBSb290TWFya1JlYXNvbjo6RGVidWdn
ZXIpOwogCiAjaWYgRU5BQkxFKFNBTVBMSU5HX1BST0ZJTEVSKQpAQCAtMjc5OSw3ICsyODEyLDcg
QEAgdm9pZCBIZWFwOjphZGRDb3JlQ29uc3RyYWludHMoKQogICAgIAogICAgIG1fY29uc3RyYWlu
dFNldC0+YWRkKAogICAgICAgICAiV3MiLCAiV2VhayBTZXRzIiwKLSAgICAgICAgW3RoaXNdIChT
bG90VmlzaXRvciYgdmlzaXRvcikgeworICAgICAgICBbdGhpc10gKEFic3RyYWN0U2xvdFZpc2l0
b3ImIHZpc2l0b3IpIHsKICAgICAgICAgICAgIFNldFJvb3RNYXJrUmVhc29uU2NvcGUgcm9vdFNj
b3BlKHZpc2l0b3IsIFJvb3RNYXJrUmVhc29uOjpXZWFrU2V0cyk7CiAgICAgICAgICAgICBtX29i
amVjdFNwYWNlLnZpc2l0V2Vha1NldHModmlzaXRvcik7CiAgICAgICAgIH0sCkBAIC0yODA3LDEw
ICsyODIwLDEwIEBAIHZvaWQgSGVhcDo6YWRkQ29yZUNvbnN0cmFpbnRzKCkKICAgICAKICAgICBt
X2NvbnN0cmFpbnRTZXQtPmFkZCgKICAgICAgICAgIk8iLCAiT3V0cHV0IiwKLSAgICAgICAgW10g
KFNsb3RWaXNpdG9yJiB2aXNpdG9yKSB7CisgICAgICAgIFtdIChBYnN0cmFjdFNsb3RWaXNpdG9y
JiB2aXNpdG9yKSB7CiAgICAgICAgICAgICBWTSYgdm0gPSB2aXNpdG9yLnZtKCk7CiAKLSAgICAg
ICAgICAgIGF1dG8gY2FsbE91dHB1dENvbnN0cmFpbnQgPSBbXSAoU2xvdFZpc2l0b3ImIHZpc2l0
b3IsIEhlYXBDZWxsKiBoZWFwQ2VsbCwgSGVhcENlbGw6OktpbmQpIHsKKyAgICAgICAgICAgIGF1
dG8gY2FsbE91dHB1dENvbnN0cmFpbnQgPSBbXSAoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRv
ciwgSGVhcENlbGwqIGhlYXBDZWxsLCBIZWFwQ2VsbDo6S2luZCkgewogICAgICAgICAgICAgICAg
IFNldFJvb3RNYXJrUmVhc29uU2NvcGUgcm9vdFNjb3BlKHZpc2l0b3IsIFJvb3RNYXJrUmVhc29u
OjpPdXRwdXQpOwogICAgICAgICAgICAgICAgIFZNJiB2bSA9IHZpc2l0b3Iudm0oKTsKICAgICAg
ICAgICAgICAgICBKU0NlbGwqIGNlbGwgPSBzdGF0aWNfY2FzdDxKU0NlbGwqPihoZWFwQ2VsbCk7
CkBAIC0yODMyLDcgKzI4NDUsNyBAQCB2b2lkIEhlYXA6OmFkZENvcmVDb25zdHJhaW50cygpCiAg
ICAgaWYgKE9wdGlvbnM6OnVzZUpJVCgpKSB7CiAgICAgICAgIG1fY29uc3RyYWludFNldC0+YWRk
KAogICAgICAgICAgICAgIkR3IiwgIkRGRyBXb3JrbGlzdHMiLAotICAgICAgICAgICAgW3RoaXNd
IChTbG90VmlzaXRvciYgdmlzaXRvcikgeworICAgICAgICAgICAgW3RoaXNdIChBYnN0cmFjdFNs
b3RWaXNpdG9yJiB2aXNpdG9yKSB7CiAgICAgICAgICAgICAgICAgU2V0Um9vdE1hcmtSZWFzb25T
Y29wZSByb290U2NvcGUodmlzaXRvciwgUm9vdE1hcmtSZWFzb246OkRGR1dvcmtMaXN0cyk7CiAK
ICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBERkc6Om51bWJlck9mV29ya2xpc3Rz
KCk7IGktLTspCkBAIC0yODQwLDcgKzI4NTMsNyBAQCB2b2lkIEhlYXA6OmFkZENvcmVDb25zdHJh
aW50cygpCiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMg
aXMgYWxtb3N0IGNlcnRhaW5seSB1bm5lY2Vzc2FyeS4KICAgICAgICAgICAgICAgICAvLyBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY2ODI5Ci0gICAgICAgICAgICAg
ICAgREZHOjppdGVyYXRlQ29kZUJsb2Nrc0ZvckdDKAorICAgICAgICAgICAgICAgIERGRzo6aXRl
cmF0ZUNvZGVCbG9ja3NGb3JHQyh2aXNpdG9yLAogICAgICAgICAgICAgICAgICAgICBtX3ZtLAog
ICAgICAgICAgICAgICAgICAgICBbJl0gKENvZGVCbG9jayogY29kZUJsb2NrKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKGNvZGVCbG9jayk7CkBA
IC0yODU1LDEyICsyODY4LDEyIEBAIHZvaWQgSGVhcDo6YWRkQ29yZUNvbnN0cmFpbnRzKCkKICAg
ICAKICAgICBtX2NvbnN0cmFpbnRTZXQtPmFkZCgKICAgICAgICAgIkNiIiwgIkNvZGVCbG9ja3Mi
LAotICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiB2aXNpdG9yKSB7CisgICAgICAgIFt0aGlz
XSAoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikgewogICAgICAgICAgICAgU2V0Um9vdE1h
cmtSZWFzb25TY29wZSByb290U2NvcGUodmlzaXRvciwgUm9vdE1hcmtSZWFzb246OkNvZGVCbG9j
a3MpOwotICAgICAgICAgICAgaXRlcmF0ZUV4ZWN1dGluZ0FuZENvbXBpbGluZ0NvZGVCbG9ja3NX
aXRob3V0SG9sZGluZ0xvY2tzKAorICAgICAgICAgICAgaXRlcmF0ZUV4ZWN1dGluZ0FuZENvbXBp
bGluZ0NvZGVCbG9ja3NXaXRob3V0SG9sZGluZ0xvY2tzKHZpc2l0b3IsCiAgICAgICAgICAgICAg
ICAgWyZdIChDb2RlQmxvY2sqIGNvZGVCbG9jaykgewogICAgICAgICAgICAgICAgICAgICAvLyBW
aXNpdCB0aGUgQ29kZUJsb2NrIGFzIGEgY29uc3RyYWludCBvbmx5IGlmIGl0J3MgYmxhY2suCi0g
ICAgICAgICAgICAgICAgICAgIGlmIChpc01hcmtlZChjb2RlQmxvY2spCisgICAgICAgICAgICAg
ICAgICAgIGlmICh2aXNpdG9yLmlzTWFya2VkKGNvZGVCbG9jaykKICAgICAgICAgICAgICAgICAg
ICAgICAgICYmIGNvZGVCbG9jay0+Y2VsbFN0YXRlKCkgPT0gQ2VsbFN0YXRlOjpQb3NzaWJseUJs
YWNrKQogICAgICAgICAgICAgICAgICAgICAgICAgdmlzaXRvci52aXNpdEFzQ29uc3RyYWludChj
b2RlQmxvY2spOwogICAgICAgICAgICAgICAgIH0pOwpAQCAtMzAyMyw0ICszMDM2LDMzIEBAIHZv
aWQgSGVhcDo6cnVuVGFza0luUGFyYWxsZWwoUmVmUHRyPFNoYXIKICAgICB9CiB9CiAKK3ZvaWQg
SGVhcDo6dmVyaWZ5R0MoKQoreworICAgIFJFTEVBU0VfQVNTRVJUKG1fdmVyaWZpZXJTbG90Vmlz
aXRvcik7CisgICAgUkVMRUFTRV9BU1NFUlQoIW1faXNNYXJraW5nRm9yR0NWZXJpZmllcik7Cisg
ICAgbV9pc01hcmtpbmdGb3JHQ1ZlcmlmaWVyID0gdHJ1ZTsKKworICAgIFZlcmlmaWVyU2xvdFZp
c2l0b3ImIHZpc2l0b3IgPSAqbV92ZXJpZmllclNsb3RWaXNpdG9yOworCisgICAgZG8geworICAg
ICAgICB2aXNpdG9yLmRyYWluKCk7CisgICAgICAgIG1fY29uc3RyYWludFNldC0+ZXhlY3V0ZUFs
bFN5bmNocm9ub3VzbHkodmlzaXRvcik7CisgICAgICAgIHZpc2l0b3IuZXhlY3V0ZUNvbnN0cmFp
bnRUYXNrcygpOworICAgIH0gd2hpbGUgKCF2aXNpdG9yLmlzRW1wdHkoKSk7CisKKyAgICBtX2lz
TWFya2luZ0ZvckdDVmVyaWZpZXIgPSBmYWxzZTsKKworICAgIHZpc2l0b3IuZm9yRWFjaExpdmVD
ZWxsKFsmXSAoSGVhcENlbGwqIGNlbGwpIHsKKyAgICAgICAgaWYgKEhlYXA6OmlzTWFya2VkKGNl
bGwpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGRhdGFMb2dMbigiXG4iICJHQyBW
ZXJpZmllcjogRVJST1IgY2VsbCAiLCBSYXdQb2ludGVyKGNlbGwpLCAiIHdhcyBub3QgbWFya2Vk
Iik7CisgICAgICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjp2ZXJib3NlVmVyaWZ5R0MoKSkpCisg
ICAgICAgICAgICB2aXNpdG9yLmR1bXBNYXJrZXJEYXRhKGNlbGwpOworICAgICAgICBSRUxFQVNF
X0FTU0VSVCh0aGlzLT5pc01hcmtlZChjZWxsKSk7CisgICAgfSk7CisKKyAgICBtX3ZlcmlmaWVy
U2xvdFZpc2l0b3IgPSBudWxscHRyOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMSw3ICsxLDcgQEAKIC8q
CiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDAgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9y
ZykKICAqICBDb3B5cmlnaHQgKEMpIDIwMDEgUGV0ZXIgS2VsbHkgKHBta0Bwb3N0LmNvbSkKLSAq
ICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwpAQCAtODYsNiArODYsNyBAQCBjbGFzcyBTcGFjZVRp
bWVNdXRhdG9yU2NoZWR1bGVyOwogY2xhc3MgU3RvcElmTmVjZXNzYXJ5VGltZXI7CiBjbGFzcyBT
d2VlcGluZ1Njb3BlOwogY2xhc3MgVk07CitjbGFzcyBWZXJpZmllclNsb3RWaXNpdG9yOwogY2xh
c3MgV2Vha0dDTWFwQmFzZTsKIHN0cnVjdCBDdXJyZW50VGhyZWFkU3RhdGU7CiAKQEAgLTE4NCw4
ICsxODUsNiBAQCBwdWJsaWM6CiAgICAgCiAgICAgYm9vbCBpc1NodXR0aW5nRG93bigpIGNvbnN0
IHsgcmV0dXJuIG1faXNTaHV0dGluZ0Rvd247IH0KIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIGJv
b2wgaXNBbmFseXppbmdIZWFwKCkgY29uc3Q7Ci0KICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lk
IHN3ZWVwU3luY2hyb25vdXNseSgpOwogCiAgICAgYm9vbCBzaG91bGRDb2xsZWN0SGV1cmlzdGlj
KCk7CkBAIC0zODUsOCArMzg0LDYgQEAgcHVibGljOgogICAgIAogICAgIEpTX0VYUE9SVF9QUklW
QVRFIHZvaWQgYWRkTWFya2luZ0NvbnN0cmFpbnQoc3RkOjp1bmlxdWVfcHRyPE1hcmtpbmdDb25z
dHJhaW50Pik7CiAgICAgCi0gICAgc2l6ZV90IG51bU9wYXF1ZVJvb3RzKCkgY29uc3QgeyByZXR1
cm4gbV9vcGFxdWVSb290cy5zaXplKCk7IH0KLQogICAgIEhlYXBWZXJpZmllciogdmVyaWZpZXIo
KSBjb25zdCB7IHJldHVybiBtX3ZlcmlmaWVyLmdldCgpOyB9CiAgICAgCiAgICAgdm9pZCBhZGRI
ZWFwRmluYWxpemVyQ2FsbGJhY2soY29uc3QgSGVhcEZpbmFsaXplckNhbGxiYWNrJik7CkBAIC01
NzYsMTAgKzU3MywxMCBAQCBwcml2YXRlOgogICAgIGJvb2wgb3ZlckNyaXRpY2FsTWVtb3J5VGhy
ZXNob2xkKE1lbW9yeVRocmVzaG9sZENhbGxUeXBlIG1lbW9yeVRocmVzaG9sZENhbGxUeXBlID0g
TWVtb3J5VGhyZXNob2xkQ2FsbFR5cGU6OkNhY2hlZCk7CiAgICAgCiAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgRnVuYz4KLSAgICB2b2lkIGl0ZXJhdGVFeGVjdXRpbmdBbmRDb21waWxpbmdDb2RlQmxv
Y2tzKGNvbnN0IEZ1bmMmKTsKKyAgICB2b2lkIGl0ZXJhdGVFeGVjdXRpbmdBbmRDb21waWxpbmdD
b2RlQmxvY2tzKEFic3RyYWN0U2xvdFZpc2l0b3ImLCBjb25zdCBGdW5jJik7CiAgICAgCiAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KLSAgICB2b2lkIGl0ZXJhdGVFeGVjdXRpbmdBbmRDb21w
aWxpbmdDb2RlQmxvY2tzV2l0aG91dEhvbGRpbmdMb2Nrcyhjb25zdCBGdW5jJik7CisgICAgdm9p
ZCBpdGVyYXRlRXhlY3V0aW5nQW5kQ29tcGlsaW5nQ29kZUJsb2Nrc1dpdGhvdXRIb2xkaW5nTG9j
a3MoQWJzdHJhY3RTbG90VmlzaXRvciYsIGNvbnN0IEZ1bmMmKTsKICAgICAKICAgICB2b2lkIGFz
c2VydE1hcmtTdGFja3NFbXB0eSgpOwogCkBAIC01OTAsNiArNTg3LDggQEAgcHJpdmF0ZToKICAg
ICBzdGF0aWMgYm9vbCB1c2VHZW5lcmF0aW9uYWxHQygpOwogICAgIHN0YXRpYyBib29sIHNob3Vs
ZFN3ZWVwU3luY2hyb25vdXNseSgpOwogICAgIAorICAgIHZvaWQgdmVyaWZ5R0MoKTsKKwogICAg
IGNvbnN0IEhlYXBUeXBlIG1faGVhcFR5cGU7CiAgICAgTXV0YXRvclN0YXRlIG1fbXV0YXRvclN0
YXRlIHsgTXV0YXRvclN0YXRlOjpSdW5uaW5nIH07CiAgICAgY29uc3Qgc2l6ZV90IG1fcmFtU2l6
ZTsKQEAgLTYzNiw2ICs2MzUsNyBAQCBwcml2YXRlOgogICAgIHN0ZDo6dW5pcXVlX3B0cjxNYXJr
U3RhY2tBcnJheT4gbV9tdXRhdG9yTWFya1N0YWNrOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxNYXJr
U3RhY2tBcnJheT4gbV9yYWNlTWFya1N0YWNrOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxNYXJraW5n
Q29uc3RyYWludFNldD4gbV9jb25zdHJhaW50U2V0OworICAgIHN0ZDo6dW5pcXVlX3B0cjxWZXJp
ZmllclNsb3RWaXNpdG9yPiBtX3ZlcmlmaWVyU2xvdFZpc2l0b3I7CiAKICAgICAvLyBXZSBwb29s
IHRoZSBzbG90IHZpc2l0b3JzIHVzZWQgYnkgcGFyYWxsZWwgbWFya2luZyB0aHJlYWRzLiBJdCdz
IHVzZWZ1bCB0byBiZSBhYmxlIHRvCiAgICAgLy8gZW51bWVyYXRlIG92ZXIgdGhlbSwgYW5kIGl0
J3MgdXNlZnVsIHRvIGhhdmUgdGhlbSBjYWNoZSBzb21lIHNtYWxsIGFtb3VudCBvZiBtZW1vcnkg
ZnJvbQpAQCAtNjU0LDYgKzY1NCw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2lzU2FmZVRvQ29s
bGVjdCB7IGZhbHNlIH07CiAgICAgYm9vbCBtX2lzU2h1dHRpbmdEb3duIHsgZmFsc2UgfTsKICAg
ICBib29sIG1fbXV0YXRvclNob3VsZEJlRmVuY2VkIHsgT3B0aW9uczo6Zm9yY2VGZW5jZWRCYXJy
aWVyKCkgfTsKKyAgICBib29sIG1faXNNYXJraW5nRm9yR0NWZXJpZmllciB7IGZhbHNlIH07CiAK
ICAgICB1bnNpZ25lZCBtX2JhcnJpZXJUaHJlc2hvbGQgeyBPcHRpb25zOjpmb3JjZUZlbmNlZEJh
cnJpZXIoKSA/IHRhdXRvbG9naWNhbFRocmVzaG9sZCA6IGJsYWNrVGhyZXNob2xkIH07CiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBJbmxpbmVzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcElubGluZXMuaAkocmV2aXNpb24gMjcy
ODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcElubGluZXMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNjksNiArNjksNyBAQCBpbmxpbmUgYm9vbCBIZWFwOjp3b3JsZElzU3RvcHBl
ZCgpIGNvbnN0CiAKIEFMV0FZU19JTkxJTkUgYm9vbCBIZWFwOjppc01hcmtlZChjb25zdCB2b2lk
KiByYXdDZWxsKQogeworICAgIEFTU0VSVCghbV9pc01hcmtpbmdGb3JHQ1ZlcmlmaWVyKTsKICAg
ICBIZWFwQ2VsbCogY2VsbCA9IGJpdHdpc2VfY2FzdDxIZWFwQ2VsbCo+KHJhd0NlbGwpOwogICAg
IGlmIChjZWxsLT5pc1ByZWNpc2VBbGxvY2F0aW9uKCkpCiAgICAgICAgIHJldHVybiBjZWxsLT5w
cmVjaXNlQWxsb2NhdGlvbigpLmlzTWFya2VkKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9IZWFwUHJvZmlsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0hlYXBQcm9maWxlci5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBQcm9maWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjAsNiAr
NjAsNyBAQCB2b2lkIEhlYXBQcm9maWxlcjo6c2V0QWN0aXZlSGVhcEFuYWx5emVyCiB7CiAgICAg
QVNTRVJUKCEhbV9hY3RpdmVBbmFseXplciAhPSAhIWFuYWx5emVyKTsKICAgICBtX2FjdGl2ZUFu
YWx5emVyID0gYW5hbHl6ZXI7CisgICAgbV92bS5zZXRBY3RpdmVIZWFwQW5hbHl6ZXIoYW5hbHl6
ZXIpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0lzb0NlbGxTZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9Jc29DZWxsU2V0LmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0lzb0NlbGxTZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNCw2ICszNCw3IEBACiAKIG5h
bWVzcGFjZSBKU0MgewogCitjbGFzcyBBYnN0cmFjdFNsb3RWaXNpdG9yOwogY2xhc3MgSGVhcENl
bGw7CiBjbGFzcyBJc29TdWJzcGFjZTsKIApAQCAtNTksNyArNjAsNyBAQCBwdWJsaWM6CiAgICAg
dm9pZCBmb3JFYWNoTWFya2VkQ2VsbChjb25zdCBGdW5jJik7CiAKICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBGdW5jPgotICAgIFJlZjxTaGFyZWRUYXNrPHZvaWQoU2xvdFZpc2l0b3ImKT4+IGZvckVh
Y2hNYXJrZWRDZWxsSW5QYXJhbGxlbChjb25zdCBGdW5jJik7CisgICAgUmVmPFNoYXJlZFRhc2s8
dm9pZChBYnN0cmFjdFNsb3RWaXNpdG9yJik+PiBmb3JFYWNoTWFya2VkQ2VsbEluUGFyYWxsZWwo
Y29uc3QgRnVuYyYpOwogICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CiAgICAgdm9p
ZCBmb3JFYWNoTGl2ZUNlbGwoY29uc3QgRnVuYyYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvSXNvQ2VsbFNldElubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9Jc29DZWxsU2V0SW5saW5lcy5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Jc29DZWxsU2V0SW5saW5lcy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTkyLDkgKzkyLDkgQEAgdm9pZCBJc29DZWxsU2V0Ojpmb3JFYWNoTWFya2VkQ2VsbChjb25z
dAogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgotUmVmPFNoYXJlZFRhc2s8dm9pZChTbG90
VmlzaXRvciYpPj4gSXNvQ2VsbFNldDo6Zm9yRWFjaE1hcmtlZENlbGxJblBhcmFsbGVsKGNvbnN0
IEZ1bmMmIGZ1bmMpCitSZWY8U2hhcmVkVGFzazx2b2lkKEFic3RyYWN0U2xvdFZpc2l0b3ImKT4+
IElzb0NlbGxTZXQ6OmZvckVhY2hNYXJrZWRDZWxsSW5QYXJhbGxlbChjb25zdCBGdW5jJiBmdW5j
KQogewotICAgIGNsYXNzIFRhc2sgZmluYWwgOiBwdWJsaWMgU2hhcmVkVGFzazx2b2lkKFNsb3RW
aXNpdG9yJik+IHsKKyAgICBjbGFzcyBUYXNrIGZpbmFsIDogcHVibGljIFNoYXJlZFRhc2s8dm9p
ZChBYnN0cmFjdFNsb3RWaXNpdG9yJik+IHsKICAgICBwdWJsaWM6CiAgICAgICAgIFRhc2soSXNv
Q2VsbFNldCYgc2V0LCBjb25zdCBGdW5jJiBmdW5jKQogICAgICAgICAgICAgOiBtX3NldChzZXQp
CkBAIC0xMDMsNyArMTAzLDcgQEAgUmVmPFNoYXJlZFRhc2s8dm9pZChTbG90VmlzaXRvciYpPj4g
SXNvQwogICAgICAgICB7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIHZvaWQgcnVuKFNs
b3RWaXNpdG9yJiB2aXNpdG9yKSBmaW5hbAorICAgICAgICB2b2lkIHJ1bihBYnN0cmFjdFNsb3RW
aXNpdG9yJiB2aXNpdG9yKSBmaW5hbAogICAgICAgICB7CiAgICAgICAgICAgICB3aGlsZSAoTWFy
a2VkQmxvY2s6OkhhbmRsZSogaGFuZGxlID0gbV9ibG9ja1NvdXJjZS0+cnVuKCkpIHsKICAgICAg
ICAgICAgICAgICB1bnNpZ25lZCBibG9ja0luZGV4ID0gaGFuZGxlLT5pbmRleCgpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSklUU3R1YlJvdXRpbmVTZXQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0pJVFN0dWJSb3V0aW5lU2V0LmNwcAko
cmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSklUU3R1YlJv
dXRpbmVTZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTItMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEyOCw3ICsxMjgsNyBAQCB2b2lkIEpJVFN0dWJS
b3V0aW5lU2V0OjpkZWxldGVVbm1hcmtlZEplCiAgICAgbV9yb3V0aW5lcy5zaHJpbmsoZHN0SW5k
ZXgpOwogfQogCi12b2lkIEpJVFN0dWJSb3V0aW5lU2V0Ojp0cmFjZU1hcmtlZFN0dWJSb3V0aW5l
cyhTbG90VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgSklUU3R1YlJvdXRpbmVTZXQ6OnRyYWNlTWFy
a2VkU3R1YlJvdXRpbmVzKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgZm9y
IChhdXRvJiBlbnRyeSA6IG1fcm91dGluZXMpIHsKICAgICAgICAgR0NBd2FyZUpJVFN0dWJSb3V0
aW5lKiByb3V0aW5lID0gZW50cnkucm91dGluZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0pJVFN0dWJSb3V0aW5lU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvSklUU3R1YlJvdXRpbmVTZXQuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSklUU3R1YlJvdXRpbmVTZXQuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxOCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTM1LDggKzM1LDggQEAgdXNpbmcgV1RGOjpSYW5nZTsKIAogbmFtZXNwYWNlIEpTQyB7
CiAKK2NsYXNzIEFic3RyYWN0U2xvdFZpc2l0b3I7CiBjbGFzcyBHQ0F3YXJlSklUU3R1YlJvdXRp
bmU7Ci1jbGFzcyBTbG90VmlzaXRvcjsKIAogI2lmIEVOQUJMRShKSVQpCiAKQEAgLTYzLDggKzYz
LDggQEAgcHVibGljOgogICAgIHZvaWQgcHJlcGFyZUZvckNvbnNlcnZhdGl2ZVNjYW4oKTsKICAg
ICAKICAgICB2b2lkIGRlbGV0ZVVubWFya2VkSmV0dGlzb25lZFN0dWJSb3V0aW5lcygpOwotICAg
IAotICAgIHZvaWQgdHJhY2VNYXJrZWRTdHViUm91dGluZXMoU2xvdFZpc2l0b3ImKTsKKworICAg
IHZvaWQgdHJhY2VNYXJrZWRTdHViUm91dGluZXMoQWJzdHJhY3RTbG90VmlzaXRvciYpOwogICAg
IAogcHJpdmF0ZToKICAgICB2b2lkIG1hcmtTbG93KHVpbnRwdHJfdCBhZGRyZXNzKTsKQEAgLTky
LDcgKzkyLDcgQEAgcHVibGljOgogICAgIHZvaWQgbWFyayh2b2lkKikgeyB9CiAgICAgdm9pZCBw
cmVwYXJlRm9yQ29uc2VydmF0aXZlU2NhbigpIHsgfQogICAgIHZvaWQgZGVsZXRlVW5tYXJrZWRK
ZXR0aXNvbmVkU3R1YlJvdXRpbmVzKCkgeyB9Ci0gICAgdm9pZCB0cmFjZU1hcmtlZFN0dWJSb3V0
aW5lcyhTbG90VmlzaXRvciYpIHsgfQorICAgIHZvaWQgdHJhY2VNYXJrZWRTdHViUm91dGluZXMo
QWJzdHJhY3RTbG90VmlzaXRvciYpIHsgfQogfTsKIAogI2VuZGlmIC8vICFFTkFCTEUoSklUKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFp
bnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtTdGFj
a01lcmdpbmdDb25zdHJhaW50LmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTI1LDcgKzI1LDYgQEAKIAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIk1hcmtT
dGFja01lcmdpbmdDb25zdHJhaW50LmgiCi0KICNpbmNsdWRlICJHQ1NlZ21lbnRlZEFycmF5SW5s
aW5lcy5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKIApAQCAtNDEsMTIgKzQwLDEyIEBAIE1h
cmtTdGFja01lcmdpbmdDb25zdHJhaW50Ojp+TWFya1N0YWNrTWUKIHsKIH0KIAotZG91YmxlIE1h
cmtTdGFja01lcmdpbmdDb25zdHJhaW50OjpxdWlja1dvcmtFc3RpbWF0ZShTbG90VmlzaXRvciYp
Citkb3VibGUgTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQ6OnF1aWNrV29ya0VzdGltYXRlKEFi
c3RyYWN0U2xvdFZpc2l0b3ImKQogewogICAgIHJldHVybiBtX2hlYXAubV9tdXRhdG9yTWFya1N0
YWNrLT5zaXplKCkgKyBtX2hlYXAubV9yYWNlTWFya1N0YWNrLT5zaXplKCk7CiB9CiAKLXZvaWQg
TWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQ6OnByZXBhcmVUb0V4ZWN1dGVJbXBsKGNvbnN0IEFi
c3RyYWN0TG9ja2VyJiwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIE1hcmtTdGFja01lcmdp
bmdDb25zdHJhaW50OjpwcmVwYXJlVG9FeGVjdXRlSW1wbChjb25zdCBBYnN0cmFjdExvY2tlciYs
IEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgLy8gTG9nZ2luZyB0aGUgd29y
ayBoZXJlIGVuc3VyZXMgdGhhdCB0aGUgY29uc3RyYWludCBzb2x2ZXIga25vd3MgdGhhdCBpdCBk
b2Vzbid0IG5lZWQgdG8gcHJvZHVjZQogICAgIC8vIGFueW1vcmUgd29yay4KQEAgLTU2LDggKzU1
LDE3IEBAIHZvaWQgTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQ6OnByZXBhcmUKICAgICBkYXRh
TG9nSWYoT3B0aW9uczo6bG9nR0MoKSwgIigiLCBzaXplLCAiKSIpOwogfQogCi12b2lkIE1hcmtT
dGFja01lcmdpbmdDb25zdHJhaW50OjpleGVjdXRlSW1wbChTbG90VmlzaXRvciYgdmlzaXRvcikK
K3ZvaWQgTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQ6OmV4ZWN1dGVJbXBsKEFic3RyYWN0U2xv
dFZpc2l0b3ImIHZpc2l0b3IpCiB7CisgICAgLy8gV2Ugd2FudCB0byBza2lwIHRoaXMgY29uc3Ry
YWludCBmb3IgdGhlIEdDIHZlcmlmaWVyIGJlY2F1c2U6CisgICAgLy8gMS4gVGhlcmUgc2hvdWxk
IGJlIG5vIG11dGF0b3IgbWFya2luZyBhY3Rpb24gYmV0d2VlbiB0aGUgRW5kIHBoYXNlIGFuZCB2
ZXJpZnlHQygpLgorICAgIC8vICAgIEhlbmNlLCB3ZSBjYW4gaWdub3JlIHRoc2Ugc3RhY2tzLgor
ICAgIC8vIDIuIFRoZSBFbmQgcGhhc2UgZXhwbGljdGx5IGNhbGxzIGl0ZXJhdGVFeGVjdXRpbmdB
bmRDb21waWxpbmdDb2RlQmxvY2tzKCkKKyAgICAvLyAgICB0byBhZGQgZXhlY3V0aW5nIENvZGVC
bG9ja3MgdG8gbV9oZWFwLm1fbXV0YXRvck1hcmtTdGFjay4gV2Ugd2FudCB0bworICAgIC8vICAg
IGxlYXZlIHRob3NlIHVucGVydHVyYmVkLgorICAgIGlmIChtX2hlYXAubV9pc01hcmtpbmdGb3JH
Q1ZlcmlmaWVyKQorICAgICAgICByZXR1cm47CisKICAgICBtX2hlYXAubV9tdXRhdG9yTWFya1N0
YWNrLT50cmFuc2ZlclRvKHZpc2l0b3IubXV0YXRvck1hcmtTdGFjaygpKTsKICAgICBtX2hlYXAu
bV9yYWNlTWFya1N0YWNrLT50cmFuc2ZlclRvKHZpc2l0b3IubXV0YXRvck1hcmtTdGFjaygpKTsK
IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtTdGFja01lcmdpbmdDb25z
dHJhaW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya1N0
YWNrTWVyZ2luZ0NvbnN0cmFpbnQuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQuaAkod29ya2luZyBjb3B5
KQpAQCAtMzAsMTggKzMwLDE4IEBACiBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgSGVhcDsKLWNs
YXNzIFNsb3RWaXNpdG9yOworY2xhc3MgQWJzdHJhY3RTbG90VmlzaXRvcjsKIAogY2xhc3MgTWFy
a1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQgZmluYWwgOiBwdWJsaWMgTWFya2luZ0NvbnN0cmFpbnQg
ewogcHVibGljOgogICAgIE1hcmtTdGFja01lcmdpbmdDb25zdHJhaW50KEhlYXAmKTsKICAgICB+
TWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQoKSBmaW5hbDsKICAgICAKLSAgICBkb3VibGUgcXVp
Y2tXb3JrRXN0aW1hdGUoU2xvdFZpc2l0b3ImKSBmaW5hbDsKKyAgICBkb3VibGUgcXVpY2tXb3Jr
RXN0aW1hdGUoQWJzdHJhY3RTbG90VmlzaXRvciYpIGZpbmFsOwogICAgIAogcHJpdmF0ZToKLSAg
ICB2b2lkIHByZXBhcmVUb0V4ZWN1dGVJbXBsKGNvbnN0IEFic3RyYWN0TG9ja2VyJiBjb25zdHJh
aW50U29sdmluZ0xvY2tlciwgU2xvdFZpc2l0b3ImKSBmaW5hbDsKLSAgICB2b2lkIGV4ZWN1dGVJ
bXBsKFNsb3RWaXNpdG9yJikgZmluYWw7CisgICAgdm9pZCBwcmVwYXJlVG9FeGVjdXRlSW1wbChj
b25zdCBBYnN0cmFjdExvY2tlciYgY29uc3RyYWludFNvbHZpbmdMb2NrZXIsIEFic3RyYWN0U2xv
dFZpc2l0b3ImKSBmaW5hbDsKKyAgICB2b2lkIGV4ZWN1dGVJbXBsKEFic3RyYWN0U2xvdFZpc2l0
b3ImKSBmaW5hbDsKICAgICAKICAgICBIZWFwJiBtX2hlYXA7CiB9OwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
MDAsNiArMjAwLDcgQEAgcHVibGljOgogICAgICAgICAKICAgICAgICAgdm9pZCogc3RhcnQoKSBj
b25zdCB7IHJldHVybiAmbV9ibG9jay0+YXRvbXMoKVswXTsgfQogICAgICAgICB2b2lkKiBlbmQo
KSBjb25zdCB7IHJldHVybiAmbV9ibG9jay0+YXRvbXMoKVttX2VuZEF0b21dOyB9CisgICAgICAg
IHZvaWQqIGF0b21BdChzaXplX3QgaSkgY29uc3QgeyByZXR1cm4gJm1fYmxvY2stPmF0b21zKClb
aV07IH0KICAgICAgICAgYm9vbCBjb250YWlucyh2b2lkKiBwKSBjb25zdCB7IHJldHVybiBzdGFy
dCgpIDw9IHAgJiYgcCA8IGVuZCgpOyB9CiAKICAgICAgICAgdm9pZCBkdW1wU3RhdGUoUHJpbnRT
dHJlYW0mKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZFNwYWNlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRTcGFjZS5j
cHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtl
ZFNwYWNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcyLDcgKzI3Miw3IEBAIHZvaWQgTWFya2Vk
U3BhY2U6OmVuYWJsZVByZWNpc2VBbGxvY2F0aW8KICAgICAgICAgbV9wcmVjaXNlQWxsb2NhdGlv
blNldC0+YWRkKGFsbG9jYXRpb24tPmNlbGwoKSk7CiB9CiAKLXZvaWQgTWFya2VkU3BhY2U6OnZp
c2l0V2Vha1NldHMoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIE1hcmtlZFNwYWNlOjp2aXNp
dFdlYWtTZXRzKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0byB2aXNp
dCA9IFsmXSAoV2Vha1NldCogd2Vha1NldCkgewogICAgICAgICB3ZWFrU2V0LT52aXNpdCh2aXNp
dG9yKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZFNwYWNlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkU3BhY2UuaAkocmV2
aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkU3BhY2Uu
aAkod29ya2luZyBjb3B5KQpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAx
OTk5LTIwMDAgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKICAqICBDb3B5cmlnaHQgKEMp
IDIwMDEgUGV0ZXIgS2VsbHkgKHBta0Bwb3N0LmNvbSkKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDMt
MjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAy
MDAzLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAg
KiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1
YmxpYwpAQCAtMzcsNiArMzcsNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAorY2xhc3MgQWJzdHJh
Y3RTbG90VmlzaXRvcjsKIGNsYXNzIENvbXBsZXRlU3Vic3BhY2U7CiBjbGFzcyBIZWFwOwogY2xh
c3MgSGVhcENlbGw7CkBAIC0xMDUsNyArMTA2LDcgQEAgcHVibGljOgogICAgIAogICAgIHZvaWQg
cHJlcGFyZUZvckFsbG9jYXRpb24oKTsKIAotICAgIHZvaWQgdmlzaXRXZWFrU2V0cyhTbG90Vmlz
aXRvciYpOworICAgIHZvaWQgdmlzaXRXZWFrU2V0cyhBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAg
ICAgdm9pZCByZWFwV2Vha1NldHMoKTsKIAogICAgIE1hcmtlZEJsb2NrU2V0JiBibG9ja3MoKSB7
IHJldHVybiBtX2Jsb2NrczsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFy
a2luZ0NvbnN0cmFpbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL01hcmtpbmdDb25zdHJhaW50LmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2
LDYgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJNYXJraW5nQ29uc3Ry
YWludC5oIgogCisjaW5jbHVkZSAiQWJzdHJhY3RTbG90VmlzaXRvcklubGluZXMuaCIKICNpbmNs
dWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiVmlzaXRDb3VudGVyLmgiCiAKQEAgLTUxLDcg
KzUyLDcgQEAgdm9pZCBNYXJraW5nQ29uc3RyYWludDo6cmVzZXRTdGF0cygpCiAgICAgbV9sYXN0
VmlzaXRDb3VudCA9IDA7CiB9CiAKLXZvaWQgTWFya2luZ0NvbnN0cmFpbnQ6OmV4ZWN1dGUoU2xv
dFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIE1hcmtpbmdDb25zdHJhaW50OjpleGVjdXRlKEFic3Ry
YWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgVmlzaXRDb3VudGVyIHZpc2l0Q291bnRl
cih2aXNpdG9yKTsKICAgICBleGVjdXRlSW1wbCh2aXNpdG9yKTsKQEAgLTYwLDE3ICs2MSwyMyBA
QCB2b2lkIE1hcmtpbmdDb25zdHJhaW50OjpleGVjdXRlKFNsb3RWaXNpCiAgICAgICAgIGRhdGFM
b2coIigiLCBhYmJyZXZpYXRlZE5hbWUoKSwgIiB2aXNpdGVkICIsIHZpc2l0Q291bnRlci52aXNp
dENvdW50KCksICIgaW4gZXhlY3V0ZSkiKTsKIH0KIAotZG91YmxlIE1hcmtpbmdDb25zdHJhaW50
OjpxdWlja1dvcmtFc3RpbWF0ZShTbG90VmlzaXRvciYpCit2b2lkIE1hcmtpbmdDb25zdHJhaW50
OjpleGVjdXRlU3luY2hyb25vdXNseShBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorewor
ICAgIHByZXBhcmVUb0V4ZWN1dGVJbXBsKE5vTG9ja2luZ05lY2Vzc2FyeSwgdmlzaXRvcik7Cisg
ICAgZXhlY3V0ZUltcGwodmlzaXRvcik7Cit9CisKK2RvdWJsZSBNYXJraW5nQ29uc3RyYWludDo6
cXVpY2tXb3JrRXN0aW1hdGUoQWJzdHJhY3RTbG90VmlzaXRvciYpCiB7CiAgICAgcmV0dXJuIDA7
CiB9CiAKLWRvdWJsZSBNYXJraW5nQ29uc3RyYWludDo6d29ya0VzdGltYXRlKFNsb3RWaXNpdG9y
JiB2aXNpdG9yKQorZG91YmxlIE1hcmtpbmdDb25zdHJhaW50Ojp3b3JrRXN0aW1hdGUoQWJzdHJh
Y3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICByZXR1cm4gbGFzdFZpc2l0Q291bnQoKSAr
IHF1aWNrV29ya0VzdGltYXRlKHZpc2l0b3IpOwogfQogCi12b2lkIE1hcmtpbmdDb25zdHJhaW50
OjpwcmVwYXJlVG9FeGVjdXRlKGNvbnN0IEFic3RyYWN0TG9ja2VyJiBjb25zdHJhaW50U29sdmlu
Z0xvY2tlciwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIE1hcmtpbmdDb25zdHJhaW50Ojpw
cmVwYXJlVG9FeGVjdXRlKGNvbnN0IEFic3RyYWN0TG9ja2VyJiBjb25zdHJhaW50U29sdmluZ0xv
Y2tlciwgQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBkYXRhTG9nSWYoT3B0
aW9uczo6bG9nR0MoKSwgYWJicmV2aWF0ZWROYW1lKCkpOwogICAgIFZpc2l0Q291bnRlciB2aXNp
dENvdW50ZXIodmlzaXRvcik7CkBAIC04MCw3ICs4Nyw3IEBAIHZvaWQgTWFya2luZ0NvbnN0cmFp
bnQ6OnByZXBhcmVUb0V4ZWN1dGUKICAgICAgICAgZGF0YUxvZygiKCIsIGFiYnJldmlhdGVkTmFt
ZSgpLCAiIHZpc2l0ZWQgIiwgdmlzaXRDb3VudGVyLnZpc2l0Q291bnQoKSwgIiBpbiBwcmVwYXJl
VG9FeGVjdXRlKSIpOwogfQogCi12b2lkIE1hcmtpbmdDb25zdHJhaW50Ojpkb1BhcmFsbGVsV29y
ayhTbG90VmlzaXRvciYgdmlzaXRvciwgU2hhcmVkVGFzazx2b2lkKFNsb3RWaXNpdG9yJik+JiB0
YXNrKQordm9pZCBNYXJraW5nQ29uc3RyYWludDo6ZG9QYXJhbGxlbFdvcmsoQWJzdHJhY3RTbG90
VmlzaXRvciYgdmlzaXRvciwgU2hhcmVkVGFzazx2b2lkKEFic3RyYWN0U2xvdFZpc2l0b3ImKT4m
IHRhc2spCiB7CiAgICAgVmlzaXRDb3VudGVyIHZpc2l0Q291bnRlcih2aXNpdG9yKTsKICAgICB0
YXNrLnJ1bih2aXNpdG9yKTsKQEAgLTkyLDcgKzk5LDcgQEAgdm9pZCBNYXJraW5nQ29uc3RyYWlu
dDo6ZG9QYXJhbGxlbFdvcmsoUwogICAgIH0KIH0KIAotdm9pZCBNYXJraW5nQ29uc3RyYWludDo6
cHJlcGFyZVRvRXhlY3V0ZUltcGwoY29uc3QgQWJzdHJhY3RMb2NrZXImLCBTbG90VmlzaXRvciYp
Cit2b2lkIE1hcmtpbmdDb25zdHJhaW50OjpwcmVwYXJlVG9FeGVjdXRlSW1wbChjb25zdCBBYnN0
cmFjdExvY2tlciYsIEFic3RyYWN0U2xvdFZpc2l0b3ImKQogewogfQogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50LmgJKHJldmlzaW9uIDI3
MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0y
MDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMzgsNyArMzgsNyBAQAogbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIE1h
cmtpbmdDb25zdHJhaW50U2V0OwotY2xhc3MgU2xvdFZpc2l0b3I7CitjbGFzcyBBYnN0cmFjdFNs
b3RWaXNpdG9yOwogCiBjbGFzcyBNYXJraW5nQ29uc3RyYWludCB7CiAgICAgV1RGX01BS0VfTk9O
Q09QWUFCTEUoTWFya2luZ0NvbnN0cmFpbnQpOwpAQCAtNjAsMTUgKzYwLDE1IEBAIHB1YmxpYzoK
ICAgICAKICAgICBzaXplX3QgbGFzdFZpc2l0Q291bnQoKSBjb25zdCB7IHJldHVybiBtX2xhc3RW
aXNpdENvdW50OyB9CiAgICAgCi0gICAgdm9pZCBleGVjdXRlKFNsb3RWaXNpdG9yJik7Ci0gICAg
Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgdmlydHVhbCBkb3VibGUgcXVpY2tXb3JrRXN0aW1hdGUo
U2xvdFZpc2l0b3ImIHZpc2l0b3IpOworICAgIHZvaWQgZXhlY3V0ZShBYnN0cmFjdFNsb3RWaXNp
dG9yJik7CisKKyAgICBKU19FWFBPUlRfUFJJVkFURSB2aXJ0dWFsIGRvdWJsZSBxdWlja1dvcmtF
c3RpbWF0ZShBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAgICAgCi0gICAgZG91YmxlIHdvcmtFc3Rp
bWF0ZShTbG90VmlzaXRvciYgdmlzaXRvcik7CisgICAgZG91YmxlIHdvcmtFc3RpbWF0ZShBYnN0
cmFjdFNsb3RWaXNpdG9yJik7CiAgICAgCi0gICAgdm9pZCBwcmVwYXJlVG9FeGVjdXRlKGNvbnN0
IEFic3RyYWN0TG9ja2VyJiBjb25zdHJhaW50U29sdmluZ0xvY2tlciwgU2xvdFZpc2l0b3ImKTsK
KyAgICB2b2lkIHByZXBhcmVUb0V4ZWN1dGUoY29uc3QgQWJzdHJhY3RMb2NrZXImIGNvbnN0cmFp
bnRTb2x2aW5nTG9ja2VyLCBBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAgICAgCi0gICAgdm9pZCBk
b1BhcmFsbGVsV29yayhTbG90VmlzaXRvciYsIFNoYXJlZFRhc2s8dm9pZChTbG90VmlzaXRvciYp
PiYpOworICAgIHZvaWQgZG9QYXJhbGxlbFdvcmsoQWJzdHJhY3RTbG90VmlzaXRvciYsIFNoYXJl
ZFRhc2s8dm9pZChBYnN0cmFjdFNsb3RWaXNpdG9yJik+Jik7CiAgICAgCiAgICAgQ29uc3RyYWlu
dFZvbGF0aWxpdHkgdm9sYXRpbGl0eSgpIGNvbnN0IHsgcmV0dXJuIG1fdm9sYXRpbGl0eTsgfQog
ICAgIApAQCAtNzYsOSArNzYsMTEgQEAgcHVibGljOgogICAgIENvbnN0cmFpbnRQYXJhbGxlbGlz
bSBwYXJhbGxlbGlzbSgpIGNvbnN0IHsgcmV0dXJuIG1fcGFyYWxsZWxpc207IH0KIAogcHJvdGVj
dGVkOgotICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlSW1wbChTbG90VmlzaXRvciYpID0gMDsKLSAg
ICBKU19FWFBPUlRfUFJJVkFURSB2aXJ0dWFsIHZvaWQgcHJlcGFyZVRvRXhlY3V0ZUltcGwoY29u
c3QgQWJzdHJhY3RMb2NrZXImIGNvbnN0cmFpbnRTb2x2aW5nTG9ja2VyLCBTbG90VmlzaXRvciYp
OwotICAgIAorICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlSW1wbChBYnN0cmFjdFNsb3RWaXNpdG9y
JikgPSAwOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZpcnR1YWwgdm9pZCBwcmVwYXJlVG9FeGVj
dXRlSW1wbChjb25zdCBBYnN0cmFjdExvY2tlciYgY29uc3RyYWludFNvbHZpbmdMb2NrZXIsIEFi
c3RyYWN0U2xvdFZpc2l0b3ImKTsKKworICAgIHZvaWQgZXhlY3V0ZVN5bmNocm9ub3VzbHkoQWJz
dHJhY3RTbG90VmlzaXRvciYpOworCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBNYXJraW5n
Q29uc3RyYWludFNldDsgLy8gU28gaXQgY2FuIHNldCBtX2luZGV4LgogICAgIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnRTZXQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50U2V0LmNw
cAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2lu
Z0NvbnN0cmFpbnRTZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTYzLDcgKzYzLDcgQEAgdm9pZCBNYXJr
aW5nQ29uc3RyYWludFNldDo6ZGlkU3RhcnRNYXJraQogICAgIG1faXRlcmF0aW9uID0gMTsKIH0K
IAotdm9pZCBNYXJraW5nQ29uc3RyYWludFNldDo6YWRkKENTdHJpbmcgYWJicmV2aWF0ZWROYW1l
LCBDU3RyaW5nIG5hbWUsIDo6RnVuY3Rpb248dm9pZChTbG90VmlzaXRvciYpPiBmdW5jdGlvbiwg
Q29uc3RyYWludFZvbGF0aWxpdHkgdm9sYXRpbGl0eSwgQ29uc3RyYWludENvbmN1cnJlbmN5IGNv
bmN1cnJlbmN5LCBDb25zdHJhaW50UGFyYWxsZWxpc20gcGFyYWxsZWxpc20pCit2b2lkIE1hcmtp
bmdDb25zdHJhaW50U2V0OjphZGQoQ1N0cmluZyBhYmJyZXZpYXRlZE5hbWUsIENTdHJpbmcgbmFt
ZSwgOjpGdW5jdGlvbjx2b2lkKEFic3RyYWN0U2xvdFZpc2l0b3ImKT4gZnVuY3Rpb24sIENvbnN0
cmFpbnRWb2xhdGlsaXR5IHZvbGF0aWxpdHksIENvbnN0cmFpbnRDb25jdXJyZW5jeSBjb25jdXJy
ZW5jeSwgQ29uc3RyYWludFBhcmFsbGVsaXNtIHBhcmFsbGVsaXNtKQogewogICAgIGFkZChtYWtl
VW5pcXVlPFNpbXBsZU1hcmtpbmdDb25zdHJhaW50PihXVEZNb3ZlKGFiYnJldmlhdGVkTmFtZSks
IFdURk1vdmUobmFtZSksIFdURk1vdmUoZnVuY3Rpb24pLCB2b2xhdGlsaXR5LCBjb25jdXJyZW5j
eSwgcGFyYWxsZWxpc20pKTsKIH0KQEAgLTc4LDE0ICs3OCwxNCBAQCB2b2lkIE1hcmtpbmdDb25z
dHJhaW50U2V0OjphZGQoCiAgICAgbV9zZXQuYXBwZW5kKFdURk1vdmUoY29uc3RyYWludCkpOwog
fQogCi1ib29sIE1hcmtpbmdDb25zdHJhaW50U2V0OjpleGVjdXRlQ29udmVyZ2VuY2UoU2xvdFZp
c2l0b3ImIHZpc2l0b3IpCitib29sIE1hcmtpbmdDb25zdHJhaW50U2V0OjpleGVjdXRlQ29udmVy
Z2VuY2UoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBib29sIHJlc3VsdCA9
IGV4ZWN1dGVDb252ZXJnZW5jZUltcGwodmlzaXRvcik7CiAgICAgZGF0YUxvZ0lmKE9wdGlvbnM6
OmxvZ0dDKCksICIgIik7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotYm9vbCBNYXJraW5nQ29u
c3RyYWludFNldDo6aXNXYXZlZnJvbnRBZHZhbmNpbmcoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiti
b29sIE1hcmtpbmdDb25zdHJhaW50U2V0Ojppc1dhdmVmcm9udEFkdmFuY2luZyhBYnN0cmFjdFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGZvciAoTWFya2luZ0NvbnN0cmFpbnQqIG91dGdy
b3d0aCA6IG1fb3V0Z3Jvd3RocykgewogICAgICAgICBpZiAob3V0Z3Jvd3RoLT53b3JrRXN0aW1h
dGUodmlzaXRvcikpCkBAIC05NCw3ICs5NCw3IEBAIGJvb2wgTWFya2luZ0NvbnN0cmFpbnRTZXQ6
OmlzV2F2ZWZyb250QWQKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgTWFya2luZ0NvbnN0
cmFpbnRTZXQ6OmV4ZWN1dGVDb252ZXJnZW5jZUltcGwoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiti
b29sIE1hcmtpbmdDb25zdHJhaW50U2V0OjpleGVjdXRlQ29udmVyZ2VuY2VJbXBsKEFic3RyYWN0
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgU3VwZXJTYW1wbGVyU2NvcGUgc3VwZXJTYW1w
bGVyU2NvcGUoZmFsc2UpOwogICAgIE1hcmtpbmdDb25zdHJhaW50U29sdmVyIHNvbHZlcigqdGhp
cyk7CkBAIC0xNjYsMTAgKzE2NiwxMCBAQCBib29sIE1hcmtpbmdDb25zdHJhaW50U2V0OjpleGVj
dXRlQ29udmVyCiAgICAgcmV0dXJuICFzb2x2ZXIuZGlkVmlzaXRTb21ldGhpbmcoKTsKIH0KIAot
dm9pZCBNYXJraW5nQ29uc3RyYWludFNldDo6ZXhlY3V0ZUFsbChTbG90VmlzaXRvciYgdmlzaXRv
cikKK3ZvaWQgTWFya2luZ0NvbnN0cmFpbnRTZXQ6OmV4ZWN1dGVBbGxTeW5jaHJvbm91c2x5KEFi
c3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgZm9yIChhdXRvJiBjb25zdHJhaW50
IDogbV9zZXQpCi0gICAgICAgIGNvbnN0cmFpbnQtPmV4ZWN1dGUodmlzaXRvcik7CisgICAgICAg
IGNvbnN0cmFpbnQtPmV4ZWN1dGVTeW5jaHJvbm91c2x5KHZpc2l0b3IpOwogICAgIGRhdGFMb2dJ
ZihPcHRpb25zOjpsb2dHQygpLCAiICIpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9NYXJraW5nQ29uc3RyYWludFNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50U2V0LmgJKHJldmlzaW9uIDI3MjgzMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50U2V0LmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtNDYsMTQgKzQ2LDE0IEBAIHB1YmxpYzoKICAgICB2b2lkIGFkZCgKICAgICAg
ICAgQ1N0cmluZyBhYmJyZXZpYXRlZE5hbWUsCiAgICAgICAgIENTdHJpbmcgbmFtZSwKLSAgICAg
ICAgOjpGdW5jdGlvbjx2b2lkKFNsb3RWaXNpdG9yJik+LAorICAgICAgICA6OkZ1bmN0aW9uPHZv
aWQoQWJzdHJhY3RTbG90VmlzaXRvciYpPiwKICAgICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHks
CiAgICAgICAgIENvbnN0cmFpbnRDb25jdXJyZW5jeSA9IENvbnN0cmFpbnRDb25jdXJyZW5jeTo6
Q29uY3VycmVudCwKICAgICAgICAgQ29uc3RyYWludFBhcmFsbGVsaXNtID0gQ29uc3RyYWludFBh
cmFsbGVsaXNtOjpTZXF1ZW50aWFsKTsKICAgICAKICAgICB2b2lkIGFkZCgKICAgICAgICAgQ1N0
cmluZyBhYmJyZXZpYXRlZE5hbWUsIENTdHJpbmcgbmFtZSwKLSAgICAgICAgOjpGdW5jdGlvbjx2
b2lkKFNsb3RWaXNpdG9yJik+IGZ1bmMsCisgICAgICAgIDo6RnVuY3Rpb248dm9pZChBYnN0cmFj
dFNsb3RWaXNpdG9yJik+IGZ1bmMsCiAgICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5IHZvbGF0
aWxpdHksCiAgICAgICAgIENvbnN0cmFpbnRQYXJhbGxlbGlzbSBwYXJhbGxlbGlzbSkKICAgICB7
CkBAIC02NCwyMCArNjQsMjAgQEAgcHVibGljOgogICAgIAogICAgIC8vIEFzc3VtaW5nIHRoYXQg
dGhlIG1hcmsgc3RhY2tzIGFyZSBhbGwgZW1wdHksIHRoaXMgd2lsbCBnaXZlIHlvdSBhIGd1ZXNz
IGFzIHRvIHdoZXRoZXIgb3IKICAgICAvLyBub3QgdGhlIHdhdmVmcm9udCBpcyBhZHZhbmNpbmcu
Ci0gICAgYm9vbCBpc1dhdmVmcm9udEFkdmFuY2luZyhTbG90VmlzaXRvciYpOwotICAgIGJvb2wg
aXNXYXZlZnJvbnRSZXRyZWF0aW5nKFNsb3RWaXNpdG9yJiB2aXNpdG9yKSB7IHJldHVybiAhaXNX
YXZlZnJvbnRBZHZhbmNpbmcodmlzaXRvcik7IH0KKyAgICBib29sIGlzV2F2ZWZyb250QWR2YW5j
aW5nKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKKyAgICBib29sIGlzV2F2ZWZyb250UmV0cmVhdGlu
ZyhBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKSB7IHJldHVybiAhaXNXYXZlZnJvbnRBZHZh
bmNpbmcodmlzaXRvcik7IH0KICAgICAKICAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhpcyBleGVj
dXRlZCBhbGwgY29uc3RyYWludHMgYW5kIG5vbmUgb2YgdGhlbSBwcm9kdWNlZCBuZXcgd29yay4g
VGhpcwogICAgIC8vIGFzc3VtZXMgdGhhdCB5b3UndmUgYWxyYWVkeSB2aXNpdGVkIHJvb3RzIGFu
ZCBkcmFpbmVkIGZyb20gdGhlcmUuCi0gICAgYm9vbCBleGVjdXRlQ29udmVyZ2VuY2UoU2xvdFZp
c2l0b3ImKTsKLSAgICAKKyAgICBib29sIGV4ZWN1dGVDb252ZXJnZW5jZShBYnN0cmFjdFNsb3RW
aXNpdG9yJik7CisKICAgICAvLyBTaW1wbHkgcnVucyBhbGwgY29uc3RyYWludHMgd2l0aG91dCBh
bnkgc2hlbmFuaWdhbnMuCi0gICAgdm9pZCBleGVjdXRlQWxsKFNsb3RWaXNpdG9yJik7CisgICAg
dm9pZCBleGVjdXRlQWxsU3luY2hyb25vdXNseShBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAgICAg
CiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBNYXJraW5nQ29uc3RyYWludFNvbHZlcjsKLSAg
ICAKLSAgICBib29sIGV4ZWN1dGVDb252ZXJnZW5jZUltcGwoU2xvdFZpc2l0b3ImKTsKKworICAg
IGJvb2wgZXhlY3V0ZUNvbnZlcmdlbmNlSW1wbChBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAgICAg
CiAgICAgSGVhcCYgbV9oZWFwOwogICAgIEJpdFZlY3RvciBtX3VuZXhlY3V0ZWRSb290czsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50U29sdmVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3Ry
YWludFNvbHZlci5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL01hcmtpbmdDb25zdHJhaW50U29sdmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xNTAsMTMg
KzE1MCwxMyBAQCB2b2lkIE1hcmtpbmdDb25zdHJhaW50U29sdmVyOjpleGVjdXRlKE1hCiAgICAg
bV9leGVjdXRlZC5zZXQoY29uc3RyYWludC5pbmRleCgpKTsKIH0KIAotdm9pZCBNYXJraW5nQ29u
c3RyYWludFNvbHZlcjo6YWRkUGFyYWxsZWxUYXNrKFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoU2xv
dFZpc2l0b3ImKT4+IHRhc2ssIE1hcmtpbmdDb25zdHJhaW50JiBjb25zdHJhaW50KQordm9pZCBN
YXJraW5nQ29uc3RyYWludFNvbHZlcjo6YWRkUGFyYWxsZWxUYXNrKFJlZlB0cjxTaGFyZWRUYXNr
PHZvaWQoQWJzdHJhY3RTbG90VmlzaXRvciYpPj4gdGFzaywgTWFya2luZ0NvbnN0cmFpbnQmIGNv
bnN0cmFpbnQpCiB7CiAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOwogICAgIG1f
dG9FeGVjdXRlSW5QYXJhbGxlbC5hcHBlbmQoVGFza1dpdGhDb25zdHJhaW50KFdURk1vdmUodGFz
ayksICZjb25zdHJhaW50KSk7CiB9CiAKLXZvaWQgTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXI6OnJ1
bkV4ZWN1dGlvblRocmVhZChTbG90VmlzaXRvciYgdmlzaXRvciwgU2NoZWR1bGVyUHJlZmVyZW5j
ZSBwcmVmZXJlbmNlLCBTY29wZWRMYW1iZGE8T3B0aW9uYWw8dW5zaWduZWQ+KCk+IHBpY2tOZXh0
KQordm9pZCBNYXJraW5nQ29uc3RyYWludFNvbHZlcjo6cnVuRXhlY3V0aW9uVGhyZWFkKEFic3Ry
YWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIFNjaGVkdWxlclByZWZlcmVuY2UgcHJlZmVyZW5jZSwg
U2NvcGVkTGFtYmRhPE9wdGlvbmFsPHVuc2lnbmVkPigpPiBwaWNrTmV4dCkKIHsKICAgICBmb3Ig
KDs7KSB7CiAgICAgICAgIGJvb2wgZG9QYXJhbGxlbFdvcmtNb2RlOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXIuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludFNvbHZlci5oCShy
ZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29u
c3RyYWludFNvbHZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY1LDE1ICs2NSwxNSBAQCBwdWJsaWM6CiAg
ICAgdm9pZCBleGVjdXRlKE1hcmtpbmdDb25zdHJhaW50Jik7CiAgICAgCiAgICAgLy8gUGFyYWxs
ZWwgY29uc3RyYWludHMgY2FuIGFkZCBwYXJhbGxlbCB0YXNrcy4KLSAgICB2b2lkIGFkZFBhcmFs
bGVsVGFzayhSZWZQdHI8U2hhcmVkVGFzazx2b2lkKFNsb3RWaXNpdG9yJik+PiwgTWFya2luZ0Nv
bnN0cmFpbnQmKTsKKyAgICB2b2lkIGFkZFBhcmFsbGVsVGFzayhSZWZQdHI8U2hhcmVkVGFzazx2
b2lkKEFic3RyYWN0U2xvdFZpc2l0b3ImKT4+LCBNYXJraW5nQ29uc3RyYWludCYpOwogICAgIAog
cHJpdmF0ZToKLSAgICB2b2lkIHJ1bkV4ZWN1dGlvblRocmVhZChTbG90VmlzaXRvciYsIFNjaGVk
dWxlclByZWZlcmVuY2UsIFNjb3BlZExhbWJkYTxPcHRpb25hbDx1bnNpZ25lZD4oKT4gcGlja05l
eHQpOworICAgIHZvaWQgcnVuRXhlY3V0aW9uVGhyZWFkKEFic3RyYWN0U2xvdFZpc2l0b3ImLCBT
Y2hlZHVsZXJQcmVmZXJlbmNlLCBTY29wZWRMYW1iZGE8T3B0aW9uYWw8dW5zaWduZWQ+KCk+IHBp
Y2tOZXh0KTsKICAgICAKICAgICBzdHJ1Y3QgVGFza1dpdGhDb25zdHJhaW50IHsKICAgICAgICAg
VGFza1dpdGhDb25zdHJhaW50KCkgeyB9CiAgICAgICAgIAotICAgICAgICBUYXNrV2l0aENvbnN0
cmFpbnQoUmVmUHRyPFNoYXJlZFRhc2s8dm9pZChTbG90VmlzaXRvciYpPj4gdGFzaywgTWFya2lu
Z0NvbnN0cmFpbnQqIGNvbnN0cmFpbnQpCisgICAgICAgIFRhc2tXaXRoQ29uc3RyYWludChSZWZQ
dHI8U2hhcmVkVGFzazx2b2lkKEFic3RyYWN0U2xvdFZpc2l0b3ImKT4+IHRhc2ssIE1hcmtpbmdD
b25zdHJhaW50KiBjb25zdHJhaW50KQogICAgICAgICAgICAgOiB0YXNrKFdURk1vdmUodGFzaykp
CiAgICAgICAgICAgICAsIGNvbnN0cmFpbnQoY29uc3RyYWludCkKICAgICAgICAgewpAQCAtODUs
MTIgKzg1LDEyIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgJiYgY29uc3RyYWludCA9PSBv
dGhlci5jb25zdHJhaW50OwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBSZWZQdHI8U2hh
cmVkVGFzazx2b2lkKFNsb3RWaXNpdG9yJik+PiB0YXNrOworICAgICAgICBSZWZQdHI8U2hhcmVk
VGFzazx2b2lkKEFic3RyYWN0U2xvdFZpc2l0b3ImKT4+IHRhc2s7CiAgICAgICAgIE1hcmtpbmdD
b25zdHJhaW50KiBjb25zdHJhaW50IHsgbnVsbHB0ciB9OwogICAgIH07CiAgICAgCiAgICAgSGVh
cCYgbV9oZWFwOwotICAgIFNsb3RWaXNpdG9yJiBtX21haW5WaXNpdG9yOworICAgIEFic3RyYWN0
U2xvdFZpc2l0b3ImIG1fbWFpblZpc2l0b3I7CiAgICAgTWFya2luZ0NvbnN0cmFpbnRTZXQmIG1f
c2V0OwogICAgIEJpdFZlY3RvciBtX2V4ZWN1dGVkOwogICAgIERlcXVlPFRhc2tXaXRoQ29uc3Ry
YWludCwgMzI+IG1fdG9FeGVjdXRlSW5QYXJhbGxlbDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL1NpbXBsZU1hcmtpbmdDb25zdHJhaW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TaW1wbGVNYXJraW5nQ29uc3RyYWludC5jcHAJKHJldmlz
aW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1NpbXBsZU1hcmtpbmdD
b25zdHJhaW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMCw3ICszMCw3IEBAIG5hbWVzcGFjZSBKU0Mg
ewogCiBTaW1wbGVNYXJraW5nQ29uc3RyYWludDo6U2ltcGxlTWFya2luZ0NvbnN0cmFpbnQoCiAg
ICAgQ1N0cmluZyBhYmJyZXZpYXRlZE5hbWUsIENTdHJpbmcgbmFtZSwKLSAgICA6OkZ1bmN0aW9u
PHZvaWQoU2xvdFZpc2l0b3ImKT4gZXhlY3V0ZUZ1bmN0aW9uLAorICAgIDo6RnVuY3Rpb248dm9p
ZChBYnN0cmFjdFNsb3RWaXNpdG9yJik+IGV4ZWN1dGVGdW5jdGlvbiwKICAgICBDb25zdHJhaW50
Vm9sYXRpbGl0eSB2b2xhdGlsaXR5LCBDb25zdHJhaW50Q29uY3VycmVuY3kgY29uY3VycmVuY3ks
CiAgICAgQ29uc3RyYWludFBhcmFsbGVsaXNtIHBhcmFsbGVsaXNtKQogICAgIDogTWFya2luZ0Nv
bnN0cmFpbnQoV1RGTW92ZShhYmJyZXZpYXRlZE5hbWUpLCBXVEZNb3ZlKG5hbWUpLCB2b2xhdGls
aXR5LCBjb25jdXJyZW5jeSwgcGFyYWxsZWxpc20pCkBAIC00Miw3ICs0Miw3IEBAIFNpbXBsZU1h
cmtpbmdDb25zdHJhaW50Ojp+U2ltcGxlTWFya2luZ0MKIHsKIH0KIAotdm9pZCBTaW1wbGVNYXJr
aW5nQ29uc3RyYWludDo6ZXhlY3V0ZUltcGwoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIFNp
bXBsZU1hcmtpbmdDb25zdHJhaW50OjpleGVjdXRlSW1wbChBYnN0cmFjdFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQogewogICAgIG1fZXhlY3V0ZUZ1bmN0aW9uKHZpc2l0b3IpOwogfQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TaW1wbGVNYXJraW5nQ29uc3RyYWlu
dC5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TaW1w
bGVNYXJraW5nQ29uc3RyYWludC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM3LDE0ICszNywxNCBAQCBjbGFz
cyBTaW1wbGVNYXJraW5nQ29uc3RyYWludCBmaW5hbCA6IHB1CiBwdWJsaWM6CiAgICAgSlNfRVhQ
T1JUX1BSSVZBVEUgU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQoCiAgICAgICAgIENTdHJpbmcgYWJi
cmV2aWF0ZWROYW1lLCBDU3RyaW5nIG5hbWUsCi0gICAgICAgIDo6RnVuY3Rpb248dm9pZChTbG90
VmlzaXRvciYpPiwKKyAgICAgICAgOjpGdW5jdGlvbjx2b2lkKEFic3RyYWN0U2xvdFZpc2l0b3Im
KT4sCiAgICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5LAogICAgICAgICBDb25zdHJhaW50Q29u
Y3VycmVuY3kgPSBDb25zdHJhaW50Q29uY3VycmVuY3k6OkNvbmN1cnJlbnQsCiAgICAgICAgIENv
bnN0cmFpbnRQYXJhbGxlbGlzbSA9IENvbnN0cmFpbnRQYXJhbGxlbGlzbTo6U2VxdWVudGlhbCk7
CiAgICAgCiAgICAgU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQoCiAgICAgICAgIENTdHJpbmcgYWJi
cmV2aWF0ZWROYW1lLCBDU3RyaW5nIG5hbWUsCi0gICAgICAgIDo6RnVuY3Rpb248dm9pZChTbG90
VmlzaXRvciYpPiBmdW5jLAorICAgICAgICA6OkZ1bmN0aW9uPHZvaWQoQWJzdHJhY3RTbG90Vmlz
aXRvciYpPiBmdW5jLAogICAgICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eSB2b2xhdGlsaXR5LAog
ICAgICAgICBDb25zdHJhaW50UGFyYWxsZWxpc20gcGFyYWxsZWxpc20pCiAgICAgICAgIDogU2lt
cGxlTWFya2luZ0NvbnN0cmFpbnQoYWJicmV2aWF0ZWROYW1lLCBuYW1lLCBXVEZNb3ZlKGZ1bmMp
LCB2b2xhdGlsaXR5LCBDb25zdHJhaW50Q29uY3VycmVuY3k6OkNvbmN1cnJlbnQsIHBhcmFsbGVs
aXNtKQpAQCAtNTQsOSArNTQsOSBAQCBwdWJsaWM6CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgflNp
bXBsZU1hcmtpbmdDb25zdHJhaW50KCkgZmluYWw7CiAgICAgCiBwcml2YXRlOgotICAgIHZvaWQg
ZXhlY3V0ZUltcGwoU2xvdFZpc2l0b3ImKSBmaW5hbDsKKyAgICB2b2lkIGV4ZWN1dGVJbXBsKEFi
c3RyYWN0U2xvdFZpc2l0b3ImKSBmaW5hbDsKIAotICAgIDo6RnVuY3Rpb248dm9pZChTbG90Vmlz
aXRvciYpPiBtX2V4ZWN1dGVGdW5jdGlvbjsKKyAgICA6OkZ1bmN0aW9uPHZvaWQoQWJzdHJhY3RT
bG90VmlzaXRvciYpPiBtX2V4ZWN1dGVGdW5jdGlvbjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpT
QwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmNwcAkocmV2
aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3Iu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMi0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNzcsMTUgKzc3LDEwIEBAIHN0YXRpYyB2b2lkIHZhbGlk
YXRlKEpTQ2VsbCogY2VsbCkKICNlbmRpZgogCiBTbG90VmlzaXRvcjo6U2xvdFZpc2l0b3IoSGVh
cCYgaGVhcCwgQ1N0cmluZyBjb2RlTmFtZSkKLSAgICA6IG1fYnl0ZXNWaXNpdGVkKDApCi0gICAg
LCBtX3Zpc2l0Q291bnQoMCkKLSAgICAsIG1faXNJblBhcmFsbGVsTW9kZShmYWxzZSkKKyAgICA6
IEJhc2UoaGVhcCwgY29kZU5hbWUsIGhlYXAubV9vcGFxdWVSb290cykKICAgICAsIG1fbWFya2lu
Z1ZlcnNpb24oTWFya2VkU3BhY2U6OmluaXRpYWxWZXJzaW9uKQotICAgICwgbV9oZWFwKGhlYXAp
Ci0gICAgLCBtX2NvZGVOYW1lKGNvZGVOYW1lKQogI2lmIEFTU0VSVF9FTkFCTEVECiAgICAgLCBt
X2lzQ2hlY2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlvbihmYWxzZSkKLSAgICAsIG1faXNEcmFp
bmluZyhmYWxzZSkKICNlbmRpZgogewogfQpAQCAtMTE3LDggKzExMiw4IEBAIHZvaWQgU2xvdFZp
c2l0b3I6OmRpZFN0YXJ0TWFya2luZygpCiAKIHZvaWQgU2xvdFZpc2l0b3I6OnJlc2V0KCkKIHsK
KyAgICBBYnN0cmFjdFNsb3RWaXNpdG9yOjpyZXNldCgpOwogICAgIG1fYnl0ZXNWaXNpdGVkID0g
MDsKLSAgICBtX3Zpc2l0Q291bnQgPSAwOwogICAgIG1faGVhcEFuYWx5emVyID0gbnVsbHB0cjsK
ICAgICBSRUxFQVNFX0FTU0VSVCghbV9jdXJyZW50Q2VsbCk7CiB9CkBAIC0yMzAsNyArMjI1LDcg
QEAgdm9pZCBTbG90VmlzaXRvcjo6YXBwZW5kSlNDZWxsT3JBdXhpbGlhcgogdm9pZCBTbG90Vmlz
aXRvcjo6YXBwZW5kU2xvdyhKU0NlbGwqIGNlbGwsIERlcGVuZGVuY3kgZGVwZW5kZW5jeSkKIHsK
ICAgICBpZiAoVU5MSUtFTFkobV9oZWFwQW5hbHl6ZXIpKQotICAgICAgICBtX2hlYXBBbmFseXpl
ci0+YW5hbHl6ZUVkZ2UobV9jdXJyZW50Q2VsbCwgY2VsbCwgbV9yb290TWFya1JlYXNvbik7Cisg
ICAgICAgIG1faGVhcEFuYWx5emVyLT5hbmFseXplRWRnZShtX2N1cnJlbnRDZWxsLCBjZWxsLCBy
b290TWFya1JlYXNvbigpKTsKIAogICAgIGFwcGVuZEhpZGRlblNsb3dJbXBsKGNlbGwsIGRlcGVu
ZGVuY3kpOwogfQpAQCAtODA3LDEyICs4MDIsMTIgQEAgTWFya1N0YWNrQXJyYXkmIFNsb3RWaXNp
dG9yOjpjb3JyZXNwb25kaQogICAgIHJldHVybiAqbV9oZWFwLm1fc2hhcmVkTXV0YXRvck1hcmtT
dGFjazsKIH0KIAotdm9pZCBTbG90VmlzaXRvcjo6YWRkUGFyYWxsZWxDb25zdHJhaW50VGFzayhS
ZWZQdHI8U2hhcmVkVGFzazx2b2lkKFNsb3RWaXNpdG9yJik+PiB0YXNrKQordm9pZCBTbG90Vmlz
aXRvcjo6YWRkUGFyYWxsZWxDb25zdHJhaW50VGFzayhSZWZQdHI8U2hhcmVkVGFzazx2b2lkKEFi
c3RyYWN0U2xvdFZpc2l0b3ImKT4+IHRhc2spCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQobV9jdXJy
ZW50U29sdmVyKTsKICAgICBSRUxFQVNFX0FTU0VSVChtX2N1cnJlbnRDb25zdHJhaW50KTsKICAg
ICBSRUxFQVNFX0FTU0VSVCh0YXNrKTsKLSAgICAKKwogICAgIG1fY3VycmVudFNvbHZlci0+YWRk
UGFyYWxsZWxUYXNrKHRhc2ssICptX2N1cnJlbnRDb25zdHJhaW50KTsKIH0KIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5oCShyZXZpc2lvbiAyNzI4MzApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yNSw1OSArMjUsNzEgQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRlICJBYnN0cmFj
dFNsb3RWaXNpdG9yLmgiCiAjaW5jbHVkZSAiSGFuZGxlVHlwZXMuaCIKICNpbmNsdWRlICJJdGVy
YXRpb25TdGF0dXMuaCIKLSNpbmNsdWRlICJNYXJrU3RhY2suaCIKLSNpbmNsdWRlICJSb290TWFy
a1JlYXNvbi5oIgotI2luY2x1ZGUgIlZpc2l0UmFjZUtleS5oIgogI2luY2x1ZGUgPHd0Zi9Gb3J3
YXJkLmg+CiAjaW5jbHVkZSA8d3RmL01vbm90b25pY1RpbWUuaD4KLSNpbmNsdWRlIDx3dGYvU2hh
cmVkVGFzay5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEpT
QyB7CiAKLWNsYXNzIENvbnNlcnZhdGl2ZVJvb3RzOwogY2xhc3MgR0NUaHJlYWRTaGFyZWREYXRh
OwotY2xhc3MgSGVhcDsKIGNsYXNzIEhlYXBDZWxsOwogY2xhc3MgSGVhcEFuYWx5emVyOwotY2xh
c3MgTWFya2VkQmxvY2s7CiBjbGFzcyBNYXJraW5nQ29uc3RyYWludDsKIGNsYXNzIE1hcmtpbmdD
b25zdHJhaW50U29sdmVyOwotdGVtcGxhdGU8dHlwZW5hbWUgVD4gY2xhc3MgV2VhazsKLXRlbXBs
YXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFRyYWl0cz4gY2xhc3MgV3JpdGVCYXJyaWVyQmFzZTsK
IAogdHlwZWRlZiB1aW50MzJfdCBIZWFwVmVyc2lvbjsKIAotY2xhc3MgU2xvdFZpc2l0b3Igewor
Y2xhc3MgU2xvdFZpc2l0b3IgZmluYWwgOiBwdWJsaWMgQWJzdHJhY3RTbG90VmlzaXRvciB7CiAg
ICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU2xvdFZpc2l0b3IpOwogICAgIFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEOwogCisgICAgdXNpbmcgQmFzZSA9IEFic3RyYWN0U2xvdFZpc2l0b3I7CisKICAg
ICBmcmllbmQgY2xhc3MgU2V0Q3VycmVudENlbGxTY29wZTsKICAgICBmcmllbmQgY2xhc3MgSGVh
cDsKIAogcHVibGljOgorICAgIGNsYXNzIENvbnRleHQgeworICAgIHB1YmxpYzoKKyAgICAgICAg
QUxXQVlTX0lOTElORSBDb250ZXh0KEFic3RyYWN0U2xvdFZpc2l0b3ImLCBIZWFwQ2VsbCopIHsg
fQorICAgIH07CisKKyAgICBjbGFzcyBEZWZhdWx0TWFya2luZ1Zpb2xhdGlvbkFzc2VydGlvblNj
b3BlIHsKKyAgICBwdWJsaWM6CisjaWYgQVNTRVJUX0VOQUJMRUQKKyAgICAgICAgRGVmYXVsdE1h
cmtpbmdWaW9sYXRpb25Bc3NlcnRpb25TY29wZShTbG90VmlzaXRvciYgdmlzaXRvcikKKyAgICAg
ICAgICAgIDogbV92aXNpdG9yKHZpc2l0b3IpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1fd2Fz
Q2hlY2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlvbiA9IG1fdmlzaXRvci5tX2lzQ2hlY2tpbmdG
b3JEZWZhdWx0TWFya1Zpb2xhdGlvbjsKKyAgICAgICAgICAgIG1fdmlzaXRvci5tX2lzQ2hlY2tp
bmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlvbiA9IGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAg
fkRlZmF1bHRNYXJraW5nVmlvbGF0aW9uQXNzZXJ0aW9uU2NvcGUoKQorICAgICAgICB7CisgICAg
ICAgICAgICBtX3Zpc2l0b3IubV9pc0NoZWNraW5nRm9yRGVmYXVsdE1hcmtWaW9sYXRpb24gPSBt
X3dhc0NoZWNraW5nRm9yRGVmYXVsdE1hcmtWaW9sYXRpb247CisgICAgICAgIH0KKworICAgIHBy
aXZhdGU6CisgICAgICAgIFNsb3RWaXNpdG9yJiBtX3Zpc2l0b3I7CisgICAgICAgIGJvb2wgbV93
YXNDaGVja2luZ0ZvckRlZmF1bHRNYXJrVmlvbGF0aW9uOworI2Vsc2UKKyAgICAgICAgRGVmYXVs
dE1hcmtpbmdWaW9sYXRpb25Bc3NlcnRpb25TY29wZShTbG90VmlzaXRvciYpIHsgfQorI2VuZGlm
CisgICAgfTsKKwogICAgIFNsb3RWaXNpdG9yKEhlYXAmLCBDU3RyaW5nIGNvZGVOYW1lKTsKICAg
ICB+U2xvdFZpc2l0b3IoKTsKIAotICAgIE1hcmtTdGFja0FycmF5JiBjb2xsZWN0b3JNYXJrU3Rh
Y2soKSB7IHJldHVybiBtX2NvbGxlY3RvclN0YWNrOyB9Ci0gICAgTWFya1N0YWNrQXJyYXkmIG11
dGF0b3JNYXJrU3RhY2soKSB7IHJldHVybiBtX211dGF0b3JTdGFjazsgfQotICAgIGNvbnN0IE1h
cmtTdGFja0FycmF5JiBjb2xsZWN0b3JNYXJrU3RhY2soKSBjb25zdCB7IHJldHVybiBtX2NvbGxl
Y3RvclN0YWNrOyB9Ci0gICAgY29uc3QgTWFya1N0YWNrQXJyYXkmIG11dGF0b3JNYXJrU3RhY2so
KSBjb25zdCB7IHJldHVybiBtX211dGF0b3JTdGFjazsgfQotICAgIAotICAgIFZNJiB2bSgpOwot
ICAgIGNvbnN0IFZNJiB2bSgpIGNvbnN0OwotICAgIEhlYXAqIGhlYXAoKSBjb25zdDsKKyAgICB2
b2lkIGFwcGVuZChjb25zdCBDb25zZXJ2YXRpdmVSb290cyYpIGZpbmFsOwogCi0gICAgdm9pZCBh
cHBlbmQoY29uc3QgQ29uc2VydmF0aXZlUm9vdHMmKTsKLSAgICAKICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBULCB0eXBlbmFtZSBUcmFpdHM+IHZvaWQgYXBwZW5kKGNvbnN0IFdyaXRlQmFycmllckJh
c2U8VCwgVHJhaXRzPiYpOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFRyYWl0
cz4gdm9pZCBhcHBlbmRIaWRkZW4oY29uc3QgV3JpdGVCYXJyaWVyQmFzZTxULCBUcmFpdHM+Jik7
CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgSXRlcmF0b3I+IHZvaWQgYXBwZW5kKEl0ZXJhdG9yIGJl
Z2luICwgSXRlcmF0b3IgZW5kKTsKLSAgICB2b2lkIGFwcGVuZFZhbHVlcyhjb25zdCBXcml0ZUJh
cnJpZXJCYXNlPFVua25vd24sIFJhd1ZhbHVlVHJhaXRzPFVua25vd24+PiosIHNpemVfdCBjb3Vu
dCk7Ci0gICAgdm9pZCBhcHBlbmRWYWx1ZXNIaWRkZW4oY29uc3QgV3JpdGVCYXJyaWVyQmFzZTxV
bmtub3duLCBSYXdWYWx1ZVRyYWl0czxVbmtub3duPj4qLCBzaXplX3QgY291bnQpOwotICAgIAor
ICAgIEFMV0FZU19JTkxJTkUgdm9pZCBhcHBlbmRWYWx1ZXMoY29uc3QgV3JpdGVCYXJyaWVyQmFz
ZTxVbmtub3duLCBSYXdWYWx1ZVRyYWl0czxVbmtub3duPj4qLCBzaXplX3QgY291bnQpOworICAg
IEFMV0FZU19JTkxJTkUgdm9pZCBhcHBlbmRWYWx1ZXNIaWRkZW4oY29uc3QgV3JpdGVCYXJyaWVy
QmFzZTxVbmtub3duLCBSYXdWYWx1ZVRyYWl0czxVbmtub3duPj4qLCBzaXplX3QgY291bnQpOwor
CiAgICAgLy8gVGhlc2UgZG9uJ3QgcmVxdWlyZSB5b3UgdG8gcHJvdmUgdGhhdCB5b3UgaGF2ZSBh
IFdyaXRlQmFycmllcjw+LiBUaGF0IG1ha2VzIHNlbnNlCiAgICAgLy8gZm9yOgogICAgIC8vCkBA
IC04NywzMiArOTksMjcgQEAgcHVibGljOgogICAgIC8vCiAgICAgLy8gSWYgeW91IGFyZSBub3Qg
YSByb290IGFuZCB5b3UgZG9uJ3Qga25vdyB3aGF0IGtpbmQgb2YgYmFycmllciB5b3UgaGF2ZSwg
dGhlbiB5b3UKICAgICAvLyBzaG91bGRuJ3QgY2FsbCB0aGVzZSBtZXRob2RzLgotICAgIHZvaWQg
YXBwZW5kVW5iYXJyaWVyZWQoSlNWYWx1ZSk7Ci0gICAgdm9pZCBhcHBlbmRVbmJhcnJpZXJlZChK
U1ZhbHVlKiwgc2l6ZV90KTsKLSAgICB2b2lkIGFwcGVuZFVuYmFycmllcmVkKEpTQ2VsbCopOwor
ICAgIEFMV0FZU19JTkxJTkUgdm9pZCBhcHBlbmRVbmJhcnJpZXJlZChKU1ZhbHVlKTsKKyAgICBB
TFdBWVNfSU5MSU5FIHZvaWQgYXBwZW5kVW5iYXJyaWVyZWQoSlNWYWx1ZSosIHNpemVfdCk7Cisg
ICAgdm9pZCBhcHBlbmRVbmJhcnJpZXJlZChKU0NlbGwqKSBmaW5hbDsKICAgICAKICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBUPgogICAgIHZvaWQgYXBwZW5kKGNvbnN0IFdlYWs8VD4mIHdlYWspOwog
ICAgIAotICAgIHZvaWQgYXBwZW5kSGlkZGVuVW5iYXJyaWVyZWQoSlNWYWx1ZSk7Ci0gICAgdm9p
ZCBhcHBlbmRIaWRkZW5VbmJhcnJpZXJlZChKU0NlbGwqKTsKLQotICAgIGJvb2wgYWRkT3BhcXVl
Um9vdCh2b2lkKik7IC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgcm9vdCB3YXMgbmV3LgotICAgIAot
ICAgIGJvb2wgY29udGFpbnNPcGFxdWVSb290KHZvaWQqKSBjb25zdDsKLQotICAgIGJvb2wgaXNF
bXB0eSgpIHsgcmV0dXJuIG1fY29sbGVjdG9yU3RhY2suaXNFbXB0eSgpICYmIG1fbXV0YXRvclN0
YWNrLmlzRW1wdHkoKTsgfQorICAgIEFMV0FZU19JTkxJTkUgdm9pZCBhcHBlbmRIaWRkZW5VbmJh
cnJpZXJlZChKU1ZhbHVlKTsKKyAgICB2b2lkIGFwcGVuZEhpZGRlblVuYmFycmllcmVkKEpTQ2Vs
bCopIGZpbmFsOwogCiAgICAgYm9vbCBpc0ZpcnN0VmlzaXQoKSBjb25zdCB7IHJldHVybiBtX2lz
Rmlyc3RWaXNpdDsgfQogCisgICAgYm9vbCBpc01hcmtlZChjb25zdCB2b2lkKikgY29uc3QgZmlu
YWw7CisgICAgYm9vbCBpc01hcmtlZChNYXJrZWRCbG9jayYsIEhlYXBDZWxsKikgY29uc3QgZmlu
YWw7CisgICAgYm9vbCBpc01hcmtlZChQcmVjaXNlQWxsb2NhdGlvbiYsIEhlYXBDZWxsKikgY29u
c3QgZmluYWw7CisKICAgICB2b2lkIGRpZFN0YXJ0TWFya2luZygpOwogICAgIHZvaWQgcmVzZXQo
KTsKICAgICB2b2lkIGNsZWFyTWFya1N0YWNrcygpOwogCiAgICAgc2l6ZV90IGJ5dGVzVmlzaXRl
ZCgpIGNvbnN0IHsgcmV0dXJuIG1fYnl0ZXNWaXNpdGVkOyB9Ci0gICAgc2l6ZV90IHZpc2l0Q291
bnQoKSBjb25zdCB7IHJldHVybiBtX3Zpc2l0Q291bnQ7IH0KLSAgICAKLSAgICB2b2lkIGFkZFRv
VmlzaXRDb3VudChzaXplX3QgdmFsdWUpIHsgbV92aXNpdENvdW50ICs9IHZhbHVlOyB9CiAKICAg
ICB2b2lkIGRvbmF0ZSgpOwogICAgIHZvaWQgZHJhaW4oTW9ub3RvbmljVGltZSB0aW1lb3V0ID0g
TW9ub3RvbmljVGltZTo6aW5maW5pdHkoKSk7CkBAIC0xMzUsMjQgKzE0MiwxOCBAQCBwdWJsaWM6
CiAgICAgCiAgICAgLy8gVGhpcyBpbmZvcm1zIHRoZSBHQyBhYm91dCBhdXhpbGlhcnkgb2Ygc29t
ZSBzaXplIHRoYXQgd2UgYXJlIGtlZXBpbmcgYWxpdmUuIElmIHlvdSBkb24ndCBkbwogICAgIC8v
IHRoaXMgdGhlbiB0aGUgc3BhY2Ugd2lsbCBiZSBmcmVlZCBhdCBlbmQgb2YgR0MuCi0gICAgdm9p
ZCBtYXJrQXV4aWxpYXJ5KGNvbnN0IHZvaWQqIGJhc2UpOworICAgIHZvaWQgbWFya0F1eGlsaWFy
eShjb25zdCB2b2lkKiBiYXNlKSBmaW5hbDsKIAotICAgIHZvaWQgcmVwb3J0RXh0cmFNZW1vcnlW
aXNpdGVkKHNpemVfdCk7CisgICAgdm9pZCByZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQoc2l6ZV90
KSBmaW5hbDsKICNpZiBFTkFCTEUoUkVTT1VSQ0VfVVNBR0UpCi0gICAgdm9pZCByZXBvcnRFeHRl
cm5hbE1lbW9yeVZpc2l0ZWQoc2l6ZV90KTsKKyAgICB2b2lkIHJlcG9ydEV4dGVybmFsTWVtb3J5
VmlzaXRlZChzaXplX3QpIGZpbmFsOwogI2VuZGlmCiAgICAgCi0gICAgdm9pZCBkdW1wKFByaW50
U3RyZWFtJikgY29uc3Q7Ci0KLSAgICBib29sIGlzQW5hbHl6aW5nSGVhcCgpIGNvbnN0IHsgcmV0
dXJuICEhbV9oZWFwQW5hbHl6ZXI7IH0KLSAgICBIZWFwQW5hbHl6ZXIqIGhlYXBBbmFseXplcigp
IGNvbnN0IHsgcmV0dXJuIG1faGVhcEFuYWx5emVyOyB9Ci0gICAgCi0gICAgUm9vdE1hcmtSZWFz
b24gcm9vdE1hcmtSZWFzb24oKSBjb25zdCB7IHJldHVybiBtX3Jvb3RNYXJrUmVhc29uOyB9Ci0g
ICAgdm9pZCBzZXRSb290TWFya1JlYXNvbihSb290TWFya1JlYXNvbiByZWFzb24pIHsgbV9yb290
TWFya1JlYXNvbiA9IHJlYXNvbjsgfQorICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0
IGZpbmFsOwogCiAgICAgSGVhcFZlcnNpb24gbWFya2luZ1ZlcnNpb24oKSBjb25zdCB7IHJldHVy
biBtX21hcmtpbmdWZXJzaW9uOyB9CiAKLSAgICBib29sIG11dGF0b3JJc1N0b3BwZWQoKSBjb25z
dCB7IHJldHVybiBtX211dGF0b3JJc1N0b3BwZWQ7IH0KKyAgICBib29sIG11dGF0b3JJc1N0b3Bw
ZWQoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX211dGF0b3JJc1N0b3BwZWQ7IH0KICAgICAKICAg
ICBMb2NrJiByaWdodFRvUnVuKCkgeyByZXR1cm4gbV9yaWdodFRvUnVuOyB9CiAgICAgCkBAIC0x
NjQsMjAgKzE2NSwxNiBAQCBwdWJsaWM6CiAgICAgCiAgICAgdm9pZCBvcHRpbWl6ZUZvclN0b3Bw
ZWRNdXRhdG9yKCk7CiAgICAgCi0gICAgdm9pZCBkaWRSYWNlKGNvbnN0IFZpc2l0UmFjZUtleSYp
OworICAgIHZvaWQgZGlkUmFjZShjb25zdCBWaXNpdFJhY2VLZXkmKSBmaW5hbDsKICAgICB2b2lk
IGRpZFJhY2UoSlNDZWxsKiBjZWxsLCBjb25zdCBjaGFyKiByZWFzb24pIHsgZGlkUmFjZShWaXNp
dFJhY2VLZXkoY2VsbCwgcmVhc29uKSk7IH0KICAgICAKLSAgICB2b2lkIHZpc2l0QXNDb25zdHJh
aW50KGNvbnN0IEpTQ2VsbCopOworICAgIHZvaWQgdmlzaXRBc0NvbnN0cmFpbnQoY29uc3QgSlND
ZWxsKikgZmluYWw7CiAgICAgCiAgICAgYm9vbCBkaWRSZWFjaFRlcm1pbmF0aW9uKCk7CiAgICAg
Ci0gICAgdm9pZCBzZXRJZ25vcmVOZXdPcGFxdWVSb290cyhib29sIHZhbHVlKSB7IG1faWdub3Jl
TmV3T3BhcXVlUm9vdHMgPSB2YWx1ZTsgfQotCiAgICAgdm9pZCBkb25hdGVBbGwoKTsKICAgICAK
LSAgICBjb25zdCBjaGFyKiBjb2RlTmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29kZU5hbWUuZGF0
YSgpOyB9Ci0gICAgCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBhZGRQYXJhbGxlbENvbnN0
cmFpbnRUYXNrKFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoU2xvdFZpc2l0b3ImKT4+KTsKKyAgICB2
b2lkIGFkZFBhcmFsbGVsQ29uc3RyYWludFRhc2soUmVmUHRyPFNoYXJlZFRhc2s8dm9pZChBYnN0
cmFjdFNsb3RWaXNpdG9yJik+PikgZmluYWw7CiAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNz
IFBhcmFsbGVsTW9kZUVuYWJsZXI7CkBAIC0yMTYsMzkgKzIxMywyNSBAQCBwcml2YXRlOgogCiAg
ICAgTWFya1N0YWNrQXJyYXkmIGNvcnJlc3BvbmRpbmdHbG9iYWxTdGFjayhNYXJrU3RhY2tBcnJh
eSYpOwogCi0gICAgTWFya1N0YWNrQXJyYXkgbV9jb2xsZWN0b3JTdGFjazsKLSAgICBNYXJrU3Rh
Y2tBcnJheSBtX211dGF0b3JTdGFjazsKLSAgICAKLSAgICBzaXplX3QgbV9ieXRlc1Zpc2l0ZWQ7
Ci0gICAgc2l6ZV90IG1fdmlzaXRDb3VudDsKLSAgICBzaXplX3QgbV9ub25DZWxsVmlzaXRDb3Vu
dCB7IDAgfTsgLy8gVXNlZCBmb3IgaW5jcmVtZW50YWwgZHJhaW5pbmcsIGlnbm9yZWQgb3RoZXJ3
aXNlLgotICAgIENoZWNrZWRTaXplIG1fZXh0cmFNZW1vcnlTaXplIHsgMCB9OwotICAgIGJvb2wg
bV9pc0luUGFyYWxsZWxNb2RlOwotICAgIGJvb2wgbV9pZ25vcmVOZXdPcGFxdWVSb290cyB7IGZh
bHNlIH07IC8vIFVzZWZ1bCBhcyBhIGRlYnVnZ2luZyBtb2RlLgorICAgIGJvb2wgbV9pc0luUGFy
YWxsZWxNb2RlIHsgZmFsc2UgfTsKIAogICAgIEhlYXBWZXJzaW9uIG1fbWFya2luZ1ZlcnNpb247
Ci0gICAgCi0gICAgSGVhcCYgbV9oZWFwOworCisgICAgc2l6ZV90IG1fYnl0ZXNWaXNpdGVkIHsg
MCB9OworICAgIHNpemVfdCBtX25vbkNlbGxWaXNpdENvdW50IHsgMCB9OyAvLyBVc2VkIGZvciBp
bmNyZW1lbnRhbCBkcmFpbmluZywgaWdub3JlZCBvdGhlcndpc2UuCisgICAgQ2hlY2tlZFNpemUg
bV9leHRyYU1lbW9yeVNpemUgeyAwIH07CiAKICAgICBIZWFwQW5hbHl6ZXIqIG1faGVhcEFuYWx5
emVyIHsgbnVsbHB0ciB9OwogICAgIEpTQ2VsbCogbV9jdXJyZW50Q2VsbCB7IG51bGxwdHIgfTsK
LSAgICBSb290TWFya1JlYXNvbiBtX3Jvb3RNYXJrUmVhc29uIHsgUm9vdE1hcmtSZWFzb246Ok5v
bmUgfTsKICAgICBib29sIG1faXNGaXJzdFZpc2l0IHsgZmFsc2UgfTsKICAgICBib29sIG1fbXV0
YXRvcklzU3RvcHBlZCB7IGZhbHNlIH07CiAgICAgYm9vbCBtX2Nhbk9wdGltaXplRm9yU3RvcHBl
ZE11dGF0b3IgeyBmYWxzZSB9OwogICAgIExvY2sgbV9yaWdodFRvUnVuOwogICAgIAotICAgIENT
dHJpbmcgbV9jb2RlTmFtZTsKLSAgICAKLSAgICBNYXJraW5nQ29uc3RyYWludCogbV9jdXJyZW50
Q29uc3RyYWludCB7IG51bGxwdHIgfTsKLSAgICBNYXJraW5nQ29uc3RyYWludFNvbHZlciogbV9j
dXJyZW50U29sdmVyIHsgbnVsbHB0ciB9OwotICAgIAogICAgIC8vIFB1dCBwYWRkaW5nIGhlcmUg
dG8gbWl0aWdhdGUgZmFsc2Ugc2hhcmluZyBiZXR3ZWVuIG11bHRpcGxlIFNsb3RWaXNpdG9ycy4K
ICAgICBjaGFyIHBhZGRpbmdbNjRdOwotcHVibGljOgogI2lmIEFTU0VSVF9FTkFCTEVECi0gICAg
Ym9vbCBtX2lzQ2hlY2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlvbjsKLSAgICBib29sIG1faXNE
cmFpbmluZzsKKyAgICBib29sIG1faXNDaGVja2luZ0ZvckRlZmF1bHRNYXJrVmlvbGF0aW9uIHsg
ZmFsc2UgfTsKICNlbmRpZgogfTsKIApAQCAtMjcxLDIzICsyNTQsNCBAQCBwcml2YXRlOgogICAg
IFNsb3RWaXNpdG9yJiBtX3N0YWNrOwogfTsKIAotY2xhc3MgU2V0Um9vdE1hcmtSZWFzb25TY29w
ZSB7Ci1wdWJsaWM6Ci0gICAgU2V0Um9vdE1hcmtSZWFzb25TY29wZShTbG90VmlzaXRvciYgdmlz
aXRvciwgUm9vdE1hcmtSZWFzb24gcmVhc29uKQotICAgICAgICA6IG1fdmlzaXRvcih2aXNpdG9y
KQotICAgICAgICAsIG1fcHJldmlvdXNSZWFzb24odmlzaXRvci5yb290TWFya1JlYXNvbigpKQot
ICAgIHsKLSAgICAgICAgbV92aXNpdG9yLnNldFJvb3RNYXJrUmVhc29uKHJlYXNvbik7Ci0gICAg
fQotCi0gICAgflNldFJvb3RNYXJrUmVhc29uU2NvcGUoKQotICAgIHsKLSAgICAgICAgbV92aXNp
dG9yLnNldFJvb3RNYXJrUmVhc29uKG1fcHJldmlvdXNSZWFzb24pOwotICAgIH0KLQotcHJpdmF0
ZToKLSAgICBTbG90VmlzaXRvciYgbV92aXNpdG9yOwotICAgIFJvb3RNYXJrUmVhc29uIG1fcHJl
dmlvdXNSZWFzb247Ci19OwotCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9ySW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9ySW5saW5lcy5oCShyZXZpc2lvbiAyNzI4
MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvcklubGluZXMuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIt
MjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTItMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTI1LDkgKzI1LDEwIEBACiAKICNwcmFnbWEgb25jZQogCisjaW5j
bHVkZSAiQWJzdHJhY3RTbG90VmlzaXRvcklubGluZXMuaCIKKyNpbmNsdWRlICJNYXJrZWRCbG9j
ay5oIgorI2luY2x1ZGUgIlByZWNpc2VBbGxvY2F0aW9uLmgiCiAjaW5jbHVkZSAiU2xvdFZpc2l0
b3IuaCIKLSNpbmNsdWRlICJXZWFrLmgiCi0jaW5jbHVkZSAiV2Vha0lubGluZXMuaCIKIAogbmFt
ZXNwYWNlIEpTQyB7CiAKQEAgLTEzNCwyMSArMTM1LDE5IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBT
bG90VmlzaXRvcjo6YXBwZW5kVmEKICAgICAgICAgYXBwZW5kSGlkZGVuKGJhcnJpZXJzW2ldKTsK
IH0KIAotaW5saW5lIGJvb2wgU2xvdFZpc2l0b3I6OmFkZE9wYXF1ZVJvb3Qodm9pZCogcHRyKQor
QUxXQVlTX0lOTElORSBib29sIFNsb3RWaXNpdG9yOjppc01hcmtlZChjb25zdCB2b2lkKiBwKSBj
b25zdAogewotICAgIGlmICghcHRyKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKG1f
aWdub3JlTmV3T3BhcXVlUm9vdHMpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoIWhl
YXAoKS0+bV9vcGFxdWVSb290cy5hZGQocHRyKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IG1fdmlzaXRDb3VudCsrOwotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBoZWFwKCktPmlz
TWFya2VkKHApOwogfQogCi1pbmxpbmUgYm9vbCBTbG90VmlzaXRvcjo6Y29udGFpbnNPcGFxdWVS
b290KHZvaWQqIHB0cikgY29uc3QKK0FMV0FZU19JTkxJTkUgYm9vbCBTbG90VmlzaXRvcjo6aXNN
YXJrZWQoTWFya2VkQmxvY2smIGNvbnRhaW5lciwgSGVhcENlbGwqIGNlbGwpIGNvbnN0CiB7Ci0g
ICAgcmV0dXJuIGhlYXAoKS0+bV9vcGFxdWVSb290cy5jb250YWlucyhwdHIpOworICAgIHJldHVy
biBjb250YWluZXIuaXNNYXJrZWQobWFya2luZ1ZlcnNpb24oKSwgY2VsbCk7Cit9CisKK0FMV0FZ
U19JTkxJTkUgYm9vbCBTbG90VmlzaXRvcjo6aXNNYXJrZWQoUHJlY2lzZUFsbG9jYXRpb24mIGNv
bnRhaW5lciwgSGVhcENlbGwqIGNlbGwpIGNvbnN0Cit7CisgICAgcmV0dXJuIGNvbnRhaW5lci5p
c01hcmtlZChtYXJraW5nVmVyc2lvbigpLCBjZWxsKTsKIH0KIAogaW5saW5lIHZvaWQgU2xvdFZp
c2l0b3I6OnJlcG9ydEV4dHJhTWVtb3J5VmlzaXRlZChzaXplX3Qgc2l6ZSkKQEAgLTE2OSwyMSAr
MTY4LDYgQEAgaW5saW5lIHZvaWQgU2xvdFZpc2l0b3I6OnJlcG9ydEV4dGVybmFsTQogfQogI2Vu
ZGlmCiAKLWlubGluZSBIZWFwKiBTbG90VmlzaXRvcjo6aGVhcCgpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuICZtX2hlYXA7Ci19Ci0KLWlubGluZSBWTSYgU2xvdFZpc2l0b3I6OnZtKCkKLXsKLSAgICBy
ZXR1cm4gbV9oZWFwLnZtKCk7Ci19Ci0KLWlubGluZSBjb25zdCBWTSYgU2xvdFZpc2l0b3I6OnZt
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9oZWFwLnZtKCk7Ci19Ci0KIHRlbXBsYXRlPHR5cGVu
YW1lIEZ1bmM+CiBJdGVyYXRpb25TdGF0dXMgU2xvdFZpc2l0b3I6OmZvckVhY2hNYXJrU3RhY2so
Y29uc3QgRnVuYyYgZnVuYykKIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Ns
b3RWaXNpdG9yTWFjcm9zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvU2xvdFZpc2l0b3JNYWNyb3MuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9TbG90VmlzaXRvck1hY3Jvcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MTMzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3By
YWdtYSBvbmNlCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBBYnN0cmFjdFNsb3RWaXNpdG9y
OworY2xhc3MgSlNDZWxsOworY2xhc3MgU2xvdFZpc2l0b3I7CisKKyNkZWZpbmUgREVDTEFSRV9V
TlVTRURfU0xPVF9WSVNJVE9SX1NUUlVDVF9FWFBBTkRFUjIoY291bnRlcikgXAorICAgIHN0cnVj
dCBVbnVzZWRTbG90VmlzaXRvclN0cnVjdFNvV2VDYW5IYXZlQVNlbWljb2xvbiMjY291bnRlciB7
IH0KKworI2RlZmluZSBERUNMQVJFX1VOVVNFRF9TTE9UX1ZJU0lUT1JfU1RSVUNUX0VYUEFOREVS
KGNvdW50ZXIpIFwKKyAgICBERUNMQVJFX1VOVVNFRF9TTE9UX1ZJU0lUT1JfU1RSVUNUX0VYUEFO
REVSMihjb3VudGVyKQorCisjZGVmaW5lIERFQ0xBUkVfVU5VU0VEX1NMT1RfVklTSVRPUl9TVFJV
Q1QoKSBcCisgICAgREVDTEFSRV9VTlVTRURfU0xPVF9WSVNJVE9SX1NUUlVDVF9FWFBBTkRFUihf
X0NPVU5URVJfXykKKworLy8gTWFjcm9zIGZvciBpbnN0YW5jZSBjdXN0b20gdmlzaXRvciBtZXRo
b2QuCisKKyNkZWZpbmUgREVDTEFSRV9JTlNUQU5DRV9TTE9UX1ZJU0lUT1JfTUVUSE9EX0lNUEwo
cmV0dXJuVHlwZSwgbWV0aG9kTmFtZSwgcG9zdE1vZGlmaWVyKSBcCisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVmlzaXRvcj4gcmV0dXJuVHlwZSBtZXRob2ROYW1lIyNJbXBsKFZpc2l0b3ImIHZpc2l0
b3IpOyBcCisgICAgcmV0dXJuVHlwZSBtZXRob2ROYW1lKFNsb3RWaXNpdG9yJikgcG9zdE1vZGlm
aWVyOyBcCisgICAgcmV0dXJuVHlwZSBtZXRob2ROYW1lKEFic3RyYWN0U2xvdFZpc2l0b3ImKSBw
b3N0TW9kaWZpZXI7IFwKKyAgICBERUNMQVJFX1VOVVNFRF9TTE9UX1ZJU0lUT1JfU1RSVUNUKCkK
KworI2RlZmluZSBERUNMQVJFX0lOU1RBTkNFX1NMT1RfVklTSVRPUl9NRVRIT0QocmV0dXJuVHlw
ZSwgbWV0aG9kTmFtZSkgXAorICAgIERFQ0xBUkVfSU5TVEFOQ0VfU0xPVF9WSVNJVE9SX01FVEhP
RF9JTVBMKHJldHVyblR5cGUsIG1ldGhvZE5hbWUsICkKKworCisjZGVmaW5lIERFRklORV9JTlNU
QU5DRV9TTE9UX1ZJU0lUT1JfTUVUSE9EKHJldHVyblR5cGUsIGNsYXNzTmFtZSwgbWV0aG9kTmFt
ZSkgXAorICAgIHJldHVyblR5cGUgY2xhc3NOYW1lOjptZXRob2ROYW1lKFNsb3RWaXNpdG9yJiB2
aXNpdG9yKSB7IG1ldGhvZE5hbWUjI0ltcGwodmlzaXRvcik7IH0gXAorICAgIHJldHVyblR5cGUg
Y2xhc3NOYW1lOjptZXRob2ROYW1lKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpICB7IG1l
dGhvZE5hbWUjI0ltcGwodmlzaXRvcik7IH0gXAorICAgIERFQ0xBUkVfVU5VU0VEX1NMT1RfVklT
SVRPUl9TVFJVQ1QoKQorCisvLyBNYWNyb3MgZm9yIGluc3RhbmNlIHZpc2l0Q2hpbGRyZW4oKS4K
KworI2RlZmluZSBERUNMQVJFX0lOU1RBTkNFX1ZJU0lUX0NISUxEUkVOIFwKKyAgICBERUNMQVJF
X0lOU1RBTkNFX1NMT1RfVklTSVRPUl9NRVRIT0Qodm9pZCwgdmlzaXRDaGlsZHJlbikKKworCisj
ZGVmaW5lIERFRklORV9JTlNUQU5DRV9WSVNJVF9DSElMRFJFTihjbGFzc05hbWUpIFwKKyAgICBE
RUZJTkVfSU5TVEFOQ0VfU0xPVF9WSVNJVE9SX01FVEhPRCh2b2lkLCBjbGFzc05hbWUsIHZpc2l0
Q2hpbGRyZW4pCisKKy8vIE1hY3JvcyBmb3Igc3RhdGljIHZpc2l0Q2hpbGRyZW4oKS4KKworI2Rl
ZmluZSBERUNMQVJFX1ZJU0lUX0NISUxEUkVOX0lNUEwgXAorICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFZpc2l0b3I+IHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCosIFZpc2l0b3Im
KQorCisjZGVmaW5lIERFQ0xBUkVfVklTSVRfQ0hJTERSRU4gXAorICAgIERFQ0xBUkVfVklTSVRf
Q0hJTERSRU5fSU1QTDsgXAorICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwg
QWJzdHJhY3RTbG90VmlzaXRvciYpOyBcCisgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihK
U0NlbGwqLCBTbG90VmlzaXRvciYpCisKKyNkZWZpbmUgREVDTEFSRV9FWFBPUlRfVklTSVRfQ0hJ
TERSRU4gXAorICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU5fSU1QTDsgXAorICAgIEpTX0VYUE9S
VF9QUklWQVRFIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgQWJzdHJhY3RTbG90
VmlzaXRvciYpOyBcCisgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgdmlzaXRDaGls
ZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpCisKKyNkZWZpbmUgREVDTEFSRV9JTkxJTkVfVklT
SVRfQ0hJTERSRU4gXAorICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU5fSU1QTDsgXAorICAgIGlu
bGluZSBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIEFic3RyYWN0U2xvdFZpc2l0
b3ImKTsgXAorICAgIGlubGluZSBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNs
b3RWaXNpdG9yJikKKworI2RlZmluZSBERUNMQVJFX1RFTVBMQVRFX1ZJU0lUX0NISUxEUkVOIFwK
KyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOCisKKworI2RlZmluZSBERUZJTkVfVklTSVRfQ0hJ
TERSRU4oY2xhc3NOYW1lKSBcCisgICAgdm9pZCBjbGFzc05hbWU6OnZpc2l0Q2hpbGRyZW4oSlND
ZWxsKiBjZWxsLCBBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBcCisgICAgeyBcCisgICAg
ICAgIEFic3RyYWN0U2xvdFZpc2l0b3I6OkNvbnRleHQgY29udGV4dCh2aXNpdG9yLCBjZWxsKTsg
XAorICAgICAgICB2aXNpdENoaWxkcmVuSW1wbChjZWxsLCB2aXNpdG9yKTsgXAorICAgIH0gXAor
ICAgIHZvaWQgY2xhc3NOYW1lOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0
b3ImIHZpc2l0b3IpIHsgdmlzaXRDaGlsZHJlbkltcGwoY2VsbCwgdmlzaXRvcik7IH0gXAorICAg
IERFQ0xBUkVfVU5VU0VEX1NMT1RfVklTSVRPUl9TVFJVQ1QoKQorCisjZGVmaW5lIERFRklORV9F
WFBPUlRfVklTSVRfQ0hJTERSRU4oY2xhc3NOYW1lKSBcCisgICAgSlNfRVhQT1JUX1BSSVZBVEUg
dm9pZCBjbGFzc05hbWU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBBYnN0cmFjdFNsb3RW
aXNpdG9yJiB2aXNpdG9yKSBcCisgICAgeyBcCisgICAgICAgIEFic3RyYWN0U2xvdFZpc2l0b3I6
OkNvbnRleHQgY29udGV4dCh2aXNpdG9yLCBjZWxsKTsgXAorICAgICAgICB2aXNpdENoaWxkcmVu
SW1wbChjZWxsLCB2aXNpdG9yKTsgXAorICAgIH0gXAorICAgIEpTX0VYUE9SVF9QUklWQVRFIHZv
aWQgY2xhc3NOYW1lOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZp
c2l0b3IpIHsgdmlzaXRDaGlsZHJlbkltcGwoY2VsbCwgdmlzaXRvcik7IH0gXAorICAgIERFQ0xB
UkVfVU5VU0VEX1NMT1RfVklTSVRPUl9TVFJVQ1QoKQorCisjZGVmaW5lIERFRklORV9JTkxJTkVf
VklTSVRfQ0hJTERSRU4oY2xhc3NOYW1lKSBcCisgICAgaW5saW5lIHZvaWQgY2xhc3NOYW1lOjp2
aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikg
XAorICAgIHsgXAorICAgICAgICBBYnN0cmFjdFNsb3RWaXNpdG9yOjpDb250ZXh0IGNvbnRleHQo
dmlzaXRvciwgY2VsbCk7IFwKKyAgICAgICAgdmlzaXRDaGlsZHJlbkltcGwoY2VsbCwgdmlzaXRv
cik7IFwKKyAgICB9IFwKKyAgICBpbmxpbmUgdm9pZCBjbGFzc05hbWU6OnZpc2l0Q2hpbGRyZW4o
SlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikgeyB2aXNpdENoaWxkcmVuSW1wbChj
ZWxsLCB2aXNpdG9yKTsgfSBcCisgICAgREVDTEFSRV9VTlVTRURfU0xPVF9WSVNJVE9SX1NUUlVD
VCgpCisKKyNkZWZpbmUgREVGSU5FX1RFTVBMQVRFX1ZJU0lUX0NISUxEUkVOKHRlbXBsYXRlQ2xh
dXNlLCBjbGFzc05hbWUpIFwKKyAgICB0ZW1wbGF0ZUNsYXVzZSB2b2lkIGNsYXNzTmFtZTo6dmlz
aXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpIFwK
KyAgICB7IFwKKyAgICAgICAgQWJzdHJhY3RTbG90VmlzaXRvcjo6Q29udGV4dCBjb250ZXh0KHZp
c2l0b3IsIGNlbGwpOyBcCisgICAgICAgIHZpc2l0Q2hpbGRyZW5JbXBsKGNlbGwsIHZpc2l0b3Ip
OyBcCisgICAgfSBcCisgICAgdGVtcGxhdGVDbGF1c2Ugdm9pZCBjbGFzc05hbWU6OnZpc2l0Q2hp
bGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikgeyB2aXNpdENoaWxkcmVu
SW1wbChjZWxsLCB2aXNpdG9yKTsgfSBcCisgICAgREVDTEFSRV9VTlVTRURfU0xPVF9WSVNJVE9S
X1NUUlVDVCgpCisKK30gLy8gbmFtZXNwYWNlIEpTQworCit1c2luZyBKU0M6OkFic3RyYWN0U2xv
dFZpc2l0b3I7Cit1c2luZyBKU0M6OkpTQ2VsbDsKK3VzaW5nIEpTQzo6U2xvdFZpc2l0b3I7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdWJzcGFjZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N1YnNwYWNlLmgJKHJldmlzaW9uIDI3MjgzMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N1YnNwYWNlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMTggQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC0zNCw2ICszNCw3IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCitjbGFzcyBBYnN0cmFjdFNs
b3RWaXNpdG9yOwogY2xhc3MgQWxpZ25lZE1lbW9yeUFsbG9jYXRvcjsKIGNsYXNzIEhlYXBDZWxs
VHlwZTsKIApAQCAtODcsNyArODgsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBmb3JFYWNoTWFya2Vk
Q2VsbChjb25zdCBGdW5jJik7CiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KLSAg
ICBSZWY8U2hhcmVkVGFzazx2b2lkKFNsb3RWaXNpdG9yJik+PiBmb3JFYWNoTWFya2VkQ2VsbElu
UGFyYWxsZWwoY29uc3QgRnVuYyYpOworICAgIFJlZjxTaGFyZWRUYXNrPHZvaWQoQWJzdHJhY3RT
bG90VmlzaXRvciYpPj4gZm9yRWFjaE1hcmtlZENlbGxJblBhcmFsbGVsKGNvbnN0IEZ1bmMmKTsK
IAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CiAgICAgdm9pZCBmb3JFYWNoTGl2ZUNlbGwo
Y29uc3QgRnVuYyYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3Vic3BhY2VJ
bmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3Vic3Bh
Y2VJbmxpbmVzLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL1N1YnNwYWNlSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxNy0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODYsOSArODYsOSBAQCB2
b2lkIFN1YnNwYWNlOjpmb3JFYWNoTWFya2VkQ2VsbChjb25zdCBGCiB9CiAKIHRlbXBsYXRlPHR5
cGVuYW1lIEZ1bmM+Ci1SZWY8U2hhcmVkVGFzazx2b2lkKFNsb3RWaXNpdG9yJik+PiBTdWJzcGFj
ZTo6Zm9yRWFjaE1hcmtlZENlbGxJblBhcmFsbGVsKGNvbnN0IEZ1bmMmIGZ1bmMpCitSZWY8U2hh
cmVkVGFzazx2b2lkKEFic3RyYWN0U2xvdFZpc2l0b3ImKT4+IFN1YnNwYWNlOjpmb3JFYWNoTWFy
a2VkQ2VsbEluUGFyYWxsZWwoY29uc3QgRnVuYyYgZnVuYykKIHsKLSAgICBjbGFzcyBUYXNrIGZp
bmFsIDogcHVibGljIFNoYXJlZFRhc2s8dm9pZChTbG90VmlzaXRvciYpPiB7CisgICAgY2xhc3Mg
VGFzayBmaW5hbCA6IHB1YmxpYyBTaGFyZWRUYXNrPHZvaWQoQWJzdHJhY3RTbG90VmlzaXRvciYp
PiB7CiAgICAgcHVibGljOgogICAgICAgICBUYXNrKFN1YnNwYWNlJiBzdWJzcGFjZSwgY29uc3Qg
RnVuYyYgZnVuYykKICAgICAgICAgICAgIDogbV9zdWJzcGFjZShzdWJzcGFjZSkKQEAgLTk3LDcg
Kzk3LDcgQEAgUmVmPFNoYXJlZFRhc2s8dm9pZChTbG90VmlzaXRvciYpPj4gU3VicwogICAgICAg
ICB7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIHZvaWQgcnVuKFNsb3RWaXNpdG9yJiB2
aXNpdG9yKSBmaW5hbAorICAgICAgICB2b2lkIHJ1bihBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNp
dG9yKSBmaW5hbAogICAgICAgICB7CiAgICAgICAgICAgICB3aGlsZSAoTWFya2VkQmxvY2s6Okhh
bmRsZSogaGFuZGxlID0gbV9ibG9ja1NvdXJjZS0+cnVuKCkpIHsKICAgICAgICAgICAgICAgICBo
YW5kbGUtPmZvckVhY2hNYXJrZWRDZWxsKApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvVmVyaWZpZXJTbG90VmlzaXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvVmVyaWZpZXJTbG90VmlzaXRvci5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVmVyaWZpZXJTbG90VmlzaXRvci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSwzMzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiVmVyaWZpZXJTbG90VmlzaXRvci5oIgorCisjaW5jbHVkZSAiQ29uc2VydmF0
aXZlUm9vdHMuaCIKKyNpbmNsdWRlICJHQ1NlZ21lbnRlZEFycmF5SW5saW5lcy5oIgorI2luY2x1
ZGUgIkhlYXBDZWxsLmgiCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUgIlZNLmgi
CisjaW5jbHVkZSAiVmVyaWZpZXJTbG90VmlzaXRvcklubGluZXMuaCIKKyNpbmNsdWRlIDx3dGYv
U3RhY2tUcmFjZS5oPgorCituYW1lc3BhY2UgSlNDIHsKKwordXNpbmcgTWFya2VyRGF0YSA9IFZl
cmlmaWVyU2xvdFZpc2l0b3I6Ok1hcmtlckRhdGE7CisKK2NvbnN0ZXhwciBpbnQgbWF4TWFya2lu
Z1N0YWNrRnJhbWVzVG9DYXB0dXJlID0gMTAwOworCitNYXJrZXJEYXRhOjpNYXJrZXJEYXRhKEhl
YXBDZWxsKiBwYXJlbnQsIHN0ZDo6dW5pcXVlX3B0cjxTdGFja1RyYWNlPiYmIHN0YWNrKQorICAg
IDogcGFyZW50KHBhcmVudCkKKyAgICAsIHN0YWNrKFdURk1vdmUoc3RhY2spKQoreworfQorCitW
ZXJpZmllclNsb3RWaXNpdG9yOjpNYXJrZWRCbG9ja0RhdGE6Ok1hcmtlZEJsb2NrRGF0YShNYXJr
ZWRCbG9jayogYmxvY2spCisgICAgOiBtX2Jsb2NrKGJsb2NrKQorICAgICwgbV9hdG9tcyhNYXJr
ZWRCbG9jazo6YXRvbXNQZXJCbG9jaykKK3sKK30KKwordm9pZCBWZXJpZmllclNsb3RWaXNpdG9y
OjpNYXJrZWRCbG9ja0RhdGE6OmFkZE1hcmtlckRhdGEodW5zaWduZWQgYXRvbU51bWJlciwgTWFy
a2VyRGF0YSYmIG1hcmtlcikKK3sKKyAgICBpZiAobV9tYXJrZXJzLmlzRW1wdHkoKSkKKyAgICAg
ICAgbV9tYXJrZXJzLmdyb3coTWFya2VkQmxvY2s6OmF0b21zUGVyQmxvY2spOworICAgIG1fbWFy
a2Vyc1thdG9tTnVtYmVyXSA9IFdURk1vdmUobWFya2VyKTsKK30KKworY29uc3QgTWFya2VyRGF0
YSogVmVyaWZpZXJTbG90VmlzaXRvcjo6TWFya2VkQmxvY2tEYXRhOjptYXJrZXJEYXRhKHVuc2ln
bmVkIGF0b21OdW1iZXIpIGNvbnN0Cit7CisgICAgYXV0byYgbWFya2VyID0gbV9tYXJrZXJzW2F0
b21OdW1iZXJdOworICAgIGlmIChtYXJrZXIuc3RhY2spCisgICAgICAgIHJldHVybiAmbWFya2Vy
OworICAgIHJldHVybiBudWxscHRyOworfQorCitWZXJpZmllclNsb3RWaXNpdG9yOjpQcmVjaXNl
QWxsb2NhdGlvbkRhdGE6OlByZWNpc2VBbGxvY2F0aW9uRGF0YShQcmVjaXNlQWxsb2NhdGlvbiog
YWxsb2NhdGlvbikKKyAgICA6IG1fYWxsb2NhdGlvbihhbGxvY2F0aW9uKQoreworfQorCitjb25z
dCBNYXJrZXJEYXRhKiBWZXJpZmllclNsb3RWaXNpdG9yOjpQcmVjaXNlQWxsb2NhdGlvbkRhdGE6
Om1hcmtlckRhdGEoKSBjb25zdAoreworICAgIGlmIChtX21hcmtlci5zdGFjaykKKyAgICAgICAg
cmV0dXJuICZtX21hcmtlcjsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKwordm9pZCBWZXJpZmll
clNsb3RWaXNpdG9yOjpQcmVjaXNlQWxsb2NhdGlvbkRhdGE6OmFkZE1hcmtlckRhdGEoTWFya2Vy
RGF0YSYmIG1hcmtlcikKK3sKKyAgICBtX21hcmtlciA9IFdURk1vdmUobWFya2VyKTsKK30KKwor
VmVyaWZpZXJTbG90VmlzaXRvcjo6VmVyaWZpZXJTbG90VmlzaXRvcihIZWFwJiBoZWFwKQorICAg
IDogQmFzZShoZWFwLCAiVmVyaWZpZXIiLCBtX29wYXF1ZVJvb3RTdG9yYWdlKQoreworfQorCitW
ZXJpZmllclNsb3RWaXNpdG9yOjp+VmVyaWZpZXJTbG90VmlzaXRvcigpCit7Cit9CisKK3ZvaWQg
VmVyaWZpZXJTbG90VmlzaXRvcjo6YWRkUGFyYWxsZWxDb25zdHJhaW50VGFzayhSZWZQdHI8U2hh
cmVkVGFzazx2b2lkKEFic3RyYWN0U2xvdFZpc2l0b3ImKT4+IHRhc2spCit7CisgICAgbV9jb25z
dHJhaW50VGFza3MuYXBwZW5kKFdURk1vdmUodGFzaykpOworfQorCit2b2lkIFZlcmlmaWVyU2xv
dFZpc2l0b3I6OmV4ZWN1dGVDb25zdHJhaW50VGFza3MoKQoreworICAgIHdoaWxlICghbV9jb25z
dHJhaW50VGFza3MuaXNFbXB0eSgpKQorICAgICAgICBtX2NvbnN0cmFpbnRUYXNrcy50YWtlRmly
c3QoKS0+cnVuKCp0aGlzKTsKK30KKwordm9pZCBWZXJpZmllclNsb3RWaXNpdG9yOjphcHBlbmQo
Y29uc3QgQ29uc2VydmF0aXZlUm9vdHMmIGNvbnNlcnZhdGl2ZVJvb3RzKQoreworICAgIGF1dG8g
YXBwZW5kSlNDZWxsT3JBdXhpbGlhcnkgPSBbJl0gKEhlYXBDZWxsKiBoZWFwQ2VsbCkgeworICAg
ICAgICBpZiAoIWhlYXBDZWxsKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGlmICh0
ZXN0QW5kU2V0TWFya2VkKGhlYXBDZWxsKSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAg
ICBzd2l0Y2ggKGhlYXBDZWxsLT5jZWxsS2luZCgpKSB7CisgICAgICAgIGNhc2UgSGVhcENlbGw6
OkpTQ2VsbDoKKyAgICAgICAgY2FzZSBIZWFwQ2VsbDo6SlNDZWxsV2l0aEluZGV4aW5nSGVhZGVy
OiB7CisgICAgICAgICAgICBKU0NlbGwqIGpzQ2VsbCA9IHN0YXRpY19jYXN0PEpTQ2VsbCo+KGhl
YXBDZWxsKTsKKyAgICAgICAgICAgIGFwcGVuZFRvTWFya1N0YWNrKGpzQ2VsbCk7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBjYXNlIEhlYXBDZWxsOjpBdXhpbGlh
cnk6CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9OworCisgICAgSGVhcENl
bGwqKiByb290cyA9IGNvbnNlcnZhdGl2ZVJvb3RzLnJvb3RzKCk7CisgICAgc2l6ZV90IHNpemUg
PSBjb25zZXJ2YXRpdmVSb290cy5zaXplKCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBz
aXplOyArK2kpCisgICAgICAgIGFwcGVuZEpTQ2VsbE9yQXV4aWxpYXJ5KHJvb3RzW2ldKTsKK30K
Kwordm9pZCBWZXJpZmllclNsb3RWaXNpdG9yOjphcHBlbmRUb01hcmtTdGFjayhKU0NlbGwqIGNl
bGwpCit7CisgICAgQVNTRVJUKCFjZWxsLT5pc1phcHBlZCgpKTsKKyAgICBtX2NvbGxlY3RvclN0
YWNrLmFwcGVuZChjZWxsKTsKK30KKwordm9pZCBWZXJpZmllclNsb3RWaXNpdG9yOjphcHBlbmRV
bmJhcnJpZXJlZChKU0NlbGwqIGNlbGwpCit7CisgICAgaWYgKCFjZWxsKQorICAgICAgICByZXR1
cm47CisKKyAgICBpZiAoVU5MSUtFTFkoY2VsbC0+aXNQcmVjaXNlQWxsb2NhdGlvbigpKSkgewor
ICAgICAgICBpZiAoTElLRUxZKGlzTWFya2VkKGNlbGwtPnByZWNpc2VBbGxvY2F0aW9uKCksIGNl
bGwpKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9IGVsc2UgeworICAgICAgICBNYXJrZWRC
bG9jayYgYmxvY2sgPSBjZWxsLT5tYXJrZWRCbG9jaygpOworICAgICAgICBpZiAoTElLRUxZKGlz
TWFya2VkKGJsb2NrLCBjZWxsKSkpCisgICAgICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
YXBwZW5kU2xvdyhjZWxsKTsKK30KKwordm9pZCBWZXJpZmllclNsb3RWaXNpdG9yOjphcHBlbmRI
aWRkZW5VbmJhcnJpZXJlZChKU0NlbGwqIGNlbGwpCit7CisgICAgYXBwZW5kVW5iYXJyaWVyZWQo
Y2VsbCk7Cit9CisKK3ZvaWQgVmVyaWZpZXJTbG90VmlzaXRvcjo6ZHJhaW4oKQoreworICAgIFJF
TEVBU0VfQVNTRVJUKG1fbXV0YXRvclN0YWNrLmlzRW1wdHkoKSk7CisKKyAgICBNYXJrU3RhY2tB
cnJheSYgc3RhY2sgPSBtX2NvbGxlY3RvclN0YWNrOworICAgIGlmIChzdGFjay5pc0VtcHR5KCkp
CisgICAgICAgIHJldHVybjsKKworICAgIHN0YWNrLnJlZmlsbCgpOworICAgIHdoaWxlIChzdGFj
ay5jYW5SZW1vdmVMYXN0KCkpCisgICAgICAgIHZpc2l0Q2hpbGRyZW4oc3RhY2sucmVtb3ZlTGFz
dCgpKTsKK30KKwordm9pZCBWZXJpZmllclNsb3RWaXNpdG9yOjpkdW1wTWFya2VyRGF0YShIZWFw
Q2VsbCogY2VsbCkKK3sKKyAgICBpZiAoY2VsbC0+aXNQcmVjaXNlQWxsb2NhdGlvbigpKQorICAg
ICAgICByZXR1cm4gZHVtcE1hcmtlckRhdGEoY2VsbC0+cHJlY2lzZUFsbG9jYXRpb24oKSwgY2Vs
bCk7CisgICAgcmV0dXJuIGR1bXBNYXJrZXJEYXRhKGNlbGwtPm1hcmtlZEJsb2NrKCksIGNlbGwp
OworfQorCit2b2lkIFZlcmlmaWVyU2xvdFZpc2l0b3I6OmR1bXBNYXJrZXJEYXRhKFByZWNpc2VB
bGxvY2F0aW9uJiBhbGxvY2F0aW9uLCBIZWFwQ2VsbCogY2VsbCkKK3sKKyAgICBhdXRvIGl0ZXJh
dG9yID0gbV9wcmVjaXNlQWxsb2NhdGlvbk1hcC5maW5kKCZhbGxvY2F0aW9uKTsKKyAgICBpZiAo
aXRlcmF0b3IgIT0gbV9wcmVjaXNlQWxsb2NhdGlvbk1hcC5lbmQoKSkgeworICAgICAgICBkdW1w
TWFya2VyRGF0YShjZWxsLCBpdGVyYXRvci0+dmFsdWUtPm1hcmtlckRhdGEoKSk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisgICAgZGF0YUxvZ0xuKCJDZWxsICIsIFJhd1BvaW50ZXIoY2VsbCks
ICIgbm90IGZvdW5kIik7Cit9CisKK3ZvaWQgVmVyaWZpZXJTbG90VmlzaXRvcjo6ZHVtcE1hcmtl
ckRhdGEoTWFya2VkQmxvY2smIGJsb2NrLCBIZWFwQ2VsbCogY2VsbCkKK3sKKyAgICBhdXRvIGl0
ZXJhdG9yID0gbV9tYXJrZWRCbG9ja01hcC5maW5kKCZibG9jayk7CisgICAgaWYgKGl0ZXJhdG9y
ICE9IG1fbWFya2VkQmxvY2tNYXAuZW5kKCkpIHsKKyAgICAgICAgdW5zaWduZWQgYXRvbU51bWJl
ciA9IGJsb2NrLmF0b21OdW1iZXIoY2VsbCk7CisgICAgICAgIGR1bXBNYXJrZXJEYXRhKGNlbGws
IGl0ZXJhdG9yLT52YWx1ZS0+bWFya2VyRGF0YShhdG9tTnVtYmVyKSk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisgICAgZGF0YUxvZ0xuKCJDZWxsICIsIFJhd1BvaW50ZXIoY2VsbCksICIgbm90
IGZvdW5kIik7Cit9CisKK3ZvaWQgVmVyaWZpZXJTbG90VmlzaXRvcjo6ZHVtcE1hcmtlckRhdGEo
SGVhcENlbGwqIGNlbGwsIGNvbnN0IE1hcmtlckRhdGEqIG1hcmtlcikKK3sKKyAgICBpZiAoIW1h
cmtlcikgeworICAgICAgICBkYXRhTG9nTG4oIk1hcmtlciBkYXRhIGlzIG5vdCBhdmFpbGFibGUg
Zm9yIGNlbGwgIiwgUmF3UG9pbnRlcihjZWxsKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBkYXRhTG9nTG4oIkNlbGwgIiwgUmF3UG9pbnRlcihjZWxsKSwgIiB3YXMgcmVhY2hhYmxl
IHZpYSBjZWxsICIsIFJhd1BvaW50ZXIobWFya2VyLT5wYXJlbnQpLCAiIGF0OiIpOworICAgIG1h
cmtlci0+c3RhY2stPmR1bXAoV1RGOjpkYXRhRmlsZSgpLCAiICAgICIpOworfQorCitib29sIFZl
cmlmaWVyU2xvdFZpc2l0b3I6OmlzRmlyc3RWaXNpdCgpIGNvbnN0Cit7CisgICAgLy8gV2UgbmVl
ZCB0byBhbHdheXMgcmV0dXJuIGZhbHNlIGJlY2F1c2UgdGhpcyBpcyB1c2VkIHRvIGFnZWQgYW4g
VW5saW5rZWRDb2RlQmxvY2sKKyAgICAvLyBpbiB0aGUgcmVndWxhciBHQzogc2VlIFVubGlua2Vk
Q29kZUJsb2NrOjp2aXNpdENoaWxkcmVuSW1wbCgpLiBXZSBzaG91bGQgbm90CisgICAgLy8gc2hv
dWxkIGRvIHRoYXQgYWdpbmcgYWN0aW9uLgorICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBW
ZXJpZmllclNsb3RWaXNpdG9yOjppc01hcmtlZChjb25zdCB2b2lkKiByYXdDZWxsKSBjb25zdAor
eworICAgIEhlYXBDZWxsKiBjZWxsID0gYml0d2lzZV9jYXN0PEhlYXBDZWxsKj4ocmF3Q2VsbCk7
CisgICAgaWYgKGNlbGwtPmlzUHJlY2lzZUFsbG9jYXRpb24oKSkKKyAgICAgICAgcmV0dXJuIGlz
TWFya2VkKGNlbGwtPnByZWNpc2VBbGxvY2F0aW9uKCksIGNlbGwpOworICAgIHJldHVybiBpc01h
cmtlZChjZWxsLT5tYXJrZWRCbG9jaygpLCBjZWxsKTsKK30KKworYm9vbCBWZXJpZmllclNsb3RW
aXNpdG9yOjppc01hcmtlZChQcmVjaXNlQWxsb2NhdGlvbiYgYWxsb2NhdGlvbiwgSGVhcENlbGwq
KSBjb25zdAoreworICAgIHJldHVybiBtX3ByZWNpc2VBbGxvY2F0aW9uTWFwLmNvbnRhaW5zKCZh
bGxvY2F0aW9uKTsKK30KKworYm9vbCBWZXJpZmllclNsb3RWaXNpdG9yOjppc01hcmtlZChNYXJr
ZWRCbG9jayYgYmxvY2ssIEhlYXBDZWxsKiBjZWxsKSBjb25zdAoreworICAgIGF1dG8gZW50cnkg
PSBtX21hcmtlZEJsb2NrTWFwLmZpbmQoJmJsb2NrKTsKKyAgICBpZiAoZW50cnkgPT0gbV9tYXJr
ZWRCbG9ja01hcC5lbmQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYXV0byYgZGF0
YSA9IGVudHJ5LT52YWx1ZTsKKyAgICB1bnNpZ25lZCBhdG9tTnVtYmVyID0gYmxvY2suYXRvbU51
bWJlcihjZWxsKTsKKyAgICByZXR1cm4gZGF0YS0+aXNNYXJrZWQoYXRvbU51bWJlcik7Cit9CisK
K3ZvaWQgVmVyaWZpZXJTbG90VmlzaXRvcjo6bWFya0F1eGlsaWFyeShjb25zdCB2b2lkKiBiYXNl
KQoreworICAgIEhlYXBDZWxsKiBjZWxsID0gYml0d2lzZV9jYXN0PEhlYXBDZWxsKj4oYmFzZSk7
CisKKyAgICBBU1NFUlQoY2VsbC0+aGVhcCgpID09IGhlYXAoKSk7CisgICAgdGVzdEFuZFNldE1h
cmtlZChjZWxsKTsKK30KKworYm9vbCBWZXJpZmllclNsb3RWaXNpdG9yOjptdXRhdG9ySXNTdG9w
cGVkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBWZXJpZmllclNsb3RW
aXNpdG9yOjp0ZXN0QW5kU2V0TWFya2VkKGNvbnN0IHZvaWQqIHJhd0NlbGwpCit7CisgICAgSGVh
cENlbGwqIGNlbGwgPSBiaXR3aXNlX2Nhc3Q8SGVhcENlbGwqPihyYXdDZWxsKTsKKyAgICBpZiAo
Y2VsbC0+aXNQcmVjaXNlQWxsb2NhdGlvbigpKQorICAgICAgICByZXR1cm4gdGVzdEFuZFNldE1h
cmtlZChjZWxsLT5wcmVjaXNlQWxsb2NhdGlvbigpKTsKKyAgICByZXR1cm4gdGVzdEFuZFNldE1h
cmtlZChjZWxsLT5tYXJrZWRCbG9jaygpLCBjZWxsKTsKK30KKworYm9vbCBWZXJpZmllclNsb3RW
aXNpdG9yOjp0ZXN0QW5kU2V0TWFya2VkKFByZWNpc2VBbGxvY2F0aW9uJiBhbGxvY2F0aW9uKQor
eworICAgIHN0ZDo6dW5pcXVlX3B0cjxQcmVjaXNlQWxsb2NhdGlvbkRhdGE+JiBkYXRhID0gbV9w
cmVjaXNlQWxsb2NhdGlvbk1hcC5hZGQoJmFsbG9jYXRpb24sIG51bGxwdHIpLml0ZXJhdG9yLT52
YWx1ZTsKKyAgICBpZiAoIWRhdGEpIHsKKyAgICAgICAgZGF0YSA9IG1ha2VVbmlxdWU8UHJlY2lz
ZUFsbG9jYXRpb25EYXRhPigmYWxsb2NhdGlvbik7CisgICAgICAgIGlmIChVTkxJS0VMWShPcHRp
b25zOjp2ZXJib3NlVmVyaWZ5R0MoKSkpCisgICAgICAgICAgICBkYXRhLT5hZGRNYXJrZXJEYXRh
KHsgcGFyZW50Q2VsbCgpLCBTdGFja1RyYWNlOjpjYXB0dXJlU3RhY2tUcmFjZShtYXhNYXJraW5n
U3RhY2tGcmFtZXNUb0NhcHR1cmUsIDIpIH0pOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorICAgIHJldHVybiB0cnVlOworfQorCitib29sIFZlcmlmaWVyU2xvdFZpc2l0b3I6OnRlc3RB
bmRTZXRNYXJrZWQoTWFya2VkQmxvY2smIGJsb2NrLCBIZWFwQ2VsbCogY2VsbCkKK3sKKyAgICBz
dGQ6OnVuaXF1ZV9wdHI8TWFya2VkQmxvY2tEYXRhPiYgZGF0YSA9IG1fbWFya2VkQmxvY2tNYXAu
YWRkKCZibG9jaywgbnVsbHB0cikuaXRlcmF0b3ItPnZhbHVlOworICAgIGlmICghZGF0YSkKKyAg
ICAgICAgZGF0YSA9IG1ha2VVbmlxdWU8TWFya2VkQmxvY2tEYXRhPigmYmxvY2spOworCisgICAg
dW5zaWduZWQgYXRvbU51bWJlciA9IGJsb2NrLmF0b21OdW1iZXIoY2VsbCk7CisgICAgYm9vbCBh
bHJlYWR5U2V0ID0gZGF0YS0+dGVzdEFuZFNldE1hcmtlZChhdG9tTnVtYmVyKTsKKyAgICBpZiAo
IWFscmVhZHlTZXQgJiYgVU5MSUtFTFkoT3B0aW9uczo6dmVyYm9zZVZlcmlmeUdDKCkpKQorICAg
ICAgICBkYXRhLT5hZGRNYXJrZXJEYXRhKGF0b21OdW1iZXIsIHsgcGFyZW50Q2VsbCgpLCBTdGFj
a1RyYWNlOjpjYXB0dXJlU3RhY2tUcmFjZShtYXhNYXJraW5nU3RhY2tGcmFtZXNUb0NhcHR1cmUs
IDIpIH0pOworICAgIHJldHVybiBhbHJlYWR5U2V0OworfQorCit2b2lkIFZlcmlmaWVyU2xvdFZp
c2l0b3I6OnNldE1hcmtlZEFuZEFwcGVuZFRvTWFya1N0YWNrKEpTQ2VsbCogY2VsbCkKK3sKKyAg
ICBpZiAobV9zdXBwcmVzc1ZlcmlmaWVyKQorICAgICAgICByZXR1cm47CisgICAgaWYgKHRlc3RB
bmRTZXRNYXJrZWQoY2VsbCkpCisgICAgICAgIHJldHVybjsKKyAgICBhcHBlbmRUb01hcmtTdGFj
ayhjZWxsKTsKK30KKwordm9pZCBWZXJpZmllclNsb3RWaXNpdG9yOjp2aXNpdEFzQ29uc3RyYWlu
dChjb25zdCBKU0NlbGwqIGNlbGwpCit7CisgICAgdmlzaXRDaGlsZHJlbihjZWxsKTsKK30KKwor
dm9pZCBWZXJpZmllclNsb3RWaXNpdG9yOjp2aXNpdENoaWxkcmVuKGNvbnN0IEpTQ2VsbCogY2Vs
bCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChpc01hcmtlZChjZWxsKSk7CisgICAgc3dpdGNoIChj
ZWxsLT50eXBlKCkpIHsKKyAgICBjYXNlIFN0cmluZ1R5cGU6CisgICAgICAgIEpTU3RyaW5nOjp2
aXNpdENoaWxkcmVuKGNvbnN0X2Nhc3Q8SlNDZWxsKj4oY2VsbCksICp0aGlzKTsKKyAgICAgICAg
YnJlYWs7CisgICAgICAgIAorICAgIGNhc2UgRmluYWxPYmplY3RUeXBlOgorICAgICAgICBKU0Zp
bmFsT2JqZWN0Ojp2aXNpdENoaWxkcmVuKGNvbnN0X2Nhc3Q8SlNDZWxsKj4oY2VsbCksICp0aGlz
KTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEFycmF5VHlwZToKKyAgICAgICAgSlNBcnJh
eTo6dmlzaXRDaGlsZHJlbihjb25zdF9jYXN0PEpTQ2VsbCo+KGNlbGwpLCAqdGhpcyk7CisgICAg
ICAgIGJyZWFrOworICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICAvLyBGSVhNRTogVGhp
cyBjb3VsZCBiZSBzbyBtdWNoIGJldHRlci4KKyAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MjQ2MgorICAgICAgICBjZWxsLT5tZXRob2RUYWJsZSh2
bSgpKS0+dmlzaXRDaGlsZHJlbihjb25zdF9jYXN0PEpTQ2VsbCo+KGNlbGwpLCAqdGhpcyk7Cisg
ICAgICAgIGJyZWFrOworICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9WZXJpZmllclNsb3RWaXNpdG9yLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVmVyaWZpZXJTbG90VmlzaXRvci5oCShub25l
eGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1ZlcmlmaWVyU2xvdFZpc2l0
b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE2OSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQWJz
dHJhY3RTbG90VmlzaXRvci5oIgorI2luY2x1ZGUgIkpTQ0pTVmFsdWUuaCIKKyNpbmNsdWRlICJW
aXNpdFJhY2VLZXkuaCIKKyNpbmNsdWRlICJXZWFrLmgiCisjaW5jbHVkZSA8bWVtb3J5PgorI2lu
Y2x1ZGUgPHd0Zi9CaXRWZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KKyNpbmNsdWRl
IDx3dGYvRmFzdE1hbGxvYy5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8
d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9TaGFyZWRUYXNrLmg+CisKK25hbWVzcGFjZSBX
VEYgeworCitjbGFzcyBTdGFja1RyYWNlOworCit9IC8vIG5hbWVzcGFjZSBXVEYKKworbmFtZXNw
YWNlIEpTQyB7CisKK2NsYXNzIENvbnNlcnZhdGl2ZVJvb3RzOworY2xhc3MgSGVhcDsKK2NsYXNz
IEhlYXBDZWxsOworY2xhc3MgUHJlY2lzZUFsbG9jYXRpb247CitjbGFzcyBNYXJrZWRCbG9jazsK
KwordXNpbmcgV1RGOjpTdGFja1RyYWNlOworCitjbGFzcyBWZXJpZmllclNsb3RWaXNpdG9yIDog
cHVibGljIEFic3RyYWN0U2xvdFZpc2l0b3IgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFZl
cmlmaWVyU2xvdFZpc2l0b3IpOworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworICAgIHVz
aW5nIEJhc2UgPSBBYnN0cmFjdFNsb3RWaXNpdG9yOworcHVibGljOgorICAgIHN0cnVjdCBNYXJr
ZXJEYXRhIHsKKyAgICAgICAgTWFya2VyRGF0YSgpID0gZGVmYXVsdDsKKyAgICAgICAgTWFya2Vy
RGF0YShNYXJrZXJEYXRhJiYpID0gZGVmYXVsdDsKKyAgICAgICAgTWFya2VyRGF0YShIZWFwQ2Vs
bCosIHN0ZDo6dW5pcXVlX3B0cjxTdGFja1RyYWNlPiYmKTsKKyAgICAgICAgTWFya2VyRGF0YSYg
b3BlcmF0b3I9KE1hcmtlckRhdGEmJikgPSBkZWZhdWx0OworCisgICAgICAgIEhlYXBDZWxsKiBw
YXJlbnQgeyBudWxscHRyIH07CisgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxTdGFja1RyYWNlPiBz
dGFjazsKKyAgICB9OworCisgICAgVmVyaWZpZXJTbG90VmlzaXRvcihIZWFwJik7CisgICAgflZl
cmlmaWVyU2xvdFZpc2l0b3IoKTsKKworICAgIHZvaWQgYXBwZW5kKGNvbnN0IENvbnNlcnZhdGl2
ZVJvb3RzJikgZmluYWw7CisgICAgdm9pZCBhcHBlbmRVbmJhcnJpZXJlZChKU0NlbGwqKSBmaW5h
bDsKKyAgICB2b2lkIGFwcGVuZEhpZGRlblVuYmFycmllcmVkKEpTQ2VsbCopIGZpbmFsOworCisg
ICAgYm9vbCBpc0ZpcnN0VmlzaXQoKSBjb25zdCBmaW5hbDsKKyAgICBib29sIGlzTWFya2VkKGNv
bnN0IHZvaWQqKSBjb25zdCBmaW5hbDsKKyAgICBib29sIGlzTWFya2VkKE1hcmtlZEJsb2NrJiwg
SGVhcENlbGwqKSBjb25zdCBmaW5hbDsKKyAgICBib29sIGlzTWFya2VkKFByZWNpc2VBbGxvY2F0
aW9uJiwgSGVhcENlbGwqKSBjb25zdCBmaW5hbDsKKworICAgIHZvaWQgbWFya0F1eGlsaWFyeShj
b25zdCB2b2lkKikgZmluYWw7CisKKyAgICB2b2lkIHJlcG9ydEV4dHJhTWVtb3J5VmlzaXRlZChz
aXplX3QpIGZpbmFsIHsgfQorI2lmIEVOQUJMRShSRVNPVVJDRV9VU0FHRSkKKyAgICB2b2lkIHJl
cG9ydEV4dGVybmFsTWVtb3J5VmlzaXRlZChzaXplX3QpIGZpbmFsIHsgfQorI2VuZGlmCisKKyAg
ICBib29sIG11dGF0b3JJc1N0b3BwZWQoKSBjb25zdCBmaW5hbDsKKworICAgIHZvaWQgZGlkUmFj
ZShjb25zdCBWaXNpdFJhY2VLZXkmKSBmaW5hbCB7IH0KKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJl
YW0mKSBjb25zdCBmaW5hbCB7IH0KKworICAgIHZvaWQgdmlzaXRBc0NvbnN0cmFpbnQoY29uc3Qg
SlNDZWxsKikgZmluYWw7CisKKyAgICB2b2lkIGRyYWluKCk7CisKKyAgICB2b2lkIGFkZFBhcmFs
bGVsQ29uc3RyYWludFRhc2soUmVmUHRyPFNoYXJlZFRhc2s8dm9pZChBYnN0cmFjdFNsb3RWaXNp
dG9yJik+PikgZmluYWw7CisgICAgdm9pZCBleGVjdXRlQ29uc3RyYWludFRhc2tzKCk7CisKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hMaXZlQ2VsbChjb25zdCBG
dW5jdG9yJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBmb3JFYWNoTGl2
ZVByZWNpc2VBbGxvY2F0aW9uKGNvbnN0IEZ1bmN0b3ImKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hMaXZlTWFya2VkQmxvY2tDZWxsKGNvbnN0IEZ1bmN0b3Im
KTsKKworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZHVtcE1hcmtlckRhdGEoSGVhcENlbGwq
KTsKKworcHJpdmF0ZToKKyAgICBjbGFzcyBNYXJrZWRCbG9ja0RhdGEgeworICAgICAgICBXVEZf
TUFLRV9GQVNUX0FMTE9DQVRFRDsKKyAgICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoTWFya2Vk
QmxvY2tEYXRhKTsKKyAgICBwdWJsaWM6CisgICAgICAgIE1hcmtlZEJsb2NrRGF0YShNYXJrZWRC
bG9jayopOworCisgICAgICAgIE1hcmtlZEJsb2NrKiBibG9jaygpIGNvbnN0IHsgcmV0dXJuIG1f
YmxvY2s7IH0KKyAgICAgICAgY29uc3QgQml0VmVjdG9yJiBhdG9tcygpIGNvbnN0IHsgcmV0dXJu
IG1fYXRvbXM7IH0KKworICAgICAgICBib29sIGlzTWFya2VkKHVuc2lnbmVkIGF0b21OdW1iZXIp
IHsgcmV0dXJuIG1fYXRvbXMucXVpY2tHZXQoYXRvbU51bWJlcik7IH0KKyAgICAgICAgYm9vbCB0
ZXN0QW5kU2V0TWFya2VkKHVuc2lnbmVkIGF0b21OdW1iZXIpIHsgcmV0dXJuIG1fYXRvbXMucXVp
Y2tTZXQoYXRvbU51bWJlcik7IH0KKworICAgICAgICB2b2lkIGFkZE1hcmtlckRhdGEodW5zaWdu
ZWQgYXRvbU51bWJlciwgTWFya2VyRGF0YSYmKTsKKyAgICAgICAgY29uc3QgTWFya2VyRGF0YSog
bWFya2VyRGF0YSh1bnNpZ25lZCBhdG9tTnVtYmVyKSBjb25zdDsKKworICAgIHByaXZhdGU6Cisg
ICAgICAgIE1hcmtlZEJsb2NrKiBtX2Jsb2NrIHsgbnVsbHB0ciB9OworICAgICAgICBCaXRWZWN0
b3IgbV9hdG9tczsKKyAgICAgICAgVmVjdG9yPE1hcmtlckRhdGE+IG1fbWFya2VyczsKKyAgICB9
OworCisgICAgY2xhc3MgUHJlY2lzZUFsbG9jYXRpb25EYXRhIHsKKyAgICAgICAgV1RGX01BS0Vf
RkFTVF9BTExPQ0FURUQ7CisgICAgICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFByZWNpc2VBbGxv
Y2F0aW9uRGF0YSk7CisgICAgcHVibGljOgorICAgICAgICBQcmVjaXNlQWxsb2NhdGlvbkRhdGEo
UHJlY2lzZUFsbG9jYXRpb24qKTsKKyAgICAgICAgUHJlY2lzZUFsbG9jYXRpb24qIGFsbG9jYXRp
b24oKSBjb25zdCB7IHJldHVybiBtX2FsbG9jYXRpb247IH0KKworICAgICAgICB2b2lkIGFkZE1h
cmtlckRhdGEoTWFya2VyRGF0YSYmKTsKKyAgICAgICAgY29uc3QgTWFya2VyRGF0YSogbWFya2Vy
RGF0YSgpIGNvbnN0OworCisgICAgcHJpdmF0ZToKKyAgICAgICAgUHJlY2lzZUFsbG9jYXRpb24q
IG1fYWxsb2NhdGlvbiB7IG51bGxwdHIgfTsKKyAgICAgICAgTWFya2VyRGF0YSBtX21hcmtlcjsK
KyAgICB9OworCisgICAgdXNpbmcgTWFya2VkQmxvY2tNYXAgPSBIYXNoTWFwPE1hcmtlZEJsb2Nr
Kiwgc3RkOjp1bmlxdWVfcHRyPE1hcmtlZEJsb2NrRGF0YT4+OworICAgIHVzaW5nIFByZWNpc2VB
bGxvY2F0aW9uTWFwID0gSGFzaE1hcDxQcmVjaXNlQWxsb2NhdGlvbiosIHN0ZDo6dW5pcXVlX3B0
cjxQcmVjaXNlQWxsb2NhdGlvbkRhdGE+PjsKKworICAgIHZvaWQgYXBwZW5kVG9NYXJrU3RhY2so
SlNDZWxsKik7CisgICAgdm9pZCBhcHBlbmRTbG93KEpTQ2VsbCogY2VsbCkgeyBzZXRNYXJrZWRB
bmRBcHBlbmRUb01hcmtTdGFjayhjZWxsKTsgfQorCisgICAgYm9vbCB0ZXN0QW5kU2V0TWFya2Vk
KGNvbnN0IHZvaWQqIHJhd0NlbGwpOworICAgIGJvb2wgdGVzdEFuZFNldE1hcmtlZChQcmVjaXNl
QWxsb2NhdGlvbiYpOworICAgIGJvb2wgdGVzdEFuZFNldE1hcmtlZChNYXJrZWRCbG9jayYsIEhl
YXBDZWxsKik7CisKKyAgICB2b2lkIHNldE1hcmtlZEFuZEFwcGVuZFRvTWFya1N0YWNrKEpTQ2Vs
bCopOworCisgICAgdm9pZCB2aXNpdENoaWxkcmVuKGNvbnN0IEpTQ2VsbCopOworCisgICAgdm9p
ZCBkdW1wTWFya2VyRGF0YShQcmVjaXNlQWxsb2NhdGlvbiYsIEhlYXBDZWxsKik7CisgICAgdm9p
ZCBkdW1wTWFya2VyRGF0YShNYXJrZWRCbG9jayYsIEhlYXBDZWxsKik7CisgICAgdm9pZCBkdW1w
TWFya2VyRGF0YShIZWFwQ2VsbCosIGNvbnN0IE1hcmtlckRhdGEqKTsKKworICAgIFByZWNpc2VB
bGxvY2F0aW9uTWFwIG1fcHJlY2lzZUFsbG9jYXRpb25NYXA7CisgICAgTWFya2VkQmxvY2tNYXAg
bV9tYXJrZWRCbG9ja01hcDsKKyAgICBDb25jdXJyZW50UHRySGFzaFNldCBtX29wYXF1ZVJvb3RT
dG9yYWdlOworICAgIERlcXVlPFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoQWJzdHJhY3RTbG90Vmlz
aXRvciYpPj4sIDMyPiBtX2NvbnN0cmFpbnRUYXNrczsKK307CisKK30gLy8gbmFtZXNwYWNlIEpT
QwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVmVyaWZpZXJTbG90VmlzaXRvcklu
bGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9WZXJpZmll
clNsb3RWaXNpdG9ySW5saW5lcy5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL1ZlcmlmaWVyU2xvdFZpc2l0b3JJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw2MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQWJzdHJhY3RTbG90VmlzaXRvcklubGluZXMu
aCIKKyNpbmNsdWRlICJWZXJpZmllclNsb3RWaXNpdG9yLmgiCisKK25hbWVzcGFjZSBKU0Mgewor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgordm9pZCBWZXJpZmllclNsb3RWaXNpdG9yOjpm
b3JFYWNoTGl2ZUNlbGwoY29uc3QgRnVuY3RvciYgZnVuY3RvcikKK3sKKyAgICBmb3JFYWNoTGl2
ZVByZWNpc2VBbGxvY2F0aW9uKGZ1bmN0b3IpOworICAgIGZvckVhY2hMaXZlTWFya2VkQmxvY2tD
ZWxsKGZ1bmN0b3IpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgordm9pZCBWZXJp
ZmllclNsb3RWaXNpdG9yOjpmb3JFYWNoTGl2ZVByZWNpc2VBbGxvY2F0aW9uKGNvbnN0IEZ1bmN0
b3ImIGZ1bmMpCit7CisgICAgZm9yIChhdXRvJiBlbnRyeSA6IG1fcHJlY2lzZUFsbG9jYXRpb25N
YXApIHsKKyAgICAgICAgUHJlY2lzZUFsbG9jYXRpb24qIGFsbG9jYXRpb24gPSBlbnRyeS52YWx1
ZS0+YWxsb2NhdGlvbigpOworICAgICAgICBmdW5jKGFsbG9jYXRpb24tPmNlbGwoKSk7CisgICAg
fQorfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgordm9pZCBWZXJpZmllclNsb3RWaXNp
dG9yOjpmb3JFYWNoTGl2ZU1hcmtlZEJsb2NrQ2VsbChjb25zdCBGdW5jdG9yJiBmdW5jKQorewor
ICAgIGZvciAoYXV0byYgZW50cnkgOiBtX21hcmtlZEJsb2NrTWFwKSB7CisgICAgICAgIGF1dG8m
IGRhdGEgPSBlbnRyeS52YWx1ZTsKKyAgICAgICAgTWFya2VkQmxvY2sqIGJsb2NrID0gZGF0YS0+
YmxvY2soKTsKKyAgICAgICAgY29uc3QgQml0VmVjdG9yJiBhdG9tcyA9ICBkYXRhLT5hdG9tcygp
OworICAgICAgICBmb3IgKGF1dG8gYXRvbU51bWJlciA6IGF0b21zKQorICAgICAgICAgICAgZnVu
YyhiaXR3aXNlX2Nhc3Q8SGVhcENlbGwqPihibG9jay0+aGFuZGxlKCkuYXRvbUF0KGF0b21OdW1i
ZXIpKSk7CisgICAgfQorfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL1Zpc2l0Q291bnRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL1Zpc2l0Q291bnRlci5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9WaXNpdENvdW50ZXIuaAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNSw3
ICsyNSw3IEBACiAKICNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSAiU2xvdFZpc2l0b3IuaCIKKyNp
bmNsdWRlICJBYnN0cmFjdFNsb3RWaXNpdG9yLmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC0z
MywxMyArMzMsMTMgQEAgY2xhc3MgVmlzaXRDb3VudGVyIHsKIHB1YmxpYzoKICAgICBWaXNpdENv
dW50ZXIoKSB7IH0KICAgICAKLSAgICBWaXNpdENvdW50ZXIoU2xvdFZpc2l0b3ImIHZpc2l0b3Ip
CisgICAgVmlzaXRDb3VudGVyKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiAgICAgICAg
IDogbV92aXNpdG9yKCZ2aXNpdG9yKQogICAgICAgICAsIG1faW5pdGlhbFZpc2l0Q291bnQodmlz
aXRvci52aXNpdENvdW50KCkpCiAgICAgewogICAgIH0KICAgICAKLSAgICBTbG90VmlzaXRvciYg
dmlzaXRvcigpIGNvbnN0IHsgcmV0dXJuICptX3Zpc2l0b3I7IH0KKyAgICBBYnN0cmFjdFNsb3RW
aXNpdG9yJiB2aXNpdG9yKCkgY29uc3QgeyByZXR1cm4gKm1fdmlzaXRvcjsgfQogICAgIAogICAg
IHNpemVfdCB2aXNpdENvdW50KCkgY29uc3QKICAgICB7CkBAIC00Nyw3ICs0Nyw3IEBAIHB1Ymxp
YzoKICAgICB9CiAgICAgCiBwcml2YXRlOgotICAgIFNsb3RWaXNpdG9yKiBtX3Zpc2l0b3IgeyBu
dWxscHRyIH07CisgICAgQWJzdHJhY3RTbG90VmlzaXRvciogbV92aXNpdG9yIHsgbnVsbHB0ciB9
OwogICAgIHNpemVfdCBtX2luaXRpYWxWaXNpdENvdW50IHsgMCB9OwogfTsKIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha0Jsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrQmxvY2suY3BwCShyZXZpc2lvbiAyNzI4MzApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrQmxvY2suY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE3IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDIxIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtOTgsMTIgKzk4LDExIEBAIHZvaWQgV2Vha0Jsb2NrOjpzd2VlcCgpCiAgICAgQVNTRVJU
KCFtX3N3ZWVwUmVzdWx0LmlzTnVsbCgpKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgQ29udGFp
bmVyVHlwZT4KLXZvaWQgV2Vha0Jsb2NrOjpzcGVjaWFsaXplZFZpc2l0KENvbnRhaW5lclR5cGUm
IGNvbnRhaW5lciwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBDb250
YWluZXJUeXBlLCB0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBXZWFrQmxvY2s6OnNwZWNpYWxpemVk
VmlzaXQoQ29udGFpbmVyVHlwZSYgY29udGFpbmVyLCBWaXNpdG9yJiB2aXNpdG9yKQogewotICAg
IEhlYXBWZXJzaW9uIG1hcmtpbmdWZXJzaW9uID0gdmlzaXRvci5tYXJraW5nVmVyc2lvbigpOwot
CiAgICAgc2l6ZV90IGNvdW50ID0gd2Vha0ltcGxDb3VudCgpOworICAgIEhlYXBBbmFseXplciog
aGVhcEFuYWx5emVyID0gdmlzaXRvci52bSgpLmFjdGl2ZUhlYXBBbmFseXplcigpOwogICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgY291bnQ7ICsraSkgewogICAgICAgICBXZWFrSW1wbCogd2Vh
a0ltcGwgPSAmd2Vha0ltcGxzKClbaV07CiAgICAgICAgIGlmICh3ZWFrSW1wbC0+c3RhdGUoKSAh
PSBXZWFrSW1wbDo6TGl2ZSkKQEAgLTExNCwxMiArMTEzLDEyIEBAIHZvaWQgV2Vha0Jsb2NrOjpz
cGVjaWFsaXplZFZpc2l0KENvbnRhaW4KICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAg
IEpTVmFsdWUganNWYWx1ZSA9IHdlYWtJbXBsLT5qc1ZhbHVlKCk7Ci0gICAgICAgIGlmIChjb250
YWluZXIuaXNNYXJrZWQobWFya2luZ1ZlcnNpb24sIGpzVmFsdWUuYXNDZWxsKCkpKQorICAgICAg
ICBpZiAodmlzaXRvci5pc01hcmtlZChjb250YWluZXIsIGpzVmFsdWUuYXNDZWxsKCkpKQogICAg
ICAgICAgICAgY29udGludWU7CiAgICAgICAgIAogICAgICAgICBjb25zdCBjaGFyKiByZWFzb24g
PSAiIjsKICAgICAgICAgY29uc3QgY2hhcioqIHJlYXNvblB0ciA9IG51bGxwdHI7Ci0gICAgICAg
IGlmIChVTkxJS0VMWSh2aXNpdG9yLmlzQW5hbHl6aW5nSGVhcCgpKSkKKyAgICAgICAgaWYgKFVO
TElLRUxZKGhlYXBBbmFseXplcikpCiAgICAgICAgICAgICByZWFzb25QdHIgPSAmcmVhc29uOwog
CiAgICAgICAgIGlmICghd2Vha0hhbmRsZU93bmVyLT5pc1JlYWNoYWJsZUZyb21PcGFxdWVSb290
cyhIYW5kbGU8VW5rbm93bj46OndyYXBTbG90KCZjb25zdF9jYXN0PEpTVmFsdWUmPihqc1ZhbHVl
KSksIHdlYWtJbXBsLT5jb250ZXh0KCksIHZpc2l0b3IsIHJlYXNvblB0cikpCkBAIC0xMjcsMTQg
KzEyNiwxNCBAQCB2b2lkIFdlYWtCbG9jazo6c3BlY2lhbGl6ZWRWaXNpdChDb250YWluCiAKICAg
ICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZChqc1ZhbHVlKTsKIAotICAgICAgICBpZiAo
VU5MSUtFTFkodmlzaXRvci5pc0FuYWx5emluZ0hlYXAoKSkpIHsKKyAgICAgICAgaWYgKFVOTElL
RUxZKGhlYXBBbmFseXplcikpIHsKICAgICAgICAgICAgIGlmIChqc1ZhbHVlLmlzQ2VsbCgpKQot
ICAgICAgICAgICAgICAgIHZpc2l0b3IuaGVhcEFuYWx5emVyKCktPnNldE9wYXF1ZVJvb3RSZWFj
aGFiaWxpdHlSZWFzb25Gb3JDZWxsKGpzVmFsdWUuYXNDZWxsKCksICpyZWFzb25QdHIpOworICAg
ICAgICAgICAgICAgIGhlYXBBbmFseXplci0+c2V0T3BhcXVlUm9vdFJlYWNoYWJpbGl0eVJlYXNv
bkZvckNlbGwoanNWYWx1ZS5hc0NlbGwoKSwgKnJlYXNvblB0cik7CiAgICAgICAgIH0KICAgICB9
CiB9CiAKLXZvaWQgV2Vha0Jsb2NrOjp2aXNpdChTbG90VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQg
V2Vha0Jsb2NrOjp2aXNpdChBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIC8v
IElmIGEgYmxvY2sgaXMgY29tcGxldGVseSBlbXB0eSwgYSB2aXNpdCB3b24ndCBoYXZlIGFueSBl
ZmZlY3QuCiAgICAgaWYgKGlzRW1wdHkoKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL1dlYWtCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L1dlYWtCbG9jay5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9XZWFrQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTItMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMyLDggKzMyLDggQEAKIAogbmFt
ZXNwYWNlIEpTQyB7CiAKK2NsYXNzIEFic3RyYWN0U2xvdFZpc2l0b3I7CiBjbGFzcyBIZWFwOwot
Y2xhc3MgU2xvdFZpc2l0b3I7CiAKIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElG
SUVSKFdlYWtCbG9jayk7CiAKQEAgLTY1LDcgKzY1LDcgQEAgcHVibGljOgogICAgIHZvaWQgc3dl
ZXAoKTsKICAgICBTd2VlcFJlc3VsdCB0YWtlU3dlZXBSZXN1bHQoKTsKIAotICAgIHZvaWQgdmlz
aXQoU2xvdFZpc2l0b3ImKTsKKyAgICB2b2lkIHZpc2l0KEFic3RyYWN0U2xvdFZpc2l0b3ImKTsK
IAogICAgIHZvaWQgcmVhcCgpOwogCkBAIC03NSw4ICs3NSw4IEBAIHB1YmxpYzoKIHByaXZhdGU6
CiAgICAgc3RhdGljIEZyZWVDZWxsKiBhc0ZyZWVDZWxsKFdlYWtJbXBsKik7CiAgICAgCi0gICAg
dGVtcGxhdGU8dHlwZW5hbWUgQ29udGFpbmVyVHlwZT4KLSAgICB2b2lkIHNwZWNpYWxpemVkVmlz
aXQoQ29udGFpbmVyVHlwZSYsIFNsb3RWaXNpdG9yJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
Q29udGFpbmVyVHlwZSwgdHlwZW5hbWUgVmlzaXRvcj4KKyAgICB2b2lkIHNwZWNpYWxpemVkVmlz
aXQoQ29udGFpbmVyVHlwZSYsIFZpc2l0b3ImKTsKIAogICAgIGV4cGxpY2l0IFdlYWtCbG9jayhD
ZWxsQ29udGFpbmVyKTsKICAgICB2b2lkIGZpbmFsaXplKFdlYWtJbXBsKik7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrSGFuZGxlT3duZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtIYW5kbGVPd25lci5jcHAJKHJldmlzaW9u
IDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtIYW5kbGVPd25lci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
Mi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMzUsNyArMzUsNyBAQCBXZWFrSGFuZGxlT3duZXI6On5XZWFrSGFu
ZGxlT3duZXIoKQogewogfQogCi1ib29sIFdlYWtIYW5kbGVPd25lcjo6aXNSZWFjaGFibGVGcm9t
T3BhcXVlUm9vdHMoSGFuZGxlPFVua25vd24+LCB2b2lkKiwgU2xvdFZpc2l0b3ImLCBjb25zdCBj
aGFyKiopCitib29sIFdlYWtIYW5kbGVPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMo
SGFuZGxlPFVua25vd24+LCB2b2lkKiwgQWJzdHJhY3RTbG90VmlzaXRvciYsIGNvbnN0IGNoYXIq
KikKIHsKICAgICByZXR1cm4gZmFsc2U7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9XZWFrSGFuZGxlT3duZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9XZWFrSGFuZGxlT3duZXIuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvV2Vha0hhbmRsZU93bmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjksMTMg
KzI5LDEzIEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1jbGFzcyBTbG90VmlzaXRvcjsKK2NsYXNz
IEFic3RyYWN0U2xvdFZpc2l0b3I7CiAKIGNsYXNzIEpTX0VYUE9SVF9QUklWQVRFIFdlYWtIYW5k
bGVPd25lciB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+V2Vha0hhbmRsZU93bmVyKCk7CiAgICAg
Ly8gcmVhc29uIHdpbGwgb25seSBiZSBub24tbnVsbCB3aGVuIGdlbmVyYXRpbmcgYSBkZWJ1ZyBH
QyBoZWFwIHNuYXBzaG90LgotICAgIHZpcnR1YWwgYm9vbCBpc1JlYWNoYWJsZUZyb21PcGFxdWVS
b290cyhIYW5kbGU8VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIFNsb3RWaXNpdG9yJiwgY2hhciBj
b25zdCoqIHJlYXNvbiA9IG51bGxwdHIpOworICAgIHZpcnR1YWwgYm9vbCBpc1JlYWNoYWJsZUZy
b21PcGFxdWVSb290cyhIYW5kbGU8VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIEFic3RyYWN0U2xv
dFZpc2l0b3ImLCBjaGFyIGNvbnN0KiogcmVhc29uID0gbnVsbHB0cik7CiAgICAgdmlydHVhbCB2
b2lkIGZpbmFsaXplKEhhbmRsZTxVbmtub3duPiwgdm9pZCogY29udGV4dCk7CiB9OwogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrU2V0LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha1NldC5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTkgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01
MSw3ICs1MSw3IEBAIHB1YmxpYzoKICAgICBib29sIGlzRW1wdHkoKSBjb25zdDsKICAgICBib29s
IGlzVHJpdmlhbGx5RGVzdHJ1Y3RpYmxlKCkgY29uc3Q7CiAKLSAgICB2b2lkIHZpc2l0KFNsb3RW
aXNpdG9yJik7CisgICAgdm9pZCB2aXNpdChBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAKICAgICB2
b2lkIHJlYXAoKTsKICAgICB2b2lkIHN3ZWVwKCk7CkBAIC0xMTQsNyArMTE0LDcgQEAgaW5saW5l
IHZvaWQgV2Vha1NldDo6bGFzdENoYW5jZVRvRmluYWxpegogICAgICAgICBibG9jay0+bGFzdENo
YW5jZVRvRmluYWxpemUoKTsKIH0KIAotaW5saW5lIHZvaWQgV2Vha1NldDo6dmlzaXQoU2xvdFZp
c2l0b3ImIHZpc2l0b3IpCitpbmxpbmUgdm9pZCBXZWFrU2V0Ojp2aXNpdChBYnN0cmFjdFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQogewogICAgIGZvciAoV2Vha0Jsb2NrKiBibG9jayA9IG1fYmxvY2tz
LmhlYWQoKTsgYmxvY2s7IGJsb2NrID0gYmxvY2stPm5leHQoKSkKICAgICAgICAgYmxvY2stPnZp
c2l0KHZpc2l0b3IpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1No
YWRvd0NoaWNrZW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRl
cnByZXRlci9TaGFkb3dDaGlja2VuLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1NoYWRvd0NoaWNrZW4uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE5IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIxIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtNDQwLDcgKzQ0MCw3IEBAIHZvaWQgU2hhZG93Q2hpY2tlbjo6dXBkYXRlKFZNJiB2bSwg
Q2FsbEYKICAgICAgICAgZGF0YUxvZygiICAgIEFmdGVyIGNsZWFuLXVwOiAiLCAqdGhpcywgIlxu
Iik7CiB9CiAKLXZvaWQgU2hhZG93Q2hpY2tlbjo6dmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYg
dmlzaXRvcikKK3ZvaWQgU2hhZG93Q2hpY2tlbjo6dmlzaXRDaGlsZHJlbihBYnN0cmFjdFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQogewogICAgIGZvciAodW5zaWduZWQgaSA9IG1fbG9nQ3Vyc29yIC0g
bV9sb2c7IGktLTspIHsKICAgICAgICAgSlNPYmplY3QqIGNhbGxlZSA9IG1fbG9nW2ldLmNhbGxl
ZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TaGFkb3dDaGlja2Vu
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1NoYWRv
d0NoaWNrZW4uaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
dGVycHJldGVyL1NoYWRvd0NoaWNrZW4uaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNSwxMyArMzUsMTMgQEAK
IAogbmFtZXNwYWNlIEpTQyB7CiAKK2NsYXNzIEFic3RyYWN0U2xvdFZpc2l0b3I7CiBjbGFzcyBD
YWxsRnJhbWU7CiBjbGFzcyBDb2RlQmxvY2s7CiBjbGFzcyBKU0FycmF5OwogY2xhc3MgSlNPYmpl
Y3Q7CiBjbGFzcyBKU1Njb3BlOwogY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwotY2xhc3Mg
U2xvdFZpc2l0b3I7CiBjbGFzcyBWTTsKIAogLy8gU2hhZG93Q2hpY2tlbiBpcyBhIGxvZyB0aGF0
IGNhbiBiZSB1c2VkIHRvIHByb2R1Y2UgYSBzaGFkb3cgc3RhY2sgb2YgQ0hJQ0tFTi1zdHlsZSBz
dGFjayBmcmFtZXMuCkBAIC0xOTYsNyArMTk2LDcgQEAgcHVibGljOgogICAgIHRlbXBsYXRlPHR5
cGVuYW1lIEZ1bmN0b3I+CiAgICAgdm9pZCBpdGVyYXRlKFZNJiwgQ2FsbEZyYW1lKiwgY29uc3Qg
RnVuY3RvciYpOwogICAgIAotICAgIHZvaWQgdmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYpOwor
ICAgIHZvaWQgdmlzaXRDaGlsZHJlbihBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAgICAgdm9pZCBy
ZXNldCgpOwogICAgIAogICAgIC8vIEpJVCBzdXBwb3J0LgpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9HQ0F3YXJlSklUU3R1YlJvdXRpbmUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvR0NBd2FyZUpJVFN0dWJSb3V0aW5lLmNwcAkocmV2aXNpb24g
MjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9HQ0F3YXJlSklUU3R1YlJvdXRp
bmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMi0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNzMsNyArNzMsNyBAQCB2b2lkIEdDQXdhcmVKSVRT
dHViUm91dGluZTo6ZGVsZXRlRnJvbUdDCiAgICAgZGVsZXRlIHRoaXM7CiB9CiAKLXZvaWQgR0NB
d2FyZUpJVFN0dWJSb3V0aW5lOjptYXJrUmVxdWlyZWRPYmplY3RzSW50ZXJuYWwoU2xvdFZpc2l0
b3ImKQordm9pZCBHQ0F3YXJlSklUU3R1YlJvdXRpbmU6Om1hcmtSZXF1aXJlZE9iamVjdHNJbnRl
cm5hbChBYnN0cmFjdFNsb3RWaXNpdG9yJikKIHsKIH0KIApAQCAtOTIsNyArOTIsNyBAQCBNYXJr
aW5nR0NBd2FyZUpJVFN0dWJSb3V0aW5lOjp+TWFya2luZ0dDCiB7CiB9CiAKLXZvaWQgTWFya2lu
Z0dDQXdhcmVKSVRTdHViUm91dGluZTo6bWFya1JlcXVpcmVkT2JqZWN0c0ludGVybmFsKFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQordm9pZCBNYXJraW5nR0NBd2FyZUpJVFN0dWJSb3V0aW5lOjptYXJr
UmVxdWlyZWRPYmplY3RzSW50ZXJuYWwoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsK
ICAgICBmb3IgKGF1dG8mIGVudHJ5IDogbV9jZWxscykKICAgICAgICAgdmlzaXRvci5hcHBlbmQo
ZW50cnkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9HQ0F3YXJlSklUU3R1YlJv
dXRpbmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0dDQXdhcmVK
SVRTdHViUm91dGluZS5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0dDQXdhcmVKSVRTdHViUm91dGluZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjAsOCAr
NjAsOCBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBHQ0F3
YXJlSklUU3R1YlJvdXRpbmUoY29kZSwgdm0pKTsKICAgICB9Ci0gICAgCi0gICAgdm9pZCBtYXJr
UmVxdWlyZWRPYmplY3RzKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorCisgICAgdm9pZCBtYXJrUmVx
dWlyZWRPYmplY3RzKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiAgICAgewogICAgICAg
ICBtYXJrUmVxdWlyZWRPYmplY3RzSW50ZXJuYWwodmlzaXRvcik7CiAgICAgfQpAQCAtNzEsNyAr
NzEsNyBAQCBwdWJsaWM6CiBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBvYnNlcnZlWmVyb1JlZkNvdW50
KCkgb3ZlcnJpZGU7CiAgICAgCi0gICAgdmlydHVhbCB2b2lkIG1hcmtSZXF1aXJlZE9iamVjdHNJ
bnRlcm5hbChTbG90VmlzaXRvciYpOworICAgIHZpcnR1YWwgdm9pZCBtYXJrUmVxdWlyZWRPYmpl
Y3RzSW50ZXJuYWwoQWJzdHJhY3RTbG90VmlzaXRvciYpOwogCiBwcml2YXRlOgogICAgIGZyaWVu
ZCBjbGFzcyBKSVRTdHViUm91dGluZVNldDsKQEAgLTg5LDcgKzg5LDcgQEAgcHVibGljOgogICAg
IH5NYXJraW5nR0NBd2FyZUpJVFN0dWJSb3V0aW5lKCkgb3ZlcnJpZGU7CiAgICAgCiBwcm90ZWN0
ZWQ6Ci0gICAgdm9pZCBtYXJrUmVxdWlyZWRPYmplY3RzSW50ZXJuYWwoU2xvdFZpc2l0b3ImKSBv
dmVycmlkZTsKKyAgICB2b2lkIG1hcmtSZXF1aXJlZE9iamVjdHNJbnRlcm5hbChBYnN0cmFjdFNs
b3RWaXNpdG9yJikgb3ZlcnJpZGU7CiAKIHByaXZhdGU6CiAgICAgVmVjdG9yPFdyaXRlQmFycmll
cjxKU0NlbGw+PiBtX2NlbGxzOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRX
b3JrbGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRX
b3JrbGlzdC5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUV29ya2xpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxNi0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9Qb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Qb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZS5jcHAJ
KHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUG9seW1vcnBo
aWNDYWxsU3R1YlJvdXRpbmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTM1LDcgKzEzNSw3IEBA
IGJvb2wgUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmU6OnZpc2l0V2UKICAgICByZXR1cm4gaXNT
dGlsbExpdmU7CiB9CiAKLXZvaWQgUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmU6Om1hcmtSZXF1
aXJlZE9iamVjdHNJbnRlcm5hbChTbG90VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgUG9seW1vcnBo
aWNDYWxsU3R1YlJvdXRpbmU6Om1hcmtSZXF1aXJlZE9iamVjdHNJbnRlcm5hbChBYnN0cmFjdFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGZvciAoYXV0byYgdmFyaWFudCA6IG1fdmFyaWFu
dHMpCiAgICAgICAgIHZpc2l0b3IuYXBwZW5kKHZhcmlhbnQpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9Qb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUuaAko
cmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Qb2x5bW9ycGhp
Y0NhbGxTdHViUm91dGluZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxNS0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTA1LDcgKzEwNSw3IEBAIHB1
YmxpYzoKICAgICBib29sIHZpc2l0V2VhayhWTSYpIGZpbmFsOwogCiBwcml2YXRlOgotICAgIHZv
aWQgbWFya1JlcXVpcmVkT2JqZWN0c0ludGVybmFsKFNsb3RWaXNpdG9yJikgZmluYWw7CisgICAg
dm9pZCBtYXJrUmVxdWlyZWRPYmplY3RzSW50ZXJuYWwoQWJzdHJhY3RTbG90VmlzaXRvciYpIGZp
bmFsOwogCiAgICAgVmVjdG9yPFdyaXRlQmFycmllcjxKU0NlbGw+LCAyPiBtX3ZhcmlhbnRzOwog
ICAgIFVuaXF1ZUFycmF5PHVpbnQzMl90PiBtX2Zhc3RDb3VudHM7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9BYnN0cmFjdE1vZHVsZVJlY29yZC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQWJzdHJhY3RNb2R1bGVSZWNvcmQuY3Bw
CShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BYnN0
cmFjdE1vZHVsZVJlY29yZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02MCw3ICs2MCw4IEBAIHZv
aWQgQWJzdHJhY3RNb2R1bGVSZWNvcmQ6OmZpbmlzaENyZWF0aW8KICAgICBwdXREaXJlY3Qodm0s
IElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJkZXBlbmRlbmNpZXNNYXAiX3MpLCBtX2RlcGVu
ZGVuY2llc01hcC5nZXQoKSk7CiB9CiAKLXZvaWQgQWJzdHJhY3RNb2R1bGVSZWNvcmQ6OnZpc2l0
Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5
cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEFic3RyYWN0TW9kdWxlUmVjb3JkOjp2aXNpdENoaWxkcmVu
SW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgQWJzdHJhY3RNb2R1
bGVSZWNvcmQqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8QWJzdHJhY3RNb2R1bGVSZWNvcmQqPihjZWxs
KTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBA
IC03MCw2ICs3MSw4IEBAIHZvaWQgQWJzdHJhY3RNb2R1bGVSZWNvcmQ6OnZpc2l0Q2hpbGRyZW4K
ICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2RlcGVuZGVuY2llc01hcCk7CiB9CiAK
K0RFRklORV9WSVNJVF9DSElMRFJFTihBYnN0cmFjdE1vZHVsZVJlY29yZCk7CisKIHZvaWQgQWJz
dHJhY3RNb2R1bGVSZWNvcmQ6OmFwcGVuZFJlcXVlc3RlZE1vZHVsZShjb25zdCBJZGVudGlmaWVy
JiBtb2R1bGVOYW1lKQogewogICAgIG1fcmVxdWVzdGVkTW9kdWxlcy5hZGQobW9kdWxlTmFtZS5p
bXBsKCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQWJzdHJhY3RNb2R1
bGVSZWNvcmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9B
YnN0cmFjdE1vZHVsZVJlY29yZC5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9BYnN0cmFjdE1vZHVsZVJlY29yZC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEz
Niw3ICsxMzYsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgQWJzdHJhY3RNb2R1bGVSZWNvcmQoVk0mLCBT
dHJ1Y3R1cmUqLCBjb25zdCBJZGVudGlmaWVyJik7CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihK
U0dsb2JhbE9iamVjdCosIFZNJik7CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpT
Q2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAg
IHZvaWQgc2V0TW9kdWxlRW52aXJvbm1lbnQoSlNHbG9iYWxPYmplY3QqLCBKU01vZHVsZUVudmly
b25tZW50Kik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FyZ0xpc3Qu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FyZ0xpc3Qu
Y3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9B
cmdMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiAgQ29weXJp
Z2h0IChDKSAyMDAzLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENv
cHlyaWdodCAoQykgMjAwMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCkBAIC01MSw3ICs1MSw3IEBAIHZvaWQgQXJnTGlzdDo6Z2V0U2xp
Y2UoaW50IHN0YXJ0SW5kZXgsIEEKICAgICByZXN1bHQubV9hcmdDb3VudCA9ICBtX2FyZ0NvdW50
IC0gc3RhcnRJbmRleDsKIH0KIAotdm9pZCBNYXJrZWRBcmd1bWVudEJ1ZmZlcjo6bWFya0xpc3Rz
KFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBMaXN0U2V0JiBtYXJrU2V0KQordm9pZCBNYXJrZWRBcmd1
bWVudEJ1ZmZlcjo6bWFya0xpc3RzKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIExpc3RT
ZXQmIG1hcmtTZXQpCiB7CiAgICAgTGlzdFNldDo6aXRlcmF0b3IgZW5kID0gbWFya1NldC5lbmQo
KTsKICAgICBmb3IgKExpc3RTZXQ6Oml0ZXJhdG9yIGl0ID0gbWFya1NldC5iZWdpbigpOyBpdCAh
PSBlbmQ7ICsraXQpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FyZ0xp
c3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcmdMaXN0
LmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Fy
Z0xpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJpZ2h0
IChDKSAxOTk5LTIwMDEgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKLSAqICBDb3B5cmln
aHQgKEMpIDIwMDMtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29w
eXJpZ2h0IChDKSAyMDAzLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKQEAgLTExOCw3ICsxMTgsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJl
dHVybiByZXN1bHQ7CiAgICAgfQogICAgICAgICAKLSAgICBzdGF0aWMgdm9pZCBtYXJrTGlzdHMo
U2xvdFZpc2l0b3ImLCBMaXN0U2V0Jik7CisgICAgc3RhdGljIHZvaWQgbWFya0xpc3RzKEFic3Ry
YWN0U2xvdFZpc2l0b3ImLCBMaXN0U2V0Jik7CiAKICAgICB2b2lkIGVuc3VyZUNhcGFjaXR5KHNp
emVfdCByZXF1ZXN0ZWRDYXBhY2l0eSkKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9DYWNoZWFibGVJZGVudGlmaWVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVhYmxlSWRlbnRpZmllci5oCShyZXZpc2lvbiAyNzI4
MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWFibGVJZGVudGlmaWVy
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAy
MC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMzksMTAgKzM5LDEwIEBAIHVzaW5nIFdURjo6VW5pcXVlZFN0cmlu
Z0ltcGw7CiAKIG5hbWVzcGFjZSBKU0MgewogCitjbGFzcyBBYnN0cmFjdFNsb3RWaXNpdG9yOwog
Y2xhc3MgQ29kZUJsb2NrOwogY2xhc3MgSWRlbnRpZmllcjsKIGNsYXNzIEpTQ2VsbDsKLWNsYXNz
IFNsb3RWaXNpdG9yOwogCiBjbGFzcyBDYWNoZWFibGVJZGVudGlmaWVyIHsKIHB1YmxpYzoKQEAg
LTg3LDcgKzg3LDcgQEAgcHVibGljOgogCiAgICAgdWludHB0cl90IHJhd0JpdHMoKSBjb25zdCB7
IHJldHVybiBtX2JpdHM7IH0KIAotICAgIGlubGluZSB2b2lkIHZpc2l0QWdncmVnYXRlKFNsb3RW
aXNpdG9yJikgY29uc3Q7CisgICAgaW5saW5lIHZvaWQgdmlzaXRBZ2dyZWdhdGUoQWJzdHJhY3RT
bG90VmlzaXRvciYpIGNvbnN0OwogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBkdW1wKFBy
aW50U3RyZWFtJikgY29uc3Q7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0NhY2hlYWJsZUlkZW50aWZpZXJJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVhYmxlSWRlbnRpZmllcklubGluZXMuaAkocmV2aXNpb24g
MjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVhYmxlSWRlbnRp
ZmllcklubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDIwLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMzcsNyArMTM3LDcgQEAgaW5saW5lIHZvaWQg
Q2FjaGVhYmxlSWRlbnRpZmllcjo6c2V0VWlkQgogICAgIG1fYml0cyA9IGJpdHdpc2VfY2FzdDx1
aW50cHRyX3Q+KHVpZCkgfCBzX3VpZFRhZzsKIH0KIAotaW5saW5lIHZvaWQgQ2FjaGVhYmxlSWRl
bnRpZmllcjo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0Citpbmxp
bmUgdm9pZCBDYWNoZWFibGVJZGVudGlmaWVyOjp2aXNpdEFnZ3JlZ2F0ZShBYnN0cmFjdFNsb3RW
aXNpdG9yJiB2aXNpdG9yKSBjb25zdAogewogICAgIGlmIChtX2JpdHMgJiYgaXNDZWxsKCkpCiAg
ICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQoY2VsbCgpKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0NsYXNzSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0NsYXNzSW5mby5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DbGFzc0luZm8uaAkod29ya2luZyBjb3B5KQpA
QCAtMSw3ICsxLDcgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDEgSGFycmkgUG9y
dGVuIChwb3J0ZW5Aa2RlLm9yZykKICAqICBDb3B5cmlnaHQgKEMpIDIwMDEgUGV0ZXIgS2VsbHkg
KHBta0Bwb3N0LmNvbSkKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAxOSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTQ0LDkgKzQ0
LDYgQEAgc3RydWN0IE1ldGhvZFRhYmxlIHsKICAgICB1c2luZyBEZXN0cm95RnVuY3Rpb25QdHIg
PSB2b2lkICgqKShKU0NlbGwqKTsKICAgICBEZXN0cm95RnVuY3Rpb25QdHIgTUVUSE9EX1RBQkxF
X0VOVFJZKGRlc3Ryb3kpOwogCi0gICAgdXNpbmcgVmlzaXRDaGlsZHJlbkZ1bmN0aW9uUHRyID0g
dm9pZCAoKikoSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKLSAgICBWaXNpdENoaWxkcmVuRnVuY3Rp
b25QdHIgTUVUSE9EX1RBQkxFX0VOVFJZKHZpc2l0Q2hpbGRyZW4pOwotCiAgICAgdXNpbmcgR2V0
Q2FsbERhdGFGdW5jdGlvblB0ciA9IENhbGxEYXRhICgqKShKU0NlbGwqKTsKICAgICBHZXRDYWxs
RGF0YUZ1bmN0aW9uUHRyIE1FVEhPRF9UQUJMRV9FTlRSWShnZXRDYWxsRGF0YSk7CiAKQEAgLTEy
MCw3ICsxMTcsMTYgQEAgc3RydWN0IE1ldGhvZFRhYmxlIHsKICAgICB1c2luZyBFc3RpbWF0ZWRT
aXplRnVuY3Rpb25QdHIgPSBzaXplX3QgKCopKEpTQ2VsbCosIFZNJik7CiAgICAgRXN0aW1hdGVk
U2l6ZUZ1bmN0aW9uUHRyIE1FVEhPRF9UQUJMRV9FTlRSWShlc3RpbWF0ZWRTaXplKTsKIAotICAg
IHVzaW5nIFZpc2l0T3V0cHV0Q29uc3RyYWludHNQdHIgPSB2b2lkICgqKShKU0NlbGwqLCBTbG90
VmlzaXRvciYpOworICAgIHVzaW5nIFZpc2l0Q2hpbGRyZW5GdW5jdGlvblB0ciA9IHZvaWQgKCop
KEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgVmlzaXRDaGlsZHJlbkZ1bmN0aW9uUHRyIE1F
VEhPRF9UQUJMRV9FTlRSWSh2aXNpdENoaWxkcmVuV2l0aFNsb3RWaXNpdG9yKTsKKworICAgIHVz
aW5nIFZpc2l0Q2hpbGRyZW5XaXRoQWJzdHJhY3RTbG90VmlzaXRvclB0ciA9IHZvaWQgKCopKEpT
Q2VsbCosIEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKKyAgICBWaXNpdENoaWxkcmVuV2l0aEFic3Ry
YWN0U2xvdFZpc2l0b3JQdHIgTUVUSE9EX1RBQkxFX0VOVFJZKHZpc2l0Q2hpbGRyZW5XaXRoQWJz
dHJhY3RTbG90VmlzaXRvcik7CisKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgdmlzaXRDaGlsZHJl
bihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBjb25zdCB7IHZpc2l0Q2hpbGRy
ZW5XaXRoU2xvdFZpc2l0b3IoY2VsbCwgdmlzaXRvcik7IH0KKyAgICBBTFdBWVNfSU5MSU5FIHZv
aWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0
b3IpIGNvbnN0IHsgdmlzaXRDaGlsZHJlbldpdGhBYnN0cmFjdFNsb3RWaXNpdG9yKGNlbGwsIHZp
c2l0b3IpOyB9CisKKyAgICB1c2luZyBWaXNpdE91dHB1dENvbnN0cmFpbnRzUHRyID0gdm9pZCAo
KikoSlNDZWxsKiwgQWJzdHJhY3RTbG90VmlzaXRvciYpOwogICAgIFZpc2l0T3V0cHV0Q29uc3Ry
YWludHNQdHIgTUVUSE9EX1RBQkxFX0VOVFJZKHZpc2l0T3V0cHV0Q29uc3RyYWludHMpOwogfTsK
IApAQCAtMTQ3LDcgKzE1Myw2IEBAIHN0cnVjdCBNZXRob2RUYWJsZSB7CiAgICAgSlNDYXN0aW5n
SGVscGVyczo6SW5oZXJpdHNUcmFpdHM8Q2xhc3NOYW1lPjo6dHlwZVJhbmdlLCBcCiAgICAgeyBc
CiAgICAgICAgICZDbGFzc05hbWU6OmRlc3Ryb3ksIFwKLSAgICAgICAgJkNsYXNzTmFtZTo6dmlz
aXRDaGlsZHJlbiwgXAogICAgICAgICAmQ2xhc3NOYW1lOjpnZXRDYWxsRGF0YSwgXAogICAgICAg
ICAmQ2xhc3NOYW1lOjpnZXRDb25zdHJ1Y3REYXRhLCBcCiAgICAgICAgICZDbGFzc05hbWU6OnB1
dCwgXApAQCAtMTczLDYgKzE3OCw4IEBAIHN0cnVjdCBNZXRob2RUYWJsZSB7CiAgICAgICAgICZD
bGFzc05hbWU6OmR1bXBUb1N0cmVhbSwgXAogICAgICAgICAmQ2xhc3NOYW1lOjphbmFseXplSGVh
cCwgXAogICAgICAgICAmQ2xhc3NOYW1lOjplc3RpbWF0ZWRTaXplLCBcCisgICAgICAgICZDbGFz
c05hbWU6OnZpc2l0Q2hpbGRyZW4sIFwKKyAgICAgICAgJkNsYXNzTmFtZTo6dmlzaXRDaGlsZHJl
biwgXAogICAgICAgICAmQ2xhc3NOYW1lOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzLCBcCiAgICAg
fSwgXAogICAgIENsYXNzTmFtZTo6VHlwZWRBcnJheVN0b3JhZ2VUeXBlLCBcCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DbG9uZWRBcmd1bWVudHMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Nsb25lZEFyZ3VtZW50cy5jcHAJKHJl
dmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Nsb25lZEFy
Z3VtZW50cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE1LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNjcsNyArMjY3LDggQEAgdm9pZCBDbG9u
ZWRBcmd1bWVudHM6Om1hdGVyaWFsaXplU3BlY2lhbAogICAgICAgICBtYXRlcmlhbGl6ZVNwZWNp
YWxzKGdsb2JhbE9iamVjdCk7CiB9CiAKLXZvaWQgQ2xvbmVkQXJndW1lbnRzOjp2aXNpdENoaWxk
cmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBWaXNpdG9yPgordm9pZCBDbG9uZWRBcmd1bWVudHM6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2Vs
bCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBDbG9uZWRBcmd1bWVudHMqIHRoaXNP
YmplY3QgPSBqc0Nhc3Q8Q2xvbmVkQXJndW1lbnRzKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09C
SkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtMjc1LDUgKzI3Niw3IEBAIHZv
aWQgQ2xvbmVkQXJndW1lbnRzOjp2aXNpdENoaWxkcmVuKEpTQ2UKICAgICB2aXNpdG9yLmFwcGVu
ZCh0aGlzT2JqZWN0LT5tX2NhbGxlZSk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihDbG9u
ZWRBcmd1bWVudHMpOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQ2xvbmVkQXJndW1lbnRzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xvbmVkQXJndW1lbnRzLmgJKHJldmlzaW9uIDI3Mjgz
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Nsb25lZEFyZ3VtZW50cy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0y
MDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
NS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtNjIsNyArNjIsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFN0cnVj
dHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlIHByb3Rv
dHlwZSk7CiAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU2xvd1B1dFN0cnVjdHVyZShWTSYs
IEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBwcm90b3R5cGUpOwogCi0gICAgc3RhdGljIHZvaWQg
dmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRf
Q0hJTERSRU47CiAKICAgICBERUNMQVJFX0lORk87CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvRGlyZWN0QXJndW1lbnRzLmNwcAkocmV2aXNpb24gMjcyODMw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGlyZWN0QXJndW1lbnRzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUt
MjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTUtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTkwLDcgKzkwLDggQEAgc2l6ZV90IERpcmVjdEFyZ3VtZW50czo6
ZXN0aW1hdGVkU2l6ZShKUwogICAgIHJldHVybiBCYXNlOjplc3RpbWF0ZWRTaXplKGNlbGwsIHZt
KSArIG1hcHBlZEFyZ3VtZW50c1NpemUgKyBtb2RpZmllZEFyZ3VtZW50c1NpemU7CiB9CiAKLXZv
aWQgRGlyZWN0QXJndW1lbnRzOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogdGhpc0NlbGwsIFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgRGlyZWN0
QXJndW1lbnRzOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIHRoaXNDZWxsLCBWaXNpdG9yJiB2
aXNpdG9yKQogewogICAgIERpcmVjdEFyZ3VtZW50cyogdGhpc09iamVjdCA9IHN0YXRpY19jYXN0
PERpcmVjdEFyZ3VtZW50cyo+KHRoaXNDZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVS
SVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC0xMDQsNiArMTA1LDggQEAgdm9pZCBEaXJlY3RB
cmd1bWVudHM6OnZpc2l0Q2hpbGRyZW4oSlNDZQogICAgIEdlbmVyaWNBcmd1bWVudHM8RGlyZWN0
QXJndW1lbnRzPjo6dmlzaXRDaGlsZHJlbih0aGlzQ2VsbCwgdmlzaXRvcik7CiB9CiAKK0RFRklO
RV9WSVNJVF9DSElMRFJFTihEaXJlY3RBcmd1bWVudHMpOworCiBTdHJ1Y3R1cmUqIERpcmVjdEFy
Z3VtZW50czo6Y3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCiB7CiAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRl
KHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oRGlyZWN0QXJndW1lbnRzVHlw
ZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvRGlyZWN0QXJndW1lbnRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvRGlyZWN0QXJndW1lbnRzLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE5IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtNjUsNyArNjUsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIERpcmVjdEFyZ3VtZW50
cyogY3JlYXRlQnlDb3B5aW5nKEpTR2xvYmFsT2JqZWN0KiwgQ2FsbEZyYW1lKik7CiAKICAgICBz
dGF0aWMgc2l6ZV90IGVzdGltYXRlZFNpemUoSlNDZWxsKiwgVk0mKTsKLSAgICBzdGF0aWMgdm9p
ZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJ
VF9DSElMRFJFTjsKICAgICAKICAgICB1aW50MzJfdCBpbnRlcm5hbExlbmd0aCgpIGNvbnN0CiAg
ICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXZhbEV4ZWN1dGFibGUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V2YWxFeGVj
dXRhYmxlLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvRXZhbEV4ZWN1dGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCwgMjAxMywgMjAxNS0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDIxIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtNTAsNyArNTAsOCBAQCBhdXRvIEV2YWxFeGVjdXRhYmxlOjplbnN1cmVUZW1wbGF0ZU9i
amVjCiAgICAgcmV0dXJuIGVuc3VyZVRlbXBsYXRlT2JqZWN0TWFwSW1wbChtX3RlbXBsYXRlT2Jq
ZWN0TWFwKTsKIH0KIAotdm9pZCBFdmFsRXhlY3V0YWJsZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwq
IGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4K
K3ZvaWQgRXZhbEV4ZWN1dGFibGU6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlz
aXRvciYgdmlzaXRvcikKIHsKICAgICBFdmFsRXhlY3V0YWJsZSogdGhpc09iamVjdCA9IGpzQ2Fz
dDxFdmFsRXhlY3V0YWJsZSo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMo
dGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTY0LDQgKzY1LDYgQEAgdm9pZCBFdmFsRXhlY3V0YWJs
ZTo6dmlzaXRDaGlsZHJlbihKU0NlbAogICAgIH0KIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVO
KEV2YWxFeGVjdXRhYmxlKTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9FdmFsRXhlY3V0YWJsZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V2YWxFeGVjdXRhYmxlLmgJKHJldmlzaW9uIDI3Mjgz
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V2YWxFeGVjdXRhYmxlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5LTIw
MTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5
LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC03OSw3ICs3OSw3IEBAIHByb3RlY3RlZDoKICAgICB1c2luZyBCYXNl
OjpmaW5pc2hDcmVhdGlvbjsKICAgICBFdmFsRXhlY3V0YWJsZShKU0dsb2JhbE9iamVjdCosIGNv
bnN0IFNvdXJjZUNvZGUmLCBib29sIGluU3RyaWN0Q29udGV4dCwgRGVyaXZlZENvbnRleHRUeXBl
LCBib29sIGlzQXJyb3dGdW5jdGlvbkNvbnRleHQsIGJvb2wgaXNJbnNpZGVPcmRpbmFyeUZ1bmN0
aW9uLCBFdmFsQ29udGV4dFR5cGUsIE5lZWRzQ2xhc3NGaWVsZEluaXRpYWxpemVyLCBQcml2YXRl
QnJhbmRSZXF1aXJlbWVudCk7CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2Vs
bCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIHVu
c2lnbmVkIG1fbmVlZHNDbGFzc0ZpZWxkSW5pdGlhbGl6ZXIgOiAxOwogICAgIHVuc2lnbmVkIG1f
cHJpdmF0ZUJyYW5kUmVxdWlyZW1lbnQgOiAxOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvRXhjZXB0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9FeGNlcHRpb24uY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9FeGNlcHRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE5IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTMs
NyArNTMsOCBAQCBTdHJ1Y3R1cmUqIEV4Y2VwdGlvbjo6Y3JlYXRlU3RydWN0dXJlKFZNCiAgICAg
cmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlw
ZUluZm8oQ2VsbFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKIH0KIAotdm9pZCBFeGNl
cHRpb246OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikK
K3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEV4Y2VwdGlvbjo6dmlzaXRDaGlsZHJl
bkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEV4Y2VwdGlvbiog
dGhpc09iamVjdCA9IGpzQ2FzdDxFeGNlcHRpb24qPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JK
RUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC02NCw2ICs2NSw4IEBAIHZvaWQg
RXhjZXB0aW9uOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2UKICAgICAgICAgZnJhbWUudmlzaXRD
aGlsZHJlbih2aXNpdG9yKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEV4Y2VwdGlvbik7
CisKIEV4Y2VwdGlvbjo6RXhjZXB0aW9uKFZNJiB2bSkKICAgICA6IEJhc2Uodm0sIHZtLmV4Y2Vw
dGlvblN0cnVjdHVyZS5nZXQoKSkKIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0V4Y2VwdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0V4Y2VwdGlvbi5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9FeGNlcHRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTUxLDcgKzUxLDcgQEAg
cHVibGljOgogCiAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiwgSlNH
bG9iYWxPYmplY3QqLCBKU1ZhbHVlIHByb3RvdHlwZSk7CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNp
dENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElM
RFJFTjsKIAogICAgIERFQ0xBUkVfRVhQT1JUX0lORk87CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25FeGVjdXRhYmxlLmNwcAkocmV2aXNp
b24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25FeGVj
dXRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDktMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDktMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY3LDcgKzY3LDggQEAgRnVuY3Rpb25Db2Rl
QmxvY2sqIEZ1bmN0aW9uRXhlY3V0YWJsZTo6YgogICAgIHJldHVybiBzdGF0aWNfY2FzdDxGdW5j
dGlvbkNvZGVCbG9jayo+KGVkZ2UtPmNvZGVCbG9jaygpLT5iYXNlbGluZUFsdGVybmF0aXZlKCkp
OwogfQogCi12b2lkIEZ1bmN0aW9uRXhlY3V0YWJsZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNl
bGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3Zv
aWQgRnVuY3Rpb25FeGVjdXRhYmxlOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZp
c2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiB0aGlzT2JqZWN0ID0g
anNDYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1Rf
SU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTg2LDYgKzg3LDggQEAgdm9pZCBGdW5j
dGlvbkV4ZWN1dGFibGU6OnZpc2l0Q2hpbGRyZW4oSgogICAgIH0KIH0KIAorREVGSU5FX1ZJU0lU
X0NISUxEUkVOKEZ1bmN0aW9uRXhlY3V0YWJsZSk7CisKIEZ1bmN0aW9uRXhlY3V0YWJsZSogRnVu
Y3Rpb25FeGVjdXRhYmxlOjpmcm9tR2xvYmFsQ29kZSgKICAgICBjb25zdCBJZGVudGlmaWVyJiBu
YW1lLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBTb3VyY2VDb2RlJiBzb3Vy
Y2UsIAogICAgIEpTT2JqZWN0KiYgZXhjZXB0aW9uLCBpbnQgb3ZlcnJpZGVMaW5lTnVtYmVyLCBP
cHRpb25hbDxpbnQ+IGZ1bmN0aW9uQ29uc3RydWN0b3JQYXJhbWV0ZXJzRW5kUG9zaXRpb24pCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvbkV4ZWN1dGFibGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvbkV4ZWN1
dGFibGUuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvRnVuY3Rpb25FeGVjdXRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xNjYsNyArMTY2LDcg
QEAgcHVibGljOgogICAgIEpTUGFyc2VyU2NyaXB0TW9kZSBzY3JpcHRNb2RlKCkgY29uc3QgeyBy
ZXR1cm4gbV91bmxpbmtlZEV4ZWN1dGFibGUtPnNjcmlwdE1vZGUoKTsgfQogICAgIFNvdXJjZUNv
ZGUgY2xhc3NTb3VyY2UoKSBjb25zdCB7IHJldHVybiBtX3VubGlua2VkRXhlY3V0YWJsZS0+Y2xh
c3NTb3VyY2UoKTsgfQogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBT
bG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAgICAgc3RhdGljIFN0
cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgSlNWYWx1ZSBwcm90bykKICAgICB7CiAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNy
ZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90bywgVHlwZUluZm8oRnVuY3Rpb25FeGVjdXRhYmxl
VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvRnVuY3Rpb25SYXJlRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25SYXJlRGF0YS5jcHAJKHJldmlzaW9uIDI3Mjgz
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uUmFyZURhdGEuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
NS0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtNTEsNyArNTEsOCBAQCBTdHJ1Y3R1cmUqIEZ1bmN0aW9uUmFy
ZURhdGE6OmNyZWF0ZVN0cnVjCiAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9i
YWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oQ2VsbFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwg
aW5mbygpKTsKIH0KIAotdm9pZCBGdW5jdGlvblJhcmVEYXRhOjp2aXNpdENoaWxkcmVuKEpTQ2Vs
bCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
Pgordm9pZCBGdW5jdGlvblJhcmVEYXRhOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGws
IFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgRnVuY3Rpb25SYXJlRGF0YSogcmFyZURhdGEgPSBq
c0Nhc3Q8RnVuY3Rpb25SYXJlRGF0YSo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5I
RVJJVFMoY2VsbCwgaW5mbygpKTsKQEAgLTYzLDYgKzY0LDggQEAgdm9pZCBGdW5jdGlvblJhcmVE
YXRhOjp2aXNpdENoaWxkcmVuKEpTQwogICAgIHZpc2l0b3IuYXBwZW5kKHJhcmVEYXRhLT5tX2V4
ZWN1dGFibGUpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oRnVuY3Rpb25SYXJlRGF0YSk7
CisKIEZ1bmN0aW9uUmFyZURhdGE6OkZ1bmN0aW9uUmFyZURhdGEoVk0mIHZtLCBFeGVjdXRhYmxl
QmFzZSogZXhlY3V0YWJsZSkKICAgICA6IEJhc2Uodm0sIHZtLmZ1bmN0aW9uUmFyZURhdGFTdHJ1
Y3R1cmUuZ2V0KCkpCiAgICAgLCBtX29iamVjdEFsbG9jYXRpb25Qcm9maWxlKCkKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uUmFyZURhdGEuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvblJhcmVEYXRhLmgJKHJl
dmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9u
UmFyZURhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTUtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTUtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY1LDcgKzY1LDcgQEAgcHVibGljOgogCiAg
ICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3Qq
LCBKU1ZhbHVlIHByb3RvdHlwZSk7CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpT
Q2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAg
IERFQ0xBUkVfSU5GTzsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2Vu
ZXJpY0FyZ3VtZW50cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0dlbmVyaWNBcmd1bWVudHMuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIwIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
NDQsNyArNDQsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgewogICAgIH0KIAotICAgIHN0YXRpYyB2b2lk
IHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1RFTVBM
QVRFX1ZJU0lUX0NISUxEUkVOOwogICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChK
U09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsK
ICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTT2JqZWN0KiwgSlNH
bG9iYWxPYmplY3QqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwogICAg
IHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVj
dCosIFByb3BlcnR5TmFtZUFycmF5JiwgRG9udEVudW1Qcm9wZXJ0aWVzTW9kZSk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljQXJndW1lbnRzSW5saW5lcy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNBcmd1bWVu
dHNJbmxpbmVzLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0dlbmVyaWNBcmd1bWVudHNJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMSw3
ICszMSw4IEBACiBuYW1lc3BhY2UgSlNDIHsKIAogdGVtcGxhdGU8dHlwZW5hbWUgVHlwZT4KLXZv
aWQgR2VuZXJpY0FyZ3VtZW50czxUeXBlPjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIHRoaXNDZWxs
LCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lk
IEdlbmVyaWNBcmd1bWVudHM8VHlwZT46OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogdGhpc0Nl
bGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgVHlwZSogdGhpc09iamVjdCA9IHN0YXRpY19j
YXN0PFR5cGUqPih0aGlzQ2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlz
T2JqZWN0LCBpbmZvKCkpOwpAQCAtNDEsNiArNDIsOCBAQCB2b2lkIEdlbmVyaWNBcmd1bWVudHM8
VHlwZT46OnZpc2l0Q2hpbGRyCiAgICAgICAgIHZpc2l0b3IubWFya0F1eGlsaWFyeSh0aGlzT2Jq
ZWN0LT5tX21vZGlmaWVkQXJndW1lbnRzRGVzY3JpcHRvci5nZXRVbnNhZmUoKSk7CiB9CiAKK0RF
RklORV9URU1QTEFURV9WSVNJVF9DSElMRFJFTih0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlPiwgR2Vu
ZXJpY0FyZ3VtZW50czxUeXBlPik7CisKIHRlbXBsYXRlPHR5cGVuYW1lIFR5cGU+CiBib29sIEdl
bmVyaWNBcmd1bWVudHM8VHlwZT46OmdldE93blByb3BlcnR5U2xvdChKU09iamVjdCogb2JqZWN0
LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWUgaWRlbnQsIFByb3Bl
cnR5U2xvdCYgc2xvdCkKIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dl
dHRlclNldHRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvR2V0dGVyU2V0dGVyLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvR2V0dGVyU2V0dGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw3ICsx
LDcgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDIgSGFycmkgUG9ydGVuIChwb3J0
ZW5Aa2RlLm9yZykKICAqICBDb3B5cmlnaHQgKEMpIDIwMDEgUGV0ZXIgS2VsbHkgKHBta0Bwb3N0
LmNvbSkKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDA0LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTMzLDcgKzMzLDggQEAgU1RB
VElDX0FTU0VSVF9JU19UUklWSUFMTFlfREVTVFJVQ1RJQkxFKAogCiBjb25zdCBDbGFzc0luZm8g
R2V0dGVyU2V0dGVyOjpzX2luZm8gPSB7ICJHZXR0ZXJTZXR0ZXIiLCBudWxscHRyLCBudWxscHRy
LCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEdldHRlclNldHRlcikgfTsKIAotdm9pZCBH
ZXR0ZXJTZXR0ZXI6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlz
aXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEdldHRlclNldHRlcjo6dmlz
aXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEdl
dHRlclNldHRlciogdGhpc09iamVjdCA9IGpzQ2FzdDxHZXR0ZXJTZXR0ZXIqPihjZWxsKTsKICAg
ICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC00Myw2
ICs0NCw4IEBAIHZvaWQgR2V0dGVyU2V0dGVyOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCoKICAgICB2
aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX3NldHRlcik7CiB9CiAKK0RFRklORV9WSVNJVF9D
SElMRFJFTihHZXR0ZXJTZXR0ZXIpOworCiBKU1ZhbHVlIGNhbGxHZXR0ZXIoSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBiYXNlLCBKU1ZhbHVlIGdldHRlclNldHRlcikKIHsK
ICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9HZXR0ZXJTZXR0ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9HZXR0ZXJTZXR0ZXIuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2V0dGVyU2V0dGVyLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNyArMSw3IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAxIEhhcnJpIFBv
cnRlbiAocG9ydGVuQGtkZS5vcmcpCiAgKiAgQ29weXJpZ2h0IChDKSAyMDAxIFBldGVyIEtlbGx5
IChwbWtAcG9zdC5jb20pCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMTkgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwMy0yMDIxIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC04Miw3ICs4
Miw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBn
ZXR0ZXJPYmplY3QsIHNldHRlck9iamVjdCk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgdmlz
aXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJ
TERSRU47CiAKICAgICBKU09iamVjdCogZ2V0dGVyKCkgY29uc3QgeyByZXR1cm4gbV9nZXR0ZXIu
Z2V0KCk7IH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSGFzaE1hcElt
cGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0hhc2hN
YXBJbXBsLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSGFzaE1hcEltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMwLDYgKzMwLDkgQEAKIAogbmFt
ZXNwYWNlIEpTQyB7CiAKK0RFRklORV9URU1QTEFURV9WSVNJVF9DSElMRFJFTih0ZW1wbGF0ZTw+
LCBIYXNoTWFwQnVja2V0PEhhc2hNYXBCdWNrZXREYXRhS2V5Pik7CitERUZJTkVfVEVNUExBVEVf
VklTSVRfQ0hJTERSRU4odGVtcGxhdGU8PiwgSGFzaE1hcEJ1Y2tldDxIYXNoTWFwQnVja2V0RGF0
YUtleVZhbHVlPik7CisKIHRlbXBsYXRlPD4KIGNvbnN0IENsYXNzSW5mbyBIYXNoTWFwQnVja2V0
PEhhc2hNYXBCdWNrZXREYXRhS2V5Pjo6c19pbmZvID0KICAgICB7ICJIYXNoTWFwQnVja2V0Iiwg
bnVsbHB0ciwgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShIYXNoTWFwQnVj
a2V0PEhhc2hNYXBCdWNrZXREYXRhS2V5PikgfTsKQEAgLTM4LDggKzQxLDkgQEAgdGVtcGxhdGU8
PgogY29uc3QgQ2xhc3NJbmZvIEhhc2hNYXBCdWNrZXQ8SGFzaE1hcEJ1Y2tldERhdGFLZXlWYWx1
ZT46OnNfaW5mbyA9CiAgICAgeyAiSGFzaE1hcEJ1Y2tldCIsIG51bGxwdHIsIG51bGxwdHIsIG51
bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSGFzaE1hcEJ1Y2tldDxIYXNoTWFwQnVja2V0RGF0
YUtleVZhbHVlPikgfTsKIAotdGVtcGxhdGUgPHR5cGVuYW1lIERhdGE+Ci12b2lkIEhhc2hNYXBC
dWNrZXQ8RGF0YT46OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlz
aXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIERhdGE+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
Pgordm9pZCBIYXNoTWFwQnVja2V0PERhdGE+Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNl
bGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSGFzaE1hcEJ1Y2tldCogdGhpc09iamVjdCA9
IGpzQ2FzdDxIYXNoTWFwQnVja2V0Kj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhF
UklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNTIsOCArNTYsOSBAQCB2b2lkIEhhc2hNYXBC
dWNrZXQ8RGF0YT46OnZpc2l0Q2hpbGRyZW4oCiAgICAgdmlzaXRvci5hcHBlbmRWYWx1ZXMoYml0
d2lzZV9jYXN0PFdyaXRlQmFycmllcjxVbmtub3duPio+KCZ0aGlzT2JqZWN0LT5tX2RhdGEpLCBz
aXplb2YoRGF0YSkgLyBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSk7CiB9CiAKLXRlbXBs
YXRlIDx0eXBlbmFtZSBIYXNoTWFwQnVja2V0Pgotdm9pZCBIYXNoTWFwSW1wbDxIYXNoTWFwQnVj
a2V0Pjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQor
dGVtcGxhdGU8dHlwZW5hbWUgSGFzaE1hcEJ1Y2tldD4KK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0
b3I+Cit2b2lkIEhhc2hNYXBJbXBsPEhhc2hNYXBCdWNrZXQ+Ojp2aXNpdENoaWxkcmVuSW1wbChK
U0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSGFzaE1hcEltcGwqIHRoaXNP
YmplY3QgPSBqc0Nhc3Q8SGFzaE1hcEltcGwqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNU
X0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC02Niw2ICs3MSw4IEBAIHZvaWQgSGFz
aE1hcEltcGw8SGFzaE1hcEJ1Y2tldD46OnZpc2l0Q2gKICAgICAgICAgdmlzaXRvci5tYXJrQXV4
aWxpYXJ5KGJ1ZmZlcik7CiB9CiAKK0RFRklORV9URU1QTEFURV9WSVNJVF9DSElMRFJFTih0ZW1w
bGF0ZTx0eXBlbmFtZSBIYXNoTWFwQnVja2V0PiwgSGFzaE1hcEltcGw8SGFzaE1hcEJ1Y2tldD4p
OworCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgSGFzaE1hcEJ1Y2tldD4KIHNpemVfdCBIYXNoTWFwSW1w
bDxIYXNoTWFwQnVja2V0Pjo6ZXN0aW1hdGVkU2l6ZShKU0NlbGwqIGNlbGwsIFZNJiB2bSkKIHsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0hhc2hNYXBJbXBsLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSGFzaE1hcEltcGwuaAkocmV2
aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSGFzaE1hcElt
cGwuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTYtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE0OCw3ICsxNDgsNyBAQCBwdWJsaWM6CiAgICAgICAg
IHJldHVybiBtX2RhdGEudmFsdWUuZ2V0KCk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgdmlz
aXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVEVNUExBVEVf
VklTSVRfQ0hJTERSRU47CiAKICAgICBBTFdBWVNfSU5MSU5FIEhhc2hNYXBCdWNrZXQqIG5leHQo
KSBjb25zdCB7IHJldHVybiBtX25leHQuZ2V0KCk7IH0KICAgICBBTFdBWVNfSU5MSU5FIEhhc2hN
YXBCdWNrZXQqIHByZXYoKSBjb25zdCB7IHJldHVybiBtX3ByZXYuZ2V0KCk7IH0KQEAgLTM2NCw3
ICszNjQsNyBAQCBjbGFzcyBIYXNoTWFwSW1wbCA6IHB1YmxpYyBKU05vbkZpbmFsT2JqCiBwdWJs
aWM6CiAgICAgdXNpbmcgQnVja2V0VHlwZSA9IEhhc2hNYXBCdWNrZXRUeXBlOwogCi0gICAgc3Rh
dGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xB
UkVfVEVNUExBVEVfVklTSVRfQ0hJTERSRU47CiAKICAgICBzdGF0aWMgc2l6ZV90IGVzdGltYXRl
ZFNpemUoSlNDZWxsKiwgVk0mKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSW50ZXJuYWxGdW5jdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSW50ZXJuYWxGdW5jdGlvbi5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGVybmFsRnVuY3Rpb24uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMiBI
YXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQogICogIENvcHlyaWdodCAoQykgMjAwMSBQZXRl
ciBLZWxseSAocG1rQHBvc3QuY29tKQotICogIENvcHlyaWdodCAoQykgMjAwNC0yMDE5IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDQtMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAt
NjQsNyArNjQsOCBAQCB2b2lkIEludGVybmFsRnVuY3Rpb246OmZpbmlzaENyZWF0aW9uKFZNCiAg
ICAgfQogfQogCi12b2lkIEludGVybmFsRnVuY3Rpb246OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBj
ZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2
b2lkIEludGVybmFsRnVuY3Rpb246OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlz
aXRvciYgdmlzaXRvcikKIHsKICAgICBJbnRlcm5hbEZ1bmN0aW9uKiB0aGlzT2JqZWN0ID0ganND
YXN0PEludGVybmFsRnVuY3Rpb24qPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVS
SVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC03Myw2ICs3NCw4IEBAIHZvaWQgSW50ZXJuYWxG
dW5jdGlvbjo6dmlzaXRDaGlsZHJlbihKU0MKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0
LT5tX29yaWdpbmFsTmFtZSk7CiB9CiAKK0RFRklORV9FWFBPUlRfVklTSVRfQ0hJTERSRU4oSW50
ZXJuYWxGdW5jdGlvbik7CisKIGNvbnN0IFN0cmluZyYgSW50ZXJuYWxGdW5jdGlvbjo6bmFtZSgp
CiB7CiAgICAgY29uc3QgU3RyaW5nJiBuYW1lID0gbV9vcmlnaW5hbE5hbWUtPnRyeUdldFZhbHVl
KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRlcm5hbEZ1bmN0aW9u
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50ZXJuYWxG
dW5jdGlvbi5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9JbnRlcm5hbEZ1bmN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAv
KgogICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAwIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5v
cmcpCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqICBDb3B5cmlnaHQgKEMpIDIwMDcgQ2FtZXJvbiBad2FyaWNoIChjd3p3
YXJpY2hAdXdhdGVybG9vLmNhKQogICogIENvcHlyaWdodCAoQykgMjAwNyBNYWtzIE9ybG92aWNo
CiAgKgpAQCAtNDYsNyArNDYsNyBAQCBwdWJsaWM6CiAKICAgICBERUNMQVJFX0VYUE9SVF9JTkZP
OwogCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0Nl
bGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfRVhQT1JUX1ZJU0lUX0NISUxEUkVOOwog
CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgY29uc3QgU3RyaW5nJiBuYW1lKCk7CiAgICAgY29uc3Qg
U3RyaW5nIGRpc3BsYXlOYW1lKFZNJik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9JbnRsQ29sbGF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0ludGxDb2xsYXRvci5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxDb2xsYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNyArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDE1IEFuZHkgVmFuV2Fnb25lciAo
YW5keUB2YW53YWdvbmVyLmZhbWlseSkKICAqIENvcHlyaWdodCAoQykgMjAxNSBTdWtvbHNhayBT
YWtzaHV3b25nIChzdWtvbHNha0BnbWFpbC5jb20pCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAy
MCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYt
MjAyMSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTY1LDcgKzY1LDggQEAgdm9pZCBJbnRsQ29sbGF0b3I6OmZpbmlzaENy
ZWF0aW9uKFZNJiB2bQogICAgIEFTU0VSVChpbmhlcml0cyh2bSwgaW5mbygpKSk7CiB9CiAKLXZv
aWQgSW50bENvbGxhdG9yOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3Im
IHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBJbnRsQ29sbGF0b3I6
OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAg
ICBJbnRsQ29sbGF0b3IqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SW50bENvbGxhdG9yKj4oY2VsbCk7
CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAt
NzUsNiArNzYsOCBAQCB2b2lkIEludGxDb2xsYXRvcjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqCiAg
ICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9ib3VuZENvbXBhcmUpOwogfQogCitERUZJ
TkVfVklTSVRfQ0hJTERSRU4oSW50bENvbGxhdG9yKTsKKwogVmVjdG9yPFN0cmluZz4gSW50bENv
bGxhdG9yOjpzb3J0TG9jYWxlRGF0YShjb25zdCBTdHJpbmcmIGxvY2FsZSwgUmVsZXZhbnRFeHRl
bnNpb25LZXkga2V5KQogewogICAgIC8vIDkuMSBJbnRlcm5hbCBzbG90cyBvZiBTZXJ2aWNlIENv
bnN0cnVjdG9ycyAmIDEwLjIuMyBJbnRlcm5hbCBzbG90cyAoRUNNQS00MDIgMi4wKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bENvbGxhdG9yLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bENvbGxhdG9yLmgJKHJldmlzaW9u
IDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxDb2xsYXRvci5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAx
NSBBbmR5IFZhbldhZ29uZXIgKGFuZHlAdmFud2Fnb25lci5mYW1pbHkpCisgKiBDb3B5cmlnaHQg
KEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC04MCw3ICs4MSw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAg
SW50bENvbGxhdG9yKFZNJiwgU3RydWN0dXJlKik7CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihW
TSYpOwotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3Im
KTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgYm9vbCB1cGRhdGVDYW5Eb0FT
Q0lJVUNBRFVDRVRDb21wYXJpc29uKCkgY29uc3Q7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0ludGxEYXRlVGltZUZvcm1hdC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERhdGVUaW1lRm9ybWF0LmNwcAkocmV2aXNpb24g
MjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERhdGVUaW1lRm9y
bWF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQg
KEMpIDIwMTUgQW5keSBWYW5XYWdvbmVyIChhbmR5QHZhbndhZ29uZXIuZmFtaWx5KQotICogQ29w
eXJpZ2h0IChDKSAyMDE2LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC05MCw3ICs5MCw4IEBAIHZvaWQgSW50
bERhdGVUaW1lRm9ybWF0OjpmaW5pc2hDcmVhdGlvbigKICAgICBBU1NFUlQoaW5oZXJpdHModm0s
IGluZm8oKSkpOwogfQogCi12b2lkIEludGxEYXRlVGltZUZvcm1hdDo6dmlzaXRDaGlsZHJlbihK
U0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlz
aXRvcj4KK3ZvaWQgSW50bERhdGVUaW1lRm9ybWF0Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwq
IGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSW50bERhdGVUaW1lRm9ybWF0KiB0aGlz
T2JqZWN0ID0ganNDYXN0PEludGxEYXRlVGltZUZvcm1hdCo+KGNlbGwpOwogICAgIEFTU0VSVF9H
Q19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTEwMCw2ICsxMDEsOCBA
QCB2b2lkIEludGxEYXRlVGltZUZvcm1hdDo6dmlzaXRDaGlsZHJlbihKCiAgICAgdmlzaXRvci5h
cHBlbmQodGhpc09iamVjdC0+bV9ib3VuZEZvcm1hdCk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElM
RFJFTihJbnRsRGF0ZVRpbWVGb3JtYXQpOworCiB2b2lkIEludGxEYXRlVGltZUZvcm1hdDo6c2V0
Qm91bmRGb3JtYXQoVk0mIHZtLCBKU0JvdW5kRnVuY3Rpb24qIGZvcm1hdCkKIHsKICAgICBtX2Jv
dW5kRm9ybWF0LnNldCh2bSwgdGhpcywgZm9ybWF0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0ludGxEYXRlVGltZUZvcm1hdC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxEYXRlVGltZUZvcm1hdC5oCShyZXZpc2lvbiAyNzI4
MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsRGF0ZVRpbWVGb3JtYXQu
aAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIw
MTUgQW5keSBWYW5XYWdvbmVyIChhbmR5QHZhbndhZ29uZXIuZmFtaWx5KQorICogQ29weXJpZ2h0
IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtODUsNyArODYsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAg
IEludGxEYXRlVGltZUZvcm1hdChWTSYsIFN0cnVjdHVyZSopOwogICAgIHZvaWQgZmluaXNoQ3Jl
YXRpb24oVk0mKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RW
aXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIHN0YXRpYyBWZWN0
b3I8U3RyaW5nPiBsb2NhbGVEYXRhKGNvbnN0IFN0cmluZyYsIFJlbGV2YW50RXh0ZW5zaW9uS2V5
KTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bExvY2FsZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bExvY2FsZS5j
cHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lu
dGxMb2NhbGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHly
aWdodCAoQykgMjAyMCBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgorICogQ29w
eXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTgsNyArNTksOCBAQCB2b2lkIEludGxMb2NhbGU6
OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKICAgICBBU1NFUlQoaW5oZXJpdHModm0sIGluZm8oKSkp
OwogfQogCi12b2lkIEludGxMb2NhbGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90
VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEludGxM
b2NhbGU6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikK
IHsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEludGxMb2NhbGUqPihjZWxsKTsKICAg
ICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC02Niw2
ICs2OCw4IEBAIHZvaWQgSW50bExvY2FsZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGMKICAgICBC
YXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwogfQogCitERUZJTkVfVklT
SVRfQ0hJTERSRU4oSW50bExvY2FsZSk7CisKIGNsYXNzIExvY2FsZUlEQnVpbGRlciBmaW5hbCB7
CiBwdWJsaWM6CiAgICAgYm9vbCBpbml0aWFsaXplKGNvbnN0IFN0cmluZyYpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bExvY2FsZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxMb2NhbGUuaAkocmV2aXNpb24gMjcyODMw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bExvY2FsZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAyMCBTb255IElu
dGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtNzEsNyArNzIsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIEludGxMb2NhbGUoVk0m
LCBTdHJ1Y3R1cmUqKTsKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7Ci0gICAgc3RhdGlj
IHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVf
VklTSVRfQ0hJTERSRU47CiAKICAgICBTdHJpbmcga2V5d29yZFZhbHVlKEFTQ0lJTGl0ZXJhbCwg
Ym9vbCBpc0Jvb2xlYW4gPSBmYWxzZSkgY29uc3Q7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0ludGxOdW1iZXJGb3JtYXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxOdW1iZXJGb3JtYXQuY3BwCShyZXZpc2lvbiAyNzI4
MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTnVtYmVyRm9ybWF0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIw
MTUgQW5keSBWYW5XYWdvbmVyIChhbmR5QHZhbndhZ29uZXIuZmFtaWx5KQogICogQ29weXJpZ2h0
IChDKSAyMDE2IFN1a29sc2FrIFNha3NodXdvbmcgKHN1a29sc2FrQGdtYWlsLmNvbSkKLSAqIENv
cHlyaWdodCAoQykgMjAxNi0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqIENvcHlyaWdodCAoQykgMjAyMCBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5j
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dApAQCAtNzMsNyArNzMsOCBAQCB2b2lkIEludGxOdW1iZXJGb3Jt
YXQ6OmZpbmlzaENyZWF0aW9uKFZNCiAgICAgQVNTRVJUKGluaGVyaXRzKHZtLCBpbmZvKCkpKTsK
IH0KIAotdm9pZCBJbnRsTnVtYmVyRm9ybWF0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwg
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBJ
bnRsTnVtYmVyRm9ybWF0Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3Im
IHZpc2l0b3IpCiB7CiAgICAgSW50bE51bWJlckZvcm1hdCogdGhpc09iamVjdCA9IGpzQ2FzdDxJ
bnRsTnVtYmVyRm9ybWF0Kj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0
aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtODMsNiArODQsOCBAQCB2b2lkIEludGxOdW1iZXJGb3Jt
YXQ6OnZpc2l0Q2hpbGRyZW4oSlNDCiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9i
b3VuZEZvcm1hdCk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihJbnRsTnVtYmVyRm9ybWF0
KTsKKwogVmVjdG9yPFN0cmluZz4gSW50bE51bWJlckZvcm1hdDo6bG9jYWxlRGF0YShjb25zdCBT
dHJpbmcmIGxvY2FsZSwgUmVsZXZhbnRFeHRlbnNpb25LZXkga2V5KQogewogICAgIC8vIDkuMSBJ
bnRlcm5hbCBzbG90cyBvZiBTZXJ2aWNlIENvbnN0cnVjdG9ycyAmIDExLjIuMyBJbnRlcm5hbCBz
bG90cyAoRUNNQS00MDIgMi4wKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SW50bE51bWJlckZvcm1hdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0ludGxOdW1iZXJGb3JtYXQuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE51bWJlckZvcm1hdC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDYgKzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxNSBBbmR5IFZhbldhZ29uZXIg
KGFuZHlAdmFud2Fnb25lci5mYW1pbHkpCiAgKiBDb3B5cmlnaHQgKEMpIDIwMjAgU29ueSBJbnRl
cmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTk2LDcgKzk3LDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBJbnRsTnVtYmVyRm9ybWF0
KFZNJiwgU3RydWN0dXJlKik7CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOwotICAgIHN0
YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNM
QVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgc3RhdGljIFZlY3RvcjxTdHJpbmc+IGxvY2FsZURh
dGEoY29uc3QgU3RyaW5nJiwgUmVsZXZhbnRFeHRlbnNpb25LZXkpOwogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsUGx1cmFsUnVsZXMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxQbHVyYWxSdWxlcy5jcHAJKHJldmlz
aW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxQbHVyYWxS
dWxlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogQ29weXJpZ2h0
IChDKSAyMDE4IEFuZHkgVmFuV2Fnb25lciAoYW5keUB2YW53YWdvbmVyLmZhbWlseSkKLSAqIENv
cHlyaWdodCAoQykgMjAxOS0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxOS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjEsNyArNjEsOCBAQCB2b2lkIElu
dGxQbHVyYWxSdWxlczo6ZmluaXNoQ3JlYXRpb24oVk0mCiAgICAgQVNTRVJUKGluaGVyaXRzKHZt
LCBpbmZvKCkpKTsKIH0KIAotdm9pZCBJbnRsUGx1cmFsUnVsZXM6OnZpc2l0Q2hpbGRyZW4oSlND
ZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0
b3I+Cit2b2lkIEludGxQbHVyYWxSdWxlczo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxs
LCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEludGxQbHVyYWxSdWxlcyogdGhpc09iamVjdCA9
IGpzQ2FzdDxJbnRsUGx1cmFsUnVsZXMqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lO
SEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC02OSw2ICs3MCw4IEBAIHZvaWQgSW50bFBs
dXJhbFJ1bGVzOjp2aXNpdENoaWxkcmVuKEpTQ2UKICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRo
aXNPYmplY3QsIHZpc2l0b3IpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSW50bFBsdXJh
bFJ1bGVzKTsKKwogVmVjdG9yPFN0cmluZz4gSW50bFBsdXJhbFJ1bGVzOjpsb2NhbGVEYXRhKGNv
bnN0IFN0cmluZyYsIFJlbGV2YW50RXh0ZW5zaW9uS2V5KQogewogICAgIHJldHVybiB7IH07Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsUGx1cmFsUnVsZXMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsUGx1cmFsUnVsZXMu
aAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50
bFBsdXJhbFJ1bGVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29w
eXJpZ2h0IChDKSAyMDE4IEFuZHkgVmFuV2Fnb25lciAoYW5keUB2YW53YWdvbmVyLmZhbWlseSkK
KyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY2LDcgKzY3LDcgQEAgcHVibGljOgog
cHJpdmF0ZToKICAgICBJbnRsUGx1cmFsUnVsZXMoVk0mLCBTdHJ1Y3R1cmUqKTsKICAgICB2b2lk
IGZpbmlzaENyZWF0aW9uKFZNJik7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0Nl
bGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBz
dGF0aWMgVmVjdG9yPFN0cmluZz4gbG9jYWxlRGF0YShjb25zdCBTdHJpbmcmLCBSZWxldmFudEV4
dGVuc2lvbktleSk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxS
ZWxhdGl2ZVRpbWVGb3JtYXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0ludGxSZWxhdGl2ZVRpbWVGb3JtYXQuY3BwCShyZXZpc2lvbiAyNzI4MzApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsUmVsYXRpdmVUaW1lRm9ybWF0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIw
MjAgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAqIENvcHlyaWdodCAoQykg
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTYyLDcgKzYzLDggQEAgdm9pZCBJbnRsUmVsYXRpdmVUaW1lRm9ybWF0
OjpmaW5pc2hDcmVhdAogICAgIEFTU0VSVChpbmhlcml0cyh2bSwgaW5mbygpKSk7CiB9CiAKLXZv
aWQgSW50bFJlbGF0aXZlVGltZUZvcm1hdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSW50
bFJlbGF0aXZlVGltZUZvcm1hdDo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNp
dG9yJiB2aXNpdG9yKQogewogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SW50bFJlbGF0
aXZlVGltZUZvcm1hdCo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhp
c09iamVjdCwgaW5mbygpKTsKQEAgLTcwLDYgKzcyLDggQEAgdm9pZCBJbnRsUmVsYXRpdmVUaW1l
Rm9ybWF0Ojp2aXNpdENoaWxkcgogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwg
dmlzaXRvcik7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihJbnRsUmVsYXRpdmVUaW1lRm9y
bWF0KTsKKwogVmVjdG9yPFN0cmluZz4gSW50bFJlbGF0aXZlVGltZUZvcm1hdDo6bG9jYWxlRGF0
YShjb25zdCBTdHJpbmcmIGxvY2FsZSwgUmVsZXZhbnRFeHRlbnNpb25LZXkga2V5KQogewogICAg
IEFTU0VSVF9VTlVTRUQoa2V5LCBrZXkgPT0gUmVsZXZhbnRFeHRlbnNpb25LZXk6Ok51KTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxSZWxhdGl2ZVRpbWVGb3JtYXQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsUmVsYXRp
dmVUaW1lRm9ybWF0LmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0ludGxSZWxhdGl2ZVRpbWVGb3JtYXQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2
ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMjAgU29ueSBJbnRlcmFjdGl2ZSBFbnRl
cnRhaW5tZW50IEluYy4KLSAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAtMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY0LDcg
KzY0LDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBJbnRsUmVsYXRpdmVUaW1lRm9ybWF0KFZN
JiwgU3RydWN0dXJlKik7CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOwotICAgIHN0YXRp
YyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJF
X1ZJU0lUX0NISUxEUkVOOwogCiAgICAgc3RhdGljIFZlY3RvcjxTdHJpbmc+IGxvY2FsZURhdGEo
Y29uc3QgU3RyaW5nJiwgUmVsZXZhbnRFeHRlbnNpb25LZXkpOwogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9JbnRsU2VnbWVudEl0ZXJhdG9yLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsU2VnbWVudEl0ZXJhdG9yLmNwcAko
cmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFNl
Z21lbnRJdGVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKgogICog
Q29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY0LDEzICs2NSwxNiBAQCB2b2lkIEludGxTZWdt
ZW50SXRlcmF0b3I6OmZpbmlzaENyZWF0aW9uCiAgICAgbV9zdHJpbmcuc2V0KHZtLCB0aGlzLCBz
dHJpbmcpOwogfQogCi12b2lkIEludGxTZWdtZW50SXRlcmF0b3I6OnZpc2l0Q2hpbGRyZW4oSlND
ZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0
b3I+Cit2b2lkIEludGxTZWdtZW50SXRlcmF0b3I6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCog
Y2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0
PEludGxTZWdtZW50SXRlcmF0b3IqPihjZWxsKTsKICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRo
aXNPYmplY3QsIHZpc2l0b3IpOwogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fc3Ry
aW5nKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEludGxTZWdtZW50SXRlcmF0b3IpOwor
CiBKU09iamVjdCogSW50bFNlZ21lbnRJdGVyYXRvcjo6bmV4dChKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0KQogewogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxTZWdtZW50SXRlcmF0b3IuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsU2VnbWVudEl0ZXJhdG9y
LmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lu
dGxTZWdtZW50SXRlcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAg
KiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTMsNyArNTQsNyBAQCBwdWJsaWM6CiAKICAg
ICBKU09iamVjdCogbmV4dChKU0dsb2JhbE9iamVjdCopOwogCi0gICAgc3RhdGljIHZvaWQgdmlz
aXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJ
TERSRU47CiAKIHByaXZhdGU6CiAgICAgSW50bFNlZ21lbnRJdGVyYXRvcihWTSYsIFN0cnVjdHVy
ZSosIHN0ZDo6dW5pcXVlX3B0cjxVQnJlYWtJdGVyYXRvciwgVUJyZWFrSXRlcmF0b3JEZWxldGVy
PiYmLCBCb3g8VmVjdG9yPFVDaGFyPj4mJiwgSW50bFNlZ21lbnRlcjo6R3JhbnVsYXJpdHkpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFNlZ21lbnRzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsU2VnbWVudHMuY3Bw
CShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRs
U2VnbWVudHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHly
aWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0xMDksMTEgKzExMCwxNCBAQCBKU09iamVjdCogSW50bFNl
Z21lbnRzOjpjcmVhdGVTZWdtZW50SXRlCiAgICAgcmV0dXJuIEludGxTZWdtZW50SXRlcmF0b3I6
OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LT5zZWdtZW50SXRlcmF0b3JTdHJ1Y3R1cmUoKSwgV1RG
TW92ZShzZWdtZW50ZXIpLCBtX2J1ZmZlciwgbV9zdHJpbmcuZ2V0KCksIG1fZ3JhbnVsYXJpdHkp
OwogfQogCi12b2lkIEludGxTZWdtZW50czo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSW50
bFNlZ21lbnRzOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0
b3IpCiB7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxJbnRsU2VnbWVudHMqPihjZWxs
KTsKICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwogICAgIHZp
c2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fc3RyaW5nKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NI
SUxEUkVOKEludGxTZWdtZW50cyk7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFNlZ21lbnRzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFNlZ21lbnRzLmgJKHJldmlzaW9uIDI3Mjgz
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxTZWdtZW50cy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC01NCw3ICs1NSw3IEBAIHB1YmxpYzoKICAgICBKU1ZhbHVlIGNvbnRhaW5pbmcoSlNHbG9i
YWxPYmplY3QqLCBKU1ZhbHVlIGluZGV4VmFsdWUpOwogICAgIEpTT2JqZWN0KiBjcmVhdGVTZWdt
ZW50SXRlcmF0b3IoSlNHbG9iYWxPYmplY3QqKTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hp
bGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVO
OwogCiBwcml2YXRlOgogICAgIEludGxTZWdtZW50cyhWTSYsIFN0cnVjdHVyZSosIHN0ZDo6dW5p
cXVlX3B0cjxVQnJlYWtJdGVyYXRvciwgVUJyZWFrSXRlcmF0b3JEZWxldGVyPiYmLCBCb3g8VmVj
dG9yPFVDaGFyPj4mJiwgSW50bFNlZ21lbnRlcjo6R3JhbnVsYXJpdHkpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3LmNwcAko
cmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJh
eUJ1ZmZlclZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTU1LDcgKzE1NSw4IEBAIHZvaWQg
SlNBcnJheUJ1ZmZlclZpZXc6OmZpbmlzaENyZWF0aW9uKFYKICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOwogfQogCi12b2lkIEpTQXJyYXlCdWZmZXJWaWV3Ojp2aXNpdENoaWxkcmVu
KEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPgordm9pZCBKU0FycmF5QnVmZmVyVmlldzo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxs
KiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTQXJyYXlCdWZmZXJWaWV3KiB0aGlz
T2JqZWN0ID0ganNDYXN0PEpTQXJyYXlCdWZmZXJWaWV3Kj4oY2VsbCk7CiAgICAgQVNTRVJUX0dD
X09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtMTY5LDYgKzE3MCw4IEBA
IHZvaWQgSlNBcnJheUJ1ZmZlclZpZXc6OnZpc2l0Q2hpbGRyZW4oSlMKICAgICB9CiB9CiAKK0RF
RklORV9WSVNJVF9DSElMRFJFTihKU0FycmF5QnVmZmVyVmlldyk7CisKIGJvb2wgSlNBcnJheUJ1
ZmZlclZpZXc6OnB1dCgKICAgICBKU0NlbGwqIGNlbGwsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsCiAgICAgUHV0
UHJvcGVydHlTbG90JiBzbG90KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNBcnJheUJ1ZmZlclZpZXcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIwIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIxIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMTcyLDcgKzE3Miw3IEBAIHByb3RlY3RlZDoKICAgICAKICAgICBzdGF0aWMgYm9vbCBw
dXQoSlNDZWxsKiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFBy
b3BlcnR5U2xvdCYpOwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBT
bG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAgICAgCiBwdWJsaWM6
CiAgICAgVHlwZWRBcnJheU1vZGUgbW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fbW9kZTsgfQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUl0ZXJhdG9yLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5SXRlcmF0b3Iu
Y3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0FycmF5SXRlcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMjAtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY4LDExICs2OCwxNCBAQCB2b2lkIEpT
QXJyYXlJdGVyYXRvcjo6ZmluaXNoQ3JlYXRpb24oVk0mCiAgICAgICAgIEJhc2U6OmludGVybmFs
RmllbGQoaW5kZXgpLnNldCh2bSwgdGhpcywgdmFsdWVzW2luZGV4XSk7CiB9CiAKLXZvaWQgSlNB
cnJheUl0ZXJhdG9yOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZp
c2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0FycmF5SXRlcmF0b3I6
OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAg
ICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQXJyYXlJdGVyYXRvcio+KGNlbGwpOwogICAg
IEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKICAgICBCYXNl
Ojp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwogfQogCitERUZJTkVfVklTSVRf
Q0hJTERSRU4oSlNBcnJheUl0ZXJhdG9yKTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5SXRlcmF0b3IuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5SXRlcmF0b3IuaAkocmV2
aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUl0
ZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAyMC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNzgsNyArNzgsNyBAQCBwdWJsaWM6CiAKICAgICBERUNM
QVJFX0lORk87CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RW
aXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogcHJpdmF0ZToKICAgICBK
U0FycmF5SXRlcmF0b3IoVk0mLCBTdHJ1Y3R1cmUqKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTQXN5bmNHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXN5bmNHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiAyNzI4
MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FzeW5jR2VuZXJhdG9yLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE5
LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC01OSwxMSArNTksMTQgQEAgdm9pZCBKU0FzeW5jR2VuZXJhdG9yOjpm
aW5pc2hDcmVhdGlvbihWTQogICAgICAgICBpbnRlcm5hbEZpZWxkKGluZGV4KS5zZXQodm0sIHRo
aXMsIHZhbHVlc1tpbmRleF0pOwogfQogCi12b2lkIEpTQXN5bmNHZW5lcmF0b3I6OnZpc2l0Q2hp
bGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVu
YW1lIFZpc2l0b3I+Cit2b2lkIEpTQXN5bmNHZW5lcmF0b3I6OnZpc2l0Q2hpbGRyZW5JbXBsKEpT
Q2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0g
anNDYXN0PEpTQXN5bmNHZW5lcmF0b3IqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lO
SEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlz
T2JqZWN0LCB2aXNpdG9yKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTQXN5bmNHZW5l
cmF0b3IpOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQXN5bmNHZW5lcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0FzeW5jR2VuZXJhdG9yLmgJKHJldmlzaW9uIDI3MjgzMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXN5bmNHZW5lcmF0b3IuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE5LTIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC05NSw3ICs5NSw3IEBAIHB1YmxpYzoKIAogICAgIERFQ0xBUkVfRVhQT1JUX0lORk87
CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7
CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogcHJpdmF0ZToKICAgICBKU0FzeW5jR2Vu
ZXJhdG9yKFZNJiwgU3RydWN0dXJlKik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0JpZ0ludC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNCaWdJbnQuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0JpZ0ludC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBA
CiAvKgogICogQ29weXJpZ2h0IChDKSAyMDE3IENhaW8gTGltYSA8dGljYWlvbGltYUBnbWFpbC5j
b20+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY3LDcgKzY3LDgg
QEAgSlNCaWdJbnQ6OkpTQmlnSW50KFZNJiB2bSwgU3RydWN0dXJlKiBzdAogICAgICwgbV9kYXRh
KHZtLCB0aGlzLCBkYXRhLCBsZW5ndGgpCiB7IH0KIAotdm9pZCBKU0JpZ0ludDo6dmlzaXRDaGls
ZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5h
bWUgVmlzaXRvcj4KK3ZvaWQgSlNCaWdJbnQ6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2Vs
bCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpT
QmlnSW50Kj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0
LCBpbmZvKCkpOwpAQCAtNzYsNiArNzcsOCBAQCB2b2lkIEpTQmlnSW50Ojp2aXNpdENoaWxkcmVu
KEpTQ2VsbCogY2VsCiAgICAgICAgIHZpc2l0b3IubWFya0F1eGlsaWFyeShkYXRhKTsKIH0KIAor
REVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTQmlnSW50KTsKKwogdm9pZCBKU0JpZ0ludDo6aW5pdGlh
bGl6ZShJbml0aWFsaXphdGlvblR5cGUgaW5pdFR5cGUpCiB7CiAgICAgaWYgKGluaXRUeXBlID09
IEluaXRpYWxpemF0aW9uVHlwZTo6V2l0aFplcm8pCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0JpZ0ludC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQmlnSW50LmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTQmlnSW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBA
CiAvKgogICogQ29weXJpZ2h0IChDKSAyMDE3IENhaW8gTGltYSA8dGljYWlvbGltYUBnbWFpbC5j
b20+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTUwLDcgKzUwLDcg
QEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3Mg
PSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IFN0cnVjdHVyZUlzSW1tb3J0YWwgfCBPdmVycmlkZXNU
b1RoaXM7CiAgICAgZnJpZW5kIGNsYXNzIENhY2hlZEJpZ0ludDsKIAotICAgIHN0YXRpYyB2b2lk
IHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lU
X0NISUxEUkVOOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNj
ZXNzPgogICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCb3VuZEZ1bmN0aW9uLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JvdW5kRnVuY3Rpb24uY3Bw
CShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Jv
dW5kRnVuY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMSwgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjQ5LDcgKzI0OSw4IEBA
IHZvaWQgSlNCb3VuZEZ1bmN0aW9uOjpmaW5pc2hDcmVhdGlvbihWTSYKICAgICBBU1NFUlQoaW5o
ZXJpdHModm0sIGluZm8oKSkpOwogfQogCi12b2lkIEpTQm91bmRGdW5jdGlvbjo6dmlzaXRDaGls
ZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5h
bWUgVmlzaXRvcj4KK3ZvaWQgSlNCb3VuZEZ1bmN0aW9uOjp2aXNpdENoaWxkcmVuSW1wbChKU0Nl
bGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNCb3VuZEZ1bmN0aW9uKiB0aGlz
T2JqZWN0ID0ganNDYXN0PEpTQm91bmRGdW5jdGlvbio+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19P
QkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTI2MSw0ICsyNjIsNiBAQCB2
b2lkIEpTQm91bmRGdW5jdGlvbjo6dmlzaXRDaGlsZHJlbihKU0NlCiAgICAgdmlzaXRvci5hcHBl
bmQodGhpc09iamVjdC0+bV9uYW1lTWF5QmVOdWxsKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxE
UkVOKEpTQm91bmRGdW5jdGlvbik7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCb3VuZEZ1bmN0aW9uLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCb3VuZEZ1bmN0aW9uLmgJKHJldmlzaW9u
IDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQm91bmRGdW5jdGlv
bi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMS0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODQsNyArODQsNyBAQCBwcml2YXRlOgogICAgIEpTQm91
bmRGdW5jdGlvbihWTSYsIE5hdGl2ZUV4ZWN1dGFibGUqLCBKU0dsb2JhbE9iamVjdCosIFN0cnVj
dHVyZSosIEpTT2JqZWN0KiB0YXJnZXRGdW5jdGlvbiwgSlNWYWx1ZSBib3VuZFRoaXMsIEpTSW1t
dXRhYmxlQnV0dGVyZmx5KiBib3VuZEFyZ3MsIEpTU3RyaW5nKiBuYW1lTWF5QmVOdWxsLCBkb3Vi
bGUgbGVuZ3RoKTsKIAogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKLSAgICBzdGF0aWMg
dm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9W
SVNJVF9DSElMRFJFTjsKIAogICAgIFdyaXRlQmFycmllcjxKU09iamVjdD4gbV90YXJnZXRGdW5j
dGlvbjsKICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4gbV9ib3VuZFRoaXM7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NhbGxlZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDYWxsZWUuY3BwCShyZXZpc2lvbiAyNzI4MzAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NhbGxlZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0LCAyMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtNTAsNyArNTAsOCBAQCB2b2lkIEpTQ2FsbGVlOjpmaW5pc2hDcmVhdGlvbihW
TSYgdm0pCiAgICAgQVNTRVJUKGluaGVyaXRzKHZtLCBpbmZvKCkpKTsKIH0KIAotdm9pZCBKU0Nh
bGxlZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQor
dGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNDYWxsZWU6OnZpc2l0Q2hpbGRyZW5J
bXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU0NhbGxlZSogdGhp
c09iamVjdCA9IGpzQ2FzdDxKU0NhbGxlZSo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1Rf
SU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTU5LDQgKzYwLDYgQEAgdm9pZCBKU0Nh
bGxlZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbAogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNP
YmplY3QtPm1fc2NvcGUpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNDYWxsZWUpOwor
CiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTQ2FsbGVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNDYWxsZWUuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNDYWxsZWUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE0LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMDAsNyArMTAwLDcgQEAgcHJvdGVjdGVk
OgogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKICAgICB1c2luZyBCYXNlOjpmaW5pc2hD
cmVhdGlvbjsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZp
c2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiBwcml2YXRlOgogICAgIGZy
aWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0NlbGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0NlbGwuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSw3IEBACiAv
KgogICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAxIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5v
cmcpCiAgKiAgQ29weXJpZ2h0IChDKSAyMDAxIFBldGVyIEtlbGx5IChwbWtAcG9zdC5jb20pCi0g
KiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogIENvcHlyaWdodCAoQykgMjAwMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAi
SlNMb2NrLmgiCiAjaW5jbHVkZSAiSlNUeXBlSW5mby5oIgogI2luY2x1ZGUgIlNsb3RWaXNpdG9y
LmgiCisjaW5jbHVkZSAiU2xvdFZpc2l0b3JNYWNyb3MuaCIKICNpbmNsdWRlICJTdWJzcGFjZUFj
Y2Vzcy5oIgogI2luY2x1ZGUgIlR5cGVkQXJyYXlUeXBlLmgiCiAjaW5jbHVkZSAiV3JpdGVCYXJy
aWVyLmgiCkBAIC0xNjcsOCArMTY4LDggQEAgcHVibGljOgogICAgIHNpemVfdCBlc3RpbWF0ZWRT
aXplSW5CeXRlcyhWTSYpIGNvbnN0OwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBzaXpl
X3QgZXN0aW1hdGVkU2l6ZShKU0NlbGwqLCBWTSYpOwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRD
aGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwotICAgIHN0YXRpYyB2b2lkIHZpc2l0T3V0
cHV0Q29uc3RyYWludHMoSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX0lOTElO
RV9WSVNJVF9DSElMRFJFTjsKKyAgICBzdGF0aWMgdm9pZCB2aXNpdE91dHB1dENvbnN0cmFpbnRz
KEpTQ2VsbCosIEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKIAogICAgIEpTX0VYUE9SVF9QUklWQVRF
IHN0YXRpYyB2b2lkIGFuYWx5emVIZWFwKEpTQ2VsbCosIEhlYXBBbmFseXplciYpOwogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGxJbmxpbmVzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsSW5saW5lcy5oCShyZXZp
c2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGxJbmxp
bmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDEyLTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEyLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNSw2ICsyNSw3IEBACiAKICNwcmFnbWEgb25jZQog
CisjaW5jbHVkZSAiQWJzdHJhY3RTbG90VmlzaXRvcklubGluZXMuaCIKICNpbmNsdWRlICJBbGxv
Y2F0b3JGb3JNb2RlLmgiCiAjaW5jbHVkZSAiQWxsb2NhdG9ySW5saW5lcy5oIgogI2luY2x1ZGUg
IkNvbXBsZXRlU3Vic3BhY2VJbmxpbmVzLmgiCkBAIC0xNDEsMTIgKzE0MiwxNSBAQCBBTFdBWVNf
SU5MSU5FIFN0cnVjdHVyZSogSlNDZWxsOjpzdHJ1Y3R1CiAgICAgcmV0dXJuIHZtLmdldFN0cnVj
dHVyZShtX3N0cnVjdHVyZUlEKTsKIH0KIAotaW5saW5lIHZvaWQgSlNDZWxsOjp2aXNpdENoaWxk
cmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBWaXNpdG9yPgoraW5saW5lIHZvaWQgSlNDZWxsOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwq
IGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJl
ZChjZWxsLT5zdHJ1Y3R1cmUodmlzaXRvci52bSgpKSk7CiB9CiAKLWlubGluZSB2b2lkIEpTQ2Vs
bDo6dmlzaXRPdXRwdXRDb25zdHJhaW50cyhKU0NlbGwqLCBTbG90VmlzaXRvciYpCitERUZJTkVf
SU5MSU5FX1ZJU0lUX0NISUxEUkVOKEpTQ2VsbCk7CisKK2lubGluZSB2b2lkIEpTQ2VsbDo6dmlz
aXRPdXRwdXRDb25zdHJhaW50cyhKU0NlbGwqLCBBYnN0cmFjdFNsb3RWaXNpdG9yJikKIHsKIH0K
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDdXN0b21HZXR0ZXJTZXR0
ZXJGdW5jdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNDdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbi5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ3VzdG9tR2V0dGVyU2V0dGVyRnVuY3Rp
b24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxNSwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTUtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTg1LDcgKzg1LDggQEAgSlNDdXN0b21HZXR0ZXJT
ZXR0ZXJGdW5jdGlvbiogSlNDdXN0b21HZQogICAgIHJldHVybiBmdW5jdGlvbjsKIH0KIAotdm9p
ZCBKU0N1c3RvbUdldHRlclNldHRlckZ1bmN0aW9uOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2Vs
bCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9p
ZCBKU0N1c3RvbUdldHRlclNldHRlckZ1bmN0aW9uOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwq
IGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNDdXN0b21HZXR0ZXJTZXR0ZXJGdW5j
dGlvbiogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0N1c3RvbUdldHRlclNldHRlckZ1bmN0aW9uKj4o
Y2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkp
OwpAQCAtOTQsNiArOTUsOCBAQCB2b2lkIEpTQ3VzdG9tR2V0dGVyU2V0dGVyRnVuY3Rpb246OnZp
c2l0CiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9nZXR0ZXJTZXR0ZXIpOwogfQog
CitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNDdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbik7CisK
IHZvaWQgSlNDdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbjo6ZmluaXNoQ3JlYXRpb24oVk0mIHZt
LCBOYXRpdmVFeGVjdXRhYmxlKiBleGVjdXRhYmxlLCBDdXN0b21HZXR0ZXJTZXR0ZXIqIGdldHRl
clNldHRlciwgY29uc3QgU3RyaW5nJiBuYW1lKQogewogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9u
KHZtLCBleGVjdXRhYmxlLCBpc1NldHRlcigpLCBuYW1lKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTQ3VzdG9tR2V0dGVyU2V0dGVyRnVuY3Rpb24uaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0N1c3RvbUdldHRlclNldHRlckZ1
bmN0aW9uLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTQ3VzdG9tR2V0dGVyU2V0dGVyRnVuY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxOSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTYz
LDcgKzYzLDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBKU0N1c3RvbUdldHRlclNldHRlckZ1
bmN0aW9uKFZNJiwgTmF0aXZlRXhlY3V0YWJsZSosIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJl
KiwgVHlwZSwgY29uc3QgUHJvcGVydHlOYW1lJik7CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihW
TSYsIE5hdGl2ZUV4ZWN1dGFibGUqLCBDdXN0b21HZXR0ZXJTZXR0ZXIqLCBjb25zdCBTdHJpbmcm
KTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7
CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIFdyaXRlQmFycmllcjxDdXN0b21H
ZXR0ZXJTZXR0ZXI+IG1fZ2V0dGVyU2V0dGVyOwogICAgIFR5cGUgbV90eXBlOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGaW5hbGl6YXRpb25SZWdpc3RyeS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGaW5hbGl6YXRpb25S
ZWdpc3RyeS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTRmluYWxpemF0aW9uUmVnaXN0cnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSwgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIwLTIwMjEgQXBwbGUsIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYsNiAr
MjYsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkpTRmluYWxpemF0aW9uUmVn
aXN0cnkuaCIKIAorI2luY2x1ZGUgIkFic3RyYWN0U2xvdFZpc2l0b3IuaCIKICNpbmNsdWRlICJE
ZWZlcnJlZFdvcmtUaW1lci5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJK
U0ludGVybmFsRmllbGRPYmplY3RJbXBsSW5saW5lcy5oIgpAQCAtNjAsNyArNjEsOCBAQCB2b2lk
IEpTRmluYWxpemF0aW9uUmVnaXN0cnk6OmZpbmlzaENyZWF0CiAgICAgZ2xvYmFsT2JqZWN0LT5n
bG9iYWxPYmplY3RNZXRob2RUYWJsZSgpLT5jdXJyZW50U2NyaXB0RXhlY3V0aW9uT3duZXIoZ2xv
YmFsT2JqZWN0KTsKIH0KIAotdm9pZCBKU0ZpbmFsaXphdGlvblJlZ2lzdHJ5Ojp2aXNpdENoaWxk
cmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBWaXNpdG9yPgordm9pZCBKU0ZpbmFsaXphdGlvblJlZ2lzdHJ5Ojp2aXNpdENoaWxkcmVuSW1w
bChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgQmFzZTo6dmlzaXRDaGls
ZHJlbihjZWxsLCB2aXNpdG9yKTsKIApAQCAtODAsMTMgKzgyLDE1IEBAIHZvaWQgSlNGaW5hbGl6
YXRpb25SZWdpc3RyeTo6dmlzaXRDaGlsZHIKICAgICBmb3IgKGF1dG8mIGhvbGRpbmdzIDogdGhp
c09iamVjdC0+bV9ub1VucmVnaXN0cmF0aW9uRGVhZCkKICAgICAgICAgdmlzaXRvci5hcHBlbmQo
aG9sZGluZ3MpOwogCi0gICAgc2l6ZV90IHRvdGFsQnVmZmVyU2l6ZXNJbkJ5dGVzID0gdGhpc09i
amVjdC0+bV9kZWFkUmVnaXN0cmF0aW9ucy5jYXBhY2l0eSgpICogc2l6ZW9mKGRlY2x0eXBlKHRo
aXNPYmplY3QtPm1fZGVhZFJlZ2lzdHJhdGlvbnMpOjpLZXlWYWx1ZVBhaXJUeXBlKTsKLSAgICB0
b3RhbEJ1ZmZlclNpemVzSW5CeXRlcyArPSB0aGlzT2JqZWN0LT5tX2xpdmVSZWdpc3RyYXRpb25z
LmNhcGFjaXR5KCkgKiBzaXplb2YoZGVjbHR5cGUodGhpc09iamVjdC0+bV9kZWFkUmVnaXN0cmF0
aW9ucyk6OktleVZhbHVlUGFpclR5cGUpOworICAgIHNpemVfdCB0b3RhbEJ1ZmZlclNpemVzSW5C
eXRlcyA9IHRoaXNPYmplY3QtPm1fZGVhZFJlZ2lzdHJhdGlvbnMuY2FwYWNpdHkoKSAqIHNpemVv
Zih0eXBlbmFtZSBkZWNsdHlwZSh0aGlzT2JqZWN0LT5tX2RlYWRSZWdpc3RyYXRpb25zKTo6S2V5
VmFsdWVQYWlyVHlwZSk7CisgICAgdG90YWxCdWZmZXJTaXplc0luQnl0ZXMgKz0gdGhpc09iamVj
dC0+bV9saXZlUmVnaXN0cmF0aW9ucy5jYXBhY2l0eSgpICogc2l6ZW9mKHR5cGVuYW1lIGRlY2x0
eXBlKHRoaXNPYmplY3QtPm1fZGVhZFJlZ2lzdHJhdGlvbnMpOjpLZXlWYWx1ZVBhaXJUeXBlKTsK
ICAgICB0b3RhbEJ1ZmZlclNpemVzSW5CeXRlcyArPSB0aGlzT2JqZWN0LT5tX25vVW5yZWdpc3Ry
YXRpb25MaXZlLmNhcGFjaXR5KCkgKiBzaXplb2YoZGVjbHR5cGUodGhpc09iamVjdC0+bV9ub1Vu
cmVnaXN0cmF0aW9uTGl2ZS50YWtlTGFzdCgpKSk7CiAgICAgdG90YWxCdWZmZXJTaXplc0luQnl0
ZXMgKz0gdGhpc09iamVjdC0+bV9ub1VucmVnaXN0cmF0aW9uRGVhZC5jYXBhY2l0eSgpICogc2l6
ZW9mKGRlY2x0eXBlKHRoaXNPYmplY3QtPm1fbm9VbnJlZ2lzdHJhdGlvbkxpdmUudGFrZUxhc3Qo
KSkpOwogICAgIHZpc2l0b3Iudm0oKS5oZWFwLnJlcG9ydEV4dHJhTWVtb3J5VmlzaXRlZCh0b3Rh
bEJ1ZmZlclNpemVzSW5CeXRlcyk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU0ZpbmFs
aXphdGlvblJlZ2lzdHJ5KTsKKwogdm9pZCBKU0ZpbmFsaXphdGlvblJlZ2lzdHJ5OjpkZXN0cm95
KEpTQ2VsbCogdGFibGUpCiB7CiAgICAgc3RhdGljX2Nhc3Q8SlNGaW5hbGl6YXRpb25SZWdpc3Ry
eSo+KHRhYmxlKS0+fkpTRmluYWxpemF0aW9uUmVnaXN0cnkoKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTRmluYWxpemF0aW9uUmVnaXN0cnkuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ZpbmFsaXphdGlvblJlZ2lzdHJ5LmgJ
KHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRmlu
YWxpemF0aW9uUmVnaXN0cnkuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAyMC0yMDIxIEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTcwLDcgKzcwLDcgQEAgcHVibGlj
OgogICAgIERFQ0xBUkVfRVhQT1JUX0lORk87CiAKICAgICB2b2lkIGZpbmFsaXplVW5jb25kaXRp
b25hbGx5KFZNJik7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90
VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAgICAgc3RhdGljIHZvaWQg
ZGVzdHJveShKU0NlbGwqKTsKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNEZXN0cnVj
dGlvbiA9IHRydWU7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVu
Y3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
RnVuY3Rpb24uY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0Z1bmN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw3ICsxLDcgQEAKIC8q
CiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDIgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9y
ZykKICAqICBDb3B5cmlnaHQgKEMpIDIwMDEgUGV0ZXIgS2VsbHkgKHBta0Bwb3N0LmNvbSkKLSAq
ICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICogIENvcHlyaWdodCAoQykgMjAwNyBDYW1lcm9uIFp3YXJpY2ggKGN3endhcmljaEB1
d2F0ZXJsb28uY2EpCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA3IE1ha3MgT3Jsb3ZpY2gKICAqICBD
b3B5cmlnaHQgKEMpIDIwMTUgQ2Fub24gSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgpAQCAtMjUy
LDcgKzI1Miw4IEBAIGNvbnN0IFNvdXJjZUNvZGUqIEpTRnVuY3Rpb246OnNvdXJjZUNvZGUKICAg
ICByZXR1cm4gJmpzRXhlY3V0YWJsZSgpLT5zb3VyY2UoKTsKIH0KICAgICAKLXZvaWQgSlNGdW5j
dGlvbjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQor
dGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNGdW5jdGlvbjo6dmlzaXRDaGlsZHJl
bkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTRnVuY3Rpb24q
IHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNGdW5jdGlvbio+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19P
QkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTI2MSw2ICsyNjIsOCBAQCB2
b2lkIEpTRnVuY3Rpb246OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjCiAgICAgdmlzaXRvci5hcHBl
bmRVbmJhcnJpZXJlZChiaXR3aXNlX2Nhc3Q8SlNDZWxsKj4oYml0d2lzZV9jYXN0PHVpbnRwdHJf
dD4odGhpc09iamVjdC0+bV9leGVjdXRhYmxlT3JSYXJlRGF0YSkgJiB+cmFyZURhdGFUYWcpKTsK
IH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTRnVuY3Rpb24pOworCiBDYWxsRGF0YSBKU0Z1
bmN0aW9uOjpnZXRDYWxsRGF0YShKU0NlbGwqIGNlbGwpCiB7CiAgICAgLy8gS2VlcCB0aGlzIGZ1
bmN0aW9uIE9LIGZvciBpbnZvY2F0aW9uIGZyb20gY29uY3VycmVudCBjb21waWxlcnMuCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5oCShyZXZpc2lvbiAy
NzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMTk5OS0y
MDAwIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAz
LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykg
MjAwMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqICBDb3B5cmlnaHQg
KEMpIDIwMDcgQ2FtZXJvbiBad2FyaWNoIChjd3p3YXJpY2hAdXdhdGVybG9vLmNhKQogICogIENv
cHlyaWdodCAoQykgMjAwNyBNYWtzIE9ybG92aWNoCiAgKgpAQCAtMTgwLDcgKzE4MCw3IEBAIHBy
b3RlY3RlZDoKIAogICAgIHN0YXRpYyBib29sIGRlbGV0ZVByb3BlcnR5KEpTQ2VsbCosIEpTR2xv
YmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBEZWxldGVQcm9wZXJ0eVNsb3QmKTsKIAotICAgIHN0
YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNM
QVJFX1ZJU0lUX0NISUxEUkVOOwogCiBwcml2YXRlOgogICAgIHN0YXRpYyBKU0Z1bmN0aW9uKiBj
cmVhdGVJbXBsKFZNJiB2bSwgRnVuY3Rpb25FeGVjdXRhYmxlKiBleGVjdXRhYmxlLCBKU1Njb3Bl
KiBzY29wZSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0dlbmVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOS0yMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
NTksMTEgKzU5LDE0IEBAIHZvaWQgSlNHZW5lcmF0b3I6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkK
ICAgICAgICAgaW50ZXJuYWxGaWVsZChpbmRleCkuc2V0KHZtLCB0aGlzLCB2YWx1ZXNbaW5kZXhd
KTsKIH0KIAotdm9pZCBKU0dlbmVyYXRvcjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNH
ZW5lcmF0b3I6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRv
cikKIHsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTR2VuZXJhdG9yKj4oY2VsbCk7
CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwogICAg
IEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CiB9CiAKK0RFRklORV9W
SVNJVF9DSElMRFJFTihKU0dlbmVyYXRvcik7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmF0b3IuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyYXRvci5oCShyZXZpc2lvbiAy
NzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyYXRvci5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTktMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTk0LDcgKzk0LDcgQEAgcHVibGljOgogCiAgICAgREVDTEFSRV9FWFBPUlRf
SU5GTzsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0
b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiBwcml2YXRlOgogICAgIEpTR2Vu
ZXJhdG9yKFZNJiwgU3RydWN0dXJlKik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmgJKHJldmlzaW9uIDI3
MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJy
YXlWaWV3LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMTMsNyArMzEzLDcgQEAgcHJpdmF0ZToKICAg
ICBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgSlNHbG9iYWxPYmpl
Y3QqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIERvbnRFbnVtUHJvcGVydGllc01vZGUpOwogCiAgICAg
c3RhdGljIHNpemVfdCBlc3RpbWF0ZWRTaXplKEpTQ2VsbCosIFZNJik7Ci0gICAgc3RhdGljIHZv
aWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVEVN
UExBVEVfVklTSVRfQ0hJTERSRU47CiAKICAgICAvLyBSZXR1cm5zIHRydWUgaWYgc3VjY2Vzc2Z1
bCwgYW5kIGZhbHNlIG9uIGVycm9yOyBpdCB3aWxsIHRocm93IG9uIGVycm9yLgogICAgIHRlbXBs
YXRlPHR5cGVuYW1lIE90aGVyQWRhcHRvcj4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5l
cy5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTUxNyw3
ICs1MTcsOCBAQCBzaXplX3QgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46CiB9CiAK
IHRlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+Ci12b2lkIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3
PEFkYXB0b3I+Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0
b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0dlbmVyaWNUeXBlZEFycmF5
VmlldzxBZGFwdG9yPjo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2
aXNpdG9yKQogewogICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiB0aGlzT2JqZWN0ID0ganND
YXN0PEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Kj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVD
VF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNTU1LDQgKzU1Niw2IEBAIHZvaWQg
SlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OnYKICAgICB9CiB9CiAKK0RFRklORV9U
RU1QTEFURV9WSVNJVF9DSElMRFJFTih0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPiwgSlNHZW5l
cmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj4pOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAJ
KHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xv
YmFsT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDctMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KiBDb3B5cmlnaHQgKEMpIDIwMDggQ2FtZXJvbiBad2FyaWNoIChjd3p3YXJpY2hAdXdhdGVybG9v
LmNhKQogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMTg5Miw3ICsxODkyLDggQEAgdm9pZCBKU0dsb2Jh
bE9iamVjdDo6cmVzZXRQcm90b3R5cGUoVk0mIAogICAgIHNldEdsb2JhbFRoaXModm0sIEpTUHJv
eHk6OmNyZWF0ZSh2bSwgSlNQcm94eTo6Y3JlYXRlU3RydWN0dXJlKHZtLCB0aGlzLCBwcm90b3R5
cGUsIFB1cmVGb3J3YXJkaW5nUHJveHlUeXBlKSwgdGhpcykpOwogfQogCi12b2lkIEpTR2xvYmFs
T2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3Ip
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0dsb2JhbE9iamVjdDo6dmlzaXRD
aGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogeyAKICAgICBKU0ds
b2JhbE9iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0dsb2JhbE9iamVjdCo+KGNlbGwpOwog
ICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTIw
NjAsNiArMjA2MSw4IEBAIHZvaWQgSlNHbG9iYWxPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWwK
ICAgICB0aGlzT2JqZWN0LT5tX3JlZ0V4cEdsb2JhbERhdGEudmlzaXRBZ2dyZWdhdGUodmlzaXRv
cik7CiB9CiAKK0RFRklORV9FWFBPUlRfVklTSVRfQ0hJTERSRU4oSlNHbG9iYWxPYmplY3QpOwor
CiBDYWxsRnJhbWUqIEpTR2xvYmFsT2JqZWN0OjpkZXByZWNhdGVkQ2FsbEZyYW1lRm9yRGVidWdn
ZXIoKQogewogICAgIHJldHVybiBDYWxsRnJhbWU6OmNyZWF0ZShtX2RlcHJlY2F0ZWRDYWxsRnJh
bWVGb3JEZWJ1Z2dlcik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ds
b2JhbE9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTR2xvYmFsT2JqZWN0LmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2
IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMjAwNyBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQu
b3JnPgotICogIENvcHlyaWdodCAoQykgMjAwNy0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtNjA5LDcgKzYwOSw3IEBAIHB1
YmxpYzoKICAgICBKU19FWFBPUlRfUFJJVkFURSB+SlNHbG9iYWxPYmplY3QoKTsKICAgICBKU19F
WFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwogCi0gICAgSlNfRVhQ
T1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRv
ciYpOworICAgIERFQ0xBUkVfRVhQT1JUX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgSlNfRVhQT1JU
X1BSSVZBVEUgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiwgSlNHbG9i
YWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwogICAgIEpTX0VYUE9SVF9Q
UklWQVRFIHN0YXRpYyBib29sIHB1dChKU0NlbGwqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5
TmFtZSwgSlNWYWx1ZSwgUHV0UHJvcGVydHlTbG90Jik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0ltbXV0YWJsZUJ1dHRlcmZseS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbW11dGFibGVCdXR0ZXJmbHkuY3BwCShyZXZp
c2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ltbXV0YWJs
ZUJ1dHRlcmZseS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxOC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzIsNyArMzIsOCBAQCBuYW1lc3BhY2UgSlND
IHsKIAogY29uc3QgQ2xhc3NJbmZvIEpTSW1tdXRhYmxlQnV0dGVyZmx5OjpzX2luZm8gPSB7ICJJ
bW11dGFibGUgQnV0dGVyZmx5IiwgbnVsbHB0ciwgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01F
VEhPRF9UQUJMRShKU0ltbXV0YWJsZUJ1dHRlcmZseSkgfTsKIAotdm9pZCBKU0ltbXV0YWJsZUJ1
dHRlcmZseTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9y
KQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNJbW11dGFibGVCdXR0ZXJmbHk6
OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAg
ICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNlbGwsIGluZm8oKSk7CiAgICAgQmFzZTo6dmlz
aXRDaGlsZHJlbihjZWxsLCB2aXNpdG9yKTsKQEAgLTQ1LDYgKzQ2LDggQEAgdm9pZCBKU0ltbXV0
YWJsZUJ1dHRlcmZseTo6dmlzaXRDaGlsZHJlbgogICAgIHZpc2l0b3IuYXBwZW5kVmFsdWVzSGlk
ZGVuKGJ1dHRlcmZseS0+Y29udGlndW91cygpLmRhdGEoKSwgYnV0dGVyZmx5LT5wdWJsaWNMZW5n
dGgoKSk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU0ltbXV0YWJsZUJ1dHRlcmZseSk7
CisKIHZvaWQgSlNJbW11dGFibGVCdXR0ZXJmbHk6OmNvcHlUb0FyZ3VtZW50cyhKU0dsb2JhbE9i
amVjdCosIEpTVmFsdWUqIGZpcnN0RWxlbWVudERlc3QsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWdu
ZWQgbGVuZ3RoKQogewogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkg
ewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbW11dGFibGVCdXR0ZXJm
bHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ltbXV0
YWJsZUJ1dHRlcmZseS5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0ltbXV0YWJsZUJ1dHRlcmZseS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOC0yMDE5IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOC0yMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTQ1
LDcgKzE0NSw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGpzRG91YmxlTnVtYmVyKHZhbHVl
KTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RW
aXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIHZvaWQgY29weVRv
QXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSogZmlyc3RFbGVtZW50RGVzdCwgdW5z
aWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0ludGVybmFsRmllbGRPYmplY3RJbXBsLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbC5o
CShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0lu
dGVybmFsRmllbGRPYmplY3RJbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxOS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjYsNyArNjYsNyBAQCBwdWJs
aWM6CiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkludGVybmFsRmllbGQodW5zaWduZWQg
aW5kZXgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU0ludGVybmFsRmllbGRPYmplY3RJbXBs
LCBtX2ludGVybmFsRmllbGRzKSArIGluZGV4ICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3du
Pik7IH0KIAogcHJvdGVjdGVkOgotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1RFTVBMQVRFX1ZJU0lUX0NISUxEUkVOOwog
CiAgICAgSlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbChWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0
dXJlKQogICAgICAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTSW50ZXJuYWxGaWVsZE9iamVjdEltcGxJbmxpbmVzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbnRlcm5hbEZpZWxkT2Jq
ZWN0SW1wbElubGluZXMuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbElubGluZXMuaAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE5LTIwMjEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC0zMCw3ICszMCw4IEBACiBuYW1lc3BhY2UgSlNDIHsKIAogdGVtcGxhdGU8dW5zaWduZWQg
cGFzc2VkTnVtYmVyT2ZJbnRlcm5hbEZpZWxkcz4KLXZvaWQgSlNJbnRlcm5hbEZpZWxkT2JqZWN0
SW1wbDxwYXNzZWROdW1iZXJPZkludGVybmFsRmllbGRzPjo6dmlzaXRDaGlsZHJlbihKU0NlbGwq
IGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4K
K3ZvaWQgSlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbDxwYXNzZWROdW1iZXJPZkludGVybmFsRmll
bGRzPjo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQog
ewogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1w
bCo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5m
bygpKTsKQEAgLTM4LDQgKzM5LDYgQEAgdm9pZCBKU0ludGVybmFsRmllbGRPYmplY3RJbXBsPHBh
c3NlZE51bQogICAgIHZpc2l0b3IuYXBwZW5kVmFsdWVzKHRoaXNPYmplY3QtPm1faW50ZXJuYWxG
aWVsZHMsIG51bWJlck9mSW50ZXJuYWxGaWVsZHMpOwogfQogCitERUZJTkVfVEVNUExBVEVfVklT
SVRfQ0hJTERSRU4odGVtcGxhdGU8dW5zaWduZWQgcGFzc2VkTnVtYmVyT2ZJbnRlcm5hbEZpZWxk
cz4sIEpTSW50ZXJuYWxGaWVsZE9iamVjdEltcGw8cGFzc2VkTnVtYmVyT2ZJbnRlcm5hbEZpZWxk
cz4pOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTTGV4aWNhbEVudmlyb25tZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0xleGljYWxFbnZpcm9ubWVudC5jcHAJKHJldmlzaW9uIDI3
MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTGV4aWNhbEVudmlyb25t
ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDgtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMDgtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM2LDcgKzM2LDggQEAgbmFtZXNwYWNlIEpTQyB7
CiAKIGNvbnN0IENsYXNzSW5mbyBKU0xleGljYWxFbnZpcm9ubWVudDo6c19pbmZvID0geyAiSlNM
ZXhpY2FsRW52aXJvbm1lbnQiLCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBudWxscHRyLCBDUkVB
VEVfTUVUSE9EX1RBQkxFKEpTTGV4aWNhbEVudmlyb25tZW50KSB9OwogCi12b2lkIEpTTGV4aWNh
bEVudmlyb25tZW50Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZp
c2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0xleGljYWxFbnZpcm9u
bWVudDo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQog
ewogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNMZXhpY2FsRW52aXJvbm1lbnQqPihj
ZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7
CkBAIC00NCw2ICs0NSw4IEBAIHZvaWQgSlNMZXhpY2FsRW52aXJvbm1lbnQ6OnZpc2l0Q2hpbGRy
ZW4KICAgICB2aXNpdG9yLmFwcGVuZFZhbHVlc0hpZGRlbih0aGlzT2JqZWN0LT52YXJpYWJsZXMo
KSwgdGhpc09iamVjdC0+c3ltYm9sVGFibGUoKS0+c2NvcGVTaXplKCkpOwogfQogCitERUZJTkVf
VklTSVRfQ0hJTERSRU4oSlNMZXhpY2FsRW52aXJvbm1lbnQpOworCiB2b2lkIEpTTGV4aWNhbEVu
dmlyb25tZW50OjphbmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5hbHl6
ZXIpCiB7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0xleGljYWxFbnZpcm9ubWVu
dCo+KGNlbGwpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMZXhpY2Fs
RW52aXJvbm1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0xleGljYWxFbnZpcm9ubWVudC5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0xleGljYWxFbnZpcm9ubWVudC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOC0yMDIwIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDIxIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMTM0LDcgKzEzNCw3IEBAIHByb3RlY3RlZDoKICAgICAgICAgfQogICAgIH0KIAotICAg
IHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBE
RUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogICAgIHN0YXRpYyB2b2lkIGFuYWx5emVIZWFwKEpTQ2Vs
bCosIEhlYXBBbmFseXplciYpOwogfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNNYXBJdGVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNNYXBJdGVyYXRvci5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTWFwSXRlcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE3IEFwcGxlLCBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMSBBcHBs
ZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC01NywxMyArNTcsMTYgQEAgdm9pZCBKU01hcEl0ZXJhdG9yOjpmaW5pc2hDcmVhdGlv
bihWTSYgdgogICAgICAgICBCYXNlOjppbnRlcm5hbEZpZWxkKGluZGV4KS5zZXQodm0sIHRoaXMs
IHZhbHVlc1tpbmRleF0pOwogfQogCi12b2lkIEpTTWFwSXRlcmF0b3I6OnZpc2l0Q2hpbGRyZW4o
SlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZp
c2l0b3I+Cit2b2lkIEpTTWFwSXRlcmF0b3I6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2Vs
bCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpT
TWFwSXRlcmF0b3IqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNP
YmplY3QsIGluZm8oKSk7CiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNp
dG9yKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTTWFwSXRlcmF0b3IpOworCiBKU1Zh
bHVlIEpTTWFwSXRlcmF0b3I6OmNyZWF0ZVBhaXIoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgSlNWYWx1ZSBrZXksIEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgTWFya2VkQXJndW1lbnRCdWZm
ZXIgYXJnczsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTWFwSXRlcmF0
b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01hcEl0
ZXJhdG9yLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTTWFwSXRlcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTYgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIxIEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE0Miw3ICsxNDIsNyBA
QCBwcml2YXRlOgogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0m
LCBKU01hcCosIEl0ZXJhdGlvbktpbmQpOwogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsK
ICAgICBKU1ZhbHVlIGNyZWF0ZVBhaXIoSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlLCBKU1ZhbHVl
KTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7
CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIH07CiBTVEFUSUNfQVNTRVJUX0lTX1RSSVZJ
QUxMWV9ERVNUUlVDVElCTEUoSlNNYXBJdGVyYXRvcik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlRW52aXJvbm1lbnQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlRW52aXJvbm1lbnQuY3BwCShyZXZp
c2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZUVu
dmlyb25tZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTUtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY1LDcgKzY1LDggQEAgdm9pZCBKU01v
ZHVsZUVudmlyb25tZW50OjpmaW5pc2hDcmVhdGlvbgogICAgIHRoaXMtPm1vZHVsZVJlY29yZFNs
b3QoKS5zZXQodm0sIHRoaXMsIG1vZHVsZVJlY29yZCk7CiB9CiAKLXZvaWQgSlNNb2R1bGVFbnZp
cm9ubWVudDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9y
KQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNNb2R1bGVFbnZpcm9ubWVudDo6
dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAg
IEpTTW9kdWxlRW52aXJvbm1lbnQqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNNb2R1bGVFbnZpcm9u
bWVudCo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwg
aW5mbygpKTsKQEAgLTc0LDYgKzc1LDggQEAgdm9pZCBKU01vZHVsZUVudmlyb25tZW50Ojp2aXNp
dENoaWxkcmVuKAogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1vZHVsZVJlY29yZFNs
b3QoKSk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU01vZHVsZUVudmlyb25tZW50KTsK
KwogYm9vbCBKU01vZHVsZUVudmlyb25tZW50OjpnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3Qq
IGNlbGwsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0
eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3Qt
PnZtKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZUVudmly
b25tZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNN
b2R1bGVFbnZpcm9ubWVudC5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU01vZHVsZUVudmlyb25tZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjAgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC04
OSw3ICs4OSw3IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiAqYml0d2lzZV9jYXN0PFdyaXRl
QmFycmllckJhc2U8QWJzdHJhY3RNb2R1bGVSZWNvcmQ+Kj4oYml0d2lzZV9jYXN0PGNoYXIqPih0
aGlzKSArIG9mZnNldE9mTW9kdWxlUmVjb3JkKHN5bWJvbFRhYmxlKCkpKTsKICAgICB9CiAKLSAg
ICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAg
REVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIH07CiAKIGlubGluZSBKU01vZHVsZUVudmlyb25tZW50
OjpKU01vZHVsZUVudmlyb25tZW50KFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTU2Nv
cGUqIGN1cnJlbnRTY29wZSwgU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlTmFtZXNwYWNl
T2JqZWN0LmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIwIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODUs
NyArODUsOCBAQCB2b2lkIEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0OjpkZXN0cm95KEpTCiAgICAg
dGhpc09iamVjdC0+SlNNb2R1bGVOYW1lc3BhY2VPYmplY3Q6On5KU01vZHVsZU5hbWVzcGFjZU9i
amVjdCgpOwogfQogCi12b2lkIEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0Ojp2aXNpdENoaWxkcmVu
KEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPgordm9pZCBKU01vZHVsZU5hbWVzcGFjZU9iamVjdDo6dmlzaXRDaGlsZHJlbkltcGwo
SlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTTW9kdWxlTmFtZXNwYWNl
T2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0Kj4oY2Vs
bCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpA
QCAtOTgsNiArOTksOCBAQCB2b2lkIEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0Ojp2aXNpdENoaWxk
CiAgICAgfQogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNNb2R1bGVOYW1lc3BhY2VPYmpl
Y3QpOworCiBzdGF0aWMgSlNWYWx1ZSBnZXRWYWx1ZShKU01vZHVsZUVudmlyb25tZW50KiBlbnZp
cm9ubWVudCwgUHJvcGVydHlOYW1lIGxvY2FsTmFtZSwgU2NvcGVPZmZzZXQmIHNjb3BlT2Zmc2V0
KQogewogICAgIFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSA9IGVudmlyb25tZW50LT5zeW1ib2xU
YWJsZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVOYW1l
c3BhY2VPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU01vZHVsZU5hbWVzcGFjZU9iamVjdC5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZU5hbWVzcGFjZU9iamVjdC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIwIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtNzIsNyArNzIsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIEpTX0VYUE9S
VF9QUklWQVRFIEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0KFZNJiwgU3RydWN0dXJlKik7CiAgICAg
SlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0dsb2JhbE9iamVjdCosIEFi
c3RyYWN0TW9kdWxlUmVjb3JkKiwgVmVjdG9yPHN0ZDo6cGFpcjxJZGVudGlmaWVyLCBBYnN0cmFj
dE1vZHVsZVJlY29yZDo6UmVzb2x1dGlvbj4+JiYpOwotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hp
bGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVO
OwogICAgIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90Q29tbW9uKEpTR2xvYmFsT2JqZWN0KiwgUHJv
cGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKIAogICAgIHN0cnVjdCBFeHBvcnRFbnRyeSB7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZVJlY29yZC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVSZWNvcmQu
Y3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U01vZHVsZVJlY29yZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDE1LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03MCw3ICs3MCw4IEBAIHZvaWQg
SlNNb2R1bGVSZWNvcmQ6OmZpbmlzaENyZWF0aW9uKEpTR2wKICAgICBBU1NFUlQoaW5oZXJpdHMo
dm0sIGluZm8oKSkpOwogfQogCi12b2lkIEpTTW9kdWxlUmVjb3JkOjp2aXNpdENoaWxkcmVuKEpT
Q2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNp
dG9yPgordm9pZCBKU01vZHVsZVJlY29yZDo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxs
LCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTTW9kdWxlUmVjb3JkKiB0aGlzT2JqZWN0ID0g
anNDYXN0PEpTTW9kdWxlUmVjb3JkKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhF
UklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNzgsNiArNzksOCBAQCB2b2lkIEpTTW9kdWxl
UmVjb3JkOjp2aXNpdENoaWxkcmVuKEpTQ2VsCiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVj
dC0+bV9tb2R1bGVQcm9ncmFtRXhlY3V0YWJsZSk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJF
TihKU01vZHVsZVJlY29yZCk7CisKIHZvaWQgSlNNb2R1bGVSZWNvcmQ6OmxpbmsoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBzY3JpcHRGZXRjaGVyKQogewogICAgIFZNJiB2
bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTTW9kdWxlUmVjb3JkLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNNb2R1bGVSZWNvcmQuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVSZWNvcmQuaAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTY2LDcgKzY2LDcgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNHbG9i
YWxPYmplY3QqLCBWTSYpOwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwq
LCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICB2b2lk
IGluc3RhbnRpYXRlRGVjbGFyYXRpb25zKEpTR2xvYmFsT2JqZWN0KiwgTW9kdWxlUHJvZ3JhbUV4
ZWN1dGFibGUqLCBKU1ZhbHVlIHNjcmlwdEZldGNoZXIpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU05hdGl2ZVN0ZEZ1bmN0aW9uLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU05hdGl2ZVN0ZEZ1bmN0aW9uLmNwcAkocmV2
aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNOYXRpdmVT
dGRGdW5jdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE1LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00MSwxMyArNDEsMTYgQEAgSlNOYXRp
dmVTdGRGdW5jdGlvbjo6SlNOYXRpdmVTdGRGdW5jdGlvbgogewogfQogCi12b2lkIEpTTmF0aXZl
U3RkRnVuY3Rpb246OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlz
aXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTTmF0aXZlU3RkRnVuY3Rp
b246OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsK
ICAgICBKU05hdGl2ZVN0ZEZ1bmN0aW9uKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTTmF0aXZlU3Rk
RnVuY3Rpb24qPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmpl
Y3QsIGluZm8oKSk7CiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9y
KTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTTmF0aXZlU3RkRnVuY3Rpb24pOworCiB2
b2lkIEpTTmF0aXZlU3RkRnVuY3Rpb246OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgTmF0aXZlRXhl
Y3V0YWJsZSogZXhlY3V0YWJsZSwgdW5zaWduZWQgbGVuZ3RoLCBjb25zdCBTdHJpbmcmIG5hbWUp
CiB7CiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0sIGV4ZWN1dGFibGUsIGxlbmd0aCwgbmFt
ZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU05hdGl2ZVN0ZEZ1bmN0
aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNOYXRp
dmVTdGRGdW5jdGlvbi5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU05hdGl2ZVN0ZEZ1bmN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTggQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02NSw3
ICs2NSw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgSlNOYXRpdmVTdGRGdW5jdGlvbihWTSYs
IE5hdGl2ZUV4ZWN1dGFibGUqLCBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSosIE5hdGl2ZVN0
ZEZ1bmN0aW9uJiYpOwogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBOYXRpdmVFeGVjdXRh
YmxlKiwgdW5zaWduZWQgbGVuZ3RoLCBjb25zdCBTdHJpbmcmIG5hbWUpOwotICAgIHN0YXRpYyB2
b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJ
U0lUX0NISUxEUkVOOwogCiAgICAgTmF0aXZlU3RkRnVuY3Rpb24gbV9mdW5jdGlvbjsKIH07Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCShyZXZpc2lv
biAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSw3IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMTk5
OS0yMDAxIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCiAgKiAgQ29weXJpZ2h0IChDKSAy
MDAxIFBldGVyIEtlbGx5IChwbWtAcG9zdC5jb20pCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIw
MjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAw
My0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqICBDb3B5cmlnaHQgKEMp
IDIwMDcgRXJpYyBTZWlkZWwgKGVyaWNAd2Via2l0Lm9yZykKICAqCiAgKiAgVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAtNzIs
NyArNzIsOCBAQCBjb25zdCBDbGFzc0luZm8gSlNPYmplY3Q6OnNfaW5mbyA9IHsgIk9iCiAKIGNv
bnN0IENsYXNzSW5mbyBKU0ZpbmFsT2JqZWN0OjpzX2luZm8gPSB7ICJPYmplY3QiLCAmQmFzZTo6
c19pbmZvLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTRmluYWxPYmpl
Y3QpIH07CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKU09iamVjdDo6bWFya0F1eGlsaWFyeUFuZFZp
c2l0T3V0T2ZMaW5lUHJvcGVydGllcyhTbG90VmlzaXRvciYgdmlzaXRvciwgQnV0dGVyZmx5KiBi
dXR0ZXJmbHksIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBtYXhPZmZzZXQp
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgorQUxXQVlTX0lOTElORSB2b2lkIEpTT2JqZWN0
OjptYXJrQXV4aWxpYXJ5QW5kVmlzaXRPdXRPZkxpbmVQcm9wZXJ0aWVzKFZpc2l0b3ImIHZpc2l0
b3IsIEJ1dHRlcmZseSogYnV0dGVyZmx5LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUHJvcGVydHlP
ZmZzZXQgbWF4T2Zmc2V0KQogewogICAgIC8vIFdlIGNhbGwgdGhpcyB3aGVuIHdlIGZvdW5kIGV2
ZXJ5dGhpbmcgd2l0aG91dCByYWNlcy4KICAgICBBU1NFUlQoc3RydWN0dXJlKTsKQEAgLTEwMyw3
ICsxMDQsOCBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSlNPYmplY3Q6Om1hcmtBdXhpbGlhCiAgICAg
dmlzaXRvci5hcHBlbmRWYWx1ZXNIaWRkZW4oYnV0dGVyZmx5LT5wcm9wZXJ0eVN0b3JhZ2UoKSAt
IG91dE9mTGluZVNpemUsIG91dE9mTGluZVNpemUpOwogfQogCi1BTFdBWVNfSU5MSU5FIFN0cnVj
dHVyZSogSlNPYmplY3Q6OnZpc2l0QnV0dGVyZmx5KFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVt
cGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK0FMV0FZU19JTkxJTkUgU3RydWN0dXJlKiBKU09iamVj
dDo6dmlzaXRCdXR0ZXJmbHkoVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBzdGF0aWMgY29uc3Qg
Y2hhciogY29uc3QgcmFjZVJlYXNvbiA9ICJKU09iamVjdDo6dmlzaXRCdXR0ZXJmbHkiOwogICAg
IFN0cnVjdHVyZSogcmVzdWx0ID0gdmlzaXRCdXR0ZXJmbHlJbXBsKHZpc2l0b3IpOwpAQCAtMTEy
LDcgKzExNCw4IEBAIEFMV0FZU19JTkxJTkUgU3RydWN0dXJlKiBKU09iamVjdDo6dmlzaXQKICAg
ICByZXR1cm4gcmVzdWx0OwogfQogCi1BTFdBWVNfSU5MSU5FIFN0cnVjdHVyZSogSlNPYmplY3Q6
OnZpc2l0QnV0dGVyZmx5SW1wbChTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVu
YW1lIFZpc2l0b3I+CitBTFdBWVNfSU5MSU5FIFN0cnVjdHVyZSogSlNPYmplY3Q6OnZpc2l0QnV0
dGVyZmx5SW1wbChWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFZNJiB2bSA9IHZpc2l0b3Iudm0o
KTsKICAgICAKQEAgLTQxMiwyNCArNDE1LDIwIEBAIHNpemVfdCBKU09iamVjdDo6ZXN0aW1hdGVk
U2l6ZShKU0NlbGwqIGMKICAgICByZXR1cm4gQmFzZTo6ZXN0aW1hdGVkU2l6ZShjZWxsLCB2bSkg
KyBidXR0ZXJmbHlPdXRPZkxpbmVTaXplOwogfQogCi12b2lkIEpTT2JqZWN0Ojp2aXNpdENoaWxk
cmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBWaXNpdG9yPgordm9pZCBKU09iamVjdDo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxs
LCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0
PEpTT2JqZWN0Kj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2Jq
ZWN0LCBpbmZvKCkpOwotI2lmIEFTU0VSVF9FTkFCTEVECi0gICAgYm9vbCB3YXNDaGVja2luZ0Zv
ckRlZmF1bHRNYXJrVmlvbGF0aW9uID0gdmlzaXRvci5tX2lzQ2hlY2tpbmdGb3JEZWZhdWx0TWFy
a1Zpb2xhdGlvbjsKLSAgICB2aXNpdG9yLm1faXNDaGVja2luZ0ZvckRlZmF1bHRNYXJrVmlvbGF0
aW9uID0gZmFsc2U7Ci0jZW5kaWYKLSAgICAKKyAgICB0eXBlbmFtZSBWaXNpdG9yOjpEZWZhdWx0
TWFya2luZ1Zpb2xhdGlvbkFzc2VydGlvblNjb3BlIGFzc2VydGlvblNjb3BlKHZpc2l0b3IpOwor
CiAgICAgSlNDZWxsOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwotICAgIAor
CiAgICAgdGhpc09iamVjdC0+dmlzaXRCdXR0ZXJmbHkodmlzaXRvcik7Ci0gICAgCi0jaWYgQVNT
RVJUX0VOQUJMRUQKLSAgICB2aXNpdG9yLm1faXNDaGVja2luZ0ZvckRlZmF1bHRNYXJrVmlvbGF0
aW9uID0gd2FzQ2hlY2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlvbjsKLSNlbmRpZgogfQogCitE
RUZJTkVfRVhQT1JUX1ZJU0lUX0NISUxEUkVOKEpTT2JqZWN0KTsKKwogdm9pZCBKU09iamVjdDo6
YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQogewogICAg
IEpTT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTT2JqZWN0Kj4oY2VsbCk7CkBAIC00Njgs
MTQgKzQ2NywxMiBAQCB2b2lkIEpTT2JqZWN0OjphbmFseXplSGVhcChKU0NlbGwqIGNlbGwsCiAg
ICAgfQogfQogCi12b2lkIEpTRmluYWxPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxs
LCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lk
IEpTRmluYWxPYmplY3Q6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYg
dmlzaXRvcikKIHsKICAgICBKU0ZpbmFsT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTRmlu
YWxPYmplY3QqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmpl
Y3QsIGluZm8oKSk7Ci0jaWYgQVNTRVJUX0VOQUJMRUQKLSAgICBib29sIHdhc0NoZWNraW5nRm9y
RGVmYXVsdE1hcmtWaW9sYXRpb24gPSB2aXNpdG9yLm1faXNDaGVja2luZ0ZvckRlZmF1bHRNYXJr
VmlvbGF0aW9uOwotICAgIHZpc2l0b3IubV9pc0NoZWNraW5nRm9yRGVmYXVsdE1hcmtWaW9sYXRp
b24gPSBmYWxzZTsKLSNlbmRpZgorICAgIHR5cGVuYW1lIFZpc2l0b3I6OkRlZmF1bHRNYXJraW5n
VmlvbGF0aW9uQXNzZXJ0aW9uU2NvcGUgYXNzZXJ0aW9uU2NvcGUodmlzaXRvcik7CiAgICAgCiAg
ICAgSlNDZWxsOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwogICAgIApAQCAt
NDgzLDEyICs0ODAsMTAgQEAgdm9pZCBKU0ZpbmFsT2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2Vs
bAogICAgICAgICBpZiAodW5zaWduZWQgc3RvcmFnZVNpemUgPSBzdHJ1Y3R1cmUtPmlubGluZVNp
emUoKSkKICAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kVmFsdWVzSGlkZGVuKHRoaXNPYmplY3Qt
PmlubGluZVN0b3JhZ2UoKSwgc3RvcmFnZVNpemUpOwogICAgIH0KLSAgICAKLSNpZiBBU1NFUlRf
RU5BQkxFRAotICAgIHZpc2l0b3IubV9pc0NoZWNraW5nRm9yRGVmYXVsdE1hcmtWaW9sYXRpb24g
PSB3YXNDaGVja2luZ0ZvckRlZmF1bHRNYXJrVmlvbGF0aW9uOwotI2VuZGlmCiB9CiAKK0RFRklO
RV9FWFBPUlRfVklTSVRfQ0hJTERSRU4oSlNGaW5hbE9iamVjdCk7CisKIFN0cmluZyBKU09iamVj
dDo6Y2xhc3NOYW1lKGNvbnN0IEpTT2JqZWN0KiBvYmplY3QsIFZNJiB2bSkKIHsKICAgICBjb25z
dCBDbGFzc0luZm8qIGluZm8gPSBvYmplY3QtPmNsYXNzSW5mbyh2bSk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsNyArMSw3IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAxIEhhcnJpIFBvcnRl
biAocG9ydGVuQGtkZS5vcmcpCiAgKiAgQ29weXJpZ2h0IChDKSAyMDAxIFBldGVyIEtlbGx5IChw
bWtAcG9zdC5jb20pCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMTkgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwMy0yMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0xMDgsOCArMTA4
LDkgQEAgY2xhc3MgSlNPYmplY3QgOiBwdWJsaWMgSlNDZWxsIHsKIHB1YmxpYzoKICAgICB1c2lu
ZyBCYXNlID0gSlNDZWxsOwogCisgICAgREVDTEFSRV9FWFBPUlRfVklTSVRfQ0hJTERSRU47CisK
ICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgc2l6ZV90IGVzdGltYXRlZFNpemUoSlNDZWxs
KiwgVk0mKTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVu
KEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZv
aWQgYW5hbHl6ZUhlYXAoSlNDZWxsKiwgSGVhcEFuYWx5emVyJik7CiAKICAgICBKU19FWFBPUlRf
UFJJVkFURSBzdGF0aWMgU3RyaW5nIGNsYXNzTmFtZShjb25zdCBKU09iamVjdCosIFZNJik7CkBA
IC05ODIsMTEgKzk4MywxMSBAQCBwcm90ZWN0ZWQ6CiAgICAgSlNPYmplY3QoVk0mLCBTdHJ1Y3R1
cmUqLCBCdXR0ZXJmbHkqID0gbnVsbHB0cik7CiAgICAgCiAgICAgLy8gVmlzaXRzIHRoZSBidXR0
ZXJmbHkgdW5sZXNzIHRoZXJlIGlzIGEgcmFjZS4gUmV0dXJucyB0aGUgc3RydWN0dXJlIGlmIHRo
ZXJlIHdhcyBubyByYWNlLgotICAgIFN0cnVjdHVyZSogdmlzaXRCdXR0ZXJmbHkoU2xvdFZpc2l0
b3ImKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiBTdHJ1Y3R1cmUqIHZpc2l0QnV0
dGVyZmx5KFZpc2l0b3ImKTsKICAgICAKLSAgICBTdHJ1Y3R1cmUqIHZpc2l0QnV0dGVyZmx5SW1w
bChTbG90VmlzaXRvciYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IFN0cnVjdHVy
ZSogdmlzaXRCdXR0ZXJmbHlJbXBsKFZpc2l0b3ImKTsKICAgICAKLSAgICB2b2lkIG1hcmtBdXhp
bGlhcnlBbmRWaXNpdE91dE9mTGluZVByb3BlcnRpZXMoU2xvdFZpc2l0b3ImLCBCdXR0ZXJmbHkq
LCBTdHJ1Y3R1cmUqLCBQcm9wZXJ0eU9mZnNldCBtYXhPZmZzZXQpOworICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFZpc2l0b3I+IHZvaWQgbWFya0F1eGlsaWFyeUFuZFZpc2l0T3V0T2ZMaW5lUHJvcGVy
dGllcyhWaXNpdG9yJiwgQnV0dGVyZmx5KiwgU3RydWN0dXJlKiwgUHJvcGVydHlPZmZzZXQgbWF4
T2Zmc2V0KTsKIAogICAgIC8vIENhbGwgdGhpcyBpZiB5b3Uga25vdyB0aGF0IHRoZSBvYmplY3Qg
aXMgaW4gYSBtb2RlIHdoZXJlIGl0IGhhcyBhcnJheQogICAgIC8vIHN0b3JhZ2UuIFRoaXMgd2ls
bCBhc3NlcnQgb3RoZXJ3aXNlLgpAQCAtMTE3NCw4ICsxMTc1LDYgQEAgcHJvdGVjdGVkOgogICAg
IH0KIH07CiAKLWNsYXNzIEpTRmluYWxPYmplY3Q7Ci0KIC8vIEpTRmluYWxPYmplY3QgaXMgYSB0
eXBlIG9mIEpTT2JqZWN0IHRoYXQgY29udGFpbnMgc3VmZmljaWVudCBpbnRlcm5hbAogLy8gc3Rv
cmFnZSB0byBmdWxseSBtYWtlIHVzZSBvZiB0aGUgY29sbGVjdG9yIGNlbGwgY29udGFpbmluZyBp
dC4KIGNsYXNzIEpTRmluYWxPYmplY3QgZmluYWwgOiBwdWJsaWMgSlNPYmplY3QgewpAQCAtMTIx
NCwxNSArMTIxMywxMyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0
ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIHR5cGVJbmZvKCksIGluZm8oKSwgZGVmYXVs
dEluZGV4aW5nVHlwZSwgaW5saW5lQ2FwYWNpdHkpOwogICAgIH0KIAotICAgIEpTX0VYUE9SVF9Q
UklWQVRFIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsK
KyAgICBERUNMQVJFX0VYUE9SVF9WSVNJVF9DSElMRFJFTjsKIAogICAgIERFQ0xBUkVfRVhQT1JU
X0lORk87CiAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3Rv
cjsKIAotICAgIHZvaWQgdmlzaXRDaGlsZHJlbkNvbW1vbihTbG90VmlzaXRvciYpOwotCiAgICAg
ZXhwbGljaXQgSlNGaW5hbE9iamVjdChWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBCdXR0
ZXJmbHkqIGJ1dHRlcmZseSkKICAgICAgICAgOiBKU09iamVjdCh2bSwgc3RydWN0dXJlLCBidXR0
ZXJmbHkpCiAgICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9t
aXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1By
b21pc2UuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1Byb21pc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjcsMTMgKzY3LDE2IEBAIHZv
aWQgSlNQcm9taXNlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCiAgICAgICAgIEJhc2U6OmludGVy
bmFsRmllbGQoaW5kZXgpLnNldCh2bSwgdGhpcywgdmFsdWVzW2luZGV4XSk7CiB9CiAKLXZvaWQg
SlNQcm9taXNlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0
b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1Byb21pc2U6OnZpc2l0Q2hp
bGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBhdXRvKiB0
aGlzT2JqZWN0ID0ganNDYXN0PEpTUHJvbWlzZSo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpF
Q1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKICAgICBCYXNlOjp2aXNpdENoaWxkcmVu
KHRoaXNPYmplY3QsIHZpc2l0b3IpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNQcm9t
aXNlKTsKKwogYXV0byBKU1Byb21pc2U6OnN0YXR1cyhWTSYpIGNvbnN0IC0+IFN0YXR1cwogewog
ICAgIEpTVmFsdWUgdmFsdWUgPSBpbnRlcm5hbEZpZWxkKEZpZWxkOjpGbGFncykuZ2V0KCk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb21pc2UuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb21pc2UuaAkocmV2aXNpb24g
MjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9taXNlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtOTYsNyArOTYsNyBAQCBwdWJsaWM6CiAgICAgfTsKICAgICBzdGF0aWMgRGVm
ZXJyZWREYXRhIGNyZWF0ZURlZmVycmVkRGF0YShKU0dsb2JhbE9iamVjdCosIEpTUHJvbWlzZUNv
bnN0cnVjdG9yKik7CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNs
b3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogcHJvdGVjdGVkOgog
ICAgIEpTUHJvbWlzZShWTSYsIFN0cnVjdHVyZSopOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuY3Bw
CShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1By
b3BlcnR5TmFtZUVudW1lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNzAsNyArNzAsOCBA
QCB2b2lkIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6ZmluaXNoQ3JlCiAgICAgfQogfQogCi12
b2lkIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGws
IFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQg
SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGws
IFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKiB0aGlz
T2JqZWN0ID0ganNDYXN0PEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcio+KGNlbGwpOwogICAgIEFT
U0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTg3LDYgKzg4
LDggQEAgdm9pZCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OnZpc2l0Q2hpbAogICAgIH0KIH0K
IAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcik7CisKIC8v
IEZJWE1FOiBBc3NlcnQgdGhhdCBwcm9wZXJ0aWVzIHJldHVybmVkIGJ5IGdldE93blByb3BlcnR5
TmFtZXMoKSBhcmUgcmVwb3J0ZWQgZW51bWVyYWJsZSBieSBnZXRPd25Qcm9wZXJ0eVNsb3QoKS4K
IC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTk5MjYKIHZvaWQg
Z2V0RW51bWVyYWJsZVByb3BlcnR5TmFtZXMoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
SlNPYmplY3QqIGJhc2UsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCB1aW50MzJf
dCYgaW5kZXhlZExlbmd0aCwgdWludDMyX3QmIHN0cnVjdHVyZVByb3BlcnR5Q291bnQpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3Iu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3BlcnR5
TmFtZUVudW1lcmF0b3IuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTkgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC04NCw3ICs4NCw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihK
U1Byb3BlcnR5TmFtZUVudW1lcmF0b3IsIG1fcHJvcGVydHlOYW1lcyk7CiAgICAgfQogCi0gICAg
c3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERF
Q0xBUkVfVklTSVRfQ0hJTERSRU47CiAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIExMSW50
T2Zmc2V0c0V4dHJhY3RvcjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
UHJveHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
UHJveHkuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1Byb3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTEtMjAxMiwgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzUsNyArMzUs
OCBAQCBTVEFUSUNfQVNTRVJUX0lTX1RSSVZJQUxMWV9ERVNUUlVDVElCTEUoCiAKIGNvbnN0IENs
YXNzSW5mbyBKU1Byb3h5OjpzX2luZm8gPSB7ICJKU1Byb3h5IiwgJkJhc2U6OnNfaW5mbywgbnVs
bHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1Byb3h5KSB9OwogCi12b2lkIEpT
UHJveHk6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikK
K3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTUHJveHk6OnZpc2l0Q2hpbGRyZW5J
bXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU1Byb3h5KiB0aGlz
T2JqZWN0ID0ganNDYXN0PEpTUHJveHkqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lO
SEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC00Myw2ICs0NCw4IEBAIHZvaWQgSlNQcm94
eTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2Jq
ZWN0LT5tX3RhcmdldCk7CiB9CiAKK0RFRklORV9FWFBPUlRfVklTSVRfQ0hJTERSRU4oSlNQcm94
eSk7CisKIHZvaWQgSlNQcm94eTo6c2V0VGFyZ2V0KFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCkKIHsKICAgICBtX3RhcmdldC5zZXQodm0sIHRoaXMsIGdsb2JhbE9iamVjdCk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3h5LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm94eS5oCShyZXZpc2lvbiAy
NzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3h5LmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLTIwMjAg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLTIw
MjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC04NSw3ICs4NSw3IEBAIHByb3RlY3RlZDoKICAgICAgICAgbV90YXJnZXQu
c2V0KHZtLCB0aGlzLCB0YXJnZXQpOwogICAgIH0KIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0
YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNM
QVJFX0VYUE9SVF9WSVNJVF9DSElMRFJFTjsKIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRp
YyBTdHJpbmcgY2xhc3NOYW1lKGNvbnN0IEpTT2JqZWN0KiwgVk0mKTsKICAgICBKU19FWFBPUlRf
UFJJVkFURSBzdGF0aWMgU3RyaW5nIHRvU3RyaW5nTmFtZShjb25zdCBKU09iamVjdCosIEpTR2xv
YmFsT2JqZWN0Kik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Njb3Bl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Njb3Bl
LmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNTY29wZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDEyLTIwMjAgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDEyLTIwMjEgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zOSw3ICszOSw4IEBAIFNUQVRJQ19BU1NF
UlRfSVNfVFJJVklBTExZX0RFU1RSVUNUSUJMRSgKIAogY29uc3QgQ2xhc3NJbmZvIEpTU2NvcGU6
OnNfaW5mbyA9IHsgIlNjb3BlIiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JF
QVRFX01FVEhPRF9UQUJMRShKU1Njb3BlKSB9OwogCi12b2lkIEpTU2NvcGU6OnZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1l
IFZpc2l0b3I+Cit2b2lkIEpTU2NvcGU6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwg
VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU1Njb3BlKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpT
U2NvcGUqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3Qs
IGluZm8oKSk7CkBAIC00Nyw2ICs0OCw4IEBAIHZvaWQgSlNTY29wZTo6dmlzaXRDaGlsZHJlbihK
U0NlbGwqIGNlbGwKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX25leHQpOwogfQog
CitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNTY29wZSk7CisKIC8vIFJldHVybnMgdHJ1ZSBpZiB3
ZSBmb3VuZCBlbm91Z2ggaW5mb3JtYXRpb24gdG8gdGVybWluYXRlIG9wdGltaXphdGlvbi4KIHN0
YXRpYyBpbmxpbmUgYm9vbCBhYnN0cmFjdEFjY2VzcyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBKU1Njb3BlKiBzY29wZSwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIEdldE9yUHV0IGdl
dE9yUHV0LCBzaXplX3QgZGVwdGgsIGJvb2wmIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCBSZXNv
bHZlT3AmIG9wLCBJbml0aWFsaXphdGlvbk1vZGUgaW5pdGlhbGl6YXRpb25Nb2RlKQogewpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTY29wZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2NvcGUuaAkocmV2aXNpb24gMjcyODMw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTY29wZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE5IEFwcGxl
IEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDIxIEFw
cGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtNjQsNyArNjQsNyBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgdm9pZCBjb2xsZWN0
Q2xvc3VyZVZhcmlhYmxlc1VuZGVyVERaKEpTU2NvcGUqLCBURFpFbnZpcm9ubWVudCYgcmVzdWx0
LCBQcml2YXRlTmFtZUVudmlyb25tZW50Jik7CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxk
cmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsK
IAogICAgIGJvb2wgaXNWYXJTY29wZSgpOwogICAgIGJvb2wgaXNMZXhpY2FsU2NvcGUoKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVPYmpl
Y3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2Vn
bWVudGVkVmFyaWFibGVPYmplY3QuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNjIsNyArNjIsOCBAQCBTY29wZU9mZnNldCBKU1NlZ21lbnRlZFZhcmlhYmxl
T2JqZWN0OjphCiAgICAgcmV0dXJuIFNjb3BlT2Zmc2V0KG9sZFNpemUpOwogfQogCi12b2lkIEpT
U2VnbWVudGVkVmFyaWFibGVPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90
VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTU2Vn
bWVudGVkVmFyaWFibGVPYmplY3Q6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlz
aXRvciYgdmlzaXRvcikKIHsKICAgICBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0KiB0aGlzT2Jq
ZWN0ID0ganNDYXN0PEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3QqPihjZWxsKTsKICAgICBBU1NF
UlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC03NSw2ICs3Niw4
IEBAIHZvaWQgSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdDo6dmlzaXRDaGkKICAgICAgICAgdmlz
aXRvci5hcHBlbmRIaWRkZW4odGhpc09iamVjdC0+bV92YXJpYWJsZXNbaV0pOwogfQogCitERUZJ
TkVfRVhQT1JUX1ZJU0lUX0NISUxEUkVOKEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3QpOworCiB2
b2lkIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3Q6OmFuYWx5emVIZWFwKEpTQ2VsbCogY2VsbCwg
SGVhcEFuYWx5emVyJiBhbmFseXplcikKIHsKICAgICBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0
KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3QqPihjZWxsKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVP
YmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Nl
Z21lbnRlZFZhcmlhYmxlT2JqZWN0LmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVPYmplY3QuaAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxOSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTg2LDcgKzg2LDcgQEAgcHVibGljOgogICAgIC8vIHRoZSBpbmRleCBvZiB0aGUg
Zmlyc3Qgb25lIGFkZGVkLgogICAgIEpTX0VYUE9SVF9QUklWQVRFIFNjb3BlT2Zmc2V0IGFkZFZh
cmlhYmxlcyh1bnNpZ25lZCBudW1iZXJPZlZhcmlhYmxlc1RvQWRkLCBKU1ZhbHVlKTsKICAgICAK
LSAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCos
IFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9FWFBPUlRfVklTSVRfQ0hJTERSRU47CiAgICAg
SlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgYW5hbHl6ZUhlYXAoSlNDZWxsKiwgSGVhcEFu
YWx5emVyJik7CiAgICAgCiBwcm90ZWN0ZWQ6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU1NldEl0ZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU1NldEl0ZXJhdG9yLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZXRJdGVyYXRvci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTcgQXBwbGUs
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIxIEFw
cGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTU3LDEzICs1NywxNiBAQCB2b2lkIEpTU2V0SXRlcmF0b3I6OmZpbmlzaENyZWF0
aW9uKFZNJiB2CiAgICAgICAgIEJhc2U6OmludGVybmFsRmllbGQoaW5kZXgpLnNldCh2bSwgdGhp
cywgdmFsdWVzW2luZGV4XSk7CiB9CiAKLXZvaWQgSlNTZXRJdGVyYXRvcjo6dmlzaXRDaGlsZHJl
bihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUg
VmlzaXRvcj4KK3ZvaWQgSlNTZXRJdGVyYXRvcjo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBj
ZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8
SlNTZXRJdGVyYXRvcio+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhp
c09iamVjdCwgaW5mbygpKTsKICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZp
c2l0b3IpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNTZXRJdGVyYXRvcik7CisKIEpT
VmFsdWUgSlNTZXRJdGVyYXRvcjo6Y3JlYXRlUGFpcihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBKU1ZhbHVlIGtleSwgSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBNYXJrZWRBcmd1bWVudEJ1
ZmZlciBhcmdzOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZXRJdGVy
YXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2V0
SXRlcmF0b3IuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNTZXRJdGVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNiBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjEgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTMwLDcgKzEzMCw3
IEBAIHByaXZhdGU6CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBmaW5pc2hDcmVhdGlvbihW
TSYsIEpTU2V0KiwgSXRlcmF0aW9uS2luZCk7CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYp
OwogICAgIEpTX0VYUE9SVF9QUklWQVRFIEpTVmFsdWUgY3JlYXRlUGFpcihKU0dsb2JhbE9iamVj
dCosIEpTVmFsdWUsIEpTVmFsdWUpOwotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlND
ZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogfTsKIFNU
QVRJQ19BU1NFUlRfSVNfVFJJVklBTExZX0RFU1RSVUNUSUJMRShKU1NldEl0ZXJhdG9yKTsKIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmNwcAkocmV2aXNp
b24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5
OTktMjAwMiBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQogICogIENvcHlyaWdodCAoQykg
MjAwMSBQZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQotICogIENvcHlyaWdodCAoQykgMjAwNC0y
MDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIw
MDQtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAq
ICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYwpAQCAtMTA1LDcgKzEwNSw4IEBAIHNpemVfdCBKU1N0cmluZzo6ZXN0aW1hdGVkU2l6ZShK
U0NlbGwqIGMKICAgICByZXR1cm4gQmFzZTo6ZXN0aW1hdGVkU2l6ZShjZWxsLCB2bSkgKyBiaXR3
aXNlX2Nhc3Q8U3RyaW5nSW1wbCo+KHBvaW50ZXIpLT5jb3N0RHVyaW5nR0MoKTsKIH0KIAotdm9p
ZCBKU1N0cmluZzo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNp
dG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNTdHJpbmc6OnZpc2l0Q2hp
bGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU1N0cmlu
ZyogdGhpc09iamVjdCA9IGFzU3RyaW5nKGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5I
RVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTE0Myw2ICsxNDQsOCBAQCB2b2lkIEpTU3Ry
aW5nOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsCiAgICAgICAgIHZpc2l0b3IucmVwb3J0RXh0
cmFNZW1vcnlWaXNpdGVkKGltcGwtPmNvc3REdXJpbmdHQygpKTsKIH0KIAorREVGSU5FX1ZJU0lU
X0NISUxEUkVOKEpTU3RyaW5nKTsKKwogc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBtYXhMZW5n
dGhGb3JPblN0YWNrUmVzb2x2ZSA9IDIwNDg7CiAKIHZvaWQgSlNSb3BlU3RyaW5nOjpyZXNvbHZl
Um9wZUludGVybmFsOChMQ2hhciogYnVmZmVyKSBjb25zdApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU1N0cmluZy5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEs
NyBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMSBIYXJyaSBQb3J0ZW4gKHBvcnRl
bkBrZGUub3JnKQogICogIENvcHlyaWdodCAoQykgMjAwMSBQZXRlciBLZWxseSAocG1rQHBvc3Qu
Y29tKQotICogIENvcHlyaWdodCAoQykgMjAwMy0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjE3LDcgKzIxNyw3IEBAIHB1
YmxpYzoKIAogICAgIHN0YXRpYyB2b2lkIGR1bXBUb1N0cmVhbShjb25zdCBKU0NlbGwqLCBQcmlu
dFN0cmVhbSYpOwogICAgIHN0YXRpYyBzaXplX3QgZXN0aW1hdGVkU2l6ZShKU0NlbGwqLCBWTSYp
OwotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsK
KyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgQUxXQVlTX0lOTElORSBib29sIGlz
Um9wZSgpIGNvbnN0CiAgICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNTdHJpbmdJdGVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNTdHJpbmdJdGVyYXRvci5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nSXRlcmF0b3IuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxNSBZdXN1a2UgU3V6
dWtpIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+LgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtNTEsMTEgKzUxLDE0IEBAIEpTU3RyaW5nSXRlcmF0b3IqIEpTU3RyaW5nSXRlcmF0
b3I6OmNsb24KICAgICByZXR1cm4gY2xvbmU7CiB9CiAKLXZvaWQgSlNTdHJpbmdJdGVyYXRvcjo6
dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxh
dGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNTdHJpbmdJdGVyYXRvcjo6dmlzaXRDaGlsZHJl
bkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGF1dG8qIHRoaXNP
YmplY3QgPSBqc0Nhc3Q8SlNTdHJpbmdJdGVyYXRvcio+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19P
QkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKICAgICBCYXNlOjp2aXNpdENoaWxk
cmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNT
dHJpbmdJdGVyYXRvcik7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmdJdGVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nSXRlcmF0b3IuaAkocmV2aXNpb24gMjcy
ODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmdJdGVyYXRvci5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAx
NSBZdXN1a2UgU3V6dWtpIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+LgorICogQ29weXJpZ2h0IChD
KSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtNzksNyArODAsNyBAQCBwdWJsaWM6CiAgICAgSlNWYWx1ZSBpbmRl
eCgpIGNvbnN0IHsgcmV0dXJuIGludGVybmFsRmllbGQoRmllbGQ6OkluZGV4KS5nZXQoKTsgfQog
ICAgIEpTU3RyaW5nSXRlcmF0b3IqIGNsb25lKEpTR2xvYmFsT2JqZWN0Kik7CiAKLSAgICBzdGF0
aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFS
RV9WSVNJVF9DSElMRFJFTjsKIAogcHJpdmF0ZToKICAgICBKU1N0cmluZ0l0ZXJhdG9yKFZNJiB2
bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0LmNwcAkocmV2aXNpb24gMjcyODMw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVjdC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDEyLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEyLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0zNiw3ICszNiw4IEBAIG5hbWVzcGFjZSBKU0MgewogCiBj
b25zdCBDbGFzc0luZm8gSlNTeW1ib2xUYWJsZU9iamVjdDo6c19pbmZvID0geyAiU3ltYm9sVGFi
bGVPYmplY3QiLCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9E
X1RBQkxFKEpTU3ltYm9sVGFibGVPYmplY3QpIH07CiAKLXZvaWQgSlNTeW1ib2xUYWJsZU9iamVj
dDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVt
cGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNTeW1ib2xUYWJsZU9iamVjdDo6dmlzaXRD
aGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTU3lt
Ym9sVGFibGVPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNTeW1ib2xUYWJsZU9iamVjdCo+
KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygp
KTsKQEAgLTQ0LDYgKzQ1LDggQEAgdm9pZCBKU1N5bWJvbFRhYmxlT2JqZWN0Ojp2aXNpdENoaWxk
cmVuKAogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fc3ltYm9sVGFibGUpOwogfQog
CitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNTeW1ib2xUYWJsZU9iamVjdCk7CisKIGJvb2wgSlNT
eW1ib2xUYWJsZU9iamVjdDo6ZGVsZXRlUHJvcGVydHkoSlNDZWxsKiBjZWxsLCBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBEZWxldGVQcm9w
ZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgSlNTeW1ib2xUYWJsZU9iamVjdCogdGhpc09iamVjdCA9
IGpzQ2FzdDxKU1N5bWJvbFRhYmxlT2JqZWN0Kj4oY2VsbCk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVjdC5oCShyZXZpc2lv
biAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N5bWJvbFRhYmxl
T2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDEyLTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEyLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03MCw3ICs3MCw3IEBAIHByb3RlY3RlZDoKICAg
ICAgICAgbV9zeW1ib2xUYWJsZS5zZXQodm0sIHRoaXMsIHN5bWJvbFRhYmxlKTsKICAgICB9CiAg
ICAgCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYp
OworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAgICAgCiBwcml2YXRlOgogICAgIFdyaXRl
QmFycmllcjxTeW1ib2xUYWJsZT4gbV9zeW1ib2xUYWJsZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTV2Vha09iamVjdFJlZi5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNXZWFrT2JqZWN0UmVmLmNwcAkocmV2aXNpb24gMjcy
ODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNXZWFrT2JqZWN0UmVmLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTkgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
OS0yMDIxIEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTM5LDcgKzM5LDggQEAgdm9pZCBKU1dlYWtPYmplY3RSZWY6OmZp
bmlzaENyZWF0aW9uKFZNJgogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKIH0KIAotdm9p
ZCBKU1dlYWtPYmplY3RSZWY6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRv
ciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTV2Vha09iamVj
dFJlZjo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQog
ewogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNXZWFrT2JqZWN0UmVmKj4oY2VsbCk7
CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAt
NTEsNiArNTIsOCBAQCB2b2lkIEpTV2Vha09iamVjdFJlZjo6dmlzaXRDaGlsZHJlbihKU0NlCiAg
ICAgfQogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNXZWFrT2JqZWN0UmVmKTsKKwogdm9p
ZCBKU1dlYWtPYmplY3RSZWY6OmZpbmFsaXplVW5jb25kaXRpb25hbGx5KFZNJiB2bSkKIHsKICAg
ICBpZiAobV92YWx1ZSAmJiAhdm0uaGVhcC5pc01hcmtlZChtX3ZhbHVlLmdldCgpKSkKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTV2Vha09iamVjdFJlZi5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTV2Vha09iamVjdFJlZi5oCShy
ZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1dlYWtP
YmplY3RSZWYuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTkgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxOS0yMDIxIEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY1LDcgKzY1LDcgQEAgcHVibGljOgogICAgIH0K
IAogICAgIHZvaWQgZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoVk0mKTsKLSAgICBzdGF0aWMgdm9p
ZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJ
VF9DSElMRFJFTjsKIAogcHJpdmF0ZToKICAgICBKU1dlYWtPYmplY3RSZWYoVk0mIHZtLCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
V2l0aFNjb3BlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU1dpdGhTY29wZS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTV2l0aFNjb3BlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTYgQXBwbGUgSW5jLiBBbGwgUmlnaHRz
IFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjEgQXBwbGUgSW5jLiBBbGwgUmln
aHRzIFJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00MSw3ICs0
MSw4IEBAIEpTV2l0aFNjb3BlKiBKU1dpdGhTY29wZTo6Y3JlYXRlKAogICAgIHJldHVybiB3aXRo
U2NvcGU7CiB9CiAKLXZvaWQgSlNXaXRoU2NvcGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxs
LCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lk
IEpTV2l0aFNjb3BlOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZp
c2l0b3IpCiB7CiAgICAgSlNXaXRoU2NvcGUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNXaXRoU2Nv
cGUqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGlu
Zm8oKSk7CkBAIC00OSw2ICs1MCw4IEBAIHZvaWQgSlNXaXRoU2NvcGU6OnZpc2l0Q2hpbGRyZW4o
SlNDZWxsKiAKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX29iamVjdCk7CiB9CiAK
K0RFRklORV9WSVNJVF9DSElMRFJFTihKU1dpdGhTY29wZSk7CisKIFN0cnVjdHVyZSogSlNXaXRo
U2NvcGU6OmNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEpTVmFsdWUgcHJvdG8pCiB7CiAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBn
bG9iYWxPYmplY3QsIHByb3RvLCBUeXBlSW5mbyhXaXRoU2NvcGVUeXBlLCBTdHJ1Y3R1cmVGbGFn
cyksIGluZm8oKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1dpdGhT
Y29wZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTV2l0
aFNjb3BlLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTV2l0aFNjb3BlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDEyLCAyMDE2IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDIxIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDMsNyArNDMsNyBAQCBwdWJs
aWM6CiAKICAgICBKU09iamVjdCogb2JqZWN0KCkgeyByZXR1cm4gbV9vYmplY3QuZ2V0KCk7IH0K
IAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsK
KyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgc3RhdGljIFN0cnVjdHVyZSogY3Jl
YXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlIHByb3RvKTsKIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNXcmFwcGVyT2JqZWN0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1dyYXBwZXJPYmplY3Qu
Y3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U1dyYXBwZXJPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAq
ICBDb3B5cmlnaHQgKEMpIDIwMDYgTWFrcyBPcmxvdmljaAotICogIENvcHlyaWdodCAoQykgMjAw
NiwgMjAwOSwgMjAxMiBBcHBsZSwgSW5jLgorICogIENvcHlyaWdodCAoQykgMjAwNi0yMDIxIEFw
cGxlLCBJbmMuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjksMTEgKzI5LDE0IEBAIG5hbWVz
cGFjZSBKU0MgewogCiBTVEFUSUNfQVNTRVJUX0lTX1RSSVZJQUxMWV9ERVNUUlVDVElCTEUoSlNX
cmFwcGVyT2JqZWN0KTsKIAotdm9pZCBKU1dyYXBwZXJPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlND
ZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0
b3I+Cit2b2lkIEpTV3JhcHBlck9iamVjdDo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxs
LCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNX
cmFwcGVyT2JqZWN0Kj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlz
T2JqZWN0LCBpbmZvKCkpOwogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlz
aXRvcik7CiB9CiAKK0RFRklORV9FWFBPUlRfVklTSVRfQ0hJTERSRU4oSlNXcmFwcGVyT2JqZWN0
KTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1dyYXBwZXJPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1dyYXBwZXJPYmplY3QuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNXcmFwcGVyT2JqZWN0LmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNiArMSw2IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMjAwNiBNYWtzIE9ybG92aWNo
Ci0gKiAgQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtNjQsNyArNjQs
NyBAQCBwdWJsaWM6CiBwcm90ZWN0ZWQ6CiAgICAgZXhwbGljaXQgSlNXcmFwcGVyT2JqZWN0KFZN
JiwgU3RydWN0dXJlKik7CiAKLSAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCB2aXNp
dENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9FWFBPUlRfVklT
SVRfQ0hJTERSRU47CiB9OwogCiBpbmxpbmUgSlNXcmFwcGVyT2JqZWN0OjpKU1dyYXBwZXJPYmpl
Y3QoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0xhenlDbGFzc1N0cnVjdHVyZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTGF6eUNsYXNzU3RydWN0dXJlLmNwcAkocmV2aXNpb24g
MjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTGF6eUNsYXNzU3RydWN0
dXJlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTYtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTcyLDEyICs3MiwxNiBAQCB2b2lkIExhenlDbGFz
c1N0cnVjdHVyZTo6SW5pdGlhbGl6ZXI6OnNlCiAgICAgY2xhc3NTdHJ1Y3R1cmUubV9jb25zdHJ1
Y3Rvci5zZXQodm0sIGdsb2JhbCwgY29uc3RydWN0b3IpOwogfQogCi12b2lkIExhenlDbGFzc1N0
cnVjdHVyZTo6dmlzaXQoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPgordm9pZCBMYXp5Q2xhc3NTdHJ1Y3R1cmU6OnZpc2l0KFZpc2l0b3ImIHZpc2l0b3Ip
CiB7CiAgICAgbV9zdHJ1Y3R1cmUudmlzaXQodmlzaXRvcik7CiAgICAgdmlzaXRvci5hcHBlbmQo
bV9jb25zdHJ1Y3Rvcik7CiB9CiAKK3RlbXBsYXRlIHZvaWQgTGF6eUNsYXNzU3RydWN0dXJlOjp2
aXNpdChBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIExhenlDbGFzc1N0cnVj
dHVyZTo6dmlzaXQoU2xvdFZpc2l0b3ImKTsKKwogdm9pZCBMYXp5Q2xhc3NTdHJ1Y3R1cmU6OmR1
bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKIHsKICAgICBvdXQucHJpbnQoIjxzdHJ1Y3R1cmUg
PSAiLCBtX3N0cnVjdHVyZSwgIiwgY29uc3RydWN0b3IgPSAiLCBSYXdQb2ludGVyKG1fY29uc3Ry
dWN0b3IuZ2V0KCkpLCAiPiIpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
TGF6eUNsYXNzU3RydWN0dXJlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvTGF6eUNsYXNzU3RydWN0dXJlLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0xhenlDbGFzc1N0cnVjdHVyZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTExNyw3ICsxMTcsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX2NvbnN0cnVjdG9y
LmdldCgpOwogICAgIH0KICAgICAKLSAgICB2b2lkIHZpc2l0KFNsb3RWaXNpdG9yJik7CisgICAg
dGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCB2aXNpdChWaXNpdG9yJik7CiAgICAgCiAg
ICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0xhenlQcm9wZXJ0eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0xhenlQcm9wZXJ0eS5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9MYXp5UHJvcGVydHkuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxOSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTEwMyw3ICsxMDMsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRNYXlCZU51bGwoVk0m
LCBjb25zdCBPd25lclR5cGUqIG93bmVyLCBFbGVtZW50VHlwZSopOwogICAgIHZvaWQgc2V0KFZN
JiwgY29uc3QgT3duZXJUeXBlKiBvd25lciwgRWxlbWVudFR5cGUqKTsKICAgICAKLSAgICB2b2lk
IHZpc2l0KFNsb3RWaXNpdG9yJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9p
ZCB2aXNpdChWaXNpdG9yJik7CiAgICAgCiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29u
c3Q7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9MYXp5UHJvcGVy
dHlJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
TGF6eVByb3BlcnR5SW5saW5lcy5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9MYXp5UHJvcGVydHlJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjYs
NyArNjYsOCBAQCB2b2lkIExhenlQcm9wZXJ0eTxPd25lclR5cGUsIEVsZW1lbnRUeXBlCiB9CiAK
IHRlbXBsYXRlPHR5cGVuYW1lIE93bmVyVHlwZSwgdHlwZW5hbWUgRWxlbWVudFR5cGU+Ci12b2lk
IExhenlQcm9wZXJ0eTxPd25lclR5cGUsIEVsZW1lbnRUeXBlPjo6dmlzaXQoU2xvdFZpc2l0b3Im
IHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBMYXp5UHJvcGVydHk8
T3duZXJUeXBlLCBFbGVtZW50VHlwZT46OnZpc2l0KFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAg
aWYgKG1fcG9pbnRlciAmJiAhKG1fcG9pbnRlciAmIGxhenlUYWcpKQogICAgICAgICB2aXNpdG9y
LmFwcGVuZFVuYmFycmllcmVkKGJpdHdpc2VfY2FzdDxFbGVtZW50VHlwZSo+KG1fcG9pbnRlcikp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTW9kdWxlUHJvZ3JhbUV4ZWN1
dGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01v
ZHVsZVByb2dyYW1FeGVjdXRhYmxlLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCwg
MjAxMywgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAwOS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNzksNyArNzksOCBAQCBhdXRvIE1vZHVsZVBy
b2dyYW1FeGVjdXRhYmxlOjplbnN1cmVUZW1wCiAgICAgcmV0dXJuIGVuc3VyZVRlbXBsYXRlT2Jq
ZWN0TWFwSW1wbChtX3RlbXBsYXRlT2JqZWN0TWFwKTsKIH0KIAotdm9pZCBNb2R1bGVQcm9ncmFt
RXhlY3V0YWJsZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNp
dG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgTW9kdWxlUHJvZ3JhbUV4ZWN1
dGFibGU6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikK
IHsKICAgICBNb2R1bGVQcm9ncmFtRXhlY3V0YWJsZSogdGhpc09iamVjdCA9IGpzQ2FzdDxNb2R1
bGVQcm9ncmFtRXhlY3V0YWJsZSo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJ
VFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTk0LDQgKzk1LDYgQEAgdm9pZCBNb2R1bGVQcm9n
cmFtRXhlY3V0YWJsZTo6dmlzaXRDaGlsZAogICAgIH0KIH0KIAorREVGSU5FX1ZJU0lUX0NISUxE
UkVOKE1vZHVsZVByb2dyYW1FeGVjdXRhYmxlKTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Nb2R1bGVQcm9ncmFtRXhlY3V0YWJsZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01vZHVsZVByb2dy
YW1FeGVjdXRhYmxlLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL01vZHVsZVByb2dyYW1FeGVjdXRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTkgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03
Nyw3ICs3Nyw3IEBAIHByaXZhdGU6CiAKICAgICBNb2R1bGVQcm9ncmFtRXhlY3V0YWJsZShKU0ds
b2JhbE9iamVjdCosIGNvbnN0IFNvdXJjZUNvZGUmKTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0
Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxE
UkVOOwogCiAgICAgV3JpdGVCYXJyaWVyPFVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jaz4g
bV91bmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2s7CiAgICAgV3JpdGVCYXJyaWVyPFN5bWJv
bFRhYmxlPiBtX21vZHVsZUVudmlyb25tZW50U3ltYm9sVGFibGU7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLTIwMjAgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC01NTgsNiArNTU4LDkgQEAgdm9pZCBPcHRpb25zOjpyZWNvbXB1dGVEZXBlbmRlbnRPcHRpb25z
KAogCiAgICAgaWYgKE9wdGlvbnM6OnVzZVByaXZhdGVTdGF0aWNDbGFzc0ZpZWxkcygpKQogICAg
ICAgICBPcHRpb25zOjp1c2VQcml2YXRlQ2xhc3NGaWVsZHMoKSA9IHRydWU7CisKKyAgICBpZiAo
T3B0aW9uczo6dmVyYm9zZVZlcmlmeUdDKCkpCisgICAgICAgIE9wdGlvbnM6OnZlcmlmeUdDKCkg
PSB0cnVlOwogfQogCiBpbmxpbmUgdm9pZCogT3B0aW9uczo6YWRkcmVzc09mT3B0aW9uKE9wdGlv
bnM6OklEIGlkKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xp
c3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25z
TGlzdC5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9PcHRpb25zTGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNjksNiArMzY5LDggQEAgSlNfRVhQ
T1JUX1BSSVZBVEUgYm9vbCBjYW5Vc2VKSVRDYWdlKCk7CiAgICAgdihCb29sLCBhbHdheXNHZW5l
cmF0ZVBDVG9Db2RlT3JpZ2luTWFwLCBmYWxzZSwgTm9ybWFsLCAiVGhpcyB3aWxsIG1ha2Ugc3Vy
ZSB3ZSBhbHdheXMgZ2VuZXJhdGUgYSBQQ1RvQ29kZU9yaWdpbk1hcCBmb3IgSklUZWQgY29kZS4i
KSBcCiAgICAgXAogICAgIHYoRG91YmxlLCByYW5kb21JbnRlZ3JpdHlBdWRpdFJhdGUsIDAuMDUs
IE5vcm1hbCwgIlByb2JhYmlsaXR5IG9mIHJhbmRvbSBpbnRlZ3JpdHkgYXVkaXRzIFswLjAgLSAx
LjBdIikgXAorICAgIHYoQm9vbCwgdmVyaWZ5R0MsIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpIFwK
KyAgICB2KEJvb2wsIHZlcmJvc2VWZXJpZnlHQywgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAog
ICAgIHYoQm9vbCwgdmVyaWZ5SGVhcCwgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYo
VW5zaWduZWQsIG51bWJlck9mR0NDeWNsZXNUb1JlY29yZEZvclZlcmlmaWNhdGlvbiwgMywgTm9y
bWFsLCBudWxscHRyKSBcCiAgICAgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvUHJvZ3JhbUV4ZWN1dGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1Byb2dyYW1FeGVjdXRhYmxlLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvZ3JhbUV4ZWN1dGFibGUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOS0yMDE5
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOS0y
MDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMjA4LDcgKzIwOCw4IEBAIGF1dG8gUHJvZ3JhbUV4ZWN1dGFibGU6OmVu
c3VyZVRlbXBsYXRlT2IKICAgICByZXR1cm4gZW5zdXJlVGVtcGxhdGVPYmplY3RNYXBJbXBsKG1f
dGVtcGxhdGVPYmplY3RNYXApOwogfQogCi12b2lkIFByb2dyYW1FeGVjdXRhYmxlOjp2aXNpdENo
aWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBl
bmFtZSBWaXNpdG9yPgordm9pZCBQcm9ncmFtRXhlY3V0YWJsZTo6dmlzaXRDaGlsZHJlbkltcGwo
SlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFByb2dyYW1FeGVjdXRhYmxl
KiB0aGlzT2JqZWN0ID0ganNDYXN0PFByb2dyYW1FeGVjdXRhYmxlKj4oY2VsbCk7CiAgICAgQVNT
RVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtMjIyLDQgKzIy
Myw2IEBAIHZvaWQgUHJvZ3JhbUV4ZWN1dGFibGU6OnZpc2l0Q2hpbGRyZW4oSlMKICAgICB9CiB9
CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihQcm9ncmFtRXhlY3V0YWJsZSk7CisKIH0gLy8gbmFt
ZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvZ3JhbUV4
ZWN1dGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Q
cm9ncmFtRXhlY3V0YWJsZS5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9Qcm9ncmFtRXhlY3V0YWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOS0yMDE5IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODEs
NyArODEsNyBAQCBwcml2YXRlOgogCiAgICAgUHJvZ3JhbUV4ZWN1dGFibGUoSlNHbG9iYWxPYmpl
Y3QqLCBjb25zdCBTb3VyY2VDb2RlJik7CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVu
KEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAog
ICAgIFdyaXRlQmFycmllcjxVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2s+IG1fdW5saW5rZWRQcm9n
cmFtQ29kZUJsb2NrOwogICAgIFdyaXRlQmFycmllcjxFeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdl
PiBtX3Byb2dyYW1Db2RlQmxvY2s7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9Qcm9wZXJ0eU1hcEhhc2hUYWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1Byb3BlcnR5TWFwSGFzaFRhYmxlLmgJKHJldmlzaW9uIDI3MjgzMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5TWFwSGFzaFRhYmxlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogIENvcHlyaWdodCAoQykgMjAwNC0y
MDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIw
MDQtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAq
ICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYwpAQCAtMTMzLDcgKzEzMyw3IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBuZWVkc0Rlc3RydWN0aW9uID0gdHJ1ZTsKICAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpT
Q2VsbCopOwotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0
b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgREVDTEFSRV9FWFBPUlRf
SU5GTzsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlUYWJs
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVy
dHlUYWJsZS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1Byb3BlcnR5VGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTExOCw3ICsxMTgs
OCBAQCB2b2lkIFByb3BlcnR5VGFibGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2CiAgICAgdm0uaGVh
cC5yZXBvcnRFeHRyYU1lbW9yeUFsbG9jYXRlZChkYXRhU2l6ZSgpKTsKIH0KIAotdm9pZCBQcm9w
ZXJ0eVRhYmxlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0
b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBQcm9wZXJ0eVRhYmxlOjp2aXNp
dENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0
byogdGhpc09iamVjdCA9IGpzQ2FzdDxQcm9wZXJ0eVRhYmxlKj4oY2VsbCk7CiAgICAgQVNTRVJU
X0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtMTI2LDYgKzEyNyw4
IEBAIHZvaWQgUHJvcGVydHlUYWJsZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwKICAgICB2aXNpdG9y
LnJlcG9ydEV4dHJhTWVtb3J5VmlzaXRlZCh0aGlzT2JqZWN0LT5kYXRhU2l6ZSgpKTsKIH0KIAor
REVGSU5FX1ZJU0lUX0NISUxEUkVOKFByb3BlcnR5VGFibGUpOworCiB2b2lkIFByb3BlcnR5VGFi
bGU6OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQogewogICAgIHN0YXRpY19jYXN0PFByb3BlcnR5VGFi
bGUqPihjZWxsKS0+UHJvcGVydHlUYWJsZTo6flByb3BlcnR5VGFibGUoKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3h5T2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm94eU9iamVjdC5jcHAJKHJldmlzaW9uIDI3
MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3h5T2JqZWN0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYt
MjAyMCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTYtMjAyMSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTExNTgsNyArMTE1OCw4IEBAIGJvb2wgUHJveHlPYmplY3Q6Omlz
UmV2b2tlZCgpIGNvbnN0CiAgICAgcmV0dXJuIGhhbmRsZXIoKS5pc051bGwoKTsKIH0KIAotdm9p
ZCBQcm94eU9iamVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgUHJveHlPYmplY3Q6OnZp
c2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBQ
cm94eU9iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxQcm94eU9iamVjdCo+KGNlbGwpOwogICAg
IEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTExNjgs
NCArMTE2OSw2IEBAIHZvaWQgUHJveHlPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiAKICAg
ICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2hhbmRsZXIpOwogfQogCitERUZJTkVfVklT
SVRfQ0hJTERSRU4oUHJveHlPYmplY3QpOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3h5T2JqZWN0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJveHlPYmplY3QuaAkocmV2aXNpb24gMjcy
ODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJveHlPYmplY3QuaAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC05MSw3ICs5MSw3IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIHZvaWQgZ2V0T3du
UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lQXJy
YXkmLCBEb250RW51bVByb3BlcnRpZXNNb2RlKTsKICAgICBzdGF0aWMgYm9vbCBzZXRQcm90b3R5
cGUoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUgcHJvdG90eXBlLCBib29sIHNo
b3VsZFRocm93SWZDYW50U2V0KTsKICAgICBzdGF0aWMgSlNWYWx1ZSBnZXRQcm90b3R5cGUoSlNP
YmplY3QqLCBKU0dsb2JhbE9iamVjdCopOwotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4o
SlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAg
ICAgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3RDb21tb24oSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0
eU5hbWUsIFByb3BlcnR5U2xvdCYpOwogICAgIGJvb2wgcGVyZm9ybUludGVybmFsTWV0aG9kR2V0
T3duUHJvcGVydHkoSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJveHlSZXZva2UuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3h5UmV2b2tlLmNw
cAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJv
eHlSZXZva2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY5LDcgKzY5LDggQEAgSlNDX0RFRklORV9IT1NU
X0ZVTkNUSU9OKHBlcmZvcm1Qcm94eVJldgogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CiB9CiAKLXZvaWQgUHJveHlSZXZva2U6OnZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+
Cit2b2lkIFByb3h5UmV2b2tlOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0
b3ImIHZpc2l0b3IpCiB7CiAgICAgUHJveHlSZXZva2UqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8UHJv
eHlSZXZva2UqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmpl
Y3QsIGluZm8oKSk7CkBAIC03OCw0ICs3OSw2IEBAIHZvaWQgUHJveHlSZXZva2U6OnZpc2l0Q2hp
bGRyZW4oSlNDZWxsKiAKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX3Byb3h5KTsK
IH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKFByb3h5UmV2b2tlKTsKKwogfSAvLyBuYW1lc3Bh
Y2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm94eVJldm9rZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3h5UmV2b2tl
LmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1By
b3h5UmV2b2tlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDE2LTIwMTkgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01Miw3ICs1Miw3IEBAIHB1YmxpYzoKICAg
ICB9CiAKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgUHJveHlPYmplY3QqKTsKLSAgICBz
dGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVD
TEFSRV9WSVNJVF9DSElMRFJFTjsKICAgICBKU1ZhbHVlIHByb3h5KCkgeyByZXR1cm4gbV9wcm94
eS5nZXQoKTsgfQogICAgIHZvaWQgc2V0UHJveHlUb051bGwoVk0mIHZtKSB7IHJldHVybiBtX3By
b3h5LnNldCh2bSwgdGhpcywganNOdWxsKCkpOyB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1JlZ0V4cENhY2hlZFJlc3VsdC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwQ2FjaGVkUmVzdWx0LmNwcAkocmV2aXNpb24g
MjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwQ2FjaGVkUmVz
dWx0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTIsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEyLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMSw3ICszMSw4IEBACiAKIG5hbWVzcGFjZSBK
U0MgewogCi12b2lkIFJlZ0V4cENhY2hlZFJlc3VsdDo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0
b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBSZWdFeHBDYWNo
ZWRSZXN1bHQ6OnZpc2l0QWdncmVnYXRlKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgdmlzaXRv
ci5hcHBlbmQobV9sYXN0SW5wdXQpOwogICAgIHZpc2l0b3IuYXBwZW5kKG1fbGFzdFJlZ0V4cCk7
CkBAIC00Myw2ICs0NCw5IEBAIHZvaWQgUmVnRXhwQ2FjaGVkUmVzdWx0Ojp2aXNpdEFnZ3JlZ2F0
ZSgKICAgICB9CiB9CiAKK3RlbXBsYXRlIHZvaWQgUmVnRXhwQ2FjaGVkUmVzdWx0Ojp2aXNpdEFn
Z3JlZ2F0ZShBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIFJlZ0V4cENhY2hl
ZFJlc3VsdDo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImKTsKKwogSlNBcnJheSogUmVnRXhw
Q2FjaGVkUmVzdWx0OjpsYXN0UmVzdWx0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpT
T2JqZWN0KiBvd25lcikKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBDYWNoZWRSZXN1bHQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBDYWNoZWRSZXN1
bHQuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
UmVnRXhwQ2FjaGVkUmVzdWx0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjUsNyArNjUsNyBAQCBw
dWJsaWM6CiAgICAgICAgIHJldHVybiBtX3JlaWZpZWQgPyBtX3JlaWZpZWRJbnB1dC5nZXQoKSA6
IG1fbGFzdElucHV0LmdldCgpOwogICAgIH0KIAotICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xv
dFZpc2l0b3ImKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIHZpc2l0QWdn
cmVnYXRlKFZpc2l0b3ImKTsKIAogICAgIC8vIG1fbGFzdFJlZ0V4cCB3b3VsZCBiZSBudWxscHRy
IHdoZW4gUmVnRXhwQ2FjaGVkUmVzdWx0IGlzIG5vdCByZWlmaWVkLgogICAgIC8vIElmIHdlIGZp
bmQgbV9sYXN0UmVnRXhwIGlzIG51bGxwdHIsIGl0IG1lYW5zIHRoaXMgc2hvdWxkIGhvbGQgdGhl
IGVtcHR5IFJlZ0V4cC4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4
cEdsb2JhbERhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1JlZ0V4cEdsb2JhbERhdGEuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBHbG9iYWxEYXRhLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwg
UmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE5LTIwMjEgQXBwbGUgSW5jLiBB
bGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0z
MCwxMSArMzAsMTUgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLXZvaWQgUmVnRXhwR2xvYmFsRGF0
YTo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBWaXNpdG9yPgordm9pZCBSZWdFeHBHbG9iYWxEYXRhOjp2aXNpdEFnZ3JlZ2F0ZShWaXNpdG9y
JiB2aXNpdG9yKQogewogICAgIG1fY2FjaGVkUmVzdWx0LnZpc2l0QWdncmVnYXRlKHZpc2l0b3Ip
OwogfQogCit0ZW1wbGF0ZSB2b2lkIFJlZ0V4cEdsb2JhbERhdGE6OnZpc2l0QWdncmVnYXRlKEFi
c3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgUmVnRXhwR2xvYmFsRGF0YTo6dmlz
aXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImKTsKKwogSlNWYWx1ZSBSZWdFeHBHbG9iYWxEYXRhOjpn
ZXRCYWNrcmVmKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIHVuc2lnbmVkIGkpCiB7CiAg
ICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvUmVnRXhwR2xvYmFsRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cEdsb2JhbERhdGEuaAkocmV2aXNpb24gMjcyODMwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwR2xvYmFsRGF0YS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBs
ZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMSBB
cHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTQxLDcgKzQxLDcgQEAgcHVibGljOgogICAgIHZvaWQgc2V0SW5wdXQoSlNHbG9i
YWxPYmplY3QqLCBKU1N0cmluZyopOwogICAgIEpTU3RyaW5nKiBpbnB1dCgpIHsgcmV0dXJuIG1f
Y2FjaGVkUmVzdWx0LmlucHV0KCk7IH0KIAotICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZp
c2l0b3ImKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIHZpc2l0QWdncmVn
YXRlKFZpc2l0b3ImKTsKIAogICAgIEpTVmFsdWUgZ2V0QmFja3JlZihKU0dsb2JhbE9iamVjdCos
IHVuc2lnbmVkKTsKICAgICBKU1ZhbHVlIGdldExhc3RQYXJlbihKU0dsb2JhbE9iamVjdCopOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBPYmplY3QuY3Bw
CShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdF
eHBPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqICBDb3B5
cmlnaHQgKEMpIDE5OTktMjAwMCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQotICogIENv
cHlyaWdodCAoQykgMjAwMy0yMDE5IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAq
ICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAyMSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQu
CiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGVzc2VyIEdlbmVyYWwgUHVibGljCkBAIC00Niw3ICs0Niw4IEBAIHZvaWQgUmVnRXhwT2JqZWN0
OjpmaW5pc2hDcmVhdGlvbihWTSYgdm0KICAgICBBU1NFUlQodHlwZSgpID09IFJlZ0V4cE9iamVj
dFR5cGUpOwogfQogCi12b2lkIFJlZ0V4cE9iamVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNl
bGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3Zv
aWQgUmVnRXhwT2JqZWN0Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3Im
IHZpc2l0b3IpCiB7CiAgICAgUmVnRXhwT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PFJlZ0V4
cE9iamVjdCo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVj
dCwgaW5mbygpKTsKQEAgLTU1LDYgKzU2LDggQEAgdm9pZCBSZWdFeHBPYmplY3Q6OnZpc2l0Q2hp
bGRyZW4oSlNDZWxsKgogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fbGFzdEluZGV4
KTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKFJlZ0V4cE9iamVjdCk7CisKIGJvb2wgUmVn
RXhwT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqIG9iamVjdCwgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlT
bG90JiBzbG90KQogewogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE9iamVjdC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE9iamVjdC5oCShyZXZpc2lvbiAy
NzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBPYmplY3QuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5
LTIwMDAgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKLSAqICBDb3B5cmlnaHQgKEMpIDIw
MDMtMjAxOSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChD
KSAyMDAzLTIwMjEgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqICBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFs
IFB1YmxpYwpAQCAtMTMzLDcgKzEzMyw3IEBAIHByaXZhdGU6CiAgICAgSlNfRVhQT1JUX1BSSVZB
VEUgUmVnRXhwT2JqZWN0KFZNJiwgU3RydWN0dXJlKiwgUmVnRXhwKik7CiAgICAgSlNfRVhQT1JU
X1BSSVZBVEUgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOwogCi0gICAgc3RhdGljIHZvaWQgdmlz
aXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJ
TERSRU47CiAKICAgICBib29sIGxhc3RJbmRleElzV3JpdGFibGUoKSBjb25zdAogICAgIHsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NhbXBsaW5nUHJvZmlsZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NhbXBsaW5nUHJvZmls
ZXIuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TYW1wbGluZ1Byb2ZpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjUyLDcgKzY1Miw3IEBA
IHZvaWQgU2FtcGxpbmdQcm9maWxlcjo6cHJvY2Vzc1VudmVyaWZpZWQKICAgICBtX3VucHJvY2Vz
c2VkU3RhY2tUcmFjZXMuY2xlYXIoKTsKIH0KIAotdm9pZCBTYW1wbGluZ1Byb2ZpbGVyOjp2aXNp
dChTbG90VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgU2FtcGxpbmdQcm9maWxlcjo6dmlzaXQoQWJz
dHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBSRUxFQVNFX0FTU0VSVChtX2xvY2su
aXNMb2NrZWQoKSk7CiAgICAgZm9yIChKU0NlbGwqIGNlbGwgOiBtX2xpdmVDZWxsUG9pbnRlcnMp
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TYW1wbGluZ1Byb2ZpbGVyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2FtcGxpbmdQcm9m
aWxlci5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TYW1wbGluZ1Byb2ZpbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTcxLDcgKzE3MSw3IEBAIHB1Ymxp
YzoKICAgICB2b2lkIG5vdGljZUpTTG9ja0FjcXVpc2l0aW9uKCk7CiAgICAgdm9pZCBub3RpY2VW
TUVudHJ5KCk7CiAgICAgdm9pZCBzaHV0ZG93bigpOwotICAgIHZvaWQgdmlzaXQoU2xvdFZpc2l0
b3ImKTsKKyAgICB2b2lkIHZpc2l0KEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKICAgICBMb2NrJiBn
ZXRMb2NrKCkgeyByZXR1cm4gbV9sb2NrOyB9CiAgICAgdm9pZCBzZXRUaW1pbmdJbnRlcnZhbChT
ZWNvbmRzIGludGVydmFsKSB7IG1fdGltaW5nSW50ZXJ2YWwgPSBpbnRlcnZhbDsgfQogICAgIEpT
X0VYUE9SVF9QUklWQVRFIHZvaWQgc3RhcnQoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1Njb3BlZEFyZ3VtZW50cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVkQXJndW1lbnRzLmNwcAkocmV2aXNpb24gMjcyODMwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVkQXJndW1lbnRzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAx
OCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUt
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTk4LDcgKzk4LDggQEAgU2NvcGVkQXJndW1lbnRzKiBTY29wZWRBcmd1
bWVudHM6OmNyZWF0ZQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQgU2NvcGVkQXJndW1l
bnRzOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0
ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBTY29wZWRBcmd1bWVudHM6OnZpc2l0Q2hp
bGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBTY29wZWRB
cmd1bWVudHMqIHRoaXNPYmplY3QgPSBzdGF0aWNfY2FzdDxTY29wZWRBcmd1bWVudHMqPihjZWxs
KTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBA
IC0xMTUsNiArMTE2LDggQEAgdm9pZCBTY29wZWRBcmd1bWVudHM6OnZpc2l0Q2hpbGRyZW4oSlND
ZQogICAgIH0KIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKFNjb3BlZEFyZ3VtZW50cyk7CisK
IFN0cnVjdHVyZSogU2NvcGVkQXJndW1lbnRzOjpjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKIHsKICAgICByZXR1
cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5m
byhTY29wZWRBcmd1bWVudHNUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29wZWRBcmd1bWVudHMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29wZWRBcmd1bWVudHMuaAkocmV2
aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVkQXJn
dW1lbnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDE1LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE1LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02Myw5ICs2Myw5IEBAIHB1YmxpYzoKICAgICAK
ICAgICAvLyBDcmVhdGVzIGFuIGFyZ3VtZW50cyBvYmplY3QgYnkgY29weWluZyB0aGUgYXJndW1l
bnRzIGZyb20gYSB3ZWxsLWRlZmluZWQgc3RhY2sgbG9jYXRpb24uCiAgICAgc3RhdGljIFNjb3Bl
ZEFyZ3VtZW50cyogY3JlYXRlQnlDb3B5aW5nRnJvbShWTSYsIFN0cnVjdHVyZSosIFJlZ2lzdGVy
KiBhcmd1bWVudHNTdGFydCwgdW5zaWduZWQgdG90YWxMZW5ndGgsIEpTRnVuY3Rpb24qIGNhbGxl
ZSwgU2NvcGVkQXJndW1lbnRzVGFibGUqLCBKU0xleGljYWxFbnZpcm9ubWVudCopOwotICAgIAot
ICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKLSAg
ICAKKworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CisKICAgICB1aW50MzJfdCBpbnRlcm5h
bExlbmd0aCgpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1cm4gbV90b3RhbExlbmd0aDsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NpbXBsZVR5cGVkQXJyYXlDb250cm9s
bGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TaW1w
bGVUeXBlZEFycmF5Q29udHJvbGxlci5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1NpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC02Miw3ICs2Miw3IEBAIGJvb2wgU2ltcGxlVHlwZWRBcnJheUNvbnRy
b2xsZXI6OmlzQXRvbWkKICAgICByZXR1cm4gbV9hbGxvd0F0b21pY3NXYWl0OwogfQogCi1ib29s
IFNpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyOjpKU0FycmF5QnVmZmVyT3duZXI6OmlzUmVhY2hh
YmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lk
KiwgSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikKK2Jvb2wg
U2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXI6OkpTQXJyYXlCdWZmZXJPd25lcjo6aXNSZWFjaGFi
bGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQq
LCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24p
CiB7CiAgICAgaWYgKFVOTElLRUxZKHJlYXNvbikpCiAgICAgICAgICpyZWFzb24gPSAiSlNBcnJh
eUJ1ZmZlciBpcyBvcGFxdWUgcm9vdCI7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1NpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyLmgJKHJldmlz
aW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NpbXBsZVR5cGVk
QXJyYXlDb250cm9sbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTgsNyArNTgsNyBAQCBwdWJsaWM6CiBw
cml2YXRlOgogICAgIGNsYXNzIEpTQXJyYXlCdWZmZXJPd25lciBmaW5hbCA6IHB1YmxpYyBXZWFr
SGFuZGxlT3duZXIgewogICAgIHB1YmxpYzoKLSAgICAgICAgYm9vbCBpc1JlYWNoYWJsZUZyb21P
cGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0LCBTbG90
VmlzaXRvciYsIGNvbnN0IGNoYXIqKiByZWFzb24pIGZpbmFsOworICAgICAgICBib29sIGlzUmVh
Y2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNv
bnRleHQsIEFic3RyYWN0U2xvdFZpc2l0b3ImLCBjb25zdCBjaGFyKiogcmVhc29uKSBmaW5hbDsK
ICAgICAgICAgdm9pZCBmaW5hbGl6ZShKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBj
b250ZXh0KSBmaW5hbDsKICAgICB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TbWFsbFN0cmluZ3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1NtYWxsU3RyaW5ncy5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1NtYWxsU3RyaW5ncy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDEwIEFwcGxlIEluYy4g
QWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDIxIEFwcGxlIElu
Yy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtNjYsNyArNjYsNyBAQCB2b2lkIFNtYWxsU3RyaW5nczo6aW5pdGlhbGl6ZUNvbW1vblN0cmlu
CiAgICAgc2V0SXNJbml0aWFsaXplZCh0cnVlKTsKIH0KIAotdm9pZCBTbWFsbFN0cmluZ3M6OnZp
c2l0U3Ryb25nUmVmZXJlbmNlcyhTbG90VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgU21hbGxTdHJp
bmdzOjp2aXNpdFN0cm9uZ1JlZmVyZW5jZXMoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikK
IHsKICAgICBtX25lZWRzVG9CZVZpc2l0ZWQgPSBmYWxzZTsKICAgICB2aXNpdG9yLmFwcGVuZFVu
YmFycmllcmVkKG1fZW1wdHlTdHJpbmcpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU21hbGxTdHJpbmdzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU21hbGxTdHJpbmdzLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1NtYWxsU3RyaW5ncy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOC0yMDE5IEFwcGxlIEluYy4gQWxsIFJp
Z2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDIxIEFwcGxlIEluYy4gQWxs
IFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDks
OSArNDksOSBAQCBjbGFzcyBTdHJpbmdJbXBsOwogCiBuYW1lc3BhY2UgSlNDIHsKIAorY2xhc3Mg
QWJzdHJhY3RTbG90VmlzaXRvcjsKIGNsYXNzIFZNOwogY2xhc3MgSlNTdHJpbmc7Ci1jbGFzcyBT
bG90VmlzaXRvcjsKIAogc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBtYXhTaW5nbGVDaGFyYWN0
ZXJTdHJpbmcgPSAweEZGOwogCkBAIC03OCw3ICs3OCw3IEBAIHB1YmxpYzoKICAgICBKU1N0cmlu
ZyoqIHNpbmdsZUNoYXJhY3RlclN0cmluZ3MoKSB7IHJldHVybiAmbV9zaW5nbGVDaGFyYWN0ZXJT
dHJpbmdzWzBdOyB9CiAKICAgICB2b2lkIGluaXRpYWxpemVDb21tb25TdHJpbmdzKFZNJik7Ci0g
ICAgdm9pZCB2aXNpdFN0cm9uZ1JlZmVyZW5jZXMoU2xvdFZpc2l0b3ImKTsKKyAgICB2b2lkIHZp
c2l0U3Ryb25nUmVmZXJlbmNlcyhBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAKICNkZWZpbmUgSlND
X0NPTU1PTl9TVFJJTkdTX0FDQ0VTU09SX0RFRklOSVRJT04obmFtZSkgXAogICAgIEpTU3RyaW5n
KiBuYW1lIyNTdHJpbmcoKSBjb25zdCAgICAgICAgICAgICAgICAgICBcCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TcGFyc2VBcnJheVZhbHVlTWFwLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TcGFyc2VBcnJheVZhbHVlTWFwLmNw
cAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3Bh
cnNlQXJyYXlWYWx1ZU1hcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yMTAsNyArMjEwLDggQEAg
SlNWYWx1ZSBTcGFyc2VBcnJheUVudHJ5OjpnZXROb25TcGFyc2VNbwogICAgIHJldHVybiBCYXNl
OjpnZXQoKTsKIH0KIAotdm9pZCBTcGFyc2VBcnJheVZhbHVlTWFwOjp2aXNpdENoaWxkcmVuKEpT
Q2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNp
dG9yPgordm9pZCBTcGFyc2VBcnJheVZhbHVlTWFwOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwq
IGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCogdGhp
c09iamVjdCA9IGpzQ2FzdDxTcGFyc2VBcnJheVZhbHVlTWFwKj4oY2VsbCk7CiAgICAgQVNTRVJU
X0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtMjIzLDUgKzIyNCw3
IEBAIHZvaWQgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6dmlzaXRDaGlsZHJlbigKICAgICB2aXNpdG9y
LnJlcG9ydEV4dHJhTWVtb3J5VmlzaXRlZCh0aGlzT2JqZWN0LT5tX3JlcG9ydGVkQ2FwYWNpdHkg
KiBzaXplb2YoTWFwOjpLZXlWYWx1ZVBhaXJUeXBlKSk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElM
RFJFTihTcGFyc2VBcnJheVZhbHVlTWFwKTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NwYXJzZUFycmF5VmFsdWVNYXAuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TcGFyc2VBcnJheVZhbHVl
TWFwLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1NwYXJzZUFycmF5VmFsdWVNYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTExNSw3ICsxMTUsNyBA
QCBwdWJsaWM6CiAgICAgCiAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZN
JiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlIHByb3RvdHlwZSk7CiAKLSAgICBzdGF0aWMgdm9p
ZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJ
VF9DSElMRFJFTjsKIAogICAgIGJvb2wgc3BhcnNlTW9kZSgpCiAgICAgewpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RhY2tGcmFtZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RhY2tGcmFtZS5jcHAJKHJldmlzaW9uIDI3Mjgz
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0YWNrRnJhbWUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE5
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0y
MDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMTQxLDcgKzE0MSw4IEBAIFN0cmluZyBTdGFja0ZyYW1lOjp0b1N0cmlu
ZyhWTSYgdm0pIGNvbnMKICAgICByZXR1cm4gdHJhY2VCdWlsZC50b1N0cmluZygpLmltcGwoKTsK
IH0KIAotdm9pZCBTdGFja0ZyYW1lOjp2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9y
KQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgU3RhY2tGcmFtZTo6dmlzaXRDaGls
ZHJlbkltcGwoVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBpZiAobV9jYWxsZWUpCiAgICAgICAg
IHZpc2l0b3IuYXBwZW5kKG1fY2FsbGVlKTsKQEAgLTE0OSw1ICsxNTAsNyBAQCB2b2lkIFN0YWNr
RnJhbWU6OnZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0CiAgICAgICAgIHZpc2l0b3IuYXBwZW5kKG1f
Y29kZUJsb2NrKTsKIH0KIAorREVGSU5FX0lOU1RBTkNFX1ZJU0lUX0NISUxEUkVOKFN0YWNrRnJh
bWUpOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU3RhY2tGcmFtZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1N0YWNrRnJhbWUuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU3RhY2tGcmFtZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYsNiAr
MjYsNyBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJIZWFwLmgiCisjaW5jbHVkZSAiU2xv
dFZpc2l0b3JNYWNyb3MuaCIKICNpbmNsdWRlICJWTS5oIgogI2luY2x1ZGUgIldhc21JbmRleE9y
TmFtZS5oIgogI2luY2x1ZGUgIldyaXRlQmFycmllci5oIgpAQCAtMzUsNyArMzYsNiBAQCBuYW1l
c3BhY2UgSlNDIHsKIAogY2xhc3MgQ29kZUJsb2NrOwogY2xhc3MgSlNPYmplY3Q7Ci1jbGFzcyBT
bG90VmlzaXRvcjsKIAogY2xhc3MgU3RhY2tGcmFtZSB7CiBwdWJsaWM6CkBAIC01OCw3ICs1OCw3
IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fYnl0ZWNvZGVJbmRleDsKICAgICB9CiAgICAg
Ci0gICAgdm9pZCB2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9JTlNU
QU5DRV9WSVNJVF9DSElMRFJFTjsKICAgICBib29sIGlzTWFya2VkKFZNJiB2bSkgY29uc3QgeyBy
ZXR1cm4gKCFtX2NhbGxlZSB8fCB2bS5oZWFwLmlzTWFya2VkKG1fY2FsbGVlLmdldCgpKSkgJiYg
KCFtX2NvZGVCbG9jayB8fCB2bS5oZWFwLmlzTWFya2VkKG1fY29kZUJsb2NrLmdldCgpKSk7IH0K
IAogcHJpdmF0ZToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVy
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0
dXJlLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU3RydWN0dXJlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDgtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQWxleGV5IFNodmF5a2EgPHNodmFpa2FsZXNoQGdtYWls
LmNvbT4uCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0xMjY4LDcgKzEyNjgsOCBAQCB2b2lkIFN0cnVj
dHVyZTo6ZGlkVHJhbnNpdGlvbkZyb21UaGlzU3RyCiAgICAgICAgIG1fdHJhbnNpdGlvbldhdGNo
cG9pbnRTZXQuZmlyZUFsbCh2bSgpLCBTdHJ1Y3R1cmVGaXJlRGV0YWlsKHRoaXMpKTsKIH0KIAot
dm9pZCBTdHJ1Y3R1cmU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYg
dmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFN0cnVjdHVyZTo6dmlz
aXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFN0
cnVjdHVyZSogdGhpc09iamVjdCA9IGpzQ2FzdDxTdHJ1Y3R1cmUqPihjZWxsKTsKICAgICBBU1NF
UlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC0xMjkwLDMyICsx
MjkxLDM4IEBAIHZvaWQgU3RydWN0dXJlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2UKICAgICAg
ICAgLy8gTk9URTogVGhpcyBjYW4gaW50ZXJsZWF2ZSBpbiBwaW4oKSwgaW4gd2hpY2ggY2FzZSBp
dCBtYXkgc2VlIGEgbnVsbCBwcm9wZXJ0eSB0YWJsZS4KICAgICAgICAgLy8gVGhhdCdzIGZpbmUs
IGJlY2F1c2UgdGhlbiB0aGUgYmFycmllciB3aWxsIGZpcmUgYW5kIHdlIHdpbGwgc2NhbiB0aGlz
IGFnYWluLgogICAgICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX3Byb3BlcnR5VGFi
bGVVbnNhZmUpOwotICAgIH0gZWxzZSBpZiAodmlzaXRvci5pc0FuYWx5emluZ0hlYXAoKSkKKyAg
ICB9IGVsc2UgaWYgKHZpc2l0b3Iudm0oKS5pc0FuYWx5emluZ0hlYXAoKSkKICAgICAgICAgdmlz
aXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9wcm9wZXJ0eVRhYmxlVW5zYWZlKTsKICAgICBlbHNl
IGlmICh0aGlzT2JqZWN0LT5tX3Byb3BlcnR5VGFibGVVbnNhZmUpCiAgICAgICAgIHRoaXNPYmpl
Y3QtPm1fcHJvcGVydHlUYWJsZVVuc2FmZS5jbGVhcigpOwogfQogCi1ib29sIFN0cnVjdHVyZTo6
aXNDaGVhcER1cmluZ0dDKFZNJiB2bSkKK0RFRklORV9WSVNJVF9DSElMRFJFTihTdHJ1Y3R1cmUp
OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgorYm9vbCBTdHJ1Y3R1cmU6OmlzQ2hlYXBE
dXJpbmdHQyhWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIC8vIEZJWE1FOiBXZSBjb3VsZCBtYWtl
IHRoaXMgZXZlbiBzYWZlciBieSByZXR1cm5pbmcgZmFsc2UgaWYgdGhpcyBzdHJ1Y3R1cmUncyBw
cm9wZXJ0eSB0YWJsZQogICAgIC8vIGhhcyBhbnkgbGFyZ2UgcHJvcGVydHkgbmFtZXMuCiAgICAg
Ly8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NzMzNAogICAgIAot
ICAgIHJldHVybiAoIW1fZ2xvYmFsT2JqZWN0IHx8IHZtLmhlYXAuaXNNYXJrZWQobV9nbG9iYWxP
YmplY3QuZ2V0KCkpKQotICAgICAgICAmJiAoaGFzUG9seVByb3RvKCkgfHwgIXN0b3JlZFByb3Rv
dHlwZU9iamVjdCgpIHx8IHZtLmhlYXAuaXNNYXJrZWQoc3RvcmVkUHJvdG90eXBlT2JqZWN0KCkp
KTsKKyAgICByZXR1cm4gKCFtX2dsb2JhbE9iamVjdCB8fCB2aXNpdG9yLmlzTWFya2VkKG1fZ2xv
YmFsT2JqZWN0LmdldCgpKSkKKyAgICAgICAgJiYgKGhhc1BvbHlQcm90bygpIHx8ICFzdG9yZWRQ
cm90b3R5cGVPYmplY3QoKSB8fCB2aXNpdG9yLmlzTWFya2VkKHN0b3JlZFByb3RvdHlwZU9iamVj
dCgpKSk7CiB9CiAKLWJvb2wgU3RydWN0dXJlOjptYXJrSWZDaGVhcChTbG90VmlzaXRvciYgdmlz
aXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Citib29sIFN0cnVjdHVyZTo6bWFya0lm
Q2hlYXAoVmlzaXRvciYgdmlzaXRvcikKIHsKLSAgICBWTSYgdm0gPSB2aXNpdG9yLnZtKCk7Ci0g
ICAgaWYgKCFpc0NoZWFwRHVyaW5nR0Modm0pKQotICAgICAgICByZXR1cm4gdm0uaGVhcC5pc01h
cmtlZCh0aGlzKTsKLSAgICAKKyAgICBpZiAoIWlzQ2hlYXBEdXJpbmdHQyh2aXNpdG9yKSkKKyAg
ICAgICAgcmV0dXJuIHZpc2l0b3IuaXNNYXJrZWQodGhpcyk7CisKICAgICB2aXNpdG9yLmFwcGVu
ZFVuYmFycmllcmVkKHRoaXMpOwogICAgIHJldHVybiB0cnVlOwogfQogCit0ZW1wbGF0ZSBib29s
IFN0cnVjdHVyZTo6bWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIGJvb2wgU3Ry
dWN0dXJlOjptYXJrSWZDaGVhcChBYnN0cmFjdFNsb3RWaXNpdG9yJik7CisKIFJlZjxTdHJ1Y3R1
cmVTaGFwZT4gU3RydWN0dXJlOjp0b1N0cnVjdHVyZVNoYXBlKEpTVmFsdWUgdmFsdWUsIGJvb2wm
IHNhd1BvbHlQcm90b1N0cnVjdHVyZSkKIHsKICAgICBSZWY8U3RydWN0dXJlU2hhcGU+IGJhc2VT
aGFwZSA9IFN0cnVjdHVyZVNoYXBlOjpjcmVhdGUoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTYwLDcg
KzYwLDYgQEAgY2xhc3MgUHJvcGVydHlOYW1lQXJyYXlEYXRhOwogY2xhc3MgUHJvcGVydHlUYWJs
ZTsKIGNsYXNzIFN0cnVjdHVyZUNoYWluOwogY2xhc3MgU3RydWN0dXJlU2hhcGU7Ci1jbGFzcyBT
bG90VmlzaXRvcjsKIGNsYXNzIEpTU3RyaW5nOwogc3RydWN0IER1bXBDb250ZXh0Owogc3RydWN0
IEhhc2hUYWJsZTsKQEAgLTMxMCw3ICszMDksNyBAQCBwdWJsaWM6CiAgICAgSlNWYWx1ZSBwcm90
b3R5cGVGb3JMb29rdXAoSlNHbG9iYWxPYmplY3QqLCBKU0NlbGwqIGJhc2UpIGNvbnN0OwogICAg
IFN0cnVjdHVyZUNoYWluKiBwcm90b3R5cGVDaGFpbihWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNP
YmplY3QqIGJhc2UpIGNvbnN0OwogICAgIFN0cnVjdHVyZUNoYWluKiBwcm90b3R5cGVDaGFpbihK
U0dsb2JhbE9iamVjdCosIEpTT2JqZWN0KiBiYXNlKSBjb25zdDsKLSAgICBzdGF0aWMgdm9pZCB2
aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9D
SElMRFJFTjsKICAgICAKICAgICAvLyBBIFN0cnVjdHVyZSBpcyBjaGVhcCB0byBtYXJrIGR1cmlu
ZyBHQyBpZiBkb2luZyBzbyB3b3VsZCBvbmx5IGFkZCBhIHNtYWxsIGFuZCBib3VuZGVkIGFtb3Vu
dAogICAgIC8vIHRvIG91ciBoZWFwIGZvb3RwcmludC4gRm9yIGV4YW1wbGUsIGlmIHRoZSBzdHJ1
Y3R1cmUgcmVmZXJzIHRvIGEgZ2xvYmFsIG9iamVjdCB0aGF0IGlzIG5vdApAQCAtMzE4LDEwICsz
MTcsMTAgQEAgcHVibGljOgogICAgIC8vIGluY3JlYXNlIGluIGZvb3RwcmludCBiZWNhdXNlIG5v
IG90aGVyIG9iamVjdCByZWZlcnMgdG8gdGhhdCBnbG9iYWwgb2JqZWN0LiBUaGlzIG1ldGhvZAog
ICAgIC8vIHJldHVybnMgdHJ1ZSBpZiBhbGwgdXNlci1jb250cm9sbGVkIChhbmQgaGVuY2UgdW5i
b3VuZGVkIGluIHNpemUpIG9iamVjdHMgcmVmZXJlbmNlZCBmcm9tIHRoZQogICAgIC8vIFN0cnVj
dHVyZSBhcmUgYWxyZWFkeSBtYXJrZWQuCi0gICAgYm9vbCBpc0NoZWFwRHVyaW5nR0MoVk0mKTsK
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiBib29sIGlzQ2hlYXBEdXJpbmdHQyhWaXNp
dG9yJik7CiAgICAgCiAgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoaXMgc3RydWN0dXJlIGlzIG5v
dyBtYXJrZWQuCi0gICAgYm9vbCBtYXJrSWZDaGVhcChTbG90VmlzaXRvciYpOworICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFZpc2l0b3I+IGJvb2wgbWFya0lmQ2hlYXAoVmlzaXRvciYpOwogICAgIAog
ICAgIGJvb2wgaGFzUmFyZURhdGEoKSBjb25zdAogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUNoYWluLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVDaGFpbi5jcHAJKHJldmlzaW9uIDI3Mjgz
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUNoYWluLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIw
MjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC02Niw3ICs2Niw4IEBAIHZvaWQgU3RydWN0dXJlQ2hhaW46OmZpbmlzaENy
ZWF0aW9uKFZNJiAKICAgICB9CiB9CiAKLXZvaWQgU3RydWN0dXJlQ2hhaW46OnZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1l
IFZpc2l0b3I+Cit2b2lkIFN0cnVjdHVyZUNoYWluOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwq
IGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgU3RydWN0dXJlQ2hhaW4qIHRoaXNPYmpl
Y3QgPSBqc0Nhc3Q8U3RydWN0dXJlQ2hhaW4qPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNU
X0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC04MCw0ICs4MSw2IEBAIHZvaWQgU3Ry
dWN0dXJlQ2hhaW46OnZpc2l0Q2hpbGRyZW4oSlNDZWwKICAgICB9CiB9CiAKK0RFRklORV9WSVNJ
VF9DSElMRFJFTihTdHJ1Y3R1cmVDaGFpbik7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlQ2hhaW4uaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVDaGFpbi5oCShyZXZp
c2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVD
aGFpbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAwOC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAwOC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTEsNyArNTEsNyBAQCBwdWJsaWM6CiAKICAgICBz
dGF0aWMgU3RydWN0dXJlQ2hhaW4qIGNyZWF0ZShWTSYsIEpTT2JqZWN0Kik7CiAgICAgU3RydWN0
dXJlSUQqIGhlYWQoKSB7IHJldHVybiBtX3ZlY3Rvci5nZXQoKTsgfQotICAgIHN0YXRpYyB2b2lk
IHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lU
X0NISUxEUkVOOwogCiAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2
bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCiAgICAg
ewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlUmFyZURhdGEu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVy
ZVJhcmVEYXRhLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU3RydWN0dXJlUmFyZURhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjcsNyAr
NjcsOCBAQCBTdHJ1Y3R1cmVSYXJlRGF0YTo6U3RydWN0dXJlUmFyZURhdGEoVk0mCiAgICAgICAg
IG1fcHJldmlvdXMuc2V0KHZtLCB0aGlzLCBwcmV2aW91cyk7CiB9CiAKLXZvaWQgU3RydWN0dXJl
UmFyZURhdGE6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRv
cikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFN0cnVjdHVyZVJhcmVEYXRhOjp2
aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAg
U3RydWN0dXJlUmFyZURhdGEqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8U3RydWN0dXJlUmFyZURhdGEq
PihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8o
KSk7CkBAIC04Niw2ICs4Nyw4IEBAIHZvaWQgU3RydWN0dXJlUmFyZURhdGE6OnZpc2l0Q2hpbGRy
ZW4oSlMKICAgICB9CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihTdHJ1Y3R1cmVSYXJlRGF0
YSk7CisKIC8vIC0tLS0tLS0tLS0tIENhY2hlZCBzcGVjaWFsIHByb3BlcnRpZXMgaGVscGVyIHdh
dGNocG9pbnQgY2xhc3NlcyAtLS0tLS0tLS0tLQogCiBjbGFzcyBDYWNoZWRTcGVjaWFsUHJvcGVy
dHlBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQgZmluYWwgOiBwdWJsaWMg
QWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50QmFzZSB7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVSYXJlRGF0YS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZVJhcmVEYXRhLmgJKHJl
dmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVy
ZVJhcmVEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02OCw3ICs2OCw3IEBAIHB1YmxpYzoKICAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNEZXN0cnVjdGlvbiA9IHRydWU7CiAgICAgc3Rh
dGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwog
CiAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmpl
Y3QqLCBKU1ZhbHVlIHByb3RvdHlwZSk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1N5bWJvbFRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TeW1ib2xUYWJsZS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJvbFRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxOSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTkyLDcgKzkyLDggQEAgdm9pZCBTeW1ib2xUYWJsZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQog
ICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKIH0KIAotdm9pZCBTeW1ib2xUYWJsZTo6dmlz
aXRDaGlsZHJlbihKU0NlbGwqIHRoaXNDZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBs
YXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFN5bWJvbFRhYmxlOjp2aXNpdENoaWxkcmVuSW1w
bChKU0NlbGwqIHRoaXNDZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFN5bWJvbFRhYmxl
KiB0aGlzU3ltYm9sVGFibGUgPSBqc0Nhc3Q8U3ltYm9sVGFibGUqPih0aGlzQ2VsbCk7CiAgICAg
QVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzU3ltYm9sVGFibGUsIGluZm8oKSk7CkBAIC0x
MDgsNiArMTA5LDggQEAgdm9pZCBTeW1ib2xUYWJsZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIAog
ICAgIHRoaXNTeW1ib2xUYWJsZS0+bV9sb2NhbFRvRW50cnkgPSBudWxscHRyOwogfQogCitERUZJ
TkVfVklTSVRfQ0hJTERSRU4oU3ltYm9sVGFibGUpOworCiBjb25zdCBTeW1ib2xUYWJsZTo6TG9j
YWxUb0VudHJ5VmVjJiBTeW1ib2xUYWJsZTo6bG9jYWxUb0VudHJ5KGNvbnN0IENvbmN1cnJlbnRK
U0xvY2tlciYpCiB7CiAgICAgaWYgKFVOTElLRUxZKCFtX2xvY2FsVG9FbnRyeSkpIHsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJvbFRhYmxlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFibGUuaAkocmV2aXNpb24g
MjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFibGUuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDct
MjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTczMyw3ICs3MzMsNyBAQCBwdWJsaWM6CiAgICAgICAgIG1fc2lu
Z2xldG9uLm5vdGlmeVdyaXRlKHZtLCB0aGlzLCBzY29wZSwgcmVhc29uKTsKICAgICB9CiAKLSAg
ICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAg
REVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIERFQ0xBUkVfRVhQT1JUX0lORk87CiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVQcm9maWxlckxvZy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZVByb2ZpbGVyTG9n
LmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
VHlwZVByb2ZpbGVyTG9nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEyNCw3ICsxMjQsNyBAQCB2
b2lkIFR5cGVQcm9maWxlckxvZzo6cHJvY2Vzc0xvZ0VudHJpZXMoCiAgICAgfQogfQogCi12b2lk
IFR5cGVQcm9maWxlckxvZzo6dmlzaXQoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIFR5cGVQ
cm9maWxlckxvZzo6dmlzaXQoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBm
b3IgKExvZ0VudHJ5KiBlbnRyeSA9IG1fbG9nU3RhcnRQdHI7IGVudHJ5ICE9IG1fY3VycmVudExv
Z0VudHJ5UHRyOyArK2VudHJ5KSB7CiAgICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQo
ZW50cnktPnZhbHVlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVQ
cm9maWxlckxvZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1R5cGVQcm9maWxlckxvZy5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9UeXBlUHJvZmlsZXJMb2cuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01OSw3ICs1OSw3
IEBAIHB1YmxpYzoKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHByb2Nlc3NMb2dFbnRyaWVz
KFZNJiwgY29uc3QgU3RyaW5nJik7CiAgICAgTG9nRW50cnkqIGxvZ0VuZFB0cigpIGNvbnN0IHsg
cmV0dXJuIG1fbG9nRW5kUHRyOyB9CiAKLSAgICB2b2lkIHZpc2l0KFNsb3RWaXNpdG9yJik7Cisg
ICAgdm9pZCB2aXNpdChBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAKICAgICBzdGF0aWMgcHRyZGlm
Zl90IGxvZ1N0YXJ0T2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFR5cGVQcm9maWxl
ckxvZywgbV9sb2dTdGFydFB0cik7IH0KICAgICBzdGF0aWMgcHRyZGlmZl90IGN1cnJlbnRMb2dF
bnRyeU9mZnNldCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihUeXBlUHJvZmlsZXJMb2csIG1f
Y3VycmVudExvZ0VudHJ5UHRyKTsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvVk0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5o
CShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAw
OC0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAwOC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMTIxLDYgKzEyMSw3IEBAIGNsYXNzIEZhc3RNYWxsb2NBbGln
bmVkTWVtb3J5QWxsb2NhdG9yOwogY2xhc3MgR2lnYWNhZ2VBbGlnbmVkTWVtb3J5QWxsb2NhdG9y
OwogY2xhc3MgSGFuZGxlU3RhY2s7CiBjbGFzcyBIYXNPd25Qcm9wZXJ0eUNhY2hlOworY2xhc3Mg
SGVhcEFuYWx5emVyOwogY2xhc3MgSGVhcFByb2ZpbGVyOwogY2xhc3MgSWRlbnRpZmllcjsKIGNs
YXNzIEludGVycHJldGVyOwpAQCAtMzEwLDYgKzMxMSwxMCBAQCBwdWJsaWM6CiAgICAgSGVhcFBy
b2ZpbGVyKiBoZWFwUHJvZmlsZXIoKSBjb25zdCB7IHJldHVybiBtX2hlYXBQcm9maWxlci5nZXQo
KTsgfQogICAgIEpTX0VYUE9SVF9QUklWQVRFIEhlYXBQcm9maWxlciYgZW5zdXJlSGVhcFByb2Zp
bGVyKCk7CiAKKyAgICBib29sIGlzQW5hbHl6aW5nSGVhcCgpIGNvbnN0IHsgcmV0dXJuIG1fYWN0
aXZlSGVhcEFuYWx5emVyOyB9CisgICAgSGVhcEFuYWx5emVyKiBhY3RpdmVIZWFwQW5hbHl6ZXIo
KSBjb25zdCB7IHJldHVybiBtX2FjdGl2ZUhlYXBBbmFseXplcjsgfQorICAgIHZvaWQgc2V0QWN0
aXZlSGVhcEFuYWx5emVyKEhlYXBBbmFseXplciogYW5hbHl6ZXIpIHsgbV9hY3RpdmVIZWFwQW5h
bHl6ZXIgPSBhbmFseXplcjsgfQorCiAjaWYgRU5BQkxFKFNBTVBMSU5HX1BST0ZJTEVSKQogICAg
IFNhbXBsaW5nUHJvZmlsZXIqIHNhbXBsaW5nUHJvZmlsZXIoKSB7IHJldHVybiBtX3NhbXBsaW5n
UHJvZmlsZXIuZ2V0KCk7IH0KICAgICBKU19FWFBPUlRfUFJJVkFURSBTYW1wbGluZ1Byb2ZpbGVy
JiBlbnN1cmVTYW1wbGluZ1Byb2ZpbGVyKFJlZjxTdG9wd2F0Y2g+JiYpOwpAQCAtMTE5NSw5ICsx
MjAwLDEwIEBAIHB1YmxpYzoKICAgICBib29sIGRpZEVudGVyVk0geyBmYWxzZSB9OwogcHJpdmF0
ZToKICAgICBib29sIG1fZmFpbE5leHROZXdDb2RlQmxvY2sgeyBmYWxzZSB9OwotICAgIERlbGV0
ZVByb3BlcnR5TW9kZSBtX2RlbGV0ZVByb3BlcnR5TW9kZSB7IERlbGV0ZVByb3BlcnR5TW9kZTo6
RGVmYXVsdCB9OwogICAgIGJvb2wgbV9nbG9iYWxDb25zdFJlZGVjbGFyYXRpb25TaG91bGRUaHJv
dyB7IHRydWUgfTsKICAgICBib29sIG1fc2hvdWxkQnVpbGRQQ1RvQ29kZU9yaWdpbk1hcHBpbmcg
eyBmYWxzZSB9OworICAgIERlbGV0ZVByb3BlcnR5TW9kZSBtX2RlbGV0ZVByb3BlcnR5TW9kZSB7
IERlbGV0ZVByb3BlcnR5TW9kZTo6RGVmYXVsdCB9OworICAgIEhlYXBBbmFseXplciogbV9hY3Rp
dmVIZWFwQW5hbHl6ZXIgeyBudWxscHRyIH07CiAgICAgc3RkOjp1bmlxdWVfcHRyPENvZGVDYWNo
ZT4gbV9jb2RlQ2FjaGU7CiAgICAgc3RkOjp1bmlxdWVfcHRyPEludGxDYWNoZT4gbV9pbnRsQ2Fj
aGU7CiAgICAgc3RkOjp1bmlxdWVfcHRyPEJ1aWx0aW5FeGVjdXRhYmxlcz4gbV9idWlsdGluRXhl
Y3V0YWJsZXM7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9XZWFrTWFwSW1w
bC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha01h
cEltcGwuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9XZWFrTWFwSW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqIENvcHlyaWdodCAoQykgMjAxNyBZdXN1a2UgU3V6dWtpIDx1dGF0YW5lLnRlYUBnbWFpbC5j
b20+LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMzksOCArMzksOSBAQCB2b2lkIFdlYWtNYXBJbXBs
PFdlYWtNYXBCdWNrZXQ+OjpkZXN0cm95CiAgICAgc3RhdGljX2Nhc3Q8V2Vha01hcEltcGwqPihj
ZWxsKS0+fldlYWtNYXBJbXBsKCk7CiB9CiAKLXRlbXBsYXRlIDx0eXBlbmFtZSBXZWFrTWFwQnVj
a2V0Pgotdm9pZCBXZWFrTWFwSW1wbDxXZWFrTWFwQnVja2V0Pjo6dmlzaXRDaGlsZHJlbihKU0Nl
bGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgV2Vha01h
cEJ1Y2tldD4KK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFdlYWtNYXBJbXBsPFdl
YWtNYXBCdWNrZXQ+Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZp
c2l0b3IpCiB7CiAgICAgV2Vha01hcEltcGwqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8V2Vha01hcElt
cGwqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGlu
Zm8oKSk7CkBAIC00OCw2ICs0OSw4IEBAIHZvaWQgV2Vha01hcEltcGw8V2Vha01hcEJ1Y2tldD46
OnZpc2l0Q2gKICAgICB2aXNpdG9yLnJlcG9ydEV4dHJhTWVtb3J5VmlzaXRlZCh0aGlzT2JqZWN0
LT5tX2NhcGFjaXR5ICogc2l6ZW9mKFdlYWtNYXBCdWNrZXQpKTsKIH0KIAorREVGSU5FX1RFTVBM
QVRFX1ZJU0lUX0NISUxEUkVOKHRlbXBsYXRlPHR5cGVuYW1lIFdlYWtNYXBCdWNrZXQ+LCBXZWFr
TWFwSW1wbDxXZWFrTWFwQnVja2V0Pik7CisKIHRlbXBsYXRlIDx0eXBlbmFtZSBXZWFrTWFwQnVj
a2V0Pgogc2l6ZV90IFdlYWtNYXBJbXBsPFdlYWtNYXBCdWNrZXQ+Ojplc3RpbWF0ZWRTaXplKEpT
Q2VsbCogY2VsbCwgVk0mIHZtKQogewpAQCAtNTYsMTUgKzU5LDE0IEBAIHNpemVfdCBXZWFrTWFw
SW1wbDxXZWFrTWFwQnVja2V0Pjo6ZXN0aW0KIH0KIAogdGVtcGxhdGUgPD4KLXZvaWQgV2Vha01h
cEltcGw8V2Vha01hcEJ1Y2tldDxXZWFrTWFwQnVja2V0RGF0YUtleT4+Ojp2aXNpdE91dHB1dENv
bnN0cmFpbnRzKEpTQ2VsbCosIFNsb3RWaXNpdG9yJikKK3ZvaWQgV2Vha01hcEltcGw8V2Vha01h
cEJ1Y2tldDxXZWFrTWFwQnVja2V0RGF0YUtleT4+Ojp2aXNpdE91dHB1dENvbnN0cmFpbnRzKEpT
Q2VsbCosIEFic3RyYWN0U2xvdFZpc2l0b3ImKQogewogICAgIC8vIE9ubHkgSlNXZWFrTWFwIG5l
ZWRzIHRvIGhhcnZlc3QgdmFsdWUgcmVmZXJlbmNlcwogfQogCiB0ZW1wbGF0ZSA8Pgotdm9pZCBX
ZWFrTWFwSW1wbDxXZWFrTWFwQnVja2V0PFdlYWtNYXBCdWNrZXREYXRhS2V5VmFsdWU+Pjo6dmlz
aXRPdXRwdXRDb25zdHJhaW50cyhKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQor
dm9pZCBXZWFrTWFwSW1wbDxXZWFrTWFwQnVja2V0PFdlYWtNYXBCdWNrZXREYXRhS2V5VmFsdWU+
Pjo6dmlzaXRPdXRwdXRDb25zdHJhaW50cyhKU0NlbGwqIGNlbGwsIEFic3RyYWN0U2xvdFZpc2l0
b3ImIHZpc2l0b3IpCiB7Ci0gICAgVk0mIHZtID0gdmlzaXRvci52bSgpOwogICAgIGF1dG8qIHRo
aXNPYmplY3QgPSBqc0Nhc3Q8V2Vha01hcEltcGwqPihjZWxsKTsKICAgICBhdXRvIGxvY2tlciA9
IGhvbGRMb2NrKHRoaXNPYmplY3QtPmNlbGxMb2NrKCkpOwogICAgIGF1dG8qIGJ1ZmZlciA9IHRo
aXNPYmplY3QtPmJ1ZmZlcigpOwpAQCAtNzIsNyArNzQsNyBAQCB2b2lkIFdlYWtNYXBJbXBsPFdl
YWtNYXBCdWNrZXQ8V2Vha01hcEJ1CiAgICAgICAgIGF1dG8qIGJ1Y2tldCA9IGJ1ZmZlciArIGlu
ZGV4OwogICAgICAgICBpZiAoYnVja2V0LT5pc0VtcHR5KCkgfHwgYnVja2V0LT5pc0RlbGV0ZWQo
KSkKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAoIXZtLmhlYXAuaXNNYXJrZWQo
YnVja2V0LT5rZXkoKSkpCisgICAgICAgIGlmICghdmlzaXRvci5pc01hcmtlZChidWNrZXQtPmtl
eSgpKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBidWNrZXQtPnZpc2l0QWdncmVn
YXRlKHZpc2l0b3IpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1dlYWtNYXBJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvV2Vha01hcEltcGwuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvV2Vha01hcEltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTcgWXVzdWtlIFN1enVraSA8dXRhdGFuZS50
ZWFAZ21haWwuY29tPi4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTE0NSw3ICsxNDUsNyBAQCBwdWJs
aWM6CiAgICAgfQogCiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQgPSBEYXRhPgotICAgIEFMV0FZ
U19JTkxJTkUgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19zYW1lPFQsIFdlYWtNYXBC
dWNrZXREYXRhS2V5VmFsdWU+Ojp2YWx1ZT46OnR5cGUgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0
b3ImIHZpc2l0b3IpCisgICAgQUxXQVlTX0lOTElORSB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxz
dGQ6OmlzX3NhbWU8VCwgV2Vha01hcEJ1Y2tldERhdGFLZXlWYWx1ZT46OnZhbHVlPjo6dHlwZSB2
aXNpdEFnZ3JlZ2F0ZShBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogICAgIHsKICAgICAg
ICAgdmlzaXRvci5hcHBlbmQobV9kYXRhLnZhbHVlKTsKICAgICB9CkBAIC0yMDIsNyArMjAyLDcg
QEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0Rlc3RydWN0aW9uID0g
dHJ1ZTsKICAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwogCi0gICAgc3RhdGljIHZv
aWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVEVN
UExBVEVfVklTSVRfQ0hJTERSRU47CiAKICAgICBzdGF0aWMgc2l6ZV90IGVzdGltYXRlZFNpemUo
SlNDZWxsKiwgVk0mKTsKIApAQCAtMzExLDcgKzMxMSw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0
dXJuIHZtLndlYWtTZXRTcGFjZTxtb2RlPigpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIHZp
c2l0T3V0cHV0Q29uc3RyYWludHMoSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBzdGF0aWMg
dm9pZCB2aXNpdE91dHB1dENvbnN0cmFpbnRzKEpTQ2VsbCosIEFic3RyYWN0U2xvdFZpc2l0b3Im
KTsKICAgICB2b2lkIGZpbmFsaXplVW5jb25kaXRpb25hbGx5KFZNJik7CiAKIHByaXZhdGU6Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvSlNEb2xsYXJWTS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0pTRG9sbGFyVk0uY3BwCShyZXZpc2lv
biAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvSlNEb2xsYXJWTS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1
LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE1LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC0yMjQsMTQgKzIyNCw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQg
ZmluaXNoQ3JlYXRpb24oVk0mLCBSb290Kik7CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxk
cmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCi0gICAgewotICAgICAgICBE
b2xsYXJWTUFzc2VydFNjb3BlIGFzc2VydFNjb3BlOwotICAgICAgICBFbGVtZW50KiB0aGlzT2Jq
ZWN0ID0ganNDYXN0PEVsZW1lbnQqPihjZWxsKTsKLSAgICAgICAgQVNTRVJUX0dDX09CSkVDVF9J
TkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwotICAgICAgICBCYXNlOjp2aXNpdENoaWxkcmVu
KHRoaXNPYmplY3QsIHZpc2l0b3IpOwotICAgICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0
LT5tX3Jvb3QpOwotICAgIH0KKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgc3Rh
dGljIEVsZW1lbnRIYW5kbGVPd25lciogaGFuZGxlT3duZXIoKTsKIApAQCAtMjQ3LDEwICsyNDAs
MjIgQEAgcHJpdmF0ZToKICAgICBXcml0ZUJhcnJpZXI8Um9vdD4gbV9yb290OwogfTsKIAordGVt
cGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgRWxlbWVudDo6dmlzaXRDaGlsZHJlbkltcGwo
SlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIERvbGxhclZNQXNzZXJ0U2Nv
cGUgYXNzZXJ0U2NvcGU7CisgICAgRWxlbWVudCogdGhpc09iamVjdCA9IGpzQ2FzdDxFbGVtZW50
Kj4oY2VsbCk7CisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZv
KCkpOworICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CisgICAg
dmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9yb290KTsKK30KKworREVGSU5FX1ZJU0lUX0NI
SUxEUkVOKEVsZW1lbnQpOworCiBjbGFzcyBFbGVtZW50SGFuZGxlT3duZXIgZmluYWwgOiBwdWJs
aWMgV2Vha0hhbmRsZU93bmVyIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1Ymxp
YzoKLSAgICBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6
VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgU2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIq
KiByZWFzb24pIGZpbmFsCisgICAgYm9vbCBpc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6
OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIEFic3RyYWN0U2xvdFZpc2l0b3Im
IHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pIGZpbmFsCiAgICAgewogICAgICAgICBEb2xs
YXJWTUFzc2VydFNjb3BlIGFzc2VydFNjb3BlOwogICAgICAgICBpZiAoVU5MSUtFTFkocmVhc29u
KSkKQEAgLTMwNCwxOCArMzA5LDIzIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIFN0cnVjdHVy
ZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlw
ZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIHZp
c2l0Q2hpbGRyZW4oSlNDZWxsKiB0aGlzT2JqZWN0LCBTbG90VmlzaXRvciYgdmlzaXRvcikKLSAg
ICB7Ci0gICAgICAgIERvbGxhclZNQXNzZXJ0U2NvcGUgYXNzZXJ0U2NvcGU7Ci0gICAgICAgIEFT
U0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKLSAgICAgICAgQmFz
ZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKLSAgICAgICAgdmlzaXRvci5h
ZGRPcGFxdWVSb290KHRoaXNPYmplY3QpOwotICAgIH0KKyAgICBERUNMQVJFX1ZJU0lUX0NISUxE
UkVOOwogCiBwcml2YXRlOgogICAgIFdlYWs8RWxlbWVudD4gbV9lbGVtZW50OwogfTsKIAordGVt
cGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgUm9vdDo6dmlzaXRDaGlsZHJlbkltcGwoSlND
ZWxsKiB0aGlzT2JqZWN0LCBWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIERvbGxhclZNQXNzZXJ0
U2NvcGUgYXNzZXJ0U2NvcGU7CisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2Jq
ZWN0LCBpbmZvKCkpOworICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRv
cik7CisgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHRoaXNPYmplY3QpOworfQorCitERUZJTkVf
VklTSVRfQ0hJTERSRU4oUm9vdCk7CisKIGNsYXNzIFNpbXBsZU9iamVjdCA6IHB1YmxpYyBKU05v
bkZpbmFsT2JqZWN0IHsKIHB1YmxpYzoKICAgICBTaW1wbGVPYmplY3QoVk0mIHZtLCBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSkKQEAgLTM0MCwxNCArMzUwLDcgQEAgcHVibGljOgogICAgICAgICByZXR1
cm4gc2ltcGxlT2JqZWN0OwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4o
SlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKLSAgICB7Ci0gICAgICAgIERvbGxh
clZNQXNzZXJ0U2NvcGUgYXNzZXJ0U2NvcGU7Ci0gICAgICAgIFNpbXBsZU9iamVjdCogdGhpc09i
amVjdCA9IGpzQ2FzdDxTaW1wbGVPYmplY3QqPihjZWxsKTsKLSAgICAgICAgQVNTRVJUX0dDX09C
SkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwotICAgICAgICBCYXNlOjp2aXNpdENo
aWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwotICAgICAgICB2aXNpdG9yLmFwcGVuZCh0aGlz
T2JqZWN0LT5tX2hpZGRlblZhbHVlKTsKLSAgICB9CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJF
TjsKIAogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQogICAgIHsKQEAgLTM4
MCw2ICszODMsMTggQEAgcHJpdmF0ZToKICAgICBXcml0ZUJhcnJpZXI8SlNDOjpVbmtub3duPiBt
X2hpZGRlblZhbHVlOwogfTsKIAordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgU2lt
cGxlT2JqZWN0Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0
b3IpCit7CisgICAgRG9sbGFyVk1Bc3NlcnRTY29wZSBhc3NlcnRTY29wZTsKKyAgICBTaW1wbGVP
YmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8U2ltcGxlT2JqZWN0Kj4oY2VsbCk7CisgICAgQVNT
RVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOworICAgIEJhc2U6OnZp
c2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CisgICAgdmlzaXRvci5hcHBlbmQodGhp
c09iamVjdC0+bV9oaWRkZW5WYWx1ZSk7Cit9CisKK0RFRklORV9WSVNJVF9DSElMRFJFTihTaW1w
bGVPYmplY3QpOworCiBjbGFzcyBJbXB1cmVHZXR0ZXIgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVj
dCB7CiBwdWJsaWM6CiAgICAgSW1wdXJlR2V0dGVyKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUpCkBAIC00MzYsMTQgKzQ1MSw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIEJhc2U6Omdl
dE93blByb3BlcnR5U2xvdChvYmplY3QsIGdsb2JhbE9iamVjdCwgbmFtZSwgc2xvdCk7CiAgICAg
fQogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNp
dG9yJiB2aXNpdG9yKQotICAgIHsKLSAgICAgICAgRG9sbGFyVk1Bc3NlcnRTY29wZSBhc3NlcnRT
Y29wZTsKLSAgICAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjZWxsLCBpbmZvKCkpOwot
ICAgICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKGNlbGwsIHZpc2l0b3IpOwotICAgICAgICBJbXB1
cmVHZXR0ZXIqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SW1wdXJlR2V0dGVyKj4oY2VsbCk7Ci0gICAg
ICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fZGVsZWdhdGUpOwotICAgIH0KKyAgICBE
RUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgdm9pZCBzZXREZWxlZ2F0ZShWTSYgdm0sIEpT
T2JqZWN0KiBkZWxlZ2F0ZSkKICAgICB7CkBAIC00NTQsNiArNDYyLDE4IEBAIHByaXZhdGU6CiAg
ICAgV3JpdGVCYXJyaWVyPEpTT2JqZWN0PiBtX2RlbGVnYXRlOwogfTsKIAordGVtcGxhdGU8dHlw
ZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSW1wdXJlR2V0dGVyOjp2aXNpdENoaWxkcmVuSW1wbChKU0Nl
bGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgRG9sbGFyVk1Bc3NlcnRTY29wZSBh
c3NlcnRTY29wZTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNlbGwsIGluZm8oKSk7
CisgICAgQmFzZTo6dmlzaXRDaGlsZHJlbihjZWxsLCB2aXNpdG9yKTsKKyAgICBJbXB1cmVHZXR0
ZXIqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SW1wdXJlR2V0dGVyKj4oY2VsbCk7CisgICAgdmlzaXRv
ci5hcHBlbmQodGhpc09iamVjdC0+bV9kZWxlZ2F0ZSk7Cit9CisKK0RFRklORV9WSVNJVF9DSElM
RFJFTihJbXB1cmVHZXR0ZXIpOworCiBzdGF0aWMgSlNDX0RFQ0xBUkVfQ1VTVE9NX0dFVFRFUihj
dXN0b21HZXR0ZXJWYWx1ZUdldHRlcik7CiBzdGF0aWMgSlNDX0RFQ0xBUkVfQ1VTVE9NX0dFVFRF
UihjdXN0b21HZXR0ZXJBY2Vzc29yR2V0dGVyKTsKIApAQCAtMTgyMiwxNCArMTg0Miw3IEBAIHB1
YmxpYzoKICAgICAgICAgcHV0RGlyZWN0TmF0aXZlRnVuY3Rpb24odm0sIGdsb2JhbE9iamVjdCwg
SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImFkZEJ5dGVzIiksIDAsIGZ1bmN0aW9uV2FzbVN0
cmVhbWluZ0NvbXBpbGVyQWRkQnl0ZXMsIE5vSW50cmluc2ljLCBzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSk7CiAgICAgfQogCi0gICAgc3RhdGljIHZv
aWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQotICAg
IHsKLSAgICAgICAgRG9sbGFyVk1Bc3NlcnRTY29wZSBhc3NlcnRTY29wZTsKLSAgICAgICAgYXV0
byogdGhpc09iamVjdCA9IGpzQ2FzdDxXYXNtU3RyZWFtaW5nQ29tcGlsZXIqPihjZWxsKTsKLSAg
ICAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwotICAg
ICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwotICAgICAgICB2
aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX3Byb21pc2UpOwotICAgIH0KKyAgICBERUNMQVJF
X1ZJU0lUX0NISUxEUkVOOwogCiAgICAgREVDTEFSRV9JTkZPOwogCkBAIC0xODM3LDYgKzE4NTAs
MTggQEAgcHVibGljOgogICAgIFJlZjxXYXNtOjpTdHJlYW1pbmdDb21waWxlcj4gbV9zdHJlYW1p
bmdDb21waWxlcjsKIH07CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFdhc21T
dHJlYW1pbmdDb21waWxlcjo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9y
JiB2aXNpdG9yKQoreworICAgIERvbGxhclZNQXNzZXJ0U2NvcGUgYXNzZXJ0U2NvcGU7CisgICAg
YXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxXYXNtU3RyZWFtaW5nQ29tcGlsZXIqPihjZWxsKTsK
KyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CisgICAg
QmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKKyAgICB2aXNpdG9yLmFw
cGVuZCh0aGlzT2JqZWN0LT5tX3Byb21pc2UpOworfQorCitERUZJTkVfVklTSVRfQ0hJTERSRU4o
V2FzbVN0cmVhbWluZ0NvbXBpbGVyKTsKKwogY29uc3QgQ2xhc3NJbmZvIFdhc21TdHJlYW1pbmdD
b21waWxlcjo6c19pbmZvID0geyAiV2FzbVN0cmVhbWluZ0NvbXBpbGVyIiwgJkJhc2U6OnNfaW5m
bywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShXYXNtU3RyZWFtaW5nQ29t
cGlsZXIpIH07CiAKIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihmdW5jdGlvbldhc21TdHJlYW1p
bmdDb21waWxlckFkZEJ5dGVzLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZy
YW1lKiBjYWxsRnJhbWUpKQpAQCAtMzY5OSwxMyArMzcyNCwxNiBAQCB2b2lkIEpTRG9sbGFyVk06
OmFkZENvbnN0cnVjdGlibGVGdW5jdGlvCiAgICAgcHV0RGlyZWN0KHZtLCBpZGVudGlmaWVyLCBK
U0Z1bmN0aW9uOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgYXJndW1lbnRzLCBpZGVudGlmaWVy
LnN0cmluZygpLCBmdW5jdGlvbiwgTm9JbnRyaW5zaWMsIGZ1bmN0aW9uKSwganNEb2xsYXJWTVBy
b3BlcnR5QXR0cmlidXRlcyk7CiB9CiAKLXZvaWQgSlNEb2xsYXJWTTo6dmlzaXRDaGlsZHJlbihK
U0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlz
aXRvcj4KK3ZvaWQgSlNEb2xsYXJWTTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBW
aXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTRG9sbGFyVk0qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8
SlNEb2xsYXJWTSo+KGNlbGwpOwogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwg
dmlzaXRvcik7CiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9vYmplY3REb2luZ1Np
ZGVFZmZlY3RQdXRXaXRob3V0Q29ycmVjdFNsb3RTdGF0dXNTdHJ1Y3R1cmUpOwogfQogCitERUZJ
TkVfVklTSVRfQ0hJTERSRU4oSlNEb2xsYXJWTSk7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiBJ
R05PUkVfV0FSTklOR1NfRU5ECkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvSlNE
b2xsYXJWTS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9KU0Rv
bGxhclZNLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29s
cy9KU0RvbGxhclZNLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDE1LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE1LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03NCw3ICs3NCw3IEBAIHByaXZhdGU6
CiAgICAgdm9pZCBhZGRGdW5jdGlvbihWTSYsIEpTR2xvYmFsT2JqZWN0KiwgY29uc3QgY2hhciog
bmFtZSwgTmF0aXZlRnVuY3Rpb24sIHVuc2lnbmVkIGFyZ3VtZW50cyk7CiAgICAgdm9pZCBhZGRD
b25zdHJ1Y3RpYmxlRnVuY3Rpb24oVk0mLCBKU0dsb2JhbE9iamVjdCosIGNvbnN0IGNoYXIqIG5h
bWUsIE5hdGl2ZUZ1bmN0aW9uLCB1bnNpZ25lZCBhcmd1bWVudHMpOwogCi0gICAgc3RhdGljIHZv
aWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklT
SVRfQ0hJTERSRU47CiAKICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX29iamVjdERvaW5n
U2lkZUVmZmVjdFB1dFdpdGhvdXRDb3JyZWN0U2xvdFN0YXR1c1N0cnVjdHVyZTsKIH07CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtR2xvYmFsLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtR2xvYmFsLmNwcAkocmV2aXNpb24gMjcy
ODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUdsb2JhbC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOS0yMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMTAzLDcgKzEwMyw4IEBAIHZvaWQgR2xvYmFsOjpzZXQoSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE8KICAgICB9CiB9CiAKLXZvaWQgR2xvYmFsOjp2aXNpdEFnZ3JlZ2F0ZShTbG90Vmlz
aXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEdsb2JhbDo6
dmlzaXRBZ2dyZWdhdGUoVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBzd2l0Y2ggKG1fdHlwZSkg
ewogICAgIGNhc2UgV2FzbTo6VHlwZTo6RXh0ZXJucmVmOgpAQCAtMTE3LDYgKzExOCw5IEBAIHZv
aWQgR2xvYmFsOjp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYKICAgICB9CiB9CiAKK3RlbXBs
YXRlIHZvaWQgR2xvYmFsOjp2aXNpdEFnZ3JlZ2F0ZShBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0
ZW1wbGF0ZSB2b2lkIEdsb2JhbDo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImKTsKKwogfSB9
IC8vIG5hbWVzcGFjZSBKU0M6Okdsb2JhbAogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZ
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUdsb2JhbC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21HbG9iYWwuaAkocmV2aXNpb24g
MjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUdsb2JhbC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNy0yMDE4
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0y
MDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtNTcsNyArNTcsNyBAQCBwdWJsaWM6CiAgICAgSlNWYWx1ZSBnZXQoSlNH
bG9iYWxPYmplY3QqKSBjb25zdDsKICAgICB1aW50NjRfdCBnZXRQcmltaXRpdmUoKSBjb25zdCB7
IHJldHVybiBtX3ZhbHVlLm1fcHJpbWl0aXZlOyB9CiAgICAgdm9pZCBzZXQoSlNHbG9iYWxPYmpl
Y3QqLCBKU1ZhbHVlKTsKLSAgICB2b2lkIHZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJik7Cisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCB2aXNpdEFnZ3JlZ2F0ZShWaXNpdG9y
Jik7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBUKiBvd25lcigpIGNvbnN0IHsgcmV0dXJu
IHJlaW50ZXJwcmV0X2Nhc3Q8VCo+KG1fb3duZXIpOyB9CiAgICAgdm9pZCBzZXRPd25lcihKU09i
amVjdCogb3duZXIpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGFibGUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UYWJsZS5j
cHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21U
YWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDE3LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xNjYsNyArMTY2LDggQEAgSlNWYWx1ZSBUYWJs
ZTo6Z2V0KHVpbnQzMl90IGluZGV4KSBjb25zdAogICAgIHJldHVybiBtX2pzVmFsdWVzLmdldCgp
W2luZGV4ICYgbV9tYXNrXS5nZXQoKTsKIH0KIAotdm9pZCBUYWJsZTo6dmlzaXRBZ2dyZWdhdGUo
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBU
YWJsZTo6dmlzaXRBZ2dyZWdhdGUoVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBSRUxFQVNFX0FT
U0VSVChtX293bmVyKTsKICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fb3duZXItPmNlbGxM
b2NrKCkpOwpAQCAtMTc0LDYgKzE3NSw5IEBAIHZvaWQgVGFibGU6OnZpc2l0QWdncmVnYXRlKFNs
b3RWaXNpdG9yJiAKICAgICAgICAgdmlzaXRvci5hcHBlbmQobV9qc1ZhbHVlcy5nZXQoKVtpXSk7
CiB9CiAKK3RlbXBsYXRlIHZvaWQgVGFibGU6OnZpc2l0QWdncmVnYXRlKEFic3RyYWN0U2xvdFZp
c2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgVGFibGU6OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9y
Jik7CisKIFR5cGUgVGFibGU6Ondhc21UeXBlKCkgY29uc3QKIHsKICAgICBpZiAoaXNFeHRlcm5y
ZWZUYWJsZSgpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRhYmxlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRhYmxlLmgJKHJl
dmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UYWJsZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
Ny0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtODAsNyArODAsNyBAQCBwdWJsaWM6CiAgICAgT3B0aW9uYWw8
dWludDMyX3Q+IGdyb3codWludDMyX3QgZGVsdGEsIEpTVmFsdWUgZGVmYXVsdFZhbHVlKTsKICAg
ICB2b2lkIGNvcHkoY29uc3QgVGFibGUqIHNyY1RhYmxlLCB1aW50MzJfdCBkc3RJbmRleCwgdWlu
dDMyX3Qgc3JjSW5kZXgpOwogCi0gICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYp
OworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgdmlzaXRBZ2dyZWdhdGUoVmlz
aXRvciYpOwogCiBwcm90ZWN0ZWQ6CiAgICAgVGFibGUodWludDMyX3QgaW5pdGlhbCwgT3B0aW9u
YWw8dWludDMyX3Q+IG1heGltdW0sIFRhYmxlRWxlbWVudFR5cGUgPSBUYWJsZUVsZW1lbnRUeXBl
OjpFeHRlcm5yZWYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNUb1dh
c21JQ0NhbGxlZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
anMvSlNUb1dhc21JQ0NhbGxlZS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2pzL0pTVG9XYXNtSUNDYWxsZWUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ5
LDcgKzQ5LDggQEAgU3RydWN0dXJlKiBKU1RvV2FzbUlDQ2FsbGVlOjpjcmVhdGVTdHJ1YwogICAg
IHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5
cGVJbmZvKEpTQ2FsbGVlVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwogfQogCi12b2lk
IEpTVG9XYXNtSUNDYWxsZWU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRv
ciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTVG9XYXNtSUND
YWxsZWU6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikK
IHsKICAgICBKU1RvV2FzbUlDQ2FsbGVlKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVG9XYXNtSUND
YWxsZWUqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3Qs
IGluZm8oKSk7CkBAIC01OCw2ICs1OSw4IEBAIHZvaWQgSlNUb1dhc21JQ0NhbGxlZTo6dmlzaXRD
aGlsZHJlbihKU0MKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2Z1bmN0aW9uKTsK
IH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTVG9XYXNtSUNDYWxsZWUpOworCiB9IC8vIG5h
bWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTVG9XYXNtSUNDYWxsZWUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1RvV2FzbUlDQ2FsbGVlLmgJKHJldmlz
aW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTVG9XYXNtSUND
YWxsZWUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE5LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC01Niw3ICs1Niw3IEBAIHByaXZhdGU6CiAgICAgSlNUb1dh
c21JQ0NhbGxlZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVy
ZSogc3RydWN0dXJlKQogICAgICAgICA6IEJhc2Uodm0sIGdsb2JhbE9iamVjdCwgc3RydWN0dXJl
KQogICAgIHsgfQotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZp
c2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgV3JpdGVCYXJyaWVy
PFdlYkFzc2VtYmx5RnVuY3Rpb24+IG1fZnVuY3Rpb247CiB9OwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9jay5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9jay5j
cHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pT
V2ViQXNzZW1ibHlDb2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNy0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODIsNyArODIsOCBA
QCB2b2lkIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6OmNsZWFySlNDYWxsCiAgICAgICAgICgqaXRl
ciktPnVubGluayh2bSk7CiB9CiAKLXZvaWQgSlNXZWJBc3NlbWJseUNvZGVCbG9jazo6dmlzaXRD
aGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlw
ZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNXZWJBc3NlbWJseUNvZGVCbG9jazo6dmlzaXRDaGlsZHJl
bkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTV2ViQXNzZW1i
bHlDb2RlQmxvY2sqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNXZWJBc3NlbWJseUNvZGVCbG9jayo+
KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygp
KTsKQEAgLTkwLDYgKzkxLDggQEAgdm9pZCBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrOjp2aXNpdENo
aWxkcgogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CiB9CiAK
K0RFRklORV9WSVNJVF9DSElMRFJFTihKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKTsKKwogdm9pZCBK
U1dlYkFzc2VtYmx5Q29kZUJsb2NrOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxseShWTSYgdm0pCiB7
CiAgICAgZm9yIChhdXRvIGl0ZXIgPSBtX2NhbGxMaW5rSW5mb3MuYmVnaW4oKTsgISFpdGVyOyAr
K2l0ZXIpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5
Q29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
SlNXZWJBc3NlbWJseUNvZGVCbG9jay5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjAgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC04Niw3ICs4Niw3IEBAIHByaXZhdGU6CiAgICAgREVDTEFSRV9FWFBPUlRfSU5GTzsK
ICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNEZXN0cnVjdGlvbiA9IHRydWU7CiAgICAg
c3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxk
cmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsK
IAogICAgIFJlZjxXYXNtOjpDb2RlQmxvY2s+IG1fY29kZUJsb2NrOwogICAgIFZlY3RvcjxNYWNy
b0Fzc2VtYmxlckNvZGVSZWY8V2FzbUVudHJ5UHRyVGFnPj4gbV93YXNtVG9KU0V4aXRTdHViczsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlHbG9iYWwu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNz
ZW1ibHlHbG9iYWwuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5R2xvYmFsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE5LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03MSw3ICs3
MSw4IEBAIHZvaWQgSlNXZWJBc3NlbWJseUdsb2JhbDo6ZGVzdHJveShKU0NlbGwKICAgICBzdGF0
aWNfY2FzdDxKU1dlYkFzc2VtYmx5R2xvYmFsKj4oY2VsbCktPkpTV2ViQXNzZW1ibHlHbG9iYWw6
On5KU1dlYkFzc2VtYmx5R2xvYmFsKCk7CiB9CiAKLXZvaWQgSlNXZWJBc3NlbWJseUdsb2JhbDo6
dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxh
dGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNXZWJBc3NlbWJseUdsb2JhbDo6dmlzaXRDaGls
ZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTV2ViQXNz
ZW1ibHlHbG9iYWwqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNXZWJBc3NlbWJseUdsb2JhbCo+KGNl
bGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsK
QEAgLTgwLDYgKzgxLDggQEAgdm9pZCBKU1dlYkFzc2VtYmx5R2xvYmFsOjp2aXNpdENoaWxkcmVu
KAogICAgIHRoaXNPYmplY3QtPmdsb2JhbCgpLT52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKIH0K
IAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTV2ViQXNzZW1ibHlHbG9iYWwpOworCiB9IC8vIG5h
bWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlHbG9iYWwuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5R2xvYmFsLmgJ
KHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2Vi
QXNzZW1ibHlHbG9iYWwuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE5LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01OSw3ICs1OSw3IEBAIHB1YmxpYzoKIHBy
aXZhdGU6CiAgICAgSlNXZWJBc3NlbWJseUdsb2JhbChWTSYsIFN0cnVjdHVyZSosIFJlZjxXYXNt
OjpHbG9iYWw+JiYpOwogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKLSAgICBzdGF0aWMg
dm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9W
SVNJVF9DSElMRFJFTjsKIAogICAgIFJlZjxXYXNtOjpHbG9iYWw+IG1fZ2xvYmFsOwogfTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3Nl
bWJseUluc3RhbmNlLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxOSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTczLDcgKzczLDggQEAgdm9pZCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OmRlc3Ryb3koSlNDZQog
ICAgIHN0YXRpY19jYXN0PEpTV2ViQXNzZW1ibHlJbnN0YW5jZSo+KGNlbGwpLT5KU1dlYkFzc2Vt
Ymx5SW5zdGFuY2U6On5KU1dlYkFzc2VtYmx5SW5zdGFuY2UoKTsKIH0KIAotdm9pZCBKU1dlYkFz
c2VtYmx5SW5zdGFuY2U6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYg
dmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTV2ViQXNzZW1ibHlJ
bnN0YW5jZTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9y
KQogewogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNXZWJBc3NlbWJseUluc3RhbmNl
Kj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZv
KCkpOwpAQCAtMTAyLDYgKzEwMyw4IEBAIHZvaWQgSlNXZWJBc3NlbWJseUluc3RhbmNlOjp2aXNp
dENoaWxkcmUKICAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZCh3cmFwcGVyLmdldCgp
KTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTV2ViQXNzZW1ibHlJbnN0YW5jZSk7CisK
IHZvaWQgSlNXZWJBc3NlbWJseUluc3RhbmNlOjpmaW5hbGl6ZUNyZWF0aW9uKFZNJiB2bSwgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmPFdhc206OkNvZGVCbG9jaz4mJiB3YXNtQ29k
ZUJsb2NrLCBKU09iamVjdCogaW1wb3J0T2JqZWN0LCBXYXNtOjpDcmVhdGlvbk1vZGUgY3JlYXRp
b25Nb2RlKQogewogICAgIG1faW5zdGFuY2UtPmZpbmFsaXplQ3JlYXRpb24odGhpcywgd2FzbUNv
ZGVCbG9jay5jb3B5UmVmKCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
SlNXZWJBc3NlbWJseUluc3RhbmNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmgJKHJldmlzaW9uIDI3MjgzMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNi0y
MDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
Ni0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMTA1LDcgKzEwNSw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAg
SlNXZWJBc3NlbWJseUluc3RhbmNlKFZNJiwgU3RydWN0dXJlKiwgUmVmPFdhc206Okluc3RhbmNl
PiYmKTsKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgSlNXZWJBc3NlbWJseU1vZHVsZSos
IFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkKik7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJl
bihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAK
ICAgICBSZWY8V2FzbTo6SW5zdGFuY2U+IG1faW5zdGFuY2U7CiAgICAgVk0qIG1fdm07CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TWVtb3J5LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5
TWVtb3J5LmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vanMvSlNXZWJBc3NlbWJseU1lbW9yeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xNTksNyAr
MTU5LDggQEAgdm9pZCBKU1dlYkFzc2VtYmx5TWVtb3J5OjpkZXN0cm95KEpTQ2VsbAogICAgIG1l
bW9yeS0+SlNXZWJBc3NlbWJseU1lbW9yeTo6fkpTV2ViQXNzZW1ibHlNZW1vcnkoKTsKIH0KIAot
dm9pZCBKU1dlYkFzc2VtYmx5TWVtb3J5Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xv
dFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1dl
YkFzc2VtYmx5TWVtb3J5Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3Im
IHZpc2l0b3IpCiB7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1dlYkFzc2VtYmx5
TWVtb3J5Kj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0
LCBpbmZvKCkpOwpAQCAtMTY5LDYgKzE3MCw4IEBAIHZvaWQgSlNXZWJBc3NlbWJseU1lbW9yeTo6
dmlzaXRDaGlsZHJlbigKICAgICB2aXNpdG9yLnJlcG9ydEV4dHJhTWVtb3J5VmlzaXRlZCh0aGlz
T2JqZWN0LT5tZW1vcnkoKS5zaXplKCkpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNX
ZWJBc3NlbWJseU1lbW9yeSk7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gRU5B
QkxFKFdFQkFTU0VNQkxZKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNX
ZWJBc3NlbWJseU1lbW9yeS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL2pzL0pTV2ViQXNzZW1ibHlNZW1vcnkuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1lbW9yeS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE5IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtNjMsNyArNjMsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIEpTV2ViQXNzZW1i
bHlNZW1vcnkoVk0mLCBTdHJ1Y3R1cmUqKTsKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7
Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwor
ICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBSZWY8V2FzbTo6TWVtb3J5PiBtX21l
bW9yeTsKICAgICBXcml0ZUJhcnJpZXI8SlNBcnJheUJ1ZmZlcj4gbV9idWZmZXJXcmFwcGVyOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3Nl
bWJseU1vZHVsZS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTI0
LDcgKzEyNCw4IEBAIHZvaWQgSlNXZWJBc3NlbWJseU1vZHVsZTo6c2V0Q29kZUJsb2NrKFYKICAg
ICBtX2NvZGVCbG9ja3Nbc3RhdGljX2Nhc3Q8c2l6ZV90Pihtb2RlKV0uc2V0KHZtLCB0aGlzLCBj
b2RlQmxvY2spOwogfQogCi12b2lkIEpTV2ViQXNzZW1ibHlNb2R1bGU6OnZpc2l0Q2hpbGRyZW4o
SlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZp
c2l0b3I+Cit2b2lkIEpTV2ViQXNzZW1ibHlNb2R1bGU6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2Vs
bCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU1dlYkFzc2VtYmx5TW9kdWxlKiB0
aGlzT2JqZWN0ID0ganNDYXN0PEpTV2ViQXNzZW1ibHlNb2R1bGUqPihjZWxsKTsKICAgICBBU1NF
UlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC0xMzUsNiArMTM2
LDggQEAgdm9pZCBKU1dlYkFzc2VtYmx5TW9kdWxlOjp2aXNpdENoaWxkcmVuKAogICAgICAgICB2
aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2NvZGVCbG9ja3NbaV0pOwogfQogCitERUZJTkVf
VklTSVRfQ0hJTERSRU4oSlNXZWJBc3NlbWJseU1vZHVsZSk7CisKIH0gLy8gbmFtZXNwYWNlIEpT
QwogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuaAkocmV2aXNpb24g
MjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1v
ZHVsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxNi0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODAsNyArODAsNyBAQCBwcml2YXRlOgogCiAgICAg
SlNXZWJBc3NlbWJseU1vZHVsZShWTSYsIFN0cnVjdHVyZSosIFJlZjxXYXNtOjpNb2R1bGU+JiYp
OwogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENo
aWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJF
TjsKIAogICAgIFJlZjxXYXNtOjpNb2R1bGU+IG1fbW9kdWxlOwogICAgIFdyaXRlQmFycmllcjxT
eW1ib2xUYWJsZT4gbV9leHBvcnRTeW1ib2xUYWJsZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlUYWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseVRhYmxlLmNwcAkocmV2aXNpb24g
MjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseVRh
YmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTYtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTcyLDcgKzcyLDggQEAgdm9pZCBKU1dlYkFzc2Vt
Ymx5VGFibGU6OmRlc3Ryb3koSlNDZWxsKgogICAgIHN0YXRpY19jYXN0PEpTV2ViQXNzZW1ibHlU
YWJsZSo+KGNlbGwpLT5KU1dlYkFzc2VtYmx5VGFibGU6On5KU1dlYkFzc2VtYmx5VGFibGUoKTsK
IH0KIAotdm9pZCBKU1dlYkFzc2VtYmx5VGFibGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxs
LCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lk
IEpTV2ViQXNzZW1ibHlUYWJsZTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNp
dG9yJiB2aXNpdG9yKQogewogICAgIEpTV2ViQXNzZW1ibHlUYWJsZSogdGhpc09iamVjdCA9IGpz
Q2FzdDxKU1dlYkFzc2VtYmx5VGFibGUqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lO
SEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC04MSw2ICs4Miw4IEBAIHZvaWQgSlNXZWJB
c3NlbWJseVRhYmxlOjp2aXNpdENoaWxkcmVuKEoKICAgICB0aGlzT2JqZWN0LT50YWJsZSgpLT52
aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTV2Vi
QXNzZW1ibHlUYWJsZSk7CisKIGJvb2wgSlNXZWJBc3NlbWJseVRhYmxlOjpncm93KHVpbnQzMl90
IGRlbHRhLCBKU1ZhbHVlIGRlZmF1bHRWYWx1ZSkKIHsKICAgICBpZiAoZGVsdGEgPT0gMCkKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlUYWJsZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlU
YWJsZS5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9KU1dlYkFzc2VtYmx5VGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTcwLDcgKzcwLDcgQEAg
cHVibGljOgogcHJpdmF0ZToKICAgICBKU1dlYkFzc2VtYmx5VGFibGUoVk0mLCBTdHJ1Y3R1cmUq
LCBSZWY8V2FzbTo6VGFibGU+JiYpOwogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKLSAg
ICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAg
REVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIFJlZjxXYXNtOjpUYWJsZT4gbV90YWJsZTsK
IH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0
aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJB
c3NlbWJseUZ1bmN0aW9uLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjAgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC00NTIsNyArNDUyLDggQEAgV2ViQXNzZW1ibHlGdW5jdGlvbjo6V2ViQXNzZW1ibHlGdW5jdGlv
bgogICAgICwgbV9pbXBvcnRhYmxlRnVuY3Rpb24geyBzaWduYXR1cmVJbmRleCwgd2FzbVRvV2Fz
bUVudHJ5cG9pbnRMb2FkTG9jYXRpb24gfQogeyB9CiAKLXZvaWQgV2ViQXNzZW1ibHlGdW5jdGlv
bjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVt
cGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgV2ViQXNzZW1ibHlGdW5jdGlvbjo6dmlzaXRD
aGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFdlYkFz
c2VtYmx5RnVuY3Rpb24qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8V2ViQXNzZW1ibHlGdW5jdGlvbio+
KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygp
KTsKQEAgLTQ2MSw2ICs0NjIsOCBAQCB2b2lkIFdlYkFzc2VtYmx5RnVuY3Rpb246OnZpc2l0Q2hp
bGRyZW4oCiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9qc1RvV2FzbUlDQ2FsbGVl
KTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKFdlYkFzc2VtYmx5RnVuY3Rpb24pOworCiB2
b2lkIFdlYkFzc2VtYmx5RnVuY3Rpb246OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQogewogICAgIHN0
YXRpY19jYXN0PFdlYkFzc2VtYmx5RnVuY3Rpb24qPihjZWxsKS0+V2ViQXNzZW1ibHlGdW5jdGlv
bjo6fldlYkFzc2VtYmx5RnVuY3Rpb24oKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmgJKHJldmlzaW9uIDI3MjgzMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uaAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYt
MjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTg2LDcgKzg2LDcgQEAgcHVibGljOgogICAgIFdhc206Okluc3Rh
bmNlKiBwcmV2aW91c0luc3RhbmNlKENhbGxGcmFtZSopOwogCiBwcml2YXRlOgotICAgIHN0YXRp
YyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJF
X1ZJU0lUX0NISUxEUkVOOwogICAgIFdlYkFzc2VtYmx5RnVuY3Rpb24oVk0mLCBOYXRpdmVFeGVj
dXRhYmxlKiwgSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqLCBXYXNtOjpDYWxsZWUmIGpzRW50
cnlwb2ludCwgV2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbjo6TG9hZExvY2F0aW9uIGVudHJ5
cG9pbnRMb2FkTG9jYXRpb24sIFdhc206OlNpZ25hdHVyZUluZGV4KTsKIAogICAgIE1hY3JvQXNz
ZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBqc0NhbGxFbnRyeXBvaW50U2xvdygpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbkJhc2Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2Vt
Ymx5RnVuY3Rpb25CYXNlLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbkJhc2UuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTQxLDcgKzQxLDggQEAgV2ViQXNzZW1ibHlGdW5jdGlvbkJhc2U6OldlYkFzc2VtYmx5RnVuYwog
ICAgIDogQmFzZSh2bSwgZXhlY3V0YWJsZSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUpCiB7IH0K
IAotdm9pZCBXZWJBc3NlbWJseUZ1bmN0aW9uQmFzZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNl
bGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3Zv
aWQgV2ViQXNzZW1ibHlGdW5jdGlvbkJhc2U6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2Vs
bCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBXZWJBc3NlbWJseUZ1bmN0aW9uQmFzZSogdGhp
c09iamVjdCA9IGpzQ2FzdDxXZWJBc3NlbWJseUZ1bmN0aW9uQmFzZSo+KGNlbGwpOwogICAgIEFT
U0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTQ5LDYgKzUw
LDggQEAgdm9pZCBXZWJBc3NlbWJseUZ1bmN0aW9uQmFzZTo6dmlzaXRDaGlsZAogICAgIHZpc2l0
b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1faW5zdGFuY2UpOwogfQogCitERUZJTkVfVklTSVRfQ0hJ
TERSRU4oV2ViQXNzZW1ibHlGdW5jdGlvbkJhc2UpOworCiB2b2lkIFdlYkFzc2VtYmx5RnVuY3Rp
b25CYXNlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIE5hdGl2ZUV4ZWN1dGFibGUqIGV4ZWN1dGFi
bGUsIHVuc2lnbmVkIGxlbmd0aCwgY29uc3QgU3RyaW5nJiBuYW1lLCBKU1dlYkFzc2VtYmx5SW5z
dGFuY2UqIGluc3RhbmNlKQogewogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtLCBleGVjdXRh
YmxlLCBsZW5ndGgsIG5hbWUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
V2ViQXNzZW1ibHlGdW5jdGlvbkJhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uQmFzZS5oCShyZXZpc2lvbiAyNzI4MzAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uQmFz
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxNy0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDYsNyArNDYsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGlj
IHB0cmRpZmZfdCBvZmZzZXRPZkluc3RhbmNlKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFdl
YkFzc2VtYmx5RnVuY3Rpb25CYXNlLCBtX2luc3RhbmNlKTsgfQogCiBwcm90ZWN0ZWQ6Ci0gICAg
c3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERF
Q0xBUkVfVklTSVRfQ0hJTERSRU47CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIE5hdGl2
ZUV4ZWN1dGFibGUqLCB1bnNpZ25lZCBsZW5ndGgsIGNvbnN0IFN0cmluZyYgbmFtZSwgSlNXZWJB
c3NlbWJseUluc3RhbmNlKik7CiAgICAgV2ViQXNzZW1ibHlGdW5jdGlvbkJhc2UoVk0mLCBOYXRp
dmVFeGVjdXRhYmxlKiwgSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqKTsKIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9k
dWxlUmVjb3JkLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE5IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
NzgsNyArNzgsOCBAQCB2b2lkIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpmaW5pc2hDcmVhCiAg
ICAgfQogfQogCi12b2lkIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjp2aXNpdENoaWxkcmVuKEpT
Q2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNp
dG9yPgordm9pZCBXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6dmlzaXRDaGlsZHJlbkltcGwoSlND
ZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFdlYkFzc2VtYmx5TW9kdWxlUmVj
b3JkKiB0aGlzT2JqZWN0ID0ganNDYXN0PFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkKj4oY2VsbCk7
CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAt
ODgsNiArODksOCBAQCB2b2lkIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjp2aXNpdENoaWxkCiAg
ICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9leHBvcnRzT2JqZWN0KTsKIH0KIAorREVG
SU5FX1ZJU0lUX0NISUxEUkVOKFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkKTsKKwogdm9pZCBXZWJB
c3NlbWJseU1vZHVsZVJlY29yZDo6cHJlcGFyZUxpbmsoVk0mIHZtLCBKU1dlYkFzc2VtYmx5SW5z
dGFuY2UqIGluc3RhbmNlKQogewogICAgIFJFTEVBU0VfQVNTRVJUKCFtX2luc3RhbmNlKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3Jk
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1i
bHlNb2R1bGVSZWNvcmQuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuaAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxOSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTY5LDcgKzY5LDcgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNHbG9i
YWxPYmplY3QqLCBWTSYsIGNvbnN0IFdhc206Ok1vZHVsZUluZm9ybWF0aW9uJik7CiAKLSAgICBz
dGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVD
TEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIFdyaXRlQmFycmllcjxKU1dlYkFzc2VtYmx5SW5z
dGFuY2U+IG1faW5zdGFuY2U7CiAgICAgV3JpdGVCYXJyaWVyPEpTT2JqZWN0PiBtX3N0YXJ0RnVu
Y3Rpb247CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVdy
YXBwZXJGdW5jdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vanMvV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uY3BwCShyZXZpc2lvbiAyNzI4MzApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlv
bi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDE3LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02Nyw3ICs2Nyw4IEBAIFN0cnVjdHVyZSogV2ViQXNz
ZW1ibHlXcmFwcGVyRnVuY3Rpb246OmMKICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0s
IGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhKU0Z1bmN0aW9uVHlwZSwgU3RydWN0
dXJlRmxhZ3MpLCBpbmZvKCkpOwogfQogCi12b2lkIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9u
Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1w
bGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbjo6
dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAg
IFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uKiB0aGlzT2JqZWN0ID0ganNDYXN0PFdlYkFzc2Vt
Ymx5V3JhcHBlckZ1bmN0aW9uKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklU
Uyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNzYsNiArNzcsOCBAQCB2b2lkIFdlYkFzc2VtYmx5
V3JhcHBlckZ1bmN0aW9uOjp2aXNpdENoCiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+
bV9mdW5jdGlvbik7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihXZWJBc3NlbWJseVdyYXBw
ZXJGdW5jdGlvbik7CisKIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihjYWxsV2ViQXNzZW1ibHlX
cmFwcGVyRnVuY3Rpb24sIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUq
IGNhbGxGcmFtZSkpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24u
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJs
eVdyYXBwZXJGdW5jdGlvbi5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNy0yMDE5IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIxIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtNTksNyArNTksNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIFdlYkFzc2VtYmx5V3Jh
cHBlckZ1bmN0aW9uKFZNJiwgTmF0aXZlRXhlY3V0YWJsZSosIEpTR2xvYmFsT2JqZWN0KiwgU3Ry
dWN0dXJlKiwgV2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbik7CiAgICAgdm9pZCBmaW5pc2hD
cmVhdGlvbihWTSYsIE5hdGl2ZUV4ZWN1dGFibGUqLCB1bnNpZ25lZCBsZW5ndGgsIGNvbnN0IFN0
cmluZyYgbmFtZSwgSlNPYmplY3QqLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqKTsKLSAgICBzdGF0
aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFS
RV9WSVNJVF9DSElMRFJFTjsKIAogICAgIFdyaXRlQmFycmllcjxKU09iamVjdD4gbV9mdW5jdGlv
bjsKICAgICAvLyBJdCdzIHNhZmUgdG8ganVzdCBob2xkIHRoZSByYXcgV2FzbVRvV2FzbUltcG9y
dGFibGVGdW5jdGlvbiBiZWNhdXNlIHdlIGhhdmUgYSByZWZlcmVuY2UKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5jcHAJKHJl
dmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9i
amVjdFN0b3JlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE1LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03MjgsNyArNzI4LDggQEAgdm9pZCBJREJPYmpl
Y3RTdG9yZTo6cm9sbGJhY2tGb3JWZXJzaW9uQwogICAgIH0KIH0KIAotdm9pZCBJREJPYmplY3RT
dG9yZTo6dmlzaXRSZWZlcmVuY2VkSW5kZXhlcyhTbG90VmlzaXRvciYgdmlzaXRvcikgY29uc3QK
K3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIElEQk9iamVjdFN0b3JlOjp2aXNpdFJl
ZmVyZW5jZWRJbmRleGVzKFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0CiB7CiAgICAgTG9ja2VyPExv
Y2s+IGxvY2tlcihtX3JlZmVyZW5jZWRJbmRleExvY2spOwogICAgIGZvciAoYXV0byYgaW5kZXgg
OiBtX3JlZmVyZW5jZWRJbmRleGVzLnZhbHVlcygpKQpAQCAtNzM3LDYgKzczOCw5IEBAIHZvaWQg
SURCT2JqZWN0U3RvcmU6OnZpc2l0UmVmZXJlbmNlZEluZGUKICAgICAgICAgdmlzaXRvci5hZGRP
cGFxdWVSb290KGluZGV4LmdldCgpKTsKIH0KIAordGVtcGxhdGUgdm9pZCBJREJPYmplY3RTdG9y
ZTo6dmlzaXRSZWZlcmVuY2VkSW5kZXhlcyhBYnN0cmFjdFNsb3RWaXNpdG9yJikgY29uc3Q7Cit0
ZW1wbGF0ZSB2b2lkIElEQk9iamVjdFN0b3JlOjp2aXNpdFJlZmVyZW5jZWRJbmRleGVzKFNsb3RW
aXNpdG9yJikgY29uc3Q7CisKIHZvaWQgSURCT2JqZWN0U3RvcmU6OnJlbmFtZVJlZmVyZW5jZWRJ
bmRleChJREJJbmRleCYgaW5kZXgsIGNvbnN0IFN0cmluZyYgbmV3TmFtZSkKIHsKICAgICBMT0co
SW5kZXhlZERCLCAiSURCT2JqZWN0U3RvcmU6OnJlbmFtZVJlZmVyZW5jZWRJbmRleCIpOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9y
ZS5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJPYmplY3RTdG9yZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEwOSw3ICsxMDksNyBAQCBwdWJsaWM6
CiAgICAgdm9pZCByZWYoKTsKICAgICB2b2lkIGRlcmVmKCk7CiAKLSAgICB2b2lkIHZpc2l0UmVm
ZXJlbmNlZEluZGV4ZXMoSlNDOjpTbG90VmlzaXRvciYpIGNvbnN0OworICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFZpc2l0b3I+IHZvaWQgdmlzaXRSZWZlcmVuY2VkSW5kZXhlcyhWaXNpdG9yJikgY29u
c3Q7CiAgICAgdm9pZCByZW5hbWVSZWZlcmVuY2VkSW5kZXgoSURCSW5kZXgmLCBjb25zdCBTdHJp
bmcmIG5ld05hbWUpOwogCiBwcml2YXRlOgpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCVHJhbnNhY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmNwcAkocmV2aXNpb24gMjcyODMwKQor
KysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb24uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0y
MDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
NS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMTQ1NSw3ICsxNDU1LDggQEAgdm9pZCBJREJUcmFuc2FjdGlvbjo6
Y29ubmVjdGlvbkNsb3NlZEZybwogICAgIGZpcmVPbkFib3J0KCk7CiB9CiAKLXZvaWQgSURCVHJh
bnNhY3Rpb246OnZpc2l0UmVmZXJlbmNlZE9iamVjdFN0b3JlcyhKU0M6OlNsb3RWaXNpdG9yJiB2
aXNpdG9yKSBjb25zdAordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSURCVHJhbnNh
Y3Rpb246OnZpc2l0UmVmZXJlbmNlZE9iamVjdFN0b3JlcyhWaXNpdG9yJiB2aXNpdG9yKSBjb25z
dAogewogICAgIExvY2tlcjxMb2NrPiBsb2NrZXIobV9yZWZlcmVuY2VkT2JqZWN0U3RvcmVMb2Nr
KTsKICAgICBmb3IgKGF1dG8mIG9iamVjdFN0b3JlIDogbV9yZWZlcmVuY2VkT2JqZWN0U3RvcmVz
LnZhbHVlcygpKQpAQCAtMTQ2NCw2ICsxNDY1LDkgQEAgdm9pZCBJREJUcmFuc2FjdGlvbjo6dmlz
aXRSZWZlcmVuY2VkT2JqZQogICAgICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qob2JqZWN0U3Rv
cmUuZ2V0KCkpOwogfQogCit0ZW1wbGF0ZSB2b2lkIElEQlRyYW5zYWN0aW9uOjp2aXNpdFJlZmVy
ZW5jZWRPYmplY3RTdG9yZXMoSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJikgY29uc3Q7Cit0ZW1w
bGF0ZSB2b2lkIElEQlRyYW5zYWN0aW9uOjp2aXNpdFJlZmVyZW5jZWRPYmplY3RTdG9yZXMoSlND
OjpTbG90VmlzaXRvciYpIGNvbnN0OworCiB2b2lkIElEQlRyYW5zYWN0aW9uOjpoYW5kbGVQZW5k
aW5nT3BlcmF0aW9ucygpCiB7CiAgICAgQVNTRVJUKGNhbkN1cnJlbnRUaHJlYWRBY2Nlc3NUaHJl
YWRMb2NhbERhdGEobV9kYXRhYmFzZS0+b3JpZ2luVGhyZWFkKCkpKTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb24uaAkocmV2aXNp
b24gMjcyODMwKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNh
Y3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE1LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0xNDksNyArMTQ5LDcgQEAgcHVibGljOgogCiAgICAgdm9p
ZCBjb25uZWN0aW9uQ2xvc2VkRnJvbVNlcnZlcihjb25zdCBJREJFcnJvciYpOwogCi0gICAgdm9p
ZCB2aXNpdFJlZmVyZW5jZWRPYmplY3RTdG9yZXMoSlNDOjpTbG90VmlzaXRvciYpIGNvbnN0Owor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgdmlzaXRSZWZlcmVuY2VkT2JqZWN0
U3RvcmVzKFZpc2l0b3ImKSBjb25zdDsKIAogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBzdGQ6
OmF0b21pYzx1bnNpZ25lZD4gbnVtYmVyT2ZJREJUcmFuc2FjdGlvbnM7CiAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9CdWZmZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9CdWZmZXIuY3BwCShyZXZpc2lv
biAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQnVmZmVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMp
IDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTE1NCwxMiArMTU0LDE2IEBAIEV4Y2VwdGlvbk9yPEpTQzo6SlNW
YWx1ZT4gQXVkaW9CdWZmZXI6OmcKICAgICByZXR1cm4gY29uc3RydWN0SlNBcnJheSgpOwogfQog
Ci12b2lkIEF1ZGlvQnVmZmVyOjp2aXNpdENoYW5uZWxXcmFwcGVycyhKU0M6OlNsb3RWaXNpdG9y
JiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgQXVkaW9CdWZmZXI6
OnZpc2l0Q2hhbm5lbFdyYXBwZXJzKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgZm9yIChhdXRv
JiBjaGFubmVsV3JhcHBlciA6IG1fY2hhbm5lbFdyYXBwZXJzKQogICAgICAgICBjaGFubmVsV3Jh
cHBlci52aXNpdCh2aXNpdG9yKTsKIH0KIAordGVtcGxhdGUgdm9pZCBBdWRpb0J1ZmZlcjo6dmlz
aXRDaGFubmVsV3JhcHBlcnMoSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2
b2lkIEF1ZGlvQnVmZmVyOjp2aXNpdENoYW5uZWxXcmFwcGVycyhKU0M6OlNsb3RWaXNpdG9yJik7
CisKIFJlZlB0cjxGbG9hdDMyQXJyYXk+IEF1ZGlvQnVmZmVyOjpjaGFubmVsRGF0YSh1bnNpZ25l
ZCBjaGFubmVsSW5kZXgpCiB7CiAgICAgaWYgKGNoYW5uZWxJbmRleCA+PSBtX2NoYW5uZWxzLnNp
emUoKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9CdWZmZXIu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQnVm
ZmVyLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVk
aW8vQXVkaW9CdWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBD
b3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTc1LDcgKzc1LDcgQEAgcHVibGljOgogCiAg
ICAgc2l6ZV90IG1lbW9yeUNvc3QoKSBjb25zdDsKIAotICAgIHZvaWQgdmlzaXRDaGFubmVsV3Jh
cHBlcnMoSlNDOjpTbG90VmlzaXRvciYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+
IHZvaWQgdmlzaXRDaGFubmVsV3JhcHBlcnMoVmlzaXRvciYpOwogICAgIAogcHJpdmF0ZToKICAg
ICBBdWRpb0J1ZmZlcih1bnNpZ25lZCBudW1iZXJPZkNoYW5uZWxzLCBzaXplX3QgbGVuZ3RoLCBm
bG9hdCBzYW1wbGVSYXRlLCBMZWdhY3lQcmV2ZW50RGV0YWNoaW5nID0gTGVnYWN5UHJldmVudERl
dGFjaGluZzo6Tm8pOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvRE9NR0NPdXRw
dXRDb25zdHJhaW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9ET01HQ091dHB1dENvbnN0cmFpbnQuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9ET01HQ091dHB1dENvbnN0cmFpbnQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00OSw3ICs0OSw3IEBAIERPTUdDT3V0cHV0Q29uc3RyYWludDo6fkRPTUdDT3V0cHV0
Q29uc3QKIHsKIH0KIAotdm9pZCBET01HQ091dHB1dENvbnN0cmFpbnQ6OmV4ZWN1dGVJbXBsKFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBET01HQ091dHB1dENvbnN0cmFpbnQ6OmV4ZWN1dGVJ
bXBsKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSGVhcCYgaGVhcCA9IG1f
dm0uaGVhcDsKICAgICAKQEAgLTYwLDcgKzYwLDcgQEAgdm9pZCBET01HQ091dHB1dENvbnN0cmFp
bnQ6OmV4ZWN1dGVJbXBsKAogICAgIAogICAgIG1fY2xpZW50RGF0YS5mb3JFYWNoT3V0cHV0Q29u
c3RyYWludFNwYWNlKAogICAgICAgICBbJl0gKFN1YnNwYWNlJiBzdWJzcGFjZSkgewotICAgICAg
ICAgICAgYXV0byBmdW5jID0gW10gKFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBIZWFwQ2VsbCogaGVh
cENlbGwsIEhlYXBDZWxsOjpLaW5kKSB7CisgICAgICAgICAgICBhdXRvIGZ1bmMgPSBbXSAoQWJz
dHJhY3RTbG90VmlzaXRvciYgdmlzaXRvciwgSGVhcENlbGwqIGhlYXBDZWxsLCBIZWFwQ2VsbDo6
S2luZCkgewogICAgICAgICAgICAgICAgIFNldFJvb3RNYXJrUmVhc29uU2NvcGUgcm9vdFNjb3Bl
KHZpc2l0b3IsIFJvb3RNYXJrUmVhc29uOjpET01HQ091dHB1dCk7CiAgICAgICAgICAgICAgICAg
SlNDZWxsKiBjZWxsID0gc3RhdGljX2Nhc3Q8SlNDZWxsKj4oaGVhcENlbGwpOwogICAgICAgICAg
ICAgICAgIGNlbGwtPm1ldGhvZFRhYmxlKHZpc2l0b3Iudm0oKSktPnZpc2l0T3V0cHV0Q29uc3Ry
YWludHMoY2VsbCwgdmlzaXRvcik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9E
T01HQ091dHB1dENvbnN0cmFpbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9ET01HQ091dHB1dENvbnN0cmFpbnQuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvRE9NR0NPdXRwdXRDb25zdHJhaW50LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMTggQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC00Miw3ICs0Miw3IEBAIHB1YmxpYzoKICAgICB+RE9NR0NPdXRwdXRDb25zdHJh
aW50KCk7CiAgICAgCiBwcm90ZWN0ZWQ6Ci0gICAgdm9pZCBleGVjdXRlSW1wbChKU0M6OlNsb3RW
aXNpdG9yJikgb3ZlcnJpZGU7CisgICAgdm9pZCBleGVjdXRlSW1wbChKU0M6OkFic3RyYWN0U2xv
dFZpc2l0b3ImKSBvdmVycmlkZTsKIAogcHJpdmF0ZToKICAgICBKU0M6OlZNJiBtX3ZtOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNBYm9ydENvbnRyb2xsZXJDdXN0b20uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQWJvcnRDb250cm9s
bGVyQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNBYm9ydENvbnRyb2xsZXJDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyogQ29weXJpZ2h0IChDKSAyMDE5LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogKgogKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOCw5ICsyOCwxMyBA
QAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgSlNBYm9ydENvbnRyb2xsZXI6OnZpc2l0
QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0
eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0Fib3J0Q29udHJvbGxlcjo6dmlzaXRBZGRpdGlvbmFs
Q2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qo
JndyYXBwZWQoKS5zaWduYWwoKSk7CiB9CiAKK3RlbXBsYXRlIHZvaWQgSlNBYm9ydENvbnRyb2xs
ZXI6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpOwor
dGVtcGxhdGUgdm9pZCBKU0Fib3J0Q29udHJvbGxlcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4o
SlNDOjpTbG90VmlzaXRvciYpOworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Fib3J0U2lnbmFsQ3VzdG9tLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Fib3J0U2lnbmFsQ3VzdG9tLmNwcAko
cmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNBYm9ydFNp
Z25hbEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotKiBDb3B5
cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKiBDb3B5cmln
aHQgKEMpIDIwMTktMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAqCiAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI4LDcgKzI4LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi1ib29sIEpTQWJvcnRTaWduYWxPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9v
dHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBKU0M6OlNsb3RWaXNp
dG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQorYm9vbCBKU0Fib3J0U2lnbmFsT3du
ZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4g
aGFuZGxlLCB2b2lkKiwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBj
aGFyKiogcmVhc29uKQogewogICAgIGF1dG8mIGFib3J0U2lnbmFsID0gSlNDOjpqc0Nhc3Q8SlNB
Ym9ydFNpZ25hbCo+KGhhbmRsZS5zbG90KCktPmFzQ2VsbCgpKS0+d3JhcHBlZCgpOwogICAgIGlm
IChhYm9ydFNpZ25hbC5pc0ZpcmluZ0V2ZW50TGlzdGVuZXJzKCkpIHsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXR0ckN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNBdHRyQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcyODMwKQor
KysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNBdHRyQ3VzdG9tLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIw
MDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3
LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0zMywxMCArMzMsMTQgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci12b2lkIEpTQXR0cjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYg
dmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTQXR0cjo6dmlzaXRB
ZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBpZiAoRWxlbWVudCog
ZWxlbWVudCA9IHdyYXBwZWQoKS5vd25lckVsZW1lbnQoKSkKICAgICAgICAgdmlzaXRvci5hZGRP
cGFxdWVSb290KHJvb3QoZWxlbWVudCkpOwogfQogCit0ZW1wbGF0ZSB2b2lkIEpTQXR0cjo6dmlz
aXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0
ZSB2b2lkIEpTQXR0cjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYp
OworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0F1ZGlvQnVmZmVyQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0F1ZGlvQnVmZmVyQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcyODMwKQor
KysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNBdWRpb0J1ZmZlckN1c3RvbS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDIwIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMC0yMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMzEsMTEgKzMxLDE1IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBu
YW1lc3BhY2UgSlNDOwogCi12b2lkIEpTQXVkaW9CdWZmZXI6OnZpc2l0QWRkaXRpb25hbENoaWxk
cmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3Zv
aWQgSlNBdWRpb0J1ZmZlcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRv
cikKIHsKICAgICB3cmFwcGVkKCkudmlzaXRDaGFubmVsV3JhcHBlcnModmlzaXRvcik7CiB9CiAK
K3RlbXBsYXRlIHZvaWQgSlNBdWRpb0J1ZmZlcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oQWJz
dHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU0F1ZGlvQnVmZmVyOjp2aXNpdEFk
ZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYpOworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CiAKICNlbmRpZiAvLyBFTkFCTEUoV0VCX0FVRElPKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNBdWRpb1RyYWNrQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0F1ZGlvVHJhY2tDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI4MzAp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0F1ZGlvVHJhY2tDdXN0b20uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTM1LDExICszNSwxNSBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogdXNpbmcg
bmFtZXNwYWNlIEpTQzsKIAotdm9pZCBKU0F1ZGlvVHJhY2s6OnZpc2l0QWRkaXRpb25hbENoaWxk
cmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3Zv
aWQgSlNBdWRpb1RyYWNrOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9y
KQogewogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChyb290KCZ3cmFwcGVkKCkpKTsKIH0KIAor
dGVtcGxhdGUgdm9pZCBKU0F1ZGlvVHJhY2s6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEFic3Ry
YWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNBdWRpb1RyYWNrOjp2aXNpdEFkZGl0
aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYpOworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAK
ICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNBdWRpb1RyYWNrTGlz
dEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNB
dWRpb1RyYWNrTGlzdEN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTQXVkaW9UcmFja0xpc3RDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTM2LDExICszNiwxNSBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogdXNpbmcgbmFtZXNwYWNlIEpT
QzsKIAotdm9pZCBKU0F1ZGlvVHJhY2tMaXN0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90
VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTQXVk
aW9UcmFja0xpc3Q6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7
CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHJvb3Qod3JhcHBlZCgpLmVsZW1lbnQoKSkpOwog
fQogCit0ZW1wbGF0ZSB2b2lkIEpTQXVkaW9UcmFja0xpc3Q6OnZpc2l0QWRkaXRpb25hbENoaWxk
cmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNBdWRpb1RyYWNrTGlz
dDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKKwogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQogCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
QXVkaW9Xb3JrbGV0UHJvY2Vzc29yQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0F1ZGlvV29ya2xldFByb2Nlc3NvckN1c3RvbS5jcHAJKHJldmlz
aW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXVkaW9Xb3JrbGV0
UHJvY2Vzc29yQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDIwLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMSw3ICszMSw4IEBACiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCi12b2lkIEpTQXVkaW9Xb3JrbGV0
UHJvY2Vzc29yOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikK
K3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTQXVkaW9Xb3JrbGV0UHJvY2Vzc29y
Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGF1dG8m
IHByb2Nlc3NvciA9IHdyYXBwZWQoKTsKICAgICBwcm9jZXNzb3IuanNJbnB1dHNXcmFwcGVyKCku
dmlzaXQodmlzaXRvcik7CkBAIC0zOSw2ICs0MCw5IEBAIHZvaWQgSlNBdWRpb1dvcmtsZXRQcm9j
ZXNzb3I6OnZpc2l0QWRkaXQKICAgICBwcm9jZXNzb3IuanNQYXJhbVZhbHVlc1dyYXBwZXIoKS52
aXNpdCh2aXNpdG9yKTsKIH0KIAordGVtcGxhdGUgdm9pZCBKU0F1ZGlvV29ya2xldFByb2Nlc3Nv
cjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oQWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxh
dGUgdm9pZCBKU0F1ZGlvV29ya2xldFByb2Nlc3Nvcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4o
U2xvdFZpc2l0b3ImKTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5B
QkxFKFdFQl9BVURJTykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ1NTUnVs
ZUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlND
U1NSdWxlQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNDU1NSdWxlQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01MSwxMSAr
NTEsMTUgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKLXZv
aWQgSlNDU1NSdWxlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRv
cikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTQ1NTUnVsZTo6dmlzaXRBZGRp
dGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB2aXNpdG9yLmFkZE9wYXF1
ZVJvb3Qocm9vdCgmd3JhcHBlZCgpKSk7CiB9CiAKK3RlbXBsYXRlIHZvaWQgSlNDU1NSdWxlOjp2
aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2
b2lkIEpTQ1NTUnVsZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKKwog
SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTR2xvYmFsT2JqZWN0KiwgSlNET01HbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgUmVmPENTU1J1bGU+JiYgcnVsZSkKIHsKICAgICBzd2l0Y2ggKHJ1
bGUtPnR5cGUoKSkgewpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDU1NSdWxl
TGlzdEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNDU1NSdWxlTGlzdEN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTQ1NTUnVsZUxpc3RDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOS0yMDE5IEFwcGxlIEluYy4g
QWxsIHJpZ2h0IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHQgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTM2LDcgKzM2LDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBKU0M7
CiAKLWJvb2wgSlNDU1NSdWxlTGlzdE93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhK
U0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIFNsb3RWaXNpdG9yJiB2aXNp
dG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQorYm9vbCBKU0NTU1J1bGVMaXN0T3duZXI6OmlzUmVh
Y2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2
b2lkKiwgQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikK
IHsKICAgICBKU0NTU1J1bGVMaXN0KiBqc0NTU1J1bGVMaXN0ID0ganNDYXN0PEpTQ1NTUnVsZUxp
c3QqPihoYW5kbGUuc2xvdCgpLT5hc0NlbGwoKSk7CiAgICAgaWYgKCFqc0NTU1J1bGVMaXN0LT5o
YXNDdXN0b21Qcm9wZXJ0aWVzKGpzQ1NTUnVsZUxpc3QtPnZtKCkpKQpJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNDU1NTdHlsZURlY2xhcmF0aW9uQ3VzdG9tLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NTU1N0eWxlRGVjbGFyYXRpb25D
dXN0b20uY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0NTU1N0eWxlRGVjbGFyYXRpb25DdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNy0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTEs
OSArNTEsMTMgQEAgdm9pZCogcm9vdChDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSkKICAgICBy
ZXR1cm4gc3R5bGU7CiB9CiAKLXZvaWQgSlNDU1NTdHlsZURlY2xhcmF0aW9uOjp2aXNpdEFkZGl0
aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZp
c2l0b3I+Cit2b2lkIEpTQ1NTU3R5bGVEZWNsYXJhdGlvbjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRy
ZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qocm9vdCgm
d3JhcHBlZCgpKSk7CiB9CiAKK3RlbXBsYXRlIHZvaWQgSlNDU1NTdHlsZURlY2xhcmF0aW9uOjp2
aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2
b2lkIEpTQ1NTU3R5bGVEZWNsYXJhdGlvbjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZp
c2l0b3ImKTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNDYWxsYmFja0RhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTQ2FsbGJhY2tEYXRhLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDYWxsYmFja0RhdGEuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA5LCAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNy0y
MDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtOTUsMTIgKzk1LDE2IEBAIEpTVmFsdWUgSlNDYWxsYmFja0RhdGE6Omlu
dm9rZUNhbGxiYWNrKEoKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi12b2lkIEpTQ2FsbGJhY2tE
YXRhV2Vhazo6dmlzaXRKU0Z1bmN0aW9uKEpTQzo6U2xvdFZpc2l0b3ImIHZpc3RvcikKK3RlbXBs
YXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTQ2FsbGJhY2tEYXRhV2Vhazo6dmlzaXRKU0Z1
bmN0aW9uKFZpc2l0b3ImIHZpc2l0b3IpCiB7Ci0gICAgdmlzdG9yLmFwcGVuZChtX2NhbGxiYWNr
KTsKKyAgICB2aXNpdG9yLmFwcGVuZChtX2NhbGxiYWNrKTsKIH0KIAotYm9vbCBKU0NhbGxiYWNr
RGF0YVdlYWs6OldlYWtPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5k
bGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNv
bnN0IGNoYXIqKiByZWFzb24pCit0ZW1wbGF0ZSB2b2lkIEpTQ2FsbGJhY2tEYXRhV2Vhazo6dmlz
aXRKU0Z1bmN0aW9uKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBK
U0NhbGxiYWNrRGF0YVdlYWs6OnZpc2l0SlNGdW5jdGlvbihKU0M6OlNsb3RWaXNpdG9yJik7CisK
K2Jvb2wgSlNDYWxsYmFja0RhdGFXZWFrOjpXZWFrT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1
ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIEFic3RyYWN0
U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCiB7CiAgICAgaWYgKFVO
TElLRUxZKHJlYXNvbikpCiAgICAgICAgICpyZWFzb24gPSAiQ29udGV4dCBpcyBvcGFxdWUgcm9v
dCI7IC8vIEZJWE1FOiB3aGF0IGlzIHRoZSBjb250ZXh0LgpJbmRleDogU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNDYWxsYmFja0RhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0NhbGxiYWNrRGF0YS5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NhbGxiYWNrRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA5LCAyMDE1IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMTEzLDExICsxMTMsMTEgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gSlNDYWxs
YmFja0RhdGE6Omludm9rZUNhbGxiYWNrKCpnbG9iYWxPYmplY3QsIGNhbGxiYWNrKCksIHRoaXNW
YWx1ZSwgYXJncywgY2FsbGJhY2tUeXBlLCBmdW5jdGlvbk5hbWUsIHJldHVybmVkRXhjZXB0aW9u
KTsKICAgICB9CiAKLSAgICB2b2lkIHZpc2l0SlNGdW5jdGlvbihKU0M6OlNsb3RWaXNpdG9yJik7
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCB2aXNpdEpTRnVuY3Rpb24oVmlz
aXRvciYpOwogCiBwcml2YXRlOgogICAgIGNsYXNzIFdlYWtPd25lciA6IHB1YmxpYyBKU0M6Oldl
YWtIYW5kbGVPd25lciB7Ci0gICAgICAgIGJvb2wgaXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMo
SlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCwgSlNDOjpTbG90VmlzaXRv
ciYsIGNvbnN0IGNoYXIqKikgb3ZlcnJpZGU7CisgICAgICAgIGJvb2wgaXNSZWFjaGFibGVGcm9t
T3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCwgSlND
OjpBYnN0cmFjdFNsb3RWaXNpdG9yJiwgY29uc3QgY2hhcioqKSBvdmVycmlkZTsKICAgICB9Owog
ICAgIFdlYWtPd25lciBtX3dlYWtPd25lcjsKICAgICBKU0M6OldlYWs8SlNDOjpKU09iamVjdD4g
bV9jYWxsYmFjazsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREN1c3RvbS5jcHAJKHJldmlzaW9u
IDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDJEQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI0LDcgKzI0LDcgQEAKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi1ib29sIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJET3duZXI6OmlzUmVhY2hh
YmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lk
KiwgSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikKK2Jvb2wg
SlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9v
dHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBKU0M6OkFic3RyYWN0
U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCiB7CiAgICAgaWYgKFVO
TElLRUxZKHJlYXNvbikpCiAgICAgICAgICpyZWFzb24gPSAiQ2FudmFzIGlzIG9wYXF1ZSByb290
IjsKQEAgLTM0LDkgKzM0LDEzIEBAIGJvb2wgSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRPd25l
cjo6aXMKICAgICByZXR1cm4gdmlzaXRvci5jb250YWluc09wYXF1ZVJvb3Qocm9vdCk7CiB9CiAK
LXZvaWQgSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVu
KEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgor
dm9pZCBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4o
VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qocm9vdCh3cmFw
cGVkKCkuY2FudmFzKCkpKTsKIH0KIAordGVtcGxhdGUgdm9pZCBKU0NhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyRDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9y
Jik7Cit0ZW1wbGF0ZSB2b2lkIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjp2aXNpdEFkZGl0
aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJik7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9tRXZlbnRDdXN0b20u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9tRXZl
bnRDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0N1c3RvbUV2ZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQyLDEwICs0
MiwxNCBAQCBKU0M6OkpTVmFsdWUgSlNDdXN0b21FdmVudDo6ZGV0YWlsKEpTQzo6CiAgICAgfSk7
CiB9CiAKLXZvaWQgSlNDdXN0b21FdmVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpT
bG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpT
Q3VzdG9tRXZlbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7
CiAgICAgd3JhcHBlZCgpLmRldGFpbCgpLnZpc2l0KHZpc2l0b3IpOwogICAgIHdyYXBwZWQoKS5j
YWNoZWREZXRhaWwoKS52aXNpdCh2aXNpdG9yKTsKIH0KIAordGVtcGxhdGUgdm9pZCBKU0N1c3Rv
bUV2ZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3Im
KTsKK3RlbXBsYXRlIHZvaWQgSlNDdXN0b21FdmVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4o
SlNDOjpTbG90VmlzaXRvciYpOworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJ1aWx0aW5Db25zdHJ1Y3RvckJhc2UuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQnVpbHRpbkNvbnN0
cnVjdG9yQmFzZS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTRE9NQnVpbHRpbkNvbnN0cnVjdG9yQmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNiArMSw2IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAxIEhhcnJpIFBvcnRl
biAocG9ydGVuQGtkZS5vcmcpCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA0LTIwMTcgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwNC0yMDIxIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqICBDb3B5cmlnaHQgKEMpIDIwMDcgU2FtdWVs
IFdlaW5pZyA8c2FtQHdlYmtpdC5vcmc+CiAgKiAgQ29weXJpZ2h0IChDKSAyMDEzIE1pY2hhZWwg
UHJ1ZXR0IDxtaWNoYWVsQDY4ay5vcmc+CiAgKgpAQCAtNDUsNyArNDUsOCBAQCB2b2lkIEpTRE9N
QnVpbHRpbkNvbnN0cnVjdG9yQmFzZTo6Y2FsbEZ1CiAgICAgSlNDOjpjYWxsKCZsZXhpY2FsR2xv
YmFsT2JqZWN0LCAmZnVuY3Rpb24sIGNhbGxEYXRhLCAmdGhpc09iamVjdCwgYXJndW1lbnRzKTsK
IH0KIAotdm9pZCBKU0RPTUJ1aWx0aW5Db25zdHJ1Y3RvckJhc2U6OnZpc2l0Q2hpbGRyZW4oSlND
OjpKU0NlbGwqIGNlbGwsIEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBl
bmFtZSBWaXNpdG9yPgordm9pZCBKU0RPTUJ1aWx0aW5Db25zdHJ1Y3RvckJhc2U6OnZpc2l0Q2hp
bGRyZW5JbXBsKEpTQzo6SlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGF1
dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNET01CdWlsdGluQ29uc3RydWN0b3JCYXNlKj4oY2Vs
bCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpA
QCAtNTMsNiArNTQsOCBAQCB2b2lkIEpTRE9NQnVpbHRpbkNvbnN0cnVjdG9yQmFzZTo6dmlzaXRD
CiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9pbml0aWFsaXplRnVuY3Rpb24pOwog
fQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNET01CdWlsdGluQ29uc3RydWN0b3JCYXNlKTsK
KwogSlNDOjpJc29TdWJzcGFjZSogSlNET01CdWlsdGluQ29uc3RydWN0b3JCYXNlOjpzdWJzcGFj
ZUZvckltcGwoSlNDOjpWTSYgdm0pCiB7CiAgICAgcmV0dXJuICZzdGF0aWNfY2FzdDxKU1ZNQ2xp
ZW50RGF0YSo+KHZtLmNsaWVudERhdGEpLT5kb21CdWlsdGluQ29uc3RydWN0b3JTcGFjZSgpOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CdWlsdGluQ29uc3RydWN0b3JC
YXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CdWls
dGluQ29uc3RydWN0b3JCYXNlLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTRE9NQnVpbHRpbkNvbnN0cnVjdG9yQmFzZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDYgKzEsNiBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDIwMTUsIDIwMTYgQ2Fub24g
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDE2LTIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwpAQCAtNDIs
NyArNDIsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgewogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIHZp
c2l0Q2hpbGRyZW4oSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJik7CisgICAgREVDTEFS
RV9WSVNJVF9DSElMRFJFTjsKIAogICAgIEpTQzo6SlNGdW5jdGlvbiogaW5pdGlhbGl6ZUZ1bmN0
aW9uKCk7CiAgICAgdm9pZCBzZXRJbml0aWFsaXplRnVuY3Rpb24oSlNDOjpWTSYsIEpTQzo6SlNG
dW5jdGlvbiYpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01HbG9iYWxP
YmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9N
R2xvYmFsT2JqZWN0LmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNET01HbG9iYWxPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOC0yMDE4IEFwcGxlIEluYy4gQWxsIFJpZ2h0
cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDIxIEFwcGxlIEluYy4gQWxsIFJp
Z2h0cyBSZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjM4LDcg
KzIzOCw4IEBAIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIEpTRE9NR2xvYmFsT2JqZWMKICAgICBy
ZXR1cm4gbnVsbHB0cjsKIH0KIAotdm9pZCBKU0RPTUdsb2JhbE9iamVjdDo6dmlzaXRDaGlsZHJl
bihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUg
VmlzaXRvcj4KK3ZvaWQgSlNET01HbG9iYWxPYmplY3Q6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2Vs
bCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU0RPTUdsb2JhbE9iamVjdCogdGhp
c09iamVjdCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGNlbGwpOwogICAgIEFTU0VSVF9H
Q19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTI2MCw2ICsyNjEsOCBA
QCB2b2lkIEpTRE9NR2xvYmFsT2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTCiAgICAgdGhpc09iamVj
dC0+bV9idWlsdGluSW50ZXJuYWxGdW5jdGlvbnMudmlzaXQodmlzaXRvcik7CiB9CiAKK0RFRklO
RV9WSVNJVF9DSElMRFJFTihKU0RPTUdsb2JhbE9iamVjdCk7CisKIHZvaWQgSlNET01HbG9iYWxP
YmplY3Q6OnByb21pc2VSZWplY3Rpb25UcmFja2VyKEpTR2xvYmFsT2JqZWN0KiBqc0dsb2JhbE9i
amVjdCwgSlNQcm9taXNlKiBwcm9taXNlLCBKU1Byb21pc2VSZWplY3Rpb25PcGVyYXRpb24gb3Bl
cmF0aW9uKQogewogICAgIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdl
L3dlYmFwcGFwaXMuaHRtbCN0aGUtaG9zdHByb21pc2VyZWplY3Rpb250cmFja2VyLWltcGxlbWVu
dGF0aW9uCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVj
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFs
T2JqZWN0LmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTRE9NR2xvYmFsT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTggQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMjEgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02OSw3ICs2OSw3IEBAIHB1
YmxpYzoKICAgICAvLyBNYWtlIGJpbmRpbmcgY29kZSBnZW5lcmF0aW9uIGVhc2llci4KICAgICBK
U0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KCkgeyByZXR1cm4gdGhpczsgfQogCi0gICAg
c3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3Im
KTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgRE9NV3JhcHBlcldvcmxkJiB3
b3JsZCgpIHsgcmV0dXJuIG1fd29ybGQuZ2V0KCk7IH0KICAgICBib29sIHdvcmxkSXNOb3JtYWwo
KSBjb25zdCB7IHJldHVybiBtX3dvcmxkSXNOb3JtYWw7IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTRE9NR3VhcmRlZE9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR3VhcmRlZE9iamVjdC5oCShyZXZpc2lvbiAyNzI4MzAp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUd1YXJkZWRPYmplY3QuaAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC00MSw2ICs0MSw3IEBAIHB1YmxpYzoKICAgICBib29sIGlzU3VzcGVuZGVkKCkg
Y29uc3QgeyByZXR1cm4gIW1fZ3VhcmRlZCB8fCAhY2FuSW52b2tlQ2FsbGJhY2soKTsgfSAvLyBU
aGUgd3JhcHBlciB3b3JsZCBoYXMgZ29uZSBhd2F5IG9yIGFjdGl2ZSBET00gb2JqZWN0cyBoYXZl
IGJlZW4gc3VzcGVuZGVkLgogCiAgICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShKU0M6OlNsb3RWaXNp
dG9yJiB2aXNpdG9yKSB7IHZpc2l0b3IuYXBwZW5kKG1fZ3VhcmRlZCk7IH0KKyAgICB2b2lkIHZp
c2l0QWdncmVnYXRlKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikgeyB2aXNpdG9y
LmFwcGVuZChtX2d1YXJkZWQpOyB9CiAKICAgICBKU0M6OkpTVmFsdWUgZ3VhcmRlZE9iamVjdCgp
IGNvbnN0IHsgcmV0dXJuIG1fZ3VhcmRlZC5nZXQoKTsgfQogICAgIEpTRE9NR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QoKSBjb25zdCB7IHJldHVybiBtX2dsb2JhbE9iamVjdC5nZXQoKTsgfQpJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01RdWFkQ3VzdG9tLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVF1YWRDdXN0b20uY3Bw
CShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVF1
YWRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMzLDcgKzMzLDggQEAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKLXZvaWQgSlNET01RdWFkOjp2aXNpdEFkZGl0
aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZp
c2l0b3I+Cit2b2lkIEpTRE9NUXVhZDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYg
dmlzaXRvcikKIHsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QoY29uc3RfY2FzdDxET01Qb2lu
dCo+KCZ3cmFwcGVkKCkucDEoKSkpOwogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChjb25zdF9j
YXN0PERPTVBvaW50Kj4oJndyYXBwZWQoKS5wMigpKSk7CkBAIC00MSw0ICs0Miw3IEBAIHZvaWQg
SlNET01RdWFkOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbigKICAgICB2aXNpdG9yLmFkZE9wYXF1
ZVJvb3QoY29uc3RfY2FzdDxET01Qb2ludCo+KCZ3cmFwcGVkKCkucDQoKSkpOwogfQogCi19Cit0
ZW1wbGF0ZSB2b2lkIEpTRE9NUXVhZDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oQWJzdHJhY3RT
bG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU0RPTVF1YWQ6OnZpc2l0QWRkaXRpb25hbENo
aWxkcmVuKFNsb3RWaXNpdG9yJik7CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93Q3VzdG9tLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0N1c3RvbS5jcHAJKHJl
dmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93
Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDctMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBD
b3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCkBAIC0xMTYsNyArMTE2LDggQEAgSlNDX0RFRklORV9DVVNUT01fR0VUVEVSKGpzRE9N
V2luZG93SW5zdAogICAgIHJldHVybiBub25DYWNoaW5nU3RhdGljRnVuY3Rpb25HZXR0ZXJJbXBs
PGpzRE9NV2luZG93SW5zdGFuY2VGdW5jdGlvbl9wb3N0TWVzc2FnZSwgMj4oZ2xvYmFsT2JqZWN0
LCBwcm9wZXJ0eU5hbWUpOwogfQogCi12b2lkIEpTRE9NV2luZG93Ojp2aXNpdEFkZGl0aW9uYWxD
aGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+
Cit2b2lkIEpTRE9NV2luZG93Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNp
dG9yKQogewogICAgIGlmIChGcmFtZSogZnJhbWUgPSB3cmFwcGVkKCkuZnJhbWUoKSkKICAgICAg
ICAgdmlzaXRvci5hZGRPcGFxdWVSb290KGZyYW1lKTsKQEAgLTEyOSw2ICsxMzAsOSBAQCB2b2lk
IEpTRE9NV2luZG93Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlCiAgICAgd3JhcHBlZCgpLnZpc2l0
SlNFdmVudExpc3RlbmVycyh2aXNpdG9yKTsKIH0KIAordGVtcGxhdGUgdm9pZCBKU0RPTVdpbmRv
dzo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oQWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxh
dGUgdm9pZCBKU0RPTVdpbmRvdzo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3Im
KTsKKwogI2lmIEVOQUJMRShVU0VSX01FU1NBR0VfSEFORExFUlMpCiBKU0NfREVGSU5FX0NVU1RP
TV9HRVRURVIoanNET01XaW5kb3dfd2Via2l0LCAoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9i
YWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKSkKIHsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGVwcmVjYXRlZENTU09NVmFsdWVDdXN0
b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGVwcmVj
YXRlZENTU09NVmFsdWVDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0RlcHJlY2F0ZWRDU1NPTVZhbHVlQ3VzdG9tLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAxOSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTM1LDcgKzM1LDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5h
bWVzcGFjZSBKU0M7CiAKLWJvb2wgSlNEZXByZWNhdGVkQ1NTT01WYWx1ZU93bmVyOjppc1JlYWNo
YWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9p
ZCosIFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQorYm9vbCBKU0Rl
cHJlY2F0ZWRDU1NPTVZhbHVlT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6
SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgQWJzdHJhY3RTbG90VmlzaXRvciYg
dmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikKIHsKICAgICBKU0RlcHJlY2F0ZWRDU1NPTVZh
bHVlKiBqc0NTU1ZhbHVlID0ganNDYXN0PEpTRGVwcmVjYXRlZENTU09NVmFsdWUqPihoYW5kbGUu
c2xvdCgpLT5hc0NlbGwoKSk7CiAgICAgaWYgKCFqc0NTU1ZhbHVlLT5oYXNDdXN0b21Qcm9wZXJ0
aWVzKGpzQ1NTVmFsdWUtPnZtKCkpKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNEb2N1bWVudEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNEb2N1bWVudEN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTRG9jdW1lbnRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA5LCAyMDExLCAyMDE2
LCAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAwNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAg
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYwpAQCAtOTEsMTEgKzkxLDE1IEBAIEpTVmFsdWUgdG9KUyhKU0dsb2JhbE9iamVjdCogbGV4
aWNhbEdsb2IKICAgICByZXR1cm4gdG9KU05ld2x5Q3JlYXRlZChsZXhpY2FsR2xvYmFsT2JqZWN0
LCBnbG9iYWxPYmplY3QsIFJlZjxEb2N1bWVudD4oZG9jdW1lbnQpKTsKIH0KIAotdm9pZCBKU0Rv
Y3VtZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3Rl
bXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTRG9jdW1lbnQ6OnZpc2l0QWRkaXRpb25h
bENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290
KHN0YXRpY19jYXN0PFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqPigmd3JhcHBlZCgpKSk7CiB9CiAK
K3RlbXBsYXRlIHZvaWQgSlNEb2N1bWVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oQWJzdHJh
Y3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU0RvY3VtZW50Ojp2aXNpdEFkZGl0aW9u
YWxDaGlsZHJlbihTbG90VmlzaXRvciYpOworCiB2b2lkIEpTRG9jdW1lbnQ6OmFuYWx5emVIZWFw
KEpTQ2VsbCogY2VsbCwgSGVhcEFuYWx5emVyJiBhbmFseXplcikKIHsKICAgICBCYXNlOjphbmFs
eXplSGVhcChjZWxsLCBhbmFseXplcik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0Vycm9yRXZlbnRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTRXJyb3JFdmVudEN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXJyb3JFdmVudEN1c3RvbS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDE4IFl1c3VrZSBT
dXp1a2kgPHl1c3VrZXN1enVraUBzbG93c3RhcnQub3JnPi4KKyAqIENvcHlyaWdodCAoQykgMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTI4LDkgKzI5LDEzIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9p
ZCBKU0Vycm9yRXZlbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3Im
IHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0Vycm9yRXZlbnQ6
OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgd3JhcHBl
ZCgpLm9yaWdpbmFsRXJyb3IoKS52aXNpdCh2aXNpdG9yKTsKIH0KIAordGVtcGxhdGUgdm9pZCBK
U0Vycm9yRXZlbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6QWJzdHJhY3RTbG90Vmlz
aXRvciYpOwordGVtcGxhdGUgdm9pZCBKU0Vycm9yRXZlbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxk
cmVuKEpTQzo6U2xvdFZpc2l0b3ImKTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDog
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudExpc3RlbmVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50TGlzdGVuZXIuY3BwCShyZXZp
c2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50TGlzdGVu
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqICBDb3B5cmlnaHQg
KEMpIDIwMDEgUGV0ZXIgS2VsbHkgKHBta0Bwb3N0LmNvbSkKLSAqICBDb3B5cmlnaHQgKEMpIDIw
MDMtMjAxOSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChD
KSAyMDAzLTIwMjEgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqICBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFs
IFB1YmxpYwpAQCAtNzgsNyArNzgsOCBAQCBKU09iamVjdCogSlNFdmVudExpc3RlbmVyOjppbml0
aWFsaXplSlNGCiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLXZvaWQgSlNFdmVudExpc3RlbmVy
Ojp2aXNpdEpTRnVuY3Rpb24oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBWaXNpdG9yPgoraW5saW5lIHZvaWQgSlNFdmVudExpc3RlbmVyOjp2aXNpdEpTRnVuY3Rpb25J
bXBsKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgLy8gSWYgbV93cmFwcGVyIGlzIG51bGwsIHdl
IGFyZSBub3Qga2VlcGluZyBtX2pzRnVuY3Rpb24gYWxpdmUuCiAgICAgaWYgKCFtX3dyYXBwZXIp
CkBAIC04Nyw2ICs4OCw5IEBAIHZvaWQgSlNFdmVudExpc3RlbmVyOjp2aXNpdEpTRnVuY3Rpb24o
U2wKICAgICB2aXNpdG9yLmFwcGVuZChtX2pzRnVuY3Rpb24pOwogfQogCit2b2lkIEpTRXZlbnRM
aXN0ZW5lcjo6dmlzaXRKU0Z1bmN0aW9uKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsg
dmlzaXRKU0Z1bmN0aW9uSW1wbCh2aXNpdG9yKTsgfQordm9pZCBKU0V2ZW50TGlzdGVuZXI6OnZp
c2l0SlNGdW5jdGlvbihTbG90VmlzaXRvciYgdmlzaXRvcikgeyB2aXNpdEpTRnVuY3Rpb25JbXBs
KHZpc2l0b3IpOyB9CisKIHN0YXRpYyB2b2lkIGhhbmRsZUJlZm9yZVVubG9hZEV2ZW50UmV0dXJu
VmFsdWUoQmVmb3JlVW5sb2FkRXZlbnQmIGV2ZW50LCBjb25zdCBTdHJpbmcmIHJldHVyblZhbHVl
KQogewogICAgIGlmIChyZXR1cm5WYWx1ZS5pc051bGwoKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTRXZlbnRMaXN0ZW5lci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRMaXN0ZW5lci5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50TGlzdGVuZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAyMDAxIFBldGVyIEtlbGx5
IChwbWtAcG9zdC5jb20pCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMTggQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwMy0yMDIxIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKQEAgLTYyLDYgKzYy
LDkgQEAgcHVibGljOgogCiBwcml2YXRlOgogICAgIHZpcnR1YWwgSlNDOjpKU09iamVjdCogaW5p
dGlhbGl6ZUpTRnVuY3Rpb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYpIGNvbnN0OworCisgICAg
dGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCB2aXNpdEpTRnVuY3Rpb25JbXBsKFZpc2l0
b3ImKTsKKyAgICB2b2lkIHZpc2l0SlNGdW5jdGlvbihKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3Im
KSBmaW5hbDsKICAgICB2b2lkIHZpc2l0SlNGdW5jdGlvbihKU0M6OlNsb3RWaXNpdG9yJikgZmlu
YWw7CiAKIHByb3RlY3RlZDoKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZl
bnRUYXJnZXRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTRXZlbnRUYXJnZXRDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50VGFyZ2V0Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxNyBBcHBsZSBJ
bmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAyMSBBcHBs
ZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTcyLDkgKzcyLDEzIEBAIHN0ZDo6dW5pcXVlX3B0cjxKU0V2ZW50VGFyZ2V0V3JhcHBl
cj4ganMKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotdm9pZCBKU0V2ZW50VGFyZ2V0Ojp2aXNp
dEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVu
YW1lIFZpc2l0b3I+Cit2b2lkIEpTRXZlbnRUYXJnZXQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVu
KFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgd3JhcHBlZCgpLnZpc2l0SlNFdmVudExpc3RlbmVy
cyh2aXNpdG9yKTsKIH0KIAordGVtcGxhdGUgdm9pZCBKU0V2ZW50VGFyZ2V0Ojp2aXNpdEFkZGl0
aW9uYWxDaGlsZHJlbihBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTRXZl
bnRUYXJnZXQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CisKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRmV0
Y2hFdmVudEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNGZXRjaEV2ZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNGZXRjaEV2ZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0z
MCwxMSArMzAsMTUgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIEpTRmV0Y2hFdmVu
dDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3Rl
bXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTRmV0Y2hFdmVudDo6dmlzaXRBZGRpdGlv
bmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJv
b3QoJndyYXBwZWQoKS5yZXF1ZXN0KCkpOwogfQogCi19Cit0ZW1wbGF0ZSB2b2lkIEpTRmV0Y2hF
dmVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJik7
Cit0ZW1wbGF0ZSB2b2lkIEpTRmV0Y2hFdmVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlND
OjpTbG90VmlzaXRvciYpOworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZgpJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MQ2FudmFzRWxlbWVudEN1c3RvbS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MQ2FudmFz
RWxlbWVudEN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTSFRNTENhbnZhc0VsZW1lbnRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAtMjAyMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMx
LDkgKzMxLDEzIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBKU0hUTUxDYW52YXNF
bGVtZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9y
KQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNIVE1MQ2FudmFzRWxlbWVudDo6
dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB2aXNpdG9y
LmFkZE9wYXF1ZVJvb3Qoc3RhdGljX2Nhc3Q8Q2FudmFzQmFzZSo+KCZ3cmFwcGVkKCkpKTsKIH0K
IAordGVtcGxhdGUgdm9pZCBKU0hUTUxDYW52YXNFbGVtZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGls
ZHJlbihKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNIVE1MQ2Fu
dmFzRWxlbWVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYpOwor
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0hUTUxUZW1wbGF0ZUVsZW1lbnRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTFRlbXBsYXRlRWxlbWVudEN1c3RvbS5jcHAJKHJldmlz
aW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTFRlbXBsYXRl
RWxlbWVudEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKgogICog
Q29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQpAQCAtMzcsMTAgKzM4LDE0IEBACiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCi12b2lkIEpTSFRNTFRlbXBsYXRl
RWxlbWVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRv
cikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTSFRNTFRlbXBsYXRlRWxlbWVu
dDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBpZiAo
YXV0byogY29udGVudCA9IHdyYXBwZWQoKS5jb250ZW50SWZBdmFpbGFibGUoKSkKICAgICAgICAg
dmlzaXRvci5hZGRPcGFxdWVSb290KHJvb3QoY29udGVudCkpOwogfQogCit0ZW1wbGF0ZSB2b2lk
IEpTSFRNTFRlbXBsYXRlRWxlbWVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpBYnN0
cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTSFRNTFRlbXBsYXRlRWxlbWVudDo6
dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYpOworCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hpc3RvcnlD
dXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSGlz
dG9yeUN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTSGlzdG9yeUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00NCw5ICs0NCwx
MyBAQCBKU1ZhbHVlIEpTSGlzdG9yeTo6c3RhdGUoSlNHbG9iYWxPYmplY3QmCiAgICAgfSk7CiB9
CiAKLXZvaWQgSlNIaXN0b3J5Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYg
dmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTSGlzdG9yeTo6dmlz
aXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB3cmFwcGVkKCku
Y2FjaGVkU3RhdGVGb3JHQygpLnZpc2l0KHZpc2l0b3IpOwogfQogCit0ZW1wbGF0ZSB2b2lkIEpT
SGlzdG9yeTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oQWJzdHJhY3RTbG90VmlzaXRvciYpOwor
dGVtcGxhdGUgdm9pZCBKU0hpc3Rvcnk6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNp
dG9yJik7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTSURCQ3Vyc29yQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0lEQkN1cnNvckN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjgzMCkK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCQ3Vyc29yQ3VzdG9tLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC01MCw3ICs1MCw4IEBAIEpTQzo6SlNWYWx1ZSBKU0lEQkN1cnNvcjo6cHJpbWFy
eUtleShKU0MKICAgICB9KTsKIH0KIAotdm9pZCBKU0lEQkN1cnNvcjo6dmlzaXRBZGRpdGlvbmFs
Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
Pgordm9pZCBKU0lEQkN1cnNvcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlz
aXRvcikKIHsKICAgICBhdXRvJiBjdXJzb3IgPSB3cmFwcGVkKCk7CiAgICAgaWYgKGF1dG8qIHJl
cXVlc3QgPSBjdXJzb3IucmVxdWVzdCgpKQpAQCAtNTksNiArNjAsOSBAQCB2b2lkIEpTSURCQ3Vy
c29yOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlCiAgICAgY3Vyc29yLnByaW1hcnlLZXlXcmFwcGVy
KCkudmlzaXQodmlzaXRvcik7CiB9CiAKK3RlbXBsYXRlIHZvaWQgSlNJREJDdXJzb3I6OnZpc2l0
QWRkaXRpb25hbENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQg
SlNJREJDdXJzb3I6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CisKIEpT
VmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNET01HbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgUmVmPElEQkN1cnNvcj4mJiBjdXJzb3IpCiB7CiAgICAgaWYg
KGlzPElEQkN1cnNvcldpdGhWYWx1ZT4oY3Vyc29yKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTSURCQ3Vyc29yV2l0aFZhbHVlQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQkN1cnNvcldpdGhWYWx1ZUN1c3RvbS5jcHAJ
KHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCQ3Vy
c29yV2l0aFZhbHVlQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00MywxMiArNDMsMTYgQEAgSlND
OjpKU1ZhbHVlIEpTSURCQ3Vyc29yV2l0aFZhbHVlOjp2YWx1ZQogICAgIH0pOwogfQogCi12b2lk
IEpTSURCQ3Vyc29yV2l0aFZhbHVlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRv
ciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTSURCQ3Vyc29y
V2l0aFZhbHVlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewog
ICAgIEpTSURCQ3Vyc29yOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbih2aXNpdG9yKTsKICAgICB3
cmFwcGVkKCkudmFsdWVXcmFwcGVyKCkudmlzaXQodmlzaXRvcik7CiB9CiAKK3RlbXBsYXRlIHZv
aWQgSlNJREJDdXJzb3JXaXRoVmFsdWU6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEFic3RyYWN0
U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNJREJDdXJzb3JXaXRoVmFsdWU6OnZpc2l0
QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKIAogI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQpJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNJREJJbmRleEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJJbmRleEN1c3RvbS5jcHAJKHJldmlzaW9uIDI3
MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCSW5kZXhDdXN0b20uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYt
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTM0LDExICszNCwxNSBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogdXNp
bmcgbmFtZXNwYWNlIEpTQzsKIAotdm9pZCBKU0lEQkluZGV4Ojp2aXNpdEFkZGl0aW9uYWxDaGls
ZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2
b2lkIEpTSURCSW5kZXg6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3Ip
CiB7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHN0YXRpY19jYXN0PElEQkluZGV4Jj4od3Jh
cHBlZCgpKS5vYmplY3RTdG9yZUFzT3BhcXVlUm9vdCgpKTsKIH0KIAordGVtcGxhdGUgdm9pZCBK
U0lEQkluZGV4Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihBYnN0cmFjdFNsb3RWaXNpdG9yJik7
Cit0ZW1wbGF0ZSB2b2lkIEpTSURCSW5kZXg6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RW
aXNpdG9yJik7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShJ
TkRFWEVEX0RBVEFCQVNFKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJP
YmplY3RTdG9yZUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNJREJPYmplY3RTdG9yZUN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCT2JqZWN0U3RvcmVDdXN0b20uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxMiBNaWNo
YWVsIFBydWV0dCA8bWljaGFlbEA2OGsub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKQEAgLTM2LDExICszNywxNSBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogdXNpbmcgbmFt
ZXNwYWNlIEpTQzsKIAotdm9pZCBKU0lEQk9iamVjdFN0b3JlOjp2aXNpdEFkZGl0aW9uYWxDaGls
ZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2
b2lkIEpTSURCT2JqZWN0U3RvcmU6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZp
c2l0b3IpCiB7CiAgICAgc3RhdGljX2Nhc3Q8SURCT2JqZWN0U3RvcmUmPih3cmFwcGVkKCkpLnZp
c2l0UmVmZXJlbmNlZEluZGV4ZXModmlzaXRvcik7CiB9CiAKLX0KK3RlbXBsYXRlIHZvaWQgSlNJ
REJPYmplY3RTdG9yZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oQWJzdHJhY3RTbG90VmlzaXRv
ciYpOwordGVtcGxhdGUgdm9pZCBKU0lEQk9iamVjdFN0b3JlOjp2aXNpdEFkZGl0aW9uYWxDaGls
ZHJlbihTbG90VmlzaXRvciYpOworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZgpJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJSZXF1ZXN0Q3VzdG9tLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQlJlcXVlc3RDdXN0
b20uY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0lEQlJlcXVlc3RDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTg5LDEyICs4OSwxNyBAQCBKU0M6
OkpTVmFsdWUgSlNJREJSZXF1ZXN0OjpyZXN1bHQoSlNDOjpKCiAgICAgfSk7CiB9CiAKLXZvaWQg
SlNJREJSZXF1ZXN0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRv
cikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTSURCUmVxdWVzdDo6dmlzaXRB
ZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBhdXRvJiByZXF1ZXN0
ID0gd3JhcHBlZCgpOwogICAgIHJlcXVlc3QucmVzdWx0V3JhcHBlcigpLnZpc2l0KHZpc2l0b3Ip
OwogICAgIHJlcXVlc3QuY3Vyc29yV3JhcHBlcigpLnZpc2l0KHZpc2l0b3IpOwogfQogCi19Cit0
ZW1wbGF0ZSB2b2lkIEpTSURCUmVxdWVzdDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oQWJzdHJh
Y3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU0lEQlJlcXVlc3Q6OnZpc2l0QWRkaXRp
b25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwog
I2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQpJbmRleDogU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNJREJUcmFuc2FjdGlvbkN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJUcmFuc2FjdGlvbkN1c3RvbS5jcHAJKHJldmlz
aW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCVHJhbnNhY3Rp
b25DdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM0LDExICszNCwxNSBAQAogbmFtZXNwYWNlIFdl
YkNvcmUgewogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAotdm9pZCBKU0lEQlRyYW5zYWN0aW9uOjp2
aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5
cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTSURCVHJhbnNhY3Rpb246OnZpc2l0QWRkaXRpb25hbENo
aWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgc3RhdGljX2Nhc3Q8SURCVHJhbnNhY3Rp
b24mPih3cmFwcGVkKCkpLnZpc2l0UmVmZXJlbmNlZE9iamVjdFN0b3Jlcyh2aXNpdG9yKTsKIH0K
IAotfQordGVtcGxhdGUgdm9pZCBKU0lEQlRyYW5zYWN0aW9uOjp2aXNpdEFkZGl0aW9uYWxDaGls
ZHJlbihBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTSURCVHJhbnNhY3Rp
b246OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKIAogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0ludGVyc2VjdGlvbk9ic2VydmVyQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0ludGVyc2VjdGlvbk9ic2VydmVyQ3VzdG9tLmNwcAkocmV2aXNp
b24gMjcyODMwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJbnRlcnNlY3Rpb25P
YnNlcnZlckN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKgogICog
Q29weXJpZ2h0IChDKSAyMDIwIElnYWxpYSBTLkwuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0zMCwxMCArMzEsMTQgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIEpT
SW50ZXJzZWN0aW9uT2JzZXJ2ZXI6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZp
c2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0ludGVy
c2VjdGlvbk9ic2VydmVyOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9y
KQogewogICAgIGlmIChhdXRvKiBjYWxsYmFjayA9IHdyYXBwZWQoKS5jYWxsYmFja0NvbmN1cnJl
bnRseSgpKQogICAgICAgICBjYWxsYmFjay0+dmlzaXRKU0Z1bmN0aW9uKHZpc2l0b3IpOwogfQog
Ci19Cit0ZW1wbGF0ZSB2b2lkIEpTSW50ZXJzZWN0aW9uT2JzZXJ2ZXI6OnZpc2l0QWRkaXRpb25h
bENoaWxkcmVuKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU0lu
dGVyc2VjdGlvbk9ic2VydmVyOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNp
dG9yJik7CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTSW50ZXJzZWN0aW9uT2JzZXJ2ZXJFbnRyeUN1c3RvbS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJbnRlcnNlY3Rpb25PYnNlcnZlckVu
dHJ5Q3VzdG9tLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNJbnRlcnNlY3Rpb25PYnNlcnZlckVudHJ5Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTggR29vZ2xlIExMQy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMw
LDcgKzMxLDggQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIEpTSW50ZXJzZWN0aW9u
T2JzZXJ2ZXJFbnRyeTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYg
dmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTSW50ZXJzZWN0aW9u
T2JzZXJ2ZXJFbnRyeTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikK
IHsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qocm9vdCh3cmFwcGVkKCkudGFyZ2V0KCkpKTsK
ICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qod3JhcHBlZCgpLmJvdW5kaW5nQ2xpZW50UmVjdCgp
KTsKQEAgLTM4LDQgKzQwLDcgQEAgdm9pZCBKU0ludGVyc2VjdGlvbk9ic2VydmVyRW50cnk6OnZp
c2l0QQogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdCh3cmFwcGVkKCkucm9vdEJvdW5kcygpKTsK
IH0KIAotfQordGVtcGxhdGUgdm9pZCBKU0ludGVyc2VjdGlvbk9ic2VydmVyRW50cnk6OnZpc2l0
QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUg
dm9pZCBKU0ludGVyc2VjdGlvbk9ic2VydmVyRW50cnk6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVu
KEpTQzo6U2xvdFZpc2l0b3ImKTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNZXNzYWdlQ2hhbm5lbEN1c3RvbS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNZXNzYWdlQ2hhbm5lbEN1c3Rv
bS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
TWVzc2FnZUNoYW5uZWxDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAyMSBBcHBsZSBJbmMuIEFsbCBSaWdodHMg
UmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMzLDcgKzMzLDgg
QEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIEpTTWVzc2FnZUNoYW5uZWw6OnZpc2l0
QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0
eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU01lc3NhZ2VDaGFubmVsOjp2aXNpdEFkZGl0aW9uYWxD
aGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGlmIChNZXNzYWdlUG9ydCogcG9ydCA9
IHdyYXBwZWQoKS5wb3J0MSgpKQogICAgICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QocG9ydCk7
CkBAIC00Miw2ICs0Myw5IEBAIHZvaWQgSlNNZXNzYWdlQ2hhbm5lbDo6dmlzaXRBZGRpdGlvbmFs
Q2gKICAgICAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHBvcnQpOwogfQogCit0ZW1wbGF0ZSB2
b2lkIEpTTWVzc2FnZUNoYW5uZWw6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6QWJzdHJh
Y3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU01lc3NhZ2VDaGFubmVsOjp2aXNpdEFk
ZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJik7CisKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShDSEFOTkVMX01FU1NBR0lORykKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWVzc2FnZUV2ZW50Q3VzdG9tLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01lc3NhZ2VFdmVudEN1c3RvbS5jcHAJ
KHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWVzc2Fn
ZUV2ZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBD
b3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAwOS0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAwOS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKQEAgLTcwLDcgKzcwLDggQEAgSlND
OjpKU1ZhbHVlIEpTTWVzc2FnZUV2ZW50OjpkYXRhKEpTQzo6SgogICAgIH0pOwogfQogCi12b2lk
IEpTTWVzc2FnZUV2ZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9y
JiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNNZXNzYWdlRXZl
bnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgV1RG
Ojpzd2l0Y2hPbih3cmFwcGVkKCkuZGF0YSgpLCBbJnZpc2l0b3JdIChjb25zdCBKU1ZhbHVlSW5X
cmFwcGVkT2JqZWN0JiBkYXRhKSB7CiAgICAgICAgIGRhdGEudmlzaXQodmlzaXRvcik7CkBAIC04
NCw0ICs4NSw3IEBAIHZvaWQgSlNNZXNzYWdlRXZlbnQ6OnZpc2l0QWRkaXRpb25hbENoaWwKICAg
ICB3cmFwcGVkKCkuY2FjaGVkUG9ydHMoKS52aXNpdCh2aXNpdG9yKTsKIH0KIAordGVtcGxhdGUg
dm9pZCBKU01lc3NhZ2VFdmVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpBYnN0cmFj
dFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTTWVzc2FnZUV2ZW50Ojp2aXNpdEFkZGl0
aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJik7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWVzc2FnZVBvcnRDdXN0b20u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWVzc2FnZVBv
cnRDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU01lc3NhZ2VQb3J0Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAwOSwgMjAxNiBBcHBsZSBJbmMuIEFsbCBS
aWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAyMSBBcHBsZSBJbmMuIEFs
bCBSaWdodHMgUmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxs
IFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTMxLDExICszMSwxNSBAQAog
bmFtZXNwYWNlIFdlYkNvcmUgewogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAotdm9pZCBKU01lc3Nh
Z2VQb3J0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3Rl
bXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTTWVzc2FnZVBvcnQ6OnZpc2l0QWRkaXRp
b25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgLy8gSWYgd2UgaGF2ZSBhIGxv
Y2FsbHkgZW50YW5nbGVkIHBvcnQsIHdlIGNhbiBkaXJlY3RseSBtYXJrIGl0IGFzIHJlYWNoYWJs
ZS4gUG9ydHMgdGhhdCBhcmUgcmVtb3RlbHkgZW50YW5nbGVkIGFyZSBtYXJrZWQgaW4tdXNlIGJ5
IG1hcmtBY3RpdmVPYmplY3RzRm9yQ29udGV4dCgpLgogICAgIGlmIChNZXNzYWdlUG9ydCogcG9y
dCA9IHdyYXBwZWQoKS5sb2NhbGx5RW50YW5nbGVkUG9ydCgpKQogICAgICAgICB2aXNpdG9yLmFk
ZE9wYXF1ZVJvb3QocG9ydCk7CiB9CiAKK3RlbXBsYXRlIHZvaWQgSlNNZXNzYWdlUG9ydDo6dmlz
aXRBZGRpdGlvbmFsQ2hpbGRyZW4oQWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9p
ZCBKU01lc3NhZ2VQb3J0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYpOwor
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU011dGF0aW9uT2JzZXJ2ZXJDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTTXV0YXRpb25PYnNlcnZlckN1c3RvbS5jcHAJKHJldmlzaW9uIDI3
MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTXV0YXRpb25PYnNlcnZlckN1
c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogQ29weXJpZ2h0
IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zIGFyZQpAQCAtMzksMTIgKzM5LDE2IEBACiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCi12b2lkIEpTTXV0YXRpb25PYnNlcnZlcjo6
dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBs
YXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTTXV0YXRpb25PYnNlcnZlcjo6dmlzaXRBZGRp
dGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB3cmFwcGVkKCkuY2FsbGJh
Y2soKS52aXNpdEpTRnVuY3Rpb24odmlzaXRvcik7CiB9CiAKLWJvb2wgSlNNdXRhdGlvbk9ic2Vy
dmVyT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5r
bm93bj4gaGFuZGxlLCB2b2lkKiwgU2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKnJl
YXNvbikKK3RlbXBsYXRlIHZvaWQgSlNNdXRhdGlvbk9ic2VydmVyOjp2aXNpdEFkZGl0aW9uYWxD
aGlsZHJlbihKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNNdXRh
dGlvbk9ic2VydmVyOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJik7
CisKK2Jvb2wgSlNNdXRhdGlvbk9ic2VydmVyT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJv
b3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgQWJzdHJhY3RTbG90
VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqcmVhc29uKQogewogICAgIGZvciAoYXV0byog
bm9kZSA6IGpzQ2FzdDxKU011dGF0aW9uT2JzZXJ2ZXIqPihoYW5kbGUuc2xvdCgpLT5hc0NlbGwo
KSktPndyYXBwZWQoKS5vYnNlcnZlZE5vZGVzKCkpIHsKICAgICAgICAgaWYgKHZpc2l0b3IuY29u
dGFpbnNPcGFxdWVSb290KHJvb3Qobm9kZSkpKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU011dGF0aW9uUmVjb3JkQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU011dGF0aW9uUmVjb3JkQ3VzdG9tLmNwcAkocmV2aXNpb24g
MjcyODMwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNdXRhdGlvblJlY29yZEN1
c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxOC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzAsOSArMzAsMTMgQEAKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi12b2lkIEpTTXV0YXRpb25SZWNvcmQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpT
Qzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9p
ZCBKU011dGF0aW9uUmVjb3JkOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNp
dG9yKQogewogICAgIHdyYXBwZWQoKS52aXNpdE5vZGVzQ29uY3VycmVudGx5KHZpc2l0b3IpOwog
fQotICAgIAorCit0ZW1wbGF0ZSB2b2lkIEpTTXV0YXRpb25SZWNvcmQ6OnZpc2l0QWRkaXRpb25h
bENoaWxkcmVuKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU011
dGF0aW9uUmVjb3JkOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJik7
CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTTmF2aWdhdG9yQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU05hdmlnYXRvckN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTmF2aWdhdG9yQ3VzdG9tLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC0zMiwxMSArMzIsMTUgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIEpTTmF2
aWdhdG9yOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9y
KQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNOYXZpZ2F0b3I6OnZpc2l0QWRk
aXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgdmlzaXRvci5hZGRPcGFx
dWVSb290KHN0YXRpY19jYXN0PE5hdmlnYXRvckJhc2UqPigmd3JhcHBlZCgpKSk7CiB9CiAKK3Rl
bXBsYXRlIHZvaWQgSlNOYXZpZ2F0b3I6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6QWJz
dHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU05hdmlnYXRvcjo6dmlzaXRBZGRp
dGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYpOworCiAjaWYgRU5BQkxFKE1FRElBX1NU
UkVBTSkKIEpTQzo6SlNWYWx1ZSBKU05hdmlnYXRvcjo6Z2V0VXNlck1lZGlhKEpTQzo6SlNHbG9i
YWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6Q2FsbEZyYW1lJiBjYWxsRnJhbWUp
CiB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVDdXN0b20uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUN1c3RvbS5jcHAJ
KHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUN1
c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDA3LCAyMDA5LTIwMTAsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03NCw3ICs3NCw3IEBAIHVz
aW5nIG5hbWVzcGFjZSBKU0M7CiAKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKLXN0YXRp
YyBpbmxpbmUgYm9vbCBpc1JlYWNoYWJsZUZyb21ET00oTm9kZSogbm9kZSwgU2xvdFZpc2l0b3Im
IHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCitzdGF0aWMgaW5saW5lIGJvb2wgaXNSZWFj
aGFibGVGcm9tRE9NKE5vZGUqIG5vZGUsIEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNv
bnN0IGNoYXIqKiByZWFzb24pCiB7CiAgICAgaWYgKCFub2RlLT5pc0Nvbm5lY3RlZCgpKSB7CiAg
ICAgICAgIGlmIChpczxFbGVtZW50Pigqbm9kZSkpIHsKQEAgLTEyMyw3ICsxMjMsNyBAQCBzdGF0
aWMgaW5saW5lIGJvb2wgaXNSZWFjaGFibGVGcm9tRE9NKE5vCiAgICAgcmV0dXJuIHZpc2l0b3Iu
Y29udGFpbnNPcGFxdWVSb290KHJvb3Qobm9kZSkpOwogfQogCi1ib29sIEpTTm9kZU93bmVyOjpp
c1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRs
ZSwgdm9pZCosIFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQorYm9v
bCBKU05vZGVPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlND
OjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBj
b25zdCBjaGFyKiogcmVhc29uKQogewogICAgIEpTTm9kZSoganNOb2RlID0ganNDYXN0PEpTTm9k
ZSo+KGhhbmRsZS5zbG90KCktPmFzQ2VsbCgpKTsKICAgICByZXR1cm4gaXNSZWFjaGFibGVGcm9t
RE9NKCZqc05vZGUtPndyYXBwZWQoKSwgdmlzaXRvciwgcmVhc29uKTsKQEAgLTEzNiwxMSArMTM2
LDE1IEBAIEpTU2NvcGUqIEpTTm9kZTo6cHVzaEV2ZW50SGFuZGxlclNjb3BlKEoKICAgICByZXR1
cm4gbm9kZTsKIH0KIAotdm9pZCBKU05vZGU6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNOb2Rl
Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHZpc2l0
b3IuYWRkT3BhcXVlUm9vdChyb290KHdyYXBwZWQoKSkpOwogfQogCit0ZW1wbGF0ZSB2b2lkIEpT
Tm9kZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oQWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVt
cGxhdGUgdm9pZCBKU05vZGU6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJik7
CisKIHN0YXRpYyBBTFdBWVNfSU5MSU5FIEpTVmFsdWUgY3JlYXRlV3JhcHBlcklubGluZShKU0ds
b2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNET01HbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgUmVmPE5vZGU+JiYgbm9kZSkKIHsKICAgICBBU1NFUlQoIWdldENhY2hlZFdyYXBw
ZXIoZ2xvYmFsT2JqZWN0LT53b3JsZCgpLCBub2RlKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU05vZGVJdGVyYXRvckN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlSXRlcmF0b3JDdXN0b20uY3BwCShyZXZpc2lvbiAy
NzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVJdGVyYXRvckN1c3Rv
bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDA2LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAwNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYwpAQCAtMjUsMTAgKzI1LDE0IEBACiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotdm9pZCBKU05vZGVJdGVyYXRvcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpT
bG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpT
Tm9kZUl0ZXJhdG9yOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQog
ewogICAgIGlmIChOb2RlRmlsdGVyKiBmaWx0ZXIgPSB3cmFwcGVkKCkuZmlsdGVyKCkpCiAgICAg
ICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChmaWx0ZXIpOwogfQogCi19Cit0ZW1wbGF0ZSB2b2lk
IEpTTm9kZUl0ZXJhdG9yOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OkFic3RyYWN0U2xv
dFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNOb2RlSXRlcmF0b3I6OnZpc2l0QWRkaXRpb25h
bENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImKTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlTGlzdEN1c3RvbS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlTGlzdEN1c3RvbS5j
cHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9k
ZUxpc3RDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAwNy0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAwNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzcsNyArMzcsNyBAQAogbmFtZXNw
YWNlIFdlYkNvcmUgewogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAotYm9vbCBKU05vZGVMaXN0T3du
ZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4g
aGFuZGxlLCB2b2lkKiwgU2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24p
Citib29sIEpTTm9kZUxpc3RPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpI
YW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBBYnN0cmFjdFNsb3RWaXNpdG9yJiB2
aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQogewogICAgIEpTTm9kZUxpc3QqIGpzTm9kZUxp
c3QgPSBqc0Nhc3Q8SlNOb2RlTGlzdCo+KGhhbmRsZS5zbG90KCktPmFzQ2VsbCgpKTsKICAgICBp
ZiAoIWpzTm9kZUxpc3QtPmhhc0N1c3RvbVByb3BlcnRpZXMoanNOb2RlTGlzdC0+dm0oKSkpCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU09mZnNjcmVlbkNhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyREN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNPZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRDdXN0b20uY3BwCShyZXZp
c2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU09mZnNjcmVlbkNh
bnZhc1JlbmRlcmluZ0NvbnRleHQyREN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMzEsNyArMzEsNyBAQCBpbmxpbmUg
dm9pZCogcm9vdChPZmZzY3JlZW5DYW52YXMqIGNhbnZhCiAgICAgcmV0dXJuIGNhbnZhczsKIH0K
IAotYm9vbCBKU09mZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRE93bmVyOjppc1JlYWNo
YWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9p
ZCosIFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQorYm9vbCBKU09m
ZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRE93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFx
dWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIEFic3RyYWN0
U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCiB7CiAgICAgaWYgKFVO
TElLRUxZKHJlYXNvbikpCiAgICAgICAgICpyZWFzb24gPSAiQ2FudmFzIGlzIG9wYXF1ZSByb290
IjsKQEAgLTQxLDExICs0MSwxNSBAQCBib29sIEpTT2Zmc2NyZWVuQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJECiAgICAgcmV0dXJuIHZpc2l0b3IuY29udGFpbnNPcGFxdWVSb290KHJvb3QpOwogfQog
Ci12b2lkIEpTT2Zmc2NyZWVuQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjp2aXNpdEFkZGl0aW9u
YWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0
b3I+Cit2b2lkIEpTT2Zmc2NyZWVuQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjp2aXNpdEFkZGl0
aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHZpc2l0b3IuYWRkT3BhcXVl
Um9vdChyb290KCZ3cmFwcGVkKCkuY2FudmFzKCkpKTsKIH0KIAordGVtcGxhdGUgdm9pZCBKU09m
ZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4o
QWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU09mZnNjcmVlbkNhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyRDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsK
KwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTUGFpbnRSZW5kZXJpbmdDb250ZXh0MkRDdXN0b20uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUGFpbnRSZW5kZXJpbmdDb250ZXh0
MkRDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU1BhaW50UmVuZGVyaW5nQ29udGV4dDJEQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0z
Niw3ICszNiw3IEBAIGlubGluZSB2b2lkKiByb290KEN1c3RvbVBhaW50Q2FudmFzKiBjYW4KICAg
ICByZXR1cm4gY2FudmFzOwogfQogCi1ib29sIEpTUGFpbnRSZW5kZXJpbmdDb250ZXh0MkRPd25l
cjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBo
YW5kbGUsIHZvaWQqLCBTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikK
K2Jvb2wgSlNQYWludFJlbmRlcmluZ0NvbnRleHQyRE93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFx
dWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIEFic3RyYWN0
U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCiB7CiAgICAgaWYgKFVO
TElLRUxZKHJlYXNvbikpCiAgICAgICAgICpyZWFzb24gPSAiQ2FudmFzIGlzIG9wYXF1ZSByb290
IjsKQEAgLTQ2LDExICs0NiwxNSBAQCBib29sIEpTUGFpbnRSZW5kZXJpbmdDb250ZXh0MkRPd25l
cjo6aXNSCiAgICAgcmV0dXJuIHZpc2l0b3IuY29udGFpbnNPcGFxdWVSb290KHJvb3QpOwogfQog
Ci12b2lkIEpTUGFpbnRSZW5kZXJpbmdDb250ZXh0MkQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVu
KFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQg
SlNQYWludFJlbmRlcmluZ0NvbnRleHQyRDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRv
ciYgdmlzaXRvcikKIHsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qocm9vdCgmd3JhcHBlZCgp
LmNhbnZhcygpKSk7CiB9CiAKK3RlbXBsYXRlIHZvaWQgSlNQYWludFJlbmRlcmluZ0NvbnRleHQy
RDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oQWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxh
dGUgdm9pZCBKU1BhaW50UmVuZGVyaW5nQ29udGV4dDJEOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJl
bihTbG90VmlzaXRvciYpOworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAjZW5kaWYKIApJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNQYWludFdvcmtsZXRHbG9iYWxTY29wZUN1
c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNQYWlu
dFdvcmtsZXRHbG9iYWxTY29wZUN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUGFpbnRXb3JrbGV0R2xvYmFsU2NvcGVDdXN0b20uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
OCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTgt
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTMxLDcgKzMxLDggQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5n
IG5hbWVzcGFjZSBKU0M7CiAKLXZvaWQgSlNQYWludFdvcmtsZXRHbG9iYWxTY29wZTo6dmlzaXRB
ZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5
cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTUGFpbnRXb3JrbGV0R2xvYmFsU2NvcGU6OnZpc2l0QWRk
aXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0byBsb2NrZXIgPSBo
b2xkTG9jayh3cmFwcGVkKCkucGFpbnREZWZpbml0aW9uTG9jaygpKTsKICAgICBmb3IgKGF1dG8m
IHJlZ2lzdGVyZWQgOiB3cmFwcGVkKCkucGFpbnREZWZpbml0aW9uTWFwKCkudmFsdWVzKCkpIHsK
QEAgLTQwLDUgKzQxLDkgQEAgdm9pZCBKU1BhaW50V29ya2xldEdsb2JhbFNjb3BlOjp2aXNpdEFk
ZAogICAgIH0KIH0KIAotfQordGVtcGxhdGUgdm9pZCBKU1BhaW50V29ya2xldEdsb2JhbFNjb3Bl
Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3Rl
bXBsYXRlIHZvaWQgSlNQYWludFdvcmtsZXRHbG9iYWxTY29wZTo6dmlzaXRBZGRpdGlvbmFsQ2hp
bGRyZW4oSlNDOjpTbG90VmlzaXRvciYpOworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKICNl
bmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNQYXltZW50TWV0aG9kQ2hh
bmdlRXZlbnRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTUGF5bWVudE1ldGhvZENoYW5nZUV2ZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gMjcyODMw
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNQYXltZW50TWV0aG9kQ2hhbmdlRXZl
bnRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTgtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQxLDcgKzQxLDggQEAgSlNDOjpKU1ZhbHVlIEpT
UGF5bWVudE1ldGhvZENoYW5nZUV2ZW50OgogICAgIH0pOwogfQogCi12b2lkIEpTUGF5bWVudE1l
dGhvZENoYW5nZUV2ZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9y
JiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNQYXltZW50TWV0
aG9kQ2hhbmdlRXZlbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3Ip
CiB7CiAgICAgV1RGOjpzd2l0Y2hPbih3cmFwcGVkKCkubWV0aG9kRGV0YWlscygpLCBbJnZpc2l0
b3JdKGNvbnN0IEpTVmFsdWVJbldyYXBwZWRPYmplY3QmIG1ldGhvZERldGFpbHMpIHsKICAgICAg
ICAgbWV0aG9kRGV0YWlscy52aXNpdCh2aXNpdG9yKTsKQEAgLTUxLDYgKzUyLDkgQEAgdm9pZCBK
U1BheW1lbnRNZXRob2RDaGFuZ2VFdmVudDo6dmlzaXRBZAogICAgIHdyYXBwZWQoKS5jYWNoZWRN
ZXRob2REZXRhaWxzKCkudmlzaXQodmlzaXRvcik7CiB9CiAKK3RlbXBsYXRlIHZvaWQgSlNQYXlt
ZW50TWV0aG9kQ2hhbmdlRXZlbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6QWJzdHJh
Y3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU1BheW1lbnRNZXRob2RDaGFuZ2VFdmVu
dDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYpOworCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoUEFZTUVOVF9SRVFVRVNUKQpJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNQYXltZW50UmVzcG9uc2VDdXN0b20uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUGF5bWVudFJlc3Bv
bnNlQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNQYXltZW50UmVzcG9uc2VDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM3LDExICsz
NywxNSBAQCBKU0M6OkpTVmFsdWUgSlNQYXltZW50UmVzcG9uc2U6OmRldGFpbHMoCiAgICAgfSk7
CiB9CiAKLXZvaWQgSlNQYXltZW50UmVzcG9uc2U6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpT
Qzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9p
ZCBKU1BheW1lbnRSZXNwb25zZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlz
aXRvcikKIHsKICAgICB3cmFwcGVkKCkuY2FjaGVkRGV0YWlscygpLnZpc2l0KHZpc2l0b3IpOwog
fQogCit0ZW1wbGF0ZSB2b2lkIEpTUGF5bWVudFJlc3BvbnNlOjp2aXNpdEFkZGl0aW9uYWxDaGls
ZHJlbihKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNQYXltZW50
UmVzcG9uc2U6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImKTsKKwog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKFBBWU1FTlRfUkVRVUVT
VCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUGVyZm9ybWFuY2VPYnNlcnZl
ckN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNQ
ZXJmb3JtYW5jZU9ic2VydmVyQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNQZXJmb3JtYW5jZU9ic2VydmVyQ3VzdG9tLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0zMSwxMiArMzEsMTYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lk
IEpTUGVyZm9ybWFuY2VPYnNlcnZlcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90
VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTUGVy
Zm9ybWFuY2VPYnNlcnZlcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRv
cikKIHsKICAgICB3cmFwcGVkKCkuY2FsbGJhY2soKS52aXNpdEpTRnVuY3Rpb24odmlzaXRvcik7
CiB9CiAKLWJvb2wgSlNQZXJmb3JtYW5jZU9ic2VydmVyT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9w
YXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgSlNDOjpT
bG90VmlzaXRvciYsIGNvbnN0IGNoYXIqKiByZWFzb24pCit0ZW1wbGF0ZSB2b2lkIEpTUGVyZm9y
bWFuY2VPYnNlcnZlcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpBYnN0cmFjdFNsb3RW
aXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTUGVyZm9ybWFuY2VPYnNlcnZlcjo6dmlzaXRBZGRp
dGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYpOworCitib29sIEpTUGVyZm9ybWFuY2VP
YnNlcnZlck93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6
OlVua25vd24+IGhhbmRsZSwgdm9pZCosIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYsIGNvbnN0
IGNoYXIqKiByZWFzb24pCiB7CiAgICAgaWYgKFVOTElLRUxZKHJlYXNvbikpCiAgICAgICAgICpy
ZWFzb24gPSAiUmVnaXN0ZXJlZCBQZXJmb3JtYW5jZU9ic2VydmVyIGNhbGxiYWNrIjsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUG9wU3RhdGVFdmVudEN1c3RvbS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNQb3BTdGF0ZUV2ZW50Q3Vz
dG9tLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNQb3BTdGF0ZUV2ZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAK
IC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCkBAIC05MCw5ICs5MSwxMyBAQCBK
U1ZhbHVlIEpTUG9wU3RhdGVFdmVudDo6c3RhdGUoSlNHbG9iYWxPCiAgICAgcmV0dXJuIGNhY2hl
U3RhdGUocmVzdWx0KTsKIH0KIAotdm9pZCBKU1BvcFN0YXRlRXZlbnQ6OnZpc2l0QWRkaXRpb25h
bENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPgordm9pZCBKU1BvcFN0YXRlRXZlbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZp
c2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgd3JhcHBlZCgpLnN0YXRlKCkudmlzaXQodmlzaXRvcik7
CiB9CiAKK3RlbXBsYXRlIHZvaWQgSlNQb3BTdGF0ZUV2ZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGls
ZHJlbihKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNQb3BTdGF0
ZUV2ZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJik7CisKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
UHJvbWlzZVJlamVjdGlvbkV2ZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU1Byb21pc2VSZWplY3Rpb25FdmVudEN1c3RvbS5jcHAJKHJldmlz
aW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUHJvbWlzZVJlamVj
dGlvbkV2ZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAg
KiBDb3B5cmlnaHQgKEMpIDIwMTggWXVzdWtlIFN1enVraSA8eXVzdWtlc3V6dWtpQHNsb3dzdGFy
dC5vcmc+LgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzIsOSArMzMsMTMgQEAK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIEpTUHJvbWlzZVJlamVjdGlvbkV2ZW50Ojp2
aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxh
dGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNQcm9taXNlUmVqZWN0aW9uRXZlbnQ6OnZpc2l0
QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgd3JhcHBlZCgpLnJl
YXNvbigpLnZpc2l0KHZpc2l0b3IpOwogfQogCit0ZW1wbGF0ZSB2b2lkIEpTUHJvbWlzZVJlamVj
dGlvbkV2ZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OkFic3RyYWN0U2xvdFZpc2l0
b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNQcm9taXNlUmVqZWN0aW9uRXZlbnQ6OnZpc2l0QWRkaXRp
b25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImKTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNSZXNpemVPYnNlcnZlckN1c3Rv
bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNSZXNpemVP
YnNlcnZlckN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTUmVzaXplT2JzZXJ2ZXJDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAyMCBJZ2FsaWEgUy5MLgorICogQ29w
eXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzAsMTEgKzMxLDE1IEBACiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotdm9pZCBKU1Jlc2l6ZU9ic2VydmVyOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJl
bihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4K
K3ZvaWQgSlNSZXNpemVPYnNlcnZlcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYg
dmlzaXRvcikKIHsKICAgICBSZXNpemVPYnNlcnZlckNhbGxiYWNrKiBjYWxsYmFjayA9IHdyYXBw
ZWQoKS5jYWxsYmFja0NvbmN1cnJlbnRseSgpOwogICAgIGlmIChjYWxsYmFjaykKICAgICAgICAg
Y2FsbGJhY2stPnZpc2l0SlNGdW5jdGlvbih2aXNpdG9yKTsKIH0KIAotfQordGVtcGxhdGUgdm9p
ZCBKU1Jlc2l6ZU9ic2VydmVyOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OkFic3RyYWN0
U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNSZXNpemVPYnNlcnZlcjo6dmlzaXRBZGRp
dGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYpOworCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1Jlc2l6ZU9ic2VydmVyRW50
cnlDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
UmVzaXplT2JzZXJ2ZXJFbnRyeUN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUmVzaXplT2JzZXJ2ZXJFbnRyeUN1c3RvbS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDE5IEln
YWxpYSBTLkwuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMCwxMCArMzEsMTQg
QEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIEpTUmVzaXplT2JzZXJ2ZXJFbnRyeTo6
dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBs
YXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTUmVzaXplT2JzZXJ2ZXJFbnRyeTo6dmlzaXRB
ZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB2aXNpdG9yLmFkZE9w
YXF1ZVJvb3Qocm9vdCh3cmFwcGVkKCkudGFyZ2V0KCkpKTsKICAgICB2aXNpdG9yLmFkZE9wYXF1
ZVJvb3Qod3JhcHBlZCgpLmNvbnRlbnRSZWN0KCkpOwogfQogCi19Cit0ZW1wbGF0ZSB2b2lkIEpT
UmVzaXplT2JzZXJ2ZXJFbnRyeTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpBYnN0cmFj
dFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTUmVzaXplT2JzZXJ2ZXJFbnRyeTo6dmlz
aXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYpOworCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NWR1ZpZXdTcGVj
Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NW
R1ZpZXdTcGVjQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNTVkdWaWV3U3BlY0N1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOC0yMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzAsMTAg
KzMwLDE0IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBKU1NWR1ZpZXdTcGVjOjp2
aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxh
dGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNTVkdWaWV3U3BlYzo6dmlzaXRBZGRpdGlvbmFs
Q2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBBU1NFUlQod3JhcHBlZCgpLmNvbnRl
eHRFbGVtZW50Q29uY3VycmVudGx5KCkuZ2V0KCkpOwogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9v
dChyb290KHdyYXBwZWQoKS5jb250ZXh0RWxlbWVudENvbmN1cnJlbnRseSgpLmdldCgpKSk7CiB9
CiAKLX0KK3RlbXBsYXRlIHZvaWQgSlNTVkdWaWV3U3BlYzo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRy
ZW4oSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTU1ZHVmlld1Nw
ZWM6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImKTsKKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNTZXJ2
aWNlV29ya2VyR2xvYmFsU2NvcGVDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTU2VydmljZVdvcmtlckdsb2JhbFNjb3BlQ3VzdG9tLmNwcAkocmV2
aXNpb24gMjcyODMwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNTZXJ2aWNlV29y
a2VyR2xvYmFsU2NvcGVDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM0LDEyICszNCwxNiBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKLXZvaWQgSlNTZXJ2
aWNlV29ya2VyR2xvYmFsU2NvcGU6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9y
JiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNTZXJ2aWNlV29y
a2VyR2xvYmFsU2NvcGU6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3Ip
CiB7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KCZ3cmFwcGVkKCkuY2xpZW50cygpKTsKICAg
ICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QoJndyYXBwZWQoKS5yZWdpc3RyYXRpb24oKSk7CiB9CiAK
K3RlbXBsYXRlIHZvaWQgSlNTZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGU6OnZpc2l0QWRkaXRpb25h
bENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNTZXJ2aWNl
V29ya2VyR2xvYmFsU2NvcGU6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJik7
CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU1N0YXRpY1JhbmdlQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1N0YXRpY1JhbmdlQ3VzdG9tLmNwcAkocmV2aXNpb24g
MjcyODMwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNTdGF0aWNSYW5nZUN1c3Rv
bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDkgKzMwLDEzIEBACiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAotdm9pZCBKU1N0YXRpY1JhbmdlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6
OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQg
SlNTdGF0aWNSYW5nZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikK
IHsKICAgICB3cmFwcGVkKCkudmlzaXROb2Rlc0NvbmN1cnJlbnRseSh2aXNpdG9yKTsKIH0KIAor
dGVtcGxhdGUgdm9pZCBKU1N0YXRpY1JhbmdlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6
OkFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNTdGF0aWNSYW5nZTo6dmlz
aXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYpOworCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1N0eWxlU2hlZXRD
dXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU3R5
bGVTaGVldEN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTU3R5bGVTaGVldEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDIxIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtMzAsMTEgKzMwLDE1IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBKU1N0eWxl
U2hlZXQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3Ip
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1N0eWxlU2hlZXQ6OnZpc2l0QWRk
aXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgdmlzaXRvci5hZGRPcGFx
dWVSb290KHJvb3QoJndyYXBwZWQoKSkpOwogfQogCit0ZW1wbGF0ZSB2b2lkIEpTU3R5bGVTaGVl
dDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oQWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxh
dGUgdm9pZCBKU1N0eWxlU2hlZXQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9y
Jik7CisKIEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6SlNHbG9iYWxPYmplY3Qq
LCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWY8U3R5bGVTaGVldD4mJiBzdHls
ZVNoZWV0KQogewogICAgIGlmIChzdHlsZVNoZWV0LT5pc0NTU1N0eWxlU2hlZXQoKSkKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVGV4dFRyYWNrQ3VlQ3VzdG9tLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1RleHRUcmFja0N1ZUN1c3Rv
bS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
VGV4dFRyYWNrQ3VlQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDExLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zOCw3ICszOCw3IEBACiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCi1ib29sIEpTVGV4dFRyYWNr
Q3VlT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5r
bm93bj4gaGFuZGxlLCB2b2lkKiwgU2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiBy
ZWFzb24pCitib29sIEpTVGV4dFRyYWNrQ3VlT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJv
b3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgQWJzdHJhY3RTbG90
VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikKIHsKICAgICBKU1RleHRUcmFj
a0N1ZSoganNUZXh0VHJhY2tDdWUgPSBqc0Nhc3Q8SlNUZXh0VHJhY2tDdWUqPihoYW5kbGUuc2xv
dCgpLT5hc0NlbGwoKSk7CiAgICAgVGV4dFRyYWNrQ3VlJiB0ZXh0VHJhY2tDdWUgPSBqc1RleHRU
cmFja0N1ZS0+d3JhcHBlZCgpOwpAQCAtODIsMTIgKzgyLDE2IEBAIEpTVmFsdWUgdG9KUyhKU0ds
b2JhbE9iamVjdCogbGV4aWNhbEdsb2IKICAgICByZXR1cm4gd3JhcChsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBnbG9iYWxPYmplY3QsIGN1ZSk7CiB9CiAKLXZvaWQgSlNUZXh0VHJhY2tDdWU6OnZpc2l0
QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5h
bWUgVmlzaXRvcj4KK3ZvaWQgSlNUZXh0VHJhY2tDdWU6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVu
KFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgaWYgKFRleHRUcmFjayogdGV4dFRyYWNrID0gd3Jh
cHBlZCgpLnRyYWNrKCkpCiAgICAgICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChyb290KHRleHRU
cmFjaykpOwogfQogCit0ZW1wbGF0ZSB2b2lkIEpTVGV4dFRyYWNrQ3VlOjp2aXNpdEFkZGl0aW9u
YWxDaGlsZHJlbihBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTVGV4dFRy
YWNrQ3VlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYpOworCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNUZXh0VHJhY2tDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTVGV4dFRyYWNrQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNUZXh0VHJhY2tDdXN0b20uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAyMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTM2LDExICszNiwxNSBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogdXNpbmcgbmFtZXNwYWNl
IEpTQzsKIAotdm9pZCBKU1RleHRUcmFjazo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZp
c2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1RleHRU
cmFjazo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB2
aXNpdG9yLmFkZE9wYXF1ZVJvb3Qocm9vdCgmd3JhcHBlZCgpKSk7CiB9CiAKK3RlbXBsYXRlIHZv
aWQgSlNUZXh0VHJhY2s6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0
b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNUZXh0VHJhY2s6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVu
KFNsb3RWaXNpdG9yJik7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1RleHRUcmFja0xpc3RDdXN0b20uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVGV4dFRyYWNrTGlzdEN1
c3RvbS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTVGV4dFRyYWNrTGlzdEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzYsMTEgKzM2LDE1IEBA
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCi12b2lkIEpTVGV4
dFRyYWNrTGlzdDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlz
aXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTVGV4dFRyYWNrTGlzdDo6
dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB2aXNpdG9y
LmFkZE9wYXF1ZVJvb3Qocm9vdCh3cmFwcGVkKCkuZWxlbWVudCgpKSk7CiB9CiAgICAgCit0ZW1w
bGF0ZSB2b2lkIEpTVGV4dFRyYWNrTGlzdDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oQWJzdHJh
Y3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU1RleHRUcmFja0xpc3Q6OnZpc2l0QWRk
aXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
IAogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1RyZWVXYWxrZXJD
dXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVHJl
ZVdhbGtlckN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTVHJlZVdhbGtlckN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIxIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjUsMTAgKzI1
LDE0IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBKU1RyZWVXYWxrZXI6OnZpc2l0
QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0
eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1RyZWVXYWxrZXI6OnZpc2l0QWRkaXRpb25hbENoaWxk
cmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgaWYgKE5vZGVGaWx0ZXIqIGZpbHRlciA9IHdy
YXBwZWQoKS5maWx0ZXIoKSkKICAgICAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KGZpbHRlcik7
CiB9CiAKLX0KK3RlbXBsYXRlIHZvaWQgSlNUcmVlV2Fsa2VyOjp2aXNpdEFkZGl0aW9uYWxDaGls
ZHJlbihKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNUcmVlV2Fs
a2VyOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJik7CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVW5k
b0l0ZW1DdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTVW5kb0l0ZW1DdXN0b20uY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU1VuZG9JdGVtQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE5LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOSwxMyAr
MjksMTcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIEpTVW5kb0l0ZW06OnZpc2l0
QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0
eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1VuZG9JdGVtOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJl
bihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHdyYXBwZWQoKS51bmRvSGFuZGxlcigpLnZpc2l0
SlNGdW5jdGlvbih2aXNpdG9yKTsKICAgICB3cmFwcGVkKCkucmVkb0hhbmRsZXIoKS52aXNpdEpT
RnVuY3Rpb24odmlzaXRvcik7CiB9CiAKLWJvb2wgSlNVbmRvSXRlbU93bmVyOjppc1JlYWNoYWJs
ZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCos
IEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCit0ZW1wbGF0
ZSB2b2lkIEpTVW5kb0l0ZW06OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6QWJzdHJhY3RT
bG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU1VuZG9JdGVtOjp2aXNpdEFkZGl0aW9uYWxD
aGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJik7CisKK2Jvb2wgSlNVbmRvSXRlbU93bmVyOjppc1Jl
YWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwg
dm9pZCosIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJl
YXNvbikKIHsKICAgICBpZiAoVU5MSUtFTFkocmVhc29uKSkKICAgICAgICAgKnJlYXNvbiA9ICJE
b2N1bWVudCBpcyBhbiBvcGFxdWUgcm9vdC4iOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNWYWx1ZUluV3JhcHBlZE9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTVmFsdWVJbldyYXBwZWRPYmplY3QuaAkocmV2aXNpb24gMjcyODMw
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNWYWx1ZUluV3JhcHBlZE9iamVjdC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
OCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTgt
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC00MCw3ICs0MCw3IEBAIHB1YmxpYzoKICAgICBvcGVyYXRvciBKU0M6OkpT
VmFsdWUoKSBjb25zdDsKICAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3Q7CiAgICAg
SlNWYWx1ZUluV3JhcHBlZE9iamVjdCYgb3BlcmF0b3I9KGNvbnN0IEpTVmFsdWVJbldyYXBwZWRP
YmplY3QmIG90aGVyKTsKLSAgICB2b2lkIHZpc2l0KEpTQzo6U2xvdFZpc2l0b3ImKSBjb25zdDsK
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIHZpc2l0KFZpc2l0b3ImKSBjb25z
dDsKICAgICB2b2lkIGNsZWFyKCk7CiAKIHByaXZhdGU6CkBAIC05OCw3ICs5OCw4IEBAIGlubGlu
ZSBKU1ZhbHVlSW5XcmFwcGVkT2JqZWN0JiBKU1ZhbHVlSW4KICAgICByZXR1cm4gKnRoaXM7CiB9
CiAKLWlubGluZSB2b2lkIEpTVmFsdWVJbldyYXBwZWRPYmplY3Q6OnZpc2l0KEpTQzo6U2xvdFZp
c2l0b3ImIHZpc2l0b3IpIGNvbnN0Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgoraW5saW5l
IHZvaWQgSlNWYWx1ZUluV3JhcHBlZE9iamVjdDo6dmlzaXQoVmlzaXRvciYgdmlzaXRvcikgY29u
c3QKIHsKICAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbihtX3ZhbHVlLCBbXSAoSlNDOjpKU1ZhbHVl
KSB7CiAgICAgICAgIC8vIE5vdGhpbmcgdG8gdmlzaXQuCkBAIC0xMDcsNiArMTA4LDkgQEAgaW5s
aW5lIHZvaWQgSlNWYWx1ZUluV3JhcHBlZE9iamVjdDo6dmlzaQogICAgIH0pOwogfQogCit0ZW1w
bGF0ZSB2b2lkIEpTVmFsdWVJbldyYXBwZWRPYmplY3Q6OnZpc2l0KEpTQzo6QWJzdHJhY3RTbG90
VmlzaXRvciYpIGNvbnN0OwordGVtcGxhdGUgdm9pZCBKU1ZhbHVlSW5XcmFwcGVkT2JqZWN0Ojp2
aXNpdChKU0M6OlNsb3RWaXNpdG9yJikgY29uc3Q7CisKIGlubGluZSB2b2lkIEpTVmFsdWVJbldy
YXBwZWRPYmplY3Q6OmNsZWFyKCkKIHsKICAgICBXVEY6OnN3aXRjaE9uKG1fdmFsdWUsIFtdIChX
ZWFrJiB2YWx1ZSkgewpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNWaWRlb1Ry
YWNrQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U1ZpZGVvVHJhY2tDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU1ZpZGVvVHJhY2tDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM1LDEx
ICszNSwxNSBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAot
dm9pZCBKU1ZpZGVvVHJhY2s6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNWaWRlb1RyYWNrOjp2
aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHZpc2l0b3Iu
YWRkT3BhcXVlUm9vdChyb290KCZ3cmFwcGVkKCkpKTsKIH0KIAordGVtcGxhdGUgdm9pZCBKU1Zp
ZGVvVHJhY2s6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRv
ciYpOwordGVtcGxhdGUgdm9pZCBKU1ZpZGVvVHJhY2s6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVu
KEpTQzo6U2xvdFZpc2l0b3ImKTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVmlkZW9UcmFja0xpc3RDdXN0b20u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVmlkZW9UcmFj
a0xpc3RDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU1ZpZGVvVHJhY2tMaXN0Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNSwxMSAr
MzUsMTUgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKLXZv
aWQgSlNWaWRlb1RyYWNrTGlzdDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3Im
IHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1ZpZGVvVHJhY2tM
aXN0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHZp
c2l0b3IuYWRkT3BhcXVlUm9vdChyb290KHdyYXBwZWQoKS5lbGVtZW50KCkpKTsKIH0KIAordGVt
cGxhdGUgdm9pZCBKU1ZpZGVvVHJhY2tMaXN0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihBYnN0
cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTVmlkZW9UcmFja0xpc3Q6OnZpc2l0
QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKIAogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYkdMMlJl
bmRlcmluZ0NvbnRleHRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTV2ViR0wyUmVuZGVyaW5nQ29udGV4dEN1c3RvbS5jcHAJKHJldmlzaW9uIDI3
MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViR0wyUmVuZGVyaW5nQ29u
dGV4dEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE1LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMywxMiArMzMsMTYgQEAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKLXZvaWQgSlNXZWJHTDJSZW5k
ZXJpbmdDb250ZXh0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRv
cikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTV2ViR0wyUmVuZGVyaW5nQ29u
dGV4dDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB2
aXNpdG9yLmFkZE9wYXF1ZVJvb3QoJndyYXBwZWQoKSk7CiAgICAgd3JhcHBlZCgpLmFkZE1lbWJl
cnNUb09wYXF1ZVJvb3RzKHZpc2l0b3IpOwogfQogCit0ZW1wbGF0ZSB2b2lkIEpTV2ViR0wyUmVu
ZGVyaW5nQ29udGV4dDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpBYnN0cmFjdFNsb3RW
aXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTV2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6dmlzaXRB
ZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYpOworCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoV0VCR0wpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU1dlYkdMUmVuZGVyaW5nQ29udGV4dEN1c3RvbS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRDdXN0
b20uY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U1dlYkdMUmVuZGVyaW5nQ29udGV4dEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzMsMTIgKzMz
LDE2IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCi12b2lk
IEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90Vmlz
aXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTV2ViR0xS
ZW5kZXJpbmdDb250ZXh0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9y
KQogewogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdCgmd3JhcHBlZCgpKTsKICAgICB3cmFwcGVk
KCkuYWRkTWVtYmVyc1RvT3BhcXVlUm9vdHModmlzaXRvcik7CiB9CiAKK3RlbXBsYXRlIHZvaWQg
SlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEFic3RyYWN0
U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZp
c2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CisKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShXRUJHTCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTV29ya2VyR2xvYmFsU2NvcGVCYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckdsb2JhbFNjb3BlQmFzZS5jcHAJKHJldmlz
aW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyR2xvYmFs
U2NvcGVCYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDgsIDIwMDksIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC05Miw3ICs5Miw4IEBAIHZvaWQgSlNXb3JrZXJHbG9i
YWxTY29wZUJhc2U6OmZpbmlzaENyZWEKICAgICBBU1NFUlQoaW5oZXJpdHModm0sIGluZm8oKSkp
OwogfQogCi12b2lkIEpTV29ya2VyR2xvYmFsU2NvcGVCYXNlOjp2aXNpdENoaWxkcmVuKEpTQ2Vs
bCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
Pgordm9pZCBKU1dvcmtlckdsb2JhbFNjb3BlQmFzZTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxs
KiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTV29ya2VyR2xvYmFsU2NvcGVCYXNl
KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTV29ya2VyR2xvYmFsU2NvcGVCYXNlKj4oY2VsbCk7CiAg
ICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtMTAw
LDYgKzEwMSw4IEBAIHZvaWQgSlNXb3JrZXJHbG9iYWxTY29wZUJhc2U6OnZpc2l0Q2hpbGQKICAg
ICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX3Byb3h5KTsKIH0KIAorREVGSU5FX1ZJU0lU
X0NISUxEUkVOKEpTV29ya2VyR2xvYmFsU2NvcGVCYXNlKTsKKwogdm9pZCBKU1dvcmtlckdsb2Jh
bFNjb3BlQmFzZTo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCiB7CiAgICAgc3RhdGljX2Nhc3Q8SlNX
b3JrZXJHbG9iYWxTY29wZUJhc2UqPihjZWxsKS0+SlNXb3JrZXJHbG9iYWxTY29wZUJhc2U6On5K
U1dvcmtlckdsb2JhbFNjb3BlQmFzZSgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNXb3JrZXJHbG9iYWxTY29wZUJhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU1dvcmtlckdsb2JhbFNjb3BlQmFzZS5oCShyZXZpc2lvbiAyNzI4MzAp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckdsb2JhbFNjb3BlQmFzZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAw
OCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDgtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTc5LDcgKzc5LDcgQEAgcHJvdGVjdGVkOgogICAgIEpTV29y
a2VyR2xvYmFsU2NvcGVCYXNlKEpTQzo6Vk0mLCBKU0M6OlN0cnVjdHVyZSosIFJlZlB0cjxXb3Jr
ZXJHbG9iYWxTY29wZT4mJik7CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJiwgSlND
OjpKU1Byb3h5Kik7CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQzo6SlNDZWxs
KiwgSlNDOjpTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKIHBy
aXZhdGU6CiAgICAgUmVmUHRyPFdvcmtlckdsb2JhbFNjb3BlPiBtX3dyYXBwZWQ7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckdsb2JhbFNjb3BlQ3VzdG9tLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckdsb2JhbFNj
b3BlQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNXb3JrZXJHbG9iYWxTY29wZUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMDksIDIwMTEsIDIwMTYgQXBw
bGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMjEg
QXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0zMyw3ICszMyw4IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1l
c3BhY2UgSlNDOwogCi12b2lkIEpTV29ya2VyR2xvYmFsU2NvcGU6OnZpc2l0QWRkaXRpb25hbENo
aWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4K
K3ZvaWQgSlNXb3JrZXJHbG9iYWxTY29wZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRv
ciYgdmlzaXRvcikKIHsKICAgICBpZiAoYXV0byogbG9jYXRpb24gPSB3cmFwcGVkKCkub3B0aW9u
YWxMb2NhdGlvbigpKQogICAgICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QobG9jYXRpb24pOwpA
QCAtNDgsNiArNDksOSBAQCB2b2lkIEpTV29ya2VyR2xvYmFsU2NvcGU6OnZpc2l0QWRkaXRpb25h
CiAgICAgd3JhcHBlZCgpLnZpc2l0SlNFdmVudExpc3RlbmVycyh2aXNpdG9yKTsKIH0KIAordGVt
cGxhdGUgdm9pZCBKU1dvcmtlckdsb2JhbFNjb3BlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihB
YnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTV29ya2VyR2xvYmFsU2NvcGU6
OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CisKIEpTVmFsdWUgSlNXb3Jr
ZXJHbG9iYWxTY29wZTo6cXVldWVNaWNyb3Rhc2soSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9i
YWxPYmplY3QsIENhbGxGcmFtZSYgY2FsbEZyYW1lKQogewogICAgIFZNJiB2bSA9IGxleGljYWxH
bG9iYWxPYmplY3Qudm0oKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29y
a2VyTmF2aWdhdG9yQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU1dvcmtlck5hdmlnYXRvckN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyTmF2aWdhdG9yQ3VzdG9tLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIw
MjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0yOCw5ICsyOCwxMyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZv
aWQgSlNXb3JrZXJOYXZpZ2F0b3I6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZp
c2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1dvcmtl
ck5hdmlnYXRvcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsK
ICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qoc3RhdGljX2Nhc3Q8TmF2aWdhdG9yQmFzZSo+KCZ3
cmFwcGVkKCkpKTsKIH0KIAotfQordGVtcGxhdGUgdm9pZCBKU1dvcmtlck5hdmlnYXRvcjo6dmlz
aXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0
ZSB2b2lkIEpTV29ya2VyTmF2aWdhdG9yOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNs
b3RWaXNpdG9yJik7CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTV29ya2xldEdsb2JhbFNjb3BlQmFzZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrbGV0R2xvYmFsU2NvcGVCYXNlLmNw
cAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXb3Jr
bGV0R2xvYmFsU2NvcGVCYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC04Miw3ICs4Miw4IEBAIHZvaWQg
SlNXb3JrbGV0R2xvYmFsU2NvcGVCYXNlOjpmaW5pc2hDcmUKICAgICBBU1NFUlQoaW5oZXJpdHMo
dm0sIGluZm8oKSkpOwogfQogCi12b2lkIEpTV29ya2xldEdsb2JhbFNjb3BlQmFzZTo6dmlzaXRD
aGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlw
ZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNXb3JrbGV0R2xvYmFsU2NvcGVCYXNlOjp2aXNpdENoaWxk
cmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0byogdGhp
c09iamVjdCA9IGpzQ2FzdDxKU1dvcmtsZXRHbG9iYWxTY29wZUJhc2UqPihjZWxsKTsKICAgICBB
U1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC05MCw2ICs5
MSw4IEBAIHZvaWQgSlNXb3JrbGV0R2xvYmFsU2NvcGVCYXNlOjp2aXNpdENoaWwKICAgICB2aXNp
dG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX3Byb3h5KTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxE
UkVOKEpTV29ya2xldEdsb2JhbFNjb3BlQmFzZSk7CisKIHZvaWQgSlNXb3JrbGV0R2xvYmFsU2Nv
cGVCYXNlOjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKIHsKICAgICBzdGF0aWNfY2FzdDxKU1dvcmts
ZXRHbG9iYWxTY29wZUJhc2UqPihjZWxsKS0+SlNXb3JrbGV0R2xvYmFsU2NvcGVCYXNlOjp+SlNX
b3JrbGV0R2xvYmFsU2NvcGVCYXNlKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU1dvcmtsZXRHbG9iYWxTY29wZUJhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU1dvcmtsZXRHbG9iYWxTY29wZUJhc2UuaAkocmV2aXNpb24gMjcyODMw
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrbGV0R2xvYmFsU2NvcGVCYXNl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
OC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtNjcsNyArNjcsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgSlNXb3JrbGV0
R2xvYmFsU2NvcGVCYXNlKEpTQzo6Vk0mLCBKU0M6OlN0cnVjdHVyZSosIFJlZlB0cjxXb3JrbGV0
R2xvYmFsU2NvcGU+JiYpOwogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYsIEpTQzo6
SlNQcm94eSopOwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0M6OkpTQ2VsbCos
IEpTQzo6U2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiBwcml2
YXRlOgogICAgIFJlZlB0cjxXb3JrbGV0R2xvYmFsU2NvcGU+IG1fd3JhcHBlZDsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTWE1MSHR0cFJlcXVlc3RDdXN0b20uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTWE1MSHR0cFJlcXVlc3RDdXN0
b20uY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U1hNTEh0dHBSZXF1ZXN0Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00MSw3ICs0MSw4
IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCi12b2lkIEpT
WE1MSHR0cFJlcXVlc3Q6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNp
dG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNYTUxIdHRwUmVxdWVzdDo6
dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBpZiAoYXV0
byogdXBsb2FkID0gd3JhcHBlZCgpLm9wdGlvbmFsVXBsb2FkKCkpCiAgICAgICAgIHZpc2l0b3Iu
YWRkT3BhcXVlUm9vdCh1cGxvYWQpOwpAQCAtNTAsNiArNTEsOSBAQCB2b2lkIEpTWE1MSHR0cFJl
cXVlc3Q6OnZpc2l0QWRkaXRpb25hbENoCiAgICAgICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChy
ZXNwb25zZURvY3VtZW50KTsKIH0KIAordGVtcGxhdGUgdm9pZCBKU1hNTEh0dHBSZXF1ZXN0Ojp2
aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2
b2lkIEpTWE1MSHR0cFJlcXVlc3Q6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9y
Jik7CisKIEpTVmFsdWUgSlNYTUxIdHRwUmVxdWVzdDo6cmVzcG9uc2UoSlNHbG9iYWxPYmplY3Qm
IGxleGljYWxHbG9iYWxPYmplY3QpIGNvbnN0CiB7CiAgICAgYXV0byBjYWNoZVJlc3VsdCA9IFsm
XSAoSlNWYWx1ZSB2YWx1ZSkgLT4gSlNWYWx1ZSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU1hQYXRoUmVzdWx0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU1hQYXRoUmVzdWx0Q3VzdG9tLmNwcAkocmV2aXNpb24gMjcyODMw
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNYUGF0aFJlc3VsdEN1c3RvbS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDEx
IEp1bGllbiBDaGFmZnJhaXggPGpjaGFmZnJhaXhAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAo
QykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTMxLDcgKzMyLDggQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci12b2lkIEpTWFBhdGhSZXN1bHQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZp
c2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1hQYXRo
UmVzdWx0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAg
IGF1dG8mIHZhbHVlID0gd3JhcHBlZCgpLnZhbHVlKCk7CiAgICAgaWYgKHZhbHVlLmlzTm9kZVNl
dCgpKSB7CkBAIC00MSw0ICs0Myw3IEBAIHZvaWQgSlNYUGF0aFJlc3VsdDo6dmlzaXRBZGRpdGlv
bmFsQ2hpbGQKICAgICB9CiB9CiAKK3RlbXBsYXRlIHZvaWQgSlNYUGF0aFJlc3VsdDo6dmlzaXRB
ZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2
b2lkIEpTWFBhdGhSZXN1bHQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0
b3ImKTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvV2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXIuY3Bw
CShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJDb3Jl
VHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU2LDcgKzU2LDcgQEAgYm9v
bCBXZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXI6OmlzQXRvbQogICAgIHJldHVybiBtX2FsbG93
QXRvbWljc1dhaXQ7CiB9CiAKLWJvb2wgV2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyOjpKU0Fy
cmF5QnVmZmVyT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpT
Qzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvciwgY29u
c3QgY2hhcioqIHJlYXNvbikKK2Jvb2wgV2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyOjpKU0Fy
cmF5QnVmZmVyT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpT
Qzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNp
dG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQogewogICAgIGlmIChVTkxJS0VMWShyZWFzb24pKQog
ICAgICAgICAqcmVhc29uID0gIkFycmF5QnVmZmVyIGlzIG9wYXF1ZSByb290IjsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dlYkNvcmVUeXBlZEFycmF5
Q29udHJvbGxlci5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9XZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00OCw3ICs0
OCw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgY2xhc3MgSlNBcnJheUJ1ZmZlck93bmVyIDog
cHVibGljIEpTQzo6V2Vha0hhbmRsZU93bmVyIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIGJvb2wg
aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9p
ZCogY29udGV4dCwgSlNDOjpTbG90VmlzaXRvciYsIGNvbnN0IGNoYXIqKikgb3ZlcnJpZGU7Cisg
ICAgICAgIGJvb2wgaXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpV
bmtub3duPiwgdm9pZCogY29udGV4dCwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiwgY29uc3Qg
Y2hhcioqKSBvdmVycmlkZTsKICAgICAgICAgdm9pZCBmaW5hbGl6ZShKU0M6OkhhbmRsZTxKU0M6
OlVua25vd24+LCB2b2lkKiBjb250ZXh0KSBvdmVycmlkZTsKICAgICB9OwogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQko
cmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2Rl
R2VuZXJhdG9ySlMucG0JKHdvcmtpbmcgY29weSkKQEAgLTMsNyArMyw3IEBACiAjIENvcHlyaWdo
dCAoQykgMjAwNiBBbmRlcnMgQ2FybHNzb24gPGFuZGVyc2NhQG1hYy5jb20+CiAjIENvcHlyaWdo
dCAoQykgMjAwNiwgMjAwNyBTYW11ZWwgV2VpbmlnIDxzYW1Ad2Via2l0Lm9yZz4KICMgQ29weXJp
Z2h0IChDKSAyMDA2IEFsZXhleSBQcm9za3VyeWFrb3YgPGFwQHdlYmtpdC5vcmc+Ci0jIENvcHly
aWdodCAoQykgMjAwNi0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgQ29w
eXJpZ2h0IChDKSAyMDA2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogIyBD
b3B5cmlnaHQgKEMpIDIwMDkgQ2FtZXJvbiBNY0Nvcm1hY2sgPGNhbUBtY2MuaWQuYXU+CiAjIENv
cHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICMgQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBp
dHMgc3Vic2lkaWFyeSgtaWVzKQpAQCAtMzA3OCw4ICszMDc4LDggQEAgc3ViIEdlbmVyYXRlSGVh
ZGVyCiAKICAgICAjIHZpc2l0IGZ1bmN0aW9uCiAgICAgaWYgKCRuZWVkc1Zpc2l0Q2hpbGRyZW4p
IHsKLSAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICBzdGF0aWMgdm9pZCB2aXNpdENo
aWxkcmVuKEpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKTtcbiIpOwotICAgICAgICBwdXNoKEBo
ZWFkZXJDb250ZW50LCAiICAgIHZvaWQgdmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90
VmlzaXRvciYpO1xuIikgaWYgJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57SlNDdXN0
b21NYXJrRnVuY3Rpb259OworICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIERFQ0xB
UkVfVklTSVRfQ0hJTERSRU47XG4iKTsKKyAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIHZpc2l0QWRkaXRpb25hbENoaWxkcmVu
KFZpc2l0b3ImKTtcbiIpIGlmICRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+e0pTQ3Vz
dG9tTWFya0Z1bmN0aW9ufTsKICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIlxuIik7CiAK
ICAgICAgICAgaWYgKCRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+e0pTQ3VzdG9tTWFy
a0Z1bmN0aW9ufSkgewpAQCAtMzA5NCw3ICszMDk0LDcgQEAgc3ViIEdlbmVyYXRlSGVhZGVyCiAg
ICAgICAgICAgICAjIHRoYXQgdGhlIEdDIGNhbGxzIHRvIGFzayBhbiBvYmplY3QgaXMgaXQgd291
bGQgbGlrZSB0byBtYXJrIGFueXRoaW5nIGVsc2UgYWZ0ZXIgdGhlCiAgICAgICAgICAgICAjIHBy
b2dyYW0gcmVzdW1lZCBzaW5jZSB0aGUgbGFzdCBjYWxsIHRvIHZpc2l0Q2hpbGRyZW4gb3Igdmlz
aXRPdXRwdXRDb25zdHJhaW50cy4gU2luY2UKICAgICAgICAgICAgICMgdGhpcyBqdXN0IGNhbGxz
IHZpc2l0QWRkaXRpb25hbENoaWxkcmVuLCB5b3UgdXN1YWxseSBkb24ndCBoYXZlIHRvIHdvcnJ5
IGFib3V0IHRoaXMuCi0gICAgICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHN0YXRp
YyB2b2lkIHZpc2l0T3V0cHV0Q29uc3RyYWludHMoSlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYp
O1xuIik7CisgICAgICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHN0YXRpYyB2b2lk
IHZpc2l0T3V0cHV0Q29uc3RyYWludHMoSlNDZWxsKiwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9y
Jik7XG4iKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMzIxNSw3ICszMjE1LDcgQEAgc3ViIEdl
bmVyYXRlSGVhZGVyCiAgICAgICAgIH0KICAgICAgICAgJGhlYWRlckluY2x1ZGVzeyI8d3RmL05l
dmVyRGVzdHJveWVkLmg+In0gPSAxOwogICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAicHVi
bGljOlxuIik7Ci0gICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgYm9vbCBpc1JlYWNo
YWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250
ZXh0LCBKU0M6OlNsb3RWaXNpdG9yJiwgY29uc3QgY2hhcioqKSAke292ZXJyaWRlRGVjbH07XG4i
KTsKKyAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICBib29sIGlzUmVhY2hhYmxlRnJv
bU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIEpT
Qzo6QWJzdHJhY3RTbG90VmlzaXRvciYsIGNvbnN0IGNoYXIqKikgJHtvdmVycmlkZURlY2x9O1xu
Iik7CiAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgdm9pZCBmaW5hbGl6ZShKU0M6
OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0KSAke292ZXJyaWRlRGVjbH07XG4i
KTsKICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIn07XG4iKTsKICAgICAgICAgcHVzaChA
aGVhZGVyQ29udGVudCwgIlxuIik7CkBAIC00OTM5LDYgKzQ5MzksNyBAQCBzdWIgR2VuZXJhdGVJ
bXBsZW1lbnRhdGlvbgogICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJET01Jc29TdWJzcGFjZXMuaCIp
OwogICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJXZWJDb3JlSlNDbGllbnREYXRhLmgiKTsKICAgICBB
ZGRUb0ltcGxJbmNsdWRlcygiPEphdmFTY3JpcHRDb3JlL0pTRGVzdHJ1Y3RpYmxlT2JqZWN0SGVh
cENlbGxUeXBlLmg+Iik7CisgICAgQWRkVG9JbXBsSW5jbHVkZXMoIjxKYXZhU2NyaXB0Q29yZS9T
bG90VmlzaXRvck1hY3Jvcy5oPiIpOwogICAgIEFkZFRvSW1wbEluY2x1ZGVzKCI8SmF2YVNjcmlw
dENvcmUvU3Vic3BhY2VJbmxpbmVzLmg+Iik7CiAgICAgcHVzaChAaW1wbENvbnRlbnQsICJKU0M6
Oklzb1N1YnNwYWNlKiAke2NsYXNzTmFtZX06OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSlc
biIpOwogICAgIHB1c2goQGltcGxDb250ZW50LCAie1xuIik7CkBAIC00OTY2LDcgKzQ5NjcsOCBA
QCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgIHB1c2goQGltcGxDb250ZW50LCAifVxu
XG4iKTsKIAogICAgIGlmICgkbmVlZHNWaXNpdENoaWxkcmVuKSB7Ci0gICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAidm9pZCAke2NsYXNzTmFtZX06OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxs
LCBTbG90VmlzaXRvciYgdmlzaXRvcilcbiIpOworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwg
InRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+XG4iKTsKKyAgICAgICAgcHVzaChAaW1wbENvbnRl
bnQsICJ2b2lkICR7Y2xhc3NOYW1lfTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBW
aXNpdG9yJiB2aXNpdG9yKVxuIik7CiAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAie1xuIik7
CiAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nh
c3Q8JHtjbGFzc05hbWV9Kj4oY2VsbCk7XG4iKTsKICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICIgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpO1xuIik7
CkBAIC00OTkxLDggKzQ5OTMsMTAgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICAg
ICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIn1cblxuIik7
CisgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiREVGSU5FX1ZJU0lUX0NISUxEUkVOKCR7Y2xh
c3NOYW1lfSk7XG5cbiIpOworCiAgICAgICAgIGlmICgkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJp
YnV0ZXMtPntKU0N1c3RvbU1hcmtGdW5jdGlvbn0pIHsKLSAgICAgICAgICAgIHB1c2goQGltcGxD
b250ZW50LCAidm9pZCAke2NsYXNzTmFtZX06OnZpc2l0T3V0cHV0Q29uc3RyYWludHMoSlNDZWxs
KiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcilcbiIpOworICAgICAgICAgICAgcHVzaChAaW1w
bENvbnRlbnQsICJ2b2lkICR7Y2xhc3NOYW1lfTo6dmlzaXRPdXRwdXRDb25zdHJhaW50cyhKU0Nl
bGwqIGNlbGwsIEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpXG4iKTsKICAgICAgICAgICAg
IHB1c2goQGltcGxDb250ZW50LCAie1xuIik7CiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIiAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PCR7Y2xhc3NOYW1lfSo+KGNlbGwpO1xu
Iik7CiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBBU1NFUlRfR0NfT0JKRUNU
X0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7XG4iKTsKQEAgLTUwMzMsNyArNTAzNyw3IEBA
IHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgfQogCiAgICAgaWYgKFNob3VsZEdlbmVy
YXRlV3JhcHBlck93bmVyQ29kZSgkaGFzUGFyZW50LCAkaW50ZXJmYWNlKSAmJiAhR2V0Q3VzdG9t
SXNSZWFjaGFibGUoJGludGVyZmFjZSkpIHsKLSAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJi
b29sIEpTJHtpbnRlcmZhY2VOYW1lfU93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhK
U0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIFNsb3RWaXNpdG9yJiB2aXNp
dG9yLCBjb25zdCBjaGFyKiogcmVhc29uKVxuIik7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50
LCAiYm9vbCBKUyR7aW50ZXJmYWNlTmFtZX1Pd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9v
dHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBBYnN0cmFjdFNsb3RW
aXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKVxuIik7CiAgICAgICAgIHB1c2go
QGltcGxDb250ZW50LCAie1xuIik7CiAgICAgICAgICMgQWxsIEFjdGl2ZURPTU9iamVjdHMgaW1w
bGVtZW50IGhhc1BlbmRpbmdBY3Rpdml0eSgpLCBidXQgbm90IGFsbCBvZiB0aGVtCiAgICAgICAg
ICMgaW5jcmVtZW50IHRoZWlyIEMrKyByZWZlcmVuY2UgY291bnRzIHdoZW4gaGFzUGVuZGluZ0Fj
dGl2aXR5KCkgYmVjb21lcwpAQCAtNjQzMiw2ICs2NDM2LDcgQEAgc3ViIEdlbmVyYXRlQ2FsbGJh
Y2tIZWFkZXJDb250ZW50CiAgICAgICAgIHB1c2goQCRjb250ZW50UmVmLCAiICAgIGJvb2wgaGFz
Q2FsbGJhY2soKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2RhdGEgJiYgbV9kYXRhLT5jYWxsYmFj
aygpOyB9XG5cbiIpOwogICAgIH0KIAorICAgIHB1c2goQCRjb250ZW50UmVmLCAiICAgIHZvaWQg
dmlzaXRKU0Z1bmN0aW9uKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpIG92ZXJyaWRlO1xuXG4i
KSBpZiAkaW50ZXJmYWNlT3JDYWxsYmFjay0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57SXNXZWFrQ2Fs
bGJhY2t9OwogICAgIHB1c2goQCRjb250ZW50UmVmLCAiICAgIHZvaWQgdmlzaXRKU0Z1bmN0aW9u
KEpTQzo6U2xvdFZpc2l0b3ImKSBvdmVycmlkZTtcblxuIikgaWYgJGludGVyZmFjZU9yQ2FsbGJh
Y2stPmV4dGVuZGVkQXR0cmlidXRlcy0+e0lzV2Vha0NhbGxiYWNrfTsKIAogICAgIHB1c2goQCRj
b250ZW50UmVmLCAiICAgICR7Y2FsbGJhY2tEYXRhVHlwZX0qIG1fZGF0YTtcbiIpOwpAQCAtNjYy
Myw2ICs2NjI4LDEwIEBAIHN1YiBHZW5lcmF0ZUNhbGxiYWNrSW1wbGVtZW50YXRpb25Db250ZW4K
ICAgICB9CiAKICAgICBpZiAoJGludGVyZmFjZU9yQ2FsbGJhY2stPmV4dGVuZGVkQXR0cmlidXRl
cy0+e0lzV2Vha0NhbGxiYWNrfSkgeworICAgICAgICBwdXNoKEAkY29udGVudFJlZiwgInZvaWQg
JHtjbGFzc05hbWV9Ojp2aXNpdEpTRnVuY3Rpb24oSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiB2
aXNpdG9yKVxuIik7CisgICAgICAgIHB1c2goQCRjb250ZW50UmVmLCAie1xuIik7CisgICAgICAg
IHB1c2goQCRjb250ZW50UmVmLCAiICAgIG1fZGF0YS0+dmlzaXRKU0Z1bmN0aW9uKHZpc2l0b3Ip
O1xuIik7CisgICAgICAgIHB1c2goQCRjb250ZW50UmVmLCAifVxuXG4iKTsKICAgICAgICAgcHVz
aChAJGNvbnRlbnRSZWYsICJ2b2lkICR7Y2xhc3NOYW1lfTo6dmlzaXRKU0Z1bmN0aW9uKEpTQzo6
U2xvdFZpc2l0b3ImIHZpc2l0b3IpXG4iKTsKICAgICAgICAgcHVzaChAJGNvbnRlbnRSZWYsICJ7
XG4iKTsKICAgICAgICAgcHVzaChAJGNvbnRlbnRSZWYsICIgICAgbV9kYXRhLT52aXNpdEpTRnVu
Y3Rpb24odmlzaXRvcik7XG4iKTsKQEAgLTY3MzQsNiArNjc0Myw3IEBAIHN1YiBHZW5lcmF0ZUl0
ZXJhYmxlRGVmaW5pdGlvbgogICAgIG15ICR2aXNpYmxlSW50ZXJmYWNlTmFtZSA9ICRjb2RlR2Vu
ZXJhdG9yLT5HZXRWaXNpYmxlSW50ZXJmYWNlTmFtZSgkaW50ZXJmYWNlKTsKIAogICAgIEFkZFRv
SW1wbEluY2x1ZGVzKCJKU0RPTUl0ZXJhdG9yLmgiKTsKKyAgICBBZGRUb0ltcGxJbmNsdWRlcygi
PEphdmFTY3JpcHRDb3JlL1Nsb3RWaXNpdG9yTWFjcm9zLmg+Iik7CiAKICAgICByZXR1cm4gdW5s
ZXNzIElzS2V5VmFsdWVJdGVyYWJsZUludGVyZmFjZSgkaW50ZXJmYWNlKTsKIApJbmRleDogU291
cmNlL1dlYkNvcmUvZG9tL0FjdGl2ZURPTUNhbGxiYWNrLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvZG9tL0FjdGl2ZURPTUNhbGxiYWNrLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNv
dXJjZS9XZWJDb3JlL2RvbS9BY3RpdmVET01DYWxsYmFjay5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAxMiBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKQEAg
LTMzLDYgKzM0LDcgQEAKICNpbmNsdWRlICJDb250ZXh0RGVzdHJ1Y3Rpb25PYnNlcnZlci5oIgog
CiBuYW1lc3BhY2UgSlNDIHsKK2NsYXNzIEFic3RyYWN0U2xvdFZpc2l0b3I7CiBjbGFzcyBTbG90
VmlzaXRvcjsKIH0KIApAQCAtNTUsNiArNTcsNyBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBP
UlQgYm9vbCBhY3RpdmVET01PYmplY3RzQXJlU3VzcGVuZGVkKCkgY29uc3Q7CiAgICAgV0VCQ09S
RV9FWFBPUlQgYm9vbCBhY3RpdmVET01PYmplY3RBcmVTdG9wcGVkKCkgY29uc3Q7CiAgICAgCisg
ICAgdmlydHVhbCB2b2lkIHZpc2l0SlNGdW5jdGlvbihKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3Im
KSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgdmlzaXRKU0Z1bmN0aW9uKEpTQzo6U2xvdFZpc2l0b3Im
KSB7IH0KIH07CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9FdmVudExpc3RlbmVyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50TGlzdGVuZXIuaAkocmV2aXNpb24g
MjcyODMwKQorKysgU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50TGlzdGVuZXIuaAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDgsIDIw
MDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2
LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CkBAIC0yNCw2ICsyNCw3IEBACiAjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KIAogbmFtZXNwYWNl
IEpTQyB7CitjbGFzcyBBYnN0cmFjdFNsb3RWaXNpdG9yOwogY2xhc3MgSlNPYmplY3Q7CiBjbGFz
cyBTbG90VmlzaXRvcjsKIH0KQEAgLTUyLDYgKzUzLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwg
dm9pZCBoYW5kbGVFdmVudChTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgRXZlbnQmKSA9IDA7CiAg
ICAgdmlydHVhbCBib29sIHdhc0NyZWF0ZWRGcm9tTWFya3VwKCkgY29uc3QgeyByZXR1cm4gZmFs
c2U7IH0KIAorICAgIHZpcnR1YWwgdm9pZCB2aXNpdEpTRnVuY3Rpb24oSlNDOjpBYnN0cmFjdFNs
b3RWaXNpdG9yJikgeyB9CiAgICAgdmlydHVhbCB2b2lkIHZpc2l0SlNGdW5jdGlvbihKU0M6OlNs
b3RWaXNpdG9yJikgeyB9CiAKICAgICB2aXJ0dWFsIGJvb2wgaXNBdHRyaWJ1dGUoKSBjb25zdCB7
IHJldHVybiBmYWxzZTsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50VGFyZ2V0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRUYXJnZXQuY3BwCShyZXZp
c2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRUYXJnZXQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yLDcgKzIsNyBAQAogICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25v
bGwgKGtub2xsQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8g
KGtvaXZpc3RvQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDIwMDEgRGlyayBNdWVsbGVyICht
dWVsbGVyQGtkZS5vcmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxNyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQWxleGV5IFByb3Nr
dXJ5YWtvdiAoYXBAd2Via2l0Lm9yZykKICAqICAgICAgICAgICAoQykgMjAwNywgMjAwOCBOaWtv
bGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KICAqCkBAIC0zODQsNyArMzg0LDgg
QEAgdm9pZCBFdmVudFRhcmdldDo6cmVtb3ZlQWxsRXZlbnRMaXN0ZW5lcgogICAgIHRocmVhZERh
dGEuc2V0SXNJblJlbW92ZUFsbEV2ZW50TGlzdGVuZXJzKGZhbHNlKTsKIH0KIAotdm9pZCBFdmVu
dFRhcmdldDo6dmlzaXRKU0V2ZW50TGlzdGVuZXJzKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3Ip
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBFdmVudFRhcmdldDo6dmlzaXRKU0V2
ZW50TGlzdGVuZXJzKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgRXZlbnRUYXJnZXREYXRhKiBk
YXRhID0gZXZlbnRUYXJnZXREYXRhQ29uY3VycmVudGx5KCk7CiAgICAgaWYgKCFkYXRhKQpAQCAt
Mzk2LDYgKzM5Nyw5IEBAIHZvaWQgRXZlbnRUYXJnZXQ6OnZpc2l0SlNFdmVudExpc3RlbmVycygK
ICAgICAgICAgbGlzdGVuZXItPnZpc2l0SlNGdW5jdGlvbih2aXNpdG9yKTsKIH0KIAordGVtcGxh
dGUgdm9pZCBFdmVudFRhcmdldDo6dmlzaXRKU0V2ZW50TGlzdGVuZXJzKEpTQzo6QWJzdHJhY3RT
bG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBFdmVudFRhcmdldDo6dmlzaXRKU0V2ZW50TGlz
dGVuZXJzKEpTQzo6U2xvdFZpc2l0b3ImKTsKKwogdm9pZCBFdmVudFRhcmdldDo6aW52YWxpZGF0
ZUV2ZW50TGlzdGVuZXJSZWdpb25zKCkKIHsKICAgICBpZiAoaXM8RWxlbWVudD4oKnRoaXMpKSB7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRUYXJnZXQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9kb20vRXZlbnRUYXJnZXQuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291
cmNlL1dlYkNvcmUvZG9tL0V2ZW50VGFyZ2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTIsNyArMiw3
IEBACiAgKiBDb3B5cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKICAq
ICAgICAgICAgICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKICAq
ICAgICAgICAgICAoQykgMjAwMSBEaXJrIE11ZWxsZXIgKG11ZWxsZXJAa2RlLm9yZykKLSAqIENv
cHlyaWdodCAoQykgMjAwNC0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAwNC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqIENvcHlyaWdodCAoQykgMjAwNiBBbGV4ZXkgUHJvc2t1cnlha292IChhcEB3ZWJraXQub3Jn
KQogICogICAgICAgICAgIChDKSAyMDA3LCAyMDA4IE5pa29sYXMgWmltbWVybWFubiA8emltbWVy
bWFubkBrZGUub3JnPgogICoKQEAgLTk3LDcgKzk3LDcgQEAgcHVibGljOgogICAgIHZvaWQgZmly
ZUV2ZW50TGlzdGVuZXJzKEV2ZW50JiwgRXZlbnRJbnZva2VQaGFzZSk7CiAgICAgYm9vbCBpc0Zp
cmluZ0V2ZW50TGlzdGVuZXJzKCkgY29uc3Q7CiAKLSAgICB2b2lkIHZpc2l0SlNFdmVudExpc3Rl
bmVycyhKU0M6OlNsb3RWaXNpdG9yJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4g
dm9pZCB2aXNpdEpTRXZlbnRMaXN0ZW5lcnMoVmlzaXRvciYpOwogICAgIHZvaWQgaW52YWxpZGF0
ZUpTRXZlbnRMaXN0ZW5lcnMoSlNDOjpKU09iamVjdCopOwogCiAgICAgY29uc3QgRXZlbnRUYXJn
ZXREYXRhKiBldmVudFRhcmdldERhdGEoKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Rv
bS9NdXRhdGlvblJlY29yZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL011
dGF0aW9uUmVjb3JkLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL1dlYkNvcmUvZG9t
L011dGF0aW9uUmVjb3JkLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAg
KiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCkBAIC00MSw3ICs0Miw3IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogbmFtZXNwYWNlIHsKIAotc3RhdGljIHZvaWQgdmlzaXROb2RlTGlzdChK
U0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yLCBOb2RlTGlzdCYgbm9kZUxpc3QpCitzdGF0aWMgdm9p
ZCB2aXNpdE5vZGVMaXN0KEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvciwgTm9kZUxp
c3QmIG5vZGVMaXN0KQogewogICAgIEFTU0VSVCghbm9kZUxpc3QuaXNMaXZlTm9kZUxpc3QoKSk7
CiAgICAgdW5zaWduZWQgbGVuZ3RoID0gbm9kZUxpc3QubGVuZ3RoKCk7CkBAIC02OCw3ICs2OSw3
IEBAIHByaXZhdGU6CiAgICAgTm9kZSogcHJldmlvdXNTaWJsaW5nKCkgb3ZlcnJpZGUgeyByZXR1
cm4gbV9wcmV2aW91c1NpYmxpbmcuZ2V0KCk7IH0KICAgICBOb2RlKiBuZXh0U2libGluZygpIG92
ZXJyaWRlIHsgcmV0dXJuIG1fbmV4dFNpYmxpbmcuZ2V0KCk7IH0KIAotICAgIHZvaWQgdmlzaXRO
b2Rlc0NvbmN1cnJlbnRseShKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKSBjb25zdCBmaW5hbAor
ICAgIHZvaWQgdmlzaXROb2Rlc0NvbmN1cnJlbnRseShKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3Im
IHZpc2l0b3IpIGNvbnN0IGZpbmFsCiAgICAgewogICAgICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJv
b3Qocm9vdChtX3RhcmdldC5wdHIoKSkpOwogICAgICAgICBpZiAobV9hZGRlZE5vZGVzKQpAQCAt
MTA1LDcgKzEwNiw3IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiBub2RlTGlzdC5nZXQoKTsK
ICAgICB9CiAKLSAgICB2b2lkIHZpc2l0Tm9kZXNDb25jdXJyZW50bHkoSlNDOjpTbG90VmlzaXRv
ciYgdmlzaXRvcikgY29uc3QgZmluYWwKKyAgICB2b2lkIHZpc2l0Tm9kZXNDb25jdXJyZW50bHko
SlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBjb25zdCBmaW5hbAogICAgIHsKICAg
ICAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHJvb3QobV90YXJnZXQucHRyKCkpKTsKICAgICB9
CkBAIC0xNjQsNyArMTY1LDcgQEAgcHJpdmF0ZToKIAogICAgIFN0cmluZyBvbGRWYWx1ZSgpIG92
ZXJyaWRlIHsgcmV0dXJuIFN0cmluZygpOyB9CiAKLSAgICB2b2lkIHZpc2l0Tm9kZXNDb25jdXJy
ZW50bHkoSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikgY29uc3QgZmluYWwKKyAgICB2b2lkIHZp
c2l0Tm9kZXNDb25jdXJyZW50bHkoSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBj
b25zdCBmaW5hbAogICAgIHsKICAgICAgICAgbV9yZWNvcmQtPnZpc2l0Tm9kZXNDb25jdXJyZW50
bHkodmlzaXRvcik7CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL011dGF0aW9uUmVj
b3JkLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL011dGF0aW9uUmVjb3JkLmgJ
KHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9NdXRhdGlvblJlY29yZC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAx
MSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKQEAgLTM2LDcgKzM3LDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLWNsYXNz
IFNsb3RWaXNpdG9yOworY2xhc3MgQWJzdHJhY3RTbG90VmlzaXRvcjsKIAogfQogCkBAIC03Miw3
ICs3Myw3IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgU3RyaW5nIG9sZFZhbHVlKCkgeyByZXR1
cm4gU3RyaW5nKCk7IH0KIAotICAgIHZpcnR1YWwgdm9pZCB2aXNpdE5vZGVzQ29uY3VycmVudGx5
KEpTQzo6U2xvdFZpc2l0b3ImKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0Tm9k
ZXNDb25jdXJyZW50bHkoSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJikgY29uc3QgPSAwOwogfTsK
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL1N0YXRp
Y1JhbmdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vU3RhdGljUmFuZ2Uu
Y3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vU3RhdGljUmFuZ2Uu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxNi0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNzYsNyArNzYsNyBAQCBFeGNlcHRpb25PcjxSZWY8U3Rh
dGljUmFuZ2U+PiBTdGF0aWNSYW5nCiAgICAgcmV0dXJuIGNyZWF0ZSh7IHsgaW5pdC5zdGFydENv
bnRhaW5lci5yZWxlYXNlTm9uTnVsbCgpLCBpbml0LnN0YXJ0T2Zmc2V0IH0sIHsgaW5pdC5lbmRD
b250YWluZXIucmVsZWFzZU5vbk51bGwoKSwgaW5pdC5lbmRPZmZzZXQgfSB9KTsKIH0KIAotdm9p
ZCBTdGF0aWNSYW5nZTo6dmlzaXROb2Rlc0NvbmN1cnJlbnRseShKU0M6OlNsb3RWaXNpdG9yJiB2
aXNpdG9yKSBjb25zdAordm9pZCBTdGF0aWNSYW5nZTo6dmlzaXROb2Rlc0NvbmN1cnJlbnRseShK
U0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0CiB7CiAgICAgdmlzaXRvci5h
ZGRPcGFxdWVSb290KHJvb3Qoc3RhcnQuY29udGFpbmVyLmdldCgpKSk7CiAgICAgdmlzaXRvci5h
ZGRPcGFxdWVSb290KHJvb3QoZW5kLmNvbnRhaW5lci5nZXQoKSkpOwpJbmRleDogU291cmNlL1dl
YkNvcmUvZG9tL1N0YXRpY1JhbmdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9t
L1N0YXRpY1JhbmdlLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9T
dGF0aWNSYW5nZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxNi0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzAsNyArMzAsNyBAQAogCiBuYW1lc3Bh
Y2UgSlNDIHsKIAotY2xhc3MgU2xvdFZpc2l0b3I7CitjbGFzcyBBYnN0cmFjdFNsb3RWaXNpdG9y
OwogCiB9CiAKQEAgLTU4LDcgKzU4LDcgQEAgcHVibGljOgogICAgIHVuc2lnbmVkIGVuZE9mZnNl
dCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIFNpbXBsZVJhbmdlOjplbmRPZmZzZXQoKTsgfQogICAg
IGJvb2wgY29sbGFwc2VkKCkgY29uc3QgZmluYWwgeyByZXR1cm4gU2ltcGxlUmFuZ2U6OmNvbGxh
cHNlZCgpOyB9CiAKLSAgICB2b2lkIHZpc2l0Tm9kZXNDb25jdXJyZW50bHkoSlNDOjpTbG90Vmlz
aXRvciYpIGNvbnN0OworICAgIHZvaWQgdmlzaXROb2Rlc0NvbmN1cnJlbnRseShKU0M6OkFic3Ry
YWN0U2xvdFZpc2l0b3ImKSBjb25zdDsKIAogcHJpdmF0ZToKICAgICBTdGF0aWNSYW5nZShTaW1w
bGVSYW5nZSYmKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMMlJlbmRl
cmluZ0NvbnRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L1dlYkdMMlJlbmRlcmluZ0NvbnRleHQuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTDJSZW5kZXJpbmdDb250ZXh0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTMwNzgsNyArMzA3OCw3IEBAIGJvb2wgV2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6
Y2hlY2tBbmRUcmEKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBXZWJHTDJSZW5kZXJpbmdD
b250ZXh0OjphZGRNZW1iZXJzVG9PcGFxdWVSb290cyhKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9y
KQordm9pZCBXZWJHTDJSZW5kZXJpbmdDb250ZXh0OjphZGRNZW1iZXJzVG9PcGFxdWVSb290cyhK
U0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgV2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZTo6YWRkTWVtYmVyc1RvT3BhcXVlUm9vdHModmlzaXRvcik7CiAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMMlJlbmRlcmluZ0NvbnRleHQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTDJSZW5kZXJpbmdDb250ZXh0
LmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdM
MlJlbmRlcmluZ0NvbnRleHQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2MSw3ICsyNjEsNyBAQCBw
dWJsaWM6CiAKICAgICBib29sIGNoZWNrQW5kVHJhbnNsYXRlQXR0YWNobWVudHMoY29uc3QgY2hh
ciogZnVuY3Rpb25OYW1lLCBHQ0dMZW51bSwgVmVjdG9yPEdDR0xlbnVtPiYpOwogCi0gICAgdm9p
ZCBhZGRNZW1iZXJzVG9PcGFxdWVSb290cyhKU0M6OlNsb3RWaXNpdG9yJikgb3ZlcnJpZGU7Cisg
ICAgdm9pZCBhZGRNZW1iZXJzVG9PcGFxdWVSb290cyhKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3Im
KSBvdmVycmlkZTsKIAogcHJpdmF0ZToKICAgICBXZWJHTDJSZW5kZXJpbmdDb250ZXh0KENhbnZh
c0Jhc2UmLCBHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMpOwpJbmRleDogU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvV2ViR0xGcmFtZWJ1ZmZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xGcmFtZWJ1ZmZlci5jcHAJKHJldmlzaW9uIDI3Mjgz
MCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRnJhbWVidWZmZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOS0y
MDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAw
OS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtNjMsNyArNjMsNyBAQCBuYW1lc3BhY2UgewogICAgICAgICB2b2lk
IG9uRGV0YWNoZWQoY29uc3QgQWJzdHJhY3RMb2NrZXImLCBHcmFwaGljc0NvbnRleHRHTCopIG92
ZXJyaWRlOwogICAgICAgICB2b2lkIGF0dGFjaChHcmFwaGljc0NvbnRleHRHTCosIEdDR0xlbnVt
IHRhcmdldCwgR0NHTGVudW0gYXR0YWNobWVudCkgb3ZlcnJpZGU7CiAgICAgICAgIHZvaWQgdW5h
dHRhY2goR3JhcGhpY3NDb250ZXh0R0wqLCBHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIGF0dGFj
aG1lbnQpIG92ZXJyaWRlOwotICAgICAgICB2b2lkIGFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKGNv
bnN0IEFic3RyYWN0TG9ja2VyJiwgSlNDOjpTbG90VmlzaXRvciYpIG92ZXJyaWRlOworICAgICAg
ICB2b2lkIGFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgSlND
OjpBYnN0cmFjdFNsb3RWaXNpdG9yJikgb3ZlcnJpZGU7CiAKICAgICAgICAgV2ViR0xSZW5kZXJi
dWZmZXJBdHRhY2htZW50KCkgeyB9OwogCkBAIC0xNDUsNyArMTQ1LDcgQEAgbmFtZXNwYWNlIHsK
ICAgICAgICAgICAgIGNvbnRleHQtPmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKHRhcmdldCwgYXR0
YWNobWVudCwgR3JhcGhpY3NDb250ZXh0R0w6OlJFTkRFUkJVRkZFUiwgMCk7CiAgICAgfQogCi0g
ICAgdm9pZCBXZWJHTFJlbmRlcmJ1ZmZlckF0dGFjaG1lbnQ6OmFkZE1lbWJlcnNUb09wYXF1ZVJv
b3RzKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKKyAg
ICB2b2lkIFdlYkdMUmVuZGVyYnVmZmVyQXR0YWNobWVudDo6YWRkTWVtYmVyc1RvT3BhcXVlUm9v
dHMoY29uc3QgQWJzdHJhY3RMb2NrZXImLCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0
b3IpCiAgICAgewogICAgICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QobV9yZW5kZXJidWZmZXIu
Z2V0KCkpOwogICAgIH0KQEAgLTE2OSw3ICsxNjksNyBAQCBuYW1lc3BhY2UgewogICAgICAgICB2
b2lkIG9uRGV0YWNoZWQoY29uc3QgQWJzdHJhY3RMb2NrZXImLCBHcmFwaGljc0NvbnRleHRHTCop
IG92ZXJyaWRlOwogICAgICAgICB2b2lkIGF0dGFjaChHcmFwaGljc0NvbnRleHRHTCosIEdDR0xl
bnVtIHRhcmdldCwgR0NHTGVudW0gYXR0YWNobWVudCkgb3ZlcnJpZGU7CiAgICAgICAgIHZvaWQg
dW5hdHRhY2goR3JhcGhpY3NDb250ZXh0R0wqLCBHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIGF0
dGFjaG1lbnQpIG92ZXJyaWRlOwotICAgICAgICB2b2lkIGFkZE1lbWJlcnNUb09wYXF1ZVJvb3Rz
KGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgSlNDOjpTbG90VmlzaXRvciYpIG92ZXJyaWRlOworICAg
ICAgICB2b2lkIGFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwg
SlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJikgb3ZlcnJpZGU7CiAKICAgICAgICAgV2ViR0xUZXh0
dXJlQXR0YWNobWVudCgpIHsgfTsKIApAQCAtMjY3LDcgKzI2Nyw3IEBAIG5hbWVzcGFjZSB7CiAj
ZW5kaWYKICAgICB9CiAKLSAgICB2b2lkIFdlYkdMVGV4dHVyZUF0dGFjaG1lbnQ6OmFkZE1lbWJl
cnNUb09wYXF1ZVJvb3RzKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgSlNDOjpTbG90VmlzaXRvciYg
dmlzaXRvcikKKyAgICB2b2lkIFdlYkdMVGV4dHVyZUF0dGFjaG1lbnQ6OmFkZE1lbWJlcnNUb09w
YXF1ZVJvb3RzKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9y
JiB2aXNpdG9yKQogICAgIHsKICAgICAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KG1fdGV4dHVy
ZS5nZXQoKSk7CiAgICAgfQpAQCAtNzIxLDcgKzcyMSw3IEBAIEdDR0xlbnVtIFdlYkdMRnJhbWVi
dWZmZXI6OmdldERyYXdCdWZmZXIKICAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0R0w6Ok5PTkU7
CiB9CiAKLXZvaWQgV2ViR0xGcmFtZWJ1ZmZlcjo6YWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMoY29u
c3QgQWJzdHJhY3RMb2NrZXImIGxvY2tlciwgSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3Zv
aWQgV2ViR0xGcmFtZWJ1ZmZlcjo6YWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMoY29uc3QgQWJzdHJh
Y3RMb2NrZXImIGxvY2tlciwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewog
ICAgIGZvciAoYXV0byYgZW50cnkgOiBtX2F0dGFjaG1lbnRzKQogICAgICAgICBlbnRyeS52YWx1
ZS0+YWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMobG9ja2VyLCB2aXNpdG9yKTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRnJhbWVidWZmZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEZyYW1lYnVmZmVyLmgJKHJldmlzaW9uIDI3
MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRnJhbWVidWZmZXIuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5LTIw
MjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0zNCw3ICszNCw3IEBACiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBu
YW1lc3BhY2UgSlNDIHsKLWNsYXNzIFNsb3RWaXNpdG9yOworY2xhc3MgQWJzdHJhY3RTbG90Vmlz
aXRvcjsKIH0KIAogbmFtZXNwYWNlIFdURiB7CkBAIC02NSw3ICs2NSw3IEBAIHB1YmxpYzoKICAg
ICAgICAgdmlydHVhbCB2b2lkIG9uRGV0YWNoZWQoY29uc3QgV1RGOjpBYnN0cmFjdExvY2tlciYs
IEdyYXBoaWNzQ29udGV4dEdMKikgPSAwOwogICAgICAgICB2aXJ0dWFsIHZvaWQgYXR0YWNoKEdy
YXBoaWNzQ29udGV4dEdMKiwgR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBhdHRhY2htZW50KSA9
IDA7CiAgICAgICAgIHZpcnR1YWwgdm9pZCB1bmF0dGFjaChHcmFwaGljc0NvbnRleHRHTCosIEdD
R0xlbnVtIHRhcmdldCwgR0NHTGVudW0gYXR0YWNobWVudCkgPSAwOwotICAgICAgICB2aXJ0dWFs
IHZvaWQgYWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMoY29uc3QgV1RGOjpBYnN0cmFjdExvY2tlciYs
IEpTQzo6U2xvdFZpc2l0b3ImKSA9IDA7CisgICAgICAgIHZpcnR1YWwgdm9pZCBhZGRNZW1iZXJz
VG9PcGFxdWVSb290cyhjb25zdCBXVEY6OkFic3RyYWN0TG9ja2VyJiwgSlNDOjpBYnN0cmFjdFNs
b3RWaXNpdG9yJikgPSAwOwogCiAgICAgcHJvdGVjdGVkOgogICAgICAgICBXZWJHTEF0dGFjaG1l
bnQoKTsKQEAgLTExNCw3ICsxMTQsNyBAQCBwdWJsaWM6CiAKICAgICBHQ0dMZW51bSBnZXREcmF3
QnVmZmVyKEdDR0xlbnVtKTsKIAotICAgIHZvaWQgYWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMoY29u
c3QgV1RGOjpBYnN0cmFjdExvY2tlciYsIEpTQzo6U2xvdFZpc2l0b3ImKTsKKyAgICB2b2lkIGFk
ZE1lbWJlcnNUb09wYXF1ZVJvb3RzKGNvbnN0IFdURjo6QWJzdHJhY3RMb2NrZXImLCBKU0M6OkFi
c3RyYWN0U2xvdFZpc2l0b3ImKTsKIAogcHJpdmF0ZToKICAgICBXZWJHTEZyYW1lYnVmZmVyKFdl
YkdMUmVuZGVyaW5nQ29udGV4dEJhc2UmKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2Fu
dmFzL1dlYkdMUHJvZ3JhbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9j
YW52YXMvV2ViR0xQcm9ncmFtLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvV2ViR0xQcm9ncmFtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yMDYsNyArMjA2
LDcgQEAgYm9vbCBXZWJHTFByb2dyYW06OmRldGFjaFNoYWRlcihjb25zdCBBYgogICAgIH0KIH0K
IAotdm9pZCBXZWJHTFByb2dyYW06OmFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKGNvbnN0IEFic3Ry
YWN0TG9ja2VyJiwgSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgV2ViR0xQcm9ncmFt
OjphZGRNZW1iZXJzVG9PcGFxdWVSb290cyhjb25zdCBBYnN0cmFjdExvY2tlciYsIEpTQzo6QWJz
dHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qo
bV92ZXJ0ZXhTaGFkZXIuZ2V0KCkpOwogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChtX2ZyYWdt
ZW50U2hhZGVyLmdldCgpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdM
UHJvZ3JhbS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdM
UHJvZ3JhbS5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZh
cy9XZWJHTFByb2dyYW0uaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDktMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDktMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM1LDcgKzM1LDcgQEAKICNpbmNs
dWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBKU0MgewotY2xhc3MgU2xvdFZpc2l0b3I7
CitjbGFzcyBBYnN0cmFjdFNsb3RWaXNpdG9yOwogfQogCiBuYW1lc3BhY2UgV1RGIHsKQEAgLTg4
LDcgKzg4LDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9yZXF1aXJlZFRyYW5zZm9ybUZl
ZWRiYWNrQnVmZmVyQ291bnQ7CiAgICAgfQogCi0gICAgdm9pZCBhZGRNZW1iZXJzVG9PcGFxdWVS
b290cyhjb25zdCBXVEY6OkFic3RyYWN0TG9ja2VyJiwgSlNDOjpTbG90VmlzaXRvciYpOworICAg
IHZvaWQgYWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMoY29uc3QgV1RGOjpBYnN0cmFjdExvY2tlciYs
IEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpOwogCiBwcml2YXRlOgogICAgIFdlYkdMUHJvZ3Jh
bShXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlJik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcAkocmV2
aXNpb24gMjcyODMwKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJp
bmdDb250ZXh0QmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03OTMxLDcgKzc5MzEsNyBAQCB2
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmRpc3BhdGNoCiAgICAgcXVldWVUYXNrVG9E
aXNwYXRjaEV2ZW50KCpjYW52YXMsIFRhc2tTb3VyY2U6OldlYkdMLCBXZWJHTENvbnRleHRFdmVu
dDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS53ZWJnbGNvbnRleHRjaGFuZ2VkRXZlbnQsIEV2ZW50OjpD
YW5CdWJibGU6Ok5vLCBFdmVudDo6SXNDYW5jZWxhYmxlOjpZZXMsIGVtcHR5U3RyaW5nKCkpKTsK
IH0KIAotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjphZGRNZW1iZXJzVG9PcGFxdWVS
b290cyhKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlOjphZGRNZW1iZXJzVG9PcGFxdWVSb290cyhKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3Im
IHZpc2l0b3IpCiB7CiAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhvYmplY3RHcmFwaExvY2so
KSk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJD
b3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTU4LDcgKzU4LDcgQEAKICNlbmRpZgogCiBuYW1lc3BhY2UgSlNDIHsKLWNsYXNzIFNs
b3RWaXNpdG9yOworY2xhc3MgQWJzdHJhY3RTbG90VmlzaXRvcjsKIH0KIAogbmFtZXNwYWNlIFdU
RiB7CkBAIC00MTEsNyArNDExLDcgQEAgcHVibGljOgogICAgIHZvaWQgcmVjeWNsZUNvbnRleHQo
KSBvdmVycmlkZTsKICAgICB2b2lkIGRpc3BhdGNoQ29udGV4dENoYW5nZWROb3RpZmljYXRpb24o
KSBvdmVycmlkZTsKIAotICAgIHZpcnR1YWwgdm9pZCBhZGRNZW1iZXJzVG9PcGFxdWVSb290cyhK
U0M6OlNsb3RWaXNpdG9yJik7CisgICAgdmlydHVhbCB2b2lkIGFkZE1lbWJlcnNUb09wYXF1ZVJv
b3RzKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpOwogICAgIC8vIFRoaXMgbG9jayBtdXN0IGJl
IGhlbGQgYWNyb3NzIGFsbCBtdXRhdGlvbnMgb2YgY29udGFpbmVycyBsaWtlCiAgICAgLy8gVmVj
dG9ycywgSGFzaFNldHMsIGV0Yy4gd2hpY2ggY29udGFpbiBSZWZQdHI8V2ViR0xPYmplY3Q+LCBh
bmQKICAgICAvLyB3aGljaCBhcmUgdHJhdmVyc2VkIGJ5IGFkZE1lbWJlcnNUb09wYXF1ZVJvb3Rz
KCkgb3IgYW55IG9mIHRoZQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xU
cmFuc2Zvcm1GZWVkYmFjay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9j
YW52YXMvV2ViR0xUcmFuc2Zvcm1GZWVkYmFjay5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVHJhbnNmb3JtRmVlZGJhY2suY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTMwLDggKzMwLDcgQEAKIAogI2luY2x1ZGUgIldlYkdMQ29udGV4dEdyb3VwLmgi
CiAjaW5jbHVkZSAiV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5oIgotI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL1Nsb3RWaXNpdG9yLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvU2xvdFZp
c2l0b3JJbmxpbmVzLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvQWJzdHJhY3RTbG90Vmlz
aXRvcklubGluZXMuaD4KICNpbmNsdWRlIDx3dGYvTG9jay5oPgogI2luY2x1ZGUgPHd0Zi9Mb2Nr
ZXIuaD4KIApAQCAtOTMsNyArOTIsNyBAQCBib29sIFdlYkdMVHJhbnNmb3JtRmVlZGJhY2s6Omhh
c0Vub3VnaEJ1CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgV2ViR0xUcmFuc2Zvcm1GZWVk
YmFjazo6YWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMoY29uc3QgQWJzdHJhY3RMb2NrZXImIGxvY2tl
ciwgSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgV2ViR0xUcmFuc2Zvcm1GZWVkYmFj
azo6YWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMoY29uc3QgQWJzdHJhY3RMb2NrZXImIGxvY2tlciwg
SlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGZvciAoYXV0byYgYnVm
ZmVyIDogbV9ib3VuZEluZGV4ZWRUcmFuc2Zvcm1GZWVkYmFja0J1ZmZlcnMpCiAgICAgICAgIHZp
c2l0b3IuYWRkT3BhcXVlUm9vdChidWZmZXIuZ2V0KCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvV2ViR0xUcmFuc2Zvcm1GZWVkYmFjay5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVHJhbnNmb3JtRmVlZGJhY2suaAkocmV2aXNpb24g
MjcyODMwKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xUcmFuc2Zvcm1GZWVk
YmFjay5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxNS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzEsNyArMzEsNyBAQAogI2luY2x1ZGUgIldlYkdM
U2hhcmVkT2JqZWN0LmgiCiAKIG5hbWVzcGFjZSBKU0MgewotY2xhc3MgU2xvdFZpc2l0b3I7Citj
bGFzcyBBYnN0cmFjdFNsb3RWaXNpdG9yOwogfQogCiBuYW1lc3BhY2UgV1RGIHsKQEAgLTcwLDcg
KzcwLDcgQEAgcHVibGljOgogICAgIAogICAgIGJvb2wgaGFzRW5vdWdoQnVmZmVycyhHQ0dMdWlu
dCBudW1SZXF1aXJlZCkgY29uc3Q7CiAKLSAgICB2b2lkIGFkZE1lbWJlcnNUb09wYXF1ZVJvb3Rz
KGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgSlNDOjpTbG90VmlzaXRvciYpOworICAgIHZvaWQgYWRk
TWVtYmVyc1RvT3BhcXVlUm9vdHMoY29uc3QgQWJzdHJhY3RMb2NrZXImLCBKU0M6OkFic3RyYWN0
U2xvdFZpc2l0b3ImKTsKIAogcHJpdmF0ZToKICAgICBXZWJHTFRyYW5zZm9ybUZlZWRiYWNrKFdl
YkdMMlJlbmRlcmluZ0NvbnRleHQmKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L1dlYkdMVmVydGV4QXJyYXlPYmplY3RCYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9odG1sL2NhbnZhcy9XZWJHTFZlcnRleEFycmF5T2JqZWN0QmFzZS5jcHAJKHJldmlzaW9u
IDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVmVydGV4QXJyYXlP
YmplY3RCYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI5LDggKzI5LDcgQEAKICNpZiBFTkFC
TEUoV0VCR0wpCiAKICNpbmNsdWRlICJXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmgiCi0jaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvU2xvdFZpc2l0b3IuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9TbG90VmlzaXRvcklubGluZXMuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9BYnN0
cmFjdFNsb3RWaXNpdG9ySW5saW5lcy5oPgogI2luY2x1ZGUgPHd0Zi9Mb2NrZXIuaD4KIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewpAQCAtMTA5LDcgKzEwOCw3IEBAIHZvaWQgV2ViR0xWZXJ0ZXhBcnJh
eU9iamVjdEJhc2U6OnNldFZlcnQKICAgICBtX3ZlcnRleEF0dHJpYlN0YXRlW2luZGV4XS5kaXZp
c29yID0gZGl2aXNvcjsKIH0KIAotdm9pZCBXZWJHTFZlcnRleEFycmF5T2JqZWN0QmFzZTo6YWRk
TWVtYmVyc1RvT3BhcXVlUm9vdHMoY29uc3QgQWJzdHJhY3RMb2NrZXImLCBKU0M6OlNsb3RWaXNp
dG9yJiB2aXNpdG9yKQordm9pZCBXZWJHTFZlcnRleEFycmF5T2JqZWN0QmFzZTo6YWRkTWVtYmVy
c1RvT3BhcXVlUm9vdHMoY29uc3QgQWJzdHJhY3RMb2NrZXImLCBKU0M6OkFic3RyYWN0U2xvdFZp
c2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KG1fYm91bmRFbGVt
ZW50QXJyYXlCdWZmZXIuZ2V0KCkpOwogICAgIGZvciAoYXV0byYgc3RhdGUgOiBtX3ZlcnRleEF0
dHJpYlN0YXRlKQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xWZXJ0ZXhB
cnJheU9iamVjdEJhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZh
cy9XZWJHTFZlcnRleEFycmF5T2JqZWN0QmFzZS5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFZlcnRleEFycmF5T2JqZWN0QmFzZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0y
MDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMzIsNyArMzIsNyBAQAogI2luY2x1ZGUgIldlYkdMQ29udGV4dE9iamVj
dC5oIgogCiBuYW1lc3BhY2UgSlNDIHsKLWNsYXNzIFNsb3RWaXNpdG9yOworY2xhc3MgQWJzdHJh
Y3RTbG90VmlzaXRvcjsKIH0KIAogbmFtZXNwYWNlIFdURiB7CkBAIC03Nyw3ICs3Nyw3IEBAIHB1
YmxpYzoKIAogICAgIHZvaWQgc2V0VmVydGV4QXR0cmliRGl2aXNvcihHQ0dMdWludCBpbmRleCwg
R0NHTHVpbnQgZGl2aXNvcik7CiAKLSAgICB2b2lkIGFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKGNv
bnN0IFdURjo6QWJzdHJhY3RMb2NrZXImLCBKU0M6OlNsb3RWaXNpdG9yJik7CisgICAgdm9pZCBh
ZGRNZW1iZXJzVG9PcGFxdWVSb290cyhjb25zdCBXVEY6OkFic3RyYWN0TG9ja2VyJiwgSlNDOjpB
YnN0cmFjdFNsb3RWaXNpdG9yJik7CiAKIHByb3RlY3RlZDoKICAgICBXZWJHTFZlcnRleEFycmF5
T2JqZWN0QmFzZShXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlJiwgVHlwZSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>420245</attachid>
            <date>2021-02-14 11:54:38 -0800</date>
            <delta_ts>2021-02-14 12:06:52 -0800</delta_ts>
            <desc>work in progress.</desc>
            <filename>bug-217274m.patch</filename>
            <type>text/plain</type>
            <size>575537</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDI3MjgzMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtNjEzLDYgKzYxMyw4IEBAIHNldChKYXZhU2NyaXB0Q29yZV9QUklWQVRFX0ZSQU1FV09SS19I
RUEKICAgICBkb21qaXQvRE9NSklUSGVhcFJhbmdlLmgKICAgICBkb21qaXQvRE9NSklUU2lnbmF0
dXJlLmgKIAorICAgIGhlYXAvQWJzdHJhY3RTbG90VmlzaXRvci5oCisgICAgaGVhcC9BYnN0cmFj
dFNsb3RWaXNpdG9ySW5saW5lcy5oCiAgICAgaGVhcC9BbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmgK
ICAgICBoZWFwL0FsbG9jYXRpb25GYWlsdXJlTW9kZS5oCiAgICAgaGVhcC9BbGxvY2F0b3IuaApA
QCAtNjg3LDEyICs2ODksMTQgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1BSSVZBVEVfRlJBTUVXT1JL
X0hFQQogICAgIGhlYXAvU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQuaAogICAgIGhlYXAvU2xvdFZp
c2l0b3IuaAogICAgIGhlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmgKKyAgICBoZWFwL1Nsb3RWaXNp
dG9yTWFjcm9zLmgKICAgICBoZWFwL1N0cm9uZy5oCiAgICAgaGVhcC9TdHJvbmdJbmxpbmVzLmgK
ICAgICBoZWFwL1N1YnNwYWNlLmgKICAgICBoZWFwL1N1YnNwYWNlSW5saW5lcy5oCiAgICAgaGVh
cC9TeW5jaHJvbm91c25lc3MuaAogICAgIGhlYXAvVGlueUJsb29tRmlsdGVyLmgKKyAgICBoZWFw
L1ZlcmlmaWVyU2xvdFZpc2l0b3IuaAogICAgIGhlYXAvVmlzaXRSYWNlS2V5LmgKICAgICBoZWFw
L1dlYWsuaAogICAgIGhlYXAvV2Vha0Jsb2NrLmgKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9Tb3VyY2VzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNl
cy50eHQJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2Vz
LnR4dAkod29ya2luZyBjb3B5KQpAQCAtNTYzLDYgKzU2Myw3IEBAIGhlYXAvU3RvcElmTmVjZXNz
YXJ5VGltZXIuY3BwCiBoZWFwL1N1YnNwYWNlLmNwcAogaGVhcC9TeW5jaHJvbm91c1N0b3BUaGVX
b3JsZE11dGF0b3JTY2hlZHVsZXIuY3BwCiBoZWFwL1N5bmNocm9ub3VzbmVzcy5jcHAKK2hlYXAv
VmVyaWZpZXJTbG90VmlzaXRvci5jcHAKIGhlYXAvVmlzaXRSYWNlS2V5LmNwcAogaGVhcC9XZWFr
LmNwcAogaGVhcC9XZWFrQmxvY2suY3BwCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJ
L0pTQVBJV3JhcHBlck9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9BUEkvSlNBUElXcmFwcGVyT2JqZWN0LmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9BUEkvSlNBUElXcmFwcGVyT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTkgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC00MSw3ICs0MSw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBzdWJzcGFjZUZvcihWTSYp
IHsgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQogICAgIAogICAgIHZvaWQgZmluaXNo
Q3JlYXRpb24oVk0mKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIEpT
Qzo6U2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOX1dJVEhfTU9ESUZJ
RVIoSlNfRVhQT1JUX1BSSVZBVEUpOwogICAgIAogICAgIHZvaWQqIHdyYXBwZWRPYmplY3QoKSB7
IHJldHVybiBtX3dyYXBwZWRPYmplY3Q7IH0KICAgICB2b2lkIHNldFdyYXBwZWRPYmplY3Qodm9p
ZCopOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0FQSVdyYXBwZXJPYmplY3Qu
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0FQSVdyYXBwZXJP
YmplY3QubW0JKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkv
SlNBUElXcmFwcGVyT2JqZWN0Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzcsNyArMzcsNyBAQAog
Y2xhc3MgSlNBUElXcmFwcGVyT2JqZWN0SGFuZGxlT3duZXIgZmluYWwgOiBwdWJsaWMgSlNDOjpX
ZWFrSGFuZGxlT3duZXIgewogcHVibGljOgogICAgIHZvaWQgZmluYWxpemUoSlNDOjpIYW5kbGU8
SlNDOjpVbmtub3duPiwgdm9pZCopIGZpbmFsOwotICAgIGJvb2wgaXNSZWFjaGFibGVGcm9tT3Bh
cXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCwgSlNDOjpT
bG90VmlzaXRvciYsIGNvbnN0IGNoYXIqKikgZmluYWw7CisgICAgYm9vbCBpc1JlYWNoYWJsZUZy
b21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0LCBK
U0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImLCBjb25zdCBjaGFyKiopIGZpbmFsOwogfTsKIAogc3Rh
dGljIEpTQVBJV3JhcHBlck9iamVjdEhhbmRsZU93bmVyKiBqc0FQSVdyYXBwZXJPYmplY3RIYW5k
bGVPd25lcigpCkBAIC01NiwxNCArNTYsMTQgQEAgdm9pZCBKU0FQSVdyYXBwZXJPYmplY3RIYW5k
bGVPd25lcjo6ZmluYQogICAgIEpTQzo6V2Vha1NldDo6ZGVhbGxvY2F0ZShKU0M6OldlYWtJbXBs
Ojphc1dlYWtJbXBsKGhhbmRsZS5zbG90KCkpKTsKIH0KIAotYm9vbCBKU0FQSVdyYXBwZXJPYmpl
Y3RIYW5kbGVPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlND
OjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25z
dCBjaGFyKiopCitib29sIEpTQVBJV3JhcHBlck9iamVjdEhhbmRsZU93bmVyOjppc1JlYWNoYWJs
ZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCos
IEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqKQogewogICAg
IEpTQzo6SlNBUElXcmFwcGVyT2JqZWN0KiB3cmFwcGVyT2JqZWN0ID0gSlNDOjpqc0Nhc3Q8SlND
OjpKU0FQSVdyYXBwZXJPYmplY3QqPihoYW5kbGUuZ2V0KCkuYXNDZWxsKCkpOwogICAgIC8vIFdl
IHVzZSB0aGUgSlNHbG9iYWxPYmplY3Qgd2hlbiBwcm9jZXNzaW5nIHdlYWsgaGFuZGxlcyB0byBw
cmV2ZW50IHRoZSBzaXR1YXRpb24gd2hlcmUgdXNpbmcKICAgICAvLyB0aGUgc2FtZSBPYmplY3Rp
dmUtQyBvYmplY3QgaW4gbXVsdGlwbGUgZ2xvYmFsIG9iamVjdHMga2VlcHMgYWxsIG9mIHRoZSBn
bG9iYWwgb2JqZWN0cyBhbGl2ZS4KICAgICBpZiAoIXdyYXBwZXJPYmplY3QtPndyYXBwZWRPYmpl
Y3QoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiB2aXNpdG9yLnZtKCkuaGVh
cC5pc01hcmtlZCh3cmFwcGVyT2JqZWN0LT5zdHJ1Y3R1cmUoKS0+Z2xvYmFsT2JqZWN0KCkpICYm
IHZpc2l0b3IuY29udGFpbnNPcGFxdWVSb290KHdyYXBwZXJPYmplY3QtPndyYXBwZWRPYmplY3Qo
KSk7CisgICAgcmV0dXJuIHZpc2l0b3IuaXNNYXJrZWQod3JhcHBlck9iamVjdC0+c3RydWN0dXJl
KCktPmdsb2JhbE9iamVjdCgpKSAmJiB2aXNpdG9yLmNvbnRhaW5zT3BhcXVlUm9vdCh3cmFwcGVy
T2JqZWN0LT53cmFwcGVkT2JqZWN0KCkpOwogfQogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTczLDYg
KzczLDggQEAgc3RhdGljIEpTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJT04oY29uc3RydQogc3RhdGlj
IEpTQ19ERUNMQVJFX0NVU1RPTV9HRVRURVIoY2FsbGJhY2tHZXR0ZXJKU0FQSVdyYXBwZXJPYmpl
Y3RDYWxsYmFja09iamVjdCk7CiBzdGF0aWMgSlNDX0RFQ0xBUkVfQ1VTVE9NX0dFVFRFUihzdGF0
aWNGdW5jdGlvbkdldHRlckpTQVBJV3JhcHBlck9iamVjdENhbGxiYWNrT2JqZWN0KTsKIAorREVG
SU5FX1ZJU0lUX0NISUxEUkVOX1dJVEhfTU9ESUZJRVIodGVtcGxhdGU8PiwgSlNDYWxsYmFja09i
amVjdDxKU0FQSVdyYXBwZXJPYmplY3Q+KTsKKwogdGVtcGxhdGUgPD4gY29uc3QgQ2xhc3NJbmZv
IEpTQ2FsbGJhY2tPYmplY3Q8SlNBUElXcmFwcGVyT2JqZWN0Pjo6c19pbmZvID0geyAiSlNBUElX
cmFwcGVyT2JqZWN0IiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01F
VEhPRF9UQUJMRShKU0NhbGxiYWNrT2JqZWN0KSB9OwogdGVtcGxhdGUgPD4gY29uc3QgYm9vbCBK
U0NhbGxiYWNrT2JqZWN0PEpTQVBJV3JhcHBlck9iamVjdD46Om5lZWRzRGVzdHJ1Y3Rpb24gPSB0
cnVlOwogCkBAIC0xMjMsNyArMTI1LDggQEAgdm9pZCBKU0FQSVdyYXBwZXJPYmplY3Q6OnNldFdy
YXBwZWRPYmplYwogICAgIG1fd3JhcHBlZE9iamVjdCA9IFtzdGF0aWNfY2FzdDxpZD4od3JhcHBl
ZE9iamVjdCkgcmV0YWluXTsKIH0KIAotdm9pZCBKU0FQSVdyYXBwZXJPYmplY3Q6OnZpc2l0Q2hp
bGRyZW4oSlNDZWxsKiBjZWxsLCBKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8
dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNBUElXcmFwcGVyT2JqZWN0Ojp2aXNpdENoaWxkcmVu
SW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNBUElXcmFwcGVy
T2JqZWN0KiB0aGlzT2JqZWN0ID0gSlNDOjpqc0Nhc3Q8SlNBUElXcmFwcGVyT2JqZWN0Kj4oY2Vs
bCk7CiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbihjZWxsLCB2aXNpdG9yKTsKQEAgLTEzMyw2ICsx
MzYsOCBAQCB2b2lkIEpTQVBJV3JhcHBlck9iamVjdDo6dmlzaXRDaGlsZHJlbihKCiAgICAgICAg
IHNjYW5FeHRlcm5hbE9iamVjdEdyYXBoKHZpc2l0b3Iudm0oKSwgdmlzaXRvciwgd3JhcHBlZE9i
amVjdCk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTl9XSVRIX01PRElGSUVSKEpTX0VYUE9S
VF9QUklWQVRFLCBKU0FQSVdyYXBwZXJPYmplY3QpOworCiB0ZW1wbGF0ZSA8PgogSXNvU3Vic3Bh
Y2UqIEpTQ2FsbGJhY2tPYmplY3Q8SlNBUElXcmFwcGVyT2JqZWN0Pjo6c3Vic3BhY2VGb3JJbXBs
KFZNJiB2bSwgU3Vic3BhY2VBY2Nlc3MgbW9kZSkKIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0LmNwcAkocmV2aXNpb24gMjcyODMwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNyBBcHBs
ZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA3IEVy
aWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC00MSw2ICs0
MSw5IEBAIHN0YXRpYyBKU0NfREVDTEFSRV9DVVNUT01fR0VUVEVSKHN0YXRpY0YKIHN0YXRpYyBK
U0NfREVDTEFSRV9DVVNUT01fR0VUVEVSKGNhbGxiYWNrR2V0dGVySlNHbG9iYWxPYmplY3RDYWxs
YmFja09iamVjdCk7CiBzdGF0aWMgSlNDX0RFQ0xBUkVfQ1VTVE9NX0dFVFRFUihzdGF0aWNGdW5j
dGlvbkdldHRlckpTR2xvYmFsT2JqZWN0Q2FsbGJhY2tPYmplY3QpOwogCitERUZJTkVfVklTSVRf
Q0hJTERSRU5fV0lUSF9NT0RJRklFUih0ZW1wbGF0ZTw+LCBKU0NhbGxiYWNrT2JqZWN0PEpTTm9u
RmluYWxPYmplY3Q+KTsKK0RFRklORV9WSVNJVF9DSElMRFJFTl9XSVRIX01PRElGSUVSKHRlbXBs
YXRlPD4sIEpTQ2FsbGJhY2tPYmplY3Q8SlNHbG9iYWxPYmplY3Q+KTsKKwogLy8gRGVmaW5lIHRo
ZSB0d28gdHlwZXMgb2YgSlNDYWxsYmFja09iamVjdHMgd2Ugc3VwcG9ydC4KIHRlbXBsYXRlIDw+
IGNvbnN0IENsYXNzSW5mbyBKU0NhbGxiYWNrT2JqZWN0PEpTTm9uRmluYWxPYmplY3Q+OjpzX2lu
Zm8gPSB7ICJDYWxsYmFja09iamVjdCIsICZCYXNlOjpzX2luZm8sIG51bGxwdHIsIG51bGxwdHIs
IENSRUFURV9NRVRIT0RfVEFCTEUoSlNDYWxsYmFja09iamVjdCkgfTsKIHRlbXBsYXRlIDw+IGNv
bnN0IENsYXNzSW5mbyBKU0NhbGxiYWNrT2JqZWN0PEpTR2xvYmFsT2JqZWN0Pjo6c19pbmZvID0g
eyAiQ2FsbGJhY2tHbG9iYWxPYmplY3QiLCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBudWxscHRy
LCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTQ2FsbGJhY2tPYmplY3QpIH07CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3QuaAkocmV2aXNpb24gMjcyODMw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMjAg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIw
MjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA3
IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC02OSw3
ICs2OSwxMCBAQCBwdWJsaWM6CiAgICAgICAgIG1fcHJpdmF0ZVByb3BlcnRpZXMtPmRlbGV0ZVBy
aXZhdGVQcm9wZXJ0eShwcm9wZXJ0eU5hbWUpOwogICAgIH0KIAotICAgIHZvaWQgdmlzaXRDaGls
ZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwor
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KKyAgICB2b2lkIHZpc2l0Q2hpbGRyZW4o
VmlzaXRvciYgdmlzaXRvcikKICAgICB7CiAgICAgICAgIEpTUHJpdmF0ZVByb3BlcnR5TWFwKiBw
cm9wZXJ0aWVzID0gbV9wcml2YXRlUHJvcGVydGllcy5nZXQoKTsKICAgICAgICAgaWYgKCFwcm9w
ZXJ0aWVzKQpAQCAtMTAzLDcgKzEwNiw4IEBAIHB1YmxpYzoKICAgICAgICAgICAgIG1fcHJvcGVy
dHlNYXAucmVtb3ZlKHByb3BlcnR5TmFtZS5pbXBsKCkpOwogICAgICAgICB9CiAKLSAgICAgICAg
dm9pZCB2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorICAgICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBWaXNpdG9yPgorICAgICAgICB2b2lkIHZpc2l0Q2hpbGRyZW4oVmlzaXRvciYg
dmlzaXRvcikKICAgICAgICAgewogICAgICAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9sb2Nr
KTsKICAgICAgICAgICAgIGZvciAoYXV0byYgcGFpciA6IG1fcHJvcGVydHlNYXApIHsKQEAgLTIx
NiwxMyArMjIwLDcgQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgQ2FsbERhdGEgZ2V0Q29uc3RydWN0
RGF0YShKU0NlbGwqKTsKICAgICBzdGF0aWMgQ2FsbERhdGEgZ2V0Q2FsbERhdGEoSlNDZWxsKik7
CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0
b3ImIHZpc2l0b3IpCi0gICAgewotICAgICAgICBKU0NhbGxiYWNrT2JqZWN0KiB0aGlzT2JqZWN0
ID0ganNDYXN0PEpTQ2FsbGJhY2tPYmplY3QqPihjZWxsKTsKLSAgICAgICAgQVNTRVJUX0dDX09C
SkVDVF9JTkhFUklUUygoc3RhdGljX2Nhc3Q8UGFyZW50Kj4odGhpc09iamVjdCkpLCBKU0NhbGxi
YWNrT2JqZWN0PFBhcmVudD46OmluZm8oKSk7Ci0gICAgICAgIFBhcmVudDo6dmlzaXRDaGlsZHJl
bih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKLSAgICAgICAgdGhpc09iamVjdC0+bV9jYWxsYmFja09i
amVjdERhdGEtPnZpc2l0Q2hpbGRyZW4odmlzaXRvcik7Ci0gICAgfQorICAgIERFQ0xBUkVfVklT
SVRfQ0hJTERSRU47CiAKICAgICB2b2lkIGluaXQoSlNHbG9iYWxPYmplY3QqKTsKICAKQEAgLTI0
NSw2ICsyNDMsMTYgQEAgcHJpdmF0ZToKICAgICBjb25zdCBDbGFzc0luZm8qIG1fY2xhc3NJbmZv
IHsgbnVsbHB0ciB9OwogfTsKIAordGVtcGxhdGUgPGNsYXNzIFBhcmVudD4KK3RlbXBsYXRlPHR5
cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTQ2FsbGJhY2tPYmplY3Q8UGFyZW50Pjo6dmlzaXRDaGls
ZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIEpTQ2FsbGJh
Y2tPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNDYWxsYmFja09iamVjdCo+KGNlbGwpOwor
ICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoKHN0YXRpY19jYXN0PFBhcmVudCo+KHRoaXNP
YmplY3QpKSwgSlNDYWxsYmFja09iamVjdDxQYXJlbnQ+OjppbmZvKCkpOworICAgIFBhcmVudDo6
dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKKyAgICB0aGlzT2JqZWN0LT5tX2Nh
bGxiYWNrT2JqZWN0RGF0YS0+dmlzaXRDaGlsZHJlbih2aXNpdG9yKTsKK30KKwogfSAvLyBuYW1l
c3BhY2UgSlNDCiAKIC8vIGluY2x1ZGUgdGhlIGFjdHVhbCB0ZW1wbGF0ZSBjbGFzcyBpbXBsZW1l
bnRhdGlvbgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU01hbmFnZWRWYWx1ZS5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTTWFuYWdlZFZhbHVl
Lm1tCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTTWFu
YWdlZFZhbHVlLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMywgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQyLDcgKzQyLDcgQEAKIGNsYXNzIEpT
TWFuYWdlZFZhbHVlSGFuZGxlT3duZXIgZmluYWwgOiBwdWJsaWMgSlNDOjpXZWFrSGFuZGxlT3du
ZXIgewogcHVibGljOgogICAgIHZvaWQgZmluYWxpemUoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3du
Piwgdm9pZCogY29udGV4dCkgZmluYWw7Ci0gICAgYm9vbCBpc1JlYWNoYWJsZUZyb21PcGFxdWVS
b290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0LCBKU0M6OlNsb3RW
aXNpdG9yJiwgY29uc3QgY2hhcioqKSBmaW5hbDsKKyAgICBib29sIGlzUmVhY2hhYmxlRnJvbU9w
YXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6
QWJzdHJhY3RTbG90VmlzaXRvciYsIGNvbnN0IGNoYXIqKikgZmluYWw7CiB9OwogCiBzdGF0aWMg
SlNNYW5hZ2VkVmFsdWVIYW5kbGVPd25lciYgbWFuYWdlZFZhbHVlSGFuZGxlT3duZXIoKQpAQCAt
MTgwLDcgKzE4MCw3IEBAIEBpbnRlcmZhY2UgSlNNYW5hZ2VkVmFsdWUgKFByaXZhdGVNZXRob2QK
IC0gKHZvaWQpZGlzY29ubmVjdFZhbHVlOwogQGVuZAogCi1ib29sIEpTTWFuYWdlZFZhbHVlSGFu
ZGxlT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5r
bm93bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNo
YXIqKiByZWFzb24pCitib29sIEpTTWFuYWdlZFZhbHVlSGFuZGxlT3duZXI6OmlzUmVhY2hhYmxl
RnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQs
IEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikK
IHsKICAgICBpZiAoVU5MSUtFTFkocmVhc29uKSkKICAgICAgICAgKnJlYXNvbiA9ICJKU01hbmFn
ZWRWYWx1ZSBpcyBvcGFxdWUgcm9vdCI7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJ
L0pTTWFya2luZ0NvbnN0cmFpbnRQcml2YXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvQVBJL0pTTWFya2luZ0NvbnN0cmFpbnRQcml2YXRlLmNwcAkocmV2aXNpb24g
MjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU01hcmtpbmdDb25zdHJhaW50
UHJpdmF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDcgKzM2LDcgQEAgbmFtZXNwYWNlIHsK
IEF0b21pYzx1bnNpZ25lZD4gY29uc3RyYWludENvdW50ZXI7CiAKIHN0cnVjdCBNYXJrZXIgOiBK
U01hcmtlciB7Ci0gICAgU2xvdFZpc2l0b3IqIHZpc2l0b3I7CisgICAgQWJzdHJhY3RTbG90Vmlz
aXRvciogdmlzaXRvcjsKIH07CiAKIGJvb2wgaXNNYXJrZWQoSlNNYXJrZXJSZWYgbWFya2VyUmVm
LCBKU09iamVjdFJlZiBvYmplY3RSZWYpCkBAIC00NCw3ICs0NCw3IEBAIGJvb2wgaXNNYXJrZWQo
SlNNYXJrZXJSZWYgbWFya2VyUmVmLCBKU08KICAgICBpZiAoIW9iamVjdFJlZikKICAgICAgICAg
cmV0dXJuIHRydWU7IC8vIE51bGwgaXMgYW4gaW1tb3J0YWwgb2JqZWN0LgogICAgIAotICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxNYXJrZXIqPihtYXJrZXJSZWYpLT52aXNpdG9yLT52bSgpLmhlYXAu
aXNNYXJrZWQodG9KUyhvYmplY3RSZWYpKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8TWFya2Vy
Kj4obWFya2VyUmVmKS0+dmlzaXRvci0+aXNNYXJrZWQodG9KUyhvYmplY3RSZWYpKTsKIH0KIAog
dm9pZCBtYXJrKEpTTWFya2VyUmVmIG1hcmtlclJlZiwgSlNPYmplY3RSZWYgb2JqZWN0UmVmKQpA
QCAtNzMsNyArNzMsNyBAQCB2b2lkIEpTQ29udGV4dEdyb3VwQWRkTWFya2luZ0NvbnN0cmFpbnQo
CiAgICAgYXV0byBjb25zdHJhaW50ID0gbWFrZVVuaXF1ZTxTaW1wbGVNYXJraW5nQ29uc3RyYWlu
dD4oCiAgICAgICAgIHRvQ1N0cmluZygiQW1jIiwgY29uc3RyYWludEluZGV4LCAiKCIsIFJhd1Bv
aW50ZXIoYml0d2lzZV9jYXN0PHZvaWQqPihjb25zdHJhaW50Q2FsbGJhY2spKSwgIikiKSwKICAg
ICAgICAgdG9DU3RyaW5nKCJBUEkgTWFya2luZyBDb25zdHJhaW50ICMiLCBjb25zdHJhaW50SW5k
ZXgsICIgKCIsIFJhd1BvaW50ZXIoYml0d2lzZV9jYXN0PHZvaWQqPihjb25zdHJhaW50Q2FsbGJh
Y2spKSwgIiwgIiwgUmF3UG9pbnRlcih1c2VyRGF0YSksICIpIiksCi0gICAgICAgIFtjb25zdHJh
aW50Q2FsbGJhY2ssIHVzZXJEYXRhXSAoU2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsKKyAgICAgICAg
W2NvbnN0cmFpbnRDYWxsYmFjaywgdXNlckRhdGFdIChBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNp
dG9yKSB7CiAgICAgICAgICAgICBNYXJrZXIgbWFya2VyOwogICAgICAgICAgICAgbWFya2VyLklz
TWFya2VkID0gaXNNYXJrZWQ7CiAgICAgICAgICAgICBtYXJrZXIuTWFyayA9IG1hcms7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmlydHVhbE1hY2hpbmUubW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1ZpcnR1YWxNYWNoaW5lLm1tCShyZXZp
c2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmlydHVhbE1hY2hp
bmUubW0JKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMTUsNyArMzE1LDcgQEAgKyAodm9pZClzZXRDcmFz
aE9uVk1DcmVhdGlvbjooQk9PTClzaG91bAogCiBAZW5kCiAKLXN0YXRpYyB2b2lkIHNjYW5FeHRl
cm5hbE9iamVjdEdyYXBoKEpTQzo6Vk0mIHZtLCBKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yLCB2
b2lkKiByb290LCBib29sIGxvY2tBY3F1aXJlZCkKK3N0YXRpYyB2b2lkIHNjYW5FeHRlcm5hbE9i
amVjdEdyYXBoKEpTQzo6Vk0mIHZtLCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3Is
IHZvaWQqIHJvb3QsIGJvb2wgbG9ja0FjcXVpcmVkKQogewogICAgIEBhdXRvcmVsZWFzZXBvb2wg
ewogICAgICAgICBKU1ZpcnR1YWxNYWNoaW5lICp2aXJ0dWFsTWFjaGluZSA9IFtKU1ZNV3JhcHBl
ckNhY2hlIHdyYXBwZXJGb3JKU0NvbnRleHRHcm91cFJlZjp0b1JlZigmdm0pXTsKQEAgLTM0Nywx
MyArMzQ3LDEzIEBAIHN0YXRpYyB2b2lkIHNjYW5FeHRlcm5hbE9iamVjdEdyYXBoKEpTQzoKICAg
ICB9CiB9CiAKLXZvaWQgc2NhbkV4dGVybmFsT2JqZWN0R3JhcGgoSlNDOjpWTSYgdm0sIEpTQzo6
U2xvdFZpc2l0b3ImIHZpc2l0b3IsIHZvaWQqIHJvb3QpCit2b2lkIHNjYW5FeHRlcm5hbE9iamVj
dEdyYXBoKEpTQzo6Vk0mIHZtLCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIHZv
aWQqIHJvb3QpCiB7CiAgICAgYm9vbCBsb2NrQWNxdWlyZWQgPSBmYWxzZTsKICAgICBzY2FuRXh0
ZXJuYWxPYmplY3RHcmFwaCh2bSwgdmlzaXRvciwgcm9vdCwgbG9ja0FjcXVpcmVkKTsKIH0KIAot
dm9pZCBzY2FuRXh0ZXJuYWxSZW1lbWJlcmVkU2V0KEpTQzo6Vk0mIHZtLCBKU0M6OlNsb3RWaXNp
dG9yJiB2aXNpdG9yKQordm9pZCBzY2FuRXh0ZXJuYWxSZW1lbWJlcmVkU2V0KEpTQzo6Vk0mIHZt
LCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgQGF1dG9yZWxlYXNl
cG9vbCB7CiAgICAgICAgIEpTVmlydHVhbE1hY2hpbmUgKnZpcnR1YWxNYWNoaW5lID0gW0pTVk1X
cmFwcGVyQ2FjaGUgd3JhcHBlckZvckpTQ29udGV4dEdyb3VwUmVmOnRvUmVmKCZ2bSldOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1ZpcnR1YWxNYWNoaW5lSW50ZXJuYWwuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmlydHVhbE1hY2hpbmVJ
bnRlcm5hbC5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJ
L0pTVmlydHVhbE1hY2hpbmVJbnRlcm5hbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMyLDcgKzMy
LDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiBjbGFzcyBWTTsKLWNsYXNzIFNsb3RWaXNpdG9yOwor
Y2xhc3MgQWJzdHJhY3RTbG90VmlzaXRvcjsKIH0KIAogI2lmIGRlZmluZWQoX19PQkpDX18pCkBA
IC01NCw4ICs1NCw4IEBAIEpTQ29udGV4dEdyb3VwUmVmIGdldEdyb3VwRnJvbVZpcnR1YWxNYWMK
IAogI2VuZGlmIC8vIGRlZmluZWQoX19PQkpDX18pCiAKLXZvaWQgc2NhbkV4dGVybmFsT2JqZWN0
R3JhcGgoSlNDOjpWTSYsIEpTQzo6U2xvdFZpc2l0b3ImLCB2b2lkKiByb290KTsKLXZvaWQgc2Nh
bkV4dGVybmFsUmVtZW1iZXJlZFNldChKU0M6OlZNJiwgSlNDOjpTbG90VmlzaXRvciYpOwordm9p
ZCBzY2FuRXh0ZXJuYWxPYmplY3RHcmFwaChKU0M6OlZNJiwgSlNDOjpBYnN0cmFjdFNsb3RWaXNp
dG9yJiwgdm9pZCogcm9vdCk7Cit2b2lkIHNjYW5FeHRlcm5hbFJlbWVtYmVyZWRTZXQoSlNDOjpW
TSYsIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpOwogCiAjZW5kaWYgLy8gSlNDX09CSkNfQVBJ
X0VOQUJMRUQKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9NYXJrZWRKU1ZhbHVl
UmVmQXJyYXkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvTWFy
a2VkSlNWYWx1ZVJlZkFycmF5LmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL0FQSS9NYXJrZWRKU1ZhbHVlUmVmQXJyYXkuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAtMjAyMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ2
LDcgKzQ2LDcgQEAgTWFya2VkSlNWYWx1ZVJlZkFycmF5Ojp+TWFya2VkSlNWYWx1ZVJlZgogICAg
ICAgICByZW1vdmUoKTsKIH0KIAotdm9pZCBNYXJrZWRKU1ZhbHVlUmVmQXJyYXk6OnZpc2l0QWdn
cmVnYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBNYXJrZWRKU1ZhbHVlUmVmQXJyYXk6
OnZpc2l0QWdncmVnYXRlKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNW
YWx1ZVJlZiogYnVmZmVyID0gZGF0YSgpOwogICAgIGZvciAodW5zaWduZWQgaW5kZXggPSAwOyBp
bmRleCA8IG1fc2l6ZTsgKytpbmRleCkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQ
SS9NYXJrZWRKU1ZhbHVlUmVmQXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvQVBJL01hcmtlZEpTVmFsdWVSZWZBcnJheS5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL01hcmtlZEpTVmFsdWVSZWZBcnJheS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAtMjAyMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTYyLDcgKzYyLDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9pbmxpbmVCdWZm
ZXI7CiAgICAgfQogCi0gICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYpOworICAg
IHZvaWQgdmlzaXRBZ2dyZWdhdGUoQWJzdHJhY3RTbG90VmlzaXRvciYpOwogCiBwcml2YXRlOgog
ICAgIHVuc2lnbmVkIG1fc2l6ZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xp
Yi9KU0FQSVdyYXBwZXJHbG9iYWxPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0FQSVdyYXBwZXJHbG9iYWxPYmplY3QuY3BwCShyZXZpc2lv
biAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNBUElXcmFwcGVy
R2xvYmFsT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTksNiArNTksOCBAQCBzdGF0aWMg
SlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElPTihjb25zdHJ1CiBzdGF0aWMgSlNDX0RFQ0xBUkVfQ1VT
VE9NX0dFVFRFUihjYWxsYmFja0dldHRlckpTQVBJV3JhcHBlckdsb2JhbE9iamVjdENhbGxiYWNr
T2JqZWN0KTsKIHN0YXRpYyBKU0NfREVDTEFSRV9DVVNUT01fR0VUVEVSKHN0YXRpY0Z1bmN0aW9u
R2V0dGVySlNBUElXcmFwcGVyR2xvYmFsT2JqZWN0Q2FsbGJhY2tPYmplY3QpOwogCitERUZJTkVf
VEVNUExBVEVfVklTSVRfQ0hJTERSRU4odGVtcGxhdGU8PiwgSlNDYWxsYmFja09iamVjdDxKU0FQ
SVdyYXBwZXJHbG9iYWxPYmplY3Q+KTsKKwogdGVtcGxhdGUgPD4gY29uc3QgQ2xhc3NJbmZvIEpT
Q2FsbGJhY2tPYmplY3Q8SlNBUElXcmFwcGVyR2xvYmFsT2JqZWN0Pjo6c19pbmZvID0geyAiSlNB
UElXcmFwcGVyR2xvYmFsT2JqZWN0IiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwg
Q1JFQVRFX01FVEhPRF9UQUJMRShKU0NhbGxiYWNrT2JqZWN0KSB9OwogdGVtcGxhdGU8PiBjb25z
dCBib29sIEpTQ2FsbGJhY2tPYmplY3Q8SlNBUElXcmFwcGVyR2xvYmFsT2JqZWN0Pjo6bmVlZHNE
ZXN0cnVjdGlvbiA9IHRydWU7CiAKQEAgLTE0NCw5ICsxNDYsNCBAQCB2b2lkIEpTQVBJV3JhcHBl
ckdsb2JhbE9iamVjdDo6ZmluaXNoQ3JlCiAgICAgV2Vha1NldDo6YWxsb2NhdGUodGhpcywganNB
UElXcmFwcGVyR2xvYmFsT2JqZWN0SGFuZGxlT3duZXIoKSwgMCk7IC8vIEJhbGFuY2VkIGluIEpT
QVBJV3JhcHBlckdsb2JhbE9iamVjdEhhbmRsZU93bmVyOjpmaW5hbGl6ZS4KIH0KIAotdm9pZCBK
U0FQSVdyYXBwZXJHbG9iYWxPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBKU0M6
OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQotewotICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4oY2VsbCwg
dmlzaXRvcik7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL0FQSS9nbGliL0pTQVBJV3JhcHBlckdsb2JhbE9iamVjdC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0FQSVdyYXBwZXJHbG9iYWxPYmplY3Qu
aAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pT
QVBJV3JhcHBlckdsb2JhbE9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw3ICszOSw2IEBA
IHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBzdWJzcGFjZUZvcihWTSYpIHsgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsgfQogCiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOwotICAg
IHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpOwog
CiAgICAgSlNDR0xpYldyYXBwZXJPYmplY3QqIHdyYXBwZWRPYmplY3QoKSBjb25zdCB7IHJldHVy
biBtX3dyYXBwZWRPYmplY3Q7IH0KICAgICB2b2lkIHNldFdyYXBwZWRPYmplY3QoSlNDR0xpYldy
YXBwZXJPYmplY3QqIHdyYXBwZWRPYmplY3QpIHsgbV93cmFwcGVkT2JqZWN0ID0gd3JhcHBlZE9i
amVjdDsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQVBJV3JhcHBl
ck9iamVjdEdMaWIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkv
Z2xpYi9KU0FQSVdyYXBwZXJPYmplY3RHTGliLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQVBJV3JhcHBlck9iamVjdEdMaWIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5j
bHVkZSAiSlNBUElXcmFwcGVyT2JqZWN0LmgiCiAKKyNpbmNsdWRlICJBYnN0cmFjdFNsb3RWaXNp
dG9yLmgiCiAjaW5jbHVkZSAiSlNDR0xpYldyYXBwZXJPYmplY3QuaCIKICNpbmNsdWRlICJKU0NJ
bmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNDYWxsYmFja09iamVjdC5oIgpAQCAtMzYsNyArMzcsNyBA
QAogY2xhc3MgSlNBUElXcmFwcGVyT2JqZWN0SGFuZGxlT3duZXIgZmluYWwgOiBwdWJsaWMgSlND
OjpXZWFrSGFuZGxlT3duZXIgewogcHVibGljOgogICAgIHZvaWQgZmluYWxpemUoSlNDOjpIYW5k
bGU8SlNDOjpVbmtub3duPiwgdm9pZCopIGZpbmFsOwotICAgIGJvb2wgaXNSZWFjaGFibGVGcm9t
T3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCwgSlND
OjpTbG90VmlzaXRvciYsIGNvbnN0IGNoYXIqKikgZmluYWw7CisgICAgYm9vbCBpc1JlYWNoYWJs
ZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0
LCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImLCBjb25zdCBjaGFyKiopIGZpbmFsOwogfTsKIAog
c3RhdGljIEpTQVBJV3JhcHBlck9iamVjdEhhbmRsZU93bmVyKiBqc0FQSVdyYXBwZXJPYmplY3RI
YW5kbGVPd25lcigpCkBAIC01NSw3ICs1Niw3IEBAIHZvaWQgSlNBUElXcmFwcGVyT2JqZWN0SGFu
ZGxlT3duZXI6OmZpbmEKICAgICBKU0M6OldlYWtTZXQ6OmRlYWxsb2NhdGUoSlNDOjpXZWFrSW1w
bDo6YXNXZWFrSW1wbChoYW5kbGUuc2xvdCgpKSk7CiB9CiAKLWJvb2wgSlNBUElXcmFwcGVyT2Jq
ZWN0SGFuZGxlT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpT
Qzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvciwgY29u
c3QgY2hhcioqKQorYm9vbCBKU0FQSVdyYXBwZXJPYmplY3RIYW5kbGVPd25lcjo6aXNSZWFjaGFi
bGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQq
LCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKikKIHsKICAg
ICBKU0M6OkpTQVBJV3JhcHBlck9iamVjdCogd3JhcHBlck9iamVjdCA9IEpTQzo6anNDYXN0PEpT
Qzo6SlNBUElXcmFwcGVyT2JqZWN0Kj4oaGFuZGxlLmdldCgpLmFzQ2VsbCgpKTsKICAgICAvLyBX
ZSB1c2UgdGhlIEpTR2xvYmFsT2JqZWN0IHdoZW4gcHJvY2Vzc2luZyB3ZWFrIGhhbmRsZXMgdG8g
cHJldmVudCB0aGUgc2l0dWF0aW9uIHdoZXJlIHVzaW5nCkBAIC03Miw2ICs3Myw4IEBAIHN0YXRp
YyBKU0NfREVDTEFSRV9IT1NUX0ZVTkNUSU9OKGNvbnN0cnUKIHN0YXRpYyBKU0NfREVDTEFSRV9D
VVNUT01fR0VUVEVSKGNhbGxiYWNrR2V0dGVySlNBUElXcmFwcGVyT2JqZWN0Q2FsbGJhY2tPYmpl
Y3QpOwogc3RhdGljIEpTQ19ERUNMQVJFX0NVU1RPTV9HRVRURVIoc3RhdGljRnVuY3Rpb25HZXR0
ZXJKU0FQSVdyYXBwZXJPYmplY3RDYWxsYmFja09iamVjdCk7CiAKK0RFRklORV9URU1QTEFURV9W
SVNJVF9DSElMRFJFTih0ZW1wbGF0ZTw+LCBKU0NhbGxiYWNrT2JqZWN0PEpTQVBJV3JhcHBlck9i
amVjdD4pOworCiB0ZW1wbGF0ZSA8PiBjb25zdCBDbGFzc0luZm8gSlNDYWxsYmFja09iamVjdDxK
U0FQSVdyYXBwZXJPYmplY3Q+OjpzX2luZm8gPSB7ICJKU0FQSVdyYXBwZXJPYmplY3QiLCAmQmFz
ZTo6c19pbmZvLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTQ2FsbGJh
Y2tPYmplY3QpIH07CiB0ZW1wbGF0ZTw+IGNvbnN0IGJvb2wgSlNDYWxsYmFja09iamVjdDxKU0FQ
SVdyYXBwZXJPYmplY3Q+OjpuZWVkc0Rlc3RydWN0aW9uID0gdHJ1ZTsKIApAQCAtMTU1LDkgKzE1
OCwxMiBAQCB2b2lkIEpTQVBJV3JhcHBlck9iamVjdDo6c2V0V3JhcHBlZE9iamVjCiAgICAgbV93
cmFwcGVkT2JqZWN0ID0gd3JhcHBlZE9iamVjdDsKIH0KIAotdm9pZCBKU0FQSVdyYXBwZXJPYmpl
Y3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9y
KQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNBUElXcmFwcGVyT2JqZWN0Ojp2
aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAg
QmFzZTo6dmlzaXRDaGlsZHJlbihjZWxsLCB2aXNpdG9yKTsKIH0KIAorREVGSU5FX0VYUE9SVF9W
SVNJVF9DSElMRFJFTihKU0FQSVdyYXBwZXJPYmplY3QpOworCiB9IC8vIG5hbWVzcGFjZSBKU0MK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyNzI4MzApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTE1OCw2ICsxMTU4LDcgQEAKIAkJNjVCODM5MkUxQkFD
QUQzNjAwNDRFODI0IC8qIENhY2hlZFJlY292ZXJ5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NUI4MzkyQzFCQUNBOTJBMDA0NEU4MjQgLyogQ2FjaGVk
UmVjb3ZlcnkuaCAqLzsgfTsKIAkJNkEzOENGQUExRTMyQjVBQjAwNjAyMDZGIC8qIEFzeW5jU3Rh
Y2tUcmFjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NkEzOENGQTgxRTMyQjU4QjAwNjAyMDZGIC8qIEFzeW5jU3RhY2tUcmFjZS5oICovOyB9OwogCQk2
QUQyQ0I0RDE5QjkxNDAxMDAwNjU3MTkgLyogRGVidWdnZXJFdmFsRW5hYmxlci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkFEMkNCNEMxOUI5MTQwMTAw
MDY1NzE5IC8qIERlYnVnZ2VyRXZhbEVuYWJsZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OworCQk2QkNDRUMwNDI1RDFGQTI3MDAwRjM5MUQgLyogVmVy
aWZpZXJTbG90VmlzaXRvcklubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDZCQ0NFQzAzMjVEMUZBMjcwMDBGMzkxRCAvKiBWZXJpZmllclNsb3RW
aXNpdG9ySW5saW5lcy5oICovOyB9OwogCQk3MDExM0Q0QzFBOERCMDkzMDAzODQ4QzQgLyogSXRl
cmF0b3JPcGVyYXRpb25zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA3MDExM0Q0QTFBOERCMDkzMDAzODQ4QzQgLyogSXRlcmF0b3JPcGVyYXRpb25zLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzAxM0NB
OEMxQjQ5MUE5NDAwQ0FFNjEzIC8qIEpTTWljcm90YXNrLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MDEzQ0E4QTFCNDkxQTk0MDBDQUU2MTMgLyogSlNN
aWNyb3Rhc2suaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQk3MDVCNDFBQzFBNkU1MDFFMDA3MTY3NTcgLyogU3ltYm9sLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MDVCNDFBNDFBNkU1MDFFMDA3MTY3NTcg
LyogU3ltYm9sLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKQEAgLTE5MTYsNiArMTkxNyw3IEBACiAJCUUzRkY3NTMzMUQ5Q0VBMTgwMEM3RTE2RCAvKiBE
T01KSVRHZXR0ZXJTZXR0ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEUzRkY3NTJGMUQ5Q0VBMTIwMEM3RTE2RCAvKiBET01KSVRHZXR0ZXJTZXR0ZXIu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlFNDlE
QzE2QzEyRUYyOTRFMDAxODRBMUYgLyogU291cmNlUHJvdmlkZXJDYWNoZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQ5REMxNTExMkVGMjcyMjAwMTg0
QTFGIC8qIFNvdXJjZVByb3ZpZGVyQ2FjaGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQlFNDlEQzE2RDEyRUYyOTUzMDAxODRBMUYgLyogU291cmNl
UHJvdmlkZXJDYWNoZUl0ZW0uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEU0OURDMTQ5MTJFRjI2MUEwMDE4NEExRiAvKiBTb3VyY2VQcm92aWRlckNhY2hl
SXRlbS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJ
CUZFMDQxNTUzMjUyRUMwNzMwMDkxRUI1RCAvKiBTbG90VmlzaXRvck1hY3Jvcy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUwNDE1NTIyNTJFQzA3MzAw
OTFFQjVEIC8qIFNsb3RWaXNpdG9yTWFjcm9zLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRkUwNUZBRkQxRkU0Q0VEQTAwMDkzMjMwIC8qIERlcHJl
Y2F0ZWRJbnNwZWN0b3JWYWx1ZXMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gOTkyRDZBMTExRkJENDkxRDAwMDI0NUY0IC8qIERlcHJlY2F0ZWRJbnNw
ZWN0b3JWYWx1ZXMuY3BwICovOyB9OwogCQlGRTA4NkJDQTIxMjNERUZCMDAzRjI5MjkgLyogRW50
cnlGcmFtZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RkUwODZCQzkyMTIzREVGQTAwM0YyOTI5IC8qIEVudHJ5RnJhbWUuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlGRTBENEEwNjFBQjhERDBBMDAyRjU0
QkYgLyogRXhlY3V0aW9uVGltZUxpbWl0VGVzdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTBENEEwNDFBQjhERDBBMDAyRjU0QkYgLyogRXhlY3V0
aW9uVGltZUxpbWl0VGVzdC5jcHAgKi87IH07CkBAIC0xOTM4LDYgKzE5NDAsNyBAQAogCQlGRTFF
MkMzRjIyNDBERDU4MDBGNkI3MjkgLyogTWFjcm9Bc3NlbWJsZXJBUk02NEUuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFMUUyQzNFMjI0MEQzMEIwMEY2
QjcyOSAvKiBNYWNyb0Fzc2VtYmxlckFSTTY0RS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCUZFMUUyQzQwMjI0MERENjIwMEY2QjcyOSAvKiBBUk02
NEVBc3NlbWJsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEZFMUUyQzNEMjI0MEQyRjYwMEY2QjcyOSAvKiBBUk02NEVBc3NlbWJsZXIuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlGRTIwQ0U5RTE1RjA0
QTk1MDBERjM0MzAgLyogTExJbnRDTG9vcC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRkUyMENFOUMxNUYwNEE5NTAwREYzNDMwIC8qIExMSW50Q0xvb3Au
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlGRTI4
N0QwMjI1MkZCMkU4MDBENzIzRjkgLyogVmVyaWZpZXJTbG90VmlzaXRvci5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUyODdEMDEyNTJGQjJFODAwRDcy
M0Y5IC8qIFZlcmlmaWVyU2xvdFZpc2l0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQlGRTJBODc2MDFGMDIzODE2MDBFQjMxQjIgLyogTWluaW11
bVJlc2VydmVkWm9uZVNpemUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEZFMkE4NzVGMUYwMjM4MTYwMEVCMzFCMiAvKiBNaW5pbXVtUmVzZXJ2ZWRab25l
U2l6ZS5oICovOyB9OwogCQlGRTMwMjJEMzFFM0Q3M0E1MDBCQUM0OTMgLyogU2lnaWxsQ3Jhc2hB
bmFseXplci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RkUzMDIyRDExRTNENzM5NjAwQkFDNDkzIC8qIFNpZ2lsbENyYXNoQW5hbHl6ZXIuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlGRTMwMjJENzFFNDI4
NTczMDBCQUM0OTMgLyogVk1JbnNwZWN0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEZFMzAyMkQ1MUU0Mjg1NjcwMEJBQzQ5MyAvKiBWTUluc3BlY3Rv
ci5oICovOyB9OwpAQCAtMTk3Niw2ICsxOTc5LDggQEAKIAkJRkU4MEMxOTcxRDc3NUNERDAwODUx
MEMwIC8qIENhdGNoU2NvcGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEZFODBDMTk2MUQ3NzVCMjcwMDg1MTBDMCAvKiBDYXRjaFNjb3BlLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRkU4REU1NEIyM0FD
MURBRDAwNUM5MTQyIC8qIENhY2hlYWJsZUlkZW50aWZpZXIuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFOERFNTRBMjNBQzFEQUQwMDVDOTE0MiAvKiBD
YWNoZWFibGVJZGVudGlmaWVyLmggKi87IH07CiAJCUZFOERFNTREMjNBQzFFODYwMDVDOTE0MiAv
KiBDYWNoZWFibGVJZGVudGlmaWVySW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRkU4REU1NEMyM0FDMUU4NjAwNUM5MTQyIC8qIENhY2hlYWJs
ZUlkZW50aWZpZXJJbmxpbmVzLmggKi87IH07CisJCUZFOTEyQjRGMjUzMTE5MzMwMEZBQkRERiAv
KiBBYnN0cmFjdFNsb3RWaXNpdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBGRTkxMkI0RTI1MzExOTMzMDBGQUJEREYgLyogQWJzdHJhY3RTbG90Vmlz
aXRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJ
CUZFOTEyQjUxMjUzMTFBRDEwMEZBQkRERiAvKiBBYnN0cmFjdFNsb3RWaXNpdG9ySW5saW5lcy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkU5MTJCNTAy
NTMxMUFEMTAwRkFCRERGIC8qIEFic3RyYWN0U2xvdFZpc2l0b3JJbmxpbmVzLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRkU5OUIyNDkxQzI0QzNE
MzAwQzgyMTU5IC8qIEpJVE5lZ0dlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRkU5OUIyNDgxQzI0QjZEMzAwQzgyMTU5IC8qIEpJVE5lZ0dl
bmVyYXRvci5oICovOyB9OwogCQlGRUEwODYyMDE4MkI3QTA0MDBGNkQ4NTEgLyogQnJlYWtwb2lu
dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkVBMDg2
MUUxODJCN0EwNDAwRjZEODUxIC8qIEJyZWFrcG9pbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlGRUEwODYyMTE4MkI3QTA0MDBGNkQ4NTEgLyog
RGVidWdnZXJQcmltaXRpdmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBGRUEwODYxRjE4MkI3QTA0MDBGNkQ4NTEgLyogRGVidWdnZXJQcmltaXRpdmVz
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTM5
ODgsNiArMzk5Myw3IEBACiAJCTZBMzhDRkE4MUUzMkI1OEIwMDYwMjA2RiAvKiBBc3luY1N0YWNr
VHJhY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQXN5bmNTdGFja1RyYWNl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZBRDJDQjRDMTlCOTE0MDEwMDA2NTcx
OSAvKiBEZWJ1Z2dlckV2YWxFbmFibGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IERlYnVnZ2VyRXZhbEVuYWJsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NkJBOTNDOTU5MDQ4NEM1QkFEOTMxNkVBIC8qIEpTU2NyaXB0RmV0Y2hlci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBKU1NjcmlwdEZldGNoZXIuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJNkJDQ0VDMDMyNUQxRkEyNzAwMEYzOTFEIC8qIFZlcmlmaWVyU2xvdFZp
c2l0b3JJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZlcmlmaWVy
U2xvdFZpc2l0b3JJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcwMTEz
RDQ5MUE4REIwOTMwMDM4NDhDNCAvKiBJdGVyYXRvck9wZXJhdGlvbnMuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSXRlcmF0b3JPcGVyYXRpb25zLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzAxMTNENEExQThEQjA5MzAwMzg0OEM0IC8qIEl0ZXJh
dG9yT3BlcmF0aW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJdGVyYXRv
ck9wZXJhdGlvbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzAxM0NBODkxQjQ5
MUE5NDAwQ0FFNjEzIC8qIEpTTWljcm90YXNrLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEpTTWljcm90YXNrLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTUyMjEsNiArNTIyNyw3IEBACiAJCUY2OTJBODg3MDI1NTU5N0QwMUZGNjBGNyAvKiBKU0NK
U1ZhbHVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAz
MDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEpTQ0pTVmFsdWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0
aCA9IDg7IH07CiAJCUY3MzkyNjkxOERDNjQzMzBBRkNERjBENyAvKiBKU1NvdXJjZUNvZGUuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNTb3VyY2VDb2RlLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkUwMDI2MjIyM0YzQUYzMzAwM0EzNThGIC8q
IFdlYkFzc2VtYmx5LmFzbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYXNtLmFzbTsgbmFtZSA9IFdlYkFzc2VtYmx5LmFzbTsgcGF0
aCA9IGxsaW50L1dlYkFzc2VtYmx5LmFzbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
RkUwNDE1NTIyNTJFQzA3MzAwOTFFQjVEIC8qIFNsb3RWaXNpdG9yTWFjcm9zLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNsb3RWaXNpdG9yTWFjcm9zLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUZFMDg2QkM5MjEyM0RFRkEwMDNGMjkyOSAvKiBFbnRyeUZyYW1l
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEVudHJ5RnJhbWUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkUwRDRBMDQxQUI4REQwQTAwMkY1NEJGIC8qIEV4ZWN1
dGlvblRpbWVMaW1pdFRlc3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1l
ID0gRXhlY3V0aW9uVGltZUxpbWl0VGVzdC5jcHA7IHBhdGggPSBBUEkvdGVzdHMvRXhlY3V0aW9u
VGltZUxpbWl0VGVzdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFMEQ0QTA1
MUFCOEREMEEwMDJGNTRCRiAvKiBFeGVjdXRpb25UaW1lTGltaXRUZXN0LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEV4ZWN1dGlvblRpbWVMaW1pdFRlc3QuaDsgcGF0aCA9IEFQ
SS90ZXN0cy9FeGVjdXRpb25UaW1lTGltaXRUZXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC01MjU1LDcgKzUyNjIsOSBAQAogCQlGRTFFMkMzRTIyNDBEMzBCMDBGNkI3MjkgLyog
TWFjcm9Bc3NlbWJsZXJBUk02NEUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
TWFjcm9Bc3NlbWJsZXJBUk02NEUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkUy
MENFOUIxNUYwNEE5NTAwREYzNDMwIC8qIExMSW50Q0xvb3AuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBuYW1lID0gTExJbnRDTG9vcC5jcHA7IHBhdGggPSBsbGludC9MTEludENM
b29wLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkUyMENFOUMxNUYwNEE5NTAw
REYzNDMwIC8qIExMSW50Q0xvb3AuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
TExJbnRDTG9vcC5oOyBwYXRoID0gbGxpbnQvTExJbnRDTG9vcC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlGRTI4N0QwMTI1MkZCMkU4MDBENzIzRjkgLyogVmVyaWZpZXJTbG90Vmlz
aXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBWZXJpZmllclNsb3RWaXNp
dG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFMkE4NzVGMUYwMjM4MTYwMEVC
MzFCMiAvKiBNaW5pbXVtUmVzZXJ2ZWRab25lU2l6ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNaW5pbXVt
UmVzZXJ2ZWRab25lU2l6ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRTJCRDY2
RTI1QzBEQzgyMDA5OTlEM0IgLyogVmVyaWZpZXJTbG90VmlzaXRvci5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBWZXJpZmllclNsb3RWaXNpdG9yLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkUyRTZBN0ExRDZFQTVGRTAwNjBGODk2IC8qIFRocm93
U2NvcGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVGhyb3dTY29w
ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFMzAyMkQwMUUzRDczOTYwMEJB
QzQ5MyAvKiBTaWdpbGxDcmFzaEFuYWx5emVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFNpZ2lsbENyYXNoQW5hbHl6ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlGRTMwMjJEMTFFM0Q3Mzk2MDBCQUM0OTMgLyogU2lnaWxsQ3Jhc2hBbmFseXpl
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTaWdpbGxDcmFzaEFuYWx5emVy
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01MzI5LDYgKzUzMzgsOCBAQAogCQlG
RThERTU0QzIzQUMxRTg2MDA1QzkxNDIgLyogQ2FjaGVhYmxlSWRlbnRpZmllcklubGluZXMuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ2FjaGVhYmxlSWRlbnRpZmllcklubGlu
ZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkU4REU1NEUyM0FDM0E4RTAwNUM5
MTQyIC8qIENhY2hlYWJsZUlkZW50aWZpZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ2FjaGVh
YmxlSWRlbnRpZmllci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFOTBCQjNB
MUI3Q0Y2NEUwMDZCM0YwMyAvKiBWTUlubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gVk1JbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZFOTEy
QjRFMjUzMTE5MzMwMEZBQkRERiAvKiBBYnN0cmFjdFNsb3RWaXNpdG9yLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFic3RyYWN0U2xvdFZpc2l0b3IuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJRkU5MTJCNTAyNTMxMUFEMTAwRkFCRERGIC8qIEFic3RyYWN0U2xv
dFZpc2l0b3JJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFic3Ry
YWN0U2xvdFZpc2l0b3JJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZF
OThCNUI2MUJCOUFFMTEwMDczRTdBNiAvKiBKSVRTdWJHZW5lcmF0b3IuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSklUU3ViR2VuZXJhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUZFOTlCMjQ3MUMyNEI2RDMwMEM4MjE1OSAvKiBKSVROZWdHZW5lcmF0b3Iu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSklUTmVnR2VuZXJhdG9y
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkU5OUIyNDgxQzI0QjZEMzAwQzgy
MTU5IC8qIEpJVE5lZ0dlbmVyYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBKSVROZWdHZW5lcmF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTYyNzgs
NiArNjI4OSw4IEBACiAJCTE0MkUzMTJBMTM0RkYwQTYwMEFGQURCNSAvKiBoZWFwICovID0gewog
CQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQlGRTkxMkI0RTI1MzExOTMz
MDBGQUJEREYgLyogQWJzdHJhY3RTbG90VmlzaXRvci5oICovLAorCQkJCUZFOTEyQjUwMjUzMTFB
RDEwMEZBQkRERiAvKiBBYnN0cmFjdFNsb3RWaXNpdG9ySW5saW5lcy5oICovLAogCQkJCTBGRUMz
QzUwMUYzM0E0MTYwMEY1OUI2QyAvKiBBbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmNwcCAqLywKIAkJ
CQkwRkVDM0M1MTFGMzNBNDE2MDBGNTlCNkMgLyogQWxpZ25lZE1lbW9yeUFsbG9jYXRvci5oICov
LAogCQkJCTBGQTc2MjBBMURCOTU5RjYwMEI3QTJGRCAvKiBBbGxvY2F0aW5nU2NvcGUuaCAqLywK
QEAgLTY0MzUsNiArNjQ0OCw3IEBACiAJCQkJQzIyNTQ5NDIxNUY3REJBQTAwNjVFODk4IC8qIFNs
b3RWaXNpdG9yLmNwcCAqLywKIAkJCQkxNEJBNzhGMDEzQUFCODhGMDA1QjdDMkMgLyogU2xvdFZp
c2l0b3IuaCAqLywKIAkJCQkwRkNCNDA4NTE1QzBBM0MzMDA0ODkzMkIgLyogU2xvdFZpc2l0b3JJ
bmxpbmVzLmggKi8sCisJCQkJRkUwNDE1NTIyNTJFQzA3MzAwOTFFQjVEIC8qIFNsb3RWaXNpdG9y
TWFjcm9zLmggKi8sCiAJCQkJMEZERTg3RkExREZFNkU1MDAwNjRDMzkwIC8qIFNwYWNlVGltZU11
dGF0b3JTY2hlZHVsZXIuY3BwICovLAogCQkJCTBGREU4N0ZCMURGRTZFNTAwMDY0QzM5MCAvKiBT
cGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyLmggKi8sCiAJCQkJMEY0RjgyODkxRTMxQjk3MTAwNzUx
ODRDIC8qIFN0b2NoYXN0aWNTcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyLmNwcCAqLywKQEAgLTY0
NTIsNiArNjQ2Niw5IEBACiAJCQkJMEYxRkIzOEExRTE3M0E2MjAwQTlCRTUwIC8qIFN5bmNocm9u
b3VzU3RvcFRoZVdvcmxkTXV0YXRvclNjaGVkdWxlci5jcHAgKi8sCiAJCQkJMEYxRkIzOEIxRTE3
M0E2MjAwQTlCRTUwIC8qIFN5bmNocm9ub3VzU3RvcFRoZVdvcmxkTXV0YXRvclNjaGVkdWxlci5o
ICovLAogCQkJCTE0MTQ0OENDMTNBMTc4MzcwMEY1QkExQSAvKiBUaW55Qmxvb21GaWx0ZXIuaCAq
LywKKwkJCQlGRTJCRDY2RTI1QzBEQzgyMDA5OTlEM0IgLyogVmVyaWZpZXJTbG90VmlzaXRvci5j
cHAgKi8sCisJCQkJRkUyODdEMDEyNTJGQjJFODAwRDcyM0Y5IC8qIFZlcmlmaWVyU2xvdFZpc2l0
b3IuaCAqLywKKwkJCQk2QkNDRUMwMzI1RDFGQTI3MDAwRjM5MUQgLyogVmVyaWZpZXJTbG90Vmlz
aXRvcklubGluZXMuaCAqLywKIAkJCQkwRjREOEM3MjFGQzdBOTczMDAxRDMyQUMgLyogVmlzaXRD
b3VudGVyLmggKi8sCiAJCQkJMEY5NTJBOUYxREY3ODYwNzAwRTA2RkJEIC8qIFZpc2l0UmFjZUtl
eS5jcHAgKi8sCiAJCQkJMEY5NTJBQTAxREY3ODYwNzAwRTA2RkJEIC8qIFZpc2l0UmFjZUtleS5o
ICovLApAQCAtOTI5Myw2ICs5MzEwLDcgQEAKIAkJCQkxNDdCODNBQzBFNkRCOEM5MDA0Nzc1QTQg
LyogQmF0Y2hlZFRyYW5zaXRpb25PcHRpbWl6ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUUzNUU4
OUZEMjVDNTBGODcwMDcxRUUxRSAvKiBCaWdJbnQ2NEFycmF5LmggaW4gSGVhZGVycyAqLywKIAkJ
CQk4Njk3NkU1RjFGQTNFOEJDMDBFN0M0RTEgLyogQmlnSW50Q29uc3RydWN0b3IuaCBpbiBIZWFk
ZXJzICovLAorCQkJCUZFMDQxNTUzMjUyRUMwNzMwMDkxRUI1RCAvKiBTbG90VmlzaXRvck1hY3Jv
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODY2NzM5RDIxM0JGREU3MTAwMjNEODdDIC8qIEJpZ0lu
dGVnZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2MTgxNjc3MUZCNzkyNDIwMEVDQzRFQyAvKiBC
aWdJbnRPYmplY3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2OTc2RTVFMUZBM0U4QjYwMEU3QzRF
MSAvKiBCaWdJbnRQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovLApAQCAtOTU3NCw2ICs5NTkyLDcg
QEAKIAkJCQkwRkQ4MkU1NzE0MURBRjEwMDAxNzlDOTQgLyogREZHT1NSRW50cnkuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGRDhBMzI2MTdENTFGNTcwMENBMkM0MCAvKiBERkdPU1JFbnRyeXBvaW50
Q3JlYXRpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZDMDk3NkExNDY4QTZGNzAwQ0Yy
NDQyIC8qIERGR09TUkV4aXQuaCBpbiBIZWFkZXJzICovLAorCQkJCUZFOTEyQjRGMjUzMTE5MzMw
MEZBQkRERiAvKiBBYnN0cmFjdFNsb3RWaXNpdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjIz
NUJFQzE3MTc4RTczMDA2OTBDN0YgLyogREZHT1NSRXhpdEJhc2UuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGRkI5MjFDMTZEMDJGMTEwMDU1QTVEQiAvKiBERkdPU1JFeGl0Q29tcGlsYXRpb25JbmZv
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjcwMjVBQTE3MTRCMEZDMDAzODJDMEUgLyogREZHT1NS
RXhpdENvbXBpbGVyQ29tbW9uLmggaW4gSGVhZGVycyAqLywKQEAgLTk4NTksNiArOTg3OCw3IEBA
CiAJCQkJQTUxM0U1QkUxODVCRkFDQzAwN0U5NUFEIC8qIEluamVjdGVkU2NyaXB0SG9zdC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQTUxM0U1Q0IxODVGOTYyNDAwN0U5NUFEIC8qIEluamVjdGVkU2Ny
aXB0TWFuYWdlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTU4NDBFMjExODdCN0I4NjAwODQzQjEw
IC8qIEluamVjdGVkU2NyaXB0TW9kdWxlLmggaW4gSGVhZGVycyAqLywKKwkJCQlGRTI4N0QwMjI1
MkZCMkU4MDBENzIzRjkgLyogVmVyaWZpZXJTbG90VmlzaXRvci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQTUxM0U1QzcxODVGOTQ0NjAwN0U5NUFEIC8qIEluamVjdGVkU2NyaXB0U291cmNlLmggaW4g
SGVhZGVycyAqLywKIAkJCQk5OTU5RTkzMjFCRDE4Mjc5MDAxQUE0MTMgLyogaW5saW5lLWFuZC1t
aW5pZnktc3R5bGVzaGVldHMtYW5kLXNjcmlwdHMucHkgaW4gSGVhZGVycyAqLywKIAkJCQk3OTA1
QkI2OTFEMTIwNTBFMDAxOUZFNTcgLyogSW5saW5lQWNjZXNzLmggaW4gSGVhZGVycyAqLywKQEAg
LTEwMDM0LDYgKzEwMDU0LDcgQEAKIAkJCQlBNThDMDI0MjE4RTRBNDFBMDAwMzJCQzUgLyogSlND
b250ZXh0UHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MUUwRTE2RjVDRDAwQjM0
NDYwIC8qIEpTQ29udGV4dFJlZi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTVFQTcwRUUxOUY1QjVD
NDAwOThGNUVDIC8qIEpTQ29udGV4dFJlZkluc3BlY3RvclN1cHBvcnQuaCBpbiBIZWFkZXJzICov
LAorCQkJCTZCQ0NFQzA0MjVEMUZBMjcwMDBGMzkxRCAvKiBWZXJpZmllclNsb3RWaXNpdG9ySW5s
aW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTVEMkU2NjUxOTVFMTc0MDAwQTUxOEU3IC8qIEpT
Q29udGV4dFJlZkludGVybmFsLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDhDRDFEODEwOENGOTAy
MDA4MTYzQzYgLyogSlNDb250ZXh0UmVmUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkU3
NDk3RTYyMDkwMDFCMTAwMDM1NjVCIC8qIEpTQ1B0clRhZy5oIGluIEhlYWRlcnMgKi8sCkBAIC0x
MDE2NCw2ICsxMDE4NSw3IEBACiAJCQkJNzk1QUM2MTgyMEEyMzU1RTAwNTJDNzZDIC8qIEpTVmly
dHVhbE1hY2hpbmVQcml2YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0NBM0FFODE3REE0MUFF
MDA2NTM4QUYgLyogSlNXZWFrTWFwLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzQ4MkU5MzExNkE3
Q0FEMDAzQjA3MTIgLyogSlNXZWFrT2JqZWN0TWFwUmVmSW50ZXJuYWwuaCBpbiBIZWFkZXJzICov
LAorCQkJCUZFOTEyQjUxMjUzMTFBRDEwMEZBQkRERiAvKiBBYnN0cmFjdFNsb3RWaXNpdG9ySW5s
aW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc0ODJCOTMxMTY3MTE0NzAwM0IwNzEyIC8qIEpT
V2Vha09iamVjdE1hcFJlZlByaXZhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTUzOUJGQkIwMjJB
RDNDREMwMDIzRjRDMCAvKiBKU1dlYWtPYmplY3RSZWYuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
MEIyODZCMUVCOEU2Q0YwMDBFQjVEMiAvKiBKU1dlYWtQcml2YXRlLmggaW4gSGVhZGVycyAqLywK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL3drYnVpbHRpbnMvYnVpbHRpbnNf
Z2VuZXJhdGVfaW50ZXJuYWxzX3dyYXBwZXJfaGVhZGVyLnB5Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL3drYnVpbHRpbnMvYnVpbHRpbnNfZ2VuZXJhdGVfaW50
ZXJuYWxzX3dyYXBwZXJfaGVhZGVyLnB5CShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvU2NyaXB0cy93a2J1aWx0aW5zL2J1aWx0aW5zX2dlbmVyYXRlX2ludGVybmFs
c193cmFwcGVyX2hlYWRlci5weQkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKICMhL3Vz
ci9iaW4vZW52IHB5dGhvbgogIwotIyBDb3B5cmlnaHQgKGMpIDIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorIyBDb3B5cmlnaHQgKGMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAjCiAjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogIyBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTkzLDcg
KzkzLDcgQEAgY2xhc3MgQnVpbHRpbnNJbnRlcm5hbHNXcmFwcGVySGVhZGVyR2VuZQogCiAgICAg
ZGVmIGdlbmVyYXRlX21ldGhvZHMoc2VsZik6CiAgICAgICAgIHJldHVybiAiIiIKLSAgICB2b2lk
IHZpc2l0KEpTQzo6U2xvdFZpc2l0b3ImKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
PiB2b2lkIHZpc2l0KFZpc2l0b3ImKTsKICAgICB2b2lkIGluaXRpYWxpemUoSlNET01HbG9iYWxP
YmplY3QmKTsKICIiIgogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy93a2J1
aWx0aW5zL2J1aWx0aW5zX2dlbmVyYXRlX2ludGVybmFsc193cmFwcGVyX2ltcGxlbWVudGF0aW9u
LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL3drYnVpbHRp
bnMvYnVpbHRpbnNfZ2VuZXJhdGVfaW50ZXJuYWxzX3dyYXBwZXJfaW1wbGVtZW50YXRpb24ucHkJ
KHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL3drYnVp
bHRpbnMvYnVpbHRpbnNfZ2VuZXJhdGVfaW50ZXJuYWxzX3dyYXBwZXJfaW1wbGVtZW50YXRpb24u
cHkJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAjIS91c3IvYmluL2VudiBweXRob24K
ICMKLSMgQ29weXJpZ2h0IChjKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyMgQ29weXJpZ2h0IChjKSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogIwogIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMjAsMTMgKzEyMCwxNiBAQCBjbGFz
cyBCdWlsdGluc0ludGVybmFsc1dyYXBwZXJJbXBsZW1lbnRhCiAgICAgICAgIHJldHVybiAnXG4n
LmpvaW4obGluZXMpCiAKICAgICBkZWYgZ2VuZXJhdGVfdmlzaXRfbWV0aG9kKHNlbGYpOgotICAg
ICAgICBsaW5lcyA9IFsidm9pZCBKU0J1aWx0aW5JbnRlcm5hbEZ1bmN0aW9uczo6dmlzaXQoSlND
OjpTbG90VmlzaXRvciYgdmlzaXRvcikiLAorICAgICAgICBsaW5lcyA9IFsidGVtcGxhdGU8dHlw
ZW5hbWUgVmlzaXRvcj4iLAorICAgICAgICAgICAgICAgICAidm9pZCBKU0J1aWx0aW5JbnRlcm5h
bEZ1bmN0aW9uczo6dmlzaXQoVmlzaXRvciYgdmlzaXRvcikiLAogICAgICAgICAgICAgICAgICAi
eyJdCiAgICAgICAgIGZvciBvYmplY3QgaW4gc2VsZi5pbnRlcm5hbHM6CiAgICAgICAgICAgICB2
aXNpdCA9ICIgICAgJXMudmlzaXQodmlzaXRvcik7IiAlIHNlbGYubWVtYmVyX25hbWUob2JqZWN0
KQogICAgICAgICAgICAgbGluZXMuYXBwZW5kKEJ1aWx0aW5zR2VuZXJhdG9yLndyYXBfd2l0aF9n
dWFyZChvYmplY3QuYW5ub3RhdGlvbnMuZ2V0KCdjb25kaXRpb25hbCcpLCB2aXNpdCkpCiAgICAg
ICAgIGxpbmVzLmFwcGVuZCgiICAgIFVOVVNFRF9QQVJBTSh2aXNpdG9yKTsiKQogICAgICAgICBs
aW5lcy5hcHBlbmQoIn1cbiIpCisgICAgICAgIGxpbmVzLmFwcGVuZCgidGVtcGxhdGUgdm9pZCBK
U0J1aWx0aW5JbnRlcm5hbEZ1bmN0aW9uczo6dmlzaXQoQWJzdHJhY3RTbG90VmlzaXRvciYpOyIp
CisgICAgICAgIGxpbmVzLmFwcGVuZCgidGVtcGxhdGUgdm9pZCBKU0J1aWx0aW5JbnRlcm5hbEZ1
bmN0aW9uczo6dmlzaXQoU2xvdFZpc2l0b3ImKTtcbiIpCiAgICAgICAgIHJldHVybiAnXG4nLmpv
aW4obGluZXMpCiAKICAgICBkZWYgX2dlbmVyYXRlX2luaXRpYWxpemVfc3RhdGljX2dsb2JhbHMo
c2VsZik6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy93a2J1aWx0aW5zL2J1
aWx0aW5zX3RlbXBsYXRlcy5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
U2NyaXB0cy93a2J1aWx0aW5zL2J1aWx0aW5zX3RlbXBsYXRlcy5weQkocmV2aXNpb24gMjcyODMw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvd2tidWlsdGlucy9idWlsdGluc190
ZW1wbGF0ZXMucHkJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAjIS91c3IvYmluL2Vu
diBweXRob24KICMKLSMgQ29weXJpZ2h0IChjKSAyMDE0LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorIyBDb3B5cmlnaHQgKGMpIDIwMTQtMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAjIENvcHlyaWdodCAoQykgMjAxNSBDYW5vbiBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAjCiAjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMTg4LDcgKzE4OCw3IEBAIHB1YmxpYzoK
ICAgICBleHBsaWNpdCAke29iamVjdE5hbWV9QnVpbHRpbkZ1bmN0aW9ucyhKU0M6OlZNJiB2bSkg
OiBtX3ZtKHZtKSB7IH0KIAogICAgIHZvaWQgaW5pdChKU0M6OkpTR2xvYmFsT2JqZWN0Jik7Ci0g
ICAgdm9pZCB2aXNpdChKU0M6OlNsb3RWaXNpdG9yJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
VmlzaXRvcj4gdm9pZCB2aXNpdChWaXNpdG9yJik7CiAKIHB1YmxpYzoKICAgICBKU0M6OlZNJiBt
X3ZtOwpAQCAtMjA3LDEwICsyMDcsMTUgQEAgaW5saW5lIHZvaWQgJHtvYmplY3ROYW1lfUJ1aWx0
aW5GdW5jdGlvbgogI3VuZGVmIEVYUE9SVF9GVU5DVElPTgogfQogCi1pbmxpbmUgdm9pZCAke29i
amVjdE5hbWV9QnVpbHRpbkZ1bmN0aW9uczo6dmlzaXQoSlNDOjpTbG90VmlzaXRvciYgdmlzaXRv
cikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+CitpbmxpbmUgdm9pZCAke29iamVjdE5hbWV9
QnVpbHRpbkZ1bmN0aW9uczo6dmlzaXQoVmlzaXRvciYgdmlzaXRvcikKIHsKICNkZWZpbmUgVklT
SVRfRlVOQ1RJT04obmFtZSkgdmlzaXRvci5hcHBlbmQobV8jI25hbWUjI0Z1bmN0aW9uKTsKICAg
ICAke21hY3JvUHJlZml4fV9GT1JFQUNIXyR7b2JqZWN0TWFjcm99X0JVSUxUSU5fRlVOQ1RJT05f
TkFNRShWSVNJVF9GVU5DVElPTikKICN1bmRlZiBWSVNJVF9GVU5DVElPTgogfQorCit0ZW1wbGF0
ZSB2b2lkICR7b2JqZWN0TmFtZX1CdWlsdGluRnVuY3Rpb25zOjp2aXNpdChKU0M6OkFic3RyYWN0
U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgJHtvYmplY3ROYW1lfUJ1aWx0aW5GdW5jdGlv
bnM6OnZpc2l0KEpTQzo6U2xvdFZpc2l0b3ImKTsKKwogIiIiKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmNwcAkocmV2aXNpb24gMjcyODMwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIwIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtNzU3LDcgKzc1Nyw3IEBAIGJvb2wgQWNjZXNzQ2FzZTo6dmlzaXRXZWFrKFZN
JiB2bSkgY29uc3QKICAgICByZXR1cm4gaXNWYWxpZDsKIH0KIAotYm9vbCBBY2Nlc3NDYXNlOjpw
cm9wYWdhdGVUcmFuc2l0aW9ucyhTbG90VmlzaXRvciYgdmlzaXRvcikgY29uc3QKK2Jvb2wgQWNj
ZXNzQ2FzZTo6cHJvcGFnYXRlVHJhbnNpdGlvbnMoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRv
cikgY29uc3QKIHsKICAgICBib29sIHJlc3VsdCA9IHRydWU7CiAKQEAgLTc3Miw3ICs3NzIsNyBA
QCBib29sIEFjY2Vzc0Nhc2U6OnByb3BhZ2F0ZVRyYW5zaXRpb25zKFNsCiAgICAgc3dpdGNoICht
X3R5cGUpIHsKICAgICBjYXNlIFRyYW5zaXRpb246CiAgICAgY2FzZSBEZWxldGU6Ci0gICAgICAg
IGlmICh2aXNpdG9yLnZtKCkuaGVhcC5pc01hcmtlZChtX3N0cnVjdHVyZS0+cHJldmlvdXNJRCgp
KSkKKyAgICAgICAgaWYgKHZpc2l0b3IuaXNNYXJrZWQobV9zdHJ1Y3R1cmUtPnByZXZpb3VzSUQo
KSkpCiAgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKG1fc3RydWN0dXJlLmdl
dCgpKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgcmVzdWx0ID0gZmFsc2U7CkBAIC03ODQs
NyArNzg0LDcgQEAgYm9vbCBBY2Nlc3NDYXNlOjpwcm9wYWdhdGVUcmFuc2l0aW9ucyhTbAogICAg
IHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQgQWNjZXNzQ2FzZTo6dmlzaXRBZ2dyZWdhdGUoU2xv
dFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0Cit2b2lkIEFjY2Vzc0Nhc2U6OnZpc2l0QWdncmVnYXRl
KEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0CiB7CiAgICAgbV9pZGVudGlmaWVy
LnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0FjY2Vzc0Nhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIwIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjgw
LDkgKzI4MCw5IEBAIHByaXZhdGU6CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KICAg
ICB2b2lkIGZvckVhY2hEZXBlbmRlbnRDZWxsKFZNJiwgY29uc3QgRnVuY3RvciYpIGNvbnN0Owog
Ci0gICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYpIGNvbnN0OworICAgIHZvaWQg
dmlzaXRBZ2dyZWdhdGUoQWJzdHJhY3RTbG90VmlzaXRvciYpIGNvbnN0OwogICAgIGJvb2wgdmlz
aXRXZWFrKFZNJikgY29uc3Q7Ci0gICAgYm9vbCBwcm9wYWdhdGVUcmFuc2l0aW9ucyhTbG90Vmlz
aXRvciYpIGNvbnN0OworICAgIGJvb2wgcHJvcGFnYXRlVHJhbnNpdGlvbnMoQWJzdHJhY3RTbG90
VmlzaXRvciYpIGNvbnN0OwogCiAgICAgLy8gRklYTUU6IFRoaXMgb25seSBleGlzdHMgYmVjYXVz
ZSBvZiBob3cgQWNjZXNzQ2FzZSBwdXRzIHBvc3QtZ2VuZXJhdGlvbiB0aGluZ3MgaW50byBpdHNl
bGYuCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NjQ1
NgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5VmFsSW5mby5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5VmFsSW5mby5jcHAJ
KHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeVZh
bEluZm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMjAtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMyLDcgKzMyLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAK
ICNpZiBFTkFCTEUoSklUKQogCi12b2lkIEJ5VmFsSW5mbzo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZp
c2l0b3ImIHZpc2l0b3IpCit2b2lkIEJ5VmFsSW5mbzo6dmlzaXRBZ2dyZWdhdGUoQWJzdHJhY3RT
bG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBjYWNoZWRJZC52aXNpdEFnZ3JlZ2F0ZSh2aXNp
dG9yKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeVZhbEluZm8u
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnlWYWxJbmZv
LmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9C
eVZhbEluZm8uaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTItMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTItMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2MCw3ICsyNjAsNyBAQCBzdHJ1Y3QgQnlW
YWxJbmZvIHsKICAgICAgICAgdGhpcy0+c2VlbiA9IGZhbHNlOwogICAgIH0KIAotICAgIHZvaWQg
dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImKTsKKyAgICB2b2lkIHZpc2l0QWdncmVnYXRlKEFi
c3RyYWN0U2xvdFZpc2l0b3ImKTsKIAogICAgIENvZGVMb2NhdGlvbkp1bXA8SlNJbnRlcm5hbFB0
clRhZz4gbm90SW5kZXhKdW1wOwogICAgIENvZGVMb2NhdGlvbkp1bXA8SlNJbnRlcm5hbFB0clRh
Zz4gYmFkVHlwZUp1bXA7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2hl
Y2tQcml2YXRlQnJhbmRTdGF0dXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9DaGVja1ByaXZhdGVCcmFuZFN0YXR1cy5jcHAJKHJldmlzaW9uIDI3Mjgz
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DaGVja1ByaXZhdGVCcmFuZFN0
YXR1cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyOCwxMyArMjI4LDEzIEBAIENhY2hlYWJsZUlk
ZW50aWZpZXIgQ2hlY2tQcml2YXRlQnJhbmRTdGEKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi12
b2lkIENoZWNrUHJpdmF0ZUJyYW5kU3RhdHVzOjp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYg
dmlzaXRvcikKK3ZvaWQgQ2hlY2tQcml2YXRlQnJhbmRTdGF0dXM6OnZpc2l0QWdncmVnYXRlKEFi
c3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgZm9yIChDaGVja1ByaXZhdGVCcmFu
ZFZhcmlhbnQmIHZhcmlhbnQgOiBtX3ZhcmlhbnRzKQogICAgICAgICB2YXJpYW50LnZpc2l0QWdn
cmVnYXRlKHZpc2l0b3IpOwogfQogCi12b2lkIENoZWNrUHJpdmF0ZUJyYW5kU3RhdHVzOjptYXJr
SWZDaGVhcChTbG90VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgQ2hlY2tQcml2YXRlQnJhbmRTdGF0
dXM6Om1hcmtJZkNoZWFwKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgZm9y
IChDaGVja1ByaXZhdGVCcmFuZFZhcmlhbnQmIHZhcmlhbnQgOiBtX3ZhcmlhbnRzKQogICAgICAg
ICB2YXJpYW50Lm1hcmtJZkNoZWFwKHZpc2l0b3IpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0NoZWNrUHJpdmF0ZUJyYW5kU3RhdHVzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NoZWNrUHJpdmF0ZUJyYW5kU3RhdHVzLmgJKHJl
dmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DaGVja1By
aXZhdGVCcmFuZFN0YXR1cy5oCSh3b3JraW5nIGNvcHkpCkBAIC04Miw4ICs4Miw4IEBAIHB1Ymxp
YzoKICAgICAvLyBBdHRlbXB0cyB0byByZWR1Y2UgdGhlIHNldCBvZiB2YXJpYW50cyB0byBmaXQg
dGhlIGdpdmVuIHN0cnVjdHVyZSBzZXQuIFRoaXMgbWF5IGJlIGFwcHJveGltYXRlLgogICAgIHZv
aWQgZmlsdGVyKGNvbnN0IFN0cnVjdHVyZVNldCYpOwogCi0gICAgdm9pZCB2aXNpdEFnZ3JlZ2F0
ZShTbG90VmlzaXRvciYpOwotICAgIHZvaWQgbWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImKTsKKyAg
ICB2b2lkIHZpc2l0QWdncmVnYXRlKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKKyAgICB2b2lkIG1h
cmtJZkNoZWFwKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKICAgICBib29sIGZpbmFsaXplKFZNJik7
CiAKICAgICBib29sIGFwcGVuZFZhcmlhbnQoY29uc3QgQ2hlY2tQcml2YXRlQnJhbmRWYXJpYW50
Jik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2hlY2tQcml2YXRlQnJh
bmRWYXJpYW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQ2hlY2tQcml2YXRlQnJhbmRWYXJpYW50LmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NoZWNrUHJpdmF0ZUJyYW5kVmFyaWFudC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTUxLDcgKzUxLDcgQEAgYm9vbCBDaGVja1ByaXZhdGVCcmFuZFZh
cmlhbnQ6OmF0dGVtcHRUbwogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIENoZWNrUHJpdmF0
ZUJyYW5kVmFyaWFudDo6bWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIENo
ZWNrUHJpdmF0ZUJyYW5kVmFyaWFudDo6bWFya0lmQ2hlYXAoQWJzdHJhY3RTbG90VmlzaXRvciYg
dmlzaXRvcikKIHsKICAgICBtX3N0cnVjdHVyZVNldC5tYXJrSWZDaGVhcCh2aXNpdG9yKTsKIH0K
QEAgLTYzLDcgKzYzLDcgQEAgYm9vbCBDaGVja1ByaXZhdGVCcmFuZFZhcmlhbnQ6OmZpbmFsaXpl
KAogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIENoZWNrUHJpdmF0ZUJyYW5kVmFyaWFudDo6
dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIENoZWNrUHJpdmF0ZUJy
YW5kVmFyaWFudDo6dmlzaXRBZ2dyZWdhdGUoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikK
IHsKICAgICBtX2lkZW50aWZpZXIudmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7CiB9CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2hlY2tQcml2YXRlQnJhbmRWYXJpYW50LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NoZWNrUHJpdmF0
ZUJyYW5kVmFyaWFudC5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQ2hlY2tQcml2YXRlQnJhbmRWYXJpYW50LmgJKHdvcmtpbmcgY29weSkKQEAg
LTMyLDYgKzMyLDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKK2NsYXNzIEFic3RyYWN0U2xvdFZp
c2l0b3I7CiBjbGFzcyBDaGVja1ByaXZhdGVCcmFuZFN0YXR1czsKIAogY2xhc3MgQ2hlY2tQcml2
YXRlQnJhbmRWYXJpYW50IHsKQEAgLTQ2LDggKzQ3LDggQEAgcHVibGljOgogCiAgICAgYm9vbCBh
dHRlbXB0VG9NZXJnZShjb25zdCBDaGVja1ByaXZhdGVCcmFuZFZhcmlhbnQmIG90aGVyKTsKIAot
ICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImKTsKLSAgICB2b2lkIG1hcmtJZkNo
ZWFwKFNsb3RWaXNpdG9yJik7CisgICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShBYnN0cmFjdFNsb3RW
aXNpdG9yJik7CisgICAgdm9pZCBtYXJrSWZDaGVhcChBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAg
ICAgYm9vbCBmaW5hbGl6ZShWTSYpOwogCiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29u
c3Q7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNw
cAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Nv
ZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMDEsNyArMTAwMSw4IEBAIHNpemVfdCBD
b2RlQmxvY2s6OmVzdGltYXRlZFNpemUoSlNDZWxsKiAKICAgICByZXR1cm4gQmFzZTo6ZXN0aW1h
dGVkU2l6ZShjZWxsLCB2bSkgKyBleHRyYU1lbW9yeUFsbG9jYXRlZDsKIH0KIAotdm9pZCBDb2Rl
QmxvY2s6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikK
K3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIENvZGVCbG9jazo6dmlzaXRDaGlsZHJl
bkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIENvZGVCbG9jayog
dGhpc09iamVjdCA9IGpzQ2FzdDxDb2RlQmxvY2sqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JK
RUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC0xMDEwLDkgKzEwMTEsMTQgQEAg
dm9pZCBDb2RlQmxvY2s6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZQogICAgIHRoaXNPYmplY3Qt
PnZpc2l0Q2hpbGRyZW4odmlzaXRvcik7CiB9CiAKLXZvaWQgQ29kZUJsb2NrOjp2aXNpdENoaWxk
cmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorREVGSU5FX1ZJU0lUX0NISUxEUkVOKENvZGVCbG9j
ayk7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIENvZGVCbG9jazo6dmlzaXRD
aGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2Nr
ZXIobV9sb2NrKTsKKworICAgIG1fdmlzaXRDaGlsZHJlblNraXBwZWREdWVUb09sZEFnZSA9IGZh
bHNlOwogICAgIGlmIChDb2RlQmxvY2sqIG90aGVyQmxvY2sgPSBzcGVjaWFsT1NSRW50cnlCbG9j
a09yTnVsbCgpKQogICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKG90aGVyQmxvY2sp
OwogCkBAIC0xMDI5LDEzICsxMDM1LDIxIEBAIHZvaWQgQ29kZUJsb2NrOjp2aXNpdENoaWxkcmVu
KFNsb3RWaXNpdG8KICAgICBWTTo6U3BhY2VBbmRTZXQ6OnNldEZvcigqc3Vic3BhY2UoKSkuYWRk
KHRoaXMpOwogfQogCi1ib29sIENvZGVCbG9jazo6c2hvdWxkVmlzaXRTdHJvbmdseShjb25zdCBD
b25jdXJyZW50SlNMb2NrZXImIGxvY2tlcikKK2Jvb2wgQ29kZUJsb2NrOjpzaG91bGRWaXNpdFN0
cm9uZ2x5KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYgbG9ja2VyLCBBYnN0cmFjdFNsb3RWaXNp
dG9yJiB2aXNpdG9yKQogewogICAgIGlmIChPcHRpb25zOjpmb3JjZUNvZGVCbG9ja0xpdmVuZXNz
KCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgaWYgKHNob3VsZEpldHRpc29uRHVlVG9P
bGRBZ2UobG9ja2VyKSkKKyAgICBpZiAoc2hvdWxkSmV0dGlzb25EdWVUb09sZEFnZShsb2NrZXIs
IHZpc2l0b3IpKSB7CisgICAgICAgIGlmIChPcHRpb25zOjp2ZXJpZnlHQygpKQorICAgICAgICAg
ICAgbV92aXNpdENoaWxkcmVuU2tpcHBlZER1ZVRvT2xkQWdlID0gdHJ1ZTsKICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmIChtX3Zpc2l0Q2hpbGRyZW5Ta2lwcGVkRHVlVG9P
bGRBZ2UpIHsKKyAgICAgICAgQVNTRVJUKE9wdGlvbnM6OnZlcmlmeUdDKCkpOworICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQogCiAgICAgLy8gSW50ZXJwcmV0ZXIgYW5kIEJhc2VsaW5lIEpJ
VCBDb2RlQmxvY2tzIGRvbid0IG5lZWQgdG8gYmUgamV0dGlzb25lZCB3aGVuCiAgICAgLy8gdGhl
aXIgd2VhayByZWZlcmVuY2VzIGdvIHN0YWxlLiBTbyBpZiBhIGJhc2xpbmUgSklUIENvZGVCbG9j
ayBnZXRzCkBAIC0xMDg2LDkgKzExMDAsOSBAQCBzdGF0aWMgU2Vjb25kcyB0aW1lVG9MaXZlKEpJ
VFR5cGUgaml0VHlwCiAgICAgfQogfQogCi1ib29sIENvZGVCbG9jazo6c2hvdWxkSmV0dGlzb25E
dWVUb09sZEFnZShjb25zdCBDb25jdXJyZW50SlNMb2NrZXImKQorYm9vbCBDb2RlQmxvY2s6OnNo
b3VsZEpldHRpc29uRHVlVG9PbGRBZ2UoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgQWJzdHJh
Y3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKLSAgICBpZiAobV92bS0+aGVhcC5pc01hcmtlZCh0
aGlzKSkKKyAgICBpZiAodmlzaXRvci5pc01hcmtlZCh0aGlzKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCiAgICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OmZvcmNlQ29kZUJsb2NrVG9KZXR0aXNv
bkR1ZVRvT2xkQWdlKCkpKQpAQCAtMTEwMSwxMiArMTExNSwxMiBAQCBib29sIENvZGVCbG9jazo6
c2hvdWxkSmV0dGlzb25EdWVUb09sZEFnCiB9CiAKICNpZiBFTkFCTEUoREZHX0pJVCkKLXN0YXRp
YyBib29sIHNob3VsZE1hcmtUcmFuc2l0aW9uKFZNJiB2bSwgREZHOjpXZWFrUmVmZXJlbmNlVHJh
bnNpdGlvbiYgdHJhbnNpdGlvbikKK3N0YXRpYyBpbmxpbmUgYm9vbCBzaG91bGRNYXJrVHJhbnNp
dGlvbihBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBERkc6OldlYWtSZWZlcmVuY2VUcmFu
c2l0aW9uJiB0cmFuc2l0aW9uKQogewotICAgIGlmICh0cmFuc2l0aW9uLm1fY29kZU9yaWdpbiAm
JiAhdm0uaGVhcC5pc01hcmtlZCh0cmFuc2l0aW9uLm1fY29kZU9yaWdpbi5nZXQoKSkpCisgICAg
aWYgKHRyYW5zaXRpb24ubV9jb2RlT3JpZ2luICYmICF2aXNpdG9yLmlzTWFya2VkKHRyYW5zaXRp
b24ubV9jb2RlT3JpZ2luLmdldCgpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAotICAg
IGlmICghdm0uaGVhcC5pc01hcmtlZCh0cmFuc2l0aW9uLm1fZnJvbS5nZXQoKSkpCisgICAgaWYg
KCF2aXNpdG9yLmlzTWFya2VkKHRyYW5zaXRpb24ubV9mcm9tLmdldCgpKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIAogICAgIHJldHVybiB0cnVlOwpAQCAtMTEyMiw4ICsxMTM2LDkgQEAg
Qnl0ZWNvZGVJbmRleCBDb2RlQmxvY2s6OmJ5dGVjb2RlSW5kZXhGbwogfQogI2VuZGlmIC8vIEVO
QUJMRShERkdfSklUKQogCi12b2lkIENvZGVCbG9jazo6cHJvcGFnYXRlVHJhbnNpdGlvbnMoY29u
c3QgQ29uY3VycmVudEpTTG9ja2VyJiwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIENvZGVC
bG9jazo6cHJvcGFnYXRlVHJhbnNpdGlvbnMoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgQWJz
dHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKKyAgICBBYnN0cmFjdFNsb3RWaXNpdG9yOjpT
dXBwcmVzc0dDVmVyaWZpZXJTY29wZSBzdXBwcmVzc1Njb3BlKHZpc2l0b3IpOwogICAgIFZNJiB2
bSA9ICptX3ZtOwogCiAgICAgaWYgKGppdFR5cGUoKSA9PSBKSVRUeXBlOjpJbnRlcnByZXRlclRo
dW5rKSB7CkBAIC0xMTMzLDggKzExNDgsOSBAQCB2b2lkIENvZGVCbG9jazo6cHJvcGFnYXRlVHJh
bnNpdGlvbnMoY29uCiAgICAgICAgICAgICAgICAgU3RydWN0dXJlSUQgbmV3U3RydWN0dXJlSUQg
PSBtZXRhZGF0YS5tX25ld1N0cnVjdHVyZUlEOwogICAgICAgICAgICAgICAgIGlmICghb2xkU3Ry
dWN0dXJlSUQgfHwgIW5ld1N0cnVjdHVyZUlEKQogICAgICAgICAgICAgICAgICAgICByZXR1cm47
CisKICAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSA9IHZtLmhlYXAuc3Ry
dWN0dXJlSURUYWJsZSgpLmdldChvbGRTdHJ1Y3R1cmVJRCk7Ci0gICAgICAgICAgICAgICAgaWYg
KHZtLmhlYXAuaXNNYXJrZWQob2xkU3RydWN0dXJlKSkgeworICAgICAgICAgICAgICAgIGlmICh2
aXNpdG9yLmlzTWFya2VkKG9sZFN0cnVjdHVyZSkpIHsKICAgICAgICAgICAgICAgICAgICAgU3Ry
dWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSB2bS5oZWFwLnN0cnVjdHVyZUlEVGFibGUoKS5nZXQobmV3
U3RydWN0dXJlSUQpOwogICAgICAgICAgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmll
cmVkKG5ld1N0cnVjdHVyZSk7CiAgICAgICAgICAgICAgICAgfQpAQCAtMTE0OCwxMSArMTE2NCwx
MSBAQCB2b2lkIENvZGVCbG9jazo6cHJvcGFnYXRlVHJhbnNpdGlvbnMoY29uCiAKICAgICAgICAg
ICAgICAgICBKU0NlbGwqIHByb3BlcnR5ID0gbWV0YWRhdGEubV9wcm9wZXJ0eS5nZXQoKTsKICAg
ICAgICAgICAgICAgICBBU1NFUlQocHJvcGVydHkpOwotICAgICAgICAgICAgICAgIGlmICghdm0u
aGVhcC5pc01hcmtlZChwcm9wZXJ0eSkpCisgICAgICAgICAgICAgICAgaWYgKCF2aXNpdG9yLmlz
TWFya2VkKHByb3BlcnR5KSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAg
ICAgICAgICAgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUgPSB2bS5oZWFwLnN0cnVjdHVyZUlEVGFi
bGUoKS5nZXQob2xkU3RydWN0dXJlSUQpOwotICAgICAgICAgICAgICAgIGlmICh2bS5oZWFwLmlz
TWFya2VkKG9sZFN0cnVjdHVyZSkpIHsKKyAgICAgICAgICAgICAgICBpZiAodmlzaXRvci5pc01h
cmtlZChvbGRTdHJ1Y3R1cmUpKSB7CiAgICAgICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogbmV3
U3RydWN0dXJlID0gdm0uaGVhcC5zdHJ1Y3R1cmVJRFRhYmxlKCkuZ2V0KG5ld1N0cnVjdHVyZUlE
KTsKICAgICAgICAgICAgICAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZChuZXdTdHJ1
Y3R1cmUpOwogICAgICAgICAgICAgICAgIH0KQEAgLTExNzAsNyArMTE4Niw3IEBAIHZvaWQgQ29k
ZUJsb2NrOjpwcm9wYWdhdGVUcmFuc2l0aW9ucyhjb24KICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuOwogCiAgICAgICAgICAgICAgICAgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUgPSB2bS5oZWFw
LnN0cnVjdHVyZUlEVGFibGUoKS5nZXQob2xkU3RydWN0dXJlSUQpOwotICAgICAgICAgICAgICAg
IGlmICh2bS5oZWFwLmlzTWFya2VkKG9sZFN0cnVjdHVyZSkpIHsKKyAgICAgICAgICAgICAgICBp
ZiAodmlzaXRvci5pc01hcmtlZChvbGRTdHJ1Y3R1cmUpKSB7CiAgICAgICAgICAgICAgICAgICAg
IFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0gdm0uaGVhcC5zdHJ1Y3R1cmVJRFRhYmxlKCkuZ2V0
KG5ld1N0cnVjdHVyZUlEKTsKICAgICAgICAgICAgICAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJh
cnJpZXJlZChuZXdTdHJ1Y3R1cmUpOwogICAgICAgICAgICAgICAgIH0KQEAgLTExOTcsNyArMTIx
Myw3IEBAIHZvaWQgQ29kZUJsb2NrOjpwcm9wYWdhdGVUcmFuc2l0aW9ucyhjb24KICAgICAgICAg
ICAgIHZtLmdldFN0cnVjdHVyZShzdHJ1Y3R1cmVJRCktPm1hcmtJZkNoZWFwKHZpc2l0b3IpOwog
CiAgICAgICAgIGZvciAoYXV0byYgdHJhbnNpdGlvbiA6IGRmZ0NvbW1vbi0+dHJhbnNpdGlvbnMp
IHsKLSAgICAgICAgICAgIGlmIChzaG91bGRNYXJrVHJhbnNpdGlvbih2bSwgdHJhbnNpdGlvbikp
IHsKKyAgICAgICAgICAgIGlmIChzaG91bGRNYXJrVHJhbnNpdGlvbih2aXNpdG9yLCB0cmFuc2l0
aW9uKSkgewogICAgICAgICAgICAgICAgIC8vIElmIHRoZSBmb2xsb3dpbmcgdGhyZWUgdGhpbmdz
IGFyZSBsaXZlLCB0aGVuIHRoZSB0YXJnZXQgb2YgdGhlCiAgICAgICAgICAgICAgICAgLy8gdHJh
bnNpdGlvbiBpcyBhbHNvIGxpdmU6CiAgICAgICAgICAgICAgICAgLy8KQEAgLTEyMjQsMTMgKzEy
NDAsMTMgQEAgdm9pZCBDb2RlQmxvY2s6OnByb3BhZ2F0ZVRyYW5zaXRpb25zKGNvbgogI2VuZGlm
IC8vIEVOQUJMRShERkdfSklUKQogfQogCi12b2lkIENvZGVCbG9jazo6ZGV0ZXJtaW5lTGl2ZW5l
c3MoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2b2lk
IENvZGVCbG9jazo6ZGV0ZXJtaW5lTGl2ZW5lc3MoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwg
QWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBVTlVTRURfUEFSQU0odmlzaXRv
cik7CiAgICAgCiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAgVk0mIHZtID0gKm1fdm07Ci0gICAg
aWYgKHZtLmhlYXAuaXNNYXJrZWQodGhpcykpCisgICAgaWYgKHZpc2l0b3IuaXNNYXJrZWQodGhp
cykpCiAgICAgICAgIHJldHVybjsKICAgICAKICAgICAvLyBJbiByYXJlIGFuZCB3ZWlyZCBjYXNl
cywgdGhpcyBjb3VsZCBiZSBjYWxsZWQgb24gYSBiYXNlbGluZSBDb2RlQmxvY2suIE9uZSB0aGF0
IEkgZm91bmQgd2FzCkBAIC0xMjQ3LDcgKzEyNjMsNyBAQCB2b2lkIENvZGVCbG9jazo6ZGV0ZXJt
aW5lTGl2ZW5lc3MoY29uc3QgCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRmZ0NvbW1v
bi0+d2Vha1JlZmVyZW5jZXMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgSlNDZWxsKiByZWZlcmVu
Y2UgPSBkZmdDb21tb24tPndlYWtSZWZlcmVuY2VzW2ldLmdldCgpOwogICAgICAgICBBU1NFUlQo
IWpzRHluYW1pY0Nhc3Q8Q29kZUJsb2NrKj4odm0sIHJlZmVyZW5jZSkpOwotICAgICAgICBpZiAo
IXZtLmhlYXAuaXNNYXJrZWQocmVmZXJlbmNlKSkgeworICAgICAgICBpZiAoIXZpc2l0b3IuaXNN
YXJrZWQocmVmZXJlbmNlKSkgewogICAgICAgICAgICAgYWxsQXJlTGl2ZVNvRmFyID0gZmFsc2U7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtMTI1NSw3ICsxMjcxLDcgQEAgdm9p
ZCBDb2RlQmxvY2s6OmRldGVybWluZUxpdmVuZXNzKGNvbnN0IAogICAgIGlmIChhbGxBcmVMaXZl
U29GYXIpIHsKICAgICAgICAgZm9yIChTdHJ1Y3R1cmVJRCBzdHJ1Y3R1cmVJRCA6IGRmZ0NvbW1v
bi0+d2Vha1N0cnVjdHVyZVJlZmVyZW5jZXMpIHsKICAgICAgICAgICAgIFN0cnVjdHVyZSogc3Ry
dWN0dXJlID0gdm0uZ2V0U3RydWN0dXJlKHN0cnVjdHVyZUlEKTsKLSAgICAgICAgICAgIGlmICgh
dm0uaGVhcC5pc01hcmtlZChzdHJ1Y3R1cmUpKSB7CisgICAgICAgICAgICBpZiAoIXZpc2l0b3Iu
aXNNYXJrZWQoc3RydWN0dXJlKSkgewogICAgICAgICAgICAgICAgIGFsbEFyZUxpdmVTb0ZhciA9
IGZhbHNlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQpAQCAtMTYxNiw2
ICsxNjMyLDcgQEAgdm9pZCBDb2RlQmxvY2s6OmZpbmFsaXplVW5jb25kaXRpb25hbGx5KAogICAg
IHVwZGF0ZUFjdGl2aXR5KCk7CiAKICAgICBWTTo6U3BhY2VBbmRTZXQ6OnNldEZvcigqc3Vic3Bh
Y2UoKSkucmVtb3ZlKHRoaXMpOworICAgIG1fdmlzaXRDaGlsZHJlblNraXBwZWREdWVUb09sZEFn
ZSA9IGZhbHNlOwogfQogCiB2b2lkIENvZGVCbG9jazo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCkBA
IC0xODA4LDcgKzE4MjUsOCBAQCB2b2lkIENvZGVCbG9jazo6cmVzZXRKSVREYXRhKCkKIH0KICNl
bmRpZgogCi12b2lkIENvZGVCbG9jazo6dmlzaXRPU1JFeGl0VGFyZ2V0cyhjb25zdCBDb25jdXJy
ZW50SlNMb2NrZXImLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZp
c2l0b3I+Cit2b2lkIENvZGVCbG9jazo6dmlzaXRPU1JFeGl0VGFyZ2V0cyhjb25zdCBDb25jdXJy
ZW50SlNMb2NrZXImLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIC8vIFdlIHN0cm9uZ2x5IHZp
c2l0IE9TUiBleGl0cyB0YXJnZXRzIGJlY2F1c2Ugd2UgZG9uJ3Qgd2FudCB0byBkZWFsIHdpdGgK
ICAgICAvLyB0aGUgY29tcGxleGl0eSBvZiBnZW5lcmF0aW5nIGFuIGV4aXQgdGFyZ2V0IENvZGVC
bG9jayBvbiBkZW1hbmQgYW5kCkBAIC0xODI4LDcgKzE4NDYsOCBAQCB2b2lkIENvZGVCbG9jazo6
dmlzaXRPU1JFeGl0VGFyZ2V0cyhjb25zCiAjZW5kaWYKIH0KIAotdm9pZCBDb2RlQmxvY2s6OnN0
cm9uZ2x5VmlzaXRTdHJvbmdSZWZlcmVuY2VzKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYgbG9j
a2VyLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2
b2lkIENvZGVCbG9jazo6c3Ryb25nbHlWaXNpdFN0cm9uZ1JlZmVyZW5jZXMoY29uc3QgQ29uY3Vy
cmVudEpTTG9ja2VyJiBsb2NrZXIsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgVU5VU0VEX1BB
UkFNKGxvY2tlcik7CiAgICAgCkBAIC0xODY0LDcgKzE4ODMsOCBAQCB2b2lkIENvZGVCbG9jazo6
c3Ryb25nbHlWaXNpdFN0cm9uZ1JlZmVyCiAjZW5kaWYKIH0KIAotdm9pZCBDb2RlQmxvY2s6OnN0
cm9uZ2x5VmlzaXRXZWFrUmVmZXJlbmNlcyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBTbG90
VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIENvZGVC
bG9jazo6c3Ryb25nbHlWaXNpdFdlYWtSZWZlcmVuY2VzKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tl
ciYsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHZpc2l0b3IpOwogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShyZXZpc2lv
biAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4
LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDA4LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChD
KSAyMDA4IENhbWVyb24gWndhcmljaCA8Y3d6d2FyaWNoQHV3YXRlcmxvby5jYT4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKQEAgLTIwMSwxMCArMjAxLDEwIEBAIHB1YmxpYzoKICAgICAvLyBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIzNjc3CiAgICAgQ29kZUJsb2NrKiBiYXNl
bGluZVZlcnNpb24oKTsKIAorICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CisKICAgICBzdGF0
aWMgc2l6ZV90IGVzdGltYXRlZFNpemUoSlNDZWxsKiwgVk0mKTsKLSAgICBzdGF0aWMgdm9pZCB2
aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CiAgICAgc3RhdGljIHZvaWQgZGVz
dHJveShKU0NlbGwqKTsKLSAgICB2b2lkIHZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKICAg
ICB2b2lkIGZpbmFsaXplVW5jb25kaXRpb25hbGx5KFZNJik7CiAKICAgICB2b2lkIG5vdGlmeUxl
eGljYWxCaW5kaW5nVXBkYXRlKCk7CkBAIC05NDMsNiArOTQzLDggQEAgcHJpdmF0ZToKICAgICBm
cmllbmQgY2xhc3MgQ29kZUJsb2NrU2V0OwogICAgIGZyaWVuZCBjbGFzcyBFeGVjdXRhYmxlVG9D
b2RlQmxvY2tFZGdlOwogCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gQUxXQVlTX0lO
TElORSB2b2lkIHZpc2l0Q2hpbGRyZW4oVmlzaXRvciYpOworCiAgICAgQnl0ZWNvZGVMaXZlbmVz
c0FuYWx5c2lzJiBsaXZlbmVzc0FuYWx5c2lzU2xvdygpOwogICAgIAogICAgIENvZGVCbG9jayog
c3BlY2lhbE9TUkVudHJ5QmxvY2tPck51bGwoKTsKQEAgLTk2MywxNiArOTY1LDE2IEBAIHByaXZh
dGU6CiAgICAgICAgIG1fY29uc3RhbnRSZWdpc3RlcnNbcmVnLnRvQ29uc3RhbnRJbmRleCgpXS5z
ZXQoKm1fdm0sIHRoaXMsIHZhbHVlKTsKICAgICB9CiAKLSAgICBib29sIHNob3VsZFZpc2l0U3Ry
b25nbHkoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJik7CisgICAgYm9vbCBzaG91bGRWaXNpdFN0
cm9uZ2x5KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIEFic3RyYWN0U2xvdFZpc2l0b3ImKTsK
ICAgICBib29sIHNob3VsZEpldHRpc29uRHVlVG9XZWFrUmVmZXJlbmNlKFZNJik7Ci0gICAgYm9v
bCBzaG91bGRKZXR0aXNvbkR1ZVRvT2xkQWdlKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYpOwor
ICAgIGJvb2wgc2hvdWxkSmV0dGlzb25EdWVUb09sZEFnZShjb25zdCBDb25jdXJyZW50SlNMb2Nr
ZXImLCBBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAgICAgCi0gICAgdm9pZCBwcm9wYWdhdGVUcmFu
c2l0aW9ucyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBTbG90VmlzaXRvciYpOwotICAgIHZv
aWQgZGV0ZXJtaW5lTGl2ZW5lc3MoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgU2xvdFZpc2l0
b3ImKTsKKyAgICB2b2lkIHByb3BhZ2F0ZVRyYW5zaXRpb25zKGNvbnN0IENvbmN1cnJlbnRKU0xv
Y2tlciYsIEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKKyAgICB2b2lkIGRldGVybWluZUxpdmVuZXNz
KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKICAgICAg
ICAgCi0gICAgdm9pZCBzdHJvbmdseVZpc2l0U3Ryb25nUmVmZXJlbmNlcyhjb25zdCBDb25jdXJy
ZW50SlNMb2NrZXImLCBTbG90VmlzaXRvciYpOwotICAgIHZvaWQgc3Ryb25nbHlWaXNpdFdlYWtS
ZWZlcmVuY2VzKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIFNsb3RWaXNpdG9yJik7Ci0gICAg
dm9pZCB2aXNpdE9TUkV4aXRUYXJnZXRzKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIFNsb3RW
aXNpdG9yJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCBzdHJvbmdseVZp
c2l0U3Ryb25nUmVmZXJlbmNlcyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBWaXNpdG9yJik7
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCBzdHJvbmdseVZpc2l0V2Vha1Jl
ZmVyZW5jZXMoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgVmlzaXRvciYpOworICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgdmlzaXRPU1JFeGl0VGFyZ2V0cyhjb25zdCBDb25j
dXJyZW50SlNMb2NrZXImLCBWaXNpdG9yJik7CiAKICAgICB1bnNpZ25lZCBudW1iZXJPZk5vbkFy
Z3VtZW50VmFsdWVQcm9maWxlcygpIHsgcmV0dXJuIG1fbnVtYmVyT2ZOb25Bcmd1bWVudFZhbHVl
UHJvZmlsZXM7IH0KICAgICB1bnNpZ25lZCB0b3RhbE51bWJlck9mVmFsdWVQcm9maWxlcygpIHsg
cmV0dXJuIG51bWJlck9mQXJndW1lbnRWYWx1ZVByb2ZpbGVzKCkgKyBudW1iZXJPZk5vbkFyZ3Vt
ZW50VmFsdWVQcm9maWxlcygpOyB9CkBAIC0xMDExLDYgKzEwMTMsNyBAQCBwcml2YXRlOgogICAg
IHVuc2lnbmVkIG1fYnl0ZWNvZGVDb3N0IHsgMCB9OwogICAgIFZpcnR1YWxSZWdpc3RlciBtX3Nj
b3BlUmVnaXN0ZXI7CiAgICAgbXV0YWJsZSBDb2RlQmxvY2tIYXNoIG1faGFzaDsKKyAgICBib29s
IG1fdmlzaXRDaGlsZHJlblNraXBwZWREdWVUb09sZEFnZSB7IGZhbHNlIH07CiAKICAgICBXcml0
ZUJhcnJpZXI8VW5saW5rZWRDb2RlQmxvY2s+IG1fdW5saW5rZWRDb2RlOwogICAgIFdyaXRlQmFy
cmllcjxTY3JpcHRFeGVjdXRhYmxlPiBtX293bmVyRXhlY3V0YWJsZTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9EZWxldGVCeUlkVmFyaWFudC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0RlbGV0ZUJ5SWRWYXJpYW50LmNwcAko
cmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0RlbGV0
ZUJ5SWRWYXJpYW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDIwLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC04OCwxMiArODgsMTIgQEAgYm9vbCBEZWxl
dGVCeUlkVmFyaWFudDo6d3JpdGVzU3RydWN0dXJlcwogICAgIHJldHVybiAhIW5ld1N0cnVjdHVy
ZSgpOwogfQogCi12b2lkIERlbGV0ZUJ5SWRWYXJpYW50Ojp2aXNpdEFnZ3JlZ2F0ZShTbG90Vmlz
aXRvciYgdmlzaXRvcikKK3ZvaWQgRGVsZXRlQnlJZFZhcmlhbnQ6OnZpc2l0QWdncmVnYXRlKEFi
c3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgbV9pZGVudGlmaWVyLnZpc2l0QWdn
cmVnYXRlKHZpc2l0b3IpOwogfQogCi12b2lkIERlbGV0ZUJ5SWRWYXJpYW50OjptYXJrSWZDaGVh
cChTbG90VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgRGVsZXRlQnlJZFZhcmlhbnQ6Om1hcmtJZkNo
ZWFwKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgaWYgKG1fb2xkU3RydWN0
dXJlKQogICAgICAgICBtX29sZFN0cnVjdHVyZS0+bWFya0lmQ2hlYXAodmlzaXRvcik7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRGVsZXRlQnlJZFZhcmlhbnQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRGVsZXRlQnlJZFZhcmlh
bnQuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0RlbGV0ZUJ5SWRWYXJpYW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAyMC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjEsOCArNjEsOCBAQCBwdWJsaWM6
CiAKICAgICBib29sIGF0dGVtcHRUb01lcmdlKGNvbnN0IERlbGV0ZUJ5SWRWYXJpYW50JiBvdGhl
cik7CiAKLSAgICB2b2lkIHZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJik7Ci0gICAgdm9pZCBt
YXJrSWZDaGVhcChTbG90VmlzaXRvciYpOworICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoQWJzdHJh
Y3RTbG90VmlzaXRvciYpOworICAgIHZvaWQgbWFya0lmQ2hlYXAoQWJzdHJhY3RTbG90VmlzaXRv
ciYpOwogICAgIGJvb2wgZmluYWxpemUoVk0mKTsKIAogICAgIHZvaWQgZHVtcChQcmludFN0cmVh
bSYpIGNvbnN0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0RlbGV0ZUJ5
U3RhdHVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
RGVsZXRlQnlTdGF0dXMuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvRGVsZXRlQnlTdGF0dXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI1NCwxMyAr
MjU0LDEzIEBAIENhY2hlYWJsZUlkZW50aWZpZXIgRGVsZXRlQnlTdGF0dXM6OnNpbmcKICAgICBy
ZXR1cm4gcmVzdWx0OwogfQogCi12b2lkIERlbGV0ZUJ5U3RhdHVzOjp2aXNpdEFnZ3JlZ2F0ZShT
bG90VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgRGVsZXRlQnlTdGF0dXM6OnZpc2l0QWdncmVnYXRl
KEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgZm9yIChEZWxldGVCeUlkVmFy
aWFudCYgdmFyaWFudCA6IG1fdmFyaWFudHMpCiAgICAgICAgIHZhcmlhbnQudmlzaXRBZ2dyZWdh
dGUodmlzaXRvcik7CiB9CiAKLXZvaWQgRGVsZXRlQnlTdGF0dXM6Om1hcmtJZkNoZWFwKFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQordm9pZCBEZWxldGVCeVN0YXR1czo6bWFya0lmQ2hlYXAoQWJzdHJh
Y3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBmb3IgKERlbGV0ZUJ5SWRWYXJpYW50JiB2
YXJpYW50IDogbV92YXJpYW50cykKICAgICAgICAgdmFyaWFudC5tYXJrSWZDaGVhcCh2aXNpdG9y
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9EZWxldGVCeVN0YXR1cy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9EZWxldGVCeVN0
YXR1cy5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvRGVsZXRlQnlTdGF0dXMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDIwLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC04MSw4ICs4MSw4IEBAIHB1YmxpYzoK
ICAgICAvLyBBdHRlbXB0cyB0byByZWR1Y2UgdGhlIHNldCBvZiB2YXJpYW50cyB0byBmaXQgdGhl
IGdpdmVuIHN0cnVjdHVyZSBzZXQuIFRoaXMgbWF5IGJlIGFwcHJveGltYXRlLgogICAgIHZvaWQg
ZmlsdGVyKGNvbnN0IFN0cnVjdHVyZVNldCYpOwogCi0gICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShT
bG90VmlzaXRvciYpOwotICAgIHZvaWQgbWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImKTsKKyAgICB2
b2lkIHZpc2l0QWdncmVnYXRlKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKKyAgICB2b2lkIG1hcmtJ
ZkNoZWFwKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKICAgICBib29sIGZpbmFsaXplKFZNJik7CiAK
ICAgICBib29sIGFwcGVuZFZhcmlhbnQoY29uc3QgRGVsZXRlQnlJZFZhcmlhbnQmKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9EaXJlY3RFdmFsQ29kZUNhY2hlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRGlyZWN0RXZhbENv
ZGVDYWNoZS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9EaXJlY3RFdmFsQ29kZUNhY2hlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00NSw3ICs0NSw4
IEBAIHZvaWQgRGlyZWN0RXZhbENvZGVDYWNoZTo6Y2xlYXIoKQogICAgIG1fY2FjaGVNYXAuY2xl
YXIoKTsKIH0KIAotdm9pZCBEaXJlY3RFdmFsQ29kZUNhY2hlOjp2aXNpdEFnZ3JlZ2F0ZShTbG90
VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIERpcmVj
dEV2YWxDb2RlQ2FjaGU6OnZpc2l0QWdncmVnYXRlKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAg
TG9ja0hvbGRlciBsb2NrZXIobV9sb2NrKTsKICAgICBFdmFsQ2FjaGVNYXA6Oml0ZXJhdG9yIGVu
ZCA9IG1fY2FjaGVNYXAuZW5kKCk7CkBAIC01Myw1ICs1NCw3IEBAIHZvaWQgRGlyZWN0RXZhbENv
ZGVDYWNoZTo6dmlzaXRBZ2dyZWdhdGUKICAgICAgICAgdmlzaXRvci5hcHBlbmQocHRyLT52YWx1
ZSk7CiB9CiAKLX0gLy8gbmFtZXNwYWNlIEpTQwordGVtcGxhdGUgdm9pZCBEaXJlY3RFdmFsQ29k
ZUNhY2hlOjp2aXNpdEFnZ3JlZ2F0ZShBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2
b2lkIERpcmVjdEV2YWxDb2RlQ2FjaGU6OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJik7CiAK
K30gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0RpcmVjdEV2YWxDb2RlQ2FjaGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvRGlyZWN0RXZhbENvZGVDYWNoZS5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRGlyZWN0RXZhbENvZGVDYWNoZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOC0yMDE5
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0y
MDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtOTcsNyArOTcsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBi
b29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBtX2NhY2hlTWFwLmlzRW1wdHkoKTsgfQogCi0g
ICAgICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImKTsKKyAgICAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCB2aXNpdEFnZ3JlZ2F0ZShWaXNpdG9yJik7CiAKICAg
ICAgICAgdm9pZCBjbGVhcigpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UuY3BwCShyZXZp
c2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhlY3V0YWJs
ZVRvQ29kZUJsb2NrRWRnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxOC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTMsNyArNTMsOCBAQCB2b2lkIEV4
ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2U6OmZpbmlzaENyCiAgICAgQVNTRVJUKCFpc0FjdGl2ZSgp
KTsKIH0KIAotdm9pZCBFeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlOjp2aXNpdENoaWxkcmVuKEpT
Q2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNp
dG9yPgordm9pZCBFeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlOjp2aXNpdENoaWxkcmVuSW1wbChK
U0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgVk0mIHZtID0gdmlzaXRvci52
bSgpOwogICAgIEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UqIGVkZ2UgPSBqc0Nhc3Q8RXhlY3V0
YWJsZVRvQ29kZUJsb2NrRWRnZSo+KGNlbGwpOwpAQCAtNjEsNyArNjIsNyBAQCB2b2lkIEV4ZWN1
dGFibGVUb0NvZGVCbG9ja0VkZ2U6OnZpc2l0Q2hpCiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbihj
ZWxsLCB2aXNpdG9yKTsKIAogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gZWRnZS0+bV9jb2Rl
QmxvY2suZ2V0KCk7Ci0gICAgCisKICAgICAvLyBJdCdzIHBvc3NpYmxlIGZvciBzb21lb25lIHRv
IGhvbGQgYSBwb2ludGVyIHRvIHRoZSBlZGdlIGFmdGVyIHRoZSBlZGdlIGhhcyBjbGVhcmVkIGl0
cyB3ZWFrCiAgICAgLy8gcmVmZXJlbmNlIHRvIHRoZSBjb2RlQmxvY2suIEluIGEgY29uc2VydmF0
aXZlIEdDIGxpa2Ugb3VycywgdGhhdCBjb3VsZCBoYXBwZW4gYXQgcmFuZG9tIGZvcgogICAgIC8v
IG5vIGdvb2QgcmVhc29uIGFuZCBpdCdzIFRvdGFsbHkgT0sgKFRNKS4gU2VlIGZpbmFsaXplVW5j
b25kaXRpb25hbGx5KCkgZm9yIHdoZXJlIHdlIGNsZWFyCkBAIC03NSwxMSArNzYsMTEgQEAgdm9p
ZCBFeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlOjp2aXNpdENoaQogICAgIH0KICAgICAKICAgICBD
b25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrKTsKLSAgICAKLSAgICBp
ZiAoY29kZUJsb2NrLT5zaG91bGRWaXNpdFN0cm9uZ2x5KGxvY2tlcikpCisKKyAgICBpZiAoY29k
ZUJsb2NrLT5zaG91bGRWaXNpdFN0cm9uZ2x5KGxvY2tlciwgdmlzaXRvcikpCiAgICAgICAgIHZp
c2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQoY29kZUJsb2NrKTsKICAgICAKLSAgICBpZiAoIXZtLmhl
YXAuaXNNYXJrZWQoY29kZUJsb2NrKSkKKyAgICBpZiAoIXZpc2l0b3IuaXNNYXJrZWQoY29kZUJs
b2NrKSkKICAgICAgICAgdm0uZXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZXNXaXRoRmluYWxpemVy
cy5hZGQoZWRnZSk7CiAgICAgCiAgICAgaWYgKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChjb2Rl
QmxvY2stPmppdFR5cGUoKSkpIHsKQEAgLTExNyw3ICsxMTgsOSBAQCB2b2lkIEV4ZWN1dGFibGVU
b0NvZGVCbG9ja0VkZ2U6OnZpc2l0Q2hpCiAgICAgZWRnZS0+cnVuQ29uc3RyYWludChsb2NrZXIs
IHZtLCB2aXNpdG9yKTsKIH0KIAotdm9pZCBFeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlOjp2aXNp
dE91dHB1dENvbnN0cmFpbnRzKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCitE
RUZJTkVfVklTSVRfQ0hJTERSRU4oRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZSk7CisKK3ZvaWQg
RXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZTo6dmlzaXRPdXRwdXRDb25zdHJhaW50cyhKU0NlbGwq
IGNlbGwsIEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgVk0mIHZtID0gdmlz
aXRvci52bSgpOwogICAgIEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UqIGVkZ2UgPSBqc0Nhc3Q8
RXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZSo+KGNlbGwpOwpAQCAtMTg2LDE0ICsxODksMTQgQEAg
RXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZTo6RXhlY3V0YWJsZVRvQwogewogfQogCi12b2lkIEV4
ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2U6OnJ1bkNvbnN0cmFpbnQoY29uc3QgQ29uY3VycmVudEpT
TG9ja2VyJiBsb2NrZXIsIFZNJiB2bSwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIEV4ZWN1
dGFibGVUb0NvZGVCbG9ja0VkZ2U6OnJ1bkNvbnN0cmFpbnQoY29uc3QgQ29uY3VycmVudEpTTG9j
a2VyJiBsb2NrZXIsIFZNJiB2bSwgQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAg
ICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IG1fY29kZUJsb2NrLmdldCgpOwogICAgIAogICAgIGNv
ZGVCbG9jay0+cHJvcGFnYXRlVHJhbnNpdGlvbnMobG9ja2VyLCB2aXNpdG9yKTsKICAgICBjb2Rl
QmxvY2stPmRldGVybWluZUxpdmVuZXNzKGxvY2tlciwgdmlzaXRvcik7Ci0gICAgCi0gICAgaWYg
KHZtLmhlYXAuaXNNYXJrZWQoY29kZUJsb2NrKSkKKworICAgIGlmICh2aXNpdG9yLmlzTWFya2Vk
KGNvZGVCbG9jaykpCiAgICAgICAgIHZtLmV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2VzV2l0aENv
bnN0cmFpbnRzLnJlbW92ZSh0aGlzKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0V4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZS5oCShy
ZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhlY3V0
YWJsZVRvQ29kZUJsb2NrRWRnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxOC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTMsOSArNTMsOSBAQCBw
dWJsaWM6CiAgICAgREVDTEFSRV9JTkZPOwogCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2soKSBj
b25zdCB7IHJldHVybiBtX2NvZGVCbG9jay5nZXQoKTsgfQotICAgIAotICAgIHN0YXRpYyB2b2lk
IHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKLSAgICBzdGF0aWMgdm9pZCB2
aXNpdE91dHB1dENvbnN0cmFpbnRzKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisKKyAgICBERUNM
QVJFX1ZJU0lUX0NISUxEUkVOOworICAgIHN0YXRpYyB2b2lkIHZpc2l0T3V0cHV0Q29uc3RyYWlu
dHMoSlNDZWxsKiwgQWJzdHJhY3RTbG90VmlzaXRvciYpOwogICAgIHZvaWQgZmluYWxpemVVbmNv
bmRpdGlvbmFsbHkoVk0mKTsKICAgICAKICAgICBzdGF0aWMgQ29kZUJsb2NrKiB1bndyYXAoRXhl
Y3V0YWJsZVRvQ29kZUJsb2NrRWRnZSogZWRnZSkKQEAgLTgxLDkgKzgxLDkgQEAgcHJpdmF0ZToK
ICAgICB2b2lkIGFjdGl2YXRlKCk7CiAgICAgdm9pZCBkZWFjdGl2YXRlKCk7CiAgICAgYm9vbCBp
c0FjdGl2ZSgpIGNvbnN0OwotICAgIAotICAgIHZvaWQgcnVuQ29uc3RyYWludChjb25zdCBDb25j
dXJyZW50SlNMb2NrZXImLCBWTSYsIFNsb3RWaXNpdG9yJik7Ci0gICAgCisKKyAgICB2b2lkIHJ1
bkNvbnN0cmFpbnQoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgVk0mLCBBYnN0cmFjdFNsb3RW
aXNpdG9yJik7CisKICAgICBXcml0ZUJhcnJpZXI8Q29kZUJsb2NrPiBtX2NvZGVCbG9jazsKIH07
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkVmFyaWFudC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRW
YXJpYW50LmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0dldEJ5SWRWYXJpYW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE1NiwxMiArMTU2
LDEyIEBAIGJvb2wgR2V0QnlJZFZhcmlhbnQ6OmF0dGVtcHRUb01lcmdlKGNvbnMKICAgICByZXR1
cm4gdHJ1ZTsKIH0KIAotdm9pZCBHZXRCeUlkVmFyaWFudDo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZp
c2l0b3ImIHZpc2l0b3IpCit2b2lkIEdldEJ5SWRWYXJpYW50Ojp2aXNpdEFnZ3JlZ2F0ZShBYnN0
cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIG1faWRlbnRpZmllci52aXNpdEFnZ3Jl
Z2F0ZSh2aXNpdG9yKTsKIH0KIAotdm9pZCBHZXRCeUlkVmFyaWFudDo6bWFya0lmQ2hlYXAoU2xv
dFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIEdldEJ5SWRWYXJpYW50OjptYXJrSWZDaGVhcChBYnN0
cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIG1fc3RydWN0dXJlU2V0Lm1hcmtJZkNo
ZWFwKHZpc2l0b3IpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dl
dEJ5SWRWYXJpYW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0dldEJ5SWRWYXJpYW50LmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkVmFyaWFudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNC0yMDIwIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNzcs
OCArNzcsOCBAQCBwdWJsaWM6CiAKICAgICBib29sIGF0dGVtcHRUb01lcmdlKGNvbnN0IEdldEJ5
SWRWYXJpYW50JiBvdGhlcik7CiAgICAgCi0gICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShTbG90Vmlz
aXRvciYpOwotICAgIHZvaWQgbWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImKTsKKyAgICB2b2lkIHZp
c2l0QWdncmVnYXRlKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKKyAgICB2b2lkIG1hcmtJZkNoZWFw
KEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKICAgICBib29sIGZpbmFsaXplKFZNJik7CiAgICAgCiAg
ICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvR2V0QnlTdGF0dXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeVN0YXR1cy5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeVN0YXR1cy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjAgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC01MzAsNyArNTMwLDcgQEAgdm9pZCBHZXRCeVN0YXR1czo6ZmlsdGVyKGNvbnN0
IFN0cnVjdHVyZQogICAgICAgICBtX3N0YXRlID0gTm9JbmZvcm1hdGlvbjsKIH0KIAotdm9pZCBH
ZXRCeVN0YXR1czo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIEdl
dEJ5U3RhdHVzOjp2aXNpdEFnZ3JlZ2F0ZShBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQog
ewogICAgIGlmIChpc01vZHVsZU5hbWVzcGFjZSgpKQogICAgICAgICBtX21vZHVsZU5hbWVzcGFj
ZURhdGEtPm1faWRlbnRpZmllci52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKQEAgLTUzOCw3ICs1
MzgsNyBAQCB2b2lkIEdldEJ5U3RhdHVzOjp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzCiAgICAgICAg
IHZhcmlhbnQudmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7CiB9CiAKLXZvaWQgR2V0QnlTdGF0dXM6
Om1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBHZXRCeVN0YXR1czo6bWFy
a0lmQ2hlYXAoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBmb3IgKEdldEJ5
SWRWYXJpYW50JiB2YXJpYW50IDogbV92YXJpYW50cykKICAgICAgICAgdmFyaWFudC5tYXJrSWZD
aGVhcCh2aXNpdG9yKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRC
eVN0YXR1cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9H
ZXRCeVN0YXR1cy5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvR2V0QnlTdGF0dXMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTExOCw4ICsxMTgsOCBA
QCBwdWJsaWM6CiAgICAgSlNNb2R1bGVFbnZpcm9ubWVudCogbW9kdWxlRW52aXJvbm1lbnQoKSBj
b25zdCB7IHJldHVybiBtX21vZHVsZU5hbWVzcGFjZURhdGEtPm1fbW9kdWxlRW52aXJvbm1lbnQ7
IH0KICAgICBTY29wZU9mZnNldCBzY29wZU9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fbW9kdWxl
TmFtZXNwYWNlRGF0YS0+bV9zY29wZU9mZnNldDsgfQogICAgIAotICAgIHZvaWQgdmlzaXRBZ2dy
ZWdhdGUoU2xvdFZpc2l0b3ImKTsKLSAgICB2b2lkIG1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJik7
CisgICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShBYnN0cmFjdFNsb3RWaXNpdG9yJik7CisgICAgdm9p
ZCBtYXJrSWZDaGVhcChBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAgICAgYm9vbCBmaW5hbGl6ZShW
TSYpOyAvLyBSZXR1cm4gdHJ1ZSBpZiB0aGlzIGdldHMgdG8gbGl2ZS4KIAogICAgIGJvb2wgYXBw
ZW5kVmFyaWFudChjb25zdCBHZXRCeUlkVmFyaWFudCYpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0luQnlJZFN0YXR1cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luQnlJZFN0YXR1cy5jcHAJKHJldmlzaW9uIDI3MjgzMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbkJ5SWRTdGF0dXMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxOCBZdXN1
a2UgU3V6dWtpIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+LgotICogQ29weXJpZ2h0IChDKSAyMDE4
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOC0y
MDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMjUxLDcgKzI1MSw3IEBAIHZvaWQgSW5CeUlkU3RhdHVzOjpmaWx0ZXIo
Y29uc3QgU3RydWN0dXIKICAgICAgICAgbV9zdGF0ZSA9IE5vSW5mb3JtYXRpb247CiB9CiAKLXZv
aWQgSW5CeUlkU3RhdHVzOjptYXJrSWZDaGVhcChTbG90VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQg
SW5CeUlkU3RhdHVzOjptYXJrSWZDaGVhcChBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQog
ewogICAgIGZvciAoSW5CeUlkVmFyaWFudCYgdmFyaWFudCA6IG1fdmFyaWFudHMpCiAgICAgICAg
IHZhcmlhbnQubWFya0lmQ2hlYXAodmlzaXRvcik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvSW5CeUlkU3RhdHVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0luQnlJZFN0YXR1cy5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5CeUlkU3RhdHVzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNiArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDE4IFl1c3VrZSBTdXp1a2kg
PHV0YXRhbmUudGVhQGdtYWlsLmNvbT4uCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMjEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC0xMDYsNyArMTA2LDcgQEAgcHVibGljOgogICAgIC8vIEF0dGVtcHRzIHRvIHJlZHVjZSB0
aGUgc2V0IG9mIHZhcmlhbnRzIHRvIGZpdCB0aGUgZ2l2ZW4gc3RydWN0dXJlIHNldC4gVGhpcyBt
YXkgYmUgYXBwcm94aW1hdGUuCiAgICAgdm9pZCBmaWx0ZXIoY29uc3QgU3RydWN0dXJlU2V0Jik7
CiAgICAgCi0gICAgdm9pZCBtYXJrSWZDaGVhcChTbG90VmlzaXRvciYpOworICAgIHZvaWQgbWFy
a0lmQ2hlYXAoQWJzdHJhY3RTbG90VmlzaXRvciYpOwogICAgIGJvb2wgZmluYWxpemUoVk0mKTsK
IAogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0luQnlJZFZhcmlhbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbkJ5SWRWYXJpYW50LmNwcAkocmV2aXNpb24gMjcy
ODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luQnlJZFZhcmlhbnQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAx
OCBZdXN1a2UgU3V6dWtpIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+LgotICogQ29weXJpZ2h0IChD
KSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxOC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtNjQsNyArNjQsNyBAQCBib29sIEluQnlJZFZhcmlhbnQ6OmF0
dGVtcHRUb01lcmdlKGNvbnN0CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgSW5CeUlkVmFy
aWFudDo6bWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIEluQnlJZFZhcmlh
bnQ6Om1hcmtJZkNoZWFwKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgbV9z
dHJ1Y3R1cmVTZXQubWFya0lmQ2hlYXAodmlzaXRvcik7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvSW5CeUlkVmFyaWFudC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbkJ5SWRWYXJpYW50LmgJKHJldmlzaW9uIDI3MjgzMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbkJ5SWRWYXJpYW50LmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDE4IFl1c3Vr
ZSBTdXp1a2kgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4uCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTgg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE4LTIw
MjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC01Nyw3ICs1Nyw3IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgYXR0ZW1wdFRv
TWVyZ2UoY29uc3QgSW5CeUlkVmFyaWFudCYgb3RoZXIpOwogICAgIAotICAgIHZvaWQgbWFya0lm
Q2hlYXAoU2xvdFZpc2l0b3ImKTsKKyAgICB2b2lkIG1hcmtJZkNoZWFwKEFic3RyYWN0U2xvdFZp
c2l0b3ImKTsKICAgICBib29sIGZpbmFsaXplKFZNJik7CiAKICAgICB2b2lkIGR1bXAoUHJpbnRT
dHJlYW0mKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnRl
cm5hbEZ1bmN0aW9uQWxsb2NhdGlvblByb2ZpbGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW50ZXJuYWxGdW5jdGlvbkFsbG9jYXRpb25Qcm9maWxlLmgJ
KHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnRl
cm5hbEZ1bmN0aW9uQWxsb2NhdGlvblByb2ZpbGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM5LDcg
KzM5LDcgQEAgcHVibGljOgogICAgIFN0cnVjdHVyZSogY3JlYXRlQWxsb2NhdGlvblN0cnVjdHVy
ZUZyb21CYXNlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU0NlbGwqIG93bmVyLCBKU09iamVjdCog
cHJvdG90eXBlLCBTdHJ1Y3R1cmUqIGJhc2UpOwogCiAgICAgdm9pZCBjbGVhcigpIHsgbV9zdHJ1
Y3R1cmUuY2xlYXIoKTsgfQotICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImIHZp
c2l0b3IpIHsgdmlzaXRvci5hcHBlbmQobV9zdHJ1Y3R1cmUpOyB9CisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVmlzaXRvcj4gdm9pZCB2aXNpdEFnZ3JlZ2F0ZShWaXNpdG9yJiB2aXNpdG9yKSB7IHZp
c2l0b3IuYXBwZW5kKG1fc3RydWN0dXJlKTsgfQogCiBwcml2YXRlOgogICAgIFdyaXRlQmFycmll
cjxTdHJ1Y3R1cmU+IG1fc3RydWN0dXJlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL09iamVjdEFsbG9jYXRpb25Qcm9maWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL09iamVjdEFsbG9jYXRpb25Qcm9maWxlLmgJKHJldmlzaW9u
IDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PYmplY3RBbGxvY2F0
aW9uUHJvZmlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjQsNyArNjQsOCBAQCBwcm90ZWN0ZWQ6
CiAgICAgICAgIEFTU0VSVChpc051bGwoKSk7CiAgICAgfQogCi0gICAgdm9pZCB2aXNpdEFnZ3Jl
Z2F0ZShTbG90VmlzaXRvciYgdmlzaXRvcikKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
PgorICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoVmlzaXRvciYgdmlzaXRvcikKICAgICB7CiAgICAg
ICAgIHZpc2l0b3IuYXBwZW5kKG1fc3RydWN0dXJlKTsKICAgICB9CkBAIC0xMTAsNyArMTExLDgg
QEAgcHVibGljOgogICAgICAgICBBU1NFUlQoaXNOdWxsKCkpOwogICAgIH0KIAotICAgIHZvaWQg
dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgVmlzaXRvcj4KKyAgICB2b2lkIHZpc2l0QWdncmVnYXRlKFZpc2l0b3ImIHZpc2l0b3IpCiAg
ICAgewogICAgICAgICBCYXNlOjp2aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKICAgICAgICAgdmlz
aXRvci5hcHBlbmQobV9wcm90b3R5cGUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwCShyZXZpc2lvbiAyNzI4MzAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
NC0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMzU4LDcgKzM1OCw3IEBAIGJvb2wgUG9seW1vcnBoaWNBY2Nl
c3M6OnZpc2l0V2VhayhWTSYgdm0KICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBQb2x5bW9y
cGhpY0FjY2Vzczo6cHJvcGFnYXRlVHJhbnNpdGlvbnMoU2xvdFZpc2l0b3ImIHZpc2l0b3IpIGNv
bnN0Citib29sIFBvbHltb3JwaGljQWNjZXNzOjpwcm9wYWdhdGVUcmFuc2l0aW9ucyhBYnN0cmFj
dFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBjb25zdAogewogICAgIGJvb2wgcmVzdWx0ID0gdHJ1ZTsK
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZSgpOyArK2kpCkBAIC0zNjYsNyArMzY2
LDcgQEAgYm9vbCBQb2x5bW9ycGhpY0FjY2Vzczo6cHJvcGFnYXRlVHJhbnNpdAogICAgIHJldHVy
biByZXN1bHQ7CiB9CiAKLXZvaWQgUG9seW1vcnBoaWNBY2Nlc3M6OnZpc2l0QWdncmVnYXRlKFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBQb2x5bW9ycGhpY0FjY2Vzczo6dmlzaXRBZ2dyZWdh
dGUoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgc2l6ZSgpOyArK2kpCiAgICAgICAgIGF0KGkpLnZpc2l0QWdncmVnYXRlKHZpc2l0
b3IpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNj
ZXNzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHlt
b3JwaGljQWNjZXNzLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNC0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTUyLDE0
ICsxNTIsMTQgQEAgcHVibGljOgogICAgIGNvbnN0IEFjY2Vzc0Nhc2UmIGF0KHVuc2lnbmVkIGkp
IGNvbnN0IHsgcmV0dXJuICptX2xpc3RbaV07IH0KICAgICBjb25zdCBBY2Nlc3NDYXNlJiBvcGVy
YXRvcltdKHVuc2lnbmVkIGkpIGNvbnN0IHsgcmV0dXJuICptX2xpc3RbaV07IH0KIAotICAgIHZv
aWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImKTsKKyAgICB2b2lkIHZpc2l0QWdncmVnYXRl
KEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKIAogICAgIC8vIElmIHRoaXMgcmV0dXJucyBmYWxzZSB0
aGVuIHdlIGFyZSByZXF1ZXN0aW5nIGEgcmVzZXQgb2YgdGhlIG93bmluZyBTdHJ1Y3R1cmVTdHVi
SW5mby4KICAgICBib29sIHZpc2l0V2VhayhWTSYpIGNvbnN0OwogICAgIAogICAgIC8vIFRoaXMg
cmV0dXJucyB0cnVlIGlmIGl0IGhhcyBtYXJrZWQgZXZlcnl0aGluZyBpdCB3aWxsIGV2ZXIgbWFy
a2VkLiBUaGlzIGNhbiBiZSB1c2VkIGFzIGFuCiAgICAgLy8gb3B0aW1pemF0aW9uIHRvIHRoZW4g
YXZvaWQgY2FsbGluZyB0aGlzIG1ldGhvZCBhZ2FpbiBkdXJpbmcgdGhlIGZpeHBvaW50LgotICAg
IGJvb2wgcHJvcGFnYXRlVHJhbnNpdGlvbnMoU2xvdFZpc2l0b3ImKSBjb25zdDsKKyAgICBib29s
IHByb3BhZ2F0ZVRyYW5zaXRpb25zKEFic3RyYWN0U2xvdFZpc2l0b3ImKSBjb25zdDsKIAogICAg
IHZvaWQgYWJvdXRUb0RpZSgpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvUHV0QnlJZFN0YXR1cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTkgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC0zOTYsNyArMzk2LDcgQEAgUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpzbG93VmVy
c2lvbgogICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKG1ha2VzQ2FsbHMoKSA/IE1ha2VzQ2FsbHMg
OiBUYWtlc1Nsb3dQYXRoKTsKIH0KIAotdm9pZCBQdXRCeUlkU3RhdHVzOjptYXJrSWZDaGVhcChT
bG90VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgUHV0QnlJZFN0YXR1czo6bWFya0lmQ2hlYXAoQWJz
dHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBmb3IgKFB1dEJ5SWRWYXJpYW50JiB2
YXJpYW50IDogbV92YXJpYW50cykKICAgICAgICAgdmFyaWFudC5tYXJrSWZDaGVhcCh2aXNpdG9y
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0
dXMuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1B1dEJ5SWRTdGF0dXMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTItMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTExNyw3ICsxMTcsNyBAQCBwdWJs
aWM6CiAgICAgY29uc3QgUHV0QnlJZFZhcmlhbnQmIGF0KHNpemVfdCBpbmRleCkgY29uc3QgeyBy
ZXR1cm4gbV92YXJpYW50c1tpbmRleF07IH0KICAgICBjb25zdCBQdXRCeUlkVmFyaWFudCYgb3Bl
cmF0b3JbXShzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIGF0KGluZGV4KTsgfQogICAgIAot
ICAgIHZvaWQgbWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImKTsKKyAgICB2b2lkIG1hcmtJZkNoZWFw
KEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKICAgICBib29sIGZpbmFsaXplKFZNJik7CiAgICAgCiAg
ICAgdm9pZCBtZXJnZShjb25zdCBQdXRCeUlkU3RhdHVzJik7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkVmFyaWFudC5jcHAJKHJldmlzaW9uIDI3
MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkVmFyaWFudC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDE0LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE0LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0yNjIsNyArMjYyLDcgQEAgYm9vbCBQdXRCeUlkVmFyaWFu
dDo6YXR0ZW1wdFRvTWVyZ2VUcmFucwogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIFB1dEJ5
SWRWYXJpYW50OjptYXJrSWZDaGVhcChTbG90VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgUHV0QnlJ
ZFZhcmlhbnQ6Om1hcmtJZkNoZWFwKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAg
ICAgbV9vbGRTdHJ1Y3R1cmUubWFya0lmQ2hlYXAodmlzaXRvcik7CiAgICAgaWYgKG1fbmV3U3Ry
dWN0dXJlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJp
YW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5
SWRWYXJpYW50LmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9QdXRCeUlkVmFyaWFudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNC0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTMyLDcgKzEzMiw3
IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgYXR0ZW1wdFRvTWVyZ2UoY29uc3QgUHV0QnlJZFZhcmlh
bnQmIG90aGVyKTsKICAgICAKLSAgICB2b2lkIG1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJik7Cisg
ICAgdm9pZCBtYXJrSWZDaGVhcChBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAgICAgYm9vbCBmaW5h
bGl6ZShWTSYpOwogICAgIAogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1JlY29yZGVkU3RhdHVzZXMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9SZWNvcmRlZFN0YXR1
c2VzLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1JlY29yZGVkU3RhdHVzZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDIsNyArMTAyLDcg
QEAgU2V0UHJpdmF0ZUJyYW5kU3RhdHVzKiBSZWNvcmRlZFN0YXR1c2VzOgogICAgIHJldHVybiBy
ZXN1bHQ7CiB9CiAKLXZvaWQgUmVjb3JkZWRTdGF0dXNlczo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZp
c2l0b3ImIHZpc2l0b3IpCit2b2lkIFJlY29yZGVkU3RhdHVzZXM6OnZpc2l0QWdncmVnYXRlKEFi
c3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgZm9yIChhdXRvJiBwYWlyIDogZ2V0
cykKICAgICAgICAgcGFpci5zZWNvbmQtPnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOwpAQCAtMTE0
LDcgKzExNCw3IEBAIHZvaWQgUmVjb3JkZWRTdGF0dXNlczo6dmlzaXRBZ2dyZWdhdGUoU2wKICAg
ICAgICAgcGFpci5zZWNvbmQtPnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOwogfQogCi12b2lkIFJl
Y29yZGVkU3RhdHVzZXM6Om1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBS
ZWNvcmRlZFN0YXR1c2VzOjptYXJrSWZDaGVhcChBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9y
KQogewogICAgIGZvciAoYXV0byYgcGFpciA6IGdldHMpCiAgICAgICAgIHBhaXIuc2Vjb25kLT5t
YXJrSWZDaGVhcCh2aXNpdG9yKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9SZWNvcmRlZFN0YXR1c2VzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1JlY29yZGVkU3RhdHVzZXMuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1JlY29yZGVkU3RhdHVzZXMuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAyMCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAyMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTU0LDggKzU0LDggQEAgc3RydWN0IFJlY29yZGVkU3RhdHVzZXMgewogICAgIENoZWNr
UHJpdmF0ZUJyYW5kU3RhdHVzKiBhZGRDaGVja1ByaXZhdGVCcmFuZFN0YXR1cyhjb25zdCBDb2Rl
T3JpZ2luJiwgY29uc3QgQ2hlY2tQcml2YXRlQnJhbmRTdGF0dXMmKTsKICAgICBTZXRQcml2YXRl
QnJhbmRTdGF0dXMqIGFkZFNldFByaXZhdGVCcmFuZFN0YXR1cyhjb25zdCBDb2RlT3JpZ2luJiwg
Y29uc3QgU2V0UHJpdmF0ZUJyYW5kU3RhdHVzJik7CiAgICAgCi0gICAgdm9pZCB2aXNpdEFnZ3Jl
Z2F0ZShTbG90VmlzaXRvciYpOwotICAgIHZvaWQgbWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImKTsK
KyAgICB2b2lkIHZpc2l0QWdncmVnYXRlKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKKyAgICB2b2lk
IG1hcmtJZkNoZWFwKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKICAgICAKICAgICB2b2lkIGZpbmFs
aXplV2l0aG91dERlbGV0aW5nKFZNJik7CiAgICAgdm9pZCBmaW5hbGl6ZShWTSYpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NldFByaXZhdGVCcmFuZFN0YXR1cy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NldFByaXZhdGVC
cmFuZFN0YXR1cy5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9TZXRQcml2YXRlQnJhbmRTdGF0dXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
MzUsMTMgKzIzNSwxMyBAQCBDYWNoZWFibGVJZGVudGlmaWVyIFNldFByaXZhdGVCcmFuZFN0YXR1
CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotdm9pZCBTZXRQcml2YXRlQnJhbmRTdGF0dXM6OnZp
c2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBTZXRQcml2YXRlQnJhbmRT
dGF0dXM6OnZpc2l0QWdncmVnYXRlKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAg
ICAgZm9yIChTZXRQcml2YXRlQnJhbmRWYXJpYW50JiB2YXJpYW50IDogbV92YXJpYW50cykKICAg
ICAgICAgdmFyaWFudC52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKIH0KIAotdm9pZCBTZXRQcml2
YXRlQnJhbmRTdGF0dXM6Om1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBT
ZXRQcml2YXRlQnJhbmRTdGF0dXM6Om1hcmtJZkNoZWFwKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZp
c2l0b3IpCiB7CiAgICAgZm9yIChTZXRQcml2YXRlQnJhbmRWYXJpYW50JiB2YXJpYW50IDogbV92
YXJpYW50cykKICAgICAgICAgdmFyaWFudC5tYXJrSWZDaGVhcCh2aXNpdG9yKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TZXRQcml2YXRlQnJhbmRTdGF0dXMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU2V0UHJpdmF0ZUJyYW5k
U3RhdHVzLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9TZXRQcml2YXRlQnJhbmRTdGF0dXMuaAkod29ya2luZyBjb3B5KQpAQCAtODMsOCArODMs
OCBAQCBwdWJsaWM6CiAgICAgLy8gQXR0ZW1wdHMgdG8gcmVkdWNlIHRoZSBzZXQgb2YgdmFyaWFu
dHMgdG8gZml0IHRoZSBnaXZlbiBzdHJ1Y3R1cmUgc2V0LiBUaGlzIG1heSBiZSBhcHByb3hpbWF0
ZS4KICAgICB2b2lkIGZpbHRlcihjb25zdCBTdHJ1Y3R1cmVTZXQmKTsKIAotICAgIHZvaWQgdmlz
aXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImKTsKLSAgICB2b2lkIG1hcmtJZkNoZWFwKFNsb3RWaXNp
dG9yJik7CisgICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cisg
ICAgdm9pZCBtYXJrSWZDaGVhcChBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAgICAgYm9vbCBmaW5h
bGl6ZShWTSYpOwogCiAgICAgYm9vbCBhcHBlbmRWYXJpYW50KGNvbnN0IFNldFByaXZhdGVCcmFu
ZFZhcmlhbnQmKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TZXRQcml2
YXRlQnJhbmRWYXJpYW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvU2V0UHJpdmF0ZUJyYW5kVmFyaWFudC5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TZXRQcml2YXRlQnJhbmRWYXJpYW50LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNTQsNyArNTQsNyBAQCBib29sIFNldFByaXZhdGVCcmFuZFZh
cmlhbnQ6OmF0dGVtcHRUb01lCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgU2V0UHJpdmF0
ZUJyYW5kVmFyaWFudDo6bWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIFNl
dFByaXZhdGVCcmFuZFZhcmlhbnQ6Om1hcmtJZkNoZWFwKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZp
c2l0b3IpCiB7CiAgICAgaWYgKG1fb2xkU3RydWN0dXJlKQogICAgICAgICBtX29sZFN0cnVjdHVy
ZS0+bWFya0lmQ2hlYXAodmlzaXRvcik7CkBAIC03MSw3ICs3MSw3IEBAIGJvb2wgU2V0UHJpdmF0
ZUJyYW5kVmFyaWFudDo6ZmluYWxpemUoVk0KICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBT
ZXRQcml2YXRlQnJhbmRWYXJpYW50Ojp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYgdmlzaXRv
cikKK3ZvaWQgU2V0UHJpdmF0ZUJyYW5kVmFyaWFudDo6dmlzaXRBZ2dyZWdhdGUoQWJzdHJhY3RT
bG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBtX2lkZW50aWZpZXIudmlzaXRBZ2dyZWdhdGUo
dmlzaXRvcik7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU2V0UHJp
dmF0ZUJyYW5kVmFyaWFudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9TZXRQcml2YXRlQnJhbmRWYXJpYW50LmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TZXRQcml2YXRlQnJhbmRWYXJpYW50LmgJKHdv
cmtpbmcgY29weSkKQEAgLTQ1LDggKzQ1LDggQEAgcHVibGljOgogCiAgICAgYm9vbCBhdHRlbXB0
VG9NZXJnZShjb25zdCBTZXRQcml2YXRlQnJhbmRWYXJpYW50JiBvdGhlcik7CiAKLSAgICB2b2lk
IHZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJik7Ci0gICAgdm9pZCBtYXJrSWZDaGVhcChTbG90
VmlzaXRvciYpOworICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoQWJzdHJhY3RTbG90VmlzaXRvciYp
OworICAgIHZvaWQgbWFya0lmQ2hlYXAoQWJzdHJhY3RTbG90VmlzaXRvciYpOwogICAgIGJvb2wg
ZmluYWxpemUoVk0mKTsKIAogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVNldC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVNldC5jcHAJ
KHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1
Y3R1cmVTZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxNC0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzEsNyArMzEsNyBAQAogCiBuYW1lc3Bh
Y2UgSlNDIHsKIAotdm9pZCBTdHJ1Y3R1cmVTZXQ6Om1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJiB2
aXNpdG9yKSBjb25zdAordm9pZCBTdHJ1Y3R1cmVTZXQ6Om1hcmtJZkNoZWFwKEFic3RyYWN0U2xv
dFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0CiB7CiAgICAgZm9yIChTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSA6ICp0aGlzKQogICAgICAgICBzdHJ1Y3R1cmUtPm1hcmtJZkNoZWFwKHZpc2l0b3IpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVNldC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTZXQuaAkocmV2
aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVy
ZVNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMS0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTQsNyArNTQsNyBAQCBwdWJsaWM6CiAgICAgICAg
IHJldHVybiBvbmx5RW50cnkoKTsKICAgICB9CiAKLSAgICB2b2lkIG1hcmtJZkNoZWFwKFNsb3RW
aXNpdG9yJikgY29uc3Q7CisgICAgdm9pZCBtYXJrSWZDaGVhcChBYnN0cmFjdFNsb3RWaXNpdG9y
JikgY29uc3Q7CiAgICAgYm9vbCBpc1N0aWxsQWxpdmUoVk0mKSBjb25zdDsKICAgICAKICAgICB2
b2lkIGR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mLCBEdW1wQ29udGV4dCopIGNvbnN0OwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1
YkluZm8uY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOC0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjk2LDcgKzI5
Niw3IEBAIHZvaWQgU3RydWN0dXJlU3R1YkluZm86OnJlc2V0KGNvbnN0IENvbmMKICAgICBzZXRD
YWNoZVR5cGUobG9ja2VyLCBDYWNoZVR5cGU6OlVuc2V0KTsKIH0KIAotdm9pZCBTdHJ1Y3R1cmVT
dHViSW5mbzo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIFN0cnVj
dHVyZVN0dWJJbmZvOjp2aXNpdEFnZ3JlZ2F0ZShBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9y
KQogewogICAgIHsKICAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2J1ZmZlcmVkU3Ry
dWN0dXJlc0xvY2spOwpAQCAtMzUyLDcgKzM1Miw3IEBAIHZvaWQgU3RydWN0dXJlU3R1YkluZm86
OnZpc2l0V2Vha1JlZmVyZW4KICAgICByZXNldEJ5R0MgPSB0cnVlOwogfQogCi1ib29sIFN0cnVj
dHVyZVN0dWJJbmZvOjpwcm9wYWdhdGVUcmFuc2l0aW9ucyhTbG90VmlzaXRvciYgdmlzaXRvcikK
K2Jvb2wgU3RydWN0dXJlU3R1YkluZm86OnByb3BhZ2F0ZVRyYW5zaXRpb25zKEFic3RyYWN0U2xv
dFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgc3dpdGNoIChtX2NhY2hlVHlwZSkgewogICAgIGNh
c2UgQ2FjaGVUeXBlOjpVbnNldDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9TdHJ1Y3R1cmVTdHViSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAyMCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTkzLDE0ICs5MywxNCBAQCBwdWJsaWM6CiAgICAgdm9pZCBkZXJlZigpOwogICAg
IHZvaWQgYWJvdXRUb0RpZSgpOwogCi0gICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRv
ciYpOworICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoQWJzdHJhY3RTbG90VmlzaXRvciYpOwogCiAg
ICAgLy8gQ2hlY2sgaWYgdGhlIHN0dWIgaGFzIHdlYWsgcmVmZXJlbmNlcyB0aGF0IGFyZSBkZWFk
LiBJZiBpdCBkb2VzLCB0aGVuIGl0IHJlc2V0cyBpdHNlbGYsCiAgICAgLy8gZWl0aGVyIGVudGly
ZWx5IG9yIGp1c3QgZW5vdWdoIHRvIGVuc3VyZSB0aGF0IHRob3NlIGRlYWQgcG9pbnRlcnMgZG9u
J3QgZ2V0IHVzZWQgYW55bW9yZS4KICAgICB2b2lkIHZpc2l0V2Vha1JlZmVyZW5jZXMoY29uc3Qg
Q29uY3VycmVudEpTTG9ja2VyQmFzZSYsIENvZGVCbG9jayopOwogICAgIAogICAgIC8vIFRoaXMg
cmV0dXJucyB0cnVlIGlmIGl0IGhhcyBtYXJrZWQgZXZlcnl0aGluZyB0aGF0IGl0IHdpbGwgZXZl
ciBtYXJrLgotICAgIGJvb2wgcHJvcGFnYXRlVHJhbnNpdGlvbnMoU2xvdFZpc2l0b3ImKTsKKyAg
ICBib29sIHByb3BhZ2F0ZVRyYW5zaXRpb25zKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKICAgICAg
ICAgCiAgICAgU3R1YkluZm9TdW1tYXJ5IHN1bW1hcnkoVk0mKSBjb25zdDsKICAgICAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJs
b2NrLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxOSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMSBBcHBsZSBJbmMuIEFsbCBSaWdodHMg
UmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTc1LDcgKzc1LDgg
QEAgVW5saW5rZWRDb2RlQmxvY2s6OlVubGlua2VkQ29kZUJsb2NrKFZNJgogICAgIH0KIH0KIAot
dm9pZCBVbmxpbmtlZENvZGVCbG9jazo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgVW5saW5r
ZWRDb2RlQmxvY2s6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlz
aXRvcikKIHsKICAgICBVbmxpbmtlZENvZGVCbG9jayogdGhpc09iamVjdCA9IGpzQ2FzdDxVbmxp
bmtlZENvZGVCbG9jayo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhp
c09iamVjdCwgaW5mbygpKTsKQEAgLTk0LDYgKzk1LDggQEAgdm9pZCBVbmxpbmtlZENvZGVCbG9j
azo6dmlzaXRDaGlsZHJlbihKUwogICAgIHZpc2l0b3IucmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVk
KGV4dHJhTWVtb3J5KTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKFVubGlua2VkQ29kZUJs
b2NrKTsKKwogc2l6ZV90IFVubGlua2VkQ29kZUJsb2NrOjplc3RpbWF0ZWRTaXplKEpTQ2VsbCog
Y2VsbCwgVk0mIHZtKQogewogICAgIFVubGlua2VkQ29kZUJsb2NrKiB0aGlzT2JqZWN0ID0ganND
YXN0PFVubGlua2VkQ29kZUJsb2NrKj4oY2VsbCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaAkocmV2aXNpb24gMjcyODMw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEy
LTIwMTkgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEyLTIwMjEgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC00MzEsNyArNDMxLDcgQEAgcHJpdmF0ZToKICAgICBSZWZDb3Vu
dGVkQXJyYXk8RXhwcmVzc2lvblJhbmdlSW5mbz4gbV9leHByZXNzaW9uSW5mbzsKIAogcHJvdGVj
dGVkOgotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3Im
KTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogICAgIHN0YXRpYyBzaXplX3QgZXN0aW1h
dGVkU2l6ZShKU0NlbGwqLCBWTSYpOwogCiBwdWJsaWM6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9uRXhlY3V0
YWJsZS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9VbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTkgQXBwbGUgSW5jLiBBbGwg
UmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjEgQXBwbGUgSW5jLiBB
bGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0x
NDYsNyArMTQ2LDggQEAgdm9pZCBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6ZGVzdHJveQog
ICAgIHN0YXRpY19jYXN0PFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKj4oY2VsbCktPn5Vbmxp
bmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSgpOwogfQogCi12b2lkIFVubGlua2VkRnVuY3Rpb25FeGVj
dXRhYmxlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3Ip
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0
YWJsZTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQog
ewogICAgIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiB0aGlzT2JqZWN0ID0ganNDYXN0PFVu
bGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9J
TkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtMTY5LDYgKzE3MCw4IEBAIHZvaWQgVW5s
aW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU6OnZpc2l0Q2gKICAgICB9CiB9CiAKK0RFRklORV9WSVNJ
VF9DSElMRFJFTihVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSk7CisKIFNvdXJjZUNvZGUgVW5s
aW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU6OmxpbmtlZFNvdXJjZUNvZGUoY29uc3QgU291cmNlQ29k
ZSYgcGFzc2VkUGFyZW50U291cmNlKSBjb25zdAogewogICAgIGNvbnN0IFNvdXJjZUNvZGUmIHBh
cmVudFNvdXJjZSA9ICFtX2lzQnVpbHRpbkRlZmF1bHRDbGFzc0NvbnN0cnVjdG9yID8gcGFzc2Vk
UGFyZW50U291cmNlIDogQnVpbHRpbkV4ZWN1dGFibGVzOjpkZWZhdWx0Q29uc3RydWN0b3JTb3Vy
Y2VDb2RlKGNvbnN0cnVjdG9yS2luZCgpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5oCShy
ZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5r
ZWRGdW5jdGlvbkV4ZWN1dGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxOSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI0Miw3ICsyNDIsNyBA
QCBwcml2YXRlOgogICAgIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKFZNJiwgU3RydWN0dXJl
KiwgY29uc3QgU291cmNlQ29kZSYsIEZ1bmN0aW9uTWV0YWRhdGFOb2RlKiwgVW5saW5rZWRGdW5j
dGlvbktpbmQsIENvbnN0cnVjdEFiaWxpdHksIEpTUGFyc2VyU2NyaXB0TW9kZSwgUmVmUHRyPFRE
WkVudmlyb25tZW50TGluaz4sIE9wdGlvbmFsPFByaXZhdGVOYW1lRW52aXJvbm1lbnQ+LCBKU0M6
OkRlcml2ZWRDb250ZXh0VHlwZSwgSlNDOjpOZWVkc0NsYXNzRmllbGRJbml0aWFsaXplciwgUHJp
dmF0ZUJyYW5kUmVxdWlyZW1lbnQsIGJvb2wgaXNCdWlsdGluRGVmYXVsdENsYXNzQ29uc3RydWN0
b3IpOwogICAgIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKERlY29kZXImLCBjb25zdCBDYWNo
ZWRGdW5jdGlvbkV4ZWN1dGFibGUmKTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4o
SlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAg
ICAgdm9pZCBkZWNvZGVDYWNoZWRDb2RlQmxvY2tzKFZNJik7CiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlclNjb3BlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXJTY29wZS5jcHAJKHJldmlzaW9uIDI3
MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlclNjb3BlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDgtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDgtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTU1LDcgKzU1LDggQEAgdm9pZCBEZWJ1Z2dlclNjb3BlOjpm
aW5pc2hDcmVhdGlvbihWTSYgdgogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKIH0KIAot
dm9pZCBEZWJ1Z2dlclNjb3BlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0
b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBEZWJ1Z2dlclNj
b3BlOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7
CiAgICAgRGVidWdnZXJTY29wZSogdGhpc09iamVjdCA9IGpzQ2FzdDxEZWJ1Z2dlclNjb3BlKj4o
Y2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkp
OwpAQCAtNjUsNiArNjYsOCBAQCB2b2lkIERlYnVnZ2VyU2NvcGU6OnZpc2l0Q2hpbGRyZW4oSlND
ZWxsCiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9uZXh0KTsKIH0KIAorREVGSU5F
X1ZJU0lUX0NISUxEUkVOKERlYnVnZ2VyU2NvcGUpOworCiBTdHJpbmcgRGVidWdnZXJTY29wZTo6
Y2xhc3NOYW1lKGNvbnN0IEpTT2JqZWN0KiBvYmplY3QsIFZNJiB2bSkKIHsKICAgICBjb25zdCBE
ZWJ1Z2dlclNjb3BlKiBzY29wZSA9IGpzQ2FzdDxjb25zdCBEZWJ1Z2dlclNjb3BlKj4ob2JqZWN0
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlclNjb3BlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyU2Nv
cGUuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2Vy
L0RlYnVnZ2VyU2NvcGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDgtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ2LDcgKzQ2LDcgQEAgcHVibGlj
OgogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIERlYnVnZ2VyU2NvcGUqIGNyZWF0ZShW
TSYgdm0sIEpTU2NvcGUqIHNjb3BlKTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4o
SlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogICAg
IHN0YXRpYyBTdHJpbmcgY2xhc3NOYW1lKGNvbnN0IEpTT2JqZWN0KiwgVk0mKTsKICAgICBzdGF0
aWMgU3RyaW5nIHRvU3RyaW5nTmFtZShjb25zdCBKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0Kik7
CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiwgSlNHbG9iYWxP
YmplY3QqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkVHJhbnNpdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFRyYW5zaXRpb25zLmNwcAkocmV2aXNp
b24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkVHJhbnNp
dGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTIsNyArNTIsNyBAQCB2b2lkIERlc2lyZWRU
cmFuc2l0aW9uOjpyZWFsbHlBZGQoVk0mIHZtCiAgICAgICAgICAgICBtX29sZFN0cnVjdHVyZSwg
bV9uZXdTdHJ1Y3R1cmUpKTsKIH0KIAotdm9pZCBEZXNpcmVkVHJhbnNpdGlvbjo6dmlzaXRDaGls
ZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgRGVzaXJlZFRyYW5zaXRpb246OnZpc2l0
Q2hpbGRyZW4oQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB2aXNpdG9yLmFw
cGVuZFVuYmFycmllcmVkKG1fY29kZU9yaWdpbk93bmVyKTsKICAgICB2aXNpdG9yLmFwcGVuZFVu
YmFycmllcmVkKG1fb2xkU3RydWN0dXJlKTsKQEAgLTc4LDcgKzc4LDcgQEAgdm9pZCBEZXNpcmVk
VHJhbnNpdGlvbnM6OnJlYWxseUFkZChWTSYgdgogICAgICAgICBtX3RyYW5zaXRpb25zW2ldLnJl
YWxseUFkZCh2bSwgY29tbW9uKTsKIH0KIAotdm9pZCBEZXNpcmVkVHJhbnNpdGlvbnM6OnZpc2l0
Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIERlc2lyZWRUcmFuc2l0aW9uczo6
dmlzaXRDaGlsZHJlbihBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBtX3RyYW5zaXRpb25zLnNpemUoKTsgaSsrKQogICAgICAgICBt
X3RyYW5zaXRpb25zW2ldLnZpc2l0Q2hpbGRyZW4odmlzaXRvcik7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRUcmFuc2l0aW9ucy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFRyYW5zaXRpb25zLmgJKHJldmlzaW9u
IDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFRyYW5zaXRp
b25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDYsOCArNDYsNyBAQCBwdWJsaWM6CiAgICAgRGVz
aXJlZFRyYW5zaXRpb24oQ29kZUJsb2NrKiwgQ29kZUJsb2NrKiBjb2RlT3JpZ2luT3duZXIsIFN0
cnVjdHVyZSosIFN0cnVjdHVyZSopOwogCiAgICAgdm9pZCByZWFsbHlBZGQoVk0mLCBDb21tb25E
YXRhKik7Ci0gICAgCi0gICAgdm9pZCB2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CisgICAg
dm9pZCB2aXNpdENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKIAogcHJpdmF0ZToKICAg
ICBDb2RlQmxvY2sqIG1fY29kZUJsb2NrOwpAQCAtNjMsNyArNjIsNyBAQCBwdWJsaWM6CiAKICAg
ICB2b2lkIGFkZExhemlseShDb2RlQmxvY2sqLCBDb2RlQmxvY2sqIGNvZGVPcmlnaW5Pd25lciwg
U3RydWN0dXJlKiwgU3RydWN0dXJlKik7CiAgICAgdm9pZCByZWFsbHlBZGQoVk0mLCBDb21tb25E
YXRhKik7Ci0gICAgdm9pZCB2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CisgICAgdm9pZCB2
aXNpdENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKIAogcHJpdmF0ZToKICAgICBWZWN0
b3I8RGVzaXJlZFRyYW5zaXRpb24+IG1fdHJhbnNpdGlvbnM7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXZWFrUmVmZXJlbmNlcy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2Vha1JlZmVyZW5jZXMuY3BwCShy
ZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRX
ZWFrUmVmZXJlbmNlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC04Nyw3ICs4Nyw3IEBAIHZvaWQg
RGVzaXJlZFdlYWtSZWZlcmVuY2VzOjpyZWFsbHlBZGQoVk0KICAgICB9CiB9CiAKLXZvaWQgRGVz
aXJlZFdlYWtSZWZlcmVuY2VzOjp2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQor
dm9pZCBEZXNpcmVkV2Vha1JlZmVyZW5jZXM6OnZpc2l0Q2hpbGRyZW4oQWJzdHJhY3RTbG90Vmlz
aXRvciYgdmlzaXRvcikKIHsKICAgICBmb3IgKEpTQ2VsbCogdGFyZ2V0IDogbV9yZWZlcmVuY2Vz
KQogICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKHRhcmdldCk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXZWFrUmVmZXJlbmNlcy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFdlYWtSZWZlcmVuY2Vz
LmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVz
aXJlZFdlYWtSZWZlcmVuY2VzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMSwxMCArMzEsMTAgQEAK
IAogbmFtZXNwYWNlIEpTQyB7IAogCitjbGFzcyBBYnN0cmFjdFNsb3RWaXNpdG9yOwogY2xhc3Mg
Q29kZUJsb2NrOwogY2xhc3MgSlNDZWxsOwogY2xhc3MgSlNWYWx1ZTsKLWNsYXNzIFNsb3RWaXNp
dG9yOwogY2xhc3MgVk07CiAKIG5hbWVzcGFjZSBERkcgewpAQCAtNTIsOCArNTIsOCBAQCBwdWJs
aWM6CiAgICAgYm9vbCBjb250YWlucyhKU0NlbGwqKTsKICAgICAKICAgICB2b2lkIHJlYWxseUFk
ZChWTSYsIENvbW1vbkRhdGEqKTsKLSAgICAKLSAgICB2b2lkIHZpc2l0Q2hpbGRyZW4oU2xvdFZp
c2l0b3ImKTsKKworICAgIHZvaWQgdmlzaXRDaGlsZHJlbihBYnN0cmFjdFNsb3RWaXNpdG9yJik7
CiAKIHByaXZhdGU6CiAgICAgQ29kZUJsb2NrKiBtX2NvZGVCbG9jazsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ0OCw3
ICsxNDQ4LDcgQEAgdm9pZCBHcmFwaDo6cmVnaXN0ZXJGcm96ZW5WYWx1ZXMoKQogICAgIG1fY29k
ZUJsb2NrLT5jb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oKS5zaHJpbmtUb0ZpdCgp
OwogfQogCi12b2lkIEdyYXBoOjp2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQor
dm9pZCBHcmFwaDo6dmlzaXRDaGlsZHJlbihBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQog
ewogICAgIGZvciAoRnJvemVuVmFsdWUqIHZhbHVlIDogbV9mcm96ZW5WYWx1ZXMpIHsKICAgICAg
ICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZCh2YWx1ZS0+dmFsdWUoKSk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMDAwLDkg
KzEwMDAsOSBAQCBwdWJsaWM6CiAgICAgYm9vbCBjYW5Eb0Zhc3RTcHJlYWQoTm9kZSosIGNvbnN0
IEFic3RyYWN0VmFsdWUmKTsKICAgICAKICAgICB2b2lkIHJlZ2lzdGVyRnJvemVuVmFsdWVzKCk7
Ci0gICAgCi0gICAgdm9pZCB2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJikgZmluYWw7Ci0gICAg
CisKKyAgICB2b2lkIHZpc2l0Q2hpbGRyZW4oQWJzdHJhY3RTbG90VmlzaXRvciYpIGZpbmFsOwor
CiAgICAgdm9pZCBsb2dBc3NlcnRpb25GYWlsdXJlKAogICAgICAgICBzdGQ6Om51bGxwdHJfdCwg
Y29uc3QgY2hhciogZmlsZSwgaW50IGxpbmUsIGNvbnN0IGNoYXIqIGZ1bmN0aW9uLAogICAgICAg
ICBjb25zdCBjaGFyKiBhc3NlcnRpb24pOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdQbGFuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1BsYW4uY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1BsYW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMy0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjcyLDkgKzY3Miw5IEBAIENvbXBpbGF0
aW9uS2V5IFBsYW46OmtleSgpCiAgICAgcmV0dXJuIENvbXBpbGF0aW9uS2V5KG1fY29kZUJsb2Nr
LT5hbHRlcm5hdGl2ZSgpLCBtX21vZGUpOwogfQogCi12b2lkIFBsYW46OmNoZWNrTGl2ZW5lc3NB
bmRWaXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBQbGFuOjpjaGVja0xp
dmVuZXNzQW5kVmlzaXRDaGlsZHJlbihBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewot
ICAgIGlmICghaXNLbm93blRvQmVMaXZlRHVyaW5nR0MoKSkKKyAgICBpZiAoIWlzS25vd25Ub0Jl
TGl2ZUR1cmluZ0dDKHZpc2l0b3IpKQogICAgICAgICByZXR1cm47CiAKICAgICBjbGVhbk11c3RI
YW5kbGVWYWx1ZXNJZk5lY2Vzc2FyeSgpOwpAQCAtNzA4LDcgKzcwOCwyMCBAQCB2b2lkIFBsYW46
OmZpbmFsaXplSW5HQygpCiAgICAgbV9yZWNvcmRlZFN0YXR1c2VzLmZpbmFsaXplV2l0aG91dERl
bGV0aW5nKCptX3ZtKTsKIH0KIAotYm9vbCBQbGFuOjppc0tub3duVG9CZUxpdmVEdXJpbmdHQygp
Citib29sIFBsYW46OmlzS25vd25Ub0JlTGl2ZUR1cmluZ0dDKEFic3RyYWN0U2xvdFZpc2l0b3Im
IHZpc2l0b3IpCit7CisgICAgaWYgKG1fc3RhZ2UgPT0gQ2FuY2VsbGVkKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgaWYgKCF2aXNpdG9yLmlzTWFya2VkKG1fY29kZUJsb2NrLT5vd25lckV4
ZWN1dGFibGUoKSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIXZpc2l0b3IuaXNN
YXJrZWQobV9jb2RlQmxvY2stPmFsdGVybmF0aXZlKCkpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgaWYgKCEhbV9wcm9maWxlZERGR0NvZGVCbG9jayAmJiAhdmlzaXRvci5pc01hcmtlZCht
X3Byb2ZpbGVkREZHQ29kZUJsb2NrKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVy
biB0cnVlOworfQorCitib29sIFBsYW46OmlzS25vd25Ub0JlTGl2ZUFmdGVyR0MoKQogewogICAg
IGlmIChtX3N0YWdlID09IENhbmNlbGxlZCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDMsOCAr
NDMsOCBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAorY2xhc3MgQWJzdHJhY3RTbG90VmlzaXRvcjsK
IGNsYXNzIENvZGVCbG9jazsKLWNsYXNzIFNsb3RWaXNpdG9yOwogCiBuYW1lc3BhY2UgREZHIHsK
IApAQCAtNzEsOSArNzEsMTAgQEAgcHVibGljOgogICAgIENvbXBpbGF0aW9uS2V5IGtleSgpOwog
ICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+Ci0gICAgdm9pZCBpdGVyYXRlQ29kZUJs
b2Nrc0ZvckdDKGNvbnN0IEZ1bmMmKTsKLSAgICB2b2lkIGNoZWNrTGl2ZW5lc3NBbmRWaXNpdENo
aWxkcmVuKFNsb3RWaXNpdG9yJik7Ci0gICAgYm9vbCBpc0tub3duVG9CZUxpdmVEdXJpbmdHQygp
OworICAgIHZvaWQgaXRlcmF0ZUNvZGVCbG9ja3NGb3JHQyhBYnN0cmFjdFNsb3RWaXNpdG9yJiwg
Y29uc3QgRnVuYyYpOworICAgIHZvaWQgY2hlY2tMaXZlbmVzc0FuZFZpc2l0Q2hpbGRyZW4oQWJz
dHJhY3RTbG90VmlzaXRvciYpOworICAgIGJvb2wgaXNLbm93blRvQmVMaXZlRHVyaW5nR0MoQWJz
dHJhY3RTbG90VmlzaXRvciYpOworICAgIGJvb2wgaXNLbm93blRvQmVMaXZlQWZ0ZXJHQygpOwog
ICAgIHZvaWQgZmluYWxpemVJbkdDKCk7CiAgICAgdm9pZCBjYW5jZWwoKTsKIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuSW5saW5lcy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbklubGluZXMuaAkocmV2aXNpb24gMjcyODMw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuSW5saW5lcy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNy0yMDE4IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMzIsOSArMzIsOSBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7
CiAjaWYgRU5BQkxFKERGR19KSVQpCiAKIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+Ci12b2lkIFBs
YW46Oml0ZXJhdGVDb2RlQmxvY2tzRm9yR0MoY29uc3QgRnVuYyYgZnVuYykKK3ZvaWQgUGxhbjo6
aXRlcmF0ZUNvZGVCbG9ja3NGb3JHQyhBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25z
dCBGdW5jJiBmdW5jKQogewotICAgIGlmICghaXNLbm93blRvQmVMaXZlRHVyaW5nR0MoKSkKKyAg
ICBpZiAoIWlzS25vd25Ub0JlTGl2ZUR1cmluZ0dDKHZpc2l0b3IpKQogICAgICAgICByZXR1cm47
CiAgICAgCiAgICAgLy8gQ29tcGlsYXRpb24gd3JpdGVzIGxvdHMgb2YgdmFsdWVzIHRvIGEgQ29k
ZUJsb2NrIHdpdGhvdXQgcGVyZm9ybWluZwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTYWZlcG9pbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU2FmZXBvaW50LmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTYWZlcG9pbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODMsMjggKzgz
LDM4IEBAIHZvaWQgU2FmZXBvaW50OjpiZWdpbigpCiAgICAgfQogfQogCi12b2lkIFNhZmVwb2lu
dDo6Y2hlY2tMaXZlbmVzc0FuZFZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2
b2lkIFNhZmVwb2ludDo6Y2hlY2tMaXZlbmVzc0FuZFZpc2l0Q2hpbGRyZW4oQWJzdHJhY3RTbG90
VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBSRUxFQVNFX0FTU0VSVChtX2RpZENhbGxCZWdpbik7
CiAKICAgICBpZiAobV9yZXN1bHQubV9kaWRHZXRDYW5jZWxsZWQpCiAgICAgICAgIHJldHVybjsg
Ly8gV2Ugd2VyZSBjYW5jZWxsZWQgZHVyaW5nIGEgcHJldmlvdXMgR0MhCiAgICAgCi0gICAgaWYg
KCFpc0tub3duVG9CZUxpdmVEdXJpbmdHQygpKQorICAgIGlmICghaXNLbm93blRvQmVMaXZlRHVy
aW5nR0ModmlzaXRvcikpCiAgICAgICAgIHJldHVybjsKICAgICAKICAgICBmb3IgKHVuc2lnbmVk
IGkgPSBtX3NjYW5uYWJsZXMuc2l6ZSgpOyBpLS07KQogICAgICAgICBtX3NjYW5uYWJsZXNbaV0t
PnZpc2l0Q2hpbGRyZW4odmlzaXRvcik7CiB9CiAKLWJvb2wgU2FmZXBvaW50Ojppc0tub3duVG9C
ZUxpdmVEdXJpbmdHQygpCitib29sIFNhZmVwb2ludDo6aXNLbm93blRvQmVMaXZlRHVyaW5nR0Mo
QWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBSRUxFQVNFX0FTU0VSVChtX2Rp
ZENhbGxCZWdpbik7CiAgICAgCiAgICAgaWYgKG1fcmVzdWx0Lm1fZGlkR2V0Q2FuY2VsbGVkKQog
ICAgICAgICByZXR1cm4gdHJ1ZTsgLy8gV2Ugd2VyZSBjYW5jZWxsZWQgZHVyaW5nIGEgcHJldmlv
dXMgR0MsIHNvIGxldCdzIG5vdCBtZXNzIHdpdGggaXQgdGhpcyB0aW1lIGFyb3VuZCAtIHByZXRl
bmQgaXQncyBsaXZlIGFuZCBtb3ZlIG9uLgogICAgIAotICAgIHJldHVybiBtX3BsYW4uaXNLbm93
blRvQmVMaXZlRHVyaW5nR0MoKTsKKyAgICByZXR1cm4gbV9wbGFuLmlzS25vd25Ub0JlTGl2ZUR1
cmluZ0dDKHZpc2l0b3IpOworfQorCitib29sIFNhZmVwb2ludDo6aXNLbm93blRvQmVMaXZlQWZ0
ZXJHQygpCit7CisgICAgUkVMRUFTRV9BU1NFUlQobV9kaWRDYWxsQmVnaW4pOworICAgIAorICAg
IGlmIChtX3Jlc3VsdC5tX2RpZEdldENhbmNlbGxlZCkKKyAgICAgICAgcmV0dXJuIHRydWU7IC8v
IFdlIHdlcmUgY2FuY2VsbGVkIGR1cmluZyBhIHByZXZpb3VzIEdDLCBzbyBsZXQncyBub3QgbWVz
cyB3aXRoIGl0IHRoaXMgdGltZSBhcm91bmQgLSBwcmV0ZW5kIGl0J3MgbGl2ZSBhbmQgbW92ZSBv
bi4KKyAgICAKKyAgICByZXR1cm4gbV9wbGFuLmlzS25vd25Ub0JlTGl2ZUFmdGVyR0MoKTsKIH0K
IAogdm9pZCBTYWZlcG9pbnQ6OmNhbmNlbCgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NhZmVwb2ludC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU2FmZXBvaW50LmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU2FmZXBvaW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDE0LCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzEsNyArMzEsNyBA
QAogCiBuYW1lc3BhY2UgSlNDIHsKIAotY2xhc3MgU2xvdFZpc2l0b3I7CitjbGFzcyBBYnN0cmFj
dFNsb3RWaXNpdG9yOwogY2xhc3MgVk07CiAKIG5hbWVzcGFjZSBERkcgewpAQCAtNjYsOSArNjYs
MTAgQEAgcHVibGljOgogICAgIHZvaWQgYWRkKFNjYW5uYWJsZSopOwogICAgIAogICAgIHZvaWQg
YmVnaW4oKTsKLSAgICAKLSAgICB2b2lkIGNoZWNrTGl2ZW5lc3NBbmRWaXNpdENoaWxkcmVuKFNs
b3RWaXNpdG9yJik7Ci0gICAgYm9vbCBpc0tub3duVG9CZUxpdmVEdXJpbmdHQygpOworCisgICAg
dm9pZCBjaGVja0xpdmVuZXNzQW5kVmlzaXRDaGlsZHJlbihBYnN0cmFjdFNsb3RWaXNpdG9yJik7
CisgICAgYm9vbCBpc0tub3duVG9CZUxpdmVEdXJpbmdHQyhBYnN0cmFjdFNsb3RWaXNpdG9yJik7
CisgICAgYm9vbCBpc0tub3duVG9CZUxpdmVBZnRlckdDKCk7CiAgICAgdm9pZCBjYW5jZWwoKTsK
ICAgICAKICAgICBWTSogdm0oKSBjb25zdDsgLy8gTWF5IHJldHVybiBudWxsIGlmIHdlJ3ZlIGJl
ZW4gY2FuY2VsbGVkLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTY2FubmFi
bGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NjYW5uYWJs
ZS5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nj
YW5uYWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTQtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI5LDcgKzI5LDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7
CiAKLWNsYXNzIFNsb3RWaXNpdG9yOworY2xhc3MgQWJzdHJhY3RTbG90VmlzaXRvcjsKIAogbmFt
ZXNwYWNlIERGRyB7CiAKQEAgLTM4LDcgKzM4LDcgQEAgcHVibGljOgogICAgIFNjYW5uYWJsZSgp
IHsgfQogICAgIHZpcnR1YWwgflNjYW5uYWJsZSgpIHsgfQogICAgIAotICAgIHZpcnR1YWwgdm9p
ZCB2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCB2aXNp
dENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImKSA9IDA7CiB9OwogCiB9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0
LmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdX
b3JrbGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNzIsNyArMzcyLDcgQEAgdm9pZCBXb3Jr
bGlzdDo6cmVzdW1lQWxsVGhyZWFkcygpCiAgICAgbV9zdXNwZW5zaW9uTG9jay51bmxvY2soKTsK
IH0KIAotdm9pZCBXb3JrbGlzdDo6dmlzaXRXZWFrUmVmZXJlbmNlcyhTbG90VmlzaXRvciYgdmlz
aXRvcikKK3ZvaWQgV29ya2xpc3Q6OnZpc2l0V2Vha1JlZmVyZW5jZXMoQWJzdHJhY3RTbG90Vmlz
aXRvciYgdmlzaXRvcikKIHsKICAgICBWTSogdm0gPSAmdmlzaXRvci5oZWFwKCktPnZtKCk7CiAg
ICAgewpAQCAtNDA1LDcgKzQwNSw3IEBAIHZvaWQgV29ya2xpc3Q6OnJlbW92ZURlYWRQbGFucyhW
TSYgdm0pCiAgICAgICAgICAgICBQbGFuKiBwbGFuID0gaXRlci0+dmFsdWUuZ2V0KCk7CiAgICAg
ICAgICAgICBpZiAocGxhbi0+dm0oKSAhPSAmdm0pCiAgICAgICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgICAgICBpZiAocGxhbi0+aXNLbm93blRvQmVMaXZlRHVyaW5nR0MoKSkgeworICAg
ICAgICAgICAgaWYgKHBsYW4tPmlzS25vd25Ub0JlTGl2ZUFmdGVyR0MoKSkgewogICAgICAgICAg
ICAgICAgIHBsYW4tPmZpbmFsaXplSW5HQygpOwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwog
ICAgICAgICAgICAgfQpAQCAtNDQwLDcgKzQ0MCw3IEBAIHZvaWQgV29ya2xpc3Q6OnJlbW92ZURl
YWRQbGFucyhWTSYgdm0pCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgaWYgKHNhZmVw
b2ludC0+dm0oKSAhPSAmdm0pCiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgaWYgKHNh
ZmVwb2ludC0+aXNLbm93blRvQmVMaXZlRHVyaW5nR0MoKSkKKyAgICAgICAgaWYgKHNhZmVwb2lu
dC0+aXNLbm93blRvQmVMaXZlQWZ0ZXJHQygpKQogICAgICAgICAgICAgY29udGludWU7CiAgICAg
ICAgIHNhZmVwb2ludC0+Y2FuY2VsKCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdXb3JrbGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHV29ya2xpc3QuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzUsNyArMzUsNyBA
QAogCiBuYW1lc3BhY2UgSlNDIHsKIAotY2xhc3MgU2xvdFZpc2l0b3I7CitjbGFzcyBBYnN0cmFj
dFNsb3RWaXNpdG9yOwogCiBuYW1lc3BhY2UgREZHIHsKIApAQCAtNTcsNyArNTcsNyBAQCBwdWJs
aWM6CiAgICAgdm9pZCBjb21wbGV0ZUFsbFBsYW5zRm9yVk0oVk0mKTsKIAogICAgIHRlbXBsYXRl
PHR5cGVuYW1lIEZ1bmM+Ci0gICAgdm9pZCBpdGVyYXRlQ29kZUJsb2Nrc0ZvckdDKFZNJiwgY29u
c3QgRnVuYyYpOworICAgIHZvaWQgaXRlcmF0ZUNvZGVCbG9ja3NGb3JHQyhBYnN0cmFjdFNsb3RW
aXNpdG9yJiwgVk0mLCBjb25zdCBGdW5jJik7CiAKICAgICB2b2lkIHdhaXRVbnRpbEFsbFBsYW5z
Rm9yVk1BcmVSZWFkeShWTSYpOwogICAgIFN0YXRlIGNvbXBsZXRlQWxsUmVhZHlQbGFuc0ZvclZN
KFZNJiwgQ29tcGlsYXRpb25LZXkgPSBDb21waWxhdGlvbktleSgpKTsKQEAgLTczLDcgKzczLDcg
QEAgcHVibGljOgogICAgIGJvb2wgaXNBY3RpdmVGb3JWTShWTSYpIGNvbnN0OwogICAgIAogICAg
IC8vIE9ubHkgY2FsbGVkIG9uIHRoZSBtYWluIHRocmVhZCBhZnRlciBzdXNwZW5kaW5nIGFsbCB0
aHJlYWRzLgotICAgIHZvaWQgdmlzaXRXZWFrUmVmZXJlbmNlcyhTbG90VmlzaXRvciYpOworICAg
IHZvaWQgdmlzaXRXZWFrUmVmZXJlbmNlcyhBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAgICAgdm9p
ZCByZW1vdmVEZWFkUGxhbnMoVk0mKTsKICAgICAKICAgICB2b2lkIHJlbW92ZU5vbkNvbXBpbGlu
Z1BsYW5zRm9yVk0oVk0mKTsKQEAgLTE0NCw3ICsxNDQsNyBAQCBXb3JrbGlzdCYgZXhpc3RpbmdX
b3JrbGlzdEZvckluZGV4KHVuc2lnCiB2b2lkIGNvbXBsZXRlQWxsUGxhbnNGb3JWTShWTSYpOwog
CiB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgotdm9pZCBpdGVyYXRlQ29kZUJsb2Nrc0ZvckdDKFZN
JiwgY29uc3QgRnVuYyYpOwordm9pZCBpdGVyYXRlQ29kZUJsb2Nrc0ZvckdDKEFic3RyYWN0U2xv
dFZpc2l0b3ImLCBWTSYsIGNvbnN0IEZ1bmMmKTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRG
RwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0SW5saW5lcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3RJbmxp
bmVzLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
V29ya2xpc3RJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDE3LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMywzMCArMzMsMzAgQEAgbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogI2lmIEVOQUJMRShERkdfSklUKQogCiB0ZW1w
bGF0ZTx0eXBlbmFtZSBGdW5jPgotdm9pZCBpdGVyYXRlQ29kZUJsb2Nrc0ZvckdDKFZNJiB2bSwg
Y29uc3QgRnVuYyYgZnVuYykKK3ZvaWQgaXRlcmF0ZUNvZGVCbG9ja3NGb3JHQyhBYnN0cmFjdFNs
b3RWaXNpdG9yJiB2aXNpdG9yLCBWTSYgdm0sIGNvbnN0IEZ1bmMmIGZ1bmMpCiB7CiAgICAgZm9y
ICh1bnNpZ25lZCBpID0gREZHOjpudW1iZXJPZldvcmtsaXN0cygpOyBpLS07KSB7CiAgICAgICAg
IGlmIChERkc6OldvcmtsaXN0KiB3b3JrbGlzdCA9IERGRzo6ZXhpc3RpbmdXb3JrbGlzdEZvcklu
ZGV4T3JOdWxsKGkpKQotICAgICAgICAgICAgd29ya2xpc3QtPml0ZXJhdGVDb2RlQmxvY2tzRm9y
R0Modm0sIGZ1bmMpOworICAgICAgICAgICAgd29ya2xpc3QtPml0ZXJhdGVDb2RlQmxvY2tzRm9y
R0ModmlzaXRvciwgdm0sIGZ1bmMpOwogICAgIH0KIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgRnVu
Yz4KLXZvaWQgV29ya2xpc3Q6Oml0ZXJhdGVDb2RlQmxvY2tzRm9yR0MoVk0mIHZtLCBjb25zdCBG
dW5jJiBmdW5jKQordm9pZCBXb3JrbGlzdDo6aXRlcmF0ZUNvZGVCbG9ja3NGb3JHQyhBYnN0cmFj
dFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBWTSYgdm0sIGNvbnN0IEZ1bmMmIGZ1bmMpCiB7CiAgICAg
TG9ja0hvbGRlciBsb2NrZXIoKm1fbG9jayk7CiAgICAgZm9yIChQbGFuTWFwOjppdGVyYXRvciBp
dGVyID0gbV9wbGFucy5iZWdpbigpOyBpdGVyICE9IG1fcGxhbnMuZW5kKCk7ICsraXRlcikgewog
ICAgICAgICBQbGFuKiBwbGFuID0gaXRlci0+dmFsdWUuZ2V0KCk7CiAgICAgICAgIGlmIChwbGFu
LT52bSgpICE9ICZ2bSkKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBwbGFuLT5pdGVy
YXRlQ29kZUJsb2Nrc0ZvckdDKGZ1bmMpOworICAgICAgICBwbGFuLT5pdGVyYXRlQ29kZUJsb2Nr
c0ZvckdDKHZpc2l0b3IsIGZ1bmMpOwogICAgIH0KIH0KIAogI2Vsc2UgLy8gRU5BQkxFKERGR19K
SVQpCiAKIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+Ci12b2lkIGl0ZXJhdGVDb2RlQmxvY2tzRm9y
R0MoVk0mLCBjb25zdCBGdW5jJikKK3ZvaWQgaXRlcmF0ZUNvZGVCbG9ja3NGb3JHQyhBYnN0cmFj
dFNsb3RWaXNpdG9yJiwgVk0mLCBjb25zdCBGdW5jJikKIHsKIH0KIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvQWJzdHJhY3RTbG90VmlzaXRvci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Fic3RyYWN0U2xvdFZpc2l0b3IuaAkobm9uZXhpc3Rl
bnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9BYnN0cmFjdFNsb3RWaXNpdG9yLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkpTQ0pTVmFs
dWUuaCIKKyNpbmNsdWRlICJNYXJrU3RhY2suaCIKKyNpbmNsdWRlICJSb290TWFya1JlYXNvbi5o
IgorI2luY2x1ZGUgIlZpc2l0UmFjZUtleS5oIgorI2luY2x1ZGUgPHd0Zi9Db25jdXJyZW50UHRy
SGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9TaGFyZWRUYXNrLmg+CisjaW5jbHVkZSA8d3RmL3Rl
eHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgQ29uc2VydmF0aXZlUm9v
dHM7CitjbGFzcyBIZWFwOworY2xhc3MgSGVhcENlbGw7CitjbGFzcyBKU0NlbGw7CitjbGFzcyBN
YXJrZWRCbG9jazsKK2NsYXNzIE1hcmtpbmdDb25zdHJhaW50OworY2xhc3MgTWFya2luZ0NvbnN0
cmFpbnRTb2x2ZXI7CitjbGFzcyBQcmVjaXNlQWxsb2NhdGlvbjsKK2NsYXNzIFNsb3RWaXNpdG9y
OworY2xhc3MgVk07CitjbGFzcyBWZXJpZmllclNsb3RWaXNpdG9yOwordGVtcGxhdGU8dHlwZW5h
bWUgVD4gY2xhc3MgV2VhazsKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFRyYWl0cz4g
Y2xhc3MgV3JpdGVCYXJyaWVyQmFzZTsKKworY2xhc3MgQWJzdHJhY3RTbG90VmlzaXRvciB7Cisg
ICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQWJzdHJhY3RTbG90VmlzaXRvcik7CisgICAgV1RGX01B
S0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgY2xhc3MgQ29udGV4dCB7CisgICAgcHVi
bGljOgorICAgICAgICBDb250ZXh0KEFic3RyYWN0U2xvdFZpc2l0b3ImLCBIZWFwQ2VsbCopOwor
ICAgICAgICB+Q29udGV4dCgpOworICAgICAgICBIZWFwQ2VsbCogY2VsbCgpIGNvbnN0IHsgcmV0
dXJuIG1fY2VsbDsgfQorICAgIHByaXZhdGU6CisgICAgICAgIEFic3RyYWN0U2xvdFZpc2l0b3Im
IG1fdmlzaXRvcjsKKyAgICAgICAgSGVhcENlbGwqIG1fY2VsbDsKKyAgICAgICAgQ29udGV4dCog
bV9wcmV2aW91czsKKyAgICB9OworCisgICAgY2xhc3MgU3VwcHJlc3NHQ1ZlcmlmaWVyU2NvcGUg
eworICAgIHB1YmxpYzoKKyAgICAgICAgU3VwcHJlc3NHQ1ZlcmlmaWVyU2NvcGUoQWJzdHJhY3RT
bG90VmlzaXRvciYgdmlzaXRvcikKKyAgICAgICAgICAgIDogbV92aXNpdG9yKHZpc2l0b3IpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVCghbV92aXNpdG9yLm1fc3VwcHJlc3NWZXJpZmll
cik7CisgICAgICAgICAgICBtX3Zpc2l0b3IubV9zdXBwcmVzc1ZlcmlmaWVyID0gdHJ1ZTsKKyAg
ICAgICAgfQorICAgICAgICB+U3VwcHJlc3NHQ1ZlcmlmaWVyU2NvcGUoKSB7IG1fdmlzaXRvci5t
X3N1cHByZXNzVmVyaWZpZXIgPSBmYWxzZTsgfQorICAgIHByaXZhdGU6CisgICAgICAgIEFic3Ry
YWN0U2xvdFZpc2l0b3ImIG1fdmlzaXRvcjsKKyAgICB9OworCisgICAgY2xhc3MgRGVmYXVsdE1h
cmtpbmdWaW9sYXRpb25Bc3NlcnRpb25TY29wZSB7CisgICAgcHVibGljOgorICAgICAgICBEZWZh
dWx0TWFya2luZ1Zpb2xhdGlvbkFzc2VydGlvblNjb3BlKEFic3RyYWN0U2xvdFZpc2l0b3ImKSB7
IH0KKyAgICB9OworCisgICAgdmlydHVhbCB+QWJzdHJhY3RTbG90VmlzaXRvcigpID0gZGVmYXVs
dDsKKworICAgIE1hcmtTdGFja0FycmF5JiBjb2xsZWN0b3JNYXJrU3RhY2soKSB7IHJldHVybiBt
X2NvbGxlY3RvclN0YWNrOyB9CisgICAgTWFya1N0YWNrQXJyYXkmIG11dGF0b3JNYXJrU3RhY2so
KSB7IHJldHVybiBtX211dGF0b3JTdGFjazsgfQorICAgIGNvbnN0IE1hcmtTdGFja0FycmF5JiBj
b2xsZWN0b3JNYXJrU3RhY2soKSBjb25zdCB7IHJldHVybiBtX2NvbGxlY3RvclN0YWNrOyB9Cisg
ICAgY29uc3QgTWFya1N0YWNrQXJyYXkmIG11dGF0b3JNYXJrU3RhY2soKSBjb25zdCB7IHJldHVy
biBtX211dGF0b3JTdGFjazsgfQorCisgICAgYm9vbCBpc0VtcHR5KCkgeyByZXR1cm4gbV9jb2xs
ZWN0b3JTdGFjay5pc0VtcHR5KCkgJiYgbV9tdXRhdG9yU3RhY2suaXNFbXB0eSgpOyB9CisKKyAg
ICBWTSYgdm0oKTsKKyAgICBjb25zdCBWTSYgdm0oKSBjb25zdDsKKyAgICBIZWFwKiBoZWFwKCkg
Y29uc3Q7CisKKyAgICB2aXJ0dWFsIHZvaWQgYXBwZW5kKGNvbnN0IENvbnNlcnZhdGl2ZVJvb3Rz
JikgPSAwOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVHJhaXRzPiB2b2lk
IGFwcGVuZChjb25zdCBXcml0ZUJhcnJpZXJCYXNlPFQsIFRyYWl0cz4mKTsKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBUcmFpdHM+IHZvaWQgYXBwZW5kSGlkZGVuKGNvbnN0IFdy
aXRlQmFycmllckJhc2U8VCwgVHJhaXRzPiYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEl0ZXJh
dG9yPiB2b2lkIGFwcGVuZChJdGVyYXRvciBiZWdpbiAsIEl0ZXJhdG9yIGVuZCk7CisgICAgQUxX
QVlTX0lOTElORSB2b2lkIGFwcGVuZFZhbHVlcyhjb25zdCBXcml0ZUJhcnJpZXJCYXNlPFVua25v
d24sIFJhd1ZhbHVlVHJhaXRzPFVua25vd24+PiosIHNpemVfdCBjb3VudCk7CisgICAgQUxXQVlT
X0lOTElORSB2b2lkIGFwcGVuZFZhbHVlc0hpZGRlbihjb25zdCBXcml0ZUJhcnJpZXJCYXNlPFVu
a25vd24sIFJhd1ZhbHVlVHJhaXRzPFVua25vd24+PiosIHNpemVfdCBjb3VudCk7CisKKyAgICAv
LyBUaGVzZSBkb24ndCByZXF1aXJlIHlvdSB0byBwcm92ZSB0aGF0IHlvdSBoYXZlIGEgV3JpdGVC
YXJyaWVyPD4uIFRoYXQgbWFrZXMgc2Vuc2UKKyAgICAvLyBmb3I6CisgICAgLy8KKyAgICAvLyAt
IHJvb3RzLgorICAgIC8vIC0gc29waGlzdGljYXRlZCBkYXRhIHN0cnVjdHVyZXMgdGhhdCBiYXJy
aWVyIHRocm91Z2ggb3RoZXIgbWVhbnMgKGxpa2UgREZHOjpQbGFuIGFuZAorICAgIC8vICAgZnJp
ZW5kcykuCisgICAgLy8KKyAgICAvLyBJZiB5b3UgYXJlIG5vdCBhIHJvb3QgYW5kIHlvdSBkb24n
dCBrbm93IHdoYXQga2luZCBvZiBiYXJyaWVyIHlvdSBoYXZlLCB0aGVuIHlvdQorICAgIC8vIHNo
b3VsZG4ndCBjYWxsIHRoZXNlIG1ldGhvZHMuCisgICAgQUxXQVlTX0lOTElORSB2b2lkIGFwcGVu
ZFVuYmFycmllcmVkKEpTVmFsdWUpOworICAgIEFMV0FZU19JTkxJTkUgdm9pZCBhcHBlbmRVbmJh
cnJpZXJlZChKU1ZhbHVlKiwgc2l6ZV90KTsKKyAgICB2aXJ0dWFsIHZvaWQgYXBwZW5kVW5iYXJy
aWVyZWQoSlNDZWxsKikgPSAwOworCisgICAgaW5saW5lIGJvb2wgYWRkT3BhcXVlUm9vdCh2b2lk
Kik7IC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgcm9vdCB3YXMgbmV3LgorICAgIGlubGluZSBib29s
IGNvbnRhaW5zT3BhcXVlUm9vdCh2b2lkKikgY29uc3Q7CisgICAgdm9pZCBzZXRJZ25vcmVOZXdP
cGFxdWVSb290cyhib29sIHZhbHVlKSB7IG1faWdub3JlTmV3T3BhcXVlUm9vdHMgPSB2YWx1ZTsg
fQorCisgICAgdmlydHVhbCBib29sIGlzRmlyc3RWaXNpdCgpIGNvbnN0ID0gMDsKKworICAgIHZp
cnR1YWwgYm9vbCBpc01hcmtlZChjb25zdCB2b2lkKikgY29uc3QgPSAwOworICAgIHZpcnR1YWwg
Ym9vbCBpc01hcmtlZChNYXJrZWRCbG9jayYsIEhlYXBDZWxsKikgY29uc3QgPSAwOworICAgIHZp
cnR1YWwgYm9vbCBpc01hcmtlZChQcmVjaXNlQWxsb2NhdGlvbiYsIEhlYXBDZWxsKikgY29uc3Qg
PSAwOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICB2b2lkIGFwcGVuZChjb25zdCBX
ZWFrPFQ+Jik7CisKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgYXBwZW5kSGlkZGVuVW5iYXJyaWVy
ZWQoSlNWYWx1ZSk7CisgICAgdmlydHVhbCB2b2lkIGFwcGVuZEhpZGRlblVuYmFycmllcmVkKEpT
Q2VsbCopID0gMDsKKworICAgIHNpemVfdCB2aXNpdENvdW50KCkgY29uc3QgeyByZXR1cm4gbV92
aXNpdENvdW50OyB9CisKKyAgICB2b2lkIGFkZFRvVmlzaXRDb3VudChzaXplX3QgdmFsdWUpIHsg
bV92aXNpdENvdW50ICs9IHZhbHVlOyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYWRkUGFyYWxsZWxD
b25zdHJhaW50VGFzayhSZWZQdHI8U2hhcmVkVGFzazx2b2lkKEFic3RyYWN0U2xvdFZpc2l0b3Im
KT4+KSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgbWFya0F1eGlsaWFyeShjb25zdCB2b2lkKiBi
YXNlKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgcmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKHNp
emVfdCkgPSAwOworI2lmIEVOQUJMRShSRVNPVVJDRV9VU0FHRSkKKyAgICB2aXJ0dWFsIHZvaWQg
cmVwb3J0RXh0ZXJuYWxNZW1vcnlWaXNpdGVkKHNpemVfdCkgPSAwOworI2VuZGlmCisKKyAgICB2
aXJ0dWFsIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0ID0gMDsKKworICAgIFJvb3RNYXJr
UmVhc29uIHJvb3RNYXJrUmVhc29uKCkgY29uc3QgeyByZXR1cm4gbV9yb290TWFya1JlYXNvbjsg
fQorICAgIHZvaWQgc2V0Um9vdE1hcmtSZWFzb24oUm9vdE1hcmtSZWFzb24gcmVhc29uKSB7IG1f
cm9vdE1hcmtSZWFzb24gPSByZWFzb247IH0KKworICAgIHZpcnR1YWwgYm9vbCBtdXRhdG9ySXNT
dG9wcGVkKCkgY29uc3QgPSAwOworCisgICAgdmlydHVhbCB2b2lkIGRpZFJhY2UoY29uc3QgVmlz
aXRSYWNlS2V5JikgPSAwOworICAgIHZvaWQgZGlkUmFjZShKU0NlbGwqIGNlbGwsIGNvbnN0IGNo
YXIqIHJlYXNvbikgeyBkaWRSYWNlKFZpc2l0UmFjZUtleShjZWxsLCByZWFzb24pKTsgfQorCisg
ICAgdmlydHVhbCB2b2lkIHZpc2l0QXNDb25zdHJhaW50KGNvbnN0IEpTQ2VsbCopID0gMDsKKwor
ICAgIGNvbnN0IGNoYXIqIGNvZGVOYW1lKCkgY29uc3QgeyByZXR1cm4gbV9jb2RlTmFtZS5kYXRh
KCk7IH0KKworcHJvdGVjdGVkOgorICAgIGlubGluZSBBYnN0cmFjdFNsb3RWaXNpdG9yKEhlYXAm
LCBDU3RyaW5nIGNvZGVOYW1lLCBDb25jdXJyZW50UHRySGFzaFNldCYpOworCisgICAgSGVhcENl
bGwqIHBhcmVudENlbGwoKSBjb25zdDsKKyAgICB2b2lkIHJlc2V0KCk7CisKKyAgICBNYXJrU3Rh
Y2tBcnJheSBtX2NvbGxlY3RvclN0YWNrOworICAgIE1hcmtTdGFja0FycmF5IG1fbXV0YXRvclN0
YWNrOworCisgICAgc2l6ZV90IG1fdmlzaXRDb3VudCB7IDAgfTsKKworICAgIEhlYXAmIG1faGVh
cDsKKyAgICBDb250ZXh0KiBtX2NvbnRleHQgeyBudWxscHRyIH07CisgICAgQ1N0cmluZyBtX2Nv
ZGVOYW1lOworCisgICAgTWFya2luZ0NvbnN0cmFpbnQqIG1fY3VycmVudENvbnN0cmFpbnQgeyBu
dWxscHRyIH07CisgICAgTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXIqIG1fY3VycmVudFNvbHZlciB7
IG51bGxwdHIgfTsKKyAgICBDb25jdXJyZW50UHRySGFzaFNldCYgbV9vcGFxdWVSb290czsKKwor
ICAgIFJvb3RNYXJrUmVhc29uIG1fcm9vdE1hcmtSZWFzb24geyBSb290TWFya1JlYXNvbjo6Tm9u
ZSB9OworICAgIGJvb2wgbV9zdXBwcmVzc1ZlcmlmaWVyIHsgZmFsc2UgfTsKKyAgICBib29sIG1f
aWdub3JlTmV3T3BhcXVlUm9vdHMgeyBmYWxzZSB9OyAvLyBVc2VmdWwgYXMgYSBkZWJ1Z2dpbmcg
bW9kZS4KKworICAgIGZyaWVuZCBjbGFzcyBNYXJraW5nQ29uc3RyYWludFNvbHZlcjsKK307CisK
K2NsYXNzIFNldFJvb3RNYXJrUmVhc29uU2NvcGUgeworcHVibGljOgorICAgIFNldFJvb3RNYXJr
UmVhc29uU2NvcGUoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvciwgUm9vdE1hcmtSZWFzb24g
cmVhc29uKQorICAgICAgICA6IG1fdmlzaXRvcih2aXNpdG9yKQorICAgICAgICAsIG1fcHJldmlv
dXNSZWFzb24odmlzaXRvci5yb290TWFya1JlYXNvbigpKQorICAgIHsKKyAgICAgICAgbV92aXNp
dG9yLnNldFJvb3RNYXJrUmVhc29uKHJlYXNvbik7CisgICAgfQorCisgICAgflNldFJvb3RNYXJr
UmVhc29uU2NvcGUoKQorICAgIHsKKyAgICAgICAgbV92aXNpdG9yLnNldFJvb3RNYXJrUmVhc29u
KG1fcHJldmlvdXNSZWFzb24pOworICAgIH0KKworcHJpdmF0ZToKKyAgICBBYnN0cmFjdFNsb3RW
aXNpdG9yJiBtX3Zpc2l0b3I7CisgICAgUm9vdE1hcmtSZWFzb24gbV9wcmV2aW91c1JlYXNvbjsK
K307CisKK30gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvQWJzdHJhY3RTbG90VmlzaXRvcklubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9BYnN0cmFjdFNsb3RWaXNpdG9ySW5saW5lcy5oCShub25leGlzdGVu
dCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Fic3RyYWN0U2xvdFZpc2l0b3JJbmxp
bmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNTQgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkFi
c3RyYWN0U2xvdFZpc2l0b3IuaCIKKyNpbmNsdWRlICJIZWFwLmgiCisjaW5jbHVkZSAiV2Vha0lu
bGluZXMuaCIKKyNpbmNsdWRlICJXcml0ZUJhcnJpZXIuaCIKKworbmFtZXNwYWNlIEpTQyB7CisK
K2lubGluZSBBYnN0cmFjdFNsb3RWaXNpdG9yOjpDb250ZXh0OjpDb250ZXh0KEFic3RyYWN0U2xv
dFZpc2l0b3ImIHZpc2l0b3IsIEhlYXBDZWxsKiBjZWxsKQorICAgIDogbV92aXNpdG9yKHZpc2l0
b3IpCisgICAgLCBtX2NlbGwoY2VsbCkKK3sKKyAgICBtX3ByZXZpb3VzID0gbV92aXNpdG9yLm1f
Y29udGV4dDsKKyAgICBtX3Zpc2l0b3IubV9jb250ZXh0ID0gdGhpczsKK30KKworaW5saW5lIEFi
c3RyYWN0U2xvdFZpc2l0b3I6OkNvbnRleHQ6On5Db250ZXh0KCkKK3sKKyAgICBtX3Zpc2l0b3Iu
bV9jb250ZXh0ID0gbV9wcmV2aW91czsKK30KKworaW5saW5lIEFic3RyYWN0U2xvdFZpc2l0b3I6
OkFic3RyYWN0U2xvdFZpc2l0b3IoSGVhcCYgaGVhcCwgQ1N0cmluZyBjb2RlTmFtZSwgQ29uY3Vy
cmVudFB0ckhhc2hTZXQmIG9wYXF1ZVJvb3RzKQorICAgIDogbV9oZWFwKGhlYXApCisgICAgLCBt
X2NvZGVOYW1lKGNvZGVOYW1lKQorICAgICwgbV9vcGFxdWVSb290cyhvcGFxdWVSb290cykKK3sK
K30KKworaW5saW5lIEhlYXAqIEFic3RyYWN0U2xvdFZpc2l0b3I6OmhlYXAoKSBjb25zdAorewor
ICAgIHJldHVybiAmbV9oZWFwOworfQorCitpbmxpbmUgVk0mIEFic3RyYWN0U2xvdFZpc2l0b3I6
OnZtKCkKK3sKKyAgICByZXR1cm4gbV9oZWFwLnZtKCk7Cit9CisKK2lubGluZSBjb25zdCBWTSYg
QWJzdHJhY3RTbG90VmlzaXRvcjo6dm0oKSBjb25zdAoreworICAgIHJldHVybiBtX2hlYXAudm0o
KTsKK30KKworaW5saW5lIGJvb2wgQWJzdHJhY3RTbG90VmlzaXRvcjo6YWRkT3BhcXVlUm9vdCh2
b2lkKiBwdHIpCit7CisgICAgaWYgKCFwdHIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBp
ZiAobV9pZ25vcmVOZXdPcGFxdWVSb290cykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlm
ICghbV9vcGFxdWVSb290cy5hZGQocHRyKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIG1f
dmlzaXRDb3VudCsrOworICAgIHJldHVybiB0cnVlOworfQorCitpbmxpbmUgYm9vbCBBYnN0cmFj
dFNsb3RWaXNpdG9yOjpjb250YWluc09wYXF1ZVJvb3Qodm9pZCogcHRyKSBjb25zdAoreworICAg
IHJldHVybiBtX29wYXF1ZVJvb3RzLmNvbnRhaW5zKHB0cik7Cit9CisKK3RlbXBsYXRlPHR5cGVu
YW1lIFQ+CitBTFdBWVNfSU5MSU5FIHZvaWQgQWJzdHJhY3RTbG90VmlzaXRvcjo6YXBwZW5kKGNv
bnN0IFdlYWs8VD4mIHdlYWspCit7CisgICAgYXBwZW5kVW5iYXJyaWVyZWQod2Vhay5nZXQoKSk7
Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFRyYWl0cz4KK0FMV0FZU19JTkxJ
TkUgdm9pZCBBYnN0cmFjdFNsb3RWaXNpdG9yOjphcHBlbmQoY29uc3QgV3JpdGVCYXJyaWVyQmFz
ZTxULCBUcmFpdHM+JiBzbG90KQoreworICAgIGFwcGVuZFVuYmFycmllcmVkKHNsb3QuZ2V0KCkp
OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBUcmFpdHM+CitBTFdBWVNfSU5M
SU5FIHZvaWQgQWJzdHJhY3RTbG90VmlzaXRvcjo6YXBwZW5kSGlkZGVuKGNvbnN0IFdyaXRlQmFy
cmllckJhc2U8VCwgVHJhaXRzPiYgc2xvdCkKK3sKKyAgICBhcHBlbmRIaWRkZW5VbmJhcnJpZXJl
ZChzbG90LmdldCgpKTsKK30KKworQUxXQVlTX0lOTElORSB2b2lkIEFic3RyYWN0U2xvdFZpc2l0
b3I6OmFwcGVuZEhpZGRlblVuYmFycmllcmVkKEpTVmFsdWUgdmFsdWUpCit7CisgICAgaWYgKHZh
bHVlLmlzQ2VsbCgpKQorICAgICAgICBhcHBlbmRIaWRkZW5VbmJhcnJpZXJlZCh2YWx1ZS5hc0Nl
bGwoKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEl0ZXJhdG9yPgorQUxXQVlTX0lOTElORSB2
b2lkIEFic3RyYWN0U2xvdFZpc2l0b3I6OmFwcGVuZChJdGVyYXRvciBiZWdpbiwgSXRlcmF0b3Ig
ZW5kKQoreworICAgIGZvciAoYXV0byBpdCA9IGJlZ2luOyBpdCAhPSBlbmQ7ICsraXQpCisgICAg
ICAgIGFwcGVuZCgqaXQpOworfQorCitBTFdBWVNfSU5MSU5FIHZvaWQgQWJzdHJhY3RTbG90Vmlz
aXRvcjo6YXBwZW5kVmFsdWVzKGNvbnN0IFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4qIGJhcnJp
ZXJzLCBzaXplX3QgY291bnQpCit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3VudDsg
KytpKQorICAgICAgICBhcHBlbmQoYmFycmllcnNbaV0pOworfQorCitBTFdBWVNfSU5MSU5FIHZv
aWQgQWJzdHJhY3RTbG90VmlzaXRvcjo6YXBwZW5kVmFsdWVzSGlkZGVuKGNvbnN0IFdyaXRlQmFy
cmllckJhc2U8VW5rbm93bj4qIGJhcnJpZXJzLCBzaXplX3QgY291bnQpCit7CisgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKQorICAgICAgICBhcHBlbmRIaWRkZW4oYmFycmll
cnNbaV0pOworfQorCitBTFdBWVNfSU5MSU5FIHZvaWQgQWJzdHJhY3RTbG90VmlzaXRvcjo6YXBw
ZW5kVW5iYXJyaWVyZWQoSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUuaXNDZWxsKCkp
CisgICAgICAgIGFwcGVuZFVuYmFycmllcmVkKHZhbHVlLmFzQ2VsbCgpKTsKK30KKworQUxXQVlT
X0lOTElORSB2b2lkIEFic3RyYWN0U2xvdFZpc2l0b3I6OmFwcGVuZFVuYmFycmllcmVkKEpTVmFs
dWUqIHNsb3QsIHNpemVfdCBjb3VudCkKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gY291bnQ7IGkt
LTspCisgICAgICAgIGFwcGVuZFVuYmFycmllcmVkKHNsb3RbaV0pOworfQorCitBTFdBWVNfSU5M
SU5FIEhlYXBDZWxsKiBBYnN0cmFjdFNsb3RWaXNpdG9yOjpwYXJlbnRDZWxsKCkgY29uc3QKK3sK
KyAgICBpZiAoIW1fY29udGV4dCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJu
IG1fY29udGV4dC0+Y2VsbCgpOworfQorCitBTFdBWVNfSU5MSU5FIHZvaWQgQWJzdHJhY3RTbG90
VmlzaXRvcjo6cmVzZXQoKQoreworICAgIG1fdmlzaXRDb3VudCA9IDA7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGFuZGxlU2V0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IYW5kbGVTZXQuY3Bw
CShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IYW5kbGVT
ZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMS0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTYsNyArNTYsNyBAQCB2b2lkIEhhbmRsZVNldDo6
Z3JvdygpCiAgICAgfQogfQogCi12b2lkIEhhbmRsZVNldDo6dmlzaXRTdHJvbmdIYW5kbGVzKFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBIYW5kbGVTZXQ6OnZpc2l0U3Ryb25nSGFuZGxlcyhB
YnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIE5vZGUqIGVuZCA9IG1fc3Ryb25n
TGlzdC5lbmQoKTsKICAgICBmb3IgKE5vZGUqIG5vZGUgPSBtX3N0cm9uZ0xpc3QuYmVnaW4oKTsg
bm9kZSAhPSBlbmQ7IG5vZGUgPSBub2RlLT5uZXh0KCkpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0hhbmRsZVNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0hhbmRsZVNldC5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9IYW5kbGVTZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM1LDEwICszNSwx
MCBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAorY2xhc3MgQWJzdHJhY3RTbG90VmlzaXRvcjsKIGNs
YXNzIEhhbmRsZVNldDsKIGNsYXNzIFZNOwogY2xhc3MgSlNWYWx1ZTsKLWNsYXNzIFNsb3RWaXNp
dG9yOwogCiBjbGFzcyBIYW5kbGVOb2RlIHsKIHB1YmxpYzoKQEAgLTczLDcgKzczLDcgQEAgcHVi
bGljOgogICAgIEhhbmRsZVNsb3QgYWxsb2NhdGUoKTsKICAgICB2b2lkIGRlYWxsb2NhdGUoSGFu
ZGxlU2xvdCk7CiAKLSAgICB2b2lkIHZpc2l0U3Ryb25nSGFuZGxlcyhTbG90VmlzaXRvciYpOwor
ICAgIHZvaWQgdmlzaXRTdHJvbmdIYW5kbGVzKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKIAogICAg
IEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgd3JpdGVCYXJyaWVyKEhhbmRsZVNsb3QsIGNvbnN0IEpT
VmFsdWUmKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHJldmlzaW9u
IDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC03Miw2ICs3Miw3IEBACiAjaW5jbHVkZSAiVHlwZVByb2ZpbGVyLmgiCiAjaW5j
bHVkZSAiVHlwZVByb2ZpbGVyTG9nLmgiCiAjaW5jbHVkZSAiVk0uaCIKKyNpbmNsdWRlICJWZXJp
ZmllclNsb3RWaXNpdG9ySW5saW5lcy5oIgogI2luY2x1ZGUgIldlYWtNYXBJbXBsSW5saW5lcy5o
IgogI2luY2x1ZGUgIldlYWtTZXRJbmxpbmVzLmgiCiAjaW5jbHVkZSA8YWxnb3JpdGhtPgpAQCAt
NjQ0LDE4ICs2NDUsMTggQEAgdm9pZCBIZWFwOjpjb21wbGV0ZUFsbEpJVFBsYW5zKCkKIH0KIAog
dGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KLXZvaWQgSGVhcDo6aXRlcmF0ZUV4ZWN1dGluZ0FuZENv
bXBpbGluZ0NvZGVCbG9ja3MoY29uc3QgRnVuYyYgZnVuYykKK3ZvaWQgSGVhcDo6aXRlcmF0ZUV4
ZWN1dGluZ0FuZENvbXBpbGluZ0NvZGVCbG9ja3MoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRv
ciwgY29uc3QgRnVuYyYgZnVuYykKIHsKICAgICBtX2NvZGVCbG9ja3MtPml0ZXJhdGVDdXJyZW50
bHlFeGVjdXRpbmcoZnVuYyk7CiAgICAgaWYgKE9wdGlvbnM6OnVzZUpJVCgpKQotICAgICAgICBE
Rkc6Oml0ZXJhdGVDb2RlQmxvY2tzRm9yR0MobV92bSwgZnVuYyk7CisgICAgICAgIERGRzo6aXRl
cmF0ZUNvZGVCbG9ja3NGb3JHQyh2aXNpdG9yLCBtX3ZtLCBmdW5jKTsKIH0KIAogdGVtcGxhdGU8
dHlwZW5hbWUgRnVuYz4KLXZvaWQgSGVhcDo6aXRlcmF0ZUV4ZWN1dGluZ0FuZENvbXBpbGluZ0Nv
ZGVCbG9ja3NXaXRob3V0SG9sZGluZ0xvY2tzKGNvbnN0IEZ1bmMmIGZ1bmMpCit2b2lkIEhlYXA6
Oml0ZXJhdGVFeGVjdXRpbmdBbmRDb21waWxpbmdDb2RlQmxvY2tzV2l0aG91dEhvbGRpbmdMb2Nr
cyhBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBGdW5jJiBmdW5jKQogewogICAg
IFZlY3RvcjxDb2RlQmxvY2sqLCAyNTY+IGNvZGVCbG9ja3M7Ci0gICAgaXRlcmF0ZUV4ZWN1dGlu
Z0FuZENvbXBpbGluZ0NvZGVCbG9ja3MoCisgICAgaXRlcmF0ZUV4ZWN1dGluZ0FuZENvbXBpbGlu
Z0NvZGVCbG9ja3ModmlzaXRvciwKICAgICAgICAgWyZdIChDb2RlQmxvY2sqIGNvZGVCbG9jaykg
ewogICAgICAgICAgICAgY29kZUJsb2Nrcy5hcHBlbmQoY29kZUJsb2NrKTsKICAgICAgICAgfSk7
CkBAIC03MzMsMTQgKzczNCw2IEBAIHZvaWQgSGVhcDo6cmVtb3ZlRGVhZENvbXBpbGVyV29ya2xp
c3RFbnQKICNlbmRpZgogfQogCi1ib29sIEhlYXA6OmlzQW5hbHl6aW5nSGVhcCgpIGNvbnN0Ci17
Ci0gICAgSGVhcFByb2ZpbGVyKiBoZWFwUHJvZmlsZXIgPSBtX3ZtLmhlYXBQcm9maWxlcigpOwot
ICAgIGlmIChVTkxJS0VMWShoZWFwUHJvZmlsZXIpKQotICAgICAgICByZXR1cm4gaGVhcFByb2Zp
bGVyLT5hY3RpdmVIZWFwQW5hbHl6ZXIoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KIHN0cnVj
dCBHYXRoZXJFeHRyYUhlYXBEYXRhIDogTWFya2VkQmxvY2s6OkNvdW50RnVuY3RvciB7CiAgICAg
R2F0aGVyRXh0cmFIZWFwRGF0YShWTSYgdm0sIEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCiAgICAg
ICAgIDogbV92bSh2bSkKQEAgLTE0ODUsMTQgKzE0NzgsMjEgQEAgTkVWRVJfSU5MSU5FIGJvb2wg
SGVhcDo6cnVuRW5kUGhhc2UoR0NDbwogICAgIH0KICAgICBtX2hlbHBlckNsaWVudC5maW5pc2go
KTsKICAgICAKLSAgICBpdGVyYXRlRXhlY3V0aW5nQW5kQ29tcGlsaW5nQ29kZUJsb2NrcygKKyAg
ICBBU1NFUlQobV9tdXRhdG9yTWFya1N0YWNrLT5pc0VtcHR5KCkpOworICAgIEFTU0VSVChtX3Jh
Y2VNYXJrU3RhY2stPmlzRW1wdHkoKSk7CisKKyAgICBTbG90VmlzaXRvciYgdmlzaXRvciA9ICpt
X2NvbGxlY3RvclNsb3RWaXNpdG9yOworICAgIGl0ZXJhdGVFeGVjdXRpbmdBbmRDb21waWxpbmdD
b2RlQmxvY2tzKHZpc2l0b3IsCiAgICAgICAgIFsmXSAoQ29kZUJsb2NrKiBjb2RlQmxvY2spIHsK
ICAgICAgICAgICAgIHdyaXRlQmFycmllcihjb2RlQmxvY2spOwogICAgICAgICB9KTsKLSAgICAg
ICAgCisKICAgICB1cGRhdGVPYmplY3RDb3VudHMoKTsKICAgICBlbmRNYXJraW5nKCk7CiAKKyAg
ICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6dmVyaWZ5R0MoKSkpCisgICAgICAgIHZlcmlmeUdDKCk7
CisKICAgICBpZiAoVU5MSUtFTFkobV92ZXJpZmllcikpIHsKICAgICAgICAgbV92ZXJpZmllci0+
Z2F0aGVyTGl2ZUNlbGxzKEhlYXBWZXJpZmllcjo6UGhhc2U6OkFmdGVyTWFya2luZyk7CiAgICAg
ICAgIG1fdmVyaWZpZXItPnZlcmlmeShIZWFwVmVyaWZpZXI6OlBoYXNlOjpBZnRlck1hcmtpbmcp
OwpAQCAtMjE3MCw2ICsyMTcwLDExIEBAIHZvaWQgSGVhcDo6c3VzcGVuZENvbXBpbGVyVGhyZWFk
cygpCiAKIHZvaWQgSGVhcDo6d2lsbFN0YXJ0Q29sbGVjdGlvbigpCiB7CisgICAgaWYgKFVOTElL
RUxZKE9wdGlvbnM6OnZlcmlmeUdDKCkpKSB7CisgICAgICAgIG1fdmVyaWZpZXJTbG90VmlzaXRv
ciA9IG1ha2VVbmlxdWU8VmVyaWZpZXJTbG90VmlzaXRvcj4oKnRoaXMpOworICAgICAgICBBU1NF
UlQoIW1faXNNYXJraW5nRm9yR0NWZXJpZmllcik7CisgICAgfQorCiAgICAgZGF0YUxvZ0lmKE9w
dGlvbnM6OmxvZ0dDKCksICI9PiAiKTsKICAgICAKICAgICBpZiAoc2hvdWxkRG9GdWxsQ29sbGVj
dGlvbigpKSB7CkBAIC0yNzAxLDkgKzI3MDYsMTQgQEAgdm9pZCBIZWFwOjphZGRDb3JlQ29uc3Ry
YWludHMoKQogewogICAgIG1fY29uc3RyYWludFNldC0+YWRkKAogICAgICAgICAiQ3MiLCAiQ29u
c2VydmF0aXZlIFNjYW4iLAotICAgICAgICBbdGhpcywgbGFzdFZlcnNpb24gPSBzdGF0aWNfY2Fz
dDx1aW50NjRfdD4oMCldIChTbG90VmlzaXRvciYgdmlzaXRvcikgbXV0YWJsZSB7CisgICAgICAg
IFt0aGlzLCBsYXN0VmVyc2lvbiA9IHN0YXRpY19jYXN0PHVpbnQ2NF90PigwKV0gKEFic3RyYWN0
U2xvdFZpc2l0b3ImIHZpc2l0b3IpIG11dGFibGUgewogICAgICAgICAgICAgYm9vbCBzaG91bGRO
b3RQcm9kdWNlV29yayA9IGxhc3RWZXJzaW9uID09IG1fcGhhc2VWZXJzaW9uOwotICAgICAgICAg
ICAgaWYgKHNob3VsZE5vdFByb2R1Y2VXb3JrKQorCisgICAgICAgICAgICAvLyBGb3IgdGhlIEdD
IFZlcmZpZXIsIHdlIHdvdWxkIGxpa2UgdG8gdXNlIHRoZSBpZGVudGljYWwgc2V0IG9mIGNvbnNl
cnZhdGl2ZSByb290cworICAgICAgICAgICAgLy8gYXMgdGhlIHJlYWwgR0MuIE90aGVyd2lzZSwg
dGhlIEdDIHZlcmlmaWVyIG1heSByZXBvcnQgZmFsc2UgbmVnYXRpdmVzIGR1ZSB0bworICAgICAg
ICAgICAgLy8gdmFyaWF0aW9ucyBpbiBzdGFjayB2YWx1ZXMuIEZvciB0aGlzIHNhbWUgcmVhc29u
LCB3ZSB3aWxsIHNraXAgdGhpcyBjb25zdHJhaW50CisgICAgICAgICAgICAvLyB3aGVuIHdlJ3Jl
IHJ1bm5pbmcgdGhlIEdDIHZlcmlmaWNhdGlvbiBpbiB0aGUgRW5kIHBoYXNlLgorICAgICAgICAg
ICAgaWYgKHNob3VsZE5vdFByb2R1Y2VXb3JrIHx8IG1faXNNYXJraW5nRm9yR0NWZXJpZmllcikK
ICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAKICAgICAgICAgICAgIFRpbWlu
Z1Njb3BlIHByZUNvbnZlcmdlbmNlVGltaW5nU2NvcGUoKnRoaXMsICJDb25zdHJhaW50OiBjb25z
ZXJ2YXRpdmUgc2NhbiIpOwpAQCAtMjcyMCwxMSArMjczMCwxNSBAQCB2b2lkIEhlYXA6OmFkZENv
cmVDb25zdHJhaW50cygpCiAKICAgICAgICAgICAgICAgICBTZXRSb290TWFya1JlYXNvblNjb3Bl
IHJvb3RTY29wZSh2aXNpdG9yLCBSb290TWFya1JlYXNvbjo6Q29uc2VydmF0aXZlU2Nhbik7CiAg
ICAgICAgICAgICAgICAgdmlzaXRvci5hcHBlbmQoY29uc2VydmF0aXZlUm9vdHMpOworICAgICAg
ICAgICAgICAgIGlmIChVTkxJS0VMWShtX3ZlcmlmaWVyU2xvdFZpc2l0b3IpKQorICAgICAgICAg
ICAgICAgICAgICBtX3ZlcmlmaWVyU2xvdFZpc2l0b3ItPmFwcGVuZChjb25zZXJ2YXRpdmVSb290
cyk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoT3B0aW9uczo6dXNlSklUKCkpIHsK
ICAgICAgICAgICAgICAgICAvLyBKSVRTdHViUm91dGluZXMgbXVzdCBiZSB2aXNpdGVkIGFmdGVy
IHNjYW5uaW5nIENvbnNlcnZhdGl2ZVJvb3RzIHNpbmNlIEpJVFN0dWJSb3V0aW5lcyBkZXBlbmQg
b24gdGhlIGhvb2sgZXhlY3V0ZWQgZHVyaW5nIGdhdGhlcmluZyBDb25zZXJ2YXRpdmVSb290cy4K
ICAgICAgICAgICAgICAgICBTZXRSb290TWFya1JlYXNvblNjb3BlIHJvb3RTY29wZSh2aXNpdG9y
LCBSb290TWFya1JlYXNvbjo6SklUU3R1YlJvdXRpbmVzKTsKICAgICAgICAgICAgICAgICBtX2pp
dFN0dWJSb3V0aW5lcy0+dHJhY2VNYXJrZWRTdHViUm91dGluZXModmlzaXRvcik7CisgICAgICAg
ICAgICAgICAgaWYgKFVOTElLRUxZKG1fdmVyaWZpZXJTbG90VmlzaXRvcikpCisgICAgICAgICAg
ICAgICAgICAgIG1faml0U3R1YlJvdXRpbmVzLT50cmFjZU1hcmtlZFN0dWJSb3V0aW5lcygqbV92
ZXJpZmllclNsb3RWaXNpdG9yKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAg
ICAgICAgbGFzdFZlcnNpb24gPSBtX3BoYXNlVmVyc2lvbjsKQEAgLTI3MzMsOCArMjc0Nyw3IEBA
IHZvaWQgSGVhcDo6YWRkQ29yZUNvbnN0cmFpbnRzKCkKICAgICAKICAgICBtX2NvbnN0cmFpbnRT
ZXQtPmFkZCgKICAgICAgICAgIk1zciIsICJNaXNjIFNtYWxsIFJvb3RzIiwKLSAgICAgICAgW3Ro
aXNdIChTbG90VmlzaXRvciYgdmlzaXRvcikgewotCisgICAgICAgIFt0aGlzXSAoQWJzdHJhY3RT
bG90VmlzaXRvciYgdmlzaXRvcikgewogI2lmIEpTQ19PQkpDX0FQSV9FTkFCTEVECiAgICAgICAg
ICAgICBzY2FuRXh0ZXJuYWxSZW1lbWJlcmVkU2V0KG1fdm0sIHZpc2l0b3IpOwogI2VuZGlmCkBA
IC0yNzY4LDcgKzI3ODEsNyBAQCB2b2lkIEhlYXA6OmFkZENvcmVDb25zdHJhaW50cygpCiAgICAg
CiAgICAgbV9jb25zdHJhaW50U2V0LT5hZGQoCiAgICAgICAgICJTaCIsICJTdHJvbmcgSGFuZGxl
cyIsCi0gICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsKKyAgICAgICAgW3Ro
aXNdIChBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKSB7CiAgICAgICAgICAgICBTZXRSb290
TWFya1JlYXNvblNjb3BlIHJvb3RTY29wZSh2aXNpdG9yLCBSb290TWFya1JlYXNvbjo6U3Ryb25n
SGFuZGxlcyk7CiAgICAgICAgICAgICBtX2hhbmRsZVNldC52aXNpdFN0cm9uZ0hhbmRsZXModmlz
aXRvcik7CiAgICAgICAgIH0sCkBAIC0yNzc2LDcgKzI3ODksNyBAQCB2b2lkIEhlYXA6OmFkZENv
cmVDb25zdHJhaW50cygpCiAgICAgCiAgICAgbV9jb25zdHJhaW50U2V0LT5hZGQoCiAgICAgICAg
ICJEIiwgIkRlYnVnZ2VyIiwKLSAgICAgICAgW3RoaXNdIChTbG90VmlzaXRvciYgdmlzaXRvcikg
eworICAgICAgICBbdGhpc10gKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsKICAgICAg
ICAgICAgIFNldFJvb3RNYXJrUmVhc29uU2NvcGUgcm9vdFNjb3BlKHZpc2l0b3IsIFJvb3RNYXJr
UmVhc29uOjpEZWJ1Z2dlcik7CiAKICNpZiBFTkFCTEUoU0FNUExJTkdfUFJPRklMRVIpCkBAIC0y
Nzk5LDcgKzI4MTIsNyBAQCB2b2lkIEhlYXA6OmFkZENvcmVDb25zdHJhaW50cygpCiAgICAgCiAg
ICAgbV9jb25zdHJhaW50U2V0LT5hZGQoCiAgICAgICAgICJXcyIsICJXZWFrIFNldHMiLAotICAg
ICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiB2aXNpdG9yKSB7CisgICAgICAgIFt0aGlzXSAoQWJz
dHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikgewogICAgICAgICAgICAgU2V0Um9vdE1hcmtSZWFz
b25TY29wZSByb290U2NvcGUodmlzaXRvciwgUm9vdE1hcmtSZWFzb246OldlYWtTZXRzKTsKICAg
ICAgICAgICAgIG1fb2JqZWN0U3BhY2UudmlzaXRXZWFrU2V0cyh2aXNpdG9yKTsKICAgICAgICAg
fSwKQEAgLTI4MDcsMTAgKzI4MjAsMTAgQEAgdm9pZCBIZWFwOjphZGRDb3JlQ29uc3RyYWludHMo
KQogICAgIAogICAgIG1fY29uc3RyYWludFNldC0+YWRkKAogICAgICAgICAiTyIsICJPdXRwdXQi
LAotICAgICAgICBbXSAoU2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsKKyAgICAgICAgW10gKEFic3Ry
YWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsKICAgICAgICAgICAgIFZNJiB2bSA9IHZpc2l0b3Iu
dm0oKTsKIAotICAgICAgICAgICAgYXV0byBjYWxsT3V0cHV0Q29uc3RyYWludCA9IFtdIChTbG90
VmlzaXRvciYgdmlzaXRvciwgSGVhcENlbGwqIGhlYXBDZWxsLCBIZWFwQ2VsbDo6S2luZCkgewor
ICAgICAgICAgICAgYXV0byBjYWxsT3V0cHV0Q29uc3RyYWludCA9IFtdIChBYnN0cmFjdFNsb3RW
aXNpdG9yJiB2aXNpdG9yLCBIZWFwQ2VsbCogaGVhcENlbGwsIEhlYXBDZWxsOjpLaW5kKSB7CiAg
ICAgICAgICAgICAgICAgU2V0Um9vdE1hcmtSZWFzb25TY29wZSByb290U2NvcGUodmlzaXRvciwg
Um9vdE1hcmtSZWFzb246Ok91dHB1dCk7CiAgICAgICAgICAgICAgICAgVk0mIHZtID0gdmlzaXRv
ci52bSgpOwogICAgICAgICAgICAgICAgIEpTQ2VsbCogY2VsbCA9IHN0YXRpY19jYXN0PEpTQ2Vs
bCo+KGhlYXBDZWxsKTsKQEAgLTI4MzIsNyArMjg0NSw3IEBAIHZvaWQgSGVhcDo6YWRkQ29yZUNv
bnN0cmFpbnRzKCkKICAgICBpZiAoT3B0aW9uczo6dXNlSklUKCkpIHsKICAgICAgICAgbV9jb25z
dHJhaW50U2V0LT5hZGQoCiAgICAgICAgICAgICAiRHciLCAiREZHIFdvcmtsaXN0cyIsCi0gICAg
ICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiB2aXNpdG9yKSB7CisgICAgICAgICAgICBbdGhp
c10gKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsKICAgICAgICAgICAgICAgICBTZXRS
b290TWFya1JlYXNvblNjb3BlIHJvb3RTY29wZSh2aXNpdG9yLCBSb290TWFya1JlYXNvbjo6REZH
V29ya0xpc3RzKTsKIAogICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IERGRzo6bnVt
YmVyT2ZXb3JrbGlzdHMoKTsgaS0tOykKQEAgLTI4NDAsNyArMjg1Myw3IEBAIHZvaWQgSGVhcDo6
YWRkQ29yZUNvbnN0cmFpbnRzKCkKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAv
LyBGSVhNRTogVGhpcyBpcyBhbG1vc3QgY2VydGFpbmx5IHVubmVjZXNzYXJ5LgogICAgICAgICAg
ICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjY4MjkK
LSAgICAgICAgICAgICAgICBERkc6Oml0ZXJhdGVDb2RlQmxvY2tzRm9yR0MoCisgICAgICAgICAg
ICAgICAgREZHOjppdGVyYXRlQ29kZUJsb2Nrc0ZvckdDKHZpc2l0b3IsCiAgICAgICAgICAgICAg
ICAgICAgIG1fdm0sCiAgICAgICAgICAgICAgICAgICAgIFsmXSAoQ29kZUJsb2NrKiBjb2RlQmxv
Y2spIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQo
Y29kZUJsb2NrKTsKQEAgLTI4NTUsMTIgKzI4NjgsMTIgQEAgdm9pZCBIZWFwOjphZGRDb3JlQ29u
c3RyYWludHMoKQogICAgIAogICAgIG1fY29uc3RyYWludFNldC0+YWRkKAogICAgICAgICAiQ2Ii
LCAiQ29kZUJsb2NrcyIsCi0gICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsK
KyAgICAgICAgW3RoaXNdIChBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKSB7CiAgICAgICAg
ICAgICBTZXRSb290TWFya1JlYXNvblNjb3BlIHJvb3RTY29wZSh2aXNpdG9yLCBSb290TWFya1Jl
YXNvbjo6Q29kZUJsb2Nrcyk7Ci0gICAgICAgICAgICBpdGVyYXRlRXhlY3V0aW5nQW5kQ29tcGls
aW5nQ29kZUJsb2Nrc1dpdGhvdXRIb2xkaW5nTG9ja3MoCisgICAgICAgICAgICBpdGVyYXRlRXhl
Y3V0aW5nQW5kQ29tcGlsaW5nQ29kZUJsb2Nrc1dpdGhvdXRIb2xkaW5nTG9ja3ModmlzaXRvciwK
ICAgICAgICAgICAgICAgICBbJl0gKENvZGVCbG9jayogY29kZUJsb2NrKSB7CiAgICAgICAgICAg
ICAgICAgICAgIC8vIFZpc2l0IHRoZSBDb2RlQmxvY2sgYXMgYSBjb25zdHJhaW50IG9ubHkgaWYg
aXQncyBibGFjay4KLSAgICAgICAgICAgICAgICAgICAgaWYgKGlzTWFya2VkKGNvZGVCbG9jaykK
KyAgICAgICAgICAgICAgICAgICAgaWYgKHZpc2l0b3IuaXNNYXJrZWQoY29kZUJsb2NrKQogICAg
ICAgICAgICAgICAgICAgICAgICAgJiYgY29kZUJsb2NrLT5jZWxsU3RhdGUoKSA9PSBDZWxsU3Rh
dGU6OlBvc3NpYmx5QmxhY2spCiAgICAgICAgICAgICAgICAgICAgICAgICB2aXNpdG9yLnZpc2l0
QXNDb25zdHJhaW50KGNvZGVCbG9jayk7CiAgICAgICAgICAgICAgICAgfSk7CkBAIC0zMDIzLDQg
KzMwMzYsMzMgQEAgdm9pZCBIZWFwOjpydW5UYXNrSW5QYXJhbGxlbChSZWZQdHI8U2hhcgogICAg
IH0KIH0KIAordm9pZCBIZWFwOjp2ZXJpZnlHQygpCit7CisgICAgUkVMRUFTRV9BU1NFUlQobV92
ZXJpZmllclNsb3RWaXNpdG9yKTsKKyAgICBSRUxFQVNFX0FTU0VSVCghbV9pc01hcmtpbmdGb3JH
Q1ZlcmlmaWVyKTsKKyAgICBtX2lzTWFya2luZ0ZvckdDVmVyaWZpZXIgPSB0cnVlOworCisgICAg
VmVyaWZpZXJTbG90VmlzaXRvciYgdmlzaXRvciA9ICptX3ZlcmlmaWVyU2xvdFZpc2l0b3I7CisK
KyAgICBkbyB7CisgICAgICAgIHZpc2l0b3IuZHJhaW4oKTsKKyAgICAgICAgbV9jb25zdHJhaW50
U2V0LT5leGVjdXRlQWxsU3luY2hyb25vdXNseSh2aXNpdG9yKTsKKyAgICAgICAgdmlzaXRvci5l
eGVjdXRlQ29uc3RyYWludFRhc2tzKCk7CisgICAgfSB3aGlsZSAoIXZpc2l0b3IuaXNFbXB0eSgp
KTsKKworICAgIG1faXNNYXJraW5nRm9yR0NWZXJpZmllciA9IGZhbHNlOworCisgICAgdmlzaXRv
ci5mb3JFYWNoTGl2ZUNlbGwoWyZdIChIZWFwQ2VsbCogY2VsbCkgeworICAgICAgICBpZiAoSGVh
cDo6aXNNYXJrZWQoY2VsbCkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgZGF0YUxv
Z0xuKCJcbiIgIkdDIFZlcmlmaWVyOiBFUlJPUiBjZWxsICIsIFJhd1BvaW50ZXIoY2VsbCksICIg
d2FzIG5vdCBtYXJrZWQiKTsKKyAgICAgICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OnZlcmJvc2VW
ZXJpZnlHQygpKSkKKyAgICAgICAgICAgIHZpc2l0b3IuZHVtcE1hcmtlckRhdGEoY2VsbCk7Cisg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKHRoaXMtPmlzTWFya2VkKGNlbGwpKTsKKyAgICB9KTsKKwor
ICAgIG1fdmVyaWZpZXJTbG90VmlzaXRvciA9IG51bGxwdHI7Cit9CisKIH0gLy8gbmFtZXNwYWNl
IEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkocmV2aXNpb24gMjcyODMwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDcgKzEsNyBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMCBIYXJyaSBQb3J0ZW4g
KHBvcnRlbkBrZGUub3JnKQogICogIENvcHlyaWdodCAoQykgMjAwMSBQZXRlciBLZWxseSAocG1r
QHBvc3QuY29tKQotICogIENvcHlyaWdodCAoQykgMjAwMy0yMDIwIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAyMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCkBAIC04Niw2ICs4Niw3IEBA
IGNsYXNzIFNwYWNlVGltZU11dGF0b3JTY2hlZHVsZXI7CiBjbGFzcyBTdG9wSWZOZWNlc3NhcnlU
aW1lcjsKIGNsYXNzIFN3ZWVwaW5nU2NvcGU7CiBjbGFzcyBWTTsKK2NsYXNzIFZlcmlmaWVyU2xv
dFZpc2l0b3I7CiBjbGFzcyBXZWFrR0NNYXBCYXNlOwogc3RydWN0IEN1cnJlbnRUaHJlYWRTdGF0
ZTsKIApAQCAtMTg0LDggKzE4NSw2IEBAIHB1YmxpYzoKICAgICAKICAgICBib29sIGlzU2h1dHRp
bmdEb3duKCkgY29uc3QgeyByZXR1cm4gbV9pc1NodXR0aW5nRG93bjsgfQogCi0gICAgSlNfRVhQ
T1JUX1BSSVZBVEUgYm9vbCBpc0FuYWx5emluZ0hlYXAoKSBjb25zdDsKLQogICAgIEpTX0VYUE9S
VF9QUklWQVRFIHZvaWQgc3dlZXBTeW5jaHJvbm91c2x5KCk7CiAKICAgICBib29sIHNob3VsZENv
bGxlY3RIZXVyaXN0aWMoKTsKQEAgLTM4NSw4ICszODQsNiBAQCBwdWJsaWM6CiAgICAgCiAgICAg
SlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBhZGRNYXJraW5nQ29uc3RyYWludChzdGQ6OnVuaXF1ZV9w
dHI8TWFya2luZ0NvbnN0cmFpbnQ+KTsKICAgICAKLSAgICBzaXplX3QgbnVtT3BhcXVlUm9vdHMo
KSBjb25zdCB7IHJldHVybiBtX29wYXF1ZVJvb3RzLnNpemUoKTsgfQotCiAgICAgSGVhcFZlcmlm
aWVyKiB2ZXJpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1fdmVyaWZpZXIuZ2V0KCk7IH0KICAgICAK
ICAgICB2b2lkIGFkZEhlYXBGaW5hbGl6ZXJDYWxsYmFjayhjb25zdCBIZWFwRmluYWxpemVyQ2Fs
bGJhY2smKTsKQEAgLTU3NiwxMCArNTczLDEwIEBAIHByaXZhdGU6CiAgICAgYm9vbCBvdmVyQ3Jp
dGljYWxNZW1vcnlUaHJlc2hvbGQoTWVtb3J5VGhyZXNob2xkQ2FsbFR5cGUgbWVtb3J5VGhyZXNo
b2xkQ2FsbFR5cGUgPSBNZW1vcnlUaHJlc2hvbGRDYWxsVHlwZTo6Q2FjaGVkKTsKICAgICAKICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgotICAgIHZvaWQgaXRlcmF0ZUV4ZWN1dGluZ0FuZENv
bXBpbGluZ0NvZGVCbG9ja3MoY29uc3QgRnVuYyYpOworICAgIHZvaWQgaXRlcmF0ZUV4ZWN1dGlu
Z0FuZENvbXBpbGluZ0NvZGVCbG9ja3MoQWJzdHJhY3RTbG90VmlzaXRvciYsIGNvbnN0IEZ1bmMm
KTsKICAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgotICAgIHZvaWQgaXRlcmF0ZUV4
ZWN1dGluZ0FuZENvbXBpbGluZ0NvZGVCbG9ja3NXaXRob3V0SG9sZGluZ0xvY2tzKGNvbnN0IEZ1
bmMmKTsKKyAgICB2b2lkIGl0ZXJhdGVFeGVjdXRpbmdBbmRDb21waWxpbmdDb2RlQmxvY2tzV2l0
aG91dEhvbGRpbmdMb2NrcyhBYnN0cmFjdFNsb3RWaXNpdG9yJiwgY29uc3QgRnVuYyYpOwogICAg
IAogICAgIHZvaWQgYXNzZXJ0TWFya1N0YWNrc0VtcHR5KCk7CiAKQEAgLTU5MCw2ICs1ODcsOCBA
QCBwcml2YXRlOgogICAgIHN0YXRpYyBib29sIHVzZUdlbmVyYXRpb25hbEdDKCk7CiAgICAgc3Rh
dGljIGJvb2wgc2hvdWxkU3dlZXBTeW5jaHJvbm91c2x5KCk7CiAgICAgCisgICAgdm9pZCB2ZXJp
ZnlHQygpOworCiAgICAgY29uc3QgSGVhcFR5cGUgbV9oZWFwVHlwZTsKICAgICBNdXRhdG9yU3Rh
dGUgbV9tdXRhdG9yU3RhdGUgeyBNdXRhdG9yU3RhdGU6OlJ1bm5pbmcgfTsKICAgICBjb25zdCBz
aXplX3QgbV9yYW1TaXplOwpAQCAtNjM2LDYgKzYzNSw3IEBAIHByaXZhdGU6CiAgICAgc3RkOjp1
bmlxdWVfcHRyPE1hcmtTdGFja0FycmF5PiBtX211dGF0b3JNYXJrU3RhY2s7CiAgICAgc3RkOjp1
bmlxdWVfcHRyPE1hcmtTdGFja0FycmF5PiBtX3JhY2VNYXJrU3RhY2s7CiAgICAgc3RkOjp1bmlx
dWVfcHRyPE1hcmtpbmdDb25zdHJhaW50U2V0PiBtX2NvbnN0cmFpbnRTZXQ7CisgICAgc3RkOjp1
bmlxdWVfcHRyPFZlcmlmaWVyU2xvdFZpc2l0b3I+IG1fdmVyaWZpZXJTbG90VmlzaXRvcjsKIAog
ICAgIC8vIFdlIHBvb2wgdGhlIHNsb3QgdmlzaXRvcnMgdXNlZCBieSBwYXJhbGxlbCBtYXJraW5n
IHRocmVhZHMuIEl0J3MgdXNlZnVsIHRvIGJlIGFibGUgdG8KICAgICAvLyBlbnVtZXJhdGUgb3Zl
ciB0aGVtLCBhbmQgaXQncyB1c2VmdWwgdG8gaGF2ZSB0aGVtIGNhY2hlIHNvbWUgc21hbGwgYW1v
dW50IG9mIG1lbW9yeSBmcm9tCkBAIC02NTQsNiArNjU0LDcgQEAgcHJpdmF0ZToKICAgICBib29s
IG1faXNTYWZlVG9Db2xsZWN0IHsgZmFsc2UgfTsKICAgICBib29sIG1faXNTaHV0dGluZ0Rvd24g
eyBmYWxzZSB9OwogICAgIGJvb2wgbV9tdXRhdG9yU2hvdWxkQmVGZW5jZWQgeyBPcHRpb25zOjpm
b3JjZUZlbmNlZEJhcnJpZXIoKSB9OworICAgIGJvb2wgbV9pc01hcmtpbmdGb3JHQ1ZlcmlmaWVy
IHsgZmFsc2UgfTsKIAogICAgIHVuc2lnbmVkIG1fYmFycmllclRocmVzaG9sZCB7IE9wdGlvbnM6
OmZvcmNlRmVuY2VkQmFycmllcigpID8gdGF1dG9sb2dpY2FsVGhyZXNob2xkIDogYmxhY2tUaHJl
c2hvbGQgfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcElubGluZXMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwSW5saW5lcy5o
CShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwSW5s
aW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC02OSw2ICs2OSw3IEBAIGlubGluZSBib29sIEhlYXA6
OndvcmxkSXNTdG9wcGVkKCkgY29uc3QKIAogQUxXQVlTX0lOTElORSBib29sIEhlYXA6OmlzTWFy
a2VkKGNvbnN0IHZvaWQqIHJhd0NlbGwpCiB7CisgICAgQVNTRVJUKCFtX2lzTWFya2luZ0ZvckdD
VmVyaWZpZXIpOwogICAgIEhlYXBDZWxsKiBjZWxsID0gYml0d2lzZV9jYXN0PEhlYXBDZWxsKj4o
cmF3Q2VsbCk7CiAgICAgaWYgKGNlbGwtPmlzUHJlY2lzZUFsbG9jYXRpb24oKSkKICAgICAgICAg
cmV0dXJuIGNlbGwtPnByZWNpc2VBbGxvY2F0aW9uKCkuaXNNYXJrZWQoKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBQcm9maWxlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcFByb2ZpbGVyLmNwcAkocmV2aXNpb24gMjcyODMw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcFByb2ZpbGVyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC02MCw2ICs2MCw3IEBAIHZvaWQgSGVhcFByb2ZpbGVyOjpzZXRBY3RpdmVIZWFwQW5h
bHl6ZXIKIHsKICAgICBBU1NFUlQoISFtX2FjdGl2ZUFuYWx5emVyICE9ICEhYW5hbHl6ZXIpOwog
ICAgIG1fYWN0aXZlQW5hbHl6ZXIgPSBhbmFseXplcjsKKyAgICBtX3ZtLnNldEFjdGl2ZUhlYXBB
bmFseXplcihhbmFseXplcik7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvQ2VsbFNldC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0lzb0NlbGxTZXQuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvQ2VsbFNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM0LDYg
KzM0LDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKK2NsYXNzIEFic3RyYWN0U2xvdFZpc2l0b3I7
CiBjbGFzcyBIZWFwQ2VsbDsKIGNsYXNzIElzb1N1YnNwYWNlOwogCkBAIC01OSw3ICs2MCw3IEBA
IHB1YmxpYzoKICAgICB2b2lkIGZvckVhY2hNYXJrZWRDZWxsKGNvbnN0IEZ1bmMmKTsKIAogICAg
IHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+Ci0gICAgUmVmPFNoYXJlZFRhc2s8dm9pZChTbG90Vmlz
aXRvciYpPj4gZm9yRWFjaE1hcmtlZENlbGxJblBhcmFsbGVsKGNvbnN0IEZ1bmMmKTsKKyAgICBS
ZWY8U2hhcmVkVGFzazx2b2lkKEFic3RyYWN0U2xvdFZpc2l0b3ImKT4+IGZvckVhY2hNYXJrZWRD
ZWxsSW5QYXJhbGxlbChjb25zdCBGdW5jJik7CiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
RnVuYz4KICAgICB2b2lkIGZvckVhY2hMaXZlQ2VsbChjb25zdCBGdW5jJik7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Jc29DZWxsU2V0SW5saW5lcy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0lzb0NlbGxTZXRJbmxpbmVzLmgJKHJldmlzaW9u
IDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0lzb0NlbGxTZXRJbmxpbmVz
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
Ny0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtOTIsOSArOTIsOSBAQCB2b2lkIElzb0NlbGxTZXQ6OmZvckVhY2hN
YXJrZWRDZWxsKGNvbnN0CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+Ci1SZWY8U2hhcmVk
VGFzazx2b2lkKFNsb3RWaXNpdG9yJik+PiBJc29DZWxsU2V0Ojpmb3JFYWNoTWFya2VkQ2VsbElu
UGFyYWxsZWwoY29uc3QgRnVuYyYgZnVuYykKK1JlZjxTaGFyZWRUYXNrPHZvaWQoQWJzdHJhY3RT
bG90VmlzaXRvciYpPj4gSXNvQ2VsbFNldDo6Zm9yRWFjaE1hcmtlZENlbGxJblBhcmFsbGVsKGNv
bnN0IEZ1bmMmIGZ1bmMpCiB7Ci0gICAgY2xhc3MgVGFzayBmaW5hbCA6IHB1YmxpYyBTaGFyZWRU
YXNrPHZvaWQoU2xvdFZpc2l0b3ImKT4geworICAgIGNsYXNzIFRhc2sgZmluYWwgOiBwdWJsaWMg
U2hhcmVkVGFzazx2b2lkKEFic3RyYWN0U2xvdFZpc2l0b3ImKT4gewogICAgIHB1YmxpYzoKICAg
ICAgICAgVGFzayhJc29DZWxsU2V0JiBzZXQsIGNvbnN0IEZ1bmMmIGZ1bmMpCiAgICAgICAgICAg
ICA6IG1fc2V0KHNldCkKQEAgLTEwMyw3ICsxMDMsNyBAQCBSZWY8U2hhcmVkVGFzazx2b2lkKFNs
b3RWaXNpdG9yJik+PiBJc29DCiAgICAgICAgIHsKICAgICAgICAgfQogICAgICAgICAKLSAgICAg
ICAgdm9pZCBydW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpIGZpbmFsCisgICAgICAgIHZvaWQgcnVu
KEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpIGZpbmFsCiAgICAgICAgIHsKICAgICAgICAg
ICAgIHdoaWxlIChNYXJrZWRCbG9jazo6SGFuZGxlKiBoYW5kbGUgPSBtX2Jsb2NrU291cmNlLT5y
dW4oKSkgewogICAgICAgICAgICAgICAgIHVuc2lnbmVkIGJsb2NrSW5kZXggPSBoYW5kbGUtPmlu
ZGV4KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9KSVRTdHViUm91dGluZVNl
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSklUU3R1YlJv
dXRpbmVTZXQuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9KSVRTdHViUm91dGluZVNldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTI4LDcgKzEyOCw3IEBA
IHZvaWQgSklUU3R1YlJvdXRpbmVTZXQ6OmRlbGV0ZVVubWFya2VkSmUKICAgICBtX3JvdXRpbmVz
LnNocmluayhkc3RJbmRleCk7CiB9CiAKLXZvaWQgSklUU3R1YlJvdXRpbmVTZXQ6OnRyYWNlTWFy
a2VkU3R1YlJvdXRpbmVzKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBKSVRTdHViUm91dGlu
ZVNldDo6dHJhY2VNYXJrZWRTdHViUm91dGluZXMoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRv
cikKIHsKICAgICBmb3IgKGF1dG8mIGVudHJ5IDogbV9yb3V0aW5lcykgewogICAgICAgICBHQ0F3
YXJlSklUU3R1YlJvdXRpbmUqIHJvdXRpbmUgPSBlbnRyeS5yb3V0aW5lOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvSklUU3R1YlJvdXRpbmVTZXQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9KSVRTdHViUm91dGluZVNldC5oCShyZXZpc2lvbiAy
NzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9KSVRTdHViUm91dGluZVNldC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
Mi0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMzUsOCArMzUsOCBAQCB1c2luZyBXVEY6OlJhbmdlOwogCiBu
YW1lc3BhY2UgSlNDIHsKIAorY2xhc3MgQWJzdHJhY3RTbG90VmlzaXRvcjsKIGNsYXNzIEdDQXdh
cmVKSVRTdHViUm91dGluZTsKLWNsYXNzIFNsb3RWaXNpdG9yOwogCiAjaWYgRU5BQkxFKEpJVCkK
IApAQCAtNjMsOCArNjMsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBwcmVwYXJlRm9yQ29uc2VydmF0
aXZlU2NhbigpOwogICAgIAogICAgIHZvaWQgZGVsZXRlVW5tYXJrZWRKZXR0aXNvbmVkU3R1YlJv
dXRpbmVzKCk7Ci0gICAgCi0gICAgdm9pZCB0cmFjZU1hcmtlZFN0dWJSb3V0aW5lcyhTbG90Vmlz
aXRvciYpOworCisgICAgdm9pZCB0cmFjZU1hcmtlZFN0dWJSb3V0aW5lcyhBYnN0cmFjdFNsb3RW
aXNpdG9yJik7CiAgICAgCiBwcml2YXRlOgogICAgIHZvaWQgbWFya1Nsb3codWludHB0cl90IGFk
ZHJlc3MpOwpAQCAtOTIsNyArOTIsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBtYXJrKHZvaWQqKSB7
IH0KICAgICB2b2lkIHByZXBhcmVGb3JDb25zZXJ2YXRpdmVTY2FuKCkgeyB9CiAgICAgdm9pZCBk
ZWxldGVVbm1hcmtlZEpldHRpc29uZWRTdHViUm91dGluZXMoKSB7IH0KLSAgICB2b2lkIHRyYWNl
TWFya2VkU3R1YlJvdXRpbmVzKFNsb3RWaXNpdG9yJikgeyB9CisgICAgdm9pZCB0cmFjZU1hcmtl
ZFN0dWJSb3V0aW5lcyhBYnN0cmFjdFNsb3RWaXNpdG9yJikgeyB9CiB9OwogCiAjZW5kaWYgLy8g
IUVOQUJMRShKSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3RhY2tN
ZXJnaW5nQ29uc3RyYWludC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQuY3BwCShyZXZpc2lvbiAyNzI4MzApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
Ny0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMjUsNyArMjUsNiBAQAogCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAj
aW5jbHVkZSAiTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQuaCIKLQogI2luY2x1ZGUgIkdDU2Vn
bWVudGVkQXJyYXlJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogCkBAIC00MSwx
MiArNDAsMTIgQEAgTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQ6On5NYXJrU3RhY2tNZQogewog
fQogCi1kb3VibGUgTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQ6OnF1aWNrV29ya0VzdGltYXRl
KFNsb3RWaXNpdG9yJikKK2RvdWJsZSBNYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludDo6cXVpY2tX
b3JrRXN0aW1hdGUoQWJzdHJhY3RTbG90VmlzaXRvciYpCiB7CiAgICAgcmV0dXJuIG1faGVhcC5t
X211dGF0b3JNYXJrU3RhY2stPnNpemUoKSArIG1faGVhcC5tX3JhY2VNYXJrU3RhY2stPnNpemUo
KTsKIH0KIAotdm9pZCBNYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludDo6cHJlcGFyZVRvRXhlY3V0
ZUltcGwoY29uc3QgQWJzdHJhY3RMb2NrZXImLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQg
TWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQ6OnByZXBhcmVUb0V4ZWN1dGVJbXBsKGNvbnN0IEFi
c3RyYWN0TG9ja2VyJiwgQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICAvLyBM
b2dnaW5nIHRoZSB3b3JrIGhlcmUgZW5zdXJlcyB0aGF0IHRoZSBjb25zdHJhaW50IHNvbHZlciBr
bm93cyB0aGF0IGl0IGRvZXNuJ3QgbmVlZCB0byBwcm9kdWNlCiAgICAgLy8gYW55bW9yZSB3b3Jr
LgpAQCAtNTYsOCArNTUsMTcgQEAgdm9pZCBNYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludDo6cHJl
cGFyZQogICAgIGRhdGFMb2dJZihPcHRpb25zOjpsb2dHQygpLCAiKCIsIHNpemUsICIpIik7CiB9
CiAKLXZvaWQgTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQ6OmV4ZWN1dGVJbXBsKFNsb3RWaXNp
dG9yJiB2aXNpdG9yKQordm9pZCBNYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludDo6ZXhlY3V0ZUlt
cGwoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKKyAgICAvLyBXZSB3YW50IHRvIHNr
aXAgdGhpcyBjb25zdHJhaW50IGZvciB0aGUgR0MgdmVyaWZpZXIgYmVjYXVzZToKKyAgICAvLyAx
LiBUaGVyZSBzaG91bGQgYmUgbm8gbXV0YXRvciBtYXJraW5nIGFjdGlvbiBiZXR3ZWVuIHRoZSBF
bmQgcGhhc2UgYW5kIHZlcmlmeUdDKCkuCisgICAgLy8gICAgSGVuY2UsIHdlIGNhbiBpZ25vcmUg
dGhzZSBzdGFja3MuCisgICAgLy8gMi4gVGhlIEVuZCBwaGFzZSBleHBsaWN0bHkgY2FsbHMgaXRl
cmF0ZUV4ZWN1dGluZ0FuZENvbXBpbGluZ0NvZGVCbG9ja3MoKQorICAgIC8vICAgIHRvIGFkZCBl
eGVjdXRpbmcgQ29kZUJsb2NrcyB0byBtX2hlYXAubV9tdXRhdG9yTWFya1N0YWNrLiBXZSB3YW50
IHRvCisgICAgLy8gICAgbGVhdmUgdGhvc2UgdW5wZXJ0dXJiZWQuCisgICAgaWYgKG1faGVhcC5t
X2lzTWFya2luZ0ZvckdDVmVyaWZpZXIpCisgICAgICAgIHJldHVybjsKKwogICAgIG1faGVhcC5t
X211dGF0b3JNYXJrU3RhY2stPnRyYW5zZmVyVG8odmlzaXRvci5tdXRhdG9yTWFya1N0YWNrKCkp
OwogICAgIG1faGVhcC5tX3JhY2VNYXJrU3RhY2stPnRyYW5zZmVyVG8odmlzaXRvci5tdXRhdG9y
TWFya1N0YWNrKCkpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya1N0
YWNrTWVyZ2luZ0NvbnN0cmFpbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9NYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludC5oCShyZXZpc2lvbiAyNzI4MzApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zMCwxOCArMzAsMTggQEAKIG5hbWVzcGFjZSBKU0MgewogCiBj
bGFzcyBIZWFwOwotY2xhc3MgU2xvdFZpc2l0b3I7CitjbGFzcyBBYnN0cmFjdFNsb3RWaXNpdG9y
OwogCiBjbGFzcyBNYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludCBmaW5hbCA6IHB1YmxpYyBNYXJr
aW5nQ29uc3RyYWludCB7CiBwdWJsaWM6CiAgICAgTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQo
SGVhcCYpOwogICAgIH5NYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludCgpIGZpbmFsOwogICAgIAot
ICAgIGRvdWJsZSBxdWlja1dvcmtFc3RpbWF0ZShTbG90VmlzaXRvciYpIGZpbmFsOworICAgIGRv
dWJsZSBxdWlja1dvcmtFc3RpbWF0ZShBYnN0cmFjdFNsb3RWaXNpdG9yJikgZmluYWw7CiAgICAg
CiBwcml2YXRlOgotICAgIHZvaWQgcHJlcGFyZVRvRXhlY3V0ZUltcGwoY29uc3QgQWJzdHJhY3RM
b2NrZXImIGNvbnN0cmFpbnRTb2x2aW5nTG9ja2VyLCBTbG90VmlzaXRvciYpIGZpbmFsOwotICAg
IHZvaWQgZXhlY3V0ZUltcGwoU2xvdFZpc2l0b3ImKSBmaW5hbDsKKyAgICB2b2lkIHByZXBhcmVU
b0V4ZWN1dGVJbXBsKGNvbnN0IEFic3RyYWN0TG9ja2VyJiBjb25zdHJhaW50U29sdmluZ0xvY2tl
ciwgQWJzdHJhY3RTbG90VmlzaXRvciYpIGZpbmFsOworICAgIHZvaWQgZXhlY3V0ZUltcGwoQWJz
dHJhY3RTbG90VmlzaXRvciYpIGZpbmFsOwogICAgIAogICAgIEhlYXAmIG1faGVhcDsKIH07Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmgJKHJldmlzaW9uIDI3
MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmgJKHdvcmtp
bmcgY29weSkKQEAgLTIwMCw2ICsyMDAsNyBAQCBwdWJsaWM6CiAgICAgICAgIAogICAgICAgICB2
b2lkKiBzdGFydCgpIGNvbnN0IHsgcmV0dXJuICZtX2Jsb2NrLT5hdG9tcygpWzBdOyB9CiAgICAg
ICAgIHZvaWQqIGVuZCgpIGNvbnN0IHsgcmV0dXJuICZtX2Jsb2NrLT5hdG9tcygpW21fZW5kQXRv
bV07IH0KKyAgICAgICAgdm9pZCogYXRvbUF0KHNpemVfdCBpKSBjb25zdCB7IHJldHVybiAmbV9i
bG9jay0+YXRvbXMoKVtpXTsgfQogICAgICAgICBib29sIGNvbnRhaW5zKHZvaWQqIHApIGNvbnN0
IHsgcmV0dXJuIHN0YXJ0KCkgPD0gcCAmJiBwIDwgZW5kKCk7IH0KIAogICAgICAgICB2b2lkIGR1
bXBTdGF0ZShQcmludFN0cmVhbSYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
TWFya2VkU3BhY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L01hcmtlZFNwYWNlLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvTWFya2VkU3BhY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNzIsNyArMjcyLDcg
QEAgdm9pZCBNYXJrZWRTcGFjZTo6ZW5hYmxlUHJlY2lzZUFsbG9jYXRpbwogICAgICAgICBtX3By
ZWNpc2VBbGxvY2F0aW9uU2V0LT5hZGQoYWxsb2NhdGlvbi0+Y2VsbCgpKTsKIH0KIAotdm9pZCBN
YXJrZWRTcGFjZTo6dmlzaXRXZWFrU2V0cyhTbG90VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgTWFy
a2VkU3BhY2U6OnZpc2l0V2Vha1NldHMoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsK
ICAgICBhdXRvIHZpc2l0ID0gWyZdIChXZWFrU2V0KiB3ZWFrU2V0KSB7CiAgICAgICAgIHdlYWtT
ZXQtPnZpc2l0KHZpc2l0b3IpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFy
a2VkU3BhY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJr
ZWRTcGFjZS5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9NYXJrZWRTcGFjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqICBD
b3B5cmlnaHQgKEMpIDE5OTktMjAwMCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQogICog
IENvcHlyaWdodCAoQykgMjAwMSBQZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQotICogIENvcHly
aWdodCAoQykgMjAwMy0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBD
b3B5cmlnaHQgKEMpIDIwMDMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVz
c2VyIEdlbmVyYWwgUHVibGljCkBAIC0zNyw2ICszNyw3IEBACiAKIG5hbWVzcGFjZSBKU0Mgewog
CitjbGFzcyBBYnN0cmFjdFNsb3RWaXNpdG9yOwogY2xhc3MgQ29tcGxldGVTdWJzcGFjZTsKIGNs
YXNzIEhlYXA7CiBjbGFzcyBIZWFwQ2VsbDsKQEAgLTEwNSw3ICsxMDYsNyBAQCBwdWJsaWM6CiAg
ICAgCiAgICAgdm9pZCBwcmVwYXJlRm9yQWxsb2NhdGlvbigpOwogCi0gICAgdm9pZCB2aXNpdFdl
YWtTZXRzKFNsb3RWaXNpdG9yJik7CisgICAgdm9pZCB2aXNpdFdlYWtTZXRzKEFic3RyYWN0U2xv
dFZpc2l0b3ImKTsKICAgICB2b2lkIHJlYXBXZWFrU2V0cygpOwogCiAgICAgTWFya2VkQmxvY2tT
ZXQmIGJsb2NrcygpIHsgcmV0dXJuIG1fYmxvY2tzOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnQuY3BwCShyZXZpc2lvbiAyNzI4MzAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUg
Ik1hcmtpbmdDb25zdHJhaW50LmgiCiAKKyNpbmNsdWRlICJBYnN0cmFjdFNsb3RWaXNpdG9ySW5s
aW5lcy5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJWaXNpdENvdW50ZXIu
aCIKIApAQCAtNTEsNyArNTIsNyBAQCB2b2lkIE1hcmtpbmdDb25zdHJhaW50OjpyZXNldFN0YXRz
KCkKICAgICBtX2xhc3RWaXNpdENvdW50ID0gMDsKIH0KIAotdm9pZCBNYXJraW5nQ29uc3RyYWlu
dDo6ZXhlY3V0ZShTbG90VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgTWFya2luZ0NvbnN0cmFpbnQ6
OmV4ZWN1dGUoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBWaXNpdENvdW50
ZXIgdmlzaXRDb3VudGVyKHZpc2l0b3IpOwogICAgIGV4ZWN1dGVJbXBsKHZpc2l0b3IpOwpAQCAt
NjAsMTcgKzYxLDIzIEBAIHZvaWQgTWFya2luZ0NvbnN0cmFpbnQ6OmV4ZWN1dGUoU2xvdFZpc2kK
ICAgICAgICAgZGF0YUxvZygiKCIsIGFiYnJldmlhdGVkTmFtZSgpLCAiIHZpc2l0ZWQgIiwgdmlz
aXRDb3VudGVyLnZpc2l0Q291bnQoKSwgIiBpbiBleGVjdXRlKSIpOwogfQogCi1kb3VibGUgTWFy
a2luZ0NvbnN0cmFpbnQ6OnF1aWNrV29ya0VzdGltYXRlKFNsb3RWaXNpdG9yJikKK3ZvaWQgTWFy
a2luZ0NvbnN0cmFpbnQ6OmV4ZWN1dGVTeW5jaHJvbm91c2x5KEFic3RyYWN0U2xvdFZpc2l0b3Im
IHZpc2l0b3IpCit7CisgICAgcHJlcGFyZVRvRXhlY3V0ZUltcGwoTm9Mb2NraW5nTmVjZXNzYXJ5
LCB2aXNpdG9yKTsKKyAgICBleGVjdXRlSW1wbCh2aXNpdG9yKTsKK30KKworZG91YmxlIE1hcmtp
bmdDb25zdHJhaW50OjpxdWlja1dvcmtFc3RpbWF0ZShBYnN0cmFjdFNsb3RWaXNpdG9yJikKIHsK
ICAgICByZXR1cm4gMDsKIH0KIAotZG91YmxlIE1hcmtpbmdDb25zdHJhaW50Ojp3b3JrRXN0aW1h
dGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCitkb3VibGUgTWFya2luZ0NvbnN0cmFpbnQ6OndvcmtF
c3RpbWF0ZShBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHJldHVybiBsYXN0
VmlzaXRDb3VudCgpICsgcXVpY2tXb3JrRXN0aW1hdGUodmlzaXRvcik7CiB9CiAKLXZvaWQgTWFy
a2luZ0NvbnN0cmFpbnQ6OnByZXBhcmVUb0V4ZWN1dGUoY29uc3QgQWJzdHJhY3RMb2NrZXImIGNv
bnN0cmFpbnRTb2x2aW5nTG9ja2VyLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgTWFya2lu
Z0NvbnN0cmFpbnQ6OnByZXBhcmVUb0V4ZWN1dGUoY29uc3QgQWJzdHJhY3RMb2NrZXImIGNvbnN0
cmFpbnRTb2x2aW5nTG9ja2VyLCBBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAg
IGRhdGFMb2dJZihPcHRpb25zOjpsb2dHQygpLCBhYmJyZXZpYXRlZE5hbWUoKSk7CiAgICAgVmlz
aXRDb3VudGVyIHZpc2l0Q291bnRlcih2aXNpdG9yKTsKQEAgLTgwLDcgKzg3LDcgQEAgdm9pZCBN
YXJraW5nQ29uc3RyYWludDo6cHJlcGFyZVRvRXhlY3V0ZQogICAgICAgICBkYXRhTG9nKCIoIiwg
YWJicmV2aWF0ZWROYW1lKCksICIgdmlzaXRlZCAiLCB2aXNpdENvdW50ZXIudmlzaXRDb3VudCgp
LCAiIGluIHByZXBhcmVUb0V4ZWN1dGUpIik7CiB9CiAKLXZvaWQgTWFya2luZ0NvbnN0cmFpbnQ6
OmRvUGFyYWxsZWxXb3JrKFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBTaGFyZWRUYXNrPHZvaWQoU2xv
dFZpc2l0b3ImKT4mIHRhc2spCit2b2lkIE1hcmtpbmdDb25zdHJhaW50Ojpkb1BhcmFsbGVsV29y
ayhBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBTaGFyZWRUYXNrPHZvaWQoQWJzdHJhY3RT
bG90VmlzaXRvciYpPiYgdGFzaykKIHsKICAgICBWaXNpdENvdW50ZXIgdmlzaXRDb3VudGVyKHZp
c2l0b3IpOwogICAgIHRhc2sucnVuKHZpc2l0b3IpOwpAQCAtOTIsNyArOTksNyBAQCB2b2lkIE1h
cmtpbmdDb25zdHJhaW50Ojpkb1BhcmFsbGVsV29yayhTCiAgICAgfQogfQogCi12b2lkIE1hcmtp
bmdDb25zdHJhaW50OjpwcmVwYXJlVG9FeGVjdXRlSW1wbChjb25zdCBBYnN0cmFjdExvY2tlciYs
IFNsb3RWaXNpdG9yJikKK3ZvaWQgTWFya2luZ0NvbnN0cmFpbnQ6OnByZXBhcmVUb0V4ZWN1dGVJ
bXBsKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgQWJzdHJhY3RTbG90VmlzaXRvciYpCiB7CiB9CiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnQu
aAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2lu
Z0NvbnN0cmFpbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zOCw3ICszOCw3IEBACiBuYW1lc3BhY2UgSlND
IHsKIAogY2xhc3MgTWFya2luZ0NvbnN0cmFpbnRTZXQ7Ci1jbGFzcyBTbG90VmlzaXRvcjsKK2Ns
YXNzIEFic3RyYWN0U2xvdFZpc2l0b3I7CiAKIGNsYXNzIE1hcmtpbmdDb25zdHJhaW50IHsKICAg
ICBXVEZfTUFLRV9OT05DT1BZQUJMRShNYXJraW5nQ29uc3RyYWludCk7CkBAIC02MCwxNSArNjAs
MTUgQEAgcHVibGljOgogICAgIAogICAgIHNpemVfdCBsYXN0VmlzaXRDb3VudCgpIGNvbnN0IHsg
cmV0dXJuIG1fbGFzdFZpc2l0Q291bnQ7IH0KICAgICAKLSAgICB2b2lkIGV4ZWN1dGUoU2xvdFZp
c2l0b3ImKTsKLSAgICAKLSAgICBKU19FWFBPUlRfUFJJVkFURSB2aXJ0dWFsIGRvdWJsZSBxdWlj
a1dvcmtFc3RpbWF0ZShTbG90VmlzaXRvciYgdmlzaXRvcik7CisgICAgdm9pZCBleGVjdXRlKEFi
c3RyYWN0U2xvdFZpc2l0b3ImKTsKKworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZpcnR1YWwgZG91
YmxlIHF1aWNrV29ya0VzdGltYXRlKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKICAgICAKLSAgICBk
b3VibGUgd29ya0VzdGltYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKTsKKyAgICBkb3VibGUgd29y
a0VzdGltYXRlKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKICAgICAKLSAgICB2b2lkIHByZXBhcmVU
b0V4ZWN1dGUoY29uc3QgQWJzdHJhY3RMb2NrZXImIGNvbnN0cmFpbnRTb2x2aW5nTG9ja2VyLCBT
bG90VmlzaXRvciYpOworICAgIHZvaWQgcHJlcGFyZVRvRXhlY3V0ZShjb25zdCBBYnN0cmFjdExv
Y2tlciYgY29uc3RyYWludFNvbHZpbmdMb2NrZXIsIEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKICAg
ICAKLSAgICB2b2lkIGRvUGFyYWxsZWxXb3JrKFNsb3RWaXNpdG9yJiwgU2hhcmVkVGFzazx2b2lk
KFNsb3RWaXNpdG9yJik+Jik7CisgICAgdm9pZCBkb1BhcmFsbGVsV29yayhBYnN0cmFjdFNsb3RW
aXNpdG9yJiwgU2hhcmVkVGFzazx2b2lkKEFic3RyYWN0U2xvdFZpc2l0b3ImKT4mKTsKICAgICAK
ICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eSB2b2xhdGlsaXR5KCkgY29uc3QgeyByZXR1cm4gbV92
b2xhdGlsaXR5OyB9CiAgICAgCkBAIC03Niw5ICs3NiwxMSBAQCBwdWJsaWM6CiAgICAgQ29uc3Ry
YWludFBhcmFsbGVsaXNtIHBhcmFsbGVsaXNtKCkgY29uc3QgeyByZXR1cm4gbV9wYXJhbGxlbGlz
bTsgfQogCiBwcm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVJbXBsKFNsb3RWaXNp
dG9yJikgPSAwOwotICAgIEpTX0VYUE9SVF9QUklWQVRFIHZpcnR1YWwgdm9pZCBwcmVwYXJlVG9F
eGVjdXRlSW1wbChjb25zdCBBYnN0cmFjdExvY2tlciYgY29uc3RyYWludFNvbHZpbmdMb2NrZXIs
IFNsb3RWaXNpdG9yJik7Ci0gICAgCisgICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVJbXBsKEFic3Ry
YWN0U2xvdFZpc2l0b3ImKSA9IDA7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdmlydHVhbCB2b2lk
IHByZXBhcmVUb0V4ZWN1dGVJbXBsKGNvbnN0IEFic3RyYWN0TG9ja2VyJiBjb25zdHJhaW50U29s
dmluZ0xvY2tlciwgQWJzdHJhY3RTbG90VmlzaXRvciYpOworCisgICAgdm9pZCBleGVjdXRlU3lu
Y2hyb25vdXNseShBYnN0cmFjdFNsb3RWaXNpdG9yJik7CisKIHByaXZhdGU6CiAgICAgZnJpZW5k
IGNsYXNzIE1hcmtpbmdDb25zdHJhaW50U2V0OyAvLyBTbyBpdCBjYW4gc2V0IG1faW5kZXguCiAg
ICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludFNl
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0Nv
bnN0cmFpbnRTZXQuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9NYXJraW5nQ29uc3RyYWludFNldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjMsNyArNjMs
NyBAQCB2b2lkIE1hcmtpbmdDb25zdHJhaW50U2V0OjpkaWRTdGFydE1hcmtpCiAgICAgbV9pdGVy
YXRpb24gPSAxOwogfQogCi12b2lkIE1hcmtpbmdDb25zdHJhaW50U2V0OjphZGQoQ1N0cmluZyBh
YmJyZXZpYXRlZE5hbWUsIENTdHJpbmcgbmFtZSwgOjpGdW5jdGlvbjx2b2lkKFNsb3RWaXNpdG9y
Jik+IGZ1bmN0aW9uLCBDb25zdHJhaW50Vm9sYXRpbGl0eSB2b2xhdGlsaXR5LCBDb25zdHJhaW50
Q29uY3VycmVuY3kgY29uY3VycmVuY3ksIENvbnN0cmFpbnRQYXJhbGxlbGlzbSBwYXJhbGxlbGlz
bSkKK3ZvaWQgTWFya2luZ0NvbnN0cmFpbnRTZXQ6OmFkZChDU3RyaW5nIGFiYnJldmlhdGVkTmFt
ZSwgQ1N0cmluZyBuYW1lLCA6OkZ1bmN0aW9uPHZvaWQoQWJzdHJhY3RTbG90VmlzaXRvciYpPiBm
dW5jdGlvbiwgQ29uc3RyYWludFZvbGF0aWxpdHkgdm9sYXRpbGl0eSwgQ29uc3RyYWludENvbmN1
cnJlbmN5IGNvbmN1cnJlbmN5LCBDb25zdHJhaW50UGFyYWxsZWxpc20gcGFyYWxsZWxpc20pCiB7
CiAgICAgYWRkKG1ha2VVbmlxdWU8U2ltcGxlTWFya2luZ0NvbnN0cmFpbnQ+KFdURk1vdmUoYWJi
cmV2aWF0ZWROYW1lKSwgV1RGTW92ZShuYW1lKSwgV1RGTW92ZShmdW5jdGlvbiksIHZvbGF0aWxp
dHksIGNvbmN1cnJlbmN5LCBwYXJhbGxlbGlzbSkpOwogfQpAQCAtNzgsMTQgKzc4LDE0IEBAIHZv
aWQgTWFya2luZ0NvbnN0cmFpbnRTZXQ6OmFkZCgKICAgICBtX3NldC5hcHBlbmQoV1RGTW92ZShj
b25zdHJhaW50KSk7CiB9CiAKLWJvb2wgTWFya2luZ0NvbnN0cmFpbnRTZXQ6OmV4ZWN1dGVDb252
ZXJnZW5jZShTbG90VmlzaXRvciYgdmlzaXRvcikKK2Jvb2wgTWFya2luZ0NvbnN0cmFpbnRTZXQ6
OmV4ZWN1dGVDb252ZXJnZW5jZShBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAg
IGJvb2wgcmVzdWx0ID0gZXhlY3V0ZUNvbnZlcmdlbmNlSW1wbCh2aXNpdG9yKTsKICAgICBkYXRh
TG9nSWYoT3B0aW9uczo6bG9nR0MoKSwgIiAiKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1i
b29sIE1hcmtpbmdDb25zdHJhaW50U2V0Ojppc1dhdmVmcm9udEFkdmFuY2luZyhTbG90VmlzaXRv
ciYgdmlzaXRvcikKK2Jvb2wgTWFya2luZ0NvbnN0cmFpbnRTZXQ6OmlzV2F2ZWZyb250QWR2YW5j
aW5nKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgZm9yIChNYXJraW5nQ29u
c3RyYWludCogb3V0Z3Jvd3RoIDogbV9vdXRncm93dGhzKSB7CiAgICAgICAgIGlmIChvdXRncm93
dGgtPndvcmtFc3RpbWF0ZSh2aXNpdG9yKSkKQEAgLTk0LDcgKzk0LDcgQEAgYm9vbCBNYXJraW5n
Q29uc3RyYWludFNldDo6aXNXYXZlZnJvbnRBZAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9v
bCBNYXJraW5nQ29uc3RyYWludFNldDo6ZXhlY3V0ZUNvbnZlcmdlbmNlSW1wbChTbG90VmlzaXRv
ciYgdmlzaXRvcikKK2Jvb2wgTWFya2luZ0NvbnN0cmFpbnRTZXQ6OmV4ZWN1dGVDb252ZXJnZW5j
ZUltcGwoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBTdXBlclNhbXBsZXJT
Y29wZSBzdXBlclNhbXBsZXJTY29wZShmYWxzZSk7CiAgICAgTWFya2luZ0NvbnN0cmFpbnRTb2x2
ZXIgc29sdmVyKCp0aGlzKTsKQEAgLTE2NiwxMCArMTY2LDEwIEBAIGJvb2wgTWFya2luZ0NvbnN0
cmFpbnRTZXQ6OmV4ZWN1dGVDb252ZXIKICAgICByZXR1cm4gIXNvbHZlci5kaWRWaXNpdFNvbWV0
aGluZygpOwogfQogCi12b2lkIE1hcmtpbmdDb25zdHJhaW50U2V0OjpleGVjdXRlQWxsKFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQordm9pZCBNYXJraW5nQ29uc3RyYWludFNldDo6ZXhlY3V0ZUFsbFN5
bmNocm9ub3VzbHkoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBmb3IgKGF1
dG8mIGNvbnN0cmFpbnQgOiBtX3NldCkKLSAgICAgICAgY29uc3RyYWludC0+ZXhlY3V0ZSh2aXNp
dG9yKTsKKyAgICAgICAgY29uc3RyYWludC0+ZXhlY3V0ZVN5bmNocm9ub3VzbHkodmlzaXRvcik7
CiAgICAgZGF0YUxvZ0lmKE9wdGlvbnM6OmxvZ0dDKCksICIgIik7CiB9CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50U2V0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnRTZXQuaAkocmV2
aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0
cmFpbnRTZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00NiwxNCArNDYsMTQgQEAgcHVibGljOgogICAgIHZv
aWQgYWRkKAogICAgICAgICBDU3RyaW5nIGFiYnJldmlhdGVkTmFtZSwKICAgICAgICAgQ1N0cmlu
ZyBuYW1lLAotICAgICAgICA6OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3ImKT4sCisgICAgICAg
IDo6RnVuY3Rpb248dm9pZChBYnN0cmFjdFNsb3RWaXNpdG9yJik+LAogICAgICAgICBDb25zdHJh
aW50Vm9sYXRpbGl0eSwKICAgICAgICAgQ29uc3RyYWludENvbmN1cnJlbmN5ID0gQ29uc3RyYWlu
dENvbmN1cnJlbmN5OjpDb25jdXJyZW50LAogICAgICAgICBDb25zdHJhaW50UGFyYWxsZWxpc20g
PSBDb25zdHJhaW50UGFyYWxsZWxpc206OlNlcXVlbnRpYWwpOwogICAgIAogICAgIHZvaWQgYWRk
KAogICAgICAgICBDU3RyaW5nIGFiYnJldmlhdGVkTmFtZSwgQ1N0cmluZyBuYW1lLAotICAgICAg
ICA6OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3ImKT4gZnVuYywKKyAgICAgICAgOjpGdW5jdGlv
bjx2b2lkKEFic3RyYWN0U2xvdFZpc2l0b3ImKT4gZnVuYywKICAgICAgICAgQ29uc3RyYWludFZv
bGF0aWxpdHkgdm9sYXRpbGl0eSwKICAgICAgICAgQ29uc3RyYWludFBhcmFsbGVsaXNtIHBhcmFs
bGVsaXNtKQogICAgIHsKQEAgLTY0LDIwICs2NCwyMCBAQCBwdWJsaWM6CiAgICAgCiAgICAgLy8g
QXNzdW1pbmcgdGhhdCB0aGUgbWFyayBzdGFja3MgYXJlIGFsbCBlbXB0eSwgdGhpcyB3aWxsIGdp
dmUgeW91IGEgZ3Vlc3MgYXMgdG8gd2hldGhlciBvcgogICAgIC8vIG5vdCB0aGUgd2F2ZWZyb250
IGlzIGFkdmFuY2luZy4KLSAgICBib29sIGlzV2F2ZWZyb250QWR2YW5jaW5nKFNsb3RWaXNpdG9y
Jik7Ci0gICAgYm9vbCBpc1dhdmVmcm9udFJldHJlYXRpbmcoU2xvdFZpc2l0b3ImIHZpc2l0b3Ip
IHsgcmV0dXJuICFpc1dhdmVmcm9udEFkdmFuY2luZyh2aXNpdG9yKTsgfQorICAgIGJvb2wgaXNX
YXZlZnJvbnRBZHZhbmNpbmcoQWJzdHJhY3RTbG90VmlzaXRvciYpOworICAgIGJvb2wgaXNXYXZl
ZnJvbnRSZXRyZWF0aW5nKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsgcmV0dXJuICFp
c1dhdmVmcm9udEFkdmFuY2luZyh2aXNpdG9yKTsgfQogICAgIAogICAgIC8vIFJldHVybnMgdHJ1
ZSBpZiB0aGlzIGV4ZWN1dGVkIGFsbCBjb25zdHJhaW50cyBhbmQgbm9uZSBvZiB0aGVtIHByb2R1
Y2VkIG5ldyB3b3JrLiBUaGlzCiAgICAgLy8gYXNzdW1lcyB0aGF0IHlvdSd2ZSBhbHJhZWR5IHZp
c2l0ZWQgcm9vdHMgYW5kIGRyYWluZWQgZnJvbSB0aGVyZS4KLSAgICBib29sIGV4ZWN1dGVDb252
ZXJnZW5jZShTbG90VmlzaXRvciYpOwotICAgIAorICAgIGJvb2wgZXhlY3V0ZUNvbnZlcmdlbmNl
KEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKKwogICAgIC8vIFNpbXBseSBydW5zIGFsbCBjb25zdHJh
aW50cyB3aXRob3V0IGFueSBzaGVuYW5pZ2Fucy4KLSAgICB2b2lkIGV4ZWN1dGVBbGwoU2xvdFZp
c2l0b3ImKTsKKyAgICB2b2lkIGV4ZWN1dGVBbGxTeW5jaHJvbm91c2x5KEFic3RyYWN0U2xvdFZp
c2l0b3ImKTsKICAgICAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIE1hcmtpbmdDb25zdHJh
aW50U29sdmVyOwotICAgIAotICAgIGJvb2wgZXhlY3V0ZUNvbnZlcmdlbmNlSW1wbChTbG90Vmlz
aXRvciYpOworCisgICAgYm9vbCBleGVjdXRlQ29udmVyZ2VuY2VJbXBsKEFic3RyYWN0U2xvdFZp
c2l0b3ImKTsKICAgICAKICAgICBIZWFwJiBtX2hlYXA7CiAgICAgQml0VmVjdG9yIG1fdW5leGVj
dXRlZFJvb3RzOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0
cmFpbnRTb2x2ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L01hcmtpbmdDb25zdHJhaW50U29sdmVyLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTE1MCwxMyArMTUwLDEzIEBAIHZvaWQgTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXI6OmV4
ZWN1dGUoTWEKICAgICBtX2V4ZWN1dGVkLnNldChjb25zdHJhaW50LmluZGV4KCkpOwogfQogCi12
b2lkIE1hcmtpbmdDb25zdHJhaW50U29sdmVyOjphZGRQYXJhbGxlbFRhc2soUmVmUHRyPFNoYXJl
ZFRhc2s8dm9pZChTbG90VmlzaXRvciYpPj4gdGFzaywgTWFya2luZ0NvbnN0cmFpbnQmIGNvbnN0
cmFpbnQpCit2b2lkIE1hcmtpbmdDb25zdHJhaW50U29sdmVyOjphZGRQYXJhbGxlbFRhc2soUmVm
UHRyPFNoYXJlZFRhc2s8dm9pZChBYnN0cmFjdFNsb3RWaXNpdG9yJik+PiB0YXNrLCBNYXJraW5n
Q29uc3RyYWludCYgY29uc3RyYWludCkKIHsKICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1f
bG9jayk7CiAgICAgbV90b0V4ZWN1dGVJblBhcmFsbGVsLmFwcGVuZChUYXNrV2l0aENvbnN0cmFp
bnQoV1RGTW92ZSh0YXNrKSwgJmNvbnN0cmFpbnQpKTsKIH0KIAotdm9pZCBNYXJraW5nQ29uc3Ry
YWludFNvbHZlcjo6cnVuRXhlY3V0aW9uVGhyZWFkKFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBTY2hl
ZHVsZXJQcmVmZXJlbmNlIHByZWZlcmVuY2UsIFNjb3BlZExhbWJkYTxPcHRpb25hbDx1bnNpZ25l
ZD4oKT4gcGlja05leHQpCit2b2lkIE1hcmtpbmdDb25zdHJhaW50U29sdmVyOjpydW5FeGVjdXRp
b25UaHJlYWQoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvciwgU2NoZWR1bGVyUHJlZmVyZW5j
ZSBwcmVmZXJlbmNlLCBTY29wZWRMYW1iZGE8T3B0aW9uYWw8dW5zaWduZWQ+KCk+IHBpY2tOZXh0
KQogewogICAgIGZvciAoOzspIHsKICAgICAgICAgYm9vbCBkb1BhcmFsbGVsV29ya01vZGU7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludFNvbHZlci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJh
aW50U29sdmVyLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL01hcmtpbmdDb25zdHJhaW50U29sdmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjUsMTUgKzY1LDE1
IEBAIHB1YmxpYzoKICAgICB2b2lkIGV4ZWN1dGUoTWFya2luZ0NvbnN0cmFpbnQmKTsKICAgICAK
ICAgICAvLyBQYXJhbGxlbCBjb25zdHJhaW50cyBjYW4gYWRkIHBhcmFsbGVsIHRhc2tzLgotICAg
IHZvaWQgYWRkUGFyYWxsZWxUYXNrKFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoU2xvdFZpc2l0b3Im
KT4+LCBNYXJraW5nQ29uc3RyYWludCYpOworICAgIHZvaWQgYWRkUGFyYWxsZWxUYXNrKFJlZlB0
cjxTaGFyZWRUYXNrPHZvaWQoQWJzdHJhY3RTbG90VmlzaXRvciYpPj4sIE1hcmtpbmdDb25zdHJh
aW50Jik7CiAgICAgCiBwcml2YXRlOgotICAgIHZvaWQgcnVuRXhlY3V0aW9uVGhyZWFkKFNsb3RW
aXNpdG9yJiwgU2NoZWR1bGVyUHJlZmVyZW5jZSwgU2NvcGVkTGFtYmRhPE9wdGlvbmFsPHVuc2ln
bmVkPigpPiBwaWNrTmV4dCk7CisgICAgdm9pZCBydW5FeGVjdXRpb25UaHJlYWQoQWJzdHJhY3RT
bG90VmlzaXRvciYsIFNjaGVkdWxlclByZWZlcmVuY2UsIFNjb3BlZExhbWJkYTxPcHRpb25hbDx1
bnNpZ25lZD4oKT4gcGlja05leHQpOwogICAgIAogICAgIHN0cnVjdCBUYXNrV2l0aENvbnN0cmFp
bnQgewogICAgICAgICBUYXNrV2l0aENvbnN0cmFpbnQoKSB7IH0KICAgICAgICAgCi0gICAgICAg
IFRhc2tXaXRoQ29uc3RyYWludChSZWZQdHI8U2hhcmVkVGFzazx2b2lkKFNsb3RWaXNpdG9yJik+
PiB0YXNrLCBNYXJraW5nQ29uc3RyYWludCogY29uc3RyYWludCkKKyAgICAgICAgVGFza1dpdGhD
b25zdHJhaW50KFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoQWJzdHJhY3RTbG90VmlzaXRvciYpPj4g
dGFzaywgTWFya2luZ0NvbnN0cmFpbnQqIGNvbnN0cmFpbnQpCiAgICAgICAgICAgICA6IHRhc2so
V1RGTW92ZSh0YXNrKSkKICAgICAgICAgICAgICwgY29uc3RyYWludChjb25zdHJhaW50KQogICAg
ICAgICB7CkBAIC04NSwxMiArODUsMTIgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAmJiBj
b25zdHJhaW50ID09IG90aGVyLmNvbnN0cmFpbnQ7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAg
ICAgIFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoU2xvdFZpc2l0b3ImKT4+IHRhc2s7CisgICAgICAg
IFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoQWJzdHJhY3RTbG90VmlzaXRvciYpPj4gdGFzazsKICAg
ICAgICAgTWFya2luZ0NvbnN0cmFpbnQqIGNvbnN0cmFpbnQgeyBudWxscHRyIH07CiAgICAgfTsK
ICAgICAKICAgICBIZWFwJiBtX2hlYXA7Ci0gICAgU2xvdFZpc2l0b3ImIG1fbWFpblZpc2l0b3I7
CisgICAgQWJzdHJhY3RTbG90VmlzaXRvciYgbV9tYWluVmlzaXRvcjsKICAgICBNYXJraW5nQ29u
c3RyYWludFNldCYgbV9zZXQ7CiAgICAgQml0VmVjdG9yIG1fZXhlY3V0ZWQ7CiAgICAgRGVxdWU8
VGFza1dpdGhDb25zdHJhaW50LCAzMj4gbV90b0V4ZWN1dGVJblBhcmFsbGVsOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1NpbXBsZU1hcmtpbmdDb25zdHJh
aW50LmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
U2ltcGxlTWFya2luZ0NvbnN0cmFpbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMwLDcgKzMwLDcgQEAg
bmFtZXNwYWNlIEpTQyB7CiAKIFNpbXBsZU1hcmtpbmdDb25zdHJhaW50OjpTaW1wbGVNYXJraW5n
Q29uc3RyYWludCgKICAgICBDU3RyaW5nIGFiYnJldmlhdGVkTmFtZSwgQ1N0cmluZyBuYW1lLAot
ICAgIDo6RnVuY3Rpb248dm9pZChTbG90VmlzaXRvciYpPiBleGVjdXRlRnVuY3Rpb24sCisgICAg
OjpGdW5jdGlvbjx2b2lkKEFic3RyYWN0U2xvdFZpc2l0b3ImKT4gZXhlY3V0ZUZ1bmN0aW9uLAog
ICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5IHZvbGF0aWxpdHksIENvbnN0cmFpbnRDb25jdXJyZW5j
eSBjb25jdXJyZW5jeSwKICAgICBDb25zdHJhaW50UGFyYWxsZWxpc20gcGFyYWxsZWxpc20pCiAg
ICAgOiBNYXJraW5nQ29uc3RyYWludChXVEZNb3ZlKGFiYnJldmlhdGVkTmFtZSksIFdURk1vdmUo
bmFtZSksIHZvbGF0aWxpdHksIGNvbmN1cnJlbmN5LCBwYXJhbGxlbGlzbSkKQEAgLTQyLDcgKzQy
LDcgQEAgU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQ6On5TaW1wbGVNYXJraW5nQwogewogfQogCi12
b2lkIFNpbXBsZU1hcmtpbmdDb25zdHJhaW50OjpleGVjdXRlSW1wbChTbG90VmlzaXRvciYgdmlz
aXRvcikKK3ZvaWQgU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQ6OmV4ZWN1dGVJbXBsKEFic3RyYWN0
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgbV9leGVjdXRlRnVuY3Rpb24odmlzaXRvcik7
CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TaW1wbGVNYXJraW5nQ29uc3Ry
YWludC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1NpbXBsZU1h
cmtpbmdDb25zdHJhaW50LmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL1NpbXBsZU1hcmtpbmdDb25zdHJhaW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzcsMTQg
KzM3LDE0IEBAIGNsYXNzIFNpbXBsZU1hcmtpbmdDb25zdHJhaW50IGZpbmFsIDogcHUKIHB1Ymxp
YzoKICAgICBKU19FWFBPUlRfUFJJVkFURSBTaW1wbGVNYXJraW5nQ29uc3RyYWludCgKICAgICAg
ICAgQ1N0cmluZyBhYmJyZXZpYXRlZE5hbWUsIENTdHJpbmcgbmFtZSwKLSAgICAgICAgOjpGdW5j
dGlvbjx2b2lkKFNsb3RWaXNpdG9yJik+LAorICAgICAgICA6OkZ1bmN0aW9uPHZvaWQoQWJzdHJh
Y3RTbG90VmlzaXRvciYpPiwKICAgICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHksCiAgICAgICAg
IENvbnN0cmFpbnRDb25jdXJyZW5jeSA9IENvbnN0cmFpbnRDb25jdXJyZW5jeTo6Q29uY3VycmVu
dCwKICAgICAgICAgQ29uc3RyYWludFBhcmFsbGVsaXNtID0gQ29uc3RyYWludFBhcmFsbGVsaXNt
OjpTZXF1ZW50aWFsKTsKICAgICAKICAgICBTaW1wbGVNYXJraW5nQ29uc3RyYWludCgKICAgICAg
ICAgQ1N0cmluZyBhYmJyZXZpYXRlZE5hbWUsIENTdHJpbmcgbmFtZSwKLSAgICAgICAgOjpGdW5j
dGlvbjx2b2lkKFNsb3RWaXNpdG9yJik+IGZ1bmMsCisgICAgICAgIDo6RnVuY3Rpb248dm9pZChB
YnN0cmFjdFNsb3RWaXNpdG9yJik+IGZ1bmMsCiAgICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5
IHZvbGF0aWxpdHksCiAgICAgICAgIENvbnN0cmFpbnRQYXJhbGxlbGlzbSBwYXJhbGxlbGlzbSkK
ICAgICAgICAgOiBTaW1wbGVNYXJraW5nQ29uc3RyYWludChhYmJyZXZpYXRlZE5hbWUsIG5hbWUs
IFdURk1vdmUoZnVuYyksIHZvbGF0aWxpdHksIENvbnN0cmFpbnRDb25jdXJyZW5jeTo6Q29uY3Vy
cmVudCwgcGFyYWxsZWxpc20pCkBAIC01NCw5ICs1NCw5IEBAIHB1YmxpYzoKICAgICBKU19FWFBP
UlRfUFJJVkFURSB+U2ltcGxlTWFya2luZ0NvbnN0cmFpbnQoKSBmaW5hbDsKICAgICAKIHByaXZh
dGU6Ci0gICAgdm9pZCBleGVjdXRlSW1wbChTbG90VmlzaXRvciYpIGZpbmFsOworICAgIHZvaWQg
ZXhlY3V0ZUltcGwoQWJzdHJhY3RTbG90VmlzaXRvciYpIGZpbmFsOwogCi0gICAgOjpGdW5jdGlv
bjx2b2lkKFNsb3RWaXNpdG9yJik+IG1fZXhlY3V0ZUZ1bmN0aW9uOworICAgIDo6RnVuY3Rpb248
dm9pZChBYnN0cmFjdFNsb3RWaXNpdG9yJik+IG1fZXhlY3V0ZUZ1bmN0aW9uOwogfTsKIAogfSAv
LyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90Vmlz
aXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZp
c2l0b3IuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9TbG90VmlzaXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDEyLTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03NywxNSArNzcsMTAgQEAgc3Rh
dGljIHZvaWQgdmFsaWRhdGUoSlNDZWxsKiBjZWxsKQogI2VuZGlmCiAKIFNsb3RWaXNpdG9yOjpT
bG90VmlzaXRvcihIZWFwJiBoZWFwLCBDU3RyaW5nIGNvZGVOYW1lKQotICAgIDogbV9ieXRlc1Zp
c2l0ZWQoMCkKLSAgICAsIG1fdmlzaXRDb3VudCgwKQotICAgICwgbV9pc0luUGFyYWxsZWxNb2Rl
KGZhbHNlKQorICAgIDogQmFzZShoZWFwLCBjb2RlTmFtZSwgaGVhcC5tX29wYXF1ZVJvb3RzKQog
ICAgICwgbV9tYXJraW5nVmVyc2lvbihNYXJrZWRTcGFjZTo6aW5pdGlhbFZlcnNpb24pCi0gICAg
LCBtX2hlYXAoaGVhcCkKLSAgICAsIG1fY29kZU5hbWUoY29kZU5hbWUpCiAjaWYgQVNTRVJUX0VO
QUJMRUQKICAgICAsIG1faXNDaGVja2luZ0ZvckRlZmF1bHRNYXJrVmlvbGF0aW9uKGZhbHNlKQot
ICAgICwgbV9pc0RyYWluaW5nKGZhbHNlKQogI2VuZGlmCiB7CiB9CkBAIC0xMTcsOCArMTEyLDgg
QEAgdm9pZCBTbG90VmlzaXRvcjo6ZGlkU3RhcnRNYXJraW5nKCkKIAogdm9pZCBTbG90VmlzaXRv
cjo6cmVzZXQoKQogeworICAgIEFic3RyYWN0U2xvdFZpc2l0b3I6OnJlc2V0KCk7CiAgICAgbV9i
eXRlc1Zpc2l0ZWQgPSAwOwotICAgIG1fdmlzaXRDb3VudCA9IDA7CiAgICAgbV9oZWFwQW5hbHl6
ZXIgPSBudWxscHRyOwogICAgIFJFTEVBU0VfQVNTRVJUKCFtX2N1cnJlbnRDZWxsKTsKIH0KQEAg
LTIzMCw3ICsyMjUsNyBAQCB2b2lkIFNsb3RWaXNpdG9yOjphcHBlbmRKU0NlbGxPckF1eGlsaWFy
CiB2b2lkIFNsb3RWaXNpdG9yOjphcHBlbmRTbG93KEpTQ2VsbCogY2VsbCwgRGVwZW5kZW5jeSBk
ZXBlbmRlbmN5KQogewogICAgIGlmIChVTkxJS0VMWShtX2hlYXBBbmFseXplcikpCi0gICAgICAg
IG1faGVhcEFuYWx5emVyLT5hbmFseXplRWRnZShtX2N1cnJlbnRDZWxsLCBjZWxsLCBtX3Jvb3RN
YXJrUmVhc29uKTsKKyAgICAgICAgbV9oZWFwQW5hbHl6ZXItPmFuYWx5emVFZGdlKG1fY3VycmVu
dENlbGwsIGNlbGwsIHJvb3RNYXJrUmVhc29uKCkpOwogCiAgICAgYXBwZW5kSGlkZGVuU2xvd0lt
cGwoY2VsbCwgZGVwZW5kZW5jeSk7CiB9CkBAIC04MDcsMTIgKzgwMiwxMiBAQCBNYXJrU3RhY2tB
cnJheSYgU2xvdFZpc2l0b3I6OmNvcnJlc3BvbmRpCiAgICAgcmV0dXJuICptX2hlYXAubV9zaGFy
ZWRNdXRhdG9yTWFya1N0YWNrOwogfQogCi12b2lkIFNsb3RWaXNpdG9yOjphZGRQYXJhbGxlbENv
bnN0cmFpbnRUYXNrKFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoU2xvdFZpc2l0b3ImKT4+IHRhc2sp
Cit2b2lkIFNsb3RWaXNpdG9yOjphZGRQYXJhbGxlbENvbnN0cmFpbnRUYXNrKFJlZlB0cjxTaGFy
ZWRUYXNrPHZvaWQoQWJzdHJhY3RTbG90VmlzaXRvciYpPj4gdGFzaykKIHsKICAgICBSRUxFQVNF
X0FTU0VSVChtX2N1cnJlbnRTb2x2ZXIpOwogICAgIFJFTEVBU0VfQVNTRVJUKG1fY3VycmVudENv
bnN0cmFpbnQpOwogICAgIFJFTEVBU0VfQVNTRVJUKHRhc2spOwotICAgIAorCiAgICAgbV9jdXJy
ZW50U29sdmVyLT5hZGRQYXJhbGxlbFRhc2sodGFzaywgKm1fY3VycmVudENvbnN0cmFpbnQpOwog
fQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmgJKHJldmlz
aW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI1LDU5ICsyNSw3MSBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2lu
Y2x1ZGUgIkFic3RyYWN0U2xvdFZpc2l0b3IuaCIKICNpbmNsdWRlICJIYW5kbGVUeXBlcy5oIgog
I2luY2x1ZGUgIkl0ZXJhdGlvblN0YXR1cy5oIgotI2luY2x1ZGUgIk1hcmtTdGFjay5oIgotI2lu
Y2x1ZGUgIlJvb3RNYXJrUmVhc29uLmgiCi0jaW5jbHVkZSAiVmlzaXRSYWNlS2V5LmgiCiAjaW5j
bHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3dGYvTW9ub3RvbmljVGltZS5oPgotI2lu
Y2x1ZGUgPHd0Zi9TaGFyZWRUYXNrLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgog
CiBuYW1lc3BhY2UgSlNDIHsKIAotY2xhc3MgQ29uc2VydmF0aXZlUm9vdHM7CiBjbGFzcyBHQ1Ro
cmVhZFNoYXJlZERhdGE7Ci1jbGFzcyBIZWFwOwogY2xhc3MgSGVhcENlbGw7CiBjbGFzcyBIZWFw
QW5hbHl6ZXI7Ci1jbGFzcyBNYXJrZWRCbG9jazsKIGNsYXNzIE1hcmtpbmdDb25zdHJhaW50Owog
Y2xhc3MgTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXI7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjbGFz
cyBXZWFrOwotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVHJhaXRzPiBjbGFzcyBXcml0
ZUJhcnJpZXJCYXNlOwogCiB0eXBlZGVmIHVpbnQzMl90IEhlYXBWZXJzaW9uOwogCi1jbGFzcyBT
bG90VmlzaXRvciB7CitjbGFzcyBTbG90VmlzaXRvciBmaW5hbCA6IHB1YmxpYyBBYnN0cmFjdFNs
b3RWaXNpdG9yIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShTbG90VmlzaXRvcik7CiAgICAg
V1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiAKKyAgICB1c2luZyBCYXNlID0gQWJzdHJhY3RTbG90
VmlzaXRvcjsKKwogICAgIGZyaWVuZCBjbGFzcyBTZXRDdXJyZW50Q2VsbFNjb3BlOwogICAgIGZy
aWVuZCBjbGFzcyBIZWFwOwogCiBwdWJsaWM6CisgICAgY2xhc3MgQ29udGV4dCB7CisgICAgcHVi
bGljOgorICAgICAgICBBTFdBWVNfSU5MSU5FIENvbnRleHQoQWJzdHJhY3RTbG90VmlzaXRvciYs
IEhlYXBDZWxsKikgeyB9CisgICAgfTsKKworICAgIGNsYXNzIERlZmF1bHRNYXJraW5nVmlvbGF0
aW9uQXNzZXJ0aW9uU2NvcGUgeworICAgIHB1YmxpYzoKKyNpZiBBU1NFUlRfRU5BQkxFRAorICAg
ICAgICBEZWZhdWx0TWFya2luZ1Zpb2xhdGlvbkFzc2VydGlvblNjb3BlKFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQorICAgICAgICAgICAgOiBtX3Zpc2l0b3IodmlzaXRvcikKKyAgICAgICAgeworICAg
ICAgICAgICAgbV93YXNDaGVja2luZ0ZvckRlZmF1bHRNYXJrVmlvbGF0aW9uID0gbV92aXNpdG9y
Lm1faXNDaGVja2luZ0ZvckRlZmF1bHRNYXJrVmlvbGF0aW9uOworICAgICAgICAgICAgbV92aXNp
dG9yLm1faXNDaGVja2luZ0ZvckRlZmF1bHRNYXJrVmlvbGF0aW9uID0gZmFsc2U7CisgICAgICAg
IH0KKworICAgICAgICB+RGVmYXVsdE1hcmtpbmdWaW9sYXRpb25Bc3NlcnRpb25TY29wZSgpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIG1fdmlzaXRvci5tX2lzQ2hlY2tpbmdGb3JEZWZhdWx0TWFy
a1Zpb2xhdGlvbiA9IG1fd2FzQ2hlY2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlvbjsKKyAgICAg
ICAgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgU2xvdFZpc2l0b3ImIG1fdmlzaXRvcjsKKyAg
ICAgICAgYm9vbCBtX3dhc0NoZWNraW5nRm9yRGVmYXVsdE1hcmtWaW9sYXRpb247CisjZWxzZQor
ICAgICAgICBEZWZhdWx0TWFya2luZ1Zpb2xhdGlvbkFzc2VydGlvblNjb3BlKFNsb3RWaXNpdG9y
JikgeyB9CisjZW5kaWYKKyAgICB9OworCiAgICAgU2xvdFZpc2l0b3IoSGVhcCYsIENTdHJpbmcg
Y29kZU5hbWUpOwogICAgIH5TbG90VmlzaXRvcigpOwogCi0gICAgTWFya1N0YWNrQXJyYXkmIGNv
bGxlY3Rvck1hcmtTdGFjaygpIHsgcmV0dXJuIG1fY29sbGVjdG9yU3RhY2s7IH0KLSAgICBNYXJr
U3RhY2tBcnJheSYgbXV0YXRvck1hcmtTdGFjaygpIHsgcmV0dXJuIG1fbXV0YXRvclN0YWNrOyB9
Ci0gICAgY29uc3QgTWFya1N0YWNrQXJyYXkmIGNvbGxlY3Rvck1hcmtTdGFjaygpIGNvbnN0IHsg
cmV0dXJuIG1fY29sbGVjdG9yU3RhY2s7IH0KLSAgICBjb25zdCBNYXJrU3RhY2tBcnJheSYgbXV0
YXRvck1hcmtTdGFjaygpIGNvbnN0IHsgcmV0dXJuIG1fbXV0YXRvclN0YWNrOyB9Ci0gICAgCi0g
ICAgVk0mIHZtKCk7Ci0gICAgY29uc3QgVk0mIHZtKCkgY29uc3Q7Ci0gICAgSGVhcCogaGVhcCgp
IGNvbnN0OworICAgIHZvaWQgYXBwZW5kKGNvbnN0IENvbnNlcnZhdGl2ZVJvb3RzJikgZmluYWw7
CiAKLSAgICB2b2lkIGFwcGVuZChjb25zdCBDb25zZXJ2YXRpdmVSb290cyYpOwotICAgIAogICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFRyYWl0cz4gdm9pZCBhcHBlbmQoY29uc3Qg
V3JpdGVCYXJyaWVyQmFzZTxULCBUcmFpdHM+Jik7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgVHJhaXRzPiB2b2lkIGFwcGVuZEhpZGRlbihjb25zdCBXcml0ZUJhcnJpZXJCYXNl
PFQsIFRyYWl0cz4mKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJdGVyYXRvcj4gdm9pZCBhcHBl
bmQoSXRlcmF0b3IgYmVnaW4gLCBJdGVyYXRvciBlbmQpOwotICAgIHZvaWQgYXBwZW5kVmFsdWVz
KGNvbnN0IFdyaXRlQmFycmllckJhc2U8VW5rbm93biwgUmF3VmFsdWVUcmFpdHM8VW5rbm93bj4+
Kiwgc2l6ZV90IGNvdW50KTsKLSAgICB2b2lkIGFwcGVuZFZhbHVlc0hpZGRlbihjb25zdCBXcml0
ZUJhcnJpZXJCYXNlPFVua25vd24sIFJhd1ZhbHVlVHJhaXRzPFVua25vd24+PiosIHNpemVfdCBj
b3VudCk7Ci0gICAgCisgICAgQUxXQVlTX0lOTElORSB2b2lkIGFwcGVuZFZhbHVlcyhjb25zdCBX
cml0ZUJhcnJpZXJCYXNlPFVua25vd24sIFJhd1ZhbHVlVHJhaXRzPFVua25vd24+PiosIHNpemVf
dCBjb3VudCk7CisgICAgQUxXQVlTX0lOTElORSB2b2lkIGFwcGVuZFZhbHVlc0hpZGRlbihjb25z
dCBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24sIFJhd1ZhbHVlVHJhaXRzPFVua25vd24+PiosIHNp
emVfdCBjb3VudCk7CisKICAgICAvLyBUaGVzZSBkb24ndCByZXF1aXJlIHlvdSB0byBwcm92ZSB0
aGF0IHlvdSBoYXZlIGEgV3JpdGVCYXJyaWVyPD4uIFRoYXQgbWFrZXMgc2Vuc2UKICAgICAvLyBm
b3I6CiAgICAgLy8KQEAgLTg3LDMyICs5OSwyNyBAQCBwdWJsaWM6CiAgICAgLy8KICAgICAvLyBJ
ZiB5b3UgYXJlIG5vdCBhIHJvb3QgYW5kIHlvdSBkb24ndCBrbm93IHdoYXQga2luZCBvZiBiYXJy
aWVyIHlvdSBoYXZlLCB0aGVuIHlvdQogICAgIC8vIHNob3VsZG4ndCBjYWxsIHRoZXNlIG1ldGhv
ZHMuCi0gICAgdm9pZCBhcHBlbmRVbmJhcnJpZXJlZChKU1ZhbHVlKTsKLSAgICB2b2lkIGFwcGVu
ZFVuYmFycmllcmVkKEpTVmFsdWUqLCBzaXplX3QpOwotICAgIHZvaWQgYXBwZW5kVW5iYXJyaWVy
ZWQoSlNDZWxsKik7CisgICAgQUxXQVlTX0lOTElORSB2b2lkIGFwcGVuZFVuYmFycmllcmVkKEpT
VmFsdWUpOworICAgIEFMV0FZU19JTkxJTkUgdm9pZCBhcHBlbmRVbmJhcnJpZXJlZChKU1ZhbHVl
Kiwgc2l6ZV90KTsKKyAgICB2b2lkIGFwcGVuZFVuYmFycmllcmVkKEpTQ2VsbCopIGZpbmFsOwog
ICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiAgICAgdm9pZCBhcHBlbmQoY29uc3QgV2Vh
azxUPiYgd2Vhayk7CiAgICAgCi0gICAgdm9pZCBhcHBlbmRIaWRkZW5VbmJhcnJpZXJlZChKU1Zh
bHVlKTsKLSAgICB2b2lkIGFwcGVuZEhpZGRlblVuYmFycmllcmVkKEpTQ2VsbCopOwotCi0gICAg
Ym9vbCBhZGRPcGFxdWVSb290KHZvaWQqKTsgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSByb290IHdh
cyBuZXcuCi0gICAgCi0gICAgYm9vbCBjb250YWluc09wYXF1ZVJvb3Qodm9pZCopIGNvbnN0Owor
ICAgIEFMV0FZU19JTkxJTkUgdm9pZCBhcHBlbmRIaWRkZW5VbmJhcnJpZXJlZChKU1ZhbHVlKTsK
KyAgICB2b2lkIGFwcGVuZEhpZGRlblVuYmFycmllcmVkKEpTQ2VsbCopIGZpbmFsOwogCi0gICAg
Ym9vbCBpc0VtcHR5KCkgeyByZXR1cm4gbV9jb2xsZWN0b3JTdGFjay5pc0VtcHR5KCkgJiYgbV9t
dXRhdG9yU3RhY2suaXNFbXB0eSgpOyB9CisgICAgYm9vbCBpc0ZpcnN0VmlzaXQoKSBjb25zdCBm
aW5hbCB7IHJldHVybiBtX2lzRmlyc3RWaXNpdDsgfQogCi0gICAgYm9vbCBpc0ZpcnN0VmlzaXQo
KSBjb25zdCB7IHJldHVybiBtX2lzRmlyc3RWaXNpdDsgfQorICAgIGJvb2wgaXNNYXJrZWQoY29u
c3Qgdm9pZCopIGNvbnN0IGZpbmFsOworICAgIGJvb2wgaXNNYXJrZWQoTWFya2VkQmxvY2smLCBI
ZWFwQ2VsbCopIGNvbnN0IGZpbmFsOworICAgIGJvb2wgaXNNYXJrZWQoUHJlY2lzZUFsbG9jYXRp
b24mLCBIZWFwQ2VsbCopIGNvbnN0IGZpbmFsOwogCiAgICAgdm9pZCBkaWRTdGFydE1hcmtpbmco
KTsKICAgICB2b2lkIHJlc2V0KCk7CiAgICAgdm9pZCBjbGVhck1hcmtTdGFja3MoKTsKIAogICAg
IHNpemVfdCBieXRlc1Zpc2l0ZWQoKSBjb25zdCB7IHJldHVybiBtX2J5dGVzVmlzaXRlZDsgfQot
ICAgIHNpemVfdCB2aXNpdENvdW50KCkgY29uc3QgeyByZXR1cm4gbV92aXNpdENvdW50OyB9Ci0g
ICAgCi0gICAgdm9pZCBhZGRUb1Zpc2l0Q291bnQoc2l6ZV90IHZhbHVlKSB7IG1fdmlzaXRDb3Vu
dCArPSB2YWx1ZTsgfQogCiAgICAgdm9pZCBkb25hdGUoKTsKICAgICB2b2lkIGRyYWluKE1vbm90
b25pY1RpbWUgdGltZW91dCA9IE1vbm90b25pY1RpbWU6OmluZmluaXR5KCkpOwpAQCAtMTM1LDI0
ICsxNDIsMTggQEAgcHVibGljOgogICAgIAogICAgIC8vIFRoaXMgaW5mb3JtcyB0aGUgR0MgYWJv
dXQgYXV4aWxpYXJ5IG9mIHNvbWUgc2l6ZSB0aGF0IHdlIGFyZSBrZWVwaW5nIGFsaXZlLiBJZiB5
b3UgZG9uJ3QgZG8KICAgICAvLyB0aGlzIHRoZW4gdGhlIHNwYWNlIHdpbGwgYmUgZnJlZWQgYXQg
ZW5kIG9mIEdDLgotICAgIHZvaWQgbWFya0F1eGlsaWFyeShjb25zdCB2b2lkKiBiYXNlKTsKKyAg
ICB2b2lkIG1hcmtBdXhpbGlhcnkoY29uc3Qgdm9pZCogYmFzZSkgZmluYWw7CiAKLSAgICB2b2lk
IHJlcG9ydEV4dHJhTWVtb3J5VmlzaXRlZChzaXplX3QpOworICAgIHZvaWQgcmVwb3J0RXh0cmFN
ZW1vcnlWaXNpdGVkKHNpemVfdCkgZmluYWw7CiAjaWYgRU5BQkxFKFJFU09VUkNFX1VTQUdFKQot
ICAgIHZvaWQgcmVwb3J0RXh0ZXJuYWxNZW1vcnlWaXNpdGVkKHNpemVfdCk7CisgICAgdm9pZCBy
ZXBvcnRFeHRlcm5hbE1lbW9yeVZpc2l0ZWQoc2l6ZV90KSBmaW5hbDsKICNlbmRpZgogICAgIAot
ICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwotCi0gICAgYm9vbCBpc0FuYWx5emlu
Z0hlYXAoKSBjb25zdCB7IHJldHVybiAhIW1faGVhcEFuYWx5emVyOyB9Ci0gICAgSGVhcEFuYWx5
emVyKiBoZWFwQW5hbHl6ZXIoKSBjb25zdCB7IHJldHVybiBtX2hlYXBBbmFseXplcjsgfQotICAg
IAotICAgIFJvb3RNYXJrUmVhc29uIHJvb3RNYXJrUmVhc29uKCkgY29uc3QgeyByZXR1cm4gbV9y
b290TWFya1JlYXNvbjsgfQotICAgIHZvaWQgc2V0Um9vdE1hcmtSZWFzb24oUm9vdE1hcmtSZWFz
b24gcmVhc29uKSB7IG1fcm9vdE1hcmtSZWFzb24gPSByZWFzb247IH0KKyAgICB2b2lkIGR1bXAo
UHJpbnRTdHJlYW0mKSBjb25zdCBmaW5hbDsKIAogICAgIEhlYXBWZXJzaW9uIG1hcmtpbmdWZXJz
aW9uKCkgY29uc3QgeyByZXR1cm4gbV9tYXJraW5nVmVyc2lvbjsgfQogCi0gICAgYm9vbCBtdXRh
dG9ySXNTdG9wcGVkKCkgY29uc3QgeyByZXR1cm4gbV9tdXRhdG9ySXNTdG9wcGVkOyB9CisgICAg
Ym9vbCBtdXRhdG9ySXNTdG9wcGVkKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9tdXRhdG9ySXNT
dG9wcGVkOyB9CiAgICAgCiAgICAgTG9jayYgcmlnaHRUb1J1bigpIHsgcmV0dXJuIG1fcmlnaHRU
b1J1bjsgfQogICAgIApAQCAtMTY0LDIwICsxNjUsMTYgQEAgcHVibGljOgogICAgIAogICAgIHZv
aWQgb3B0aW1pemVGb3JTdG9wcGVkTXV0YXRvcigpOwogICAgIAotICAgIHZvaWQgZGlkUmFjZShj
b25zdCBWaXNpdFJhY2VLZXkmKTsKKyAgICB2b2lkIGRpZFJhY2UoY29uc3QgVmlzaXRSYWNlS2V5
JikgZmluYWw7CiAgICAgdm9pZCBkaWRSYWNlKEpTQ2VsbCogY2VsbCwgY29uc3QgY2hhciogcmVh
c29uKSB7IGRpZFJhY2UoVmlzaXRSYWNlS2V5KGNlbGwsIHJlYXNvbikpOyB9CiAgICAgCi0gICAg
dm9pZCB2aXNpdEFzQ29uc3RyYWludChjb25zdCBKU0NlbGwqKTsKKyAgICB2b2lkIHZpc2l0QXND
b25zdHJhaW50KGNvbnN0IEpTQ2VsbCopIGZpbmFsOwogICAgIAogICAgIGJvb2wgZGlkUmVhY2hU
ZXJtaW5hdGlvbigpOwogICAgIAotICAgIHZvaWQgc2V0SWdub3JlTmV3T3BhcXVlUm9vdHMoYm9v
bCB2YWx1ZSkgeyBtX2lnbm9yZU5ld09wYXF1ZVJvb3RzID0gdmFsdWU7IH0KLQogICAgIHZvaWQg
ZG9uYXRlQWxsKCk7CiAgICAgCi0gICAgY29uc3QgY2hhciogY29kZU5hbWUoKSBjb25zdCB7IHJl
dHVybiBtX2NvZGVOYW1lLmRhdGEoKTsgfQotICAgIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIHZv
aWQgYWRkUGFyYWxsZWxDb25zdHJhaW50VGFzayhSZWZQdHI8U2hhcmVkVGFzazx2b2lkKFNsb3RW
aXNpdG9yJik+Pik7CisgICAgdm9pZCBhZGRQYXJhbGxlbENvbnN0cmFpbnRUYXNrKFJlZlB0cjxT
aGFyZWRUYXNrPHZvaWQoQWJzdHJhY3RTbG90VmlzaXRvciYpPj4pIGZpbmFsOwogCiBwcml2YXRl
OgogICAgIGZyaWVuZCBjbGFzcyBQYXJhbGxlbE1vZGVFbmFibGVyOwpAQCAtMjE2LDM5ICsyMTMs
MjUgQEAgcHJpdmF0ZToKIAogICAgIE1hcmtTdGFja0FycmF5JiBjb3JyZXNwb25kaW5nR2xvYmFs
U3RhY2soTWFya1N0YWNrQXJyYXkmKTsKIAotICAgIE1hcmtTdGFja0FycmF5IG1fY29sbGVjdG9y
U3RhY2s7Ci0gICAgTWFya1N0YWNrQXJyYXkgbV9tdXRhdG9yU3RhY2s7Ci0gICAgCi0gICAgc2l6
ZV90IG1fYnl0ZXNWaXNpdGVkOwotICAgIHNpemVfdCBtX3Zpc2l0Q291bnQ7Ci0gICAgc2l6ZV90
IG1fbm9uQ2VsbFZpc2l0Q291bnQgeyAwIH07IC8vIFVzZWQgZm9yIGluY3JlbWVudGFsIGRyYWlu
aW5nLCBpZ25vcmVkIG90aGVyd2lzZS4KLSAgICBDaGVja2VkU2l6ZSBtX2V4dHJhTWVtb3J5U2l6
ZSB7IDAgfTsKLSAgICBib29sIG1faXNJblBhcmFsbGVsTW9kZTsKLSAgICBib29sIG1faWdub3Jl
TmV3T3BhcXVlUm9vdHMgeyBmYWxzZSB9OyAvLyBVc2VmdWwgYXMgYSBkZWJ1Z2dpbmcgbW9kZS4K
KyAgICBib29sIG1faXNJblBhcmFsbGVsTW9kZSB7IGZhbHNlIH07CiAKICAgICBIZWFwVmVyc2lv
biBtX21hcmtpbmdWZXJzaW9uOwotICAgIAotICAgIEhlYXAmIG1faGVhcDsKKworICAgIHNpemVf
dCBtX2J5dGVzVmlzaXRlZCB7IDAgfTsKKyAgICBzaXplX3QgbV9ub25DZWxsVmlzaXRDb3VudCB7
IDAgfTsgLy8gVXNlZCBmb3IgaW5jcmVtZW50YWwgZHJhaW5pbmcsIGlnbm9yZWQgb3RoZXJ3aXNl
LgorICAgIENoZWNrZWRTaXplIG1fZXh0cmFNZW1vcnlTaXplIHsgMCB9OwogCiAgICAgSGVhcEFu
YWx5emVyKiBtX2hlYXBBbmFseXplciB7IG51bGxwdHIgfTsKICAgICBKU0NlbGwqIG1fY3VycmVu
dENlbGwgeyBudWxscHRyIH07Ci0gICAgUm9vdE1hcmtSZWFzb24gbV9yb290TWFya1JlYXNvbiB7
IFJvb3RNYXJrUmVhc29uOjpOb25lIH07CiAgICAgYm9vbCBtX2lzRmlyc3RWaXNpdCB7IGZhbHNl
IH07CiAgICAgYm9vbCBtX211dGF0b3JJc1N0b3BwZWQgeyBmYWxzZSB9OwogICAgIGJvb2wgbV9j
YW5PcHRpbWl6ZUZvclN0b3BwZWRNdXRhdG9yIHsgZmFsc2UgfTsKICAgICBMb2NrIG1fcmlnaHRU
b1J1bjsKICAgICAKLSAgICBDU3RyaW5nIG1fY29kZU5hbWU7Ci0gICAgCi0gICAgTWFya2luZ0Nv
bnN0cmFpbnQqIG1fY3VycmVudENvbnN0cmFpbnQgeyBudWxscHRyIH07Ci0gICAgTWFya2luZ0Nv
bnN0cmFpbnRTb2x2ZXIqIG1fY3VycmVudFNvbHZlciB7IG51bGxwdHIgfTsKLSAgICAKICAgICAv
LyBQdXQgcGFkZGluZyBoZXJlIHRvIG1pdGlnYXRlIGZhbHNlIHNoYXJpbmcgYmV0d2VlbiBtdWx0
aXBsZSBTbG90VmlzaXRvcnMuCiAgICAgY2hhciBwYWRkaW5nWzY0XTsKLXB1YmxpYzoKICNpZiBB
U1NFUlRfRU5BQkxFRAotICAgIGJvb2wgbV9pc0NoZWNraW5nRm9yRGVmYXVsdE1hcmtWaW9sYXRp
b247Ci0gICAgYm9vbCBtX2lzRHJhaW5pbmc7CisgICAgYm9vbCBtX2lzQ2hlY2tpbmdGb3JEZWZh
dWx0TWFya1Zpb2xhdGlvbiB7IGZhbHNlIH07CiAjZW5kaWYKIH07CiAKQEAgLTI3MSwyMyArMjU0
LDQgQEAgcHJpdmF0ZToKICAgICBTbG90VmlzaXRvciYgbV9zdGFjazsKIH07CiAKLWNsYXNzIFNl
dFJvb3RNYXJrUmVhc29uU2NvcGUgewotcHVibGljOgotICAgIFNldFJvb3RNYXJrUmVhc29uU2Nv
cGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IsIFJvb3RNYXJrUmVhc29uIHJlYXNvbikKLSAgICAgICAg
OiBtX3Zpc2l0b3IodmlzaXRvcikKLSAgICAgICAgLCBtX3ByZXZpb3VzUmVhc29uKHZpc2l0b3Iu
cm9vdE1hcmtSZWFzb24oKSkKLSAgICB7Ci0gICAgICAgIG1fdmlzaXRvci5zZXRSb290TWFya1Jl
YXNvbihyZWFzb24pOwotICAgIH0KLQotICAgIH5TZXRSb290TWFya1JlYXNvblNjb3BlKCkKLSAg
ICB7Ci0gICAgICAgIG1fdmlzaXRvci5zZXRSb290TWFya1JlYXNvbihtX3ByZXZpb3VzUmVhc29u
KTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgU2xvdFZpc2l0b3ImIG1fdmlzaXRvcjsKLSAgICBS
b290TWFya1JlYXNvbiBtX3ByZXZpb3VzUmVhc29uOwotfTsKLQogfSAvLyBuYW1lc3BhY2UgSlND
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvcklubGluZXMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvcklubGlu
ZXMuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xv
dFZpc2l0b3JJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDEyLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNSw5ICsyNSwxMCBAQAogCiAj
cHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgIkFic3RyYWN0U2xvdFZpc2l0b3JJbmxpbmVzLmgiCisj
aW5jbHVkZSAiTWFya2VkQmxvY2suaCIKKyNpbmNsdWRlICJQcmVjaXNlQWxsb2NhdGlvbi5oIgog
I2luY2x1ZGUgIlNsb3RWaXNpdG9yLmgiCi0jaW5jbHVkZSAiV2Vhay5oIgotI2luY2x1ZGUgIldl
YWtJbmxpbmVzLmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC0xMzQsMjEgKzEzNSwxOSBAQCBB
TFdBWVNfSU5MSU5FIHZvaWQgU2xvdFZpc2l0b3I6OmFwcGVuZFZhCiAgICAgICAgIGFwcGVuZEhp
ZGRlbihiYXJyaWVyc1tpXSk7CiB9CiAKLWlubGluZSBib29sIFNsb3RWaXNpdG9yOjphZGRPcGFx
dWVSb290KHZvaWQqIHB0cikKK0FMV0FZU19JTkxJTkUgYm9vbCBTbG90VmlzaXRvcjo6aXNNYXJr
ZWQoY29uc3Qgdm9pZCogcCkgY29uc3QKIHsKLSAgICBpZiAoIXB0cikKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIGlmIChtX2lnbm9yZU5ld09wYXF1ZVJvb3RzKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgaWYgKCFoZWFwKCktPm1fb3BhcXVlUm9vdHMuYWRkKHB0cikpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICBtX3Zpc2l0Q291bnQrKzsKLSAgICByZXR1cm4gdHJ1ZTsKKyAg
ICByZXR1cm4gaGVhcCgpLT5pc01hcmtlZChwKTsKIH0KIAotaW5saW5lIGJvb2wgU2xvdFZpc2l0
b3I6OmNvbnRhaW5zT3BhcXVlUm9vdCh2b2lkKiBwdHIpIGNvbnN0CitBTFdBWVNfSU5MSU5FIGJv
b2wgU2xvdFZpc2l0b3I6OmlzTWFya2VkKE1hcmtlZEJsb2NrJiBjb250YWluZXIsIEhlYXBDZWxs
KiBjZWxsKSBjb25zdAogewotICAgIHJldHVybiBoZWFwKCktPm1fb3BhcXVlUm9vdHMuY29udGFp
bnMocHRyKTsKKyAgICByZXR1cm4gY29udGFpbmVyLmlzTWFya2VkKG1hcmtpbmdWZXJzaW9uKCks
IGNlbGwpOworfQorCitBTFdBWVNfSU5MSU5FIGJvb2wgU2xvdFZpc2l0b3I6OmlzTWFya2VkKFBy
ZWNpc2VBbGxvY2F0aW9uJiBjb250YWluZXIsIEhlYXBDZWxsKiBjZWxsKSBjb25zdAoreworICAg
IHJldHVybiBjb250YWluZXIuaXNNYXJrZWQobWFya2luZ1ZlcnNpb24oKSwgY2VsbCk7CiB9CiAK
IGlubGluZSB2b2lkIFNsb3RWaXNpdG9yOjpyZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQoc2l6ZV90
IHNpemUpCkBAIC0xNjksMjEgKzE2OCw2IEBAIGlubGluZSB2b2lkIFNsb3RWaXNpdG9yOjpyZXBv
cnRFeHRlcm5hbE0KIH0KICNlbmRpZgogCi1pbmxpbmUgSGVhcCogU2xvdFZpc2l0b3I6OmhlYXAo
KSBjb25zdAotewotICAgIHJldHVybiAmbV9oZWFwOwotfQotCi1pbmxpbmUgVk0mIFNsb3RWaXNp
dG9yOjp2bSgpCi17Ci0gICAgcmV0dXJuIG1faGVhcC52bSgpOwotfQotCi1pbmxpbmUgY29uc3Qg
Vk0mIFNsb3RWaXNpdG9yOjp2bSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1faGVhcC52bSgpOwot
fQotCiB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgogSXRlcmF0aW9uU3RhdHVzIFNsb3RWaXNpdG9y
Ojpmb3JFYWNoTWFya1N0YWNrKGNvbnN0IEZ1bmMmIGZ1bmMpCiB7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvck1hY3Jvcy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yTWFjcm9zLmgJKG5vbmV4aXN0ZW50KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3JNYWNyb3MuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDcxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBB
YnN0cmFjdFNsb3RWaXNpdG9yOworY2xhc3MgSlNDZWxsOworY2xhc3MgU2xvdFZpc2l0b3I7CisK
KyNkZWZpbmUgREVDTEFSRV9VTlVTRURfU1RSVUNUX1RPX1RFUk1JTkFURV9WSVNJVF9DSElMRFJF
Tl9NQUNST19FWFBBTkRFUl9JTVBMKGNvdW50ZXIpIFwKKyAgICBzdHJ1Y3QgVW51c2VkU2xvdFZp
c2l0b3JTdHJ1Y3RTb1dlQ2FuSGF2ZUFTZW1pY29sb24jI2NvdW50ZXIgeyB9CisKKyNkZWZpbmUg
REVDTEFSRV9VTlVTRURfU1RSVUNUX1RPX1RFUk1JTkFURV9WSVNJVF9DSElMRFJFTl9NQUNST19F
WFBBTkRFUihjb3VudGVyKSBcCisgICAgREVDTEFSRV9VTlVTRURfU1RSVUNUX1RPX1RFUk1JTkFU
RV9WSVNJVF9DSElMRFJFTl9NQUNST19FWFBBTkRFUl9JTVBMKGNvdW50ZXIpCisKKyNkZWZpbmUg
REVDTEFSRV9VTlVTRURfU1RSVUNUX1RPX1RFUk1JTkFURV9WSVNJVF9DSElMRFJFTl9NQUNSTyBc
CisgICAgREVDTEFSRV9VTlVTRURfU1RSVUNUX1RPX1RFUk1JTkFURV9WSVNJVF9DSElMRFJFTl9N
QUNST19FWFBBTkRFUihfX0NPVU5URVJfXykKKworLy8gTWFjcm9zIGZvciBzdGF0aWMgdmlzaXRD
aGlsZHJlbigpLgorCisjZGVmaW5lIERFQ0xBUkVfVklTSVRfQ0hJTERSRU5fV0lUSF9NT0RJRklF
Uihtb2RpZmllcikgXAorcHJpdmF0ZTogXAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+
IEFMV0FZU19JTkxJTkUgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiwgVmlz
aXRvciYpOyBcCitwdWJsaWM6IFwKKyAgICBtb2RpZmllciBzdGF0aWMgdm9pZCB2aXNpdENoaWxk
cmVuKEpTQ2VsbCosIEFic3RyYWN0U2xvdFZpc2l0b3ImKTsgXAorICAgIG1vZGlmaWVyIHN0YXRp
YyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKQorCisjZGVmaW5lIERF
Q0xBUkVfVklTSVRfQ0hJTERSRU4gXAorICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU5fV0lUSF9N
T0RJRklFUigpCisKKyNkZWZpbmUgREVGSU5FX1ZJU0lUX0NISUxEUkVOX1dJVEhfTU9ESUZJRVIo
bW9kaWZpZXIsIGNsYXNzTmFtZSkgXAorICAgIG1vZGlmaWVyIHZvaWQgY2xhc3NOYW1lOjp2aXNp
dENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikgXAor
ICAgIHsgXAorICAgICAgICBBYnN0cmFjdFNsb3RWaXNpdG9yOjpDb250ZXh0IGNvbnRleHQodmlz
aXRvciwgY2VsbCk7IFwKKyAgICAgICAgdmlzaXRDaGlsZHJlbkltcGwoY2VsbCwgdmlzaXRvcik7
IFwKKyAgICB9IFwKKyAgICBtb2RpZmllciB2b2lkIGNsYXNzTmFtZTo6dmlzaXRDaGlsZHJlbihK
U0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKSB7IHZpc2l0Q2hpbGRyZW5JbXBsKGNl
bGwsIHZpc2l0b3IpOyB9IFwKKyAgICBERUNMQVJFX1VOVVNFRF9TVFJVQ1RfVE9fVEVSTUlOQVRF
X1ZJU0lUX0NISUxEUkVOX01BQ1JPCisKKyNkZWZpbmUgREVGSU5FX1ZJU0lUX0NISUxEUkVOKGNs
YXNzTmFtZSkgXAorICAgIERFRklORV9WSVNJVF9DSElMRFJFTl9XSVRIX01PRElGSUVSKCwgY2xh
c3NOYW1lKQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwordXNpbmcgSlNDOjpBYnN0cmFjdFNsb3RW
aXNpdG9yOwordXNpbmcgSlNDOjpKU0NlbGw7Cit1c2luZyBKU0M6OlNsb3RWaXNpdG9yOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3Vic3BhY2UuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdWJzcGFjZS5oCShyZXZpc2lvbiAyNzI4MzApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdWJzcGFjZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNy0yMDE4IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIxIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtMzQsNiArMzQsNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAorY2xhc3MgQWJzdHJhY3RTbG90
VmlzaXRvcjsKIGNsYXNzIEFsaWduZWRNZW1vcnlBbGxvY2F0b3I7CiBjbGFzcyBIZWFwQ2VsbFR5
cGU7CiAKQEAgLTg3LDcgKzg4LDcgQEAgcHVibGljOgogICAgIHZvaWQgZm9yRWFjaE1hcmtlZENl
bGwoY29uc3QgRnVuYyYpOwogICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+Ci0gICAg
UmVmPFNoYXJlZFRhc2s8dm9pZChTbG90VmlzaXRvciYpPj4gZm9yRWFjaE1hcmtlZENlbGxJblBh
cmFsbGVsKGNvbnN0IEZ1bmMmKTsKKyAgICBSZWY8U2hhcmVkVGFzazx2b2lkKEFic3RyYWN0U2xv
dFZpc2l0b3ImKT4+IGZvckVhY2hNYXJrZWRDZWxsSW5QYXJhbGxlbChjb25zdCBGdW5jJik7CiAK
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgogICAgIHZvaWQgZm9yRWFjaExpdmVDZWxsKGNv
bnN0IEZ1bmMmKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N1YnNwYWNlSW5s
aW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N1YnNwYWNl
SW5saW5lcy5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9TdWJzcGFjZUlubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTctMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTg2LDkgKzg2LDkgQEAgdm9p
ZCBTdWJzcGFjZTo6Zm9yRWFjaE1hcmtlZENlbGwoY29uc3QgRgogfQogCiB0ZW1wbGF0ZTx0eXBl
bmFtZSBGdW5jPgotUmVmPFNoYXJlZFRhc2s8dm9pZChTbG90VmlzaXRvciYpPj4gU3Vic3BhY2U6
OmZvckVhY2hNYXJrZWRDZWxsSW5QYXJhbGxlbChjb25zdCBGdW5jJiBmdW5jKQorUmVmPFNoYXJl
ZFRhc2s8dm9pZChBYnN0cmFjdFNsb3RWaXNpdG9yJik+PiBTdWJzcGFjZTo6Zm9yRWFjaE1hcmtl
ZENlbGxJblBhcmFsbGVsKGNvbnN0IEZ1bmMmIGZ1bmMpCiB7Ci0gICAgY2xhc3MgVGFzayBmaW5h
bCA6IHB1YmxpYyBTaGFyZWRUYXNrPHZvaWQoU2xvdFZpc2l0b3ImKT4geworICAgIGNsYXNzIFRh
c2sgZmluYWwgOiBwdWJsaWMgU2hhcmVkVGFzazx2b2lkKEFic3RyYWN0U2xvdFZpc2l0b3ImKT4g
ewogICAgIHB1YmxpYzoKICAgICAgICAgVGFzayhTdWJzcGFjZSYgc3Vic3BhY2UsIGNvbnN0IEZ1
bmMmIGZ1bmMpCiAgICAgICAgICAgICA6IG1fc3Vic3BhY2Uoc3Vic3BhY2UpCkBAIC05Nyw3ICs5
Nyw3IEBAIFJlZjxTaGFyZWRUYXNrPHZvaWQoU2xvdFZpc2l0b3ImKT4+IFN1YnMKICAgICAgICAg
ewogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICB2b2lkIHJ1bihTbG90VmlzaXRvciYgdmlz
aXRvcikgZmluYWwKKyAgICAgICAgdm9pZCBydW4oQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRv
cikgZmluYWwKICAgICAgICAgewogICAgICAgICAgICAgd2hpbGUgKE1hcmtlZEJsb2NrOjpIYW5k
bGUqIGhhbmRsZSA9IG1fYmxvY2tTb3VyY2UtPnJ1bigpKSB7CiAgICAgICAgICAgICAgICAgaGFu
ZGxlLT5mb3JFYWNoTWFya2VkQ2VsbCgKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L1ZlcmlmaWVyU2xvdFZpc2l0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL1ZlcmlmaWVyU2xvdFZpc2l0b3IuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1ZlcmlmaWVyU2xvdFZpc2l0b3IuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMzMyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIlZlcmlmaWVyU2xvdFZpc2l0b3IuaCIKKworI2luY2x1ZGUgIkNvbnNlcnZhdGl2
ZVJvb3RzLmgiCisjaW5jbHVkZSAiR0NTZWdtZW50ZWRBcnJheUlubGluZXMuaCIKKyNpbmNsdWRl
ICJIZWFwQ2VsbC5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNsdWRlICJWTS5oIgor
I2luY2x1ZGUgIlZlcmlmaWVyU2xvdFZpc2l0b3JJbmxpbmVzLmgiCisjaW5jbHVkZSA8d3RmL1N0
YWNrVHJhY2UuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK3VzaW5nIE1hcmtlckRhdGEgPSBWZXJp
ZmllclNsb3RWaXNpdG9yOjpNYXJrZXJEYXRhOworCitjb25zdGV4cHIgaW50IG1heE1hcmtpbmdT
dGFja0ZyYW1lc1RvQ2FwdHVyZSA9IDEwMDsKKworTWFya2VyRGF0YTo6TWFya2VyRGF0YShIZWFw
Q2VsbCogcGFyZW50LCBzdGQ6OnVuaXF1ZV9wdHI8U3RhY2tUcmFjZT4mJiBzdGFjaykKKyAgICA6
IHBhcmVudChwYXJlbnQpCisgICAgLCBzdGFjayhXVEZNb3ZlKHN0YWNrKSkKK3sKK30KKworVmVy
aWZpZXJTbG90VmlzaXRvcjo6TWFya2VkQmxvY2tEYXRhOjpNYXJrZWRCbG9ja0RhdGEoTWFya2Vk
QmxvY2sqIGJsb2NrKQorICAgIDogbV9ibG9jayhibG9jaykKKyAgICAsIG1fYXRvbXMoTWFya2Vk
QmxvY2s6OmF0b21zUGVyQmxvY2spCit7Cit9CisKK3ZvaWQgVmVyaWZpZXJTbG90VmlzaXRvcjo6
TWFya2VkQmxvY2tEYXRhOjphZGRNYXJrZXJEYXRhKHVuc2lnbmVkIGF0b21OdW1iZXIsIE1hcmtl
ckRhdGEmJiBtYXJrZXIpCit7CisgICAgaWYgKG1fbWFya2Vycy5pc0VtcHR5KCkpCisgICAgICAg
IG1fbWFya2Vycy5ncm93KE1hcmtlZEJsb2NrOjphdG9tc1BlckJsb2NrKTsKKyAgICBtX21hcmtl
cnNbYXRvbU51bWJlcl0gPSBXVEZNb3ZlKG1hcmtlcik7Cit9CisKK2NvbnN0IE1hcmtlckRhdGEq
IFZlcmlmaWVyU2xvdFZpc2l0b3I6Ok1hcmtlZEJsb2NrRGF0YTo6bWFya2VyRGF0YSh1bnNpZ25l
ZCBhdG9tTnVtYmVyKSBjb25zdAoreworICAgIGF1dG8mIG1hcmtlciA9IG1fbWFya2Vyc1thdG9t
TnVtYmVyXTsKKyAgICBpZiAobWFya2VyLnN0YWNrKQorICAgICAgICByZXR1cm4gJm1hcmtlcjsK
KyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworVmVyaWZpZXJTbG90VmlzaXRvcjo6UHJlY2lzZUFs
bG9jYXRpb25EYXRhOjpQcmVjaXNlQWxsb2NhdGlvbkRhdGEoUHJlY2lzZUFsbG9jYXRpb24qIGFs
bG9jYXRpb24pCisgICAgOiBtX2FsbG9jYXRpb24oYWxsb2NhdGlvbikKK3sKK30KKworY29uc3Qg
TWFya2VyRGF0YSogVmVyaWZpZXJTbG90VmlzaXRvcjo6UHJlY2lzZUFsbG9jYXRpb25EYXRhOjpt
YXJrZXJEYXRhKCkgY29uc3QKK3sKKyAgICBpZiAobV9tYXJrZXIuc3RhY2spCisgICAgICAgIHJl
dHVybiAmbV9tYXJrZXI7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK3ZvaWQgVmVyaWZpZXJT
bG90VmlzaXRvcjo6UHJlY2lzZUFsbG9jYXRpb25EYXRhOjphZGRNYXJrZXJEYXRhKE1hcmtlckRh
dGEmJiBtYXJrZXIpCit7CisgICAgbV9tYXJrZXIgPSBXVEZNb3ZlKG1hcmtlcik7Cit9CisKK1Zl
cmlmaWVyU2xvdFZpc2l0b3I6OlZlcmlmaWVyU2xvdFZpc2l0b3IoSGVhcCYgaGVhcCkKKyAgICA6
IEJhc2UoaGVhcCwgIlZlcmlmaWVyIiwgbV9vcGFxdWVSb290U3RvcmFnZSkKK3sKK30KKworVmVy
aWZpZXJTbG90VmlzaXRvcjo6flZlcmlmaWVyU2xvdFZpc2l0b3IoKQoreworfQorCit2b2lkIFZl
cmlmaWVyU2xvdFZpc2l0b3I6OmFkZFBhcmFsbGVsQ29uc3RyYWludFRhc2soUmVmUHRyPFNoYXJl
ZFRhc2s8dm9pZChBYnN0cmFjdFNsb3RWaXNpdG9yJik+PiB0YXNrKQoreworICAgIG1fY29uc3Ry
YWludFRhc2tzLmFwcGVuZChXVEZNb3ZlKHRhc2spKTsKK30KKwordm9pZCBWZXJpZmllclNsb3RW
aXNpdG9yOjpleGVjdXRlQ29uc3RyYWludFRhc2tzKCkKK3sKKyAgICB3aGlsZSAoIW1fY29uc3Ry
YWludFRhc2tzLmlzRW1wdHkoKSkKKyAgICAgICAgbV9jb25zdHJhaW50VGFza3MudGFrZUZpcnN0
KCktPnJ1bigqdGhpcyk7Cit9CisKK3ZvaWQgVmVyaWZpZXJTbG90VmlzaXRvcjo6YXBwZW5kKGNv
bnN0IENvbnNlcnZhdGl2ZVJvb3RzJiBjb25zZXJ2YXRpdmVSb290cykKK3sKKyAgICBhdXRvIGFw
cGVuZEpTQ2VsbE9yQXV4aWxpYXJ5ID0gWyZdIChIZWFwQ2VsbCogaGVhcENlbGwpIHsKKyAgICAg
ICAgaWYgKCFoZWFwQ2VsbCkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBpZiAodGVz
dEFuZFNldE1hcmtlZChoZWFwQ2VsbCkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAg
c3dpdGNoIChoZWFwQ2VsbC0+Y2VsbEtpbmQoKSkgeworICAgICAgICBjYXNlIEhlYXBDZWxsOjpK
U0NlbGw6CisgICAgICAgIGNhc2UgSGVhcENlbGw6OkpTQ2VsbFdpdGhJbmRleGluZ0hlYWRlcjog
eworICAgICAgICAgICAgSlNDZWxsKiBqc0NlbGwgPSBzdGF0aWNfY2FzdDxKU0NlbGwqPihoZWFw
Q2VsbCk7CisgICAgICAgICAgICBhcHBlbmRUb01hcmtTdGFjayhqc0NlbGwpOworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBIZWFwQ2VsbDo6QXV4aWxpYXJ5
OgorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfTsKKworICAgIEhlYXBDZWxs
Kiogcm9vdHMgPSBjb25zZXJ2YXRpdmVSb290cy5yb290cygpOworICAgIHNpemVfdCBzaXplID0g
Y29uc2VydmF0aXZlUm9vdHMuc2l6ZSgpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6
ZTsgKytpKQorICAgICAgICBhcHBlbmRKU0NlbGxPckF1eGlsaWFyeShyb290c1tpXSk7Cit9CisK
K3ZvaWQgVmVyaWZpZXJTbG90VmlzaXRvcjo6YXBwZW5kVG9NYXJrU3RhY2soSlNDZWxsKiBjZWxs
KQoreworICAgIEFTU0VSVCghY2VsbC0+aXNaYXBwZWQoKSk7CisgICAgbV9jb2xsZWN0b3JTdGFj
ay5hcHBlbmQoY2VsbCk7Cit9CisKK3ZvaWQgVmVyaWZpZXJTbG90VmlzaXRvcjo6YXBwZW5kVW5i
YXJyaWVyZWQoSlNDZWxsKiBjZWxsKQoreworICAgIGlmICghY2VsbCkKKyAgICAgICAgcmV0dXJu
OworCisgICAgaWYgKFVOTElLRUxZKGNlbGwtPmlzUHJlY2lzZUFsbG9jYXRpb24oKSkpIHsKKyAg
ICAgICAgaWYgKExJS0VMWShpc01hcmtlZChjZWxsLT5wcmVjaXNlQWxsb2NhdGlvbigpLCBjZWxs
KSkpCisgICAgICAgICAgICByZXR1cm47CisgICAgfSBlbHNlIHsKKyAgICAgICAgTWFya2VkQmxv
Y2smIGJsb2NrID0gY2VsbC0+bWFya2VkQmxvY2soKTsKKyAgICAgICAgaWYgKExJS0VMWShpc01h
cmtlZChibG9jaywgY2VsbCkpKQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGFw
cGVuZFNsb3coY2VsbCk7Cit9CisKK3ZvaWQgVmVyaWZpZXJTbG90VmlzaXRvcjo6YXBwZW5kSGlk
ZGVuVW5iYXJyaWVyZWQoSlNDZWxsKiBjZWxsKQoreworICAgIGFwcGVuZFVuYmFycmllcmVkKGNl
bGwpOworfQorCit2b2lkIFZlcmlmaWVyU2xvdFZpc2l0b3I6OmRyYWluKCkKK3sKKyAgICBSRUxF
QVNFX0FTU0VSVChtX211dGF0b3JTdGFjay5pc0VtcHR5KCkpOworCisgICAgTWFya1N0YWNrQXJy
YXkmIHN0YWNrID0gbV9jb2xsZWN0b3JTdGFjazsKKyAgICBpZiAoc3RhY2suaXNFbXB0eSgpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBzdGFjay5yZWZpbGwoKTsKKyAgICB3aGlsZSAoc3RhY2su
Y2FuUmVtb3ZlTGFzdCgpKQorICAgICAgICB2aXNpdENoaWxkcmVuKHN0YWNrLnJlbW92ZUxhc3Qo
KSk7Cit9CisKK3ZvaWQgVmVyaWZpZXJTbG90VmlzaXRvcjo6ZHVtcE1hcmtlckRhdGEoSGVhcENl
bGwqIGNlbGwpCit7CisgICAgaWYgKGNlbGwtPmlzUHJlY2lzZUFsbG9jYXRpb24oKSkKKyAgICAg
ICAgcmV0dXJuIGR1bXBNYXJrZXJEYXRhKGNlbGwtPnByZWNpc2VBbGxvY2F0aW9uKCksIGNlbGwp
OworICAgIHJldHVybiBkdW1wTWFya2VyRGF0YShjZWxsLT5tYXJrZWRCbG9jaygpLCBjZWxsKTsK
K30KKwordm9pZCBWZXJpZmllclNsb3RWaXNpdG9yOjpkdW1wTWFya2VyRGF0YShQcmVjaXNlQWxs
b2NhdGlvbiYgYWxsb2NhdGlvbiwgSGVhcENlbGwqIGNlbGwpCit7CisgICAgYXV0byBpdGVyYXRv
ciA9IG1fcHJlY2lzZUFsbG9jYXRpb25NYXAuZmluZCgmYWxsb2NhdGlvbik7CisgICAgaWYgKGl0
ZXJhdG9yICE9IG1fcHJlY2lzZUFsbG9jYXRpb25NYXAuZW5kKCkpIHsKKyAgICAgICAgZHVtcE1h
cmtlckRhdGEoY2VsbCwgaXRlcmF0b3ItPnZhbHVlLT5tYXJrZXJEYXRhKCkpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorICAgIGRhdGFMb2dMbigiQ2VsbCAiLCBSYXdQb2ludGVyKGNlbGwpLCAi
IG5vdCBmb3VuZCIpOworfQorCit2b2lkIFZlcmlmaWVyU2xvdFZpc2l0b3I6OmR1bXBNYXJrZXJE
YXRhKE1hcmtlZEJsb2NrJiBibG9jaywgSGVhcENlbGwqIGNlbGwpCit7CisgICAgYXV0byBpdGVy
YXRvciA9IG1fbWFya2VkQmxvY2tNYXAuZmluZCgmYmxvY2spOworICAgIGlmIChpdGVyYXRvciAh
PSBtX21hcmtlZEJsb2NrTWFwLmVuZCgpKSB7CisgICAgICAgIHVuc2lnbmVkIGF0b21OdW1iZXIg
PSBibG9jay5hdG9tTnVtYmVyKGNlbGwpOworICAgICAgICBkdW1wTWFya2VyRGF0YShjZWxsLCBp
dGVyYXRvci0+dmFsdWUtPm1hcmtlckRhdGEoYXRvbU51bWJlcikpOworICAgICAgICByZXR1cm47
CisgICAgfQorICAgIGRhdGFMb2dMbigiQ2VsbCAiLCBSYXdQb2ludGVyKGNlbGwpLCAiIG5vdCBm
b3VuZCIpOworfQorCit2b2lkIFZlcmlmaWVyU2xvdFZpc2l0b3I6OmR1bXBNYXJrZXJEYXRhKEhl
YXBDZWxsKiBjZWxsLCBjb25zdCBNYXJrZXJEYXRhKiBtYXJrZXIpCit7CisgICAgaWYgKCFtYXJr
ZXIpIHsKKyAgICAgICAgZGF0YUxvZ0xuKCJNYXJrZXIgZGF0YSBpcyBub3QgYXZhaWxhYmxlIGZv
ciBjZWxsICIsIFJhd1BvaW50ZXIoY2VsbCkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgZGF0YUxvZ0xuKCJDZWxsICIsIFJhd1BvaW50ZXIoY2VsbCksICIgd2FzIHJlYWNoYWJsZSB2
aWEgY2VsbCAiLCBSYXdQb2ludGVyKG1hcmtlci0+cGFyZW50KSwgIiBhdDoiKTsKKyAgICBtYXJr
ZXItPnN0YWNrLT5kdW1wKFdURjo6ZGF0YUZpbGUoKSwgIiAgICAiKTsKK30KKworYm9vbCBWZXJp
ZmllclNsb3RWaXNpdG9yOjppc0ZpcnN0VmlzaXQoKSBjb25zdAoreworICAgIC8vIEluIHRoZSBy
ZWd1bGFyIEdDLCB0aGlzIHJldHVybiB2YWx1ZSBpcyBvbmx5IHVzZWQgdG8gY29udHJvbCB3aGV0
aGVyCisgICAgLy8gVW5saW5rZWRDb2RlQmxvY2tzIHdpbGwgYmUgYWdlZCAoc2VlIFVubGlua2Vk
Q29kZUJsb2NrOjp2aXNpdENoaWxkcmVuSW1wbCgpKS4KKyAgICAvLyBGb3IgdGhlIHZlcmlmaWVy
IEdDIHBhc3MsIHdlIHNob3VsZCBhbHdheXMgcmV0dXJuIGZhbHNlIGJlY2F1c2Ugd2UgZG9uJ3QK
KyAgICAvLyB3YW50IHRvIGRvIHRoZSBhZ2luZyBhY3Rpb24gYWdhaW4uCisgICAgcmV0dXJuIGZh
bHNlOworfQorCitib29sIFZlcmlmaWVyU2xvdFZpc2l0b3I6OmlzTWFya2VkKGNvbnN0IHZvaWQq
IHJhd0NlbGwpIGNvbnN0Cit7CisgICAgSGVhcENlbGwqIGNlbGwgPSBiaXR3aXNlX2Nhc3Q8SGVh
cENlbGwqPihyYXdDZWxsKTsKKyAgICBpZiAoY2VsbC0+aXNQcmVjaXNlQWxsb2NhdGlvbigpKQor
ICAgICAgICByZXR1cm4gaXNNYXJrZWQoY2VsbC0+cHJlY2lzZUFsbG9jYXRpb24oKSwgY2VsbCk7
CisgICAgcmV0dXJuIGlzTWFya2VkKGNlbGwtPm1hcmtlZEJsb2NrKCksIGNlbGwpOworfQorCiti
b29sIFZlcmlmaWVyU2xvdFZpc2l0b3I6OmlzTWFya2VkKFByZWNpc2VBbGxvY2F0aW9uJiBhbGxv
Y2F0aW9uLCBIZWFwQ2VsbCopIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcHJlY2lzZUFsbG9jYXRp
b25NYXAuY29udGFpbnMoJmFsbG9jYXRpb24pOworfQorCitib29sIFZlcmlmaWVyU2xvdFZpc2l0
b3I6OmlzTWFya2VkKE1hcmtlZEJsb2NrJiBibG9jaywgSGVhcENlbGwqIGNlbGwpIGNvbnN0Cit7
CisgICAgYXV0byBlbnRyeSA9IG1fbWFya2VkQmxvY2tNYXAuZmluZCgmYmxvY2spOworICAgIGlm
IChlbnRyeSA9PSBtX21hcmtlZEJsb2NrTWFwLmVuZCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBhdXRvJiBkYXRhID0gZW50cnktPnZhbHVlOworICAgIHVuc2lnbmVkIGF0b21OdW1i
ZXIgPSBibG9jay5hdG9tTnVtYmVyKGNlbGwpOworICAgIHJldHVybiBkYXRhLT5pc01hcmtlZChh
dG9tTnVtYmVyKTsKK30KKwordm9pZCBWZXJpZmllclNsb3RWaXNpdG9yOjptYXJrQXV4aWxpYXJ5
KGNvbnN0IHZvaWQqIGJhc2UpCit7CisgICAgSGVhcENlbGwqIGNlbGwgPSBiaXR3aXNlX2Nhc3Q8
SGVhcENlbGwqPihiYXNlKTsKKworICAgIEFTU0VSVChjZWxsLT5oZWFwKCkgPT0gaGVhcCgpKTsK
KyAgICB0ZXN0QW5kU2V0TWFya2VkKGNlbGwpOworfQorCitib29sIFZlcmlmaWVyU2xvdFZpc2l0
b3I6Om11dGF0b3JJc1N0b3BwZWQoKSBjb25zdAoreworICAgIHJldHVybiB0cnVlOworfQorCiti
b29sIFZlcmlmaWVyU2xvdFZpc2l0b3I6OnRlc3RBbmRTZXRNYXJrZWQoY29uc3Qgdm9pZCogcmF3
Q2VsbCkKK3sKKyAgICBIZWFwQ2VsbCogY2VsbCA9IGJpdHdpc2VfY2FzdDxIZWFwQ2VsbCo+KHJh
d0NlbGwpOworICAgIGlmIChjZWxsLT5pc1ByZWNpc2VBbGxvY2F0aW9uKCkpCisgICAgICAgIHJl
dHVybiB0ZXN0QW5kU2V0TWFya2VkKGNlbGwtPnByZWNpc2VBbGxvY2F0aW9uKCkpOworICAgIHJl
dHVybiB0ZXN0QW5kU2V0TWFya2VkKGNlbGwtPm1hcmtlZEJsb2NrKCksIGNlbGwpOworfQorCiti
b29sIFZlcmlmaWVyU2xvdFZpc2l0b3I6OnRlc3RBbmRTZXRNYXJrZWQoUHJlY2lzZUFsbG9jYXRp
b24mIGFsbG9jYXRpb24pCit7CisgICAgc3RkOjp1bmlxdWVfcHRyPFByZWNpc2VBbGxvY2F0aW9u
RGF0YT4mIGRhdGEgPSBtX3ByZWNpc2VBbGxvY2F0aW9uTWFwLmFkZCgmYWxsb2NhdGlvbiwgbnVs
bHB0cikuaXRlcmF0b3ItPnZhbHVlOworICAgIGlmICghZGF0YSkgeworICAgICAgICBkYXRhID0g
bWFrZVVuaXF1ZTxQcmVjaXNlQWxsb2NhdGlvbkRhdGE+KCZhbGxvY2F0aW9uKTsKKyAgICAgICAg
aWYgKFVOTElLRUxZKE9wdGlvbnM6OnZlcmJvc2VWZXJpZnlHQygpKSkKKyAgICAgICAgICAgIGRh
dGEtPmFkZE1hcmtlckRhdGEoeyBwYXJlbnRDZWxsKCksIFN0YWNrVHJhY2U6OmNhcHR1cmVTdGFj
a1RyYWNlKG1heE1hcmtpbmdTdGFja0ZyYW1lc1RvQ2FwdHVyZSwgMikgfSk7CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgVmVyaWZpZXJT
bG90VmlzaXRvcjo6dGVzdEFuZFNldE1hcmtlZChNYXJrZWRCbG9jayYgYmxvY2ssIEhlYXBDZWxs
KiBjZWxsKQoreworICAgIHN0ZDo6dW5pcXVlX3B0cjxNYXJrZWRCbG9ja0RhdGE+JiBkYXRhID0g
bV9tYXJrZWRCbG9ja01hcC5hZGQoJmJsb2NrLCBudWxscHRyKS5pdGVyYXRvci0+dmFsdWU7Cisg
ICAgaWYgKCFkYXRhKQorICAgICAgICBkYXRhID0gbWFrZVVuaXF1ZTxNYXJrZWRCbG9ja0RhdGE+
KCZibG9jayk7CisKKyAgICB1bnNpZ25lZCBhdG9tTnVtYmVyID0gYmxvY2suYXRvbU51bWJlcihj
ZWxsKTsKKyAgICBib29sIGFscmVhZHlTZXQgPSBkYXRhLT50ZXN0QW5kU2V0TWFya2VkKGF0b21O
dW1iZXIpOworICAgIGlmICghYWxyZWFkeVNldCAmJiBVTkxJS0VMWShPcHRpb25zOjp2ZXJib3Nl
VmVyaWZ5R0MoKSkpCisgICAgICAgIGRhdGEtPmFkZE1hcmtlckRhdGEoYXRvbU51bWJlciwgeyBw
YXJlbnRDZWxsKCksIFN0YWNrVHJhY2U6OmNhcHR1cmVTdGFja1RyYWNlKG1heE1hcmtpbmdTdGFj
a0ZyYW1lc1RvQ2FwdHVyZSwgMikgfSk7CisgICAgcmV0dXJuIGFscmVhZHlTZXQ7Cit9CisKK3Zv
aWQgVmVyaWZpZXJTbG90VmlzaXRvcjo6c2V0TWFya2VkQW5kQXBwZW5kVG9NYXJrU3RhY2soSlND
ZWxsKiBjZWxsKQoreworICAgIGlmIChtX3N1cHByZXNzVmVyaWZpZXIpCisgICAgICAgIHJldHVy
bjsKKyAgICBpZiAodGVzdEFuZFNldE1hcmtlZChjZWxsKSkKKyAgICAgICAgcmV0dXJuOworICAg
IGFwcGVuZFRvTWFya1N0YWNrKGNlbGwpOworfQorCit2b2lkIFZlcmlmaWVyU2xvdFZpc2l0b3I6
OnZpc2l0QXNDb25zdHJhaW50KGNvbnN0IEpTQ2VsbCogY2VsbCkKK3sKKyAgICB2aXNpdENoaWxk
cmVuKGNlbGwpOworfQorCit2b2lkIFZlcmlmaWVyU2xvdFZpc2l0b3I6OnZpc2l0Q2hpbGRyZW4o
Y29uc3QgSlNDZWxsKiBjZWxsKQoreworICAgIFJFTEVBU0VfQVNTRVJUKGlzTWFya2VkKGNlbGwp
KTsKKyAgICBzd2l0Y2ggKGNlbGwtPnR5cGUoKSkgeworICAgIGNhc2UgU3RyaW5nVHlwZToKKyAg
ICAgICAgSlNTdHJpbmc6OnZpc2l0Q2hpbGRyZW4oY29uc3RfY2FzdDxKU0NlbGwqPihjZWxsKSwg
KnRoaXMpOworICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAgY2FzZSBGaW5hbE9iamVjdFR5
cGU6CisgICAgICAgIEpTRmluYWxPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oY29uc3RfY2FzdDxKU0Nl
bGwqPihjZWxsKSwgKnRoaXMpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgQXJyYXlUeXBl
OgorICAgICAgICBKU0FycmF5Ojp2aXNpdENoaWxkcmVuKGNvbnN0X2Nhc3Q8SlNDZWxsKj4oY2Vs
bCksICp0aGlzKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAg
ICAgIC8vIEZJWE1FOiBUaGlzIGNvdWxkIGJlIHNvIG11Y2ggYmV0dGVyLgorICAgICAgICAvLyBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYyNDYyCisgICAgICAgIGNl
bGwtPm1ldGhvZFRhYmxlKHZtKCkpLT52aXNpdENoaWxkcmVuKGNvbnN0X2Nhc3Q8SlNDZWxsKj4o
Y2VsbCksICp0aGlzKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCit9IC8vIG5hbWVzcGFj
ZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1ZlcmlmaWVyU2xvdFZpc2l0
b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9WZXJpZmllclNs
b3RWaXNpdG9yLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
VmVyaWZpZXJTbG90VmlzaXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTY5IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNl
CisKKyNpbmNsdWRlICJBYnN0cmFjdFNsb3RWaXNpdG9yLmgiCisjaW5jbHVkZSAiSlNDSlNWYWx1
ZS5oIgorI2luY2x1ZGUgIlZpc2l0UmFjZUtleS5oIgorI2luY2x1ZGUgIldlYWsuaCIKKyNpbmNs
dWRlIDxtZW1vcnk+CisjaW5jbHVkZSA8d3RmL0JpdFZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi9E
ZXF1ZS5oPgorI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hN
YXAuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1NoYXJlZFRhc2su
aD4KKworbmFtZXNwYWNlIFdURiB7CisKK2NsYXNzIFN0YWNrVHJhY2U7CisKK30gLy8gbmFtZXNw
YWNlIFdURgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgQ29uc2VydmF0aXZlUm9vdHM7Citj
bGFzcyBIZWFwOworY2xhc3MgSGVhcENlbGw7CitjbGFzcyBQcmVjaXNlQWxsb2NhdGlvbjsKK2Ns
YXNzIE1hcmtlZEJsb2NrOworCit1c2luZyBXVEY6OlN0YWNrVHJhY2U7CisKK2NsYXNzIFZlcmlm
aWVyU2xvdFZpc2l0b3IgOiBwdWJsaWMgQWJzdHJhY3RTbG90VmlzaXRvciB7CisgICAgV1RGX01B
S0VfTk9OQ09QWUFCTEUoVmVyaWZpZXJTbG90VmlzaXRvcik7CisgICAgV1RGX01BS0VfRkFTVF9B
TExPQ0FURUQ7CisgICAgdXNpbmcgQmFzZSA9IEFic3RyYWN0U2xvdFZpc2l0b3I7CitwdWJsaWM6
CisgICAgc3RydWN0IE1hcmtlckRhdGEgeworICAgICAgICBNYXJrZXJEYXRhKCkgPSBkZWZhdWx0
OworICAgICAgICBNYXJrZXJEYXRhKE1hcmtlckRhdGEmJikgPSBkZWZhdWx0OworICAgICAgICBN
YXJrZXJEYXRhKEhlYXBDZWxsKiwgc3RkOjp1bmlxdWVfcHRyPFN0YWNrVHJhY2U+JiYpOworICAg
ICAgICBNYXJrZXJEYXRhJiBvcGVyYXRvcj0oTWFya2VyRGF0YSYmKSA9IGRlZmF1bHQ7CisKKyAg
ICAgICAgSGVhcENlbGwqIHBhcmVudCB7IG51bGxwdHIgfTsKKyAgICAgICAgc3RkOjp1bmlxdWVf
cHRyPFN0YWNrVHJhY2U+IHN0YWNrOworICAgIH07CisKKyAgICBWZXJpZmllclNsb3RWaXNpdG9y
KEhlYXAmKTsKKyAgICB+VmVyaWZpZXJTbG90VmlzaXRvcigpOworCisgICAgdm9pZCBhcHBlbmQo
Y29uc3QgQ29uc2VydmF0aXZlUm9vdHMmKSBmaW5hbDsKKyAgICB2b2lkIGFwcGVuZFVuYmFycmll
cmVkKEpTQ2VsbCopIGZpbmFsOworICAgIHZvaWQgYXBwZW5kSGlkZGVuVW5iYXJyaWVyZWQoSlND
ZWxsKikgZmluYWw7CisKKyAgICBib29sIGlzRmlyc3RWaXNpdCgpIGNvbnN0IGZpbmFsOworICAg
IGJvb2wgaXNNYXJrZWQoY29uc3Qgdm9pZCopIGNvbnN0IGZpbmFsOworICAgIGJvb2wgaXNNYXJr
ZWQoTWFya2VkQmxvY2smLCBIZWFwQ2VsbCopIGNvbnN0IGZpbmFsOworICAgIGJvb2wgaXNNYXJr
ZWQoUHJlY2lzZUFsbG9jYXRpb24mLCBIZWFwQ2VsbCopIGNvbnN0IGZpbmFsOworCisgICAgdm9p
ZCBtYXJrQXV4aWxpYXJ5KGNvbnN0IHZvaWQqKSBmaW5hbDsKKworICAgIHZvaWQgcmVwb3J0RXh0
cmFNZW1vcnlWaXNpdGVkKHNpemVfdCkgZmluYWwgeyB9CisjaWYgRU5BQkxFKFJFU09VUkNFX1VT
QUdFKQorICAgIHZvaWQgcmVwb3J0RXh0ZXJuYWxNZW1vcnlWaXNpdGVkKHNpemVfdCkgZmluYWwg
eyB9CisjZW5kaWYKKworICAgIGJvb2wgbXV0YXRvcklzU3RvcHBlZCgpIGNvbnN0IGZpbmFsOwor
CisgICAgdm9pZCBkaWRSYWNlKGNvbnN0IFZpc2l0UmFjZUtleSYpIGZpbmFsIHsgfQorICAgIHZv
aWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0IGZpbmFsIHsgfQorCisgICAgdm9pZCB2aXNpdEFz
Q29uc3RyYWludChjb25zdCBKU0NlbGwqKSBmaW5hbDsKKworICAgIHZvaWQgZHJhaW4oKTsKKwor
ICAgIHZvaWQgYWRkUGFyYWxsZWxDb25zdHJhaW50VGFzayhSZWZQdHI8U2hhcmVkVGFzazx2b2lk
KEFic3RyYWN0U2xvdFZpc2l0b3ImKT4+KSBmaW5hbDsKKyAgICB2b2lkIGV4ZWN1dGVDb25zdHJh
aW50VGFza3MoKTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFj
aExpdmVDZWxsKGNvbnN0IEZ1bmN0b3ImKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9y
PiB2b2lkIGZvckVhY2hMaXZlUHJlY2lzZUFsbG9jYXRpb24oY29uc3QgRnVuY3RvciYpOworICAg
IHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaExpdmVNYXJrZWRCbG9ja0Nl
bGwoY29uc3QgRnVuY3RvciYpOworCisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBkdW1wTWFy
a2VyRGF0YShIZWFwQ2VsbCopOworCitwcml2YXRlOgorICAgIGNsYXNzIE1hcmtlZEJsb2NrRGF0
YSB7CisgICAgICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworICAgICAgICBXVEZfTUFLRV9O
T05DT1BZQUJMRShNYXJrZWRCbG9ja0RhdGEpOworICAgIHB1YmxpYzoKKyAgICAgICAgTWFya2Vk
QmxvY2tEYXRhKE1hcmtlZEJsb2NrKik7CisKKyAgICAgICAgTWFya2VkQmxvY2sqIGJsb2NrKCkg
Y29uc3QgeyByZXR1cm4gbV9ibG9jazsgfQorICAgICAgICBjb25zdCBCaXRWZWN0b3ImIGF0b21z
KCkgY29uc3QgeyByZXR1cm4gbV9hdG9tczsgfQorCisgICAgICAgIGJvb2wgaXNNYXJrZWQodW5z
aWduZWQgYXRvbU51bWJlcikgeyByZXR1cm4gbV9hdG9tcy5xdWlja0dldChhdG9tTnVtYmVyKTsg
fQorICAgICAgICBib29sIHRlc3RBbmRTZXRNYXJrZWQodW5zaWduZWQgYXRvbU51bWJlcikgeyBy
ZXR1cm4gbV9hdG9tcy5xdWlja1NldChhdG9tTnVtYmVyKTsgfQorCisgICAgICAgIHZvaWQgYWRk
TWFya2VyRGF0YSh1bnNpZ25lZCBhdG9tTnVtYmVyLCBNYXJrZXJEYXRhJiYpOworICAgICAgICBj
b25zdCBNYXJrZXJEYXRhKiBtYXJrZXJEYXRhKHVuc2lnbmVkIGF0b21OdW1iZXIpIGNvbnN0Owor
CisgICAgcHJpdmF0ZToKKyAgICAgICAgTWFya2VkQmxvY2sqIG1fYmxvY2sgeyBudWxscHRyIH07
CisgICAgICAgIEJpdFZlY3RvciBtX2F0b21zOworICAgICAgICBWZWN0b3I8TWFya2VyRGF0YT4g
bV9tYXJrZXJzOworICAgIH07CisKKyAgICBjbGFzcyBQcmVjaXNlQWxsb2NhdGlvbkRhdGEgewor
ICAgICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKKyAgICAgICAgV1RGX01BS0VfTk9OQ09Q
WUFCTEUoUHJlY2lzZUFsbG9jYXRpb25EYXRhKTsKKyAgICBwdWJsaWM6CisgICAgICAgIFByZWNp
c2VBbGxvY2F0aW9uRGF0YShQcmVjaXNlQWxsb2NhdGlvbiopOworICAgICAgICBQcmVjaXNlQWxs
b2NhdGlvbiogYWxsb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fYWxsb2NhdGlvbjsgfQorCisg
ICAgICAgIHZvaWQgYWRkTWFya2VyRGF0YShNYXJrZXJEYXRhJiYpOworICAgICAgICBjb25zdCBN
YXJrZXJEYXRhKiBtYXJrZXJEYXRhKCkgY29uc3Q7CisKKyAgICBwcml2YXRlOgorICAgICAgICBQ
cmVjaXNlQWxsb2NhdGlvbiogbV9hbGxvY2F0aW9uIHsgbnVsbHB0ciB9OworICAgICAgICBNYXJr
ZXJEYXRhIG1fbWFya2VyOworICAgIH07CisKKyAgICB1c2luZyBNYXJrZWRCbG9ja01hcCA9IEhh
c2hNYXA8TWFya2VkQmxvY2sqLCBzdGQ6OnVuaXF1ZV9wdHI8TWFya2VkQmxvY2tEYXRhPj47Cisg
ICAgdXNpbmcgUHJlY2lzZUFsbG9jYXRpb25NYXAgPSBIYXNoTWFwPFByZWNpc2VBbGxvY2F0aW9u
Kiwgc3RkOjp1bmlxdWVfcHRyPFByZWNpc2VBbGxvY2F0aW9uRGF0YT4+OworCisgICAgdm9pZCBh
cHBlbmRUb01hcmtTdGFjayhKU0NlbGwqKTsKKyAgICB2b2lkIGFwcGVuZFNsb3coSlNDZWxsKiBj
ZWxsKSB7IHNldE1hcmtlZEFuZEFwcGVuZFRvTWFya1N0YWNrKGNlbGwpOyB9CisKKyAgICBib29s
IHRlc3RBbmRTZXRNYXJrZWQoY29uc3Qgdm9pZCogcmF3Q2VsbCk7CisgICAgYm9vbCB0ZXN0QW5k
U2V0TWFya2VkKFByZWNpc2VBbGxvY2F0aW9uJik7CisgICAgYm9vbCB0ZXN0QW5kU2V0TWFya2Vk
KE1hcmtlZEJsb2NrJiwgSGVhcENlbGwqKTsKKworICAgIHZvaWQgc2V0TWFya2VkQW5kQXBwZW5k
VG9NYXJrU3RhY2soSlNDZWxsKik7CisKKyAgICB2b2lkIHZpc2l0Q2hpbGRyZW4oY29uc3QgSlND
ZWxsKik7CisKKyAgICB2b2lkIGR1bXBNYXJrZXJEYXRhKFByZWNpc2VBbGxvY2F0aW9uJiwgSGVh
cENlbGwqKTsKKyAgICB2b2lkIGR1bXBNYXJrZXJEYXRhKE1hcmtlZEJsb2NrJiwgSGVhcENlbGwq
KTsKKyAgICB2b2lkIGR1bXBNYXJrZXJEYXRhKEhlYXBDZWxsKiwgY29uc3QgTWFya2VyRGF0YSop
OworCisgICAgUHJlY2lzZUFsbG9jYXRpb25NYXAgbV9wcmVjaXNlQWxsb2NhdGlvbk1hcDsKKyAg
ICBNYXJrZWRCbG9ja01hcCBtX21hcmtlZEJsb2NrTWFwOworICAgIENvbmN1cnJlbnRQdHJIYXNo
U2V0IG1fb3BhcXVlUm9vdFN0b3JhZ2U7CisgICAgRGVxdWU8UmVmUHRyPFNoYXJlZFRhc2s8dm9p
ZChBYnN0cmFjdFNsb3RWaXNpdG9yJik+PiwgMzI+IG1fY29uc3RyYWludFRhc2tzOworfTsKKwor
fSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9WZXJp
ZmllclNsb3RWaXNpdG9ySW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL1ZlcmlmaWVyU2xvdFZpc2l0b3JJbmxpbmVzLmgJKG5vbmV4aXN0ZW50KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVmVyaWZpZXJTbG90VmlzaXRvcklubGluZXMuaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJBYnN0cmFjdFNs
b3RWaXNpdG9ySW5saW5lcy5oIgorI2luY2x1ZGUgIlZlcmlmaWVyU2xvdFZpc2l0b3IuaCIKKwor
bmFtZXNwYWNlIEpTQyB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+Cit2b2lkIFZlcmlm
aWVyU2xvdFZpc2l0b3I6OmZvckVhY2hMaXZlQ2VsbChjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQor
eworICAgIGZvckVhY2hMaXZlUHJlY2lzZUFsbG9jYXRpb24oZnVuY3Rvcik7CisgICAgZm9yRWFj
aExpdmVNYXJrZWRCbG9ja0NlbGwoZnVuY3Rvcik7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEZ1
bmN0b3I+Cit2b2lkIFZlcmlmaWVyU2xvdFZpc2l0b3I6OmZvckVhY2hMaXZlUHJlY2lzZUFsbG9j
YXRpb24oY29uc3QgRnVuY3RvciYgZnVuYykKK3sKKyAgICBmb3IgKGF1dG8mIGVudHJ5IDogbV9w
cmVjaXNlQWxsb2NhdGlvbk1hcCkgeworICAgICAgICBQcmVjaXNlQWxsb2NhdGlvbiogYWxsb2Nh
dGlvbiA9IGVudHJ5LnZhbHVlLT5hbGxvY2F0aW9uKCk7CisgICAgICAgIGZ1bmMoYWxsb2NhdGlv
bi0+Y2VsbCgpKTsKKyAgICB9Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+Cit2b2lk
IFZlcmlmaWVyU2xvdFZpc2l0b3I6OmZvckVhY2hMaXZlTWFya2VkQmxvY2tDZWxsKGNvbnN0IEZ1
bmN0b3ImIGZ1bmMpCit7CisgICAgZm9yIChhdXRvJiBlbnRyeSA6IG1fbWFya2VkQmxvY2tNYXAp
IHsKKyAgICAgICAgYXV0byYgZGF0YSA9IGVudHJ5LnZhbHVlOworICAgICAgICBNYXJrZWRCbG9j
ayogYmxvY2sgPSBkYXRhLT5ibG9jaygpOworICAgICAgICBjb25zdCBCaXRWZWN0b3ImIGF0b21z
ID0gIGRhdGEtPmF0b21zKCk7CisgICAgICAgIGZvciAoYXV0byBhdG9tTnVtYmVyIDogYXRvbXMp
CisgICAgICAgICAgICBmdW5jKGJpdHdpc2VfY2FzdDxIZWFwQ2VsbCo+KGJsb2NrLT5oYW5kbGUo
KS5hdG9tQXQoYXRvbU51bWJlcikpKTsKKyAgICB9Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVmlzaXRDb3VudGVyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVmlzaXRDb3VudGVyLmgJKHJldmlzaW9u
IDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Zpc2l0Q291bnRlci5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTI1LDcgKzI1LDcgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlICJT
bG90VmlzaXRvci5oIgorI2luY2x1ZGUgIkFic3RyYWN0U2xvdFZpc2l0b3IuaCIKIAogbmFtZXNw
YWNlIEpTQyB7CiAKQEAgLTMzLDEzICszMywxMyBAQCBjbGFzcyBWaXNpdENvdW50ZXIgewogcHVi
bGljOgogICAgIFZpc2l0Q291bnRlcigpIHsgfQogICAgIAotICAgIFZpc2l0Q291bnRlcihTbG90
VmlzaXRvciYgdmlzaXRvcikKKyAgICBWaXNpdENvdW50ZXIoQWJzdHJhY3RTbG90VmlzaXRvciYg
dmlzaXRvcikKICAgICAgICAgOiBtX3Zpc2l0b3IoJnZpc2l0b3IpCiAgICAgICAgICwgbV9pbml0
aWFsVmlzaXRDb3VudCh2aXNpdG9yLnZpc2l0Q291bnQoKSkKICAgICB7CiAgICAgfQogICAgIAot
ICAgIFNsb3RWaXNpdG9yJiB2aXNpdG9yKCkgY29uc3QgeyByZXR1cm4gKm1fdmlzaXRvcjsgfQor
ICAgIEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IoKSBjb25zdCB7IHJldHVybiAqbV92aXNp
dG9yOyB9CiAgICAgCiAgICAgc2l6ZV90IHZpc2l0Q291bnQoKSBjb25zdAogICAgIHsKQEAgLTQ3
LDcgKzQ3LDcgQEAgcHVibGljOgogICAgIH0KICAgICAKIHByaXZhdGU6Ci0gICAgU2xvdFZpc2l0
b3IqIG1fdmlzaXRvciB7IG51bGxwdHIgfTsKKyAgICBBYnN0cmFjdFNsb3RWaXNpdG9yKiBtX3Zp
c2l0b3IgeyBudWxscHRyIH07CiAgICAgc2l6ZV90IG1faW5pdGlhbFZpc2l0Q291bnQgeyAwIH07
CiB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrQmxvY2suY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtCbG9jay5jcHAJKHJl
dmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtCbG9jay5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDEyLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEyLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC05OCwxMiArOTgsMTEgQEAgdm9pZCBXZWFrQmxvY2s6OnN3
ZWVwKCkKICAgICBBU1NFUlQoIW1fc3dlZXBSZXN1bHQuaXNOdWxsKCkpOwogfQogCi10ZW1wbGF0
ZTx0eXBlbmFtZSBDb250YWluZXJUeXBlPgotdm9pZCBXZWFrQmxvY2s6OnNwZWNpYWxpemVkVmlz
aXQoQ29udGFpbmVyVHlwZSYgY29udGFpbmVyLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBs
YXRlPHR5cGVuYW1lIENvbnRhaW5lclR5cGUsIHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFdlYWtC
bG9jazo6c3BlY2lhbGl6ZWRWaXNpdChDb250YWluZXJUeXBlJiBjb250YWluZXIsIFZpc2l0b3Im
IHZpc2l0b3IpCiB7Ci0gICAgSGVhcFZlcnNpb24gbWFya2luZ1ZlcnNpb24gPSB2aXNpdG9yLm1h
cmtpbmdWZXJzaW9uKCk7Ci0KICAgICBzaXplX3QgY291bnQgPSB3ZWFrSW1wbENvdW50KCk7Cisg
ICAgSGVhcEFuYWx5emVyKiBoZWFwQW5hbHl6ZXIgPSB2aXNpdG9yLnZtKCkuYWN0aXZlSGVhcEFu
YWx5emVyKCk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7CiAgICAg
ICAgIFdlYWtJbXBsKiB3ZWFrSW1wbCA9ICZ3ZWFrSW1wbHMoKVtpXTsKICAgICAgICAgaWYgKHdl
YWtJbXBsLT5zdGF0ZSgpICE9IFdlYWtJbXBsOjpMaXZlKQpAQCAtMTE0LDEyICsxMTMsMTIgQEAg
dm9pZCBXZWFrQmxvY2s6OnNwZWNpYWxpemVkVmlzaXQoQ29udGFpbgogICAgICAgICAgICAgY29u
dGludWU7CiAKICAgICAgICAgSlNWYWx1ZSBqc1ZhbHVlID0gd2Vha0ltcGwtPmpzVmFsdWUoKTsK
LSAgICAgICAgaWYgKGNvbnRhaW5lci5pc01hcmtlZChtYXJraW5nVmVyc2lvbiwganNWYWx1ZS5h
c0NlbGwoKSkpCisgICAgICAgIGlmICh2aXNpdG9yLmlzTWFya2VkKGNvbnRhaW5lciwganNWYWx1
ZS5hc0NlbGwoKSkpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgCiAgICAgICAgIGNv
bnN0IGNoYXIqIHJlYXNvbiA9ICIiOwogICAgICAgICBjb25zdCBjaGFyKiogcmVhc29uUHRyID0g
bnVsbHB0cjsKLSAgICAgICAgaWYgKFVOTElLRUxZKHZpc2l0b3IuaXNBbmFseXppbmdIZWFwKCkp
KQorICAgICAgICBpZiAoVU5MSUtFTFkoaGVhcEFuYWx5emVyKSkKICAgICAgICAgICAgIHJlYXNv
blB0ciA9ICZyZWFzb247CiAKICAgICAgICAgaWYgKCF3ZWFrSGFuZGxlT3duZXItPmlzUmVhY2hh
YmxlRnJvbU9wYXF1ZVJvb3RzKEhhbmRsZTxVbmtub3duPjo6d3JhcFNsb3QoJmNvbnN0X2Nhc3Q8
SlNWYWx1ZSY+KGpzVmFsdWUpKSwgd2Vha0ltcGwtPmNvbnRleHQoKSwgdmlzaXRvciwgcmVhc29u
UHRyKSkKQEAgLTEyNywxNCArMTI2LDE0IEBAIHZvaWQgV2Vha0Jsb2NrOjpzcGVjaWFsaXplZFZp
c2l0KENvbnRhaW4KIAogICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKGpzVmFsdWUp
OwogCi0gICAgICAgIGlmIChVTkxJS0VMWSh2aXNpdG9yLmlzQW5hbHl6aW5nSGVhcCgpKSkgewor
ICAgICAgICBpZiAoVU5MSUtFTFkoaGVhcEFuYWx5emVyKSkgewogICAgICAgICAgICAgaWYgKGpz
VmFsdWUuaXNDZWxsKCkpCi0gICAgICAgICAgICAgICAgdmlzaXRvci5oZWFwQW5hbHl6ZXIoKS0+
c2V0T3BhcXVlUm9vdFJlYWNoYWJpbGl0eVJlYXNvbkZvckNlbGwoanNWYWx1ZS5hc0NlbGwoKSwg
KnJlYXNvblB0cik7CisgICAgICAgICAgICAgICAgaGVhcEFuYWx5emVyLT5zZXRPcGFxdWVSb290
UmVhY2hhYmlsaXR5UmVhc29uRm9yQ2VsbChqc1ZhbHVlLmFzQ2VsbCgpLCAqcmVhc29uUHRyKTsK
ICAgICAgICAgfQogICAgIH0KIH0KIAotdm9pZCBXZWFrQmxvY2s6OnZpc2l0KFNsb3RWaXNpdG9y
JiB2aXNpdG9yKQordm9pZCBXZWFrQmxvY2s6OnZpc2l0KEFic3RyYWN0U2xvdFZpc2l0b3ImIHZp
c2l0b3IpCiB7CiAgICAgLy8gSWYgYSBibG9jayBpcyBjb21wbGV0ZWx5IGVtcHR5LCBhIHZpc2l0
IHdvbid0IGhhdmUgYW55IGVmZmVjdC4KICAgICBpZiAoaXNFbXB0eSgpKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha0Jsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvV2Vha0Jsb2NrLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE5IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzIs
OCArMzIsOCBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAorY2xhc3MgQWJzdHJhY3RTbG90VmlzaXRv
cjsKIGNsYXNzIEhlYXA7Ci1jbGFzcyBTbG90VmlzaXRvcjsKIAogREVDTEFSRV9BTExPQ0FUT1Jf
V0lUSF9IRUFQX0lERU5USUZJRVIoV2Vha0Jsb2NrKTsKIApAQCAtNjUsNyArNjUsNyBAQCBwdWJs
aWM6CiAgICAgdm9pZCBzd2VlcCgpOwogICAgIFN3ZWVwUmVzdWx0IHRha2VTd2VlcFJlc3VsdCgp
OwogCi0gICAgdm9pZCB2aXNpdChTbG90VmlzaXRvciYpOworICAgIHZvaWQgdmlzaXQoQWJzdHJh
Y3RTbG90VmlzaXRvciYpOwogCiAgICAgdm9pZCByZWFwKCk7CiAKQEAgLTc1LDggKzc1LDggQEAg
cHVibGljOgogcHJpdmF0ZToKICAgICBzdGF0aWMgRnJlZUNlbGwqIGFzRnJlZUNlbGwoV2Vha0lt
cGwqKTsKICAgICAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDb250YWluZXJUeXBlPgotICAgIHZv
aWQgc3BlY2lhbGl6ZWRWaXNpdChDb250YWluZXJUeXBlJiwgU2xvdFZpc2l0b3ImKTsKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBDb250YWluZXJUeXBlLCB0eXBlbmFtZSBWaXNpdG9yPgorICAgIHZv
aWQgc3BlY2lhbGl6ZWRWaXNpdChDb250YWluZXJUeXBlJiwgVmlzaXRvciYpOwogCiAgICAgZXhw
bGljaXQgV2Vha0Jsb2NrKENlbGxDb250YWluZXIpOwogICAgIHZvaWQgZmluYWxpemUoV2Vha0lt
cGwqKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtIYW5kbGVPd25lci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha0hhbmRsZU93
bmVyLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
V2Vha0hhbmRsZU93bmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEyLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNSw3ICszNSw3IEBAIFdlYWtIYW5k
bGVPd25lcjo6fldlYWtIYW5kbGVPd25lcigpCiB7CiB9CiAKLWJvb2wgV2Vha0hhbmRsZU93bmVy
Ojppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhIYW5kbGU8VW5rbm93bj4sIHZvaWQqLCBTbG90
VmlzaXRvciYsIGNvbnN0IGNoYXIqKikKK2Jvb2wgV2Vha0hhbmRsZU93bmVyOjppc1JlYWNoYWJs
ZUZyb21PcGFxdWVSb290cyhIYW5kbGU8VW5rbm93bj4sIHZvaWQqLCBBYnN0cmFjdFNsb3RWaXNp
dG9yJiwgY29uc3QgY2hhcioqKQogewogICAgIHJldHVybiBmYWxzZTsKIH0KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtIYW5kbGVPd25lci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtIYW5kbGVPd25lci5oCShyZXZpc2lvbiAyNzI4
MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrSGFuZGxlT3duZXIuaAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0yOSwxMyArMjksMTMgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLWNsYXNzIFNs
b3RWaXNpdG9yOworY2xhc3MgQWJzdHJhY3RTbG90VmlzaXRvcjsKIAogY2xhc3MgSlNfRVhQT1JU
X1BSSVZBVEUgV2Vha0hhbmRsZU93bmVyIHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5XZWFrSGFu
ZGxlT3duZXIoKTsKICAgICAvLyByZWFzb24gd2lsbCBvbmx5IGJlIG5vbi1udWxsIHdoZW4gZ2Vu
ZXJhdGluZyBhIGRlYnVnIEdDIGhlYXAgc25hcHNob3QuCi0gICAgdmlydHVhbCBib29sIGlzUmVh
Y2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEhhbmRsZTxVbmtub3duPiwgdm9pZCogY29udGV4dCwgU2xv
dFZpc2l0b3ImLCBjaGFyIGNvbnN0KiogcmVhc29uID0gbnVsbHB0cik7CisgICAgdmlydHVhbCBi
b29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEhhbmRsZTxVbmtub3duPiwgdm9pZCogY29u
dGV4dCwgQWJzdHJhY3RTbG90VmlzaXRvciYsIGNoYXIgY29uc3QqKiByZWFzb24gPSBudWxscHRy
KTsKICAgICB2aXJ0dWFsIHZvaWQgZmluYWxpemUoSGFuZGxlPFVua25vd24+LCB2b2lkKiBjb250
ZXh0KTsKIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtTZXQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrU2V0LmgJKHJldmlz
aW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtTZXQuaAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAx
OSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIt
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTUxLDcgKzUxLDcgQEAgcHVibGljOgogICAgIGJvb2wgaXNFbXB0eSgp
IGNvbnN0OwogICAgIGJvb2wgaXNUcml2aWFsbHlEZXN0cnVjdGlibGUoKSBjb25zdDsKIAotICAg
IHZvaWQgdmlzaXQoU2xvdFZpc2l0b3ImKTsKKyAgICB2b2lkIHZpc2l0KEFic3RyYWN0U2xvdFZp
c2l0b3ImKTsKIAogICAgIHZvaWQgcmVhcCgpOwogICAgIHZvaWQgc3dlZXAoKTsKQEAgLTExNCw3
ICsxMTQsNyBAQCBpbmxpbmUgdm9pZCBXZWFrU2V0OjpsYXN0Q2hhbmNlVG9GaW5hbGl6CiAgICAg
ICAgIGJsb2NrLT5sYXN0Q2hhbmNlVG9GaW5hbGl6ZSgpOwogfQogCi1pbmxpbmUgdm9pZCBXZWFr
U2V0Ojp2aXNpdChTbG90VmlzaXRvciYgdmlzaXRvcikKK2lubGluZSB2b2lkIFdlYWtTZXQ6OnZp
c2l0KEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgZm9yIChXZWFrQmxvY2sq
IGJsb2NrID0gbV9ibG9ja3MuaGVhZCgpOyBibG9jazsgYmxvY2sgPSBibG9jay0+bmV4dCgpKQog
ICAgICAgICBibG9jay0+dmlzaXQodmlzaXRvcik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW50ZXJwcmV0ZXIvU2hhZG93Q2hpY2tlbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1NoYWRvd0NoaWNrZW4uY3BwCShyZXZpc2lvbiAyNzI4
MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU2hhZG93Q2hpY2tlbi5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDE2LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC00NDAsNyArNDQwLDcgQEAgdm9pZCBTaGFkb3dDaGlja2Vu
Ojp1cGRhdGUoVk0mIHZtLCBDYWxsRgogICAgICAgICBkYXRhTG9nKCIgICAgQWZ0ZXIgY2xlYW4t
dXA6ICIsICp0aGlzLCAiXG4iKTsKIH0KIAotdm9pZCBTaGFkb3dDaGlja2VuOjp2aXNpdENoaWxk
cmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBTaGFkb3dDaGlja2VuOjp2aXNpdENoaWxk
cmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgZm9yICh1bnNpZ25lZCBp
ID0gbV9sb2dDdXJzb3IgLSBtX2xvZzsgaS0tOykgewogICAgICAgICBKU09iamVjdCogY2FsbGVl
ID0gbV9sb2dbaV0uY2FsbGVlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJl
dGVyL1NoYWRvd0NoaWNrZW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW50ZXJwcmV0ZXIvU2hhZG93Q2hpY2tlbi5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU2hhZG93Q2hpY2tlbi5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTM1LDEzICszNSwxMyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAorY2xhc3MgQWJzdHJhY3RTbG90
VmlzaXRvcjsKIGNsYXNzIENhbGxGcmFtZTsKIGNsYXNzIENvZGVCbG9jazsKIGNsYXNzIEpTQXJy
YXk7CiBjbGFzcyBKU09iamVjdDsKIGNsYXNzIEpTU2NvcGU7CiBjbGFzcyBMTEludE9mZnNldHNF
eHRyYWN0b3I7Ci1jbGFzcyBTbG90VmlzaXRvcjsKIGNsYXNzIFZNOwogCiAvLyBTaGFkb3dDaGlj
a2VuIGlzIGEgbG9nIHRoYXQgY2FuIGJlIHVzZWQgdG8gcHJvZHVjZSBhIHNoYWRvdyBzdGFjayBv
ZiBDSElDS0VOLXN0eWxlIHN0YWNrIGZyYW1lcy4KQEAgLTE5Niw3ICsxOTYsNyBAQCBwdWJsaWM6
CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KICAgICB2b2lkIGl0ZXJhdGUoVk0mLCBD
YWxsRnJhbWUqLCBjb25zdCBGdW5jdG9yJik7CiAgICAgCi0gICAgdm9pZCB2aXNpdENoaWxkcmVu
KFNsb3RWaXNpdG9yJik7CisgICAgdm9pZCB2aXNpdENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0
b3ImKTsKICAgICB2b2lkIHJlc2V0KCk7CiAgICAgCiAgICAgLy8gSklUIHN1cHBvcnQuCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0dDQXdhcmVKSVRTdHViUm91dGluZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9HQ0F3YXJlSklUU3R1YlJvdXRp
bmUuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0dD
QXdhcmVKSVRTdHViUm91dGluZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03Myw3ICs3Myw3IEBA
IHZvaWQgR0NBd2FyZUpJVFN0dWJSb3V0aW5lOjpkZWxldGVGcm9tR0MKICAgICBkZWxldGUgdGhp
czsKIH0KIAotdm9pZCBHQ0F3YXJlSklUU3R1YlJvdXRpbmU6Om1hcmtSZXF1aXJlZE9iamVjdHNJ
bnRlcm5hbChTbG90VmlzaXRvciYpCit2b2lkIEdDQXdhcmVKSVRTdHViUm91dGluZTo6bWFya1Jl
cXVpcmVkT2JqZWN0c0ludGVybmFsKEFic3RyYWN0U2xvdFZpc2l0b3ImKQogewogfQogCkBAIC05
Miw3ICs5Miw3IEBAIE1hcmtpbmdHQ0F3YXJlSklUU3R1YlJvdXRpbmU6On5NYXJraW5nR0MKIHsK
IH0KIAotdm9pZCBNYXJraW5nR0NBd2FyZUpJVFN0dWJSb3V0aW5lOjptYXJrUmVxdWlyZWRPYmpl
Y3RzSW50ZXJuYWwoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIE1hcmtpbmdHQ0F3YXJlSklU
U3R1YlJvdXRpbmU6Om1hcmtSZXF1aXJlZE9iamVjdHNJbnRlcm5hbChBYnN0cmFjdFNsb3RWaXNp
dG9yJiB2aXNpdG9yKQogewogICAgIGZvciAoYXV0byYgZW50cnkgOiBtX2NlbGxzKQogICAgICAg
ICB2aXNpdG9yLmFwcGVuZChlbnRyeSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0dDQXdhcmVKSVRTdHViUm91dGluZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvR0NBd2FyZUpJVFN0dWJSb3V0aW5lLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvR0NBd2FyZUpJVFN0dWJSb3V0aW5lLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTggQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC02MCw4ICs2MCw4IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHJldHVybiBh
ZG9wdFJlZigqbmV3IEdDQXdhcmVKSVRTdHViUm91dGluZShjb2RlLCB2bSkpOwogICAgIH0KLSAg
ICAKLSAgICB2b2lkIG1hcmtSZXF1aXJlZE9iamVjdHMoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisK
KyAgICB2b2lkIG1hcmtSZXF1aXJlZE9iamVjdHMoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRv
cikKICAgICB7CiAgICAgICAgIG1hcmtSZXF1aXJlZE9iamVjdHNJbnRlcm5hbCh2aXNpdG9yKTsK
ICAgICB9CkBAIC03MSw3ICs3MSw3IEBAIHB1YmxpYzoKIHByb3RlY3RlZDoKICAgICB2b2lkIG9i
c2VydmVaZXJvUmVmQ291bnQoKSBvdmVycmlkZTsKICAgICAKLSAgICB2aXJ0dWFsIHZvaWQgbWFy
a1JlcXVpcmVkT2JqZWN0c0ludGVybmFsKFNsb3RWaXNpdG9yJik7CisgICAgdmlydHVhbCB2b2lk
IG1hcmtSZXF1aXJlZE9iamVjdHNJbnRlcm5hbChBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAKIHBy
aXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIEpJVFN0dWJSb3V0aW5lU2V0OwpAQCAtODksNyArODks
NyBAQCBwdWJsaWM6CiAgICAgfk1hcmtpbmdHQ0F3YXJlSklUU3R1YlJvdXRpbmUoKSBvdmVycmlk
ZTsKICAgICAKIHByb3RlY3RlZDoKLSAgICB2b2lkIG1hcmtSZXF1aXJlZE9iamVjdHNJbnRlcm5h
bChTbG90VmlzaXRvciYpIG92ZXJyaWRlOworICAgIHZvaWQgbWFya1JlcXVpcmVkT2JqZWN0c0lu
dGVybmFsKEFic3RyYWN0U2xvdFZpc2l0b3ImKSBvdmVycmlkZTsKIAogcHJpdmF0ZToKICAgICBW
ZWN0b3I8V3JpdGVCYXJyaWVyPEpTQ2VsbD4+IG1fY2VsbHM7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVFdvcmtsaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVFdvcmtsaXN0LmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRXb3JrbGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTkgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjAgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1BvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1BvbHltb3JwaGljQ2Fs
bFN0dWJSb3V0aW5lLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9Qb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTggQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0xMzUsNyArMTM1LDcgQEAgYm9vbCBQb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZTo6dmlzaXRX
ZQogICAgIHJldHVybiBpc1N0aWxsTGl2ZTsKIH0KIAotdm9pZCBQb2x5bW9ycGhpY0NhbGxTdHVi
Um91dGluZTo6bWFya1JlcXVpcmVkT2JqZWN0c0ludGVybmFsKFNsb3RWaXNpdG9yJiB2aXNpdG9y
KQordm9pZCBQb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZTo6bWFya1JlcXVpcmVkT2JqZWN0c0lu
dGVybmFsKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgZm9yIChhdXRvJiB2
YXJpYW50IDogbV92YXJpYW50cykKICAgICAgICAgdmlzaXRvci5hcHBlbmQodmFyaWFudCk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1BvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5l
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Qb2x5bW9ycGhpY0Nh
bGxTdHViUm91dGluZS5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L1BvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lLmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTggQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0x
MDUsNyArMTA1LDcgQEAgcHVibGljOgogICAgIGJvb2wgdmlzaXRXZWFrKFZNJikgZmluYWw7CiAK
IHByaXZhdGU6Ci0gICAgdm9pZCBtYXJrUmVxdWlyZWRPYmplY3RzSW50ZXJuYWwoU2xvdFZpc2l0
b3ImKSBmaW5hbDsKKyAgICB2b2lkIG1hcmtSZXF1aXJlZE9iamVjdHNJbnRlcm5hbChBYnN0cmFj
dFNsb3RWaXNpdG9yJikgZmluYWw7CiAKICAgICBWZWN0b3I8V3JpdGVCYXJyaWVyPEpTQ2VsbD4s
IDI+IG1fdmFyaWFudHM7CiAgICAgVW5pcXVlQXJyYXk8dWludDMyX3Q+IG1fZmFzdENvdW50czsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Fic3RyYWN0TW9kdWxlUmVjb3Jk
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BYnN0cmFj
dE1vZHVsZVJlY29yZC5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0Fic3RyYWN0TW9kdWxlUmVjb3JkLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxOSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTYwLDcgKzYwLDggQEAgdm9pZCBBYnN0cmFjdE1vZHVsZVJlY29yZDo6ZmluaXNoQ3JlYXRpbwog
ICAgIHB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImRlcGVuZGVuY2ll
c01hcCJfcyksIG1fZGVwZW5kZW5jaWVzTWFwLmdldCgpKTsKIH0KIAotdm9pZCBBYnN0cmFjdE1v
ZHVsZVJlY29yZDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNp
dG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgQWJzdHJhY3RNb2R1bGVSZWNv
cmQ6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsK
ICAgICBBYnN0cmFjdE1vZHVsZVJlY29yZCogdGhpc09iamVjdCA9IGpzQ2FzdDxBYnN0cmFjdE1v
ZHVsZVJlY29yZCo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09i
amVjdCwgaW5mbygpKTsKQEAgLTcwLDYgKzcxLDggQEAgdm9pZCBBYnN0cmFjdE1vZHVsZVJlY29y
ZDo6dmlzaXRDaGlsZHJlbgogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fZGVwZW5k
ZW5jaWVzTWFwKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEFic3RyYWN0TW9kdWxlUmVj
b3JkKTsKKwogdm9pZCBBYnN0cmFjdE1vZHVsZVJlY29yZDo6YXBwZW5kUmVxdWVzdGVkTW9kdWxl
KGNvbnN0IElkZW50aWZpZXImIG1vZHVsZU5hbWUpCiB7CiAgICAgbV9yZXF1ZXN0ZWRNb2R1bGVz
LmFkZChtb2R1bGVOYW1lLmltcGwoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9BYnN0cmFjdE1vZHVsZVJlY29yZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0Fic3RyYWN0TW9kdWxlUmVjb3JkLmgJKHJldmlzaW9uIDI3MjgzMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Fic3RyYWN0TW9kdWxlUmVjb3JkLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0y
MDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMTM2LDcgKzEzNiw3IEBAIHByb3RlY3RlZDoKICAgICBBYnN0cmFjdE1v
ZHVsZVJlY29yZChWTSYsIFN0cnVjdHVyZSosIGNvbnN0IElkZW50aWZpZXImKTsKICAgICB2b2lk
IGZpbmlzaENyZWF0aW9uKEpTR2xvYmFsT2JqZWN0KiwgVk0mKTsKIAotICAgIHN0YXRpYyB2b2lk
IHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lU
X0NISUxEUkVOOwogCiAgICAgdm9pZCBzZXRNb2R1bGVFbnZpcm9ubWVudChKU0dsb2JhbE9iamVj
dCosIEpTTW9kdWxlRW52aXJvbm1lbnQqKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQXJnTGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQXJnTGlzdC5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0FyZ0xpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTUxLDcgKzUxLDcgQEAgdm9p
ZCBBcmdMaXN0OjpnZXRTbGljZShpbnQgc3RhcnRJbmRleCwgQQogICAgIHJlc3VsdC5tX2FyZ0Nv
dW50ID0gIG1fYXJnQ291bnQgLSBzdGFydEluZGV4OwogfQogCi12b2lkIE1hcmtlZEFyZ3VtZW50
QnVmZmVyOjptYXJrTGlzdHMoU2xvdFZpc2l0b3ImIHZpc2l0b3IsIExpc3RTZXQmIG1hcmtTZXQp
Cit2b2lkIE1hcmtlZEFyZ3VtZW50QnVmZmVyOjptYXJrTGlzdHMoQWJzdHJhY3RTbG90VmlzaXRv
ciYgdmlzaXRvciwgTGlzdFNldCYgbWFya1NldCkKIHsKICAgICBMaXN0U2V0OjppdGVyYXRvciBl
bmQgPSBtYXJrU2V0LmVuZCgpOwogICAgIGZvciAoTGlzdFNldDo6aXRlcmF0b3IgaXQgPSBtYXJr
U2V0LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQXJnTGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0FyZ0xpc3QuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQXJnTGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAog
LyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMSBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUu
b3JnKQotICogIENvcHlyaWdodCAoQykgMjAwMy0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMTE4LDcgKzExOCw3IEBAIHB1
YmxpYzoKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAgICAgICAgIAotICAgIHN0YXRp
YyB2b2lkIG1hcmtMaXN0cyhTbG90VmlzaXRvciYsIExpc3RTZXQmKTsKKyAgICBzdGF0aWMgdm9p
ZCBtYXJrTGlzdHMoQWJzdHJhY3RTbG90VmlzaXRvciYsIExpc3RTZXQmKTsKIAogICAgIHZvaWQg
ZW5zdXJlQ2FwYWNpdHkoc2l6ZV90IHJlcXVlc3RlZENhcGFjaXR5KQogICAgIHsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlYWJsZUlkZW50aWZpZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWFibGVJZGVudGlmaWVy
LmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Nh
Y2hlYWJsZUlkZW50aWZpZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDIwLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zOSwxMCArMzksMTAgQEAgdXNpbmcg
V1RGOjpVbmlxdWVkU3RyaW5nSW1wbDsKIAogbmFtZXNwYWNlIEpTQyB7CiAKK2NsYXNzIEFic3Ry
YWN0U2xvdFZpc2l0b3I7CiBjbGFzcyBDb2RlQmxvY2s7CiBjbGFzcyBJZGVudGlmaWVyOwogY2xh
c3MgSlNDZWxsOwotY2xhc3MgU2xvdFZpc2l0b3I7CiAKIGNsYXNzIENhY2hlYWJsZUlkZW50aWZp
ZXIgewogcHVibGljOgpAQCAtODcsNyArODcsNyBAQCBwdWJsaWM6CiAKICAgICB1aW50cHRyX3Qg
cmF3Qml0cygpIGNvbnN0IHsgcmV0dXJuIG1fYml0czsgfQogCi0gICAgaW5saW5lIHZvaWQgdmlz
aXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImKSBjb25zdDsKKyAgICBpbmxpbmUgdm9pZCB2aXNpdEFn
Z3JlZ2F0ZShBYnN0cmFjdFNsb3RWaXNpdG9yJikgY29uc3Q7CiAKICAgICBKU19FWFBPUlRfUFJJ
VkFURSB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVhYmxlSWRlbnRpZmllcklubGluZXMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWFibGVJZGVudGlmaWVySW5s
aW5lcy5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9DYWNoZWFibGVJZGVudGlmaWVySW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEzNyw3ICsxMzcs
NyBAQCBpbmxpbmUgdm9pZCBDYWNoZWFibGVJZGVudGlmaWVyOjpzZXRVaWRCCiAgICAgbV9iaXRz
ID0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4odWlkKSB8IHNfdWlkVGFnOwogfQogCi1pbmxpbmUg
dm9pZCBDYWNoZWFibGVJZGVudGlmaWVyOjp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYgdmlz
aXRvcikgY29uc3QKK2lubGluZSB2b2lkIENhY2hlYWJsZUlkZW50aWZpZXI6OnZpc2l0QWdncmVn
YXRlKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0CiB7CiAgICAgaWYgKG1fYml0
cyAmJiBpc0NlbGwoKSkKICAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZChjZWxsKCkp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xhc3NJbmZvLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xhc3NJbmZvLmgJKHJldmlz
aW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NsYXNzSW5mby5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5
OTktMjAwMSBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQogICogIENvcHlyaWdodCAoQykg
MjAwMSBQZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQotICogIENvcHlyaWdodCAoQykgMjAwMy0y
MDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIw
MDMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAq
ICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYwpAQCAtNDQsOSArNDQsNiBAQCBzdHJ1Y3QgTWV0aG9kVGFibGUgewogICAgIHVzaW5nIERl
c3Ryb3lGdW5jdGlvblB0ciA9IHZvaWQgKCopKEpTQ2VsbCopOwogICAgIERlc3Ryb3lGdW5jdGlv
blB0ciBNRVRIT0RfVEFCTEVfRU5UUlkoZGVzdHJveSk7CiAKLSAgICB1c2luZyBWaXNpdENoaWxk
cmVuRnVuY3Rpb25QdHIgPSB2b2lkICgqKShKU0NlbGwqLCBTbG90VmlzaXRvciYpOwotICAgIFZp
c2l0Q2hpbGRyZW5GdW5jdGlvblB0ciBNRVRIT0RfVEFCTEVfRU5UUlkodmlzaXRDaGlsZHJlbik7
Ci0KICAgICB1c2luZyBHZXRDYWxsRGF0YUZ1bmN0aW9uUHRyID0gQ2FsbERhdGEgKCopKEpTQ2Vs
bCopOwogICAgIEdldENhbGxEYXRhRnVuY3Rpb25QdHIgTUVUSE9EX1RBQkxFX0VOVFJZKGdldENh
bGxEYXRhKTsKIApAQCAtMTIwLDcgKzExNywxNiBAQCBzdHJ1Y3QgTWV0aG9kVGFibGUgewogICAg
IHVzaW5nIEVzdGltYXRlZFNpemVGdW5jdGlvblB0ciA9IHNpemVfdCAoKikoSlNDZWxsKiwgVk0m
KTsKICAgICBFc3RpbWF0ZWRTaXplRnVuY3Rpb25QdHIgTUVUSE9EX1RBQkxFX0VOVFJZKGVzdGlt
YXRlZFNpemUpOwogCi0gICAgdXNpbmcgVmlzaXRPdXRwdXRDb25zdHJhaW50c1B0ciA9IHZvaWQg
KCopKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgdXNpbmcgVmlzaXRDaGlsZHJlbkZ1bmN0
aW9uUHRyID0gdm9pZCAoKikoSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBWaXNpdENoaWxk
cmVuRnVuY3Rpb25QdHIgTUVUSE9EX1RBQkxFX0VOVFJZKHZpc2l0Q2hpbGRyZW5XaXRoU2xvdFZp
c2l0b3IpOworCisgICAgdXNpbmcgVmlzaXRDaGlsZHJlbldpdGhBYnN0cmFjdFNsb3RWaXNpdG9y
UHRyID0gdm9pZCAoKikoSlNDZWxsKiwgQWJzdHJhY3RTbG90VmlzaXRvciYpOworICAgIFZpc2l0
Q2hpbGRyZW5XaXRoQWJzdHJhY3RTbG90VmlzaXRvclB0ciBNRVRIT0RfVEFCTEVfRU5UUlkodmlz
aXRDaGlsZHJlbldpdGhBYnN0cmFjdFNsb3RWaXNpdG9yKTsKKworICAgIEFMV0FZU19JTkxJTkUg
dm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpIGNv
bnN0IHsgdmlzaXRDaGlsZHJlbldpdGhTbG90VmlzaXRvcihjZWxsLCB2aXNpdG9yKTsgfQorICAg
IEFMV0FZU19JTkxJTkUgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgQWJzdHJhY3RT
bG90VmlzaXRvciYgdmlzaXRvcikgY29uc3QgeyB2aXNpdENoaWxkcmVuV2l0aEFic3RyYWN0U2xv
dFZpc2l0b3IoY2VsbCwgdmlzaXRvcik7IH0KKworICAgIHVzaW5nIFZpc2l0T3V0cHV0Q29uc3Ry
YWludHNQdHIgPSB2b2lkICgqKShKU0NlbGwqLCBBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAgICAg
VmlzaXRPdXRwdXRDb25zdHJhaW50c1B0ciBNRVRIT0RfVEFCTEVfRU5UUlkodmlzaXRPdXRwdXRD
b25zdHJhaW50cyk7CiB9OwogCkBAIC0xNDcsNyArMTUzLDYgQEAgc3RydWN0IE1ldGhvZFRhYmxl
IHsKICAgICBKU0Nhc3RpbmdIZWxwZXJzOjpJbmhlcml0c1RyYWl0czxDbGFzc05hbWU+Ojp0eXBl
UmFuZ2UsIFwKICAgICB7IFwKICAgICAgICAgJkNsYXNzTmFtZTo6ZGVzdHJveSwgXAotICAgICAg
ICAmQ2xhc3NOYW1lOjp2aXNpdENoaWxkcmVuLCBcCiAgICAgICAgICZDbGFzc05hbWU6OmdldENh
bGxEYXRhLCBcCiAgICAgICAgICZDbGFzc05hbWU6OmdldENvbnN0cnVjdERhdGEsIFwKICAgICAg
ICAgJkNsYXNzTmFtZTo6cHV0LCBcCkBAIC0xNzMsNiArMTc4LDggQEAgc3RydWN0IE1ldGhvZFRh
YmxlIHsKICAgICAgICAgJkNsYXNzTmFtZTo6ZHVtcFRvU3RyZWFtLCBcCiAgICAgICAgICZDbGFz
c05hbWU6OmFuYWx5emVIZWFwLCBcCiAgICAgICAgICZDbGFzc05hbWU6OmVzdGltYXRlZFNpemUs
IFwKKyAgICAgICAgJkNsYXNzTmFtZTo6dmlzaXRDaGlsZHJlbiwgXAorICAgICAgICAmQ2xhc3NO
YW1lOjp2aXNpdENoaWxkcmVuLCBcCiAgICAgICAgICZDbGFzc05hbWU6OnZpc2l0T3V0cHV0Q29u
c3RyYWludHMsIFwKICAgICB9LCBcCiAgICAgQ2xhc3NOYW1lOjpUeXBlZEFycmF5U3RvcmFnZVR5
cGUsIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Nsb25lZEFyZ3VtZW50
cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xvbmVk
QXJndW1lbnRzLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQ2xvbmVkQXJndW1lbnRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2Nyw3ICsy
NjcsOCBAQCB2b2lkIENsb25lZEFyZ3VtZW50czo6bWF0ZXJpYWxpemVTcGVjaWFsCiAgICAgICAg
IG1hdGVyaWFsaXplU3BlY2lhbHMoZ2xvYmFsT2JqZWN0KTsKIH0KIAotdm9pZCBDbG9uZWRBcmd1
bWVudHM6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikK
K3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIENsb25lZEFyZ3VtZW50czo6dmlzaXRD
aGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIENsb25l
ZEFyZ3VtZW50cyogdGhpc09iamVjdCA9IGpzQ2FzdDxDbG9uZWRBcmd1bWVudHMqPihjZWxsKTsK
ICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC0y
NzUsNSArMjc2LDcgQEAgdm9pZCBDbG9uZWRBcmd1bWVudHM6OnZpc2l0Q2hpbGRyZW4oSlNDZQog
ICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fY2FsbGVlKTsKIH0KIAorREVGSU5FX1ZJ
U0lUX0NISUxEUkVOKENsb25lZEFyZ3VtZW50cyk7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DbG9uZWRBcmd1bWVudHMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DbG9uZWRBcmd1bWVudHMu
aAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xv
bmVkQXJndW1lbnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDE1LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE1LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02Miw3ICs2Miw3IEBAIHB1YmxpYzoK
ICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVj
dCosIEpTVmFsdWUgcHJvdG90eXBlKTsKICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTbG93
UHV0U3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlIHByb3RvdHlwZSk7CiAK
LSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7Cisg
ICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIERFQ0xBUkVfSU5GTzsKIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGlyZWN0QXJndW1lbnRzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EaXJlY3RBcmd1bWVudHMuY3Bw
CShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EaXJl
Y3RBcmd1bWVudHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxNS0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtOTAsNyArOTAsOCBAQCBzaXplX3Qg
RGlyZWN0QXJndW1lbnRzOjplc3RpbWF0ZWRTaXplKEpTCiAgICAgcmV0dXJuIEJhc2U6OmVzdGlt
YXRlZFNpemUoY2VsbCwgdm0pICsgbWFwcGVkQXJndW1lbnRzU2l6ZSArIG1vZGlmaWVkQXJndW1l
bnRzU2l6ZTsKIH0KIAotdm9pZCBEaXJlY3RBcmd1bWVudHM6OnZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiB0aGlzQ2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNp
dG9yPgordm9pZCBEaXJlY3RBcmd1bWVudHM6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogdGhp
c0NlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgRGlyZWN0QXJndW1lbnRzKiB0aGlzT2Jq
ZWN0ID0gc3RhdGljX2Nhc3Q8RGlyZWN0QXJndW1lbnRzKj4odGhpc0NlbGwpOwogICAgIEFTU0VS
VF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTEwNCw2ICsxMDUs
OCBAQCB2b2lkIERpcmVjdEFyZ3VtZW50czo6dmlzaXRDaGlsZHJlbihKU0NlCiAgICAgR2VuZXJp
Y0FyZ3VtZW50czxEaXJlY3RBcmd1bWVudHM+Ojp2aXNpdENoaWxkcmVuKHRoaXNDZWxsLCB2aXNp
dG9yKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKERpcmVjdEFyZ3VtZW50cyk7CisKIFN0
cnVjdHVyZSogRGlyZWN0QXJndW1lbnRzOjpjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKIHsKICAgICByZXR1cm4g
U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhE
aXJlY3RBcmd1bWVudHNUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EaXJlY3RBcmd1bWVudHMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EaXJlY3RBcmd1bWVudHMuaAkocmV2aXNp
b24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGlyZWN0QXJndW1l
bnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDE1LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE1LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02NSw3ICs2NSw3IEBAIHB1YmxpYzoKICAgICBzdGF0
aWMgRGlyZWN0QXJndW1lbnRzKiBjcmVhdGVCeUNvcHlpbmcoSlNHbG9iYWxPYmplY3QqLCBDYWxs
RnJhbWUqKTsKIAogICAgIHN0YXRpYyBzaXplX3QgZXN0aW1hdGVkU2l6ZShKU0NlbGwqLCBWTSYp
OwotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsK
KyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogICAgIAogICAgIHVpbnQzMl90IGludGVybmFs
TGVuZ3RoKCkgY29uc3QKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9FdmFsRXhlY3V0YWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvRXZhbEV4ZWN1dGFibGUuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9FdmFsRXhlY3V0YWJsZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEwLCAyMDEzLCAy
MDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDA5LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC01MCw3ICs1MCw4IEBAIGF1dG8gRXZhbEV4ZWN1dGFibGU6
OmVuc3VyZVRlbXBsYXRlT2JqZWMKICAgICByZXR1cm4gZW5zdXJlVGVtcGxhdGVPYmplY3RNYXBJ
bXBsKG1fdGVtcGxhdGVPYmplY3RNYXApOwogfQogCi12b2lkIEV2YWxFeGVjdXRhYmxlOjp2aXNp
dENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0
eXBlbmFtZSBWaXNpdG9yPgordm9pZCBFdmFsRXhlY3V0YWJsZTo6dmlzaXRDaGlsZHJlbkltcGwo
SlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEV2YWxFeGVjdXRhYmxlKiB0
aGlzT2JqZWN0ID0ganNDYXN0PEV2YWxFeGVjdXRhYmxlKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dD
X09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNjQsNCArNjUsNiBAQCB2
b2lkIEV2YWxFeGVjdXRhYmxlOjp2aXNpdENoaWxkcmVuKEpTQ2VsCiAgICAgfQogfQogCitERUZJ
TkVfVklTSVRfQ0hJTERSRU4oRXZhbEV4ZWN1dGFibGUpOworCiB9IC8vIG5hbWVzcGFjZSBKU0MK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V2YWxFeGVjdXRhYmxlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXZhbEV4ZWN1dGFibGUu
aAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXZh
bEV4ZWN1dGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDktMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDktMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTc5LDcgKzc5LDcgQEAgcHJvdGVjdGVk
OgogICAgIHVzaW5nIEJhc2U6OmZpbmlzaENyZWF0aW9uOwogICAgIEV2YWxFeGVjdXRhYmxlKEpT
R2xvYmFsT2JqZWN0KiwgY29uc3QgU291cmNlQ29kZSYsIGJvb2wgaW5TdHJpY3RDb250ZXh0LCBE
ZXJpdmVkQ29udGV4dFR5cGUsIGJvb2wgaXNBcnJvd0Z1bmN0aW9uQ29udGV4dCwgYm9vbCBpc0lu
c2lkZU9yZGluYXJ5RnVuY3Rpb24sIEV2YWxDb250ZXh0VHlwZSwgTmVlZHNDbGFzc0ZpZWxkSW5p
dGlhbGl6ZXIsIFByaXZhdGVCcmFuZFJlcXVpcmVtZW50KTsKIAotICAgIHN0YXRpYyB2b2lkIHZp
c2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NI
SUxEUkVOOwogCiAgICAgdW5zaWduZWQgbV9uZWVkc0NsYXNzRmllbGRJbml0aWFsaXplciA6IDE7
CiAgICAgdW5zaWduZWQgbV9wcml2YXRlQnJhbmRSZXF1aXJlbWVudCA6IDE7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGNlcHRpb24uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbi5jcHAJKHJldmlzaW9uIDI3Mjgz
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbi5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTkg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIw
MjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC01Myw3ICs1Myw4IEBAIFN0cnVjdHVyZSogRXhjZXB0aW9uOjpjcmVhdGVT
dHJ1Y3R1cmUoVk0KICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVj
dCwgcHJvdG90eXBlLCBUeXBlSW5mbyhDZWxsVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkp
OwogfQogCi12b2lkIEV4Y2VwdGlvbjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgRXhjZXB0
aW9uOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7
CiAgICAgRXhjZXB0aW9uKiB0aGlzT2JqZWN0ID0ganNDYXN0PEV4Y2VwdGlvbio+KGNlbGwpOwog
ICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTY0
LDYgKzY1LDggQEAgdm9pZCBFeGNlcHRpb246OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZQogICAg
ICAgICBmcmFtZS52aXNpdENoaWxkcmVuKHZpc2l0b3IpOwogfQogCitERUZJTkVfVklTSVRfQ0hJ
TERSRU4oRXhjZXB0aW9uKTsKKwogRXhjZXB0aW9uOjpFeGNlcHRpb24oVk0mIHZtKQogICAgIDog
QmFzZSh2bSwgdm0uZXhjZXB0aW9uU3RydWN0dXJlLmdldCgpKQogewpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9uLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE5IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIxIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtNTEsNyArNTEsNyBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVT
dHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUgcHJvdG90eXBlKTsKIAotICAg
IHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBE
RUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgREVDTEFSRV9FWFBPUlRfSU5GTzsKIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25FeGVjdXRhYmxlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvbkV4ZWN1
dGFibGUuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9GdW5jdGlvbkV4ZWN1dGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOS0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjcsNyArNjcs
OCBAQCBGdW5jdGlvbkNvZGVCbG9jayogRnVuY3Rpb25FeGVjdXRhYmxlOjpiCiAgICAgcmV0dXJu
IHN0YXRpY19jYXN0PEZ1bmN0aW9uQ29kZUJsb2NrKj4oZWRnZS0+Y29kZUJsb2NrKCktPmJhc2Vs
aW5lQWx0ZXJuYXRpdmUoKSk7CiB9CiAKLXZvaWQgRnVuY3Rpb25FeGVjdXRhYmxlOjp2aXNpdENo
aWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBl
bmFtZSBWaXNpdG9yPgordm9pZCBGdW5jdGlvbkV4ZWN1dGFibGU6OnZpc2l0Q2hpbGRyZW5JbXBs
KEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBGdW5jdGlvbkV4ZWN1dGFi
bGUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4oY2VsbCk7CiAgICAg
QVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtODYsNiAr
ODcsOCBAQCB2b2lkIEZ1bmN0aW9uRXhlY3V0YWJsZTo6dmlzaXRDaGlsZHJlbihKCiAgICAgfQog
fQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oRnVuY3Rpb25FeGVjdXRhYmxlKTsKKwogRnVuY3Rp
b25FeGVjdXRhYmxlKiBGdW5jdGlvbkV4ZWN1dGFibGU6OmZyb21HbG9iYWxDb2RlKAogICAgIGNv
bnN0IElkZW50aWZpZXImIG5hbWUsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0
IFNvdXJjZUNvZGUmIHNvdXJjZSwgCiAgICAgSlNPYmplY3QqJiBleGNlcHRpb24sIGludCBvdmVy
cmlkZUxpbmVOdW1iZXIsIE9wdGlvbmFsPGludD4gZnVuY3Rpb25Db25zdHJ1Y3RvclBhcmFtZXRl
cnNFbmRQb3NpdGlvbikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0
aW9uRXhlY3V0YWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZS5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvbkV4ZWN1dGFibGUuaAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxOSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAyMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTE2Niw3ICsxNjYsNyBAQCBwdWJsaWM6CiAgICAgSlNQYXJzZXJTY3JpcHRNb2RlIHNjcmlw
dE1vZGUoKSBjb25zdCB7IHJldHVybiBtX3VubGlua2VkRXhlY3V0YWJsZS0+c2NyaXB0TW9kZSgp
OyB9CiAgICAgU291cmNlQ29kZSBjbGFzc1NvdXJjZSgpIGNvbnN0IHsgcmV0dXJuIG1fdW5saW5r
ZWRFeGVjdXRhYmxlLT5jbGFzc1NvdXJjZSgpOyB9CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENo
aWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJF
TjsKICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvKQogICAgIHsKICAgICAgICAgcmV0
dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvLCBUeXBlSW5mbyhG
dW5jdGlvbkV4ZWN1dGFibGVUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvblJhcmVEYXRhLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvblJhcmVEYXRhLmNw
cAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVu
Y3Rpb25SYXJlRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDE1LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01MSw3ICs1MSw4IEBAIFN0cnVj
dHVyZSogRnVuY3Rpb25SYXJlRGF0YTo6Y3JlYXRlU3RydWMKICAgICByZXR1cm4gU3RydWN0dXJl
OjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhDZWxsVHlwZSwg
U3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwogfQogCi12b2lkIEZ1bmN0aW9uUmFyZURhdGE6OnZp
c2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRl
PHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEZ1bmN0aW9uUmFyZURhdGE6OnZpc2l0Q2hpbGRyZW5J
bXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBGdW5jdGlvblJhcmVE
YXRhKiByYXJlRGF0YSA9IGpzQ2FzdDxGdW5jdGlvblJhcmVEYXRhKj4oY2VsbCk7CiAgICAgQVNT
RVJUX0dDX09CSkVDVF9JTkhFUklUUyhjZWxsLCBpbmZvKCkpOwpAQCAtNjMsNiArNjQsOCBAQCB2
b2lkIEZ1bmN0aW9uUmFyZURhdGE6OnZpc2l0Q2hpbGRyZW4oSlNDCiAgICAgdmlzaXRvci5hcHBl
bmQocmFyZURhdGEtPm1fZXhlY3V0YWJsZSk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihG
dW5jdGlvblJhcmVEYXRhKTsKKwogRnVuY3Rpb25SYXJlRGF0YTo6RnVuY3Rpb25SYXJlRGF0YShW
TSYgdm0sIEV4ZWN1dGFibGVCYXNlKiBleGVjdXRhYmxlKQogICAgIDogQmFzZSh2bSwgdm0uZnVu
Y3Rpb25SYXJlRGF0YVN0cnVjdHVyZS5nZXQoKSkKICAgICAsIG1fb2JqZWN0QWxsb2NhdGlvblBy
b2ZpbGUoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25SYXJl
RGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0
aW9uUmFyZURhdGEuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvRnVuY3Rpb25SYXJlRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjUsNyArNjUs
NyBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0m
LCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUgcHJvdG90eXBlKTsKIAotICAgIHN0YXRpYyB2b2lk
IHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lU
X0NISUxEUkVOOwogCiAgICAgREVDTEFSRV9JTkZPOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9HZW5lcmljQXJndW1lbnRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50cy5oCShyZXZpc2lvbiAyNzI4MzAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljQXJndW1lbnRzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIw
MjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1
LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC00NCw3ICs0NCw3IEBAIHByb3RlY3RlZDoKICAgICB7CiAgICAgfQog
Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwor
ICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVy
dHlTbG90KEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5
U2xvdCYpOwogICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNPYmpl
Y3QqLCBKU0dsb2JhbE9iamVjdCosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90
Jik7CiAgICAgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCosIEpTR2xv
YmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lQXJyYXkmLCBEb250RW51bVByb3BlcnRpZXNNb2RlKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNBcmd1bWVudHNJbmxp
bmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJp
Y0FyZ3VtZW50c0lubGluZXMuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50c0lubGluZXMuaAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTMxLDcgKzMxLDggQEAKIG5hbWVzcGFjZSBKU0MgewogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBU
eXBlPgotdm9pZCBHZW5lcmljQXJndW1lbnRzPFR5cGU+Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCog
dGhpc0NlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRv
cj4KK3ZvaWQgR2VuZXJpY0FyZ3VtZW50czxUeXBlPjo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxs
KiB0aGlzQ2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBUeXBlKiB0aGlzT2JqZWN0ID0g
c3RhdGljX2Nhc3Q8VHlwZSo+KHRoaXNDZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVS
SVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC00MSw2ICs0Miw4IEBAIHZvaWQgR2VuZXJpY0Fy
Z3VtZW50czxUeXBlPjo6dmlzaXRDaGlsZHIKICAgICAgICAgdmlzaXRvci5tYXJrQXV4aWxpYXJ5
KHRoaXNPYmplY3QtPm1fbW9kaWZpZWRBcmd1bWVudHNEZXNjcmlwdG9yLmdldFVuc2FmZSgpKTsK
IH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOX1dJVEhfTU9ESUZJRVIodGVtcGxhdGU8dHlwZW5h
bWUgVHlwZT4sIEdlbmVyaWNBcmd1bWVudHM8VHlwZT4pOworCiB0ZW1wbGF0ZTx0eXBlbmFtZSBU
eXBlPgogYm9vbCBHZW5lcmljQXJndW1lbnRzPFR5cGU+OjpnZXRPd25Qcm9wZXJ0eVNsb3QoSlNP
YmplY3QqIG9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1l
IGlkZW50LCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9HZXR0ZXJTZXR0ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0dldHRlclNldHRlci5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dldHRlclNldHRlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNyArMSw3IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAyIEhhcnJp
IFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCiAgKiAgQ29weXJpZ2h0IChDKSAyMDAxIFBldGVyIEtl
bGx5IChwbWtAcG9zdC5jb20pCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA0LTIwMTcgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwNC0yMDIxIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0zMyw3
ICszMyw4IEBAIFNUQVRJQ19BU1NFUlRfSVNfVFJJVklBTExZX0RFU1RSVUNUSUJMRSgKIAogY29u
c3QgQ2xhc3NJbmZvIEdldHRlclNldHRlcjo6c19pbmZvID0geyAiR2V0dGVyU2V0dGVyIiwgbnVs
bHB0ciwgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShHZXR0ZXJTZXR0ZXIp
IH07CiAKLXZvaWQgR2V0dGVyU2V0dGVyOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xv
dFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBHZXR0
ZXJTZXR0ZXI6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRv
cikKIHsKICAgICBHZXR0ZXJTZXR0ZXIqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8R2V0dGVyU2V0dGVy
Kj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZv
KCkpOwpAQCAtNDMsNiArNDQsOCBAQCB2b2lkIEdldHRlclNldHRlcjo6dmlzaXRDaGlsZHJlbihK
U0NlbGwqCiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9zZXR0ZXIpOwogfQogCitE
RUZJTkVfVklTSVRfQ0hJTERSRU4oR2V0dGVyU2V0dGVyKTsKKwogSlNWYWx1ZSBjYWxsR2V0dGVy
KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgYmFzZSwgSlNWYWx1ZSBnZXR0
ZXJTZXR0ZXIpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2V0dGVyU2V0dGVyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2V0dGVyU2V0dGVyLmgJKHJldmlzaW9uIDI3
MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dldHRlclNldHRlci5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTkt
MjAwMSBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQogICogIENvcHlyaWdodCAoQykgMjAw
MSBQZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQotICogIENvcHlyaWdodCAoQykgMjAwMy0yMDE5
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMt
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YwpAQCAtODIsNyArODIsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBjcmVhdGUodm0sIGds
b2JhbE9iamVjdCwgZ2V0dGVyT2JqZWN0LCBzZXR0ZXJPYmplY3QpOwogICAgIH0KIAotICAgIHN0
YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNM
QVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgSlNPYmplY3QqIGdldHRlcigpIGNvbnN0IHsgcmV0
dXJuIG1fZ2V0dGVyLmdldCgpOyB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0hhc2hNYXBJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9IYXNoTWFwSW1wbC5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0hhc2hNYXBJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMCw2ICsz
MCw5IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCitERUZJTkVfVklTSVRfQ0hJTERSRU5fV0lUSF9N
T0RJRklFUih0ZW1wbGF0ZTw+LCBIYXNoTWFwQnVja2V0PEhhc2hNYXBCdWNrZXREYXRhS2V5Pik7
CitERUZJTkVfVklTSVRfQ0hJTERSRU5fV0lUSF9NT0RJRklFUih0ZW1wbGF0ZTw+LCBIYXNoTWFw
QnVja2V0PEhhc2hNYXBCdWNrZXREYXRhS2V5VmFsdWU+KTsKKwogdGVtcGxhdGU8PgogY29uc3Qg
Q2xhc3NJbmZvIEhhc2hNYXBCdWNrZXQ8SGFzaE1hcEJ1Y2tldERhdGFLZXk+OjpzX2luZm8gPQog
ICAgIHsgIkhhc2hNYXBCdWNrZXQiLCBudWxscHRyLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVf
TUVUSE9EX1RBQkxFKEhhc2hNYXBCdWNrZXQ8SGFzaE1hcEJ1Y2tldERhdGFLZXk+KSB9OwpAQCAt
MzgsOCArNDEsOSBAQCB0ZW1wbGF0ZTw+CiBjb25zdCBDbGFzc0luZm8gSGFzaE1hcEJ1Y2tldDxI
YXNoTWFwQnVja2V0RGF0YUtleVZhbHVlPjo6c19pbmZvID0KICAgICB7ICJIYXNoTWFwQnVja2V0
IiwgbnVsbHB0ciwgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShIYXNoTWFw
QnVja2V0PEhhc2hNYXBCdWNrZXREYXRhS2V5VmFsdWU+KSB9OwogCi10ZW1wbGF0ZSA8dHlwZW5h
bWUgRGF0YT4KLXZvaWQgSGFzaE1hcEJ1Y2tldDxEYXRhPjo6dmlzaXRDaGlsZHJlbihKU0NlbGwq
IGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgRGF0YT4KK3Rl
bXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEhhc2hNYXBCdWNrZXQ8RGF0YT46OnZpc2l0
Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBIYXNo
TWFwQnVja2V0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEhhc2hNYXBCdWNrZXQqPihjZWxsKTsKICAg
ICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC01Miw4
ICs1Niw5IEBAIHZvaWQgSGFzaE1hcEJ1Y2tldDxEYXRhPjo6dmlzaXRDaGlsZHJlbigKICAgICB2
aXNpdG9yLmFwcGVuZFZhbHVlcyhiaXR3aXNlX2Nhc3Q8V3JpdGVCYXJyaWVyPFVua25vd24+Kj4o
JnRoaXNPYmplY3QtPm1fZGF0YSksIHNpemVvZihEYXRhKSAvIHNpemVvZihXcml0ZUJhcnJpZXI8
VW5rbm93bj4pKTsKIH0KIAotdGVtcGxhdGUgPHR5cGVuYW1lIEhhc2hNYXBCdWNrZXQ+Ci12b2lk
IEhhc2hNYXBJbXBsPEhhc2hNYXBCdWNrZXQ+Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwg
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoTWFwQnVja2V0Pgor
dGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSGFzaE1hcEltcGw8SGFzaE1hcEJ1Y2tl
dD46OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsK
ICAgICBIYXNoTWFwSW1wbCogdGhpc09iamVjdCA9IGpzQ2FzdDxIYXNoTWFwSW1wbCo+KGNlbGwp
OwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAg
LTY2LDYgKzcxLDggQEAgdm9pZCBIYXNoTWFwSW1wbDxIYXNoTWFwQnVja2V0Pjo6dmlzaXRDaAog
ICAgICAgICB2aXNpdG9yLm1hcmtBdXhpbGlhcnkoYnVmZmVyKTsKIH0KIAorREVGSU5FX1ZJU0lU
X0NISUxEUkVOX1dJVEhfTU9ESUZJRVIodGVtcGxhdGU8dHlwZW5hbWUgSGFzaE1hcEJ1Y2tldD4s
IEhhc2hNYXBJbXBsPEhhc2hNYXBCdWNrZXQ+KTsKKwogdGVtcGxhdGUgPHR5cGVuYW1lIEhhc2hN
YXBCdWNrZXQ+CiBzaXplX3QgSGFzaE1hcEltcGw8SGFzaE1hcEJ1Y2tldD46OmVzdGltYXRlZFNp
emUoSlNDZWxsKiBjZWxsLCBWTSYgdm0pCiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9IYXNoTWFwSW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0hhc2hNYXBJbXBsLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0hhc2hNYXBJbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTggQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xNDgs
NyArMTQ4LDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9kYXRhLnZhbHVlLmdldCgpOwog
ICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0
b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgQUxXQVlTX0lOTElORSBI
YXNoTWFwQnVja2V0KiBuZXh0KCkgY29uc3QgeyByZXR1cm4gbV9uZXh0LmdldCgpOyB9CiAgICAg
QUxXQVlTX0lOTElORSBIYXNoTWFwQnVja2V0KiBwcmV2KCkgY29uc3QgeyByZXR1cm4gbV9wcmV2
LmdldCgpOyB9CkBAIC0zNjQsNyArMzY0LDcgQEAgY2xhc3MgSGFzaE1hcEltcGwgOiBwdWJsaWMg
SlNOb25GaW5hbE9iagogcHVibGljOgogICAgIHVzaW5nIEJ1Y2tldFR5cGUgPSBIYXNoTWFwQnVj
a2V0VHlwZTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZp
c2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgc3RhdGljIHNpemVf
dCBlc3RpbWF0ZWRTaXplKEpTQ2VsbCosIFZNJik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0ludGVybmFsRnVuY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGVybmFsRnVuY3Rpb24uY3BwCShyZXZpc2lvbiAyNzI4
MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRlcm5hbEZ1bmN0aW9uLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAx
OTk5LTIwMDIgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKICAqICBDb3B5cmlnaHQgKEMp
IDIwMDEgUGV0ZXIgS2VsbHkgKHBta0Bwb3N0LmNvbSkKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDQt
MjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAy
MDA0LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAg
KiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKQEAgLTY0LDcgKzY0LDggQEAgdm9pZCBJbnRlcm5hbEZ1bmN0aW9uOjpmaW5pc2hDcmVh
dGlvbihWTQogICAgIH0KIH0KIAotdm9pZCBJbnRlcm5hbEZ1bmN0aW9uOjp2aXNpdENoaWxkcmVu
KEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPgordm9pZCBJbnRlcm5hbEZ1bmN0aW9uOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwq
IGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSW50ZXJuYWxGdW5jdGlvbiogdGhpc09i
amVjdCA9IGpzQ2FzdDxJbnRlcm5hbEZ1bmN0aW9uKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09C
SkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNzMsNiArNzQsOCBAQCB2b2lk
IEludGVybmFsRnVuY3Rpb246OnZpc2l0Q2hpbGRyZW4oSlNDCiAgICAgdmlzaXRvci5hcHBlbmQo
dGhpc09iamVjdC0+bV9vcmlnaW5hbE5hbWUpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU5f
V0lUSF9NT0RJRklFUihKU19FWFBPUlRfUFJJVkFURSwgSW50ZXJuYWxGdW5jdGlvbik7CisKIGNv
bnN0IFN0cmluZyYgSW50ZXJuYWxGdW5jdGlvbjo6bmFtZSgpCiB7CiAgICAgY29uc3QgU3RyaW5n
JiBuYW1lID0gbV9vcmlnaW5hbE5hbWUtPnRyeUdldFZhbHVlKCk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9JbnRlcm5hbEZ1bmN0aW9uLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50ZXJuYWxGdW5jdGlvbi5oCShyZXZpc2lvbiAy
NzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRlcm5hbEZ1bmN0aW9u
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogIENvcHlyaWdodCAoQykg
MTk5OS0yMDAwIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCi0gKiAgQ29weXJpZ2h0IChD
KSAyMDAzLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdo
dCAoQykgMjAwMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqICBDb3B5
cmlnaHQgKEMpIDIwMDcgQ2FtZXJvbiBad2FyaWNoIChjd3p3YXJpY2hAdXdhdGVybG9vLmNhKQog
ICogIENvcHlyaWdodCAoQykgMjAwNyBNYWtzIE9ybG92aWNoCiAgKgpAQCAtNDYsNyArNDYsNyBA
QCBwdWJsaWM6CiAKICAgICBERUNMQVJFX0VYUE9SVF9JTkZPOwogCi0gICAgSlNfRVhQT1JUX1BS
SVZBVEUgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwor
ICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU5fV0lUSF9NT0RJRklFUihKU19FWFBPUlRfUFJJVkFU
RSk7CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSBjb25zdCBTdHJpbmcmIG5hbWUoKTsKICAgICBj
b25zdCBTdHJpbmcgZGlzcGxheU5hbWUoVk0mKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0ludGxDb2xsYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSW50bENvbGxhdG9yLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bENvbGxhdG9yLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQW5keSBWYW5XYWdv
bmVyIChhbmR5QHZhbndhZ29uZXIuZmFtaWx5KQogICogQ29weXJpZ2h0IChDKSAyMDE1IFN1a29s
c2FrIFNha3NodXdvbmcgKHN1a29sc2FrQGdtYWlsLmNvbSkKLSAqIENvcHlyaWdodCAoQykgMjAx
Ni0yMDIwIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNi0yMDIxIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtNjUsNyArNjUsOCBAQCB2b2lkIEludGxDb2xsYXRvcjo6Zmlu
aXNoQ3JlYXRpb24oVk0mIHZtCiAgICAgQVNTRVJUKGluaGVyaXRzKHZtLCBpbmZvKCkpKTsKIH0K
IAotdm9pZCBJbnRsQ29sbGF0b3I6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90Vmlz
aXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEludGxDb2xs
YXRvcjo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQog
ewogICAgIEludGxDb2xsYXRvciogdGhpc09iamVjdCA9IGpzQ2FzdDxJbnRsQ29sbGF0b3IqPihj
ZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7
CkBAIC03NSw2ICs3Niw4IEBAIHZvaWQgSW50bENvbGxhdG9yOjp2aXNpdENoaWxkcmVuKEpTQ2Vs
bCoKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2JvdW5kQ29tcGFyZSk7CiB9CiAK
K0RFRklORV9WSVNJVF9DSElMRFJFTihJbnRsQ29sbGF0b3IpOworCiBWZWN0b3I8U3RyaW5nPiBJ
bnRsQ29sbGF0b3I6OnNvcnRMb2NhbGVEYXRhKGNvbnN0IFN0cmluZyYgbG9jYWxlLCBSZWxldmFu
dEV4dGVuc2lvbktleSBrZXkpCiB7CiAgICAgLy8gOS4xIEludGVybmFsIHNsb3RzIG9mIFNlcnZp
Y2UgQ29uc3RydWN0b3JzICYgMTAuMi4zIEludGVybmFsIHNsb3RzIChFQ01BLTQwMiAyLjApCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsQ29sbGF0b3IuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsQ29sbGF0b3IuaAkocmV2
aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bENvbGxh
dG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChD
KSAyMDE1IEFuZHkgVmFuV2Fnb25lciAoYW5keUB2YW53YWdvbmVyLmZhbWlseSkKKyAqIENvcHly
aWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTgwLDcgKzgxLDcgQEAgcHVibGljOgogcHJpdmF0ZToK
ICAgICBJbnRsQ29sbGF0b3IoVk0mLCBTdHJ1Y3R1cmUqKTsKICAgICB2b2lkIGZpbmlzaENyZWF0
aW9uKFZNJik7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90Vmlz
aXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBib29sIHVwZGF0ZUNh
bkRvQVNDSUlVQ0FEVUNFVENvbXBhcmlzb24oKSBjb25zdDsKIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSW50bERhdGVUaW1lRm9ybWF0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsRGF0ZVRpbWVGb3JtYXQuY3BwCShyZXZp
c2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsRGF0ZVRp
bWVGb3JtYXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENvcHly
aWdodCAoQykgMjAxNSBBbmR5IFZhbldhZ29uZXIgKGFuZHlAdmFud2Fnb25lci5mYW1pbHkpCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTkwLDcgKzkwLDggQEAgdm9p
ZCBJbnRsRGF0ZVRpbWVGb3JtYXQ6OmZpbmlzaENyZWF0aW9uKAogICAgIEFTU0VSVChpbmhlcml0
cyh2bSwgaW5mbygpKSk7CiB9CiAKLXZvaWQgSW50bERhdGVUaW1lRm9ybWF0Ojp2aXNpdENoaWxk
cmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBWaXNpdG9yPgordm9pZCBJbnRsRGF0ZVRpbWVGb3JtYXQ6OnZpc2l0Q2hpbGRyZW5JbXBsKEpT
Q2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBJbnRsRGF0ZVRpbWVGb3JtYXQq
IHRoaXNPYmplY3QgPSBqc0Nhc3Q8SW50bERhdGVUaW1lRm9ybWF0Kj4oY2VsbCk7CiAgICAgQVNT
RVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtMTAwLDYgKzEw
MSw4IEBAIHZvaWQgSW50bERhdGVUaW1lRm9ybWF0Ojp2aXNpdENoaWxkcmVuKEoKICAgICB2aXNp
dG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2JvdW5kRm9ybWF0KTsKIH0KIAorREVGSU5FX1ZJU0lU
X0NISUxEUkVOKEludGxEYXRlVGltZUZvcm1hdCk7CisKIHZvaWQgSW50bERhdGVUaW1lRm9ybWF0
OjpzZXRCb3VuZEZvcm1hdChWTSYgdm0sIEpTQm91bmRGdW5jdGlvbiogZm9ybWF0KQogewogICAg
IG1fYm91bmRGb3JtYXQuc2V0KHZtLCB0aGlzLCBmb3JtYXQpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSW50bERhdGVUaW1lRm9ybWF0LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERhdGVUaW1lRm9ybWF0LmgJKHJldmlzaW9u
IDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxEYXRlVGltZUZv
cm1hdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAo
QykgMjAxNSBBbmR5IFZhbldhZ29uZXIgKGFuZHlAdmFud2Fnb25lci5mYW1pbHkpCisgKiBDb3B5
cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC04NSw3ICs4Niw3IEBAIHB1YmxpYzoKIHByaXZhdGU6
CiAgICAgSW50bERhdGVUaW1lRm9ybWF0KFZNJiwgU3RydWN0dXJlKik7CiAgICAgdm9pZCBmaW5p
c2hDcmVhdGlvbihWTSYpOwotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwg
U2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgc3RhdGlj
IFZlY3RvcjxTdHJpbmc+IGxvY2FsZURhdGEoY29uc3QgU3RyaW5nJiwgUmVsZXZhbnRFeHRlbnNp
b25LZXkpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTG9jYWxl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTG9j
YWxlLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSW50bExvY2FsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKgogICog
Q29weXJpZ2h0IChDKSAyMDIwIFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01OCw3ICs1OSw4IEBAIHZvaWQgSW50bExv
Y2FsZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQogICAgIEFTU0VSVChpbmhlcml0cyh2bSwgaW5m
bygpKSk7CiB9CiAKLXZvaWQgSW50bExvY2FsZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGws
IFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQg
SW50bExvY2FsZTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNp
dG9yKQogewogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SW50bExvY2FsZSo+KGNlbGwp
OwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAg
LTY2LDYgKzY4LDggQEAgdm9pZCBJbnRsTG9jYWxlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogYwog
ICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CiB9CiAKK0RFRklO
RV9WSVNJVF9DSElMRFJFTihJbnRsTG9jYWxlKTsKKwogY2xhc3MgTG9jYWxlSURCdWlsZGVyIGZp
bmFsIHsKIHB1YmxpYzoKICAgICBib29sIGluaXRpYWxpemUoY29uc3QgU3RyaW5nJik7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTG9jYWxlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bExvY2FsZS5oCShyZXZpc2lvbiAy
NzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTG9jYWxlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDIwIFNv
bnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC03MSw3ICs3Miw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgSW50bExvY2Fs
ZShWTSYsIFN0cnVjdHVyZSopOwogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKLSAgICBz
dGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVD
TEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIFN0cmluZyBrZXl3b3JkVmFsdWUoQVNDSUlMaXRl
cmFsLCBib29sIGlzQm9vbGVhbiA9IGZhbHNlKSBjb25zdDsKIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSW50bE51bWJlckZvcm1hdC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE51bWJlckZvcm1hdC5jcHAJKHJldmlzaW9u
IDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxOdW1iZXJGb3Jt
YXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAo
QykgMjAxNSBBbmR5IFZhbldhZ29uZXIgKGFuZHlAdmFud2Fnb25lci5mYW1pbHkpCiAgKiBDb3B5
cmlnaHQgKEMpIDIwMTYgU3Vrb2xzYWsgU2Frc2h1d29uZyAoc3Vrb2xzYWtAZ21haWwuY29tKQot
ICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICogQ29weXJpZ2h0IChDKSAyMDIwIFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVu
dCBJbmMuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC03Myw3ICs3Myw4IEBAIHZvaWQgSW50bE51bWJl
ckZvcm1hdDo6ZmluaXNoQ3JlYXRpb24oVk0KICAgICBBU1NFUlQoaW5oZXJpdHModm0sIGluZm8o
KSkpOwogfQogCi12b2lkIEludGxOdW1iZXJGb3JtYXQ6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBj
ZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2
b2lkIEludGxOdW1iZXJGb3JtYXQ6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlz
aXRvciYgdmlzaXRvcikKIHsKICAgICBJbnRsTnVtYmVyRm9ybWF0KiB0aGlzT2JqZWN0ID0ganND
YXN0PEludGxOdW1iZXJGb3JtYXQqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVS
SVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC04Myw2ICs4NCw4IEBAIHZvaWQgSW50bE51bWJl
ckZvcm1hdDo6dmlzaXRDaGlsZHJlbihKU0MKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0
LT5tX2JvdW5kRm9ybWF0KTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEludGxOdW1iZXJG
b3JtYXQpOworCiBWZWN0b3I8U3RyaW5nPiBJbnRsTnVtYmVyRm9ybWF0Ojpsb2NhbGVEYXRhKGNv
bnN0IFN0cmluZyYgbG9jYWxlLCBSZWxldmFudEV4dGVuc2lvbktleSBrZXkpCiB7CiAgICAgLy8g
OS4xIEludGVybmFsIHNsb3RzIG9mIFNlcnZpY2UgQ29uc3RydWN0b3JzICYgMTEuMi4zIEludGVy
bmFsIHNsb3RzIChFQ01BLTQwMiAyLjApCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9JbnRsTnVtYmVyRm9ybWF0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSW50bE51bWJlckZvcm1hdC5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTnVtYmVyRm9ybWF0LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNiArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDE1IEFuZHkgVmFuV2Fn
b25lciAoYW5keUB2YW53YWdvbmVyLmZhbWlseSkKICAqIENvcHlyaWdodCAoQykgMjAyMCBTb255
IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtOTYsNyArOTcsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIEludGxOdW1iZXJG
b3JtYXQoVk0mLCBTdHJ1Y3R1cmUqKTsKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7Ci0g
ICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAg
IERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBzdGF0aWMgVmVjdG9yPFN0cmluZz4gbG9j
YWxlRGF0YShjb25zdCBTdHJpbmcmLCBSZWxldmFudEV4dGVuc2lvbktleSk7CiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxQbHVyYWxSdWxlcy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFBsdXJhbFJ1bGVzLmNwcAko
cmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFBs
dXJhbFJ1bGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5
cmlnaHQgKEMpIDIwMTggQW5keSBWYW5XYWdvbmVyIChhbmR5QHZhbndhZ29uZXIuZmFtaWx5KQot
ICogQ29weXJpZ2h0IChDKSAyMDE5LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE5LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02MSw3ICs2MSw4IEBAIHZv
aWQgSW50bFBsdXJhbFJ1bGVzOjpmaW5pc2hDcmVhdGlvbihWTSYKICAgICBBU1NFUlQoaW5oZXJp
dHModm0sIGluZm8oKSkpOwogfQogCi12b2lkIEludGxQbHVyYWxSdWxlczo6dmlzaXRDaGlsZHJl
bihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUg
VmlzaXRvcj4KK3ZvaWQgSW50bFBsdXJhbFJ1bGVzOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwq
IGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSW50bFBsdXJhbFJ1bGVzKiB0aGlzT2Jq
ZWN0ID0ganNDYXN0PEludGxQbHVyYWxSdWxlcyo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpF
Q1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTY5LDYgKzcwLDggQEAgdm9pZCBJ
bnRsUGx1cmFsUnVsZXM6OnZpc2l0Q2hpbGRyZW4oSlNDZQogICAgIEJhc2U6OnZpc2l0Q2hpbGRy
ZW4odGhpc09iamVjdCwgdmlzaXRvcik7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihJbnRs
UGx1cmFsUnVsZXMpOworCiBWZWN0b3I8U3RyaW5nPiBJbnRsUGx1cmFsUnVsZXM6OmxvY2FsZURh
dGEoY29uc3QgU3RyaW5nJiwgUmVsZXZhbnRFeHRlbnNpb25LZXkpCiB7CiAgICAgcmV0dXJuIHsg
fTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxQbHVyYWxSdWxlcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxQbHVyYWxS
dWxlcy5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9JbnRsUGx1cmFsUnVsZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAg
KiBDb3B5cmlnaHQgKEMpIDIwMTggQW5keSBWYW5XYWdvbmVyIChhbmR5QHZhbndhZ29uZXIuZmFt
aWx5KQorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjYsNyArNjcsNyBAQCBwdWJs
aWM6CiBwcml2YXRlOgogICAgIEludGxQbHVyYWxSdWxlcyhWTSYsIFN0cnVjdHVyZSopOwogICAg
IHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVu
KEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAog
ICAgIHN0YXRpYyBWZWN0b3I8U3RyaW5nPiBsb2NhbGVEYXRhKGNvbnN0IFN0cmluZyYsIFJlbGV2
YW50RXh0ZW5zaW9uS2V5KTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SW50bFJlbGF0aXZlVGltZUZvcm1hdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSW50bFJlbGF0aXZlVGltZUZvcm1hdC5jcHAJKHJldmlzaW9uIDI3Mjgz
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxSZWxhdGl2ZVRpbWVGb3Jt
YXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAo
QykgMjAyMCBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgorICogQ29weXJpZ2h0
IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtNjIsNyArNjMsOCBAQCB2b2lkIEludGxSZWxhdGl2ZVRpbWVG
b3JtYXQ6OmZpbmlzaENyZWF0CiAgICAgQVNTRVJUKGluaGVyaXRzKHZtLCBpbmZvKCkpKTsKIH0K
IAotdm9pZCBJbnRsUmVsYXRpdmVUaW1lRm9ybWF0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2Vs
bCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9p
ZCBJbnRsUmVsYXRpdmVUaW1lRm9ybWF0Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGws
IFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxJbnRs
UmVsYXRpdmVUaW1lRm9ybWF0Kj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklU
Uyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNzAsNiArNzIsOCBAQCB2b2lkIEludGxSZWxhdGl2
ZVRpbWVGb3JtYXQ6OnZpc2l0Q2hpbGRyCiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2Jq
ZWN0LCB2aXNpdG9yKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEludGxSZWxhdGl2ZVRp
bWVGb3JtYXQpOworCiBWZWN0b3I8U3RyaW5nPiBJbnRsUmVsYXRpdmVUaW1lRm9ybWF0Ojpsb2Nh
bGVEYXRhKGNvbnN0IFN0cmluZyYgbG9jYWxlLCBSZWxldmFudEV4dGVuc2lvbktleSBrZXkpCiB7
CiAgICAgQVNTRVJUX1VOVVNFRChrZXksIGtleSA9PSBSZWxldmFudEV4dGVuc2lvbktleTo6TnUp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFJlbGF0aXZlVGltZUZv
cm1hdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxS
ZWxhdGl2ZVRpbWVGb3JtYXQuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSW50bFJlbGF0aXZlVGltZUZvcm1hdC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDYgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAyMCBTb255IEludGVyYWN0aXZl
IEVudGVydGFpbm1lbnQgSW5jLgotICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMC0yMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
NjQsNyArNjQsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIEludGxSZWxhdGl2ZVRpbWVGb3Jt
YXQoVk0mLCBTdHJ1Y3R1cmUqKTsKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7Ci0gICAg
c3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERF
Q0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBzdGF0aWMgVmVjdG9yPFN0cmluZz4gbG9jYWxl
RGF0YShjb25zdCBTdHJpbmcmLCBSZWxldmFudEV4dGVuc2lvbktleSk7CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxTZWdtZW50SXRlcmF0b3IuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxTZWdtZW50SXRlcmF0b3Iu
Y3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9J
bnRsU2VnbWVudEl0ZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8q
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjQsMTMgKzY1LDE2IEBAIHZvaWQgSW50
bFNlZ21lbnRJdGVyYXRvcjo6ZmluaXNoQ3JlYXRpb24KICAgICBtX3N0cmluZy5zZXQodm0sIHRo
aXMsIHN0cmluZyk7CiB9CiAKLXZvaWQgSW50bFNlZ21lbnRJdGVyYXRvcjo6dmlzaXRDaGlsZHJl
bihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUg
VmlzaXRvcj4KK3ZvaWQgSW50bFNlZ21lbnRJdGVyYXRvcjo6dmlzaXRDaGlsZHJlbkltcGwoSlND
ZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBq
c0Nhc3Q8SW50bFNlZ21lbnRJdGVyYXRvcio+KGNlbGwpOwogICAgIEJhc2U6OnZpc2l0Q2hpbGRy
ZW4odGhpc09iamVjdCwgdmlzaXRvcik7CiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+
bV9zdHJpbmcpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSW50bFNlZ21lbnRJdGVyYXRv
cik7CisKIEpTT2JqZWN0KiBJbnRsU2VnbWVudEl0ZXJhdG9yOjpuZXh0KEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFNlZ21lbnRJdGVyYXRvci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxTZWdtZW50SXRl
cmF0b3IuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSW50bFNlZ21lbnRJdGVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAog
LyoKICAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01Myw3ICs1NCw3IEBAIHB1YmxpYzoK
IAogICAgIEpTT2JqZWN0KiBuZXh0KEpTR2xvYmFsT2JqZWN0Kik7CiAKLSAgICBzdGF0aWMgdm9p
ZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJ
VF9DSElMRFJFTjsKIAogcHJpdmF0ZToKICAgICBJbnRsU2VnbWVudEl0ZXJhdG9yKFZNJiwgU3Ry
dWN0dXJlKiwgc3RkOjp1bmlxdWVfcHRyPFVCcmVha0l0ZXJhdG9yLCBVQnJlYWtJdGVyYXRvckRl
bGV0ZXI+JiYsIEJveDxWZWN0b3I8VUNoYXI+PiYmLCBJbnRsU2VnbWVudGVyOjpHcmFudWxhcml0
eSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsU2VnbWVudHMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxTZWdtZW50
cy5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0ludGxTZWdtZW50cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKgogICog
Q29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEwOSwxMSArMTEwLDE0IEBAIEpTT2JqZWN0KiBJ
bnRsU2VnbWVudHM6OmNyZWF0ZVNlZ21lbnRJdGUKICAgICByZXR1cm4gSW50bFNlZ21lbnRJdGVy
YXRvcjo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QtPnNlZ21lbnRJdGVyYXRvclN0cnVjdHVyZSgp
LCBXVEZNb3ZlKHNlZ21lbnRlciksIG1fYnVmZmVyLCBtX3N0cmluZy5nZXQoKSwgbV9ncmFudWxh
cml0eSk7CiB9CiAKLXZvaWQgSW50bFNlZ21lbnRzOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2Vs
bCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9p
ZCBJbnRsU2VnbWVudHM6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYg
dmlzaXRvcikKIHsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEludGxTZWdtZW50cyo+
KGNlbGwpOwogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CiAg
ICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9zdHJpbmcpOwogfQogCitERUZJTkVfVklT
SVRfQ0hJTERSRU4oSW50bFNlZ21lbnRzKTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsU2VnbWVudHMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsU2VnbWVudHMuaAkocmV2aXNpb24g
MjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFNlZ21lbnRzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDIw
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTU0LDcgKzU1LDcgQEAgcHVibGljOgogICAgIEpTVmFsdWUgY29udGFpbmluZyhK
U0dsb2JhbE9iamVjdCosIEpTVmFsdWUgaW5kZXhWYWx1ZSk7CiAgICAgSlNPYmplY3QqIGNyZWF0
ZVNlZ21lbnRJdGVyYXRvcihKU0dsb2JhbE9iamVjdCopOwogCi0gICAgc3RhdGljIHZvaWQgdmlz
aXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJ
TERSRU47CiAKIHByaXZhdGU6CiAgICAgSW50bFNlZ21lbnRzKFZNJiwgU3RydWN0dXJlKiwgc3Rk
Ojp1bmlxdWVfcHRyPFVCcmVha0l0ZXJhdG9yLCBVQnJlYWtJdGVyYXRvckRlbGV0ZXI+JiYsIEJv
eDxWZWN0b3I8VUNoYXI+PiYmLCBJbnRsU2VnbWVudGVyOjpHcmFudWxhcml0eSk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcu
Y3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0FycmF5QnVmZmVyVmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xNTUsNyArMTU1LDggQEAg
dm9pZCBKU0FycmF5QnVmZmVyVmlldzo6ZmluaXNoQ3JlYXRpb24oVgogICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKLXZvaWQgSlNBcnJheUJ1ZmZlclZpZXc6OnZpc2l0Q2hp
bGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVu
YW1lIFZpc2l0b3I+Cit2b2lkIEpTQXJyYXlCdWZmZXJWaWV3Ojp2aXNpdENoaWxkcmVuSW1wbChK
U0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNBcnJheUJ1ZmZlclZpZXcq
IHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNBcnJheUJ1ZmZlclZpZXcqPihjZWxsKTsKICAgICBBU1NF
UlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC0xNjksNiArMTcw
LDggQEAgdm9pZCBKU0FycmF5QnVmZmVyVmlldzo6dmlzaXRDaGlsZHJlbihKUwogICAgIH0KIH0K
IAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTQXJyYXlCdWZmZXJWaWV3KTsKKwogYm9vbCBKU0Fy
cmF5QnVmZmVyVmlldzo6cHV0KAogICAgIEpTQ2VsbCogY2VsbCwgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwKICAg
ICBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0FycmF5QnVmZmVyVmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3LmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjAgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0xNzIsNyArMTcyLDcgQEAgcHJvdGVjdGVkOgogICAgIAogICAgIHN0YXRpYyBi
b29sIHB1dChKU0NlbGwqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwg
UHV0UHJvcGVydHlTbG90Jik7CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2Vs
bCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKICAgICAKIHB1
YmxpYzoKICAgICBUeXBlZEFycmF5TW9kZSBtb2RlKCkgY29uc3QgeyByZXR1cm4gbV9tb2RlOyB9
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5SXRlcmF0b3IuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlJdGVy
YXRvci5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTQXJyYXlJdGVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAyMC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjgsMTEgKzY4LDE0IEBAIHZv
aWQgSlNBcnJheUl0ZXJhdG9yOjpmaW5pc2hDcmVhdGlvbihWTSYKICAgICAgICAgQmFzZTo6aW50
ZXJuYWxGaWVsZChpbmRleCkuc2V0KHZtLCB0aGlzLCB2YWx1ZXNbaW5kZXhdKTsKIH0KIAotdm9p
ZCBKU0FycmF5SXRlcmF0b3I6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRv
ciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTQXJyYXlJdGVy
YXRvcjo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQog
ewogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNBcnJheUl0ZXJhdG9yKj4oY2VsbCk7
CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwogICAg
IEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CiB9CiAKK0RFRklORV9W
SVNJVF9DSElMRFJFTihKU0FycmF5SXRlcmF0b3IpOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlJdGVyYXRvci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlJdGVyYXRvci5o
CShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Fy
cmF5SXRlcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDIwLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03OCw3ICs3OCw3IEBAIHB1YmxpYzoKIAogICAg
IERFQ0xBUkVfSU5GTzsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwg
U2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiBwcml2YXRlOgog
ICAgIEpTQXJyYXlJdGVyYXRvcihWTSYsIFN0cnVjdHVyZSopOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNBc3luY0dlbmVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBc3luY0dlbmVyYXRvci5jcHAJKHJldmlzaW9u
IDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXN5bmNHZW5lcmF0
b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTktMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTU5LDExICs1OSwxNCBAQCB2b2lkIEpTQXN5bmNHZW5lcmF0
b3I6OmZpbmlzaENyZWF0aW9uKFZNCiAgICAgICAgIGludGVybmFsRmllbGQoaW5kZXgpLnNldCh2
bSwgdGhpcywgdmFsdWVzW2luZGV4XSk7CiB9CiAKLXZvaWQgSlNBc3luY0dlbmVyYXRvcjo6dmlz
aXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8
dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNBc3luY0dlbmVyYXRvcjo6dmlzaXRDaGlsZHJlbklt
cGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGF1dG8qIHRoaXNPYmpl
Y3QgPSBqc0Nhc3Q8SlNBc3luY0dlbmVyYXRvcio+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpF
Q1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKICAgICBCYXNlOjp2aXNpdENoaWxkcmVu
KHRoaXNPYmplY3QsIHZpc2l0b3IpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNBc3lu
Y0dlbmVyYXRvcik7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNBc3luY0dlbmVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXN5bmNHZW5lcmF0b3IuaAkocmV2aXNpb24gMjcyODMw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBc3luY0dlbmVyYXRvci5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTktMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTk1LDcgKzk1LDcgQEAgcHVibGljOgogCiAgICAgREVDTEFSRV9FWFBPUlRf
SU5GTzsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0
b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiBwcml2YXRlOgogICAgIEpTQXN5
bmNHZW5lcmF0b3IoVk0mLCBTdHJ1Y3R1cmUqKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQmlnSW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0JpZ0ludC5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTQmlnSW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsx
LDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQ2FpbyBMaW1hIDx0aWNhaW9saW1hQGdt
YWlsLmNvbT4KLSAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjcsNyAr
NjcsOCBAQCBKU0JpZ0ludDo6SlNCaWdJbnQoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0CiAgICAgLCBt
X2RhdGEodm0sIHRoaXMsIGRhdGEsIGxlbmd0aCkKIHsgfQogCi12b2lkIEpTQmlnSW50Ojp2aXNp
dENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0
eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0JpZ0ludDo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxs
KiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nh
c3Q8SlNCaWdJbnQqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNP
YmplY3QsIGluZm8oKSk7CkBAIC03Niw2ICs3Nyw4IEBAIHZvaWQgSlNCaWdJbnQ6OnZpc2l0Q2hp
bGRyZW4oSlNDZWxsKiBjZWwKICAgICAgICAgdmlzaXRvci5tYXJrQXV4aWxpYXJ5KGRhdGEpOwog
fQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNCaWdJbnQpOworCiB2b2lkIEpTQmlnSW50Ojpp
bml0aWFsaXplKEluaXRpYWxpemF0aW9uVHlwZSBpbml0VHlwZSkKIHsKICAgICBpZiAoaW5pdFR5
cGUgPT0gSW5pdGlhbGl6YXRpb25UeXBlOjpXaXRoWmVybykKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTQmlnSW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNCaWdJbnQuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCaWdJbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsx
LDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQ2FpbyBMaW1hIDx0aWNhaW9saW1hQGdt
YWlsLmNvbT4KLSAqIENvcHlyaWdodCAoQykgMjAxOS0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOS0yMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTAsNyAr
NTAsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVG
bGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgU3RydWN0dXJlSXNJbW1vcnRhbCB8IE92ZXJy
aWRlc1RvVGhpczsKICAgICBmcmllbmQgY2xhc3MgQ2FjaGVkQmlnSW50OwogCi0gICAgc3RhdGlj
IHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVf
VklTSVRfQ0hJTERSRU47CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3Bh
Y2VBY2Nlc3M+CiAgICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JvdW5kRnVuY3Rpb24uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQm91bmRGdW5jdGlv
bi5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTQm91bmRGdW5jdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNDksNyArMjQ5
LDggQEAgdm9pZCBKU0JvdW5kRnVuY3Rpb246OmZpbmlzaENyZWF0aW9uKFZNJgogICAgIEFTU0VS
VChpbmhlcml0cyh2bSwgaW5mbygpKSk7CiB9CiAKLXZvaWQgSlNCb3VuZEZ1bmN0aW9uOjp2aXNp
dENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0
eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0JvdW5kRnVuY3Rpb246OnZpc2l0Q2hpbGRyZW5JbXBs
KEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU0JvdW5kRnVuY3Rpb24q
IHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNCb3VuZEZ1bmN0aW9uKj4oY2VsbCk7CiAgICAgQVNTRVJU
X0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtMjYxLDQgKzI2Miw2
IEBAIHZvaWQgSlNCb3VuZEZ1bmN0aW9uOjp2aXNpdENoaWxkcmVuKEpTQ2UKICAgICB2aXNpdG9y
LmFwcGVuZCh0aGlzT2JqZWN0LT5tX25hbWVNYXlCZU51bGwpOwogfQogCitERUZJTkVfVklTSVRf
Q0hJTERSRU4oSlNCb3VuZEZ1bmN0aW9uKTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JvdW5kRnVuY3Rpb24uaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JvdW5kRnVuY3Rpb24uaAkocmV2
aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCb3VuZEZ1
bmN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDExLTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDExLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC04NCw3ICs4NCw3IEBAIHByaXZhdGU6CiAgICAg
SlNCb3VuZEZ1bmN0aW9uKFZNJiwgTmF0aXZlRXhlY3V0YWJsZSosIEpTR2xvYmFsT2JqZWN0Kiwg
U3RydWN0dXJlKiwgSlNPYmplY3QqIHRhcmdldEZ1bmN0aW9uLCBKU1ZhbHVlIGJvdW5kVGhpcywg
SlNJbW11dGFibGVCdXR0ZXJmbHkqIGJvdW5kQXJncywgSlNTdHJpbmcqIG5hbWVNYXlCZU51bGws
IGRvdWJsZSBsZW5ndGgpOwogCiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOwotICAgIHN0
YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNM
QVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgV3JpdGVCYXJyaWVyPEpTT2JqZWN0PiBtX3Rhcmdl
dEZ1bmN0aW9uOwogICAgIFdyaXRlQmFycmllcjxVbmtub3duPiBtX2JvdW5kVGhpczsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2FsbGVlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NhbGxlZS5jcHAJKHJldmlzaW9uIDI3
MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2FsbGVlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQsIDIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0
LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC01MCw3ICs1MCw4IEBAIHZvaWQgSlNDYWxsZWU6OmZpbmlzaENyZWF0
aW9uKFZNJiB2bSkKICAgICBBU1NFUlQoaW5oZXJpdHModm0sIGluZm8oKSkpOwogfQogCi12b2lk
IEpTQ2FsbGVlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0
b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0NhbGxlZTo6dmlzaXRDaGls
ZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTQ2FsbGVl
KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQ2FsbGVlKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09C
SkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNTksNCArNjAsNiBAQCB2b2lk
IEpTQ2FsbGVlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsCiAgICAgdmlzaXRvci5hcHBlbmQo
dGhpc09iamVjdC0+bV9zY29wZSk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU0NhbGxl
ZSk7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNDYWxsZWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0NhbGxlZS5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0NhbGxlZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEwMCw3ICsxMDAsNyBAQCBwcm90
ZWN0ZWQ6CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOwogICAgIHVzaW5nIEJhc2U6OmZp
bmlzaENyZWF0aW9uOwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBT
bG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKIHByaXZhdGU6CiAg
ICAgZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAkod29ya2luZyBjb3B5KQpAQCAtMSw3ICsxLDcg
QEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDEgSGFycmkgUG9ydGVuIChwb3J0ZW5A
a2RlLm9yZykKICAqICBDb3B5cmlnaHQgKEMpIDIwMDEgUGV0ZXIgS2VsbHkgKHBta0Bwb3N0LmNv
bSkKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNs
dWRlICJKU0xvY2suaCIKICNpbmNsdWRlICJKU1R5cGVJbmZvLmgiCiAjaW5jbHVkZSAiU2xvdFZp
c2l0b3IuaCIKKyNpbmNsdWRlICJTbG90VmlzaXRvck1hY3Jvcy5oIgogI2luY2x1ZGUgIlN1YnNw
YWNlQWNjZXNzLmgiCiAjaW5jbHVkZSAiVHlwZWRBcnJheVR5cGUuaCIKICNpbmNsdWRlICJXcml0
ZUJhcnJpZXIuaCIKQEAgLTE2Nyw4ICsxNjgsOCBAQCBwdWJsaWM6CiAgICAgc2l6ZV90IGVzdGlt
YXRlZFNpemVJbkJ5dGVzKFZNJikgY29uc3Q7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGlj
IHNpemVfdCBlc3RpbWF0ZWRTaXplKEpTQ2VsbCosIFZNJik7CiAKLSAgICBzdGF0aWMgdm9pZCB2
aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7Ci0gICAgc3RhdGljIHZvaWQgdmlz
aXRPdXRwdXRDb25zdHJhaW50cyhKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVf
VklTSVRfQ0hJTERSRU5fV0lUSF9NT0RJRklFUihpbmxpbmUpOworICAgIHN0YXRpYyB2b2lkIHZp
c2l0T3V0cHV0Q29uc3RyYWludHMoSlNDZWxsKiwgQWJzdHJhY3RTbG90VmlzaXRvciYpOwogCiAg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgYW5hbHl6ZUhlYXAoSlNDZWxsKiwgSGVh
cEFuYWx5emVyJik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2Vs
bElubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0NlbGxJbmxpbmVzLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQ2VsbElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI1LDYgKzI1LDcg
QEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRlICJBYnN0cmFjdFNsb3RWaXNpdG9ySW5saW5l
cy5oIgogI2luY2x1ZGUgIkFsbG9jYXRvckZvck1vZGUuaCIKICNpbmNsdWRlICJBbGxvY2F0b3JJ
bmxpbmVzLmgiCiAjaW5jbHVkZSAiQ29tcGxldGVTdWJzcGFjZUlubGluZXMuaCIKQEAgLTE0MSwx
MiArMTQyLDE1IEBAIEFMV0FZU19JTkxJTkUgU3RydWN0dXJlKiBKU0NlbGw6OnN0cnVjdHUKICAg
ICByZXR1cm4gdm0uZ2V0U3RydWN0dXJlKG1fc3RydWN0dXJlSUQpOwogfQogCi1pbmxpbmUgdm9p
ZCBKU0NlbGw6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRv
cikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTQ2VsbDo6dmlzaXRDaGlsZHJl
bkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHZpc2l0b3IuYXBw
ZW5kVW5iYXJyaWVyZWQoY2VsbC0+c3RydWN0dXJlKHZpc2l0b3Iudm0oKSkpOwogfQogCi1pbmxp
bmUgdm9pZCBKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHMoSlNDZWxsKiwgU2xvdFZpc2l0
b3ImKQorREVGSU5FX1ZJU0lUX0NISUxEUkVOX1dJVEhfTU9ESUZJRVIoaW5saW5lLCBKU0NlbGwp
OworCitpbmxpbmUgdm9pZCBKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHMoSlNDZWxsKiwg
QWJzdHJhY3RTbG90VmlzaXRvciYpCiB7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQ3VzdG9tR2V0dGVyU2V0dGVyRnVuY3Rpb24uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ3VzdG9tR2V0dGVyU2V0dGVyRnVuY3Rp
b24uY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0N1c3RvbUdldHRlclNldHRlckZ1bmN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUsIDIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC04
NSw3ICs4NSw4IEBAIEpTQ3VzdG9tR2V0dGVyU2V0dGVyRnVuY3Rpb24qIEpTQ3VzdG9tR2UKICAg
ICByZXR1cm4gZnVuY3Rpb247CiB9CiAKLXZvaWQgSlNDdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlv
bjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVt
cGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNDdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlv
bjo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewog
ICAgIEpTQ3VzdG9tR2V0dGVyU2V0dGVyRnVuY3Rpb24qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlND
dXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbio+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1Rf
SU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTk0LDYgKzk1LDggQEAgdm9pZCBKU0N1
c3RvbUdldHRlclNldHRlckZ1bmN0aW9uOjp2aXNpdAogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNP
YmplY3QtPm1fZ2V0dGVyU2V0dGVyKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTQ3Vz
dG9tR2V0dGVyU2V0dGVyRnVuY3Rpb24pOworCiB2b2lkIEpTQ3VzdG9tR2V0dGVyU2V0dGVyRnVu
Y3Rpb246OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgTmF0aXZlRXhlY3V0YWJsZSogZXhlY3V0YWJs
ZSwgQ3VzdG9tR2V0dGVyU2V0dGVyKiBnZXR0ZXJTZXR0ZXIsIGNvbnN0IFN0cmluZyYgbmFtZSkK
IHsKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSwgZXhlY3V0YWJsZSwgaXNTZXR0ZXIoKSwg
bmFtZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0N1c3RvbUdldHRl
clNldHRlckZ1bmN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNDdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbi5oCShyZXZpc2lvbiAyNzI4MzApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0N1c3RvbUdldHRlclNldHRlckZ1bmN0
aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDE1LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE1LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02Myw3ICs2Myw3IEBAIHB1YmxpYzoKIHByaXZhdGU6
CiAgICAgSlNDdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbihWTSYsIE5hdGl2ZUV4ZWN1dGFibGUq
LCBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSosIFR5cGUsIGNvbnN0IFByb3BlcnR5TmFtZSYp
OwogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBOYXRpdmVFeGVjdXRhYmxlKiwgQ3VzdG9t
R2V0dGVyU2V0dGVyKiwgY29uc3QgU3RyaW5nJik7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGls
ZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47
CiAKICAgICBXcml0ZUJhcnJpZXI8Q3VzdG9tR2V0dGVyU2V0dGVyPiBtX2dldHRlclNldHRlcjsK
ICAgICBUeXBlIG1fdHlwZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
RmluYWxpemF0aW9uUmVnaXN0cnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTRmluYWxpemF0aW9uUmVnaXN0cnkuY3BwCShyZXZpc2lvbiAyNzI4MzAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ZpbmFsaXphdGlvblJlZ2lzdHJ5
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMjAgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAyMC0yMDIxIEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIK
ICNpbmNsdWRlICJKU0ZpbmFsaXphdGlvblJlZ2lzdHJ5LmgiCiAKKyNpbmNsdWRlICJBYnN0cmFj
dFNsb3RWaXNpdG9yLmgiCiAjaW5jbHVkZSAiRGVmZXJyZWRXb3JrVGltZXIuaCIKICNpbmNsdWRl
ICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbElubGlu
ZXMuaCIKQEAgLTYwLDcgKzYxLDggQEAgdm9pZCBKU0ZpbmFsaXphdGlvblJlZ2lzdHJ5OjpmaW5p
c2hDcmVhdAogICAgIGdsb2JhbE9iamVjdC0+Z2xvYmFsT2JqZWN0TWV0aG9kVGFibGUoKS0+Y3Vy
cmVudFNjcmlwdEV4ZWN1dGlvbk93bmVyKGdsb2JhbE9iamVjdCk7CiB9CiAKLXZvaWQgSlNGaW5h
bGl6YXRpb25SZWdpc3RyeTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9y
JiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNGaW5hbGl6YXRp
b25SZWdpc3RyeTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNp
dG9yKQogewogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4oY2VsbCwgdmlzaXRvcik7CiAKQEAgLTgw
LDEzICs4MiwxNSBAQCB2b2lkIEpTRmluYWxpemF0aW9uUmVnaXN0cnk6OnZpc2l0Q2hpbGRyCiAg
ICAgZm9yIChhdXRvJiBob2xkaW5ncyA6IHRoaXNPYmplY3QtPm1fbm9VbnJlZ2lzdHJhdGlvbkRl
YWQpCiAgICAgICAgIHZpc2l0b3IuYXBwZW5kKGhvbGRpbmdzKTsKIAotICAgIHNpemVfdCB0b3Rh
bEJ1ZmZlclNpemVzSW5CeXRlcyA9IHRoaXNPYmplY3QtPm1fZGVhZFJlZ2lzdHJhdGlvbnMuY2Fw
YWNpdHkoKSAqIHNpemVvZihkZWNsdHlwZSh0aGlzT2JqZWN0LT5tX2RlYWRSZWdpc3RyYXRpb25z
KTo6S2V5VmFsdWVQYWlyVHlwZSk7Ci0gICAgdG90YWxCdWZmZXJTaXplc0luQnl0ZXMgKz0gdGhp
c09iamVjdC0+bV9saXZlUmVnaXN0cmF0aW9ucy5jYXBhY2l0eSgpICogc2l6ZW9mKGRlY2x0eXBl
KHRoaXNPYmplY3QtPm1fZGVhZFJlZ2lzdHJhdGlvbnMpOjpLZXlWYWx1ZVBhaXJUeXBlKTsKKyAg
ICBzaXplX3QgdG90YWxCdWZmZXJTaXplc0luQnl0ZXMgPSB0aGlzT2JqZWN0LT5tX2RlYWRSZWdp
c3RyYXRpb25zLmNhcGFjaXR5KCkgKiBzaXplb2YodHlwZW5hbWUgZGVjbHR5cGUodGhpc09iamVj
dC0+bV9kZWFkUmVnaXN0cmF0aW9ucyk6OktleVZhbHVlUGFpclR5cGUpOworICAgIHRvdGFsQnVm
ZmVyU2l6ZXNJbkJ5dGVzICs9IHRoaXNPYmplY3QtPm1fbGl2ZVJlZ2lzdHJhdGlvbnMuY2FwYWNp
dHkoKSAqIHNpemVvZih0eXBlbmFtZSBkZWNsdHlwZSh0aGlzT2JqZWN0LT5tX2RlYWRSZWdpc3Ry
YXRpb25zKTo6S2V5VmFsdWVQYWlyVHlwZSk7CiAgICAgdG90YWxCdWZmZXJTaXplc0luQnl0ZXMg
Kz0gdGhpc09iamVjdC0+bV9ub1VucmVnaXN0cmF0aW9uTGl2ZS5jYXBhY2l0eSgpICogc2l6ZW9m
KGRlY2x0eXBlKHRoaXNPYmplY3QtPm1fbm9VbnJlZ2lzdHJhdGlvbkxpdmUudGFrZUxhc3QoKSkp
OwogICAgIHRvdGFsQnVmZmVyU2l6ZXNJbkJ5dGVzICs9IHRoaXNPYmplY3QtPm1fbm9VbnJlZ2lz
dHJhdGlvbkRlYWQuY2FwYWNpdHkoKSAqIHNpemVvZihkZWNsdHlwZSh0aGlzT2JqZWN0LT5tX25v
VW5yZWdpc3RyYXRpb25MaXZlLnRha2VMYXN0KCkpKTsKICAgICB2aXNpdG9yLnZtKCkuaGVhcC5y
ZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQodG90YWxCdWZmZXJTaXplc0luQnl0ZXMpOwogfQogCitE
RUZJTkVfVklTSVRfQ0hJTERSRU4oSlNGaW5hbGl6YXRpb25SZWdpc3RyeSk7CisKIHZvaWQgSlNG
aW5hbGl6YXRpb25SZWdpc3RyeTo6ZGVzdHJveShKU0NlbGwqIHRhYmxlKQogewogICAgIHN0YXRp
Y19jYXN0PEpTRmluYWxpemF0aW9uUmVnaXN0cnkqPih0YWJsZSktPn5KU0ZpbmFsaXphdGlvblJl
Z2lzdHJ5KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ZpbmFsaXph
dGlvblJlZ2lzdHJ5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNGaW5hbGl6YXRpb25SZWdpc3RyeS5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ZpbmFsaXphdGlvblJlZ2lzdHJ5LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlLCBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAtMjAyMSBBcHBs
ZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC03MCw3ICs3MCw3IEBAIHB1YmxpYzoKICAgICBERUNMQVJFX0VYUE9SVF9JTkZPOwog
CiAgICAgdm9pZCBmaW5hbGl6ZVVuY29uZGl0aW9uYWxseShWTSYpOwotICAgIHN0YXRpYyB2b2lk
IHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lU
X0NISUxEUkVOOwogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CiAgICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOwogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmNwcAkocmV2aXNpb24gMjcyODMw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNyArMSw3IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAy
IEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCiAgKiAgQ29weXJpZ2h0IChDKSAyMDAxIFBl
dGVyIEtlbGx5IChwbWtAcG9zdC5jb20pCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMjAgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwMy0yMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqICBDb3B5cmlnaHQgKEMpIDIwMDcg
Q2FtZXJvbiBad2FyaWNoIChjd3p3YXJpY2hAdXdhdGVybG9vLmNhKQogICogIENvcHlyaWdodCAo
QykgMjAwNyBNYWtzIE9ybG92aWNoCiAgKiAgQ29weXJpZ2h0IChDKSAyMDE1IENhbm9uIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KQEAgLTI1Miw3ICsyNTIsOCBAQCBjb25zdCBTb3VyY2VDb2Rl
KiBKU0Z1bmN0aW9uOjpzb3VyY2VDb2RlCiAgICAgcmV0dXJuICZqc0V4ZWN1dGFibGUoKS0+c291
cmNlKCk7CiB9CiAgICAgCi12b2lkIEpTRnVuY3Rpb246OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBj
ZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2
b2lkIEpTRnVuY3Rpb246OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYg
dmlzaXRvcikKIHsKICAgICBKU0Z1bmN0aW9uKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTRnVuY3Rp
b24qPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGlu
Zm8oKSk7CkBAIC0yNjEsNiArMjYyLDggQEAgdm9pZCBKU0Z1bmN0aW9uOjp2aXNpdENoaWxkcmVu
KEpTQ2VsbCogYwogICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQoYml0d2lzZV9jYXN0PEpT
Q2VsbCo+KGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KHRoaXNPYmplY3QtPm1fZXhlY3V0YWJsZU9y
UmFyZURhdGEpICYgfnJhcmVEYXRhVGFnKSk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihK
U0Z1bmN0aW9uKTsKKwogQ2FsbERhdGEgSlNGdW5jdGlvbjo6Z2V0Q2FsbERhdGEoSlNDZWxsKiBj
ZWxsKQogewogICAgIC8vIEtlZXAgdGhpcyBmdW5jdGlvbiBPSyBmb3IgaW52b2NhdGlvbiBmcm9t
IGNvbmN1cnJlbnQgY29tcGlsZXJzLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNGdW5jdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTRnVuY3Rpb24uaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAog
LyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUu
b3JnKQotICogIENvcHlyaWdodCAoQykgMjAwMy0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA3IENhbWVyb24gWndhcmljaCAoY3d6
d2FyaWNoQHV3YXRlcmxvby5jYSkKICAqICBDb3B5cmlnaHQgKEMpIDIwMDcgTWFrcyBPcmxvdmlj
aAogICoKQEAgLTE4MCw3ICsxODAsNyBAQCBwcm90ZWN0ZWQ6CiAKICAgICBzdGF0aWMgYm9vbCBk
ZWxldGVQcm9wZXJ0eShKU0NlbGwqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSwgRGVs
ZXRlUHJvcGVydHlTbG90Jik7CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2Vs
bCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogcHJpdmF0
ZToKICAgICBzdGF0aWMgSlNGdW5jdGlvbiogY3JlYXRlSW1wbChWTSYgdm0sIEZ1bmN0aW9uRXhl
Y3V0YWJsZSogZXhlY3V0YWJsZSwgSlNTY29wZSogc2NvcGUsIFN0cnVjdHVyZSogc3RydWN0dXJl
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmF0b3IuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJhdG9yLmNw
cAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNH
ZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTktMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU5LDExICs1OSwxNCBAQCB2b2lkIEpTR2VuZXJh
dG9yOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCiAgICAgICAgIGludGVybmFsRmllbGQoaW5kZXgp
LnNldCh2bSwgdGhpcywgdmFsdWVzW2luZGV4XSk7CiB9CiAKLXZvaWQgSlNHZW5lcmF0b3I6OnZp
c2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRl
PHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTR2VuZXJhdG9yOjp2aXNpdENoaWxkcmVuSW1wbChK
U0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0byogdGhpc09iamVjdCA9
IGpzQ2FzdDxKU0dlbmVyYXRvcio+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJ
VFModGhpc09iamVjdCwgaW5mbygpKTsKICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmpl
Y3QsIHZpc2l0b3IpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNHZW5lcmF0b3IpOwor
CiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTR2VuZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNHZW5lcmF0b3IuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNHZW5lcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE5LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC05NCw3ICs5NCw3IEBAIHB1
YmxpYzoKIAogICAgIERFQ0xBUkVfRVhQT1JUX0lORk87CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNp
dENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElM
RFJFTjsKIAogcHJpdmF0ZToKICAgICBKU0dlbmVyYXRvcihWTSYsIFN0cnVjdHVyZSopOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXcu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNU
eXBlZEFycmF5Vmlldy5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIwIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MzEzLDcgKzMxMyw3IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlO
YW1lcyhKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lQXJyYXkmLCBEb250
RW51bVByb3BlcnRpZXNNb2RlKTsKIAogICAgIHN0YXRpYyBzaXplX3QgZXN0aW1hdGVkU2l6ZShK
U0NlbGwqLCBWTSYpOwotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xv
dFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgLy8gUmV0dXJu
cyB0cnVlIGlmIHN1Y2Nlc3NmdWwsIGFuZCBmYWxzZSBvbiBlcnJvcjsgaXQgd2lsbCB0aHJvdyBv
biBlcnJvci4KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPdGhlckFkYXB0b3I+CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNU
eXBlZEFycmF5Vmlld0lubGluZXMuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTkg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC01MTcsNyArNTE3LDggQEAgc2l6ZV90IEpTR2VuZXJpY1R5cGVkQXJyYXlW
aWV3PEFkYXB0b3I+OgogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgotdm9pZCBKU0dl
bmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGws
IFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQg
SlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2Vs
bCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU0dlbmVyaWNUeXBlZEFycmF5Vmll
dyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0dlbmVyaWNUeXBlZEFycmF5Vmlldyo+KGNlbGwpOwog
ICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTU1
NSw0ICs1NTYsNiBAQCB2b2lkIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+Ojp2CiAg
ICAgfQogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU5fV0lUSF9NT0RJRklFUih0ZW1wbGF0ZTx0
eXBlbmFtZSBBZGFwdG9yPiwgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj4pOworCiB9
IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
R2xvYmFsT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0dsb2JhbE9iamVjdC5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAyMCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDggQ2FtZXJvbiBad2Fy
aWNoIChjd3p3YXJpY2hAdXdhdGVybG9vLmNhKQogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMTg5Miw3
ICsxODkyLDggQEAgdm9pZCBKU0dsb2JhbE9iamVjdDo6cmVzZXRQcm90b3R5cGUoVk0mIAogICAg
IHNldEdsb2JhbFRoaXModm0sIEpTUHJveHk6OmNyZWF0ZSh2bSwgSlNQcm94eTo6Y3JlYXRlU3Ry
dWN0dXJlKHZtLCB0aGlzLCBwcm90b3R5cGUsIFB1cmVGb3J3YXJkaW5nUHJveHlUeXBlKSwgdGhp
cykpOwogfQogCi12b2lkIEpTR2xvYmFsT2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2Vs
bCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9p
ZCBKU0dsb2JhbE9iamVjdDo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9y
JiB2aXNpdG9yKQogeyAKICAgICBKU0dsb2JhbE9iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxK
U0dsb2JhbE9iamVjdCo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhp
c09iamVjdCwgaW5mbygpKTsKQEAgLTIwNjAsNiArMjA2MSw4IEBAIHZvaWQgSlNHbG9iYWxPYmpl
Y3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWwKICAgICB0aGlzT2JqZWN0LT5tX3JlZ0V4cEdsb2JhbERh
dGEudmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTl9X
SVRIX01PRElGSUVSKEpTX0VYUE9SVF9QUklWQVRFLCBKU0dsb2JhbE9iamVjdCk7CisKIENhbGxG
cmFtZSogSlNHbG9iYWxPYmplY3Q6OmRlcHJlY2F0ZWRDYWxsRnJhbWVGb3JEZWJ1Z2dlcigpCiB7
CiAgICAgcmV0dXJuIENhbGxGcmFtZTo6Y3JlYXRlKG1fZGVwcmVjYXRlZENhbGxGcmFtZUZvckRl
YnVnZ2VyKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2Jq
ZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9i
YWxPYmplY3QuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNHbG9iYWxPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8q
CiAgKiAgQ29weXJpZ2h0IChDKSAyMDA3IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+Ci0g
KiAgQ29weXJpZ2h0IChDKSAyMDA3LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogIENvcHlyaWdodCAoQykgMjAwNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC02MDksNyArNjA5LDcgQEAgcHVibGljOgog
ICAgIEpTX0VYUE9SVF9QUklWQVRFIH5KU0dsb2JhbE9iamVjdCgpOwogICAgIEpTX0VYUE9SVF9Q
UklWQVRFIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CiAKLSAgICBKU19FWFBPUlRfUFJJ
VkFURSBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7Cisg
ICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTl9XSVRIX01PRElGSUVSKEpTX0VYUE9SVF9QUklWQVRF
KTsKIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xv
dChKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3Qm
KTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgYm9vbCBwdXQoSlNDZWxsKiwgSlNHbG9i
YWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbW11dGFibGVCdXR0ZXJmbHkuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTSW1tdXRhYmxl
QnV0dGVyZmx5LmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNJbW11dGFibGVCdXR0ZXJmbHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMyLDcgKzMy
LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAKIGNvbnN0IENsYXNzSW5mbyBKU0ltbXV0YWJsZUJ1dHRl
cmZseTo6c19pbmZvID0geyAiSW1tdXRhYmxlIEJ1dHRlcmZseSIsIG51bGxwdHIsIG51bGxwdHIs
IG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNJbW11dGFibGVCdXR0ZXJmbHkpIH07CiAK
LXZvaWQgSlNJbW11dGFibGVCdXR0ZXJmbHk6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBT
bG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpT
SW1tdXRhYmxlQnV0dGVyZmx5Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0
b3ImIHZpc2l0b3IpCiB7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjZWxsLCBpbmZv
KCkpOwogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4oY2VsbCwgdmlzaXRvcik7CkBAIC00NSw2ICs0
Niw4IEBAIHZvaWQgSlNJbW11dGFibGVCdXR0ZXJmbHk6OnZpc2l0Q2hpbGRyZW4KICAgICB2aXNp
dG9yLmFwcGVuZFZhbHVlc0hpZGRlbihidXR0ZXJmbHktPmNvbnRpZ3VvdXMoKS5kYXRhKCksIGJ1
dHRlcmZseS0+cHVibGljTGVuZ3RoKCkpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNJ
bW11dGFibGVCdXR0ZXJmbHkpOworCiB2b2lkIEpTSW1tdXRhYmxlQnV0dGVyZmx5Ojpjb3B5VG9B
cmd1bWVudHMoSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlKiBmaXJzdEVsZW1lbnREZXN0LCB1bnNp
Z25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKIHsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbGVuZ3RoOyArK2kpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTSW1tdXRhYmxlQnV0dGVyZmx5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNJbW11dGFibGVCdXR0ZXJmbHkuaAkocmV2aXNpb24gMjcyODMwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbW11dGFibGVCdXR0ZXJmbHkuaAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAx
OSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTgt
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTE0NSw3ICsxNDUsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBq
c0RvdWJsZU51bWJlcih2YWx1ZSk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGls
ZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47
CiAKICAgICB2b2lkIGNvcHlUb0FyZ3VtZW50cyhKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUqIGZp
cnN0RWxlbWVudERlc3QsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1w
bC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTSW50ZXJu
YWxGaWVsZE9iamVjdEltcGwuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTY2LDcgKzY2LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZJbnRl
cm5hbEZpZWxkKHVuc2lnbmVkIGluZGV4KSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNJbnRl
cm5hbEZpZWxkT2JqZWN0SW1wbCwgbV9pbnRlcm5hbEZpZWxkcykgKyBpbmRleCAqIHNpemVvZihX
cml0ZUJhcnJpZXI8VW5rbm93bj4pOyB9CiAKIHByb3RlY3RlZDoKLSAgICBzdGF0aWMgdm9pZCB2
aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9D
SElMRFJFTjsKIAogICAgIEpTSW50ZXJuYWxGaWVsZE9iamVjdEltcGwoVk0mIHZtLCBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSkKICAgICAgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ludGVybmFsRmllbGRPYmplY3RJbXBsSW5saW5l
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTSW50ZXJu
YWxGaWVsZE9iamVjdEltcGxJbmxpbmVzLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTSW50ZXJuYWxGaWVsZE9iamVjdEltcGxJbmxpbmVzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE5
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOS0y
MDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMzAsNyArMzAsOCBAQAogbmFtZXNwYWNlIEpTQyB7CiAKIHRlbXBsYXRl
PHVuc2lnbmVkIHBhc3NlZE51bWJlck9mSW50ZXJuYWxGaWVsZHM+Ci12b2lkIEpTSW50ZXJuYWxG
aWVsZE9iamVjdEltcGw8cGFzc2VkTnVtYmVyT2ZJbnRlcm5hbEZpZWxkcz46OnZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1l
IFZpc2l0b3I+Cit2b2lkIEpTSW50ZXJuYWxGaWVsZE9iamVjdEltcGw8cGFzc2VkTnVtYmVyT2ZJ
bnRlcm5hbEZpZWxkcz46OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYg
dmlzaXRvcikKIHsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTSW50ZXJuYWxGaWVs
ZE9iamVjdEltcGwqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNP
YmplY3QsIGluZm8oKSk7CkBAIC0zOCw0ICszOSw2IEBAIHZvaWQgSlNJbnRlcm5hbEZpZWxkT2Jq
ZWN0SW1wbDxwYXNzZWROdW0KICAgICB2aXNpdG9yLmFwcGVuZFZhbHVlcyh0aGlzT2JqZWN0LT5t
X2ludGVybmFsRmllbGRzLCBudW1iZXJPZkludGVybmFsRmllbGRzKTsKIH0KIAorREVGSU5FX1ZJ
U0lUX0NISUxEUkVOX1dJVEhfTU9ESUZJRVIodGVtcGxhdGU8dW5zaWduZWQgcGFzc2VkTnVtYmVy
T2ZJbnRlcm5hbEZpZWxkcz4sIEpTSW50ZXJuYWxGaWVsZE9iamVjdEltcGw8cGFzc2VkTnVtYmVy
T2ZJbnRlcm5hbEZpZWxkcz4pOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTGV4aWNhbEVudmlyb25tZW50LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xleGljYWxFbnZpcm9ubWVudC5j
cHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
TGV4aWNhbEVudmlyb25tZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM2LDcgKzM2LDggQEAg
bmFtZXNwYWNlIEpTQyB7CiAKIGNvbnN0IENsYXNzSW5mbyBKU0xleGljYWxFbnZpcm9ubWVudDo6
c19pbmZvID0geyAiSlNMZXhpY2FsRW52aXJvbm1lbnQiLCAmQmFzZTo6c19pbmZvLCBudWxscHRy
LCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTTGV4aWNhbEVudmlyb25tZW50KSB9Owog
Ci12b2lkIEpTTGV4aWNhbEVudmlyb25tZW50Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwg
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBK
U0xleGljYWxFbnZpcm9ubWVudDo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNp
dG9yJiB2aXNpdG9yKQogewogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNMZXhpY2Fs
RW52aXJvbm1lbnQqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNP
YmplY3QsIGluZm8oKSk7CkBAIC00NCw2ICs0NSw4IEBAIHZvaWQgSlNMZXhpY2FsRW52aXJvbm1l
bnQ6OnZpc2l0Q2hpbGRyZW4KICAgICB2aXNpdG9yLmFwcGVuZFZhbHVlc0hpZGRlbih0aGlzT2Jq
ZWN0LT52YXJpYWJsZXMoKSwgdGhpc09iamVjdC0+c3ltYm9sVGFibGUoKS0+c2NvcGVTaXplKCkp
OwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNMZXhpY2FsRW52aXJvbm1lbnQpOworCiB2
b2lkIEpTTGV4aWNhbEVudmlyb25tZW50OjphbmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhlYXBB
bmFseXplciYgYW5hbHl6ZXIpCiB7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0xl
eGljYWxFbnZpcm9ubWVudCo+KGNlbGwpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNMZXhpY2FsRW52aXJvbm1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0xleGljYWxFbnZpcm9ubWVudC5oCShyZXZpc2lvbiAyNzI4MzAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xleGljYWxFbnZpcm9ubWVudC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAw
OC0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAwOC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMTM0LDcgKzEzNCw3IEBAIHByb3RlY3RlZDoKICAgICAgICAg
fQogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZp
c2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogICAgIHN0YXRpYyB2b2lkIGFu
YWx5emVIZWFwKEpTQ2VsbCosIEhlYXBBbmFseXplciYpOwogfTsKIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNYXBJdGVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNYXBJdGVyYXRvci5jcHAJKHJldmlzaW9uIDI3
MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTWFwSXRlcmF0b3IuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
My0yMDE3IEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAyMSBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC01NywxMyArNTcsMTYgQEAgdm9pZCBKU01hcEl0ZXJhdG9y
OjpmaW5pc2hDcmVhdGlvbihWTSYgdgogICAgICAgICBCYXNlOjppbnRlcm5hbEZpZWxkKGluZGV4
KS5zZXQodm0sIHRoaXMsIHZhbHVlc1tpbmRleF0pOwogfQogCi12b2lkIEpTTWFwSXRlcmF0b3I6
OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBs
YXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTTWFwSXRlcmF0b3I6OnZpc2l0Q2hpbGRyZW5J
bXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBhdXRvKiB0aGlzT2Jq
ZWN0ID0ganNDYXN0PEpTTWFwSXRlcmF0b3IqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNU
X0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0
aGlzT2JqZWN0LCB2aXNpdG9yKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTTWFwSXRl
cmF0b3IpOworCiBKU1ZhbHVlIEpTTWFwSXRlcmF0b3I6OmNyZWF0ZVBhaXIoSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBrZXksIEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgTWFy
a2VkQXJndW1lbnRCdWZmZXIgYXJnczsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTTWFwSXRlcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU01hcEl0ZXJhdG9yLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTTWFwSXRlcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTYgQXBwbGUsIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIxIEFwcGxlLCBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTE0Miw3ICsxNDIsNyBAQCBwcml2YXRlOgogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZmlu
aXNoQ3JlYXRpb24oVk0mLCBKU01hcCosIEl0ZXJhdGlvbktpbmQpOwogICAgIHZvaWQgZmluaXNo
Q3JlYXRpb24oVk0mKTsKICAgICBKU1ZhbHVlIGNyZWF0ZVBhaXIoSlNHbG9iYWxPYmplY3QqLCBK
U1ZhbHVlLCBKU1ZhbHVlKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCos
IFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIH07CiBTVEFUSUNf
QVNTRVJUX0lTX1RSSVZJQUxMWV9ERVNUUlVDVElCTEUoSlNNYXBJdGVyYXRvcik7CiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlRW52aXJvbm1lbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlRW52aXJv
bm1lbnQuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU01vZHVsZUVudmlyb25tZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY1LDcgKzY1
LDggQEAgdm9pZCBKU01vZHVsZUVudmlyb25tZW50OjpmaW5pc2hDcmVhdGlvbgogICAgIHRoaXMt
Pm1vZHVsZVJlY29yZFNsb3QoKS5zZXQodm0sIHRoaXMsIG1vZHVsZVJlY29yZCk7CiB9CiAKLXZv
aWQgSlNNb2R1bGVFbnZpcm9ubWVudDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNNb2R1
bGVFbnZpcm9ubWVudDo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2
aXNpdG9yKQogewogICAgIEpTTW9kdWxlRW52aXJvbm1lbnQqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8
SlNNb2R1bGVFbnZpcm9ubWVudCo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJ
VFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTc0LDYgKzc1LDggQEAgdm9pZCBKU01vZHVsZUVu
dmlyb25tZW50Ojp2aXNpdENoaWxkcmVuKAogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3Qt
Pm1vZHVsZVJlY29yZFNsb3QoKSk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU01vZHVs
ZUVudmlyb25tZW50KTsKKwogYm9vbCBKU01vZHVsZUVudmlyb25tZW50OjpnZXRPd25Qcm9wZXJ0
eVNsb3QoSlNPYmplY3QqIGNlbGwsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFByb3Bl
cnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBWTSYgdm0g
PSBnbG9iYWxPYmplY3QtPnZtKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU01vZHVsZUVudmlyb25tZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNNb2R1bGVFbnZpcm9ubWVudC5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZUVudmlyb25tZW50LmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjAg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIw
MjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC04OSw3ICs4OSw3IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiAqYml0
d2lzZV9jYXN0PFdyaXRlQmFycmllckJhc2U8QWJzdHJhY3RNb2R1bGVSZWNvcmQ+Kj4oYml0d2lz
ZV9jYXN0PGNoYXIqPih0aGlzKSArIG9mZnNldE9mTW9kdWxlUmVjb3JkKHN5bWJvbFRhYmxlKCkp
KTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RW
aXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIH07CiAKIGlubGluZSBKU01v
ZHVsZUVudmlyb25tZW50OjpKU01vZHVsZUVudmlyb25tZW50KFZNJiB2bSwgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUsIEpTU2NvcGUqIGN1cnJlbnRTY29wZSwgU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxl
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVOYW1lc3BhY2VP
YmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
TW9kdWxlTmFtZXNwYWNlT2JqZWN0LmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIwIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtODUsNyArODUsOCBAQCB2b2lkIEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0Ojpk
ZXN0cm95KEpTCiAgICAgdGhpc09iamVjdC0+SlNNb2R1bGVOYW1lc3BhY2VPYmplY3Q6On5KU01v
ZHVsZU5hbWVzcGFjZU9iamVjdCgpOwogfQogCi12b2lkIEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0
Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1w
bGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU01vZHVsZU5hbWVzcGFjZU9iamVjdDo6dmlz
aXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpT
TW9kdWxlTmFtZXNwYWNlT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTTW9kdWxlTmFtZXNw
YWNlT2JqZWN0Kj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2Jq
ZWN0LCBpbmZvKCkpOwpAQCAtOTgsNiArOTksOCBAQCB2b2lkIEpTTW9kdWxlTmFtZXNwYWNlT2Jq
ZWN0Ojp2aXNpdENoaWxkCiAgICAgfQogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNNb2R1
bGVOYW1lc3BhY2VPYmplY3QpOworCiBzdGF0aWMgSlNWYWx1ZSBnZXRWYWx1ZShKU01vZHVsZUVu
dmlyb25tZW50KiBlbnZpcm9ubWVudCwgUHJvcGVydHlOYW1lIGxvY2FsTmFtZSwgU2NvcGVPZmZz
ZXQmIHNjb3BlT2Zmc2V0KQogewogICAgIFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSA9IGVudmly
b25tZW50LT5zeW1ib2xUYWJsZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU01vZHVsZU5hbWVzcGFjZU9iamVjdC5oCShyZXZpc2lvbiAyNzI4
MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZU5hbWVzcGFjZU9i
amVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxNS0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNzIsNyArNzIsNyBAQCBwdWJsaWM6CiBwcml2YXRl
OgogICAgIEpTX0VYUE9SVF9QUklWQVRFIEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0KFZNJiwgU3Ry
dWN0dXJlKik7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0ds
b2JhbE9iamVjdCosIEFic3RyYWN0TW9kdWxlUmVjb3JkKiwgVmVjdG9yPHN0ZDo6cGFpcjxJZGVu
dGlmaWVyLCBBYnN0cmFjdE1vZHVsZVJlY29yZDo6UmVzb2x1dGlvbj4+JiYpOwotICAgIHN0YXRp
YyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJF
X1ZJU0lUX0NISUxEUkVOOwogICAgIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90Q29tbW9uKEpTR2xv
YmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKIAogICAgIHN0cnVjdCBF
eHBvcnRFbnRyeSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVs
ZVJlY29yZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNNb2R1bGVSZWNvcmQuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU01vZHVsZVJlY29yZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03MCw3
ICs3MCw4IEBAIHZvaWQgSlNNb2R1bGVSZWNvcmQ6OmZpbmlzaENyZWF0aW9uKEpTR2wKICAgICBB
U1NFUlQoaW5oZXJpdHModm0sIGluZm8oKSkpOwogfQogCi12b2lkIEpTTW9kdWxlUmVjb3JkOjp2
aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0
ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU01vZHVsZVJlY29yZDo6dmlzaXRDaGlsZHJlbklt
cGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTTW9kdWxlUmVjb3Jk
KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTTW9kdWxlUmVjb3JkKj4oY2VsbCk7CiAgICAgQVNTRVJU
X0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNzgsNiArNzksOCBA
QCB2b2lkIEpTTW9kdWxlUmVjb3JkOjp2aXNpdENoaWxkcmVuKEpTQ2VsCiAgICAgdmlzaXRvci5h
cHBlbmQodGhpc09iamVjdC0+bV9tb2R1bGVQcm9ncmFtRXhlY3V0YWJsZSk7CiB9CiAKK0RFRklO
RV9WSVNJVF9DSElMRFJFTihKU01vZHVsZVJlY29yZCk7CisKIHZvaWQgSlNNb2R1bGVSZWNvcmQ6
OmxpbmsoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBzY3JpcHRGZXRjaGVy
KQogewogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlUmVjb3JkLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVSZWNvcmQuaAkocmV2aXNpb24gMjcyODMw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVSZWNvcmQuaAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUt
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTY2LDcgKzY2LDcgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgZmluaXNo
Q3JlYXRpb24oSlNHbG9iYWxPYmplY3QqLCBWTSYpOwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRD
aGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERS
RU47CiAKICAgICB2b2lkIGluc3RhbnRpYXRlRGVjbGFyYXRpb25zKEpTR2xvYmFsT2JqZWN0Kiwg
TW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUqLCBKU1ZhbHVlIHNjcmlwdEZldGNoZXIpOwogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU05hdGl2ZVN0ZEZ1bmN0aW9uLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU05hdGl2ZVN0ZEZ1
bmN0aW9uLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNOYXRpdmVTdGRGdW5jdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00MSwxMyAr
NDEsMTYgQEAgSlNOYXRpdmVTdGRGdW5jdGlvbjo6SlNOYXRpdmVTdGRGdW5jdGlvbgogewogfQog
Ci12b2lkIEpTTmF0aXZlU3RkRnVuY3Rpb246OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBT
bG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpT
TmF0aXZlU3RkRnVuY3Rpb246OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRv
ciYgdmlzaXRvcikKIHsKICAgICBKU05hdGl2ZVN0ZEZ1bmN0aW9uKiB0aGlzT2JqZWN0ID0ganND
YXN0PEpTTmF0aXZlU3RkRnVuY3Rpb24qPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lO
SEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlz
T2JqZWN0LCB2aXNpdG9yKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTTmF0aXZlU3Rk
RnVuY3Rpb24pOworCiB2b2lkIEpTTmF0aXZlU3RkRnVuY3Rpb246OmZpbmlzaENyZWF0aW9uKFZN
JiB2bSwgTmF0aXZlRXhlY3V0YWJsZSogZXhlY3V0YWJsZSwgdW5zaWduZWQgbGVuZ3RoLCBjb25z
dCBTdHJpbmcmIG5hbWUpCiB7CiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0sIGV4ZWN1dGFi
bGUsIGxlbmd0aCwgbmFtZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U05hdGl2ZVN0ZEZ1bmN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNOYXRpdmVTdGRGdW5jdGlvbi5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU05hdGl2ZVN0ZEZ1bmN0aW9uLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTggQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC02NSw3ICs2NSw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgSlNOYXRpdmVT
dGRGdW5jdGlvbihWTSYsIE5hdGl2ZUV4ZWN1dGFibGUqLCBKU0dsb2JhbE9iamVjdCosIFN0cnVj
dHVyZSosIE5hdGl2ZVN0ZEZ1bmN0aW9uJiYpOwogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0m
LCBOYXRpdmVFeGVjdXRhYmxlKiwgdW5zaWduZWQgbGVuZ3RoLCBjb25zdCBTdHJpbmcmIG5hbWUp
OwotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsK
KyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgTmF0aXZlU3RkRnVuY3Rpb24gbV9m
dW5jdGlvbjsKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVj
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmpl
Y3QuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU09iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSw3IEBACiAvKgogICogIENv
cHlyaWdodCAoQykgMTk5OS0yMDAxIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCiAgKiAg
Q29weXJpZ2h0IChDKSAyMDAxIFBldGVyIEtlbGx5IChwbWtAcG9zdC5jb20pCi0gKiAgQ29weXJp
Z2h0IChDKSAyMDAzLTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENv
cHlyaWdodCAoQykgMjAwMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
ICBDb3B5cmlnaHQgKEMpIDIwMDcgRXJpYyBTZWlkZWwgKGVyaWNAd2Via2l0Lm9yZykKICAqCiAg
KiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgpAQCAtNzIsNyArNzIsOCBAQCBjb25zdCBDbGFzc0luZm8gSlNPYmplY3Q6OnNfaW5m
byA9IHsgIk9iCiAKIGNvbnN0IENsYXNzSW5mbyBKU0ZpbmFsT2JqZWN0OjpzX2luZm8gPSB7ICJP
YmplY3QiLCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RB
QkxFKEpTRmluYWxPYmplY3QpIH07CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKU09iamVjdDo6bWFy
a0F1eGlsaWFyeUFuZFZpc2l0T3V0T2ZMaW5lUHJvcGVydGllcyhTbG90VmlzaXRvciYgdmlzaXRv
ciwgQnV0dGVyZmx5KiBidXR0ZXJmbHksIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQcm9wZXJ0eU9m
ZnNldCBtYXhPZmZzZXQpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgorQUxXQVlTX0lOTElO
RSB2b2lkIEpTT2JqZWN0OjptYXJrQXV4aWxpYXJ5QW5kVmlzaXRPdXRPZkxpbmVQcm9wZXJ0aWVz
KFZpc2l0b3ImIHZpc2l0b3IsIEJ1dHRlcmZseSogYnV0dGVyZmx5LCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSwgUHJvcGVydHlPZmZzZXQgbWF4T2Zmc2V0KQogewogICAgIC8vIFdlIGNhbGwgdGhpcyB3
aGVuIHdlIGZvdW5kIGV2ZXJ5dGhpbmcgd2l0aG91dCByYWNlcy4KICAgICBBU1NFUlQoc3RydWN0
dXJlKTsKQEAgLTEwMyw3ICsxMDQsOCBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSlNPYmplY3Q6Om1h
cmtBdXhpbGlhCiAgICAgdmlzaXRvci5hcHBlbmRWYWx1ZXNIaWRkZW4oYnV0dGVyZmx5LT5wcm9w
ZXJ0eVN0b3JhZ2UoKSAtIG91dE9mTGluZVNpemUsIG91dE9mTGluZVNpemUpOwogfQogCi1BTFdB
WVNfSU5MSU5FIFN0cnVjdHVyZSogSlNPYmplY3Q6OnZpc2l0QnV0dGVyZmx5KFNsb3RWaXNpdG9y
JiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK0FMV0FZU19JTkxJTkUgU3Ry
dWN0dXJlKiBKU09iamVjdDo6dmlzaXRCdXR0ZXJmbHkoVmlzaXRvciYgdmlzaXRvcikKIHsKICAg
ICBzdGF0aWMgY29uc3QgY2hhciogY29uc3QgcmFjZVJlYXNvbiA9ICJKU09iamVjdDo6dmlzaXRC
dXR0ZXJmbHkiOwogICAgIFN0cnVjdHVyZSogcmVzdWx0ID0gdmlzaXRCdXR0ZXJmbHlJbXBsKHZp
c2l0b3IpOwpAQCAtMTEyLDcgKzExNCw4IEBAIEFMV0FZU19JTkxJTkUgU3RydWN0dXJlKiBKU09i
amVjdDo6dmlzaXQKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1BTFdBWVNfSU5MSU5FIFN0cnVj
dHVyZSogSlNPYmplY3Q6OnZpc2l0QnV0dGVyZmx5SW1wbChTbG90VmlzaXRvciYgdmlzaXRvcikK
K3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+CitBTFdBWVNfSU5MSU5FIFN0cnVjdHVyZSogSlNP
YmplY3Q6OnZpc2l0QnV0dGVyZmx5SW1wbChWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFZNJiB2
bSA9IHZpc2l0b3Iudm0oKTsKICAgICAKQEAgLTQxMiwyNCArNDE1LDIwIEBAIHNpemVfdCBKU09i
amVjdDo6ZXN0aW1hdGVkU2l6ZShKU0NlbGwqIGMKICAgICByZXR1cm4gQmFzZTo6ZXN0aW1hdGVk
U2l6ZShjZWxsLCB2bSkgKyBidXR0ZXJmbHlPdXRPZkxpbmVTaXplOwogfQogCi12b2lkIEpTT2Jq
ZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0
ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU09iamVjdDo6dmlzaXRDaGlsZHJlbklt
cGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTT2JqZWN0KiB0aGlz
T2JqZWN0ID0ganNDYXN0PEpTT2JqZWN0Kj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9J
TkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwotI2lmIEFTU0VSVF9FTkFCTEVECi0gICAgYm9v
bCB3YXNDaGVja2luZ0ZvckRlZmF1bHRNYXJrVmlvbGF0aW9uID0gdmlzaXRvci5tX2lzQ2hlY2tp
bmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlvbjsKLSAgICB2aXNpdG9yLm1faXNDaGVja2luZ0ZvckRl
ZmF1bHRNYXJrVmlvbGF0aW9uID0gZmFsc2U7Ci0jZW5kaWYKLSAgICAKKyAgICB0eXBlbmFtZSBW
aXNpdG9yOjpEZWZhdWx0TWFya2luZ1Zpb2xhdGlvbkFzc2VydGlvblNjb3BlIGFzc2VydGlvblNj
b3BlKHZpc2l0b3IpOworCiAgICAgSlNDZWxsOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZp
c2l0b3IpOwotICAgIAorCiAgICAgdGhpc09iamVjdC0+dmlzaXRCdXR0ZXJmbHkodmlzaXRvcik7
Ci0gICAgCi0jaWYgQVNTRVJUX0VOQUJMRUQKLSAgICB2aXNpdG9yLm1faXNDaGVja2luZ0ZvckRl
ZmF1bHRNYXJrVmlvbGF0aW9uID0gd2FzQ2hlY2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlvbjsK
LSNlbmRpZgogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU5fV0lUSF9NT0RJRklFUihKU19FWFBP
UlRfUFJJVkFURSwgSlNPYmplY3QpOworCiB2b2lkIEpTT2JqZWN0OjphbmFseXplSGVhcChKU0Nl
bGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCiB7CiAgICAgSlNPYmplY3QqIHRoaXNP
YmplY3QgPSBqc0Nhc3Q8SlNPYmplY3QqPihjZWxsKTsKQEAgLTQ2OCwxNCArNDY3LDEyIEBAIHZv
aWQgSlNPYmplY3Q6OmFuYWx5emVIZWFwKEpTQ2VsbCogY2VsbCwKICAgICB9CiB9CiAKLXZvaWQg
SlNGaW5hbE9iamVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNGaW5hbE9iamVjdDo6
dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAg
IEpTRmluYWxPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNGaW5hbE9iamVjdCo+KGNlbGwp
OwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKLSNp
ZiBBU1NFUlRfRU5BQkxFRAotICAgIGJvb2wgd2FzQ2hlY2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xh
dGlvbiA9IHZpc2l0b3IubV9pc0NoZWNraW5nRm9yRGVmYXVsdE1hcmtWaW9sYXRpb247Ci0gICAg
dmlzaXRvci5tX2lzQ2hlY2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlvbiA9IGZhbHNlOwotI2Vu
ZGlmCisgICAgdHlwZW5hbWUgVmlzaXRvcjo6RGVmYXVsdE1hcmtpbmdWaW9sYXRpb25Bc3NlcnRp
b25TY29wZSBhc3NlcnRpb25TY29wZSh2aXNpdG9yKTsKICAgICAKICAgICBKU0NlbGw6OnZpc2l0
Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CiAgICAgCkBAIC00ODMsMTIgKzQ4MCwxMCBA
QCB2b2lkIEpTRmluYWxPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsCiAgICAgICAgIGlmICh1
bnNpZ25lZCBzdG9yYWdlU2l6ZSA9IHN0cnVjdHVyZS0+aW5saW5lU2l6ZSgpKQogICAgICAgICAg
ICAgdmlzaXRvci5hcHBlbmRWYWx1ZXNIaWRkZW4odGhpc09iamVjdC0+aW5saW5lU3RvcmFnZSgp
LCBzdG9yYWdlU2l6ZSk7CiAgICAgfQotICAgIAotI2lmIEFTU0VSVF9FTkFCTEVECi0gICAgdmlz
aXRvci5tX2lzQ2hlY2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlvbiA9IHdhc0NoZWNraW5nRm9y
RGVmYXVsdE1hcmtWaW9sYXRpb247Ci0jZW5kaWYKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVO
X1dJVEhfTU9ESUZJRVIoSlNfRVhQT1JUX1BSSVZBVEUsIEpTRmluYWxPYmplY3QpOworCiBTdHJp
bmcgSlNPYmplY3Q6OmNsYXNzTmFtZShjb25zdCBKU09iamVjdCogb2JqZWN0LCBWTSYgdm0pCiB7
CiAgICAgY29uc3QgQ2xhc3NJbmZvKiBpbmZvID0gb2JqZWN0LT5jbGFzc0luZm8odm0pOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCShyZXZpc2lvbiAyNzI4
MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMSBI
YXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQogICogIENvcHlyaWdodCAoQykgMjAwMSBQZXRl
ciBLZWxseSAocG1rQHBvc3QuY29tKQotICogIENvcHlyaWdodCAoQykgMjAwMy0yMDE5IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAt
MTA4LDggKzEwOCw5IEBAIGNsYXNzIEpTT2JqZWN0IDogcHVibGljIEpTQ2VsbCB7CiBwdWJsaWM6
CiAgICAgdXNpbmcgQmFzZSA9IEpTQ2VsbDsKIAorICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU5f
V0lUSF9NT0RJRklFUihKU19FWFBPUlRfUFJJVkFURSk7CisKICAgICBKU19FWFBPUlRfUFJJVkFU
RSBzdGF0aWMgc2l6ZV90IGVzdGltYXRlZFNpemUoSlNDZWxsKiwgVk0mKTsKLSAgICBKU19FWFBP
UlRfUFJJVkFURSBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9y
Jik7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgYW5hbHl6ZUhlYXAoSlNDZWxs
KiwgSGVhcEFuYWx5emVyJik7CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgU3RyaW5n
IGNsYXNzTmFtZShjb25zdCBKU09iamVjdCosIFZNJik7CkBAIC05ODIsMTEgKzk4MywxMSBAQCBw
cm90ZWN0ZWQ6CiAgICAgSlNPYmplY3QoVk0mLCBTdHJ1Y3R1cmUqLCBCdXR0ZXJmbHkqID0gbnVs
bHB0cik7CiAgICAgCiAgICAgLy8gVmlzaXRzIHRoZSBidXR0ZXJmbHkgdW5sZXNzIHRoZXJlIGlz
IGEgcmFjZS4gUmV0dXJucyB0aGUgc3RydWN0dXJlIGlmIHRoZXJlIHdhcyBubyByYWNlLgotICAg
IFN0cnVjdHVyZSogdmlzaXRCdXR0ZXJmbHkoU2xvdFZpc2l0b3ImKTsKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBWaXNpdG9yPiBTdHJ1Y3R1cmUqIHZpc2l0QnV0dGVyZmx5KFZpc2l0b3ImKTsKICAg
ICAKLSAgICBTdHJ1Y3R1cmUqIHZpc2l0QnV0dGVyZmx5SW1wbChTbG90VmlzaXRvciYpOworICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IFN0cnVjdHVyZSogdmlzaXRCdXR0ZXJmbHlJbXBs
KFZpc2l0b3ImKTsKICAgICAKLSAgICB2b2lkIG1hcmtBdXhpbGlhcnlBbmRWaXNpdE91dE9mTGlu
ZVByb3BlcnRpZXMoU2xvdFZpc2l0b3ImLCBCdXR0ZXJmbHkqLCBTdHJ1Y3R1cmUqLCBQcm9wZXJ0
eU9mZnNldCBtYXhPZmZzZXQpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQg
bWFya0F1eGlsaWFyeUFuZFZpc2l0T3V0T2ZMaW5lUHJvcGVydGllcyhWaXNpdG9yJiwgQnV0dGVy
Zmx5KiwgU3RydWN0dXJlKiwgUHJvcGVydHlPZmZzZXQgbWF4T2Zmc2V0KTsKIAogICAgIC8vIENh
bGwgdGhpcyBpZiB5b3Uga25vdyB0aGF0IHRoZSBvYmplY3QgaXMgaW4gYSBtb2RlIHdoZXJlIGl0
IGhhcyBhcnJheQogICAgIC8vIHN0b3JhZ2UuIFRoaXMgd2lsbCBhc3NlcnQgb3RoZXJ3aXNlLgpA
QCAtMTE3NCw4ICsxMTc1LDYgQEAgcHJvdGVjdGVkOgogICAgIH0KIH07CiAKLWNsYXNzIEpTRmlu
YWxPYmplY3Q7Ci0KIC8vIEpTRmluYWxPYmplY3QgaXMgYSB0eXBlIG9mIEpTT2JqZWN0IHRoYXQg
Y29udGFpbnMgc3VmZmljaWVudCBpbnRlcm5hbAogLy8gc3RvcmFnZSB0byBmdWxseSBtYWtlIHVz
ZSBvZiB0aGUgY29sbGVjdG9yIGNlbGwgY29udGFpbmluZyBpdC4KIGNsYXNzIEpTRmluYWxPYmpl
Y3QgZmluYWwgOiBwdWJsaWMgSlNPYmplY3QgewpAQCAtMTIxNCwxNSArMTIxMywxMyBAQCBwdWJs
aWM6CiAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBw
cm90b3R5cGUsIHR5cGVJbmZvKCksIGluZm8oKSwgZGVmYXVsdEluZGV4aW5nVHlwZSwgaW5saW5l
Q2FwYWNpdHkpOwogICAgIH0KIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIHZp
c2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NI
SUxEUkVOX1dJVEhfTU9ESUZJRVIoSlNfRVhQT1JUX1BSSVZBVEUpOwogCiAgICAgREVDTEFSRV9F
WFBPUlRfSU5GTzsKIAogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0
cmFjdG9yOwogCi0gICAgdm9pZCB2aXNpdENoaWxkcmVuQ29tbW9uKFNsb3RWaXNpdG9yJik7Ci0K
ICAgICBleHBsaWNpdCBKU0ZpbmFsT2JqZWN0KFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUs
IEJ1dHRlcmZseSogYnV0dGVyZmx5KQogICAgICAgICA6IEpTT2JqZWN0KHZtLCBzdHJ1Y3R1cmUs
IGJ1dHRlcmZseSkKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U1Byb21pc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTUHJvbWlzZS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTUHJvbWlzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02NywxMyArNjcsMTYg
QEAgdm9pZCBKU1Byb21pc2U6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKICAgICAgICAgQmFzZTo6
aW50ZXJuYWxGaWVsZChpbmRleCkuc2V0KHZtLCB0aGlzLCB2YWx1ZXNbaW5kZXhdKTsKIH0KIAot
dm9pZCBKU1Byb21pc2U6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYg
dmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTUHJvbWlzZTo6dmlz
aXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGF1
dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNQcm9taXNlKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dD
X09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwogICAgIEJhc2U6OnZpc2l0Q2hp
bGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihK
U1Byb21pc2UpOworCiBhdXRvIEpTUHJvbWlzZTo6c3RhdHVzKFZNJikgY29uc3QgLT4gU3RhdHVz
CiB7CiAgICAgSlNWYWx1ZSB2YWx1ZSA9IGludGVybmFsRmllbGQoRmllbGQ6OkZsYWdzKS5nZXQo
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvbWlzZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvbWlzZS5oCShyZXZp
c2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb21pc2Uu
aAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC05Niw3ICs5Niw3IEBAIHB1YmxpYzoKICAgICB9OwogICAgIHN0YXRp
YyBEZWZlcnJlZERhdGEgY3JlYXRlRGVmZXJyZWREYXRhKEpTR2xvYmFsT2JqZWN0KiwgSlNQcm9t
aXNlQ29uc3RydWN0b3IqKTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiBwcm90ZWN0
ZWQ6CiAgICAgSlNQcm9taXNlKFZNJiwgU3RydWN0dXJlKik7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVydHlOYW1lRW51bWVyYXRv
ci5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTUHJvcGVydHlOYW1lRW51bWVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03MCw3ICs3
MCw4IEBAIHZvaWQgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpmaW5pc2hDcmUKICAgICB9CiB9
CiAKLXZvaWQgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCog
Y2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgor
dm9pZCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCog
Y2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3Iq
IHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKj4oY2VsbCk7CiAg
ICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtODcs
NiArODgsOCBAQCB2b2lkIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6dmlzaXRDaGlsCiAgICAg
fQogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKTsK
KwogLy8gRklYTUU6IEFzc2VydCB0aGF0IHByb3BlcnRpZXMgcmV0dXJuZWQgYnkgZ2V0T3duUHJv
cGVydHlOYW1lcygpIGFyZSByZXBvcnRlZCBlbnVtZXJhYmxlIGJ5IGdldE93blByb3BlcnR5U2xv
dCgpLgogLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxOTkyNgog
dm9pZCBnZXRFbnVtZXJhYmxlUHJvcGVydHlOYW1lcyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBKU09iamVjdCogYmFzZSwgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIHVp
bnQzMl90JiBpbmRleGVkTGVuZ3RoLCB1aW50MzJfdCYgc3RydWN0dXJlUHJvcGVydHlDb3VudCkK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVydHlOYW1lRW51bWVy
YXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJv
cGVydHlOYW1lRW51bWVyYXRvci5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxOSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAyMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTg0LDcgKzg0LDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNF
VE9GKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvciwgbV9wcm9wZXJ0eU5hbWVzKTsKICAgICB9CiAK
LSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7Cisg
ICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3Mg
TExJbnRPZmZzZXRzRXh0cmFjdG9yOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNQcm94eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNQcm94eS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTUHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMS0yMDEyLCAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNSw3
ICszNSw4IEBAIFNUQVRJQ19BU1NFUlRfSVNfVFJJVklBTExZX0RFU1RSVUNUSUJMRSgKIAogY29u
c3QgQ2xhc3NJbmZvIEpTUHJveHk6OnNfaW5mbyA9IHsgIkpTUHJveHkiLCAmQmFzZTo6c19pbmZv
LCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTUHJveHkpIH07CiAKLXZv
aWQgSlNQcm94eTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNp
dG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNQcm94eTo6dmlzaXRDaGls
ZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTUHJveHkq
IHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNQcm94eSo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpF
Q1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTQzLDYgKzQ0LDggQEAgdm9pZCBK
U1Byb3h5Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbAogICAgIHZpc2l0b3IuYXBwZW5kKHRo
aXNPYmplY3QtPm1fdGFyZ2V0KTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOX1dJVEhfTU9E
SUZJRVIoSlNfRVhQT1JUX1BSSVZBVEUsIEpTUHJveHkpOworCiB2b2lkIEpTUHJveHk6OnNldFRh
cmdldChWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCiB7CiAgICAgbV90YXJn
ZXQuc2V0KHZtLCB0aGlzLCBnbG9iYWxPYmplY3QpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNQcm94eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTUHJveHkuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNQcm94eS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMS0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODUsNyArODUsNyBA
QCBwcm90ZWN0ZWQ6CiAgICAgICAgIG1fdGFyZ2V0LnNldCh2bSwgdGhpcywgdGFyZ2V0KTsKICAg
ICB9CiAKLSAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpT
Q2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTl9XSVRIX01P
RElGSUVSKEpTX0VYUE9SVF9QUklWQVRFKTsKIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRp
YyBTdHJpbmcgY2xhc3NOYW1lKGNvbnN0IEpTT2JqZWN0KiwgVk0mKTsKICAgICBKU19FWFBPUlRf
UFJJVkFURSBzdGF0aWMgU3RyaW5nIHRvU3RyaW5nTmFtZShjb25zdCBKU09iamVjdCosIEpTR2xv
YmFsT2JqZWN0Kik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Njb3Bl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Njb3Bl
LmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNTY29wZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDEyLTIwMjAgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDEyLTIwMjEgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zOSw3ICszOSw4IEBAIFNUQVRJQ19BU1NF
UlRfSVNfVFJJVklBTExZX0RFU1RSVUNUSUJMRSgKIAogY29uc3QgQ2xhc3NJbmZvIEpTU2NvcGU6
OnNfaW5mbyA9IHsgIlNjb3BlIiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JF
QVRFX01FVEhPRF9UQUJMRShKU1Njb3BlKSB9OwogCi12b2lkIEpTU2NvcGU6OnZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1l
IFZpc2l0b3I+Cit2b2lkIEpTU2NvcGU6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwg
VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU1Njb3BlKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpT
U2NvcGUqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3Qs
IGluZm8oKSk7CkBAIC00Nyw2ICs0OCw4IEBAIHZvaWQgSlNTY29wZTo6dmlzaXRDaGlsZHJlbihK
U0NlbGwqIGNlbGwKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX25leHQpOwogfQog
CitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNTY29wZSk7CisKIC8vIFJldHVybnMgdHJ1ZSBpZiB3
ZSBmb3VuZCBlbm91Z2ggaW5mb3JtYXRpb24gdG8gdGVybWluYXRlIG9wdGltaXphdGlvbi4KIHN0
YXRpYyBpbmxpbmUgYm9vbCBhYnN0cmFjdEFjY2VzcyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBKU1Njb3BlKiBzY29wZSwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIEdldE9yUHV0IGdl
dE9yUHV0LCBzaXplX3QgZGVwdGgsIGJvb2wmIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCBSZXNv
bHZlT3AmIG9wLCBJbml0aWFsaXphdGlvbk1vZGUgaW5pdGlhbGl6YXRpb25Nb2RlKQogewpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTY29wZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2NvcGUuaAkocmV2aXNpb24gMjcyODMw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTY29wZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE5IEFwcGxl
IEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDIxIEFw
cGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtNjQsNyArNjQsNyBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgdm9pZCBjb2xsZWN0
Q2xvc3VyZVZhcmlhYmxlc1VuZGVyVERaKEpTU2NvcGUqLCBURFpFbnZpcm9ubWVudCYgcmVzdWx0
LCBQcml2YXRlTmFtZUVudmlyb25tZW50Jik7CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxk
cmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsK
IAogICAgIGJvb2wgaXNWYXJTY29wZSgpOwogICAgIGJvb2wgaXNMZXhpY2FsU2NvcGUoKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVPYmpl
Y3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2Vn
bWVudGVkVmFyaWFibGVPYmplY3QuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNjIsNyArNjIsOCBAQCBTY29wZU9mZnNldCBKU1NlZ21lbnRlZFZhcmlhYmxl
T2JqZWN0OjphCiAgICAgcmV0dXJuIFNjb3BlT2Zmc2V0KG9sZFNpemUpOwogfQogCi12b2lkIEpT
U2VnbWVudGVkVmFyaWFibGVPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90
VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTU2Vn
bWVudGVkVmFyaWFibGVPYmplY3Q6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlz
aXRvciYgdmlzaXRvcikKIHsKICAgICBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0KiB0aGlzT2Jq
ZWN0ID0ganNDYXN0PEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3QqPihjZWxsKTsKICAgICBBU1NF
UlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC03NSw2ICs3Niw4
IEBAIHZvaWQgSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdDo6dmlzaXRDaGkKICAgICAgICAgdmlz
aXRvci5hcHBlbmRIaWRkZW4odGhpc09iamVjdC0+bV92YXJpYWJsZXNbaV0pOwogfQogCitERUZJ
TkVfVklTSVRfQ0hJTERSRU5fV0lUSF9NT0RJRklFUihKU19FWFBPUlRfUFJJVkFURSwgSlNTZWdt
ZW50ZWRWYXJpYWJsZU9iamVjdCk7CisKIHZvaWQgSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdDo6
YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQogewogICAg
IEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNTZWdtZW50
ZWRWYXJpYWJsZU9iamVjdCo+KGNlbGwpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVPYmplY3QuaAkocmV2aXNp
b24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZWdtZW50ZWRW
YXJpYWJsZU9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMi0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODUsOCArODUsOCBAQCBwdWJsaWM6
CiAgICAgLy8gQWRkcyBudW1iZXJPZlJlZ2lzdGVyc1RvQWRkIHJlZ2lzdGVycywgaW5pdGlhbGl6
ZXMgdGhlbSB0byBVbmRlZmluZWQsIGFuZCByZXR1cm5zCiAgICAgLy8gdGhlIGluZGV4IG9mIHRo
ZSBmaXJzdCBvbmUgYWRkZWQuCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgU2NvcGVPZmZzZXQgYWRk
VmFyaWFibGVzKHVuc2lnbmVkIG51bWJlck9mVmFyaWFibGVzVG9BZGQsIEpTVmFsdWUpOwotICAg
IAotICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiwgU2xvdFZpc2l0b3ImKTsKKworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU5fV0lUSF9NT0RJ
RklFUihKU19FWFBPUlRfUFJJVkFURSk7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZv
aWQgYW5hbHl6ZUhlYXAoSlNDZWxsKiwgSGVhcEFuYWx5emVyJik7CiAgICAgCiBwcm90ZWN0ZWQ6
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NldEl0ZXJhdG9yLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NldEl0ZXJhdG9y
LmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNTZXRJdGVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTcgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIxIEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU3LDEzICs1NywxNiBAQCB2
b2lkIEpTU2V0SXRlcmF0b3I6OmZpbmlzaENyZWF0aW9uKFZNJiB2CiAgICAgICAgIEJhc2U6Omlu
dGVybmFsRmllbGQoaW5kZXgpLnNldCh2bSwgdGhpcywgdmFsdWVzW2luZGV4XSk7CiB9CiAKLXZv
aWQgSlNTZXRJdGVyYXRvcjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9y
JiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNTZXRJdGVyYXRv
cjo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewog
ICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNTZXRJdGVyYXRvcio+KGNlbGwpOwogICAg
IEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKICAgICBCYXNl
Ojp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwogfQogCitERUZJTkVfVklTSVRf
Q0hJTERSRU4oSlNTZXRJdGVyYXRvcik7CisKIEpTVmFsdWUgSlNTZXRJdGVyYXRvcjo6Y3JlYXRl
UGFpcihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIGtleSwgSlNWYWx1ZSB2
YWx1ZSkKIHsKICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdzOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZXRJdGVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2V0SXRlcmF0b3IuaAkocmV2aXNpb24gMjcyODMw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZXRJdGVyYXRvci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMywgMjAx
NiBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMjEgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMTMwLDcgKzEzMCw3IEBAIHByaXZhdGU6CiAgICAgSlNfRVhQT1JU
X1BSSVZBVEUgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIEpTU2V0KiwgSXRlcmF0aW9uS2luZCk7
CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIEpT
VmFsdWUgY3JlYXRlUGFpcihKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUsIEpTVmFsdWUpOwotICAg
IHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBE
RUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogfTsKIFNUQVRJQ19BU1NFUlRfSVNfVFJJVklBTExZX0RF
U1RSVUNUSUJMRShKU1NldEl0ZXJhdG9yKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNTdHJpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTU3RyaW5nLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEs
NyBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMiBIYXJyaSBQb3J0ZW4gKHBvcnRl
bkBrZGUub3JnKQogICogIENvcHlyaWdodCAoQykgMjAwMSBQZXRlciBLZWxseSAocG1rQHBvc3Qu
Y29tKQotICogIENvcHlyaWdodCAoQykgMjAwNC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDQtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMTA1LDcgKzEwNSw4IEBAIHNp
emVfdCBKU1N0cmluZzo6ZXN0aW1hdGVkU2l6ZShKU0NlbGwqIGMKICAgICByZXR1cm4gQmFzZTo6
ZXN0aW1hdGVkU2l6ZShjZWxsLCB2bSkgKyBiaXR3aXNlX2Nhc3Q8U3RyaW5nSW1wbCo+KHBvaW50
ZXIpLT5jb3N0RHVyaW5nR0MoKTsKIH0KIAotdm9pZCBKU1N0cmluZzo6dmlzaXRDaGlsZHJlbihK
U0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlz
aXRvcj4KK3ZvaWQgSlNTdHJpbmc6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlz
aXRvciYgdmlzaXRvcikKIHsKICAgICBKU1N0cmluZyogdGhpc09iamVjdCA9IGFzU3RyaW5nKGNl
bGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsK
QEAgLTE0Myw2ICsxNDQsOCBAQCB2b2lkIEpTU3RyaW5nOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCog
Y2VsCiAgICAgICAgIHZpc2l0b3IucmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKGltcGwtPmNvc3RE
dXJpbmdHQygpKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTU3RyaW5nKTsKKwogc3Rh
dGljIGNvbnN0ZXhwciB1bnNpZ25lZCBtYXhMZW5ndGhGb3JPblN0YWNrUmVzb2x2ZSA9IDIwNDg7
CiAKIHZvaWQgSlNSb3BlU3RyaW5nOjpyZXNvbHZlUm9wZUludGVybmFsOChMQ2hhciogYnVmZmVy
KSBjb25zdApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5oCShy
ZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmlu
Zy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMp
IDE5OTktMjAwMSBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQogICogIENvcHlyaWdodCAo
QykgMjAwMSBQZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQotICogIENvcHlyaWdodCAoQykgMjAw
My0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMp
IDIwMDMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
ICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYwpAQCAtMjE3LDcgKzIxNyw3IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyB2b2lkIGR1
bXBUb1N0cmVhbShjb25zdCBKU0NlbGwqLCBQcmludFN0cmVhbSYpOwogICAgIHN0YXRpYyBzaXpl
X3QgZXN0aW1hdGVkU2l6ZShKU0NlbGwqLCBWTSYpOwotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hp
bGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVO
OwogCiAgICAgQUxXQVlTX0lOTElORSBib29sIGlzUm9wZSgpIGNvbnN0CiAgICAgewpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmdJdGVyYXRvci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmdJdGVyYXRvci5j
cHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
U3RyaW5nSXRlcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAq
IENvcHlyaWdodCAoQykgMjAxNSBZdXN1a2UgU3V6dWtpIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+
LgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTEsMTEgKzUxLDE0IEBAIEpT
U3RyaW5nSXRlcmF0b3IqIEpTU3RyaW5nSXRlcmF0b3I6OmNsb24KICAgICByZXR1cm4gY2xvbmU7
CiB9CiAKLXZvaWQgSlNTdHJpbmdJdGVyYXRvcjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGws
IFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQg
SlNTdHJpbmdJdGVyYXRvcjo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9y
JiB2aXNpdG9yKQogewogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNTdHJpbmdJdGVy
YXRvcio+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwg
aW5mbygpKTsKICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwog
fQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNTdHJpbmdJdGVyYXRvcik7CisKIH0gLy8gbmFt
ZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmdJ
dGVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
U3RyaW5nSXRlcmF0b3IuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNTdHJpbmdJdGVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxNSBZdXN1a2UgU3V6dWtpIDx1dGF0YW5lLnRl
YUBnbWFpbC5jb20+LgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNzksNyArODAs
NyBAQCBwdWJsaWM6CiAgICAgSlNWYWx1ZSBpbmRleCgpIGNvbnN0IHsgcmV0dXJuIGludGVybmFs
RmllbGQoRmllbGQ6OkluZGV4KS5nZXQoKTsgfQogICAgIEpTU3RyaW5nSXRlcmF0b3IqIGNsb25l
KEpTR2xvYmFsT2JqZWN0Kik7CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2Vs
bCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogcHJpdmF0
ZToKICAgICBKU1N0cmluZ0l0ZXJhdG9yKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N5bWJvbFRh
YmxlT2JqZWN0LmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNiw3
ICszNiw4IEBAIG5hbWVzcGFjZSBKU0MgewogCiBjb25zdCBDbGFzc0luZm8gSlNTeW1ib2xUYWJs
ZU9iamVjdDo6c19pbmZvID0geyAiU3ltYm9sVGFibGVPYmplY3QiLCAmQmFzZTo6c19pbmZvLCBu
dWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTU3ltYm9sVGFibGVPYmplY3Qp
IH07CiAKLXZvaWQgSlNTeW1ib2xUYWJsZU9iamVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNl
bGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3Zv
aWQgSlNTeW1ib2xUYWJsZU9iamVjdDo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBW
aXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTU3ltYm9sVGFibGVPYmplY3QqIHRoaXNPYmplY3Qg
PSBqc0Nhc3Q8SlNTeW1ib2xUYWJsZU9iamVjdCo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpF
Q1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTQ0LDYgKzQ1LDggQEAgdm9pZCBK
U1N5bWJvbFRhYmxlT2JqZWN0Ojp2aXNpdENoaWxkcmVuKAogICAgIHZpc2l0b3IuYXBwZW5kKHRo
aXNPYmplY3QtPm1fc3ltYm9sVGFibGUpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNT
eW1ib2xUYWJsZU9iamVjdCk7CisKIGJvb2wgSlNTeW1ib2xUYWJsZU9iamVjdDo6ZGVsZXRlUHJv
cGVydHkoSlNDZWxsKiBjZWxsLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0
eU5hbWUgcHJvcGVydHlOYW1lLCBEZWxldGVQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgSlNT
eW1ib2xUYWJsZU9iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1N5bWJvbFRhYmxlT2JqZWN0
Kj4oY2VsbCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N5bWJvbFRh
YmxlT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNTeW1ib2xUYWJsZU9iamVjdC5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjAgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC03MCw3ICs3MCw3IEBAIHByb3RlY3RlZDoKICAgICAgICAgbV9zeW1ib2xUYWJsZS5zZXQodm0s
IHRoaXMsIHN5bWJvbFRhYmxlKTsKICAgICB9CiAgICAgCi0gICAgc3RhdGljIHZvaWQgdmlzaXRD
aGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERS
RU47CiAgICAgCiBwcml2YXRlOgogICAgIFdyaXRlQmFycmllcjxTeW1ib2xUYWJsZT4gbV9zeW1i
b2xUYWJsZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTV2Vha09iamVj
dFJlZi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNX
ZWFrT2JqZWN0UmVmLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNXZWFrT2JqZWN0UmVmLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOS0yMDIxIEFwcGxlLCBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM5LDcgKzM5
LDggQEAgdm9pZCBKU1dlYWtPYmplY3RSZWY6OmZpbmlzaENyZWF0aW9uKFZNJgogICAgIEJhc2U6
OmZpbmlzaENyZWF0aW9uKHZtKTsKIH0KIAotdm9pZCBKU1dlYWtPYmplY3RSZWY6OnZpc2l0Q2hp
bGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVu
YW1lIFZpc2l0b3I+Cit2b2lkIEpTV2Vha09iamVjdFJlZjo6dmlzaXRDaGlsZHJlbkltcGwoSlND
ZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBq
c0Nhc3Q8SlNXZWFrT2JqZWN0UmVmKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhF
UklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNTEsNiArNTIsOCBAQCB2b2lkIEpTV2Vha09i
amVjdFJlZjo6dmlzaXRDaGlsZHJlbihKU0NlCiAgICAgfQogfQogCitERUZJTkVfVklTSVRfQ0hJ
TERSRU4oSlNXZWFrT2JqZWN0UmVmKTsKKwogdm9pZCBKU1dlYWtPYmplY3RSZWY6OmZpbmFsaXpl
VW5jb25kaXRpb25hbGx5KFZNJiB2bSkKIHsKICAgICBpZiAobV92YWx1ZSAmJiAhdm0uaGVhcC5p
c01hcmtlZChtX3ZhbHVlLmdldCgpKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTV2Vha09iamVjdFJlZi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTV2Vha09iamVjdFJlZi5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1dlYWtPYmplY3RSZWYuaAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUsIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOS0yMDIxIEFwcGxlLCBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTY1LDcgKzY1LDcgQEAgcHVibGljOgogICAgIH0KIAogICAgIHZvaWQgZmluYWxpemVVbmNvbmRp
dGlvbmFsbHkoVk0mKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNs
b3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogcHJpdmF0ZToKICAg
ICBKU1dlYWtPYmplY3RSZWYoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTV2l0aFNjb3BlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1dpdGhTY29wZS5jcHAJKHJldmlzaW9u
IDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTV2l0aFNjb3BlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTIsIDIwMTYgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEyLTIwMjEgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC00MSw3ICs0MSw4IEBAIEpTV2l0aFNjb3BlKiBKU1dpdGhT
Y29wZTo6Y3JlYXRlKAogICAgIHJldHVybiB3aXRoU2NvcGU7CiB9CiAKLXZvaWQgSlNXaXRoU2Nv
cGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3Rl
bXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTV2l0aFNjb3BlOjp2aXNpdENoaWxkcmVu
SW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNXaXRoU2NvcGUq
IHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNXaXRoU2NvcGUqPihjZWxsKTsKICAgICBBU1NFUlRfR0Nf
T0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC00OSw2ICs1MCw4IEBAIHZv
aWQgSlNXaXRoU2NvcGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiAKICAgICB2aXNpdG9yLmFwcGVu
ZCh0aGlzT2JqZWN0LT5tX29iamVjdCk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU1dp
dGhTY29wZSk7CisKIFN0cnVjdHVyZSogSlNXaXRoU2NvcGU6OmNyZWF0ZVN0cnVjdHVyZShWTSYg
dm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG8pCiB7CiAgICAg
cmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvLCBUeXBlSW5m
byhXaXRoU2NvcGVUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1dpdGhTY29wZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTV2l0aFNjb3BlLmgJKHJldmlzaW9uIDI3MjgzMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTV2l0aFNjb3BlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDE2IEFw
cGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDIx
IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtNDMsNyArNDMsNyBAQCBwdWJsaWM6CiAKICAgICBKU09iamVjdCogb2JqZWN0
KCkgeyByZXR1cm4gbV9vYmplY3QuZ2V0KCk7IH0KIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hp
bGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVO
OwogCiAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxP
YmplY3QqLCBKU1ZhbHVlIHByb3RvKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNXcmFwcGVyT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU1dyYXBwZXJPYmplY3QuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1dyYXBwZXJPYmplY3QuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDIwMDYgTWFrcyBP
cmxvdmljaAotICogIENvcHlyaWdodCAoQykgMjAwNiwgMjAwOSwgMjAxMiBBcHBsZSwgSW5jLgor
ICogIENvcHlyaWdodCAoQykgMjAwNi0yMDIxIEFwcGxlLCBJbmMuCiAgKgogICogIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAq
ICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYwpAQCAtMjksMTEgKzI5LDE0IEBAIG5hbWVzcGFjZSBKU0MgewogCiBTVEFUSUNfQVNTRVJU
X0lTX1RSSVZJQUxMWV9ERVNUUlVDVElCTEUoSlNXcmFwcGVyT2JqZWN0KTsKIAotdm9pZCBKU1dy
YXBwZXJPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlz
aXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTV3JhcHBlck9iamVjdDo6
dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAg
IGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNXcmFwcGVyT2JqZWN0Kj4oY2VsbCk7CiAgICAg
QVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwogICAgIEJhc2U6
OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CiB9CiAKK0RFRklORV9WSVNJVF9D
SElMRFJFTl9XSVRIX01PRElGSUVSKEpTX0VYUE9SVF9QUklWQVRFLCBKU1dyYXBwZXJPYmplY3Qp
OworCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTV3JhcHBlck9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTV3JhcHBlck9iamVjdC5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1dyYXBwZXJPYmplY3QuaAkod29ya2luZyBjb3B5KQpA
QCAtMSw2ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA2IE1ha3MgT3Jsb3ZpY2gK
LSAqICBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwNi0yMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC02NCw3ICs2NCw3
IEBAIHB1YmxpYzoKIHByb3RlY3RlZDoKICAgICBleHBsaWNpdCBKU1dyYXBwZXJPYmplY3QoVk0m
LCBTdHJ1Y3R1cmUqKTsKIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIHZpc2l0
Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxE
UkVOX1dJVEhfTU9ESUZJRVIoSlNfRVhQT1JUX1BSSVZBVEUpOwogfTsKIAogaW5saW5lIEpTV3Jh
cHBlck9iamVjdDo6SlNXcmFwcGVyT2JqZWN0KFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUp
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9MYXp5Q2xhc3NTdHJ1Y3R1cmUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0xhenlDbGFz
c1N0cnVjdHVyZS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0xhenlDbGFzc1N0cnVjdHVyZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03Miwx
MiArNzIsMTYgQEAgdm9pZCBMYXp5Q2xhc3NTdHJ1Y3R1cmU6OkluaXRpYWxpemVyOjpzZQogICAg
IGNsYXNzU3RydWN0dXJlLm1fY29uc3RydWN0b3Iuc2V0KHZtLCBnbG9iYWwsIGNvbnN0cnVjdG9y
KTsKIH0KIAotdm9pZCBMYXp5Q2xhc3NTdHJ1Y3R1cmU6OnZpc2l0KFNsb3RWaXNpdG9yJiB2aXNp
dG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgTGF6eUNsYXNzU3RydWN0dXJl
Ojp2aXNpdChWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIG1fc3RydWN0dXJlLnZpc2l0KHZpc2l0
b3IpOwogICAgIHZpc2l0b3IuYXBwZW5kKG1fY29uc3RydWN0b3IpOwogfQogCit0ZW1wbGF0ZSB2
b2lkIExhenlDbGFzc1N0cnVjdHVyZTo6dmlzaXQoQWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVt
cGxhdGUgdm9pZCBMYXp5Q2xhc3NTdHJ1Y3R1cmU6OnZpc2l0KFNsb3RWaXNpdG9yJik7CisKIHZv
aWQgTGF6eUNsYXNzU3RydWN0dXJlOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiB7CiAg
ICAgb3V0LnByaW50KCI8c3RydWN0dXJlID0gIiwgbV9zdHJ1Y3R1cmUsICIsIGNvbnN0cnVjdG9y
ID0gIiwgUmF3UG9pbnRlcihtX2NvbnN0cnVjdG9yLmdldCgpKSwgIj4iKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0xhenlDbGFzc1N0cnVjdHVyZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0xhenlDbGFzc1N0cnVjdHVyZS5oCShy
ZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9MYXp5Q2xh
c3NTdHJ1Y3R1cmUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMTcsNyArMTE3LDcgQEAgcHVibGljOgogICAg
ICAgICByZXR1cm4gbV9jb25zdHJ1Y3Rvci5nZXQoKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCB2
aXNpdChTbG90VmlzaXRvciYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQg
dmlzaXQoVmlzaXRvciYpOwogICAgIAogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0
OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9MYXp5UHJvcGVydHkuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9MYXp5UHJvcGVydHku
aAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTGF6
eVByb3BlcnR5LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDE2LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMDMsNyArMTAzLDcgQEAgcHVibGljOgog
ICAgIHZvaWQgc2V0TWF5QmVOdWxsKFZNJiwgY29uc3QgT3duZXJUeXBlKiBvd25lciwgRWxlbWVu
dFR5cGUqKTsKICAgICB2b2lkIHNldChWTSYsIGNvbnN0IE93bmVyVHlwZSogb3duZXIsIEVsZW1l
bnRUeXBlKik7CiAgICAgCi0gICAgdm9pZCB2aXNpdChTbG90VmlzaXRvciYpOworICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgdmlzaXQoVmlzaXRvciYpOwogICAgIAogICAgIHZv
aWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwogICAgIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvTGF6eVByb3BlcnR5SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0xhenlQcm9wZXJ0eUlubGluZXMuaAkocmV2aXNpb24g
MjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTGF6eVByb3BlcnR5SW5s
aW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTY2LDcgKzY2LDggQEAgdm9pZCBMYXp5UHJvcGVydHk8T3du
ZXJUeXBlLCBFbGVtZW50VHlwZQogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPd25lclR5cGUsIHR5
cGVuYW1lIEVsZW1lbnRUeXBlPgotdm9pZCBMYXp5UHJvcGVydHk8T3duZXJUeXBlLCBFbGVtZW50
VHlwZT46OnZpc2l0KFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlz
aXRvcj4KK3ZvaWQgTGF6eVByb3BlcnR5PE93bmVyVHlwZSwgRWxlbWVudFR5cGU+Ojp2aXNpdChW
aXNpdG9yJiB2aXNpdG9yKQogewogICAgIGlmIChtX3BvaW50ZXIgJiYgIShtX3BvaW50ZXIgJiBs
YXp5VGFnKSkKICAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZChiaXR3aXNlX2Nhc3Q8
RWxlbWVudFR5cGUqPihtX3BvaW50ZXIpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL01vZHVsZVByb2dyYW1FeGVjdXRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9Nb2R1bGVQcm9ncmFtRXhlY3V0YWJsZS5jcHAJKHJldmlz
aW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01vZHVsZVByb2dy
YW1FeGVjdXRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDksIDIwMTAsIDIwMTMsIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAyMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTc5
LDcgKzc5LDggQEAgYXV0byBNb2R1bGVQcm9ncmFtRXhlY3V0YWJsZTo6ZW5zdXJlVGVtcAogICAg
IHJldHVybiBlbnN1cmVUZW1wbGF0ZU9iamVjdE1hcEltcGwobV90ZW1wbGF0ZU9iamVjdE1hcCk7
CiB9CiAKLXZvaWQgTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+
Cit2b2lkIE1vZHVsZVByb2dyYW1FeGVjdXRhYmxlOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwq
IGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUq
IHRoaXNPYmplY3QgPSBqc0Nhc3Q8TW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUqPihjZWxsKTsKICAg
ICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC05NCw0
ICs5NSw2IEBAIHZvaWQgTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGU6OnZpc2l0Q2hpbGQKICAgICB9
CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihNb2R1bGVQcm9ncmFtRXhlY3V0YWJsZSk7CisK
IH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
TW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9Nb2R1bGVQcm9ncmFtRXhlY3V0YWJsZS5oCShyZXZpc2lvbiAyNzI4MzAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Nb2R1bGVQcm9ncmFtRXhlY3V0YWJs
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwOS0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAwOS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNzcsNyArNzcsNyBAQCBwcml2YXRlOgogCiAgICAgTW9k
dWxlUHJvZ3JhbUV4ZWN1dGFibGUoSlNHbG9iYWxPYmplY3QqLCBjb25zdCBTb3VyY2VDb2RlJik7
CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7
CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIFdyaXRlQmFycmllcjxVbmxpbmtl
ZE1vZHVsZVByb2dyYW1Db2RlQmxvY2s+IG1fdW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2Nr
OwogICAgIFdyaXRlQmFycmllcjxTeW1ib2xUYWJsZT4gbV9tb2R1bGVFbnZpcm9ubWVudFN5bWJv
bFRhYmxlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAJ
KHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlv
bnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMS0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTU4LDYgKzU1OCw5IEBAIHZvaWQgT3B0aW9uczo6
cmVjb21wdXRlRGVwZW5kZW50T3B0aW9ucygKIAogICAgIGlmIChPcHRpb25zOjp1c2VQcml2YXRl
U3RhdGljQ2xhc3NGaWVsZHMoKSkKICAgICAgICAgT3B0aW9uczo6dXNlUHJpdmF0ZUNsYXNzRmll
bGRzKCkgPSB0cnVlOworCisgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VWZXJpZnlHQygpKQorICAg
ICAgICBPcHRpb25zOjp2ZXJpZnlHQygpID0gdHJ1ZTsKIH0KIAogaW5saW5lIHZvaWQqIE9wdGlv
bnM6OmFkZHJlc3NPZk9wdGlvbihPcHRpb25zOjpJRCBpZCkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaAkod29ya2luZyBjb3B5KQpA
QCAtMzY5LDYgKzM2OSw4IEBAIEpTX0VYUE9SVF9QUklWQVRFIGJvb2wgY2FuVXNlSklUQ2FnZSgp
OwogICAgIHYoQm9vbCwgYWx3YXlzR2VuZXJhdGVQQ1RvQ29kZU9yaWdpbk1hcCwgZmFsc2UsIE5v
cm1hbCwgIlRoaXMgd2lsbCBtYWtlIHN1cmUgd2UgYWx3YXlzIGdlbmVyYXRlIGEgUENUb0NvZGVP
cmlnaW5NYXAgZm9yIEpJVGVkIGNvZGUuIikgXAogICAgIFwKICAgICB2KERvdWJsZSwgcmFuZG9t
SW50ZWdyaXR5QXVkaXRSYXRlLCAwLjA1LCBOb3JtYWwsICJQcm9iYWJpbGl0eSBvZiByYW5kb20g
aW50ZWdyaXR5IGF1ZGl0cyBbMC4wIC0gMS4wXSIpIFwKKyAgICB2KEJvb2wsIHZlcmlmeUdDLCBm
YWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCisgICAgdihCb29sLCB2ZXJib3NlVmVyaWZ5R0MsIGZh
bHNlLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KEJvb2wsIHZlcmlmeUhlYXAsIGZhbHNlLCBO
b3JtYWwsIG51bGxwdHIpIFwKICAgICB2KFVuc2lnbmVkLCBudW1iZXJPZkdDQ3ljbGVzVG9SZWNv
cmRGb3JWZXJpZmljYXRpb24sIDMsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIFwKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb2dyYW1FeGVjdXRhYmxlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9ncmFtRXhlY3V0YWJsZS5j
cHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1By
b2dyYW1FeGVjdXRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTIwOCw3ICsyMDgsOCBAQCBh
dXRvIFByb2dyYW1FeGVjdXRhYmxlOjplbnN1cmVUZW1wbGF0ZU9iCiAgICAgcmV0dXJuIGVuc3Vy
ZVRlbXBsYXRlT2JqZWN0TWFwSW1wbChtX3RlbXBsYXRlT2JqZWN0TWFwKTsKIH0KIAotdm9pZCBQ
cm9ncmFtRXhlY3V0YWJsZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9y
JiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgUHJvZ3JhbUV4ZWN1
dGFibGU6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikK
IHsKICAgICBQcm9ncmFtRXhlY3V0YWJsZSogdGhpc09iamVjdCA9IGpzQ2FzdDxQcm9ncmFtRXhl
Y3V0YWJsZSo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVj
dCwgaW5mbygpKTsKQEAgLTIyMiw0ICsyMjMsNiBAQCB2b2lkIFByb2dyYW1FeGVjdXRhYmxlOjp2
aXNpdENoaWxkcmVuKEpTCiAgICAgfQogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oUHJvZ3Jh
bUV4ZWN1dGFibGUpOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1Byb2dyYW1FeGVjdXRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvZ3JhbUV4ZWN1dGFibGUuaAkocmV2aXNpb24gMjcy
ODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvZ3JhbUV4ZWN1dGFibGUu
aAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDktMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDktMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTgxLDcgKzgxLDcgQEAgcHJpdmF0ZToKIAogICAgIFByb2dy
YW1FeGVjdXRhYmxlKEpTR2xvYmFsT2JqZWN0KiwgY29uc3QgU291cmNlQ29kZSYpOwogCi0gICAg
c3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERF
Q0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBXcml0ZUJhcnJpZXI8VW5saW5rZWRQcm9ncmFt
Q29kZUJsb2NrPiBtX3VubGlua2VkUHJvZ3JhbUNvZGVCbG9jazsKICAgICBXcml0ZUJhcnJpZXI8
RXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZT4gbV9wcm9ncmFtQ29kZUJsb2NrOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlNYXBIYXNoVGFibGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eU1hcEhhc2hUYWJs
ZS5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Q
cm9wZXJ0eU1hcEhhc2hUYWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqICBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDA0LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTEzMyw3ICsxMzMsNyBAQCBwdWJsaWM6
CiAKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNEZXN0cnVjdGlvbiA9IHRydWU7CiAg
ICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENo
aWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJF
TjsKIAogICAgIERFQ0xBUkVfRVhQT1JUX0lORk87CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1Byb3BlcnR5VGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5VGFibGUuY3BwCShyZXZpc2lvbiAyNzI4MzApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eVRhYmxlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0xMTgsNyArMTE4LDggQEAgdm9pZCBQcm9wZXJ0eVRhYmxlOjpmaW5pc2hD
cmVhdGlvbihWTSYgdgogICAgIHZtLmhlYXAucmVwb3J0RXh0cmFNZW1vcnlBbGxvY2F0ZWQoZGF0
YVNpemUoKSk7CiB9CiAKLXZvaWQgUHJvcGVydHlUYWJsZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwq
IGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4K
K3ZvaWQgUHJvcGVydHlUYWJsZTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNp
dG9yJiB2aXNpdG9yKQogewogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8UHJvcGVydHlU
YWJsZSo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwg
aW5mbygpKTsKQEAgLTEyNiw2ICsxMjcsOCBAQCB2b2lkIFByb3BlcnR5VGFibGU6OnZpc2l0Q2hp
bGRyZW4oSlNDZWxsCiAgICAgdmlzaXRvci5yZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQodGhpc09i
amVjdC0+ZGF0YVNpemUoKSk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihQcm9wZXJ0eVRh
YmxlKTsKKwogdm9pZCBQcm9wZXJ0eVRhYmxlOjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKIHsKICAg
ICBzdGF0aWNfY2FzdDxQcm9wZXJ0eVRhYmxlKj4oY2VsbCktPlByb3BlcnR5VGFibGU6On5Qcm9w
ZXJ0eVRhYmxlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm94eU9i
amVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJv
eHlPYmplY3QuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9Qcm94eU9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjAgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMTU4LDcgKzExNTgs
OCBAQCBib29sIFByb3h5T2JqZWN0Ojppc1Jldm9rZWQoKSBjb25zdAogICAgIHJldHVybiBoYW5k
bGVyKCkuaXNOdWxsKCk7CiB9CiAKLXZvaWQgUHJveHlPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlND
ZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0
b3I+Cit2b2lkIFByb3h5T2JqZWN0Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZp
c2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgUHJveHlPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8
UHJveHlPYmplY3QqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNP
YmplY3QsIGluZm8oKSk7CkBAIC0xMTY4LDQgKzExNjksNiBAQCB2b2lkIFByb3h5T2JqZWN0Ojp2
aXNpdENoaWxkcmVuKEpTQ2VsbCogCiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9o
YW5kbGVyKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKFByb3h5T2JqZWN0KTsKKwogfSAv
LyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm94
eU9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1By
b3h5T2JqZWN0LmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1Byb3h5T2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtOTEsNyArOTEsNyBAQCBwcml2YXRl
OgogICAgIHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBKU0dsb2Jh
bE9iamVjdCosIFByb3BlcnR5TmFtZUFycmF5JiwgRG9udEVudW1Qcm9wZXJ0aWVzTW9kZSk7CiAg
ICAgc3RhdGljIGJvb2wgc2V0UHJvdG90eXBlKEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBK
U1ZhbHVlIHByb3RvdHlwZSwgYm9vbCBzaG91bGRUaHJvd0lmQ2FudFNldCk7CiAgICAgc3RhdGlj
IEpTVmFsdWUgZ2V0UHJvdG90eXBlKEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqKTsKLSAgICBz
dGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVD
TEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90Q29tbW9u
KEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKICAgICBib29s
IHBlcmZvcm1JbnRlcm5hbE1ldGhvZEdldE93blByb3BlcnR5KEpTR2xvYmFsT2JqZWN0KiwgUHJv
cGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1Byb3h5UmV2b2tlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9Qcm94eVJldm9rZS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3h5UmV2b2tlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgUmln
aHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwg
UmlnaHRzIFJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02OSw3
ICs2OSw4IEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihwZXJmb3JtUHJveHlSZXYKICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCi12b2lkIFByb3h5UmV2
b2tlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0
ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBQcm94eVJldm9rZTo6dmlzaXRDaGlsZHJl
bkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFByb3h5UmV2b2tl
KiB0aGlzT2JqZWN0ID0ganNDYXN0PFByb3h5UmV2b2tlKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dD
X09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNzgsNCArNzksNiBAQCB2
b2lkIFByb3h5UmV2b2tlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogCiAgICAgdmlzaXRvci5hcHBl
bmQodGhpc09iamVjdC0+bV9wcm94eSk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihQcm94
eVJldm9rZSk7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvUHJveHlSZXZva2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9Qcm94eVJldm9rZS5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm94eVJldm9rZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE5IEFwcGxlIEluYy4gQWxs
IFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIxIEFwcGxlIEluYy4g
QWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
NTIsNyArNTIsNyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihW
TSYsIFByb3h5T2JqZWN0Kik7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwq
LCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAgICAgSlNWYWx1
ZSBwcm94eSgpIHsgcmV0dXJuIG1fcHJveHkuZ2V0KCk7IH0KICAgICB2b2lkIHNldFByb3h5VG9O
dWxsKFZNJiB2bSkgeyByZXR1cm4gbV9wcm94eS5zZXQodm0sIHRoaXMsIGpzTnVsbCgpKTsgfQog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBDYWNoZWRSZXN1bHQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENh
Y2hlZFJlc3VsdC5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1JlZ0V4cENhY2hlZFJlc3VsdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzEs
NyArMzEsOCBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotdm9pZCBSZWdFeHBDYWNoZWRSZXN1bHQ6
OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUg
VmlzaXRvcj4KK3ZvaWQgUmVnRXhwQ2FjaGVkUmVzdWx0Ojp2aXNpdEFnZ3JlZ2F0ZShWaXNpdG9y
JiB2aXNpdG9yKQogewogICAgIHZpc2l0b3IuYXBwZW5kKG1fbGFzdElucHV0KTsKICAgICB2aXNp
dG9yLmFwcGVuZChtX2xhc3RSZWdFeHApOwpAQCAtNDMsNiArNDQsOSBAQCB2b2lkIFJlZ0V4cENh
Y2hlZFJlc3VsdDo6dmlzaXRBZ2dyZWdhdGUoCiAgICAgfQogfQogCit0ZW1wbGF0ZSB2b2lkIFJl
Z0V4cENhY2hlZFJlc3VsdDo6dmlzaXRBZ2dyZWdhdGUoQWJzdHJhY3RTbG90VmlzaXRvciYpOwor
dGVtcGxhdGUgdm9pZCBSZWdFeHBDYWNoZWRSZXN1bHQ6OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNp
dG9yJik7CisKIEpTQXJyYXkqIFJlZ0V4cENhY2hlZFJlc3VsdDo6bGFzdFJlc3VsdChKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU09iamVjdCogb3duZXIpCiB7CiAgICAgVk0mIHZtID0g
Z2xvYmFsT2JqZWN0LT52bSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
UmVnRXhwQ2FjaGVkUmVzdWx0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvUmVnRXhwQ2FjaGVkUmVzdWx0LmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENhY2hlZFJlc3VsdC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTY1LDcgKzY1LDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9yZWlmaWVk
ID8gbV9yZWlmaWVkSW5wdXQuZ2V0KCkgOiBtX2xhc3RJbnB1dC5nZXQoKTsKICAgICB9CiAKLSAg
ICB2b2lkIHZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJik7CisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgVmlzaXRvcj4gdm9pZCB2aXNpdEFnZ3JlZ2F0ZShWaXNpdG9yJik7CiAKICAgICAvLyBtX2xh
c3RSZWdFeHAgd291bGQgYmUgbnVsbHB0ciB3aGVuIFJlZ0V4cENhY2hlZFJlc3VsdCBpcyBub3Qg
cmVpZmllZC4KICAgICAvLyBJZiB3ZSBmaW5kIG1fbGFzdFJlZ0V4cCBpcyBudWxscHRyLCBpdCBt
ZWFucyB0aGlzIHNob3VsZCBob2xkIHRoZSBlbXB0eSBSZWdFeHAuCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBHbG9iYWxEYXRhLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBHbG9iYWxEYXRhLmNwcAkocmV2aXNp
b24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwR2xvYmFs
RGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxOS0yMDIxIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzAsMTEgKzMwLDE1IEBACiAKIG5hbWVzcGFjZSBKU0Mg
ewogCi12b2lkIFJlZ0V4cEdsb2JhbERhdGE6OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgUmVnRXhwR2xvYmFsRGF0
YTo6dmlzaXRBZ2dyZWdhdGUoVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBtX2NhY2hlZFJlc3Vs
dC52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKIH0KIAordGVtcGxhdGUgdm9pZCBSZWdFeHBHbG9i
YWxEYXRhOjp2aXNpdEFnZ3JlZ2F0ZShBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2
b2lkIFJlZ0V4cEdsb2JhbERhdGE6OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJik7CisKIEpT
VmFsdWUgUmVnRXhwR2xvYmFsRGF0YTo6Z2V0QmFja3JlZihKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCB1bnNpZ25lZCBpKQogewogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cEdsb2JhbERhdGEuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBHbG9iYWxE
YXRhLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1JlZ0V4cEdsb2JhbERhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE5LTIwMjEgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00MSw3ICs0MSw3IEBAIHB1YmxpYzoK
ICAgICB2b2lkIHNldElucHV0KEpTR2xvYmFsT2JqZWN0KiwgSlNTdHJpbmcqKTsKICAgICBKU1N0
cmluZyogaW5wdXQoKSB7IHJldHVybiBtX2NhY2hlZFJlc3VsdC5pbnB1dCgpOyB9CiAKLSAgICB2
b2lkIHZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
VmlzaXRvcj4gdm9pZCB2aXNpdEFnZ3JlZ2F0ZShWaXNpdG9yJik7CiAKICAgICBKU1ZhbHVlIGdl
dEJhY2tyZWYoSlNHbG9iYWxPYmplY3QqLCB1bnNpZ25lZCk7CiAgICAgSlNWYWx1ZSBnZXRMYXN0
UGFyZW4oSlNHbG9iYWxPYmplY3QqKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1JlZ0V4cE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvUmVnRXhwT2JqZWN0LmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw2ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDAgSGFycmkgUG9ydGVu
IChwb3J0ZW5Aa2RlLm9yZykKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAxOSBBcHBsZSBJbmMu
IEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMjEgQXBwbGUg
SW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwpAQCAtNDYsNyAr
NDYsOCBAQCB2b2lkIFJlZ0V4cE9iamVjdDo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtCiAgICAgQVNT
RVJUKHR5cGUoKSA9PSBSZWdFeHBPYmplY3RUeXBlKTsKIH0KIAotdm9pZCBSZWdFeHBPYmplY3Q6
OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBs
YXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFJlZ0V4cE9iamVjdDo6dmlzaXRDaGlsZHJlbklt
cGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFJlZ0V4cE9iamVjdCog
dGhpc09iamVjdCA9IGpzQ2FzdDxSZWdFeHBPYmplY3QqPihjZWxsKTsKICAgICBBU1NFUlRfR0Nf
T0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC01NSw2ICs1Niw4IEBAIHZv
aWQgUmVnRXhwT2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCoKICAgICB2aXNpdG9yLmFwcGVu
ZCh0aGlzT2JqZWN0LT5tX2xhc3RJbmRleCk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihS
ZWdFeHBPYmplY3QpOworCiBib29sIFJlZ0V4cE9iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90KEpT
T2JqZWN0KiBvYmplY3QsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFByb3BlcnR5TmFt
ZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBWTSYgdm0gPSBnbG9i
YWxPYmplY3QtPnZtKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdF
eHBPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9S
ZWdFeHBPYmplY3QuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvUmVnRXhwT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAv
KgogICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAwIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5v
cmcpCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMTkgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJl
c2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwMy0yMDIxIEFwcGxlIEluYy4gQWxsIFJpZ2h0
cyBSZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKQEAgLTEzMyw3ICsxMzMsNyBAQCBwcml2
YXRlOgogICAgIEpTX0VYUE9SVF9QUklWQVRFIFJlZ0V4cE9iamVjdChWTSYsIFN0cnVjdHVyZSos
IFJlZ0V4cCopOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0m
KTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3Im
KTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgYm9vbCBsYXN0SW5kZXhJc1dy
aXRhYmxlKCkgY29uc3QKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TYW1wbGluZ1Byb2ZpbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TYW1wbGluZ1Byb2ZpbGVyLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTY1Miw3ICs2NTIsNyBAQCB2b2lkIFNhbXBsaW5nUHJvZmlsZXI6OnByb2Nlc3NV
bnZlcmlmaWVkCiAgICAgbV91bnByb2Nlc3NlZFN0YWNrVHJhY2VzLmNsZWFyKCk7CiB9CiAKLXZv
aWQgU2FtcGxpbmdQcm9maWxlcjo6dmlzaXQoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIFNh
bXBsaW5nUHJvZmlsZXI6OnZpc2l0KEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAg
ICAgUkVMRUFTRV9BU1NFUlQobV9sb2NrLmlzTG9ja2VkKCkpOwogICAgIGZvciAoSlNDZWxsKiBj
ZWxsIDogbV9saXZlQ2VsbFBvaW50ZXJzKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU2FtcGxpbmdQcm9maWxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1NhbXBsaW5nUHJvZmlsZXIuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTE3MSw3ICsxNzEsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBub3RpY2VKU0xvY2tBY3F1aXNp
dGlvbigpOwogICAgIHZvaWQgbm90aWNlVk1FbnRyeSgpOwogICAgIHZvaWQgc2h1dGRvd24oKTsK
LSAgICB2b2lkIHZpc2l0KFNsb3RWaXNpdG9yJik7CisgICAgdm9pZCB2aXNpdChBYnN0cmFjdFNs
b3RWaXNpdG9yJik7CiAgICAgTG9jayYgZ2V0TG9jaygpIHsgcmV0dXJuIG1fbG9jazsgfQogICAg
IHZvaWQgc2V0VGltaW5nSW50ZXJ2YWwoU2Vjb25kcyBpbnRlcnZhbCkgeyBtX3RpbWluZ0ludGVy
dmFsID0gaW50ZXJ2YWw7IH0KICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHN0YXJ0KCk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29wZWRBcmd1bWVudHMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlZEFyZ3VtZW50
cy5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1Njb3BlZEFyZ3VtZW50cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC05OCw3ICs5OCw4IEBAIFNj
b3BlZEFyZ3VtZW50cyogU2NvcGVkQXJndW1lbnRzOjpjcmVhdGUKICAgICByZXR1cm4gcmVzdWx0
OwogfQogCi12b2lkIFNjb3BlZEFyZ3VtZW50czo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGws
IFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQg
U2NvcGVkQXJndW1lbnRzOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3Im
IHZpc2l0b3IpCiB7CiAgICAgU2NvcGVkQXJndW1lbnRzKiB0aGlzT2JqZWN0ID0gc3RhdGljX2Nh
c3Q8U2NvcGVkQXJndW1lbnRzKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklU
Uyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtMTE1LDYgKzExNiw4IEBAIHZvaWQgU2NvcGVkQXJn
dW1lbnRzOjp2aXNpdENoaWxkcmVuKEpTQ2UKICAgICB9CiB9CiAKK0RFRklORV9WSVNJVF9DSElM
RFJFTihTY29wZWRBcmd1bWVudHMpOworCiBTdHJ1Y3R1cmUqIFNjb3BlZEFyZ3VtZW50czo6Y3Jl
YXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1
ZSBwcm90b3R5cGUpCiB7CiAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxP
YmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oU2NvcGVkQXJndW1lbnRzVHlwZSwgU3RydWN0dXJl
RmxhZ3MpLCBpbmZvKCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2Nv
cGVkQXJndW1lbnRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU2NvcGVkQXJndW1lbnRzLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1Njb3BlZEFyZ3VtZW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE5IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjMs
OSArNjMsOSBAQCBwdWJsaWM6CiAgICAgCiAgICAgLy8gQ3JlYXRlcyBhbiBhcmd1bWVudHMgb2Jq
ZWN0IGJ5IGNvcHlpbmcgdGhlIGFyZ3VtZW50cyBmcm9tIGEgd2VsbC1kZWZpbmVkIHN0YWNrIGxv
Y2F0aW9uLgogICAgIHN0YXRpYyBTY29wZWRBcmd1bWVudHMqIGNyZWF0ZUJ5Q29weWluZ0Zyb20o
Vk0mLCBTdHJ1Y3R1cmUqLCBSZWdpc3RlciogYXJndW1lbnRzU3RhcnQsIHVuc2lnbmVkIHRvdGFs
TGVuZ3RoLCBKU0Z1bmN0aW9uKiBjYWxsZWUsIFNjb3BlZEFyZ3VtZW50c1RhYmxlKiwgSlNMZXhp
Y2FsRW52aXJvbm1lbnQqKTsKLSAgICAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpT
Q2VsbCosIFNsb3RWaXNpdG9yJik7Ci0gICAgCisKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVO
OworCiAgICAgdWludDMyX3QgaW50ZXJuYWxMZW5ndGgoKSBjb25zdAogICAgIHsKICAgICAgICAg
cmV0dXJuIG1fdG90YWxMZW5ndGg7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwCShyZXZp
c2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TaW1wbGVUeXBl
ZEFycmF5Q29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjIsNyArNjIsNyBAQCBi
b29sIFNpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyOjppc0F0b21pCiAgICAgcmV0dXJuIG1fYWxs
b3dBdG9taWNzV2FpdDsKIH0KIAotYm9vbCBTaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlcjo6SlNB
cnJheUJ1ZmZlck93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxK
U0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNv
bnN0IGNoYXIqKiByZWFzb24pCitib29sIFNpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyOjpKU0Fy
cmF5QnVmZmVyT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpT
Qzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNp
dG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQogewogICAgIGlmIChVTkxJS0VMWShyZWFzb24pKQog
ICAgICAgICAqcmVhc29uID0gIkpTQXJyYXlCdWZmZXIgaXMgb3BhcXVlIHJvb3QiOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXIu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TaW1wbGVUeXBl
ZEFycmF5Q29udHJvbGxlci5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlci5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTU4LDcgKzU4LDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBjbGFzcyBKU0FycmF5QnVmZmVy
T3duZXIgZmluYWwgOiBwdWJsaWMgV2Vha0hhbmRsZU93bmVyIHsKICAgICBwdWJsaWM6Ci0gICAg
ICAgIGJvb2wgaXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtu
b3duPiwgdm9pZCogY29udGV4dCwgU2xvdFZpc2l0b3ImLCBjb25zdCBjaGFyKiogcmVhc29uKSBm
aW5hbDsKKyAgICAgICAgYm9vbCBpc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRs
ZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0LCBBYnN0cmFjdFNsb3RWaXNpdG9yJiwgY29u
c3QgY2hhcioqIHJlYXNvbikgZmluYWw7CiAgICAgICAgIHZvaWQgZmluYWxpemUoSlNDOjpIYW5k
bGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCkgZmluYWw7CiAgICAgfTsKIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU21hbGxTdHJpbmdzLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TbWFsbFN0cmluZ3MuY3BwCShyZXZp
c2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TbWFsbFN0cmlu
Z3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAwOCwgMjAxMCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMDgtMjAyMSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY2LDcgKzY2LDcgQEAgdm9pZCBTbWFsbFN0cmlu
Z3M6OmluaXRpYWxpemVDb21tb25TdHJpbgogICAgIHNldElzSW5pdGlhbGl6ZWQodHJ1ZSk7CiB9
CiAKLXZvaWQgU21hbGxTdHJpbmdzOjp2aXNpdFN0cm9uZ1JlZmVyZW5jZXMoU2xvdFZpc2l0b3Im
IHZpc2l0b3IpCit2b2lkIFNtYWxsU3RyaW5nczo6dmlzaXRTdHJvbmdSZWZlcmVuY2VzKEFic3Ry
YWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgbV9uZWVkc1RvQmVWaXNpdGVkID0gZmFs
c2U7CiAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZChtX2VtcHR5U3RyaW5nKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NtYWxsU3RyaW5ncy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NtYWxsU3RyaW5ncy5oCShyZXZpc2lv
biAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TbWFsbFN0cmluZ3Mu
aAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDgtMjAxOSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDgtMjAyMSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ5LDkgKzQ5LDkgQEAgY2xhc3MgU3RyaW5nSW1wbDsKIAog
bmFtZXNwYWNlIEpTQyB7CiAKK2NsYXNzIEFic3RyYWN0U2xvdFZpc2l0b3I7CiBjbGFzcyBWTTsK
IGNsYXNzIEpTU3RyaW5nOwotY2xhc3MgU2xvdFZpc2l0b3I7CiAKIHN0YXRpYyBjb25zdGV4cHIg
dW5zaWduZWQgbWF4U2luZ2xlQ2hhcmFjdGVyU3RyaW5nID0gMHhGRjsKIApAQCAtNzgsNyArNzgs
NyBAQCBwdWJsaWM6CiAgICAgSlNTdHJpbmcqKiBzaW5nbGVDaGFyYWN0ZXJTdHJpbmdzKCkgeyBy
ZXR1cm4gJm1fc2luZ2xlQ2hhcmFjdGVyU3RyaW5nc1swXTsgfQogCiAgICAgdm9pZCBpbml0aWFs
aXplQ29tbW9uU3RyaW5ncyhWTSYpOwotICAgIHZvaWQgdmlzaXRTdHJvbmdSZWZlcmVuY2VzKFNs
b3RWaXNpdG9yJik7CisgICAgdm9pZCB2aXNpdFN0cm9uZ1JlZmVyZW5jZXMoQWJzdHJhY3RTbG90
VmlzaXRvciYpOwogCiAjZGVmaW5lIEpTQ19DT01NT05fU1RSSU5HU19BQ0NFU1NPUl9ERUZJTklU
SU9OKG5hbWUpIFwKICAgICBKU1N0cmluZyogbmFtZSMjU3RyaW5nKCkgY29uc3QgICAgICAgICAg
ICAgICAgICAgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3BhcnNlQXJy
YXlWYWx1ZU1hcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU3BhcnNlQXJyYXlWYWx1ZU1hcC5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1NwYXJzZUFycmF5VmFsdWVNYXAuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMS0yMDE3IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMjEwLDcgKzIxMCw4IEBAIEpTVmFsdWUgU3BhcnNlQXJyYXlFbnRyeTo6Z2V0Tm9u
U3BhcnNlTW8KICAgICByZXR1cm4gQmFzZTo6Z2V0KCk7CiB9CiAKLXZvaWQgU3BhcnNlQXJyYXlW
YWx1ZU1hcDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9y
KQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6
dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAg
IFNwYXJzZUFycmF5VmFsdWVNYXAqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8U3BhcnNlQXJyYXlWYWx1
ZU1hcCo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwg
aW5mbygpKTsKQEAgLTIyMyw1ICsyMjQsNyBAQCB2b2lkIFNwYXJzZUFycmF5VmFsdWVNYXA6OnZp
c2l0Q2hpbGRyZW4oCiAgICAgdmlzaXRvci5yZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQodGhpc09i
amVjdC0+bV9yZXBvcnRlZENhcGFjaXR5ICogc2l6ZW9mKE1hcDo6S2V5VmFsdWVQYWlyVHlwZSkp
OwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oU3BhcnNlQXJyYXlWYWx1ZU1hcCk7CisKIH0g
Ly8gbmFtZXNwYWNlIEpTQwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
cGFyc2VBcnJheVZhbHVlTWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU3BhcnNlQXJyYXlWYWx1ZU1hcC5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TcGFyc2VBcnJheVZhbHVlTWFwLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTkgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0xMTUsNyArMTE1LDcgQEAgcHVibGljOgogICAgIAogICAgIHN0YXRpYyBTdHJ1
Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBwcm90
b3R5cGUpOwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90Vmlz
aXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBib29sIHNwYXJzZU1v
ZGUoKQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0YWNrRnJh
bWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0YWNr
RnJhbWUuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TdGFja0ZyYW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE0MSwxMyArMTQxLDUgQEAg
U3RyaW5nIFN0YWNrRnJhbWU6OnRvU3RyaW5nKFZNJiB2bSkgY29ucwogICAgIHJldHVybiB0cmFj
ZUJ1aWxkLnRvU3RyaW5nKCkuaW1wbCgpOwogfQogCi12b2lkIFN0YWNrRnJhbWU6OnZpc2l0Q2hp
bGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCi17Ci0gICAgaWYgKG1fY2FsbGVlKQotICAgICAg
ICB2aXNpdG9yLmFwcGVuZChtX2NhbGxlZSk7Ci0gICAgaWYgKG1fY29kZUJsb2NrKQotICAgICAg
ICB2aXNpdG9yLmFwcGVuZChtX2NvZGVCbG9jayk7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIEpTQwog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdGFja0ZyYW1lLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RhY2tGcmFtZS5oCShyZXZp
c2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdGFja0ZyYW1l
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0yNiw2ICsyNiw3IEBACiAjcHJhZ21hIG9uY2UKIAogI2lu
Y2x1ZGUgIkhlYXAuaCIKKyNpbmNsdWRlICJTbG90VmlzaXRvck1hY3Jvcy5oIgogI2luY2x1ZGUg
IlZNLmgiCiAjaW5jbHVkZSAiV2FzbUluZGV4T3JOYW1lLmgiCiAjaW5jbHVkZSAiV3JpdGVCYXJy
aWVyLmgiCkBAIC0zNSw3ICszNiw2IEBAIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBDb2RlQmxv
Y2s7CiBjbGFzcyBKU09iamVjdDsKLWNsYXNzIFNsb3RWaXNpdG9yOwogCiBjbGFzcyBTdGFja0Zy
YW1lIHsKIHB1YmxpYzoKQEAgLTU3LDggKzU3LDE2IEBAIHB1YmxpYzoKICAgICAgICAgQVNTRVJU
KGhhc0J5dGVjb2RlSW5kZXgoKSk7CiAgICAgICAgIHJldHVybiBtX2J5dGVjb2RlSW5kZXg7CiAg
ICAgfQotICAgIAotICAgIHZvaWQgdmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYpOworCisgICAg
dGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KKyAgICB2b2lkIHZpc2l0Q2hpbGRyZW4oVmlzaXRv
ciYgdmlzaXRvcikKKyAgICB7CisgICAgICAgIGlmIChtX2NhbGxlZSkKKyAgICAgICAgICAgIHZp
c2l0b3IuYXBwZW5kKG1fY2FsbGVlKTsKKyAgICAgICAgaWYgKG1fY29kZUJsb2NrKQorICAgICAg
ICAgICAgdmlzaXRvci5hcHBlbmQobV9jb2RlQmxvY2spOworICAgIH0KKwogICAgIGJvb2wgaXNN
YXJrZWQoVk0mIHZtKSBjb25zdCB7IHJldHVybiAoIW1fY2FsbGVlIHx8IHZtLmhlYXAuaXNNYXJr
ZWQobV9jYWxsZWUuZ2V0KCkpKSAmJiAoIW1fY29kZUJsb2NrIHx8IHZtLmhlYXAuaXNNYXJrZWQo
bV9jb2RlQmxvY2suZ2V0KCkpKTsgfQogCiBwcml2YXRlOgpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOC0yMDE5IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDIxIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAyMCBBbGV4ZXkgU2h2
YXlrYSA8c2h2YWlrYWxlc2hAZ21haWwuY29tPi4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTEyNjgs
NyArMTI2OCw4IEBAIHZvaWQgU3RydWN0dXJlOjpkaWRUcmFuc2l0aW9uRnJvbVRoaXNTdHIKICAg
ICAgICAgbV90cmFuc2l0aW9uV2F0Y2hwb2ludFNldC5maXJlQWxsKHZtKCksIFN0cnVjdHVyZUZp
cmVEZXRhaWwodGhpcykpOwogfQogCi12b2lkIFN0cnVjdHVyZTo6dmlzaXRDaGlsZHJlbihKU0Nl
bGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRv
cj4KK3ZvaWQgU3RydWN0dXJlOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0
b3ImIHZpc2l0b3IpCiB7CiAgICAgU3RydWN0dXJlKiB0aGlzT2JqZWN0ID0ganNDYXN0PFN0cnVj
dHVyZSo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwg
aW5mbygpKTsKQEAgLTEyOTAsMzIgKzEyOTEsMzggQEAgdm9pZCBTdHJ1Y3R1cmU6OnZpc2l0Q2hp
bGRyZW4oSlNDZWxsKiBjZQogICAgICAgICAvLyBOT1RFOiBUaGlzIGNhbiBpbnRlcmxlYXZlIGlu
IHBpbigpLCBpbiB3aGljaCBjYXNlIGl0IG1heSBzZWUgYSBudWxsIHByb3BlcnR5IHRhYmxlLgog
ICAgICAgICAvLyBUaGF0J3MgZmluZSwgYmVjYXVzZSB0aGVuIHRoZSBiYXJyaWVyIHdpbGwgZmly
ZSBhbmQgd2Ugd2lsbCBzY2FuIHRoaXMgYWdhaW4uCiAgICAgICAgIHZpc2l0b3IuYXBwZW5kKHRo
aXNPYmplY3QtPm1fcHJvcGVydHlUYWJsZVVuc2FmZSk7Ci0gICAgfSBlbHNlIGlmICh2aXNpdG9y
LmlzQW5hbHl6aW5nSGVhcCgpKQorICAgIH0gZWxzZSBpZiAodmlzaXRvci52bSgpLmlzQW5hbHl6
aW5nSGVhcCgpKQogICAgICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX3Byb3BlcnR5
VGFibGVVbnNhZmUpOwogICAgIGVsc2UgaWYgKHRoaXNPYmplY3QtPm1fcHJvcGVydHlUYWJsZVVu
c2FmZSkKICAgICAgICAgdGhpc09iamVjdC0+bV9wcm9wZXJ0eVRhYmxlVW5zYWZlLmNsZWFyKCk7
CiB9CiAKLWJvb2wgU3RydWN0dXJlOjppc0NoZWFwRHVyaW5nR0MoVk0mIHZtKQorREVGSU5FX1ZJ
U0lUX0NISUxEUkVOKFN0cnVjdHVyZSk7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Citi
b29sIFN0cnVjdHVyZTo6aXNDaGVhcER1cmluZ0dDKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAg
Ly8gRklYTUU6IFdlIGNvdWxkIG1ha2UgdGhpcyBldmVuIHNhZmVyIGJ5IHJldHVybmluZyBmYWxz
ZSBpZiB0aGlzIHN0cnVjdHVyZSdzIHByb3BlcnR5IHRhYmxlCiAgICAgLy8gaGFzIGFueSBsYXJn
ZSBwcm9wZXJ0eSBuYW1lcy4KICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTU3MzM0CiAgICAgCi0gICAgcmV0dXJuICghbV9nbG9iYWxPYmplY3QgfHwgdm0u
aGVhcC5pc01hcmtlZChtX2dsb2JhbE9iamVjdC5nZXQoKSkpCi0gICAgICAgICYmIChoYXNQb2x5
UHJvdG8oKSB8fCAhc3RvcmVkUHJvdG90eXBlT2JqZWN0KCkgfHwgdm0uaGVhcC5pc01hcmtlZChz
dG9yZWRQcm90b3R5cGVPYmplY3QoKSkpOworICAgIHJldHVybiAoIW1fZ2xvYmFsT2JqZWN0IHx8
IHZpc2l0b3IuaXNNYXJrZWQobV9nbG9iYWxPYmplY3QuZ2V0KCkpKQorICAgICAgICAmJiAoaGFz
UG9seVByb3RvKCkgfHwgIXN0b3JlZFByb3RvdHlwZU9iamVjdCgpIHx8IHZpc2l0b3IuaXNNYXJr
ZWQoc3RvcmVkUHJvdG90eXBlT2JqZWN0KCkpKTsKIH0KIAotYm9vbCBTdHJ1Y3R1cmU6Om1hcmtJ
ZkNoZWFwKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4K
K2Jvb2wgU3RydWN0dXJlOjptYXJrSWZDaGVhcChWaXNpdG9yJiB2aXNpdG9yKQogewotICAgIFZN
JiB2bSA9IHZpc2l0b3Iudm0oKTsKLSAgICBpZiAoIWlzQ2hlYXBEdXJpbmdHQyh2bSkpCi0gICAg
ICAgIHJldHVybiB2bS5oZWFwLmlzTWFya2VkKHRoaXMpOwotICAgIAorICAgIGlmICghaXNDaGVh
cER1cmluZ0dDKHZpc2l0b3IpKQorICAgICAgICByZXR1cm4gdmlzaXRvci5pc01hcmtlZCh0aGlz
KTsKKwogICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQodGhpcyk7CiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKK3RlbXBsYXRlIGJvb2wgU3RydWN0dXJlOjptYXJrSWZDaGVhcChTbG90VmlzaXRv
ciYpOwordGVtcGxhdGUgYm9vbCBTdHJ1Y3R1cmU6Om1hcmtJZkNoZWFwKEFic3RyYWN0U2xvdFZp
c2l0b3ImKTsKKwogUmVmPFN0cnVjdHVyZVNoYXBlPiBTdHJ1Y3R1cmU6OnRvU3RydWN0dXJlU2hh
cGUoSlNWYWx1ZSB2YWx1ZSwgYm9vbCYgc2F3UG9seVByb3RvU3RydWN0dXJlKQogewogICAgIFJl
ZjxTdHJ1Y3R1cmVTaGFwZT4gYmFzZVNoYXBlID0gU3RydWN0dXJlU2hhcGU6OmNyZWF0ZSgpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgJKHJldmlzaW9u
IDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOC0y
MDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAw
OC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtNjAsNyArNjAsNiBAQCBjbGFzcyBQcm9wZXJ0eU5hbWVBcnJheURh
dGE7CiBjbGFzcyBQcm9wZXJ0eVRhYmxlOwogY2xhc3MgU3RydWN0dXJlQ2hhaW47CiBjbGFzcyBT
dHJ1Y3R1cmVTaGFwZTsKLWNsYXNzIFNsb3RWaXNpdG9yOwogY2xhc3MgSlNTdHJpbmc7CiBzdHJ1
Y3QgRHVtcENvbnRleHQ7CiBzdHJ1Y3QgSGFzaFRhYmxlOwpAQCAtMzEwLDcgKzMwOSw3IEBAIHB1
YmxpYzoKICAgICBKU1ZhbHVlIHByb3RvdHlwZUZvckxvb2t1cChKU0dsb2JhbE9iamVjdCosIEpT
Q2VsbCogYmFzZSkgY29uc3Q7CiAgICAgU3RydWN0dXJlQ2hhaW4qIHByb3RvdHlwZUNoYWluKFZN
JiwgSlNHbG9iYWxPYmplY3QqLCBKU09iamVjdCogYmFzZSkgY29uc3Q7CiAgICAgU3RydWN0dXJl
Q2hhaW4qIHByb3RvdHlwZUNoYWluKEpTR2xvYmFsT2JqZWN0KiwgSlNPYmplY3QqIGJhc2UpIGNv
bnN0OwotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3Im
KTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogICAgIAogICAgIC8vIEEgU3RydWN0dXJl
IGlzIGNoZWFwIHRvIG1hcmsgZHVyaW5nIEdDIGlmIGRvaW5nIHNvIHdvdWxkIG9ubHkgYWRkIGEg
c21hbGwgYW5kIGJvdW5kZWQgYW1vdW50CiAgICAgLy8gdG8gb3VyIGhlYXAgZm9vdHByaW50LiBG
b3IgZXhhbXBsZSwgaWYgdGhlIHN0cnVjdHVyZSByZWZlcnMgdG8gYSBnbG9iYWwgb2JqZWN0IHRo
YXQgaXMgbm90CkBAIC0zMTgsMTAgKzMxNywxMCBAQCBwdWJsaWM6CiAgICAgLy8gaW5jcmVhc2Ug
aW4gZm9vdHByaW50IGJlY2F1c2Ugbm8gb3RoZXIgb2JqZWN0IHJlZmVycyB0byB0aGF0IGdsb2Jh
bCBvYmplY3QuIFRoaXMgbWV0aG9kCiAgICAgLy8gcmV0dXJucyB0cnVlIGlmIGFsbCB1c2VyLWNv
bnRyb2xsZWQgKGFuZCBoZW5jZSB1bmJvdW5kZWQgaW4gc2l6ZSkgb2JqZWN0cyByZWZlcmVuY2Vk
IGZyb20gdGhlCiAgICAgLy8gU3RydWN0dXJlIGFyZSBhbHJlYWR5IG1hcmtlZC4KLSAgICBib29s
IGlzQ2hlYXBEdXJpbmdHQyhWTSYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IGJv
b2wgaXNDaGVhcER1cmluZ0dDKFZpc2l0b3ImKTsKICAgICAKICAgICAvLyBSZXR1cm5zIHRydWUg
aWYgdGhpcyBzdHJ1Y3R1cmUgaXMgbm93IG1hcmtlZC4KLSAgICBib29sIG1hcmtJZkNoZWFwKFNs
b3RWaXNpdG9yJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gYm9vbCBtYXJrSWZD
aGVhcChWaXNpdG9yJik7CiAgICAgCiAgICAgYm9vbCBoYXNSYXJlRGF0YSgpIGNvbnN0CiAgICAg
ewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlQ2hhaW4uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUNo
YWluLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU3RydWN0dXJlQ2hhaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY2LDcgKzY2LDggQEAgdm9pZCBT
dHJ1Y3R1cmVDaGFpbjo6ZmluaXNoQ3JlYXRpb24oVk0mIAogICAgIH0KIH0KIAotdm9pZCBTdHJ1
Y3R1cmVDaGFpbjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNp
dG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgU3RydWN0dXJlQ2hhaW46OnZp
c2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBT
dHJ1Y3R1cmVDaGFpbiogdGhpc09iamVjdCA9IGpzQ2FzdDxTdHJ1Y3R1cmVDaGFpbio+KGNlbGwp
OwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAg
LTgwLDQgKzgxLDYgQEAgdm9pZCBTdHJ1Y3R1cmVDaGFpbjo6dmlzaXRDaGlsZHJlbihKU0NlbAog
ICAgIH0KIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKFN0cnVjdHVyZUNoYWluKTsKKwogfSAv
LyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1
Y3R1cmVDaGFpbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1N0cnVjdHVyZUNoYWluLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1N0cnVjdHVyZUNoYWluLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01MSw3ICs1
MSw3IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBTdHJ1Y3R1cmVDaGFpbiogY3JlYXRlKFZNJiwg
SlNPYmplY3QqKTsKICAgICBTdHJ1Y3R1cmVJRCogaGVhZCgpIHsgcmV0dXJuIG1fdmVjdG9yLmdl
dCgpOyB9Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRv
ciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBzdGF0aWMgU3RydWN0dXJl
KiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBK
U1ZhbHVlIHByb3RvdHlwZSkKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TdHJ1Y3R1cmVSYXJlRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlUmFyZURhdGEuY3BwCShyZXZpc2lvbiAyNzI4MzApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVSYXJlRGF0YS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC02Nyw3ICs2Nyw4IEBAIFN0cnVjdHVyZVJhcmVEYXRhOjpTdHJ1Y3R1
cmVSYXJlRGF0YShWTSYKICAgICAgICAgbV9wcmV2aW91cy5zZXQodm0sIHRoaXMsIHByZXZpb3Vz
KTsKIH0KIAotdm9pZCBTdHJ1Y3R1cmVSYXJlRGF0YTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNl
bGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3Zv
aWQgU3RydWN0dXJlUmFyZURhdGE6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlz
aXRvciYgdmlzaXRvcikKIHsKICAgICBTdHJ1Y3R1cmVSYXJlRGF0YSogdGhpc09iamVjdCA9IGpz
Q2FzdDxTdHJ1Y3R1cmVSYXJlRGF0YSo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5I
RVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTg2LDYgKzg3LDggQEAgdm9pZCBTdHJ1Y3R1
cmVSYXJlRGF0YTo6dmlzaXRDaGlsZHJlbihKUwogICAgIH0KIH0KIAorREVGSU5FX1ZJU0lUX0NI
SUxEUkVOKFN0cnVjdHVyZVJhcmVEYXRhKTsKKwogLy8gLS0tLS0tLS0tLS0gQ2FjaGVkIHNwZWNp
YWwgcHJvcGVydGllcyBoZWxwZXIgd2F0Y2hwb2ludCBjbGFzc2VzIC0tLS0tLS0tLS0tCiAKIGNs
YXNzIENhY2hlZFNwZWNpYWxQcm9wZXJ0eUFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0
Y2hwb2ludCBmaW5hbCA6IHB1YmxpYyBBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNo
cG9pbnRCYXNlIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVy
ZVJhcmVEYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U3RydWN0dXJlUmFyZURhdGEuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlUmFyZURhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY4
LDcgKzY4LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0Rlc3Ry
dWN0aW9uID0gdHJ1ZTsKICAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwogCi0gICAg
c3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERF
Q0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1
Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUgcHJvdG90eXBlKTsKIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFibGUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJvbFRhYmxlLmNwcAkocmV2aXNp
b24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFibGUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMi0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtOTIsNyArOTIsOCBAQCB2b2lkIFN5bWJvbFRhYmxlOjpm
aW5pc2hDcmVhdGlvbihWTSYgdm0pCiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwogfQog
Ci12b2lkIFN5bWJvbFRhYmxlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogdGhpc0NlbGwsIFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgU3ltYm9s
VGFibGU6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogdGhpc0NlbGwsIFZpc2l0b3ImIHZpc2l0
b3IpCiB7CiAgICAgU3ltYm9sVGFibGUqIHRoaXNTeW1ib2xUYWJsZSA9IGpzQ2FzdDxTeW1ib2xU
YWJsZSo+KHRoaXNDZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNTeW1i
b2xUYWJsZSwgaW5mbygpKTsKQEAgLTEwOCw2ICsxMDksOCBAQCB2b2lkIFN5bWJvbFRhYmxlOjp2
aXNpdENoaWxkcmVuKEpTQ2VsbCogCiAgICAgdGhpc1N5bWJvbFRhYmxlLT5tX2xvY2FsVG9FbnRy
eSA9IG51bGxwdHI7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihTeW1ib2xUYWJsZSk7CisK
IGNvbnN0IFN5bWJvbFRhYmxlOjpMb2NhbFRvRW50cnlWZWMmIFN5bWJvbFRhYmxlOjpsb2NhbFRv
RW50cnkoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJikKIHsKICAgICBpZiAoVU5MSUtFTFkoIW1f
bG9jYWxUb0VudHJ5KSkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3lt
Ym9sVGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
eW1ib2xUYWJsZS5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TeW1ib2xUYWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAwNy0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNzMzLDcgKzczMyw3IEBA
IHB1YmxpYzoKICAgICAgICAgbV9zaW5nbGV0b24ubm90aWZ5V3JpdGUodm0sIHRoaXMsIHNjb3Bl
LCByZWFzb24pOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgREVD
TEFSRV9FWFBPUlRfSU5GTzsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
VHlwZVByb2ZpbGVyTG9nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9UeXBlUHJvZmlsZXJMb2cuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlUHJvZmlsZXJMb2cuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNC0yMDE5IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDIxIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMTI0LDcgKzEyNCw3IEBAIHZvaWQgVHlwZVByb2ZpbGVyTG9nOjpwcm9jZXNzTG9nRW50
cmllcygKICAgICB9CiB9CiAKLXZvaWQgVHlwZVByb2ZpbGVyTG9nOjp2aXNpdChTbG90VmlzaXRv
ciYgdmlzaXRvcikKK3ZvaWQgVHlwZVByb2ZpbGVyTG9nOjp2aXNpdChBYnN0cmFjdFNsb3RWaXNp
dG9yJiB2aXNpdG9yKQogewogICAgIGZvciAoTG9nRW50cnkqIGVudHJ5ID0gbV9sb2dTdGFydFB0
cjsgZW50cnkgIT0gbV9jdXJyZW50TG9nRW50cnlQdHI7ICsrZW50cnkpIHsKICAgICAgICAgdmlz
aXRvci5hcHBlbmRVbmJhcnJpZXJlZChlbnRyeS0+dmFsdWUpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvVHlwZVByb2ZpbGVyTG9nLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZVByb2ZpbGVyTG9nLmgJKHJldmlzaW9uIDI3Mjgz
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVQcm9maWxlckxvZy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTU5LDcgKzU5LDcgQEAgcHVibGljOgogICAgIEpTX0VYUE9SVF9QUklWQVRF
IHZvaWQgcHJvY2Vzc0xvZ0VudHJpZXMoVk0mLCBjb25zdCBTdHJpbmcmKTsKICAgICBMb2dFbnRy
eSogbG9nRW5kUHRyKCkgY29uc3QgeyByZXR1cm4gbV9sb2dFbmRQdHI7IH0KIAotICAgIHZvaWQg
dmlzaXQoU2xvdFZpc2l0b3ImKTsKKyAgICB2b2lkIHZpc2l0KEFic3RyYWN0U2xvdFZpc2l0b3Im
KTsKIAogICAgIHN0YXRpYyBwdHJkaWZmX3QgbG9nU3RhcnRPZmZzZXQoKSB7IHJldHVybiBPQkpF
Q1RfT0ZGU0VUT0YoVHlwZVByb2ZpbGVyTG9nLCBtX2xvZ1N0YXJ0UHRyKTsgfQogICAgIHN0YXRp
YyBwdHJkaWZmX3QgY3VycmVudExvZ0VudHJ5T2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNF
VE9GKFR5cGVQcm9maWxlckxvZywgbV9jdXJyZW50TG9nRW50cnlQdHIpOyB9CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMjEsNiArMTIxLDcg
QEAgY2xhc3MgRmFzdE1hbGxvY0FsaWduZWRNZW1vcnlBbGxvY2F0b3I7CiBjbGFzcyBHaWdhY2Fn
ZUFsaWduZWRNZW1vcnlBbGxvY2F0b3I7CiBjbGFzcyBIYW5kbGVTdGFjazsKIGNsYXNzIEhhc093
blByb3BlcnR5Q2FjaGU7CitjbGFzcyBIZWFwQW5hbHl6ZXI7CiBjbGFzcyBIZWFwUHJvZmlsZXI7
CiBjbGFzcyBJZGVudGlmaWVyOwogY2xhc3MgSW50ZXJwcmV0ZXI7CkBAIC0zMTAsNiArMzExLDEw
IEBAIHB1YmxpYzoKICAgICBIZWFwUHJvZmlsZXIqIGhlYXBQcm9maWxlcigpIGNvbnN0IHsgcmV0
dXJuIG1faGVhcFByb2ZpbGVyLmdldCgpOyB9CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgSGVhcFBy
b2ZpbGVyJiBlbnN1cmVIZWFwUHJvZmlsZXIoKTsKIAorICAgIGJvb2wgaXNBbmFseXppbmdIZWFw
KCkgY29uc3QgeyByZXR1cm4gbV9hY3RpdmVIZWFwQW5hbHl6ZXI7IH0KKyAgICBIZWFwQW5hbHl6
ZXIqIGFjdGl2ZUhlYXBBbmFseXplcigpIGNvbnN0IHsgcmV0dXJuIG1fYWN0aXZlSGVhcEFuYWx5
emVyOyB9CisgICAgdm9pZCBzZXRBY3RpdmVIZWFwQW5hbHl6ZXIoSGVhcEFuYWx5emVyKiBhbmFs
eXplcikgeyBtX2FjdGl2ZUhlYXBBbmFseXplciA9IGFuYWx5emVyOyB9CisKICNpZiBFTkFCTEUo
U0FNUExJTkdfUFJPRklMRVIpCiAgICAgU2FtcGxpbmdQcm9maWxlciogc2FtcGxpbmdQcm9maWxl
cigpIHsgcmV0dXJuIG1fc2FtcGxpbmdQcm9maWxlci5nZXQoKTsgfQogICAgIEpTX0VYUE9SVF9Q
UklWQVRFIFNhbXBsaW5nUHJvZmlsZXImIGVuc3VyZVNhbXBsaW5nUHJvZmlsZXIoUmVmPFN0b3B3
YXRjaD4mJik7CkBAIC0xMTk1LDkgKzEyMDAsMTAgQEAgcHVibGljOgogICAgIGJvb2wgZGlkRW50
ZXJWTSB7IGZhbHNlIH07CiBwcml2YXRlOgogICAgIGJvb2wgbV9mYWlsTmV4dE5ld0NvZGVCbG9j
ayB7IGZhbHNlIH07Ci0gICAgRGVsZXRlUHJvcGVydHlNb2RlIG1fZGVsZXRlUHJvcGVydHlNb2Rl
IHsgRGVsZXRlUHJvcGVydHlNb2RlOjpEZWZhdWx0IH07CiAgICAgYm9vbCBtX2dsb2JhbENvbnN0
UmVkZWNsYXJhdGlvblNob3VsZFRocm93IHsgdHJ1ZSB9OwogICAgIGJvb2wgbV9zaG91bGRCdWls
ZFBDVG9Db2RlT3JpZ2luTWFwcGluZyB7IGZhbHNlIH07CisgICAgRGVsZXRlUHJvcGVydHlNb2Rl
IG1fZGVsZXRlUHJvcGVydHlNb2RlIHsgRGVsZXRlUHJvcGVydHlNb2RlOjpEZWZhdWx0IH07Cisg
ICAgSGVhcEFuYWx5emVyKiBtX2FjdGl2ZUhlYXBBbmFseXplciB7IG51bGxwdHIgfTsKICAgICBz
dGQ6OnVuaXF1ZV9wdHI8Q29kZUNhY2hlPiBtX2NvZGVDYWNoZTsKICAgICBzdGQ6OnVuaXF1ZV9w
dHI8SW50bENhY2hlPiBtX2ludGxDYWNoZTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8QnVpbHRpbkV4
ZWN1dGFibGVzPiBtX2J1aWx0aW5FeGVjdXRhYmxlczsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1dlYWtNYXBJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9XZWFrTWFwSW1wbC5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtNYXBJbXBsLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDE3IFl1c3VrZSBTdXp1
a2kgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4uCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0zOSw4ICsz
OSw5IEBAIHZvaWQgV2Vha01hcEltcGw8V2Vha01hcEJ1Y2tldD46OmRlc3Ryb3kKICAgICBzdGF0
aWNfY2FzdDxXZWFrTWFwSW1wbCo+KGNlbGwpLT5+V2Vha01hcEltcGwoKTsKIH0KIAotdGVtcGxh
dGUgPHR5cGVuYW1lIFdlYWtNYXBCdWNrZXQ+Ci12b2lkIFdlYWtNYXBJbXBsPFdlYWtNYXBCdWNr
ZXQ+Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0
ZW1wbGF0ZTx0eXBlbmFtZSBXZWFrTWFwQnVja2V0PgordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRv
cj4KK3ZvaWQgV2Vha01hcEltcGw8V2Vha01hcEJ1Y2tldD46OnZpc2l0Q2hpbGRyZW5JbXBsKEpT
Q2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBXZWFrTWFwSW1wbCogdGhpc09i
amVjdCA9IGpzQ2FzdDxXZWFrTWFwSW1wbCo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1Rf
SU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTQ4LDYgKzQ5LDggQEAgdm9pZCBXZWFr
TWFwSW1wbDxXZWFrTWFwQnVja2V0Pjo6dmlzaXRDaAogICAgIHZpc2l0b3IucmVwb3J0RXh0cmFN
ZW1vcnlWaXNpdGVkKHRoaXNPYmplY3QtPm1fY2FwYWNpdHkgKiBzaXplb2YoV2Vha01hcEJ1Y2tl
dCkpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU5fV0lUSF9NT0RJRklFUih0ZW1wbGF0ZTx0
eXBlbmFtZSBXZWFrTWFwQnVja2V0PiwgV2Vha01hcEltcGw8V2Vha01hcEJ1Y2tldD4pOworCiB0
ZW1wbGF0ZSA8dHlwZW5hbWUgV2Vha01hcEJ1Y2tldD4KIHNpemVfdCBXZWFrTWFwSW1wbDxXZWFr
TWFwQnVja2V0Pjo6ZXN0aW1hdGVkU2l6ZShKU0NlbGwqIGNlbGwsIFZNJiB2bSkKIHsKQEAgLTU2
LDE1ICs1OSwxNCBAQCBzaXplX3QgV2Vha01hcEltcGw8V2Vha01hcEJ1Y2tldD46OmVzdGltCiB9
CiAKIHRlbXBsYXRlIDw+Ci12b2lkIFdlYWtNYXBJbXBsPFdlYWtNYXBCdWNrZXQ8V2Vha01hcEJ1
Y2tldERhdGFLZXk+Pjo6dmlzaXRPdXRwdXRDb25zdHJhaW50cyhKU0NlbGwqLCBTbG90VmlzaXRv
ciYpCit2b2lkIFdlYWtNYXBJbXBsPFdlYWtNYXBCdWNrZXQ8V2Vha01hcEJ1Y2tldERhdGFLZXk+
Pjo6dmlzaXRPdXRwdXRDb25zdHJhaW50cyhKU0NlbGwqLCBBYnN0cmFjdFNsb3RWaXNpdG9yJikK
IHsKICAgICAvLyBPbmx5IEpTV2Vha01hcCBuZWVkcyB0byBoYXJ2ZXN0IHZhbHVlIHJlZmVyZW5j
ZXMKIH0KIAogdGVtcGxhdGUgPD4KLXZvaWQgV2Vha01hcEltcGw8V2Vha01hcEJ1Y2tldDxXZWFr
TWFwQnVja2V0RGF0YUtleVZhbHVlPj46OnZpc2l0T3V0cHV0Q29uc3RyYWludHMoSlNDZWxsKiBj
ZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgV2Vha01hcEltcGw8V2Vha01hcEJ1Y2tl
dDxXZWFrTWFwQnVja2V0RGF0YUtleVZhbHVlPj46OnZpc2l0T3V0cHV0Q29uc3RyYWludHMoSlND
ZWxsKiBjZWxsLCBBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewotICAgIFZNJiB2bSA9
IHZpc2l0b3Iudm0oKTsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PFdlYWtNYXBJbXBs
Kj4oY2VsbCk7CiAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayh0aGlzT2JqZWN0LT5jZWxsTG9j
aygpKTsKICAgICBhdXRvKiBidWZmZXIgPSB0aGlzT2JqZWN0LT5idWZmZXIoKTsKQEAgLTcyLDcg
Kzc0LDcgQEAgdm9pZCBXZWFrTWFwSW1wbDxXZWFrTWFwQnVja2V0PFdlYWtNYXBCdQogICAgICAg
ICBhdXRvKiBidWNrZXQgPSBidWZmZXIgKyBpbmRleDsKICAgICAgICAgaWYgKGJ1Y2tldC0+aXNF
bXB0eSgpIHx8IGJ1Y2tldC0+aXNEZWxldGVkKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgaWYgKCF2bS5oZWFwLmlzTWFya2VkKGJ1Y2tldC0+a2V5KCkpKQorICAgICAgICBpZiAo
IXZpc2l0b3IuaXNNYXJrZWQoYnVja2V0LT5rZXkoKSkpCiAgICAgICAgICAgICBjb250aW51ZTsK
ICAgICAgICAgYnVja2V0LT52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKICAgICB9CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9XZWFrTWFwSW1wbC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtNYXBJbXBsLmgJKHJldmlzaW9uIDI3
MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtNYXBJbXBsLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIw
MTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2
LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAy
MDE3IFl1c3VrZSBTdXp1a2kgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4uCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CkBAIC0xNDUsNyArMTQ1LDcgQEAgcHVibGljOgogICAgIH0KIAogICAgIHRlbXBsYXRlIDx0
eXBlbmFtZSBUID0gRGF0YT4KLSAgICBBTFdBWVNfSU5MSU5FIHR5cGVuYW1lIHN0ZDo6ZW5hYmxl
X2lmPHN0ZDo6aXNfc2FtZTxULCBXZWFrTWFwQnVja2V0RGF0YUtleVZhbHVlPjo6dmFsdWU+Ojp0
eXBlIHZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorICAgIEFMV0FZU19JTkxJ
TkUgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19zYW1lPFQsIFdlYWtNYXBCdWNrZXRE
YXRhS2V5VmFsdWU+Ojp2YWx1ZT46OnR5cGUgdmlzaXRBZ2dyZWdhdGUoQWJzdHJhY3RTbG90Vmlz
aXRvciYgdmlzaXRvcikKICAgICB7CiAgICAgICAgIHZpc2l0b3IuYXBwZW5kKG1fZGF0YS52YWx1
ZSk7CiAgICAgfQpAQCAtMjAyLDcgKzIwMiw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgbmVlZHNEZXN0cnVjdGlvbiA9IHRydWU7CiAgICAgc3RhdGljIHZvaWQgZGVzdHJv
eShKU0NlbGwqKTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xv
dFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgc3RhdGljIHNp
emVfdCBlc3RpbWF0ZWRTaXplKEpTQ2VsbCosIFZNJik7CiAKQEAgLTMxMSw3ICszMTEsNyBAQCBw
dWJsaWM6CiAgICAgICAgIHJldHVybiB2bS53ZWFrU2V0U3BhY2U8bW9kZT4oKTsKICAgICB9CiAK
LSAgICBzdGF0aWMgdm9pZCB2aXNpdE91dHB1dENvbnN0cmFpbnRzKEpTQ2VsbCosIFNsb3RWaXNp
dG9yJik7CisgICAgc3RhdGljIHZvaWQgdmlzaXRPdXRwdXRDb25zdHJhaW50cyhKU0NlbGwqLCBB
YnN0cmFjdFNsb3RWaXNpdG9yJik7CiAgICAgdm9pZCBmaW5hbGl6ZVVuY29uZGl0aW9uYWxseShW
TSYpOwogCiBwcml2YXRlOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0pTRG9s
bGFyVk0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9KU0Rv
bGxhclZNLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rv
b2xzL0pTRG9sbGFyVk0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxNS0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjI0LDE0ICsyMjQsNyBAQCBw
dWJsaWM6CiAKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgUm9vdCopOwogCi0gICAgc3Rh
dGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9y
KQotICAgIHsKLSAgICAgICAgRG9sbGFyVk1Bc3NlcnRTY29wZSBhc3NlcnRTY29wZTsKLSAgICAg
ICAgRWxlbWVudCogdGhpc09iamVjdCA9IGpzQ2FzdDxFbGVtZW50Kj4oY2VsbCk7Ci0gICAgICAg
IEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKLSAgICAgICAg
QmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKLSAgICAgICAgdmlzaXRv
ci5hcHBlbmQodGhpc09iamVjdC0+bV9yb290KTsKLSAgICB9CisgICAgREVDTEFSRV9WSVNJVF9D
SElMRFJFTjsKIAogICAgIHN0YXRpYyBFbGVtZW50SGFuZGxlT3duZXIqIGhhbmRsZU93bmVyKCk7
CiAKQEAgLTI0NywxMCArMjQwLDIyIEBAIHByaXZhdGU6CiAgICAgV3JpdGVCYXJyaWVyPFJvb3Q+
IG1fcm9vdDsKIH07CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEVsZW1lbnQ6
OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKK3sKKyAg
ICBEb2xsYXJWTUFzc2VydFNjb3BlIGFzc2VydFNjb3BlOworICAgIEVsZW1lbnQqIHRoaXNPYmpl
Y3QgPSBqc0Nhc3Q8RWxlbWVudCo+KGNlbGwpOworICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJ
VFModGhpc09iamVjdCwgaW5mbygpKTsKKyAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmpl
Y3QsIHZpc2l0b3IpOworICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fcm9vdCk7Cit9
CisKK0RFRklORV9WSVNJVF9DSElMRFJFTihFbGVtZW50KTsKKwogY2xhc3MgRWxlbWVudEhhbmRs
ZU93bmVyIGZpbmFsIDogcHVibGljIFdlYWtIYW5kbGVPd25lciB7CiAgICAgV1RGX01BS0VfRkFT
VF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgYm9vbCBpc1JlYWNoYWJsZUZyb21PcGFxdWVSb290
cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIFNsb3RWaXNpdG9yJiB2
aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKSBmaW5hbAorICAgIGJvb2wgaXNSZWFjaGFibGVG
cm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBB
YnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKSBmaW5hbAog
ICAgIHsKICAgICAgICAgRG9sbGFyVk1Bc3NlcnRTY29wZSBhc3NlcnRTY29wZTsKICAgICAgICAg
aWYgKFVOTElLRUxZKHJlYXNvbikpCkBAIC0zMDQsMTggKzMwOSwyMyBAQCBwdWJsaWM6CiAgICAg
ICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUs
IFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKICAgICB9CiAK
LSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCogdGhpc09iamVjdCwgU2xvdFZp
c2l0b3ImIHZpc2l0b3IpCi0gICAgewotICAgICAgICBEb2xsYXJWTUFzc2VydFNjb3BlIGFzc2Vy
dFNjb3BlOwotICAgICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGlu
Zm8oKSk7Ci0gICAgICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7
Ci0gICAgICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdCh0aGlzT2JqZWN0KTsKLSAgICB9CisgICAg
REVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogcHJpdmF0ZToKICAgICBXZWFrPEVsZW1lbnQ+IG1f
ZWxlbWVudDsKIH07CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFJvb3Q6OnZp
c2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogdGhpc09iamVjdCwgVmlzaXRvciYgdmlzaXRvcikKK3sK
KyAgICBEb2xsYXJWTUFzc2VydFNjb3BlIGFzc2VydFNjb3BlOworICAgIEFTU0VSVF9HQ19PQkpF
Q1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKKyAgICBCYXNlOjp2aXNpdENoaWxkcmVu
KHRoaXNPYmplY3QsIHZpc2l0b3IpOworICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdCh0aGlzT2Jq
ZWN0KTsKK30KKworREVGSU5FX1ZJU0lUX0NISUxEUkVOKFJvb3QpOworCiBjbGFzcyBTaW1wbGVP
YmplY3QgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7CiBwdWJsaWM6CiAgICAgU2ltcGxlT2Jq
ZWN0KFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCkBAIC0zNDAsMTQgKzM1MCw3IEBAIHB1
YmxpYzoKICAgICAgICAgcmV0dXJuIHNpbXBsZU9iamVjdDsKICAgICB9CiAKLSAgICBzdGF0aWMg
dm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCi0g
ICAgewotICAgICAgICBEb2xsYXJWTUFzc2VydFNjb3BlIGFzc2VydFNjb3BlOwotICAgICAgICBT
aW1wbGVPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8U2ltcGxlT2JqZWN0Kj4oY2VsbCk7Ci0g
ICAgICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKLSAg
ICAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKLSAgICAgICAg
dmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9oaWRkZW5WYWx1ZSk7Ci0gICAgfQorICAgIERF
Q0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1
Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3Rv
dHlwZSkKICAgICB7CkBAIC0zODAsNiArMzgzLDE4IEBAIHByaXZhdGU6CiAgICAgV3JpdGVCYXJy
aWVyPEpTQzo6VW5rbm93bj4gbV9oaWRkZW5WYWx1ZTsKIH07CiAKK3RlbXBsYXRlPHR5cGVuYW1l
IFZpc2l0b3I+Cit2b2lkIFNpbXBsZU9iamVjdDo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBj
ZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIERvbGxhclZNQXNzZXJ0U2NvcGUgYXNzZXJ0
U2NvcGU7CisgICAgU2ltcGxlT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PFNpbXBsZU9iamVj
dCo+KGNlbGwpOworICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5m
bygpKTsKKyAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOworICAg
IHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1faGlkZGVuVmFsdWUpOworfQorCitERUZJTkVf
VklTSVRfQ0hJTERSRU4oU2ltcGxlT2JqZWN0KTsKKwogY2xhc3MgSW1wdXJlR2V0dGVyIDogcHVi
bGljIEpTTm9uRmluYWxPYmplY3QgewogcHVibGljOgogICAgIEltcHVyZUdldHRlcihWTSYgdm0s
IFN0cnVjdHVyZSogc3RydWN0dXJlKQpAQCAtNDM2LDE0ICs0NTEsNyBAQCBwdWJsaWM6CiAgICAg
ICAgIHJldHVybiBCYXNlOjpnZXRPd25Qcm9wZXJ0eVNsb3Qob2JqZWN0LCBnbG9iYWxPYmplY3Qs
IG5hbWUsIHNsb3QpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlND
ZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKLSAgICB7Ci0gICAgICAgIERvbGxhclZN
QXNzZXJ0U2NvcGUgYXNzZXJ0U2NvcGU7Ci0gICAgICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJ
VFMoY2VsbCwgaW5mbygpKTsKLSAgICAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbihjZWxsLCB2aXNp
dG9yKTsKLSAgICAgICAgSW1wdXJlR2V0dGVyKiB0aGlzT2JqZWN0ID0ganNDYXN0PEltcHVyZUdl
dHRlcio+KGNlbGwpOwotICAgICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2RlbGVn
YXRlKTsKLSAgICB9CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIHZvaWQgc2V0
RGVsZWdhdGUoVk0mIHZtLCBKU09iamVjdCogZGVsZWdhdGUpCiAgICAgewpAQCAtNDU0LDYgKzQ2
MiwxOCBAQCBwcml2YXRlOgogICAgIFdyaXRlQmFycmllcjxKU09iamVjdD4gbV9kZWxlZ2F0ZTsK
IH07CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEltcHVyZUdldHRlcjo6dmlz
aXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIERv
bGxhclZNQXNzZXJ0U2NvcGUgYXNzZXJ0U2NvcGU7CisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhF
UklUUyhjZWxsLCBpbmZvKCkpOworICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4oY2VsbCwgdmlzaXRv
cik7CisgICAgSW1wdXJlR2V0dGVyKiB0aGlzT2JqZWN0ID0ganNDYXN0PEltcHVyZUdldHRlcio+
KGNlbGwpOworICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fZGVsZWdhdGUpOworfQor
CitERUZJTkVfVklTSVRfQ0hJTERSRU4oSW1wdXJlR2V0dGVyKTsKKwogc3RhdGljIEpTQ19ERUNM
QVJFX0NVU1RPTV9HRVRURVIoY3VzdG9tR2V0dGVyVmFsdWVHZXR0ZXIpOwogc3RhdGljIEpTQ19E
RUNMQVJFX0NVU1RPTV9HRVRURVIoY3VzdG9tR2V0dGVyQWNlc3NvckdldHRlcik7CiAKQEAgLTE4
MjIsMTQgKzE4NDIsNyBAQCBwdWJsaWM6CiAgICAgICAgIHB1dERpcmVjdE5hdGl2ZUZ1bmN0aW9u
KHZtLCBnbG9iYWxPYmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJhZGRCeXRlcyIp
LCAwLCBmdW5jdGlvbldhc21TdHJlYW1pbmdDb21waWxlckFkZEJ5dGVzLCBOb0ludHJpbnNpYywg
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSkpOwogICAg
IH0KIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90Vmlz
aXRvciYgdmlzaXRvcikKLSAgICB7Ci0gICAgICAgIERvbGxhclZNQXNzZXJ0U2NvcGUgYXNzZXJ0
U2NvcGU7Ci0gICAgICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8V2FzbVN0cmVhbWluZ0Nv
bXBpbGVyKj4oY2VsbCk7Ci0gICAgICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09i
amVjdCwgaW5mbygpKTsKLSAgICAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2
aXNpdG9yKTsKLSAgICAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9wcm9taXNlKTsK
LSAgICB9CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIERFQ0xBUkVfSU5GTzsK
IApAQCAtMTgzNyw2ICsxODUwLDE4IEBAIHB1YmxpYzoKICAgICBSZWY8V2FzbTo6U3RyZWFtaW5n
Q29tcGlsZXI+IG1fc3RyZWFtaW5nQ29tcGlsZXI7CiB9OwogCit0ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPgordm9pZCBXYXNtU3RyZWFtaW5nQ29tcGlsZXI6OnZpc2l0Q2hpbGRyZW5JbXBsKEpT
Q2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBEb2xsYXJWTUFzc2VydFNjb3Bl
IGFzc2VydFNjb3BlOworICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8V2FzbVN0cmVhbWlu
Z0NvbXBpbGVyKj4oY2VsbCk7CisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2Jq
ZWN0LCBpbmZvKCkpOworICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRv
cik7CisgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9wcm9taXNlKTsKK30KKworREVG
SU5FX1ZJU0lUX0NISUxEUkVOKFdhc21TdHJlYW1pbmdDb21waWxlcik7CisKIGNvbnN0IENsYXNz
SW5mbyBXYXNtU3RyZWFtaW5nQ29tcGlsZXI6OnNfaW5mbyA9IHsgIldhc21TdHJlYW1pbmdDb21w
aWxlciIsICZCYXNlOjpzX2luZm8sIG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFC
TEUoV2FzbVN0cmVhbWluZ0NvbXBpbGVyKSB9OwogCiBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04o
ZnVuY3Rpb25XYXNtU3RyZWFtaW5nQ29tcGlsZXJBZGRCeXRlcywgKEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKSkKQEAgLTM2OTksMTMgKzM3MjQsMTYg
QEAgdm9pZCBKU0RvbGxhclZNOjphZGRDb25zdHJ1Y3RpYmxlRnVuY3RpbwogICAgIHB1dERpcmVj
dCh2bSwgaWRlbnRpZmllciwgSlNGdW5jdGlvbjo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIGFy
Z3VtZW50cywgaWRlbnRpZmllci5zdHJpbmcoKSwgZnVuY3Rpb24sIE5vSW50cmluc2ljLCBmdW5j
dGlvbiksIGpzRG9sbGFyVk1Qcm9wZXJ0eUF0dHJpYnV0ZXMpOwogfQogCi12b2lkIEpTRG9sbGFy
Vk06OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3Rl
bXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTRG9sbGFyVk06OnZpc2l0Q2hpbGRyZW5J
bXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU0RvbGxhclZNKiB0
aGlzT2JqZWN0ID0ganNDYXN0PEpTRG9sbGFyVk0qPihjZWxsKTsKICAgICBCYXNlOjp2aXNpdENo
aWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmpl
Y3QtPm1fb2JqZWN0RG9pbmdTaWRlRWZmZWN0UHV0V2l0aG91dENvcnJlY3RTbG90U3RhdHVzU3Ry
dWN0dXJlKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTRG9sbGFyVk0pOworCiB9IC8v
IG5hbWVzcGFjZSBKU0MKIAogSUdOT1JFX1dBUk5JTkdTX0VORApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3Rvb2xzL0pTRG9sbGFyVk0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvdG9vbHMvSlNEb2xsYXJWTS5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvdG9vbHMvSlNEb2xsYXJWTS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE5IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNzQs
NyArNzQsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgYWRkRnVuY3Rpb24oVk0mLCBKU0dsb2JhbE9i
amVjdCosIGNvbnN0IGNoYXIqIG5hbWUsIE5hdGl2ZUZ1bmN0aW9uLCB1bnNpZ25lZCBhcmd1bWVu
dHMpOwogICAgIHZvaWQgYWRkQ29uc3RydWN0aWJsZUZ1bmN0aW9uKFZNJiwgSlNHbG9iYWxPYmpl
Y3QqLCBjb25zdCBjaGFyKiBuYW1lLCBOYXRpdmVGdW5jdGlvbiwgdW5zaWduZWQgYXJndW1lbnRz
KTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3Im
KTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgV3JpdGVCYXJyaWVyPFN0cnVj
dHVyZT4gbV9vYmplY3REb2luZ1NpZGVFZmZlY3RQdXRXaXRob3V0Q29ycmVjdFNsb3RTdGF0dXNT
dHJ1Y3R1cmU7CiB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUdsb2Jh
bC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUdsb2Jh
bC5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21HbG9iYWwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTktMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEwMyw3ICsxMDMsOCBAQCB2b2lkIEdsb2JhbDo6
c2V0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPCiAgICAgfQogfQogCi12b2lkIEdsb2JhbDo6dmlz
aXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNp
dG9yPgordm9pZCBHbG9iYWw6OnZpc2l0QWdncmVnYXRlKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAg
ICAgc3dpdGNoIChtX3R5cGUpIHsKICAgICBjYXNlIFdhc206OlR5cGU6OkV4dGVybnJlZjoKQEAg
LTExNyw2ICsxMTgsOSBAQCB2b2lkIEdsb2JhbDo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3Im
CiAgICAgfQogfQogCit0ZW1wbGF0ZSB2b2lkIEdsb2JhbDo6dmlzaXRBZ2dyZWdhdGUoQWJzdHJh
Y3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBHbG9iYWw6OnZpc2l0QWdncmVnYXRlKFNs
b3RWaXNpdG9yJik7CisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpHbG9iYWwKIAogI2VuZGlmIC8v
IEVOQUJMRShXRUJBU1NFTUJMWSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21HbG9iYWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
R2xvYmFsLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21HbG9iYWwuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTctMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU3LDcgKzU3LDcgQEAgcHVibGljOgog
ICAgIEpTVmFsdWUgZ2V0KEpTR2xvYmFsT2JqZWN0KikgY29uc3Q7CiAgICAgdWludDY0X3QgZ2V0
UHJpbWl0aXZlKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZS5tX3ByaW1pdGl2ZTsgfQogICAgIHZv
aWQgc2V0KEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSk7Ci0gICAgdm9pZCB2aXNpdEFnZ3JlZ2F0
ZShTbG90VmlzaXRvciYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgdmlz
aXRBZ2dyZWdhdGUoVmlzaXRvciYpOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gVCogb3du
ZXIoKSBjb25zdCB7IHJldHVybiByZWludGVycHJldF9jYXN0PFQqPihtX293bmVyKTsgfQogICAg
IHZvaWQgc2V0T3duZXIoSlNPYmplY3QqIG93bmVyKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbVRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtVGFibGUuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtVGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNy0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTY2LDcgKzE2
Niw4IEBAIEpTVmFsdWUgVGFibGU6OmdldCh1aW50MzJfdCBpbmRleCkgY29uc3QKICAgICByZXR1
cm4gbV9qc1ZhbHVlcy5nZXQoKVtpbmRleCAmIG1fbWFza10uZ2V0KCk7CiB9CiAKLXZvaWQgVGFi
bGU6OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5h
bWUgVmlzaXRvcj4KK3ZvaWQgVGFibGU6OnZpc2l0QWdncmVnYXRlKFZpc2l0b3ImIHZpc2l0b3Ip
CiB7CiAgICAgUkVMRUFTRV9BU1NFUlQobV9vd25lcik7CiAgICAgYXV0byBsb2NrZXIgPSBob2xk
TG9jayhtX293bmVyLT5jZWxsTG9jaygpKTsKQEAgLTE3NCw2ICsxNzUsOSBAQCB2b2lkIFRhYmxl
Ojp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYgCiAgICAgICAgIHZpc2l0b3IuYXBwZW5kKG1f
anNWYWx1ZXMuZ2V0KClbaV0pOwogfQogCit0ZW1wbGF0ZSB2b2lkIFRhYmxlOjp2aXNpdEFnZ3Jl
Z2F0ZShBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIFRhYmxlOjp2aXNpdEFn
Z3JlZ2F0ZShTbG90VmlzaXRvciYpOworCiBUeXBlIFRhYmxlOjp3YXNtVHlwZSgpIGNvbnN0CiB7
CiAgICAgaWYgKGlzRXh0ZXJucmVmVGFibGUoKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21UYWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21UYWJsZS5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtVGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTctMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTgwLDcgKzgwLDcgQEAgcHVi
bGljOgogICAgIE9wdGlvbmFsPHVpbnQzMl90PiBncm93KHVpbnQzMl90IGRlbHRhLCBKU1ZhbHVl
IGRlZmF1bHRWYWx1ZSk7CiAgICAgdm9pZCBjb3B5KGNvbnN0IFRhYmxlKiBzcmNUYWJsZSwgdWlu
dDMyX3QgZHN0SW5kZXgsIHVpbnQzMl90IHNyY0luZGV4KTsKIAotICAgIHZvaWQgdmlzaXRBZ2dy
ZWdhdGUoU2xvdFZpc2l0b3ImKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lk
IHZpc2l0QWdncmVnYXRlKFZpc2l0b3ImKTsKIAogcHJvdGVjdGVkOgogICAgIFRhYmxlKHVpbnQz
Ml90IGluaXRpYWwsIE9wdGlvbmFsPHVpbnQzMl90PiBtYXhpbXVtLCBUYWJsZUVsZW1lbnRUeXBl
ID0gVGFibGVFbGVtZW50VHlwZTo6RXh0ZXJucmVmKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL0pTVG9XYXNtSUNDYWxsZWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTVG9XYXNtSUNDYWxsZWUuY3BwCShyZXZpc2lvbiAyNzI4
MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1RvV2FzbUlDQ2FsbGVlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE5
LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC00OSw3ICs0OSw4IEBAIFN0cnVjdHVyZSogSlNUb1dhc21JQ0NhbGxl
ZTo6Y3JlYXRlU3RydWMKICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9i
amVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhKU0NhbGxlZVR5cGUsIFN0cnVjdHVyZUZsYWdzKSwg
aW5mbygpKTsKIH0KIAotdm9pZCBKU1RvV2FzbUlDQ2FsbGVlOjp2aXNpdENoaWxkcmVuKEpTQ2Vs
bCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
Pgordm9pZCBKU1RvV2FzbUlDQ2FsbGVlOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGws
IFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNUb1dhc21JQ0NhbGxlZSogdGhpc09iamVjdCA9
IGpzQ2FzdDxKU1RvV2FzbUlDQ2FsbGVlKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9J
TkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNTgsNiArNTksOCBAQCB2b2lkIEpTVG9X
YXNtSUNDYWxsZWU6OnZpc2l0Q2hpbGRyZW4oSlNDCiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09i
amVjdC0+bV9mdW5jdGlvbik7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU1RvV2FzbUlD
Q2FsbGVlKTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBFTkFCTEUoV0VCQVNT
RU1CTFkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1RvV2FzbUlDQ2Fs
bGVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNUb1dh
c21JQ0NhbGxlZS5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9qcy9KU1RvV2FzbUlDQ2FsbGVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTYsNyArNTYsNyBAQCBw
cml2YXRlOgogICAgIEpTVG9XYXNtSUNDYWxsZWUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKICAgICAgICAgOiBCYXNlKHZtLCBnbG9i
YWxPYmplY3QsIHN0cnVjdHVyZSkKICAgICB7IH0KLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxk
cmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsK
IAogICAgIFdyaXRlQmFycmllcjxXZWJBc3NlbWJseUZ1bmN0aW9uPiBtX2Z1bmN0aW9uOwogfTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxv
Y2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2Vi
QXNzZW1ibHlDb2RlQmxvY2suY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAxOCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTgyLDcgKzgyLDggQEAgdm9pZCBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrOjpjbGVhckpT
Q2FsbAogICAgICAgICAoKml0ZXIpLT51bmxpbmsodm0pOwogfQogCi12b2lkIEpTV2ViQXNzZW1i
bHlDb2RlQmxvY2s6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlz
aXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTV2ViQXNzZW1ibHlDb2Rl
QmxvY2s6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikK
IHsKICAgICBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTV2Vi
QXNzZW1ibHlDb2RlQmxvY2sqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRT
KHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC05MCw2ICs5MSw4IEBAIHZvaWQgSlNXZWJBc3NlbWJs
eUNvZGVCbG9jazo6dmlzaXRDaGlsZHIKICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmpl
Y3QsIHZpc2l0b3IpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNXZWJBc3NlbWJseUNv
ZGVCbG9jayk7CisKIHZvaWQgSlNXZWJBc3NlbWJseUNvZGVCbG9jazo6ZmluYWxpemVVbmNvbmRp
dGlvbmFsbHkoVk0mIHZtKQogewogICAgIGZvciAoYXV0byBpdGVyID0gbV9jYWxsTGlua0luZm9z
LmJlZ2luKCk7ICEhaXRlcjsgKytpdGVyKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suaAkocmV2aXNpb24gMjcy
ODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNvZGVC
bG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxNy0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODYsNyArODYsNyBAQCBwcml2YXRlOgogICAgIERF
Q0xBUkVfRVhQT1JUX0lORk87CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzRGVzdHJ1
Y3Rpb24gPSB0cnVlOwogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7Ci0gICAgc3Rh
dGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xB
UkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBSZWY8V2FzbTo6Q29kZUJsb2NrPiBtX2NvZGVCbG9j
azsKICAgICBWZWN0b3I8TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPFdhc21FbnRyeVB0clRhZz4+IG1f
d2FzbVRvSlNFeGl0U3R1YnM7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9K
U1dlYkFzc2VtYmx5R2xvYmFsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5R2xvYmFsLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUdsb2JhbC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE5IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOS0yMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtNzEsNyArNzEsOCBAQCB2b2lkIEpTV2ViQXNzZW1ibHlHbG9iYWw6OmRlc3Ry
b3koSlNDZWxsCiAgICAgc3RhdGljX2Nhc3Q8SlNXZWJBc3NlbWJseUdsb2JhbCo+KGNlbGwpLT5K
U1dlYkFzc2VtYmx5R2xvYmFsOjp+SlNXZWJBc3NlbWJseUdsb2JhbCgpOwogfQogCi12b2lkIEpT
V2ViQXNzZW1ibHlHbG9iYWw6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRv
ciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTV2ViQXNzZW1i
bHlHbG9iYWw6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRv
cikKIHsKICAgICBKU1dlYkFzc2VtYmx5R2xvYmFsKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTV2Vi
QXNzZW1ibHlHbG9iYWwqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRo
aXNPYmplY3QsIGluZm8oKSk7CkBAIC04MCw2ICs4MSw4IEBAIHZvaWQgSlNXZWJBc3NlbWJseUds
b2JhbDo6dmlzaXRDaGlsZHJlbigKICAgICB0aGlzT2JqZWN0LT5nbG9iYWwoKS0+dmlzaXRBZ2dy
ZWdhdGUodmlzaXRvcik7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU1dlYkFzc2VtYmx5
R2xvYmFsKTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBFTkFCTEUoV0VCQVNT
RU1CTFkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5
R2xvYmFsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNX
ZWJBc3NlbWJseUdsb2JhbC5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5R2xvYmFsLmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOS0yMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTksNyAr
NTksNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIEpTV2ViQXNzZW1ibHlHbG9iYWwoVk0mLCBT
dHJ1Y3R1cmUqLCBSZWY8V2FzbTo6R2xvYmFsPiYmKTsKICAgICB2b2lkIGZpbmlzaENyZWF0aW9u
KFZNJik7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRv
ciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBSZWY8V2FzbTo6R2xvYmFs
PiBtX2dsb2JhbDsKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dl
YkFzc2VtYmx5SW5zdGFuY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2
LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC03Myw3ICs3Myw4IEBAIHZvaWQgSlNXZWJBc3NlbWJseUluc3Rh
bmNlOjpkZXN0cm95KEpTQ2UKICAgICBzdGF0aWNfY2FzdDxKU1dlYkFzc2VtYmx5SW5zdGFuY2Uq
PihjZWxsKS0+SlNXZWJBc3NlbWJseUluc3RhbmNlOjp+SlNXZWJBc3NlbWJseUluc3RhbmNlKCk7
CiB9CiAKLXZvaWQgSlNXZWJBc3NlbWJseUluc3RhbmNlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCog
Y2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgor
dm9pZCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2Vs
bCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpT
V2ViQXNzZW1ibHlJbnN0YW5jZSo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJ
VFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTEwMiw2ICsxMDMsOCBAQCB2b2lkIEpTV2ViQXNz
ZW1ibHlJbnN0YW5jZTo6dmlzaXRDaGlsZHJlCiAgICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJy
aWVyZWQod3JhcHBlci5nZXQoKSk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU1dlYkFz
c2VtYmx5SW5zdGFuY2UpOworCiB2b2lkIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6ZmluYWxpemVD
cmVhdGlvbihWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZjxXYXNtOjpD
b2RlQmxvY2s+JiYgd2FzbUNvZGVCbG9jaywgSlNPYmplY3QqIGltcG9ydE9iamVjdCwgV2FzbTo6
Q3JlYXRpb25Nb2RlIGNyZWF0aW9uTW9kZSkKIHsKICAgICBtX2luc3RhbmNlLT5maW5hbGl6ZUNy
ZWF0aW9uKHRoaXMsIHdhc21Db2RlQmxvY2suY29weVJlZigpKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5oCShy
ZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFz
c2VtYmx5SW5zdGFuY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTYtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEwNSw3ICsxMDUsNyBAQCBwdWJs
aWM6CiBwcml2YXRlOgogICAgIEpTV2ViQXNzZW1ibHlJbnN0YW5jZShWTSYsIFN0cnVjdHVyZSos
IFJlZjxXYXNtOjpJbnN0YW5jZT4mJik7CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIEpT
V2ViQXNzZW1ibHlNb2R1bGUqLCBXZWJBc3NlbWJseU1vZHVsZVJlY29yZCopOwotICAgIHN0YXRp
YyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJF
X1ZJU0lUX0NISUxEUkVOOwogCiAgICAgUmVmPFdhc206Okluc3RhbmNlPiBtX2luc3RhbmNlOwog
ICAgIFZNKiBtX3ZtOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJB
c3NlbWJseU1lbW9yeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vanMvSlNXZWJBc3NlbWJseU1lbW9yeS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNZW1vcnkuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMTU5LDcgKzE1OSw4IEBAIHZvaWQgSlNXZWJBc3NlbWJseU1lbW9yeTo6ZGVz
dHJveShKU0NlbGwKICAgICBtZW1vcnktPkpTV2ViQXNzZW1ibHlNZW1vcnk6On5KU1dlYkFzc2Vt
Ymx5TWVtb3J5KCk7CiB9CiAKLXZvaWQgSlNXZWJBc3NlbWJseU1lbW9yeTo6dmlzaXRDaGlsZHJl
bihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUg
VmlzaXRvcj4KK3ZvaWQgSlNXZWJBc3NlbWJseU1lbW9yeTo6dmlzaXRDaGlsZHJlbkltcGwoSlND
ZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBq
c0Nhc3Q8SlNXZWJBc3NlbWJseU1lbW9yeSo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1Rf
SU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTE2OSw2ICsxNzAsOCBAQCB2b2lkIEpT
V2ViQXNzZW1ibHlNZW1vcnk6OnZpc2l0Q2hpbGRyZW4oCiAgICAgdmlzaXRvci5yZXBvcnRFeHRy
YU1lbW9yeVZpc2l0ZWQodGhpc09iamVjdC0+bWVtb3J5KCkuc2l6ZSgpKTsKIH0KIAorREVGSU5F
X1ZJU0lUX0NISUxEUkVOKEpTV2ViQXNzZW1ibHlNZW1vcnkpOworCiB9IC8vIG5hbWVzcGFjZSBK
U0MKIAogI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNZW1vcnkuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TWVtb3J5LmgJKHJldmlzaW9u
IDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlN
ZW1vcnkuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTYtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTYzLDcgKzYzLDcgQEAgcHVibGljOgogcHJpdmF0
ZToKICAgICBKU1dlYkFzc2VtYmx5TWVtb3J5KFZNJiwgU3RydWN0dXJlKik7CiAgICAgdm9pZCBm
aW5pc2hDcmVhdGlvbihWTSYpOwotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgUmVm
PFdhc206Ok1lbW9yeT4gbV9tZW1vcnk7CiAgICAgV3JpdGVCYXJyaWVyPEpTQXJyYXlCdWZmZXI+
IG1fYnVmZmVyV3JhcHBlcjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pT
V2ViQXNzZW1ibHlNb2R1bGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAx
NyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYt
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTEyNCw3ICsxMjQsOCBAQCB2b2lkIEpTV2ViQXNzZW1ibHlNb2R1bGU6
OnNldENvZGVCbG9jayhWCiAgICAgbV9jb2RlQmxvY2tzW3N0YXRpY19jYXN0PHNpemVfdD4obW9k
ZSldLnNldCh2bSwgdGhpcywgY29kZUJsb2NrKTsKIH0KIAotdm9pZCBKU1dlYkFzc2VtYmx5TW9k
dWxlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0
ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1dlYkFzc2VtYmx5TW9kdWxlOjp2aXNp
dENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNX
ZWJBc3NlbWJseU1vZHVsZSogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1dlYkFzc2VtYmx5TW9kdWxl
Kj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZv
KCkpOwpAQCAtMTM1LDYgKzEzNiw4IEBAIHZvaWQgSlNXZWJBc3NlbWJseU1vZHVsZTo6dmlzaXRD
aGlsZHJlbigKICAgICAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9jb2RlQmxvY2tz
W2ldKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTV2ViQXNzZW1ibHlNb2R1bGUpOwor
CiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5
TW9kdWxlLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTgwLDcgKzgwLDcg
QEAgcHJpdmF0ZToKIAogICAgIEpTV2ViQXNzZW1ibHlNb2R1bGUoVk0mLCBTdHJ1Y3R1cmUqLCBS
ZWY8V2FzbTo6TW9kdWxlPiYmKTsKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7Ci0gICAg
c3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERF
Q0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBSZWY8V2FzbTo6TW9kdWxlPiBtX21vZHVsZTsK
ICAgICBXcml0ZUJhcnJpZXI8U3ltYm9sVGFibGU+IG1fZXhwb3J0U3ltYm9sVGFibGU7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5VGFibGUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlU
YWJsZS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL0pTV2ViQXNzZW1ibHlUYWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03Miw3ICs3Miw4
IEBAIHZvaWQgSlNXZWJBc3NlbWJseVRhYmxlOjpkZXN0cm95KEpTQ2VsbCoKICAgICBzdGF0aWNf
Y2FzdDxKU1dlYkFzc2VtYmx5VGFibGUqPihjZWxsKS0+SlNXZWJBc3NlbWJseVRhYmxlOjp+SlNX
ZWJBc3NlbWJseVRhYmxlKCk7CiB9CiAKLXZvaWQgSlNXZWJBc3NlbWJseVRhYmxlOjp2aXNpdENo
aWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBl
bmFtZSBWaXNpdG9yPgordm9pZCBKU1dlYkFzc2VtYmx5VGFibGU6OnZpc2l0Q2hpbGRyZW5JbXBs
KEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU1dlYkFzc2VtYmx5VGFi
bGUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNXZWJBc3NlbWJseVRhYmxlKj4oY2VsbCk7CiAgICAg
QVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtODEsNiAr
ODIsOCBAQCB2b2lkIEpTV2ViQXNzZW1ibHlUYWJsZTo6dmlzaXRDaGlsZHJlbihKCiAgICAgdGhp
c09iamVjdC0+dGFibGUoKS0+dmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7CiB9CiAKK0RFRklORV9W
SVNJVF9DSElMRFJFTihKU1dlYkFzc2VtYmx5VGFibGUpOworCiBib29sIEpTV2ViQXNzZW1ibHlU
YWJsZTo6Z3Jvdyh1aW50MzJfdCBkZWx0YSwgSlNWYWx1ZSBkZWZhdWx0VmFsdWUpCiB7CiAgICAg
aWYgKGRlbHRhID09IDApCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dl
YkFzc2VtYmx5VGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9KU1dlYkFzc2VtYmx5VGFibGUuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseVRhYmxlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTkgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC03MCw3ICs3MCw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgSlNXZWJBc3NlbWJseVRh
YmxlKFZNJiwgU3RydWN0dXJlKiwgUmVmPFdhc206OlRhYmxlPiYmKTsKICAgICB2b2lkIGZpbmlz
aENyZWF0aW9uKFZNJik7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBT
bG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBSZWY8V2Fz
bTo6VGFibGU+IG1fdGFibGU7CiB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
anMvV2ViQXNzZW1ibHlGdW5jdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5jcHAJKHJldmlzaW9uIDI3MjgzMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
Ni0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtNDUyLDcgKzQ1Miw4IEBAIFdlYkFzc2VtYmx5RnVuY3Rpb246
OldlYkFzc2VtYmx5RnVuY3Rpb24KICAgICAsIG1faW1wb3J0YWJsZUZ1bmN0aW9uIHsgc2lnbmF0
dXJlSW5kZXgsIHdhc21Ub1dhc21FbnRyeXBvaW50TG9hZExvY2F0aW9uIH0KIHsgfQogCi12b2lk
IFdlYkFzc2VtYmx5RnVuY3Rpb246OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90Vmlz
aXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFdlYkFzc2Vt
Ymx5RnVuY3Rpb246OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlz
aXRvcikKIHsKICAgICBXZWJBc3NlbWJseUZ1bmN0aW9uKiB0aGlzT2JqZWN0ID0ganNDYXN0PFdl
YkFzc2VtYmx5RnVuY3Rpb24qPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRT
KHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC00NjEsNiArNDYyLDggQEAgdm9pZCBXZWJBc3NlbWJs
eUZ1bmN0aW9uOjp2aXNpdENoaWxkcmVuKAogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3Qt
Pm1fanNUb1dhc21JQ0NhbGxlZSk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihXZWJBc3Nl
bWJseUZ1bmN0aW9uKTsKKwogdm9pZCBXZWJBc3NlbWJseUZ1bmN0aW9uOjpkZXN0cm95KEpTQ2Vs
bCogY2VsbCkKIHsKICAgICBzdGF0aWNfY2FzdDxXZWJBc3NlbWJseUZ1bmN0aW9uKj4oY2VsbCkt
PldlYkFzc2VtYmx5RnVuY3Rpb246On5XZWJBc3NlbWJseUZ1bmN0aW9uKCk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5o
CShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJB
c3NlbWJseUZ1bmN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDE2LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC04Niw3ICs4Niw3IEBAIHB1Ymxp
YzoKICAgICBXYXNtOjpJbnN0YW5jZSogcHJldmlvdXNJbnN0YW5jZShDYWxsRnJhbWUqKTsKIAog
cHJpdmF0ZToKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNp
dG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKICAgICBXZWJBc3NlbWJseUZ1bmN0
aW9uKFZNJiwgTmF0aXZlRXhlY3V0YWJsZSosIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKiwg
V2FzbTo6Q2FsbGVlJiBqc0VudHJ5cG9pbnQsIFdhc21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rpb246
OkxvYWRMb2NhdGlvbiBlbnRyeXBvaW50TG9hZExvY2F0aW9uLCBXYXNtOjpTaWduYXR1cmVJbmRl
eCk7CiAKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4ganNDYWxsRW50
cnlwb2ludFNsb3coKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFz
c2VtYmx5RnVuY3Rpb25CYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uQmFzZS5jcHAJKHJldmlzaW9uIDI3MjgzMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb25CYXNl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC00MSw3ICs0MSw4IEBAIFdlYkFzc2VtYmx5RnVuY3Rpb25CYXNl
OjpXZWJBc3NlbWJseUZ1bmMKICAgICA6IEJhc2Uodm0sIGV4ZWN1dGFibGUsIGdsb2JhbE9iamVj
dCwgc3RydWN0dXJlKQogeyB9CiAKLXZvaWQgV2ViQXNzZW1ibHlGdW5jdGlvbkJhc2U6OnZpc2l0
Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5
cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFdlYkFzc2VtYmx5RnVuY3Rpb25CYXNlOjp2aXNpdENoaWxk
cmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgV2ViQXNzZW1i
bHlGdW5jdGlvbkJhc2UqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8V2ViQXNzZW1ibHlGdW5jdGlvbkJh
c2UqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGlu
Zm8oKSk7CkBAIC00OSw2ICs1MCw4IEBAIHZvaWQgV2ViQXNzZW1ibHlGdW5jdGlvbkJhc2U6OnZp
c2l0Q2hpbGQKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2luc3RhbmNlKTsKIH0K
IAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKFdlYkFzc2VtYmx5RnVuY3Rpb25CYXNlKTsKKwogdm9p
ZCBXZWJBc3NlbWJseUZ1bmN0aW9uQmFzZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBOYXRpdmVF
eGVjdXRhYmxlKiBleGVjdXRhYmxlLCB1bnNpZ25lZCBsZW5ndGgsIGNvbnN0IFN0cmluZyYgbmFt
ZSwgSlNXZWJBc3NlbWJseUluc3RhbmNlKiBpbnN0YW5jZSkKIHsKICAgICBCYXNlOjpmaW5pc2hD
cmVhdGlvbih2bSwgZXhlY3V0YWJsZSwgbGVuZ3RoLCBuYW1lKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb25CYXNlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbkJhc2Uu
aAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2Vi
QXNzZW1ibHlGdW5jdGlvbkJhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ2LDcgKzQ2LDcgQEAg
cHVibGljOgogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZJbnN0YW5jZSgpIHsgcmV0dXJu
IE9CSkVDVF9PRkZTRVRPRihXZWJBc3NlbWJseUZ1bmN0aW9uQmFzZSwgbV9pbnN0YW5jZSk7IH0K
IAogcHJvdGVjdGVkOgotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xv
dFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogICAgIHZvaWQgZmluaXNo
Q3JlYXRpb24oVk0mLCBOYXRpdmVFeGVjdXRhYmxlKiwgdW5zaWduZWQgbGVuZ3RoLCBjb25zdCBT
dHJpbmcmIG5hbWUsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSopOwogICAgIFdlYkFzc2VtYmx5RnVu
Y3Rpb25CYXNlKFZNJiwgTmF0aXZlRXhlY3V0YWJsZSosIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0
dXJlKik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5
TW9kdWxlUmVjb3JkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9XZWJBc3NlbWJseU1vZHVsZVJlY29yZC5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYt
MjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTc4LDcgKzc4LDggQEAgdm9pZCBXZWJBc3NlbWJseU1vZHVsZVJl
Y29yZDo6ZmluaXNoQ3JlYQogICAgIH0KIH0KIAotdm9pZCBXZWJBc3NlbWJseU1vZHVsZVJlY29y
ZDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVt
cGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OnZp
c2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBX
ZWJBc3NlbWJseU1vZHVsZVJlY29yZCogdGhpc09iamVjdCA9IGpzQ2FzdDxXZWJBc3NlbWJseU1v
ZHVsZVJlY29yZCo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09i
amVjdCwgaW5mbygpKTsKQEAgLTg4LDYgKzg5LDggQEAgdm9pZCBXZWJBc3NlbWJseU1vZHVsZVJl
Y29yZDo6dmlzaXRDaGlsZAogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fZXhwb3J0
c09iamVjdCk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihXZWJBc3NlbWJseU1vZHVsZVJl
Y29yZCk7CisKIHZvaWQgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OnByZXBhcmVMaW5rKFZNJiB2
bSwgSlNXZWJBc3NlbWJseUluc3RhbmNlKiBpbnN0YW5jZSkKIHsKICAgICBSRUxFQVNFX0FTU0VS
VCghbV9pbnN0YW5jZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJB
c3NlbWJseU1vZHVsZVJlY29yZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmgJKHJldmlzaW9uIDI3MjgzMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2
LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC02OSw3ICs2OSw3IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGZp
bmlzaENyZWF0aW9uKEpTR2xvYmFsT2JqZWN0KiwgVk0mLCBjb25zdCBXYXNtOjpNb2R1bGVJbmZv
cm1hdGlvbiYpOwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90
VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBXcml0ZUJhcnJp
ZXI8SlNXZWJBc3NlbWJseUluc3RhbmNlPiBtX2luc3RhbmNlOwogICAgIFdyaXRlQmFycmllcjxK
U09iamVjdD4gbV9zdGFydEZ1bmN0aW9uOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vanMvV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmNwcAko
cmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNz
ZW1ibHlXcmFwcGVyRnVuY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNy0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjcsNyArNjcsOCBA
QCBTdHJ1Y3R1cmUqIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uOjpjCiAgICAgcmV0dXJuIFN0
cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oSlNG
dW5jdGlvblR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKIH0KIAotdm9pZCBXZWJBc3Nl
bWJseVdyYXBwZXJGdW5jdGlvbjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNp
dG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgV2ViQXNzZW1i
bHlXcmFwcGVyRnVuY3Rpb246OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRv
ciYgdmlzaXRvcikKIHsKICAgICBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbiogdGhpc09iamVj
dCA9IGpzQ2FzdDxXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbio+KGNlbGwpOwogICAgIEFTU0VS
VF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTc2LDYgKzc3LDgg
QEAgdm9pZCBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbjo6dmlzaXRDaAogICAgIHZpc2l0b3Iu
YXBwZW5kKHRoaXNPYmplY3QtPm1fZnVuY3Rpb24pOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERS
RU4oV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24pOworCiBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJ
T04oY2FsbFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLCAoSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpKQogewogICAgIFZNJiB2bSA9IGdsb2JhbE9i
amVjdC0+dm0oKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2Vt
Ymx5V3JhcHBlckZ1bmN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uaAkocmV2aXNpb24gMjcyODMwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rp
b24uaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTctMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU5LDcgKzU5LDcgQEAgcHVibGljOgogcHJpdmF0ZToK
ICAgICBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbihWTSYsIE5hdGl2ZUV4ZWN1dGFibGUqLCBK
U0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSosIFdhc21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rpb24p
OwogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBOYXRpdmVFeGVjdXRhYmxlKiwgdW5zaWdu
ZWQgbGVuZ3RoLCBjb25zdCBTdHJpbmcmIG5hbWUsIEpTT2JqZWN0KiwgSlNXZWJBc3NlbWJseUlu
c3RhbmNlKik7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90Vmlz
aXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBXcml0ZUJhcnJpZXI8
SlNPYmplY3Q+IG1fZnVuY3Rpb247CiAgICAgLy8gSXQncyBzYWZlIHRvIGp1c3QgaG9sZCB0aGUg
cmF3IFdhc21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rpb24gYmVjYXVzZSB3ZSBoYXZlIGEgcmVmZXJl
bmNlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9y
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
T2JqZWN0U3RvcmUuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNzI4LDcgKzcy
OCw4IEBAIHZvaWQgSURCT2JqZWN0U3RvcmU6OnJvbGxiYWNrRm9yVmVyc2lvbkMKICAgICB9CiB9
CiAKLXZvaWQgSURCT2JqZWN0U3RvcmU6OnZpc2l0UmVmZXJlbmNlZEluZGV4ZXMoU2xvdFZpc2l0
b3ImIHZpc2l0b3IpIGNvbnN0Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBJREJP
YmplY3RTdG9yZTo6dmlzaXRSZWZlcmVuY2VkSW5kZXhlcyhWaXNpdG9yJiB2aXNpdG9yKSBjb25z
dAogewogICAgIExvY2tlcjxMb2NrPiBsb2NrZXIobV9yZWZlcmVuY2VkSW5kZXhMb2NrKTsKICAg
ICBmb3IgKGF1dG8mIGluZGV4IDogbV9yZWZlcmVuY2VkSW5kZXhlcy52YWx1ZXMoKSkKQEAgLTcz
Nyw2ICs3MzgsOSBAQCB2b2lkIElEQk9iamVjdFN0b3JlOjp2aXNpdFJlZmVyZW5jZWRJbmRlCiAg
ICAgICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChpbmRleC5nZXQoKSk7CiB9CiAKK3RlbXBsYXRl
IHZvaWQgSURCT2JqZWN0U3RvcmU6OnZpc2l0UmVmZXJlbmNlZEluZGV4ZXMoQWJzdHJhY3RTbG90
VmlzaXRvciYpIGNvbnN0OwordGVtcGxhdGUgdm9pZCBJREJPYmplY3RTdG9yZTo6dmlzaXRSZWZl
cmVuY2VkSW5kZXhlcyhTbG90VmlzaXRvciYpIGNvbnN0OworCiB2b2lkIElEQk9iamVjdFN0b3Jl
OjpyZW5hbWVSZWZlcmVuY2VkSW5kZXgoSURCSW5kZXgmIGluZGV4LCBjb25zdCBTdHJpbmcmIG5l
d05hbWUpCiB7CiAgICAgTE9HKEluZGV4ZWREQiwgIklEQk9iamVjdFN0b3JlOjpyZW5hbWVSZWZl
cmVuY2VkSW5kZXgiKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
Qk9iamVjdFN0b3JlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCT2JqZWN0U3RvcmUuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuaAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMDks
NyArMTA5LDcgQEAgcHVibGljOgogICAgIHZvaWQgcmVmKCk7CiAgICAgdm9pZCBkZXJlZigpOwog
Ci0gICAgdm9pZCB2aXNpdFJlZmVyZW5jZWRJbmRleGVzKEpTQzo6U2xvdFZpc2l0b3ImKSBjb25z
dDsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIHZpc2l0UmVmZXJlbmNlZElu
ZGV4ZXMoVmlzaXRvciYpIGNvbnN0OwogICAgIHZvaWQgcmVuYW1lUmVmZXJlbmNlZEluZGV4KElE
QkluZGV4JiwgY29uc3QgU3RyaW5nJiBuZXdOYW1lKTsKIAogcHJpdmF0ZToKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5jcHAJ
KHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
QlRyYW5zYWN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE0NTUsNyArMTQ1NSw4IEBAIHZv
aWQgSURCVHJhbnNhY3Rpb246OmNvbm5lY3Rpb25DbG9zZWRGcm8KICAgICBmaXJlT25BYm9ydCgp
OwogfQogCi12b2lkIElEQlRyYW5zYWN0aW9uOjp2aXNpdFJlZmVyZW5jZWRPYmplY3RTdG9yZXMo
SlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikgY29uc3QKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0
b3I+Cit2b2lkIElEQlRyYW5zYWN0aW9uOjp2aXNpdFJlZmVyZW5jZWRPYmplY3RTdG9yZXMoVmlz
aXRvciYgdmlzaXRvcikgY29uc3QKIHsKICAgICBMb2NrZXI8TG9jaz4gbG9ja2VyKG1fcmVmZXJl
bmNlZE9iamVjdFN0b3JlTG9jayk7CiAgICAgZm9yIChhdXRvJiBvYmplY3RTdG9yZSA6IG1fcmVm
ZXJlbmNlZE9iamVjdFN0b3Jlcy52YWx1ZXMoKSkKQEAgLTE0NjQsNiArMTQ2NSw5IEBAIHZvaWQg
SURCVHJhbnNhY3Rpb246OnZpc2l0UmVmZXJlbmNlZE9iamUKICAgICAgICAgdmlzaXRvci5hZGRP
cGFxdWVSb290KG9iamVjdFN0b3JlLmdldCgpKTsKIH0KIAordGVtcGxhdGUgdm9pZCBJREJUcmFu
c2FjdGlvbjo6dmlzaXRSZWZlcmVuY2VkT2JqZWN0U3RvcmVzKEpTQzo6QWJzdHJhY3RTbG90Vmlz
aXRvciYpIGNvbnN0OwordGVtcGxhdGUgdm9pZCBJREJUcmFuc2FjdGlvbjo6dmlzaXRSZWZlcmVu
Y2VkT2JqZWN0U3RvcmVzKEpTQzo6U2xvdFZpc2l0b3ImKSBjb25zdDsKKwogdm9pZCBJREJUcmFu
c2FjdGlvbjo6aGFuZGxlUGVuZGluZ09wZXJhdGlvbnMoKQogewogICAgIEFTU0VSVChjYW5DdXJy
ZW50VGhyZWFkQWNjZXNzVGhyZWFkTG9jYWxEYXRhKG1fZGF0YWJhc2UtPm9yaWdpblRocmVhZCgp
KSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlv
bi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRy
YW5zYWN0aW9uLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTQ5LDcgKzE0OSw3IEBA
IHB1YmxpYzoKIAogICAgIHZvaWQgY29ubmVjdGlvbkNsb3NlZEZyb21TZXJ2ZXIoY29uc3QgSURC
RXJyb3ImKTsKIAotICAgIHZvaWQgdmlzaXRSZWZlcmVuY2VkT2JqZWN0U3RvcmVzKEpTQzo6U2xv
dFZpc2l0b3ImKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIHZp
c2l0UmVmZXJlbmNlZE9iamVjdFN0b3JlcyhWaXNpdG9yJikgY29uc3Q7CiAKICAgICBXRUJDT1JF
X0VYUE9SVCBzdGF0aWMgc3RkOjphdG9taWM8dW5zaWduZWQ+IG51bWJlck9mSURCVHJhbnNhY3Rp
b25zOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQnVmZmVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlv
QnVmZmVyLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJhdWRpby9BdWRpb0J1ZmZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAv
KgogICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xNTQsMTIgKzE1NCwxNiBAQCBF
eGNlcHRpb25PcjxKU0M6OkpTVmFsdWU+IEF1ZGlvQnVmZmVyOjpnCiAgICAgcmV0dXJuIGNvbnN0
cnVjdEpTQXJyYXkoKTsKIH0KIAotdm9pZCBBdWRpb0J1ZmZlcjo6dmlzaXRDaGFubmVsV3JhcHBl
cnMoSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+
Cit2b2lkIEF1ZGlvQnVmZmVyOjp2aXNpdENoYW5uZWxXcmFwcGVycyhWaXNpdG9yJiB2aXNpdG9y
KQogewogICAgIGZvciAoYXV0byYgY2hhbm5lbFdyYXBwZXIgOiBtX2NoYW5uZWxXcmFwcGVycykK
ICAgICAgICAgY2hhbm5lbFdyYXBwZXIudmlzaXQodmlzaXRvcik7CiB9CiAKK3RlbXBsYXRlIHZv
aWQgQXVkaW9CdWZmZXI6OnZpc2l0Q2hhbm5lbFdyYXBwZXJzKEpTQzo6QWJzdHJhY3RTbG90Vmlz
aXRvciYpOwordGVtcGxhdGUgdm9pZCBBdWRpb0J1ZmZlcjo6dmlzaXRDaGFubmVsV3JhcHBlcnMo
SlNDOjpTbG90VmlzaXRvciYpOworCiBSZWZQdHI8RmxvYXQzMkFycmF5PiBBdWRpb0J1ZmZlcjo6
Y2hhbm5lbERhdGEodW5zaWduZWQgY2hhbm5lbEluZGV4KQogewogICAgIGlmIChjaGFubmVsSW5k
ZXggPj0gbV9jaGFubmVscy5zaXplKCkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmF1ZGlvL0F1ZGlvQnVmZmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJhdWRpby9BdWRpb0J1ZmZlci5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQnVmZmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NiArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03NSw3ICs3
NSw3IEBAIHB1YmxpYzoKIAogICAgIHNpemVfdCBtZW1vcnlDb3N0KCkgY29uc3Q7CiAKLSAgICB2
b2lkIHZpc2l0Q2hhbm5lbFdyYXBwZXJzKEpTQzo6U2xvdFZpc2l0b3ImKTsKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIHZpc2l0Q2hhbm5lbFdyYXBwZXJzKFZpc2l0b3ImKTsK
ICAgICAKIHByaXZhdGU6CiAgICAgQXVkaW9CdWZmZXIodW5zaWduZWQgbnVtYmVyT2ZDaGFubmVs
cywgc2l6ZV90IGxlbmd0aCwgZmxvYXQgc2FtcGxlUmF0ZSwgTGVnYWN5UHJldmVudERldGFjaGlu
ZyA9IExlZ2FjeVByZXZlbnREZXRhY2hpbmc6Ok5vKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0RPTUdDT3V0cHV0Q29uc3RyYWludC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvRE9NR0NPdXRwdXRDb25zdHJhaW50LmNwcAkocmV2aXNpb24g
MjcyODMwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvRE9NR0NPdXRwdXRDb25zdHJh
aW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDksNyArNDksNyBAQCBET01HQ091dHB1dENvbnN0
cmFpbnQ6On5ET01HQ091dHB1dENvbnN0CiB7CiB9CiAKLXZvaWQgRE9NR0NPdXRwdXRDb25zdHJh
aW50OjpleGVjdXRlSW1wbChTbG90VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgRE9NR0NPdXRwdXRD
b25zdHJhaW50OjpleGVjdXRlSW1wbChBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewog
ICAgIEhlYXAmIGhlYXAgPSBtX3ZtLmhlYXA7CiAgICAgCkBAIC02MCw3ICs2MCw3IEBAIHZvaWQg
RE9NR0NPdXRwdXRDb25zdHJhaW50OjpleGVjdXRlSW1wbCgKICAgICAKICAgICBtX2NsaWVudERh
dGEuZm9yRWFjaE91dHB1dENvbnN0cmFpbnRTcGFjZSgKICAgICAgICAgWyZdIChTdWJzcGFjZSYg
c3Vic3BhY2UpIHsKLSAgICAgICAgICAgIGF1dG8gZnVuYyA9IFtdIChTbG90VmlzaXRvciYgdmlz
aXRvciwgSGVhcENlbGwqIGhlYXBDZWxsLCBIZWFwQ2VsbDo6S2luZCkgeworICAgICAgICAgICAg
YXV0byBmdW5jID0gW10gKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIEhlYXBDZWxsKiBo
ZWFwQ2VsbCwgSGVhcENlbGw6OktpbmQpIHsKICAgICAgICAgICAgICAgICBTZXRSb290TWFya1Jl
YXNvblNjb3BlIHJvb3RTY29wZSh2aXNpdG9yLCBSb290TWFya1JlYXNvbjo6RE9NR0NPdXRwdXQp
OwogICAgICAgICAgICAgICAgIEpTQ2VsbCogY2VsbCA9IHN0YXRpY19jYXN0PEpTQ2VsbCo+KGhl
YXBDZWxsKTsKICAgICAgICAgICAgICAgICBjZWxsLT5tZXRob2RUYWJsZSh2aXNpdG9yLnZtKCkp
LT52aXNpdE91dHB1dENvbnN0cmFpbnRzKGNlbGwsIHZpc2l0b3IpOwpJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvRE9NR0NPdXRwdXRDb25zdHJhaW50LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvRE9NR0NPdXRwdXRDb25zdHJhaW50LmgJKHJldmlz
aW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0RPTUdDT3V0cHV0Q29u
c3RyYWludC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxNy0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDIsNyArNDIsNyBAQCBwdWJsaWM6CiAgICAg
fkRPTUdDT3V0cHV0Q29uc3RyYWludCgpOwogICAgIAogcHJvdGVjdGVkOgotICAgIHZvaWQgZXhl
Y3V0ZUltcGwoSlNDOjpTbG90VmlzaXRvciYpIG92ZXJyaWRlOworICAgIHZvaWQgZXhlY3V0ZUlt
cGwoSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJikgb3ZlcnJpZGU7CiAKIHByaXZhdGU6CiAgICAg
SlNDOjpWTSYgbV92bTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQWJvcnRD
b250cm9sbGVyQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0Fib3J0Q29udHJvbGxlckN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQWJvcnRDb250cm9sbGVyQ3VzdG9tLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0qIENvcHlyaWdodCAoQykgMjAxOSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqIENvcHlyaWdodCAoQykgMjAxOS0yMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICoKICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMjgsOSArMjgsMTMgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIEpTQWJv
cnRDb250cm9sbGVyOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2
aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNBYm9ydENvbnRyb2xs
ZXI6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgdmlz
aXRvci5hZGRPcGFxdWVSb290KCZ3cmFwcGVkKCkuc2lnbmFsKCkpOwogfQogCit0ZW1wbGF0ZSB2
b2lkIEpTQWJvcnRDb250cm9sbGVyOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OkFic3Ry
YWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNBYm9ydENvbnRyb2xsZXI6OnZpc2l0
QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImKTsKKwogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNBYm9ydFNpZ25hbEN1
c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNBYm9y
dFNpZ25hbEN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTQWJvcnRTaWduYWxDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyogQ29weXJpZ2h0IChDKSAyMDE5LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogKgogKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOCw3ICsyOCw3IEBA
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotYm9vbCBKU0Fib3J0U2lnbmFsT3duZXI6OmlzUmVh
Y2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2
b2lkKiwgSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikKK2Jv
b2wgSlNBYm9ydFNpZ25hbE93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6Okhh
bmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRv
ciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikKIHsKICAgICBhdXRvJiBhYm9ydFNpZ25h
bCA9IEpTQzo6anNDYXN0PEpTQWJvcnRTaWduYWwqPihoYW5kbGUuc2xvdCgpLT5hc0NlbGwoKSkt
PndyYXBwZWQoKTsKICAgICBpZiAoYWJvcnRTaWduYWwuaXNGaXJpbmdFdmVudExpc3RlbmVycygp
KSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0F0dHJDdXN0b20uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXR0ckN1c3RvbS5jcHAJ
KHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXR0ckN1
c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDA3LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAwNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzMsMTAgKzMzLDE0IEBACiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBKU0F0dHI6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVu
KEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgor
dm9pZCBKU0F0dHI6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7
CiAgICAgaWYgKEVsZW1lbnQqIGVsZW1lbnQgPSB3cmFwcGVkKCkub3duZXJFbGVtZW50KCkpCiAg
ICAgICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChyb290KGVsZW1lbnQpKTsKIH0KIAordGVtcGxh
dGUgdm9pZCBKU0F0dHI6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6QWJzdHJhY3RTbG90
VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU0F0dHI6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVu
KEpTQzo6U2xvdFZpc2l0b3ImKTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNBdWRpb0J1ZmZlckN1c3RvbS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNBdWRpb0J1ZmZlckN1c3RvbS5jcHAJ
KHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXVkaW9C
dWZmZXJDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMjAtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMxLDExICszMSwxNSBAQAogbmFtZXNwYWNl
IFdlYkNvcmUgewogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAotdm9pZCBKU0F1ZGlvQnVmZmVyOjp2
aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5
cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTQXVkaW9CdWZmZXI6OnZpc2l0QWRkaXRpb25hbENoaWxk
cmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgd3JhcHBlZCgpLnZpc2l0Q2hhbm5lbFdyYXBw
ZXJzKHZpc2l0b3IpOwogfQogCit0ZW1wbGF0ZSB2b2lkIEpTQXVkaW9CdWZmZXI6OnZpc2l0QWRk
aXRpb25hbENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNB
dWRpb0J1ZmZlcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKKwogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQl9BVURJTykKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXVkaW9UcmFja0N1c3RvbS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNBdWRpb1RyYWNrQ3VzdG9tLmNw
cAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNBdWRp
b1RyYWNrQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDExLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNSwxMSArMzUsMTUgQEAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKLXZvaWQgSlNBdWRpb1RyYWNrOjp2
aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5
cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTQXVkaW9UcmFjazo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRy
ZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qocm9vdCgm
d3JhcHBlZCgpKSk7CiB9CiAKK3RlbXBsYXRlIHZvaWQgSlNBdWRpb1RyYWNrOjp2aXNpdEFkZGl0
aW9uYWxDaGlsZHJlbihBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTQXVk
aW9UcmFjazo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKKwogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTQXVkaW9UcmFja0xpc3RDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTQXVkaW9UcmFja0xpc3RDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI4
MzApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0F1ZGlvVHJhY2tMaXN0Q3VzdG9t
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDExLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC0zNiwxMSArMzYsMTUgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKLXZvaWQgSlNBdWRpb1RyYWNrTGlzdDo6dmlzaXRBZGRp
dGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPgordm9pZCBKU0F1ZGlvVHJhY2tMaXN0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihW
aXNpdG9yJiB2aXNpdG9yKQogewogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChyb290KHdyYXBw
ZWQoKS5lbGVtZW50KCkpKTsKIH0KIAordGVtcGxhdGUgdm9pZCBKU0F1ZGlvVHJhY2tMaXN0Ojp2
aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2
b2lkIEpTQXVkaW9UcmFja0xpc3Q6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9y
Jik7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0F1ZGlvV29ya2xldFByb2Nlc3NvckN1c3RvbS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNBdWRpb1dvcmtsZXRQcm9jZXNz
b3JDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0F1ZGlvV29ya2xldFByb2Nlc3NvckN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMC0yMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzEs
NyArMzEsOCBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAot
dm9pZCBKU0F1ZGlvV29ya2xldFByb2Nlc3Nvcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xv
dFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0F1
ZGlvV29ya2xldFByb2Nlc3Nvcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlz
aXRvcikKIHsKICAgICBhdXRvJiBwcm9jZXNzb3IgPSB3cmFwcGVkKCk7CiAgICAgcHJvY2Vzc29y
LmpzSW5wdXRzV3JhcHBlcigpLnZpc2l0KHZpc2l0b3IpOwpAQCAtMzksNiArNDAsOSBAQCB2b2lk
IEpTQXVkaW9Xb3JrbGV0UHJvY2Vzc29yOjp2aXNpdEFkZGl0CiAgICAgcHJvY2Vzc29yLmpzUGFy
YW1WYWx1ZXNXcmFwcGVyKCkudmlzaXQodmlzaXRvcik7CiB9CiAKK3RlbXBsYXRlIHZvaWQgSlNB
dWRpb1dvcmtsZXRQcm9jZXNzb3I6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEFic3RyYWN0U2xv
dFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNBdWRpb1dvcmtsZXRQcm9jZXNzb3I6OnZpc2l0
QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKIAogI2VuZGlmIC8vIEVOQUJMRShXRUJfQVVESU8pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0NTU1J1bGVDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTQ1NTUnVsZUN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ1NTUnVsZUN1c3RvbS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtNTEsMTEgKzUxLDE1IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBu
YW1lc3BhY2UgSlNDOwogCi12b2lkIEpTQ1NTUnVsZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4o
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBK
U0NTU1J1bGU6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAg
ICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHJvb3QoJndyYXBwZWQoKSkpOwogfQogCit0ZW1wbGF0
ZSB2b2lkIEpTQ1NTUnVsZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oQWJzdHJhY3RTbG90Vmlz
aXRvciYpOwordGVtcGxhdGUgdm9pZCBKU0NTU1J1bGU6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVu
KFNsb3RWaXNpdG9yJik7CisKIEpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0dsb2JhbE9iamVj
dCosIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZjxDU1NSdWxlPiYmIHJ1bGUp
CiB7CiAgICAgc3dpdGNoIChydWxlLT50eXBlKCkpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTQ1NTUnVsZUxpc3RDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ1NTUnVsZUxpc3RDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI4
MzApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NTU1J1bGVMaXN0Q3VzdG9tLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDktMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodCByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAwOS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC0zNiw3ICszNiw3IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1
c2luZyBuYW1lc3BhY2UgSlNDOwogCi1ib29sIEpTQ1NTUnVsZUxpc3RPd25lcjo6aXNSZWFjaGFi
bGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQq
LCBTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikKK2Jvb2wgSlNDU1NS
dWxlTGlzdE93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6
OlVua25vd24+IGhhbmRsZSwgdm9pZCosIEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNv
bnN0IGNoYXIqKiByZWFzb24pCiB7CiAgICAgSlNDU1NSdWxlTGlzdCoganNDU1NSdWxlTGlzdCA9
IGpzQ2FzdDxKU0NTU1J1bGVMaXN0Kj4oaGFuZGxlLnNsb3QoKS0+YXNDZWxsKCkpOwogICAgIGlm
ICghanNDU1NSdWxlTGlzdC0+aGFzQ3VzdG9tUHJvcGVydGllcyhqc0NTU1J1bGVMaXN0LT52bSgp
KSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ1NTU3R5bGVEZWNsYXJhdGlv
bkN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlND
U1NTdHlsZURlY2xhcmF0aW9uQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNDU1NTdHlsZURlY2xhcmF0aW9uQ3VzdG9tLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDct
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTUxLDkgKzUxLDEzIEBAIHZvaWQqIHJvb3QoQ1NTU3R5bGVEZWNsYXJh
dGlvbiogc3R5bGUpCiAgICAgcmV0dXJuIHN0eWxlOwogfQogCi12b2lkIEpTQ1NTU3R5bGVEZWNs
YXJhdGlvbjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0
ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0NTU1N0eWxlRGVjbGFyYXRpb246OnZp
c2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgdmlzaXRvci5h
ZGRPcGFxdWVSb290KHJvb3QoJndyYXBwZWQoKSkpOwogfQogCit0ZW1wbGF0ZSB2b2lkIEpTQ1NT
U3R5bGVEZWNsYXJhdGlvbjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oQWJzdHJhY3RTbG90Vmlz
aXRvciYpOwordGVtcGxhdGUgdm9pZCBKU0NTU1N0eWxlRGVjbGFyYXRpb246OnZpc2l0QWRkaXRp
b25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2FsbGJhY2tEYXRhLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NhbGxiYWNrRGF0YS5jcHAJKHJl
dmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2FsbGJhY2tE
YXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDctMjAwOSwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTk1LDEyICs5NSwxNiBAQCBKU1ZhbHVl
IEpTQ2FsbGJhY2tEYXRhOjppbnZva2VDYWxsYmFjayhKCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0K
IAotdm9pZCBKU0NhbGxiYWNrRGF0YVdlYWs6OnZpc2l0SlNGdW5jdGlvbihKU0M6OlNsb3RWaXNp
dG9yJiB2aXN0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0NhbGxiYWNr
RGF0YVdlYWs6OnZpc2l0SlNGdW5jdGlvbihWaXNpdG9yJiB2aXNpdG9yKQogewotICAgIHZpc3Rv
ci5hcHBlbmQobV9jYWxsYmFjayk7CisgICAgdmlzaXRvci5hcHBlbmQobV9jYWxsYmFjayk7CiB9
CiAKLWJvb2wgSlNDYWxsYmFja0RhdGFXZWFrOjpXZWFrT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9w
YXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIFNsb3RW
aXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQordGVtcGxhdGUgdm9pZCBKU0Nh
bGxiYWNrRGF0YVdlYWs6OnZpc2l0SlNGdW5jdGlvbihKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3Im
KTsKK3RlbXBsYXRlIHZvaWQgSlNDYWxsYmFja0RhdGFXZWFrOjp2aXNpdEpTRnVuY3Rpb24oSlND
OjpTbG90VmlzaXRvciYpOworCitib29sIEpTQ2FsbGJhY2tEYXRhV2Vhazo6V2Vha093bmVyOjpp
c1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lk
KiBjb250ZXh0LCBBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVh
c29uKQogewogICAgIGlmIChVTkxJS0VMWShyZWFzb24pKQogICAgICAgICAqcmVhc29uID0gIkNv
bnRleHQgaXMgb3BhcXVlIHJvb3QiOyAvLyBGSVhNRTogd2hhdCBpcyB0aGUgY29udGV4dC4KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2FsbGJhY2tEYXRhLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDYWxsYmFja0RhdGEuaAkocmV2aXNp
b24gMjcyODMwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDYWxsYmFja0RhdGEu
aAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDctMjAwOSwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMDctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTExMywxMSArMTEzLDExIEBAIHB1YmxpYzoKICAg
ICAgICAgcmV0dXJuIEpTQ2FsbGJhY2tEYXRhOjppbnZva2VDYWxsYmFjaygqZ2xvYmFsT2JqZWN0
LCBjYWxsYmFjaygpLCB0aGlzVmFsdWUsIGFyZ3MsIGNhbGxiYWNrVHlwZSwgZnVuY3Rpb25OYW1l
LCByZXR1cm5lZEV4Y2VwdGlvbik7CiAgICAgfQogCi0gICAgdm9pZCB2aXNpdEpTRnVuY3Rpb24o
SlNDOjpTbG90VmlzaXRvciYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQg
dmlzaXRKU0Z1bmN0aW9uKFZpc2l0b3ImKTsKIAogcHJpdmF0ZToKICAgICBjbGFzcyBXZWFrT3du
ZXIgOiBwdWJsaWMgSlNDOjpXZWFrSGFuZGxlT3duZXIgewotICAgICAgICBib29sIGlzUmVhY2hh
YmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRl
eHQsIEpTQzo6U2xvdFZpc2l0b3ImLCBjb25zdCBjaGFyKiopIG92ZXJyaWRlOworICAgICAgICBi
b29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4s
IHZvaWQqIGNvbnRleHQsIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYsIGNvbnN0IGNoYXIqKikg
b3ZlcnJpZGU7CiAgICAgfTsKICAgICBXZWFrT3duZXIgbV93ZWFrT3duZXI7CiAgICAgSlNDOjpX
ZWFrPEpTQzo6SlNPYmplY3Q+IG1fY2FsbGJhY2s7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREN1c3RvbS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRD
dXN0b20uY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMTcgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yNCw3ICsyNCw3
IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotYm9vbCBKU0NhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyRE93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVu
a25vd24+IGhhbmRsZSwgdm9pZCosIEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNo
YXIqKiByZWFzb24pCitib29sIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJET3duZXI6OmlzUmVh
Y2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2
b2lkKiwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVh
c29uKQogewogICAgIGlmIChVTkxJS0VMWShyZWFzb24pKQogICAgICAgICAqcmVhc29uID0gIkNh
bnZhcyBpcyBvcGFxdWUgcm9vdCI7CkBAIC0zNCw5ICszNCwxMyBAQCBib29sIEpTQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJET3duZXI6OmlzCiAgICAgcmV0dXJuIHZpc2l0b3IuY29udGFpbnNPcGFx
dWVSb290KHJvb3QpOwogfQogCi12b2lkIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjp2aXNp
dEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8
dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnZpc2l0
QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgdmlzaXRvci5hZGRP
cGFxdWVSb290KHJvb3Qod3JhcHBlZCgpLmNhbnZhcygpKSk7CiB9CiAKK3RlbXBsYXRlIHZvaWQg
SlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6
QWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU0NhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyRDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYpOworCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0N1c3RvbUV2ZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0N1c3RvbUV2ZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDdXN0b21FdmVudEN1c3RvbS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTggQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC00MiwxMCArNDIsMTQgQEAgSlNDOjpKU1ZhbHVlIEpTQ3VzdG9tRXZlbnQ6OmRl
dGFpbChKU0M6OgogICAgIH0pOwogfQogCi12b2lkIEpTQ3VzdG9tRXZlbnQ6OnZpc2l0QWRkaXRp
b25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBWaXNpdG9yPgordm9pZCBKU0N1c3RvbUV2ZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihW
aXNpdG9yJiB2aXNpdG9yKQogewogICAgIHdyYXBwZWQoKS5kZXRhaWwoKS52aXNpdCh2aXNpdG9y
KTsKICAgICB3cmFwcGVkKCkuY2FjaGVkRGV0YWlsKCkudmlzaXQodmlzaXRvcik7CiB9CiAKK3Rl
bXBsYXRlIHZvaWQgSlNDdXN0b21FdmVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpB
YnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTQ3VzdG9tRXZlbnQ6OnZpc2l0
QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImKTsKKwogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CdWlsdGluQ29u
c3RydWN0b3JCYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0RPTUJ1aWx0aW5Db25zdHJ1Y3RvckJhc2UuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJ1aWx0aW5Db25zdHJ1Y3RvckJhc2UuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5
OTktMjAwMSBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQotICogIENvcHlyaWdodCAoQykg
MjAwNC0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQg
KEMpIDIwMDQtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiAgQ29weXJp
Z2h0IChDKSAyMDA3IFNhbXVlbCBXZWluaWcgPHNhbUB3ZWJraXQub3JnPgogICogIENvcHlyaWdo
dCAoQykgMjAxMyBNaWNoYWVsIFBydWV0dCA8bWljaGFlbEA2OGsub3JnPgogICoKQEAgLTQ1LDcg
KzQ1LDggQEAgdm9pZCBKU0RPTUJ1aWx0aW5Db25zdHJ1Y3RvckJhc2U6OmNhbGxGdQogICAgIEpT
Qzo6Y2FsbCgmbGV4aWNhbEdsb2JhbE9iamVjdCwgJmZ1bmN0aW9uLCBjYWxsRGF0YSwgJnRoaXNP
YmplY3QsIGFyZ3VtZW50cyk7CiB9CiAKLXZvaWQgSlNET01CdWlsdGluQ29uc3RydWN0b3JCYXNl
Ojp2aXNpdENoaWxkcmVuKEpTQzo6SlNDZWxsKiBjZWxsLCBKU0M6OlNsb3RWaXNpdG9yJiB2aXNp
dG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNET01CdWlsdGluQ29uc3Ry
dWN0b3JCYXNlOjp2aXNpdENoaWxkcmVuSW1wbChKU0M6OkpTQ2VsbCogY2VsbCwgVmlzaXRvciYg
dmlzaXRvcikKIHsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTRE9NQnVpbHRpbkNv
bnN0cnVjdG9yQmFzZSo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhp
c09iamVjdCwgaW5mbygpKTsKQEAgLTUzLDYgKzU0LDggQEAgdm9pZCBKU0RPTUJ1aWx0aW5Db25z
dHJ1Y3RvckJhc2U6OnZpc2l0QwogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1faW5p
dGlhbGl6ZUZ1bmN0aW9uKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTRE9NQnVpbHRp
bkNvbnN0cnVjdG9yQmFzZSk7CisKIEpTQzo6SXNvU3Vic3BhY2UqIEpTRE9NQnVpbHRpbkNvbnN0
cnVjdG9yQmFzZTo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQogewogICAgIHJldHVybiAm
c3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKS0+ZG9tQnVpbHRpbkNv
bnN0cnVjdG9yU3BhY2UoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9N
QnVpbHRpbkNvbnN0cnVjdG9yQmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTRE9NQnVpbHRpbkNvbnN0cnVjdG9yQmFzZS5oCShyZXZpc2lvbiAyNzI4MzAp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJ1aWx0aW5Db25zdHJ1Y3RvckJh
c2UuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChD
KSAyMDE1LCAyMDE2IENhbm9uIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqICBDb3B5cmln
aHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdo
dCAoQykgMjAxNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiAg
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2Vu
ZXJhbCBQdWJsaWMKQEAgLTQyLDcgKzQyLDcgQEAgcHJvdGVjdGVkOgogICAgIHsKICAgICB9CiAK
LSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90Vmlz
aXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBKU0M6OkpTRnVuY3Rp
b24qIGluaXRpYWxpemVGdW5jdGlvbigpOwogICAgIHZvaWQgc2V0SW5pdGlhbGl6ZUZ1bmN0aW9u
KEpTQzo6Vk0mLCBKU0M6OkpTRnVuY3Rpb24mKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxOCBB
cHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAy
MSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTIzOCw3ICsyMzgsOCBAQCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBKU0RP
TUdsb2JhbE9iamVjCiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLXZvaWQgSlNET01HbG9iYWxP
YmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikK
K3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTRE9NR2xvYmFsT2JqZWN0Ojp2aXNp
dENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNE
T01HbG9iYWxPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihj
ZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7
CkBAIC0yNjAsNiArMjYxLDggQEAgdm9pZCBKU0RPTUdsb2JhbE9iamVjdDo6dmlzaXRDaGlsZHJl
bihKUwogICAgIHRoaXNPYmplY3QtPm1fYnVpbHRpbkludGVybmFsRnVuY3Rpb25zLnZpc2l0KHZp
c2l0b3IpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNET01HbG9iYWxPYmplY3QpOwor
CiB2b2lkIEpTRE9NR2xvYmFsT2JqZWN0Ojpwcm9taXNlUmVqZWN0aW9uVHJhY2tlcihKU0dsb2Jh
bE9iamVjdCoganNHbG9iYWxPYmplY3QsIEpTUHJvbWlzZSogcHJvbWlzZSwgSlNQcm9taXNlUmVq
ZWN0aW9uT3BlcmF0aW9uIG9wZXJhdGlvbikKIHsKICAgICAvLyBodHRwczovL2h0bWwuc3BlYy53
aGF0d2cub3JnL211bHRpcGFnZS93ZWJhcHBhcGlzLmh0bWwjdGhlLWhvc3Rwcm9taXNlcmVqZWN0
aW9udHJhY2tlci1pbXBsZW1lbnRhdGlvbgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNET01HbG9iYWxPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOC0yMDE4IEFwcGxlIEluYy4g
QWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDIxIEFwcGxlIElu
Yy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtNjksNyArNjksNyBAQCBwdWJsaWM6CiAgICAgLy8gTWFrZSBiaW5kaW5nIGNvZGUgZ2VuZXJh
dGlvbiBlYXNpZXIuCiAgICAgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCgpIHsgcmV0
dXJuIHRoaXM7IH0KIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDOjpKU0NlbGwq
LCBKU0M6OlNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAg
IERPTVdyYXBwZXJXb3JsZCYgd29ybGQoKSB7IHJldHVybiBtX3dvcmxkLmdldCgpOyB9CiAgICAg
Ym9vbCB3b3JsZElzTm9ybWFsKCkgY29uc3QgeyByZXR1cm4gbV93b3JsZElzTm9ybWFsOyB9Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUd1YXJkZWRPYmplY3QuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUd1YXJkZWRPYmplY3Qu
aAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01H
dWFyZGVkT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDEsNiArNDEsNyBAQCBwdWJsaWM6CiAgICAg
Ym9vbCBpc1N1c3BlbmRlZCgpIGNvbnN0IHsgcmV0dXJuICFtX2d1YXJkZWQgfHwgIWNhbkludm9r
ZUNhbGxiYWNrKCk7IH0gLy8gVGhlIHdyYXBwZXIgd29ybGQgaGFzIGdvbmUgYXdheSBvciBhY3Rp
dmUgRE9NIG9iamVjdHMgaGF2ZSBiZWVuIHN1c3BlbmRlZC4KIAogICAgIHZvaWQgdmlzaXRBZ2dy
ZWdhdGUoSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikgeyB2aXNpdG9yLmFwcGVuZChtX2d1YXJk
ZWQpOyB9CisgICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3Im
IHZpc2l0b3IpIHsgdmlzaXRvci5hcHBlbmQobV9ndWFyZGVkKTsgfQogCiAgICAgSlNDOjpKU1Zh
bHVlIGd1YXJkZWRPYmplY3QoKSBjb25zdCB7IHJldHVybiBtX2d1YXJkZWQuZ2V0KCk7IH0KICAg
ICBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KCkgY29uc3QgeyByZXR1cm4gbV9nbG9i
YWxPYmplY3QuZ2V0KCk7IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9N
UXVhZEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNET01RdWFkQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNET01RdWFkQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMyw3ICszMyw4
IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCi12b2lkIEpT
RE9NUXVhZDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0
ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0RPTVF1YWQ6OnZpc2l0QWRkaXRpb25h
bENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290
KGNvbnN0X2Nhc3Q8RE9NUG9pbnQqPigmd3JhcHBlZCgpLnAxKCkpKTsKICAgICB2aXNpdG9yLmFk
ZE9wYXF1ZVJvb3QoY29uc3RfY2FzdDxET01Qb2ludCo+KCZ3cmFwcGVkKCkucDIoKSkpOwpAQCAt
NDEsNCArNDIsNyBAQCB2b2lkIEpTRE9NUXVhZDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oCiAg
ICAgdmlzaXRvci5hZGRPcGFxdWVSb290KGNvbnN0X2Nhc3Q8RE9NUG9pbnQqPigmd3JhcHBlZCgp
LnA0KCkpKTsKIH0KIAotfQordGVtcGxhdGUgdm9pZCBKU0RPTVF1YWQ6OnZpc2l0QWRkaXRpb25h
bENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNET01RdWFk
Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYpOworCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0N1
c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01X
aW5kb3dDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0RPTVdpbmRvd0N1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAtMTE2LDcgKzExNiw4IEBAIEpTQ19ERUZJTkVf
Q1VTVE9NX0dFVFRFUihqc0RPTVdpbmRvd0luc3QKICAgICByZXR1cm4gbm9uQ2FjaGluZ1N0YXRp
Y0Z1bmN0aW9uR2V0dGVySW1wbDxqc0RPTVdpbmRvd0luc3RhbmNlRnVuY3Rpb25fcG9zdE1lc3Nh
Z2UsIDI+KGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lKTsKIH0KIAotdm9pZCBKU0RPTVdpbmRv
dzo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0
ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0RPTVdpbmRvdzo6dmlzaXRBZGRpdGlvbmFsQ2hp
bGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBpZiAoRnJhbWUqIGZyYW1lID0gd3JhcHBl
ZCgpLmZyYW1lKCkpCiAgICAgICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChmcmFtZSk7CkBAIC0x
MjksNiArMTMwLDkgQEAgdm9pZCBKU0RPTVdpbmRvdzo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZQog
ICAgIHdyYXBwZWQoKS52aXNpdEpTRXZlbnRMaXN0ZW5lcnModmlzaXRvcik7CiB9CiAKK3RlbXBs
YXRlIHZvaWQgSlNET01XaW5kb3c6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEFic3RyYWN0U2xv
dFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNET01XaW5kb3c6OnZpc2l0QWRkaXRpb25hbENo
aWxkcmVuKFNsb3RWaXNpdG9yJik7CisKICNpZiBFTkFCTEUoVVNFUl9NRVNTQUdFX0hBTkRMRVJT
KQogSlNDX0RFRklORV9DVVNUT01fR0VUVEVSKGpzRE9NV2luZG93X3dlYmtpdCwgKEpTR2xvYmFs
T2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFBy
b3BlcnR5TmFtZSkpCiB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RlcHJl
Y2F0ZWRDU1NPTVZhbHVlQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0RlcHJlY2F0ZWRDU1NPTVZhbHVlQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcy
ODMwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNEZXByZWNhdGVkQ1NTT01WYWx1
ZUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDA3LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDA3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNSw3ICszNSw3IEBACiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCi1ib29sIEpTRGVwcmVjYXRlZENTU09N
VmFsdWVPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpV
bmtub3duPiBoYW5kbGUsIHZvaWQqLCBTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioq
IHJlYXNvbikKK2Jvb2wgSlNEZXByZWNhdGVkQ1NTT01WYWx1ZU93bmVyOjppc1JlYWNoYWJsZUZy
b21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIEFi
c3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCiB7CiAgICAg
SlNEZXByZWNhdGVkQ1NTT01WYWx1ZSoganNDU1NWYWx1ZSA9IGpzQ2FzdDxKU0RlcHJlY2F0ZWRD
U1NPTVZhbHVlKj4oaGFuZGxlLnNsb3QoKS0+YXNDZWxsKCkpOwogICAgIGlmICghanNDU1NWYWx1
ZS0+aGFzQ3VzdG9tUHJvcGVydGllcyhqc0NTU1ZhbHVlLT52bSgpKSkKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTRG9jdW1lbnRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRG9jdW1lbnRDdXN0b20uY3BwCShyZXZpc2lvbiAy
NzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RvY3VtZW50Q3VzdG9tLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDctMjAwOSwgMjAxMSwgMjAxNiwgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTkxLDExICs5MSwxNSBAQCBKU1ZhbHVlIHRvSlMo
SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iCiAgICAgcmV0dXJuIHRvSlNOZXdseUNyZWF0ZWQo
bGV4aWNhbEdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LCBSZWY8RG9jdW1lbnQ+KGRvY3VtZW50
KSk7CiB9CiAKLXZvaWQgSlNEb2N1bWVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZp
c2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0RvY3Vt
ZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHZp
c2l0b3IuYWRkT3BhcXVlUm9vdChzdGF0aWNfY2FzdDxTY3JpcHRFeGVjdXRpb25Db250ZXh0Kj4o
JndyYXBwZWQoKSkpOwogfQogCit0ZW1wbGF0ZSB2b2lkIEpTRG9jdW1lbnQ6OnZpc2l0QWRkaXRp
b25hbENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNEb2N1
bWVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKKwogdm9pZCBKU0Rv
Y3VtZW50OjphbmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5hbHl6ZXIp
CiB7CiAgICAgQmFzZTo6YW5hbHl6ZUhlYXAoY2VsbCwgYW5hbHl6ZXIpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNFcnJvckV2ZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Vycm9yRXZlbnRDdXN0b20uY3BwCShyZXZp
c2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Vycm9yRXZlbnRD
dXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdo
dCAoQykgMjAxOCBZdXN1a2UgU3V6dWtpIDx5dXN1a2VzdXp1a2lAc2xvd3N0YXJ0Lm9yZz4uCisg
KiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOCw5ICsyOSwxMyBAQAogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLXZvaWQgSlNFcnJvckV2ZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJl
bihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4K
K3ZvaWQgSlNFcnJvckV2ZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNp
dG9yKQogewogICAgIHdyYXBwZWQoKS5vcmlnaW5hbEVycm9yKCkudmlzaXQodmlzaXRvcik7CiB9
CiAKK3RlbXBsYXRlIHZvaWQgSlNFcnJvckV2ZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihK
U0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNFcnJvckV2ZW50Ojp2
aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJik7CisKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRMaXN0
ZW5lci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVu
dExpc3RlbmVyLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNFdmVudExpc3RlbmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAK
IC8qCiAgKiAgQ29weXJpZ2h0IChDKSAyMDAxIFBldGVyIEtlbGx5IChwbWtAcG9zdC5jb20pCi0g
KiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMTkgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVk
LgorICogIENvcHlyaWdodCAoQykgMjAwMy0yMDIxIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNl
cnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKQEAgLTc4LDcgKzc4LDggQEAgSlNPYmplY3QqIEpT
RXZlbnRMaXN0ZW5lcjo6aW5pdGlhbGl6ZUpTRgogICAgIHJldHVybiBudWxscHRyOwogfQogCi12
b2lkIEpTRXZlbnRMaXN0ZW5lcjo6dmlzaXRKU0Z1bmN0aW9uKFNsb3RWaXNpdG9yJiB2aXNpdG9y
KQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK2lubGluZSB2b2lkIEpTRXZlbnRMaXN0ZW5l
cjo6dmlzaXRKU0Z1bmN0aW9uSW1wbChWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIC8vIElmIG1f
d3JhcHBlciBpcyBudWxsLCB3ZSBhcmUgbm90IGtlZXBpbmcgbV9qc0Z1bmN0aW9uIGFsaXZlLgog
ICAgIGlmICghbV93cmFwcGVyKQpAQCAtODcsNiArODgsOSBAQCB2b2lkIEpTRXZlbnRMaXN0ZW5l
cjo6dmlzaXRKU0Z1bmN0aW9uKFNsCiAgICAgdmlzaXRvci5hcHBlbmQobV9qc0Z1bmN0aW9uKTsK
IH0KIAordm9pZCBKU0V2ZW50TGlzdGVuZXI6OnZpc2l0SlNGdW5jdGlvbihBYnN0cmFjdFNsb3RW
aXNpdG9yJiB2aXNpdG9yKSB7IHZpc2l0SlNGdW5jdGlvbkltcGwodmlzaXRvcik7IH0KK3ZvaWQg
SlNFdmVudExpc3RlbmVyOjp2aXNpdEpTRnVuY3Rpb24oU2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsg
dmlzaXRKU0Z1bmN0aW9uSW1wbCh2aXNpdG9yKTsgfQorCiBzdGF0aWMgdm9pZCBoYW5kbGVCZWZv
cmVVbmxvYWRFdmVudFJldHVyblZhbHVlKEJlZm9yZVVubG9hZEV2ZW50JiBldmVudCwgY29uc3Qg
U3RyaW5nJiByZXR1cm5WYWx1ZSkKIHsKICAgICBpZiAocmV0dXJuVmFsdWUuaXNOdWxsKCkpCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50TGlzdGVuZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50TGlzdGVuZXIuaAkocmV2
aXNpb24gMjcyODMwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudExpc3Rl
bmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogIENvcHlyaWdodCAo
QykgMjAwMSBQZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQotICogIENvcHlyaWdodCAoQykgMjAw
My0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMp
IDIwMDMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
ICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwg
UHVibGljCkBAIC02Miw2ICs2Miw5IEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICB2aXJ0dWFs
IEpTQzo6SlNPYmplY3QqIGluaXRpYWxpemVKU0Z1bmN0aW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQmKSBjb25zdDsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgdmlzaXRK
U0Z1bmN0aW9uSW1wbChWaXNpdG9yJik7CisgICAgdm9pZCB2aXNpdEpTRnVuY3Rpb24oSlNDOjpB
YnN0cmFjdFNsb3RWaXNpdG9yJikgZmluYWw7CiAgICAgdm9pZCB2aXNpdEpTRnVuY3Rpb24oSlND
OjpTbG90VmlzaXRvciYpIGZpbmFsOwogCiBwcm90ZWN0ZWQ6CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0V2ZW50VGFyZ2V0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50VGFyZ2V0Q3VzdG9tLmNwcAkocmV2aXNpb24g
MjcyODMwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudFRhcmdldEN1c3Rv
bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDA4LTIwMTcgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDA4LTIwMjEgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03Miw5ICs3MiwxMyBAQCBzdGQ6OnVuaXF1ZV9wdHI8
SlNFdmVudFRhcmdldFdyYXBwZXI+IGpzCiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLXZvaWQg
SlNFdmVudFRhcmdldDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0
b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0V2ZW50VGFyZ2V0Ojp2aXNp
dEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHdyYXBwZWQoKS52
aXNpdEpTRXZlbnRMaXN0ZW5lcnModmlzaXRvcik7CiB9CiAKK3RlbXBsYXRlIHZvaWQgSlNFdmVu
dFRhcmdldDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oQWJzdHJhY3RTbG90VmlzaXRvciYpOwor
dGVtcGxhdGUgdm9pZCBKU0V2ZW50VGFyZ2V0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90
VmlzaXRvciYpOworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0ZldGNoRXZlbnRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRmV0Y2hFdmVudEN1c3RvbS5jcHAJKHJldmlzaW9uIDI3
MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRmV0Y2hFdmVudEN1c3RvbS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
Ny0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMzAsMTEgKzMwLDE1IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAotdm9pZCBKU0ZldGNoRXZlbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZp
c2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0ZldGNo
RXZlbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAg
dmlzaXRvci5hZGRPcGFxdWVSb290KCZ3cmFwcGVkKCkucmVxdWVzdCgpKTsKIH0KIAotfQordGVt
cGxhdGUgdm9pZCBKU0ZldGNoRXZlbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6QWJz
dHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU0ZldGNoRXZlbnQ6OnZpc2l0QWRk
aXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImKTsKKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQogCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTENh
bnZhc0VsZW1lbnRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTSFRNTENhbnZhc0VsZW1lbnRDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI4MzApCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxDYW52YXNFbGVtZW50Q3VzdG9tLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIw
LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0zMSw5ICszMSwxMyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
LXZvaWQgSlNIVE1MQ2FudmFzRWxlbWVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpT
bG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpT
SFRNTENhbnZhc0VsZW1lbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0
b3IpCiB7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHN0YXRpY19jYXN0PENhbnZhc0Jhc2Uq
Pigmd3JhcHBlZCgpKSk7CiB9CiAKK3RlbXBsYXRlIHZvaWQgSlNIVE1MQ2FudmFzRWxlbWVudDo6
dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1w
bGF0ZSB2b2lkIEpTSFRNTENhbnZhc0VsZW1lbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpT
Qzo6U2xvdFZpc2l0b3ImKTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MVGVtcGxhdGVFbGVtZW50Q3VzdG9tLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxUZW1wbGF0ZUVsZW1l
bnRDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0hUTUxUZW1wbGF0ZUVsZW1lbnRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKQEAgLTM3LDEw
ICszOCwxNCBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAot
dm9pZCBKU0hUTUxUZW1wbGF0ZUVsZW1lbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBK
U0hUTUxUZW1wbGF0ZUVsZW1lbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZp
c2l0b3IpCiB7CiAgICAgaWYgKGF1dG8qIGNvbnRlbnQgPSB3cmFwcGVkKCkuY29udGVudElmQXZh
aWxhYmxlKCkpCiAgICAgICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChyb290KGNvbnRlbnQpKTsK
IH0KIAordGVtcGxhdGUgdm9pZCBKU0hUTUxUZW1wbGF0ZUVsZW1lbnQ6OnZpc2l0QWRkaXRpb25h
bENoaWxkcmVuKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU0hU
TUxUZW1wbGF0ZUVsZW1lbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0
b3ImKTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNIaXN0b3J5Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0hpc3RvcnlDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hpc3RvcnlDdXN0b20uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOC0yMDE4IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtNDQsOSArNDQsMTMgQEAgSlNWYWx1ZSBKU0hpc3Rvcnk6OnN0YXRlKEpTR2xvYmFs
T2JqZWN0JgogICAgIH0pOwogfQogCi12b2lkIEpTSGlzdG9yeTo6dmlzaXRBZGRpdGlvbmFsQ2hp
bGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgor
dm9pZCBKU0hpc3Rvcnk6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3Ip
CiB7CiAgICAgd3JhcHBlZCgpLmNhY2hlZFN0YXRlRm9yR0MoKS52aXNpdCh2aXNpdG9yKTsKIH0K
IAordGVtcGxhdGUgdm9pZCBKU0hpc3Rvcnk6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEFic3Ry
YWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNIaXN0b3J5Ojp2aXNpdEFkZGl0aW9u
YWxDaGlsZHJlbihTbG90VmlzaXRvciYpOworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQkN1cnNvckN1c3RvbS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJDdXJzb3JDdXN0b20uY3Bw
CShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQkN1
cnNvckN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTAsNyArNTAsOCBAQCBKU0M6OkpTVmFsdWUg
SlNJREJDdXJzb3I6OnByaW1hcnlLZXkoSlNDCiAgICAgfSk7CiB9CiAKLXZvaWQgSlNJREJDdXJz
b3I6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxh
dGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNJREJDdXJzb3I6OnZpc2l0QWRkaXRpb25hbENo
aWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0byYgY3Vyc29yID0gd3JhcHBlZCgp
OwogICAgIGlmIChhdXRvKiByZXF1ZXN0ID0gY3Vyc29yLnJlcXVlc3QoKSkKQEAgLTU5LDYgKzYw
LDkgQEAgdm9pZCBKU0lEQkN1cnNvcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZQogICAgIGN1cnNv
ci5wcmltYXJ5S2V5V3JhcHBlcigpLnZpc2l0KHZpc2l0b3IpOwogfQogCit0ZW1wbGF0ZSB2b2lk
IEpTSURCQ3Vyc29yOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihBYnN0cmFjdFNsb3RWaXNpdG9y
Jik7Cit0ZW1wbGF0ZSB2b2lkIEpTSURCQ3Vyc29yOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihT
bG90VmlzaXRvciYpOworCiBKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpKU0dsb2JhbE9i
amVjdCosIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZjxJREJDdXJzb3I+JiYg
Y3Vyc29yKQogewogICAgIGlmIChpczxJREJDdXJzb3JXaXRoVmFsdWU+KGN1cnNvcikpCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQkN1cnNvcldpdGhWYWx1ZUN1c3RvbS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJDdXJzb3JX
aXRoVmFsdWVDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0lEQkN1cnNvcldpdGhWYWx1ZUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
NDMsMTIgKzQzLDE2IEBAIEpTQzo6SlNWYWx1ZSBKU0lEQkN1cnNvcldpdGhWYWx1ZTo6dmFsdWUK
ICAgICB9KTsKIH0KIAotdm9pZCBKU0lEQkN1cnNvcldpdGhWYWx1ZTo6dmlzaXRBZGRpdGlvbmFs
Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
Pgordm9pZCBKU0lEQkN1cnNvcldpdGhWYWx1ZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlz
aXRvciYgdmlzaXRvcikKIHsKICAgICBKU0lEQkN1cnNvcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRy
ZW4odmlzaXRvcik7CiAgICAgd3JhcHBlZCgpLnZhbHVlV3JhcHBlcigpLnZpc2l0KHZpc2l0b3Ip
OwogfQogCit0ZW1wbGF0ZSB2b2lkIEpTSURCQ3Vyc29yV2l0aFZhbHVlOjp2aXNpdEFkZGl0aW9u
YWxDaGlsZHJlbihBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTSURCQ3Vy
c29yV2l0aFZhbHVlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYpOworCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFT
RSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCSW5kZXhDdXN0b20uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCSW5kZXhDdXN0
b20uY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0lEQkluZGV4Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNCwxMSArMzQsMTUgQEAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKLXZvaWQgSlNJREJJbmRleDo6
dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0
eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0lEQkluZGV4Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJl
bihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChzdGF0aWNf
Y2FzdDxJREJJbmRleCY+KHdyYXBwZWQoKSkub2JqZWN0U3RvcmVBc09wYXF1ZVJvb3QoKSk7CiB9
CiAKK3RlbXBsYXRlIHZvaWQgSlNJREJJbmRleDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oQWJz
dHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU0lEQkluZGV4Ojp2aXNpdEFkZGl0
aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYpOworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAK
ICNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTSURCT2JqZWN0U3RvcmVDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCT2JqZWN0U3RvcmVDdXN0b20uY3BwCShyZXZp
c2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQk9iamVjdFN0
b3JlQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5
cmlnaHQgKEMpIDIwMTIgTWljaGFlbCBQcnVldHQgPG1pY2hhZWxANjhrLm9yZz4KKyAqIENvcHly
aWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCkBAIC0zNiwxMSArMzcsMTUgQEAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKLXZvaWQgSlNJREJPYmplY3RTdG9yZTo6
dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0
eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0lEQk9iamVjdFN0b3JlOjp2aXNpdEFkZGl0aW9uYWxD
aGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHN0YXRpY19jYXN0PElEQk9iamVjdFN0
b3JlJj4od3JhcHBlZCgpKS52aXNpdFJlZmVyZW5jZWRJbmRleGVzKHZpc2l0b3IpOwogfQogCi19
Cit0ZW1wbGF0ZSB2b2lkIEpTSURCT2JqZWN0U3RvcmU6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVu
KEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNJREJPYmplY3RTdG9yZTo6
dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQogCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURC
UmVxdWVzdEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNJREJSZXF1ZXN0Q3VzdG9tLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNJREJSZXF1ZXN0Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE5LTIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC04
OSwxMiArODksMTcgQEAgSlNDOjpKU1ZhbHVlIEpTSURCUmVxdWVzdDo6cmVzdWx0KEpTQzo6Sgog
ICAgIH0pOwogfQogCi12b2lkIEpTSURCUmVxdWVzdDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4o
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBK
U0lEQlJlcXVlc3Q6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7
CiAgICAgYXV0byYgcmVxdWVzdCA9IHdyYXBwZWQoKTsKICAgICByZXF1ZXN0LnJlc3VsdFdyYXBw
ZXIoKS52aXNpdCh2aXNpdG9yKTsKICAgICByZXF1ZXN0LmN1cnNvcldyYXBwZXIoKS52aXNpdCh2
aXNpdG9yKTsKIH0KIAotfQordGVtcGxhdGUgdm9pZCBKU0lEQlJlcXVlc3Q6OnZpc2l0QWRkaXRp
b25hbENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNJREJS
ZXF1ZXN0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYpOworCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKICNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCVHJhbnNhY3Rpb25DdXN0b20uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCVHJhbnNhY3Rp
b25DdXN0b20uY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0lEQlRyYW5zYWN0aW9uQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNCwxMSArMzQs
MTUgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKLXZvaWQg
SlNJREJUcmFuc2FjdGlvbjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZp
c2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0lEQlRyYW5zYWN0aW9u
Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHN0YXRp
Y19jYXN0PElEQlRyYW5zYWN0aW9uJj4od3JhcHBlZCgpKS52aXNpdFJlZmVyZW5jZWRPYmplY3RT
dG9yZXModmlzaXRvcik7CiB9CiAKLX0KK3RlbXBsYXRlIHZvaWQgSlNJREJUcmFuc2FjdGlvbjo6
dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oQWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUg
dm9pZCBKU0lEQlRyYW5zYWN0aW9uOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRv
ciYpOworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZgpJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNJbnRlcnNlY3Rpb25PYnNlcnZlckN1c3RvbS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJbnRlcnNlY3Rpb25PYnNlcnZl
ckN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTSW50ZXJzZWN0aW9uT2JzZXJ2ZXJDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAyMCBJZ2FsaWEgUy5MLgorICogQ29w
eXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzAsMTAgKzMxLDE0IEBACiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotdm9pZCBKU0ludGVyc2VjdGlvbk9ic2VydmVyOjp2aXNpdEFkZGl0aW9uYWxD
aGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlz
aXRvcj4KK3ZvaWQgSlNJbnRlcnNlY3Rpb25PYnNlcnZlcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRy
ZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBpZiAoYXV0byogY2FsbGJhY2sgPSB3cmFwcGVk
KCkuY2FsbGJhY2tDb25jdXJyZW50bHkoKSkKICAgICAgICAgY2FsbGJhY2stPnZpc2l0SlNGdW5j
dGlvbih2aXNpdG9yKTsKIH0KIAotfQordGVtcGxhdGUgdm9pZCBKU0ludGVyc2VjdGlvbk9ic2Vy
dmVyOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKTsK
K3RlbXBsYXRlIHZvaWQgSlNJbnRlcnNlY3Rpb25PYnNlcnZlcjo6dmlzaXRBZGRpdGlvbmFsQ2hp
bGRyZW4oSlNDOjpTbG90VmlzaXRvciYpOworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0ludGVyc2VjdGlvbk9ic2VydmVyRW50cnlD
dXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW50
ZXJzZWN0aW9uT2JzZXJ2ZXJFbnRyeUN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW50ZXJzZWN0aW9uT2JzZXJ2ZXJFbnRyeUN1c3Rv
bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChD
KSAyMDE4IEdvb2dsZSBMTEMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0zMCw3ICszMSw4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAot
dm9pZCBKU0ludGVyc2VjdGlvbk9ic2VydmVyRW50cnk6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVu
KEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgor
dm9pZCBKU0ludGVyc2VjdGlvbk9ic2VydmVyRW50cnk6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVu
KFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHJvb3Qod3Jh
cHBlZCgpLnRhcmdldCgpKSk7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHdyYXBwZWQoKS5i
b3VuZGluZ0NsaWVudFJlY3QoKSk7CkBAIC0zOCw0ICs0MCw3IEBAIHZvaWQgSlNJbnRlcnNlY3Rp
b25PYnNlcnZlckVudHJ5Ojp2aXNpdEEKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qod3JhcHBl
ZCgpLnJvb3RCb3VuZHMoKSk7CiB9CiAKLX0KK3RlbXBsYXRlIHZvaWQgSlNJbnRlcnNlY3Rpb25P
YnNlcnZlckVudHJ5Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OkFic3RyYWN0U2xvdFZp
c2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNJbnRlcnNlY3Rpb25PYnNlcnZlckVudHJ5Ojp2aXNp
dEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJik7CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWVzc2FnZUNoYW5u
ZWxDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
TWVzc2FnZUNoYW5uZWxDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU01lc3NhZ2VDaGFubmVsQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgQXBwbGUg
SW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMjEgQXBw
bGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0zMyw3ICszMyw4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBKU01l
c3NhZ2VDaGFubmVsOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2
aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNNZXNzYWdlQ2hhbm5l
bDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBpZiAo
TWVzc2FnZVBvcnQqIHBvcnQgPSB3cmFwcGVkKCkucG9ydDEoKSkKICAgICAgICAgdmlzaXRvci5h
ZGRPcGFxdWVSb290KHBvcnQpOwpAQCAtNDIsNiArNDMsOSBAQCB2b2lkIEpTTWVzc2FnZUNoYW5u
ZWw6OnZpc2l0QWRkaXRpb25hbENoCiAgICAgICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChwb3J0
KTsKIH0KIAordGVtcGxhdGUgdm9pZCBKU01lc3NhZ2VDaGFubmVsOjp2aXNpdEFkZGl0aW9uYWxD
aGlsZHJlbihKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNNZXNz
YWdlQ2hhbm5lbDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYpOwor
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoQ0hBTk5FTF9NRVNT
QUdJTkcpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01lc3NhZ2VFdmVudEN1
c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNZXNz
YWdlRXZlbnRDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU01lc3NhZ2VFdmVudEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
NiArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxOCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAyMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCkBA
IC03MCw3ICs3MCw4IEBAIEpTQzo6SlNWYWx1ZSBKU01lc3NhZ2VFdmVudDo6ZGF0YShKU0M6OkoK
ICAgICB9KTsKIH0KIAotdm9pZCBKU01lc3NhZ2VFdmVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRy
ZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+
Cit2b2lkIEpTTWVzc2FnZUV2ZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2
aXNpdG9yKQogewogICAgIFdURjo6c3dpdGNoT24od3JhcHBlZCgpLmRhdGEoKSwgWyZ2aXNpdG9y
XSAoY29uc3QgSlNWYWx1ZUluV3JhcHBlZE9iamVjdCYgZGF0YSkgewogICAgICAgICBkYXRhLnZp
c2l0KHZpc2l0b3IpOwpAQCAtODQsNCArODUsNyBAQCB2b2lkIEpTTWVzc2FnZUV2ZW50Ojp2aXNp
dEFkZGl0aW9uYWxDaGlsCiAgICAgd3JhcHBlZCgpLmNhY2hlZFBvcnRzKCkudmlzaXQodmlzaXRv
cik7CiB9CiAKK3RlbXBsYXRlIHZvaWQgSlNNZXNzYWdlRXZlbnQ6OnZpc2l0QWRkaXRpb25hbENo
aWxkcmVuKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU01lc3Nh
Z2VFdmVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYpOworCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U01lc3NhZ2VQb3J0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU01lc3NhZ2VQb3J0Q3VzdG9tLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNZXNzYWdlUG9ydEN1c3RvbS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMDksIDIw
MTYgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4
LTIwMjEgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAy
MDExIEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBA
IC0zMSwxMSArMzEsMTUgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBK
U0M7CiAKLXZvaWQgSlNNZXNzYWdlUG9ydDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZp
c2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU01lc3Nh
Z2VQb3J0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAg
IC8vIElmIHdlIGhhdmUgYSBsb2NhbGx5IGVudGFuZ2xlZCBwb3J0LCB3ZSBjYW4gZGlyZWN0bHkg
bWFyayBpdCBhcyByZWFjaGFibGUuIFBvcnRzIHRoYXQgYXJlIHJlbW90ZWx5IGVudGFuZ2xlZCBh
cmUgbWFya2VkIGluLXVzZSBieSBtYXJrQWN0aXZlT2JqZWN0c0ZvckNvbnRleHQoKS4KICAgICBp
ZiAoTWVzc2FnZVBvcnQqIHBvcnQgPSB3cmFwcGVkKCkubG9jYWxseUVudGFuZ2xlZFBvcnQoKSkK
ICAgICAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHBvcnQpOwogfQogCit0ZW1wbGF0ZSB2b2lk
IEpTTWVzc2FnZVBvcnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0
b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNNZXNzYWdlUG9ydDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRy
ZW4oU2xvdFZpc2l0b3ImKTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNNdXRhdGlvbk9ic2VydmVyQ3VzdG9tLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU011dGF0aW9uT2JzZXJ2ZXJDdXN0
b20uY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U011dGF0aW9uT2JzZXJ2ZXJDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBA
QAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKQEAgLTM5LDEyICszOSwx
NiBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAotdm9pZCBK
U011dGF0aW9uT2JzZXJ2ZXI6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0
b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU011dGF0aW9u
T2JzZXJ2ZXI6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAg
ICAgd3JhcHBlZCgpLmNhbGxiYWNrKCkudmlzaXRKU0Z1bmN0aW9uKHZpc2l0b3IpOwogfQogCi1i
b29sIEpTTXV0YXRpb25PYnNlcnZlck93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhK
U0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIFNsb3RWaXNpdG9yJiB2aXNp
dG9yLCBjb25zdCBjaGFyKipyZWFzb24pCit0ZW1wbGF0ZSB2b2lkIEpTTXV0YXRpb25PYnNlcnZl
cjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0
ZW1wbGF0ZSB2b2lkIEpTTXV0YXRpb25PYnNlcnZlcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4o
SlNDOjpTbG90VmlzaXRvciYpOworCitib29sIEpTTXV0YXRpb25PYnNlcnZlck93bmVyOjppc1Jl
YWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwg
dm9pZCosIEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKnJlYXNvbikK
IHsKICAgICBmb3IgKGF1dG8qIG5vZGUgOiBqc0Nhc3Q8SlNNdXRhdGlvbk9ic2VydmVyKj4oaGFu
ZGxlLnNsb3QoKS0+YXNDZWxsKCkpLT53cmFwcGVkKCkub2JzZXJ2ZWROb2RlcygpKSB7CiAgICAg
ICAgIGlmICh2aXNpdG9yLmNvbnRhaW5zT3BhcXVlUm9vdChyb290KG5vZGUpKSkgewpJbmRleDog
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNdXRhdGlvblJlY29yZEN1c3RvbS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNdXRhdGlvblJlY29yZEN1
c3RvbS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTTXV0YXRpb25SZWNvcmRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMwLDkgKzMwLDEzIEBA
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBKU011dGF0aW9uUmVjb3JkOjp2aXNpdEFk
ZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlw
ZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNNdXRhdGlvblJlY29yZDo6dmlzaXRBZGRpdGlvbmFsQ2hp
bGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB3cmFwcGVkKCkudmlzaXROb2Rlc0NvbmN1
cnJlbnRseSh2aXNpdG9yKTsKIH0KLSAgICAKKwordGVtcGxhdGUgdm9pZCBKU011dGF0aW9uUmVj
b3JkOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKTsK
K3RlbXBsYXRlIHZvaWQgSlNNdXRhdGlvblJlY29yZDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4o
SlNDOjpTbG90VmlzaXRvciYpOworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05hdmlnYXRvckN1c3RvbS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOYXZpZ2F0b3JDdXN0b20uY3BwCShyZXZp
c2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05hdmlnYXRvckN1
c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzIsMTEgKzMyLDE1IEBACiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAotdm9pZCBKU05hdmlnYXRvcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpT
bG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpT
TmF2aWdhdG9yOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewog
ICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChzdGF0aWNfY2FzdDxOYXZpZ2F0b3JCYXNlKj4oJndy
YXBwZWQoKSkpOwogfQogCit0ZW1wbGF0ZSB2b2lkIEpTTmF2aWdhdG9yOjp2aXNpdEFkZGl0aW9u
YWxDaGlsZHJlbihKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNO
YXZpZ2F0b3I6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImKTsKKwog
I2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCiBKU0M6OkpTVmFsdWUgSlNOYXZpZ2F0b3I6OmdldFVz
ZXJNZWRpYShKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OkNh
bGxGcmFtZSYgY2FsbEZyYW1lKQogewpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNOb2RlQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU05vZGVDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU05vZGVDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOS0yMDEwLCAyMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDIxIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtNzQsNyArNzQsNyBAQCB1c2luZyBuYW1lc3BhY2UgSlNDOwogCiB1c2luZyBuYW1lc3BhY2Ug
SFRNTE5hbWVzOwogCi1zdGF0aWMgaW5saW5lIGJvb2wgaXNSZWFjaGFibGVGcm9tRE9NKE5vZGUq
IG5vZGUsIFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQorc3RhdGlj
IGlubGluZSBib29sIGlzUmVhY2hhYmxlRnJvbURPTShOb2RlKiBub2RlLCBBYnN0cmFjdFNsb3RW
aXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQogewogICAgIGlmICghbm9kZS0+
aXNDb25uZWN0ZWQoKSkgewogICAgICAgICBpZiAoaXM8RWxlbWVudD4oKm5vZGUpKSB7CkBAIC0x
MjMsNyArMTIzLDcgQEAgc3RhdGljIGlubGluZSBib29sIGlzUmVhY2hhYmxlRnJvbURPTShObwog
ICAgIHJldHVybiB2aXNpdG9yLmNvbnRhaW5zT3BhcXVlUm9vdChyb290KG5vZGUpKTsKIH0KIAot
Ym9vbCBKU05vZGVPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8
SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3Qg
Y2hhcioqIHJlYXNvbikKK2Jvb2wgSlNOb2RlT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJv
b3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgQWJzdHJhY3RTbG90
VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikKIHsKICAgICBKU05vZGUqIGpz
Tm9kZSA9IGpzQ2FzdDxKU05vZGUqPihoYW5kbGUuc2xvdCgpLT5hc0NlbGwoKSk7CiAgICAgcmV0
dXJuIGlzUmVhY2hhYmxlRnJvbURPTSgmanNOb2RlLT53cmFwcGVkKCksIHZpc2l0b3IsIHJlYXNv
bik7CkBAIC0xMzYsMTEgKzEzNiwxNSBAQCBKU1Njb3BlKiBKU05vZGU6OnB1c2hFdmVudEhhbmRs
ZXJTY29wZShKCiAgICAgcmV0dXJuIG5vZGU7CiB9CiAKLXZvaWQgSlNOb2RlOjp2aXNpdEFkZGl0
aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZp
c2l0b3I+Cit2b2lkIEpTTm9kZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlz
aXRvcikKIHsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qocm9vdCh3cmFwcGVkKCkpKTsKIH0K
IAordGVtcGxhdGUgdm9pZCBKU05vZGU6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEFic3RyYWN0
U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNOb2RlOjp2aXNpdEFkZGl0aW9uYWxDaGls
ZHJlbihTbG90VmlzaXRvciYpOworCiBzdGF0aWMgQUxXQVlTX0lOTElORSBKU1ZhbHVlIGNyZWF0
ZVdyYXBwZXJJbmxpbmUoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTRE9N
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZjxOb2RlPiYmIG5vZGUpCiB7CiAgICAgQVNT
RVJUKCFnZXRDYWNoZWRXcmFwcGVyKGdsb2JhbE9iamVjdC0+d29ybGQoKSwgbm9kZSkpOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlSXRlcmF0b3JDdXN0b20uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUl0ZXJhdG9yQ3Vz
dG9tLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNOb2RlSXRlcmF0b3JDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI1LDEwICsyNSwxNCBAQAog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgSlNOb2RlSXRlcmF0b3I6OnZpc2l0QWRkaXRp
b25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBWaXNpdG9yPgordm9pZCBKU05vZGVJdGVyYXRvcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4o
VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBpZiAoTm9kZUZpbHRlciogZmlsdGVyID0gd3JhcHBl
ZCgpLmZpbHRlcigpKQogICAgICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QoZmlsdGVyKTsKIH0K
IAotfQordGVtcGxhdGUgdm9pZCBKU05vZGVJdGVyYXRvcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRy
ZW4oSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTTm9kZUl0ZXJh
dG9yOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJik7CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9k
ZUxpc3RDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTTm9kZUxpc3RDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU05vZGVMaXN0Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAxOSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAyMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM3
LDcgKzM3LDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAK
LWJvb2wgSlNOb2RlTGlzdE93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6Okhh
bmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBj
b25zdCBjaGFyKiogcmVhc29uKQorYm9vbCBKU05vZGVMaXN0T3duZXI6OmlzUmVhY2hhYmxlRnJv
bU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgQWJz
dHJhY3RTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikKIHsKICAgICBK
U05vZGVMaXN0KiBqc05vZGVMaXN0ID0ganNDYXN0PEpTTm9kZUxpc3QqPihoYW5kbGUuc2xvdCgp
LT5hc0NlbGwoKSk7CiAgICAgaWYgKCFqc05vZGVMaXN0LT5oYXNDdXN0b21Qcm9wZXJ0aWVzKGpz
Tm9kZUxpc3QtPnZtKCkpKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNPZmZz
Y3JlZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTT2Zmc2NyZWVuQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNPZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRDdXN0b20uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTMx
LDcgKzMxLDcgQEAgaW5saW5lIHZvaWQqIHJvb3QoT2Zmc2NyZWVuQ2FudmFzKiBjYW52YQogICAg
IHJldHVybiBjYW52YXM7CiB9CiAKLWJvb2wgSlNPZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdDb250
ZXh0MkRPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpV
bmtub3duPiBoYW5kbGUsIHZvaWQqLCBTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioq
IHJlYXNvbikKK2Jvb2wgSlNPZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRPd25lcjo6
aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5k
bGUsIHZvaWQqLCBBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVh
c29uKQogewogICAgIGlmIChVTkxJS0VMWShyZWFzb24pKQogICAgICAgICAqcmVhc29uID0gIkNh
bnZhcyBpcyBvcGFxdWUgcm9vdCI7CkBAIC00MSwxMSArNDEsMTUgQEAgYm9vbCBKU09mZnNjcmVl
bkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRAogICAgIHJldHVybiB2aXNpdG9yLmNvbnRhaW5zT3Bh
cXVlUm9vdChyb290KTsKIH0KIAotdm9pZCBKU09mZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyRDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1w
bGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU09mZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyRDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAg
ICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qocm9vdCgmd3JhcHBlZCgpLmNhbnZhcygpKSk7CiB9CiAK
K3RlbXBsYXRlIHZvaWQgSlNPZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnZpc2l0
QWRkaXRpb25hbENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQg
SlNPZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnZpc2l0QWRkaXRpb25hbENoaWxk
cmVuKFNsb3RWaXNpdG9yJik7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1BhaW50UmVuZGVyaW5nQ29udGV4dDJE
Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1Bh
aW50UmVuZGVyaW5nQ29udGV4dDJEQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNQYWludFJlbmRlcmluZ0NvbnRleHQyREN1c3RvbS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
OC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMzYsNyArMzYsNyBAQCBpbmxpbmUgdm9pZCogcm9vdChDdXN0b21Q
YWludENhbnZhcyogY2FuCiAgICAgcmV0dXJuIGNhbnZhczsKIH0KIAotYm9vbCBKU1BhaW50UmVu
ZGVyaW5nQ29udGV4dDJET3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFu
ZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgU2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNv
bnN0IGNoYXIqKiByZWFzb24pCitib29sIEpTUGFpbnRSZW5kZXJpbmdDb250ZXh0MkRPd25lcjo6
aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5k
bGUsIHZvaWQqLCBBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVh
c29uKQogewogICAgIGlmIChVTkxJS0VMWShyZWFzb24pKQogICAgICAgICAqcmVhc29uID0gIkNh
bnZhcyBpcyBvcGFxdWUgcm9vdCI7CkBAIC00NiwxMSArNDYsMTUgQEAgYm9vbCBKU1BhaW50UmVu
ZGVyaW5nQ29udGV4dDJET3duZXI6OmlzUgogICAgIHJldHVybiB2aXNpdG9yLmNvbnRhaW5zT3Bh
cXVlUm9vdChyb290KTsKIH0KIAotdm9pZCBKU1BhaW50UmVuZGVyaW5nQ29udGV4dDJEOjp2aXNp
dEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVu
YW1lIFZpc2l0b3I+Cit2b2lkIEpTUGFpbnRSZW5kZXJpbmdDb250ZXh0MkQ6OnZpc2l0QWRkaXRp
b25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVS
b290KHJvb3QoJndyYXBwZWQoKS5jYW52YXMoKSkpOwogfQogCit0ZW1wbGF0ZSB2b2lkIEpTUGFp
bnRSZW5kZXJpbmdDb250ZXh0MkQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEFic3RyYWN0U2xv
dFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNQYWludFJlbmRlcmluZ0NvbnRleHQyRDo6dmlz
aXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKKwogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQogI2VuZGlmCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUGFpbnRX
b3JrbGV0R2xvYmFsU2NvcGVDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTUGFpbnRXb3JrbGV0R2xvYmFsU2NvcGVDdXN0b20uY3BwCShyZXZpc2lv
biAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1BhaW50V29ya2xldEds
b2JhbFNjb3BlQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE4LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMSw3ICszMSw4IEBACiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCi12b2lkIEpTUGFpbnRXb3JrbGV0
R2xvYmFsU2NvcGU6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZp
c2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1BhaW50V29ya2xldEds
b2JhbFNjb3BlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewog
ICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sod3JhcHBlZCgpLnBhaW50RGVmaW5pdGlvbkxvY2so
KSk7CiAgICAgZm9yIChhdXRvJiByZWdpc3RlcmVkIDogd3JhcHBlZCgpLnBhaW50RGVmaW5pdGlv
bk1hcCgpLnZhbHVlcygpKSB7CkBAIC00MCw1ICs0MSw5IEBAIHZvaWQgSlNQYWludFdvcmtsZXRH
bG9iYWxTY29wZTo6dmlzaXRBZGQKICAgICB9CiB9CiAKLX0KK3RlbXBsYXRlIHZvaWQgSlNQYWlu
dFdvcmtsZXRHbG9iYWxTY29wZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpBYnN0cmFj
dFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTUGFpbnRXb3JrbGV0R2xvYmFsU2NvcGU6
OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImKTsKKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTUGF5bWVudE1ldGhvZENoYW5nZUV2ZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1BheW1lbnRNZXRob2RDaGFuZ2VFdmVudEN1c3RvbS5j
cHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUGF5
bWVudE1ldGhvZENoYW5nZUV2ZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00MSw3ICs0MSw4
IEBAIEpTQzo6SlNWYWx1ZSBKU1BheW1lbnRNZXRob2RDaGFuZ2VFdmVudDoKICAgICB9KTsKIH0K
IAotdm9pZCBKU1BheW1lbnRNZXRob2RDaGFuZ2VFdmVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRy
ZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+
Cit2b2lkIEpTUGF5bWVudE1ldGhvZENoYW5nZUV2ZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJl
bihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFdURjo6c3dpdGNoT24od3JhcHBlZCgpLm1ldGhv
ZERldGFpbHMoKSwgWyZ2aXNpdG9yXShjb25zdCBKU1ZhbHVlSW5XcmFwcGVkT2JqZWN0JiBtZXRo
b2REZXRhaWxzKSB7CiAgICAgICAgIG1ldGhvZERldGFpbHMudmlzaXQodmlzaXRvcik7CkBAIC01
MSw2ICs1Miw5IEBAIHZvaWQgSlNQYXltZW50TWV0aG9kQ2hhbmdlRXZlbnQ6OnZpc2l0QWQKICAg
ICB3cmFwcGVkKCkuY2FjaGVkTWV0aG9kRGV0YWlscygpLnZpc2l0KHZpc2l0b3IpOwogfQogCit0
ZW1wbGF0ZSB2b2lkIEpTUGF5bWVudE1ldGhvZENoYW5nZUV2ZW50Ojp2aXNpdEFkZGl0aW9uYWxD
aGlsZHJlbihKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNQYXlt
ZW50TWV0aG9kQ2hhbmdlRXZlbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZp
c2l0b3ImKTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKFBB
WU1FTlRfUkVRVUVTVCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUGF5bWVu
dFJlc3BvbnNlQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU1BheW1lbnRSZXNwb25zZUN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUGF5bWVudFJlc3BvbnNlQ3VzdG9tLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0zNywxMSArMzcsMTUgQEAgSlNDOjpKU1ZhbHVlIEpTUGF5bWVudFJlc3BvbnNl
OjpkZXRhaWxzKAogICAgIH0pOwogfQogCi12b2lkIEpTUGF5bWVudFJlc3BvbnNlOjp2aXNpdEFk
ZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlw
ZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNQYXltZW50UmVzcG9uc2U6OnZpc2l0QWRkaXRpb25hbENo
aWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgd3JhcHBlZCgpLmNhY2hlZERldGFpbHMo
KS52aXNpdCh2aXNpdG9yKTsKIH0KIAordGVtcGxhdGUgdm9pZCBKU1BheW1lbnRSZXNwb25zZTo6
dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1w
bGF0ZSB2b2lkIEpTUGF5bWVudFJlc3BvbnNlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6
OlNsb3RWaXNpdG9yJik7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVO
QUJMRShQQVlNRU5UX1JFUVVFU1QpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U1BlcmZvcm1hbmNlT2JzZXJ2ZXJDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTUGVyZm9ybWFuY2VPYnNlcnZlckN1c3RvbS5jcHAJKHJldmlzaW9u
IDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUGVyZm9ybWFuY2VPYnNl
cnZlckN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxOC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzEsMTIgKzMxLDE2IEBACiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotdm9pZCBKU1BlcmZvcm1hbmNlT2JzZXJ2ZXI6OnZpc2l0QWRkaXRpb25h
bENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPgordm9pZCBKU1BlcmZvcm1hbmNlT2JzZXJ2ZXI6OnZpc2l0QWRkaXRpb25hbENoaWxk
cmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgd3JhcHBlZCgpLmNhbGxiYWNrKCkudmlzaXRK
U0Z1bmN0aW9uKHZpc2l0b3IpOwogfQogCi1ib29sIEpTUGVyZm9ybWFuY2VPYnNlcnZlck93bmVy
Ojppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhh
bmRsZSwgdm9pZCosIEpTQzo6U2xvdFZpc2l0b3ImLCBjb25zdCBjaGFyKiogcmVhc29uKQordGVt
cGxhdGUgdm9pZCBKU1BlcmZvcm1hbmNlT2JzZXJ2ZXI6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVu
KEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU1BlcmZvcm1hbmNl
T2JzZXJ2ZXI6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImKTsKKwor
Ym9vbCBKU1BlcmZvcm1hbmNlT2JzZXJ2ZXJPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9v
dHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBKU0M6OkFic3RyYWN0
U2xvdFZpc2l0b3ImLCBjb25zdCBjaGFyKiogcmVhc29uKQogewogICAgIGlmIChVTkxJS0VMWShy
ZWFzb24pKQogICAgICAgICAqcmVhc29uID0gIlJlZ2lzdGVyZWQgUGVyZm9ybWFuY2VPYnNlcnZl
ciBjYWxsYmFjayI7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1BvcFN0YXRl
RXZlbnRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTUG9wU3RhdGVFdmVudEN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTUG9wU3RhdGVFdmVudEN1c3RvbS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQpA
QCAtOTAsOSArOTEsMTMgQEAgSlNWYWx1ZSBKU1BvcFN0YXRlRXZlbnQ6OnN0YXRlKEpTR2xvYmFs
TwogICAgIHJldHVybiBjYWNoZVN0YXRlKHJlc3VsdCk7CiB9CiAKLXZvaWQgSlNQb3BTdGF0ZUV2
ZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQor
dGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNQb3BTdGF0ZUV2ZW50Ojp2aXNpdEFk
ZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHdyYXBwZWQoKS5zdGF0
ZSgpLnZpc2l0KHZpc2l0b3IpOwogfQogCit0ZW1wbGF0ZSB2b2lkIEpTUG9wU3RhdGVFdmVudDo6
dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1w
bGF0ZSB2b2lkIEpTUG9wU3RhdGVFdmVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpT
bG90VmlzaXRvciYpOworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU1Byb21pc2VSZWplY3Rpb25FdmVudEN1c3RvbS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNQcm9taXNlUmVqZWN0aW9uRXZl
bnRDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU1Byb21pc2VSZWplY3Rpb25FdmVudEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDE4IFl1c3VrZSBTdXp1a2kgPHl1
c3VrZXN1enVraUBzbG93c3RhcnQub3JnPi4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTMyLDkgKzMzLDEzIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBKU1Byb21p
c2VSZWplY3Rpb25FdmVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRv
ciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTUHJvbWlzZVJl
amVjdGlvbkV2ZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQog
ewogICAgIHdyYXBwZWQoKS5yZWFzb24oKS52aXNpdCh2aXNpdG9yKTsKIH0KIAordGVtcGxhdGUg
dm9pZCBKU1Byb21pc2VSZWplY3Rpb25FdmVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlND
OjpBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTUHJvbWlzZVJlamVjdGlv
bkV2ZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJik7CisKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
UmVzaXplT2JzZXJ2ZXJDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTUmVzaXplT2JzZXJ2ZXJDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI4MzApCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1Jlc2l6ZU9ic2VydmVyQ3VzdG9tLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMjAg
SWdhbGlhIFMuTC4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMwLDExICszMSwx
NSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgSlNSZXNpemVPYnNlcnZlcjo6dmlz
aXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRl
PHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTUmVzaXplT2JzZXJ2ZXI6OnZpc2l0QWRkaXRpb25h
bENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgUmVzaXplT2JzZXJ2ZXJDYWxsYmFj
ayogY2FsbGJhY2sgPSB3cmFwcGVkKCkuY2FsbGJhY2tDb25jdXJyZW50bHkoKTsKICAgICBpZiAo
Y2FsbGJhY2spCiAgICAgICAgIGNhbGxiYWNrLT52aXNpdEpTRnVuY3Rpb24odmlzaXRvcik7CiB9
CiAKLX0KK3RlbXBsYXRlIHZvaWQgSlNSZXNpemVPYnNlcnZlcjo6dmlzaXRBZGRpdGlvbmFsQ2hp
bGRyZW4oSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTUmVzaXpl
T2JzZXJ2ZXI6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImKTsKKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNSZXNpemVPYnNlcnZlckVudHJ5Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU1Jlc2l6ZU9ic2VydmVyRW50cnlDdXN0b20uY3BwCShyZXZpc2lv
biAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1Jlc2l6ZU9ic2VydmVy
RW50cnlDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENv
cHlyaWdodCAoQykgMjAxOSBJZ2FsaWEgUy5MLgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMzAsMTAgKzMxLDE0IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBKU1Jl
c2l6ZU9ic2VydmVyRW50cnk6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0
b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1Jlc2l6ZU9i
c2VydmVyRW50cnk6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7
CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHJvb3Qod3JhcHBlZCgpLnRhcmdldCgpKSk7CiAg
ICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHdyYXBwZWQoKS5jb250ZW50UmVjdCgpKTsKIH0KIAot
fQordGVtcGxhdGUgdm9pZCBKU1Jlc2l6ZU9ic2VydmVyRW50cnk6OnZpc2l0QWRkaXRpb25hbENo
aWxkcmVuKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU1Jlc2l6
ZU9ic2VydmVyRW50cnk6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3Im
KTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNTVkdWaWV3U3BlY0N1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNTVkdWaWV3U3BlY0N1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjgzMCkK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU1ZHVmlld1NwZWNDdXN0b20uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTMwLDEwICszMCwxNCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZv
aWQgSlNTVkdWaWV3U3BlYzo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRv
ciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTU1ZHVmlld1Nw
ZWM6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgQVNT
RVJUKHdyYXBwZWQoKS5jb250ZXh0RWxlbWVudENvbmN1cnJlbnRseSgpLmdldCgpKTsKICAgICB2
aXNpdG9yLmFkZE9wYXF1ZVJvb3Qocm9vdCh3cmFwcGVkKCkuY29udGV4dEVsZW1lbnRDb25jdXJy
ZW50bHkoKS5nZXQoKSkpOwogfQogCi19Cit0ZW1wbGF0ZSB2b2lkIEpTU1ZHVmlld1NwZWM6OnZp
c2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxh
dGUgdm9pZCBKU1NWR1ZpZXdTcGVjOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RW
aXNpdG9yJik7CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTU2VydmljZVdvcmtlckdsb2JhbFNjb3BlQ3VzdG9tLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NlcnZpY2VXb3JrZXJHbG9iYWxT
Y29wZUN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTU2VydmljZVdvcmtlckdsb2JhbFNjb3BlQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0zNCwxMiArMzQsMTYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3BhY2Ug
SlNDOwogCi12b2lkIEpTU2VydmljZVdvcmtlckdsb2JhbFNjb3BlOjp2aXNpdEFkZGl0aW9uYWxD
aGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+
Cit2b2lkIEpTU2VydmljZVdvcmtlckdsb2JhbFNjb3BlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJl
bihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdCgmd3JhcHBl
ZCgpLmNsaWVudHMoKSk7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KCZ3cmFwcGVkKCkucmVn
aXN0cmF0aW9uKCkpOwogfQogCit0ZW1wbGF0ZSB2b2lkIEpTU2VydmljZVdvcmtlckdsb2JhbFNj
b3BlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1w
bGF0ZSB2b2lkIEpTU2VydmljZVdvcmtlckdsb2JhbFNjb3BlOjp2aXNpdEFkZGl0aW9uYWxDaGls
ZHJlbihTbG90VmlzaXRvciYpOworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZgpJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNTdGF0aWNSYW5nZUN1c3RvbS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNTdGF0aWNSYW5nZUN1
c3RvbS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTU3RhdGljUmFuZ2VDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw5ICszMCwxMyBA
QAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgSlNTdGF0aWNSYW5nZTo6dmlzaXRBZGRp
dGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVu
YW1lIFZpc2l0b3I+Cit2b2lkIEpTU3RhdGljUmFuZ2U6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVu
KFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgd3JhcHBlZCgpLnZpc2l0Tm9kZXNDb25jdXJyZW50
bHkodmlzaXRvcik7CiB9CiAKK3RlbXBsYXRlIHZvaWQgSlNTdGF0aWNSYW5nZTo6dmlzaXRBZGRp
dGlvbmFsQ2hpbGRyZW4oSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lk
IEpTU3RhdGljUmFuZ2U6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3Im
KTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNTdHlsZVNoZWV0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU1N0eWxlU2hlZXRDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI4MzApCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1N0eWxlU2hlZXRDdXN0b20uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNywgMjAw
OCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTMwLDExICszMCwxNSBAQAogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLXZvaWQgSlNTdHlsZVNoZWV0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNs
b3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNT
dHlsZVNoZWV0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewog
ICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChyb290KCZ3cmFwcGVkKCkpKTsKIH0KIAordGVtcGxh
dGUgdm9pZCBKU1N0eWxlU2hlZXQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEFic3RyYWN0U2xv
dFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNTdHlsZVNoZWV0Ojp2aXNpdEFkZGl0aW9uYWxD
aGlsZHJlbihTbG90VmlzaXRvciYpOworCiBKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChK
U0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVm
PFN0eWxlU2hlZXQ+JiYgc3R5bGVTaGVldCkKIHsKICAgICBpZiAoc3R5bGVTaGVldC0+aXNDU1NT
dHlsZVNoZWV0KCkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1RleHRUcmFj
a0N1ZUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNUZXh0VHJhY2tDdWVDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU1RleHRUcmFja0N1ZUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MzgsNyArMzgsNyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogdXNpbmcgbmFtZXNwYWNlIEpTQzsK
IAotYm9vbCBKU1RleHRUcmFja0N1ZU93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhK
U0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIFNsb3RWaXNpdG9yJiB2aXNp
dG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQorYm9vbCBKU1RleHRUcmFja0N1ZU93bmVyOjppc1Jl
YWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwg
dm9pZCosIEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24p
CiB7CiAgICAgSlNUZXh0VHJhY2tDdWUqIGpzVGV4dFRyYWNrQ3VlID0ganNDYXN0PEpTVGV4dFRy
YWNrQ3VlKj4oaGFuZGxlLnNsb3QoKS0+YXNDZWxsKCkpOwogICAgIFRleHRUcmFja0N1ZSYgdGV4
dFRyYWNrQ3VlID0ganNUZXh0VHJhY2tDdWUtPndyYXBwZWQoKTsKQEAgLTgyLDEyICs4MiwxNiBA
QCBKU1ZhbHVlIHRvSlMoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iCiAgICAgcmV0dXJuIHdy
YXAobGV4aWNhbEdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LCBjdWUpOwogfQogCi12b2lkIEpT
VGV4dFRyYWNrQ3VlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRv
cikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTVGV4dFRyYWNrQ3VlOjp2aXNp
dEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGlmIChUZXh0VHJh
Y2sqIHRleHRUcmFjayA9IHdyYXBwZWQoKS50cmFjaygpKQogICAgICAgICB2aXNpdG9yLmFkZE9w
YXF1ZVJvb3Qocm9vdCh0ZXh0VHJhY2spKTsKIH0KIAordGVtcGxhdGUgdm9pZCBKU1RleHRUcmFj
a0N1ZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oQWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVt
cGxhdGUgdm9pZCBKU1RleHRUcmFja0N1ZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZp
c2l0b3ImKTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVGV4dFRyYWNrQ3VzdG9tLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1RleHRUcmFja0N1c3RvbS5jcHAJKHJldmlz
aW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVGV4dFRyYWNrQ3Vz
dG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDExLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0zNiwxMSArMzYsMTUgQEAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKLXZvaWQgSlNUZXh0VHJhY2s6OnZpc2l0QWRkaXRp
b25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlz
aXRvcj4KK3ZvaWQgSlNUZXh0VHJhY2s6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3Im
IHZpc2l0b3IpCiB7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHJvb3QoJndyYXBwZWQoKSkp
OwogfQogCit0ZW1wbGF0ZSB2b2lkIEpTVGV4dFRyYWNrOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJl
bihBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTVGV4dFRyYWNrOjp2aXNp
dEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYpOworCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCiAKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNUZXh0VHJh
Y2tMaXN0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU1RleHRUcmFja0xpc3RDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU1RleHRUcmFja0xpc3RDdXN0b20uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAyMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTM2LDExICszNiwxNSBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogdXNpbmcgbmFtZXNwYWNl
IEpTQzsKIAotdm9pZCBKU1RleHRUcmFja0xpc3Q6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpT
Qzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9p
ZCBKU1RleHRUcmFja0xpc3Q6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0
b3IpCiB7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHJvb3Qod3JhcHBlZCgpLmVsZW1lbnQo
KSkpOwogfQogICAgIAordGVtcGxhdGUgdm9pZCBKU1RleHRUcmFja0xpc3Q6OnZpc2l0QWRkaXRp
b25hbENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNUZXh0
VHJhY2tMaXN0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYpOworCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNUcmVlV2Fsa2VyQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU1RyZWVXYWxrZXJDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI4MzApCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1RyZWVXYWxrZXJDdXN0b20uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAw
OCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgog
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKQEAgLTI1LDEwICsyNSwxNCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQg
SlNUcmVlV2Fsa2VyOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2
aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNUcmVlV2Fsa2VyOjp2
aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGlmIChOb2Rl
RmlsdGVyKiBmaWx0ZXIgPSB3cmFwcGVkKCkuZmlsdGVyKCkpCiAgICAgICAgIHZpc2l0b3IuYWRk
T3BhcXVlUm9vdChmaWx0ZXIpOwogfQogCi19Cit0ZW1wbGF0ZSB2b2lkIEpTVHJlZVdhbGtlcjo6
dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1w
bGF0ZSB2b2lkIEpTVHJlZVdhbGtlcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90
VmlzaXRvciYpOworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU1VuZG9JdGVtQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU1VuZG9JdGVtQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcyODMw
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNVbmRvSXRlbUN1c3RvbS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE5IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOS0yMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMjksMTMgKzI5LDE3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9p
ZCBKU1VuZG9JdGVtOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2
aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNVbmRvSXRlbTo6dmlz
aXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB3cmFwcGVkKCku
dW5kb0hhbmRsZXIoKS52aXNpdEpTRnVuY3Rpb24odmlzaXRvcik7CiAgICAgd3JhcHBlZCgpLnJl
ZG9IYW5kbGVyKCkudmlzaXRKU0Z1bmN0aW9uKHZpc2l0b3IpOwogfQogCi1ib29sIEpTVW5kb0l0
ZW1Pd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtu
b3duPiBoYW5kbGUsIHZvaWQqLCBKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFy
KiogcmVhc29uKQordGVtcGxhdGUgdm9pZCBKU1VuZG9JdGVtOjp2aXNpdEFkZGl0aW9uYWxDaGls
ZHJlbihKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNVbmRvSXRl
bTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYpOworCitib29sIEpT
VW5kb0l0ZW1Pd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlND
OjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0
b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCiB7CiAgICAgaWYgKFVOTElLRUxZKHJlYXNvbikpCiAg
ICAgICAgICpyZWFzb24gPSAiRG9jdW1lbnQgaXMgYW4gb3BhcXVlIHJvb3QuIjsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVmFsdWVJbldyYXBwZWRPYmplY3QuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1ZhbHVlSW5XcmFwcGVkT2JqZWN0
LmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVmFs
dWVJbldyYXBwZWRPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE4LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDAsNyArNDAsNyBAQCBwdWJsaWM6CiAg
ICAgb3BlcmF0b3IgSlNDOjpKU1ZhbHVlKCkgY29uc3Q7CiAgICAgZXhwbGljaXQgb3BlcmF0b3Ig
Ym9vbCgpIGNvbnN0OwogICAgIEpTVmFsdWVJbldyYXBwZWRPYmplY3QmIG9wZXJhdG9yPShjb25z
dCBKU1ZhbHVlSW5XcmFwcGVkT2JqZWN0JiBvdGhlcik7Ci0gICAgdm9pZCB2aXNpdChKU0M6OlNs
b3RWaXNpdG9yJikgY29uc3Q7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCB2
aXNpdChWaXNpdG9yJikgY29uc3Q7CiAgICAgdm9pZCBjbGVhcigpOwogCiBwcml2YXRlOgpAQCAt
OTgsNyArOTgsOCBAQCBpbmxpbmUgSlNWYWx1ZUluV3JhcHBlZE9iamVjdCYgSlNWYWx1ZUluCiAg
ICAgcmV0dXJuICp0aGlzOwogfQogCi1pbmxpbmUgdm9pZCBKU1ZhbHVlSW5XcmFwcGVkT2JqZWN0
Ojp2aXNpdChKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKSBjb25zdAordGVtcGxhdGU8dHlwZW5h
bWUgVmlzaXRvcj4KK2lubGluZSB2b2lkIEpTVmFsdWVJbldyYXBwZWRPYmplY3Q6OnZpc2l0KFZp
c2l0b3ImIHZpc2l0b3IpIGNvbnN0CiB7CiAgICAgcmV0dXJuIFdURjo6c3dpdGNoT24obV92YWx1
ZSwgW10gKEpTQzo6SlNWYWx1ZSkgewogICAgICAgICAvLyBOb3RoaW5nIHRvIHZpc2l0LgpAQCAt
MTA3LDYgKzEwOCw5IEBAIGlubGluZSB2b2lkIEpTVmFsdWVJbldyYXBwZWRPYmplY3Q6OnZpc2kK
ICAgICB9KTsKIH0KIAordGVtcGxhdGUgdm9pZCBKU1ZhbHVlSW5XcmFwcGVkT2JqZWN0Ojp2aXNp
dChKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKSBjb25zdDsKK3RlbXBsYXRlIHZvaWQgSlNWYWx1
ZUluV3JhcHBlZE9iamVjdDo6dmlzaXQoSlNDOjpTbG90VmlzaXRvciYpIGNvbnN0OworCiBpbmxp
bmUgdm9pZCBKU1ZhbHVlSW5XcmFwcGVkT2JqZWN0OjpjbGVhcigpCiB7CiAgICAgV1RGOjpzd2l0
Y2hPbihtX3ZhbHVlLCBbXSAoV2VhayYgdmFsdWUpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTVmlkZW9UcmFja0N1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNWaWRlb1RyYWNrQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcyODMw
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNWaWRlb1RyYWNrQ3VzdG9tLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLTIw
MjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0zNSwxMSArMzUsMTUgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5n
IG5hbWVzcGFjZSBKU0M7CiAKLXZvaWQgSlNWaWRlb1RyYWNrOjp2aXNpdEFkZGl0aW9uYWxDaGls
ZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2
b2lkIEpTVmlkZW9UcmFjazo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRv
cikKIHsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qocm9vdCgmd3JhcHBlZCgpKSk7CiB9CiAK
K3RlbXBsYXRlIHZvaWQgSlNWaWRlb1RyYWNrOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6
OkFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNWaWRlb1RyYWNrOjp2aXNp
dEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJik7CisKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKIAogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1Zp
ZGVvVHJhY2tMaXN0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU1ZpZGVvVHJhY2tMaXN0Q3VzdG9tLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNWaWRlb1RyYWNrTGlzdEN1c3RvbS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMzUsMTEgKzM1LDE1IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBu
YW1lc3BhY2UgSlNDOwogCi12b2lkIEpTVmlkZW9UcmFja0xpc3Q6OnZpc2l0QWRkaXRpb25hbENo
aWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4K
K3ZvaWQgSlNWaWRlb1RyYWNrTGlzdDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYg
dmlzaXRvcikKIHsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qocm9vdCh3cmFwcGVkKCkuZWxl
bWVudCgpKSk7CiB9CiAKK3RlbXBsYXRlIHZvaWQgSlNWaWRlb1RyYWNrTGlzdDo6dmlzaXRBZGRp
dGlvbmFsQ2hpbGRyZW4oQWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU1Zp
ZGVvVHJhY2tMaXN0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYpOworCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNXZWJHTDJSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYkdMMlJlbmRlcmluZ0NvbnRleHRDdXN0
b20uY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U1dlYkdMMlJlbmRlcmluZ0NvbnRleHRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE3IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzMs
MTIgKzMzLDE2IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2UgSlNDOwog
Ci12b2lkIEpTV2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4o
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBK
U1dlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3Im
IHZpc2l0b3IpCiB7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KCZ3cmFwcGVkKCkpOwogICAg
IHdyYXBwZWQoKS5hZGRNZW1iZXJzVG9PcGFxdWVSb290cyh2aXNpdG9yKTsKIH0KIAordGVtcGxh
dGUgdm9pZCBKU1dlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVu
KEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU1dlYkdMMlJlbmRl
cmluZ0NvbnRleHQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImKTsK
KwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQkdMKQpJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRDdXN0
b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViR0xS
ZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRDdXN0b20uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTMzLDEyICszMywxNiBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogdXNpbmcgbmFt
ZXNwYWNlIEpTQzsKIAotdm9pZCBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmlzaXRBZGRpdGlv
bmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNp
dG9yPgordm9pZCBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRy
ZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QoJndyYXBw
ZWQoKSk7CiAgICAgd3JhcHBlZCgpLmFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKHZpc2l0b3IpOwog
fQogCit0ZW1wbGF0ZSB2b2lkIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2aXNpdEFkZGl0aW9u
YWxDaGlsZHJlbihBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTV2ViR0xS
ZW5kZXJpbmdDb250ZXh0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYpOwor
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoV0VCR0wpCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckdsb2JhbFNjb3BlQmFzZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrZXJHbG9iYWxT
Y29wZUJhc2UuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU1dvcmtlckdsb2JhbFNjb3BlQmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5LCAyMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDIxIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5j
LiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtOTIsNyArOTIsOCBA
QCB2b2lkIEpTV29ya2VyR2xvYmFsU2NvcGVCYXNlOjpmaW5pc2hDcmVhCiAgICAgQVNTRVJUKGlu
aGVyaXRzKHZtLCBpbmZvKCkpKTsKIH0KIAotdm9pZCBKU1dvcmtlckdsb2JhbFNjb3BlQmFzZTo6
dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxh
dGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNXb3JrZXJHbG9iYWxTY29wZUJhc2U6OnZpc2l0
Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU1dv
cmtlckdsb2JhbFNjb3BlQmFzZSogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1dvcmtlckdsb2JhbFNj
b3BlQmFzZSo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVj
dCwgaW5mbygpKTsKQEAgLTEwMCw2ICsxMDEsOCBAQCB2b2lkIEpTV29ya2VyR2xvYmFsU2NvcGVC
YXNlOjp2aXNpdENoaWxkCiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9wcm94eSk7
CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU1dvcmtlckdsb2JhbFNjb3BlQmFzZSk7CisK
IHZvaWQgSlNXb3JrZXJHbG9iYWxTY29wZUJhc2U6OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQogewog
ICAgIHN0YXRpY19jYXN0PEpTV29ya2VyR2xvYmFsU2NvcGVCYXNlKj4oY2VsbCktPkpTV29ya2Vy
R2xvYmFsU2NvcGVCYXNlOjp+SlNXb3JrZXJHbG9iYWxTY29wZUJhc2UoKTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyR2xvYmFsU2NvcGVCYXNlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrZXJHbG9iYWxTY29wZUJhc2Uu
aAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXb3Jr
ZXJHbG9iYWxTY29wZUJhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03OSw3ICs3OSw3IEBAIHBy
b3RlY3RlZDoKICAgICBKU1dvcmtlckdsb2JhbFNjb3BlQmFzZShKU0M6OlZNJiwgSlNDOjpTdHJ1
Y3R1cmUqLCBSZWZQdHI8V29ya2VyR2xvYmFsU2NvcGU+JiYpOwogICAgIHZvaWQgZmluaXNoQ3Jl
YXRpb24oSlNDOjpWTSYsIEpTQzo6SlNQcm94eSopOwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRD
aGlsZHJlbihKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJ
U0lUX0NISUxEUkVOOwogCiBwcml2YXRlOgogICAgIFJlZlB0cjxXb3JrZXJHbG9iYWxTY29wZT4g
bV93cmFwcGVkOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrZXJHbG9i
YWxTY29wZUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNXb3JrZXJHbG9iYWxTY29wZUN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyR2xvYmFsU2NvcGVDdXN0b20uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOC0y
MDA5LCAyMDExLCAyMDE2IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAwOC0yMDIxIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzMsNyArMzMsOCBAQAogbmFtZXNwYWNlIFdl
YkNvcmUgewogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAotdm9pZCBKU1dvcmtlckdsb2JhbFNjb3Bl
Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRl
PHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTV29ya2VyR2xvYmFsU2NvcGU6OnZpc2l0QWRkaXRp
b25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgaWYgKGF1dG8qIGxvY2F0aW9u
ID0gd3JhcHBlZCgpLm9wdGlvbmFsTG9jYXRpb24oKSkKICAgICAgICAgdmlzaXRvci5hZGRPcGFx
dWVSb290KGxvY2F0aW9uKTsKQEAgLTQ4LDYgKzQ5LDkgQEAgdm9pZCBKU1dvcmtlckdsb2JhbFNj
b3BlOjp2aXNpdEFkZGl0aW9uYQogICAgIHdyYXBwZWQoKS52aXNpdEpTRXZlbnRMaXN0ZW5lcnMo
dmlzaXRvcik7CiB9CiAKK3RlbXBsYXRlIHZvaWQgSlNXb3JrZXJHbG9iYWxTY29wZTo6dmlzaXRB
ZGRpdGlvbmFsQ2hpbGRyZW4oQWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBK
U1dvcmtlckdsb2JhbFNjb3BlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYp
OworCiBKU1ZhbHVlIEpTV29ya2VyR2xvYmFsU2NvcGU6OnF1ZXVlTWljcm90YXNrKEpTR2xvYmFs
T2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUmIGNhbGxGcmFtZSkKIHsKICAg
ICBWTSYgdm0gPSBsZXhpY2FsR2xvYmFsT2JqZWN0LnZtKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU1dvcmtlck5hdmlnYXRvckN1c3RvbS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrZXJOYXZpZ2F0b3JDdXN0b20uY3BwCShy
ZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlck5h
dmlnYXRvckN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjgsOSArMjgsMTMgQEAKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi12b2lkIEpTV29ya2VyTmF2aWdhdG9yOjp2aXNpdEFkZGl0aW9uYWxD
aGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlz
aXRvcj4KK3ZvaWQgSlNXb3JrZXJOYXZpZ2F0b3I6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZp
c2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHN0YXRpY19jYXN0
PE5hdmlnYXRvckJhc2UqPigmd3JhcHBlZCgpKSk7CiB9CiAKLX0KK3RlbXBsYXRlIHZvaWQgSlNX
b3JrZXJOYXZpZ2F0b3I6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6QWJzdHJhY3RTbG90
VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU1dvcmtlck5hdmlnYXRvcjo6dmlzaXRBZGRpdGlv
bmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYpOworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtsZXRHbG9iYWxTY29wZUJh
c2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2xl
dEdsb2JhbFNjb3BlQmFzZS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTV29ya2xldEdsb2JhbFNjb3BlQmFzZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOC0yMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
ODIsNyArODIsOCBAQCB2b2lkIEpTV29ya2xldEdsb2JhbFNjb3BlQmFzZTo6ZmluaXNoQ3JlCiAg
ICAgQVNTRVJUKGluaGVyaXRzKHZtLCBpbmZvKCkpKTsKIH0KIAotdm9pZCBKU1dvcmtsZXRHbG9i
YWxTY29wZUJhc2U6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlz
aXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTV29ya2xldEdsb2JhbFNj
b3BlQmFzZTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9y
KQogewogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNXb3JrbGV0R2xvYmFsU2NvcGVC
YXNlKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBp
bmZvKCkpOwpAQCAtOTAsNiArOTEsOCBAQCB2b2lkIEpTV29ya2xldEdsb2JhbFNjb3BlQmFzZTo6
dmlzaXRDaGlsCiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9wcm94eSk7CiB9CiAK
K0RFRklORV9WSVNJVF9DSElMRFJFTihKU1dvcmtsZXRHbG9iYWxTY29wZUJhc2UpOworCiB2b2lk
IEpTV29ya2xldEdsb2JhbFNjb3BlQmFzZTo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCiB7CiAgICAg
c3RhdGljX2Nhc3Q8SlNXb3JrbGV0R2xvYmFsU2NvcGVCYXNlKj4oY2VsbCktPkpTV29ya2xldEds
b2JhbFNjb3BlQmFzZTo6fkpTV29ya2xldEdsb2JhbFNjb3BlQmFzZSgpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrbGV0R2xvYmFsU2NvcGVCYXNlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrbGV0R2xvYmFsU2NvcGVCYXNl
LmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29y
a2xldEdsb2JhbFNjb3BlQmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY3LDcgKzY3LDcgQEAgcHJvdGVj
dGVkOgogICAgIEpTV29ya2xldEdsb2JhbFNjb3BlQmFzZShKU0M6OlZNJiwgSlNDOjpTdHJ1Y3R1
cmUqLCBSZWZQdHI8V29ya2xldEdsb2JhbFNjb3BlPiYmKTsKICAgICB2b2lkIGZpbmlzaENyZWF0
aW9uKEpTQzo6Vk0mLCBKU0M6OkpTUHJveHkqKTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hp
bGRyZW4oSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJ
VF9DSElMRFJFTjsKIAogcHJpdmF0ZToKICAgICBSZWZQdHI8V29ya2xldEdsb2JhbFNjb3BlPiBt
X3dyYXBwZWQ7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1hNTEh0dHBSZXF1
ZXN0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U1hNTEh0dHBSZXF1ZXN0Q3VzdG9tLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNYTUxIdHRwUmVxdWVzdEN1c3RvbS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtNDEsNyArNDEsOCBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogdXNpbmcgbmFtZXNw
YWNlIEpTQzsKIAotdm9pZCBKU1hNTEh0dHBSZXF1ZXN0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJl
bihTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lk
IEpTWE1MSHR0cFJlcXVlc3Q6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0
b3IpCiB7CiAgICAgaWYgKGF1dG8qIHVwbG9hZCA9IHdyYXBwZWQoKS5vcHRpb25hbFVwbG9hZCgp
KQogICAgICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QodXBsb2FkKTsKQEAgLTUwLDYgKzUxLDkg
QEAgdm9pZCBKU1hNTEh0dHBSZXF1ZXN0Ojp2aXNpdEFkZGl0aW9uYWxDaAogICAgICAgICB2aXNp
dG9yLmFkZE9wYXF1ZVJvb3QocmVzcG9uc2VEb2N1bWVudCk7CiB9CiAKK3RlbXBsYXRlIHZvaWQg
SlNYTUxIdHRwUmVxdWVzdDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oQWJzdHJhY3RTbG90Vmlz
aXRvciYpOwordGVtcGxhdGUgdm9pZCBKU1hNTEh0dHBSZXF1ZXN0Ojp2aXNpdEFkZGl0aW9uYWxD
aGlsZHJlbihTbG90VmlzaXRvciYpOworCiBKU1ZhbHVlIEpTWE1MSHR0cFJlcXVlc3Q6OnJlc3Bv
bnNlKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0KSBjb25zdAogewogICAgIGF1
dG8gY2FjaGVSZXN1bHQgPSBbJl0gKEpTVmFsdWUgdmFsdWUpIC0+IEpTVmFsdWUgewpJbmRleDog
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNYUGF0aFJlc3VsdEN1c3RvbS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNYUGF0aFJlc3VsdEN1c3RvbS5j
cHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTWFBh
dGhSZXN1bHRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAq
IENvcHlyaWdodCAoQykgMjAxMSBKdWxpZW4gQ2hhZmZyYWl4IDxqY2hhZmZyYWl4QHdlYmtpdC5v
cmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMSw3ICszMiw4IEBACiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBKU1hQYXRoUmVzdWx0Ojp2aXNpdEFkZGl0aW9uYWxD
aGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlz
aXRvcj4KK3ZvaWQgSlNYUGF0aFJlc3VsdDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRv
ciYgdmlzaXRvcikKIHsKICAgICBhdXRvJiB2YWx1ZSA9IHdyYXBwZWQoKS52YWx1ZSgpOwogICAg
IGlmICh2YWx1ZS5pc05vZGVTZXQoKSkgewpAQCAtNDEsNCArNDMsNyBAQCB2b2lkIEpTWFBhdGhS
ZXN1bHQ6OnZpc2l0QWRkaXRpb25hbENoaWxkCiAgICAgfQogfQogCit0ZW1wbGF0ZSB2b2lkIEpT
WFBhdGhSZXN1bHQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6QWJzdHJhY3RTbG90Vmlz
aXRvciYpOwordGVtcGxhdGUgdm9pZCBKU1hQYXRoUmVzdWx0Ojp2aXNpdEFkZGl0aW9uYWxDaGls
ZHJlbihKU0M6OlNsb3RWaXNpdG9yJik7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV2ViQ29yZVR5cGVk
QXJyYXlDb250cm9sbGVyLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvV2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC01Niw3ICs1Niw3IEBAIGJvb2wgV2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyOjppc0F0b20K
ICAgICByZXR1cm4gbV9hbGxvd0F0b21pY3NXYWl0OwogfQogCi1ib29sIFdlYkNvcmVUeXBlZEFy
cmF5Q29udHJvbGxlcjo6SlNBcnJheUJ1ZmZlck93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVS
b290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIEpTQzo6U2xvdFZp
c2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCitib29sIFdlYkNvcmVUeXBlZEFy
cmF5Q29udHJvbGxlcjo6SlNBcnJheUJ1ZmZlck93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVS
b290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIEpTQzo6QWJzdHJh
Y3RTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikKIHsKICAgICBpZiAo
VU5MSUtFTFkocmVhc29uKSkKICAgICAgICAgKnJlYXNvbiA9ICJBcnJheUJ1ZmZlciBpcyBvcGFx
dWUgcm9vdCI7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlVHlwZWRB
cnJheUNvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9XZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXIuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtNDgsNyArNDgsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIGNsYXNzIEpT
QXJyYXlCdWZmZXJPd25lciA6IHB1YmxpYyBKU0M6OldlYWtIYW5kbGVPd25lciB7CiAgICAgcHVi
bGljOgotICAgICAgICBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxl
PEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6U2xvdFZpc2l0b3ImLCBjb25zdCBj
aGFyKiopIG92ZXJyaWRlOworICAgICAgICBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3Rz
KEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6QWJzdHJhY3RT
bG90VmlzaXRvciYsIGNvbnN0IGNoYXIqKikgb3ZlcnJpZGU7CiAgICAgICAgIHZvaWQgZmluYWxp
emUoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCkgb3ZlcnJpZGU7CiAg
ICAgfTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJh
dG9ySlMucG0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9D
b2RlR2VuZXJhdG9ySlMucG0JKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCSh3b3JraW5nIGNvcHkpCkBAIC0zLDcg
KzMsNyBAQAogIyBDb3B5cmlnaHQgKEMpIDIwMDYgQW5kZXJzIENhcmxzc29uIDxhbmRlcnNjYUBt
YWMuY29tPgogIyBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgU2FtdWVsIFdlaW5pZyA8c2FtQHdl
YmtpdC5vcmc+CiAjIENvcHlyaWdodCAoQykgMjAwNiBBbGV4ZXkgUHJvc2t1cnlha292IDxhcEB3
ZWJraXQub3JnPgotIyBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisjIENvcHlyaWdodCAoQykgMjAwNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICMgQ29weXJpZ2h0IChDKSAyMDA5IENhbWVyb24gTWNDb3JtYWNrIDxj
YW1AbWNjLmlkLmF1PgogIyBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVk
IDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAjIENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBD
b3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKQEAgLTMwNzgsOCArMzA3OCw4
IEBAIHN1YiBHZW5lcmF0ZUhlYWRlcgogCiAgICAgIyB2aXNpdCBmdW5jdGlvbgogICAgIGlmICgk
bmVlZHNWaXNpdENoaWxkcmVuKSB7Ci0gICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAg
c3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJik7XG4i
KTsKLSAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICB2b2lkIHZpc2l0QWRkaXRpb25h
bENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImKTtcbiIpIGlmICRpbnRlcmZhY2UtPmV4dGVuZGVk
QXR0cmlidXRlcy0+e0pTQ3VzdG9tTWFya0Z1bmN0aW9ufTsKKyAgICAgICAgcHVzaChAaGVhZGVy
Q29udGVudCwgIiAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOO1xuIik7CisgICAgICAgIHB1c2go
QGhlYWRlckNvbnRlbnQsICIgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCB2aXNp
dEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJik7XG4iKSBpZiAkaW50ZXJmYWNlLT5leHRlbmRl
ZEF0dHJpYnV0ZXMtPntKU0N1c3RvbU1hcmtGdW5jdGlvbn07CiAgICAgICAgIHB1c2goQGhlYWRl
ckNvbnRlbnQsICJcbiIpOwogCiAgICAgICAgIGlmICgkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJp
YnV0ZXMtPntKU0N1c3RvbU1hcmtGdW5jdGlvbn0pIHsKQEAgLTMwOTQsNyArMzA5NCw3IEBAIHN1
YiBHZW5lcmF0ZUhlYWRlcgogICAgICAgICAgICAgIyB0aGF0IHRoZSBHQyBjYWxscyB0byBhc2sg
YW4gb2JqZWN0IGlzIGl0IHdvdWxkIGxpa2UgdG8gbWFyayBhbnl0aGluZyBlbHNlIGFmdGVyIHRo
ZQogICAgICAgICAgICAgIyBwcm9ncmFtIHJlc3VtZWQgc2luY2UgdGhlIGxhc3QgY2FsbCB0byB2
aXNpdENoaWxkcmVuIG9yIHZpc2l0T3V0cHV0Q29uc3RyYWludHMuIFNpbmNlCiAgICAgICAgICAg
ICAjIHRoaXMganVzdCBjYWxscyB2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbiwgeW91IHVzdWFsbHkg
ZG9uJ3QgaGF2ZSB0byB3b3JyeSBhYm91dCB0aGlzLgotICAgICAgICAgICAgcHVzaChAaGVhZGVy
Q29udGVudCwgIiAgICBzdGF0aWMgdm9pZCB2aXNpdE91dHB1dENvbnN0cmFpbnRzKEpTQ2VsbCos
IEpTQzo6U2xvdFZpc2l0b3ImKTtcbiIpOworICAgICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVu
dCwgIiAgICBzdGF0aWMgdm9pZCB2aXNpdE91dHB1dENvbnN0cmFpbnRzKEpTQ2VsbCosIEpTQzo6
QWJzdHJhY3RTbG90VmlzaXRvciYpO1xuIik7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTMyMTUs
NyArMzIxNSw3IEBAIHN1YiBHZW5lcmF0ZUhlYWRlcgogICAgICAgICB9CiAgICAgICAgICRoZWFk
ZXJJbmNsdWRlc3siPHd0Zi9OZXZlckRlc3Ryb3llZC5oPiJ9ID0gMTsKICAgICAgICAgcHVzaChA
aGVhZGVyQ29udGVudCwgInB1YmxpYzpcbiIpOwotICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50
LCAiICAgIGJvb2wgaXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpV
bmtub3duPiwgdm9pZCogY29udGV4dCwgSlNDOjpTbG90VmlzaXRvciYsIGNvbnN0IGNoYXIqKikg
JHtvdmVycmlkZURlY2x9O1xuIik7CisgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAg
Ym9vbCBpc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+
LCB2b2lkKiBjb250ZXh0LCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImLCBjb25zdCBjaGFyKiop
ICR7b3ZlcnJpZGVEZWNsfTtcbiIpOwogICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAg
IHZvaWQgZmluYWxpemUoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCkg
JHtvdmVycmlkZURlY2x9O1xuIik7CiAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJ9O1xu
Iik7CiAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJcbiIpOwpAQCAtNDkzOSw2ICs0OTM5
LDcgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICBBZGRUb0ltcGxJbmNsdWRlcygi
RE9NSXNvU3Vic3BhY2VzLmgiKTsKICAgICBBZGRUb0ltcGxJbmNsdWRlcygiV2ViQ29yZUpTQ2xp
ZW50RGF0YS5oIik7CiAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIjxKYXZhU2NyaXB0Q29yZS9KU0Rl
c3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZS5oPiIpOworICAgIEFkZFRvSW1wbEluY2x1ZGVz
KCI8SmF2YVNjcmlwdENvcmUvU2xvdFZpc2l0b3JNYWNyb3MuaD4iKTsKICAgICBBZGRUb0ltcGxJ
bmNsdWRlcygiPEphdmFTY3JpcHRDb3JlL1N1YnNwYWNlSW5saW5lcy5oPiIpOwogICAgIHB1c2go
QGltcGxDb250ZW50LCAiSlNDOjpJc29TdWJzcGFjZSogJHtjbGFzc05hbWV9OjpzdWJzcGFjZUZv
ckltcGwoSlNDOjpWTSYgdm0pXG4iKTsKICAgICBwdXNoKEBpbXBsQ29udGVudCwgIntcbiIpOwpA
QCAtNDk2Niw3ICs0OTY3LDggQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICBwdXNo
KEBpbXBsQ29udGVudCwgIn1cblxuIik7CiAKICAgICBpZiAoJG5lZWRzVmlzaXRDaGlsZHJlbikg
ewotICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgInZvaWQgJHtjbGFzc05hbWV9Ojp2aXNpdENo
aWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpXG4iKTsKKyAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICJ0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPlxuIik7CisgICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAidm9pZCAke2NsYXNzTmFtZX06OnZpc2l0Q2hpbGRyZW5J
bXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcilcbiIpOwogICAgICAgICBwdXNoKEBp
bXBsQ29udGVudCwgIntcbiIpOwogICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBhdXRv
KiB0aGlzT2JqZWN0ID0ganNDYXN0PCR7Y2xhc3NOYW1lfSo+KGNlbGwpO1xuIik7CiAgICAgICAg
IHB1c2goQGltcGxDb250ZW50LCAiICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09i
amVjdCwgaW5mbygpKTtcbiIpOwpAQCAtNDk5MSw4ICs0OTkzLDEwIEBAIHN1YiBHZW5lcmF0ZUlt
cGxlbWVudGF0aW9uCiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgcHVzaChAaW1w
bENvbnRlbnQsICJ9XG5cbiIpOworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIkRFRklORV9W
SVNJVF9DSElMRFJFTigke2NsYXNzTmFtZX0pO1xuXG4iKTsKKwogICAgICAgICBpZiAoJGludGVy
ZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57SlNDdXN0b21NYXJrRnVuY3Rpb259KSB7Ci0gICAg
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgInZvaWQgJHtjbGFzc05hbWV9Ojp2aXNpdE91dHB1
dENvbnN0cmFpbnRzKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpXG4iKTsKKyAg
ICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAidm9pZCAke2NsYXNzTmFtZX06OnZpc2l0T3V0
cHV0Q29uc3RyYWludHMoSlNDZWxsKiBjZWxsLCBBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9y
KVxuIik7CiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIntcbiIpOwogICAgICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDwke2Ns
YXNzTmFtZX0qPihjZWxsKTtcbiIpOwogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIg
ICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpO1xuIik7CkBA
IC01MDMzLDcgKzUwMzcsNyBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgIH0KIAog
ICAgIGlmIChTaG91bGRHZW5lcmF0ZVdyYXBwZXJPd25lckNvZGUoJGhhc1BhcmVudCwgJGludGVy
ZmFjZSkgJiYgIUdldEN1c3RvbUlzUmVhY2hhYmxlKCRpbnRlcmZhY2UpKSB7Ci0gICAgICAgIHB1
c2goQGltcGxDb250ZW50LCAiYm9vbCBKUyR7aW50ZXJmYWNlTmFtZX1Pd25lcjo6aXNSZWFjaGFi
bGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQq
LCBTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbilcbiIpOworICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgImJvb2wgSlMke2ludGVyZmFjZU5hbWV9T3duZXI6OmlzUmVh
Y2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2
b2lkKiwgQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbilc
biIpOwogICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIntcbiIpOwogICAgICAgICAjIEFsbCBB
Y3RpdmVET01PYmplY3RzIGltcGxlbWVudCBoYXNQZW5kaW5nQWN0aXZpdHkoKSwgYnV0IG5vdCBh
bGwgb2YgdGhlbQogICAgICAgICAjIGluY3JlbWVudCB0aGVpciBDKysgcmVmZXJlbmNlIGNvdW50
cyB3aGVuIGhhc1BlbmRpbmdBY3Rpdml0eSgpIGJlY29tZXMKQEAgLTY0MzIsNiArNjQzNiw3IEBA
IHN1YiBHZW5lcmF0ZUNhbGxiYWNrSGVhZGVyQ29udGVudAogICAgICAgICBwdXNoKEAkY29udGVu
dFJlZiwgIiAgICBib29sIGhhc0NhbGxiYWNrKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9kYXRh
ICYmIG1fZGF0YS0+Y2FsbGJhY2soKTsgfVxuXG4iKTsKICAgICB9CiAKKyAgICBwdXNoKEAkY29u
dGVudFJlZiwgIiAgICB2b2lkIHZpc2l0SlNGdW5jdGlvbihKU0M6OkFic3RyYWN0U2xvdFZpc2l0
b3ImKSBvdmVycmlkZTtcblxuIikgaWYgJGludGVyZmFjZU9yQ2FsbGJhY2stPmV4dGVuZGVkQXR0
cmlidXRlcy0+e0lzV2Vha0NhbGxiYWNrfTsKICAgICBwdXNoKEAkY29udGVudFJlZiwgIiAgICB2
b2lkIHZpc2l0SlNGdW5jdGlvbihKU0M6OlNsb3RWaXNpdG9yJikgb3ZlcnJpZGU7XG5cbiIpIGlm
ICRpbnRlcmZhY2VPckNhbGxiYWNrLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntJc1dlYWtDYWxsYmFj
a307CiAKICAgICBwdXNoKEAkY29udGVudFJlZiwgIiAgICAke2NhbGxiYWNrRGF0YVR5cGV9KiBt
X2RhdGE7XG4iKTsKQEAgLTY2MjMsNiArNjYyOCwxMCBAQCBzdWIgR2VuZXJhdGVDYWxsYmFja0lt
cGxlbWVudGF0aW9uQ29udGVuCiAgICAgfQogCiAgICAgaWYgKCRpbnRlcmZhY2VPckNhbGxiYWNr
LT5leHRlbmRlZEF0dHJpYnV0ZXMtPntJc1dlYWtDYWxsYmFja30pIHsKKyAgICAgICAgcHVzaChA
JGNvbnRlbnRSZWYsICJ2b2lkICR7Y2xhc3NOYW1lfTo6dmlzaXRKU0Z1bmN0aW9uKEpTQzo6QWJz
dHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcilcbiIpOworICAgICAgICBwdXNoKEAkY29udGVudFJl
ZiwgIntcbiIpOworICAgICAgICBwdXNoKEAkY29udGVudFJlZiwgIiAgICBtX2RhdGEtPnZpc2l0
SlNGdW5jdGlvbih2aXNpdG9yKTtcbiIpOworICAgICAgICBwdXNoKEAkY29udGVudFJlZiwgIn1c
blxuIik7CiAgICAgICAgIHB1c2goQCRjb250ZW50UmVmLCAidm9pZCAke2NsYXNzTmFtZX06OnZp
c2l0SlNGdW5jdGlvbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKVxuIik7CiAgICAgICAgIHB1
c2goQCRjb250ZW50UmVmLCAie1xuIik7CiAgICAgICAgIHB1c2goQCRjb250ZW50UmVmLCAiICAg
IG1fZGF0YS0+dmlzaXRKU0Z1bmN0aW9uKHZpc2l0b3IpO1xuIik7CkBAIC02NzM0LDYgKzY3NDMs
NyBAQCBzdWIgR2VuZXJhdGVJdGVyYWJsZURlZmluaXRpb24KICAgICBteSAkdmlzaWJsZUludGVy
ZmFjZU5hbWUgPSAkY29kZUdlbmVyYXRvci0+R2V0VmlzaWJsZUludGVyZmFjZU5hbWUoJGludGVy
ZmFjZSk7CiAKICAgICBBZGRUb0ltcGxJbmNsdWRlcygiSlNET01JdGVyYXRvci5oIik7CisgICAg
QWRkVG9JbXBsSW5jbHVkZXMoIjxKYXZhU2NyaXB0Q29yZS9TbG90VmlzaXRvck1hY3Jvcy5oPiIp
OwogCiAgICAgcmV0dXJuIHVubGVzcyBJc0tleVZhbHVlSXRlcmFibGVJbnRlcmZhY2UoJGludGVy
ZmFjZSk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9BY3RpdmVET01DYWxsYmFjay5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9BY3RpdmVET01DYWxsYmFjay5oCShyZXZp
c2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vQWN0aXZlRE9NQ2FsbGJhY2suaAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAs
IDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMgYXJlCkBAIC0zMyw2ICszNCw3IEBACiAjaW5jbHVkZSAiQ29udGV4dERlc3Ry
dWN0aW9uT2JzZXJ2ZXIuaCIKIAogbmFtZXNwYWNlIEpTQyB7CitjbGFzcyBBYnN0cmFjdFNsb3RW
aXNpdG9yOwogY2xhc3MgU2xvdFZpc2l0b3I7CiB9CiAKQEAgLTU1LDYgKzU3LDcgQEAgcHVibGlj
OgogICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgYWN0aXZlRE9NT2JqZWN0c0FyZVN1c3BlbmRlZCgp
IGNvbnN0OwogICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgYWN0aXZlRE9NT2JqZWN0QXJlU3RvcHBl
ZCgpIGNvbnN0OwogICAgIAorICAgIHZpcnR1YWwgdm9pZCB2aXNpdEpTRnVuY3Rpb24oSlNDOjpB
YnN0cmFjdFNsb3RWaXNpdG9yJikgeyB9CiAgICAgdmlydHVhbCB2b2lkIHZpc2l0SlNGdW5jdGlv
bihKU0M6OlNsb3RWaXNpdG9yJikgeyB9CiB9OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20v
RXZlbnRMaXN0ZW5lci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9FdmVudExp
c3RlbmVyLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9FdmVudExp
c3RlbmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDA2LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAwNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjQsNiArMjQsNyBAQAogI2luY2x1ZGUgPHd0Zi9XZWFr
UHRyLmg+CiAKIG5hbWVzcGFjZSBKU0MgeworY2xhc3MgQWJzdHJhY3RTbG90VmlzaXRvcjsKIGNs
YXNzIEpTT2JqZWN0OwogY2xhc3MgU2xvdFZpc2l0b3I7CiB9CkBAIC01Miw2ICs1Myw3IEBAIHB1
YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlRXZlbnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCYsIEV2ZW50JikgPSAwOwogICAgIHZpcnR1YWwgYm9vbCB3YXNDcmVhdGVkRnJvbU1hcmt1cCgp
IGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXRKU0Z1bmN0
aW9uKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpIHsgfQogICAgIHZpcnR1YWwgdm9pZCB2aXNp
dEpTRnVuY3Rpb24oSlNDOjpTbG90VmlzaXRvciYpIHsgfQogCiAgICAgdmlydHVhbCBib29sIGlz
QXR0cmlidXRlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2RvbS9FdmVudFRhcmdldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0V2
ZW50VGFyZ2V0LmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL1dlYkNvcmUvZG9tL0V2
ZW50VGFyZ2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMiw3ICsyLDcgQEAKICAqIENvcHlyaWdo
dCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQogICogICAgICAgICAgIChDKSAx
OTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQogICogICAgICAgICAgIChDKSAy
MDAxIERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUub3JnKQotICogQ29weXJpZ2h0IChDKSAyMDA0
LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDA0LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChD
KSAyMDA2IEFsZXhleSBQcm9za3VyeWFrb3YgKGFwQHdlYmtpdC5vcmcpCiAgKiAgICAgICAgICAg
KEMpIDIwMDcsIDIwMDggTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CiAg
KgpAQCAtMzg0LDcgKzM4NCw4IEBAIHZvaWQgRXZlbnRUYXJnZXQ6OnJlbW92ZUFsbEV2ZW50TGlz
dGVuZXIKICAgICB0aHJlYWREYXRhLnNldElzSW5SZW1vdmVBbGxFdmVudExpc3RlbmVycyhmYWxz
ZSk7CiB9CiAKLXZvaWQgRXZlbnRUYXJnZXQ6OnZpc2l0SlNFdmVudExpc3RlbmVycyhKU0M6OlNs
b3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgRXZl
bnRUYXJnZXQ6OnZpc2l0SlNFdmVudExpc3RlbmVycyhWaXNpdG9yJiB2aXNpdG9yKQogewogICAg
IEV2ZW50VGFyZ2V0RGF0YSogZGF0YSA9IGV2ZW50VGFyZ2V0RGF0YUNvbmN1cnJlbnRseSgpOwog
ICAgIGlmICghZGF0YSkKQEAgLTM5Niw2ICszOTcsOSBAQCB2b2lkIEV2ZW50VGFyZ2V0Ojp2aXNp
dEpTRXZlbnRMaXN0ZW5lcnMoCiAgICAgICAgIGxpc3RlbmVyLT52aXNpdEpTRnVuY3Rpb24odmlz
aXRvcik7CiB9CiAKK3RlbXBsYXRlIHZvaWQgRXZlbnRUYXJnZXQ6OnZpc2l0SlNFdmVudExpc3Rl
bmVycyhKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgRXZlbnRUYXJn
ZXQ6OnZpc2l0SlNFdmVudExpc3RlbmVycyhKU0M6OlNsb3RWaXNpdG9yJik7CisKIHZvaWQgRXZl
bnRUYXJnZXQ6OmludmFsaWRhdGVFdmVudExpc3RlbmVyUmVnaW9ucygpCiB7CiAgICAgaWYgKGlz
PEVsZW1lbnQ+KCp0aGlzKSkgewpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50VGFyZ2V0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50VGFyZ2V0LmgJKHJldmlz
aW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9FdmVudFRhcmdldC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yLDcgKzIsNyBAQAogICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwg
KGtub2xsQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtv
aXZpc3RvQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDIwMDEgRGlyayBNdWVsbGVyIChtdWVs
bGVyQGtkZS5vcmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxNyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAyMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQWxleGV5IFByb3NrdXJ5
YWtvdiAoYXBAd2Via2l0Lm9yZykKICAqICAgICAgICAgICAoQykgMjAwNywgMjAwOCBOaWtvbGFz
IFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KICAqCkBAIC05Nyw3ICs5Nyw3IEBAIHB1
YmxpYzoKICAgICB2b2lkIGZpcmVFdmVudExpc3RlbmVycyhFdmVudCYsIEV2ZW50SW52b2tlUGhh
c2UpOwogICAgIGJvb2wgaXNGaXJpbmdFdmVudExpc3RlbmVycygpIGNvbnN0OwogCi0gICAgdm9p
ZCB2aXNpdEpTRXZlbnRMaXN0ZW5lcnMoSlNDOjpTbG90VmlzaXRvciYpOworICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgdmlzaXRKU0V2ZW50TGlzdGVuZXJzKFZpc2l0b3ImKTsK
ICAgICB2b2lkIGludmFsaWRhdGVKU0V2ZW50TGlzdGVuZXJzKEpTQzo6SlNPYmplY3QqKTsKIAog
ICAgIGNvbnN0IEV2ZW50VGFyZ2V0RGF0YSogZXZlbnRUYXJnZXREYXRhKCkgY29uc3Q7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9kb20vTXV0YXRpb25SZWNvcmQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2RvbS9NdXRhdGlvblJlY29yZC5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysr
IFNvdXJjZS9XZWJDb3JlL2RvbS9NdXRhdGlvblJlY29yZC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQpAQCAtNDEs
NyArNDIsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIG5hbWVzcGFjZSB7CiAKLXN0YXRpYyB2
b2lkIHZpc2l0Tm9kZUxpc3QoSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvciwgTm9kZUxpc3QmIG5v
ZGVMaXN0KQorc3RhdGljIHZvaWQgdmlzaXROb2RlTGlzdChKU0M6OkFic3RyYWN0U2xvdFZpc2l0
b3ImIHZpc2l0b3IsIE5vZGVMaXN0JiBub2RlTGlzdCkKIHsKICAgICBBU1NFUlQoIW5vZGVMaXN0
LmlzTGl2ZU5vZGVMaXN0KCkpOwogICAgIHVuc2lnbmVkIGxlbmd0aCA9IG5vZGVMaXN0Lmxlbmd0
aCgpOwpAQCAtNjgsNyArNjksNyBAQCBwcml2YXRlOgogICAgIE5vZGUqIHByZXZpb3VzU2libGlu
ZygpIG92ZXJyaWRlIHsgcmV0dXJuIG1fcHJldmlvdXNTaWJsaW5nLmdldCgpOyB9CiAgICAgTm9k
ZSogbmV4dFNpYmxpbmcoKSBvdmVycmlkZSB7IHJldHVybiBtX25leHRTaWJsaW5nLmdldCgpOyB9
CiAKLSAgICB2b2lkIHZpc2l0Tm9kZXNDb25jdXJyZW50bHkoSlNDOjpTbG90VmlzaXRvciYgdmlz
aXRvcikgY29uc3QgZmluYWwKKyAgICB2b2lkIHZpc2l0Tm9kZXNDb25jdXJyZW50bHkoSlNDOjpB
YnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBjb25zdCBmaW5hbAogICAgIHsKICAgICAgICAg
dmlzaXRvci5hZGRPcGFxdWVSb290KHJvb3QobV90YXJnZXQucHRyKCkpKTsKICAgICAgICAgaWYg
KG1fYWRkZWROb2RlcykKQEAgLTEwNSw3ICsxMDYsNyBAQCBwcml2YXRlOgogICAgICAgICByZXR1
cm4gbm9kZUxpc3QuZ2V0KCk7CiAgICAgfQogCi0gICAgdm9pZCB2aXNpdE5vZGVzQ29uY3VycmVu
dGx5KEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0IGZpbmFsCisgICAgdm9pZCB2aXNp
dE5vZGVzQ29uY3VycmVudGx5KEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikgY29u
c3QgZmluYWwKICAgICB7CiAgICAgICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChyb290KG1fdGFy
Z2V0LnB0cigpKSk7CiAgICAgfQpAQCAtMTY0LDcgKzE2NSw3IEBAIHByaXZhdGU6CiAKICAgICBT
dHJpbmcgb2xkVmFsdWUoKSBvdmVycmlkZSB7IHJldHVybiBTdHJpbmcoKTsgfQogCi0gICAgdm9p
ZCB2aXNpdE5vZGVzQ29uY3VycmVudGx5KEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0
IGZpbmFsCisgICAgdm9pZCB2aXNpdE5vZGVzQ29uY3VycmVudGx5KEpTQzo6QWJzdHJhY3RTbG90
VmlzaXRvciYgdmlzaXRvcikgY29uc3QgZmluYWwKICAgICB7CiAgICAgICAgIG1fcmVjb3JkLT52
aXNpdE5vZGVzQ29uY3VycmVudGx5KHZpc2l0b3IpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2RvbS9NdXRhdGlvblJlY29yZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Rv
bS9NdXRhdGlvblJlY29yZC5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9k
b20vTXV0YXRpb25SZWNvcmQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAg
KiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCkBAIC0zNiw3ICszNyw3IEBACiAKIG5hbWVz
cGFjZSBKU0MgewogCi1jbGFzcyBTbG90VmlzaXRvcjsKK2NsYXNzIEFic3RyYWN0U2xvdFZpc2l0
b3I7CiAKIH0KIApAQCAtNzIsNyArNzMsNyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIFN0cmlu
ZyBvbGRWYWx1ZSgpIHsgcmV0dXJuIFN0cmluZygpOyB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgdmlz
aXROb2Rlc0NvbmN1cnJlbnRseShKU0M6OlNsb3RWaXNpdG9yJikgY29uc3QgPSAwOworICAgIHZp
cnR1YWwgdm9pZCB2aXNpdE5vZGVzQ29uY3VycmVudGx5KEpTQzo6QWJzdHJhY3RTbG90VmlzaXRv
ciYpIGNvbnN0ID0gMDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2RvbS9TdGF0aWNSYW5nZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvZG9tL1N0YXRpY1JhbmdlLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL1dlYkNv
cmUvZG9tL1N0YXRpY1JhbmdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTc2LDcgKzc2LDcgQEAg
RXhjZXB0aW9uT3I8UmVmPFN0YXRpY1JhbmdlPj4gU3RhdGljUmFuZwogICAgIHJldHVybiBjcmVh
dGUoeyB7IGluaXQuc3RhcnRDb250YWluZXIucmVsZWFzZU5vbk51bGwoKSwgaW5pdC5zdGFydE9m
ZnNldCB9LCB7IGluaXQuZW5kQ29udGFpbmVyLnJlbGVhc2VOb25OdWxsKCksIGluaXQuZW5kT2Zm
c2V0IH0gfSk7CiB9CiAKLXZvaWQgU3RhdGljUmFuZ2U6OnZpc2l0Tm9kZXNDb25jdXJyZW50bHko
SlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikgY29uc3QKK3ZvaWQgU3RhdGljUmFuZ2U6OnZpc2l0
Tm9kZXNDb25jdXJyZW50bHkoSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBjb25z
dAogewogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChyb290KHN0YXJ0LmNvbnRhaW5lci5nZXQo
KSkpOwogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChyb290KGVuZC5jb250YWluZXIuZ2V0KCkp
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9TdGF0aWNSYW5nZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2RvbS9TdGF0aWNSYW5nZS5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBT
b3VyY2UvV2ViQ29yZS9kb20vU3RhdGljUmFuZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMwLDcg
KzMwLDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLWNsYXNzIFNsb3RWaXNpdG9yOworY2xhc3Mg
QWJzdHJhY3RTbG90VmlzaXRvcjsKIAogfQogCkBAIC01OCw3ICs1OCw3IEBAIHB1YmxpYzoKICAg
ICB1bnNpZ25lZCBlbmRPZmZzZXQoKSBjb25zdCBmaW5hbCB7IHJldHVybiBTaW1wbGVSYW5nZTo6
ZW5kT2Zmc2V0KCk7IH0KICAgICBib29sIGNvbGxhcHNlZCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJu
IFNpbXBsZVJhbmdlOjpjb2xsYXBzZWQoKTsgfQogCi0gICAgdm9pZCB2aXNpdE5vZGVzQ29uY3Vy
cmVudGx5KEpTQzo6U2xvdFZpc2l0b3ImKSBjb25zdDsKKyAgICB2b2lkIHZpc2l0Tm9kZXNDb25j
dXJyZW50bHkoSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJikgY29uc3Q7CiAKIHByaXZhdGU6CiAg
ICAgU3RhdGljUmFuZ2UoU2ltcGxlUmFuZ2UmJik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9XZWJHTDJSZW5kZXJpbmdDb250ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTDJSZW5kZXJpbmdDb250ZXh0LmNwcAkocmV2aXNpb24g
MjcyODMwKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0wyUmVuZGVyaW5nQ29u
dGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDE1LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE1LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMDc4LDcgKzMwNzgsNyBAQCBib29sIFdlYkdM
MlJlbmRlcmluZ0NvbnRleHQ6OmNoZWNrQW5kVHJhCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZv
aWQgV2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6YWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMoSlNDOjpT
bG90VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgV2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6YWRkTWVt
YmVyc1RvT3BhcXVlUm9vdHMoSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewog
ICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKHZp
c2l0b3IpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTDJSZW5kZXJp
bmdDb250ZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2Vi
R0wyUmVuZGVyaW5nQ29udGV4dC5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9XZWJHTDJSZW5kZXJpbmdDb250ZXh0LmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTcgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0yNjEsNyArMjYxLDcgQEAgcHVibGljOgogCiAgICAgYm9vbCBjaGVja0FuZFRyYW5zbGF0ZUF0
dGFjaG1lbnRzKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0NHTGVudW0sIFZlY3RvcjxHQ0dM
ZW51bT4mKTsKIAotICAgIHZvaWQgYWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMoSlNDOjpTbG90Vmlz
aXRvciYpIG92ZXJyaWRlOworICAgIHZvaWQgYWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMoSlNDOjpB
YnN0cmFjdFNsb3RWaXNpdG9yJikgb3ZlcnJpZGU7CiAKIHByaXZhdGU6CiAgICAgV2ViR0wyUmVu
ZGVyaW5nQ29udGV4dChDYW52YXNCYXNlJiwgR3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzKTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRnJhbWVidWZmZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRnJhbWVidWZmZXIu
Y3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJH
TEZyYW1lYnVmZmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDktMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDktMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTYzLDcgKzYzLDcgQEAgbmFtZXNw
YWNlIHsKICAgICAgICAgdm9pZCBvbkRldGFjaGVkKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgR3Jh
cGhpY3NDb250ZXh0R0wqKSBvdmVycmlkZTsKICAgICAgICAgdm9pZCBhdHRhY2goR3JhcGhpY3ND
b250ZXh0R0wqLCBHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIGF0dGFjaG1lbnQpIG92ZXJyaWRl
OwogICAgICAgICB2b2lkIHVuYXR0YWNoKEdyYXBoaWNzQ29udGV4dEdMKiwgR0NHTGVudW0gdGFy
Z2V0LCBHQ0dMZW51bSBhdHRhY2htZW50KSBvdmVycmlkZTsKLSAgICAgICAgdm9pZCBhZGRNZW1i
ZXJzVG9PcGFxdWVSb290cyhjb25zdCBBYnN0cmFjdExvY2tlciYsIEpTQzo6U2xvdFZpc2l0b3Im
KSBvdmVycmlkZTsKKyAgICAgICAgdm9pZCBhZGRNZW1iZXJzVG9PcGFxdWVSb290cyhjb25zdCBB
YnN0cmFjdExvY2tlciYsIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpIG92ZXJyaWRlOwogCiAg
ICAgICAgIFdlYkdMUmVuZGVyYnVmZmVyQXR0YWNobWVudCgpIHsgfTsKIApAQCAtMTQ1LDcgKzE0
NSw3IEBAIG5hbWVzcGFjZSB7CiAgICAgICAgICAgICBjb250ZXh0LT5mcmFtZWJ1ZmZlclJlbmRl
cmJ1ZmZlcih0YXJnZXQsIGF0dGFjaG1lbnQsIEdyYXBoaWNzQ29udGV4dEdMOjpSRU5ERVJCVUZG
RVIsIDApOwogICAgIH0KIAotICAgIHZvaWQgV2ViR0xSZW5kZXJidWZmZXJBdHRhY2htZW50Ojph
ZGRNZW1iZXJzVG9PcGFxdWVSb290cyhjb25zdCBBYnN0cmFjdExvY2tlciYsIEpTQzo6U2xvdFZp
c2l0b3ImIHZpc2l0b3IpCisgICAgdm9pZCBXZWJHTFJlbmRlcmJ1ZmZlckF0dGFjaG1lbnQ6OmFk
ZE1lbWJlcnNUb09wYXF1ZVJvb3RzKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgSlNDOjpBYnN0cmFj
dFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogICAgIHsKICAgICAgICAgdmlzaXRvci5hZGRPcGFxdWVS
b290KG1fcmVuZGVyYnVmZmVyLmdldCgpKTsKICAgICB9CkBAIC0xNjksNyArMTY5LDcgQEAgbmFt
ZXNwYWNlIHsKICAgICAgICAgdm9pZCBvbkRldGFjaGVkKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwg
R3JhcGhpY3NDb250ZXh0R0wqKSBvdmVycmlkZTsKICAgICAgICAgdm9pZCBhdHRhY2goR3JhcGhp
Y3NDb250ZXh0R0wqLCBHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIGF0dGFjaG1lbnQpIG92ZXJy
aWRlOwogICAgICAgICB2b2lkIHVuYXR0YWNoKEdyYXBoaWNzQ29udGV4dEdMKiwgR0NHTGVudW0g
dGFyZ2V0LCBHQ0dMZW51bSBhdHRhY2htZW50KSBvdmVycmlkZTsKLSAgICAgICAgdm9pZCBhZGRN
ZW1iZXJzVG9PcGFxdWVSb290cyhjb25zdCBBYnN0cmFjdExvY2tlciYsIEpTQzo6U2xvdFZpc2l0
b3ImKSBvdmVycmlkZTsKKyAgICAgICAgdm9pZCBhZGRNZW1iZXJzVG9PcGFxdWVSb290cyhjb25z
dCBBYnN0cmFjdExvY2tlciYsIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpIG92ZXJyaWRlOwog
CiAgICAgICAgIFdlYkdMVGV4dHVyZUF0dGFjaG1lbnQoKSB7IH07CiAKQEAgLTI2Nyw3ICsyNjcs
NyBAQCBuYW1lc3BhY2UgewogI2VuZGlmCiAgICAgfQogCi0gICAgdm9pZCBXZWJHTFRleHR1cmVB
dHRhY2htZW50OjphZGRNZW1iZXJzVG9PcGFxdWVSb290cyhjb25zdCBBYnN0cmFjdExvY2tlciYs
IEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCisgICAgdm9pZCBXZWJHTFRleHR1cmVBdHRhY2ht
ZW50OjphZGRNZW1iZXJzVG9PcGFxdWVSb290cyhjb25zdCBBYnN0cmFjdExvY2tlciYsIEpTQzo6
QWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKICAgICB7CiAgICAgICAgIHZpc2l0b3IuYWRk
T3BhcXVlUm9vdChtX3RleHR1cmUuZ2V0KCkpOwogICAgIH0KQEAgLTcyMSw3ICs3MjEsNyBAQCBH
Q0dMZW51bSBXZWJHTEZyYW1lYnVmZmVyOjpnZXREcmF3QnVmZmVyCiAgICAgcmV0dXJuIEdyYXBo
aWNzQ29udGV4dEdMOjpOT05FOwogfQogCi12b2lkIFdlYkdMRnJhbWVidWZmZXI6OmFkZE1lbWJl
cnNUb09wYXF1ZVJvb3RzKGNvbnN0IEFic3RyYWN0TG9ja2VyJiBsb2NrZXIsIEpTQzo6U2xvdFZp
c2l0b3ImIHZpc2l0b3IpCit2b2lkIFdlYkdMRnJhbWVidWZmZXI6OmFkZE1lbWJlcnNUb09wYXF1
ZVJvb3RzKGNvbnN0IEFic3RyYWN0TG9ja2VyJiBsb2NrZXIsIEpTQzo6QWJzdHJhY3RTbG90Vmlz
aXRvciYgdmlzaXRvcikKIHsKICAgICBmb3IgKGF1dG8mIGVudHJ5IDogbV9hdHRhY2htZW50cykK
ICAgICAgICAgZW50cnkudmFsdWUtPmFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKGxvY2tlciwgdmlz
aXRvcik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEZyYW1lYnVmZmVy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xGcmFtZWJ1
ZmZlci5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9X
ZWJHTEZyYW1lYnVmZmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAwOS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzQsNyArMzQsNyBAQAogI2luY2x1ZGUg
PHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIEpTQyB7Ci1jbGFzcyBTbG90VmlzaXRvcjsKK2Ns
YXNzIEFic3RyYWN0U2xvdFZpc2l0b3I7CiB9CiAKIG5hbWVzcGFjZSBXVEYgewpAQCAtNjUsNyAr
NjUsNyBAQCBwdWJsaWM6CiAgICAgICAgIHZpcnR1YWwgdm9pZCBvbkRldGFjaGVkKGNvbnN0IFdU
Rjo6QWJzdHJhY3RMb2NrZXImLCBHcmFwaGljc0NvbnRleHRHTCopID0gMDsKICAgICAgICAgdmly
dHVhbCB2b2lkIGF0dGFjaChHcmFwaGljc0NvbnRleHRHTCosIEdDR0xlbnVtIHRhcmdldCwgR0NH
TGVudW0gYXR0YWNobWVudCkgPSAwOwogICAgICAgICB2aXJ0dWFsIHZvaWQgdW5hdHRhY2goR3Jh
cGhpY3NDb250ZXh0R0wqLCBHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIGF0dGFjaG1lbnQpID0g
MDsKLSAgICAgICAgdmlydHVhbCB2b2lkIGFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKGNvbnN0IFdU
Rjo6QWJzdHJhY3RMb2NrZXImLCBKU0M6OlNsb3RWaXNpdG9yJikgPSAwOworICAgICAgICB2aXJ0
dWFsIHZvaWQgYWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMoY29uc3QgV1RGOjpBYnN0cmFjdExvY2tl
ciYsIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpID0gMDsKIAogICAgIHByb3RlY3RlZDoKICAg
ICAgICAgV2ViR0xBdHRhY2htZW50KCk7CkBAIC0xMTQsNyArMTE0LDcgQEAgcHVibGljOgogCiAg
ICAgR0NHTGVudW0gZ2V0RHJhd0J1ZmZlcihHQ0dMZW51bSk7CiAKLSAgICB2b2lkIGFkZE1lbWJl
cnNUb09wYXF1ZVJvb3RzKGNvbnN0IFdURjo6QWJzdHJhY3RMb2NrZXImLCBKU0M6OlNsb3RWaXNp
dG9yJik7CisgICAgdm9pZCBhZGRNZW1iZXJzVG9PcGFxdWVSb290cyhjb25zdCBXVEY6OkFic3Ry
YWN0TG9ja2VyJiwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAKIHByaXZhdGU6CiAgICAg
V2ViR0xGcmFtZWJ1ZmZlcihXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlJik7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFByb2dyYW0uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUHJvZ3JhbS5jcHAJKHJldmlzaW9uIDI3Mjgz
MCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUHJvZ3JhbS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMjA2LDcgKzIwNiw3IEBAIGJvb2wgV2ViR0xQcm9ncmFtOjpkZXRhY2hTaGFkZXIo
Y29uc3QgQWIKICAgICB9CiB9CiAKLXZvaWQgV2ViR0xQcm9ncmFtOjphZGRNZW1iZXJzVG9PcGFx
dWVSb290cyhjb25zdCBBYnN0cmFjdExvY2tlciYsIEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3Ip
Cit2b2lkIFdlYkdMUHJvZ3JhbTo6YWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMoY29uc3QgQWJzdHJh
Y3RMb2NrZXImLCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgdmlz
aXRvci5hZGRPcGFxdWVSb290KG1fdmVydGV4U2hhZGVyLmdldCgpKTsKICAgICB2aXNpdG9yLmFk
ZE9wYXF1ZVJvb3QobV9mcmFnbWVudFNoYWRlci5nZXQoKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9XZWJHTFByb2dyYW0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9XZWJHTFByb2dyYW0uaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNl
L1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xQcm9ncmFtLmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0z
NSw3ICszNSw3IEBACiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgSlNDIHsK
LWNsYXNzIFNsb3RWaXNpdG9yOworY2xhc3MgQWJzdHJhY3RTbG90VmlzaXRvcjsKIH0KIAogbmFt
ZXNwYWNlIFdURiB7CkBAIC04OCw3ICs4OCw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1f
cmVxdWlyZWRUcmFuc2Zvcm1GZWVkYmFja0J1ZmZlckNvdW50OwogICAgIH0KIAotICAgIHZvaWQg
YWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMoY29uc3QgV1RGOjpBYnN0cmFjdExvY2tlciYsIEpTQzo6
U2xvdFZpc2l0b3ImKTsKKyAgICB2b2lkIGFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKGNvbnN0IFdU
Rjo6QWJzdHJhY3RMb2NrZXImLCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKTsKIAogcHJpdmF0
ZToKICAgICBXZWJHTFByb2dyYW0oV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSYpOwpJbmRleDog
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
NzkzMSw3ICs3OTMxLDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpkaXNwYXRj
aAogICAgIHF1ZXVlVGFza1RvRGlzcGF0Y2hFdmVudCgqY2FudmFzLCBUYXNrU291cmNlOjpXZWJH
TCwgV2ViR0xDb250ZXh0RXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkud2ViZ2xjb250ZXh0Y2hh
bmdlZEV2ZW50LCBFdmVudDo6Q2FuQnViYmxlOjpObywgRXZlbnQ6OklzQ2FuY2VsYWJsZTo6WWVz
LCBlbXB0eVN0cmluZygpKSk7CiB9CiAKLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6
YWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMoSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6YWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMoSlNDOjpB
YnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGF1dG8gbG9ja2VyID0gaG9sZExv
Y2sob2JqZWN0R3JhcGhMb2NrKCkpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZh
cy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5oCShyZXZpc2lvbiAyNzI4
MzApCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE1LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01OCw3ICs1OCw3IEBACiAjZW5kaWYKIAogbmFtZXNw
YWNlIEpTQyB7Ci1jbGFzcyBTbG90VmlzaXRvcjsKK2NsYXNzIEFic3RyYWN0U2xvdFZpc2l0b3I7
CiB9CiAKIG5hbWVzcGFjZSBXVEYgewpAQCAtNDExLDcgKzQxMSw3IEBAIHB1YmxpYzoKICAgICB2
b2lkIHJlY3ljbGVDb250ZXh0KCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBkaXNwYXRjaENvbnRleHRD
aGFuZ2VkTm90aWZpY2F0aW9uKCkgb3ZlcnJpZGU7CiAKLSAgICB2aXJ0dWFsIHZvaWQgYWRkTWVt
YmVyc1RvT3BhcXVlUm9vdHMoSlNDOjpTbG90VmlzaXRvciYpOworICAgIHZpcnR1YWwgdm9pZCBh
ZGRNZW1iZXJzVG9PcGFxdWVSb290cyhKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKTsKICAgICAv
LyBUaGlzIGxvY2sgbXVzdCBiZSBoZWxkIGFjcm9zcyBhbGwgbXV0YXRpb25zIG9mIGNvbnRhaW5l
cnMgbGlrZQogICAgIC8vIFZlY3RvcnMsIEhhc2hTZXRzLCBldGMuIHdoaWNoIGNvbnRhaW4gUmVm
UHRyPFdlYkdMT2JqZWN0PiwgYW5kCiAgICAgLy8gd2hpY2ggYXJlIHRyYXZlcnNlZCBieSBhZGRN
ZW1iZXJzVG9PcGFxdWVSb290cygpIG9yIGFueSBvZiB0aGUKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL1dlYkdMVHJhbnNmb3JtRmVlZGJhY2suY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVHJhbnNmb3JtRmVlZGJhY2suY3BwCShyZXZp
c2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFRyYW5zZm9y
bUZlZWRiYWNrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE1LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMCw4ICszMCw3IEBACiAKICNpbmNsdWRlICJX
ZWJHTENvbnRleHRHcm91cC5oIgogI2luY2x1ZGUgIldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2Uu
aCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9TbG90VmlzaXRvci5oPgotI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL1Nsb3RWaXNpdG9ySW5saW5lcy5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL0Fic3RyYWN0U2xvdFZpc2l0b3JJbmxpbmVzLmg+CiAjaW5jbHVkZSA8d3RmL0xvY2suaD4K
ICNpbmNsdWRlIDx3dGYvTG9ja2VyLmg+CiAKQEAgLTkzLDcgKzkyLDcgQEAgYm9vbCBXZWJHTFRy
YW5zZm9ybUZlZWRiYWNrOjpoYXNFbm91Z2hCdQogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lk
IFdlYkdMVHJhbnNmb3JtRmVlZGJhY2s6OmFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKGNvbnN0IEFi
c3RyYWN0TG9ja2VyJiBsb2NrZXIsIEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIFdl
YkdMVHJhbnNmb3JtRmVlZGJhY2s6OmFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKGNvbnN0IEFic3Ry
YWN0TG9ja2VyJiBsb2NrZXIsIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsK
ICAgICBmb3IgKGF1dG8mIGJ1ZmZlciA6IG1fYm91bmRJbmRleGVkVHJhbnNmb3JtRmVlZGJhY2tC
dWZmZXJzKQogICAgICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QoYnVmZmVyLmdldCgpKTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVHJhbnNmb3JtRmVlZGJhY2suaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFRyYW5zZm9ybUZl
ZWRiYWNrLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L1dlYkdMVHJhbnNmb3JtRmVlZGJhY2suaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMxLDcgKzMxLDcg
QEAKICNpbmNsdWRlICJXZWJHTFNoYXJlZE9iamVjdC5oIgogCiBuYW1lc3BhY2UgSlNDIHsKLWNs
YXNzIFNsb3RWaXNpdG9yOworY2xhc3MgQWJzdHJhY3RTbG90VmlzaXRvcjsKIH0KIAogbmFtZXNw
YWNlIFdURiB7CkBAIC03MCw3ICs3MCw3IEBAIHB1YmxpYzoKICAgICAKICAgICBib29sIGhhc0Vu
b3VnaEJ1ZmZlcnMoR0NHTHVpbnQgbnVtUmVxdWlyZWQpIGNvbnN0OwogCi0gICAgdm9pZCBhZGRN
ZW1iZXJzVG9PcGFxdWVSb290cyhjb25zdCBBYnN0cmFjdExvY2tlciYsIEpTQzo6U2xvdFZpc2l0
b3ImKTsKKyAgICB2b2lkIGFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKGNvbnN0IEFic3RyYWN0TG9j
a2VyJiwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAKIHByaXZhdGU6CiAgICAgV2ViR0xU
cmFuc2Zvcm1GZWVkYmFjayhXZWJHTDJSZW5kZXJpbmdDb250ZXh0Jik7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFZlcnRleEFycmF5T2JqZWN0QmFzZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xWZXJ0ZXhBcnJheU9iamVj
dEJhc2UuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZh
cy9XZWJHTFZlcnRleEFycmF5T2JqZWN0QmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOSw4
ICsyOSw3IEBACiAjaWYgRU5BQkxFKFdFQkdMKQogCiAjaW5jbHVkZSAiV2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZS5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1Nsb3RWaXNpdG9yLmg+Ci0j
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvU2xvdFZpc2l0b3JJbmxpbmVzLmg+CisjaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvQWJzdHJhY3RTbG90VmlzaXRvcklubGluZXMuaD4KICNpbmNsdWRlIDx3
dGYvTG9ja2VyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTEwOSw3ICsxMDgsNyBAQCB2
b2lkIFdlYkdMVmVydGV4QXJyYXlPYmplY3RCYXNlOjpzZXRWZXJ0CiAgICAgbV92ZXJ0ZXhBdHRy
aWJTdGF0ZVtpbmRleF0uZGl2aXNvciA9IGRpdmlzb3I7CiB9CiAKLXZvaWQgV2ViR0xWZXJ0ZXhB
cnJheU9iamVjdEJhc2U6OmFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKGNvbnN0IEFic3RyYWN0TG9j
a2VyJiwgSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgV2ViR0xWZXJ0ZXhBcnJheU9i
amVjdEJhc2U6OmFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwg
SlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHZpc2l0b3IuYWRkT3Bh
cXVlUm9vdChtX2JvdW5kRWxlbWVudEFycmF5QnVmZmVyLmdldCgpKTsKICAgICBmb3IgKGF1dG8m
IHN0YXRlIDogbV92ZXJ0ZXhBdHRyaWJTdGF0ZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL1dlYkdMVmVydGV4QXJyYXlPYmplY3RCYXNlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xWZXJ0ZXhBcnJheU9iamVjdEJhc2UuaAkocmV2aXNp
b24gMjcyODMwKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xWZXJ0ZXhBcnJh
eU9iamVjdEJhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMyLDcgKzMyLDcgQEAKICNpbmNsdWRl
ICJXZWJHTENvbnRleHRPYmplY3QuaCIKIAogbmFtZXNwYWNlIEpTQyB7Ci1jbGFzcyBTbG90Vmlz
aXRvcjsKK2NsYXNzIEFic3RyYWN0U2xvdFZpc2l0b3I7CiB9CiAKIG5hbWVzcGFjZSBXVEYgewpA
QCAtNzcsNyArNzcsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHNldFZlcnRleEF0dHJpYkRpdmlz
b3IoR0NHTHVpbnQgaW5kZXgsIEdDR0x1aW50IGRpdmlzb3IpOwogCi0gICAgdm9pZCBhZGRNZW1i
ZXJzVG9PcGFxdWVSb290cyhjb25zdCBXVEY6OkFic3RyYWN0TG9ja2VyJiwgSlNDOjpTbG90Vmlz
aXRvciYpOworICAgIHZvaWQgYWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMoY29uc3QgV1RGOjpBYnN0
cmFjdExvY2tlciYsIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpOwogCiBwcm90ZWN0ZWQ6CiAg
ICAgV2ViR0xWZXJ0ZXhBcnJheU9iamVjdEJhc2UoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSYs
IFR5cGUpOwo=
</data>
<flag name="commit-queue"
          id="438694"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>420246</attachid>
            <date>2021-02-14 12:03:21 -0800</date>
            <delta_ts>2021-02-14 23:54:04 -0800</delta_ts>
            <desc>work in progress.</desc>
            <filename>bug-217274m.patch</filename>
            <type>text/plain</type>
            <size>575573</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDI3MjgzMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtNjEzLDYgKzYxMyw4IEBAIHNldChKYXZhU2NyaXB0Q29yZV9QUklWQVRFX0ZSQU1FV09SS19I
RUEKICAgICBkb21qaXQvRE9NSklUSGVhcFJhbmdlLmgKICAgICBkb21qaXQvRE9NSklUU2lnbmF0
dXJlLmgKIAorICAgIGhlYXAvQWJzdHJhY3RTbG90VmlzaXRvci5oCisgICAgaGVhcC9BYnN0cmFj
dFNsb3RWaXNpdG9ySW5saW5lcy5oCiAgICAgaGVhcC9BbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmgK
ICAgICBoZWFwL0FsbG9jYXRpb25GYWlsdXJlTW9kZS5oCiAgICAgaGVhcC9BbGxvY2F0b3IuaApA
QCAtNjg3LDEyICs2ODksMTQgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1BSSVZBVEVfRlJBTUVXT1JL
X0hFQQogICAgIGhlYXAvU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQuaAogICAgIGhlYXAvU2xvdFZp
c2l0b3IuaAogICAgIGhlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmgKKyAgICBoZWFwL1Nsb3RWaXNp
dG9yTWFjcm9zLmgKICAgICBoZWFwL1N0cm9uZy5oCiAgICAgaGVhcC9TdHJvbmdJbmxpbmVzLmgK
ICAgICBoZWFwL1N1YnNwYWNlLmgKICAgICBoZWFwL1N1YnNwYWNlSW5saW5lcy5oCiAgICAgaGVh
cC9TeW5jaHJvbm91c25lc3MuaAogICAgIGhlYXAvVGlueUJsb29tRmlsdGVyLmgKKyAgICBoZWFw
L1ZlcmlmaWVyU2xvdFZpc2l0b3IuaAogICAgIGhlYXAvVmlzaXRSYWNlS2V5LmgKICAgICBoZWFw
L1dlYWsuaAogICAgIGhlYXAvV2Vha0Jsb2NrLmgKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9Tb3VyY2VzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNl
cy50eHQJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2Vz
LnR4dAkod29ya2luZyBjb3B5KQpAQCAtNTYzLDYgKzU2Myw3IEBAIGhlYXAvU3RvcElmTmVjZXNz
YXJ5VGltZXIuY3BwCiBoZWFwL1N1YnNwYWNlLmNwcAogaGVhcC9TeW5jaHJvbm91c1N0b3BUaGVX
b3JsZE11dGF0b3JTY2hlZHVsZXIuY3BwCiBoZWFwL1N5bmNocm9ub3VzbmVzcy5jcHAKK2hlYXAv
VmVyaWZpZXJTbG90VmlzaXRvci5jcHAKIGhlYXAvVmlzaXRSYWNlS2V5LmNwcAogaGVhcC9XZWFr
LmNwcAogaGVhcC9XZWFrQmxvY2suY3BwCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJ
L0pTQVBJV3JhcHBlck9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9BUEkvSlNBUElXcmFwcGVyT2JqZWN0LmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9BUEkvSlNBUElXcmFwcGVyT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTkgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC00MSw3ICs0MSw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBzdWJzcGFjZUZvcihWTSYp
IHsgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQogICAgIAogICAgIHZvaWQgZmluaXNo
Q3JlYXRpb24oVk0mKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIEpT
Qzo6U2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOX1dJVEhfTU9ESUZJ
RVIoSlNfRVhQT1JUX1BSSVZBVEUpOwogICAgIAogICAgIHZvaWQqIHdyYXBwZWRPYmplY3QoKSB7
IHJldHVybiBtX3dyYXBwZWRPYmplY3Q7IH0KICAgICB2b2lkIHNldFdyYXBwZWRPYmplY3Qodm9p
ZCopOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0FQSVdyYXBwZXJPYmplY3Qu
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0FQSVdyYXBwZXJP
YmplY3QubW0JKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkv
SlNBUElXcmFwcGVyT2JqZWN0Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzcsNyArMzcsNyBAQAog
Y2xhc3MgSlNBUElXcmFwcGVyT2JqZWN0SGFuZGxlT3duZXIgZmluYWwgOiBwdWJsaWMgSlNDOjpX
ZWFrSGFuZGxlT3duZXIgewogcHVibGljOgogICAgIHZvaWQgZmluYWxpemUoSlNDOjpIYW5kbGU8
SlNDOjpVbmtub3duPiwgdm9pZCopIGZpbmFsOwotICAgIGJvb2wgaXNSZWFjaGFibGVGcm9tT3Bh
cXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCwgSlNDOjpT
bG90VmlzaXRvciYsIGNvbnN0IGNoYXIqKikgZmluYWw7CisgICAgYm9vbCBpc1JlYWNoYWJsZUZy
b21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0LCBK
U0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImLCBjb25zdCBjaGFyKiopIGZpbmFsOwogfTsKIAogc3Rh
dGljIEpTQVBJV3JhcHBlck9iamVjdEhhbmRsZU93bmVyKiBqc0FQSVdyYXBwZXJPYmplY3RIYW5k
bGVPd25lcigpCkBAIC01NiwxNCArNTYsMTQgQEAgdm9pZCBKU0FQSVdyYXBwZXJPYmplY3RIYW5k
bGVPd25lcjo6ZmluYQogICAgIEpTQzo6V2Vha1NldDo6ZGVhbGxvY2F0ZShKU0M6OldlYWtJbXBs
Ojphc1dlYWtJbXBsKGhhbmRsZS5zbG90KCkpKTsKIH0KIAotYm9vbCBKU0FQSVdyYXBwZXJPYmpl
Y3RIYW5kbGVPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlND
OjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25z
dCBjaGFyKiopCitib29sIEpTQVBJV3JhcHBlck9iamVjdEhhbmRsZU93bmVyOjppc1JlYWNoYWJs
ZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCos
IEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqKQogewogICAg
IEpTQzo6SlNBUElXcmFwcGVyT2JqZWN0KiB3cmFwcGVyT2JqZWN0ID0gSlNDOjpqc0Nhc3Q8SlND
OjpKU0FQSVdyYXBwZXJPYmplY3QqPihoYW5kbGUuZ2V0KCkuYXNDZWxsKCkpOwogICAgIC8vIFdl
IHVzZSB0aGUgSlNHbG9iYWxPYmplY3Qgd2hlbiBwcm9jZXNzaW5nIHdlYWsgaGFuZGxlcyB0byBw
cmV2ZW50IHRoZSBzaXR1YXRpb24gd2hlcmUgdXNpbmcKICAgICAvLyB0aGUgc2FtZSBPYmplY3Rp
dmUtQyBvYmplY3QgaW4gbXVsdGlwbGUgZ2xvYmFsIG9iamVjdHMga2VlcHMgYWxsIG9mIHRoZSBn
bG9iYWwgb2JqZWN0cyBhbGl2ZS4KICAgICBpZiAoIXdyYXBwZXJPYmplY3QtPndyYXBwZWRPYmpl
Y3QoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiB2aXNpdG9yLnZtKCkuaGVh
cC5pc01hcmtlZCh3cmFwcGVyT2JqZWN0LT5zdHJ1Y3R1cmUoKS0+Z2xvYmFsT2JqZWN0KCkpICYm
IHZpc2l0b3IuY29udGFpbnNPcGFxdWVSb290KHdyYXBwZXJPYmplY3QtPndyYXBwZWRPYmplY3Qo
KSk7CisgICAgcmV0dXJuIHZpc2l0b3IuaXNNYXJrZWQod3JhcHBlck9iamVjdC0+c3RydWN0dXJl
KCktPmdsb2JhbE9iamVjdCgpKSAmJiB2aXNpdG9yLmNvbnRhaW5zT3BhcXVlUm9vdCh3cmFwcGVy
T2JqZWN0LT53cmFwcGVkT2JqZWN0KCkpOwogfQogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTczLDYg
KzczLDggQEAgc3RhdGljIEpTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJT04oY29uc3RydQogc3RhdGlj
IEpTQ19ERUNMQVJFX0NVU1RPTV9HRVRURVIoY2FsbGJhY2tHZXR0ZXJKU0FQSVdyYXBwZXJPYmpl
Y3RDYWxsYmFja09iamVjdCk7CiBzdGF0aWMgSlNDX0RFQ0xBUkVfQ1VTVE9NX0dFVFRFUihzdGF0
aWNGdW5jdGlvbkdldHRlckpTQVBJV3JhcHBlck9iamVjdENhbGxiYWNrT2JqZWN0KTsKIAorREVG
SU5FX1ZJU0lUX0NISUxEUkVOX1dJVEhfTU9ESUZJRVIodGVtcGxhdGU8PiwgSlNDYWxsYmFja09i
amVjdDxKU0FQSVdyYXBwZXJPYmplY3Q+KTsKKwogdGVtcGxhdGUgPD4gY29uc3QgQ2xhc3NJbmZv
IEpTQ2FsbGJhY2tPYmplY3Q8SlNBUElXcmFwcGVyT2JqZWN0Pjo6c19pbmZvID0geyAiSlNBUElX
cmFwcGVyT2JqZWN0IiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01F
VEhPRF9UQUJMRShKU0NhbGxiYWNrT2JqZWN0KSB9OwogdGVtcGxhdGUgPD4gY29uc3QgYm9vbCBK
U0NhbGxiYWNrT2JqZWN0PEpTQVBJV3JhcHBlck9iamVjdD46Om5lZWRzRGVzdHJ1Y3Rpb24gPSB0
cnVlOwogCkBAIC0xMjMsNyArMTI1LDggQEAgdm9pZCBKU0FQSVdyYXBwZXJPYmplY3Q6OnNldFdy
YXBwZWRPYmplYwogICAgIG1fd3JhcHBlZE9iamVjdCA9IFtzdGF0aWNfY2FzdDxpZD4od3JhcHBl
ZE9iamVjdCkgcmV0YWluXTsKIH0KIAotdm9pZCBKU0FQSVdyYXBwZXJPYmplY3Q6OnZpc2l0Q2hp
bGRyZW4oSlNDZWxsKiBjZWxsLCBKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8
dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNBUElXcmFwcGVyT2JqZWN0Ojp2aXNpdENoaWxkcmVu
SW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNBUElXcmFwcGVy
T2JqZWN0KiB0aGlzT2JqZWN0ID0gSlNDOjpqc0Nhc3Q8SlNBUElXcmFwcGVyT2JqZWN0Kj4oY2Vs
bCk7CiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbihjZWxsLCB2aXNpdG9yKTsKQEAgLTEzMyw2ICsx
MzYsOCBAQCB2b2lkIEpTQVBJV3JhcHBlck9iamVjdDo6dmlzaXRDaGlsZHJlbihKCiAgICAgICAg
IHNjYW5FeHRlcm5hbE9iamVjdEdyYXBoKHZpc2l0b3Iudm0oKSwgdmlzaXRvciwgd3JhcHBlZE9i
amVjdCk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTl9XSVRIX01PRElGSUVSKEpTX0VYUE9S
VF9QUklWQVRFLCBKU0FQSVdyYXBwZXJPYmplY3QpOworCiB0ZW1wbGF0ZSA8PgogSXNvU3Vic3Bh
Y2UqIEpTQ2FsbGJhY2tPYmplY3Q8SlNBUElXcmFwcGVyT2JqZWN0Pjo6c3Vic3BhY2VGb3JJbXBs
KFZNJiB2bSwgU3Vic3BhY2VBY2Nlc3MgbW9kZSkKIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0LmNwcAkocmV2aXNpb24gMjcyODMwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNyBBcHBs
ZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA3IEVy
aWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC00MSw2ICs0
MSw5IEBAIHN0YXRpYyBKU0NfREVDTEFSRV9DVVNUT01fR0VUVEVSKHN0YXRpY0YKIHN0YXRpYyBK
U0NfREVDTEFSRV9DVVNUT01fR0VUVEVSKGNhbGxiYWNrR2V0dGVySlNHbG9iYWxPYmplY3RDYWxs
YmFja09iamVjdCk7CiBzdGF0aWMgSlNDX0RFQ0xBUkVfQ1VTVE9NX0dFVFRFUihzdGF0aWNGdW5j
dGlvbkdldHRlckpTR2xvYmFsT2JqZWN0Q2FsbGJhY2tPYmplY3QpOwogCitERUZJTkVfVklTSVRf
Q0hJTERSRU5fV0lUSF9NT0RJRklFUih0ZW1wbGF0ZTw+LCBKU0NhbGxiYWNrT2JqZWN0PEpTTm9u
RmluYWxPYmplY3Q+KTsKK0RFRklORV9WSVNJVF9DSElMRFJFTl9XSVRIX01PRElGSUVSKHRlbXBs
YXRlPD4sIEpTQ2FsbGJhY2tPYmplY3Q8SlNHbG9iYWxPYmplY3Q+KTsKKwogLy8gRGVmaW5lIHRo
ZSB0d28gdHlwZXMgb2YgSlNDYWxsYmFja09iamVjdHMgd2Ugc3VwcG9ydC4KIHRlbXBsYXRlIDw+
IGNvbnN0IENsYXNzSW5mbyBKU0NhbGxiYWNrT2JqZWN0PEpTTm9uRmluYWxPYmplY3Q+OjpzX2lu
Zm8gPSB7ICJDYWxsYmFja09iamVjdCIsICZCYXNlOjpzX2luZm8sIG51bGxwdHIsIG51bGxwdHIs
IENSRUFURV9NRVRIT0RfVEFCTEUoSlNDYWxsYmFja09iamVjdCkgfTsKIHRlbXBsYXRlIDw+IGNv
bnN0IENsYXNzSW5mbyBKU0NhbGxiYWNrT2JqZWN0PEpTR2xvYmFsT2JqZWN0Pjo6c19pbmZvID0g
eyAiQ2FsbGJhY2tHbG9iYWxPYmplY3QiLCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBudWxscHRy
LCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTQ2FsbGJhY2tPYmplY3QpIH07CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3QuaAkocmV2aXNpb24gMjcyODMw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMjAg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIw
MjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA3
IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC02OSw3
ICs2OSwxMCBAQCBwdWJsaWM6CiAgICAgICAgIG1fcHJpdmF0ZVByb3BlcnRpZXMtPmRlbGV0ZVBy
aXZhdGVQcm9wZXJ0eShwcm9wZXJ0eU5hbWUpOwogICAgIH0KIAotICAgIHZvaWQgdmlzaXRDaGls
ZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwor
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KKyAgICB2b2lkIHZpc2l0Q2hpbGRyZW4o
VmlzaXRvciYgdmlzaXRvcikKICAgICB7CiAgICAgICAgIEpTUHJpdmF0ZVByb3BlcnR5TWFwKiBw
cm9wZXJ0aWVzID0gbV9wcml2YXRlUHJvcGVydGllcy5nZXQoKTsKICAgICAgICAgaWYgKCFwcm9w
ZXJ0aWVzKQpAQCAtMTAzLDcgKzEwNiw4IEBAIHB1YmxpYzoKICAgICAgICAgICAgIG1fcHJvcGVy
dHlNYXAucmVtb3ZlKHByb3BlcnR5TmFtZS5pbXBsKCkpOwogICAgICAgICB9CiAKLSAgICAgICAg
dm9pZCB2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorICAgICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBWaXNpdG9yPgorICAgICAgICB2b2lkIHZpc2l0Q2hpbGRyZW4oVmlzaXRvciYg
dmlzaXRvcikKICAgICAgICAgewogICAgICAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9sb2Nr
KTsKICAgICAgICAgICAgIGZvciAoYXV0byYgcGFpciA6IG1fcHJvcGVydHlNYXApIHsKQEAgLTIx
NiwxMyArMjIwLDcgQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgQ2FsbERhdGEgZ2V0Q29uc3RydWN0
RGF0YShKU0NlbGwqKTsKICAgICBzdGF0aWMgQ2FsbERhdGEgZ2V0Q2FsbERhdGEoSlNDZWxsKik7
CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0
b3ImIHZpc2l0b3IpCi0gICAgewotICAgICAgICBKU0NhbGxiYWNrT2JqZWN0KiB0aGlzT2JqZWN0
ID0ganNDYXN0PEpTQ2FsbGJhY2tPYmplY3QqPihjZWxsKTsKLSAgICAgICAgQVNTRVJUX0dDX09C
SkVDVF9JTkhFUklUUygoc3RhdGljX2Nhc3Q8UGFyZW50Kj4odGhpc09iamVjdCkpLCBKU0NhbGxi
YWNrT2JqZWN0PFBhcmVudD46OmluZm8oKSk7Ci0gICAgICAgIFBhcmVudDo6dmlzaXRDaGlsZHJl
bih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKLSAgICAgICAgdGhpc09iamVjdC0+bV9jYWxsYmFja09i
amVjdERhdGEtPnZpc2l0Q2hpbGRyZW4odmlzaXRvcik7Ci0gICAgfQorICAgIERFQ0xBUkVfVklT
SVRfQ0hJTERSRU47CiAKICAgICB2b2lkIGluaXQoSlNHbG9iYWxPYmplY3QqKTsKICAKQEAgLTI0
NSw2ICsyNDMsMTYgQEAgcHJpdmF0ZToKICAgICBjb25zdCBDbGFzc0luZm8qIG1fY2xhc3NJbmZv
IHsgbnVsbHB0ciB9OwogfTsKIAordGVtcGxhdGUgPGNsYXNzIFBhcmVudD4KK3RlbXBsYXRlPHR5
cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTQ2FsbGJhY2tPYmplY3Q8UGFyZW50Pjo6dmlzaXRDaGls
ZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIEpTQ2FsbGJh
Y2tPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNDYWxsYmFja09iamVjdCo+KGNlbGwpOwor
ICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoKHN0YXRpY19jYXN0PFBhcmVudCo+KHRoaXNP
YmplY3QpKSwgSlNDYWxsYmFja09iamVjdDxQYXJlbnQ+OjppbmZvKCkpOworICAgIFBhcmVudDo6
dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKKyAgICB0aGlzT2JqZWN0LT5tX2Nh
bGxiYWNrT2JqZWN0RGF0YS0+dmlzaXRDaGlsZHJlbih2aXNpdG9yKTsKK30KKwogfSAvLyBuYW1l
c3BhY2UgSlNDCiAKIC8vIGluY2x1ZGUgdGhlIGFjdHVhbCB0ZW1wbGF0ZSBjbGFzcyBpbXBsZW1l
bnRhdGlvbgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU01hbmFnZWRWYWx1ZS5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTTWFuYWdlZFZhbHVl
Lm1tCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTTWFu
YWdlZFZhbHVlLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMywgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQyLDcgKzQyLDcgQEAKIGNsYXNzIEpT
TWFuYWdlZFZhbHVlSGFuZGxlT3duZXIgZmluYWwgOiBwdWJsaWMgSlNDOjpXZWFrSGFuZGxlT3du
ZXIgewogcHVibGljOgogICAgIHZvaWQgZmluYWxpemUoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3du
Piwgdm9pZCogY29udGV4dCkgZmluYWw7Ci0gICAgYm9vbCBpc1JlYWNoYWJsZUZyb21PcGFxdWVS
b290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0LCBKU0M6OlNsb3RW
aXNpdG9yJiwgY29uc3QgY2hhcioqKSBmaW5hbDsKKyAgICBib29sIGlzUmVhY2hhYmxlRnJvbU9w
YXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6
QWJzdHJhY3RTbG90VmlzaXRvciYsIGNvbnN0IGNoYXIqKikgZmluYWw7CiB9OwogCiBzdGF0aWMg
SlNNYW5hZ2VkVmFsdWVIYW5kbGVPd25lciYgbWFuYWdlZFZhbHVlSGFuZGxlT3duZXIoKQpAQCAt
MTgwLDcgKzE4MCw3IEBAIEBpbnRlcmZhY2UgSlNNYW5hZ2VkVmFsdWUgKFByaXZhdGVNZXRob2QK
IC0gKHZvaWQpZGlzY29ubmVjdFZhbHVlOwogQGVuZAogCi1ib29sIEpTTWFuYWdlZFZhbHVlSGFu
ZGxlT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5r
bm93bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNo
YXIqKiByZWFzb24pCitib29sIEpTTWFuYWdlZFZhbHVlSGFuZGxlT3duZXI6OmlzUmVhY2hhYmxl
RnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQs
IEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikK
IHsKICAgICBpZiAoVU5MSUtFTFkocmVhc29uKSkKICAgICAgICAgKnJlYXNvbiA9ICJKU01hbmFn
ZWRWYWx1ZSBpcyBvcGFxdWUgcm9vdCI7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJ
L0pTTWFya2luZ0NvbnN0cmFpbnRQcml2YXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvQVBJL0pTTWFya2luZ0NvbnN0cmFpbnRQcml2YXRlLmNwcAkocmV2aXNpb24g
MjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU01hcmtpbmdDb25zdHJhaW50
UHJpdmF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDcgKzM2LDcgQEAgbmFtZXNwYWNlIHsK
IEF0b21pYzx1bnNpZ25lZD4gY29uc3RyYWludENvdW50ZXI7CiAKIHN0cnVjdCBNYXJrZXIgOiBK
U01hcmtlciB7Ci0gICAgU2xvdFZpc2l0b3IqIHZpc2l0b3I7CisgICAgQWJzdHJhY3RTbG90Vmlz
aXRvciogdmlzaXRvcjsKIH07CiAKIGJvb2wgaXNNYXJrZWQoSlNNYXJrZXJSZWYgbWFya2VyUmVm
LCBKU09iamVjdFJlZiBvYmplY3RSZWYpCkBAIC00NCw3ICs0NCw3IEBAIGJvb2wgaXNNYXJrZWQo
SlNNYXJrZXJSZWYgbWFya2VyUmVmLCBKU08KICAgICBpZiAoIW9iamVjdFJlZikKICAgICAgICAg
cmV0dXJuIHRydWU7IC8vIE51bGwgaXMgYW4gaW1tb3J0YWwgb2JqZWN0LgogICAgIAotICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxNYXJrZXIqPihtYXJrZXJSZWYpLT52aXNpdG9yLT52bSgpLmhlYXAu
aXNNYXJrZWQodG9KUyhvYmplY3RSZWYpKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8TWFya2Vy
Kj4obWFya2VyUmVmKS0+dmlzaXRvci0+aXNNYXJrZWQodG9KUyhvYmplY3RSZWYpKTsKIH0KIAog
dm9pZCBtYXJrKEpTTWFya2VyUmVmIG1hcmtlclJlZiwgSlNPYmplY3RSZWYgb2JqZWN0UmVmKQpA
QCAtNzMsNyArNzMsNyBAQCB2b2lkIEpTQ29udGV4dEdyb3VwQWRkTWFya2luZ0NvbnN0cmFpbnQo
CiAgICAgYXV0byBjb25zdHJhaW50ID0gbWFrZVVuaXF1ZTxTaW1wbGVNYXJraW5nQ29uc3RyYWlu
dD4oCiAgICAgICAgIHRvQ1N0cmluZygiQW1jIiwgY29uc3RyYWludEluZGV4LCAiKCIsIFJhd1Bv
aW50ZXIoYml0d2lzZV9jYXN0PHZvaWQqPihjb25zdHJhaW50Q2FsbGJhY2spKSwgIikiKSwKICAg
ICAgICAgdG9DU3RyaW5nKCJBUEkgTWFya2luZyBDb25zdHJhaW50ICMiLCBjb25zdHJhaW50SW5k
ZXgsICIgKCIsIFJhd1BvaW50ZXIoYml0d2lzZV9jYXN0PHZvaWQqPihjb25zdHJhaW50Q2FsbGJh
Y2spKSwgIiwgIiwgUmF3UG9pbnRlcih1c2VyRGF0YSksICIpIiksCi0gICAgICAgIFtjb25zdHJh
aW50Q2FsbGJhY2ssIHVzZXJEYXRhXSAoU2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsKKyAgICAgICAg
W2NvbnN0cmFpbnRDYWxsYmFjaywgdXNlckRhdGFdIChBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNp
dG9yKSB7CiAgICAgICAgICAgICBNYXJrZXIgbWFya2VyOwogICAgICAgICAgICAgbWFya2VyLklz
TWFya2VkID0gaXNNYXJrZWQ7CiAgICAgICAgICAgICBtYXJrZXIuTWFyayA9IG1hcms7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmlydHVhbE1hY2hpbmUubW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1ZpcnR1YWxNYWNoaW5lLm1tCShyZXZp
c2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmlydHVhbE1hY2hp
bmUubW0JKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMTUsNyArMzE1LDcgQEAgKyAodm9pZClzZXRDcmFz
aE9uVk1DcmVhdGlvbjooQk9PTClzaG91bAogCiBAZW5kCiAKLXN0YXRpYyB2b2lkIHNjYW5FeHRl
cm5hbE9iamVjdEdyYXBoKEpTQzo6Vk0mIHZtLCBKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yLCB2
b2lkKiByb290LCBib29sIGxvY2tBY3F1aXJlZCkKK3N0YXRpYyB2b2lkIHNjYW5FeHRlcm5hbE9i
amVjdEdyYXBoKEpTQzo6Vk0mIHZtLCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3Is
IHZvaWQqIHJvb3QsIGJvb2wgbG9ja0FjcXVpcmVkKQogewogICAgIEBhdXRvcmVsZWFzZXBvb2wg
ewogICAgICAgICBKU1ZpcnR1YWxNYWNoaW5lICp2aXJ0dWFsTWFjaGluZSA9IFtKU1ZNV3JhcHBl
ckNhY2hlIHdyYXBwZXJGb3JKU0NvbnRleHRHcm91cFJlZjp0b1JlZigmdm0pXTsKQEAgLTM0Nywx
MyArMzQ3LDEzIEBAIHN0YXRpYyB2b2lkIHNjYW5FeHRlcm5hbE9iamVjdEdyYXBoKEpTQzoKICAg
ICB9CiB9CiAKLXZvaWQgc2NhbkV4dGVybmFsT2JqZWN0R3JhcGgoSlNDOjpWTSYgdm0sIEpTQzo6
U2xvdFZpc2l0b3ImIHZpc2l0b3IsIHZvaWQqIHJvb3QpCit2b2lkIHNjYW5FeHRlcm5hbE9iamVj
dEdyYXBoKEpTQzo6Vk0mIHZtLCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIHZv
aWQqIHJvb3QpCiB7CiAgICAgYm9vbCBsb2NrQWNxdWlyZWQgPSBmYWxzZTsKICAgICBzY2FuRXh0
ZXJuYWxPYmplY3RHcmFwaCh2bSwgdmlzaXRvciwgcm9vdCwgbG9ja0FjcXVpcmVkKTsKIH0KIAot
dm9pZCBzY2FuRXh0ZXJuYWxSZW1lbWJlcmVkU2V0KEpTQzo6Vk0mIHZtLCBKU0M6OlNsb3RWaXNp
dG9yJiB2aXNpdG9yKQordm9pZCBzY2FuRXh0ZXJuYWxSZW1lbWJlcmVkU2V0KEpTQzo6Vk0mIHZt
LCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgQGF1dG9yZWxlYXNl
cG9vbCB7CiAgICAgICAgIEpTVmlydHVhbE1hY2hpbmUgKnZpcnR1YWxNYWNoaW5lID0gW0pTVk1X
cmFwcGVyQ2FjaGUgd3JhcHBlckZvckpTQ29udGV4dEdyb3VwUmVmOnRvUmVmKCZ2bSldOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1ZpcnR1YWxNYWNoaW5lSW50ZXJuYWwuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmlydHVhbE1hY2hpbmVJ
bnRlcm5hbC5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJ
L0pTVmlydHVhbE1hY2hpbmVJbnRlcm5hbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMyLDcgKzMy
LDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiBjbGFzcyBWTTsKLWNsYXNzIFNsb3RWaXNpdG9yOwor
Y2xhc3MgQWJzdHJhY3RTbG90VmlzaXRvcjsKIH0KIAogI2lmIGRlZmluZWQoX19PQkpDX18pCkBA
IC01NCw4ICs1NCw4IEBAIEpTQ29udGV4dEdyb3VwUmVmIGdldEdyb3VwRnJvbVZpcnR1YWxNYWMK
IAogI2VuZGlmIC8vIGRlZmluZWQoX19PQkpDX18pCiAKLXZvaWQgc2NhbkV4dGVybmFsT2JqZWN0
R3JhcGgoSlNDOjpWTSYsIEpTQzo6U2xvdFZpc2l0b3ImLCB2b2lkKiByb290KTsKLXZvaWQgc2Nh
bkV4dGVybmFsUmVtZW1iZXJlZFNldChKU0M6OlZNJiwgSlNDOjpTbG90VmlzaXRvciYpOwordm9p
ZCBzY2FuRXh0ZXJuYWxPYmplY3RHcmFwaChKU0M6OlZNJiwgSlNDOjpBYnN0cmFjdFNsb3RWaXNp
dG9yJiwgdm9pZCogcm9vdCk7Cit2b2lkIHNjYW5FeHRlcm5hbFJlbWVtYmVyZWRTZXQoSlNDOjpW
TSYsIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpOwogCiAjZW5kaWYgLy8gSlNDX09CSkNfQVBJ
X0VOQUJMRUQKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9NYXJrZWRKU1ZhbHVl
UmVmQXJyYXkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvTWFy
a2VkSlNWYWx1ZVJlZkFycmF5LmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL0FQSS9NYXJrZWRKU1ZhbHVlUmVmQXJyYXkuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAtMjAyMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ2
LDcgKzQ2LDcgQEAgTWFya2VkSlNWYWx1ZVJlZkFycmF5Ojp+TWFya2VkSlNWYWx1ZVJlZgogICAg
ICAgICByZW1vdmUoKTsKIH0KIAotdm9pZCBNYXJrZWRKU1ZhbHVlUmVmQXJyYXk6OnZpc2l0QWdn
cmVnYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBNYXJrZWRKU1ZhbHVlUmVmQXJyYXk6
OnZpc2l0QWdncmVnYXRlKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNW
YWx1ZVJlZiogYnVmZmVyID0gZGF0YSgpOwogICAgIGZvciAodW5zaWduZWQgaW5kZXggPSAwOyBp
bmRleCA8IG1fc2l6ZTsgKytpbmRleCkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQ
SS9NYXJrZWRKU1ZhbHVlUmVmQXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvQVBJL01hcmtlZEpTVmFsdWVSZWZBcnJheS5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL01hcmtlZEpTVmFsdWVSZWZBcnJheS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAtMjAyMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTYyLDcgKzYyLDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9pbmxpbmVCdWZm
ZXI7CiAgICAgfQogCi0gICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYpOworICAg
IHZvaWQgdmlzaXRBZ2dyZWdhdGUoQWJzdHJhY3RTbG90VmlzaXRvciYpOwogCiBwcml2YXRlOgog
ICAgIHVuc2lnbmVkIG1fc2l6ZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xp
Yi9KU0FQSVdyYXBwZXJHbG9iYWxPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0FQSVdyYXBwZXJHbG9iYWxPYmplY3QuY3BwCShyZXZpc2lv
biAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNBUElXcmFwcGVy
R2xvYmFsT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTksNiArNTksOCBAQCBzdGF0aWMg
SlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElPTihjb25zdHJ1CiBzdGF0aWMgSlNDX0RFQ0xBUkVfQ1VT
VE9NX0dFVFRFUihjYWxsYmFja0dldHRlckpTQVBJV3JhcHBlckdsb2JhbE9iamVjdENhbGxiYWNr
T2JqZWN0KTsKIHN0YXRpYyBKU0NfREVDTEFSRV9DVVNUT01fR0VUVEVSKHN0YXRpY0Z1bmN0aW9u
R2V0dGVySlNBUElXcmFwcGVyR2xvYmFsT2JqZWN0Q2FsbGJhY2tPYmplY3QpOwogCitERUZJTkVf
VklTSVRfQ0hJTERSRU5fV0lUSF9NT0RJRklFUih0ZW1wbGF0ZTw+LCBKU0NhbGxiYWNrT2JqZWN0
PEpTQVBJV3JhcHBlckdsb2JhbE9iamVjdD4pOworCiB0ZW1wbGF0ZSA8PiBjb25zdCBDbGFzc0lu
Zm8gSlNDYWxsYmFja09iamVjdDxKU0FQSVdyYXBwZXJHbG9iYWxPYmplY3Q+OjpzX2luZm8gPSB7
ICJKU0FQSVdyYXBwZXJHbG9iYWxPYmplY3QiLCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBudWxs
cHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTQ2FsbGJhY2tPYmplY3QpIH07CiB0ZW1wbGF0ZTw+
IGNvbnN0IGJvb2wgSlNDYWxsYmFja09iamVjdDxKU0FQSVdyYXBwZXJHbG9iYWxPYmplY3Q+Ojpu
ZWVkc0Rlc3RydWN0aW9uID0gdHJ1ZTsKIApAQCAtMTQ0LDkgKzE0Niw0IEBAIHZvaWQgSlNBUElX
cmFwcGVyR2xvYmFsT2JqZWN0OjpmaW5pc2hDcmUKICAgICBXZWFrU2V0OjphbGxvY2F0ZSh0aGlz
LCBqc0FQSVdyYXBwZXJHbG9iYWxPYmplY3RIYW5kbGVPd25lcigpLCAwKTsgLy8gQmFsYW5jZWQg
aW4gSlNBUElXcmFwcGVyR2xvYmFsT2JqZWN0SGFuZGxlT3duZXI6OmZpbmFsaXplLgogfQogCi12
b2lkIEpTQVBJV3JhcHBlckdsb2JhbE9iamVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGws
IEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCi17Ci0gICAgQmFzZTo6dmlzaXRDaGlsZHJlbihj
ZWxsLCB2aXNpdG9yKTsKLX0KLQogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNBUElXcmFwcGVyR2xvYmFsT2JqZWN0LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQVBJV3JhcHBlckdsb2JhbE9i
amVjdC5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2ds
aWIvSlNBUElXcmFwcGVyR2xvYmFsT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDcgKzM5
LDYgQEAgcHVibGljOgogICAgIHN0YXRpYyB2b2lkIHN1YnNwYWNlRm9yKFZNJikgeyBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9CiAKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7
Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9y
Jik7CiAKICAgICBKU0NHTGliV3JhcHBlck9iamVjdCogd3JhcHBlZE9iamVjdCgpIGNvbnN0IHsg
cmV0dXJuIG1fd3JhcHBlZE9iamVjdDsgfQogICAgIHZvaWQgc2V0V3JhcHBlZE9iamVjdChKU0NH
TGliV3JhcHBlck9iamVjdCogd3JhcHBlZE9iamVjdCkgeyBtX3dyYXBwZWRPYmplY3QgPSB3cmFw
cGVkT2JqZWN0OyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNBUElX
cmFwcGVyT2JqZWN0R0xpYi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L0FQSS9nbGliL0pTQVBJV3JhcHBlck9iamVjdEdMaWIuY3BwCShyZXZpc2lvbiAyNzI4MzApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNBUElXcmFwcGVyT2JqZWN0R0xpYi5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIK
ICNpbmNsdWRlICJKU0FQSVdyYXBwZXJPYmplY3QuaCIKIAorI2luY2x1ZGUgIkFic3RyYWN0U2xv
dFZpc2l0b3IuaCIKICNpbmNsdWRlICJKU0NHTGliV3JhcHBlck9iamVjdC5oIgogI2luY2x1ZGUg
IkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJKU0NhbGxiYWNrT2JqZWN0LmgiCkBAIC0zNiw3ICsz
Nyw3IEBACiBjbGFzcyBKU0FQSVdyYXBwZXJPYmplY3RIYW5kbGVPd25lciBmaW5hbCA6IHB1Ymxp
YyBKU0M6OldlYWtIYW5kbGVPd25lciB7CiBwdWJsaWM6CiAgICAgdm9pZCBmaW5hbGl6ZShKU0M6
OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKikgZmluYWw7Ci0gICAgYm9vbCBpc1JlYWNoYWJs
ZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0
LCBKU0M6OlNsb3RWaXNpdG9yJiwgY29uc3QgY2hhcioqKSBmaW5hbDsKKyAgICBib29sIGlzUmVh
Y2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNv
bnRleHQsIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYsIGNvbnN0IGNoYXIqKikgZmluYWw7CiB9
OwogCiBzdGF0aWMgSlNBUElXcmFwcGVyT2JqZWN0SGFuZGxlT3duZXIqIGpzQVBJV3JhcHBlck9i
amVjdEhhbmRsZU93bmVyKCkKQEAgLTU1LDcgKzU2LDcgQEAgdm9pZCBKU0FQSVdyYXBwZXJPYmpl
Y3RIYW5kbGVPd25lcjo6ZmluYQogICAgIEpTQzo6V2Vha1NldDo6ZGVhbGxvY2F0ZShKU0M6Oldl
YWtJbXBsOjphc1dlYWtJbXBsKGhhbmRsZS5zbG90KCkpKTsKIH0KIAotYm9vbCBKU0FQSVdyYXBw
ZXJPYmplY3RIYW5kbGVPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5k
bGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9y
LCBjb25zdCBjaGFyKiopCitib29sIEpTQVBJV3JhcHBlck9iamVjdEhhbmRsZU93bmVyOjppc1Jl
YWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwg
dm9pZCosIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqKQog
ewogICAgIEpTQzo6SlNBUElXcmFwcGVyT2JqZWN0KiB3cmFwcGVyT2JqZWN0ID0gSlNDOjpqc0Nh
c3Q8SlNDOjpKU0FQSVdyYXBwZXJPYmplY3QqPihoYW5kbGUuZ2V0KCkuYXNDZWxsKCkpOwogICAg
IC8vIFdlIHVzZSB0aGUgSlNHbG9iYWxPYmplY3Qgd2hlbiBwcm9jZXNzaW5nIHdlYWsgaGFuZGxl
cyB0byBwcmV2ZW50IHRoZSBzaXR1YXRpb24gd2hlcmUgdXNpbmcKQEAgLTcyLDYgKzczLDggQEAg
c3RhdGljIEpTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJT04oY29uc3RydQogc3RhdGljIEpTQ19ERUNM
QVJFX0NVU1RPTV9HRVRURVIoY2FsbGJhY2tHZXR0ZXJKU0FQSVdyYXBwZXJPYmplY3RDYWxsYmFj
a09iamVjdCk7CiBzdGF0aWMgSlNDX0RFQ0xBUkVfQ1VTVE9NX0dFVFRFUihzdGF0aWNGdW5jdGlv
bkdldHRlckpTQVBJV3JhcHBlck9iamVjdENhbGxiYWNrT2JqZWN0KTsKIAorREVGSU5FX1ZJU0lU
X0NISUxEUkVOX1dJVEhfTU9ESUZJRVIodGVtcGxhdGU8PiwgSlNDYWxsYmFja09iamVjdDxKU0FQ
SVdyYXBwZXJPYmplY3Q+KTsKKwogdGVtcGxhdGUgPD4gY29uc3QgQ2xhc3NJbmZvIEpTQ2FsbGJh
Y2tPYmplY3Q8SlNBUElXcmFwcGVyT2JqZWN0Pjo6c19pbmZvID0geyAiSlNBUElXcmFwcGVyT2Jq
ZWN0IiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJM
RShKU0NhbGxiYWNrT2JqZWN0KSB9OwogdGVtcGxhdGU8PiBjb25zdCBib29sIEpTQ2FsbGJhY2tP
YmplY3Q8SlNBUElXcmFwcGVyT2JqZWN0Pjo6bmVlZHNEZXN0cnVjdGlvbiA9IHRydWU7CiAKQEAg
LTE1NSw5ICsxNTgsMTIgQEAgdm9pZCBKU0FQSVdyYXBwZXJPYmplY3Q6OnNldFdyYXBwZWRPYmpl
YwogICAgIG1fd3JhcHBlZE9iamVjdCA9IHdyYXBwZWRPYmplY3Q7CiB9CiAKLXZvaWQgSlNBUElX
cmFwcGVyT2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgSlNDOjpTbG90VmlzaXRv
ciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTQVBJV3JhcHBl
ck9iamVjdDo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9y
KQogewogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4oY2VsbCwgdmlzaXRvcik7CiB9CiAKK0RFRklO
RV9WSVNJVF9DSElMRFJFTl9XSVRIX01PRElGSUVSKEpTX0VYUE9SVF9QUklWQVRFLCBKU0FQSVdy
YXBwZXJPYmplY3QpOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpA
QCAtMTE1OCw2ICsxMTU4LDcgQEAKIAkJNjVCODM5MkUxQkFDQUQzNjAwNDRFODI0IC8qIENhY2hl
ZFJlY292ZXJ5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA2NUI4MzkyQzFCQUNBOTJBMDA0NEU4MjQgLyogQ2FjaGVkUmVjb3ZlcnkuaCAqLzsgfTsKIAkJ
NkEzOENGQUExRTMyQjVBQjAwNjAyMDZGIC8qIEFzeW5jU3RhY2tUcmFjZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkEzOENGQTgxRTMyQjU4QjAwNjAy
MDZGIC8qIEFzeW5jU3RhY2tUcmFjZS5oICovOyB9OwogCQk2QUQyQ0I0RDE5QjkxNDAxMDAwNjU3
MTkgLyogRGVidWdnZXJFdmFsRW5hYmxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNkFEMkNCNEMxOUI5MTQwMTAwMDY1NzE5IC8qIERlYnVnZ2VyRXZh
bEVuYWJsZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OworCQk2QkNDRUMwNDI1RDFGQTI3MDAwRjM5MUQgLyogVmVyaWZpZXJTbG90VmlzaXRvcklubGlu
ZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZCQ0NF
QzAzMjVEMUZBMjcwMDBGMzkxRCAvKiBWZXJpZmllclNsb3RWaXNpdG9ySW5saW5lcy5oICovOyB9
OwogCQk3MDExM0Q0QzFBOERCMDkzMDAzODQ4QzQgLyogSXRlcmF0b3JPcGVyYXRpb25zLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MDExM0Q0QTFBOERC
MDkzMDAzODQ4QzQgLyogSXRlcmF0b3JPcGVyYXRpb25zLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzAxM0NBOEMxQjQ5MUE5NDAwQ0FFNjEzIC8q
IEpTTWljcm90YXNrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA3MDEzQ0E4QTFCNDkxQTk0MDBDQUU2MTMgLyogSlNNaWNyb3Rhc2suaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3MDVCNDFBQzFBNkU1MDFF
MDA3MTY3NTcgLyogU3ltYm9sLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA3MDVCNDFBNDFBNkU1MDFFMDA3MTY3NTcgLyogU3ltYm9sLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTE5MTYsNiArMTkxNyw3
IEBACiAJCUUzRkY3NTMzMUQ5Q0VBMTgwMEM3RTE2RCAvKiBET01KSVRHZXR0ZXJTZXR0ZXIuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUzRkY3NTJGMUQ5
Q0VBMTIwMEM3RTE2RCAvKiBET01KSVRHZXR0ZXJTZXR0ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlFNDlEQzE2QzEyRUYyOTRFMDAxODRBMUYg
LyogU291cmNlUHJvdmlkZXJDYWNoZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRTQ5REMxNTExMkVGMjcyMjAwMTg0QTFGIC8qIFNvdXJjZVByb3ZpZGVy
Q2FjaGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQlFNDlEQzE2RDEyRUYyOTUzMDAxODRBMUYgLyogU291cmNlUHJvdmlkZXJDYWNoZUl0ZW0uaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0OURDMTQ5MTJF
RjI2MUEwMDE4NEExRiAvKiBTb3VyY2VQcm92aWRlckNhY2hlSXRlbS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUZFMDQxNTUzMjUyRUMwNzMwMDkx
RUI1RCAvKiBTbG90VmlzaXRvck1hY3Jvcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRkUwNDE1NTIyNTJFQzA3MzAwOTFFQjVEIC8qIFNsb3RWaXNpdG9y
TWFjcm9zLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJRkUwNUZBRkQxRkU0Q0VEQTAwMDkzMjMwIC8qIERlcHJlY2F0ZWRJbnNwZWN0b3JWYWx1ZXMu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTkyRDZB
MTExRkJENDkxRDAwMDI0NUY0IC8qIERlcHJlY2F0ZWRJbnNwZWN0b3JWYWx1ZXMuY3BwICovOyB9
OwogCQlGRTA4NkJDQTIxMjNERUZCMDAzRjI5MjkgLyogRW50cnlGcmFtZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUwODZCQzkyMTIzREVGQTAwM0Yy
OTI5IC8qIEVudHJ5RnJhbWUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQlGRTBENEEwNjFBQjhERDBBMDAyRjU0QkYgLyogRXhlY3V0aW9uVGltZUxp
bWl0VGVzdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBGRTBENEEwNDFBQjhERDBBMDAyRjU0QkYgLyogRXhlY3V0aW9uVGltZUxpbWl0VGVzdC5jcHAg
Ki87IH07CkBAIC0xOTM4LDYgKzE5NDAsNyBAQAogCQlGRTFFMkMzRjIyNDBERDU4MDBGNkI3Mjkg
LyogTWFjcm9Bc3NlbWJsZXJBUk02NEUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEZFMUUyQzNFMjI0MEQzMEIwMEY2QjcyOSAvKiBNYWNyb0Fzc2VtYmxl
ckFSTTY0RS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCUZFMUUyQzQwMjI0MERENjIwMEY2QjcyOSAvKiBBUk02NEVBc3NlbWJsZXIuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFMUUyQzNEMjI0MEQyRjYw
MEY2QjcyOSAvKiBBUk02NEVBc3NlbWJsZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQlGRTIwQ0U5RTE1RjA0QTk1MDBERjM0MzAgLyogTExJbnRD
TG9vcC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUy
MENFOUMxNUYwNEE5NTAwREYzNDMwIC8qIExMSW50Q0xvb3AuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlGRTI4N0QwMjI1MkZCMkU4MDBENzIzRjkg
LyogVmVyaWZpZXJTbG90VmlzaXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRkUyODdEMDEyNTJGQjJFODAwRDcyM0Y5IC8qIFZlcmlmaWVyU2xvdFZp
c2l0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQlGRTJBODc2MDFGMDIzODE2MDBFQjMxQjIgLyogTWluaW11bVJlc2VydmVkWm9uZVNpemUuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFMkE4NzVGMUYw
MjM4MTYwMEVCMzFCMiAvKiBNaW5pbXVtUmVzZXJ2ZWRab25lU2l6ZS5oICovOyB9OwogCQlGRTMw
MjJEMzFFM0Q3M0E1MDBCQUM0OTMgLyogU2lnaWxsQ3Jhc2hBbmFseXplci5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUzMDIyRDExRTNENzM5NjAwQkFD
NDkzIC8qIFNpZ2lsbENyYXNoQW5hbHl6ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQlGRTMwMjJENzFFNDI4NTczMDBCQUM0OTMgLyogVk1JbnNw
ZWN0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZF
MzAyMkQ1MUU0Mjg1NjcwMEJBQzQ5MyAvKiBWTUluc3BlY3Rvci5oICovOyB9OwpAQCAtMTk3Niw2
ICsxOTc5LDggQEAKIAkJRkU4MEMxOTcxRDc3NUNERDAwODUxMEMwIC8qIENhdGNoU2NvcGUuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFODBDMTk2MUQ3
NzVCMjcwMDg1MTBDMCAvKiBDYXRjaFNjb3BlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRkU4REU1NEIyM0FDMURBRDAwNUM5MTQyIC8qIENhY2hl
YWJsZUlkZW50aWZpZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEZFOERFNTRBMjNBQzFEQUQwMDVDOTE0MiAvKiBDYWNoZWFibGVJZGVudGlmaWVyLmgg
Ki87IH07CiAJCUZFOERFNTREMjNBQzFFODYwMDVDOTE0MiAvKiBDYWNoZWFibGVJZGVudGlmaWVy
SW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RkU4REU1NEMyM0FDMUU4NjAwNUM5MTQyIC8qIENhY2hlYWJsZUlkZW50aWZpZXJJbmxpbmVzLmgg
Ki87IH07CisJCUZFOTEyQjRGMjUzMTE5MzMwMEZBQkRERiAvKiBBYnN0cmFjdFNsb3RWaXNpdG9y
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTkxMkI0
RTI1MzExOTMzMDBGQUJEREYgLyogQWJzdHJhY3RTbG90VmlzaXRvci5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUZFOTEyQjUxMjUzMTFBRDEwMEZB
QkRERiAvKiBBYnN0cmFjdFNsb3RWaXNpdG9ySW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkU5MTJCNTAyNTMxMUFEMTAwRkFCRERGIC8qIEFi
c3RyYWN0U2xvdFZpc2l0b3JJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJRkU5OUIyNDkxQzI0QzNEMzAwQzgyMTU5IC8qIEpJVE5lZ0dl
bmVyYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RkU5OUIyNDgxQzI0QjZEMzAwQzgyMTU5IC8qIEpJVE5lZ0dlbmVyYXRvci5oICovOyB9OwogCQlG
RUEwODYyMDE4MkI3QTA0MDBGNkQ4NTEgLyogQnJlYWtwb2ludC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkVBMDg2MUUxODJCN0EwNDAwRjZEODUxIC8q
IEJyZWFrcG9pbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQlGRUEwODYyMTE4MkI3QTA0MDBGNkQ4NTEgLyogRGVidWdnZXJQcmltaXRpdmVzLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRUEwODYxRjE4
MkI3QTA0MDBGNkQ4NTEgLyogRGVidWdnZXJQcmltaXRpdmVzLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTM5ODgsNiArMzk5Myw3IEBACiAJCTZB
MzhDRkE4MUUzMkI1OEIwMDYwMjA2RiAvKiBBc3luY1N0YWNrVHJhY2UuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gQXN5bmNTdGFja1RyYWNlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTZBRDJDQjRDMTlCOTE0MDEwMDA2NTcxOSAvKiBEZWJ1Z2dlckV2YWxFbmFi
bGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERlYnVnZ2VyRXZhbEVuYWJs
ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkJBOTNDOTU5MDQ4NEM1QkFEOTMx
NkVBIC8qIEpTU2NyaXB0RmV0Y2hlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBKU1NjcmlwdEZldGNoZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNkJDQ0VD
MDMyNUQxRkEyNzAwMEYzOTFEIC8qIFZlcmlmaWVyU2xvdFZpc2l0b3JJbmxpbmVzLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZlcmlmaWVyU2xvdFZpc2l0b3JJbmxpbmVzLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcwMTEzRDQ5MUE4REIwOTMwMDM4NDhDNCAv
KiBJdGVyYXRvck9wZXJhdGlvbnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gSXRlcmF0b3JPcGVyYXRpb25zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNzAxMTNENEExQThEQjA5MzAwMzg0OEM0IC8qIEl0ZXJhdG9yT3BlcmF0aW9ucy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJdGVyYXRvck9wZXJhdGlvbnMuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzAxM0NBODkxQjQ5MUE5NDAwQ0FFNjEzIC8qIEpTTWlj
cm90YXNrLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTTWljcm90
YXNrLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTUyMjEsNiArNTIyNyw3IEBA
CiAJCUY2OTJBODg3MDI1NTU5N0QwMUZGNjBGNyAvKiBKU0NKU1ZhbHVlLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTQ0pTVmFsdWUu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IH07CiAJCUY3MzkyNjkx
OERDNjQzMzBBRkNERjBENyAvKiBKU1NvdXJjZUNvZGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gSlNTb3VyY2VDb2RlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJRkUwMDI2MjIyM0YzQUYzMzAwM0EzNThGIC8qIFdlYkFzc2VtYmx5LmFzbSAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
YXNtLmFzbTsgbmFtZSA9IFdlYkFzc2VtYmx5LmFzbTsgcGF0aCA9IGxsaW50L1dlYkFzc2VtYmx5
LmFzbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkUwNDE1NTIyNTJFQzA3MzAwOTFF
QjVEIC8qIFNsb3RWaXNpdG9yTWFjcm9zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFNsb3RWaXNpdG9yTWFjcm9zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZF
MDg2QkM5MjEyM0RFRkEwMDNGMjkyOSAvKiBFbnRyeUZyYW1lLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEVudHJ5RnJhbWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJRkUwRDRBMDQxQUI4REQwQTAwMkY1NEJGIC8qIEV4ZWN1dGlvblRpbWVMaW1pdFRlc3QuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gRXhlY3V0aW9uVGltZUxpbWl0
VGVzdC5jcHA7IHBhdGggPSBBUEkvdGVzdHMvRXhlY3V0aW9uVGltZUxpbWl0VGVzdC5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFMEQ0QTA1MUFCOEREMEEwMDJGNTRCRiAvKiBF
eGVjdXRpb25UaW1lTGltaXRUZXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IEV4ZWN1dGlvblRpbWVMaW1pdFRlc3QuaDsgcGF0aCA9IEFQSS90ZXN0cy9FeGVjdXRpb25UaW1l
TGltaXRUZXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01MjU1LDcgKzUyNjIs
OSBAQAogCQlGRTFFMkMzRTIyNDBEMzBCMDBGNkI3MjkgLyogTWFjcm9Bc3NlbWJsZXJBUk02NEUu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWFjcm9Bc3NlbWJsZXJBUk02NEUu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkUyMENFOUIxNUYwNEE5NTAwREYzNDMw
IC8qIExMSW50Q0xvb3AuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0g
TExJbnRDTG9vcC5jcHA7IHBhdGggPSBsbGludC9MTEludENMb29wLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJRkUyMENFOUMxNUYwNEE5NTAwREYzNDMwIC8qIExMSW50Q0xvb3Au
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gTExJbnRDTG9vcC5oOyBwYXRoID0g
bGxpbnQvTExJbnRDTG9vcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRTI4N0Qw
MTI1MkZCMkU4MDBENzIzRjkgLyogVmVyaWZpZXJTbG90VmlzaXRvci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBWZXJpZmllclNsb3RWaXNpdG9yLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUZFMkE4NzVGMUYwMjM4MTYwMEVCMzFCMiAvKiBNaW5pbXVtUmVzZXJ2
ZWRab25lU2l6ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNaW5pbXVtUmVzZXJ2ZWRab25lU2l6ZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRTJCRDY2RTI1QzBEQzgyMDA5OTlEM0IgLyog
VmVyaWZpZXJTbG90VmlzaXRvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBWZXJpZmllclNsb3RWaXNpdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJRkUyRTZBN0ExRDZFQTVGRTAwNjBGODk2IC8qIFRocm93U2NvcGUuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVGhyb3dTY29wZS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUZFMzAyMkQwMUUzRDczOTYwMEJBQzQ5MyAvKiBTaWdpbGxDcmFzaEFu
YWx5emVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNpZ2lsbENy
YXNoQW5hbHl6ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTMwMjJEMTFF
M0Q3Mzk2MDBCQUM0OTMgLyogU2lnaWxsQ3Jhc2hBbmFseXplci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBTaWdpbGxDcmFzaEFuYWx5emVyLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC01MzI5LDYgKzUzMzgsOCBAQAogCQlGRThERTU0QzIzQUMxRTg2MDA1Qzkx
NDIgLyogQ2FjaGVhYmxlSWRlbnRpZmllcklubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gQ2FjaGVhYmxlSWRlbnRpZmllcklubGluZXMuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJRkU4REU1NEUyM0FDM0E4RTAwNUM5MTQyIC8qIENhY2hlYWJsZUlkZW50
aWZpZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ2FjaGVhYmxlSWRlbnRpZmllci5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFOTBCQjNBMUI3Q0Y2NEUwMDZCM0YwMyAvKiBW
TUlubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVk1JbmxpbmVzLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZFOTEyQjRFMjUzMTE5MzMwMEZBQkRERiAv
KiBBYnN0cmFjdFNsb3RWaXNpdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEFic3RyYWN0U2xvdFZpc2l0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkU5
MTJCNTAyNTMxMUFEMTAwRkFCRERGIC8qIEFic3RyYWN0U2xvdFZpc2l0b3JJbmxpbmVzLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFic3RyYWN0U2xvdFZpc2l0b3JJbmxpbmVz
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFOThCNUI2MUJCOUFFMTEwMDczRTdB
NiAvKiBKSVRTdWJHZW5lcmF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
SklUU3ViR2VuZXJhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFOTlCMjQ3
MUMyNEI2RDMwMEM4MjE1OSAvKiBKSVROZWdHZW5lcmF0b3IuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gSklUTmVnR2VuZXJhdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJRkU5OUIyNDgxQzI0QjZEMzAwQzgyMTU5IC8qIEpJVE5lZ0dlbmVyYXRv
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKSVROZWdHZW5lcmF0b3IuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTYyNzgsNiArNjI4OSw4IEBACiAJCTE0MkUz
MTJBMTM0RkYwQTYwMEFGQURCNSAvKiBoZWFwICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJ
CQljaGlsZHJlbiA9ICgKKwkJCQlGRTkxMkI0RTI1MzExOTMzMDBGQUJEREYgLyogQWJzdHJhY3RT
bG90VmlzaXRvci5oICovLAorCQkJCUZFOTEyQjUwMjUzMTFBRDEwMEZBQkRERiAvKiBBYnN0cmFj
dFNsb3RWaXNpdG9ySW5saW5lcy5oICovLAogCQkJCTBGRUMzQzUwMUYzM0E0MTYwMEY1OUI2QyAv
KiBBbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmNwcCAqLywKIAkJCQkwRkVDM0M1MTFGMzNBNDE2MDBG
NTlCNkMgLyogQWxpZ25lZE1lbW9yeUFsbG9jYXRvci5oICovLAogCQkJCTBGQTc2MjBBMURCOTU5
RjYwMEI3QTJGRCAvKiBBbGxvY2F0aW5nU2NvcGUuaCAqLywKQEAgLTY0MzUsNiArNjQ0OCw3IEBA
CiAJCQkJQzIyNTQ5NDIxNUY3REJBQTAwNjVFODk4IC8qIFNsb3RWaXNpdG9yLmNwcCAqLywKIAkJ
CQkxNEJBNzhGMDEzQUFCODhGMDA1QjdDMkMgLyogU2xvdFZpc2l0b3IuaCAqLywKIAkJCQkwRkNC
NDA4NTE1QzBBM0MzMDA0ODkzMkIgLyogU2xvdFZpc2l0b3JJbmxpbmVzLmggKi8sCisJCQkJRkUw
NDE1NTIyNTJFQzA3MzAwOTFFQjVEIC8qIFNsb3RWaXNpdG9yTWFjcm9zLmggKi8sCiAJCQkJMEZE
RTg3RkExREZFNkU1MDAwNjRDMzkwIC8qIFNwYWNlVGltZU11dGF0b3JTY2hlZHVsZXIuY3BwICov
LAogCQkJCTBGREU4N0ZCMURGRTZFNTAwMDY0QzM5MCAvKiBTcGFjZVRpbWVNdXRhdG9yU2NoZWR1
bGVyLmggKi8sCiAJCQkJMEY0RjgyODkxRTMxQjk3MTAwNzUxODRDIC8qIFN0b2NoYXN0aWNTcGFj
ZVRpbWVNdXRhdG9yU2NoZWR1bGVyLmNwcCAqLywKQEAgLTY0NTIsNiArNjQ2Niw5IEBACiAJCQkJ
MEYxRkIzOEExRTE3M0E2MjAwQTlCRTUwIC8qIFN5bmNocm9ub3VzU3RvcFRoZVdvcmxkTXV0YXRv
clNjaGVkdWxlci5jcHAgKi8sCiAJCQkJMEYxRkIzOEIxRTE3M0E2MjAwQTlCRTUwIC8qIFN5bmNo
cm9ub3VzU3RvcFRoZVdvcmxkTXV0YXRvclNjaGVkdWxlci5oICovLAogCQkJCTE0MTQ0OENDMTNB
MTc4MzcwMEY1QkExQSAvKiBUaW55Qmxvb21GaWx0ZXIuaCAqLywKKwkJCQlGRTJCRDY2RTI1QzBE
QzgyMDA5OTlEM0IgLyogVmVyaWZpZXJTbG90VmlzaXRvci5jcHAgKi8sCisJCQkJRkUyODdEMDEy
NTJGQjJFODAwRDcyM0Y5IC8qIFZlcmlmaWVyU2xvdFZpc2l0b3IuaCAqLywKKwkJCQk2QkNDRUMw
MzI1RDFGQTI3MDAwRjM5MUQgLyogVmVyaWZpZXJTbG90VmlzaXRvcklubGluZXMuaCAqLywKIAkJ
CQkwRjREOEM3MjFGQzdBOTczMDAxRDMyQUMgLyogVmlzaXRDb3VudGVyLmggKi8sCiAJCQkJMEY5
NTJBOUYxREY3ODYwNzAwRTA2RkJEIC8qIFZpc2l0UmFjZUtleS5jcHAgKi8sCiAJCQkJMEY5NTJB
QTAxREY3ODYwNzAwRTA2RkJEIC8qIFZpc2l0UmFjZUtleS5oICovLApAQCAtOTI5Myw2ICs5MzEw
LDcgQEAKIAkJCQkxNDdCODNBQzBFNkRCOEM5MDA0Nzc1QTQgLyogQmF0Y2hlZFRyYW5zaXRpb25P
cHRpbWl6ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUUzNUU4OUZEMjVDNTBGODcwMDcxRUUxRSAv
KiBCaWdJbnQ2NEFycmF5LmggaW4gSGVhZGVycyAqLywKIAkJCQk4Njk3NkU1RjFGQTNFOEJDMDBF
N0M0RTEgLyogQmlnSW50Q29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJCUZFMDQxNTUz
MjUyRUMwNzMwMDkxRUI1RCAvKiBTbG90VmlzaXRvck1hY3Jvcy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJODY2NzM5RDIxM0JGREU3MTAwMjNEODdDIC8qIEJpZ0ludGVnZXIuaCBpbiBIZWFkZXJzICov
LAogCQkJCTg2MTgxNjc3MUZCNzkyNDIwMEVDQzRFQyAvKiBCaWdJbnRPYmplY3QuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTg2OTc2RTVFMUZBM0U4QjYwMEU3QzRFMSAvKiBCaWdJbnRQcm90b3R5cGUu
aCBpbiBIZWFkZXJzICovLApAQCAtOTU3NCw2ICs5NTkyLDcgQEAKIAkJCQkwRkQ4MkU1NzE0MURB
RjEwMDAxNzlDOTQgLyogREZHT1NSRW50cnkuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRDhBMzI2
MTdENTFGNTcwMENBMkM0MCAvKiBERkdPU1JFbnRyeXBvaW50Q3JlYXRpb25QaGFzZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEZDMDk3NkExNDY4QTZGNzAwQ0YyNDQyIC8qIERGR09TUkV4aXQuaCBp
biBIZWFkZXJzICovLAorCQkJCUZFOTEyQjRGMjUzMTE5MzMwMEZBQkRERiAvKiBBYnN0cmFjdFNs
b3RWaXNpdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjIzNUJFQzE3MTc4RTczMDA2OTBDN0Yg
LyogREZHT1NSRXhpdEJhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRkI5MjFDMTZEMDJGMTEw
MDU1QTVEQiAvKiBERkdPU1JFeGl0Q29tcGlsYXRpb25JbmZvLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRjcwMjVBQTE3MTRCMEZDMDAzODJDMEUgLyogREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmgg
aW4gSGVhZGVycyAqLywKQEAgLTk4NTksNiArOTg3OCw3IEBACiAJCQkJQTUxM0U1QkUxODVCRkFD
QzAwN0U5NUFEIC8qIEluamVjdGVkU2NyaXB0SG9zdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTUx
M0U1Q0IxODVGOTYyNDAwN0U5NUFEIC8qIEluamVjdGVkU2NyaXB0TWFuYWdlci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQTU4NDBFMjExODdCN0I4NjAwODQzQjEwIC8qIEluamVjdGVkU2NyaXB0TW9k
dWxlLmggaW4gSGVhZGVycyAqLywKKwkJCQlGRTI4N0QwMjI1MkZCMkU4MDBENzIzRjkgLyogVmVy
aWZpZXJTbG90VmlzaXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTUxM0U1QzcxODVGOTQ0NjAw
N0U5NUFEIC8qIEluamVjdGVkU2NyaXB0U291cmNlLmggaW4gSGVhZGVycyAqLywKIAkJCQk5OTU5
RTkzMjFCRDE4Mjc5MDAxQUE0MTMgLyogaW5saW5lLWFuZC1taW5pZnktc3R5bGVzaGVldHMtYW5k
LXNjcmlwdHMucHkgaW4gSGVhZGVycyAqLywKIAkJCQk3OTA1QkI2OTFEMTIwNTBFMDAxOUZFNTcg
LyogSW5saW5lQWNjZXNzLmggaW4gSGVhZGVycyAqLywKQEAgLTEwMDM0LDYgKzEwMDU0LDcgQEAK
IAkJCQlBNThDMDI0MjE4RTRBNDFBMDAwMzJCQzUgLyogSlNDb250ZXh0UHJpdmF0ZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQkMxOEM0MUUwRTE2RjVDRDAwQjM0NDYwIC8qIEpTQ29udGV4dFJlZi5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQTVFQTcwRUUxOUY1QjVDNDAwOThGNUVDIC8qIEpTQ29udGV4
dFJlZkluc3BlY3RvclN1cHBvcnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTZCQ0NFQzA0MjVEMUZB
MjcwMDBGMzkxRCAvKiBWZXJpZmllclNsb3RWaXNpdG9ySW5saW5lcy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQTVEMkU2NjUxOTVFMTc0MDAwQTUxOEU3IC8qIEpTQ29udGV4dFJlZkludGVybmFsLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkxNDhDRDFEODEwOENGOTAyMDA4MTYzQzYgLyogSlNDb250ZXh0
UmVmUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkU3NDk3RTYyMDkwMDFCMTAwMDM1NjVC
IC8qIEpTQ1B0clRhZy5oIGluIEhlYWRlcnMgKi8sCkBAIC0xMDE2NCw2ICsxMDE4NSw3IEBACiAJ
CQkJNzk1QUM2MTgyMEEyMzU1RTAwNTJDNzZDIC8qIEpTVmlydHVhbE1hY2hpbmVQcml2YXRlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlBN0NBM0FFODE3REE0MUFFMDA2NTM4QUYgLyogSlNXZWFrTWFw
LmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzQ4MkU5MzExNkE3Q0FEMDAzQjA3MTIgLyogSlNXZWFr
T2JqZWN0TWFwUmVmSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAorCQkJCUZFOTEyQjUxMjUzMTFB
RDEwMEZBQkRERiAvKiBBYnN0cmFjdFNsb3RWaXNpdG9ySW5saW5lcy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQTc0ODJCOTMxMTY3MTE0NzAwM0IwNzEyIC8qIEpTV2Vha09iamVjdE1hcFJlZlByaXZh
dGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTUzOUJGQkIwMjJBRDNDREMwMDIzRjRDMCAvKiBKU1dl
YWtPYmplY3RSZWYuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMEIyODZCMUVCOEU2Q0YwMDBFQjVE
MiAvKiBKU1dlYWtQcml2YXRlLmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9TY3JpcHRzL3drYnVpbHRpbnMvYnVpbHRpbnNfZ2VuZXJhdGVfaW50ZXJuYWxzX3dy
YXBwZXJfaGVhZGVyLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3Jp
cHRzL3drYnVpbHRpbnMvYnVpbHRpbnNfZ2VuZXJhdGVfaW50ZXJuYWxzX3dyYXBwZXJfaGVhZGVy
LnB5CShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy93
a2J1aWx0aW5zL2J1aWx0aW5zX2dlbmVyYXRlX2ludGVybmFsc193cmFwcGVyX2hlYWRlci5weQko
d29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKICMhL3Vzci9iaW4vZW52IHB5dGhvbgogIwot
IyBDb3B5cmlnaHQgKGMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyBD
b3B5cmlnaHQgKGMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAj
CiAjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTkzLDcgKzkzLDcgQEAgY2xhc3MgQnVpbHRp
bnNJbnRlcm5hbHNXcmFwcGVySGVhZGVyR2VuZQogCiAgICAgZGVmIGdlbmVyYXRlX21ldGhvZHMo
c2VsZik6CiAgICAgICAgIHJldHVybiAiIiIKLSAgICB2b2lkIHZpc2l0KEpTQzo6U2xvdFZpc2l0
b3ImKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIHZpc2l0KFZpc2l0b3Im
KTsKICAgICB2b2lkIGluaXRpYWxpemUoSlNET01HbG9iYWxPYmplY3QmKTsKICIiIgogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy93a2J1aWx0aW5zL2J1aWx0aW5zX2dlbmVy
YXRlX2ludGVybmFsc193cmFwcGVyX2ltcGxlbWVudGF0aW9uLnB5Cj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL3drYnVpbHRpbnMvYnVpbHRpbnNfZ2VuZXJhdGVf
aW50ZXJuYWxzX3dyYXBwZXJfaW1wbGVtZW50YXRpb24ucHkJKHJldmlzaW9uIDI3MjgzMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL3drYnVpbHRpbnMvYnVpbHRpbnNfZ2VuZXJh
dGVfaW50ZXJuYWxzX3dyYXBwZXJfaW1wbGVtZW50YXRpb24ucHkJKHdvcmtpbmcgY29weSkKQEAg
LTEsNiArMSw2IEBACiAjIS91c3IvYmluL2VudiBweXRob24KICMKLSMgQ29weXJpZ2h0IChjKSAy
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgQ29weXJpZ2h0IChjKSAyMDE2
LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogIwogIyBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICMg
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0xMjAsMTMgKzEyMCwxNiBAQCBjbGFzcyBCdWlsdGluc0ludGVybmFsc1dy
YXBwZXJJbXBsZW1lbnRhCiAgICAgICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMpCiAKICAgICBk
ZWYgZ2VuZXJhdGVfdmlzaXRfbWV0aG9kKHNlbGYpOgotICAgICAgICBsaW5lcyA9IFsidm9pZCBK
U0J1aWx0aW5JbnRlcm5hbEZ1bmN0aW9uczo6dmlzaXQoSlNDOjpTbG90VmlzaXRvciYgdmlzaXRv
cikiLAorICAgICAgICBsaW5lcyA9IFsidGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4iLAorICAg
ICAgICAgICAgICAgICAidm9pZCBKU0J1aWx0aW5JbnRlcm5hbEZ1bmN0aW9uczo6dmlzaXQoVmlz
aXRvciYgdmlzaXRvcikiLAogICAgICAgICAgICAgICAgICAieyJdCiAgICAgICAgIGZvciBvYmpl
Y3QgaW4gc2VsZi5pbnRlcm5hbHM6CiAgICAgICAgICAgICB2aXNpdCA9ICIgICAgJXMudmlzaXQo
dmlzaXRvcik7IiAlIHNlbGYubWVtYmVyX25hbWUob2JqZWN0KQogICAgICAgICAgICAgbGluZXMu
YXBwZW5kKEJ1aWx0aW5zR2VuZXJhdG9yLndyYXBfd2l0aF9ndWFyZChvYmplY3QuYW5ub3RhdGlv
bnMuZ2V0KCdjb25kaXRpb25hbCcpLCB2aXNpdCkpCiAgICAgICAgIGxpbmVzLmFwcGVuZCgiICAg
IFVOVVNFRF9QQVJBTSh2aXNpdG9yKTsiKQogICAgICAgICBsaW5lcy5hcHBlbmQoIn1cbiIpCisg
ICAgICAgIGxpbmVzLmFwcGVuZCgidGVtcGxhdGUgdm9pZCBKU0J1aWx0aW5JbnRlcm5hbEZ1bmN0
aW9uczo6dmlzaXQoQWJzdHJhY3RTbG90VmlzaXRvciYpOyIpCisgICAgICAgIGxpbmVzLmFwcGVu
ZCgidGVtcGxhdGUgdm9pZCBKU0J1aWx0aW5JbnRlcm5hbEZ1bmN0aW9uczo6dmlzaXQoU2xvdFZp
c2l0b3ImKTtcbiIpCiAgICAgICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMpCiAKICAgICBkZWYg
X2dlbmVyYXRlX2luaXRpYWxpemVfc3RhdGljX2dsb2JhbHMoc2VsZik6CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvU2NyaXB0cy93a2J1aWx0aW5zL2J1aWx0aW5zX3RlbXBsYXRlcy5weQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy93a2J1aWx0aW5zL2J1
aWx0aW5zX3RlbXBsYXRlcy5weQkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL1NjcmlwdHMvd2tidWlsdGlucy9idWlsdGluc190ZW1wbGF0ZXMucHkJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNiArMSw2IEBACiAjIS91c3IvYmluL2VudiBweXRob24KICMKLSMgQ29weXJp
Z2h0IChjKSAyMDE0LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyBDb3B5
cmlnaHQgKGMpIDIwMTQtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAjIENv
cHlyaWdodCAoQykgMjAxNSBDYW5vbiBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAjCiAjIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dApAQCAtMTg4LDcgKzE4OCw3IEBAIHB1YmxpYzoKICAgICBleHBsaWNpdCAke29iamVj
dE5hbWV9QnVpbHRpbkZ1bmN0aW9ucyhKU0M6OlZNJiB2bSkgOiBtX3ZtKHZtKSB7IH0KIAogICAg
IHZvaWQgaW5pdChKU0M6OkpTR2xvYmFsT2JqZWN0Jik7Ci0gICAgdm9pZCB2aXNpdChKU0M6OlNs
b3RWaXNpdG9yJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCB2aXNpdChW
aXNpdG9yJik7CiAKIHB1YmxpYzoKICAgICBKU0M6OlZNJiBtX3ZtOwpAQCAtMjA3LDEwICsyMDcs
MTUgQEAgaW5saW5lIHZvaWQgJHtvYmplY3ROYW1lfUJ1aWx0aW5GdW5jdGlvbgogI3VuZGVmIEVY
UE9SVF9GVU5DVElPTgogfQogCi1pbmxpbmUgdm9pZCAke29iamVjdE5hbWV9QnVpbHRpbkZ1bmN0
aW9uczo6dmlzaXQoSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1l
IFZpc2l0b3I+CitpbmxpbmUgdm9pZCAke29iamVjdE5hbWV9QnVpbHRpbkZ1bmN0aW9uczo6dmlz
aXQoVmlzaXRvciYgdmlzaXRvcikKIHsKICNkZWZpbmUgVklTSVRfRlVOQ1RJT04obmFtZSkgdmlz
aXRvci5hcHBlbmQobV8jI25hbWUjI0Z1bmN0aW9uKTsKICAgICAke21hY3JvUHJlZml4fV9GT1JF
QUNIXyR7b2JqZWN0TWFjcm99X0JVSUxUSU5fRlVOQ1RJT05fTkFNRShWSVNJVF9GVU5DVElPTikK
ICN1bmRlZiBWSVNJVF9GVU5DVElPTgogfQorCit0ZW1wbGF0ZSB2b2lkICR7b2JqZWN0TmFtZX1C
dWlsdGluRnVuY3Rpb25zOjp2aXNpdChKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBs
YXRlIHZvaWQgJHtvYmplY3ROYW1lfUJ1aWx0aW5GdW5jdGlvbnM6OnZpc2l0KEpTQzo6U2xvdFZp
c2l0b3ImKTsKKwogIiIiKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Fj
Y2Vzc0Nhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9BY2Nlc3NDYXNlLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNzU3LDcgKzc1
Nyw3IEBAIGJvb2wgQWNjZXNzQ2FzZTo6dmlzaXRXZWFrKFZNJiB2bSkgY29uc3QKICAgICByZXR1
cm4gaXNWYWxpZDsKIH0KIAotYm9vbCBBY2Nlc3NDYXNlOjpwcm9wYWdhdGVUcmFuc2l0aW9ucyhT
bG90VmlzaXRvciYgdmlzaXRvcikgY29uc3QKK2Jvb2wgQWNjZXNzQ2FzZTo6cHJvcGFnYXRlVHJh
bnNpdGlvbnMoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikgY29uc3QKIHsKICAgICBib29s
IHJlc3VsdCA9IHRydWU7CiAKQEAgLTc3Miw3ICs3NzIsNyBAQCBib29sIEFjY2Vzc0Nhc2U6OnBy
b3BhZ2F0ZVRyYW5zaXRpb25zKFNsCiAgICAgc3dpdGNoIChtX3R5cGUpIHsKICAgICBjYXNlIFRy
YW5zaXRpb246CiAgICAgY2FzZSBEZWxldGU6Ci0gICAgICAgIGlmICh2aXNpdG9yLnZtKCkuaGVh
cC5pc01hcmtlZChtX3N0cnVjdHVyZS0+cHJldmlvdXNJRCgpKSkKKyAgICAgICAgaWYgKHZpc2l0
b3IuaXNNYXJrZWQobV9zdHJ1Y3R1cmUtPnByZXZpb3VzSUQoKSkpCiAgICAgICAgICAgICB2aXNp
dG9yLmFwcGVuZFVuYmFycmllcmVkKG1fc3RydWN0dXJlLmdldCgpKTsKICAgICAgICAgZWxzZQog
ICAgICAgICAgICAgcmVzdWx0ID0gZmFsc2U7CkBAIC03ODQsNyArNzg0LDcgQEAgYm9vbCBBY2Nl
c3NDYXNlOjpwcm9wYWdhdGVUcmFuc2l0aW9ucyhTbAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAK
LXZvaWQgQWNjZXNzQ2FzZTo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpIGNv
bnN0Cit2b2lkIEFjY2Vzc0Nhc2U6OnZpc2l0QWdncmVnYXRlKEFic3RyYWN0U2xvdFZpc2l0b3Im
IHZpc2l0b3IpIGNvbnN0CiB7CiAgICAgbV9pZGVudGlmaWVyLnZpc2l0QWdncmVnYXRlKHZpc2l0
b3IpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2Uu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2Fz
ZS5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
QWNjZXNzQ2FzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxNy0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjgwLDkgKzI4MCw5IEBAIHByaXZhdGU6
CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KICAgICB2b2lkIGZvckVhY2hEZXBlbmRl
bnRDZWxsKFZNJiwgY29uc3QgRnVuY3RvciYpIGNvbnN0OwogCi0gICAgdm9pZCB2aXNpdEFnZ3Jl
Z2F0ZShTbG90VmlzaXRvciYpIGNvbnN0OworICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoQWJzdHJh
Y3RTbG90VmlzaXRvciYpIGNvbnN0OwogICAgIGJvb2wgdmlzaXRXZWFrKFZNJikgY29uc3Q7Ci0g
ICAgYm9vbCBwcm9wYWdhdGVUcmFuc2l0aW9ucyhTbG90VmlzaXRvciYpIGNvbnN0OworICAgIGJv
b2wgcHJvcGFnYXRlVHJhbnNpdGlvbnMoQWJzdHJhY3RTbG90VmlzaXRvciYpIGNvbnN0OwogCiAg
ICAgLy8gRklYTUU6IFRoaXMgb25seSBleGlzdHMgYmVjYXVzZSBvZiBob3cgQWNjZXNzQ2FzZSBw
dXRzIHBvc3QtZ2VuZXJhdGlvbiB0aGluZ3MgaW50byBpdHNlbGYuCiAgICAgLy8gaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NjQ1NgpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0J5VmFsSW5mby5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5VmFsSW5mby5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeVZhbEluZm8uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAtMjAyMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTMyLDcgKzMyLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICNpZiBFTkFCTEUoSklUKQogCi12
b2lkIEJ5VmFsSW5mbzo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2b2lk
IEJ5VmFsSW5mbzo6dmlzaXRBZ2dyZWdhdGUoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikK
IHsKICAgICBjYWNoZWRJZC52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKIH0KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeVZhbEluZm8uaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnlWYWxJbmZvLmgJKHJldmlzaW9uIDI3MjgzMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeVZhbEluZm8uaAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxOCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTI2MCw3ICsyNjAsNyBAQCBzdHJ1Y3QgQnlWYWxJbmZvIHsKICAgICAgICAgdGhp
cy0+c2VlbiA9IGZhbHNlOwogICAgIH0KIAotICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZp
c2l0b3ImKTsKKyAgICB2b2lkIHZpc2l0QWdncmVnYXRlKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsK
IAogICAgIENvZGVMb2NhdGlvbkp1bXA8SlNJbnRlcm5hbFB0clRhZz4gbm90SW5kZXhKdW1wOwog
ICAgIENvZGVMb2NhdGlvbkp1bXA8SlNJbnRlcm5hbFB0clRhZz4gYmFkVHlwZUp1bXA7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2hlY2tQcml2YXRlQnJhbmRTdGF0dXMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DaGVja1By
aXZhdGVCcmFuZFN0YXR1cy5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9DaGVja1ByaXZhdGVCcmFuZFN0YXR1cy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTIyOCwxMyArMjI4LDEzIEBAIENhY2hlYWJsZUlkZW50aWZpZXIgQ2hlY2tQcml2YXRl
QnJhbmRTdGEKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi12b2lkIENoZWNrUHJpdmF0ZUJyYW5k
U3RhdHVzOjp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgQ2hlY2tQ
cml2YXRlQnJhbmRTdGF0dXM6OnZpc2l0QWdncmVnYXRlKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZp
c2l0b3IpCiB7CiAgICAgZm9yIChDaGVja1ByaXZhdGVCcmFuZFZhcmlhbnQmIHZhcmlhbnQgOiBt
X3ZhcmlhbnRzKQogICAgICAgICB2YXJpYW50LnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOwogfQog
Ci12b2lkIENoZWNrUHJpdmF0ZUJyYW5kU3RhdHVzOjptYXJrSWZDaGVhcChTbG90VmlzaXRvciYg
dmlzaXRvcikKK3ZvaWQgQ2hlY2tQcml2YXRlQnJhbmRTdGF0dXM6Om1hcmtJZkNoZWFwKEFic3Ry
YWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgZm9yIChDaGVja1ByaXZhdGVCcmFuZFZh
cmlhbnQmIHZhcmlhbnQgOiBtX3ZhcmlhbnRzKQogICAgICAgICB2YXJpYW50Lm1hcmtJZkNoZWFw
KHZpc2l0b3IpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NoZWNrUHJp
dmF0ZUJyYW5kU3RhdHVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0NoZWNrUHJpdmF0ZUJyYW5kU3RhdHVzLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DaGVja1ByaXZhdGVCcmFuZFN0YXR1cy5oCSh3
b3JraW5nIGNvcHkpCkBAIC04Miw4ICs4Miw4IEBAIHB1YmxpYzoKICAgICAvLyBBdHRlbXB0cyB0
byByZWR1Y2UgdGhlIHNldCBvZiB2YXJpYW50cyB0byBmaXQgdGhlIGdpdmVuIHN0cnVjdHVyZSBz
ZXQuIFRoaXMgbWF5IGJlIGFwcHJveGltYXRlLgogICAgIHZvaWQgZmlsdGVyKGNvbnN0IFN0cnVj
dHVyZVNldCYpOwogCi0gICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYpOwotICAg
IHZvaWQgbWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImKTsKKyAgICB2b2lkIHZpc2l0QWdncmVnYXRl
KEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKKyAgICB2b2lkIG1hcmtJZkNoZWFwKEFic3RyYWN0U2xv
dFZpc2l0b3ImKTsKICAgICBib29sIGZpbmFsaXplKFZNJik7CiAKICAgICBib29sIGFwcGVuZFZh
cmlhbnQoY29uc3QgQ2hlY2tQcml2YXRlQnJhbmRWYXJpYW50Jik7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2hlY2tQcml2YXRlQnJhbmRWYXJpYW50LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2hlY2tQcml2YXRlQnJhbmRW
YXJpYW50LmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0NoZWNrUHJpdmF0ZUJyYW5kVmFyaWFudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUx
LDcgKzUxLDcgQEAgYm9vbCBDaGVja1ByaXZhdGVCcmFuZFZhcmlhbnQ6OmF0dGVtcHRUbwogICAg
IHJldHVybiB0cnVlOwogfQogCi12b2lkIENoZWNrUHJpdmF0ZUJyYW5kVmFyaWFudDo6bWFya0lm
Q2hlYXAoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIENoZWNrUHJpdmF0ZUJyYW5kVmFyaWFu
dDo6bWFya0lmQ2hlYXAoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBtX3N0
cnVjdHVyZVNldC5tYXJrSWZDaGVhcCh2aXNpdG9yKTsKIH0KQEAgLTYzLDcgKzYzLDcgQEAgYm9v
bCBDaGVja1ByaXZhdGVCcmFuZFZhcmlhbnQ6OmZpbmFsaXplKAogICAgIHJldHVybiB0cnVlOwog
fQogCi12b2lkIENoZWNrUHJpdmF0ZUJyYW5kVmFyaWFudDo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZp
c2l0b3ImIHZpc2l0b3IpCit2b2lkIENoZWNrUHJpdmF0ZUJyYW5kVmFyaWFudDo6dmlzaXRBZ2dy
ZWdhdGUoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBtX2lkZW50aWZpZXIu
dmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ2hlY2tQcml2YXRlQnJhbmRWYXJpYW50LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NoZWNrUHJpdmF0ZUJyYW5kVmFyaWFudC5oCShyZXZp
c2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2hlY2tQcml2
YXRlQnJhbmRWYXJpYW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAKIAogbmFt
ZXNwYWNlIEpTQyB7CiAKK2NsYXNzIEFic3RyYWN0U2xvdFZpc2l0b3I7CiBjbGFzcyBDaGVja1By
aXZhdGVCcmFuZFN0YXR1czsKIAogY2xhc3MgQ2hlY2tQcml2YXRlQnJhbmRWYXJpYW50IHsKQEAg
LTQ2LDggKzQ3LDggQEAgcHVibGljOgogCiAgICAgYm9vbCBhdHRlbXB0VG9NZXJnZShjb25zdCBD
aGVja1ByaXZhdGVCcmFuZFZhcmlhbnQmIG90aGVyKTsKIAotICAgIHZvaWQgdmlzaXRBZ2dyZWdh
dGUoU2xvdFZpc2l0b3ImKTsKLSAgICB2b2lkIG1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJik7Cisg
ICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShBYnN0cmFjdFNsb3RWaXNpdG9yJik7CisgICAgdm9pZCBt
YXJrSWZDaGVhcChBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAgICAgYm9vbCBmaW5hbGl6ZShWTSYp
OwogCiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkocmV2aXNpb24gMjcyODMwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEwMDEsNyArMTAwMSw4IEBAIHNpemVfdCBDb2RlQmxvY2s6OmVzdGltYXRlZFNp
emUoSlNDZWxsKiAKICAgICByZXR1cm4gQmFzZTo6ZXN0aW1hdGVkU2l6ZShjZWxsLCB2bSkgKyBl
eHRyYU1lbW9yeUFsbG9jYXRlZDsKIH0KIAotdm9pZCBDb2RlQmxvY2s6OnZpc2l0Q2hpbGRyZW4o
SlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZp
c2l0b3I+Cit2b2lkIENvZGVCbG9jazo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBW
aXNpdG9yJiB2aXNpdG9yKQogewogICAgIENvZGVCbG9jayogdGhpc09iamVjdCA9IGpzQ2FzdDxD
b2RlQmxvY2sqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmpl
Y3QsIGluZm8oKSk7CkBAIC0xMDEwLDkgKzEwMTEsMTQgQEAgdm9pZCBDb2RlQmxvY2s6OnZpc2l0
Q2hpbGRyZW4oSlNDZWxsKiBjZQogICAgIHRoaXNPYmplY3QtPnZpc2l0Q2hpbGRyZW4odmlzaXRv
cik7CiB9CiAKLXZvaWQgQ29kZUJsb2NrOjp2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNp
dG9yKQorREVGSU5FX1ZJU0lUX0NISUxEUkVOKENvZGVCbG9jayk7CisKK3RlbXBsYXRlPHR5cGVu
YW1lIFZpc2l0b3I+Cit2b2lkIENvZGVCbG9jazo6dmlzaXRDaGlsZHJlbihWaXNpdG9yJiB2aXNp
dG9yKQogewogICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9sb2NrKTsKKworICAgIG1f
dmlzaXRDaGlsZHJlblNraXBwZWREdWVUb09sZEFnZSA9IGZhbHNlOwogICAgIGlmIChDb2RlQmxv
Y2sqIG90aGVyQmxvY2sgPSBzcGVjaWFsT1NSRW50cnlCbG9ja09yTnVsbCgpKQogICAgICAgICB2
aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKG90aGVyQmxvY2spOwogCkBAIC0xMDI5LDEzICsxMDM1
LDIxIEBAIHZvaWQgQ29kZUJsb2NrOjp2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG8KICAgICBWTTo6
U3BhY2VBbmRTZXQ6OnNldEZvcigqc3Vic3BhY2UoKSkuYWRkKHRoaXMpOwogfQogCi1ib29sIENv
ZGVCbG9jazo6c2hvdWxkVmlzaXRTdHJvbmdseShjb25zdCBDb25jdXJyZW50SlNMb2NrZXImIGxv
Y2tlcikKK2Jvb2wgQ29kZUJsb2NrOjpzaG91bGRWaXNpdFN0cm9uZ2x5KGNvbnN0IENvbmN1cnJl
bnRKU0xvY2tlciYgbG9ja2VyLCBBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAg
IGlmIChPcHRpb25zOjpmb3JjZUNvZGVCbG9ja0xpdmVuZXNzKCkpCiAgICAgICAgIHJldHVybiB0
cnVlOwogCi0gICAgaWYgKHNob3VsZEpldHRpc29uRHVlVG9PbGRBZ2UobG9ja2VyKSkKKyAgICBp
ZiAoc2hvdWxkSmV0dGlzb25EdWVUb09sZEFnZShsb2NrZXIsIHZpc2l0b3IpKSB7CisgICAgICAg
IGlmIChPcHRpb25zOjp2ZXJpZnlHQygpKQorICAgICAgICAgICAgbV92aXNpdENoaWxkcmVuU2tp
cHBlZER1ZVRvT2xkQWdlID0gdHJ1ZTsKICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKwor
ICAgIGlmIChtX3Zpc2l0Q2hpbGRyZW5Ta2lwcGVkRHVlVG9PbGRBZ2UpIHsKKyAgICAgICAgQVNT
RVJUKE9wdGlvbnM6OnZlcmlmeUdDKCkpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQog
CiAgICAgLy8gSW50ZXJwcmV0ZXIgYW5kIEJhc2VsaW5lIEpJVCBDb2RlQmxvY2tzIGRvbid0IG5l
ZWQgdG8gYmUgamV0dGlzb25lZCB3aGVuCiAgICAgLy8gdGhlaXIgd2VhayByZWZlcmVuY2VzIGdv
IHN0YWxlLiBTbyBpZiBhIGJhc2xpbmUgSklUIENvZGVCbG9jayBnZXRzCkBAIC0xMDg2LDkgKzEx
MDAsOSBAQCBzdGF0aWMgU2Vjb25kcyB0aW1lVG9MaXZlKEpJVFR5cGUgaml0VHlwCiAgICAgfQog
fQogCi1ib29sIENvZGVCbG9jazo6c2hvdWxkSmV0dGlzb25EdWVUb09sZEFnZShjb25zdCBDb25j
dXJyZW50SlNMb2NrZXImKQorYm9vbCBDb2RlQmxvY2s6OnNob3VsZEpldHRpc29uRHVlVG9PbGRB
Z2UoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRv
cikKIHsKLSAgICBpZiAobV92bS0+aGVhcC5pc01hcmtlZCh0aGlzKSkKKyAgICBpZiAodmlzaXRv
ci5pc01hcmtlZCh0aGlzKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKFVOTElL
RUxZKE9wdGlvbnM6OmZvcmNlQ29kZUJsb2NrVG9KZXR0aXNvbkR1ZVRvT2xkQWdlKCkpKQpAQCAt
MTEwMSwxMiArMTExNSwxMiBAQCBib29sIENvZGVCbG9jazo6c2hvdWxkSmV0dGlzb25EdWVUb09s
ZEFnCiB9CiAKICNpZiBFTkFCTEUoREZHX0pJVCkKLXN0YXRpYyBib29sIHNob3VsZE1hcmtUcmFu
c2l0aW9uKFZNJiB2bSwgREZHOjpXZWFrUmVmZXJlbmNlVHJhbnNpdGlvbiYgdHJhbnNpdGlvbikK
K3N0YXRpYyBpbmxpbmUgYm9vbCBzaG91bGRNYXJrVHJhbnNpdGlvbihBYnN0cmFjdFNsb3RWaXNp
dG9yJiB2aXNpdG9yLCBERkc6OldlYWtSZWZlcmVuY2VUcmFuc2l0aW9uJiB0cmFuc2l0aW9uKQog
ewotICAgIGlmICh0cmFuc2l0aW9uLm1fY29kZU9yaWdpbiAmJiAhdm0uaGVhcC5pc01hcmtlZCh0
cmFuc2l0aW9uLm1fY29kZU9yaWdpbi5nZXQoKSkpCisgICAgaWYgKHRyYW5zaXRpb24ubV9jb2Rl
T3JpZ2luICYmICF2aXNpdG9yLmlzTWFya2VkKHRyYW5zaXRpb24ubV9jb2RlT3JpZ2luLmdldCgp
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAotICAgIGlmICghdm0uaGVhcC5pc01hcmtl
ZCh0cmFuc2l0aW9uLm1fZnJvbS5nZXQoKSkpCisgICAgaWYgKCF2aXNpdG9yLmlzTWFya2VkKHRy
YW5zaXRpb24ubV9mcm9tLmdldCgpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAogICAg
IHJldHVybiB0cnVlOwpAQCAtMTEyMiw4ICsxMTM2LDkgQEAgQnl0ZWNvZGVJbmRleCBDb2RlQmxv
Y2s6OmJ5dGVjb2RlSW5kZXhGbwogfQogI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQogCi12b2lk
IENvZGVCbG9jazo6cHJvcGFnYXRlVHJhbnNpdGlvbnMoY29uc3QgQ29uY3VycmVudEpTTG9ja2Vy
JiwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIENvZGVCbG9jazo6cHJvcGFnYXRlVHJhbnNp
dGlvbnMoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgQWJzdHJhY3RTbG90VmlzaXRvciYgdmlz
aXRvcikKIHsKKyAgICBBYnN0cmFjdFNsb3RWaXNpdG9yOjpTdXBwcmVzc0dDVmVyaWZpZXJTY29w
ZSBzdXBwcmVzc1Njb3BlKHZpc2l0b3IpOwogICAgIFZNJiB2bSA9ICptX3ZtOwogCiAgICAgaWYg
KGppdFR5cGUoKSA9PSBKSVRUeXBlOjpJbnRlcnByZXRlclRodW5rKSB7CkBAIC0xMTMzLDggKzEx
NDgsOSBAQCB2b2lkIENvZGVCbG9jazo6cHJvcGFnYXRlVHJhbnNpdGlvbnMoY29uCiAgICAgICAg
ICAgICAgICAgU3RydWN0dXJlSUQgbmV3U3RydWN0dXJlSUQgPSBtZXRhZGF0YS5tX25ld1N0cnVj
dHVyZUlEOwogICAgICAgICAgICAgICAgIGlmICghb2xkU3RydWN0dXJlSUQgfHwgIW5ld1N0cnVj
dHVyZUlEKQogICAgICAgICAgICAgICAgICAgICByZXR1cm47CisKICAgICAgICAgICAgICAgICBT
dHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSA9IHZtLmhlYXAuc3RydWN0dXJlSURUYWJsZSgpLmdldChv
bGRTdHJ1Y3R1cmVJRCk7Ci0gICAgICAgICAgICAgICAgaWYgKHZtLmhlYXAuaXNNYXJrZWQob2xk
U3RydWN0dXJlKSkgeworICAgICAgICAgICAgICAgIGlmICh2aXNpdG9yLmlzTWFya2VkKG9sZFN0
cnVjdHVyZSkpIHsKICAgICAgICAgICAgICAgICAgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUg
PSB2bS5oZWFwLnN0cnVjdHVyZUlEVGFibGUoKS5nZXQobmV3U3RydWN0dXJlSUQpOwogICAgICAg
ICAgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKG5ld1N0cnVjdHVyZSk7CiAg
ICAgICAgICAgICAgICAgfQpAQCAtMTE0OCwxMSArMTE2NCwxMSBAQCB2b2lkIENvZGVCbG9jazo6
cHJvcGFnYXRlVHJhbnNpdGlvbnMoY29uCiAKICAgICAgICAgICAgICAgICBKU0NlbGwqIHByb3Bl
cnR5ID0gbWV0YWRhdGEubV9wcm9wZXJ0eS5nZXQoKTsKICAgICAgICAgICAgICAgICBBU1NFUlQo
cHJvcGVydHkpOwotICAgICAgICAgICAgICAgIGlmICghdm0uaGVhcC5pc01hcmtlZChwcm9wZXJ0
eSkpCisgICAgICAgICAgICAgICAgaWYgKCF2aXNpdG9yLmlzTWFya2VkKHByb3BlcnR5KSkKICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgICAgICAgICAgU3RydWN0dXJlKiBv
bGRTdHJ1Y3R1cmUgPSB2bS5oZWFwLnN0cnVjdHVyZUlEVGFibGUoKS5nZXQob2xkU3RydWN0dXJl
SUQpOwotICAgICAgICAgICAgICAgIGlmICh2bS5oZWFwLmlzTWFya2VkKG9sZFN0cnVjdHVyZSkp
IHsKKyAgICAgICAgICAgICAgICBpZiAodmlzaXRvci5pc01hcmtlZChvbGRTdHJ1Y3R1cmUpKSB7
CiAgICAgICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0gdm0uaGVhcC5z
dHJ1Y3R1cmVJRFRhYmxlKCkuZ2V0KG5ld1N0cnVjdHVyZUlEKTsKICAgICAgICAgICAgICAgICAg
ICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZChuZXdTdHJ1Y3R1cmUpOwogICAgICAgICAgICAg
ICAgIH0KQEAgLTExNzAsNyArMTE4Niw3IEBAIHZvaWQgQ29kZUJsb2NrOjpwcm9wYWdhdGVUcmFu
c2l0aW9ucyhjb24KICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgICAgICAg
ICAgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUgPSB2bS5oZWFwLnN0cnVjdHVyZUlEVGFibGUoKS5n
ZXQob2xkU3RydWN0dXJlSUQpOwotICAgICAgICAgICAgICAgIGlmICh2bS5oZWFwLmlzTWFya2Vk
KG9sZFN0cnVjdHVyZSkpIHsKKyAgICAgICAgICAgICAgICBpZiAodmlzaXRvci5pc01hcmtlZChv
bGRTdHJ1Y3R1cmUpKSB7CiAgICAgICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogbmV3U3RydWN0
dXJlID0gdm0uaGVhcC5zdHJ1Y3R1cmVJRFRhYmxlKCkuZ2V0KG5ld1N0cnVjdHVyZUlEKTsKICAg
ICAgICAgICAgICAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZChuZXdTdHJ1Y3R1cmUp
OwogICAgICAgICAgICAgICAgIH0KQEAgLTExOTcsNyArMTIxMyw3IEBAIHZvaWQgQ29kZUJsb2Nr
Ojpwcm9wYWdhdGVUcmFuc2l0aW9ucyhjb24KICAgICAgICAgICAgIHZtLmdldFN0cnVjdHVyZShz
dHJ1Y3R1cmVJRCktPm1hcmtJZkNoZWFwKHZpc2l0b3IpOwogCiAgICAgICAgIGZvciAoYXV0byYg
dHJhbnNpdGlvbiA6IGRmZ0NvbW1vbi0+dHJhbnNpdGlvbnMpIHsKLSAgICAgICAgICAgIGlmIChz
aG91bGRNYXJrVHJhbnNpdGlvbih2bSwgdHJhbnNpdGlvbikpIHsKKyAgICAgICAgICAgIGlmIChz
aG91bGRNYXJrVHJhbnNpdGlvbih2aXNpdG9yLCB0cmFuc2l0aW9uKSkgewogICAgICAgICAgICAg
ICAgIC8vIElmIHRoZSBmb2xsb3dpbmcgdGhyZWUgdGhpbmdzIGFyZSBsaXZlLCB0aGVuIHRoZSB0
YXJnZXQgb2YgdGhlCiAgICAgICAgICAgICAgICAgLy8gdHJhbnNpdGlvbiBpcyBhbHNvIGxpdmU6
CiAgICAgICAgICAgICAgICAgLy8KQEAgLTEyMjQsMTMgKzEyNDAsMTMgQEAgdm9pZCBDb2RlQmxv
Y2s6OnByb3BhZ2F0ZVRyYW5zaXRpb25zKGNvbgogI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQog
fQogCi12b2lkIENvZGVCbG9jazo6ZGV0ZXJtaW5lTGl2ZW5lc3MoY29uc3QgQ29uY3VycmVudEpT
TG9ja2VyJiwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIENvZGVCbG9jazo6ZGV0ZXJtaW5l
TGl2ZW5lc3MoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgQWJzdHJhY3RTbG90VmlzaXRvciYg
dmlzaXRvcikKIHsKICAgICBVTlVTRURfUEFSQU0odmlzaXRvcik7CiAgICAgCiAjaWYgRU5BQkxF
KERGR19KSVQpCiAgICAgVk0mIHZtID0gKm1fdm07Ci0gICAgaWYgKHZtLmhlYXAuaXNNYXJrZWQo
dGhpcykpCisgICAgaWYgKHZpc2l0b3IuaXNNYXJrZWQodGhpcykpCiAgICAgICAgIHJldHVybjsK
ICAgICAKICAgICAvLyBJbiByYXJlIGFuZCB3ZWlyZCBjYXNlcywgdGhpcyBjb3VsZCBiZSBjYWxs
ZWQgb24gYSBiYXNlbGluZSBDb2RlQmxvY2suIE9uZSB0aGF0IEkgZm91bmQgd2FzCkBAIC0xMjQ3
LDcgKzEyNjMsNyBAQCB2b2lkIENvZGVCbG9jazo6ZGV0ZXJtaW5lTGl2ZW5lc3MoY29uc3QgCiAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRmZ0NvbW1vbi0+d2Vha1JlZmVyZW5jZXMuc2l6
ZSgpOyArK2kpIHsKICAgICAgICAgSlNDZWxsKiByZWZlcmVuY2UgPSBkZmdDb21tb24tPndlYWtS
ZWZlcmVuY2VzW2ldLmdldCgpOwogICAgICAgICBBU1NFUlQoIWpzRHluYW1pY0Nhc3Q8Q29kZUJs
b2NrKj4odm0sIHJlZmVyZW5jZSkpOwotICAgICAgICBpZiAoIXZtLmhlYXAuaXNNYXJrZWQocmVm
ZXJlbmNlKSkgeworICAgICAgICBpZiAoIXZpc2l0b3IuaXNNYXJrZWQocmVmZXJlbmNlKSkgewog
ICAgICAgICAgICAgYWxsQXJlTGl2ZVNvRmFyID0gZmFsc2U7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQpAQCAtMTI1NSw3ICsxMjcxLDcgQEAgdm9pZCBDb2RlQmxvY2s6OmRldGVybWlu
ZUxpdmVuZXNzKGNvbnN0IAogICAgIGlmIChhbGxBcmVMaXZlU29GYXIpIHsKICAgICAgICAgZm9y
IChTdHJ1Y3R1cmVJRCBzdHJ1Y3R1cmVJRCA6IGRmZ0NvbW1vbi0+d2Vha1N0cnVjdHVyZVJlZmVy
ZW5jZXMpIHsKICAgICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gdm0uZ2V0U3RydWN0
dXJlKHN0cnVjdHVyZUlEKTsKLSAgICAgICAgICAgIGlmICghdm0uaGVhcC5pc01hcmtlZChzdHJ1
Y3R1cmUpKSB7CisgICAgICAgICAgICBpZiAoIXZpc2l0b3IuaXNNYXJrZWQoc3RydWN0dXJlKSkg
ewogICAgICAgICAgICAgICAgIGFsbEFyZUxpdmVTb0ZhciA9IGZhbHNlOwogICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgfQpAQCAtMTYxNiw2ICsxNjMyLDcgQEAgdm9pZCBDb2Rl
QmxvY2s6OmZpbmFsaXplVW5jb25kaXRpb25hbGx5KAogICAgIHVwZGF0ZUFjdGl2aXR5KCk7CiAK
ICAgICBWTTo6U3BhY2VBbmRTZXQ6OnNldEZvcigqc3Vic3BhY2UoKSkucmVtb3ZlKHRoaXMpOwor
ICAgIG1fdmlzaXRDaGlsZHJlblNraXBwZWREdWVUb09sZEFnZSA9IGZhbHNlOwogfQogCiB2b2lk
IENvZGVCbG9jazo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCkBAIC0xODA4LDcgKzE4MjUsOCBAQCB2
b2lkIENvZGVCbG9jazo6cmVzZXRKSVREYXRhKCkKIH0KICNlbmRpZgogCi12b2lkIENvZGVCbG9j
azo6dmlzaXRPU1JFeGl0VGFyZ2V0cyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBTbG90Vmlz
aXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIENvZGVCbG9j
azo6dmlzaXRPU1JFeGl0VGFyZ2V0cyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBWaXNpdG9y
JiB2aXNpdG9yKQogewogICAgIC8vIFdlIHN0cm9uZ2x5IHZpc2l0IE9TUiBleGl0cyB0YXJnZXRz
IGJlY2F1c2Ugd2UgZG9uJ3Qgd2FudCB0byBkZWFsIHdpdGgKICAgICAvLyB0aGUgY29tcGxleGl0
eSBvZiBnZW5lcmF0aW5nIGFuIGV4aXQgdGFyZ2V0IENvZGVCbG9jayBvbiBkZW1hbmQgYW5kCkBA
IC0xODI4LDcgKzE4NDYsOCBAQCB2b2lkIENvZGVCbG9jazo6dmlzaXRPU1JFeGl0VGFyZ2V0cyhj
b25zCiAjZW5kaWYKIH0KIAotdm9pZCBDb2RlQmxvY2s6OnN0cm9uZ2x5VmlzaXRTdHJvbmdSZWZl
cmVuY2VzKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYgbG9ja2VyLCBTbG90VmlzaXRvciYgdmlz
aXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIENvZGVCbG9jazo6c3Ryb25n
bHlWaXNpdFN0cm9uZ1JlZmVyZW5jZXMoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiBsb2NrZXIs
IFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGxvY2tlcik7CiAgICAgCkBA
IC0xODY0LDcgKzE4ODMsOCBAQCB2b2lkIENvZGVCbG9jazo6c3Ryb25nbHlWaXNpdFN0cm9uZ1Jl
ZmVyCiAjZW5kaWYKIH0KIAotdm9pZCBDb2RlQmxvY2s6OnN0cm9uZ2x5VmlzaXRXZWFrUmVmZXJl
bmNlcyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3Rl
bXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIENvZGVCbG9jazo6c3Ryb25nbHlWaXNpdFdl
YWtSZWZlcmVuY2VzKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIFZpc2l0b3ImIHZpc2l0b3Ip
CiB7CiAgICAgVU5VU0VEX1BBUkFNKHZpc2l0b3IpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMjAgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA4IENhbWVyb24gWndhcmlj
aCA8Y3d6d2FyaWNoQHV3YXRlcmxvby5jYT4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTIwMSwxMCAr
MjAxLDEwIEBAIHB1YmxpYzoKICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTIzNjc3CiAgICAgQ29kZUJsb2NrKiBiYXNlbGluZVZlcnNpb24oKTsKIAorICAg
IERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CisKICAgICBzdGF0aWMgc2l6ZV90IGVzdGltYXRlZFNp
emUoSlNDZWxsKiwgVk0mKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCos
IFNsb3RWaXNpdG9yJik7CiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKLSAgICB2
b2lkIHZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKICAgICB2b2lkIGZpbmFsaXplVW5jb25k
aXRpb25hbGx5KFZNJik7CiAKICAgICB2b2lkIG5vdGlmeUxleGljYWxCaW5kaW5nVXBkYXRlKCk7
CkBAIC05NDMsNiArOTQzLDggQEAgcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgQ29kZUJsb2Nr
U2V0OwogICAgIGZyaWVuZCBjbGFzcyBFeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlOwogCisgICAg
dGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gQUxXQVlTX0lOTElORSB2b2lkIHZpc2l0Q2hpbGRy
ZW4oVmlzaXRvciYpOworCiAgICAgQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzJiBsaXZlbmVzc0Fu
YWx5c2lzU2xvdygpOwogICAgIAogICAgIENvZGVCbG9jayogc3BlY2lhbE9TUkVudHJ5QmxvY2tP
ck51bGwoKTsKQEAgLTk2MywxNiArOTY1LDE2IEBAIHByaXZhdGU6CiAgICAgICAgIG1fY29uc3Rh
bnRSZWdpc3RlcnNbcmVnLnRvQ29uc3RhbnRJbmRleCgpXS5zZXQoKm1fdm0sIHRoaXMsIHZhbHVl
KTsKICAgICB9CiAKLSAgICBib29sIHNob3VsZFZpc2l0U3Ryb25nbHkoY29uc3QgQ29uY3VycmVu
dEpTTG9ja2VyJik7CisgICAgYm9vbCBzaG91bGRWaXNpdFN0cm9uZ2x5KGNvbnN0IENvbmN1cnJl
bnRKU0xvY2tlciYsIEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKICAgICBib29sIHNob3VsZEpldHRp
c29uRHVlVG9XZWFrUmVmZXJlbmNlKFZNJik7Ci0gICAgYm9vbCBzaG91bGRKZXR0aXNvbkR1ZVRv
T2xkQWdlKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYpOworICAgIGJvb2wgc2hvdWxkSmV0dGlz
b25EdWVUb09sZEFnZShjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBBYnN0cmFjdFNsb3RWaXNp
dG9yJik7CiAgICAgCi0gICAgdm9pZCBwcm9wYWdhdGVUcmFuc2l0aW9ucyhjb25zdCBDb25jdXJy
ZW50SlNMb2NrZXImLCBTbG90VmlzaXRvciYpOwotICAgIHZvaWQgZGV0ZXJtaW5lTGl2ZW5lc3Mo
Y29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgU2xvdFZpc2l0b3ImKTsKKyAgICB2b2lkIHByb3Bh
Z2F0ZVRyYW5zaXRpb25zKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIEFic3RyYWN0U2xvdFZp
c2l0b3ImKTsKKyAgICB2b2lkIGRldGVybWluZUxpdmVuZXNzKGNvbnN0IENvbmN1cnJlbnRKU0xv
Y2tlciYsIEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKICAgICAgICAgCi0gICAgdm9pZCBzdHJvbmds
eVZpc2l0U3Ryb25nUmVmZXJlbmNlcyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBTbG90Vmlz
aXRvciYpOwotICAgIHZvaWQgc3Ryb25nbHlWaXNpdFdlYWtSZWZlcmVuY2VzKGNvbnN0IENvbmN1
cnJlbnRKU0xvY2tlciYsIFNsb3RWaXNpdG9yJik7Ci0gICAgdm9pZCB2aXNpdE9TUkV4aXRUYXJn
ZXRzKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIFNsb3RWaXNpdG9yJik7CisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCBzdHJvbmdseVZpc2l0U3Ryb25nUmVmZXJlbmNlcyhj
b25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBWaXNpdG9yJik7CisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgVmlzaXRvcj4gdm9pZCBzdHJvbmdseVZpc2l0V2Vha1JlZmVyZW5jZXMoY29uc3QgQ29uY3Vy
cmVudEpTTG9ja2VyJiwgVmlzaXRvciYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+
IHZvaWQgdmlzaXRPU1JFeGl0VGFyZ2V0cyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBWaXNp
dG9yJik7CiAKICAgICB1bnNpZ25lZCBudW1iZXJPZk5vbkFyZ3VtZW50VmFsdWVQcm9maWxlcygp
IHsgcmV0dXJuIG1fbnVtYmVyT2ZOb25Bcmd1bWVudFZhbHVlUHJvZmlsZXM7IH0KICAgICB1bnNp
Z25lZCB0b3RhbE51bWJlck9mVmFsdWVQcm9maWxlcygpIHsgcmV0dXJuIG51bWJlck9mQXJndW1l
bnRWYWx1ZVByb2ZpbGVzKCkgKyBudW1iZXJPZk5vbkFyZ3VtZW50VmFsdWVQcm9maWxlcygpOyB9
CkBAIC0xMDExLDYgKzEwMTMsNyBAQCBwcml2YXRlOgogICAgIHVuc2lnbmVkIG1fYnl0ZWNvZGVD
b3N0IHsgMCB9OwogICAgIFZpcnR1YWxSZWdpc3RlciBtX3Njb3BlUmVnaXN0ZXI7CiAgICAgbXV0
YWJsZSBDb2RlQmxvY2tIYXNoIG1faGFzaDsKKyAgICBib29sIG1fdmlzaXRDaGlsZHJlblNraXBw
ZWREdWVUb09sZEFnZSB7IGZhbHNlIH07CiAKICAgICBXcml0ZUJhcnJpZXI8VW5saW5rZWRDb2Rl
QmxvY2s+IG1fdW5saW5rZWRDb2RlOwogICAgIFdyaXRlQmFycmllcjxTY3JpcHRFeGVjdXRhYmxl
PiBtX293bmVyRXhlY3V0YWJsZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9EZWxldGVCeUlkVmFyaWFudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0RlbGV0ZUJ5SWRWYXJpYW50LmNwcAkocmV2aXNpb24gMjcyODMwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0RlbGV0ZUJ5SWRWYXJpYW50LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIwLTIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC04OCwxMiArODgsMTIgQEAgYm9vbCBEZWxldGVCeUlkVmFyaWFudDo6d3JpdGVz
U3RydWN0dXJlcwogICAgIHJldHVybiAhIW5ld1N0cnVjdHVyZSgpOwogfQogCi12b2lkIERlbGV0
ZUJ5SWRWYXJpYW50Ojp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQg
RGVsZXRlQnlJZFZhcmlhbnQ6OnZpc2l0QWdncmVnYXRlKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZp
c2l0b3IpCiB7CiAgICAgbV9pZGVudGlmaWVyLnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOwogfQog
Ci12b2lkIERlbGV0ZUJ5SWRWYXJpYW50OjptYXJrSWZDaGVhcChTbG90VmlzaXRvciYgdmlzaXRv
cikKK3ZvaWQgRGVsZXRlQnlJZFZhcmlhbnQ6Om1hcmtJZkNoZWFwKEFic3RyYWN0U2xvdFZpc2l0
b3ImIHZpc2l0b3IpCiB7CiAgICAgaWYgKG1fb2xkU3RydWN0dXJlKQogICAgICAgICBtX29sZFN0
cnVjdHVyZS0+bWFya0lmQ2hlYXAodmlzaXRvcik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvRGVsZXRlQnlJZFZhcmlhbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvRGVsZXRlQnlJZFZhcmlhbnQuaAkocmV2aXNpb24gMjcyODMw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0RlbGV0ZUJ5SWRWYXJpYW50LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDIw
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMC0y
MDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtNjEsOCArNjEsOCBAQCBwdWJsaWM6CiAKICAgICBib29sIGF0dGVtcHRU
b01lcmdlKGNvbnN0IERlbGV0ZUJ5SWRWYXJpYW50JiBvdGhlcik7CiAKLSAgICB2b2lkIHZpc2l0
QWdncmVnYXRlKFNsb3RWaXNpdG9yJik7Ci0gICAgdm9pZCBtYXJrSWZDaGVhcChTbG90VmlzaXRv
ciYpOworICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoQWJzdHJhY3RTbG90VmlzaXRvciYpOworICAg
IHZvaWQgbWFya0lmQ2hlYXAoQWJzdHJhY3RTbG90VmlzaXRvciYpOwogICAgIGJvb2wgZmluYWxp
emUoVk0mKTsKIAogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0RlbGV0ZUJ5U3RhdHVzLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRGVsZXRlQnlTdGF0dXMuY3BwCShy
ZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRGVsZXRl
QnlTdGF0dXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMjAtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI1NCwxMyArMjU0LDEzIEBAIENhY2hlYWJsZUlk
ZW50aWZpZXIgRGVsZXRlQnlTdGF0dXM6OnNpbmcKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi12
b2lkIERlbGV0ZUJ5U3RhdHVzOjp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYgdmlzaXRvcikK
K3ZvaWQgRGVsZXRlQnlTdGF0dXM6OnZpc2l0QWdncmVnYXRlKEFic3RyYWN0U2xvdFZpc2l0b3Im
IHZpc2l0b3IpCiB7CiAgICAgZm9yIChEZWxldGVCeUlkVmFyaWFudCYgdmFyaWFudCA6IG1fdmFy
aWFudHMpCiAgICAgICAgIHZhcmlhbnQudmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7CiB9CiAKLXZv
aWQgRGVsZXRlQnlTdGF0dXM6Om1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordm9p
ZCBEZWxldGVCeVN0YXR1czo6bWFya0lmQ2hlYXAoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRv
cikKIHsKICAgICBmb3IgKERlbGV0ZUJ5SWRWYXJpYW50JiB2YXJpYW50IDogbV92YXJpYW50cykK
ICAgICAgICAgdmFyaWFudC5tYXJrSWZDaGVhcCh2aXNpdG9yKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9EZWxldGVCeVN0YXR1cy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9EZWxldGVCeVN0YXR1cy5oCShyZXZpc2lvbiAyNzI4
MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRGVsZXRlQnlTdGF0dXMuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjAg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIwLTIw
MjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC04MSw4ICs4MSw4IEBAIHB1YmxpYzoKICAgICAvLyBBdHRlbXB0cyB0byBy
ZWR1Y2UgdGhlIHNldCBvZiB2YXJpYW50cyB0byBmaXQgdGhlIGdpdmVuIHN0cnVjdHVyZSBzZXQu
IFRoaXMgbWF5IGJlIGFwcHJveGltYXRlLgogICAgIHZvaWQgZmlsdGVyKGNvbnN0IFN0cnVjdHVy
ZVNldCYpOwogCi0gICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYpOwotICAgIHZv
aWQgbWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImKTsKKyAgICB2b2lkIHZpc2l0QWdncmVnYXRlKEFi
c3RyYWN0U2xvdFZpc2l0b3ImKTsKKyAgICB2b2lkIG1hcmtJZkNoZWFwKEFic3RyYWN0U2xvdFZp
c2l0b3ImKTsKICAgICBib29sIGZpbmFsaXplKFZNJik7CiAKICAgICBib29sIGFwcGVuZFZhcmlh
bnQoY29uc3QgRGVsZXRlQnlJZFZhcmlhbnQmKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9EaXJlY3RFdmFsQ29kZUNhY2hlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRGlyZWN0RXZhbENvZGVDYWNoZS5jcHAJKHJldmlzaW9u
IDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9EaXJlY3RFdmFsQ29k
ZUNhY2hlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00NSw3ICs0NSw4IEBAIHZvaWQgRGlyZWN0RXZhbENv
ZGVDYWNoZTo6Y2xlYXIoKQogICAgIG1fY2FjaGVNYXAuY2xlYXIoKTsKIH0KIAotdm9pZCBEaXJl
Y3RFdmFsQ29kZUNhY2hlOjp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYgdmlzaXRvcikKK3Rl
bXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIERpcmVjdEV2YWxDb2RlQ2FjaGU6OnZpc2l0
QWdncmVnYXRlKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9s
b2NrKTsKICAgICBFdmFsQ2FjaGVNYXA6Oml0ZXJhdG9yIGVuZCA9IG1fY2FjaGVNYXAuZW5kKCk7
CkBAIC01Myw1ICs1NCw3IEBAIHZvaWQgRGlyZWN0RXZhbENvZGVDYWNoZTo6dmlzaXRBZ2dyZWdh
dGUKICAgICAgICAgdmlzaXRvci5hcHBlbmQocHRyLT52YWx1ZSk7CiB9CiAKLX0gLy8gbmFtZXNw
YWNlIEpTQwordGVtcGxhdGUgdm9pZCBEaXJlY3RFdmFsQ29kZUNhY2hlOjp2aXNpdEFnZ3JlZ2F0
ZShBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIERpcmVjdEV2YWxDb2RlQ2Fj
aGU6OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJik7CiAKK30gLy8gbmFtZXNwYWNlIEpTQwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0RpcmVjdEV2YWxDb2RlQ2FjaGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRGlyZWN0RXZh
bENvZGVDYWNoZS5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvRGlyZWN0RXZhbENvZGVDYWNoZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtOTcsNyAr
OTcsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7
IHJldHVybiBtX2NhY2hlTWFwLmlzRW1wdHkoKTsgfQogCi0gICAgICAgIHZvaWQgdmlzaXRBZ2dy
ZWdhdGUoU2xvdFZpc2l0b3ImKTsKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4g
dm9pZCB2aXNpdEFnZ3JlZ2F0ZShWaXNpdG9yJik7CiAKICAgICAgICAgdm9pZCBjbGVhcigpOwog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhlY3V0YWJsZVRvQ29kZUJs
b2NrRWRnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0V4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE4
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOC0y
MDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtNTMsNyArNTMsOCBAQCB2b2lkIEV4ZWN1dGFibGVUb0NvZGVCbG9ja0Vk
Z2U6OmZpbmlzaENyCiAgICAgQVNTRVJUKCFpc0FjdGl2ZSgpKTsKIH0KIAotdm9pZCBFeGVjdXRh
YmxlVG9Db2RlQmxvY2tFZGdlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0
b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBFeGVjdXRhYmxl
VG9Db2RlQmxvY2tFZGdlOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3Im
IHZpc2l0b3IpCiB7CiAgICAgVk0mIHZtID0gdmlzaXRvci52bSgpOwogICAgIEV4ZWN1dGFibGVU
b0NvZGVCbG9ja0VkZ2UqIGVkZ2UgPSBqc0Nhc3Q8RXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZSo+
KGNlbGwpOwpAQCAtNjEsNyArNjIsNyBAQCB2b2lkIEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2U6
OnZpc2l0Q2hpCiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbihjZWxsLCB2aXNpdG9yKTsKIAogICAg
IENvZGVCbG9jayogY29kZUJsb2NrID0gZWRnZS0+bV9jb2RlQmxvY2suZ2V0KCk7Ci0gICAgCisK
ICAgICAvLyBJdCdzIHBvc3NpYmxlIGZvciBzb21lb25lIHRvIGhvbGQgYSBwb2ludGVyIHRvIHRo
ZSBlZGdlIGFmdGVyIHRoZSBlZGdlIGhhcyBjbGVhcmVkIGl0cyB3ZWFrCiAgICAgLy8gcmVmZXJl
bmNlIHRvIHRoZSBjb2RlQmxvY2suIEluIGEgY29uc2VydmF0aXZlIEdDIGxpa2Ugb3VycywgdGhh
dCBjb3VsZCBoYXBwZW4gYXQgcmFuZG9tIGZvcgogICAgIC8vIG5vIGdvb2QgcmVhc29uIGFuZCBp
dCdzIFRvdGFsbHkgT0sgKFRNKS4gU2VlIGZpbmFsaXplVW5jb25kaXRpb25hbGx5KCkgZm9yIHdo
ZXJlIHdlIGNsZWFyCkBAIC03NSwxMSArNzYsMTEgQEAgdm9pZCBFeGVjdXRhYmxlVG9Db2RlQmxv
Y2tFZGdlOjp2aXNpdENoaQogICAgIH0KICAgICAKICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9j
a2VyKGNvZGVCbG9jay0+bV9sb2NrKTsKLSAgICAKLSAgICBpZiAoY29kZUJsb2NrLT5zaG91bGRW
aXNpdFN0cm9uZ2x5KGxvY2tlcikpCisKKyAgICBpZiAoY29kZUJsb2NrLT5zaG91bGRWaXNpdFN0
cm9uZ2x5KGxvY2tlciwgdmlzaXRvcikpCiAgICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVy
ZWQoY29kZUJsb2NrKTsKICAgICAKLSAgICBpZiAoIXZtLmhlYXAuaXNNYXJrZWQoY29kZUJsb2Nr
KSkKKyAgICBpZiAoIXZpc2l0b3IuaXNNYXJrZWQoY29kZUJsb2NrKSkKICAgICAgICAgdm0uZXhl
Y3V0YWJsZVRvQ29kZUJsb2NrRWRnZXNXaXRoRmluYWxpemVycy5hZGQoZWRnZSk7CiAgICAgCiAg
ICAgaWYgKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChjb2RlQmxvY2stPmppdFR5cGUoKSkpIHsK
QEAgLTExNyw3ICsxMTgsOSBAQCB2b2lkIEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2U6OnZpc2l0
Q2hpCiAgICAgZWRnZS0+cnVuQ29uc3RyYWludChsb2NrZXIsIHZtLCB2aXNpdG9yKTsKIH0KIAot
dm9pZCBFeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzKEpT
Q2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCitERUZJTkVfVklTSVRfQ0hJTERSRU4o
RXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZSk7CisKK3ZvaWQgRXhlY3V0YWJsZVRvQ29kZUJsb2Nr
RWRnZTo6dmlzaXRPdXRwdXRDb25zdHJhaW50cyhKU0NlbGwqIGNlbGwsIEFic3RyYWN0U2xvdFZp
c2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgVk0mIHZtID0gdmlzaXRvci52bSgpOwogICAgIEV4ZWN1
dGFibGVUb0NvZGVCbG9ja0VkZ2UqIGVkZ2UgPSBqc0Nhc3Q8RXhlY3V0YWJsZVRvQ29kZUJsb2Nr
RWRnZSo+KGNlbGwpOwpAQCAtMTg2LDE0ICsxODksMTQgQEAgRXhlY3V0YWJsZVRvQ29kZUJsb2Nr
RWRnZTo6RXhlY3V0YWJsZVRvQwogewogfQogCi12b2lkIEV4ZWN1dGFibGVUb0NvZGVCbG9ja0Vk
Z2U6OnJ1bkNvbnN0cmFpbnQoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiBsb2NrZXIsIFZNJiB2
bSwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2U6
OnJ1bkNvbnN0cmFpbnQoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiBsb2NrZXIsIFZNJiB2bSwg
QWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9j
ayA9IG1fY29kZUJsb2NrLmdldCgpOwogICAgIAogICAgIGNvZGVCbG9jay0+cHJvcGFnYXRlVHJh
bnNpdGlvbnMobG9ja2VyLCB2aXNpdG9yKTsKICAgICBjb2RlQmxvY2stPmRldGVybWluZUxpdmVu
ZXNzKGxvY2tlciwgdmlzaXRvcik7Ci0gICAgCi0gICAgaWYgKHZtLmhlYXAuaXNNYXJrZWQoY29k
ZUJsb2NrKSkKKworICAgIGlmICh2aXNpdG9yLmlzTWFya2VkKGNvZGVCbG9jaykpCiAgICAgICAg
IHZtLmV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2VzV2l0aENvbnN0cmFpbnRzLnJlbW92ZSh0aGlz
KTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGFibGVU
b0NvZGVCbG9ja0VkZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZS5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
OC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxOC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtNTMsOSArNTMsOSBAQCBwdWJsaWM6CiAgICAgREVDTEFSRV9J
TkZPOwogCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2soKSBjb25zdCB7IHJldHVybiBtX2NvZGVC
bG9jay5nZXQoKTsgfQotICAgIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiwgU2xvdFZpc2l0b3ImKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdE91dHB1dENvbnN0cmFpbnRz
KEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwor
ICAgIHN0YXRpYyB2b2lkIHZpc2l0T3V0cHV0Q29uc3RyYWludHMoSlNDZWxsKiwgQWJzdHJhY3RT
bG90VmlzaXRvciYpOwogICAgIHZvaWQgZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoVk0mKTsKICAg
ICAKICAgICBzdGF0aWMgQ29kZUJsb2NrKiB1bndyYXAoRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRn
ZSogZWRnZSkKQEAgLTgxLDkgKzgxLDkgQEAgcHJpdmF0ZToKICAgICB2b2lkIGFjdGl2YXRlKCk7
CiAgICAgdm9pZCBkZWFjdGl2YXRlKCk7CiAgICAgYm9vbCBpc0FjdGl2ZSgpIGNvbnN0OwotICAg
IAotICAgIHZvaWQgcnVuQ29uc3RyYWludChjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBWTSYs
IFNsb3RWaXNpdG9yJik7Ci0gICAgCisKKyAgICB2b2lkIHJ1bkNvbnN0cmFpbnQoY29uc3QgQ29u
Y3VycmVudEpTTG9ja2VyJiwgVk0mLCBBYnN0cmFjdFNsb3RWaXNpdG9yJik7CisKICAgICBXcml0
ZUJhcnJpZXI8Q29kZUJsb2NrPiBtX2NvZGVCbG9jazsKIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkVmFyaWFudC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRWYXJpYW50LmNwcAkocmV2aXNpb24g
MjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRWYXJpYW50
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTQtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTQtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE1NiwxMiArMTU2LDEyIEBAIGJvb2wgR2V0QnlJZFZh
cmlhbnQ6OmF0dGVtcHRUb01lcmdlKGNvbnMKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBH
ZXRCeUlkVmFyaWFudDo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2b2lk
IEdldEJ5SWRWYXJpYW50Ojp2aXNpdEFnZ3JlZ2F0ZShBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNp
dG9yKQogewogICAgIG1faWRlbnRpZmllci52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKIH0KIAot
dm9pZCBHZXRCeUlkVmFyaWFudDo6bWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2
b2lkIEdldEJ5SWRWYXJpYW50OjptYXJrSWZDaGVhcChBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNp
dG9yKQogewogICAgIG1fc3RydWN0dXJlU2V0Lm1hcmtJZkNoZWFwKHZpc2l0b3IpOwogfQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRWYXJpYW50LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRWYXJpYW50LmgJ
KHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRC
eUlkVmFyaWFudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxNC0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNzcsOCArNzcsOCBAQCBwdWJsaWM6CiAK
ICAgICBib29sIGF0dGVtcHRUb01lcmdlKGNvbnN0IEdldEJ5SWRWYXJpYW50JiBvdGhlcik7CiAg
ICAgCi0gICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYpOwotICAgIHZvaWQgbWFy
a0lmQ2hlYXAoU2xvdFZpc2l0b3ImKTsKKyAgICB2b2lkIHZpc2l0QWdncmVnYXRlKEFic3RyYWN0
U2xvdFZpc2l0b3ImKTsKKyAgICB2b2lkIG1hcmtJZkNoZWFwKEFic3RyYWN0U2xvdFZpc2l0b3Im
KTsKICAgICBib29sIGZpbmFsaXplKFZNJik7CiAgICAgCiAgICAgdm9pZCBkdW1wKFByaW50U3Ry
ZWFtJikgY29uc3Q7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlT
dGF0dXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9H
ZXRCeVN0YXR1cy5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9HZXRCeVN0YXR1cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01MzAsNyArNTMw
LDcgQEAgdm9pZCBHZXRCeVN0YXR1czo6ZmlsdGVyKGNvbnN0IFN0cnVjdHVyZQogICAgICAgICBt
X3N0YXRlID0gTm9JbmZvcm1hdGlvbjsKIH0KIAotdm9pZCBHZXRCeVN0YXR1czo6dmlzaXRBZ2dy
ZWdhdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIEdldEJ5U3RhdHVzOjp2aXNpdEFnZ3Jl
Z2F0ZShBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGlmIChpc01vZHVsZU5h
bWVzcGFjZSgpKQogICAgICAgICBtX21vZHVsZU5hbWVzcGFjZURhdGEtPm1faWRlbnRpZmllci52
aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKQEAgLTUzOCw3ICs1MzgsNyBAQCB2b2lkIEdldEJ5U3Rh
dHVzOjp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzCiAgICAgICAgIHZhcmlhbnQudmlzaXRBZ2dyZWdh
dGUodmlzaXRvcik7CiB9CiAKLXZvaWQgR2V0QnlTdGF0dXM6Om1hcmtJZkNoZWFwKFNsb3RWaXNp
dG9yJiB2aXNpdG9yKQordm9pZCBHZXRCeVN0YXR1czo6bWFya0lmQ2hlYXAoQWJzdHJhY3RTbG90
VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBmb3IgKEdldEJ5SWRWYXJpYW50JiB2YXJpYW50IDog
bV92YXJpYW50cykKICAgICAgICAgdmFyaWFudC5tYXJrSWZDaGVhcCh2aXNpdG9yKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeVN0YXR1cy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeVN0YXR1cy5oCShyZXZpc2lv
biAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlTdGF0dXMu
aAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTItMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTItMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTExOCw4ICsxMTgsOCBAQCBwdWJsaWM6CiAgICAgSlNNb2R1
bGVFbnZpcm9ubWVudCogbW9kdWxlRW52aXJvbm1lbnQoKSBjb25zdCB7IHJldHVybiBtX21vZHVs
ZU5hbWVzcGFjZURhdGEtPm1fbW9kdWxlRW52aXJvbm1lbnQ7IH0KICAgICBTY29wZU9mZnNldCBz
Y29wZU9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fbW9kdWxlTmFtZXNwYWNlRGF0YS0+bV9zY29w
ZU9mZnNldDsgfQogICAgIAotICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImKTsK
LSAgICB2b2lkIG1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJik7CisgICAgdm9pZCB2aXNpdEFnZ3Jl
Z2F0ZShBYnN0cmFjdFNsb3RWaXNpdG9yJik7CisgICAgdm9pZCBtYXJrSWZDaGVhcChBYnN0cmFj
dFNsb3RWaXNpdG9yJik7CiAgICAgYm9vbCBmaW5hbGl6ZShWTSYpOyAvLyBSZXR1cm4gdHJ1ZSBp
ZiB0aGlzIGdldHMgdG8gbGl2ZS4KIAogICAgIGJvb2wgYXBwZW5kVmFyaWFudChjb25zdCBHZXRC
eUlkVmFyaWFudCYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luQnlJ
ZFN0YXR1cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0luQnlJZFN0YXR1cy5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9JbkJ5SWRTdGF0dXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEs
NiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxOCBZdXN1a2UgU3V6dWtpIDx1dGF0YW5lLnRl
YUBnbWFpbC5jb20+LgotICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOC0yMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjUxLDcg
KzI1MSw3IEBAIHZvaWQgSW5CeUlkU3RhdHVzOjpmaWx0ZXIoY29uc3QgU3RydWN0dXIKICAgICAg
ICAgbV9zdGF0ZSA9IE5vSW5mb3JtYXRpb247CiB9CiAKLXZvaWQgSW5CeUlkU3RhdHVzOjptYXJr
SWZDaGVhcChTbG90VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgSW5CeUlkU3RhdHVzOjptYXJrSWZD
aGVhcChBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGZvciAoSW5CeUlkVmFy
aWFudCYgdmFyaWFudCA6IG1fdmFyaWFudHMpCiAgICAgICAgIHZhcmlhbnQubWFya0lmQ2hlYXAo
dmlzaXRvcik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5CeUlkU3Rh
dHVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luQnlJ
ZFN0YXR1cy5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvSW5CeUlkU3RhdHVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgog
ICogQ29weXJpZ2h0IChDKSAyMDE4IFl1c3VrZSBTdXp1a2kgPHV0YXRhbmUudGVhQGdtYWlsLmNv
bT4uCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMDYsNyArMTA2LDcgQEAg
cHVibGljOgogICAgIC8vIEF0dGVtcHRzIHRvIHJlZHVjZSB0aGUgc2V0IG9mIHZhcmlhbnRzIHRv
IGZpdCB0aGUgZ2l2ZW4gc3RydWN0dXJlIHNldC4gVGhpcyBtYXkgYmUgYXBwcm94aW1hdGUuCiAg
ICAgdm9pZCBmaWx0ZXIoY29uc3QgU3RydWN0dXJlU2V0Jik7CiAgICAgCi0gICAgdm9pZCBtYXJr
SWZDaGVhcChTbG90VmlzaXRvciYpOworICAgIHZvaWQgbWFya0lmQ2hlYXAoQWJzdHJhY3RTbG90
VmlzaXRvciYpOwogICAgIGJvb2wgZmluYWxpemUoVk0mKTsKIAogICAgIHZvaWQgZHVtcChQcmlu
dFN0cmVhbSYpIGNvbnN0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lu
QnlJZFZhcmlhbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9JbkJ5SWRWYXJpYW50LmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0luQnlJZFZhcmlhbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDYgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxOCBZdXN1a2UgU3V6dWtpIDx1dGF0
YW5lLnRlYUBnbWFpbC5jb20+LgotICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOC0yMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
NjQsNyArNjQsNyBAQCBib29sIEluQnlJZFZhcmlhbnQ6OmF0dGVtcHRUb01lcmdlKGNvbnN0CiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgSW5CeUlkVmFyaWFudDo6bWFya0lmQ2hlYXAoU2xv
dFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIEluQnlJZFZhcmlhbnQ6Om1hcmtJZkNoZWFwKEFic3Ry
YWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgbV9zdHJ1Y3R1cmVTZXQubWFya0lmQ2hl
YXAodmlzaXRvcik7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5C
eUlkVmFyaWFudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9JbkJ5SWRWYXJpYW50LmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9JbkJ5SWRWYXJpYW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2
IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDE4IFl1c3VrZSBTdXp1a2kgPHV0YXRhbmUudGVh
QGdtYWlsLmNvbT4uCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01Nyw3ICs1
Nyw3IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgYXR0ZW1wdFRvTWVyZ2UoY29uc3QgSW5CeUlkVmFy
aWFudCYgb3RoZXIpOwogICAgIAotICAgIHZvaWQgbWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImKTsK
KyAgICB2b2lkIG1hcmtJZkNoZWFwKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKICAgICBib29sIGZp
bmFsaXplKFZNJik7CiAKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnRlcm5hbEZ1bmN0aW9uQWxsb2NhdGlv
blByb2ZpbGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
SW50ZXJuYWxGdW5jdGlvbkFsbG9jYXRpb25Qcm9maWxlLmgJKHJldmlzaW9uIDI3MjgzMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnRlcm5hbEZ1bmN0aW9uQWxsb2NhdGlv
blByb2ZpbGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM5LDcgKzM5LDcgQEAgcHVibGljOgogICAg
IFN0cnVjdHVyZSogY3JlYXRlQWxsb2NhdGlvblN0cnVjdHVyZUZyb21CYXNlKFZNJiwgSlNHbG9i
YWxPYmplY3QqLCBKU0NlbGwqIG93bmVyLCBKU09iamVjdCogcHJvdG90eXBlLCBTdHJ1Y3R1cmUq
IGJhc2UpOwogCiAgICAgdm9pZCBjbGVhcigpIHsgbV9zdHJ1Y3R1cmUuY2xlYXIoKTsgfQotICAg
IHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsgdmlzaXRvci5hcHBl
bmQobV9zdHJ1Y3R1cmUpOyB9CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCB2
aXNpdEFnZ3JlZ2F0ZShWaXNpdG9yJiB2aXNpdG9yKSB7IHZpc2l0b3IuYXBwZW5kKG1fc3RydWN0
dXJlKTsgfQogCiBwcml2YXRlOgogICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1fc3RydWN0
dXJlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09iamVjdEFsbG9jYXRp
b25Qcm9maWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L09iamVjdEFsbG9jYXRpb25Qcm9maWxlLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PYmplY3RBbGxvY2F0aW9uUHJvZmlsZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE3IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtNjQsNyArNjQsOCBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIEFTU0VSVChpc051
bGwoKSk7CiAgICAgfQogCi0gICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYgdmlz
aXRvcikKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgorICAgIHZvaWQgdmlzaXRBZ2dy
ZWdhdGUoVmlzaXRvciYgdmlzaXRvcikKICAgICB7CiAgICAgICAgIHZpc2l0b3IuYXBwZW5kKG1f
c3RydWN0dXJlKTsKICAgICB9CkBAIC0xMTAsNyArMTExLDggQEAgcHVibGljOgogICAgICAgICBB
U1NFUlQoaXNOdWxsKCkpOwogICAgIH0KIAotICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZp
c2l0b3ImIHZpc2l0b3IpCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KKyAgICB2b2lk
IHZpc2l0QWdncmVnYXRlKFZpc2l0b3ImIHZpc2l0b3IpCiAgICAgewogICAgICAgICBCYXNlOjp2
aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKICAgICAgICAgdmlzaXRvci5hcHBlbmQobV9wcm90b3R5
cGUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNj
ZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9s
eW1vcnBoaWNBY2Nlc3MuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNC0yMDIwIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MzU4LDcgKzM1OCw3IEBAIGJvb2wgUG9seW1vcnBoaWNBY2Nlc3M6OnZpc2l0V2VhayhWTSYgdm0K
ICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBQb2x5bW9ycGhpY0FjY2Vzczo6cHJvcGFnYXRl
VHJhbnNpdGlvbnMoU2xvdFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0Citib29sIFBvbHltb3JwaGlj
QWNjZXNzOjpwcm9wYWdhdGVUcmFuc2l0aW9ucyhBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9y
KSBjb25zdAogewogICAgIGJvb2wgcmVzdWx0ID0gdHJ1ZTsKICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgc2l6ZSgpOyArK2kpCkBAIC0zNjYsNyArMzY2LDcgQEAgYm9vbCBQb2x5bW9ycGhp
Y0FjY2Vzczo6cHJvcGFnYXRlVHJhbnNpdAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQg
UG9seW1vcnBoaWNBY2Nlc3M6OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQor
dm9pZCBQb2x5bW9ycGhpY0FjY2Vzczo6dmlzaXRBZ2dyZWdhdGUoQWJzdHJhY3RTbG90VmlzaXRv
ciYgdmlzaXRvcikKIHsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZSgpOyArK2kp
CiAgICAgICAgIGF0KGkpLnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmgJKHJldmlz
aW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhp
Y0FjY2Vzcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxNC0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTUyLDE0ICsxNTIsMTQgQEAgcHVibGljOgog
ICAgIGNvbnN0IEFjY2Vzc0Nhc2UmIGF0KHVuc2lnbmVkIGkpIGNvbnN0IHsgcmV0dXJuICptX2xp
c3RbaV07IH0KICAgICBjb25zdCBBY2Nlc3NDYXNlJiBvcGVyYXRvcltdKHVuc2lnbmVkIGkpIGNv
bnN0IHsgcmV0dXJuICptX2xpc3RbaV07IH0KIAotICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xv
dFZpc2l0b3ImKTsKKyAgICB2b2lkIHZpc2l0QWdncmVnYXRlKEFic3RyYWN0U2xvdFZpc2l0b3Im
KTsKIAogICAgIC8vIElmIHRoaXMgcmV0dXJucyBmYWxzZSB0aGVuIHdlIGFyZSByZXF1ZXN0aW5n
IGEgcmVzZXQgb2YgdGhlIG93bmluZyBTdHJ1Y3R1cmVTdHViSW5mby4KICAgICBib29sIHZpc2l0
V2VhayhWTSYpIGNvbnN0OwogICAgIAogICAgIC8vIFRoaXMgcmV0dXJucyB0cnVlIGlmIGl0IGhh
cyBtYXJrZWQgZXZlcnl0aGluZyBpdCB3aWxsIGV2ZXIgbWFya2VkLiBUaGlzIGNhbiBiZSB1c2Vk
IGFzIGFuCiAgICAgLy8gb3B0aW1pemF0aW9uIHRvIHRoZW4gYXZvaWQgY2FsbGluZyB0aGlzIG1l
dGhvZCBhZ2FpbiBkdXJpbmcgdGhlIGZpeHBvaW50LgotICAgIGJvb2wgcHJvcGFnYXRlVHJhbnNp
dGlvbnMoU2xvdFZpc2l0b3ImKSBjb25zdDsKKyAgICBib29sIHByb3BhZ2F0ZVRyYW5zaXRpb25z
KEFic3RyYWN0U2xvdFZpc2l0b3ImKSBjb25zdDsKIAogICAgIHZvaWQgYWJvdXRUb0RpZSgpOwog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0
dXMuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvUHV0QnlJZFN0YXR1cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zOTYsNyArMzk2LDcgQEAg
UHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpzbG93VmVyc2lvbgogICAgIHJldHVybiBQdXRC
eUlkU3RhdHVzKG1ha2VzQ2FsbHMoKSA/IE1ha2VzQ2FsbHMgOiBUYWtlc1Nsb3dQYXRoKTsKIH0K
IAotdm9pZCBQdXRCeUlkU3RhdHVzOjptYXJrSWZDaGVhcChTbG90VmlzaXRvciYgdmlzaXRvcikK
K3ZvaWQgUHV0QnlJZFN0YXR1czo6bWFya0lmQ2hlYXAoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlz
aXRvcikKIHsKICAgICBmb3IgKFB1dEJ5SWRWYXJpYW50JiB2YXJpYW50IDogbV92YXJpYW50cykK
ICAgICAgICAgdmFyaWFudC5tYXJrSWZDaGVhcCh2aXNpdG9yKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuaAkocmV2aXNpb24gMjcyODMw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuaAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAx
OCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIt
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTExNyw3ICsxMTcsNyBAQCBwdWJsaWM6CiAgICAgY29uc3QgUHV0QnlJ
ZFZhcmlhbnQmIGF0KHNpemVfdCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV92YXJpYW50c1tpbmRl
eF07IH0KICAgICBjb25zdCBQdXRCeUlkVmFyaWFudCYgb3BlcmF0b3JbXShzaXplX3QgaW5kZXgp
IGNvbnN0IHsgcmV0dXJuIGF0KGluZGV4KTsgfQogICAgIAotICAgIHZvaWQgbWFya0lmQ2hlYXAo
U2xvdFZpc2l0b3ImKTsKKyAgICB2b2lkIG1hcmtJZkNoZWFwKEFic3RyYWN0U2xvdFZpc2l0b3Im
KTsKICAgICBib29sIGZpbmFsaXplKFZNJik7CiAgICAgCiAgICAgdm9pZCBtZXJnZShjb25zdCBQ
dXRCeUlkU3RhdHVzJik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0
QnlJZFZhcmlhbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9QdXRCeUlkVmFyaWFudC5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkVmFyaWFudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTggQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0yNjIsNyArMjYyLDcgQEAgYm9vbCBQdXRCeUlkVmFyaWFudDo6YXR0ZW1wdFRvTWVyZ2VUcmFu
cwogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIFB1dEJ5SWRWYXJpYW50OjptYXJrSWZDaGVh
cChTbG90VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgUHV0QnlJZFZhcmlhbnQ6Om1hcmtJZkNoZWFw
KEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgbV9vbGRTdHJ1Y3R1cmUubWFy
a0lmQ2hlYXAodmlzaXRvcik7CiAgICAgaWYgKG1fbmV3U3RydWN0dXJlKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmgJKHJldmlzaW9u
IDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkVmFyaWFu
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxNC0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTMyLDcgKzEzMiw3IEBAIHB1YmxpYzoKIAogICAgIGJv
b2wgYXR0ZW1wdFRvTWVyZ2UoY29uc3QgUHV0QnlJZFZhcmlhbnQmIG90aGVyKTsKICAgICAKLSAg
ICB2b2lkIG1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJik7CisgICAgdm9pZCBtYXJrSWZDaGVhcChB
YnN0cmFjdFNsb3RWaXNpdG9yJik7CiAgICAgYm9vbCBmaW5hbGl6ZShWTSYpOwogICAgIAogICAg
IHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1JlY29yZGVkU3RhdHVzZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9SZWNvcmRlZFN0YXR1c2VzLmNwcAkocmV2aXNpb24gMjcy
ODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1JlY29yZGVkU3RhdHVzZXMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDIsNyArMTAyLDcgQEAgU2V0UHJpdmF0ZUJyYW5kU3Rh
dHVzKiBSZWNvcmRlZFN0YXR1c2VzOgogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQgUmVj
b3JkZWRTdGF0dXNlczo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2b2lk
IFJlY29yZGVkU3RhdHVzZXM6OnZpc2l0QWdncmVnYXRlKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZp
c2l0b3IpCiB7CiAgICAgZm9yIChhdXRvJiBwYWlyIDogZ2V0cykKICAgICAgICAgcGFpci5zZWNv
bmQtPnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOwpAQCAtMTE0LDcgKzExNCw3IEBAIHZvaWQgUmVj
b3JkZWRTdGF0dXNlczo6dmlzaXRBZ2dyZWdhdGUoU2wKICAgICAgICAgcGFpci5zZWNvbmQtPnZp
c2l0QWdncmVnYXRlKHZpc2l0b3IpOwogfQogCi12b2lkIFJlY29yZGVkU3RhdHVzZXM6Om1hcmtJ
ZkNoZWFwKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBSZWNvcmRlZFN0YXR1c2VzOjptYXJr
SWZDaGVhcChBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGZvciAoYXV0byYg
cGFpciA6IGdldHMpCiAgICAgICAgIHBhaXIuc2Vjb25kLT5tYXJrSWZDaGVhcCh2aXNpdG9yKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9SZWNvcmRlZFN0YXR1c2VzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1JlY29yZGVkU3Rh
dHVzZXMuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1JlY29yZGVkU3RhdHVzZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU0LDggKzU0LDggQEAg
c3RydWN0IFJlY29yZGVkU3RhdHVzZXMgewogICAgIENoZWNrUHJpdmF0ZUJyYW5kU3RhdHVzKiBh
ZGRDaGVja1ByaXZhdGVCcmFuZFN0YXR1cyhjb25zdCBDb2RlT3JpZ2luJiwgY29uc3QgQ2hlY2tQ
cml2YXRlQnJhbmRTdGF0dXMmKTsKICAgICBTZXRQcml2YXRlQnJhbmRTdGF0dXMqIGFkZFNldFBy
aXZhdGVCcmFuZFN0YXR1cyhjb25zdCBDb2RlT3JpZ2luJiwgY29uc3QgU2V0UHJpdmF0ZUJyYW5k
U3RhdHVzJik7CiAgICAgCi0gICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYpOwot
ICAgIHZvaWQgbWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImKTsKKyAgICB2b2lkIHZpc2l0QWdncmVn
YXRlKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKKyAgICB2b2lkIG1hcmtJZkNoZWFwKEFic3RyYWN0
U2xvdFZpc2l0b3ImKTsKICAgICAKICAgICB2b2lkIGZpbmFsaXplV2l0aG91dERlbGV0aW5nKFZN
Jik7CiAgICAgdm9pZCBmaW5hbGl6ZShWTSYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1NldFByaXZhdGVCcmFuZFN0YXR1cy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NldFByaXZhdGVCcmFuZFN0YXR1cy5jcHAJKHJldmlz
aW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TZXRQcml2YXRl
QnJhbmRTdGF0dXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzUsMTMgKzIzNSwxMyBAQCBDYWNo
ZWFibGVJZGVudGlmaWVyIFNldFByaXZhdGVCcmFuZFN0YXR1CiAgICAgcmV0dXJuIHJlc3VsdDsK
IH0KIAotdm9pZCBTZXRQcml2YXRlQnJhbmRTdGF0dXM6OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNp
dG9yJiB2aXNpdG9yKQordm9pZCBTZXRQcml2YXRlQnJhbmRTdGF0dXM6OnZpc2l0QWdncmVnYXRl
KEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgZm9yIChTZXRQcml2YXRlQnJh
bmRWYXJpYW50JiB2YXJpYW50IDogbV92YXJpYW50cykKICAgICAgICAgdmFyaWFudC52aXNpdEFn
Z3JlZ2F0ZSh2aXNpdG9yKTsKIH0KIAotdm9pZCBTZXRQcml2YXRlQnJhbmRTdGF0dXM6Om1hcmtJ
ZkNoZWFwKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBTZXRQcml2YXRlQnJhbmRTdGF0dXM6
Om1hcmtJZkNoZWFwKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgZm9yIChT
ZXRQcml2YXRlQnJhbmRWYXJpYW50JiB2YXJpYW50IDogbV92YXJpYW50cykKICAgICAgICAgdmFy
aWFudC5tYXJrSWZDaGVhcCh2aXNpdG9yKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9TZXRQcml2YXRlQnJhbmRTdGF0dXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvU2V0UHJpdmF0ZUJyYW5kU3RhdHVzLmgJKHJldmlzaW9uIDI3
MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TZXRQcml2YXRlQnJhbmRT
dGF0dXMuaAkod29ya2luZyBjb3B5KQpAQCAtODMsOCArODMsOCBAQCBwdWJsaWM6CiAgICAgLy8g
QXR0ZW1wdHMgdG8gcmVkdWNlIHRoZSBzZXQgb2YgdmFyaWFudHMgdG8gZml0IHRoZSBnaXZlbiBz
dHJ1Y3R1cmUgc2V0LiBUaGlzIG1heSBiZSBhcHByb3hpbWF0ZS4KICAgICB2b2lkIGZpbHRlcihj
b25zdCBTdHJ1Y3R1cmVTZXQmKTsKIAotICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0
b3ImKTsKLSAgICB2b2lkIG1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJik7CisgICAgdm9pZCB2aXNp
dEFnZ3JlZ2F0ZShBYnN0cmFjdFNsb3RWaXNpdG9yJik7CisgICAgdm9pZCBtYXJrSWZDaGVhcChB
YnN0cmFjdFNsb3RWaXNpdG9yJik7CiAgICAgYm9vbCBmaW5hbGl6ZShWTSYpOwogCiAgICAgYm9v
bCBhcHBlbmRWYXJpYW50KGNvbnN0IFNldFByaXZhdGVCcmFuZFZhcmlhbnQmKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TZXRQcml2YXRlQnJhbmRWYXJpYW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU2V0UHJpdmF0ZUJy
YW5kVmFyaWFudC5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9TZXRQcml2YXRlQnJhbmRWYXJpYW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTQsNyArNTQsNyBAQCBib29sIFNldFByaXZhdGVCcmFuZFZhcmlhbnQ6OmF0dGVtcHRUb01lCiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgU2V0UHJpdmF0ZUJyYW5kVmFyaWFudDo6bWFya0lm
Q2hlYXAoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIFNldFByaXZhdGVCcmFuZFZhcmlhbnQ6
Om1hcmtJZkNoZWFwKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgaWYgKG1f
b2xkU3RydWN0dXJlKQogICAgICAgICBtX29sZFN0cnVjdHVyZS0+bWFya0lmQ2hlYXAodmlzaXRv
cik7CkBAIC03MSw3ICs3MSw3IEBAIGJvb2wgU2V0UHJpdmF0ZUJyYW5kVmFyaWFudDo6ZmluYWxp
emUoVk0KICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBTZXRQcml2YXRlQnJhbmRWYXJpYW50
Ojp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgU2V0UHJpdmF0ZUJy
YW5kVmFyaWFudDo6dmlzaXRBZ2dyZWdhdGUoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikK
IHsKICAgICBtX2lkZW50aWZpZXIudmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7CiB9CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU2V0UHJpdmF0ZUJyYW5kVmFyaWFudC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TZXRQcml2YXRlQnJh
bmRWYXJpYW50LmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9TZXRQcml2YXRlQnJhbmRWYXJpYW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDgg
KzQ1LDggQEAgcHVibGljOgogCiAgICAgYm9vbCBhdHRlbXB0VG9NZXJnZShjb25zdCBTZXRQcml2
YXRlQnJhbmRWYXJpYW50JiBvdGhlcik7CiAKLSAgICB2b2lkIHZpc2l0QWdncmVnYXRlKFNsb3RW
aXNpdG9yJik7Ci0gICAgdm9pZCBtYXJrSWZDaGVhcChTbG90VmlzaXRvciYpOworICAgIHZvaWQg
dmlzaXRBZ2dyZWdhdGUoQWJzdHJhY3RTbG90VmlzaXRvciYpOworICAgIHZvaWQgbWFya0lmQ2hl
YXAoQWJzdHJhY3RTbG90VmlzaXRvciYpOwogICAgIGJvb2wgZmluYWxpemUoVk0mKTsKIAogICAg
IHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1N0cnVjdHVyZVNldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVNldC5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTZXQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNC0yMDE4IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMzEsNyArMzEsNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotdm9pZCBTdHJ1
Y3R1cmVTZXQ6Om1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBjb25zdAordm9pZCBT
dHJ1Y3R1cmVTZXQ6Om1hcmtJZkNoZWFwKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpIGNv
bnN0CiB7CiAgICAgZm9yIChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA6ICp0aGlzKQogICAgICAgICBz
dHJ1Y3R1cmUtPm1hcmtJZkNoZWFwKHZpc2l0b3IpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1N0cnVjdHVyZVNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTZXQuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVNldC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMS0yMDE4IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDIxIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtNTQsNyArNTQsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBvbmx5RW50cnkoKTsK
ICAgICB9CiAKLSAgICB2b2lkIG1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJikgY29uc3Q7CisgICAg
dm9pZCBtYXJrSWZDaGVhcChBYnN0cmFjdFNsb3RWaXNpdG9yJikgY29uc3Q7CiAgICAgYm9vbCBp
c1N0aWxsQWxpdmUoVk0mKSBjb25zdDsKICAgICAKICAgICB2b2lkIGR1bXBJbkNvbnRleHQoUHJp
bnRTdHJlYW0mLCBEdW1wQ29udGV4dCopIGNvbnN0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwCShyZXZpc2lvbiAy
NzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1Yklu
Zm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAwOC0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAwOC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjk2LDcgKzI5Niw3IEBAIHZvaWQgU3RydWN0dXJl
U3R1YkluZm86OnJlc2V0KGNvbnN0IENvbmMKICAgICBzZXRDYWNoZVR5cGUobG9ja2VyLCBDYWNo
ZVR5cGU6OlVuc2V0KTsKIH0KIAotdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6dmlzaXRBZ2dyZWdh
dGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjp2aXNpdEFn
Z3JlZ2F0ZShBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHsKICAgICAgICAg
YXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2J1ZmZlcmVkU3RydWN0dXJlc0xvY2spOwpAQCAtMzUy
LDcgKzM1Miw3IEBAIHZvaWQgU3RydWN0dXJlU3R1YkluZm86OnZpc2l0V2Vha1JlZmVyZW4KICAg
ICByZXNldEJ5R0MgPSB0cnVlOwogfQogCi1ib29sIFN0cnVjdHVyZVN0dWJJbmZvOjpwcm9wYWdh
dGVUcmFuc2l0aW9ucyhTbG90VmlzaXRvciYgdmlzaXRvcikKK2Jvb2wgU3RydWN0dXJlU3R1Yklu
Zm86OnByb3BhZ2F0ZVRyYW5zaXRpb25zKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7
CiAgICAgc3dpdGNoIChtX2NhY2hlVHlwZSkgewogICAgIGNhc2UgQ2FjaGVUeXBlOjpVbnNldDoK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVT
dHViSW5mby5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTkzLDE0ICs5Mywx
NCBAQCBwdWJsaWM6CiAgICAgdm9pZCBkZXJlZigpOwogICAgIHZvaWQgYWJvdXRUb0RpZSgpOwog
Ci0gICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYpOworICAgIHZvaWQgdmlzaXRB
Z2dyZWdhdGUoQWJzdHJhY3RTbG90VmlzaXRvciYpOwogCiAgICAgLy8gQ2hlY2sgaWYgdGhlIHN0
dWIgaGFzIHdlYWsgcmVmZXJlbmNlcyB0aGF0IGFyZSBkZWFkLiBJZiBpdCBkb2VzLCB0aGVuIGl0
IHJlc2V0cyBpdHNlbGYsCiAgICAgLy8gZWl0aGVyIGVudGlyZWx5IG9yIGp1c3QgZW5vdWdoIHRv
IGVuc3VyZSB0aGF0IHRob3NlIGRlYWQgcG9pbnRlcnMgZG9uJ3QgZ2V0IHVzZWQgYW55bW9yZS4K
ICAgICB2b2lkIHZpc2l0V2Vha1JlZmVyZW5jZXMoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyQmFz
ZSYsIENvZGVCbG9jayopOwogICAgIAogICAgIC8vIFRoaXMgcmV0dXJucyB0cnVlIGlmIGl0IGhh
cyBtYXJrZWQgZXZlcnl0aGluZyB0aGF0IGl0IHdpbGwgZXZlciBtYXJrLgotICAgIGJvb2wgcHJv
cGFnYXRlVHJhbnNpdGlvbnMoU2xvdFZpc2l0b3ImKTsKKyAgICBib29sIHByb3BhZ2F0ZVRyYW5z
aXRpb25zKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKICAgICAgICAgCiAgICAgU3R1YkluZm9TdW1t
YXJ5IHN1bW1hcnkoVk0mKSBjb25zdDsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcAkocmV2aXNpb24gMjcy
ODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2Nr
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTItMjAxOSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTItMjAyMSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTc1LDcgKzc1LDggQEAgVW5saW5rZWRDb2RlQmxvY2s6
OlVubGlua2VkQ29kZUJsb2NrKFZNJgogICAgIH0KIH0KIAotdm9pZCBVbmxpbmtlZENvZGVCbG9j
azo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVt
cGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgVW5saW5rZWRDb2RlQmxvY2s6OnZpc2l0Q2hp
bGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBVbmxpbmtl
ZENvZGVCbG9jayogdGhpc09iamVjdCA9IGpzQ2FzdDxVbmxpbmtlZENvZGVCbG9jayo+KGNlbGwp
OwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAg
LTk0LDYgKzk1LDggQEAgdm9pZCBVbmxpbmtlZENvZGVCbG9jazo6dmlzaXRDaGlsZHJlbihKUwog
ICAgIHZpc2l0b3IucmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKGV4dHJhTWVtb3J5KTsKIH0KIAor
REVGSU5FX1ZJU0lUX0NISUxEUkVOKFVubGlua2VkQ29kZUJsb2NrKTsKKwogc2l6ZV90IFVubGlu
a2VkQ29kZUJsb2NrOjplc3RpbWF0ZWRTaXplKEpTQ2VsbCogY2VsbCwgVk0mIHZtKQogewogICAg
IFVubGlua2VkQ29kZUJsb2NrKiB0aGlzT2JqZWN0ID0ganNDYXN0PFVubGlua2VkQ29kZUJsb2Nr
Kj4oY2VsbCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRD
b2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
VW5saW5rZWRDb2RlQmxvY2suaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTkgQXBwbGUgSW5jLiBBbGwg
UmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjEgQXBwbGUgSW5jLiBB
bGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00
MzEsNyArNDMxLDcgQEAgcHJpdmF0ZToKICAgICBSZWZDb3VudGVkQXJyYXk8RXhwcmVzc2lvblJh
bmdlSW5mbz4gbV9leHByZXNzaW9uSW5mbzsKIAogcHJvdGVjdGVkOgotICAgIHN0YXRpYyB2b2lk
IHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lU
X0NISUxEUkVOOwogICAgIHN0YXRpYyBzaXplX3QgZXN0aW1hdGVkU2l6ZShKU0NlbGwqLCBWTSYp
OwogCiBwdWJsaWM6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5r
ZWRGdW5jdGlvbkV4ZWN1dGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5jcHAJKHJldmlzaW9uIDI3
MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9u
RXhlY3V0YWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDEyLTIwMTkgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEyLTIwMjEgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xNDYsNyArMTQ2LDggQEAgdm9pZCBV
bmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6ZGVzdHJveQogICAgIHN0YXRpY19jYXN0PFVubGlu
a2VkRnVuY3Rpb25FeGVjdXRhYmxlKj4oY2VsbCktPn5VbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJs
ZSgpOwogfQogCi12b2lkIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlOjp2aXNpdENoaWxkcmVu
KEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPgordm9pZCBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6dmlzaXRDaGlsZHJlbklt
cGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFVubGlua2VkRnVuY3Rp
b25FeGVjdXRhYmxlKiB0aGlzT2JqZWN0ID0ganNDYXN0PFVubGlua2VkRnVuY3Rpb25FeGVjdXRh
YmxlKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBp
bmZvKCkpOwpAQCAtMTY5LDYgKzE3MCw4IEBAIHZvaWQgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFi
bGU6OnZpc2l0Q2gKICAgICB9CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihVbmxpbmtlZEZ1
bmN0aW9uRXhlY3V0YWJsZSk7CisKIFNvdXJjZUNvZGUgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFi
bGU6OmxpbmtlZFNvdXJjZUNvZGUoY29uc3QgU291cmNlQ29kZSYgcGFzc2VkUGFyZW50U291cmNl
KSBjb25zdAogewogICAgIGNvbnN0IFNvdXJjZUNvZGUmIHBhcmVudFNvdXJjZSA9ICFtX2lzQnVp
bHRpbkRlZmF1bHRDbGFzc0NvbnN0cnVjdG9yID8gcGFzc2VkUGFyZW50U291cmNlIDogQnVpbHRp
bkV4ZWN1dGFibGVzOjpkZWZhdWx0Q29uc3RydWN0b3JTb3VyY2VDb2RlKGNvbnN0cnVjdG9yS2lu
ZCgpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZEZ1bmN0
aW9uRXhlY3V0YWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9VbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUu
aAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTItMjAxOSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTItMjAyMSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTI0Miw3ICsyNDIsNyBAQCBwcml2YXRlOgogICAgIFVubGlu
a2VkRnVuY3Rpb25FeGVjdXRhYmxlKFZNJiwgU3RydWN0dXJlKiwgY29uc3QgU291cmNlQ29kZSYs
IEZ1bmN0aW9uTWV0YWRhdGFOb2RlKiwgVW5saW5rZWRGdW5jdGlvbktpbmQsIENvbnN0cnVjdEFi
aWxpdHksIEpTUGFyc2VyU2NyaXB0TW9kZSwgUmVmUHRyPFREWkVudmlyb25tZW50TGluaz4sIE9w
dGlvbmFsPFByaXZhdGVOYW1lRW52aXJvbm1lbnQ+LCBKU0M6OkRlcml2ZWRDb250ZXh0VHlwZSwg
SlNDOjpOZWVkc0NsYXNzRmllbGRJbml0aWFsaXplciwgUHJpdmF0ZUJyYW5kUmVxdWlyZW1lbnQs
IGJvb2wgaXNCdWlsdGluRGVmYXVsdENsYXNzQ29uc3RydWN0b3IpOwogICAgIFVubGlua2VkRnVu
Y3Rpb25FeGVjdXRhYmxlKERlY29kZXImLCBjb25zdCBDYWNoZWRGdW5jdGlvbkV4ZWN1dGFibGUm
KTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3Im
KTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgdm9pZCBkZWNvZGVDYWNoZWRD
b2RlQmxvY2tzKFZNJik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9E
ZWJ1Z2dlclNjb3BlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVi
dWdnZXIvRGVidWdnZXJTY29wZS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlclNjb3BlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxOSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTU1LDcgKzU1LDggQEAgdm9pZCBEZWJ1Z2dlclNjb3BlOjpmaW5pc2hDcmVhdGlvbihWTSYgdgog
ICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKIH0KIAotdm9pZCBEZWJ1Z2dlclNjb3BlOjp2
aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0
ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBEZWJ1Z2dlclNjb3BlOjp2aXNpdENoaWxkcmVuSW1w
bChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgRGVidWdnZXJTY29wZSog
dGhpc09iamVjdCA9IGpzQ2FzdDxEZWJ1Z2dlclNjb3BlKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dD
X09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNjUsNiArNjYsOCBAQCB2
b2lkIERlYnVnZ2VyU2NvcGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsCiAgICAgdmlzaXRvci5hcHBl
bmQodGhpc09iamVjdC0+bV9uZXh0KTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKERlYnVn
Z2VyU2NvcGUpOworCiBTdHJpbmcgRGVidWdnZXJTY29wZTo6Y2xhc3NOYW1lKGNvbnN0IEpTT2Jq
ZWN0KiBvYmplY3QsIFZNJiB2bSkKIHsKICAgICBjb25zdCBEZWJ1Z2dlclNjb3BlKiBzY29wZSA9
IGpzQ2FzdDxjb25zdCBEZWJ1Z2dlclNjb3BlKj4ob2JqZWN0KTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlclNjb3BlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyU2NvcGUuaAkocmV2aXNpb24gMjcyODMw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyU2NvcGUuaAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAy
MCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgt
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTQ2LDcgKzQ2LDcgQEAgcHVibGljOgogCiAgICAgSlNfRVhQT1JUX1BS
SVZBVEUgc3RhdGljIERlYnVnZ2VyU2NvcGUqIGNyZWF0ZShWTSYgdm0sIEpTU2NvcGUqIHNjb3Bl
KTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3Im
KTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogICAgIHN0YXRpYyBTdHJpbmcgY2xhc3NO
YW1lKGNvbnN0IEpTT2JqZWN0KiwgVk0mKTsKICAgICBzdGF0aWMgU3RyaW5nIHRvU3RyaW5nTmFt
ZShjb25zdCBKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0Kik7CiAgICAgc3RhdGljIGJvb2wgZ2V0
T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUs
IFByb3BlcnR5U2xvdCYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNp
cmVkVHJhbnNpdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHRGVzaXJlZFRyYW5zaXRpb25zLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkVHJhbnNpdGlvbnMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtNTIsNyArNTIsNyBAQCB2b2lkIERlc2lyZWRUcmFuc2l0aW9uOjpyZWFsbHlBZGQo
Vk0mIHZtCiAgICAgICAgICAgICBtX29sZFN0cnVjdHVyZSwgbV9uZXdTdHJ1Y3R1cmUpKTsKIH0K
IAotdm9pZCBEZXNpcmVkVHJhbnNpdGlvbjo6dmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYgdmlz
aXRvcikKK3ZvaWQgRGVzaXJlZFRyYW5zaXRpb246OnZpc2l0Q2hpbGRyZW4oQWJzdHJhY3RTbG90
VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKG1fY29k
ZU9yaWdpbk93bmVyKTsKICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKG1fb2xkU3RydWN0
dXJlKTsKQEAgLTc4LDcgKzc4LDcgQEAgdm9pZCBEZXNpcmVkVHJhbnNpdGlvbnM6OnJlYWxseUFk
ZChWTSYgdgogICAgICAgICBtX3RyYW5zaXRpb25zW2ldLnJlYWxseUFkZCh2bSwgY29tbW9uKTsK
IH0KIAotdm9pZCBEZXNpcmVkVHJhbnNpdGlvbnM6OnZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3Im
IHZpc2l0b3IpCit2b2lkIERlc2lyZWRUcmFuc2l0aW9uczo6dmlzaXRDaGlsZHJlbihBYnN0cmFj
dFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBt
X3RyYW5zaXRpb25zLnNpemUoKTsgaSsrKQogICAgICAgICBtX3RyYW5zaXRpb25zW2ldLnZpc2l0
Q2hpbGRyZW4odmlzaXRvcik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rl
c2lyZWRUcmFuc2l0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHRGVzaXJlZFRyYW5zaXRpb25zLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFRyYW5zaXRpb25zLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIxIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtNDYsOCArNDYsNyBAQCBwdWJsaWM6CiAgICAgRGVzaXJlZFRyYW5zaXRpb24oQ29kZUJs
b2NrKiwgQ29kZUJsb2NrKiBjb2RlT3JpZ2luT3duZXIsIFN0cnVjdHVyZSosIFN0cnVjdHVyZSop
OwogCiAgICAgdm9pZCByZWFsbHlBZGQoVk0mLCBDb21tb25EYXRhKik7Ci0gICAgCi0gICAgdm9p
ZCB2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CisgICAgdm9pZCB2aXNpdENoaWxkcmVuKEFi
c3RyYWN0U2xvdFZpc2l0b3ImKTsKIAogcHJpdmF0ZToKICAgICBDb2RlQmxvY2sqIG1fY29kZUJs
b2NrOwpAQCAtNjMsNyArNjIsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGFkZExhemlseShDb2Rl
QmxvY2sqLCBDb2RlQmxvY2sqIGNvZGVPcmlnaW5Pd25lciwgU3RydWN0dXJlKiwgU3RydWN0dXJl
Kik7CiAgICAgdm9pZCByZWFsbHlBZGQoVk0mLCBDb21tb25EYXRhKik7Ci0gICAgdm9pZCB2aXNp
dENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CisgICAgdm9pZCB2aXNpdENoaWxkcmVuKEFic3RyYWN0
U2xvdFZpc2l0b3ImKTsKIAogcHJpdmF0ZToKICAgICBWZWN0b3I8RGVzaXJlZFRyYW5zaXRpb24+
IG1fdHJhbnNpdGlvbnM7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2ly
ZWRXZWFrUmVmZXJlbmNlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdEZXNpcmVkV2Vha1JlZmVyZW5jZXMuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXZWFrUmVmZXJlbmNlcy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC04Nyw3ICs4Nyw3IEBAIHZvaWQgRGVzaXJlZFdlYWtSZWZlcmVuY2Vz
OjpyZWFsbHlBZGQoVk0KICAgICB9CiB9CiAKLXZvaWQgRGVzaXJlZFdlYWtSZWZlcmVuY2VzOjp2
aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBEZXNpcmVkV2Vha1JlZmVy
ZW5jZXM6OnZpc2l0Q2hpbGRyZW4oQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAg
ICBmb3IgKEpTQ2VsbCogdGFyZ2V0IDogbV9yZWZlcmVuY2VzKQogICAgICAgICB2aXNpdG9yLmFw
cGVuZFVuYmFycmllcmVkKHRhcmdldCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0Rlc2lyZWRXZWFrUmVmZXJlbmNlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHRGVzaXJlZFdlYWtSZWZlcmVuY2VzLmgJKHJldmlzaW9uIDI3MjgzMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFdlYWtSZWZlcmVuY2VzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC0zMSwxMCArMzEsMTAgQEAKIAogbmFtZXNwYWNlIEpTQyB7IAog
CitjbGFzcyBBYnN0cmFjdFNsb3RWaXNpdG9yOwogY2xhc3MgQ29kZUJsb2NrOwogY2xhc3MgSlND
ZWxsOwogY2xhc3MgSlNWYWx1ZTsKLWNsYXNzIFNsb3RWaXNpdG9yOwogY2xhc3MgVk07CiAKIG5h
bWVzcGFjZSBERkcgewpAQCAtNTIsOCArNTIsOCBAQCBwdWJsaWM6CiAgICAgYm9vbCBjb250YWlu
cyhKU0NlbGwqKTsKICAgICAKICAgICB2b2lkIHJlYWxseUFkZChWTSYsIENvbW1vbkRhdGEqKTsK
LSAgICAKLSAgICB2b2lkIHZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKKworICAgIHZvaWQg
dmlzaXRDaGlsZHJlbihBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAKIHByaXZhdGU6CiAgICAgQ29k
ZUJsb2NrKiBtX2NvZGVCbG9jazsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
R3JhcGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3Jh
cGguY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0dyYXBoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ0OCw3ICsxNDQ4LDcgQEAgdm9pZCBHcmFw
aDo6cmVnaXN0ZXJGcm96ZW5WYWx1ZXMoKQogICAgIG1fY29kZUJsb2NrLT5jb25zdGFudHNTb3Vy
Y2VDb2RlUmVwcmVzZW50YXRpb24oKS5zaHJpbmtUb0ZpdCgpOwogfQogCi12b2lkIEdyYXBoOjp2
aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBHcmFwaDo6dmlzaXRDaGls
ZHJlbihBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGZvciAoRnJvemVuVmFs
dWUqIHZhbHVlIDogbV9mcm96ZW5WYWx1ZXMpIHsKICAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJh
cnJpZXJlZCh2YWx1ZS0+dmFsdWUoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0dyYXBoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdH
cmFwaC5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0dyYXBoLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDExLTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDExLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMDAwLDkgKzEwMDAsOSBAQCBwdWJsaWM6CiAg
ICAgYm9vbCBjYW5Eb0Zhc3RTcHJlYWQoTm9kZSosIGNvbnN0IEFic3RyYWN0VmFsdWUmKTsKICAg
ICAKICAgICB2b2lkIHJlZ2lzdGVyRnJvemVuVmFsdWVzKCk7Ci0gICAgCi0gICAgdm9pZCB2aXNp
dENoaWxkcmVuKFNsb3RWaXNpdG9yJikgZmluYWw7Ci0gICAgCisKKyAgICB2b2lkIHZpc2l0Q2hp
bGRyZW4oQWJzdHJhY3RTbG90VmlzaXRvciYpIGZpbmFsOworCiAgICAgdm9pZCBsb2dBc3NlcnRp
b25GYWlsdXJlKAogICAgICAgICBzdGQ6Om51bGxwdHJfdCwgY29uc3QgY2hhciogZmlsZSwgaW50
IGxpbmUsIGNvbnN0IGNoYXIqIGZ1bmN0aW9uLAogICAgICAgICBjb25zdCBjaGFyKiBhc3NlcnRp
b24pOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCShyZXZpc2lvbiAy
NzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIwIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtNjcyLDkgKzY3Miw5IEBAIENvbXBpbGF0aW9uS2V5IFBsYW46OmtleSgpCiAg
ICAgcmV0dXJuIENvbXBpbGF0aW9uS2V5KG1fY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpLCBtX21v
ZGUpOwogfQogCi12b2lkIFBsYW46OmNoZWNrTGl2ZW5lc3NBbmRWaXNpdENoaWxkcmVuKFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQordm9pZCBQbGFuOjpjaGVja0xpdmVuZXNzQW5kVmlzaXRDaGlsZHJl
bihBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewotICAgIGlmICghaXNLbm93blRvQmVM
aXZlRHVyaW5nR0MoKSkKKyAgICBpZiAoIWlzS25vd25Ub0JlTGl2ZUR1cmluZ0dDKHZpc2l0b3Ip
KQogICAgICAgICByZXR1cm47CiAKICAgICBjbGVhbk11c3RIYW5kbGVWYWx1ZXNJZk5lY2Vzc2Fy
eSgpOwpAQCAtNzA4LDcgKzcwOCwyMCBAQCB2b2lkIFBsYW46OmZpbmFsaXplSW5HQygpCiAgICAg
bV9yZWNvcmRlZFN0YXR1c2VzLmZpbmFsaXplV2l0aG91dERlbGV0aW5nKCptX3ZtKTsKIH0KIAot
Ym9vbCBQbGFuOjppc0tub3duVG9CZUxpdmVEdXJpbmdHQygpCitib29sIFBsYW46OmlzS25vd25U
b0JlTGl2ZUR1cmluZ0dDKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgaWYg
KG1fc3RhZ2UgPT0gQ2FuY2VsbGVkKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCF2
aXNpdG9yLmlzTWFya2VkKG1fY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICBpZiAoIXZpc2l0b3IuaXNNYXJrZWQobV9jb2RlQmxvY2stPmFs
dGVybmF0aXZlKCkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCEhbV9wcm9maWxl
ZERGR0NvZGVCbG9jayAmJiAhdmlzaXRvci5pc01hcmtlZChtX3Byb2ZpbGVkREZHQ29kZUJsb2Nr
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFBs
YW46OmlzS25vd25Ub0JlTGl2ZUFmdGVyR0MoKQogewogICAgIGlmIChtX3N0YWdlID09IENhbmNl
bGxlZCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdQbGFuLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdQbGFuLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHUGxhbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDMsOCArNDMsOCBAQAogCiBuYW1lc3BhY2Ug
SlNDIHsKIAorY2xhc3MgQWJzdHJhY3RTbG90VmlzaXRvcjsKIGNsYXNzIENvZGVCbG9jazsKLWNs
YXNzIFNsb3RWaXNpdG9yOwogCiBuYW1lc3BhY2UgREZHIHsKIApAQCAtNzEsOSArNzEsMTAgQEAg
cHVibGljOgogICAgIENvbXBpbGF0aW9uS2V5IGtleSgpOwogICAgIAogICAgIHRlbXBsYXRlPHR5
cGVuYW1lIEZ1bmM+Ci0gICAgdm9pZCBpdGVyYXRlQ29kZUJsb2Nrc0ZvckdDKGNvbnN0IEZ1bmMm
KTsKLSAgICB2b2lkIGNoZWNrTGl2ZW5lc3NBbmRWaXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJik7
Ci0gICAgYm9vbCBpc0tub3duVG9CZUxpdmVEdXJpbmdHQygpOworICAgIHZvaWQgaXRlcmF0ZUNv
ZGVCbG9ja3NGb3JHQyhBYnN0cmFjdFNsb3RWaXNpdG9yJiwgY29uc3QgRnVuYyYpOworICAgIHZv
aWQgY2hlY2tMaXZlbmVzc0FuZFZpc2l0Q2hpbGRyZW4oQWJzdHJhY3RTbG90VmlzaXRvciYpOwor
ICAgIGJvb2wgaXNLbm93blRvQmVMaXZlRHVyaW5nR0MoQWJzdHJhY3RTbG90VmlzaXRvciYpOwor
ICAgIGJvb2wgaXNLbm93blRvQmVMaXZlQWZ0ZXJHQygpOwogICAgIHZvaWQgZmluYWxpemVJbkdD
KCk7CiAgICAgdm9pZCBjYW5jZWwoKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdQbGFuSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHUGxhbklubGluZXMuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdQbGFuSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNy0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzIsOSArMzIs
OSBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAjaWYgRU5BQkxFKERGR19KSVQp
CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+Ci12b2lkIFBsYW46Oml0ZXJhdGVDb2RlQmxvY2tz
Rm9yR0MoY29uc3QgRnVuYyYgZnVuYykKK3ZvaWQgUGxhbjo6aXRlcmF0ZUNvZGVCbG9ja3NGb3JH
QyhBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBGdW5jJiBmdW5jKQogewotICAg
IGlmICghaXNLbm93blRvQmVMaXZlRHVyaW5nR0MoKSkKKyAgICBpZiAoIWlzS25vd25Ub0JlTGl2
ZUR1cmluZ0dDKHZpc2l0b3IpKQogICAgICAgICByZXR1cm47CiAgICAgCiAgICAgLy8gQ29tcGls
YXRpb24gd3JpdGVzIGxvdHMgb2YgdmFsdWVzIHRvIGEgQ29kZUJsb2NrIHdpdGhvdXQgcGVyZm9y
bWluZwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlcG9pbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZXBvaW50LmNwcAko
cmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlcG9p
bnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxNC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODMsMjggKzgzLDM4IEBAIHZvaWQgU2FmZXBvaW50
OjpiZWdpbigpCiAgICAgfQogfQogCi12b2lkIFNhZmVwb2ludDo6Y2hlY2tMaXZlbmVzc0FuZFZp
c2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIFNhZmVwb2ludDo6Y2hlY2tM
aXZlbmVzc0FuZFZpc2l0Q2hpbGRyZW4oQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsK
ICAgICBSRUxFQVNFX0FTU0VSVChtX2RpZENhbGxCZWdpbik7CiAKICAgICBpZiAobV9yZXN1bHQu
bV9kaWRHZXRDYW5jZWxsZWQpCiAgICAgICAgIHJldHVybjsgLy8gV2Ugd2VyZSBjYW5jZWxsZWQg
ZHVyaW5nIGEgcHJldmlvdXMgR0MhCiAgICAgCi0gICAgaWYgKCFpc0tub3duVG9CZUxpdmVEdXJp
bmdHQygpKQorICAgIGlmICghaXNLbm93blRvQmVMaXZlRHVyaW5nR0ModmlzaXRvcikpCiAgICAg
ICAgIHJldHVybjsKICAgICAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX3NjYW5uYWJsZXMuc2l6
ZSgpOyBpLS07KQogICAgICAgICBtX3NjYW5uYWJsZXNbaV0tPnZpc2l0Q2hpbGRyZW4odmlzaXRv
cik7CiB9CiAKLWJvb2wgU2FmZXBvaW50Ojppc0tub3duVG9CZUxpdmVEdXJpbmdHQygpCitib29s
IFNhZmVwb2ludDo6aXNLbm93blRvQmVMaXZlRHVyaW5nR0MoQWJzdHJhY3RTbG90VmlzaXRvciYg
dmlzaXRvcikKIHsKICAgICBSRUxFQVNFX0FTU0VSVChtX2RpZENhbGxCZWdpbik7CiAgICAgCiAg
ICAgaWYgKG1fcmVzdWx0Lm1fZGlkR2V0Q2FuY2VsbGVkKQogICAgICAgICByZXR1cm4gdHJ1ZTsg
Ly8gV2Ugd2VyZSBjYW5jZWxsZWQgZHVyaW5nIGEgcHJldmlvdXMgR0MsIHNvIGxldCdzIG5vdCBt
ZXNzIHdpdGggaXQgdGhpcyB0aW1lIGFyb3VuZCAtIHByZXRlbmQgaXQncyBsaXZlIGFuZCBtb3Zl
IG9uLgogICAgIAotICAgIHJldHVybiBtX3BsYW4uaXNLbm93blRvQmVMaXZlRHVyaW5nR0MoKTsK
KyAgICByZXR1cm4gbV9wbGFuLmlzS25vd25Ub0JlTGl2ZUR1cmluZ0dDKHZpc2l0b3IpOworfQor
Citib29sIFNhZmVwb2ludDo6aXNLbm93blRvQmVMaXZlQWZ0ZXJHQygpCit7CisgICAgUkVMRUFT
RV9BU1NFUlQobV9kaWRDYWxsQmVnaW4pOworICAgIAorICAgIGlmIChtX3Jlc3VsdC5tX2RpZEdl
dENhbmNlbGxlZCkKKyAgICAgICAgcmV0dXJuIHRydWU7IC8vIFdlIHdlcmUgY2FuY2VsbGVkIGR1
cmluZyBhIHByZXZpb3VzIEdDLCBzbyBsZXQncyBub3QgbWVzcyB3aXRoIGl0IHRoaXMgdGltZSBh
cm91bmQgLSBwcmV0ZW5kIGl0J3MgbGl2ZSBhbmQgbW92ZSBvbi4KKyAgICAKKyAgICByZXR1cm4g
bV9wbGFuLmlzS25vd25Ub0JlTGl2ZUFmdGVyR0MoKTsKIH0KIAogdm9pZCBTYWZlcG9pbnQ6OmNh
bmNlbCgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVwb2ludC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZXBvaW50LmgJKHJl
dmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZXBvaW50
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDE0LCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzEsNyArMzEsNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsK
IAotY2xhc3MgU2xvdFZpc2l0b3I7CitjbGFzcyBBYnN0cmFjdFNsb3RWaXNpdG9yOwogY2xhc3Mg
Vk07CiAKIG5hbWVzcGFjZSBERkcgewpAQCAtNjYsOSArNjYsMTAgQEAgcHVibGljOgogICAgIHZv
aWQgYWRkKFNjYW5uYWJsZSopOwogICAgIAogICAgIHZvaWQgYmVnaW4oKTsKLSAgICAKLSAgICB2
b2lkIGNoZWNrTGl2ZW5lc3NBbmRWaXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJik7Ci0gICAgYm9v
bCBpc0tub3duVG9CZUxpdmVEdXJpbmdHQygpOworCisgICAgdm9pZCBjaGVja0xpdmVuZXNzQW5k
VmlzaXRDaGlsZHJlbihBYnN0cmFjdFNsb3RWaXNpdG9yJik7CisgICAgYm9vbCBpc0tub3duVG9C
ZUxpdmVEdXJpbmdHQyhBYnN0cmFjdFNsb3RWaXNpdG9yJik7CisgICAgYm9vbCBpc0tub3duVG9C
ZUxpdmVBZnRlckdDKCk7CiAgICAgdm9pZCBjYW5jZWwoKTsKICAgICAKICAgICBWTSogdm0oKSBj
b25zdDsgLy8gTWF5IHJldHVybiBudWxsIGlmIHdlJ3ZlIGJlZW4gY2FuY2VsbGVkLgpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTY2FubmFibGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NjYW5uYWJsZS5oCShyZXZpc2lvbiAyNzI4MzAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NjYW5uYWJsZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAyMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTI5LDcgKzI5LDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLWNsYXNzIFNsb3RWaXNpdG9y
OworY2xhc3MgQWJzdHJhY3RTbG90VmlzaXRvcjsKIAogbmFtZXNwYWNlIERGRyB7CiAKQEAgLTM4
LDcgKzM4LDcgQEAgcHVibGljOgogICAgIFNjYW5uYWJsZSgpIHsgfQogICAgIHZpcnR1YWwgflNj
YW5uYWJsZSgpIHsgfQogICAgIAotICAgIHZpcnR1YWwgdm9pZCB2aXNpdENoaWxkcmVuKFNsb3RW
aXNpdG9yJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdENoaWxkcmVuKEFic3RyYWN0U2xv
dFZpc2l0b3ImKSA9IDA7CiB9OwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0LmNwcAkocmV2aXNpb24gMjcyODMw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjAgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0zNzIsNyArMzcyLDcgQEAgdm9pZCBXb3JrbGlzdDo6cmVzdW1lQWxsVGhyZWFk
cygpCiAgICAgbV9zdXNwZW5zaW9uTG9jay51bmxvY2soKTsKIH0KIAotdm9pZCBXb3JrbGlzdDo6
dmlzaXRXZWFrUmVmZXJlbmNlcyhTbG90VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgV29ya2xpc3Q6
OnZpc2l0V2Vha1JlZmVyZW5jZXMoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAg
ICBWTSogdm0gPSAmdmlzaXRvci5oZWFwKCktPnZtKCk7CiAgICAgewpAQCAtNDA1LDcgKzQwNSw3
IEBAIHZvaWQgV29ya2xpc3Q6OnJlbW92ZURlYWRQbGFucyhWTSYgdm0pCiAgICAgICAgICAgICBQ
bGFuKiBwbGFuID0gaXRlci0+dmFsdWUuZ2V0KCk7CiAgICAgICAgICAgICBpZiAocGxhbi0+dm0o
KSAhPSAmdm0pCiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBpZiAocGxh
bi0+aXNLbm93blRvQmVMaXZlRHVyaW5nR0MoKSkgeworICAgICAgICAgICAgaWYgKHBsYW4tPmlz
S25vd25Ub0JlTGl2ZUFmdGVyR0MoKSkgewogICAgICAgICAgICAgICAgIHBsYW4tPmZpbmFsaXpl
SW5HQygpOwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQpAQCAtNDQw
LDcgKzQ0MCw3IEBAIHZvaWQgV29ya2xpc3Q6OnJlbW92ZURlYWRQbGFucyhWTSYgdm0pCiAgICAg
ICAgICAgICBjb250aW51ZTsKICAgICAgICAgaWYgKHNhZmVwb2ludC0+dm0oKSAhPSAmdm0pCiAg
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgaWYgKHNhZmVwb2ludC0+aXNLbm93blRvQmVM
aXZlRHVyaW5nR0MoKSkKKyAgICAgICAgaWYgKHNhZmVwb2ludC0+aXNLbm93blRvQmVMaXZlQWZ0
ZXJHQygpKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIHNhZmVwb2ludC0+Y2FuY2Vs
KCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3QuaAko
cmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlz
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzUsNyArMzUsNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsK
IAotY2xhc3MgU2xvdFZpc2l0b3I7CitjbGFzcyBBYnN0cmFjdFNsb3RWaXNpdG9yOwogCiBuYW1l
c3BhY2UgREZHIHsKIApAQCAtNTcsNyArNTcsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBjb21wbGV0
ZUFsbFBsYW5zRm9yVk0oVk0mKTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+Ci0gICAg
dm9pZCBpdGVyYXRlQ29kZUJsb2Nrc0ZvckdDKFZNJiwgY29uc3QgRnVuYyYpOworICAgIHZvaWQg
aXRlcmF0ZUNvZGVCbG9ja3NGb3JHQyhBYnN0cmFjdFNsb3RWaXNpdG9yJiwgVk0mLCBjb25zdCBG
dW5jJik7CiAKICAgICB2b2lkIHdhaXRVbnRpbEFsbFBsYW5zRm9yVk1BcmVSZWFkeShWTSYpOwog
ICAgIFN0YXRlIGNvbXBsZXRlQWxsUmVhZHlQbGFuc0ZvclZNKFZNJiwgQ29tcGlsYXRpb25LZXkg
PSBDb21waWxhdGlvbktleSgpKTsKQEAgLTczLDcgKzczLDcgQEAgcHVibGljOgogICAgIGJvb2wg
aXNBY3RpdmVGb3JWTShWTSYpIGNvbnN0OwogICAgIAogICAgIC8vIE9ubHkgY2FsbGVkIG9uIHRo
ZSBtYWluIHRocmVhZCBhZnRlciBzdXNwZW5kaW5nIGFsbCB0aHJlYWRzLgotICAgIHZvaWQgdmlz
aXRXZWFrUmVmZXJlbmNlcyhTbG90VmlzaXRvciYpOworICAgIHZvaWQgdmlzaXRXZWFrUmVmZXJl
bmNlcyhBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAgICAgdm9pZCByZW1vdmVEZWFkUGxhbnMoVk0m
KTsKICAgICAKICAgICB2b2lkIHJlbW92ZU5vbkNvbXBpbGluZ1BsYW5zRm9yVk0oVk0mKTsKQEAg
LTE0NCw3ICsxNDQsNyBAQCBXb3JrbGlzdCYgZXhpc3RpbmdXb3JrbGlzdEZvckluZGV4KHVuc2ln
CiB2b2lkIGNvbXBsZXRlQWxsUGxhbnNGb3JWTShWTSYpOwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBG
dW5jPgotdm9pZCBpdGVyYXRlQ29kZUJsb2Nrc0ZvckdDKFZNJiwgY29uc3QgRnVuYyYpOwordm9p
ZCBpdGVyYXRlQ29kZUJsb2Nrc0ZvckdDKEFic3RyYWN0U2xvdFZpc2l0b3ImLCBWTSYsIGNvbnN0
IEZ1bmMmKTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3RJbmxpbmVzLmgJKHJldmlzaW9uIDI3Mjgz
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3RJbmxpbmVzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3LTIw
MTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3
LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0zMywzMCArMzMsMzAgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBERkcgewogI2lmIEVOQUJMRShERkdfSklUKQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgot
dm9pZCBpdGVyYXRlQ29kZUJsb2Nrc0ZvckdDKFZNJiB2bSwgY29uc3QgRnVuYyYgZnVuYykKK3Zv
aWQgaXRlcmF0ZUNvZGVCbG9ja3NGb3JHQyhBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBW
TSYgdm0sIGNvbnN0IEZ1bmMmIGZ1bmMpCiB7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gREZHOjpu
dW1iZXJPZldvcmtsaXN0cygpOyBpLS07KSB7CiAgICAgICAgIGlmIChERkc6OldvcmtsaXN0KiB3
b3JrbGlzdCA9IERGRzo6ZXhpc3RpbmdXb3JrbGlzdEZvckluZGV4T3JOdWxsKGkpKQotICAgICAg
ICAgICAgd29ya2xpc3QtPml0ZXJhdGVDb2RlQmxvY2tzRm9yR0Modm0sIGZ1bmMpOworICAgICAg
ICAgICAgd29ya2xpc3QtPml0ZXJhdGVDb2RlQmxvY2tzRm9yR0ModmlzaXRvciwgdm0sIGZ1bmMp
OwogICAgIH0KIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KLXZvaWQgV29ya2xpc3Q6Oml0
ZXJhdGVDb2RlQmxvY2tzRm9yR0MoVk0mIHZtLCBjb25zdCBGdW5jJiBmdW5jKQordm9pZCBXb3Jr
bGlzdDo6aXRlcmF0ZUNvZGVCbG9ja3NGb3JHQyhBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9y
LCBWTSYgdm0sIGNvbnN0IEZ1bmMmIGZ1bmMpCiB7CiAgICAgTG9ja0hvbGRlciBsb2NrZXIoKm1f
bG9jayk7CiAgICAgZm9yIChQbGFuTWFwOjppdGVyYXRvciBpdGVyID0gbV9wbGFucy5iZWdpbigp
OyBpdGVyICE9IG1fcGxhbnMuZW5kKCk7ICsraXRlcikgewogICAgICAgICBQbGFuKiBwbGFuID0g
aXRlci0+dmFsdWUuZ2V0KCk7CiAgICAgICAgIGlmIChwbGFuLT52bSgpICE9ICZ2bSkKICAgICAg
ICAgICAgIGNvbnRpbnVlOwotICAgICAgICBwbGFuLT5pdGVyYXRlQ29kZUJsb2Nrc0ZvckdDKGZ1
bmMpOworICAgICAgICBwbGFuLT5pdGVyYXRlQ29kZUJsb2Nrc0ZvckdDKHZpc2l0b3IsIGZ1bmMp
OwogICAgIH0KIH0KIAogI2Vsc2UgLy8gRU5BQkxFKERGR19KSVQpCiAKIHRlbXBsYXRlPHR5cGVu
YW1lIEZ1bmM+Ci12b2lkIGl0ZXJhdGVDb2RlQmxvY2tzRm9yR0MoVk0mLCBjb25zdCBGdW5jJikK
K3ZvaWQgaXRlcmF0ZUNvZGVCbG9ja3NGb3JHQyhBYnN0cmFjdFNsb3RWaXNpdG9yJiwgVk0mLCBj
b25zdCBGdW5jJikKIHsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQWJz
dHJhY3RTbG90VmlzaXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0Fic3RyYWN0U2xvdFZpc2l0b3IuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9BYnN0cmFjdFNsb3RWaXNpdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwyMDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkpTQ0pTVmFsdWUuaCIKKyNpbmNsdWRlICJNYXJr
U3RhY2suaCIKKyNpbmNsdWRlICJSb290TWFya1JlYXNvbi5oIgorI2luY2x1ZGUgIlZpc2l0UmFj
ZUtleS5oIgorI2luY2x1ZGUgPHd0Zi9Db25jdXJyZW50UHRySGFzaFNldC5oPgorI2luY2x1ZGUg
PHd0Zi9TaGFyZWRUYXNrLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1l
c3BhY2UgSlNDIHsKKworY2xhc3MgQ29uc2VydmF0aXZlUm9vdHM7CitjbGFzcyBIZWFwOworY2xh
c3MgSGVhcENlbGw7CitjbGFzcyBKU0NlbGw7CitjbGFzcyBNYXJrZWRCbG9jazsKK2NsYXNzIE1h
cmtpbmdDb25zdHJhaW50OworY2xhc3MgTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXI7CitjbGFzcyBQ
cmVjaXNlQWxsb2NhdGlvbjsKK2NsYXNzIFNsb3RWaXNpdG9yOworY2xhc3MgVk07CitjbGFzcyBW
ZXJpZmllclNsb3RWaXNpdG9yOwordGVtcGxhdGU8dHlwZW5hbWUgVD4gY2xhc3MgV2VhazsKK3Rl
bXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFRyYWl0cz4gY2xhc3MgV3JpdGVCYXJyaWVyQmFz
ZTsKKworY2xhc3MgQWJzdHJhY3RTbG90VmlzaXRvciB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFC
TEUoQWJzdHJhY3RTbG90VmlzaXRvcik7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Citw
dWJsaWM6CisgICAgY2xhc3MgQ29udGV4dCB7CisgICAgcHVibGljOgorICAgICAgICBDb250ZXh0
KEFic3RyYWN0U2xvdFZpc2l0b3ImLCBIZWFwQ2VsbCopOworICAgICAgICB+Q29udGV4dCgpOwor
ICAgICAgICBIZWFwQ2VsbCogY2VsbCgpIGNvbnN0IHsgcmV0dXJuIG1fY2VsbDsgfQorICAgIHBy
aXZhdGU6CisgICAgICAgIEFic3RyYWN0U2xvdFZpc2l0b3ImIG1fdmlzaXRvcjsKKyAgICAgICAg
SGVhcENlbGwqIG1fY2VsbDsKKyAgICAgICAgQ29udGV4dCogbV9wcmV2aW91czsKKyAgICB9Owor
CisgICAgY2xhc3MgU3VwcHJlc3NHQ1ZlcmlmaWVyU2NvcGUgeworICAgIHB1YmxpYzoKKyAgICAg
ICAgU3VwcHJlc3NHQ1ZlcmlmaWVyU2NvcGUoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikK
KyAgICAgICAgICAgIDogbV92aXNpdG9yKHZpc2l0b3IpCisgICAgICAgIHsKKyAgICAgICAgICAg
IEFTU0VSVCghbV92aXNpdG9yLm1fc3VwcHJlc3NWZXJpZmllcik7CisgICAgICAgICAgICBtX3Zp
c2l0b3IubV9zdXBwcmVzc1ZlcmlmaWVyID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICB+U3Vw
cHJlc3NHQ1ZlcmlmaWVyU2NvcGUoKSB7IG1fdmlzaXRvci5tX3N1cHByZXNzVmVyaWZpZXIgPSBm
YWxzZTsgfQorICAgIHByaXZhdGU6CisgICAgICAgIEFic3RyYWN0U2xvdFZpc2l0b3ImIG1fdmlz
aXRvcjsKKyAgICB9OworCisgICAgY2xhc3MgRGVmYXVsdE1hcmtpbmdWaW9sYXRpb25Bc3NlcnRp
b25TY29wZSB7CisgICAgcHVibGljOgorICAgICAgICBEZWZhdWx0TWFya2luZ1Zpb2xhdGlvbkFz
c2VydGlvblNjb3BlKEFic3RyYWN0U2xvdFZpc2l0b3ImKSB7IH0KKyAgICB9OworCisgICAgdmly
dHVhbCB+QWJzdHJhY3RTbG90VmlzaXRvcigpID0gZGVmYXVsdDsKKworICAgIE1hcmtTdGFja0Fy
cmF5JiBjb2xsZWN0b3JNYXJrU3RhY2soKSB7IHJldHVybiBtX2NvbGxlY3RvclN0YWNrOyB9Cisg
ICAgTWFya1N0YWNrQXJyYXkmIG11dGF0b3JNYXJrU3RhY2soKSB7IHJldHVybiBtX211dGF0b3JT
dGFjazsgfQorICAgIGNvbnN0IE1hcmtTdGFja0FycmF5JiBjb2xsZWN0b3JNYXJrU3RhY2soKSBj
b25zdCB7IHJldHVybiBtX2NvbGxlY3RvclN0YWNrOyB9CisgICAgY29uc3QgTWFya1N0YWNrQXJy
YXkmIG11dGF0b3JNYXJrU3RhY2soKSBjb25zdCB7IHJldHVybiBtX211dGF0b3JTdGFjazsgfQor
CisgICAgYm9vbCBpc0VtcHR5KCkgeyByZXR1cm4gbV9jb2xsZWN0b3JTdGFjay5pc0VtcHR5KCkg
JiYgbV9tdXRhdG9yU3RhY2suaXNFbXB0eSgpOyB9CisKKyAgICBWTSYgdm0oKTsKKyAgICBjb25z
dCBWTSYgdm0oKSBjb25zdDsKKyAgICBIZWFwKiBoZWFwKCkgY29uc3Q7CisKKyAgICB2aXJ0dWFs
IHZvaWQgYXBwZW5kKGNvbnN0IENvbnNlcnZhdGl2ZVJvb3RzJikgPSAwOworCisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVHJhaXRzPiB2b2lkIGFwcGVuZChjb25zdCBXcml0ZUJh
cnJpZXJCYXNlPFQsIFRyYWl0cz4mKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFt
ZSBUcmFpdHM+IHZvaWQgYXBwZW5kSGlkZGVuKGNvbnN0IFdyaXRlQmFycmllckJhc2U8VCwgVHJh
aXRzPiYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEl0ZXJhdG9yPiB2b2lkIGFwcGVuZChJdGVy
YXRvciBiZWdpbiAsIEl0ZXJhdG9yIGVuZCk7CisgICAgQUxXQVlTX0lOTElORSB2b2lkIGFwcGVu
ZFZhbHVlcyhjb25zdCBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24sIFJhd1ZhbHVlVHJhaXRzPFVu
a25vd24+PiosIHNpemVfdCBjb3VudCk7CisgICAgQUxXQVlTX0lOTElORSB2b2lkIGFwcGVuZFZh
bHVlc0hpZGRlbihjb25zdCBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24sIFJhd1ZhbHVlVHJhaXRz
PFVua25vd24+PiosIHNpemVfdCBjb3VudCk7CisKKyAgICAvLyBUaGVzZSBkb24ndCByZXF1aXJl
IHlvdSB0byBwcm92ZSB0aGF0IHlvdSBoYXZlIGEgV3JpdGVCYXJyaWVyPD4uIFRoYXQgbWFrZXMg
c2Vuc2UKKyAgICAvLyBmb3I6CisgICAgLy8KKyAgICAvLyAtIHJvb3RzLgorICAgIC8vIC0gc29w
aGlzdGljYXRlZCBkYXRhIHN0cnVjdHVyZXMgdGhhdCBiYXJyaWVyIHRocm91Z2ggb3RoZXIgbWVh
bnMgKGxpa2UgREZHOjpQbGFuIGFuZAorICAgIC8vICAgZnJpZW5kcykuCisgICAgLy8KKyAgICAv
LyBJZiB5b3UgYXJlIG5vdCBhIHJvb3QgYW5kIHlvdSBkb24ndCBrbm93IHdoYXQga2luZCBvZiBi
YXJyaWVyIHlvdSBoYXZlLCB0aGVuIHlvdQorICAgIC8vIHNob3VsZG4ndCBjYWxsIHRoZXNlIG1l
dGhvZHMuCisgICAgQUxXQVlTX0lOTElORSB2b2lkIGFwcGVuZFVuYmFycmllcmVkKEpTVmFsdWUp
OworICAgIEFMV0FZU19JTkxJTkUgdm9pZCBhcHBlbmRVbmJhcnJpZXJlZChKU1ZhbHVlKiwgc2l6
ZV90KTsKKyAgICB2aXJ0dWFsIHZvaWQgYXBwZW5kVW5iYXJyaWVyZWQoSlNDZWxsKikgPSAwOwor
CisgICAgaW5saW5lIGJvb2wgYWRkT3BhcXVlUm9vdCh2b2lkKik7IC8vIFJldHVybnMgdHJ1ZSBp
ZiB0aGUgcm9vdCB3YXMgbmV3LgorICAgIGlubGluZSBib29sIGNvbnRhaW5zT3BhcXVlUm9vdCh2
b2lkKikgY29uc3Q7CisgICAgdm9pZCBzZXRJZ25vcmVOZXdPcGFxdWVSb290cyhib29sIHZhbHVl
KSB7IG1faWdub3JlTmV3T3BhcXVlUm9vdHMgPSB2YWx1ZTsgfQorCisgICAgdmlydHVhbCBib29s
IGlzRmlyc3RWaXNpdCgpIGNvbnN0ID0gMDsKKworICAgIHZpcnR1YWwgYm9vbCBpc01hcmtlZChj
b25zdCB2b2lkKikgY29uc3QgPSAwOworICAgIHZpcnR1YWwgYm9vbCBpc01hcmtlZChNYXJrZWRC
bG9jayYsIEhlYXBDZWxsKikgY29uc3QgPSAwOworICAgIHZpcnR1YWwgYm9vbCBpc01hcmtlZChQ
cmVjaXNlQWxsb2NhdGlvbiYsIEhlYXBDZWxsKikgY29uc3QgPSAwOworCisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgVD4KKyAgICB2b2lkIGFwcGVuZChjb25zdCBXZWFrPFQ+Jik7CisKKyAgICBBTFdB
WVNfSU5MSU5FIHZvaWQgYXBwZW5kSGlkZGVuVW5iYXJyaWVyZWQoSlNWYWx1ZSk7CisgICAgdmly
dHVhbCB2b2lkIGFwcGVuZEhpZGRlblVuYmFycmllcmVkKEpTQ2VsbCopID0gMDsKKworICAgIHNp
emVfdCB2aXNpdENvdW50KCkgY29uc3QgeyByZXR1cm4gbV92aXNpdENvdW50OyB9CisKKyAgICB2
b2lkIGFkZFRvVmlzaXRDb3VudChzaXplX3QgdmFsdWUpIHsgbV92aXNpdENvdW50ICs9IHZhbHVl
OyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYWRkUGFyYWxsZWxDb25zdHJhaW50VGFzayhSZWZQdHI8
U2hhcmVkVGFzazx2b2lkKEFic3RyYWN0U2xvdFZpc2l0b3ImKT4+KSA9IDA7CisKKyAgICB2aXJ0
dWFsIHZvaWQgbWFya0F1eGlsaWFyeShjb25zdCB2b2lkKiBiYXNlKSA9IDA7CisKKyAgICB2aXJ0
dWFsIHZvaWQgcmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKHNpemVfdCkgPSAwOworI2lmIEVOQUJM
RShSRVNPVVJDRV9VU0FHRSkKKyAgICB2aXJ0dWFsIHZvaWQgcmVwb3J0RXh0ZXJuYWxNZW1vcnlW
aXNpdGVkKHNpemVfdCkgPSAwOworI2VuZGlmCisKKyAgICB2aXJ0dWFsIHZvaWQgZHVtcChQcmlu
dFN0cmVhbSYpIGNvbnN0ID0gMDsKKworICAgIFJvb3RNYXJrUmVhc29uIHJvb3RNYXJrUmVhc29u
KCkgY29uc3QgeyByZXR1cm4gbV9yb290TWFya1JlYXNvbjsgfQorICAgIHZvaWQgc2V0Um9vdE1h
cmtSZWFzb24oUm9vdE1hcmtSZWFzb24gcmVhc29uKSB7IG1fcm9vdE1hcmtSZWFzb24gPSByZWFz
b247IH0KKworICAgIHZpcnR1YWwgYm9vbCBtdXRhdG9ySXNTdG9wcGVkKCkgY29uc3QgPSAwOwor
CisgICAgdmlydHVhbCB2b2lkIGRpZFJhY2UoY29uc3QgVmlzaXRSYWNlS2V5JikgPSAwOworICAg
IHZvaWQgZGlkUmFjZShKU0NlbGwqIGNlbGwsIGNvbnN0IGNoYXIqIHJlYXNvbikgeyBkaWRSYWNl
KFZpc2l0UmFjZUtleShjZWxsLCByZWFzb24pKTsgfQorCisgICAgdmlydHVhbCB2b2lkIHZpc2l0
QXNDb25zdHJhaW50KGNvbnN0IEpTQ2VsbCopID0gMDsKKworICAgIGNvbnN0IGNoYXIqIGNvZGVO
YW1lKCkgY29uc3QgeyByZXR1cm4gbV9jb2RlTmFtZS5kYXRhKCk7IH0KKworcHJvdGVjdGVkOgor
ICAgIGlubGluZSBBYnN0cmFjdFNsb3RWaXNpdG9yKEhlYXAmLCBDU3RyaW5nIGNvZGVOYW1lLCBD
b25jdXJyZW50UHRySGFzaFNldCYpOworCisgICAgSGVhcENlbGwqIHBhcmVudENlbGwoKSBjb25z
dDsKKyAgICB2b2lkIHJlc2V0KCk7CisKKyAgICBNYXJrU3RhY2tBcnJheSBtX2NvbGxlY3RvclN0
YWNrOworICAgIE1hcmtTdGFja0FycmF5IG1fbXV0YXRvclN0YWNrOworCisgICAgc2l6ZV90IG1f
dmlzaXRDb3VudCB7IDAgfTsKKworICAgIEhlYXAmIG1faGVhcDsKKyAgICBDb250ZXh0KiBtX2Nv
bnRleHQgeyBudWxscHRyIH07CisgICAgQ1N0cmluZyBtX2NvZGVOYW1lOworCisgICAgTWFya2lu
Z0NvbnN0cmFpbnQqIG1fY3VycmVudENvbnN0cmFpbnQgeyBudWxscHRyIH07CisgICAgTWFya2lu
Z0NvbnN0cmFpbnRTb2x2ZXIqIG1fY3VycmVudFNvbHZlciB7IG51bGxwdHIgfTsKKyAgICBDb25j
dXJyZW50UHRySGFzaFNldCYgbV9vcGFxdWVSb290czsKKworICAgIFJvb3RNYXJrUmVhc29uIG1f
cm9vdE1hcmtSZWFzb24geyBSb290TWFya1JlYXNvbjo6Tm9uZSB9OworICAgIGJvb2wgbV9zdXBw
cmVzc1ZlcmlmaWVyIHsgZmFsc2UgfTsKKyAgICBib29sIG1faWdub3JlTmV3T3BhcXVlUm9vdHMg
eyBmYWxzZSB9OyAvLyBVc2VmdWwgYXMgYSBkZWJ1Z2dpbmcgbW9kZS4KKworICAgIGZyaWVuZCBj
bGFzcyBNYXJraW5nQ29uc3RyYWludFNvbHZlcjsKK307CisKK2NsYXNzIFNldFJvb3RNYXJrUmVh
c29uU2NvcGUgeworcHVibGljOgorICAgIFNldFJvb3RNYXJrUmVhc29uU2NvcGUoQWJzdHJhY3RT
bG90VmlzaXRvciYgdmlzaXRvciwgUm9vdE1hcmtSZWFzb24gcmVhc29uKQorICAgICAgICA6IG1f
dmlzaXRvcih2aXNpdG9yKQorICAgICAgICAsIG1fcHJldmlvdXNSZWFzb24odmlzaXRvci5yb290
TWFya1JlYXNvbigpKQorICAgIHsKKyAgICAgICAgbV92aXNpdG9yLnNldFJvb3RNYXJrUmVhc29u
KHJlYXNvbik7CisgICAgfQorCisgICAgflNldFJvb3RNYXJrUmVhc29uU2NvcGUoKQorICAgIHsK
KyAgICAgICAgbV92aXNpdG9yLnNldFJvb3RNYXJrUmVhc29uKG1fcHJldmlvdXNSZWFzb24pOwor
ICAgIH0KKworcHJpdmF0ZToKKyAgICBBYnN0cmFjdFNsb3RWaXNpdG9yJiBtX3Zpc2l0b3I7Cisg
ICAgUm9vdE1hcmtSZWFzb24gbV9wcmV2aW91c1JlYXNvbjsKK307CisKK30gLy8gbmFtZXNwYWNl
IEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQWJzdHJhY3RTbG90VmlzaXRv
cklubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9BYnN0
cmFjdFNsb3RWaXNpdG9ySW5saW5lcy5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0Fic3RyYWN0U2xvdFZpc2l0b3JJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwxNTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkFic3RyYWN0U2xvdFZpc2l0b3IuaCIK
KyNpbmNsdWRlICJIZWFwLmgiCisjaW5jbHVkZSAiV2Vha0lubGluZXMuaCIKKyNpbmNsdWRlICJX
cml0ZUJhcnJpZXIuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2lubGluZSBBYnN0cmFjdFNsb3RW
aXNpdG9yOjpDb250ZXh0OjpDb250ZXh0KEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIEhl
YXBDZWxsKiBjZWxsKQorICAgIDogbV92aXNpdG9yKHZpc2l0b3IpCisgICAgLCBtX2NlbGwoY2Vs
bCkKK3sKKyAgICBtX3ByZXZpb3VzID0gbV92aXNpdG9yLm1fY29udGV4dDsKKyAgICBtX3Zpc2l0
b3IubV9jb250ZXh0ID0gdGhpczsKK30KKworaW5saW5lIEFic3RyYWN0U2xvdFZpc2l0b3I6OkNv
bnRleHQ6On5Db250ZXh0KCkKK3sKKyAgICBtX3Zpc2l0b3IubV9jb250ZXh0ID0gbV9wcmV2aW91
czsKK30KKworaW5saW5lIEFic3RyYWN0U2xvdFZpc2l0b3I6OkFic3RyYWN0U2xvdFZpc2l0b3Io
SGVhcCYgaGVhcCwgQ1N0cmluZyBjb2RlTmFtZSwgQ29uY3VycmVudFB0ckhhc2hTZXQmIG9wYXF1
ZVJvb3RzKQorICAgIDogbV9oZWFwKGhlYXApCisgICAgLCBtX2NvZGVOYW1lKGNvZGVOYW1lKQor
ICAgICwgbV9vcGFxdWVSb290cyhvcGFxdWVSb290cykKK3sKK30KKworaW5saW5lIEhlYXAqIEFi
c3RyYWN0U2xvdFZpc2l0b3I6OmhlYXAoKSBjb25zdAoreworICAgIHJldHVybiAmbV9oZWFwOwor
fQorCitpbmxpbmUgVk0mIEFic3RyYWN0U2xvdFZpc2l0b3I6OnZtKCkKK3sKKyAgICByZXR1cm4g
bV9oZWFwLnZtKCk7Cit9CisKK2lubGluZSBjb25zdCBWTSYgQWJzdHJhY3RTbG90VmlzaXRvcjo6
dm0oKSBjb25zdAoreworICAgIHJldHVybiBtX2hlYXAudm0oKTsKK30KKworaW5saW5lIGJvb2wg
QWJzdHJhY3RTbG90VmlzaXRvcjo6YWRkT3BhcXVlUm9vdCh2b2lkKiBwdHIpCit7CisgICAgaWYg
KCFwdHIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAobV9pZ25vcmVOZXdPcGFxdWVS
b290cykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghbV9vcGFxdWVSb290cy5hZGQo
cHRyKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIG1fdmlzaXRDb3VudCsrOworICAgIHJl
dHVybiB0cnVlOworfQorCitpbmxpbmUgYm9vbCBBYnN0cmFjdFNsb3RWaXNpdG9yOjpjb250YWlu
c09wYXF1ZVJvb3Qodm9pZCogcHRyKSBjb25zdAoreworICAgIHJldHVybiBtX29wYXF1ZVJvb3Rz
LmNvbnRhaW5zKHB0cik7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitBTFdBWVNfSU5MSU5F
IHZvaWQgQWJzdHJhY3RTbG90VmlzaXRvcjo6YXBwZW5kKGNvbnN0IFdlYWs8VD4mIHdlYWspCit7
CisgICAgYXBwZW5kVW5iYXJyaWVyZWQod2Vhay5nZXQoKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIFRyYWl0cz4KK0FMV0FZU19JTkxJTkUgdm9pZCBBYnN0cmFjdFNsb3RW
aXNpdG9yOjphcHBlbmQoY29uc3QgV3JpdGVCYXJyaWVyQmFzZTxULCBUcmFpdHM+JiBzbG90KQor
eworICAgIGFwcGVuZFVuYmFycmllcmVkKHNsb3QuZ2V0KCkpOworfQorCit0ZW1wbGF0ZTx0eXBl
bmFtZSBULCB0eXBlbmFtZSBUcmFpdHM+CitBTFdBWVNfSU5MSU5FIHZvaWQgQWJzdHJhY3RTbG90
VmlzaXRvcjo6YXBwZW5kSGlkZGVuKGNvbnN0IFdyaXRlQmFycmllckJhc2U8VCwgVHJhaXRzPiYg
c2xvdCkKK3sKKyAgICBhcHBlbmRIaWRkZW5VbmJhcnJpZXJlZChzbG90LmdldCgpKTsKK30KKwor
QUxXQVlTX0lOTElORSB2b2lkIEFic3RyYWN0U2xvdFZpc2l0b3I6OmFwcGVuZEhpZGRlblVuYmFy
cmllcmVkKEpTVmFsdWUgdmFsdWUpCit7CisgICAgaWYgKHZhbHVlLmlzQ2VsbCgpKQorICAgICAg
ICBhcHBlbmRIaWRkZW5VbmJhcnJpZXJlZCh2YWx1ZS5hc0NlbGwoKSk7Cit9CisKK3RlbXBsYXRl
PHR5cGVuYW1lIEl0ZXJhdG9yPgorQUxXQVlTX0lOTElORSB2b2lkIEFic3RyYWN0U2xvdFZpc2l0
b3I6OmFwcGVuZChJdGVyYXRvciBiZWdpbiwgSXRlcmF0b3IgZW5kKQoreworICAgIGZvciAoYXV0
byBpdCA9IGJlZ2luOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgIGFwcGVuZCgqaXQpOworfQor
CitBTFdBWVNfSU5MSU5FIHZvaWQgQWJzdHJhY3RTbG90VmlzaXRvcjo6YXBwZW5kVmFsdWVzKGNv
bnN0IFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4qIGJhcnJpZXJzLCBzaXplX3QgY291bnQpCit7
CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKQorICAgICAgICBhcHBlbmQo
YmFycmllcnNbaV0pOworfQorCitBTFdBWVNfSU5MSU5FIHZvaWQgQWJzdHJhY3RTbG90VmlzaXRv
cjo6YXBwZW5kVmFsdWVzSGlkZGVuKGNvbnN0IFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4qIGJh
cnJpZXJzLCBzaXplX3QgY291bnQpCit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3Vu
dDsgKytpKQorICAgICAgICBhcHBlbmRIaWRkZW4oYmFycmllcnNbaV0pOworfQorCitBTFdBWVNf
SU5MSU5FIHZvaWQgQWJzdHJhY3RTbG90VmlzaXRvcjo6YXBwZW5kVW5iYXJyaWVyZWQoSlNWYWx1
ZSB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUuaXNDZWxsKCkpCisgICAgICAgIGFwcGVuZFVuYmFy
cmllcmVkKHZhbHVlLmFzQ2VsbCgpKTsKK30KKworQUxXQVlTX0lOTElORSB2b2lkIEFic3RyYWN0
U2xvdFZpc2l0b3I6OmFwcGVuZFVuYmFycmllcmVkKEpTVmFsdWUqIHNsb3QsIHNpemVfdCBjb3Vu
dCkKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gY291bnQ7IGktLTspCisgICAgICAgIGFwcGVuZFVu
YmFycmllcmVkKHNsb3RbaV0pOworfQorCitBTFdBWVNfSU5MSU5FIEhlYXBDZWxsKiBBYnN0cmFj
dFNsb3RWaXNpdG9yOjpwYXJlbnRDZWxsKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fY29udGV4dCkK
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIG1fY29udGV4dC0+Y2VsbCgpOwor
fQorCitBTFdBWVNfSU5MSU5FIHZvaWQgQWJzdHJhY3RTbG90VmlzaXRvcjo6cmVzZXQoKQorewor
ICAgIG1fdmlzaXRDb3VudCA9IDA7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGFuZGxlU2V0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IYW5kbGVTZXQuY3BwCShyZXZpc2lvbiAyNzI4MzApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IYW5kbGVTZXQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMS0yMDE5IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDIxIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtNTYsNyArNTYsNyBAQCB2b2lkIEhhbmRsZVNldDo6Z3JvdygpCiAgICAgfQogfQogCi12
b2lkIEhhbmRsZVNldDo6dmlzaXRTdHJvbmdIYW5kbGVzKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQor
dm9pZCBIYW5kbGVTZXQ6OnZpc2l0U3Ryb25nSGFuZGxlcyhBYnN0cmFjdFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQogewogICAgIE5vZGUqIGVuZCA9IG1fc3Ryb25nTGlzdC5lbmQoKTsKICAgICBmb3Ig
KE5vZGUqIG5vZGUgPSBtX3N0cm9uZ0xpc3QuYmVnaW4oKTsgbm9kZSAhPSBlbmQ7IG5vZGUgPSBu
b2RlLT5uZXh0KCkpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hhbmRsZVNl
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hhbmRsZVNldC5o
CShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IYW5kbGVT
ZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTEtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTEtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM1LDEwICszNSwxMCBAQAogCiBuYW1lc3BhY2UgSlND
IHsKIAorY2xhc3MgQWJzdHJhY3RTbG90VmlzaXRvcjsKIGNsYXNzIEhhbmRsZVNldDsKIGNsYXNz
IFZNOwogY2xhc3MgSlNWYWx1ZTsKLWNsYXNzIFNsb3RWaXNpdG9yOwogCiBjbGFzcyBIYW5kbGVO
b2RlIHsKIHB1YmxpYzoKQEAgLTczLDcgKzczLDcgQEAgcHVibGljOgogICAgIEhhbmRsZVNsb3Qg
YWxsb2NhdGUoKTsKICAgICB2b2lkIGRlYWxsb2NhdGUoSGFuZGxlU2xvdCk7CiAKLSAgICB2b2lk
IHZpc2l0U3Ryb25nSGFuZGxlcyhTbG90VmlzaXRvciYpOworICAgIHZvaWQgdmlzaXRTdHJvbmdI
YW5kbGVzKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZv
aWQgd3JpdGVCYXJyaWVyKEhhbmRsZVNsb3QsIGNvbnN0IEpTVmFsdWUmKTsKIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Miw2ICs3Miw3
IEBACiAjaW5jbHVkZSAiVHlwZVByb2ZpbGVyLmgiCiAjaW5jbHVkZSAiVHlwZVByb2ZpbGVyTG9n
LmgiCiAjaW5jbHVkZSAiVk0uaCIKKyNpbmNsdWRlICJWZXJpZmllclNsb3RWaXNpdG9ySW5saW5l
cy5oIgogI2luY2x1ZGUgIldlYWtNYXBJbXBsSW5saW5lcy5oIgogI2luY2x1ZGUgIldlYWtTZXRJ
bmxpbmVzLmgiCiAjaW5jbHVkZSA8YWxnb3JpdGhtPgpAQCAtNjQ0LDE4ICs2NDUsMTggQEAgdm9p
ZCBIZWFwOjpjb21wbGV0ZUFsbEpJVFBsYW5zKCkKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgRnVu
Yz4KLXZvaWQgSGVhcDo6aXRlcmF0ZUV4ZWN1dGluZ0FuZENvbXBpbGluZ0NvZGVCbG9ja3MoY29u
c3QgRnVuYyYgZnVuYykKK3ZvaWQgSGVhcDo6aXRlcmF0ZUV4ZWN1dGluZ0FuZENvbXBpbGluZ0Nv
ZGVCbG9ja3MoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgRnVuYyYgZnVuYykK
IHsKICAgICBtX2NvZGVCbG9ja3MtPml0ZXJhdGVDdXJyZW50bHlFeGVjdXRpbmcoZnVuYyk7CiAg
ICAgaWYgKE9wdGlvbnM6OnVzZUpJVCgpKQotICAgICAgICBERkc6Oml0ZXJhdGVDb2RlQmxvY2tz
Rm9yR0MobV92bSwgZnVuYyk7CisgICAgICAgIERGRzo6aXRlcmF0ZUNvZGVCbG9ja3NGb3JHQyh2
aXNpdG9yLCBtX3ZtLCBmdW5jKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KLXZvaWQg
SGVhcDo6aXRlcmF0ZUV4ZWN1dGluZ0FuZENvbXBpbGluZ0NvZGVCbG9ja3NXaXRob3V0SG9sZGlu
Z0xvY2tzKGNvbnN0IEZ1bmMmIGZ1bmMpCit2b2lkIEhlYXA6Oml0ZXJhdGVFeGVjdXRpbmdBbmRD
b21waWxpbmdDb2RlQmxvY2tzV2l0aG91dEhvbGRpbmdMb2NrcyhBYnN0cmFjdFNsb3RWaXNpdG9y
JiB2aXNpdG9yLCBjb25zdCBGdW5jJiBmdW5jKQogewogICAgIFZlY3RvcjxDb2RlQmxvY2sqLCAy
NTY+IGNvZGVCbG9ja3M7Ci0gICAgaXRlcmF0ZUV4ZWN1dGluZ0FuZENvbXBpbGluZ0NvZGVCbG9j
a3MoCisgICAgaXRlcmF0ZUV4ZWN1dGluZ0FuZENvbXBpbGluZ0NvZGVCbG9ja3ModmlzaXRvciwK
ICAgICAgICAgWyZdIChDb2RlQmxvY2sqIGNvZGVCbG9jaykgewogICAgICAgICAgICAgY29kZUJs
b2Nrcy5hcHBlbmQoY29kZUJsb2NrKTsKICAgICAgICAgfSk7CkBAIC03MzMsMTQgKzczNCw2IEBA
IHZvaWQgSGVhcDo6cmVtb3ZlRGVhZENvbXBpbGVyV29ya2xpc3RFbnQKICNlbmRpZgogfQogCi1i
b29sIEhlYXA6OmlzQW5hbHl6aW5nSGVhcCgpIGNvbnN0Ci17Ci0gICAgSGVhcFByb2ZpbGVyKiBo
ZWFwUHJvZmlsZXIgPSBtX3ZtLmhlYXBQcm9maWxlcigpOwotICAgIGlmIChVTkxJS0VMWShoZWFw
UHJvZmlsZXIpKQotICAgICAgICByZXR1cm4gaGVhcFByb2ZpbGVyLT5hY3RpdmVIZWFwQW5hbHl6
ZXIoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KIHN0cnVjdCBHYXRoZXJFeHRyYUhlYXBEYXRh
IDogTWFya2VkQmxvY2s6OkNvdW50RnVuY3RvciB7CiAgICAgR2F0aGVyRXh0cmFIZWFwRGF0YShW
TSYgdm0sIEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCiAgICAgICAgIDogbV92bSh2bSkKQEAgLTE0
ODUsMTQgKzE0NzgsMjEgQEAgTkVWRVJfSU5MSU5FIGJvb2wgSGVhcDo6cnVuRW5kUGhhc2UoR0ND
bwogICAgIH0KICAgICBtX2hlbHBlckNsaWVudC5maW5pc2goKTsKICAgICAKLSAgICBpdGVyYXRl
RXhlY3V0aW5nQW5kQ29tcGlsaW5nQ29kZUJsb2NrcygKKyAgICBBU1NFUlQobV9tdXRhdG9yTWFy
a1N0YWNrLT5pc0VtcHR5KCkpOworICAgIEFTU0VSVChtX3JhY2VNYXJrU3RhY2stPmlzRW1wdHko
KSk7CisKKyAgICBTbG90VmlzaXRvciYgdmlzaXRvciA9ICptX2NvbGxlY3RvclNsb3RWaXNpdG9y
OworICAgIGl0ZXJhdGVFeGVjdXRpbmdBbmRDb21waWxpbmdDb2RlQmxvY2tzKHZpc2l0b3IsCiAg
ICAgICAgIFsmXSAoQ29kZUJsb2NrKiBjb2RlQmxvY2spIHsKICAgICAgICAgICAgIHdyaXRlQmFy
cmllcihjb2RlQmxvY2spOwogICAgICAgICB9KTsKLSAgICAgICAgCisKICAgICB1cGRhdGVPYmpl
Y3RDb3VudHMoKTsKICAgICBlbmRNYXJraW5nKCk7CiAKKyAgICBpZiAoVU5MSUtFTFkoT3B0aW9u
czo6dmVyaWZ5R0MoKSkpCisgICAgICAgIHZlcmlmeUdDKCk7CisKICAgICBpZiAoVU5MSUtFTFko
bV92ZXJpZmllcikpIHsKICAgICAgICAgbV92ZXJpZmllci0+Z2F0aGVyTGl2ZUNlbGxzKEhlYXBW
ZXJpZmllcjo6UGhhc2U6OkFmdGVyTWFya2luZyk7CiAgICAgICAgIG1fdmVyaWZpZXItPnZlcmlm
eShIZWFwVmVyaWZpZXI6OlBoYXNlOjpBZnRlck1hcmtpbmcpOwpAQCAtMjE3MCw2ICsyMTcwLDEx
IEBAIHZvaWQgSGVhcDo6c3VzcGVuZENvbXBpbGVyVGhyZWFkcygpCiAKIHZvaWQgSGVhcDo6d2ls
bFN0YXJ0Q29sbGVjdGlvbigpCiB7CisgICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OnZlcmlmeUdD
KCkpKSB7CisgICAgICAgIG1fdmVyaWZpZXJTbG90VmlzaXRvciA9IG1ha2VVbmlxdWU8VmVyaWZp
ZXJTbG90VmlzaXRvcj4oKnRoaXMpOworICAgICAgICBBU1NFUlQoIW1faXNNYXJraW5nRm9yR0NW
ZXJpZmllcik7CisgICAgfQorCiAgICAgZGF0YUxvZ0lmKE9wdGlvbnM6OmxvZ0dDKCksICI9PiAi
KTsKICAgICAKICAgICBpZiAoc2hvdWxkRG9GdWxsQ29sbGVjdGlvbigpKSB7CkBAIC0yNzAxLDkg
KzI3MDYsMTQgQEAgdm9pZCBIZWFwOjphZGRDb3JlQ29uc3RyYWludHMoKQogewogICAgIG1fY29u
c3RyYWludFNldC0+YWRkKAogICAgICAgICAiQ3MiLCAiQ29uc2VydmF0aXZlIFNjYW4iLAotICAg
ICAgICBbdGhpcywgbGFzdFZlcnNpb24gPSBzdGF0aWNfY2FzdDx1aW50NjRfdD4oMCldIChTbG90
VmlzaXRvciYgdmlzaXRvcikgbXV0YWJsZSB7CisgICAgICAgIFt0aGlzLCBsYXN0VmVyc2lvbiA9
IHN0YXRpY19jYXN0PHVpbnQ2NF90PigwKV0gKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3Ip
IG11dGFibGUgewogICAgICAgICAgICAgYm9vbCBzaG91bGROb3RQcm9kdWNlV29yayA9IGxhc3RW
ZXJzaW9uID09IG1fcGhhc2VWZXJzaW9uOwotICAgICAgICAgICAgaWYgKHNob3VsZE5vdFByb2R1
Y2VXb3JrKQorCisgICAgICAgICAgICAvLyBGb3IgdGhlIEdDIFZlcmZpZXIsIHdlIHdvdWxkIGxp
a2UgdG8gdXNlIHRoZSBpZGVudGljYWwgc2V0IG9mIGNvbnNlcnZhdGl2ZSByb290cworICAgICAg
ICAgICAgLy8gYXMgdGhlIHJlYWwgR0MuIE90aGVyd2lzZSwgdGhlIEdDIHZlcmlmaWVyIG1heSBy
ZXBvcnQgZmFsc2UgbmVnYXRpdmVzIGR1ZSB0bworICAgICAgICAgICAgLy8gdmFyaWF0aW9ucyBp
biBzdGFjayB2YWx1ZXMuIEZvciB0aGlzIHNhbWUgcmVhc29uLCB3ZSB3aWxsIHNraXAgdGhpcyBj
b25zdHJhaW50CisgICAgICAgICAgICAvLyB3aGVuIHdlJ3JlIHJ1bm5pbmcgdGhlIEdDIHZlcmlm
aWNhdGlvbiBpbiB0aGUgRW5kIHBoYXNlLgorICAgICAgICAgICAgaWYgKHNob3VsZE5vdFByb2R1
Y2VXb3JrIHx8IG1faXNNYXJraW5nRm9yR0NWZXJpZmllcikKICAgICAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgICAgICAKICAgICAgICAgICAgIFRpbWluZ1Njb3BlIHByZUNvbnZlcmdlbmNl
VGltaW5nU2NvcGUoKnRoaXMsICJDb25zdHJhaW50OiBjb25zZXJ2YXRpdmUgc2NhbiIpOwpAQCAt
MjcyMCwxMSArMjczMCwxNSBAQCB2b2lkIEhlYXA6OmFkZENvcmVDb25zdHJhaW50cygpCiAKICAg
ICAgICAgICAgICAgICBTZXRSb290TWFya1JlYXNvblNjb3BlIHJvb3RTY29wZSh2aXNpdG9yLCBS
b290TWFya1JlYXNvbjo6Q29uc2VydmF0aXZlU2Nhbik7CiAgICAgICAgICAgICAgICAgdmlzaXRv
ci5hcHBlbmQoY29uc2VydmF0aXZlUm9vdHMpOworICAgICAgICAgICAgICAgIGlmIChVTkxJS0VM
WShtX3ZlcmlmaWVyU2xvdFZpc2l0b3IpKQorICAgICAgICAgICAgICAgICAgICBtX3ZlcmlmaWVy
U2xvdFZpc2l0b3ItPmFwcGVuZChjb25zZXJ2YXRpdmVSb290cyk7CiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICBpZiAoT3B0aW9uczo6dXNlSklUKCkpIHsKICAgICAgICAgICAgICAgICAvLyBK
SVRTdHViUm91dGluZXMgbXVzdCBiZSB2aXNpdGVkIGFmdGVyIHNjYW5uaW5nIENvbnNlcnZhdGl2
ZVJvb3RzIHNpbmNlIEpJVFN0dWJSb3V0aW5lcyBkZXBlbmQgb24gdGhlIGhvb2sgZXhlY3V0ZWQg
ZHVyaW5nIGdhdGhlcmluZyBDb25zZXJ2YXRpdmVSb290cy4KICAgICAgICAgICAgICAgICBTZXRS
b290TWFya1JlYXNvblNjb3BlIHJvb3RTY29wZSh2aXNpdG9yLCBSb290TWFya1JlYXNvbjo6SklU
U3R1YlJvdXRpbmVzKTsKICAgICAgICAgICAgICAgICBtX2ppdFN0dWJSb3V0aW5lcy0+dHJhY2VN
YXJrZWRTdHViUm91dGluZXModmlzaXRvcik7CisgICAgICAgICAgICAgICAgaWYgKFVOTElLRUxZ
KG1fdmVyaWZpZXJTbG90VmlzaXRvcikpCisgICAgICAgICAgICAgICAgICAgIG1faml0U3R1YlJv
dXRpbmVzLT50cmFjZU1hcmtlZFN0dWJSb3V0aW5lcygqbV92ZXJpZmllclNsb3RWaXNpdG9yKTsK
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICAgICAgbGFzdFZlcnNpb24gPSBt
X3BoYXNlVmVyc2lvbjsKQEAgLTI3MzMsOCArMjc0Nyw3IEBAIHZvaWQgSGVhcDo6YWRkQ29yZUNv
bnN0cmFpbnRzKCkKICAgICAKICAgICBtX2NvbnN0cmFpbnRTZXQtPmFkZCgKICAgICAgICAgIk1z
ciIsICJNaXNjIFNtYWxsIFJvb3RzIiwKLSAgICAgICAgW3RoaXNdIChTbG90VmlzaXRvciYgdmlz
aXRvcikgewotCisgICAgICAgIFt0aGlzXSAoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikg
ewogI2lmIEpTQ19PQkpDX0FQSV9FTkFCTEVECiAgICAgICAgICAgICBzY2FuRXh0ZXJuYWxSZW1l
bWJlcmVkU2V0KG1fdm0sIHZpc2l0b3IpOwogI2VuZGlmCkBAIC0yNzY4LDcgKzI3ODEsNyBAQCB2
b2lkIEhlYXA6OmFkZENvcmVDb25zdHJhaW50cygpCiAgICAgCiAgICAgbV9jb25zdHJhaW50U2V0
LT5hZGQoCiAgICAgICAgICJTaCIsICJTdHJvbmcgSGFuZGxlcyIsCi0gICAgICAgIFt0aGlzXSAo
U2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsKKyAgICAgICAgW3RoaXNdIChBYnN0cmFjdFNsb3RWaXNp
dG9yJiB2aXNpdG9yKSB7CiAgICAgICAgICAgICBTZXRSb290TWFya1JlYXNvblNjb3BlIHJvb3RT
Y29wZSh2aXNpdG9yLCBSb290TWFya1JlYXNvbjo6U3Ryb25nSGFuZGxlcyk7CiAgICAgICAgICAg
ICBtX2hhbmRsZVNldC52aXNpdFN0cm9uZ0hhbmRsZXModmlzaXRvcik7CiAgICAgICAgIH0sCkBA
IC0yNzc2LDcgKzI3ODksNyBAQCB2b2lkIEhlYXA6OmFkZENvcmVDb25zdHJhaW50cygpCiAgICAg
CiAgICAgbV9jb25zdHJhaW50U2V0LT5hZGQoCiAgICAgICAgICJEIiwgIkRlYnVnZ2VyIiwKLSAg
ICAgICAgW3RoaXNdIChTbG90VmlzaXRvciYgdmlzaXRvcikgeworICAgICAgICBbdGhpc10gKEFi
c3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsKICAgICAgICAgICAgIFNldFJvb3RNYXJrUmVh
c29uU2NvcGUgcm9vdFNjb3BlKHZpc2l0b3IsIFJvb3RNYXJrUmVhc29uOjpEZWJ1Z2dlcik7CiAK
ICNpZiBFTkFCTEUoU0FNUExJTkdfUFJPRklMRVIpCkBAIC0yNzk5LDcgKzI4MTIsNyBAQCB2b2lk
IEhlYXA6OmFkZENvcmVDb25zdHJhaW50cygpCiAgICAgCiAgICAgbV9jb25zdHJhaW50U2V0LT5h
ZGQoCiAgICAgICAgICJXcyIsICJXZWFrIFNldHMiLAotICAgICAgICBbdGhpc10gKFNsb3RWaXNp
dG9yJiB2aXNpdG9yKSB7CisgICAgICAgIFt0aGlzXSAoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlz
aXRvcikgewogICAgICAgICAgICAgU2V0Um9vdE1hcmtSZWFzb25TY29wZSByb290U2NvcGUodmlz
aXRvciwgUm9vdE1hcmtSZWFzb246OldlYWtTZXRzKTsKICAgICAgICAgICAgIG1fb2JqZWN0U3Bh
Y2UudmlzaXRXZWFrU2V0cyh2aXNpdG9yKTsKICAgICAgICAgfSwKQEAgLTI4MDcsMTAgKzI4MjAs
MTAgQEAgdm9pZCBIZWFwOjphZGRDb3JlQ29uc3RyYWludHMoKQogICAgIAogICAgIG1fY29uc3Ry
YWludFNldC0+YWRkKAogICAgICAgICAiTyIsICJPdXRwdXQiLAotICAgICAgICBbXSAoU2xvdFZp
c2l0b3ImIHZpc2l0b3IpIHsKKyAgICAgICAgW10gKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0
b3IpIHsKICAgICAgICAgICAgIFZNJiB2bSA9IHZpc2l0b3Iudm0oKTsKIAotICAgICAgICAgICAg
YXV0byBjYWxsT3V0cHV0Q29uc3RyYWludCA9IFtdIChTbG90VmlzaXRvciYgdmlzaXRvciwgSGVh
cENlbGwqIGhlYXBDZWxsLCBIZWFwQ2VsbDo6S2luZCkgeworICAgICAgICAgICAgYXV0byBjYWxs
T3V0cHV0Q29uc3RyYWludCA9IFtdIChBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBIZWFw
Q2VsbCogaGVhcENlbGwsIEhlYXBDZWxsOjpLaW5kKSB7CiAgICAgICAgICAgICAgICAgU2V0Um9v
dE1hcmtSZWFzb25TY29wZSByb290U2NvcGUodmlzaXRvciwgUm9vdE1hcmtSZWFzb246Ok91dHB1
dCk7CiAgICAgICAgICAgICAgICAgVk0mIHZtID0gdmlzaXRvci52bSgpOwogICAgICAgICAgICAg
ICAgIEpTQ2VsbCogY2VsbCA9IHN0YXRpY19jYXN0PEpTQ2VsbCo+KGhlYXBDZWxsKTsKQEAgLTI4
MzIsNyArMjg0NSw3IEBAIHZvaWQgSGVhcDo6YWRkQ29yZUNvbnN0cmFpbnRzKCkKICAgICBpZiAo
T3B0aW9uczo6dXNlSklUKCkpIHsKICAgICAgICAgbV9jb25zdHJhaW50U2V0LT5hZGQoCiAgICAg
ICAgICAgICAiRHciLCAiREZHIFdvcmtsaXN0cyIsCi0gICAgICAgICAgICBbdGhpc10gKFNsb3RW
aXNpdG9yJiB2aXNpdG9yKSB7CisgICAgICAgICAgICBbdGhpc10gKEFic3RyYWN0U2xvdFZpc2l0
b3ImIHZpc2l0b3IpIHsKICAgICAgICAgICAgICAgICBTZXRSb290TWFya1JlYXNvblNjb3BlIHJv
b3RTY29wZSh2aXNpdG9yLCBSb290TWFya1JlYXNvbjo6REZHV29ya0xpc3RzKTsKIAogICAgICAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IERGRzo6bnVtYmVyT2ZXb3JrbGlzdHMoKTsgaS0t
OykKQEAgLTI4NDAsNyArMjg1Myw3IEBAIHZvaWQgSGVhcDo6YWRkQ29yZUNvbnN0cmFpbnRzKCkK
ICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAvLyBGSVhNRTogVGhpcyBpcyBhbG1v
c3QgY2VydGFpbmx5IHVubmVjZXNzYXJ5LgogICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjY4MjkKLSAgICAgICAgICAgICAgICBERkc6
Oml0ZXJhdGVDb2RlQmxvY2tzRm9yR0MoCisgICAgICAgICAgICAgICAgREZHOjppdGVyYXRlQ29k
ZUJsb2Nrc0ZvckdDKHZpc2l0b3IsCiAgICAgICAgICAgICAgICAgICAgIG1fdm0sCiAgICAgICAg
ICAgICAgICAgICAgIFsmXSAoQ29kZUJsb2NrKiBjb2RlQmxvY2spIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQoY29kZUJsb2NrKTsKQEAgLTI4NTUs
MTIgKzI4NjgsMTIgQEAgdm9pZCBIZWFwOjphZGRDb3JlQ29uc3RyYWludHMoKQogICAgIAogICAg
IG1fY29uc3RyYWludFNldC0+YWRkKAogICAgICAgICAiQ2IiLCAiQ29kZUJsb2NrcyIsCi0gICAg
ICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsKKyAgICAgICAgW3RoaXNdIChBYnN0
cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKSB7CiAgICAgICAgICAgICBTZXRSb290TWFya1JlYXNv
blNjb3BlIHJvb3RTY29wZSh2aXNpdG9yLCBSb290TWFya1JlYXNvbjo6Q29kZUJsb2Nrcyk7Ci0g
ICAgICAgICAgICBpdGVyYXRlRXhlY3V0aW5nQW5kQ29tcGlsaW5nQ29kZUJsb2Nrc1dpdGhvdXRI
b2xkaW5nTG9ja3MoCisgICAgICAgICAgICBpdGVyYXRlRXhlY3V0aW5nQW5kQ29tcGlsaW5nQ29k
ZUJsb2Nrc1dpdGhvdXRIb2xkaW5nTG9ja3ModmlzaXRvciwKICAgICAgICAgICAgICAgICBbJl0g
KENvZGVCbG9jayogY29kZUJsb2NrKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIFZpc2l0IHRo
ZSBDb2RlQmxvY2sgYXMgYSBjb25zdHJhaW50IG9ubHkgaWYgaXQncyBibGFjay4KLSAgICAgICAg
ICAgICAgICAgICAgaWYgKGlzTWFya2VkKGNvZGVCbG9jaykKKyAgICAgICAgICAgICAgICAgICAg
aWYgKHZpc2l0b3IuaXNNYXJrZWQoY29kZUJsb2NrKQogICAgICAgICAgICAgICAgICAgICAgICAg
JiYgY29kZUJsb2NrLT5jZWxsU3RhdGUoKSA9PSBDZWxsU3RhdGU6OlBvc3NpYmx5QmxhY2spCiAg
ICAgICAgICAgICAgICAgICAgICAgICB2aXNpdG9yLnZpc2l0QXNDb25zdHJhaW50KGNvZGVCbG9j
ayk7CiAgICAgICAgICAgICAgICAgfSk7CkBAIC0zMDIzLDQgKzMwMzYsMzMgQEAgdm9pZCBIZWFw
OjpydW5UYXNrSW5QYXJhbGxlbChSZWZQdHI8U2hhcgogICAgIH0KIH0KIAordm9pZCBIZWFwOjp2
ZXJpZnlHQygpCit7CisgICAgUkVMRUFTRV9BU1NFUlQobV92ZXJpZmllclNsb3RWaXNpdG9yKTsK
KyAgICBSRUxFQVNFX0FTU0VSVCghbV9pc01hcmtpbmdGb3JHQ1ZlcmlmaWVyKTsKKyAgICBtX2lz
TWFya2luZ0ZvckdDVmVyaWZpZXIgPSB0cnVlOworCisgICAgVmVyaWZpZXJTbG90VmlzaXRvciYg
dmlzaXRvciA9ICptX3ZlcmlmaWVyU2xvdFZpc2l0b3I7CisKKyAgICBkbyB7CisgICAgICAgIHZp
c2l0b3IuZHJhaW4oKTsKKyAgICAgICAgbV9jb25zdHJhaW50U2V0LT5leGVjdXRlQWxsU3luY2hy
b25vdXNseSh2aXNpdG9yKTsKKyAgICAgICAgdmlzaXRvci5leGVjdXRlQ29uc3RyYWludFRhc2tz
KCk7CisgICAgfSB3aGlsZSAoIXZpc2l0b3IuaXNFbXB0eSgpKTsKKworICAgIG1faXNNYXJraW5n
Rm9yR0NWZXJpZmllciA9IGZhbHNlOworCisgICAgdmlzaXRvci5mb3JFYWNoTGl2ZUNlbGwoWyZd
IChIZWFwQ2VsbCogY2VsbCkgeworICAgICAgICBpZiAoSGVhcDo6aXNNYXJrZWQoY2VsbCkpCisg
ICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgZGF0YUxvZ0xuKCJcbiIgIkdDIFZlcmlmaWVy
OiBFUlJPUiBjZWxsICIsIFJhd1BvaW50ZXIoY2VsbCksICIgd2FzIG5vdCBtYXJrZWQiKTsKKyAg
ICAgICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OnZlcmJvc2VWZXJpZnlHQygpKSkKKyAgICAgICAg
ICAgIHZpc2l0b3IuZHVtcE1hcmtlckRhdGEoY2VsbCk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJU
KHRoaXMtPmlzTWFya2VkKGNlbGwpKTsKKyAgICB9KTsKKworICAgIG1fdmVyaWZpZXJTbG90Vmlz
aXRvciA9IG51bGxwdHI7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0hlYXAuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvSGVhcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqICBD
b3B5cmlnaHQgKEMpIDE5OTktMjAwMCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQogICog
IENvcHlyaWdodCAoQykgMjAwMSBQZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQotICogIENvcHly
aWdodCAoQykgMjAwMy0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBD
b3B5cmlnaHQgKEMpIDIwMDMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVz
c2VyIEdlbmVyYWwgUHVibGljCkBAIC04Niw2ICs4Niw3IEBAIGNsYXNzIFNwYWNlVGltZU11dGF0
b3JTY2hlZHVsZXI7CiBjbGFzcyBTdG9wSWZOZWNlc3NhcnlUaW1lcjsKIGNsYXNzIFN3ZWVwaW5n
U2NvcGU7CiBjbGFzcyBWTTsKK2NsYXNzIFZlcmlmaWVyU2xvdFZpc2l0b3I7CiBjbGFzcyBXZWFr
R0NNYXBCYXNlOwogc3RydWN0IEN1cnJlbnRUaHJlYWRTdGF0ZTsKIApAQCAtMTg0LDggKzE4NSw2
IEBAIHB1YmxpYzoKICAgICAKICAgICBib29sIGlzU2h1dHRpbmdEb3duKCkgY29uc3QgeyByZXR1
cm4gbV9pc1NodXR0aW5nRG93bjsgfQogCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBpc0Fu
YWx5emluZ0hlYXAoKSBjb25zdDsKLQogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgc3dlZXBT
eW5jaHJvbm91c2x5KCk7CiAKICAgICBib29sIHNob3VsZENvbGxlY3RIZXVyaXN0aWMoKTsKQEAg
LTM4NSw4ICszODQsNiBAQCBwdWJsaWM6CiAgICAgCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9p
ZCBhZGRNYXJraW5nQ29uc3RyYWludChzdGQ6OnVuaXF1ZV9wdHI8TWFya2luZ0NvbnN0cmFpbnQ+
KTsKICAgICAKLSAgICBzaXplX3QgbnVtT3BhcXVlUm9vdHMoKSBjb25zdCB7IHJldHVybiBtX29w
YXF1ZVJvb3RzLnNpemUoKTsgfQotCiAgICAgSGVhcFZlcmlmaWVyKiB2ZXJpZmllcigpIGNvbnN0
IHsgcmV0dXJuIG1fdmVyaWZpZXIuZ2V0KCk7IH0KICAgICAKICAgICB2b2lkIGFkZEhlYXBGaW5h
bGl6ZXJDYWxsYmFjayhjb25zdCBIZWFwRmluYWxpemVyQ2FsbGJhY2smKTsKQEAgLTU3NiwxMCAr
NTczLDEwIEBAIHByaXZhdGU6CiAgICAgYm9vbCBvdmVyQ3JpdGljYWxNZW1vcnlUaHJlc2hvbGQo
TWVtb3J5VGhyZXNob2xkQ2FsbFR5cGUgbWVtb3J5VGhyZXNob2xkQ2FsbFR5cGUgPSBNZW1vcnlU
aHJlc2hvbGRDYWxsVHlwZTo6Q2FjaGVkKTsKICAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBG
dW5jPgotICAgIHZvaWQgaXRlcmF0ZUV4ZWN1dGluZ0FuZENvbXBpbGluZ0NvZGVCbG9ja3MoY29u
c3QgRnVuYyYpOworICAgIHZvaWQgaXRlcmF0ZUV4ZWN1dGluZ0FuZENvbXBpbGluZ0NvZGVCbG9j
a3MoQWJzdHJhY3RTbG90VmlzaXRvciYsIGNvbnN0IEZ1bmMmKTsKICAgICAKICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBGdW5jPgotICAgIHZvaWQgaXRlcmF0ZUV4ZWN1dGluZ0FuZENvbXBpbGluZ0Nv
ZGVCbG9ja3NXaXRob3V0SG9sZGluZ0xvY2tzKGNvbnN0IEZ1bmMmKTsKKyAgICB2b2lkIGl0ZXJh
dGVFeGVjdXRpbmdBbmRDb21waWxpbmdDb2RlQmxvY2tzV2l0aG91dEhvbGRpbmdMb2NrcyhBYnN0
cmFjdFNsb3RWaXNpdG9yJiwgY29uc3QgRnVuYyYpOwogICAgIAogICAgIHZvaWQgYXNzZXJ0TWFy
a1N0YWNrc0VtcHR5KCk7CiAKQEAgLTU5MCw2ICs1ODcsOCBAQCBwcml2YXRlOgogICAgIHN0YXRp
YyBib29sIHVzZUdlbmVyYXRpb25hbEdDKCk7CiAgICAgc3RhdGljIGJvb2wgc2hvdWxkU3dlZXBT
eW5jaHJvbm91c2x5KCk7CiAgICAgCisgICAgdm9pZCB2ZXJpZnlHQygpOworCiAgICAgY29uc3Qg
SGVhcFR5cGUgbV9oZWFwVHlwZTsKICAgICBNdXRhdG9yU3RhdGUgbV9tdXRhdG9yU3RhdGUgeyBN
dXRhdG9yU3RhdGU6OlJ1bm5pbmcgfTsKICAgICBjb25zdCBzaXplX3QgbV9yYW1TaXplOwpAQCAt
NjM2LDYgKzYzNSw3IEBAIHByaXZhdGU6CiAgICAgc3RkOjp1bmlxdWVfcHRyPE1hcmtTdGFja0Fy
cmF5PiBtX211dGF0b3JNYXJrU3RhY2s7CiAgICAgc3RkOjp1bmlxdWVfcHRyPE1hcmtTdGFja0Fy
cmF5PiBtX3JhY2VNYXJrU3RhY2s7CiAgICAgc3RkOjp1bmlxdWVfcHRyPE1hcmtpbmdDb25zdHJh
aW50U2V0PiBtX2NvbnN0cmFpbnRTZXQ7CisgICAgc3RkOjp1bmlxdWVfcHRyPFZlcmlmaWVyU2xv
dFZpc2l0b3I+IG1fdmVyaWZpZXJTbG90VmlzaXRvcjsKIAogICAgIC8vIFdlIHBvb2wgdGhlIHNs
b3QgdmlzaXRvcnMgdXNlZCBieSBwYXJhbGxlbCBtYXJraW5nIHRocmVhZHMuIEl0J3MgdXNlZnVs
IHRvIGJlIGFibGUgdG8KICAgICAvLyBlbnVtZXJhdGUgb3ZlciB0aGVtLCBhbmQgaXQncyB1c2Vm
dWwgdG8gaGF2ZSB0aGVtIGNhY2hlIHNvbWUgc21hbGwgYW1vdW50IG9mIG1lbW9yeSBmcm9tCkBA
IC02NTQsNiArNjU0LDcgQEAgcHJpdmF0ZToKICAgICBib29sIG1faXNTYWZlVG9Db2xsZWN0IHsg
ZmFsc2UgfTsKICAgICBib29sIG1faXNTaHV0dGluZ0Rvd24geyBmYWxzZSB9OwogICAgIGJvb2wg
bV9tdXRhdG9yU2hvdWxkQmVGZW5jZWQgeyBPcHRpb25zOjpmb3JjZUZlbmNlZEJhcnJpZXIoKSB9
OworICAgIGJvb2wgbV9pc01hcmtpbmdGb3JHQ1ZlcmlmaWVyIHsgZmFsc2UgfTsKIAogICAgIHVu
c2lnbmVkIG1fYmFycmllclRocmVzaG9sZCB7IE9wdGlvbnM6OmZvcmNlRmVuY2VkQmFycmllcigp
ID8gdGF1dG9sb2dpY2FsVGhyZXNob2xkIDogYmxhY2tUaHJlc2hvbGQgfTsKIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcElubGluZXMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwSW5saW5lcy5oCShyZXZpc2lvbiAyNzI4MzApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwSW5saW5lcy5oCSh3b3JraW5nIGNvcHkp
CkBAIC02OSw2ICs2OSw3IEBAIGlubGluZSBib29sIEhlYXA6OndvcmxkSXNTdG9wcGVkKCkgY29u
c3QKIAogQUxXQVlTX0lOTElORSBib29sIEhlYXA6OmlzTWFya2VkKGNvbnN0IHZvaWQqIHJhd0Nl
bGwpCiB7CisgICAgQVNTRVJUKCFtX2lzTWFya2luZ0ZvckdDVmVyaWZpZXIpOwogICAgIEhlYXBD
ZWxsKiBjZWxsID0gYml0d2lzZV9jYXN0PEhlYXBDZWxsKj4ocmF3Q2VsbCk7CiAgICAgaWYgKGNl
bGwtPmlzUHJlY2lzZUFsbG9jYXRpb24oKSkKICAgICAgICAgcmV0dXJuIGNlbGwtPnByZWNpc2VB
bGxvY2F0aW9uKCkuaXNNYXJrZWQoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0hlYXBQcm9maWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvSGVhcFByb2ZpbGVyLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvSGVhcFByb2ZpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02MCw2ICs2MCw3IEBA
IHZvaWQgSGVhcFByb2ZpbGVyOjpzZXRBY3RpdmVIZWFwQW5hbHl6ZXIKIHsKICAgICBBU1NFUlQo
ISFtX2FjdGl2ZUFuYWx5emVyICE9ICEhYW5hbHl6ZXIpOwogICAgIG1fYWN0aXZlQW5hbHl6ZXIg
PSBhbmFseXplcjsKKyAgICBtX3ZtLnNldEFjdGl2ZUhlYXBBbmFseXplcihhbmFseXplcik7CiB9
CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
SXNvQ2VsbFNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0lz
b0NlbGxTZXQuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvSXNvQ2VsbFNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM0LDYgKzM0LDcgQEAKIAogbmFtZXNwYWNl
IEpTQyB7CiAKK2NsYXNzIEFic3RyYWN0U2xvdFZpc2l0b3I7CiBjbGFzcyBIZWFwQ2VsbDsKIGNs
YXNzIElzb1N1YnNwYWNlOwogCkBAIC01OSw3ICs2MCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGZv
ckVhY2hNYXJrZWRDZWxsKGNvbnN0IEZ1bmMmKTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1
bmM+Ci0gICAgUmVmPFNoYXJlZFRhc2s8dm9pZChTbG90VmlzaXRvciYpPj4gZm9yRWFjaE1hcmtl
ZENlbGxJblBhcmFsbGVsKGNvbnN0IEZ1bmMmKTsKKyAgICBSZWY8U2hhcmVkVGFzazx2b2lkKEFi
c3RyYWN0U2xvdFZpc2l0b3ImKT4+IGZvckVhY2hNYXJrZWRDZWxsSW5QYXJhbGxlbChjb25zdCBG
dW5jJik7CiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KICAgICB2b2lkIGZvckVh
Y2hMaXZlQ2VsbChjb25zdCBGdW5jJik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9Jc29DZWxsU2V0SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0lzb0NlbGxTZXRJbmxpbmVzLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0lzb0NlbGxTZXRJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtOTIs
OSArOTIsOSBAQCB2b2lkIElzb0NlbGxTZXQ6OmZvckVhY2hNYXJrZWRDZWxsKGNvbnN0CiB9CiAK
IHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+Ci1SZWY8U2hhcmVkVGFzazx2b2lkKFNsb3RWaXNpdG9y
Jik+PiBJc29DZWxsU2V0Ojpmb3JFYWNoTWFya2VkQ2VsbEluUGFyYWxsZWwoY29uc3QgRnVuYyYg
ZnVuYykKK1JlZjxTaGFyZWRUYXNrPHZvaWQoQWJzdHJhY3RTbG90VmlzaXRvciYpPj4gSXNvQ2Vs
bFNldDo6Zm9yRWFjaE1hcmtlZENlbGxJblBhcmFsbGVsKGNvbnN0IEZ1bmMmIGZ1bmMpCiB7Ci0g
ICAgY2xhc3MgVGFzayBmaW5hbCA6IHB1YmxpYyBTaGFyZWRUYXNrPHZvaWQoU2xvdFZpc2l0b3Im
KT4geworICAgIGNsYXNzIFRhc2sgZmluYWwgOiBwdWJsaWMgU2hhcmVkVGFzazx2b2lkKEFic3Ry
YWN0U2xvdFZpc2l0b3ImKT4gewogICAgIHB1YmxpYzoKICAgICAgICAgVGFzayhJc29DZWxsU2V0
JiBzZXQsIGNvbnN0IEZ1bmMmIGZ1bmMpCiAgICAgICAgICAgICA6IG1fc2V0KHNldCkKQEAgLTEw
Myw3ICsxMDMsNyBAQCBSZWY8U2hhcmVkVGFzazx2b2lkKFNsb3RWaXNpdG9yJik+PiBJc29DCiAg
ICAgICAgIHsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgdm9pZCBydW4oU2xvdFZpc2l0
b3ImIHZpc2l0b3IpIGZpbmFsCisgICAgICAgIHZvaWQgcnVuKEFic3RyYWN0U2xvdFZpc2l0b3Im
IHZpc2l0b3IpIGZpbmFsCiAgICAgICAgIHsKICAgICAgICAgICAgIHdoaWxlIChNYXJrZWRCbG9j
azo6SGFuZGxlKiBoYW5kbGUgPSBtX2Jsb2NrU291cmNlLT5ydW4oKSkgewogICAgICAgICAgICAg
ICAgIHVuc2lnbmVkIGJsb2NrSW5kZXggPSBoYW5kbGUtPmluZGV4KCk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9KSVRTdHViUm91dGluZVNldC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSklUU3R1YlJvdXRpbmVTZXQuY3BwCShyZXZpc2lv
biAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9KSVRTdHViUm91dGluZVNl
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMTI4LDcgKzEyOCw3IEBAIHZvaWQgSklUU3R1YlJvdXRpbmVT
ZXQ6OmRlbGV0ZVVubWFya2VkSmUKICAgICBtX3JvdXRpbmVzLnNocmluayhkc3RJbmRleCk7CiB9
CiAKLXZvaWQgSklUU3R1YlJvdXRpbmVTZXQ6OnRyYWNlTWFya2VkU3R1YlJvdXRpbmVzKFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQordm9pZCBKSVRTdHViUm91dGluZVNldDo6dHJhY2VNYXJrZWRTdHVi
Um91dGluZXMoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBmb3IgKGF1dG8m
IGVudHJ5IDogbV9yb3V0aW5lcykgewogICAgICAgICBHQ0F3YXJlSklUU3R1YlJvdXRpbmUqIHJv
dXRpbmUgPSBlbnRyeS5yb3V0aW5lOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
SklUU3R1YlJvdXRpbmVTZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9KSVRTdHViUm91dGluZVNldC5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9KSVRTdHViUm91dGluZVNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE4IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MzUsOCArMzUsOCBAQCB1c2luZyBXVEY6OlJhbmdlOwogCiBuYW1lc3BhY2UgSlNDIHsKIAorY2xh
c3MgQWJzdHJhY3RTbG90VmlzaXRvcjsKIGNsYXNzIEdDQXdhcmVKSVRTdHViUm91dGluZTsKLWNs
YXNzIFNsb3RWaXNpdG9yOwogCiAjaWYgRU5BQkxFKEpJVCkKIApAQCAtNjMsOCArNjMsOCBAQCBw
dWJsaWM6CiAgICAgdm9pZCBwcmVwYXJlRm9yQ29uc2VydmF0aXZlU2NhbigpOwogICAgIAogICAg
IHZvaWQgZGVsZXRlVW5tYXJrZWRKZXR0aXNvbmVkU3R1YlJvdXRpbmVzKCk7Ci0gICAgCi0gICAg
dm9pZCB0cmFjZU1hcmtlZFN0dWJSb3V0aW5lcyhTbG90VmlzaXRvciYpOworCisgICAgdm9pZCB0
cmFjZU1hcmtlZFN0dWJSb3V0aW5lcyhBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAgICAgCiBwcml2
YXRlOgogICAgIHZvaWQgbWFya1Nsb3codWludHB0cl90IGFkZHJlc3MpOwpAQCAtOTIsNyArOTIs
NyBAQCBwdWJsaWM6CiAgICAgdm9pZCBtYXJrKHZvaWQqKSB7IH0KICAgICB2b2lkIHByZXBhcmVG
b3JDb25zZXJ2YXRpdmVTY2FuKCkgeyB9CiAgICAgdm9pZCBkZWxldGVVbm1hcmtlZEpldHRpc29u
ZWRTdHViUm91dGluZXMoKSB7IH0KLSAgICB2b2lkIHRyYWNlTWFya2VkU3R1YlJvdXRpbmVzKFNs
b3RWaXNpdG9yJikgeyB9CisgICAgdm9pZCB0cmFjZU1hcmtlZFN0dWJSb3V0aW5lcyhBYnN0cmFj
dFNsb3RWaXNpdG9yJikgeyB9CiB9OwogCiAjZW5kaWYgLy8gIUVOQUJMRShKSVQpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya1N0YWNrTWVyZ2lu
Z0NvbnN0cmFpbnQuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9NYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjUs
NyArMjUsNiBAQAogCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiTWFya1N0YWNrTWVy
Z2luZ0NvbnN0cmFpbnQuaCIKLQogI2luY2x1ZGUgIkdDU2VnbWVudGVkQXJyYXlJbmxpbmVzLmgi
CiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogCkBAIC00MSwxMiArNDAsMTIgQEAgTWFya1N0YWNr
TWVyZ2luZ0NvbnN0cmFpbnQ6On5NYXJrU3RhY2tNZQogewogfQogCi1kb3VibGUgTWFya1N0YWNr
TWVyZ2luZ0NvbnN0cmFpbnQ6OnF1aWNrV29ya0VzdGltYXRlKFNsb3RWaXNpdG9yJikKK2RvdWJs
ZSBNYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludDo6cXVpY2tXb3JrRXN0aW1hdGUoQWJzdHJhY3RT
bG90VmlzaXRvciYpCiB7CiAgICAgcmV0dXJuIG1faGVhcC5tX211dGF0b3JNYXJrU3RhY2stPnNp
emUoKSArIG1faGVhcC5tX3JhY2VNYXJrU3RhY2stPnNpemUoKTsKIH0KIAotdm9pZCBNYXJrU3Rh
Y2tNZXJnaW5nQ29uc3RyYWludDo6cHJlcGFyZVRvRXhlY3V0ZUltcGwoY29uc3QgQWJzdHJhY3RM
b2NrZXImLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgTWFya1N0YWNrTWVyZ2luZ0NvbnN0
cmFpbnQ6OnByZXBhcmVUb0V4ZWN1dGVJbXBsKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgQWJzdHJh
Y3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICAvLyBMb2dnaW5nIHRoZSB3b3JrIGhlcmUg
ZW5zdXJlcyB0aGF0IHRoZSBjb25zdHJhaW50IHNvbHZlciBrbm93cyB0aGF0IGl0IGRvZXNuJ3Qg
bmVlZCB0byBwcm9kdWNlCiAgICAgLy8gYW55bW9yZSB3b3JrLgpAQCAtNTYsOCArNTUsMTcgQEAg
dm9pZCBNYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludDo6cHJlcGFyZQogICAgIGRhdGFMb2dJZihP
cHRpb25zOjpsb2dHQygpLCAiKCIsIHNpemUsICIpIik7CiB9CiAKLXZvaWQgTWFya1N0YWNrTWVy
Z2luZ0NvbnN0cmFpbnQ6OmV4ZWN1dGVJbXBsKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBN
YXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludDo6ZXhlY3V0ZUltcGwoQWJzdHJhY3RTbG90VmlzaXRv
ciYgdmlzaXRvcikKIHsKKyAgICAvLyBXZSB3YW50IHRvIHNraXAgdGhpcyBjb25zdHJhaW50IGZv
ciB0aGUgR0MgdmVyaWZpZXIgYmVjYXVzZToKKyAgICAvLyAxLiBUaGVyZSBzaG91bGQgYmUgbm8g
bXV0YXRvciBtYXJraW5nIGFjdGlvbiBiZXR3ZWVuIHRoZSBFbmQgcGhhc2UgYW5kIHZlcmlmeUdD
KCkuCisgICAgLy8gICAgSGVuY2UsIHdlIGNhbiBpZ25vcmUgdGhzZSBzdGFja3MuCisgICAgLy8g
Mi4gVGhlIEVuZCBwaGFzZSBleHBsaWN0bHkgY2FsbHMgaXRlcmF0ZUV4ZWN1dGluZ0FuZENvbXBp
bGluZ0NvZGVCbG9ja3MoKQorICAgIC8vICAgIHRvIGFkZCBleGVjdXRpbmcgQ29kZUJsb2NrcyB0
byBtX2hlYXAubV9tdXRhdG9yTWFya1N0YWNrLiBXZSB3YW50IHRvCisgICAgLy8gICAgbGVhdmUg
dGhvc2UgdW5wZXJ0dXJiZWQuCisgICAgaWYgKG1faGVhcC5tX2lzTWFya2luZ0ZvckdDVmVyaWZp
ZXIpCisgICAgICAgIHJldHVybjsKKwogICAgIG1faGVhcC5tX211dGF0b3JNYXJrU3RhY2stPnRy
YW5zZmVyVG8odmlzaXRvci5tdXRhdG9yTWFya1N0YWNrKCkpOwogICAgIG1faGVhcC5tX3JhY2VN
YXJrU3RhY2stPnRyYW5zZmVyVG8odmlzaXRvci5tdXRhdG9yTWFya1N0YWNrKCkpOwogfQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3RhY2tNZXJn
aW5nQ29uc3RyYWludC5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9NYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludC5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
MCwxOCArMzAsMTggQEAKIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBIZWFwOwotY2xhc3MgU2xv
dFZpc2l0b3I7CitjbGFzcyBBYnN0cmFjdFNsb3RWaXNpdG9yOwogCiBjbGFzcyBNYXJrU3RhY2tN
ZXJnaW5nQ29uc3RyYWludCBmaW5hbCA6IHB1YmxpYyBNYXJraW5nQ29uc3RyYWludCB7CiBwdWJs
aWM6CiAgICAgTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQoSGVhcCYpOwogICAgIH5NYXJrU3Rh
Y2tNZXJnaW5nQ29uc3RyYWludCgpIGZpbmFsOwogICAgIAotICAgIGRvdWJsZSBxdWlja1dvcmtF
c3RpbWF0ZShTbG90VmlzaXRvciYpIGZpbmFsOworICAgIGRvdWJsZSBxdWlja1dvcmtFc3RpbWF0
ZShBYnN0cmFjdFNsb3RWaXNpdG9yJikgZmluYWw7CiAgICAgCiBwcml2YXRlOgotICAgIHZvaWQg
cHJlcGFyZVRvRXhlY3V0ZUltcGwoY29uc3QgQWJzdHJhY3RMb2NrZXImIGNvbnN0cmFpbnRTb2x2
aW5nTG9ja2VyLCBTbG90VmlzaXRvciYpIGZpbmFsOwotICAgIHZvaWQgZXhlY3V0ZUltcGwoU2xv
dFZpc2l0b3ImKSBmaW5hbDsKKyAgICB2b2lkIHByZXBhcmVUb0V4ZWN1dGVJbXBsKGNvbnN0IEFi
c3RyYWN0TG9ja2VyJiBjb25zdHJhaW50U29sdmluZ0xvY2tlciwgQWJzdHJhY3RTbG90VmlzaXRv
ciYpIGZpbmFsOworICAgIHZvaWQgZXhlY3V0ZUltcGwoQWJzdHJhY3RTbG90VmlzaXRvciYpIGZp
bmFsOwogICAgIAogICAgIEhlYXAmIG1faGVhcDsKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9NYXJrZWRCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL01hcmtlZEJsb2NrLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTIwMCw2ICsy
MDAsNyBAQCBwdWJsaWM6CiAgICAgICAgIAogICAgICAgICB2b2lkKiBzdGFydCgpIGNvbnN0IHsg
cmV0dXJuICZtX2Jsb2NrLT5hdG9tcygpWzBdOyB9CiAgICAgICAgIHZvaWQqIGVuZCgpIGNvbnN0
IHsgcmV0dXJuICZtX2Jsb2NrLT5hdG9tcygpW21fZW5kQXRvbV07IH0KKyAgICAgICAgdm9pZCog
YXRvbUF0KHNpemVfdCBpKSBjb25zdCB7IHJldHVybiAmbV9ibG9jay0+YXRvbXMoKVtpXTsgfQog
ICAgICAgICBib29sIGNvbnRhaW5zKHZvaWQqIHApIGNvbnN0IHsgcmV0dXJuIHN0YXJ0KCkgPD0g
cCAmJiBwIDwgZW5kKCk7IH0KIAogICAgICAgICB2b2lkIGR1bXBTdGF0ZShQcmludFN0cmVhbSYp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkU3BhY2UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZFNwYWNlLmNwcAkocmV2
aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkU3BhY2Uu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNzIsNyArMjcyLDcgQEAgdm9pZCBNYXJrZWRTcGFjZTo6
ZW5hYmxlUHJlY2lzZUFsbG9jYXRpbwogICAgICAgICBtX3ByZWNpc2VBbGxvY2F0aW9uU2V0LT5h
ZGQoYWxsb2NhdGlvbi0+Y2VsbCgpKTsKIH0KIAotdm9pZCBNYXJrZWRTcGFjZTo6dmlzaXRXZWFr
U2V0cyhTbG90VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgTWFya2VkU3BhY2U6OnZpc2l0V2Vha1Nl
dHMoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBhdXRvIHZpc2l0ID0gWyZd
IChXZWFrU2V0KiB3ZWFrU2V0KSB7CiAgICAgICAgIHdlYWtTZXQtPnZpc2l0KHZpc2l0b3IpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkU3BhY2UuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRTcGFjZS5oCShyZXZpc2lvbiAy
NzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRTcGFjZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAw
MCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQogICogIENvcHlyaWdodCAoQykgMjAwMSBQ
ZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQotICogIENvcHlyaWdodCAoQykgMjAwMy0yMDE4IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCkBA
IC0zNyw2ICszNyw3IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCitjbGFzcyBBYnN0cmFjdFNsb3RW
aXNpdG9yOwogY2xhc3MgQ29tcGxldGVTdWJzcGFjZTsKIGNsYXNzIEhlYXA7CiBjbGFzcyBIZWFw
Q2VsbDsKQEAgLTEwNSw3ICsxMDYsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgdm9pZCBwcmVwYXJl
Rm9yQWxsb2NhdGlvbigpOwogCi0gICAgdm9pZCB2aXNpdFdlYWtTZXRzKFNsb3RWaXNpdG9yJik7
CisgICAgdm9pZCB2aXNpdFdlYWtTZXRzKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKICAgICB2b2lk
IHJlYXBXZWFrU2V0cygpOwogCiAgICAgTWFya2VkQmxvY2tTZXQmIGJsb2NrcygpIHsgcmV0dXJu
IG1fYmxvY2tzOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29u
c3RyYWludC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFy
a2luZ0NvbnN0cmFpbnQuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYsNiArMjYs
NyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIk1hcmtpbmdDb25zdHJhaW50Lmgi
CiAKKyNpbmNsdWRlICJBYnN0cmFjdFNsb3RWaXNpdG9ySW5saW5lcy5oIgogI2luY2x1ZGUgIkpT
Q0lubGluZXMuaCIKICNpbmNsdWRlICJWaXNpdENvdW50ZXIuaCIKIApAQCAtNTEsNyArNTIsNyBA
QCB2b2lkIE1hcmtpbmdDb25zdHJhaW50OjpyZXNldFN0YXRzKCkKICAgICBtX2xhc3RWaXNpdENv
dW50ID0gMDsKIH0KIAotdm9pZCBNYXJraW5nQ29uc3RyYWludDo6ZXhlY3V0ZShTbG90VmlzaXRv
ciYgdmlzaXRvcikKK3ZvaWQgTWFya2luZ0NvbnN0cmFpbnQ6OmV4ZWN1dGUoQWJzdHJhY3RTbG90
VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBWaXNpdENvdW50ZXIgdmlzaXRDb3VudGVyKHZpc2l0
b3IpOwogICAgIGV4ZWN1dGVJbXBsKHZpc2l0b3IpOwpAQCAtNjAsMTcgKzYxLDIzIEBAIHZvaWQg
TWFya2luZ0NvbnN0cmFpbnQ6OmV4ZWN1dGUoU2xvdFZpc2kKICAgICAgICAgZGF0YUxvZygiKCIs
IGFiYnJldmlhdGVkTmFtZSgpLCAiIHZpc2l0ZWQgIiwgdmlzaXRDb3VudGVyLnZpc2l0Q291bnQo
KSwgIiBpbiBleGVjdXRlKSIpOwogfQogCi1kb3VibGUgTWFya2luZ0NvbnN0cmFpbnQ6OnF1aWNr
V29ya0VzdGltYXRlKFNsb3RWaXNpdG9yJikKK3ZvaWQgTWFya2luZ0NvbnN0cmFpbnQ6OmV4ZWN1
dGVTeW5jaHJvbm91c2x5KEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgcHJl
cGFyZVRvRXhlY3V0ZUltcGwoTm9Mb2NraW5nTmVjZXNzYXJ5LCB2aXNpdG9yKTsKKyAgICBleGVj
dXRlSW1wbCh2aXNpdG9yKTsKK30KKworZG91YmxlIE1hcmtpbmdDb25zdHJhaW50OjpxdWlja1dv
cmtFc3RpbWF0ZShBYnN0cmFjdFNsb3RWaXNpdG9yJikKIHsKICAgICByZXR1cm4gMDsKIH0KIAot
ZG91YmxlIE1hcmtpbmdDb25zdHJhaW50Ojp3b3JrRXN0aW1hdGUoU2xvdFZpc2l0b3ImIHZpc2l0
b3IpCitkb3VibGUgTWFya2luZ0NvbnN0cmFpbnQ6OndvcmtFc3RpbWF0ZShBYnN0cmFjdFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQogewogICAgIHJldHVybiBsYXN0VmlzaXRDb3VudCgpICsgcXVpY2tX
b3JrRXN0aW1hdGUodmlzaXRvcik7CiB9CiAKLXZvaWQgTWFya2luZ0NvbnN0cmFpbnQ6OnByZXBh
cmVUb0V4ZWN1dGUoY29uc3QgQWJzdHJhY3RMb2NrZXImIGNvbnN0cmFpbnRTb2x2aW5nTG9ja2Vy
LCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgTWFya2luZ0NvbnN0cmFpbnQ6OnByZXBhcmVU
b0V4ZWN1dGUoY29uc3QgQWJzdHJhY3RMb2NrZXImIGNvbnN0cmFpbnRTb2x2aW5nTG9ja2VyLCBB
YnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGRhdGFMb2dJZihPcHRpb25zOjps
b2dHQygpLCBhYmJyZXZpYXRlZE5hbWUoKSk7CiAgICAgVmlzaXRDb3VudGVyIHZpc2l0Q291bnRl
cih2aXNpdG9yKTsKQEAgLTgwLDcgKzg3LDcgQEAgdm9pZCBNYXJraW5nQ29uc3RyYWludDo6cHJl
cGFyZVRvRXhlY3V0ZQogICAgICAgICBkYXRhTG9nKCIoIiwgYWJicmV2aWF0ZWROYW1lKCksICIg
dmlzaXRlZCAiLCB2aXNpdENvdW50ZXIudmlzaXRDb3VudCgpLCAiIGluIHByZXBhcmVUb0V4ZWN1
dGUpIik7CiB9CiAKLXZvaWQgTWFya2luZ0NvbnN0cmFpbnQ6OmRvUGFyYWxsZWxXb3JrKFNsb3RW
aXNpdG9yJiB2aXNpdG9yLCBTaGFyZWRUYXNrPHZvaWQoU2xvdFZpc2l0b3ImKT4mIHRhc2spCit2
b2lkIE1hcmtpbmdDb25zdHJhaW50Ojpkb1BhcmFsbGVsV29yayhBYnN0cmFjdFNsb3RWaXNpdG9y
JiB2aXNpdG9yLCBTaGFyZWRUYXNrPHZvaWQoQWJzdHJhY3RTbG90VmlzaXRvciYpPiYgdGFzaykK
IHsKICAgICBWaXNpdENvdW50ZXIgdmlzaXRDb3VudGVyKHZpc2l0b3IpOwogICAgIHRhc2sucnVu
KHZpc2l0b3IpOwpAQCAtOTIsNyArOTksNyBAQCB2b2lkIE1hcmtpbmdDb25zdHJhaW50Ojpkb1Bh
cmFsbGVsV29yayhTCiAgICAgfQogfQogCi12b2lkIE1hcmtpbmdDb25zdHJhaW50OjpwcmVwYXJl
VG9FeGVjdXRlSW1wbChjb25zdCBBYnN0cmFjdExvY2tlciYsIFNsb3RWaXNpdG9yJikKK3ZvaWQg
TWFya2luZ0NvbnN0cmFpbnQ6OnByZXBhcmVUb0V4ZWN1dGVJbXBsKGNvbnN0IEFic3RyYWN0TG9j
a2VyJiwgQWJzdHJhY3RTbG90VmlzaXRvciYpCiB7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnQuaAkocmV2aXNpb24gMjcyODMwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0zOCw3ICszOCw3IEBACiBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgTWFya2luZ0Nv
bnN0cmFpbnRTZXQ7Ci1jbGFzcyBTbG90VmlzaXRvcjsKK2NsYXNzIEFic3RyYWN0U2xvdFZpc2l0
b3I7CiAKIGNsYXNzIE1hcmtpbmdDb25zdHJhaW50IHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJM
RShNYXJraW5nQ29uc3RyYWludCk7CkBAIC02MCwxNSArNjAsMTUgQEAgcHVibGljOgogICAgIAog
ICAgIHNpemVfdCBsYXN0VmlzaXRDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fbGFzdFZpc2l0Q291
bnQ7IH0KICAgICAKLSAgICB2b2lkIGV4ZWN1dGUoU2xvdFZpc2l0b3ImKTsKLSAgICAKLSAgICBK
U19FWFBPUlRfUFJJVkFURSB2aXJ0dWFsIGRvdWJsZSBxdWlja1dvcmtFc3RpbWF0ZShTbG90Vmlz
aXRvciYgdmlzaXRvcik7CisgICAgdm9pZCBleGVjdXRlKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsK
KworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZpcnR1YWwgZG91YmxlIHF1aWNrV29ya0VzdGltYXRl
KEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKICAgICAKLSAgICBkb3VibGUgd29ya0VzdGltYXRlKFNs
b3RWaXNpdG9yJiB2aXNpdG9yKTsKKyAgICBkb3VibGUgd29ya0VzdGltYXRlKEFic3RyYWN0U2xv
dFZpc2l0b3ImKTsKICAgICAKLSAgICB2b2lkIHByZXBhcmVUb0V4ZWN1dGUoY29uc3QgQWJzdHJh
Y3RMb2NrZXImIGNvbnN0cmFpbnRTb2x2aW5nTG9ja2VyLCBTbG90VmlzaXRvciYpOworICAgIHZv
aWQgcHJlcGFyZVRvRXhlY3V0ZShjb25zdCBBYnN0cmFjdExvY2tlciYgY29uc3RyYWludFNvbHZp
bmdMb2NrZXIsIEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKICAgICAKLSAgICB2b2lkIGRvUGFyYWxs
ZWxXb3JrKFNsb3RWaXNpdG9yJiwgU2hhcmVkVGFzazx2b2lkKFNsb3RWaXNpdG9yJik+Jik7Cisg
ICAgdm9pZCBkb1BhcmFsbGVsV29yayhBYnN0cmFjdFNsb3RWaXNpdG9yJiwgU2hhcmVkVGFzazx2
b2lkKEFic3RyYWN0U2xvdFZpc2l0b3ImKT4mKTsKICAgICAKICAgICBDb25zdHJhaW50Vm9sYXRp
bGl0eSB2b2xhdGlsaXR5KCkgY29uc3QgeyByZXR1cm4gbV92b2xhdGlsaXR5OyB9CiAgICAgCkBA
IC03Niw5ICs3NiwxMSBAQCBwdWJsaWM6CiAgICAgQ29uc3RyYWludFBhcmFsbGVsaXNtIHBhcmFs
bGVsaXNtKCkgY29uc3QgeyByZXR1cm4gbV9wYXJhbGxlbGlzbTsgfQogCiBwcm90ZWN0ZWQ6Ci0g
ICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVJbXBsKFNsb3RWaXNpdG9yJikgPSAwOwotICAgIEpTX0VY
UE9SVF9QUklWQVRFIHZpcnR1YWwgdm9pZCBwcmVwYXJlVG9FeGVjdXRlSW1wbChjb25zdCBBYnN0
cmFjdExvY2tlciYgY29uc3RyYWludFNvbHZpbmdMb2NrZXIsIFNsb3RWaXNpdG9yJik7Ci0gICAg
CisgICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVJbXBsKEFic3RyYWN0U2xvdFZpc2l0b3ImKSA9IDA7
CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdmlydHVhbCB2b2lkIHByZXBhcmVUb0V4ZWN1dGVJbXBs
KGNvbnN0IEFic3RyYWN0TG9ja2VyJiBjb25zdHJhaW50U29sdmluZ0xvY2tlciwgQWJzdHJhY3RT
bG90VmlzaXRvciYpOworCisgICAgdm9pZCBleGVjdXRlU3luY2hyb25vdXNseShBYnN0cmFjdFNs
b3RWaXNpdG9yJik7CisKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIE1hcmtpbmdDb25zdHJh
aW50U2V0OyAvLyBTbyBpdCBjYW4gc2V0IG1faW5kZXguCiAgICAgCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludFNldC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnRTZXQuY3BwCShyZXZp
c2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3Ry
YWludFNldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjMsNyArNjMsNyBAQCB2b2lkIE1hcmtpbmdDb25z
dHJhaW50U2V0OjpkaWRTdGFydE1hcmtpCiAgICAgbV9pdGVyYXRpb24gPSAxOwogfQogCi12b2lk
IE1hcmtpbmdDb25zdHJhaW50U2V0OjphZGQoQ1N0cmluZyBhYmJyZXZpYXRlZE5hbWUsIENTdHJp
bmcgbmFtZSwgOjpGdW5jdGlvbjx2b2lkKFNsb3RWaXNpdG9yJik+IGZ1bmN0aW9uLCBDb25zdHJh
aW50Vm9sYXRpbGl0eSB2b2xhdGlsaXR5LCBDb25zdHJhaW50Q29uY3VycmVuY3kgY29uY3VycmVu
Y3ksIENvbnN0cmFpbnRQYXJhbGxlbGlzbSBwYXJhbGxlbGlzbSkKK3ZvaWQgTWFya2luZ0NvbnN0
cmFpbnRTZXQ6OmFkZChDU3RyaW5nIGFiYnJldmlhdGVkTmFtZSwgQ1N0cmluZyBuYW1lLCA6OkZ1
bmN0aW9uPHZvaWQoQWJzdHJhY3RTbG90VmlzaXRvciYpPiBmdW5jdGlvbiwgQ29uc3RyYWludFZv
bGF0aWxpdHkgdm9sYXRpbGl0eSwgQ29uc3RyYWludENvbmN1cnJlbmN5IGNvbmN1cnJlbmN5LCBD
b25zdHJhaW50UGFyYWxsZWxpc20gcGFyYWxsZWxpc20pCiB7CiAgICAgYWRkKG1ha2VVbmlxdWU8
U2ltcGxlTWFya2luZ0NvbnN0cmFpbnQ+KFdURk1vdmUoYWJicmV2aWF0ZWROYW1lKSwgV1RGTW92
ZShuYW1lKSwgV1RGTW92ZShmdW5jdGlvbiksIHZvbGF0aWxpdHksIGNvbmN1cnJlbmN5LCBwYXJh
bGxlbGlzbSkpOwogfQpAQCAtNzgsMTQgKzc4LDE0IEBAIHZvaWQgTWFya2luZ0NvbnN0cmFpbnRT
ZXQ6OmFkZCgKICAgICBtX3NldC5hcHBlbmQoV1RGTW92ZShjb25zdHJhaW50KSk7CiB9CiAKLWJv
b2wgTWFya2luZ0NvbnN0cmFpbnRTZXQ6OmV4ZWN1dGVDb252ZXJnZW5jZShTbG90VmlzaXRvciYg
dmlzaXRvcikKK2Jvb2wgTWFya2luZ0NvbnN0cmFpbnRTZXQ6OmV4ZWN1dGVDb252ZXJnZW5jZShB
YnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGJvb2wgcmVzdWx0ID0gZXhlY3V0
ZUNvbnZlcmdlbmNlSW1wbCh2aXNpdG9yKTsKICAgICBkYXRhTG9nSWYoT3B0aW9uczo6bG9nR0Mo
KSwgIiAiKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1ib29sIE1hcmtpbmdDb25zdHJhaW50
U2V0Ojppc1dhdmVmcm9udEFkdmFuY2luZyhTbG90VmlzaXRvciYgdmlzaXRvcikKK2Jvb2wgTWFy
a2luZ0NvbnN0cmFpbnRTZXQ6OmlzV2F2ZWZyb250QWR2YW5jaW5nKEFic3RyYWN0U2xvdFZpc2l0
b3ImIHZpc2l0b3IpCiB7CiAgICAgZm9yIChNYXJraW5nQ29uc3RyYWludCogb3V0Z3Jvd3RoIDog
bV9vdXRncm93dGhzKSB7CiAgICAgICAgIGlmIChvdXRncm93dGgtPndvcmtFc3RpbWF0ZSh2aXNp
dG9yKSkKQEAgLTk0LDcgKzk0LDcgQEAgYm9vbCBNYXJraW5nQ29uc3RyYWludFNldDo6aXNXYXZl
ZnJvbnRBZAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBNYXJraW5nQ29uc3RyYWludFNl
dDo6ZXhlY3V0ZUNvbnZlcmdlbmNlSW1wbChTbG90VmlzaXRvciYgdmlzaXRvcikKK2Jvb2wgTWFy
a2luZ0NvbnN0cmFpbnRTZXQ6OmV4ZWN1dGVDb252ZXJnZW5jZUltcGwoQWJzdHJhY3RTbG90Vmlz
aXRvciYgdmlzaXRvcikKIHsKICAgICBTdXBlclNhbXBsZXJTY29wZSBzdXBlclNhbXBsZXJTY29w
ZShmYWxzZSk7CiAgICAgTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXIgc29sdmVyKCp0aGlzKTsKQEAg
LTE2NiwxMCArMTY2LDEwIEBAIGJvb2wgTWFya2luZ0NvbnN0cmFpbnRTZXQ6OmV4ZWN1dGVDb252
ZXIKICAgICByZXR1cm4gIXNvbHZlci5kaWRWaXNpdFNvbWV0aGluZygpOwogfQogCi12b2lkIE1h
cmtpbmdDb25zdHJhaW50U2V0OjpleGVjdXRlQWxsKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordm9p
ZCBNYXJraW5nQ29uc3RyYWludFNldDo6ZXhlY3V0ZUFsbFN5bmNocm9ub3VzbHkoQWJzdHJhY3RT
bG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBmb3IgKGF1dG8mIGNvbnN0cmFpbnQgOiBtX3Nl
dCkKLSAgICAgICAgY29uc3RyYWludC0+ZXhlY3V0ZSh2aXNpdG9yKTsKKyAgICAgICAgY29uc3Ry
YWludC0+ZXhlY3V0ZVN5bmNocm9ub3VzbHkodmlzaXRvcik7CiAgICAgZGF0YUxvZ0lmKE9wdGlv
bnM6OmxvZ0dDKCksICIgIik7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L01hcmtpbmdDb25zdHJhaW50U2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnRTZXQuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnRTZXQuaAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC00NiwxNCArNDYsMTQgQEAgcHVibGljOgogICAgIHZvaWQgYWRkKAogICAgICAgICBDU3Ry
aW5nIGFiYnJldmlhdGVkTmFtZSwKICAgICAgICAgQ1N0cmluZyBuYW1lLAotICAgICAgICA6OkZ1
bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3ImKT4sCisgICAgICAgIDo6RnVuY3Rpb248dm9pZChBYnN0
cmFjdFNsb3RWaXNpdG9yJik+LAogICAgICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eSwKICAgICAg
ICAgQ29uc3RyYWludENvbmN1cnJlbmN5ID0gQ29uc3RyYWludENvbmN1cnJlbmN5OjpDb25jdXJy
ZW50LAogICAgICAgICBDb25zdHJhaW50UGFyYWxsZWxpc20gPSBDb25zdHJhaW50UGFyYWxsZWxp
c206OlNlcXVlbnRpYWwpOwogICAgIAogICAgIHZvaWQgYWRkKAogICAgICAgICBDU3RyaW5nIGFi
YnJldmlhdGVkTmFtZSwgQ1N0cmluZyBuYW1lLAotICAgICAgICA6OkZ1bmN0aW9uPHZvaWQoU2xv
dFZpc2l0b3ImKT4gZnVuYywKKyAgICAgICAgOjpGdW5jdGlvbjx2b2lkKEFic3RyYWN0U2xvdFZp
c2l0b3ImKT4gZnVuYywKICAgICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHkgdm9sYXRpbGl0eSwK
ICAgICAgICAgQ29uc3RyYWludFBhcmFsbGVsaXNtIHBhcmFsbGVsaXNtKQogICAgIHsKQEAgLTY0
LDIwICs2NCwyMCBAQCBwdWJsaWM6CiAgICAgCiAgICAgLy8gQXNzdW1pbmcgdGhhdCB0aGUgbWFy
ayBzdGFja3MgYXJlIGFsbCBlbXB0eSwgdGhpcyB3aWxsIGdpdmUgeW91IGEgZ3Vlc3MgYXMgdG8g
d2hldGhlciBvcgogICAgIC8vIG5vdCB0aGUgd2F2ZWZyb250IGlzIGFkdmFuY2luZy4KLSAgICBi
b29sIGlzV2F2ZWZyb250QWR2YW5jaW5nKFNsb3RWaXNpdG9yJik7Ci0gICAgYm9vbCBpc1dhdmVm
cm9udFJldHJlYXRpbmcoU2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsgcmV0dXJuICFpc1dhdmVmcm9u
dEFkdmFuY2luZyh2aXNpdG9yKTsgfQorICAgIGJvb2wgaXNXYXZlZnJvbnRBZHZhbmNpbmcoQWJz
dHJhY3RTbG90VmlzaXRvciYpOworICAgIGJvb2wgaXNXYXZlZnJvbnRSZXRyZWF0aW5nKEFic3Ry
YWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsgcmV0dXJuICFpc1dhdmVmcm9udEFkdmFuY2luZyh2
aXNpdG9yKTsgfQogICAgIAogICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGlzIGV4ZWN1dGVkIGFs
bCBjb25zdHJhaW50cyBhbmQgbm9uZSBvZiB0aGVtIHByb2R1Y2VkIG5ldyB3b3JrLiBUaGlzCiAg
ICAgLy8gYXNzdW1lcyB0aGF0IHlvdSd2ZSBhbHJhZWR5IHZpc2l0ZWQgcm9vdHMgYW5kIGRyYWlu
ZWQgZnJvbSB0aGVyZS4KLSAgICBib29sIGV4ZWN1dGVDb252ZXJnZW5jZShTbG90VmlzaXRvciYp
OwotICAgIAorICAgIGJvb2wgZXhlY3V0ZUNvbnZlcmdlbmNlKEFic3RyYWN0U2xvdFZpc2l0b3Im
KTsKKwogICAgIC8vIFNpbXBseSBydW5zIGFsbCBjb25zdHJhaW50cyB3aXRob3V0IGFueSBzaGVu
YW5pZ2Fucy4KLSAgICB2b2lkIGV4ZWN1dGVBbGwoU2xvdFZpc2l0b3ImKTsKKyAgICB2b2lkIGV4
ZWN1dGVBbGxTeW5jaHJvbm91c2x5KEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKICAgICAKIHByaXZh
dGU6CiAgICAgZnJpZW5kIGNsYXNzIE1hcmtpbmdDb25zdHJhaW50U29sdmVyOwotICAgIAotICAg
IGJvb2wgZXhlY3V0ZUNvbnZlcmdlbmNlSW1wbChTbG90VmlzaXRvciYpOworCisgICAgYm9vbCBl
eGVjdXRlQ29udmVyZ2VuY2VJbXBsKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKICAgICAKICAgICBI
ZWFwJiBtX2hlYXA7CiAgICAgQml0VmVjdG9yIG1fdW5leGVjdXRlZFJvb3RzOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50U29s
dmVyLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
TWFya2luZ0NvbnN0cmFpbnRTb2x2ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE1MCwxMyArMTUwLDEz
IEBAIHZvaWQgTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXI6OmV4ZWN1dGUoTWEKICAgICBtX2V4ZWN1
dGVkLnNldChjb25zdHJhaW50LmluZGV4KCkpOwogfQogCi12b2lkIE1hcmtpbmdDb25zdHJhaW50
U29sdmVyOjphZGRQYXJhbGxlbFRhc2soUmVmUHRyPFNoYXJlZFRhc2s8dm9pZChTbG90VmlzaXRv
ciYpPj4gdGFzaywgTWFya2luZ0NvbnN0cmFpbnQmIGNvbnN0cmFpbnQpCit2b2lkIE1hcmtpbmdD
b25zdHJhaW50U29sdmVyOjphZGRQYXJhbGxlbFRhc2soUmVmUHRyPFNoYXJlZFRhc2s8dm9pZChB
YnN0cmFjdFNsb3RWaXNpdG9yJik+PiB0YXNrLCBNYXJraW5nQ29uc3RyYWludCYgY29uc3RyYWlu
dCkKIHsKICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7CiAgICAgbV90b0V4ZWN1
dGVJblBhcmFsbGVsLmFwcGVuZChUYXNrV2l0aENvbnN0cmFpbnQoV1RGTW92ZSh0YXNrKSwgJmNv
bnN0cmFpbnQpKTsKIH0KIAotdm9pZCBNYXJraW5nQ29uc3RyYWludFNvbHZlcjo6cnVuRXhlY3V0
aW9uVGhyZWFkKFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBTY2hlZHVsZXJQcmVmZXJlbmNlIHByZWZl
cmVuY2UsIFNjb3BlZExhbWJkYTxPcHRpb25hbDx1bnNpZ25lZD4oKT4gcGlja05leHQpCit2b2lk
IE1hcmtpbmdDb25zdHJhaW50U29sdmVyOjpydW5FeGVjdXRpb25UaHJlYWQoQWJzdHJhY3RTbG90
VmlzaXRvciYgdmlzaXRvciwgU2NoZWR1bGVyUHJlZmVyZW5jZSBwcmVmZXJlbmNlLCBTY29wZWRM
YW1iZGE8T3B0aW9uYWw8dW5zaWduZWQ+KCk+IHBpY2tOZXh0KQogewogICAgIGZvciAoOzspIHsK
ICAgICAgICAgYm9vbCBkb1BhcmFsbGVsV29ya01vZGU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludFNvbHZlci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50U29sdmVyLmgJKHJldmlzaW9u
IDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50
U29sdmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjUsMTUgKzY1LDE1IEBAIHB1YmxpYzoKICAgICB2b2lk
IGV4ZWN1dGUoTWFya2luZ0NvbnN0cmFpbnQmKTsKICAgICAKICAgICAvLyBQYXJhbGxlbCBjb25z
dHJhaW50cyBjYW4gYWRkIHBhcmFsbGVsIHRhc2tzLgotICAgIHZvaWQgYWRkUGFyYWxsZWxUYXNr
KFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoU2xvdFZpc2l0b3ImKT4+LCBNYXJraW5nQ29uc3RyYWlu
dCYpOworICAgIHZvaWQgYWRkUGFyYWxsZWxUYXNrKFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoQWJz
dHJhY3RTbG90VmlzaXRvciYpPj4sIE1hcmtpbmdDb25zdHJhaW50Jik7CiAgICAgCiBwcml2YXRl
OgotICAgIHZvaWQgcnVuRXhlY3V0aW9uVGhyZWFkKFNsb3RWaXNpdG9yJiwgU2NoZWR1bGVyUHJl
ZmVyZW5jZSwgU2NvcGVkTGFtYmRhPE9wdGlvbmFsPHVuc2lnbmVkPigpPiBwaWNrTmV4dCk7Cisg
ICAgdm9pZCBydW5FeGVjdXRpb25UaHJlYWQoQWJzdHJhY3RTbG90VmlzaXRvciYsIFNjaGVkdWxl
clByZWZlcmVuY2UsIFNjb3BlZExhbWJkYTxPcHRpb25hbDx1bnNpZ25lZD4oKT4gcGlja05leHQp
OwogICAgIAogICAgIHN0cnVjdCBUYXNrV2l0aENvbnN0cmFpbnQgewogICAgICAgICBUYXNrV2l0
aENvbnN0cmFpbnQoKSB7IH0KICAgICAgICAgCi0gICAgICAgIFRhc2tXaXRoQ29uc3RyYWludChS
ZWZQdHI8U2hhcmVkVGFzazx2b2lkKFNsb3RWaXNpdG9yJik+PiB0YXNrLCBNYXJraW5nQ29uc3Ry
YWludCogY29uc3RyYWludCkKKyAgICAgICAgVGFza1dpdGhDb25zdHJhaW50KFJlZlB0cjxTaGFy
ZWRUYXNrPHZvaWQoQWJzdHJhY3RTbG90VmlzaXRvciYpPj4gdGFzaywgTWFya2luZ0NvbnN0cmFp
bnQqIGNvbnN0cmFpbnQpCiAgICAgICAgICAgICA6IHRhc2soV1RGTW92ZSh0YXNrKSkKICAgICAg
ICAgICAgICwgY29uc3RyYWludChjb25zdHJhaW50KQogICAgICAgICB7CkBAIC04NSwxMiArODUs
MTIgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAmJiBjb25zdHJhaW50ID09IG90aGVyLmNv
bnN0cmFpbnQ7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIFJlZlB0cjxTaGFyZWRUYXNr
PHZvaWQoU2xvdFZpc2l0b3ImKT4+IHRhc2s7CisgICAgICAgIFJlZlB0cjxTaGFyZWRUYXNrPHZv
aWQoQWJzdHJhY3RTbG90VmlzaXRvciYpPj4gdGFzazsKICAgICAgICAgTWFya2luZ0NvbnN0cmFp
bnQqIGNvbnN0cmFpbnQgeyBudWxscHRyIH07CiAgICAgfTsKICAgICAKICAgICBIZWFwJiBtX2hl
YXA7Ci0gICAgU2xvdFZpc2l0b3ImIG1fbWFpblZpc2l0b3I7CisgICAgQWJzdHJhY3RTbG90Vmlz
aXRvciYgbV9tYWluVmlzaXRvcjsKICAgICBNYXJraW5nQ29uc3RyYWludFNldCYgbV9zZXQ7CiAg
ICAgQml0VmVjdG9yIG1fZXhlY3V0ZWQ7CiAgICAgRGVxdWU8VGFza1dpdGhDb25zdHJhaW50LCAz
Mj4gbV90b0V4ZWN1dGVJblBhcmFsbGVsOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL1NpbXBsZU1hcmtpbmdDb25zdHJhaW50LmNwcAkocmV2aXNpb24gMjcy
ODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2ltcGxlTWFya2luZ0NvbnN0cmFp
bnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTMwLDcgKzMwLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIFNp
bXBsZU1hcmtpbmdDb25zdHJhaW50OjpTaW1wbGVNYXJraW5nQ29uc3RyYWludCgKICAgICBDU3Ry
aW5nIGFiYnJldmlhdGVkTmFtZSwgQ1N0cmluZyBuYW1lLAotICAgIDo6RnVuY3Rpb248dm9pZChT
bG90VmlzaXRvciYpPiBleGVjdXRlRnVuY3Rpb24sCisgICAgOjpGdW5jdGlvbjx2b2lkKEFic3Ry
YWN0U2xvdFZpc2l0b3ImKT4gZXhlY3V0ZUZ1bmN0aW9uLAogICAgIENvbnN0cmFpbnRWb2xhdGls
aXR5IHZvbGF0aWxpdHksIENvbnN0cmFpbnRDb25jdXJyZW5jeSBjb25jdXJyZW5jeSwKICAgICBD
b25zdHJhaW50UGFyYWxsZWxpc20gcGFyYWxsZWxpc20pCiAgICAgOiBNYXJraW5nQ29uc3RyYWlu
dChXVEZNb3ZlKGFiYnJldmlhdGVkTmFtZSksIFdURk1vdmUobmFtZSksIHZvbGF0aWxpdHksIGNv
bmN1cnJlbmN5LCBwYXJhbGxlbGlzbSkKQEAgLTQyLDcgKzQyLDcgQEAgU2ltcGxlTWFya2luZ0Nv
bnN0cmFpbnQ6On5TaW1wbGVNYXJraW5nQwogewogfQogCi12b2lkIFNpbXBsZU1hcmtpbmdDb25z
dHJhaW50OjpleGVjdXRlSW1wbChTbG90VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgU2ltcGxlTWFy
a2luZ0NvbnN0cmFpbnQ6OmV4ZWN1dGVJbXBsKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3Ip
CiB7CiAgICAgbV9leGVjdXRlRnVuY3Rpb24odmlzaXRvcik7CiB9CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9TaW1wbGVNYXJraW5nQ29uc3RyYWludC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1NpbXBsZU1hcmtpbmdDb25zdHJhaW50LmgJKHJl
dmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1NpbXBsZU1hcmtp
bmdDb25zdHJhaW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzcsMTQgKzM3LDE0IEBAIGNsYXNzIFNpbXBs
ZU1hcmtpbmdDb25zdHJhaW50IGZpbmFsIDogcHUKIHB1YmxpYzoKICAgICBKU19FWFBPUlRfUFJJ
VkFURSBTaW1wbGVNYXJraW5nQ29uc3RyYWludCgKICAgICAgICAgQ1N0cmluZyBhYmJyZXZpYXRl
ZE5hbWUsIENTdHJpbmcgbmFtZSwKLSAgICAgICAgOjpGdW5jdGlvbjx2b2lkKFNsb3RWaXNpdG9y
Jik+LAorICAgICAgICA6OkZ1bmN0aW9uPHZvaWQoQWJzdHJhY3RTbG90VmlzaXRvciYpPiwKICAg
ICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHksCiAgICAgICAgIENvbnN0cmFpbnRDb25jdXJyZW5j
eSA9IENvbnN0cmFpbnRDb25jdXJyZW5jeTo6Q29uY3VycmVudCwKICAgICAgICAgQ29uc3RyYWlu
dFBhcmFsbGVsaXNtID0gQ29uc3RyYWludFBhcmFsbGVsaXNtOjpTZXF1ZW50aWFsKTsKICAgICAK
ICAgICBTaW1wbGVNYXJraW5nQ29uc3RyYWludCgKICAgICAgICAgQ1N0cmluZyBhYmJyZXZpYXRl
ZE5hbWUsIENTdHJpbmcgbmFtZSwKLSAgICAgICAgOjpGdW5jdGlvbjx2b2lkKFNsb3RWaXNpdG9y
Jik+IGZ1bmMsCisgICAgICAgIDo6RnVuY3Rpb248dm9pZChBYnN0cmFjdFNsb3RWaXNpdG9yJik+
IGZ1bmMsCiAgICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5IHZvbGF0aWxpdHksCiAgICAgICAg
IENvbnN0cmFpbnRQYXJhbGxlbGlzbSBwYXJhbGxlbGlzbSkKICAgICAgICAgOiBTaW1wbGVNYXJr
aW5nQ29uc3RyYWludChhYmJyZXZpYXRlZE5hbWUsIG5hbWUsIFdURk1vdmUoZnVuYyksIHZvbGF0
aWxpdHksIENvbnN0cmFpbnRDb25jdXJyZW5jeTo6Q29uY3VycmVudCwgcGFyYWxsZWxpc20pCkBA
IC01NCw5ICs1NCw5IEBAIHB1YmxpYzoKICAgICBKU19FWFBPUlRfUFJJVkFURSB+U2ltcGxlTWFy
a2luZ0NvbnN0cmFpbnQoKSBmaW5hbDsKICAgICAKIHByaXZhdGU6Ci0gICAgdm9pZCBleGVjdXRl
SW1wbChTbG90VmlzaXRvciYpIGZpbmFsOworICAgIHZvaWQgZXhlY3V0ZUltcGwoQWJzdHJhY3RT
bG90VmlzaXRvciYpIGZpbmFsOwogCi0gICAgOjpGdW5jdGlvbjx2b2lkKFNsb3RWaXNpdG9yJik+
IG1fZXhlY3V0ZUZ1bmN0aW9uOworICAgIDo6RnVuY3Rpb248dm9pZChBYnN0cmFjdFNsb3RWaXNp
dG9yJik+IG1fZXhlY3V0ZUZ1bmN0aW9uOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuY3BwCShyZXZpc2lvbiAy
NzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIw
MjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEy
LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC03NywxNSArNzcsMTAgQEAgc3RhdGljIHZvaWQgdmFsaWRhdGUoSlND
ZWxsKiBjZWxsKQogI2VuZGlmCiAKIFNsb3RWaXNpdG9yOjpTbG90VmlzaXRvcihIZWFwJiBoZWFw
LCBDU3RyaW5nIGNvZGVOYW1lKQotICAgIDogbV9ieXRlc1Zpc2l0ZWQoMCkKLSAgICAsIG1fdmlz
aXRDb3VudCgwKQotICAgICwgbV9pc0luUGFyYWxsZWxNb2RlKGZhbHNlKQorICAgIDogQmFzZSho
ZWFwLCBjb2RlTmFtZSwgaGVhcC5tX29wYXF1ZVJvb3RzKQogICAgICwgbV9tYXJraW5nVmVyc2lv
bihNYXJrZWRTcGFjZTo6aW5pdGlhbFZlcnNpb24pCi0gICAgLCBtX2hlYXAoaGVhcCkKLSAgICAs
IG1fY29kZU5hbWUoY29kZU5hbWUpCiAjaWYgQVNTRVJUX0VOQUJMRUQKICAgICAsIG1faXNDaGVj
a2luZ0ZvckRlZmF1bHRNYXJrVmlvbGF0aW9uKGZhbHNlKQotICAgICwgbV9pc0RyYWluaW5nKGZh
bHNlKQogI2VuZGlmCiB7CiB9CkBAIC0xMTcsOCArMTEyLDggQEAgdm9pZCBTbG90VmlzaXRvcjo6
ZGlkU3RhcnRNYXJraW5nKCkKIAogdm9pZCBTbG90VmlzaXRvcjo6cmVzZXQoKQogeworICAgIEFi
c3RyYWN0U2xvdFZpc2l0b3I6OnJlc2V0KCk7CiAgICAgbV9ieXRlc1Zpc2l0ZWQgPSAwOwotICAg
IG1fdmlzaXRDb3VudCA9IDA7CiAgICAgbV9oZWFwQW5hbHl6ZXIgPSBudWxscHRyOwogICAgIFJF
TEVBU0VfQVNTRVJUKCFtX2N1cnJlbnRDZWxsKTsKIH0KQEAgLTIzMCw3ICsyMjUsNyBAQCB2b2lk
IFNsb3RWaXNpdG9yOjphcHBlbmRKU0NlbGxPckF1eGlsaWFyCiB2b2lkIFNsb3RWaXNpdG9yOjph
cHBlbmRTbG93KEpTQ2VsbCogY2VsbCwgRGVwZW5kZW5jeSBkZXBlbmRlbmN5KQogewogICAgIGlm
IChVTkxJS0VMWShtX2hlYXBBbmFseXplcikpCi0gICAgICAgIG1faGVhcEFuYWx5emVyLT5hbmFs
eXplRWRnZShtX2N1cnJlbnRDZWxsLCBjZWxsLCBtX3Jvb3RNYXJrUmVhc29uKTsKKyAgICAgICAg
bV9oZWFwQW5hbHl6ZXItPmFuYWx5emVFZGdlKG1fY3VycmVudENlbGwsIGNlbGwsIHJvb3RNYXJr
UmVhc29uKCkpOwogCiAgICAgYXBwZW5kSGlkZGVuU2xvd0ltcGwoY2VsbCwgZGVwZW5kZW5jeSk7
CiB9CkBAIC04MDcsMTIgKzgwMiwxMiBAQCBNYXJrU3RhY2tBcnJheSYgU2xvdFZpc2l0b3I6OmNv
cnJlc3BvbmRpCiAgICAgcmV0dXJuICptX2hlYXAubV9zaGFyZWRNdXRhdG9yTWFya1N0YWNrOwog
fQogCi12b2lkIFNsb3RWaXNpdG9yOjphZGRQYXJhbGxlbENvbnN0cmFpbnRUYXNrKFJlZlB0cjxT
aGFyZWRUYXNrPHZvaWQoU2xvdFZpc2l0b3ImKT4+IHRhc2spCit2b2lkIFNsb3RWaXNpdG9yOjph
ZGRQYXJhbGxlbENvbnN0cmFpbnRUYXNrKFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoQWJzdHJhY3RT
bG90VmlzaXRvciYpPj4gdGFzaykKIHsKICAgICBSRUxFQVNFX0FTU0VSVChtX2N1cnJlbnRTb2x2
ZXIpOwogICAgIFJFTEVBU0VfQVNTRVJUKG1fY3VycmVudENvbnN0cmFpbnQpOwogICAgIFJFTEVB
U0VfQVNTRVJUKHRhc2spOwotICAgIAorCiAgICAgbV9jdXJyZW50U29sdmVyLT5hZGRQYXJhbGxl
bFRhc2sodGFzaywgKm1fY3VycmVudENvbnN0cmFpbnQpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1
LDU5ICsyNSw3MSBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgIkFic3RyYWN0U2xvdFZp
c2l0b3IuaCIKICNpbmNsdWRlICJIYW5kbGVUeXBlcy5oIgogI2luY2x1ZGUgIkl0ZXJhdGlvblN0
YXR1cy5oIgotI2luY2x1ZGUgIk1hcmtTdGFjay5oIgotI2luY2x1ZGUgIlJvb3RNYXJrUmVhc29u
LmgiCi0jaW5jbHVkZSAiVmlzaXRSYWNlS2V5LmgiCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4K
ICNpbmNsdWRlIDx3dGYvTW9ub3RvbmljVGltZS5oPgotI2luY2x1ZGUgPHd0Zi9TaGFyZWRUYXNr
Lmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIAot
Y2xhc3MgQ29uc2VydmF0aXZlUm9vdHM7CiBjbGFzcyBHQ1RocmVhZFNoYXJlZERhdGE7Ci1jbGFz
cyBIZWFwOwogY2xhc3MgSGVhcENlbGw7CiBjbGFzcyBIZWFwQW5hbHl6ZXI7Ci1jbGFzcyBNYXJr
ZWRCbG9jazsKIGNsYXNzIE1hcmtpbmdDb25zdHJhaW50OwogY2xhc3MgTWFya2luZ0NvbnN0cmFp
bnRTb2x2ZXI7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjbGFzcyBXZWFrOwotdGVtcGxhdGU8dHlw
ZW5hbWUgVCwgdHlwZW5hbWUgVHJhaXRzPiBjbGFzcyBXcml0ZUJhcnJpZXJCYXNlOwogCiB0eXBl
ZGVmIHVpbnQzMl90IEhlYXBWZXJzaW9uOwogCi1jbGFzcyBTbG90VmlzaXRvciB7CitjbGFzcyBT
bG90VmlzaXRvciBmaW5hbCA6IHB1YmxpYyBBYnN0cmFjdFNsb3RWaXNpdG9yIHsKICAgICBXVEZf
TUFLRV9OT05DT1BZQUJMRShTbG90VmlzaXRvcik7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FU
RUQ7CiAKKyAgICB1c2luZyBCYXNlID0gQWJzdHJhY3RTbG90VmlzaXRvcjsKKwogICAgIGZyaWVu
ZCBjbGFzcyBTZXRDdXJyZW50Q2VsbFNjb3BlOwogICAgIGZyaWVuZCBjbGFzcyBIZWFwOwogCiBw
dWJsaWM6CisgICAgY2xhc3MgQ29udGV4dCB7CisgICAgcHVibGljOgorICAgICAgICBBTFdBWVNf
SU5MSU5FIENvbnRleHQoQWJzdHJhY3RTbG90VmlzaXRvciYsIEhlYXBDZWxsKikgeyB9CisgICAg
fTsKKworICAgIGNsYXNzIERlZmF1bHRNYXJraW5nVmlvbGF0aW9uQXNzZXJ0aW9uU2NvcGUgewor
ICAgIHB1YmxpYzoKKyNpZiBBU1NFUlRfRU5BQkxFRAorICAgICAgICBEZWZhdWx0TWFya2luZ1Zp
b2xhdGlvbkFzc2VydGlvblNjb3BlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorICAgICAgICAgICAg
OiBtX3Zpc2l0b3IodmlzaXRvcikKKyAgICAgICAgeworICAgICAgICAgICAgbV93YXNDaGVja2lu
Z0ZvckRlZmF1bHRNYXJrVmlvbGF0aW9uID0gbV92aXNpdG9yLm1faXNDaGVja2luZ0ZvckRlZmF1
bHRNYXJrVmlvbGF0aW9uOworICAgICAgICAgICAgbV92aXNpdG9yLm1faXNDaGVja2luZ0ZvckRl
ZmF1bHRNYXJrVmlvbGF0aW9uID0gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICB+RGVmYXVs
dE1hcmtpbmdWaW9sYXRpb25Bc3NlcnRpb25TY29wZSgpCisgICAgICAgIHsKKyAgICAgICAgICAg
IG1fdmlzaXRvci5tX2lzQ2hlY2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlvbiA9IG1fd2FzQ2hl
Y2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlvbjsKKyAgICAgICAgfQorCisgICAgcHJpdmF0ZToK
KyAgICAgICAgU2xvdFZpc2l0b3ImIG1fdmlzaXRvcjsKKyAgICAgICAgYm9vbCBtX3dhc0NoZWNr
aW5nRm9yRGVmYXVsdE1hcmtWaW9sYXRpb247CisjZWxzZQorICAgICAgICBEZWZhdWx0TWFya2lu
Z1Zpb2xhdGlvbkFzc2VydGlvblNjb3BlKFNsb3RWaXNpdG9yJikgeyB9CisjZW5kaWYKKyAgICB9
OworCiAgICAgU2xvdFZpc2l0b3IoSGVhcCYsIENTdHJpbmcgY29kZU5hbWUpOwogICAgIH5TbG90
VmlzaXRvcigpOwogCi0gICAgTWFya1N0YWNrQXJyYXkmIGNvbGxlY3Rvck1hcmtTdGFjaygpIHsg
cmV0dXJuIG1fY29sbGVjdG9yU3RhY2s7IH0KLSAgICBNYXJrU3RhY2tBcnJheSYgbXV0YXRvck1h
cmtTdGFjaygpIHsgcmV0dXJuIG1fbXV0YXRvclN0YWNrOyB9Ci0gICAgY29uc3QgTWFya1N0YWNr
QXJyYXkmIGNvbGxlY3Rvck1hcmtTdGFjaygpIGNvbnN0IHsgcmV0dXJuIG1fY29sbGVjdG9yU3Rh
Y2s7IH0KLSAgICBjb25zdCBNYXJrU3RhY2tBcnJheSYgbXV0YXRvck1hcmtTdGFjaygpIGNvbnN0
IHsgcmV0dXJuIG1fbXV0YXRvclN0YWNrOyB9Ci0gICAgCi0gICAgVk0mIHZtKCk7Ci0gICAgY29u
c3QgVk0mIHZtKCkgY29uc3Q7Ci0gICAgSGVhcCogaGVhcCgpIGNvbnN0OworICAgIHZvaWQgYXBw
ZW5kKGNvbnN0IENvbnNlcnZhdGl2ZVJvb3RzJikgZmluYWw7CiAKLSAgICB2b2lkIGFwcGVuZChj
b25zdCBDb25zZXJ2YXRpdmVSb290cyYpOwotICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQs
IHR5cGVuYW1lIFRyYWl0cz4gdm9pZCBhcHBlbmQoY29uc3QgV3JpdGVCYXJyaWVyQmFzZTxULCBU
cmFpdHM+Jik7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVHJhaXRzPiB2b2lk
IGFwcGVuZEhpZGRlbihjb25zdCBXcml0ZUJhcnJpZXJCYXNlPFQsIFRyYWl0cz4mKTsKICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBJdGVyYXRvcj4gdm9pZCBhcHBlbmQoSXRlcmF0b3IgYmVnaW4gLCBJ
dGVyYXRvciBlbmQpOwotICAgIHZvaWQgYXBwZW5kVmFsdWVzKGNvbnN0IFdyaXRlQmFycmllckJh
c2U8VW5rbm93biwgUmF3VmFsdWVUcmFpdHM8VW5rbm93bj4+Kiwgc2l6ZV90IGNvdW50KTsKLSAg
ICB2b2lkIGFwcGVuZFZhbHVlc0hpZGRlbihjb25zdCBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24s
IFJhd1ZhbHVlVHJhaXRzPFVua25vd24+PiosIHNpemVfdCBjb3VudCk7Ci0gICAgCisgICAgQUxX
QVlTX0lOTElORSB2b2lkIGFwcGVuZFZhbHVlcyhjb25zdCBXcml0ZUJhcnJpZXJCYXNlPFVua25v
d24sIFJhd1ZhbHVlVHJhaXRzPFVua25vd24+PiosIHNpemVfdCBjb3VudCk7CisgICAgQUxXQVlT
X0lOTElORSB2b2lkIGFwcGVuZFZhbHVlc0hpZGRlbihjb25zdCBXcml0ZUJhcnJpZXJCYXNlPFVu
a25vd24sIFJhd1ZhbHVlVHJhaXRzPFVua25vd24+PiosIHNpemVfdCBjb3VudCk7CisKICAgICAv
LyBUaGVzZSBkb24ndCByZXF1aXJlIHlvdSB0byBwcm92ZSB0aGF0IHlvdSBoYXZlIGEgV3JpdGVC
YXJyaWVyPD4uIFRoYXQgbWFrZXMgc2Vuc2UKICAgICAvLyBmb3I6CiAgICAgLy8KQEAgLTg3LDMy
ICs5OSwyNyBAQCBwdWJsaWM6CiAgICAgLy8KICAgICAvLyBJZiB5b3UgYXJlIG5vdCBhIHJvb3Qg
YW5kIHlvdSBkb24ndCBrbm93IHdoYXQga2luZCBvZiBiYXJyaWVyIHlvdSBoYXZlLCB0aGVuIHlv
dQogICAgIC8vIHNob3VsZG4ndCBjYWxsIHRoZXNlIG1ldGhvZHMuCi0gICAgdm9pZCBhcHBlbmRV
bmJhcnJpZXJlZChKU1ZhbHVlKTsKLSAgICB2b2lkIGFwcGVuZFVuYmFycmllcmVkKEpTVmFsdWUq
LCBzaXplX3QpOwotICAgIHZvaWQgYXBwZW5kVW5iYXJyaWVyZWQoSlNDZWxsKik7CisgICAgQUxX
QVlTX0lOTElORSB2b2lkIGFwcGVuZFVuYmFycmllcmVkKEpTVmFsdWUpOworICAgIEFMV0FZU19J
TkxJTkUgdm9pZCBhcHBlbmRVbmJhcnJpZXJlZChKU1ZhbHVlKiwgc2l6ZV90KTsKKyAgICB2b2lk
IGFwcGVuZFVuYmFycmllcmVkKEpTQ2VsbCopIGZpbmFsOwogICAgIAogICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFQ+CiAgICAgdm9pZCBhcHBlbmQoY29uc3QgV2VhazxUPiYgd2Vhayk7CiAgICAgCi0g
ICAgdm9pZCBhcHBlbmRIaWRkZW5VbmJhcnJpZXJlZChKU1ZhbHVlKTsKLSAgICB2b2lkIGFwcGVu
ZEhpZGRlblVuYmFycmllcmVkKEpTQ2VsbCopOwotCi0gICAgYm9vbCBhZGRPcGFxdWVSb290KHZv
aWQqKTsgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSByb290IHdhcyBuZXcuCi0gICAgCi0gICAgYm9v
bCBjb250YWluc09wYXF1ZVJvb3Qodm9pZCopIGNvbnN0OworICAgIEFMV0FZU19JTkxJTkUgdm9p
ZCBhcHBlbmRIaWRkZW5VbmJhcnJpZXJlZChKU1ZhbHVlKTsKKyAgICB2b2lkIGFwcGVuZEhpZGRl
blVuYmFycmllcmVkKEpTQ2VsbCopIGZpbmFsOwogCi0gICAgYm9vbCBpc0VtcHR5KCkgeyByZXR1
cm4gbV9jb2xsZWN0b3JTdGFjay5pc0VtcHR5KCkgJiYgbV9tdXRhdG9yU3RhY2suaXNFbXB0eSgp
OyB9CisgICAgYm9vbCBpc0ZpcnN0VmlzaXQoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2lzRmly
c3RWaXNpdDsgfQogCi0gICAgYm9vbCBpc0ZpcnN0VmlzaXQoKSBjb25zdCB7IHJldHVybiBtX2lz
Rmlyc3RWaXNpdDsgfQorICAgIGJvb2wgaXNNYXJrZWQoY29uc3Qgdm9pZCopIGNvbnN0IGZpbmFs
OworICAgIGJvb2wgaXNNYXJrZWQoTWFya2VkQmxvY2smLCBIZWFwQ2VsbCopIGNvbnN0IGZpbmFs
OworICAgIGJvb2wgaXNNYXJrZWQoUHJlY2lzZUFsbG9jYXRpb24mLCBIZWFwQ2VsbCopIGNvbnN0
IGZpbmFsOwogCiAgICAgdm9pZCBkaWRTdGFydE1hcmtpbmcoKTsKICAgICB2b2lkIHJlc2V0KCk7
CiAgICAgdm9pZCBjbGVhck1hcmtTdGFja3MoKTsKIAogICAgIHNpemVfdCBieXRlc1Zpc2l0ZWQo
KSBjb25zdCB7IHJldHVybiBtX2J5dGVzVmlzaXRlZDsgfQotICAgIHNpemVfdCB2aXNpdENvdW50
KCkgY29uc3QgeyByZXR1cm4gbV92aXNpdENvdW50OyB9Ci0gICAgCi0gICAgdm9pZCBhZGRUb1Zp
c2l0Q291bnQoc2l6ZV90IHZhbHVlKSB7IG1fdmlzaXRDb3VudCArPSB2YWx1ZTsgfQogCiAgICAg
dm9pZCBkb25hdGUoKTsKICAgICB2b2lkIGRyYWluKE1vbm90b25pY1RpbWUgdGltZW91dCA9IE1v
bm90b25pY1RpbWU6OmluZmluaXR5KCkpOwpAQCAtMTM1LDI0ICsxNDIsMTggQEAgcHVibGljOgog
ICAgIAogICAgIC8vIFRoaXMgaW5mb3JtcyB0aGUgR0MgYWJvdXQgYXV4aWxpYXJ5IG9mIHNvbWUg
c2l6ZSB0aGF0IHdlIGFyZSBrZWVwaW5nIGFsaXZlLiBJZiB5b3UgZG9uJ3QgZG8KICAgICAvLyB0
aGlzIHRoZW4gdGhlIHNwYWNlIHdpbGwgYmUgZnJlZWQgYXQgZW5kIG9mIEdDLgotICAgIHZvaWQg
bWFya0F1eGlsaWFyeShjb25zdCB2b2lkKiBiYXNlKTsKKyAgICB2b2lkIG1hcmtBdXhpbGlhcnko
Y29uc3Qgdm9pZCogYmFzZSkgZmluYWw7CiAKLSAgICB2b2lkIHJlcG9ydEV4dHJhTWVtb3J5Vmlz
aXRlZChzaXplX3QpOworICAgIHZvaWQgcmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKHNpemVfdCkg
ZmluYWw7CiAjaWYgRU5BQkxFKFJFU09VUkNFX1VTQUdFKQotICAgIHZvaWQgcmVwb3J0RXh0ZXJu
YWxNZW1vcnlWaXNpdGVkKHNpemVfdCk7CisgICAgdm9pZCByZXBvcnRFeHRlcm5hbE1lbW9yeVZp
c2l0ZWQoc2l6ZV90KSBmaW5hbDsKICNlbmRpZgogICAgIAotICAgIHZvaWQgZHVtcChQcmludFN0
cmVhbSYpIGNvbnN0OwotCi0gICAgYm9vbCBpc0FuYWx5emluZ0hlYXAoKSBjb25zdCB7IHJldHVy
biAhIW1faGVhcEFuYWx5emVyOyB9Ci0gICAgSGVhcEFuYWx5emVyKiBoZWFwQW5hbHl6ZXIoKSBj
b25zdCB7IHJldHVybiBtX2hlYXBBbmFseXplcjsgfQotICAgIAotICAgIFJvb3RNYXJrUmVhc29u
IHJvb3RNYXJrUmVhc29uKCkgY29uc3QgeyByZXR1cm4gbV9yb290TWFya1JlYXNvbjsgfQotICAg
IHZvaWQgc2V0Um9vdE1hcmtSZWFzb24oUm9vdE1hcmtSZWFzb24gcmVhc29uKSB7IG1fcm9vdE1h
cmtSZWFzb24gPSByZWFzb247IH0KKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdCBm
aW5hbDsKIAogICAgIEhlYXBWZXJzaW9uIG1hcmtpbmdWZXJzaW9uKCkgY29uc3QgeyByZXR1cm4g
bV9tYXJraW5nVmVyc2lvbjsgfQogCi0gICAgYm9vbCBtdXRhdG9ySXNTdG9wcGVkKCkgY29uc3Qg
eyByZXR1cm4gbV9tdXRhdG9ySXNTdG9wcGVkOyB9CisgICAgYm9vbCBtdXRhdG9ySXNTdG9wcGVk
KCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9tdXRhdG9ySXNTdG9wcGVkOyB9CiAgICAgCiAgICAg
TG9jayYgcmlnaHRUb1J1bigpIHsgcmV0dXJuIG1fcmlnaHRUb1J1bjsgfQogICAgIApAQCAtMTY0
LDIwICsxNjUsMTYgQEAgcHVibGljOgogICAgIAogICAgIHZvaWQgb3B0aW1pemVGb3JTdG9wcGVk
TXV0YXRvcigpOwogICAgIAotICAgIHZvaWQgZGlkUmFjZShjb25zdCBWaXNpdFJhY2VLZXkmKTsK
KyAgICB2b2lkIGRpZFJhY2UoY29uc3QgVmlzaXRSYWNlS2V5JikgZmluYWw7CiAgICAgdm9pZCBk
aWRSYWNlKEpTQ2VsbCogY2VsbCwgY29uc3QgY2hhciogcmVhc29uKSB7IGRpZFJhY2UoVmlzaXRS
YWNlS2V5KGNlbGwsIHJlYXNvbikpOyB9CiAgICAgCi0gICAgdm9pZCB2aXNpdEFzQ29uc3RyYWlu
dChjb25zdCBKU0NlbGwqKTsKKyAgICB2b2lkIHZpc2l0QXNDb25zdHJhaW50KGNvbnN0IEpTQ2Vs
bCopIGZpbmFsOwogICAgIAogICAgIGJvb2wgZGlkUmVhY2hUZXJtaW5hdGlvbigpOwogICAgIAot
ICAgIHZvaWQgc2V0SWdub3JlTmV3T3BhcXVlUm9vdHMoYm9vbCB2YWx1ZSkgeyBtX2lnbm9yZU5l
d09wYXF1ZVJvb3RzID0gdmFsdWU7IH0KLQogICAgIHZvaWQgZG9uYXRlQWxsKCk7CiAgICAgCi0g
ICAgY29uc3QgY2hhciogY29kZU5hbWUoKSBjb25zdCB7IHJldHVybiBtX2NvZGVOYW1lLmRhdGEo
KTsgfQotICAgIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgYWRkUGFyYWxsZWxDb25zdHJh
aW50VGFzayhSZWZQdHI8U2hhcmVkVGFzazx2b2lkKFNsb3RWaXNpdG9yJik+Pik7CisgICAgdm9p
ZCBhZGRQYXJhbGxlbENvbnN0cmFpbnRUYXNrKFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoQWJzdHJh
Y3RTbG90VmlzaXRvciYpPj4pIGZpbmFsOwogCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBQ
YXJhbGxlbE1vZGVFbmFibGVyOwpAQCAtMjE2LDM5ICsyMTMsMjUgQEAgcHJpdmF0ZToKIAogICAg
IE1hcmtTdGFja0FycmF5JiBjb3JyZXNwb25kaW5nR2xvYmFsU3RhY2soTWFya1N0YWNrQXJyYXkm
KTsKIAotICAgIE1hcmtTdGFja0FycmF5IG1fY29sbGVjdG9yU3RhY2s7Ci0gICAgTWFya1N0YWNr
QXJyYXkgbV9tdXRhdG9yU3RhY2s7Ci0gICAgCi0gICAgc2l6ZV90IG1fYnl0ZXNWaXNpdGVkOwot
ICAgIHNpemVfdCBtX3Zpc2l0Q291bnQ7Ci0gICAgc2l6ZV90IG1fbm9uQ2VsbFZpc2l0Q291bnQg
eyAwIH07IC8vIFVzZWQgZm9yIGluY3JlbWVudGFsIGRyYWluaW5nLCBpZ25vcmVkIG90aGVyd2lz
ZS4KLSAgICBDaGVja2VkU2l6ZSBtX2V4dHJhTWVtb3J5U2l6ZSB7IDAgfTsKLSAgICBib29sIG1f
aXNJblBhcmFsbGVsTW9kZTsKLSAgICBib29sIG1faWdub3JlTmV3T3BhcXVlUm9vdHMgeyBmYWxz
ZSB9OyAvLyBVc2VmdWwgYXMgYSBkZWJ1Z2dpbmcgbW9kZS4KKyAgICBib29sIG1faXNJblBhcmFs
bGVsTW9kZSB7IGZhbHNlIH07CiAKICAgICBIZWFwVmVyc2lvbiBtX21hcmtpbmdWZXJzaW9uOwot
ICAgIAotICAgIEhlYXAmIG1faGVhcDsKKworICAgIHNpemVfdCBtX2J5dGVzVmlzaXRlZCB7IDAg
fTsKKyAgICBzaXplX3QgbV9ub25DZWxsVmlzaXRDb3VudCB7IDAgfTsgLy8gVXNlZCBmb3IgaW5j
cmVtZW50YWwgZHJhaW5pbmcsIGlnbm9yZWQgb3RoZXJ3aXNlLgorICAgIENoZWNrZWRTaXplIG1f
ZXh0cmFNZW1vcnlTaXplIHsgMCB9OwogCiAgICAgSGVhcEFuYWx5emVyKiBtX2hlYXBBbmFseXpl
ciB7IG51bGxwdHIgfTsKICAgICBKU0NlbGwqIG1fY3VycmVudENlbGwgeyBudWxscHRyIH07Ci0g
ICAgUm9vdE1hcmtSZWFzb24gbV9yb290TWFya1JlYXNvbiB7IFJvb3RNYXJrUmVhc29uOjpOb25l
IH07CiAgICAgYm9vbCBtX2lzRmlyc3RWaXNpdCB7IGZhbHNlIH07CiAgICAgYm9vbCBtX211dGF0
b3JJc1N0b3BwZWQgeyBmYWxzZSB9OwogICAgIGJvb2wgbV9jYW5PcHRpbWl6ZUZvclN0b3BwZWRN
dXRhdG9yIHsgZmFsc2UgfTsKICAgICBMb2NrIG1fcmlnaHRUb1J1bjsKICAgICAKLSAgICBDU3Ry
aW5nIG1fY29kZU5hbWU7Ci0gICAgCi0gICAgTWFya2luZ0NvbnN0cmFpbnQqIG1fY3VycmVudENv
bnN0cmFpbnQgeyBudWxscHRyIH07Ci0gICAgTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXIqIG1fY3Vy
cmVudFNvbHZlciB7IG51bGxwdHIgfTsKLSAgICAKICAgICAvLyBQdXQgcGFkZGluZyBoZXJlIHRv
IG1pdGlnYXRlIGZhbHNlIHNoYXJpbmcgYmV0d2VlbiBtdWx0aXBsZSBTbG90VmlzaXRvcnMuCiAg
ICAgY2hhciBwYWRkaW5nWzY0XTsKLXB1YmxpYzoKICNpZiBBU1NFUlRfRU5BQkxFRAotICAgIGJv
b2wgbV9pc0NoZWNraW5nRm9yRGVmYXVsdE1hcmtWaW9sYXRpb247Ci0gICAgYm9vbCBtX2lzRHJh
aW5pbmc7CisgICAgYm9vbCBtX2lzQ2hlY2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlvbiB7IGZh
bHNlIH07CiAjZW5kaWYKIH07CiAKQEAgLTI3MSwyMyArMjU0LDQgQEAgcHJpdmF0ZToKICAgICBT
bG90VmlzaXRvciYgbV9zdGFjazsKIH07CiAKLWNsYXNzIFNldFJvb3RNYXJrUmVhc29uU2NvcGUg
ewotcHVibGljOgotICAgIFNldFJvb3RNYXJrUmVhc29uU2NvcGUoU2xvdFZpc2l0b3ImIHZpc2l0
b3IsIFJvb3RNYXJrUmVhc29uIHJlYXNvbikKLSAgICAgICAgOiBtX3Zpc2l0b3IodmlzaXRvcikK
LSAgICAgICAgLCBtX3ByZXZpb3VzUmVhc29uKHZpc2l0b3Iucm9vdE1hcmtSZWFzb24oKSkKLSAg
ICB7Ci0gICAgICAgIG1fdmlzaXRvci5zZXRSb290TWFya1JlYXNvbihyZWFzb24pOwotICAgIH0K
LQotICAgIH5TZXRSb290TWFya1JlYXNvblNjb3BlKCkKLSAgICB7Ci0gICAgICAgIG1fdmlzaXRv
ci5zZXRSb290TWFya1JlYXNvbihtX3ByZXZpb3VzUmVhc29uKTsKLSAgICB9Ci0KLXByaXZhdGU6
Ci0gICAgU2xvdFZpc2l0b3ImIG1fdmlzaXRvcjsKLSAgICBSb290TWFya1JlYXNvbiBtX3ByZXZp
b3VzUmVhc29uOwotfTsKLQogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9TbG90VmlzaXRvcklubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvcklubGluZXMuaAkocmV2aXNpb24gMjcyODMw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIw
MTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEy
LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0yNSw5ICsyNSwxMCBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2luY2x1
ZGUgIkFic3RyYWN0U2xvdFZpc2l0b3JJbmxpbmVzLmgiCisjaW5jbHVkZSAiTWFya2VkQmxvY2su
aCIKKyNpbmNsdWRlICJQcmVjaXNlQWxsb2NhdGlvbi5oIgogI2luY2x1ZGUgIlNsb3RWaXNpdG9y
LmgiCi0jaW5jbHVkZSAiV2Vhay5oIgotI2luY2x1ZGUgIldlYWtJbmxpbmVzLmgiCiAKIG5hbWVz
cGFjZSBKU0MgewogCkBAIC0xMzQsMjEgKzEzNSwxOSBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgU2xv
dFZpc2l0b3I6OmFwcGVuZFZhCiAgICAgICAgIGFwcGVuZEhpZGRlbihiYXJyaWVyc1tpXSk7CiB9
CiAKLWlubGluZSBib29sIFNsb3RWaXNpdG9yOjphZGRPcGFxdWVSb290KHZvaWQqIHB0cikKK0FM
V0FZU19JTkxJTkUgYm9vbCBTbG90VmlzaXRvcjo6aXNNYXJrZWQoY29uc3Qgdm9pZCogcCkgY29u
c3QKIHsKLSAgICBpZiAoIXB0cikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChtX2ln
bm9yZU5ld09wYXF1ZVJvb3RzKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFoZWFw
KCktPm1fb3BhcXVlUm9vdHMuYWRkKHB0cikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBt
X3Zpc2l0Q291bnQrKzsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gaGVhcCgpLT5pc01h
cmtlZChwKTsKIH0KIAotaW5saW5lIGJvb2wgU2xvdFZpc2l0b3I6OmNvbnRhaW5zT3BhcXVlUm9v
dCh2b2lkKiBwdHIpIGNvbnN0CitBTFdBWVNfSU5MSU5FIGJvb2wgU2xvdFZpc2l0b3I6OmlzTWFy
a2VkKE1hcmtlZEJsb2NrJiBjb250YWluZXIsIEhlYXBDZWxsKiBjZWxsKSBjb25zdAogewotICAg
IHJldHVybiBoZWFwKCktPm1fb3BhcXVlUm9vdHMuY29udGFpbnMocHRyKTsKKyAgICByZXR1cm4g
Y29udGFpbmVyLmlzTWFya2VkKG1hcmtpbmdWZXJzaW9uKCksIGNlbGwpOworfQorCitBTFdBWVNf
SU5MSU5FIGJvb2wgU2xvdFZpc2l0b3I6OmlzTWFya2VkKFByZWNpc2VBbGxvY2F0aW9uJiBjb250
YWluZXIsIEhlYXBDZWxsKiBjZWxsKSBjb25zdAoreworICAgIHJldHVybiBjb250YWluZXIuaXNN
YXJrZWQobWFya2luZ1ZlcnNpb24oKSwgY2VsbCk7CiB9CiAKIGlubGluZSB2b2lkIFNsb3RWaXNp
dG9yOjpyZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQoc2l6ZV90IHNpemUpCkBAIC0xNjksMjEgKzE2
OCw2IEBAIGlubGluZSB2b2lkIFNsb3RWaXNpdG9yOjpyZXBvcnRFeHRlcm5hbE0KIH0KICNlbmRp
ZgogCi1pbmxpbmUgSGVhcCogU2xvdFZpc2l0b3I6OmhlYXAoKSBjb25zdAotewotICAgIHJldHVy
biAmbV9oZWFwOwotfQotCi1pbmxpbmUgVk0mIFNsb3RWaXNpdG9yOjp2bSgpCi17Ci0gICAgcmV0
dXJuIG1faGVhcC52bSgpOwotfQotCi1pbmxpbmUgY29uc3QgVk0mIFNsb3RWaXNpdG9yOjp2bSgp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1faGVhcC52bSgpOwotfQotCiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBGdW5jPgogSXRlcmF0aW9uU3RhdHVzIFNsb3RWaXNpdG9yOjpmb3JFYWNoTWFya1N0YWNrKGNv
bnN0IEZ1bmMmIGZ1bmMpCiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90
VmlzaXRvck1hY3Jvcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L1Nsb3RWaXNpdG9yTWFjcm9zLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvU2xvdFZpc2l0b3JNYWNyb3MuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDcx
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdt
YSBvbmNlCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBBYnN0cmFjdFNsb3RWaXNpdG9yOwor
Y2xhc3MgSlNDZWxsOworY2xhc3MgU2xvdFZpc2l0b3I7CisKKyNkZWZpbmUgREVDTEFSRV9VTlVT
RURfU1RSVUNUX1RPX1RFUk1JTkFURV9WSVNJVF9DSElMRFJFTl9NQUNST19FWFBBTkRFUl9JTVBM
KGNvdW50ZXIpIFwKKyAgICBzdHJ1Y3QgVW51c2VkU2xvdFZpc2l0b3JTdHJ1Y3RTb1dlQ2FuSGF2
ZUFTZW1pY29sb24jI2NvdW50ZXIgeyB9CisKKyNkZWZpbmUgREVDTEFSRV9VTlVTRURfU1RSVUNU
X1RPX1RFUk1JTkFURV9WSVNJVF9DSElMRFJFTl9NQUNST19FWFBBTkRFUihjb3VudGVyKSBcCisg
ICAgREVDTEFSRV9VTlVTRURfU1RSVUNUX1RPX1RFUk1JTkFURV9WSVNJVF9DSElMRFJFTl9NQUNS
T19FWFBBTkRFUl9JTVBMKGNvdW50ZXIpCisKKyNkZWZpbmUgREVDTEFSRV9VTlVTRURfU1RSVUNU
X1RPX1RFUk1JTkFURV9WSVNJVF9DSElMRFJFTl9NQUNSTyBcCisgICAgREVDTEFSRV9VTlVTRURf
U1RSVUNUX1RPX1RFUk1JTkFURV9WSVNJVF9DSElMRFJFTl9NQUNST19FWFBBTkRFUihfX0NPVU5U
RVJfXykKKworLy8gTWFjcm9zIGZvciBzdGF0aWMgdmlzaXRDaGlsZHJlbigpLgorCisjZGVmaW5l
IERFQ0xBUkVfVklTSVRfQ0hJTERSRU5fV0lUSF9NT0RJRklFUihtb2RpZmllcikgXAorcHJpdmF0
ZTogXAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IEFMV0FZU19JTkxJTkUgc3RhdGlj
IHZvaWQgdmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiwgVmlzaXRvciYpOyBcCitwdWJsaWM6IFwK
KyAgICBtb2RpZmllciBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIEFic3RyYWN0
U2xvdFZpc2l0b3ImKTsgXAorICAgIG1vZGlmaWVyIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4o
SlNDZWxsKiwgU2xvdFZpc2l0b3ImKQorCisjZGVmaW5lIERFQ0xBUkVfVklTSVRfQ0hJTERSRU4g
XAorICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU5fV0lUSF9NT0RJRklFUigpCisKKyNkZWZpbmUg
REVGSU5FX1ZJU0lUX0NISUxEUkVOX1dJVEhfTU9ESUZJRVIobW9kaWZpZXIsIGNsYXNzTmFtZSkg
XAorICAgIG1vZGlmaWVyIHZvaWQgY2xhc3NOYW1lOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2Vs
bCwgQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikgXAorICAgIHsgXAorICAgICAgICBBYnN0
cmFjdFNsb3RWaXNpdG9yOjpDb250ZXh0IGNvbnRleHQodmlzaXRvciwgY2VsbCk7IFwKKyAgICAg
ICAgdmlzaXRDaGlsZHJlbkltcGwoY2VsbCwgdmlzaXRvcik7IFwKKyAgICB9IFwKKyAgICBtb2Rp
ZmllciB2b2lkIGNsYXNzTmFtZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNp
dG9yJiB2aXNpdG9yKSB7IHZpc2l0Q2hpbGRyZW5JbXBsKGNlbGwsIHZpc2l0b3IpOyB9IFwKKyAg
ICBERUNMQVJFX1VOVVNFRF9TVFJVQ1RfVE9fVEVSTUlOQVRFX1ZJU0lUX0NISUxEUkVOX01BQ1JP
CisKKyNkZWZpbmUgREVGSU5FX1ZJU0lUX0NISUxEUkVOKGNsYXNzTmFtZSkgXAorICAgIERFRklO
RV9WSVNJVF9DSElMRFJFTl9XSVRIX01PRElGSUVSKCwgY2xhc3NOYW1lKQorCit9IC8vIG5hbWVz
cGFjZSBKU0MKKwordXNpbmcgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yOwordXNpbmcgSlNDOjpK
U0NlbGw7Cit1c2luZyBKU0M6OlNsb3RWaXNpdG9yOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvU3Vic3BhY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9TdWJzcGFjZS5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9TdWJzcGFjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxNy0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzQsNiArMzQsNyBAQAogCiBu
YW1lc3BhY2UgSlNDIHsKIAorY2xhc3MgQWJzdHJhY3RTbG90VmlzaXRvcjsKIGNsYXNzIEFsaWdu
ZWRNZW1vcnlBbGxvY2F0b3I7CiBjbGFzcyBIZWFwQ2VsbFR5cGU7CiAKQEAgLTg3LDcgKzg4LDcg
QEAgcHVibGljOgogICAgIHZvaWQgZm9yRWFjaE1hcmtlZENlbGwoY29uc3QgRnVuYyYpOwogICAg
IAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+Ci0gICAgUmVmPFNoYXJlZFRhc2s8dm9pZChT
bG90VmlzaXRvciYpPj4gZm9yRWFjaE1hcmtlZENlbGxJblBhcmFsbGVsKGNvbnN0IEZ1bmMmKTsK
KyAgICBSZWY8U2hhcmVkVGFzazx2b2lkKEFic3RyYWN0U2xvdFZpc2l0b3ImKT4+IGZvckVhY2hN
YXJrZWRDZWxsSW5QYXJhbGxlbChjb25zdCBGdW5jJik7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBGdW5jPgogICAgIHZvaWQgZm9yRWFjaExpdmVDZWxsKGNvbnN0IEZ1bmMmKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N1YnNwYWNlSW5saW5lcy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N1YnNwYWNlSW5saW5lcy5oCShyZXZpc2lvbiAy
NzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdWJzcGFjZUlubGluZXMuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTct
MjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTg2LDkgKzg2LDkgQEAgdm9pZCBTdWJzcGFjZTo6Zm9yRWFjaE1h
cmtlZENlbGwoY29uc3QgRgogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgotUmVmPFNoYXJl
ZFRhc2s8dm9pZChTbG90VmlzaXRvciYpPj4gU3Vic3BhY2U6OmZvckVhY2hNYXJrZWRDZWxsSW5Q
YXJhbGxlbChjb25zdCBGdW5jJiBmdW5jKQorUmVmPFNoYXJlZFRhc2s8dm9pZChBYnN0cmFjdFNs
b3RWaXNpdG9yJik+PiBTdWJzcGFjZTo6Zm9yRWFjaE1hcmtlZENlbGxJblBhcmFsbGVsKGNvbnN0
IEZ1bmMmIGZ1bmMpCiB7Ci0gICAgY2xhc3MgVGFzayBmaW5hbCA6IHB1YmxpYyBTaGFyZWRUYXNr
PHZvaWQoU2xvdFZpc2l0b3ImKT4geworICAgIGNsYXNzIFRhc2sgZmluYWwgOiBwdWJsaWMgU2hh
cmVkVGFzazx2b2lkKEFic3RyYWN0U2xvdFZpc2l0b3ImKT4gewogICAgIHB1YmxpYzoKICAgICAg
ICAgVGFzayhTdWJzcGFjZSYgc3Vic3BhY2UsIGNvbnN0IEZ1bmMmIGZ1bmMpCiAgICAgICAgICAg
ICA6IG1fc3Vic3BhY2Uoc3Vic3BhY2UpCkBAIC05Nyw3ICs5Nyw3IEBAIFJlZjxTaGFyZWRUYXNr
PHZvaWQoU2xvdFZpc2l0b3ImKT4+IFN1YnMKICAgICAgICAgewogICAgICAgICB9CiAgICAgICAg
IAotICAgICAgICB2b2lkIHJ1bihTbG90VmlzaXRvciYgdmlzaXRvcikgZmluYWwKKyAgICAgICAg
dm9pZCBydW4oQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikgZmluYWwKICAgICAgICAgewog
ICAgICAgICAgICAgd2hpbGUgKE1hcmtlZEJsb2NrOjpIYW5kbGUqIGhhbmRsZSA9IG1fYmxvY2tT
b3VyY2UtPnJ1bigpKSB7CiAgICAgICAgICAgICAgICAgaGFuZGxlLT5mb3JFYWNoTWFya2VkQ2Vs
bCgKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1ZlcmlmaWVyU2xvdFZpc2l0b3Iu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1ZlcmlmaWVyU2xv
dFZpc2l0b3IuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L1ZlcmlmaWVyU2xvdFZpc2l0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzMyIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlZlcmlmaWVyU2xv
dFZpc2l0b3IuaCIKKworI2luY2x1ZGUgIkNvbnNlcnZhdGl2ZVJvb3RzLmgiCisjaW5jbHVkZSAi
R0NTZWdtZW50ZWRBcnJheUlubGluZXMuaCIKKyNpbmNsdWRlICJIZWFwQ2VsbC5oIgorI2luY2x1
ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNsdWRlICJWTS5oIgorI2luY2x1ZGUgIlZlcmlmaWVyU2xv
dFZpc2l0b3JJbmxpbmVzLmgiCisjaW5jbHVkZSA8d3RmL1N0YWNrVHJhY2UuaD4KKworbmFtZXNw
YWNlIEpTQyB7CisKK3VzaW5nIE1hcmtlckRhdGEgPSBWZXJpZmllclNsb3RWaXNpdG9yOjpNYXJr
ZXJEYXRhOworCitjb25zdGV4cHIgaW50IG1heE1hcmtpbmdTdGFja0ZyYW1lc1RvQ2FwdHVyZSA9
IDEwMDsKKworTWFya2VyRGF0YTo6TWFya2VyRGF0YShIZWFwQ2VsbCogcGFyZW50LCBzdGQ6OnVu
aXF1ZV9wdHI8U3RhY2tUcmFjZT4mJiBzdGFjaykKKyAgICA6IHBhcmVudChwYXJlbnQpCisgICAg
LCBzdGFjayhXVEZNb3ZlKHN0YWNrKSkKK3sKK30KKworVmVyaWZpZXJTbG90VmlzaXRvcjo6TWFy
a2VkQmxvY2tEYXRhOjpNYXJrZWRCbG9ja0RhdGEoTWFya2VkQmxvY2sqIGJsb2NrKQorICAgIDog
bV9ibG9jayhibG9jaykKKyAgICAsIG1fYXRvbXMoTWFya2VkQmxvY2s6OmF0b21zUGVyQmxvY2sp
Cit7Cit9CisKK3ZvaWQgVmVyaWZpZXJTbG90VmlzaXRvcjo6TWFya2VkQmxvY2tEYXRhOjphZGRN
YXJrZXJEYXRhKHVuc2lnbmVkIGF0b21OdW1iZXIsIE1hcmtlckRhdGEmJiBtYXJrZXIpCit7Cisg
ICAgaWYgKG1fbWFya2Vycy5pc0VtcHR5KCkpCisgICAgICAgIG1fbWFya2Vycy5ncm93KE1hcmtl
ZEJsb2NrOjphdG9tc1BlckJsb2NrKTsKKyAgICBtX21hcmtlcnNbYXRvbU51bWJlcl0gPSBXVEZN
b3ZlKG1hcmtlcik7Cit9CisKK2NvbnN0IE1hcmtlckRhdGEqIFZlcmlmaWVyU2xvdFZpc2l0b3I6
Ok1hcmtlZEJsb2NrRGF0YTo6bWFya2VyRGF0YSh1bnNpZ25lZCBhdG9tTnVtYmVyKSBjb25zdAor
eworICAgIGF1dG8mIG1hcmtlciA9IG1fbWFya2Vyc1thdG9tTnVtYmVyXTsKKyAgICBpZiAobWFy
a2VyLnN0YWNrKQorICAgICAgICByZXR1cm4gJm1hcmtlcjsKKyAgICByZXR1cm4gbnVsbHB0cjsK
K30KKworVmVyaWZpZXJTbG90VmlzaXRvcjo6UHJlY2lzZUFsbG9jYXRpb25EYXRhOjpQcmVjaXNl
QWxsb2NhdGlvbkRhdGEoUHJlY2lzZUFsbG9jYXRpb24qIGFsbG9jYXRpb24pCisgICAgOiBtX2Fs
bG9jYXRpb24oYWxsb2NhdGlvbikKK3sKK30KKworY29uc3QgTWFya2VyRGF0YSogVmVyaWZpZXJT
bG90VmlzaXRvcjo6UHJlY2lzZUFsbG9jYXRpb25EYXRhOjptYXJrZXJEYXRhKCkgY29uc3QKK3sK
KyAgICBpZiAobV9tYXJrZXIuc3RhY2spCisgICAgICAgIHJldHVybiAmbV9tYXJrZXI7CisgICAg
cmV0dXJuIG51bGxwdHI7Cit9CisKK3ZvaWQgVmVyaWZpZXJTbG90VmlzaXRvcjo6UHJlY2lzZUFs
bG9jYXRpb25EYXRhOjphZGRNYXJrZXJEYXRhKE1hcmtlckRhdGEmJiBtYXJrZXIpCit7CisgICAg
bV9tYXJrZXIgPSBXVEZNb3ZlKG1hcmtlcik7Cit9CisKK1ZlcmlmaWVyU2xvdFZpc2l0b3I6OlZl
cmlmaWVyU2xvdFZpc2l0b3IoSGVhcCYgaGVhcCkKKyAgICA6IEJhc2UoaGVhcCwgIlZlcmlmaWVy
IiwgbV9vcGFxdWVSb290U3RvcmFnZSkKK3sKK30KKworVmVyaWZpZXJTbG90VmlzaXRvcjo6flZl
cmlmaWVyU2xvdFZpc2l0b3IoKQoreworfQorCit2b2lkIFZlcmlmaWVyU2xvdFZpc2l0b3I6OmFk
ZFBhcmFsbGVsQ29uc3RyYWludFRhc2soUmVmUHRyPFNoYXJlZFRhc2s8dm9pZChBYnN0cmFjdFNs
b3RWaXNpdG9yJik+PiB0YXNrKQoreworICAgIG1fY29uc3RyYWludFRhc2tzLmFwcGVuZChXVEZN
b3ZlKHRhc2spKTsKK30KKwordm9pZCBWZXJpZmllclNsb3RWaXNpdG9yOjpleGVjdXRlQ29uc3Ry
YWludFRhc2tzKCkKK3sKKyAgICB3aGlsZSAoIW1fY29uc3RyYWludFRhc2tzLmlzRW1wdHkoKSkK
KyAgICAgICAgbV9jb25zdHJhaW50VGFza3MudGFrZUZpcnN0KCktPnJ1bigqdGhpcyk7Cit9CisK
K3ZvaWQgVmVyaWZpZXJTbG90VmlzaXRvcjo6YXBwZW5kKGNvbnN0IENvbnNlcnZhdGl2ZVJvb3Rz
JiBjb25zZXJ2YXRpdmVSb290cykKK3sKKyAgICBhdXRvIGFwcGVuZEpTQ2VsbE9yQXV4aWxpYXJ5
ID0gWyZdIChIZWFwQ2VsbCogaGVhcENlbGwpIHsKKyAgICAgICAgaWYgKCFoZWFwQ2VsbCkKKyAg
ICAgICAgICAgIHJldHVybjsKKworICAgICAgICBpZiAodGVzdEFuZFNldE1hcmtlZChoZWFwQ2Vs
bCkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgc3dpdGNoIChoZWFwQ2VsbC0+Y2Vs
bEtpbmQoKSkgeworICAgICAgICBjYXNlIEhlYXBDZWxsOjpKU0NlbGw6CisgICAgICAgIGNhc2Ug
SGVhcENlbGw6OkpTQ2VsbFdpdGhJbmRleGluZ0hlYWRlcjogeworICAgICAgICAgICAgSlNDZWxs
KiBqc0NlbGwgPSBzdGF0aWNfY2FzdDxKU0NlbGwqPihoZWFwQ2VsbCk7CisgICAgICAgICAgICBh
cHBlbmRUb01hcmtTdGFjayhqc0NlbGwpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisKKyAgICAgICAgY2FzZSBIZWFwQ2VsbDo6QXV4aWxpYXJ5OgorICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisgICAgfTsKKworICAgIEhlYXBDZWxsKiogcm9vdHMgPSBjb25zZXJ2YXRp
dmVSb290cy5yb290cygpOworICAgIHNpemVfdCBzaXplID0gY29uc2VydmF0aXZlUm9vdHMuc2l6
ZSgpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKQorICAgICAgICBhcHBl
bmRKU0NlbGxPckF1eGlsaWFyeShyb290c1tpXSk7Cit9CisKK3ZvaWQgVmVyaWZpZXJTbG90Vmlz
aXRvcjo6YXBwZW5kVG9NYXJrU3RhY2soSlNDZWxsKiBjZWxsKQoreworICAgIEFTU0VSVCghY2Vs
bC0+aXNaYXBwZWQoKSk7CisgICAgbV9jb2xsZWN0b3JTdGFjay5hcHBlbmQoY2VsbCk7Cit9CisK
K3ZvaWQgVmVyaWZpZXJTbG90VmlzaXRvcjo6YXBwZW5kVW5iYXJyaWVyZWQoSlNDZWxsKiBjZWxs
KQoreworICAgIGlmICghY2VsbCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKFVOTElLRUxZ
KGNlbGwtPmlzUHJlY2lzZUFsbG9jYXRpb24oKSkpIHsKKyAgICAgICAgaWYgKExJS0VMWShpc01h
cmtlZChjZWxsLT5wcmVjaXNlQWxsb2NhdGlvbigpLCBjZWxsKSkpCisgICAgICAgICAgICByZXR1
cm47CisgICAgfSBlbHNlIHsKKyAgICAgICAgTWFya2VkQmxvY2smIGJsb2NrID0gY2VsbC0+bWFy
a2VkQmxvY2soKTsKKyAgICAgICAgaWYgKExJS0VMWShpc01hcmtlZChibG9jaywgY2VsbCkpKQor
ICAgICAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGFwcGVuZFNsb3coY2VsbCk7Cit9CisK
K3ZvaWQgVmVyaWZpZXJTbG90VmlzaXRvcjo6YXBwZW5kSGlkZGVuVW5iYXJyaWVyZWQoSlNDZWxs
KiBjZWxsKQoreworICAgIGFwcGVuZFVuYmFycmllcmVkKGNlbGwpOworfQorCit2b2lkIFZlcmlm
aWVyU2xvdFZpc2l0b3I6OmRyYWluKCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChtX211dGF0b3JT
dGFjay5pc0VtcHR5KCkpOworCisgICAgTWFya1N0YWNrQXJyYXkmIHN0YWNrID0gbV9jb2xsZWN0
b3JTdGFjazsKKyAgICBpZiAoc3RhY2suaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAg
ICBzdGFjay5yZWZpbGwoKTsKKyAgICB3aGlsZSAoc3RhY2suY2FuUmVtb3ZlTGFzdCgpKQorICAg
ICAgICB2aXNpdENoaWxkcmVuKHN0YWNrLnJlbW92ZUxhc3QoKSk7Cit9CisKK3ZvaWQgVmVyaWZp
ZXJTbG90VmlzaXRvcjo6ZHVtcE1hcmtlckRhdGEoSGVhcENlbGwqIGNlbGwpCit7CisgICAgaWYg
KGNlbGwtPmlzUHJlY2lzZUFsbG9jYXRpb24oKSkKKyAgICAgICAgcmV0dXJuIGR1bXBNYXJrZXJE
YXRhKGNlbGwtPnByZWNpc2VBbGxvY2F0aW9uKCksIGNlbGwpOworICAgIHJldHVybiBkdW1wTWFy
a2VyRGF0YShjZWxsLT5tYXJrZWRCbG9jaygpLCBjZWxsKTsKK30KKwordm9pZCBWZXJpZmllclNs
b3RWaXNpdG9yOjpkdW1wTWFya2VyRGF0YShQcmVjaXNlQWxsb2NhdGlvbiYgYWxsb2NhdGlvbiwg
SGVhcENlbGwqIGNlbGwpCit7CisgICAgYXV0byBpdGVyYXRvciA9IG1fcHJlY2lzZUFsbG9jYXRp
b25NYXAuZmluZCgmYWxsb2NhdGlvbik7CisgICAgaWYgKGl0ZXJhdG9yICE9IG1fcHJlY2lzZUFs
bG9jYXRpb25NYXAuZW5kKCkpIHsKKyAgICAgICAgZHVtcE1hcmtlckRhdGEoY2VsbCwgaXRlcmF0
b3ItPnZhbHVlLT5tYXJrZXJEYXRhKCkpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGRh
dGFMb2dMbigiQ2VsbCAiLCBSYXdQb2ludGVyKGNlbGwpLCAiIG5vdCBmb3VuZCIpOworfQorCit2
b2lkIFZlcmlmaWVyU2xvdFZpc2l0b3I6OmR1bXBNYXJrZXJEYXRhKE1hcmtlZEJsb2NrJiBibG9j
aywgSGVhcENlbGwqIGNlbGwpCit7CisgICAgYXV0byBpdGVyYXRvciA9IG1fbWFya2VkQmxvY2tN
YXAuZmluZCgmYmxvY2spOworICAgIGlmIChpdGVyYXRvciAhPSBtX21hcmtlZEJsb2NrTWFwLmVu
ZCgpKSB7CisgICAgICAgIHVuc2lnbmVkIGF0b21OdW1iZXIgPSBibG9jay5hdG9tTnVtYmVyKGNl
bGwpOworICAgICAgICBkdW1wTWFya2VyRGF0YShjZWxsLCBpdGVyYXRvci0+dmFsdWUtPm1hcmtl
ckRhdGEoYXRvbU51bWJlcikpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGRhdGFMb2dM
bigiQ2VsbCAiLCBSYXdQb2ludGVyKGNlbGwpLCAiIG5vdCBmb3VuZCIpOworfQorCit2b2lkIFZl
cmlmaWVyU2xvdFZpc2l0b3I6OmR1bXBNYXJrZXJEYXRhKEhlYXBDZWxsKiBjZWxsLCBjb25zdCBN
YXJrZXJEYXRhKiBtYXJrZXIpCit7CisgICAgaWYgKCFtYXJrZXIpIHsKKyAgICAgICAgZGF0YUxv
Z0xuKCJNYXJrZXIgZGF0YSBpcyBub3QgYXZhaWxhYmxlIGZvciBjZWxsICIsIFJhd1BvaW50ZXIo
Y2VsbCkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgZGF0YUxvZ0xuKCJDZWxsICIs
IFJhd1BvaW50ZXIoY2VsbCksICIgd2FzIHJlYWNoYWJsZSB2aWEgY2VsbCAiLCBSYXdQb2ludGVy
KG1hcmtlci0+cGFyZW50KSwgIiBhdDoiKTsKKyAgICBtYXJrZXItPnN0YWNrLT5kdW1wKFdURjo6
ZGF0YUZpbGUoKSwgIiAgICAiKTsKK30KKworYm9vbCBWZXJpZmllclNsb3RWaXNpdG9yOjppc0Zp
cnN0VmlzaXQoKSBjb25zdAoreworICAgIC8vIEluIHRoZSByZWd1bGFyIEdDLCB0aGlzIHJldHVy
biB2YWx1ZSBpcyBvbmx5IHVzZWQgdG8gY29udHJvbCB3aGV0aGVyCisgICAgLy8gVW5saW5rZWRD
b2RlQmxvY2tzIHdpbGwgYmUgYWdlZCAoc2VlIFVubGlua2VkQ29kZUJsb2NrOjp2aXNpdENoaWxk
cmVuSW1wbCgpKS4KKyAgICAvLyBGb3IgdGhlIHZlcmlmaWVyIEdDIHBhc3MsIHdlIHNob3VsZCBh
bHdheXMgcmV0dXJuIGZhbHNlIGJlY2F1c2Ugd2UgZG9uJ3QKKyAgICAvLyB3YW50IHRvIGRvIHRo
ZSBhZ2luZyBhY3Rpb24gYWdhaW4uCisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFZlcmlm
aWVyU2xvdFZpc2l0b3I6OmlzTWFya2VkKGNvbnN0IHZvaWQqIHJhd0NlbGwpIGNvbnN0Cit7Cisg
ICAgSGVhcENlbGwqIGNlbGwgPSBiaXR3aXNlX2Nhc3Q8SGVhcENlbGwqPihyYXdDZWxsKTsKKyAg
ICBpZiAoY2VsbC0+aXNQcmVjaXNlQWxsb2NhdGlvbigpKQorICAgICAgICByZXR1cm4gaXNNYXJr
ZWQoY2VsbC0+cHJlY2lzZUFsbG9jYXRpb24oKSwgY2VsbCk7CisgICAgcmV0dXJuIGlzTWFya2Vk
KGNlbGwtPm1hcmtlZEJsb2NrKCksIGNlbGwpOworfQorCitib29sIFZlcmlmaWVyU2xvdFZpc2l0
b3I6OmlzTWFya2VkKFByZWNpc2VBbGxvY2F0aW9uJiBhbGxvY2F0aW9uLCBIZWFwQ2VsbCopIGNv
bnN0Cit7CisgICAgcmV0dXJuIG1fcHJlY2lzZUFsbG9jYXRpb25NYXAuY29udGFpbnMoJmFsbG9j
YXRpb24pOworfQorCitib29sIFZlcmlmaWVyU2xvdFZpc2l0b3I6OmlzTWFya2VkKE1hcmtlZEJs
b2NrJiBibG9jaywgSGVhcENlbGwqIGNlbGwpIGNvbnN0Cit7CisgICAgYXV0byBlbnRyeSA9IG1f
bWFya2VkQmxvY2tNYXAuZmluZCgmYmxvY2spOworICAgIGlmIChlbnRyeSA9PSBtX21hcmtlZEJs
b2NrTWFwLmVuZCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBhdXRvJiBkYXRhID0g
ZW50cnktPnZhbHVlOworICAgIHVuc2lnbmVkIGF0b21OdW1iZXIgPSBibG9jay5hdG9tTnVtYmVy
KGNlbGwpOworICAgIHJldHVybiBkYXRhLT5pc01hcmtlZChhdG9tTnVtYmVyKTsKK30KKwordm9p
ZCBWZXJpZmllclNsb3RWaXNpdG9yOjptYXJrQXV4aWxpYXJ5KGNvbnN0IHZvaWQqIGJhc2UpCit7
CisgICAgSGVhcENlbGwqIGNlbGwgPSBiaXR3aXNlX2Nhc3Q8SGVhcENlbGwqPihiYXNlKTsKKwor
ICAgIEFTU0VSVChjZWxsLT5oZWFwKCkgPT0gaGVhcCgpKTsKKyAgICB0ZXN0QW5kU2V0TWFya2Vk
KGNlbGwpOworfQorCitib29sIFZlcmlmaWVyU2xvdFZpc2l0b3I6Om11dGF0b3JJc1N0b3BwZWQo
KSBjb25zdAoreworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFZlcmlmaWVyU2xvdFZpc2l0
b3I6OnRlc3RBbmRTZXRNYXJrZWQoY29uc3Qgdm9pZCogcmF3Q2VsbCkKK3sKKyAgICBIZWFwQ2Vs
bCogY2VsbCA9IGJpdHdpc2VfY2FzdDxIZWFwQ2VsbCo+KHJhd0NlbGwpOworICAgIGlmIChjZWxs
LT5pc1ByZWNpc2VBbGxvY2F0aW9uKCkpCisgICAgICAgIHJldHVybiB0ZXN0QW5kU2V0TWFya2Vk
KGNlbGwtPnByZWNpc2VBbGxvY2F0aW9uKCkpOworICAgIHJldHVybiB0ZXN0QW5kU2V0TWFya2Vk
KGNlbGwtPm1hcmtlZEJsb2NrKCksIGNlbGwpOworfQorCitib29sIFZlcmlmaWVyU2xvdFZpc2l0
b3I6OnRlc3RBbmRTZXRNYXJrZWQoUHJlY2lzZUFsbG9jYXRpb24mIGFsbG9jYXRpb24pCit7Cisg
ICAgc3RkOjp1bmlxdWVfcHRyPFByZWNpc2VBbGxvY2F0aW9uRGF0YT4mIGRhdGEgPSBtX3ByZWNp
c2VBbGxvY2F0aW9uTWFwLmFkZCgmYWxsb2NhdGlvbiwgbnVsbHB0cikuaXRlcmF0b3ItPnZhbHVl
OworICAgIGlmICghZGF0YSkgeworICAgICAgICBkYXRhID0gbWFrZVVuaXF1ZTxQcmVjaXNlQWxs
b2NhdGlvbkRhdGE+KCZhbGxvY2F0aW9uKTsKKyAgICAgICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6
OnZlcmJvc2VWZXJpZnlHQygpKSkKKyAgICAgICAgICAgIGRhdGEtPmFkZE1hcmtlckRhdGEoeyBw
YXJlbnRDZWxsKCksIFN0YWNrVHJhY2U6OmNhcHR1cmVTdGFja1RyYWNlKG1heE1hcmtpbmdTdGFj
a0ZyYW1lc1RvQ2FwdHVyZSwgMikgfSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgVmVyaWZpZXJTbG90VmlzaXRvcjo6dGVzdEFuZFNl
dE1hcmtlZChNYXJrZWRCbG9jayYgYmxvY2ssIEhlYXBDZWxsKiBjZWxsKQoreworICAgIHN0ZDo6
dW5pcXVlX3B0cjxNYXJrZWRCbG9ja0RhdGE+JiBkYXRhID0gbV9tYXJrZWRCbG9ja01hcC5hZGQo
JmJsb2NrLCBudWxscHRyKS5pdGVyYXRvci0+dmFsdWU7CisgICAgaWYgKCFkYXRhKQorICAgICAg
ICBkYXRhID0gbWFrZVVuaXF1ZTxNYXJrZWRCbG9ja0RhdGE+KCZibG9jayk7CisKKyAgICB1bnNp
Z25lZCBhdG9tTnVtYmVyID0gYmxvY2suYXRvbU51bWJlcihjZWxsKTsKKyAgICBib29sIGFscmVh
ZHlTZXQgPSBkYXRhLT50ZXN0QW5kU2V0TWFya2VkKGF0b21OdW1iZXIpOworICAgIGlmICghYWxy
ZWFkeVNldCAmJiBVTkxJS0VMWShPcHRpb25zOjp2ZXJib3NlVmVyaWZ5R0MoKSkpCisgICAgICAg
IGRhdGEtPmFkZE1hcmtlckRhdGEoYXRvbU51bWJlciwgeyBwYXJlbnRDZWxsKCksIFN0YWNrVHJh
Y2U6OmNhcHR1cmVTdGFja1RyYWNlKG1heE1hcmtpbmdTdGFja0ZyYW1lc1RvQ2FwdHVyZSwgMikg
fSk7CisgICAgcmV0dXJuIGFscmVhZHlTZXQ7Cit9CisKK3ZvaWQgVmVyaWZpZXJTbG90VmlzaXRv
cjo6c2V0TWFya2VkQW5kQXBwZW5kVG9NYXJrU3RhY2soSlNDZWxsKiBjZWxsKQoreworICAgIGlm
IChtX3N1cHByZXNzVmVyaWZpZXIpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAodGVzdEFuZFNl
dE1hcmtlZChjZWxsKSkKKyAgICAgICAgcmV0dXJuOworICAgIGFwcGVuZFRvTWFya1N0YWNrKGNl
bGwpOworfQorCit2b2lkIFZlcmlmaWVyU2xvdFZpc2l0b3I6OnZpc2l0QXNDb25zdHJhaW50KGNv
bnN0IEpTQ2VsbCogY2VsbCkKK3sKKyAgICB2aXNpdENoaWxkcmVuKGNlbGwpOworfQorCit2b2lk
IFZlcmlmaWVyU2xvdFZpc2l0b3I6OnZpc2l0Q2hpbGRyZW4oY29uc3QgSlNDZWxsKiBjZWxsKQor
eworICAgIFJFTEVBU0VfQVNTRVJUKGlzTWFya2VkKGNlbGwpKTsKKyAgICBzd2l0Y2ggKGNlbGwt
PnR5cGUoKSkgeworICAgIGNhc2UgU3RyaW5nVHlwZToKKyAgICAgICAgSlNTdHJpbmc6OnZpc2l0
Q2hpbGRyZW4oY29uc3RfY2FzdDxKU0NlbGwqPihjZWxsKSwgKnRoaXMpOworICAgICAgICBicmVh
azsKKyAgICAgICAgCisgICAgY2FzZSBGaW5hbE9iamVjdFR5cGU6CisgICAgICAgIEpTRmluYWxP
YmplY3Q6OnZpc2l0Q2hpbGRyZW4oY29uc3RfY2FzdDxKU0NlbGwqPihjZWxsKSwgKnRoaXMpOwor
ICAgICAgICBicmVhazsKKworICAgIGNhc2UgQXJyYXlUeXBlOgorICAgICAgICBKU0FycmF5Ojp2
aXNpdENoaWxkcmVuKGNvbnN0X2Nhc3Q8SlNDZWxsKj4oY2VsbCksICp0aGlzKTsKKyAgICAgICAg
YnJlYWs7CisgICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIC8vIEZJWE1FOiBUaGlzIGNv
dWxkIGJlIHNvIG11Y2ggYmV0dGVyLgorICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTYyNDYyCisgICAgICAgIGNlbGwtPm1ldGhvZFRhYmxlKHZtKCkp
LT52aXNpdENoaWxkcmVuKGNvbnN0X2Nhc3Q8SlNDZWxsKj4oY2VsbCksICp0aGlzKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL1ZlcmlmaWVyU2xvdFZpc2l0b3IuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9WZXJpZmllclNsb3RWaXNpdG9yLmgJKG5vbmV4aXN0
ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVmVyaWZpZXJTbG90VmlzaXRvci5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTY5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJBYnN0cmFj
dFNsb3RWaXNpdG9yLmgiCisjaW5jbHVkZSAiSlNDSlNWYWx1ZS5oIgorI2luY2x1ZGUgIlZpc2l0
UmFjZUtleS5oIgorI2luY2x1ZGUgIldlYWsuaCIKKyNpbmNsdWRlIDxtZW1vcnk+CisjaW5jbHVk
ZSA8d3RmL0JpdFZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi9EZXF1ZS5oPgorI2luY2x1ZGUgPHd0
Zi9GYXN0TWFsbG9jLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYv
UmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1NoYXJlZFRhc2suaD4KKworbmFtZXNwYWNlIFdURiB7
CisKK2NsYXNzIFN0YWNrVHJhY2U7CisKK30gLy8gbmFtZXNwYWNlIFdURgorCituYW1lc3BhY2Ug
SlNDIHsKKworY2xhc3MgQ29uc2VydmF0aXZlUm9vdHM7CitjbGFzcyBIZWFwOworY2xhc3MgSGVh
cENlbGw7CitjbGFzcyBQcmVjaXNlQWxsb2NhdGlvbjsKK2NsYXNzIE1hcmtlZEJsb2NrOworCit1
c2luZyBXVEY6OlN0YWNrVHJhY2U7CisKK2NsYXNzIFZlcmlmaWVyU2xvdFZpc2l0b3IgOiBwdWJs
aWMgQWJzdHJhY3RTbG90VmlzaXRvciB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoVmVyaWZp
ZXJTbG90VmlzaXRvcik7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CisgICAgdXNpbmcg
QmFzZSA9IEFic3RyYWN0U2xvdFZpc2l0b3I7CitwdWJsaWM6CisgICAgc3RydWN0IE1hcmtlckRh
dGEgeworICAgICAgICBNYXJrZXJEYXRhKCkgPSBkZWZhdWx0OworICAgICAgICBNYXJrZXJEYXRh
KE1hcmtlckRhdGEmJikgPSBkZWZhdWx0OworICAgICAgICBNYXJrZXJEYXRhKEhlYXBDZWxsKiwg
c3RkOjp1bmlxdWVfcHRyPFN0YWNrVHJhY2U+JiYpOworICAgICAgICBNYXJrZXJEYXRhJiBvcGVy
YXRvcj0oTWFya2VyRGF0YSYmKSA9IGRlZmF1bHQ7CisKKyAgICAgICAgSGVhcENlbGwqIHBhcmVu
dCB7IG51bGxwdHIgfTsKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFN0YWNrVHJhY2U+IHN0YWNr
OworICAgIH07CisKKyAgICBWZXJpZmllclNsb3RWaXNpdG9yKEhlYXAmKTsKKyAgICB+VmVyaWZp
ZXJTbG90VmlzaXRvcigpOworCisgICAgdm9pZCBhcHBlbmQoY29uc3QgQ29uc2VydmF0aXZlUm9v
dHMmKSBmaW5hbDsKKyAgICB2b2lkIGFwcGVuZFVuYmFycmllcmVkKEpTQ2VsbCopIGZpbmFsOwor
ICAgIHZvaWQgYXBwZW5kSGlkZGVuVW5iYXJyaWVyZWQoSlNDZWxsKikgZmluYWw7CisKKyAgICBi
b29sIGlzRmlyc3RWaXNpdCgpIGNvbnN0IGZpbmFsOworICAgIGJvb2wgaXNNYXJrZWQoY29uc3Qg
dm9pZCopIGNvbnN0IGZpbmFsOworICAgIGJvb2wgaXNNYXJrZWQoTWFya2VkQmxvY2smLCBIZWFw
Q2VsbCopIGNvbnN0IGZpbmFsOworICAgIGJvb2wgaXNNYXJrZWQoUHJlY2lzZUFsbG9jYXRpb24m
LCBIZWFwQ2VsbCopIGNvbnN0IGZpbmFsOworCisgICAgdm9pZCBtYXJrQXV4aWxpYXJ5KGNvbnN0
IHZvaWQqKSBmaW5hbDsKKworICAgIHZvaWQgcmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKHNpemVf
dCkgZmluYWwgeyB9CisjaWYgRU5BQkxFKFJFU09VUkNFX1VTQUdFKQorICAgIHZvaWQgcmVwb3J0
RXh0ZXJuYWxNZW1vcnlWaXNpdGVkKHNpemVfdCkgZmluYWwgeyB9CisjZW5kaWYKKworICAgIGJv
b2wgbXV0YXRvcklzU3RvcHBlZCgpIGNvbnN0IGZpbmFsOworCisgICAgdm9pZCBkaWRSYWNlKGNv
bnN0IFZpc2l0UmFjZUtleSYpIGZpbmFsIHsgfQorICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYp
IGNvbnN0IGZpbmFsIHsgfQorCisgICAgdm9pZCB2aXNpdEFzQ29uc3RyYWludChjb25zdCBKU0Nl
bGwqKSBmaW5hbDsKKworICAgIHZvaWQgZHJhaW4oKTsKKworICAgIHZvaWQgYWRkUGFyYWxsZWxD
b25zdHJhaW50VGFzayhSZWZQdHI8U2hhcmVkVGFzazx2b2lkKEFic3RyYWN0U2xvdFZpc2l0b3Im
KT4+KSBmaW5hbDsKKyAgICB2b2lkIGV4ZWN1dGVDb25zdHJhaW50VGFza3MoKTsKKworICAgIHRl
bXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaExpdmVDZWxsKGNvbnN0IEZ1bmN0
b3ImKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hMaXZlUHJl
Y2lzZUFsbG9jYXRpb24oY29uc3QgRnVuY3RvciYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1
bmN0b3I+IHZvaWQgZm9yRWFjaExpdmVNYXJrZWRCbG9ja0NlbGwoY29uc3QgRnVuY3RvciYpOwor
CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBkdW1wTWFya2VyRGF0YShIZWFwQ2VsbCopOwor
Citwcml2YXRlOgorICAgIGNsYXNzIE1hcmtlZEJsb2NrRGF0YSB7CisgICAgICAgIFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEOworICAgICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShNYXJrZWRCbG9j
a0RhdGEpOworICAgIHB1YmxpYzoKKyAgICAgICAgTWFya2VkQmxvY2tEYXRhKE1hcmtlZEJsb2Nr
Kik7CisKKyAgICAgICAgTWFya2VkQmxvY2sqIGJsb2NrKCkgY29uc3QgeyByZXR1cm4gbV9ibG9j
azsgfQorICAgICAgICBjb25zdCBCaXRWZWN0b3ImIGF0b21zKCkgY29uc3QgeyByZXR1cm4gbV9h
dG9tczsgfQorCisgICAgICAgIGJvb2wgaXNNYXJrZWQodW5zaWduZWQgYXRvbU51bWJlcikgeyBy
ZXR1cm4gbV9hdG9tcy5xdWlja0dldChhdG9tTnVtYmVyKTsgfQorICAgICAgICBib29sIHRlc3RB
bmRTZXRNYXJrZWQodW5zaWduZWQgYXRvbU51bWJlcikgeyByZXR1cm4gbV9hdG9tcy5xdWlja1Nl
dChhdG9tTnVtYmVyKTsgfQorCisgICAgICAgIHZvaWQgYWRkTWFya2VyRGF0YSh1bnNpZ25lZCBh
dG9tTnVtYmVyLCBNYXJrZXJEYXRhJiYpOworICAgICAgICBjb25zdCBNYXJrZXJEYXRhKiBtYXJr
ZXJEYXRhKHVuc2lnbmVkIGF0b21OdW1iZXIpIGNvbnN0OworCisgICAgcHJpdmF0ZToKKyAgICAg
ICAgTWFya2VkQmxvY2sqIG1fYmxvY2sgeyBudWxscHRyIH07CisgICAgICAgIEJpdFZlY3RvciBt
X2F0b21zOworICAgICAgICBWZWN0b3I8TWFya2VyRGF0YT4gbV9tYXJrZXJzOworICAgIH07CisK
KyAgICBjbGFzcyBQcmVjaXNlQWxsb2NhdGlvbkRhdGEgeworICAgICAgICBXVEZfTUFLRV9GQVNU
X0FMTE9DQVRFRDsKKyAgICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUHJlY2lzZUFsbG9jYXRp
b25EYXRhKTsKKyAgICBwdWJsaWM6CisgICAgICAgIFByZWNpc2VBbGxvY2F0aW9uRGF0YShQcmVj
aXNlQWxsb2NhdGlvbiopOworICAgICAgICBQcmVjaXNlQWxsb2NhdGlvbiogYWxsb2NhdGlvbigp
IGNvbnN0IHsgcmV0dXJuIG1fYWxsb2NhdGlvbjsgfQorCisgICAgICAgIHZvaWQgYWRkTWFya2Vy
RGF0YShNYXJrZXJEYXRhJiYpOworICAgICAgICBjb25zdCBNYXJrZXJEYXRhKiBtYXJrZXJEYXRh
KCkgY29uc3Q7CisKKyAgICBwcml2YXRlOgorICAgICAgICBQcmVjaXNlQWxsb2NhdGlvbiogbV9h
bGxvY2F0aW9uIHsgbnVsbHB0ciB9OworICAgICAgICBNYXJrZXJEYXRhIG1fbWFya2VyOworICAg
IH07CisKKyAgICB1c2luZyBNYXJrZWRCbG9ja01hcCA9IEhhc2hNYXA8TWFya2VkQmxvY2sqLCBz
dGQ6OnVuaXF1ZV9wdHI8TWFya2VkQmxvY2tEYXRhPj47CisgICAgdXNpbmcgUHJlY2lzZUFsbG9j
YXRpb25NYXAgPSBIYXNoTWFwPFByZWNpc2VBbGxvY2F0aW9uKiwgc3RkOjp1bmlxdWVfcHRyPFBy
ZWNpc2VBbGxvY2F0aW9uRGF0YT4+OworCisgICAgdm9pZCBhcHBlbmRUb01hcmtTdGFjayhKU0Nl
bGwqKTsKKyAgICB2b2lkIGFwcGVuZFNsb3coSlNDZWxsKiBjZWxsKSB7IHNldE1hcmtlZEFuZEFw
cGVuZFRvTWFya1N0YWNrKGNlbGwpOyB9CisKKyAgICBib29sIHRlc3RBbmRTZXRNYXJrZWQoY29u
c3Qgdm9pZCogcmF3Q2VsbCk7CisgICAgYm9vbCB0ZXN0QW5kU2V0TWFya2VkKFByZWNpc2VBbGxv
Y2F0aW9uJik7CisgICAgYm9vbCB0ZXN0QW5kU2V0TWFya2VkKE1hcmtlZEJsb2NrJiwgSGVhcENl
bGwqKTsKKworICAgIHZvaWQgc2V0TWFya2VkQW5kQXBwZW5kVG9NYXJrU3RhY2soSlNDZWxsKik7
CisKKyAgICB2b2lkIHZpc2l0Q2hpbGRyZW4oY29uc3QgSlNDZWxsKik7CisKKyAgICB2b2lkIGR1
bXBNYXJrZXJEYXRhKFByZWNpc2VBbGxvY2F0aW9uJiwgSGVhcENlbGwqKTsKKyAgICB2b2lkIGR1
bXBNYXJrZXJEYXRhKE1hcmtlZEJsb2NrJiwgSGVhcENlbGwqKTsKKyAgICB2b2lkIGR1bXBNYXJr
ZXJEYXRhKEhlYXBDZWxsKiwgY29uc3QgTWFya2VyRGF0YSopOworCisgICAgUHJlY2lzZUFsbG9j
YXRpb25NYXAgbV9wcmVjaXNlQWxsb2NhdGlvbk1hcDsKKyAgICBNYXJrZWRCbG9ja01hcCBtX21h
cmtlZEJsb2NrTWFwOworICAgIENvbmN1cnJlbnRQdHJIYXNoU2V0IG1fb3BhcXVlUm9vdFN0b3Jh
Z2U7CisgICAgRGVxdWU8UmVmUHRyPFNoYXJlZFRhc2s8dm9pZChBYnN0cmFjdFNsb3RWaXNpdG9y
Jik+PiwgMzI+IG1fY29uc3RyYWludFRhc2tzOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9WZXJpZmllclNsb3RWaXNpdG9ySW5saW5l
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1ZlcmlmaWVyU2xv
dFZpc2l0b3JJbmxpbmVzLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvVmVyaWZpZXJTbG90VmlzaXRvcklubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDYxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJBYnN0cmFjdFNsb3RWaXNpdG9ySW5saW5lcy5oIgor
I2luY2x1ZGUgIlZlcmlmaWVyU2xvdFZpc2l0b3IuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+Cit2b2lkIFZlcmlmaWVyU2xvdFZpc2l0b3I6OmZvckVh
Y2hMaXZlQ2VsbChjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQoreworICAgIGZvckVhY2hMaXZlUHJl
Y2lzZUFsbG9jYXRpb24oZnVuY3Rvcik7CisgICAgZm9yRWFjaExpdmVNYXJrZWRCbG9ja0NlbGwo
ZnVuY3Rvcik7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+Cit2b2lkIFZlcmlmaWVy
U2xvdFZpc2l0b3I6OmZvckVhY2hMaXZlUHJlY2lzZUFsbG9jYXRpb24oY29uc3QgRnVuY3RvciYg
ZnVuYykKK3sKKyAgICBmb3IgKGF1dG8mIGVudHJ5IDogbV9wcmVjaXNlQWxsb2NhdGlvbk1hcCkg
eworICAgICAgICBQcmVjaXNlQWxsb2NhdGlvbiogYWxsb2NhdGlvbiA9IGVudHJ5LnZhbHVlLT5h
bGxvY2F0aW9uKCk7CisgICAgICAgIGZ1bmMoYWxsb2NhdGlvbi0+Y2VsbCgpKTsKKyAgICB9Cit9
CisKK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+Cit2b2lkIFZlcmlmaWVyU2xvdFZpc2l0b3I6
OmZvckVhY2hMaXZlTWFya2VkQmxvY2tDZWxsKGNvbnN0IEZ1bmN0b3ImIGZ1bmMpCit7CisgICAg
Zm9yIChhdXRvJiBlbnRyeSA6IG1fbWFya2VkQmxvY2tNYXApIHsKKyAgICAgICAgYXV0byYgZGF0
YSA9IGVudHJ5LnZhbHVlOworICAgICAgICBNYXJrZWRCbG9jayogYmxvY2sgPSBkYXRhLT5ibG9j
aygpOworICAgICAgICBjb25zdCBCaXRWZWN0b3ImIGF0b21zID0gIGRhdGEtPmF0b21zKCk7Cisg
ICAgICAgIGZvciAoYXV0byBhdG9tTnVtYmVyIDogYXRvbXMpCisgICAgICAgICAgICBmdW5jKGJp
dHdpc2VfY2FzdDxIZWFwQ2VsbCo+KGJsb2NrLT5oYW5kbGUoKS5hdG9tQXQoYXRvbU51bWJlcikp
KTsKKyAgICB9Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvVmlzaXRDb3VudGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvVmlzaXRDb3VudGVyLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL1Zpc2l0Q291bnRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI1LDcgKzI1
LDcgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlICJTbG90VmlzaXRvci5oIgorI2luY2x1
ZGUgIkFic3RyYWN0U2xvdFZpc2l0b3IuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAgLTMzLDEz
ICszMywxMyBAQCBjbGFzcyBWaXNpdENvdW50ZXIgewogcHVibGljOgogICAgIFZpc2l0Q291bnRl
cigpIHsgfQogICAgIAotICAgIFZpc2l0Q291bnRlcihTbG90VmlzaXRvciYgdmlzaXRvcikKKyAg
ICBWaXNpdENvdW50ZXIoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKICAgICAgICAgOiBt
X3Zpc2l0b3IoJnZpc2l0b3IpCiAgICAgICAgICwgbV9pbml0aWFsVmlzaXRDb3VudCh2aXNpdG9y
LnZpc2l0Q291bnQoKSkKICAgICB7CiAgICAgfQogICAgIAotICAgIFNsb3RWaXNpdG9yJiB2aXNp
dG9yKCkgY29uc3QgeyByZXR1cm4gKm1fdmlzaXRvcjsgfQorICAgIEFic3RyYWN0U2xvdFZpc2l0
b3ImIHZpc2l0b3IoKSBjb25zdCB7IHJldHVybiAqbV92aXNpdG9yOyB9CiAgICAgCiAgICAgc2l6
ZV90IHZpc2l0Q291bnQoKSBjb25zdAogICAgIHsKQEAgLTQ3LDcgKzQ3LDcgQEAgcHVibGljOgog
ICAgIH0KICAgICAKIHByaXZhdGU6Ci0gICAgU2xvdFZpc2l0b3IqIG1fdmlzaXRvciB7IG51bGxw
dHIgfTsKKyAgICBBYnN0cmFjdFNsb3RWaXNpdG9yKiBtX3Zpc2l0b3IgeyBudWxscHRyIH07CiAg
ICAgc2l6ZV90IG1faW5pdGlhbFZpc2l0Q291bnQgeyAwIH07CiB9OwogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtCbG9jay5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTcgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC05OCwxMiArOTgsMTEgQEAgdm9pZCBXZWFrQmxvY2s6OnN3ZWVwKCkKICAgICBBU1NFUlQoIW1f
c3dlZXBSZXN1bHQuaXNOdWxsKCkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBDb250YWluZXJU
eXBlPgotdm9pZCBXZWFrQmxvY2s6OnNwZWNpYWxpemVkVmlzaXQoQ29udGFpbmVyVHlwZSYgY29u
dGFpbmVyLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIENvbnRhaW5l
clR5cGUsIHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFdlYWtCbG9jazo6c3BlY2lhbGl6ZWRWaXNp
dChDb250YWluZXJUeXBlJiBjb250YWluZXIsIFZpc2l0b3ImIHZpc2l0b3IpCiB7Ci0gICAgSGVh
cFZlcnNpb24gbWFya2luZ1ZlcnNpb24gPSB2aXNpdG9yLm1hcmtpbmdWZXJzaW9uKCk7Ci0KICAg
ICBzaXplX3QgY291bnQgPSB3ZWFrSW1wbENvdW50KCk7CisgICAgSGVhcEFuYWx5emVyKiBoZWFw
QW5hbHl6ZXIgPSB2aXNpdG9yLnZtKCkuYWN0aXZlSGVhcEFuYWx5emVyKCk7CiAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7CiAgICAgICAgIFdlYWtJbXBsKiB3ZWFrSW1w
bCA9ICZ3ZWFrSW1wbHMoKVtpXTsKICAgICAgICAgaWYgKHdlYWtJbXBsLT5zdGF0ZSgpICE9IFdl
YWtJbXBsOjpMaXZlKQpAQCAtMTE0LDEyICsxMTMsMTIgQEAgdm9pZCBXZWFrQmxvY2s6OnNwZWNp
YWxpemVkVmlzaXQoQ29udGFpbgogICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgSlNW
YWx1ZSBqc1ZhbHVlID0gd2Vha0ltcGwtPmpzVmFsdWUoKTsKLSAgICAgICAgaWYgKGNvbnRhaW5l
ci5pc01hcmtlZChtYXJraW5nVmVyc2lvbiwganNWYWx1ZS5hc0NlbGwoKSkpCisgICAgICAgIGlm
ICh2aXNpdG9yLmlzTWFya2VkKGNvbnRhaW5lciwganNWYWx1ZS5hc0NlbGwoKSkpCiAgICAgICAg
ICAgICBjb250aW51ZTsKICAgICAgICAgCiAgICAgICAgIGNvbnN0IGNoYXIqIHJlYXNvbiA9ICIi
OwogICAgICAgICBjb25zdCBjaGFyKiogcmVhc29uUHRyID0gbnVsbHB0cjsKLSAgICAgICAgaWYg
KFVOTElLRUxZKHZpc2l0b3IuaXNBbmFseXppbmdIZWFwKCkpKQorICAgICAgICBpZiAoVU5MSUtF
TFkoaGVhcEFuYWx5emVyKSkKICAgICAgICAgICAgIHJlYXNvblB0ciA9ICZyZWFzb247CiAKICAg
ICAgICAgaWYgKCF3ZWFrSGFuZGxlT3duZXItPmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEhh
bmRsZTxVbmtub3duPjo6d3JhcFNsb3QoJmNvbnN0X2Nhc3Q8SlNWYWx1ZSY+KGpzVmFsdWUpKSwg
d2Vha0ltcGwtPmNvbnRleHQoKSwgdmlzaXRvciwgcmVhc29uUHRyKSkKQEAgLTEyNywxNCArMTI2
LDE0IEBAIHZvaWQgV2Vha0Jsb2NrOjpzcGVjaWFsaXplZFZpc2l0KENvbnRhaW4KIAogICAgICAg
ICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKGpzVmFsdWUpOwogCi0gICAgICAgIGlmIChVTkxJ
S0VMWSh2aXNpdG9yLmlzQW5hbHl6aW5nSGVhcCgpKSkgeworICAgICAgICBpZiAoVU5MSUtFTFko
aGVhcEFuYWx5emVyKSkgewogICAgICAgICAgICAgaWYgKGpzVmFsdWUuaXNDZWxsKCkpCi0gICAg
ICAgICAgICAgICAgdmlzaXRvci5oZWFwQW5hbHl6ZXIoKS0+c2V0T3BhcXVlUm9vdFJlYWNoYWJp
bGl0eVJlYXNvbkZvckNlbGwoanNWYWx1ZS5hc0NlbGwoKSwgKnJlYXNvblB0cik7CisgICAgICAg
ICAgICAgICAgaGVhcEFuYWx5emVyLT5zZXRPcGFxdWVSb290UmVhY2hhYmlsaXR5UmVhc29uRm9y
Q2VsbChqc1ZhbHVlLmFzQ2VsbCgpLCAqcmVhc29uUHRyKTsKICAgICAgICAgfQogICAgIH0KIH0K
IAotdm9pZCBXZWFrQmxvY2s6OnZpc2l0KFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBXZWFr
QmxvY2s6OnZpc2l0KEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgLy8gSWYg
YSBibG9jayBpcyBjb21wbGV0ZWx5IGVtcHR5LCBhIHZpc2l0IHdvbid0IGhhdmUgYW55IGVmZmVj
dC4KICAgICBpZiAoaXNFbXB0eSgpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
V2Vha0Jsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vh
a0Jsb2NrLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L1dlYWtCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMi0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzIsOCArMzIsOCBAQAogCiBuYW1lc3Bh
Y2UgSlNDIHsKIAorY2xhc3MgQWJzdHJhY3RTbG90VmlzaXRvcjsKIGNsYXNzIEhlYXA7Ci1jbGFz
cyBTbG90VmlzaXRvcjsKIAogREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIo
V2Vha0Jsb2NrKTsKIApAQCAtNjUsNyArNjUsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzd2VlcCgp
OwogICAgIFN3ZWVwUmVzdWx0IHRha2VTd2VlcFJlc3VsdCgpOwogCi0gICAgdm9pZCB2aXNpdChT
bG90VmlzaXRvciYpOworICAgIHZvaWQgdmlzaXQoQWJzdHJhY3RTbG90VmlzaXRvciYpOwogCiAg
ICAgdm9pZCByZWFwKCk7CiAKQEAgLTc1LDggKzc1LDggQEAgcHVibGljOgogcHJpdmF0ZToKICAg
ICBzdGF0aWMgRnJlZUNlbGwqIGFzRnJlZUNlbGwoV2Vha0ltcGwqKTsKICAgICAKLSAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBDb250YWluZXJUeXBlPgotICAgIHZvaWQgc3BlY2lhbGl6ZWRWaXNpdChD
b250YWluZXJUeXBlJiwgU2xvdFZpc2l0b3ImKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDb250
YWluZXJUeXBlLCB0eXBlbmFtZSBWaXNpdG9yPgorICAgIHZvaWQgc3BlY2lhbGl6ZWRWaXNpdChD
b250YWluZXJUeXBlJiwgVmlzaXRvciYpOwogCiAgICAgZXhwbGljaXQgV2Vha0Jsb2NrKENlbGxD
b250YWluZXIpOwogICAgIHZvaWQgZmluYWxpemUoV2Vha0ltcGwqKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtIYW5kbGVPd25lci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha0hhbmRsZU93bmVyLmNwcAkocmV2aXNpb24gMjcy
ODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha0hhbmRsZU93bmVyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIw
MjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0zNSw3ICszNSw3IEBAIFdlYWtIYW5kbGVPd25lcjo6fldlYWtIYW5kbGVP
d25lcigpCiB7CiB9CiAKLWJvb2wgV2Vha0hhbmRsZU93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFx
dWVSb290cyhIYW5kbGU8VW5rbm93bj4sIHZvaWQqLCBTbG90VmlzaXRvciYsIGNvbnN0IGNoYXIq
KikKK2Jvb2wgV2Vha0hhbmRsZU93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhIYW5k
bGU8VW5rbm93bj4sIHZvaWQqLCBBYnN0cmFjdFNsb3RWaXNpdG9yJiwgY29uc3QgY2hhcioqKQog
ewogICAgIHJldHVybiBmYWxzZTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L1dlYWtIYW5kbGVPd25lci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL1dlYWtIYW5kbGVPd25lci5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9XZWFrSGFuZGxlT3duZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOSwxMyArMjks
MTMgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLWNsYXNzIFNsb3RWaXNpdG9yOworY2xhc3MgQWJz
dHJhY3RTbG90VmlzaXRvcjsKIAogY2xhc3MgSlNfRVhQT1JUX1BSSVZBVEUgV2Vha0hhbmRsZU93
bmVyIHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5XZWFrSGFuZGxlT3duZXIoKTsKICAgICAvLyBy
ZWFzb24gd2lsbCBvbmx5IGJlIG5vbi1udWxsIHdoZW4gZ2VuZXJhdGluZyBhIGRlYnVnIEdDIGhl
YXAgc25hcHNob3QuCi0gICAgdmlydHVhbCBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3Rz
KEhhbmRsZTxVbmtub3duPiwgdm9pZCogY29udGV4dCwgU2xvdFZpc2l0b3ImLCBjaGFyIGNvbnN0
KiogcmVhc29uID0gbnVsbHB0cik7CisgICAgdmlydHVhbCBib29sIGlzUmVhY2hhYmxlRnJvbU9w
YXF1ZVJvb3RzKEhhbmRsZTxVbmtub3duPiwgdm9pZCogY29udGV4dCwgQWJzdHJhY3RTbG90Vmlz
aXRvciYsIGNoYXIgY29uc3QqKiByZWFzb24gPSBudWxscHRyKTsKICAgICB2aXJ0dWFsIHZvaWQg
ZmluYWxpemUoSGFuZGxlPFVua25vd24+LCB2b2lkKiBjb250ZXh0KTsKIH07CiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtTZXQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrU2V0LmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtTZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTUxLDcg
KzUxLDcgQEAgcHVibGljOgogICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0OwogICAgIGJvb2wgaXNU
cml2aWFsbHlEZXN0cnVjdGlibGUoKSBjb25zdDsKIAotICAgIHZvaWQgdmlzaXQoU2xvdFZpc2l0
b3ImKTsKKyAgICB2b2lkIHZpc2l0KEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKIAogICAgIHZvaWQg
cmVhcCgpOwogICAgIHZvaWQgc3dlZXAoKTsKQEAgLTExNCw3ICsxMTQsNyBAQCBpbmxpbmUgdm9p
ZCBXZWFrU2V0OjpsYXN0Q2hhbmNlVG9GaW5hbGl6CiAgICAgICAgIGJsb2NrLT5sYXN0Q2hhbmNl
VG9GaW5hbGl6ZSgpOwogfQogCi1pbmxpbmUgdm9pZCBXZWFrU2V0Ojp2aXNpdChTbG90VmlzaXRv
ciYgdmlzaXRvcikKK2lubGluZSB2b2lkIFdlYWtTZXQ6OnZpc2l0KEFic3RyYWN0U2xvdFZpc2l0
b3ImIHZpc2l0b3IpCiB7CiAgICAgZm9yIChXZWFrQmxvY2sqIGJsb2NrID0gbV9ibG9ja3MuaGVh
ZCgpOyBibG9jazsgYmxvY2sgPSBibG9jay0+bmV4dCgpKQogICAgICAgICBibG9jay0+dmlzaXQo
dmlzaXRvcik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU2hhZG93
Q2hpY2tlbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJl
dGVyL1NoYWRvd0NoaWNrZW4uY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW50ZXJwcmV0ZXIvU2hhZG93Q2hpY2tlbi5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTkgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC00NDAsNyArNDQwLDcgQEAgdm9pZCBTaGFkb3dDaGlja2VuOjp1cGRhdGUoVk0mIHZtLCBDYWxs
RgogICAgICAgICBkYXRhTG9nKCIgICAgQWZ0ZXIgY2xlYW4tdXA6ICIsICp0aGlzLCAiXG4iKTsK
IH0KIAotdm9pZCBTaGFkb3dDaGlja2VuOjp2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNp
dG9yKQordm9pZCBTaGFkb3dDaGlja2VuOjp2aXNpdENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0
b3ImIHZpc2l0b3IpCiB7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9sb2dDdXJzb3IgLSBtX2xv
ZzsgaS0tOykgewogICAgICAgICBKU09iamVjdCogY2FsbGVlID0gbV9sb2dbaV0uY2FsbGVlOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1NoYWRvd0NoaWNrZW4uaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU2hhZG93Q2hp
Y2tlbi5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJw
cmV0ZXIvU2hhZG93Q2hpY2tlbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM1LDEzICszNSwxMyBAQAogCiBu
YW1lc3BhY2UgSlNDIHsKIAorY2xhc3MgQWJzdHJhY3RTbG90VmlzaXRvcjsKIGNsYXNzIENhbGxG
cmFtZTsKIGNsYXNzIENvZGVCbG9jazsKIGNsYXNzIEpTQXJyYXk7CiBjbGFzcyBKU09iamVjdDsK
IGNsYXNzIEpTU2NvcGU7CiBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7Ci1jbGFzcyBTbG90
VmlzaXRvcjsKIGNsYXNzIFZNOwogCiAvLyBTaGFkb3dDaGlja2VuIGlzIGEgbG9nIHRoYXQgY2Fu
IGJlIHVzZWQgdG8gcHJvZHVjZSBhIHNoYWRvdyBzdGFjayBvZiBDSElDS0VOLXN0eWxlIHN0YWNr
IGZyYW1lcy4KQEAgLTE5Niw3ICsxOTYsNyBAQCBwdWJsaWM6CiAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgRnVuY3Rvcj4KICAgICB2b2lkIGl0ZXJhdGUoVk0mLCBDYWxsRnJhbWUqLCBjb25zdCBGdW5j
dG9yJik7CiAgICAgCi0gICAgdm9pZCB2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CisgICAg
dm9pZCB2aXNpdENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKICAgICB2b2lkIHJlc2V0
KCk7CiAgICAgCiAgICAgLy8gSklUIHN1cHBvcnQuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0dDQXdhcmVKSVRTdHViUm91dGluZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9HQ0F3YXJlSklUU3R1YlJvdXRpbmUuY3BwCShyZXZpc2lvbiAyNzI4
MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0dDQXdhcmVKSVRTdHViUm91dGluZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDEyLTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEyLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC03Myw3ICs3Myw3IEBAIHZvaWQgR0NBd2FyZUpJVFN0dWJS
b3V0aW5lOjpkZWxldGVGcm9tR0MKICAgICBkZWxldGUgdGhpczsKIH0KIAotdm9pZCBHQ0F3YXJl
SklUU3R1YlJvdXRpbmU6Om1hcmtSZXF1aXJlZE9iamVjdHNJbnRlcm5hbChTbG90VmlzaXRvciYp
Cit2b2lkIEdDQXdhcmVKSVRTdHViUm91dGluZTo6bWFya1JlcXVpcmVkT2JqZWN0c0ludGVybmFs
KEFic3RyYWN0U2xvdFZpc2l0b3ImKQogewogfQogCkBAIC05Miw3ICs5Miw3IEBAIE1hcmtpbmdH
Q0F3YXJlSklUU3R1YlJvdXRpbmU6On5NYXJraW5nR0MKIHsKIH0KIAotdm9pZCBNYXJraW5nR0NB
d2FyZUpJVFN0dWJSb3V0aW5lOjptYXJrUmVxdWlyZWRPYmplY3RzSW50ZXJuYWwoU2xvdFZpc2l0
b3ImIHZpc2l0b3IpCit2b2lkIE1hcmtpbmdHQ0F3YXJlSklUU3R1YlJvdXRpbmU6Om1hcmtSZXF1
aXJlZE9iamVjdHNJbnRlcm5hbChBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAg
IGZvciAoYXV0byYgZW50cnkgOiBtX2NlbGxzKQogICAgICAgICB2aXNpdG9yLmFwcGVuZChlbnRy
eSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0dDQXdhcmVKSVRTdHViUm91dGlu
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvR0NBd2FyZUpJVFN0
dWJSb3V0aW5lLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvR0NBd2FyZUpJVFN0dWJSb3V0aW5lLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02MCw4ICs2MCw4
IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEdDQXdhcmVK
SVRTdHViUm91dGluZShjb2RlLCB2bSkpOwogICAgIH0KLSAgICAKLSAgICB2b2lkIG1hcmtSZXF1
aXJlZE9iamVjdHMoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisKKyAgICB2b2lkIG1hcmtSZXF1aXJl
ZE9iamVjdHMoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKICAgICB7CiAgICAgICAgIG1h
cmtSZXF1aXJlZE9iamVjdHNJbnRlcm5hbCh2aXNpdG9yKTsKICAgICB9CkBAIC03MSw3ICs3MSw3
IEBAIHB1YmxpYzoKIHByb3RlY3RlZDoKICAgICB2b2lkIG9ic2VydmVaZXJvUmVmQ291bnQoKSBv
dmVycmlkZTsKICAgICAKLSAgICB2aXJ0dWFsIHZvaWQgbWFya1JlcXVpcmVkT2JqZWN0c0ludGVy
bmFsKFNsb3RWaXNpdG9yJik7CisgICAgdmlydHVhbCB2b2lkIG1hcmtSZXF1aXJlZE9iamVjdHNJ
bnRlcm5hbChBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNs
YXNzIEpJVFN0dWJSb3V0aW5lU2V0OwpAQCAtODksNyArODksNyBAQCBwdWJsaWM6CiAgICAgfk1h
cmtpbmdHQ0F3YXJlSklUU3R1YlJvdXRpbmUoKSBvdmVycmlkZTsKICAgICAKIHByb3RlY3RlZDoK
LSAgICB2b2lkIG1hcmtSZXF1aXJlZE9iamVjdHNJbnRlcm5hbChTbG90VmlzaXRvciYpIG92ZXJy
aWRlOworICAgIHZvaWQgbWFya1JlcXVpcmVkT2JqZWN0c0ludGVybmFsKEFic3RyYWN0U2xvdFZp
c2l0b3ImKSBvdmVycmlkZTsKIAogcHJpdmF0ZToKICAgICBWZWN0b3I8V3JpdGVCYXJyaWVyPEpT
Q2VsbD4+IG1fY2VsbHM7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFdvcmts
aXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFdvcmts
aXN0LmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRXb3JrbGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDE2LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE2LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L1BvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L1BvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lLmNwcAkocmV2
aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Qb2x5bW9ycGhpY0Nh
bGxTdHViUm91dGluZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDE1LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMzUsNyArMTM1LDcgQEAgYm9v
bCBQb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZTo6dmlzaXRXZQogICAgIHJldHVybiBpc1N0aWxs
TGl2ZTsKIH0KIAotdm9pZCBQb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZTo6bWFya1JlcXVpcmVk
T2JqZWN0c0ludGVybmFsKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBQb2x5bW9ycGhpY0Nh
bGxTdHViUm91dGluZTo6bWFya1JlcXVpcmVkT2JqZWN0c0ludGVybmFsKEFic3RyYWN0U2xvdFZp
c2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgZm9yIChhdXRvJiB2YXJpYW50IDogbV92YXJpYW50cykK
ICAgICAgICAgdmlzaXRvci5hcHBlbmQodmFyaWFudCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L1BvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Qb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZS5oCShyZXZp
c2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1BvbHltb3JwaGljQ2Fs
bFN0dWJSb3V0aW5lLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDE1LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE1LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMDUsNyArMTA1LDcgQEAgcHVibGlj
OgogICAgIGJvb2wgdmlzaXRXZWFrKFZNJikgZmluYWw7CiAKIHByaXZhdGU6Ci0gICAgdm9pZCBt
YXJrUmVxdWlyZWRPYmplY3RzSW50ZXJuYWwoU2xvdFZpc2l0b3ImKSBmaW5hbDsKKyAgICB2b2lk
IG1hcmtSZXF1aXJlZE9iamVjdHNJbnRlcm5hbChBYnN0cmFjdFNsb3RWaXNpdG9yJikgZmluYWw7
CiAKICAgICBWZWN0b3I8V3JpdGVCYXJyaWVyPEpTQ2VsbD4sIDI+IG1fdmFyaWFudHM7CiAgICAg
VW5pcXVlQXJyYXk8dWludDMyX3Q+IG1fZmFzdENvdW50czsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0Fic3RyYWN0TW9kdWxlUmVjb3JkLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BYnN0cmFjdE1vZHVsZVJlY29yZC5jcHAJKHJl
dmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Fic3RyYWN0
TW9kdWxlUmVjb3JkLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTUtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTYwLDcgKzYwLDggQEAgdm9pZCBB
YnN0cmFjdE1vZHVsZVJlY29yZDo6ZmluaXNoQ3JlYXRpbwogICAgIHB1dERpcmVjdCh2bSwgSWRl
bnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImRlcGVuZGVuY2llc01hcCJfcyksIG1fZGVwZW5kZW5j
aWVzTWFwLmdldCgpKTsKIH0KIAotdm9pZCBBYnN0cmFjdE1vZHVsZVJlY29yZDo6dmlzaXRDaGls
ZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5h
bWUgVmlzaXRvcj4KK3ZvaWQgQWJzdHJhY3RNb2R1bGVSZWNvcmQ6OnZpc2l0Q2hpbGRyZW5JbXBs
KEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBBYnN0cmFjdE1vZHVsZVJl
Y29yZCogdGhpc09iamVjdCA9IGpzQ2FzdDxBYnN0cmFjdE1vZHVsZVJlY29yZCo+KGNlbGwpOwog
ICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTcw
LDYgKzcxLDggQEAgdm9pZCBBYnN0cmFjdE1vZHVsZVJlY29yZDo6dmlzaXRDaGlsZHJlbgogICAg
IHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fZGVwZW5kZW5jaWVzTWFwKTsKIH0KIAorREVG
SU5FX1ZJU0lUX0NISUxEUkVOKEFic3RyYWN0TW9kdWxlUmVjb3JkKTsKKwogdm9pZCBBYnN0cmFj
dE1vZHVsZVJlY29yZDo6YXBwZW5kUmVxdWVzdGVkTW9kdWxlKGNvbnN0IElkZW50aWZpZXImIG1v
ZHVsZU5hbWUpCiB7CiAgICAgbV9yZXF1ZXN0ZWRNb2R1bGVzLmFkZChtb2R1bGVOYW1lLmltcGwo
KSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BYnN0cmFjdE1vZHVsZVJl
Y29yZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Fic3Ry
YWN0TW9kdWxlUmVjb3JkLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0Fic3RyYWN0TW9kdWxlUmVjb3JkLmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTM2LDcg
KzEzNiw3IEBAIHByb3RlY3RlZDoKICAgICBBYnN0cmFjdE1vZHVsZVJlY29yZChWTSYsIFN0cnVj
dHVyZSosIGNvbnN0IElkZW50aWZpZXImKTsKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTR2xv
YmFsT2JqZWN0KiwgVk0mKTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgdm9p
ZCBzZXRNb2R1bGVFbnZpcm9ubWVudChKU0dsb2JhbE9iamVjdCosIEpTTW9kdWxlRW52aXJvbm1l
bnQqKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJnTGlzdC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJnTGlzdC5jcHAJ
KHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FyZ0xp
c3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqICBDb3B5cmlnaHQg
KEMpIDIwMDMtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJp
Z2h0IChDKSAyMDAzLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
ICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKQEAgLTUxLDcgKzUxLDcgQEAgdm9pZCBBcmdMaXN0OjpnZXRTbGljZShp
bnQgc3RhcnRJbmRleCwgQQogICAgIHJlc3VsdC5tX2FyZ0NvdW50ID0gIG1fYXJnQ291bnQgLSBz
dGFydEluZGV4OwogfQogCi12b2lkIE1hcmtlZEFyZ3VtZW50QnVmZmVyOjptYXJrTGlzdHMoU2xv
dFZpc2l0b3ImIHZpc2l0b3IsIExpc3RTZXQmIG1hcmtTZXQpCit2b2lkIE1hcmtlZEFyZ3VtZW50
QnVmZmVyOjptYXJrTGlzdHMoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvciwgTGlzdFNldCYg
bWFya1NldCkKIHsKICAgICBMaXN0U2V0OjppdGVyYXRvciBlbmQgPSBtYXJrU2V0LmVuZCgpOwog
ICAgIGZvciAoTGlzdFNldDo6aXRlcmF0b3IgaXQgPSBtYXJrU2V0LmJlZ2luKCk7IGl0ICE9IGVu
ZDsgKytpdCkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJnTGlzdC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FyZ0xpc3QuaAko
cmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJnTGlz
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMp
IDE5OTktMjAwMSBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQotICogIENvcHlyaWdodCAo
QykgMjAwMy0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmln
aHQgKEMpIDIwMDMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYwpAQCAtMTE4LDcgKzExOCw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJu
IHJlc3VsdDsKICAgICB9CiAgICAgICAgIAotICAgIHN0YXRpYyB2b2lkIG1hcmtMaXN0cyhTbG90
VmlzaXRvciYsIExpc3RTZXQmKTsKKyAgICBzdGF0aWMgdm9pZCBtYXJrTGlzdHMoQWJzdHJhY3RT
bG90VmlzaXRvciYsIExpc3RTZXQmKTsKIAogICAgIHZvaWQgZW5zdXJlQ2FwYWNpdHkoc2l6ZV90
IHJlcXVlc3RlZENhcGFjaXR5KQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0NhY2hlYWJsZUlkZW50aWZpZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9DYWNoZWFibGVJZGVudGlmaWVyLmgJKHJldmlzaW9uIDI3MjgzMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlYWJsZUlkZW50aWZpZXIuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjAg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIwLTIw
MjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0zOSwxMCArMzksMTAgQEAgdXNpbmcgV1RGOjpVbmlxdWVkU3RyaW5nSW1w
bDsKIAogbmFtZXNwYWNlIEpTQyB7CiAKK2NsYXNzIEFic3RyYWN0U2xvdFZpc2l0b3I7CiBjbGFz
cyBDb2RlQmxvY2s7CiBjbGFzcyBJZGVudGlmaWVyOwogY2xhc3MgSlNDZWxsOwotY2xhc3MgU2xv
dFZpc2l0b3I7CiAKIGNsYXNzIENhY2hlYWJsZUlkZW50aWZpZXIgewogcHVibGljOgpAQCAtODcs
NyArODcsNyBAQCBwdWJsaWM6CiAKICAgICB1aW50cHRyX3QgcmF3Qml0cygpIGNvbnN0IHsgcmV0
dXJuIG1fYml0czsgfQogCi0gICAgaW5saW5lIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0
b3ImKSBjb25zdDsKKyAgICBpbmxpbmUgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShBYnN0cmFjdFNsb3RW
aXNpdG9yJikgY29uc3Q7CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGR1bXAoUHJpbnRT
dHJlYW0mKSBjb25zdDsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2Fj
aGVhYmxlSWRlbnRpZmllcklubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9DYWNoZWFibGVJZGVudGlmaWVySW5saW5lcy5oCShyZXZpc2lvbiAyNzI4
MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWFibGVJZGVudGlmaWVy
SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMjAtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEzNyw3ICsxMzcsNyBAQCBpbmxpbmUgdm9pZCBDYWNo
ZWFibGVJZGVudGlmaWVyOjpzZXRVaWRCCiAgICAgbV9iaXRzID0gYml0d2lzZV9jYXN0PHVpbnRw
dHJfdD4odWlkKSB8IHNfdWlkVGFnOwogfQogCi1pbmxpbmUgdm9pZCBDYWNoZWFibGVJZGVudGlm
aWVyOjp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYgdmlzaXRvcikgY29uc3QKK2lubGluZSB2
b2lkIENhY2hlYWJsZUlkZW50aWZpZXI6OnZpc2l0QWdncmVnYXRlKEFic3RyYWN0U2xvdFZpc2l0
b3ImIHZpc2l0b3IpIGNvbnN0CiB7CiAgICAgaWYgKG1fYml0cyAmJiBpc0NlbGwoKSkKICAgICAg
ICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZChjZWxsKCkpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQ2xhc3NJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQ2xhc3NJbmZvLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NsYXNzSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDcgKzEsNyBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMSBIYXJyaSBQb3J0ZW4g
KHBvcnRlbkBrZGUub3JnKQogICogIENvcHlyaWdodCAoQykgMjAwMSBQZXRlciBLZWxseSAocG1r
QHBvc3QuY29tKQotICogIENvcHlyaWdodCAoQykgMjAwMy0yMDE5IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAyMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtNDQsOSArNDQsNiBA
QCBzdHJ1Y3QgTWV0aG9kVGFibGUgewogICAgIHVzaW5nIERlc3Ryb3lGdW5jdGlvblB0ciA9IHZv
aWQgKCopKEpTQ2VsbCopOwogICAgIERlc3Ryb3lGdW5jdGlvblB0ciBNRVRIT0RfVEFCTEVfRU5U
UlkoZGVzdHJveSk7CiAKLSAgICB1c2luZyBWaXNpdENoaWxkcmVuRnVuY3Rpb25QdHIgPSB2b2lk
ICgqKShKU0NlbGwqLCBTbG90VmlzaXRvciYpOwotICAgIFZpc2l0Q2hpbGRyZW5GdW5jdGlvblB0
ciBNRVRIT0RfVEFCTEVfRU5UUlkodmlzaXRDaGlsZHJlbik7Ci0KICAgICB1c2luZyBHZXRDYWxs
RGF0YUZ1bmN0aW9uUHRyID0gQ2FsbERhdGEgKCopKEpTQ2VsbCopOwogICAgIEdldENhbGxEYXRh
RnVuY3Rpb25QdHIgTUVUSE9EX1RBQkxFX0VOVFJZKGdldENhbGxEYXRhKTsKIApAQCAtMTIwLDcg
KzExNywxNiBAQCBzdHJ1Y3QgTWV0aG9kVGFibGUgewogICAgIHVzaW5nIEVzdGltYXRlZFNpemVG
dW5jdGlvblB0ciA9IHNpemVfdCAoKikoSlNDZWxsKiwgVk0mKTsKICAgICBFc3RpbWF0ZWRTaXpl
RnVuY3Rpb25QdHIgTUVUSE9EX1RBQkxFX0VOVFJZKGVzdGltYXRlZFNpemUpOwogCi0gICAgdXNp
bmcgVmlzaXRPdXRwdXRDb25zdHJhaW50c1B0ciA9IHZvaWQgKCopKEpTQ2VsbCosIFNsb3RWaXNp
dG9yJik7CisgICAgdXNpbmcgVmlzaXRDaGlsZHJlbkZ1bmN0aW9uUHRyID0gdm9pZCAoKikoSlND
ZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBWaXNpdENoaWxkcmVuRnVuY3Rpb25QdHIgTUVUSE9E
X1RBQkxFX0VOVFJZKHZpc2l0Q2hpbGRyZW5XaXRoU2xvdFZpc2l0b3IpOworCisgICAgdXNpbmcg
VmlzaXRDaGlsZHJlbldpdGhBYnN0cmFjdFNsb3RWaXNpdG9yUHRyID0gdm9pZCAoKikoSlNDZWxs
KiwgQWJzdHJhY3RTbG90VmlzaXRvciYpOworICAgIFZpc2l0Q2hpbGRyZW5XaXRoQWJzdHJhY3RT
bG90VmlzaXRvclB0ciBNRVRIT0RfVEFCTEVfRU5UUlkodmlzaXRDaGlsZHJlbldpdGhBYnN0cmFj
dFNsb3RWaXNpdG9yKTsKKworICAgIEFMV0FZU19JTkxJTkUgdm9pZCB2aXNpdENoaWxkcmVuKEpT
Q2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0IHsgdmlzaXRDaGlsZHJlbldp
dGhTbG90VmlzaXRvcihjZWxsLCB2aXNpdG9yKTsgfQorICAgIEFMV0FZU19JTkxJTkUgdm9pZCB2
aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikg
Y29uc3QgeyB2aXNpdENoaWxkcmVuV2l0aEFic3RyYWN0U2xvdFZpc2l0b3IoY2VsbCwgdmlzaXRv
cik7IH0KKworICAgIHVzaW5nIFZpc2l0T3V0cHV0Q29uc3RyYWludHNQdHIgPSB2b2lkICgqKShK
U0NlbGwqLCBBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAgICAgVmlzaXRPdXRwdXRDb25zdHJhaW50
c1B0ciBNRVRIT0RfVEFCTEVfRU5UUlkodmlzaXRPdXRwdXRDb25zdHJhaW50cyk7CiB9OwogCkBA
IC0xNDcsNyArMTUzLDYgQEAgc3RydWN0IE1ldGhvZFRhYmxlIHsKICAgICBKU0Nhc3RpbmdIZWxw
ZXJzOjpJbmhlcml0c1RyYWl0czxDbGFzc05hbWU+Ojp0eXBlUmFuZ2UsIFwKICAgICB7IFwKICAg
ICAgICAgJkNsYXNzTmFtZTo6ZGVzdHJveSwgXAotICAgICAgICAmQ2xhc3NOYW1lOjp2aXNpdENo
aWxkcmVuLCBcCiAgICAgICAgICZDbGFzc05hbWU6OmdldENhbGxEYXRhLCBcCiAgICAgICAgICZD
bGFzc05hbWU6OmdldENvbnN0cnVjdERhdGEsIFwKICAgICAgICAgJkNsYXNzTmFtZTo6cHV0LCBc
CkBAIC0xNzMsNiArMTc4LDggQEAgc3RydWN0IE1ldGhvZFRhYmxlIHsKICAgICAgICAgJkNsYXNz
TmFtZTo6ZHVtcFRvU3RyZWFtLCBcCiAgICAgICAgICZDbGFzc05hbWU6OmFuYWx5emVIZWFwLCBc
CiAgICAgICAgICZDbGFzc05hbWU6OmVzdGltYXRlZFNpemUsIFwKKyAgICAgICAgJkNsYXNzTmFt
ZTo6dmlzaXRDaGlsZHJlbiwgXAorICAgICAgICAmQ2xhc3NOYW1lOjp2aXNpdENoaWxkcmVuLCBc
CiAgICAgICAgICZDbGFzc05hbWU6OnZpc2l0T3V0cHV0Q29uc3RyYWludHMsIFwKICAgICB9LCBc
CiAgICAgQ2xhc3NOYW1lOjpUeXBlZEFycmF5U3RvcmFnZVR5cGUsIFwKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0Nsb25lZEFyZ3VtZW50cy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xvbmVkQXJndW1lbnRzLmNwcAkocmV2aXNp
b24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xvbmVkQXJndW1l
bnRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTUtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2Nyw3ICsyNjcsOCBAQCB2b2lkIENsb25lZEFy
Z3VtZW50czo6bWF0ZXJpYWxpemVTcGVjaWFsCiAgICAgICAgIG1hdGVyaWFsaXplU3BlY2lhbHMo
Z2xvYmFsT2JqZWN0KTsKIH0KIAotdm9pZCBDbG9uZWRBcmd1bWVudHM6OnZpc2l0Q2hpbGRyZW4o
SlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZp
c2l0b3I+Cit2b2lkIENsb25lZEFyZ3VtZW50czo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBj
ZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIENsb25lZEFyZ3VtZW50cyogdGhpc09iamVj
dCA9IGpzQ2FzdDxDbG9uZWRBcmd1bWVudHMqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNU
X0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC0yNzUsNSArMjc2LDcgQEAgdm9pZCBD
bG9uZWRBcmd1bWVudHM6OnZpc2l0Q2hpbGRyZW4oSlNDZQogICAgIHZpc2l0b3IuYXBwZW5kKHRo
aXNPYmplY3QtPm1fY2FsbGVlKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKENsb25lZEFy
Z3VtZW50cyk7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9DbG9uZWRBcmd1bWVudHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9DbG9uZWRBcmd1bWVudHMuaAkocmV2aXNpb24gMjcyODMwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xvbmVkQXJndW1lbnRzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjAg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIw
MjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC02Miw3ICs2Miw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgU3RydWN0dXJl
KiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUgcHJvdG90eXBl
KTsKICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTbG93UHV0U3RydWN0dXJlKFZNJiwgSlNH
bG9iYWxPYmplY3QqLCBKU1ZhbHVlIHByb3RvdHlwZSk7CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNp
dENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElM
RFJFTjsKIAogICAgIERFQ0xBUkVfSU5GTzsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvRGlyZWN0QXJndW1lbnRzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9EaXJlY3RBcmd1bWVudHMuY3BwCShyZXZpc2lvbiAyNzI4MzApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EaXJlY3RBcmd1bWVudHMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE4
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0y
MDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtOTAsNyArOTAsOCBAQCBzaXplX3QgRGlyZWN0QXJndW1lbnRzOjplc3Rp
bWF0ZWRTaXplKEpTCiAgICAgcmV0dXJuIEJhc2U6OmVzdGltYXRlZFNpemUoY2VsbCwgdm0pICsg
bWFwcGVkQXJndW1lbnRzU2l6ZSArIG1vZGlmaWVkQXJndW1lbnRzU2l6ZTsKIH0KIAotdm9pZCBE
aXJlY3RBcmd1bWVudHM6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiB0aGlzQ2VsbCwgU2xvdFZpc2l0
b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBEaXJlY3RBcmd1
bWVudHM6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogdGhpc0NlbGwsIFZpc2l0b3ImIHZpc2l0
b3IpCiB7CiAgICAgRGlyZWN0QXJndW1lbnRzKiB0aGlzT2JqZWN0ID0gc3RhdGljX2Nhc3Q8RGly
ZWN0QXJndW1lbnRzKj4odGhpc0NlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMo
dGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTEwNCw2ICsxMDUsOCBAQCB2b2lkIERpcmVjdEFyZ3Vt
ZW50czo6dmlzaXRDaGlsZHJlbihKU0NlCiAgICAgR2VuZXJpY0FyZ3VtZW50czxEaXJlY3RBcmd1
bWVudHM+Ojp2aXNpdENoaWxkcmVuKHRoaXNDZWxsLCB2aXNpdG9yKTsKIH0KIAorREVGSU5FX1ZJ
U0lUX0NISUxEUkVOKERpcmVjdEFyZ3VtZW50cyk7CisKIFN0cnVjdHVyZSogRGlyZWN0QXJndW1l
bnRzOjpjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBKU1ZhbHVlIHByb3RvdHlwZSkKIHsKICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0s
IGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhEaXJlY3RBcmd1bWVudHNUeXBlLCBT
dHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9EaXJlY3RBcmd1bWVudHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9EaXJlY3RBcmd1bWVudHMuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGlyZWN0QXJndW1lbnRzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTkgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC02NSw3ICs2NSw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgRGlyZWN0QXJndW1lbnRzKiBj
cmVhdGVCeUNvcHlpbmcoSlNHbG9iYWxPYmplY3QqLCBDYWxsRnJhbWUqKTsKIAogICAgIHN0YXRp
YyBzaXplX3QgZXN0aW1hdGVkU2l6ZShKU0NlbGwqLCBWTSYpOwotICAgIHN0YXRpYyB2b2lkIHZp
c2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NI
SUxEUkVOOwogICAgIAogICAgIHVpbnQzMl90IGludGVybmFsTGVuZ3RoKCkgY29uc3QKICAgICB7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FdmFsRXhlY3V0YWJsZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXZhbEV4ZWN1dGFi
bGUuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9FdmFsRXhlY3V0YWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEwLCAyMDEzLCAyMDE1LTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC01MCw3ICs1MCw4IEBAIGF1dG8gRXZhbEV4ZWN1dGFibGU6OmVuc3VyZVRlbXBsYXRlT2JqZWMK
ICAgICByZXR1cm4gZW5zdXJlVGVtcGxhdGVPYmplY3RNYXBJbXBsKG1fdGVtcGxhdGVPYmplY3RN
YXApOwogfQogCi12b2lkIEV2YWxFeGVjdXRhYmxlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2Vs
bCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9p
ZCBFdmFsRXhlY3V0YWJsZTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9y
JiB2aXNpdG9yKQogewogICAgIEV2YWxFeGVjdXRhYmxlKiB0aGlzT2JqZWN0ID0ganNDYXN0PEV2
YWxFeGVjdXRhYmxlKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlz
T2JqZWN0LCBpbmZvKCkpOwpAQCAtNjQsNCArNjUsNiBAQCB2b2lkIEV2YWxFeGVjdXRhYmxlOjp2
aXNpdENoaWxkcmVuKEpTQ2VsCiAgICAgfQogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oRXZh
bEV4ZWN1dGFibGUpOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0V2YWxFeGVjdXRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvRXZhbEV4ZWN1dGFibGUuaAkocmV2aXNpb24gMjcyODMwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXZhbEV4ZWN1dGFibGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxOSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTc5LDcgKzc5LDcgQEAgcHJvdGVjdGVkOgogICAgIHVzaW5nIEJhc2U6OmZp
bmlzaENyZWF0aW9uOwogICAgIEV2YWxFeGVjdXRhYmxlKEpTR2xvYmFsT2JqZWN0KiwgY29uc3Qg
U291cmNlQ29kZSYsIGJvb2wgaW5TdHJpY3RDb250ZXh0LCBEZXJpdmVkQ29udGV4dFR5cGUsIGJv
b2wgaXNBcnJvd0Z1bmN0aW9uQ29udGV4dCwgYm9vbCBpc0luc2lkZU9yZGluYXJ5RnVuY3Rpb24s
IEV2YWxDb250ZXh0VHlwZSwgTmVlZHNDbGFzc0ZpZWxkSW5pdGlhbGl6ZXIsIFByaXZhdGVCcmFu
ZFJlcXVpcmVtZW50KTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwg
U2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgdW5zaWdu
ZWQgbV9uZWVkc0NsYXNzRmllbGRJbml0aWFsaXplciA6IDE7CiAgICAgdW5zaWduZWQgbV9wcml2
YXRlQnJhbmRSZXF1aXJlbWVudCA6IDE7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9FeGNlcHRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0V4Y2VwdGlvbi5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01Myw3ICs1
Myw4IEBAIFN0cnVjdHVyZSogRXhjZXB0aW9uOjpjcmVhdGVTdHJ1Y3R1cmUoVk0KICAgICByZXR1
cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5m
byhDZWxsVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwogfQogCi12b2lkIEV4Y2VwdGlv
bjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVt
cGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgRXhjZXB0aW9uOjp2aXNpdENoaWxkcmVuSW1w
bChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgRXhjZXB0aW9uKiB0aGlz
T2JqZWN0ID0ganNDYXN0PEV4Y2VwdGlvbio+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1Rf
SU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTY0LDYgKzY1LDggQEAgdm9pZCBFeGNl
cHRpb246OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZQogICAgICAgICBmcmFtZS52aXNpdENoaWxk
cmVuKHZpc2l0b3IpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oRXhjZXB0aW9uKTsKKwog
RXhjZXB0aW9uOjpFeGNlcHRpb24oVk0mIHZtKQogICAgIDogQmFzZSh2bSwgdm0uZXhjZXB0aW9u
U3RydWN0dXJlLmdldCgpKQogewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
RXhjZXB0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
RXhjZXB0aW9uLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0V4Y2VwdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxNS0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTEsNyArNTEsNyBAQCBwdWJs
aWM6CiAKICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2Jh
bE9iamVjdCosIEpTVmFsdWUgcHJvdG90eXBlKTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hp
bGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVO
OwogCiAgICAgREVDTEFSRV9FWFBPUlRfSU5GTzsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvRnVuY3Rpb25FeGVjdXRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvbkV4ZWN1dGFibGUuY3BwCShyZXZpc2lvbiAy
NzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvbkV4ZWN1dGFi
bGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAwOS0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAwOS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjcsNyArNjcsOCBAQCBGdW5jdGlvbkNvZGVCbG9j
ayogRnVuY3Rpb25FeGVjdXRhYmxlOjpiCiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEZ1bmN0aW9u
Q29kZUJsb2NrKj4oZWRnZS0+Y29kZUJsb2NrKCktPmJhc2VsaW5lQWx0ZXJuYXRpdmUoKSk7CiB9
CiAKLXZvaWQgRnVuY3Rpb25FeGVjdXRhYmxlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwg
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBG
dW5jdGlvbkV4ZWN1dGFibGU6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRv
ciYgdmlzaXRvcikKIHsKICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIHRoaXNPYmplY3QgPSBqc0Nh
c3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhF
UklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtODYsNiArODcsOCBAQCB2b2lkIEZ1bmN0aW9u
RXhlY3V0YWJsZTo6dmlzaXRDaGlsZHJlbihKCiAgICAgfQogfQogCitERUZJTkVfVklTSVRfQ0hJ
TERSRU4oRnVuY3Rpb25FeGVjdXRhYmxlKTsKKwogRnVuY3Rpb25FeGVjdXRhYmxlKiBGdW5jdGlv
bkV4ZWN1dGFibGU6OmZyb21HbG9iYWxDb2RlKAogICAgIGNvbnN0IElkZW50aWZpZXImIG5hbWUs
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwg
CiAgICAgSlNPYmplY3QqJiBleGNlcHRpb24sIGludCBvdmVycmlkZUxpbmVOdW1iZXIsIE9wdGlv
bmFsPGludD4gZnVuY3Rpb25Db25zdHJ1Y3RvclBhcmFtZXRlcnNFbmRQb3NpdGlvbikKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJs
ZS5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9G
dW5jdGlvbkV4ZWN1dGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE2Niw3ICsxNjYsNyBAQCBw
dWJsaWM6CiAgICAgSlNQYXJzZXJTY3JpcHRNb2RlIHNjcmlwdE1vZGUoKSBjb25zdCB7IHJldHVy
biBtX3VubGlua2VkRXhlY3V0YWJsZS0+c2NyaXB0TW9kZSgpOyB9CiAgICAgU291cmNlQ29kZSBj
bGFzc1NvdXJjZSgpIGNvbnN0IHsgcmV0dXJuIG1fdW5saW5rZWRFeGVjdXRhYmxlLT5jbGFzc1Nv
dXJjZSgpOyB9CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RW
aXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKICAgICBzdGF0aWMgU3RydWN0
dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBKU1ZhbHVlIHByb3RvKQogICAgIHsKICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRl
KHZtLCBnbG9iYWxPYmplY3QsIHByb3RvLCBUeXBlSW5mbyhGdW5jdGlvbkV4ZWN1dGFibGVUeXBl
LCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9GdW5jdGlvblJhcmVEYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9GdW5jdGlvblJhcmVEYXRhLmNwcAkocmV2aXNpb24gMjcyODMwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25SYXJlRGF0YS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIw
MTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1
LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC01MSw3ICs1MSw4IEBAIFN0cnVjdHVyZSogRnVuY3Rpb25SYXJlRGF0
YTo6Y3JlYXRlU3RydWMKICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9i
amVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhDZWxsVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZv
KCkpOwogfQogCi12b2lkIEZ1bmN0aW9uUmFyZURhdGE6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBj
ZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2
b2lkIEZ1bmN0aW9uUmFyZURhdGE6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlz
aXRvciYgdmlzaXRvcikKIHsKICAgICBGdW5jdGlvblJhcmVEYXRhKiByYXJlRGF0YSA9IGpzQ2Fz
dDxGdW5jdGlvblJhcmVEYXRhKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklU
UyhjZWxsLCBpbmZvKCkpOwpAQCAtNjMsNiArNjQsOCBAQCB2b2lkIEZ1bmN0aW9uUmFyZURhdGE6
OnZpc2l0Q2hpbGRyZW4oSlNDCiAgICAgdmlzaXRvci5hcHBlbmQocmFyZURhdGEtPm1fZXhlY3V0
YWJsZSk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihGdW5jdGlvblJhcmVEYXRhKTsKKwog
RnVuY3Rpb25SYXJlRGF0YTo6RnVuY3Rpb25SYXJlRGF0YShWTSYgdm0sIEV4ZWN1dGFibGVCYXNl
KiBleGVjdXRhYmxlKQogICAgIDogQmFzZSh2bSwgdm0uZnVuY3Rpb25SYXJlRGF0YVN0cnVjdHVy
ZS5nZXQoKSkKICAgICAsIG1fb2JqZWN0QWxsb2NhdGlvblByb2ZpbGUoKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25SYXJlRGF0YS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uUmFyZURhdGEuaAkocmV2aXNp
b24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25SYXJl
RGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxNS0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjUsNyArNjUsNyBAQCBwdWJsaWM6CiAKICAgICBz
dGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpT
VmFsdWUgcHJvdG90eXBlKTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgREVD
TEFSRV9JTkZPOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmlj
QXJndW1lbnRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
R2VuZXJpY0FyZ3VtZW50cy5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9HZW5lcmljQXJndW1lbnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00NCw3
ICs0NCw3IEBAIHByb3RlY3RlZDoKICAgICB7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgdmlz
aXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJ
TERSRU47CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiwgSlNH
bG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwogICAgIHN0YXRpYyBi
b29sIGdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCos
IHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CiAgICAgc3RhdGljIHZvaWQg
Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlO
YW1lQXJyYXkmLCBEb250RW51bVByb3BlcnRpZXNNb2RlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0dlbmVyaWNBcmd1bWVudHNJbmxpbmVzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50c0lubGluZXMuaAko
cmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJp
Y0FyZ3VtZW50c0lubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMxLDcgKzMxLDggQEAKIG5h
bWVzcGFjZSBKU0MgewogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlPgotdm9pZCBHZW5lcmljQXJn
dW1lbnRzPFR5cGU+Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogdGhpc0NlbGwsIFNsb3RWaXNpdG9y
JiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgR2VuZXJpY0FyZ3Vt
ZW50czxUeXBlPjo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiB0aGlzQ2VsbCwgVmlzaXRvciYg
dmlzaXRvcikKIHsKICAgICBUeXBlKiB0aGlzT2JqZWN0ID0gc3RhdGljX2Nhc3Q8VHlwZSo+KHRo
aXNDZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8o
KSk7CkBAIC00MSw2ICs0Miw4IEBAIHZvaWQgR2VuZXJpY0FyZ3VtZW50czxUeXBlPjo6dmlzaXRD
aGlsZHIKICAgICAgICAgdmlzaXRvci5tYXJrQXV4aWxpYXJ5KHRoaXNPYmplY3QtPm1fbW9kaWZp
ZWRBcmd1bWVudHNEZXNjcmlwdG9yLmdldFVuc2FmZSgpKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NI
SUxEUkVOX1dJVEhfTU9ESUZJRVIodGVtcGxhdGU8dHlwZW5hbWUgVHlwZT4sIEdlbmVyaWNBcmd1
bWVudHM8VHlwZT4pOworCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlPgogYm9vbCBHZW5lcmljQXJn
dW1lbnRzPFR5cGU+OjpnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqIG9iamVjdCwgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lIGlkZW50LCBQcm9wZXJ0eVNsb3Qm
IHNsb3QpCiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZXR0ZXJTZXR0
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dldHRl
clNldHRlci5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0dldHRlclNldHRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSw3IEBACiAv
KgogICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAyIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5v
cmcpCiAgKiAgQ29weXJpZ2h0IChDKSAyMDAxIFBldGVyIEtlbGx5IChwbWtAcG9zdC5jb20pCi0g
KiAgQ29weXJpZ2h0IChDKSAyMDA0LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogIENvcHlyaWdodCAoQykgMjAwNC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0zMyw3ICszMyw4IEBAIFNUQVRJQ19BU1NF
UlRfSVNfVFJJVklBTExZX0RFU1RSVUNUSUJMRSgKIAogY29uc3QgQ2xhc3NJbmZvIEdldHRlclNl
dHRlcjo6c19pbmZvID0geyAiR2V0dGVyU2V0dGVyIiwgbnVsbHB0ciwgbnVsbHB0ciwgbnVsbHB0
ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShHZXR0ZXJTZXR0ZXIpIH07CiAKLXZvaWQgR2V0dGVyU2V0
dGVyOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0
ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBHZXR0ZXJTZXR0ZXI6OnZpc2l0Q2hpbGRy
ZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBHZXR0ZXJTZXR0
ZXIqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8R2V0dGVyU2V0dGVyKj4oY2VsbCk7CiAgICAgQVNTRVJU
X0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNDMsNiArNDQsOCBA
QCB2b2lkIEdldHRlclNldHRlcjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqCiAgICAgdmlzaXRvci5h
cHBlbmQodGhpc09iamVjdC0+bV9zZXR0ZXIpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4o
R2V0dGVyU2V0dGVyKTsKKwogSlNWYWx1ZSBjYWxsR2V0dGVyKEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIEpTVmFsdWUgYmFzZSwgSlNWYWx1ZSBnZXR0ZXJTZXR0ZXIpCiB7CiAgICAgVk0m
IHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvR2V0dGVyU2V0dGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvR2V0dGVyU2V0dGVyLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0dldHRlclNldHRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcg
KzEsNyBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMSBIYXJyaSBQb3J0ZW4gKHBv
cnRlbkBrZGUub3JnKQogICogIENvcHlyaWdodCAoQykgMjAwMSBQZXRlciBLZWxseSAocG1rQHBv
c3QuY29tKQotICogIENvcHlyaWdodCAoQykgMjAwMy0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtODIsNyArODIsNyBAQCBw
dWJsaWM6CiAgICAgICAgIHJldHVybiBjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgZ2V0dGVyT2Jq
ZWN0LCBzZXR0ZXJPYmplY3QpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwog
CiAgICAgSlNPYmplY3QqIGdldHRlcigpIGNvbnN0IHsgcmV0dXJuIG1fZ2V0dGVyLmdldCgpOyB9
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0hhc2hNYXBJbXBsLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9IYXNoTWFwSW1wbC5j
cHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0hh
c2hNYXBJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMCw2ICszMCw5IEBACiAKIG5hbWVzcGFjZSBK
U0MgewogCitERUZJTkVfVklTSVRfQ0hJTERSRU5fV0lUSF9NT0RJRklFUih0ZW1wbGF0ZTw+LCBI
YXNoTWFwQnVja2V0PEhhc2hNYXBCdWNrZXREYXRhS2V5Pik7CitERUZJTkVfVklTSVRfQ0hJTERS
RU5fV0lUSF9NT0RJRklFUih0ZW1wbGF0ZTw+LCBIYXNoTWFwQnVja2V0PEhhc2hNYXBCdWNrZXRE
YXRhS2V5VmFsdWU+KTsKKwogdGVtcGxhdGU8PgogY29uc3QgQ2xhc3NJbmZvIEhhc2hNYXBCdWNr
ZXQ8SGFzaE1hcEJ1Y2tldERhdGFLZXk+OjpzX2luZm8gPQogICAgIHsgIkhhc2hNYXBCdWNrZXQi
LCBudWxscHRyLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEhhc2hNYXBC
dWNrZXQ8SGFzaE1hcEJ1Y2tldERhdGFLZXk+KSB9OwpAQCAtMzgsOCArNDEsOSBAQCB0ZW1wbGF0
ZTw+CiBjb25zdCBDbGFzc0luZm8gSGFzaE1hcEJ1Y2tldDxIYXNoTWFwQnVja2V0RGF0YUtleVZh
bHVlPjo6c19pbmZvID0KICAgICB7ICJIYXNoTWFwQnVja2V0IiwgbnVsbHB0ciwgbnVsbHB0ciwg
bnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShIYXNoTWFwQnVja2V0PEhhc2hNYXBCdWNrZXRE
YXRhS2V5VmFsdWU+KSB9OwogCi10ZW1wbGF0ZSA8dHlwZW5hbWUgRGF0YT4KLXZvaWQgSGFzaE1h
cEJ1Y2tldDxEYXRhPjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgRGF0YT4KK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0
b3I+Cit2b2lkIEhhc2hNYXBCdWNrZXQ8RGF0YT46OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCog
Y2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBIYXNoTWFwQnVja2V0KiB0aGlzT2JqZWN0
ID0ganNDYXN0PEhhc2hNYXBCdWNrZXQqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lO
SEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC01Miw4ICs1Niw5IEBAIHZvaWQgSGFzaE1h
cEJ1Y2tldDxEYXRhPjo6dmlzaXRDaGlsZHJlbigKICAgICB2aXNpdG9yLmFwcGVuZFZhbHVlcyhi
aXR3aXNlX2Nhc3Q8V3JpdGVCYXJyaWVyPFVua25vd24+Kj4oJnRoaXNPYmplY3QtPm1fZGF0YSks
IHNpemVvZihEYXRhKSAvIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKTsKIH0KIAotdGVt
cGxhdGUgPHR5cGVuYW1lIEhhc2hNYXBCdWNrZXQ+Ci12b2lkIEhhc2hNYXBJbXBsPEhhc2hNYXBC
dWNrZXQ+Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3Ip
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoTWFwQnVja2V0PgordGVtcGxhdGU8dHlwZW5hbWUgVmlz
aXRvcj4KK3ZvaWQgSGFzaE1hcEltcGw8SGFzaE1hcEJ1Y2tldD46OnZpc2l0Q2hpbGRyZW5JbXBs
KEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBIYXNoTWFwSW1wbCogdGhp
c09iamVjdCA9IGpzQ2FzdDxIYXNoTWFwSW1wbCo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpF
Q1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTY2LDYgKzcxLDggQEAgdm9pZCBI
YXNoTWFwSW1wbDxIYXNoTWFwQnVja2V0Pjo6dmlzaXRDaAogICAgICAgICB2aXNpdG9yLm1hcmtB
dXhpbGlhcnkoYnVmZmVyKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOX1dJVEhfTU9ESUZJ
RVIodGVtcGxhdGU8dHlwZW5hbWUgSGFzaE1hcEJ1Y2tldD4sIEhhc2hNYXBJbXBsPEhhc2hNYXBC
dWNrZXQ+KTsKKwogdGVtcGxhdGUgPHR5cGVuYW1lIEhhc2hNYXBCdWNrZXQ+CiBzaXplX3QgSGFz
aE1hcEltcGw8SGFzaE1hcEJ1Y2tldD46OmVzdGltYXRlZFNpemUoSlNDZWxsKiBjZWxsLCBWTSYg
dm0pCiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9IYXNoTWFwSW1wbC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0hhc2hNYXBJbXBs
LmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0hh
c2hNYXBJbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDE2LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xNDgsNyArMTQ4LDcgQEAgcHVibGljOgog
ICAgICAgICByZXR1cm4gbV9kYXRhLnZhbHVlLmdldCgpOwogICAgIH0KIAotICAgIHN0YXRpYyB2
b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJ
U0lUX0NISUxEUkVOOwogCiAgICAgQUxXQVlTX0lOTElORSBIYXNoTWFwQnVja2V0KiBuZXh0KCkg
Y29uc3QgeyByZXR1cm4gbV9uZXh0LmdldCgpOyB9CiAgICAgQUxXQVlTX0lOTElORSBIYXNoTWFw
QnVja2V0KiBwcmV2KCkgY29uc3QgeyByZXR1cm4gbV9wcmV2LmdldCgpOyB9CkBAIC0zNjQsNyAr
MzY0LDcgQEAgY2xhc3MgSGFzaE1hcEltcGwgOiBwdWJsaWMgSlNOb25GaW5hbE9iagogcHVibGlj
OgogICAgIHVzaW5nIEJ1Y2tldFR5cGUgPSBIYXNoTWFwQnVja2V0VHlwZTsKIAotICAgIHN0YXRp
YyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJF
X1ZJU0lUX0NISUxEUkVOOwogCiAgICAgc3RhdGljIHNpemVfdCBlc3RpbWF0ZWRTaXplKEpTQ2Vs
bCosIFZNJik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGVybmFs
RnVuY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0ludGVybmFsRnVuY3Rpb24uY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9JbnRlcm5hbEZ1bmN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw3ICsxLDcgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDIgSGFycmkgUG9ydGVu
IChwb3J0ZW5Aa2RlLm9yZykKICAqICBDb3B5cmlnaHQgKEMpIDIwMDEgUGV0ZXIgS2VsbHkgKHBt
a0Bwb3N0LmNvbSkKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxOSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDA0LTIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTY0LDcgKzY0LDgg
QEAgdm9pZCBJbnRlcm5hbEZ1bmN0aW9uOjpmaW5pc2hDcmVhdGlvbihWTQogICAgIH0KIH0KIAot
dm9pZCBJbnRlcm5hbEZ1bmN0aW9uOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZp
c2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBJbnRlcm5h
bEZ1bmN0aW9uOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0
b3IpCiB7CiAgICAgSW50ZXJuYWxGdW5jdGlvbiogdGhpc09iamVjdCA9IGpzQ2FzdDxJbnRlcm5h
bEZ1bmN0aW9uKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2Jq
ZWN0LCBpbmZvKCkpOwpAQCAtNzMsNiArNzQsOCBAQCB2b2lkIEludGVybmFsRnVuY3Rpb246OnZp
c2l0Q2hpbGRyZW4oSlNDCiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9vcmlnaW5h
bE5hbWUpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU5fV0lUSF9NT0RJRklFUihKU19FWFBP
UlRfUFJJVkFURSwgSW50ZXJuYWxGdW5jdGlvbik7CisKIGNvbnN0IFN0cmluZyYgSW50ZXJuYWxG
dW5jdGlvbjo6bmFtZSgpCiB7CiAgICAgY29uc3QgU3RyaW5nJiBuYW1lID0gbV9vcmlnaW5hbE5h
bWUtPnRyeUdldFZhbHVlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9J
bnRlcm5hbEZ1bmN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSW50ZXJuYWxGdW5jdGlvbi5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9JbnRlcm5hbEZ1bmN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsNiArMSw2IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAwIEhhcnJpIFBvcnRl
biAocG9ydGVuQGtkZS5vcmcpCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMTkgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwMy0yMDIxIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqICBDb3B5cmlnaHQgKEMpIDIwMDcgQ2FtZXJv
biBad2FyaWNoIChjd3p3YXJpY2hAdXdhdGVybG9vLmNhKQogICogIENvcHlyaWdodCAoQykgMjAw
NyBNYWtzIE9ybG92aWNoCiAgKgpAQCAtNDYsNyArNDYsNyBAQCBwdWJsaWM6CiAKICAgICBERUNM
QVJFX0VYUE9SVF9JTkZPOwogCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgdmlz
aXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJ
TERSRU5fV0lUSF9NT0RJRklFUihKU19FWFBPUlRfUFJJVkFURSk7CiAKICAgICBKU19FWFBPUlRf
UFJJVkFURSBjb25zdCBTdHJpbmcmIG5hbWUoKTsKICAgICBjb25zdCBTdHJpbmcgZGlzcGxheU5h
bWUoVk0mKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxDb2xsYXRv
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bENv
bGxhdG9yLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSW50bENvbGxhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw3ICsxLDcgQEAKIC8q
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQW5keSBWYW5XYWdvbmVyIChhbmR5QHZhbndhZ29uZXIu
ZmFtaWx5KQogICogQ29weXJpZ2h0IChDKSAyMDE1IFN1a29sc2FrIFNha3NodXdvbmcgKHN1a29s
c2FrQGdtYWlsLmNvbSkKLSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIwIEFwcGxlIEluYy4gQWxs
IFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIxIEFwcGxlIEluYy4g
QWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
NjUsNyArNjUsOCBAQCB2b2lkIEludGxDb2xsYXRvcjo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtCiAg
ICAgQVNTRVJUKGluaGVyaXRzKHZtLCBpbmZvKCkpKTsKIH0KIAotdm9pZCBJbnRsQ29sbGF0b3I6
OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBs
YXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEludGxDb2xsYXRvcjo6dmlzaXRDaGlsZHJlbklt
cGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEludGxDb2xsYXRvciog
dGhpc09iamVjdCA9IGpzQ2FzdDxJbnRsQ29sbGF0b3IqPihjZWxsKTsKICAgICBBU1NFUlRfR0Nf
T0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC03NSw2ICs3Niw4IEBAIHZv
aWQgSW50bENvbGxhdG9yOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCoKICAgICB2aXNpdG9yLmFwcGVu
ZCh0aGlzT2JqZWN0LT5tX2JvdW5kQ29tcGFyZSk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJF
TihJbnRsQ29sbGF0b3IpOworCiBWZWN0b3I8U3RyaW5nPiBJbnRsQ29sbGF0b3I6OnNvcnRMb2Nh
bGVEYXRhKGNvbnN0IFN0cmluZyYgbG9jYWxlLCBSZWxldmFudEV4dGVuc2lvbktleSBrZXkpCiB7
CiAgICAgLy8gOS4xIEludGVybmFsIHNsb3RzIG9mIFNlcnZpY2UgQ29uc3RydWN0b3JzICYgMTAu
Mi4zIEludGVybmFsIHNsb3RzIChFQ01BLTQwMiAyLjApCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9JbnRsQ29sbGF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9JbnRsQ29sbGF0b3IuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bENvbGxhdG9yLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDE1IEFuZHkgVmFuV2Fnb25l
ciAoYW5keUB2YW53YWdvbmVyLmZhbWlseSkKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJ
bmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTgwLDcgKzgxLDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBJbnRsQ29sbGF0b3IoVk0m
LCBTdHJ1Y3R1cmUqKTsKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7Ci0gICAgc3RhdGlj
IHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVf
VklTSVRfQ0hJTERSRU47CiAKICAgICBib29sIHVwZGF0ZUNhbkRvQVNDSUlVQ0FEVUNFVENvbXBh
cmlzb24oKSBjb25zdDsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50
bERhdGVUaW1lRm9ybWF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9JbnRsRGF0ZVRpbWVGb3JtYXQuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsRGF0ZVRpbWVGb3JtYXQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxNSBBbmR5IFZh
bldhZ29uZXIgKGFuZHlAdmFud2Fnb25lci5mYW1pbHkpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYt
MjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTkwLDcgKzkwLDggQEAgdm9pZCBJbnRsRGF0ZVRpbWVGb3JtYXQ6
OmZpbmlzaENyZWF0aW9uKAogICAgIEFTU0VSVChpbmhlcml0cyh2bSwgaW5mbygpKSk7CiB9CiAK
LXZvaWQgSW50bERhdGVUaW1lRm9ybWF0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xv
dFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBJbnRs
RGF0ZVRpbWVGb3JtYXQ6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYg
dmlzaXRvcikKIHsKICAgICBJbnRsRGF0ZVRpbWVGb3JtYXQqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8
SW50bERhdGVUaW1lRm9ybWF0Kj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklU
Uyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtMTAwLDYgKzEwMSw4IEBAIHZvaWQgSW50bERhdGVU
aW1lRm9ybWF0Ojp2aXNpdENoaWxkcmVuKEoKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0
LT5tX2JvdW5kRm9ybWF0KTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEludGxEYXRlVGlt
ZUZvcm1hdCk7CisKIHZvaWQgSW50bERhdGVUaW1lRm9ybWF0OjpzZXRCb3VuZEZvcm1hdChWTSYg
dm0sIEpTQm91bmRGdW5jdGlvbiogZm9ybWF0KQogewogICAgIG1fYm91bmRGb3JtYXQuc2V0KHZt
LCB0aGlzLCBmb3JtYXQpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50
bERhdGVUaW1lRm9ybWF0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSW50bERhdGVUaW1lRm9ybWF0LmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxEYXRlVGltZUZvcm1hdC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxNSBBbmR5IFZhbldhZ29u
ZXIgKGFuZHlAdmFud2Fnb25lci5mYW1pbHkpCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC04NSw3ICs4Niw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgSW50bERhdGVUaW1lRm9y
bWF0KFZNJiwgU3RydWN0dXJlKik7CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOwotICAg
IHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBE
RUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgc3RhdGljIFZlY3RvcjxTdHJpbmc+IGxvY2Fs
ZURhdGEoY29uc3QgU3RyaW5nJiwgUmVsZXZhbnRFeHRlbnNpb25LZXkpOwogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTG9jYWxlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTG9jYWxlLmNwcAkocmV2aXNpb24gMjcy
ODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bExvY2FsZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDIwIFNv
bnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC01OCw3ICs1OSw4IEBAIHZvaWQgSW50bExvY2FsZTo6ZmluaXNoQ3JlYXRpb24o
Vk0mIHZtKQogICAgIEFTU0VSVChpbmhlcml0cyh2bSwgaW5mbygpKSk7CiB9CiAKLXZvaWQgSW50
bExvY2FsZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9y
KQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSW50bExvY2FsZTo6dmlzaXRDaGls
ZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGF1dG8qIHRo
aXNPYmplY3QgPSBqc0Nhc3Q8SW50bExvY2FsZSo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpF
Q1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTY2LDYgKzY4LDggQEAgdm9pZCBJ
bnRsTG9jYWxlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogYwogICAgIEJhc2U6OnZpc2l0Q2hpbGRy
ZW4odGhpc09iamVjdCwgdmlzaXRvcik7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihJbnRs
TG9jYWxlKTsKKwogY2xhc3MgTG9jYWxlSURCdWlsZGVyIGZpbmFsIHsKIHB1YmxpYzoKICAgICBi
b29sIGluaXRpYWxpemUoY29uc3QgU3RyaW5nJik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9JbnRsTG9jYWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSW50bExvY2FsZS5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTG9jYWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDIwIFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0
YWlubWVudCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03MSw3ICs3Miw3
IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgSW50bExvY2FsZShWTSYsIFN0cnVjdHVyZSopOwog
ICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxk
cmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsK
IAogICAgIFN0cmluZyBrZXl3b3JkVmFsdWUoQVNDSUlMaXRlcmFsLCBib29sIGlzQm9vbGVhbiA9
IGZhbHNlKSBjb25zdDsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50
bE51bWJlckZvcm1hdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSW50bE51bWJlckZvcm1hdC5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxOdW1iZXJGb3JtYXQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxNSBBbmR5IFZhbldhZ29u
ZXIgKGFuZHlAdmFud2Fnb25lci5mYW1pbHkpCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTYgU3Vrb2xz
YWsgU2Frc2h1d29uZyAoc3Vrb2xzYWtAZ21haWwuY29tKQotICogQ29weXJpZ2h0IChDKSAyMDE2
LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChD
KSAyMDIwIFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CkBAIC03Myw3ICs3Myw4IEBAIHZvaWQgSW50bE51bWJlckZvcm1hdDo6ZmluaXNoQ3JlYXRp
b24oVk0KICAgICBBU1NFUlQoaW5oZXJpdHModm0sIGluZm8oKSkpOwogfQogCi12b2lkIEludGxO
dW1iZXJGb3JtYXQ6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlz
aXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEludGxOdW1iZXJGb3JtYXQ6
OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAg
ICBJbnRsTnVtYmVyRm9ybWF0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEludGxOdW1iZXJGb3JtYXQq
PihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8o
KSk7CkBAIC04Myw2ICs4NCw4IEBAIHZvaWQgSW50bE51bWJlckZvcm1hdDo6dmlzaXRDaGlsZHJl
bihKU0MKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2JvdW5kRm9ybWF0KTsKIH0K
IAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEludGxOdW1iZXJGb3JtYXQpOworCiBWZWN0b3I8U3Ry
aW5nPiBJbnRsTnVtYmVyRm9ybWF0Ojpsb2NhbGVEYXRhKGNvbnN0IFN0cmluZyYgbG9jYWxlLCBS
ZWxldmFudEV4dGVuc2lvbktleSBrZXkpCiB7CiAgICAgLy8gOS4xIEludGVybmFsIHNsb3RzIG9m
IFNlcnZpY2UgQ29uc3RydWN0b3JzICYgMTEuMi4zIEludGVybmFsIHNsb3RzIChFQ01BLTQwMiAy
LjApCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTnVtYmVyRm9ybWF0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE51bWJl
ckZvcm1hdC5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9JbnRsTnVtYmVyRm9ybWF0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw3IEBACiAv
KgogICogQ29weXJpZ2h0IChDKSAyMDE1IEFuZHkgVmFuV2Fnb25lciAoYW5keUB2YW53YWdvbmVy
LmZhbWlseSkKICAqIENvcHlyaWdodCAoQykgMjAyMCBTb255IEludGVyYWN0aXZlIEVudGVydGFp
bm1lbnQgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtOTYsNyArOTcsNyBA
QCBwdWJsaWM6CiBwcml2YXRlOgogICAgIEludGxOdW1iZXJGb3JtYXQoVk0mLCBTdHJ1Y3R1cmUq
KTsKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRD
aGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERS
RU47CiAKICAgICBzdGF0aWMgVmVjdG9yPFN0cmluZz4gbG9jYWxlRGF0YShjb25zdCBTdHJpbmcm
LCBSZWxldmFudEV4dGVuc2lvbktleSk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0ludGxQbHVyYWxSdWxlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSW50bFBsdXJhbFJ1bGVzLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFBsdXJhbFJ1bGVzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTggQW5keSBW
YW5XYWdvbmVyIChhbmR5QHZhbndhZ29uZXIuZmFtaWx5KQotICogQ29weXJpZ2h0IChDKSAyMDE5
LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE5LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC02MSw3ICs2MSw4IEBAIHZvaWQgSW50bFBsdXJhbFJ1bGVzOjpm
aW5pc2hDcmVhdGlvbihWTSYKICAgICBBU1NFUlQoaW5oZXJpdHModm0sIGluZm8oKSkpOwogfQog
Ci12b2lkIEludGxQbHVyYWxSdWxlczo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSW50bFBs
dXJhbFJ1bGVzOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0
b3IpCiB7CiAgICAgSW50bFBsdXJhbFJ1bGVzKiB0aGlzT2JqZWN0ID0ganNDYXN0PEludGxQbHVy
YWxSdWxlcyo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVj
dCwgaW5mbygpKTsKQEAgLTY5LDYgKzcwLDggQEAgdm9pZCBJbnRsUGx1cmFsUnVsZXM6OnZpc2l0
Q2hpbGRyZW4oSlNDZQogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRv
cik7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihJbnRsUGx1cmFsUnVsZXMpOworCiBWZWN0
b3I8U3RyaW5nPiBJbnRsUGx1cmFsUnVsZXM6OmxvY2FsZURhdGEoY29uc3QgU3RyaW5nJiwgUmVs
ZXZhbnRFeHRlbnNpb25LZXkpCiB7CiAgICAgcmV0dXJuIHsgfTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0ludGxQbHVyYWxSdWxlcy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxQbHVyYWxSdWxlcy5oCShyZXZpc2lvbiAyNzI4
MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsUGx1cmFsUnVsZXMuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTgg
QW5keSBWYW5XYWdvbmVyIChhbmR5QHZhbndhZ29uZXIuZmFtaWx5KQorICogQ29weXJpZ2h0IChD
KSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtNjYsNyArNjcsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIElu
dGxQbHVyYWxSdWxlcyhWTSYsIFN0cnVjdHVyZSopOwogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24o
Vk0mKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9y
Jik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIHN0YXRpYyBWZWN0b3I8U3Ry
aW5nPiBsb2NhbGVEYXRhKGNvbnN0IFN0cmluZyYsIFJlbGV2YW50RXh0ZW5zaW9uS2V5KTsKIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFJlbGF0aXZlVGltZUZvcm1h
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFJl
bGF0aXZlVGltZUZvcm1hdC5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0ludGxSZWxhdGl2ZVRpbWVGb3JtYXQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAyMCBTb255IEludGVyYWN0
aXZlIEVudGVydGFpbm1lbnQgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
NjIsNyArNjMsOCBAQCB2b2lkIEludGxSZWxhdGl2ZVRpbWVGb3JtYXQ6OmZpbmlzaENyZWF0CiAg
ICAgQVNTRVJUKGluaGVyaXRzKHZtLCBpbmZvKCkpKTsKIH0KIAotdm9pZCBJbnRsUmVsYXRpdmVU
aW1lRm9ybWF0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0
b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBJbnRsUmVsYXRpdmVUaW1lRm9y
bWF0Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7
CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxJbnRsUmVsYXRpdmVUaW1lRm9ybWF0Kj4o
Y2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkp
OwpAQCAtNzAsNiArNzIsOCBAQCB2b2lkIEludGxSZWxhdGl2ZVRpbWVGb3JtYXQ6OnZpc2l0Q2hp
bGRyCiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKIH0KIAor
REVGSU5FX1ZJU0lUX0NISUxEUkVOKEludGxSZWxhdGl2ZVRpbWVGb3JtYXQpOworCiBWZWN0b3I8
U3RyaW5nPiBJbnRsUmVsYXRpdmVUaW1lRm9ybWF0Ojpsb2NhbGVEYXRhKGNvbnN0IFN0cmluZyYg
bG9jYWxlLCBSZWxldmFudEV4dGVuc2lvbktleSBrZXkpCiB7CiAgICAgQVNTRVJUX1VOVVNFRChr
ZXksIGtleSA9PSBSZWxldmFudEV4dGVuc2lvbktleTo6TnUpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSW50bFJlbGF0aXZlVGltZUZvcm1hdC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxSZWxhdGl2ZVRpbWVGb3JtYXQuaAko
cmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFJl
bGF0aXZlVGltZUZvcm1hdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAq
IENvcHlyaWdodCAoQykgMjAyMCBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgot
ICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAyMC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjQsNyArNjQsNyBAQCBwdWJsaWM6
CiBwcml2YXRlOgogICAgIEludGxSZWxhdGl2ZVRpbWVGb3JtYXQoVk0mLCBTdHJ1Y3R1cmUqKTsK
ICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGls
ZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47
CiAKICAgICBzdGF0aWMgVmVjdG9yPFN0cmluZz4gbG9jYWxlRGF0YShjb25zdCBTdHJpbmcmLCBS
ZWxldmFudEV4dGVuc2lvbktleSk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0ludGxTZWdtZW50SXRlcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0ludGxTZWdtZW50SXRlcmF0b3IuY3BwCShyZXZpc2lvbiAyNzI4MzAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsU2VnbWVudEl0ZXJhdG9yLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIw
MjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtNjQsMTMgKzY1LDE2IEBAIHZvaWQgSW50bFNlZ21lbnRJdGVyYXRvcjo6Zmlu
aXNoQ3JlYXRpb24KICAgICBtX3N0cmluZy5zZXQodm0sIHRoaXMsIHN0cmluZyk7CiB9CiAKLXZv
aWQgSW50bFNlZ21lbnRJdGVyYXRvcjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSW50bFNl
Z21lbnRJdGVyYXRvcjo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2
aXNpdG9yKQogewogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SW50bFNlZ21lbnRJdGVy
YXRvcio+KGNlbGwpOwogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRv
cik7CiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9zdHJpbmcpOwogfQogCitERUZJ
TkVfVklTSVRfQ0hJTERSRU4oSW50bFNlZ21lbnRJdGVyYXRvcik7CisKIEpTT2JqZWN0KiBJbnRs
U2VnbWVudEl0ZXJhdG9yOjpuZXh0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCiB7CiAg
ICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSW50bFNlZ21lbnRJdGVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxTZWdtZW50SXRlcmF0b3IuaAkocmV2aXNpb24gMjcy
ODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFNlZ21lbnRJdGVyYXRv
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykg
MjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC01Myw3ICs1NCw3IEBAIHB1YmxpYzoKIAogICAgIEpTT2JqZWN0KiBuZXh0
KEpTR2xvYmFsT2JqZWN0Kik7CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2Vs
bCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogcHJpdmF0
ZToKICAgICBJbnRsU2VnbWVudEl0ZXJhdG9yKFZNJiwgU3RydWN0dXJlKiwgc3RkOjp1bmlxdWVf
cHRyPFVCcmVha0l0ZXJhdG9yLCBVQnJlYWtJdGVyYXRvckRlbGV0ZXI+JiYsIEJveDxWZWN0b3I8
VUNoYXI+PiYmLCBJbnRsU2VnbWVudGVyOjpHcmFudWxhcml0eSk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9JbnRsU2VnbWVudHMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxTZWdtZW50cy5jcHAJKHJldmlzaW9uIDI3Mjgz
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxTZWdtZW50cy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDIwIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTEwOSwxMSArMTEwLDE0IEBAIEpTT2JqZWN0KiBJbnRsU2VnbWVudHM6OmNyZWF0ZVNl
Z21lbnRJdGUKICAgICByZXR1cm4gSW50bFNlZ21lbnRJdGVyYXRvcjo6Y3JlYXRlKHZtLCBnbG9i
YWxPYmplY3QtPnNlZ21lbnRJdGVyYXRvclN0cnVjdHVyZSgpLCBXVEZNb3ZlKHNlZ21lbnRlciks
IG1fYnVmZmVyLCBtX3N0cmluZy5nZXQoKSwgbV9ncmFudWxhcml0eSk7CiB9CiAKLXZvaWQgSW50
bFNlZ21lbnRzOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0
b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBJbnRsU2VnbWVudHM6OnZpc2l0
Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBhdXRv
KiB0aGlzT2JqZWN0ID0ganNDYXN0PEludGxTZWdtZW50cyo+KGNlbGwpOwogICAgIEJhc2U6OnZp
c2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CiAgICAgdmlzaXRvci5hcHBlbmQodGhp
c09iamVjdC0+bV9zdHJpbmcpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSW50bFNlZ21l
bnRzKTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9JbnRsU2VnbWVudHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9JbnRsU2VnbWVudHMuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFNlZ21lbnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU0LDcgKzU1LDcg
QEAgcHVibGljOgogICAgIEpTVmFsdWUgY29udGFpbmluZyhKU0dsb2JhbE9iamVjdCosIEpTVmFs
dWUgaW5kZXhWYWx1ZSk7CiAgICAgSlNPYmplY3QqIGNyZWF0ZVNlZ21lbnRJdGVyYXRvcihKU0ds
b2JhbE9iamVjdCopOwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBT
bG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKIHByaXZhdGU6CiAg
ICAgSW50bFNlZ21lbnRzKFZNJiwgU3RydWN0dXJlKiwgc3RkOjp1bmlxdWVfcHRyPFVCcmVha0l0
ZXJhdG9yLCBVQnJlYWtJdGVyYXRvckRlbGV0ZXI+JiYsIEJveDxWZWN0b3I8VUNoYXI+PiYmLCBJ
bnRsU2VnbWVudGVyOjpHcmFudWxhcml0eSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuY3BwCShyZXZpc2lvbiAyNzI4MzAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC0xNTUsNyArMTU1LDggQEAgdm9pZCBKU0FycmF5QnVmZmVyVmll
dzo6ZmluaXNoQ3JlYXRpb24oVgogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9
CiAKLXZvaWQgSlNBcnJheUJ1ZmZlclZpZXc6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBT
bG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpT
QXJyYXlCdWZmZXJWaWV3Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3Im
IHZpc2l0b3IpCiB7CiAgICAgSlNBcnJheUJ1ZmZlclZpZXcqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8
SlNBcnJheUJ1ZmZlclZpZXcqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRT
KHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC0xNjksNiArMTcwLDggQEAgdm9pZCBKU0FycmF5QnVm
ZmVyVmlldzo6dmlzaXRDaGlsZHJlbihKUwogICAgIH0KIH0KIAorREVGSU5FX1ZJU0lUX0NISUxE
UkVOKEpTQXJyYXlCdWZmZXJWaWV3KTsKKwogYm9vbCBKU0FycmF5QnVmZmVyVmlldzo6cHV0KAog
ICAgIEpTQ2VsbCogY2VsbCwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUHJvcGVydHlO
YW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwKICAgICBQdXRQcm9wZXJ0eVNsb3QmIHNs
b3QpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyVmll
dy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlC
dWZmZXJWaWV3LmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xNzIsNyArMTcy
LDcgQEAgcHJvdGVjdGVkOgogICAgIAogICAgIHN0YXRpYyBib29sIHB1dChKU0NlbGwqLCBKU0ds
b2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgUHV0UHJvcGVydHlTbG90Jik7CiAK
LSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7Cisg
ICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKICAgICAKIHB1YmxpYzoKICAgICBUeXBlZEFycmF5
TW9kZSBtb2RlKCkgY29uc3QgeyByZXR1cm4gbV9tb2RlOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0FycmF5SXRlcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlJdGVyYXRvci5jcHAJKHJldmlzaW9uIDI3
MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlJdGVyYXRvci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAy
MC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtNjgsMTEgKzY4LDE0IEBAIHZvaWQgSlNBcnJheUl0ZXJhdG9yOjpm
aW5pc2hDcmVhdGlvbihWTSYKICAgICAgICAgQmFzZTo6aW50ZXJuYWxGaWVsZChpbmRleCkuc2V0
KHZtLCB0aGlzLCB2YWx1ZXNbaW5kZXhdKTsKIH0KIAotdm9pZCBKU0FycmF5SXRlcmF0b3I6OnZp
c2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRl
PHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTQXJyYXlJdGVyYXRvcjo6dmlzaXRDaGlsZHJlbklt
cGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGF1dG8qIHRoaXNPYmpl
Y3QgPSBqc0Nhc3Q8SlNBcnJheUl0ZXJhdG9yKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVD
VF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4o
dGhpc09iamVjdCwgdmlzaXRvcik7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU0FycmF5
SXRlcmF0b3IpOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTQXJyYXlJdGVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlJdGVyYXRvci5oCShyZXZpc2lvbiAyNzI4MzApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5SXRlcmF0b3IuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIwLTIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC03OCw3ICs3OCw3IEBAIHB1YmxpYzoKIAogICAgIERFQ0xBUkVfSU5GTzsKIAotICAg
IHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBE
RUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiBwcml2YXRlOgogICAgIEpTQXJyYXlJdGVyYXRvcihW
TSYsIFN0cnVjdHVyZSopOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNB
c3luY0dlbmVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNBc3luY0dlbmVyYXRvci5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXN5bmNHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTU5LDExICs1OSwxNCBAQCB2b2lkIEpTQXN5bmNHZW5lcmF0b3I6OmZpbmlzaENyZWF0aW9uKFZN
CiAgICAgICAgIGludGVybmFsRmllbGQoaW5kZXgpLnNldCh2bSwgdGhpcywgdmFsdWVzW2luZGV4
XSk7CiB9CiAKLXZvaWQgSlNBc3luY0dlbmVyYXRvcjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNl
bGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3Zv
aWQgSlNBc3luY0dlbmVyYXRvcjo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNp
dG9yJiB2aXNpdG9yKQogewogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNBc3luY0dl
bmVyYXRvcio+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVj
dCwgaW5mbygpKTsKICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3Ip
OwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNBc3luY0dlbmVyYXRvcik7CisKIH0gLy8g
bmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBc3lu
Y0dlbmVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTQXN5bmNHZW5lcmF0b3IuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNBc3luY0dlbmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTk1LDcgKzk1
LDcgQEAgcHVibGljOgogCiAgICAgREVDTEFSRV9FWFBPUlRfSU5GTzsKIAotICAgIHN0YXRpYyB2
b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJ
U0lUX0NISUxEUkVOOwogCiBwcml2YXRlOgogICAgIEpTQXN5bmNHZW5lcmF0b3IoVk0mLCBTdHJ1
Y3R1cmUqKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQmlnSW50LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JpZ0ludC5j
cHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
QmlnSW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmln
aHQgKEMpIDIwMTcgQ2FpbyBMaW1hIDx0aWNhaW9saW1hQGdtYWlsLmNvbT4KLSAqIENvcHlyaWdo
dCAoQykgMjAxNy0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjcsNyArNjcsOCBAQCBKU0JpZ0ludDo6SlNC
aWdJbnQoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0CiAgICAgLCBtX2RhdGEodm0sIHRoaXMsIGRhdGEs
IGxlbmd0aCkKIHsgfQogCi12b2lkIEpTQmlnSW50Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2Vs
bCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9p
ZCBKU0JpZ0ludDo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNp
dG9yKQogewogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNCaWdJbnQqPihjZWxsKTsK
ICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC03
Niw2ICs3Nyw4IEBAIHZvaWQgSlNCaWdJbnQ6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWwKICAg
ICAgICAgdmlzaXRvci5tYXJrQXV4aWxpYXJ5KGRhdGEpOwogfQogCitERUZJTkVfVklTSVRfQ0hJ
TERSRU4oSlNCaWdJbnQpOworCiB2b2lkIEpTQmlnSW50Ojppbml0aWFsaXplKEluaXRpYWxpemF0
aW9uVHlwZSBpbml0VHlwZSkKIHsKICAgICBpZiAoaW5pdFR5cGUgPT0gSW5pdGlhbGl6YXRpb25U
eXBlOjpXaXRoWmVybykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQmln
SW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCaWdJ
bnQuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNCaWdJbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmln
aHQgKEMpIDIwMTcgQ2FpbyBMaW1hIDx0aWNhaW9saW1hQGdtYWlsLmNvbT4KLSAqIENvcHlyaWdo
dCAoQykgMjAxOS0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxOS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTAsNyArNTAsNyBAQCBwdWJsaWM6CiAgICAg
c3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVy
ZUZsYWdzIHwgU3RydWN0dXJlSXNJbW1vcnRhbCB8IE92ZXJyaWRlc1RvVGhpczsKICAgICBmcmll
bmQgY2xhc3MgQ2FjaGVkQmlnSW50OwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihK
U0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3M+CiAgICAgc3RhdGlj
IElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0JvdW5kRnVuY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQm91bmRGdW5jdGlvbi5jcHAJKHJldmlzaW9uIDI3Mjgz
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQm91bmRGdW5jdGlvbi5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEx
LCAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDExLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNDksNyArMjQ5LDggQEAgdm9pZCBKU0JvdW5kRnVu
Y3Rpb246OmZpbmlzaENyZWF0aW9uKFZNJgogICAgIEFTU0VSVChpbmhlcml0cyh2bSwgaW5mbygp
KSk7CiB9CiAKLXZvaWQgSlNCb3VuZEZ1bmN0aW9uOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2Vs
bCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9p
ZCBKU0JvdW5kRnVuY3Rpb246OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRv
ciYgdmlzaXRvcikKIHsKICAgICBKU0JvdW5kRnVuY3Rpb24qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8
SlNCb3VuZEZ1bmN0aW9uKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0
aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtMjYxLDQgKzI2Miw2IEBAIHZvaWQgSlNCb3VuZEZ1bmN0
aW9uOjp2aXNpdENoaWxkcmVuKEpTQ2UKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5t
X25hbWVNYXlCZU51bGwpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNCb3VuZEZ1bmN0
aW9uKTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0JvdW5kRnVuY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0JvdW5kRnVuY3Rpb24uaAkocmV2aXNpb24gMjcyODMwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCb3VuZEZ1bmN0aW9uLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTggQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC04NCw3ICs4NCw3IEBAIHByaXZhdGU6CiAgICAgSlNCb3VuZEZ1bmN0aW9uKFZNJiwg
TmF0aXZlRXhlY3V0YWJsZSosIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKiwgSlNPYmplY3Qq
IHRhcmdldEZ1bmN0aW9uLCBKU1ZhbHVlIGJvdW5kVGhpcywgSlNJbW11dGFibGVCdXR0ZXJmbHkq
IGJvdW5kQXJncywgSlNTdHJpbmcqIG5hbWVNYXlCZU51bGwsIGRvdWJsZSBsZW5ndGgpOwogCiAg
ICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOwotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwog
CiAgICAgV3JpdGVCYXJyaWVyPEpTT2JqZWN0PiBtX3RhcmdldEZ1bmN0aW9uOwogICAgIFdyaXRl
QmFycmllcjxVbmtub3duPiBtX2JvdW5kVGhpczsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQ2FsbGVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0NhbGxlZS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTQ2FsbGVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01MCw3
ICs1MCw4IEBAIHZvaWQgSlNDYWxsZWU6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKICAgICBBU1NF
UlQoaW5oZXJpdHModm0sIGluZm8oKSkpOwogfQogCi12b2lkIEpTQ2FsbGVlOjp2aXNpdENoaWxk
cmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBWaXNpdG9yPgordm9pZCBKU0NhbGxlZTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxs
LCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTQ2FsbGVlKiB0aGlzT2JqZWN0ID0ganNDYXN0
PEpTQ2FsbGVlKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2Jq
ZWN0LCBpbmZvKCkpOwpAQCAtNTksNCArNjAsNiBAQCB2b2lkIEpTQ2FsbGVlOjp2aXNpdENoaWxk
cmVuKEpTQ2VsbCogY2VsCiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9zY29wZSk7
CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU0NhbGxlZSk7CisKIH0gLy8gbmFtZXNwYWNl
IEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDYWxsZWUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NhbGxlZS5oCShyZXZp
c2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NhbGxlZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
NCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQt
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTEwMCw3ICsxMDAsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBmaW5p
c2hDcmVhdGlvbihWTSYpOwogICAgIHVzaW5nIEJhc2U6OmZpbmlzaENyZWF0aW9uOwogCi0gICAg
c3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERF
Q0xBUkVfVklTSVRfQ0hJTERSRU47CiAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIExMSW50
T2Zmc2V0c0V4dHJhY3RvcjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
Q2VsbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2Vs
bC5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0NlbGwuaAkod29ya2luZyBjb3B5KQpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiAgQ29weXJpZ2h0
IChDKSAxOTk5LTIwMDEgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKICAqICBDb3B5cmln
aHQgKEMpIDIwMDEgUGV0ZXIgS2VsbHkgKHBta0Bwb3N0LmNvbSkKLSAqICBDb3B5cmlnaHQgKEMp
IDIwMDMtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0
IChDKSAyMDAzLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJKU0xvY2suaCIKICNpbmNs
dWRlICJKU1R5cGVJbmZvLmgiCiAjaW5jbHVkZSAiU2xvdFZpc2l0b3IuaCIKKyNpbmNsdWRlICJT
bG90VmlzaXRvck1hY3Jvcy5oIgogI2luY2x1ZGUgIlN1YnNwYWNlQWNjZXNzLmgiCiAjaW5jbHVk
ZSAiVHlwZWRBcnJheVR5cGUuaCIKICNpbmNsdWRlICJXcml0ZUJhcnJpZXIuaCIKQEAgLTE2Nyw4
ICsxNjgsOCBAQCBwdWJsaWM6CiAgICAgc2l6ZV90IGVzdGltYXRlZFNpemVJbkJ5dGVzKFZNJikg
Y29uc3Q7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHNpemVfdCBlc3RpbWF0ZWRTaXpl
KEpTQ2VsbCosIFZNJik7CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCos
IFNsb3RWaXNpdG9yJik7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRPdXRwdXRDb25zdHJhaW50cyhK
U0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU5fV0lUSF9N
T0RJRklFUihpbmxpbmUpOworICAgIHN0YXRpYyB2b2lkIHZpc2l0T3V0cHV0Q29uc3RyYWludHMo
SlNDZWxsKiwgQWJzdHJhY3RTbG90VmlzaXRvciYpOwogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUg
c3RhdGljIHZvaWQgYW5hbHl6ZUhlYXAoSlNDZWxsKiwgSGVhcEFuYWx5emVyJik7CiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbElubGluZXMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGxJbmxpbmVzLmgJKHJldmlz
aW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbElubGlu
ZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTItMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTItMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI1LDYgKzI1LDcgQEAKIAogI3ByYWdtYSBvbmNlCiAK
KyNpbmNsdWRlICJBYnN0cmFjdFNsb3RWaXNpdG9ySW5saW5lcy5oIgogI2luY2x1ZGUgIkFsbG9j
YXRvckZvck1vZGUuaCIKICNpbmNsdWRlICJBbGxvY2F0b3JJbmxpbmVzLmgiCiAjaW5jbHVkZSAi
Q29tcGxldGVTdWJzcGFjZUlubGluZXMuaCIKQEAgLTE0MSwxMiArMTQyLDE1IEBAIEFMV0FZU19J
TkxJTkUgU3RydWN0dXJlKiBKU0NlbGw6OnN0cnVjdHUKICAgICByZXR1cm4gdm0uZ2V0U3RydWN0
dXJlKG1fc3RydWN0dXJlSUQpOwogfQogCi1pbmxpbmUgdm9pZCBKU0NlbGw6OnZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1l
IFZpc2l0b3I+Cit2b2lkIEpTQ2VsbDo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBW
aXNpdG9yJiB2aXNpdG9yKQogewogICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQoY2VsbC0+
c3RydWN0dXJlKHZpc2l0b3Iudm0oKSkpOwogfQogCi1pbmxpbmUgdm9pZCBKU0NlbGw6OnZpc2l0
T3V0cHV0Q29uc3RyYWludHMoSlNDZWxsKiwgU2xvdFZpc2l0b3ImKQorREVGSU5FX1ZJU0lUX0NI
SUxEUkVOX1dJVEhfTU9ESUZJRVIoaW5saW5lLCBKU0NlbGwpOworCitpbmxpbmUgdm9pZCBKU0Nl
bGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHMoSlNDZWxsKiwgQWJzdHJhY3RTbG90VmlzaXRvciYp
CiB7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ3VzdG9tR2V0
dGVyU2V0dGVyRnVuY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQ3VzdG9tR2V0dGVyU2V0dGVyRnVuY3Rpb24uY3BwCShyZXZpc2lvbiAyNzI4
MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0N1c3RvbUdldHRlclNldHRl
ckZ1bmN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTUsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE1LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC04NSw3ICs4NSw4IEBAIEpTQ3VzdG9t
R2V0dGVyU2V0dGVyRnVuY3Rpb24qIEpTQ3VzdG9tR2UKICAgICByZXR1cm4gZnVuY3Rpb247CiB9
CiAKLXZvaWQgSlNDdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbjo6dmlzaXRDaGlsZHJlbihKU0Nl
bGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRv
cj4KK3ZvaWQgSlNDdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbjo6dmlzaXRDaGlsZHJlbkltcGwo
SlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTQ3VzdG9tR2V0dGVyU2V0
dGVyRnVuY3Rpb24qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNDdXN0b21HZXR0ZXJTZXR0ZXJGdW5j
dGlvbio+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwg
aW5mbygpKTsKQEAgLTk0LDYgKzk1LDggQEAgdm9pZCBKU0N1c3RvbUdldHRlclNldHRlckZ1bmN0
aW9uOjp2aXNpdAogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fZ2V0dGVyU2V0dGVy
KTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTQ3VzdG9tR2V0dGVyU2V0dGVyRnVuY3Rp
b24pOworCiB2b2lkIEpTQ3VzdG9tR2V0dGVyU2V0dGVyRnVuY3Rpb246OmZpbmlzaENyZWF0aW9u
KFZNJiB2bSwgTmF0aXZlRXhlY3V0YWJsZSogZXhlY3V0YWJsZSwgQ3VzdG9tR2V0dGVyU2V0dGVy
KiBnZXR0ZXJTZXR0ZXIsIGNvbnN0IFN0cmluZyYgbmFtZSkKIHsKICAgICBCYXNlOjpmaW5pc2hD
cmVhdGlvbih2bSwgZXhlY3V0YWJsZSwgaXNTZXR0ZXIoKSwgbmFtZSk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0N1c3RvbUdldHRlclNldHRlckZ1bmN0aW9uLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDdXN0b21HZXR0ZXJT
ZXR0ZXJGdW5jdGlvbi5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0N1c3RvbUdldHRlclNldHRlckZ1bmN0aW9uLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTkgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC02Myw3ICs2Myw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgSlNDdXN0b21HZXR0ZXJT
ZXR0ZXJGdW5jdGlvbihWTSYsIE5hdGl2ZUV4ZWN1dGFibGUqLCBKU0dsb2JhbE9iamVjdCosIFN0
cnVjdHVyZSosIFR5cGUsIGNvbnN0IFByb3BlcnR5TmFtZSYpOwogICAgIHZvaWQgZmluaXNoQ3Jl
YXRpb24oVk0mLCBOYXRpdmVFeGVjdXRhYmxlKiwgQ3VzdG9tR2V0dGVyU2V0dGVyKiwgY29uc3Qg
U3RyaW5nJik7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90Vmlz
aXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBXcml0ZUJhcnJpZXI8
Q3VzdG9tR2V0dGVyU2V0dGVyPiBtX2dldHRlclNldHRlcjsKICAgICBUeXBlIG1fdHlwZTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRmluYWxpemF0aW9uUmVnaXN0cnku
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRmluYWxp
emF0aW9uUmVnaXN0cnkuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0ZpbmFsaXphdGlvblJlZ2lzdHJ5LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUsIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMC0yMDIxIEFwcGxlLCBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJKU0ZpbmFsaXph
dGlvblJlZ2lzdHJ5LmgiCiAKKyNpbmNsdWRlICJBYnN0cmFjdFNsb3RWaXNpdG9yLmgiCiAjaW5j
bHVkZSAiRGVmZXJyZWRXb3JrVGltZXIuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5j
bHVkZSAiSlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbElubGluZXMuaCIKQEAgLTYwLDcgKzYxLDgg
QEAgdm9pZCBKU0ZpbmFsaXphdGlvblJlZ2lzdHJ5OjpmaW5pc2hDcmVhdAogICAgIGdsb2JhbE9i
amVjdC0+Z2xvYmFsT2JqZWN0TWV0aG9kVGFibGUoKS0+Y3VycmVudFNjcmlwdEV4ZWN1dGlvbk93
bmVyKGdsb2JhbE9iamVjdCk7CiB9CiAKLXZvaWQgSlNGaW5hbGl6YXRpb25SZWdpc3RyeTo6dmlz
aXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8
dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNGaW5hbGl6YXRpb25SZWdpc3RyeTo6dmlzaXRDaGls
ZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEJhc2U6OnZp
c2l0Q2hpbGRyZW4oY2VsbCwgdmlzaXRvcik7CiAKQEAgLTgwLDEzICs4MiwxNSBAQCB2b2lkIEpT
RmluYWxpemF0aW9uUmVnaXN0cnk6OnZpc2l0Q2hpbGRyCiAgICAgZm9yIChhdXRvJiBob2xkaW5n
cyA6IHRoaXNPYmplY3QtPm1fbm9VbnJlZ2lzdHJhdGlvbkRlYWQpCiAgICAgICAgIHZpc2l0b3Iu
YXBwZW5kKGhvbGRpbmdzKTsKIAotICAgIHNpemVfdCB0b3RhbEJ1ZmZlclNpemVzSW5CeXRlcyA9
IHRoaXNPYmplY3QtPm1fZGVhZFJlZ2lzdHJhdGlvbnMuY2FwYWNpdHkoKSAqIHNpemVvZihkZWNs
dHlwZSh0aGlzT2JqZWN0LT5tX2RlYWRSZWdpc3RyYXRpb25zKTo6S2V5VmFsdWVQYWlyVHlwZSk7
Ci0gICAgdG90YWxCdWZmZXJTaXplc0luQnl0ZXMgKz0gdGhpc09iamVjdC0+bV9saXZlUmVnaXN0
cmF0aW9ucy5jYXBhY2l0eSgpICogc2l6ZW9mKGRlY2x0eXBlKHRoaXNPYmplY3QtPm1fZGVhZFJl
Z2lzdHJhdGlvbnMpOjpLZXlWYWx1ZVBhaXJUeXBlKTsKKyAgICBzaXplX3QgdG90YWxCdWZmZXJT
aXplc0luQnl0ZXMgPSB0aGlzT2JqZWN0LT5tX2RlYWRSZWdpc3RyYXRpb25zLmNhcGFjaXR5KCkg
KiBzaXplb2YodHlwZW5hbWUgZGVjbHR5cGUodGhpc09iamVjdC0+bV9kZWFkUmVnaXN0cmF0aW9u
cyk6OktleVZhbHVlUGFpclR5cGUpOworICAgIHRvdGFsQnVmZmVyU2l6ZXNJbkJ5dGVzICs9IHRo
aXNPYmplY3QtPm1fbGl2ZVJlZ2lzdHJhdGlvbnMuY2FwYWNpdHkoKSAqIHNpemVvZih0eXBlbmFt
ZSBkZWNsdHlwZSh0aGlzT2JqZWN0LT5tX2RlYWRSZWdpc3RyYXRpb25zKTo6S2V5VmFsdWVQYWly
VHlwZSk7CiAgICAgdG90YWxCdWZmZXJTaXplc0luQnl0ZXMgKz0gdGhpc09iamVjdC0+bV9ub1Vu
cmVnaXN0cmF0aW9uTGl2ZS5jYXBhY2l0eSgpICogc2l6ZW9mKGRlY2x0eXBlKHRoaXNPYmplY3Qt
Pm1fbm9VbnJlZ2lzdHJhdGlvbkxpdmUudGFrZUxhc3QoKSkpOwogICAgIHRvdGFsQnVmZmVyU2l6
ZXNJbkJ5dGVzICs9IHRoaXNPYmplY3QtPm1fbm9VbnJlZ2lzdHJhdGlvbkRlYWQuY2FwYWNpdHko
KSAqIHNpemVvZihkZWNsdHlwZSh0aGlzT2JqZWN0LT5tX25vVW5yZWdpc3RyYXRpb25MaXZlLnRh
a2VMYXN0KCkpKTsKICAgICB2aXNpdG9yLnZtKCkuaGVhcC5yZXBvcnRFeHRyYU1lbW9yeVZpc2l0
ZWQodG90YWxCdWZmZXJTaXplc0luQnl0ZXMpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4o
SlNGaW5hbGl6YXRpb25SZWdpc3RyeSk7CisKIHZvaWQgSlNGaW5hbGl6YXRpb25SZWdpc3RyeTo6
ZGVzdHJveShKU0NlbGwqIHRhYmxlKQogewogICAgIHN0YXRpY19jYXN0PEpTRmluYWxpemF0aW9u
UmVnaXN0cnkqPih0YWJsZSktPn5KU0ZpbmFsaXphdGlvblJlZ2lzdHJ5KCk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ZpbmFsaXphdGlvblJlZ2lzdHJ5LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGaW5hbGl6YXRpb25SZWdp
c3RyeS5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0ZpbmFsaXphdGlvblJlZ2lzdHJ5LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAtMjAyMSBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03MCw3ICs3MCw3IEBA
IHB1YmxpYzoKICAgICBERUNMQVJFX0VYUE9SVF9JTkZPOwogCiAgICAgdm9pZCBmaW5hbGl6ZVVu
Y29uZGl0aW9uYWxseShWTSYpOwotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogICAgIHN0YXRp
YyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRz
RGVzdHJ1Y3Rpb24gPSB0cnVlOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0Z1bmN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0Z1bmN0aW9uLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSw3
IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAyIEhhcnJpIFBvcnRlbiAocG9ydGVu
QGtkZS5vcmcpCiAgKiAgQ29weXJpZ2h0IChDKSAyMDAxIFBldGVyIEtlbGx5IChwbWtAcG9zdC5j
b20pCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqICBDb3B5cmlnaHQgKEMpIDIwMDcgQ2FtZXJvbiBad2FyaWNoIChjd3p3
YXJpY2hAdXdhdGVybG9vLmNhKQogICogIENvcHlyaWdodCAoQykgMjAwNyBNYWtzIE9ybG92aWNo
CiAgKiAgQ29weXJpZ2h0IChDKSAyMDE1IENhbm9uIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
QEAgLTI1Miw3ICsyNTIsOCBAQCBjb25zdCBTb3VyY2VDb2RlKiBKU0Z1bmN0aW9uOjpzb3VyY2VD
b2RlCiAgICAgcmV0dXJuICZqc0V4ZWN1dGFibGUoKS0+c291cmNlKCk7CiB9CiAgICAgCi12b2lk
IEpTRnVuY3Rpb246OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlz
aXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTRnVuY3Rpb246OnZpc2l0
Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU0Z1
bmN0aW9uKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTRnVuY3Rpb24qPihjZWxsKTsKICAgICBBU1NF
UlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC0yNjEsNiArMjYy
LDggQEAgdm9pZCBKU0Z1bmN0aW9uOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogYwogICAgIHZpc2l0
b3IuYXBwZW5kVW5iYXJyaWVyZWQoYml0d2lzZV9jYXN0PEpTQ2VsbCo+KGJpdHdpc2VfY2FzdDx1
aW50cHRyX3Q+KHRoaXNPYmplY3QtPm1fZXhlY3V0YWJsZU9yUmFyZURhdGEpICYgfnJhcmVEYXRh
VGFnKSk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU0Z1bmN0aW9uKTsKKwogQ2FsbERh
dGEgSlNGdW5jdGlvbjo6Z2V0Q2FsbERhdGEoSlNDZWxsKiBjZWxsKQogewogICAgIC8vIEtlZXAg
dGhpcyBmdW5jdGlvbiBPSyBmb3IgaW52b2NhdGlvbiBmcm9tIGNvbmN1cnJlbnQgY29tcGlsZXJz
LgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uaAkocmV2
aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlv
bi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMp
IDE5OTktMjAwMCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQotICogIENvcHlyaWdodCAo
QykgMjAwMy0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmln
aHQgKEMpIDIwMDMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiAgQ29w
eXJpZ2h0IChDKSAyMDA3IENhbWVyb24gWndhcmljaCAoY3d6d2FyaWNoQHV3YXRlcmxvby5jYSkK
ICAqICBDb3B5cmlnaHQgKEMpIDIwMDcgTWFrcyBPcmxvdmljaAogICoKQEAgLTE4MCw3ICsxODAs
NyBAQCBwcm90ZWN0ZWQ6CiAKICAgICBzdGF0aWMgYm9vbCBkZWxldGVQcm9wZXJ0eShKU0NlbGwq
LCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSwgRGVsZXRlUHJvcGVydHlTbG90Jik7CiAK
LSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7Cisg
ICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogcHJpdmF0ZToKICAgICBzdGF0aWMgSlNGdW5j
dGlvbiogY3JlYXRlSW1wbChWTSYgdm0sIEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJsZSwg
SlNTY29wZSogc2NvcGUsIFN0cnVjdHVyZSogc3RydWN0dXJlKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJhdG9yLmNwcAkocmV2aXNpb24gMjcyODMwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmF0b3IuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTU5LDExICs1OSwxNCBAQCB2b2lkIEpTR2VuZXJhdG9yOjpmaW5pc2hDcmVhdGlvbihW
TSYgdm0pCiAgICAgICAgIGludGVybmFsRmllbGQoaW5kZXgpLnNldCh2bSwgdGhpcywgdmFsdWVz
W2luZGV4XSk7CiB9CiAKLXZvaWQgSlNHZW5lcmF0b3I6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBj
ZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2
b2lkIEpTR2VuZXJhdG9yOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3Im
IHZpc2l0b3IpCiB7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0dlbmVyYXRvcio+
KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygp
KTsKICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwogfQogCitE
RUZJTkVfVklTSVRfQ0hJTERSRU4oSlNHZW5lcmF0b3IpOworCiB9IC8vIG5hbWVzcGFjZSBKU0MK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJhdG9yLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmF0b3IuaAkocmV2
aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmF0
b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE5LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC05NCw3ICs5NCw3IEBAIHB1YmxpYzoKIAogICAgIERFQ0xBUkVf
RVhQT1JUX0lORk87CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNs
b3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogcHJpdmF0ZToKICAg
ICBKU0dlbmVyYXRvcihWTSYsIFN0cnVjdHVyZSopOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXcuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlldy5oCShyZXZp
c2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNU
eXBlZEFycmF5Vmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzEzLDcgKzMxMyw3IEBAIHByaXZh
dGU6CiAgICAgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCosIEpTR2xv
YmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lQXJyYXkmLCBEb250RW51bVByb3BlcnRpZXNNb2RlKTsK
IAogICAgIHN0YXRpYyBzaXplX3QgZXN0aW1hdGVkU2l6ZShKU0NlbGwqLCBWTSYpOwotICAgIHN0
YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNM
QVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgLy8gUmV0dXJucyB0cnVlIGlmIHN1Y2Nlc3NmdWws
IGFuZCBmYWxzZSBvbiBlcnJvcjsgaXQgd2lsbCB0aHJvdyBvbiBlcnJvci4KICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBPdGhlckFkYXB0b3I+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMu
aAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNH
ZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01MTcsNyAr
NTE3LDggQEAgc2l6ZV90IEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OgogfQogCiB0
ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgotdm9pZCBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxB
ZGFwdG9yPjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9y
KQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNHZW5lcmljVHlwZWRBcnJheVZp
ZXc8QWRhcHRvcj46OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlz
aXRvcikKIHsKICAgICBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyogdGhpc09iamVjdCA9IGpzQ2Fz
dDxKU0dlbmVyaWNUeXBlZEFycmF5Vmlldyo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1Rf
SU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTU1NSw0ICs1NTYsNiBAQCB2b2lkIEpT
R2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+Ojp2CiAgICAgfQogfQogCitERUZJTkVfVklT
SVRfQ0hJTERSRU5fV0lUSF9NT0RJRklFUih0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPiwgSlNH
ZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj4pOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5j
cHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
R2xvYmFsT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDctMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDggQ2FtZXJvbiBad2FyaWNoIChjd3p3YXJpY2hAdXdhdGVy
bG9vLmNhKQogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMTg5Miw3ICsxODkyLDggQEAgdm9pZCBKU0ds
b2JhbE9iamVjdDo6cmVzZXRQcm90b3R5cGUoVk0mIAogICAgIHNldEdsb2JhbFRoaXModm0sIEpT
UHJveHk6OmNyZWF0ZSh2bSwgSlNQcm94eTo6Y3JlYXRlU3RydWN0dXJlKHZtLCB0aGlzLCBwcm90
b3R5cGUsIFB1cmVGb3J3YXJkaW5nUHJveHlUeXBlKSwgdGhpcykpOwogfQogCi12b2lkIEpTR2xv
YmFsT2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0
b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0dsb2JhbE9iamVjdDo6dmlz
aXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogeyAKICAgICBK
U0dsb2JhbE9iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0dsb2JhbE9iamVjdCo+KGNlbGwp
OwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAg
LTIwNjAsNiArMjA2MSw4IEBAIHZvaWQgSlNHbG9iYWxPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlND
ZWwKICAgICB0aGlzT2JqZWN0LT5tX3JlZ0V4cEdsb2JhbERhdGEudmlzaXRBZ2dyZWdhdGUodmlz
aXRvcik7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTl9XSVRIX01PRElGSUVSKEpTX0VYUE9S
VF9QUklWQVRFLCBKU0dsb2JhbE9iamVjdCk7CisKIENhbGxGcmFtZSogSlNHbG9iYWxPYmplY3Q6
OmRlcHJlY2F0ZWRDYWxsRnJhbWVGb3JEZWJ1Z2dlcigpCiB7CiAgICAgcmV0dXJuIENhbGxGcmFt
ZTo6Y3JlYXRlKG1fZGVwcmVjYXRlZENhbGxGcmFtZUZvckRlYnVnZ2VyKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAkocmV2aXNpb24g
MjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3Qu
aAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAy
MDA3IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+Ci0gKiAgQ29weXJpZ2h0IChDKSAyMDA3
LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykg
MjAwNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgog
ICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCkBAIC02MDksNyArNjA5LDcgQEAgcHVibGljOgogICAgIEpTX0VYUE9SVF9QUklWQVRF
IH5KU0dsb2JhbE9iamVjdCgpOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGRl
c3Ryb3koSlNDZWxsKik7CiAKLSAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCB2aXNp
dENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElM
RFJFTl9XSVRIX01PRElGSUVSKEpTX0VYUE9SVF9QUklWQVRFKTsKIAogICAgIEpTX0VYUE9SVF9Q
UklWQVRFIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU09iamVjdCosIEpTR2xvYmFs
T2JqZWN0KiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKICAgICBKU19FWFBPUlRfUFJJ
VkFURSBzdGF0aWMgYm9vbCBwdXQoSlNDZWxsKiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5h
bWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNJbW11dGFibGVCdXR0ZXJmbHkuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTSW1tdXRhYmxlQnV0dGVyZmx5LmNwcAkocmV2aXNp
b24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbW11dGFibGVC
dXR0ZXJmbHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTgtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMyLDcgKzMyLDggQEAgbmFtZXNwYWNlIEpTQyB7
CiAKIGNvbnN0IENsYXNzSW5mbyBKU0ltbXV0YWJsZUJ1dHRlcmZseTo6c19pbmZvID0geyAiSW1t
dXRhYmxlIEJ1dHRlcmZseSIsIG51bGxwdHIsIG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRI
T0RfVEFCTEUoSlNJbW11dGFibGVCdXR0ZXJmbHkpIH07CiAKLXZvaWQgSlNJbW11dGFibGVCdXR0
ZXJmbHk6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikK
K3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTSW1tdXRhYmxlQnV0dGVyZmx5Ojp2
aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAg
QVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjZWxsLCBpbmZvKCkpOwogICAgIEJhc2U6OnZpc2l0
Q2hpbGRyZW4oY2VsbCwgdmlzaXRvcik7CkBAIC00NSw2ICs0Niw4IEBAIHZvaWQgSlNJbW11dGFi
bGVCdXR0ZXJmbHk6OnZpc2l0Q2hpbGRyZW4KICAgICB2aXNpdG9yLmFwcGVuZFZhbHVlc0hpZGRl
bihidXR0ZXJmbHktPmNvbnRpZ3VvdXMoKS5kYXRhKCksIGJ1dHRlcmZseS0+cHVibGljTGVuZ3Ro
KCkpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNJbW11dGFibGVCdXR0ZXJmbHkpOwor
CiB2b2lkIEpTSW1tdXRhYmxlQnV0dGVyZmx5Ojpjb3B5VG9Bcmd1bWVudHMoSlNHbG9iYWxPYmpl
Y3QqLCBKU1ZhbHVlKiBmaXJzdEVsZW1lbnREZXN0LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVk
IGxlbmd0aCkKIHsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTSW1tdXRhYmxlQnV0dGVyZmx5
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbW11dGFi
bGVCdXR0ZXJmbHkuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNJbW11dGFibGVCdXR0ZXJmbHkuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE0NSw3
ICsxNDUsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBqc0RvdWJsZU51bWJlcih2YWx1ZSk7
CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90Vmlz
aXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICB2b2lkIGNvcHlUb0Fy
Z3VtZW50cyhKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUqIGZpcnN0RWxlbWVudERlc3QsIHVuc2ln
bmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTSW50ZXJuYWxGaWVsZE9iamVjdEltcGwuaAko
cmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbnRl
cm5hbEZpZWxkT2JqZWN0SW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY2LDcgKzY2LDcgQEAgcHVibGlj
OgogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZJbnRlcm5hbEZpZWxkKHVuc2lnbmVkIGlu
ZGV4KSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbCwg
bV9pbnRlcm5hbEZpZWxkcykgKyBpbmRleCAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4p
OyB9CiAKIHByb3RlY3RlZDoKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCos
IFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIEpTSW50
ZXJuYWxGaWVsZE9iamVjdEltcGwoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKICAgICAg
ICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0ludGVybmFsRmllbGRPYmplY3RJbXBsSW5saW5lcy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTSW50ZXJuYWxGaWVsZE9iamVjdEltcGxJbmxp
bmVzLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTSW50ZXJuYWxGaWVsZE9iamVjdEltcGxJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOS0yMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzAsNyAr
MzAsOCBAQAogbmFtZXNwYWNlIEpTQyB7CiAKIHRlbXBsYXRlPHVuc2lnbmVkIHBhc3NlZE51bWJl
ck9mSW50ZXJuYWxGaWVsZHM+Ci12b2lkIEpTSW50ZXJuYWxGaWVsZE9iamVjdEltcGw8cGFzc2Vk
TnVtYmVyT2ZJbnRlcm5hbEZpZWxkcz46OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90
VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTSW50
ZXJuYWxGaWVsZE9iamVjdEltcGw8cGFzc2VkTnVtYmVyT2ZJbnRlcm5hbEZpZWxkcz46OnZpc2l0
Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBhdXRv
KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTSW50ZXJuYWxGaWVsZE9iamVjdEltcGwqPihjZWxsKTsK
ICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC0z
OCw0ICszOSw2IEBAIHZvaWQgSlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbDxwYXNzZWROdW0KICAg
ICB2aXNpdG9yLmFwcGVuZFZhbHVlcyh0aGlzT2JqZWN0LT5tX2ludGVybmFsRmllbGRzLCBudW1i
ZXJPZkludGVybmFsRmllbGRzKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOX1dJVEhfTU9E
SUZJRVIodGVtcGxhdGU8dW5zaWduZWQgcGFzc2VkTnVtYmVyT2ZJbnRlcm5hbEZpZWxkcz4sIEpT
SW50ZXJuYWxGaWVsZE9iamVjdEltcGw8cGFzc2VkTnVtYmVyT2ZJbnRlcm5hbEZpZWxkcz4pOwor
CiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTTGV4aWNhbEVudmlyb25tZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0xleGljYWxFbnZpcm9ubWVudC5jcHAJKHJldmlzaW9uIDI3MjgzMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTGV4aWNhbEVudmlyb25tZW50LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDgtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDgtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTM2LDcgKzM2LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAKIGNv
bnN0IENsYXNzSW5mbyBKU0xleGljYWxFbnZpcm9ubWVudDo6c19pbmZvID0geyAiSlNMZXhpY2Fs
RW52aXJvbm1lbnQiLCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVU
SE9EX1RBQkxFKEpTTGV4aWNhbEVudmlyb25tZW50KSB9OwogCi12b2lkIEpTTGV4aWNhbEVudmly
b25tZW50Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3Ip
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0xleGljYWxFbnZpcm9ubWVudDo6
dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAg
IGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNMZXhpY2FsRW52aXJvbm1lbnQqPihjZWxsKTsK
ICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC00
NCw2ICs0NSw4IEBAIHZvaWQgSlNMZXhpY2FsRW52aXJvbm1lbnQ6OnZpc2l0Q2hpbGRyZW4KICAg
ICB2aXNpdG9yLmFwcGVuZFZhbHVlc0hpZGRlbih0aGlzT2JqZWN0LT52YXJpYWJsZXMoKSwgdGhp
c09iamVjdC0+c3ltYm9sVGFibGUoKS0+c2NvcGVTaXplKCkpOwogfQogCitERUZJTkVfVklTSVRf
Q0hJTERSRU4oSlNMZXhpY2FsRW52aXJvbm1lbnQpOworCiB2b2lkIEpTTGV4aWNhbEVudmlyb25t
ZW50OjphbmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCiB7
CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0xleGljYWxFbnZpcm9ubWVudCo+KGNl
bGwpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMZXhpY2FsRW52aXJv
bm1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xl
eGljYWxFbnZpcm9ubWVudC5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0xleGljYWxFbnZpcm9ubWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOC0yMDIwIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MTM0LDcgKzEzNCw3IEBAIHByb3RlY3RlZDoKICAgICAgICAgfQogICAgIH0KIAotICAgIHN0YXRp
YyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJF
X1ZJU0lUX0NISUxEUkVOOwogICAgIHN0YXRpYyB2b2lkIGFuYWx5emVIZWFwKEpTQ2VsbCosIEhl
YXBBbmFseXplciYpOwogfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNNYXBJdGVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNNYXBJdGVyYXRvci5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTTWFwSXRlcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE3IEFwcGxlLCBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMSBBcHBsZSwgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC01NywxMyArNTcsMTYgQEAgdm9pZCBKU01hcEl0ZXJhdG9yOjpmaW5pc2hDcmVhdGlvbihWTSYg
dgogICAgICAgICBCYXNlOjppbnRlcm5hbEZpZWxkKGluZGV4KS5zZXQodm0sIHRoaXMsIHZhbHVl
c1tpbmRleF0pOwogfQogCi12b2lkIEpTTWFwSXRlcmF0b3I6OnZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+
Cit2b2lkIEpTTWFwSXRlcmF0b3I6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlz
aXRvciYgdmlzaXRvcikKIHsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTTWFwSXRl
cmF0b3IqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3Qs
IGluZm8oKSk7CiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsK
IH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTTWFwSXRlcmF0b3IpOworCiBKU1ZhbHVlIEpT
TWFwSXRlcmF0b3I6OmNyZWF0ZVBhaXIoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNW
YWx1ZSBrZXksIEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgYXJn
czsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTWFwSXRlcmF0b3IuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01hcEl0ZXJhdG9y
LmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
TWFwSXRlcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMsIDIwMTYgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDIxIEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE0Miw3ICsxNDIsNyBAQCBwcml2
YXRlOgogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBKU01h
cCosIEl0ZXJhdGlvbktpbmQpOwogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKICAgICBK
U1ZhbHVlIGNyZWF0ZVBhaXIoSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlLCBKU1ZhbHVlKTsKLSAg
ICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAg
REVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIH07CiBTVEFUSUNfQVNTRVJUX0lTX1RSSVZJQUxMWV9E
RVNUUlVDVElCTEUoSlNNYXBJdGVyYXRvcik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTTW9kdWxlRW52aXJvbm1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlRW52aXJvbm1lbnQuY3BwCShyZXZpc2lvbiAy
NzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZUVudmlyb25t
ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTUtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTUtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY1LDcgKzY1LDggQEAgdm9pZCBKU01vZHVsZUVu
dmlyb25tZW50OjpmaW5pc2hDcmVhdGlvbgogICAgIHRoaXMtPm1vZHVsZVJlY29yZFNsb3QoKS5z
ZXQodm0sIHRoaXMsIG1vZHVsZVJlY29yZCk7CiB9CiAKLXZvaWQgSlNNb2R1bGVFbnZpcm9ubWVu
dDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVt
cGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNNb2R1bGVFbnZpcm9ubWVudDo6dmlzaXRD
aGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTTW9k
dWxlRW52aXJvbm1lbnQqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNNb2R1bGVFbnZpcm9ubWVudCo+
KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygp
KTsKQEAgLTc0LDYgKzc1LDggQEAgdm9pZCBKU01vZHVsZUVudmlyb25tZW50Ojp2aXNpdENoaWxk
cmVuKAogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1vZHVsZVJlY29yZFNsb3QoKSk7
CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU01vZHVsZUVudmlyb25tZW50KTsKKwogYm9v
bCBKU01vZHVsZUVudmlyb25tZW50OjpnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqIGNlbGws
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUs
IFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZUVudmlyb25tZW50
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVF
bnZpcm9ubWVudC5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU01vZHVsZUVudmlyb25tZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC04OSw3ICs4
OSw3IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiAqYml0d2lzZV9jYXN0PFdyaXRlQmFycmll
ckJhc2U8QWJzdHJhY3RNb2R1bGVSZWNvcmQ+Kj4oYml0d2lzZV9jYXN0PGNoYXIqPih0aGlzKSAr
IG9mZnNldE9mTW9kdWxlUmVjb3JkKHN5bWJvbFRhYmxlKCkpKTsKICAgICB9CiAKLSAgICBzdGF0
aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFS
RV9WSVNJVF9DSElMRFJFTjsKIH07CiAKIGlubGluZSBKU01vZHVsZUVudmlyb25tZW50OjpKU01v
ZHVsZUVudmlyb25tZW50KFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTU2NvcGUqIGN1
cnJlbnRTY29wZSwgU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlTmFtZXNwYWNlT2JqZWN0
LmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNNb2R1bGVOYW1lc3BhY2VPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODUsNyArODUs
OCBAQCB2b2lkIEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0OjpkZXN0cm95KEpTCiAgICAgdGhpc09i
amVjdC0+SlNNb2R1bGVOYW1lc3BhY2VPYmplY3Q6On5KU01vZHVsZU5hbWVzcGFjZU9iamVjdCgp
OwogfQogCi12b2lkIEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2Vs
bCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
Pgordm9pZCBKU01vZHVsZU5hbWVzcGFjZU9iamVjdDo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxs
KiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0
KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0Kj4oY2VsbCk7CiAg
ICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtOTgs
NiArOTksOCBAQCB2b2lkIEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0Ojp2aXNpdENoaWxkCiAgICAg
fQogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QpOwor
CiBzdGF0aWMgSlNWYWx1ZSBnZXRWYWx1ZShKU01vZHVsZUVudmlyb25tZW50KiBlbnZpcm9ubWVu
dCwgUHJvcGVydHlOYW1lIGxvY2FsTmFtZSwgU2NvcGVPZmZzZXQmIHNjb3BlT2Zmc2V0KQogewog
ICAgIFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSA9IGVudmlyb25tZW50LT5zeW1ib2xUYWJsZSgp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVOYW1lc3BhY2VP
YmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01v
ZHVsZU5hbWVzcGFjZU9iamVjdC5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU01vZHVsZU5hbWVzcGFjZU9iamVjdC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIwIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIxIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtNzIsNyArNzIsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIEpTX0VYUE9SVF9QUklW
QVRFIEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0KFZNJiwgU3RydWN0dXJlKik7CiAgICAgSlNfRVhQ
T1JUX1BSSVZBVEUgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0dsb2JhbE9iamVjdCosIEFic3RyYWN0
TW9kdWxlUmVjb3JkKiwgVmVjdG9yPHN0ZDo6cGFpcjxJZGVudGlmaWVyLCBBYnN0cmFjdE1vZHVs
ZVJlY29yZDo6UmVzb2x1dGlvbj4+JiYpOwotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4o
SlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogICAg
IGJvb2wgZ2V0T3duUHJvcGVydHlTbG90Q29tbW9uKEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlO
YW1lLCBQcm9wZXJ0eVNsb3QmKTsKIAogICAgIHN0cnVjdCBFeHBvcnRFbnRyeSB7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZVJlY29yZC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVSZWNvcmQuY3BwCShy
ZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVs
ZVJlY29yZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDE1LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE1LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03MCw3ICs3MCw4IEBAIHZvaWQgSlNNb2R1
bGVSZWNvcmQ6OmZpbmlzaENyZWF0aW9uKEpTR2wKICAgICBBU1NFUlQoaW5oZXJpdHModm0sIGlu
Zm8oKSkpOwogfQogCi12b2lkIEpTTW9kdWxlUmVjb3JkOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCog
Y2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgor
dm9pZCBKU01vZHVsZVJlY29yZDo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNp
dG9yJiB2aXNpdG9yKQogewogICAgIEpTTW9kdWxlUmVjb3JkKiB0aGlzT2JqZWN0ID0ganNDYXN0
PEpTTW9kdWxlUmVjb3JkKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0
aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNzgsNiArNzksOCBAQCB2b2lkIEpTTW9kdWxlUmVjb3Jk
Ojp2aXNpdENoaWxkcmVuKEpTQ2VsCiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9t
b2R1bGVQcm9ncmFtRXhlY3V0YWJsZSk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU01v
ZHVsZVJlY29yZCk7CisKIHZvaWQgSlNNb2R1bGVSZWNvcmQ6OmxpbmsoSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBzY3JpcHRGZXRjaGVyKQogewogICAgIFZNJiB2bSA9IGds
b2JhbE9iamVjdC0+dm0oKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
TW9kdWxlUmVjb3JkLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNNb2R1bGVSZWNvcmQuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVSZWNvcmQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY2LDcg
KzY2LDcgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxPYmpl
Y3QqLCBWTSYpOwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90
VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICB2b2lkIGluc3Rh
bnRpYXRlRGVjbGFyYXRpb25zKEpTR2xvYmFsT2JqZWN0KiwgTW9kdWxlUHJvZ3JhbUV4ZWN1dGFi
bGUqLCBKU1ZhbHVlIHNjcmlwdEZldGNoZXIpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU05hdGl2ZVN0ZEZ1bmN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU05hdGl2ZVN0ZEZ1bmN0aW9uLmNwcAkocmV2aXNpb24g
MjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNOYXRpdmVTdGRGdW5j
dGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE1LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00MSwxMyArNDEsMTYgQEAgSlNOYXRpdmVTdGRG
dW5jdGlvbjo6SlNOYXRpdmVTdGRGdW5jdGlvbgogewogfQogCi12b2lkIEpTTmF0aXZlU3RkRnVu
Y3Rpb246OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikK
K3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTTmF0aXZlU3RkRnVuY3Rpb246OnZp
c2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBK
U05hdGl2ZVN0ZEZ1bmN0aW9uKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTTmF0aXZlU3RkRnVuY3Rp
b24qPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGlu
Zm8oKSk7CiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKIH0K
IAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTTmF0aXZlU3RkRnVuY3Rpb24pOworCiB2b2lkIEpT
TmF0aXZlU3RkRnVuY3Rpb246OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgTmF0aXZlRXhlY3V0YWJs
ZSogZXhlY3V0YWJsZSwgdW5zaWduZWQgbGVuZ3RoLCBjb25zdCBTdHJpbmcmIG5hbWUpCiB7CiAg
ICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0sIGV4ZWN1dGFibGUsIGxlbmd0aCwgbmFtZSk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU05hdGl2ZVN0ZEZ1bmN0aW9uLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNOYXRpdmVTdGRG
dW5jdGlvbi5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU05hdGl2ZVN0ZEZ1bmN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02NSw3ICs2NSw3
IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgSlNOYXRpdmVTdGRGdW5jdGlvbihWTSYsIE5hdGl2
ZUV4ZWN1dGFibGUqLCBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSosIE5hdGl2ZVN0ZEZ1bmN0
aW9uJiYpOwogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBOYXRpdmVFeGVjdXRhYmxlKiwg
dW5zaWduZWQgbGVuZ3RoLCBjb25zdCBTdHJpbmcmIG5hbWUpOwotICAgIHN0YXRpYyB2b2lkIHZp
c2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NI
SUxEUkVOOwogCiAgICAgTmF0aXZlU3RkRnVuY3Rpb24gbV9mdW5jdGlvbjsKIH07CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCShyZXZpc2lvbiAyNzI4
MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNyArMSw3IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAx
IEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCiAgKiAgQ29weXJpZ2h0IChDKSAyMDAxIFBl
dGVyIEtlbGx5IChwbWtAcG9zdC5jb20pCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMjAgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwMy0yMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqICBDb3B5cmlnaHQgKEMpIDIwMDcg
RXJpYyBTZWlkZWwgKGVyaWNAd2Via2l0Lm9yZykKICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAtNzIsNyArNzIs
OCBAQCBjb25zdCBDbGFzc0luZm8gSlNPYmplY3Q6OnNfaW5mbyA9IHsgIk9iCiAKIGNvbnN0IENs
YXNzSW5mbyBKU0ZpbmFsT2JqZWN0OjpzX2luZm8gPSB7ICJPYmplY3QiLCAmQmFzZTo6c19pbmZv
LCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTRmluYWxPYmplY3QpIH07
CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKU09iamVjdDo6bWFya0F1eGlsaWFyeUFuZFZpc2l0T3V0
T2ZMaW5lUHJvcGVydGllcyhTbG90VmlzaXRvciYgdmlzaXRvciwgQnV0dGVyZmx5KiBidXR0ZXJm
bHksIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBtYXhPZmZzZXQpCit0ZW1w
bGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgorQUxXQVlTX0lOTElORSB2b2lkIEpTT2JqZWN0OjptYXJr
QXV4aWxpYXJ5QW5kVmlzaXRPdXRPZkxpbmVQcm9wZXJ0aWVzKFZpc2l0b3ImIHZpc2l0b3IsIEJ1
dHRlcmZseSogYnV0dGVyZmx5LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQg
bWF4T2Zmc2V0KQogewogICAgIC8vIFdlIGNhbGwgdGhpcyB3aGVuIHdlIGZvdW5kIGV2ZXJ5dGhp
bmcgd2l0aG91dCByYWNlcy4KICAgICBBU1NFUlQoc3RydWN0dXJlKTsKQEAgLTEwMyw3ICsxMDQs
OCBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSlNPYmplY3Q6Om1hcmtBdXhpbGlhCiAgICAgdmlzaXRv
ci5hcHBlbmRWYWx1ZXNIaWRkZW4oYnV0dGVyZmx5LT5wcm9wZXJ0eVN0b3JhZ2UoKSAtIG91dE9m
TGluZVNpemUsIG91dE9mTGluZVNpemUpOwogfQogCi1BTFdBWVNfSU5MSU5FIFN0cnVjdHVyZSog
SlNPYmplY3Q6OnZpc2l0QnV0dGVyZmx5KFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8
dHlwZW5hbWUgVmlzaXRvcj4KK0FMV0FZU19JTkxJTkUgU3RydWN0dXJlKiBKU09iamVjdDo6dmlz
aXRCdXR0ZXJmbHkoVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBzdGF0aWMgY29uc3QgY2hhciog
Y29uc3QgcmFjZVJlYXNvbiA9ICJKU09iamVjdDo6dmlzaXRCdXR0ZXJmbHkiOwogICAgIFN0cnVj
dHVyZSogcmVzdWx0ID0gdmlzaXRCdXR0ZXJmbHlJbXBsKHZpc2l0b3IpOwpAQCAtMTEyLDcgKzEx
NCw4IEBAIEFMV0FZU19JTkxJTkUgU3RydWN0dXJlKiBKU09iamVjdDo6dmlzaXQKICAgICByZXR1
cm4gcmVzdWx0OwogfQogCi1BTFdBWVNfSU5MSU5FIFN0cnVjdHVyZSogSlNPYmplY3Q6OnZpc2l0
QnV0dGVyZmx5SW1wbChTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZp
c2l0b3I+CitBTFdBWVNfSU5MSU5FIFN0cnVjdHVyZSogSlNPYmplY3Q6OnZpc2l0QnV0dGVyZmx5
SW1wbChWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFZNJiB2bSA9IHZpc2l0b3Iudm0oKTsKICAg
ICAKQEAgLTQxMiwyNCArNDE1LDIwIEBAIHNpemVfdCBKU09iamVjdDo6ZXN0aW1hdGVkU2l6ZShK
U0NlbGwqIGMKICAgICByZXR1cm4gQmFzZTo6ZXN0aW1hdGVkU2l6ZShjZWxsLCB2bSkgKyBidXR0
ZXJmbHlPdXRPZkxpbmVTaXplOwogfQogCi12b2lkIEpTT2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpT
Q2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNp
dG9yPgordm9pZCBKU09iamVjdDo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNp
dG9yJiB2aXNpdG9yKQogewogICAgIEpTT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTT2Jq
ZWN0Kj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBp
bmZvKCkpOwotI2lmIEFTU0VSVF9FTkFCTEVECi0gICAgYm9vbCB3YXNDaGVja2luZ0ZvckRlZmF1
bHRNYXJrVmlvbGF0aW9uID0gdmlzaXRvci5tX2lzQ2hlY2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xh
dGlvbjsKLSAgICB2aXNpdG9yLm1faXNDaGVja2luZ0ZvckRlZmF1bHRNYXJrVmlvbGF0aW9uID0g
ZmFsc2U7Ci0jZW5kaWYKLSAgICAKKyAgICB0eXBlbmFtZSBWaXNpdG9yOjpEZWZhdWx0TWFya2lu
Z1Zpb2xhdGlvbkFzc2VydGlvblNjb3BlIGFzc2VydGlvblNjb3BlKHZpc2l0b3IpOworCiAgICAg
SlNDZWxsOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwotICAgIAorCiAgICAg
dGhpc09iamVjdC0+dmlzaXRCdXR0ZXJmbHkodmlzaXRvcik7Ci0gICAgCi0jaWYgQVNTRVJUX0VO
QUJMRUQKLSAgICB2aXNpdG9yLm1faXNDaGVja2luZ0ZvckRlZmF1bHRNYXJrVmlvbGF0aW9uID0g
d2FzQ2hlY2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlvbjsKLSNlbmRpZgogfQogCitERUZJTkVf
VklTSVRfQ0hJTERSRU5fV0lUSF9NT0RJRklFUihKU19FWFBPUlRfUFJJVkFURSwgSlNPYmplY3Qp
OworCiB2b2lkIEpTT2JqZWN0OjphbmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhlYXBBbmFseXpl
ciYgYW5hbHl6ZXIpCiB7CiAgICAgSlNPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNPYmpl
Y3QqPihjZWxsKTsKQEAgLTQ2OCwxNCArNDY3LDEyIEBAIHZvaWQgSlNPYmplY3Q6OmFuYWx5emVI
ZWFwKEpTQ2VsbCogY2VsbCwKICAgICB9CiB9CiAKLXZvaWQgSlNGaW5hbE9iamVjdDo6dmlzaXRD
aGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlw
ZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNGaW5hbE9iamVjdDo6dmlzaXRDaGlsZHJlbkltcGwoSlND
ZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTRmluYWxPYmplY3QqIHRoaXNP
YmplY3QgPSBqc0Nhc3Q8SlNGaW5hbE9iamVjdCo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpF
Q1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKLSNpZiBBU1NFUlRfRU5BQkxFRAotICAg
IGJvb2wgd2FzQ2hlY2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlvbiA9IHZpc2l0b3IubV9pc0No
ZWNraW5nRm9yRGVmYXVsdE1hcmtWaW9sYXRpb247Ci0gICAgdmlzaXRvci5tX2lzQ2hlY2tpbmdG
b3JEZWZhdWx0TWFya1Zpb2xhdGlvbiA9IGZhbHNlOwotI2VuZGlmCisgICAgdHlwZW5hbWUgVmlz
aXRvcjo6RGVmYXVsdE1hcmtpbmdWaW9sYXRpb25Bc3NlcnRpb25TY29wZSBhc3NlcnRpb25TY29w
ZSh2aXNpdG9yKTsKICAgICAKICAgICBKU0NlbGw6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwg
dmlzaXRvcik7CiAgICAgCkBAIC00ODMsMTIgKzQ4MCwxMCBAQCB2b2lkIEpTRmluYWxPYmplY3Q6
OnZpc2l0Q2hpbGRyZW4oSlNDZWxsCiAgICAgICAgIGlmICh1bnNpZ25lZCBzdG9yYWdlU2l6ZSA9
IHN0cnVjdHVyZS0+aW5saW5lU2l6ZSgpKQogICAgICAgICAgICAgdmlzaXRvci5hcHBlbmRWYWx1
ZXNIaWRkZW4odGhpc09iamVjdC0+aW5saW5lU3RvcmFnZSgpLCBzdG9yYWdlU2l6ZSk7CiAgICAg
fQotICAgIAotI2lmIEFTU0VSVF9FTkFCTEVECi0gICAgdmlzaXRvci5tX2lzQ2hlY2tpbmdGb3JE
ZWZhdWx0TWFya1Zpb2xhdGlvbiA9IHdhc0NoZWNraW5nRm9yRGVmYXVsdE1hcmtWaW9sYXRpb247
Ci0jZW5kaWYKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOX1dJVEhfTU9ESUZJRVIoSlNfRVhQ
T1JUX1BSSVZBVEUsIEpTRmluYWxPYmplY3QpOworCiBTdHJpbmcgSlNPYmplY3Q6OmNsYXNzTmFt
ZShjb25zdCBKU09iamVjdCogb2JqZWN0LCBWTSYgdm0pCiB7CiAgICAgY29uc3QgQ2xhc3NJbmZv
KiBpbmZvID0gb2JqZWN0LT5jbGFzc0luZm8odm0pOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU09iamVjdC5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBA
QAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMSBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBr
ZGUub3JnKQogICogIENvcHlyaWdodCAoQykgMjAwMSBQZXRlciBLZWxseSAocG1rQHBvc3QuY29t
KQotICogIENvcHlyaWdodCAoQykgMjAwMy0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMTA4LDggKzEwOCw5IEBAIGNsYXNz
IEpTT2JqZWN0IDogcHVibGljIEpTQ2VsbCB7CiBwdWJsaWM6CiAgICAgdXNpbmcgQmFzZSA9IEpT
Q2VsbDsKIAorICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU5fV0lUSF9NT0RJRklFUihKU19FWFBP
UlRfUFJJVkFURSk7CisKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgc2l6ZV90IGVzdGlt
YXRlZFNpemUoSlNDZWxsKiwgVk0mKTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9p
ZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CiAgICAgSlNfRVhQT1JUX1BS
SVZBVEUgc3RhdGljIHZvaWQgYW5hbHl6ZUhlYXAoSlNDZWxsKiwgSGVhcEFuYWx5emVyJik7CiAK
ICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgU3RyaW5nIGNsYXNzTmFtZShjb25zdCBKU09i
amVjdCosIFZNJik7CkBAIC05ODIsMTEgKzk4MywxMSBAQCBwcm90ZWN0ZWQ6CiAgICAgSlNPYmpl
Y3QoVk0mLCBTdHJ1Y3R1cmUqLCBCdXR0ZXJmbHkqID0gbnVsbHB0cik7CiAgICAgCiAgICAgLy8g
VmlzaXRzIHRoZSBidXR0ZXJmbHkgdW5sZXNzIHRoZXJlIGlzIGEgcmFjZS4gUmV0dXJucyB0aGUg
c3RydWN0dXJlIGlmIHRoZXJlIHdhcyBubyByYWNlLgotICAgIFN0cnVjdHVyZSogdmlzaXRCdXR0
ZXJmbHkoU2xvdFZpc2l0b3ImKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiBTdHJ1
Y3R1cmUqIHZpc2l0QnV0dGVyZmx5KFZpc2l0b3ImKTsKICAgICAKLSAgICBTdHJ1Y3R1cmUqIHZp
c2l0QnV0dGVyZmx5SW1wbChTbG90VmlzaXRvciYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZp
c2l0b3I+IFN0cnVjdHVyZSogdmlzaXRCdXR0ZXJmbHlJbXBsKFZpc2l0b3ImKTsKICAgICAKLSAg
ICB2b2lkIG1hcmtBdXhpbGlhcnlBbmRWaXNpdE91dE9mTGluZVByb3BlcnRpZXMoU2xvdFZpc2l0
b3ImLCBCdXR0ZXJmbHkqLCBTdHJ1Y3R1cmUqLCBQcm9wZXJ0eU9mZnNldCBtYXhPZmZzZXQpOwor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgbWFya0F1eGlsaWFyeUFuZFZpc2l0
T3V0T2ZMaW5lUHJvcGVydGllcyhWaXNpdG9yJiwgQnV0dGVyZmx5KiwgU3RydWN0dXJlKiwgUHJv
cGVydHlPZmZzZXQgbWF4T2Zmc2V0KTsKIAogICAgIC8vIENhbGwgdGhpcyBpZiB5b3Uga25vdyB0
aGF0IHRoZSBvYmplY3QgaXMgaW4gYSBtb2RlIHdoZXJlIGl0IGhhcyBhcnJheQogICAgIC8vIHN0
b3JhZ2UuIFRoaXMgd2lsbCBhc3NlcnQgb3RoZXJ3aXNlLgpAQCAtMTE3NCw4ICsxMTc1LDYgQEAg
cHJvdGVjdGVkOgogICAgIH0KIH07CiAKLWNsYXNzIEpTRmluYWxPYmplY3Q7Ci0KIC8vIEpTRmlu
YWxPYmplY3QgaXMgYSB0eXBlIG9mIEpTT2JqZWN0IHRoYXQgY29udGFpbnMgc3VmZmljaWVudCBp
bnRlcm5hbAogLy8gc3RvcmFnZSB0byBmdWxseSBtYWtlIHVzZSBvZiB0aGUgY29sbGVjdG9yIGNl
bGwgY29udGFpbmluZyBpdC4KIGNsYXNzIEpTRmluYWxPYmplY3QgZmluYWwgOiBwdWJsaWMgSlNP
YmplY3QgewpAQCAtMTIxNCwxNSArMTIxMywxMyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBT
dHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIHR5cGVJbmZvKCks
IGluZm8oKSwgZGVmYXVsdEluZGV4aW5nVHlwZSwgaW5saW5lQ2FwYWNpdHkpOwogICAgIH0KIAot
ICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwg
U2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOX1dJVEhfTU9ESUZJRVIo
SlNfRVhQT1JUX1BSSVZBVEUpOwogCiAgICAgREVDTEFSRV9FWFBPUlRfSU5GTzsKIAogcHJpdmF0
ZToKICAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwogCi0gICAgdm9pZCB2
aXNpdENoaWxkcmVuQ29tbW9uKFNsb3RWaXNpdG9yJik7Ci0KICAgICBleHBsaWNpdCBKU0ZpbmFs
T2JqZWN0KFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEJ1dHRlcmZseSogYnV0dGVyZmx5
KQogICAgICAgICA6IEpTT2JqZWN0KHZtLCBzdHJ1Y3R1cmUsIGJ1dHRlcmZseSkKICAgICB7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb21pc2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvbWlzZS5jcHAJKHJldmlz
aW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvbWlzZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC02NywxMyArNjcsMTYgQEAgdm9pZCBKU1Byb21pc2U6OmZp
bmlzaENyZWF0aW9uKFZNJiB2bSkKICAgICAgICAgQmFzZTo6aW50ZXJuYWxGaWVsZChpbmRleCku
c2V0KHZtLCB0aGlzLCB2YWx1ZXNbaW5kZXhdKTsKIH0KIAotdm9pZCBKU1Byb21pc2U6OnZpc2l0
Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5
cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTUHJvbWlzZTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxs
KiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nh
c3Q8SlNQcm9taXNlKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlz
T2JqZWN0LCBpbmZvKCkpOwogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlz
aXRvcik7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU1Byb21pc2UpOworCiBhdXRvIEpT
UHJvbWlzZTo6c3RhdHVzKFZNJikgY29uc3QgLT4gU3RhdHVzCiB7CiAgICAgSlNWYWx1ZSB2YWx1
ZSA9IGludGVybmFsRmllbGQoRmllbGQ6OkZsYWdzKS5nZXQoKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvbWlzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvbWlzZS5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb21pc2UuaAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC05Niw3
ICs5Niw3IEBAIHB1YmxpYzoKICAgICB9OwogICAgIHN0YXRpYyBEZWZlcnJlZERhdGEgY3JlYXRl
RGVmZXJyZWREYXRhKEpTR2xvYmFsT2JqZWN0KiwgSlNQcm9taXNlQ29uc3RydWN0b3IqKTsKIAot
ICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAg
ICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiBwcm90ZWN0ZWQ6CiAgICAgSlNQcm9taXNlKFZN
JiwgU3RydWN0dXJlKik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1By
b3BlcnR5TmFtZUVudW1lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTUHJvcGVydHlOYW1lRW51bWVyYXRvci5jcHAJKHJldmlzaW9uIDI3Mjgz
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVydHlOYW1lRW51bWVy
YXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDE0LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE0LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03MCw3ICs3MCw4IEBAIHZvaWQgSlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yOjpmaW5pc2hDcmUKICAgICB9CiB9CiAKLXZvaWQgSlNQcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZp
c2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1Byb3BlcnR5TmFtZUVu
dW1lcmF0b3I6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRv
cikKIHsKICAgICBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8
SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9J
TkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtODcsNiArODgsOCBAQCB2b2lkIEpTUHJv
cGVydHlOYW1lRW51bWVyYXRvcjo6dmlzaXRDaGlsCiAgICAgfQogfQogCitERUZJTkVfVklTSVRf
Q0hJTERSRU4oSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKTsKKwogLy8gRklYTUU6IEFzc2VydCB0
aGF0IHByb3BlcnRpZXMgcmV0dXJuZWQgYnkgZ2V0T3duUHJvcGVydHlOYW1lcygpIGFyZSByZXBv
cnRlZCBlbnVtZXJhYmxlIGJ5IGdldE93blByb3BlcnR5U2xvdCgpLgogLy8gaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxOTkyNgogdm9pZCBnZXRFbnVtZXJhYmxlUHJv
cGVydHlOYW1lcyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU09iamVjdCogYmFzZSwg
UHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIHVpbnQzMl90JiBpbmRleGVkTGVuZ3Ro
LCB1aW50MzJfdCYgc3RydWN0dXJlUHJvcGVydHlDb3VudCkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTUHJvcGVydHlOYW1lRW51bWVyYXRvci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVydHlOYW1lRW51bWVyYXRvci5o
CShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1By
b3BlcnR5TmFtZUVudW1lcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTg0LDcgKzg0LDcgQEAg
cHVibGljOgogICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTUHJvcGVydHlOYW1lRW51
bWVyYXRvciwgbV9wcm9wZXJ0eU5hbWVzKTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNp
dENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElM
RFJFTjsKIAogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9y
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm94eS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm94eS5jcHAJKHJldmlz
aW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJveHkuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MS0yMDEyLCAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDExLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNSw3ICszNSw4IEBAIFNUQVRJQ19BU1NF
UlRfSVNfVFJJVklBTExZX0RFU1RSVUNUSUJMRSgKIAogY29uc3QgQ2xhc3NJbmZvIEpTUHJveHk6
OnNfaW5mbyA9IHsgIkpTUHJveHkiLCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBudWxscHRyLCBD
UkVBVEVfTUVUSE9EX1RBQkxFKEpTUHJveHkpIH07CiAKLXZvaWQgSlNQcm94eTo6dmlzaXRDaGls
ZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5h
bWUgVmlzaXRvcj4KK3ZvaWQgSlNQcm94eTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxs
LCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTUHJveHkqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8
SlNQcm94eSo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVj
dCwgaW5mbygpKTsKQEAgLTQzLDYgKzQ0LDggQEAgdm9pZCBKU1Byb3h5Ojp2aXNpdENoaWxkcmVu
KEpTQ2VsbCogY2VsbAogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fdGFyZ2V0KTsK
IH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOX1dJVEhfTU9ESUZJRVIoSlNfRVhQT1JUX1BSSVZB
VEUsIEpTUHJveHkpOworCiB2b2lkIEpTUHJveHk6OnNldFRhcmdldChWTSYgdm0sIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QpCiB7CiAgICAgbV90YXJnZXQuc2V0KHZtLCB0aGlzLCBnbG9i
YWxPYmplY3QpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm94eS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJveHkuaAko
cmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm94
eS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMS0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODUsNyArODUsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgICAg
IG1fdGFyZ2V0LnNldCh2bSwgdGhpcywgdGFyZ2V0KTsKICAgICB9CiAKLSAgICBKU19FWFBPUlRf
UFJJVkFURSBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7
CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTl9XSVRIX01PRElGSUVSKEpTX0VYUE9SVF9QUklW
QVRFKTsKIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBTdHJpbmcgY2xhc3NOYW1lKGNv
bnN0IEpTT2JqZWN0KiwgVk0mKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgU3RyaW5n
IHRvU3RyaW5nTmFtZShjb25zdCBKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0Kik7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Njb3BlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Njb3BlLmNwcAkocmV2aXNpb24gMjcyODMw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTY29wZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjAgQXBw
bGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjEg
QXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0zOSw3ICszOSw4IEBAIFNUQVRJQ19BU1NFUlRfSVNfVFJJVklBTExZX0RFU1RS
VUNUSUJMRSgKIAogY29uc3QgQ2xhc3NJbmZvIEpTU2NvcGU6OnNfaW5mbyA9IHsgIlNjb3BlIiwg
JkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1Nj
b3BlKSB9OwogCi12b2lkIEpTU2NvcGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90
VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTU2Nv
cGU6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsK
ICAgICBKU1Njb3BlKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTU2NvcGUqPihjZWxsKTsKICAgICBB
U1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC00Nyw2ICs0
OCw4IEBAIHZvaWQgSlNTY29wZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwKICAgICB2aXNp
dG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX25leHQpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERS
RU4oSlNTY29wZSk7CisKIC8vIFJldHVybnMgdHJ1ZSBpZiB3ZSBmb3VuZCBlbm91Z2ggaW5mb3Jt
YXRpb24gdG8gdGVybWluYXRlIG9wdGltaXphdGlvbi4KIHN0YXRpYyBpbmxpbmUgYm9vbCBhYnN0
cmFjdEFjY2VzcyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1Njb3BlKiBzY29wZSwg
Y29uc3QgSWRlbnRpZmllciYgaWRlbnQsIEdldE9yUHV0IGdldE9yUHV0LCBzaXplX3QgZGVwdGgs
IGJvb2wmIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCBSZXNvbHZlT3AmIG9wLCBJbml0aWFsaXph
dGlvbk1vZGUgaW5pdGlhbGl6YXRpb25Nb2RlKQogewpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNTY29wZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTU2NvcGUuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNTY29wZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE5IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDIxIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBS
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjQsNyArNjQsNyBA
QCBwdWJsaWM6CiAKICAgICBzdGF0aWMgdm9pZCBjb2xsZWN0Q2xvc3VyZVZhcmlhYmxlc1VuZGVy
VERaKEpTU2NvcGUqLCBURFpFbnZpcm9ubWVudCYgcmVzdWx0LCBQcml2YXRlTmFtZUVudmlyb25t
ZW50Jik7CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNp
dG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIGJvb2wgaXNWYXJTY29w
ZSgpOwogICAgIGJvb2wgaXNMZXhpY2FsU2NvcGUoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVPYmplY3QuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVPYmplY3Qu
Y3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjIsNyArNjIs
OCBAQCBTY29wZU9mZnNldCBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0OjphCiAgICAgcmV0dXJu
IFNjb3BlT2Zmc2V0KG9sZFNpemUpOwogfQogCi12b2lkIEpTU2VnbWVudGVkVmFyaWFibGVPYmpl
Y3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3Rl
bXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3Q6
OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAg
ICBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTU2VnbWVu
dGVkVmFyaWFibGVPYmplY3QqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRT
KHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC03NSw2ICs3Niw4IEBAIHZvaWQgSlNTZWdtZW50ZWRW
YXJpYWJsZU9iamVjdDo6dmlzaXRDaGkKICAgICAgICAgdmlzaXRvci5hcHBlbmRIaWRkZW4odGhp
c09iamVjdC0+bV92YXJpYWJsZXNbaV0pOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU5fV0lU
SF9NT0RJRklFUihKU19FWFBPUlRfUFJJVkFURSwgSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdCk7
CisKIHZvaWQgSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdDo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBj
ZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQogewogICAgIEpTU2VnbWVudGVkVmFyaWFibGVP
YmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdCo+KGNl
bGwpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZWdtZW50ZWRWYXJp
YWJsZU9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTU2VnbWVudGVkVmFyaWFibGVPYmplY3QuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE5
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0y
MDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtODUsOCArODUsOCBAQCBwdWJsaWM6CiAgICAgLy8gQWRkcyBudW1iZXJP
ZlJlZ2lzdGVyc1RvQWRkIHJlZ2lzdGVycywgaW5pdGlhbGl6ZXMgdGhlbSB0byBVbmRlZmluZWQs
IGFuZCByZXR1cm5zCiAgICAgLy8gdGhlIGluZGV4IG9mIHRoZSBmaXJzdCBvbmUgYWRkZWQuCiAg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgU2NvcGVPZmZzZXQgYWRkVmFyaWFibGVzKHVuc2lnbmVkIG51
bWJlck9mVmFyaWFibGVzVG9BZGQsIEpTVmFsdWUpOwotICAgIAotICAgIEpTX0VYUE9SVF9QUklW
QVRFIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKwor
ICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU5fV0lUSF9NT0RJRklFUihKU19FWFBPUlRfUFJJVkFU
RSk7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgYW5hbHl6ZUhlYXAoSlNDZWxs
KiwgSGVhcEFuYWx5emVyJik7CiAgICAgCiBwcm90ZWN0ZWQ6CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU1NldEl0ZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NldEl0ZXJhdG9yLmNwcAkocmV2aXNpb24gMjcyODMw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZXRJdGVyYXRvci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTcgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
My0yMDIxIEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTU3LDEzICs1NywxNiBAQCB2b2lkIEpTU2V0SXRlcmF0b3I6OmZp
bmlzaENyZWF0aW9uKFZNJiB2CiAgICAgICAgIEJhc2U6OmludGVybmFsRmllbGQoaW5kZXgpLnNl
dCh2bSwgdGhpcywgdmFsdWVzW2luZGV4XSk7CiB9CiAKLXZvaWQgSlNTZXRJdGVyYXRvcjo6dmlz
aXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8
dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNTZXRJdGVyYXRvcjo6dmlzaXRDaGlsZHJlbkltcGwo
SlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGF1dG8qIHRoaXNPYmplY3Qg
PSBqc0Nhc3Q8SlNTZXRJdGVyYXRvcio+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5I
RVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNP
YmplY3QsIHZpc2l0b3IpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNTZXRJdGVyYXRv
cik7CisKIEpTVmFsdWUgSlNTZXRJdGVyYXRvcjo6Y3JlYXRlUGFpcihKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBKU1ZhbHVlIGtleSwgSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBNYXJrZWRB
cmd1bWVudEJ1ZmZlciBhcmdzOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNTZXRJdGVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTU2V0SXRlcmF0b3IuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNTZXRJdGVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNiBBcHBsZSwgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjEgQXBwbGUsIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTMw
LDcgKzEzMCw3IEBAIHByaXZhdGU6CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBmaW5pc2hD
cmVhdGlvbihWTSYsIEpTU2V0KiwgSXRlcmF0aW9uS2luZCk7CiAgICAgdm9pZCBmaW5pc2hDcmVh
dGlvbihWTSYpOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIEpTVmFsdWUgY3JlYXRlUGFpcihKU0ds
b2JhbE9iamVjdCosIEpTVmFsdWUsIEpTVmFsdWUpOwotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hp
bGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVO
OwogfTsKIFNUQVRJQ19BU1NFUlRfSVNfVFJJVklBTExZX0RFU1RSVUNUSUJMRShKU1NldEl0ZXJh
dG9yKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmNw
cAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNT
dHJpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqICBDb3B5cmln
aHQgKEMpIDE5OTktMjAwMiBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQogICogIENvcHly
aWdodCAoQykgMjAwMSBQZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQotICogIENvcHlyaWdodCAo
QykgMjAwNC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmln
aHQgKEMpIDIwMDQtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYwpAQCAtMTA1LDcgKzEwNSw4IEBAIHNpemVfdCBKU1N0cmluZzo6ZXN0aW1h
dGVkU2l6ZShKU0NlbGwqIGMKICAgICByZXR1cm4gQmFzZTo6ZXN0aW1hdGVkU2l6ZShjZWxsLCB2
bSkgKyBiaXR3aXNlX2Nhc3Q8U3RyaW5nSW1wbCo+KHBvaW50ZXIpLT5jb3N0RHVyaW5nR0MoKTsK
IH0KIAotdm9pZCBKU1N0cmluZzo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNp
dG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNTdHJpbmc6
OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAg
ICBKU1N0cmluZyogdGhpc09iamVjdCA9IGFzU3RyaW5nKGNlbGwpOwogICAgIEFTU0VSVF9HQ19P
QkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTE0Myw2ICsxNDQsOCBAQCB2
b2lkIEpTU3RyaW5nOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsCiAgICAgICAgIHZpc2l0b3Iu
cmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKGltcGwtPmNvc3REdXJpbmdHQygpKTsKIH0KIAorREVG
SU5FX1ZJU0lUX0NISUxEUkVOKEpTU3RyaW5nKTsKKwogc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25l
ZCBtYXhMZW5ndGhGb3JPblN0YWNrUmVzb2x2ZSA9IDIwNDg7CiAKIHZvaWQgSlNSb3BlU3RyaW5n
OjpyZXNvbHZlUm9wZUludGVybmFsOChMQ2hhciogYnVmZmVyKSBjb25zdApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDcgKzEsNyBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMSBIYXJyaSBQb3J0
ZW4gKHBvcnRlbkBrZGUub3JnKQogICogIENvcHlyaWdodCAoQykgMjAwMSBQZXRlciBLZWxseSAo
cG1rQHBvc3QuY29tKQotICogIENvcHlyaWdodCAoQykgMjAwMy0yMDIwIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjE3LDcgKzIx
Nyw3IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyB2b2lkIGR1bXBUb1N0cmVhbShjb25zdCBKU0Nl
bGwqLCBQcmludFN0cmVhbSYpOwogICAgIHN0YXRpYyBzaXplX3QgZXN0aW1hdGVkU2l6ZShKU0Nl
bGwqLCBWTSYpOwotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZp
c2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgQUxXQVlTX0lOTElO
RSBib29sIGlzUm9wZSgpIGNvbnN0CiAgICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNTdHJpbmdJdGVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmdJdGVyYXRvci5jcHAJKHJldmlzaW9uIDI3MjgzMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nSXRlcmF0b3IuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxNSBZ
dXN1a2UgU3V6dWtpIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+LgotICogQ29weXJpZ2h0IChDKSAy
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
Ni0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtNTEsMTEgKzUxLDE0IEBAIEpTU3RyaW5nSXRlcmF0b3IqIEpTU3Ry
aW5nSXRlcmF0b3I6OmNsb24KICAgICByZXR1cm4gY2xvbmU7CiB9CiAKLXZvaWQgSlNTdHJpbmdJ
dGVyYXRvcjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9y
KQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNTdHJpbmdJdGVyYXRvcjo6dmlz
aXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGF1
dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNTdHJpbmdJdGVyYXRvcio+KGNlbGwpOwogICAgIEFT
U0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKICAgICBCYXNlOjp2
aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwogfQogCitERUZJTkVfVklTSVRfQ0hJ
TERSRU4oSlNTdHJpbmdJdGVyYXRvcik7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmdJdGVyYXRvci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nSXRlcmF0b3IuaAkocmV2
aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmdJ
dGVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdo
dCAoQykgMjAxNSBZdXN1a2UgU3V6dWtpIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+LgorICogQ29w
eXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNzksNyArODAsNyBAQCBwdWJsaWM6CiAgICAgSlNW
YWx1ZSBpbmRleCgpIGNvbnN0IHsgcmV0dXJuIGludGVybmFsRmllbGQoRmllbGQ6OkluZGV4KS5n
ZXQoKTsgfQogICAgIEpTU3RyaW5nSXRlcmF0b3IqIGNsb25lKEpTR2xvYmFsT2JqZWN0Kik7CiAK
LSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7Cisg
ICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogcHJpdmF0ZToKICAgICBKU1N0cmluZ0l0ZXJh
dG9yKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0LmNwcAkocmV2aXNp
b24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTeW1ib2xUYWJs
ZU9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDEyLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDEyLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNiw3ICszNiw4IEBAIG5hbWVzcGFjZSBK
U0MgewogCiBjb25zdCBDbGFzc0luZm8gSlNTeW1ib2xUYWJsZU9iamVjdDo6c19pbmZvID0geyAi
U3ltYm9sVGFibGVPYmplY3QiLCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBudWxscHRyLCBDUkVB
VEVfTUVUSE9EX1RBQkxFKEpTU3ltYm9sVGFibGVPYmplY3QpIH07CiAKLXZvaWQgSlNTeW1ib2xU
YWJsZU9iamVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNp
dG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNTeW1ib2xUYWJsZU9iamVj
dDo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewog
ICAgIEpTU3ltYm9sVGFibGVPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNTeW1ib2xUYWJs
ZU9iamVjdCo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVj
dCwgaW5mbygpKTsKQEAgLTQ0LDYgKzQ1LDggQEAgdm9pZCBKU1N5bWJvbFRhYmxlT2JqZWN0Ojp2
aXNpdENoaWxkcmVuKAogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fc3ltYm9sVGFi
bGUpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNTeW1ib2xUYWJsZU9iamVjdCk7CisK
IGJvb2wgSlNTeW1ib2xUYWJsZU9iamVjdDo6ZGVsZXRlUHJvcGVydHkoSlNDZWxsKiBjZWxsLCBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBE
ZWxldGVQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgSlNTeW1ib2xUYWJsZU9iamVjdCogdGhp
c09iamVjdCA9IGpzQ2FzdDxKU1N5bWJvbFRhYmxlT2JqZWN0Kj4oY2VsbCk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVjdC5o
CShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N5
bWJvbFRhYmxlT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDEyLTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03MCw3ICs3MCw3IEBAIHByb3Rl
Y3RlZDoKICAgICAgICAgbV9zeW1ib2xUYWJsZS5zZXQodm0sIHRoaXMsIHN5bWJvbFRhYmxlKTsK
ICAgICB9CiAgICAgCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90
VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAgICAgCiBwcml2YXRlOgog
ICAgIFdyaXRlQmFycmllcjxTeW1ib2xUYWJsZT4gbV9zeW1ib2xUYWJsZTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTV2Vha09iamVjdFJlZi5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNXZWFrT2JqZWN0UmVmLmNwcAkocmV2
aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNXZWFrT2Jq
ZWN0UmVmLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTkgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxOS0yMDIxIEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM5LDcgKzM5LDggQEAgdm9pZCBKU1dlYWtPYmpl
Y3RSZWY6OmZpbmlzaENyZWF0aW9uKFZNJgogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsK
IH0KIAotdm9pZCBKU1dlYWtPYmplY3RSZWY6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBT
bG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpT
V2Vha09iamVjdFJlZjo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2
aXNpdG9yKQogewogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNXZWFrT2JqZWN0UmVm
Kj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZv
KCkpOwpAQCAtNTEsNiArNTIsOCBAQCB2b2lkIEpTV2Vha09iamVjdFJlZjo6dmlzaXRDaGlsZHJl
bihKU0NlCiAgICAgfQogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNXZWFrT2JqZWN0UmVm
KTsKKwogdm9pZCBKU1dlYWtPYmplY3RSZWY6OmZpbmFsaXplVW5jb25kaXRpb25hbGx5KFZNJiB2
bSkKIHsKICAgICBpZiAobV92YWx1ZSAmJiAhdm0uaGVhcC5pc01hcmtlZChtX3ZhbHVlLmdldCgp
KSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTV2Vha09iamVjdFJlZi5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTV2Vha09iamVj
dFJlZi5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU1dlYWtPYmplY3RSZWYuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxOS0yMDIxIEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY1LDcgKzY1LDcgQEAgcHVibGlj
OgogICAgIH0KIAogICAgIHZvaWQgZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoVk0mKTsKLSAgICBz
dGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVD
TEFSRV9WSVNJVF9DSElMRFJFTjsKIAogcHJpdmF0ZToKICAgICBKU1dlYWtPYmplY3RSZWYoVk0m
IHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTV2l0aFNjb3BlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1dpdGhTY29wZS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTV2l0aFNjb3BlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTYgQXBwbGUgSW5jLiBB
bGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjEgQXBwbGUgSW5j
LiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC00MSw3ICs0MSw4IEBAIEpTV2l0aFNjb3BlKiBKU1dpdGhTY29wZTo6Y3JlYXRlKAogICAgIHJl
dHVybiB3aXRoU2NvcGU7CiB9CiAKLXZvaWQgSlNXaXRoU2NvcGU6OnZpc2l0Q2hpbGRyZW4oSlND
ZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0
b3I+Cit2b2lkIEpTV2l0aFNjb3BlOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZp
c2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNXaXRoU2NvcGUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8
SlNXaXRoU2NvcGUqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNP
YmplY3QsIGluZm8oKSk7CkBAIC00OSw2ICs1MCw4IEBAIHZvaWQgSlNXaXRoU2NvcGU6OnZpc2l0
Q2hpbGRyZW4oSlNDZWxsKiAKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX29iamVj
dCk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU1dpdGhTY29wZSk7CisKIFN0cnVjdHVy
ZSogSlNXaXRoU2NvcGU6OmNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG8pCiB7CiAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3Jl
YXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvLCBUeXBlSW5mbyhXaXRoU2NvcGVUeXBlLCBTdHJ1
Y3R1cmVGbGFncyksIGluZm8oKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU1dpdGhTY29wZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTV2l0aFNjb3BlLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTV2l0aFNjb3BlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDE2IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBS
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDIxIEFwcGxlIEluYy4gQWxsIFJpZ2h0
cyBSZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDMsNyArNDMs
NyBAQCBwdWJsaWM6CiAKICAgICBKU09iamVjdCogb2JqZWN0KCkgeyByZXR1cm4gbV9vYmplY3Qu
Z2V0KCk7IH0KIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZp
c2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgc3RhdGljIFN0cnVj
dHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlIHByb3Rv
KTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNXcmFwcGVyT2JqZWN0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1dyYXBw
ZXJPYmplY3QuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU1dyYXBwZXJPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBA
QAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDIwMDYgTWFrcyBPcmxvdmljaAotICogIENvcHlyaWdo
dCAoQykgMjAwNiwgMjAwOSwgMjAxMiBBcHBsZSwgSW5jLgorICogIENvcHlyaWdodCAoQykgMjAw
Ni0yMDIxIEFwcGxlLCBJbmMuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjksMTEgKzI5LDE0
IEBAIG5hbWVzcGFjZSBKU0MgewogCiBTVEFUSUNfQVNTRVJUX0lTX1RSSVZJQUxMWV9ERVNUUlVD
VElCTEUoSlNXcmFwcGVyT2JqZWN0KTsKIAotdm9pZCBKU1dyYXBwZXJPYmplY3Q6OnZpc2l0Q2hp
bGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVu
YW1lIFZpc2l0b3I+Cit2b2lkIEpTV3JhcHBlck9iamVjdDo6dmlzaXRDaGlsZHJlbkltcGwoSlND
ZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBq
c0Nhc3Q8SlNXcmFwcGVyT2JqZWN0Kj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhF
UklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09i
amVjdCwgdmlzaXRvcik7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTl9XSVRIX01PRElGSUVS
KEpTX0VYUE9SVF9QUklWQVRFLCBKU1dyYXBwZXJPYmplY3QpOworCiB9IC8vIG5hbWVzcGFjZSBK
U0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTV3JhcHBlck9iamVjdC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTV3JhcHBlck9i
amVjdC5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU1dyYXBwZXJPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAg
KiAgQ29weXJpZ2h0IChDKSAyMDA2IE1ha3MgT3Jsb3ZpY2gKLSAqICBDb3B5cmlnaHQgKEMpIDIw
MDYsIDIwMDcsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
IENvcHlyaWdodCAoQykgMjAwNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC02NCw3ICs2NCw3IEBAIHB1YmxpYzoKIHByb3RlY3Rl
ZDoKICAgICBleHBsaWNpdCBKU1dyYXBwZXJPYmplY3QoVk0mLCBTdHJ1Y3R1cmUqKTsKIAotICAg
IEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xv
dFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOX1dJVEhfTU9ESUZJRVIoSlNf
RVhQT1JUX1BSSVZBVEUpOwogfTsKIAogaW5saW5lIEpTV3JhcHBlck9iamVjdDo6SlNXcmFwcGVy
T2JqZWN0KFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9MYXp5Q2xhc3NTdHJ1Y3R1cmUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0xhenlDbGFzc1N0cnVjdHVyZS5jcHAJKHJldmlz
aW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0xhenlDbGFzc1N0
cnVjdHVyZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDE2LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03MiwxMiArNzIsMTYgQEAgdm9pZCBMYXp5
Q2xhc3NTdHJ1Y3R1cmU6OkluaXRpYWxpemVyOjpzZQogICAgIGNsYXNzU3RydWN0dXJlLm1fY29u
c3RydWN0b3Iuc2V0KHZtLCBnbG9iYWwsIGNvbnN0cnVjdG9yKTsKIH0KIAotdm9pZCBMYXp5Q2xh
c3NTdHJ1Y3R1cmU6OnZpc2l0KFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5h
bWUgVmlzaXRvcj4KK3ZvaWQgTGF6eUNsYXNzU3RydWN0dXJlOjp2aXNpdChWaXNpdG9yJiB2aXNp
dG9yKQogewogICAgIG1fc3RydWN0dXJlLnZpc2l0KHZpc2l0b3IpOwogICAgIHZpc2l0b3IuYXBw
ZW5kKG1fY29uc3RydWN0b3IpOwogfQogCit0ZW1wbGF0ZSB2b2lkIExhenlDbGFzc1N0cnVjdHVy
ZTo6dmlzaXQoQWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBMYXp5Q2xhc3NT
dHJ1Y3R1cmU6OnZpc2l0KFNsb3RWaXNpdG9yJik7CisKIHZvaWQgTGF6eUNsYXNzU3RydWN0dXJl
OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiB7CiAgICAgb3V0LnByaW50KCI8c3RydWN0
dXJlID0gIiwgbV9zdHJ1Y3R1cmUsICIsIGNvbnN0cnVjdG9yID0gIiwgUmF3UG9pbnRlcihtX2Nv
bnN0cnVjdG9yLmdldCgpKSwgIj4iKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0xhenlDbGFzc1N0cnVjdHVyZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0xhenlDbGFzc1N0cnVjdHVyZS5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9MYXp5Q2xhc3NTdHJ1Y3R1cmUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0xMTcsNyArMTE3LDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9jb25zdHJ1
Y3Rvci5nZXQoKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCB2aXNpdChTbG90VmlzaXRvciYpOwor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgdmlzaXQoVmlzaXRvciYpOwogICAg
IAogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9MYXp5UHJvcGVydHkuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9MYXp5UHJvcGVydHkuaAkocmV2aXNpb24gMjcyODMwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTGF6eVByb3BlcnR5LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTkgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0xMDMsNyArMTAzLDcgQEAgcHVibGljOgogICAgIHZvaWQgc2V0TWF5QmVOdWxs
KFZNJiwgY29uc3QgT3duZXJUeXBlKiBvd25lciwgRWxlbWVudFR5cGUqKTsKICAgICB2b2lkIHNl
dChWTSYsIGNvbnN0IE93bmVyVHlwZSogb3duZXIsIEVsZW1lbnRUeXBlKik7CiAgICAgCi0gICAg
dm9pZCB2aXNpdChTbG90VmlzaXRvciYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+
IHZvaWQgdmlzaXQoVmlzaXRvciYpOwogICAgIAogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYp
IGNvbnN0OwogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTGF6eVBy
b3BlcnR5SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0xhenlQcm9wZXJ0eUlubGluZXMuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvTGF6eVByb3BlcnR5SW5saW5lcy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTY2LDcgKzY2LDggQEAgdm9pZCBMYXp5UHJvcGVydHk8T3duZXJUeXBlLCBFbGVtZW50VHlwZQog
fQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPd25lclR5cGUsIHR5cGVuYW1lIEVsZW1lbnRUeXBlPgot
dm9pZCBMYXp5UHJvcGVydHk8T3duZXJUeXBlLCBFbGVtZW50VHlwZT46OnZpc2l0KFNsb3RWaXNp
dG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgTGF6eVByb3Bl
cnR5PE93bmVyVHlwZSwgRWxlbWVudFR5cGU+Ojp2aXNpdChWaXNpdG9yJiB2aXNpdG9yKQogewog
ICAgIGlmIChtX3BvaW50ZXIgJiYgIShtX3BvaW50ZXIgJiBsYXp5VGFnKSkKICAgICAgICAgdmlz
aXRvci5hcHBlbmRVbmJhcnJpZXJlZChiaXR3aXNlX2Nhc3Q8RWxlbWVudFR5cGUqPihtX3BvaW50
ZXIpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01vZHVsZVByb2dyYW1F
eGVjdXRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9Nb2R1bGVQcm9ncmFtRXhlY3V0YWJsZS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01vZHVsZVByb2dyYW1FeGVjdXRhYmxlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIw
MTAsIDIwMTMsIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDktMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTc5LDcgKzc5LDggQEAgYXV0byBNb2R1
bGVQcm9ncmFtRXhlY3V0YWJsZTo6ZW5zdXJlVGVtcAogICAgIHJldHVybiBlbnN1cmVUZW1wbGF0
ZU9iamVjdE1hcEltcGwobV90ZW1wbGF0ZU9iamVjdE1hcCk7CiB9CiAKLXZvaWQgTW9kdWxlUHJv
Z3JhbUV4ZWN1dGFibGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYg
dmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIE1vZHVsZVByb2dyYW1F
eGVjdXRhYmxlOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0
b3IpCiB7CiAgICAgTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8
TW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lO
SEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC05NCw0ICs5NSw2IEBAIHZvaWQgTW9kdWxl
UHJvZ3JhbUV4ZWN1dGFibGU6OnZpc2l0Q2hpbGQKICAgICB9CiB9CiAKK0RFRklORV9WSVNJVF9D
SElMRFJFTihNb2R1bGVQcm9ncmFtRXhlY3V0YWJsZSk7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTW9kdWxlUHJvZ3JhbUV4ZWN1dGFi
bGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Nb2R1bGVQ
cm9ncmFtRXhlY3V0YWJsZS5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9Nb2R1bGVQcm9ncmFtRXhlY3V0YWJsZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOS0yMDE5IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDIxIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtNzcsNyArNzcsNyBAQCBwcml2YXRlOgogCiAgICAgTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUo
SlNHbG9iYWxPYmplY3QqLCBjb25zdCBTb3VyY2VDb2RlJik7CiAKLSAgICBzdGF0aWMgdm9pZCB2
aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9D
SElMRFJFTjsKIAogICAgIFdyaXRlQmFycmllcjxVbmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxv
Y2s+IG1fdW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrOwogICAgIFdyaXRlQmFycmllcjxT
eW1ib2xUYWJsZT4gbV9tb2R1bGVFbnZpcm9ubWVudFN5bWJvbFRhYmxlOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMS0yMDIwIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDIxIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtNTU4LDYgKzU1OCw5IEBAIHZvaWQgT3B0aW9uczo6cmVjb21wdXRlRGVwZW5kZW50T3B0
aW9ucygKIAogICAgIGlmIChPcHRpb25zOjp1c2VQcml2YXRlU3RhdGljQ2xhc3NGaWVsZHMoKSkK
ICAgICAgICAgT3B0aW9uczo6dXNlUHJpdmF0ZUNsYXNzRmllbGRzKCkgPSB0cnVlOworCisgICAg
aWYgKE9wdGlvbnM6OnZlcmJvc2VWZXJpZnlHQygpKQorICAgICAgICBPcHRpb25zOjp2ZXJpZnlH
QygpID0gdHJ1ZTsKIH0KIAogaW5saW5lIHZvaWQqIE9wdGlvbnM6OmFkZHJlc3NPZk9wdGlvbihP
cHRpb25zOjpJRCBpZCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlv
bnNMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0
aW9uc0xpc3QuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvT3B0aW9uc0xpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMzY5LDYgKzM2OSw4IEBAIEpT
X0VYUE9SVF9QUklWQVRFIGJvb2wgY2FuVXNlSklUQ2FnZSgpOwogICAgIHYoQm9vbCwgYWx3YXlz
R2VuZXJhdGVQQ1RvQ29kZU9yaWdpbk1hcCwgZmFsc2UsIE5vcm1hbCwgIlRoaXMgd2lsbCBtYWtl
IHN1cmUgd2UgYWx3YXlzIGdlbmVyYXRlIGEgUENUb0NvZGVPcmlnaW5NYXAgZm9yIEpJVGVkIGNv
ZGUuIikgXAogICAgIFwKICAgICB2KERvdWJsZSwgcmFuZG9tSW50ZWdyaXR5QXVkaXRSYXRlLCAw
LjA1LCBOb3JtYWwsICJQcm9iYWJpbGl0eSBvZiByYW5kb20gaW50ZWdyaXR5IGF1ZGl0cyBbMC4w
IC0gMS4wXSIpIFwKKyAgICB2KEJvb2wsIHZlcmlmeUdDLCBmYWxzZSwgTm9ybWFsLCBudWxscHRy
KSBcCisgICAgdihCb29sLCB2ZXJib3NlVmVyaWZ5R0MsIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIp
IFwKICAgICB2KEJvb2wsIHZlcmlmeUhlYXAsIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpIFwKICAg
ICB2KFVuc2lnbmVkLCBudW1iZXJPZkdDQ3ljbGVzVG9SZWNvcmRGb3JWZXJpZmljYXRpb24sIDMs
IE5vcm1hbCwgbnVsbHB0cikgXAogICAgIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1Byb2dyYW1FeGVjdXRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9Qcm9ncmFtRXhlY3V0YWJsZS5jcHAJKHJldmlzaW9uIDI3MjgzMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb2dyYW1FeGVjdXRhYmxlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkt
MjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDktMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTIwOCw3ICsyMDgsOCBAQCBhdXRvIFByb2dyYW1FeGVjdXRhYmxl
OjplbnN1cmVUZW1wbGF0ZU9iCiAgICAgcmV0dXJuIGVuc3VyZVRlbXBsYXRlT2JqZWN0TWFwSW1w
bChtX3RlbXBsYXRlT2JqZWN0TWFwKTsKIH0KIAotdm9pZCBQcm9ncmFtRXhlY3V0YWJsZTo6dmlz
aXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8
dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgUHJvZ3JhbUV4ZWN1dGFibGU6OnZpc2l0Q2hpbGRyZW5J
bXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBQcm9ncmFtRXhlY3V0
YWJsZSogdGhpc09iamVjdCA9IGpzQ2FzdDxQcm9ncmFtRXhlY3V0YWJsZSo+KGNlbGwpOwogICAg
IEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTIyMiw0
ICsyMjMsNiBAQCB2b2lkIFByb2dyYW1FeGVjdXRhYmxlOjp2aXNpdENoaWxkcmVuKEpTCiAgICAg
fQogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oUHJvZ3JhbUV4ZWN1dGFibGUpOworCiB9IC8v
IG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb2dy
YW1FeGVjdXRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvUHJvZ3JhbUV4ZWN1dGFibGUuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvUHJvZ3JhbUV4ZWN1dGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxOSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTgxLDcgKzgxLDcgQEAgcHJpdmF0ZToKIAogICAgIFByb2dyYW1FeGVjdXRhYmxlKEpTR2xvYmFs
T2JqZWN0KiwgY29uc3QgU291cmNlQ29kZSYpOwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGls
ZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47
CiAKICAgICBXcml0ZUJhcnJpZXI8VW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrPiBtX3VubGlua2Vk
UHJvZ3JhbUNvZGVCbG9jazsKICAgICBXcml0ZUJhcnJpZXI8RXhlY3V0YWJsZVRvQ29kZUJsb2Nr
RWRnZT4gbV9wcm9ncmFtQ29kZUJsb2NrOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvUHJvcGVydHlNYXBIYXNoVGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eU1hcEhhc2hUYWJsZS5oCShyZXZpc2lvbiAyNzI4MzAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eU1hcEhhc2hUYWJsZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqICBDb3B5cmlnaHQgKEMpIDIw
MDQtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChD
KSAyMDA0LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKQEAgLTEzMyw3ICsxMzMsNyBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgbmVlZHNEZXN0cnVjdGlvbiA9IHRydWU7CiAgICAgc3RhdGljIHZvaWQgZGVzdHJv
eShKU0NlbGwqKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RW
aXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIERFQ0xBUkVfRVhQ
T1JUX0lORk87CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5
VGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1By
b3BlcnR5VGFibGUuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9Qcm9wZXJ0eVRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMTgsNyAr
MTE4LDggQEAgdm9pZCBQcm9wZXJ0eVRhYmxlOjpmaW5pc2hDcmVhdGlvbihWTSYgdgogICAgIHZt
LmhlYXAucmVwb3J0RXh0cmFNZW1vcnlBbGxvY2F0ZWQoZGF0YVNpemUoKSk7CiB9CiAKLXZvaWQg
UHJvcGVydHlUYWJsZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgUHJvcGVydHlUYWJsZTo6
dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAg
IGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8UHJvcGVydHlUYWJsZSo+KGNlbGwpOwogICAgIEFT
U0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTEyNiw2ICsx
MjcsOCBAQCB2b2lkIFByb3BlcnR5VGFibGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsCiAgICAgdmlz
aXRvci5yZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQodGhpc09iamVjdC0+ZGF0YVNpemUoKSk7CiB9
CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihQcm9wZXJ0eVRhYmxlKTsKKwogdm9pZCBQcm9wZXJ0
eVRhYmxlOjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKIHsKICAgICBzdGF0aWNfY2FzdDxQcm9wZXJ0
eVRhYmxlKj4oY2VsbCktPlByb3BlcnR5VGFibGU6On5Qcm9wZXJ0eVRhYmxlKCk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm94eU9iamVjdC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJveHlPYmplY3QuY3BwCShyZXZpc2lv
biAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm94eU9iamVjdC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDE2LTIwMjAgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0xMTU4LDcgKzExNTgsOCBAQCBib29sIFByb3h5T2JqZWN0
Ojppc1Jldm9rZWQoKSBjb25zdAogICAgIHJldHVybiBoYW5kbGVyKCkuaXNOdWxsKCk7CiB9CiAK
LXZvaWQgUHJveHlPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRv
ciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFByb3h5T2JqZWN0
Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAg
ICAgUHJveHlPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8UHJveHlPYmplY3QqPihjZWxsKTsK
ICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC0x
MTY4LDQgKzExNjksNiBAQCB2b2lkIFByb3h5T2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCog
CiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9oYW5kbGVyKTsKIH0KIAorREVGSU5F
X1ZJU0lUX0NISUxEUkVOKFByb3h5T2JqZWN0KTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm94eU9iamVjdC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3h5T2JqZWN0LmgJKHJldmlzaW9u
IDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3h5T2JqZWN0LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0y
MDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtOTEsNyArOTEsNyBAQCBwcml2YXRlOgogICAgIHN0YXRpYyB2b2lkIGdl
dE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFt
ZUFycmF5JiwgRG9udEVudW1Qcm9wZXJ0aWVzTW9kZSk7CiAgICAgc3RhdGljIGJvb2wgc2V0UHJv
dG90eXBlKEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlIHByb3RvdHlwZSwgYm9v
bCBzaG91bGRUaHJvd0lmQ2FudFNldCk7CiAgICAgc3RhdGljIEpTVmFsdWUgZ2V0UHJvdG90eXBl
KEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxk
cmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsK
IAogICAgIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90Q29tbW9uKEpTR2xvYmFsT2JqZWN0KiwgUHJv
cGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKICAgICBib29sIHBlcmZvcm1JbnRlcm5hbE1ldGhv
ZEdldE93blByb3BlcnR5KEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNs
b3QmKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3h5UmV2b2tlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm94eVJldm9r
ZS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1Byb3h5UmV2b2tlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02OSw3ICs2OSw4IEBAIEpTQ19ERUZJTkVf
SE9TVF9GVU5DVElPTihwZXJmb3JtUHJveHlSZXYKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOwogfQogCi12b2lkIFByb3h5UmV2b2tlOjp2aXNpdENoaWxkcmVuKEpT
Q2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNp
dG9yPgordm9pZCBQcm94eVJldm9rZTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBW
aXNpdG9yJiB2aXNpdG9yKQogewogICAgIFByb3h5UmV2b2tlKiB0aGlzT2JqZWN0ID0ganNDYXN0
PFByb3h5UmV2b2tlKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlz
T2JqZWN0LCBpbmZvKCkpOwpAQCAtNzgsNCArNzksNiBAQCB2b2lkIFByb3h5UmV2b2tlOjp2aXNp
dENoaWxkcmVuKEpTQ2VsbCogCiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9wcm94
eSk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihQcm94eVJldm9rZSk7CisKIH0gLy8gbmFt
ZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJveHlSZXZv
a2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm94eVJl
dm9rZS5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9Qcm94eVJldm9rZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxNi0yMDE5IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNi0yMDIxIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTIsNyArNTIsNyBAQCBwdWJsaWM6
CiAgICAgfQogCiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIFByb3h5T2JqZWN0Kik7Ci0g
ICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAg
IERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAgICAgSlNWYWx1ZSBwcm94eSgpIHsgcmV0dXJuIG1f
cHJveHkuZ2V0KCk7IH0KICAgICB2b2lkIHNldFByb3h5VG9OdWxsKFZNJiB2bSkgeyByZXR1cm4g
bV9wcm94eS5zZXQodm0sIHRoaXMsIGpzTnVsbCgpKTsgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9SZWdFeHBDYWNoZWRSZXN1bHQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENhY2hlZFJlc3VsdC5jcHAJKHJldmlz
aW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENhY2hl
ZFJlc3VsdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDEyLCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzEsNyArMzEsOCBAQAogCiBuYW1lc3Bh
Y2UgSlNDIHsKIAotdm9pZCBSZWdFeHBDYWNoZWRSZXN1bHQ6OnZpc2l0QWdncmVnYXRlKFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgUmVnRXhw
Q2FjaGVkUmVzdWx0Ojp2aXNpdEFnZ3JlZ2F0ZShWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHZp
c2l0b3IuYXBwZW5kKG1fbGFzdElucHV0KTsKICAgICB2aXNpdG9yLmFwcGVuZChtX2xhc3RSZWdF
eHApOwpAQCAtNDMsNiArNDQsOSBAQCB2b2lkIFJlZ0V4cENhY2hlZFJlc3VsdDo6dmlzaXRBZ2dy
ZWdhdGUoCiAgICAgfQogfQogCit0ZW1wbGF0ZSB2b2lkIFJlZ0V4cENhY2hlZFJlc3VsdDo6dmlz
aXRBZ2dyZWdhdGUoQWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBSZWdFeHBD
YWNoZWRSZXN1bHQ6OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJik7CisKIEpTQXJyYXkqIFJl
Z0V4cENhY2hlZFJlc3VsdDo6bGFzdFJlc3VsdChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBKU09iamVjdCogb3duZXIpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwQ2FjaGVkUmVzdWx0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwQ2FjaGVk
UmVzdWx0LmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1JlZ0V4cENhY2hlZFJlc3VsdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY1LDcgKzY1LDcg
QEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9yZWlmaWVkID8gbV9yZWlmaWVkSW5wdXQuZ2V0
KCkgOiBtX2xhc3RJbnB1dC5nZXQoKTsKICAgICB9CiAKLSAgICB2b2lkIHZpc2l0QWdncmVnYXRl
KFNsb3RWaXNpdG9yJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCB2aXNp
dEFnZ3JlZ2F0ZShWaXNpdG9yJik7CiAKICAgICAvLyBtX2xhc3RSZWdFeHAgd291bGQgYmUgbnVs
bHB0ciB3aGVuIFJlZ0V4cENhY2hlZFJlc3VsdCBpcyBub3QgcmVpZmllZC4KICAgICAvLyBJZiB3
ZSBmaW5kIG1fbGFzdFJlZ0V4cCBpcyBudWxscHRyLCBpdCBtZWFucyB0aGlzIHNob3VsZCBob2xk
IHRoZSBlbXB0eSBSZWdFeHAuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9S
ZWdFeHBHbG9iYWxEYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9SZWdFeHBHbG9iYWxEYXRhLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwR2xvYmFsRGF0YS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4g
QWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOS0yMDIxIEFwcGxlIElu
Yy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtMzAsMTEgKzMwLDE1IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi12b2lkIFJlZ0V4cEdsb2Jh
bERhdGE6OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlw
ZW5hbWUgVmlzaXRvcj4KK3ZvaWQgUmVnRXhwR2xvYmFsRGF0YTo6dmlzaXRBZ2dyZWdhdGUoVmlz
aXRvciYgdmlzaXRvcikKIHsKICAgICBtX2NhY2hlZFJlc3VsdC52aXNpdEFnZ3JlZ2F0ZSh2aXNp
dG9yKTsKIH0KIAordGVtcGxhdGUgdm9pZCBSZWdFeHBHbG9iYWxEYXRhOjp2aXNpdEFnZ3JlZ2F0
ZShBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIFJlZ0V4cEdsb2JhbERhdGE6
OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJik7CisKIEpTVmFsdWUgUmVnRXhwR2xvYmFsRGF0
YTo6Z2V0QmFja3JlZihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCB1bnNpZ25lZCBpKQog
ewogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1JlZ0V4cEdsb2JhbERhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBHbG9iYWxEYXRhLmgJKHJldmlzaW9uIDI3Mjgz
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cEdsb2JhbERhdGEuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTkg
QXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE5LTIw
MjEgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC00MSw3ICs0MSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldElucHV0KEpT
R2xvYmFsT2JqZWN0KiwgSlNTdHJpbmcqKTsKICAgICBKU1N0cmluZyogaW5wdXQoKSB7IHJldHVy
biBtX2NhY2hlZFJlc3VsdC5pbnB1dCgpOyB9CiAKLSAgICB2b2lkIHZpc2l0QWdncmVnYXRlKFNs
b3RWaXNpdG9yJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCB2aXNpdEFn
Z3JlZ2F0ZShWaXNpdG9yJik7CiAKICAgICBKU1ZhbHVlIGdldEJhY2tyZWYoSlNHbG9iYWxPYmpl
Y3QqLCB1bnNpZ25lZCk7CiAgICAgSlNWYWx1ZSBnZXRMYXN0UGFyZW4oSlNHbG9iYWxPYmplY3Qq
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE9iamVjdC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0
LmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
UmVnRXhwT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiAg
Q29weXJpZ2h0IChDKSAxOTk5LTIwMDAgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKLSAq
ICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAxOSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQu
CisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMjEgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2Vy
dmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwpAQCAtNDYsNyArNDYsOCBAQCB2b2lkIFJlZ0V4cE9i
amVjdDo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtCiAgICAgQVNTRVJUKHR5cGUoKSA9PSBSZWdFeHBP
YmplY3RUeXBlKTsKIH0KIAotdm9pZCBSZWdFeHBPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+
Cit2b2lkIFJlZ0V4cE9iamVjdDo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNp
dG9yJiB2aXNpdG9yKQogewogICAgIFJlZ0V4cE9iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxS
ZWdFeHBPYmplY3QqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNP
YmplY3QsIGluZm8oKSk7CkBAIC01NSw2ICs1Niw4IEBAIHZvaWQgUmVnRXhwT2JqZWN0Ojp2aXNp
dENoaWxkcmVuKEpTQ2VsbCoKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2xhc3RJ
bmRleCk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihSZWdFeHBPYmplY3QpOworCiBib29s
IFJlZ0V4cE9iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiBvYmplY3QsIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3Bl
cnR5U2xvdCYgc2xvdCkKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBPYmplY3QuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBPYmplY3QuaAkocmV2aXNp
b24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogIENvcHlyaWdodCAoQykg
MTk5OS0yMDAwIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCi0gKiAgQ29weXJpZ2h0IChD
KSAyMDAzLTIwMTkgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogIENvcHlyaWdo
dCAoQykgMjAwMy0yMDIxIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiAg
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2Vu
ZXJhbCBQdWJsaWMKQEAgLTEzMyw3ICsxMzMsNyBAQCBwcml2YXRlOgogICAgIEpTX0VYUE9SVF9Q
UklWQVRFIFJlZ0V4cE9iamVjdChWTSYsIFN0cnVjdHVyZSosIFJlZ0V4cCopOwogICAgIEpTX0VY
UE9SVF9QUklWQVRFIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKIAotICAgIHN0YXRpYyB2b2lk
IHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lU
X0NISUxEUkVOOwogCiAgICAgYm9vbCBsYXN0SW5kZXhJc1dyaXRhYmxlKCkgY29uc3QKICAgICB7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TYW1wbGluZ1Byb2ZpbGVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TYW1wbGluZ1By
b2ZpbGVyLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU2FtcGxpbmdQcm9maWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY1Miw3ICs2NTIs
NyBAQCB2b2lkIFNhbXBsaW5nUHJvZmlsZXI6OnByb2Nlc3NVbnZlcmlmaWVkCiAgICAgbV91bnBy
b2Nlc3NlZFN0YWNrVHJhY2VzLmNsZWFyKCk7CiB9CiAKLXZvaWQgU2FtcGxpbmdQcm9maWxlcjo6
dmlzaXQoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIFNhbXBsaW5nUHJvZmlsZXI6OnZpc2l0
KEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQobV9s
b2NrLmlzTG9ja2VkKCkpOwogICAgIGZvciAoSlNDZWxsKiBjZWxsIDogbV9saXZlQ2VsbFBvaW50
ZXJzKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2FtcGxpbmdQcm9maWxl
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NhbXBsaW5n
UHJvZmlsZXIuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU2FtcGxpbmdQcm9maWxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE3MSw3ICsxNzEsNyBAQCBw
dWJsaWM6CiAgICAgdm9pZCBub3RpY2VKU0xvY2tBY3F1aXNpdGlvbigpOwogICAgIHZvaWQgbm90
aWNlVk1FbnRyeSgpOwogICAgIHZvaWQgc2h1dGRvd24oKTsKLSAgICB2b2lkIHZpc2l0KFNsb3RW
aXNpdG9yJik7CisgICAgdm9pZCB2aXNpdChBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAgICAgTG9j
ayYgZ2V0TG9jaygpIHsgcmV0dXJuIG1fbG9jazsgfQogICAgIHZvaWQgc2V0VGltaW5nSW50ZXJ2
YWwoU2Vjb25kcyBpbnRlcnZhbCkgeyBtX3RpbWluZ0ludGVydmFsID0gaW50ZXJ2YWw7IH0KICAg
ICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHN0YXJ0KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TY29wZWRBcmd1bWVudHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlZEFyZ3VtZW50cy5jcHAJKHJldmlzaW9uIDI3Mjgz
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlZEFyZ3VtZW50cy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1
LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE1LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC05OCw3ICs5OCw4IEBAIFNjb3BlZEFyZ3VtZW50cyogU2NvcGVk
QXJndW1lbnRzOjpjcmVhdGUKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi12b2lkIFNjb3BlZEFy
Z3VtZW50czo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9y
KQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgU2NvcGVkQXJndW1lbnRzOjp2aXNp
dENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgU2Nv
cGVkQXJndW1lbnRzKiB0aGlzT2JqZWN0ID0gc3RhdGljX2Nhc3Q8U2NvcGVkQXJndW1lbnRzKj4o
Y2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkp
OwpAQCAtMTE1LDYgKzExNiw4IEBAIHZvaWQgU2NvcGVkQXJndW1lbnRzOjp2aXNpdENoaWxkcmVu
KEpTQ2UKICAgICB9CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihTY29wZWRBcmd1bWVudHMp
OworCiBTdHJ1Y3R1cmUqIFNjb3BlZEFyZ3VtZW50czo6Y3JlYXRlU3RydWN0dXJlKFZNJiB2bSwg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCiB7CiAgICAg
cmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlw
ZUluZm8oU2NvcGVkQXJndW1lbnRzVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVkQXJndW1lbnRzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVkQXJndW1lbnRzLmgJ
KHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3Bl
ZEFyZ3VtZW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxNS0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjMsOSArNjMsOSBAQCBwdWJsaWM6CiAg
ICAgCiAgICAgLy8gQ3JlYXRlcyBhbiBhcmd1bWVudHMgb2JqZWN0IGJ5IGNvcHlpbmcgdGhlIGFy
Z3VtZW50cyBmcm9tIGEgd2VsbC1kZWZpbmVkIHN0YWNrIGxvY2F0aW9uLgogICAgIHN0YXRpYyBT
Y29wZWRBcmd1bWVudHMqIGNyZWF0ZUJ5Q29weWluZ0Zyb20oVk0mLCBTdHJ1Y3R1cmUqLCBSZWdp
c3RlciogYXJndW1lbnRzU3RhcnQsIHVuc2lnbmVkIHRvdGFsTGVuZ3RoLCBKU0Z1bmN0aW9uKiBj
YWxsZWUsIFNjb3BlZEFyZ3VtZW50c1RhYmxlKiwgSlNMZXhpY2FsRW52aXJvbm1lbnQqKTsKLSAg
ICAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7
Ci0gICAgCisKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOworCiAgICAgdWludDMyX3QgaW50
ZXJuYWxMZW5ndGgoKSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJuIG1fdG90YWxMZW5ndGg7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TaW1wbGVUeXBlZEFycmF5Q29u
dHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEz
LCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtNjIsNyArNjIsNyBAQCBib29sIFNpbXBsZVR5cGVkQXJyYXlD
b250cm9sbGVyOjppc0F0b21pCiAgICAgcmV0dXJuIG1fYWxsb3dBdG9taWNzV2FpdDsKIH0KIAot
Ym9vbCBTaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlcjo6SlNBcnJheUJ1ZmZlck93bmVyOjppc1Jl
YWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwg
dm9pZCosIEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCiti
b29sIFNpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyOjpKU0FycmF5QnVmZmVyT3duZXI6OmlzUmVh
Y2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2
b2lkKiwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVh
c29uKQogewogICAgIGlmIChVTkxJS0VMWShyZWFzb24pKQogICAgICAgICAqcmVhc29uID0gIkpT
QXJyYXlCdWZmZXIgaXMgb3BhcXVlIHJvb3QiOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlci5oCShy
ZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TaW1wbGVU
eXBlZEFycmF5Q29udHJvbGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU4LDcgKzU4LDcgQEAgcHVibGlj
OgogcHJpdmF0ZToKICAgICBjbGFzcyBKU0FycmF5QnVmZmVyT3duZXIgZmluYWwgOiBwdWJsaWMg
V2Vha0hhbmRsZU93bmVyIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIGJvb2wgaXNSZWFjaGFibGVG
cm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCwg
U2xvdFZpc2l0b3ImLCBjb25zdCBjaGFyKiogcmVhc29uKSBmaW5hbDsKKyAgICAgICAgYm9vbCBp
c1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lk
KiBjb250ZXh0LCBBYnN0cmFjdFNsb3RWaXNpdG9yJiwgY29uc3QgY2hhcioqIHJlYXNvbikgZmlu
YWw7CiAgICAgICAgIHZvaWQgZmluYWxpemUoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9p
ZCogY29udGV4dCkgZmluYWw7CiAgICAgfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU21hbGxTdHJpbmdzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TbWFsbFN0cmluZ3MuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TbWFsbFN0cmluZ3MuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAxMCBBcHBsZSBJ
bmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAyMSBBcHBs
ZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTY2LDcgKzY2LDcgQEAgdm9pZCBTbWFsbFN0cmluZ3M6OmluaXRpYWxpemVDb21tb25T
dHJpbgogICAgIHNldElzSW5pdGlhbGl6ZWQodHJ1ZSk7CiB9CiAKLXZvaWQgU21hbGxTdHJpbmdz
Ojp2aXNpdFN0cm9uZ1JlZmVyZW5jZXMoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIFNtYWxs
U3RyaW5nczo6dmlzaXRTdHJvbmdSZWZlcmVuY2VzKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0
b3IpCiB7CiAgICAgbV9uZWVkc1RvQmVWaXNpdGVkID0gZmFsc2U7CiAgICAgdmlzaXRvci5hcHBl
bmRVbmJhcnJpZXJlZChtX2VtcHR5U3RyaW5nKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1NtYWxsU3RyaW5ncy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1NtYWxsU3RyaW5ncy5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TbWFsbFN0cmluZ3MuaAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxOSBBcHBsZSBJbmMuIEFs
bCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAyMSBBcHBsZSBJbmMu
IEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTQ5LDkgKzQ5LDkgQEAgY2xhc3MgU3RyaW5nSW1wbDsKIAogbmFtZXNwYWNlIEpTQyB7CiAKK2Ns
YXNzIEFic3RyYWN0U2xvdFZpc2l0b3I7CiBjbGFzcyBWTTsKIGNsYXNzIEpTU3RyaW5nOwotY2xh
c3MgU2xvdFZpc2l0b3I7CiAKIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbWF4U2luZ2xlQ2hh
cmFjdGVyU3RyaW5nID0gMHhGRjsKIApAQCAtNzgsNyArNzgsNyBAQCBwdWJsaWM6CiAgICAgSlNT
dHJpbmcqKiBzaW5nbGVDaGFyYWN0ZXJTdHJpbmdzKCkgeyByZXR1cm4gJm1fc2luZ2xlQ2hhcmFj
dGVyU3RyaW5nc1swXTsgfQogCiAgICAgdm9pZCBpbml0aWFsaXplQ29tbW9uU3RyaW5ncyhWTSYp
OwotICAgIHZvaWQgdmlzaXRTdHJvbmdSZWZlcmVuY2VzKFNsb3RWaXNpdG9yJik7CisgICAgdm9p
ZCB2aXNpdFN0cm9uZ1JlZmVyZW5jZXMoQWJzdHJhY3RTbG90VmlzaXRvciYpOwogCiAjZGVmaW5l
IEpTQ19DT01NT05fU1RSSU5HU19BQ0NFU1NPUl9ERUZJTklUSU9OKG5hbWUpIFwKICAgICBKU1N0
cmluZyogbmFtZSMjU3RyaW5nKCkgY29uc3QgICAgICAgICAgICAgICAgICAgXApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3BhcnNlQXJyYXlWYWx1ZU1hcC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3BhcnNlQXJyYXlWYWx1ZU1h
cC5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1NwYXJzZUFycmF5VmFsdWVNYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjEwLDcgKzIxMCw4
IEBAIEpTVmFsdWUgU3BhcnNlQXJyYXlFbnRyeTo6Z2V0Tm9uU3BhcnNlTW8KICAgICByZXR1cm4g
QmFzZTo6Z2V0KCk7CiB9CiAKLXZvaWQgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6dmlzaXRDaGlsZHJl
bihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUg
VmlzaXRvcj4KK3ZvaWQgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6dmlzaXRDaGlsZHJlbkltcGwoSlND
ZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFNwYXJzZUFycmF5VmFsdWVNYXAq
IHRoaXNPYmplY3QgPSBqc0Nhc3Q8U3BhcnNlQXJyYXlWYWx1ZU1hcCo+KGNlbGwpOwogICAgIEFT
U0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTIyMyw1ICsy
MjQsNyBAQCB2b2lkIFNwYXJzZUFycmF5VmFsdWVNYXA6OnZpc2l0Q2hpbGRyZW4oCiAgICAgdmlz
aXRvci5yZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQodGhpc09iamVjdC0+bV9yZXBvcnRlZENhcGFj
aXR5ICogc2l6ZW9mKE1hcDo6S2V5VmFsdWVQYWlyVHlwZSkpOwogfQogCitERUZJTkVfVklTSVRf
Q0hJTERSRU4oU3BhcnNlQXJyYXlWYWx1ZU1hcCk7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TcGFyc2VBcnJheVZhbHVlTWFwLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3BhcnNlQXJyYXlW
YWx1ZU1hcC5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TcGFyc2VBcnJheVZhbHVlTWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMTUsNyArMTE1
LDcgQEAgcHVibGljOgogICAgIAogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVy
ZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBwcm90b3R5cGUpOwogCi0gICAgc3RhdGlj
IHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVf
VklTSVRfQ0hJTERSRU47CiAKICAgICBib29sIHNwYXJzZU1vZGUoKQogICAgIHsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0YWNrRnJhbWUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0YWNrRnJhbWUuY3BwCShyZXZpc2lvbiAy
NzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdGFja0ZyYW1lLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYt
MjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTE0MSwxMyArMTQxLDUgQEAgU3RyaW5nIFN0YWNrRnJhbWU6OnRv
U3RyaW5nKFZNJiB2bSkgY29ucwogICAgIHJldHVybiB0cmFjZUJ1aWxkLnRvU3RyaW5nKCkuaW1w
bCgpOwogfQogCi12b2lkIFN0YWNrRnJhbWU6OnZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZp
c2l0b3IpCi17Ci0gICAgaWYgKG1fY2FsbGVlKQotICAgICAgICB2aXNpdG9yLmFwcGVuZChtX2Nh
bGxlZSk7Ci0gICAgaWYgKG1fY29kZUJsb2NrKQotICAgICAgICB2aXNpdG9yLmFwcGVuZChtX2Nv
ZGVCbG9jayk7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIEpTQwogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TdGFja0ZyYW1lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU3RhY2tGcmFtZS5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdGFja0ZyYW1lLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0yNiw2ICsyNiw3IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkhlYXAuaCIKKyNpbmNs
dWRlICJTbG90VmlzaXRvck1hY3Jvcy5oIgogI2luY2x1ZGUgIlZNLmgiCiAjaW5jbHVkZSAiV2Fz
bUluZGV4T3JOYW1lLmgiCiAjaW5jbHVkZSAiV3JpdGVCYXJyaWVyLmgiCkBAIC0zNSw3ICszNiw2
IEBAIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBDb2RlQmxvY2s7CiBjbGFzcyBKU09iamVjdDsK
LWNsYXNzIFNsb3RWaXNpdG9yOwogCiBjbGFzcyBTdGFja0ZyYW1lIHsKIHB1YmxpYzoKQEAgLTU3
LDggKzU3LDE2IEBAIHB1YmxpYzoKICAgICAgICAgQVNTRVJUKGhhc0J5dGVjb2RlSW5kZXgoKSk7
CiAgICAgICAgIHJldHVybiBtX2J5dGVjb2RlSW5kZXg7CiAgICAgfQotICAgIAotICAgIHZvaWQg
dmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYpOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlz
aXRvcj4KKyAgICB2b2lkIHZpc2l0Q2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKKyAgICB7Cisg
ICAgICAgIGlmIChtX2NhbGxlZSkKKyAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kKG1fY2FsbGVl
KTsKKyAgICAgICAgaWYgKG1fY29kZUJsb2NrKQorICAgICAgICAgICAgdmlzaXRvci5hcHBlbmQo
bV9jb2RlQmxvY2spOworICAgIH0KKwogICAgIGJvb2wgaXNNYXJrZWQoVk0mIHZtKSBjb25zdCB7
IHJldHVybiAoIW1fY2FsbGVlIHx8IHZtLmhlYXAuaXNNYXJrZWQobV9jYWxsZWUuZ2V0KCkpKSAm
JiAoIW1fY29kZUJsb2NrIHx8IHZtLmhlYXAuaXNNYXJrZWQobV9jb2RlQmxvY2suZ2V0KCkpKTsg
fQogCiBwcml2YXRlOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0
dXJlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1
Y3R1cmUuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TdHJ1Y3R1cmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAwOC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqIENvcHlyaWdodCAoQykgMjAyMCBBbGV4ZXkgU2h2YXlrYSA8c2h2YWlrYWxlc2hAZ21h
aWwuY29tPi4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTEyNjgsNyArMTI2OCw4IEBAIHZvaWQgU3Ry
dWN0dXJlOjpkaWRUcmFuc2l0aW9uRnJvbVRoaXNTdHIKICAgICAgICAgbV90cmFuc2l0aW9uV2F0
Y2hwb2ludFNldC5maXJlQWxsKHZtKCksIFN0cnVjdHVyZUZpcmVEZXRhaWwodGhpcykpOwogfQog
Ci12b2lkIFN0cnVjdHVyZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9y
JiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgU3RydWN0dXJlOjp2
aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAg
U3RydWN0dXJlKiB0aGlzT2JqZWN0ID0ganNDYXN0PFN0cnVjdHVyZSo+KGNlbGwpOwogICAgIEFT
U0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTEyOTAsMzIg
KzEyOTEsMzggQEAgdm9pZCBTdHJ1Y3R1cmU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZQogICAg
ICAgICAvLyBOT1RFOiBUaGlzIGNhbiBpbnRlcmxlYXZlIGluIHBpbigpLCBpbiB3aGljaCBjYXNl
IGl0IG1heSBzZWUgYSBudWxsIHByb3BlcnR5IHRhYmxlLgogICAgICAgICAvLyBUaGF0J3MgZmlu
ZSwgYmVjYXVzZSB0aGVuIHRoZSBiYXJyaWVyIHdpbGwgZmlyZSBhbmQgd2Ugd2lsbCBzY2FuIHRo
aXMgYWdhaW4uCiAgICAgICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fcHJvcGVydHlU
YWJsZVVuc2FmZSk7Ci0gICAgfSBlbHNlIGlmICh2aXNpdG9yLmlzQW5hbHl6aW5nSGVhcCgpKQor
ICAgIH0gZWxzZSBpZiAodmlzaXRvci52bSgpLmlzQW5hbHl6aW5nSGVhcCgpKQogICAgICAgICB2
aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX3Byb3BlcnR5VGFibGVVbnNhZmUpOwogICAgIGVs
c2UgaWYgKHRoaXNPYmplY3QtPm1fcHJvcGVydHlUYWJsZVVuc2FmZSkKICAgICAgICAgdGhpc09i
amVjdC0+bV9wcm9wZXJ0eVRhYmxlVW5zYWZlLmNsZWFyKCk7CiB9CiAKLWJvb2wgU3RydWN0dXJl
Ojppc0NoZWFwRHVyaW5nR0MoVk0mIHZtKQorREVGSU5FX1ZJU0lUX0NISUxEUkVOKFN0cnVjdHVy
ZSk7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Citib29sIFN0cnVjdHVyZTo6aXNDaGVh
cER1cmluZ0dDKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgLy8gRklYTUU6IFdlIGNvdWxkIG1h
a2UgdGhpcyBldmVuIHNhZmVyIGJ5IHJldHVybmluZyBmYWxzZSBpZiB0aGlzIHN0cnVjdHVyZSdz
IHByb3BlcnR5IHRhYmxlCiAgICAgLy8gaGFzIGFueSBsYXJnZSBwcm9wZXJ0eSBuYW1lcy4KICAg
ICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU3MzM0CiAgICAg
Ci0gICAgcmV0dXJuICghbV9nbG9iYWxPYmplY3QgfHwgdm0uaGVhcC5pc01hcmtlZChtX2dsb2Jh
bE9iamVjdC5nZXQoKSkpCi0gICAgICAgICYmIChoYXNQb2x5UHJvdG8oKSB8fCAhc3RvcmVkUHJv
dG90eXBlT2JqZWN0KCkgfHwgdm0uaGVhcC5pc01hcmtlZChzdG9yZWRQcm90b3R5cGVPYmplY3Qo
KSkpOworICAgIHJldHVybiAoIW1fZ2xvYmFsT2JqZWN0IHx8IHZpc2l0b3IuaXNNYXJrZWQobV9n
bG9iYWxPYmplY3QuZ2V0KCkpKQorICAgICAgICAmJiAoaGFzUG9seVByb3RvKCkgfHwgIXN0b3Jl
ZFByb3RvdHlwZU9iamVjdCgpIHx8IHZpc2l0b3IuaXNNYXJrZWQoc3RvcmVkUHJvdG90eXBlT2Jq
ZWN0KCkpKTsKIH0KIAotYm9vbCBTdHJ1Y3R1cmU6Om1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK2Jvb2wgU3RydWN0dXJlOjptYXJr
SWZDaGVhcChWaXNpdG9yJiB2aXNpdG9yKQogewotICAgIFZNJiB2bSA9IHZpc2l0b3Iudm0oKTsK
LSAgICBpZiAoIWlzQ2hlYXBEdXJpbmdHQyh2bSkpCi0gICAgICAgIHJldHVybiB2bS5oZWFwLmlz
TWFya2VkKHRoaXMpOwotICAgIAorICAgIGlmICghaXNDaGVhcER1cmluZ0dDKHZpc2l0b3IpKQor
ICAgICAgICByZXR1cm4gdmlzaXRvci5pc01hcmtlZCh0aGlzKTsKKwogICAgIHZpc2l0b3IuYXBw
ZW5kVW5iYXJyaWVyZWQodGhpcyk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK3RlbXBsYXRlIGJv
b2wgU3RydWN0dXJlOjptYXJrSWZDaGVhcChTbG90VmlzaXRvciYpOwordGVtcGxhdGUgYm9vbCBT
dHJ1Y3R1cmU6Om1hcmtJZkNoZWFwKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKKwogUmVmPFN0cnVj
dHVyZVNoYXBlPiBTdHJ1Y3R1cmU6OnRvU3RydWN0dXJlU2hhcGUoSlNWYWx1ZSB2YWx1ZSwgYm9v
bCYgc2F3UG9seVByb3RvU3RydWN0dXJlKQogewogICAgIFJlZjxTdHJ1Y3R1cmVTaGFwZT4gYmFz
ZVNoYXBlID0gU3RydWN0dXJlU2hhcGU6OmNyZWF0ZSgpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOC0yMDIwIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjAs
NyArNjAsNiBAQCBjbGFzcyBQcm9wZXJ0eU5hbWVBcnJheURhdGE7CiBjbGFzcyBQcm9wZXJ0eVRh
YmxlOwogY2xhc3MgU3RydWN0dXJlQ2hhaW47CiBjbGFzcyBTdHJ1Y3R1cmVTaGFwZTsKLWNsYXNz
IFNsb3RWaXNpdG9yOwogY2xhc3MgSlNTdHJpbmc7CiBzdHJ1Y3QgRHVtcENvbnRleHQ7CiBzdHJ1
Y3QgSGFzaFRhYmxlOwpAQCAtMzEwLDcgKzMwOSw3IEBAIHB1YmxpYzoKICAgICBKU1ZhbHVlIHBy
b3RvdHlwZUZvckxvb2t1cChKU0dsb2JhbE9iamVjdCosIEpTQ2VsbCogYmFzZSkgY29uc3Q7CiAg
ICAgU3RydWN0dXJlQ2hhaW4qIHByb3RvdHlwZUNoYWluKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBK
U09iamVjdCogYmFzZSkgY29uc3Q7CiAgICAgU3RydWN0dXJlQ2hhaW4qIHByb3RvdHlwZUNoYWlu
KEpTR2xvYmFsT2JqZWN0KiwgSlNPYmplY3QqIGJhc2UpIGNvbnN0OwotICAgIHN0YXRpYyB2b2lk
IHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lU
X0NISUxEUkVOOwogICAgIAogICAgIC8vIEEgU3RydWN0dXJlIGlzIGNoZWFwIHRvIG1hcmsgZHVy
aW5nIEdDIGlmIGRvaW5nIHNvIHdvdWxkIG9ubHkgYWRkIGEgc21hbGwgYW5kIGJvdW5kZWQgYW1v
dW50CiAgICAgLy8gdG8gb3VyIGhlYXAgZm9vdHByaW50LiBGb3IgZXhhbXBsZSwgaWYgdGhlIHN0
cnVjdHVyZSByZWZlcnMgdG8gYSBnbG9iYWwgb2JqZWN0IHRoYXQgaXMgbm90CkBAIC0zMTgsMTAg
KzMxNywxMCBAQCBwdWJsaWM6CiAgICAgLy8gaW5jcmVhc2UgaW4gZm9vdHByaW50IGJlY2F1c2Ug
bm8gb3RoZXIgb2JqZWN0IHJlZmVycyB0byB0aGF0IGdsb2JhbCBvYmplY3QuIFRoaXMgbWV0aG9k
CiAgICAgLy8gcmV0dXJucyB0cnVlIGlmIGFsbCB1c2VyLWNvbnRyb2xsZWQgKGFuZCBoZW5jZSB1
bmJvdW5kZWQgaW4gc2l6ZSkgb2JqZWN0cyByZWZlcmVuY2VkIGZyb20gdGhlCiAgICAgLy8gU3Ry
dWN0dXJlIGFyZSBhbHJlYWR5IG1hcmtlZC4KLSAgICBib29sIGlzQ2hlYXBEdXJpbmdHQyhWTSYp
OworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IGJvb2wgaXNDaGVhcER1cmluZ0dDKFZp
c2l0b3ImKTsKICAgICAKICAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhpcyBzdHJ1Y3R1cmUgaXMg
bm93IG1hcmtlZC4KLSAgICBib29sIG1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJik7CisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gYm9vbCBtYXJrSWZDaGVhcChWaXNpdG9yJik7CiAgICAg
CiAgICAgYm9vbCBoYXNSYXJlRGF0YSgpIGNvbnN0CiAgICAgewpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlQ2hhaW4uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUNoYWluLmNwcAkocmV2aXNpb24gMjcy
ODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlQ2hhaW4uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAw
OCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgt
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTY2LDcgKzY2LDggQEAgdm9pZCBTdHJ1Y3R1cmVDaGFpbjo6ZmluaXNo
Q3JlYXRpb24oVk0mIAogICAgIH0KIH0KIAotdm9pZCBTdHJ1Y3R1cmVDaGFpbjo6dmlzaXRDaGls
ZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5h
bWUgVmlzaXRvcj4KK3ZvaWQgU3RydWN0dXJlQ2hhaW46OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2Vs
bCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBTdHJ1Y3R1cmVDaGFpbiogdGhpc09i
amVjdCA9IGpzQ2FzdDxTdHJ1Y3R1cmVDaGFpbio+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpF
Q1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTgwLDQgKzgxLDYgQEAgdm9pZCBT
dHJ1Y3R1cmVDaGFpbjo6dmlzaXRDaGlsZHJlbihKU0NlbAogICAgIH0KIH0KIAorREVGSU5FX1ZJ
U0lUX0NISUxEUkVOKFN0cnVjdHVyZUNoYWluKTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVDaGFpbi5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUNoYWluLmgJKHJl
dmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVy
ZUNoYWluLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDA4LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDA4LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01MSw3ICs1MSw3IEBAIHB1YmxpYzoKIAogICAg
IHN0YXRpYyBTdHJ1Y3R1cmVDaGFpbiogY3JlYXRlKFZNJiwgSlNPYmplY3QqKTsKICAgICBTdHJ1
Y3R1cmVJRCogaGVhZCgpIHsgcmV0dXJuIG1fdmVjdG9yLmdldCgpOyB9Ci0gICAgc3RhdGljIHZv
aWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklT
SVRfQ0hJTERSRU47CiAKICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0m
IHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKICAg
ICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVSYXJlRGF0
YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0
dXJlUmFyZURhdGEuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TdHJ1Y3R1cmVSYXJlRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjAgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02Nyw3
ICs2Nyw4IEBAIFN0cnVjdHVyZVJhcmVEYXRhOjpTdHJ1Y3R1cmVSYXJlRGF0YShWTSYKICAgICAg
ICAgbV9wcmV2aW91cy5zZXQodm0sIHRoaXMsIHByZXZpb3VzKTsKIH0KIAotdm9pZCBTdHJ1Y3R1
cmVSYXJlRGF0YTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNp
dG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgU3RydWN0dXJlUmFyZURhdGE6
OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAg
ICBTdHJ1Y3R1cmVSYXJlRGF0YSogdGhpc09iamVjdCA9IGpzQ2FzdDxTdHJ1Y3R1cmVSYXJlRGF0
YSo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5m
bygpKTsKQEAgLTg2LDYgKzg3LDggQEAgdm9pZCBTdHJ1Y3R1cmVSYXJlRGF0YTo6dmlzaXRDaGls
ZHJlbihKUwogICAgIH0KIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKFN0cnVjdHVyZVJhcmVE
YXRhKTsKKwogLy8gLS0tLS0tLS0tLS0gQ2FjaGVkIHNwZWNpYWwgcHJvcGVydGllcyBoZWxwZXIg
d2F0Y2hwb2ludCBjbGFzc2VzIC0tLS0tLS0tLS0tCiAKIGNsYXNzIENhY2hlZFNwZWNpYWxQcm9w
ZXJ0eUFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludCBmaW5hbCA6IHB1Ymxp
YyBBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnRCYXNlIHsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZVJhcmVEYXRhLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlUmFyZURhdGEuaAko
cmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0
dXJlUmFyZURhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY4LDcgKzY4LDcgQEAgcHVibGljOgog
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0Rlc3RydWN0aW9uID0gdHJ1ZTsKICAgICBz
dGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGls
ZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47
CiAKICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9i
amVjdCosIEpTVmFsdWUgcHJvdG90eXBlKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU3ltYm9sVGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1N5bWJvbFRhYmxlLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE5IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDIxIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtOTIsNyArOTIsOCBAQCB2b2lkIFN5bWJvbFRhYmxlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0p
CiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwogfQogCi12b2lkIFN5bWJvbFRhYmxlOjp2
aXNpdENoaWxkcmVuKEpTQ2VsbCogdGhpc0NlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVt
cGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgU3ltYm9sVGFibGU6OnZpc2l0Q2hpbGRyZW5J
bXBsKEpTQ2VsbCogdGhpc0NlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgU3ltYm9sVGFi
bGUqIHRoaXNTeW1ib2xUYWJsZSA9IGpzQ2FzdDxTeW1ib2xUYWJsZSo+KHRoaXNDZWxsKTsKICAg
ICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNTeW1ib2xUYWJsZSwgaW5mbygpKTsKQEAg
LTEwOCw2ICsxMDksOCBAQCB2b2lkIFN5bWJvbFRhYmxlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCog
CiAgICAgdGhpc1N5bWJvbFRhYmxlLT5tX2xvY2FsVG9FbnRyeSA9IG51bGxwdHI7CiB9CiAKK0RF
RklORV9WSVNJVF9DSElMRFJFTihTeW1ib2xUYWJsZSk7CisKIGNvbnN0IFN5bWJvbFRhYmxlOjpM
b2NhbFRvRW50cnlWZWMmIFN5bWJvbFRhYmxlOjpsb2NhbFRvRW50cnkoY29uc3QgQ29uY3VycmVu
dEpTTG9ja2VyJikKIHsKICAgICBpZiAoVU5MSUtFTFkoIW1fbG9jYWxUb0VudHJ5KSkgewpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFibGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TeW1ib2xUYWJsZS5oCShyZXZpc2lv
biAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TeW1ib2xUYWJsZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAw
Ny0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAwNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtNzMzLDcgKzczMyw3IEBAIHB1YmxpYzoKICAgICAgICAgbV9z
aW5nbGV0b24ubm90aWZ5V3JpdGUodm0sIHRoaXMsIHNjb3BlLCByZWFzb24pOwogICAgIH0KIAot
ICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAg
ICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgREVDTEFSRV9FWFBPUlRfSU5GTzsKIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZVByb2ZpbGVyTG9nLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlUHJvZmlsZXJM
b2cuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9UeXBlUHJvZmlsZXJMb2cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxNC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTI0LDcgKzEyNCw3IEBA
IHZvaWQgVHlwZVByb2ZpbGVyTG9nOjpwcm9jZXNzTG9nRW50cmllcygKICAgICB9CiB9CiAKLXZv
aWQgVHlwZVByb2ZpbGVyTG9nOjp2aXNpdChTbG90VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgVHlw
ZVByb2ZpbGVyTG9nOjp2aXNpdChBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAg
IGZvciAoTG9nRW50cnkqIGVudHJ5ID0gbV9sb2dTdGFydFB0cjsgZW50cnkgIT0gbV9jdXJyZW50
TG9nRW50cnlQdHI7ICsrZW50cnkpIHsKICAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJl
ZChlbnRyeS0+dmFsdWUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlw
ZVByb2ZpbGVyTG9nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvVHlwZVByb2ZpbGVyTG9nLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1R5cGVQcm9maWxlckxvZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU5LDcgKzU5
LDcgQEAgcHVibGljOgogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgcHJvY2Vzc0xvZ0VudHJp
ZXMoVk0mLCBjb25zdCBTdHJpbmcmKTsKICAgICBMb2dFbnRyeSogbG9nRW5kUHRyKCkgY29uc3Qg
eyByZXR1cm4gbV9sb2dFbmRQdHI7IH0KIAotICAgIHZvaWQgdmlzaXQoU2xvdFZpc2l0b3ImKTsK
KyAgICB2b2lkIHZpc2l0KEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKIAogICAgIHN0YXRpYyBwdHJk
aWZmX3QgbG9nU3RhcnRPZmZzZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoVHlwZVByb2Zp
bGVyTG9nLCBtX2xvZ1N0YXJ0UHRyKTsgfQogICAgIHN0YXRpYyBwdHJkaWZmX3QgY3VycmVudExv
Z0VudHJ5T2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFR5cGVQcm9maWxlckxvZywg
bV9jdXJyZW50TG9nRW50cnlQdHIpOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9WTS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZN
LmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZN
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDA4LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDA4LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0xMjEsNiArMTIxLDcgQEAgY2xhc3MgRmFzdE1hbGxvY0Fs
aWduZWRNZW1vcnlBbGxvY2F0b3I7CiBjbGFzcyBHaWdhY2FnZUFsaWduZWRNZW1vcnlBbGxvY2F0
b3I7CiBjbGFzcyBIYW5kbGVTdGFjazsKIGNsYXNzIEhhc093blByb3BlcnR5Q2FjaGU7CitjbGFz
cyBIZWFwQW5hbHl6ZXI7CiBjbGFzcyBIZWFwUHJvZmlsZXI7CiBjbGFzcyBJZGVudGlmaWVyOwog
Y2xhc3MgSW50ZXJwcmV0ZXI7CkBAIC0zMTAsNiArMzExLDEwIEBAIHB1YmxpYzoKICAgICBIZWFw
UHJvZmlsZXIqIGhlYXBQcm9maWxlcigpIGNvbnN0IHsgcmV0dXJuIG1faGVhcFByb2ZpbGVyLmdl
dCgpOyB9CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgSGVhcFByb2ZpbGVyJiBlbnN1cmVIZWFwUHJv
ZmlsZXIoKTsKIAorICAgIGJvb2wgaXNBbmFseXppbmdIZWFwKCkgY29uc3QgeyByZXR1cm4gbV9h
Y3RpdmVIZWFwQW5hbHl6ZXI7IH0KKyAgICBIZWFwQW5hbHl6ZXIqIGFjdGl2ZUhlYXBBbmFseXpl
cigpIGNvbnN0IHsgcmV0dXJuIG1fYWN0aXZlSGVhcEFuYWx5emVyOyB9CisgICAgdm9pZCBzZXRB
Y3RpdmVIZWFwQW5hbHl6ZXIoSGVhcEFuYWx5emVyKiBhbmFseXplcikgeyBtX2FjdGl2ZUhlYXBB
bmFseXplciA9IGFuYWx5emVyOyB9CisKICNpZiBFTkFCTEUoU0FNUExJTkdfUFJPRklMRVIpCiAg
ICAgU2FtcGxpbmdQcm9maWxlciogc2FtcGxpbmdQcm9maWxlcigpIHsgcmV0dXJuIG1fc2FtcGxp
bmdQcm9maWxlci5nZXQoKTsgfQogICAgIEpTX0VYUE9SVF9QUklWQVRFIFNhbXBsaW5nUHJvZmls
ZXImIGVuc3VyZVNhbXBsaW5nUHJvZmlsZXIoUmVmPFN0b3B3YXRjaD4mJik7CkBAIC0xMTk1LDkg
KzEyMDAsMTAgQEAgcHVibGljOgogICAgIGJvb2wgZGlkRW50ZXJWTSB7IGZhbHNlIH07CiBwcml2
YXRlOgogICAgIGJvb2wgbV9mYWlsTmV4dE5ld0NvZGVCbG9jayB7IGZhbHNlIH07Ci0gICAgRGVs
ZXRlUHJvcGVydHlNb2RlIG1fZGVsZXRlUHJvcGVydHlNb2RlIHsgRGVsZXRlUHJvcGVydHlNb2Rl
OjpEZWZhdWx0IH07CiAgICAgYm9vbCBtX2dsb2JhbENvbnN0UmVkZWNsYXJhdGlvblNob3VsZFRo
cm93IHsgdHJ1ZSB9OwogICAgIGJvb2wgbV9zaG91bGRCdWlsZFBDVG9Db2RlT3JpZ2luTWFwcGlu
ZyB7IGZhbHNlIH07CisgICAgRGVsZXRlUHJvcGVydHlNb2RlIG1fZGVsZXRlUHJvcGVydHlNb2Rl
IHsgRGVsZXRlUHJvcGVydHlNb2RlOjpEZWZhdWx0IH07CisgICAgSGVhcEFuYWx5emVyKiBtX2Fj
dGl2ZUhlYXBBbmFseXplciB7IG51bGxwdHIgfTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q29kZUNh
Y2hlPiBtX2NvZGVDYWNoZTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SW50bENhY2hlPiBtX2ludGxD
YWNoZTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8QnVpbHRpbkV4ZWN1dGFibGVzPiBtX2J1aWx0aW5F
eGVjdXRhYmxlczsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtNYXBJ
bXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9XZWFr
TWFwSW1wbC5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1dlYWtNYXBJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICogQ29weXJpZ2h0IChDKSAyMDE3IFl1c3VrZSBTdXp1a2kgPHV0YXRhbmUudGVhQGdtYWls
LmNvbT4uCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0zOSw4ICszOSw5IEBAIHZvaWQgV2Vha01hcElt
cGw8V2Vha01hcEJ1Y2tldD46OmRlc3Ryb3kKICAgICBzdGF0aWNfY2FzdDxXZWFrTWFwSW1wbCo+
KGNlbGwpLT5+V2Vha01hcEltcGwoKTsKIH0KIAotdGVtcGxhdGUgPHR5cGVuYW1lIFdlYWtNYXBC
dWNrZXQ+Ci12b2lkIFdlYWtNYXBJbXBsPFdlYWtNYXBCdWNrZXQ+Ojp2aXNpdENoaWxkcmVuKEpT
Q2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBXZWFr
TWFwQnVja2V0PgordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgV2Vha01hcEltcGw8
V2Vha01hcEJ1Y2tldD46OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYg
dmlzaXRvcikKIHsKICAgICBXZWFrTWFwSW1wbCogdGhpc09iamVjdCA9IGpzQ2FzdDxXZWFrTWFw
SW1wbCo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwg
aW5mbygpKTsKQEAgLTQ4LDYgKzQ5LDggQEAgdm9pZCBXZWFrTWFwSW1wbDxXZWFrTWFwQnVja2V0
Pjo6dmlzaXRDaAogICAgIHZpc2l0b3IucmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKHRoaXNPYmpl
Y3QtPm1fY2FwYWNpdHkgKiBzaXplb2YoV2Vha01hcEJ1Y2tldCkpOwogfQogCitERUZJTkVfVklT
SVRfQ0hJTERSRU5fV0lUSF9NT0RJRklFUih0ZW1wbGF0ZTx0eXBlbmFtZSBXZWFrTWFwQnVja2V0
PiwgV2Vha01hcEltcGw8V2Vha01hcEJ1Y2tldD4pOworCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgV2Vh
a01hcEJ1Y2tldD4KIHNpemVfdCBXZWFrTWFwSW1wbDxXZWFrTWFwQnVja2V0Pjo6ZXN0aW1hdGVk
U2l6ZShKU0NlbGwqIGNlbGwsIFZNJiB2bSkKIHsKQEAgLTU2LDE1ICs1OSwxNCBAQCBzaXplX3Qg
V2Vha01hcEltcGw8V2Vha01hcEJ1Y2tldD46OmVzdGltCiB9CiAKIHRlbXBsYXRlIDw+Ci12b2lk
IFdlYWtNYXBJbXBsPFdlYWtNYXBCdWNrZXQ8V2Vha01hcEJ1Y2tldERhdGFLZXk+Pjo6dmlzaXRP
dXRwdXRDb25zdHJhaW50cyhKU0NlbGwqLCBTbG90VmlzaXRvciYpCit2b2lkIFdlYWtNYXBJbXBs
PFdlYWtNYXBCdWNrZXQ8V2Vha01hcEJ1Y2tldERhdGFLZXk+Pjo6dmlzaXRPdXRwdXRDb25zdHJh
aW50cyhKU0NlbGwqLCBBYnN0cmFjdFNsb3RWaXNpdG9yJikKIHsKICAgICAvLyBPbmx5IEpTV2Vh
a01hcCBuZWVkcyB0byBoYXJ2ZXN0IHZhbHVlIHJlZmVyZW5jZXMKIH0KIAogdGVtcGxhdGUgPD4K
LXZvaWQgV2Vha01hcEltcGw8V2Vha01hcEJ1Y2tldDxXZWFrTWFwQnVja2V0RGF0YUtleVZhbHVl
Pj46OnZpc2l0T3V0cHV0Q29uc3RyYWludHMoSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlz
aXRvcikKK3ZvaWQgV2Vha01hcEltcGw8V2Vha01hcEJ1Y2tldDxXZWFrTWFwQnVja2V0RGF0YUtl
eVZhbHVlPj46OnZpc2l0T3V0cHV0Q29uc3RyYWludHMoSlNDZWxsKiBjZWxsLCBBYnN0cmFjdFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQogewotICAgIFZNJiB2bSA9IHZpc2l0b3Iudm0oKTsKICAgICBh
dXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PFdlYWtNYXBJbXBsKj4oY2VsbCk7CiAgICAgYXV0byBs
b2NrZXIgPSBob2xkTG9jayh0aGlzT2JqZWN0LT5jZWxsTG9jaygpKTsKICAgICBhdXRvKiBidWZm
ZXIgPSB0aGlzT2JqZWN0LT5idWZmZXIoKTsKQEAgLTcyLDcgKzc0LDcgQEAgdm9pZCBXZWFrTWFw
SW1wbDxXZWFrTWFwQnVja2V0PFdlYWtNYXBCdQogICAgICAgICBhdXRvKiBidWNrZXQgPSBidWZm
ZXIgKyBpbmRleDsKICAgICAgICAgaWYgKGJ1Y2tldC0+aXNFbXB0eSgpIHx8IGJ1Y2tldC0+aXNE
ZWxldGVkKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgaWYgKCF2bS5oZWFwLmlz
TWFya2VkKGJ1Y2tldC0+a2V5KCkpKQorICAgICAgICBpZiAoIXZpc2l0b3IuaXNNYXJrZWQoYnVj
a2V0LT5rZXkoKSkpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgYnVja2V0LT52aXNp
dEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9XZWFrTWFwSW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1dlYWtNYXBJbXBsLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1dlYWtNYXBJbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDE3IFl1c3VrZSBTdXp1a2kgPHV0
YXRhbmUudGVhQGdtYWlsLmNvbT4uCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0xNDUsNyArMTQ1LDcg
QEAgcHVibGljOgogICAgIH0KIAogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUID0gRGF0YT4KLSAg
ICBBTFdBWVNfSU5MSU5FIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTxULCBX
ZWFrTWFwQnVja2V0RGF0YUtleVZhbHVlPjo6dmFsdWU+Ojp0eXBlIHZpc2l0QWdncmVnYXRlKFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQorICAgIEFMV0FZU19JTkxJTkUgdHlwZW5hbWUgc3RkOjplbmFi
bGVfaWY8c3RkOjppc19zYW1lPFQsIFdlYWtNYXBCdWNrZXREYXRhS2V5VmFsdWU+Ojp2YWx1ZT46
OnR5cGUgdmlzaXRBZ2dyZWdhdGUoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKICAgICB7
CiAgICAgICAgIHZpc2l0b3IuYXBwZW5kKG1fZGF0YS52YWx1ZSk7CiAgICAgfQpAQCAtMjAyLDcg
KzIwMiw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNEZXN0cnVj
dGlvbiA9IHRydWU7CiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKIAotICAgIHN0
YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNM
QVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgc3RhdGljIHNpemVfdCBlc3RpbWF0ZWRTaXplKEpT
Q2VsbCosIFZNJik7CiAKQEAgLTMxMSw3ICszMTEsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVy
biB2bS53ZWFrU2V0U3BhY2U8bW9kZT4oKTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNp
dE91dHB1dENvbnN0cmFpbnRzKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgc3RhdGljIHZv
aWQgdmlzaXRPdXRwdXRDb25zdHJhaW50cyhKU0NlbGwqLCBBYnN0cmFjdFNsb3RWaXNpdG9yJik7
CiAgICAgdm9pZCBmaW5hbGl6ZVVuY29uZGl0aW9uYWxseShWTSYpOwogCiBwcml2YXRlOgpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0pTRG9sbGFyVk0uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9KU0RvbGxhclZNLmNwcAkocmV2aXNpb24g
MjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0pTRG9sbGFyVk0uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0y
MDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
NS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMjI0LDE0ICsyMjQsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGZp
bmlzaENyZWF0aW9uKFZNJiwgUm9vdCopOwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJl
bihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQotICAgIHsKLSAgICAgICAgRG9s
bGFyVk1Bc3NlcnRTY29wZSBhc3NlcnRTY29wZTsKLSAgICAgICAgRWxlbWVudCogdGhpc09iamVj
dCA9IGpzQ2FzdDxFbGVtZW50Kj4oY2VsbCk7Ci0gICAgICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5I
RVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKLSAgICAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0
aGlzT2JqZWN0LCB2aXNpdG9yKTsKLSAgICAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+
bV9yb290KTsKLSAgICB9CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIHN0YXRp
YyBFbGVtZW50SGFuZGxlT3duZXIqIGhhbmRsZU93bmVyKCk7CiAKQEAgLTI0NywxMCArMjQwLDIy
IEBAIHByaXZhdGU6CiAgICAgV3JpdGVCYXJyaWVyPFJvb3Q+IG1fcm9vdDsKIH07CiAKK3RlbXBs
YXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEVsZW1lbnQ6OnZpc2l0Q2hpbGRyZW5JbXBsKEpT
Q2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBEb2xsYXJWTUFzc2VydFNjb3Bl
IGFzc2VydFNjb3BlOworICAgIEVsZW1lbnQqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8RWxlbWVudCo+
KGNlbGwpOworICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygp
KTsKKyAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOworICAgIHZp
c2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fcm9vdCk7Cit9CisKK0RFRklORV9WSVNJVF9DSElM
RFJFTihFbGVtZW50KTsKKwogY2xhc3MgRWxlbWVudEhhbmRsZU93bmVyIGZpbmFsIDogcHVibGlj
IFdlYWtIYW5kbGVPd25lciB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6
Ci0gICAgYm9vbCBpc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVu
a25vd24+IGhhbmRsZSwgdm9pZCosIFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiog
cmVhc29uKSBmaW5hbAorICAgIGJvb2wgaXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpI
YW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBBYnN0cmFjdFNsb3RWaXNpdG9yJiB2
aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKSBmaW5hbAogICAgIHsKICAgICAgICAgRG9sbGFy
Vk1Bc3NlcnRTY29wZSBhc3NlcnRTY29wZTsKICAgICAgICAgaWYgKFVOTElLRUxZKHJlYXNvbikp
CkBAIC0zMDQsMTggKzMwOSwyMyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6
OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUs
IFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNp
dENoaWxkcmVuKEpTQ2VsbCogdGhpc09iamVjdCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCi0gICAg
ewotICAgICAgICBEb2xsYXJWTUFzc2VydFNjb3BlIGFzc2VydFNjb3BlOwotICAgICAgICBBU1NF
UlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7Ci0gICAgICAgIEJhc2U6
OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7Ci0gICAgICAgIHZpc2l0b3IuYWRk
T3BhcXVlUm9vdCh0aGlzT2JqZWN0KTsKLSAgICB9CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJF
TjsKIAogcHJpdmF0ZToKICAgICBXZWFrPEVsZW1lbnQ+IG1fZWxlbWVudDsKIH07CiAKK3RlbXBs
YXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFJvb3Q6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2Vs
bCogdGhpc09iamVjdCwgVmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBEb2xsYXJWTUFzc2VydFNj
b3BlIGFzc2VydFNjb3BlOworICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVj
dCwgaW5mbygpKTsKKyAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3Ip
OworICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdCh0aGlzT2JqZWN0KTsKK30KKworREVGSU5FX1ZJ
U0lUX0NISUxEUkVOKFJvb3QpOworCiBjbGFzcyBTaW1wbGVPYmplY3QgOiBwdWJsaWMgSlNOb25G
aW5hbE9iamVjdCB7CiBwdWJsaWM6CiAgICAgU2ltcGxlT2JqZWN0KFZNJiB2bSwgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUpCkBAIC0zNDAsMTQgKzM1MCw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJu
IHNpbXBsZU9iamVjdDsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpT
Q2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCi0gICAgewotICAgICAgICBEb2xsYXJW
TUFzc2VydFNjb3BlIGFzc2VydFNjb3BlOwotICAgICAgICBTaW1wbGVPYmplY3QqIHRoaXNPYmpl
Y3QgPSBqc0Nhc3Q8U2ltcGxlT2JqZWN0Kj4oY2VsbCk7Ci0gICAgICAgIEFTU0VSVF9HQ19PQkpF
Q1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKLSAgICAgICAgQmFzZTo6dmlzaXRDaGls
ZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKLSAgICAgICAgdmlzaXRvci5hcHBlbmQodGhpc09i
amVjdC0+bV9oaWRkZW5WYWx1ZSk7Ci0gICAgfQorICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47
CiAKICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKICAgICB7CkBAIC0zODAs
NiArMzgzLDE4IEBAIHByaXZhdGU6CiAgICAgV3JpdGVCYXJyaWVyPEpTQzo6VW5rbm93bj4gbV9o
aWRkZW5WYWx1ZTsKIH07CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFNpbXBs
ZU9iamVjdDo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9y
KQoreworICAgIERvbGxhclZNQXNzZXJ0U2NvcGUgYXNzZXJ0U2NvcGU7CisgICAgU2ltcGxlT2Jq
ZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PFNpbXBsZU9iamVjdCo+KGNlbGwpOworICAgIEFTU0VS
VF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKKyAgICBCYXNlOjp2aXNp
dENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOworICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNP
YmplY3QtPm1faGlkZGVuVmFsdWUpOworfQorCitERUZJTkVfVklTSVRfQ0hJTERSRU4oU2ltcGxl
T2JqZWN0KTsKKwogY2xhc3MgSW1wdXJlR2V0dGVyIDogcHVibGljIEpTTm9uRmluYWxPYmplY3Qg
ewogcHVibGljOgogICAgIEltcHVyZUdldHRlcihWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJl
KQpAQCAtNDM2LDE0ICs0NTEsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBCYXNlOjpnZXRP
d25Qcm9wZXJ0eVNsb3Qob2JqZWN0LCBnbG9iYWxPYmplY3QsIG5hbWUsIHNsb3QpOwogICAgIH0K
IAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRv
ciYgdmlzaXRvcikKLSAgICB7Ci0gICAgICAgIERvbGxhclZNQXNzZXJ0U2NvcGUgYXNzZXJ0U2Nv
cGU7Ci0gICAgICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2VsbCwgaW5mbygpKTsKLSAg
ICAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbihjZWxsLCB2aXNpdG9yKTsKLSAgICAgICAgSW1wdXJl
R2V0dGVyKiB0aGlzT2JqZWN0ID0ganNDYXN0PEltcHVyZUdldHRlcio+KGNlbGwpOwotICAgICAg
ICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2RlbGVnYXRlKTsKLSAgICB9CisgICAgREVD
TEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIHZvaWQgc2V0RGVsZWdhdGUoVk0mIHZtLCBKU09i
amVjdCogZGVsZWdhdGUpCiAgICAgewpAQCAtNDU0LDYgKzQ2MiwxOCBAQCBwcml2YXRlOgogICAg
IFdyaXRlQmFycmllcjxKU09iamVjdD4gbV9kZWxlZ2F0ZTsKIH07CiAKK3RlbXBsYXRlPHR5cGVu
YW1lIFZpc2l0b3I+Cit2b2lkIEltcHVyZUdldHRlcjo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxs
KiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIERvbGxhclZNQXNzZXJ0U2NvcGUgYXNz
ZXJ0U2NvcGU7CisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjZWxsLCBpbmZvKCkpOwor
ICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4oY2VsbCwgdmlzaXRvcik7CisgICAgSW1wdXJlR2V0dGVy
KiB0aGlzT2JqZWN0ID0ganNDYXN0PEltcHVyZUdldHRlcio+KGNlbGwpOworICAgIHZpc2l0b3Iu
YXBwZW5kKHRoaXNPYmplY3QtPm1fZGVsZWdhdGUpOworfQorCitERUZJTkVfVklTSVRfQ0hJTERS
RU4oSW1wdXJlR2V0dGVyKTsKKwogc3RhdGljIEpTQ19ERUNMQVJFX0NVU1RPTV9HRVRURVIoY3Vz
dG9tR2V0dGVyVmFsdWVHZXR0ZXIpOwogc3RhdGljIEpTQ19ERUNMQVJFX0NVU1RPTV9HRVRURVIo
Y3VzdG9tR2V0dGVyQWNlc3NvckdldHRlcik7CiAKQEAgLTE4MjIsMTQgKzE4NDIsNyBAQCBwdWJs
aWM6CiAgICAgICAgIHB1dERpcmVjdE5hdGl2ZUZ1bmN0aW9uKHZtLCBnbG9iYWxPYmplY3QsIElk
ZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJhZGRCeXRlcyIpLCAwLCBmdW5jdGlvbldhc21TdHJl
YW1pbmdDb21waWxlckFkZEJ5dGVzLCBOb0ludHJpbnNpYywgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSkpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lk
IHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKLSAgICB7
Ci0gICAgICAgIERvbGxhclZNQXNzZXJ0U2NvcGUgYXNzZXJ0U2NvcGU7Ci0gICAgICAgIGF1dG8q
IHRoaXNPYmplY3QgPSBqc0Nhc3Q8V2FzbVN0cmVhbWluZ0NvbXBpbGVyKj4oY2VsbCk7Ci0gICAg
ICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKLSAgICAg
ICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKLSAgICAgICAgdmlz
aXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9wcm9taXNlKTsKLSAgICB9CisgICAgREVDTEFSRV9W
SVNJVF9DSElMRFJFTjsKIAogICAgIERFQ0xBUkVfSU5GTzsKIApAQCAtMTgzNyw2ICsxODUwLDE4
IEBAIHB1YmxpYzoKICAgICBSZWY8V2FzbTo6U3RyZWFtaW5nQ29tcGlsZXI+IG1fc3RyZWFtaW5n
Q29tcGlsZXI7CiB9OwogCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBXYXNtU3Ry
ZWFtaW5nQ29tcGlsZXI6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYg
dmlzaXRvcikKK3sKKyAgICBEb2xsYXJWTUFzc2VydFNjb3BlIGFzc2VydFNjb3BlOworICAgIGF1
dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8V2FzbVN0cmVhbWluZ0NvbXBpbGVyKj4oY2VsbCk7Cisg
ICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOworICAgIEJh
c2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CisgICAgdmlzaXRvci5hcHBl
bmQodGhpc09iamVjdC0+bV9wcm9taXNlKTsKK30KKworREVGSU5FX1ZJU0lUX0NISUxEUkVOKFdh
c21TdHJlYW1pbmdDb21waWxlcik7CisKIGNvbnN0IENsYXNzSW5mbyBXYXNtU3RyZWFtaW5nQ29t
cGlsZXI6OnNfaW5mbyA9IHsgIldhc21TdHJlYW1pbmdDb21waWxlciIsICZCYXNlOjpzX2luZm8s
IG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoV2FzbVN0cmVhbWluZ0NvbXBp
bGVyKSB9OwogCiBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oZnVuY3Rpb25XYXNtU3RyZWFtaW5n
Q29tcGlsZXJBZGRCeXRlcywgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFt
ZSogY2FsbEZyYW1lKSkKQEAgLTM2OTksMTMgKzM3MjQsMTYgQEAgdm9pZCBKU0RvbGxhclZNOjph
ZGRDb25zdHJ1Y3RpYmxlRnVuY3RpbwogICAgIHB1dERpcmVjdCh2bSwgaWRlbnRpZmllciwgSlNG
dW5jdGlvbjo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIGFyZ3VtZW50cywgaWRlbnRpZmllci5z
dHJpbmcoKSwgZnVuY3Rpb24sIE5vSW50cmluc2ljLCBmdW5jdGlvbiksIGpzRG9sbGFyVk1Qcm9w
ZXJ0eUF0dHJpYnV0ZXMpOwogfQogCi12b2lkIEpTRG9sbGFyVk06OnZpc2l0Q2hpbGRyZW4oSlND
ZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0
b3I+Cit2b2lkIEpTRG9sbGFyVk06OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlz
aXRvciYgdmlzaXRvcikKIHsKICAgICBKU0RvbGxhclZNKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpT
RG9sbGFyVk0qPihjZWxsKTsKICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZp
c2l0b3IpOwogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fb2JqZWN0RG9pbmdTaWRl
RWZmZWN0UHV0V2l0aG91dENvcnJlY3RTbG90U3RhdHVzU3RydWN0dXJlKTsKIH0KIAorREVGSU5F
X1ZJU0lUX0NISUxEUkVOKEpTRG9sbGFyVk0pOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogSUdO
T1JFX1dBUk5JTkdTX0VORApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0pTRG9s
bGFyVk0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvSlNEb2xs
YXJWTS5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMv
SlNEb2xsYXJWTS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxNS0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNzQsNyArNzQsNyBAQCBwcml2YXRlOgog
ICAgIHZvaWQgYWRkRnVuY3Rpb24oVk0mLCBKU0dsb2JhbE9iamVjdCosIGNvbnN0IGNoYXIqIG5h
bWUsIE5hdGl2ZUZ1bmN0aW9uLCB1bnNpZ25lZCBhcmd1bWVudHMpOwogICAgIHZvaWQgYWRkQ29u
c3RydWN0aWJsZUZ1bmN0aW9uKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBjb25zdCBjaGFyKiBuYW1l
LCBOYXRpdmVGdW5jdGlvbiwgdW5zaWduZWQgYXJndW1lbnRzKTsKIAotICAgIHN0YXRpYyB2b2lk
IHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lU
X0NISUxEUkVOOwogCiAgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gbV9vYmplY3REb2luZ1Np
ZGVFZmZlY3RQdXRXaXRob3V0Q29ycmVjdFNsb3RTdGF0dXNTdHJ1Y3R1cmU7CiB9OwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUdsb2JhbC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUdsb2JhbC5jcHAJKHJldmlzaW9uIDI3Mjgz
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21HbG9iYWwuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTEwMyw3ICsxMDMsOCBAQCB2b2lkIEdsb2JhbDo6c2V0KEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPCiAgICAgfQogfQogCi12b2lkIEdsb2JhbDo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0
b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBHbG9iYWw6OnZp
c2l0QWdncmVnYXRlKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgc3dpdGNoIChtX3R5cGUpIHsK
ICAgICBjYXNlIFdhc206OlR5cGU6OkV4dGVybnJlZjoKQEAgLTExNyw2ICsxMTgsOSBAQCB2b2lk
IEdsb2JhbDo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImCiAgICAgfQogfQogCit0ZW1wbGF0
ZSB2b2lkIEdsb2JhbDo6dmlzaXRBZ2dyZWdhdGUoQWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVt
cGxhdGUgdm9pZCBHbG9iYWw6OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJik7CisKIH0gfSAv
LyBuYW1lc3BhY2UgSlNDOjpHbG9iYWwKIAogI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21HbG9iYWwuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtR2xvYmFsLmgJKHJldmlzaW9uIDI3
MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21HbG9iYWwuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAxOCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTU3LDcgKzU3LDcgQEAgcHVibGljOgogICAgIEpTVmFsdWUgZ2V0KEpTR2xv
YmFsT2JqZWN0KikgY29uc3Q7CiAgICAgdWludDY0X3QgZ2V0UHJpbWl0aXZlKCkgY29uc3QgeyBy
ZXR1cm4gbV92YWx1ZS5tX3ByaW1pdGl2ZTsgfQogICAgIHZvaWQgc2V0KEpTR2xvYmFsT2JqZWN0
KiwgSlNWYWx1ZSk7Ci0gICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYpOworICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgdmlzaXRBZ2dyZWdhdGUoVmlzaXRvciYp
OwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gVCogb3duZXIoKSBjb25zdCB7IHJldHVybiBy
ZWludGVycHJldF9jYXN0PFQqPihtX293bmVyKTsgfQogICAgIHZvaWQgc2V0T3duZXIoSlNPYmpl
Y3QqIG93bmVyKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRhYmxlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGFibGUuY3Bw
CShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGFi
bGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxNy0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTY2LDcgKzE2Niw4IEBAIEpTVmFsdWUgVGFibGU6
OmdldCh1aW50MzJfdCBpbmRleCkgY29uc3QKICAgICByZXR1cm4gbV9qc1ZhbHVlcy5nZXQoKVtp
bmRleCAmIG1fbWFza10uZ2V0KCk7CiB9CiAKLXZvaWQgVGFibGU6OnZpc2l0QWdncmVnYXRlKFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgVGFi
bGU6OnZpc2l0QWdncmVnYXRlKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgUkVMRUFTRV9BU1NF
UlQobV9vd25lcik7CiAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX293bmVyLT5jZWxsTG9j
aygpKTsKQEAgLTE3NCw2ICsxNzUsOSBAQCB2b2lkIFRhYmxlOjp2aXNpdEFnZ3JlZ2F0ZShTbG90
VmlzaXRvciYgCiAgICAgICAgIHZpc2l0b3IuYXBwZW5kKG1fanNWYWx1ZXMuZ2V0KClbaV0pOwog
fQogCit0ZW1wbGF0ZSB2b2lkIFRhYmxlOjp2aXNpdEFnZ3JlZ2F0ZShBYnN0cmFjdFNsb3RWaXNp
dG9yJik7Cit0ZW1wbGF0ZSB2b2lkIFRhYmxlOjp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYp
OworCiBUeXBlIFRhYmxlOjp3YXNtVHlwZSgpIGNvbnN0CiB7CiAgICAgaWYgKGlzRXh0ZXJucmVm
VGFibGUoKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UYWJsZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UYWJsZS5oCShyZXZp
c2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGFibGUuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTct
MjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTgwLDcgKzgwLDcgQEAgcHVibGljOgogICAgIE9wdGlvbmFsPHVp
bnQzMl90PiBncm93KHVpbnQzMl90IGRlbHRhLCBKU1ZhbHVlIGRlZmF1bHRWYWx1ZSk7CiAgICAg
dm9pZCBjb3B5KGNvbnN0IFRhYmxlKiBzcmNUYWJsZSwgdWludDMyX3QgZHN0SW5kZXgsIHVpbnQz
Ml90IHNyY0luZGV4KTsKIAotICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImKTsK
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIHZpc2l0QWdncmVnYXRlKFZpc2l0
b3ImKTsKIAogcHJvdGVjdGVkOgogICAgIFRhYmxlKHVpbnQzMl90IGluaXRpYWwsIE9wdGlvbmFs
PHVpbnQzMl90PiBtYXhpbXVtLCBUYWJsZUVsZW1lbnRUeXBlID0gVGFibGVFbGVtZW50VHlwZTo6
RXh0ZXJucmVmKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTVG9XYXNt
SUNDYWxsZWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L0pTVG9XYXNtSUNDYWxsZWUuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9qcy9KU1RvV2FzbUlDQ2FsbGVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE5LTIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00OSw3
ICs0OSw4IEBAIFN0cnVjdHVyZSogSlNUb1dhc21JQ0NhbGxlZTo6Y3JlYXRlU3RydWMKICAgICBy
ZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBl
SW5mbyhKU0NhbGxlZVR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKIH0KIAotdm9pZCBK
U1RvV2FzbUlDQ2FsbGVlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3Im
IHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1RvV2FzbUlDQ2Fs
bGVlOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7
CiAgICAgSlNUb1dhc21JQ0NhbGxlZSogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1RvV2FzbUlDQ2Fs
bGVlKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBp
bmZvKCkpOwpAQCAtNTgsNiArNTksOCBAQCB2b2lkIEpTVG9XYXNtSUNDYWxsZWU6OnZpc2l0Q2hp
bGRyZW4oSlNDCiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9mdW5jdGlvbik7CiB9
CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU1RvV2FzbUlDQ2FsbGVlKTsKKwogfSAvLyBuYW1l
c3BhY2UgSlNDCiAKICNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1RvV2FzbUlDQ2FsbGVlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNUb1dhc21JQ0NhbGxlZS5oCShyZXZpc2lv
biAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1RvV2FzbUlDQ2Fs
bGVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxOS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtNTYsNyArNTYsNyBAQCBwcml2YXRlOgogICAgIEpTVG9XYXNt
SUNDYWxsZWUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSkKICAgICAgICAgOiBCYXNlKHZtLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSkK
ICAgICB7IH0KLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNp
dG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIFdyaXRlQmFycmllcjxX
ZWJBc3NlbWJseUZ1bmN0aW9uPiBtX2Z1bmN0aW9uOwogfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suY3Bw
CShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dl
YkFzc2VtYmx5Q29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTgyLDcgKzgyLDggQEAg
dm9pZCBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrOjpjbGVhckpTQ2FsbAogICAgICAgICAoKml0ZXIp
LT51bmxpbmsodm0pOwogfQogCi12b2lkIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6OnZpc2l0Q2hp
bGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVu
YW1lIFZpc2l0b3I+Cit2b2lkIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6OnZpc2l0Q2hpbGRyZW5J
bXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU1dlYkFzc2VtYmx5
Q29kZUJsb2NrKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTV2ViQXNzZW1ibHlDb2RlQmxvY2sqPihj
ZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7
CkBAIC05MCw2ICs5MSw4IEBAIHZvaWQgSlNXZWJBc3NlbWJseUNvZGVCbG9jazo6dmlzaXRDaGls
ZHIKICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwogfQogCitE
RUZJTkVfVklTSVRfQ0hJTERSRU4oSlNXZWJBc3NlbWJseUNvZGVCbG9jayk7CisKIHZvaWQgSlNX
ZWJBc3NlbWJseUNvZGVCbG9jazo6ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoVk0mIHZtKQogewog
ICAgIGZvciAoYXV0byBpdGVyID0gbV9jYWxsTGlua0luZm9zLmJlZ2luKCk7ICEhaXRlcjsgKytp
dGVyKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNv
ZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pT
V2ViQXNzZW1ibHlDb2RlQmxvY2suaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIwIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIxIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtODYsNyArODYsNyBAQCBwcml2YXRlOgogICAgIERFQ0xBUkVfRVhQT1JUX0lORk87CiAg
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOwogICAgIHN0
YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJl
bihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAK
ICAgICBSZWY8V2FzbTo6Q29kZUJsb2NrPiBtX2NvZGVCbG9jazsKICAgICBWZWN0b3I8TWFjcm9B
c3NlbWJsZXJDb2RlUmVmPFdhc21FbnRyeVB0clRhZz4+IG1fd2FzbVRvSlNFeGl0U3R1YnM7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5R2xvYmFsLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2Vt
Ymx5R2xvYmFsLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvSlNXZWJBc3NlbWJseUdsb2JhbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNzEsNyArNzEs
OCBAQCB2b2lkIEpTV2ViQXNzZW1ibHlHbG9iYWw6OmRlc3Ryb3koSlNDZWxsCiAgICAgc3RhdGlj
X2Nhc3Q8SlNXZWJBc3NlbWJseUdsb2JhbCo+KGNlbGwpLT5KU1dlYkFzc2VtYmx5R2xvYmFsOjp+
SlNXZWJBc3NlbWJseUdsb2JhbCgpOwogfQogCi12b2lkIEpTV2ViQXNzZW1ibHlHbG9iYWw6OnZp
c2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRl
PHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTV2ViQXNzZW1ibHlHbG9iYWw6OnZpc2l0Q2hpbGRy
ZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU1dlYkFzc2Vt
Ymx5R2xvYmFsKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTV2ViQXNzZW1ibHlHbG9iYWwqPihjZWxs
KTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBA
IC04MCw2ICs4MSw4IEBAIHZvaWQgSlNXZWJBc3NlbWJseUdsb2JhbDo6dmlzaXRDaGlsZHJlbigK
ICAgICB0aGlzT2JqZWN0LT5nbG9iYWwoKS0+dmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7CiB9CiAK
K0RFRklORV9WSVNJVF9DSElMRFJFTihKU1dlYkFzc2VtYmx5R2xvYmFsKTsKKwogfSAvLyBuYW1l
c3BhY2UgSlNDCiAKICNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5R2xvYmFsLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUdsb2JhbC5oCShy
ZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFz
c2VtYmx5R2xvYmFsLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxOS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTksNyArNTksNyBAQCBwdWJsaWM6CiBwcml2
YXRlOgogICAgIEpTV2ViQXNzZW1ibHlHbG9iYWwoVk0mLCBTdHJ1Y3R1cmUqLCBSZWY8V2FzbTo6
R2xvYmFsPiYmKTsKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7Ci0gICAgc3RhdGljIHZv
aWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklT
SVRfQ0hJTERSRU47CiAKICAgICBSZWY8V2FzbTo6R2xvYmFsPiBtX2dsb2JhbDsKIH07CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1i
bHlJbnN0YW5jZS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTkgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03
Myw3ICs3Myw4IEBAIHZvaWQgSlNXZWJBc3NlbWJseUluc3RhbmNlOjpkZXN0cm95KEpTQ2UKICAg
ICBzdGF0aWNfY2FzdDxKU1dlYkFzc2VtYmx5SW5zdGFuY2UqPihjZWxsKS0+SlNXZWJBc3NlbWJs
eUluc3RhbmNlOjp+SlNXZWJBc3NlbWJseUluc3RhbmNlKCk7CiB9CiAKLXZvaWQgSlNXZWJBc3Nl
bWJseUluc3RhbmNlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZp
c2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1dlYkFzc2VtYmx5SW5z
dGFuY2U6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikK
IHsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTV2ViQXNzZW1ibHlJbnN0YW5jZSo+
KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygp
KTsKQEAgLTEwMiw2ICsxMDMsOCBAQCB2b2lkIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6dmlzaXRD
aGlsZHJlCiAgICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQod3JhcHBlci5nZXQoKSk7
CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU1dlYkFzc2VtYmx5SW5zdGFuY2UpOworCiB2
b2lkIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6ZmluYWxpemVDcmVhdGlvbihWTSYgdm0sIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZjxXYXNtOjpDb2RlQmxvY2s+JiYgd2FzbUNvZGVC
bG9jaywgSlNPYmplY3QqIGltcG9ydE9iamVjdCwgV2FzbTo6Q3JlYXRpb25Nb2RlIGNyZWF0aW9u
TW9kZSkKIHsKICAgICBtX2luc3RhbmNlLT5maW5hbGl6ZUNyZWF0aW9uKHRoaXMsIHdhc21Db2Rl
QmxvY2suY29weVJlZigpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pT
V2ViQXNzZW1ibHlJbnN0YW5jZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuaAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAx
OSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYt
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTEwNSw3ICsxMDUsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIEpT
V2ViQXNzZW1ibHlJbnN0YW5jZShWTSYsIFN0cnVjdHVyZSosIFJlZjxXYXNtOjpJbnN0YW5jZT4m
Jik7CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIEpTV2ViQXNzZW1ibHlNb2R1bGUqLCBX
ZWJBc3NlbWJseU1vZHVsZVJlY29yZCopOwotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4o
SlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAg
ICAgUmVmPFdhc206Okluc3RhbmNlPiBtX2luc3RhbmNlOwogICAgIFZNKiBtX3ZtOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1lbW9yeS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1l
bW9yeS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL0pTV2ViQXNzZW1ibHlNZW1vcnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTU5LDcgKzE1
OSw4IEBAIHZvaWQgSlNXZWJBc3NlbWJseU1lbW9yeTo6ZGVzdHJveShKU0NlbGwKICAgICBtZW1v
cnktPkpTV2ViQXNzZW1ibHlNZW1vcnk6On5KU1dlYkFzc2VtYmx5TWVtb3J5KCk7CiB9CiAKLXZv
aWQgSlNXZWJBc3NlbWJseU1lbW9yeTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNXZWJB
c3NlbWJseU1lbW9yeTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2
aXNpdG9yKQogewogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNXZWJBc3NlbWJseU1l
bW9yeSo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwg
aW5mbygpKTsKQEAgLTE2OSw2ICsxNzAsOCBAQCB2b2lkIEpTV2ViQXNzZW1ibHlNZW1vcnk6OnZp
c2l0Q2hpbGRyZW4oCiAgICAgdmlzaXRvci5yZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQodGhpc09i
amVjdC0+bWVtb3J5KCkuc2l6ZSgpKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTV2Vi
QXNzZW1ibHlNZW1vcnkpOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIEVOQUJM
RShXRUJBU1NFTUJMWSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2Vi
QXNzZW1ibHlNZW1vcnkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9KU1dlYkFzc2VtYmx5TWVtb3J5LmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNZW1vcnkuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxOSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTYzLDcgKzYzLDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBKU1dlYkFzc2VtYmx5
TWVtb3J5KFZNJiwgU3RydWN0dXJlKik7CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOwot
ICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAg
ICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgUmVmPFdhc206Ok1lbW9yeT4gbV9tZW1v
cnk7CiAgICAgV3JpdGVCYXJyaWVyPEpTQXJyYXlCdWZmZXI+IG1fYnVmZmVyV3JhcHBlcjsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1i
bHlNb2R1bGUuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEyNCw3
ICsxMjQsOCBAQCB2b2lkIEpTV2ViQXNzZW1ibHlNb2R1bGU6OnNldENvZGVCbG9jayhWCiAgICAg
bV9jb2RlQmxvY2tzW3N0YXRpY19jYXN0PHNpemVfdD4obW9kZSldLnNldCh2bSwgdGhpcywgY29k
ZUJsb2NrKTsKIH0KIAotdm9pZCBKU1dlYkFzc2VtYmx5TW9kdWxlOjp2aXNpdENoaWxkcmVuKEpT
Q2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNp
dG9yPgordm9pZCBKU1dlYkFzc2VtYmx5TW9kdWxlOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwq
IGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNXZWJBc3NlbWJseU1vZHVsZSogdGhp
c09iamVjdCA9IGpzQ2FzdDxKU1dlYkFzc2VtYmx5TW9kdWxlKj4oY2VsbCk7CiAgICAgQVNTRVJU
X0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtMTM1LDYgKzEzNiw4
IEBAIHZvaWQgSlNXZWJBc3NlbWJseU1vZHVsZTo6dmlzaXRDaGlsZHJlbigKICAgICAgICAgdmlz
aXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9jb2RlQmxvY2tzW2ldKTsKIH0KIAorREVGSU5FX1ZJ
U0lUX0NISUxEUkVOKEpTV2ViQXNzZW1ibHlNb2R1bGUpOworCiB9IC8vIG5hbWVzcGFjZSBKU0MK
IAogI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmgJKHJldmlzaW9uIDI3
MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1
bGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTYtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTgwLDcgKzgwLDcgQEAgcHJpdmF0ZToKIAogICAgIEpT
V2ViQXNzZW1ibHlNb2R1bGUoVk0mLCBTdHJ1Y3R1cmUqLCBSZWY8V2FzbTo6TW9kdWxlPiYmKTsK
ICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGls
ZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47
CiAKICAgICBSZWY8V2FzbTo6TW9kdWxlPiBtX21vZHVsZTsKICAgICBXcml0ZUJhcnJpZXI8U3lt
Ym9sVGFibGU+IG1fZXhwb3J0U3ltYm9sVGFibGU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5VGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlUYWJsZS5jcHAJKHJldmlzaW9uIDI3
MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlUYWJs
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDE2LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03Miw3ICs3Miw4IEBAIHZvaWQgSlNXZWJBc3NlbWJs
eVRhYmxlOjpkZXN0cm95KEpTQ2VsbCoKICAgICBzdGF0aWNfY2FzdDxKU1dlYkFzc2VtYmx5VGFi
bGUqPihjZWxsKS0+SlNXZWJBc3NlbWJseVRhYmxlOjp+SlNXZWJBc3NlbWJseVRhYmxlKCk7CiB9
CiAKLXZvaWQgSlNXZWJBc3NlbWJseVRhYmxlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwg
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBK
U1dlYkFzc2VtYmx5VGFibGU6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRv
ciYgdmlzaXRvcikKIHsKICAgICBKU1dlYkFzc2VtYmx5VGFibGUqIHRoaXNPYmplY3QgPSBqc0Nh
c3Q8SlNXZWJBc3NlbWJseVRhYmxlKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhF
UklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtODEsNiArODIsOCBAQCB2b2lkIEpTV2ViQXNz
ZW1ibHlUYWJsZTo6dmlzaXRDaGlsZHJlbihKCiAgICAgdGhpc09iamVjdC0+dGFibGUoKS0+dmlz
aXRBZ2dyZWdhdGUodmlzaXRvcik7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU1dlYkFz
c2VtYmx5VGFibGUpOworCiBib29sIEpTV2ViQXNzZW1ibHlUYWJsZTo6Z3Jvdyh1aW50MzJfdCBk
ZWx0YSwgSlNWYWx1ZSBkZWZhdWx0VmFsdWUpCiB7CiAgICAgaWYgKGRlbHRhID09IDApCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5VGFibGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5VGFi
bGUuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
SlNXZWJBc3NlbWJseVRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03MCw3ICs3MCw3IEBAIHB1
YmxpYzoKIHByaXZhdGU6CiAgICAgSlNXZWJBc3NlbWJseVRhYmxlKFZNJiwgU3RydWN0dXJlKiwg
UmVmPFdhc206OlRhYmxlPiYmKTsKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7Ci0gICAg
c3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERF
Q0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBSZWY8V2FzbTo6VGFibGU+IG1fdGFibGU7CiB9
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlv
bi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNz
ZW1ibHlGdW5jdGlvbi5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIwIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
NDUyLDcgKzQ1Miw4IEBAIFdlYkFzc2VtYmx5RnVuY3Rpb246OldlYkFzc2VtYmx5RnVuY3Rpb24K
ICAgICAsIG1faW1wb3J0YWJsZUZ1bmN0aW9uIHsgc2lnbmF0dXJlSW5kZXgsIHdhc21Ub1dhc21F
bnRyeXBvaW50TG9hZExvY2F0aW9uIH0KIHsgfQogCi12b2lkIFdlYkFzc2VtYmx5RnVuY3Rpb246
OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBs
YXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFdlYkFzc2VtYmx5RnVuY3Rpb246OnZpc2l0Q2hp
bGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBXZWJBc3Nl
bWJseUZ1bmN0aW9uKiB0aGlzT2JqZWN0ID0ganNDYXN0PFdlYkFzc2VtYmx5RnVuY3Rpb24qPihj
ZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7
CkBAIC00NjEsNiArNDYyLDggQEAgdm9pZCBXZWJBc3NlbWJseUZ1bmN0aW9uOjp2aXNpdENoaWxk
cmVuKAogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fanNUb1dhc21JQ0NhbGxlZSk7
CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihXZWJBc3NlbWJseUZ1bmN0aW9uKTsKKwogdm9p
ZCBXZWJBc3NlbWJseUZ1bmN0aW9uOjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKIHsKICAgICBzdGF0
aWNfY2FzdDxXZWJBc3NlbWJseUZ1bmN0aW9uKj4oY2VsbCktPldlYkFzc2VtYmx5RnVuY3Rpb246
On5XZWJBc3NlbWJseUZ1bmN0aW9uKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5oCShyZXZpc2lvbiAyNzI4MzApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIw
MTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2
LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC04Niw3ICs4Niw3IEBAIHB1YmxpYzoKICAgICBXYXNtOjpJbnN0YW5j
ZSogcHJldmlvdXNJbnN0YW5jZShDYWxsRnJhbWUqKTsKIAogcHJpdmF0ZToKLSAgICBzdGF0aWMg
dm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9W
SVNJVF9DSElMRFJFTjsKICAgICBXZWJBc3NlbWJseUZ1bmN0aW9uKFZNJiwgTmF0aXZlRXhlY3V0
YWJsZSosIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKiwgV2FzbTo6Q2FsbGVlJiBqc0VudHJ5
cG9pbnQsIFdhc21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rpb246OkxvYWRMb2NhdGlvbiBlbnRyeXBv
aW50TG9hZExvY2F0aW9uLCBXYXNtOjpTaWduYXR1cmVJbmRleCk7CiAKICAgICBNYWNyb0Fzc2Vt
YmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4ganNDYWxsRW50cnlwb2ludFNsb3coKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb25CYXNlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJs
eUZ1bmN0aW9uQmFzZS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb25CYXNlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00
MSw3ICs0MSw4IEBAIFdlYkFzc2VtYmx5RnVuY3Rpb25CYXNlOjpXZWJBc3NlbWJseUZ1bmMKICAg
ICA6IEJhc2Uodm0sIGV4ZWN1dGFibGUsIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKQogeyB9CiAK
LXZvaWQgV2ViQXNzZW1ibHlGdW5jdGlvbkJhc2U6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxs
LCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lk
IFdlYkFzc2VtYmx5RnVuY3Rpb25CYXNlOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGws
IFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgV2ViQXNzZW1ibHlGdW5jdGlvbkJhc2UqIHRoaXNP
YmplY3QgPSBqc0Nhc3Q8V2ViQXNzZW1ibHlGdW5jdGlvbkJhc2UqPihjZWxsKTsKICAgICBBU1NF
UlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC00OSw2ICs1MCw4
IEBAIHZvaWQgV2ViQXNzZW1ibHlGdW5jdGlvbkJhc2U6OnZpc2l0Q2hpbGQKICAgICB2aXNpdG9y
LmFwcGVuZCh0aGlzT2JqZWN0LT5tX2luc3RhbmNlKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxE
UkVOKFdlYkFzc2VtYmx5RnVuY3Rpb25CYXNlKTsKKwogdm9pZCBXZWJBc3NlbWJseUZ1bmN0aW9u
QmFzZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBOYXRpdmVFeGVjdXRhYmxlKiBleGVjdXRhYmxl
LCB1bnNpZ25lZCBsZW5ndGgsIGNvbnN0IFN0cmluZyYgbmFtZSwgSlNXZWJBc3NlbWJseUluc3Rh
bmNlKiBpbnN0YW5jZSkKIHsKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSwgZXhlY3V0YWJs
ZSwgbGVuZ3RoLCBuYW1lKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dl
YkFzc2VtYmx5RnVuY3Rpb25CYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbkJhc2UuaAkocmV2aXNpb24gMjcyODMwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbkJhc2Uu
aAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTctMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ2LDcgKzQ2LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBw
dHJkaWZmX3Qgb2Zmc2V0T2ZJbnN0YW5jZSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihXZWJB
c3NlbWJseUZ1bmN0aW9uQmFzZSwgbV9pbnN0YW5jZSk7IH0KIAogcHJvdGVjdGVkOgotICAgIHN0
YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNM
QVJFX1ZJU0lUX0NISUxEUkVOOwogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBOYXRpdmVF
eGVjdXRhYmxlKiwgdW5zaWduZWQgbGVuZ3RoLCBjb25zdCBTdHJpbmcmIG5hbWUsIEpTV2ViQXNz
ZW1ibHlJbnN0YW5jZSopOwogICAgIFdlYkFzc2VtYmx5RnVuY3Rpb25CYXNlKFZNJiwgTmF0aXZl
RXhlY3V0YWJsZSosIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKik7CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVs
ZVJlY29yZC5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxOSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTc4
LDcgKzc4LDggQEAgdm9pZCBXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6ZmluaXNoQ3JlYQogICAg
IH0KIH0KIAotdm9pZCBXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6dmlzaXRDaGlsZHJlbihKU0Nl
bGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRv
cj4KK3ZvaWQgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2Vs
bCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBXZWJBc3NlbWJseU1vZHVsZVJlY29y
ZCogdGhpc09iamVjdCA9IGpzQ2FzdDxXZWJBc3NlbWJseU1vZHVsZVJlY29yZCo+KGNlbGwpOwog
ICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTg4
LDYgKzg5LDggQEAgdm9pZCBXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6dmlzaXRDaGlsZAogICAg
IHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fZXhwb3J0c09iamVjdCk7CiB9CiAKK0RFRklO
RV9WSVNJVF9DSElMRFJFTihXZWJBc3NlbWJseU1vZHVsZVJlY29yZCk7CisKIHZvaWQgV2ViQXNz
ZW1ibHlNb2R1bGVSZWNvcmQ6OnByZXBhcmVMaW5rKFZNJiB2bSwgSlNXZWJBc3NlbWJseUluc3Rh
bmNlKiBpbnN0YW5jZSkKIHsKICAgICBSRUxFQVNFX0FTU0VSVCghbV9pbnN0YW5jZSk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZVJlY29yZC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5
TW9kdWxlUmVjb3JkLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTkgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02
OSw3ICs2OSw3IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTR2xvYmFs
T2JqZWN0KiwgVk0mLCBjb25zdCBXYXNtOjpNb2R1bGVJbmZvcm1hdGlvbiYpOwogCi0gICAgc3Rh
dGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xB
UkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBXcml0ZUJhcnJpZXI8SlNXZWJBc3NlbWJseUluc3Rh
bmNlPiBtX2luc3RhbmNlOwogICAgIFdyaXRlQmFycmllcjxKU09iamVjdD4gbV9zdGFydEZ1bmN0
aW9uOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlXcmFw
cGVyRnVuY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL1dlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxNy0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjcsNyArNjcsOCBAQCBTdHJ1Y3R1cmUqIFdlYkFzc2Vt
Ymx5V3JhcHBlckZ1bmN0aW9uOjpjCiAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBn
bG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oSlNGdW5jdGlvblR5cGUsIFN0cnVjdHVy
ZUZsYWdzKSwgaW5mbygpKTsKIH0KIAotdm9pZCBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbjo6
dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxh
dGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb246OnZp
c2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBX
ZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbiogdGhpc09iamVjdCA9IGpzQ2FzdDxXZWJBc3NlbWJs
eVdyYXBwZXJGdW5jdGlvbio+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMo
dGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTc2LDYgKzc3LDggQEAgdm9pZCBXZWJBc3NlbWJseVdy
YXBwZXJGdW5jdGlvbjo6dmlzaXRDaAogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1f
ZnVuY3Rpb24pOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oV2ViQXNzZW1ibHlXcmFwcGVy
RnVuY3Rpb24pOworCiBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oY2FsbFdlYkFzc2VtYmx5V3Jh
cHBlckZ1bmN0aW9uLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBj
YWxsRnJhbWUpKQogewogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlX
cmFwcGVyRnVuY3Rpb24uaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uaAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAxOSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTU5LDcgKzU5LDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBXZWJBc3NlbWJseVdyYXBw
ZXJGdW5jdGlvbihWTSYsIE5hdGl2ZUV4ZWN1dGFibGUqLCBKU0dsb2JhbE9iamVjdCosIFN0cnVj
dHVyZSosIFdhc21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rpb24pOwogICAgIHZvaWQgZmluaXNoQ3Jl
YXRpb24oVk0mLCBOYXRpdmVFeGVjdXRhYmxlKiwgdW5zaWduZWQgbGVuZ3RoLCBjb25zdCBTdHJp
bmcmIG5hbWUsIEpTT2JqZWN0KiwgSlNXZWJBc3NlbWJseUluc3RhbmNlKik7Ci0gICAgc3RhdGlj
IHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVf
VklTSVRfQ0hJTERSRU47CiAKICAgICBXcml0ZUJhcnJpZXI8SlNPYmplY3Q+IG1fZnVuY3Rpb247
CiAgICAgLy8gSXQncyBzYWZlIHRvIGp1c3QgaG9sZCB0aGUgcmF3IFdhc21Ub1dhc21JbXBvcnRh
YmxlRnVuY3Rpb24gYmVjYXVzZSB3ZSBoYXZlIGEgcmVmZXJlbmNlCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuY3BwCShyZXZp
c2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmpl
Y3RTdG9yZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNzI4LDcgKzcyOCw4IEBAIHZvaWQgSURCT2JqZWN0
U3RvcmU6OnJvbGxiYWNrRm9yVmVyc2lvbkMKICAgICB9CiB9CiAKLXZvaWQgSURCT2JqZWN0U3Rv
cmU6OnZpc2l0UmVmZXJlbmNlZEluZGV4ZXMoU2xvdFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0Cit0
ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBJREJPYmplY3RTdG9yZTo6dmlzaXRSZWZl
cmVuY2VkSW5kZXhlcyhWaXNpdG9yJiB2aXNpdG9yKSBjb25zdAogewogICAgIExvY2tlcjxMb2Nr
PiBsb2NrZXIobV9yZWZlcmVuY2VkSW5kZXhMb2NrKTsKICAgICBmb3IgKGF1dG8mIGluZGV4IDog
bV9yZWZlcmVuY2VkSW5kZXhlcy52YWx1ZXMoKSkKQEAgLTczNyw2ICs3MzgsOSBAQCB2b2lkIElE
Qk9iamVjdFN0b3JlOjp2aXNpdFJlZmVyZW5jZWRJbmRlCiAgICAgICAgIHZpc2l0b3IuYWRkT3Bh
cXVlUm9vdChpbmRleC5nZXQoKSk7CiB9CiAKK3RlbXBsYXRlIHZvaWQgSURCT2JqZWN0U3RvcmU6
OnZpc2l0UmVmZXJlbmNlZEluZGV4ZXMoQWJzdHJhY3RTbG90VmlzaXRvciYpIGNvbnN0OwordGVt
cGxhdGUgdm9pZCBJREJPYmplY3RTdG9yZTo6dmlzaXRSZWZlcmVuY2VkSW5kZXhlcyhTbG90Vmlz
aXRvciYpIGNvbnN0OworCiB2b2lkIElEQk9iamVjdFN0b3JlOjpyZW5hbWVSZWZlcmVuY2VkSW5k
ZXgoSURCSW5kZXgmIGluZGV4LCBjb25zdCBTdHJpbmcmIG5ld05hbWUpCiB7CiAgICAgTE9HKElu
ZGV4ZWREQiwgIklEQk9iamVjdFN0b3JlOjpyZW5hbWVSZWZlcmVuY2VkSW5kZXgiKTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUu
aAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCT2JqZWN0U3RvcmUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE1LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMDksNyArMTA5LDcgQEAgcHVibGljOgog
ICAgIHZvaWQgcmVmKCk7CiAgICAgdm9pZCBkZXJlZigpOwogCi0gICAgdm9pZCB2aXNpdFJlZmVy
ZW5jZWRJbmRleGVzKEpTQzo6U2xvdFZpc2l0b3ImKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBWaXNpdG9yPiB2b2lkIHZpc2l0UmVmZXJlbmNlZEluZGV4ZXMoVmlzaXRvciYpIGNvbnN0
OwogICAgIHZvaWQgcmVuYW1lUmVmZXJlbmNlZEluZGV4KElEQkluZGV4JiwgY29uc3QgU3RyaW5n
JiBuZXdOYW1lKTsKIAogcHJpdmF0ZToKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysr
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAx
NyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUt
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTE0NTUsNyArMTQ1NSw4IEBAIHZvaWQgSURCVHJhbnNhY3Rpb246OmNv
bm5lY3Rpb25DbG9zZWRGcm8KICAgICBmaXJlT25BYm9ydCgpOwogfQogCi12b2lkIElEQlRyYW5z
YWN0aW9uOjp2aXNpdFJlZmVyZW5jZWRPYmplY3RTdG9yZXMoSlNDOjpTbG90VmlzaXRvciYgdmlz
aXRvcikgY29uc3QKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIElEQlRyYW5zYWN0
aW9uOjp2aXNpdFJlZmVyZW5jZWRPYmplY3RTdG9yZXMoVmlzaXRvciYgdmlzaXRvcikgY29uc3QK
IHsKICAgICBMb2NrZXI8TG9jaz4gbG9ja2VyKG1fcmVmZXJlbmNlZE9iamVjdFN0b3JlTG9jayk7
CiAgICAgZm9yIChhdXRvJiBvYmplY3RTdG9yZSA6IG1fcmVmZXJlbmNlZE9iamVjdFN0b3Jlcy52
YWx1ZXMoKSkKQEAgLTE0NjQsNiArMTQ2NSw5IEBAIHZvaWQgSURCVHJhbnNhY3Rpb246OnZpc2l0
UmVmZXJlbmNlZE9iamUKICAgICAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KG9iamVjdFN0b3Jl
LmdldCgpKTsKIH0KIAordGVtcGxhdGUgdm9pZCBJREJUcmFuc2FjdGlvbjo6dmlzaXRSZWZlcmVu
Y2VkT2JqZWN0U3RvcmVzKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpIGNvbnN0OwordGVtcGxh
dGUgdm9pZCBJREJUcmFuc2FjdGlvbjo6dmlzaXRSZWZlcmVuY2VkT2JqZWN0U3RvcmVzKEpTQzo6
U2xvdFZpc2l0b3ImKSBjb25zdDsKKwogdm9pZCBJREJUcmFuc2FjdGlvbjo6aGFuZGxlUGVuZGlu
Z09wZXJhdGlvbnMoKQogewogICAgIEFTU0VSVChjYW5DdXJyZW50VGhyZWFkQWNjZXNzVGhyZWFk
TG9jYWxEYXRhKG1fZGF0YWJhc2UtPm9yaWdpblRocmVhZCgpKSk7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmgJKHJldmlzaW9u
IDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0
aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMTQ5LDcgKzE0OSw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQg
Y29ubmVjdGlvbkNsb3NlZEZyb21TZXJ2ZXIoY29uc3QgSURCRXJyb3ImKTsKIAotICAgIHZvaWQg
dmlzaXRSZWZlcmVuY2VkT2JqZWN0U3RvcmVzKEpTQzo6U2xvdFZpc2l0b3ImKSBjb25zdDsKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIHZpc2l0UmVmZXJlbmNlZE9iamVjdFN0
b3JlcyhWaXNpdG9yJikgY29uc3Q7CiAKICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgc3RkOjph
dG9taWM8dW5zaWduZWQ+IG51bWJlck9mSURCVHJhbnNhY3Rpb25zOwogCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQnVmZmVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQnVmZmVyLmNwcAkocmV2aXNpb24g
MjcyODMwKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0J1ZmZlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAy
MDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3
LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0xNTQsMTIgKzE1NCwxNiBAQCBFeGNlcHRpb25PcjxKU0M6OkpTVmFs
dWU+IEF1ZGlvQnVmZmVyOjpnCiAgICAgcmV0dXJuIGNvbnN0cnVjdEpTQXJyYXkoKTsKIH0KIAot
dm9pZCBBdWRpb0J1ZmZlcjo6dmlzaXRDaGFubmVsV3JhcHBlcnMoSlNDOjpTbG90VmlzaXRvciYg
dmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEF1ZGlvQnVmZmVyOjp2
aXNpdENoYW5uZWxXcmFwcGVycyhWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGZvciAoYXV0byYg
Y2hhbm5lbFdyYXBwZXIgOiBtX2NoYW5uZWxXcmFwcGVycykKICAgICAgICAgY2hhbm5lbFdyYXBw
ZXIudmlzaXQodmlzaXRvcik7CiB9CiAKK3RlbXBsYXRlIHZvaWQgQXVkaW9CdWZmZXI6OnZpc2l0
Q2hhbm5lbFdyYXBwZXJzKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9p
ZCBBdWRpb0J1ZmZlcjo6dmlzaXRDaGFubmVsV3JhcHBlcnMoSlNDOjpTbG90VmlzaXRvciYpOwor
CiBSZWZQdHI8RmxvYXQzMkFycmF5PiBBdWRpb0J1ZmZlcjo6Y2hhbm5lbERhdGEodW5zaWduZWQg
Y2hhbm5lbEluZGV4KQogewogICAgIGlmIChjaGFubmVsSW5kZXggPj0gbV9jaGFubmVscy5zaXpl
KCkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQnVmZmVyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0J1ZmZl
ci5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlv
L0F1ZGlvQnVmZmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogQ29w
eXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03NSw3ICs3NSw3IEBAIHB1YmxpYzoKIAogICAg
IHNpemVfdCBtZW1vcnlDb3N0KCkgY29uc3Q7CiAKLSAgICB2b2lkIHZpc2l0Q2hhbm5lbFdyYXBw
ZXJzKEpTQzo6U2xvdFZpc2l0b3ImKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2
b2lkIHZpc2l0Q2hhbm5lbFdyYXBwZXJzKFZpc2l0b3ImKTsKICAgICAKIHByaXZhdGU6CiAgICAg
QXVkaW9CdWZmZXIodW5zaWduZWQgbnVtYmVyT2ZDaGFubmVscywgc2l6ZV90IGxlbmd0aCwgZmxv
YXQgc2FtcGxlUmF0ZSwgTGVnYWN5UHJldmVudERldGFjaGluZyA9IExlZ2FjeVByZXZlbnREZXRh
Y2hpbmc6Ok5vKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0RPTUdDT3V0cHV0
Q29uc3RyYWludC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
RE9NR0NPdXRwdXRDb25zdHJhaW50LmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvRE9NR0NPdXRwdXRDb25zdHJhaW50LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDksNyArNDksNyBAQCBET01HQ091dHB1dENvbnN0cmFpbnQ6On5ET01HQ091dHB1dENv
bnN0CiB7CiB9CiAKLXZvaWQgRE9NR0NPdXRwdXRDb25zdHJhaW50OjpleGVjdXRlSW1wbChTbG90
VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgRE9NR0NPdXRwdXRDb25zdHJhaW50OjpleGVjdXRlSW1w
bChBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEhlYXAmIGhlYXAgPSBtX3Zt
LmhlYXA7CiAgICAgCkBAIC02MCw3ICs2MCw3IEBAIHZvaWQgRE9NR0NPdXRwdXRDb25zdHJhaW50
OjpleGVjdXRlSW1wbCgKICAgICAKICAgICBtX2NsaWVudERhdGEuZm9yRWFjaE91dHB1dENvbnN0
cmFpbnRTcGFjZSgKICAgICAgICAgWyZdIChTdWJzcGFjZSYgc3Vic3BhY2UpIHsKLSAgICAgICAg
ICAgIGF1dG8gZnVuYyA9IFtdIChTbG90VmlzaXRvciYgdmlzaXRvciwgSGVhcENlbGwqIGhlYXBD
ZWxsLCBIZWFwQ2VsbDo6S2luZCkgeworICAgICAgICAgICAgYXV0byBmdW5jID0gW10gKEFic3Ry
YWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIEhlYXBDZWxsKiBoZWFwQ2VsbCwgSGVhcENlbGw6Oktp
bmQpIHsKICAgICAgICAgICAgICAgICBTZXRSb290TWFya1JlYXNvblNjb3BlIHJvb3RTY29wZSh2
aXNpdG9yLCBSb290TWFya1JlYXNvbjo6RE9NR0NPdXRwdXQpOwogICAgICAgICAgICAgICAgIEpT
Q2VsbCogY2VsbCA9IHN0YXRpY19jYXN0PEpTQ2VsbCo+KGhlYXBDZWxsKTsKICAgICAgICAgICAg
ICAgICBjZWxsLT5tZXRob2RUYWJsZSh2aXNpdG9yLnZtKCkpLT52aXNpdE91dHB1dENvbnN0cmFp
bnRzKGNlbGwsIHZpc2l0b3IpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvRE9N
R0NPdXRwdXRDb25zdHJhaW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvRE9NR0NPdXRwdXRDb25zdHJhaW50LmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0RPTUdDT3V0cHV0Q29uc3RyYWludC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNy0yMDE4IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtNDIsNyArNDIsNyBAQCBwdWJsaWM6CiAgICAgfkRPTUdDT3V0cHV0Q29uc3RyYWlu
dCgpOwogICAgIAogcHJvdGVjdGVkOgotICAgIHZvaWQgZXhlY3V0ZUltcGwoSlNDOjpTbG90Vmlz
aXRvciYpIG92ZXJyaWRlOworICAgIHZvaWQgZXhlY3V0ZUltcGwoSlNDOjpBYnN0cmFjdFNsb3RW
aXNpdG9yJikgb3ZlcnJpZGU7CiAKIHByaXZhdGU6CiAgICAgSlNDOjpWTSYgbV92bTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQWJvcnRDb250cm9sbGVyQ3VzdG9tLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Fib3J0Q29udHJvbGxl
ckN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTQWJvcnRDb250cm9sbGVyQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0qIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisqIENvcHlyaWdodCAoQykgMjAxOS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICoKICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjgsOSArMjgsMTMgQEAK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIEpTQWJvcnRDb250cm9sbGVyOjp2aXNpdEFk
ZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlw
ZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNBYm9ydENvbnRyb2xsZXI6OnZpc2l0QWRkaXRpb25hbENo
aWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KCZ3
cmFwcGVkKCkuc2lnbmFsKCkpOwogfQogCit0ZW1wbGF0ZSB2b2lkIEpTQWJvcnRDb250cm9sbGVy
Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3Rl
bXBsYXRlIHZvaWQgSlNBYm9ydENvbnRyb2xsZXI6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpT
Qzo6U2xvdFZpc2l0b3ImKTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNBYm9ydFNpZ25hbEN1c3RvbS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNBYm9ydFNpZ25hbEN1c3RvbS5jcHAJKHJl
dmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQWJvcnRTaWdu
YWxDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSogQ29weXJp
Z2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyogQ29weXJpZ2h0
IChDKSAyMDE5LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogKgogKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0yOCw3ICsyOCw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotYm9vbCBKU0Fib3J0U2lnbmFsT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3Rz
KEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgSlNDOjpTbG90VmlzaXRv
ciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikKK2Jvb2wgSlNBYm9ydFNpZ25hbE93bmVy
Ojppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhh
bmRsZSwgdm9pZCosIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hh
cioqIHJlYXNvbikKIHsKICAgICBhdXRvJiBhYm9ydFNpZ25hbCA9IEpTQzo6anNDYXN0PEpTQWJv
cnRTaWduYWwqPihoYW5kbGUuc2xvdCgpLT5hc0NlbGwoKSktPndyYXBwZWQoKTsKICAgICBpZiAo
YWJvcnRTaWduYWwuaXNGaXJpbmdFdmVudExpc3RlbmVycygpKSB7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0F0dHJDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXR0ckN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXR0ckN1c3RvbS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4LCAyMDA5
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNy0y
MDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMzMsMTAgKzMzLDE0IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAot
dm9pZCBKU0F0dHI6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZp
c2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0F0dHI6OnZpc2l0QWRk
aXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgaWYgKEVsZW1lbnQqIGVs
ZW1lbnQgPSB3cmFwcGVkKCkub3duZXJFbGVtZW50KCkpCiAgICAgICAgIHZpc2l0b3IuYWRkT3Bh
cXVlUm9vdChyb290KGVsZW1lbnQpKTsKIH0KIAordGVtcGxhdGUgdm9pZCBKU0F0dHI6OnZpc2l0
QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUg
dm9pZCBKU0F0dHI6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImKTsK
KwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNBdWRpb0J1ZmZlckN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNBdWRpb0J1ZmZlckN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXVkaW9CdWZmZXJDdXN0b20uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAtMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTMxLDExICszMSwxNSBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogdXNpbmcgbmFt
ZXNwYWNlIEpTQzsKIAotdm9pZCBKU0F1ZGlvQnVmZmVyOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJl
bihTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lk
IEpTQXVkaW9CdWZmZXI6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3Ip
CiB7CiAgICAgd3JhcHBlZCgpLnZpc2l0Q2hhbm5lbFdyYXBwZXJzKHZpc2l0b3IpOwogfQogCit0
ZW1wbGF0ZSB2b2lkIEpTQXVkaW9CdWZmZXI6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEFic3Ry
YWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNBdWRpb0J1ZmZlcjo6dmlzaXRBZGRp
dGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQog
CiAjZW5kaWYgLy8gRU5BQkxFKFdFQl9BVURJTykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTQXVkaW9UcmFja0N1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNBdWRpb1RyYWNrQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcyODMwKQor
KysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNBdWRpb1RyYWNrQ3VzdG9tLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0zNSwxMSArMzUsMTUgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5h
bWVzcGFjZSBKU0M7CiAKLXZvaWQgSlNBdWRpb1RyYWNrOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJl
bihTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lk
IEpTQXVkaW9UcmFjazo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikK
IHsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qocm9vdCgmd3JhcHBlZCgpKSk7CiB9CiAKK3Rl
bXBsYXRlIHZvaWQgSlNBdWRpb1RyYWNrOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihBYnN0cmFj
dFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTQXVkaW9UcmFjazo6dmlzaXRBZGRpdGlv
bmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAj
ZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXVkaW9UcmFja0xpc3RD
dXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXVk
aW9UcmFja0xpc3RDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0F1ZGlvVHJhY2tMaXN0Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0z
NiwxMSArMzYsMTUgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBKU0M7
CiAKLXZvaWQgSlNBdWRpb1RyYWNrTGlzdDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZp
c2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0F1ZGlv
VHJhY2tMaXN0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewog
ICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChyb290KHdyYXBwZWQoKS5lbGVtZW50KCkpKTsKIH0K
IAordGVtcGxhdGUgdm9pZCBKU0F1ZGlvVHJhY2tMaXN0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJl
bihBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTQXVkaW9UcmFja0xpc3Q6
OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CisKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKIAogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0F1
ZGlvV29ya2xldFByb2Nlc3NvckN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNBdWRpb1dvcmtsZXRQcm9jZXNzb3JDdXN0b20uY3BwCShyZXZpc2lv
biAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0F1ZGlvV29ya2xldFBy
b2Nlc3NvckN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAyMC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzEsNyArMzEsOCBAQAogbmFtZXNwYWNl
IFdlYkNvcmUgewogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAotdm9pZCBKU0F1ZGlvV29ya2xldFBy
b2Nlc3Nvcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0
ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0F1ZGlvV29ya2xldFByb2Nlc3Nvcjo6
dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBhdXRvJiBw
cm9jZXNzb3IgPSB3cmFwcGVkKCk7CiAgICAgcHJvY2Vzc29yLmpzSW5wdXRzV3JhcHBlcigpLnZp
c2l0KHZpc2l0b3IpOwpAQCAtMzksNiArNDAsOSBAQCB2b2lkIEpTQXVkaW9Xb3JrbGV0UHJvY2Vz
c29yOjp2aXNpdEFkZGl0CiAgICAgcHJvY2Vzc29yLmpzUGFyYW1WYWx1ZXNXcmFwcGVyKCkudmlz
aXQodmlzaXRvcik7CiB9CiAKK3RlbXBsYXRlIHZvaWQgSlNBdWRpb1dvcmtsZXRQcm9jZXNzb3I6
OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRl
IHZvaWQgSlNBdWRpb1dvcmtsZXRQcm9jZXNzb3I6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNs
b3RWaXNpdG9yJik7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJM
RShXRUJfQVVESU8pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NTU1J1bGVD
dXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ1NT
UnVsZUN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTQ1NTUnVsZUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTEsMTEgKzUx
LDE1IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCi12b2lk
IEpTQ1NTUnVsZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3Ip
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0NTU1J1bGU6OnZpc2l0QWRkaXRp
b25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVS
b290KHJvb3QoJndyYXBwZWQoKSkpOwogfQogCit0ZW1wbGF0ZSB2b2lkIEpTQ1NTUnVsZTo6dmlz
aXRBZGRpdGlvbmFsQ2hpbGRyZW4oQWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9p
ZCBKU0NTU1J1bGU6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CisKIEpT
VmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0dsb2JhbE9iamVjdCosIEpTRE9NR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIFJlZjxDU1NSdWxlPiYmIHJ1bGUpCiB7CiAgICAgc3dpdGNoIChydWxl
LT50eXBlKCkpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ1NTUnVsZUxp
c3RDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
Q1NTUnVsZUxpc3RDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0NTU1J1bGVMaXN0Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxOSBBcHBsZSBJbmMuIEFs
bCByaWdodCByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0z
Niw3ICszNiw3IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2UgSlNDOwog
Ci1ib29sIEpTQ1NTUnVsZUxpc3RPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlND
OjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBTbG90VmlzaXRvciYgdmlzaXRv
ciwgY29uc3QgY2hhcioqIHJlYXNvbikKK2Jvb2wgSlNDU1NSdWxlTGlzdE93bmVyOjppc1JlYWNo
YWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9p
ZCosIEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCiB7
CiAgICAgSlNDU1NSdWxlTGlzdCoganNDU1NSdWxlTGlzdCA9IGpzQ2FzdDxKU0NTU1J1bGVMaXN0
Kj4oaGFuZGxlLnNsb3QoKS0+YXNDZWxsKCkpOwogICAgIGlmICghanNDU1NSdWxlTGlzdC0+aGFz
Q3VzdG9tUHJvcGVydGllcyhqc0NTU1J1bGVMaXN0LT52bSgpKSkKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTQ1NTU3R5bGVEZWNsYXJhdGlvbkN1c3RvbS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDU1NTdHlsZURlY2xhcmF0aW9uQ3Vz
dG9tLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNDU1NTdHlsZURlY2xhcmF0aW9uQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTUxLDkg
KzUxLDEzIEBAIHZvaWQqIHJvb3QoQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUpCiAgICAgcmV0
dXJuIHN0eWxlOwogfQogCi12b2lkIEpTQ1NTU3R5bGVEZWNsYXJhdGlvbjo6dmlzaXRBZGRpdGlv
bmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNp
dG9yPgordm9pZCBKU0NTU1N0eWxlRGVjbGFyYXRpb246OnZpc2l0QWRkaXRpb25hbENoaWxkcmVu
KFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHJvb3QoJndy
YXBwZWQoKSkpOwogfQogCit0ZW1wbGF0ZSB2b2lkIEpTQ1NTU3R5bGVEZWNsYXJhdGlvbjo6dmlz
aXRBZGRpdGlvbmFsQ2hpbGRyZW4oQWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9p
ZCBKU0NTU1N0eWxlRGVjbGFyYXRpb246OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNp
dG9yJik7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTQ2FsbGJhY2tEYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0NhbGxiYWNrRGF0YS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2FsbGJhY2tEYXRhLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOSwgMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTk1LDEyICs5NSwxNiBAQCBKU1ZhbHVlIEpTQ2FsbGJhY2tEYXRhOjppbnZv
a2VDYWxsYmFjayhKCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotdm9pZCBKU0NhbGxiYWNrRGF0
YVdlYWs6OnZpc2l0SlNGdW5jdGlvbihKU0M6OlNsb3RWaXNpdG9yJiB2aXN0b3IpCit0ZW1wbGF0
ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0NhbGxiYWNrRGF0YVdlYWs6OnZpc2l0SlNGdW5j
dGlvbihWaXNpdG9yJiB2aXNpdG9yKQogewotICAgIHZpc3Rvci5hcHBlbmQobV9jYWxsYmFjayk7
CisgICAgdmlzaXRvci5hcHBlbmQobV9jYWxsYmFjayk7CiB9CiAKLWJvb2wgSlNDYWxsYmFja0Rh
dGFXZWFrOjpXZWFrT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxl
PEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25z
dCBjaGFyKiogcmVhc29uKQordGVtcGxhdGUgdm9pZCBKU0NhbGxiYWNrRGF0YVdlYWs6OnZpc2l0
SlNGdW5jdGlvbihKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlND
YWxsYmFja0RhdGFXZWFrOjp2aXNpdEpTRnVuY3Rpb24oSlNDOjpTbG90VmlzaXRvciYpOworCiti
b29sIEpTQ2FsbGJhY2tEYXRhV2Vhazo6V2Vha093bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVS
b290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0LCBBYnN0cmFjdFNs
b3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQogewogICAgIGlmIChVTkxJ
S0VMWShyZWFzb24pKQogICAgICAgICAqcmVhc29uID0gIkNvbnRleHQgaXMgb3BhcXVlIHJvb3Qi
OyAvLyBGSVhNRTogd2hhdCBpcyB0aGUgY29udGV4dC4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTQ2FsbGJhY2tEYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNDYWxsYmFja0RhdGEuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNDYWxsYmFja0RhdGEuaAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOSwgMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAyMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTExMywxMSArMTEzLDExIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIEpTQ2FsbGJh
Y2tEYXRhOjppbnZva2VDYWxsYmFjaygqZ2xvYmFsT2JqZWN0LCBjYWxsYmFjaygpLCB0aGlzVmFs
dWUsIGFyZ3MsIGNhbGxiYWNrVHlwZSwgZnVuY3Rpb25OYW1lLCByZXR1cm5lZEV4Y2VwdGlvbik7
CiAgICAgfQogCi0gICAgdm9pZCB2aXNpdEpTRnVuY3Rpb24oSlNDOjpTbG90VmlzaXRvciYpOwor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgdmlzaXRKU0Z1bmN0aW9uKFZpc2l0
b3ImKTsKIAogcHJpdmF0ZToKICAgICBjbGFzcyBXZWFrT3duZXIgOiBwdWJsaWMgSlNDOjpXZWFr
SGFuZGxlT3duZXIgewotICAgICAgICBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpT
Qzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6U2xvdFZpc2l0b3Im
LCBjb25zdCBjaGFyKiopIG92ZXJyaWRlOworICAgICAgICBib29sIGlzUmVhY2hhYmxlRnJvbU9w
YXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6
QWJzdHJhY3RTbG90VmlzaXRvciYsIGNvbnN0IGNoYXIqKikgb3ZlcnJpZGU7CiAgICAgfTsKICAg
ICBXZWFrT3duZXIgbV93ZWFrT3duZXI7CiAgICAgSlNDOjpXZWFrPEpTQzo6SlNPYmplY3Q+IG1f
Y2FsbGJhY2s7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NhbnZhc1JlbmRl
cmluZ0NvbnRleHQyREN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRDdXN0b20uY3BwCShyZXZpc2lvbiAy
NzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyREN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDA2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yNCw3ICsyNCw3IEBACiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAotYm9vbCBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRE93bmVyOjppc1JlYWNoYWJs
ZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCos
IEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCitib29sIEpT
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJET3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3Rz
KEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgSlNDOjpBYnN0cmFjdFNs
b3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQogewogICAgIGlmIChVTkxJ
S0VMWShyZWFzb24pKQogICAgICAgICAqcmVhc29uID0gIkNhbnZhcyBpcyBvcGFxdWUgcm9vdCI7
CkBAIC0zNCw5ICszNCwxMyBAQCBib29sIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJET3duZXI6
OmlzCiAgICAgcmV0dXJuIHZpc2l0b3IuY29udGFpbnNPcGFxdWVSb290KHJvb3QpOwogfQogCi12
b2lkIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihK
U0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3Zv
aWQgSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZp
c2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHJvb3Qod3JhcHBl
ZCgpLmNhbnZhcygpKSk7CiB9CiAKK3RlbXBsYXRlIHZvaWQgSlNDYW52YXNSZW5kZXJpbmdDb250
ZXh0MkQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYp
OwordGVtcGxhdGUgdm9pZCBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6dmlzaXRBZGRpdGlv
bmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYpOworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0N1c3RvbUV2ZW50Q3VzdG9tLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0N1c3RvbUV2ZW50
Q3VzdG9tLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNDdXN0b21FdmVudEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00MiwxMCArNDIs
MTQgQEAgSlNDOjpKU1ZhbHVlIEpTQ3VzdG9tRXZlbnQ6OmRldGFpbChKU0M6OgogICAgIH0pOwog
fQogCi12b2lkIEpTQ3VzdG9tRXZlbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xv
dFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0N1
c3RvbUV2ZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewog
ICAgIHdyYXBwZWQoKS5kZXRhaWwoKS52aXNpdCh2aXNpdG9yKTsKICAgICB3cmFwcGVkKCkuY2Fj
aGVkRGV0YWlsKCkudmlzaXQodmlzaXRvcik7CiB9CiAKK3RlbXBsYXRlIHZvaWQgSlNDdXN0b21F
dmVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJik7
Cit0ZW1wbGF0ZSB2b2lkIEpTQ3VzdG9tRXZlbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpT
Qzo6U2xvdFZpc2l0b3ImKTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CdWlsdGluQ29uc3RydWN0b3JCYXNlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJ1aWx0aW5Db25zdHJ1
Y3RvckJhc2UuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0RPTUJ1aWx0aW5Db25zdHJ1Y3RvckJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDYgKzEsNiBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMSBIYXJyaSBQb3J0ZW4g
KHBvcnRlbkBrZGUub3JnKQotICogIENvcHlyaWdodCAoQykgMjAwNC0yMDE3IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDQtMjAyMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA3IFNhbXVlbCBX
ZWluaWcgPHNhbUB3ZWJraXQub3JnPgogICogIENvcHlyaWdodCAoQykgMjAxMyBNaWNoYWVsIFBy
dWV0dCA8bWljaGFlbEA2OGsub3JnPgogICoKQEAgLTQ1LDcgKzQ1LDggQEAgdm9pZCBKU0RPTUJ1
aWx0aW5Db25zdHJ1Y3RvckJhc2U6OmNhbGxGdQogICAgIEpTQzo6Y2FsbCgmbGV4aWNhbEdsb2Jh
bE9iamVjdCwgJmZ1bmN0aW9uLCBjYWxsRGF0YSwgJnRoaXNPYmplY3QsIGFyZ3VtZW50cyk7CiB9
CiAKLXZvaWQgSlNET01CdWlsdGluQ29uc3RydWN0b3JCYXNlOjp2aXNpdENoaWxkcmVuKEpTQzo6
SlNDZWxsKiBjZWxsLCBKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5h
bWUgVmlzaXRvcj4KK3ZvaWQgSlNET01CdWlsdGluQ29uc3RydWN0b3JCYXNlOjp2aXNpdENoaWxk
cmVuSW1wbChKU0M6OkpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBhdXRv
KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTRE9NQnVpbHRpbkNvbnN0cnVjdG9yQmFzZSo+KGNlbGwp
OwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAg
LTUzLDYgKzU0LDggQEAgdm9pZCBKU0RPTUJ1aWx0aW5Db25zdHJ1Y3RvckJhc2U6OnZpc2l0Qwog
ICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1faW5pdGlhbGl6ZUZ1bmN0aW9uKTsKIH0K
IAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTRE9NQnVpbHRpbkNvbnN0cnVjdG9yQmFzZSk7CisK
IEpTQzo6SXNvU3Vic3BhY2UqIEpTRE9NQnVpbHRpbkNvbnN0cnVjdG9yQmFzZTo6c3Vic3BhY2VG
b3JJbXBsKEpTQzo6Vk0mIHZtKQogewogICAgIHJldHVybiAmc3RhdGljX2Nhc3Q8SlNWTUNsaWVu
dERhdGEqPih2bS5jbGllbnREYXRhKS0+ZG9tQnVpbHRpbkNvbnN0cnVjdG9yU3BhY2UoKTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQnVpbHRpbkNvbnN0cnVjdG9yQmFz
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQnVpbHRp
bkNvbnN0cnVjdG9yQmFzZS5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0RPTUJ1aWx0aW5Db25zdHJ1Y3RvckJhc2UuaAkod29ya2luZyBjb3B5KQpA
QCAtMSw2ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAyMDE1LCAyMDE2IENhbm9uIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqICBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAxNi0yMDIxIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKQEAgLTQyLDcg
KzQyLDcgQEAgcHJvdGVjdGVkOgogICAgIHsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNp
dENoaWxkcmVuKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVf
VklTSVRfQ0hJTERSRU47CiAKICAgICBKU0M6OkpTRnVuY3Rpb24qIGluaXRpYWxpemVGdW5jdGlv
bigpOwogICAgIHZvaWQgc2V0SW5pdGlhbGl6ZUZ1bmN0aW9uKEpTQzo6Vk0mLCBKU0M6OkpTRnVu
Y3Rpb24mKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2Jq
ZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUds
b2JhbE9iamVjdC5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMg
UmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAyMSBBcHBsZSBJbmMuIEFsbCBSaWdo
dHMgUmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTIzOCw3ICsy
MzgsOCBAQCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBKU0RPTUdsb2JhbE9iamVjCiAgICAgcmV0
dXJuIG51bGxwdHI7CiB9CiAKLXZvaWQgSlNET01HbG9iYWxPYmplY3Q6OnZpc2l0Q2hpbGRyZW4o
SlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZp
c2l0b3I+Cit2b2lkIEpTRE9NR2xvYmFsT2JqZWN0Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwq
IGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNET01HbG9iYWxPYmplY3QqIHRoaXNP
YmplY3QgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihjZWxsKTsKICAgICBBU1NFUlRfR0Nf
T0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC0yNjAsNiArMjYxLDggQEAg
dm9pZCBKU0RPTUdsb2JhbE9iamVjdDo6dmlzaXRDaGlsZHJlbihKUwogICAgIHRoaXNPYmplY3Qt
Pm1fYnVpbHRpbkludGVybmFsRnVuY3Rpb25zLnZpc2l0KHZpc2l0b3IpOwogfQogCitERUZJTkVf
VklTSVRfQ0hJTERSRU4oSlNET01HbG9iYWxPYmplY3QpOworCiB2b2lkIEpTRE9NR2xvYmFsT2Jq
ZWN0Ojpwcm9taXNlUmVqZWN0aW9uVHJhY2tlcihKU0dsb2JhbE9iamVjdCoganNHbG9iYWxPYmpl
Y3QsIEpTUHJvbWlzZSogcHJvbWlzZSwgSlNQcm9taXNlUmVqZWN0aW9uT3BlcmF0aW9uIG9wZXJh
dGlvbikKIHsKICAgICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS93
ZWJhcHBhcGlzLmh0bWwjdGhlLWhvc3Rwcm9taXNlcmVqZWN0aW9udHJhY2tlci1pbXBsZW1lbnRh
dGlvbgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01HbG9iYWxPYmplY3Qu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9i
amVjdC5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0RPTUdsb2JhbE9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAwOC0yMDE4IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDIxIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjksNyArNjksNyBAQCBwdWJs
aWM6CiAgICAgLy8gTWFrZSBiaW5kaW5nIGNvZGUgZ2VuZXJhdGlvbiBlYXNpZXIuCiAgICAgSlNE
T01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCgpIHsgcmV0dXJuIHRoaXM7IH0KIAotICAgIHN0
YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJik7
CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIERPTVdyYXBwZXJXb3JsZCYgd29y
bGQoKSB7IHJldHVybiBtX3dvcmxkLmdldCgpOyB9CiAgICAgYm9vbCB3b3JsZElzTm9ybWFsKCkg
Y29uc3QgeyByZXR1cm4gbV93b3JsZElzTm9ybWFsOyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0RPTUd1YXJkZWRPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0RPTUd1YXJkZWRPYmplY3QuaAkocmV2aXNpb24gMjcyODMwKQor
KysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01HdWFyZGVkT2JqZWN0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtNDEsNiArNDEsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc1N1c3BlbmRlZCgpIGNv
bnN0IHsgcmV0dXJuICFtX2d1YXJkZWQgfHwgIWNhbkludm9rZUNhbGxiYWNrKCk7IH0gLy8gVGhl
IHdyYXBwZXIgd29ybGQgaGFzIGdvbmUgYXdheSBvciBhY3RpdmUgRE9NIG9iamVjdHMgaGF2ZSBi
ZWVuIHN1c3BlbmRlZC4KIAogICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoSlNDOjpTbG90VmlzaXRv
ciYgdmlzaXRvcikgeyB2aXNpdG9yLmFwcGVuZChtX2d1YXJkZWQpOyB9CisgICAgdm9pZCB2aXNp
dEFnZ3JlZ2F0ZShKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsgdmlzaXRvci5h
cHBlbmQobV9ndWFyZGVkKTsgfQogCiAgICAgSlNDOjpKU1ZhbHVlIGd1YXJkZWRPYmplY3QoKSBj
b25zdCB7IHJldHVybiBtX2d1YXJkZWQuZ2V0KCk7IH0KICAgICBKU0RPTUdsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0KCkgY29uc3QgeyByZXR1cm4gbV9nbG9iYWxPYmplY3QuZ2V0KCk7IH0KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NUXVhZEN1c3RvbS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01RdWFkQ3VzdG9tLmNwcAko
cmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01RdWFk
Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMyw3ICszMyw4IEBACiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCi12b2lkIEpTRE9NUXVhZDo6dmlzaXRBZGRpdGlv
bmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNp
dG9yPgordm9pZCBKU0RPTVF1YWQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZp
c2l0b3IpCiB7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KGNvbnN0X2Nhc3Q8RE9NUG9pbnQq
Pigmd3JhcHBlZCgpLnAxKCkpKTsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QoY29uc3RfY2Fz
dDxET01Qb2ludCo+KCZ3cmFwcGVkKCkucDIoKSkpOwpAQCAtNDEsNCArNDIsNyBAQCB2b2lkIEpT
RE9NUXVhZDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oCiAgICAgdmlzaXRvci5hZGRPcGFxdWVS
b290KGNvbnN0X2Nhc3Q8RE9NUG9pbnQqPigmd3JhcHBlZCgpLnA0KCkpKTsKIH0KIAotfQordGVt
cGxhdGUgdm9pZCBKU0RPTVF1YWQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEFic3RyYWN0U2xv
dFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNET01RdWFkOjp2aXNpdEFkZGl0aW9uYWxDaGls
ZHJlbihTbG90VmlzaXRvciYpOworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0N1c3RvbS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dDdXN0b20uY3BwCShyZXZp
c2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0N1
c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDA3LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDA3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29w
eXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgpAQCAtMTE2LDcgKzExNiw4IEBAIEpTQ19ERUZJTkVfQ1VTVE9NX0dFVFRFUihqc0RPTVdp
bmRvd0luc3QKICAgICByZXR1cm4gbm9uQ2FjaGluZ1N0YXRpY0Z1bmN0aW9uR2V0dGVySW1wbDxq
c0RPTVdpbmRvd0luc3RhbmNlRnVuY3Rpb25fcG9zdE1lc3NhZ2UsIDI+KGdsb2JhbE9iamVjdCwg
cHJvcGVydHlOYW1lKTsKIH0KIAotdm9pZCBKU0RPTVdpbmRvdzo6dmlzaXRBZGRpdGlvbmFsQ2hp
bGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgor
dm9pZCBKU0RPTVdpbmRvdzo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRv
cikKIHsKICAgICBpZiAoRnJhbWUqIGZyYW1lID0gd3JhcHBlZCgpLmZyYW1lKCkpCiAgICAgICAg
IHZpc2l0b3IuYWRkT3BhcXVlUm9vdChmcmFtZSk7CkBAIC0xMjksNiArMTMwLDkgQEAgdm9pZCBK
U0RPTVdpbmRvdzo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZQogICAgIHdyYXBwZWQoKS52aXNpdEpT
RXZlbnRMaXN0ZW5lcnModmlzaXRvcik7CiB9CiAKK3RlbXBsYXRlIHZvaWQgSlNET01XaW5kb3c6
OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRl
IHZvaWQgSlNET01XaW5kb3c6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJik7
CisKICNpZiBFTkFCTEUoVVNFUl9NRVNTQUdFX0hBTkRMRVJTKQogSlNDX0RFRklORV9DVVNUT01f
R0VUVEVSKGpzRE9NV2luZG93X3dlYmtpdCwgKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFs
T2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkpCiB7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RlcHJlY2F0ZWRDU1NPTVZhbHVlQ3VzdG9t
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RlcHJlY2F0
ZWRDU1NPTVZhbHVlQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNEZXByZWNhdGVkQ1NTT01WYWx1ZUN1c3RvbS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMTkgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0zNSw3ICszNSw3IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1l
c3BhY2UgSlNDOwogCi1ib29sIEpTRGVwcmVjYXRlZENTU09NVmFsdWVPd25lcjo6aXNSZWFjaGFi
bGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQq
LCBTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikKK2Jvb2wgSlNEZXBy
ZWNhdGVkQ1NTT01WYWx1ZU93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6Okhh
bmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIEFic3RyYWN0U2xvdFZpc2l0b3ImIHZp
c2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCiB7CiAgICAgSlNEZXByZWNhdGVkQ1NTT01WYWx1
ZSoganNDU1NWYWx1ZSA9IGpzQ2FzdDxKU0RlcHJlY2F0ZWRDU1NPTVZhbHVlKj4oaGFuZGxlLnNs
b3QoKS0+YXNDZWxsKCkpOwogICAgIGlmICghanNDU1NWYWx1ZS0+aGFzQ3VzdG9tUHJvcGVydGll
cyhqc0NTU1ZhbHVlLT52bSgpKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
RG9jdW1lbnRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTRG9jdW1lbnRDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0RvY3VtZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOSwgMjAxMSwgMjAxNiwg
MjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKQEAgLTkxLDExICs5MSwxNSBAQCBKU1ZhbHVlIHRvSlMoSlNHbG9iYWxPYmplY3QqIGxleGlj
YWxHbG9iCiAgICAgcmV0dXJuIHRvSlNOZXdseUNyZWF0ZWQobGV4aWNhbEdsb2JhbE9iamVjdCwg
Z2xvYmFsT2JqZWN0LCBSZWY8RG9jdW1lbnQ+KGRvY3VtZW50KSk7CiB9CiAKLXZvaWQgSlNEb2N1
bWVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1w
bGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0RvY3VtZW50Ojp2aXNpdEFkZGl0aW9uYWxD
aGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChz
dGF0aWNfY2FzdDxTY3JpcHRFeGVjdXRpb25Db250ZXh0Kj4oJndyYXBwZWQoKSkpOwogfQogCit0
ZW1wbGF0ZSB2b2lkIEpTRG9jdW1lbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEFic3RyYWN0
U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNEb2N1bWVudDo6dmlzaXRBZGRpdGlvbmFs
Q2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKKwogdm9pZCBKU0RvY3VtZW50OjphbmFseXplSGVhcChK
U0NlbGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCiB7CiAgICAgQmFzZTo6YW5hbHl6
ZUhlYXAoY2VsbCwgYW5hbHl6ZXIpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNFcnJvckV2ZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0Vycm9yRXZlbnRDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Vycm9yRXZlbnRDdXN0b20uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxOCBZdXN1a2UgU3V6
dWtpIDx5dXN1a2VzdXp1a2lAc2xvd3N0YXJ0Lm9yZz4uCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0yOCw5ICsyOSwxMyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQg
SlNFcnJvckV2ZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2
aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNFcnJvckV2ZW50Ojp2
aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHdyYXBwZWQo
KS5vcmlnaW5hbEVycm9yKCkudmlzaXQodmlzaXRvcik7CiB9CiAKK3RlbXBsYXRlIHZvaWQgSlNF
cnJvckV2ZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OkFic3RyYWN0U2xvdFZpc2l0
b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNFcnJvckV2ZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJl
bihKU0M6OlNsb3RWaXNpdG9yJik7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRMaXN0ZW5lci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudExpc3RlbmVyLmNwcAkocmV2aXNp
b24gMjcyODMwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudExpc3RlbmVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChD
KSAyMDAxIFBldGVyIEtlbGx5IChwbWtAcG9zdC5jb20pCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAz
LTIwMTkgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykg
MjAwMy0yMDIxIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgog
ICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQ
dWJsaWMKQEAgLTc4LDcgKzc4LDggQEAgSlNPYmplY3QqIEpTRXZlbnRMaXN0ZW5lcjo6aW5pdGlh
bGl6ZUpTRgogICAgIHJldHVybiBudWxscHRyOwogfQogCi12b2lkIEpTRXZlbnRMaXN0ZW5lcjo6
dmlzaXRKU0Z1bmN0aW9uKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUg
VmlzaXRvcj4KK2lubGluZSB2b2lkIEpTRXZlbnRMaXN0ZW5lcjo6dmlzaXRKU0Z1bmN0aW9uSW1w
bChWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIC8vIElmIG1fd3JhcHBlciBpcyBudWxsLCB3ZSBh
cmUgbm90IGtlZXBpbmcgbV9qc0Z1bmN0aW9uIGFsaXZlLgogICAgIGlmICghbV93cmFwcGVyKQpA
QCAtODcsNiArODgsOSBAQCB2b2lkIEpTRXZlbnRMaXN0ZW5lcjo6dmlzaXRKU0Z1bmN0aW9uKFNs
CiAgICAgdmlzaXRvci5hcHBlbmQobV9qc0Z1bmN0aW9uKTsKIH0KIAordm9pZCBKU0V2ZW50TGlz
dGVuZXI6OnZpc2l0SlNGdW5jdGlvbihBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKSB7IHZp
c2l0SlNGdW5jdGlvbkltcGwodmlzaXRvcik7IH0KK3ZvaWQgSlNFdmVudExpc3RlbmVyOjp2aXNp
dEpTRnVuY3Rpb24oU2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsgdmlzaXRKU0Z1bmN0aW9uSW1wbCh2
aXNpdG9yKTsgfQorCiBzdGF0aWMgdm9pZCBoYW5kbGVCZWZvcmVVbmxvYWRFdmVudFJldHVyblZh
bHVlKEJlZm9yZVVubG9hZEV2ZW50JiBldmVudCwgY29uc3QgU3RyaW5nJiByZXR1cm5WYWx1ZSkK
IHsKICAgICBpZiAocmV0dXJuVmFsdWUuaXNOdWxsKCkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0V2ZW50TGlzdGVuZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0V2ZW50TGlzdGVuZXIuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudExpc3RlbmVyLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNiArMSw2IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMjAwMSBQZXRlciBLZWxseSAo
cG1rQHBvc3QuY29tKQotICogIENvcHlyaWdodCAoQykgMjAwMy0yMDE4IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCkBAIC02Miw2ICs2Miw5
IEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICB2aXJ0dWFsIEpTQzo6SlNPYmplY3QqIGluaXRp
YWxpemVKU0Z1bmN0aW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmKSBjb25zdDsKKworICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgdmlzaXRKU0Z1bmN0aW9uSW1wbChWaXNpdG9y
Jik7CisgICAgdm9pZCB2aXNpdEpTRnVuY3Rpb24oSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJikg
ZmluYWw7CiAgICAgdm9pZCB2aXNpdEpTRnVuY3Rpb24oSlNDOjpTbG90VmlzaXRvciYpIGZpbmFs
OwogCiBwcm90ZWN0ZWQ6CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50
VGFyZ2V0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0V2ZW50VGFyZ2V0Q3VzdG9tLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNFdmVudFRhcmdldEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTcgQXBwbGUgSW5j
LiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMjEgQXBwbGUg
SW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC03Miw5ICs3MiwxMyBAQCBzdGQ6OnVuaXF1ZV9wdHI8SlNFdmVudFRhcmdldFdyYXBwZXI+
IGpzCiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLXZvaWQgSlNFdmVudFRhcmdldDo6dmlzaXRB
ZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBWaXNpdG9yPgordm9pZCBKU0V2ZW50VGFyZ2V0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihW
aXNpdG9yJiB2aXNpdG9yKQogewogICAgIHdyYXBwZWQoKS52aXNpdEpTRXZlbnRMaXN0ZW5lcnMo
dmlzaXRvcik7CiB9CiAKK3RlbXBsYXRlIHZvaWQgSlNFdmVudFRhcmdldDo6dmlzaXRBZGRpdGlv
bmFsQ2hpbGRyZW4oQWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU0V2ZW50
VGFyZ2V0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYpOworCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0ZldGNo
RXZlbnRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTRmV0Y2hFdmVudEN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTRmV0Y2hFdmVudEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzAs
MTEgKzMwLDE1IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBKU0ZldGNoRXZlbnQ6
OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1w
bGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0ZldGNoRXZlbnQ6OnZpc2l0QWRkaXRpb25h
bENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290
KCZ3cmFwcGVkKCkucmVxdWVzdCgpKTsKIH0KIAotfQordGVtcGxhdGUgdm9pZCBKU0ZldGNoRXZl
bnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpOwor
dGVtcGxhdGUgdm9pZCBKU0ZldGNoRXZlbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6
U2xvdFZpc2l0b3ImKTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTENhbnZhc0VsZW1lbnRDdXN0b20uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTENhbnZhc0Vs
ZW1lbnRDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0hUTUxDYW52YXNFbGVtZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIwLTIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMSw5
ICszMSwxMyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgSlNIVE1MQ2FudmFzRWxl
bWVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikK
K3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTSFRNTENhbnZhc0VsZW1lbnQ6OnZp
c2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgdmlzaXRvci5h
ZGRPcGFxdWVSb290KHN0YXRpY19jYXN0PENhbnZhc0Jhc2UqPigmd3JhcHBlZCgpKSk7CiB9CiAK
K3RlbXBsYXRlIHZvaWQgSlNIVE1MQ2FudmFzRWxlbWVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRy
ZW4oSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTSFRNTENhbnZh
c0VsZW1lbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImKTsKKwog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNIVE1MVGVtcGxhdGVFbGVtZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0hUTUxUZW1wbGF0ZUVsZW1lbnRDdXN0b20uY3BwCShyZXZpc2lv
biAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxUZW1wbGF0ZUVs
ZW1lbnRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENv
cHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKQEAgLTM3LDEwICszOCwxNCBAQAogbmFtZXNwYWNl
IFdlYkNvcmUgewogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAotdm9pZCBKU0hUTUxUZW1wbGF0ZUVs
ZW1lbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3Ip
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0hUTUxUZW1wbGF0ZUVsZW1lbnQ6
OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgaWYgKGF1
dG8qIGNvbnRlbnQgPSB3cmFwcGVkKCkuY29udGVudElmQXZhaWxhYmxlKCkpCiAgICAgICAgIHZp
c2l0b3IuYWRkT3BhcXVlUm9vdChyb290KGNvbnRlbnQpKTsKIH0KIAordGVtcGxhdGUgdm9pZCBK
U0hUTUxUZW1wbGF0ZUVsZW1lbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6QWJzdHJh
Y3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU0hUTUxUZW1wbGF0ZUVsZW1lbnQ6OnZp
c2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImKTsKKwogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIaXN0b3J5Q3Vz
dG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hpc3Rv
cnlDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0hpc3RvcnlDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAwOC0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDQsOSArNDQsMTMg
QEAgSlNWYWx1ZSBKU0hpc3Rvcnk6OnN0YXRlKEpTR2xvYmFsT2JqZWN0JgogICAgIH0pOwogfQog
Ci12b2lkIEpTSGlzdG9yeTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZp
c2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0hpc3Rvcnk6OnZpc2l0
QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgd3JhcHBlZCgpLmNh
Y2hlZFN0YXRlRm9yR0MoKS52aXNpdCh2aXNpdG9yKTsKIH0KIAordGVtcGxhdGUgdm9pZCBKU0hp
c3Rvcnk6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3Rl
bXBsYXRlIHZvaWQgSlNIaXN0b3J5Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRv
ciYpOworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0lEQkN1cnNvckN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNJREJDdXJzb3JDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI4MzApCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQkN1cnNvckN1c3RvbS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtNTAsNyArNTAsOCBAQCBKU0M6OkpTVmFsdWUgSlNJREJDdXJzb3I6OnByaW1hcnlL
ZXkoSlNDCiAgICAgfSk7CiB9CiAKLXZvaWQgSlNJREJDdXJzb3I6OnZpc2l0QWRkaXRpb25hbENo
aWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4K
K3ZvaWQgSlNJREJDdXJzb3I6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0
b3IpCiB7CiAgICAgYXV0byYgY3Vyc29yID0gd3JhcHBlZCgpOwogICAgIGlmIChhdXRvKiByZXF1
ZXN0ID0gY3Vyc29yLnJlcXVlc3QoKSkKQEAgLTU5LDYgKzYwLDkgQEAgdm9pZCBKU0lEQkN1cnNv
cjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZQogICAgIGN1cnNvci5wcmltYXJ5S2V5V3JhcHBlcigp
LnZpc2l0KHZpc2l0b3IpOwogfQogCit0ZW1wbGF0ZSB2b2lkIEpTSURCQ3Vyc29yOjp2aXNpdEFk
ZGl0aW9uYWxDaGlsZHJlbihBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpT
SURCQ3Vyc29yOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYpOworCiBKU1Zh
bHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTRE9NR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIFJlZjxJREJDdXJzb3I+JiYgY3Vyc29yKQogewogICAgIGlmIChp
czxJREJDdXJzb3JXaXRoVmFsdWU+KGN1cnNvcikpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0lEQkN1cnNvcldpdGhWYWx1ZUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJDdXJzb3JXaXRoVmFsdWVDdXN0b20uY3BwCShy
ZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQkN1cnNv
cldpdGhWYWx1ZUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDMsMTIgKzQzLDE2IEBAIEpTQzo6
SlNWYWx1ZSBKU0lEQkN1cnNvcldpdGhWYWx1ZTo6dmFsdWUKICAgICB9KTsKIH0KIAotdm9pZCBK
U0lEQkN1cnNvcldpdGhWYWx1ZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3Im
IHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0lEQkN1cnNvcldp
dGhWYWx1ZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAg
ICBKU0lEQkN1cnNvcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4odmlzaXRvcik7CiAgICAgd3Jh
cHBlZCgpLnZhbHVlV3JhcHBlcigpLnZpc2l0KHZpc2l0b3IpOwogfQogCit0ZW1wbGF0ZSB2b2lk
IEpTSURCQ3Vyc29yV2l0aFZhbHVlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihBYnN0cmFjdFNs
b3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTSURCQ3Vyc29yV2l0aFZhbHVlOjp2aXNpdEFk
ZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYpOworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CiAKICNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTSURCSW5kZXhDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCSW5kZXhDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI4
MzApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQkluZGV4Q3VzdG9tLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIw
MjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0zNCwxMSArMzQsMTUgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5n
IG5hbWVzcGFjZSBKU0M7CiAKLXZvaWQgSlNJREJJbmRleDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRy
ZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9p
ZCBKU0lEQkluZGV4Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQog
ewogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChzdGF0aWNfY2FzdDxJREJJbmRleCY+KHdyYXBw
ZWQoKSkub2JqZWN0U3RvcmVBc09wYXF1ZVJvb3QoKSk7CiB9CiAKK3RlbXBsYXRlIHZvaWQgSlNJ
REJJbmRleDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oQWJzdHJhY3RTbG90VmlzaXRvciYpOwor
dGVtcGxhdGUgdm9pZCBKU0lEQkluZGV4Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90Vmlz
aXRvciYpOworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoSU5E
RVhFRF9EQVRBQkFTRSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCT2Jq
ZWN0U3RvcmVDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTSURCT2JqZWN0U3RvcmVDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQk9iamVjdFN0b3JlQ3VzdG9tLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTIgTWljaGFl
bCBQcnVldHQgPG1pY2hhZWxANjhrLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCkBAIC0zNiwxMSArMzcsMTUgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVz
cGFjZSBKU0M7CiAKLXZvaWQgSlNJREJPYmplY3RTdG9yZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRy
ZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9p
ZCBKU0lEQk9iamVjdFN0b3JlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNp
dG9yKQogewogICAgIHN0YXRpY19jYXN0PElEQk9iamVjdFN0b3JlJj4od3JhcHBlZCgpKS52aXNp
dFJlZmVyZW5jZWRJbmRleGVzKHZpc2l0b3IpOwogfQogCi19Cit0ZW1wbGF0ZSB2b2lkIEpTSURC
T2JqZWN0U3RvcmU6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0b3Im
KTsKK3RlbXBsYXRlIHZvaWQgSlNJREJPYmplY3RTdG9yZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRy
ZW4oU2xvdFZpc2l0b3ImKTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCUmVxdWVzdEN1c3RvbS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJSZXF1ZXN0Q3VzdG9t
LmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJ
REJSZXF1ZXN0Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE5LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC04OSwxMiArODksMTcgQEAgSlNDOjpK
U1ZhbHVlIEpTSURCUmVxdWVzdDo6cmVzdWx0KEpTQzo6SgogICAgIH0pOwogfQogCi12b2lkIEpT
SURCUmVxdWVzdDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3Ip
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0lEQlJlcXVlc3Q6OnZpc2l0QWRk
aXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0byYgcmVxdWVzdCA9
IHdyYXBwZWQoKTsKICAgICByZXF1ZXN0LnJlc3VsdFdyYXBwZXIoKS52aXNpdCh2aXNpdG9yKTsK
ICAgICByZXF1ZXN0LmN1cnNvcldyYXBwZXIoKS52aXNpdCh2aXNpdG9yKTsKIH0KIAotfQordGVt
cGxhdGUgdm9pZCBKU0lEQlJlcXVlc3Q6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEFic3RyYWN0
U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNJREJSZXF1ZXN0Ojp2aXNpdEFkZGl0aW9u
YWxDaGlsZHJlbihTbG90VmlzaXRvciYpOworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKICNl
bmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTSURCVHJhbnNhY3Rpb25DdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCVHJhbnNhY3Rpb25DdXN0b20uY3BwCShyZXZpc2lv
biAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQlRyYW5zYWN0aW9u
Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNCwxMSArMzQsMTUgQEAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKLXZvaWQgSlNJREJUcmFuc2FjdGlvbjo6dmlz
aXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBl
bmFtZSBWaXNpdG9yPgordm9pZCBKU0lEQlRyYW5zYWN0aW9uOjp2aXNpdEFkZGl0aW9uYWxDaGls
ZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHN0YXRpY19jYXN0PElEQlRyYW5zYWN0aW9u
Jj4od3JhcHBlZCgpKS52aXNpdFJlZmVyZW5jZWRPYmplY3RTdG9yZXModmlzaXRvcik7CiB9CiAK
LX0KK3RlbXBsYXRlIHZvaWQgSlNJREJUcmFuc2FjdGlvbjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRy
ZW4oQWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU0lEQlRyYW5zYWN0aW9u
Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYpOworCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCiAKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJ
bnRlcnNlY3Rpb25PYnNlcnZlckN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNJbnRlcnNlY3Rpb25PYnNlcnZlckN1c3RvbS5jcHAJKHJldmlzaW9u
IDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW50ZXJzZWN0aW9uT2Jz
ZXJ2ZXJDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENv
cHlyaWdodCAoQykgMjAyMCBJZ2FsaWEgUy5MLgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMzAsMTAgKzMxLDE0IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBKU0lu
dGVyc2VjdGlvbk9ic2VydmVyOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNp
dG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNJbnRlcnNl
Y3Rpb25PYnNlcnZlcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikK
IHsKICAgICBpZiAoYXV0byogY2FsbGJhY2sgPSB3cmFwcGVkKCkuY2FsbGJhY2tDb25jdXJyZW50
bHkoKSkKICAgICAgICAgY2FsbGJhY2stPnZpc2l0SlNGdW5jdGlvbih2aXNpdG9yKTsKIH0KIAot
fQordGVtcGxhdGUgdm9pZCBKU0ludGVyc2VjdGlvbk9ic2VydmVyOjp2aXNpdEFkZGl0aW9uYWxD
aGlsZHJlbihKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNJbnRl
cnNlY3Rpb25PYnNlcnZlcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRv
ciYpOworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0ludGVyc2VjdGlvbk9ic2VydmVyRW50cnlDdXN0b20uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW50ZXJzZWN0aW9uT2JzZXJ2ZXJFbnRy
eUN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTSW50ZXJzZWN0aW9uT2JzZXJ2ZXJFbnRyeUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDE4IEdvb2dsZSBMTEMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMCw3
ICszMSw4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBKU0ludGVyc2VjdGlvbk9i
c2VydmVyRW50cnk6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZp
c2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0ludGVyc2VjdGlvbk9i
c2VydmVyRW50cnk6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7
CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHJvb3Qod3JhcHBlZCgpLnRhcmdldCgpKSk7CiAg
ICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHdyYXBwZWQoKS5ib3VuZGluZ0NsaWVudFJlY3QoKSk7
CkBAIC0zOCw0ICs0MCw3IEBAIHZvaWQgSlNJbnRlcnNlY3Rpb25PYnNlcnZlckVudHJ5Ojp2aXNp
dEEKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qod3JhcHBlZCgpLnJvb3RCb3VuZHMoKSk7CiB9
CiAKLX0KK3RlbXBsYXRlIHZvaWQgSlNJbnRlcnNlY3Rpb25PYnNlcnZlckVudHJ5Ojp2aXNpdEFk
ZGl0aW9uYWxDaGlsZHJlbihKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZv
aWQgSlNJbnRlcnNlY3Rpb25PYnNlcnZlckVudHJ5Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihK
U0M6OlNsb3RWaXNpdG9yJik7CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWVzc2FnZUNoYW5uZWxDdXN0b20uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWVzc2FnZUNoYW5uZWxDdXN0b20u
Y3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01l
c3NhZ2VDaGFubmVsQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMjEgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMyw3ICszMyw4IEBA
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBKU01lc3NhZ2VDaGFubmVsOjp2aXNpdEFk
ZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlw
ZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNNZXNzYWdlQ2hhbm5lbDo6dmlzaXRBZGRpdGlvbmFsQ2hp
bGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBpZiAoTWVzc2FnZVBvcnQqIHBvcnQgPSB3
cmFwcGVkKCkucG9ydDEoKSkKICAgICAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHBvcnQpOwpA
QCAtNDIsNiArNDMsOSBAQCB2b2lkIEpTTWVzc2FnZUNoYW5uZWw6OnZpc2l0QWRkaXRpb25hbENo
CiAgICAgICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChwb3J0KTsKIH0KIAordGVtcGxhdGUgdm9p
ZCBKU01lc3NhZ2VDaGFubmVsOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OkFic3RyYWN0
U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNNZXNzYWdlQ2hhbm5lbDo6dmlzaXRBZGRp
dGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYpOworCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoQ0hBTk5FTF9NRVNTQUdJTkcpCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU01lc3NhZ2VFdmVudEN1c3RvbS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNZXNzYWdlRXZlbnRDdXN0b20uY3BwCShy
ZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01lc3NhZ2VF
dmVudEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogQ29w
eXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDktMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDktMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCkBAIC03MCw3ICs3MCw4IEBAIEpTQzo6
SlNWYWx1ZSBKU01lc3NhZ2VFdmVudDo6ZGF0YShKU0M6OkoKICAgICB9KTsKIH0KIAotdm9pZCBK
U01lc3NhZ2VFdmVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYg
dmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTTWVzc2FnZUV2ZW50
Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFdURjo6
c3dpdGNoT24od3JhcHBlZCgpLmRhdGEoKSwgWyZ2aXNpdG9yXSAoY29uc3QgSlNWYWx1ZUluV3Jh
cHBlZE9iamVjdCYgZGF0YSkgewogICAgICAgICBkYXRhLnZpc2l0KHZpc2l0b3IpOwpAQCAtODQs
NCArODUsNyBAQCB2b2lkIEpTTWVzc2FnZUV2ZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsCiAgICAg
d3JhcHBlZCgpLmNhY2hlZFBvcnRzKCkudmlzaXQodmlzaXRvcik7CiB9CiAKK3RlbXBsYXRlIHZv
aWQgSlNNZXNzYWdlRXZlbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6QWJzdHJhY3RT
bG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU01lc3NhZ2VFdmVudDo6dmlzaXRBZGRpdGlv
bmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYpOworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01lc3NhZ2VQb3J0Q3VzdG9tLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01lc3NhZ2VQb3J0
Q3VzdG9tLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNNZXNzYWdlUG9ydEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMDksIDIwMTYgQXBwbGUgSW5jLiBBbGwgUmln
aHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMjEgQXBwbGUgSW5jLiBBbGwg
UmlnaHRzIFJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCBS
aWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0zMSwxMSArMzEsMTUgQEAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKLXZvaWQgSlNNZXNzYWdl
UG9ydDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1w
bGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU01lc3NhZ2VQb3J0Ojp2aXNpdEFkZGl0aW9u
YWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIC8vIElmIHdlIGhhdmUgYSBsb2Nh
bGx5IGVudGFuZ2xlZCBwb3J0LCB3ZSBjYW4gZGlyZWN0bHkgbWFyayBpdCBhcyByZWFjaGFibGUu
IFBvcnRzIHRoYXQgYXJlIHJlbW90ZWx5IGVudGFuZ2xlZCBhcmUgbWFya2VkIGluLXVzZSBieSBt
YXJrQWN0aXZlT2JqZWN0c0ZvckNvbnRleHQoKS4KICAgICBpZiAoTWVzc2FnZVBvcnQqIHBvcnQg
PSB3cmFwcGVkKCkubG9jYWxseUVudGFuZ2xlZFBvcnQoKSkKICAgICAgICAgdmlzaXRvci5hZGRP
cGFxdWVSb290KHBvcnQpOwogfQogCit0ZW1wbGF0ZSB2b2lkIEpTTWVzc2FnZVBvcnQ6OnZpc2l0
QWRkaXRpb25hbENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQg
SlNNZXNzYWdlUG9ydDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKKwog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNNdXRhdGlvbk9ic2VydmVyQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU011dGF0aW9uT2JzZXJ2ZXJDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI4
MzApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU011dGF0aW9uT2JzZXJ2ZXJDdXN0
b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAo
QykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKQEAgLTM5LDEyICszOSwxNiBAQAogbmFtZXNwYWNlIFdlYkNv
cmUgewogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAotdm9pZCBKU011dGF0aW9uT2JzZXJ2ZXI6OnZp
c2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0
ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU011dGF0aW9uT2JzZXJ2ZXI6OnZpc2l0QWRkaXRp
b25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgd3JhcHBlZCgpLmNhbGxiYWNr
KCkudmlzaXRKU0Z1bmN0aW9uKHZpc2l0b3IpOwogfQogCi1ib29sIEpTTXV0YXRpb25PYnNlcnZl
ck93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25v
d24+IGhhbmRsZSwgdm9pZCosIFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKipyZWFz
b24pCit0ZW1wbGF0ZSB2b2lkIEpTTXV0YXRpb25PYnNlcnZlcjo6dmlzaXRBZGRpdGlvbmFsQ2hp
bGRyZW4oSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTTXV0YXRp
b25PYnNlcnZlcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYpOwor
Citib29sIEpTTXV0YXRpb25PYnNlcnZlck93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290
cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIEFic3RyYWN0U2xvdFZp
c2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKnJlYXNvbikKIHsKICAgICBmb3IgKGF1dG8qIG5v
ZGUgOiBqc0Nhc3Q8SlNNdXRhdGlvbk9ic2VydmVyKj4oaGFuZGxlLnNsb3QoKS0+YXNDZWxsKCkp
LT53cmFwcGVkKCkub2JzZXJ2ZWROb2RlcygpKSB7CiAgICAgICAgIGlmICh2aXNpdG9yLmNvbnRh
aW5zT3BhcXVlUm9vdChyb290KG5vZGUpKSkgewpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNNdXRhdGlvblJlY29yZEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNNdXRhdGlvblJlY29yZEN1c3RvbS5jcHAJKHJldmlzaW9uIDI3
MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTXV0YXRpb25SZWNvcmRDdXN0
b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTgtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTMwLDkgKzMwLDEzIEBACiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotdm9pZCBKU011dGF0aW9uUmVjb3JkOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6
OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQg
SlNNdXRhdGlvblJlY29yZDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRv
cikKIHsKICAgICB3cmFwcGVkKCkudmlzaXROb2Rlc0NvbmN1cnJlbnRseSh2aXNpdG9yKTsKIH0K
LSAgICAKKwordGVtcGxhdGUgdm9pZCBKU011dGF0aW9uUmVjb3JkOjp2aXNpdEFkZGl0aW9uYWxD
aGlsZHJlbihKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNNdXRh
dGlvblJlY29yZDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYpOwor
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU05hdmlnYXRvckN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNOYXZpZ2F0b3JDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05hdmlnYXRvckN1c3RvbS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIxIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtMzIsMTEgKzMyLDE1IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBKU05hdmln
YXRvcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikK
K3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTTmF2aWdhdG9yOjp2aXNpdEFkZGl0
aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHZpc2l0b3IuYWRkT3BhcXVl
Um9vdChzdGF0aWNfY2FzdDxOYXZpZ2F0b3JCYXNlKj4oJndyYXBwZWQoKSkpOwogfQogCit0ZW1w
bGF0ZSB2b2lkIEpTTmF2aWdhdG9yOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OkFic3Ry
YWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNOYXZpZ2F0b3I6OnZpc2l0QWRkaXRp
b25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImKTsKKwogI2lmIEVOQUJMRShNRURJQV9TVFJF
QU0pCiBKU0M6OkpTVmFsdWUgSlNOYXZpZ2F0b3I6OmdldFVzZXJNZWRpYShKU0M6OkpTR2xvYmFs
T2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OkNhbGxGcmFtZSYgY2FsbEZyYW1lKQog
ewpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlQ3VzdG9tLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVDdXN0b20uY3BwCShy
ZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVDdXN0
b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAwNywgMjAwOS0yMDEwLCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNzQsNyArNzQsNyBAQCB1c2lu
ZyBuYW1lc3BhY2UgSlNDOwogCiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCi1zdGF0aWMg
aW5saW5lIGJvb2wgaXNSZWFjaGFibGVGcm9tRE9NKE5vZGUqIG5vZGUsIFNsb3RWaXNpdG9yJiB2
aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQorc3RhdGljIGlubGluZSBib29sIGlzUmVhY2hh
YmxlRnJvbURPTShOb2RlKiBub2RlLCBBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25z
dCBjaGFyKiogcmVhc29uKQogewogICAgIGlmICghbm9kZS0+aXNDb25uZWN0ZWQoKSkgewogICAg
ICAgICBpZiAoaXM8RWxlbWVudD4oKm5vZGUpKSB7CkBAIC0xMjMsNyArMTIzLDcgQEAgc3RhdGlj
IGlubGluZSBib29sIGlzUmVhY2hhYmxlRnJvbURPTShObwogICAgIHJldHVybiB2aXNpdG9yLmNv
bnRhaW5zT3BhcXVlUm9vdChyb290KG5vZGUpKTsKIH0KIAotYm9vbCBKU05vZGVPd25lcjo6aXNS
ZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUs
IHZvaWQqLCBTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikKK2Jvb2wg
SlNOb2RlT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6
VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvciwgY29u
c3QgY2hhcioqIHJlYXNvbikKIHsKICAgICBKU05vZGUqIGpzTm9kZSA9IGpzQ2FzdDxKU05vZGUq
PihoYW5kbGUuc2xvdCgpLT5hc0NlbGwoKSk7CiAgICAgcmV0dXJuIGlzUmVhY2hhYmxlRnJvbURP
TSgmanNOb2RlLT53cmFwcGVkKCksIHZpc2l0b3IsIHJlYXNvbik7CkBAIC0xMzYsMTEgKzEzNiwx
NSBAQCBKU1Njb3BlKiBKU05vZGU6OnB1c2hFdmVudEhhbmRsZXJTY29wZShKCiAgICAgcmV0dXJu
IG5vZGU7CiB9CiAKLXZvaWQgSlNOb2RlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90Vmlz
aXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTTm9kZTo6
dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB2aXNpdG9y
LmFkZE9wYXF1ZVJvb3Qocm9vdCh3cmFwcGVkKCkpKTsKIH0KIAordGVtcGxhdGUgdm9pZCBKU05v
ZGU6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBs
YXRlIHZvaWQgSlNOb2RlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYpOwor
CiBzdGF0aWMgQUxXQVlTX0lOTElORSBKU1ZhbHVlIGNyZWF0ZVdyYXBwZXJJbmxpbmUoSlNHbG9i
YWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIFJlZjxOb2RlPiYmIG5vZGUpCiB7CiAgICAgQVNTRVJUKCFnZXRDYWNoZWRXcmFwcGVy
KGdsb2JhbE9iamVjdC0+d29ybGQoKSwgbm9kZSkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNOb2RlSXRlcmF0b3JDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUl0ZXJhdG9yQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcy
ODMwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlSXRlcmF0b3JDdXN0b20u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwNiwgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKQEAgLTI1LDEwICsyNSwxNCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLXZvaWQgSlNOb2RlSXRlcmF0b3I6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xv
dFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU05v
ZGVJdGVyYXRvcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsK
ICAgICBpZiAoTm9kZUZpbHRlciogZmlsdGVyID0gd3JhcHBlZCgpLmZpbHRlcigpKQogICAgICAg
ICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QoZmlsdGVyKTsKIH0KIAotfQordGVtcGxhdGUgdm9pZCBK
U05vZGVJdGVyYXRvcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpBYnN0cmFjdFNsb3RW
aXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTTm9kZUl0ZXJhdG9yOjp2aXNpdEFkZGl0aW9uYWxD
aGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJik7CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUxpc3RDdXN0b20uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUxpc3RDdXN0b20uY3Bw
CShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVM
aXN0Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDctMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM3LDcgKzM3LDcgQEAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKLWJvb2wgSlNOb2RlTGlzdE93bmVy
Ojppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhh
bmRsZSwgdm9pZCosIFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQor
Ym9vbCBKU05vZGVMaXN0T3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFu
ZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgQWJzdHJhY3RTbG90VmlzaXRvciYgdmlz
aXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikKIHsKICAgICBKU05vZGVMaXN0KiBqc05vZGVMaXN0
ID0ganNDYXN0PEpTTm9kZUxpc3QqPihoYW5kbGUuc2xvdCgpLT5hc0NlbGwoKSk7CiAgICAgaWYg
KCFqc05vZGVMaXN0LT5oYXNDdXN0b21Qcm9wZXJ0aWVzKGpzTm9kZUxpc3QtPnZtKCkpKQpJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNPZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdD
b250ZXh0MkRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTT2Zmc2NyZWVuQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQ3VzdG9tLmNwcAkocmV2aXNp
b24gMjcyODMwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNPZmZzY3JlZW5DYW52
YXNSZW5kZXJpbmdDb250ZXh0MkRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTMxLDcgKzMxLDcgQEAgaW5saW5lIHZv
aWQqIHJvb3QoT2Zmc2NyZWVuQ2FudmFzKiBjYW52YQogICAgIHJldHVybiBjYW52YXM7CiB9CiAK
LWJvb2wgSlNPZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRPd25lcjo6aXNSZWFjaGFi
bGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQq
LCBTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikKK2Jvb2wgSlNPZmZz
Y3JlZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVl
Um9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBBYnN0cmFjdFNs
b3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQogewogICAgIGlmIChVTkxJ
S0VMWShyZWFzb24pKQogICAgICAgICAqcmVhc29uID0gIkNhbnZhcyBpcyBvcGFxdWUgcm9vdCI7
CkBAIC00MSwxMSArNDEsMTUgQEAgYm9vbCBKU09mZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyRAogICAgIHJldHVybiB2aXNpdG9yLmNvbnRhaW5zT3BhcXVlUm9vdChyb290KTsKIH0KIAot
dm9pZCBKU09mZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6dmlzaXRBZGRpdGlvbmFs
Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
Pgordm9pZCBKU09mZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6dmlzaXRBZGRpdGlv
bmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJv
b3Qocm9vdCgmd3JhcHBlZCgpLmNhbnZhcygpKSk7CiB9CiAKK3RlbXBsYXRlIHZvaWQgSlNPZmZz
Y3JlZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEFi
c3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNPZmZzY3JlZW5DYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CisK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU1BhaW50UmVuZGVyaW5nQ29udGV4dDJEQ3VzdG9tLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1BhaW50UmVuZGVyaW5nQ29udGV4dDJE
Q3VzdG9tLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNQYWludFJlbmRlcmluZ0NvbnRleHQyREN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOC0yMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzYs
NyArMzYsNyBAQCBpbmxpbmUgdm9pZCogcm9vdChDdXN0b21QYWludENhbnZhcyogY2FuCiAgICAg
cmV0dXJuIGNhbnZhczsKIH0KIAotYm9vbCBKU1BhaW50UmVuZGVyaW5nQ29udGV4dDJET3duZXI6
OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFu
ZGxlLCB2b2lkKiwgU2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCiti
b29sIEpTUGFpbnRSZW5kZXJpbmdDb250ZXh0MkRPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVl
Um9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBBYnN0cmFjdFNs
b3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQogewogICAgIGlmIChVTkxJ
S0VMWShyZWFzb24pKQogICAgICAgICAqcmVhc29uID0gIkNhbnZhcyBpcyBvcGFxdWUgcm9vdCI7
CkBAIC00NiwxMSArNDYsMTUgQEAgYm9vbCBKU1BhaW50UmVuZGVyaW5nQ29udGV4dDJET3duZXI6
OmlzUgogICAgIHJldHVybiB2aXNpdG9yLmNvbnRhaW5zT3BhcXVlUm9vdChyb290KTsKIH0KIAot
dm9pZCBKU1BhaW50UmVuZGVyaW5nQ29udGV4dDJEOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihT
bG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpT
UGFpbnRSZW5kZXJpbmdDb250ZXh0MkQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3Im
IHZpc2l0b3IpCiB7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHJvb3QoJndyYXBwZWQoKS5j
YW52YXMoKSkpOwogfQogCit0ZW1wbGF0ZSB2b2lkIEpTUGFpbnRSZW5kZXJpbmdDb250ZXh0MkQ6
OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRl
IHZvaWQgSlNQYWludFJlbmRlcmluZ0NvbnRleHQyRDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4o
U2xvdFZpc2l0b3ImKTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogI2VuZGlmCiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUGFpbnRXb3JrbGV0R2xvYmFsU2NvcGVDdXN0
b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUGFpbnRX
b3JrbGV0R2xvYmFsU2NvcGVDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU1BhaW50V29ya2xldEdsb2JhbFNjb3BlQ3VzdG9tLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTgg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE4LTIw
MjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0zMSw3ICszMSw4IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBu
YW1lc3BhY2UgSlNDOwogCi12b2lkIEpTUGFpbnRXb3JrbGV0R2xvYmFsU2NvcGU6OnZpc2l0QWRk
aXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBl
bmFtZSBWaXNpdG9yPgordm9pZCBKU1BhaW50V29ya2xldEdsb2JhbFNjb3BlOjp2aXNpdEFkZGl0
aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGF1dG8gbG9ja2VyID0gaG9s
ZExvY2sod3JhcHBlZCgpLnBhaW50RGVmaW5pdGlvbkxvY2soKSk7CiAgICAgZm9yIChhdXRvJiBy
ZWdpc3RlcmVkIDogd3JhcHBlZCgpLnBhaW50RGVmaW5pdGlvbk1hcCgpLnZhbHVlcygpKSB7CkBA
IC00MCw1ICs0MSw5IEBAIHZvaWQgSlNQYWludFdvcmtsZXRHbG9iYWxTY29wZTo6dmlzaXRBZGQK
ICAgICB9CiB9CiAKLX0KK3RlbXBsYXRlIHZvaWQgSlNQYWludFdvcmtsZXRHbG9iYWxTY29wZTo6
dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1w
bGF0ZSB2b2lkIEpTUGFpbnRXb3JrbGV0R2xvYmFsU2NvcGU6OnZpc2l0QWRkaXRpb25hbENoaWxk
cmVuKEpTQzo6U2xvdFZpc2l0b3ImKTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCiAjZW5k
aWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUGF5bWVudE1ldGhvZENoYW5n
ZUV2ZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU1BheW1lbnRNZXRob2RDaGFuZ2VFdmVudEN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjgzMCkK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUGF5bWVudE1ldGhvZENoYW5nZUV2ZW50
Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE4LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00MSw3ICs0MSw4IEBAIEpTQzo6SlNWYWx1ZSBKU1Bh
eW1lbnRNZXRob2RDaGFuZ2VFdmVudDoKICAgICB9KTsKIH0KIAotdm9pZCBKU1BheW1lbnRNZXRo
b2RDaGFuZ2VFdmVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYg
dmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTUGF5bWVudE1ldGhv
ZENoYW5nZUV2ZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQog
ewogICAgIFdURjo6c3dpdGNoT24od3JhcHBlZCgpLm1ldGhvZERldGFpbHMoKSwgWyZ2aXNpdG9y
XShjb25zdCBKU1ZhbHVlSW5XcmFwcGVkT2JqZWN0JiBtZXRob2REZXRhaWxzKSB7CiAgICAgICAg
IG1ldGhvZERldGFpbHMudmlzaXQodmlzaXRvcik7CkBAIC01MSw2ICs1Miw5IEBAIHZvaWQgSlNQ
YXltZW50TWV0aG9kQ2hhbmdlRXZlbnQ6OnZpc2l0QWQKICAgICB3cmFwcGVkKCkuY2FjaGVkTWV0
aG9kRGV0YWlscygpLnZpc2l0KHZpc2l0b3IpOwogfQogCit0ZW1wbGF0ZSB2b2lkIEpTUGF5bWVu
dE1ldGhvZENoYW5nZUV2ZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OkFic3RyYWN0
U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNQYXltZW50TWV0aG9kQ2hhbmdlRXZlbnQ6
OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImKTsKKwogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKFBBWU1FTlRfUkVRVUVTVCkKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUGF5bWVudFJlc3BvbnNlQ3VzdG9tLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1BheW1lbnRSZXNwb25z
ZUN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTUGF5bWVudFJlc3BvbnNlQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNywxMSArMzcs
MTUgQEAgSlNDOjpKU1ZhbHVlIEpTUGF5bWVudFJlc3BvbnNlOjpkZXRhaWxzKAogICAgIH0pOwog
fQogCi12b2lkIEpTUGF5bWVudFJlc3BvbnNlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6
OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQg
SlNQYXltZW50UmVzcG9uc2U6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0
b3IpCiB7CiAgICAgd3JhcHBlZCgpLmNhY2hlZERldGFpbHMoKS52aXNpdCh2aXNpdG9yKTsKIH0K
IAordGVtcGxhdGUgdm9pZCBKU1BheW1lbnRSZXNwb25zZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRy
ZW4oSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTUGF5bWVudFJl
c3BvbnNlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJik7CisKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShQQVlNRU5UX1JFUVVFU1Qp
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1BlcmZvcm1hbmNlT2JzZXJ2ZXJD
dXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUGVy
Zm9ybWFuY2VPYnNlcnZlckN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTUGVyZm9ybWFuY2VPYnNlcnZlckN1c3RvbS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOC0yMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMzEsMTIgKzMxLDE2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBK
U1BlcmZvcm1hbmNlT2JzZXJ2ZXI6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZp
c2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1BlcmZv
cm1hbmNlT2JzZXJ2ZXI6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3Ip
CiB7CiAgICAgd3JhcHBlZCgpLmNhbGxiYWNrKCkudmlzaXRKU0Z1bmN0aW9uKHZpc2l0b3IpOwog
fQogCi1ib29sIEpTUGVyZm9ybWFuY2VPYnNlcnZlck93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFx
dWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIEpTQzo6U2xv
dFZpc2l0b3ImLCBjb25zdCBjaGFyKiogcmVhc29uKQordGVtcGxhdGUgdm9pZCBKU1BlcmZvcm1h
bmNlT2JzZXJ2ZXI6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6QWJzdHJhY3RTbG90Vmlz
aXRvciYpOwordGVtcGxhdGUgdm9pZCBKU1BlcmZvcm1hbmNlT2JzZXJ2ZXI6OnZpc2l0QWRkaXRp
b25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImKTsKKworYm9vbCBKU1BlcmZvcm1hbmNlT2Jz
ZXJ2ZXJPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpV
bmtub3duPiBoYW5kbGUsIHZvaWQqLCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImLCBjb25zdCBj
aGFyKiogcmVhc29uKQogewogICAgIGlmIChVTkxJS0VMWShyZWFzb24pKQogICAgICAgICAqcmVh
c29uID0gIlJlZ2lzdGVyZWQgUGVyZm9ybWFuY2VPYnNlcnZlciBjYWxsYmFjayI7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1BvcFN0YXRlRXZlbnRDdXN0b20uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUG9wU3RhdGVFdmVudEN1c3Rv
bS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
UG9wU3RhdGVFdmVudEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAv
KgogICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQpAQCAtOTAsOSArOTEsMTMgQEAgSlNW
YWx1ZSBKU1BvcFN0YXRlRXZlbnQ6OnN0YXRlKEpTR2xvYmFsTwogICAgIHJldHVybiBjYWNoZVN0
YXRlKHJlc3VsdCk7CiB9CiAKLXZvaWQgSlNQb3BTdGF0ZUV2ZW50Ojp2aXNpdEFkZGl0aW9uYWxD
aGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlz
aXRvcj4KK3ZvaWQgSlNQb3BTdGF0ZUV2ZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNp
dG9yJiB2aXNpdG9yKQogewogICAgIHdyYXBwZWQoKS5zdGF0ZSgpLnZpc2l0KHZpc2l0b3IpOwog
fQogCit0ZW1wbGF0ZSB2b2lkIEpTUG9wU3RhdGVFdmVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRy
ZW4oSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTUG9wU3RhdGVF
dmVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYpOworCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1By
b21pc2VSZWplY3Rpb25FdmVudEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNQcm9taXNlUmVqZWN0aW9uRXZlbnRDdXN0b20uY3BwCShyZXZpc2lv
biAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1Byb21pc2VSZWplY3Rp
b25FdmVudEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKgogICog
Q29weXJpZ2h0IChDKSAyMDE4IFl1c3VrZSBTdXp1a2kgPHl1c3VrZXN1enVraUBzbG93c3RhcnQu
b3JnPi4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMyLDkgKzMzLDEzIEBACiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBKU1Byb21pc2VSZWplY3Rpb25FdmVudDo6dmlz
aXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRl
PHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTUHJvbWlzZVJlamVjdGlvbkV2ZW50Ojp2aXNpdEFk
ZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHdyYXBwZWQoKS5yZWFz
b24oKS52aXNpdCh2aXNpdG9yKTsKIH0KIAordGVtcGxhdGUgdm9pZCBKU1Byb21pc2VSZWplY3Rp
b25FdmVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9y
Jik7Cit0ZW1wbGF0ZSB2b2lkIEpTUHJvbWlzZVJlamVjdGlvbkV2ZW50Ojp2aXNpdEFkZGl0aW9u
YWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJik7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUmVzaXplT2JzZXJ2ZXJDdXN0b20u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUmVzaXplT2Jz
ZXJ2ZXJDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU1Jlc2l6ZU9ic2VydmVyQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMjAgSWdhbGlhIFMuTC4KKyAqIENvcHly
aWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMwLDExICszMSwxNSBAQAogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLXZvaWQgSlNSZXNpemVPYnNlcnZlcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4o
SlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2
b2lkIEpTUmVzaXplT2JzZXJ2ZXI6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZp
c2l0b3IpCiB7CiAgICAgUmVzaXplT2JzZXJ2ZXJDYWxsYmFjayogY2FsbGJhY2sgPSB3cmFwcGVk
KCkuY2FsbGJhY2tDb25jdXJyZW50bHkoKTsKICAgICBpZiAoY2FsbGJhY2spCiAgICAgICAgIGNh
bGxiYWNrLT52aXNpdEpTRnVuY3Rpb24odmlzaXRvcik7CiB9CiAKLX0KK3RlbXBsYXRlIHZvaWQg
SlNSZXNpemVPYnNlcnZlcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpBYnN0cmFjdFNs
b3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTUmVzaXplT2JzZXJ2ZXI6OnZpc2l0QWRkaXRp
b25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImKTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNSZXNpemVPYnNlcnZlckVudHJ5
Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1Jl
c2l6ZU9ic2VydmVyRW50cnlDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU1Jlc2l6ZU9ic2VydmVyRW50cnlDdXN0b20uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxOSBJZ2Fs
aWEgUy5MLgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzAsMTAgKzMxLDE0IEBA
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBKU1Jlc2l6ZU9ic2VydmVyRW50cnk6OnZp
c2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0
ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1Jlc2l6ZU9ic2VydmVyRW50cnk6OnZpc2l0QWRk
aXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgdmlzaXRvci5hZGRPcGFx
dWVSb290KHJvb3Qod3JhcHBlZCgpLnRhcmdldCgpKSk7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVS
b290KHdyYXBwZWQoKS5jb250ZW50UmVjdCgpKTsKIH0KIAotfQordGVtcGxhdGUgdm9pZCBKU1Jl
c2l6ZU9ic2VydmVyRW50cnk6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6QWJzdHJhY3RT
bG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU1Jlc2l6ZU9ic2VydmVyRW50cnk6OnZpc2l0
QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImKTsKKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNTVkdWaWV3U3BlY0N1
c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNTVkdW
aWV3U3BlY0N1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTU1ZHVmlld1NwZWNDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMwLDEwICsz
MCwxNCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgSlNTVkdWaWV3U3BlYzo6dmlz
aXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRl
PHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTU1ZHVmlld1NwZWM6OnZpc2l0QWRkaXRpb25hbENo
aWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgQVNTRVJUKHdyYXBwZWQoKS5jb250ZXh0
RWxlbWVudENvbmN1cnJlbnRseSgpLmdldCgpKTsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qo
cm9vdCh3cmFwcGVkKCkuY29udGV4dEVsZW1lbnRDb25jdXJyZW50bHkoKS5nZXQoKSkpOwogfQog
Ci19Cit0ZW1wbGF0ZSB2b2lkIEpTU1ZHVmlld1NwZWM6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVu
KEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU1NWR1ZpZXdTcGVj
Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJik7CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU2Vydmlj
ZVdvcmtlckdsb2JhbFNjb3BlQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU1NlcnZpY2VXb3JrZXJHbG9iYWxTY29wZUN1c3RvbS5jcHAJKHJldmlz
aW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU2VydmljZVdvcmtl
ckdsb2JhbFNjb3BlQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNCwxMiArMzQsMTYgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCi12b2lkIEpTU2Vydmlj
ZVdvcmtlckdsb2JhbFNjb3BlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYg
dmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTU2VydmljZVdvcmtl
ckdsb2JhbFNjb3BlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQog
ewogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdCgmd3JhcHBlZCgpLmNsaWVudHMoKSk7CiAgICAg
dmlzaXRvci5hZGRPcGFxdWVSb290KCZ3cmFwcGVkKCkucmVnaXN0cmF0aW9uKCkpOwogfQogCit0
ZW1wbGF0ZSB2b2lkIEpTU2VydmljZVdvcmtlckdsb2JhbFNjb3BlOjp2aXNpdEFkZGl0aW9uYWxD
aGlsZHJlbihBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTU2VydmljZVdv
cmtlckdsb2JhbFNjb3BlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYpOwor
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNTdGF0aWNSYW5nZUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNTdGF0aWNSYW5nZUN1c3RvbS5jcHAJKHJldmlzaW9uIDI3
MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU3RhdGljUmFuZ2VDdXN0b20u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw5ICszMCwxMyBAQAogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLXZvaWQgSlNTdGF0aWNSYW5nZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpT
bG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpT
U3RhdGljUmFuZ2U6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7
CiAgICAgd3JhcHBlZCgpLnZpc2l0Tm9kZXNDb25jdXJyZW50bHkodmlzaXRvcik7CiB9CiAKK3Rl
bXBsYXRlIHZvaWQgSlNTdGF0aWNSYW5nZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpB
YnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTU3RhdGljUmFuZ2U6OnZpc2l0
QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImKTsKKwogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNTdHlsZVNoZWV0Q3Vz
dG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1N0eWxl
U2hlZXRDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU1N0eWxlU2hlZXRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTMwLDExICszMCwxNSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgSlNTdHlsZVNo
ZWV0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQor
dGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNTdHlsZVNoZWV0Ojp2aXNpdEFkZGl0
aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHZpc2l0b3IuYWRkT3BhcXVl
Um9vdChyb290KCZ3cmFwcGVkKCkpKTsKIH0KIAordGVtcGxhdGUgdm9pZCBKU1N0eWxlU2hlZXQ6
OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRl
IHZvaWQgSlNTdHlsZVNoZWV0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYp
OworCiBKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkpTR2xvYmFsT2JqZWN0Kiwg
SlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmPFN0eWxlU2hlZXQ+JiYgc3R5bGVT
aGVldCkKIHsKICAgICBpZiAoc3R5bGVTaGVldC0+aXNDU1NTdHlsZVNoZWV0KCkpCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1RleHRUcmFja0N1ZUN1c3RvbS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNUZXh0VHJhY2tDdWVDdXN0b20u
Y3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1Rl
eHRUcmFja0N1ZUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzgsNyArMzgsNyBAQAogbmFtZXNw
YWNlIFdlYkNvcmUgewogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAotYm9vbCBKU1RleHRUcmFja0N1
ZU93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25v
d24+IGhhbmRsZSwgdm9pZCosIFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVh
c29uKQorYm9vbCBKU1RleHRUcmFja0N1ZU93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290
cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIEFic3RyYWN0U2xvdFZp
c2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCiB7CiAgICAgSlNUZXh0VHJhY2tD
dWUqIGpzVGV4dFRyYWNrQ3VlID0ganNDYXN0PEpTVGV4dFRyYWNrQ3VlKj4oaGFuZGxlLnNsb3Qo
KS0+YXNDZWxsKCkpOwogICAgIFRleHRUcmFja0N1ZSYgdGV4dFRyYWNrQ3VlID0ganNUZXh0VHJh
Y2tDdWUtPndyYXBwZWQoKTsKQEAgLTgyLDEyICs4MiwxNiBAQCBKU1ZhbHVlIHRvSlMoSlNHbG9i
YWxPYmplY3QqIGxleGljYWxHbG9iCiAgICAgcmV0dXJuIHdyYXAobGV4aWNhbEdsb2JhbE9iamVj
dCwgZ2xvYmFsT2JqZWN0LCBjdWUpOwogfQogCi12b2lkIEpTVGV4dFRyYWNrQ3VlOjp2aXNpdEFk
ZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1l
IFZpc2l0b3I+Cit2b2lkIEpTVGV4dFRyYWNrQ3VlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihW
aXNpdG9yJiB2aXNpdG9yKQogewogICAgIGlmIChUZXh0VHJhY2sqIHRleHRUcmFjayA9IHdyYXBw
ZWQoKS50cmFjaygpKQogICAgICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qocm9vdCh0ZXh0VHJh
Y2spKTsKIH0KIAordGVtcGxhdGUgdm9pZCBKU1RleHRUcmFja0N1ZTo6dmlzaXRBZGRpdGlvbmFs
Q2hpbGRyZW4oQWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU1RleHRUcmFj
a0N1ZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKKwogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQogCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTVGV4dFRyYWNrQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU1RleHRUcmFja0N1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVGV4dFRyYWNrQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0zNiwxMSArMzYsMTUgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBK
U0M7CiAKLXZvaWQgSlNUZXh0VHJhY2s6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNp
dG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNUZXh0VHJh
Y2s6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgdmlz
aXRvci5hZGRPcGFxdWVSb290KHJvb3QoJndyYXBwZWQoKSkpOwogfQogCit0ZW1wbGF0ZSB2b2lk
IEpTVGV4dFRyYWNrOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihBYnN0cmFjdFNsb3RWaXNpdG9y
Jik7Cit0ZW1wbGF0ZSB2b2lkIEpTVGV4dFRyYWNrOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihT
bG90VmlzaXRvciYpOworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZgpJbmRleDog
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNUZXh0VHJhY2tMaXN0Q3VzdG9tLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1RleHRUcmFja0xpc3RDdXN0
b20uY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U1RleHRUcmFja0xpc3RDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM2LDExICszNiwxNSBAQAog
bmFtZXNwYWNlIFdlYkNvcmUgewogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAotdm9pZCBKU1RleHRU
cmFja0xpc3Q6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0
b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1RleHRUcmFja0xpc3Q6OnZp
c2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgdmlzaXRvci5h
ZGRPcGFxdWVSb290KHJvb3Qod3JhcHBlZCgpLmVsZW1lbnQoKSkpOwogfQogICAgIAordGVtcGxh
dGUgdm9pZCBKU1RleHRUcmFja0xpc3Q6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEFic3RyYWN0
U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNUZXh0VHJhY2tMaXN0Ojp2aXNpdEFkZGl0
aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYpOworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAK
ICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNUcmVlV2Fsa2VyQ3Vz
dG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1RyZWVX
YWxrZXJDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU1RyZWVXYWxrZXJDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI1LDEwICsyNSwx
NCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgSlNUcmVlV2Fsa2VyOjp2aXNpdEFk
ZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlw
ZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNUcmVlV2Fsa2VyOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJl
bihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGlmIChOb2RlRmlsdGVyKiBmaWx0ZXIgPSB3cmFw
cGVkKCkuZmlsdGVyKCkpCiAgICAgICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChmaWx0ZXIpOwog
fQogCi19Cit0ZW1wbGF0ZSB2b2lkIEpTVHJlZVdhbGtlcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRy
ZW4oSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTVHJlZVdhbGtl
cjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYpOworCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1VuZG9J
dGVtQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U1VuZG9JdGVtQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNVbmRvSXRlbUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjksMTMgKzI5
LDE3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBKU1VuZG9JdGVtOjp2aXNpdEFk
ZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlw
ZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNVbmRvSXRlbTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4o
VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB3cmFwcGVkKCkudW5kb0hhbmRsZXIoKS52aXNpdEpT
RnVuY3Rpb24odmlzaXRvcik7CiAgICAgd3JhcHBlZCgpLnJlZG9IYW5kbGVyKCkudmlzaXRKU0Z1
bmN0aW9uKHZpc2l0b3IpOwogfQogCi1ib29sIEpTVW5kb0l0ZW1Pd25lcjo6aXNSZWFjaGFibGVG
cm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBK
U0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQordGVtcGxhdGUg
dm9pZCBKU1VuZG9JdGVtOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OkFic3RyYWN0U2xv
dFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNVbmRvSXRlbTo6dmlzaXRBZGRpdGlvbmFsQ2hp
bGRyZW4oSlNDOjpTbG90VmlzaXRvciYpOworCitib29sIEpTVW5kb0l0ZW1Pd25lcjo6aXNSZWFj
aGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZv
aWQqLCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFz
b24pCiB7CiAgICAgaWYgKFVOTElLRUxZKHJlYXNvbikpCiAgICAgICAgICpyZWFzb24gPSAiRG9j
dW1lbnQgaXMgYW4gb3BhcXVlIHJvb3QuIjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTVmFsdWVJbldyYXBwZWRPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU1ZhbHVlSW5XcmFwcGVkT2JqZWN0LmgJKHJldmlzaW9uIDI3MjgzMCkK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVmFsdWVJbldyYXBwZWRPYmplY3QuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTgg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE4LTIw
MjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtNDAsNyArNDAsNyBAQCBwdWJsaWM6CiAgICAgb3BlcmF0b3IgSlNDOjpKU1Zh
bHVlKCkgY29uc3Q7CiAgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0OwogICAgIEpT
VmFsdWVJbldyYXBwZWRPYmplY3QmIG9wZXJhdG9yPShjb25zdCBKU1ZhbHVlSW5XcmFwcGVkT2Jq
ZWN0JiBvdGhlcik7Ci0gICAgdm9pZCB2aXNpdChKU0M6OlNsb3RWaXNpdG9yJikgY29uc3Q7Cisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCB2aXNpdChWaXNpdG9yJikgY29uc3Q7
CiAgICAgdm9pZCBjbGVhcigpOwogCiBwcml2YXRlOgpAQCAtOTgsNyArOTgsOCBAQCBpbmxpbmUg
SlNWYWx1ZUluV3JhcHBlZE9iamVjdCYgSlNWYWx1ZUluCiAgICAgcmV0dXJuICp0aGlzOwogfQog
Ci1pbmxpbmUgdm9pZCBKU1ZhbHVlSW5XcmFwcGVkT2JqZWN0Ojp2aXNpdChKU0M6OlNsb3RWaXNp
dG9yJiB2aXNpdG9yKSBjb25zdAordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK2lubGluZSB2
b2lkIEpTVmFsdWVJbldyYXBwZWRPYmplY3Q6OnZpc2l0KFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0
CiB7CiAgICAgcmV0dXJuIFdURjo6c3dpdGNoT24obV92YWx1ZSwgW10gKEpTQzo6SlNWYWx1ZSkg
ewogICAgICAgICAvLyBOb3RoaW5nIHRvIHZpc2l0LgpAQCAtMTA3LDYgKzEwOCw5IEBAIGlubGlu
ZSB2b2lkIEpTVmFsdWVJbldyYXBwZWRPYmplY3Q6OnZpc2kKICAgICB9KTsKIH0KIAordGVtcGxh
dGUgdm9pZCBKU1ZhbHVlSW5XcmFwcGVkT2JqZWN0Ojp2aXNpdChKU0M6OkFic3RyYWN0U2xvdFZp
c2l0b3ImKSBjb25zdDsKK3RlbXBsYXRlIHZvaWQgSlNWYWx1ZUluV3JhcHBlZE9iamVjdDo6dmlz
aXQoSlNDOjpTbG90VmlzaXRvciYpIGNvbnN0OworCiBpbmxpbmUgdm9pZCBKU1ZhbHVlSW5XcmFw
cGVkT2JqZWN0OjpjbGVhcigpCiB7CiAgICAgV1RGOjpzd2l0Y2hPbihtX3ZhbHVlLCBbXSAoV2Vh
ayYgdmFsdWUpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVmlkZW9UcmFj
a0N1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNW
aWRlb1RyYWNrQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNWaWRlb1RyYWNrQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNSwxMSAr
MzUsMTUgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKLXZv
aWQgSlNWaWRlb1RyYWNrOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlz
aXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTVmlkZW9UcmFjazo6dmlz
aXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB2aXNpdG9yLmFk
ZE9wYXF1ZVJvb3Qocm9vdCgmd3JhcHBlZCgpKSk7CiB9CiAKK3RlbXBsYXRlIHZvaWQgSlNWaWRl
b1RyYWNrOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3Im
KTsKK3RlbXBsYXRlIHZvaWQgSlNWaWRlb1RyYWNrOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihK
U0M6OlNsb3RWaXNpdG9yJik7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1ZpZGVvVHJhY2tMaXN0Q3VzdG9tLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1ZpZGVvVHJhY2tM
aXN0Q3VzdG9tLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNWaWRlb1RyYWNrTGlzdEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzUsMTEgKzM1
LDE1IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCi12b2lk
IEpTVmlkZW9UcmFja0xpc3Q6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNWaWRlb1RyYWNrTGlz
dDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB2aXNp
dG9yLmFkZE9wYXF1ZVJvb3Qocm9vdCh3cmFwcGVkKCkuZWxlbWVudCgpKSk7CiB9CiAKK3RlbXBs
YXRlIHZvaWQgSlNWaWRlb1RyYWNrTGlzdDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oQWJzdHJh
Y3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU1ZpZGVvVHJhY2tMaXN0Ojp2aXNpdEFk
ZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYpOworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CiAKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJHTDJSZW5k
ZXJpbmdDb250ZXh0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU1dlYkdMMlJlbmRlcmluZ0NvbnRleHRDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI4
MzApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYkdMMlJlbmRlcmluZ0NvbnRl
eHRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxNS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzMsMTIgKzMzLDE2IEBACiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCi12b2lkIEpTV2ViR0wyUmVuZGVy
aW5nQ29udGV4dDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3Ip
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1dlYkdMMlJlbmRlcmluZ0NvbnRl
eHQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgdmlz
aXRvci5hZGRPcGFxdWVSb290KCZ3cmFwcGVkKCkpOwogICAgIHdyYXBwZWQoKS5hZGRNZW1iZXJz
VG9PcGFxdWVSb290cyh2aXNpdG9yKTsKIH0KIAordGVtcGxhdGUgdm9pZCBKU1dlYkdMMlJlbmRl
cmluZ0NvbnRleHQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6QWJzdHJhY3RTbG90Vmlz
aXRvciYpOwordGVtcGxhdGUgdm9pZCBKU1dlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OnZpc2l0QWRk
aXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImKTsKKwogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQkdMKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRDdXN0b20uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViR0xSZW5kZXJpbmdDb250ZXh0Q3VzdG9t
LmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNX
ZWJHTFJlbmRlcmluZ0NvbnRleHRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMzLDEyICszMywx
NiBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAotdm9pZCBK
U1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0
b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1dlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikK
IHsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QoJndyYXBwZWQoKSk7CiAgICAgd3JhcHBlZCgp
LmFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKHZpc2l0b3IpOwogfQogCit0ZW1wbGF0ZSB2b2lkIEpT
V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihBYnN0cmFjdFNs
b3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2aXNp
dEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYpOworCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoV0VCR0wpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU1dvcmtlckdsb2JhbFNjb3BlQmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrZXJHbG9iYWxTY29wZUJhc2UuY3BwCShyZXZpc2lv
biAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckdsb2JhbFNj
b3BlQmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDA4LCAyMDA5LCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dApAQCAtOTIsNyArOTIsOCBAQCB2b2lkIEpTV29ya2VyR2xvYmFs
U2NvcGVCYXNlOjpmaW5pc2hDcmVhCiAgICAgQVNTRVJUKGluaGVyaXRzKHZtLCBpbmZvKCkpKTsK
IH0KIAotdm9pZCBKU1dvcmtlckdsb2JhbFNjb3BlQmFzZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwq
IGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4K
K3ZvaWQgSlNXb3JrZXJHbG9iYWxTY29wZUJhc2U6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCog
Y2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU1dvcmtlckdsb2JhbFNjb3BlQmFzZSog
dGhpc09iamVjdCA9IGpzQ2FzdDxKU1dvcmtlckdsb2JhbFNjb3BlQmFzZSo+KGNlbGwpOwogICAg
IEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTEwMCw2
ICsxMDEsOCBAQCB2b2lkIEpTV29ya2VyR2xvYmFsU2NvcGVCYXNlOjp2aXNpdENoaWxkCiAgICAg
dmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9wcm94eSk7CiB9CiAKK0RFRklORV9WSVNJVF9D
SElMRFJFTihKU1dvcmtlckdsb2JhbFNjb3BlQmFzZSk7CisKIHZvaWQgSlNXb3JrZXJHbG9iYWxT
Y29wZUJhc2U6OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQogewogICAgIHN0YXRpY19jYXN0PEpTV29y
a2VyR2xvYmFsU2NvcGVCYXNlKj4oY2VsbCktPkpTV29ya2VyR2xvYmFsU2NvcGVCYXNlOjp+SlNX
b3JrZXJHbG9iYWxTY29wZUJhc2UoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTV29ya2VyR2xvYmFsU2NvcGVCYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNXb3JrZXJHbG9iYWxTY29wZUJhc2UuaAkocmV2aXNpb24gMjcyODMwKQor
KysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrZXJHbG9iYWxTY29wZUJhc2UuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgs
IDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDA4LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC03OSw3ICs3OSw3IEBAIHByb3RlY3RlZDoKICAgICBKU1dvcmtl
ckdsb2JhbFNjb3BlQmFzZShKU0M6OlZNJiwgSlNDOjpTdHJ1Y3R1cmUqLCBSZWZQdHI8V29ya2Vy
R2xvYmFsU2NvcGU+JiYpOwogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYsIEpTQzo6
SlNQcm94eSopOwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0M6OkpTQ2VsbCos
IEpTQzo6U2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiBwcml2
YXRlOgogICAgIFJlZlB0cjxXb3JrZXJHbG9iYWxTY29wZT4gbV93cmFwcGVkOwpJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrZXJHbG9iYWxTY29wZUN1c3RvbS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrZXJHbG9iYWxTY29w
ZUN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTV29ya2VyR2xvYmFsU2NvcGVDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOC0yMDA5LCAyMDExLCAyMDE2IEFwcGxl
IEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDIxIEFw
cGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMzMsNyArMzMsOCBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogdXNpbmcgbmFtZXNw
YWNlIEpTQzsKIAotdm9pZCBKU1dvcmtlckdsb2JhbFNjb3BlOjp2aXNpdEFkZGl0aW9uYWxDaGls
ZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2
b2lkIEpTV29ya2VyR2xvYmFsU2NvcGU6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3Im
IHZpc2l0b3IpCiB7CiAgICAgaWYgKGF1dG8qIGxvY2F0aW9uID0gd3JhcHBlZCgpLm9wdGlvbmFs
TG9jYXRpb24oKSkKICAgICAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KGxvY2F0aW9uKTsKQEAg
LTQ4LDYgKzQ5LDkgQEAgdm9pZCBKU1dvcmtlckdsb2JhbFNjb3BlOjp2aXNpdEFkZGl0aW9uYQog
ICAgIHdyYXBwZWQoKS52aXNpdEpTRXZlbnRMaXN0ZW5lcnModmlzaXRvcik7CiB9CiAKK3RlbXBs
YXRlIHZvaWQgSlNXb3JrZXJHbG9iYWxTY29wZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oQWJz
dHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU1dvcmtlckdsb2JhbFNjb3BlOjp2
aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYpOworCiBKU1ZhbHVlIEpTV29ya2Vy
R2xvYmFsU2NvcGU6OnF1ZXVlTWljcm90YXNrKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFs
T2JqZWN0LCBDYWxsRnJhbWUmIGNhbGxGcmFtZSkKIHsKICAgICBWTSYgdm0gPSBsZXhpY2FsR2xv
YmFsT2JqZWN0LnZtKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtl
ck5hdmlnYXRvckN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNXb3JrZXJOYXZpZ2F0b3JDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlck5hdmlnYXRvckN1c3RvbS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMjgsOSArMjgsMTMgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lk
IEpTV29ya2VyTmF2aWdhdG9yOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNp
dG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNXb3JrZXJO
YXZpZ2F0b3I6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAg
ICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHN0YXRpY19jYXN0PE5hdmlnYXRvckJhc2UqPigmd3Jh
cHBlZCgpKSk7CiB9CiAKLX0KK3RlbXBsYXRlIHZvaWQgSlNXb3JrZXJOYXZpZ2F0b3I6OnZpc2l0
QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUg
dm9pZCBKU1dvcmtlck5hdmlnYXRvcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90
VmlzaXRvciYpOworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU1dvcmtsZXRHbG9iYWxTY29wZUJhc2UuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2xldEdsb2JhbFNjb3BlQmFzZS5jcHAJ
KHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2xl
dEdsb2JhbFNjb3BlQmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxOC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODIsNyArODIsOCBAQCB2b2lkIEpT
V29ya2xldEdsb2JhbFNjb3BlQmFzZTo6ZmluaXNoQ3JlCiAgICAgQVNTRVJUKGluaGVyaXRzKHZt
LCBpbmZvKCkpKTsKIH0KIAotdm9pZCBKU1dvcmtsZXRHbG9iYWxTY29wZUJhc2U6OnZpc2l0Q2hp
bGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVu
YW1lIFZpc2l0b3I+Cit2b2lkIEpTV29ya2xldEdsb2JhbFNjb3BlQmFzZTo6dmlzaXRDaGlsZHJl
bkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGF1dG8qIHRoaXNP
YmplY3QgPSBqc0Nhc3Q8SlNXb3JrbGV0R2xvYmFsU2NvcGVCYXNlKj4oY2VsbCk7CiAgICAgQVNT
RVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtOTAsNiArOTEs
OCBAQCB2b2lkIEpTV29ya2xldEdsb2JhbFNjb3BlQmFzZTo6dmlzaXRDaGlsCiAgICAgdmlzaXRv
ci5hcHBlbmQodGhpc09iamVjdC0+bV9wcm94eSk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJF
TihKU1dvcmtsZXRHbG9iYWxTY29wZUJhc2UpOworCiB2b2lkIEpTV29ya2xldEdsb2JhbFNjb3Bl
QmFzZTo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCiB7CiAgICAgc3RhdGljX2Nhc3Q8SlNXb3JrbGV0
R2xvYmFsU2NvcGVCYXNlKj4oY2VsbCktPkpTV29ya2xldEdsb2JhbFNjb3BlQmFzZTo6fkpTV29y
a2xldEdsb2JhbFNjb3BlQmFzZSgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNXb3JrbGV0R2xvYmFsU2NvcGVCYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNXb3JrbGV0R2xvYmFsU2NvcGVCYXNlLmgJKHJldmlzaW9uIDI3MjgzMCkK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2xldEdsb2JhbFNjb3BlQmFzZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
OCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTgt
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTY3LDcgKzY3LDcgQEAgcHJvdGVjdGVkOgogICAgIEpTV29ya2xldEds
b2JhbFNjb3BlQmFzZShKU0M6OlZNJiwgSlNDOjpTdHJ1Y3R1cmUqLCBSZWZQdHI8V29ya2xldEds
b2JhbFNjb3BlPiYmKTsKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mLCBKU0M6OkpT
UHJveHkqKTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDOjpKU0NlbGwqLCBK
U0M6OlNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogcHJpdmF0
ZToKICAgICBSZWZQdHI8V29ya2xldEdsb2JhbFNjb3BlPiBtX3dyYXBwZWQ7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1hNTEh0dHBSZXF1ZXN0Q3VzdG9tLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1hNTEh0dHBSZXF1ZXN0Q3VzdG9t
LmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNY
TUxIdHRwUmVxdWVzdEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDEsNyArNDEsOCBA
QAogbmFtZXNwYWNlIFdlYkNvcmUgewogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAotdm9pZCBKU1hN
TEh0dHBSZXF1ZXN0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRv
cikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTWE1MSHR0cFJlcXVlc3Q6OnZp
c2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgaWYgKGF1dG8q
IHVwbG9hZCA9IHdyYXBwZWQoKS5vcHRpb25hbFVwbG9hZCgpKQogICAgICAgICB2aXNpdG9yLmFk
ZE9wYXF1ZVJvb3QodXBsb2FkKTsKQEAgLTUwLDYgKzUxLDkgQEAgdm9pZCBKU1hNTEh0dHBSZXF1
ZXN0Ojp2aXNpdEFkZGl0aW9uYWxDaAogICAgICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QocmVz
cG9uc2VEb2N1bWVudCk7CiB9CiAKK3RlbXBsYXRlIHZvaWQgSlNYTUxIdHRwUmVxdWVzdDo6dmlz
aXRBZGRpdGlvbmFsQ2hpbGRyZW4oQWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9p
ZCBKU1hNTEh0dHBSZXF1ZXN0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYp
OworCiBKU1ZhbHVlIEpTWE1MSHR0cFJlcXVlc3Q6OnJlc3BvbnNlKEpTR2xvYmFsT2JqZWN0JiBs
ZXhpY2FsR2xvYmFsT2JqZWN0KSBjb25zdAogewogICAgIGF1dG8gY2FjaGVSZXN1bHQgPSBbJl0g
KEpTVmFsdWUgdmFsdWUpIC0+IEpTVmFsdWUgewpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNYUGF0aFJlc3VsdEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNYUGF0aFJlc3VsdEN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjgzMCkK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTWFBhdGhSZXN1bHRDdXN0b20uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxMSBK
dWxpZW4gQ2hhZmZyYWl4IDxqY2hhZmZyYWl4QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMp
IDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0zMSw3ICszMiw4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAot
dm9pZCBKU1hQYXRoUmVzdWx0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNp
dG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNYUGF0aFJl
c3VsdDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBh
dXRvJiB2YWx1ZSA9IHdyYXBwZWQoKS52YWx1ZSgpOwogICAgIGlmICh2YWx1ZS5pc05vZGVTZXQo
KSkgewpAQCAtNDEsNCArNDMsNyBAQCB2b2lkIEpTWFBhdGhSZXN1bHQ6OnZpc2l0QWRkaXRpb25h
bENoaWxkCiAgICAgfQogfQogCit0ZW1wbGF0ZSB2b2lkIEpTWFBhdGhSZXN1bHQ6OnZpc2l0QWRk
aXRpb25hbENoaWxkcmVuKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9p
ZCBKU1hQYXRoUmVzdWx0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9y
Jik7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL1dlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyLmNwcAko
cmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV2ViQ29yZVR5
cGVkQXJyYXlDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01Niw3ICs1Niw3IEBAIGJvb2wg
V2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyOjppc0F0b20KICAgICByZXR1cm4gbV9hbGxvd0F0
b21pY3NXYWl0OwogfQogCi1ib29sIFdlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlcjo6SlNBcnJh
eUJ1ZmZlck93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6
OlVua25vd24+IGhhbmRsZSwgdm9pZCosIEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0
IGNoYXIqKiByZWFzb24pCitib29sIFdlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlcjo6SlNBcnJh
eUJ1ZmZlck93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6
OlVua25vd24+IGhhbmRsZSwgdm9pZCosIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRv
ciwgY29uc3QgY2hhcioqIHJlYXNvbikKIHsKICAgICBpZiAoVU5MSUtFTFkocmVhc29uKSkKICAg
ICAgICAgKnJlYXNvbiA9ICJBcnJheUJ1ZmZlciBpcyBvcGFxdWUgcm9vdCI7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXIuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlVHlwZWRBcnJheUNv
bnRyb2xsZXIuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvV2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDgsNyArNDgs
NyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIGNsYXNzIEpTQXJyYXlCdWZmZXJPd25lciA6IHB1
YmxpYyBKU0M6OldlYWtIYW5kbGVPd25lciB7CiAgICAgcHVibGljOgotICAgICAgICBib29sIGlz
UmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQq
IGNvbnRleHQsIEpTQzo6U2xvdFZpc2l0b3ImLCBjb25zdCBjaGFyKiopIG92ZXJyaWRlOworICAg
ICAgICBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5r
bm93bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYsIGNvbnN0IGNo
YXIqKikgb3ZlcnJpZGU7CiAgICAgICAgIHZvaWQgZmluYWxpemUoSlNDOjpIYW5kbGU8SlNDOjpV
bmtub3duPiwgdm9pZCogY29udGV4dCkgb3ZlcnJpZGU7CiAgICAgfTsKIApJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0JKHJl
dmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdl
bmVyYXRvckpTLnBtCSh3b3JraW5nIGNvcHkpCkBAIC0zLDcgKzMsNyBAQAogIyBDb3B5cmlnaHQg
KEMpIDIwMDYgQW5kZXJzIENhcmxzc29uIDxhbmRlcnNjYUBtYWMuY29tPgogIyBDb3B5cmlnaHQg
KEMpIDIwMDYsIDIwMDcgU2FtdWVsIFdlaW5pZyA8c2FtQHdlYmtpdC5vcmc+CiAjIENvcHlyaWdo
dCAoQykgMjAwNiBBbGV4ZXkgUHJvc2t1cnlha292IDxhcEB3ZWJraXQub3JnPgotIyBDb3B5cmln
aHQgKEMpIDIwMDYtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjIENvcHly
aWdodCAoQykgMjAwNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICMgQ29w
eXJpZ2h0IChDKSAyMDA5IENhbWVyb24gTWNDb3JtYWNrIDxjYW1AbWNjLmlkLmF1PgogIyBDb3B5
cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAjIENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRz
IHN1YnNpZGlhcnkoLWllcykKQEAgLTMwNzgsOCArMzA3OCw4IEBAIHN1YiBHZW5lcmF0ZUhlYWRl
cgogCiAgICAgIyB2aXNpdCBmdW5jdGlvbgogICAgIGlmICgkbmVlZHNWaXNpdENoaWxkcmVuKSB7
Ci0gICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgc3RhdGljIHZvaWQgdmlzaXRDaGls
ZHJlbihKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJik7XG4iKTsKLSAgICAgICAgcHVzaChAaGVh
ZGVyQ29udGVudCwgIiAgICB2b2lkIHZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZp
c2l0b3ImKTtcbiIpIGlmICRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+e0pTQ3VzdG9t
TWFya0Z1bmN0aW9ufTsKKyAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICBERUNMQVJF
X1ZJU0lUX0NISUxEUkVOO1xuIik7CisgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAg
dGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCB2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihW
aXNpdG9yJik7XG4iKSBpZiAkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntKU0N1c3Rv
bU1hcmtGdW5jdGlvbn07CiAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJcbiIpOwogCiAg
ICAgICAgIGlmICgkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntKU0N1c3RvbU1hcmtG
dW5jdGlvbn0pIHsKQEAgLTMwOTQsNyArMzA5NCw3IEBAIHN1YiBHZW5lcmF0ZUhlYWRlcgogICAg
ICAgICAgICAgIyB0aGF0IHRoZSBHQyBjYWxscyB0byBhc2sgYW4gb2JqZWN0IGlzIGl0IHdvdWxk
IGxpa2UgdG8gbWFyayBhbnl0aGluZyBlbHNlIGFmdGVyIHRoZQogICAgICAgICAgICAgIyBwcm9n
cmFtIHJlc3VtZWQgc2luY2UgdGhlIGxhc3QgY2FsbCB0byB2aXNpdENoaWxkcmVuIG9yIHZpc2l0
T3V0cHV0Q29uc3RyYWludHMuIFNpbmNlCiAgICAgICAgICAgICAjIHRoaXMganVzdCBjYWxscyB2
aXNpdEFkZGl0aW9uYWxDaGlsZHJlbiwgeW91IHVzdWFsbHkgZG9uJ3QgaGF2ZSB0byB3b3JyeSBh
Ym91dCB0aGlzLgotICAgICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICBzdGF0aWMg
dm9pZCB2aXNpdE91dHB1dENvbnN0cmFpbnRzKEpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKTtc
biIpOworICAgICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICBzdGF0aWMgdm9pZCB2
aXNpdE91dHB1dENvbnN0cmFpbnRzKEpTQ2VsbCosIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYp
O1xuIik7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTMyMTUsNyArMzIxNSw3IEBAIHN1YiBHZW5l
cmF0ZUhlYWRlcgogICAgICAgICB9CiAgICAgICAgICRoZWFkZXJJbmNsdWRlc3siPHd0Zi9OZXZl
ckRlc3Ryb3llZC5oPiJ9ID0gMTsKICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgInB1Ymxp
YzpcbiIpOwotICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIGJvb2wgaXNSZWFjaGFi
bGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4
dCwgSlNDOjpTbG90VmlzaXRvciYsIGNvbnN0IGNoYXIqKikgJHtvdmVycmlkZURlY2x9O1xuIik7
CisgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgYm9vbCBpc1JlYWNoYWJsZUZyb21P
cGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0LCBKU0M6
OkFic3RyYWN0U2xvdFZpc2l0b3ImLCBjb25zdCBjaGFyKiopICR7b3ZlcnJpZGVEZWNsfTtcbiIp
OwogICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHZvaWQgZmluYWxpemUoSlNDOjpI
YW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCkgJHtvdmVycmlkZURlY2x9O1xuIik7
CiAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJ9O1xuIik7CiAgICAgICAgIHB1c2goQGhl
YWRlckNvbnRlbnQsICJcbiIpOwpAQCAtNDkzOSw2ICs0OTM5LDcgQEAgc3ViIEdlbmVyYXRlSW1w
bGVtZW50YXRpb24KICAgICBBZGRUb0ltcGxJbmNsdWRlcygiRE9NSXNvU3Vic3BhY2VzLmgiKTsK
ICAgICBBZGRUb0ltcGxJbmNsdWRlcygiV2ViQ29yZUpTQ2xpZW50RGF0YS5oIik7CiAgICAgQWRk
VG9JbXBsSW5jbHVkZXMoIjxKYXZhU2NyaXB0Q29yZS9KU0Rlc3RydWN0aWJsZU9iamVjdEhlYXBD
ZWxsVHlwZS5oPiIpOworICAgIEFkZFRvSW1wbEluY2x1ZGVzKCI8SmF2YVNjcmlwdENvcmUvU2xv
dFZpc2l0b3JNYWNyb3MuaD4iKTsKICAgICBBZGRUb0ltcGxJbmNsdWRlcygiPEphdmFTY3JpcHRD
b3JlL1N1YnNwYWNlSW5saW5lcy5oPiIpOwogICAgIHB1c2goQGltcGxDb250ZW50LCAiSlNDOjpJ
c29TdWJzcGFjZSogJHtjbGFzc05hbWV9OjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pXG4i
KTsKICAgICBwdXNoKEBpbXBsQ29udGVudCwgIntcbiIpOwpAQCAtNDk2Niw3ICs0OTY3LDggQEAg
c3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICBwdXNoKEBpbXBsQ29udGVudCwgIn1cblxu
Iik7CiAKICAgICBpZiAoJG5lZWRzVmlzaXRDaGlsZHJlbikgewotICAgICAgICBwdXNoKEBpbXBs
Q29udGVudCwgInZvaWQgJHtjbGFzc05hbWV9Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwg
U2xvdFZpc2l0b3ImIHZpc2l0b3IpXG4iKTsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ0
ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPlxuIik7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50
LCAidm9pZCAke2NsYXNzTmFtZX06OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlz
aXRvciYgdmlzaXRvcilcbiIpOwogICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIntcbiIpOwog
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0
PCR7Y2xhc3NOYW1lfSo+KGNlbGwpO1xuIik7CiAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
ICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTtcbiIpOwpA
QCAtNDk5MSw4ICs0OTkzLDEwIEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgICAg
ICAgICB9CiAgICAgICAgIH0KICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ9XG5cbiIpOwor
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIkRFRklORV9WSVNJVF9DSElMRFJFTigke2NsYXNz
TmFtZX0pO1xuXG4iKTsKKwogICAgICAgICBpZiAoJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1
dGVzLT57SlNDdXN0b21NYXJrRnVuY3Rpb259KSB7Ci0gICAgICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudCwgInZvaWQgJHtjbGFzc05hbWV9Ojp2aXNpdE91dHB1dENvbnN0cmFpbnRzKEpTQ2VsbCog
Y2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpXG4iKTsKKyAgICAgICAgICAgIHB1c2goQGltcGxD
b250ZW50LCAidm9pZCAke2NsYXNzTmFtZX06OnZpc2l0T3V0cHV0Q29uc3RyYWludHMoSlNDZWxs
KiBjZWxsLCBBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKVxuIik7CiAgICAgICAgICAgICBw
dXNoKEBpbXBsQ29udGVudCwgIntcbiIpOwogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICIgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDwke2NsYXNzTmFtZX0qPihjZWxsKTtcbiIp
OwogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgQVNTRVJUX0dDX09CSkVDVF9J
TkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpO1xuIik7CkBAIC01MDMzLDcgKzUwMzcsNyBAQCBz
dWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgIH0KIAogICAgIGlmIChTaG91bGRHZW5lcmF0
ZVdyYXBwZXJPd25lckNvZGUoJGhhc1BhcmVudCwgJGludGVyZmFjZSkgJiYgIUdldEN1c3RvbUlz
UmVhY2hhYmxlKCRpbnRlcmZhY2UpKSB7Ci0gICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiYm9v
bCBKUyR7aW50ZXJmYWNlTmFtZX1Pd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlND
OjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBTbG90VmlzaXRvciYgdmlzaXRv
ciwgY29uc3QgY2hhcioqIHJlYXNvbilcbiIpOworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwg
ImJvb2wgSlMke2ludGVyZmFjZU5hbWV9T3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3Rz
KEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgQWJzdHJhY3RTbG90Vmlz
aXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbilcbiIpOwogICAgICAgICBwdXNoKEBp
bXBsQ29udGVudCwgIntcbiIpOwogICAgICAgICAjIEFsbCBBY3RpdmVET01PYmplY3RzIGltcGxl
bWVudCBoYXNQZW5kaW5nQWN0aXZpdHkoKSwgYnV0IG5vdCBhbGwgb2YgdGhlbQogICAgICAgICAj
IGluY3JlbWVudCB0aGVpciBDKysgcmVmZXJlbmNlIGNvdW50cyB3aGVuIGhhc1BlbmRpbmdBY3Rp
dml0eSgpIGJlY29tZXMKQEAgLTY0MzIsNiArNjQzNiw3IEBAIHN1YiBHZW5lcmF0ZUNhbGxiYWNr
SGVhZGVyQ29udGVudAogICAgICAgICBwdXNoKEAkY29udGVudFJlZiwgIiAgICBib29sIGhhc0Nh
bGxiYWNrKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9kYXRhICYmIG1fZGF0YS0+Y2FsbGJhY2so
KTsgfVxuXG4iKTsKICAgICB9CiAKKyAgICBwdXNoKEAkY29udGVudFJlZiwgIiAgICB2b2lkIHZp
c2l0SlNGdW5jdGlvbihKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKSBvdmVycmlkZTtcblxuIikg
aWYgJGludGVyZmFjZU9yQ2FsbGJhY2stPmV4dGVuZGVkQXR0cmlidXRlcy0+e0lzV2Vha0NhbGxi
YWNrfTsKICAgICBwdXNoKEAkY29udGVudFJlZiwgIiAgICB2b2lkIHZpc2l0SlNGdW5jdGlvbihK
U0M6OlNsb3RWaXNpdG9yJikgb3ZlcnJpZGU7XG5cbiIpIGlmICRpbnRlcmZhY2VPckNhbGxiYWNr
LT5leHRlbmRlZEF0dHJpYnV0ZXMtPntJc1dlYWtDYWxsYmFja307CiAKICAgICBwdXNoKEAkY29u
dGVudFJlZiwgIiAgICAke2NhbGxiYWNrRGF0YVR5cGV9KiBtX2RhdGE7XG4iKTsKQEAgLTY2MjMs
NiArNjYyOCwxMCBAQCBzdWIgR2VuZXJhdGVDYWxsYmFja0ltcGxlbWVudGF0aW9uQ29udGVuCiAg
ICAgfQogCiAgICAgaWYgKCRpbnRlcmZhY2VPckNhbGxiYWNrLT5leHRlbmRlZEF0dHJpYnV0ZXMt
PntJc1dlYWtDYWxsYmFja30pIHsKKyAgICAgICAgcHVzaChAJGNvbnRlbnRSZWYsICJ2b2lkICR7
Y2xhc3NOYW1lfTo6dmlzaXRKU0Z1bmN0aW9uKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYgdmlz
aXRvcilcbiIpOworICAgICAgICBwdXNoKEAkY29udGVudFJlZiwgIntcbiIpOworICAgICAgICBw
dXNoKEAkY29udGVudFJlZiwgIiAgICBtX2RhdGEtPnZpc2l0SlNGdW5jdGlvbih2aXNpdG9yKTtc
biIpOworICAgICAgICBwdXNoKEAkY29udGVudFJlZiwgIn1cblxuIik7CiAgICAgICAgIHB1c2go
QCRjb250ZW50UmVmLCAidm9pZCAke2NsYXNzTmFtZX06OnZpc2l0SlNGdW5jdGlvbihKU0M6OlNs
b3RWaXNpdG9yJiB2aXNpdG9yKVxuIik7CiAgICAgICAgIHB1c2goQCRjb250ZW50UmVmLCAie1xu
Iik7CiAgICAgICAgIHB1c2goQCRjb250ZW50UmVmLCAiICAgIG1fZGF0YS0+dmlzaXRKU0Z1bmN0
aW9uKHZpc2l0b3IpO1xuIik7CkBAIC02NzM0LDYgKzY3NDMsNyBAQCBzdWIgR2VuZXJhdGVJdGVy
YWJsZURlZmluaXRpb24KICAgICBteSAkdmlzaWJsZUludGVyZmFjZU5hbWUgPSAkY29kZUdlbmVy
YXRvci0+R2V0VmlzaWJsZUludGVyZmFjZU5hbWUoJGludGVyZmFjZSk7CiAKICAgICBBZGRUb0lt
cGxJbmNsdWRlcygiSlNET01JdGVyYXRvci5oIik7CisgICAgQWRkVG9JbXBsSW5jbHVkZXMoIjxK
YXZhU2NyaXB0Q29yZS9TbG90VmlzaXRvck1hY3Jvcy5oPiIpOwogCiAgICAgcmV0dXJuIHVubGVz
cyBJc0tleVZhbHVlSXRlcmFibGVJbnRlcmZhY2UoJGludGVyZmFjZSk7CiAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2RvbS9BY3RpdmVET01DYWxsYmFjay5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2RvbS9BY3RpdmVET01DYWxsYmFjay5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3Vy
Y2UvV2ViQ29yZS9kb20vQWN0aXZlRE9NQ2FsbGJhY2suaAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTIgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCkBAIC0z
Myw2ICszNCw3IEBACiAjaW5jbHVkZSAiQ29udGV4dERlc3RydWN0aW9uT2JzZXJ2ZXIuaCIKIAog
bmFtZXNwYWNlIEpTQyB7CitjbGFzcyBBYnN0cmFjdFNsb3RWaXNpdG9yOwogY2xhc3MgU2xvdFZp
c2l0b3I7CiB9CiAKQEAgLTU1LDYgKzU3LDcgQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JU
IGJvb2wgYWN0aXZlRE9NT2JqZWN0c0FyZVN1c3BlbmRlZCgpIGNvbnN0OwogICAgIFdFQkNPUkVf
RVhQT1JUIGJvb2wgYWN0aXZlRE9NT2JqZWN0QXJlU3RvcHBlZCgpIGNvbnN0OwogICAgIAorICAg
IHZpcnR1YWwgdm9pZCB2aXNpdEpTRnVuY3Rpb24oSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJikg
eyB9CiAgICAgdmlydHVhbCB2b2lkIHZpc2l0SlNGdW5jdGlvbihKU0M6OlNsb3RWaXNpdG9yJikg
eyB9CiB9OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRMaXN0ZW5lci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9FdmVudExpc3RlbmVyLmgJKHJldmlzaW9uIDI3
MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9FdmVudExpc3RlbmVyLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA4LCAyMDA5
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNi0y
MDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpA
QCAtMjQsNiArMjQsNyBAQAogI2luY2x1ZGUgPHd0Zi9XZWFrUHRyLmg+CiAKIG5hbWVzcGFjZSBK
U0MgeworY2xhc3MgQWJzdHJhY3RTbG90VmlzaXRvcjsKIGNsYXNzIEpTT2JqZWN0OwogY2xhc3Mg
U2xvdFZpc2l0b3I7CiB9CkBAIC01Miw2ICs1Myw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZv
aWQgaGFuZGxlRXZlbnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIEV2ZW50JikgPSAwOwogICAg
IHZpcnR1YWwgYm9vbCB3YXNDcmVhdGVkRnJvbU1hcmt1cCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNl
OyB9CiAKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXRKU0Z1bmN0aW9uKEpTQzo6QWJzdHJhY3RTbG90
VmlzaXRvciYpIHsgfQogICAgIHZpcnR1YWwgdm9pZCB2aXNpdEpTRnVuY3Rpb24oSlNDOjpTbG90
VmlzaXRvciYpIHsgfQogCiAgICAgdmlydHVhbCBib29sIGlzQXR0cmlidXRlKCkgY29uc3QgeyBy
ZXR1cm4gZmFsc2U7IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9FdmVudFRhcmdldC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50VGFyZ2V0LmNwcAkocmV2aXNp
b24gMjcyODMwKQorKysgU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50VGFyZ2V0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMiw3ICsyLDcgQEAKICAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xs
IChrbm9sbEBrZGUub3JnKQogICogICAgICAgICAgIChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChr
b2l2aXN0b0BrZGUub3JnKQogICogICAgICAgICAgIChDKSAyMDAxIERpcmsgTXVlbGxlciAobXVl
bGxlckBrZGUub3JnKQotICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMTcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA2IEFsZXhleSBQcm9za3Vy
eWFrb3YgKGFwQHdlYmtpdC5vcmcpCiAgKiAgICAgICAgICAgKEMpIDIwMDcsIDIwMDggTmlrb2xh
cyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CiAgKgpAQCAtMzg0LDcgKzM4NCw4IEBA
IHZvaWQgRXZlbnRUYXJnZXQ6OnJlbW92ZUFsbEV2ZW50TGlzdGVuZXIKICAgICB0aHJlYWREYXRh
LnNldElzSW5SZW1vdmVBbGxFdmVudExpc3RlbmVycyhmYWxzZSk7CiB9CiAKLXZvaWQgRXZlbnRU
YXJnZXQ6OnZpc2l0SlNFdmVudExpc3RlbmVycyhKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQor
dGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgRXZlbnRUYXJnZXQ6OnZpc2l0SlNFdmVu
dExpc3RlbmVycyhWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEV2ZW50VGFyZ2V0RGF0YSogZGF0
YSA9IGV2ZW50VGFyZ2V0RGF0YUNvbmN1cnJlbnRseSgpOwogICAgIGlmICghZGF0YSkKQEAgLTM5
Niw2ICszOTcsOSBAQCB2b2lkIEV2ZW50VGFyZ2V0Ojp2aXNpdEpTRXZlbnRMaXN0ZW5lcnMoCiAg
ICAgICAgIGxpc3RlbmVyLT52aXNpdEpTRnVuY3Rpb24odmlzaXRvcik7CiB9CiAKK3RlbXBsYXRl
IHZvaWQgRXZlbnRUYXJnZXQ6OnZpc2l0SlNFdmVudExpc3RlbmVycyhKU0M6OkFic3RyYWN0U2xv
dFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgRXZlbnRUYXJnZXQ6OnZpc2l0SlNFdmVudExpc3Rl
bmVycyhKU0M6OlNsb3RWaXNpdG9yJik7CisKIHZvaWQgRXZlbnRUYXJnZXQ6OmludmFsaWRhdGVF
dmVudExpc3RlbmVyUmVnaW9ucygpCiB7CiAgICAgaWYgKGlzPEVsZW1lbnQ+KCp0aGlzKSkgewpJ
bmRleDogU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50VGFyZ2V0LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvZG9tL0V2ZW50VGFyZ2V0LmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2RvbS9FdmVudFRhcmdldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yLDcgKzIsNyBA
QAogICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCiAgKiAg
ICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCiAgKiAg
ICAgICAgICAgKEMpIDIwMDEgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDQtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDQtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KiBDb3B5cmlnaHQgKEMpIDIwMDYgQWxleGV5IFByb3NrdXJ5YWtvdiAoYXBAd2Via2l0Lm9yZykK
ICAqICAgICAgICAgICAoQykgMjAwNywgMjAwOCBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1h
bm5Aa2RlLm9yZz4KICAqCkBAIC05Nyw3ICs5Nyw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGZpcmVF
dmVudExpc3RlbmVycyhFdmVudCYsIEV2ZW50SW52b2tlUGhhc2UpOwogICAgIGJvb2wgaXNGaXJp
bmdFdmVudExpc3RlbmVycygpIGNvbnN0OwogCi0gICAgdm9pZCB2aXNpdEpTRXZlbnRMaXN0ZW5l
cnMoSlNDOjpTbG90VmlzaXRvciYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZv
aWQgdmlzaXRKU0V2ZW50TGlzdGVuZXJzKFZpc2l0b3ImKTsKICAgICB2b2lkIGludmFsaWRhdGVK
U0V2ZW50TGlzdGVuZXJzKEpTQzo6SlNPYmplY3QqKTsKIAogICAgIGNvbnN0IEV2ZW50VGFyZ2V0
RGF0YSogZXZlbnRUYXJnZXREYXRhKCkgY29uc3Q7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20v
TXV0YXRpb25SZWNvcmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9NdXRh
dGlvblJlY29yZC5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9N
dXRhdGlvblJlY29yZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKgogICog
Q29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQpAQCAtNDEsNyArNDIsNyBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIG5hbWVzcGFjZSB7CiAKLXN0YXRpYyB2b2lkIHZpc2l0Tm9kZUxpc3QoSlND
OjpTbG90VmlzaXRvciYgdmlzaXRvciwgTm9kZUxpc3QmIG5vZGVMaXN0KQorc3RhdGljIHZvaWQg
dmlzaXROb2RlTGlzdChKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIE5vZGVMaXN0
JiBub2RlTGlzdCkKIHsKICAgICBBU1NFUlQoIW5vZGVMaXN0LmlzTGl2ZU5vZGVMaXN0KCkpOwog
ICAgIHVuc2lnbmVkIGxlbmd0aCA9IG5vZGVMaXN0Lmxlbmd0aCgpOwpAQCAtNjgsNyArNjksNyBA
QCBwcml2YXRlOgogICAgIE5vZGUqIHByZXZpb3VzU2libGluZygpIG92ZXJyaWRlIHsgcmV0dXJu
IG1fcHJldmlvdXNTaWJsaW5nLmdldCgpOyB9CiAgICAgTm9kZSogbmV4dFNpYmxpbmcoKSBvdmVy
cmlkZSB7IHJldHVybiBtX25leHRTaWJsaW5nLmdldCgpOyB9CiAKLSAgICB2b2lkIHZpc2l0Tm9k
ZXNDb25jdXJyZW50bHkoSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikgY29uc3QgZmluYWwKKyAg
ICB2b2lkIHZpc2l0Tm9kZXNDb25jdXJyZW50bHkoSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiB2
aXNpdG9yKSBjb25zdCBmaW5hbAogICAgIHsKICAgICAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290
KHJvb3QobV90YXJnZXQucHRyKCkpKTsKICAgICAgICAgaWYgKG1fYWRkZWROb2RlcykKQEAgLTEw
NSw3ICsxMDYsNyBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gbm9kZUxpc3QuZ2V0KCk7CiAg
ICAgfQogCi0gICAgdm9pZCB2aXNpdE5vZGVzQ29uY3VycmVudGx5KEpTQzo6U2xvdFZpc2l0b3Im
IHZpc2l0b3IpIGNvbnN0IGZpbmFsCisgICAgdm9pZCB2aXNpdE5vZGVzQ29uY3VycmVudGx5KEpT
Qzo6QWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikgY29uc3QgZmluYWwKICAgICB7CiAgICAg
ICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChyb290KG1fdGFyZ2V0LnB0cigpKSk7CiAgICAgfQpA
QCAtMTY0LDcgKzE2NSw3IEBAIHByaXZhdGU6CiAKICAgICBTdHJpbmcgb2xkVmFsdWUoKSBvdmVy
cmlkZSB7IHJldHVybiBTdHJpbmcoKTsgfQogCi0gICAgdm9pZCB2aXNpdE5vZGVzQ29uY3VycmVu
dGx5KEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0IGZpbmFsCisgICAgdm9pZCB2aXNp
dE5vZGVzQ29uY3VycmVudGx5KEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikgY29u
c3QgZmluYWwKICAgICB7CiAgICAgICAgIG1fcmVjb3JkLT52aXNpdE5vZGVzQ29uY3VycmVudGx5
KHZpc2l0b3IpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9NdXRhdGlvblJlY29y
ZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9NdXRhdGlvblJlY29yZC5oCShy
ZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vTXV0YXRpb25SZWNvcmQuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTEg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMgYXJlCkBAIC0zNiw3ICszNyw3IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1jbGFzcyBT
bG90VmlzaXRvcjsKK2NsYXNzIEFic3RyYWN0U2xvdFZpc2l0b3I7CiAKIH0KIApAQCAtNzIsNyAr
NzMsNyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIFN0cmluZyBvbGRWYWx1ZSgpIHsgcmV0dXJu
IFN0cmluZygpOyB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXROb2Rlc0NvbmN1cnJlbnRseShK
U0M6OlNsb3RWaXNpdG9yJikgY29uc3QgPSAwOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdE5vZGVz
Q29uY3VycmVudGx5KEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpIGNvbnN0ID0gMDsKIH07CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9TdGF0aWNS
YW5nZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL1N0YXRpY1JhbmdlLmNw
cAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL1dlYkNvcmUvZG9tL1N0YXRpY1JhbmdlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTYtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTc2LDcgKzc2LDcgQEAgRXhjZXB0aW9uT3I8UmVmPFN0YXRp
Y1JhbmdlPj4gU3RhdGljUmFuZwogICAgIHJldHVybiBjcmVhdGUoeyB7IGluaXQuc3RhcnRDb250
YWluZXIucmVsZWFzZU5vbk51bGwoKSwgaW5pdC5zdGFydE9mZnNldCB9LCB7IGluaXQuZW5kQ29u
dGFpbmVyLnJlbGVhc2VOb25OdWxsKCksIGluaXQuZW5kT2Zmc2V0IH0gfSk7CiB9CiAKLXZvaWQg
U3RhdGljUmFuZ2U6OnZpc2l0Tm9kZXNDb25jdXJyZW50bHkoSlNDOjpTbG90VmlzaXRvciYgdmlz
aXRvcikgY29uc3QKK3ZvaWQgU3RhdGljUmFuZ2U6OnZpc2l0Tm9kZXNDb25jdXJyZW50bHkoSlND
OjpBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBjb25zdAogewogICAgIHZpc2l0b3IuYWRk
T3BhcXVlUm9vdChyb290KHN0YXJ0LmNvbnRhaW5lci5nZXQoKSkpOwogICAgIHZpc2l0b3IuYWRk
T3BhcXVlUm9vdChyb290KGVuZC5jb250YWluZXIuZ2V0KCkpKTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2RvbS9TdGF0aWNSYW5nZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9T
dGF0aWNSYW5nZS5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vU3Rh
dGljUmFuZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTYtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMwLDcgKzMwLDcgQEAKIAogbmFtZXNwYWNl
IEpTQyB7CiAKLWNsYXNzIFNsb3RWaXNpdG9yOworY2xhc3MgQWJzdHJhY3RTbG90VmlzaXRvcjsK
IAogfQogCkBAIC01OCw3ICs1OCw3IEBAIHB1YmxpYzoKICAgICB1bnNpZ25lZCBlbmRPZmZzZXQo
KSBjb25zdCBmaW5hbCB7IHJldHVybiBTaW1wbGVSYW5nZTo6ZW5kT2Zmc2V0KCk7IH0KICAgICBi
b29sIGNvbGxhcHNlZCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIFNpbXBsZVJhbmdlOjpjb2xsYXBz
ZWQoKTsgfQogCi0gICAgdm9pZCB2aXNpdE5vZGVzQ29uY3VycmVudGx5KEpTQzo6U2xvdFZpc2l0
b3ImKSBjb25zdDsKKyAgICB2b2lkIHZpc2l0Tm9kZXNDb25jdXJyZW50bHkoSlNDOjpBYnN0cmFj
dFNsb3RWaXNpdG9yJikgY29uc3Q7CiAKIHByaXZhdGU6CiAgICAgU3RhdGljUmFuZ2UoU2ltcGxl
UmFuZ2UmJik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTDJSZW5kZXJp
bmdDb250ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9X
ZWJHTDJSZW5kZXJpbmdDb250ZXh0LmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL1dl
YkNvcmUvaHRtbC9jYW52YXMvV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjAgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0zMDc4LDcgKzMwNzgsNyBAQCBib29sIFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OmNo
ZWNrQW5kVHJhCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgV2ViR0wyUmVuZGVyaW5nQ29u
dGV4dDo6YWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMoSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikK
K3ZvaWQgV2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6YWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMoSlND
OjpBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2U6OmFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKHZpc2l0b3IpOwogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTDJSZW5kZXJpbmdDb250ZXh0LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5o
CShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTDJS
ZW5kZXJpbmdDb250ZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNjEsNyArMjYxLDcgQEAgcHVi
bGljOgogCiAgICAgYm9vbCBjaGVja0FuZFRyYW5zbGF0ZUF0dGFjaG1lbnRzKGNvbnN0IGNoYXIq
IGZ1bmN0aW9uTmFtZSwgR0NHTGVudW0sIFZlY3RvcjxHQ0dMZW51bT4mKTsKIAotICAgIHZvaWQg
YWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMoSlNDOjpTbG90VmlzaXRvciYpIG92ZXJyaWRlOworICAg
IHZvaWQgYWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMoSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJikg
b3ZlcnJpZGU7CiAKIHByaXZhdGU6CiAgICAgV2ViR0wyUmVuZGVyaW5nQ29udGV4dChDYW52YXNC
YXNlJiwgR3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL1dlYkdMRnJhbWVidWZmZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRnJhbWVidWZmZXIuY3BwCShyZXZpc2lvbiAyNzI4MzAp
CisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEZyYW1lYnVmZmVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAx
NyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkt
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTYzLDcgKzYzLDcgQEAgbmFtZXNwYWNlIHsKICAgICAgICAgdm9pZCBv
bkRldGFjaGVkKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgR3JhcGhpY3NDb250ZXh0R0wqKSBvdmVy
cmlkZTsKICAgICAgICAgdm9pZCBhdHRhY2goR3JhcGhpY3NDb250ZXh0R0wqLCBHQ0dMZW51bSB0
YXJnZXQsIEdDR0xlbnVtIGF0dGFjaG1lbnQpIG92ZXJyaWRlOwogICAgICAgICB2b2lkIHVuYXR0
YWNoKEdyYXBoaWNzQ29udGV4dEdMKiwgR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBhdHRhY2ht
ZW50KSBvdmVycmlkZTsKLSAgICAgICAgdm9pZCBhZGRNZW1iZXJzVG9PcGFxdWVSb290cyhjb25z
dCBBYnN0cmFjdExvY2tlciYsIEpTQzo6U2xvdFZpc2l0b3ImKSBvdmVycmlkZTsKKyAgICAgICAg
dm9pZCBhZGRNZW1iZXJzVG9PcGFxdWVSb290cyhjb25zdCBBYnN0cmFjdExvY2tlciYsIEpTQzo6
QWJzdHJhY3RTbG90VmlzaXRvciYpIG92ZXJyaWRlOwogCiAgICAgICAgIFdlYkdMUmVuZGVyYnVm
ZmVyQXR0YWNobWVudCgpIHsgfTsKIApAQCAtMTQ1LDcgKzE0NSw3IEBAIG5hbWVzcGFjZSB7CiAg
ICAgICAgICAgICBjb250ZXh0LT5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcih0YXJnZXQsIGF0dGFj
aG1lbnQsIEdyYXBoaWNzQ29udGV4dEdMOjpSRU5ERVJCVUZGRVIsIDApOwogICAgIH0KIAotICAg
IHZvaWQgV2ViR0xSZW5kZXJidWZmZXJBdHRhY2htZW50OjphZGRNZW1iZXJzVG9PcGFxdWVSb290
cyhjb25zdCBBYnN0cmFjdExvY2tlciYsIEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCisgICAg
dm9pZCBXZWJHTFJlbmRlcmJ1ZmZlckF0dGFjaG1lbnQ6OmFkZE1lbWJlcnNUb09wYXF1ZVJvb3Rz
KGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9y
KQogICAgIHsKICAgICAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KG1fcmVuZGVyYnVmZmVyLmdl
dCgpKTsKICAgICB9CkBAIC0xNjksNyArMTY5LDcgQEAgbmFtZXNwYWNlIHsKICAgICAgICAgdm9p
ZCBvbkRldGFjaGVkKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgR3JhcGhpY3NDb250ZXh0R0wqKSBv
dmVycmlkZTsKICAgICAgICAgdm9pZCBhdHRhY2goR3JhcGhpY3NDb250ZXh0R0wqLCBHQ0dMZW51
bSB0YXJnZXQsIEdDR0xlbnVtIGF0dGFjaG1lbnQpIG92ZXJyaWRlOwogICAgICAgICB2b2lkIHVu
YXR0YWNoKEdyYXBoaWNzQ29udGV4dEdMKiwgR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBhdHRh
Y2htZW50KSBvdmVycmlkZTsKLSAgICAgICAgdm9pZCBhZGRNZW1iZXJzVG9PcGFxdWVSb290cyhj
b25zdCBBYnN0cmFjdExvY2tlciYsIEpTQzo6U2xvdFZpc2l0b3ImKSBvdmVycmlkZTsKKyAgICAg
ICAgdm9pZCBhZGRNZW1iZXJzVG9PcGFxdWVSb290cyhjb25zdCBBYnN0cmFjdExvY2tlciYsIEpT
Qzo6QWJzdHJhY3RTbG90VmlzaXRvciYpIG92ZXJyaWRlOwogCiAgICAgICAgIFdlYkdMVGV4dHVy
ZUF0dGFjaG1lbnQoKSB7IH07CiAKQEAgLTI2Nyw3ICsyNjcsNyBAQCBuYW1lc3BhY2UgewogI2Vu
ZGlmCiAgICAgfQogCi0gICAgdm9pZCBXZWJHTFRleHR1cmVBdHRhY2htZW50OjphZGRNZW1iZXJz
VG9PcGFxdWVSb290cyhjb25zdCBBYnN0cmFjdExvY2tlciYsIEpTQzo6U2xvdFZpc2l0b3ImIHZp
c2l0b3IpCisgICAgdm9pZCBXZWJHTFRleHR1cmVBdHRhY2htZW50OjphZGRNZW1iZXJzVG9PcGFx
dWVSb290cyhjb25zdCBBYnN0cmFjdExvY2tlciYsIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYg
dmlzaXRvcikKICAgICB7CiAgICAgICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChtX3RleHR1cmUu
Z2V0KCkpOwogICAgIH0KQEAgLTcyMSw3ICs3MjEsNyBAQCBHQ0dMZW51bSBXZWJHTEZyYW1lYnVm
ZmVyOjpnZXREcmF3QnVmZmVyCiAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dEdMOjpOT05FOwog
fQogCi12b2lkIFdlYkdMRnJhbWVidWZmZXI6OmFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKGNvbnN0
IEFic3RyYWN0TG9ja2VyJiBsb2NrZXIsIEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2b2lk
IFdlYkdMRnJhbWVidWZmZXI6OmFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKGNvbnN0IEFic3RyYWN0
TG9ja2VyJiBsb2NrZXIsIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAg
ICBmb3IgKGF1dG8mIGVudHJ5IDogbV9hdHRhY2htZW50cykKICAgICAgICAgZW50cnkudmFsdWUt
PmFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKGxvY2tlciwgdmlzaXRvcik7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEZyYW1lYnVmZmVyLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xGcmFtZWJ1ZmZlci5oCShyZXZpc2lvbiAyNzI4
MzApCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEZyYW1lYnVmZmVyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMzQsNyArMzQsNyBAQAogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFt
ZXNwYWNlIEpTQyB7Ci1jbGFzcyBTbG90VmlzaXRvcjsKK2NsYXNzIEFic3RyYWN0U2xvdFZpc2l0
b3I7CiB9CiAKIG5hbWVzcGFjZSBXVEYgewpAQCAtNjUsNyArNjUsNyBAQCBwdWJsaWM6CiAgICAg
ICAgIHZpcnR1YWwgdm9pZCBvbkRldGFjaGVkKGNvbnN0IFdURjo6QWJzdHJhY3RMb2NrZXImLCBH
cmFwaGljc0NvbnRleHRHTCopID0gMDsKICAgICAgICAgdmlydHVhbCB2b2lkIGF0dGFjaChHcmFw
aGljc0NvbnRleHRHTCosIEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gYXR0YWNobWVudCkgPSAw
OwogICAgICAgICB2aXJ0dWFsIHZvaWQgdW5hdHRhY2goR3JhcGhpY3NDb250ZXh0R0wqLCBHQ0dM
ZW51bSB0YXJnZXQsIEdDR0xlbnVtIGF0dGFjaG1lbnQpID0gMDsKLSAgICAgICAgdmlydHVhbCB2
b2lkIGFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKGNvbnN0IFdURjo6QWJzdHJhY3RMb2NrZXImLCBK
U0M6OlNsb3RWaXNpdG9yJikgPSAwOworICAgICAgICB2aXJ0dWFsIHZvaWQgYWRkTWVtYmVyc1Rv
T3BhcXVlUm9vdHMoY29uc3QgV1RGOjpBYnN0cmFjdExvY2tlciYsIEpTQzo6QWJzdHJhY3RTbG90
VmlzaXRvciYpID0gMDsKIAogICAgIHByb3RlY3RlZDoKICAgICAgICAgV2ViR0xBdHRhY2htZW50
KCk7CkBAIC0xMTQsNyArMTE0LDcgQEAgcHVibGljOgogCiAgICAgR0NHTGVudW0gZ2V0RHJhd0J1
ZmZlcihHQ0dMZW51bSk7CiAKLSAgICB2b2lkIGFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKGNvbnN0
IFdURjo6QWJzdHJhY3RMb2NrZXImLCBKU0M6OlNsb3RWaXNpdG9yJik7CisgICAgdm9pZCBhZGRN
ZW1iZXJzVG9PcGFxdWVSb290cyhjb25zdCBXVEY6OkFic3RyYWN0TG9ja2VyJiwgSlNDOjpBYnN0
cmFjdFNsb3RWaXNpdG9yJik7CiAKIHByaXZhdGU6CiAgICAgV2ViR0xGcmFtZWJ1ZmZlcihXZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlJik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZh
cy9XZWJHTFByb2dyYW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2Fu
dmFzL1dlYkdMUHJvZ3JhbS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL1dlYkdMUHJvZ3JhbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjA2LDcgKzIwNiw3
IEBAIGJvb2wgV2ViR0xQcm9ncmFtOjpkZXRhY2hTaGFkZXIoY29uc3QgQWIKICAgICB9CiB9CiAK
LXZvaWQgV2ViR0xQcm9ncmFtOjphZGRNZW1iZXJzVG9PcGFxdWVSb290cyhjb25zdCBBYnN0cmFj
dExvY2tlciYsIEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIFdlYkdMUHJvZ3JhbTo6
YWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMoY29uc3QgQWJzdHJhY3RMb2NrZXImLCBKU0M6OkFic3Ry
YWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KG1f
dmVydGV4U2hhZGVyLmdldCgpKTsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QobV9mcmFnbWVu
dFNoYWRlci5nZXQoKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFBy
b2dyYW0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFBy
b2dyYW0uaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
V2ViR0xQcm9ncmFtLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDA5LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDA5LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNSw3ICszNSw3IEBACiAjaW5jbHVk
ZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgSlNDIHsKLWNsYXNzIFNsb3RWaXNpdG9yOwor
Y2xhc3MgQWJzdHJhY3RTbG90VmlzaXRvcjsKIH0KIAogbmFtZXNwYWNlIFdURiB7CkBAIC04OCw3
ICs4OCw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fcmVxdWlyZWRUcmFuc2Zvcm1GZWVk
YmFja0J1ZmZlckNvdW50OwogICAgIH0KIAotICAgIHZvaWQgYWRkTWVtYmVyc1RvT3BhcXVlUm9v
dHMoY29uc3QgV1RGOjpBYnN0cmFjdExvY2tlciYsIEpTQzo6U2xvdFZpc2l0b3ImKTsKKyAgICB2
b2lkIGFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKGNvbnN0IFdURjo6QWJzdHJhY3RMb2NrZXImLCBK
U0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKTsKIAogcHJpdmF0ZToKICAgICBXZWJHTFByb2dyYW0o
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSYpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9j
YW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHAJKHJldmlz
aW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxNS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNzkzMSw3ICs3OTMxLDcgQEAgdm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpkaXNwYXRjaAogICAgIHF1ZXVlVGFza1RvRGlz
cGF0Y2hFdmVudCgqY2FudmFzLCBUYXNrU291cmNlOjpXZWJHTCwgV2ViR0xDb250ZXh0RXZlbnQ6
OmNyZWF0ZShldmVudE5hbWVzKCkud2ViZ2xjb250ZXh0Y2hhbmdlZEV2ZW50LCBFdmVudDo6Q2Fu
QnViYmxlOjpObywgRXZlbnQ6OklzQ2FuY2VsYWJsZTo6WWVzLCBlbXB0eVN0cmluZygpKSk7CiB9
CiAKLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6YWRkTWVtYmVyc1RvT3BhcXVlUm9v
dHMoSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0
QmFzZTo6YWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMoSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQogewogICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sob2JqZWN0R3JhcGhMb2NrKCkp
OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZS5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTcgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC01OCw3ICs1OCw3IEBACiAjZW5kaWYKIAogbmFtZXNwYWNlIEpTQyB7Ci1jbGFzcyBTbG90
VmlzaXRvcjsKK2NsYXNzIEFic3RyYWN0U2xvdFZpc2l0b3I7CiB9CiAKIG5hbWVzcGFjZSBXVEYg
ewpAQCAtNDExLDcgKzQxMSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHJlY3ljbGVDb250ZXh0KCkg
b3ZlcnJpZGU7CiAgICAgdm9pZCBkaXNwYXRjaENvbnRleHRDaGFuZ2VkTm90aWZpY2F0aW9uKCkg
b3ZlcnJpZGU7CiAKLSAgICB2aXJ0dWFsIHZvaWQgYWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMoSlND
OjpTbG90VmlzaXRvciYpOworICAgIHZpcnR1YWwgdm9pZCBhZGRNZW1iZXJzVG9PcGFxdWVSb290
cyhKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKTsKICAgICAvLyBUaGlzIGxvY2sgbXVzdCBiZSBo
ZWxkIGFjcm9zcyBhbGwgbXV0YXRpb25zIG9mIGNvbnRhaW5lcnMgbGlrZQogICAgIC8vIFZlY3Rv
cnMsIEhhc2hTZXRzLCBldGMuIHdoaWNoIGNvbnRhaW4gUmVmUHRyPFdlYkdMT2JqZWN0PiwgYW5k
CiAgICAgLy8gd2hpY2ggYXJlIHRyYXZlcnNlZCBieSBhZGRNZW1iZXJzVG9PcGFxdWVSb290cygp
IG9yIGFueSBvZiB0aGUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVHJh
bnNmb3JtRmVlZGJhY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2Fu
dmFzL1dlYkdMVHJhbnNmb3JtRmVlZGJhY2suY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFRyYW5zZm9ybUZlZWRiYWNrLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0zMCw4ICszMCw3IEBACiAKICNpbmNsdWRlICJXZWJHTENvbnRleHRHcm91cC5oIgog
I2luY2x1ZGUgIldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuaCIKLSNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9TbG90VmlzaXRvci5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1Nsb3RWaXNp
dG9ySW5saW5lcy5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0Fic3RyYWN0U2xvdFZpc2l0
b3JJbmxpbmVzLmg+CiAjaW5jbHVkZSA8d3RmL0xvY2suaD4KICNpbmNsdWRlIDx3dGYvTG9ja2Vy
Lmg+CiAKQEAgLTkzLDcgKzkyLDcgQEAgYm9vbCBXZWJHTFRyYW5zZm9ybUZlZWRiYWNrOjpoYXNF
bm91Z2hCdQogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIFdlYkdMVHJhbnNmb3JtRmVlZGJh
Y2s6OmFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKGNvbnN0IEFic3RyYWN0TG9ja2VyJiBsb2NrZXIs
IEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIFdlYkdMVHJhbnNmb3JtRmVlZGJhY2s6
OmFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKGNvbnN0IEFic3RyYWN0TG9ja2VyJiBsb2NrZXIsIEpT
Qzo6QWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBmb3IgKGF1dG8mIGJ1ZmZl
ciA6IG1fYm91bmRJbmRleGVkVHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJzKQogICAgICAgICB2aXNp
dG9yLmFkZE9wYXF1ZVJvb3QoYnVmZmVyLmdldCgpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0
bWwvY2FudmFzL1dlYkdMVHJhbnNmb3JtRmVlZGJhY2suaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFRyYW5zZm9ybUZlZWRiYWNrLmgJKHJldmlzaW9uIDI3
MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVHJhbnNmb3JtRmVlZGJh
Y2suaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTUtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMxLDcgKzMxLDcgQEAKICNpbmNsdWRlICJXZWJHTFNo
YXJlZE9iamVjdC5oIgogCiBuYW1lc3BhY2UgSlNDIHsKLWNsYXNzIFNsb3RWaXNpdG9yOworY2xh
c3MgQWJzdHJhY3RTbG90VmlzaXRvcjsKIH0KIAogbmFtZXNwYWNlIFdURiB7CkBAIC03MCw3ICs3
MCw3IEBAIHB1YmxpYzoKICAgICAKICAgICBib29sIGhhc0Vub3VnaEJ1ZmZlcnMoR0NHTHVpbnQg
bnVtUmVxdWlyZWQpIGNvbnN0OwogCi0gICAgdm9pZCBhZGRNZW1iZXJzVG9PcGFxdWVSb290cyhj
b25zdCBBYnN0cmFjdExvY2tlciYsIEpTQzo6U2xvdFZpc2l0b3ImKTsKKyAgICB2b2lkIGFkZE1l
bWJlcnNUb09wYXF1ZVJvb3RzKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgSlNDOjpBYnN0cmFjdFNs
b3RWaXNpdG9yJik7CiAKIHByaXZhdGU6CiAgICAgV2ViR0xUcmFuc2Zvcm1GZWVkYmFjayhXZWJH
TDJSZW5kZXJpbmdDb250ZXh0Jik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9X
ZWJHTFZlcnRleEFycmF5T2JqZWN0QmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvV2ViR0xWZXJ0ZXhBcnJheU9iamVjdEJhc2UuY3BwCShyZXZpc2lvbiAy
NzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFZlcnRleEFycmF5T2Jq
ZWN0QmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE1LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOSw4ICsyOSw3IEBACiAjaWYgRU5BQkxF
KFdFQkdMKQogCiAjaW5jbHVkZSAiV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5oIgotI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL1Nsb3RWaXNpdG9yLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvU2xvdFZpc2l0b3JJbmxpbmVzLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvQWJzdHJh
Y3RTbG90VmlzaXRvcklubGluZXMuaD4KICNpbmNsdWRlIDx3dGYvTG9ja2VyLmg+CiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKQEAgLTEwOSw3ICsxMDgsNyBAQCB2b2lkIFdlYkdMVmVydGV4QXJyYXlP
YmplY3RCYXNlOjpzZXRWZXJ0CiAgICAgbV92ZXJ0ZXhBdHRyaWJTdGF0ZVtpbmRleF0uZGl2aXNv
ciA9IGRpdmlzb3I7CiB9CiAKLXZvaWQgV2ViR0xWZXJ0ZXhBcnJheU9iamVjdEJhc2U6OmFkZE1l
bWJlcnNUb09wYXF1ZVJvb3RzKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgSlNDOjpTbG90VmlzaXRv
ciYgdmlzaXRvcikKK3ZvaWQgV2ViR0xWZXJ0ZXhBcnJheU9iamVjdEJhc2U6OmFkZE1lbWJlcnNU
b09wYXF1ZVJvb3RzKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgSlNDOjpBYnN0cmFjdFNsb3RWaXNp
dG9yJiB2aXNpdG9yKQogewogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChtX2JvdW5kRWxlbWVu
dEFycmF5QnVmZmVyLmdldCgpKTsKICAgICBmb3IgKGF1dG8mIHN0YXRlIDogbV92ZXJ0ZXhBdHRy
aWJTdGF0ZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVmVydGV4QXJy
YXlPYmplY3RCYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
V2ViR0xWZXJ0ZXhBcnJheU9iamVjdEJhc2UuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNl
L1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xWZXJ0ZXhBcnJheU9iamVjdEJhc2UuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTMyLDcgKzMyLDcgQEAKICNpbmNsdWRlICJXZWJHTENvbnRleHRPYmplY3Qu
aCIKIAogbmFtZXNwYWNlIEpTQyB7Ci1jbGFzcyBTbG90VmlzaXRvcjsKK2NsYXNzIEFic3RyYWN0
U2xvdFZpc2l0b3I7CiB9CiAKIG5hbWVzcGFjZSBXVEYgewpAQCAtNzcsNyArNzcsNyBAQCBwdWJs
aWM6CiAKICAgICB2b2lkIHNldFZlcnRleEF0dHJpYkRpdmlzb3IoR0NHTHVpbnQgaW5kZXgsIEdD
R0x1aW50IGRpdmlzb3IpOwogCi0gICAgdm9pZCBhZGRNZW1iZXJzVG9PcGFxdWVSb290cyhjb25z
dCBXVEY6OkFic3RyYWN0TG9ja2VyJiwgSlNDOjpTbG90VmlzaXRvciYpOworICAgIHZvaWQgYWRk
TWVtYmVyc1RvT3BhcXVlUm9vdHMoY29uc3QgV1RGOjpBYnN0cmFjdExvY2tlciYsIEpTQzo6QWJz
dHJhY3RTbG90VmlzaXRvciYpOwogCiBwcm90ZWN0ZWQ6CiAgICAgV2ViR0xWZXJ0ZXhBcnJheU9i
amVjdEJhc2UoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSYsIFR5cGUpOwo=
</data>
<flag name="commit-queue"
          id="438698"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>420274</attachid>
            <date>2021-02-14 23:54:04 -0800</date>
            <delta_ts>2021-02-15 03:05:05 -0800</delta_ts>
            <desc>work in progress.</desc>
            <filename>bug-217274n.patch</filename>
            <type>text/plain</type>
            <size>579652</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDI3MjgzMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtNjEzLDYgKzYxMyw4IEBAIHNldChKYXZhU2NyaXB0Q29yZV9QUklWQVRFX0ZSQU1FV09SS19I
RUEKICAgICBkb21qaXQvRE9NSklUSGVhcFJhbmdlLmgKICAgICBkb21qaXQvRE9NSklUU2lnbmF0
dXJlLmgKIAorICAgIGhlYXAvQWJzdHJhY3RTbG90VmlzaXRvci5oCisgICAgaGVhcC9BYnN0cmFj
dFNsb3RWaXNpdG9ySW5saW5lcy5oCiAgICAgaGVhcC9BbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmgK
ICAgICBoZWFwL0FsbG9jYXRpb25GYWlsdXJlTW9kZS5oCiAgICAgaGVhcC9BbGxvY2F0b3IuaApA
QCAtNjg3LDEyICs2ODksMTQgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1BSSVZBVEVfRlJBTUVXT1JL
X0hFQQogICAgIGhlYXAvU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQuaAogICAgIGhlYXAvU2xvdFZp
c2l0b3IuaAogICAgIGhlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmgKKyAgICBoZWFwL1Nsb3RWaXNp
dG9yTWFjcm9zLmgKICAgICBoZWFwL1N0cm9uZy5oCiAgICAgaGVhcC9TdHJvbmdJbmxpbmVzLmgK
ICAgICBoZWFwL1N1YnNwYWNlLmgKICAgICBoZWFwL1N1YnNwYWNlSW5saW5lcy5oCiAgICAgaGVh
cC9TeW5jaHJvbm91c25lc3MuaAogICAgIGhlYXAvVGlueUJsb29tRmlsdGVyLmgKKyAgICBoZWFw
L1ZlcmlmaWVyU2xvdFZpc2l0b3IuaAogICAgIGhlYXAvVmlzaXRSYWNlS2V5LmgKICAgICBoZWFw
L1dlYWsuaAogICAgIGhlYXAvV2Vha0Jsb2NrLmgKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9Tb3VyY2VzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNl
cy50eHQJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2Vz
LnR4dAkod29ya2luZyBjb3B5KQpAQCAtNTYzLDYgKzU2Myw3IEBAIGhlYXAvU3RvcElmTmVjZXNz
YXJ5VGltZXIuY3BwCiBoZWFwL1N1YnNwYWNlLmNwcAogaGVhcC9TeW5jaHJvbm91c1N0b3BUaGVX
b3JsZE11dGF0b3JTY2hlZHVsZXIuY3BwCiBoZWFwL1N5bmNocm9ub3VzbmVzcy5jcHAKK2hlYXAv
VmVyaWZpZXJTbG90VmlzaXRvci5jcHAKIGhlYXAvVmlzaXRSYWNlS2V5LmNwcAogaGVhcC9XZWFr
LmNwcAogaGVhcC9XZWFrQmxvY2suY3BwCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJ
L0pTQVBJV3JhcHBlck9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9BUEkvSlNBUElXcmFwcGVyT2JqZWN0LmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9BUEkvSlNBUElXcmFwcGVyT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTkgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC00MSw3ICs0MSw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBzdWJzcGFjZUZvcihWTSYp
IHsgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQogICAgIAogICAgIHZvaWQgZmluaXNo
Q3JlYXRpb24oVk0mKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIEpT
Qzo6U2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOX1dJVEhfTU9ESUZJ
RVIoSlNfRVhQT1JUX1BSSVZBVEUpOwogICAgIAogICAgIHZvaWQqIHdyYXBwZWRPYmplY3QoKSB7
IHJldHVybiBtX3dyYXBwZWRPYmplY3Q7IH0KICAgICB2b2lkIHNldFdyYXBwZWRPYmplY3Qodm9p
ZCopOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0FQSVdyYXBwZXJPYmplY3Qu
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0FQSVdyYXBwZXJP
YmplY3QubW0JKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkv
SlNBUElXcmFwcGVyT2JqZWN0Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzcsNyArMzcsNyBAQAog
Y2xhc3MgSlNBUElXcmFwcGVyT2JqZWN0SGFuZGxlT3duZXIgZmluYWwgOiBwdWJsaWMgSlNDOjpX
ZWFrSGFuZGxlT3duZXIgewogcHVibGljOgogICAgIHZvaWQgZmluYWxpemUoSlNDOjpIYW5kbGU8
SlNDOjpVbmtub3duPiwgdm9pZCopIGZpbmFsOwotICAgIGJvb2wgaXNSZWFjaGFibGVGcm9tT3Bh
cXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCwgSlNDOjpT
bG90VmlzaXRvciYsIGNvbnN0IGNoYXIqKikgZmluYWw7CisgICAgYm9vbCBpc1JlYWNoYWJsZUZy
b21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0LCBK
U0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImLCBjb25zdCBjaGFyKiopIGZpbmFsOwogfTsKIAogc3Rh
dGljIEpTQVBJV3JhcHBlck9iamVjdEhhbmRsZU93bmVyKiBqc0FQSVdyYXBwZXJPYmplY3RIYW5k
bGVPd25lcigpCkBAIC01NiwxNCArNTYsMTQgQEAgdm9pZCBKU0FQSVdyYXBwZXJPYmplY3RIYW5k
bGVPd25lcjo6ZmluYQogICAgIEpTQzo6V2Vha1NldDo6ZGVhbGxvY2F0ZShKU0M6OldlYWtJbXBs
Ojphc1dlYWtJbXBsKGhhbmRsZS5zbG90KCkpKTsKIH0KIAotYm9vbCBKU0FQSVdyYXBwZXJPYmpl
Y3RIYW5kbGVPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlND
OjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25z
dCBjaGFyKiopCitib29sIEpTQVBJV3JhcHBlck9iamVjdEhhbmRsZU93bmVyOjppc1JlYWNoYWJs
ZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCos
IEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqKQogewogICAg
IEpTQzo6SlNBUElXcmFwcGVyT2JqZWN0KiB3cmFwcGVyT2JqZWN0ID0gSlNDOjpqc0Nhc3Q8SlND
OjpKU0FQSVdyYXBwZXJPYmplY3QqPihoYW5kbGUuZ2V0KCkuYXNDZWxsKCkpOwogICAgIC8vIFdl
IHVzZSB0aGUgSlNHbG9iYWxPYmplY3Qgd2hlbiBwcm9jZXNzaW5nIHdlYWsgaGFuZGxlcyB0byBw
cmV2ZW50IHRoZSBzaXR1YXRpb24gd2hlcmUgdXNpbmcKICAgICAvLyB0aGUgc2FtZSBPYmplY3Rp
dmUtQyBvYmplY3QgaW4gbXVsdGlwbGUgZ2xvYmFsIG9iamVjdHMga2VlcHMgYWxsIG9mIHRoZSBn
bG9iYWwgb2JqZWN0cyBhbGl2ZS4KICAgICBpZiAoIXdyYXBwZXJPYmplY3QtPndyYXBwZWRPYmpl
Y3QoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiB2aXNpdG9yLnZtKCkuaGVh
cC5pc01hcmtlZCh3cmFwcGVyT2JqZWN0LT5zdHJ1Y3R1cmUoKS0+Z2xvYmFsT2JqZWN0KCkpICYm
IHZpc2l0b3IuY29udGFpbnNPcGFxdWVSb290KHdyYXBwZXJPYmplY3QtPndyYXBwZWRPYmplY3Qo
KSk7CisgICAgcmV0dXJuIHZpc2l0b3IuaXNNYXJrZWQod3JhcHBlck9iamVjdC0+c3RydWN0dXJl
KCktPmdsb2JhbE9iamVjdCgpKSAmJiB2aXNpdG9yLmNvbnRhaW5zT3BhcXVlUm9vdCh3cmFwcGVy
T2JqZWN0LT53cmFwcGVkT2JqZWN0KCkpOwogfQogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTczLDYg
KzczLDggQEAgc3RhdGljIEpTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJT04oY29uc3RydQogc3RhdGlj
IEpTQ19ERUNMQVJFX0NVU1RPTV9HRVRURVIoY2FsbGJhY2tHZXR0ZXJKU0FQSVdyYXBwZXJPYmpl
Y3RDYWxsYmFja09iamVjdCk7CiBzdGF0aWMgSlNDX0RFQ0xBUkVfQ1VTVE9NX0dFVFRFUihzdGF0
aWNGdW5jdGlvbkdldHRlckpTQVBJV3JhcHBlck9iamVjdENhbGxiYWNrT2JqZWN0KTsKIAorREVG
SU5FX1ZJU0lUX0NISUxEUkVOX1dJVEhfTU9ESUZJRVIodGVtcGxhdGU8PiwgSlNDYWxsYmFja09i
amVjdDxKU0FQSVdyYXBwZXJPYmplY3Q+KTsKKwogdGVtcGxhdGUgPD4gY29uc3QgQ2xhc3NJbmZv
IEpTQ2FsbGJhY2tPYmplY3Q8SlNBUElXcmFwcGVyT2JqZWN0Pjo6c19pbmZvID0geyAiSlNBUElX
cmFwcGVyT2JqZWN0IiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01F
VEhPRF9UQUJMRShKU0NhbGxiYWNrT2JqZWN0KSB9OwogdGVtcGxhdGUgPD4gY29uc3QgYm9vbCBK
U0NhbGxiYWNrT2JqZWN0PEpTQVBJV3JhcHBlck9iamVjdD46Om5lZWRzRGVzdHJ1Y3Rpb24gPSB0
cnVlOwogCkBAIC0xMjMsNyArMTI1LDggQEAgdm9pZCBKU0FQSVdyYXBwZXJPYmplY3Q6OnNldFdy
YXBwZWRPYmplYwogICAgIG1fd3JhcHBlZE9iamVjdCA9IFtzdGF0aWNfY2FzdDxpZD4od3JhcHBl
ZE9iamVjdCkgcmV0YWluXTsKIH0KIAotdm9pZCBKU0FQSVdyYXBwZXJPYmplY3Q6OnZpc2l0Q2hp
bGRyZW4oSlNDZWxsKiBjZWxsLCBKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8
dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNBUElXcmFwcGVyT2JqZWN0Ojp2aXNpdENoaWxkcmVu
SW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNBUElXcmFwcGVy
T2JqZWN0KiB0aGlzT2JqZWN0ID0gSlNDOjpqc0Nhc3Q8SlNBUElXcmFwcGVyT2JqZWN0Kj4oY2Vs
bCk7CiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbihjZWxsLCB2aXNpdG9yKTsKQEAgLTEzMyw2ICsx
MzYsOCBAQCB2b2lkIEpTQVBJV3JhcHBlck9iamVjdDo6dmlzaXRDaGlsZHJlbihKCiAgICAgICAg
IHNjYW5FeHRlcm5hbE9iamVjdEdyYXBoKHZpc2l0b3Iudm0oKSwgdmlzaXRvciwgd3JhcHBlZE9i
amVjdCk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTl9XSVRIX01PRElGSUVSKEpTX0VYUE9S
VF9QUklWQVRFLCBKU0FQSVdyYXBwZXJPYmplY3QpOworCiB0ZW1wbGF0ZSA8PgogSXNvU3Vic3Bh
Y2UqIEpTQ2FsbGJhY2tPYmplY3Q8SlNBUElXcmFwcGVyT2JqZWN0Pjo6c3Vic3BhY2VGb3JJbXBs
KFZNJiB2bSwgU3Vic3BhY2VBY2Nlc3MgbW9kZSkKIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0LmNwcAkocmV2aXNpb24gMjcyODMwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNyBBcHBs
ZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA3IEVy
aWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC00MSw2ICs0
MSw5IEBAIHN0YXRpYyBKU0NfREVDTEFSRV9DVVNUT01fR0VUVEVSKHN0YXRpY0YKIHN0YXRpYyBK
U0NfREVDTEFSRV9DVVNUT01fR0VUVEVSKGNhbGxiYWNrR2V0dGVySlNHbG9iYWxPYmplY3RDYWxs
YmFja09iamVjdCk7CiBzdGF0aWMgSlNDX0RFQ0xBUkVfQ1VTVE9NX0dFVFRFUihzdGF0aWNGdW5j
dGlvbkdldHRlckpTR2xvYmFsT2JqZWN0Q2FsbGJhY2tPYmplY3QpOwogCitERUZJTkVfVklTSVRf
Q0hJTERSRU5fV0lUSF9NT0RJRklFUih0ZW1wbGF0ZTw+LCBKU0NhbGxiYWNrT2JqZWN0PEpTTm9u
RmluYWxPYmplY3Q+KTsKK0RFRklORV9WSVNJVF9DSElMRFJFTl9XSVRIX01PRElGSUVSKHRlbXBs
YXRlPD4sIEpTQ2FsbGJhY2tPYmplY3Q8SlNHbG9iYWxPYmplY3Q+KTsKKwogLy8gRGVmaW5lIHRo
ZSB0d28gdHlwZXMgb2YgSlNDYWxsYmFja09iamVjdHMgd2Ugc3VwcG9ydC4KIHRlbXBsYXRlIDw+
IGNvbnN0IENsYXNzSW5mbyBKU0NhbGxiYWNrT2JqZWN0PEpTTm9uRmluYWxPYmplY3Q+OjpzX2lu
Zm8gPSB7ICJDYWxsYmFja09iamVjdCIsICZCYXNlOjpzX2luZm8sIG51bGxwdHIsIG51bGxwdHIs
IENSRUFURV9NRVRIT0RfVEFCTEUoSlNDYWxsYmFja09iamVjdCkgfTsKIHRlbXBsYXRlIDw+IGNv
bnN0IENsYXNzSW5mbyBKU0NhbGxiYWNrT2JqZWN0PEpTR2xvYmFsT2JqZWN0Pjo6c19pbmZvID0g
eyAiQ2FsbGJhY2tHbG9iYWxPYmplY3QiLCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBudWxscHRy
LCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTQ2FsbGJhY2tPYmplY3QpIH07CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3QuaAkocmV2aXNpb24gMjcyODMw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMjAg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIw
MjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA3
IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC02OSw3
ICs2OSwxMCBAQCBwdWJsaWM6CiAgICAgICAgIG1fcHJpdmF0ZVByb3BlcnRpZXMtPmRlbGV0ZVBy
aXZhdGVQcm9wZXJ0eShwcm9wZXJ0eU5hbWUpOwogICAgIH0KIAotICAgIHZvaWQgdmlzaXRDaGls
ZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwor
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KKyAgICB2b2lkIHZpc2l0Q2hpbGRyZW4o
VmlzaXRvciYgdmlzaXRvcikKICAgICB7CiAgICAgICAgIEpTUHJpdmF0ZVByb3BlcnR5TWFwKiBw
cm9wZXJ0aWVzID0gbV9wcml2YXRlUHJvcGVydGllcy5nZXQoKTsKICAgICAgICAgaWYgKCFwcm9w
ZXJ0aWVzKQpAQCAtMTAzLDcgKzEwNiw4IEBAIHB1YmxpYzoKICAgICAgICAgICAgIG1fcHJvcGVy
dHlNYXAucmVtb3ZlKHByb3BlcnR5TmFtZS5pbXBsKCkpOwogICAgICAgICB9CiAKLSAgICAgICAg
dm9pZCB2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorICAgICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBWaXNpdG9yPgorICAgICAgICB2b2lkIHZpc2l0Q2hpbGRyZW4oVmlzaXRvciYg
dmlzaXRvcikKICAgICAgICAgewogICAgICAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9sb2Nr
KTsKICAgICAgICAgICAgIGZvciAoYXV0byYgcGFpciA6IG1fcHJvcGVydHlNYXApIHsKQEAgLTIx
NiwxMyArMjIwLDcgQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgQ2FsbERhdGEgZ2V0Q29uc3RydWN0
RGF0YShKU0NlbGwqKTsKICAgICBzdGF0aWMgQ2FsbERhdGEgZ2V0Q2FsbERhdGEoSlNDZWxsKik7
CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0
b3ImIHZpc2l0b3IpCi0gICAgewotICAgICAgICBKU0NhbGxiYWNrT2JqZWN0KiB0aGlzT2JqZWN0
ID0ganNDYXN0PEpTQ2FsbGJhY2tPYmplY3QqPihjZWxsKTsKLSAgICAgICAgQVNTRVJUX0dDX09C
SkVDVF9JTkhFUklUUygoc3RhdGljX2Nhc3Q8UGFyZW50Kj4odGhpc09iamVjdCkpLCBKU0NhbGxi
YWNrT2JqZWN0PFBhcmVudD46OmluZm8oKSk7Ci0gICAgICAgIFBhcmVudDo6dmlzaXRDaGlsZHJl
bih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKLSAgICAgICAgdGhpc09iamVjdC0+bV9jYWxsYmFja09i
amVjdERhdGEtPnZpc2l0Q2hpbGRyZW4odmlzaXRvcik7Ci0gICAgfQorICAgIERFQ0xBUkVfVklT
SVRfQ0hJTERSRU47CiAKICAgICB2b2lkIGluaXQoSlNHbG9iYWxPYmplY3QqKTsKICAKQEAgLTI0
NSw2ICsyNDMsMTYgQEAgcHJpdmF0ZToKICAgICBjb25zdCBDbGFzc0luZm8qIG1fY2xhc3NJbmZv
IHsgbnVsbHB0ciB9OwogfTsKIAordGVtcGxhdGUgPGNsYXNzIFBhcmVudD4KK3RlbXBsYXRlPHR5
cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTQ2FsbGJhY2tPYmplY3Q8UGFyZW50Pjo6dmlzaXRDaGls
ZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIEpTQ2FsbGJh
Y2tPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNDYWxsYmFja09iamVjdCo+KGNlbGwpOwor
ICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoKHN0YXRpY19jYXN0PFBhcmVudCo+KHRoaXNP
YmplY3QpKSwgSlNDYWxsYmFja09iamVjdDxQYXJlbnQ+OjppbmZvKCkpOworICAgIFBhcmVudDo6
dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKKyAgICB0aGlzT2JqZWN0LT5tX2Nh
bGxiYWNrT2JqZWN0RGF0YS0+dmlzaXRDaGlsZHJlbih2aXNpdG9yKTsKK30KKwogfSAvLyBuYW1l
c3BhY2UgSlNDCiAKIC8vIGluY2x1ZGUgdGhlIGFjdHVhbCB0ZW1wbGF0ZSBjbGFzcyBpbXBsZW1l
bnRhdGlvbgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU01hbmFnZWRWYWx1ZS5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTTWFuYWdlZFZhbHVl
Lm1tCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTTWFu
YWdlZFZhbHVlLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMywgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQyLDcgKzQyLDcgQEAKIGNsYXNzIEpT
TWFuYWdlZFZhbHVlSGFuZGxlT3duZXIgZmluYWwgOiBwdWJsaWMgSlNDOjpXZWFrSGFuZGxlT3du
ZXIgewogcHVibGljOgogICAgIHZvaWQgZmluYWxpemUoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3du
Piwgdm9pZCogY29udGV4dCkgZmluYWw7Ci0gICAgYm9vbCBpc1JlYWNoYWJsZUZyb21PcGFxdWVS
b290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0LCBKU0M6OlNsb3RW
aXNpdG9yJiwgY29uc3QgY2hhcioqKSBmaW5hbDsKKyAgICBib29sIGlzUmVhY2hhYmxlRnJvbU9w
YXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6
QWJzdHJhY3RTbG90VmlzaXRvciYsIGNvbnN0IGNoYXIqKikgZmluYWw7CiB9OwogCiBzdGF0aWMg
SlNNYW5hZ2VkVmFsdWVIYW5kbGVPd25lciYgbWFuYWdlZFZhbHVlSGFuZGxlT3duZXIoKQpAQCAt
MTgwLDcgKzE4MCw3IEBAIEBpbnRlcmZhY2UgSlNNYW5hZ2VkVmFsdWUgKFByaXZhdGVNZXRob2QK
IC0gKHZvaWQpZGlzY29ubmVjdFZhbHVlOwogQGVuZAogCi1ib29sIEpTTWFuYWdlZFZhbHVlSGFu
ZGxlT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5r
bm93bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNo
YXIqKiByZWFzb24pCitib29sIEpTTWFuYWdlZFZhbHVlSGFuZGxlT3duZXI6OmlzUmVhY2hhYmxl
RnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQs
IEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikK
IHsKICAgICBpZiAoVU5MSUtFTFkocmVhc29uKSkKICAgICAgICAgKnJlYXNvbiA9ICJKU01hbmFn
ZWRWYWx1ZSBpcyBvcGFxdWUgcm9vdCI7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJ
L0pTTWFya2luZ0NvbnN0cmFpbnRQcml2YXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvQVBJL0pTTWFya2luZ0NvbnN0cmFpbnRQcml2YXRlLmNwcAkocmV2aXNpb24g
MjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU01hcmtpbmdDb25zdHJhaW50
UHJpdmF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDcgKzM2LDcgQEAgbmFtZXNwYWNlIHsK
IEF0b21pYzx1bnNpZ25lZD4gY29uc3RyYWludENvdW50ZXI7CiAKIHN0cnVjdCBNYXJrZXIgOiBK
U01hcmtlciB7Ci0gICAgU2xvdFZpc2l0b3IqIHZpc2l0b3I7CisgICAgQWJzdHJhY3RTbG90Vmlz
aXRvciogdmlzaXRvcjsKIH07CiAKIGJvb2wgaXNNYXJrZWQoSlNNYXJrZXJSZWYgbWFya2VyUmVm
LCBKU09iamVjdFJlZiBvYmplY3RSZWYpCkBAIC00NCw3ICs0NCw3IEBAIGJvb2wgaXNNYXJrZWQo
SlNNYXJrZXJSZWYgbWFya2VyUmVmLCBKU08KICAgICBpZiAoIW9iamVjdFJlZikKICAgICAgICAg
cmV0dXJuIHRydWU7IC8vIE51bGwgaXMgYW4gaW1tb3J0YWwgb2JqZWN0LgogICAgIAotICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxNYXJrZXIqPihtYXJrZXJSZWYpLT52aXNpdG9yLT52bSgpLmhlYXAu
aXNNYXJrZWQodG9KUyhvYmplY3RSZWYpKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8TWFya2Vy
Kj4obWFya2VyUmVmKS0+dmlzaXRvci0+aXNNYXJrZWQodG9KUyhvYmplY3RSZWYpKTsKIH0KIAog
dm9pZCBtYXJrKEpTTWFya2VyUmVmIG1hcmtlclJlZiwgSlNPYmplY3RSZWYgb2JqZWN0UmVmKQpA
QCAtNzMsNyArNzMsNyBAQCB2b2lkIEpTQ29udGV4dEdyb3VwQWRkTWFya2luZ0NvbnN0cmFpbnQo
CiAgICAgYXV0byBjb25zdHJhaW50ID0gbWFrZVVuaXF1ZTxTaW1wbGVNYXJraW5nQ29uc3RyYWlu
dD4oCiAgICAgICAgIHRvQ1N0cmluZygiQW1jIiwgY29uc3RyYWludEluZGV4LCAiKCIsIFJhd1Bv
aW50ZXIoYml0d2lzZV9jYXN0PHZvaWQqPihjb25zdHJhaW50Q2FsbGJhY2spKSwgIikiKSwKICAg
ICAgICAgdG9DU3RyaW5nKCJBUEkgTWFya2luZyBDb25zdHJhaW50ICMiLCBjb25zdHJhaW50SW5k
ZXgsICIgKCIsIFJhd1BvaW50ZXIoYml0d2lzZV9jYXN0PHZvaWQqPihjb25zdHJhaW50Q2FsbGJh
Y2spKSwgIiwgIiwgUmF3UG9pbnRlcih1c2VyRGF0YSksICIpIiksCi0gICAgICAgIFtjb25zdHJh
aW50Q2FsbGJhY2ssIHVzZXJEYXRhXSAoU2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsKKyAgICAgICAg
W2NvbnN0cmFpbnRDYWxsYmFjaywgdXNlckRhdGFdIChBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNp
dG9yKSB7CiAgICAgICAgICAgICBNYXJrZXIgbWFya2VyOwogICAgICAgICAgICAgbWFya2VyLklz
TWFya2VkID0gaXNNYXJrZWQ7CiAgICAgICAgICAgICBtYXJrZXIuTWFyayA9IG1hcms7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmlydHVhbE1hY2hpbmUubW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1ZpcnR1YWxNYWNoaW5lLm1tCShyZXZp
c2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmlydHVhbE1hY2hp
bmUubW0JKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMTUsNyArMzE1LDcgQEAgKyAodm9pZClzZXRDcmFz
aE9uVk1DcmVhdGlvbjooQk9PTClzaG91bAogCiBAZW5kCiAKLXN0YXRpYyB2b2lkIHNjYW5FeHRl
cm5hbE9iamVjdEdyYXBoKEpTQzo6Vk0mIHZtLCBKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yLCB2
b2lkKiByb290LCBib29sIGxvY2tBY3F1aXJlZCkKK3N0YXRpYyB2b2lkIHNjYW5FeHRlcm5hbE9i
amVjdEdyYXBoKEpTQzo6Vk0mIHZtLCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3Is
IHZvaWQqIHJvb3QsIGJvb2wgbG9ja0FjcXVpcmVkKQogewogICAgIEBhdXRvcmVsZWFzZXBvb2wg
ewogICAgICAgICBKU1ZpcnR1YWxNYWNoaW5lICp2aXJ0dWFsTWFjaGluZSA9IFtKU1ZNV3JhcHBl
ckNhY2hlIHdyYXBwZXJGb3JKU0NvbnRleHRHcm91cFJlZjp0b1JlZigmdm0pXTsKQEAgLTM0Nywx
MyArMzQ3LDEzIEBAIHN0YXRpYyB2b2lkIHNjYW5FeHRlcm5hbE9iamVjdEdyYXBoKEpTQzoKICAg
ICB9CiB9CiAKLXZvaWQgc2NhbkV4dGVybmFsT2JqZWN0R3JhcGgoSlNDOjpWTSYgdm0sIEpTQzo6
U2xvdFZpc2l0b3ImIHZpc2l0b3IsIHZvaWQqIHJvb3QpCit2b2lkIHNjYW5FeHRlcm5hbE9iamVj
dEdyYXBoKEpTQzo6Vk0mIHZtLCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIHZv
aWQqIHJvb3QpCiB7CiAgICAgYm9vbCBsb2NrQWNxdWlyZWQgPSBmYWxzZTsKICAgICBzY2FuRXh0
ZXJuYWxPYmplY3RHcmFwaCh2bSwgdmlzaXRvciwgcm9vdCwgbG9ja0FjcXVpcmVkKTsKIH0KIAot
dm9pZCBzY2FuRXh0ZXJuYWxSZW1lbWJlcmVkU2V0KEpTQzo6Vk0mIHZtLCBKU0M6OlNsb3RWaXNp
dG9yJiB2aXNpdG9yKQordm9pZCBzY2FuRXh0ZXJuYWxSZW1lbWJlcmVkU2V0KEpTQzo6Vk0mIHZt
LCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgQGF1dG9yZWxlYXNl
cG9vbCB7CiAgICAgICAgIEpTVmlydHVhbE1hY2hpbmUgKnZpcnR1YWxNYWNoaW5lID0gW0pTVk1X
cmFwcGVyQ2FjaGUgd3JhcHBlckZvckpTQ29udGV4dEdyb3VwUmVmOnRvUmVmKCZ2bSldOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1ZpcnR1YWxNYWNoaW5lSW50ZXJuYWwuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmlydHVhbE1hY2hpbmVJ
bnRlcm5hbC5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJ
L0pTVmlydHVhbE1hY2hpbmVJbnRlcm5hbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMyLDcgKzMy
LDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiBjbGFzcyBWTTsKLWNsYXNzIFNsb3RWaXNpdG9yOwor
Y2xhc3MgQWJzdHJhY3RTbG90VmlzaXRvcjsKIH0KIAogI2lmIGRlZmluZWQoX19PQkpDX18pCkBA
IC01NCw4ICs1NCw4IEBAIEpTQ29udGV4dEdyb3VwUmVmIGdldEdyb3VwRnJvbVZpcnR1YWxNYWMK
IAogI2VuZGlmIC8vIGRlZmluZWQoX19PQkpDX18pCiAKLXZvaWQgc2NhbkV4dGVybmFsT2JqZWN0
R3JhcGgoSlNDOjpWTSYsIEpTQzo6U2xvdFZpc2l0b3ImLCB2b2lkKiByb290KTsKLXZvaWQgc2Nh
bkV4dGVybmFsUmVtZW1iZXJlZFNldChKU0M6OlZNJiwgSlNDOjpTbG90VmlzaXRvciYpOwordm9p
ZCBzY2FuRXh0ZXJuYWxPYmplY3RHcmFwaChKU0M6OlZNJiwgSlNDOjpBYnN0cmFjdFNsb3RWaXNp
dG9yJiwgdm9pZCogcm9vdCk7Cit2b2lkIHNjYW5FeHRlcm5hbFJlbWVtYmVyZWRTZXQoSlNDOjpW
TSYsIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpOwogCiAjZW5kaWYgLy8gSlNDX09CSkNfQVBJ
X0VOQUJMRUQKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9NYXJrZWRKU1ZhbHVl
UmVmQXJyYXkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvTWFy
a2VkSlNWYWx1ZVJlZkFycmF5LmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL0FQSS9NYXJrZWRKU1ZhbHVlUmVmQXJyYXkuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAtMjAyMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ2
LDcgKzQ2LDcgQEAgTWFya2VkSlNWYWx1ZVJlZkFycmF5Ojp+TWFya2VkSlNWYWx1ZVJlZgogICAg
ICAgICByZW1vdmUoKTsKIH0KIAotdm9pZCBNYXJrZWRKU1ZhbHVlUmVmQXJyYXk6OnZpc2l0QWdn
cmVnYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBNYXJrZWRKU1ZhbHVlUmVmQXJyYXk6
OnZpc2l0QWdncmVnYXRlKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNW
YWx1ZVJlZiogYnVmZmVyID0gZGF0YSgpOwogICAgIGZvciAodW5zaWduZWQgaW5kZXggPSAwOyBp
bmRleCA8IG1fc2l6ZTsgKytpbmRleCkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQ
SS9NYXJrZWRKU1ZhbHVlUmVmQXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvQVBJL01hcmtlZEpTVmFsdWVSZWZBcnJheS5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL01hcmtlZEpTVmFsdWVSZWZBcnJheS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAtMjAyMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTYyLDcgKzYyLDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9pbmxpbmVCdWZm
ZXI7CiAgICAgfQogCi0gICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYpOworICAg
IHZvaWQgdmlzaXRBZ2dyZWdhdGUoQWJzdHJhY3RTbG90VmlzaXRvciYpOwogCiBwcml2YXRlOgog
ICAgIHVuc2lnbmVkIG1fc2l6ZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xp
Yi9KU0FQSVdyYXBwZXJHbG9iYWxPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0FQSVdyYXBwZXJHbG9iYWxPYmplY3QuY3BwCShyZXZpc2lv
biAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNBUElXcmFwcGVy
R2xvYmFsT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTksNiArNTksOCBAQCBzdGF0aWMg
SlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElPTihjb25zdHJ1CiBzdGF0aWMgSlNDX0RFQ0xBUkVfQ1VT
VE9NX0dFVFRFUihjYWxsYmFja0dldHRlckpTQVBJV3JhcHBlckdsb2JhbE9iamVjdENhbGxiYWNr
T2JqZWN0KTsKIHN0YXRpYyBKU0NfREVDTEFSRV9DVVNUT01fR0VUVEVSKHN0YXRpY0Z1bmN0aW9u
R2V0dGVySlNBUElXcmFwcGVyR2xvYmFsT2JqZWN0Q2FsbGJhY2tPYmplY3QpOwogCitERUZJTkVf
VklTSVRfQ0hJTERSRU5fV0lUSF9NT0RJRklFUih0ZW1wbGF0ZTw+LCBKU0NhbGxiYWNrT2JqZWN0
PEpTQVBJV3JhcHBlckdsb2JhbE9iamVjdD4pOworCiB0ZW1wbGF0ZSA8PiBjb25zdCBDbGFzc0lu
Zm8gSlNDYWxsYmFja09iamVjdDxKU0FQSVdyYXBwZXJHbG9iYWxPYmplY3Q+OjpzX2luZm8gPSB7
ICJKU0FQSVdyYXBwZXJHbG9iYWxPYmplY3QiLCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBudWxs
cHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTQ2FsbGJhY2tPYmplY3QpIH07CiB0ZW1wbGF0ZTw+
IGNvbnN0IGJvb2wgSlNDYWxsYmFja09iamVjdDxKU0FQSVdyYXBwZXJHbG9iYWxPYmplY3Q+Ojpu
ZWVkc0Rlc3RydWN0aW9uID0gdHJ1ZTsKIApAQCAtMTQ0LDkgKzE0Niw0IEBAIHZvaWQgSlNBUElX
cmFwcGVyR2xvYmFsT2JqZWN0OjpmaW5pc2hDcmUKICAgICBXZWFrU2V0OjphbGxvY2F0ZSh0aGlz
LCBqc0FQSVdyYXBwZXJHbG9iYWxPYmplY3RIYW5kbGVPd25lcigpLCAwKTsgLy8gQmFsYW5jZWQg
aW4gSlNBUElXcmFwcGVyR2xvYmFsT2JqZWN0SGFuZGxlT3duZXI6OmZpbmFsaXplLgogfQogCi12
b2lkIEpTQVBJV3JhcHBlckdsb2JhbE9iamVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGws
IEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCi17Ci0gICAgQmFzZTo6dmlzaXRDaGlsZHJlbihj
ZWxsLCB2aXNpdG9yKTsKLX0KLQogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNBUElXcmFwcGVyR2xvYmFsT2JqZWN0LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQVBJV3JhcHBlckdsb2JhbE9i
amVjdC5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2ds
aWIvSlNBUElXcmFwcGVyR2xvYmFsT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDcgKzM5
LDYgQEAgcHVibGljOgogICAgIHN0YXRpYyB2b2lkIHN1YnNwYWNlRm9yKFZNJikgeyBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9CiAKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7
Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9y
Jik7CiAKICAgICBKU0NHTGliV3JhcHBlck9iamVjdCogd3JhcHBlZE9iamVjdCgpIGNvbnN0IHsg
cmV0dXJuIG1fd3JhcHBlZE9iamVjdDsgfQogICAgIHZvaWQgc2V0V3JhcHBlZE9iamVjdChKU0NH
TGliV3JhcHBlck9iamVjdCogd3JhcHBlZE9iamVjdCkgeyBtX3dyYXBwZWRPYmplY3QgPSB3cmFw
cGVkT2JqZWN0OyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNBUElX
cmFwcGVyT2JqZWN0R0xpYi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L0FQSS9nbGliL0pTQVBJV3JhcHBlck9iamVjdEdMaWIuY3BwCShyZXZpc2lvbiAyNzI4MzApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNBUElXcmFwcGVyT2JqZWN0R0xpYi5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIK
ICNpbmNsdWRlICJKU0FQSVdyYXBwZXJPYmplY3QuaCIKIAorI2luY2x1ZGUgIkFic3RyYWN0U2xv
dFZpc2l0b3IuaCIKICNpbmNsdWRlICJKU0NHTGliV3JhcHBlck9iamVjdC5oIgogI2luY2x1ZGUg
IkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJKU0NhbGxiYWNrT2JqZWN0LmgiCkBAIC0zNiw3ICsz
Nyw3IEBACiBjbGFzcyBKU0FQSVdyYXBwZXJPYmplY3RIYW5kbGVPd25lciBmaW5hbCA6IHB1Ymxp
YyBKU0M6OldlYWtIYW5kbGVPd25lciB7CiBwdWJsaWM6CiAgICAgdm9pZCBmaW5hbGl6ZShKU0M6
OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKikgZmluYWw7Ci0gICAgYm9vbCBpc1JlYWNoYWJs
ZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0
LCBKU0M6OlNsb3RWaXNpdG9yJiwgY29uc3QgY2hhcioqKSBmaW5hbDsKKyAgICBib29sIGlzUmVh
Y2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNv
bnRleHQsIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYsIGNvbnN0IGNoYXIqKikgZmluYWw7CiB9
OwogCiBzdGF0aWMgSlNBUElXcmFwcGVyT2JqZWN0SGFuZGxlT3duZXIqIGpzQVBJV3JhcHBlck9i
amVjdEhhbmRsZU93bmVyKCkKQEAgLTU1LDcgKzU2LDcgQEAgdm9pZCBKU0FQSVdyYXBwZXJPYmpl
Y3RIYW5kbGVPd25lcjo6ZmluYQogICAgIEpTQzo6V2Vha1NldDo6ZGVhbGxvY2F0ZShKU0M6Oldl
YWtJbXBsOjphc1dlYWtJbXBsKGhhbmRsZS5zbG90KCkpKTsKIH0KIAotYm9vbCBKU0FQSVdyYXBw
ZXJPYmplY3RIYW5kbGVPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5k
bGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9y
LCBjb25zdCBjaGFyKiopCitib29sIEpTQVBJV3JhcHBlck9iamVjdEhhbmRsZU93bmVyOjppc1Jl
YWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwg
dm9pZCosIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqKQog
ewogICAgIEpTQzo6SlNBUElXcmFwcGVyT2JqZWN0KiB3cmFwcGVyT2JqZWN0ID0gSlNDOjpqc0Nh
c3Q8SlNDOjpKU0FQSVdyYXBwZXJPYmplY3QqPihoYW5kbGUuZ2V0KCkuYXNDZWxsKCkpOwogICAg
IC8vIFdlIHVzZSB0aGUgSlNHbG9iYWxPYmplY3Qgd2hlbiBwcm9jZXNzaW5nIHdlYWsgaGFuZGxl
cyB0byBwcmV2ZW50IHRoZSBzaXR1YXRpb24gd2hlcmUgdXNpbmcKQEAgLTcyLDYgKzczLDggQEAg
c3RhdGljIEpTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJT04oY29uc3RydQogc3RhdGljIEpTQ19ERUNM
QVJFX0NVU1RPTV9HRVRURVIoY2FsbGJhY2tHZXR0ZXJKU0FQSVdyYXBwZXJPYmplY3RDYWxsYmFj
a09iamVjdCk7CiBzdGF0aWMgSlNDX0RFQ0xBUkVfQ1VTVE9NX0dFVFRFUihzdGF0aWNGdW5jdGlv
bkdldHRlckpTQVBJV3JhcHBlck9iamVjdENhbGxiYWNrT2JqZWN0KTsKIAorREVGSU5FX1ZJU0lU
X0NISUxEUkVOX1dJVEhfTU9ESUZJRVIodGVtcGxhdGU8PiwgSlNDYWxsYmFja09iamVjdDxKU0FQ
SVdyYXBwZXJPYmplY3Q+KTsKKwogdGVtcGxhdGUgPD4gY29uc3QgQ2xhc3NJbmZvIEpTQ2FsbGJh
Y2tPYmplY3Q8SlNBUElXcmFwcGVyT2JqZWN0Pjo6c19pbmZvID0geyAiSlNBUElXcmFwcGVyT2Jq
ZWN0IiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJM
RShKU0NhbGxiYWNrT2JqZWN0KSB9OwogdGVtcGxhdGU8PiBjb25zdCBib29sIEpTQ2FsbGJhY2tP
YmplY3Q8SlNBUElXcmFwcGVyT2JqZWN0Pjo6bmVlZHNEZXN0cnVjdGlvbiA9IHRydWU7CiAKQEAg
LTE1NSw5ICsxNTgsMTIgQEAgdm9pZCBKU0FQSVdyYXBwZXJPYmplY3Q6OnNldFdyYXBwZWRPYmpl
YwogICAgIG1fd3JhcHBlZE9iamVjdCA9IHdyYXBwZWRPYmplY3Q7CiB9CiAKLXZvaWQgSlNBUElX
cmFwcGVyT2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgSlNDOjpTbG90VmlzaXRv
ciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTQVBJV3JhcHBl
ck9iamVjdDo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9y
KQogewogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4oY2VsbCwgdmlzaXRvcik7CiB9CiAKK0RFRklO
RV9WSVNJVF9DSElMRFJFTl9XSVRIX01PRElGSUVSKEpTX0VYUE9SVF9QUklWQVRFLCBKU0FQSVdy
YXBwZXJPYmplY3QpOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpA
QCAtMTE1OCw2ICsxMTU4LDcgQEAKIAkJNjVCODM5MkUxQkFDQUQzNjAwNDRFODI0IC8qIENhY2hl
ZFJlY292ZXJ5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA2NUI4MzkyQzFCQUNBOTJBMDA0NEU4MjQgLyogQ2FjaGVkUmVjb3ZlcnkuaCAqLzsgfTsKIAkJ
NkEzOENGQUExRTMyQjVBQjAwNjAyMDZGIC8qIEFzeW5jU3RhY2tUcmFjZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkEzOENGQTgxRTMyQjU4QjAwNjAy
MDZGIC8qIEFzeW5jU3RhY2tUcmFjZS5oICovOyB9OwogCQk2QUQyQ0I0RDE5QjkxNDAxMDAwNjU3
MTkgLyogRGVidWdnZXJFdmFsRW5hYmxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNkFEMkNCNEMxOUI5MTQwMTAwMDY1NzE5IC8qIERlYnVnZ2VyRXZh
bEVuYWJsZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OworCQk2QkNDRUMwNDI1RDFGQTI3MDAwRjM5MUQgLyogVmVyaWZpZXJTbG90VmlzaXRvcklubGlu
ZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZCQ0NF
QzAzMjVEMUZBMjcwMDBGMzkxRCAvKiBWZXJpZmllclNsb3RWaXNpdG9ySW5saW5lcy5oICovOyB9
OwogCQk3MDExM0Q0QzFBOERCMDkzMDAzODQ4QzQgLyogSXRlcmF0b3JPcGVyYXRpb25zLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MDExM0Q0QTFBOERC
MDkzMDAzODQ4QzQgLyogSXRlcmF0b3JPcGVyYXRpb25zLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzAxM0NBOEMxQjQ5MUE5NDAwQ0FFNjEzIC8q
IEpTTWljcm90YXNrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA3MDEzQ0E4QTFCNDkxQTk0MDBDQUU2MTMgLyogSlNNaWNyb3Rhc2suaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3MDVCNDFBQzFBNkU1MDFF
MDA3MTY3NTcgLyogU3ltYm9sLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA3MDVCNDFBNDFBNkU1MDFFMDA3MTY3NTcgLyogU3ltYm9sLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTE5MTYsNiArMTkxNyw3
IEBACiAJCUUzRkY3NTMzMUQ5Q0VBMTgwMEM3RTE2RCAvKiBET01KSVRHZXR0ZXJTZXR0ZXIuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUzRkY3NTJGMUQ5
Q0VBMTIwMEM3RTE2RCAvKiBET01KSVRHZXR0ZXJTZXR0ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlFNDlEQzE2QzEyRUYyOTRFMDAxODRBMUYg
LyogU291cmNlUHJvdmlkZXJDYWNoZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRTQ5REMxNTExMkVGMjcyMjAwMTg0QTFGIC8qIFNvdXJjZVByb3ZpZGVy
Q2FjaGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQlFNDlEQzE2RDEyRUYyOTUzMDAxODRBMUYgLyogU291cmNlUHJvdmlkZXJDYWNoZUl0ZW0uaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0OURDMTQ5MTJF
RjI2MUEwMDE4NEExRiAvKiBTb3VyY2VQcm92aWRlckNhY2hlSXRlbS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUZFMDQxNTUzMjUyRUMwNzMwMDkx
RUI1RCAvKiBTbG90VmlzaXRvck1hY3Jvcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRkUwNDE1NTIyNTJFQzA3MzAwOTFFQjVEIC8qIFNsb3RWaXNpdG9y
TWFjcm9zLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJRkUwNUZBRkQxRkU0Q0VEQTAwMDkzMjMwIC8qIERlcHJlY2F0ZWRJbnNwZWN0b3JWYWx1ZXMu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTkyRDZB
MTExRkJENDkxRDAwMDI0NUY0IC8qIERlcHJlY2F0ZWRJbnNwZWN0b3JWYWx1ZXMuY3BwICovOyB9
OwogCQlGRTA4NkJDQTIxMjNERUZCMDAzRjI5MjkgLyogRW50cnlGcmFtZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUwODZCQzkyMTIzREVGQTAwM0Yy
OTI5IC8qIEVudHJ5RnJhbWUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQlGRTBENEEwNjFBQjhERDBBMDAyRjU0QkYgLyogRXhlY3V0aW9uVGltZUxp
bWl0VGVzdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBGRTBENEEwNDFBQjhERDBBMDAyRjU0QkYgLyogRXhlY3V0aW9uVGltZUxpbWl0VGVzdC5jcHAg
Ki87IH07CkBAIC0xOTM4LDYgKzE5NDAsNyBAQAogCQlGRTFFMkMzRjIyNDBERDU4MDBGNkI3Mjkg
LyogTWFjcm9Bc3NlbWJsZXJBUk02NEUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEZFMUUyQzNFMjI0MEQzMEIwMEY2QjcyOSAvKiBNYWNyb0Fzc2VtYmxl
ckFSTTY0RS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCUZFMUUyQzQwMjI0MERENjIwMEY2QjcyOSAvKiBBUk02NEVBc3NlbWJsZXIuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFMUUyQzNEMjI0MEQyRjYw
MEY2QjcyOSAvKiBBUk02NEVBc3NlbWJsZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQlGRTIwQ0U5RTE1RjA0QTk1MDBERjM0MzAgLyogTExJbnRD
TG9vcC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUy
MENFOUMxNUYwNEE5NTAwREYzNDMwIC8qIExMSW50Q0xvb3AuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlGRTI4N0QwMjI1MkZCMkU4MDBENzIzRjkg
LyogVmVyaWZpZXJTbG90VmlzaXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRkUyODdEMDEyNTJGQjJFODAwRDcyM0Y5IC8qIFZlcmlmaWVyU2xvdFZp
c2l0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQlGRTJBODc2MDFGMDIzODE2MDBFQjMxQjIgLyogTWluaW11bVJlc2VydmVkWm9uZVNpemUuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFMkE4NzVGMUYw
MjM4MTYwMEVCMzFCMiAvKiBNaW5pbXVtUmVzZXJ2ZWRab25lU2l6ZS5oICovOyB9OwogCQlGRTMw
MjJEMzFFM0Q3M0E1MDBCQUM0OTMgLyogU2lnaWxsQ3Jhc2hBbmFseXplci5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUzMDIyRDExRTNENzM5NjAwQkFD
NDkzIC8qIFNpZ2lsbENyYXNoQW5hbHl6ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQlGRTMwMjJENzFFNDI4NTczMDBCQUM0OTMgLyogVk1JbnNw
ZWN0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZF
MzAyMkQ1MUU0Mjg1NjcwMEJBQzQ5MyAvKiBWTUluc3BlY3Rvci5oICovOyB9OwpAQCAtMTk3Niw2
ICsxOTc5LDggQEAKIAkJRkU4MEMxOTcxRDc3NUNERDAwODUxMEMwIC8qIENhdGNoU2NvcGUuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFODBDMTk2MUQ3
NzVCMjcwMDg1MTBDMCAvKiBDYXRjaFNjb3BlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRkU4REU1NEIyM0FDMURBRDAwNUM5MTQyIC8qIENhY2hl
YWJsZUlkZW50aWZpZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEZFOERFNTRBMjNBQzFEQUQwMDVDOTE0MiAvKiBDYWNoZWFibGVJZGVudGlmaWVyLmgg
Ki87IH07CiAJCUZFOERFNTREMjNBQzFFODYwMDVDOTE0MiAvKiBDYWNoZWFibGVJZGVudGlmaWVy
SW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RkU4REU1NEMyM0FDMUU4NjAwNUM5MTQyIC8qIENhY2hlYWJsZUlkZW50aWZpZXJJbmxpbmVzLmgg
Ki87IH07CisJCUZFOTEyQjRGMjUzMTE5MzMwMEZBQkRERiAvKiBBYnN0cmFjdFNsb3RWaXNpdG9y
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTkxMkI0
RTI1MzExOTMzMDBGQUJEREYgLyogQWJzdHJhY3RTbG90VmlzaXRvci5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUZFOTEyQjUxMjUzMTFBRDEwMEZB
QkRERiAvKiBBYnN0cmFjdFNsb3RWaXNpdG9ySW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkU5MTJCNTAyNTMxMUFEMTAwRkFCRERGIC8qIEFi
c3RyYWN0U2xvdFZpc2l0b3JJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJRkU5OUIyNDkxQzI0QzNEMzAwQzgyMTU5IC8qIEpJVE5lZ0dl
bmVyYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RkU5OUIyNDgxQzI0QjZEMzAwQzgyMTU5IC8qIEpJVE5lZ0dlbmVyYXRvci5oICovOyB9OwogCQlG
RUEwODYyMDE4MkI3QTA0MDBGNkQ4NTEgLyogQnJlYWtwb2ludC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkVBMDg2MUUxODJCN0EwNDAwRjZEODUxIC8q
IEJyZWFrcG9pbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQlGRUEwODYyMTE4MkI3QTA0MDBGNkQ4NTEgLyogRGVidWdnZXJQcmltaXRpdmVzLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRUEwODYxRjE4
MkI3QTA0MDBGNkQ4NTEgLyogRGVidWdnZXJQcmltaXRpdmVzLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTM5ODgsNiArMzk5Myw3IEBACiAJCTZB
MzhDRkE4MUUzMkI1OEIwMDYwMjA2RiAvKiBBc3luY1N0YWNrVHJhY2UuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gQXN5bmNTdGFja1RyYWNlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTZBRDJDQjRDMTlCOTE0MDEwMDA2NTcxOSAvKiBEZWJ1Z2dlckV2YWxFbmFi
bGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERlYnVnZ2VyRXZhbEVuYWJs
ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkJBOTNDOTU5MDQ4NEM1QkFEOTMx
NkVBIC8qIEpTU2NyaXB0RmV0Y2hlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBKU1NjcmlwdEZldGNoZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNkJDQ0VD
MDMyNUQxRkEyNzAwMEYzOTFEIC8qIFZlcmlmaWVyU2xvdFZpc2l0b3JJbmxpbmVzLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZlcmlmaWVyU2xvdFZpc2l0b3JJbmxpbmVzLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcwMTEzRDQ5MUE4REIwOTMwMDM4NDhDNCAv
KiBJdGVyYXRvck9wZXJhdGlvbnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gSXRlcmF0b3JPcGVyYXRpb25zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNzAxMTNENEExQThEQjA5MzAwMzg0OEM0IC8qIEl0ZXJhdG9yT3BlcmF0aW9ucy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJdGVyYXRvck9wZXJhdGlvbnMuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzAxM0NBODkxQjQ5MUE5NDAwQ0FFNjEzIC8qIEpTTWlj
cm90YXNrLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTTWljcm90
YXNrLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTUyMjEsNiArNTIyNyw3IEBA
CiAJCUY2OTJBODg3MDI1NTU5N0QwMUZGNjBGNyAvKiBKU0NKU1ZhbHVlLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTQ0pTVmFsdWUu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IH07CiAJCUY3MzkyNjkx
OERDNjQzMzBBRkNERjBENyAvKiBKU1NvdXJjZUNvZGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gSlNTb3VyY2VDb2RlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJRkUwMDI2MjIyM0YzQUYzMzAwM0EzNThGIC8qIFdlYkFzc2VtYmx5LmFzbSAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
YXNtLmFzbTsgbmFtZSA9IFdlYkFzc2VtYmx5LmFzbTsgcGF0aCA9IGxsaW50L1dlYkFzc2VtYmx5
LmFzbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkUwNDE1NTIyNTJFQzA3MzAwOTFF
QjVEIC8qIFNsb3RWaXNpdG9yTWFjcm9zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFNsb3RWaXNpdG9yTWFjcm9zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZF
MDg2QkM5MjEyM0RFRkEwMDNGMjkyOSAvKiBFbnRyeUZyYW1lLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEVudHJ5RnJhbWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJRkUwRDRBMDQxQUI4REQwQTAwMkY1NEJGIC8qIEV4ZWN1dGlvblRpbWVMaW1pdFRlc3QuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gRXhlY3V0aW9uVGltZUxpbWl0
VGVzdC5jcHA7IHBhdGggPSBBUEkvdGVzdHMvRXhlY3V0aW9uVGltZUxpbWl0VGVzdC5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFMEQ0QTA1MUFCOEREMEEwMDJGNTRCRiAvKiBF
eGVjdXRpb25UaW1lTGltaXRUZXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IEV4ZWN1dGlvblRpbWVMaW1pdFRlc3QuaDsgcGF0aCA9IEFQSS90ZXN0cy9FeGVjdXRpb25UaW1l
TGltaXRUZXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01MjU1LDcgKzUyNjIs
OSBAQAogCQlGRTFFMkMzRTIyNDBEMzBCMDBGNkI3MjkgLyogTWFjcm9Bc3NlbWJsZXJBUk02NEUu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWFjcm9Bc3NlbWJsZXJBUk02NEUu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkUyMENFOUIxNUYwNEE5NTAwREYzNDMw
IC8qIExMSW50Q0xvb3AuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0g
TExJbnRDTG9vcC5jcHA7IHBhdGggPSBsbGludC9MTEludENMb29wLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJRkUyMENFOUMxNUYwNEE5NTAwREYzNDMwIC8qIExMSW50Q0xvb3Au
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gTExJbnRDTG9vcC5oOyBwYXRoID0g
bGxpbnQvTExJbnRDTG9vcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRTI4N0Qw
MTI1MkZCMkU4MDBENzIzRjkgLyogVmVyaWZpZXJTbG90VmlzaXRvci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBWZXJpZmllclNsb3RWaXNpdG9yLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUZFMkE4NzVGMUYwMjM4MTYwMEVCMzFCMiAvKiBNaW5pbXVtUmVzZXJ2
ZWRab25lU2l6ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNaW5pbXVtUmVzZXJ2ZWRab25lU2l6ZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRTJCRDY2RTI1QzBEQzgyMDA5OTlEM0IgLyog
VmVyaWZpZXJTbG90VmlzaXRvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBWZXJpZmllclNsb3RWaXNpdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJRkUyRTZBN0ExRDZFQTVGRTAwNjBGODk2IC8qIFRocm93U2NvcGUuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVGhyb3dTY29wZS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUZFMzAyMkQwMUUzRDczOTYwMEJBQzQ5MyAvKiBTaWdpbGxDcmFzaEFu
YWx5emVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNpZ2lsbENy
YXNoQW5hbHl6ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTMwMjJEMTFF
M0Q3Mzk2MDBCQUM0OTMgLyogU2lnaWxsQ3Jhc2hBbmFseXplci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBTaWdpbGxDcmFzaEFuYWx5emVyLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC01MzI5LDYgKzUzMzgsOCBAQAogCQlGRThERTU0QzIzQUMxRTg2MDA1Qzkx
NDIgLyogQ2FjaGVhYmxlSWRlbnRpZmllcklubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gQ2FjaGVhYmxlSWRlbnRpZmllcklubGluZXMuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJRkU4REU1NEUyM0FDM0E4RTAwNUM5MTQyIC8qIENhY2hlYWJsZUlkZW50
aWZpZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ2FjaGVhYmxlSWRlbnRpZmllci5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFOTBCQjNBMUI3Q0Y2NEUwMDZCM0YwMyAvKiBW
TUlubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVk1JbmxpbmVzLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZFOTEyQjRFMjUzMTE5MzMwMEZBQkRERiAv
KiBBYnN0cmFjdFNsb3RWaXNpdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEFic3RyYWN0U2xvdFZpc2l0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkU5
MTJCNTAyNTMxMUFEMTAwRkFCRERGIC8qIEFic3RyYWN0U2xvdFZpc2l0b3JJbmxpbmVzLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFic3RyYWN0U2xvdFZpc2l0b3JJbmxpbmVz
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFOThCNUI2MUJCOUFFMTEwMDczRTdB
NiAvKiBKSVRTdWJHZW5lcmF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
SklUU3ViR2VuZXJhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFOTlCMjQ3
MUMyNEI2RDMwMEM4MjE1OSAvKiBKSVROZWdHZW5lcmF0b3IuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gSklUTmVnR2VuZXJhdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJRkU5OUIyNDgxQzI0QjZEMzAwQzgyMTU5IC8qIEpJVE5lZ0dlbmVyYXRv
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKSVROZWdHZW5lcmF0b3IuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTYyNzgsNiArNjI4OSw4IEBACiAJCTE0MkUz
MTJBMTM0RkYwQTYwMEFGQURCNSAvKiBoZWFwICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJ
CQljaGlsZHJlbiA9ICgKKwkJCQlGRTkxMkI0RTI1MzExOTMzMDBGQUJEREYgLyogQWJzdHJhY3RT
bG90VmlzaXRvci5oICovLAorCQkJCUZFOTEyQjUwMjUzMTFBRDEwMEZBQkRERiAvKiBBYnN0cmFj
dFNsb3RWaXNpdG9ySW5saW5lcy5oICovLAogCQkJCTBGRUMzQzUwMUYzM0E0MTYwMEY1OUI2QyAv
KiBBbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmNwcCAqLywKIAkJCQkwRkVDM0M1MTFGMzNBNDE2MDBG
NTlCNkMgLyogQWxpZ25lZE1lbW9yeUFsbG9jYXRvci5oICovLAogCQkJCTBGQTc2MjBBMURCOTU5
RjYwMEI3QTJGRCAvKiBBbGxvY2F0aW5nU2NvcGUuaCAqLywKQEAgLTY0MzUsNiArNjQ0OCw3IEBA
CiAJCQkJQzIyNTQ5NDIxNUY3REJBQTAwNjVFODk4IC8qIFNsb3RWaXNpdG9yLmNwcCAqLywKIAkJ
CQkxNEJBNzhGMDEzQUFCODhGMDA1QjdDMkMgLyogU2xvdFZpc2l0b3IuaCAqLywKIAkJCQkwRkNC
NDA4NTE1QzBBM0MzMDA0ODkzMkIgLyogU2xvdFZpc2l0b3JJbmxpbmVzLmggKi8sCisJCQkJRkUw
NDE1NTIyNTJFQzA3MzAwOTFFQjVEIC8qIFNsb3RWaXNpdG9yTWFjcm9zLmggKi8sCiAJCQkJMEZE
RTg3RkExREZFNkU1MDAwNjRDMzkwIC8qIFNwYWNlVGltZU11dGF0b3JTY2hlZHVsZXIuY3BwICov
LAogCQkJCTBGREU4N0ZCMURGRTZFNTAwMDY0QzM5MCAvKiBTcGFjZVRpbWVNdXRhdG9yU2NoZWR1
bGVyLmggKi8sCiAJCQkJMEY0RjgyODkxRTMxQjk3MTAwNzUxODRDIC8qIFN0b2NoYXN0aWNTcGFj
ZVRpbWVNdXRhdG9yU2NoZWR1bGVyLmNwcCAqLywKQEAgLTY0NTIsNiArNjQ2Niw5IEBACiAJCQkJ
MEYxRkIzOEExRTE3M0E2MjAwQTlCRTUwIC8qIFN5bmNocm9ub3VzU3RvcFRoZVdvcmxkTXV0YXRv
clNjaGVkdWxlci5jcHAgKi8sCiAJCQkJMEYxRkIzOEIxRTE3M0E2MjAwQTlCRTUwIC8qIFN5bmNo
cm9ub3VzU3RvcFRoZVdvcmxkTXV0YXRvclNjaGVkdWxlci5oICovLAogCQkJCTE0MTQ0OENDMTNB
MTc4MzcwMEY1QkExQSAvKiBUaW55Qmxvb21GaWx0ZXIuaCAqLywKKwkJCQlGRTJCRDY2RTI1QzBE
QzgyMDA5OTlEM0IgLyogVmVyaWZpZXJTbG90VmlzaXRvci5jcHAgKi8sCisJCQkJRkUyODdEMDEy
NTJGQjJFODAwRDcyM0Y5IC8qIFZlcmlmaWVyU2xvdFZpc2l0b3IuaCAqLywKKwkJCQk2QkNDRUMw
MzI1RDFGQTI3MDAwRjM5MUQgLyogVmVyaWZpZXJTbG90VmlzaXRvcklubGluZXMuaCAqLywKIAkJ
CQkwRjREOEM3MjFGQzdBOTczMDAxRDMyQUMgLyogVmlzaXRDb3VudGVyLmggKi8sCiAJCQkJMEY5
NTJBOUYxREY3ODYwNzAwRTA2RkJEIC8qIFZpc2l0UmFjZUtleS5jcHAgKi8sCiAJCQkJMEY5NTJB
QTAxREY3ODYwNzAwRTA2RkJEIC8qIFZpc2l0UmFjZUtleS5oICovLApAQCAtOTI5Myw2ICs5MzEw
LDcgQEAKIAkJCQkxNDdCODNBQzBFNkRCOEM5MDA0Nzc1QTQgLyogQmF0Y2hlZFRyYW5zaXRpb25P
cHRpbWl6ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUUzNUU4OUZEMjVDNTBGODcwMDcxRUUxRSAv
KiBCaWdJbnQ2NEFycmF5LmggaW4gSGVhZGVycyAqLywKIAkJCQk4Njk3NkU1RjFGQTNFOEJDMDBF
N0M0RTEgLyogQmlnSW50Q29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJCUZFMDQxNTUz
MjUyRUMwNzMwMDkxRUI1RCAvKiBTbG90VmlzaXRvck1hY3Jvcy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJODY2NzM5RDIxM0JGREU3MTAwMjNEODdDIC8qIEJpZ0ludGVnZXIuaCBpbiBIZWFkZXJzICov
LAogCQkJCTg2MTgxNjc3MUZCNzkyNDIwMEVDQzRFQyAvKiBCaWdJbnRPYmplY3QuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTg2OTc2RTVFMUZBM0U4QjYwMEU3QzRFMSAvKiBCaWdJbnRQcm90b3R5cGUu
aCBpbiBIZWFkZXJzICovLApAQCAtOTU3NCw2ICs5NTkyLDcgQEAKIAkJCQkwRkQ4MkU1NzE0MURB
RjEwMDAxNzlDOTQgLyogREZHT1NSRW50cnkuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRDhBMzI2
MTdENTFGNTcwMENBMkM0MCAvKiBERkdPU1JFbnRyeXBvaW50Q3JlYXRpb25QaGFzZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEZDMDk3NkExNDY4QTZGNzAwQ0YyNDQyIC8qIERGR09TUkV4aXQuaCBp
biBIZWFkZXJzICovLAorCQkJCUZFOTEyQjRGMjUzMTE5MzMwMEZBQkRERiAvKiBBYnN0cmFjdFNs
b3RWaXNpdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjIzNUJFQzE3MTc4RTczMDA2OTBDN0Yg
LyogREZHT1NSRXhpdEJhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRkI5MjFDMTZEMDJGMTEw
MDU1QTVEQiAvKiBERkdPU1JFeGl0Q29tcGlsYXRpb25JbmZvLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRjcwMjVBQTE3MTRCMEZDMDAzODJDMEUgLyogREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmgg
aW4gSGVhZGVycyAqLywKQEAgLTk4NTksNiArOTg3OCw3IEBACiAJCQkJQTUxM0U1QkUxODVCRkFD
QzAwN0U5NUFEIC8qIEluamVjdGVkU2NyaXB0SG9zdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTUx
M0U1Q0IxODVGOTYyNDAwN0U5NUFEIC8qIEluamVjdGVkU2NyaXB0TWFuYWdlci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQTU4NDBFMjExODdCN0I4NjAwODQzQjEwIC8qIEluamVjdGVkU2NyaXB0TW9k
dWxlLmggaW4gSGVhZGVycyAqLywKKwkJCQlGRTI4N0QwMjI1MkZCMkU4MDBENzIzRjkgLyogVmVy
aWZpZXJTbG90VmlzaXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTUxM0U1QzcxODVGOTQ0NjAw
N0U5NUFEIC8qIEluamVjdGVkU2NyaXB0U291cmNlLmggaW4gSGVhZGVycyAqLywKIAkJCQk5OTU5
RTkzMjFCRDE4Mjc5MDAxQUE0MTMgLyogaW5saW5lLWFuZC1taW5pZnktc3R5bGVzaGVldHMtYW5k
LXNjcmlwdHMucHkgaW4gSGVhZGVycyAqLywKIAkJCQk3OTA1QkI2OTFEMTIwNTBFMDAxOUZFNTcg
LyogSW5saW5lQWNjZXNzLmggaW4gSGVhZGVycyAqLywKQEAgLTEwMDM0LDYgKzEwMDU0LDcgQEAK
IAkJCQlBNThDMDI0MjE4RTRBNDFBMDAwMzJCQzUgLyogSlNDb250ZXh0UHJpdmF0ZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQkMxOEM0MUUwRTE2RjVDRDAwQjM0NDYwIC8qIEpTQ29udGV4dFJlZi5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQTVFQTcwRUUxOUY1QjVDNDAwOThGNUVDIC8qIEpTQ29udGV4
dFJlZkluc3BlY3RvclN1cHBvcnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTZCQ0NFQzA0MjVEMUZB
MjcwMDBGMzkxRCAvKiBWZXJpZmllclNsb3RWaXNpdG9ySW5saW5lcy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQTVEMkU2NjUxOTVFMTc0MDAwQTUxOEU3IC8qIEpTQ29udGV4dFJlZkludGVybmFsLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkxNDhDRDFEODEwOENGOTAyMDA4MTYzQzYgLyogSlNDb250ZXh0
UmVmUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkU3NDk3RTYyMDkwMDFCMTAwMDM1NjVC
IC8qIEpTQ1B0clRhZy5oIGluIEhlYWRlcnMgKi8sCkBAIC0xMDE2NCw2ICsxMDE4NSw3IEBACiAJ
CQkJNzk1QUM2MTgyMEEyMzU1RTAwNTJDNzZDIC8qIEpTVmlydHVhbE1hY2hpbmVQcml2YXRlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlBN0NBM0FFODE3REE0MUFFMDA2NTM4QUYgLyogSlNXZWFrTWFw
LmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzQ4MkU5MzExNkE3Q0FEMDAzQjA3MTIgLyogSlNXZWFr
T2JqZWN0TWFwUmVmSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAorCQkJCUZFOTEyQjUxMjUzMTFB
RDEwMEZBQkRERiAvKiBBYnN0cmFjdFNsb3RWaXNpdG9ySW5saW5lcy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQTc0ODJCOTMxMTY3MTE0NzAwM0IwNzEyIC8qIEpTV2Vha09iamVjdE1hcFJlZlByaXZh
dGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTUzOUJGQkIwMjJBRDNDREMwMDIzRjRDMCAvKiBKU1dl
YWtPYmplY3RSZWYuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMEIyODZCMUVCOEU2Q0YwMDBFQjVE
MiAvKiBKU1dlYWtQcml2YXRlLmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9TY3JpcHRzL3drYnVpbHRpbnMvYnVpbHRpbnNfZ2VuZXJhdGVfaW50ZXJuYWxzX3dy
YXBwZXJfaGVhZGVyLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3Jp
cHRzL3drYnVpbHRpbnMvYnVpbHRpbnNfZ2VuZXJhdGVfaW50ZXJuYWxzX3dyYXBwZXJfaGVhZGVy
LnB5CShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy93
a2J1aWx0aW5zL2J1aWx0aW5zX2dlbmVyYXRlX2ludGVybmFsc193cmFwcGVyX2hlYWRlci5weQko
d29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKICMhL3Vzci9iaW4vZW52IHB5dGhvbgogIwot
IyBDb3B5cmlnaHQgKGMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyBD
b3B5cmlnaHQgKGMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAj
CiAjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTkzLDcgKzkzLDcgQEAgY2xhc3MgQnVpbHRp
bnNJbnRlcm5hbHNXcmFwcGVySGVhZGVyR2VuZQogCiAgICAgZGVmIGdlbmVyYXRlX21ldGhvZHMo
c2VsZik6CiAgICAgICAgIHJldHVybiAiIiIKLSAgICB2b2lkIHZpc2l0KEpTQzo6U2xvdFZpc2l0
b3ImKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIHZpc2l0KFZpc2l0b3Im
KTsKICAgICB2b2lkIGluaXRpYWxpemUoSlNET01HbG9iYWxPYmplY3QmKTsKICIiIgogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy93a2J1aWx0aW5zL2J1aWx0aW5zX2dlbmVy
YXRlX2ludGVybmFsc193cmFwcGVyX2ltcGxlbWVudGF0aW9uLnB5Cj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL3drYnVpbHRpbnMvYnVpbHRpbnNfZ2VuZXJhdGVf
aW50ZXJuYWxzX3dyYXBwZXJfaW1wbGVtZW50YXRpb24ucHkJKHJldmlzaW9uIDI3MjgzMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL3drYnVpbHRpbnMvYnVpbHRpbnNfZ2VuZXJh
dGVfaW50ZXJuYWxzX3dyYXBwZXJfaW1wbGVtZW50YXRpb24ucHkJKHdvcmtpbmcgY29weSkKQEAg
LTEsNiArMSw2IEBACiAjIS91c3IvYmluL2VudiBweXRob24KICMKLSMgQ29weXJpZ2h0IChjKSAy
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgQ29weXJpZ2h0IChjKSAyMDE2
LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogIwogIyBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICMg
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0xMjAsMTMgKzEyMCwxNiBAQCBjbGFzcyBCdWlsdGluc0ludGVybmFsc1dy
YXBwZXJJbXBsZW1lbnRhCiAgICAgICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMpCiAKICAgICBk
ZWYgZ2VuZXJhdGVfdmlzaXRfbWV0aG9kKHNlbGYpOgotICAgICAgICBsaW5lcyA9IFsidm9pZCBK
U0J1aWx0aW5JbnRlcm5hbEZ1bmN0aW9uczo6dmlzaXQoSlNDOjpTbG90VmlzaXRvciYgdmlzaXRv
cikiLAorICAgICAgICBsaW5lcyA9IFsidGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4iLAorICAg
ICAgICAgICAgICAgICAidm9pZCBKU0J1aWx0aW5JbnRlcm5hbEZ1bmN0aW9uczo6dmlzaXQoVmlz
aXRvciYgdmlzaXRvcikiLAogICAgICAgICAgICAgICAgICAieyJdCiAgICAgICAgIGZvciBvYmpl
Y3QgaW4gc2VsZi5pbnRlcm5hbHM6CiAgICAgICAgICAgICB2aXNpdCA9ICIgICAgJXMudmlzaXQo
dmlzaXRvcik7IiAlIHNlbGYubWVtYmVyX25hbWUob2JqZWN0KQogICAgICAgICAgICAgbGluZXMu
YXBwZW5kKEJ1aWx0aW5zR2VuZXJhdG9yLndyYXBfd2l0aF9ndWFyZChvYmplY3QuYW5ub3RhdGlv
bnMuZ2V0KCdjb25kaXRpb25hbCcpLCB2aXNpdCkpCiAgICAgICAgIGxpbmVzLmFwcGVuZCgiICAg
IFVOVVNFRF9QQVJBTSh2aXNpdG9yKTsiKQogICAgICAgICBsaW5lcy5hcHBlbmQoIn1cbiIpCisg
ICAgICAgIGxpbmVzLmFwcGVuZCgidGVtcGxhdGUgdm9pZCBKU0J1aWx0aW5JbnRlcm5hbEZ1bmN0
aW9uczo6dmlzaXQoQWJzdHJhY3RTbG90VmlzaXRvciYpOyIpCisgICAgICAgIGxpbmVzLmFwcGVu
ZCgidGVtcGxhdGUgdm9pZCBKU0J1aWx0aW5JbnRlcm5hbEZ1bmN0aW9uczo6dmlzaXQoU2xvdFZp
c2l0b3ImKTtcbiIpCiAgICAgICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMpCiAKICAgICBkZWYg
X2dlbmVyYXRlX2luaXRpYWxpemVfc3RhdGljX2dsb2JhbHMoc2VsZik6CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvU2NyaXB0cy93a2J1aWx0aW5zL2J1aWx0aW5zX3RlbXBsYXRlcy5weQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy93a2J1aWx0aW5zL2J1
aWx0aW5zX3RlbXBsYXRlcy5weQkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL1NjcmlwdHMvd2tidWlsdGlucy9idWlsdGluc190ZW1wbGF0ZXMucHkJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNiArMSw2IEBACiAjIS91c3IvYmluL2VudiBweXRob24KICMKLSMgQ29weXJp
Z2h0IChjKSAyMDE0LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyBDb3B5
cmlnaHQgKGMpIDIwMTQtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAjIENv
cHlyaWdodCAoQykgMjAxNSBDYW5vbiBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAjCiAjIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dApAQCAtMTg4LDcgKzE4OCw3IEBAIHB1YmxpYzoKICAgICBleHBsaWNpdCAke29iamVj
dE5hbWV9QnVpbHRpbkZ1bmN0aW9ucyhKU0M6OlZNJiB2bSkgOiBtX3ZtKHZtKSB7IH0KIAogICAg
IHZvaWQgaW5pdChKU0M6OkpTR2xvYmFsT2JqZWN0Jik7Ci0gICAgdm9pZCB2aXNpdChKU0M6OlNs
b3RWaXNpdG9yJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCB2aXNpdChW
aXNpdG9yJik7CiAKIHB1YmxpYzoKICAgICBKU0M6OlZNJiBtX3ZtOwpAQCAtMjA3LDEwICsyMDcs
MTUgQEAgaW5saW5lIHZvaWQgJHtvYmplY3ROYW1lfUJ1aWx0aW5GdW5jdGlvbgogI3VuZGVmIEVY
UE9SVF9GVU5DVElPTgogfQogCi1pbmxpbmUgdm9pZCAke29iamVjdE5hbWV9QnVpbHRpbkZ1bmN0
aW9uczo6dmlzaXQoSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1l
IFZpc2l0b3I+CitpbmxpbmUgdm9pZCAke29iamVjdE5hbWV9QnVpbHRpbkZ1bmN0aW9uczo6dmlz
aXQoVmlzaXRvciYgdmlzaXRvcikKIHsKICNkZWZpbmUgVklTSVRfRlVOQ1RJT04obmFtZSkgdmlz
aXRvci5hcHBlbmQobV8jI25hbWUjI0Z1bmN0aW9uKTsKICAgICAke21hY3JvUHJlZml4fV9GT1JF
QUNIXyR7b2JqZWN0TWFjcm99X0JVSUxUSU5fRlVOQ1RJT05fTkFNRShWSVNJVF9GVU5DVElPTikK
ICN1bmRlZiBWSVNJVF9GVU5DVElPTgogfQorCit0ZW1wbGF0ZSB2b2lkICR7b2JqZWN0TmFtZX1C
dWlsdGluRnVuY3Rpb25zOjp2aXNpdChKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBs
YXRlIHZvaWQgJHtvYmplY3ROYW1lfUJ1aWx0aW5GdW5jdGlvbnM6OnZpc2l0KEpTQzo6U2xvdFZp
c2l0b3ImKTsKKwogIiIiKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Fj
Y2Vzc0Nhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9BY2Nlc3NDYXNlLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNzU3LDcgKzc1
Nyw3IEBAIGJvb2wgQWNjZXNzQ2FzZTo6dmlzaXRXZWFrKFZNJiB2bSkgY29uc3QKICAgICByZXR1
cm4gaXNWYWxpZDsKIH0KIAotYm9vbCBBY2Nlc3NDYXNlOjpwcm9wYWdhdGVUcmFuc2l0aW9ucyhT
bG90VmlzaXRvciYgdmlzaXRvcikgY29uc3QKK2Jvb2wgQWNjZXNzQ2FzZTo6cHJvcGFnYXRlVHJh
bnNpdGlvbnMoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikgY29uc3QKIHsKICAgICBib29s
IHJlc3VsdCA9IHRydWU7CiAKQEAgLTc3Miw3ICs3NzIsNyBAQCBib29sIEFjY2Vzc0Nhc2U6OnBy
b3BhZ2F0ZVRyYW5zaXRpb25zKFNsCiAgICAgc3dpdGNoIChtX3R5cGUpIHsKICAgICBjYXNlIFRy
YW5zaXRpb246CiAgICAgY2FzZSBEZWxldGU6Ci0gICAgICAgIGlmICh2aXNpdG9yLnZtKCkuaGVh
cC5pc01hcmtlZChtX3N0cnVjdHVyZS0+cHJldmlvdXNJRCgpKSkKKyAgICAgICAgaWYgKHZpc2l0
b3IuaXNNYXJrZWQobV9zdHJ1Y3R1cmUtPnByZXZpb3VzSUQoKSkpCiAgICAgICAgICAgICB2aXNp
dG9yLmFwcGVuZFVuYmFycmllcmVkKG1fc3RydWN0dXJlLmdldCgpKTsKICAgICAgICAgZWxzZQog
ICAgICAgICAgICAgcmVzdWx0ID0gZmFsc2U7CkBAIC03ODQsMTEgKzc4NCwxNCBAQCBib29sIEFj
Y2Vzc0Nhc2U6OnByb3BhZ2F0ZVRyYW5zaXRpb25zKFNsCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0K
IAotdm9pZCBBY2Nlc3NDYXNlOjp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYgdmlzaXRvcikg
Y29uc3QKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEFjY2Vzc0Nhc2U6OnZpc2l0
QWdncmVnYXRlSW1wbChWaXNpdG9yJiB2aXNpdG9yKSBjb25zdAogewogICAgIG1faWRlbnRpZmll
ci52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKIH0KIAorREVGSU5FX1ZJU0lUX0FHR1JFR0FURV9X
SVRIX01PRElGSUVSKEFjY2Vzc0Nhc2UsIGNvbnN0KTsKKwogdm9pZCBBY2Nlc3NDYXNlOjpnZW5l
cmF0ZVdpdGhHdWFyZCgKICAgICBBY2Nlc3NHZW5lcmF0aW9uU3RhdGUmIHN0YXRlLCBDQ2FsbEhl
bHBlcnM6Okp1bXBMaXN0JiBmYWxsVGhyb3VnaCkKIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuaAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTI4MCw5ICsyODAsOSBAQCBwcml2YXRlOgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+
CiAgICAgdm9pZCBmb3JFYWNoRGVwZW5kZW50Q2VsbChWTSYsIGNvbnN0IEZ1bmN0b3ImKSBjb25z
dDsKIAotICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImKSBjb25zdDsKKyAgICBE
RUNMQVJFX1ZJU0lUX0FHR1JFR0FURV9XSVRIX01PRElGSUVSKGNvbnN0KTsKICAgICBib29sIHZp
c2l0V2VhayhWTSYpIGNvbnN0OwotICAgIGJvb2wgcHJvcGFnYXRlVHJhbnNpdGlvbnMoU2xvdFZp
c2l0b3ImKSBjb25zdDsKKyAgICBib29sIHByb3BhZ2F0ZVRyYW5zaXRpb25zKEFic3RyYWN0U2xv
dFZpc2l0b3ImKSBjb25zdDsKIAogICAgIC8vIEZJWE1FOiBUaGlzIG9ubHkgZXhpc3RzIGJlY2F1
c2Ugb2YgaG93IEFjY2Vzc0Nhc2UgcHV0cyBwb3N0LWdlbmVyYXRpb24gdGhpbmdzIGludG8gaXRz
ZWxmLgogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTY0
NTYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeVZhbEluZm8uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeVZhbEluZm8uY3Bw
CShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnlW
YWxJbmZvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDIwLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMiwxMSArMzIsMTQgQEAgbmFtZXNwYWNlIEpTQyB7
CiAKICNpZiBFTkFCTEUoSklUKQogCi12b2lkIEJ5VmFsSW5mbzo6dmlzaXRBZ2dyZWdhdGUoU2xv
dFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBCeVZh
bEluZm86OnZpc2l0QWdncmVnYXRlSW1wbChWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGNhY2hl
ZElkLnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOwogfQogCitERUZJTkVfVklTSVRfQUdHUkVHQVRF
KEJ5VmFsSW5mbyk7CisKICNlbmRpZiAvLyBFTkFCTEUoSklUKQogCiB9IC8vIG5hbWVzcGFjZSBK
U0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeVZhbEluZm8uaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnlWYWxJbmZvLmgJKHJl
dmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeVZhbElu
Zm8uaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTItMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTItMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2MCw3ICsyNjAsNyBAQCBzdHJ1Y3QgQnlWYWxJbmZv
IHsKICAgICAgICAgdGhpcy0+c2VlbiA9IGZhbHNlOwogICAgIH0KIAotICAgIHZvaWQgdmlzaXRB
Z2dyZWdhdGUoU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0FHR1JFR0FURTsKIAog
ICAgIENvZGVMb2NhdGlvbkp1bXA8SlNJbnRlcm5hbFB0clRhZz4gbm90SW5kZXhKdW1wOwogICAg
IENvZGVMb2NhdGlvbkp1bXA8SlNJbnRlcm5hbFB0clRhZz4gYmFkVHlwZUp1bXA7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2hlY2tQcml2YXRlQnJhbmRTdGF0dXMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DaGVja1ByaXZh
dGVCcmFuZFN0YXR1cy5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9DaGVja1ByaXZhdGVCcmFuZFN0YXR1cy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTIyOCwxMyArMjI4LDE2IEBAIENhY2hlYWJsZUlkZW50aWZpZXIgQ2hlY2tQcml2YXRlQnJh
bmRTdGEKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi12b2lkIENoZWNrUHJpdmF0ZUJyYW5kU3Rh
dHVzOjp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVu
YW1lIFZpc2l0b3I+Cit2b2lkIENoZWNrUHJpdmF0ZUJyYW5kU3RhdHVzOjp2aXNpdEFnZ3JlZ2F0
ZUltcGwoVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBmb3IgKENoZWNrUHJpdmF0ZUJyYW5kVmFy
aWFudCYgdmFyaWFudCA6IG1fdmFyaWFudHMpCiAgICAgICAgIHZhcmlhbnQudmlzaXRBZ2dyZWdh
dGUodmlzaXRvcik7CiB9CiAKLXZvaWQgQ2hlY2tQcml2YXRlQnJhbmRTdGF0dXM6Om1hcmtJZkNo
ZWFwKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorREVGSU5FX1ZJU0lUX0FHR1JFR0FURShDaGVja1By
aXZhdGVCcmFuZFN0YXR1cyk7CisKK3ZvaWQgQ2hlY2tQcml2YXRlQnJhbmRTdGF0dXM6Om1hcmtJ
ZkNoZWFwKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgZm9yIChDaGVja1By
aXZhdGVCcmFuZFZhcmlhbnQmIHZhcmlhbnQgOiBtX3ZhcmlhbnRzKQogICAgICAgICB2YXJpYW50
Lm1hcmtJZkNoZWFwKHZpc2l0b3IpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NoZWNrUHJpdmF0ZUJyYW5kU3RhdHVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NoZWNrUHJpdmF0ZUJyYW5kU3RhdHVzLmgJKHJldmlzaW9uIDI3
MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DaGVja1ByaXZhdGVCcmFu
ZFN0YXR1cy5oCSh3b3JraW5nIGNvcHkpCkBAIC04Miw4ICs4Miw5IEBAIHB1YmxpYzoKICAgICAv
LyBBdHRlbXB0cyB0byByZWR1Y2UgdGhlIHNldCBvZiB2YXJpYW50cyB0byBmaXQgdGhlIGdpdmVu
IHN0cnVjdHVyZSBzZXQuIFRoaXMgbWF5IGJlIGFwcHJveGltYXRlLgogICAgIHZvaWQgZmlsdGVy
KGNvbnN0IFN0cnVjdHVyZVNldCYpOwogCi0gICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShTbG90Vmlz
aXRvciYpOwotICAgIHZvaWQgbWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImKTsKKy8vICAgIHZvaWQg
dmlzaXRBZ2dyZWdhdGUoQWJzdHJhY3RTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRf
QUdHUkVHQVRFOworICAgIHZvaWQgbWFya0lmQ2hlYXAoQWJzdHJhY3RTbG90VmlzaXRvciYpOwog
ICAgIGJvb2wgZmluYWxpemUoVk0mKTsKIAogICAgIGJvb2wgYXBwZW5kVmFyaWFudChjb25zdCBD
aGVja1ByaXZhdGVCcmFuZFZhcmlhbnQmKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9DaGVja1ByaXZhdGVCcmFuZFZhcmlhbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DaGVja1ByaXZhdGVCcmFuZFZhcmlhbnQuY3BwCShy
ZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2hlY2tQ
cml2YXRlQnJhbmRWYXJpYW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTEsNyArNTEsNyBAQCBi
b29sIENoZWNrUHJpdmF0ZUJyYW5kVmFyaWFudDo6YXR0ZW1wdFRvCiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKLXZvaWQgQ2hlY2tQcml2YXRlQnJhbmRWYXJpYW50OjptYXJrSWZDaGVhcChTbG90Vmlz
aXRvciYgdmlzaXRvcikKK3ZvaWQgQ2hlY2tQcml2YXRlQnJhbmRWYXJpYW50OjptYXJrSWZDaGVh
cChBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIG1fc3RydWN0dXJlU2V0Lm1h
cmtJZkNoZWFwKHZpc2l0b3IpOwogfQpAQCAtNjMsMTEgKzYzLDE0IEBAIGJvb2wgQ2hlY2tQcml2
YXRlQnJhbmRWYXJpYW50OjpmaW5hbGl6ZSgKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBD
aGVja1ByaXZhdGVCcmFuZFZhcmlhbnQ6OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJiB2aXNp
dG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgQ2hlY2tQcml2YXRlQnJhbmRW
YXJpYW50Ojp2aXNpdEFnZ3JlZ2F0ZUltcGwoVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBtX2lk
ZW50aWZpZXIudmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7CiB9CiAKK0RFRklORV9WSVNJVF9BR0dS
RUdBVEUoQ2hlY2tQcml2YXRlQnJhbmRWYXJpYW50KTsKKwogdm9pZCBDaGVja1ByaXZhdGVCcmFu
ZFZhcmlhbnQ6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKIHsKICAgICBkdW1wSW5Db250
ZXh0KG91dCwgbnVsbHB0cik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Q2hlY2tQcml2YXRlQnJhbmRWYXJpYW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0NoZWNrUHJpdmF0ZUJyYW5kVmFyaWFudC5oCShyZXZpc2lvbiAyNzI4
MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2hlY2tQcml2YXRlQnJhbmRW
YXJpYW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAKIAogbmFtZXNwYWNlIEpT
QyB7CiAKK2NsYXNzIEFic3RyYWN0U2xvdFZpc2l0b3I7CiBjbGFzcyBDaGVja1ByaXZhdGVCcmFu
ZFN0YXR1czsKIAogY2xhc3MgQ2hlY2tQcml2YXRlQnJhbmRWYXJpYW50IHsKQEAgLTQ2LDggKzQ3
LDggQEAgcHVibGljOgogCiAgICAgYm9vbCBhdHRlbXB0VG9NZXJnZShjb25zdCBDaGVja1ByaXZh
dGVCcmFuZFZhcmlhbnQmIG90aGVyKTsKIAotICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZp
c2l0b3ImKTsKLSAgICB2b2lkIG1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFS
RV9WSVNJVF9BR0dSRUdBVEU7CisgICAgdm9pZCBtYXJrSWZDaGVhcChBYnN0cmFjdFNsb3RWaXNp
dG9yJik7CiAgICAgYm9vbCBmaW5hbGl6ZShWTSYpOwogCiAgICAgdm9pZCBkdW1wKFByaW50U3Ry
ZWFtJikgY29uc3Q7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29k
ZUJsb2NrLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0NvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMDEsNyArMTAwMSw4IEBA
IHNpemVfdCBDb2RlQmxvY2s6OmVzdGltYXRlZFNpemUoSlNDZWxsKiAKICAgICByZXR1cm4gQmFz
ZTo6ZXN0aW1hdGVkU2l6ZShjZWxsLCB2bSkgKyBleHRyYU1lbW9yeUFsbG9jYXRlZDsKIH0KIAot
dm9pZCBDb2RlQmxvY2s6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYg
dmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIENvZGVCbG9jazo6dmlz
aXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIENv
ZGVCbG9jayogdGhpc09iamVjdCA9IGpzQ2FzdDxDb2RlQmxvY2sqPihjZWxsKTsKICAgICBBU1NF
UlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC0xMDEwLDkgKzEw
MTEsMTQgQEAgdm9pZCBDb2RlQmxvY2s6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZQogICAgIHRo
aXNPYmplY3QtPnZpc2l0Q2hpbGRyZW4odmlzaXRvcik7CiB9CiAKLXZvaWQgQ29kZUJsb2NrOjp2
aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorREVGSU5FX1ZJU0lUX0NISUxEUkVO
KENvZGVCbG9jayk7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIENvZGVCbG9j
azo6dmlzaXRDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIENvbmN1cnJlbnRKU0xv
Y2tlciBsb2NrZXIobV9sb2NrKTsKKworICAgIG1fdmlzaXRDaGlsZHJlblNraXBwZWREdWVUb09s
ZEFnZSA9IGZhbHNlOwogICAgIGlmIChDb2RlQmxvY2sqIG90aGVyQmxvY2sgPSBzcGVjaWFsT1NS
RW50cnlCbG9ja09yTnVsbCgpKQogICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKG90
aGVyQmxvY2spOwogCkBAIC0xMDI5LDEzICsxMDM1LDIxIEBAIHZvaWQgQ29kZUJsb2NrOjp2aXNp
dENoaWxkcmVuKFNsb3RWaXNpdG8KICAgICBWTTo6U3BhY2VBbmRTZXQ6OnNldEZvcigqc3Vic3Bh
Y2UoKSkuYWRkKHRoaXMpOwogfQogCi1ib29sIENvZGVCbG9jazo6c2hvdWxkVmlzaXRTdHJvbmds
eShjb25zdCBDb25jdXJyZW50SlNMb2NrZXImIGxvY2tlcikKK2Jvb2wgQ29kZUJsb2NrOjpzaG91
bGRWaXNpdFN0cm9uZ2x5KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYgbG9ja2VyLCBBYnN0cmFj
dFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGlmIChPcHRpb25zOjpmb3JjZUNvZGVCbG9j
a0xpdmVuZXNzKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgaWYgKHNob3VsZEpldHRp
c29uRHVlVG9PbGRBZ2UobG9ja2VyKSkKKyAgICBpZiAoc2hvdWxkSmV0dGlzb25EdWVUb09sZEFn
ZShsb2NrZXIsIHZpc2l0b3IpKSB7CisgICAgICAgIGlmIChPcHRpb25zOjp2ZXJpZnlHQygpKQor
ICAgICAgICAgICAgbV92aXNpdENoaWxkcmVuU2tpcHBlZER1ZVRvT2xkQWdlID0gdHJ1ZTsKICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmIChtX3Zpc2l0Q2hpbGRyZW5Ta2lw
cGVkRHVlVG9PbGRBZ2UpIHsKKyAgICAgICAgQVNTRVJUKE9wdGlvbnM6OnZlcmlmeUdDKCkpOwor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQogCiAgICAgLy8gSW50ZXJwcmV0ZXIgYW5kIEJh
c2VsaW5lIEpJVCBDb2RlQmxvY2tzIGRvbid0IG5lZWQgdG8gYmUgamV0dGlzb25lZCB3aGVuCiAg
ICAgLy8gdGhlaXIgd2VhayByZWZlcmVuY2VzIGdvIHN0YWxlLiBTbyBpZiBhIGJhc2xpbmUgSklU
IENvZGVCbG9jayBnZXRzCkBAIC0xMDg2LDkgKzExMDAsOSBAQCBzdGF0aWMgU2Vjb25kcyB0aW1l
VG9MaXZlKEpJVFR5cGUgaml0VHlwCiAgICAgfQogfQogCi1ib29sIENvZGVCbG9jazo6c2hvdWxk
SmV0dGlzb25EdWVUb09sZEFnZShjb25zdCBDb25jdXJyZW50SlNMb2NrZXImKQorYm9vbCBDb2Rl
QmxvY2s6OnNob3VsZEpldHRpc29uRHVlVG9PbGRBZ2UoY29uc3QgQ29uY3VycmVudEpTTG9ja2Vy
JiwgQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKLSAgICBpZiAobV92bS0+aGVhcC5p
c01hcmtlZCh0aGlzKSkKKyAgICBpZiAodmlzaXRvci5pc01hcmtlZCh0aGlzKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OmZvcmNlQ29kZUJsb2Nr
VG9KZXR0aXNvbkR1ZVRvT2xkQWdlKCkpKQpAQCAtMTEwMSwxMiArMTExNSwxMiBAQCBib29sIENv
ZGVCbG9jazo6c2hvdWxkSmV0dGlzb25EdWVUb09sZEFnCiB9CiAKICNpZiBFTkFCTEUoREZHX0pJ
VCkKLXN0YXRpYyBib29sIHNob3VsZE1hcmtUcmFuc2l0aW9uKFZNJiB2bSwgREZHOjpXZWFrUmVm
ZXJlbmNlVHJhbnNpdGlvbiYgdHJhbnNpdGlvbikKK3N0YXRpYyBpbmxpbmUgYm9vbCBzaG91bGRN
YXJrVHJhbnNpdGlvbihBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBERkc6OldlYWtSZWZl
cmVuY2VUcmFuc2l0aW9uJiB0cmFuc2l0aW9uKQogewotICAgIGlmICh0cmFuc2l0aW9uLm1fY29k
ZU9yaWdpbiAmJiAhdm0uaGVhcC5pc01hcmtlZCh0cmFuc2l0aW9uLm1fY29kZU9yaWdpbi5nZXQo
KSkpCisgICAgaWYgKHRyYW5zaXRpb24ubV9jb2RlT3JpZ2luICYmICF2aXNpdG9yLmlzTWFya2Vk
KHRyYW5zaXRpb24ubV9jb2RlT3JpZ2luLmdldCgpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIAotICAgIGlmICghdm0uaGVhcC5pc01hcmtlZCh0cmFuc2l0aW9uLm1fZnJvbS5nZXQoKSkp
CisgICAgaWYgKCF2aXNpdG9yLmlzTWFya2VkKHRyYW5zaXRpb24ubV9mcm9tLmdldCgpKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAogICAgIHJldHVybiB0cnVlOwpAQCAtMTEyMiw4ICsx
MTM2LDkgQEAgQnl0ZWNvZGVJbmRleCBDb2RlQmxvY2s6OmJ5dGVjb2RlSW5kZXhGbwogfQogI2Vu
ZGlmIC8vIEVOQUJMRShERkdfSklUKQogCi12b2lkIENvZGVCbG9jazo6cHJvcGFnYXRlVHJhbnNp
dGlvbnMoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2
b2lkIENvZGVCbG9jazo6cHJvcGFnYXRlVHJhbnNpdGlvbnMoY29uc3QgQ29uY3VycmVudEpTTG9j
a2VyJiwgQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKKyAgICBBYnN0cmFjdFNsb3RW
aXNpdG9yOjpTdXBwcmVzc0dDVmVyaWZpZXJTY29wZSBzdXBwcmVzc1Njb3BlKHZpc2l0b3IpOwog
ICAgIFZNJiB2bSA9ICptX3ZtOwogCiAgICAgaWYgKGppdFR5cGUoKSA9PSBKSVRUeXBlOjpJbnRl
cnByZXRlclRodW5rKSB7CkBAIC0xMTMzLDggKzExNDgsOSBAQCB2b2lkIENvZGVCbG9jazo6cHJv
cGFnYXRlVHJhbnNpdGlvbnMoY29uCiAgICAgICAgICAgICAgICAgU3RydWN0dXJlSUQgbmV3U3Ry
dWN0dXJlSUQgPSBtZXRhZGF0YS5tX25ld1N0cnVjdHVyZUlEOwogICAgICAgICAgICAgICAgIGlm
ICghb2xkU3RydWN0dXJlSUQgfHwgIW5ld1N0cnVjdHVyZUlEKQogICAgICAgICAgICAgICAgICAg
ICByZXR1cm47CisKICAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSA9IHZt
LmhlYXAuc3RydWN0dXJlSURUYWJsZSgpLmdldChvbGRTdHJ1Y3R1cmVJRCk7Ci0gICAgICAgICAg
ICAgICAgaWYgKHZtLmhlYXAuaXNNYXJrZWQob2xkU3RydWN0dXJlKSkgeworICAgICAgICAgICAg
ICAgIGlmICh2aXNpdG9yLmlzTWFya2VkKG9sZFN0cnVjdHVyZSkpIHsKICAgICAgICAgICAgICAg
ICAgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSB2bS5oZWFwLnN0cnVjdHVyZUlEVGFibGUo
KS5nZXQobmV3U3RydWN0dXJlSUQpOwogICAgICAgICAgICAgICAgICAgICB2aXNpdG9yLmFwcGVu
ZFVuYmFycmllcmVkKG5ld1N0cnVjdHVyZSk7CiAgICAgICAgICAgICAgICAgfQpAQCAtMTE0OCwx
MSArMTE2NCwxMSBAQCB2b2lkIENvZGVCbG9jazo6cHJvcGFnYXRlVHJhbnNpdGlvbnMoY29uCiAK
ICAgICAgICAgICAgICAgICBKU0NlbGwqIHByb3BlcnR5ID0gbWV0YWRhdGEubV9wcm9wZXJ0eS5n
ZXQoKTsKICAgICAgICAgICAgICAgICBBU1NFUlQocHJvcGVydHkpOwotICAgICAgICAgICAgICAg
IGlmICghdm0uaGVhcC5pc01hcmtlZChwcm9wZXJ0eSkpCisgICAgICAgICAgICAgICAgaWYgKCF2
aXNpdG9yLmlzTWFya2VkKHByb3BlcnR5KSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwog
CiAgICAgICAgICAgICAgICAgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUgPSB2bS5oZWFwLnN0cnVj
dHVyZUlEVGFibGUoKS5nZXQob2xkU3RydWN0dXJlSUQpOwotICAgICAgICAgICAgICAgIGlmICh2
bS5oZWFwLmlzTWFya2VkKG9sZFN0cnVjdHVyZSkpIHsKKyAgICAgICAgICAgICAgICBpZiAodmlz
aXRvci5pc01hcmtlZChvbGRTdHJ1Y3R1cmUpKSB7CiAgICAgICAgICAgICAgICAgICAgIFN0cnVj
dHVyZSogbmV3U3RydWN0dXJlID0gdm0uaGVhcC5zdHJ1Y3R1cmVJRFRhYmxlKCkuZ2V0KG5ld1N0
cnVjdHVyZUlEKTsKICAgICAgICAgICAgICAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJl
ZChuZXdTdHJ1Y3R1cmUpOwogICAgICAgICAgICAgICAgIH0KQEAgLTExNzAsNyArMTE4Niw3IEBA
IHZvaWQgQ29kZUJsb2NrOjpwcm9wYWdhdGVUcmFuc2l0aW9ucyhjb24KICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuOwogCiAgICAgICAgICAgICAgICAgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUg
PSB2bS5oZWFwLnN0cnVjdHVyZUlEVGFibGUoKS5nZXQob2xkU3RydWN0dXJlSUQpOwotICAgICAg
ICAgICAgICAgIGlmICh2bS5oZWFwLmlzTWFya2VkKG9sZFN0cnVjdHVyZSkpIHsKKyAgICAgICAg
ICAgICAgICBpZiAodmlzaXRvci5pc01hcmtlZChvbGRTdHJ1Y3R1cmUpKSB7CiAgICAgICAgICAg
ICAgICAgICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0gdm0uaGVhcC5zdHJ1Y3R1cmVJRFRh
YmxlKCkuZ2V0KG5ld1N0cnVjdHVyZUlEKTsKICAgICAgICAgICAgICAgICAgICAgdmlzaXRvci5h
cHBlbmRVbmJhcnJpZXJlZChuZXdTdHJ1Y3R1cmUpOwogICAgICAgICAgICAgICAgIH0KQEAgLTEx
OTcsNyArMTIxMyw3IEBAIHZvaWQgQ29kZUJsb2NrOjpwcm9wYWdhdGVUcmFuc2l0aW9ucyhjb24K
ICAgICAgICAgICAgIHZtLmdldFN0cnVjdHVyZShzdHJ1Y3R1cmVJRCktPm1hcmtJZkNoZWFwKHZp
c2l0b3IpOwogCiAgICAgICAgIGZvciAoYXV0byYgdHJhbnNpdGlvbiA6IGRmZ0NvbW1vbi0+dHJh
bnNpdGlvbnMpIHsKLSAgICAgICAgICAgIGlmIChzaG91bGRNYXJrVHJhbnNpdGlvbih2bSwgdHJh
bnNpdGlvbikpIHsKKyAgICAgICAgICAgIGlmIChzaG91bGRNYXJrVHJhbnNpdGlvbih2aXNpdG9y
LCB0cmFuc2l0aW9uKSkgewogICAgICAgICAgICAgICAgIC8vIElmIHRoZSBmb2xsb3dpbmcgdGhy
ZWUgdGhpbmdzIGFyZSBsaXZlLCB0aGVuIHRoZSB0YXJnZXQgb2YgdGhlCiAgICAgICAgICAgICAg
ICAgLy8gdHJhbnNpdGlvbiBpcyBhbHNvIGxpdmU6CiAgICAgICAgICAgICAgICAgLy8KQEAgLTEy
MjQsMTMgKzEyNDAsMTMgQEAgdm9pZCBDb2RlQmxvY2s6OnByb3BhZ2F0ZVRyYW5zaXRpb25zKGNv
bgogI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQogfQogCi12b2lkIENvZGVCbG9jazo6ZGV0ZXJt
aW5lTGl2ZW5lc3MoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgU2xvdFZpc2l0b3ImIHZpc2l0
b3IpCit2b2lkIENvZGVCbG9jazo6ZGV0ZXJtaW5lTGl2ZW5lc3MoY29uc3QgQ29uY3VycmVudEpT
TG9ja2VyJiwgQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBVTlVTRURfUEFS
QU0odmlzaXRvcik7CiAgICAgCiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAgVk0mIHZtID0gKm1f
dm07Ci0gICAgaWYgKHZtLmhlYXAuaXNNYXJrZWQodGhpcykpCisgICAgaWYgKHZpc2l0b3IuaXNN
YXJrZWQodGhpcykpCiAgICAgICAgIHJldHVybjsKICAgICAKICAgICAvLyBJbiByYXJlIGFuZCB3
ZWlyZCBjYXNlcywgdGhpcyBjb3VsZCBiZSBjYWxsZWQgb24gYSBiYXNlbGluZSBDb2RlQmxvY2su
IE9uZSB0aGF0IEkgZm91bmQgd2FzCkBAIC0xMjQ3LDcgKzEyNjMsNyBAQCB2b2lkIENvZGVCbG9j
azo6ZGV0ZXJtaW5lTGl2ZW5lc3MoY29uc3QgCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGRmZ0NvbW1vbi0+d2Vha1JlZmVyZW5jZXMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgSlNDZWxs
KiByZWZlcmVuY2UgPSBkZmdDb21tb24tPndlYWtSZWZlcmVuY2VzW2ldLmdldCgpOwogICAgICAg
ICBBU1NFUlQoIWpzRHluYW1pY0Nhc3Q8Q29kZUJsb2NrKj4odm0sIHJlZmVyZW5jZSkpOwotICAg
ICAgICBpZiAoIXZtLmhlYXAuaXNNYXJrZWQocmVmZXJlbmNlKSkgeworICAgICAgICBpZiAoIXZp
c2l0b3IuaXNNYXJrZWQocmVmZXJlbmNlKSkgewogICAgICAgICAgICAgYWxsQXJlTGl2ZVNvRmFy
ID0gZmFsc2U7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtMTI1NSw3ICsxMjcx
LDcgQEAgdm9pZCBDb2RlQmxvY2s6OmRldGVybWluZUxpdmVuZXNzKGNvbnN0IAogICAgIGlmIChh
bGxBcmVMaXZlU29GYXIpIHsKICAgICAgICAgZm9yIChTdHJ1Y3R1cmVJRCBzdHJ1Y3R1cmVJRCA6
IGRmZ0NvbW1vbi0+d2Vha1N0cnVjdHVyZVJlZmVyZW5jZXMpIHsKICAgICAgICAgICAgIFN0cnVj
dHVyZSogc3RydWN0dXJlID0gdm0uZ2V0U3RydWN0dXJlKHN0cnVjdHVyZUlEKTsKLSAgICAgICAg
ICAgIGlmICghdm0uaGVhcC5pc01hcmtlZChzdHJ1Y3R1cmUpKSB7CisgICAgICAgICAgICBpZiAo
IXZpc2l0b3IuaXNNYXJrZWQoc3RydWN0dXJlKSkgewogICAgICAgICAgICAgICAgIGFsbEFyZUxp
dmVTb0ZhciA9IGZhbHNlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQpA
QCAtMTYxNiw2ICsxNjMyLDcgQEAgdm9pZCBDb2RlQmxvY2s6OmZpbmFsaXplVW5jb25kaXRpb25h
bGx5KAogICAgIHVwZGF0ZUFjdGl2aXR5KCk7CiAKICAgICBWTTo6U3BhY2VBbmRTZXQ6OnNldEZv
cigqc3Vic3BhY2UoKSkucmVtb3ZlKHRoaXMpOworICAgIG1fdmlzaXRDaGlsZHJlblNraXBwZWRE
dWVUb09sZEFnZSA9IGZhbHNlOwogfQogCiB2b2lkIENvZGVCbG9jazo6ZGVzdHJveShKU0NlbGwq
IGNlbGwpCkBAIC0xODA4LDcgKzE4MjUsOCBAQCB2b2lkIENvZGVCbG9jazo6cmVzZXRKSVREYXRh
KCkKIH0KICNlbmRpZgogCi12b2lkIENvZGVCbG9jazo6dmlzaXRPU1JFeGl0VGFyZ2V0cyhjb25z
dCBDb25jdXJyZW50SlNMb2NrZXImLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5
cGVuYW1lIFZpc2l0b3I+Cit2b2lkIENvZGVCbG9jazo6dmlzaXRPU1JFeGl0VGFyZ2V0cyhjb25z
dCBDb25jdXJyZW50SlNMb2NrZXImLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIC8vIFdlIHN0
cm9uZ2x5IHZpc2l0IE9TUiBleGl0cyB0YXJnZXRzIGJlY2F1c2Ugd2UgZG9uJ3Qgd2FudCB0byBk
ZWFsIHdpdGgKICAgICAvLyB0aGUgY29tcGxleGl0eSBvZiBnZW5lcmF0aW5nIGFuIGV4aXQgdGFy
Z2V0IENvZGVCbG9jayBvbiBkZW1hbmQgYW5kCkBAIC0xODI4LDcgKzE4NDYsOCBAQCB2b2lkIENv
ZGVCbG9jazo6dmlzaXRPU1JFeGl0VGFyZ2V0cyhjb25zCiAjZW5kaWYKIH0KIAotdm9pZCBDb2Rl
QmxvY2s6OnN0cm9uZ2x5VmlzaXRTdHJvbmdSZWZlcmVuY2VzKGNvbnN0IENvbmN1cnJlbnRKU0xv
Y2tlciYgbG9ja2VyLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZp
c2l0b3I+Cit2b2lkIENvZGVCbG9jazo6c3Ryb25nbHlWaXNpdFN0cm9uZ1JlZmVyZW5jZXMoY29u
c3QgQ29uY3VycmVudEpTTG9ja2VyJiBsb2NrZXIsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAg
VU5VU0VEX1BBUkFNKGxvY2tlcik7CiAgICAgCkBAIC0xODY0LDcgKzE4ODMsOCBAQCB2b2lkIENv
ZGVCbG9jazo6c3Ryb25nbHlWaXNpdFN0cm9uZ1JlZmVyCiAjZW5kaWYKIH0KIAotdm9pZCBDb2Rl
QmxvY2s6OnN0cm9uZ2x5VmlzaXRXZWFrUmVmZXJlbmNlcyhjb25zdCBDb25jdXJyZW50SlNMb2Nr
ZXImLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2
b2lkIENvZGVCbG9jazo6c3Ryb25nbHlWaXNpdFdlYWtSZWZlcmVuY2VzKGNvbnN0IENvbmN1cnJl
bnRKU0xvY2tlciYsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHZpc2l0
b3IpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5o
CShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29k
ZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDA4LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDA4LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29w
eXJpZ2h0IChDKSAyMDA4IENhbWVyb24gWndhcmljaCA8Y3d6d2FyaWNoQHV3YXRlcmxvby5jYT4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKQEAgLTIwMSwxMCArMjAxLDEwIEBAIHB1YmxpYzoKICAgICAvLyBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIzNjc3CiAgICAgQ29kZUJs
b2NrKiBiYXNlbGluZVZlcnNpb24oKTsKIAorICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CisK
ICAgICBzdGF0aWMgc2l6ZV90IGVzdGltYXRlZFNpemUoSlNDZWxsKiwgVk0mKTsKLSAgICBzdGF0
aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CiAgICAgc3RhdGlj
IHZvaWQgZGVzdHJveShKU0NlbGwqKTsKLSAgICB2b2lkIHZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0
b3ImKTsKICAgICB2b2lkIGZpbmFsaXplVW5jb25kaXRpb25hbGx5KFZNJik7CiAKICAgICB2b2lk
IG5vdGlmeUxleGljYWxCaW5kaW5nVXBkYXRlKCk7CkBAIC05NDMsNiArOTQzLDggQEAgcHJpdmF0
ZToKICAgICBmcmllbmQgY2xhc3MgQ29kZUJsb2NrU2V0OwogICAgIGZyaWVuZCBjbGFzcyBFeGVj
dXRhYmxlVG9Db2RlQmxvY2tFZGdlOwogCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4g
QUxXQVlTX0lOTElORSB2b2lkIHZpc2l0Q2hpbGRyZW4oVmlzaXRvciYpOworCiAgICAgQnl0ZWNv
ZGVMaXZlbmVzc0FuYWx5c2lzJiBsaXZlbmVzc0FuYWx5c2lzU2xvdygpOwogICAgIAogICAgIENv
ZGVCbG9jayogc3BlY2lhbE9TUkVudHJ5QmxvY2tPck51bGwoKTsKQEAgLTk2MywxNiArOTY1LDE2
IEBAIHByaXZhdGU6CiAgICAgICAgIG1fY29uc3RhbnRSZWdpc3RlcnNbcmVnLnRvQ29uc3RhbnRJ
bmRleCgpXS5zZXQoKm1fdm0sIHRoaXMsIHZhbHVlKTsKICAgICB9CiAKLSAgICBib29sIHNob3Vs
ZFZpc2l0U3Ryb25nbHkoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJik7CisgICAgYm9vbCBzaG91
bGRWaXNpdFN0cm9uZ2x5KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIEFic3RyYWN0U2xvdFZp
c2l0b3ImKTsKICAgICBib29sIHNob3VsZEpldHRpc29uRHVlVG9XZWFrUmVmZXJlbmNlKFZNJik7
Ci0gICAgYm9vbCBzaG91bGRKZXR0aXNvbkR1ZVRvT2xkQWdlKGNvbnN0IENvbmN1cnJlbnRKU0xv
Y2tlciYpOworICAgIGJvb2wgc2hvdWxkSmV0dGlzb25EdWVUb09sZEFnZShjb25zdCBDb25jdXJy
ZW50SlNMb2NrZXImLCBBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAgICAgCi0gICAgdm9pZCBwcm9w
YWdhdGVUcmFuc2l0aW9ucyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBTbG90VmlzaXRvciYp
OwotICAgIHZvaWQgZGV0ZXJtaW5lTGl2ZW5lc3MoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwg
U2xvdFZpc2l0b3ImKTsKKyAgICB2b2lkIHByb3BhZ2F0ZVRyYW5zaXRpb25zKGNvbnN0IENvbmN1
cnJlbnRKU0xvY2tlciYsIEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKKyAgICB2b2lkIGRldGVybWlu
ZUxpdmVuZXNzKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIEFic3RyYWN0U2xvdFZpc2l0b3Im
KTsKICAgICAgICAgCi0gICAgdm9pZCBzdHJvbmdseVZpc2l0U3Ryb25nUmVmZXJlbmNlcyhjb25z
dCBDb25jdXJyZW50SlNMb2NrZXImLCBTbG90VmlzaXRvciYpOwotICAgIHZvaWQgc3Ryb25nbHlW
aXNpdFdlYWtSZWZlcmVuY2VzKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIFNsb3RWaXNpdG9y
Jik7Ci0gICAgdm9pZCB2aXNpdE9TUkV4aXRUYXJnZXRzKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tl
ciYsIFNsb3RWaXNpdG9yJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCBz
dHJvbmdseVZpc2l0U3Ryb25nUmVmZXJlbmNlcyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBW
aXNpdG9yJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCBzdHJvbmdseVZp
c2l0V2Vha1JlZmVyZW5jZXMoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgVmlzaXRvciYpOwor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgdmlzaXRPU1JFeGl0VGFyZ2V0cyhj
b25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBWaXNpdG9yJik7CiAKICAgICB1bnNpZ25lZCBudW1i
ZXJPZk5vbkFyZ3VtZW50VmFsdWVQcm9maWxlcygpIHsgcmV0dXJuIG1fbnVtYmVyT2ZOb25Bcmd1
bWVudFZhbHVlUHJvZmlsZXM7IH0KICAgICB1bnNpZ25lZCB0b3RhbE51bWJlck9mVmFsdWVQcm9m
aWxlcygpIHsgcmV0dXJuIG51bWJlck9mQXJndW1lbnRWYWx1ZVByb2ZpbGVzKCkgKyBudW1iZXJP
Zk5vbkFyZ3VtZW50VmFsdWVQcm9maWxlcygpOyB9CkBAIC0xMDExLDYgKzEwMTMsNyBAQCBwcml2
YXRlOgogICAgIHVuc2lnbmVkIG1fYnl0ZWNvZGVDb3N0IHsgMCB9OwogICAgIFZpcnR1YWxSZWdp
c3RlciBtX3Njb3BlUmVnaXN0ZXI7CiAgICAgbXV0YWJsZSBDb2RlQmxvY2tIYXNoIG1faGFzaDsK
KyAgICBib29sIG1fdmlzaXRDaGlsZHJlblNraXBwZWREdWVUb09sZEFnZSB7IGZhbHNlIH07CiAK
ICAgICBXcml0ZUJhcnJpZXI8VW5saW5rZWRDb2RlQmxvY2s+IG1fdW5saW5rZWRDb2RlOwogICAg
IFdyaXRlQmFycmllcjxTY3JpcHRFeGVjdXRhYmxlPiBtX293bmVyRXhlY3V0YWJsZTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9EZWxldGVCeUlkVmFyaWFudC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0RlbGV0ZUJ5SWRWYXJp
YW50LmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0RlbGV0ZUJ5SWRWYXJpYW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDIwLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC04OCwxMiArODgsMTUgQEAg
Ym9vbCBEZWxldGVCeUlkVmFyaWFudDo6d3JpdGVzU3RydWN0dXJlcwogICAgIHJldHVybiAhIW5l
d1N0cnVjdHVyZSgpOwogfQogCi12b2lkIERlbGV0ZUJ5SWRWYXJpYW50Ojp2aXNpdEFnZ3JlZ2F0
ZShTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lk
IERlbGV0ZUJ5SWRWYXJpYW50Ojp2aXNpdEFnZ3JlZ2F0ZUltcGwoVmlzaXRvciYgdmlzaXRvcikK
IHsKICAgICBtX2lkZW50aWZpZXIudmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7CiB9CiAKLXZvaWQg
RGVsZXRlQnlJZFZhcmlhbnQ6Om1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorREVG
SU5FX1ZJU0lUX0FHR1JFR0FURShEZWxldGVCeUlkVmFyaWFudCk7CisKK3ZvaWQgRGVsZXRlQnlJ
ZFZhcmlhbnQ6Om1hcmtJZkNoZWFwKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAg
ICAgaWYgKG1fb2xkU3RydWN0dXJlKQogICAgICAgICBtX29sZFN0cnVjdHVyZS0+bWFya0lmQ2hl
YXAodmlzaXRvcik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRGVsZXRl
QnlJZFZhcmlhbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvRGVsZXRlQnlJZFZhcmlhbnQuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0RlbGV0ZUJ5SWRWYXJpYW50LmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMC0yMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjEs
OCArNjEsOCBAQCBwdWJsaWM6CiAKICAgICBib29sIGF0dGVtcHRUb01lcmdlKGNvbnN0IERlbGV0
ZUJ5SWRWYXJpYW50JiBvdGhlcik7CiAKLSAgICB2b2lkIHZpc2l0QWdncmVnYXRlKFNsb3RWaXNp
dG9yJik7Ci0gICAgdm9pZCBtYXJrSWZDaGVhcChTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVf
VklTSVRfQUdHUkVHQVRFOworICAgIHZvaWQgbWFya0lmQ2hlYXAoQWJzdHJhY3RTbG90VmlzaXRv
ciYpOwogICAgIGJvb2wgZmluYWxpemUoVk0mKTsKIAogICAgIHZvaWQgZHVtcChQcmludFN0cmVh
bSYpIGNvbnN0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0RlbGV0ZUJ5
U3RhdHVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
RGVsZXRlQnlTdGF0dXMuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvRGVsZXRlQnlTdGF0dXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI1NCwxMyAr
MjU0LDE2IEBAIENhY2hlYWJsZUlkZW50aWZpZXIgRGVsZXRlQnlTdGF0dXM6OnNpbmcKICAgICBy
ZXR1cm4gcmVzdWx0OwogfQogCi12b2lkIERlbGV0ZUJ5U3RhdHVzOjp2aXNpdEFnZ3JlZ2F0ZShT
bG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIERl
bGV0ZUJ5U3RhdHVzOjp2aXNpdEFnZ3JlZ2F0ZUltcGwoVmlzaXRvciYgdmlzaXRvcikKIHsKICAg
ICBmb3IgKERlbGV0ZUJ5SWRWYXJpYW50JiB2YXJpYW50IDogbV92YXJpYW50cykKICAgICAgICAg
dmFyaWFudC52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKIH0KIAotdm9pZCBEZWxldGVCeVN0YXR1
czo6bWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCitERUZJTkVfVklTSVRfQUdHUkVH
QVRFKERlbGV0ZUJ5U3RhdHVzKTsKKwordm9pZCBEZWxldGVCeVN0YXR1czo6bWFya0lmQ2hlYXAo
QWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBmb3IgKERlbGV0ZUJ5SWRWYXJp
YW50JiB2YXJpYW50IDogbV92YXJpYW50cykKICAgICAgICAgdmFyaWFudC5tYXJrSWZDaGVhcCh2
aXNpdG9yKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9EZWxldGVCeVN0
YXR1cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9EZWxl
dGVCeVN0YXR1cy5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvRGVsZXRlQnlTdGF0dXMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDIwLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC04MSw4ICs4MSw4IEBAIHB1
YmxpYzoKICAgICAvLyBBdHRlbXB0cyB0byByZWR1Y2UgdGhlIHNldCBvZiB2YXJpYW50cyB0byBm
aXQgdGhlIGdpdmVuIHN0cnVjdHVyZSBzZXQuIFRoaXMgbWF5IGJlIGFwcHJveGltYXRlLgogICAg
IHZvaWQgZmlsdGVyKGNvbnN0IFN0cnVjdHVyZVNldCYpOwogCi0gICAgdm9pZCB2aXNpdEFnZ3Jl
Z2F0ZShTbG90VmlzaXRvciYpOwotICAgIHZvaWQgbWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImKTsK
KyAgICBERUNMQVJFX1ZJU0lUX0FHR1JFR0FURTsKKyAgICB2b2lkIG1hcmtJZkNoZWFwKEFic3Ry
YWN0U2xvdFZpc2l0b3ImKTsKICAgICBib29sIGZpbmFsaXplKFZNJik7CiAKICAgICBib29sIGFw
cGVuZFZhcmlhbnQoY29uc3QgRGVsZXRlQnlJZFZhcmlhbnQmKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9EaXJlY3RFdmFsQ29kZUNhY2hlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRGlyZWN0RXZhbENvZGVDYWNoZS5jcHAJ
KHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9EaXJl
Y3RFdmFsQ29kZUNhY2hlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00NSw3ICs0NSw4IEBAIHZvaWQgRGly
ZWN0RXZhbENvZGVDYWNoZTo6Y2xlYXIoKQogICAgIG1fY2FjaGVNYXAuY2xlYXIoKTsKIH0KIAot
dm9pZCBEaXJlY3RFdmFsQ29kZUNhY2hlOjp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYgdmlz
aXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIERpcmVjdEV2YWxDb2RlQ2Fj
aGU6OnZpc2l0QWdncmVnYXRlSW1wbChWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIExvY2tIb2xk
ZXIgbG9ja2VyKG1fbG9jayk7CiAgICAgRXZhbENhY2hlTWFwOjppdGVyYXRvciBlbmQgPSBtX2Nh
Y2hlTWFwLmVuZCgpOwpAQCAtNTMsNSArNTQsNiBAQCB2b2lkIERpcmVjdEV2YWxDb2RlQ2FjaGU6
OnZpc2l0QWdncmVnYXRlCiAgICAgICAgIHZpc2l0b3IuYXBwZW5kKHB0ci0+dmFsdWUpOwogfQog
Ci19IC8vIG5hbWVzcGFjZSBKU0MKK0RFRklORV9WSVNJVF9BR0dSRUdBVEUoRGlyZWN0RXZhbENv
ZGVDYWNoZSk7CiAKK30gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0RpcmVjdEV2YWxDb2RlQ2FjaGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRGlyZWN0RXZhbENvZGVDYWNoZS5oCShyZXZpc2lvbiAy
NzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRGlyZWN0RXZhbENvZGVD
YWNoZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAwOC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAwOC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtOTcsNyArOTcsNyBAQCBuYW1lc3BhY2UgSlNDIHsK
IAogICAgICAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBtX2NhY2hlTWFwLmlzRW1w
dHkoKTsgfQogCi0gICAgICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImKTsKKyAg
ICAgICAgREVDTEFSRV9WSVNJVF9BR0dSRUdBVEU7CiAKICAgICAgICAgdm9pZCBjbGVhcigpOwog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhlY3V0YWJsZVRvQ29kZUJs
b2NrRWRnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0V4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE4
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOC0y
MDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtNTMsNyArNTMsOCBAQCB2b2lkIEV4ZWN1dGFibGVUb0NvZGVCbG9ja0Vk
Z2U6OmZpbmlzaENyCiAgICAgQVNTRVJUKCFpc0FjdGl2ZSgpKTsKIH0KIAotdm9pZCBFeGVjdXRh
YmxlVG9Db2RlQmxvY2tFZGdlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0
b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBFeGVjdXRhYmxl
VG9Db2RlQmxvY2tFZGdlOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3Im
IHZpc2l0b3IpCiB7CiAgICAgVk0mIHZtID0gdmlzaXRvci52bSgpOwogICAgIEV4ZWN1dGFibGVU
b0NvZGVCbG9ja0VkZ2UqIGVkZ2UgPSBqc0Nhc3Q8RXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZSo+
KGNlbGwpOwpAQCAtNjEsNyArNjIsNyBAQCB2b2lkIEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2U6
OnZpc2l0Q2hpCiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbihjZWxsLCB2aXNpdG9yKTsKIAogICAg
IENvZGVCbG9jayogY29kZUJsb2NrID0gZWRnZS0+bV9jb2RlQmxvY2suZ2V0KCk7Ci0gICAgCisK
ICAgICAvLyBJdCdzIHBvc3NpYmxlIGZvciBzb21lb25lIHRvIGhvbGQgYSBwb2ludGVyIHRvIHRo
ZSBlZGdlIGFmdGVyIHRoZSBlZGdlIGhhcyBjbGVhcmVkIGl0cyB3ZWFrCiAgICAgLy8gcmVmZXJl
bmNlIHRvIHRoZSBjb2RlQmxvY2suIEluIGEgY29uc2VydmF0aXZlIEdDIGxpa2Ugb3VycywgdGhh
dCBjb3VsZCBoYXBwZW4gYXQgcmFuZG9tIGZvcgogICAgIC8vIG5vIGdvb2QgcmVhc29uIGFuZCBp
dCdzIFRvdGFsbHkgT0sgKFRNKS4gU2VlIGZpbmFsaXplVW5jb25kaXRpb25hbGx5KCkgZm9yIHdo
ZXJlIHdlIGNsZWFyCkBAIC03NSwxMSArNzYsMTEgQEAgdm9pZCBFeGVjdXRhYmxlVG9Db2RlQmxv
Y2tFZGdlOjp2aXNpdENoaQogICAgIH0KICAgICAKICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9j
a2VyKGNvZGVCbG9jay0+bV9sb2NrKTsKLSAgICAKLSAgICBpZiAoY29kZUJsb2NrLT5zaG91bGRW
aXNpdFN0cm9uZ2x5KGxvY2tlcikpCisKKyAgICBpZiAoY29kZUJsb2NrLT5zaG91bGRWaXNpdFN0
cm9uZ2x5KGxvY2tlciwgdmlzaXRvcikpCiAgICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVy
ZWQoY29kZUJsb2NrKTsKICAgICAKLSAgICBpZiAoIXZtLmhlYXAuaXNNYXJrZWQoY29kZUJsb2Nr
KSkKKyAgICBpZiAoIXZpc2l0b3IuaXNNYXJrZWQoY29kZUJsb2NrKSkKICAgICAgICAgdm0uZXhl
Y3V0YWJsZVRvQ29kZUJsb2NrRWRnZXNXaXRoRmluYWxpemVycy5hZGQoZWRnZSk7CiAgICAgCiAg
ICAgaWYgKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChjb2RlQmxvY2stPmppdFR5cGUoKSkpIHsK
QEAgLTExNyw3ICsxMTgsOSBAQCB2b2lkIEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2U6OnZpc2l0
Q2hpCiAgICAgZWRnZS0+cnVuQ29uc3RyYWludChsb2NrZXIsIHZtLCB2aXNpdG9yKTsKIH0KIAot
dm9pZCBFeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzKEpT
Q2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCitERUZJTkVfVklTSVRfQ0hJTERSRU4o
RXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZSk7CisKK3ZvaWQgRXhlY3V0YWJsZVRvQ29kZUJsb2Nr
RWRnZTo6dmlzaXRPdXRwdXRDb25zdHJhaW50cyhKU0NlbGwqIGNlbGwsIEFic3RyYWN0U2xvdFZp
c2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgVk0mIHZtID0gdmlzaXRvci52bSgpOwogICAgIEV4ZWN1
dGFibGVUb0NvZGVCbG9ja0VkZ2UqIGVkZ2UgPSBqc0Nhc3Q8RXhlY3V0YWJsZVRvQ29kZUJsb2Nr
RWRnZSo+KGNlbGwpOwpAQCAtMTg2LDE0ICsxODksMTQgQEAgRXhlY3V0YWJsZVRvQ29kZUJsb2Nr
RWRnZTo6RXhlY3V0YWJsZVRvQwogewogfQogCi12b2lkIEV4ZWN1dGFibGVUb0NvZGVCbG9ja0Vk
Z2U6OnJ1bkNvbnN0cmFpbnQoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiBsb2NrZXIsIFZNJiB2
bSwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2U6
OnJ1bkNvbnN0cmFpbnQoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiBsb2NrZXIsIFZNJiB2bSwg
QWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9j
ayA9IG1fY29kZUJsb2NrLmdldCgpOwogICAgIAogICAgIGNvZGVCbG9jay0+cHJvcGFnYXRlVHJh
bnNpdGlvbnMobG9ja2VyLCB2aXNpdG9yKTsKICAgICBjb2RlQmxvY2stPmRldGVybWluZUxpdmVu
ZXNzKGxvY2tlciwgdmlzaXRvcik7Ci0gICAgCi0gICAgaWYgKHZtLmhlYXAuaXNNYXJrZWQoY29k
ZUJsb2NrKSkKKworICAgIGlmICh2aXNpdG9yLmlzTWFya2VkKGNvZGVCbG9jaykpCiAgICAgICAg
IHZtLmV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2VzV2l0aENvbnN0cmFpbnRzLnJlbW92ZSh0aGlz
KTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGFibGVU
b0NvZGVCbG9ja0VkZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZS5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
OC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxOC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtNTMsOSArNTMsOSBAQCBwdWJsaWM6CiAgICAgREVDTEFSRV9J
TkZPOwogCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2soKSBjb25zdCB7IHJldHVybiBtX2NvZGVC
bG9jay5nZXQoKTsgfQotICAgIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiwgU2xvdFZpc2l0b3ImKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdE91dHB1dENvbnN0cmFpbnRz
KEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwor
ICAgIHN0YXRpYyB2b2lkIHZpc2l0T3V0cHV0Q29uc3RyYWludHMoSlNDZWxsKiwgQWJzdHJhY3RT
bG90VmlzaXRvciYpOwogICAgIHZvaWQgZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoVk0mKTsKICAg
ICAKICAgICBzdGF0aWMgQ29kZUJsb2NrKiB1bndyYXAoRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRn
ZSogZWRnZSkKQEAgLTgxLDkgKzgxLDkgQEAgcHJpdmF0ZToKICAgICB2b2lkIGFjdGl2YXRlKCk7
CiAgICAgdm9pZCBkZWFjdGl2YXRlKCk7CiAgICAgYm9vbCBpc0FjdGl2ZSgpIGNvbnN0OwotICAg
IAotICAgIHZvaWQgcnVuQ29uc3RyYWludChjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBWTSYs
IFNsb3RWaXNpdG9yJik7Ci0gICAgCisKKyAgICB2b2lkIHJ1bkNvbnN0cmFpbnQoY29uc3QgQ29u
Y3VycmVudEpTTG9ja2VyJiwgVk0mLCBBYnN0cmFjdFNsb3RWaXNpdG9yJik7CisKICAgICBXcml0
ZUJhcnJpZXI8Q29kZUJsb2NrPiBtX2NvZGVCbG9jazsKIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkVmFyaWFudC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRWYXJpYW50LmNwcAkocmV2aXNpb24g
MjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRWYXJpYW50
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTQtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTQtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE1NiwxMiArMTU2LDE1IEBAIGJvb2wgR2V0QnlJZFZh
cmlhbnQ6OmF0dGVtcHRUb01lcmdlKGNvbnMKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBH
ZXRCeUlkVmFyaWFudDo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1w
bGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBHZXRCeUlkVmFyaWFudDo6dmlzaXRBZ2dyZWdh
dGVJbXBsKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgbV9pZGVudGlmaWVyLnZpc2l0QWdncmVn
YXRlKHZpc2l0b3IpOwogfQogCi12b2lkIEdldEJ5SWRWYXJpYW50OjptYXJrSWZDaGVhcChTbG90
VmlzaXRvciYgdmlzaXRvcikKK0RFRklORV9WSVNJVF9BR0dSRUdBVEUoR2V0QnlJZFZhcmlhbnQp
OworCit2b2lkIEdldEJ5SWRWYXJpYW50OjptYXJrSWZDaGVhcChBYnN0cmFjdFNsb3RWaXNpdG9y
JiB2aXNpdG9yKQogewogICAgIG1fc3RydWN0dXJlU2V0Lm1hcmtJZkNoZWFwKHZpc2l0b3IpOwog
fQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRWYXJpYW50LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRWYXJp
YW50LmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9HZXRCeUlkVmFyaWFudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxNC0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNzcsOCArNzcsOCBAQCBwdWJs
aWM6CiAKICAgICBib29sIGF0dGVtcHRUb01lcmdlKGNvbnN0IEdldEJ5SWRWYXJpYW50JiBvdGhl
cik7CiAgICAgCi0gICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYpOwotICAgIHZv
aWQgbWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0FHR1JFR0FU
RTsKKyAgICB2b2lkIG1hcmtJZkNoZWFwKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKICAgICBib29s
IGZpbmFsaXplKFZNJik7CiAgICAgCiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlTdGF0dXMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeVN0YXR1cy5j
cHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9H
ZXRCeVN0YXR1cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDEyLTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEyLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01MzAsNyArNTMwLDggQEAgdm9pZCBH
ZXRCeVN0YXR1czo6ZmlsdGVyKGNvbnN0IFN0cnVjdHVyZQogICAgICAgICBtX3N0YXRlID0gTm9J
bmZvcm1hdGlvbjsKIH0KIAotdm9pZCBHZXRCeVN0YXR1czo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZp
c2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBHZXRCeVN0
YXR1czo6dmlzaXRBZ2dyZWdhdGVJbXBsKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgaWYgKGlz
TW9kdWxlTmFtZXNwYWNlKCkpCiAgICAgICAgIG1fbW9kdWxlTmFtZXNwYWNlRGF0YS0+bV9pZGVu
dGlmaWVyLnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOwpAQCAtNTM4LDcgKzUzOSw5IEBAIHZvaWQg
R2V0QnlTdGF0dXM6OnZpc2l0QWdncmVnYXRlKFNsb3RWaXMKICAgICAgICAgdmFyaWFudC52aXNp
dEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKIH0KIAotdm9pZCBHZXRCeVN0YXR1czo6bWFya0lmQ2hlYXAo
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCitERUZJTkVfVklTSVRfQUdHUkVHQVRFKEdldEJ5U3RhdHVz
KTsKKwordm9pZCBHZXRCeVN0YXR1czo6bWFya0lmQ2hlYXAoQWJzdHJhY3RTbG90VmlzaXRvciYg
dmlzaXRvcikKIHsKICAgICBmb3IgKEdldEJ5SWRWYXJpYW50JiB2YXJpYW50IDogbV92YXJpYW50
cykKICAgICAgICAgdmFyaWFudC5tYXJrSWZDaGVhcCh2aXNpdG9yKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeVN0YXR1cy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeVN0YXR1cy5oCShyZXZpc2lvbiAyNzI4MzAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlTdGF0dXMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTExOCw4ICsxMTgsOCBAQCBwdWJsaWM6CiAgICAgSlNNb2R1bGVFbnZpcm9u
bWVudCogbW9kdWxlRW52aXJvbm1lbnQoKSBjb25zdCB7IHJldHVybiBtX21vZHVsZU5hbWVzcGFj
ZURhdGEtPm1fbW9kdWxlRW52aXJvbm1lbnQ7IH0KICAgICBTY29wZU9mZnNldCBzY29wZU9mZnNl
dCgpIGNvbnN0IHsgcmV0dXJuIG1fbW9kdWxlTmFtZXNwYWNlRGF0YS0+bV9zY29wZU9mZnNldDsg
fQogICAgIAotICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImKTsKLSAgICB2b2lk
IG1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9BR0dSRUdBVEU7
CisgICAgdm9pZCBtYXJrSWZDaGVhcChBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAgICAgYm9vbCBm
aW5hbGl6ZShWTSYpOyAvLyBSZXR1cm4gdHJ1ZSBpZiB0aGlzIGdldHMgdG8gbGl2ZS4KIAogICAg
IGJvb2wgYXBwZW5kVmFyaWFudChjb25zdCBHZXRCeUlkVmFyaWFudCYpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luQnlJZFN0YXR1cy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luQnlJZFN0YXR1cy5jcHAJKHJldmlzaW9u
IDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbkJ5SWRTdGF0dXMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykg
MjAxOCBZdXN1a2UgU3V6dWtpIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+LgotICogQ29weXJpZ2h0
IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxOC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjUxLDcgKzI1MSw3IEBAIHZvaWQgSW5CeUlkU3RhdHVz
OjpmaWx0ZXIoY29uc3QgU3RydWN0dXIKICAgICAgICAgbV9zdGF0ZSA9IE5vSW5mb3JtYXRpb247
CiB9CiAKLXZvaWQgSW5CeUlkU3RhdHVzOjptYXJrSWZDaGVhcChTbG90VmlzaXRvciYgdmlzaXRv
cikKK3ZvaWQgSW5CeUlkU3RhdHVzOjptYXJrSWZDaGVhcChBYnN0cmFjdFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQogewogICAgIGZvciAoSW5CeUlkVmFyaWFudCYgdmFyaWFudCA6IG1fdmFyaWFudHMp
CiAgICAgICAgIHZhcmlhbnQubWFya0lmQ2hlYXAodmlzaXRvcik7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5CeUlkU3RhdHVzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luQnlJZFN0YXR1cy5oCShyZXZpc2lvbiAyNzI4MzAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5CeUlkU3RhdHVzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDE4IFl1c3Vr
ZSBTdXp1a2kgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4uCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTgg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE4LTIw
MjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0xMDYsNyArMTA2LDcgQEAgcHVibGljOgogICAgIC8vIEF0dGVtcHRzIHRv
IHJlZHVjZSB0aGUgc2V0IG9mIHZhcmlhbnRzIHRvIGZpdCB0aGUgZ2l2ZW4gc3RydWN0dXJlIHNl
dC4gVGhpcyBtYXkgYmUgYXBwcm94aW1hdGUuCiAgICAgdm9pZCBmaWx0ZXIoY29uc3QgU3RydWN0
dXJlU2V0Jik7CiAgICAgCi0gICAgdm9pZCBtYXJrSWZDaGVhcChTbG90VmlzaXRvciYpOworICAg
IHZvaWQgbWFya0lmQ2hlYXAoQWJzdHJhY3RTbG90VmlzaXRvciYpOwogICAgIGJvb2wgZmluYWxp
emUoVk0mKTsKIAogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luQnlJZFZhcmlhbnQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbkJ5SWRWYXJpYW50LmNwcAkocmV2
aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luQnlJZFZh
cmlhbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENvcHlyaWdo
dCAoQykgMjAxOCBZdXN1a2UgU3V6dWtpIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+LgotICogQ29w
eXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxOC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjQsNyArNjQsNyBAQCBib29sIEluQnlJZFZh
cmlhbnQ6OmF0dGVtcHRUb01lcmdlKGNvbnN0CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQg
SW5CeUlkVmFyaWFudDo6bWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIElu
QnlJZFZhcmlhbnQ6Om1hcmtJZkNoZWFwKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7
CiAgICAgbV9zdHJ1Y3R1cmVTZXQubWFya0lmQ2hlYXAodmlzaXRvcik7CiB9CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5CeUlkVmFyaWFudC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbkJ5SWRWYXJpYW50LmgJKHJldmlzaW9u
IDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbkJ5SWRWYXJpYW50
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAy
MDE4IFl1c3VrZSBTdXp1a2kgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4uCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE4LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC01Nyw3ICs1Nyw3IEBAIHB1YmxpYzoKIAogICAgIGJvb2wg
YXR0ZW1wdFRvTWVyZ2UoY29uc3QgSW5CeUlkVmFyaWFudCYgb3RoZXIpOwogICAgIAotICAgIHZv
aWQgbWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImKTsKKyAgICB2b2lkIG1hcmtJZkNoZWFwKEFic3Ry
YWN0U2xvdFZpc2l0b3ImKTsKICAgICBib29sIGZpbmFsaXplKFZNJik7CiAKICAgICB2b2lkIGR1
bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9JbnRlcm5hbEZ1bmN0aW9uQWxsb2NhdGlvblByb2ZpbGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW50ZXJuYWxGdW5jdGlvbkFsbG9jYXRpb25Q
cm9maWxlLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9JbnRlcm5hbEZ1bmN0aW9uQWxsb2NhdGlvblByb2ZpbGUuaAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTM5LDcgKzM5LDcgQEAgcHVibGljOgogICAgIFN0cnVjdHVyZSogY3JlYXRlQWxsb2NhdGlv
blN0cnVjdHVyZUZyb21CYXNlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU0NlbGwqIG93bmVyLCBK
U09iamVjdCogcHJvdG90eXBlLCBTdHJ1Y3R1cmUqIGJhc2UpOwogCiAgICAgdm9pZCBjbGVhcigp
IHsgbV9zdHJ1Y3R1cmUuY2xlYXIoKTsgfQotICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZp
c2l0b3ImIHZpc2l0b3IpIHsgdmlzaXRvci5hcHBlbmQobV9zdHJ1Y3R1cmUpOyB9CisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCB2aXNpdEFnZ3JlZ2F0ZShWaXNpdG9yJiB2aXNp
dG9yKSB7IHZpc2l0b3IuYXBwZW5kKG1fc3RydWN0dXJlKTsgfQogCiBwcml2YXRlOgogICAgIFdy
aXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1fc3RydWN0dXJlOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL09iamVjdEFsbG9jYXRpb25Qcm9maWxlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09iamVjdEFsbG9jYXRpb25Qcm9maWxlLmgJ
KHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PYmpl
Y3RBbGxvY2F0aW9uUHJvZmlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjQsNyArNjQsOCBAQCBw
cm90ZWN0ZWQ6CiAgICAgICAgIEFTU0VSVChpc051bGwoKSk7CiAgICAgfQogCi0gICAgdm9pZCB2
aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYgdmlzaXRvcikKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBWaXNpdG9yPgorICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoVmlzaXRvciYgdmlzaXRvcikKICAg
ICB7CiAgICAgICAgIHZpc2l0b3IuYXBwZW5kKG1fc3RydWN0dXJlKTsKICAgICB9CkBAIC0xMTAs
NyArMTExLDggQEAgcHVibGljOgogICAgICAgICBBU1NFUlQoaXNOdWxsKCkpOwogICAgIH0KIAot
ICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgVmlzaXRvcj4KKyAgICB2b2lkIHZpc2l0QWdncmVnYXRlKFZpc2l0b3ImIHZp
c2l0b3IpCiAgICAgewogICAgICAgICBCYXNlOjp2aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKICAg
ICAgICAgdmlzaXRvci5hcHBlbmQobV9wcm90b3R5cGUpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwCShyZXZpc2lv
biAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNB
Y2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxNC0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzU4LDcgKzM1OCw3IEBAIGJvb2wgUG9seW1v
cnBoaWNBY2Nlc3M6OnZpc2l0V2VhayhWTSYgdm0KICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9v
bCBQb2x5bW9ycGhpY0FjY2Vzczo6cHJvcGFnYXRlVHJhbnNpdGlvbnMoU2xvdFZpc2l0b3ImIHZp
c2l0b3IpIGNvbnN0Citib29sIFBvbHltb3JwaGljQWNjZXNzOjpwcm9wYWdhdGVUcmFuc2l0aW9u
cyhBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBjb25zdAogewogICAgIGJvb2wgcmVzdWx0
ID0gdHJ1ZTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZSgpOyArK2kpCkBAIC0z
NjYsMTIgKzM2NiwxNSBAQCBib29sIFBvbHltb3JwaGljQWNjZXNzOjpwcm9wYWdhdGVUcmFuc2l0
CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotdm9pZCBQb2x5bW9ycGhpY0FjY2Vzczo6dmlzaXRB
Z2dyZWdhdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
Pgordm9pZCBQb2x5bW9ycGhpY0FjY2Vzczo6dmlzaXRBZ2dyZWdhdGVJbXBsKFZpc2l0b3ImIHZp
c2l0b3IpCiB7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemUoKTsgKytpKQogICAg
ICAgICBhdChpKS52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKIH0KIAorREVGSU5FX1ZJU0lUX0FH
R1JFR0FURShQb2x5bW9ycGhpY0FjY2Vzcyk7CisKIHZvaWQgUG9seW1vcnBoaWNBY2Nlc3M6OmR1
bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKIHsKICAgICBvdXQucHJpbnQoUmF3UG9pbnRlcih0
aGlzKSwgIjpbIik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1v
cnBoaWNBY2Nlc3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvUG9seW1vcnBoaWNBY2Nlc3MuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMjAgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0xNTIsMTQgKzE1MiwxNCBAQCBwdWJsaWM6CiAgICAgY29uc3QgQWNjZXNzQ2FzZSYgYXQodW5z
aWduZWQgaSkgY29uc3QgeyByZXR1cm4gKm1fbGlzdFtpXTsgfQogICAgIGNvbnN0IEFjY2Vzc0Nh
c2UmIG9wZXJhdG9yW10odW5zaWduZWQgaSkgY29uc3QgeyByZXR1cm4gKm1fbGlzdFtpXTsgfQog
Ci0gICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklT
SVRfQUdHUkVHQVRFOwogCiAgICAgLy8gSWYgdGhpcyByZXR1cm5zIGZhbHNlIHRoZW4gd2UgYXJl
IHJlcXVlc3RpbmcgYSByZXNldCBvZiB0aGUgb3duaW5nIFN0cnVjdHVyZVN0dWJJbmZvLgogICAg
IGJvb2wgdmlzaXRXZWFrKFZNJikgY29uc3Q7CiAgICAgCiAgICAgLy8gVGhpcyByZXR1cm5zIHRy
dWUgaWYgaXQgaGFzIG1hcmtlZCBldmVyeXRoaW5nIGl0IHdpbGwgZXZlciBtYXJrZWQuIFRoaXMg
Y2FuIGJlIHVzZWQgYXMgYW4KICAgICAvLyBvcHRpbWl6YXRpb24gdG8gdGhlbiBhdm9pZCBjYWxs
aW5nIHRoaXMgbWV0aG9kIGFnYWluIGR1cmluZyB0aGUgZml4cG9pbnQuCi0gICAgYm9vbCBwcm9w
YWdhdGVUcmFuc2l0aW9ucyhTbG90VmlzaXRvciYpIGNvbnN0OworICAgIGJvb2wgcHJvcGFnYXRl
VHJhbnNpdGlvbnMoQWJzdHJhY3RTbG90VmlzaXRvciYpIGNvbnN0OwogCiAgICAgdm9pZCBhYm91
dFRvRGllKCk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlk
U3RhdHVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
UHV0QnlJZFN0YXR1cy5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM5Niw3
ICszOTYsNyBAQCBQdXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OnNsb3dWZXJzaW9uCiAgICAg
cmV0dXJuIFB1dEJ5SWRTdGF0dXMobWFrZXNDYWxscygpID8gTWFrZXNDYWxscyA6IFRha2VzU2xv
d1BhdGgpOwogfQogCi12b2lkIFB1dEJ5SWRTdGF0dXM6Om1hcmtJZkNoZWFwKFNsb3RWaXNpdG9y
JiB2aXNpdG9yKQordm9pZCBQdXRCeUlkU3RhdHVzOjptYXJrSWZDaGVhcChBYnN0cmFjdFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQogewogICAgIGZvciAoUHV0QnlJZFZhcmlhbnQmIHZhcmlhbnQgOiBt
X3ZhcmlhbnRzKQogICAgICAgICB2YXJpYW50Lm1hcmtJZkNoZWFwKHZpc2l0b3IpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5oCShyZXZp
c2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0
YXR1cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMi0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTE3LDcgKzExNyw3IEBAIHB1YmxpYzoKICAgICBj
b25zdCBQdXRCeUlkVmFyaWFudCYgYXQoc2l6ZV90IGluZGV4KSBjb25zdCB7IHJldHVybiBtX3Zh
cmlhbnRzW2luZGV4XTsgfQogICAgIGNvbnN0IFB1dEJ5SWRWYXJpYW50JiBvcGVyYXRvcltdKHNp
emVfdCBpbmRleCkgY29uc3QgeyByZXR1cm4gYXQoaW5kZXgpOyB9CiAgICAgCi0gICAgdm9pZCBt
YXJrSWZDaGVhcChTbG90VmlzaXRvciYpOworICAgIHZvaWQgbWFya0lmQ2hlYXAoQWJzdHJhY3RT
bG90VmlzaXRvciYpOwogICAgIGJvb2wgZmluYWxpemUoVk0mKTsKICAgICAKICAgICB2b2lkIG1l
cmdlKGNvbnN0IFB1dEJ5SWRTdGF0dXMmKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9QdXRCeUlkVmFyaWFudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmNwcAkocmV2aXNpb24gMjcyODMwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxOCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTI2Miw3ICsyNjIsNyBAQCBib29sIFB1dEJ5SWRWYXJpYW50OjphdHRlbXB0
VG9NZXJnZVRyYW5zCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgUHV0QnlJZFZhcmlhbnQ6
Om1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBQdXRCeUlkVmFyaWFudDo6
bWFya0lmQ2hlYXAoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBtX29sZFN0
cnVjdHVyZS5tYXJrSWZDaGVhcCh2aXNpdG9yKTsKICAgICBpZiAobV9uZXdTdHJ1Y3R1cmUpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQu
aAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1
dEJ5SWRWYXJpYW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDE0LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE0LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMzIsNyArMTMyLDcgQEAgcHVibGlj
OgogCiAgICAgYm9vbCBhdHRlbXB0VG9NZXJnZShjb25zdCBQdXRCeUlkVmFyaWFudCYgb3RoZXIp
OwogICAgIAotICAgIHZvaWQgbWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImKTsKKyAgICB2b2lkIG1h
cmtJZkNoZWFwKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKICAgICBib29sIGZpbmFsaXplKFZNJik7
CiAgICAgCiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUmVjb3JkZWRTdGF0dXNlcy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1JlY29yZGVkU3RhdHVzZXMuY3BwCShy
ZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUmVjb3Jk
ZWRTdGF0dXNlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMiw3ICsxMDIsOCBAQCBTZXRQcml2
YXRlQnJhbmRTdGF0dXMqIFJlY29yZGVkU3RhdHVzZXM6CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0K
IAotdm9pZCBSZWNvcmRlZFN0YXR1c2VzOjp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYgdmlz
aXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFJlY29yZGVkU3RhdHVzZXM6
OnZpc2l0QWdncmVnYXRlSW1wbChWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGZvciAoYXV0byYg
cGFpciA6IGdldHMpCiAgICAgICAgIHBhaXIuc2Vjb25kLT52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9y
KTsKQEAgLTExNCw3ICsxMTUsOSBAQCB2b2lkIFJlY29yZGVkU3RhdHVzZXM6OnZpc2l0QWdncmVn
YXRlKFNsCiAgICAgICAgIHBhaXIuc2Vjb25kLT52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKIH0K
IAotdm9pZCBSZWNvcmRlZFN0YXR1c2VzOjptYXJrSWZDaGVhcChTbG90VmlzaXRvciYgdmlzaXRv
cikKK0RFRklORV9WSVNJVF9BR0dSRUdBVEUoUmVjb3JkZWRTdGF0dXNlcyk7CisKK3ZvaWQgUmVj
b3JkZWRTdGF0dXNlczo6bWFya0lmQ2hlYXAoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikK
IHsKICAgICBmb3IgKGF1dG8mIHBhaXIgOiBnZXRzKQogICAgICAgICBwYWlyLnNlY29uZC0+bWFy
a0lmQ2hlYXAodmlzaXRvcik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
UmVjb3JkZWRTdGF0dXNlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9SZWNvcmRlZFN0YXR1c2VzLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9SZWNvcmRlZFN0YXR1c2VzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMjAgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMjEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC01NCw4ICs1NCw5IEBAIHN0cnVjdCBSZWNvcmRlZFN0YXR1c2VzIHsKICAgICBDaGVja1By
aXZhdGVCcmFuZFN0YXR1cyogYWRkQ2hlY2tQcml2YXRlQnJhbmRTdGF0dXMoY29uc3QgQ29kZU9y
aWdpbiYsIGNvbnN0IENoZWNrUHJpdmF0ZUJyYW5kU3RhdHVzJik7CiAgICAgU2V0UHJpdmF0ZUJy
YW5kU3RhdHVzKiBhZGRTZXRQcml2YXRlQnJhbmRTdGF0dXMoY29uc3QgQ29kZU9yaWdpbiYsIGNv
bnN0IFNldFByaXZhdGVCcmFuZFN0YXR1cyYpOwogICAgIAotICAgIHZvaWQgdmlzaXRBZ2dyZWdh
dGUoU2xvdFZpc2l0b3ImKTsKLSAgICB2b2lkIG1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJik7Cisv
LyAgICB2b2lkIHZpc2l0QWdncmVnYXRlKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKKyAgICBERUNM
QVJFX1ZJU0lUX0FHR1JFR0FURTsKKyAgICB2b2lkIG1hcmtJZkNoZWFwKEFic3RyYWN0U2xvdFZp
c2l0b3ImKTsKICAgICAKICAgICB2b2lkIGZpbmFsaXplV2l0aG91dERlbGV0aW5nKFZNJik7CiAg
ICAgdm9pZCBmaW5hbGl6ZShWTSYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1NldFByaXZhdGVCcmFuZFN0YXR1cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1NldFByaXZhdGVCcmFuZFN0YXR1cy5jcHAJKHJldmlzaW9uIDI3
MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TZXRQcml2YXRlQnJhbmRT
dGF0dXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzUsMTMgKzIzNSwxNiBAQCBDYWNoZWFibGVJ
ZGVudGlmaWVyIFNldFByaXZhdGVCcmFuZFN0YXR1CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAot
dm9pZCBTZXRQcml2YXRlQnJhbmRTdGF0dXM6OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgU2V0UHJpdmF0ZUJyYW5k
U3RhdHVzOjp2aXNpdEFnZ3JlZ2F0ZUltcGwoVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBmb3Ig
KFNldFByaXZhdGVCcmFuZFZhcmlhbnQmIHZhcmlhbnQgOiBtX3ZhcmlhbnRzKQogICAgICAgICB2
YXJpYW50LnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOwogfQogCi12b2lkIFNldFByaXZhdGVCcmFu
ZFN0YXR1czo6bWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCitERUZJTkVfVklTSVRf
QUdHUkVHQVRFKFNldFByaXZhdGVCcmFuZFN0YXR1cyk7CisKK3ZvaWQgU2V0UHJpdmF0ZUJyYW5k
U3RhdHVzOjptYXJrSWZDaGVhcChBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAg
IGZvciAoU2V0UHJpdmF0ZUJyYW5kVmFyaWFudCYgdmFyaWFudCA6IG1fdmFyaWFudHMpCiAgICAg
ICAgIHZhcmlhbnQubWFya0lmQ2hlYXAodmlzaXRvcik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvU2V0UHJpdmF0ZUJyYW5kU3RhdHVzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NldFByaXZhdGVCcmFuZFN0YXR1cy5oCShyZXZp
c2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU2V0UHJpdmF0
ZUJyYW5kU3RhdHVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTgzLDggKzgzLDggQEAgcHVibGljOgog
ICAgIC8vIEF0dGVtcHRzIHRvIHJlZHVjZSB0aGUgc2V0IG9mIHZhcmlhbnRzIHRvIGZpdCB0aGUg
Z2l2ZW4gc3RydWN0dXJlIHNldC4gVGhpcyBtYXkgYmUgYXBwcm94aW1hdGUuCiAgICAgdm9pZCBm
aWx0ZXIoY29uc3QgU3RydWN0dXJlU2V0Jik7CiAKLSAgICB2b2lkIHZpc2l0QWdncmVnYXRlKFNs
b3RWaXNpdG9yJik7Ci0gICAgdm9pZCBtYXJrSWZDaGVhcChTbG90VmlzaXRvciYpOworICAgIERF
Q0xBUkVfVklTSVRfQUdHUkVHQVRFOworICAgIHZvaWQgbWFya0lmQ2hlYXAoQWJzdHJhY3RTbG90
VmlzaXRvciYpOwogICAgIGJvb2wgZmluYWxpemUoVk0mKTsKIAogICAgIGJvb2wgYXBwZW5kVmFy
aWFudChjb25zdCBTZXRQcml2YXRlQnJhbmRWYXJpYW50Jik7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvU2V0UHJpdmF0ZUJyYW5kVmFyaWFudC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NldFByaXZhdGVCcmFuZFZhcmlhbnQu
Y3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
U2V0UHJpdmF0ZUJyYW5kVmFyaWFudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAyMSBJZ2FsaWEgUy5BLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtNTQsNyArNTQsNyBAQCBib29sIFNldFByaXZhdGVC
cmFuZFZhcmlhbnQ6OmF0dGVtcHRUb01lCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgU2V0
UHJpdmF0ZUJyYW5kVmFyaWFudDo6bWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2
b2lkIFNldFByaXZhdGVCcmFuZFZhcmlhbnQ6Om1hcmtJZkNoZWFwKEFic3RyYWN0U2xvdFZpc2l0
b3ImIHZpc2l0b3IpCiB7CiAgICAgaWYgKG1fb2xkU3RydWN0dXJlKQogICAgICAgICBtX29sZFN0
cnVjdHVyZS0+bWFya0lmQ2hlYXAodmlzaXRvcik7CkBAIC03MSwxMSArNzEsMTQgQEAgYm9vbCBT
ZXRQcml2YXRlQnJhbmRWYXJpYW50OjpmaW5hbGl6ZShWTQogICAgIHJldHVybiB0cnVlOwogfQog
Ci12b2lkIFNldFByaXZhdGVCcmFuZFZhcmlhbnQ6OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9y
JiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgU2V0UHJpdmF0ZUJy
YW5kVmFyaWFudDo6dmlzaXRBZ2dyZWdhdGVJbXBsKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAg
bV9pZGVudGlmaWVyLnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOwogfQogCitERUZJTkVfVklTSVRf
QUdHUkVHQVRFKFNldFByaXZhdGVCcmFuZFZhcmlhbnQpOworCiB2b2lkIFNldFByaXZhdGVCcmFu
ZFZhcmlhbnQ6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKIHsKICAgICBkdW1wSW5Db250
ZXh0KG91dCwgbnVsbHB0cik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
U2V0UHJpdmF0ZUJyYW5kVmFyaWFudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9TZXRQcml2YXRlQnJhbmRWYXJpYW50LmgJKHJldmlzaW9uIDI3MjgzMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TZXRQcml2YXRlQnJhbmRWYXJpYW50
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDggKzQ1LDkgQEAgcHVibGljOgogCiAgICAgYm9vbCBh
dHRlbXB0VG9NZXJnZShjb25zdCBTZXRQcml2YXRlQnJhbmRWYXJpYW50JiBvdGhlcik7CiAKLSAg
ICB2b2lkIHZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJik7Ci0gICAgdm9pZCBtYXJrSWZDaGVh
cChTbG90VmlzaXRvciYpOworLy8gICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShBYnN0cmFjdFNsb3RW
aXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9BR0dSRUdBVEU7CisgICAgdm9pZCBtYXJrSWZD
aGVhcChBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAgICAgYm9vbCBmaW5hbGl6ZShWTSYpOwogCiAg
ICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU2V0LmNwcAkocmV2aXNpb24gMjcyODMwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVNldC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTgg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIw
MjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0zMSw3ICszMSw3IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi12b2lkIFN0
cnVjdHVyZVNldDo6bWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0Cit2b2lk
IFN0cnVjdHVyZVNldDo6bWFya0lmQ2hlYXAoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikg
Y29uc3QKIHsKICAgICBmb3IgKFN0cnVjdHVyZSogc3RydWN0dXJlIDogKnRoaXMpCiAgICAgICAg
IHN0cnVjdHVyZS0+bWFya0lmQ2hlYXAodmlzaXRvcik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVNldC5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU2V0LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTggQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC01NCw3ICs1NCw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG9ubHlFbnRyeSgp
OwogICAgIH0KIAotICAgIHZvaWQgbWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImKSBjb25zdDsKKyAg
ICB2b2lkIG1hcmtJZkNoZWFwKEFic3RyYWN0U2xvdFZpc2l0b3ImKSBjb25zdDsKICAgICBib29s
IGlzU3RpbGxBbGl2ZShWTSYpIGNvbnN0OwogICAgIAogICAgIHZvaWQgZHVtcEluQ29udGV4dChQ
cmludFN0cmVhbSYsIER1bXBDb250ZXh0KikgY29uc3Q7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAJKHJldmlzaW9u
IDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHVi
SW5mby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDA4LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDA4LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOTYsNyArMjk2LDggQEAgdm9pZCBTdHJ1Y3R1
cmVTdHViSW5mbzo6cmVzZXQoY29uc3QgQ29uYwogICAgIHNldENhY2hlVHlwZShsb2NrZXIsIENh
Y2hlVHlwZTo6VW5zZXQpOwogfQogCi12b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjp2aXNpdEFnZ3Jl
Z2F0ZShTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2
b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjp2aXNpdEFnZ3JlZ2F0ZUltcGwoVmlzaXRvciYgdmlzaXRv
cikKIHsKICAgICB7CiAgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9idWZmZXJlZFN0
cnVjdHVyZXNMb2NrKTsKQEAgLTMyMiw2ICszMjMsOCBAQCB2b2lkIFN0cnVjdHVyZVN0dWJJbmZv
Ojp2aXNpdEFnZ3JlZ2F0ZShTCiAgICAgcmV0dXJuOwogfQogCitERUZJTkVfVklTSVRfQUdHUkVH
QVRFKFN0cnVjdHVyZVN0dWJJbmZvKTsKKwogdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6dmlzaXRX
ZWFrUmVmZXJlbmNlcyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXJCYXNlJiBsb2NrZXIsIENvZGVC
bG9jayogY29kZUJsb2NrKQogewogICAgIFZNJiB2bSA9IGNvZGVCbG9jay0+dm0oKTsKQEAgLTM1
Miw3ICszNTUsNyBAQCB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjp2aXNpdFdlYWtSZWZlcmVuCiAg
ICAgcmVzZXRCeUdDID0gdHJ1ZTsKIH0KIAotYm9vbCBTdHJ1Y3R1cmVTdHViSW5mbzo6cHJvcGFn
YXRlVHJhbnNpdGlvbnMoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCitib29sIFN0cnVjdHVyZVN0dWJJ
bmZvOjpwcm9wYWdhdGVUcmFuc2l0aW9ucyhBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQog
ewogICAgIHN3aXRjaCAobV9jYWNoZVR5cGUpIHsKICAgICBjYXNlIENhY2hlVHlwZTo6VW5zZXQ6
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8u
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJl
U3R1YkluZm8uaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC05MywxNCArOTMs
MTQgQEAgcHVibGljOgogICAgIHZvaWQgZGVyZWYoKTsKICAgICB2b2lkIGFib3V0VG9EaWUoKTsK
IAotICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJ
U0lUX0FHR1JFR0FURTsKIAogICAgIC8vIENoZWNrIGlmIHRoZSBzdHViIGhhcyB3ZWFrIHJlZmVy
ZW5jZXMgdGhhdCBhcmUgZGVhZC4gSWYgaXQgZG9lcywgdGhlbiBpdCByZXNldHMgaXRzZWxmLAog
ICAgIC8vIGVpdGhlciBlbnRpcmVseSBvciBqdXN0IGVub3VnaCB0byBlbnN1cmUgdGhhdCB0aG9z
ZSBkZWFkIHBvaW50ZXJzIGRvbid0IGdldCB1c2VkIGFueW1vcmUuCiAgICAgdm9pZCB2aXNpdFdl
YWtSZWZlcmVuY2VzKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlckJhc2UmLCBDb2RlQmxvY2sqKTsK
ICAgICAKICAgICAvLyBUaGlzIHJldHVybnMgdHJ1ZSBpZiBpdCBoYXMgbWFya2VkIGV2ZXJ5dGhp
bmcgdGhhdCBpdCB3aWxsIGV2ZXIgbWFyay4KLSAgICBib29sIHByb3BhZ2F0ZVRyYW5zaXRpb25z
KFNsb3RWaXNpdG9yJik7CisgICAgYm9vbCBwcm9wYWdhdGVUcmFuc2l0aW9ucyhBYnN0cmFjdFNs
b3RWaXNpdG9yJik7CiAgICAgICAgIAogICAgIFN0dWJJbmZvU3VtbWFyeSBzdW1tYXJ5KFZNJikg
Y29uc3Q7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5r
ZWRDb2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTkgQXBwbGUg
SW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjEgQXBw
bGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC03NSw3ICs3NSw4IEBAIFVubGlua2VkQ29kZUJsb2NrOjpVbmxpbmtlZENvZGVCbG9j
ayhWTSYKICAgICB9CiB9CiAKLXZvaWQgVW5saW5rZWRDb2RlQmxvY2s6OnZpc2l0Q2hpbGRyZW4o
SlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZp
c2l0b3I+Cit2b2lkIFVubGlua2VkQ29kZUJsb2NrOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwq
IGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgVW5saW5rZWRDb2RlQmxvY2sqIHRoaXNP
YmplY3QgPSBqc0Nhc3Q8VW5saW5rZWRDb2RlQmxvY2sqPihjZWxsKTsKICAgICBBU1NFUlRfR0Nf
T0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC05NCw2ICs5NSw4IEBAIHZv
aWQgVW5saW5rZWRDb2RlQmxvY2s6OnZpc2l0Q2hpbGRyZW4oSlMKICAgICB2aXNpdG9yLnJlcG9y
dEV4dHJhTWVtb3J5VmlzaXRlZChleHRyYU1lbW9yeSk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElM
RFJFTihVbmxpbmtlZENvZGVCbG9jayk7CisKIHNpemVfdCBVbmxpbmtlZENvZGVCbG9jazo6ZXN0
aW1hdGVkU2l6ZShKU0NlbGwqIGNlbGwsIFZNJiB2bSkKIHsKICAgICBVbmxpbmtlZENvZGVCbG9j
ayogdGhpc09iamVjdCA9IGpzQ2FzdDxVbmxpbmtlZENvZGVCbG9jayo+KGNlbGwpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2Nr
LmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9V
bmxpbmtlZENvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMi0yMDE5IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDIxIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDMxLDcgKzQzMSw3IEBAIHBy
aXZhdGU6CiAgICAgUmVmQ291bnRlZEFycmF5PEV4cHJlc3Npb25SYW5nZUluZm8+IG1fZXhwcmVz
c2lvbkluZm87CiAKIHByb3RlY3RlZDoKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpT
Q2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKICAgICBz
dGF0aWMgc2l6ZV90IGVzdGltYXRlZFNpemUoSlNDZWxsKiwgVk0mKTsKIAogcHVibGljOgpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkRnVuY3Rpb25FeGVjdXRh
YmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5s
aW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMi0y
MDE5IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
Mi0yMDIxIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMTQ2LDcgKzE0Niw4IEBAIHZvaWQgVW5saW5rZWRGdW5jdGlvbkV4
ZWN1dGFibGU6OmRlc3Ryb3kKICAgICBzdGF0aWNfY2FzdDxVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0
YWJsZSo+KGNlbGwpLT5+VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUoKTsKIH0KIAotdm9pZCBV
bmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgVW5s
aW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwg
VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSogdGhp
c09iamVjdCA9IGpzQ2FzdDxVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGNlbGwpOwogICAg
IEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTE2OSw2
ICsxNzAsOCBAQCB2b2lkIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlOjp2aXNpdENoCiAgICAg
fQogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUp
OworCiBTb3VyY2VDb2RlIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlOjpsaW5rZWRTb3VyY2VD
b2RlKGNvbnN0IFNvdXJjZUNvZGUmIHBhc3NlZFBhcmVudFNvdXJjZSkgY29uc3QKIHsKICAgICBj
b25zdCBTb3VyY2VDb2RlJiBwYXJlbnRTb3VyY2UgPSAhbV9pc0J1aWx0aW5EZWZhdWx0Q2xhc3ND
b25zdHJ1Y3RvciA/IHBhc3NlZFBhcmVudFNvdXJjZSA6IEJ1aWx0aW5FeGVjdXRhYmxlczo6ZGVm
YXVsdENvbnN0cnVjdG9yU291cmNlQ29kZShjb25zdHJ1Y3RvcktpbmQoKSk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRGdW5j
dGlvbkV4ZWN1dGFibGUuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1VubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTkgQXBwbGUgSW5j
LiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjEgQXBwbGUg
SW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC0yNDIsNyArMjQyLDcgQEAgcHJpdmF0ZToKICAgICBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0
YWJsZShWTSYsIFN0cnVjdHVyZSosIGNvbnN0IFNvdXJjZUNvZGUmLCBGdW5jdGlvbk1ldGFkYXRh
Tm9kZSosIFVubGlua2VkRnVuY3Rpb25LaW5kLCBDb25zdHJ1Y3RBYmlsaXR5LCBKU1BhcnNlclNj
cmlwdE1vZGUsIFJlZlB0cjxURFpFbnZpcm9ubWVudExpbms+LCBPcHRpb25hbDxQcml2YXRlTmFt
ZUVudmlyb25tZW50PiwgSlNDOjpEZXJpdmVkQ29udGV4dFR5cGUsIEpTQzo6TmVlZHNDbGFzc0Zp
ZWxkSW5pdGlhbGl6ZXIsIFByaXZhdGVCcmFuZFJlcXVpcmVtZW50LCBib29sIGlzQnVpbHRpbkRl
ZmF1bHRDbGFzc0NvbnN0cnVjdG9yKTsKICAgICBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZShE
ZWNvZGVyJiwgY29uc3QgQ2FjaGVkRnVuY3Rpb25FeGVjdXRhYmxlJik7CiAKLSAgICBzdGF0aWMg
dm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9W
SVNJVF9DSElMRFJFTjsKIAogICAgIHZvaWQgZGVjb2RlQ2FjaGVkQ29kZUJsb2NrcyhWTSYpOwog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXJTY29wZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyU2Nv
cGUuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdn
ZXIvRGVidWdnZXJTY29wZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01NSw3ICs1NSw4IEBAIHZv
aWQgRGVidWdnZXJTY29wZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHYKICAgICBCYXNlOjpmaW5pc2hD
cmVhdGlvbih2bSk7CiB9CiAKLXZvaWQgRGVidWdnZXJTY29wZTo6dmlzaXRDaGlsZHJlbihKU0Nl
bGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRv
cj4KK3ZvaWQgRGVidWdnZXJTY29wZTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBW
aXNpdG9yJiB2aXNpdG9yKQogewogICAgIERlYnVnZ2VyU2NvcGUqIHRoaXNPYmplY3QgPSBqc0Nh
c3Q8RGVidWdnZXJTY29wZSo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMo
dGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTY1LDYgKzY2LDggQEAgdm9pZCBEZWJ1Z2dlclNjb3Bl
Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbAogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1f
bmV4dCk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihEZWJ1Z2dlclNjb3BlKTsKKwogU3Ry
aW5nIERlYnVnZ2VyU2NvcGU6OmNsYXNzTmFtZShjb25zdCBKU09iamVjdCogb2JqZWN0LCBWTSYg
dm0pCiB7CiAgICAgY29uc3QgRGVidWdnZXJTY29wZSogc2NvcGUgPSBqc0Nhc3Q8Y29uc3QgRGVi
dWdnZXJTY29wZSo+KG9iamVjdCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdn
ZXIvRGVidWdnZXJTY29wZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZWJ1Z2dlci9EZWJ1Z2dlclNjb3BlLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlclNjb3BlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMjAgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00
Niw3ICs0Niw3IEBAIHB1YmxpYzoKIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBEZWJ1
Z2dlclNjb3BlKiBjcmVhdGUoVk0mIHZtLCBKU1Njb3BlKiBzY29wZSk7CiAKLSAgICBzdGF0aWMg
dm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9W
SVNJVF9DSElMRFJFTjsKICAgICBzdGF0aWMgU3RyaW5nIGNsYXNzTmFtZShjb25zdCBKU09iamVj
dCosIFZNJik7CiAgICAgc3RhdGljIFN0cmluZyB0b1N0cmluZ05hbWUoY29uc3QgSlNPYmplY3Qq
LCBKU0dsb2JhbE9iamVjdCopOwogICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChK
U09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFRyYW5zaXRpb25zLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRUcmFu
c2l0aW9ucy5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHRGVzaXJlZFRyYW5zaXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTUyLDcgKzUy
LDcgQEAgdm9pZCBEZXNpcmVkVHJhbnNpdGlvbjo6cmVhbGx5QWRkKFZNJiB2bQogICAgICAgICAg
ICAgbV9vbGRTdHJ1Y3R1cmUsIG1fbmV3U3RydWN0dXJlKSk7CiB9CiAKLXZvaWQgRGVzaXJlZFRy
YW5zaXRpb246OnZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIERlc2ly
ZWRUcmFuc2l0aW9uOjp2aXNpdENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3Ip
CiB7CiAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZChtX2NvZGVPcmlnaW5Pd25lcik7CiAg
ICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZChtX29sZFN0cnVjdHVyZSk7CkBAIC03OCw3ICs3
OCw3IEBAIHZvaWQgRGVzaXJlZFRyYW5zaXRpb25zOjpyZWFsbHlBZGQoVk0mIHYKICAgICAgICAg
bV90cmFuc2l0aW9uc1tpXS5yZWFsbHlBZGQodm0sIGNvbW1vbik7CiB9CiAKLXZvaWQgRGVzaXJl
ZFRyYW5zaXRpb25zOjp2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBE
ZXNpcmVkVHJhbnNpdGlvbnM6OnZpc2l0Q2hpbGRyZW4oQWJzdHJhY3RTbG90VmlzaXRvciYgdmlz
aXRvcikKIHsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV90cmFuc2l0aW9ucy5zaXpl
KCk7IGkrKykKICAgICAgICAgbV90cmFuc2l0aW9uc1tpXS52aXNpdENoaWxkcmVuKHZpc2l0b3Ip
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkVHJhbnNpdGlvbnMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRUcmFu
c2l0aW9ucy5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0Rlc2lyZWRUcmFuc2l0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ2LDggKzQ2LDcg
QEAgcHVibGljOgogICAgIERlc2lyZWRUcmFuc2l0aW9uKENvZGVCbG9jayosIENvZGVCbG9jayog
Y29kZU9yaWdpbk93bmVyLCBTdHJ1Y3R1cmUqLCBTdHJ1Y3R1cmUqKTsKIAogICAgIHZvaWQgcmVh
bGx5QWRkKFZNJiwgQ29tbW9uRGF0YSopOwotICAgIAotICAgIHZvaWQgdmlzaXRDaGlsZHJlbihT
bG90VmlzaXRvciYpOworICAgIHZvaWQgdmlzaXRDaGlsZHJlbihBYnN0cmFjdFNsb3RWaXNpdG9y
Jik7CiAKIHByaXZhdGU6CiAgICAgQ29kZUJsb2NrKiBtX2NvZGVCbG9jazsKQEAgLTYzLDcgKzYy
LDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBhZGRMYXppbHkoQ29kZUJsb2NrKiwgQ29kZUJsb2Nr
KiBjb2RlT3JpZ2luT3duZXIsIFN0cnVjdHVyZSosIFN0cnVjdHVyZSopOwogICAgIHZvaWQgcmVh
bGx5QWRkKFZNJiwgQ29tbW9uRGF0YSopOwotICAgIHZvaWQgdmlzaXRDaGlsZHJlbihTbG90Vmlz
aXRvciYpOworICAgIHZvaWQgdmlzaXRDaGlsZHJlbihBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAK
IHByaXZhdGU6CiAgICAgVmVjdG9yPERlc2lyZWRUcmFuc2l0aW9uPiBtX3RyYW5zaXRpb25zOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2Vha1JlZmVyZW5jZXMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFdl
YWtSZWZlcmVuY2VzLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdEZXNpcmVkV2Vha1JlZmVyZW5jZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
ODcsNyArODcsNyBAQCB2b2lkIERlc2lyZWRXZWFrUmVmZXJlbmNlczo6cmVhbGx5QWRkKFZNCiAg
ICAgfQogfQogCi12b2lkIERlc2lyZWRXZWFrUmVmZXJlbmNlczo6dmlzaXRDaGlsZHJlbihTbG90
VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgRGVzaXJlZFdlYWtSZWZlcmVuY2VzOjp2aXNpdENoaWxk
cmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgZm9yIChKU0NlbGwqIHRh
cmdldCA6IG1fcmVmZXJlbmNlcykKICAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZCh0
YXJnZXQpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2Vha1Jl
ZmVyZW5jZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rl
c2lyZWRXZWFrUmVmZXJlbmNlcy5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXZWFrUmVmZXJlbmNlcy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIxIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtMzEsMTAgKzMxLDEwIEBACiAKIG5hbWVzcGFjZSBKU0MgeyAKIAorY2xhc3MgQWJzdHJhY3RT
bG90VmlzaXRvcjsKIGNsYXNzIENvZGVCbG9jazsKIGNsYXNzIEpTQ2VsbDsKIGNsYXNzIEpTVmFs
dWU7Ci1jbGFzcyBTbG90VmlzaXRvcjsKIGNsYXNzIFZNOwogCiBuYW1lc3BhY2UgREZHIHsKQEAg
LTUyLDggKzUyLDggQEAgcHVibGljOgogICAgIGJvb2wgY29udGFpbnMoSlNDZWxsKik7CiAgICAg
CiAgICAgdm9pZCByZWFsbHlBZGQoVk0mLCBDb21tb25EYXRhKik7Ci0gICAgCi0gICAgdm9pZCB2
aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CisKKyAgICB2b2lkIHZpc2l0Q2hpbGRyZW4oQWJz
dHJhY3RTbG90VmlzaXRvciYpOwogCiBwcml2YXRlOgogICAgIENvZGVCbG9jayogbV9jb2RlQmxv
Y2s7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkocmV2aXNpb24g
MjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE0NDgsNyArMTQ0OCw3IEBAIHZvaWQgR3JhcGg6OnJlZ2lzdGVyRnJvemVu
VmFsdWVzKCkKICAgICBtX2NvZGVCbG9jay0+Y29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0
aW9uKCkuc2hyaW5rVG9GaXQoKTsKIH0KIAotdm9pZCBHcmFwaDo6dmlzaXRDaGlsZHJlbihTbG90
VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgR3JhcGg6OnZpc2l0Q2hpbGRyZW4oQWJzdHJhY3RTbG90
VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBmb3IgKEZyb3plblZhbHVlKiB2YWx1ZSA6IG1fZnJv
emVuVmFsdWVzKSB7CiAgICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQodmFsdWUtPnZh
bHVlKCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkocmV2aXNpb24g
MjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMS0yMDIwIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMTAwMCw5ICsxMDAwLDkgQEAgcHVibGljOgogICAgIGJvb2wgY2FuRG9GYXN0
U3ByZWFkKE5vZGUqLCBjb25zdCBBYnN0cmFjdFZhbHVlJik7CiAgICAgCiAgICAgdm9pZCByZWdp
c3RlckZyb3plblZhbHVlcygpOwotICAgIAotICAgIHZvaWQgdmlzaXRDaGlsZHJlbihTbG90Vmlz
aXRvciYpIGZpbmFsOwotICAgIAorCisgICAgdm9pZCB2aXNpdENoaWxkcmVuKEFic3RyYWN0U2xv
dFZpc2l0b3ImKSBmaW5hbDsKKwogICAgIHZvaWQgbG9nQXNzZXJ0aW9uRmFpbHVyZSgKICAgICAg
ICAgc3RkOjpudWxscHRyX3QsIGNvbnN0IGNoYXIqIGZpbGUsIGludCBsaW5lLCBjb25zdCBjaGFy
KiBmdW5jdGlvbiwKICAgICAgICAgY29uc3QgY2hhciogYXNzZXJ0aW9uKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY3Miw5
ICs2NzIsOSBAQCBDb21waWxhdGlvbktleSBQbGFuOjprZXkoKQogICAgIHJldHVybiBDb21waWxh
dGlvbktleShtX2NvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSwgbV9tb2RlKTsKIH0KIAotdm9pZCBQ
bGFuOjpjaGVja0xpdmVuZXNzQW5kVmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikK
K3ZvaWQgUGxhbjo6Y2hlY2tMaXZlbmVzc0FuZFZpc2l0Q2hpbGRyZW4oQWJzdHJhY3RTbG90Vmlz
aXRvciYgdmlzaXRvcikKIHsKLSAgICBpZiAoIWlzS25vd25Ub0JlTGl2ZUR1cmluZ0dDKCkpCisg
ICAgaWYgKCFpc0tub3duVG9CZUxpdmVEdXJpbmdHQyh2aXNpdG9yKSkKICAgICAgICAgcmV0dXJu
OwogCiAgICAgY2xlYW5NdXN0SGFuZGxlVmFsdWVzSWZOZWNlc3NhcnkoKTsKQEAgLTcwOCw3ICs3
MDgsMjAgQEAgdm9pZCBQbGFuOjpmaW5hbGl6ZUluR0MoKQogICAgIG1fcmVjb3JkZWRTdGF0dXNl
cy5maW5hbGl6ZVdpdGhvdXREZWxldGluZygqbV92bSk7CiB9CiAKLWJvb2wgUGxhbjo6aXNLbm93
blRvQmVMaXZlRHVyaW5nR0MoKQorYm9vbCBQbGFuOjppc0tub3duVG9CZUxpdmVEdXJpbmdHQyhB
YnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIGlmIChtX3N0YWdlID09IENhbmNl
bGxlZCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghdmlzaXRvci5pc01hcmtlZCht
X2NvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCkpKQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgaWYgKCF2aXNpdG9yLmlzTWFya2VkKG1fY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghIW1fcHJvZmlsZWRERkdDb2RlQmxvY2sgJiYg
IXZpc2l0b3IuaXNNYXJrZWQobV9wcm9maWxlZERGR0NvZGVCbG9jaykpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBQbGFuOjppc0tub3duVG9CZUxp
dmVBZnRlckdDKCkKIHsKICAgICBpZiAobV9zdGFnZSA9PSBDYW5jZWxsZWQpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5oCShyZXZpc2lv
biAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTQzLDggKzQzLDggQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKK2NsYXNzIEFi
c3RyYWN0U2xvdFZpc2l0b3I7CiBjbGFzcyBDb2RlQmxvY2s7Ci1jbGFzcyBTbG90VmlzaXRvcjsK
IAogbmFtZXNwYWNlIERGRyB7CiAKQEAgLTcxLDkgKzcxLDEwIEBAIHB1YmxpYzoKICAgICBDb21w
aWxhdGlvbktleSBrZXkoKTsKICAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgotICAg
IHZvaWQgaXRlcmF0ZUNvZGVCbG9ja3NGb3JHQyhjb25zdCBGdW5jJik7Ci0gICAgdm9pZCBjaGVj
a0xpdmVuZXNzQW5kVmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYpOwotICAgIGJvb2wgaXNLbm93
blRvQmVMaXZlRHVyaW5nR0MoKTsKKyAgICB2b2lkIGl0ZXJhdGVDb2RlQmxvY2tzRm9yR0MoQWJz
dHJhY3RTbG90VmlzaXRvciYsIGNvbnN0IEZ1bmMmKTsKKyAgICB2b2lkIGNoZWNrTGl2ZW5lc3NB
bmRWaXNpdENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKKyAgICBib29sIGlzS25vd25U
b0JlTGl2ZUR1cmluZ0dDKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKKyAgICBib29sIGlzS25vd25U
b0JlTGl2ZUFmdGVyR0MoKTsKICAgICB2b2lkIGZpbmFsaXplSW5HQygpOwogICAgIHZvaWQgY2Fu
Y2VsKCk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbklubGluZXMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW5JbmxpbmVz
LmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxh
bklubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTctMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMyLDkgKzMyLDkgQEAgbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBERkcgewogI2lmIEVOQUJMRShERkdfSklUKQogCiB0ZW1wbGF0ZTx0eXBl
bmFtZSBGdW5jPgotdm9pZCBQbGFuOjppdGVyYXRlQ29kZUJsb2Nrc0ZvckdDKGNvbnN0IEZ1bmMm
IGZ1bmMpCit2b2lkIFBsYW46Oml0ZXJhdGVDb2RlQmxvY2tzRm9yR0MoQWJzdHJhY3RTbG90Vmlz
aXRvciYgdmlzaXRvciwgY29uc3QgRnVuYyYgZnVuYykKIHsKLSAgICBpZiAoIWlzS25vd25Ub0Jl
TGl2ZUR1cmluZ0dDKCkpCisgICAgaWYgKCFpc0tub3duVG9CZUxpdmVEdXJpbmdHQyh2aXNpdG9y
KSkKICAgICAgICAgcmV0dXJuOwogICAgIAogICAgIC8vIENvbXBpbGF0aW9uIHdyaXRlcyBsb3Rz
IG9mIHZhbHVlcyB0byBhIENvZGVCbG9jayB3aXRob3V0IHBlcmZvcm1pbmcKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZXBvaW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVwb2ludC5jcHAJKHJldmlzaW9uIDI3MjgzMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZXBvaW50LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxOSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTgzLDI4ICs4MywzOCBAQCB2b2lkIFNhZmVwb2ludDo6YmVnaW4oKQogICAgIH0K
IH0KIAotdm9pZCBTYWZlcG9pbnQ6OmNoZWNrTGl2ZW5lc3NBbmRWaXNpdENoaWxkcmVuKFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQordm9pZCBTYWZlcG9pbnQ6OmNoZWNrTGl2ZW5lc3NBbmRWaXNpdENo
aWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgUkVMRUFTRV9BU1NF
UlQobV9kaWRDYWxsQmVnaW4pOwogCiAgICAgaWYgKG1fcmVzdWx0Lm1fZGlkR2V0Q2FuY2VsbGVk
KQogICAgICAgICByZXR1cm47IC8vIFdlIHdlcmUgY2FuY2VsbGVkIGR1cmluZyBhIHByZXZpb3Vz
IEdDIQogICAgIAotICAgIGlmICghaXNLbm93blRvQmVMaXZlRHVyaW5nR0MoKSkKKyAgICBpZiAo
IWlzS25vd25Ub0JlTGl2ZUR1cmluZ0dDKHZpc2l0b3IpKQogICAgICAgICByZXR1cm47CiAgICAg
CiAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9zY2FubmFibGVzLnNpemUoKTsgaS0tOykKICAgICAg
ICAgbV9zY2FubmFibGVzW2ldLT52aXNpdENoaWxkcmVuKHZpc2l0b3IpOwogfQogCi1ib29sIFNh
ZmVwb2ludDo6aXNLbm93blRvQmVMaXZlRHVyaW5nR0MoKQorYm9vbCBTYWZlcG9pbnQ6OmlzS25v
d25Ub0JlTGl2ZUR1cmluZ0dDKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAg
UkVMRUFTRV9BU1NFUlQobV9kaWRDYWxsQmVnaW4pOwogICAgIAogICAgIGlmIChtX3Jlc3VsdC5t
X2RpZEdldENhbmNlbGxlZCkKICAgICAgICAgcmV0dXJuIHRydWU7IC8vIFdlIHdlcmUgY2FuY2Vs
bGVkIGR1cmluZyBhIHByZXZpb3VzIEdDLCBzbyBsZXQncyBub3QgbWVzcyB3aXRoIGl0IHRoaXMg
dGltZSBhcm91bmQgLSBwcmV0ZW5kIGl0J3MgbGl2ZSBhbmQgbW92ZSBvbi4KICAgICAKLSAgICBy
ZXR1cm4gbV9wbGFuLmlzS25vd25Ub0JlTGl2ZUR1cmluZ0dDKCk7CisgICAgcmV0dXJuIG1fcGxh
bi5pc0tub3duVG9CZUxpdmVEdXJpbmdHQyh2aXNpdG9yKTsKK30KKworYm9vbCBTYWZlcG9pbnQ6
OmlzS25vd25Ub0JlTGl2ZUFmdGVyR0MoKQoreworICAgIFJFTEVBU0VfQVNTRVJUKG1fZGlkQ2Fs
bEJlZ2luKTsKKyAgICAKKyAgICBpZiAobV9yZXN1bHQubV9kaWRHZXRDYW5jZWxsZWQpCisgICAg
ICAgIHJldHVybiB0cnVlOyAvLyBXZSB3ZXJlIGNhbmNlbGxlZCBkdXJpbmcgYSBwcmV2aW91cyBH
Qywgc28gbGV0J3Mgbm90IG1lc3Mgd2l0aCBpdCB0aGlzIHRpbWUgYXJvdW5kIC0gcHJldGVuZCBp
dCdzIGxpdmUgYW5kIG1vdmUgb24uCisgICAgCisgICAgcmV0dXJuIG1fcGxhbi5pc0tub3duVG9C
ZUxpdmVBZnRlckdDKCk7CiB9CiAKIHZvaWQgU2FmZXBvaW50OjpjYW5jZWwoKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlcG9pbnQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVwb2ludC5oCShyZXZpc2lvbiAyNzI4MzApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVwb2ludC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAyMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTMxLDcgKzMxLDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLWNsYXNzIFNsb3RWaXNp
dG9yOworY2xhc3MgQWJzdHJhY3RTbG90VmlzaXRvcjsKIGNsYXNzIFZNOwogCiBuYW1lc3BhY2Ug
REZHIHsKQEAgLTY2LDkgKzY2LDEwIEBAIHB1YmxpYzoKICAgICB2b2lkIGFkZChTY2FubmFibGUq
KTsKICAgICAKICAgICB2b2lkIGJlZ2luKCk7Ci0gICAgCi0gICAgdm9pZCBjaGVja0xpdmVuZXNz
QW5kVmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYpOwotICAgIGJvb2wgaXNLbm93blRvQmVMaXZl
RHVyaW5nR0MoKTsKKworICAgIHZvaWQgY2hlY2tMaXZlbmVzc0FuZFZpc2l0Q2hpbGRyZW4oQWJz
dHJhY3RTbG90VmlzaXRvciYpOworICAgIGJvb2wgaXNLbm93blRvQmVMaXZlRHVyaW5nR0MoQWJz
dHJhY3RTbG90VmlzaXRvciYpOworICAgIGJvb2wgaXNLbm93blRvQmVMaXZlQWZ0ZXJHQygpOwog
ICAgIHZvaWQgY2FuY2VsKCk7CiAgICAgCiAgICAgVk0qIHZtKCkgY29uc3Q7IC8vIE1heSByZXR1
cm4gbnVsbCBpZiB3ZSd2ZSBiZWVuIGNhbmNlbGxlZC4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU2Nhbm5hYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTY2FubmFibGUuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTY2FubmFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOSw3ICsyOSw3IEBA
CiAKIG5hbWVzcGFjZSBKU0MgewogCi1jbGFzcyBTbG90VmlzaXRvcjsKK2NsYXNzIEFic3RyYWN0
U2xvdFZpc2l0b3I7CiAKIG5hbWVzcGFjZSBERkcgewogCkBAIC0zOCw3ICszOCw3IEBAIHB1Ymxp
YzoKICAgICBTY2FubmFibGUoKSB7IH0KICAgICB2aXJ0dWFsIH5TY2FubmFibGUoKSB7IH0KICAg
ICAKLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYpID0gMDsKKyAg
ICB2aXJ0dWFsIHZvaWQgdmlzaXRDaGlsZHJlbihBYnN0cmFjdFNsb3RWaXNpdG9yJikgPSAwOwog
fTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdXb3JrbGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdXb3JrbGlzdC5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzcyLDcg
KzM3Miw3IEBAIHZvaWQgV29ya2xpc3Q6OnJlc3VtZUFsbFRocmVhZHMoKQogICAgIG1fc3VzcGVu
c2lvbkxvY2sudW5sb2NrKCk7CiB9CiAKLXZvaWQgV29ya2xpc3Q6OnZpc2l0V2Vha1JlZmVyZW5j
ZXMoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIFdvcmtsaXN0Ojp2aXNpdFdlYWtSZWZlcmVu
Y2VzKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgVk0qIHZtID0gJnZpc2l0
b3IuaGVhcCgpLT52bSgpOwogICAgIHsKQEAgLTQwNSw3ICs0MDUsNyBAQCB2b2lkIFdvcmtsaXN0
OjpyZW1vdmVEZWFkUGxhbnMoVk0mIHZtKQogICAgICAgICAgICAgUGxhbiogcGxhbiA9IGl0ZXIt
PnZhbHVlLmdldCgpOwogICAgICAgICAgICAgaWYgKHBsYW4tPnZtKCkgIT0gJnZtKQogICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgaWYgKHBsYW4tPmlzS25vd25Ub0JlTGl2
ZUR1cmluZ0dDKCkpIHsKKyAgICAgICAgICAgIGlmIChwbGFuLT5pc0tub3duVG9CZUxpdmVBZnRl
ckdDKCkpIHsKICAgICAgICAgICAgICAgICBwbGFuLT5maW5hbGl6ZUluR0MoKTsKICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KQEAgLTQ0MCw3ICs0NDAsNyBAQCB2b2lk
IFdvcmtsaXN0OjpyZW1vdmVEZWFkUGxhbnMoVk0mIHZtKQogICAgICAgICAgICAgY29udGludWU7
CiAgICAgICAgIGlmIChzYWZlcG9pbnQtPnZtKCkgIT0gJnZtKQogICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgIGlmIChzYWZlcG9pbnQtPmlzS25vd25Ub0JlTGl2ZUR1cmluZ0dDKCkpCisg
ICAgICAgIGlmIChzYWZlcG9pbnQtPmlzS25vd25Ub0JlTGl2ZUFmdGVyR0MoKSkKICAgICAgICAg
ICAgIGNvbnRpbnVlOwogICAgICAgICBzYWZlcG9pbnQtPmNhbmNlbCgpOwogICAgIH0KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3QuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0LmgJKHJldmlzaW9uIDI3MjgzMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3QuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTM1LDcgKzM1LDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLWNsYXNzIFNsb3RWaXNp
dG9yOworY2xhc3MgQWJzdHJhY3RTbG90VmlzaXRvcjsKIAogbmFtZXNwYWNlIERGRyB7CiAKQEAg
LTU3LDcgKzU3LDcgQEAgcHVibGljOgogICAgIHZvaWQgY29tcGxldGVBbGxQbGFuc0ZvclZNKFZN
Jik7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgotICAgIHZvaWQgaXRlcmF0ZUNvZGVC
bG9ja3NGb3JHQyhWTSYsIGNvbnN0IEZ1bmMmKTsKKyAgICB2b2lkIGl0ZXJhdGVDb2RlQmxvY2tz
Rm9yR0MoQWJzdHJhY3RTbG90VmlzaXRvciYsIFZNJiwgY29uc3QgRnVuYyYpOwogCiAgICAgdm9p
ZCB3YWl0VW50aWxBbGxQbGFuc0ZvclZNQXJlUmVhZHkoVk0mKTsKICAgICBTdGF0ZSBjb21wbGV0
ZUFsbFJlYWR5UGxhbnNGb3JWTShWTSYsIENvbXBpbGF0aW9uS2V5ID0gQ29tcGlsYXRpb25LZXko
KSk7CkBAIC03Myw3ICs3Myw3IEBAIHB1YmxpYzoKICAgICBib29sIGlzQWN0aXZlRm9yVk0oVk0m
KSBjb25zdDsKICAgICAKICAgICAvLyBPbmx5IGNhbGxlZCBvbiB0aGUgbWFpbiB0aHJlYWQgYWZ0
ZXIgc3VzcGVuZGluZyBhbGwgdGhyZWFkcy4KLSAgICB2b2lkIHZpc2l0V2Vha1JlZmVyZW5jZXMo
U2xvdFZpc2l0b3ImKTsKKyAgICB2b2lkIHZpc2l0V2Vha1JlZmVyZW5jZXMoQWJzdHJhY3RTbG90
VmlzaXRvciYpOwogICAgIHZvaWQgcmVtb3ZlRGVhZFBsYW5zKFZNJik7CiAgICAgCiAgICAgdm9p
ZCByZW1vdmVOb25Db21waWxpbmdQbGFuc0ZvclZNKFZNJik7CkBAIC0xNDQsNyArMTQ0LDcgQEAg
V29ya2xpc3QmIGV4aXN0aW5nV29ya2xpc3RGb3JJbmRleCh1bnNpZwogdm9pZCBjb21wbGV0ZUFs
bFBsYW5zRm9yVk0oVk0mKTsKIAogdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KLXZvaWQgaXRlcmF0
ZUNvZGVCbG9ja3NGb3JHQyhWTSYsIGNvbnN0IEZ1bmMmKTsKK3ZvaWQgaXRlcmF0ZUNvZGVCbG9j
a3NGb3JHQyhBYnN0cmFjdFNsb3RWaXNpdG9yJiwgVk0mLCBjb25zdCBGdW5jJik7CiAKIH0gfSAv
LyBuYW1lc3BhY2UgSlNDOjpERkcKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdXb3JrbGlzdElubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1dvcmtsaXN0SW5saW5lcy5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNy0yMDE4IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MzMsMzAgKzMzLDMwIEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKICNpZiBFTkFC
TEUoREZHX0pJVCkKIAogdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KLXZvaWQgaXRlcmF0ZUNvZGVC
bG9ja3NGb3JHQyhWTSYgdm0sIGNvbnN0IEZ1bmMmIGZ1bmMpCit2b2lkIGl0ZXJhdGVDb2RlQmxv
Y2tzRm9yR0MoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvciwgVk0mIHZtLCBjb25zdCBGdW5j
JiBmdW5jKQogewogICAgIGZvciAodW5zaWduZWQgaSA9IERGRzo6bnVtYmVyT2ZXb3JrbGlzdHMo
KTsgaS0tOykgewogICAgICAgICBpZiAoREZHOjpXb3JrbGlzdCogd29ya2xpc3QgPSBERkc6OmV4
aXN0aW5nV29ya2xpc3RGb3JJbmRleE9yTnVsbChpKSkKLSAgICAgICAgICAgIHdvcmtsaXN0LT5p
dGVyYXRlQ29kZUJsb2Nrc0ZvckdDKHZtLCBmdW5jKTsKKyAgICAgICAgICAgIHdvcmtsaXN0LT5p
dGVyYXRlQ29kZUJsb2Nrc0ZvckdDKHZpc2l0b3IsIHZtLCBmdW5jKTsKICAgICB9CiB9CiAKIHRl
bXBsYXRlPHR5cGVuYW1lIEZ1bmM+Ci12b2lkIFdvcmtsaXN0OjppdGVyYXRlQ29kZUJsb2Nrc0Zv
ckdDKFZNJiB2bSwgY29uc3QgRnVuYyYgZnVuYykKK3ZvaWQgV29ya2xpc3Q6Oml0ZXJhdGVDb2Rl
QmxvY2tzRm9yR0MoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvciwgVk0mIHZtLCBjb25zdCBG
dW5jJiBmdW5jKQogewogICAgIExvY2tIb2xkZXIgbG9ja2VyKCptX2xvY2spOwogICAgIGZvciAo
UGxhbk1hcDo6aXRlcmF0b3IgaXRlciA9IG1fcGxhbnMuYmVnaW4oKTsgaXRlciAhPSBtX3BsYW5z
LmVuZCgpOyArK2l0ZXIpIHsKICAgICAgICAgUGxhbiogcGxhbiA9IGl0ZXItPnZhbHVlLmdldCgp
OwogICAgICAgICBpZiAocGxhbi0+dm0oKSAhPSAmdm0pCiAgICAgICAgICAgICBjb250aW51ZTsK
LSAgICAgICAgcGxhbi0+aXRlcmF0ZUNvZGVCbG9ja3NGb3JHQyhmdW5jKTsKKyAgICAgICAgcGxh
bi0+aXRlcmF0ZUNvZGVCbG9ja3NGb3JHQyh2aXNpdG9yLCBmdW5jKTsKICAgICB9CiB9CiAKICNl
bHNlIC8vIEVOQUJMRShERkdfSklUKQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgotdm9pZCBp
dGVyYXRlQ29kZUJsb2Nrc0ZvckdDKFZNJiwgY29uc3QgRnVuYyYpCit2b2lkIGl0ZXJhdGVDb2Rl
QmxvY2tzRm9yR0MoQWJzdHJhY3RTbG90VmlzaXRvciYsIFZNJiwgY29uc3QgRnVuYyYpCiB7CiB9
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Fic3RyYWN0U2xvdFZpc2l0b3Iu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9BYnN0cmFjdFNsb3RW
aXNpdG9yLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQWJz
dHJhY3RTbG90VmlzaXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjA3IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisK
KyNpbmNsdWRlICJKU0NKU1ZhbHVlLmgiCisjaW5jbHVkZSAiTWFya1N0YWNrLmgiCisjaW5jbHVk
ZSAiUm9vdE1hcmtSZWFzb24uaCIKKyNpbmNsdWRlICJWaXNpdFJhY2VLZXkuaCIKKyNpbmNsdWRl
IDx3dGYvQ29uY3VycmVudFB0ckhhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvU2hhcmVkVGFzay5o
PgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2Ns
YXNzIENvbnNlcnZhdGl2ZVJvb3RzOworY2xhc3MgSGVhcDsKK2NsYXNzIEhlYXBDZWxsOworY2xh
c3MgSlNDZWxsOworY2xhc3MgTWFya2VkQmxvY2s7CitjbGFzcyBNYXJraW5nQ29uc3RyYWludDsK
K2NsYXNzIE1hcmtpbmdDb25zdHJhaW50U29sdmVyOworY2xhc3MgUHJlY2lzZUFsbG9jYXRpb247
CitjbGFzcyBTbG90VmlzaXRvcjsKK2NsYXNzIFZNOworY2xhc3MgVmVyaWZpZXJTbG90VmlzaXRv
cjsKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGNsYXNzIFdlYWs7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBU
LCB0eXBlbmFtZSBUcmFpdHM+IGNsYXNzIFdyaXRlQmFycmllckJhc2U7CisKK2NsYXNzIEFic3Ry
YWN0U2xvdFZpc2l0b3IgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEFic3RyYWN0U2xvdFZp
c2l0b3IpOworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIGNsYXNz
IENvbnRleHQgeworICAgIHB1YmxpYzoKKyAgICAgICAgQ29udGV4dChBYnN0cmFjdFNsb3RWaXNp
dG9yJiwgSGVhcENlbGwqKTsKKyAgICAgICAgfkNvbnRleHQoKTsKKyAgICAgICAgSGVhcENlbGwq
IGNlbGwoKSBjb25zdCB7IHJldHVybiBtX2NlbGw7IH0KKyAgICBwcml2YXRlOgorICAgICAgICBB
YnN0cmFjdFNsb3RWaXNpdG9yJiBtX3Zpc2l0b3I7CisgICAgICAgIEhlYXBDZWxsKiBtX2NlbGw7
CisgICAgICAgIENvbnRleHQqIG1fcHJldmlvdXM7CisgICAgfTsKKworICAgIGNsYXNzIFN1cHBy
ZXNzR0NWZXJpZmllclNjb3BlIHsKKyAgICBwdWJsaWM6CisgICAgICAgIFN1cHByZXNzR0NWZXJp
ZmllclNjb3BlKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCisgICAgICAgICAgICA6IG1f
dmlzaXRvcih2aXNpdG9yKQorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQoIW1fdmlzaXRv
ci5tX3N1cHByZXNzVmVyaWZpZXIpOworICAgICAgICAgICAgbV92aXNpdG9yLm1fc3VwcHJlc3NW
ZXJpZmllciA9IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgflN1cHByZXNzR0NWZXJpZmllclNj
b3BlKCkgeyBtX3Zpc2l0b3IubV9zdXBwcmVzc1ZlcmlmaWVyID0gZmFsc2U7IH0KKyAgICBwcml2
YXRlOgorICAgICAgICBBYnN0cmFjdFNsb3RWaXNpdG9yJiBtX3Zpc2l0b3I7CisgICAgfTsKKwor
ICAgIGNsYXNzIERlZmF1bHRNYXJraW5nVmlvbGF0aW9uQXNzZXJ0aW9uU2NvcGUgeworICAgIHB1
YmxpYzoKKyAgICAgICAgRGVmYXVsdE1hcmtpbmdWaW9sYXRpb25Bc3NlcnRpb25TY29wZShBYnN0
cmFjdFNsb3RWaXNpdG9yJikgeyB9CisgICAgfTsKKworICAgIHZpcnR1YWwgfkFic3RyYWN0U2xv
dFZpc2l0b3IoKSA9IGRlZmF1bHQ7CisKKyAgICBNYXJrU3RhY2tBcnJheSYgY29sbGVjdG9yTWFy
a1N0YWNrKCkgeyByZXR1cm4gbV9jb2xsZWN0b3JTdGFjazsgfQorICAgIE1hcmtTdGFja0FycmF5
JiBtdXRhdG9yTWFya1N0YWNrKCkgeyByZXR1cm4gbV9tdXRhdG9yU3RhY2s7IH0KKyAgICBjb25z
dCBNYXJrU3RhY2tBcnJheSYgY29sbGVjdG9yTWFya1N0YWNrKCkgY29uc3QgeyByZXR1cm4gbV9j
b2xsZWN0b3JTdGFjazsgfQorICAgIGNvbnN0IE1hcmtTdGFja0FycmF5JiBtdXRhdG9yTWFya1N0
YWNrKCkgY29uc3QgeyByZXR1cm4gbV9tdXRhdG9yU3RhY2s7IH0KKworICAgIGJvb2wgaXNFbXB0
eSgpIHsgcmV0dXJuIG1fY29sbGVjdG9yU3RhY2suaXNFbXB0eSgpICYmIG1fbXV0YXRvclN0YWNr
LmlzRW1wdHkoKTsgfQorCisgICAgVk0mIHZtKCk7CisgICAgY29uc3QgVk0mIHZtKCkgY29uc3Q7
CisgICAgSGVhcCogaGVhcCgpIGNvbnN0OworCisgICAgdmlydHVhbCB2b2lkIGFwcGVuZChjb25z
dCBDb25zZXJ2YXRpdmVSb290cyYpID0gMDsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5
cGVuYW1lIFRyYWl0cz4gdm9pZCBhcHBlbmQoY29uc3QgV3JpdGVCYXJyaWVyQmFzZTxULCBUcmFp
dHM+Jik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVHJhaXRzPiB2b2lkIGFw
cGVuZEhpZGRlbihjb25zdCBXcml0ZUJhcnJpZXJCYXNlPFQsIFRyYWl0cz4mKTsKKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBJdGVyYXRvcj4gdm9pZCBhcHBlbmQoSXRlcmF0b3IgYmVnaW4gLCBJdGVy
YXRvciBlbmQpOworICAgIEFMV0FZU19JTkxJTkUgdm9pZCBhcHBlbmRWYWx1ZXMoY29uc3QgV3Jp
dGVCYXJyaWVyQmFzZTxVbmtub3duLCBSYXdWYWx1ZVRyYWl0czxVbmtub3duPj4qLCBzaXplX3Qg
Y291bnQpOworICAgIEFMV0FZU19JTkxJTkUgdm9pZCBhcHBlbmRWYWx1ZXNIaWRkZW4oY29uc3Qg
V3JpdGVCYXJyaWVyQmFzZTxVbmtub3duLCBSYXdWYWx1ZVRyYWl0czxVbmtub3duPj4qLCBzaXpl
X3QgY291bnQpOworCisgICAgLy8gVGhlc2UgZG9uJ3QgcmVxdWlyZSB5b3UgdG8gcHJvdmUgdGhh
dCB5b3UgaGF2ZSBhIFdyaXRlQmFycmllcjw+LiBUaGF0IG1ha2VzIHNlbnNlCisgICAgLy8gZm9y
OgorICAgIC8vCisgICAgLy8gLSByb290cy4KKyAgICAvLyAtIHNvcGhpc3RpY2F0ZWQgZGF0YSBz
dHJ1Y3R1cmVzIHRoYXQgYmFycmllciB0aHJvdWdoIG90aGVyIG1lYW5zIChsaWtlIERGRzo6UGxh
biBhbmQKKyAgICAvLyAgIGZyaWVuZHMpLgorICAgIC8vCisgICAgLy8gSWYgeW91IGFyZSBub3Qg
YSByb290IGFuZCB5b3UgZG9uJ3Qga25vdyB3aGF0IGtpbmQgb2YgYmFycmllciB5b3UgaGF2ZSwg
dGhlbiB5b3UKKyAgICAvLyBzaG91bGRuJ3QgY2FsbCB0aGVzZSBtZXRob2RzLgorICAgIEFMV0FZ
U19JTkxJTkUgdm9pZCBhcHBlbmRVbmJhcnJpZXJlZChKU1ZhbHVlKTsKKyAgICBBTFdBWVNfSU5M
SU5FIHZvaWQgYXBwZW5kVW5iYXJyaWVyZWQoSlNWYWx1ZSosIHNpemVfdCk7CisgICAgdmlydHVh
bCB2b2lkIGFwcGVuZFVuYmFycmllcmVkKEpTQ2VsbCopID0gMDsKKworICAgIGlubGluZSBib29s
IGFkZE9wYXF1ZVJvb3Qodm9pZCopOyAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIHJvb3Qgd2FzIG5l
dy4KKyAgICBpbmxpbmUgYm9vbCBjb250YWluc09wYXF1ZVJvb3Qodm9pZCopIGNvbnN0OworICAg
IHZvaWQgc2V0SWdub3JlTmV3T3BhcXVlUm9vdHMoYm9vbCB2YWx1ZSkgeyBtX2lnbm9yZU5ld09w
YXF1ZVJvb3RzID0gdmFsdWU7IH0KKworICAgIHZpcnR1YWwgYm9vbCBpc0ZpcnN0VmlzaXQoKSBj
b25zdCA9IDA7CisKKyAgICB2aXJ0dWFsIGJvb2wgaXNNYXJrZWQoY29uc3Qgdm9pZCopIGNvbnN0
ID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNNYXJrZWQoTWFya2VkQmxvY2smLCBIZWFwQ2VsbCop
IGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNNYXJrZWQoUHJlY2lzZUFsbG9jYXRpb24m
LCBIZWFwQ2VsbCopIGNvbnN0ID0gMDsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAg
dm9pZCBhcHBlbmQoY29uc3QgV2VhazxUPiYpOworCisgICAgQUxXQVlTX0lOTElORSB2b2lkIGFw
cGVuZEhpZGRlblVuYmFycmllcmVkKEpTVmFsdWUpOworICAgIHZpcnR1YWwgdm9pZCBhcHBlbmRI
aWRkZW5VbmJhcnJpZXJlZChKU0NlbGwqKSA9IDA7CisKKyAgICBzaXplX3QgdmlzaXRDb3VudCgp
IGNvbnN0IHsgcmV0dXJuIG1fdmlzaXRDb3VudDsgfQorCisgICAgdm9pZCBhZGRUb1Zpc2l0Q291
bnQoc2l6ZV90IHZhbHVlKSB7IG1fdmlzaXRDb3VudCArPSB2YWx1ZTsgfQorCisgICAgdmlydHVh
bCB2b2lkIGFkZFBhcmFsbGVsQ29uc3RyYWludFRhc2soUmVmUHRyPFNoYXJlZFRhc2s8dm9pZChB
YnN0cmFjdFNsb3RWaXNpdG9yJik+PikgPSAwOworCisgICAgdmlydHVhbCB2b2lkIG1hcmtBdXhp
bGlhcnkoY29uc3Qgdm9pZCogYmFzZSkgPSAwOworCisgICAgdmlydHVhbCB2b2lkIHJlcG9ydEV4
dHJhTWVtb3J5VmlzaXRlZChzaXplX3QpID0gMDsKKyNpZiBFTkFCTEUoUkVTT1VSQ0VfVVNBR0Up
CisgICAgdmlydHVhbCB2b2lkIHJlcG9ydEV4dGVybmFsTWVtb3J5VmlzaXRlZChzaXplX3QpID0g
MDsKKyNlbmRpZgorCisgICAgdmlydHVhbCB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdCA9
IDA7CisKKyAgICBSb290TWFya1JlYXNvbiByb290TWFya1JlYXNvbigpIGNvbnN0IHsgcmV0dXJu
IG1fcm9vdE1hcmtSZWFzb247IH0KKyAgICB2b2lkIHNldFJvb3RNYXJrUmVhc29uKFJvb3RNYXJr
UmVhc29uIHJlYXNvbikgeyBtX3Jvb3RNYXJrUmVhc29uID0gcmVhc29uOyB9CisKKyAgICB2aXJ0
dWFsIGJvb2wgbXV0YXRvcklzU3RvcHBlZCgpIGNvbnN0ID0gMDsKKworICAgIHZpcnR1YWwgdm9p
ZCBkaWRSYWNlKGNvbnN0IFZpc2l0UmFjZUtleSYpID0gMDsKKyAgICB2b2lkIGRpZFJhY2UoSlND
ZWxsKiBjZWxsLCBjb25zdCBjaGFyKiByZWFzb24pIHsgZGlkUmFjZShWaXNpdFJhY2VLZXkoY2Vs
bCwgcmVhc29uKSk7IH0KKworICAgIHZpcnR1YWwgdm9pZCB2aXNpdEFzQ29uc3RyYWludChjb25z
dCBKU0NlbGwqKSA9IDA7CisKKyAgICBjb25zdCBjaGFyKiBjb2RlTmFtZSgpIGNvbnN0IHsgcmV0
dXJuIG1fY29kZU5hbWUuZGF0YSgpOyB9CisKK3Byb3RlY3RlZDoKKyAgICBpbmxpbmUgQWJzdHJh
Y3RTbG90VmlzaXRvcihIZWFwJiwgQ1N0cmluZyBjb2RlTmFtZSwgQ29uY3VycmVudFB0ckhhc2hT
ZXQmKTsKKworICAgIEhlYXBDZWxsKiBwYXJlbnRDZWxsKCkgY29uc3Q7CisgICAgdm9pZCByZXNl
dCgpOworCisgICAgTWFya1N0YWNrQXJyYXkgbV9jb2xsZWN0b3JTdGFjazsKKyAgICBNYXJrU3Rh
Y2tBcnJheSBtX211dGF0b3JTdGFjazsKKworICAgIHNpemVfdCBtX3Zpc2l0Q291bnQgeyAwIH07
CisKKyAgICBIZWFwJiBtX2hlYXA7CisgICAgQ29udGV4dCogbV9jb250ZXh0IHsgbnVsbHB0ciB9
OworICAgIENTdHJpbmcgbV9jb2RlTmFtZTsKKworICAgIE1hcmtpbmdDb25zdHJhaW50KiBtX2N1
cnJlbnRDb25zdHJhaW50IHsgbnVsbHB0ciB9OworICAgIE1hcmtpbmdDb25zdHJhaW50U29sdmVy
KiBtX2N1cnJlbnRTb2x2ZXIgeyBudWxscHRyIH07CisgICAgQ29uY3VycmVudFB0ckhhc2hTZXQm
IG1fb3BhcXVlUm9vdHM7CisKKyAgICBSb290TWFya1JlYXNvbiBtX3Jvb3RNYXJrUmVhc29uIHsg
Um9vdE1hcmtSZWFzb246Ok5vbmUgfTsKKyAgICBib29sIG1fc3VwcHJlc3NWZXJpZmllciB7IGZh
bHNlIH07CisgICAgYm9vbCBtX2lnbm9yZU5ld09wYXF1ZVJvb3RzIHsgZmFsc2UgfTsgLy8gVXNl
ZnVsIGFzIGEgZGVidWdnaW5nIG1vZGUuCisKKyAgICBmcmllbmQgY2xhc3MgTWFya2luZ0NvbnN0
cmFpbnRTb2x2ZXI7Cit9OworCitjbGFzcyBTZXRSb290TWFya1JlYXNvblNjb3BlIHsKK3B1Ymxp
YzoKKyAgICBTZXRSb290TWFya1JlYXNvblNjb3BlKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0
b3IsIFJvb3RNYXJrUmVhc29uIHJlYXNvbikKKyAgICAgICAgOiBtX3Zpc2l0b3IodmlzaXRvcikK
KyAgICAgICAgLCBtX3ByZXZpb3VzUmVhc29uKHZpc2l0b3Iucm9vdE1hcmtSZWFzb24oKSkKKyAg
ICB7CisgICAgICAgIG1fdmlzaXRvci5zZXRSb290TWFya1JlYXNvbihyZWFzb24pOworICAgIH0K
KworICAgIH5TZXRSb290TWFya1JlYXNvblNjb3BlKCkKKyAgICB7CisgICAgICAgIG1fdmlzaXRv
ci5zZXRSb290TWFya1JlYXNvbihtX3ByZXZpb3VzUmVhc29uKTsKKyAgICB9CisKK3ByaXZhdGU6
CisgICAgQWJzdHJhY3RTbG90VmlzaXRvciYgbV92aXNpdG9yOworICAgIFJvb3RNYXJrUmVhc29u
IG1fcHJldmlvdXNSZWFzb247Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Fic3RyYWN0U2xvdFZpc2l0b3JJbmxpbmVzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQWJzdHJhY3RTbG90VmlzaXRvcklu
bGluZXMuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9BYnN0
cmFjdFNsb3RWaXNpdG9ySW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTU0IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBv
bmNlCisKKyNpbmNsdWRlICJBYnN0cmFjdFNsb3RWaXNpdG9yLmgiCisjaW5jbHVkZSAiSGVhcC5o
IgorI2luY2x1ZGUgIldlYWtJbmxpbmVzLmgiCisjaW5jbHVkZSAiV3JpdGVCYXJyaWVyLmgiCisK
K25hbWVzcGFjZSBKU0MgeworCitpbmxpbmUgQWJzdHJhY3RTbG90VmlzaXRvcjo6Q29udGV4dDo6
Q29udGV4dChBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBIZWFwQ2VsbCogY2VsbCkKKyAg
ICA6IG1fdmlzaXRvcih2aXNpdG9yKQorICAgICwgbV9jZWxsKGNlbGwpCit7CisgICAgbV9wcmV2
aW91cyA9IG1fdmlzaXRvci5tX2NvbnRleHQ7CisgICAgbV92aXNpdG9yLm1fY29udGV4dCA9IHRo
aXM7Cit9CisKK2lubGluZSBBYnN0cmFjdFNsb3RWaXNpdG9yOjpDb250ZXh0Ojp+Q29udGV4dCgp
Cit7CisgICAgbV92aXNpdG9yLm1fY29udGV4dCA9IG1fcHJldmlvdXM7Cit9CisKK2lubGluZSBB
YnN0cmFjdFNsb3RWaXNpdG9yOjpBYnN0cmFjdFNsb3RWaXNpdG9yKEhlYXAmIGhlYXAsIENTdHJp
bmcgY29kZU5hbWUsIENvbmN1cnJlbnRQdHJIYXNoU2V0JiBvcGFxdWVSb290cykKKyAgICA6IG1f
aGVhcChoZWFwKQorICAgICwgbV9jb2RlTmFtZShjb2RlTmFtZSkKKyAgICAsIG1fb3BhcXVlUm9v
dHMob3BhcXVlUm9vdHMpCit7Cit9CisKK2lubGluZSBIZWFwKiBBYnN0cmFjdFNsb3RWaXNpdG9y
OjpoZWFwKCkgY29uc3QKK3sKKyAgICByZXR1cm4gJm1faGVhcDsKK30KKworaW5saW5lIFZNJiBB
YnN0cmFjdFNsb3RWaXNpdG9yOjp2bSgpCit7CisgICAgcmV0dXJuIG1faGVhcC52bSgpOworfQor
CitpbmxpbmUgY29uc3QgVk0mIEFic3RyYWN0U2xvdFZpc2l0b3I6OnZtKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbV9oZWFwLnZtKCk7Cit9CisKK2lubGluZSBib29sIEFic3RyYWN0U2xvdFZpc2l0
b3I6OmFkZE9wYXF1ZVJvb3Qodm9pZCogcHRyKQoreworICAgIGlmICghcHRyKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgaWYgKG1faWdub3JlTmV3T3BhcXVlUm9vdHMpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICBpZiAoIW1fb3BhcXVlUm9vdHMuYWRkKHB0cikpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICBtX3Zpc2l0Q291bnQrKzsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
aW5saW5lIGJvb2wgQWJzdHJhY3RTbG90VmlzaXRvcjo6Y29udGFpbnNPcGFxdWVSb290KHZvaWQq
IHB0cikgY29uc3QKK3sKKyAgICByZXR1cm4gbV9vcGFxdWVSb290cy5jb250YWlucyhwdHIpOwor
fQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorQUxXQVlTX0lOTElORSB2b2lkIEFic3RyYWN0U2xv
dFZpc2l0b3I6OmFwcGVuZChjb25zdCBXZWFrPFQ+JiB3ZWFrKQoreworICAgIGFwcGVuZFVuYmFy
cmllcmVkKHdlYWsuZ2V0KCkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBU
cmFpdHM+CitBTFdBWVNfSU5MSU5FIHZvaWQgQWJzdHJhY3RTbG90VmlzaXRvcjo6YXBwZW5kKGNv
bnN0IFdyaXRlQmFycmllckJhc2U8VCwgVHJhaXRzPiYgc2xvdCkKK3sKKyAgICBhcHBlbmRVbmJh
cnJpZXJlZChzbG90LmdldCgpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUg
VHJhaXRzPgorQUxXQVlTX0lOTElORSB2b2lkIEFic3RyYWN0U2xvdFZpc2l0b3I6OmFwcGVuZEhp
ZGRlbihjb25zdCBXcml0ZUJhcnJpZXJCYXNlPFQsIFRyYWl0cz4mIHNsb3QpCit7CisgICAgYXBw
ZW5kSGlkZGVuVW5iYXJyaWVyZWQoc2xvdC5nZXQoKSk7Cit9CisKK0FMV0FZU19JTkxJTkUgdm9p
ZCBBYnN0cmFjdFNsb3RWaXNpdG9yOjphcHBlbmRIaWRkZW5VbmJhcnJpZXJlZChKU1ZhbHVlIHZh
bHVlKQoreworICAgIGlmICh2YWx1ZS5pc0NlbGwoKSkKKyAgICAgICAgYXBwZW5kSGlkZGVuVW5i
YXJyaWVyZWQodmFsdWUuYXNDZWxsKCkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBJdGVyYXRv
cj4KK0FMV0FZU19JTkxJTkUgdm9pZCBBYnN0cmFjdFNsb3RWaXNpdG9yOjphcHBlbmQoSXRlcmF0
b3IgYmVnaW4sIEl0ZXJhdG9yIGVuZCkKK3sKKyAgICBmb3IgKGF1dG8gaXQgPSBiZWdpbjsgaXQg
IT0gZW5kOyArK2l0KQorICAgICAgICBhcHBlbmQoKml0KTsKK30KKworQUxXQVlTX0lOTElORSB2
b2lkIEFic3RyYWN0U2xvdFZpc2l0b3I6OmFwcGVuZFZhbHVlcyhjb25zdCBXcml0ZUJhcnJpZXJC
YXNlPFVua25vd24+KiBiYXJyaWVycywgc2l6ZV90IGNvdW50KQoreworICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgY291bnQ7ICsraSkKKyAgICAgICAgYXBwZW5kKGJhcnJpZXJzW2ldKTsKK30K
KworQUxXQVlTX0lOTElORSB2b2lkIEFic3RyYWN0U2xvdFZpc2l0b3I6OmFwcGVuZFZhbHVlc0hp
ZGRlbihjb25zdCBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+KiBiYXJyaWVycywgc2l6ZV90IGNv
dW50KQoreworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY291bnQ7ICsraSkKKyAgICAgICAg
YXBwZW5kSGlkZGVuKGJhcnJpZXJzW2ldKTsKK30KKworQUxXQVlTX0lOTElORSB2b2lkIEFic3Ry
YWN0U2xvdFZpc2l0b3I6OmFwcGVuZFVuYmFycmllcmVkKEpTVmFsdWUgdmFsdWUpCit7CisgICAg
aWYgKHZhbHVlLmlzQ2VsbCgpKQorICAgICAgICBhcHBlbmRVbmJhcnJpZXJlZCh2YWx1ZS5hc0Nl
bGwoKSk7Cit9CisKK0FMV0FZU19JTkxJTkUgdm9pZCBBYnN0cmFjdFNsb3RWaXNpdG9yOjphcHBl
bmRVbmJhcnJpZXJlZChKU1ZhbHVlKiBzbG90LCBzaXplX3QgY291bnQpCit7CisgICAgZm9yIChz
aXplX3QgaSA9IGNvdW50OyBpLS07KQorICAgICAgICBhcHBlbmRVbmJhcnJpZXJlZChzbG90W2ld
KTsKK30KKworQUxXQVlTX0lOTElORSBIZWFwQ2VsbCogQWJzdHJhY3RTbG90VmlzaXRvcjo6cGFy
ZW50Q2VsbCgpIGNvbnN0Cit7CisgICAgaWYgKCFtX2NvbnRleHQpCisgICAgICAgIHJldHVybiBu
dWxscHRyOworICAgIHJldHVybiBtX2NvbnRleHQtPmNlbGwoKTsKK30KKworQUxXQVlTX0lOTElO
RSB2b2lkIEFic3RyYWN0U2xvdFZpc2l0b3I6OnJlc2V0KCkKK3sKKyAgICBtX3Zpc2l0Q291bnQg
PSAwOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0hhbmRsZVNldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvSGFuZGxlU2V0LmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvSGFuZGxlU2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU2LDcgKzU2LDcg
QEAgdm9pZCBIYW5kbGVTZXQ6Omdyb3coKQogICAgIH0KIH0KIAotdm9pZCBIYW5kbGVTZXQ6OnZp
c2l0U3Ryb25nSGFuZGxlcyhTbG90VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgSGFuZGxlU2V0Ojp2
aXNpdFN0cm9uZ0hhbmRsZXMoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBO
b2RlKiBlbmQgPSBtX3N0cm9uZ0xpc3QuZW5kKCk7CiAgICAgZm9yIChOb2RlKiBub2RlID0gbV9z
dHJvbmdMaXN0LmJlZ2luKCk7IG5vZGUgIT0gZW5kOyBub2RlID0gbm9kZS0+bmV4dCgpKSB7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IYW5kbGVTZXQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IYW5kbGVTZXQuaAkocmV2aXNpb24gMjcyODMw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGFuZGxlU2V0LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTkgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0zNSwxMCArMzUsMTAgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKK2NsYXNzIEFic3Ry
YWN0U2xvdFZpc2l0b3I7CiBjbGFzcyBIYW5kbGVTZXQ7CiBjbGFzcyBWTTsKIGNsYXNzIEpTVmFs
dWU7Ci1jbGFzcyBTbG90VmlzaXRvcjsKIAogY2xhc3MgSGFuZGxlTm9kZSB7CiBwdWJsaWM6CkBA
IC03Myw3ICs3Myw3IEBAIHB1YmxpYzoKICAgICBIYW5kbGVTbG90IGFsbG9jYXRlKCk7CiAgICAg
dm9pZCBkZWFsbG9jYXRlKEhhbmRsZVNsb3QpOwogCi0gICAgdm9pZCB2aXNpdFN0cm9uZ0hhbmRs
ZXMoU2xvdFZpc2l0b3ImKTsKKyAgICB2b2lkIHZpc2l0U3Ryb25nSGFuZGxlcyhBYnN0cmFjdFNs
b3RWaXNpdG9yJik7CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHdyaXRlQmFycmllcihI
YW5kbGVTbG90LCBjb25zdCBKU1ZhbHVlJik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0hlYXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0hlYXAuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9IZWFwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzIsNiArNzIsNyBAQAogI2luY2x1ZGUgIlR5
cGVQcm9maWxlci5oIgogI2luY2x1ZGUgIlR5cGVQcm9maWxlckxvZy5oIgogI2luY2x1ZGUgIlZN
LmgiCisjaW5jbHVkZSAiVmVyaWZpZXJTbG90VmlzaXRvcklubGluZXMuaCIKICNpbmNsdWRlICJX
ZWFrTWFwSW1wbElubGluZXMuaCIKICNpbmNsdWRlICJXZWFrU2V0SW5saW5lcy5oIgogI2luY2x1
ZGUgPGFsZ29yaXRobT4KQEAgLTY0NCwxOCArNjQ1LDE4IEBAIHZvaWQgSGVhcDo6Y29tcGxldGVB
bGxKSVRQbGFucygpCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+Ci12b2lkIEhlYXA6Oml0
ZXJhdGVFeGVjdXRpbmdBbmRDb21waWxpbmdDb2RlQmxvY2tzKGNvbnN0IEZ1bmMmIGZ1bmMpCit2
b2lkIEhlYXA6Oml0ZXJhdGVFeGVjdXRpbmdBbmRDb21waWxpbmdDb2RlQmxvY2tzKEFic3RyYWN0
U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IEZ1bmMmIGZ1bmMpCiB7CiAgICAgbV9jb2RlQmxv
Y2tzLT5pdGVyYXRlQ3VycmVudGx5RXhlY3V0aW5nKGZ1bmMpOwogICAgIGlmIChPcHRpb25zOjp1
c2VKSVQoKSkKLSAgICAgICAgREZHOjppdGVyYXRlQ29kZUJsb2Nrc0ZvckdDKG1fdm0sIGZ1bmMp
OworICAgICAgICBERkc6Oml0ZXJhdGVDb2RlQmxvY2tzRm9yR0ModmlzaXRvciwgbV92bSwgZnVu
Yyk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+Ci12b2lkIEhlYXA6Oml0ZXJhdGVFeGVj
dXRpbmdBbmRDb21waWxpbmdDb2RlQmxvY2tzV2l0aG91dEhvbGRpbmdMb2Nrcyhjb25zdCBGdW5j
JiBmdW5jKQordm9pZCBIZWFwOjppdGVyYXRlRXhlY3V0aW5nQW5kQ29tcGlsaW5nQ29kZUJsb2Nr
c1dpdGhvdXRIb2xkaW5nTG9ja3MoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3Qg
RnVuYyYgZnVuYykKIHsKICAgICBWZWN0b3I8Q29kZUJsb2NrKiwgMjU2PiBjb2RlQmxvY2tzOwot
ICAgIGl0ZXJhdGVFeGVjdXRpbmdBbmRDb21waWxpbmdDb2RlQmxvY2tzKAorICAgIGl0ZXJhdGVF
eGVjdXRpbmdBbmRDb21waWxpbmdDb2RlQmxvY2tzKHZpc2l0b3IsCiAgICAgICAgIFsmXSAoQ29k
ZUJsb2NrKiBjb2RlQmxvY2spIHsKICAgICAgICAgICAgIGNvZGVCbG9ja3MuYXBwZW5kKGNvZGVC
bG9jayk7CiAgICAgICAgIH0pOwpAQCAtNzMzLDE0ICs3MzQsNiBAQCB2b2lkIEhlYXA6OnJlbW92
ZURlYWRDb21waWxlcldvcmtsaXN0RW50CiAjZW5kaWYKIH0KIAotYm9vbCBIZWFwOjppc0FuYWx5
emluZ0hlYXAoKSBjb25zdAotewotICAgIEhlYXBQcm9maWxlciogaGVhcFByb2ZpbGVyID0gbV92
bS5oZWFwUHJvZmlsZXIoKTsKLSAgICBpZiAoVU5MSUtFTFkoaGVhcFByb2ZpbGVyKSkKLSAgICAg
ICAgcmV0dXJuIGhlYXBQcm9maWxlci0+YWN0aXZlSGVhcEFuYWx5emVyKCk7Ci0gICAgcmV0dXJu
IGZhbHNlOwotfQotCiBzdHJ1Y3QgR2F0aGVyRXh0cmFIZWFwRGF0YSA6IE1hcmtlZEJsb2NrOjpD
b3VudEZ1bmN0b3IgewogICAgIEdhdGhlckV4dHJhSGVhcERhdGEoVk0mIHZtLCBIZWFwQW5hbHl6
ZXImIGFuYWx5emVyKQogICAgICAgICA6IG1fdm0odm0pCkBAIC0xNDg1LDE0ICsxNDc4LDIxIEBA
IE5FVkVSX0lOTElORSBib29sIEhlYXA6OnJ1bkVuZFBoYXNlKEdDQ28KICAgICB9CiAgICAgbV9o
ZWxwZXJDbGllbnQuZmluaXNoKCk7CiAgICAgCi0gICAgaXRlcmF0ZUV4ZWN1dGluZ0FuZENvbXBp
bGluZ0NvZGVCbG9ja3MoCisgICAgQVNTRVJUKG1fbXV0YXRvck1hcmtTdGFjay0+aXNFbXB0eSgp
KTsKKyAgICBBU1NFUlQobV9yYWNlTWFya1N0YWNrLT5pc0VtcHR5KCkpOworCisgICAgU2xvdFZp
c2l0b3ImIHZpc2l0b3IgPSAqbV9jb2xsZWN0b3JTbG90VmlzaXRvcjsKKyAgICBpdGVyYXRlRXhl
Y3V0aW5nQW5kQ29tcGlsaW5nQ29kZUJsb2Nrcyh2aXNpdG9yLAogICAgICAgICBbJl0gKENvZGVC
bG9jayogY29kZUJsb2NrKSB7CiAgICAgICAgICAgICB3cml0ZUJhcnJpZXIoY29kZUJsb2NrKTsK
ICAgICAgICAgfSk7Ci0gICAgICAgIAorCiAgICAgdXBkYXRlT2JqZWN0Q291bnRzKCk7CiAgICAg
ZW5kTWFya2luZygpOwogCisgICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OnZlcmlmeUdDKCkpKQor
ICAgICAgICB2ZXJpZnlHQygpOworCiAgICAgaWYgKFVOTElLRUxZKG1fdmVyaWZpZXIpKSB7CiAg
ICAgICAgIG1fdmVyaWZpZXItPmdhdGhlckxpdmVDZWxscyhIZWFwVmVyaWZpZXI6OlBoYXNlOjpB
ZnRlck1hcmtpbmcpOwogICAgICAgICBtX3ZlcmlmaWVyLT52ZXJpZnkoSGVhcFZlcmlmaWVyOjpQ
aGFzZTo6QWZ0ZXJNYXJraW5nKTsKQEAgLTIxNzAsNiArMjE3MCwxMSBAQCB2b2lkIEhlYXA6OnN1
c3BlbmRDb21waWxlclRocmVhZHMoKQogCiB2b2lkIEhlYXA6OndpbGxTdGFydENvbGxlY3Rpb24o
KQogeworICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjp2ZXJpZnlHQygpKSkgeworICAgICAgICBt
X3ZlcmlmaWVyU2xvdFZpc2l0b3IgPSBtYWtlVW5pcXVlPFZlcmlmaWVyU2xvdFZpc2l0b3I+KCp0
aGlzKTsKKyAgICAgICAgQVNTRVJUKCFtX2lzTWFya2luZ0ZvckdDVmVyaWZpZXIpOworICAgIH0K
KwogICAgIGRhdGFMb2dJZihPcHRpb25zOjpsb2dHQygpLCAiPT4gIik7CiAgICAgCiAgICAgaWYg
KHNob3VsZERvRnVsbENvbGxlY3Rpb24oKSkgewpAQCAtMjcwMSw5ICsyNzA2LDE0IEBAIHZvaWQg
SGVhcDo6YWRkQ29yZUNvbnN0cmFpbnRzKCkKIHsKICAgICBtX2NvbnN0cmFpbnRTZXQtPmFkZCgK
ICAgICAgICAgIkNzIiwgIkNvbnNlcnZhdGl2ZSBTY2FuIiwKLSAgICAgICAgW3RoaXMsIGxhc3RW
ZXJzaW9uID0gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KDApXSAoU2xvdFZpc2l0b3ImIHZpc2l0b3Ip
IG11dGFibGUgeworICAgICAgICBbdGhpcywgbGFzdFZlcnNpb24gPSBzdGF0aWNfY2FzdDx1aW50
NjRfdD4oMCldIChBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBtdXRhYmxlIHsKICAgICAg
ICAgICAgIGJvb2wgc2hvdWxkTm90UHJvZHVjZVdvcmsgPSBsYXN0VmVyc2lvbiA9PSBtX3BoYXNl
VmVyc2lvbjsKLSAgICAgICAgICAgIGlmIChzaG91bGROb3RQcm9kdWNlV29yaykKKworICAgICAg
ICAgICAgLy8gRm9yIHRoZSBHQyBWZXJmaWVyLCB3ZSB3b3VsZCBsaWtlIHRvIHVzZSB0aGUgaWRl
bnRpY2FsIHNldCBvZiBjb25zZXJ2YXRpdmUgcm9vdHMKKyAgICAgICAgICAgIC8vIGFzIHRoZSBy
ZWFsIEdDLiBPdGhlcndpc2UsIHRoZSBHQyB2ZXJpZmllciBtYXkgcmVwb3J0IGZhbHNlIG5lZ2F0
aXZlcyBkdWUgdG8KKyAgICAgICAgICAgIC8vIHZhcmlhdGlvbnMgaW4gc3RhY2sgdmFsdWVzLiBG
b3IgdGhpcyBzYW1lIHJlYXNvbiwgd2Ugd2lsbCBza2lwIHRoaXMgY29uc3RyYWludAorICAgICAg
ICAgICAgLy8gd2hlbiB3ZSdyZSBydW5uaW5nIHRoZSBHQyB2ZXJpZmljYXRpb24gaW4gdGhlIEVu
ZCBwaGFzZS4KKyAgICAgICAgICAgIGlmIChzaG91bGROb3RQcm9kdWNlV29yayB8fCBtX2lzTWFy
a2luZ0ZvckdDVmVyaWZpZXIpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAg
CiAgICAgICAgICAgICBUaW1pbmdTY29wZSBwcmVDb252ZXJnZW5jZVRpbWluZ1Njb3BlKCp0aGlz
LCAiQ29uc3RyYWludDogY29uc2VydmF0aXZlIHNjYW4iKTsKQEAgLTI3MjAsMTEgKzI3MzAsMTUg
QEAgdm9pZCBIZWFwOjphZGRDb3JlQ29uc3RyYWludHMoKQogCiAgICAgICAgICAgICAgICAgU2V0
Um9vdE1hcmtSZWFzb25TY29wZSByb290U2NvcGUodmlzaXRvciwgUm9vdE1hcmtSZWFzb246OkNv
bnNlcnZhdGl2ZVNjYW4pOwogICAgICAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kKGNvbnNlcnZh
dGl2ZVJvb3RzKTsKKyAgICAgICAgICAgICAgICBpZiAoVU5MSUtFTFkobV92ZXJpZmllclNsb3RW
aXNpdG9yKSkKKyAgICAgICAgICAgICAgICAgICAgbV92ZXJpZmllclNsb3RWaXNpdG9yLT5hcHBl
bmQoY29uc2VydmF0aXZlUm9vdHMpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKE9w
dGlvbnM6OnVzZUpJVCgpKSB7CiAgICAgICAgICAgICAgICAgLy8gSklUU3R1YlJvdXRpbmVzIG11
c3QgYmUgdmlzaXRlZCBhZnRlciBzY2FubmluZyBDb25zZXJ2YXRpdmVSb290cyBzaW5jZSBKSVRT
dHViUm91dGluZXMgZGVwZW5kIG9uIHRoZSBob29rIGV4ZWN1dGVkIGR1cmluZyBnYXRoZXJpbmcg
Q29uc2VydmF0aXZlUm9vdHMuCiAgICAgICAgICAgICAgICAgU2V0Um9vdE1hcmtSZWFzb25TY29w
ZSByb290U2NvcGUodmlzaXRvciwgUm9vdE1hcmtSZWFzb246OkpJVFN0dWJSb3V0aW5lcyk7CiAg
ICAgICAgICAgICAgICAgbV9qaXRTdHViUm91dGluZXMtPnRyYWNlTWFya2VkU3R1YlJvdXRpbmVz
KHZpc2l0b3IpOworICAgICAgICAgICAgICAgIGlmIChVTkxJS0VMWShtX3ZlcmlmaWVyU2xvdFZp
c2l0b3IpKQorICAgICAgICAgICAgICAgICAgICBtX2ppdFN0dWJSb3V0aW5lcy0+dHJhY2VNYXJr
ZWRTdHViUm91dGluZXMoKm1fdmVyaWZpZXJTbG90VmlzaXRvcik7CiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAKICAgICAgICAgICAgIGxhc3RWZXJzaW9uID0gbV9waGFzZVZlcnNpb247CkBA
IC0yNzMzLDggKzI3NDcsNyBAQCB2b2lkIEhlYXA6OmFkZENvcmVDb25zdHJhaW50cygpCiAgICAg
CiAgICAgbV9jb25zdHJhaW50U2V0LT5hZGQoCiAgICAgICAgICJNc3IiLCAiTWlzYyBTbWFsbCBS
b290cyIsCi0gICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsKLQorICAgICAg
ICBbdGhpc10gKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsKICNpZiBKU0NfT0JKQ19B
UElfRU5BQkxFRAogICAgICAgICAgICAgc2NhbkV4dGVybmFsUmVtZW1iZXJlZFNldChtX3ZtLCB2
aXNpdG9yKTsKICNlbmRpZgpAQCAtMjc2OCw3ICsyNzgxLDcgQEAgdm9pZCBIZWFwOjphZGRDb3Jl
Q29uc3RyYWludHMoKQogICAgIAogICAgIG1fY29uc3RyYWludFNldC0+YWRkKAogICAgICAgICAi
U2giLCAiU3Ryb25nIEhhbmRsZXMiLAotICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiB2aXNp
dG9yKSB7CisgICAgICAgIFt0aGlzXSAoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikgewog
ICAgICAgICAgICAgU2V0Um9vdE1hcmtSZWFzb25TY29wZSByb290U2NvcGUodmlzaXRvciwgUm9v
dE1hcmtSZWFzb246OlN0cm9uZ0hhbmRsZXMpOwogICAgICAgICAgICAgbV9oYW5kbGVTZXQudmlz
aXRTdHJvbmdIYW5kbGVzKHZpc2l0b3IpOwogICAgICAgICB9LApAQCAtMjc3Niw3ICsyNzg5LDcg
QEAgdm9pZCBIZWFwOjphZGRDb3JlQ29uc3RyYWludHMoKQogICAgIAogICAgIG1fY29uc3RyYWlu
dFNldC0+YWRkKAogICAgICAgICAiRCIsICJEZWJ1Z2dlciIsCi0gICAgICAgIFt0aGlzXSAoU2xv
dFZpc2l0b3ImIHZpc2l0b3IpIHsKKyAgICAgICAgW3RoaXNdIChBYnN0cmFjdFNsb3RWaXNpdG9y
JiB2aXNpdG9yKSB7CiAgICAgICAgICAgICBTZXRSb290TWFya1JlYXNvblNjb3BlIHJvb3RTY29w
ZSh2aXNpdG9yLCBSb290TWFya1JlYXNvbjo6RGVidWdnZXIpOwogCiAjaWYgRU5BQkxFKFNBTVBM
SU5HX1BST0ZJTEVSKQpAQCAtMjc5OSw3ICsyODEyLDcgQEAgdm9pZCBIZWFwOjphZGRDb3JlQ29u
c3RyYWludHMoKQogICAgIAogICAgIG1fY29uc3RyYWludFNldC0+YWRkKAogICAgICAgICAiV3Mi
LCAiV2VhayBTZXRzIiwKLSAgICAgICAgW3RoaXNdIChTbG90VmlzaXRvciYgdmlzaXRvcikgewor
ICAgICAgICBbdGhpc10gKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsKICAgICAgICAg
ICAgIFNldFJvb3RNYXJrUmVhc29uU2NvcGUgcm9vdFNjb3BlKHZpc2l0b3IsIFJvb3RNYXJrUmVh
c29uOjpXZWFrU2V0cyk7CiAgICAgICAgICAgICBtX29iamVjdFNwYWNlLnZpc2l0V2Vha1NldHMo
dmlzaXRvcik7CiAgICAgICAgIH0sCkBAIC0yODA3LDEwICsyODIwLDEwIEBAIHZvaWQgSGVhcDo6
YWRkQ29yZUNvbnN0cmFpbnRzKCkKICAgICAKICAgICBtX2NvbnN0cmFpbnRTZXQtPmFkZCgKICAg
ICAgICAgIk8iLCAiT3V0cHV0IiwKLSAgICAgICAgW10gKFNsb3RWaXNpdG9yJiB2aXNpdG9yKSB7
CisgICAgICAgIFtdIChBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKSB7CiAgICAgICAgICAg
ICBWTSYgdm0gPSB2aXNpdG9yLnZtKCk7CiAKLSAgICAgICAgICAgIGF1dG8gY2FsbE91dHB1dENv
bnN0cmFpbnQgPSBbXSAoU2xvdFZpc2l0b3ImIHZpc2l0b3IsIEhlYXBDZWxsKiBoZWFwQ2VsbCwg
SGVhcENlbGw6OktpbmQpIHsKKyAgICAgICAgICAgIGF1dG8gY2FsbE91dHB1dENvbnN0cmFpbnQg
PSBbXSAoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvciwgSGVhcENlbGwqIGhlYXBDZWxsLCBI
ZWFwQ2VsbDo6S2luZCkgewogICAgICAgICAgICAgICAgIFNldFJvb3RNYXJrUmVhc29uU2NvcGUg
cm9vdFNjb3BlKHZpc2l0b3IsIFJvb3RNYXJrUmVhc29uOjpPdXRwdXQpOwogICAgICAgICAgICAg
ICAgIFZNJiB2bSA9IHZpc2l0b3Iudm0oKTsKICAgICAgICAgICAgICAgICBKU0NlbGwqIGNlbGwg
PSBzdGF0aWNfY2FzdDxKU0NlbGwqPihoZWFwQ2VsbCk7CkBAIC0yODMyLDcgKzI4NDUsNyBAQCB2
b2lkIEhlYXA6OmFkZENvcmVDb25zdHJhaW50cygpCiAgICAgaWYgKE9wdGlvbnM6OnVzZUpJVCgp
KSB7CiAgICAgICAgIG1fY29uc3RyYWludFNldC0+YWRkKAogICAgICAgICAgICAgIkR3IiwgIkRG
RyBXb3JrbGlzdHMiLAotICAgICAgICAgICAgW3RoaXNdIChTbG90VmlzaXRvciYgdmlzaXRvcikg
eworICAgICAgICAgICAgW3RoaXNdIChBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKSB7CiAg
ICAgICAgICAgICAgICAgU2V0Um9vdE1hcmtSZWFzb25TY29wZSByb290U2NvcGUodmlzaXRvciwg
Um9vdE1hcmtSZWFzb246OkRGR1dvcmtMaXN0cyk7CiAKICAgICAgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSBERkc6Om51bWJlck9mV29ya2xpc3RzKCk7IGktLTspCkBAIC0yODQwLDcgKzI4
NTMsNyBAQCB2b2lkIEhlYXA6OmFkZENvcmVDb25zdHJhaW50cygpCiAgICAgICAgICAgICAgICAg
CiAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMgaXMgYWxtb3N0IGNlcnRhaW5seSB1bm5l
Y2Vzc2FyeS4KICAgICAgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTY2ODI5Ci0gICAgICAgICAgICAgICAgREZHOjppdGVyYXRlQ29kZUJsb2Nr
c0ZvckdDKAorICAgICAgICAgICAgICAgIERGRzo6aXRlcmF0ZUNvZGVCbG9ja3NGb3JHQyh2aXNp
dG9yLAogICAgICAgICAgICAgICAgICAgICBtX3ZtLAogICAgICAgICAgICAgICAgICAgICBbJl0g
KENvZGVCbG9jayogY29kZUJsb2NrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICB2aXNpdG9y
LmFwcGVuZFVuYmFycmllcmVkKGNvZGVCbG9jayk7CkBAIC0yODU1LDEyICsyODY4LDEyIEBAIHZv
aWQgSGVhcDo6YWRkQ29yZUNvbnN0cmFpbnRzKCkKICAgICAKICAgICBtX2NvbnN0cmFpbnRTZXQt
PmFkZCgKICAgICAgICAgIkNiIiwgIkNvZGVCbG9ja3MiLAotICAgICAgICBbdGhpc10gKFNsb3RW
aXNpdG9yJiB2aXNpdG9yKSB7CisgICAgICAgIFt0aGlzXSAoQWJzdHJhY3RTbG90VmlzaXRvciYg
dmlzaXRvcikgewogICAgICAgICAgICAgU2V0Um9vdE1hcmtSZWFzb25TY29wZSByb290U2NvcGUo
dmlzaXRvciwgUm9vdE1hcmtSZWFzb246OkNvZGVCbG9ja3MpOwotICAgICAgICAgICAgaXRlcmF0
ZUV4ZWN1dGluZ0FuZENvbXBpbGluZ0NvZGVCbG9ja3NXaXRob3V0SG9sZGluZ0xvY2tzKAorICAg
ICAgICAgICAgaXRlcmF0ZUV4ZWN1dGluZ0FuZENvbXBpbGluZ0NvZGVCbG9ja3NXaXRob3V0SG9s
ZGluZ0xvY2tzKHZpc2l0b3IsCiAgICAgICAgICAgICAgICAgWyZdIChDb2RlQmxvY2sqIGNvZGVC
bG9jaykgewogICAgICAgICAgICAgICAgICAgICAvLyBWaXNpdCB0aGUgQ29kZUJsb2NrIGFzIGEg
Y29uc3RyYWludCBvbmx5IGlmIGl0J3MgYmxhY2suCi0gICAgICAgICAgICAgICAgICAgIGlmIChp
c01hcmtlZChjb2RlQmxvY2spCisgICAgICAgICAgICAgICAgICAgIGlmICh2aXNpdG9yLmlzTWFy
a2VkKGNvZGVCbG9jaykKICAgICAgICAgICAgICAgICAgICAgICAgICYmIGNvZGVCbG9jay0+Y2Vs
bFN0YXRlKCkgPT0gQ2VsbFN0YXRlOjpQb3NzaWJseUJsYWNrKQogICAgICAgICAgICAgICAgICAg
ICAgICAgdmlzaXRvci52aXNpdEFzQ29uc3RyYWludChjb2RlQmxvY2spOwogICAgICAgICAgICAg
ICAgIH0pOwpAQCAtMzAyMyw0ICszMDM2LDMzIEBAIHZvaWQgSGVhcDo6cnVuVGFza0luUGFyYWxs
ZWwoUmVmUHRyPFNoYXIKICAgICB9CiB9CiAKK3ZvaWQgSGVhcDo6dmVyaWZ5R0MoKQoreworICAg
IFJFTEVBU0VfQVNTRVJUKG1fdmVyaWZpZXJTbG90VmlzaXRvcik7CisgICAgUkVMRUFTRV9BU1NF
UlQoIW1faXNNYXJraW5nRm9yR0NWZXJpZmllcik7CisgICAgbV9pc01hcmtpbmdGb3JHQ1Zlcmlm
aWVyID0gdHJ1ZTsKKworICAgIFZlcmlmaWVyU2xvdFZpc2l0b3ImIHZpc2l0b3IgPSAqbV92ZXJp
ZmllclNsb3RWaXNpdG9yOworCisgICAgZG8geworICAgICAgICB2aXNpdG9yLmRyYWluKCk7Cisg
ICAgICAgIG1fY29uc3RyYWludFNldC0+ZXhlY3V0ZUFsbFN5bmNocm9ub3VzbHkodmlzaXRvcik7
CisgICAgICAgIHZpc2l0b3IuZXhlY3V0ZUNvbnN0cmFpbnRUYXNrcygpOworICAgIH0gd2hpbGUg
KCF2aXNpdG9yLmlzRW1wdHkoKSk7CisKKyAgICBtX2lzTWFya2luZ0ZvckdDVmVyaWZpZXIgPSBm
YWxzZTsKKworICAgIHZpc2l0b3IuZm9yRWFjaExpdmVDZWxsKFsmXSAoSGVhcENlbGwqIGNlbGwp
IHsKKyAgICAgICAgaWYgKEhlYXA6OmlzTWFya2VkKGNlbGwpKQorICAgICAgICAgICAgcmV0dXJu
OworCisgICAgICAgIGRhdGFMb2dMbigiXG4iICJHQyBWZXJpZmllcjogRVJST1IgY2VsbCAiLCBS
YXdQb2ludGVyKGNlbGwpLCAiIHdhcyBub3QgbWFya2VkIik7CisgICAgICAgIGlmIChVTkxJS0VM
WShPcHRpb25zOjp2ZXJib3NlVmVyaWZ5R0MoKSkpCisgICAgICAgICAgICB2aXNpdG9yLmR1bXBN
YXJrZXJEYXRhKGNlbGwpOworICAgICAgICBSRUxFQVNFX0FTU0VSVCh0aGlzLT5pc01hcmtlZChj
ZWxsKSk7CisgICAgfSk7CisKKyAgICBtX3ZlcmlmaWVyU2xvdFZpc2l0b3IgPSBudWxscHRyOwor
fQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0hlYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgJ
KHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5
LTIwMDAgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKICAqICBDb3B5cmlnaHQgKEMpIDIw
MDEgUGV0ZXIgS2VsbHkgKHBta0Bwb3N0LmNvbSkKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAy
MCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDAz
LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAg
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1Ymxp
YwpAQCAtODYsNiArODYsNyBAQCBjbGFzcyBTcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyOwogY2xh
c3MgU3RvcElmTmVjZXNzYXJ5VGltZXI7CiBjbGFzcyBTd2VlcGluZ1Njb3BlOwogY2xhc3MgVk07
CitjbGFzcyBWZXJpZmllclNsb3RWaXNpdG9yOwogY2xhc3MgV2Vha0dDTWFwQmFzZTsKIHN0cnVj
dCBDdXJyZW50VGhyZWFkU3RhdGU7CiAKQEAgLTE4NCw4ICsxODUsNiBAQCBwdWJsaWM6CiAgICAg
CiAgICAgYm9vbCBpc1NodXR0aW5nRG93bigpIGNvbnN0IHsgcmV0dXJuIG1faXNTaHV0dGluZ0Rv
d247IH0KIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIGJvb2wgaXNBbmFseXppbmdIZWFwKCkgY29u
c3Q7Ci0KICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHN3ZWVwU3luY2hyb25vdXNseSgpOwog
CiAgICAgYm9vbCBzaG91bGRDb2xsZWN0SGV1cmlzdGljKCk7CkBAIC0zODUsOCArMzg0LDYgQEAg
cHVibGljOgogICAgIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgYWRkTWFya2luZ0NvbnN0
cmFpbnQoc3RkOjp1bmlxdWVfcHRyPE1hcmtpbmdDb25zdHJhaW50Pik7CiAgICAgCi0gICAgc2l6
ZV90IG51bU9wYXF1ZVJvb3RzKCkgY29uc3QgeyByZXR1cm4gbV9vcGFxdWVSb290cy5zaXplKCk7
IH0KLQogICAgIEhlYXBWZXJpZmllciogdmVyaWZpZXIoKSBjb25zdCB7IHJldHVybiBtX3Zlcmlm
aWVyLmdldCgpOyB9CiAgICAgCiAgICAgdm9pZCBhZGRIZWFwRmluYWxpemVyQ2FsbGJhY2soY29u
c3QgSGVhcEZpbmFsaXplckNhbGxiYWNrJik7CkBAIC01NzYsMTAgKzU3MywxMCBAQCBwcml2YXRl
OgogICAgIGJvb2wgb3ZlckNyaXRpY2FsTWVtb3J5VGhyZXNob2xkKE1lbW9yeVRocmVzaG9sZENh
bGxUeXBlIG1lbW9yeVRocmVzaG9sZENhbGxUeXBlID0gTWVtb3J5VGhyZXNob2xkQ2FsbFR5cGU6
OkNhY2hlZCk7CiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KLSAgICB2b2lkIGl0
ZXJhdGVFeGVjdXRpbmdBbmRDb21waWxpbmdDb2RlQmxvY2tzKGNvbnN0IEZ1bmMmKTsKKyAgICB2
b2lkIGl0ZXJhdGVFeGVjdXRpbmdBbmRDb21waWxpbmdDb2RlQmxvY2tzKEFic3RyYWN0U2xvdFZp
c2l0b3ImLCBjb25zdCBGdW5jJik7CiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4K
LSAgICB2b2lkIGl0ZXJhdGVFeGVjdXRpbmdBbmRDb21waWxpbmdDb2RlQmxvY2tzV2l0aG91dEhv
bGRpbmdMb2Nrcyhjb25zdCBGdW5jJik7CisgICAgdm9pZCBpdGVyYXRlRXhlY3V0aW5nQW5kQ29t
cGlsaW5nQ29kZUJsb2Nrc1dpdGhvdXRIb2xkaW5nTG9ja3MoQWJzdHJhY3RTbG90VmlzaXRvciYs
IGNvbnN0IEZ1bmMmKTsKICAgICAKICAgICB2b2lkIGFzc2VydE1hcmtTdGFja3NFbXB0eSgpOwog
CkBAIC01OTAsNiArNTg3LDggQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgYm9vbCB1c2VHZW5lcmF0
aW9uYWxHQygpOwogICAgIHN0YXRpYyBib29sIHNob3VsZFN3ZWVwU3luY2hyb25vdXNseSgpOwog
ICAgIAorICAgIHZvaWQgdmVyaWZ5R0MoKTsKKwogICAgIGNvbnN0IEhlYXBUeXBlIG1faGVhcFR5
cGU7CiAgICAgTXV0YXRvclN0YXRlIG1fbXV0YXRvclN0YXRlIHsgTXV0YXRvclN0YXRlOjpSdW5u
aW5nIH07CiAgICAgY29uc3Qgc2l6ZV90IG1fcmFtU2l6ZTsKQEAgLTYzNiw2ICs2MzUsNyBAQCBw
cml2YXRlOgogICAgIHN0ZDo6dW5pcXVlX3B0cjxNYXJrU3RhY2tBcnJheT4gbV9tdXRhdG9yTWFy
a1N0YWNrOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxNYXJrU3RhY2tBcnJheT4gbV9yYWNlTWFya1N0
YWNrOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxNYXJraW5nQ29uc3RyYWludFNldD4gbV9jb25zdHJh
aW50U2V0OworICAgIHN0ZDo6dW5pcXVlX3B0cjxWZXJpZmllclNsb3RWaXNpdG9yPiBtX3Zlcmlm
aWVyU2xvdFZpc2l0b3I7CiAKICAgICAvLyBXZSBwb29sIHRoZSBzbG90IHZpc2l0b3JzIHVzZWQg
YnkgcGFyYWxsZWwgbWFya2luZyB0aHJlYWRzLiBJdCdzIHVzZWZ1bCB0byBiZSBhYmxlIHRvCiAg
ICAgLy8gZW51bWVyYXRlIG92ZXIgdGhlbSwgYW5kIGl0J3MgdXNlZnVsIHRvIGhhdmUgdGhlbSBj
YWNoZSBzb21lIHNtYWxsIGFtb3VudCBvZiBtZW1vcnkgZnJvbQpAQCAtNjU0LDYgKzY1NCw3IEBA
IHByaXZhdGU6CiAgICAgYm9vbCBtX2lzU2FmZVRvQ29sbGVjdCB7IGZhbHNlIH07CiAgICAgYm9v
bCBtX2lzU2h1dHRpbmdEb3duIHsgZmFsc2UgfTsKICAgICBib29sIG1fbXV0YXRvclNob3VsZEJl
RmVuY2VkIHsgT3B0aW9uczo6Zm9yY2VGZW5jZWRCYXJyaWVyKCkgfTsKKyAgICBib29sIG1faXNN
YXJraW5nRm9yR0NWZXJpZmllciB7IGZhbHNlIH07CiAKICAgICB1bnNpZ25lZCBtX2JhcnJpZXJU
aHJlc2hvbGQgeyBPcHRpb25zOjpmb3JjZUZlbmNlZEJhcnJpZXIoKSA/IHRhdXRvbG9naWNhbFRo
cmVzaG9sZCA6IGJsYWNrVGhyZXNob2xkIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0hlYXBJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvSGVhcElubGluZXMuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvSGVhcElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNjksNiArNjksNyBA
QCBpbmxpbmUgYm9vbCBIZWFwOjp3b3JsZElzU3RvcHBlZCgpIGNvbnN0CiAKIEFMV0FZU19JTkxJ
TkUgYm9vbCBIZWFwOjppc01hcmtlZChjb25zdCB2b2lkKiByYXdDZWxsKQogeworICAgIEFTU0VS
VCghbV9pc01hcmtpbmdGb3JHQ1ZlcmlmaWVyKTsKICAgICBIZWFwQ2VsbCogY2VsbCA9IGJpdHdp
c2VfY2FzdDxIZWFwQ2VsbCo+KHJhd0NlbGwpOwogICAgIGlmIChjZWxsLT5pc1ByZWNpc2VBbGxv
Y2F0aW9uKCkpCiAgICAgICAgIHJldHVybiBjZWxsLT5wcmVjaXNlQWxsb2NhdGlvbigpLmlzTWFy
a2VkKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwUHJvZmlsZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBQcm9maWxlci5j
cHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBQ
cm9maWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjAsNiArNjAsNyBAQCB2b2lkIEhlYXBQcm9maWxl
cjo6c2V0QWN0aXZlSGVhcEFuYWx5emVyCiB7CiAgICAgQVNTRVJUKCEhbV9hY3RpdmVBbmFseXpl
ciAhPSAhIWFuYWx5emVyKTsKICAgICBtX2FjdGl2ZUFuYWx5emVyID0gYW5hbHl6ZXI7CisgICAg
bV92bS5zZXRBY3RpdmVIZWFwQW5hbHl6ZXIoYW5hbHl6ZXIpOwogfQogCiB9IC8vIG5hbWVzcGFj
ZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0lzb0NlbGxTZXQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Jc29DZWxsU2V0LmgJKHJldmlz
aW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0lzb0NlbGxTZXQuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIw
MjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0zNCw2ICszNCw3IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCitjbGFzcyBB
YnN0cmFjdFNsb3RWaXNpdG9yOwogY2xhc3MgSGVhcENlbGw7CiBjbGFzcyBJc29TdWJzcGFjZTsK
IApAQCAtNTksNyArNjAsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBmb3JFYWNoTWFya2VkQ2VsbChj
b25zdCBGdW5jJik7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgotICAgIFJlZjxTaGFy
ZWRUYXNrPHZvaWQoU2xvdFZpc2l0b3ImKT4+IGZvckVhY2hNYXJrZWRDZWxsSW5QYXJhbGxlbChj
b25zdCBGdW5jJik7CisgICAgUmVmPFNoYXJlZFRhc2s8dm9pZChBYnN0cmFjdFNsb3RWaXNpdG9y
Jik+PiBmb3JFYWNoTWFya2VkQ2VsbEluUGFyYWxsZWwoY29uc3QgRnVuYyYpOwogICAgIAogICAg
IHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CiAgICAgdm9pZCBmb3JFYWNoTGl2ZUNlbGwoY29uc3Qg
RnVuYyYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvQ2VsbFNldElubGlu
ZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Jc29DZWxsU2V0
SW5saW5lcy5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9Jc29DZWxsU2V0SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTkyLDkgKzkyLDkgQEAgdm9pZCBJ
c29DZWxsU2V0Ojpmb3JFYWNoTWFya2VkQ2VsbChjb25zdAogfQogCiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBGdW5jPgotUmVmPFNoYXJlZFRhc2s8dm9pZChTbG90VmlzaXRvciYpPj4gSXNvQ2VsbFNldDo6
Zm9yRWFjaE1hcmtlZENlbGxJblBhcmFsbGVsKGNvbnN0IEZ1bmMmIGZ1bmMpCitSZWY8U2hhcmVk
VGFzazx2b2lkKEFic3RyYWN0U2xvdFZpc2l0b3ImKT4+IElzb0NlbGxTZXQ6OmZvckVhY2hNYXJr
ZWRDZWxsSW5QYXJhbGxlbChjb25zdCBGdW5jJiBmdW5jKQogewotICAgIGNsYXNzIFRhc2sgZmlu
YWwgOiBwdWJsaWMgU2hhcmVkVGFzazx2b2lkKFNsb3RWaXNpdG9yJik+IHsKKyAgICBjbGFzcyBU
YXNrIGZpbmFsIDogcHVibGljIFNoYXJlZFRhc2s8dm9pZChBYnN0cmFjdFNsb3RWaXNpdG9yJik+
IHsKICAgICBwdWJsaWM6CiAgICAgICAgIFRhc2soSXNvQ2VsbFNldCYgc2V0LCBjb25zdCBGdW5j
JiBmdW5jKQogICAgICAgICAgICAgOiBtX3NldChzZXQpCkBAIC0xMDMsNyArMTAzLDcgQEAgUmVm
PFNoYXJlZFRhc2s8dm9pZChTbG90VmlzaXRvciYpPj4gSXNvQwogICAgICAgICB7CiAgICAgICAg
IH0KICAgICAgICAgCi0gICAgICAgIHZvaWQgcnVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBmaW5h
bAorICAgICAgICB2b2lkIHJ1bihBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBmaW5hbAog
ICAgICAgICB7CiAgICAgICAgICAgICB3aGlsZSAoTWFya2VkQmxvY2s6OkhhbmRsZSogaGFuZGxl
ID0gbV9ibG9ja1NvdXJjZS0+cnVuKCkpIHsKICAgICAgICAgICAgICAgICB1bnNpZ25lZCBibG9j
a0luZGV4ID0gaGFuZGxlLT5pbmRleCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvSklUU3R1YlJvdXRpbmVTZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0pJVFN0dWJSb3V0aW5lU2V0LmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSklUU3R1YlJvdXRpbmVTZXQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTEyOCw3ICsxMjgsNyBAQCB2b2lkIEpJVFN0dWJSb3V0aW5lU2V0OjpkZWxldGVVbm1hcmtl
ZEplCiAgICAgbV9yb3V0aW5lcy5zaHJpbmsoZHN0SW5kZXgpOwogfQogCi12b2lkIEpJVFN0dWJS
b3V0aW5lU2V0Ojp0cmFjZU1hcmtlZFN0dWJSb3V0aW5lcyhTbG90VmlzaXRvciYgdmlzaXRvcikK
K3ZvaWQgSklUU3R1YlJvdXRpbmVTZXQ6OnRyYWNlTWFya2VkU3R1YlJvdXRpbmVzKEFic3RyYWN0
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgZm9yIChhdXRvJiBlbnRyeSA6IG1fcm91dGlu
ZXMpIHsKICAgICAgICAgR0NBd2FyZUpJVFN0dWJSb3V0aW5lKiByb3V0aW5lID0gZW50cnkucm91
dGluZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0pJVFN0dWJSb3V0aW5lU2V0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSklUU3R1YlJvdXRp
bmVTZXQuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
SklUU3R1YlJvdXRpbmVTZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM1LDggKzM1LDggQEAgdXNp
bmcgV1RGOjpSYW5nZTsKIAogbmFtZXNwYWNlIEpTQyB7CiAKK2NsYXNzIEFic3RyYWN0U2xvdFZp
c2l0b3I7CiBjbGFzcyBHQ0F3YXJlSklUU3R1YlJvdXRpbmU7Ci1jbGFzcyBTbG90VmlzaXRvcjsK
IAogI2lmIEVOQUJMRShKSVQpCiAKQEAgLTYzLDggKzYzLDggQEAgcHVibGljOgogICAgIHZvaWQg
cHJlcGFyZUZvckNvbnNlcnZhdGl2ZVNjYW4oKTsKICAgICAKICAgICB2b2lkIGRlbGV0ZVVubWFy
a2VkSmV0dGlzb25lZFN0dWJSb3V0aW5lcygpOwotICAgIAotICAgIHZvaWQgdHJhY2VNYXJrZWRT
dHViUm91dGluZXMoU2xvdFZpc2l0b3ImKTsKKworICAgIHZvaWQgdHJhY2VNYXJrZWRTdHViUm91
dGluZXMoQWJzdHJhY3RTbG90VmlzaXRvciYpOwogICAgIAogcHJpdmF0ZToKICAgICB2b2lkIG1h
cmtTbG93KHVpbnRwdHJfdCBhZGRyZXNzKTsKQEAgLTkyLDcgKzkyLDcgQEAgcHVibGljOgogICAg
IHZvaWQgbWFyayh2b2lkKikgeyB9CiAgICAgdm9pZCBwcmVwYXJlRm9yQ29uc2VydmF0aXZlU2Nh
bigpIHsgfQogICAgIHZvaWQgZGVsZXRlVW5tYXJrZWRKZXR0aXNvbmVkU3R1YlJvdXRpbmVzKCkg
eyB9Ci0gICAgdm9pZCB0cmFjZU1hcmtlZFN0dWJSb3V0aW5lcyhTbG90VmlzaXRvciYpIHsgfQor
ICAgIHZvaWQgdHJhY2VNYXJrZWRTdHViUm91dGluZXMoQWJzdHJhY3RTbG90VmlzaXRvciYpIHsg
fQogfTsKIAogI2VuZGlmIC8vICFFTkFCTEUoSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtTdGFja01lcmdpbmdDb25zdHJhaW50LmNwcAko
cmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya1N0YWNr
TWVyZ2luZ0NvbnN0cmFpbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI1LDcgKzI1LDYgQEAKIAogI2lu
Y2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIk1hcmtTdGFja01lcmdpbmdDb25zdHJhaW50Lmgi
Ci0KICNpbmNsdWRlICJHQ1NlZ21lbnRlZEFycmF5SW5saW5lcy5oIgogI2luY2x1ZGUgIkpTQ0lu
bGluZXMuaCIKIApAQCAtNDEsMTIgKzQwLDEyIEBAIE1hcmtTdGFja01lcmdpbmdDb25zdHJhaW50
Ojp+TWFya1N0YWNrTWUKIHsKIH0KIAotZG91YmxlIE1hcmtTdGFja01lcmdpbmdDb25zdHJhaW50
OjpxdWlja1dvcmtFc3RpbWF0ZShTbG90VmlzaXRvciYpCitkb3VibGUgTWFya1N0YWNrTWVyZ2lu
Z0NvbnN0cmFpbnQ6OnF1aWNrV29ya0VzdGltYXRlKEFic3RyYWN0U2xvdFZpc2l0b3ImKQogewog
ICAgIHJldHVybiBtX2hlYXAubV9tdXRhdG9yTWFya1N0YWNrLT5zaXplKCkgKyBtX2hlYXAubV9y
YWNlTWFya1N0YWNrLT5zaXplKCk7CiB9CiAKLXZvaWQgTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFp
bnQ6OnByZXBhcmVUb0V4ZWN1dGVJbXBsKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgU2xvdFZpc2l0
b3ImIHZpc2l0b3IpCit2b2lkIE1hcmtTdGFja01lcmdpbmdDb25zdHJhaW50OjpwcmVwYXJlVG9F
eGVjdXRlSW1wbChjb25zdCBBYnN0cmFjdExvY2tlciYsIEFic3RyYWN0U2xvdFZpc2l0b3ImIHZp
c2l0b3IpCiB7CiAgICAgLy8gTG9nZ2luZyB0aGUgd29yayBoZXJlIGVuc3VyZXMgdGhhdCB0aGUg
Y29uc3RyYWludCBzb2x2ZXIga25vd3MgdGhhdCBpdCBkb2Vzbid0IG5lZWQgdG8gcHJvZHVjZQog
ICAgIC8vIGFueW1vcmUgd29yay4KQEAgLTU2LDggKzU1LDE3IEBAIHZvaWQgTWFya1N0YWNrTWVy
Z2luZ0NvbnN0cmFpbnQ6OnByZXBhcmUKICAgICBkYXRhTG9nSWYoT3B0aW9uczo6bG9nR0MoKSwg
IigiLCBzaXplLCAiKSIpOwogfQogCi12b2lkIE1hcmtTdGFja01lcmdpbmdDb25zdHJhaW50Ojpl
eGVjdXRlSW1wbChTbG90VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgTWFya1N0YWNrTWVyZ2luZ0Nv
bnN0cmFpbnQ6OmV4ZWN1dGVJbXBsKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7Cisg
ICAgLy8gV2Ugd2FudCB0byBza2lwIHRoaXMgY29uc3RyYWludCBmb3IgdGhlIEdDIHZlcmlmaWVy
IGJlY2F1c2U6CisgICAgLy8gMS4gVGhlcmUgc2hvdWxkIGJlIG5vIG11dGF0b3IgbWFya2luZyBh
Y3Rpb24gYmV0d2VlbiB0aGUgRW5kIHBoYXNlIGFuZCB2ZXJpZnlHQygpLgorICAgIC8vICAgIEhl
bmNlLCB3ZSBjYW4gaWdub3JlIHRoc2Ugc3RhY2tzLgorICAgIC8vIDIuIFRoZSBFbmQgcGhhc2Ug
ZXhwbGljdGx5IGNhbGxzIGl0ZXJhdGVFeGVjdXRpbmdBbmRDb21waWxpbmdDb2RlQmxvY2tzKCkK
KyAgICAvLyAgICB0byBhZGQgZXhlY3V0aW5nIENvZGVCbG9ja3MgdG8gbV9oZWFwLm1fbXV0YXRv
ck1hcmtTdGFjay4gV2Ugd2FudCB0bworICAgIC8vICAgIGxlYXZlIHRob3NlIHVucGVydHVyYmVk
LgorICAgIGlmIChtX2hlYXAubV9pc01hcmtpbmdGb3JHQ1ZlcmlmaWVyKQorICAgICAgICByZXR1
cm47CisKICAgICBtX2hlYXAubV9tdXRhdG9yTWFya1N0YWNrLT50cmFuc2ZlclRvKHZpc2l0b3Iu
bXV0YXRvck1hcmtTdGFjaygpKTsKICAgICBtX2hlYXAubV9yYWNlTWFya1N0YWNrLT50cmFuc2Zl
clRvKHZpc2l0b3IubXV0YXRvck1hcmtTdGFjaygpKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL01hcmtTdGFja01lcmdpbmdDb25zdHJhaW50LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQuaAko
cmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya1N0YWNr
TWVyZ2luZ0NvbnN0cmFpbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsMTggKzMwLDE4IEBACiBu
YW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgSGVhcDsKLWNsYXNzIFNsb3RWaXNpdG9yOworY2xhc3Mg
QWJzdHJhY3RTbG90VmlzaXRvcjsKIAogY2xhc3MgTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQg
ZmluYWwgOiBwdWJsaWMgTWFya2luZ0NvbnN0cmFpbnQgewogcHVibGljOgogICAgIE1hcmtTdGFj
a01lcmdpbmdDb25zdHJhaW50KEhlYXAmKTsKICAgICB+TWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFp
bnQoKSBmaW5hbDsKICAgICAKLSAgICBkb3VibGUgcXVpY2tXb3JrRXN0aW1hdGUoU2xvdFZpc2l0
b3ImKSBmaW5hbDsKKyAgICBkb3VibGUgcXVpY2tXb3JrRXN0aW1hdGUoQWJzdHJhY3RTbG90Vmlz
aXRvciYpIGZpbmFsOwogICAgIAogcHJpdmF0ZToKLSAgICB2b2lkIHByZXBhcmVUb0V4ZWN1dGVJ
bXBsKGNvbnN0IEFic3RyYWN0TG9ja2VyJiBjb25zdHJhaW50U29sdmluZ0xvY2tlciwgU2xvdFZp
c2l0b3ImKSBmaW5hbDsKLSAgICB2b2lkIGV4ZWN1dGVJbXBsKFNsb3RWaXNpdG9yJikgZmluYWw7
CisgICAgdm9pZCBwcmVwYXJlVG9FeGVjdXRlSW1wbChjb25zdCBBYnN0cmFjdExvY2tlciYgY29u
c3RyYWludFNvbHZpbmdMb2NrZXIsIEFic3RyYWN0U2xvdFZpc2l0b3ImKSBmaW5hbDsKKyAgICB2
b2lkIGV4ZWN1dGVJbXBsKEFic3RyYWN0U2xvdFZpc2l0b3ImKSBmaW5hbDsKICAgICAKICAgICBI
ZWFwJiBtX2hlYXA7CiB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2Vk
QmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRC
bG9jay5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9N
YXJrZWRCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMDAsNiArMjAwLDcgQEAgcHVibGljOgog
ICAgICAgICAKICAgICAgICAgdm9pZCogc3RhcnQoKSBjb25zdCB7IHJldHVybiAmbV9ibG9jay0+
YXRvbXMoKVswXTsgfQogICAgICAgICB2b2lkKiBlbmQoKSBjb25zdCB7IHJldHVybiAmbV9ibG9j
ay0+YXRvbXMoKVttX2VuZEF0b21dOyB9CisgICAgICAgIHZvaWQqIGF0b21BdChzaXplX3QgaSkg
Y29uc3QgeyByZXR1cm4gJm1fYmxvY2stPmF0b21zKClbaV07IH0KICAgICAgICAgYm9vbCBjb250
YWlucyh2b2lkKiBwKSBjb25zdCB7IHJldHVybiBzdGFydCgpIDw9IHAgJiYgcCA8IGVuZCgpOyB9
CiAKICAgICAgICAgdm9pZCBkdW1wU3RhdGUoUHJpbnRTdHJlYW0mKTsKQEAgLTI5NSw2ICsyOTYs
NyBAQCBwdWJsaWM6CiAKICAgICAgICAgQml0bWFwPGF0b21zUGVyQmxvY2s+IG1fbWFya3M7CiAg
ICAgICAgIEJpdG1hcDxhdG9tc1BlckJsb2NrPiBtX25ld2x5QWxsb2NhdGVkOworICAgICAgICB2
b2lkKiBtX3ZlcmlmaWVyTWVtbyB7IG51bGxwdHIgfTsKICAgICB9OwogICAgIAogcHJpdmF0ZTog
ICAgCkBAIC0zODQsNiArMzg2LDkgQEAgcHVibGljOgogICAgICAgICAqYml0d2lzZV9jYXN0PHZv
bGF0aWxlIHVpbnQ4X3QqPigmZm9vdGVyKCkpOwogICAgIH0KICAgICAKKyAgICB2b2lkIHNldFZl
cmlmaWVyTWVtbyh2b2lkKik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gVCB2ZXJpZmllck1l
bW8oKSBjb25zdDsKKwogICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IG9mZnNldE9mRm9vdGVy
ID0gZW5kQXRvbSAqIGF0b21TaXplOwogCiBwcml2YXRlOgpAQCAtNjYwLDYgKzY2NSwxNyBAQCBp
bmxpbmUgdm9pZCBNYXJrZWRCbG9jazo6bm90ZU1hcmtlZCgpCiAgICAgICAgIG5vdGVNYXJrZWRT
bG93KCk7CiB9CiAKK2lubGluZSB2b2lkIE1hcmtlZEJsb2NrOjpzZXRWZXJpZmllck1lbW8odm9p
ZCogcCkKK3sKKyAgICBmb290ZXIoKS5tX3ZlcmlmaWVyTWVtbyA9IHA7Cit9CisKK3RlbXBsYXRl
PHR5cGVuYW1lIFQ+CitUIE1hcmtlZEJsb2NrOjp2ZXJpZmllck1lbW8oKSBjb25zdAoreworICAg
IHJldHVybiBiaXR3aXNlX2Nhc3Q8VD4oZm9vdGVyKCkubV92ZXJpZmllck1lbW8pOworfQorCiB9
IC8vIG5hbWVzcGFjZSBKU0MKIAogbmFtZXNwYWNlIFdURiB7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9NYXJrZWRTcGFjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvTWFya2VkU3BhY2UuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRTcGFjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI3Miw3ICsyNzIsNyBAQCB2b2lkIE1hcmtlZFNwYWNlOjplbmFibGVQcmVjaXNlQWxsb2NhdGlv
CiAgICAgICAgIG1fcHJlY2lzZUFsbG9jYXRpb25TZXQtPmFkZChhbGxvY2F0aW9uLT5jZWxsKCkp
OwogfQogCi12b2lkIE1hcmtlZFNwYWNlOjp2aXNpdFdlYWtTZXRzKFNsb3RWaXNpdG9yJiB2aXNp
dG9yKQordm9pZCBNYXJrZWRTcGFjZTo6dmlzaXRXZWFrU2V0cyhBYnN0cmFjdFNsb3RWaXNpdG9y
JiB2aXNpdG9yKQogewogICAgIGF1dG8gdmlzaXQgPSBbJl0gKFdlYWtTZXQqIHdlYWtTZXQpIHsK
ICAgICAgICAgd2Vha1NldC0+dmlzaXQodmlzaXRvcik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9NYXJrZWRTcGFjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL01hcmtlZFNwYWNlLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL01hcmtlZFNwYWNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSw3
IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAwIEhhcnJpIFBvcnRlbiAocG9ydGVu
QGtkZS5vcmcpCiAgKiAgQ29weXJpZ2h0IChDKSAyMDAxIFBldGVyIEtlbGx5IChwbWtAcG9zdC5j
b20pCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKQEAgLTM3LDYgKzM3LDcgQEAKIAogbmFt
ZXNwYWNlIEpTQyB7CiAKK2NsYXNzIEFic3RyYWN0U2xvdFZpc2l0b3I7CiBjbGFzcyBDb21wbGV0
ZVN1YnNwYWNlOwogY2xhc3MgSGVhcDsKIGNsYXNzIEhlYXBDZWxsOwpAQCAtMTA1LDcgKzEwNiw3
IEBAIHB1YmxpYzoKICAgICAKICAgICB2b2lkIHByZXBhcmVGb3JBbGxvY2F0aW9uKCk7CiAKLSAg
ICB2b2lkIHZpc2l0V2Vha1NldHMoU2xvdFZpc2l0b3ImKTsKKyAgICB2b2lkIHZpc2l0V2Vha1Nl
dHMoQWJzdHJhY3RTbG90VmlzaXRvciYpOwogICAgIHZvaWQgcmVhcFdlYWtTZXRzKCk7CiAKICAg
ICBNYXJrZWRCbG9ja1NldCYgYmxvY2tzKCkgeyByZXR1cm4gbV9ibG9ja3M7IH0KSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludC5jcHAJKHJl
dmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25z
dHJhaW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSAiY29uZmln
LmgiCiAjaW5jbHVkZSAiTWFya2luZ0NvbnN0cmFpbnQuaCIKIAorI2luY2x1ZGUgIkFic3RyYWN0
U2xvdFZpc2l0b3JJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUg
IlZpc2l0Q291bnRlci5oIgogCkBAIC01MSw3ICs1Miw3IEBAIHZvaWQgTWFya2luZ0NvbnN0cmFp
bnQ6OnJlc2V0U3RhdHMoKQogICAgIG1fbGFzdFZpc2l0Q291bnQgPSAwOwogfQogCi12b2lkIE1h
cmtpbmdDb25zdHJhaW50OjpleGVjdXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBNYXJr
aW5nQ29uc3RyYWludDo6ZXhlY3V0ZShBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewog
ICAgIFZpc2l0Q291bnRlciB2aXNpdENvdW50ZXIodmlzaXRvcik7CiAgICAgZXhlY3V0ZUltcGwo
dmlzaXRvcik7CkBAIC02MCwxNyArNjEsMjMgQEAgdm9pZCBNYXJraW5nQ29uc3RyYWludDo6ZXhl
Y3V0ZShTbG90VmlzaQogICAgICAgICBkYXRhTG9nKCIoIiwgYWJicmV2aWF0ZWROYW1lKCksICIg
dmlzaXRlZCAiLCB2aXNpdENvdW50ZXIudmlzaXRDb3VudCgpLCAiIGluIGV4ZWN1dGUpIik7CiB9
CiAKLWRvdWJsZSBNYXJraW5nQ29uc3RyYWludDo6cXVpY2tXb3JrRXN0aW1hdGUoU2xvdFZpc2l0
b3ImKQordm9pZCBNYXJraW5nQ29uc3RyYWludDo6ZXhlY3V0ZVN5bmNocm9ub3VzbHkoQWJzdHJh
Y3RTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBwcmVwYXJlVG9FeGVjdXRlSW1wbChOb0xv
Y2tpbmdOZWNlc3NhcnksIHZpc2l0b3IpOworICAgIGV4ZWN1dGVJbXBsKHZpc2l0b3IpOworfQor
Citkb3VibGUgTWFya2luZ0NvbnN0cmFpbnQ6OnF1aWNrV29ya0VzdGltYXRlKEFic3RyYWN0U2xv
dFZpc2l0b3ImKQogewogICAgIHJldHVybiAwOwogfQogCi1kb3VibGUgTWFya2luZ0NvbnN0cmFp
bnQ6OndvcmtFc3RpbWF0ZShTbG90VmlzaXRvciYgdmlzaXRvcikKK2RvdWJsZSBNYXJraW5nQ29u
c3RyYWludDo6d29ya0VzdGltYXRlKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAg
ICAgcmV0dXJuIGxhc3RWaXNpdENvdW50KCkgKyBxdWlja1dvcmtFc3RpbWF0ZSh2aXNpdG9yKTsK
IH0KIAotdm9pZCBNYXJraW5nQ29uc3RyYWludDo6cHJlcGFyZVRvRXhlY3V0ZShjb25zdCBBYnN0
cmFjdExvY2tlciYgY29uc3RyYWludFNvbHZpbmdMb2NrZXIsIFNsb3RWaXNpdG9yJiB2aXNpdG9y
KQordm9pZCBNYXJraW5nQ29uc3RyYWludDo6cHJlcGFyZVRvRXhlY3V0ZShjb25zdCBBYnN0cmFj
dExvY2tlciYgY29uc3RyYWludFNvbHZpbmdMb2NrZXIsIEFic3RyYWN0U2xvdFZpc2l0b3ImIHZp
c2l0b3IpCiB7CiAgICAgZGF0YUxvZ0lmKE9wdGlvbnM6OmxvZ0dDKCksIGFiYnJldmlhdGVkTmFt
ZSgpKTsKICAgICBWaXNpdENvdW50ZXIgdmlzaXRDb3VudGVyKHZpc2l0b3IpOwpAQCAtODAsNyAr
ODcsNyBAQCB2b2lkIE1hcmtpbmdDb25zdHJhaW50OjpwcmVwYXJlVG9FeGVjdXRlCiAgICAgICAg
IGRhdGFMb2coIigiLCBhYmJyZXZpYXRlZE5hbWUoKSwgIiB2aXNpdGVkICIsIHZpc2l0Q291bnRl
ci52aXNpdENvdW50KCksICIgaW4gcHJlcGFyZVRvRXhlY3V0ZSkiKTsKIH0KIAotdm9pZCBNYXJr
aW5nQ29uc3RyYWludDo6ZG9QYXJhbGxlbFdvcmsoU2xvdFZpc2l0b3ImIHZpc2l0b3IsIFNoYXJl
ZFRhc2s8dm9pZChTbG90VmlzaXRvciYpPiYgdGFzaykKK3ZvaWQgTWFya2luZ0NvbnN0cmFpbnQ6
OmRvUGFyYWxsZWxXb3JrKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIFNoYXJlZFRhc2s8
dm9pZChBYnN0cmFjdFNsb3RWaXNpdG9yJik+JiB0YXNrKQogewogICAgIFZpc2l0Q291bnRlciB2
aXNpdENvdW50ZXIodmlzaXRvcik7CiAgICAgdGFzay5ydW4odmlzaXRvcik7CkBAIC05Miw3ICs5
OSw3IEBAIHZvaWQgTWFya2luZ0NvbnN0cmFpbnQ6OmRvUGFyYWxsZWxXb3JrKFMKICAgICB9CiB9
CiAKLXZvaWQgTWFya2luZ0NvbnN0cmFpbnQ6OnByZXBhcmVUb0V4ZWN1dGVJbXBsKGNvbnN0IEFi
c3RyYWN0TG9ja2VyJiwgU2xvdFZpc2l0b3ImKQordm9pZCBNYXJraW5nQ29uc3RyYWludDo6cHJl
cGFyZVRvRXhlY3V0ZUltcGwoY29uc3QgQWJzdHJhY3RMb2NrZXImLCBBYnN0cmFjdFNsb3RWaXNp
dG9yJikKIHsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0Nv
bnN0cmFpbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJr
aW5nQ29uc3RyYWludC5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9NYXJraW5nQ29uc3RyYWludC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM4LDcgKzM4LDcgQEAK
IG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBNYXJraW5nQ29uc3RyYWludFNldDsKLWNsYXNzIFNs
b3RWaXNpdG9yOworY2xhc3MgQWJzdHJhY3RTbG90VmlzaXRvcjsKIAogY2xhc3MgTWFya2luZ0Nv
bnN0cmFpbnQgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKE1hcmtpbmdDb25zdHJhaW50KTsK
QEAgLTYwLDE1ICs2MCwxNSBAQCBwdWJsaWM6CiAgICAgCiAgICAgc2l6ZV90IGxhc3RWaXNpdENv
dW50KCkgY29uc3QgeyByZXR1cm4gbV9sYXN0VmlzaXRDb3VudDsgfQogICAgIAotICAgIHZvaWQg
ZXhlY3V0ZShTbG90VmlzaXRvciYpOwotICAgIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIHZpcnR1
YWwgZG91YmxlIHF1aWNrV29ya0VzdGltYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKTsKKyAgICB2
b2lkIGV4ZWN1dGUoQWJzdHJhY3RTbG90VmlzaXRvciYpOworCisgICAgSlNfRVhQT1JUX1BSSVZB
VEUgdmlydHVhbCBkb3VibGUgcXVpY2tXb3JrRXN0aW1hdGUoQWJzdHJhY3RTbG90VmlzaXRvciYp
OwogICAgIAotICAgIGRvdWJsZSB3b3JrRXN0aW1hdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpOwor
ICAgIGRvdWJsZSB3b3JrRXN0aW1hdGUoQWJzdHJhY3RTbG90VmlzaXRvciYpOwogICAgIAotICAg
IHZvaWQgcHJlcGFyZVRvRXhlY3V0ZShjb25zdCBBYnN0cmFjdExvY2tlciYgY29uc3RyYWludFNv
bHZpbmdMb2NrZXIsIFNsb3RWaXNpdG9yJik7CisgICAgdm9pZCBwcmVwYXJlVG9FeGVjdXRlKGNv
bnN0IEFic3RyYWN0TG9ja2VyJiBjb25zdHJhaW50U29sdmluZ0xvY2tlciwgQWJzdHJhY3RTbG90
VmlzaXRvciYpOwogICAgIAotICAgIHZvaWQgZG9QYXJhbGxlbFdvcmsoU2xvdFZpc2l0b3ImLCBT
aGFyZWRUYXNrPHZvaWQoU2xvdFZpc2l0b3ImKT4mKTsKKyAgICB2b2lkIGRvUGFyYWxsZWxXb3Jr
KEFic3RyYWN0U2xvdFZpc2l0b3ImLCBTaGFyZWRUYXNrPHZvaWQoQWJzdHJhY3RTbG90VmlzaXRv
ciYpPiYpOwogICAgIAogICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5IHZvbGF0aWxpdHkoKSBjb25z
dCB7IHJldHVybiBtX3ZvbGF0aWxpdHk7IH0KICAgICAKQEAgLTc2LDkgKzc2LDExIEBAIHB1Ymxp
YzoKICAgICBDb25zdHJhaW50UGFyYWxsZWxpc20gcGFyYWxsZWxpc20oKSBjb25zdCB7IHJldHVy
biBtX3BhcmFsbGVsaXNtOyB9CiAKIHByb3RlY3RlZDoKLSAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0
ZUltcGwoU2xvdFZpc2l0b3ImKSA9IDA7Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgdmlydHVhbCB2
b2lkIHByZXBhcmVUb0V4ZWN1dGVJbXBsKGNvbnN0IEFic3RyYWN0TG9ja2VyJiBjb25zdHJhaW50
U29sdmluZ0xvY2tlciwgU2xvdFZpc2l0b3ImKTsKLSAgICAKKyAgICB2aXJ0dWFsIHZvaWQgZXhl
Y3V0ZUltcGwoQWJzdHJhY3RTbG90VmlzaXRvciYpID0gMDsKKyAgICBKU19FWFBPUlRfUFJJVkFU
RSB2aXJ0dWFsIHZvaWQgcHJlcGFyZVRvRXhlY3V0ZUltcGwoY29uc3QgQWJzdHJhY3RMb2NrZXIm
IGNvbnN0cmFpbnRTb2x2aW5nTG9ja2VyLCBBYnN0cmFjdFNsb3RWaXNpdG9yJik7CisKKyAgICB2
b2lkIGV4ZWN1dGVTeW5jaHJvbm91c2x5KEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKKwogcHJpdmF0
ZToKICAgICBmcmllbmQgY2xhc3MgTWFya2luZ0NvbnN0cmFpbnRTZXQ7IC8vIFNvIGl0IGNhbiBz
ZXQgbV9pbmRleC4KICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtp
bmdDb25zdHJhaW50U2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9NYXJraW5nQ29uc3RyYWludFNldC5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50U2V0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC02Myw3ICs2Myw3IEBAIHZvaWQgTWFya2luZ0NvbnN0cmFpbnRTZXQ6OmRpZFN0YXJ0TWFy
a2kKICAgICBtX2l0ZXJhdGlvbiA9IDE7CiB9CiAKLXZvaWQgTWFya2luZ0NvbnN0cmFpbnRTZXQ6
OmFkZChDU3RyaW5nIGFiYnJldmlhdGVkTmFtZSwgQ1N0cmluZyBuYW1lLCA6OkZ1bmN0aW9uPHZv
aWQoU2xvdFZpc2l0b3ImKT4gZnVuY3Rpb24sIENvbnN0cmFpbnRWb2xhdGlsaXR5IHZvbGF0aWxp
dHksIENvbnN0cmFpbnRDb25jdXJyZW5jeSBjb25jdXJyZW5jeSwgQ29uc3RyYWludFBhcmFsbGVs
aXNtIHBhcmFsbGVsaXNtKQordm9pZCBNYXJraW5nQ29uc3RyYWludFNldDo6YWRkKENTdHJpbmcg
YWJicmV2aWF0ZWROYW1lLCBDU3RyaW5nIG5hbWUsIDo6RnVuY3Rpb248dm9pZChBYnN0cmFjdFNs
b3RWaXNpdG9yJik+IGZ1bmN0aW9uLCBDb25zdHJhaW50Vm9sYXRpbGl0eSB2b2xhdGlsaXR5LCBD
b25zdHJhaW50Q29uY3VycmVuY3kgY29uY3VycmVuY3ksIENvbnN0cmFpbnRQYXJhbGxlbGlzbSBw
YXJhbGxlbGlzbSkKIHsKICAgICBhZGQobWFrZVVuaXF1ZTxTaW1wbGVNYXJraW5nQ29uc3RyYWlu
dD4oV1RGTW92ZShhYmJyZXZpYXRlZE5hbWUpLCBXVEZNb3ZlKG5hbWUpLCBXVEZNb3ZlKGZ1bmN0
aW9uKSwgdm9sYXRpbGl0eSwgY29uY3VycmVuY3ksIHBhcmFsbGVsaXNtKSk7CiB9CkBAIC03OCwx
NCArNzgsMTQgQEAgdm9pZCBNYXJraW5nQ29uc3RyYWludFNldDo6YWRkKAogICAgIG1fc2V0LmFw
cGVuZChXVEZNb3ZlKGNvbnN0cmFpbnQpKTsKIH0KIAotYm9vbCBNYXJraW5nQ29uc3RyYWludFNl
dDo6ZXhlY3V0ZUNvbnZlcmdlbmNlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorYm9vbCBNYXJraW5n
Q29uc3RyYWludFNldDo6ZXhlY3V0ZUNvbnZlcmdlbmNlKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZp
c2l0b3IpCiB7CiAgICAgYm9vbCByZXN1bHQgPSBleGVjdXRlQ29udmVyZ2VuY2VJbXBsKHZpc2l0
b3IpOwogICAgIGRhdGFMb2dJZihPcHRpb25zOjpsb2dHQygpLCAiICIpOwogICAgIHJldHVybiBy
ZXN1bHQ7CiB9CiAKLWJvb2wgTWFya2luZ0NvbnN0cmFpbnRTZXQ6OmlzV2F2ZWZyb250QWR2YW5j
aW5nKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorYm9vbCBNYXJraW5nQ29uc3RyYWludFNldDo6aXNX
YXZlZnJvbnRBZHZhbmNpbmcoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBm
b3IgKE1hcmtpbmdDb25zdHJhaW50KiBvdXRncm93dGggOiBtX291dGdyb3d0aHMpIHsKICAgICAg
ICAgaWYgKG91dGdyb3d0aC0+d29ya0VzdGltYXRlKHZpc2l0b3IpKQpAQCAtOTQsNyArOTQsNyBA
QCBib29sIE1hcmtpbmdDb25zdHJhaW50U2V0Ojppc1dhdmVmcm9udEFkCiAgICAgcmV0dXJuIGZh
bHNlOwogfQogCi1ib29sIE1hcmtpbmdDb25zdHJhaW50U2V0OjpleGVjdXRlQ29udmVyZ2VuY2VJ
bXBsKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorYm9vbCBNYXJraW5nQ29uc3RyYWludFNldDo6ZXhl
Y3V0ZUNvbnZlcmdlbmNlSW1wbChBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAg
IFN1cGVyU2FtcGxlclNjb3BlIHN1cGVyU2FtcGxlclNjb3BlKGZhbHNlKTsKICAgICBNYXJraW5n
Q29uc3RyYWludFNvbHZlciBzb2x2ZXIoKnRoaXMpOwpAQCAtMTY2LDEwICsxNjYsMTAgQEAgYm9v
bCBNYXJraW5nQ29uc3RyYWludFNldDo6ZXhlY3V0ZUNvbnZlcgogICAgIHJldHVybiAhc29sdmVy
LmRpZFZpc2l0U29tZXRoaW5nKCk7CiB9CiAKLXZvaWQgTWFya2luZ0NvbnN0cmFpbnRTZXQ6OmV4
ZWN1dGVBbGwoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIE1hcmtpbmdDb25zdHJhaW50U2V0
OjpleGVjdXRlQWxsU3luY2hyb25vdXNseShBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQog
ewogICAgIGZvciAoYXV0byYgY29uc3RyYWludCA6IG1fc2V0KQotICAgICAgICBjb25zdHJhaW50
LT5leGVjdXRlKHZpc2l0b3IpOworICAgICAgICBjb25zdHJhaW50LT5leGVjdXRlU3luY2hyb25v
dXNseSh2aXNpdG9yKTsKICAgICBkYXRhTG9nSWYoT3B0aW9uczo6bG9nR0MoKSwgIiAiKTsKIH0K
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnRTZXQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3Ry
YWludFNldC5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9NYXJraW5nQ29uc3RyYWludFNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ2LDE0ICs0NiwxNCBAQCBw
dWJsaWM6CiAgICAgdm9pZCBhZGQoCiAgICAgICAgIENTdHJpbmcgYWJicmV2aWF0ZWROYW1lLAog
ICAgICAgICBDU3RyaW5nIG5hbWUsCi0gICAgICAgIDo6RnVuY3Rpb248dm9pZChTbG90VmlzaXRv
ciYpPiwKKyAgICAgICAgOjpGdW5jdGlvbjx2b2lkKEFic3RyYWN0U2xvdFZpc2l0b3ImKT4sCiAg
ICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5LAogICAgICAgICBDb25zdHJhaW50Q29uY3VycmVu
Y3kgPSBDb25zdHJhaW50Q29uY3VycmVuY3k6OkNvbmN1cnJlbnQsCiAgICAgICAgIENvbnN0cmFp
bnRQYXJhbGxlbGlzbSA9IENvbnN0cmFpbnRQYXJhbGxlbGlzbTo6U2VxdWVudGlhbCk7CiAgICAg
CiAgICAgdm9pZCBhZGQoCiAgICAgICAgIENTdHJpbmcgYWJicmV2aWF0ZWROYW1lLCBDU3RyaW5n
IG5hbWUsCi0gICAgICAgIDo6RnVuY3Rpb248dm9pZChTbG90VmlzaXRvciYpPiBmdW5jLAorICAg
ICAgICA6OkZ1bmN0aW9uPHZvaWQoQWJzdHJhY3RTbG90VmlzaXRvciYpPiBmdW5jLAogICAgICAg
ICBDb25zdHJhaW50Vm9sYXRpbGl0eSB2b2xhdGlsaXR5LAogICAgICAgICBDb25zdHJhaW50UGFy
YWxsZWxpc20gcGFyYWxsZWxpc20pCiAgICAgewpAQCAtNjQsMjAgKzY0LDIwIEBAIHB1YmxpYzoK
ICAgICAKICAgICAvLyBBc3N1bWluZyB0aGF0IHRoZSBtYXJrIHN0YWNrcyBhcmUgYWxsIGVtcHR5
LCB0aGlzIHdpbGwgZ2l2ZSB5b3UgYSBndWVzcyBhcyB0byB3aGV0aGVyIG9yCiAgICAgLy8gbm90
IHRoZSB3YXZlZnJvbnQgaXMgYWR2YW5jaW5nLgotICAgIGJvb2wgaXNXYXZlZnJvbnRBZHZhbmNp
bmcoU2xvdFZpc2l0b3ImKTsKLSAgICBib29sIGlzV2F2ZWZyb250UmV0cmVhdGluZyhTbG90Vmlz
aXRvciYgdmlzaXRvcikgeyByZXR1cm4gIWlzV2F2ZWZyb250QWR2YW5jaW5nKHZpc2l0b3IpOyB9
CisgICAgYm9vbCBpc1dhdmVmcm9udEFkdmFuY2luZyhBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cisg
ICAgYm9vbCBpc1dhdmVmcm9udFJldHJlYXRpbmcoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRv
cikgeyByZXR1cm4gIWlzV2F2ZWZyb250QWR2YW5jaW5nKHZpc2l0b3IpOyB9CiAgICAgCiAgICAg
Ly8gUmV0dXJucyB0cnVlIGlmIHRoaXMgZXhlY3V0ZWQgYWxsIGNvbnN0cmFpbnRzIGFuZCBub25l
IG9mIHRoZW0gcHJvZHVjZWQgbmV3IHdvcmsuIFRoaXMKICAgICAvLyBhc3N1bWVzIHRoYXQgeW91
J3ZlIGFscmFlZHkgdmlzaXRlZCByb290cyBhbmQgZHJhaW5lZCBmcm9tIHRoZXJlLgotICAgIGJv
b2wgZXhlY3V0ZUNvbnZlcmdlbmNlKFNsb3RWaXNpdG9yJik7Ci0gICAgCisgICAgYm9vbCBleGVj
dXRlQ29udmVyZ2VuY2UoQWJzdHJhY3RTbG90VmlzaXRvciYpOworCiAgICAgLy8gU2ltcGx5IHJ1
bnMgYWxsIGNvbnN0cmFpbnRzIHdpdGhvdXQgYW55IHNoZW5hbmlnYW5zLgotICAgIHZvaWQgZXhl
Y3V0ZUFsbChTbG90VmlzaXRvciYpOworICAgIHZvaWQgZXhlY3V0ZUFsbFN5bmNocm9ub3VzbHko
QWJzdHJhY3RTbG90VmlzaXRvciYpOwogICAgIAogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3Mg
TWFya2luZ0NvbnN0cmFpbnRTb2x2ZXI7Ci0gICAgCi0gICAgYm9vbCBleGVjdXRlQ29udmVyZ2Vu
Y2VJbXBsKFNsb3RWaXNpdG9yJik7CisKKyAgICBib29sIGV4ZWN1dGVDb252ZXJnZW5jZUltcGwo
QWJzdHJhY3RTbG90VmlzaXRvciYpOwogICAgIAogICAgIEhlYXAmIG1faGVhcDsKICAgICBCaXRW
ZWN0b3IgbV91bmV4ZWN1dGVkUm9vdHM7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9NYXJraW5nQ29uc3RyYWludFNvbHZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXIuY3BwCShyZXZpc2lvbiAyNzI4
MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludFNvbHZl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMTUwLDEzICsxNTAsMTMgQEAgdm9pZCBNYXJraW5nQ29uc3Ry
YWludFNvbHZlcjo6ZXhlY3V0ZShNYQogICAgIG1fZXhlY3V0ZWQuc2V0KGNvbnN0cmFpbnQuaW5k
ZXgoKSk7CiB9CiAKLXZvaWQgTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXI6OmFkZFBhcmFsbGVsVGFz
ayhSZWZQdHI8U2hhcmVkVGFzazx2b2lkKFNsb3RWaXNpdG9yJik+PiB0YXNrLCBNYXJraW5nQ29u
c3RyYWludCYgY29uc3RyYWludCkKK3ZvaWQgTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXI6OmFkZFBh
cmFsbGVsVGFzayhSZWZQdHI8U2hhcmVkVGFzazx2b2lkKEFic3RyYWN0U2xvdFZpc2l0b3ImKT4+
IHRhc2ssIE1hcmtpbmdDb25zdHJhaW50JiBjb25zdHJhaW50KQogewogICAgIGF1dG8gbG9ja2Vy
ID0gaG9sZExvY2sobV9sb2NrKTsKICAgICBtX3RvRXhlY3V0ZUluUGFyYWxsZWwuYXBwZW5kKFRh
c2tXaXRoQ29uc3RyYWludChXVEZNb3ZlKHRhc2spLCAmY29uc3RyYWludCkpOwogfQogCi12b2lk
IE1hcmtpbmdDb25zdHJhaW50U29sdmVyOjpydW5FeGVjdXRpb25UaHJlYWQoU2xvdFZpc2l0b3Im
IHZpc2l0b3IsIFNjaGVkdWxlclByZWZlcmVuY2UgcHJlZmVyZW5jZSwgU2NvcGVkTGFtYmRhPE9w
dGlvbmFsPHVuc2lnbmVkPigpPiBwaWNrTmV4dCkKK3ZvaWQgTWFya2luZ0NvbnN0cmFpbnRTb2x2
ZXI6OnJ1bkV4ZWN1dGlvblRocmVhZChBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBTY2hl
ZHVsZXJQcmVmZXJlbmNlIHByZWZlcmVuY2UsIFNjb3BlZExhbWJkYTxPcHRpb25hbDx1bnNpZ25l
ZD4oKT4gcGlja05leHQpCiB7CiAgICAgZm9yICg7OykgewogICAgICAgICBib29sIGRvUGFyYWxs
ZWxXb3JrTW9kZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25z
dHJhaW50U29sdmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
TWFya2luZ0NvbnN0cmFpbnRTb2x2ZXIuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC02NSwxNSArNjUsMTUgQEAgcHVibGljOgogICAgIHZvaWQgZXhlY3V0ZShNYXJraW5nQ29uc3Ry
YWludCYpOwogICAgIAogICAgIC8vIFBhcmFsbGVsIGNvbnN0cmFpbnRzIGNhbiBhZGQgcGFyYWxs
ZWwgdGFza3MuCi0gICAgdm9pZCBhZGRQYXJhbGxlbFRhc2soUmVmUHRyPFNoYXJlZFRhc2s8dm9p
ZChTbG90VmlzaXRvciYpPj4sIE1hcmtpbmdDb25zdHJhaW50Jik7CisgICAgdm9pZCBhZGRQYXJh
bGxlbFRhc2soUmVmUHRyPFNoYXJlZFRhc2s8dm9pZChBYnN0cmFjdFNsb3RWaXNpdG9yJik+Piwg
TWFya2luZ0NvbnN0cmFpbnQmKTsKICAgICAKIHByaXZhdGU6Ci0gICAgdm9pZCBydW5FeGVjdXRp
b25UaHJlYWQoU2xvdFZpc2l0b3ImLCBTY2hlZHVsZXJQcmVmZXJlbmNlLCBTY29wZWRMYW1iZGE8
T3B0aW9uYWw8dW5zaWduZWQ+KCk+IHBpY2tOZXh0KTsKKyAgICB2b2lkIHJ1bkV4ZWN1dGlvblRo
cmVhZChBYnN0cmFjdFNsb3RWaXNpdG9yJiwgU2NoZWR1bGVyUHJlZmVyZW5jZSwgU2NvcGVkTGFt
YmRhPE9wdGlvbmFsPHVuc2lnbmVkPigpPiBwaWNrTmV4dCk7CiAgICAgCiAgICAgc3RydWN0IFRh
c2tXaXRoQ29uc3RyYWludCB7CiAgICAgICAgIFRhc2tXaXRoQ29uc3RyYWludCgpIHsgfQogICAg
ICAgICAKLSAgICAgICAgVGFza1dpdGhDb25zdHJhaW50KFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQo
U2xvdFZpc2l0b3ImKT4+IHRhc2ssIE1hcmtpbmdDb25zdHJhaW50KiBjb25zdHJhaW50KQorICAg
ICAgICBUYXNrV2l0aENvbnN0cmFpbnQoUmVmUHRyPFNoYXJlZFRhc2s8dm9pZChBYnN0cmFjdFNs
b3RWaXNpdG9yJik+PiB0YXNrLCBNYXJraW5nQ29uc3RyYWludCogY29uc3RyYWludCkKICAgICAg
ICAgICAgIDogdGFzayhXVEZNb3ZlKHRhc2spKQogICAgICAgICAgICAgLCBjb25zdHJhaW50KGNv
bnN0cmFpbnQpCiAgICAgICAgIHsKQEAgLTg1LDEyICs4NSwxMiBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgICAgICYmIGNvbnN0cmFpbnQgPT0gb3RoZXIuY29uc3RyYWludDsKICAgICAgICAgfQog
ICAgICAgICAKLSAgICAgICAgUmVmUHRyPFNoYXJlZFRhc2s8dm9pZChTbG90VmlzaXRvciYpPj4g
dGFzazsKKyAgICAgICAgUmVmUHRyPFNoYXJlZFRhc2s8dm9pZChBYnN0cmFjdFNsb3RWaXNpdG9y
Jik+PiB0YXNrOwogICAgICAgICBNYXJraW5nQ29uc3RyYWludCogY29uc3RyYWludCB7IG51bGxw
dHIgfTsKICAgICB9OwogICAgIAogICAgIEhlYXAmIG1faGVhcDsKLSAgICBTbG90VmlzaXRvciYg
bV9tYWluVmlzaXRvcjsKKyAgICBBYnN0cmFjdFNsb3RWaXNpdG9yJiBtX21haW5WaXNpdG9yOwog
ICAgIE1hcmtpbmdDb25zdHJhaW50U2V0JiBtX3NldDsKICAgICBCaXRWZWN0b3IgbV9leGVjdXRl
ZDsKICAgICBEZXF1ZTxUYXNrV2l0aENvbnN0cmFpbnQsIDMyPiBtX3RvRXhlY3V0ZUluUGFyYWxs
ZWw7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TaW1wbGVNYXJraW5nQ29uc3Ry
YWludC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2ltcGxl
TWFya2luZ0NvbnN0cmFpbnQuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9TaW1wbGVNYXJraW5nQ29uc3RyYWludC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MzAsNyArMzAsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQ6
OlNpbXBsZU1hcmtpbmdDb25zdHJhaW50KAogICAgIENTdHJpbmcgYWJicmV2aWF0ZWROYW1lLCBD
U3RyaW5nIG5hbWUsCi0gICAgOjpGdW5jdGlvbjx2b2lkKFNsb3RWaXNpdG9yJik+IGV4ZWN1dGVG
dW5jdGlvbiwKKyAgICA6OkZ1bmN0aW9uPHZvaWQoQWJzdHJhY3RTbG90VmlzaXRvciYpPiBleGVj
dXRlRnVuY3Rpb24sCiAgICAgQ29uc3RyYWludFZvbGF0aWxpdHkgdm9sYXRpbGl0eSwgQ29uc3Ry
YWludENvbmN1cnJlbmN5IGNvbmN1cnJlbmN5LAogICAgIENvbnN0cmFpbnRQYXJhbGxlbGlzbSBw
YXJhbGxlbGlzbSkKICAgICA6IE1hcmtpbmdDb25zdHJhaW50KFdURk1vdmUoYWJicmV2aWF0ZWRO
YW1lKSwgV1RGTW92ZShuYW1lKSwgdm9sYXRpbGl0eSwgY29uY3VycmVuY3ksIHBhcmFsbGVsaXNt
KQpAQCAtNDIsNyArNDIsNyBAQCBTaW1wbGVNYXJraW5nQ29uc3RyYWludDo6flNpbXBsZU1hcmtp
bmdDCiB7CiB9CiAKLXZvaWQgU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQ6OmV4ZWN1dGVJbXBsKFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBTaW1wbGVNYXJraW5nQ29uc3RyYWludDo6ZXhlY3V0
ZUltcGwoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBtX2V4ZWN1dGVGdW5j
dGlvbih2aXNpdG9yKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1NpbXBs
ZU1hcmtpbmdDb25zdHJhaW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0zNywxNCArMzcsMTQgQEAgY2xhc3MgU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQgZmlu
YWwgOiBwdQogcHVibGljOgogICAgIEpTX0VYUE9SVF9QUklWQVRFIFNpbXBsZU1hcmtpbmdDb25z
dHJhaW50KAogICAgICAgICBDU3RyaW5nIGFiYnJldmlhdGVkTmFtZSwgQ1N0cmluZyBuYW1lLAot
ICAgICAgICA6OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3ImKT4sCisgICAgICAgIDo6RnVuY3Rp
b248dm9pZChBYnN0cmFjdFNsb3RWaXNpdG9yJik+LAogICAgICAgICBDb25zdHJhaW50Vm9sYXRp
bGl0eSwKICAgICAgICAgQ29uc3RyYWludENvbmN1cnJlbmN5ID0gQ29uc3RyYWludENvbmN1cnJl
bmN5OjpDb25jdXJyZW50LAogICAgICAgICBDb25zdHJhaW50UGFyYWxsZWxpc20gPSBDb25zdHJh
aW50UGFyYWxsZWxpc206OlNlcXVlbnRpYWwpOwogICAgIAogICAgIFNpbXBsZU1hcmtpbmdDb25z
dHJhaW50KAogICAgICAgICBDU3RyaW5nIGFiYnJldmlhdGVkTmFtZSwgQ1N0cmluZyBuYW1lLAot
ICAgICAgICA6OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3ImKT4gZnVuYywKKyAgICAgICAgOjpG
dW5jdGlvbjx2b2lkKEFic3RyYWN0U2xvdFZpc2l0b3ImKT4gZnVuYywKICAgICAgICAgQ29uc3Ry
YWludFZvbGF0aWxpdHkgdm9sYXRpbGl0eSwKICAgICAgICAgQ29uc3RyYWludFBhcmFsbGVsaXNt
IHBhcmFsbGVsaXNtKQogICAgICAgICA6IFNpbXBsZU1hcmtpbmdDb25zdHJhaW50KGFiYnJldmlh
dGVkTmFtZSwgbmFtZSwgV1RGTW92ZShmdW5jKSwgdm9sYXRpbGl0eSwgQ29uc3RyYWludENvbmN1
cnJlbmN5OjpDb25jdXJyZW50LCBwYXJhbGxlbGlzbSkKQEAgLTU0LDkgKzU0LDkgQEAgcHVibGlj
OgogICAgIEpTX0VYUE9SVF9QUklWQVRFIH5TaW1wbGVNYXJraW5nQ29uc3RyYWludCgpIGZpbmFs
OwogICAgIAogcHJpdmF0ZToKLSAgICB2b2lkIGV4ZWN1dGVJbXBsKFNsb3RWaXNpdG9yJikgZmlu
YWw7CisgICAgdm9pZCBleGVjdXRlSW1wbChBYnN0cmFjdFNsb3RWaXNpdG9yJikgZmluYWw7CiAK
LSAgICA6OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3ImKT4gbV9leGVjdXRlRnVuY3Rpb247Cisg
ICAgOjpGdW5jdGlvbjx2b2lkKEFic3RyYWN0U2xvdFZpc2l0b3ImKT4gbV9leGVjdXRlRnVuY3Rp
b247CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL1Nsb3RWaXNpdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9TbG90VmlzaXRvci5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTc3LDE1
ICs3NywxMCBAQCBzdGF0aWMgdm9pZCB2YWxpZGF0ZShKU0NlbGwqIGNlbGwpCiAjZW5kaWYKIAog
U2xvdFZpc2l0b3I6OlNsb3RWaXNpdG9yKEhlYXAmIGhlYXAsIENTdHJpbmcgY29kZU5hbWUpCi0g
ICAgOiBtX2J5dGVzVmlzaXRlZCgwKQotICAgICwgbV92aXNpdENvdW50KDApCi0gICAgLCBtX2lz
SW5QYXJhbGxlbE1vZGUoZmFsc2UpCisgICAgOiBCYXNlKGhlYXAsIGNvZGVOYW1lLCBoZWFwLm1f
b3BhcXVlUm9vdHMpCiAgICAgLCBtX21hcmtpbmdWZXJzaW9uKE1hcmtlZFNwYWNlOjppbml0aWFs
VmVyc2lvbikKLSAgICAsIG1faGVhcChoZWFwKQotICAgICwgbV9jb2RlTmFtZShjb2RlTmFtZSkK
ICNpZiBBU1NFUlRfRU5BQkxFRAogICAgICwgbV9pc0NoZWNraW5nRm9yRGVmYXVsdE1hcmtWaW9s
YXRpb24oZmFsc2UpCi0gICAgLCBtX2lzRHJhaW5pbmcoZmFsc2UpCiAjZW5kaWYKIHsKIH0KQEAg
LTExNyw4ICsxMTIsOCBAQCB2b2lkIFNsb3RWaXNpdG9yOjpkaWRTdGFydE1hcmtpbmcoKQogCiB2
b2lkIFNsb3RWaXNpdG9yOjpyZXNldCgpCiB7CisgICAgQWJzdHJhY3RTbG90VmlzaXRvcjo6cmVz
ZXQoKTsKICAgICBtX2J5dGVzVmlzaXRlZCA9IDA7Ci0gICAgbV92aXNpdENvdW50ID0gMDsKICAg
ICBtX2hlYXBBbmFseXplciA9IG51bGxwdHI7CiAgICAgUkVMRUFTRV9BU1NFUlQoIW1fY3VycmVu
dENlbGwpOwogfQpAQCAtMjMwLDcgKzIyNSw3IEBAIHZvaWQgU2xvdFZpc2l0b3I6OmFwcGVuZEpT
Q2VsbE9yQXV4aWxpYXIKIHZvaWQgU2xvdFZpc2l0b3I6OmFwcGVuZFNsb3coSlNDZWxsKiBjZWxs
LCBEZXBlbmRlbmN5IGRlcGVuZGVuY3kpCiB7CiAgICAgaWYgKFVOTElLRUxZKG1faGVhcEFuYWx5
emVyKSkKLSAgICAgICAgbV9oZWFwQW5hbHl6ZXItPmFuYWx5emVFZGdlKG1fY3VycmVudENlbGws
IGNlbGwsIG1fcm9vdE1hcmtSZWFzb24pOworICAgICAgICBtX2hlYXBBbmFseXplci0+YW5hbHl6
ZUVkZ2UobV9jdXJyZW50Q2VsbCwgY2VsbCwgcm9vdE1hcmtSZWFzb24oKSk7CiAKICAgICBhcHBl
bmRIaWRkZW5TbG93SW1wbChjZWxsLCBkZXBlbmRlbmN5KTsKIH0KQEAgLTgwNywxMiArODAyLDEy
IEBAIE1hcmtTdGFja0FycmF5JiBTbG90VmlzaXRvcjo6Y29ycmVzcG9uZGkKICAgICByZXR1cm4g
Km1faGVhcC5tX3NoYXJlZE11dGF0b3JNYXJrU3RhY2s7CiB9CiAKLXZvaWQgU2xvdFZpc2l0b3I6
OmFkZFBhcmFsbGVsQ29uc3RyYWludFRhc2soUmVmUHRyPFNoYXJlZFRhc2s8dm9pZChTbG90Vmlz
aXRvciYpPj4gdGFzaykKK3ZvaWQgU2xvdFZpc2l0b3I6OmFkZFBhcmFsbGVsQ29uc3RyYWludFRh
c2soUmVmUHRyPFNoYXJlZFRhc2s8dm9pZChBYnN0cmFjdFNsb3RWaXNpdG9yJik+PiB0YXNrKQog
ewogICAgIFJFTEVBU0VfQVNTRVJUKG1fY3VycmVudFNvbHZlcik7CiAgICAgUkVMRUFTRV9BU1NF
UlQobV9jdXJyZW50Q29uc3RyYWludCk7CiAgICAgUkVMRUFTRV9BU1NFUlQodGFzayk7Ci0gICAg
CisKICAgICBtX2N1cnJlbnRTb2x2ZXItPmFkZFBhcmFsbGVsVGFzayh0YXNrLCAqbV9jdXJyZW50
Q29uc3RyYWludCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RW
aXNpdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZp
c2l0b3IuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
U2xvdFZpc2l0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMjUsNTkgKzI1LDcxIEBACiAKICNwcmFn
bWEgb25jZQogCisjaW5jbHVkZSAiQWJzdHJhY3RTbG90VmlzaXRvci5oIgogI2luY2x1ZGUgIkhh
bmRsZVR5cGVzLmgiCiAjaW5jbHVkZSAiSXRlcmF0aW9uU3RhdHVzLmgiCi0jaW5jbHVkZSAiTWFy
a1N0YWNrLmgiCi0jaW5jbHVkZSAiUm9vdE1hcmtSZWFzb24uaCIKLSNpbmNsdWRlICJWaXNpdFJh
Y2VLZXkuaCIKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9Nb25vdG9u
aWNUaW1lLmg+Ci0jaW5jbHVkZSA8d3RmL1NoYXJlZFRhc2suaD4KLSNpbmNsdWRlIDx3dGYvdGV4
dC9DU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCi1jbGFzcyBDb25zZXJ2YXRpdmVSb290
czsKIGNsYXNzIEdDVGhyZWFkU2hhcmVkRGF0YTsKLWNsYXNzIEhlYXA7CiBjbGFzcyBIZWFwQ2Vs
bDsKIGNsYXNzIEhlYXBBbmFseXplcjsKLWNsYXNzIE1hcmtlZEJsb2NrOwogY2xhc3MgTWFya2lu
Z0NvbnN0cmFpbnQ7CiBjbGFzcyBNYXJraW5nQ29uc3RyYWludFNvbHZlcjsKLXRlbXBsYXRlPHR5
cGVuYW1lIFQ+IGNsYXNzIFdlYWs7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBUcmFp
dHM+IGNsYXNzIFdyaXRlQmFycmllckJhc2U7CiAKIHR5cGVkZWYgdWludDMyX3QgSGVhcFZlcnNp
b247CiAKLWNsYXNzIFNsb3RWaXNpdG9yIHsKK2NsYXNzIFNsb3RWaXNpdG9yIGZpbmFsIDogcHVi
bGljIEFic3RyYWN0U2xvdFZpc2l0b3IgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFNsb3RW
aXNpdG9yKTsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIAorICAgIHVzaW5nIEJhc2Ug
PSBBYnN0cmFjdFNsb3RWaXNpdG9yOworCiAgICAgZnJpZW5kIGNsYXNzIFNldEN1cnJlbnRDZWxs
U2NvcGU7CiAgICAgZnJpZW5kIGNsYXNzIEhlYXA7CiAKIHB1YmxpYzoKKyAgICBjbGFzcyBDb250
ZXh0IHsKKyAgICBwdWJsaWM6CisgICAgICAgIEFMV0FZU19JTkxJTkUgQ29udGV4dChBYnN0cmFj
dFNsb3RWaXNpdG9yJiwgSGVhcENlbGwqKSB7IH0KKyAgICB9OworCisgICAgY2xhc3MgRGVmYXVs
dE1hcmtpbmdWaW9sYXRpb25Bc3NlcnRpb25TY29wZSB7CisgICAgcHVibGljOgorI2lmIEFTU0VS
VF9FTkFCTEVECisgICAgICAgIERlZmF1bHRNYXJraW5nVmlvbGF0aW9uQXNzZXJ0aW9uU2NvcGUo
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCisgICAgICAgICAgICA6IG1fdmlzaXRvcih2aXNpdG9yKQor
ICAgICAgICB7CisgICAgICAgICAgICBtX3dhc0NoZWNraW5nRm9yRGVmYXVsdE1hcmtWaW9sYXRp
b24gPSBtX3Zpc2l0b3IubV9pc0NoZWNraW5nRm9yRGVmYXVsdE1hcmtWaW9sYXRpb247CisgICAg
ICAgICAgICBtX3Zpc2l0b3IubV9pc0NoZWNraW5nRm9yRGVmYXVsdE1hcmtWaW9sYXRpb24gPSBm
YWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIH5EZWZhdWx0TWFya2luZ1Zpb2xhdGlvbkFzc2Vy
dGlvblNjb3BlKCkKKyAgICAgICAgeworICAgICAgICAgICAgbV92aXNpdG9yLm1faXNDaGVja2lu
Z0ZvckRlZmF1bHRNYXJrVmlvbGF0aW9uID0gbV93YXNDaGVja2luZ0ZvckRlZmF1bHRNYXJrVmlv
bGF0aW9uOworICAgICAgICB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBTbG90VmlzaXRvciYg
bV92aXNpdG9yOworICAgICAgICBib29sIG1fd2FzQ2hlY2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xh
dGlvbjsKKyNlbHNlCisgICAgICAgIERlZmF1bHRNYXJraW5nVmlvbGF0aW9uQXNzZXJ0aW9uU2Nv
cGUoU2xvdFZpc2l0b3ImKSB7IH0KKyNlbmRpZgorICAgIH07CisKICAgICBTbG90VmlzaXRvcihI
ZWFwJiwgQ1N0cmluZyBjb2RlTmFtZSk7CiAgICAgflNsb3RWaXNpdG9yKCk7CiAKLSAgICBNYXJr
U3RhY2tBcnJheSYgY29sbGVjdG9yTWFya1N0YWNrKCkgeyByZXR1cm4gbV9jb2xsZWN0b3JTdGFj
azsgfQotICAgIE1hcmtTdGFja0FycmF5JiBtdXRhdG9yTWFya1N0YWNrKCkgeyByZXR1cm4gbV9t
dXRhdG9yU3RhY2s7IH0KLSAgICBjb25zdCBNYXJrU3RhY2tBcnJheSYgY29sbGVjdG9yTWFya1N0
YWNrKCkgY29uc3QgeyByZXR1cm4gbV9jb2xsZWN0b3JTdGFjazsgfQotICAgIGNvbnN0IE1hcmtT
dGFja0FycmF5JiBtdXRhdG9yTWFya1N0YWNrKCkgY29uc3QgeyByZXR1cm4gbV9tdXRhdG9yU3Rh
Y2s7IH0KLSAgICAKLSAgICBWTSYgdm0oKTsKLSAgICBjb25zdCBWTSYgdm0oKSBjb25zdDsKLSAg
ICBIZWFwKiBoZWFwKCkgY29uc3Q7CisgICAgdm9pZCBhcHBlbmQoY29uc3QgQ29uc2VydmF0aXZl
Um9vdHMmKSBmaW5hbDsKIAotICAgIHZvaWQgYXBwZW5kKGNvbnN0IENvbnNlcnZhdGl2ZVJvb3Rz
Jik7Ci0gICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVHJhaXRzPiB2b2lk
IGFwcGVuZChjb25zdCBXcml0ZUJhcnJpZXJCYXNlPFQsIFRyYWl0cz4mKTsKICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBUcmFpdHM+IHZvaWQgYXBwZW5kSGlkZGVuKGNvbnN0IFdy
aXRlQmFycmllckJhc2U8VCwgVHJhaXRzPiYpOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEl0ZXJh
dG9yPiB2b2lkIGFwcGVuZChJdGVyYXRvciBiZWdpbiAsIEl0ZXJhdG9yIGVuZCk7Ci0gICAgdm9p
ZCBhcHBlbmRWYWx1ZXMoY29uc3QgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duLCBSYXdWYWx1ZVRy
YWl0czxVbmtub3duPj4qLCBzaXplX3QgY291bnQpOwotICAgIHZvaWQgYXBwZW5kVmFsdWVzSGlk
ZGVuKGNvbnN0IFdyaXRlQmFycmllckJhc2U8VW5rbm93biwgUmF3VmFsdWVUcmFpdHM8VW5rbm93
bj4+Kiwgc2l6ZV90IGNvdW50KTsKLSAgICAKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgYXBwZW5k
VmFsdWVzKGNvbnN0IFdyaXRlQmFycmllckJhc2U8VW5rbm93biwgUmF3VmFsdWVUcmFpdHM8VW5r
bm93bj4+Kiwgc2l6ZV90IGNvdW50KTsKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgYXBwZW5kVmFs
dWVzSGlkZGVuKGNvbnN0IFdyaXRlQmFycmllckJhc2U8VW5rbm93biwgUmF3VmFsdWVUcmFpdHM8
VW5rbm93bj4+Kiwgc2l6ZV90IGNvdW50KTsKKwogICAgIC8vIFRoZXNlIGRvbid0IHJlcXVpcmUg
eW91IHRvIHByb3ZlIHRoYXQgeW91IGhhdmUgYSBXcml0ZUJhcnJpZXI8Pi4gVGhhdCBtYWtlcyBz
ZW5zZQogICAgIC8vIGZvcjoKICAgICAvLwpAQCAtODcsMzIgKzk5LDI3IEBAIHB1YmxpYzoKICAg
ICAvLwogICAgIC8vIElmIHlvdSBhcmUgbm90IGEgcm9vdCBhbmQgeW91IGRvbid0IGtub3cgd2hh
dCBraW5kIG9mIGJhcnJpZXIgeW91IGhhdmUsIHRoZW4geW91CiAgICAgLy8gc2hvdWxkbid0IGNh
bGwgdGhlc2UgbWV0aG9kcy4KLSAgICB2b2lkIGFwcGVuZFVuYmFycmllcmVkKEpTVmFsdWUpOwot
ICAgIHZvaWQgYXBwZW5kVW5iYXJyaWVyZWQoSlNWYWx1ZSosIHNpemVfdCk7Ci0gICAgdm9pZCBh
cHBlbmRVbmJhcnJpZXJlZChKU0NlbGwqKTsKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgYXBwZW5k
VW5iYXJyaWVyZWQoSlNWYWx1ZSk7CisgICAgQUxXQVlTX0lOTElORSB2b2lkIGFwcGVuZFVuYmFy
cmllcmVkKEpTVmFsdWUqLCBzaXplX3QpOworICAgIHZvaWQgYXBwZW5kVW5iYXJyaWVyZWQoSlND
ZWxsKikgZmluYWw7CiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KICAgICB2b2lkIGFw
cGVuZChjb25zdCBXZWFrPFQ+JiB3ZWFrKTsKICAgICAKLSAgICB2b2lkIGFwcGVuZEhpZGRlblVu
YmFycmllcmVkKEpTVmFsdWUpOwotICAgIHZvaWQgYXBwZW5kSGlkZGVuVW5iYXJyaWVyZWQoSlND
ZWxsKik7Ci0KLSAgICBib29sIGFkZE9wYXF1ZVJvb3Qodm9pZCopOyAvLyBSZXR1cm5zIHRydWUg
aWYgdGhlIHJvb3Qgd2FzIG5ldy4KLSAgICAKLSAgICBib29sIGNvbnRhaW5zT3BhcXVlUm9vdCh2
b2lkKikgY29uc3Q7CisgICAgQUxXQVlTX0lOTElORSB2b2lkIGFwcGVuZEhpZGRlblVuYmFycmll
cmVkKEpTVmFsdWUpOworICAgIHZvaWQgYXBwZW5kSGlkZGVuVW5iYXJyaWVyZWQoSlNDZWxsKikg
ZmluYWw7CiAKLSAgICBib29sIGlzRW1wdHkoKSB7IHJldHVybiBtX2NvbGxlY3RvclN0YWNrLmlz
RW1wdHkoKSAmJiBtX211dGF0b3JTdGFjay5pc0VtcHR5KCk7IH0KKyAgICBib29sIGlzRmlyc3RW
aXNpdCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1faXNGaXJzdFZpc2l0OyB9CiAKLSAgICBib29s
IGlzRmlyc3RWaXNpdCgpIGNvbnN0IHsgcmV0dXJuIG1faXNGaXJzdFZpc2l0OyB9CisgICAgYm9v
bCBpc01hcmtlZChjb25zdCB2b2lkKikgY29uc3QgZmluYWw7CisgICAgYm9vbCBpc01hcmtlZChN
YXJrZWRCbG9jayYsIEhlYXBDZWxsKikgY29uc3QgZmluYWw7CisgICAgYm9vbCBpc01hcmtlZChQ
cmVjaXNlQWxsb2NhdGlvbiYsIEhlYXBDZWxsKikgY29uc3QgZmluYWw7CiAKICAgICB2b2lkIGRp
ZFN0YXJ0TWFya2luZygpOwogICAgIHZvaWQgcmVzZXQoKTsKICAgICB2b2lkIGNsZWFyTWFya1N0
YWNrcygpOwogCiAgICAgc2l6ZV90IGJ5dGVzVmlzaXRlZCgpIGNvbnN0IHsgcmV0dXJuIG1fYnl0
ZXNWaXNpdGVkOyB9Ci0gICAgc2l6ZV90IHZpc2l0Q291bnQoKSBjb25zdCB7IHJldHVybiBtX3Zp
c2l0Q291bnQ7IH0KLSAgICAKLSAgICB2b2lkIGFkZFRvVmlzaXRDb3VudChzaXplX3QgdmFsdWUp
IHsgbV92aXNpdENvdW50ICs9IHZhbHVlOyB9CiAKICAgICB2b2lkIGRvbmF0ZSgpOwogICAgIHZv
aWQgZHJhaW4oTW9ub3RvbmljVGltZSB0aW1lb3V0ID0gTW9ub3RvbmljVGltZTo6aW5maW5pdHko
KSk7CkBAIC0xMzUsMjQgKzE0MiwxOCBAQCBwdWJsaWM6CiAgICAgCiAgICAgLy8gVGhpcyBpbmZv
cm1zIHRoZSBHQyBhYm91dCBhdXhpbGlhcnkgb2Ygc29tZSBzaXplIHRoYXQgd2UgYXJlIGtlZXBp
bmcgYWxpdmUuIElmIHlvdSBkb24ndCBkbwogICAgIC8vIHRoaXMgdGhlbiB0aGUgc3BhY2Ugd2ls
bCBiZSBmcmVlZCBhdCBlbmQgb2YgR0MuCi0gICAgdm9pZCBtYXJrQXV4aWxpYXJ5KGNvbnN0IHZv
aWQqIGJhc2UpOworICAgIHZvaWQgbWFya0F1eGlsaWFyeShjb25zdCB2b2lkKiBiYXNlKSBmaW5h
bDsKIAotICAgIHZvaWQgcmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKHNpemVfdCk7CisgICAgdm9p
ZCByZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQoc2l6ZV90KSBmaW5hbDsKICNpZiBFTkFCTEUoUkVT
T1VSQ0VfVVNBR0UpCi0gICAgdm9pZCByZXBvcnRFeHRlcm5hbE1lbW9yeVZpc2l0ZWQoc2l6ZV90
KTsKKyAgICB2b2lkIHJlcG9ydEV4dGVybmFsTWVtb3J5VmlzaXRlZChzaXplX3QpIGZpbmFsOwog
I2VuZGlmCiAgICAgCi0gICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7Ci0KLSAgICBi
b29sIGlzQW5hbHl6aW5nSGVhcCgpIGNvbnN0IHsgcmV0dXJuICEhbV9oZWFwQW5hbHl6ZXI7IH0K
LSAgICBIZWFwQW5hbHl6ZXIqIGhlYXBBbmFseXplcigpIGNvbnN0IHsgcmV0dXJuIG1faGVhcEFu
YWx5emVyOyB9Ci0gICAgCi0gICAgUm9vdE1hcmtSZWFzb24gcm9vdE1hcmtSZWFzb24oKSBjb25z
dCB7IHJldHVybiBtX3Jvb3RNYXJrUmVhc29uOyB9Ci0gICAgdm9pZCBzZXRSb290TWFya1JlYXNv
bihSb290TWFya1JlYXNvbiByZWFzb24pIHsgbV9yb290TWFya1JlYXNvbiA9IHJlYXNvbjsgfQor
ICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0IGZpbmFsOwogCiAgICAgSGVhcFZlcnNp
b24gbWFya2luZ1ZlcnNpb24oKSBjb25zdCB7IHJldHVybiBtX21hcmtpbmdWZXJzaW9uOyB9CiAK
LSAgICBib29sIG11dGF0b3JJc1N0b3BwZWQoKSBjb25zdCB7IHJldHVybiBtX211dGF0b3JJc1N0
b3BwZWQ7IH0KKyAgICBib29sIG11dGF0b3JJc1N0b3BwZWQoKSBjb25zdCBmaW5hbCB7IHJldHVy
biBtX211dGF0b3JJc1N0b3BwZWQ7IH0KICAgICAKICAgICBMb2NrJiByaWdodFRvUnVuKCkgeyBy
ZXR1cm4gbV9yaWdodFRvUnVuOyB9CiAgICAgCkBAIC0xNjQsMjAgKzE2NSwxNiBAQCBwdWJsaWM6
CiAgICAgCiAgICAgdm9pZCBvcHRpbWl6ZUZvclN0b3BwZWRNdXRhdG9yKCk7CiAgICAgCi0gICAg
dm9pZCBkaWRSYWNlKGNvbnN0IFZpc2l0UmFjZUtleSYpOworICAgIHZvaWQgZGlkUmFjZShjb25z
dCBWaXNpdFJhY2VLZXkmKSBmaW5hbDsKICAgICB2b2lkIGRpZFJhY2UoSlNDZWxsKiBjZWxsLCBj
b25zdCBjaGFyKiByZWFzb24pIHsgZGlkUmFjZShWaXNpdFJhY2VLZXkoY2VsbCwgcmVhc29uKSk7
IH0KICAgICAKLSAgICB2b2lkIHZpc2l0QXNDb25zdHJhaW50KGNvbnN0IEpTQ2VsbCopOworICAg
IHZvaWQgdmlzaXRBc0NvbnN0cmFpbnQoY29uc3QgSlNDZWxsKikgZmluYWw7CiAgICAgCiAgICAg
Ym9vbCBkaWRSZWFjaFRlcm1pbmF0aW9uKCk7CiAgICAgCi0gICAgdm9pZCBzZXRJZ25vcmVOZXdP
cGFxdWVSb290cyhib29sIHZhbHVlKSB7IG1faWdub3JlTmV3T3BhcXVlUm9vdHMgPSB2YWx1ZTsg
fQotCiAgICAgdm9pZCBkb25hdGVBbGwoKTsKICAgICAKLSAgICBjb25zdCBjaGFyKiBjb2RlTmFt
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29kZU5hbWUuZGF0YSgpOyB9Ci0gICAgCi0gICAgSlNfRVhQ
T1JUX1BSSVZBVEUgdm9pZCBhZGRQYXJhbGxlbENvbnN0cmFpbnRUYXNrKFJlZlB0cjxTaGFyZWRU
YXNrPHZvaWQoU2xvdFZpc2l0b3ImKT4+KTsKKyAgICB2b2lkIGFkZFBhcmFsbGVsQ29uc3RyYWlu
dFRhc2soUmVmUHRyPFNoYXJlZFRhc2s8dm9pZChBYnN0cmFjdFNsb3RWaXNpdG9yJik+PikgZmlu
YWw7CiAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIFBhcmFsbGVsTW9kZUVuYWJsZXI7CkBA
IC0yMTYsMzkgKzIxMywyNSBAQCBwcml2YXRlOgogCiAgICAgTWFya1N0YWNrQXJyYXkmIGNvcnJl
c3BvbmRpbmdHbG9iYWxTdGFjayhNYXJrU3RhY2tBcnJheSYpOwogCi0gICAgTWFya1N0YWNrQXJy
YXkgbV9jb2xsZWN0b3JTdGFjazsKLSAgICBNYXJrU3RhY2tBcnJheSBtX211dGF0b3JTdGFjazsK
LSAgICAKLSAgICBzaXplX3QgbV9ieXRlc1Zpc2l0ZWQ7Ci0gICAgc2l6ZV90IG1fdmlzaXRDb3Vu
dDsKLSAgICBzaXplX3QgbV9ub25DZWxsVmlzaXRDb3VudCB7IDAgfTsgLy8gVXNlZCBmb3IgaW5j
cmVtZW50YWwgZHJhaW5pbmcsIGlnbm9yZWQgb3RoZXJ3aXNlLgotICAgIENoZWNrZWRTaXplIG1f
ZXh0cmFNZW1vcnlTaXplIHsgMCB9OwotICAgIGJvb2wgbV9pc0luUGFyYWxsZWxNb2RlOwotICAg
IGJvb2wgbV9pZ25vcmVOZXdPcGFxdWVSb290cyB7IGZhbHNlIH07IC8vIFVzZWZ1bCBhcyBhIGRl
YnVnZ2luZyBtb2RlLgorICAgIGJvb2wgbV9pc0luUGFyYWxsZWxNb2RlIHsgZmFsc2UgfTsKIAog
ICAgIEhlYXBWZXJzaW9uIG1fbWFya2luZ1ZlcnNpb247Ci0gICAgCi0gICAgSGVhcCYgbV9oZWFw
OworCisgICAgc2l6ZV90IG1fYnl0ZXNWaXNpdGVkIHsgMCB9OworICAgIHNpemVfdCBtX25vbkNl
bGxWaXNpdENvdW50IHsgMCB9OyAvLyBVc2VkIGZvciBpbmNyZW1lbnRhbCBkcmFpbmluZywgaWdu
b3JlZCBvdGhlcndpc2UuCisgICAgQ2hlY2tlZFNpemUgbV9leHRyYU1lbW9yeVNpemUgeyAwIH07
CiAKICAgICBIZWFwQW5hbHl6ZXIqIG1faGVhcEFuYWx5emVyIHsgbnVsbHB0ciB9OwogICAgIEpT
Q2VsbCogbV9jdXJyZW50Q2VsbCB7IG51bGxwdHIgfTsKLSAgICBSb290TWFya1JlYXNvbiBtX3Jv
b3RNYXJrUmVhc29uIHsgUm9vdE1hcmtSZWFzb246Ok5vbmUgfTsKICAgICBib29sIG1faXNGaXJz
dFZpc2l0IHsgZmFsc2UgfTsKICAgICBib29sIG1fbXV0YXRvcklzU3RvcHBlZCB7IGZhbHNlIH07
CiAgICAgYm9vbCBtX2Nhbk9wdGltaXplRm9yU3RvcHBlZE11dGF0b3IgeyBmYWxzZSB9OwogICAg
IExvY2sgbV9yaWdodFRvUnVuOwogICAgIAotICAgIENTdHJpbmcgbV9jb2RlTmFtZTsKLSAgICAK
LSAgICBNYXJraW5nQ29uc3RyYWludCogbV9jdXJyZW50Q29uc3RyYWludCB7IG51bGxwdHIgfTsK
LSAgICBNYXJraW5nQ29uc3RyYWludFNvbHZlciogbV9jdXJyZW50U29sdmVyIHsgbnVsbHB0ciB9
OwotICAgIAogICAgIC8vIFB1dCBwYWRkaW5nIGhlcmUgdG8gbWl0aWdhdGUgZmFsc2Ugc2hhcmlu
ZyBiZXR3ZWVuIG11bHRpcGxlIFNsb3RWaXNpdG9ycy4KICAgICBjaGFyIHBhZGRpbmdbNjRdOwot
cHVibGljOgogI2lmIEFTU0VSVF9FTkFCTEVECi0gICAgYm9vbCBtX2lzQ2hlY2tpbmdGb3JEZWZh
dWx0TWFya1Zpb2xhdGlvbjsKLSAgICBib29sIG1faXNEcmFpbmluZzsKKyAgICBib29sIG1faXND
aGVja2luZ0ZvckRlZmF1bHRNYXJrVmlvbGF0aW9uIHsgZmFsc2UgfTsKICNlbmRpZgogfTsKIApA
QCAtMjcxLDIzICsyNTQsNCBAQCBwcml2YXRlOgogICAgIFNsb3RWaXNpdG9yJiBtX3N0YWNrOwog
fTsKIAotY2xhc3MgU2V0Um9vdE1hcmtSZWFzb25TY29wZSB7Ci1wdWJsaWM6Ci0gICAgU2V0Um9v
dE1hcmtSZWFzb25TY29wZShTbG90VmlzaXRvciYgdmlzaXRvciwgUm9vdE1hcmtSZWFzb24gcmVh
c29uKQotICAgICAgICA6IG1fdmlzaXRvcih2aXNpdG9yKQotICAgICAgICAsIG1fcHJldmlvdXNS
ZWFzb24odmlzaXRvci5yb290TWFya1JlYXNvbigpKQotICAgIHsKLSAgICAgICAgbV92aXNpdG9y
LnNldFJvb3RNYXJrUmVhc29uKHJlYXNvbik7Ci0gICAgfQotCi0gICAgflNldFJvb3RNYXJrUmVh
c29uU2NvcGUoKQotICAgIHsKLSAgICAgICAgbV92aXNpdG9yLnNldFJvb3RNYXJrUmVhc29uKG1f
cHJldmlvdXNSZWFzb24pOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBTbG90VmlzaXRvciYgbV92
aXNpdG9yOwotICAgIFJvb3RNYXJrUmVhc29uIG1fcHJldmlvdXNSZWFzb247Ci19OwotCiB9IC8v
IG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNp
dG9ySW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Ns
b3RWaXNpdG9ySW5saW5lcy5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9TbG90VmlzaXRvcklubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI1LDkg
KzI1LDEwIEBACiAKICNwcmFnbWEgb25jZQogCisjaW5jbHVkZSAiQWJzdHJhY3RTbG90VmlzaXRv
cklubGluZXMuaCIKKyNpbmNsdWRlICJNYXJrZWRCbG9jay5oIgorI2luY2x1ZGUgIlByZWNpc2VB
bGxvY2F0aW9uLmgiCiAjaW5jbHVkZSAiU2xvdFZpc2l0b3IuaCIKLSNpbmNsdWRlICJXZWFrLmgi
Ci0jaW5jbHVkZSAiV2Vha0lubGluZXMuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAgLTEzNCwy
MSArMTM1LDE5IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBTbG90VmlzaXRvcjo6YXBwZW5kVmEKICAg
ICAgICAgYXBwZW5kSGlkZGVuKGJhcnJpZXJzW2ldKTsKIH0KIAotaW5saW5lIGJvb2wgU2xvdFZp
c2l0b3I6OmFkZE9wYXF1ZVJvb3Qodm9pZCogcHRyKQorQUxXQVlTX0lOTElORSBib29sIFNsb3RW
aXNpdG9yOjppc01hcmtlZChjb25zdCB2b2lkKiBwKSBjb25zdAogewotICAgIGlmICghcHRyKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKG1faWdub3JlTmV3T3BhcXVlUm9vdHMpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoIWhlYXAoKS0+bV9vcGFxdWVSb290cy5hZGQo
cHRyKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1fdmlzaXRDb3VudCsrOwotICAgIHJl
dHVybiB0cnVlOworICAgIHJldHVybiBoZWFwKCktPmlzTWFya2VkKHApOwogfQogCi1pbmxpbmUg
Ym9vbCBTbG90VmlzaXRvcjo6Y29udGFpbnNPcGFxdWVSb290KHZvaWQqIHB0cikgY29uc3QKK0FM
V0FZU19JTkxJTkUgYm9vbCBTbG90VmlzaXRvcjo6aXNNYXJrZWQoTWFya2VkQmxvY2smIGNvbnRh
aW5lciwgSGVhcENlbGwqIGNlbGwpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGhlYXAoKS0+bV9vcGFx
dWVSb290cy5jb250YWlucyhwdHIpOworICAgIHJldHVybiBjb250YWluZXIuaXNNYXJrZWQobWFy
a2luZ1ZlcnNpb24oKSwgY2VsbCk7Cit9CisKK0FMV0FZU19JTkxJTkUgYm9vbCBTbG90VmlzaXRv
cjo6aXNNYXJrZWQoUHJlY2lzZUFsbG9jYXRpb24mIGNvbnRhaW5lciwgSGVhcENlbGwqIGNlbGwp
IGNvbnN0Cit7CisgICAgcmV0dXJuIGNvbnRhaW5lci5pc01hcmtlZChtYXJraW5nVmVyc2lvbigp
LCBjZWxsKTsKIH0KIAogaW5saW5lIHZvaWQgU2xvdFZpc2l0b3I6OnJlcG9ydEV4dHJhTWVtb3J5
VmlzaXRlZChzaXplX3Qgc2l6ZSkKQEAgLTE2OSwyMSArMTY4LDYgQEAgaW5saW5lIHZvaWQgU2xv
dFZpc2l0b3I6OnJlcG9ydEV4dGVybmFsTQogfQogI2VuZGlmCiAKLWlubGluZSBIZWFwKiBTbG90
VmlzaXRvcjo6aGVhcCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuICZtX2hlYXA7Ci19Ci0KLWlubGlu
ZSBWTSYgU2xvdFZpc2l0b3I6OnZtKCkKLXsKLSAgICByZXR1cm4gbV9oZWFwLnZtKCk7Ci19Ci0K
LWlubGluZSBjb25zdCBWTSYgU2xvdFZpc2l0b3I6OnZtKCkgY29uc3QKLXsKLSAgICByZXR1cm4g
bV9oZWFwLnZtKCk7Ci19Ci0KIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CiBJdGVyYXRpb25TdGF0
dXMgU2xvdFZpc2l0b3I6OmZvckVhY2hNYXJrU3RhY2soY29uc3QgRnVuYyYgZnVuYykKIHsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yTWFjcm9zLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3JNYWNyb3MuaAko
bm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvck1h
Y3Jvcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTMgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworbmFtZXNwYWNlIEpT
QyB7CisKK2NsYXNzIEFic3RyYWN0U2xvdFZpc2l0b3I7CitjbGFzcyBKU0NlbGw7CitjbGFzcyBT
bG90VmlzaXRvcjsKKworI2RlZmluZSBVTlVTRURfTU9ESUZJRVJfQVJHVU1FTlQgLyogdW51c2Vk
ICovCisKKyNkZWZpbmUgREVDTEFSRV9VTlVTRURfU1RSVUNUX1RPX1RFUk1JTkFURV9WSVNJVF9N
QUNST19FWFBBTkRFUl9JTVBMKGNvdW50ZXIpIFwKKyAgICBzdHJ1Y3QgVW51c2VkU2xvdFZpc2l0
b3JNYWNyb1N0cnVjdFNvV2VDYW5IYXZlQVNlbWljb2xvbiMjY291bnRlciB7IH0KKworI2RlZmlu
ZSBERUNMQVJFX1VOVVNFRF9TVFJVQ1RfVE9fVEVSTUlOQVRFX1ZJU0lUX01BQ1JPX0VYUEFOREVS
KGNvdW50ZXIpIFwKKyAgICBERUNMQVJFX1VOVVNFRF9TVFJVQ1RfVE9fVEVSTUlOQVRFX1ZJU0lU
X01BQ1JPX0VYUEFOREVSX0lNUEwoY291bnRlcikKKworI2RlZmluZSBERUNMQVJFX1VOVVNFRF9T
VFJVQ1RfVE9fVEVSTUlOQVRFX1ZJU0lUX01BQ1JPIFwKKyAgICBERUNMQVJFX1VOVVNFRF9TVFJV
Q1RfVE9fVEVSTUlOQVRFX1ZJU0lUX01BQ1JPX0VYUEFOREVSKF9fQ09VTlRFUl9fKQorCisvLyBN
YWNyb3MgZm9yIHN0YXRpYyB2aXNpdEFnZ3JlZ2F0ZSgpLgorCisjZGVmaW5lIERFQ0xBUkVfVklT
SVRfQUdHUkVHQVRFX1dJVEhfTU9ESUZJRVIocG9zdE1vZGlmaWVyKSBcCitwcml2YXRlOiBcCisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gQUxXQVlTX0lOTElORSB2b2lkIHZpc2l0QWdn
cmVnYXRlSW1wbChWaXNpdG9yJikgcG9zdE1vZGlmaWVyOyBcCitwdWJsaWM6IFwKKyAgICB2b2lk
IHZpc2l0QWdncmVnYXRlKEFic3RyYWN0U2xvdFZpc2l0b3ImKSBwb3N0TW9kaWZpZXI7IFwKKyAg
ICB2b2lkIHZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJikgcG9zdE1vZGlmaWVyCisKKyNkZWZp
bmUgREVDTEFSRV9WSVNJVF9BR0dSRUdBVEUgXAorICAgIERFQ0xBUkVfVklTSVRfQUdHUkVHQVRF
X1dJVEhfTU9ESUZJRVIoVU5VU0VEX01PRElGSUVSX0FSR1VNRU5UKQorCisjZGVmaW5lIERFRklO
RV9WSVNJVF9BR0dSRUdBVEVfV0lUSF9NT0RJRklFUihjbGFzc05hbWUsIHBvc3RNb2RpZmllcikg
XAorICAgIHZvaWQgY2xhc3NOYW1lOjp2aXNpdEFnZ3JlZ2F0ZShBYnN0cmFjdFNsb3RWaXNpdG9y
JiB2aXNpdG9yKSBwb3N0TW9kaWZpZXIgeyB2aXNpdEFnZ3JlZ2F0ZUltcGwodmlzaXRvcik7IH0g
XAorICAgIHZvaWQgY2xhc3NOYW1lOjp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYgdmlzaXRv
cikgcG9zdE1vZGlmaWVyIHsgdmlzaXRBZ2dyZWdhdGVJbXBsKHZpc2l0b3IpOyB9IFwKKyAgICBE
RUNMQVJFX1VOVVNFRF9TVFJVQ1RfVE9fVEVSTUlOQVRFX1ZJU0lUX01BQ1JPCisKKyNkZWZpbmUg
REVGSU5FX1ZJU0lUX0FHR1JFR0FURShjbGFzc05hbWUpIFwKKyAgICBERUZJTkVfVklTSVRfQUdH
UkVHQVRFX1dJVEhfTU9ESUZJRVIoY2xhc3NOYW1lLCBVTlVTRURfTU9ESUZJRVJfQVJHVU1FTlQp
CisKKy8vIE1hY3JvcyBmb3Igc3RhdGljIHZpc2l0Q2hpbGRyZW4oKS4KKworI2RlZmluZSBERUNM
QVJFX1ZJU0lUX0NISUxEUkVOX1dJVEhfTU9ESUZJRVIocHJlTW9kaWZpZXIpIFwKK3ByaXZhdGU6
IFwKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiBBTFdBWVNfSU5MSU5FIHN0YXRpYyB2
b2lkIHZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCosIFZpc2l0b3ImKTsgXAorcHVibGljOiBcCisg
ICAgcHJlTW9kaWZpZXIgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBBYnN0cmFj
dFNsb3RWaXNpdG9yJik7IFwKKyAgICBwcmVNb2RpZmllciBzdGF0aWMgdm9pZCB2aXNpdENoaWxk
cmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJikKKworI2RlZmluZSBERUNMQVJFX1ZJU0lUX0NISUxE
UkVOIFwKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOX1dJVEhfTU9ESUZJRVIoVU5VU0VEX01P
RElGSUVSX0FSR1VNRU5UKQorCisjZGVmaW5lIERFRklORV9WSVNJVF9DSElMRFJFTl9XSVRIX01P
RElGSUVSKHByZU1vZGlmaWVyLCBjbGFzc05hbWUpIFwKKyAgICBwcmVNb2RpZmllciB2b2lkIGNs
YXNzTmFtZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIEFic3RyYWN0U2xvdFZpc2l0b3Im
IHZpc2l0b3IpIFwKKyAgICB7IFwKKyAgICAgICAgQWJzdHJhY3RTbG90VmlzaXRvcjo6Q29udGV4
dCBjb250ZXh0KHZpc2l0b3IsIGNlbGwpOyBcCisgICAgICAgIHZpc2l0Q2hpbGRyZW5JbXBsKGNl
bGwsIHZpc2l0b3IpOyBcCisgICAgfSBcCisgICAgcHJlTW9kaWZpZXIgdm9pZCBjbGFzc05hbWU6
OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikgeyB2aXNp
dENoaWxkcmVuSW1wbChjZWxsLCB2aXNpdG9yKTsgfSBcCisgICAgREVDTEFSRV9VTlVTRURfU1RS
VUNUX1RPX1RFUk1JTkFURV9WSVNJVF9NQUNSTworCisjZGVmaW5lIERFRklORV9WSVNJVF9DSElM
RFJFTihjbGFzc05hbWUpIFwKKyAgICBERUZJTkVfVklTSVRfQ0hJTERSRU5fV0lUSF9NT0RJRklF
UihVTlVTRURfTU9ESUZJRVJfQVJHVU1FTlQsIGNsYXNzTmFtZSkKKworfSAvLyBuYW1lc3BhY2Ug
SlNDCisKK3VzaW5nIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvcjsKK3VzaW5nIEpTQzo6SlNDZWxs
OwordXNpbmcgSlNDOjpTbG90VmlzaXRvcjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL1N1YnNwYWNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
U3Vic3BhY2UuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvU3Vic3BhY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTctMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM0LDYgKzM0LDcgQEAKIAogbmFtZXNw
YWNlIEpTQyB7CiAKK2NsYXNzIEFic3RyYWN0U2xvdFZpc2l0b3I7CiBjbGFzcyBBbGlnbmVkTWVt
b3J5QWxsb2NhdG9yOwogY2xhc3MgSGVhcENlbGxUeXBlOwogCkBAIC04Nyw3ICs4OCw3IEBAIHB1
YmxpYzoKICAgICB2b2lkIGZvckVhY2hNYXJrZWRDZWxsKGNvbnN0IEZ1bmMmKTsKICAgICAKICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgotICAgIFJlZjxTaGFyZWRUYXNrPHZvaWQoU2xvdFZp
c2l0b3ImKT4+IGZvckVhY2hNYXJrZWRDZWxsSW5QYXJhbGxlbChjb25zdCBGdW5jJik7CisgICAg
UmVmPFNoYXJlZFRhc2s8dm9pZChBYnN0cmFjdFNsb3RWaXNpdG9yJik+PiBmb3JFYWNoTWFya2Vk
Q2VsbEluUGFyYWxsZWwoY29uc3QgRnVuYyYpOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVu
Yz4KICAgICB2b2lkIGZvckVhY2hMaXZlQ2VsbChjb25zdCBGdW5jJik7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9TdWJzcGFjZUlubGluZXMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdWJzcGFjZUlubGluZXMuaAkocmV2aXNpb24gMjcyODMw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3Vic3BhY2VJbmxpbmVzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMTgg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIw
MjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC04Niw5ICs4Niw5IEBAIHZvaWQgU3Vic3BhY2U6OmZvckVhY2hNYXJrZWRD
ZWxsKGNvbnN0IEYKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KLVJlZjxTaGFyZWRUYXNr
PHZvaWQoU2xvdFZpc2l0b3ImKT4+IFN1YnNwYWNlOjpmb3JFYWNoTWFya2VkQ2VsbEluUGFyYWxs
ZWwoY29uc3QgRnVuYyYgZnVuYykKK1JlZjxTaGFyZWRUYXNrPHZvaWQoQWJzdHJhY3RTbG90Vmlz
aXRvciYpPj4gU3Vic3BhY2U6OmZvckVhY2hNYXJrZWRDZWxsSW5QYXJhbGxlbChjb25zdCBGdW5j
JiBmdW5jKQogewotICAgIGNsYXNzIFRhc2sgZmluYWwgOiBwdWJsaWMgU2hhcmVkVGFzazx2b2lk
KFNsb3RWaXNpdG9yJik+IHsKKyAgICBjbGFzcyBUYXNrIGZpbmFsIDogcHVibGljIFNoYXJlZFRh
c2s8dm9pZChBYnN0cmFjdFNsb3RWaXNpdG9yJik+IHsKICAgICBwdWJsaWM6CiAgICAgICAgIFRh
c2soU3Vic3BhY2UmIHN1YnNwYWNlLCBjb25zdCBGdW5jJiBmdW5jKQogICAgICAgICAgICAgOiBt
X3N1YnNwYWNlKHN1YnNwYWNlKQpAQCAtOTcsNyArOTcsNyBAQCBSZWY8U2hhcmVkVGFzazx2b2lk
KFNsb3RWaXNpdG9yJik+PiBTdWJzCiAgICAgICAgIHsKICAgICAgICAgfQogICAgICAgICAKLSAg
ICAgICAgdm9pZCBydW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpIGZpbmFsCisgICAgICAgIHZvaWQg
cnVuKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpIGZpbmFsCiAgICAgICAgIHsKICAgICAg
ICAgICAgIHdoaWxlIChNYXJrZWRCbG9jazo6SGFuZGxlKiBoYW5kbGUgPSBtX2Jsb2NrU291cmNl
LT5ydW4oKSkgewogICAgICAgICAgICAgICAgIGhhbmRsZS0+Zm9yRWFjaE1hcmtlZENlbGwoCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9WZXJpZmllclNsb3RWaXNpdG9yLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9WZXJpZmllclNsb3RWaXNp
dG9yLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9WZXJp
ZmllclNsb3RWaXNpdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM0MSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJWZXJpZmllclNsb3RWaXNp
dG9yLmgiCisKKyNpbmNsdWRlICJCbG9ja0RpcmVjdG9yeUlubGluZXMuaCIKKyNpbmNsdWRlICJD
b25zZXJ2YXRpdmVSb290cy5oIgorI2luY2x1ZGUgIkdDU2VnbWVudGVkQXJyYXlJbmxpbmVzLmgi
CisjaW5jbHVkZSAiSGVhcENlbGwuaCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVk
ZSAiVk0uaCIKKyNpbmNsdWRlICJWZXJpZmllclNsb3RWaXNpdG9ySW5saW5lcy5oIgorI2luY2x1
ZGUgPHd0Zi9TdGFja1RyYWNlLmg+CisKK25hbWVzcGFjZSBKU0MgeworCit1c2luZyBNYXJrZXJE
YXRhID0gVmVyaWZpZXJTbG90VmlzaXRvcjo6TWFya2VyRGF0YTsKKworY29uc3RleHByIGludCBt
YXhNYXJraW5nU3RhY2tGcmFtZXNUb0NhcHR1cmUgPSAxMDA7CisKK01hcmtlckRhdGE6Ok1hcmtl
ckRhdGEoSGVhcENlbGwqIHBhcmVudCwgc3RkOjp1bmlxdWVfcHRyPFN0YWNrVHJhY2U+JiYgc3Rh
Y2spCisgICAgOiBwYXJlbnQocGFyZW50KQorICAgICwgc3RhY2soV1RGTW92ZShzdGFjaykpCit7
Cit9CisKK1ZlcmlmaWVyU2xvdFZpc2l0b3I6Ok1hcmtlZEJsb2NrRGF0YTo6TWFya2VkQmxvY2tE
YXRhKE1hcmtlZEJsb2NrKiBibG9jaykKKyAgICA6IG1fYmxvY2soYmxvY2spCit7Cit9CisKK3Zv
aWQgVmVyaWZpZXJTbG90VmlzaXRvcjo6TWFya2VkQmxvY2tEYXRhOjphZGRNYXJrZXJEYXRhKHVu
c2lnbmVkIGF0b21OdW1iZXIsIE1hcmtlckRhdGEmJiBtYXJrZXIpCit7CisgICAgaWYgKG1fbWFy
a2Vycy5pc0VtcHR5KCkpCisgICAgICAgIG1fbWFya2Vycy5ncm93KE1hcmtlZEJsb2NrOjphdG9t
c1BlckJsb2NrKTsKKyAgICBtX21hcmtlcnNbYXRvbU51bWJlcl0gPSBXVEZNb3ZlKG1hcmtlcik7
Cit9CisKK2NvbnN0IE1hcmtlckRhdGEqIFZlcmlmaWVyU2xvdFZpc2l0b3I6Ok1hcmtlZEJsb2Nr
RGF0YTo6bWFya2VyRGF0YSh1bnNpZ25lZCBhdG9tTnVtYmVyKSBjb25zdAoreworICAgIGF1dG8m
IG1hcmtlciA9IG1fbWFya2Vyc1thdG9tTnVtYmVyXTsKKyAgICBpZiAobWFya2VyLnN0YWNrKQor
ICAgICAgICByZXR1cm4gJm1hcmtlcjsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworVmVyaWZp
ZXJTbG90VmlzaXRvcjo6UHJlY2lzZUFsbG9jYXRpb25EYXRhOjpQcmVjaXNlQWxsb2NhdGlvbkRh
dGEoUHJlY2lzZUFsbG9jYXRpb24qIGFsbG9jYXRpb24pCisgICAgOiBtX2FsbG9jYXRpb24oYWxs
b2NhdGlvbikKK3sKK30KKworY29uc3QgTWFya2VyRGF0YSogVmVyaWZpZXJTbG90VmlzaXRvcjo6
UHJlY2lzZUFsbG9jYXRpb25EYXRhOjptYXJrZXJEYXRhKCkgY29uc3QKK3sKKyAgICBpZiAobV9t
YXJrZXIuc3RhY2spCisgICAgICAgIHJldHVybiAmbV9tYXJrZXI7CisgICAgcmV0dXJuIG51bGxw
dHI7Cit9CisKK3ZvaWQgVmVyaWZpZXJTbG90VmlzaXRvcjo6UHJlY2lzZUFsbG9jYXRpb25EYXRh
OjphZGRNYXJrZXJEYXRhKE1hcmtlckRhdGEmJiBtYXJrZXIpCit7CisgICAgbV9tYXJrZXIgPSBX
VEZNb3ZlKG1hcmtlcik7Cit9CisKK1ZlcmlmaWVyU2xvdFZpc2l0b3I6OlZlcmlmaWVyU2xvdFZp
c2l0b3IoSGVhcCYgaGVhcCkKKyAgICA6IEJhc2UoaGVhcCwgIlZlcmlmaWVyIiwgbV9vcGFxdWVS
b290U3RvcmFnZSkKK3sKK30KKworVmVyaWZpZXJTbG90VmlzaXRvcjo6flZlcmlmaWVyU2xvdFZp
c2l0b3IoKQoreworICAgIGhlYXAoKS0+b2JqZWN0U3BhY2UoKS5mb3JFYWNoQmxvY2soCisgICAg
ICAgIFsmXSAoTWFya2VkQmxvY2s6OkhhbmRsZSogaGFuZGxlKSB7CisgICAgICAgICAgICBoYW5k
bGUtPmJsb2NrKCkuc2V0VmVyaWZpZXJNZW1vKG51bGxwdHIpOworICAgICAgICB9KTsKK30KKwor
dm9pZCBWZXJpZmllclNsb3RWaXNpdG9yOjphZGRQYXJhbGxlbENvbnN0cmFpbnRUYXNrKFJlZlB0
cjxTaGFyZWRUYXNrPHZvaWQoQWJzdHJhY3RTbG90VmlzaXRvciYpPj4gdGFzaykKK3sKKyAgICBt
X2NvbnN0cmFpbnRUYXNrcy5hcHBlbmQoV1RGTW92ZSh0YXNrKSk7Cit9CisKK3ZvaWQgVmVyaWZp
ZXJTbG90VmlzaXRvcjo6ZXhlY3V0ZUNvbnN0cmFpbnRUYXNrcygpCit7CisgICAgd2hpbGUgKCFt
X2NvbnN0cmFpbnRUYXNrcy5pc0VtcHR5KCkpCisgICAgICAgIG1fY29uc3RyYWludFRhc2tzLnRh
a2VGaXJzdCgpLT5ydW4oKnRoaXMpOworfQorCit2b2lkIFZlcmlmaWVyU2xvdFZpc2l0b3I6OmFw
cGVuZChjb25zdCBDb25zZXJ2YXRpdmVSb290cyYgY29uc2VydmF0aXZlUm9vdHMpCit7CisgICAg
YXV0byBhcHBlbmRKU0NlbGxPckF1eGlsaWFyeSA9IFsmXSAoSGVhcENlbGwqIGhlYXBDZWxsKSB7
CisgICAgICAgIGlmICghaGVhcENlbGwpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAg
aWYgKHRlc3RBbmRTZXRNYXJrZWQoaGVhcENlbGwpKQorICAgICAgICAgICAgcmV0dXJuOworCisg
ICAgICAgIHN3aXRjaCAoaGVhcENlbGwtPmNlbGxLaW5kKCkpIHsKKyAgICAgICAgY2FzZSBIZWFw
Q2VsbDo6SlNDZWxsOgorICAgICAgICBjYXNlIEhlYXBDZWxsOjpKU0NlbGxXaXRoSW5kZXhpbmdI
ZWFkZXI6IHsKKyAgICAgICAgICAgIEpTQ2VsbCoganNDZWxsID0gc3RhdGljX2Nhc3Q8SlNDZWxs
Kj4oaGVhcENlbGwpOworICAgICAgICAgICAgYXBwZW5kVG9NYXJrU3RhY2soanNDZWxsKTsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgSGVhcENlbGw6OkF1
eGlsaWFyeToKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH07CisKKyAgICBI
ZWFwQ2VsbCoqIHJvb3RzID0gY29uc2VydmF0aXZlUm9vdHMucm9vdHMoKTsKKyAgICBzaXplX3Qg
c2l6ZSA9IGNvbnNlcnZhdGl2ZVJvb3RzLnNpemUoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IHNpemU7ICsraSkKKyAgICAgICAgYXBwZW5kSlNDZWxsT3JBdXhpbGlhcnkocm9vdHNbaV0p
OworfQorCit2b2lkIFZlcmlmaWVyU2xvdFZpc2l0b3I6OmFwcGVuZFRvTWFya1N0YWNrKEpTQ2Vs
bCogY2VsbCkKK3sKKyAgICBBU1NFUlQoIWNlbGwtPmlzWmFwcGVkKCkpOworICAgIG1fY29sbGVj
dG9yU3RhY2suYXBwZW5kKGNlbGwpOworfQorCit2b2lkIFZlcmlmaWVyU2xvdFZpc2l0b3I6OmFw
cGVuZFVuYmFycmllcmVkKEpTQ2VsbCogY2VsbCkKK3sKKyAgICBpZiAoIWNlbGwpCisgICAgICAg
IHJldHVybjsKKworICAgIGlmIChVTkxJS0VMWShjZWxsLT5pc1ByZWNpc2VBbGxvY2F0aW9uKCkp
KSB7CisgICAgICAgIGlmIChMSUtFTFkoaXNNYXJrZWQoY2VsbC0+cHJlY2lzZUFsbG9jYXRpb24o
KSwgY2VsbCkpKQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0gZWxzZSB7CisgICAgICAgIE1h
cmtlZEJsb2NrJiBibG9jayA9IGNlbGwtPm1hcmtlZEJsb2NrKCk7CisgICAgICAgIGlmIChMSUtF
TFkoaXNNYXJrZWQoYmxvY2ssIGNlbGwpKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBhcHBlbmRTbG93KGNlbGwpOworfQorCit2b2lkIFZlcmlmaWVyU2xvdFZpc2l0b3I6OmFw
cGVuZEhpZGRlblVuYmFycmllcmVkKEpTQ2VsbCogY2VsbCkKK3sKKyAgICBhcHBlbmRVbmJhcnJp
ZXJlZChjZWxsKTsKK30KKwordm9pZCBWZXJpZmllclNsb3RWaXNpdG9yOjpkcmFpbigpCit7Cisg
ICAgUkVMRUFTRV9BU1NFUlQobV9tdXRhdG9yU3RhY2suaXNFbXB0eSgpKTsKKworICAgIE1hcmtT
dGFja0FycmF5JiBzdGFjayA9IG1fY29sbGVjdG9yU3RhY2s7CisgICAgaWYgKHN0YWNrLmlzRW1w
dHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgc3RhY2sucmVmaWxsKCk7CisgICAgd2hpbGUg
KHN0YWNrLmNhblJlbW92ZUxhc3QoKSkKKyAgICAgICAgdmlzaXRDaGlsZHJlbihzdGFjay5yZW1v
dmVMYXN0KCkpOworfQorCit2b2lkIFZlcmlmaWVyU2xvdFZpc2l0b3I6OmR1bXBNYXJrZXJEYXRh
KEhlYXBDZWxsKiBjZWxsKQoreworICAgIGlmIChjZWxsLT5pc1ByZWNpc2VBbGxvY2F0aW9uKCkp
CisgICAgICAgIHJldHVybiBkdW1wTWFya2VyRGF0YShjZWxsLT5wcmVjaXNlQWxsb2NhdGlvbigp
LCBjZWxsKTsKKyAgICByZXR1cm4gZHVtcE1hcmtlckRhdGEoY2VsbC0+bWFya2VkQmxvY2soKSwg
Y2VsbCk7Cit9CisKK3ZvaWQgVmVyaWZpZXJTbG90VmlzaXRvcjo6ZHVtcE1hcmtlckRhdGEoUHJl
Y2lzZUFsbG9jYXRpb24mIGFsbG9jYXRpb24sIEhlYXBDZWxsKiBjZWxsKQoreworICAgIGF1dG8g
aXRlcmF0b3IgPSBtX3ByZWNpc2VBbGxvY2F0aW9uTWFwLmZpbmQoJmFsbG9jYXRpb24pOworICAg
IGlmIChpdGVyYXRvciAhPSBtX3ByZWNpc2VBbGxvY2F0aW9uTWFwLmVuZCgpKSB7CisgICAgICAg
IGR1bXBNYXJrZXJEYXRhKGNlbGwsIGl0ZXJhdG9yLT52YWx1ZS0+bWFya2VyRGF0YSgpKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICBkYXRhTG9nTG4oIkNlbGwgIiwgUmF3UG9pbnRlcihj
ZWxsKSwgIiBub3QgZm91bmQiKTsKK30KKwordm9pZCBWZXJpZmllclNsb3RWaXNpdG9yOjpkdW1w
TWFya2VyRGF0YShNYXJrZWRCbG9jayYgYmxvY2ssIEhlYXBDZWxsKiBjZWxsKQoreworICAgIGF1
dG8gaXRlcmF0b3IgPSBtX21hcmtlZEJsb2NrTWFwLmZpbmQoJmJsb2NrKTsKKyAgICBpZiAoaXRl
cmF0b3IgIT0gbV9tYXJrZWRCbG9ja01hcC5lbmQoKSkgeworICAgICAgICB1bnNpZ25lZCBhdG9t
TnVtYmVyID0gYmxvY2suYXRvbU51bWJlcihjZWxsKTsKKyAgICAgICAgZHVtcE1hcmtlckRhdGEo
Y2VsbCwgaXRlcmF0b3ItPnZhbHVlLT5tYXJrZXJEYXRhKGF0b21OdW1iZXIpKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICBkYXRhTG9nTG4oIkNlbGwgIiwgUmF3UG9pbnRlcihjZWxsKSwg
IiBub3QgZm91bmQiKTsKK30KKwordm9pZCBWZXJpZmllclNsb3RWaXNpdG9yOjpkdW1wTWFya2Vy
RGF0YShIZWFwQ2VsbCogY2VsbCwgY29uc3QgTWFya2VyRGF0YSogbWFya2VyKQoreworICAgIGlm
ICghbWFya2VyKSB7CisgICAgICAgIGRhdGFMb2dMbigiTWFya2VyIGRhdGEgaXMgbm90IGF2YWls
YWJsZSBmb3IgY2VsbCAiLCBSYXdQb2ludGVyKGNlbGwpKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIGRhdGFMb2dMbigiQ2VsbCAiLCBSYXdQb2ludGVyKGNlbGwpLCAiIHdhcyByZWFj
aGFibGUgdmlhIGNlbGwgIiwgUmF3UG9pbnRlcihtYXJrZXItPnBhcmVudCksICIgYXQ6Iik7Cisg
ICAgbWFya2VyLT5zdGFjay0+ZHVtcChXVEY6OmRhdGFGaWxlKCksICIgICAgIik7Cit9CisKK2Jv
b2wgVmVyaWZpZXJTbG90VmlzaXRvcjo6aXNGaXJzdFZpc2l0KCkgY29uc3QKK3sKKyAgICAvLyBJ
biB0aGUgcmVndWxhciBHQywgdGhpcyByZXR1cm4gdmFsdWUgaXMgb25seSB1c2VkIHRvIGNvbnRy
b2wgd2hldGhlcgorICAgIC8vIFVubGlua2VkQ29kZUJsb2NrcyB3aWxsIGJlIGFnZWQgKHNlZSBV
bmxpbmtlZENvZGVCbG9jazo6dmlzaXRDaGlsZHJlbkltcGwoKSkuCisgICAgLy8gRm9yIHRoZSB2
ZXJpZmllciBHQyBwYXNzLCB3ZSBzaG91bGQgYWx3YXlzIHJldHVybiBmYWxzZSBiZWNhdXNlIHdl
IGRvbid0CisgICAgLy8gd2FudCB0byBkbyB0aGUgYWdpbmcgYWN0aW9uIGFnYWluLgorICAgIHJl
dHVybiBmYWxzZTsKK30KKworYm9vbCBWZXJpZmllclNsb3RWaXNpdG9yOjppc01hcmtlZChjb25z
dCB2b2lkKiByYXdDZWxsKSBjb25zdAoreworICAgIEhlYXBDZWxsKiBjZWxsID0gYml0d2lzZV9j
YXN0PEhlYXBDZWxsKj4ocmF3Q2VsbCk7CisgICAgaWYgKGNlbGwtPmlzUHJlY2lzZUFsbG9jYXRp
b24oKSkKKyAgICAgICAgcmV0dXJuIGlzTWFya2VkKGNlbGwtPnByZWNpc2VBbGxvY2F0aW9uKCks
IGNlbGwpOworICAgIHJldHVybiBpc01hcmtlZChjZWxsLT5tYXJrZWRCbG9jaygpLCBjZWxsKTsK
K30KKworYm9vbCBWZXJpZmllclNsb3RWaXNpdG9yOjppc01hcmtlZChQcmVjaXNlQWxsb2NhdGlv
biYgYWxsb2NhdGlvbiwgSGVhcENlbGwqKSBjb25zdAoreworICAgIHJldHVybiBtX3ByZWNpc2VB
bGxvY2F0aW9uTWFwLmNvbnRhaW5zKCZhbGxvY2F0aW9uKTsKK30KKworYm9vbCBWZXJpZmllclNs
b3RWaXNpdG9yOjppc01hcmtlZChNYXJrZWRCbG9jayYgYmxvY2ssIEhlYXBDZWxsKiBjZWxsKSBj
b25zdAoreworICAgIGF1dG8gZW50cnkgPSBtX21hcmtlZEJsb2NrTWFwLmZpbmQoJmJsb2NrKTsK
KyAgICBpZiAoZW50cnkgPT0gbV9tYXJrZWRCbG9ja01hcC5lbmQoKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgYXV0byYgZGF0YSA9IGVudHJ5LT52YWx1ZTsKKyAgICB1bnNpZ25lZCBh
dG9tTnVtYmVyID0gYmxvY2suYXRvbU51bWJlcihjZWxsKTsKKyAgICByZXR1cm4gZGF0YS0+aXNN
YXJrZWQoYXRvbU51bWJlcik7Cit9CisKK3ZvaWQgVmVyaWZpZXJTbG90VmlzaXRvcjo6bWFya0F1
eGlsaWFyeShjb25zdCB2b2lkKiBiYXNlKQoreworICAgIEhlYXBDZWxsKiBjZWxsID0gYml0d2lz
ZV9jYXN0PEhlYXBDZWxsKj4oYmFzZSk7CisKKyAgICBBU1NFUlQoY2VsbC0+aGVhcCgpID09IGhl
YXAoKSk7CisgICAgdGVzdEFuZFNldE1hcmtlZChjZWxsKTsKK30KKworYm9vbCBWZXJpZmllclNs
b3RWaXNpdG9yOjptdXRhdG9ySXNTdG9wcGVkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKworYm9vbCBWZXJpZmllclNsb3RWaXNpdG9yOjp0ZXN0QW5kU2V0TWFya2VkKGNvbnN0IHZv
aWQqIHJhd0NlbGwpCit7CisgICAgSGVhcENlbGwqIGNlbGwgPSBiaXR3aXNlX2Nhc3Q8SGVhcENl
bGwqPihyYXdDZWxsKTsKKyAgICBpZiAoY2VsbC0+aXNQcmVjaXNlQWxsb2NhdGlvbigpKQorICAg
ICAgICByZXR1cm4gdGVzdEFuZFNldE1hcmtlZChjZWxsLT5wcmVjaXNlQWxsb2NhdGlvbigpKTsK
KyAgICByZXR1cm4gdGVzdEFuZFNldE1hcmtlZChjZWxsLT5tYXJrZWRCbG9jaygpLCBjZWxsKTsK
K30KKworYm9vbCBWZXJpZmllclNsb3RWaXNpdG9yOjp0ZXN0QW5kU2V0TWFya2VkKFByZWNpc2VB
bGxvY2F0aW9uJiBhbGxvY2F0aW9uKQoreworICAgIHN0ZDo6dW5pcXVlX3B0cjxQcmVjaXNlQWxs
b2NhdGlvbkRhdGE+JiBkYXRhID0gbV9wcmVjaXNlQWxsb2NhdGlvbk1hcC5hZGQoJmFsbG9jYXRp
b24sIG51bGxwdHIpLml0ZXJhdG9yLT52YWx1ZTsKKyAgICBpZiAoIWRhdGEpIHsKKyAgICAgICAg
ZGF0YSA9IG1ha2VVbmlxdWU8UHJlY2lzZUFsbG9jYXRpb25EYXRhPigmYWxsb2NhdGlvbik7Cisg
ICAgICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjp2ZXJib3NlVmVyaWZ5R0MoKSkpCisgICAgICAg
ICAgICBkYXRhLT5hZGRNYXJrZXJEYXRhKHsgcGFyZW50Q2VsbCgpLCBTdGFja1RyYWNlOjpjYXB0
dXJlU3RhY2tUcmFjZShtYXhNYXJraW5nU3RhY2tGcmFtZXNUb0NhcHR1cmUsIDIpIH0pOworICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCitib29sIFZl
cmlmaWVyU2xvdFZpc2l0b3I6OnRlc3RBbmRTZXRNYXJrZWQoTWFya2VkQmxvY2smIGJsb2NrLCBI
ZWFwQ2VsbCogY2VsbCkKK3sKKyAgICBNYXJrZWRCbG9ja0RhdGEqIGRhdGEgPSBibG9jay52ZXJp
Zmllck1lbW88TWFya2VkQmxvY2tEYXRhKj4oKTsKKyAgICBpZiAoVU5MSUtFTFkoIWRhdGEpKSB7
CisgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxNYXJrZWRCbG9ja0RhdGE+JiBlbnRyeURhdGEgPSBt
X21hcmtlZEJsb2NrTWFwLmFkZCgmYmxvY2ssIG51bGxwdHIpLml0ZXJhdG9yLT52YWx1ZTsKKyAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoIWVudHJ5RGF0YSk7CisgICAgICAgIGVudHJ5RGF0YSA9IG1h
a2VVbmlxdWU8TWFya2VkQmxvY2tEYXRhPigmYmxvY2spOworICAgICAgICBkYXRhID0gZW50cnlE
YXRhLmdldCgpOworICAgICAgICBibG9jay5zZXRWZXJpZmllck1lbW8oZGF0YSk7CisgICAgfQor
CisgICAgdW5zaWduZWQgYXRvbU51bWJlciA9IGJsb2NrLmF0b21OdW1iZXIoY2VsbCk7CisgICAg
Ym9vbCBhbHJlYWR5U2V0ID0gZGF0YS0+dGVzdEFuZFNldE1hcmtlZChhdG9tTnVtYmVyKTsKKyAg
ICBpZiAoIWFscmVhZHlTZXQgJiYgVU5MSUtFTFkoT3B0aW9uczo6dmVyYm9zZVZlcmlmeUdDKCkp
KQorICAgICAgICBkYXRhLT5hZGRNYXJrZXJEYXRhKGF0b21OdW1iZXIsIHsgcGFyZW50Q2VsbCgp
LCBTdGFja1RyYWNlOjpjYXB0dXJlU3RhY2tUcmFjZShtYXhNYXJraW5nU3RhY2tGcmFtZXNUb0Nh
cHR1cmUsIDIpIH0pOworICAgIHJldHVybiBhbHJlYWR5U2V0OworfQorCit2b2lkIFZlcmlmaWVy
U2xvdFZpc2l0b3I6OnNldE1hcmtlZEFuZEFwcGVuZFRvTWFya1N0YWNrKEpTQ2VsbCogY2VsbCkK
K3sKKyAgICBpZiAobV9zdXBwcmVzc1ZlcmlmaWVyKQorICAgICAgICByZXR1cm47CisgICAgaWYg
KHRlc3RBbmRTZXRNYXJrZWQoY2VsbCkpCisgICAgICAgIHJldHVybjsKKyAgICBhcHBlbmRUb01h
cmtTdGFjayhjZWxsKTsKK30KKwordm9pZCBWZXJpZmllclNsb3RWaXNpdG9yOjp2aXNpdEFzQ29u
c3RyYWludChjb25zdCBKU0NlbGwqIGNlbGwpCit7CisgICAgdmlzaXRDaGlsZHJlbihjZWxsKTsK
K30KKwordm9pZCBWZXJpZmllclNsb3RWaXNpdG9yOjp2aXNpdENoaWxkcmVuKGNvbnN0IEpTQ2Vs
bCogY2VsbCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChpc01hcmtlZChjZWxsKSk7CisgICAgc3dp
dGNoIChjZWxsLT50eXBlKCkpIHsKKyAgICBjYXNlIFN0cmluZ1R5cGU6CisgICAgICAgIEpTU3Ry
aW5nOjp2aXNpdENoaWxkcmVuKGNvbnN0X2Nhc3Q8SlNDZWxsKj4oY2VsbCksICp0aGlzKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgICAgIAorICAgIGNhc2UgRmluYWxPYmplY3RUeXBlOgorICAgICAg
ICBKU0ZpbmFsT2JqZWN0Ojp2aXNpdENoaWxkcmVuKGNvbnN0X2Nhc3Q8SlNDZWxsKj4oY2VsbCks
ICp0aGlzKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEFycmF5VHlwZToKKyAgICAgICAg
SlNBcnJheTo6dmlzaXRDaGlsZHJlbihjb25zdF9jYXN0PEpTQ2VsbCo+KGNlbGwpLCAqdGhpcyk7
CisgICAgICAgIGJyZWFrOworICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICAvLyBGSVhN
RTogVGhpcyBjb3VsZCBiZSBzbyBtdWNoIGJldHRlci4KKyAgICAgICAgLy8gaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MjQ2MgorICAgICAgICBjZWxsLT5tZXRob2RU
YWJsZSh2bSgpKS0+dmlzaXRDaGlsZHJlbihjb25zdF9jYXN0PEpTQ2VsbCo+KGNlbGwpLCAqdGhp
cyk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9WZXJpZmllclNsb3RWaXNpdG9yLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVmVyaWZpZXJTbG90VmlzaXRvci5o
CShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1ZlcmlmaWVyU2xv
dFZpc2l0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE3MSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVk
ZSAiQWJzdHJhY3RTbG90VmlzaXRvci5oIgorI2luY2x1ZGUgIkpTQ0pTVmFsdWUuaCIKKyNpbmNs
dWRlICJNYXJrZWRCbG9jay5oIgorI2luY2x1ZGUgIlZpc2l0UmFjZUtleS5oIgorI2luY2x1ZGUg
IldlYWsuaCIKKyNpbmNsdWRlIDxtZW1vcnk+CisjaW5jbHVkZSA8d3RmL0JpdG1hcC5oPgorI2lu
Y2x1ZGUgPHd0Zi9EZXF1ZS5oPgorI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CisjaW5jbHVk
ZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3Rm
L1NoYXJlZFRhc2suaD4KKworbmFtZXNwYWNlIFdURiB7CisKK2NsYXNzIFN0YWNrVHJhY2U7CisK
K30gLy8gbmFtZXNwYWNlIFdURgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgQ29uc2VydmF0
aXZlUm9vdHM7CitjbGFzcyBIZWFwOworY2xhc3MgSGVhcENlbGw7CitjbGFzcyBQcmVjaXNlQWxs
b2NhdGlvbjsKKwordXNpbmcgV1RGOjpTdGFja1RyYWNlOworCitjbGFzcyBWZXJpZmllclNsb3RW
aXNpdG9yIDogcHVibGljIEFic3RyYWN0U2xvdFZpc2l0b3IgeworICAgIFdURl9NQUtFX05PTkNP
UFlBQkxFKFZlcmlmaWVyU2xvdFZpc2l0b3IpOworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OworICAgIHVzaW5nIEJhc2UgPSBBYnN0cmFjdFNsb3RWaXNpdG9yOworcHVibGljOgorICAgIHN0
cnVjdCBNYXJrZXJEYXRhIHsKKyAgICAgICAgTWFya2VyRGF0YSgpID0gZGVmYXVsdDsKKyAgICAg
ICAgTWFya2VyRGF0YShNYXJrZXJEYXRhJiYpID0gZGVmYXVsdDsKKyAgICAgICAgTWFya2VyRGF0
YShIZWFwQ2VsbCosIHN0ZDo6dW5pcXVlX3B0cjxTdGFja1RyYWNlPiYmKTsKKyAgICAgICAgTWFy
a2VyRGF0YSYgb3BlcmF0b3I9KE1hcmtlckRhdGEmJikgPSBkZWZhdWx0OworCisgICAgICAgIEhl
YXBDZWxsKiBwYXJlbnQgeyBudWxscHRyIH07CisgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxTdGFj
a1RyYWNlPiBzdGFjazsKKyAgICB9OworCisgICAgVmVyaWZpZXJTbG90VmlzaXRvcihIZWFwJik7
CisgICAgflZlcmlmaWVyU2xvdFZpc2l0b3IoKTsKKworICAgIHZvaWQgYXBwZW5kKGNvbnN0IENv
bnNlcnZhdGl2ZVJvb3RzJikgZmluYWw7CisgICAgdm9pZCBhcHBlbmRVbmJhcnJpZXJlZChKU0Nl
bGwqKSBmaW5hbDsKKyAgICB2b2lkIGFwcGVuZEhpZGRlblVuYmFycmllcmVkKEpTQ2VsbCopIGZp
bmFsOworCisgICAgYm9vbCBpc0ZpcnN0VmlzaXQoKSBjb25zdCBmaW5hbDsKKyAgICBib29sIGlz
TWFya2VkKGNvbnN0IHZvaWQqKSBjb25zdCBmaW5hbDsKKyAgICBib29sIGlzTWFya2VkKE1hcmtl
ZEJsb2NrJiwgSGVhcENlbGwqKSBjb25zdCBmaW5hbDsKKyAgICBib29sIGlzTWFya2VkKFByZWNp
c2VBbGxvY2F0aW9uJiwgSGVhcENlbGwqKSBjb25zdCBmaW5hbDsKKworICAgIHZvaWQgbWFya0F1
eGlsaWFyeShjb25zdCB2b2lkKikgZmluYWw7CisKKyAgICB2b2lkIHJlcG9ydEV4dHJhTWVtb3J5
VmlzaXRlZChzaXplX3QpIGZpbmFsIHsgfQorI2lmIEVOQUJMRShSRVNPVVJDRV9VU0FHRSkKKyAg
ICB2b2lkIHJlcG9ydEV4dGVybmFsTWVtb3J5VmlzaXRlZChzaXplX3QpIGZpbmFsIHsgfQorI2Vu
ZGlmCisKKyAgICBib29sIG11dGF0b3JJc1N0b3BwZWQoKSBjb25zdCBmaW5hbDsKKworICAgIHZv
aWQgZGlkUmFjZShjb25zdCBWaXNpdFJhY2VLZXkmKSBmaW5hbCB7IH0KKyAgICB2b2lkIGR1bXAo
UHJpbnRTdHJlYW0mKSBjb25zdCBmaW5hbCB7IH0KKworICAgIHZvaWQgdmlzaXRBc0NvbnN0cmFp
bnQoY29uc3QgSlNDZWxsKikgZmluYWw7CisKKyAgICB2b2lkIGRyYWluKCk7CisKKyAgICB2b2lk
IGFkZFBhcmFsbGVsQ29uc3RyYWludFRhc2soUmVmUHRyPFNoYXJlZFRhc2s8dm9pZChBYnN0cmFj
dFNsb3RWaXNpdG9yJik+PikgZmluYWw7CisgICAgdm9pZCBleGVjdXRlQ29uc3RyYWludFRhc2tz
KCk7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hMaXZlQ2Vs
bChjb25zdCBGdW5jdG9yJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBm
b3JFYWNoTGl2ZVByZWNpc2VBbGxvY2F0aW9uKGNvbnN0IEZ1bmN0b3ImKTsKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hMaXZlTWFya2VkQmxvY2tDZWxsKGNvbnN0
IEZ1bmN0b3ImKTsKKworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZHVtcE1hcmtlckRhdGEo
SGVhcENlbGwqKTsKKworcHJpdmF0ZToKKyAgICBjbGFzcyBNYXJrZWRCbG9ja0RhdGEgeworICAg
ICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKKyAgICAgICAgV1RGX01BS0VfTk9OQ09QWUFC
TEUoTWFya2VkQmxvY2tEYXRhKTsKKyAgICBwdWJsaWM6CisgICAgICAgIHVzaW5nIEF0b21zQml0
bWFwID0gQml0bWFwPE1hcmtlZEJsb2NrOjphdG9tc1BlckJsb2NrPjsKKworICAgICAgICBNYXJr
ZWRCbG9ja0RhdGEoTWFya2VkQmxvY2sqKTsKKworICAgICAgICBNYXJrZWRCbG9jayogYmxvY2so
KSBjb25zdCB7IHJldHVybiBtX2Jsb2NrOyB9CisgICAgICAgIGNvbnN0IEF0b21zQml0bWFwJiBh
dG9tcygpIGNvbnN0IHsgcmV0dXJuIG1fYXRvbXM7IH0KKworICAgICAgICBib29sIGlzTWFya2Vk
KHVuc2lnbmVkIGF0b21OdW1iZXIpIHsgcmV0dXJuIG1fYXRvbXMuZ2V0KGF0b21OdW1iZXIpOyB9
CisgICAgICAgIGJvb2wgdGVzdEFuZFNldE1hcmtlZCh1bnNpZ25lZCBhdG9tTnVtYmVyKSB7IHJl
dHVybiBtX2F0b21zLnRlc3RBbmRTZXQoYXRvbU51bWJlcik7IH0KKworICAgICAgICB2b2lkIGFk
ZE1hcmtlckRhdGEodW5zaWduZWQgYXRvbU51bWJlciwgTWFya2VyRGF0YSYmKTsKKyAgICAgICAg
Y29uc3QgTWFya2VyRGF0YSogbWFya2VyRGF0YSh1bnNpZ25lZCBhdG9tTnVtYmVyKSBjb25zdDsK
KworICAgIHByaXZhdGU6CisgICAgICAgIE1hcmtlZEJsb2NrKiBtX2Jsb2NrIHsgbnVsbHB0ciB9
OworICAgICAgICBBdG9tc0JpdG1hcCBtX2F0b21zOworICAgICAgICBWZWN0b3I8TWFya2VyRGF0
YT4gbV9tYXJrZXJzOworICAgIH07CisKKyAgICBjbGFzcyBQcmVjaXNlQWxsb2NhdGlvbkRhdGEg
eworICAgICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKKyAgICAgICAgV1RGX01BS0VfTk9O
Q09QWUFCTEUoUHJlY2lzZUFsbG9jYXRpb25EYXRhKTsKKyAgICBwdWJsaWM6CisgICAgICAgIFBy
ZWNpc2VBbGxvY2F0aW9uRGF0YShQcmVjaXNlQWxsb2NhdGlvbiopOworICAgICAgICBQcmVjaXNl
QWxsb2NhdGlvbiogYWxsb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fYWxsb2NhdGlvbjsgfQor
CisgICAgICAgIHZvaWQgYWRkTWFya2VyRGF0YShNYXJrZXJEYXRhJiYpOworICAgICAgICBjb25z
dCBNYXJrZXJEYXRhKiBtYXJrZXJEYXRhKCkgY29uc3Q7CisKKyAgICBwcml2YXRlOgorICAgICAg
ICBQcmVjaXNlQWxsb2NhdGlvbiogbV9hbGxvY2F0aW9uIHsgbnVsbHB0ciB9OworICAgICAgICBN
YXJrZXJEYXRhIG1fbWFya2VyOworICAgIH07CisKKyAgICB1c2luZyBNYXJrZWRCbG9ja01hcCA9
IEhhc2hNYXA8TWFya2VkQmxvY2sqLCBzdGQ6OnVuaXF1ZV9wdHI8TWFya2VkQmxvY2tEYXRhPj47
CisgICAgdXNpbmcgUHJlY2lzZUFsbG9jYXRpb25NYXAgPSBIYXNoTWFwPFByZWNpc2VBbGxvY2F0
aW9uKiwgc3RkOjp1bmlxdWVfcHRyPFByZWNpc2VBbGxvY2F0aW9uRGF0YT4+OworCisgICAgdm9p
ZCBhcHBlbmRUb01hcmtTdGFjayhKU0NlbGwqKTsKKyAgICB2b2lkIGFwcGVuZFNsb3coSlNDZWxs
KiBjZWxsKSB7IHNldE1hcmtlZEFuZEFwcGVuZFRvTWFya1N0YWNrKGNlbGwpOyB9CisKKyAgICBi
b29sIHRlc3RBbmRTZXRNYXJrZWQoY29uc3Qgdm9pZCogcmF3Q2VsbCk7CisgICAgYm9vbCB0ZXN0
QW5kU2V0TWFya2VkKFByZWNpc2VBbGxvY2F0aW9uJik7CisgICAgYm9vbCB0ZXN0QW5kU2V0TWFy
a2VkKE1hcmtlZEJsb2NrJiwgSGVhcENlbGwqKTsKKworICAgIHZvaWQgc2V0TWFya2VkQW5kQXBw
ZW5kVG9NYXJrU3RhY2soSlNDZWxsKik7CisKKyAgICB2b2lkIHZpc2l0Q2hpbGRyZW4oY29uc3Qg
SlNDZWxsKik7CisKKyAgICB2b2lkIGR1bXBNYXJrZXJEYXRhKFByZWNpc2VBbGxvY2F0aW9uJiwg
SGVhcENlbGwqKTsKKyAgICB2b2lkIGR1bXBNYXJrZXJEYXRhKE1hcmtlZEJsb2NrJiwgSGVhcENl
bGwqKTsKKyAgICB2b2lkIGR1bXBNYXJrZXJEYXRhKEhlYXBDZWxsKiwgY29uc3QgTWFya2VyRGF0
YSopOworCisgICAgUHJlY2lzZUFsbG9jYXRpb25NYXAgbV9wcmVjaXNlQWxsb2NhdGlvbk1hcDsK
KyAgICBNYXJrZWRCbG9ja01hcCBtX21hcmtlZEJsb2NrTWFwOworICAgIENvbmN1cnJlbnRQdHJI
YXNoU2V0IG1fb3BhcXVlUm9vdFN0b3JhZ2U7CisgICAgRGVxdWU8UmVmUHRyPFNoYXJlZFRhc2s8
dm9pZChBYnN0cmFjdFNsb3RWaXNpdG9yJik+PiwgMzI+IG1fY29uc3RyYWludFRhc2tzOworfTsK
KworfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9W
ZXJpZmllclNsb3RWaXNpdG9ySW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL1ZlcmlmaWVyU2xvdFZpc2l0b3JJbmxpbmVzLmgJKG5vbmV4aXN0ZW50KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVmVyaWZpZXJTbG90VmlzaXRvcklubGluZXMu
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJBYnN0cmFj
dFNsb3RWaXNpdG9ySW5saW5lcy5oIgorI2luY2x1ZGUgIlZlcmlmaWVyU2xvdFZpc2l0b3IuaCIK
KworbmFtZXNwYWNlIEpTQyB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+Cit2b2lkIFZl
cmlmaWVyU2xvdFZpc2l0b3I6OmZvckVhY2hMaXZlQ2VsbChjb25zdCBGdW5jdG9yJiBmdW5jdG9y
KQoreworICAgIGZvckVhY2hMaXZlUHJlY2lzZUFsbG9jYXRpb24oZnVuY3Rvcik7CisgICAgZm9y
RWFjaExpdmVNYXJrZWRCbG9ja0NlbGwoZnVuY3Rvcik7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1l
IEZ1bmN0b3I+Cit2b2lkIFZlcmlmaWVyU2xvdFZpc2l0b3I6OmZvckVhY2hMaXZlUHJlY2lzZUFs
bG9jYXRpb24oY29uc3QgRnVuY3RvciYgZnVuYykKK3sKKyAgICBmb3IgKGF1dG8mIGVudHJ5IDog
bV9wcmVjaXNlQWxsb2NhdGlvbk1hcCkgeworICAgICAgICBQcmVjaXNlQWxsb2NhdGlvbiogYWxs
b2NhdGlvbiA9IGVudHJ5LnZhbHVlLT5hbGxvY2F0aW9uKCk7CisgICAgICAgIGZ1bmMoYWxsb2Nh
dGlvbi0+Y2VsbCgpKTsKKyAgICB9Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+Cit2
b2lkIFZlcmlmaWVyU2xvdFZpc2l0b3I6OmZvckVhY2hMaXZlTWFya2VkQmxvY2tDZWxsKGNvbnN0
IEZ1bmN0b3ImIGZ1bmMpCit7CisgICAgZm9yIChhdXRvJiBlbnRyeSA6IG1fbWFya2VkQmxvY2tN
YXApIHsKKyAgICAgICAgYXV0byYgZGF0YSA9IGVudHJ5LnZhbHVlOworICAgICAgICBNYXJrZWRC
bG9jayogYmxvY2sgPSBkYXRhLT5ibG9jaygpOworICAgICAgICBjb25zdCBNYXJrZWRCbG9ja0Rh
dGE6OkF0b21zQml0bWFwJiBhdG9tcyA9ICBkYXRhLT5hdG9tcygpOworICAgICAgICBmb3IgKGF1
dG8gYXRvbU51bWJlciA6IGF0b21zKQorICAgICAgICAgICAgZnVuYyhiaXR3aXNlX2Nhc3Q8SGVh
cENlbGwqPihibG9jay0+aGFuZGxlKCkuYXRvbUF0KGF0b21OdW1iZXIpKSk7CisgICAgfQorfQor
Cit9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Zp
c2l0Q291bnRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Zp
c2l0Q291bnRlci5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9WaXNpdENvdW50ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNSw3ICsyNSw3IEBACiAKICNwcmFn
bWEgb25jZQogCi0jaW5jbHVkZSAiU2xvdFZpc2l0b3IuaCIKKyNpbmNsdWRlICJBYnN0cmFjdFNs
b3RWaXNpdG9yLmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC0zMywxMyArMzMsMTMgQEAgY2xh
c3MgVmlzaXRDb3VudGVyIHsKIHB1YmxpYzoKICAgICBWaXNpdENvdW50ZXIoKSB7IH0KICAgICAK
LSAgICBWaXNpdENvdW50ZXIoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisgICAgVmlzaXRDb3VudGVy
KEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiAgICAgICAgIDogbV92aXNpdG9yKCZ2aXNp
dG9yKQogICAgICAgICAsIG1faW5pdGlhbFZpc2l0Q291bnQodmlzaXRvci52aXNpdENvdW50KCkp
CiAgICAgewogICAgIH0KICAgICAKLSAgICBTbG90VmlzaXRvciYgdmlzaXRvcigpIGNvbnN0IHsg
cmV0dXJuICptX3Zpc2l0b3I7IH0KKyAgICBBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKCkg
Y29uc3QgeyByZXR1cm4gKm1fdmlzaXRvcjsgfQogICAgIAogICAgIHNpemVfdCB2aXNpdENvdW50
KCkgY29uc3QKICAgICB7CkBAIC00Nyw3ICs0Nyw3IEBAIHB1YmxpYzoKICAgICB9CiAgICAgCiBw
cml2YXRlOgotICAgIFNsb3RWaXNpdG9yKiBtX3Zpc2l0b3IgeyBudWxscHRyIH07CisgICAgQWJz
dHJhY3RTbG90VmlzaXRvciogbV92aXNpdG9yIHsgbnVsbHB0ciB9OwogICAgIHNpemVfdCBtX2lu
aXRpYWxWaXNpdENvdW50IHsgMCB9OwogfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvV2Vha0Jsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9XZWFrQmxvY2suY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9XZWFrQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtOTgsMTIgKzk4LDEx
IEBAIHZvaWQgV2Vha0Jsb2NrOjpzd2VlcCgpCiAgICAgQVNTRVJUKCFtX3N3ZWVwUmVzdWx0Lmlz
TnVsbCgpKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgQ29udGFpbmVyVHlwZT4KLXZvaWQgV2Vh
a0Jsb2NrOjpzcGVjaWFsaXplZFZpc2l0KENvbnRhaW5lclR5cGUmIGNvbnRhaW5lciwgU2xvdFZp
c2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBDb250YWluZXJUeXBlLCB0eXBlbmFt
ZSBWaXNpdG9yPgordm9pZCBXZWFrQmxvY2s6OnNwZWNpYWxpemVkVmlzaXQoQ29udGFpbmVyVHlw
ZSYgY29udGFpbmVyLCBWaXNpdG9yJiB2aXNpdG9yKQogewotICAgIEhlYXBWZXJzaW9uIG1hcmtp
bmdWZXJzaW9uID0gdmlzaXRvci5tYXJraW5nVmVyc2lvbigpOwotCiAgICAgc2l6ZV90IGNvdW50
ID0gd2Vha0ltcGxDb3VudCgpOworICAgIEhlYXBBbmFseXplciogaGVhcEFuYWx5emVyID0gdmlz
aXRvci52bSgpLmFjdGl2ZUhlYXBBbmFseXplcigpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgY291bnQ7ICsraSkgewogICAgICAgICBXZWFrSW1wbCogd2Vha0ltcGwgPSAmd2Vha0ltcGxz
KClbaV07CiAgICAgICAgIGlmICh3ZWFrSW1wbC0+c3RhdGUoKSAhPSBXZWFrSW1wbDo6TGl2ZSkK
QEAgLTExNCwxMiArMTEzLDEyIEBAIHZvaWQgV2Vha0Jsb2NrOjpzcGVjaWFsaXplZFZpc2l0KENv
bnRhaW4KICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgIEpTVmFsdWUganNWYWx1ZSA9
IHdlYWtJbXBsLT5qc1ZhbHVlKCk7Ci0gICAgICAgIGlmIChjb250YWluZXIuaXNNYXJrZWQobWFy
a2luZ1ZlcnNpb24sIGpzVmFsdWUuYXNDZWxsKCkpKQorICAgICAgICBpZiAodmlzaXRvci5pc01h
cmtlZChjb250YWluZXIsIGpzVmFsdWUuYXNDZWxsKCkpKQogICAgICAgICAgICAgY29udGludWU7
CiAgICAgICAgIAogICAgICAgICBjb25zdCBjaGFyKiByZWFzb24gPSAiIjsKICAgICAgICAgY29u
c3QgY2hhcioqIHJlYXNvblB0ciA9IG51bGxwdHI7Ci0gICAgICAgIGlmIChVTkxJS0VMWSh2aXNp
dG9yLmlzQW5hbHl6aW5nSGVhcCgpKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKGhlYXBBbmFseXpl
cikpCiAgICAgICAgICAgICByZWFzb25QdHIgPSAmcmVhc29uOwogCiAgICAgICAgIGlmICghd2Vh
a0hhbmRsZU93bmVyLT5pc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhIYW5kbGU8VW5rbm93bj46
OndyYXBTbG90KCZjb25zdF9jYXN0PEpTVmFsdWUmPihqc1ZhbHVlKSksIHdlYWtJbXBsLT5jb250
ZXh0KCksIHZpc2l0b3IsIHJlYXNvblB0cikpCkBAIC0xMjcsMTQgKzEyNiwxNCBAQCB2b2lkIFdl
YWtCbG9jazo6c3BlY2lhbGl6ZWRWaXNpdChDb250YWluCiAKICAgICAgICAgdmlzaXRvci5hcHBl
bmRVbmJhcnJpZXJlZChqc1ZhbHVlKTsKIAotICAgICAgICBpZiAoVU5MSUtFTFkodmlzaXRvci5p
c0FuYWx5emluZ0hlYXAoKSkpIHsKKyAgICAgICAgaWYgKFVOTElLRUxZKGhlYXBBbmFseXplcikp
IHsKICAgICAgICAgICAgIGlmIChqc1ZhbHVlLmlzQ2VsbCgpKQotICAgICAgICAgICAgICAgIHZp
c2l0b3IuaGVhcEFuYWx5emVyKCktPnNldE9wYXF1ZVJvb3RSZWFjaGFiaWxpdHlSZWFzb25Gb3JD
ZWxsKGpzVmFsdWUuYXNDZWxsKCksICpyZWFzb25QdHIpOworICAgICAgICAgICAgICAgIGhlYXBB
bmFseXplci0+c2V0T3BhcXVlUm9vdFJlYWNoYWJpbGl0eVJlYXNvbkZvckNlbGwoanNWYWx1ZS5h
c0NlbGwoKSwgKnJlYXNvblB0cik7CiAgICAgICAgIH0KICAgICB9CiB9CiAKLXZvaWQgV2Vha0Js
b2NrOjp2aXNpdChTbG90VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgV2Vha0Jsb2NrOjp2aXNpdChB
YnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIC8vIElmIGEgYmxvY2sgaXMgY29t
cGxldGVseSBlbXB0eSwgYSB2aXNpdCB3b24ndCBoYXZlIGFueSBlZmZlY3QuCiAgICAgaWYgKGlz
RW1wdHkoKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtCbG9jay5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtCbG9jay5oCShyZXZp
c2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrQmxvY2suaAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIt
MjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTItMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTMyLDggKzMyLDggQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKK2Ns
YXNzIEFic3RyYWN0U2xvdFZpc2l0b3I7CiBjbGFzcyBIZWFwOwotY2xhc3MgU2xvdFZpc2l0b3I7
CiAKIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKFdlYWtCbG9jayk7CiAK
QEAgLTY1LDcgKzY1LDcgQEAgcHVibGljOgogICAgIHZvaWQgc3dlZXAoKTsKICAgICBTd2VlcFJl
c3VsdCB0YWtlU3dlZXBSZXN1bHQoKTsKIAotICAgIHZvaWQgdmlzaXQoU2xvdFZpc2l0b3ImKTsK
KyAgICB2b2lkIHZpc2l0KEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKIAogICAgIHZvaWQgcmVhcCgp
OwogCkBAIC03NSw4ICs3NSw4IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgc3RhdGljIEZyZWVD
ZWxsKiBhc0ZyZWVDZWxsKFdlYWtJbXBsKik7CiAgICAgCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUg
Q29udGFpbmVyVHlwZT4KLSAgICB2b2lkIHNwZWNpYWxpemVkVmlzaXQoQ29udGFpbmVyVHlwZSYs
IFNsb3RWaXNpdG9yJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ29udGFpbmVyVHlwZSwgdHlw
ZW5hbWUgVmlzaXRvcj4KKyAgICB2b2lkIHNwZWNpYWxpemVkVmlzaXQoQ29udGFpbmVyVHlwZSYs
IFZpc2l0b3ImKTsKIAogICAgIGV4cGxpY2l0IFdlYWtCbG9jayhDZWxsQ29udGFpbmVyKTsKICAg
ICB2b2lkIGZpbmFsaXplKFdlYWtJbXBsKik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9XZWFrSGFuZGxlT3duZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL1dlYWtIYW5kbGVPd25lci5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtIYW5kbGVPd25lci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MzUsNyArMzUsNyBAQCBXZWFrSGFuZGxlT3duZXI6On5XZWFrSGFuZGxlT3duZXIoKQogewogfQog
Ci1ib29sIFdlYWtIYW5kbGVPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSGFuZGxl
PFVua25vd24+LCB2b2lkKiwgU2xvdFZpc2l0b3ImLCBjb25zdCBjaGFyKiopCitib29sIFdlYWtI
YW5kbGVPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSGFuZGxlPFVua25vd24+LCB2
b2lkKiwgQWJzdHJhY3RTbG90VmlzaXRvciYsIGNvbnN0IGNoYXIqKikKIHsKICAgICByZXR1cm4g
ZmFsc2U7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrSGFuZGxlT3du
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrSGFuZGxl
T3duZXIuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
V2Vha0hhbmRsZU93bmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjksMTMgKzI5LDEzIEBACiAKIG5hbWVz
cGFjZSBKU0MgewogCi1jbGFzcyBTbG90VmlzaXRvcjsKK2NsYXNzIEFic3RyYWN0U2xvdFZpc2l0
b3I7CiAKIGNsYXNzIEpTX0VYUE9SVF9QUklWQVRFIFdlYWtIYW5kbGVPd25lciB7CiBwdWJsaWM6
CiAgICAgdmlydHVhbCB+V2Vha0hhbmRsZU93bmVyKCk7CiAgICAgLy8gcmVhc29uIHdpbGwgb25s
eSBiZSBub24tbnVsbCB3aGVuIGdlbmVyYXRpbmcgYSBkZWJ1ZyBHQyBoZWFwIHNuYXBzaG90Lgot
ICAgIHZpcnR1YWwgYm9vbCBpc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhIYW5kbGU8VW5rbm93
bj4sIHZvaWQqIGNvbnRleHQsIFNsb3RWaXNpdG9yJiwgY2hhciBjb25zdCoqIHJlYXNvbiA9IG51
bGxwdHIpOworICAgIHZpcnR1YWwgYm9vbCBpc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhIYW5k
bGU8VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIEFic3RyYWN0U2xvdFZpc2l0b3ImLCBjaGFyIGNv
bnN0KiogcmVhc29uID0gbnVsbHB0cik7CiAgICAgdmlydHVhbCB2b2lkIGZpbmFsaXplKEhhbmRs
ZTxVbmtub3duPiwgdm9pZCogY29udGV4dCk7CiB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9XZWFrU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvV2Vha1NldC5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9XZWFrU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDEyLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01MSw3ICs1MSw3IEBAIHB1Ymxp
YzoKICAgICBib29sIGlzRW1wdHkoKSBjb25zdDsKICAgICBib29sIGlzVHJpdmlhbGx5RGVzdHJ1
Y3RpYmxlKCkgY29uc3Q7CiAKLSAgICB2b2lkIHZpc2l0KFNsb3RWaXNpdG9yJik7CisgICAgdm9p
ZCB2aXNpdChBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAKICAgICB2b2lkIHJlYXAoKTsKICAgICB2
b2lkIHN3ZWVwKCk7CkBAIC0xMTQsNyArMTE0LDcgQEAgaW5saW5lIHZvaWQgV2Vha1NldDo6bGFz
dENoYW5jZVRvRmluYWxpegogICAgICAgICBibG9jay0+bGFzdENoYW5jZVRvRmluYWxpemUoKTsK
IH0KIAotaW5saW5lIHZvaWQgV2Vha1NldDo6dmlzaXQoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCitp
bmxpbmUgdm9pZCBXZWFrU2V0Ojp2aXNpdChBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQog
ewogICAgIGZvciAoV2Vha0Jsb2NrKiBibG9jayA9IG1fYmxvY2tzLmhlYWQoKTsgYmxvY2s7IGJs
b2NrID0gYmxvY2stPm5leHQoKSkKICAgICAgICAgYmxvY2stPnZpc2l0KHZpc2l0b3IpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1NoYWRvd0NoaWNrZW4uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TaGFkb3dDaGlj
a2VuLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVy
cHJldGVyL1NoYWRvd0NoaWNrZW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDQwLDcgKzQ0MCw3
IEBAIHZvaWQgU2hhZG93Q2hpY2tlbjo6dXBkYXRlKFZNJiB2bSwgQ2FsbEYKICAgICAgICAgZGF0
YUxvZygiICAgIEFmdGVyIGNsZWFuLXVwOiAiLCAqdGhpcywgIlxuIik7CiB9CiAKLXZvaWQgU2hh
ZG93Q2hpY2tlbjo6dmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgU2hh
ZG93Q2hpY2tlbjo6dmlzaXRDaGlsZHJlbihBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQog
ewogICAgIGZvciAodW5zaWduZWQgaSA9IG1fbG9nQ3Vyc29yIC0gbV9sb2c7IGktLTspIHsKICAg
ICAgICAgSlNPYmplY3QqIGNhbGxlZSA9IG1fbG9nW2ldLmNhbGxlZTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TaGFkb3dDaGlja2VuLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1NoYWRvd0NoaWNrZW4uaAkocmV2aXNp
b24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1NoYWRvd0No
aWNrZW4uaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0zNSwxMyArMzUsMTMgQEAKIAogbmFtZXNwYWNlIEpTQyB7
CiAKK2NsYXNzIEFic3RyYWN0U2xvdFZpc2l0b3I7CiBjbGFzcyBDYWxsRnJhbWU7CiBjbGFzcyBD
b2RlQmxvY2s7CiBjbGFzcyBKU0FycmF5OwogY2xhc3MgSlNPYmplY3Q7CiBjbGFzcyBKU1Njb3Bl
OwogY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwotY2xhc3MgU2xvdFZpc2l0b3I7CiBjbGFz
cyBWTTsKIAogLy8gU2hhZG93Q2hpY2tlbiBpcyBhIGxvZyB0aGF0IGNhbiBiZSB1c2VkIHRvIHBy
b2R1Y2UgYSBzaGFkb3cgc3RhY2sgb2YgQ0hJQ0tFTi1zdHlsZSBzdGFjayBmcmFtZXMuCkBAIC0x
OTYsNyArMTk2LDcgQEAgcHVibGljOgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CiAg
ICAgdm9pZCBpdGVyYXRlKFZNJiwgQ2FsbEZyYW1lKiwgY29uc3QgRnVuY3RvciYpOwogICAgIAot
ICAgIHZvaWQgdmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYpOworICAgIHZvaWQgdmlzaXRDaGls
ZHJlbihBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAgICAgdm9pZCByZXNldCgpOwogICAgIAogICAg
IC8vIEpJVCBzdXBwb3J0LgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9HQ0F3YXJl
SklUU3R1YlJvdXRpbmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvR0NBd2FyZUpJVFN0dWJSb3V0aW5lLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9HQ0F3YXJlSklUU3R1YlJvdXRpbmUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE4IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtNzMsNyArNzMsNyBAQCB2b2lkIEdDQXdhcmVKSVRTdHViUm91dGluZTo6ZGVsZXRl
RnJvbUdDCiAgICAgZGVsZXRlIHRoaXM7CiB9CiAKLXZvaWQgR0NBd2FyZUpJVFN0dWJSb3V0aW5l
OjptYXJrUmVxdWlyZWRPYmplY3RzSW50ZXJuYWwoU2xvdFZpc2l0b3ImKQordm9pZCBHQ0F3YXJl
SklUU3R1YlJvdXRpbmU6Om1hcmtSZXF1aXJlZE9iamVjdHNJbnRlcm5hbChBYnN0cmFjdFNsb3RW
aXNpdG9yJikKIHsKIH0KIApAQCAtOTIsNyArOTIsNyBAQCBNYXJraW5nR0NBd2FyZUpJVFN0dWJS
b3V0aW5lOjp+TWFya2luZ0dDCiB7CiB9CiAKLXZvaWQgTWFya2luZ0dDQXdhcmVKSVRTdHViUm91
dGluZTo6bWFya1JlcXVpcmVkT2JqZWN0c0ludGVybmFsKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQor
dm9pZCBNYXJraW5nR0NBd2FyZUpJVFN0dWJSb3V0aW5lOjptYXJrUmVxdWlyZWRPYmplY3RzSW50
ZXJuYWwoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBmb3IgKGF1dG8mIGVu
dHJ5IDogbV9jZWxscykKICAgICAgICAgdmlzaXRvci5hcHBlbmQoZW50cnkpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9HQ0F3YXJlSklUU3R1YlJvdXRpbmUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0dDQXdhcmVKSVRTdHViUm91dGluZS5oCShy
ZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0dDQXdhcmVKSVRT
dHViUm91dGluZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMi0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjAsOCArNjAsOCBAQCBwdWJsaWM6CiAg
ICAgewogICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBHQ0F3YXJlSklUU3R1YlJvdXRpbmUo
Y29kZSwgdm0pKTsKICAgICB9Ci0gICAgCi0gICAgdm9pZCBtYXJrUmVxdWlyZWRPYmplY3RzKFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQorCisgICAgdm9pZCBtYXJrUmVxdWlyZWRPYmplY3RzKEFic3Ry
YWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiAgICAgewogICAgICAgICBtYXJrUmVxdWlyZWRPYmpl
Y3RzSW50ZXJuYWwodmlzaXRvcik7CiAgICAgfQpAQCAtNzEsNyArNzEsNyBAQCBwdWJsaWM6CiBw
cm90ZWN0ZWQ6CiAgICAgdm9pZCBvYnNlcnZlWmVyb1JlZkNvdW50KCkgb3ZlcnJpZGU7CiAgICAg
Ci0gICAgdmlydHVhbCB2b2lkIG1hcmtSZXF1aXJlZE9iamVjdHNJbnRlcm5hbChTbG90VmlzaXRv
ciYpOworICAgIHZpcnR1YWwgdm9pZCBtYXJrUmVxdWlyZWRPYmplY3RzSW50ZXJuYWwoQWJzdHJh
Y3RTbG90VmlzaXRvciYpOwogCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBKSVRTdHViUm91
dGluZVNldDsKQEAgLTg5LDcgKzg5LDcgQEAgcHVibGljOgogICAgIH5NYXJraW5nR0NBd2FyZUpJ
VFN0dWJSb3V0aW5lKCkgb3ZlcnJpZGU7CiAgICAgCiBwcm90ZWN0ZWQ6Ci0gICAgdm9pZCBtYXJr
UmVxdWlyZWRPYmplY3RzSW50ZXJuYWwoU2xvdFZpc2l0b3ImKSBvdmVycmlkZTsKKyAgICB2b2lk
IG1hcmtSZXF1aXJlZE9iamVjdHNJbnRlcm5hbChBYnN0cmFjdFNsb3RWaXNpdG9yJikgb3ZlcnJp
ZGU7CiAKIHByaXZhdGU6CiAgICAgVmVjdG9yPFdyaXRlQmFycmllcjxKU0NlbGw+PiBtX2NlbGxz
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRXb3JrbGlzdC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRXb3JrbGlzdC5jcHAJKHJldmlz
aW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUV29ya2xpc3QuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
Ni0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNi0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Qb2x5bW9y
cGhpY0NhbGxTdHViUm91dGluZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9Qb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZS5jcHAJKHJldmlzaW9uIDI3MjgzMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxNS0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTM1LDcgKzEzNSw3IEBAIGJvb2wgUG9seW1vcnBoaWND
YWxsU3R1YlJvdXRpbmU6OnZpc2l0V2UKICAgICByZXR1cm4gaXNTdGlsbExpdmU7CiB9CiAKLXZv
aWQgUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmU6Om1hcmtSZXF1aXJlZE9iamVjdHNJbnRlcm5h
bChTbG90VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmU6
Om1hcmtSZXF1aXJlZE9iamVjdHNJbnRlcm5hbChBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9y
KQogewogICAgIGZvciAoYXV0byYgdmFyaWFudCA6IG1fdmFyaWFudHMpCiAgICAgICAgIHZpc2l0
b3IuYXBwZW5kKHZhcmlhbnQpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Qb2x5
bW9ycGhpY0NhbGxTdHViUm91dGluZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUuaAkocmV2aXNpb24gMjcyODMwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Qb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
NS0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMTA1LDcgKzEwNSw3IEBAIHB1YmxpYzoKICAgICBib29sIHZp
c2l0V2VhayhWTSYpIGZpbmFsOwogCiBwcml2YXRlOgotICAgIHZvaWQgbWFya1JlcXVpcmVkT2Jq
ZWN0c0ludGVybmFsKFNsb3RWaXNpdG9yJikgZmluYWw7CisgICAgdm9pZCBtYXJrUmVxdWlyZWRP
YmplY3RzSW50ZXJuYWwoQWJzdHJhY3RTbG90VmlzaXRvciYpIGZpbmFsOwogCiAgICAgVmVjdG9y
PFdyaXRlQmFycmllcjxKU0NlbGw+LCAyPiBtX3ZhcmlhbnRzOwogICAgIFVuaXF1ZUFycmF5PHVp
bnQzMl90PiBtX2Zhc3RDb3VudHM7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9BYnN0cmFjdE1vZHVsZVJlY29yZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQWJzdHJhY3RNb2R1bGVSZWNvcmQuY3BwCShyZXZpc2lvbiAyNzI4MzAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BYnN0cmFjdE1vZHVsZVJlY29yZC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDE1LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE1LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC02MCw3ICs2MCw4IEBAIHZvaWQgQWJzdHJhY3RNb2R1bGVS
ZWNvcmQ6OmZpbmlzaENyZWF0aW8KICAgICBwdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21T
dHJpbmcodm0sICJkZXBlbmRlbmNpZXNNYXAiX3MpLCBtX2RlcGVuZGVuY2llc01hcC5nZXQoKSk7
CiB9CiAKLXZvaWQgQWJzdHJhY3RNb2R1bGVSZWNvcmQ6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBj
ZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2
b2lkIEFic3RyYWN0TW9kdWxlUmVjb3JkOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGws
IFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgQWJzdHJhY3RNb2R1bGVSZWNvcmQqIHRoaXNPYmpl
Y3QgPSBqc0Nhc3Q8QWJzdHJhY3RNb2R1bGVSZWNvcmQqPihjZWxsKTsKICAgICBBU1NFUlRfR0Nf
T0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC03MCw2ICs3MSw4IEBAIHZv
aWQgQWJzdHJhY3RNb2R1bGVSZWNvcmQ6OnZpc2l0Q2hpbGRyZW4KICAgICB2aXNpdG9yLmFwcGVu
ZCh0aGlzT2JqZWN0LT5tX2RlcGVuZGVuY2llc01hcCk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElM
RFJFTihBYnN0cmFjdE1vZHVsZVJlY29yZCk7CisKIHZvaWQgQWJzdHJhY3RNb2R1bGVSZWNvcmQ6
OmFwcGVuZFJlcXVlc3RlZE1vZHVsZShjb25zdCBJZGVudGlmaWVyJiBtb2R1bGVOYW1lKQogewog
ICAgIG1fcmVxdWVzdGVkTW9kdWxlcy5hZGQobW9kdWxlTmFtZS5pbXBsKCkpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQWJzdHJhY3RNb2R1bGVSZWNvcmQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BYnN0cmFjdE1vZHVsZVJlY29y
ZC5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9B
YnN0cmFjdE1vZHVsZVJlY29yZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEzNiw3ICsxMzYsNyBAQCBwcm90
ZWN0ZWQ6CiAgICAgQWJzdHJhY3RNb2R1bGVSZWNvcmQoVk0mLCBTdHJ1Y3R1cmUqLCBjb25zdCBJ
ZGVudGlmaWVyJik7CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0dsb2JhbE9iamVjdCosIFZN
Jik7CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9y
Jik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIHZvaWQgc2V0TW9kdWxlRW52
aXJvbm1lbnQoSlNHbG9iYWxPYmplY3QqLCBKU01vZHVsZUVudmlyb25tZW50Kik7CiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FyZ0xpc3QuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FyZ0xpc3QuY3BwCShyZXZpc2lvbiAyNzI4
MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcmdMaXN0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMTcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwMy0y
MDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CkBAIC01MSw3ICs1MSw3IEBAIHZvaWQgQXJnTGlzdDo6Z2V0U2xpY2UoaW50IHN0YXJ0SW5kZXgs
IEEKICAgICByZXN1bHQubV9hcmdDb3VudCA9ICBtX2FyZ0NvdW50IC0gc3RhcnRJbmRleDsKIH0K
IAotdm9pZCBNYXJrZWRBcmd1bWVudEJ1ZmZlcjo6bWFya0xpc3RzKFNsb3RWaXNpdG9yJiB2aXNp
dG9yLCBMaXN0U2V0JiBtYXJrU2V0KQordm9pZCBNYXJrZWRBcmd1bWVudEJ1ZmZlcjo6bWFya0xp
c3RzKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIExpc3RTZXQmIG1hcmtTZXQpCiB7CiAg
ICAgTGlzdFNldDo6aXRlcmF0b3IgZW5kID0gbWFya1NldC5lbmQoKTsKICAgICBmb3IgKExpc3RT
ZXQ6Oml0ZXJhdG9yIGl0ID0gbWFya1NldC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FyZ0xpc3QuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcmdMaXN0LmgJKHJldmlzaW9uIDI3Mjgz
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FyZ0xpc3QuaAkod29ya2luZyBj
b3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDEgSGFy
cmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAxNyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIw
MjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
QEAgLTExOCw3ICsxMTgsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAg
fQogICAgICAgICAKLSAgICBzdGF0aWMgdm9pZCBtYXJrTGlzdHMoU2xvdFZpc2l0b3ImLCBMaXN0
U2V0Jik7CisgICAgc3RhdGljIHZvaWQgbWFya0xpc3RzKEFic3RyYWN0U2xvdFZpc2l0b3ImLCBM
aXN0U2V0Jik7CiAKICAgICB2b2lkIGVuc3VyZUNhcGFjaXR5KHNpemVfdCByZXF1ZXN0ZWRDYXBh
Y2l0eSkKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWFi
bGVJZGVudGlmaWVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvQ2FjaGVhYmxlSWRlbnRpZmllci5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWFibGVJZGVudGlmaWVyLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMC0yMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MzksMTAgKzM5LDEwIEBAIHVzaW5nIFdURjo6VW5pcXVlZFN0cmluZ0ltcGw7CiAKIG5hbWVzcGFj
ZSBKU0MgewogCitjbGFzcyBBYnN0cmFjdFNsb3RWaXNpdG9yOwogY2xhc3MgQ29kZUJsb2NrOwog
Y2xhc3MgSWRlbnRpZmllcjsKIGNsYXNzIEpTQ2VsbDsKLWNsYXNzIFNsb3RWaXNpdG9yOwogCiBj
bGFzcyBDYWNoZWFibGVJZGVudGlmaWVyIHsKIHB1YmxpYzoKQEAgLTg3LDcgKzg3LDcgQEAgcHVi
bGljOgogCiAgICAgdWludHB0cl90IHJhd0JpdHMoKSBjb25zdCB7IHJldHVybiBtX2JpdHM7IH0K
IAotICAgIGlubGluZSB2b2lkIHZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJikgY29uc3Q7Cisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gaW5saW5lIHZvaWQgdmlzaXRBZ2dyZWdhdGUo
VmlzaXRvciYpIGNvbnN0OwogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBkdW1wKFByaW50
U3RyZWFtJikgY29uc3Q7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Nh
Y2hlYWJsZUlkZW50aWZpZXJJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQ2FjaGVhYmxlSWRlbnRpZmllcklubGluZXMuaAkocmV2aXNpb24gMjcy
ODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVhYmxlSWRlbnRpZmll
cklubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDIwLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMzcsNyArMTM3LDggQEAgaW5saW5lIHZvaWQgQ2Fj
aGVhYmxlSWRlbnRpZmllcjo6c2V0VWlkQgogICAgIG1fYml0cyA9IGJpdHdpc2VfY2FzdDx1aW50
cHRyX3Q+KHVpZCkgfCBzX3VpZFRhZzsKIH0KIAotaW5saW5lIHZvaWQgQ2FjaGVhYmxlSWRlbnRp
Zmllcjo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0Cit0ZW1wbGF0
ZTx0eXBlbmFtZSBWaXNpdG9yPgoraW5saW5lIHZvaWQgQ2FjaGVhYmxlSWRlbnRpZmllcjo6dmlz
aXRBZ2dyZWdhdGUoVmlzaXRvciYgdmlzaXRvcikgY29uc3QKIHsKICAgICBpZiAobV9iaXRzICYm
IGlzQ2VsbCgpKQogICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKGNlbGwoKSk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DbGFzc0luZm8uaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DbGFzc0luZm8uaAkocmV2aXNpb24g
MjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xhc3NJbmZvLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNyArMSw3IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMTk5OS0y
MDAxIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCiAgKiAgQ29weXJpZ2h0IChDKSAyMDAx
IFBldGVyIEtlbGx5IChwbWtAcG9zdC5jb20pCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMTkg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwMy0y
MDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CkBAIC00NCw5ICs0NCw2IEBAIHN0cnVjdCBNZXRob2RUYWJsZSB7CiAgICAgdXNpbmcgRGVzdHJv
eUZ1bmN0aW9uUHRyID0gdm9pZCAoKikoSlNDZWxsKik7CiAgICAgRGVzdHJveUZ1bmN0aW9uUHRy
IE1FVEhPRF9UQUJMRV9FTlRSWShkZXN0cm95KTsKIAotICAgIHVzaW5nIFZpc2l0Q2hpbGRyZW5G
dW5jdGlvblB0ciA9IHZvaWQgKCopKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7Ci0gICAgVmlzaXRD
aGlsZHJlbkZ1bmN0aW9uUHRyIE1FVEhPRF9UQUJMRV9FTlRSWSh2aXNpdENoaWxkcmVuKTsKLQog
ICAgIHVzaW5nIEdldENhbGxEYXRhRnVuY3Rpb25QdHIgPSBDYWxsRGF0YSAoKikoSlNDZWxsKik7
CiAgICAgR2V0Q2FsbERhdGFGdW5jdGlvblB0ciBNRVRIT0RfVEFCTEVfRU5UUlkoZ2V0Q2FsbERh
dGEpOwogCkBAIC0xMjAsNyArMTE3LDE2IEBAIHN0cnVjdCBNZXRob2RUYWJsZSB7CiAgICAgdXNp
bmcgRXN0aW1hdGVkU2l6ZUZ1bmN0aW9uUHRyID0gc2l6ZV90ICgqKShKU0NlbGwqLCBWTSYpOwog
ICAgIEVzdGltYXRlZFNpemVGdW5jdGlvblB0ciBNRVRIT0RfVEFCTEVfRU5UUlkoZXN0aW1hdGVk
U2l6ZSk7CiAKLSAgICB1c2luZyBWaXNpdE91dHB1dENvbnN0cmFpbnRzUHRyID0gdm9pZCAoKiko
SlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICB1c2luZyBWaXNpdENoaWxkcmVuRnVuY3Rpb25Q
dHIgPSB2b2lkICgqKShKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIFZpc2l0Q2hpbGRyZW5G
dW5jdGlvblB0ciBNRVRIT0RfVEFCTEVfRU5UUlkodmlzaXRDaGlsZHJlbldpdGhTbG90VmlzaXRv
cik7CisKKyAgICB1c2luZyBWaXNpdENoaWxkcmVuV2l0aEFic3RyYWN0U2xvdFZpc2l0b3JQdHIg
PSB2b2lkICgqKShKU0NlbGwqLCBBYnN0cmFjdFNsb3RWaXNpdG9yJik7CisgICAgVmlzaXRDaGls
ZHJlbldpdGhBYnN0cmFjdFNsb3RWaXNpdG9yUHRyIE1FVEhPRF9UQUJMRV9FTlRSWSh2aXNpdENo
aWxkcmVuV2l0aEFic3RyYWN0U2xvdFZpc2l0b3IpOworCisgICAgQUxXQVlTX0lOTElORSB2b2lk
IHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikgY29uc3Qg
eyB2aXNpdENoaWxkcmVuV2l0aFNsb3RWaXNpdG9yKGNlbGwsIHZpc2l0b3IpOyB9CisgICAgQUxX
QVlTX0lOTElORSB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBBYnN0cmFjdFNsb3RW
aXNpdG9yJiB2aXNpdG9yKSBjb25zdCB7IHZpc2l0Q2hpbGRyZW5XaXRoQWJzdHJhY3RTbG90Vmlz
aXRvcihjZWxsLCB2aXNpdG9yKTsgfQorCisgICAgdXNpbmcgVmlzaXRPdXRwdXRDb25zdHJhaW50
c1B0ciA9IHZvaWQgKCopKEpTQ2VsbCosIEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKICAgICBWaXNp
dE91dHB1dENvbnN0cmFpbnRzUHRyIE1FVEhPRF9UQUJMRV9FTlRSWSh2aXNpdE91dHB1dENvbnN0
cmFpbnRzKTsKIH07CiAKQEAgLTE0Nyw3ICsxNTMsNiBAQCBzdHJ1Y3QgTWV0aG9kVGFibGUgewog
ICAgIEpTQ2FzdGluZ0hlbHBlcnM6OkluaGVyaXRzVHJhaXRzPENsYXNzTmFtZT46OnR5cGVSYW5n
ZSwgXAogICAgIHsgXAogICAgICAgICAmQ2xhc3NOYW1lOjpkZXN0cm95LCBcCi0gICAgICAgICZD
bGFzc05hbWU6OnZpc2l0Q2hpbGRyZW4sIFwKICAgICAgICAgJkNsYXNzTmFtZTo6Z2V0Q2FsbERh
dGEsIFwKICAgICAgICAgJkNsYXNzTmFtZTo6Z2V0Q29uc3RydWN0RGF0YSwgXAogICAgICAgICAm
Q2xhc3NOYW1lOjpwdXQsIFwKQEAgLTE3Myw2ICsxNzgsOCBAQCBzdHJ1Y3QgTWV0aG9kVGFibGUg
ewogICAgICAgICAmQ2xhc3NOYW1lOjpkdW1wVG9TdHJlYW0sIFwKICAgICAgICAgJkNsYXNzTmFt
ZTo6YW5hbHl6ZUhlYXAsIFwKICAgICAgICAgJkNsYXNzTmFtZTo6ZXN0aW1hdGVkU2l6ZSwgXAor
ICAgICAgICAmQ2xhc3NOYW1lOjp2aXNpdENoaWxkcmVuLCBcCisgICAgICAgICZDbGFzc05hbWU6
OnZpc2l0Q2hpbGRyZW4sIFwKICAgICAgICAgJkNsYXNzTmFtZTo6dmlzaXRPdXRwdXRDb25zdHJh
aW50cywgXAogICAgIH0sIFwKICAgICBDbGFzc05hbWU6OlR5cGVkQXJyYXlTdG9yYWdlVHlwZSwg
XApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xvbmVkQXJndW1lbnRzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DbG9uZWRBcmd1
bWVudHMuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9DbG9uZWRBcmd1bWVudHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjY3LDcgKzI2Nyw4
IEBAIHZvaWQgQ2xvbmVkQXJndW1lbnRzOjptYXRlcmlhbGl6ZVNwZWNpYWwKICAgICAgICAgbWF0
ZXJpYWxpemVTcGVjaWFscyhnbG9iYWxPYmplY3QpOwogfQogCi12b2lkIENsb25lZEFyZ3VtZW50
czo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVt
cGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgQ2xvbmVkQXJndW1lbnRzOjp2aXNpdENoaWxk
cmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgQ2xvbmVkQXJn
dW1lbnRzKiB0aGlzT2JqZWN0ID0ganNDYXN0PENsb25lZEFyZ3VtZW50cyo+KGNlbGwpOwogICAg
IEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTI3NSw1
ICsyNzYsNyBAQCB2b2lkIENsb25lZEFyZ3VtZW50czo6dmlzaXRDaGlsZHJlbihKU0NlCiAgICAg
dmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9jYWxsZWUpOwogfQogCitERUZJTkVfVklTSVRf
Q0hJTERSRU4oQ2xvbmVkQXJndW1lbnRzKTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Nsb25lZEFyZ3VtZW50cy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Nsb25lZEFyZ3VtZW50cy5oCShy
ZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DbG9uZWRB
cmd1bWVudHMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTUtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTUtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTYyLDcgKzYyLDcgQEAgcHVibGljOgogICAg
IHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0Kiwg
SlNWYWx1ZSBwcm90b3R5cGUpOwogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVNsb3dQdXRT
dHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUgcHJvdG90eXBlKTsKIAotICAg
IHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBE
RUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgREVDTEFSRV9JTkZPOwogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EaXJlY3RBcmd1bWVudHMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5jcHAJKHJl
dmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVjdEFy
Z3VtZW50cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDE1LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE1LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC05MCw3ICs5MCw4IEBAIHNpemVfdCBEaXJl
Y3RBcmd1bWVudHM6OmVzdGltYXRlZFNpemUoSlMKICAgICByZXR1cm4gQmFzZTo6ZXN0aW1hdGVk
U2l6ZShjZWxsLCB2bSkgKyBtYXBwZWRBcmd1bWVudHNTaXplICsgbW9kaWZpZWRBcmd1bWVudHNT
aXplOwogfQogCi12b2lkIERpcmVjdEFyZ3VtZW50czo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIHRo
aXNDZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+
Cit2b2lkIERpcmVjdEFyZ3VtZW50czo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiB0aGlzQ2Vs
bCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBEaXJlY3RBcmd1bWVudHMqIHRoaXNPYmplY3Qg
PSBzdGF0aWNfY2FzdDxEaXJlY3RBcmd1bWVudHMqPih0aGlzQ2VsbCk7CiAgICAgQVNTRVJUX0dD
X09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtMTA0LDYgKzEwNSw4IEBA
IHZvaWQgRGlyZWN0QXJndW1lbnRzOjp2aXNpdENoaWxkcmVuKEpTQ2UKICAgICBHZW5lcmljQXJn
dW1lbnRzPERpcmVjdEFyZ3VtZW50cz46OnZpc2l0Q2hpbGRyZW4odGhpc0NlbGwsIHZpc2l0b3Ip
OwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oRGlyZWN0QXJndW1lbnRzKTsKKwogU3RydWN0
dXJlKiBEaXJlY3RBcmd1bWVudHM6OmNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQogewogICAgIHJldHVybiBTdHJ1
Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKERpcmVj
dEFyZ3VtZW50c1R5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5oCShyZXZpc2lvbiAy
NzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EaXJlY3RBcmd1bWVudHMu
aAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTUtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTUtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTY1LDcgKzY1LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBE
aXJlY3RBcmd1bWVudHMqIGNyZWF0ZUJ5Q29weWluZyhKU0dsb2JhbE9iamVjdCosIENhbGxGcmFt
ZSopOwogCiAgICAgc3RhdGljIHNpemVfdCBlc3RpbWF0ZWRTaXplKEpTQ2VsbCosIFZNJik7Ci0g
ICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAg
IERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAgICAgCiAgICAgdWludDMyX3QgaW50ZXJuYWxMZW5n
dGgoKSBjb25zdAogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V2
YWxFeGVjdXRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9FdmFsRXhlY3V0YWJsZS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0V2YWxFeGVjdXRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAsIDIwMTMsIDIwMTUt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDktMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTUwLDcgKzUwLDggQEAgYXV0byBFdmFsRXhlY3V0YWJsZTo6ZW5z
dXJlVGVtcGxhdGVPYmplYwogICAgIHJldHVybiBlbnN1cmVUZW1wbGF0ZU9iamVjdE1hcEltcGwo
bV90ZW1wbGF0ZU9iamVjdE1hcCk7CiB9CiAKLXZvaWQgRXZhbEV4ZWN1dGFibGU6OnZpc2l0Q2hp
bGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVu
YW1lIFZpc2l0b3I+Cit2b2lkIEV2YWxFeGVjdXRhYmxlOjp2aXNpdENoaWxkcmVuSW1wbChKU0Nl
bGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgRXZhbEV4ZWN1dGFibGUqIHRoaXNP
YmplY3QgPSBqc0Nhc3Q8RXZhbEV4ZWN1dGFibGUqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JK
RUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC02NCw0ICs2NSw2IEBAIHZvaWQg
RXZhbEV4ZWN1dGFibGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWwKICAgICB9CiB9CiAKK0RFRklORV9W
SVNJVF9DSElMRFJFTihFdmFsRXhlY3V0YWJsZSk7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXZhbEV4ZWN1dGFibGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FdmFsRXhlY3V0YWJsZS5oCShy
ZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FdmFsRXhl
Y3V0YWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAwOS0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAwOS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNzksNyArNzksNyBAQCBwcm90ZWN0ZWQ6CiAg
ICAgdXNpbmcgQmFzZTo6ZmluaXNoQ3JlYXRpb247CiAgICAgRXZhbEV4ZWN1dGFibGUoSlNHbG9i
YWxPYmplY3QqLCBjb25zdCBTb3VyY2VDb2RlJiwgYm9vbCBpblN0cmljdENvbnRleHQsIERlcml2
ZWRDb250ZXh0VHlwZSwgYm9vbCBpc0Fycm93RnVuY3Rpb25Db250ZXh0LCBib29sIGlzSW5zaWRl
T3JkaW5hcnlGdW5jdGlvbiwgRXZhbENvbnRleHRUeXBlLCBOZWVkc0NsYXNzRmllbGRJbml0aWFs
aXplciwgUHJpdmF0ZUJyYW5kUmVxdWlyZW1lbnQpOwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRD
aGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERS
RU47CiAKICAgICB1bnNpZ25lZCBtX25lZWRzQ2xhc3NGaWVsZEluaXRpYWxpemVyIDogMTsKICAg
ICB1bnNpZ25lZCBtX3ByaXZhdGVCcmFuZFJlcXVpcmVtZW50IDogMTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9uLmNwcAkocmV2aXNpb24gMjcyODMwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9uLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxOSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTUzLDcgKzUzLDggQEAgU3RydWN0dXJlKiBFeGNlcHRpb246OmNyZWF0ZVN0cnVj
dHVyZShWTQogICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBw
cm90b3R5cGUsIFR5cGVJbmZvKENlbGxUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CiB9
CiAKLXZvaWQgRXhjZXB0aW9uOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0
b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBFeGNlcHRpb246
OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAg
ICBFeGNlcHRpb24qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8RXhjZXB0aW9uKj4oY2VsbCk7CiAgICAg
QVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNjQsNiAr
NjUsOCBAQCB2b2lkIEV4Y2VwdGlvbjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlCiAgICAgICAg
IGZyYW1lLnZpc2l0Q2hpbGRyZW4odmlzaXRvcik7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJF
TihFeGNlcHRpb24pOworCiBFeGNlcHRpb246OkV4Y2VwdGlvbihWTSYgdm0pCiAgICAgOiBCYXNl
KHZtLCB2bS5leGNlcHRpb25TdHJ1Y3R1cmUuZ2V0KCkpCiB7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9FeGNlcHRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9FeGNlcHRpb24uaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTkgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01
MSw3ICs1MSw3IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVj
dHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBwcm90b3R5cGUpOwogCi0gICAgc3Rh
dGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xB
UkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBERUNMQVJFX0VYUE9SVF9JTkZPOwogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvbkV4ZWN1dGFibGUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJs
ZS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0Z1bmN0aW9uRXhlY3V0YWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02Nyw3ICs2Nyw4IEBA
IEZ1bmN0aW9uQ29kZUJsb2NrKiBGdW5jdGlvbkV4ZWN1dGFibGU6OmIKICAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8RnVuY3Rpb25Db2RlQmxvY2sqPihlZGdlLT5jb2RlQmxvY2soKS0+YmFzZWxpbmVB
bHRlcm5hdGl2ZSgpKTsKIH0KIAotdm9pZCBGdW5jdGlvbkV4ZWN1dGFibGU6OnZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1l
IFZpc2l0b3I+Cit2b2lkIEZ1bmN0aW9uRXhlY3V0YWJsZTo6dmlzaXRDaGlsZHJlbkltcGwoSlND
ZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSog
dGhpc09iamVjdCA9IGpzQ2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihjZWxsKTsKICAgICBBU1NF
UlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC04Niw2ICs4Nyw4
IEBAIHZvaWQgRnVuY3Rpb25FeGVjdXRhYmxlOjp2aXNpdENoaWxkcmVuKEoKICAgICB9CiB9CiAK
K0RFRklORV9WSVNJVF9DSElMRFJFTihGdW5jdGlvbkV4ZWN1dGFibGUpOworCiBGdW5jdGlvbkV4
ZWN1dGFibGUqIEZ1bmN0aW9uRXhlY3V0YWJsZTo6ZnJvbUdsb2JhbENvZGUoCiAgICAgY29uc3Qg
SWRlbnRpZmllciYgbmFtZSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgU291
cmNlQ29kZSYgc291cmNlLCAKICAgICBKU09iamVjdComIGV4Y2VwdGlvbiwgaW50IG92ZXJyaWRl
TGluZU51bWJlciwgT3B0aW9uYWw8aW50PiBmdW5jdGlvbkNvbnN0cnVjdG9yUGFyYW1ldGVyc0Vu
ZFBvc2l0aW9uKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25F
eGVjdXRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
RnVuY3Rpb25FeGVjdXRhYmxlLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOS0yMDE5IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MTY2LDcgKzE2Niw3IEBAIHB1YmxpYzoKICAgICBKU1BhcnNlclNjcmlwdE1vZGUgc2NyaXB0TW9k
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdW5saW5rZWRFeGVjdXRhYmxlLT5zY3JpcHRNb2RlKCk7IH0K
ICAgICBTb3VyY2VDb2RlIGNsYXNzU291cmNlKCkgY29uc3QgeyByZXR1cm4gbV91bmxpbmtlZEV4
ZWN1dGFibGUtPmNsYXNzU291cmNlKCk7IH0KIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwog
ICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG8pCiAgICAgewogICAgICAgICByZXR1cm4g
U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG8sIFR5cGVJbmZvKEZ1bmN0
aW9uRXhlY3V0YWJsZVR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uUmFyZURhdGEuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uUmFyZURhdGEuY3BwCShy
ZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlv
blJhcmVEYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTUtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTUxLDcgKzUxLDggQEAgU3RydWN0dXJl
KiBGdW5jdGlvblJhcmVEYXRhOjpjcmVhdGVTdHJ1YwogICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNy
ZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKENlbGxUeXBlLCBTdHJ1
Y3R1cmVGbGFncyksIGluZm8oKSk7CiB9CiAKLXZvaWQgRnVuY3Rpb25SYXJlRGF0YTo6dmlzaXRD
aGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlw
ZW5hbWUgVmlzaXRvcj4KK3ZvaWQgRnVuY3Rpb25SYXJlRGF0YTo6dmlzaXRDaGlsZHJlbkltcGwo
SlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEZ1bmN0aW9uUmFyZURhdGEq
IHJhcmVEYXRhID0ganNDYXN0PEZ1bmN0aW9uUmFyZURhdGEqPihjZWxsKTsKICAgICBBU1NFUlRf
R0NfT0JKRUNUX0lOSEVSSVRTKGNlbGwsIGluZm8oKSk7CkBAIC02Myw2ICs2NCw4IEBAIHZvaWQg
RnVuY3Rpb25SYXJlRGF0YTo6dmlzaXRDaGlsZHJlbihKU0MKICAgICB2aXNpdG9yLmFwcGVuZChy
YXJlRGF0YS0+bV9leGVjdXRhYmxlKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEZ1bmN0
aW9uUmFyZURhdGEpOworCiBGdW5jdGlvblJhcmVEYXRhOjpGdW5jdGlvblJhcmVEYXRhKFZNJiB2
bSwgRXhlY3V0YWJsZUJhc2UqIGV4ZWN1dGFibGUpCiAgICAgOiBCYXNlKHZtLCB2bS5mdW5jdGlv
blJhcmVEYXRhU3RydWN0dXJlLmdldCgpKQogICAgICwgbV9vYmplY3RBbGxvY2F0aW9uUHJvZmls
ZSgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvblJhcmVEYXRh
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25S
YXJlRGF0YS5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9GdW5jdGlvblJhcmVEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02NSw3ICs2NSw3IEBA
IHB1YmxpYzoKIAogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpT
R2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBwcm90b3R5cGUpOwogCi0gICAgc3RhdGljIHZvaWQgdmlz
aXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJ
TERSRU47CiAKICAgICBERUNMQVJFX0lORk87CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0dlbmVyaWNBcmd1bWVudHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9HZW5lcmljQXJndW1lbnRzLmgJKHJldmlzaW9uIDI3MjgzMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNBcmd1bWVudHMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTQ0LDcgKzQ0LDcgQEAgcHJvdGVjdGVkOgogICAgIHsKICAgICB9CiAKLSAg
ICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAg
REVDTEFSRV9WSVNJVF9DSElMRFJFTjsKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNs
b3QoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90
Jik7CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU09iamVjdCos
IEpTR2xvYmFsT2JqZWN0KiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsK
ICAgICBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgSlNHbG9iYWxP
YmplY3QqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIERvbnRFbnVtUHJvcGVydGllc01vZGUpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50c0lubGluZXMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljQXJn
dW1lbnRzSW5saW5lcy5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9HZW5lcmljQXJndW1lbnRzSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIwIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MzEsNyArMzEsOCBAQAogbmFtZXNwYWNlIEpTQyB7CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFR5cGU+
Ci12b2lkIEdlbmVyaWNBcmd1bWVudHM8VHlwZT46OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiB0aGlz
Q2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgor
dm9pZCBHZW5lcmljQXJndW1lbnRzPFR5cGU+Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIHRo
aXNDZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFR5cGUqIHRoaXNPYmplY3QgPSBzdGF0
aWNfY2FzdDxUeXBlKj4odGhpc0NlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMo
dGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTQxLDYgKzQyLDggQEAgdm9pZCBHZW5lcmljQXJndW1l
bnRzPFR5cGU+Ojp2aXNpdENoaWxkcgogICAgICAgICB2aXNpdG9yLm1hcmtBdXhpbGlhcnkodGhp
c09iamVjdC0+bV9tb2RpZmllZEFyZ3VtZW50c0Rlc2NyaXB0b3IuZ2V0VW5zYWZlKCkpOwogfQog
CitERUZJTkVfVklTSVRfQ0hJTERSRU5fV0lUSF9NT0RJRklFUih0ZW1wbGF0ZTx0eXBlbmFtZSBU
eXBlPiwgR2VuZXJpY0FyZ3VtZW50czxUeXBlPik7CisKIHRlbXBsYXRlPHR5cGVuYW1lIFR5cGU+
CiBib29sIEdlbmVyaWNBcmd1bWVudHM8VHlwZT46OmdldE93blByb3BlcnR5U2xvdChKU09iamVj
dCogb2JqZWN0LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWUgaWRl
bnQsIFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0dldHRlclNldHRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvR2V0dGVyU2V0dGVyLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2V0dGVyU2V0dGVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw3ICsxLDcgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDIgSGFycmkgUG9y
dGVuIChwb3J0ZW5Aa2RlLm9yZykKICAqICBDb3B5cmlnaHQgKEMpIDIwMDEgUGV0ZXIgS2VsbHkg
KHBta0Bwb3N0LmNvbSkKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxNyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDA0LTIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTMzLDcgKzMz
LDggQEAgU1RBVElDX0FTU0VSVF9JU19UUklWSUFMTFlfREVTVFJVQ1RJQkxFKAogCiBjb25zdCBD
bGFzc0luZm8gR2V0dGVyU2V0dGVyOjpzX2luZm8gPSB7ICJHZXR0ZXJTZXR0ZXIiLCBudWxscHRy
LCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEdldHRlclNldHRlcikgfTsK
IAotdm9pZCBHZXR0ZXJTZXR0ZXI6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90Vmlz
aXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEdldHRlclNl
dHRlcjo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQog
ewogICAgIEdldHRlclNldHRlciogdGhpc09iamVjdCA9IGpzQ2FzdDxHZXR0ZXJTZXR0ZXIqPihj
ZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7
CkBAIC00Myw2ICs0NCw4IEBAIHZvaWQgR2V0dGVyU2V0dGVyOjp2aXNpdENoaWxkcmVuKEpTQ2Vs
bCoKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX3NldHRlcik7CiB9CiAKK0RFRklO
RV9WSVNJVF9DSElMRFJFTihHZXR0ZXJTZXR0ZXIpOworCiBKU1ZhbHVlIGNhbGxHZXR0ZXIoSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBiYXNlLCBKU1ZhbHVlIGdldHRlclNl
dHRlcikKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9HZXR0ZXJTZXR0ZXIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZXR0ZXJTZXR0ZXIuaAkocmV2aXNpb24gMjcyODMw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2V0dGVyU2V0dGVyLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNyArMSw3IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAx
IEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCiAgKiAgQ29weXJpZ2h0IChDKSAyMDAxIFBl
dGVyIEtlbGx5IChwbWtAcG9zdC5jb20pCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMTkgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwMy0yMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBA
IC04Miw3ICs4Miw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGNyZWF0ZSh2bSwgZ2xvYmFs
T2JqZWN0LCBnZXR0ZXJPYmplY3QsIHNldHRlck9iamVjdCk7CiAgICAgfQogCi0gICAgc3RhdGlj
IHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVf
VklTSVRfQ0hJTERSRU47CiAKICAgICBKU09iamVjdCogZ2V0dGVyKCkgY29uc3QgeyByZXR1cm4g
bV9nZXR0ZXIuZ2V0KCk7IH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SGFzaE1hcEltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0hhc2hNYXBJbXBsLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSGFzaE1hcEltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMwLDYgKzMwLDkg
QEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTl9XSVRIX01PRElG
SUVSKHRlbXBsYXRlPD4sIEhhc2hNYXBCdWNrZXQ8SGFzaE1hcEJ1Y2tldERhdGFLZXk+KTsKK0RF
RklORV9WSVNJVF9DSElMRFJFTl9XSVRIX01PRElGSUVSKHRlbXBsYXRlPD4sIEhhc2hNYXBCdWNr
ZXQ8SGFzaE1hcEJ1Y2tldERhdGFLZXlWYWx1ZT4pOworCiB0ZW1wbGF0ZTw+CiBjb25zdCBDbGFz
c0luZm8gSGFzaE1hcEJ1Y2tldDxIYXNoTWFwQnVja2V0RGF0YUtleT46OnNfaW5mbyA9CiAgICAg
eyAiSGFzaE1hcEJ1Y2tldCIsIG51bGxwdHIsIG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRI
T0RfVEFCTEUoSGFzaE1hcEJ1Y2tldDxIYXNoTWFwQnVja2V0RGF0YUtleT4pIH07CkBAIC0zOCw4
ICs0MSw5IEBAIHRlbXBsYXRlPD4KIGNvbnN0IENsYXNzSW5mbyBIYXNoTWFwQnVja2V0PEhhc2hN
YXBCdWNrZXREYXRhS2V5VmFsdWU+OjpzX2luZm8gPQogICAgIHsgIkhhc2hNYXBCdWNrZXQiLCBu
dWxscHRyLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEhhc2hNYXBCdWNr
ZXQ8SGFzaE1hcEJ1Y2tldERhdGFLZXlWYWx1ZT4pIH07CiAKLXRlbXBsYXRlIDx0eXBlbmFtZSBE
YXRhPgotdm9pZCBIYXNoTWFwQnVja2V0PERhdGE+Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2Vs
bCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBEYXRhPgordGVtcGxh
dGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSGFzaE1hcEJ1Y2tldDxEYXRhPjo6dmlzaXRDaGls
ZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEhhc2hNYXBC
dWNrZXQqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SGFzaE1hcEJ1Y2tldCo+KGNlbGwpOwogICAgIEFT
U0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTUyLDggKzU2
LDkgQEAgdm9pZCBIYXNoTWFwQnVja2V0PERhdGE+Ojp2aXNpdENoaWxkcmVuKAogICAgIHZpc2l0
b3IuYXBwZW5kVmFsdWVzKGJpdHdpc2VfY2FzdDxXcml0ZUJhcnJpZXI8VW5rbm93bj4qPigmdGhp
c09iamVjdC0+bV9kYXRhKSwgc2l6ZW9mKERhdGEpIC8gc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtu
b3duPikpOwogfQogCi10ZW1wbGF0ZSA8dHlwZW5hbWUgSGFzaE1hcEJ1Y2tldD4KLXZvaWQgSGFz
aE1hcEltcGw8SGFzaE1hcEJ1Y2tldD46OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90
VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIEhhc2hNYXBCdWNrZXQ+Cit0ZW1w
bGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBIYXNoTWFwSW1wbDxIYXNoTWFwQnVja2V0Pjo6
dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAg
IEhhc2hNYXBJbXBsKiB0aGlzT2JqZWN0ID0ganNDYXN0PEhhc2hNYXBJbXBsKj4oY2VsbCk7CiAg
ICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNjYs
NiArNzEsOCBAQCB2b2lkIEhhc2hNYXBJbXBsPEhhc2hNYXBCdWNrZXQ+Ojp2aXNpdENoCiAgICAg
ICAgIHZpc2l0b3IubWFya0F1eGlsaWFyeShidWZmZXIpOwogfQogCitERUZJTkVfVklTSVRfQ0hJ
TERSRU5fV0lUSF9NT0RJRklFUih0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoTWFwQnVja2V0PiwgSGFz
aE1hcEltcGw8SGFzaE1hcEJ1Y2tldD4pOworCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgSGFzaE1hcEJ1
Y2tldD4KIHNpemVfdCBIYXNoTWFwSW1wbDxIYXNoTWFwQnVja2V0Pjo6ZXN0aW1hdGVkU2l6ZShK
U0NlbGwqIGNlbGwsIFZNJiB2bSkKIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0hhc2hNYXBJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSGFzaE1hcEltcGwuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSGFzaE1hcEltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE0OCw3ICsx
NDgsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX2RhdGEudmFsdWUuZ2V0KCk7CiAgICAg
fQogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYp
OworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBBTFdBWVNfSU5MSU5FIEhhc2hN
YXBCdWNrZXQqIG5leHQoKSBjb25zdCB7IHJldHVybiBtX25leHQuZ2V0KCk7IH0KICAgICBBTFdB
WVNfSU5MSU5FIEhhc2hNYXBCdWNrZXQqIHByZXYoKSBjb25zdCB7IHJldHVybiBtX3ByZXYuZ2V0
KCk7IH0KQEAgLTM2NCw3ICszNjQsNyBAQCBjbGFzcyBIYXNoTWFwSW1wbCA6IHB1YmxpYyBKU05v
bkZpbmFsT2JqCiBwdWJsaWM6CiAgICAgdXNpbmcgQnVja2V0VHlwZSA9IEhhc2hNYXBCdWNrZXRU
eXBlOwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRv
ciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBzdGF0aWMgc2l6ZV90IGVz
dGltYXRlZFNpemUoSlNDZWxsKiwgVk0mKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSW50ZXJuYWxGdW5jdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSW50ZXJuYWxGdW5jdGlvbi5jcHAJKHJldmlzaW9uIDI3MjgzMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGVybmFsRnVuY3Rpb24uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTkt
MjAwMiBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQogICogIENvcHlyaWdodCAoQykgMjAw
MSBQZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQotICogIENvcHlyaWdodCAoQykgMjAwNC0yMDE5
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDQt
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YwpAQCAtNjQsNyArNjQsOCBAQCB2b2lkIEludGVybmFsRnVuY3Rpb246OmZpbmlzaENyZWF0aW9u
KFZNCiAgICAgfQogfQogCi12b2lkIEludGVybmFsRnVuY3Rpb246OnZpc2l0Q2hpbGRyZW4oSlND
ZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0
b3I+Cit2b2lkIEludGVybmFsRnVuY3Rpb246OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2Vs
bCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBJbnRlcm5hbEZ1bmN0aW9uKiB0aGlzT2JqZWN0
ID0ganNDYXN0PEludGVybmFsRnVuY3Rpb24qPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNU
X0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC03Myw2ICs3NCw4IEBAIHZvaWQgSW50
ZXJuYWxGdW5jdGlvbjo6dmlzaXRDaGlsZHJlbihKU0MKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlz
T2JqZWN0LT5tX29yaWdpbmFsTmFtZSk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTl9XSVRI
X01PRElGSUVSKEpTX0VYUE9SVF9QUklWQVRFLCBJbnRlcm5hbEZ1bmN0aW9uKTsKKwogY29uc3Qg
U3RyaW5nJiBJbnRlcm5hbEZ1bmN0aW9uOjpuYW1lKCkKIHsKICAgICBjb25zdCBTdHJpbmcmIG5h
bWUgPSBtX29yaWdpbmFsTmFtZS0+dHJ5R2V0VmFsdWUoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0ludGVybmFsRnVuY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRlcm5hbEZ1bmN0aW9uLmgJKHJldmlzaW9uIDI3Mjgz
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGVybmFsRnVuY3Rpb24uaAko
d29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5
LTIwMDAgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKLSAqICBDb3B5cmlnaHQgKEMpIDIw
MDMtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChD
KSAyMDAzLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogIENvcHlyaWdo
dCAoQykgMjAwNyBDYW1lcm9uIFp3YXJpY2ggKGN3endhcmljaEB1d2F0ZXJsb28uY2EpCiAgKiAg
Q29weXJpZ2h0IChDKSAyMDA3IE1ha3MgT3Jsb3ZpY2gKICAqCkBAIC00Niw3ICs0Niw3IEBAIHB1
YmxpYzoKIAogICAgIERFQ0xBUkVfRVhQT1JUX0lORk87CiAKLSAgICBKU19FWFBPUlRfUFJJVkFU
RSBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAg
REVDTEFSRV9WSVNJVF9DSElMRFJFTl9XSVRIX01PRElGSUVSKEpTX0VYUE9SVF9QUklWQVRFKTsK
IAogICAgIEpTX0VYUE9SVF9QUklWQVRFIGNvbnN0IFN0cmluZyYgbmFtZSgpOwogICAgIGNvbnN0
IFN0cmluZyBkaXNwbGF5TmFtZShWTSYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSW50bENvbGxhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9JbnRsQ29sbGF0b3IuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsQ29sbGF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDcgKzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxNSBBbmR5IFZhbldhZ29uZXIg
KGFuZHlAdmFud2Fnb25lci5mYW1pbHkpCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTUgU3Vrb2xzYWsg
U2Frc2h1d29uZyAoc3Vrb2xzYWtAZ21haWwuY29tKQotICogQ29weXJpZ2h0IChDKSAyMDE2LTIw
MjAgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2
LTIwMjEgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC02NSw3ICs2NSw4IEBAIHZvaWQgSW50bENvbGxhdG9yOjpmaW5pc2hD
cmVhdGlvbihWTSYgdm0KICAgICBBU1NFUlQoaW5oZXJpdHModm0sIGluZm8oKSkpOwogfQogCi12
b2lkIEludGxDb2xsYXRvcjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9y
JiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSW50bENvbGxhdG9y
Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAg
ICAgSW50bENvbGxhdG9yKiB0aGlzT2JqZWN0ID0ganNDYXN0PEludGxDb2xsYXRvcio+KGNlbGwp
OwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAg
LTc1LDYgKzc2LDggQEAgdm9pZCBJbnRsQ29sbGF0b3I6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKgog
ICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fYm91bmRDb21wYXJlKTsKIH0KIAorREVG
SU5FX1ZJU0lUX0NISUxEUkVOKEludGxDb2xsYXRvcik7CisKIFZlY3RvcjxTdHJpbmc+IEludGxD
b2xsYXRvcjo6c29ydExvY2FsZURhdGEoY29uc3QgU3RyaW5nJiBsb2NhbGUsIFJlbGV2YW50RXh0
ZW5zaW9uS2V5IGtleSkKIHsKICAgICAvLyA5LjEgSW50ZXJuYWwgc2xvdHMgb2YgU2VydmljZSBD
b25zdHJ1Y3RvcnMgJiAxMC4yLjMgSW50ZXJuYWwgc2xvdHMgKEVDTUEtNDAyIDIuMCkKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxDb2xsYXRvci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxDb2xsYXRvci5oCShyZXZpc2lv
biAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsQ29sbGF0b3Iu
aAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIw
MTUgQW5keSBWYW5XYWdvbmVyIChhbmR5QHZhbndhZ29uZXIuZmFtaWx5KQorICogQ29weXJpZ2h0
IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtODAsNyArODEsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAg
IEludGxDb2xsYXRvcihWTSYsIFN0cnVjdHVyZSopOwogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24o
Vk0mKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9y
Jik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIGJvb2wgdXBkYXRlQ2FuRG9B
U0NJSVVDQURVQ0VUQ29tcGFyaXNvbigpIGNvbnN0OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9JbnRsRGF0ZVRpbWVGb3JtYXQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxEYXRlVGltZUZvcm1hdC5jcHAJKHJldmlzaW9u
IDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxEYXRlVGltZUZv
cm1hdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogQ29weXJpZ2h0
IChDKSAyMDE1IEFuZHkgVmFuV2Fnb25lciAoYW5keUB2YW53YWdvbmVyLmZhbWlseSkKLSAqIENv
cHlyaWdodCAoQykgMjAxNi0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtOTAsNyArOTAsOCBAQCB2b2lkIElu
dGxEYXRlVGltZUZvcm1hdDo6ZmluaXNoQ3JlYXRpb24oCiAgICAgQVNTRVJUKGluaGVyaXRzKHZt
LCBpbmZvKCkpKTsKIH0KIAotdm9pZCBJbnRsRGF0ZVRpbWVGb3JtYXQ6OnZpc2l0Q2hpbGRyZW4o
SlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZp
c2l0b3I+Cit2b2lkIEludGxEYXRlVGltZUZvcm1hdDo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxs
KiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEludGxEYXRlVGltZUZvcm1hdCogdGhp
c09iamVjdCA9IGpzQ2FzdDxJbnRsRGF0ZVRpbWVGb3JtYXQqPihjZWxsKTsKICAgICBBU1NFUlRf
R0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC0xMDAsNiArMTAxLDgg
QEAgdm9pZCBJbnRsRGF0ZVRpbWVGb3JtYXQ6OnZpc2l0Q2hpbGRyZW4oSgogICAgIHZpc2l0b3Iu
YXBwZW5kKHRoaXNPYmplY3QtPm1fYm91bmRGb3JtYXQpOwogfQogCitERUZJTkVfVklTSVRfQ0hJ
TERSRU4oSW50bERhdGVUaW1lRm9ybWF0KTsKKwogdm9pZCBJbnRsRGF0ZVRpbWVGb3JtYXQ6OnNl
dEJvdW5kRm9ybWF0KFZNJiB2bSwgSlNCb3VuZEZ1bmN0aW9uKiBmb3JtYXQpCiB7CiAgICAgbV9i
b3VuZEZvcm1hdC5zZXQodm0sIHRoaXMsIGZvcm1hdCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9JbnRsRGF0ZVRpbWVGb3JtYXQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsRGF0ZVRpbWVGb3JtYXQuaAkocmV2aXNpb24gMjcy
ODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERhdGVUaW1lRm9ybWF0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAy
MDE1IEFuZHkgVmFuV2Fnb25lciAoYW5keUB2YW53YWdvbmVyLmZhbWlseSkKKyAqIENvcHlyaWdo
dCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTg1LDcgKzg2LDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAg
ICBJbnRsRGF0ZVRpbWVGb3JtYXQoVk0mLCBTdHJ1Y3R1cmUqKTsKICAgICB2b2lkIGZpbmlzaENy
ZWF0aW9uKFZNJik7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90
VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBzdGF0aWMgVmVj
dG9yPFN0cmluZz4gbG9jYWxlRGF0YShjb25zdCBTdHJpbmcmLCBSZWxldmFudEV4dGVuc2lvbktl
eSk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxMb2NhbGUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxMb2NhbGUu
Y3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9J
bnRsTG9jYWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5
cmlnaHQgKEMpIDIwMjAgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAqIENv
cHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU4LDcgKzU5LDggQEAgdm9pZCBJbnRsTG9jYWxl
OjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCiAgICAgQVNTRVJUKGluaGVyaXRzKHZtLCBpbmZvKCkp
KTsKIH0KIAotdm9pZCBJbnRsTG9jYWxlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xv
dFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBJbnRs
TG9jYWxlOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3Ip
CiB7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxJbnRsTG9jYWxlKj4oY2VsbCk7CiAg
ICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNjYs
NiArNjgsOCBAQCB2b2lkIEludGxMb2NhbGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjCiAgICAg
QmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKIH0KIAorREVGSU5FX1ZJ
U0lUX0NISUxEUkVOKEludGxMb2NhbGUpOworCiBjbGFzcyBMb2NhbGVJREJ1aWxkZXIgZmluYWwg
ewogcHVibGljOgogICAgIGJvb2wgaW5pdGlhbGl6ZShjb25zdCBTdHJpbmcmKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxMb2NhbGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTG9jYWxlLmgJKHJldmlzaW9uIDI3Mjgz
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxMb2NhbGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMjAgU29ueSBJ
bnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTcxLDcgKzcyLDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBJbnRsTG9jYWxlKFZN
JiwgU3RydWN0dXJlKik7CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOwotICAgIHN0YXRp
YyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJF
X1ZJU0lUX0NISUxEUkVOOwogCiAgICAgU3RyaW5nIGtleXdvcmRWYWx1ZShBU0NJSUxpdGVyYWws
IGJvb2wgaXNCb29sZWFuID0gZmFsc2UpIGNvbnN0OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9JbnRsTnVtYmVyRm9ybWF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTnVtYmVyRm9ybWF0LmNwcAkocmV2aXNpb24gMjcy
ODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE51bWJlckZvcm1hdC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAy
MDE1IEFuZHkgVmFuV2Fnb25lciAoYW5keUB2YW53YWdvbmVyLmZhbWlseSkKICAqIENvcHlyaWdo
dCAoQykgMjAxNiBTdWtvbHNhayBTYWtzaHV3b25nIChzdWtvbHNha0BnbWFpbC5jb20pCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTYtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMjAgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IElu
Yy4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTczLDcgKzczLDggQEAgdm9pZCBJbnRsTnVtYmVyRm9y
bWF0OjpmaW5pc2hDcmVhdGlvbihWTQogICAgIEFTU0VSVChpbmhlcml0cyh2bSwgaW5mbygpKSk7
CiB9CiAKLXZvaWQgSW50bE51bWJlckZvcm1hdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGws
IFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQg
SW50bE51bWJlckZvcm1hdDo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9y
JiB2aXNpdG9yKQogewogICAgIEludGxOdW1iZXJGb3JtYXQqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8
SW50bE51bWJlckZvcm1hdCo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMo
dGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTgzLDYgKzg0LDggQEAgdm9pZCBJbnRsTnVtYmVyRm9y
bWF0Ojp2aXNpdENoaWxkcmVuKEpTQwogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1f
Ym91bmRGb3JtYXQpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSW50bE51bWJlckZvcm1h
dCk7CisKIFZlY3RvcjxTdHJpbmc+IEludGxOdW1iZXJGb3JtYXQ6OmxvY2FsZURhdGEoY29uc3Qg
U3RyaW5nJiBsb2NhbGUsIFJlbGV2YW50RXh0ZW5zaW9uS2V5IGtleSkKIHsKICAgICAvLyA5LjEg
SW50ZXJuYWwgc2xvdHMgb2YgU2VydmljZSBDb25zdHJ1Y3RvcnMgJiAxMS4yLjMgSW50ZXJuYWwg
c2xvdHMgKEVDTUEtNDAyIDIuMCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0ludGxOdW1iZXJGb3JtYXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9JbnRsTnVtYmVyRm9ybWF0LmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxOdW1iZXJGb3JtYXQuaAkod29ya2luZyBjb3B5KQpA
QCAtMSw2ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQW5keSBWYW5XYWdvbmVy
IChhbmR5QHZhbndhZ29uZXIuZmFtaWx5KQogICogQ29weXJpZ2h0IChDKSAyMDIwIFNvbnkgSW50
ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC05Niw3ICs5Nyw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgSW50bE51bWJlckZvcm1h
dChWTSYsIFN0cnVjdHVyZSopOwogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKLSAgICBz
dGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVD
TEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIHN0YXRpYyBWZWN0b3I8U3RyaW5nPiBsb2NhbGVE
YXRhKGNvbnN0IFN0cmluZyYsIFJlbGV2YW50RXh0ZW5zaW9uS2V5KTsKIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFBsdXJhbFJ1bGVzLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsUGx1cmFsUnVsZXMuY3BwCShyZXZp
c2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsUGx1cmFs
UnVsZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENvcHlyaWdo
dCAoQykgMjAxOCBBbmR5IFZhbldhZ29uZXIgKGFuZHlAdmFud2Fnb25lci5mYW1pbHkpCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTktMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTYxLDcgKzYxLDggQEAgdm9pZCBJ
bnRsUGx1cmFsUnVsZXM6OmZpbmlzaENyZWF0aW9uKFZNJgogICAgIEFTU0VSVChpbmhlcml0cyh2
bSwgaW5mbygpKSk7CiB9CiAKLXZvaWQgSW50bFBsdXJhbFJ1bGVzOjp2aXNpdENoaWxkcmVuKEpT
Q2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNp
dG9yPgordm9pZCBJbnRsUGx1cmFsUnVsZXM6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2Vs
bCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBJbnRsUGx1cmFsUnVsZXMqIHRoaXNPYmplY3Qg
PSBqc0Nhc3Q8SW50bFBsdXJhbFJ1bGVzKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9J
TkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNjksNiArNzAsOCBAQCB2b2lkIEludGxQ
bHVyYWxSdWxlczo6dmlzaXRDaGlsZHJlbihKU0NlCiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0
aGlzT2JqZWN0LCB2aXNpdG9yKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEludGxQbHVy
YWxSdWxlcyk7CisKIFZlY3RvcjxTdHJpbmc+IEludGxQbHVyYWxSdWxlczo6bG9jYWxlRGF0YShj
b25zdCBTdHJpbmcmLCBSZWxldmFudEV4dGVuc2lvbktleSkKIHsKICAgICByZXR1cm4geyB9OwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFBsdXJhbFJ1bGVzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFBsdXJhbFJ1bGVz
LmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lu
dGxQbHVyYWxSdWxlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENv
cHlyaWdodCAoQykgMjAxOCBBbmR5IFZhbldhZ29uZXIgKGFuZHlAdmFud2Fnb25lci5mYW1pbHkp
CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02Niw3ICs2Nyw3IEBAIHB1YmxpYzoK
IHByaXZhdGU6CiAgICAgSW50bFBsdXJhbFJ1bGVzKFZNJiwgU3RydWN0dXJlKik7CiAgICAgdm9p
ZCBmaW5pc2hDcmVhdGlvbihWTSYpOwotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlND
ZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAg
c3RhdGljIFZlY3RvcjxTdHJpbmc+IGxvY2FsZURhdGEoY29uc3QgU3RyaW5nJiwgUmVsZXZhbnRF
eHRlbnNpb25LZXkpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRs
UmVsYXRpdmVUaW1lRm9ybWF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9JbnRsUmVsYXRpdmVUaW1lRm9ybWF0LmNwcAkocmV2aXNpb24gMjcyODMwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFJlbGF0aXZlVGltZUZvcm1hdC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAy
MDIwIFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC02Miw3ICs2Myw4IEBAIHZvaWQgSW50bFJlbGF0aXZlVGltZUZvcm1h
dDo6ZmluaXNoQ3JlYXQKICAgICBBU1NFUlQoaW5oZXJpdHModm0sIGluZm8oKSkpOwogfQogCi12
b2lkIEludGxSZWxhdGl2ZVRpbWVGb3JtYXQ6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBT
bG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIElu
dGxSZWxhdGl2ZVRpbWVGb3JtYXQ6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlz
aXRvciYgdmlzaXRvcikKIHsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEludGxSZWxh
dGl2ZVRpbWVGb3JtYXQqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRo
aXNPYmplY3QsIGluZm8oKSk7CkBAIC03MCw2ICs3Miw4IEBAIHZvaWQgSW50bFJlbGF0aXZlVGlt
ZUZvcm1hdDo6dmlzaXRDaGlsZHIKICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3Qs
IHZpc2l0b3IpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSW50bFJlbGF0aXZlVGltZUZv
cm1hdCk7CisKIFZlY3RvcjxTdHJpbmc+IEludGxSZWxhdGl2ZVRpbWVGb3JtYXQ6OmxvY2FsZURh
dGEoY29uc3QgU3RyaW5nJiBsb2NhbGUsIFJlbGV2YW50RXh0ZW5zaW9uS2V5IGtleSkKIHsKICAg
ICBBU1NFUlRfVU5VU0VEKGtleSwga2V5ID09IFJlbGV2YW50RXh0ZW5zaW9uS2V5OjpOdSk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsUmVsYXRpdmVUaW1lRm9ybWF0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFJlbGF0
aXZlVGltZUZvcm1hdC5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9JbnRsUmVsYXRpdmVUaW1lRm9ybWF0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NiArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDIwIFNvbnkgSW50ZXJhY3RpdmUgRW50
ZXJ0YWlubWVudCBJbmMuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIwLTIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02NCw3
ICs2NCw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgSW50bFJlbGF0aXZlVGltZUZvcm1hdChW
TSYsIFN0cnVjdHVyZSopOwogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKLSAgICBzdGF0
aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFS
RV9WSVNJVF9DSElMRFJFTjsKIAogICAgIHN0YXRpYyBWZWN0b3I8U3RyaW5nPiBsb2NhbGVEYXRh
KGNvbnN0IFN0cmluZyYsIFJlbGV2YW50RXh0ZW5zaW9uS2V5KTsKIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFNlZ21lbnRJdGVyYXRvci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFNlZ21lbnRJdGVyYXRvci5jcHAJ
KHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxT
ZWdtZW50SXRlcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAq
IENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02NCwxMyArNjUsMTYgQEAgdm9pZCBJbnRsU2Vn
bWVudEl0ZXJhdG9yOjpmaW5pc2hDcmVhdGlvbgogICAgIG1fc3RyaW5nLnNldCh2bSwgdGhpcywg
c3RyaW5nKTsKIH0KIAotdm9pZCBJbnRsU2VnbWVudEl0ZXJhdG9yOjp2aXNpdENoaWxkcmVuKEpT
Q2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNp
dG9yPgordm9pZCBJbnRsU2VnbWVudEl0ZXJhdG9yOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwq
IGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2Fz
dDxJbnRsU2VnbWVudEl0ZXJhdG9yKj4oY2VsbCk7CiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0
aGlzT2JqZWN0LCB2aXNpdG9yKTsKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX3N0
cmluZyk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihJbnRsU2VnbWVudEl0ZXJhdG9yKTsK
KwogSlNPYmplY3QqIEludGxTZWdtZW50SXRlcmF0b3I6Om5leHQoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCkKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsU2VnbWVudEl0ZXJhdG9yLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFNlZ21lbnRJdGVyYXRv
ci5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9J
bnRsU2VnbWVudEl0ZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKgog
ICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTUzLDcgKzU0LDcgQEAgcHVibGljOgogCiAg
ICAgSlNPYmplY3QqIG5leHQoSlNHbG9iYWxPYmplY3QqKTsKIAotICAgIHN0YXRpYyB2b2lkIHZp
c2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NI
SUxEUkVOOwogCiBwcml2YXRlOgogICAgIEludGxTZWdtZW50SXRlcmF0b3IoVk0mLCBTdHJ1Y3R1
cmUqLCBzdGQ6OnVuaXF1ZV9wdHI8VUJyZWFrSXRlcmF0b3IsIFVCcmVha0l0ZXJhdG9yRGVsZXRl
cj4mJiwgQm94PFZlY3RvcjxVQ2hhcj4+JiYsIEludGxTZWdtZW50ZXI6OkdyYW51bGFyaXR5KTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxTZWdtZW50cy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFNlZ21lbnRzLmNw
cAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50
bFNlZ21lbnRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5
cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTA5LDExICsxMTAsMTQgQEAgSlNPYmplY3QqIEludGxT
ZWdtZW50czo6Y3JlYXRlU2VnbWVudEl0ZQogICAgIHJldHVybiBJbnRsU2VnbWVudEl0ZXJhdG9y
OjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdC0+c2VnbWVudEl0ZXJhdG9yU3RydWN0dXJlKCksIFdU
Rk1vdmUoc2VnbWVudGVyKSwgbV9idWZmZXIsIG1fc3RyaW5nLmdldCgpLCBtX2dyYW51bGFyaXR5
KTsKIH0KIAotdm9pZCBJbnRsU2VnbWVudHM6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBT
bG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIElu
dGxTZWdtZW50czo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNp
dG9yKQogewogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SW50bFNlZ21lbnRzKj4oY2Vs
bCk7CiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKICAgICB2
aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX3N0cmluZyk7CiB9CiAKK0RFRklORV9WSVNJVF9D
SElMRFJFTihJbnRsU2VnbWVudHMpOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxTZWdtZW50cy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxTZWdtZW50cy5oCShyZXZpc2lvbiAyNzI4
MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsU2VnbWVudHMuaAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtNTQsNyArNTUsNyBAQCBwdWJsaWM6CiAgICAgSlNWYWx1ZSBjb250YWluaW5nKEpTR2xv
YmFsT2JqZWN0KiwgSlNWYWx1ZSBpbmRleFZhbHVlKTsKICAgICBKU09iamVjdCogY3JlYXRlU2Vn
bWVudEl0ZXJhdG9yKEpTR2xvYmFsT2JqZWN0Kik7CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENo
aWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJF
TjsKIAogcHJpdmF0ZToKICAgICBJbnRsU2VnbWVudHMoVk0mLCBTdHJ1Y3R1cmUqLCBzdGQ6OnVu
aXF1ZV9wdHI8VUJyZWFrSXRlcmF0b3IsIFVCcmVha0l0ZXJhdG9yRGVsZXRlcj4mJiwgQm94PFZl
Y3RvcjxVQ2hhcj4+JiYsIEludGxTZWdtZW50ZXI6OkdyYW51bGFyaXR5KTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5jcHAJ
KHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJy
YXlCdWZmZXJWaWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE1NSw3ICsxNTUsOCBAQCB2b2lk
IEpTQXJyYXlCdWZmZXJWaWV3OjpmaW5pc2hDcmVhdGlvbihWCiAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKIH0KIAotdm9pZCBKU0FycmF5QnVmZmVyVmlldzo6dmlzaXRDaGlsZHJl
bihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUg
VmlzaXRvcj4KK3ZvaWQgSlNBcnJheUJ1ZmZlclZpZXc6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2Vs
bCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU0FycmF5QnVmZmVyVmlldyogdGhp
c09iamVjdCA9IGpzQ2FzdDxKU0FycmF5QnVmZmVyVmlldyo+KGNlbGwpOwogICAgIEFTU0VSVF9H
Q19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTE2OSw2ICsxNzAsOCBA
QCB2b2lkIEpTQXJyYXlCdWZmZXJWaWV3Ojp2aXNpdENoaWxkcmVuKEpTCiAgICAgfQogfQogCitE
RUZJTkVfVklTSVRfQ0hJTERSRU4oSlNBcnJheUJ1ZmZlclZpZXcpOworCiBib29sIEpTQXJyYXlC
dWZmZXJWaWV3OjpwdXQoCiAgICAgSlNDZWxsKiBjZWxsLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLAogICAgIFB1
dFByb3BlcnR5U2xvdCYgc2xvdCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTQXJyYXlCdWZmZXJWaWV3LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTE3Miw3ICsxNzIsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgCiAgICAgc3RhdGljIGJvb2wg
cHV0KEpTQ2VsbCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBQdXRQ
cm9wZXJ0eVNsb3QmKTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwg
U2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogICAgIAogcHVibGlj
OgogICAgIFR5cGVkQXJyYXlNb2RlIG1vZGUoKSBjb25zdCB7IHJldHVybiBtX21vZGU7IH0KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlJdGVyYXRvci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUl0ZXJhdG9y
LmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNBcnJheUl0ZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDIwLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02OCwxMSArNjgsMTQgQEAgdm9pZCBK
U0FycmF5SXRlcmF0b3I6OmZpbmlzaENyZWF0aW9uKFZNJgogICAgICAgICBCYXNlOjppbnRlcm5h
bEZpZWxkKGluZGV4KS5zZXQodm0sIHRoaXMsIHZhbHVlc1tpbmRleF0pOwogfQogCi12b2lkIEpT
QXJyYXlJdGVyYXRvcjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNBcnJheUl0ZXJhdG9y
Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAg
ICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0FycmF5SXRlcmF0b3IqPihjZWxsKTsKICAg
ICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAgICAgQmFz
ZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKIH0KIAorREVGSU5FX1ZJU0lU
X0NISUxEUkVOKEpTQXJyYXlJdGVyYXRvcik7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUl0ZXJhdG9yLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUl0ZXJhdG9yLmgJKHJl
dmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlJ
dGVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMjAtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTc4LDcgKzc4LDcgQEAgcHVibGljOgogCiAgICAgREVD
TEFSRV9JTkZPOwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90
VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKIHByaXZhdGU6CiAgICAg
SlNBcnJheUl0ZXJhdG9yKFZNJiwgU3RydWN0dXJlKik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0FzeW5jR2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FzeW5jR2VuZXJhdG9yLmNwcAkocmV2aXNpb24gMjcy
ODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBc3luY0dlbmVyYXRvci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
OS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtNTksMTEgKzU5LDE0IEBAIHZvaWQgSlNBc3luY0dlbmVyYXRvcjo6
ZmluaXNoQ3JlYXRpb24oVk0KICAgICAgICAgaW50ZXJuYWxGaWVsZChpbmRleCkuc2V0KHZtLCB0
aGlzLCB2YWx1ZXNbaW5kZXhdKTsKIH0KIAotdm9pZCBKU0FzeW5jR2VuZXJhdG9yOjp2aXNpdENo
aWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBl
bmFtZSBWaXNpdG9yPgordm9pZCBKU0FzeW5jR2VuZXJhdG9yOjp2aXNpdENoaWxkcmVuSW1wbChK
U0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0byogdGhpc09iamVjdCA9
IGpzQ2FzdDxKU0FzeW5jR2VuZXJhdG9yKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9J
TkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhp
c09iamVjdCwgdmlzaXRvcik7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU0FzeW5jR2Vu
ZXJhdG9yKTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0FzeW5jR2VuZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNBc3luY0dlbmVyYXRvci5oCShyZXZpc2lvbiAyNzI4MzApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FzeW5jR2VuZXJhdG9yLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOS0yMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtOTUsNyArOTUsNyBAQCBwdWJsaWM6CiAKICAgICBERUNMQVJFX0VYUE9SVF9JTkZP
OwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYp
OworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKIHByaXZhdGU6CiAgICAgSlNBc3luY0dl
bmVyYXRvcihWTSYsIFN0cnVjdHVyZSopOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNCaWdJbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTQmlnSW50LmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNCaWdJbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBA
QAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxNyBDYWlvIExpbWEgPHRpY2Fpb2xpbWFAZ21haWwu
Y29tPgotICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02Nyw3ICs2Nyw4
IEBAIEpTQmlnSW50OjpKU0JpZ0ludChWTSYgdm0sIFN0cnVjdHVyZSogc3QKICAgICAsIG1fZGF0
YSh2bSwgdGhpcywgZGF0YSwgbGVuZ3RoKQogeyB9CiAKLXZvaWQgSlNCaWdJbnQ6OnZpc2l0Q2hp
bGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVu
YW1lIFZpc2l0b3I+Cit2b2lkIEpTQmlnSW50Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNl
bGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxK
U0JpZ0ludCo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVj
dCwgaW5mbygpKTsKQEAgLTc2LDYgKzc3LDggQEAgdm9pZCBKU0JpZ0ludDo6dmlzaXRDaGlsZHJl
bihKU0NlbGwqIGNlbAogICAgICAgICB2aXNpdG9yLm1hcmtBdXhpbGlhcnkoZGF0YSk7CiB9CiAK
K0RFRklORV9WSVNJVF9DSElMRFJFTihKU0JpZ0ludCk7CisKIHZvaWQgSlNCaWdJbnQ6OmluaXRp
YWxpemUoSW5pdGlhbGl6YXRpb25UeXBlIGluaXRUeXBlKQogewogICAgIGlmIChpbml0VHlwZSA9
PSBJbml0aWFsaXphdGlvblR5cGU6OldpdGhaZXJvKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNCaWdJbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0JpZ0ludC5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0JpZ0ludC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBA
QAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxNyBDYWlvIExpbWEgPHRpY2Fpb2xpbWFAZ21haWwu
Y29tPgotICogQ29weXJpZ2h0IChDKSAyMDE5LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE5LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01MCw3ICs1MCw3
IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdz
ID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBTdHJ1Y3R1cmVJc0ltbW9ydGFsIHwgT3ZlcnJpZGVz
VG9UaGlzOwogICAgIGZyaWVuZCBjbGFzcyBDYWNoZWRCaWdJbnQ7CiAKLSAgICBzdGF0aWMgdm9p
ZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJ
VF9DSElMRFJFTjsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFj
Y2Vzcz4KICAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQm91bmRGdW5jdGlvbi5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCb3VuZEZ1bmN0aW9uLmNw
cAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNC
b3VuZEZ1bmN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTEsIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI0OSw3ICsyNDksOCBA
QCB2b2lkIEpTQm91bmRGdW5jdGlvbjo6ZmluaXNoQ3JlYXRpb24oVk0mCiAgICAgQVNTRVJUKGlu
aGVyaXRzKHZtLCBpbmZvKCkpKTsKIH0KIAotdm9pZCBKU0JvdW5kRnVuY3Rpb246OnZpc2l0Q2hp
bGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVu
YW1lIFZpc2l0b3I+Cit2b2lkIEpTQm91bmRGdW5jdGlvbjo6dmlzaXRDaGlsZHJlbkltcGwoSlND
ZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTQm91bmRGdW5jdGlvbiogdGhp
c09iamVjdCA9IGpzQ2FzdDxKU0JvdW5kRnVuY3Rpb24qPihjZWxsKTsKICAgICBBU1NFUlRfR0Nf
T0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC0yNjEsNCArMjYyLDYgQEAg
dm9pZCBKU0JvdW5kRnVuY3Rpb246OnZpc2l0Q2hpbGRyZW4oSlNDZQogICAgIHZpc2l0b3IuYXBw
ZW5kKHRoaXNPYmplY3QtPm1fbmFtZU1heUJlTnVsbCk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElM
RFJFTihKU0JvdW5kRnVuY3Rpb24pOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQm91bmRGdW5jdGlvbi5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQm91bmRGdW5jdGlvbi5oCShyZXZpc2lv
biAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JvdW5kRnVuY3Rp
b24uaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTEtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTEtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTg0LDcgKzg0LDcgQEAgcHJpdmF0ZToKICAgICBKU0Jv
dW5kRnVuY3Rpb24oVk0mLCBOYXRpdmVFeGVjdXRhYmxlKiwgSlNHbG9iYWxPYmplY3QqLCBTdHJ1
Y3R1cmUqLCBKU09iamVjdCogdGFyZ2V0RnVuY3Rpb24sIEpTVmFsdWUgYm91bmRUaGlzLCBKU0lt
bXV0YWJsZUJ1dHRlcmZseSogYm91bmRBcmdzLCBKU1N0cmluZyogbmFtZU1heUJlTnVsbCwgZG91
YmxlIGxlbmd0aCk7CiAKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7Ci0gICAgc3RhdGlj
IHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVf
VklTSVRfQ0hJTERSRU47CiAKICAgICBXcml0ZUJhcnJpZXI8SlNPYmplY3Q+IG1fdGFyZ2V0RnVu
Y3Rpb247CiAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+IG1fYm91bmRUaGlzOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDYWxsZWUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2FsbGVlLmNwcAkocmV2aXNpb24gMjcyODMw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDYWxsZWUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTUwLDcgKzUwLDggQEAgdm9pZCBKU0NhbGxlZTo6ZmluaXNoQ3JlYXRpb24o
Vk0mIHZtKQogICAgIEFTU0VSVChpbmhlcml0cyh2bSwgaW5mbygpKSk7CiB9CiAKLXZvaWQgSlND
YWxsZWU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikK
K3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTQ2FsbGVlOjp2aXNpdENoaWxkcmVu
SW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNDYWxsZWUqIHRo
aXNPYmplY3QgPSBqc0Nhc3Q8SlNDYWxsZWUqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNU
X0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC01OSw0ICs2MCw2IEBAIHZvaWQgSlND
YWxsZWU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWwKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlz
T2JqZWN0LT5tX3Njb3BlKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTQ2FsbGVlKTsK
KwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0NhbGxlZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTQ2FsbGVlLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTQ2FsbGVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTAwLDcgKzEwMCw3IEBAIHByb3RlY3Rl
ZDoKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7CiAgICAgdXNpbmcgQmFzZTo6ZmluaXNo
Q3JlYXRpb247CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RW
aXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogcHJpdmF0ZToKICAgICBm
cmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNDZWxsLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBAQAog
LyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMSBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUu
b3JnKQogICogIENvcHlyaWdodCAoQykgMjAwMSBQZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQot
ICogIENvcHlyaWdodCAoQykgMjAwMy0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUg
IkpTTG9jay5oIgogI2luY2x1ZGUgIkpTVHlwZUluZm8uaCIKICNpbmNsdWRlICJTbG90VmlzaXRv
ci5oIgorI2luY2x1ZGUgIlNsb3RWaXNpdG9yTWFjcm9zLmgiCiAjaW5jbHVkZSAiU3Vic3BhY2VB
Y2Nlc3MuaCIKICNpbmNsdWRlICJUeXBlZEFycmF5VHlwZS5oIgogI2luY2x1ZGUgIldyaXRlQmFy
cmllci5oIgpAQCAtMTY3LDggKzE2OCw4IEBAIHB1YmxpYzoKICAgICBzaXplX3QgZXN0aW1hdGVk
U2l6ZUluQnl0ZXMoVk0mKSBjb25zdDsKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgc2l6
ZV90IGVzdGltYXRlZFNpemUoSlNDZWxsKiwgVk0mKTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0
Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdE91
dHB1dENvbnN0cmFpbnRzKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJ
VF9DSElMRFJFTl9XSVRIX01PRElGSUVSKGlubGluZSk7CisgICAgc3RhdGljIHZvaWQgdmlzaXRP
dXRwdXRDb25zdHJhaW50cyhKU0NlbGwqLCBBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAKICAgICBK
U19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBhbmFseXplSGVhcChKU0NlbGwqLCBIZWFwQW5h
bHl6ZXImKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsSW5s
aW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2Vs
bElubGluZXMuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNDZWxsSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjUsNiArMjUsNyBAQAog
CiAjcHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgIkFic3RyYWN0U2xvdFZpc2l0b3JJbmxpbmVzLmgi
CiAjaW5jbHVkZSAiQWxsb2NhdG9yRm9yTW9kZS5oIgogI2luY2x1ZGUgIkFsbG9jYXRvcklubGlu
ZXMuaCIKICNpbmNsdWRlICJDb21wbGV0ZVN1YnNwYWNlSW5saW5lcy5oIgpAQCAtMTQxLDEyICsx
NDIsMTUgQEAgQUxXQVlTX0lOTElORSBTdHJ1Y3R1cmUqIEpTQ2VsbDo6c3RydWN0dQogICAgIHJl
dHVybiB2bS5nZXRTdHJ1Y3R1cmUobV9zdHJ1Y3R1cmVJRCk7CiB9CiAKLWlubGluZSB2b2lkIEpT
Q2VsbDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQor
dGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNDZWxsOjp2aXNpdENoaWxkcmVuSW1w
bChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgdmlzaXRvci5hcHBlbmRV
bmJhcnJpZXJlZChjZWxsLT5zdHJ1Y3R1cmUodmlzaXRvci52bSgpKSk7CiB9CiAKLWlubGluZSB2
b2lkIEpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50cyhKU0NlbGwqLCBTbG90VmlzaXRvciYp
CitERUZJTkVfVklTSVRfQ0hJTERSRU5fV0lUSF9NT0RJRklFUihpbmxpbmUsIEpTQ2VsbCk7CisK
K2lubGluZSB2b2lkIEpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50cyhKU0NlbGwqLCBBYnN0
cmFjdFNsb3RWaXNpdG9yJikKIHsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNDdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbi5j
cHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
Q3VzdG9tR2V0dGVyU2V0dGVyRnVuY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTg1LDcg
Kzg1LDggQEAgSlNDdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbiogSlNDdXN0b21HZQogICAgIHJl
dHVybiBmdW5jdGlvbjsKIH0KIAotdm9pZCBKU0N1c3RvbUdldHRlclNldHRlckZ1bmN0aW9uOjp2
aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0
ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0N1c3RvbUdldHRlclNldHRlckZ1bmN0aW9uOjp2
aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAg
SlNDdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbiogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0N1c3Rv
bUdldHRlclNldHRlckZ1bmN0aW9uKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhF
UklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtOTQsNiArOTUsOCBAQCB2b2lkIEpTQ3VzdG9t
R2V0dGVyU2V0dGVyRnVuY3Rpb246OnZpc2l0CiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVj
dC0+bV9nZXR0ZXJTZXR0ZXIpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNDdXN0b21H
ZXR0ZXJTZXR0ZXJGdW5jdGlvbik7CisKIHZvaWQgSlNDdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlv
bjo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBOYXRpdmVFeGVjdXRhYmxlKiBleGVjdXRhYmxlLCBD
dXN0b21HZXR0ZXJTZXR0ZXIqIGdldHRlclNldHRlciwgY29uc3QgU3RyaW5nJiBuYW1lKQogewog
ICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtLCBleGVjdXRhYmxlLCBpc1NldHRlcigpLCBuYW1l
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ3VzdG9tR2V0dGVyU2V0
dGVyRnVuY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0N1c3RvbUdldHRlclNldHRlckZ1bmN0aW9uLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ3VzdG9tR2V0dGVyU2V0dGVyRnVuY3Rpb24u
aAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTUtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTUtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTYzLDcgKzYzLDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAg
ICBKU0N1c3RvbUdldHRlclNldHRlckZ1bmN0aW9uKFZNJiwgTmF0aXZlRXhlY3V0YWJsZSosIEpT
R2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKiwgVHlwZSwgY29uc3QgUHJvcGVydHlOYW1lJik7CiAg
ICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIE5hdGl2ZUV4ZWN1dGFibGUqLCBDdXN0b21HZXR0
ZXJTZXR0ZXIqLCBjb25zdCBTdHJpbmcmKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVu
KEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAog
ICAgIFdyaXRlQmFycmllcjxDdXN0b21HZXR0ZXJTZXR0ZXI+IG1fZ2V0dGVyU2V0dGVyOwogICAg
IFR5cGUgbV90eXBlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGaW5h
bGl6YXRpb25SZWdpc3RyeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNGaW5hbGl6YXRpb25SZWdpc3RyeS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRmluYWxpemF0aW9uUmVnaXN0cnkuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAy
MCBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIw
LTIwMjEgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2lu
Y2x1ZGUgIkpTRmluYWxpemF0aW9uUmVnaXN0cnkuaCIKIAorI2luY2x1ZGUgIkFic3RyYWN0U2xv
dFZpc2l0b3IuaCIKICNpbmNsdWRlICJEZWZlcnJlZFdvcmtUaW1lci5oIgogI2luY2x1ZGUgIkpT
Q0lubGluZXMuaCIKICNpbmNsdWRlICJKU0ludGVybmFsRmllbGRPYmplY3RJbXBsSW5saW5lcy5o
IgpAQCAtNjAsNyArNjEsOCBAQCB2b2lkIEpTRmluYWxpemF0aW9uUmVnaXN0cnk6OmZpbmlzaENy
ZWF0CiAgICAgZ2xvYmFsT2JqZWN0LT5nbG9iYWxPYmplY3RNZXRob2RUYWJsZSgpLT5jdXJyZW50
U2NyaXB0RXhlY3V0aW9uT3duZXIoZ2xvYmFsT2JqZWN0KTsKIH0KIAotdm9pZCBKU0ZpbmFsaXph
dGlvblJlZ2lzdHJ5Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZp
c2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0ZpbmFsaXphdGlvblJl
Z2lzdHJ5Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3Ip
CiB7CiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbihjZWxsLCB2aXNpdG9yKTsKIApAQCAtODAsMTMg
KzgyLDE1IEBAIHZvaWQgSlNGaW5hbGl6YXRpb25SZWdpc3RyeTo6dmlzaXRDaGlsZHIKICAgICBm
b3IgKGF1dG8mIGhvbGRpbmdzIDogdGhpc09iamVjdC0+bV9ub1VucmVnaXN0cmF0aW9uRGVhZCkK
ICAgICAgICAgdmlzaXRvci5hcHBlbmQoaG9sZGluZ3MpOwogCi0gICAgc2l6ZV90IHRvdGFsQnVm
ZmVyU2l6ZXNJbkJ5dGVzID0gdGhpc09iamVjdC0+bV9kZWFkUmVnaXN0cmF0aW9ucy5jYXBhY2l0
eSgpICogc2l6ZW9mKGRlY2x0eXBlKHRoaXNPYmplY3QtPm1fZGVhZFJlZ2lzdHJhdGlvbnMpOjpL
ZXlWYWx1ZVBhaXJUeXBlKTsKLSAgICB0b3RhbEJ1ZmZlclNpemVzSW5CeXRlcyArPSB0aGlzT2Jq
ZWN0LT5tX2xpdmVSZWdpc3RyYXRpb25zLmNhcGFjaXR5KCkgKiBzaXplb2YoZGVjbHR5cGUodGhp
c09iamVjdC0+bV9kZWFkUmVnaXN0cmF0aW9ucyk6OktleVZhbHVlUGFpclR5cGUpOworICAgIHNp
emVfdCB0b3RhbEJ1ZmZlclNpemVzSW5CeXRlcyA9IHRoaXNPYmplY3QtPm1fZGVhZFJlZ2lzdHJh
dGlvbnMuY2FwYWNpdHkoKSAqIHNpemVvZih0eXBlbmFtZSBkZWNsdHlwZSh0aGlzT2JqZWN0LT5t
X2RlYWRSZWdpc3RyYXRpb25zKTo6S2V5VmFsdWVQYWlyVHlwZSk7CisgICAgdG90YWxCdWZmZXJT
aXplc0luQnl0ZXMgKz0gdGhpc09iamVjdC0+bV9saXZlUmVnaXN0cmF0aW9ucy5jYXBhY2l0eSgp
ICogc2l6ZW9mKHR5cGVuYW1lIGRlY2x0eXBlKHRoaXNPYmplY3QtPm1fZGVhZFJlZ2lzdHJhdGlv
bnMpOjpLZXlWYWx1ZVBhaXJUeXBlKTsKICAgICB0b3RhbEJ1ZmZlclNpemVzSW5CeXRlcyArPSB0
aGlzT2JqZWN0LT5tX25vVW5yZWdpc3RyYXRpb25MaXZlLmNhcGFjaXR5KCkgKiBzaXplb2YoZGVj
bHR5cGUodGhpc09iamVjdC0+bV9ub1VucmVnaXN0cmF0aW9uTGl2ZS50YWtlTGFzdCgpKSk7CiAg
ICAgdG90YWxCdWZmZXJTaXplc0luQnl0ZXMgKz0gdGhpc09iamVjdC0+bV9ub1VucmVnaXN0cmF0
aW9uRGVhZC5jYXBhY2l0eSgpICogc2l6ZW9mKGRlY2x0eXBlKHRoaXNPYmplY3QtPm1fbm9VbnJl
Z2lzdHJhdGlvbkxpdmUudGFrZUxhc3QoKSkpOwogICAgIHZpc2l0b3Iudm0oKS5oZWFwLnJlcG9y
dEV4dHJhTWVtb3J5VmlzaXRlZCh0b3RhbEJ1ZmZlclNpemVzSW5CeXRlcyk7CiB9CiAKK0RFRklO
RV9WSVNJVF9DSElMRFJFTihKU0ZpbmFsaXphdGlvblJlZ2lzdHJ5KTsKKwogdm9pZCBKU0ZpbmFs
aXphdGlvblJlZ2lzdHJ5OjpkZXN0cm95KEpTQ2VsbCogdGFibGUpCiB7CiAgICAgc3RhdGljX2Nh
c3Q8SlNGaW5hbGl6YXRpb25SZWdpc3RyeSo+KHRhYmxlKS0+fkpTRmluYWxpemF0aW9uUmVnaXN0
cnkoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRmluYWxpemF0aW9u
UmVnaXN0cnkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0ZpbmFsaXphdGlvblJlZ2lzdHJ5LmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTRmluYWxpemF0aW9uUmVnaXN0cnkuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUsIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMC0yMDIxIEFwcGxlLCBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTcwLDcgKzcwLDcgQEAgcHVibGljOgogICAgIERFQ0xBUkVfRVhQT1JUX0lORk87CiAKICAg
ICB2b2lkIGZpbmFsaXplVW5jb25kaXRpb25hbGx5KFZNJik7Ci0gICAgc3RhdGljIHZvaWQgdmlz
aXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJ
TERSRU47CiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKICAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgbmVlZHNEZXN0cnVjdGlvbiA9IHRydWU7CiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uY3BwCShyZXZpc2lvbiAyNzI4MzApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDIgSGFy
cmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKICAqICBDb3B5cmlnaHQgKEMpIDIwMDEgUGV0ZXIg
S2VsbHkgKHBta0Bwb3N0LmNvbSkKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAyMCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogIENvcHlyaWdodCAoQykgMjAwNyBDYW1l
cm9uIFp3YXJpY2ggKGN3endhcmljaEB1d2F0ZXJsb28uY2EpCiAgKiAgQ29weXJpZ2h0IChDKSAy
MDA3IE1ha3MgT3Jsb3ZpY2gKICAqICBDb3B5cmlnaHQgKEMpIDIwMTUgQ2Fub24gSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgpAQCAtMjUyLDcgKzI1Miw4IEBAIGNvbnN0IFNvdXJjZUNvZGUqIEpT
RnVuY3Rpb246OnNvdXJjZUNvZGUKICAgICByZXR1cm4gJmpzRXhlY3V0YWJsZSgpLT5zb3VyY2Uo
KTsKIH0KICAgICAKLXZvaWQgSlNGdW5jdGlvbjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGws
IFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQg
SlNGdW5jdGlvbjo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNp
dG9yKQogewogICAgIEpTRnVuY3Rpb24qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNGdW5jdGlvbio+
KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygp
KTsKQEAgLTI2MSw2ICsyNjIsOCBAQCB2b2lkIEpTRnVuY3Rpb246OnZpc2l0Q2hpbGRyZW4oSlND
ZWxsKiBjCiAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZChiaXR3aXNlX2Nhc3Q8SlNDZWxs
Kj4oYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4odGhpc09iamVjdC0+bV9leGVjdXRhYmxlT3JSYXJl
RGF0YSkgJiB+cmFyZURhdGFUYWcpKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTRnVu
Y3Rpb24pOworCiBDYWxsRGF0YSBKU0Z1bmN0aW9uOjpnZXRDYWxsRGF0YShKU0NlbGwqIGNlbGwp
CiB7CiAgICAgLy8gS2VlcCB0aGlzIGZ1bmN0aW9uIE9LIGZvciBpbnZvY2F0aW9uIGZyb20gY29u
Y3VycmVudCBjb21waWxlcnMuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0Z1bmN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNGdW5jdGlvbi5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0Z1bmN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgog
ICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAwIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcp
Ci0gKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogIENvcHlyaWdodCAoQykgMjAwMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqICBDb3B5cmlnaHQgKEMpIDIwMDcgQ2FtZXJvbiBad2FyaWNoIChjd3p3YXJp
Y2hAdXdhdGVybG9vLmNhKQogICogIENvcHlyaWdodCAoQykgMjAwNyBNYWtzIE9ybG92aWNoCiAg
KgpAQCAtMTgwLDcgKzE4MCw3IEBAIHByb3RlY3RlZDoKIAogICAgIHN0YXRpYyBib29sIGRlbGV0
ZVByb3BlcnR5KEpTQ2VsbCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBEZWxldGVQ
cm9wZXJ0eVNsb3QmKTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwg
U2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiBwcml2YXRlOgog
ICAgIHN0YXRpYyBKU0Z1bmN0aW9uKiBjcmVhdGVJbXBsKFZNJiB2bSwgRnVuY3Rpb25FeGVjdXRh
YmxlKiBleGVjdXRhYmxlLCBKU1Njb3BlKiBzY29wZSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyYXRvci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmF0b3IuY3BwCShy
ZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVy
YXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxOS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTksMTEgKzU5LDE0IEBAIHZvaWQgSlNHZW5lcmF0b3I6
OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKICAgICAgICAgaW50ZXJuYWxGaWVsZChpbmRleCkuc2V0
KHZtLCB0aGlzLCB2YWx1ZXNbaW5kZXhdKTsKIH0KIAotdm9pZCBKU0dlbmVyYXRvcjo6dmlzaXRD
aGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlw
ZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNHZW5lcmF0b3I6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2Vs
bCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganND
YXN0PEpTR2VuZXJhdG9yKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0
aGlzT2JqZWN0LCBpbmZvKCkpOwogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwg
dmlzaXRvcik7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU0dlbmVyYXRvcik7CisKIH0g
Ly8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNH
ZW5lcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0dlbmVyYXRvci5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0dlbmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTk0LDcgKzk0LDcgQEAgcHVibGlj
OgogCiAgICAgREVDTEFSRV9FWFBPUlRfSU5GTzsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hp
bGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVO
OwogCiBwcml2YXRlOgogICAgIEpTR2VuZXJhdG9yKFZNJiwgU3RydWN0dXJlKik7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlldy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVk
QXJyYXlWaWV3LmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjAgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMTMs
NyArMzEzLDcgQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVz
KEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIERvbnRFbnVt
UHJvcGVydGllc01vZGUpOwogCiAgICAgc3RhdGljIHNpemVfdCBlc3RpbWF0ZWRTaXplKEpTQ2Vs
bCosIFZNJik7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90Vmlz
aXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICAvLyBSZXR1cm5zIHRy
dWUgaWYgc3VjY2Vzc2Z1bCwgYW5kIGZhbHNlIG9uIGVycm9yOyBpdCB3aWxsIHRocm93IG9uIGVy
cm9yLgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIE90aGVyQWRhcHRvcj4KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVk
QXJyYXlWaWV3SW5saW5lcy5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxOSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTUxNyw3ICs1MTcsOCBAQCBzaXplX3QgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8
QWRhcHRvcj46CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+Ci12b2lkIEpTR2VuZXJp
Y1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xv
dFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0dl
bmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBj
ZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiB0
aGlzT2JqZWN0ID0ganNDYXN0PEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Kj4oY2VsbCk7CiAgICAg
QVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNTU1LDQg
KzU1Niw2IEBAIHZvaWQgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OnYKICAgICB9
CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTl9XSVRIX01PRElGSUVSKHRlbXBsYXRlPHR5cGVu
YW1lIEFkYXB0b3I+LCBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPik7CisKIH0gLy8g
bmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9i
YWxPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTR2xvYmFsT2JqZWN0LmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNy0yMDIwIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwOCBDYW1lcm9uIFp3YXJpY2gg
KGN3endhcmljaEB1d2F0ZXJsb28uY2EpCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0xODkyLDcgKzE4
OTIsOCBAQCB2b2lkIEpTR2xvYmFsT2JqZWN0OjpyZXNldFByb3RvdHlwZShWTSYgCiAgICAgc2V0
R2xvYmFsVGhpcyh2bSwgSlNQcm94eTo6Y3JlYXRlKHZtLCBKU1Byb3h5OjpjcmVhdGVTdHJ1Y3R1
cmUodm0sIHRoaXMsIHByb3RvdHlwZSwgUHVyZUZvcndhcmRpbmdQcm94eVR5cGUpLCB0aGlzKSk7
CiB9CiAKLXZvaWQgSlNHbG9iYWxPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBT
bG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpT
R2xvYmFsT2JqZWN0Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZp
c2l0b3IpCiB7IAogICAgIEpTR2xvYmFsT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTR2xv
YmFsT2JqZWN0Kj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2Jq
ZWN0LCBpbmZvKCkpOwpAQCAtMjA2MCw2ICsyMDYxLDggQEAgdm9pZCBKU0dsb2JhbE9iamVjdDo6
dmlzaXRDaGlsZHJlbihKU0NlbAogICAgIHRoaXNPYmplY3QtPm1fcmVnRXhwR2xvYmFsRGF0YS52
aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOX1dJVEhf
TU9ESUZJRVIoSlNfRVhQT1JUX1BSSVZBVEUsIEpTR2xvYmFsT2JqZWN0KTsKKwogQ2FsbEZyYW1l
KiBKU0dsb2JhbE9iamVjdDo6ZGVwcmVjYXRlZENhbGxGcmFtZUZvckRlYnVnZ2VyKCkKIHsKICAg
ICByZXR1cm4gQ2FsbEZyYW1lOjpjcmVhdGUobV9kZXByZWNhdGVkQ2FsbEZyYW1lRm9yRGVidWdn
ZXIpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3Qu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9i
amVjdC5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0dsb2JhbE9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAq
ICBDb3B5cmlnaHQgKEMpIDIwMDcgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KLSAqICBD
b3B5cmlnaHQgKEMpIDIwMDctMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiAgQ29weXJpZ2h0IChDKSAyMDA3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTYwOSw3ICs2MDksNyBAQCBwdWJsaWM6CiAgICAg
SlNfRVhQT1JUX1BSSVZBVEUgfkpTR2xvYmFsT2JqZWN0KCk7CiAgICAgSlNfRVhQT1JUX1BSSVZB
VEUgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKIAotICAgIEpTX0VYUE9SVF9QUklWQVRF
IHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBE
RUNMQVJFX1ZJU0lUX0NISUxEUkVOX1dJVEhfTU9ESUZJRVIoSlNfRVhQT1JUX1BSSVZBVEUpOwog
CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpT
T2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwog
ICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBib29sIHB1dChKU0NlbGwqLCBKU0dsb2JhbE9i
amVjdCosIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgUHV0UHJvcGVydHlTbG90Jik7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ltbXV0YWJsZUJ1dHRlcmZseS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbW11dGFibGVCdXR0
ZXJmbHkuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0ltbXV0YWJsZUJ1dHRlcmZseS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzIsNyArMzIsOCBA
QCBuYW1lc3BhY2UgSlNDIHsKIAogY29uc3QgQ2xhc3NJbmZvIEpTSW1tdXRhYmxlQnV0dGVyZmx5
OjpzX2luZm8gPSB7ICJJbW11dGFibGUgQnV0dGVyZmx5IiwgbnVsbHB0ciwgbnVsbHB0ciwgbnVs
bHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU0ltbXV0YWJsZUJ1dHRlcmZseSkgfTsKIAotdm9p
ZCBKU0ltbXV0YWJsZUJ1dHRlcmZseTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNJbW11
dGFibGVCdXR0ZXJmbHk6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYg
dmlzaXRvcikKIHsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNlbGwsIGluZm8oKSk7
CiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbihjZWxsLCB2aXNpdG9yKTsKQEAgLTQ1LDYgKzQ2LDgg
QEAgdm9pZCBKU0ltbXV0YWJsZUJ1dHRlcmZseTo6dmlzaXRDaGlsZHJlbgogICAgIHZpc2l0b3Iu
YXBwZW5kVmFsdWVzSGlkZGVuKGJ1dHRlcmZseS0+Y29udGlndW91cygpLmRhdGEoKSwgYnV0dGVy
Zmx5LT5wdWJsaWNMZW5ndGgoKSk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU0ltbXV0
YWJsZUJ1dHRlcmZseSk7CisKIHZvaWQgSlNJbW11dGFibGVCdXR0ZXJmbHk6OmNvcHlUb0FyZ3Vt
ZW50cyhKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUqIGZpcnN0RWxlbWVudERlc3QsIHVuc2lnbmVk
IG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQogewogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBsZW5ndGg7ICsraSkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJ
bW11dGFibGVCdXR0ZXJmbHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0ltbXV0YWJsZUJ1dHRlcmZseS5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ltbXV0YWJsZUJ1dHRlcmZseS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOC0yMDE5IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOC0yMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMTQ1LDcgKzE0NSw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGpzRG91
YmxlTnVtYmVyKHZhbHVlKTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVu
KEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAog
ICAgIHZvaWQgY29weVRvQXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSogZmlyc3RF
bGVtZW50RGVzdCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOwogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ludGVybmFsRmllbGRPYmplY3RJbXBsLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbnRlcm5hbEZp
ZWxkT2JqZWN0SW1wbC5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0ludGVybmFsRmllbGRPYmplY3RJbXBsLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOS0yMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjYs
NyArNjYsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkludGVybmFs
RmllbGQodW5zaWduZWQgaW5kZXgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU0ludGVybmFs
RmllbGRPYmplY3RJbXBsLCBtX2ludGVybmFsRmllbGRzKSArIGluZGV4ICogc2l6ZW9mKFdyaXRl
QmFycmllcjxVbmtub3duPik7IH0KIAogcHJvdGVjdGVkOgotICAgIHN0YXRpYyB2b2lkIHZpc2l0
Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxE
UkVOOwogCiAgICAgSlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbChWTSYgdm0sIFN0cnVjdHVyZSog
c3RydWN0dXJlKQogICAgICAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSkKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTSW50ZXJuYWxGaWVsZE9iamVjdEltcGxJbmxpbmVzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbnRlcm5hbEZp
ZWxkT2JqZWN0SW1wbElubGluZXMuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbElubGluZXMuaAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE5LTIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0zMCw3ICszMCw4IEBACiBuYW1lc3BhY2UgSlNDIHsKIAogdGVtcGxhdGU8dW5z
aWduZWQgcGFzc2VkTnVtYmVyT2ZJbnRlcm5hbEZpZWxkcz4KLXZvaWQgSlNJbnRlcm5hbEZpZWxk
T2JqZWN0SW1wbDxwYXNzZWROdW1iZXJPZkludGVybmFsRmllbGRzPjo6dmlzaXRDaGlsZHJlbihK
U0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlz
aXRvcj4KK3ZvaWQgSlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbDxwYXNzZWROdW1iZXJPZkludGVy
bmFsRmllbGRzPjo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNp
dG9yKQogewogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNJbnRlcm5hbEZpZWxkT2Jq
ZWN0SW1wbCo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVj
dCwgaW5mbygpKTsKQEAgLTM4LDQgKzM5LDYgQEAgdm9pZCBKU0ludGVybmFsRmllbGRPYmplY3RJ
bXBsPHBhc3NlZE51bQogICAgIHZpc2l0b3IuYXBwZW5kVmFsdWVzKHRoaXNPYmplY3QtPm1faW50
ZXJuYWxGaWVsZHMsIG51bWJlck9mSW50ZXJuYWxGaWVsZHMpOwogfQogCitERUZJTkVfVklTSVRf
Q0hJTERSRU5fV0lUSF9NT0RJRklFUih0ZW1wbGF0ZTx1bnNpZ25lZCBwYXNzZWROdW1iZXJPZklu
dGVybmFsRmllbGRzPiwgSlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbDxwYXNzZWROdW1iZXJPZklu
dGVybmFsRmllbGRzPik7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNMZXhpY2FsRW52aXJvbm1lbnQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTGV4aWNhbEVudmlyb25tZW50LmNwcAko
cmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMZXhp
Y2FsRW52aXJvbm1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAwOC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzYsNyArMzYsOCBAQCBuYW1l
c3BhY2UgSlNDIHsKIAogY29uc3QgQ2xhc3NJbmZvIEpTTGV4aWNhbEVudmlyb25tZW50OjpzX2lu
Zm8gPSB7ICJKU0xleGljYWxFbnZpcm9ubWVudCIsICZCYXNlOjpzX2luZm8sIG51bGxwdHIsIG51
bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNMZXhpY2FsRW52aXJvbm1lbnQpIH07CiAKLXZv
aWQgSlNMZXhpY2FsRW52aXJvbm1lbnQ6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90
VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTTGV4
aWNhbEVudmlyb25tZW50Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3Im
IHZpc2l0b3IpCiB7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0xleGljYWxFbnZp
cm9ubWVudCo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVj
dCwgaW5mbygpKTsKQEAgLTQ0LDYgKzQ1LDggQEAgdm9pZCBKU0xleGljYWxFbnZpcm9ubWVudDo6
dmlzaXRDaGlsZHJlbgogICAgIHZpc2l0b3IuYXBwZW5kVmFsdWVzSGlkZGVuKHRoaXNPYmplY3Qt
PnZhcmlhYmxlcygpLCB0aGlzT2JqZWN0LT5zeW1ib2xUYWJsZSgpLT5zY29wZVNpemUoKSk7CiB9
CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU0xleGljYWxFbnZpcm9ubWVudCk7CisKIHZvaWQg
SlNMZXhpY2FsRW52aXJvbm1lbnQ6OmFuYWx5emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFuYWx5
emVyJiBhbmFseXplcikKIHsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTTGV4aWNh
bEVudmlyb25tZW50Kj4oY2VsbCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0xleGljYWxFbnZpcm9ubWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTTGV4aWNhbEVudmlyb25tZW50LmgJKHJldmlzaW9uIDI3MjgzMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTGV4aWNhbEVudmlyb25tZW50LmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LTIw
MjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4
LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0xMzQsNyArMTM0LDcgQEAgcHJvdGVjdGVkOgogICAgICAgICB9CiAg
ICAgfQogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRv
ciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAgICAgc3RhdGljIHZvaWQgYW5hbHl6
ZUhlYXAoSlNDZWxsKiwgSGVhcEFuYWx5emVyJik7CiB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU01hcEl0ZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01hcEl0ZXJhdG9yLmNwcAkocmV2aXNpb24gMjcyODMw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNYXBJdGVyYXRvci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTcgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
My0yMDIxIEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTU3LDEzICs1NywxNiBAQCB2b2lkIEpTTWFwSXRlcmF0b3I6OmZp
bmlzaENyZWF0aW9uKFZNJiB2CiAgICAgICAgIEJhc2U6OmludGVybmFsRmllbGQoaW5kZXgpLnNl
dCh2bSwgdGhpcywgdmFsdWVzW2luZGV4XSk7CiB9CiAKLXZvaWQgSlNNYXBJdGVyYXRvcjo6dmlz
aXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8
dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNNYXBJdGVyYXRvcjo6dmlzaXRDaGlsZHJlbkltcGwo
SlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGF1dG8qIHRoaXNPYmplY3Qg
PSBqc0Nhc3Q8SlNNYXBJdGVyYXRvcio+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5I
RVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNP
YmplY3QsIHZpc2l0b3IpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNNYXBJdGVyYXRv
cik7CisKIEpTVmFsdWUgSlNNYXBJdGVyYXRvcjo6Y3JlYXRlUGFpcihKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBKU1ZhbHVlIGtleSwgSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBNYXJrZWRB
cmd1bWVudEJ1ZmZlciBhcmdzOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNNYXBJdGVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTTWFwSXRlcmF0b3IuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNNYXBJdGVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNiBBcHBsZSwgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjEgQXBwbGUsIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTQy
LDcgKzE0Miw3IEBAIHByaXZhdGU6CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBmaW5pc2hD
cmVhdGlvbihWTSYsIEpTTWFwKiwgSXRlcmF0aW9uS2luZCk7CiAgICAgdm9pZCBmaW5pc2hDcmVh
dGlvbihWTSYpOwogICAgIEpTVmFsdWUgY3JlYXRlUGFpcihKU0dsb2JhbE9iamVjdCosIEpTVmFs
dWUsIEpTVmFsdWUpOwotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xv
dFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogfTsKIFNUQVRJQ19BU1NF
UlRfSVNfVFJJVklBTExZX0RFU1RSVUNUSUJMRShKU01hcEl0ZXJhdG9yKTsKIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVFbnZpcm9ubWVudC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVFbnZpcm9ubWVu
dC5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTTW9kdWxlRW52aXJvbm1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjUsNyArNjUsOCBA
QCB2b2lkIEpTTW9kdWxlRW52aXJvbm1lbnQ6OmZpbmlzaENyZWF0aW9uCiAgICAgdGhpcy0+bW9k
dWxlUmVjb3JkU2xvdCgpLnNldCh2bSwgdGhpcywgbW9kdWxlUmVjb3JkKTsKIH0KIAotdm9pZCBK
U01vZHVsZUVudmlyb25tZW50Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0
b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU01vZHVsZUVu
dmlyb25tZW50Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0
b3IpCiB7CiAgICAgSlNNb2R1bGVFbnZpcm9ubWVudCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU01v
ZHVsZUVudmlyb25tZW50Kj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0
aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNzQsNiArNzUsOCBAQCB2b2lkIEpTTW9kdWxlRW52aXJv
bm1lbnQ6OnZpc2l0Q2hpbGRyZW4oCiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bW9k
dWxlUmVjb3JkU2xvdCgpKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTTW9kdWxlRW52
aXJvbm1lbnQpOworCiBib29sIEpTTW9kdWxlRW52aXJvbm1lbnQ6OmdldE93blByb3BlcnR5U2xv
dChKU09iamVjdCogY2VsbCwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUHJvcGVydHlO
YW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQogewogICAgIFZNJiB2bSA9IGds
b2JhbE9iamVjdC0+dm0oKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
TW9kdWxlRW52aXJvbm1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU01vZHVsZUVudmlyb25tZW50LmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlRW52aXJvbm1lbnQuaAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTg5LDcgKzg5LDcgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuICpiaXR3aXNl
X2Nhc3Q8V3JpdGVCYXJyaWVyQmFzZTxBYnN0cmFjdE1vZHVsZVJlY29yZD4qPihiaXR3aXNlX2Nh
c3Q8Y2hhcio+KHRoaXMpICsgb2Zmc2V0T2ZNb2R1bGVSZWNvcmQoc3ltYm9sVGFibGUoKSkpOwog
ICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0
b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogfTsKIAogaW5saW5lIEpTTW9kdWxl
RW52aXJvbm1lbnQ6OkpTTW9kdWxlRW52aXJvbm1lbnQoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSwgSlNTY29wZSogY3VycmVudFNjb3BlLCBTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZU5hbWVzcGFjZU9iamVj
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1
bGVOYW1lc3BhY2VPYmplY3QuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU01vZHVsZU5hbWVzcGFjZU9iamVjdC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjAgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC04NSw3ICs4NSw4IEBAIHZvaWQgSlNNb2R1bGVOYW1lc3BhY2VPYmplY3Q6OmRlc3Ry
b3koSlMKICAgICB0aGlzT2JqZWN0LT5KU01vZHVsZU5hbWVzcGFjZU9iamVjdDo6fkpTTW9kdWxl
TmFtZXNwYWNlT2JqZWN0KCk7CiB9CiAKLXZvaWQgSlNNb2R1bGVOYW1lc3BhY2VPYmplY3Q6OnZp
c2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRl
PHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0Ojp2aXNpdENo
aWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNNb2R1
bGVOYW1lc3BhY2VPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNNb2R1bGVOYW1lc3BhY2VP
YmplY3QqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3Qs
IGluZm8oKSk7CkBAIC05OCw2ICs5OSw4IEBAIHZvaWQgSlNNb2R1bGVOYW1lc3BhY2VPYmplY3Q6
OnZpc2l0Q2hpbGQKICAgICB9CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU01vZHVsZU5h
bWVzcGFjZU9iamVjdCk7CisKIHN0YXRpYyBKU1ZhbHVlIGdldFZhbHVlKEpTTW9kdWxlRW52aXJv
bm1lbnQqIGVudmlyb25tZW50LCBQcm9wZXJ0eU5hbWUgbG9jYWxOYW1lLCBTY29wZU9mZnNldCYg
c2NvcGVPZmZzZXQpCiB7CiAgICAgU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlID0gZW52aXJvbm1l
bnQtPnN5bWJvbFRhYmxlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U01vZHVsZU5hbWVzcGFjZU9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTTW9kdWxlTmFtZXNwYWNlT2JqZWN0LmgJKHJldmlzaW9uIDI3MjgzMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlTmFtZXNwYWNlT2JqZWN0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDE1LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE1LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC03Miw3ICs3Miw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QoVk0mLCBTdHJ1Y3R1
cmUqKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGZpbmlzaENyZWF0aW9uKEpTR2xvYmFs
T2JqZWN0KiwgQWJzdHJhY3RNb2R1bGVSZWNvcmQqLCBWZWN0b3I8c3RkOjpwYWlyPElkZW50aWZp
ZXIsIEFic3RyYWN0TW9kdWxlUmVjb3JkOjpSZXNvbHV0aW9uPj4mJik7Ci0gICAgc3RhdGljIHZv
aWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklT
SVRfQ0hJTERSRU47CiAgICAgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3RDb21tb24oSlNHbG9iYWxP
YmplY3QqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwogCiAgICAgc3RydWN0IEV4cG9y
dEVudHJ5IHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlUmVj
b3JkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01v
ZHVsZVJlY29yZC5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTTW9kdWxlUmVjb3JkLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTcwLDcgKzcw
LDggQEAgdm9pZCBKU01vZHVsZVJlY29yZDo6ZmluaXNoQ3JlYXRpb24oSlNHbAogICAgIEFTU0VS
VChpbmhlcml0cyh2bSwgaW5mbygpKSk7CiB9CiAKLXZvaWQgSlNNb2R1bGVSZWNvcmQ6OnZpc2l0
Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5
cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTTW9kdWxlUmVjb3JkOjp2aXNpdENoaWxkcmVuSW1wbChK
U0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNNb2R1bGVSZWNvcmQqIHRo
aXNPYmplY3QgPSBqc0Nhc3Q8SlNNb2R1bGVSZWNvcmQqPihjZWxsKTsKICAgICBBU1NFUlRfR0Nf
T0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC03OCw2ICs3OSw4IEBAIHZv
aWQgSlNNb2R1bGVSZWNvcmQ6OnZpc2l0Q2hpbGRyZW4oSlNDZWwKICAgICB2aXNpdG9yLmFwcGVu
ZCh0aGlzT2JqZWN0LT5tX21vZHVsZVByb2dyYW1FeGVjdXRhYmxlKTsKIH0KIAorREVGSU5FX1ZJ
U0lUX0NISUxEUkVOKEpTTW9kdWxlUmVjb3JkKTsKKwogdm9pZCBKU01vZHVsZVJlY29yZDo6bGlu
ayhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHNjcmlwdEZldGNoZXIpCiB7
CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVSZWNvcmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZVJlY29yZC5oCShyZXZpc2lvbiAyNzI4MzApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZVJlY29yZC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtNjYsNyArNjYsNyBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBmaW5pc2hDcmVh
dGlvbihKU0dsb2JhbE9iamVjdCosIFZNJik7CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxk
cmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsK
IAogICAgIHZvaWQgaW5zdGFudGlhdGVEZWNsYXJhdGlvbnMoSlNHbG9iYWxPYmplY3QqLCBNb2R1
bGVQcm9ncmFtRXhlY3V0YWJsZSosIEpTVmFsdWUgc2NyaXB0RmV0Y2hlcik7CiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTmF0aXZlU3RkRnVuY3Rpb24uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTmF0aXZlU3RkRnVuY3Rp
b24uY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU05hdGl2ZVN0ZEZ1bmN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQxLDEzICs0MSwx
NiBAQCBKU05hdGl2ZVN0ZEZ1bmN0aW9uOjpKU05hdGl2ZVN0ZEZ1bmN0aW9uCiB7CiB9CiAKLXZv
aWQgSlNOYXRpdmVTdGRGdW5jdGlvbjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNOYXRp
dmVTdGRGdW5jdGlvbjo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2
aXNpdG9yKQogewogICAgIEpTTmF0aXZlU3RkRnVuY3Rpb24qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8
SlNOYXRpdmVTdGRGdW5jdGlvbio+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJ
VFModGhpc09iamVjdCwgaW5mbygpKTsKICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmpl
Y3QsIHZpc2l0b3IpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNOYXRpdmVTdGRGdW5j
dGlvbik7CisKIHZvaWQgSlNOYXRpdmVTdGRGdW5jdGlvbjo6ZmluaXNoQ3JlYXRpb24oVk0mIHZt
LCBOYXRpdmVFeGVjdXRhYmxlKiBleGVjdXRhYmxlLCB1bnNpZ25lZCBsZW5ndGgsIGNvbnN0IFN0
cmluZyYgbmFtZSkKIHsKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSwgZXhlY3V0YWJsZSwg
bGVuZ3RoLCBuYW1lKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTmF0
aXZlU3RkRnVuY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU05hdGl2ZVN0ZEZ1bmN0aW9uLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTmF0aXZlU3RkRnVuY3Rpb24uaAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxOCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTY1LDcgKzY1LDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBKU05hdGl2ZVN0ZEZ1
bmN0aW9uKFZNJiwgTmF0aXZlRXhlY3V0YWJsZSosIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJl
KiwgTmF0aXZlU3RkRnVuY3Rpb24mJik7CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIE5h
dGl2ZUV4ZWN1dGFibGUqLCB1bnNpZ25lZCBsZW5ndGgsIGNvbnN0IFN0cmluZyYgbmFtZSk7Ci0g
ICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAg
IERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBOYXRpdmVTdGRGdW5jdGlvbiBtX2Z1bmN0
aW9uOwogfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5j
cHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
T2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiAgQ29weXJp
Z2h0IChDKSAxOTk5LTIwMDEgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKICAqICBDb3B5
cmlnaHQgKEMpIDIwMDEgUGV0ZXIgS2VsbHkgKHBta0Bwb3N0LmNvbSkKLSAqICBDb3B5cmlnaHQg
KEMpIDIwMDMtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJp
Z2h0IChDKSAyMDAzLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogIENv
cHlyaWdodCAoQykgMjAwNyBFcmljIFNlaWRlbCAoZXJpY0B3ZWJraXQub3JnKQogICoKICAqICBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCkBAIC03Miw3ICs3Miw4IEBAIGNvbnN0IENsYXNzSW5mbyBKU09iamVjdDo6c19pbmZvID0g
eyAiT2IKIAogY29uc3QgQ2xhc3NJbmZvIEpTRmluYWxPYmplY3Q6OnNfaW5mbyA9IHsgIk9iamVj
dCIsICZCYXNlOjpzX2luZm8sIG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUo
SlNGaW5hbE9iamVjdCkgfTsKIAotQUxXQVlTX0lOTElORSB2b2lkIEpTT2JqZWN0OjptYXJrQXV4
aWxpYXJ5QW5kVmlzaXRPdXRPZkxpbmVQcm9wZXJ0aWVzKFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBC
dXR0ZXJmbHkqIGJ1dHRlcmZseSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0
IG1heE9mZnNldCkKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+CitBTFdBWVNfSU5MSU5FIHZv
aWQgSlNPYmplY3Q6Om1hcmtBdXhpbGlhcnlBbmRWaXNpdE91dE9mTGluZVByb3BlcnRpZXMoVmlz
aXRvciYgdmlzaXRvciwgQnV0dGVyZmx5KiBidXR0ZXJmbHksIFN0cnVjdHVyZSogc3RydWN0dXJl
LCBQcm9wZXJ0eU9mZnNldCBtYXhPZmZzZXQpCiB7CiAgICAgLy8gV2UgY2FsbCB0aGlzIHdoZW4g
d2UgZm91bmQgZXZlcnl0aGluZyB3aXRob3V0IHJhY2VzLgogICAgIEFTU0VSVChzdHJ1Y3R1cmUp
OwpAQCAtMTAzLDcgKzEwNCw4IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKU09iamVjdDo6bWFya0F1
eGlsaWEKICAgICB2aXNpdG9yLmFwcGVuZFZhbHVlc0hpZGRlbihidXR0ZXJmbHktPnByb3BlcnR5
U3RvcmFnZSgpIC0gb3V0T2ZMaW5lU2l6ZSwgb3V0T2ZMaW5lU2l6ZSk7CiB9CiAKLUFMV0FZU19J
TkxJTkUgU3RydWN0dXJlKiBKU09iamVjdDo6dmlzaXRCdXR0ZXJmbHkoU2xvdFZpc2l0b3ImIHZp
c2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgorQUxXQVlTX0lOTElORSBTdHJ1Y3R1
cmUqIEpTT2JqZWN0Ojp2aXNpdEJ1dHRlcmZseShWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHN0
YXRpYyBjb25zdCBjaGFyKiBjb25zdCByYWNlUmVhc29uID0gIkpTT2JqZWN0Ojp2aXNpdEJ1dHRl
cmZseSI7CiAgICAgU3RydWN0dXJlKiByZXN1bHQgPSB2aXNpdEJ1dHRlcmZseUltcGwodmlzaXRv
cik7CkBAIC0xMTIsNyArMTE0LDggQEAgQUxXQVlTX0lOTElORSBTdHJ1Y3R1cmUqIEpTT2JqZWN0
Ojp2aXNpdAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUFMV0FZU19JTkxJTkUgU3RydWN0dXJl
KiBKU09iamVjdDo6dmlzaXRCdXR0ZXJmbHlJbXBsKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVt
cGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK0FMV0FZU19JTkxJTkUgU3RydWN0dXJlKiBKU09iamVj
dDo6dmlzaXRCdXR0ZXJmbHlJbXBsKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgVk0mIHZtID0g
dmlzaXRvci52bSgpOwogICAgIApAQCAtNDEyLDI0ICs0MTUsMjAgQEAgc2l6ZV90IEpTT2JqZWN0
Ojplc3RpbWF0ZWRTaXplKEpTQ2VsbCogYwogICAgIHJldHVybiBCYXNlOjplc3RpbWF0ZWRTaXpl
KGNlbGwsIHZtKSArIGJ1dHRlcmZseU91dE9mTGluZVNpemU7CiB9CiAKLXZvaWQgSlNPYmplY3Q6
OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBs
YXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTT2JqZWN0Ojp2aXNpdENoaWxkcmVuSW1wbChK
U0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNPYmplY3QqIHRoaXNPYmpl
Y3QgPSBqc0Nhc3Q8SlNPYmplY3QqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVS
SVRTKHRoaXNPYmplY3QsIGluZm8oKSk7Ci0jaWYgQVNTRVJUX0VOQUJMRUQKLSAgICBib29sIHdh
c0NoZWNraW5nRm9yRGVmYXVsdE1hcmtWaW9sYXRpb24gPSB2aXNpdG9yLm1faXNDaGVja2luZ0Zv
ckRlZmF1bHRNYXJrVmlvbGF0aW9uOwotICAgIHZpc2l0b3IubV9pc0NoZWNraW5nRm9yRGVmYXVs
dE1hcmtWaW9sYXRpb24gPSBmYWxzZTsKLSNlbmRpZgotICAgIAorICAgIHR5cGVuYW1lIFZpc2l0
b3I6OkRlZmF1bHRNYXJraW5nVmlvbGF0aW9uQXNzZXJ0aW9uU2NvcGUgYXNzZXJ0aW9uU2NvcGUo
dmlzaXRvcik7CisKICAgICBKU0NlbGw6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRv
cik7Ci0gICAgCisKICAgICB0aGlzT2JqZWN0LT52aXNpdEJ1dHRlcmZseSh2aXNpdG9yKTsKLSAg
ICAKLSNpZiBBU1NFUlRfRU5BQkxFRAotICAgIHZpc2l0b3IubV9pc0NoZWNraW5nRm9yRGVmYXVs
dE1hcmtWaW9sYXRpb24gPSB3YXNDaGVja2luZ0ZvckRlZmF1bHRNYXJrVmlvbGF0aW9uOwotI2Vu
ZGlmCiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTl9XSVRIX01PRElGSUVSKEpTX0VYUE9SVF9Q
UklWQVRFLCBKU09iamVjdCk7CisKIHZvaWQgSlNPYmplY3Q6OmFuYWx5emVIZWFwKEpTQ2VsbCog
Y2VsbCwgSGVhcEFuYWx5emVyJiBhbmFseXplcikKIHsKICAgICBKU09iamVjdCogdGhpc09iamVj
dCA9IGpzQ2FzdDxKU09iamVjdCo+KGNlbGwpOwpAQCAtNDY4LDE0ICs0NjcsMTIgQEAgdm9pZCBK
U09iamVjdDo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLAogICAgIH0KIH0KIAotdm9pZCBKU0Zp
bmFsT2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0
b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0ZpbmFsT2JqZWN0Ojp2aXNp
dENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNG
aW5hbE9iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0ZpbmFsT2JqZWN0Kj4oY2VsbCk7CiAg
ICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwotI2lmIEFT
U0VSVF9FTkFCTEVECi0gICAgYm9vbCB3YXNDaGVja2luZ0ZvckRlZmF1bHRNYXJrVmlvbGF0aW9u
ID0gdmlzaXRvci5tX2lzQ2hlY2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlvbjsKLSAgICB2aXNp
dG9yLm1faXNDaGVja2luZ0ZvckRlZmF1bHRNYXJrVmlvbGF0aW9uID0gZmFsc2U7Ci0jZW5kaWYK
KyAgICB0eXBlbmFtZSBWaXNpdG9yOjpEZWZhdWx0TWFya2luZ1Zpb2xhdGlvbkFzc2VydGlvblNj
b3BlIGFzc2VydGlvblNjb3BlKHZpc2l0b3IpOwogICAgIAogICAgIEpTQ2VsbDo6dmlzaXRDaGls
ZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKICAgICAKQEAgLTQ4MywxMiArNDgwLDEwIEBAIHZv
aWQgSlNGaW5hbE9iamVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwKICAgICAgICAgaWYgKHVuc2ln
bmVkIHN0b3JhZ2VTaXplID0gc3RydWN0dXJlLT5pbmxpbmVTaXplKCkpCiAgICAgICAgICAgICB2
aXNpdG9yLmFwcGVuZFZhbHVlc0hpZGRlbih0aGlzT2JqZWN0LT5pbmxpbmVTdG9yYWdlKCksIHN0
b3JhZ2VTaXplKTsKICAgICB9Ci0gICAgCi0jaWYgQVNTRVJUX0VOQUJMRUQKLSAgICB2aXNpdG9y
Lm1faXNDaGVja2luZ0ZvckRlZmF1bHRNYXJrVmlvbGF0aW9uID0gd2FzQ2hlY2tpbmdGb3JEZWZh
dWx0TWFya1Zpb2xhdGlvbjsKLSNlbmRpZgogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU5fV0lU
SF9NT0RJRklFUihKU19FWFBPUlRfUFJJVkFURSwgSlNGaW5hbE9iamVjdCk7CisKIFN0cmluZyBK
U09iamVjdDo6Y2xhc3NOYW1lKGNvbnN0IEpTT2JqZWN0KiBvYmplY3QsIFZNJiB2bSkKIHsKICAg
ICBjb25zdCBDbGFzc0luZm8qIGluZm8gPSBvYmplY3QtPmNsYXNzSW5mbyh2bSk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJKHJldmlzaW9uIDI3MjgzMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNyArMSw3IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAxIEhhcnJp
IFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCiAgKiAgQ29weXJpZ2h0IChDKSAyMDAxIFBldGVyIEtl
bGx5IChwbWtAcG9zdC5jb20pCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMTkgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwMy0yMDIxIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0xMDgs
OCArMTA4LDkgQEAgY2xhc3MgSlNPYmplY3QgOiBwdWJsaWMgSlNDZWxsIHsKIHB1YmxpYzoKICAg
ICB1c2luZyBCYXNlID0gSlNDZWxsOwogCisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTl9XSVRI
X01PRElGSUVSKEpTX0VYUE9SVF9QUklWQVRFKTsKKwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0
YXRpYyBzaXplX3QgZXN0aW1hdGVkU2l6ZShKU0NlbGwqLCBWTSYpOwotICAgIEpTX0VYUE9SVF9Q
UklWQVRFIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsK
ICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBhbmFseXplSGVhcChKU0NlbGwqLCBI
ZWFwQW5hbHl6ZXImKTsKIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBTdHJpbmcgY2xh
c3NOYW1lKGNvbnN0IEpTT2JqZWN0KiwgVk0mKTsKQEAgLTk4MiwxMSArOTgzLDExIEBAIHByb3Rl
Y3RlZDoKICAgICBKU09iamVjdChWTSYsIFN0cnVjdHVyZSosIEJ1dHRlcmZseSogPSBudWxscHRy
KTsKICAgICAKICAgICAvLyBWaXNpdHMgdGhlIGJ1dHRlcmZseSB1bmxlc3MgdGhlcmUgaXMgYSBy
YWNlLiBSZXR1cm5zIHRoZSBzdHJ1Y3R1cmUgaWYgdGhlcmUgd2FzIG5vIHJhY2UuCi0gICAgU3Ry
dWN0dXJlKiB2aXNpdEJ1dHRlcmZseShTbG90VmlzaXRvciYpOworICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFZpc2l0b3I+IFN0cnVjdHVyZSogdmlzaXRCdXR0ZXJmbHkoVmlzaXRvciYpOwogICAgIAot
ICAgIFN0cnVjdHVyZSogdmlzaXRCdXR0ZXJmbHlJbXBsKFNsb3RWaXNpdG9yJik7CisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gU3RydWN0dXJlKiB2aXNpdEJ1dHRlcmZseUltcGwoVmlz
aXRvciYpOwogICAgIAotICAgIHZvaWQgbWFya0F1eGlsaWFyeUFuZFZpc2l0T3V0T2ZMaW5lUHJv
cGVydGllcyhTbG90VmlzaXRvciYsIEJ1dHRlcmZseSosIFN0cnVjdHVyZSosIFByb3BlcnR5T2Zm
c2V0IG1heE9mZnNldCk7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCBtYXJr
QXV4aWxpYXJ5QW5kVmlzaXRPdXRPZkxpbmVQcm9wZXJ0aWVzKFZpc2l0b3ImLCBCdXR0ZXJmbHkq
LCBTdHJ1Y3R1cmUqLCBQcm9wZXJ0eU9mZnNldCBtYXhPZmZzZXQpOwogCiAgICAgLy8gQ2FsbCB0
aGlzIGlmIHlvdSBrbm93IHRoYXQgdGhlIG9iamVjdCBpcyBpbiBhIG1vZGUgd2hlcmUgaXQgaGFz
IGFycmF5CiAgICAgLy8gc3RvcmFnZS4gVGhpcyB3aWxsIGFzc2VydCBvdGhlcndpc2UuCkBAIC0x
MTc0LDggKzExNzUsNiBAQCBwcm90ZWN0ZWQ6CiAgICAgfQogfTsKIAotY2xhc3MgSlNGaW5hbE9i
amVjdDsKLQogLy8gSlNGaW5hbE9iamVjdCBpcyBhIHR5cGUgb2YgSlNPYmplY3QgdGhhdCBjb250
YWlucyBzdWZmaWNpZW50IGludGVybmFsCiAvLyBzdG9yYWdlIHRvIGZ1bGx5IG1ha2UgdXNlIG9m
IHRoZSBjb2xsZWN0b3IgY2VsbCBjb250YWluaW5nIGl0LgogY2xhc3MgSlNGaW5hbE9iamVjdCBm
aW5hbCA6IHB1YmxpYyBKU09iamVjdCB7CkBAIC0xMjE0LDE1ICsxMjEzLDEzIEBAIHB1YmxpYzoK
ICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3Rv
dHlwZSwgdHlwZUluZm8oKSwgaW5mbygpLCBkZWZhdWx0SW5kZXhpbmdUeXBlLCBpbmxpbmVDYXBh
Y2l0eSk7CiAgICAgfQogCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgdmlzaXRD
aGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERS
RU5fV0lUSF9NT0RJRklFUihKU19FWFBPUlRfUFJJVkFURSk7CiAKICAgICBERUNMQVJFX0VYUE9S
VF9JTkZPOwogCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0
b3I7CiAKLSAgICB2b2lkIHZpc2l0Q2hpbGRyZW5Db21tb24oU2xvdFZpc2l0b3ImKTsKLQogICAg
IGV4cGxpY2l0IEpTRmluYWxPYmplY3QoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgQnV0
dGVyZmx5KiBidXR0ZXJmbHkpCiAgICAgICAgIDogSlNPYmplY3Qodm0sIHN0cnVjdHVyZSwgYnV0
dGVyZmx5KQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJv
bWlzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQ
cm9taXNlLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNQcm9taXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY3LDEzICs2NywxNiBAQCB2
b2lkIEpTUHJvbWlzZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQogICAgICAgICBCYXNlOjppbnRl
cm5hbEZpZWxkKGluZGV4KS5zZXQodm0sIHRoaXMsIHZhbHVlc1tpbmRleF0pOwogfQogCi12b2lk
IEpTUHJvbWlzZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNp
dG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNQcm9taXNlOjp2aXNpdENo
aWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0byog
dGhpc09iamVjdCA9IGpzQ2FzdDxKU1Byb21pc2UqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JK
RUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAgICAgQmFzZTo6dmlzaXRDaGlsZHJl
bih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTUHJv
bWlzZSk7CisKIGF1dG8gSlNQcm9taXNlOjpzdGF0dXMoVk0mKSBjb25zdCAtPiBTdGF0dXMKIHsK
ICAgICBKU1ZhbHVlIHZhbHVlID0gaW50ZXJuYWxGaWVsZChGaWVsZDo6RmxhZ3MpLmdldCgpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9taXNlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9taXNlLmgJKHJldmlzaW9u
IDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvbWlzZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTk2LDcgKzk2LDcgQEAgcHVibGljOgogICAgIH07CiAgICAgc3RhdGljIERl
ZmVycmVkRGF0YSBjcmVhdGVEZWZlcnJlZERhdGEoSlNHbG9iYWxPYmplY3QqLCBKU1Byb21pc2VD
b25zdHJ1Y3RvciopOwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBT
bG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKIHByb3RlY3RlZDoK
ICAgICBKU1Byb21pc2UoVk0mLCBTdHJ1Y3R1cmUqKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTUHJvcGVydHlOYW1lRW51bWVyYXRvci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmNw
cAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQ
cm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTcwLDcgKzcwLDgg
QEAgdm9pZCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmZpbmlzaENyZQogICAgIH0KIH0KIAot
dm9pZCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxs
LCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lk
IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxs
LCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvciogdGhp
c09iamVjdCA9IGpzQ2FzdDxKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqPihjZWxsKTsKICAgICBB
U1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC04Nyw2ICs4
OCw4IEBAIHZvaWQgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjp2aXNpdENoaWwKICAgICB9CiB9
CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IpOworCiAv
LyBGSVhNRTogQXNzZXJ0IHRoYXQgcHJvcGVydGllcyByZXR1cm5lZCBieSBnZXRPd25Qcm9wZXJ0
eU5hbWVzKCkgYXJlIHJlcG9ydGVkIGVudW1lcmFibGUgYnkgZ2V0T3duUHJvcGVydHlTbG90KCku
CiAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE5OTI2CiB2b2lk
IGdldEVudW1lcmFibGVQcm9wZXJ0eU5hbWVzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEpTT2JqZWN0KiBiYXNlLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgdWludDMy
X3QmIGluZGV4ZWRMZW5ndGgsIHVpbnQzMl90JiBzdHJ1Y3R1cmVQcm9wZXJ0eUNvdW50KQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9y
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTUHJvcGVydHlOYW1lRW51bWVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNC0yMDE5IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDIxIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtODQsNyArODQsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0Yo
SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLCBtX3Byb3BlcnR5TmFtZXMpOwogICAgIH0KIAotICAg
IHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBE
RUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBMTElu
dE9mZnNldHNFeHRyYWN0b3I7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U1Byb3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U1Byb3h5LmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNQcm94eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDExLTIwMTIsIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM1LDcgKzM1
LDggQEAgU1RBVElDX0FTU0VSVF9JU19UUklWSUFMTFlfREVTVFJVQ1RJQkxFKAogCiBjb25zdCBD
bGFzc0luZm8gSlNQcm94eTo6c19pbmZvID0geyAiSlNQcm94eSIsICZCYXNlOjpzX2luZm8sIG51
bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNQcm94eSkgfTsKIAotdm9pZCBK
U1Byb3h5Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3Ip
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1Byb3h5Ojp2aXNpdENoaWxkcmVu
SW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNQcm94eSogdGhp
c09iamVjdCA9IGpzQ2FzdDxKU1Byb3h5Kj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9J
TkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNDMsNiArNDQsOCBAQCB2b2lkIEpTUHJv
eHk6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsCiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09i
amVjdC0+bV90YXJnZXQpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU5fV0lUSF9NT0RJRklF
UihKU19FWFBPUlRfUFJJVkFURSwgSlNQcm94eSk7CisKIHZvaWQgSlNQcm94eTo6c2V0VGFyZ2V0
KFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKIHsKICAgICBtX3RhcmdldC5z
ZXQodm0sIHRoaXMsIGdsb2JhbE9iamVjdCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU1Byb3h5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNQcm94eS5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1Byb3h5LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDExLTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC04NSw3ICs4NSw3IEBAIHBy
b3RlY3RlZDoKICAgICAgICAgbV90YXJnZXQuc2V0KHZtLCB0aGlzLCB0YXJnZXQpOwogICAgIH0K
IAotICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOX1dJVEhfTU9ESUZJ
RVIoSlNfRVhQT1JUX1BSSVZBVEUpOwogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFN0
cmluZyBjbGFzc05hbWUoY29uc3QgSlNPYmplY3QqLCBWTSYpOwogICAgIEpTX0VYUE9SVF9QUklW
QVRFIHN0YXRpYyBTdHJpbmcgdG9TdHJpbmdOYW1lKGNvbnN0IEpTT2JqZWN0KiwgSlNHbG9iYWxP
YmplY3QqKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2NvcGUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2NvcGUuY3Bw
CShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Nj
b3BlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTItMjAyMCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTItMjAyMSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM5LDcgKzM5LDggQEAgU1RBVElDX0FTU0VSVF9J
U19UUklWSUFMTFlfREVTVFJVQ1RJQkxFKAogCiBjb25zdCBDbGFzc0luZm8gSlNTY29wZTo6c19p
bmZvID0geyAiU2NvcGUiLCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVf
TUVUSE9EX1RBQkxFKEpTU2NvcGUpIH07CiAKLXZvaWQgSlNTY29wZTo6dmlzaXRDaGlsZHJlbihK
U0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlz
aXRvcj4KK3ZvaWQgSlNTY29wZTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNp
dG9yJiB2aXNpdG9yKQogewogICAgIEpTU2NvcGUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNTY29w
ZSo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5m
bygpKTsKQEAgLTQ3LDYgKzQ4LDggQEAgdm9pZCBKU1Njb3BlOjp2aXNpdENoaWxkcmVuKEpTQ2Vs
bCogY2VsbAogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fbmV4dCk7CiB9CiAKK0RF
RklORV9WSVNJVF9DSElMRFJFTihKU1Njb3BlKTsKKwogLy8gUmV0dXJucyB0cnVlIGlmIHdlIGZv
dW5kIGVub3VnaCBpbmZvcm1hdGlvbiB0byB0ZXJtaW5hdGUgb3B0aW1pemF0aW9uLgogc3RhdGlj
IGlubGluZSBib29sIGFic3RyYWN0QWNjZXNzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEpTU2NvcGUqIHNjb3BlLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgR2V0T3JQdXQgZ2V0T3JQ
dXQsIHNpemVfdCBkZXB0aCwgYm9vbCYgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MsIFJlc29sdmVP
cCYgb3AsIEluaXRpYWxpemF0aW9uTW9kZSBpbml0aWFsaXphdGlvbk1vZGUpCiB7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Njb3BlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTY29wZS5oCShyZXZpc2lvbiAyNzI4MzApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Njb3BlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTkgQXBwbGUgSW5j
LiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjEgQXBwbGUg
SW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC02NCw3ICs2NCw3IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyB2b2lkIGNvbGxlY3RDbG9z
dXJlVmFyaWFibGVzVW5kZXJURFooSlNTY29wZSosIFREWkVudmlyb25tZW50JiByZXN1bHQsIFBy
aXZhdGVOYW1lRW52aXJvbm1lbnQmKTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4o
SlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAg
ICAgYm9vbCBpc1ZhclNjb3BlKCk7CiAgICAgYm9vbCBpc0xleGljYWxTY29wZSgpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZWdtZW50
ZWRWYXJpYWJsZU9iamVjdC5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVPYmplY3QuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC02Miw3ICs2Miw4IEBAIFNjb3BlT2Zmc2V0IEpTU2VnbWVudGVkVmFyaWFibGVPYmpl
Y3Q6OmEKICAgICByZXR1cm4gU2NvcGVPZmZzZXQob2xkU2l6ZSk7CiB9CiAKLXZvaWQgSlNTZWdt
ZW50ZWRWYXJpYWJsZU9iamVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNp
dG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNTZWdtZW50
ZWRWYXJpYWJsZU9iamVjdDo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9y
JiB2aXNpdG9yKQogewogICAgIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3QqIHRoaXNPYmplY3Qg
PSBqc0Nhc3Q8SlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdCo+KGNlbGwpOwogICAgIEFTU0VSVF9H
Q19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTc1LDYgKzc2LDggQEAg
dm9pZCBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0Ojp2aXNpdENoaQogICAgICAgICB2aXNpdG9y
LmFwcGVuZEhpZGRlbih0aGlzT2JqZWN0LT5tX3ZhcmlhYmxlc1tpXSk7CiB9CiAKK0RFRklORV9W
SVNJVF9DSElMRFJFTl9XSVRIX01PRElGSUVSKEpTX0VYUE9SVF9QUklWQVRFLCBKU1NlZ21lbnRl
ZFZhcmlhYmxlT2JqZWN0KTsKKwogdm9pZCBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0OjphbmFs
eXplSGVhcChKU0NlbGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCiB7CiAgICAgSlNT
ZWdtZW50ZWRWYXJpYWJsZU9iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1NlZ21lbnRlZFZh
cmlhYmxlT2JqZWN0Kj4oY2VsbCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdC5oCShyZXZpc2lvbiAy
NzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NlZ21lbnRlZFZhcmlh
YmxlT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDEyLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDEyLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC04NSw4ICs4NSw4IEBAIHB1YmxpYzoKICAg
ICAvLyBBZGRzIG51bWJlck9mUmVnaXN0ZXJzVG9BZGQgcmVnaXN0ZXJzLCBpbml0aWFsaXplcyB0
aGVtIHRvIFVuZGVmaW5lZCwgYW5kIHJldHVybnMKICAgICAvLyB0aGUgaW5kZXggb2YgdGhlIGZp
cnN0IG9uZSBhZGRlZC4KICAgICBKU19FWFBPUlRfUFJJVkFURSBTY29wZU9mZnNldCBhZGRWYXJp
YWJsZXModW5zaWduZWQgbnVtYmVyT2ZWYXJpYWJsZXNUb0FkZCwgSlNWYWx1ZSk7Ci0gICAgCi0g
ICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBT
bG90VmlzaXRvciYpOworCisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTl9XSVRIX01PRElGSUVS
KEpTX0VYUE9SVF9QUklWQVRFKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBh
bmFseXplSGVhcChKU0NlbGwqLCBIZWFwQW5hbHl6ZXImKTsKICAgICAKIHByb3RlY3RlZDoKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2V0SXRlcmF0b3IuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2V0SXRlcmF0b3IuY3Bw
CShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Nl
dEl0ZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNyBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMjEgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTcsMTMgKzU3LDE2IEBAIHZvaWQg
SlNTZXRJdGVyYXRvcjo6ZmluaXNoQ3JlYXRpb24oVk0mIHYKICAgICAgICAgQmFzZTo6aW50ZXJu
YWxGaWVsZChpbmRleCkuc2V0KHZtLCB0aGlzLCB2YWx1ZXNbaW5kZXhdKTsKIH0KIAotdm9pZCBK
U1NldEl0ZXJhdG9yOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZp
c2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1NldEl0ZXJhdG9yOjp2
aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAg
YXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1NldEl0ZXJhdG9yKj4oY2VsbCk7CiAgICAgQVNT
RVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwogICAgIEJhc2U6OnZp
c2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CiB9CiAKK0RFRklORV9WSVNJVF9DSElM
RFJFTihKU1NldEl0ZXJhdG9yKTsKKwogSlNWYWx1ZSBKU1NldEl0ZXJhdG9yOjpjcmVhdGVQYWly
KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUga2V5LCBKU1ZhbHVlIHZhbHVl
KQogewogICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3M7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU1NldEl0ZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZXRJdGVyYXRvci5oCShyZXZpc2lvbiAyNzI4MzApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NldEl0ZXJhdG9yLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE2IEFw
cGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAy
MSBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0xMzAsNyArMTMwLDcgQEAgcHJpdmF0ZToKICAgICBKU19FWFBPUlRfUFJJ
VkFURSB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgSlNTZXQqLCBJdGVyYXRpb25LaW5kKTsKICAg
ICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgSlNWYWx1
ZSBjcmVhdGVQYWlyKEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSwgSlNWYWx1ZSk7Ci0gICAgc3Rh
dGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xB
UkVfVklTSVRfQ0hJTERSRU47CiB9OwogU1RBVElDX0FTU0VSVF9JU19UUklWSUFMTFlfREVTVFJV
Q1RJQkxFKEpTU2V0SXRlcmF0b3IpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1N0cmluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNTdHJpbmcuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU1N0cmluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSw3IEBA
CiAvKgogICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAyIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtk
ZS5vcmcpCiAgKiAgQ29weXJpZ2h0IChDKSAyMDAxIFBldGVyIEtlbGx5IChwbWtAcG9zdC5jb20p
Ci0gKiAgQ29weXJpZ2h0IChDKSAyMDA0LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogIENvcHlyaWdodCAoQykgMjAwNC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0xMDUsNyArMTA1LDggQEAgc2l6ZV90
IEpTU3RyaW5nOjplc3RpbWF0ZWRTaXplKEpTQ2VsbCogYwogICAgIHJldHVybiBCYXNlOjplc3Rp
bWF0ZWRTaXplKGNlbGwsIHZtKSArIGJpdHdpc2VfY2FzdDxTdHJpbmdJbXBsKj4ocG9pbnRlcikt
PmNvc3REdXJpbmdHQygpOwogfQogCi12b2lkIEpTU3RyaW5nOjp2aXNpdENoaWxkcmVuKEpTQ2Vs
bCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
Pgordm9pZCBKU1N0cmluZzo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9y
JiB2aXNpdG9yKQogewogICAgIEpTU3RyaW5nKiB0aGlzT2JqZWN0ID0gYXNTdHJpbmcoY2VsbCk7
CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAt
MTQzLDYgKzE0NCw4IEBAIHZvaWQgSlNTdHJpbmc6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWwK
ICAgICAgICAgdmlzaXRvci5yZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQoaW1wbC0+Y29zdER1cmlu
Z0dDKCkpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNTdHJpbmcpOworCiBzdGF0aWMg
Y29uc3RleHByIHVuc2lnbmVkIG1heExlbmd0aEZvck9uU3RhY2tSZXNvbHZlID0gMjA0ODsKIAog
dm9pZCBKU1JvcGVTdHJpbmc6OnJlc29sdmVSb3BlSW50ZXJuYWw4KExDaGFyKiBidWZmZXIpIGNv
bnN0CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmgJKHJldmlz
aW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSw3IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMTk5
OS0yMDAxIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCiAgKiAgQ29weXJpZ2h0IChDKSAy
MDAxIFBldGVyIEtlbGx5IChwbWtAcG9zdC5jb20pCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIw
MjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAw
My0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICog
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCkBAIC0yMTcsNyArMjE3LDcgQEAgcHVibGljOgogCiAgICAgc3RhdGljIHZvaWQgZHVtcFRv
U3RyZWFtKGNvbnN0IEpTQ2VsbCosIFByaW50U3RyZWFtJik7CiAgICAgc3RhdGljIHNpemVfdCBl
c3RpbWF0ZWRTaXplKEpTQ2VsbCosIFZNJik7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJl
bihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAK
ICAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaXNSb3BlKCkgY29uc3QKICAgICB7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZ0l0ZXJhdG9yLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZ0l0ZXJhdG9yLmNwcAko
cmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJp
bmdJdGVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogQ29w
eXJpZ2h0IChDKSAyMDE1IFl1c3VrZSBTdXp1a2kgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4uCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01MSwxMSArNTEsMTQgQEAgSlNTdHJp
bmdJdGVyYXRvciogSlNTdHJpbmdJdGVyYXRvcjo6Y2xvbgogICAgIHJldHVybiBjbG9uZTsKIH0K
IAotdm9pZCBKU1N0cmluZ0l0ZXJhdG9yOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xv
dFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1N0
cmluZ0l0ZXJhdG9yOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZp
c2l0b3IpCiB7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1N0cmluZ0l0ZXJhdG9y
Kj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZv
KCkpOwogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CiB9CiAK
K0RFRklORV9WSVNJVF9DSElMRFJFTihKU1N0cmluZ0l0ZXJhdG9yKTsKKwogfSAvLyBuYW1lc3Bh
Y2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZ0l0ZXJh
dG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJp
bmdJdGVyYXRvci5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU1N0cmluZ0l0ZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBA
CiAvKgogICogQ29weXJpZ2h0IChDKSAyMDE1IFl1c3VrZSBTdXp1a2kgPHV0YXRhbmUudGVhQGdt
YWlsLmNvbT4uCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03OSw3ICs4MCw3IEBA
IHB1YmxpYzoKICAgICBKU1ZhbHVlIGluZGV4KCkgY29uc3QgeyByZXR1cm4gaW50ZXJuYWxGaWVs
ZChGaWVsZDo6SW5kZXgpLmdldCgpOyB9CiAgICAgSlNTdHJpbmdJdGVyYXRvciogY2xvbmUoSlNH
bG9iYWxPYmplY3QqKTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwg
U2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiBwcml2YXRlOgog
ICAgIEpTU3RyaW5nSXRlcmF0b3IoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3ltYm9sVGFibGVP
YmplY3QuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM2LDcgKzM2
LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAKIGNvbnN0IENsYXNzSW5mbyBKU1N5bWJvbFRhYmxlT2Jq
ZWN0OjpzX2luZm8gPSB7ICJTeW1ib2xUYWJsZU9iamVjdCIsICZCYXNlOjpzX2luZm8sIG51bGxw
dHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNTeW1ib2xUYWJsZU9iamVjdCkgfTsK
IAotdm9pZCBKU1N5bWJvbFRhYmxlT2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwg
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBK
U1N5bWJvbFRhYmxlT2JqZWN0Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0
b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNTeW1ib2xUYWJsZU9iamVjdCogdGhpc09iamVjdCA9IGpz
Q2FzdDxKU1N5bWJvbFRhYmxlT2JqZWN0Kj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9J
TkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNDQsNiArNDUsOCBAQCB2b2lkIEpTU3lt
Ym9sVGFibGVPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oCiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09i
amVjdC0+bV9zeW1ib2xUYWJsZSk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU1N5bWJv
bFRhYmxlT2JqZWN0KTsKKwogYm9vbCBKU1N5bWJvbFRhYmxlT2JqZWN0OjpkZWxldGVQcm9wZXJ0
eShKU0NlbGwqIGNlbGwsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFByb3BlcnR5TmFt
ZSBwcm9wZXJ0eU5hbWUsIERlbGV0ZVByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBKU1N5bWJv
bFRhYmxlT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTU3ltYm9sVGFibGVPYmplY3QqPihj
ZWxsKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3ltYm9sVGFibGVP
YmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N5
bWJvbFRhYmxlT2JqZWN0LmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTcw
LDcgKzcwLDcgQEAgcHJvdGVjdGVkOgogICAgICAgICBtX3N5bWJvbFRhYmxlLnNldCh2bSwgdGhp
cywgc3ltYm9sVGFibGUpOwogICAgIH0KICAgICAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxk
cmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsK
ICAgICAKIHByaXZhdGU6CiAgICAgV3JpdGVCYXJyaWVyPFN5bWJvbFRhYmxlPiBtX3N5bWJvbFRh
YmxlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNXZWFrT2JqZWN0UmVm
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1dlYWtP
YmplY3RSZWYuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU1dlYWtPYmplY3RSZWYuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE5LTIwMjEgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzksNyArMzksOCBA
QCB2b2lkIEpTV2Vha09iamVjdFJlZjo6ZmluaXNoQ3JlYXRpb24oVk0mCiAgICAgQmFzZTo6Zmlu
aXNoQ3JlYXRpb24odm0pOwogfQogCi12b2lkIEpTV2Vha09iamVjdFJlZjo6dmlzaXRDaGlsZHJl
bihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUg
VmlzaXRvcj4KK3ZvaWQgSlNXZWFrT2JqZWN0UmVmOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwq
IGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2Fz
dDxKU1dlYWtPYmplY3RSZWYqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRT
KHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC01MSw2ICs1Miw4IEBAIHZvaWQgSlNXZWFrT2JqZWN0
UmVmOjp2aXNpdENoaWxkcmVuKEpTQ2UKICAgICB9CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJF
TihKU1dlYWtPYmplY3RSZWYpOworCiB2b2lkIEpTV2Vha09iamVjdFJlZjo6ZmluYWxpemVVbmNv
bmRpdGlvbmFsbHkoVk0mIHZtKQogewogICAgIGlmIChtX3ZhbHVlICYmICF2bS5oZWFwLmlzTWFy
a2VkKG1fdmFsdWUuZ2V0KCkpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNXZWFrT2JqZWN0UmVmLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNXZWFrT2JqZWN0UmVmLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTV2Vha09iamVjdFJlZi5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSwgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE5LTIwMjEgQXBwbGUsIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjUs
NyArNjUsNyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgdm9pZCBmaW5hbGl6ZVVuY29uZGl0aW9u
YWxseShWTSYpOwotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZp
c2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiBwcml2YXRlOgogICAgIEpT
V2Vha09iamVjdFJlZihWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNXaXRoU2NvcGUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTV2l0aFNjb3BlLmNwcAkocmV2aXNpb24gMjcy
ODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNXaXRoU2NvcGUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiwg
MjAxNiBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTItMjAyMSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTQxLDcgKzQxLDggQEAgSlNXaXRoU2NvcGUqIEpTV2l0aFNjb3Bl
OjpjcmVhdGUoCiAgICAgcmV0dXJuIHdpdGhTY29wZTsKIH0KIAotdm9pZCBKU1dpdGhTY29wZTo6
dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxh
dGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNXaXRoU2NvcGU6OnZpc2l0Q2hpbGRyZW5JbXBs
KEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU1dpdGhTY29wZSogdGhp
c09iamVjdCA9IGpzQ2FzdDxKU1dpdGhTY29wZSo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpF
Q1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTQ5LDYgKzUwLDggQEAgdm9pZCBK
U1dpdGhTY29wZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIAogICAgIHZpc2l0b3IuYXBwZW5kKHRo
aXNPYmplY3QtPm1fb2JqZWN0KTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTV2l0aFNj
b3BlKTsKKwogU3RydWN0dXJlKiBKU1dpdGhTY29wZTo6Y3JlYXRlU3RydWN0dXJlKFZNJiB2bSwg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90bykKIHsKICAgICByZXR1
cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG8sIFR5cGVJbmZvKFdp
dGhTY29wZVR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTV2l0aFNjb3BlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNXaXRoU2NvcGUuaAkocmV2aXNpb24gMjcyODMwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNXaXRoU2NvcGUuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTYgQXBwbGUg
SW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjEgQXBw
bGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC00Myw3ICs0Myw3IEBAIHB1YmxpYzoKIAogICAgIEpTT2JqZWN0KiBvYmplY3QoKSB7
IHJldHVybiBtX29iamVjdC5nZXQoKTsgfQogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJl
bihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAK
ICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVj
dCosIEpTVmFsdWUgcHJvdG8pOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU1dyYXBwZXJPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTV3JhcHBlck9iamVjdC5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTV3JhcHBlck9iamVjdC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMjAwNiBNYWtzIE9ybG92
aWNoCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA5LCAyMDEyIEFwcGxlLCBJbmMuCisgKiAg
Q29weXJpZ2h0IChDKSAyMDA2LTIwMjEgQXBwbGUsIEluYy4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CkBAIC0yOSwxMSArMjksMTQgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIFNUQVRJQ19BU1NFUlRfSVNf
VFJJVklBTExZX0RFU1RSVUNUSUJMRShKU1dyYXBwZXJPYmplY3QpOwogCi12b2lkIEpTV3JhcHBl
ck9iamVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9y
KQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNXcmFwcGVyT2JqZWN0Ojp2aXNp
dENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0
byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1dyYXBwZXJPYmplY3QqPihjZWxsKTsKICAgICBBU1NF
UlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAgICAgQmFzZTo6dmlz
aXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxE
UkVOX1dJVEhfTU9ESUZJRVIoSlNfRVhQT1JUX1BSSVZBVEUsIEpTV3JhcHBlck9iamVjdCk7CisK
IH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNXcmFwcGVyT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNXcmFwcGVyT2JqZWN0LmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTV3JhcHBlck9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDYgKzEsNiBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDIwMDYgTWFrcyBPcmxvdmljaAotICog
IENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTY0LDcgKzY0LDcgQEAg
cHVibGljOgogcHJvdGVjdGVkOgogICAgIGV4cGxpY2l0IEpTV3JhcHBlck9iamVjdChWTSYsIFN0
cnVjdHVyZSopOwogCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgdmlzaXRDaGls
ZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU5f
V0lUSF9NT0RJRklFUihKU19FWFBPUlRfUFJJVkFURSk7CiB9OwogCiBpbmxpbmUgSlNXcmFwcGVy
T2JqZWN0OjpKU1dyYXBwZXJPYmplY3QoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0xhenlDbGFzc1N0cnVjdHVyZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTGF6eUNsYXNzU3Ry
dWN0dXJlLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvTGF6eUNsYXNzU3RydWN0dXJlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTcyLDEyICs3
MiwxNiBAQCB2b2lkIExhenlDbGFzc1N0cnVjdHVyZTo6SW5pdGlhbGl6ZXI6OnNlCiAgICAgY2xh
c3NTdHJ1Y3R1cmUubV9jb25zdHJ1Y3Rvci5zZXQodm0sIGdsb2JhbCwgY29uc3RydWN0b3IpOwog
fQogCi12b2lkIExhenlDbGFzc1N0cnVjdHVyZTo6dmlzaXQoU2xvdFZpc2l0b3ImIHZpc2l0b3Ip
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBMYXp5Q2xhc3NTdHJ1Y3R1cmU6OnZp
c2l0KFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgbV9zdHJ1Y3R1cmUudmlzaXQodmlzaXRvcik7
CiAgICAgdmlzaXRvci5hcHBlbmQobV9jb25zdHJ1Y3Rvcik7CiB9CiAKK3RlbXBsYXRlIHZvaWQg
TGF6eUNsYXNzU3RydWN0dXJlOjp2aXNpdChBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0
ZSB2b2lkIExhenlDbGFzc1N0cnVjdHVyZTo6dmlzaXQoU2xvdFZpc2l0b3ImKTsKKwogdm9pZCBM
YXp5Q2xhc3NTdHJ1Y3R1cmU6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKIHsKICAgICBv
dXQucHJpbnQoIjxzdHJ1Y3R1cmUgPSAiLCBtX3N0cnVjdHVyZSwgIiwgY29uc3RydWN0b3IgPSAi
LCBSYXdQb2ludGVyKG1fY29uc3RydWN0b3IuZ2V0KCkpLCAiPiIpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvTGF6eUNsYXNzU3RydWN0dXJlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTGF6eUNsYXNzU3RydWN0dXJlLmgJKHJldmlz
aW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0xhenlDbGFzc1N0
cnVjdHVyZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTExNyw3ICsxMTcsNyBAQCBwdWJsaWM6CiAgICAgICAg
IHJldHVybiBtX2NvbnN0cnVjdG9yLmdldCgpOwogICAgIH0KICAgICAKLSAgICB2b2lkIHZpc2l0
KFNsb3RWaXNpdG9yJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCB2aXNp
dChWaXNpdG9yJik7CiAgICAgCiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0xhenlQcm9wZXJ0eS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0xhenlQcm9wZXJ0eS5oCShy
ZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9MYXp5UHJv
cGVydHkuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTYtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEwMyw3ICsxMDMsNyBAQCBwdWJsaWM6CiAgICAg
dm9pZCBzZXRNYXlCZU51bGwoVk0mLCBjb25zdCBPd25lclR5cGUqIG93bmVyLCBFbGVtZW50VHlw
ZSopOwogICAgIHZvaWQgc2V0KFZNJiwgY29uc3QgT3duZXJUeXBlKiBvd25lciwgRWxlbWVudFR5
cGUqKTsKICAgICAKLSAgICB2b2lkIHZpc2l0KFNsb3RWaXNpdG9yJik7CisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCB2aXNpdChWaXNpdG9yJik7CiAgICAgCiAgICAgdm9pZCBk
dW1wKFByaW50U3RyZWFtJikgY29uc3Q7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9MYXp5UHJvcGVydHlJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvTGF6eVByb3BlcnR5SW5saW5lcy5oCShyZXZpc2lvbiAyNzI4
MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9MYXp5UHJvcGVydHlJbmxpbmVz
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
Ni0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtNjYsNyArNjYsOCBAQCB2b2lkIExhenlQcm9wZXJ0eTxPd25lclR5
cGUsIEVsZW1lbnRUeXBlCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE93bmVyVHlwZSwgdHlwZW5h
bWUgRWxlbWVudFR5cGU+Ci12b2lkIExhenlQcm9wZXJ0eTxPd25lclR5cGUsIEVsZW1lbnRUeXBl
Pjo6dmlzaXQoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
Pgordm9pZCBMYXp5UHJvcGVydHk8T3duZXJUeXBlLCBFbGVtZW50VHlwZT46OnZpc2l0KFZpc2l0
b3ImIHZpc2l0b3IpCiB7CiAgICAgaWYgKG1fcG9pbnRlciAmJiAhKG1fcG9pbnRlciAmIGxhenlU
YWcpKQogICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKGJpdHdpc2VfY2FzdDxFbGVt
ZW50VHlwZSo+KG1fcG9pbnRlcikpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL01vZHVsZVByb2dyYW1FeGVjdXRhYmxlLmNwcAkocmV2aXNpb24g
MjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTW9kdWxlUHJvZ3JhbUV4
ZWN1dGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAwOSwgMjAxMCwgMjAxMywgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNzksNyAr
NzksOCBAQCBhdXRvIE1vZHVsZVByb2dyYW1FeGVjdXRhYmxlOjplbnN1cmVUZW1wCiAgICAgcmV0
dXJuIGVuc3VyZVRlbXBsYXRlT2JqZWN0TWFwSW1wbChtX3RlbXBsYXRlT2JqZWN0TWFwKTsKIH0K
IAotdm9pZCBNb2R1bGVQcm9ncmFtRXhlY3V0YWJsZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNl
bGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3Zv
aWQgTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGU6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2Vs
bCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBNb2R1bGVQcm9ncmFtRXhlY3V0YWJsZSogdGhp
c09iamVjdCA9IGpzQ2FzdDxNb2R1bGVQcm9ncmFtRXhlY3V0YWJsZSo+KGNlbGwpOwogICAgIEFT
U0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTk0LDQgKzk1
LDYgQEAgdm9pZCBNb2R1bGVQcm9ncmFtRXhlY3V0YWJsZTo6dmlzaXRDaGlsZAogICAgIH0KIH0K
IAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKE1vZHVsZVByb2dyYW1FeGVjdXRhYmxlKTsKKwogfSAv
LyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Nb2R1
bGVQcm9ncmFtRXhlY3V0YWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL01vZHVsZVByb2dyYW1FeGVjdXRhYmxlLmgJKHJldmlzaW9uIDI3MjgzMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01vZHVsZVByb2dyYW1FeGVjdXRhYmxlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5
LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDA5LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC03Nyw3ICs3Nyw3IEBAIHByaXZhdGU6CiAKICAgICBNb2R1bGVQ
cm9ncmFtRXhlY3V0YWJsZShKU0dsb2JhbE9iamVjdCosIGNvbnN0IFNvdXJjZUNvZGUmKTsKIAot
ICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAg
ICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgV3JpdGVCYXJyaWVyPFVubGlua2VkTW9k
dWxlUHJvZ3JhbUNvZGVCbG9jaz4gbV91bmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2s7CiAg
ICAgV3JpdGVCYXJyaWVyPFN5bWJvbFRhYmxlPiBtX21vZHVsZUVudmlyb25tZW50U3ltYm9sVGFi
bGU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcAkocmV2
aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDExLTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDExLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC01NTgsNiArNTU4LDkgQEAgdm9pZCBPcHRpb25zOjpyZWNv
bXB1dGVEZXBlbmRlbnRPcHRpb25zKAogCiAgICAgaWYgKE9wdGlvbnM6OnVzZVByaXZhdGVTdGF0
aWNDbGFzc0ZpZWxkcygpKQogICAgICAgICBPcHRpb25zOjp1c2VQcml2YXRlQ2xhc3NGaWVsZHMo
KSA9IHRydWU7CisKKyAgICBpZiAoT3B0aW9uczo6dmVyYm9zZVZlcmlmeUdDKCkpCisgICAgICAg
IE9wdGlvbnM6OnZlcmlmeUdDKCkgPSB0cnVlOwogfQogCiBpbmxpbmUgdm9pZCogT3B0aW9uczo6
YWRkcmVzc09mT3B0aW9uKE9wdGlvbnM6OklEIGlkKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9PcHRpb25zTGlzdC5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zTGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
NjksNiArMzY5LDggQEAgSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBjYW5Vc2VKSVRDYWdlKCk7CiAg
ICAgdihCb29sLCBhbHdheXNHZW5lcmF0ZVBDVG9Db2RlT3JpZ2luTWFwLCBmYWxzZSwgTm9ybWFs
LCAiVGhpcyB3aWxsIG1ha2Ugc3VyZSB3ZSBhbHdheXMgZ2VuZXJhdGUgYSBQQ1RvQ29kZU9yaWdp
bk1hcCBmb3IgSklUZWQgY29kZS4iKSBcCiAgICAgXAogICAgIHYoRG91YmxlLCByYW5kb21JbnRl
Z3JpdHlBdWRpdFJhdGUsIDAuMDUsIE5vcm1hbCwgIlByb2JhYmlsaXR5IG9mIHJhbmRvbSBpbnRl
Z3JpdHkgYXVkaXRzIFswLjAgLSAxLjBdIikgXAorICAgIHYoQm9vbCwgdmVyaWZ5R0MsIGZhbHNl
LCBOb3JtYWwsIG51bGxwdHIpIFwKKyAgICB2KEJvb2wsIHZlcmJvc2VWZXJpZnlHQywgZmFsc2Us
IE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoQm9vbCwgdmVyaWZ5SGVhcCwgZmFsc2UsIE5vcm1h
bCwgbnVsbHB0cikgXAogICAgIHYoVW5zaWduZWQsIG51bWJlck9mR0NDeWNsZXNUb1JlY29yZEZv
clZlcmlmaWNhdGlvbiwgMywgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgXApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvZ3JhbUV4ZWN1dGFibGUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb2dyYW1FeGVjdXRhYmxlLmNwcAko
cmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvZ3Jh
bUV4ZWN1dGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAwOS0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAwOS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjA4LDcgKzIwOCw4IEBAIGF1dG8g
UHJvZ3JhbUV4ZWN1dGFibGU6OmVuc3VyZVRlbXBsYXRlT2IKICAgICByZXR1cm4gZW5zdXJlVGVt
cGxhdGVPYmplY3RNYXBJbXBsKG1fdGVtcGxhdGVPYmplY3RNYXApOwogfQogCi12b2lkIFByb2dy
YW1FeGVjdXRhYmxlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZp
c2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBQcm9ncmFtRXhlY3V0YWJs
ZTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewog
ICAgIFByb2dyYW1FeGVjdXRhYmxlKiB0aGlzT2JqZWN0ID0ganNDYXN0PFByb2dyYW1FeGVjdXRh
YmxlKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBp
bmZvKCkpOwpAQCAtMjIyLDQgKzIyMyw2IEBAIHZvaWQgUHJvZ3JhbUV4ZWN1dGFibGU6OnZpc2l0
Q2hpbGRyZW4oSlMKICAgICB9CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihQcm9ncmFtRXhl
Y3V0YWJsZSk7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvUHJvZ3JhbUV4ZWN1dGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9Qcm9ncmFtRXhlY3V0YWJsZS5oCShyZXZpc2lvbiAyNzI4MzAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9ncmFtRXhlY3V0YWJsZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOS0y
MDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAw
OS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtODEsNyArODEsNyBAQCBwcml2YXRlOgogCiAgICAgUHJvZ3JhbUV4
ZWN1dGFibGUoSlNHbG9iYWxPYmplY3QqLCBjb25zdCBTb3VyY2VDb2RlJik7CiAKLSAgICBzdGF0
aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFS
RV9WSVNJVF9DSElMRFJFTjsKIAogICAgIFdyaXRlQmFycmllcjxVbmxpbmtlZFByb2dyYW1Db2Rl
QmxvY2s+IG1fdW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrOwogICAgIFdyaXRlQmFycmllcjxFeGVj
dXRhYmxlVG9Db2RlQmxvY2tFZGdlPiBtX3Byb2dyYW1Db2RlQmxvY2s7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eU1hcEhhc2hUYWJsZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5TWFwSGFzaFRhYmxlLmgJ
KHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3Bl
cnR5TWFwSGFzaFRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
IENvcHlyaWdodCAoQykgMjAwNC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqICBDb3B5cmlnaHQgKEMpIDIwMDQtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMTMzLDcgKzEzMyw3IEBAIHB1YmxpYzoKIAog
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0Rlc3RydWN0aW9uID0gdHJ1ZTsKICAgICBz
dGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwog
CiAgICAgREVDTEFSRV9FWFBPUlRfSU5GTzsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvUHJvcGVydHlUYWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvUHJvcGVydHlUYWJsZS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5VGFibGUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTExOCw3ICsxMTgsOCBAQCB2b2lkIFByb3BlcnR5VGFibGU6OmZpbmlzaENyZWF0
aW9uKFZNJiB2CiAgICAgdm0uaGVhcC5yZXBvcnRFeHRyYU1lbW9yeUFsbG9jYXRlZChkYXRhU2l6
ZSgpKTsKIH0KIAotdm9pZCBQcm9wZXJ0eVRhYmxlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2Vs
bCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9p
ZCBQcm9wZXJ0eVRhYmxlOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3Im
IHZpc2l0b3IpCiB7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxQcm9wZXJ0eVRhYmxl
Kj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZv
KCkpOwpAQCAtMTI2LDYgKzEyNyw4IEBAIHZvaWQgUHJvcGVydHlUYWJsZTo6dmlzaXRDaGlsZHJl
bihKU0NlbGwKICAgICB2aXNpdG9yLnJlcG9ydEV4dHJhTWVtb3J5VmlzaXRlZCh0aGlzT2JqZWN0
LT5kYXRhU2l6ZSgpKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKFByb3BlcnR5VGFibGUp
OworCiB2b2lkIFByb3BlcnR5VGFibGU6OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQogewogICAgIHN0
YXRpY19jYXN0PFByb3BlcnR5VGFibGUqPihjZWxsKS0+UHJvcGVydHlUYWJsZTo6flByb3BlcnR5
VGFibGUoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3h5T2JqZWN0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm94eU9i
amVjdC5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1Byb3h5T2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTExNTgsNyArMTE1OCw4IEBA
IGJvb2wgUHJveHlPYmplY3Q6OmlzUmV2b2tlZCgpIGNvbnN0CiAgICAgcmV0dXJuIGhhbmRsZXIo
KS5pc051bGwoKTsKIH0KIAotdm9pZCBQcm94eU9iamVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwq
IGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4K
K3ZvaWQgUHJveHlPYmplY3Q6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRv
ciYgdmlzaXRvcikKIHsKICAgICBQcm94eU9iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxQcm94
eU9iamVjdCo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVj
dCwgaW5mbygpKTsKQEAgLTExNjgsNCArMTE2OSw2IEBAIHZvaWQgUHJveHlPYmplY3Q6OnZpc2l0
Q2hpbGRyZW4oSlNDZWxsKiAKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2hhbmRs
ZXIpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oUHJveHlPYmplY3QpOworCiB9IC8vIG5h
bWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3h5T2Jq
ZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJveHlP
YmplY3QuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvUHJveHlPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC05MSw3ICs5MSw3IEBAIHByaXZhdGU6CiAg
ICAgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCosIEpTR2xvYmFsT2Jq
ZWN0KiwgUHJvcGVydHlOYW1lQXJyYXkmLCBEb250RW51bVByb3BlcnRpZXNNb2RlKTsKICAgICBz
dGF0aWMgYm9vbCBzZXRQcm90b3R5cGUoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIEpTVmFs
dWUgcHJvdG90eXBlLCBib29sIHNob3VsZFRocm93SWZDYW50U2V0KTsKICAgICBzdGF0aWMgSlNW
YWx1ZSBnZXRQcm90b3R5cGUoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCopOwotICAgIHN0YXRp
YyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJF
X1ZJU0lUX0NISUxEUkVOOwogCiAgICAgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3RDb21tb24oSlNH
bG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwogICAgIGJvb2wgcGVy
Zm9ybUludGVybmFsTWV0aG9kR2V0T3duUHJvcGVydHkoSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0
eU5hbWUsIFByb3BlcnR5U2xvdCYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvUHJveHlSZXZva2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1Byb3h5UmV2b2tlLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvUHJveHlSZXZva2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCBSaWdodHMg
UmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCBSaWdo
dHMgUmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY5LDcgKzY5
LDggQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKHBlcmZvcm1Qcm94eVJldgogICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CiAKLXZvaWQgUHJveHlSZXZva2U6
OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBs
YXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFByb3h5UmV2b2tlOjp2aXNpdENoaWxkcmVuSW1w
bChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgUHJveHlSZXZva2UqIHRo
aXNPYmplY3QgPSBqc0Nhc3Q8UHJveHlSZXZva2UqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JK
RUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC03OCw0ICs3OSw2IEBAIHZvaWQg
UHJveHlSZXZva2U6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiAKICAgICB2aXNpdG9yLmFwcGVuZCh0
aGlzT2JqZWN0LT5tX3Byb3h5KTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKFByb3h5UmV2
b2tlKTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9Qcm94eVJldm9rZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1Byb3h5UmV2b2tlLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1Byb3h5UmV2b2tlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTkgQXBwbGUgSW5jLiBBbGwgUmln
aHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwg
UmlnaHRzIFJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01Miw3
ICs1Miw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwg
UHJveHlPYmplY3QqKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNs
b3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKICAgICBKU1ZhbHVlIHBy
b3h5KCkgeyByZXR1cm4gbV9wcm94eS5nZXQoKTsgfQogICAgIHZvaWQgc2V0UHJveHlUb051bGwo
Vk0mIHZtKSB7IHJldHVybiBtX3Byb3h5LnNldCh2bSwgdGhpcywganNOdWxsKCkpOyB9CiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENhY2hlZFJlc3VsdC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwQ2FjaGVk
UmVzdWx0LmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvUmVnRXhwQ2FjaGVkUmVzdWx0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMSw3ICsz
MSw4IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi12b2lkIFJlZ0V4cENhY2hlZFJlc3VsdDo6dmlz
aXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNp
dG9yPgordm9pZCBSZWdFeHBDYWNoZWRSZXN1bHQ6OnZpc2l0QWdncmVnYXRlSW1wbChWaXNpdG9y
JiB2aXNpdG9yKQogewogICAgIHZpc2l0b3IuYXBwZW5kKG1fbGFzdElucHV0KTsKICAgICB2aXNp
dG9yLmFwcGVuZChtX2xhc3RSZWdFeHApOwpAQCAtNDMsNiArNDQsOCBAQCB2b2lkIFJlZ0V4cENh
Y2hlZFJlc3VsdDo6dmlzaXRBZ2dyZWdhdGUoCiAgICAgfQogfQogCitERUZJTkVfVklTSVRfQUdH
UkVHQVRFKFJlZ0V4cENhY2hlZFJlc3VsdCk7CisKIEpTQXJyYXkqIFJlZ0V4cENhY2hlZFJlc3Vs
dDo6bGFzdFJlc3VsdChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU09iamVjdCogb3du
ZXIpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwQ2FjaGVkUmVzdWx0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwQ2FjaGVkUmVzdWx0LmgJKHJldmlz
aW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENhY2hl
ZFJlc3VsdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMiwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTItMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY1LDcgKzY1LDcgQEAgcHVibGljOgogICAg
ICAgICByZXR1cm4gbV9yZWlmaWVkID8gbV9yZWlmaWVkSW5wdXQuZ2V0KCkgOiBtX2xhc3RJbnB1
dC5nZXQoKTsKICAgICB9CiAKLSAgICB2b2lkIHZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJik7
CisgICAgREVDTEFSRV9WSVNJVF9BR0dSRUdBVEU7CiAKICAgICAvLyBtX2xhc3RSZWdFeHAgd291
bGQgYmUgbnVsbHB0ciB3aGVuIFJlZ0V4cENhY2hlZFJlc3VsdCBpcyBub3QgcmVpZmllZC4KICAg
ICAvLyBJZiB3ZSBmaW5kIG1fbGFzdFJlZ0V4cCBpcyBudWxscHRyLCBpdCBtZWFucyB0aGlzIHNo
b3VsZCBob2xkIHRoZSBlbXB0eSBSZWdFeHAuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9SZWdFeHBHbG9iYWxEYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9SZWdFeHBHbG9iYWxEYXRhLmNwcAkocmV2aXNpb24gMjcyODMwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwR2xvYmFsRGF0YS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE5IEFw
cGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOS0yMDIx
IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMzAsMTEgKzMwLDE0IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi12b2lkIFJl
Z0V4cEdsb2JhbERhdGE6OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVt
cGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgUmVnRXhwR2xvYmFsRGF0YTo6dmlzaXRBZ2dy
ZWdhdGVJbXBsKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgbV9jYWNoZWRSZXN1bHQudmlzaXRB
Z2dyZWdhdGUodmlzaXRvcik7CiB9CiAKK0RFRklORV9WSVNJVF9BR0dSRUdBVEUoUmVnRXhwR2xv
YmFsRGF0YSk7CisKIEpTVmFsdWUgUmVnRXhwR2xvYmFsRGF0YTo6Z2V0QmFja3JlZihKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCB1bnNpZ25lZCBpKQogewogICAgIFZNJiB2bSA9IGdsb2Jh
bE9iamVjdC0+dm0oKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4
cEdsb2JhbERhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9SZWdFeHBHbG9iYWxEYXRhLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1JlZ0V4cEdsb2JhbERhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgUmlnaHRz
IFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE5LTIwMjEgQXBwbGUgSW5jLiBBbGwgUmln
aHRzIFJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00MSw3ICs0
MSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldElucHV0KEpTR2xvYmFsT2JqZWN0KiwgSlNTdHJp
bmcqKTsKICAgICBKU1N0cmluZyogaW5wdXQoKSB7IHJldHVybiBtX2NhY2hlZFJlc3VsdC5pbnB1
dCgpOyB9CiAKLSAgICB2b2lkIHZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJik7CisgICAgREVD
TEFSRV9WSVNJVF9BR0dSRUdBVEU7CiAKICAgICBKU1ZhbHVlIGdldEJhY2tyZWYoSlNHbG9iYWxP
YmplY3QqLCB1bnNpZ25lZCk7CiAgICAgSlNWYWx1ZSBnZXRMYXN0UGFyZW4oSlNHbG9iYWxPYmpl
Y3QqKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE9iamVjdC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwT2Jq
ZWN0LmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvUmVnRXhwT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAg
KiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDAgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykK
LSAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAxOSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2
ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMjEgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJl
c2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwpAQCAtNDYsNyArNDYsOCBAQCB2b2lkIFJlZ0V4
cE9iamVjdDo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtCiAgICAgQVNTRVJUKHR5cGUoKSA9PSBSZWdF
eHBPYmplY3RUeXBlKTsKIH0KIAotdm9pZCBSZWdFeHBPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlND
ZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0
b3I+Cit2b2lkIFJlZ0V4cE9iamVjdDo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBW
aXNpdG9yJiB2aXNpdG9yKQogewogICAgIFJlZ0V4cE9iamVjdCogdGhpc09iamVjdCA9IGpzQ2Fz
dDxSZWdFeHBPYmplY3QqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRo
aXNPYmplY3QsIGluZm8oKSk7CkBAIC01NSw2ICs1Niw4IEBAIHZvaWQgUmVnRXhwT2JqZWN0Ojp2
aXNpdENoaWxkcmVuKEpTQ2VsbCoKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2xh
c3RJbmRleCk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihSZWdFeHBPYmplY3QpOworCiBi
b29sIFJlZ0V4cE9iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiBvYmplY3QsIEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFBy
b3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBPYmplY3QuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBPYmplY3QuaAkocmV2
aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwT2Jq
ZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogIENvcHlyaWdodCAo
QykgMTk5OS0yMDAwIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCi0gKiAgQ29weXJpZ2h0
IChDKSAyMDAzLTIwMTkgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogIENvcHly
aWdodCAoQykgMjAwMy0yMDIxIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAg
KiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIg
R2VuZXJhbCBQdWJsaWMKQEAgLTEzMyw3ICsxMzMsNyBAQCBwcml2YXRlOgogICAgIEpTX0VYUE9S
VF9QUklWQVRFIFJlZ0V4cE9iamVjdChWTSYsIFN0cnVjdHVyZSosIFJlZ0V4cCopOwogICAgIEpT
X0VYUE9SVF9QUklWQVRFIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKIAotICAgIHN0YXRpYyB2
b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJ
U0lUX0NISUxEUkVOOwogCiAgICAgYm9vbCBsYXN0SW5kZXhJc1dyaXRhYmxlKCkgY29uc3QKICAg
ICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TYW1wbGluZ1Byb2ZpbGVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TYW1wbGlu
Z1Byb2ZpbGVyLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY1Miw3ICs2
NTIsNyBAQCB2b2lkIFNhbXBsaW5nUHJvZmlsZXI6OnByb2Nlc3NVbnZlcmlmaWVkCiAgICAgbV91
bnByb2Nlc3NlZFN0YWNrVHJhY2VzLmNsZWFyKCk7CiB9CiAKLXZvaWQgU2FtcGxpbmdQcm9maWxl
cjo6dmlzaXQoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIFNhbXBsaW5nUHJvZmlsZXI6OnZp
c2l0KEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQo
bV9sb2NrLmlzTG9ja2VkKCkpOwogICAgIGZvciAoSlNDZWxsKiBjZWxsIDogbV9saXZlQ2VsbFBv
aW50ZXJzKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2FtcGxpbmdQcm9m
aWxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NhbXBs
aW5nUHJvZmlsZXIuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE3MSw3ICsxNzEsNyBA
QCBwdWJsaWM6CiAgICAgdm9pZCBub3RpY2VKU0xvY2tBY3F1aXNpdGlvbigpOwogICAgIHZvaWQg
bm90aWNlVk1FbnRyeSgpOwogICAgIHZvaWQgc2h1dGRvd24oKTsKLSAgICB2b2lkIHZpc2l0KFNs
b3RWaXNpdG9yJik7CisgICAgdm9pZCB2aXNpdChBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAgICAg
TG9jayYgZ2V0TG9jaygpIHsgcmV0dXJuIG1fbG9jazsgfQogICAgIHZvaWQgc2V0VGltaW5nSW50
ZXJ2YWwoU2Vjb25kcyBpbnRlcnZhbCkgeyBtX3RpbWluZ0ludGVydmFsID0gaW50ZXJ2YWw7IH0K
ICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHN0YXJ0KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TY29wZWRBcmd1bWVudHMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlZEFyZ3VtZW50cy5jcHAJKHJldmlzaW9uIDI3
MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlZEFyZ3VtZW50cy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDE1LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE1LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC05OCw3ICs5OCw4IEBAIFNjb3BlZEFyZ3VtZW50cyogU2Nv
cGVkQXJndW1lbnRzOjpjcmVhdGUKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi12b2lkIFNjb3Bl
ZEFyZ3VtZW50czo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNp
dG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgU2NvcGVkQXJndW1lbnRzOjp2
aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAg
U2NvcGVkQXJndW1lbnRzKiB0aGlzT2JqZWN0ID0gc3RhdGljX2Nhc3Q8U2NvcGVkQXJndW1lbnRz
Kj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZv
KCkpOwpAQCAtMTE1LDYgKzExNiw4IEBAIHZvaWQgU2NvcGVkQXJndW1lbnRzOjp2aXNpdENoaWxk
cmVuKEpTQ2UKICAgICB9CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihTY29wZWRBcmd1bWVu
dHMpOworCiBTdHJ1Y3R1cmUqIFNjb3BlZEFyZ3VtZW50czo6Y3JlYXRlU3RydWN0dXJlKFZNJiB2
bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCiB7CiAg
ICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwg
VHlwZUluZm8oU2NvcGVkQXJndW1lbnRzVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVkQXJndW1lbnRzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVkQXJndW1lbnRz
LmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Nj
b3BlZEFyZ3VtZW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxNS0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjMsOSArNjMsOSBAQCBwdWJsaWM6
CiAgICAgCiAgICAgLy8gQ3JlYXRlcyBhbiBhcmd1bWVudHMgb2JqZWN0IGJ5IGNvcHlpbmcgdGhl
IGFyZ3VtZW50cyBmcm9tIGEgd2VsbC1kZWZpbmVkIHN0YWNrIGxvY2F0aW9uLgogICAgIHN0YXRp
YyBTY29wZWRBcmd1bWVudHMqIGNyZWF0ZUJ5Q29weWluZ0Zyb20oVk0mLCBTdHJ1Y3R1cmUqLCBS
ZWdpc3RlciogYXJndW1lbnRzU3RhcnQsIHVuc2lnbmVkIHRvdGFsTGVuZ3RoLCBKU0Z1bmN0aW9u
KiBjYWxsZWUsIFNjb3BlZEFyZ3VtZW50c1RhYmxlKiwgSlNMZXhpY2FsRW52aXJvbm1lbnQqKTsK
LSAgICAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9y
Jik7Ci0gICAgCisKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOworCiAgICAgdWludDMyX3Qg
aW50ZXJuYWxMZW5ndGgoKSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJuIG1fdG90YWxMZW5n
dGg7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TaW1wbGVUeXBlZEFycmF5
Q29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDEzLCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjIsNyArNjIsNyBAQCBib29sIFNpbXBsZVR5cGVkQXJy
YXlDb250cm9sbGVyOjppc0F0b21pCiAgICAgcmV0dXJuIG1fYWxsb3dBdG9taWNzV2FpdDsKIH0K
IAotYm9vbCBTaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlcjo6SlNBcnJheUJ1ZmZlck93bmVyOjpp
c1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRs
ZSwgdm9pZCosIEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24p
Citib29sIFNpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyOjpKU0FycmF5QnVmZmVyT3duZXI6Omlz
UmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxl
LCB2b2lkKiwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiog
cmVhc29uKQogewogICAgIGlmIChVTkxJS0VMWShyZWFzb24pKQogICAgICAgICAqcmVhc29uID0g
IkpTQXJyYXlCdWZmZXIgaXMgb3BhcXVlIHJvb3QiOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlci5o
CShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TaW1w
bGVUeXBlZEFycmF5Q29udHJvbGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU4LDcgKzU4LDcgQEAgcHVi
bGljOgogcHJpdmF0ZToKICAgICBjbGFzcyBKU0FycmF5QnVmZmVyT3duZXIgZmluYWwgOiBwdWJs
aWMgV2Vha0hhbmRsZU93bmVyIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIGJvb2wgaXNSZWFjaGFi
bGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4
dCwgU2xvdFZpc2l0b3ImLCBjb25zdCBjaGFyKiogcmVhc29uKSBmaW5hbDsKKyAgICAgICAgYm9v
bCBpc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2
b2lkKiBjb250ZXh0LCBBYnN0cmFjdFNsb3RWaXNpdG9yJiwgY29uc3QgY2hhcioqIHJlYXNvbikg
ZmluYWw7CiAgICAgICAgIHZvaWQgZmluYWxpemUoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwg
dm9pZCogY29udGV4dCkgZmluYWw7CiAgICAgfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvU21hbGxTdHJpbmdzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TbWFsbFN0cmluZ3MuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TbWFsbFN0cmluZ3MuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAxMCBBcHBs
ZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAyMSBB
cHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTY2LDcgKzY2LDcgQEAgdm9pZCBTbWFsbFN0cmluZ3M6OmluaXRpYWxpemVDb21t
b25TdHJpbgogICAgIHNldElzSW5pdGlhbGl6ZWQodHJ1ZSk7CiB9CiAKLXZvaWQgU21hbGxTdHJp
bmdzOjp2aXNpdFN0cm9uZ1JlZmVyZW5jZXMoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIFNt
YWxsU3RyaW5nczo6dmlzaXRTdHJvbmdSZWZlcmVuY2VzKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZp
c2l0b3IpCiB7CiAgICAgbV9uZWVkc1RvQmVWaXNpdGVkID0gZmFsc2U7CiAgICAgdmlzaXRvci5h
cHBlbmRVbmJhcnJpZXJlZChtX2VtcHR5U3RyaW5nKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1NtYWxsU3RyaW5ncy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1NtYWxsU3RyaW5ncy5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TbWFsbFN0cmluZ3MuaAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxOSBBcHBsZSBJbmMu
IEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAyMSBBcHBsZSBJ
bmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTQ5LDkgKzQ5LDkgQEAgY2xhc3MgU3RyaW5nSW1wbDsKIAogbmFtZXNwYWNlIEpTQyB7CiAK
K2NsYXNzIEFic3RyYWN0U2xvdFZpc2l0b3I7CiBjbGFzcyBWTTsKIGNsYXNzIEpTU3RyaW5nOwot
Y2xhc3MgU2xvdFZpc2l0b3I7CiAKIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbWF4U2luZ2xl
Q2hhcmFjdGVyU3RyaW5nID0gMHhGRjsKIApAQCAtNzgsNyArNzgsNyBAQCBwdWJsaWM6CiAgICAg
SlNTdHJpbmcqKiBzaW5nbGVDaGFyYWN0ZXJTdHJpbmdzKCkgeyByZXR1cm4gJm1fc2luZ2xlQ2hh
cmFjdGVyU3RyaW5nc1swXTsgfQogCiAgICAgdm9pZCBpbml0aWFsaXplQ29tbW9uU3RyaW5ncyhW
TSYpOwotICAgIHZvaWQgdmlzaXRTdHJvbmdSZWZlcmVuY2VzKFNsb3RWaXNpdG9yJik7CisgICAg
dm9pZCB2aXNpdFN0cm9uZ1JlZmVyZW5jZXMoQWJzdHJhY3RTbG90VmlzaXRvciYpOwogCiAjZGVm
aW5lIEpTQ19DT01NT05fU1RSSU5HU19BQ0NFU1NPUl9ERUZJTklUSU9OKG5hbWUpIFwKICAgICBK
U1N0cmluZyogbmFtZSMjU3RyaW5nKCkgY29uc3QgICAgICAgICAgICAgICAgICAgXApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3BhcnNlQXJyYXlWYWx1ZU1hcC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3BhcnNlQXJyYXlWYWx1
ZU1hcC5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1NwYXJzZUFycmF5VmFsdWVNYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjEwLDcgKzIx
MCw4IEBAIEpTVmFsdWUgU3BhcnNlQXJyYXlFbnRyeTo6Z2V0Tm9uU3BhcnNlTW8KICAgICByZXR1
cm4gQmFzZTo6Z2V0KCk7CiB9CiAKLXZvaWQgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6dmlzaXRDaGls
ZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5h
bWUgVmlzaXRvcj4KK3ZvaWQgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6dmlzaXRDaGlsZHJlbkltcGwo
SlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFNwYXJzZUFycmF5VmFsdWVN
YXAqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8U3BhcnNlQXJyYXlWYWx1ZU1hcCo+KGNlbGwpOwogICAg
IEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTIyMyw1
ICsyMjQsNyBAQCB2b2lkIFNwYXJzZUFycmF5VmFsdWVNYXA6OnZpc2l0Q2hpbGRyZW4oCiAgICAg
dmlzaXRvci5yZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQodGhpc09iamVjdC0+bV9yZXBvcnRlZENh
cGFjaXR5ICogc2l6ZW9mKE1hcDo6S2V5VmFsdWVQYWlyVHlwZSkpOwogfQogCitERUZJTkVfVklT
SVRfQ0hJTERSRU4oU3BhcnNlQXJyYXlWYWx1ZU1hcCk7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TcGFyc2VBcnJheVZhbHVlTWFw
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3BhcnNlQXJy
YXlWYWx1ZU1hcC5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TcGFyc2VBcnJheVZhbHVlTWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMTUsNyAr
MTE1LDcgQEAgcHVibGljOgogICAgIAogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVj
dHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBwcm90b3R5cGUpOwogCi0gICAgc3Rh
dGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xB
UkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBib29sIHNwYXJzZU1vZGUoKQogICAgIHsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0YWNrRnJhbWUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0YWNrRnJhbWUuY3BwCShyZXZpc2lv
biAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdGFja0ZyYW1lLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTYtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTE0MSwxMyArMTQxLDUgQEAgU3RyaW5nIFN0YWNrRnJhbWU6
OnRvU3RyaW5nKFZNJiB2bSkgY29ucwogICAgIHJldHVybiB0cmFjZUJ1aWxkLnRvU3RyaW5nKCku
aW1wbCgpOwogfQogCi12b2lkIFN0YWNrRnJhbWU6OnZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3Im
IHZpc2l0b3IpCi17Ci0gICAgaWYgKG1fY2FsbGVlKQotICAgICAgICB2aXNpdG9yLmFwcGVuZCht
X2NhbGxlZSk7Ci0gICAgaWYgKG1fY29kZUJsb2NrKQotICAgICAgICB2aXNpdG9yLmFwcGVuZCht
X2NvZGVCbG9jayk7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIEpTQwogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TdGFja0ZyYW1lLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RhY2tGcmFtZS5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdGFja0ZyYW1lLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC0yNiw2ICsyNiw3IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkhlYXAuaCIKKyNp
bmNsdWRlICJTbG90VmlzaXRvck1hY3Jvcy5oIgogI2luY2x1ZGUgIlZNLmgiCiAjaW5jbHVkZSAi
V2FzbUluZGV4T3JOYW1lLmgiCiAjaW5jbHVkZSAiV3JpdGVCYXJyaWVyLmgiCkBAIC0zNSw3ICsz
Niw2IEBAIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBDb2RlQmxvY2s7CiBjbGFzcyBKU09iamVj
dDsKLWNsYXNzIFNsb3RWaXNpdG9yOwogCiBjbGFzcyBTdGFja0ZyYW1lIHsKIHB1YmxpYzoKQEAg
LTU3LDggKzU3LDE2IEBAIHB1YmxpYzoKICAgICAgICAgQVNTRVJUKGhhc0J5dGVjb2RlSW5kZXgo
KSk7CiAgICAgICAgIHJldHVybiBtX2J5dGVjb2RlSW5kZXg7CiAgICAgfQotICAgIAotICAgIHZv
aWQgdmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYpOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
VmlzaXRvcj4KKyAgICB2b2lkIHZpc2l0Q2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKKyAgICB7
CisgICAgICAgIGlmIChtX2NhbGxlZSkKKyAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kKG1fY2Fs
bGVlKTsKKyAgICAgICAgaWYgKG1fY29kZUJsb2NrKQorICAgICAgICAgICAgdmlzaXRvci5hcHBl
bmQobV9jb2RlQmxvY2spOworICAgIH0KKwogICAgIGJvb2wgaXNNYXJrZWQoVk0mIHZtKSBjb25z
dCB7IHJldHVybiAoIW1fY2FsbGVlIHx8IHZtLmhlYXAuaXNNYXJrZWQobV9jYWxsZWUuZ2V0KCkp
KSAmJiAoIW1fY29kZUJsb2NrIHx8IHZtLmhlYXAuaXNNYXJrZWQobV9jb2RlQmxvY2suZ2V0KCkp
KTsgfQogCiBwcml2YXRlOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3Ry
dWN0dXJlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
dHJ1Y3R1cmUuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TdHJ1Y3R1cmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAwOC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAyMCBBbGV4ZXkgU2h2YXlrYSA8c2h2YWlrYWxlc2hA
Z21haWwuY29tPi4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTEyNjgsNyArMTI2OCw4IEBAIHZvaWQg
U3RydWN0dXJlOjpkaWRUcmFuc2l0aW9uRnJvbVRoaXNTdHIKICAgICAgICAgbV90cmFuc2l0aW9u
V2F0Y2hwb2ludFNldC5maXJlQWxsKHZtKCksIFN0cnVjdHVyZUZpcmVEZXRhaWwodGhpcykpOwog
fQogCi12b2lkIFN0cnVjdHVyZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNp
dG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgU3RydWN0dXJl
Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAg
ICAgU3RydWN0dXJlKiB0aGlzT2JqZWN0ID0ganNDYXN0PFN0cnVjdHVyZSo+KGNlbGwpOwogICAg
IEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTEyOTAs
MzIgKzEyOTEsMzggQEAgdm9pZCBTdHJ1Y3R1cmU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZQog
ICAgICAgICAvLyBOT1RFOiBUaGlzIGNhbiBpbnRlcmxlYXZlIGluIHBpbigpLCBpbiB3aGljaCBj
YXNlIGl0IG1heSBzZWUgYSBudWxsIHByb3BlcnR5IHRhYmxlLgogICAgICAgICAvLyBUaGF0J3Mg
ZmluZSwgYmVjYXVzZSB0aGVuIHRoZSBiYXJyaWVyIHdpbGwgZmlyZSBhbmQgd2Ugd2lsbCBzY2Fu
IHRoaXMgYWdhaW4uCiAgICAgICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fcHJvcGVy
dHlUYWJsZVVuc2FmZSk7Ci0gICAgfSBlbHNlIGlmICh2aXNpdG9yLmlzQW5hbHl6aW5nSGVhcCgp
KQorICAgIH0gZWxzZSBpZiAodmlzaXRvci52bSgpLmlzQW5hbHl6aW5nSGVhcCgpKQogICAgICAg
ICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX3Byb3BlcnR5VGFibGVVbnNhZmUpOwogICAg
IGVsc2UgaWYgKHRoaXNPYmplY3QtPm1fcHJvcGVydHlUYWJsZVVuc2FmZSkKICAgICAgICAgdGhp
c09iamVjdC0+bV9wcm9wZXJ0eVRhYmxlVW5zYWZlLmNsZWFyKCk7CiB9CiAKLWJvb2wgU3RydWN0
dXJlOjppc0NoZWFwRHVyaW5nR0MoVk0mIHZtKQorREVGSU5FX1ZJU0lUX0NISUxEUkVOKFN0cnVj
dHVyZSk7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Citib29sIFN0cnVjdHVyZTo6aXND
aGVhcER1cmluZ0dDKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgLy8gRklYTUU6IFdlIGNvdWxk
IG1ha2UgdGhpcyBldmVuIHNhZmVyIGJ5IHJldHVybmluZyBmYWxzZSBpZiB0aGlzIHN0cnVjdHVy
ZSdzIHByb3BlcnR5IHRhYmxlCiAgICAgLy8gaGFzIGFueSBsYXJnZSBwcm9wZXJ0eSBuYW1lcy4K
ICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU3MzM0CiAg
ICAgCi0gICAgcmV0dXJuICghbV9nbG9iYWxPYmplY3QgfHwgdm0uaGVhcC5pc01hcmtlZChtX2ds
b2JhbE9iamVjdC5nZXQoKSkpCi0gICAgICAgICYmIChoYXNQb2x5UHJvdG8oKSB8fCAhc3RvcmVk
UHJvdG90eXBlT2JqZWN0KCkgfHwgdm0uaGVhcC5pc01hcmtlZChzdG9yZWRQcm90b3R5cGVPYmpl
Y3QoKSkpOworICAgIHJldHVybiAoIW1fZ2xvYmFsT2JqZWN0IHx8IHZpc2l0b3IuaXNNYXJrZWQo
bV9nbG9iYWxPYmplY3QuZ2V0KCkpKQorICAgICAgICAmJiAoaGFzUG9seVByb3RvKCkgfHwgIXN0
b3JlZFByb3RvdHlwZU9iamVjdCgpIHx8IHZpc2l0b3IuaXNNYXJrZWQoc3RvcmVkUHJvdG90eXBl
T2JqZWN0KCkpKTsKIH0KIAotYm9vbCBTdHJ1Y3R1cmU6Om1hcmtJZkNoZWFwKFNsb3RWaXNpdG9y
JiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK2Jvb2wgU3RydWN0dXJlOjpt
YXJrSWZDaGVhcChWaXNpdG9yJiB2aXNpdG9yKQogewotICAgIFZNJiB2bSA9IHZpc2l0b3Iudm0o
KTsKLSAgICBpZiAoIWlzQ2hlYXBEdXJpbmdHQyh2bSkpCi0gICAgICAgIHJldHVybiB2bS5oZWFw
LmlzTWFya2VkKHRoaXMpOwotICAgIAorICAgIGlmICghaXNDaGVhcER1cmluZ0dDKHZpc2l0b3Ip
KQorICAgICAgICByZXR1cm4gdmlzaXRvci5pc01hcmtlZCh0aGlzKTsKKwogICAgIHZpc2l0b3Iu
YXBwZW5kVW5iYXJyaWVyZWQodGhpcyk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK3RlbXBsYXRl
IGJvb2wgU3RydWN0dXJlOjptYXJrSWZDaGVhcChTbG90VmlzaXRvciYpOwordGVtcGxhdGUgYm9v
bCBTdHJ1Y3R1cmU6Om1hcmtJZkNoZWFwKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKKwogUmVmPFN0
cnVjdHVyZVNoYXBlPiBTdHJ1Y3R1cmU6OnRvU3RydWN0dXJlU2hhcGUoSlNWYWx1ZSB2YWx1ZSwg
Ym9vbCYgc2F3UG9seVByb3RvU3RydWN0dXJlKQogewogICAgIFJlZjxTdHJ1Y3R1cmVTaGFwZT4g
YmFzZVNoYXBlID0gU3RydWN0dXJlU2hhcGU6OmNyZWF0ZSgpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOC0yMDIwIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
NjAsNyArNjAsNiBAQCBjbGFzcyBQcm9wZXJ0eU5hbWVBcnJheURhdGE7CiBjbGFzcyBQcm9wZXJ0
eVRhYmxlOwogY2xhc3MgU3RydWN0dXJlQ2hhaW47CiBjbGFzcyBTdHJ1Y3R1cmVTaGFwZTsKLWNs
YXNzIFNsb3RWaXNpdG9yOwogY2xhc3MgSlNTdHJpbmc7CiBzdHJ1Y3QgRHVtcENvbnRleHQ7CiBz
dHJ1Y3QgSGFzaFRhYmxlOwpAQCAtMzEwLDcgKzMwOSw3IEBAIHB1YmxpYzoKICAgICBKU1ZhbHVl
IHByb3RvdHlwZUZvckxvb2t1cChKU0dsb2JhbE9iamVjdCosIEpTQ2VsbCogYmFzZSkgY29uc3Q7
CiAgICAgU3RydWN0dXJlQ2hhaW4qIHByb3RvdHlwZUNoYWluKFZNJiwgSlNHbG9iYWxPYmplY3Qq
LCBKU09iamVjdCogYmFzZSkgY29uc3Q7CiAgICAgU3RydWN0dXJlQ2hhaW4qIHByb3RvdHlwZUNo
YWluKEpTR2xvYmFsT2JqZWN0KiwgSlNPYmplY3QqIGJhc2UpIGNvbnN0OwotICAgIHN0YXRpYyB2
b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJ
U0lUX0NISUxEUkVOOwogICAgIAogICAgIC8vIEEgU3RydWN0dXJlIGlzIGNoZWFwIHRvIG1hcmsg
ZHVyaW5nIEdDIGlmIGRvaW5nIHNvIHdvdWxkIG9ubHkgYWRkIGEgc21hbGwgYW5kIGJvdW5kZWQg
YW1vdW50CiAgICAgLy8gdG8gb3VyIGhlYXAgZm9vdHByaW50LiBGb3IgZXhhbXBsZSwgaWYgdGhl
IHN0cnVjdHVyZSByZWZlcnMgdG8gYSBnbG9iYWwgb2JqZWN0IHRoYXQgaXMgbm90CkBAIC0zMTgs
MTAgKzMxNywxMCBAQCBwdWJsaWM6CiAgICAgLy8gaW5jcmVhc2UgaW4gZm9vdHByaW50IGJlY2F1
c2Ugbm8gb3RoZXIgb2JqZWN0IHJlZmVycyB0byB0aGF0IGdsb2JhbCBvYmplY3QuIFRoaXMgbWV0
aG9kCiAgICAgLy8gcmV0dXJucyB0cnVlIGlmIGFsbCB1c2VyLWNvbnRyb2xsZWQgKGFuZCBoZW5j
ZSB1bmJvdW5kZWQgaW4gc2l6ZSkgb2JqZWN0cyByZWZlcmVuY2VkIGZyb20gdGhlCiAgICAgLy8g
U3RydWN0dXJlIGFyZSBhbHJlYWR5IG1hcmtlZC4KLSAgICBib29sIGlzQ2hlYXBEdXJpbmdHQyhW
TSYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IGJvb2wgaXNDaGVhcER1cmluZ0dD
KFZpc2l0b3ImKTsKICAgICAKICAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhpcyBzdHJ1Y3R1cmUg
aXMgbm93IG1hcmtlZC4KLSAgICBib29sIG1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJik7CisgICAg
dGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gYm9vbCBtYXJrSWZDaGVhcChWaXNpdG9yJik7CiAg
ICAgCiAgICAgYm9vbCBoYXNSYXJlRGF0YSgpIGNvbnN0CiAgICAgewpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlQ2hhaW4uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUNoYWluLmNwcAkocmV2aXNpb24g
MjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlQ2hhaW4u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDgtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTY2LDcgKzY2LDggQEAgdm9pZCBTdHJ1Y3R1cmVDaGFpbjo6Zmlu
aXNoQ3JlYXRpb24oVk0mIAogICAgIH0KIH0KIAotdm9pZCBTdHJ1Y3R1cmVDaGFpbjo6dmlzaXRD
aGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlw
ZW5hbWUgVmlzaXRvcj4KK3ZvaWQgU3RydWN0dXJlQ2hhaW46OnZpc2l0Q2hpbGRyZW5JbXBsKEpT
Q2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBTdHJ1Y3R1cmVDaGFpbiogdGhp
c09iamVjdCA9IGpzQ2FzdDxTdHJ1Y3R1cmVDaGFpbio+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19P
QkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTgwLDQgKzgxLDYgQEAgdm9p
ZCBTdHJ1Y3R1cmVDaGFpbjo6dmlzaXRDaGlsZHJlbihKU0NlbAogICAgIH0KIH0KIAorREVGSU5F
X1ZJU0lUX0NISUxEUkVOKFN0cnVjdHVyZUNoYWluKTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVDaGFpbi5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUNoYWluLmgJ
KHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVj
dHVyZUNoYWluLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDA4LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDA4LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01MSw3ICs1MSw3IEBAIHB1YmxpYzoKIAog
ICAgIHN0YXRpYyBTdHJ1Y3R1cmVDaGFpbiogY3JlYXRlKFZNJiwgSlNPYmplY3QqKTsKICAgICBT
dHJ1Y3R1cmVJRCogaGVhZCgpIHsgcmV0dXJuIG1fdmVjdG9yLmdldCgpOyB9Ci0gICAgc3RhdGlj
IHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVf
VklTSVRfQ0hJTERSRU47CiAKICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUo
Vk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkK
ICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVSYXJl
RGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3Ry
dWN0dXJlUmFyZURhdGEuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TdHJ1Y3R1cmVSYXJlRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjAgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02
Nyw3ICs2Nyw4IEBAIFN0cnVjdHVyZVJhcmVEYXRhOjpTdHJ1Y3R1cmVSYXJlRGF0YShWTSYKICAg
ICAgICAgbV9wcmV2aW91cy5zZXQodm0sIHRoaXMsIHByZXZpb3VzKTsKIH0KIAotdm9pZCBTdHJ1
Y3R1cmVSYXJlRGF0YTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgU3RydWN0dXJlUmFyZURh
dGE6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsK
ICAgICBTdHJ1Y3R1cmVSYXJlRGF0YSogdGhpc09iamVjdCA9IGpzQ2FzdDxTdHJ1Y3R1cmVSYXJl
RGF0YSo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwg
aW5mbygpKTsKQEAgLTg2LDYgKzg3LDggQEAgdm9pZCBTdHJ1Y3R1cmVSYXJlRGF0YTo6dmlzaXRD
aGlsZHJlbihKUwogICAgIH0KIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKFN0cnVjdHVyZVJh
cmVEYXRhKTsKKwogLy8gLS0tLS0tLS0tLS0gQ2FjaGVkIHNwZWNpYWwgcHJvcGVydGllcyBoZWxw
ZXIgd2F0Y2hwb2ludCBjbGFzc2VzIC0tLS0tLS0tLS0tCiAKIGNsYXNzIENhY2hlZFNwZWNpYWxQ
cm9wZXJ0eUFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludCBmaW5hbCA6IHB1
YmxpYyBBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnRCYXNlIHsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZVJhcmVEYXRhLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlUmFyZURhdGEu
aAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3Ry
dWN0dXJlUmFyZURhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY4LDcgKzY4LDcgQEAgcHVibGlj
OgogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0Rlc3RydWN0aW9uID0gdHJ1ZTsKICAg
ICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRD
aGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERS
RU47CiAKICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2Jh
bE9iamVjdCosIEpTVmFsdWUgcHJvdG90eXBlKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvU3ltYm9sVGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1N5bWJvbFRhYmxlLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFibGUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE5IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDIxIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtOTIsNyArOTIsOCBAQCB2b2lkIFN5bWJvbFRhYmxlOjpmaW5pc2hDcmVhdGlvbihWTSYg
dm0pCiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwogfQogCi12b2lkIFN5bWJvbFRhYmxl
Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogdGhpc0NlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQor
dGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgU3ltYm9sVGFibGU6OnZpc2l0Q2hpbGRy
ZW5JbXBsKEpTQ2VsbCogdGhpc0NlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgU3ltYm9s
VGFibGUqIHRoaXNTeW1ib2xUYWJsZSA9IGpzQ2FzdDxTeW1ib2xUYWJsZSo+KHRoaXNDZWxsKTsK
ICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNTeW1ib2xUYWJsZSwgaW5mbygpKTsK
QEAgLTEwOCw2ICsxMDksOCBAQCB2b2lkIFN5bWJvbFRhYmxlOjp2aXNpdENoaWxkcmVuKEpTQ2Vs
bCogCiAgICAgdGhpc1N5bWJvbFRhYmxlLT5tX2xvY2FsVG9FbnRyeSA9IG51bGxwdHI7CiB9CiAK
K0RFRklORV9WSVNJVF9DSElMRFJFTihTeW1ib2xUYWJsZSk7CisKIGNvbnN0IFN5bWJvbFRhYmxl
OjpMb2NhbFRvRW50cnlWZWMmIFN5bWJvbFRhYmxlOjpsb2NhbFRvRW50cnkoY29uc3QgQ29uY3Vy
cmVudEpTTG9ja2VyJikKIHsKICAgICBpZiAoVU5MSUtFTFkoIW1fbG9jYWxUb0VudHJ5KSkgewpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFibGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TeW1ib2xUYWJsZS5oCShyZXZp
c2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TeW1ib2xUYWJs
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwNy0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAwNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNzMzLDcgKzczMyw3IEBAIHB1YmxpYzoKICAgICAgICAg
bV9zaW5nbGV0b24ubm90aWZ5V3JpdGUodm0sIHRoaXMsIHNjb3BlLCByZWFzb24pOwogICAgIH0K
IAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsK
KyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgREVDTEFSRV9FWFBPUlRfSU5GTzsK
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZVByb2ZpbGVyTG9nLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlUHJvZmls
ZXJMb2cuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9UeXBlUHJvZmlsZXJMb2cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTI0LDcgKzEyNCw3
IEBAIHZvaWQgVHlwZVByb2ZpbGVyTG9nOjpwcm9jZXNzTG9nRW50cmllcygKICAgICB9CiB9CiAK
LXZvaWQgVHlwZVByb2ZpbGVyTG9nOjp2aXNpdChTbG90VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQg
VHlwZVByb2ZpbGVyTG9nOjp2aXNpdChBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewog
ICAgIGZvciAoTG9nRW50cnkqIGVudHJ5ID0gbV9sb2dTdGFydFB0cjsgZW50cnkgIT0gbV9jdXJy
ZW50TG9nRW50cnlQdHI7ICsrZW50cnkpIHsKICAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJp
ZXJlZChlbnRyeS0+dmFsdWUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
VHlwZVByb2ZpbGVyTG9nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvVHlwZVByb2ZpbGVyTG9nLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1R5cGVQcm9maWxlckxvZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU5LDcg
KzU5LDcgQEAgcHVibGljOgogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgcHJvY2Vzc0xvZ0Vu
dHJpZXMoVk0mLCBjb25zdCBTdHJpbmcmKTsKICAgICBMb2dFbnRyeSogbG9nRW5kUHRyKCkgY29u
c3QgeyByZXR1cm4gbV9sb2dFbmRQdHI7IH0KIAotICAgIHZvaWQgdmlzaXQoU2xvdFZpc2l0b3Im
KTsKKyAgICB2b2lkIHZpc2l0KEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKIAogICAgIHN0YXRpYyBw
dHJkaWZmX3QgbG9nU3RhcnRPZmZzZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoVHlwZVBy
b2ZpbGVyTG9nLCBtX2xvZ1N0YXJ0UHRyKTsgfQogICAgIHN0YXRpYyBwdHJkaWZmX3QgY3VycmVu
dExvZ0VudHJ5T2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFR5cGVQcm9maWxlckxv
ZywgbV9jdXJyZW50TG9nRW50cnlQdHIpOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9WTS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1ZNLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1ZNLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDA4LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDA4LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMjEsNiArMTIxLDcgQEAgY2xhc3MgRmFzdE1hbGxv
Y0FsaWduZWRNZW1vcnlBbGxvY2F0b3I7CiBjbGFzcyBHaWdhY2FnZUFsaWduZWRNZW1vcnlBbGxv
Y2F0b3I7CiBjbGFzcyBIYW5kbGVTdGFjazsKIGNsYXNzIEhhc093blByb3BlcnR5Q2FjaGU7Citj
bGFzcyBIZWFwQW5hbHl6ZXI7CiBjbGFzcyBIZWFwUHJvZmlsZXI7CiBjbGFzcyBJZGVudGlmaWVy
OwogY2xhc3MgSW50ZXJwcmV0ZXI7CkBAIC0zMTAsNiArMzExLDEwIEBAIHB1YmxpYzoKICAgICBI
ZWFwUHJvZmlsZXIqIGhlYXBQcm9maWxlcigpIGNvbnN0IHsgcmV0dXJuIG1faGVhcFByb2ZpbGVy
LmdldCgpOyB9CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgSGVhcFByb2ZpbGVyJiBlbnN1cmVIZWFw
UHJvZmlsZXIoKTsKIAorICAgIGJvb2wgaXNBbmFseXppbmdIZWFwKCkgY29uc3QgeyByZXR1cm4g
bV9hY3RpdmVIZWFwQW5hbHl6ZXI7IH0KKyAgICBIZWFwQW5hbHl6ZXIqIGFjdGl2ZUhlYXBBbmFs
eXplcigpIGNvbnN0IHsgcmV0dXJuIG1fYWN0aXZlSGVhcEFuYWx5emVyOyB9CisgICAgdm9pZCBz
ZXRBY3RpdmVIZWFwQW5hbHl6ZXIoSGVhcEFuYWx5emVyKiBhbmFseXplcikgeyBtX2FjdGl2ZUhl
YXBBbmFseXplciA9IGFuYWx5emVyOyB9CisKICNpZiBFTkFCTEUoU0FNUExJTkdfUFJPRklMRVIp
CiAgICAgU2FtcGxpbmdQcm9maWxlciogc2FtcGxpbmdQcm9maWxlcigpIHsgcmV0dXJuIG1fc2Ft
cGxpbmdQcm9maWxlci5nZXQoKTsgfQogICAgIEpTX0VYUE9SVF9QUklWQVRFIFNhbXBsaW5nUHJv
ZmlsZXImIGVuc3VyZVNhbXBsaW5nUHJvZmlsZXIoUmVmPFN0b3B3YXRjaD4mJik7CkBAIC0xMTk1
LDkgKzEyMDAsMTAgQEAgcHVibGljOgogICAgIGJvb2wgZGlkRW50ZXJWTSB7IGZhbHNlIH07CiBw
cml2YXRlOgogICAgIGJvb2wgbV9mYWlsTmV4dE5ld0NvZGVCbG9jayB7IGZhbHNlIH07Ci0gICAg
RGVsZXRlUHJvcGVydHlNb2RlIG1fZGVsZXRlUHJvcGVydHlNb2RlIHsgRGVsZXRlUHJvcGVydHlN
b2RlOjpEZWZhdWx0IH07CiAgICAgYm9vbCBtX2dsb2JhbENvbnN0UmVkZWNsYXJhdGlvblNob3Vs
ZFRocm93IHsgdHJ1ZSB9OwogICAgIGJvb2wgbV9zaG91bGRCdWlsZFBDVG9Db2RlT3JpZ2luTWFw
cGluZyB7IGZhbHNlIH07CisgICAgRGVsZXRlUHJvcGVydHlNb2RlIG1fZGVsZXRlUHJvcGVydHlN
b2RlIHsgRGVsZXRlUHJvcGVydHlNb2RlOjpEZWZhdWx0IH07CisgICAgSGVhcEFuYWx5emVyKiBt
X2FjdGl2ZUhlYXBBbmFseXplciB7IG51bGxwdHIgfTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q29k
ZUNhY2hlPiBtX2NvZGVDYWNoZTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SW50bENhY2hlPiBtX2lu
dGxDYWNoZTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8QnVpbHRpbkV4ZWN1dGFibGVzPiBtX2J1aWx0
aW5FeGVjdXRhYmxlczsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtN
YXBJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9X
ZWFrTWFwSW1wbC5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1dlYWtNYXBJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICogQ29weXJpZ2h0IChDKSAyMDE3IFl1c3VrZSBTdXp1a2kgPHV0YXRhbmUudGVhQGdt
YWlsLmNvbT4uCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0zOSw4ICszOSw5IEBAIHZvaWQgV2Vha01h
cEltcGw8V2Vha01hcEJ1Y2tldD46OmRlc3Ryb3kKICAgICBzdGF0aWNfY2FzdDxXZWFrTWFwSW1w
bCo+KGNlbGwpLT5+V2Vha01hcEltcGwoKTsKIH0KIAotdGVtcGxhdGUgPHR5cGVuYW1lIFdlYWtN
YXBCdWNrZXQ+Ci12b2lkIFdlYWtNYXBJbXBsPFdlYWtNYXBCdWNrZXQ+Ojp2aXNpdENoaWxkcmVu
KEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBX
ZWFrTWFwQnVja2V0PgordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgV2Vha01hcElt
cGw8V2Vha01hcEJ1Y2tldD46OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRv
ciYgdmlzaXRvcikKIHsKICAgICBXZWFrTWFwSW1wbCogdGhpc09iamVjdCA9IGpzQ2FzdDxXZWFr
TWFwSW1wbCo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVj
dCwgaW5mbygpKTsKQEAgLTQ4LDYgKzQ5LDggQEAgdm9pZCBXZWFrTWFwSW1wbDxXZWFrTWFwQnVj
a2V0Pjo6dmlzaXRDaAogICAgIHZpc2l0b3IucmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKHRoaXNP
YmplY3QtPm1fY2FwYWNpdHkgKiBzaXplb2YoV2Vha01hcEJ1Y2tldCkpOwogfQogCitERUZJTkVf
VklTSVRfQ0hJTERSRU5fV0lUSF9NT0RJRklFUih0ZW1wbGF0ZTx0eXBlbmFtZSBXZWFrTWFwQnVj
a2V0PiwgV2Vha01hcEltcGw8V2Vha01hcEJ1Y2tldD4pOworCiB0ZW1wbGF0ZSA8dHlwZW5hbWUg
V2Vha01hcEJ1Y2tldD4KIHNpemVfdCBXZWFrTWFwSW1wbDxXZWFrTWFwQnVja2V0Pjo6ZXN0aW1h
dGVkU2l6ZShKU0NlbGwqIGNlbGwsIFZNJiB2bSkKIHsKQEAgLTU2LDE1ICs1OSwxNCBAQCBzaXpl
X3QgV2Vha01hcEltcGw8V2Vha01hcEJ1Y2tldD46OmVzdGltCiB9CiAKIHRlbXBsYXRlIDw+Ci12
b2lkIFdlYWtNYXBJbXBsPFdlYWtNYXBCdWNrZXQ8V2Vha01hcEJ1Y2tldERhdGFLZXk+Pjo6dmlz
aXRPdXRwdXRDb25zdHJhaW50cyhKU0NlbGwqLCBTbG90VmlzaXRvciYpCit2b2lkIFdlYWtNYXBJ
bXBsPFdlYWtNYXBCdWNrZXQ8V2Vha01hcEJ1Y2tldERhdGFLZXk+Pjo6dmlzaXRPdXRwdXRDb25z
dHJhaW50cyhKU0NlbGwqLCBBYnN0cmFjdFNsb3RWaXNpdG9yJikKIHsKICAgICAvLyBPbmx5IEpT
V2Vha01hcCBuZWVkcyB0byBoYXJ2ZXN0IHZhbHVlIHJlZmVyZW5jZXMKIH0KIAogdGVtcGxhdGUg
PD4KLXZvaWQgV2Vha01hcEltcGw8V2Vha01hcEJ1Y2tldDxXZWFrTWFwQnVja2V0RGF0YUtleVZh
bHVlPj46OnZpc2l0T3V0cHV0Q29uc3RyYWludHMoSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYg
dmlzaXRvcikKK3ZvaWQgV2Vha01hcEltcGw8V2Vha01hcEJ1Y2tldDxXZWFrTWFwQnVja2V0RGF0
YUtleVZhbHVlPj46OnZpc2l0T3V0cHV0Q29uc3RyYWludHMoSlNDZWxsKiBjZWxsLCBBYnN0cmFj
dFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewotICAgIFZNJiB2bSA9IHZpc2l0b3Iudm0oKTsKICAg
ICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PFdlYWtNYXBJbXBsKj4oY2VsbCk7CiAgICAgYXV0
byBsb2NrZXIgPSBob2xkTG9jayh0aGlzT2JqZWN0LT5jZWxsTG9jaygpKTsKICAgICBhdXRvKiBi
dWZmZXIgPSB0aGlzT2JqZWN0LT5idWZmZXIoKTsKQEAgLTcyLDcgKzc0LDcgQEAgdm9pZCBXZWFr
TWFwSW1wbDxXZWFrTWFwQnVja2V0PFdlYWtNYXBCdQogICAgICAgICBhdXRvKiBidWNrZXQgPSBi
dWZmZXIgKyBpbmRleDsKICAgICAgICAgaWYgKGJ1Y2tldC0+aXNFbXB0eSgpIHx8IGJ1Y2tldC0+
aXNEZWxldGVkKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgaWYgKCF2bS5oZWFw
LmlzTWFya2VkKGJ1Y2tldC0+a2V5KCkpKQorICAgICAgICBpZiAoIXZpc2l0b3IuaXNNYXJrZWQo
YnVja2V0LT5rZXkoKSkpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgYnVja2V0LT52
aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9XZWFrTWFwSW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1dlYWtNYXBJbXBsLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtNYXBJbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDE3IFl1c3VrZSBTdXp1a2kg
PHV0YXRhbmUudGVhQGdtYWlsLmNvbT4uCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0xNDUsNyArMTQ1
LDcgQEAgcHVibGljOgogICAgIH0KIAogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUID0gRGF0YT4K
LSAgICBBTFdBWVNfSU5MSU5FIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTxU
LCBXZWFrTWFwQnVja2V0RGF0YUtleVZhbHVlPjo6dmFsdWU+Ojp0eXBlIHZpc2l0QWdncmVnYXRl
KFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorICAgIEFMV0FZU19JTkxJTkUgdHlwZW5hbWUgc3RkOjpl
bmFibGVfaWY8c3RkOjppc19zYW1lPFQsIFdlYWtNYXBCdWNrZXREYXRhS2V5VmFsdWU+Ojp2YWx1
ZT46OnR5cGUgdmlzaXRBZ2dyZWdhdGUoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKICAg
ICB7CiAgICAgICAgIHZpc2l0b3IuYXBwZW5kKG1fZGF0YS52YWx1ZSk7CiAgICAgfQpAQCAtMjAy
LDcgKzIwMiw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNEZXN0
cnVjdGlvbiA9IHRydWU7CiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKIAotICAg
IHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBE
RUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgc3RhdGljIHNpemVfdCBlc3RpbWF0ZWRTaXpl
KEpTQ2VsbCosIFZNJik7CiAKQEAgLTMxMSw3ICszMTEsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJl
dHVybiB2bS53ZWFrU2V0U3BhY2U8bW9kZT4oKTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCB2
aXNpdE91dHB1dENvbnN0cmFpbnRzKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgc3RhdGlj
IHZvaWQgdmlzaXRPdXRwdXRDb25zdHJhaW50cyhKU0NlbGwqLCBBYnN0cmFjdFNsb3RWaXNpdG9y
Jik7CiAgICAgdm9pZCBmaW5hbGl6ZVVuY29uZGl0aW9uYWxseShWTSYpOwogCiBwcml2YXRlOgpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0pTRG9sbGFyVk0uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9KU0RvbGxhclZNLmNwcAkocmV2aXNp
b24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0pTRG9sbGFyVk0uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
NS0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMjI0LDE0ICsyMjQsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lk
IGZpbmlzaENyZWF0aW9uKFZNJiwgUm9vdCopOwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGls
ZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQotICAgIHsKLSAgICAgICAg
RG9sbGFyVk1Bc3NlcnRTY29wZSBhc3NlcnRTY29wZTsKLSAgICAgICAgRWxlbWVudCogdGhpc09i
amVjdCA9IGpzQ2FzdDxFbGVtZW50Kj4oY2VsbCk7Ci0gICAgICAgIEFTU0VSVF9HQ19PQkpFQ1Rf
SU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKLSAgICAgICAgQmFzZTo6dmlzaXRDaGlsZHJl
bih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKLSAgICAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVj
dC0+bV9yb290KTsKLSAgICB9CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIHN0
YXRpYyBFbGVtZW50SGFuZGxlT3duZXIqIGhhbmRsZU93bmVyKCk7CiAKQEAgLTI0NywxMCArMjQw
LDIyIEBAIHByaXZhdGU6CiAgICAgV3JpdGVCYXJyaWVyPFJvb3Q+IG1fcm9vdDsKIH07CiAKK3Rl
bXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEVsZW1lbnQ6OnZpc2l0Q2hpbGRyZW5JbXBs
KEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBEb2xsYXJWTUFzc2VydFNj
b3BlIGFzc2VydFNjb3BlOworICAgIEVsZW1lbnQqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8RWxlbWVu
dCo+KGNlbGwpOworICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5m
bygpKTsKKyAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOworICAg
IHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fcm9vdCk7Cit9CisKK0RFRklORV9WSVNJVF9D
SElMRFJFTihFbGVtZW50KTsKKwogY2xhc3MgRWxlbWVudEhhbmRsZU93bmVyIGZpbmFsIDogcHVi
bGljIFdlYWtIYW5kbGVPd25lciB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJs
aWM6Ci0gICAgYm9vbCBpc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6
OlVua25vd24+IGhhbmRsZSwgdm9pZCosIFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFy
KiogcmVhc29uKSBmaW5hbAorICAgIGJvb2wgaXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlND
OjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBBYnN0cmFjdFNsb3RWaXNpdG9y
JiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKSBmaW5hbAogICAgIHsKICAgICAgICAgRG9s
bGFyVk1Bc3NlcnRTY29wZSBhc3NlcnRTY29wZTsKICAgICAgICAgaWYgKFVOTElLRUxZKHJlYXNv
bikpCkBAIC0zMDQsMTggKzMwOSwyMyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBTdHJ1Y3R1
cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5
cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCB2
aXNpdENoaWxkcmVuKEpTQ2VsbCogdGhpc09iamVjdCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCi0g
ICAgewotICAgICAgICBEb2xsYXJWTUFzc2VydFNjb3BlIGFzc2VydFNjb3BlOwotICAgICAgICBB
U1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7Ci0gICAgICAgIEJh
c2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7Ci0gICAgICAgIHZpc2l0b3Iu
YWRkT3BhcXVlUm9vdCh0aGlzT2JqZWN0KTsKLSAgICB9CisgICAgREVDTEFSRV9WSVNJVF9DSElM
RFJFTjsKIAogcHJpdmF0ZToKICAgICBXZWFrPEVsZW1lbnQ+IG1fZWxlbWVudDsKIH07CiAKK3Rl
bXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFJvb3Q6OnZpc2l0Q2hpbGRyZW5JbXBsKEpT
Q2VsbCogdGhpc09iamVjdCwgVmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBEb2xsYXJWTUFzc2Vy
dFNjb3BlIGFzc2VydFNjb3BlOworICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09i
amVjdCwgaW5mbygpKTsKKyAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0
b3IpOworICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdCh0aGlzT2JqZWN0KTsKK30KKworREVGSU5F
X1ZJU0lUX0NISUxEUkVOKFJvb3QpOworCiBjbGFzcyBTaW1wbGVPYmplY3QgOiBwdWJsaWMgSlNO
b25GaW5hbE9iamVjdCB7CiBwdWJsaWM6CiAgICAgU2ltcGxlT2JqZWN0KFZNJiB2bSwgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUpCkBAIC0zNDAsMTQgKzM1MCw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0
dXJuIHNpbXBsZU9iamVjdDsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVu
KEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCi0gICAgewotICAgICAgICBEb2xs
YXJWTUFzc2VydFNjb3BlIGFzc2VydFNjb3BlOwotICAgICAgICBTaW1wbGVPYmplY3QqIHRoaXNP
YmplY3QgPSBqc0Nhc3Q8U2ltcGxlT2JqZWN0Kj4oY2VsbCk7Ci0gICAgICAgIEFTU0VSVF9HQ19P
QkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKLSAgICAgICAgQmFzZTo6dmlzaXRD
aGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKLSAgICAgICAgdmlzaXRvci5hcHBlbmQodGhp
c09iamVjdC0+bV9oaWRkZW5WYWx1ZSk7Ci0gICAgfQorICAgIERFQ0xBUkVfVklTSVRfQ0hJTERS
RU47CiAKICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKICAgICB7CkBAIC0z
ODAsNiArMzgzLDE4IEBAIHByaXZhdGU6CiAgICAgV3JpdGVCYXJyaWVyPEpTQzo6VW5rbm93bj4g
bV9oaWRkZW5WYWx1ZTsKIH07CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFNp
bXBsZU9iamVjdDo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNp
dG9yKQoreworICAgIERvbGxhclZNQXNzZXJ0U2NvcGUgYXNzZXJ0U2NvcGU7CisgICAgU2ltcGxl
T2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PFNpbXBsZU9iamVjdCo+KGNlbGwpOworICAgIEFT
U0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKKyAgICBCYXNlOjp2
aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOworICAgIHZpc2l0b3IuYXBwZW5kKHRo
aXNPYmplY3QtPm1faGlkZGVuVmFsdWUpOworfQorCitERUZJTkVfVklTSVRfQ0hJTERSRU4oU2lt
cGxlT2JqZWN0KTsKKwogY2xhc3MgSW1wdXJlR2V0dGVyIDogcHVibGljIEpTTm9uRmluYWxPYmpl
Y3QgewogcHVibGljOgogICAgIEltcHVyZUdldHRlcihWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0
dXJlKQpAQCAtNDM2LDE0ICs0NTEsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBCYXNlOjpn
ZXRPd25Qcm9wZXJ0eVNsb3Qob2JqZWN0LCBnbG9iYWxPYmplY3QsIG5hbWUsIHNsb3QpOwogICAg
IH0KIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90Vmlz
aXRvciYgdmlzaXRvcikKLSAgICB7Ci0gICAgICAgIERvbGxhclZNQXNzZXJ0U2NvcGUgYXNzZXJ0
U2NvcGU7Ci0gICAgICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2VsbCwgaW5mbygpKTsK
LSAgICAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbihjZWxsLCB2aXNpdG9yKTsKLSAgICAgICAgSW1w
dXJlR2V0dGVyKiB0aGlzT2JqZWN0ID0ganNDYXN0PEltcHVyZUdldHRlcio+KGNlbGwpOwotICAg
ICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2RlbGVnYXRlKTsKLSAgICB9CisgICAg
REVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIHZvaWQgc2V0RGVsZWdhdGUoVk0mIHZtLCBK
U09iamVjdCogZGVsZWdhdGUpCiAgICAgewpAQCAtNDU0LDYgKzQ2MiwxOCBAQCBwcml2YXRlOgog
ICAgIFdyaXRlQmFycmllcjxKU09iamVjdD4gbV9kZWxlZ2F0ZTsKIH07CiAKK3RlbXBsYXRlPHR5
cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEltcHVyZUdldHRlcjo6dmlzaXRDaGlsZHJlbkltcGwoSlND
ZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIERvbGxhclZNQXNzZXJ0U2NvcGUg
YXNzZXJ0U2NvcGU7CisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjZWxsLCBpbmZvKCkp
OworICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4oY2VsbCwgdmlzaXRvcik7CisgICAgSW1wdXJlR2V0
dGVyKiB0aGlzT2JqZWN0ID0ganNDYXN0PEltcHVyZUdldHRlcio+KGNlbGwpOworICAgIHZpc2l0
b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fZGVsZWdhdGUpOworfQorCitERUZJTkVfVklTSVRfQ0hJ
TERSRU4oSW1wdXJlR2V0dGVyKTsKKwogc3RhdGljIEpTQ19ERUNMQVJFX0NVU1RPTV9HRVRURVIo
Y3VzdG9tR2V0dGVyVmFsdWVHZXR0ZXIpOwogc3RhdGljIEpTQ19ERUNMQVJFX0NVU1RPTV9HRVRU
RVIoY3VzdG9tR2V0dGVyQWNlc3NvckdldHRlcik7CiAKQEAgLTE4MjIsMTQgKzE4NDIsNyBAQCBw
dWJsaWM6CiAgICAgICAgIHB1dERpcmVjdE5hdGl2ZUZ1bmN0aW9uKHZtLCBnbG9iYWxPYmplY3Qs
IElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJhZGRCeXRlcyIpLCAwLCBmdW5jdGlvbldhc21T
dHJlYW1pbmdDb21waWxlckFkZEJ5dGVzLCBOb0ludHJpbnNpYywgc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSkpOwogICAgIH0KIAotICAgIHN0YXRpYyB2
b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKLSAg
ICB7Ci0gICAgICAgIERvbGxhclZNQXNzZXJ0U2NvcGUgYXNzZXJ0U2NvcGU7Ci0gICAgICAgIGF1
dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8V2FzbVN0cmVhbWluZ0NvbXBpbGVyKj4oY2VsbCk7Ci0g
ICAgICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKLSAg
ICAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKLSAgICAgICAg
dmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9wcm9taXNlKTsKLSAgICB9CisgICAgREVDTEFS
RV9WSVNJVF9DSElMRFJFTjsKIAogICAgIERFQ0xBUkVfSU5GTzsKIApAQCAtMTgzNyw2ICsxODUw
LDE4IEBAIHB1YmxpYzoKICAgICBSZWY8V2FzbTo6U3RyZWFtaW5nQ29tcGlsZXI+IG1fc3RyZWFt
aW5nQ29tcGlsZXI7CiB9OwogCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBXYXNt
U3RyZWFtaW5nQ29tcGlsZXI6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRv
ciYgdmlzaXRvcikKK3sKKyAgICBEb2xsYXJWTUFzc2VydFNjb3BlIGFzc2VydFNjb3BlOworICAg
IGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8V2FzbVN0cmVhbWluZ0NvbXBpbGVyKj4oY2VsbCk7
CisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOworICAg
IEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CisgICAgdmlzaXRvci5h
cHBlbmQodGhpc09iamVjdC0+bV9wcm9taXNlKTsKK30KKworREVGSU5FX1ZJU0lUX0NISUxEUkVO
KFdhc21TdHJlYW1pbmdDb21waWxlcik7CisKIGNvbnN0IENsYXNzSW5mbyBXYXNtU3RyZWFtaW5n
Q29tcGlsZXI6OnNfaW5mbyA9IHsgIldhc21TdHJlYW1pbmdDb21waWxlciIsICZCYXNlOjpzX2lu
Zm8sIG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoV2FzbVN0cmVhbWluZ0Nv
bXBpbGVyKSB9OwogCiBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oZnVuY3Rpb25XYXNtU3RyZWFt
aW5nQ29tcGlsZXJBZGRCeXRlcywgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxG
cmFtZSogY2FsbEZyYW1lKSkKQEAgLTM2OTksMTMgKzM3MjQsMTYgQEAgdm9pZCBKU0RvbGxhclZN
OjphZGRDb25zdHJ1Y3RpYmxlRnVuY3RpbwogICAgIHB1dERpcmVjdCh2bSwgaWRlbnRpZmllciwg
SlNGdW5jdGlvbjo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIGFyZ3VtZW50cywgaWRlbnRpZmll
ci5zdHJpbmcoKSwgZnVuY3Rpb24sIE5vSW50cmluc2ljLCBmdW5jdGlvbiksIGpzRG9sbGFyVk1Q
cm9wZXJ0eUF0dHJpYnV0ZXMpOwogfQogCi12b2lkIEpTRG9sbGFyVk06OnZpc2l0Q2hpbGRyZW4o
SlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZp
c2l0b3I+Cit2b2lkIEpTRG9sbGFyVk06OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwg
VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU0RvbGxhclZNKiB0aGlzT2JqZWN0ID0ganNDYXN0
PEpTRG9sbGFyVk0qPihjZWxsKTsKICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3Qs
IHZpc2l0b3IpOwogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fb2JqZWN0RG9pbmdT
aWRlRWZmZWN0UHV0V2l0aG91dENvcnJlY3RTbG90U3RhdHVzU3RydWN0dXJlKTsKIH0KIAorREVG
SU5FX1ZJU0lUX0NISUxEUkVOKEpTRG9sbGFyVk0pOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAog
SUdOT1JFX1dBUk5JTkdTX0VORApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0pT
RG9sbGFyVk0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvSlNE
b2xsYXJWTS5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9v
bHMvSlNEb2xsYXJWTS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxNS0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNzQsNyArNzQsNyBAQCBwcml2YXRl
OgogICAgIHZvaWQgYWRkRnVuY3Rpb24oVk0mLCBKU0dsb2JhbE9iamVjdCosIGNvbnN0IGNoYXIq
IG5hbWUsIE5hdGl2ZUZ1bmN0aW9uLCB1bnNpZ25lZCBhcmd1bWVudHMpOwogICAgIHZvaWQgYWRk
Q29uc3RydWN0aWJsZUZ1bmN0aW9uKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBjb25zdCBjaGFyKiBu
YW1lLCBOYXRpdmVGdW5jdGlvbiwgdW5zaWduZWQgYXJndW1lbnRzKTsKIAotICAgIHN0YXRpYyB2
b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJ
U0lUX0NISUxEUkVOOwogCiAgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gbV9vYmplY3REb2lu
Z1NpZGVFZmZlY3RQdXRXaXRob3V0Q29ycmVjdFNsb3RTdGF0dXNTdHJ1Y3R1cmU7CiB9OwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUdsb2JhbC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUdsb2JhbC5jcHAJKHJldmlzaW9uIDI3
MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21HbG9iYWwuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTEwMyw3ICsxMDMsOCBAQCB2b2lkIEdsb2JhbDo6c2V0KEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPCiAgICAgfQogfQogCi12b2lkIEdsb2JhbDo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZp
c2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBHbG9iYWw6
OnZpc2l0QWdncmVnYXRlSW1wbChWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHN3aXRjaCAobV90
eXBlKSB7CiAgICAgY2FzZSBXYXNtOjpUeXBlOjpFeHRlcm5yZWY6CkBAIC0xMTcsNiArMTE4LDgg
QEAgdm9pZCBHbG9iYWw6OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJgogICAgIH0KIH0KIAor
REVGSU5FX1ZJU0lUX0FHR1JFR0FURShHbG9iYWwpOworCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
R2xvYmFsCiAKICNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtR2xvYmFsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbUdsb2JhbC5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtR2xvYmFsLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMTggQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01Nyw3
ICs1Nyw4IEBAIHB1YmxpYzoKICAgICBKU1ZhbHVlIGdldChKU0dsb2JhbE9iamVjdCopIGNvbnN0
OwogICAgIHVpbnQ2NF90IGdldFByaW1pdGl2ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWUubV9w
cmltaXRpdmU7IH0KICAgICB2b2lkIHNldChKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUpOwotICAg
IHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImKTsKKy8vICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFZpc2l0b3I+IHZvaWQgdmlzaXRBZ2dyZWdhdGUoVmlzaXRvciYpOworICAgIERFQ0xBUkVf
VklTSVRfQUdHUkVHQVRFOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gVCogb3duZXIoKSBj
b25zdCB7IHJldHVybiByZWludGVycHJldF9jYXN0PFQqPihtX293bmVyKTsgfQogICAgIHZvaWQg
c2V0T3duZXIoSlNPYmplY3QqIG93bmVyKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbVRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtVGFibGUuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtVGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxNy0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTY2LDcgKzE2Niw4IEBA
IEpTVmFsdWUgVGFibGU6OmdldCh1aW50MzJfdCBpbmRleCkgY29uc3QKICAgICByZXR1cm4gbV9q
c1ZhbHVlcy5nZXQoKVtpbmRleCAmIG1fbWFza10uZ2V0KCk7CiB9CiAKLXZvaWQgVGFibGU6OnZp
c2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlz
aXRvcj4KK3ZvaWQgVGFibGU6OnZpc2l0QWdncmVnYXRlSW1wbChWaXNpdG9yJiB2aXNpdG9yKQog
ewogICAgIFJFTEVBU0VfQVNTRVJUKG1fb3duZXIpOwogICAgIGF1dG8gbG9ja2VyID0gaG9sZExv
Y2sobV9vd25lci0+Y2VsbExvY2soKSk7CkBAIC0xNzQsNiArMTc1LDggQEAgdm9pZCBUYWJsZTo6
dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImIAogICAgICAgICB2aXNpdG9yLmFwcGVuZChtX2pz
VmFsdWVzLmdldCgpW2ldKTsKIH0KIAorREVGSU5FX1ZJU0lUX0FHR1JFR0FURShUYWJsZSk7CisK
IFR5cGUgVGFibGU6Ondhc21UeXBlKCkgY29uc3QKIHsKICAgICBpZiAoaXNFeHRlcm5yZWZUYWJs
ZSgpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRhYmxlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRhYmxlLmgJKHJldmlzaW9u
IDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UYWJsZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNy0yMDE4
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0y
MDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtODAsNyArODAsNyBAQCBwdWJsaWM6CiAgICAgT3B0aW9uYWw8dWludDMy
X3Q+IGdyb3codWludDMyX3QgZGVsdGEsIEpTVmFsdWUgZGVmYXVsdFZhbHVlKTsKICAgICB2b2lk
IGNvcHkoY29uc3QgVGFibGUqIHNyY1RhYmxlLCB1aW50MzJfdCBkc3RJbmRleCwgdWludDMyX3Qg
c3JjSW5kZXgpOwogCi0gICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYpOworICAg
IERFQ0xBUkVfVklTSVRfQUdHUkVHQVRFOwogCiBwcm90ZWN0ZWQ6CiAgICAgVGFibGUodWludDMy
X3QgaW5pdGlhbCwgT3B0aW9uYWw8dWludDMyX3Q+IG1heGltdW0sIFRhYmxlRWxlbWVudFR5cGUg
PSBUYWJsZUVsZW1lbnRUeXBlOjpFeHRlcm5yZWYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvSlNUb1dhc21JQ0NhbGxlZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvSlNUb1dhc21JQ0NhbGxlZS5jcHAJKHJldmlzaW9uIDI3Mjgz
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTVG9XYXNtSUNDYWxsZWUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
OSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkt
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTQ5LDcgKzQ5LDggQEAgU3RydWN0dXJlKiBKU1RvV2FzbUlDQ2FsbGVl
OjpjcmVhdGVTdHJ1YwogICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2Jq
ZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKEpTQ2FsbGVlVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBp
bmZvKCkpOwogfQogCi12b2lkIEpTVG9XYXNtSUNDYWxsZWU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+
Cit2b2lkIEpTVG9XYXNtSUNDYWxsZWU6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwg
VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU1RvV2FzbUlDQ2FsbGVlKiB0aGlzT2JqZWN0ID0g
anNDYXN0PEpTVG9XYXNtSUNDYWxsZWUqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lO
SEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC01OCw2ICs1OSw4IEBAIHZvaWQgSlNUb1dh
c21JQ0NhbGxlZTo6dmlzaXRDaGlsZHJlbihKU0MKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2Jq
ZWN0LT5tX2Z1bmN0aW9uKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTVG9XYXNtSUND
YWxsZWUpOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NF
TUJMWSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTVG9XYXNtSUNDYWxs
ZWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1RvV2Fz
bUlDQ2FsbGVlLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL2pzL0pTVG9XYXNtSUNDYWxsZWUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE5LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01Niw3ICs1Niw3IEBAIHBy
aXZhdGU6CiAgICAgSlNUb1dhc21JQ0NhbGxlZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlKQogICAgICAgICA6IEJhc2Uodm0sIGdsb2Jh
bE9iamVjdCwgc3RydWN0dXJlKQogICAgIHsgfQotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwog
CiAgICAgV3JpdGVCYXJyaWVyPFdlYkFzc2VtYmx5RnVuY3Rpb24+IG1fZnVuY3Rpb247CiB9OwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9j
ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJB
c3NlbWJseUNvZGVCbG9jay5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNy0yMDE4IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIxIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtODIsNyArODIsOCBAQCB2b2lkIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6OmNsZWFySlND
YWxsCiAgICAgICAgICgqaXRlciktPnVubGluayh2bSk7CiB9CiAKLXZvaWQgSlNXZWJBc3NlbWJs
eUNvZGVCbG9jazo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNp
dG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNXZWJBc3NlbWJseUNvZGVC
bG9jazo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQog
ewogICAgIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2sqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNXZWJB
c3NlbWJseUNvZGVCbG9jayo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMo
dGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTkwLDYgKzkxLDggQEAgdm9pZCBKU1dlYkFzc2VtYmx5
Q29kZUJsb2NrOjp2aXNpdENoaWxkcgogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVj
dCwgdmlzaXRvcik7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU1dlYkFzc2VtYmx5Q29k
ZUJsb2NrKTsKKwogdm9pZCBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrOjpmaW5hbGl6ZVVuY29uZGl0
aW9uYWxseShWTSYgdm0pCiB7CiAgICAgZm9yIChhdXRvIGl0ZXIgPSBtX2NhbGxMaW5rSW5mb3Mu
YmVnaW4oKTsgISFpdGVyOyArK2l0ZXIpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9jay5oCShyZXZpc2lvbiAyNzI4
MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJs
b2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDE3LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC04Niw3ICs4Niw3IEBAIHByaXZhdGU6CiAgICAgREVD
TEFSRV9FWFBPUlRfSU5GTzsKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNEZXN0cnVj
dGlvbiA9IHRydWU7CiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKLSAgICBzdGF0
aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFS
RV9WSVNJVF9DSElMRFJFTjsKIAogICAgIFJlZjxXYXNtOjpDb2RlQmxvY2s+IG1fY29kZUJsb2Nr
OwogICAgIFZlY3RvcjxNYWNyb0Fzc2VtYmxlckNvZGVSZWY8V2FzbUVudHJ5UHRyVGFnPj4gbV93
YXNtVG9KU0V4aXRTdHViczsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pT
V2ViQXNzZW1ibHlHbG9iYWwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlHbG9iYWwuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5R2xvYmFsLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE5LTIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC03MSw3ICs3MSw4IEBAIHZvaWQgSlNXZWJBc3NlbWJseUdsb2JhbDo6ZGVzdHJv
eShKU0NlbGwKICAgICBzdGF0aWNfY2FzdDxKU1dlYkFzc2VtYmx5R2xvYmFsKj4oY2VsbCktPkpT
V2ViQXNzZW1ibHlHbG9iYWw6On5KU1dlYkFzc2VtYmx5R2xvYmFsKCk7CiB9CiAKLXZvaWQgSlNX
ZWJBc3NlbWJseUdsb2JhbDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9y
JiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNXZWJBc3NlbWJs
eUdsb2JhbDo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9y
KQogewogICAgIEpTV2ViQXNzZW1ibHlHbG9iYWwqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNXZWJB
c3NlbWJseUdsb2JhbCo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhp
c09iamVjdCwgaW5mbygpKTsKQEAgLTgwLDYgKzgxLDggQEAgdm9pZCBKU1dlYkFzc2VtYmx5R2xv
YmFsOjp2aXNpdENoaWxkcmVuKAogICAgIHRoaXNPYmplY3QtPmdsb2JhbCgpLT52aXNpdEFnZ3Jl
Z2F0ZSh2aXNpdG9yKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTV2ViQXNzZW1ibHlH
bG9iYWwpOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NF
TUJMWSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlH
bG9iYWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dl
YkFzc2VtYmx5R2xvYmFsLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlHbG9iYWwuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE5LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01OSw3ICs1
OSw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgSlNXZWJBc3NlbWJseUdsb2JhbChWTSYsIFN0
cnVjdHVyZSosIFJlZjxXYXNtOjpHbG9iYWw+JiYpOwogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24o
Vk0mKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9y
Jik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIFJlZjxXYXNtOjpHbG9iYWw+
IG1fZ2xvYmFsOwogfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2Vi
QXNzZW1ibHlJbnN0YW5jZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYt
MjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTczLDcgKzczLDggQEAgdm9pZCBKU1dlYkFzc2VtYmx5SW5zdGFu
Y2U6OmRlc3Ryb3koSlNDZQogICAgIHN0YXRpY19jYXN0PEpTV2ViQXNzZW1ibHlJbnN0YW5jZSo+
KGNlbGwpLT5KU1dlYkFzc2VtYmx5SW5zdGFuY2U6On5KU1dlYkFzc2VtYmx5SW5zdGFuY2UoKTsK
IH0KIAotdm9pZCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBj
ZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2
b2lkIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxs
LCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNX
ZWJBc3NlbWJseUluc3RhbmNlKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklU
Uyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtMTAyLDYgKzEwMyw4IEBAIHZvaWQgSlNXZWJBc3Nl
bWJseUluc3RhbmNlOjp2aXNpdENoaWxkcmUKICAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJp
ZXJlZCh3cmFwcGVyLmdldCgpKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTV2ViQXNz
ZW1ibHlJbnN0YW5jZSk7CisKIHZvaWQgSlNXZWJBc3NlbWJseUluc3RhbmNlOjpmaW5hbGl6ZUNy
ZWF0aW9uKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmPFdhc206OkNv
ZGVCbG9jaz4mJiB3YXNtQ29kZUJsb2NrLCBKU09iamVjdCogaW1wb3J0T2JqZWN0LCBXYXNtOjpD
cmVhdGlvbk1vZGUgY3JlYXRpb25Nb2RlKQogewogICAgIG1faW5zdGFuY2UtPmZpbmFsaXplQ3Jl
YXRpb24odGhpcywgd2FzbUNvZGVCbG9jay5jb3B5UmVmKCkpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmgJKHJl
dmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNz
ZW1ibHlJbnN0YW5jZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxNi0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTA1LDcgKzEwNSw3IEBAIHB1Ymxp
YzoKIHByaXZhdGU6CiAgICAgSlNXZWJBc3NlbWJseUluc3RhbmNlKFZNJiwgU3RydWN0dXJlKiwg
UmVmPFdhc206Okluc3RhbmNlPiYmKTsKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgSlNX
ZWJBc3NlbWJseU1vZHVsZSosIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkKik7Ci0gICAgc3RhdGlj
IHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVf
VklTSVRfQ0hJTERSRU47CiAKICAgICBSZWY8V2FzbTo6SW5zdGFuY2U+IG1faW5zdGFuY2U7CiAg
ICAgVk0qIG1fdm07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFz
c2VtYmx5TWVtb3J5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9KU1dlYkFzc2VtYmx5TWVtb3J5LmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1lbW9yeS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0xNTksNyArMTU5LDggQEAgdm9pZCBKU1dlYkFzc2VtYmx5TWVtb3J5OjpkZXN0
cm95KEpTQ2VsbAogICAgIG1lbW9yeS0+SlNXZWJBc3NlbWJseU1lbW9yeTo6fkpTV2ViQXNzZW1i
bHlNZW1vcnkoKTsKIH0KIAotdm9pZCBKU1dlYkFzc2VtYmx5TWVtb3J5Ojp2aXNpdENoaWxkcmVu
KEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPgordm9pZCBKU1dlYkFzc2VtYmx5TWVtb3J5Ojp2aXNpdENoaWxkcmVuSW1wbChKU0Nl
bGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpz
Q2FzdDxKU1dlYkFzc2VtYmx5TWVtb3J5Kj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9J
TkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtMTY5LDYgKzE3MCw4IEBAIHZvaWQgSlNX
ZWJBc3NlbWJseU1lbW9yeTo6dmlzaXRDaGlsZHJlbigKICAgICB2aXNpdG9yLnJlcG9ydEV4dHJh
TWVtb3J5VmlzaXRlZCh0aGlzT2JqZWN0LT5tZW1vcnkoKS5zaXplKCkpOwogfQogCitERUZJTkVf
VklTSVRfQ0hJTERSRU4oSlNXZWJBc3NlbWJseU1lbW9yeSk7CisKIH0gLy8gbmFtZXNwYWNlIEpT
QwogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1lbW9yeS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNZW1vcnkuaAkocmV2aXNpb24g
MjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1l
bW9yeS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxNi0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjMsNyArNjMsNyBAQCBwdWJsaWM6CiBwcml2YXRl
OgogICAgIEpTV2ViQXNzZW1ibHlNZW1vcnkoVk0mLCBTdHJ1Y3R1cmUqKTsKICAgICB2b2lkIGZp
bmlzaENyZWF0aW9uKFZNJik7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwq
LCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBSZWY8
V2FzbTo6TWVtb3J5PiBtX21lbW9yeTsKICAgICBXcml0ZUJhcnJpZXI8SlNBcnJheUJ1ZmZlcj4g
bV9idWZmZXJXcmFwcGVyOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNX
ZWJBc3NlbWJseU1vZHVsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0y
MDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMTI0LDcgKzEyNCw4IEBAIHZvaWQgSlNXZWJBc3NlbWJseU1vZHVsZTo6
c2V0Q29kZUJsb2NrKFYKICAgICBtX2NvZGVCbG9ja3Nbc3RhdGljX2Nhc3Q8c2l6ZV90Pihtb2Rl
KV0uc2V0KHZtLCB0aGlzLCBjb2RlQmxvY2spOwogfQogCi12b2lkIEpTV2ViQXNzZW1ibHlNb2R1
bGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3Rl
bXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTV2ViQXNzZW1ibHlNb2R1bGU6OnZpc2l0
Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU1dl
YkFzc2VtYmx5TW9kdWxlKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTV2ViQXNzZW1ibHlNb2R1bGUq
PihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8o
KSk7CkBAIC0xMzUsNiArMTM2LDggQEAgdm9pZCBKU1dlYkFzc2VtYmx5TW9kdWxlOjp2aXNpdENo
aWxkcmVuKAogICAgICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2NvZGVCbG9ja3Nb
aV0pOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNXZWJBc3NlbWJseU1vZHVsZSk7CisK
IH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlN
b2R1bGUuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
anMvSlNXZWJBc3NlbWJseU1vZHVsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODAsNyArODAsNyBA
QCBwcml2YXRlOgogCiAgICAgSlNXZWJBc3NlbWJseU1vZHVsZShWTSYsIFN0cnVjdHVyZSosIFJl
ZjxXYXNtOjpNb2R1bGU+JiYpOwogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKLSAgICBz
dGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVD
TEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIFJlZjxXYXNtOjpNb2R1bGU+IG1fbW9kdWxlOwog
ICAgIFdyaXRlQmFycmllcjxTeW1ib2xUYWJsZT4gbV9leHBvcnRTeW1ib2xUYWJsZTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlUYWJsZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseVRh
YmxlLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
anMvSlNXZWJBc3NlbWJseVRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTcyLDcgKzcyLDgg
QEAgdm9pZCBKU1dlYkFzc2VtYmx5VGFibGU6OmRlc3Ryb3koSlNDZWxsKgogICAgIHN0YXRpY19j
YXN0PEpTV2ViQXNzZW1ibHlUYWJsZSo+KGNlbGwpLT5KU1dlYkFzc2VtYmx5VGFibGU6On5KU1dl
YkFzc2VtYmx5VGFibGUoKTsKIH0KIAotdm9pZCBKU1dlYkFzc2VtYmx5VGFibGU6OnZpc2l0Q2hp
bGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVu
YW1lIFZpc2l0b3I+Cit2b2lkIEpTV2ViQXNzZW1ibHlUYWJsZTo6dmlzaXRDaGlsZHJlbkltcGwo
SlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTV2ViQXNzZW1ibHlUYWJs
ZSogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1dlYkFzc2VtYmx5VGFibGUqPihjZWxsKTsKICAgICBB
U1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC04MSw2ICs4
Miw4IEBAIHZvaWQgSlNXZWJBc3NlbWJseVRhYmxlOjp2aXNpdENoaWxkcmVuKEoKICAgICB0aGlz
T2JqZWN0LT50YWJsZSgpLT52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKIH0KIAorREVGSU5FX1ZJ
U0lUX0NISUxEUkVOKEpTV2ViQXNzZW1ibHlUYWJsZSk7CisKIGJvb2wgSlNXZWJBc3NlbWJseVRh
YmxlOjpncm93KHVpbnQzMl90IGRlbHRhLCBKU1ZhbHVlIGRlZmF1bHRWYWx1ZSkKIHsKICAgICBp
ZiAoZGVsdGEgPT0gMCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2Vi
QXNzZW1ibHlUYWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL0pTV2ViQXNzZW1ibHlUYWJsZS5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5VGFibGUuaAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxOSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTcwLDcgKzcwLDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBKU1dlYkFzc2VtYmx5VGFi
bGUoVk0mLCBTdHJ1Y3R1cmUqLCBSZWY8V2FzbTo6VGFibGU+JiYpOwogICAgIHZvaWQgZmluaXNo
Q3JlYXRpb24oVk0mKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNs
b3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIFJlZjxXYXNt
OjpUYWJsZT4gbV90YWJsZTsKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9XZWJBc3NlbWJseUZ1bmN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmNwcAkocmV2aXNpb24gMjcyODMwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2
LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC00NTIsNyArNDUyLDggQEAgV2ViQXNzZW1ibHlGdW5jdGlvbjo6
V2ViQXNzZW1ibHlGdW5jdGlvbgogICAgICwgbV9pbXBvcnRhYmxlRnVuY3Rpb24geyBzaWduYXR1
cmVJbmRleCwgd2FzbVRvV2FzbUVudHJ5cG9pbnRMb2FkTG9jYXRpb24gfQogeyB9CiAKLXZvaWQg
V2ViQXNzZW1ibHlGdW5jdGlvbjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNp
dG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgV2ViQXNzZW1i
bHlGdW5jdGlvbjo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNp
dG9yKQogewogICAgIFdlYkFzc2VtYmx5RnVuY3Rpb24qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8V2Vi
QXNzZW1ibHlGdW5jdGlvbio+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMo
dGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTQ2MSw2ICs0NjIsOCBAQCB2b2lkIFdlYkFzc2VtYmx5
RnVuY3Rpb246OnZpc2l0Q2hpbGRyZW4oCiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+
bV9qc1RvV2FzbUlDQ2FsbGVlKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKFdlYkFzc2Vt
Ymx5RnVuY3Rpb24pOworCiB2b2lkIFdlYkFzc2VtYmx5RnVuY3Rpb246OmRlc3Ryb3koSlNDZWxs
KiBjZWxsKQogewogICAgIHN0YXRpY19jYXN0PFdlYkFzc2VtYmx5RnVuY3Rpb24qPihjZWxsKS0+
V2ViQXNzZW1ibHlGdW5jdGlvbjo6fldlYkFzc2VtYmx5RnVuY3Rpb24oKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmgJ
KHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFz
c2VtYmx5RnVuY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTYtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTg2LDcgKzg2LDcgQEAgcHVibGlj
OgogICAgIFdhc206Okluc3RhbmNlKiBwcmV2aW91c0luc3RhbmNlKENhbGxGcmFtZSopOwogCiBw
cml2YXRlOgotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0
b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogICAgIFdlYkFzc2VtYmx5RnVuY3Rp
b24oVk0mLCBOYXRpdmVFeGVjdXRhYmxlKiwgSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqLCBX
YXNtOjpDYWxsZWUmIGpzRW50cnlwb2ludCwgV2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbjo6
TG9hZExvY2F0aW9uIGVudHJ5cG9pbnRMb2FkTG9jYXRpb24sIFdhc206OlNpZ25hdHVyZUluZGV4
KTsKIAogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBqc0NhbGxFbnRy
eXBvaW50U2xvdygpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNz
ZW1ibHlGdW5jdGlvbkJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb25CYXNlLmNwcAkocmV2aXNpb24gMjcyODMwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbkJhc2Uu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTQxLDcgKzQxLDggQEAgV2ViQXNzZW1ibHlGdW5jdGlvbkJhc2U6
OldlYkFzc2VtYmx5RnVuYwogICAgIDogQmFzZSh2bSwgZXhlY3V0YWJsZSwgZ2xvYmFsT2JqZWN0
LCBzdHJ1Y3R1cmUpCiB7IH0KIAotdm9pZCBXZWJBc3NlbWJseUZ1bmN0aW9uQmFzZTo6dmlzaXRD
aGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlw
ZW5hbWUgVmlzaXRvcj4KK3ZvaWQgV2ViQXNzZW1ibHlGdW5jdGlvbkJhc2U6OnZpc2l0Q2hpbGRy
ZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBXZWJBc3NlbWJs
eUZ1bmN0aW9uQmFzZSogdGhpc09iamVjdCA9IGpzQ2FzdDxXZWJBc3NlbWJseUZ1bmN0aW9uQmFz
ZSo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5m
bygpKTsKQEAgLTQ5LDYgKzUwLDggQEAgdm9pZCBXZWJBc3NlbWJseUZ1bmN0aW9uQmFzZTo6dmlz
aXRDaGlsZAogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1faW5zdGFuY2UpOwogfQog
CitERUZJTkVfVklTSVRfQ0hJTERSRU4oV2ViQXNzZW1ibHlGdW5jdGlvbkJhc2UpOworCiB2b2lk
IFdlYkFzc2VtYmx5RnVuY3Rpb25CYXNlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIE5hdGl2ZUV4
ZWN1dGFibGUqIGV4ZWN1dGFibGUsIHVuc2lnbmVkIGxlbmd0aCwgY29uc3QgU3RyaW5nJiBuYW1l
LCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGluc3RhbmNlKQogewogICAgIEJhc2U6OmZpbmlzaENy
ZWF0aW9uKHZtLCBleGVjdXRhYmxlLCBsZW5ndGgsIG5hbWUpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbkJhc2UuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uQmFzZS5o
CShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJB
c3NlbWJseUZ1bmN0aW9uQmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxNy0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDYsNyArNDYsNyBAQCBw
dWJsaWM6CiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkluc3RhbmNlKCkgeyByZXR1cm4g
T0JKRUNUX09GRlNFVE9GKFdlYkFzc2VtYmx5RnVuY3Rpb25CYXNlLCBtX2luc3RhbmNlKTsgfQog
CiBwcm90ZWN0ZWQ6Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90
VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAgICAgdm9pZCBmaW5pc2hD
cmVhdGlvbihWTSYsIE5hdGl2ZUV4ZWN1dGFibGUqLCB1bnNpZ25lZCBsZW5ndGgsIGNvbnN0IFN0
cmluZyYgbmFtZSwgSlNXZWJBc3NlbWJseUluc3RhbmNlKik7CiAgICAgV2ViQXNzZW1ibHlGdW5j
dGlvbkJhc2UoVk0mLCBOYXRpdmVFeGVjdXRhYmxlKiwgSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1
cmUqKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlN
b2R1bGVSZWNvcmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNi0y
MDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
Ni0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtNzgsNyArNzgsOCBAQCB2b2lkIFdlYkFzc2VtYmx5TW9kdWxlUmVj
b3JkOjpmaW5pc2hDcmVhCiAgICAgfQogfQogCi12b2lkIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3Jk
Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1w
bGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6dmlz
aXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFdl
YkFzc2VtYmx5TW9kdWxlUmVjb3JkKiB0aGlzT2JqZWN0ID0ganNDYXN0PFdlYkFzc2VtYmx5TW9k
dWxlUmVjb3JkKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2Jq
ZWN0LCBpbmZvKCkpOwpAQCAtODgsNiArODksOCBAQCB2b2lkIFdlYkFzc2VtYmx5TW9kdWxlUmVj
b3JkOjp2aXNpdENoaWxkCiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9leHBvcnRz
T2JqZWN0KTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKFdlYkFzc2VtYmx5TW9kdWxlUmVj
b3JkKTsKKwogdm9pZCBXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6cHJlcGFyZUxpbmsoVk0mIHZt
LCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGluc3RhbmNlKQogewogICAgIFJFTEVBU0VfQVNTRVJU
KCFtX2luc3RhbmNlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFz
c2VtYmx5TW9kdWxlUmVjb3JkLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuaAkocmV2aXNpb24gMjcyODMwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYt
MjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTY5LDcgKzY5LDcgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgZmlu
aXNoQ3JlYXRpb24oSlNHbG9iYWxPYmplY3QqLCBWTSYsIGNvbnN0IFdhc206Ok1vZHVsZUluZm9y
bWF0aW9uJik7CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RW
aXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIFdyaXRlQmFycmll
cjxKU1dlYkFzc2VtYmx5SW5zdGFuY2U+IG1faW5zdGFuY2U7CiAgICAgV3JpdGVCYXJyaWVyPEpT
T2JqZWN0PiBtX3N0YXJ0RnVuY3Rpb247CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9XZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uY3BwCShy
ZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3Nl
bWJseVdyYXBwZXJGdW5jdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02Nyw3ICs2Nyw4IEBA
IFN0cnVjdHVyZSogV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb246OmMKICAgICByZXR1cm4gU3Ry
dWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhKU0Z1
bmN0aW9uVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwogfQogCi12b2lkIFdlYkFzc2Vt
Ymx5V3JhcHBlckZ1bmN0aW9uOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0
b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBXZWJBc3NlbWJs
eVdyYXBwZXJGdW5jdGlvbjo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9y
JiB2aXNpdG9yKQogewogICAgIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uKiB0aGlzT2JqZWN0
ID0ganNDYXN0PFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uKj4oY2VsbCk7CiAgICAgQVNTRVJU
X0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNzYsNiArNzcsOCBA
QCB2b2lkIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uOjp2aXNpdENoCiAgICAgdmlzaXRvci5h
cHBlbmQodGhpc09iamVjdC0+bV9mdW5jdGlvbik7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJF
TihXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbik7CisKIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElP
TihjYWxsV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24sIChKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2Jq
ZWN0LT52bSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1i
bHlXcmFwcGVyRnVuY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9qcy9XZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5oCShyZXZpc2lvbiAyNzI4MzApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlv
bi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxNy0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTksNyArNTksNyBAQCBwdWJsaWM6CiBwcml2YXRlOgog
ICAgIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uKFZNJiwgTmF0aXZlRXhlY3V0YWJsZSosIEpT
R2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKiwgV2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbik7
CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIE5hdGl2ZUV4ZWN1dGFibGUqLCB1bnNpZ25l
ZCBsZW5ndGgsIGNvbnN0IFN0cmluZyYgbmFtZSwgSlNPYmplY3QqLCBKU1dlYkFzc2VtYmx5SW5z
dGFuY2UqKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNp
dG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIFdyaXRlQmFycmllcjxK
U09iamVjdD4gbV9mdW5jdGlvbjsKICAgICAvLyBJdCdzIHNhZmUgdG8ganVzdCBob2xkIHRoZSBy
YXcgV2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbiBiZWNhdXNlIHdlIGhhdmUgYSByZWZlcmVu
Y2UKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3Jl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJP
YmplY3RTdG9yZS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03MjgsNyArNzI4
LDggQEAgdm9pZCBJREJPYmplY3RTdG9yZTo6cm9sbGJhY2tGb3JWZXJzaW9uQwogICAgIH0KIH0K
IAotdm9pZCBJREJPYmplY3RTdG9yZTo6dmlzaXRSZWZlcmVuY2VkSW5kZXhlcyhTbG90VmlzaXRv
ciYgdmlzaXRvcikgY29uc3QKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIElEQk9i
amVjdFN0b3JlOjp2aXNpdFJlZmVyZW5jZWRJbmRleGVzKFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0
CiB7CiAgICAgTG9ja2VyPExvY2s+IGxvY2tlcihtX3JlZmVyZW5jZWRJbmRleExvY2spOwogICAg
IGZvciAoYXV0byYgaW5kZXggOiBtX3JlZmVyZW5jZWRJbmRleGVzLnZhbHVlcygpKQpAQCAtNzM3
LDYgKzczOCw5IEBAIHZvaWQgSURCT2JqZWN0U3RvcmU6OnZpc2l0UmVmZXJlbmNlZEluZGUKICAg
ICAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KGluZGV4LmdldCgpKTsKIH0KIAordGVtcGxhdGUg
dm9pZCBJREJPYmplY3RTdG9yZTo6dmlzaXRSZWZlcmVuY2VkSW5kZXhlcyhBYnN0cmFjdFNsb3RW
aXNpdG9yJikgY29uc3Q7Cit0ZW1wbGF0ZSB2b2lkIElEQk9iamVjdFN0b3JlOjp2aXNpdFJlZmVy
ZW5jZWRJbmRleGVzKFNsb3RWaXNpdG9yJikgY29uc3Q7CisKIHZvaWQgSURCT2JqZWN0U3RvcmU6
OnJlbmFtZVJlZmVyZW5jZWRJbmRleChJREJJbmRleCYgaW5kZXgsIGNvbnN0IFN0cmluZyYgbmV3
TmFtZSkKIHsKICAgICBMT0coSW5kZXhlZERCLCAiSURCT2JqZWN0U3RvcmU6OnJlbmFtZVJlZmVy
ZW5jZWRJbmRleCIpOwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
T2JqZWN0U3RvcmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJPYmplY3RTdG9yZS5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEwOSw3
ICsxMDksNyBAQCBwdWJsaWM6CiAgICAgdm9pZCByZWYoKTsKICAgICB2b2lkIGRlcmVmKCk7CiAK
LSAgICB2b2lkIHZpc2l0UmVmZXJlbmNlZEluZGV4ZXMoSlNDOjpTbG90VmlzaXRvciYpIGNvbnN0
OworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgdmlzaXRSZWZlcmVuY2VkSW5k
ZXhlcyhWaXNpdG9yJikgY29uc3Q7CiAgICAgdm9pZCByZW5hbWVSZWZlcmVuY2VkSW5kZXgoSURC
SW5kZXgmLCBjb25zdCBTdHJpbmcmIG5ld05hbWUpOwogCiBwcml2YXRlOgpJbmRleDogU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb24uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmNwcAko
cmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
VHJhbnNhY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxNS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTQ1NSw3ICsxNDU1LDggQEAgdm9p
ZCBJREJUcmFuc2FjdGlvbjo6Y29ubmVjdGlvbkNsb3NlZEZybwogICAgIGZpcmVPbkFib3J0KCk7
CiB9CiAKLXZvaWQgSURCVHJhbnNhY3Rpb246OnZpc2l0UmVmZXJlbmNlZE9iamVjdFN0b3JlcyhK
U0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKSBjb25zdAordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRv
cj4KK3ZvaWQgSURCVHJhbnNhY3Rpb246OnZpc2l0UmVmZXJlbmNlZE9iamVjdFN0b3JlcyhWaXNp
dG9yJiB2aXNpdG9yKSBjb25zdAogewogICAgIExvY2tlcjxMb2NrPiBsb2NrZXIobV9yZWZlcmVu
Y2VkT2JqZWN0U3RvcmVMb2NrKTsKICAgICBmb3IgKGF1dG8mIG9iamVjdFN0b3JlIDogbV9yZWZl
cmVuY2VkT2JqZWN0U3RvcmVzLnZhbHVlcygpKQpAQCAtMTQ2NCw2ICsxNDY1LDkgQEAgdm9pZCBJ
REJUcmFuc2FjdGlvbjo6dmlzaXRSZWZlcmVuY2VkT2JqZQogICAgICAgICB2aXNpdG9yLmFkZE9w
YXF1ZVJvb3Qob2JqZWN0U3RvcmUuZ2V0KCkpOwogfQogCit0ZW1wbGF0ZSB2b2lkIElEQlRyYW5z
YWN0aW9uOjp2aXNpdFJlZmVyZW5jZWRPYmplY3RTdG9yZXMoSlNDOjpBYnN0cmFjdFNsb3RWaXNp
dG9yJikgY29uc3Q7Cit0ZW1wbGF0ZSB2b2lkIElEQlRyYW5zYWN0aW9uOjp2aXNpdFJlZmVyZW5j
ZWRPYmplY3RTdG9yZXMoSlNDOjpTbG90VmlzaXRvciYpIGNvbnN0OworCiB2b2lkIElEQlRyYW5z
YWN0aW9uOjpoYW5kbGVQZW5kaW5nT3BlcmF0aW9ucygpCiB7CiAgICAgQVNTRVJUKGNhbkN1cnJl
bnRUaHJlYWRBY2Nlc3NUaHJlYWRMb2NhbERhdGEobV9kYXRhYmFzZS0+b3JpZ2luVGhyZWFkKCkp
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9u
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJh
bnNhY3Rpb24uaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCVHJhbnNhY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xNDksNyArMTQ5LDcgQEAg
cHVibGljOgogCiAgICAgdm9pZCBjb25uZWN0aW9uQ2xvc2VkRnJvbVNlcnZlcihjb25zdCBJREJF
cnJvciYpOwogCi0gICAgdm9pZCB2aXNpdFJlZmVyZW5jZWRPYmplY3RTdG9yZXMoSlNDOjpTbG90
VmlzaXRvciYpIGNvbnN0OworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgdmlz
aXRSZWZlcmVuY2VkT2JqZWN0U3RvcmVzKFZpc2l0b3ImKSBjb25zdDsKIAogICAgIFdFQkNPUkVf
RVhQT1JUIHN0YXRpYyBzdGQ6OmF0b21pYzx1bnNpZ25lZD4gbnVtYmVyT2ZJREJUcmFuc2FjdGlv
bnM7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9CdWZmZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9C
dWZmZXIuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmF1ZGlvL0F1ZGlvQnVmZmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8q
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE1NCwxMiArMTU0LDE2IEBAIEV4
Y2VwdGlvbk9yPEpTQzo6SlNWYWx1ZT4gQXVkaW9CdWZmZXI6OmcKICAgICByZXR1cm4gY29uc3Ry
dWN0SlNBcnJheSgpOwogfQogCi12b2lkIEF1ZGlvQnVmZmVyOjp2aXNpdENoYW5uZWxXcmFwcGVy
cyhKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4K
K3ZvaWQgQXVkaW9CdWZmZXI6OnZpc2l0Q2hhbm5lbFdyYXBwZXJzKFZpc2l0b3ImIHZpc2l0b3Ip
CiB7CiAgICAgZm9yIChhdXRvJiBjaGFubmVsV3JhcHBlciA6IG1fY2hhbm5lbFdyYXBwZXJzKQog
ICAgICAgICBjaGFubmVsV3JhcHBlci52aXNpdCh2aXNpdG9yKTsKIH0KIAordGVtcGxhdGUgdm9p
ZCBBdWRpb0J1ZmZlcjo6dmlzaXRDaGFubmVsV3JhcHBlcnMoSlNDOjpBYnN0cmFjdFNsb3RWaXNp
dG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEF1ZGlvQnVmZmVyOjp2aXNpdENoYW5uZWxXcmFwcGVycyhK
U0M6OlNsb3RWaXNpdG9yJik7CisKIFJlZlB0cjxGbG9hdDMyQXJyYXk+IEF1ZGlvQnVmZmVyOjpj
aGFubmVsRGF0YSh1bnNpZ25lZCBjaGFubmVsSW5kZXgpCiB7CiAgICAgaWYgKGNoYW5uZWxJbmRl
eCA+PSBtX2NoYW5uZWxzLnNpemUoKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
YXVkaW8vQXVkaW9CdWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmF1ZGlvL0F1ZGlvQnVmZmVyLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9CdWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2
ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTc1LDcgKzc1
LDcgQEAgcHVibGljOgogCiAgICAgc2l6ZV90IG1lbW9yeUNvc3QoKSBjb25zdDsKIAotICAgIHZv
aWQgdmlzaXRDaGFubmVsV3JhcHBlcnMoSlNDOjpTbG90VmlzaXRvciYpOworICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgdmlzaXRDaGFubmVsV3JhcHBlcnMoVmlzaXRvciYpOwog
ICAgIAogcHJpdmF0ZToKICAgICBBdWRpb0J1ZmZlcih1bnNpZ25lZCBudW1iZXJPZkNoYW5uZWxz
LCBzaXplX3QgbGVuZ3RoLCBmbG9hdCBzYW1wbGVSYXRlLCBMZWdhY3lQcmV2ZW50RGV0YWNoaW5n
ID0gTGVnYWN5UHJldmVudERldGFjaGluZzo6Tm8pOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvRE9NR0NPdXRwdXRDb25zdHJhaW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9ET01HQ091dHB1dENvbnN0cmFpbnQuY3BwCShyZXZpc2lvbiAy
NzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9ET01HQ091dHB1dENvbnN0cmFp
bnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OSw3ICs0OSw3IEBAIERPTUdDT3V0cHV0Q29uc3Ry
YWludDo6fkRPTUdDT3V0cHV0Q29uc3QKIHsKIH0KIAotdm9pZCBET01HQ091dHB1dENvbnN0cmFp
bnQ6OmV4ZWN1dGVJbXBsKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBET01HQ091dHB1dENv
bnN0cmFpbnQ6OmV4ZWN1dGVJbXBsKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAg
ICAgSGVhcCYgaGVhcCA9IG1fdm0uaGVhcDsKICAgICAKQEAgLTYwLDcgKzYwLDcgQEAgdm9pZCBE
T01HQ091dHB1dENvbnN0cmFpbnQ6OmV4ZWN1dGVJbXBsKAogICAgIAogICAgIG1fY2xpZW50RGF0
YS5mb3JFYWNoT3V0cHV0Q29uc3RyYWludFNwYWNlKAogICAgICAgICBbJl0gKFN1YnNwYWNlJiBz
dWJzcGFjZSkgewotICAgICAgICAgICAgYXV0byBmdW5jID0gW10gKFNsb3RWaXNpdG9yJiB2aXNp
dG9yLCBIZWFwQ2VsbCogaGVhcENlbGwsIEhlYXBDZWxsOjpLaW5kKSB7CisgICAgICAgICAgICBh
dXRvIGZ1bmMgPSBbXSAoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvciwgSGVhcENlbGwqIGhl
YXBDZWxsLCBIZWFwQ2VsbDo6S2luZCkgewogICAgICAgICAgICAgICAgIFNldFJvb3RNYXJrUmVh
c29uU2NvcGUgcm9vdFNjb3BlKHZpc2l0b3IsIFJvb3RNYXJrUmVhc29uOjpET01HQ091dHB1dCk7
CiAgICAgICAgICAgICAgICAgSlNDZWxsKiBjZWxsID0gc3RhdGljX2Nhc3Q8SlNDZWxsKj4oaGVh
cENlbGwpOwogICAgICAgICAgICAgICAgIGNlbGwtPm1ldGhvZFRhYmxlKHZpc2l0b3Iudm0oKSkt
PnZpc2l0T3V0cHV0Q29uc3RyYWludHMoY2VsbCwgdmlzaXRvcik7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9ET01HQ091dHB1dENvbnN0cmFpbnQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9ET01HQ091dHB1dENvbnN0cmFpbnQuaAkocmV2aXNp
b24gMjcyODMwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvRE9NR0NPdXRwdXRDb25z
dHJhaW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDE3LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00Miw3ICs0Miw3IEBAIHB1YmxpYzoKICAgICB+
RE9NR0NPdXRwdXRDb25zdHJhaW50KCk7CiAgICAgCiBwcm90ZWN0ZWQ6Ci0gICAgdm9pZCBleGVj
dXRlSW1wbChKU0M6OlNsb3RWaXNpdG9yJikgb3ZlcnJpZGU7CisgICAgdm9pZCBleGVjdXRlSW1w
bChKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKSBvdmVycmlkZTsKIAogcHJpdmF0ZToKICAgICBK
U0M6OlZNJiBtX3ZtOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNBYm9ydENv
bnRyb2xsZXJDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTQWJvcnRDb250cm9sbGVyQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNBYm9ydENvbnRyb2xsZXJDdXN0b20uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyogQ29weXJpZ2h0IChDKSAyMDE5LTIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogKgogKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC0yOCw5ICsyOCwxMyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgSlNBYm9y
dENvbnRyb2xsZXI6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZp
c2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0Fib3J0Q29udHJvbGxl
cjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB2aXNp
dG9yLmFkZE9wYXF1ZVJvb3QoJndyYXBwZWQoKS5zaWduYWwoKSk7CiB9CiAKK3RlbXBsYXRlIHZv
aWQgSlNBYm9ydENvbnRyb2xsZXI6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6QWJzdHJh
Y3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU0Fib3J0Q29udHJvbGxlcjo6dmlzaXRB
ZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYpOworCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Fib3J0U2lnbmFsQ3Vz
dG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Fib3J0
U2lnbmFsQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNBYm9ydFNpZ25hbEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorKiBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAqCiAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI4LDcgKzI4LDcgQEAK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1ib29sIEpTQWJvcnRTaWduYWxPd25lcjo6aXNSZWFj
aGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZv
aWQqLCBKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQorYm9v
bCBKU0Fib3J0U2lnbmFsT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFu
ZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9y
JiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQogewogICAgIGF1dG8mIGFib3J0U2lnbmFs
ID0gSlNDOjpqc0Nhc3Q8SlNBYm9ydFNpZ25hbCo+KGhhbmRsZS5zbG90KCktPmFzQ2VsbCgpKS0+
d3JhcHBlZCgpOwogICAgIGlmIChhYm9ydFNpZ25hbC5pc0ZpcmluZ0V2ZW50TGlzdGVuZXJzKCkp
IHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXR0ckN1c3RvbS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNBdHRyQ3VzdG9tLmNwcAko
cmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNBdHRyQ3Vz
dG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDcsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDA3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMywxMCArMzMsMTQgQEAKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIEpTQXR0cjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4o
SlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2
b2lkIEpTQXR0cjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsK
ICAgICBpZiAoRWxlbWVudCogZWxlbWVudCA9IHdyYXBwZWQoKS5vd25lckVsZW1lbnQoKSkKICAg
ICAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHJvb3QoZWxlbWVudCkpOwogfQogCit0ZW1wbGF0
ZSB2b2lkIEpTQXR0cjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpBYnN0cmFjdFNsb3RW
aXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTQXR0cjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4o
SlNDOjpTbG90VmlzaXRvciYpOworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0F1ZGlvQnVmZmVyQ3VzdG9tLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0F1ZGlvQnVmZmVyQ3VzdG9tLmNwcAko
cmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNBdWRpb0J1
ZmZlckN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAyMC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzEsMTEgKzMxLDE1IEBACiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCi12b2lkIEpTQXVkaW9CdWZmZXI6OnZp
c2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlw
ZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNBdWRpb0J1ZmZlcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRy
ZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB3cmFwcGVkKCkudmlzaXRDaGFubmVsV3JhcHBl
cnModmlzaXRvcik7CiB9CiAKK3RlbXBsYXRlIHZvaWQgSlNBdWRpb0J1ZmZlcjo6dmlzaXRBZGRp
dGlvbmFsQ2hpbGRyZW4oQWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU0F1
ZGlvQnVmZmVyOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYpOworCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoV0VCX0FVRElPKQpJbmRleDog
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNBdWRpb1RyYWNrQ3VzdG9tLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0F1ZGlvVHJhY2tDdXN0b20uY3Bw
CShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0F1ZGlv
VHJhY2tDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTEtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM1LDExICszNSwxNSBAQAogbmFtZXNwYWNl
IFdlYkNvcmUgewogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAotdm9pZCBKU0F1ZGlvVHJhY2s6OnZp
c2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlw
ZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNBdWRpb1RyYWNrOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJl
bihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChyb290KCZ3
cmFwcGVkKCkpKTsKIH0KIAordGVtcGxhdGUgdm9pZCBKU0F1ZGlvVHJhY2s6OnZpc2l0QWRkaXRp
b25hbENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNBdWRp
b1RyYWNrOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYpOworCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNBdWRpb1RyYWNrTGlzdEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNBdWRpb1RyYWNrTGlzdEN1c3RvbS5jcHAJKHJldmlzaW9uIDI3Mjgz
MCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXVkaW9UcmFja0xpc3RDdXN0b20u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTEtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTM2LDExICszNiwxNSBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewog
dXNpbmcgbmFtZXNwYWNlIEpTQzsKIAotdm9pZCBKU0F1ZGlvVHJhY2tMaXN0Ojp2aXNpdEFkZGl0
aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZp
c2l0b3I+Cit2b2lkIEpTQXVkaW9UcmFja0xpc3Q6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZp
c2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHJvb3Qod3JhcHBl
ZCgpLmVsZW1lbnQoKSkpOwogfQogCit0ZW1wbGF0ZSB2b2lkIEpTQXVkaW9UcmFja0xpc3Q6OnZp
c2l0QWRkaXRpb25hbENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZv
aWQgSlNBdWRpb1RyYWNrTGlzdDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3Im
KTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTQXVkaW9Xb3JrbGV0UHJvY2Vzc29yQ3VzdG9tLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0F1ZGlvV29ya2xldFByb2Nlc3Nv
ckN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTQXVkaW9Xb3JrbGV0UHJvY2Vzc29yQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIwLTIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMSw3
ICszMSw4IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCi12
b2lkIEpTQXVkaW9Xb3JrbGV0UHJvY2Vzc29yOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90
VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTQXVk
aW9Xb3JrbGV0UHJvY2Vzc29yOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNp
dG9yKQogewogICAgIGF1dG8mIHByb2Nlc3NvciA9IHdyYXBwZWQoKTsKICAgICBwcm9jZXNzb3Iu
anNJbnB1dHNXcmFwcGVyKCkudmlzaXQodmlzaXRvcik7CkBAIC0zOSw2ICs0MCw5IEBAIHZvaWQg
SlNBdWRpb1dvcmtsZXRQcm9jZXNzb3I6OnZpc2l0QWRkaXQKICAgICBwcm9jZXNzb3IuanNQYXJh
bVZhbHVlc1dyYXBwZXIoKS52aXNpdCh2aXNpdG9yKTsKIH0KIAordGVtcGxhdGUgdm9pZCBKU0F1
ZGlvV29ya2xldFByb2Nlc3Nvcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oQWJzdHJhY3RTbG90
VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU0F1ZGlvV29ya2xldFByb2Nlc3Nvcjo6dmlzaXRB
ZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQl9BVURJTykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTQ1NTUnVsZUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNDU1NSdWxlQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDU1NSdWxlQ3VzdG9tLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDggQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC01MSwxMSArNTEsMTUgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5h
bWVzcGFjZSBKU0M7CiAKLXZvaWQgSlNDU1NSdWxlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihT
bG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpT
Q1NTUnVsZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAg
ICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qocm9vdCgmd3JhcHBlZCgpKSk7CiB9CiAKK3RlbXBsYXRl
IHZvaWQgSlNDU1NSdWxlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihBYnN0cmFjdFNsb3RWaXNp
dG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTQ1NTUnVsZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4o
U2xvdFZpc2l0b3ImKTsKKwogSlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTR2xvYmFsT2JqZWN0
KiwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmPENTU1J1bGU+JiYgcnVsZSkK
IHsKICAgICBzd2l0Y2ggKHJ1bGUtPnR5cGUoKSkgewpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNDU1NSdWxlTGlzdEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNDU1NSdWxlTGlzdEN1c3RvbS5jcHAJKHJldmlzaW9uIDI3Mjgz
MCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ1NTUnVsZUxpc3RDdXN0b20uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAw
OS0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDA5LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHQgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTM2LDcgKzM2LDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVz
aW5nIG5hbWVzcGFjZSBKU0M7CiAKLWJvb2wgSlNDU1NSdWxlTGlzdE93bmVyOjppc1JlYWNoYWJs
ZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCos
IFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQorYm9vbCBKU0NTU1J1
bGVMaXN0T3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6
VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvciwgY29u
c3QgY2hhcioqIHJlYXNvbikKIHsKICAgICBKU0NTU1J1bGVMaXN0KiBqc0NTU1J1bGVMaXN0ID0g
anNDYXN0PEpTQ1NTUnVsZUxpc3QqPihoYW5kbGUuc2xvdCgpLT5hc0NlbGwoKSk7CiAgICAgaWYg
KCFqc0NTU1J1bGVMaXN0LT5oYXNDdXN0b21Qcm9wZXJ0aWVzKGpzQ1NTUnVsZUxpc3QtPnZtKCkp
KQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDU1NTdHlsZURlY2xhcmF0aW9u
Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NT
U1N0eWxlRGVjbGFyYXRpb25DdXN0b20uY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NTU1N0eWxlRGVjbGFyYXRpb25DdXN0b20uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNy0y
MDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtNTEsOSArNTEsMTMgQEAgdm9pZCogcm9vdChDU1NTdHlsZURlY2xhcmF0
aW9uKiBzdHlsZSkKICAgICByZXR1cm4gc3R5bGU7CiB9CiAKLXZvaWQgSlNDU1NTdHlsZURlY2xh
cmF0aW9uOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3Rl
bXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTQ1NTU3R5bGVEZWNsYXJhdGlvbjo6dmlz
aXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB2aXNpdG9yLmFk
ZE9wYXF1ZVJvb3Qocm9vdCgmd3JhcHBlZCgpKSk7CiB9CiAKK3RlbXBsYXRlIHZvaWQgSlNDU1NT
dHlsZURlY2xhcmF0aW9uOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihBYnN0cmFjdFNsb3RWaXNp
dG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTQ1NTU3R5bGVEZWNsYXJhdGlvbjo6dmlzaXRBZGRpdGlv
bmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDYWxsYmFja0RhdGEuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2FsbGJhY2tEYXRhLmNwcAkocmV2
aXNpb24gMjcyODMwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDYWxsYmFja0Rh
dGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAwNy0yMDA5LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAwNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtOTUsMTIgKzk1LDE2IEBAIEpTVmFsdWUg
SlNDYWxsYmFja0RhdGE6Omludm9rZUNhbGxiYWNrKEoKICAgICByZXR1cm4gcmVzdWx0OwogfQog
Ci12b2lkIEpTQ2FsbGJhY2tEYXRhV2Vhazo6dmlzaXRKU0Z1bmN0aW9uKEpTQzo6U2xvdFZpc2l0
b3ImIHZpc3RvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTQ2FsbGJhY2tE
YXRhV2Vhazo6dmlzaXRKU0Z1bmN0aW9uKFZpc2l0b3ImIHZpc2l0b3IpCiB7Ci0gICAgdmlzdG9y
LmFwcGVuZChtX2NhbGxiYWNrKTsKKyAgICB2aXNpdG9yLmFwcGVuZChtX2NhbGxiYWNrKTsKIH0K
IAotYm9vbCBKU0NhbGxiYWNrRGF0YVdlYWs6OldlYWtPd25lcjo6aXNSZWFjaGFibGVGcm9tT3Bh
cXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCwgU2xvdFZp
c2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCit0ZW1wbGF0ZSB2b2lkIEpTQ2Fs
bGJhY2tEYXRhV2Vhazo6dmlzaXRKU0Z1bmN0aW9uKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYp
OwordGVtcGxhdGUgdm9pZCBKU0NhbGxiYWNrRGF0YVdlYWs6OnZpc2l0SlNGdW5jdGlvbihKU0M6
OlNsb3RWaXNpdG9yJik7CisKK2Jvb2wgSlNDYWxsYmFja0RhdGFXZWFrOjpXZWFrT3duZXI6Omlz
UmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQq
IGNvbnRleHQsIEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFz
b24pCiB7CiAgICAgaWYgKFVOTElLRUxZKHJlYXNvbikpCiAgICAgICAgICpyZWFzb24gPSAiQ29u
dGV4dCBpcyBvcGFxdWUgcm9vdCI7IC8vIEZJWE1FOiB3aGF0IGlzIHRoZSBjb250ZXh0LgpJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDYWxsYmFja0RhdGEuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NhbGxiYWNrRGF0YS5oCShyZXZpc2lv
biAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NhbGxiYWNrRGF0YS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAw
Ny0yMDA5LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAwNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTEzLDExICsxMTMsMTEgQEAgcHVibGljOgogICAg
ICAgICByZXR1cm4gSlNDYWxsYmFja0RhdGE6Omludm9rZUNhbGxiYWNrKCpnbG9iYWxPYmplY3Qs
IGNhbGxiYWNrKCksIHRoaXNWYWx1ZSwgYXJncywgY2FsbGJhY2tUeXBlLCBmdW5jdGlvbk5hbWUs
IHJldHVybmVkRXhjZXB0aW9uKTsKICAgICB9CiAKLSAgICB2b2lkIHZpc2l0SlNGdW5jdGlvbihK
U0M6OlNsb3RWaXNpdG9yJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCB2
aXNpdEpTRnVuY3Rpb24oVmlzaXRvciYpOwogCiBwcml2YXRlOgogICAgIGNsYXNzIFdlYWtPd25l
ciA6IHB1YmxpYyBKU0M6OldlYWtIYW5kbGVPd25lciB7Ci0gICAgICAgIGJvb2wgaXNSZWFjaGFi
bGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4
dCwgSlNDOjpTbG90VmlzaXRvciYsIGNvbnN0IGNoYXIqKikgb3ZlcnJpZGU7CisgICAgICAgIGJv
b2wgaXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwg
dm9pZCogY29udGV4dCwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiwgY29uc3QgY2hhcioqKSBv
dmVycmlkZTsKICAgICB9OwogICAgIFdlYWtPd25lciBtX3dlYWtPd25lcjsKICAgICBKU0M6Oldl
YWs8SlNDOjpKU09iamVjdD4gbV9jYWxsYmFjazsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQ3VzdG9tLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREN1
c3RvbS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI0LDcgKzI0LDcg
QEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1ib29sIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJET3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5r
bm93bj4gaGFuZGxlLCB2b2lkKiwgSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hh
cioqIHJlYXNvbikKK2Jvb2wgSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRPd25lcjo6aXNSZWFj
aGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZv
aWQqLCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFz
b24pCiB7CiAgICAgaWYgKFVOTElLRUxZKHJlYXNvbikpCiAgICAgICAgICpyZWFzb24gPSAiQ2Fu
dmFzIGlzIG9wYXF1ZSByb290IjsKQEAgLTM0LDkgKzM0LDEzIEBAIGJvb2wgSlNDYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkRPd25lcjo6aXMKICAgICByZXR1cm4gdmlzaXRvci5jb250YWluc09wYXF1
ZVJvb3Qocm9vdCk7CiB9CiAKLXZvaWQgSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnZpc2l0
QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0
eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6dmlzaXRB
ZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB2aXNpdG9yLmFkZE9w
YXF1ZVJvb3Qocm9vdCh3cmFwcGVkKCkuY2FudmFzKCkpKTsKIH0KIAordGVtcGxhdGUgdm9pZCBK
U0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpB
YnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJik7CisKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
Q3VzdG9tRXZlbnRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTQ3VzdG9tRXZlbnRDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0N1c3RvbUV2ZW50Q3VzdG9tLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxOCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTQyLDEwICs0MiwxNCBAQCBKU0M6OkpTVmFsdWUgSlNDdXN0b21FdmVudDo6ZGV0
YWlsKEpTQzo6CiAgICAgfSk7CiB9CiAKLXZvaWQgSlNDdXN0b21FdmVudDo6dmlzaXRBZGRpdGlv
bmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1l
IFZpc2l0b3I+Cit2b2lkIEpTQ3VzdG9tRXZlbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZp
c2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgd3JhcHBlZCgpLmRldGFpbCgpLnZpc2l0KHZpc2l0b3Ip
OwogICAgIHdyYXBwZWQoKS5jYWNoZWREZXRhaWwoKS52aXNpdCh2aXNpdG9yKTsKIH0KIAordGVt
cGxhdGUgdm9pZCBKU0N1c3RvbUV2ZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OkFi
c3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNDdXN0b21FdmVudDo6dmlzaXRB
ZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYpOworCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJ1aWx0aW5Db25z
dHJ1Y3RvckJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTRE9NQnVpbHRpbkNvbnN0cnVjdG9yQmFzZS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQnVpbHRpbkNvbnN0cnVjdG9yQmFzZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMTk5
OS0yMDAxIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCi0gKiAgQ29weXJpZ2h0IChDKSAy
MDA0LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAo
QykgMjAwNC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqICBDb3B5cmln
aHQgKEMpIDIwMDcgU2FtdWVsIFdlaW5pZyA8c2FtQHdlYmtpdC5vcmc+CiAgKiAgQ29weXJpZ2h0
IChDKSAyMDEzIE1pY2hhZWwgUHJ1ZXR0IDxtaWNoYWVsQDY4ay5vcmc+CiAgKgpAQCAtNDUsNyAr
NDUsOCBAQCB2b2lkIEpTRE9NQnVpbHRpbkNvbnN0cnVjdG9yQmFzZTo6Y2FsbEZ1CiAgICAgSlND
OjpjYWxsKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAmZnVuY3Rpb24sIGNhbGxEYXRhLCAmdGhpc09i
amVjdCwgYXJndW1lbnRzKTsKIH0KIAotdm9pZCBKU0RPTUJ1aWx0aW5Db25zdHJ1Y3RvckJhc2U6
OnZpc2l0Q2hpbGRyZW4oSlNDOjpKU0NlbGwqIGNlbGwsIEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0
b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0RPTUJ1aWx0aW5Db25zdHJ1
Y3RvckJhc2U6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQzo6SlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2
aXNpdG9yKQogewogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNET01CdWlsdGluQ29u
c3RydWN0b3JCYXNlKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlz
T2JqZWN0LCBpbmZvKCkpOwpAQCAtNTMsNiArNTQsOCBAQCB2b2lkIEpTRE9NQnVpbHRpbkNvbnN0
cnVjdG9yQmFzZTo6dmlzaXRDCiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9pbml0
aWFsaXplRnVuY3Rpb24pOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNET01CdWlsdGlu
Q29uc3RydWN0b3JCYXNlKTsKKwogSlNDOjpJc29TdWJzcGFjZSogSlNET01CdWlsdGluQ29uc3Ry
dWN0b3JCYXNlOjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCiB7CiAgICAgcmV0dXJuICZz
dGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpLT5kb21CdWlsdGluQ29u
c3RydWN0b3JTcGFjZSgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01C
dWlsdGluQ29uc3RydWN0b3JCYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNET01CdWlsdGluQ29uc3RydWN0b3JCYXNlLmgJKHJldmlzaW9uIDI3MjgzMCkK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQnVpbHRpbkNvbnN0cnVjdG9yQmFz
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMp
IDIwMTUsIDIwMTYgQ2Fub24gSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogIENvcHlyaWdo
dCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0
IChDKSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5l
cmFsIFB1YmxpYwpAQCAtNDIsNyArNDIsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgewogICAgIH0KIAot
ICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNp
dG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIEpTQzo6SlNGdW5jdGlv
biogaW5pdGlhbGl6ZUZ1bmN0aW9uKCk7CiAgICAgdm9pZCBzZXRJbml0aWFsaXplRnVuY3Rpb24o
SlNDOjpWTSYsIEpTQzo6SlNGdW5jdGlvbiYpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNET01HbG9iYWxPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0LmNwcAkocmV2aXNpb24gMjcyODMwKQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01HbG9iYWxPYmplY3QuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOC0yMDE4IEFw
cGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDIx
IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMjM4LDcgKzIzOCw4IEBAIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIEpTRE9N
R2xvYmFsT2JqZWMKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotdm9pZCBKU0RPTUdsb2JhbE9i
amVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQor
dGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNET01HbG9iYWxPYmplY3Q6OnZpc2l0
Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU0RP
TUdsb2JhbE9iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGNl
bGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsK
QEAgLTI2MCw2ICsyNjEsOCBAQCB2b2lkIEpTRE9NR2xvYmFsT2JqZWN0Ojp2aXNpdENoaWxkcmVu
KEpTCiAgICAgdGhpc09iamVjdC0+bV9idWlsdGluSW50ZXJuYWxGdW5jdGlvbnMudmlzaXQodmlz
aXRvcik7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU0RPTUdsb2JhbE9iamVjdCk7CisK
IHZvaWQgSlNET01HbG9iYWxPYmplY3Q6OnByb21pc2VSZWplY3Rpb25UcmFja2VyKEpTR2xvYmFs
T2JqZWN0KiBqc0dsb2JhbE9iamVjdCwgSlNQcm9taXNlKiBwcm9taXNlLCBKU1Byb21pc2VSZWpl
Y3Rpb25PcGVyYXRpb24gb3BlcmF0aW9uKQogewogICAgIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndo
YXR3Zy5vcmcvbXVsdGlwYWdlL3dlYmFwcGFwaXMuaHRtbCN0aGUtaG9zdHByb21pc2VyZWplY3Rp
b250cmFja2VyLWltcGxlbWVudGF0aW9uCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0RPTUdsb2JhbE9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0LmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTggQXBwbGUgSW5jLiBB
bGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMjEgQXBwbGUgSW5j
LiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC02OSw3ICs2OSw3IEBAIHB1YmxpYzoKICAgICAvLyBNYWtlIGJpbmRpbmcgY29kZSBnZW5lcmF0
aW9uIGVhc2llci4KICAgICBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KCkgeyByZXR1
cm4gdGhpczsgfQogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0M6OkpTQ2VsbCos
IEpTQzo6U2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAg
RE9NV3JhcHBlcldvcmxkJiB3b3JsZCgpIHsgcmV0dXJuIG1fd29ybGQuZ2V0KCk7IH0KICAgICBi
b29sIHdvcmxkSXNOb3JtYWwoKSBjb25zdCB7IHJldHVybiBtX3dvcmxkSXNOb3JtYWw7IH0KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR3VhcmRlZE9iamVjdC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR3VhcmRlZE9iamVjdC5o
CShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUd1
YXJkZWRPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00MCw3ICs0MCw3IEBAIHB1YmxpYzoKIAogICAg
IGJvb2wgaXNTdXNwZW5kZWQoKSBjb25zdCB7IHJldHVybiAhbV9ndWFyZGVkIHx8ICFjYW5JbnZv
a2VDYWxsYmFjaygpOyB9IC8vIFRoZSB3cmFwcGVyIHdvcmxkIGhhcyBnb25lIGF3YXkgb3IgYWN0
aXZlIERPTSBvYmplY3RzIGhhdmUgYmVlbiBzdXNwZW5kZWQuCiAKLSAgICB2b2lkIHZpc2l0QWdn
cmVnYXRlKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsgdmlzaXRvci5hcHBlbmQobV9ndWFy
ZGVkKTsgfQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgdmlzaXRBZ2dyZWdh
dGUoVmlzaXRvciYgdmlzaXRvcikgeyB2aXNpdG9yLmFwcGVuZChtX2d1YXJkZWQpOyB9CiAKICAg
ICBKU0M6OkpTVmFsdWUgZ3VhcmRlZE9iamVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fZ3VhcmRlZC5n
ZXQoKTsgfQogICAgIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QoKSBjb25zdCB7IHJl
dHVybiBtX2dsb2JhbE9iamVjdC5nZXQoKTsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNET01RdWFkQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0RPTVF1YWRDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVF1YWRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTMzLDcgKzMzLDggQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBKU0M7
CiAKLXZvaWQgSlNET01RdWFkOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYg
dmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTRE9NUXVhZDo6dmlz
aXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB2aXNpdG9yLmFk
ZE9wYXF1ZVJvb3QoY29uc3RfY2FzdDxET01Qb2ludCo+KCZ3cmFwcGVkKCkucDEoKSkpOwogICAg
IHZpc2l0b3IuYWRkT3BhcXVlUm9vdChjb25zdF9jYXN0PERPTVBvaW50Kj4oJndyYXBwZWQoKS5w
MigpKSk7CkBAIC00MSw0ICs0Miw3IEBAIHZvaWQgSlNET01RdWFkOjp2aXNpdEFkZGl0aW9uYWxD
aGlsZHJlbigKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QoY29uc3RfY2FzdDxET01Qb2ludCo+
KCZ3cmFwcGVkKCkucDQoKSkpOwogfQogCi19Cit0ZW1wbGF0ZSB2b2lkIEpTRE9NUXVhZDo6dmlz
aXRBZGRpdGlvbmFsQ2hpbGRyZW4oQWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9p
ZCBKU0RPTVF1YWQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
RE9NV2luZG93Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0RPTVdpbmRvd0N1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAyMCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAyMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBAIC0xMTYsNyArMTE2LDggQEAg
SlNDX0RFRklORV9DVVNUT01fR0VUVEVSKGpzRE9NV2luZG93SW5zdAogICAgIHJldHVybiBub25D
YWNoaW5nU3RhdGljRnVuY3Rpb25HZXR0ZXJJbXBsPGpzRE9NV2luZG93SW5zdGFuY2VGdW5jdGlv
bl9wb3N0TWVzc2FnZSwgMj4oZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUpOwogfQogCi12b2lk
IEpTRE9NV2luZG93Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRv
cikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTRE9NV2luZG93Ojp2aXNpdEFk
ZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGlmIChGcmFtZSogZnJh
bWUgPSB3cmFwcGVkKCkuZnJhbWUoKSkKICAgICAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KGZy
YW1lKTsKQEAgLTEyOSw2ICsxMzAsOSBAQCB2b2lkIEpTRE9NV2luZG93Ojp2aXNpdEFkZGl0aW9u
YWxDaGlsZHJlCiAgICAgd3JhcHBlZCgpLnZpc2l0SlNFdmVudExpc3RlbmVycyh2aXNpdG9yKTsK
IH0KIAordGVtcGxhdGUgdm9pZCBKU0RPTVdpbmRvdzo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4o
QWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU0RPTVdpbmRvdzo6dmlzaXRB
ZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKKwogI2lmIEVOQUJMRShVU0VSX01FU1NB
R0VfSEFORExFUlMpCiBKU0NfREVGSU5FX0NVU1RPTV9HRVRURVIoanNET01XaW5kb3dfd2Via2l0
LCAoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRo
aXNWYWx1ZSwgUHJvcGVydHlOYW1lKSkKIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTRGVwcmVjYXRlZENTU09NVmFsdWVDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGVwcmVjYXRlZENTU09NVmFsdWVDdXN0b20uY3BwCShy
ZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RlcHJlY2F0
ZWRDU1NPTVZhbHVlQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM1LDcgKzM1LDcgQEAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKLWJvb2wgSlNEZXBy
ZWNhdGVkQ1NTT01WYWx1ZU93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6Okhh
bmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBj
b25zdCBjaGFyKiogcmVhc29uKQorYm9vbCBKU0RlcHJlY2F0ZWRDU1NPTVZhbHVlT3duZXI6Omlz
UmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxl
LCB2b2lkKiwgQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNv
bikKIHsKICAgICBKU0RlcHJlY2F0ZWRDU1NPTVZhbHVlKiBqc0NTU1ZhbHVlID0ganNDYXN0PEpT
RGVwcmVjYXRlZENTU09NVmFsdWUqPihoYW5kbGUuc2xvdCgpLT5hc0NlbGwoKSk7CiAgICAgaWYg
KCFqc0NTU1ZhbHVlLT5oYXNDdXN0b21Qcm9wZXJ0aWVzKGpzQ1NTVmFsdWUtPnZtKCkpKQpJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNEb2N1bWVudEN1c3RvbS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNEb2N1bWVudEN1c3RvbS5jcHAJ
KHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRG9jdW1l
bnRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAwNy0yMDA5LCAyMDExLCAyMDE2LCAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtOTEsMTEgKzkxLDE1IEBAIEpT
VmFsdWUgdG9KUyhKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2IKICAgICByZXR1cm4gdG9KU05l
d2x5Q3JlYXRlZChsZXhpY2FsR2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QsIFJlZjxEb2N1bWVu
dD4oZG9jdW1lbnQpKTsKIH0KIAotdm9pZCBKU0RvY3VtZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGls
ZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2
b2lkIEpTRG9jdW1lbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3Ip
CiB7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHN0YXRpY19jYXN0PFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqPigmd3JhcHBlZCgpKSk7CiB9CiAKK3RlbXBsYXRlIHZvaWQgSlNEb2N1bWVudDo6
dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oQWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUg
dm9pZCBKU0RvY3VtZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYpOwor
CiB2b2lkIEpTRG9jdW1lbnQ6OmFuYWx5emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFuYWx5emVy
JiBhbmFseXplcikKIHsKICAgICBCYXNlOjphbmFseXplSGVhcChjZWxsLCBhbmFseXplcik7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Vycm9yRXZlbnRDdXN0b20uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXJyb3JFdmVudEN1c3Rv
bS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
RXJyb3JFdmVudEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKgog
ICogQ29weXJpZ2h0IChDKSAyMDE4IFl1c3VrZSBTdXp1a2kgPHl1c3VrZXN1enVraUBzbG93c3Rh
cnQub3JnPi4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI4LDkgKzI5LDEzIEBA
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBKU0Vycm9yRXZlbnQ6OnZpc2l0QWRkaXRp
b25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBWaXNpdG9yPgordm9pZCBKU0Vycm9yRXZlbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZp
c2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgd3JhcHBlZCgpLm9yaWdpbmFsRXJyb3IoKS52aXNpdCh2
aXNpdG9yKTsKIH0KIAordGVtcGxhdGUgdm9pZCBKU0Vycm9yRXZlbnQ6OnZpc2l0QWRkaXRpb25h
bENoaWxkcmVuKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU0Vy
cm9yRXZlbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImKTsKKwog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNFdmVudExpc3RlbmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0V2ZW50TGlzdGVuZXIuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50TGlzdGVuZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDYgKzEsNiBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDIwMDEgUGV0ZXIgS2VsbHkgKHBta0Bw
b3N0LmNvbSkKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAxOSBBcHBsZSBJbmMuIEFsbCBSaWdo
dHMgUmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMjEgQXBwbGUgSW5jLiBBbGwg
UmlnaHRzIFJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwpAQCAtNzgsNyArNzgsOCBAQCBK
U09iamVjdCogSlNFdmVudExpc3RlbmVyOjppbml0aWFsaXplSlNGCiAgICAgcmV0dXJuIG51bGxw
dHI7CiB9CiAKLXZvaWQgSlNFdmVudExpc3RlbmVyOjp2aXNpdEpTRnVuY3Rpb24oU2xvdFZpc2l0
b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgoraW5saW5lIHZvaWQgSlNF
dmVudExpc3RlbmVyOjp2aXNpdEpTRnVuY3Rpb25JbXBsKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAg
ICAgLy8gSWYgbV93cmFwcGVyIGlzIG51bGwsIHdlIGFyZSBub3Qga2VlcGluZyBtX2pzRnVuY3Rp
b24gYWxpdmUuCiAgICAgaWYgKCFtX3dyYXBwZXIpCkBAIC04Nyw2ICs4OCw5IEBAIHZvaWQgSlNF
dmVudExpc3RlbmVyOjp2aXNpdEpTRnVuY3Rpb24oU2wKICAgICB2aXNpdG9yLmFwcGVuZChtX2pz
RnVuY3Rpb24pOwogfQogCit2b2lkIEpTRXZlbnRMaXN0ZW5lcjo6dmlzaXRKU0Z1bmN0aW9uKEFi
c3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsgdmlzaXRKU0Z1bmN0aW9uSW1wbCh2aXNpdG9y
KTsgfQordm9pZCBKU0V2ZW50TGlzdGVuZXI6OnZpc2l0SlNGdW5jdGlvbihTbG90VmlzaXRvciYg
dmlzaXRvcikgeyB2aXNpdEpTRnVuY3Rpb25JbXBsKHZpc2l0b3IpOyB9CisKIHN0YXRpYyB2b2lk
IGhhbmRsZUJlZm9yZVVubG9hZEV2ZW50UmV0dXJuVmFsdWUoQmVmb3JlVW5sb2FkRXZlbnQmIGV2
ZW50LCBjb25zdCBTdHJpbmcmIHJldHVyblZhbHVlKQogewogICAgIGlmIChyZXR1cm5WYWx1ZS5p
c051bGwoKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRMaXN0ZW5l
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRMaXN0
ZW5lci5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0V2ZW50TGlzdGVuZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiAg
Q29weXJpZ2h0IChDKSAyMDAxIFBldGVyIEtlbGx5IChwbWtAcG9zdC5jb20pCi0gKiAgQ29weXJp
Z2h0IChDKSAyMDAzLTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENv
cHlyaWdodCAoQykgMjAwMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNz
ZXIgR2VuZXJhbCBQdWJsaWMKQEAgLTYyLDYgKzYyLDkgQEAgcHVibGljOgogCiBwcml2YXRlOgog
ICAgIHZpcnR1YWwgSlNDOjpKU09iamVjdCogaW5pdGlhbGl6ZUpTRnVuY3Rpb24oU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCYpIGNvbnN0OworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4g
dm9pZCB2aXNpdEpTRnVuY3Rpb25JbXBsKFZpc2l0b3ImKTsKKyAgICB2b2lkIHZpc2l0SlNGdW5j
dGlvbihKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKSBmaW5hbDsKICAgICB2b2lkIHZpc2l0SlNG
dW5jdGlvbihKU0M6OlNsb3RWaXNpdG9yJikgZmluYWw7CiAKIHByb3RlY3RlZDoKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRUYXJnZXRDdXN0b20uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRUYXJnZXRDdXN0b20uY3Bw
CShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50
VGFyZ2V0Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDgtMjAxNyBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAyMSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTcyLDkgKzcyLDEzIEBAIHN0ZDo6
dW5pcXVlX3B0cjxKU0V2ZW50VGFyZ2V0V3JhcHBlcj4ganMKICAgICByZXR1cm4gbnVsbHB0cjsK
IH0KIAotdm9pZCBKU0V2ZW50VGFyZ2V0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90Vmlz
aXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTRXZlbnRU
YXJnZXQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAg
d3JhcHBlZCgpLnZpc2l0SlNFdmVudExpc3RlbmVycyh2aXNpdG9yKTsKIH0KIAordGVtcGxhdGUg
dm9pZCBKU0V2ZW50VGFyZ2V0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihBYnN0cmFjdFNsb3RW
aXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTRXZlbnRUYXJnZXQ6OnZpc2l0QWRkaXRpb25hbENo
aWxkcmVuKFNsb3RWaXNpdG9yJik7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRmV0Y2hFdmVudEN1c3RvbS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNGZXRjaEV2ZW50Q3VzdG9tLmNwcAko
cmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNGZXRjaEV2
ZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMCwxMSArMzAsMTUgQEAKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi12b2lkIEpTRmV0Y2hFdmVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4o
SlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2
b2lkIEpTRmV0Y2hFdmVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRv
cikKIHsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QoJndyYXBwZWQoKS5yZXF1ZXN0KCkpOwog
fQogCi19Cit0ZW1wbGF0ZSB2b2lkIEpTRmV0Y2hFdmVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRy
ZW4oSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTRmV0Y2hFdmVu
dDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYpOworCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNIVE1MQ2FudmFzRWxlbWVudEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNIVE1MQ2FudmFzRWxlbWVudEN1c3RvbS5jcHAJKHJldmlzaW9u
IDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTENhbnZhc0VsZW1l
bnRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMjAtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMxLDkgKzMxLDEzIEBACiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotdm9pZCBKU0hUTUxDYW52YXNFbGVtZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGls
ZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRv
cj4KK3ZvaWQgSlNIVE1MQ2FudmFzRWxlbWVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlz
aXRvciYgdmlzaXRvcikKIHsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qoc3RhdGljX2Nhc3Q8
Q2FudmFzQmFzZSo+KCZ3cmFwcGVkKCkpKTsKIH0KIAordGVtcGxhdGUgdm9pZCBKU0hUTUxDYW52
YXNFbGVtZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OkFic3RyYWN0U2xvdFZpc2l0
b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNIVE1MQ2FudmFzRWxlbWVudDo6dmlzaXRBZGRpdGlvbmFs
Q2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYpOworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxUZW1wbGF0ZUVsZW1lbnRDdXN0
b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTFRl
bXBsYXRlRWxlbWVudEN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTSFRNTFRlbXBsYXRlRWxlbWVudEN1c3RvbS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy
ZQpAQCAtMzcsMTAgKzM4LDE0IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3Bh
Y2UgSlNDOwogCi12b2lkIEpTSFRNTFRlbXBsYXRlRWxlbWVudDo6dmlzaXRBZGRpdGlvbmFsQ2hp
bGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0
b3I+Cit2b2lkIEpTSFRNTFRlbXBsYXRlRWxlbWVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4o
VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBpZiAoYXV0byogY29udGVudCA9IHdyYXBwZWQoKS5j
b250ZW50SWZBdmFpbGFibGUoKSkKICAgICAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHJvb3Qo
Y29udGVudCkpOwogfQogCit0ZW1wbGF0ZSB2b2lkIEpTSFRNTFRlbXBsYXRlRWxlbWVudDo6dmlz
aXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0
ZSB2b2lkIEpTSFRNTFRlbXBsYXRlRWxlbWVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlND
OjpTbG90VmlzaXRvciYpOworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hpc3RvcnlDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSGlzdG9yeUN1c3RvbS5jcHAJKHJldmlzaW9uIDI3
MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSGlzdG9yeUN1c3RvbS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4
LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDA4LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC00NCw5ICs0NCwxMyBAQCBKU1ZhbHVlIEpTSGlzdG9yeTo6c3Rh
dGUoSlNHbG9iYWxPYmplY3QmCiAgICAgfSk7CiB9CiAKLXZvaWQgSlNIaXN0b3J5Ojp2aXNpdEFk
ZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1l
IFZpc2l0b3I+Cit2b2lkIEpTSGlzdG9yeTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRv
ciYgdmlzaXRvcikKIHsKICAgICB3cmFwcGVkKCkuY2FjaGVkU3RhdGVGb3JHQygpLnZpc2l0KHZp
c2l0b3IpOwogfQogCit0ZW1wbGF0ZSB2b2lkIEpTSGlzdG9yeTo6dmlzaXRBZGRpdGlvbmFsQ2hp
bGRyZW4oQWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU0hpc3Rvcnk6OnZp
c2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CisKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCQ3Vyc29yQ3VzdG9t
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQkN1cnNv
ckN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTSURCQ3Vyc29yQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01MCw3ICs1MCw4IEBAIEpT
Qzo6SlNWYWx1ZSBKU0lEQkN1cnNvcjo6cHJpbWFyeUtleShKU0MKICAgICB9KTsKIH0KIAotdm9p
ZCBKU0lEQkN1cnNvcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0
b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0lEQkN1cnNvcjo6dmlzaXRB
ZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBhdXRvJiBjdXJzb3Ig
PSB3cmFwcGVkKCk7CiAgICAgaWYgKGF1dG8qIHJlcXVlc3QgPSBjdXJzb3IucmVxdWVzdCgpKQpA
QCAtNTksNiArNjAsOSBAQCB2b2lkIEpTSURCQ3Vyc29yOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJl
CiAgICAgY3Vyc29yLnByaW1hcnlLZXlXcmFwcGVyKCkudmlzaXQodmlzaXRvcik7CiB9CiAKK3Rl
bXBsYXRlIHZvaWQgSlNJREJDdXJzb3I6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEFic3RyYWN0
U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNJREJDdXJzb3I6OnZpc2l0QWRkaXRpb25h
bENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CisKIEpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6
OkpTR2xvYmFsT2JqZWN0KiwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmPElE
QkN1cnNvcj4mJiBjdXJzb3IpCiB7CiAgICAgaWYgKGlzPElEQkN1cnNvcldpdGhWYWx1ZT4oY3Vy
c29yKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCQ3Vyc29yV2l0aFZh
bHVlQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0lEQkN1cnNvcldpdGhWYWx1ZUN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCQ3Vyc29yV2l0aFZhbHVlQ3VzdG9tLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC00MywxMiArNDMsMTYgQEAgSlNDOjpKU1ZhbHVlIEpTSURCQ3Vyc29yV2l0aFZh
bHVlOjp2YWx1ZQogICAgIH0pOwogfQogCi12b2lkIEpTSURCQ3Vyc29yV2l0aFZhbHVlOjp2aXNp
dEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVu
YW1lIFZpc2l0b3I+Cit2b2lkIEpTSURCQ3Vyc29yV2l0aFZhbHVlOjp2aXNpdEFkZGl0aW9uYWxD
aGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTSURCQ3Vyc29yOjp2aXNpdEFkZGl0
aW9uYWxDaGlsZHJlbih2aXNpdG9yKTsKICAgICB3cmFwcGVkKCkudmFsdWVXcmFwcGVyKCkudmlz
aXQodmlzaXRvcik7CiB9CiAKK3RlbXBsYXRlIHZvaWQgSlNJREJDdXJzb3JXaXRoVmFsdWU6OnZp
c2l0QWRkaXRpb25hbENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZv
aWQgSlNJREJDdXJzb3JXaXRoVmFsdWU6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNp
dG9yJik7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShJTkRF
WEVEX0RBVEFCQVNFKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJJbmRl
eEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJ
REJJbmRleEN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTSURCSW5kZXhDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM0LDExICszNCwx
NSBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAotdm9pZCBK
U0lEQkluZGV4Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikK
K3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTSURCSW5kZXg6OnZpc2l0QWRkaXRp
b25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVS
b290KHN0YXRpY19jYXN0PElEQkluZGV4Jj4od3JhcHBlZCgpKS5vYmplY3RTdG9yZUFzT3BhcXVl
Um9vdCgpKTsKIH0KIAordGVtcGxhdGUgdm9pZCBKU0lEQkluZGV4Ojp2aXNpdEFkZGl0aW9uYWxD
aGlsZHJlbihBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTSURCSW5kZXg6
OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CisKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQpJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJPYmplY3RTdG9yZUN1c3RvbS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJPYmplY3RTdG9yZUN1c3Rv
bS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
SURCT2JqZWN0U3RvcmVDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAog
LyoKICAqIENvcHlyaWdodCAoQykgMjAxMiBNaWNoYWVsIFBydWV0dCA8bWljaGFlbEA2OGsub3Jn
PgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKQEAgLTM2LDExICszNywxNSBAQAog
bmFtZXNwYWNlIFdlYkNvcmUgewogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAotdm9pZCBKU0lEQk9i
amVjdFN0b3JlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikK
K3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTSURCT2JqZWN0U3RvcmU6OnZpc2l0
QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgc3RhdGljX2Nhc3Q8
SURCT2JqZWN0U3RvcmUmPih3cmFwcGVkKCkpLnZpc2l0UmVmZXJlbmNlZEluZGV4ZXModmlzaXRv
cik7CiB9CiAKLX0KK3RlbXBsYXRlIHZvaWQgSlNJREJPYmplY3RTdG9yZTo6dmlzaXRBZGRpdGlv
bmFsQ2hpbGRyZW4oQWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU0lEQk9i
amVjdFN0b3JlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYpOworCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNJREJSZXF1ZXN0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0lEQlJlcXVlc3RDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI4MzApCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQlJlcXVlc3RDdXN0b20uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTg5LDEyICs4OSwxNyBAQCBKU0M6OkpTVmFsdWUgSlNJREJSZXF1ZXN0OjpyZXN1
bHQoSlNDOjpKCiAgICAgfSk7CiB9CiAKLXZvaWQgSlNJREJSZXF1ZXN0Ojp2aXNpdEFkZGl0aW9u
YWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0
b3I+Cit2b2lkIEpTSURCUmVxdWVzdDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYg
dmlzaXRvcikKIHsKICAgICBhdXRvJiByZXF1ZXN0ID0gd3JhcHBlZCgpOwogICAgIHJlcXVlc3Qu
cmVzdWx0V3JhcHBlcigpLnZpc2l0KHZpc2l0b3IpOwogICAgIHJlcXVlc3QuY3Vyc29yV3JhcHBl
cigpLnZpc2l0KHZpc2l0b3IpOwogfQogCi19Cit0ZW1wbGF0ZSB2b2lkIEpTSURCUmVxdWVzdDo6
dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oQWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUg
dm9pZCBKU0lEQlJlcXVlc3Q6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJik7
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwogI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RB
VEFCQVNFKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJUcmFuc2FjdGlv
bkN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJ
REJUcmFuc2FjdGlvbkN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTSURCVHJhbnNhY3Rpb25DdXN0b20uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTM0LDExICszNCwxNSBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogdXNpbmcgbmFtZXNwYWNlIEpT
QzsKIAotdm9pZCBKU0lEQlRyYW5zYWN0aW9uOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90
VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTSURC
VHJhbnNhY3Rpb246OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7
CiAgICAgc3RhdGljX2Nhc3Q8SURCVHJhbnNhY3Rpb24mPih3cmFwcGVkKCkpLnZpc2l0UmVmZXJl
bmNlZE9iamVjdFN0b3Jlcyh2aXNpdG9yKTsKIH0KIAotfQordGVtcGxhdGUgdm9pZCBKU0lEQlRy
YW5zYWN0aW9uOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihBYnN0cmFjdFNsb3RWaXNpdG9yJik7
Cit0ZW1wbGF0ZSB2b2lkIEpTSURCVHJhbnNhY3Rpb246OnZpc2l0QWRkaXRpb25hbENoaWxkcmVu
KFNsb3RWaXNpdG9yJik7CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0ludGVyc2VjdGlvbk9ic2VydmVyQ3VzdG9t
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0ludGVyc2Vj
dGlvbk9ic2VydmVyQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNJbnRlcnNlY3Rpb25PYnNlcnZlckN1c3RvbS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDIwIElnYWxpYSBT
LkwuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMCwxMCArMzEsMTQgQEAKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIEpTSW50ZXJzZWN0aW9uT2JzZXJ2ZXI6OnZpc2l0
QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0
eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0ludGVyc2VjdGlvbk9ic2VydmVyOjp2aXNpdEFkZGl0
aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGlmIChhdXRvKiBjYWxsYmFj
ayA9IHdyYXBwZWQoKS5jYWxsYmFja0NvbmN1cnJlbnRseSgpKQogICAgICAgICBjYWxsYmFjay0+
dmlzaXRKU0Z1bmN0aW9uKHZpc2l0b3IpOwogfQogCi19Cit0ZW1wbGF0ZSB2b2lkIEpTSW50ZXJz
ZWN0aW9uT2JzZXJ2ZXI6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6QWJzdHJhY3RTbG90
VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU0ludGVyc2VjdGlvbk9ic2VydmVyOjp2aXNpdEFk
ZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJik7CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW50ZXJzZWN0aW9uT2Jz
ZXJ2ZXJFbnRyeUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNJbnRlcnNlY3Rpb25PYnNlcnZlckVudHJ5Q3VzdG9tLmNwcAkocmV2aXNpb24gMjcy
ODMwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJbnRlcnNlY3Rpb25PYnNlcnZl
ckVudHJ5Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBD
b3B5cmlnaHQgKEMpIDIwMTggR29vZ2xlIExMQy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMwLDcgKzMxLDggQEAKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi12b2lkIEpTSW50ZXJzZWN0aW9uT2JzZXJ2ZXJFbnRyeTo6dmlzaXRBZGRpdGlv
bmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1l
IFZpc2l0b3I+Cit2b2lkIEpTSW50ZXJzZWN0aW9uT2JzZXJ2ZXJFbnRyeTo6dmlzaXRBZGRpdGlv
bmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJv
b3Qocm9vdCh3cmFwcGVkKCkudGFyZ2V0KCkpKTsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qo
d3JhcHBlZCgpLmJvdW5kaW5nQ2xpZW50UmVjdCgpKTsKQEAgLTM4LDQgKzQwLDcgQEAgdm9pZCBK
U0ludGVyc2VjdGlvbk9ic2VydmVyRW50cnk6OnZpc2l0QQogICAgIHZpc2l0b3IuYWRkT3BhcXVl
Um9vdCh3cmFwcGVkKCkucm9vdEJvdW5kcygpKTsKIH0KIAotfQordGVtcGxhdGUgdm9pZCBKU0lu
dGVyc2VjdGlvbk9ic2VydmVyRW50cnk6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6QWJz
dHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU0ludGVyc2VjdGlvbk9ic2VydmVy
RW50cnk6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImKTsKKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNN
ZXNzYWdlQ2hhbm5lbEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNNZXNzYWdlQ2hhbm5lbEN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWVzc2FnZUNoYW5uZWxDdXN0b20uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCwg
MjAwOSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDgtMjAyMSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTMzLDcgKzMzLDggQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci12b2lkIEpTTWVzc2FnZUNoYW5uZWw6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xv
dFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU01l
c3NhZ2VDaGFubmVsOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQog
ewogICAgIGlmIChNZXNzYWdlUG9ydCogcG9ydCA9IHdyYXBwZWQoKS5wb3J0MSgpKQogICAgICAg
ICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QocG9ydCk7CkBAIC00Miw2ICs0Myw5IEBAIHZvaWQgSlNN
ZXNzYWdlQ2hhbm5lbDo6dmlzaXRBZGRpdGlvbmFsQ2gKICAgICAgICAgdmlzaXRvci5hZGRPcGFx
dWVSb290KHBvcnQpOwogfQogCit0ZW1wbGF0ZSB2b2lkIEpTTWVzc2FnZUNoYW5uZWw6OnZpc2l0
QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUg
dm9pZCBKU01lc3NhZ2VDaGFubmVsOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RW
aXNpdG9yJik7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShD
SEFOTkVMX01FU1NBR0lORykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWVz
c2FnZUV2ZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU01lc3NhZ2VFdmVudEN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWVzc2FnZUV2ZW50Q3VzdG9tLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOS0yMDE4IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucyBhcmUKQEAgLTcwLDcgKzcwLDggQEAgSlNDOjpKU1ZhbHVlIEpTTWVzc2FnZUV2ZW50Ojpk
YXRhKEpTQzo6SgogICAgIH0pOwogfQogCi12b2lkIEpTTWVzc2FnZUV2ZW50Ojp2aXNpdEFkZGl0
aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5h
bWUgVmlzaXRvcj4KK3ZvaWQgSlNNZXNzYWdlRXZlbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVu
KFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgV1RGOjpzd2l0Y2hPbih3cmFwcGVkKCkuZGF0YSgp
LCBbJnZpc2l0b3JdIChjb25zdCBKU1ZhbHVlSW5XcmFwcGVkT2JqZWN0JiBkYXRhKSB7CiAgICAg
ICAgIGRhdGEudmlzaXQodmlzaXRvcik7CkBAIC04NCw0ICs4NSw3IEBAIHZvaWQgSlNNZXNzYWdl
RXZlbnQ6OnZpc2l0QWRkaXRpb25hbENoaWwKICAgICB3cmFwcGVkKCkuY2FjaGVkUG9ydHMoKS52
aXNpdCh2aXNpdG9yKTsKIH0KIAordGVtcGxhdGUgdm9pZCBKU01lc3NhZ2VFdmVudDo6dmlzaXRB
ZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2
b2lkIEpTTWVzc2FnZUV2ZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNp
dG9yJik7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTTWVzc2FnZVBvcnRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWVzc2FnZVBvcnRDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI4
MzApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01lc3NhZ2VQb3J0Q3VzdG9tLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDgtMjAwOSwgMjAxNiBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMDgtMjAyMSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKiBDb3B5
cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKQEAgLTMxLDExICszMSwxNSBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogdXNpbmcg
bmFtZXNwYWNlIEpTQzsKIAotdm9pZCBKU01lc3NhZ2VQb3J0Ojp2aXNpdEFkZGl0aW9uYWxDaGls
ZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2
b2lkIEpTTWVzc2FnZVBvcnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0
b3IpCiB7CiAgICAgLy8gSWYgd2UgaGF2ZSBhIGxvY2FsbHkgZW50YW5nbGVkIHBvcnQsIHdlIGNh
biBkaXJlY3RseSBtYXJrIGl0IGFzIHJlYWNoYWJsZS4gUG9ydHMgdGhhdCBhcmUgcmVtb3RlbHkg
ZW50YW5nbGVkIGFyZSBtYXJrZWQgaW4tdXNlIGJ5IG1hcmtBY3RpdmVPYmplY3RzRm9yQ29udGV4
dCgpLgogICAgIGlmIChNZXNzYWdlUG9ydCogcG9ydCA9IHdyYXBwZWQoKS5sb2NhbGx5RW50YW5n
bGVkUG9ydCgpKQogICAgICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QocG9ydCk7CiB9CiAKK3Rl
bXBsYXRlIHZvaWQgSlNNZXNzYWdlUG9ydDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oQWJzdHJh
Y3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU01lc3NhZ2VQb3J0Ojp2aXNpdEFkZGl0
aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYpOworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU011dGF0aW9uT2JzZXJ2ZXJDdXN0b20u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTXV0YXRpb25P
YnNlcnZlckN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTTXV0YXRpb25PYnNlcnZlckN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNiArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQpAQCAt
MzksMTIgKzM5LDE2IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2UgSlND
OwogCi12b2lkIEpTTXV0YXRpb25PYnNlcnZlcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlND
OjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lk
IEpTTXV0YXRpb25PYnNlcnZlcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlz
aXRvcikKIHsKICAgICB3cmFwcGVkKCkuY2FsbGJhY2soKS52aXNpdEpTRnVuY3Rpb24odmlzaXRv
cik7CiB9CiAKLWJvb2wgSlNNdXRhdGlvbk9ic2VydmVyT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9w
YXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgU2xvdFZp
c2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKnJlYXNvbikKK3RlbXBsYXRlIHZvaWQgSlNNdXRh
dGlvbk9ic2VydmVyOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OkFic3RyYWN0U2xvdFZp
c2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNNdXRhdGlvbk9ic2VydmVyOjp2aXNpdEFkZGl0aW9u
YWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJik7CisKK2Jvb2wgSlNNdXRhdGlvbk9ic2VydmVy
T3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93
bj4gaGFuZGxlLCB2b2lkKiwgQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hh
cioqcmVhc29uKQogewogICAgIGZvciAoYXV0byogbm9kZSA6IGpzQ2FzdDxKU011dGF0aW9uT2Jz
ZXJ2ZXIqPihoYW5kbGUuc2xvdCgpLT5hc0NlbGwoKSktPndyYXBwZWQoKS5vYnNlcnZlZE5vZGVz
KCkpIHsKICAgICAgICAgaWYgKHZpc2l0b3IuY29udGFpbnNPcGFxdWVSb290KHJvb3Qobm9kZSkp
KSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU011dGF0aW9uUmVjb3JkQ3Vz
dG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU011dGF0
aW9uUmVjb3JkQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNNdXRhdGlvblJlY29yZEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOC0yMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzAs
OSArMzAsMTMgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIEpTTXV0YXRpb25SZWNv
cmQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0
ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU011dGF0aW9uUmVjb3JkOjp2aXNpdEFk
ZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHdyYXBwZWQoKS52aXNp
dE5vZGVzQ29uY3VycmVudGx5KHZpc2l0b3IpOwogfQotICAgIAorCit0ZW1wbGF0ZSB2b2lkIEpT
TXV0YXRpb25SZWNvcmQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6QWJzdHJhY3RTbG90
VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU011dGF0aW9uUmVjb3JkOjp2aXNpdEFkZGl0aW9u
YWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJik7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTmF2aWdhdG9yQ3VzdG9tLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05hdmlnYXRvckN1c3Rv
bS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
TmF2aWdhdG9yQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMiwxMSArMzIsMTUgQEAKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIEpTTmF2aWdhdG9yOjp2aXNpdEFkZGl0aW9uYWxDaGls
ZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRv
cj4KK3ZvaWQgSlNOYXZpZ2F0b3I6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZp
c2l0b3IpCiB7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHN0YXRpY19jYXN0PE5hdmlnYXRv
ckJhc2UqPigmd3JhcHBlZCgpKSk7CiB9CiAKK3RlbXBsYXRlIHZvaWQgSlNOYXZpZ2F0b3I6OnZp
c2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxh
dGUgdm9pZCBKU05hdmlnYXRvcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90Vmlz
aXRvciYpOworCiAjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKIEpTQzo6SlNWYWx1ZSBKU05hdmln
YXRvcjo6Z2V0VXNlck1lZGlhKEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmpl
Y3QsIEpTQzo6Q2FsbEZyYW1lJiBjYWxsRnJhbWUpCiB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU05vZGVDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTTm9kZUN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA5LTIwMTAsIDIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3LTIw
MjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC03NCw3ICs3NCw3IEBAIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKIHVzaW5n
IG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBpc1JlYWNoYWJsZUZy
b21ET00oTm9kZSogbm9kZSwgU2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFz
b24pCitzdGF0aWMgaW5saW5lIGJvb2wgaXNSZWFjaGFibGVGcm9tRE9NKE5vZGUqIG5vZGUsIEFi
c3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCiB7CiAgICAg
aWYgKCFub2RlLT5pc0Nvbm5lY3RlZCgpKSB7CiAgICAgICAgIGlmIChpczxFbGVtZW50Pigqbm9k
ZSkpIHsKQEAgLTEyMyw3ICsxMjMsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaXNSZWFjaGFibGVG
cm9tRE9NKE5vCiAgICAgcmV0dXJuIHZpc2l0b3IuY29udGFpbnNPcGFxdWVSb290KHJvb3Qobm9k
ZSkpOwogfQogCi1ib29sIEpTTm9kZU93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhK
U0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIFNsb3RWaXNpdG9yJiB2aXNp
dG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQorYm9vbCBKU05vZGVPd25lcjo6aXNSZWFjaGFibGVG
cm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBB
YnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQogewogICAg
IEpTTm9kZSoganNOb2RlID0ganNDYXN0PEpTTm9kZSo+KGhhbmRsZS5zbG90KCktPmFzQ2VsbCgp
KTsKICAgICByZXR1cm4gaXNSZWFjaGFibGVGcm9tRE9NKCZqc05vZGUtPndyYXBwZWQoKSwgdmlz
aXRvciwgcmVhc29uKTsKQEAgLTEzNiwxMSArMTM2LDE1IEBAIEpTU2NvcGUqIEpTTm9kZTo6cHVz
aEV2ZW50SGFuZGxlclNjb3BlKEoKICAgICByZXR1cm4gbm9kZTsKIH0KIAotdm9pZCBKU05vZGU6
OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8
dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNOb2RlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihW
aXNpdG9yJiB2aXNpdG9yKQogewogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChyb290KHdyYXBw
ZWQoKSkpOwogfQogCit0ZW1wbGF0ZSB2b2lkIEpTTm9kZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRy
ZW4oQWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU05vZGU6OnZpc2l0QWRk
aXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CisKIHN0YXRpYyBBTFdBWVNfSU5MSU5FIEpT
VmFsdWUgY3JlYXRlV3JhcHBlcklubGluZShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9i
amVjdCwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmPE5vZGU+JiYgbm9kZSkK
IHsKICAgICBBU1NFUlQoIWdldENhY2hlZFdyYXBwZXIoZ2xvYmFsT2JqZWN0LT53b3JsZCgpLCBu
b2RlKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVJdGVyYXRvckN1
c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2Rl
SXRlcmF0b3JDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU05vZGVJdGVyYXRvckN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA4LCAyMDA5IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIxIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjUsMTAg
KzI1LDE0IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBKU05vZGVJdGVyYXRvcjo6
dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBs
YXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTTm9kZUl0ZXJhdG9yOjp2aXNpdEFkZGl0aW9u
YWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGlmIChOb2RlRmlsdGVyKiBmaWx0
ZXIgPSB3cmFwcGVkKCkuZmlsdGVyKCkpCiAgICAgICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChm
aWx0ZXIpOwogfQogCi19Cit0ZW1wbGF0ZSB2b2lkIEpTTm9kZUl0ZXJhdG9yOjp2aXNpdEFkZGl0
aW9uYWxDaGlsZHJlbihKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQg
SlNOb2RlSXRlcmF0b3I6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3Im
KTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNOb2RlTGlzdEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNOb2RlTGlzdEN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUxpc3RDdXN0b20uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNy0yMDE5IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMzcsNyArMzcsNyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogdXNpbmcgbmFtZXNw
YWNlIEpTQzsKIAotYm9vbCBKU05vZGVMaXN0T3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJv
b3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgU2xvdFZpc2l0b3Im
IHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCitib29sIEpTTm9kZUxpc3RPd25lcjo6aXNS
ZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUs
IHZvaWQqLCBBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29u
KQogewogICAgIEpTTm9kZUxpc3QqIGpzTm9kZUxpc3QgPSBqc0Nhc3Q8SlNOb2RlTGlzdCo+KGhh
bmRsZS5zbG90KCktPmFzQ2VsbCgpKTsKICAgICBpZiAoIWpzTm9kZUxpc3QtPmhhc0N1c3RvbVBy
b3BlcnRpZXMoanNOb2RlTGlzdC0+dm0oKSkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU09mZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyREN1c3RvbS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNPZmZzY3JlZW5DYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkRDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU09mZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyREN1c3Rv
bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAg
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYwpAQCAtMzEsNyArMzEsNyBAQCBpbmxpbmUgdm9pZCogcm9vdChPZmZzY3JlZW5DYW52YXMq
IGNhbnZhCiAgICAgcmV0dXJuIGNhbnZhczsKIH0KIAotYm9vbCBKU09mZnNjcmVlbkNhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyRE93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6Okhh
bmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBj
b25zdCBjaGFyKiogcmVhc29uKQorYm9vbCBKU09mZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyRE93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVu
a25vd24+IGhhbmRsZSwgdm9pZCosIEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0
IGNoYXIqKiByZWFzb24pCiB7CiAgICAgaWYgKFVOTElLRUxZKHJlYXNvbikpCiAgICAgICAgICpy
ZWFzb24gPSAiQ2FudmFzIGlzIG9wYXF1ZSByb290IjsKQEAgLTQxLDExICs0MSwxNSBAQCBib29s
IEpTT2Zmc2NyZWVuQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJECiAgICAgcmV0dXJuIHZpc2l0b3Iu
Y29udGFpbnNPcGFxdWVSb290KHJvb3QpOwogfQogCi12b2lkIEpTT2Zmc2NyZWVuQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlz
aXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTT2Zmc2NyZWVuQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNp
dG9yKQogewogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChyb290KCZ3cmFwcGVkKCkuY2FudmFz
KCkpKTsKIH0KIAordGVtcGxhdGUgdm9pZCBKU09mZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyRDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oQWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVt
cGxhdGUgdm9pZCBKU09mZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6dmlzaXRBZGRp
dGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQog
CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUGFpbnRSZW5kZXJp
bmdDb250ZXh0MkRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTUGFpbnRSZW5kZXJpbmdDb250ZXh0MkRDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI4
MzApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1BhaW50UmVuZGVyaW5nQ29udGV4
dDJEQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE4LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNiw3ICszNiw3IEBAIGlubGluZSB2b2lkKiBy
b290KEN1c3RvbVBhaW50Q2FudmFzKiBjYW4KICAgICByZXR1cm4gY2FudmFzOwogfQogCi1ib29s
IEpTUGFpbnRSZW5kZXJpbmdDb250ZXh0MkRPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9v
dHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBTbG90VmlzaXRvciYg
dmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikKK2Jvb2wgSlNQYWludFJlbmRlcmluZ0NvbnRl
eHQyRE93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVu
a25vd24+IGhhbmRsZSwgdm9pZCosIEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0
IGNoYXIqKiByZWFzb24pCiB7CiAgICAgaWYgKFVOTElLRUxZKHJlYXNvbikpCiAgICAgICAgICpy
ZWFzb24gPSAiQ2FudmFzIGlzIG9wYXF1ZSByb290IjsKQEAgLTQ2LDExICs0NiwxNSBAQCBib29s
IEpTUGFpbnRSZW5kZXJpbmdDb250ZXh0MkRPd25lcjo6aXNSCiAgICAgcmV0dXJuIHZpc2l0b3Iu
Y29udGFpbnNPcGFxdWVSb290KHJvb3QpOwogfQogCi12b2lkIEpTUGFpbnRSZW5kZXJpbmdDb250
ZXh0MkQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVt
cGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNQYWludFJlbmRlcmluZ0NvbnRleHQyRDo6
dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB2aXNpdG9y
LmFkZE9wYXF1ZVJvb3Qocm9vdCgmd3JhcHBlZCgpLmNhbnZhcygpKSk7CiB9CiAKK3RlbXBsYXRl
IHZvaWQgSlNQYWludFJlbmRlcmluZ0NvbnRleHQyRDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4o
QWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU1BhaW50UmVuZGVyaW5nQ29u
dGV4dDJEOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYpOworCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCiAjZW5kaWYKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNQYWludFdvcmtsZXRHbG9iYWxTY29wZUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNQYWludFdvcmtsZXRHbG9iYWxTY29wZUN1c3RvbS5j
cHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUGFp
bnRXb3JrbGV0R2xvYmFsU2NvcGVDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMxLDcgKzMxLDgg
QEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKLXZvaWQgSlNQ
YWludFdvcmtsZXRHbG9iYWxTY29wZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90
VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTUGFp
bnRXb3JrbGV0R2xvYmFsU2NvcGU6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZp
c2l0b3IpCiB7CiAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayh3cmFwcGVkKCkucGFpbnREZWZp
bml0aW9uTG9jaygpKTsKICAgICBmb3IgKGF1dG8mIHJlZ2lzdGVyZWQgOiB3cmFwcGVkKCkucGFp
bnREZWZpbml0aW9uTWFwKCkudmFsdWVzKCkpIHsKQEAgLTQwLDUgKzQxLDkgQEAgdm9pZCBKU1Bh
aW50V29ya2xldEdsb2JhbFNjb3BlOjp2aXNpdEFkZAogICAgIH0KIH0KIAotfQordGVtcGxhdGUg
dm9pZCBKU1BhaW50V29ya2xldEdsb2JhbFNjb3BlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihK
U0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNQYWludFdvcmtsZXRH
bG9iYWxTY29wZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYpOwor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNQYXltZW50TWV0aG9kQ2hhbmdlRXZlbnRDdXN0b20uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUGF5bWVudE1ldGhvZENoYW5nZUV2
ZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNQYXltZW50TWV0aG9kQ2hhbmdlRXZlbnRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTQxLDcgKzQxLDggQEAgSlNDOjpKU1ZhbHVlIEpTUGF5bWVudE1ldGhvZENoYW5nZUV2ZW50Ogog
ICAgIH0pOwogfQogCi12b2lkIEpTUGF5bWVudE1ldGhvZENoYW5nZUV2ZW50Ojp2aXNpdEFkZGl0
aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5h
bWUgVmlzaXRvcj4KK3ZvaWQgSlNQYXltZW50TWV0aG9kQ2hhbmdlRXZlbnQ6OnZpc2l0QWRkaXRp
b25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgV1RGOjpzd2l0Y2hPbih3cmFw
cGVkKCkubWV0aG9kRGV0YWlscygpLCBbJnZpc2l0b3JdKGNvbnN0IEpTVmFsdWVJbldyYXBwZWRP
YmplY3QmIG1ldGhvZERldGFpbHMpIHsKICAgICAgICAgbWV0aG9kRGV0YWlscy52aXNpdCh2aXNp
dG9yKTsKQEAgLTUxLDYgKzUyLDkgQEAgdm9pZCBKU1BheW1lbnRNZXRob2RDaGFuZ2VFdmVudDo6
dmlzaXRBZAogICAgIHdyYXBwZWQoKS5jYWNoZWRNZXRob2REZXRhaWxzKCkudmlzaXQodmlzaXRv
cik7CiB9CiAKK3RlbXBsYXRlIHZvaWQgSlNQYXltZW50TWV0aG9kQ2hhbmdlRXZlbnQ6OnZpc2l0
QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUg
dm9pZCBKU1BheW1lbnRNZXRob2RDaGFuZ2VFdmVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4o
SlNDOjpTbG90VmlzaXRvciYpOworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAv
LyBFTkFCTEUoUEFZTUVOVF9SRVFVRVNUKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNQYXltZW50UmVzcG9uc2VDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTUGF5bWVudFJlc3BvbnNlQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcy
ODMwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNQYXltZW50UmVzcG9uc2VDdXN0
b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTgtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTM3LDExICszNywxNSBAQCBKU0M6OkpTVmFsdWUgSlNQYXlt
ZW50UmVzcG9uc2U6OmRldGFpbHMoCiAgICAgfSk7CiB9CiAKLXZvaWQgSlNQYXltZW50UmVzcG9u
c2U6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0
ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1BheW1lbnRSZXNwb25zZTo6dmlzaXRB
ZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB3cmFwcGVkKCkuY2Fj
aGVkRGV0YWlscygpLnZpc2l0KHZpc2l0b3IpOwogfQogCit0ZW1wbGF0ZSB2b2lkIEpTUGF5bWVu
dFJlc3BvbnNlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OkFic3RyYWN0U2xvdFZpc2l0
b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNQYXltZW50UmVzcG9uc2U6OnZpc2l0QWRkaXRpb25hbENo
aWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImKTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAj
ZW5kaWYgLy8gRU5BQkxFKFBBWU1FTlRfUkVRVUVTVCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTUGVyZm9ybWFuY2VPYnNlcnZlckN1c3RvbS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNQZXJmb3JtYW5jZU9ic2VydmVyQ3VzdG9tLmNw
cAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNQZXJm
b3JtYW5jZU9ic2VydmVyQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMSwxMiArMzEsMTYgQEAK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIEpTUGVyZm9ybWFuY2VPYnNlcnZlcjo6dmlz
aXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRl
PHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTUGVyZm9ybWFuY2VPYnNlcnZlcjo6dmlzaXRBZGRp
dGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB3cmFwcGVkKCkuY2FsbGJh
Y2soKS52aXNpdEpTRnVuY3Rpb24odmlzaXRvcik7CiB9CiAKLWJvb2wgSlNQZXJmb3JtYW5jZU9i
c2VydmVyT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6
VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgSlNDOjpTbG90VmlzaXRvciYsIGNvbnN0IGNoYXIqKiBy
ZWFzb24pCit0ZW1wbGF0ZSB2b2lkIEpTUGVyZm9ybWFuY2VPYnNlcnZlcjo6dmlzaXRBZGRpdGlv
bmFsQ2hpbGRyZW4oSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpT
UGVyZm9ybWFuY2VPYnNlcnZlcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90Vmlz
aXRvciYpOworCitib29sIEpTUGVyZm9ybWFuY2VPYnNlcnZlck93bmVyOjppc1JlYWNoYWJsZUZy
b21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIEpT
Qzo6QWJzdHJhY3RTbG90VmlzaXRvciYsIGNvbnN0IGNoYXIqKiByZWFzb24pCiB7CiAgICAgaWYg
KFVOTElLRUxZKHJlYXNvbikpCiAgICAgICAgICpyZWFzb24gPSAiUmVnaXN0ZXJlZCBQZXJmb3Jt
YW5jZU9ic2VydmVyIGNhbGxiYWNrIjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTUG9wU3RhdGVFdmVudEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNQb3BTdGF0ZUV2ZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gMjcyODMwKQor
KysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNQb3BTdGF0ZUV2ZW50Q3VzdG9tLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTEg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMgYXJlCkBAIC05MCw5ICs5MSwxMyBAQCBKU1ZhbHVlIEpTUG9wU3RhdGVFdmVudDo6c3Rh
dGUoSlNHbG9iYWxPCiAgICAgcmV0dXJuIGNhY2hlU3RhdGUocmVzdWx0KTsKIH0KIAotdm9pZCBK
U1BvcFN0YXRlRXZlbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3Im
IHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1BvcFN0YXRlRXZl
bnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgd3Jh
cHBlZCgpLnN0YXRlKCkudmlzaXQodmlzaXRvcik7CiB9CiAKK3RlbXBsYXRlIHZvaWQgSlNQb3BT
dGF0ZUV2ZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OkFic3RyYWN0U2xvdFZpc2l0
b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNQb3BTdGF0ZUV2ZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGls
ZHJlbihKU0M6OlNsb3RWaXNpdG9yJik7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUHJvbWlzZVJlamVjdGlvbkV2ZW50Q3VzdG9t
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1Byb21pc2VS
ZWplY3Rpb25FdmVudEN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTUHJvbWlzZVJlamVjdGlvbkV2ZW50Q3VzdG9tLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTggWXVzdWtl
IFN1enVraSA8eXVzdWtlc3V6dWtpQHNsb3dzdGFydC5vcmc+LgorICogQ29weXJpZ2h0IChDKSAy
MDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMzIsOSArMzMsMTMgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12
b2lkIEpTUHJvbWlzZVJlamVjdGlvbkV2ZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6
OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQg
SlNQcm9taXNlUmVqZWN0aW9uRXZlbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3Im
IHZpc2l0b3IpCiB7CiAgICAgd3JhcHBlZCgpLnJlYXNvbigpLnZpc2l0KHZpc2l0b3IpOwogfQog
Cit0ZW1wbGF0ZSB2b2lkIEpTUHJvbWlzZVJlamVjdGlvbkV2ZW50Ojp2aXNpdEFkZGl0aW9uYWxD
aGlsZHJlbihKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNQcm9t
aXNlUmVqZWN0aW9uRXZlbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0
b3ImKTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNSZXNpemVPYnNlcnZlckN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNSZXNpemVPYnNlcnZlckN1c3RvbS5jcHAJKHJldmlzaW9u
IDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUmVzaXplT2JzZXJ2ZXJD
dXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdo
dCAoQykgMjAyMCBJZ2FsaWEgUy5MLgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MzAsMTEgKzMxLDE1IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBKU1Jlc2l6ZU9i
c2VydmVyOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9y
KQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNSZXNpemVPYnNlcnZlcjo6dmlz
aXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBSZXNpemVPYnNl
cnZlckNhbGxiYWNrKiBjYWxsYmFjayA9IHdyYXBwZWQoKS5jYWxsYmFja0NvbmN1cnJlbnRseSgp
OwogICAgIGlmIChjYWxsYmFjaykKICAgICAgICAgY2FsbGJhY2stPnZpc2l0SlNGdW5jdGlvbih2
aXNpdG9yKTsKIH0KIAotfQordGVtcGxhdGUgdm9pZCBKU1Jlc2l6ZU9ic2VydmVyOjp2aXNpdEFk
ZGl0aW9uYWxDaGlsZHJlbihKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZv
aWQgSlNSZXNpemVPYnNlcnZlcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90Vmlz
aXRvciYpOworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU1Jlc2l6ZU9ic2VydmVyRW50cnlDdXN0b20uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUmVzaXplT2JzZXJ2ZXJFbnRyeUN1c3RvbS5j
cHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUmVz
aXplT2JzZXJ2ZXJFbnRyeUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBA
CiAvKgogICogQ29weXJpZ2h0IChDKSAyMDE5IElnYWxpYSBTLkwuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0zMCwxMCArMzEsMTQgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci12b2lkIEpTUmVzaXplT2JzZXJ2ZXJFbnRyeTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlND
OjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lk
IEpTUmVzaXplT2JzZXJ2ZXJFbnRyeTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYg
dmlzaXRvcikKIHsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qocm9vdCh3cmFwcGVkKCkudGFy
Z2V0KCkpKTsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qod3JhcHBlZCgpLmNvbnRlbnRSZWN0
KCkpOwogfQogCi19Cit0ZW1wbGF0ZSB2b2lkIEpTUmVzaXplT2JzZXJ2ZXJFbnRyeTo6dmlzaXRB
ZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2
b2lkIEpTUmVzaXplT2JzZXJ2ZXJFbnRyeTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpT
bG90VmlzaXRvciYpOworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU1NWR1ZpZXdTcGVjQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NWR1ZpZXdTcGVjQ3VzdG9tLmNwcAkocmV2aXNp
b24gMjcyODMwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNTVkdWaWV3U3BlY0N1
c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxOC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzAsMTAgKzMwLDE0IEBACiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAotdm9pZCBKU1NWR1ZpZXdTcGVjOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6
OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQg
SlNTVkdWaWV3U3BlYzo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikK
IHsKICAgICBBU1NFUlQod3JhcHBlZCgpLmNvbnRleHRFbGVtZW50Q29uY3VycmVudGx5KCkuZ2V0
KCkpOwogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChyb290KHdyYXBwZWQoKS5jb250ZXh0RWxl
bWVudENvbmN1cnJlbnRseSgpLmdldCgpKSk7CiB9CiAKLX0KK3RlbXBsYXRlIHZvaWQgSlNTVkdW
aWV3U3BlYzo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9y
Jik7Cit0ZW1wbGF0ZSB2b2lkIEpTU1ZHVmlld1NwZWM6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVu
KEpTQzo6U2xvdFZpc2l0b3ImKTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNTZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGVDdXN0b20u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU2VydmljZVdv
cmtlckdsb2JhbFNjb3BlQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNTZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGVDdXN0b20uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTM0LDEyICszNCwxNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5n
IG5hbWVzcGFjZSBKU0M7CiAKLXZvaWQgSlNTZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGU6OnZpc2l0
QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5h
bWUgVmlzaXRvcj4KK3ZvaWQgSlNTZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGU6OnZpc2l0QWRkaXRp
b25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVS
b290KCZ3cmFwcGVkKCkuY2xpZW50cygpKTsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QoJndy
YXBwZWQoKS5yZWdpc3RyYXRpb24oKSk7CiB9CiAKK3RlbXBsYXRlIHZvaWQgSlNTZXJ2aWNlV29y
a2VyR2xvYmFsU2NvcGU6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0
b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNTZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGU6OnZpc2l0QWRk
aXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
IAogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1N0YXRpY1Jhbmdl
Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1N0
YXRpY1JhbmdlQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNTdGF0aWNSYW5nZUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMw
LDkgKzMwLDEzIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBKU1N0YXRpY1Jhbmdl
Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVt
cGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNTdGF0aWNSYW5nZTo6dmlzaXRBZGRpdGlv
bmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB3cmFwcGVkKCkudmlzaXROb2Rl
c0NvbmN1cnJlbnRseSh2aXNpdG9yKTsKIH0KIAordGVtcGxhdGUgdm9pZCBKU1N0YXRpY1Jhbmdl
Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3Rl
bXBsYXRlIHZvaWQgSlNTdGF0aWNSYW5nZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpT
bG90VmlzaXRvciYpOworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU1N0eWxlU2hlZXRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU3R5bGVTaGVldEN1c3RvbS5jcHAJKHJldmlzaW9u
IDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU3R5bGVTaGVldEN1c3Rv
bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDA3LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAwNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzAsMTEgKzMwLDE1IEBACiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotdm9pZCBKU1N0eWxlU2hlZXQ6OnZpc2l0QWRkaXRpb25hbENoaWxk
cmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
Pgordm9pZCBKU1N0eWxlU2hlZXQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZp
c2l0b3IpCiB7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHJvb3QoJndyYXBwZWQoKSkpOwog
fQogCit0ZW1wbGF0ZSB2b2lkIEpTU3R5bGVTaGVldDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4o
QWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU1N0eWxlU2hlZXQ6OnZpc2l0
QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CisKIEpTQzo6SlNWYWx1ZSB0b0pTTmV3
bHlDcmVhdGVkKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBSZWY8U3R5bGVTaGVldD4mJiBzdHlsZVNoZWV0KQogewogICAgIGlmIChzdHlsZVNo
ZWV0LT5pc0NTU1N0eWxlU2hlZXQoKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTVGV4dFRyYWNrQ3VlQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU1RleHRUcmFja0N1ZUN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVGV4dFRyYWNrQ3VlQ3VzdG9tLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0zOCw3ICszOCw3IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1l
c3BhY2UgSlNDOwogCi1ib29sIEpTVGV4dFRyYWNrQ3VlT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9w
YXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgU2xvdFZp
c2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCitib29sIEpTVGV4dFRyYWNrQ3Vl
T3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93
bj4gaGFuZGxlLCB2b2lkKiwgQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hh
cioqIHJlYXNvbikKIHsKICAgICBKU1RleHRUcmFja0N1ZSoganNUZXh0VHJhY2tDdWUgPSBqc0Nh
c3Q8SlNUZXh0VHJhY2tDdWUqPihoYW5kbGUuc2xvdCgpLT5hc0NlbGwoKSk7CiAgICAgVGV4dFRy
YWNrQ3VlJiB0ZXh0VHJhY2tDdWUgPSBqc1RleHRUcmFja0N1ZS0+d3JhcHBlZCgpOwpAQCAtODIs
MTIgKzgyLDE2IEBAIEpTVmFsdWUgdG9KUyhKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2IKICAg
ICByZXR1cm4gd3JhcChsZXhpY2FsR2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QsIGN1ZSk7CiB9
CiAKLXZvaWQgSlNUZXh0VHJhY2tDdWU6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNp
dG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNUZXh0VHJh
Y2tDdWU6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAg
aWYgKFRleHRUcmFjayogdGV4dFRyYWNrID0gd3JhcHBlZCgpLnRyYWNrKCkpCiAgICAgICAgIHZp
c2l0b3IuYWRkT3BhcXVlUm9vdChyb290KHRleHRUcmFjaykpOwogfQogCit0ZW1wbGF0ZSB2b2lk
IEpTVGV4dFRyYWNrQ3VlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihBYnN0cmFjdFNsb3RWaXNp
dG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTVGV4dFRyYWNrQ3VlOjp2aXNpdEFkZGl0aW9uYWxDaGls
ZHJlbihTbG90VmlzaXRvciYpOworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZgpJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNUZXh0VHJhY2tDdXN0b20uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVGV4dFRyYWNrQ3VzdG9t
LmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNU
ZXh0VHJhY2tDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTEtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM2LDExICszNiwxNSBAQAogbmFtZXNw
YWNlIFdlYkNvcmUgewogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAotdm9pZCBKU1RleHRUcmFjazo6
dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0
eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1RleHRUcmFjazo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRy
ZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qocm9vdCgm
d3JhcHBlZCgpKSk7CiB9CiAKK3RlbXBsYXRlIHZvaWQgSlNUZXh0VHJhY2s6OnZpc2l0QWRkaXRp
b25hbENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNUZXh0
VHJhY2s6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CisKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU1RleHRUcmFja0xpc3RDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTVGV4dFRyYWNrTGlzdEN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjgzMCkK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVGV4dFRyYWNrTGlzdEN1c3RvbS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMS0y
MDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMzYsMTEgKzM2LDE1IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2lu
ZyBuYW1lc3BhY2UgSlNDOwogCi12b2lkIEpTVGV4dFRyYWNrTGlzdDo6dmlzaXRBZGRpdGlvbmFs
Q2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZp
c2l0b3I+Cit2b2lkIEpTVGV4dFRyYWNrTGlzdDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlz
aXRvciYgdmlzaXRvcikKIHsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qocm9vdCh3cmFwcGVk
KCkuZWxlbWVudCgpKSk7CiB9CiAgICAgCit0ZW1wbGF0ZSB2b2lkIEpTVGV4dFRyYWNrTGlzdDo6
dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oQWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUg
dm9pZCBKU1RleHRUcmFja0xpc3Q6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9y
Jik7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU1RyZWVXYWxrZXJDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVHJlZVdhbGtlckN1c3RvbS5jcHAJKHJldmlzaW9u
IDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVHJlZVdhbGtlckN1c3Rv
bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDA2LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAwNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYwpAQCAtMjUsMTAgKzI1LDE0IEBACiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotdm9pZCBKU1RyZWVXYWxrZXI6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xv
dFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1Ry
ZWVXYWxrZXI6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAg
ICAgaWYgKE5vZGVGaWx0ZXIqIGZpbHRlciA9IHdyYXBwZWQoKS5maWx0ZXIoKSkKICAgICAgICAg
dmlzaXRvci5hZGRPcGFxdWVSb290KGZpbHRlcik7CiB9CiAKLX0KK3RlbXBsYXRlIHZvaWQgSlNU
cmVlV2Fsa2VyOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OkFic3RyYWN0U2xvdFZpc2l0
b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNUcmVlV2Fsa2VyOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJl
bihKU0M6OlNsb3RWaXNpdG9yJik7CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVW5kb0l0ZW1DdXN0b20uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVW5kb0l0ZW1DdXN0b20uY3BwCShyZXZp
c2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1VuZG9JdGVtQ3Vz
dG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE5LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0yOSwxMyArMjksMTcgQEAKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi12b2lkIEpTVW5kb0l0ZW06OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xv
dFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1Vu
ZG9JdGVtOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAg
IHdyYXBwZWQoKS51bmRvSGFuZGxlcigpLnZpc2l0SlNGdW5jdGlvbih2aXNpdG9yKTsKICAgICB3
cmFwcGVkKCkucmVkb0hhbmRsZXIoKS52aXNpdEpTRnVuY3Rpb24odmlzaXRvcik7CiB9CiAKLWJv
b2wgSlNVbmRvSXRlbU93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRs
ZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3Is
IGNvbnN0IGNoYXIqKiByZWFzb24pCit0ZW1wbGF0ZSB2b2lkIEpTVW5kb0l0ZW06OnZpc2l0QWRk
aXRpb25hbENoaWxkcmVuKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9p
ZCBKU1VuZG9JdGVtOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJik7
CisKK2Jvb2wgSlNVbmRvSXRlbU93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6
OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIEpTQzo6QWJzdHJhY3RTbG90Vmlz
aXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikKIHsKICAgICBpZiAoVU5MSUtFTFko
cmVhc29uKSkKICAgICAgICAgKnJlYXNvbiA9ICJEb2N1bWVudCBpcyBhbiBvcGFxdWUgcm9vdC4i
OwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNWYWx1ZUluV3JhcHBlZE9iamVj
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVmFsdWVJbldy
YXBwZWRPYmplY3QuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNWYWx1ZUluV3JhcHBlZE9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00MCw3ICs0MCw3IEBA
IHB1YmxpYzoKICAgICBvcGVyYXRvciBKU0M6OkpTVmFsdWUoKSBjb25zdDsKICAgICBleHBsaWNp
dCBvcGVyYXRvciBib29sKCkgY29uc3Q7CiAgICAgSlNWYWx1ZUluV3JhcHBlZE9iamVjdCYgb3Bl
cmF0b3I9KGNvbnN0IEpTVmFsdWVJbldyYXBwZWRPYmplY3QmIG90aGVyKTsKLSAgICB2b2lkIHZp
c2l0KEpTQzo6U2xvdFZpc2l0b3ImKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNp
dG9yPiB2b2lkIHZpc2l0KFZpc2l0b3ImKSBjb25zdDsKICAgICB2b2lkIGNsZWFyKCk7CiAKIHBy
aXZhdGU6CkBAIC05OCw3ICs5OCw4IEBAIGlubGluZSBKU1ZhbHVlSW5XcmFwcGVkT2JqZWN0JiBK
U1ZhbHVlSW4KICAgICByZXR1cm4gKnRoaXM7CiB9CiAKLWlubGluZSB2b2lkIEpTVmFsdWVJbldy
YXBwZWRPYmplY3Q6OnZpc2l0KEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0Cit0ZW1w
bGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgoraW5saW5lIHZvaWQgSlNWYWx1ZUluV3JhcHBlZE9iamVj
dDo6dmlzaXQoVmlzaXRvciYgdmlzaXRvcikgY29uc3QKIHsKICAgICByZXR1cm4gV1RGOjpzd2l0
Y2hPbihtX3ZhbHVlLCBbXSAoSlNDOjpKU1ZhbHVlKSB7CiAgICAgICAgIC8vIE5vdGhpbmcgdG8g
dmlzaXQuCkBAIC0xMDcsNiArMTA4LDkgQEAgaW5saW5lIHZvaWQgSlNWYWx1ZUluV3JhcHBlZE9i
amVjdDo6dmlzaQogICAgIH0pOwogfQogCit0ZW1wbGF0ZSB2b2lkIEpTVmFsdWVJbldyYXBwZWRP
YmplY3Q6OnZpc2l0KEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpIGNvbnN0OwordGVtcGxhdGUg
dm9pZCBKU1ZhbHVlSW5XcmFwcGVkT2JqZWN0Ojp2aXNpdChKU0M6OlNsb3RWaXNpdG9yJikgY29u
c3Q7CisKIGlubGluZSB2b2lkIEpTVmFsdWVJbldyYXBwZWRPYmplY3Q6OmNsZWFyKCkKIHsKICAg
ICBXVEY6OnN3aXRjaE9uKG1fdmFsdWUsIFtdIChXZWFrJiB2YWx1ZSkgewpJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNWaWRlb1RyYWNrQ3VzdG9tLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1ZpZGVvVHJhY2tDdXN0b20uY3BwCShyZXZp
c2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1ZpZGVvVHJhY2tD
dXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTEtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM1LDExICszNSwxNSBAQAogbmFtZXNwYWNlIFdlYkNv
cmUgewogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAotdm9pZCBKU1ZpZGVvVHJhY2s6OnZpc2l0QWRk
aXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUg
VmlzaXRvcj4KK3ZvaWQgSlNWaWRlb1RyYWNrOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNp
dG9yJiB2aXNpdG9yKQogewogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChyb290KCZ3cmFwcGVk
KCkpKTsKIH0KIAordGVtcGxhdGUgdm9pZCBKU1ZpZGVvVHJhY2s6OnZpc2l0QWRkaXRpb25hbENo
aWxkcmVuKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU1ZpZGVv
VHJhY2s6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImKTsKKwogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTVmlkZW9UcmFja0xpc3RDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTVmlkZW9UcmFja0xpc3RDdXN0b20uY3BwCShyZXZpc2lvbiAy
NzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1ZpZGVvVHJhY2tMaXN0Q3Vz
dG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDExLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0zNSwxMSArMzUsMTUgQEAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKLXZvaWQgSlNWaWRlb1RyYWNrTGlzdDo6dmlzaXRB
ZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBWaXNpdG9yPgordm9pZCBKU1ZpZGVvVHJhY2tMaXN0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJl
bihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChyb290KHdy
YXBwZWQoKS5lbGVtZW50KCkpKTsKIH0KIAordGVtcGxhdGUgdm9pZCBKU1ZpZGVvVHJhY2tMaXN0
Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0
ZSB2b2lkIEpTVmlkZW9UcmFja0xpc3Q6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNp
dG9yJik7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYkdMMlJlbmRlcmluZ0NvbnRleHRDdXN0b20uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViR0wyUmVuZGVyaW5n
Q29udGV4dEN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTV2ViR0wyUmVuZGVyaW5nQ29udGV4dEN1c3RvbS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTcgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0zMywxMiArMzMsMTYgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVz
cGFjZSBKU0M7CiAKLXZvaWQgSlNXZWJHTDJSZW5kZXJpbmdDb250ZXh0Ojp2aXNpdEFkZGl0aW9u
YWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0
b3I+Cit2b2lkIEpTV2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRy
ZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QoJndyYXBw
ZWQoKSk7CiAgICAgd3JhcHBlZCgpLmFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKHZpc2l0b3IpOwog
fQogCit0ZW1wbGF0ZSB2b2lkIEpTV2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6dmlzaXRBZGRpdGlv
bmFsQ2hpbGRyZW4oSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpT
V2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90
VmlzaXRvciYpOworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUo
V0VCR0wpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYkdMUmVuZGVyaW5n
Q29udGV4dEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI4MzApCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYkdMUmVuZGVyaW5nQ29udGV4dEN1c3Rv
bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMzMsMTIgKzMzLDE2IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCi12b2lkIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2
aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5
cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2aXNpdEFkZGl0
aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHZpc2l0b3IuYWRkT3BhcXVl
Um9vdCgmd3JhcHBlZCgpKTsKICAgICB3cmFwcGVkKCkuYWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMo
dmlzaXRvcik7CiB9CiAKK3RlbXBsYXRlIHZvaWQgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZp
c2l0QWRkaXRpb25hbENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZv
aWQgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RW
aXNpdG9yJik7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShX
RUJHTCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyR2xvYmFsU2Nv
cGVCYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dv
cmtlckdsb2JhbFNjb3BlQmFzZS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyR2xvYmFsU2NvcGVCYXNlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDksIDIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIw
MjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA5
IEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC05
Miw3ICs5Miw4IEBAIHZvaWQgSlNXb3JrZXJHbG9iYWxTY29wZUJhc2U6OmZpbmlzaENyZWEKICAg
ICBBU1NFUlQoaW5oZXJpdHModm0sIGluZm8oKSkpOwogfQogCi12b2lkIEpTV29ya2VyR2xvYmFs
U2NvcGVCYXNlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0
b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1dvcmtlckdsb2JhbFNjb3Bl
QmFzZTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQog
ewogICAgIEpTV29ya2VyR2xvYmFsU2NvcGVCYXNlKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTV29y
a2VyR2xvYmFsU2NvcGVCYXNlKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklU
Uyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtMTAwLDYgKzEwMSw4IEBAIHZvaWQgSlNXb3JrZXJH
bG9iYWxTY29wZUJhc2U6OnZpc2l0Q2hpbGQKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0
LT5tX3Byb3h5KTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTV29ya2VyR2xvYmFsU2Nv
cGVCYXNlKTsKKwogdm9pZCBKU1dvcmtlckdsb2JhbFNjb3BlQmFzZTo6ZGVzdHJveShKU0NlbGwq
IGNlbGwpCiB7CiAgICAgc3RhdGljX2Nhc3Q8SlNXb3JrZXJHbG9iYWxTY29wZUJhc2UqPihjZWxs
KS0+SlNXb3JrZXJHbG9iYWxTY29wZUJhc2U6On5KU1dvcmtlckdsb2JhbFNjb3BlQmFzZSgpOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrZXJHbG9iYWxTY29wZUJhc2Uu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckdsb2Jh
bFNjb3BlQmFzZS5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU1dvcmtlckdsb2JhbFNjb3BlQmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTc5LDcg
Kzc5LDcgQEAgcHJvdGVjdGVkOgogICAgIEpTV29ya2VyR2xvYmFsU2NvcGVCYXNlKEpTQzo6Vk0m
LCBKU0M6OlN0cnVjdHVyZSosIFJlZlB0cjxXb3JrZXJHbG9iYWxTY29wZT4mJik7CiAgICAgdm9p
ZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJiwgSlNDOjpKU1Byb3h5Kik7CiAKLSAgICBzdGF0aWMg
dm9pZCB2aXNpdENoaWxkcmVuKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpOworICAg
IERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKIHByaXZhdGU6CiAgICAgUmVmUHRyPFdvcmtlckds
b2JhbFNjb3BlPiBtX3dyYXBwZWQ7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U1dvcmtlckdsb2JhbFNjb3BlQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU1dvcmtlckdsb2JhbFNjb3BlQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcy
ODMwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrZXJHbG9iYWxTY29wZUN1
c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDA4LTIwMDksIDIwMTEsIDIwMTYgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMjEgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMyw3ICszMyw4IEBACiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCi12b2lkIEpTV29ya2Vy
R2xvYmFsU2NvcGU6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9y
KQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNXb3JrZXJHbG9iYWxTY29wZTo6
dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBpZiAoYXV0
byogbG9jYXRpb24gPSB3cmFwcGVkKCkub3B0aW9uYWxMb2NhdGlvbigpKQogICAgICAgICB2aXNp
dG9yLmFkZE9wYXF1ZVJvb3QobG9jYXRpb24pOwpAQCAtNDgsNiArNDksOSBAQCB2b2lkIEpTV29y
a2VyR2xvYmFsU2NvcGU6OnZpc2l0QWRkaXRpb25hCiAgICAgd3JhcHBlZCgpLnZpc2l0SlNFdmVu
dExpc3RlbmVycyh2aXNpdG9yKTsKIH0KIAordGVtcGxhdGUgdm9pZCBKU1dvcmtlckdsb2JhbFNj
b3BlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1w
bGF0ZSB2b2lkIEpTV29ya2VyR2xvYmFsU2NvcGU6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNs
b3RWaXNpdG9yJik7CisKIEpTVmFsdWUgSlNXb3JrZXJHbG9iYWxTY29wZTo6cXVldWVNaWNyb3Rh
c2soSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFtZSYgY2FsbEZy
YW1lKQogewogICAgIFZNJiB2bSA9IGxleGljYWxHbG9iYWxPYmplY3Qudm0oKTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyTmF2aWdhdG9yQ3VzdG9tLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlck5hdmlnYXRvckN1
c3RvbS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTV29ya2VyTmF2aWdhdG9yQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOCw5ICsyOCwxMyBA
QAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgSlNXb3JrZXJOYXZpZ2F0b3I6OnZpc2l0
QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0
eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1dvcmtlck5hdmlnYXRvcjo6dmlzaXRBZGRpdGlvbmFs
Q2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qo
c3RhdGljX2Nhc3Q8TmF2aWdhdG9yQmFzZSo+KCZ3cmFwcGVkKCkpKTsKIH0KIAotfQordGVtcGxh
dGUgdm9pZCBKU1dvcmtlck5hdmlnYXRvcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpB
YnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTV29ya2VyTmF2aWdhdG9yOjp2
aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJik7CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2xldEds
b2JhbFNjb3BlQmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNXb3JrbGV0R2xvYmFsU2NvcGVCYXNlLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrbGV0R2xvYmFsU2NvcGVCYXNlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC04Miw3ICs4Miw4IEBAIHZvaWQgSlNXb3JrbGV0R2xvYmFsU2NvcGVCYXNlOjpm
aW5pc2hDcmUKICAgICBBU1NFUlQoaW5oZXJpdHModm0sIGluZm8oKSkpOwogfQogCi12b2lkIEpT
V29ya2xldEdsb2JhbFNjb3BlQmFzZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNXb3Jr
bGV0R2xvYmFsU2NvcGVCYXNlOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0
b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1dvcmtsZXRH
bG9iYWxTY29wZUJhc2UqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRo
aXNPYmplY3QsIGluZm8oKSk7CkBAIC05MCw2ICs5MSw4IEBAIHZvaWQgSlNXb3JrbGV0R2xvYmFs
U2NvcGVCYXNlOjp2aXNpdENoaWwKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX3By
b3h5KTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTV29ya2xldEdsb2JhbFNjb3BlQmFz
ZSk7CisKIHZvaWQgSlNXb3JrbGV0R2xvYmFsU2NvcGVCYXNlOjpkZXN0cm95KEpTQ2VsbCogY2Vs
bCkKIHsKICAgICBzdGF0aWNfY2FzdDxKU1dvcmtsZXRHbG9iYWxTY29wZUJhc2UqPihjZWxsKS0+
SlNXb3JrbGV0R2xvYmFsU2NvcGVCYXNlOjp+SlNXb3JrbGV0R2xvYmFsU2NvcGVCYXNlKCk7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtsZXRHbG9iYWxTY29wZUJhc2Uu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtsZXRHbG9i
YWxTY29wZUJhc2UuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNXb3JrbGV0R2xvYmFsU2NvcGVCYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjcsNyArNjcs
NyBAQCBwcm90ZWN0ZWQ6CiAgICAgSlNXb3JrbGV0R2xvYmFsU2NvcGVCYXNlKEpTQzo6Vk0mLCBK
U0M6OlN0cnVjdHVyZSosIFJlZlB0cjxXb3JrbGV0R2xvYmFsU2NvcGU+JiYpOwogICAgIHZvaWQg
ZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYsIEpTQzo6SlNQcm94eSopOwogCi0gICAgc3RhdGljIHZv
aWQgdmlzaXRDaGlsZHJlbihKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKTsKKyAgICBE
RUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiBwcml2YXRlOgogICAgIFJlZlB0cjxXb3JrbGV0R2xv
YmFsU2NvcGU+IG1fd3JhcHBlZDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
WE1MSHR0cFJlcXVlc3RDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTWE1MSHR0cFJlcXVlc3RDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI4MzApCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1hNTEh0dHBSZXF1ZXN0Q3VzdG9tLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgs
IDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDA4LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC00MSw3ICs0MSw4IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1
c2luZyBuYW1lc3BhY2UgSlNDOwogCi12b2lkIEpTWE1MSHR0cFJlcXVlc3Q6OnZpc2l0QWRkaXRp
b25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlz
aXRvcj4KK3ZvaWQgSlNYTUxIdHRwUmVxdWVzdDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlz
aXRvciYgdmlzaXRvcikKIHsKICAgICBpZiAoYXV0byogdXBsb2FkID0gd3JhcHBlZCgpLm9wdGlv
bmFsVXBsb2FkKCkpCiAgICAgICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdCh1cGxvYWQpOwpAQCAt
NTAsNiArNTEsOSBAQCB2b2lkIEpTWE1MSHR0cFJlcXVlc3Q6OnZpc2l0QWRkaXRpb25hbENoCiAg
ICAgICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChyZXNwb25zZURvY3VtZW50KTsKIH0KIAordGVt
cGxhdGUgdm9pZCBKU1hNTEh0dHBSZXF1ZXN0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihBYnN0
cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTWE1MSHR0cFJlcXVlc3Q6OnZpc2l0
QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CisKIEpTVmFsdWUgSlNYTUxIdHRwUmVx
dWVzdDo6cmVzcG9uc2UoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QpIGNvbnN0
CiB7CiAgICAgYXV0byBjYWNoZVJlc3VsdCA9IFsmXSAoSlNWYWx1ZSB2YWx1ZSkgLT4gSlNWYWx1
ZSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1hQYXRoUmVzdWx0Q3VzdG9t
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1hQYXRoUmVz
dWx0Q3VzdG9tLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNYUGF0aFJlc3VsdEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2
IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDExIEp1bGllbiBDaGFmZnJhaXggPGpjaGFmZnJh
aXhAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMxLDcgKzMy
LDggQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIEpTWFBhdGhSZXN1bHQ6OnZpc2l0
QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0
eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1hQYXRoUmVzdWx0Ojp2aXNpdEFkZGl0aW9uYWxDaGls
ZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGF1dG8mIHZhbHVlID0gd3JhcHBlZCgpLnZh
bHVlKCk7CiAgICAgaWYgKHZhbHVlLmlzTm9kZVNldCgpKSB7CkBAIC00MSw0ICs0Myw3IEBAIHZv
aWQgSlNYUGF0aFJlc3VsdDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGQKICAgICB9CiB9CiAKK3RlbXBs
YXRlIHZvaWQgSlNYUGF0aFJlc3VsdDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpBYnN0
cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTWFBhdGhSZXN1bHQ6OnZpc2l0QWRk
aXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImKTsKKwogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV2ViQ29yZVR5cGVkQXJyYXlD
b250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9X
ZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTU2LDcgKzU2LDcgQEAgYm9vbCBXZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xs
ZXI6OmlzQXRvbQogICAgIHJldHVybiBtX2FsbG93QXRvbWljc1dhaXQ7CiB9CiAKLWJvb2wgV2Vi
Q29yZVR5cGVkQXJyYXlDb250cm9sbGVyOjpKU0FycmF5QnVmZmVyT3duZXI6OmlzUmVhY2hhYmxl
RnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwg
SlNDOjpTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikKK2Jvb2wgV2Vi
Q29yZVR5cGVkQXJyYXlDb250cm9sbGVyOjpKU0FycmF5QnVmZmVyT3duZXI6OmlzUmVhY2hhYmxl
RnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwg
SlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQog
ewogICAgIGlmIChVTkxJS0VMWShyZWFzb24pKQogICAgICAgICAqcmVhc29uID0gIkFycmF5QnVm
ZmVyIGlzIG9wYXF1ZSByb290IjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dl
YkNvcmVUeXBlZEFycmF5Q29udHJvbGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL1dlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlci5oCShyZXZpc2lvbiAyNzI4
MzApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlVHlwZWRBcnJheUNvbnRy
b2xsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC00OCw3ICs0OCw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAg
ICAgY2xhc3MgSlNBcnJheUJ1ZmZlck93bmVyIDogcHVibGljIEpTQzo6V2Vha0hhbmRsZU93bmVy
IHsKICAgICBwdWJsaWM6Ci0gICAgICAgIGJvb2wgaXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMo
SlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCwgSlNDOjpTbG90VmlzaXRv
ciYsIGNvbnN0IGNoYXIqKikgb3ZlcnJpZGU7CisgICAgICAgIGJvb2wgaXNSZWFjaGFibGVGcm9t
T3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCwgSlND
OjpBYnN0cmFjdFNsb3RWaXNpdG9yJiwgY29uc3QgY2hhcioqKSBvdmVycmlkZTsKICAgICAgICAg
dm9pZCBmaW5hbGl6ZShKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0KSBv
dmVycmlkZTsKICAgICB9OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L0NvZGVHZW5lcmF0b3JKUy5wbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0JKHdvcmtpbmcgY29w
eSkKQEAgLTMsNyArMyw3IEBACiAjIENvcHlyaWdodCAoQykgMjAwNiBBbmRlcnMgQ2FybHNzb24g
PGFuZGVyc2NhQG1hYy5jb20+CiAjIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBTYW11ZWwgV2Vp
bmlnIDxzYW1Ad2Via2l0Lm9yZz4KICMgQ29weXJpZ2h0IChDKSAyMDA2IEFsZXhleSBQcm9za3Vy
eWFrb3YgPGFwQHdlYmtpdC5vcmc+Ci0jIENvcHlyaWdodCAoQykgMjAwNi0yMDIwIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgQ29weXJpZ2h0IChDKSAyMDA2LTIwMjEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogIyBDb3B5cmlnaHQgKEMpIDIwMDkgQ2FtZXJvbiBN
Y0Nvcm1hY2sgPGNhbUBtY2MuaWQuYXU+CiAjIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90
aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICMgQ29weXJpZ2h0IChDKSAy
MDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQpAQCAtMzA3
OCw4ICszMDc4LDggQEAgc3ViIEdlbmVyYXRlSGVhZGVyCiAKICAgICAjIHZpc2l0IGZ1bmN0aW9u
CiAgICAgaWYgKCRuZWVkc1Zpc2l0Q2hpbGRyZW4pIHsKLSAgICAgICAgcHVzaChAaGVhZGVyQ29u
dGVudCwgIiAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIEpTQzo6U2xvdFZp
c2l0b3ImKTtcbiIpOwotICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHZvaWQgdmlz
aXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYpO1xuIikgaWYgJGludGVyZmFj
ZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57SlNDdXN0b21NYXJrRnVuY3Rpb259OworICAgICAgICBw
dXNoKEBoZWFkZXJDb250ZW50LCAiICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47XG4iKTsKKyAg
ICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
PiB2b2lkIHZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImKTtcbiIpIGlmICRpbnRlcmZh
Y2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+e0pTQ3VzdG9tTWFya0Z1bmN0aW9ufTsKICAgICAgICAg
cHVzaChAaGVhZGVyQ29udGVudCwgIlxuIik7CiAKICAgICAgICAgaWYgKCRpbnRlcmZhY2UtPmV4
dGVuZGVkQXR0cmlidXRlcy0+e0pTQ3VzdG9tTWFya0Z1bmN0aW9ufSkgewpAQCAtMzA5NCw3ICsz
MDk0LDcgQEAgc3ViIEdlbmVyYXRlSGVhZGVyCiAgICAgICAgICAgICAjIHRoYXQgdGhlIEdDIGNh
bGxzIHRvIGFzayBhbiBvYmplY3QgaXMgaXQgd291bGQgbGlrZSB0byBtYXJrIGFueXRoaW5nIGVs
c2UgYWZ0ZXIgdGhlCiAgICAgICAgICAgICAjIHByb2dyYW0gcmVzdW1lZCBzaW5jZSB0aGUgbGFz
dCBjYWxsIHRvIHZpc2l0Q2hpbGRyZW4gb3IgdmlzaXRPdXRwdXRDb25zdHJhaW50cy4gU2luY2UK
ICAgICAgICAgICAgICMgdGhpcyBqdXN0IGNhbGxzIHZpc2l0QWRkaXRpb25hbENoaWxkcmVuLCB5
b3UgdXN1YWxseSBkb24ndCBoYXZlIHRvIHdvcnJ5IGFib3V0IHRoaXMuCi0gICAgICAgICAgICBw
dXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHN0YXRpYyB2b2lkIHZpc2l0T3V0cHV0Q29uc3RyYWlu
dHMoSlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpO1xuIik7CisgICAgICAgICAgICBwdXNoKEBo
ZWFkZXJDb250ZW50LCAiICAgIHN0YXRpYyB2b2lkIHZpc2l0T3V0cHV0Q29uc3RyYWludHMoSlND
ZWxsKiwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJik7XG4iKTsKICAgICAgICAgfQogICAgIH0K
IApAQCAtMzIxNSw3ICszMjE1LDcgQEAgc3ViIEdlbmVyYXRlSGVhZGVyCiAgICAgICAgIH0KICAg
ICAgICAgJGhlYWRlckluY2x1ZGVzeyI8d3RmL05ldmVyRGVzdHJveWVkLmg+In0gPSAxOwogICAg
ICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAicHVibGljOlxuIik7Ci0gICAgICAgIHB1c2goQGhl
YWRlckNvbnRlbnQsICIgICAgYm9vbCBpc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6Okhh
bmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0LCBKU0M6OlNsb3RWaXNpdG9yJiwgY29u
c3QgY2hhcioqKSAke292ZXJyaWRlRGVjbH07XG4iKTsKKyAgICAgICAgcHVzaChAaGVhZGVyQ29u
dGVudCwgIiAgICBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpT
Qzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYsIGNv
bnN0IGNoYXIqKikgJHtvdmVycmlkZURlY2x9O1xuIik7CiAgICAgICAgIHB1c2goQGhlYWRlckNv
bnRlbnQsICIgICAgdm9pZCBmaW5hbGl6ZShKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lk
KiBjb250ZXh0KSAke292ZXJyaWRlRGVjbH07XG4iKTsKICAgICAgICAgcHVzaChAaGVhZGVyQ29u
dGVudCwgIn07XG4iKTsKICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIlxuIik7CkBAIC00
OTM5LDYgKzQ5MzksNyBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgIEFkZFRvSW1w
bEluY2x1ZGVzKCJET01Jc29TdWJzcGFjZXMuaCIpOwogICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJX
ZWJDb3JlSlNDbGllbnREYXRhLmgiKTsKICAgICBBZGRUb0ltcGxJbmNsdWRlcygiPEphdmFTY3Jp
cHRDb3JlL0pTRGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLmg+Iik7CisgICAgQWRkVG9J
bXBsSW5jbHVkZXMoIjxKYXZhU2NyaXB0Q29yZS9TbG90VmlzaXRvck1hY3Jvcy5oPiIpOwogICAg
IEFkZFRvSW1wbEluY2x1ZGVzKCI8SmF2YVNjcmlwdENvcmUvU3Vic3BhY2VJbmxpbmVzLmg+Iik7
CiAgICAgcHVzaChAaW1wbENvbnRlbnQsICJKU0M6Oklzb1N1YnNwYWNlKiAke2NsYXNzTmFtZX06
OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSlcbiIpOwogICAgIHB1c2goQGltcGxDb250ZW50
LCAie1xuIik7CkBAIC00OTY2LDcgKzQ5NjcsOCBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlv
bgogICAgIHB1c2goQGltcGxDb250ZW50LCAifVxuXG4iKTsKIAogICAgIGlmICgkbmVlZHNWaXNp
dENoaWxkcmVuKSB7Ci0gICAgICAgIHB1c2goQGltcGxDb250ZW50LCAidm9pZCAke2NsYXNzTmFt
ZX06OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcilcbiIp
OworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgInRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+
XG4iKTsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ2b2lkICR7Y2xhc3NOYW1lfTo6dmlz
aXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKVxuIik7CiAgICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAie1xuIik7CiAgICAgICAgIHB1c2goQGltcGxDb250ZW50
LCAiICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8JHtjbGFzc05hbWV9Kj4oY2VsbCk7XG4i
KTsKICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhF
UklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpO1xuIik7CkBAIC00OTkxLDggKzQ5OTMsMTAgQEAgc3Vi
IEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgIn1cblxuIik7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50
LCAiREVGSU5FX1ZJU0lUX0NISUxEUkVOKCR7Y2xhc3NOYW1lfSk7XG5cbiIpOworCiAgICAgICAg
IGlmICgkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntKU0N1c3RvbU1hcmtGdW5jdGlv
bn0pIHsKLSAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAidm9pZCAke2NsYXNzTmFtZX06
OnZpc2l0T3V0cHV0Q29uc3RyYWludHMoSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRv
cilcbiIpOworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ2b2lkICR7Y2xhc3NOYW1l
fTo6dmlzaXRPdXRwdXRDb25zdHJhaW50cyhKU0NlbGwqIGNlbGwsIEFic3RyYWN0U2xvdFZpc2l0
b3ImIHZpc2l0b3IpXG4iKTsKICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAie1xuIik7
CiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBhdXRvKiB0aGlzT2JqZWN0ID0g
anNDYXN0PCR7Y2xhc3NOYW1lfSo+KGNlbGwpO1xuIik7CiAgICAgICAgICAgICBwdXNoKEBpbXBs
Q29udGVudCwgIiAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8o
KSk7XG4iKTsKQEAgLTUwMzMsNyArNTAzNyw3IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9u
CiAgICAgfQogCiAgICAgaWYgKFNob3VsZEdlbmVyYXRlV3JhcHBlck93bmVyQ29kZSgkaGFzUGFy
ZW50LCAkaW50ZXJmYWNlKSAmJiAhR2V0Q3VzdG9tSXNSZWFjaGFibGUoJGludGVyZmFjZSkpIHsK
LSAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJib29sIEpTJHtpbnRlcmZhY2VOYW1lfU93bmVy
Ojppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhh
bmRsZSwgdm9pZCosIFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKVxu
Iik7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiYm9vbCBKUyR7aW50ZXJmYWNlTmFtZX1P
d25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3du
PiBoYW5kbGUsIHZvaWQqLCBBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFy
KiogcmVhc29uKVxuIik7CiAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAie1xuIik7CiAgICAg
ICAgICMgQWxsIEFjdGl2ZURPTU9iamVjdHMgaW1wbGVtZW50IGhhc1BlbmRpbmdBY3Rpdml0eSgp
LCBidXQgbm90IGFsbCBvZiB0aGVtCiAgICAgICAgICMgaW5jcmVtZW50IHRoZWlyIEMrKyByZWZl
cmVuY2UgY291bnRzIHdoZW4gaGFzUGVuZGluZ0FjdGl2aXR5KCkgYmVjb21lcwpAQCAtNjQzMiw2
ICs2NDM2LDcgQEAgc3ViIEdlbmVyYXRlQ2FsbGJhY2tIZWFkZXJDb250ZW50CiAgICAgICAgIHB1
c2goQCRjb250ZW50UmVmLCAiICAgIGJvb2wgaGFzQ2FsbGJhY2soKSBjb25zdCBmaW5hbCB7IHJl
dHVybiBtX2RhdGEgJiYgbV9kYXRhLT5jYWxsYmFjaygpOyB9XG5cbiIpOwogICAgIH0KIAorICAg
IHB1c2goQCRjb250ZW50UmVmLCAiICAgIHZvaWQgdmlzaXRKU0Z1bmN0aW9uKEpTQzo6QWJzdHJh
Y3RTbG90VmlzaXRvciYpIG92ZXJyaWRlO1xuXG4iKSBpZiAkaW50ZXJmYWNlT3JDYWxsYmFjay0+
ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57SXNXZWFrQ2FsbGJhY2t9OwogICAgIHB1c2goQCRjb250ZW50
UmVmLCAiICAgIHZvaWQgdmlzaXRKU0Z1bmN0aW9uKEpTQzo6U2xvdFZpc2l0b3ImKSBvdmVycmlk
ZTtcblxuIikgaWYgJGludGVyZmFjZU9yQ2FsbGJhY2stPmV4dGVuZGVkQXR0cmlidXRlcy0+e0lz
V2Vha0NhbGxiYWNrfTsKIAogICAgIHB1c2goQCRjb250ZW50UmVmLCAiICAgICR7Y2FsbGJhY2tE
YXRhVHlwZX0qIG1fZGF0YTtcbiIpOwpAQCAtNjYyMyw2ICs2NjI4LDEwIEBAIHN1YiBHZW5lcmF0
ZUNhbGxiYWNrSW1wbGVtZW50YXRpb25Db250ZW4KICAgICB9CiAKICAgICBpZiAoJGludGVyZmFj
ZU9yQ2FsbGJhY2stPmV4dGVuZGVkQXR0cmlidXRlcy0+e0lzV2Vha0NhbGxiYWNrfSkgeworICAg
ICAgICBwdXNoKEAkY29udGVudFJlZiwgInZvaWQgJHtjbGFzc05hbWV9Ojp2aXNpdEpTRnVuY3Rp
b24oSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKVxuIik7CisgICAgICAgIHB1c2go
QCRjb250ZW50UmVmLCAie1xuIik7CisgICAgICAgIHB1c2goQCRjb250ZW50UmVmLCAiICAgIG1f
ZGF0YS0+dmlzaXRKU0Z1bmN0aW9uKHZpc2l0b3IpO1xuIik7CisgICAgICAgIHB1c2goQCRjb250
ZW50UmVmLCAifVxuXG4iKTsKICAgICAgICAgcHVzaChAJGNvbnRlbnRSZWYsICJ2b2lkICR7Y2xh
c3NOYW1lfTo6dmlzaXRKU0Z1bmN0aW9uKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpXG4iKTsK
ICAgICAgICAgcHVzaChAJGNvbnRlbnRSZWYsICJ7XG4iKTsKICAgICAgICAgcHVzaChAJGNvbnRl
bnRSZWYsICIgICAgbV9kYXRhLT52aXNpdEpTRnVuY3Rpb24odmlzaXRvcik7XG4iKTsKQEAgLTY3
MzQsNiArNjc0Myw3IEBAIHN1YiBHZW5lcmF0ZUl0ZXJhYmxlRGVmaW5pdGlvbgogICAgIG15ICR2
aXNpYmxlSW50ZXJmYWNlTmFtZSA9ICRjb2RlR2VuZXJhdG9yLT5HZXRWaXNpYmxlSW50ZXJmYWNl
TmFtZSgkaW50ZXJmYWNlKTsKIAogICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJKU0RPTUl0ZXJhdG9y
LmgiKTsKKyAgICBBZGRUb0ltcGxJbmNsdWRlcygiPEphdmFTY3JpcHRDb3JlL1Nsb3RWaXNpdG9y
TWFjcm9zLmg+Iik7CiAKICAgICByZXR1cm4gdW5sZXNzIElzS2V5VmFsdWVJdGVyYWJsZUludGVy
ZmFjZSgkaW50ZXJmYWNlKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0FjdGl2ZURPTUNh
bGxiYWNrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0FjdGl2ZURPTUNhbGxi
YWNrLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9BY3RpdmVET01D
YWxsYmFjay5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdo
dCAoQykgMjAxMCwgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKQEAgLTMzLDYgKzM0LDcgQEAKICNpbmNsdWRlICJD
b250ZXh0RGVzdHJ1Y3Rpb25PYnNlcnZlci5oIgogCiBuYW1lc3BhY2UgSlNDIHsKK2NsYXNzIEFi
c3RyYWN0U2xvdFZpc2l0b3I7CiBjbGFzcyBTbG90VmlzaXRvcjsKIH0KIApAQCAtNTUsNiArNTcs
NyBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBhY3RpdmVET01PYmplY3RzQXJl
U3VzcGVuZGVkKCkgY29uc3Q7CiAgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBhY3RpdmVET01PYmpl
Y3RBcmVTdG9wcGVkKCkgY29uc3Q7CiAgICAgCisgICAgdmlydHVhbCB2b2lkIHZpc2l0SlNGdW5j
dGlvbihKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgdmlz
aXRKU0Z1bmN0aW9uKEpTQzo6U2xvdFZpc2l0b3ImKSB7IH0KIH07CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2RvbS9FdmVudExpc3RlbmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
ZG9tL0V2ZW50TGlzdGVuZXIuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL1dlYkNvcmUv
ZG9tL0V2ZW50TGlzdGVuZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yNCw2ICsyNCw3IEBACiAjaW5jbHVk
ZSA8d3RmL1dlYWtQdHIuaD4KIAogbmFtZXNwYWNlIEpTQyB7CitjbGFzcyBBYnN0cmFjdFNsb3RW
aXNpdG9yOwogY2xhc3MgSlNPYmplY3Q7CiBjbGFzcyBTbG90VmlzaXRvcjsKIH0KQEAgLTUyLDYg
KzUzLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVFdmVudChTY3JpcHRFeGVj
dXRpb25Db250ZXh0JiwgRXZlbnQmKSA9IDA7CiAgICAgdmlydHVhbCBib29sIHdhc0NyZWF0ZWRG
cm9tTWFya3VwKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KIAorICAgIHZpcnR1YWwgdm9pZCB2
aXNpdEpTRnVuY3Rpb24oSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJikgeyB9CiAgICAgdmlydHVh
bCB2b2lkIHZpc2l0SlNGdW5jdGlvbihKU0M6OlNsb3RWaXNpdG9yJikgeyB9CiAKICAgICB2aXJ0
dWFsIGJvb2wgaXNBdHRyaWJ1dGUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQpJbmRleDogU291
cmNlL1dlYkNvcmUvZG9tL0V2ZW50VGFyZ2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9kb20vRXZlbnRUYXJnZXQuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2Vi
Q29yZS9kb20vRXZlbnRUYXJnZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yLDcgKzIsNyBAQAog
ICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCiAgKiAgICAg
ICAgICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCiAgKiAgICAg
ICAgICAgKEMpIDIwMDEgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDQtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDQtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBD
b3B5cmlnaHQgKEMpIDIwMDYgQWxleGV5IFByb3NrdXJ5YWtvdiAoYXBAd2Via2l0Lm9yZykKICAq
ICAgICAgICAgICAoQykgMjAwNywgMjAwOCBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5A
a2RlLm9yZz4KICAqCkBAIC0zODQsNyArMzg0LDggQEAgdm9pZCBFdmVudFRhcmdldDo6cmVtb3Zl
QWxsRXZlbnRMaXN0ZW5lcgogICAgIHRocmVhZERhdGEuc2V0SXNJblJlbW92ZUFsbEV2ZW50TGlz
dGVuZXJzKGZhbHNlKTsKIH0KIAotdm9pZCBFdmVudFRhcmdldDo6dmlzaXRKU0V2ZW50TGlzdGVu
ZXJzKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
Pgordm9pZCBFdmVudFRhcmdldDo6dmlzaXRKU0V2ZW50TGlzdGVuZXJzKFZpc2l0b3ImIHZpc2l0
b3IpCiB7CiAgICAgRXZlbnRUYXJnZXREYXRhKiBkYXRhID0gZXZlbnRUYXJnZXREYXRhQ29uY3Vy
cmVudGx5KCk7CiAgICAgaWYgKCFkYXRhKQpAQCAtMzk2LDYgKzM5Nyw5IEBAIHZvaWQgRXZlbnRU
YXJnZXQ6OnZpc2l0SlNFdmVudExpc3RlbmVycygKICAgICAgICAgbGlzdGVuZXItPnZpc2l0SlNG
dW5jdGlvbih2aXNpdG9yKTsKIH0KIAordGVtcGxhdGUgdm9pZCBFdmVudFRhcmdldDo6dmlzaXRK
U0V2ZW50TGlzdGVuZXJzKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9p
ZCBFdmVudFRhcmdldDo6dmlzaXRKU0V2ZW50TGlzdGVuZXJzKEpTQzo6U2xvdFZpc2l0b3ImKTsK
Kwogdm9pZCBFdmVudFRhcmdldDo6aW52YWxpZGF0ZUV2ZW50TGlzdGVuZXJSZWdpb25zKCkKIHsK
ICAgICBpZiAoaXM8RWxlbWVudD4oKnRoaXMpKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20v
RXZlbnRUYXJnZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRUYXJn
ZXQuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50VGFyZ2V0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTIsNyArMiw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDE5OTkg
TGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMTk5OSBBbnR0aSBL
b2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMjAwMSBEaXJrIE11
ZWxsZXIgKG11ZWxsZXJAa2RlLm9yZykKLSAqIENvcHlyaWdodCAoQykgMjAwNC0yMDE3IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwNiBBbGV4
ZXkgUHJvc2t1cnlha292IChhcEB3ZWJraXQub3JnKQogICogICAgICAgICAgIChDKSAyMDA3LCAy
MDA4IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgogICoKQEAgLTk3LDcg
Kzk3LDcgQEAgcHVibGljOgogICAgIHZvaWQgZmlyZUV2ZW50TGlzdGVuZXJzKEV2ZW50JiwgRXZl
bnRJbnZva2VQaGFzZSk7CiAgICAgYm9vbCBpc0ZpcmluZ0V2ZW50TGlzdGVuZXJzKCkgY29uc3Q7
CiAKLSAgICB2b2lkIHZpc2l0SlNFdmVudExpc3RlbmVycyhKU0M6OlNsb3RWaXNpdG9yJik7Cisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCB2aXNpdEpTRXZlbnRMaXN0ZW5lcnMo
VmlzaXRvciYpOwogICAgIHZvaWQgaW52YWxpZGF0ZUpTRXZlbnRMaXN0ZW5lcnMoSlNDOjpKU09i
amVjdCopOwogCiAgICAgY29uc3QgRXZlbnRUYXJnZXREYXRhKiBldmVudFRhcmdldERhdGEoKSBj
b25zdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9NdXRhdGlvblJlY29yZC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL011dGF0aW9uUmVjb3JkLmNwcAkocmV2aXNpb24g
MjcyODMwKQorKysgU291cmNlL1dlYkNvcmUvZG9tL011dGF0aW9uUmVjb3JkLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCkBAIC00MSw3ICs0Miw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogbmFtZXNwYWNlIHsK
IAotc3RhdGljIHZvaWQgdmlzaXROb2RlTGlzdChKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yLCBO
b2RlTGlzdCYgbm9kZUxpc3QpCitzdGF0aWMgdm9pZCB2aXNpdE5vZGVMaXN0KEpTQzo6QWJzdHJh
Y3RTbG90VmlzaXRvciYgdmlzaXRvciwgTm9kZUxpc3QmIG5vZGVMaXN0KQogewogICAgIEFTU0VS
VCghbm9kZUxpc3QuaXNMaXZlTm9kZUxpc3QoKSk7CiAgICAgdW5zaWduZWQgbGVuZ3RoID0gbm9k
ZUxpc3QubGVuZ3RoKCk7CkBAIC02OCw3ICs2OSw3IEBAIHByaXZhdGU6CiAgICAgTm9kZSogcHJl
dmlvdXNTaWJsaW5nKCkgb3ZlcnJpZGUgeyByZXR1cm4gbV9wcmV2aW91c1NpYmxpbmcuZ2V0KCk7
IH0KICAgICBOb2RlKiBuZXh0U2libGluZygpIG92ZXJyaWRlIHsgcmV0dXJuIG1fbmV4dFNpYmxp
bmcuZ2V0KCk7IH0KIAotICAgIHZvaWQgdmlzaXROb2Rlc0NvbmN1cnJlbnRseShKU0M6OlNsb3RW
aXNpdG9yJiB2aXNpdG9yKSBjb25zdCBmaW5hbAorICAgIHZvaWQgdmlzaXROb2Rlc0NvbmN1cnJl
bnRseShKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0IGZpbmFsCiAgICAg
ewogICAgICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qocm9vdChtX3RhcmdldC5wdHIoKSkpOwog
ICAgICAgICBpZiAobV9hZGRlZE5vZGVzKQpAQCAtMTA1LDcgKzEwNiw3IEBAIHByaXZhdGU6CiAg
ICAgICAgIHJldHVybiBub2RlTGlzdC5nZXQoKTsKICAgICB9CiAKLSAgICB2b2lkIHZpc2l0Tm9k
ZXNDb25jdXJyZW50bHkoSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikgY29uc3QgZmluYWwKKyAg
ICB2b2lkIHZpc2l0Tm9kZXNDb25jdXJyZW50bHkoSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiB2
aXNpdG9yKSBjb25zdCBmaW5hbAogICAgIHsKICAgICAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290
KHJvb3QobV90YXJnZXQucHRyKCkpKTsKICAgICB9CkBAIC0xNjQsNyArMTY1LDcgQEAgcHJpdmF0
ZToKIAogICAgIFN0cmluZyBvbGRWYWx1ZSgpIG92ZXJyaWRlIHsgcmV0dXJuIFN0cmluZygpOyB9
CiAKLSAgICB2b2lkIHZpc2l0Tm9kZXNDb25jdXJyZW50bHkoSlNDOjpTbG90VmlzaXRvciYgdmlz
aXRvcikgY29uc3QgZmluYWwKKyAgICB2b2lkIHZpc2l0Tm9kZXNDb25jdXJyZW50bHkoSlNDOjpB
YnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBjb25zdCBmaW5hbAogICAgIHsKICAgICAgICAg
bV9yZWNvcmQtPnZpc2l0Tm9kZXNDb25jdXJyZW50bHkodmlzaXRvcik7CiAgICAgfQpJbmRleDog
U291cmNlL1dlYkNvcmUvZG9tL011dGF0aW9uUmVjb3JkLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvZG9tL011dGF0aW9uUmVjb3JkLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2RvbS9NdXRhdGlvblJlY29yZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKQEAgLTM2LDcgKzM3LDcg
QEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLWNsYXNzIFNsb3RWaXNpdG9yOworY2xhc3MgQWJzdHJh
Y3RTbG90VmlzaXRvcjsKIAogfQogCkBAIC03Miw3ICs3Myw3IEBAIHB1YmxpYzoKIAogICAgIHZp
cnR1YWwgU3RyaW5nIG9sZFZhbHVlKCkgeyByZXR1cm4gU3RyaW5nKCk7IH0KIAotICAgIHZpcnR1
YWwgdm9pZCB2aXNpdE5vZGVzQ29uY3VycmVudGx5KEpTQzo6U2xvdFZpc2l0b3ImKSBjb25zdCA9
IDA7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0Tm9kZXNDb25jdXJyZW50bHkoSlNDOjpBYnN0cmFj
dFNsb3RWaXNpdG9yJikgY29uc3QgPSAwOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJ
bmRleDogU291cmNlL1dlYkNvcmUvZG9tL05vZGVGaWx0ZXJDb25kaXRpb24uaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZUZpbHRlckNvbmRpdGlvbi5oCShyZXZpc2lvbiAy
NzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZUZpbHRlckNvbmRpdGlvbi5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zOCw3ICszOCw3IEBAIGNsYXNzIE5vZGVGaWx0ZXJDb25kaXRpb24gOiBw
dWJsaWMgUmVmQ28KIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5Ob2RlRmlsdGVyQ29uZGl0aW9uKCkg
PSBkZWZhdWx0OwogICAgIHZpcnR1YWwgdW5zaWduZWQgc2hvcnQgYWNjZXB0Tm9kZShOb2RlJikg
Y29uc3QgPSAwOwotICAgIHZpcnR1YWwgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShKU0M6OlNsb3RWaXNp
dG9yJikgeyB9CisvLyAgICB2aXJ0dWFsIHZvaWQgdmlzaXRBZ2dyZWdhdGUoSlNDOjpTbG90Vmlz
aXRvciYpIHsgfSAvLyBtbGFtIFVOVVNFRAogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJ
bmRleDogU291cmNlL1dlYkNvcmUvZG9tL1N0YXRpY1JhbmdlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9kb20vU3RhdGljUmFuZ2UuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBT
b3VyY2UvV2ViQ29yZS9kb20vU3RhdGljUmFuZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIwIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNzYs
NyArNzYsNyBAQCBFeGNlcHRpb25PcjxSZWY8U3RhdGljUmFuZ2U+PiBTdGF0aWNSYW5nCiAgICAg
cmV0dXJuIGNyZWF0ZSh7IHsgaW5pdC5zdGFydENvbnRhaW5lci5yZWxlYXNlTm9uTnVsbCgpLCBp
bml0LnN0YXJ0T2Zmc2V0IH0sIHsgaW5pdC5lbmRDb250YWluZXIucmVsZWFzZU5vbk51bGwoKSwg
aW5pdC5lbmRPZmZzZXQgfSB9KTsKIH0KIAotdm9pZCBTdGF0aWNSYW5nZTo6dmlzaXROb2Rlc0Nv
bmN1cnJlbnRseShKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKSBjb25zdAordm9pZCBTdGF0aWNS
YW5nZTo6dmlzaXROb2Rlc0NvbmN1cnJlbnRseShKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImIHZp
c2l0b3IpIGNvbnN0CiB7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHJvb3Qoc3RhcnQuY29u
dGFpbmVyLmdldCgpKSk7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHJvb3QoZW5kLmNvbnRh
aW5lci5nZXQoKSkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL1N0YXRpY1JhbmdlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL1N0YXRpY1JhbmdlLmgJKHJldmlzaW9uIDI3
MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9TdGF0aWNSYW5nZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIwIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIxIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMzAsNyArMzAsNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotY2xhc3MgU2xvdFZpc2l0
b3I7CitjbGFzcyBBYnN0cmFjdFNsb3RWaXNpdG9yOwogCiB9CiAKQEAgLTU4LDcgKzU4LDcgQEAg
cHVibGljOgogICAgIHVuc2lnbmVkIGVuZE9mZnNldCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIFNp
bXBsZVJhbmdlOjplbmRPZmZzZXQoKTsgfQogICAgIGJvb2wgY29sbGFwc2VkKCkgY29uc3QgZmlu
YWwgeyByZXR1cm4gU2ltcGxlUmFuZ2U6OmNvbGxhcHNlZCgpOyB9CiAKLSAgICB2b2lkIHZpc2l0
Tm9kZXNDb25jdXJyZW50bHkoSlNDOjpTbG90VmlzaXRvciYpIGNvbnN0OworICAgIHZvaWQgdmlz
aXROb2Rlc0NvbmN1cnJlbnRseShKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKSBjb25zdDsKIAog
cHJpdmF0ZToKICAgICBTdGF0aWNSYW5nZShTaW1wbGVSYW5nZSYmKTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMMlJlbmRlcmluZ0NvbnRleHQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMMlJlbmRlcmluZ0NvbnRleHQuY3Bw
CShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTDJS
ZW5kZXJpbmdDb250ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMwNzgsNyArMzA3OCw3IEBA
IGJvb2wgV2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6Y2hlY2tBbmRUcmEKICAgICByZXR1cm4gdHJ1
ZTsKIH0KIAotdm9pZCBXZWJHTDJSZW5kZXJpbmdDb250ZXh0OjphZGRNZW1iZXJzVG9PcGFxdWVS
b290cyhKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBXZWJHTDJSZW5kZXJpbmdDb250
ZXh0OjphZGRNZW1iZXJzVG9PcGFxdWVSb290cyhKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImIHZp
c2l0b3IpCiB7CiAgICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6YWRkTWVtYmVyc1RvT3Bh
cXVlUm9vdHModmlzaXRvcik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dl
YkdMMlJlbmRlcmluZ0NvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9XZWJHTDJSZW5kZXJpbmdDb250ZXh0LmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMMlJlbmRlcmluZ0NvbnRleHQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTI2MSw3ICsyNjEsNyBAQCBwdWJsaWM6CiAKICAgICBib29sIGNoZWNrQW5k
VHJhbnNsYXRlQXR0YWNobWVudHMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQ0dMZW51bSwg
VmVjdG9yPEdDR0xlbnVtPiYpOwogCi0gICAgdm9pZCBhZGRNZW1iZXJzVG9PcGFxdWVSb290cyhK
U0M6OlNsb3RWaXNpdG9yJikgb3ZlcnJpZGU7CisgICAgdm9pZCBhZGRNZW1iZXJzVG9PcGFxdWVS
b290cyhKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKSBvdmVycmlkZTsKIAogcHJpdmF0ZToKICAg
ICBXZWJHTDJSZW5kZXJpbmdDb250ZXh0KENhbnZhc0Jhc2UmLCBHcmFwaGljc0NvbnRleHRHTEF0
dHJpYnV0ZXMpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xGcmFtZWJ1
ZmZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xG
cmFtZWJ1ZmZlci5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL1dlYkdMRnJhbWVidWZmZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjMsNyArNjMs
NyBAQCBuYW1lc3BhY2UgewogICAgICAgICB2b2lkIG9uRGV0YWNoZWQoY29uc3QgQWJzdHJhY3RM
b2NrZXImLCBHcmFwaGljc0NvbnRleHRHTCopIG92ZXJyaWRlOwogICAgICAgICB2b2lkIGF0dGFj
aChHcmFwaGljc0NvbnRleHRHTCosIEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gYXR0YWNobWVu
dCkgb3ZlcnJpZGU7CiAgICAgICAgIHZvaWQgdW5hdHRhY2goR3JhcGhpY3NDb250ZXh0R0wqLCBH
Q0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIGF0dGFjaG1lbnQpIG92ZXJyaWRlOwotICAgICAgICB2
b2lkIGFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgSlNDOjpT
bG90VmlzaXRvciYpIG92ZXJyaWRlOworICAgICAgICB2b2lkIGFkZE1lbWJlcnNUb09wYXF1ZVJv
b3RzKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJikgb3Zl
cnJpZGU7CiAKICAgICAgICAgV2ViR0xSZW5kZXJidWZmZXJBdHRhY2htZW50KCkgeyB9OwogCkBA
IC0xNDUsNyArMTQ1LDcgQEAgbmFtZXNwYWNlIHsKICAgICAgICAgICAgIGNvbnRleHQtPmZyYW1l
YnVmZmVyUmVuZGVyYnVmZmVyKHRhcmdldCwgYXR0YWNobWVudCwgR3JhcGhpY3NDb250ZXh0R0w6
OlJFTkRFUkJVRkZFUiwgMCk7CiAgICAgfQogCi0gICAgdm9pZCBXZWJHTFJlbmRlcmJ1ZmZlckF0
dGFjaG1lbnQ6OmFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwg
SlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKKyAgICB2b2lkIFdlYkdMUmVuZGVyYnVmZmVyQXR0
YWNobWVudDo6YWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMoY29uc3QgQWJzdHJhY3RMb2NrZXImLCBK
U0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiAgICAgewogICAgICAgICB2aXNpdG9y
LmFkZE9wYXF1ZVJvb3QobV9yZW5kZXJidWZmZXIuZ2V0KCkpOwogICAgIH0KQEAgLTE2OSw3ICsx
NjksNyBAQCBuYW1lc3BhY2UgewogICAgICAgICB2b2lkIG9uRGV0YWNoZWQoY29uc3QgQWJzdHJh
Y3RMb2NrZXImLCBHcmFwaGljc0NvbnRleHRHTCopIG92ZXJyaWRlOwogICAgICAgICB2b2lkIGF0
dGFjaChHcmFwaGljc0NvbnRleHRHTCosIEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gYXR0YWNo
bWVudCkgb3ZlcnJpZGU7CiAgICAgICAgIHZvaWQgdW5hdHRhY2goR3JhcGhpY3NDb250ZXh0R0wq
LCBHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIGF0dGFjaG1lbnQpIG92ZXJyaWRlOwotICAgICAg
ICB2b2lkIGFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgSlND
OjpTbG90VmlzaXRvciYpIG92ZXJyaWRlOworICAgICAgICB2b2lkIGFkZE1lbWJlcnNUb09wYXF1
ZVJvb3RzKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJikg
b3ZlcnJpZGU7CiAKICAgICAgICAgV2ViR0xUZXh0dXJlQXR0YWNobWVudCgpIHsgfTsKIApAQCAt
MjY3LDcgKzI2Nyw3IEBAIG5hbWVzcGFjZSB7CiAjZW5kaWYKICAgICB9CiAKLSAgICB2b2lkIFdl
YkdMVGV4dHVyZUF0dGFjaG1lbnQ6OmFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKGNvbnN0IEFic3Ry
YWN0TG9ja2VyJiwgSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKKyAgICB2b2lkIFdlYkdMVGV4
dHVyZUF0dGFjaG1lbnQ6OmFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKGNvbnN0IEFic3RyYWN0TG9j
a2VyJiwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogICAgIHsKICAgICAgICAg
dmlzaXRvci5hZGRPcGFxdWVSb290KG1fdGV4dHVyZS5nZXQoKSk7CiAgICAgfQpAQCAtNzIxLDcg
KzcyMSw3IEBAIEdDR0xlbnVtIFdlYkdMRnJhbWVidWZmZXI6OmdldERyYXdCdWZmZXIKICAgICBy
ZXR1cm4gR3JhcGhpY3NDb250ZXh0R0w6Ok5PTkU7CiB9CiAKLXZvaWQgV2ViR0xGcmFtZWJ1ZmZl
cjo6YWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMoY29uc3QgQWJzdHJhY3RMb2NrZXImIGxvY2tlciwg
SlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgV2ViR0xGcmFtZWJ1ZmZlcjo6YWRkTWVt
YmVyc1RvT3BhcXVlUm9vdHMoY29uc3QgQWJzdHJhY3RMb2NrZXImIGxvY2tlciwgSlNDOjpBYnN0
cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGZvciAoYXV0byYgZW50cnkgOiBtX2F0
dGFjaG1lbnRzKQogICAgICAgICBlbnRyeS52YWx1ZS0+YWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMo
bG9ja2VyLCB2aXNpdG9yKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdM
RnJhbWVidWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9X
ZWJHTEZyYW1lYnVmZmVyLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0
bWwvY2FudmFzL1dlYkdMRnJhbWVidWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNCw3ICszNCw3IEBA
CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgSlNDIHsKLWNsYXNzIFNsb3RW
aXNpdG9yOworY2xhc3MgQWJzdHJhY3RTbG90VmlzaXRvcjsKIH0KIAogbmFtZXNwYWNlIFdURiB7
CkBAIC02NSw3ICs2NSw3IEBAIHB1YmxpYzoKICAgICAgICAgdmlydHVhbCB2b2lkIG9uRGV0YWNo
ZWQoY29uc3QgV1RGOjpBYnN0cmFjdExvY2tlciYsIEdyYXBoaWNzQ29udGV4dEdMKikgPSAwOwog
ICAgICAgICB2aXJ0dWFsIHZvaWQgYXR0YWNoKEdyYXBoaWNzQ29udGV4dEdMKiwgR0NHTGVudW0g
dGFyZ2V0LCBHQ0dMZW51bSBhdHRhY2htZW50KSA9IDA7CiAgICAgICAgIHZpcnR1YWwgdm9pZCB1
bmF0dGFjaChHcmFwaGljc0NvbnRleHRHTCosIEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gYXR0
YWNobWVudCkgPSAwOwotICAgICAgICB2aXJ0dWFsIHZvaWQgYWRkTWVtYmVyc1RvT3BhcXVlUm9v
dHMoY29uc3QgV1RGOjpBYnN0cmFjdExvY2tlciYsIEpTQzo6U2xvdFZpc2l0b3ImKSA9IDA7Cisg
ICAgICAgIHZpcnR1YWwgdm9pZCBhZGRNZW1iZXJzVG9PcGFxdWVSb290cyhjb25zdCBXVEY6OkFi
c3RyYWN0TG9ja2VyJiwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJikgPSAwOwogCiAgICAgcHJv
dGVjdGVkOgogICAgICAgICBXZWJHTEF0dGFjaG1lbnQoKTsKQEAgLTExNCw3ICsxMTQsNyBAQCBw
dWJsaWM6CiAKICAgICBHQ0dMZW51bSBnZXREcmF3QnVmZmVyKEdDR0xlbnVtKTsKIAotICAgIHZv
aWQgYWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMoY29uc3QgV1RGOjpBYnN0cmFjdExvY2tlciYsIEpT
Qzo6U2xvdFZpc2l0b3ImKTsKKyAgICB2b2lkIGFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKGNvbnN0
IFdURjo6QWJzdHJhY3RMb2NrZXImLCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKTsKIAogcHJp
dmF0ZToKICAgICBXZWJHTEZyYW1lYnVmZmVyKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UmKTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUHJvZ3JhbS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xQcm9ncmFtLmNwcAkocmV2
aXNpb24gMjcyODMwKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xQcm9ncmFt
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDA5LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC0yMDYsNyArMjA2LDcgQEAgYm9vbCBXZWJHTFByb2dyYW06OmRl
dGFjaFNoYWRlcihjb25zdCBBYgogICAgIH0KIH0KIAotdm9pZCBXZWJHTFByb2dyYW06OmFkZE1l
bWJlcnNUb09wYXF1ZVJvb3RzKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgSlNDOjpTbG90VmlzaXRv
ciYgdmlzaXRvcikKK3ZvaWQgV2ViR0xQcm9ncmFtOjphZGRNZW1iZXJzVG9PcGFxdWVSb290cyhj
b25zdCBBYnN0cmFjdExvY2tlciYsIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikK
IHsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QobV92ZXJ0ZXhTaGFkZXIuZ2V0KCkpOwogICAg
IHZpc2l0b3IuYWRkT3BhcXVlUm9vdChtX2ZyYWdtZW50U2hhZGVyLmdldCgpKTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUHJvZ3JhbS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUHJvZ3JhbS5oCShyZXZpc2lvbiAyNzI4MzAp
CisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFByb2dyYW0uaAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxNyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTM1LDcgKzM1LDcgQEAKICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVz
cGFjZSBKU0MgewotY2xhc3MgU2xvdFZpc2l0b3I7CitjbGFzcyBBYnN0cmFjdFNsb3RWaXNpdG9y
OwogfQogCiBuYW1lc3BhY2UgV1RGIHsKQEAgLTg4LDcgKzg4LDcgQEAgcHVibGljOgogICAgICAg
ICByZXR1cm4gbV9yZXF1aXJlZFRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyQ291bnQ7CiAgICAgfQog
Ci0gICAgdm9pZCBhZGRNZW1iZXJzVG9PcGFxdWVSb290cyhjb25zdCBXVEY6OkFic3RyYWN0TG9j
a2VyJiwgSlNDOjpTbG90VmlzaXRvciYpOworICAgIHZvaWQgYWRkTWVtYmVyc1RvT3BhcXVlUm9v
dHMoY29uc3QgV1RGOjpBYnN0cmFjdExvY2tlciYsIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYp
OwogCiBwcml2YXRlOgogICAgIFdlYkdMUHJvZ3JhbShXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
Jik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL1dl
YkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTcgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC03OTMxLDcgKzc5MzEsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2U6OmRpc3BhdGNoCiAgICAgcXVldWVUYXNrVG9EaXNwYXRjaEV2ZW50KCpjYW52YXMsIFRhc2tT
b3VyY2U6OldlYkdMLCBXZWJHTENvbnRleHRFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS53ZWJn
bGNvbnRleHRjaGFuZ2VkRXZlbnQsIEV2ZW50OjpDYW5CdWJibGU6Ok5vLCBFdmVudDo6SXNDYW5j
ZWxhYmxlOjpZZXMsIGVtcHR5U3RyaW5nKCkpKTsKIH0KIAotdm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlOjphZGRNZW1iZXJzVG9PcGFxdWVSb290cyhKU0M6OlNsb3RWaXNpdG9yJiB2aXNp
dG9yKQordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjphZGRNZW1iZXJzVG9PcGFxdWVS
b290cyhKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0byBsb2Nr
ZXIgPSBob2xkTG9jayhvYmplY3RHcmFwaExvY2soKSk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmgJKHJl
dmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVy
aW5nQ29udGV4dEJhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU4LDcgKzU4LDcgQEAKICNlbmRp
ZgogCiBuYW1lc3BhY2UgSlNDIHsKLWNsYXNzIFNsb3RWaXNpdG9yOworY2xhc3MgQWJzdHJhY3RT
bG90VmlzaXRvcjsKIH0KIAogbmFtZXNwYWNlIFdURiB7CkBAIC00MTEsNyArNDExLDcgQEAgcHVi
bGljOgogICAgIHZvaWQgcmVjeWNsZUNvbnRleHQoKSBvdmVycmlkZTsKICAgICB2b2lkIGRpc3Bh
dGNoQ29udGV4dENoYW5nZWROb3RpZmljYXRpb24oKSBvdmVycmlkZTsKIAotICAgIHZpcnR1YWwg
dm9pZCBhZGRNZW1iZXJzVG9PcGFxdWVSb290cyhKU0M6OlNsb3RWaXNpdG9yJik7CisgICAgdmly
dHVhbCB2b2lkIGFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRv
ciYpOwogICAgIC8vIFRoaXMgbG9jayBtdXN0IGJlIGhlbGQgYWNyb3NzIGFsbCBtdXRhdGlvbnMg
b2YgY29udGFpbmVycyBsaWtlCiAgICAgLy8gVmVjdG9ycywgSGFzaFNldHMsIGV0Yy4gd2hpY2gg
Y29udGFpbiBSZWZQdHI8V2ViR0xPYmplY3Q+LCBhbmQKICAgICAvLyB3aGljaCBhcmUgdHJhdmVy
c2VkIGJ5IGFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKCkgb3IgYW55IG9mIHRoZQpJbmRleDogU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xUcmFuc2Zvcm1GZWVkYmFjay5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xUcmFuc2Zvcm1GZWVkYmFj
ay5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dl
YkdMVHJhbnNmb3JtRmVlZGJhY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMwLDggKzMwLDcgQEAKIAog
I2luY2x1ZGUgIldlYkdMQ29udGV4dEdyb3VwLmgiCiAjaW5jbHVkZSAiV2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZS5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1Nsb3RWaXNpdG9yLmg+Ci0j
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvU2xvdFZpc2l0b3JJbmxpbmVzLmg+CisjaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvQWJzdHJhY3RTbG90VmlzaXRvcklubGluZXMuaD4KICNpbmNsdWRlIDx3
dGYvTG9jay5oPgogI2luY2x1ZGUgPHd0Zi9Mb2NrZXIuaD4KIApAQCAtOTMsNyArOTIsNyBAQCBi
b29sIFdlYkdMVHJhbnNmb3JtRmVlZGJhY2s6Omhhc0Vub3VnaEJ1CiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKLXZvaWQgV2ViR0xUcmFuc2Zvcm1GZWVkYmFjazo6YWRkTWVtYmVyc1RvT3BhcXVlUm9v
dHMoY29uc3QgQWJzdHJhY3RMb2NrZXImIGxvY2tlciwgSlNDOjpTbG90VmlzaXRvciYgdmlzaXRv
cikKK3ZvaWQgV2ViR0xUcmFuc2Zvcm1GZWVkYmFjazo6YWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMo
Y29uc3QgQWJzdHJhY3RMb2NrZXImIGxvY2tlciwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQogewogICAgIGZvciAoYXV0byYgYnVmZmVyIDogbV9ib3VuZEluZGV4ZWRUcmFuc2Zv
cm1GZWVkYmFja0J1ZmZlcnMpCiAgICAgICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChidWZmZXIu
Z2V0KCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xUcmFuc2Zvcm1G
ZWVkYmFjay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdM
VHJhbnNmb3JtRmVlZGJhY2suaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvV2ViR0xUcmFuc2Zvcm1GZWVkYmFjay5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MzEsNyArMzEsNyBAQAogI2luY2x1ZGUgIldlYkdMU2hhcmVkT2JqZWN0LmgiCiAKIG5hbWVzcGFj
ZSBKU0MgewotY2xhc3MgU2xvdFZpc2l0b3I7CitjbGFzcyBBYnN0cmFjdFNsb3RWaXNpdG9yOwog
fQogCiBuYW1lc3BhY2UgV1RGIHsKQEAgLTcwLDcgKzcwLDcgQEAgcHVibGljOgogICAgIAogICAg
IGJvb2wgaGFzRW5vdWdoQnVmZmVycyhHQ0dMdWludCBudW1SZXF1aXJlZCkgY29uc3Q7CiAKLSAg
ICB2b2lkIGFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgSlND
OjpTbG90VmlzaXRvciYpOworICAgIHZvaWQgYWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMoY29uc3Qg
QWJzdHJhY3RMb2NrZXImLCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKTsKIAogcHJpdmF0ZToK
ICAgICBXZWJHTFRyYW5zZm9ybUZlZWRiYWNrKFdlYkdMMlJlbmRlcmluZ0NvbnRleHQmKTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVmVydGV4QXJyYXlPYmplY3RCYXNl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFZlcnRl
eEFycmF5T2JqZWN0QmFzZS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL1dlYkdMVmVydGV4QXJyYXlPYmplY3RCYXNlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTI5LDggKzI5LDcgQEAKICNpZiBFTkFCTEUoV0VCR0wpCiAKICNpbmNsdWRlICJXZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvU2xvdFZp
c2l0b3IuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9TbG90VmlzaXRvcklubGluZXMuaD4K
KyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9BYnN0cmFjdFNsb3RWaXNpdG9ySW5saW5lcy5oPgog
I2luY2x1ZGUgPHd0Zi9Mb2NrZXIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMTA5LDcg
KzEwOCw3IEBAIHZvaWQgV2ViR0xWZXJ0ZXhBcnJheU9iamVjdEJhc2U6OnNldFZlcnQKICAgICBt
X3ZlcnRleEF0dHJpYlN0YXRlW2luZGV4XS5kaXZpc29yID0gZGl2aXNvcjsKIH0KIAotdm9pZCBX
ZWJHTFZlcnRleEFycmF5T2JqZWN0QmFzZTo6YWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMoY29uc3Qg
QWJzdHJhY3RMb2NrZXImLCBKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBXZWJHTFZl
cnRleEFycmF5T2JqZWN0QmFzZTo6YWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMoY29uc3QgQWJzdHJh
Y3RMb2NrZXImLCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgdmlz
aXRvci5hZGRPcGFxdWVSb290KG1fYm91bmRFbGVtZW50QXJyYXlCdWZmZXIuZ2V0KCkpOwogICAg
IGZvciAoYXV0byYgc3RhdGUgOiBtX3ZlcnRleEF0dHJpYlN0YXRlKQpJbmRleDogU291cmNlL1dl
YkNvcmUvaHRtbC9jYW52YXMvV2ViR0xWZXJ0ZXhBcnJheU9iamVjdEJhc2UuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFZlcnRleEFycmF5T2JqZWN0QmFz
ZS5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJH
TFZlcnRleEFycmF5T2JqZWN0QmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzIsNyArMzIsNyBA
QAogI2luY2x1ZGUgIldlYkdMQ29udGV4dE9iamVjdC5oIgogCiBuYW1lc3BhY2UgSlNDIHsKLWNs
YXNzIFNsb3RWaXNpdG9yOworY2xhc3MgQWJzdHJhY3RTbG90VmlzaXRvcjsKIH0KIAogbmFtZXNw
YWNlIFdURiB7CkBAIC03Nyw3ICs3Nyw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgc2V0VmVydGV4
QXR0cmliRGl2aXNvcihHQ0dMdWludCBpbmRleCwgR0NHTHVpbnQgZGl2aXNvcik7CiAKLSAgICB2
b2lkIGFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKGNvbnN0IFdURjo6QWJzdHJhY3RMb2NrZXImLCBK
U0M6OlNsb3RWaXNpdG9yJik7CisgICAgdm9pZCBhZGRNZW1iZXJzVG9PcGFxdWVSb290cyhjb25z
dCBXVEY6OkFic3RyYWN0TG9ja2VyJiwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAKIHBy
b3RlY3RlZDoKICAgICBXZWJHTFZlcnRleEFycmF5T2JqZWN0QmFzZShXZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlJiwgVHlwZSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>420297</attachid>
            <date>2021-02-15 03:05:05 -0800</date>
            <delta_ts>2021-02-16 04:36:04 -0800</delta_ts>
            <desc>work in progress.</desc>
            <filename>bug-217274o.patch</filename>
            <type>text/plain</type>
            <size>585200</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDI3MjgzMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtNjEzLDYgKzYxMyw4IEBAIHNldChKYXZhU2NyaXB0Q29yZV9QUklWQVRFX0ZSQU1FV09SS19I
RUEKICAgICBkb21qaXQvRE9NSklUSGVhcFJhbmdlLmgKICAgICBkb21qaXQvRE9NSklUU2lnbmF0
dXJlLmgKIAorICAgIGhlYXAvQWJzdHJhY3RTbG90VmlzaXRvci5oCisgICAgaGVhcC9BYnN0cmFj
dFNsb3RWaXNpdG9ySW5saW5lcy5oCiAgICAgaGVhcC9BbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmgK
ICAgICBoZWFwL0FsbG9jYXRpb25GYWlsdXJlTW9kZS5oCiAgICAgaGVhcC9BbGxvY2F0b3IuaApA
QCAtNjg3LDEyICs2ODksMTQgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1BSSVZBVEVfRlJBTUVXT1JL
X0hFQQogICAgIGhlYXAvU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQuaAogICAgIGhlYXAvU2xvdFZp
c2l0b3IuaAogICAgIGhlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmgKKyAgICBoZWFwL1Nsb3RWaXNp
dG9yTWFjcm9zLmgKICAgICBoZWFwL1N0cm9uZy5oCiAgICAgaGVhcC9TdHJvbmdJbmxpbmVzLmgK
ICAgICBoZWFwL1N1YnNwYWNlLmgKICAgICBoZWFwL1N1YnNwYWNlSW5saW5lcy5oCiAgICAgaGVh
cC9TeW5jaHJvbm91c25lc3MuaAogICAgIGhlYXAvVGlueUJsb29tRmlsdGVyLmgKKyAgICBoZWFw
L1ZlcmlmaWVyU2xvdFZpc2l0b3IuaAogICAgIGhlYXAvVmlzaXRSYWNlS2V5LmgKICAgICBoZWFw
L1dlYWsuaAogICAgIGhlYXAvV2Vha0Jsb2NrLmgKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9Tb3VyY2VzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNl
cy50eHQJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2Vz
LnR4dAkod29ya2luZyBjb3B5KQpAQCAtNTYzLDYgKzU2Myw3IEBAIGhlYXAvU3RvcElmTmVjZXNz
YXJ5VGltZXIuY3BwCiBoZWFwL1N1YnNwYWNlLmNwcAogaGVhcC9TeW5jaHJvbm91c1N0b3BUaGVX
b3JsZE11dGF0b3JTY2hlZHVsZXIuY3BwCiBoZWFwL1N5bmNocm9ub3VzbmVzcy5jcHAKK2hlYXAv
VmVyaWZpZXJTbG90VmlzaXRvci5jcHAKIGhlYXAvVmlzaXRSYWNlS2V5LmNwcAogaGVhcC9XZWFr
LmNwcAogaGVhcC9XZWFrQmxvY2suY3BwCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJ
L0pTQVBJV3JhcHBlck9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9BUEkvSlNBUElXcmFwcGVyT2JqZWN0LmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9BUEkvSlNBUElXcmFwcGVyT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTkgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC00MSw3ICs0MSw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBzdWJzcGFjZUZvcihWTSYp
IHsgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQogICAgIAogICAgIHZvaWQgZmluaXNo
Q3JlYXRpb24oVk0mKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIEpT
Qzo6U2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOX1dJVEhfTU9ESUZJ
RVIoSlNfRVhQT1JUX1BSSVZBVEUpOwogICAgIAogICAgIHZvaWQqIHdyYXBwZWRPYmplY3QoKSB7
IHJldHVybiBtX3dyYXBwZWRPYmplY3Q7IH0KICAgICB2b2lkIHNldFdyYXBwZWRPYmplY3Qodm9p
ZCopOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0FQSVdyYXBwZXJPYmplY3Qu
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0FQSVdyYXBwZXJP
YmplY3QubW0JKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkv
SlNBUElXcmFwcGVyT2JqZWN0Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzcsNyArMzcsNyBAQAog
Y2xhc3MgSlNBUElXcmFwcGVyT2JqZWN0SGFuZGxlT3duZXIgZmluYWwgOiBwdWJsaWMgSlNDOjpX
ZWFrSGFuZGxlT3duZXIgewogcHVibGljOgogICAgIHZvaWQgZmluYWxpemUoSlNDOjpIYW5kbGU8
SlNDOjpVbmtub3duPiwgdm9pZCopIGZpbmFsOwotICAgIGJvb2wgaXNSZWFjaGFibGVGcm9tT3Bh
cXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCwgSlNDOjpT
bG90VmlzaXRvciYsIGNvbnN0IGNoYXIqKikgZmluYWw7CisgICAgYm9vbCBpc1JlYWNoYWJsZUZy
b21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0LCBK
U0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImLCBjb25zdCBjaGFyKiopIGZpbmFsOwogfTsKIAogc3Rh
dGljIEpTQVBJV3JhcHBlck9iamVjdEhhbmRsZU93bmVyKiBqc0FQSVdyYXBwZXJPYmplY3RIYW5k
bGVPd25lcigpCkBAIC01NiwxNCArNTYsMTQgQEAgdm9pZCBKU0FQSVdyYXBwZXJPYmplY3RIYW5k
bGVPd25lcjo6ZmluYQogICAgIEpTQzo6V2Vha1NldDo6ZGVhbGxvY2F0ZShKU0M6OldlYWtJbXBs
Ojphc1dlYWtJbXBsKGhhbmRsZS5zbG90KCkpKTsKIH0KIAotYm9vbCBKU0FQSVdyYXBwZXJPYmpl
Y3RIYW5kbGVPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlND
OjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25z
dCBjaGFyKiopCitib29sIEpTQVBJV3JhcHBlck9iamVjdEhhbmRsZU93bmVyOjppc1JlYWNoYWJs
ZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCos
IEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqKQogewogICAg
IEpTQzo6SlNBUElXcmFwcGVyT2JqZWN0KiB3cmFwcGVyT2JqZWN0ID0gSlNDOjpqc0Nhc3Q8SlND
OjpKU0FQSVdyYXBwZXJPYmplY3QqPihoYW5kbGUuZ2V0KCkuYXNDZWxsKCkpOwogICAgIC8vIFdl
IHVzZSB0aGUgSlNHbG9iYWxPYmplY3Qgd2hlbiBwcm9jZXNzaW5nIHdlYWsgaGFuZGxlcyB0byBw
cmV2ZW50IHRoZSBzaXR1YXRpb24gd2hlcmUgdXNpbmcKICAgICAvLyB0aGUgc2FtZSBPYmplY3Rp
dmUtQyBvYmplY3QgaW4gbXVsdGlwbGUgZ2xvYmFsIG9iamVjdHMga2VlcHMgYWxsIG9mIHRoZSBn
bG9iYWwgb2JqZWN0cyBhbGl2ZS4KICAgICBpZiAoIXdyYXBwZXJPYmplY3QtPndyYXBwZWRPYmpl
Y3QoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiB2aXNpdG9yLnZtKCkuaGVh
cC5pc01hcmtlZCh3cmFwcGVyT2JqZWN0LT5zdHJ1Y3R1cmUoKS0+Z2xvYmFsT2JqZWN0KCkpICYm
IHZpc2l0b3IuY29udGFpbnNPcGFxdWVSb290KHdyYXBwZXJPYmplY3QtPndyYXBwZWRPYmplY3Qo
KSk7CisgICAgcmV0dXJuIHZpc2l0b3IuaXNNYXJrZWQod3JhcHBlck9iamVjdC0+c3RydWN0dXJl
KCktPmdsb2JhbE9iamVjdCgpKSAmJiB2aXNpdG9yLmNvbnRhaW5zT3BhcXVlUm9vdCh3cmFwcGVy
T2JqZWN0LT53cmFwcGVkT2JqZWN0KCkpOwogfQogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTczLDYg
KzczLDggQEAgc3RhdGljIEpTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJT04oY29uc3RydQogc3RhdGlj
IEpTQ19ERUNMQVJFX0NVU1RPTV9HRVRURVIoY2FsbGJhY2tHZXR0ZXJKU0FQSVdyYXBwZXJPYmpl
Y3RDYWxsYmFja09iamVjdCk7CiBzdGF0aWMgSlNDX0RFQ0xBUkVfQ1VTVE9NX0dFVFRFUihzdGF0
aWNGdW5jdGlvbkdldHRlckpTQVBJV3JhcHBlck9iamVjdENhbGxiYWNrT2JqZWN0KTsKIAorREVG
SU5FX1ZJU0lUX0NISUxEUkVOX1dJVEhfTU9ESUZJRVIodGVtcGxhdGU8PiwgSlNDYWxsYmFja09i
amVjdDxKU0FQSVdyYXBwZXJPYmplY3Q+KTsKKwogdGVtcGxhdGUgPD4gY29uc3QgQ2xhc3NJbmZv
IEpTQ2FsbGJhY2tPYmplY3Q8SlNBUElXcmFwcGVyT2JqZWN0Pjo6c19pbmZvID0geyAiSlNBUElX
cmFwcGVyT2JqZWN0IiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01F
VEhPRF9UQUJMRShKU0NhbGxiYWNrT2JqZWN0KSB9OwogdGVtcGxhdGUgPD4gY29uc3QgYm9vbCBK
U0NhbGxiYWNrT2JqZWN0PEpTQVBJV3JhcHBlck9iamVjdD46Om5lZWRzRGVzdHJ1Y3Rpb24gPSB0
cnVlOwogCkBAIC0xMjMsNyArMTI1LDggQEAgdm9pZCBKU0FQSVdyYXBwZXJPYmplY3Q6OnNldFdy
YXBwZWRPYmplYwogICAgIG1fd3JhcHBlZE9iamVjdCA9IFtzdGF0aWNfY2FzdDxpZD4od3JhcHBl
ZE9iamVjdCkgcmV0YWluXTsKIH0KIAotdm9pZCBKU0FQSVdyYXBwZXJPYmplY3Q6OnZpc2l0Q2hp
bGRyZW4oSlNDZWxsKiBjZWxsLCBKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8
dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNBUElXcmFwcGVyT2JqZWN0Ojp2aXNpdENoaWxkcmVu
SW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNBUElXcmFwcGVy
T2JqZWN0KiB0aGlzT2JqZWN0ID0gSlNDOjpqc0Nhc3Q8SlNBUElXcmFwcGVyT2JqZWN0Kj4oY2Vs
bCk7CiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbihjZWxsLCB2aXNpdG9yKTsKQEAgLTEzMyw2ICsx
MzYsOCBAQCB2b2lkIEpTQVBJV3JhcHBlck9iamVjdDo6dmlzaXRDaGlsZHJlbihKCiAgICAgICAg
IHNjYW5FeHRlcm5hbE9iamVjdEdyYXBoKHZpc2l0b3Iudm0oKSwgdmlzaXRvciwgd3JhcHBlZE9i
amVjdCk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTl9XSVRIX01PRElGSUVSKEpTX0VYUE9S
VF9QUklWQVRFLCBKU0FQSVdyYXBwZXJPYmplY3QpOworCiB0ZW1wbGF0ZSA8PgogSXNvU3Vic3Bh
Y2UqIEpTQ2FsbGJhY2tPYmplY3Q8SlNBUElXcmFwcGVyT2JqZWN0Pjo6c3Vic3BhY2VGb3JJbXBs
KFZNJiB2bSwgU3Vic3BhY2VBY2Nlc3MgbW9kZSkKIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0LmNwcAkocmV2aXNpb24gMjcyODMwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNyBBcHBs
ZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA3IEVy
aWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC00MSw2ICs0
MSw5IEBAIHN0YXRpYyBKU0NfREVDTEFSRV9DVVNUT01fR0VUVEVSKHN0YXRpY0YKIHN0YXRpYyBK
U0NfREVDTEFSRV9DVVNUT01fR0VUVEVSKGNhbGxiYWNrR2V0dGVySlNHbG9iYWxPYmplY3RDYWxs
YmFja09iamVjdCk7CiBzdGF0aWMgSlNDX0RFQ0xBUkVfQ1VTVE9NX0dFVFRFUihzdGF0aWNGdW5j
dGlvbkdldHRlckpTR2xvYmFsT2JqZWN0Q2FsbGJhY2tPYmplY3QpOwogCitERUZJTkVfVklTSVRf
Q0hJTERSRU5fV0lUSF9NT0RJRklFUih0ZW1wbGF0ZTw+LCBKU0NhbGxiYWNrT2JqZWN0PEpTTm9u
RmluYWxPYmplY3Q+KTsKK0RFRklORV9WSVNJVF9DSElMRFJFTl9XSVRIX01PRElGSUVSKHRlbXBs
YXRlPD4sIEpTQ2FsbGJhY2tPYmplY3Q8SlNHbG9iYWxPYmplY3Q+KTsKKwogLy8gRGVmaW5lIHRo
ZSB0d28gdHlwZXMgb2YgSlNDYWxsYmFja09iamVjdHMgd2Ugc3VwcG9ydC4KIHRlbXBsYXRlIDw+
IGNvbnN0IENsYXNzSW5mbyBKU0NhbGxiYWNrT2JqZWN0PEpTTm9uRmluYWxPYmplY3Q+OjpzX2lu
Zm8gPSB7ICJDYWxsYmFja09iamVjdCIsICZCYXNlOjpzX2luZm8sIG51bGxwdHIsIG51bGxwdHIs
IENSRUFURV9NRVRIT0RfVEFCTEUoSlNDYWxsYmFja09iamVjdCkgfTsKIHRlbXBsYXRlIDw+IGNv
bnN0IENsYXNzSW5mbyBKU0NhbGxiYWNrT2JqZWN0PEpTR2xvYmFsT2JqZWN0Pjo6c19pbmZvID0g
eyAiQ2FsbGJhY2tHbG9iYWxPYmplY3QiLCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBudWxscHRy
LCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTQ2FsbGJhY2tPYmplY3QpIH07CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3QuaAkocmV2aXNpb24gMjcyODMw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMjAg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIw
MjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA3
IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC02OSw3
ICs2OSwxMCBAQCBwdWJsaWM6CiAgICAgICAgIG1fcHJpdmF0ZVByb3BlcnRpZXMtPmRlbGV0ZVBy
aXZhdGVQcm9wZXJ0eShwcm9wZXJ0eU5hbWUpOwogICAgIH0KIAotICAgIHZvaWQgdmlzaXRDaGls
ZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwor
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KKyAgICB2b2lkIHZpc2l0Q2hpbGRyZW4o
VmlzaXRvciYgdmlzaXRvcikKICAgICB7CiAgICAgICAgIEpTUHJpdmF0ZVByb3BlcnR5TWFwKiBw
cm9wZXJ0aWVzID0gbV9wcml2YXRlUHJvcGVydGllcy5nZXQoKTsKICAgICAgICAgaWYgKCFwcm9w
ZXJ0aWVzKQpAQCAtMTAzLDcgKzEwNiw4IEBAIHB1YmxpYzoKICAgICAgICAgICAgIG1fcHJvcGVy
dHlNYXAucmVtb3ZlKHByb3BlcnR5TmFtZS5pbXBsKCkpOwogICAgICAgICB9CiAKLSAgICAgICAg
dm9pZCB2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorICAgICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBWaXNpdG9yPgorICAgICAgICB2b2lkIHZpc2l0Q2hpbGRyZW4oVmlzaXRvciYg
dmlzaXRvcikKICAgICAgICAgewogICAgICAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9sb2Nr
KTsKICAgICAgICAgICAgIGZvciAoYXV0byYgcGFpciA6IG1fcHJvcGVydHlNYXApIHsKQEAgLTIx
NiwxMyArMjIwLDcgQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgQ2FsbERhdGEgZ2V0Q29uc3RydWN0
RGF0YShKU0NlbGwqKTsKICAgICBzdGF0aWMgQ2FsbERhdGEgZ2V0Q2FsbERhdGEoSlNDZWxsKik7
CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0
b3ImIHZpc2l0b3IpCi0gICAgewotICAgICAgICBKU0NhbGxiYWNrT2JqZWN0KiB0aGlzT2JqZWN0
ID0ganNDYXN0PEpTQ2FsbGJhY2tPYmplY3QqPihjZWxsKTsKLSAgICAgICAgQVNTRVJUX0dDX09C
SkVDVF9JTkhFUklUUygoc3RhdGljX2Nhc3Q8UGFyZW50Kj4odGhpc09iamVjdCkpLCBKU0NhbGxi
YWNrT2JqZWN0PFBhcmVudD46OmluZm8oKSk7Ci0gICAgICAgIFBhcmVudDo6dmlzaXRDaGlsZHJl
bih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKLSAgICAgICAgdGhpc09iamVjdC0+bV9jYWxsYmFja09i
amVjdERhdGEtPnZpc2l0Q2hpbGRyZW4odmlzaXRvcik7Ci0gICAgfQorICAgIERFQ0xBUkVfVklT
SVRfQ0hJTERSRU47CiAKICAgICB2b2lkIGluaXQoSlNHbG9iYWxPYmplY3QqKTsKICAKQEAgLTI0
NSw2ICsyNDMsMTYgQEAgcHJpdmF0ZToKICAgICBjb25zdCBDbGFzc0luZm8qIG1fY2xhc3NJbmZv
IHsgbnVsbHB0ciB9OwogfTsKIAordGVtcGxhdGUgPGNsYXNzIFBhcmVudD4KK3RlbXBsYXRlPHR5
cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTQ2FsbGJhY2tPYmplY3Q8UGFyZW50Pjo6dmlzaXRDaGls
ZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIEpTQ2FsbGJh
Y2tPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNDYWxsYmFja09iamVjdCo+KGNlbGwpOwor
ICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoKHN0YXRpY19jYXN0PFBhcmVudCo+KHRoaXNP
YmplY3QpKSwgSlNDYWxsYmFja09iamVjdDxQYXJlbnQ+OjppbmZvKCkpOworICAgIFBhcmVudDo6
dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKKyAgICB0aGlzT2JqZWN0LT5tX2Nh
bGxiYWNrT2JqZWN0RGF0YS0+dmlzaXRDaGlsZHJlbih2aXNpdG9yKTsKK30KKwogfSAvLyBuYW1l
c3BhY2UgSlNDCiAKIC8vIGluY2x1ZGUgdGhlIGFjdHVhbCB0ZW1wbGF0ZSBjbGFzcyBpbXBsZW1l
bnRhdGlvbgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU01hbmFnZWRWYWx1ZS5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTTWFuYWdlZFZhbHVl
Lm1tCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTTWFu
YWdlZFZhbHVlLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMywgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQyLDcgKzQyLDcgQEAKIGNsYXNzIEpT
TWFuYWdlZFZhbHVlSGFuZGxlT3duZXIgZmluYWwgOiBwdWJsaWMgSlNDOjpXZWFrSGFuZGxlT3du
ZXIgewogcHVibGljOgogICAgIHZvaWQgZmluYWxpemUoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3du
Piwgdm9pZCogY29udGV4dCkgZmluYWw7Ci0gICAgYm9vbCBpc1JlYWNoYWJsZUZyb21PcGFxdWVS
b290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0LCBKU0M6OlNsb3RW
aXNpdG9yJiwgY29uc3QgY2hhcioqKSBmaW5hbDsKKyAgICBib29sIGlzUmVhY2hhYmxlRnJvbU9w
YXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6
QWJzdHJhY3RTbG90VmlzaXRvciYsIGNvbnN0IGNoYXIqKikgZmluYWw7CiB9OwogCiBzdGF0aWMg
SlNNYW5hZ2VkVmFsdWVIYW5kbGVPd25lciYgbWFuYWdlZFZhbHVlSGFuZGxlT3duZXIoKQpAQCAt
MTgwLDcgKzE4MCw3IEBAIEBpbnRlcmZhY2UgSlNNYW5hZ2VkVmFsdWUgKFByaXZhdGVNZXRob2QK
IC0gKHZvaWQpZGlzY29ubmVjdFZhbHVlOwogQGVuZAogCi1ib29sIEpTTWFuYWdlZFZhbHVlSGFu
ZGxlT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5r
bm93bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNo
YXIqKiByZWFzb24pCitib29sIEpTTWFuYWdlZFZhbHVlSGFuZGxlT3duZXI6OmlzUmVhY2hhYmxl
RnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQs
IEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikK
IHsKICAgICBpZiAoVU5MSUtFTFkocmVhc29uKSkKICAgICAgICAgKnJlYXNvbiA9ICJKU01hbmFn
ZWRWYWx1ZSBpcyBvcGFxdWUgcm9vdCI7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJ
L0pTTWFya2luZ0NvbnN0cmFpbnRQcml2YXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvQVBJL0pTTWFya2luZ0NvbnN0cmFpbnRQcml2YXRlLmNwcAkocmV2aXNpb24g
MjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU01hcmtpbmdDb25zdHJhaW50
UHJpdmF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDcgKzM2LDcgQEAgbmFtZXNwYWNlIHsK
IEF0b21pYzx1bnNpZ25lZD4gY29uc3RyYWludENvdW50ZXI7CiAKIHN0cnVjdCBNYXJrZXIgOiBK
U01hcmtlciB7Ci0gICAgU2xvdFZpc2l0b3IqIHZpc2l0b3I7CisgICAgQWJzdHJhY3RTbG90Vmlz
aXRvciogdmlzaXRvcjsKIH07CiAKIGJvb2wgaXNNYXJrZWQoSlNNYXJrZXJSZWYgbWFya2VyUmVm
LCBKU09iamVjdFJlZiBvYmplY3RSZWYpCkBAIC00NCw3ICs0NCw3IEBAIGJvb2wgaXNNYXJrZWQo
SlNNYXJrZXJSZWYgbWFya2VyUmVmLCBKU08KICAgICBpZiAoIW9iamVjdFJlZikKICAgICAgICAg
cmV0dXJuIHRydWU7IC8vIE51bGwgaXMgYW4gaW1tb3J0YWwgb2JqZWN0LgogICAgIAotICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxNYXJrZXIqPihtYXJrZXJSZWYpLT52aXNpdG9yLT52bSgpLmhlYXAu
aXNNYXJrZWQodG9KUyhvYmplY3RSZWYpKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8TWFya2Vy
Kj4obWFya2VyUmVmKS0+dmlzaXRvci0+aXNNYXJrZWQodG9KUyhvYmplY3RSZWYpKTsKIH0KIAog
dm9pZCBtYXJrKEpTTWFya2VyUmVmIG1hcmtlclJlZiwgSlNPYmplY3RSZWYgb2JqZWN0UmVmKQpA
QCAtNzMsNyArNzMsNyBAQCB2b2lkIEpTQ29udGV4dEdyb3VwQWRkTWFya2luZ0NvbnN0cmFpbnQo
CiAgICAgYXV0byBjb25zdHJhaW50ID0gbWFrZVVuaXF1ZTxTaW1wbGVNYXJraW5nQ29uc3RyYWlu
dD4oCiAgICAgICAgIHRvQ1N0cmluZygiQW1jIiwgY29uc3RyYWludEluZGV4LCAiKCIsIFJhd1Bv
aW50ZXIoYml0d2lzZV9jYXN0PHZvaWQqPihjb25zdHJhaW50Q2FsbGJhY2spKSwgIikiKSwKICAg
ICAgICAgdG9DU3RyaW5nKCJBUEkgTWFya2luZyBDb25zdHJhaW50ICMiLCBjb25zdHJhaW50SW5k
ZXgsICIgKCIsIFJhd1BvaW50ZXIoYml0d2lzZV9jYXN0PHZvaWQqPihjb25zdHJhaW50Q2FsbGJh
Y2spKSwgIiwgIiwgUmF3UG9pbnRlcih1c2VyRGF0YSksICIpIiksCi0gICAgICAgIFtjb25zdHJh
aW50Q2FsbGJhY2ssIHVzZXJEYXRhXSAoU2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsKKyAgICAgICAg
W2NvbnN0cmFpbnRDYWxsYmFjaywgdXNlckRhdGFdIChBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNp
dG9yKSB7CiAgICAgICAgICAgICBNYXJrZXIgbWFya2VyOwogICAgICAgICAgICAgbWFya2VyLklz
TWFya2VkID0gaXNNYXJrZWQ7CiAgICAgICAgICAgICBtYXJrZXIuTWFyayA9IG1hcms7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmlydHVhbE1hY2hpbmUubW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1ZpcnR1YWxNYWNoaW5lLm1tCShyZXZp
c2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmlydHVhbE1hY2hp
bmUubW0JKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMTUsNyArMzE1LDcgQEAgKyAodm9pZClzZXRDcmFz
aE9uVk1DcmVhdGlvbjooQk9PTClzaG91bAogCiBAZW5kCiAKLXN0YXRpYyB2b2lkIHNjYW5FeHRl
cm5hbE9iamVjdEdyYXBoKEpTQzo6Vk0mIHZtLCBKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yLCB2
b2lkKiByb290LCBib29sIGxvY2tBY3F1aXJlZCkKK3N0YXRpYyB2b2lkIHNjYW5FeHRlcm5hbE9i
amVjdEdyYXBoKEpTQzo6Vk0mIHZtLCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3Is
IHZvaWQqIHJvb3QsIGJvb2wgbG9ja0FjcXVpcmVkKQogewogICAgIEBhdXRvcmVsZWFzZXBvb2wg
ewogICAgICAgICBKU1ZpcnR1YWxNYWNoaW5lICp2aXJ0dWFsTWFjaGluZSA9IFtKU1ZNV3JhcHBl
ckNhY2hlIHdyYXBwZXJGb3JKU0NvbnRleHRHcm91cFJlZjp0b1JlZigmdm0pXTsKQEAgLTM0Nywx
MyArMzQ3LDEzIEBAIHN0YXRpYyB2b2lkIHNjYW5FeHRlcm5hbE9iamVjdEdyYXBoKEpTQzoKICAg
ICB9CiB9CiAKLXZvaWQgc2NhbkV4dGVybmFsT2JqZWN0R3JhcGgoSlNDOjpWTSYgdm0sIEpTQzo6
U2xvdFZpc2l0b3ImIHZpc2l0b3IsIHZvaWQqIHJvb3QpCit2b2lkIHNjYW5FeHRlcm5hbE9iamVj
dEdyYXBoKEpTQzo6Vk0mIHZtLCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIHZv
aWQqIHJvb3QpCiB7CiAgICAgYm9vbCBsb2NrQWNxdWlyZWQgPSBmYWxzZTsKICAgICBzY2FuRXh0
ZXJuYWxPYmplY3RHcmFwaCh2bSwgdmlzaXRvciwgcm9vdCwgbG9ja0FjcXVpcmVkKTsKIH0KIAot
dm9pZCBzY2FuRXh0ZXJuYWxSZW1lbWJlcmVkU2V0KEpTQzo6Vk0mIHZtLCBKU0M6OlNsb3RWaXNp
dG9yJiB2aXNpdG9yKQordm9pZCBzY2FuRXh0ZXJuYWxSZW1lbWJlcmVkU2V0KEpTQzo6Vk0mIHZt
LCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgQGF1dG9yZWxlYXNl
cG9vbCB7CiAgICAgICAgIEpTVmlydHVhbE1hY2hpbmUgKnZpcnR1YWxNYWNoaW5lID0gW0pTVk1X
cmFwcGVyQ2FjaGUgd3JhcHBlckZvckpTQ29udGV4dEdyb3VwUmVmOnRvUmVmKCZ2bSldOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1ZpcnR1YWxNYWNoaW5lSW50ZXJuYWwuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmlydHVhbE1hY2hpbmVJ
bnRlcm5hbC5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJ
L0pTVmlydHVhbE1hY2hpbmVJbnRlcm5hbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMyLDcgKzMy
LDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiBjbGFzcyBWTTsKLWNsYXNzIFNsb3RWaXNpdG9yOwor
Y2xhc3MgQWJzdHJhY3RTbG90VmlzaXRvcjsKIH0KIAogI2lmIGRlZmluZWQoX19PQkpDX18pCkBA
IC01NCw4ICs1NCw4IEBAIEpTQ29udGV4dEdyb3VwUmVmIGdldEdyb3VwRnJvbVZpcnR1YWxNYWMK
IAogI2VuZGlmIC8vIGRlZmluZWQoX19PQkpDX18pCiAKLXZvaWQgc2NhbkV4dGVybmFsT2JqZWN0
R3JhcGgoSlNDOjpWTSYsIEpTQzo6U2xvdFZpc2l0b3ImLCB2b2lkKiByb290KTsKLXZvaWQgc2Nh
bkV4dGVybmFsUmVtZW1iZXJlZFNldChKU0M6OlZNJiwgSlNDOjpTbG90VmlzaXRvciYpOwordm9p
ZCBzY2FuRXh0ZXJuYWxPYmplY3RHcmFwaChKU0M6OlZNJiwgSlNDOjpBYnN0cmFjdFNsb3RWaXNp
dG9yJiwgdm9pZCogcm9vdCk7Cit2b2lkIHNjYW5FeHRlcm5hbFJlbWVtYmVyZWRTZXQoSlNDOjpW
TSYsIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpOwogCiAjZW5kaWYgLy8gSlNDX09CSkNfQVBJ
X0VOQUJMRUQKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9NYXJrZWRKU1ZhbHVl
UmVmQXJyYXkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvTWFy
a2VkSlNWYWx1ZVJlZkFycmF5LmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL0FQSS9NYXJrZWRKU1ZhbHVlUmVmQXJyYXkuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAtMjAyMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ2
LDcgKzQ2LDcgQEAgTWFya2VkSlNWYWx1ZVJlZkFycmF5Ojp+TWFya2VkSlNWYWx1ZVJlZgogICAg
ICAgICByZW1vdmUoKTsKIH0KIAotdm9pZCBNYXJrZWRKU1ZhbHVlUmVmQXJyYXk6OnZpc2l0QWdn
cmVnYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBNYXJrZWRKU1ZhbHVlUmVmQXJyYXk6
OnZpc2l0QWdncmVnYXRlKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNW
YWx1ZVJlZiogYnVmZmVyID0gZGF0YSgpOwogICAgIGZvciAodW5zaWduZWQgaW5kZXggPSAwOyBp
bmRleCA8IG1fc2l6ZTsgKytpbmRleCkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQ
SS9NYXJrZWRKU1ZhbHVlUmVmQXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvQVBJL01hcmtlZEpTVmFsdWVSZWZBcnJheS5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL01hcmtlZEpTVmFsdWVSZWZBcnJheS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAtMjAyMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTYyLDcgKzYyLDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9pbmxpbmVCdWZm
ZXI7CiAgICAgfQogCi0gICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYpOworICAg
IHZvaWQgdmlzaXRBZ2dyZWdhdGUoQWJzdHJhY3RTbG90VmlzaXRvciYpOwogCiBwcml2YXRlOgog
ICAgIHVuc2lnbmVkIG1fc2l6ZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xp
Yi9KU0FQSVdyYXBwZXJHbG9iYWxPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0FQSVdyYXBwZXJHbG9iYWxPYmplY3QuY3BwCShyZXZpc2lv
biAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNBUElXcmFwcGVy
R2xvYmFsT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTksNiArNTksOCBAQCBzdGF0aWMg
SlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElPTihjb25zdHJ1CiBzdGF0aWMgSlNDX0RFQ0xBUkVfQ1VT
VE9NX0dFVFRFUihjYWxsYmFja0dldHRlckpTQVBJV3JhcHBlckdsb2JhbE9iamVjdENhbGxiYWNr
T2JqZWN0KTsKIHN0YXRpYyBKU0NfREVDTEFSRV9DVVNUT01fR0VUVEVSKHN0YXRpY0Z1bmN0aW9u
R2V0dGVySlNBUElXcmFwcGVyR2xvYmFsT2JqZWN0Q2FsbGJhY2tPYmplY3QpOwogCitERUZJTkVf
VklTSVRfQ0hJTERSRU5fV0lUSF9NT0RJRklFUih0ZW1wbGF0ZTw+LCBKU0NhbGxiYWNrT2JqZWN0
PEpTQVBJV3JhcHBlckdsb2JhbE9iamVjdD4pOworCiB0ZW1wbGF0ZSA8PiBjb25zdCBDbGFzc0lu
Zm8gSlNDYWxsYmFja09iamVjdDxKU0FQSVdyYXBwZXJHbG9iYWxPYmplY3Q+OjpzX2luZm8gPSB7
ICJKU0FQSVdyYXBwZXJHbG9iYWxPYmplY3QiLCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBudWxs
cHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTQ2FsbGJhY2tPYmplY3QpIH07CiB0ZW1wbGF0ZTw+
IGNvbnN0IGJvb2wgSlNDYWxsYmFja09iamVjdDxKU0FQSVdyYXBwZXJHbG9iYWxPYmplY3Q+Ojpu
ZWVkc0Rlc3RydWN0aW9uID0gdHJ1ZTsKIApAQCAtMTQ0LDkgKzE0Niw0IEBAIHZvaWQgSlNBUElX
cmFwcGVyR2xvYmFsT2JqZWN0OjpmaW5pc2hDcmUKICAgICBXZWFrU2V0OjphbGxvY2F0ZSh0aGlz
LCBqc0FQSVdyYXBwZXJHbG9iYWxPYmplY3RIYW5kbGVPd25lcigpLCAwKTsgLy8gQmFsYW5jZWQg
aW4gSlNBUElXcmFwcGVyR2xvYmFsT2JqZWN0SGFuZGxlT3duZXI6OmZpbmFsaXplLgogfQogCi12
b2lkIEpTQVBJV3JhcHBlckdsb2JhbE9iamVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGws
IEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCi17Ci0gICAgQmFzZTo6dmlzaXRDaGlsZHJlbihj
ZWxsLCB2aXNpdG9yKTsKLX0KLQogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNBUElXcmFwcGVyR2xvYmFsT2JqZWN0LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQVBJV3JhcHBlckdsb2JhbE9i
amVjdC5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2ds
aWIvSlNBUElXcmFwcGVyR2xvYmFsT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDcgKzM5
LDYgQEAgcHVibGljOgogICAgIHN0YXRpYyB2b2lkIHN1YnNwYWNlRm9yKFZNJikgeyBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9CiAKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7
Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9y
Jik7CiAKICAgICBKU0NHTGliV3JhcHBlck9iamVjdCogd3JhcHBlZE9iamVjdCgpIGNvbnN0IHsg
cmV0dXJuIG1fd3JhcHBlZE9iamVjdDsgfQogICAgIHZvaWQgc2V0V3JhcHBlZE9iamVjdChKU0NH
TGliV3JhcHBlck9iamVjdCogd3JhcHBlZE9iamVjdCkgeyBtX3dyYXBwZWRPYmplY3QgPSB3cmFw
cGVkT2JqZWN0OyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNBUElX
cmFwcGVyT2JqZWN0R0xpYi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L0FQSS9nbGliL0pTQVBJV3JhcHBlck9iamVjdEdMaWIuY3BwCShyZXZpc2lvbiAyNzI4MzApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNBUElXcmFwcGVyT2JqZWN0R0xpYi5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIK
ICNpbmNsdWRlICJKU0FQSVdyYXBwZXJPYmplY3QuaCIKIAorI2luY2x1ZGUgIkFic3RyYWN0U2xv
dFZpc2l0b3IuaCIKICNpbmNsdWRlICJKU0NHTGliV3JhcHBlck9iamVjdC5oIgogI2luY2x1ZGUg
IkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJKU0NhbGxiYWNrT2JqZWN0LmgiCkBAIC0zNiw3ICsz
Nyw3IEBACiBjbGFzcyBKU0FQSVdyYXBwZXJPYmplY3RIYW5kbGVPd25lciBmaW5hbCA6IHB1Ymxp
YyBKU0M6OldlYWtIYW5kbGVPd25lciB7CiBwdWJsaWM6CiAgICAgdm9pZCBmaW5hbGl6ZShKU0M6
OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKikgZmluYWw7Ci0gICAgYm9vbCBpc1JlYWNoYWJs
ZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0
LCBKU0M6OlNsb3RWaXNpdG9yJiwgY29uc3QgY2hhcioqKSBmaW5hbDsKKyAgICBib29sIGlzUmVh
Y2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNv
bnRleHQsIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYsIGNvbnN0IGNoYXIqKikgZmluYWw7CiB9
OwogCiBzdGF0aWMgSlNBUElXcmFwcGVyT2JqZWN0SGFuZGxlT3duZXIqIGpzQVBJV3JhcHBlck9i
amVjdEhhbmRsZU93bmVyKCkKQEAgLTU1LDcgKzU2LDcgQEAgdm9pZCBKU0FQSVdyYXBwZXJPYmpl
Y3RIYW5kbGVPd25lcjo6ZmluYQogICAgIEpTQzo6V2Vha1NldDo6ZGVhbGxvY2F0ZShKU0M6Oldl
YWtJbXBsOjphc1dlYWtJbXBsKGhhbmRsZS5zbG90KCkpKTsKIH0KIAotYm9vbCBKU0FQSVdyYXBw
ZXJPYmplY3RIYW5kbGVPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5k
bGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9y
LCBjb25zdCBjaGFyKiopCitib29sIEpTQVBJV3JhcHBlck9iamVjdEhhbmRsZU93bmVyOjppc1Jl
YWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwg
dm9pZCosIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqKQog
ewogICAgIEpTQzo6SlNBUElXcmFwcGVyT2JqZWN0KiB3cmFwcGVyT2JqZWN0ID0gSlNDOjpqc0Nh
c3Q8SlNDOjpKU0FQSVdyYXBwZXJPYmplY3QqPihoYW5kbGUuZ2V0KCkuYXNDZWxsKCkpOwogICAg
IC8vIFdlIHVzZSB0aGUgSlNHbG9iYWxPYmplY3Qgd2hlbiBwcm9jZXNzaW5nIHdlYWsgaGFuZGxl
cyB0byBwcmV2ZW50IHRoZSBzaXR1YXRpb24gd2hlcmUgdXNpbmcKQEAgLTcyLDYgKzczLDggQEAg
c3RhdGljIEpTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJT04oY29uc3RydQogc3RhdGljIEpTQ19ERUNM
QVJFX0NVU1RPTV9HRVRURVIoY2FsbGJhY2tHZXR0ZXJKU0FQSVdyYXBwZXJPYmplY3RDYWxsYmFj
a09iamVjdCk7CiBzdGF0aWMgSlNDX0RFQ0xBUkVfQ1VTVE9NX0dFVFRFUihzdGF0aWNGdW5jdGlv
bkdldHRlckpTQVBJV3JhcHBlck9iamVjdENhbGxiYWNrT2JqZWN0KTsKIAorREVGSU5FX1ZJU0lU
X0NISUxEUkVOX1dJVEhfTU9ESUZJRVIodGVtcGxhdGU8PiwgSlNDYWxsYmFja09iamVjdDxKU0FQ
SVdyYXBwZXJPYmplY3Q+KTsKKwogdGVtcGxhdGUgPD4gY29uc3QgQ2xhc3NJbmZvIEpTQ2FsbGJh
Y2tPYmplY3Q8SlNBUElXcmFwcGVyT2JqZWN0Pjo6c19pbmZvID0geyAiSlNBUElXcmFwcGVyT2Jq
ZWN0IiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJM
RShKU0NhbGxiYWNrT2JqZWN0KSB9OwogdGVtcGxhdGU8PiBjb25zdCBib29sIEpTQ2FsbGJhY2tP
YmplY3Q8SlNBUElXcmFwcGVyT2JqZWN0Pjo6bmVlZHNEZXN0cnVjdGlvbiA9IHRydWU7CiAKQEAg
LTE1NSw5ICsxNTgsMTIgQEAgdm9pZCBKU0FQSVdyYXBwZXJPYmplY3Q6OnNldFdyYXBwZWRPYmpl
YwogICAgIG1fd3JhcHBlZE9iamVjdCA9IHdyYXBwZWRPYmplY3Q7CiB9CiAKLXZvaWQgSlNBUElX
cmFwcGVyT2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgSlNDOjpTbG90VmlzaXRv
ciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTQVBJV3JhcHBl
ck9iamVjdDo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9y
KQogewogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4oY2VsbCwgdmlzaXRvcik7CiB9CiAKK0RFRklO
RV9WSVNJVF9DSElMRFJFTl9XSVRIX01PRElGSUVSKEpTX0VYUE9SVF9QUklWQVRFLCBKU0FQSVdy
YXBwZXJPYmplY3QpOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpA
QCAtMTE1OCw2ICsxMTU4LDcgQEAKIAkJNjVCODM5MkUxQkFDQUQzNjAwNDRFODI0IC8qIENhY2hl
ZFJlY292ZXJ5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA2NUI4MzkyQzFCQUNBOTJBMDA0NEU4MjQgLyogQ2FjaGVkUmVjb3ZlcnkuaCAqLzsgfTsKIAkJ
NkEzOENGQUExRTMyQjVBQjAwNjAyMDZGIC8qIEFzeW5jU3RhY2tUcmFjZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkEzOENGQTgxRTMyQjU4QjAwNjAy
MDZGIC8qIEFzeW5jU3RhY2tUcmFjZS5oICovOyB9OwogCQk2QUQyQ0I0RDE5QjkxNDAxMDAwNjU3
MTkgLyogRGVidWdnZXJFdmFsRW5hYmxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNkFEMkNCNEMxOUI5MTQwMTAwMDY1NzE5IC8qIERlYnVnZ2VyRXZh
bEVuYWJsZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OworCQk2QkNDRUMwNDI1RDFGQTI3MDAwRjM5MUQgLyogVmVyaWZpZXJTbG90VmlzaXRvcklubGlu
ZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZCQ0NF
QzAzMjVEMUZBMjcwMDBGMzkxRCAvKiBWZXJpZmllclNsb3RWaXNpdG9ySW5saW5lcy5oICovOyB9
OwogCQk3MDExM0Q0QzFBOERCMDkzMDAzODQ4QzQgLyogSXRlcmF0b3JPcGVyYXRpb25zLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MDExM0Q0QTFBOERC
MDkzMDAzODQ4QzQgLyogSXRlcmF0b3JPcGVyYXRpb25zLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzAxM0NBOEMxQjQ5MUE5NDAwQ0FFNjEzIC8q
IEpTTWljcm90YXNrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA3MDEzQ0E4QTFCNDkxQTk0MDBDQUU2MTMgLyogSlNNaWNyb3Rhc2suaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3MDVCNDFBQzFBNkU1MDFF
MDA3MTY3NTcgLyogU3ltYm9sLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA3MDVCNDFBNDFBNkU1MDFFMDA3MTY3NTcgLyogU3ltYm9sLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTE5MTYsNiArMTkxNyw3
IEBACiAJCUUzRkY3NTMzMUQ5Q0VBMTgwMEM3RTE2RCAvKiBET01KSVRHZXR0ZXJTZXR0ZXIuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUzRkY3NTJGMUQ5
Q0VBMTIwMEM3RTE2RCAvKiBET01KSVRHZXR0ZXJTZXR0ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlFNDlEQzE2QzEyRUYyOTRFMDAxODRBMUYg
LyogU291cmNlUHJvdmlkZXJDYWNoZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRTQ5REMxNTExMkVGMjcyMjAwMTg0QTFGIC8qIFNvdXJjZVByb3ZpZGVy
Q2FjaGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQlFNDlEQzE2RDEyRUYyOTUzMDAxODRBMUYgLyogU291cmNlUHJvdmlkZXJDYWNoZUl0ZW0uaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0OURDMTQ5MTJF
RjI2MUEwMDE4NEExRiAvKiBTb3VyY2VQcm92aWRlckNhY2hlSXRlbS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUZFMDQxNTUzMjUyRUMwNzMwMDkx
RUI1RCAvKiBTbG90VmlzaXRvck1hY3Jvcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRkUwNDE1NTIyNTJFQzA3MzAwOTFFQjVEIC8qIFNsb3RWaXNpdG9y
TWFjcm9zLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJRkUwNUZBRkQxRkU0Q0VEQTAwMDkzMjMwIC8qIERlcHJlY2F0ZWRJbnNwZWN0b3JWYWx1ZXMu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTkyRDZB
MTExRkJENDkxRDAwMDI0NUY0IC8qIERlcHJlY2F0ZWRJbnNwZWN0b3JWYWx1ZXMuY3BwICovOyB9
OwogCQlGRTA4NkJDQTIxMjNERUZCMDAzRjI5MjkgLyogRW50cnlGcmFtZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUwODZCQzkyMTIzREVGQTAwM0Yy
OTI5IC8qIEVudHJ5RnJhbWUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQlGRTBENEEwNjFBQjhERDBBMDAyRjU0QkYgLyogRXhlY3V0aW9uVGltZUxp
bWl0VGVzdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBGRTBENEEwNDFBQjhERDBBMDAyRjU0QkYgLyogRXhlY3V0aW9uVGltZUxpbWl0VGVzdC5jcHAg
Ki87IH07CkBAIC0xOTM4LDYgKzE5NDAsNyBAQAogCQlGRTFFMkMzRjIyNDBERDU4MDBGNkI3Mjkg
LyogTWFjcm9Bc3NlbWJsZXJBUk02NEUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEZFMUUyQzNFMjI0MEQzMEIwMEY2QjcyOSAvKiBNYWNyb0Fzc2VtYmxl
ckFSTTY0RS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCUZFMUUyQzQwMjI0MERENjIwMEY2QjcyOSAvKiBBUk02NEVBc3NlbWJsZXIuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFMUUyQzNEMjI0MEQyRjYw
MEY2QjcyOSAvKiBBUk02NEVBc3NlbWJsZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQlGRTIwQ0U5RTE1RjA0QTk1MDBERjM0MzAgLyogTExJbnRD
TG9vcC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUy
MENFOUMxNUYwNEE5NTAwREYzNDMwIC8qIExMSW50Q0xvb3AuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlGRTI4N0QwMjI1MkZCMkU4MDBENzIzRjkg
LyogVmVyaWZpZXJTbG90VmlzaXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRkUyODdEMDEyNTJGQjJFODAwRDcyM0Y5IC8qIFZlcmlmaWVyU2xvdFZp
c2l0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQlGRTJBODc2MDFGMDIzODE2MDBFQjMxQjIgLyogTWluaW11bVJlc2VydmVkWm9uZVNpemUuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFMkE4NzVGMUYw
MjM4MTYwMEVCMzFCMiAvKiBNaW5pbXVtUmVzZXJ2ZWRab25lU2l6ZS5oICovOyB9OwogCQlGRTMw
MjJEMzFFM0Q3M0E1MDBCQUM0OTMgLyogU2lnaWxsQ3Jhc2hBbmFseXplci5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUzMDIyRDExRTNENzM5NjAwQkFD
NDkzIC8qIFNpZ2lsbENyYXNoQW5hbHl6ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQlGRTMwMjJENzFFNDI4NTczMDBCQUM0OTMgLyogVk1JbnNw
ZWN0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZF
MzAyMkQ1MUU0Mjg1NjcwMEJBQzQ5MyAvKiBWTUluc3BlY3Rvci5oICovOyB9OwpAQCAtMTk3Niw2
ICsxOTc5LDggQEAKIAkJRkU4MEMxOTcxRDc3NUNERDAwODUxMEMwIC8qIENhdGNoU2NvcGUuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFODBDMTk2MUQ3
NzVCMjcwMDg1MTBDMCAvKiBDYXRjaFNjb3BlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRkU4REU1NEIyM0FDMURBRDAwNUM5MTQyIC8qIENhY2hl
YWJsZUlkZW50aWZpZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEZFOERFNTRBMjNBQzFEQUQwMDVDOTE0MiAvKiBDYWNoZWFibGVJZGVudGlmaWVyLmgg
Ki87IH07CiAJCUZFOERFNTREMjNBQzFFODYwMDVDOTE0MiAvKiBDYWNoZWFibGVJZGVudGlmaWVy
SW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RkU4REU1NEMyM0FDMUU4NjAwNUM5MTQyIC8qIENhY2hlYWJsZUlkZW50aWZpZXJJbmxpbmVzLmgg
Ki87IH07CisJCUZFOTEyQjRGMjUzMTE5MzMwMEZBQkRERiAvKiBBYnN0cmFjdFNsb3RWaXNpdG9y
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTkxMkI0
RTI1MzExOTMzMDBGQUJEREYgLyogQWJzdHJhY3RTbG90VmlzaXRvci5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUZFOTEyQjUxMjUzMTFBRDEwMEZB
QkRERiAvKiBBYnN0cmFjdFNsb3RWaXNpdG9ySW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkU5MTJCNTAyNTMxMUFEMTAwRkFCRERGIC8qIEFi
c3RyYWN0U2xvdFZpc2l0b3JJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJRkU5OUIyNDkxQzI0QzNEMzAwQzgyMTU5IC8qIEpJVE5lZ0dl
bmVyYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RkU5OUIyNDgxQzI0QjZEMzAwQzgyMTU5IC8qIEpJVE5lZ0dlbmVyYXRvci5oICovOyB9OwogCQlG
RUEwODYyMDE4MkI3QTA0MDBGNkQ4NTEgLyogQnJlYWtwb2ludC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkVBMDg2MUUxODJCN0EwNDAwRjZEODUxIC8q
IEJyZWFrcG9pbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQlGRUEwODYyMTE4MkI3QTA0MDBGNkQ4NTEgLyogRGVidWdnZXJQcmltaXRpdmVzLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRUEwODYxRjE4
MkI3QTA0MDBGNkQ4NTEgLyogRGVidWdnZXJQcmltaXRpdmVzLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTM5ODgsNiArMzk5Myw3IEBACiAJCTZB
MzhDRkE4MUUzMkI1OEIwMDYwMjA2RiAvKiBBc3luY1N0YWNrVHJhY2UuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gQXN5bmNTdGFja1RyYWNlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTZBRDJDQjRDMTlCOTE0MDEwMDA2NTcxOSAvKiBEZWJ1Z2dlckV2YWxFbmFi
bGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERlYnVnZ2VyRXZhbEVuYWJs
ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkJBOTNDOTU5MDQ4NEM1QkFEOTMx
NkVBIC8qIEpTU2NyaXB0RmV0Y2hlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBKU1NjcmlwdEZldGNoZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNkJDQ0VD
MDMyNUQxRkEyNzAwMEYzOTFEIC8qIFZlcmlmaWVyU2xvdFZpc2l0b3JJbmxpbmVzLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZlcmlmaWVyU2xvdFZpc2l0b3JJbmxpbmVzLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcwMTEzRDQ5MUE4REIwOTMwMDM4NDhDNCAv
KiBJdGVyYXRvck9wZXJhdGlvbnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gSXRlcmF0b3JPcGVyYXRpb25zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNzAxMTNENEExQThEQjA5MzAwMzg0OEM0IC8qIEl0ZXJhdG9yT3BlcmF0aW9ucy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJdGVyYXRvck9wZXJhdGlvbnMuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzAxM0NBODkxQjQ5MUE5NDAwQ0FFNjEzIC8qIEpTTWlj
cm90YXNrLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTTWljcm90
YXNrLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTUyMjEsNiArNTIyNyw3IEBA
CiAJCUY2OTJBODg3MDI1NTU5N0QwMUZGNjBGNyAvKiBKU0NKU1ZhbHVlLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTQ0pTVmFsdWUu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IH07CiAJCUY3MzkyNjkx
OERDNjQzMzBBRkNERjBENyAvKiBKU1NvdXJjZUNvZGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gSlNTb3VyY2VDb2RlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJRkUwMDI2MjIyM0YzQUYzMzAwM0EzNThGIC8qIFdlYkFzc2VtYmx5LmFzbSAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
YXNtLmFzbTsgbmFtZSA9IFdlYkFzc2VtYmx5LmFzbTsgcGF0aCA9IGxsaW50L1dlYkFzc2VtYmx5
LmFzbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkUwNDE1NTIyNTJFQzA3MzAwOTFF
QjVEIC8qIFNsb3RWaXNpdG9yTWFjcm9zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFNsb3RWaXNpdG9yTWFjcm9zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZF
MDg2QkM5MjEyM0RFRkEwMDNGMjkyOSAvKiBFbnRyeUZyYW1lLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEVudHJ5RnJhbWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJRkUwRDRBMDQxQUI4REQwQTAwMkY1NEJGIC8qIEV4ZWN1dGlvblRpbWVMaW1pdFRlc3QuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gRXhlY3V0aW9uVGltZUxpbWl0
VGVzdC5jcHA7IHBhdGggPSBBUEkvdGVzdHMvRXhlY3V0aW9uVGltZUxpbWl0VGVzdC5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFMEQ0QTA1MUFCOEREMEEwMDJGNTRCRiAvKiBF
eGVjdXRpb25UaW1lTGltaXRUZXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IEV4ZWN1dGlvblRpbWVMaW1pdFRlc3QuaDsgcGF0aCA9IEFQSS90ZXN0cy9FeGVjdXRpb25UaW1l
TGltaXRUZXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01MjU1LDcgKzUyNjIs
OSBAQAogCQlGRTFFMkMzRTIyNDBEMzBCMDBGNkI3MjkgLyogTWFjcm9Bc3NlbWJsZXJBUk02NEUu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWFjcm9Bc3NlbWJsZXJBUk02NEUu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkUyMENFOUIxNUYwNEE5NTAwREYzNDMw
IC8qIExMSW50Q0xvb3AuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0g
TExJbnRDTG9vcC5jcHA7IHBhdGggPSBsbGludC9MTEludENMb29wLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJRkUyMENFOUMxNUYwNEE5NTAwREYzNDMwIC8qIExMSW50Q0xvb3Au
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gTExJbnRDTG9vcC5oOyBwYXRoID0g
bGxpbnQvTExJbnRDTG9vcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRTI4N0Qw
MTI1MkZCMkU4MDBENzIzRjkgLyogVmVyaWZpZXJTbG90VmlzaXRvci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBWZXJpZmllclNsb3RWaXNpdG9yLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUZFMkE4NzVGMUYwMjM4MTYwMEVCMzFCMiAvKiBNaW5pbXVtUmVzZXJ2
ZWRab25lU2l6ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNaW5pbXVtUmVzZXJ2ZWRab25lU2l6ZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRTJCRDY2RTI1QzBEQzgyMDA5OTlEM0IgLyog
VmVyaWZpZXJTbG90VmlzaXRvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBWZXJpZmllclNsb3RWaXNpdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJRkUyRTZBN0ExRDZFQTVGRTAwNjBGODk2IC8qIFRocm93U2NvcGUuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVGhyb3dTY29wZS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUZFMzAyMkQwMUUzRDczOTYwMEJBQzQ5MyAvKiBTaWdpbGxDcmFzaEFu
YWx5emVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNpZ2lsbENy
YXNoQW5hbHl6ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTMwMjJEMTFF
M0Q3Mzk2MDBCQUM0OTMgLyogU2lnaWxsQ3Jhc2hBbmFseXplci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBTaWdpbGxDcmFzaEFuYWx5emVyLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC01MzI5LDYgKzUzMzgsOCBAQAogCQlGRThERTU0QzIzQUMxRTg2MDA1Qzkx
NDIgLyogQ2FjaGVhYmxlSWRlbnRpZmllcklubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gQ2FjaGVhYmxlSWRlbnRpZmllcklubGluZXMuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJRkU4REU1NEUyM0FDM0E4RTAwNUM5MTQyIC8qIENhY2hlYWJsZUlkZW50
aWZpZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ2FjaGVhYmxlSWRlbnRpZmllci5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFOTBCQjNBMUI3Q0Y2NEUwMDZCM0YwMyAvKiBW
TUlubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVk1JbmxpbmVzLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZFOTEyQjRFMjUzMTE5MzMwMEZBQkRERiAv
KiBBYnN0cmFjdFNsb3RWaXNpdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEFic3RyYWN0U2xvdFZpc2l0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkU5
MTJCNTAyNTMxMUFEMTAwRkFCRERGIC8qIEFic3RyYWN0U2xvdFZpc2l0b3JJbmxpbmVzLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFic3RyYWN0U2xvdFZpc2l0b3JJbmxpbmVz
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFOThCNUI2MUJCOUFFMTEwMDczRTdB
NiAvKiBKSVRTdWJHZW5lcmF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
SklUU3ViR2VuZXJhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFOTlCMjQ3
MUMyNEI2RDMwMEM4MjE1OSAvKiBKSVROZWdHZW5lcmF0b3IuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gSklUTmVnR2VuZXJhdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJRkU5OUIyNDgxQzI0QjZEMzAwQzgyMTU5IC8qIEpJVE5lZ0dlbmVyYXRv
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKSVROZWdHZW5lcmF0b3IuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTYyNzgsNiArNjI4OSw4IEBACiAJCTE0MkUz
MTJBMTM0RkYwQTYwMEFGQURCNSAvKiBoZWFwICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJ
CQljaGlsZHJlbiA9ICgKKwkJCQlGRTkxMkI0RTI1MzExOTMzMDBGQUJEREYgLyogQWJzdHJhY3RT
bG90VmlzaXRvci5oICovLAorCQkJCUZFOTEyQjUwMjUzMTFBRDEwMEZBQkRERiAvKiBBYnN0cmFj
dFNsb3RWaXNpdG9ySW5saW5lcy5oICovLAogCQkJCTBGRUMzQzUwMUYzM0E0MTYwMEY1OUI2QyAv
KiBBbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmNwcCAqLywKIAkJCQkwRkVDM0M1MTFGMzNBNDE2MDBG
NTlCNkMgLyogQWxpZ25lZE1lbW9yeUFsbG9jYXRvci5oICovLAogCQkJCTBGQTc2MjBBMURCOTU5
RjYwMEI3QTJGRCAvKiBBbGxvY2F0aW5nU2NvcGUuaCAqLywKQEAgLTY0MzUsNiArNjQ0OCw3IEBA
CiAJCQkJQzIyNTQ5NDIxNUY3REJBQTAwNjVFODk4IC8qIFNsb3RWaXNpdG9yLmNwcCAqLywKIAkJ
CQkxNEJBNzhGMDEzQUFCODhGMDA1QjdDMkMgLyogU2xvdFZpc2l0b3IuaCAqLywKIAkJCQkwRkNC
NDA4NTE1QzBBM0MzMDA0ODkzMkIgLyogU2xvdFZpc2l0b3JJbmxpbmVzLmggKi8sCisJCQkJRkUw
NDE1NTIyNTJFQzA3MzAwOTFFQjVEIC8qIFNsb3RWaXNpdG9yTWFjcm9zLmggKi8sCiAJCQkJMEZE
RTg3RkExREZFNkU1MDAwNjRDMzkwIC8qIFNwYWNlVGltZU11dGF0b3JTY2hlZHVsZXIuY3BwICov
LAogCQkJCTBGREU4N0ZCMURGRTZFNTAwMDY0QzM5MCAvKiBTcGFjZVRpbWVNdXRhdG9yU2NoZWR1
bGVyLmggKi8sCiAJCQkJMEY0RjgyODkxRTMxQjk3MTAwNzUxODRDIC8qIFN0b2NoYXN0aWNTcGFj
ZVRpbWVNdXRhdG9yU2NoZWR1bGVyLmNwcCAqLywKQEAgLTY0NTIsNiArNjQ2Niw5IEBACiAJCQkJ
MEYxRkIzOEExRTE3M0E2MjAwQTlCRTUwIC8qIFN5bmNocm9ub3VzU3RvcFRoZVdvcmxkTXV0YXRv
clNjaGVkdWxlci5jcHAgKi8sCiAJCQkJMEYxRkIzOEIxRTE3M0E2MjAwQTlCRTUwIC8qIFN5bmNo
cm9ub3VzU3RvcFRoZVdvcmxkTXV0YXRvclNjaGVkdWxlci5oICovLAogCQkJCTE0MTQ0OENDMTNB
MTc4MzcwMEY1QkExQSAvKiBUaW55Qmxvb21GaWx0ZXIuaCAqLywKKwkJCQlGRTJCRDY2RTI1QzBE
QzgyMDA5OTlEM0IgLyogVmVyaWZpZXJTbG90VmlzaXRvci5jcHAgKi8sCisJCQkJRkUyODdEMDEy
NTJGQjJFODAwRDcyM0Y5IC8qIFZlcmlmaWVyU2xvdFZpc2l0b3IuaCAqLywKKwkJCQk2QkNDRUMw
MzI1RDFGQTI3MDAwRjM5MUQgLyogVmVyaWZpZXJTbG90VmlzaXRvcklubGluZXMuaCAqLywKIAkJ
CQkwRjREOEM3MjFGQzdBOTczMDAxRDMyQUMgLyogVmlzaXRDb3VudGVyLmggKi8sCiAJCQkJMEY5
NTJBOUYxREY3ODYwNzAwRTA2RkJEIC8qIFZpc2l0UmFjZUtleS5jcHAgKi8sCiAJCQkJMEY5NTJB
QTAxREY3ODYwNzAwRTA2RkJEIC8qIFZpc2l0UmFjZUtleS5oICovLApAQCAtOTI5Myw2ICs5MzEw
LDcgQEAKIAkJCQkxNDdCODNBQzBFNkRCOEM5MDA0Nzc1QTQgLyogQmF0Y2hlZFRyYW5zaXRpb25P
cHRpbWl6ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUUzNUU4OUZEMjVDNTBGODcwMDcxRUUxRSAv
KiBCaWdJbnQ2NEFycmF5LmggaW4gSGVhZGVycyAqLywKIAkJCQk4Njk3NkU1RjFGQTNFOEJDMDBF
N0M0RTEgLyogQmlnSW50Q29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJCUZFMDQxNTUz
MjUyRUMwNzMwMDkxRUI1RCAvKiBTbG90VmlzaXRvck1hY3Jvcy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJODY2NzM5RDIxM0JGREU3MTAwMjNEODdDIC8qIEJpZ0ludGVnZXIuaCBpbiBIZWFkZXJzICov
LAogCQkJCTg2MTgxNjc3MUZCNzkyNDIwMEVDQzRFQyAvKiBCaWdJbnRPYmplY3QuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTg2OTc2RTVFMUZBM0U4QjYwMEU3QzRFMSAvKiBCaWdJbnRQcm90b3R5cGUu
aCBpbiBIZWFkZXJzICovLApAQCAtOTU3NCw2ICs5NTkyLDcgQEAKIAkJCQkwRkQ4MkU1NzE0MURB
RjEwMDAxNzlDOTQgLyogREZHT1NSRW50cnkuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRDhBMzI2
MTdENTFGNTcwMENBMkM0MCAvKiBERkdPU1JFbnRyeXBvaW50Q3JlYXRpb25QaGFzZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEZDMDk3NkExNDY4QTZGNzAwQ0YyNDQyIC8qIERGR09TUkV4aXQuaCBp
biBIZWFkZXJzICovLAorCQkJCUZFOTEyQjRGMjUzMTE5MzMwMEZBQkRERiAvKiBBYnN0cmFjdFNs
b3RWaXNpdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjIzNUJFQzE3MTc4RTczMDA2OTBDN0Yg
LyogREZHT1NSRXhpdEJhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRkI5MjFDMTZEMDJGMTEw
MDU1QTVEQiAvKiBERkdPU1JFeGl0Q29tcGlsYXRpb25JbmZvLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRjcwMjVBQTE3MTRCMEZDMDAzODJDMEUgLyogREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmgg
aW4gSGVhZGVycyAqLywKQEAgLTk4NTksNiArOTg3OCw3IEBACiAJCQkJQTUxM0U1QkUxODVCRkFD
QzAwN0U5NUFEIC8qIEluamVjdGVkU2NyaXB0SG9zdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTUx
M0U1Q0IxODVGOTYyNDAwN0U5NUFEIC8qIEluamVjdGVkU2NyaXB0TWFuYWdlci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQTU4NDBFMjExODdCN0I4NjAwODQzQjEwIC8qIEluamVjdGVkU2NyaXB0TW9k
dWxlLmggaW4gSGVhZGVycyAqLywKKwkJCQlGRTI4N0QwMjI1MkZCMkU4MDBENzIzRjkgLyogVmVy
aWZpZXJTbG90VmlzaXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTUxM0U1QzcxODVGOTQ0NjAw
N0U5NUFEIC8qIEluamVjdGVkU2NyaXB0U291cmNlLmggaW4gSGVhZGVycyAqLywKIAkJCQk5OTU5
RTkzMjFCRDE4Mjc5MDAxQUE0MTMgLyogaW5saW5lLWFuZC1taW5pZnktc3R5bGVzaGVldHMtYW5k
LXNjcmlwdHMucHkgaW4gSGVhZGVycyAqLywKIAkJCQk3OTA1QkI2OTFEMTIwNTBFMDAxOUZFNTcg
LyogSW5saW5lQWNjZXNzLmggaW4gSGVhZGVycyAqLywKQEAgLTEwMDM0LDYgKzEwMDU0LDcgQEAK
IAkJCQlBNThDMDI0MjE4RTRBNDFBMDAwMzJCQzUgLyogSlNDb250ZXh0UHJpdmF0ZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQkMxOEM0MUUwRTE2RjVDRDAwQjM0NDYwIC8qIEpTQ29udGV4dFJlZi5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQTVFQTcwRUUxOUY1QjVDNDAwOThGNUVDIC8qIEpTQ29udGV4
dFJlZkluc3BlY3RvclN1cHBvcnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTZCQ0NFQzA0MjVEMUZB
MjcwMDBGMzkxRCAvKiBWZXJpZmllclNsb3RWaXNpdG9ySW5saW5lcy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQTVEMkU2NjUxOTVFMTc0MDAwQTUxOEU3IC8qIEpTQ29udGV4dFJlZkludGVybmFsLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkxNDhDRDFEODEwOENGOTAyMDA4MTYzQzYgLyogSlNDb250ZXh0
UmVmUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkU3NDk3RTYyMDkwMDFCMTAwMDM1NjVC
IC8qIEpTQ1B0clRhZy5oIGluIEhlYWRlcnMgKi8sCkBAIC0xMDE2NCw2ICsxMDE4NSw3IEBACiAJ
CQkJNzk1QUM2MTgyMEEyMzU1RTAwNTJDNzZDIC8qIEpTVmlydHVhbE1hY2hpbmVQcml2YXRlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlBN0NBM0FFODE3REE0MUFFMDA2NTM4QUYgLyogSlNXZWFrTWFw
LmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzQ4MkU5MzExNkE3Q0FEMDAzQjA3MTIgLyogSlNXZWFr
T2JqZWN0TWFwUmVmSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAorCQkJCUZFOTEyQjUxMjUzMTFB
RDEwMEZBQkRERiAvKiBBYnN0cmFjdFNsb3RWaXNpdG9ySW5saW5lcy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQTc0ODJCOTMxMTY3MTE0NzAwM0IwNzEyIC8qIEpTV2Vha09iamVjdE1hcFJlZlByaXZh
dGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTUzOUJGQkIwMjJBRDNDREMwMDIzRjRDMCAvKiBKU1dl
YWtPYmplY3RSZWYuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMEIyODZCMUVCOEU2Q0YwMDBFQjVE
MiAvKiBKU1dlYWtQcml2YXRlLmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9TY3JpcHRzL3drYnVpbHRpbnMvYnVpbHRpbnNfZ2VuZXJhdGVfaW50ZXJuYWxzX3dy
YXBwZXJfaGVhZGVyLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3Jp
cHRzL3drYnVpbHRpbnMvYnVpbHRpbnNfZ2VuZXJhdGVfaW50ZXJuYWxzX3dyYXBwZXJfaGVhZGVy
LnB5CShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy93
a2J1aWx0aW5zL2J1aWx0aW5zX2dlbmVyYXRlX2ludGVybmFsc193cmFwcGVyX2hlYWRlci5weQko
d29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKICMhL3Vzci9iaW4vZW52IHB5dGhvbgogIwot
IyBDb3B5cmlnaHQgKGMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyBD
b3B5cmlnaHQgKGMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAj
CiAjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTkzLDcgKzkzLDcgQEAgY2xhc3MgQnVpbHRp
bnNJbnRlcm5hbHNXcmFwcGVySGVhZGVyR2VuZQogCiAgICAgZGVmIGdlbmVyYXRlX21ldGhvZHMo
c2VsZik6CiAgICAgICAgIHJldHVybiAiIiIKLSAgICB2b2lkIHZpc2l0KEpTQzo6U2xvdFZpc2l0
b3ImKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIHZpc2l0KFZpc2l0b3Im
KTsKICAgICB2b2lkIGluaXRpYWxpemUoSlNET01HbG9iYWxPYmplY3QmKTsKICIiIgogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy93a2J1aWx0aW5zL2J1aWx0aW5zX2dlbmVy
YXRlX2ludGVybmFsc193cmFwcGVyX2ltcGxlbWVudGF0aW9uLnB5Cj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL3drYnVpbHRpbnMvYnVpbHRpbnNfZ2VuZXJhdGVf
aW50ZXJuYWxzX3dyYXBwZXJfaW1wbGVtZW50YXRpb24ucHkJKHJldmlzaW9uIDI3MjgzMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL3drYnVpbHRpbnMvYnVpbHRpbnNfZ2VuZXJh
dGVfaW50ZXJuYWxzX3dyYXBwZXJfaW1wbGVtZW50YXRpb24ucHkJKHdvcmtpbmcgY29weSkKQEAg
LTEsNiArMSw2IEBACiAjIS91c3IvYmluL2VudiBweXRob24KICMKLSMgQ29weXJpZ2h0IChjKSAy
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgQ29weXJpZ2h0IChjKSAyMDE2
LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogIwogIyBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICMg
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0xMjAsMTMgKzEyMCwxNiBAQCBjbGFzcyBCdWlsdGluc0ludGVybmFsc1dy
YXBwZXJJbXBsZW1lbnRhCiAgICAgICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMpCiAKICAgICBk
ZWYgZ2VuZXJhdGVfdmlzaXRfbWV0aG9kKHNlbGYpOgotICAgICAgICBsaW5lcyA9IFsidm9pZCBK
U0J1aWx0aW5JbnRlcm5hbEZ1bmN0aW9uczo6dmlzaXQoSlNDOjpTbG90VmlzaXRvciYgdmlzaXRv
cikiLAorICAgICAgICBsaW5lcyA9IFsidGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4iLAorICAg
ICAgICAgICAgICAgICAidm9pZCBKU0J1aWx0aW5JbnRlcm5hbEZ1bmN0aW9uczo6dmlzaXQoVmlz
aXRvciYgdmlzaXRvcikiLAogICAgICAgICAgICAgICAgICAieyJdCiAgICAgICAgIGZvciBvYmpl
Y3QgaW4gc2VsZi5pbnRlcm5hbHM6CiAgICAgICAgICAgICB2aXNpdCA9ICIgICAgJXMudmlzaXQo
dmlzaXRvcik7IiAlIHNlbGYubWVtYmVyX25hbWUob2JqZWN0KQogICAgICAgICAgICAgbGluZXMu
YXBwZW5kKEJ1aWx0aW5zR2VuZXJhdG9yLndyYXBfd2l0aF9ndWFyZChvYmplY3QuYW5ub3RhdGlv
bnMuZ2V0KCdjb25kaXRpb25hbCcpLCB2aXNpdCkpCiAgICAgICAgIGxpbmVzLmFwcGVuZCgiICAg
IFVOVVNFRF9QQVJBTSh2aXNpdG9yKTsiKQogICAgICAgICBsaW5lcy5hcHBlbmQoIn1cbiIpCisg
ICAgICAgIGxpbmVzLmFwcGVuZCgidGVtcGxhdGUgdm9pZCBKU0J1aWx0aW5JbnRlcm5hbEZ1bmN0
aW9uczo6dmlzaXQoQWJzdHJhY3RTbG90VmlzaXRvciYpOyIpCisgICAgICAgIGxpbmVzLmFwcGVu
ZCgidGVtcGxhdGUgdm9pZCBKU0J1aWx0aW5JbnRlcm5hbEZ1bmN0aW9uczo6dmlzaXQoU2xvdFZp
c2l0b3ImKTtcbiIpCiAgICAgICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMpCiAKICAgICBkZWYg
X2dlbmVyYXRlX2luaXRpYWxpemVfc3RhdGljX2dsb2JhbHMoc2VsZik6CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvU2NyaXB0cy93a2J1aWx0aW5zL2J1aWx0aW5zX3RlbXBsYXRlcy5weQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy93a2J1aWx0aW5zL2J1
aWx0aW5zX3RlbXBsYXRlcy5weQkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL1NjcmlwdHMvd2tidWlsdGlucy9idWlsdGluc190ZW1wbGF0ZXMucHkJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNiArMSw2IEBACiAjIS91c3IvYmluL2VudiBweXRob24KICMKLSMgQ29weXJp
Z2h0IChjKSAyMDE0LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyBDb3B5
cmlnaHQgKGMpIDIwMTQtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAjIENv
cHlyaWdodCAoQykgMjAxNSBDYW5vbiBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAjCiAjIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dApAQCAtMTg4LDcgKzE4OCw3IEBAIHB1YmxpYzoKICAgICBleHBsaWNpdCAke29iamVj
dE5hbWV9QnVpbHRpbkZ1bmN0aW9ucyhKU0M6OlZNJiB2bSkgOiBtX3ZtKHZtKSB7IH0KIAogICAg
IHZvaWQgaW5pdChKU0M6OkpTR2xvYmFsT2JqZWN0Jik7Ci0gICAgdm9pZCB2aXNpdChKU0M6OlNs
b3RWaXNpdG9yJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCB2aXNpdChW
aXNpdG9yJik7CiAKIHB1YmxpYzoKICAgICBKU0M6OlZNJiBtX3ZtOwpAQCAtMjA3LDEwICsyMDcs
MTUgQEAgaW5saW5lIHZvaWQgJHtvYmplY3ROYW1lfUJ1aWx0aW5GdW5jdGlvbgogI3VuZGVmIEVY
UE9SVF9GVU5DVElPTgogfQogCi1pbmxpbmUgdm9pZCAke29iamVjdE5hbWV9QnVpbHRpbkZ1bmN0
aW9uczo6dmlzaXQoSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1l
IFZpc2l0b3I+CitpbmxpbmUgdm9pZCAke29iamVjdE5hbWV9QnVpbHRpbkZ1bmN0aW9uczo6dmlz
aXQoVmlzaXRvciYgdmlzaXRvcikKIHsKICNkZWZpbmUgVklTSVRfRlVOQ1RJT04obmFtZSkgdmlz
aXRvci5hcHBlbmQobV8jI25hbWUjI0Z1bmN0aW9uKTsKICAgICAke21hY3JvUHJlZml4fV9GT1JF
QUNIXyR7b2JqZWN0TWFjcm99X0JVSUxUSU5fRlVOQ1RJT05fTkFNRShWSVNJVF9GVU5DVElPTikK
ICN1bmRlZiBWSVNJVF9GVU5DVElPTgogfQorCit0ZW1wbGF0ZSB2b2lkICR7b2JqZWN0TmFtZX1C
dWlsdGluRnVuY3Rpb25zOjp2aXNpdChKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBs
YXRlIHZvaWQgJHtvYmplY3ROYW1lfUJ1aWx0aW5GdW5jdGlvbnM6OnZpc2l0KEpTQzo6U2xvdFZp
c2l0b3ImKTsKKwogIiIiKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Fj
Y2Vzc0Nhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9BY2Nlc3NDYXNlLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNzU3LDcgKzc1
Nyw4IEBAIGJvb2wgQWNjZXNzQ2FzZTo6dmlzaXRXZWFrKFZNJiB2bSkgY29uc3QKICAgICByZXR1
cm4gaXNWYWxpZDsKIH0KIAotYm9vbCBBY2Nlc3NDYXNlOjpwcm9wYWdhdGVUcmFuc2l0aW9ucyhT
bG90VmlzaXRvciYgdmlzaXRvcikgY29uc3QKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Citi
b29sIEFjY2Vzc0Nhc2U6OnByb3BhZ2F0ZVRyYW5zaXRpb25zKFZpc2l0b3ImIHZpc2l0b3IpIGNv
bnN0CiB7CiAgICAgYm9vbCByZXN1bHQgPSB0cnVlOwogCkBAIC03NzIsNyArNzczLDcgQEAgYm9v
bCBBY2Nlc3NDYXNlOjpwcm9wYWdhdGVUcmFuc2l0aW9ucyhTbAogICAgIHN3aXRjaCAobV90eXBl
KSB7CiAgICAgY2FzZSBUcmFuc2l0aW9uOgogICAgIGNhc2UgRGVsZXRlOgotICAgICAgICBpZiAo
dmlzaXRvci52bSgpLmhlYXAuaXNNYXJrZWQobV9zdHJ1Y3R1cmUtPnByZXZpb3VzSUQoKSkpCisg
ICAgICAgIGlmICh2aXNpdG9yLmlzTWFya2VkKG1fc3RydWN0dXJlLT5wcmV2aW91c0lEKCkpKQog
ICAgICAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZChtX3N0cnVjdHVyZS5nZXQoKSk7
CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHJlc3VsdCA9IGZhbHNlOwpAQCAtNzg0LDExICs3
ODUsMTggQEAgYm9vbCBBY2Nlc3NDYXNlOjpwcm9wYWdhdGVUcmFuc2l0aW9ucyhTbAogICAgIHJl
dHVybiByZXN1bHQ7CiB9CiAKLXZvaWQgQWNjZXNzQ2FzZTo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZp
c2l0b3ImIHZpc2l0b3IpIGNvbnN0Cit0ZW1wbGF0ZSBib29sIEFjY2Vzc0Nhc2U6OnByb3BhZ2F0
ZVRyYW5zaXRpb25zKEFic3RyYWN0U2xvdFZpc2l0b3ImKSBjb25zdDsKK3RlbXBsYXRlIGJvb2wg
QWNjZXNzQ2FzZTo6cHJvcGFnYXRlVHJhbnNpdGlvbnMoU2xvdFZpc2l0b3ImKSBjb25zdDsKKwor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBBY2Nlc3NDYXNlOjp2aXNpdEFnZ3Jl
Z2F0ZUltcGwoVmlzaXRvciYgdmlzaXRvcikgY29uc3QKIHsKICAgICBtX2lkZW50aWZpZXIudmlz
aXRBZ2dyZWdhdGUodmlzaXRvcik7CiB9CiAKK0RFRklORV9WSVNJVF9BR0dSRUdBVEVfV0lUSF9N
T0RJRklFUihBY2Nlc3NDYXNlLCBjb25zdCk7CisKIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVX
aXRoR3VhcmQoCiAgICAgQWNjZXNzR2VuZXJhdGlvblN0YXRlJiBzdGF0ZSwgQ0NhbGxIZWxwZXJz
OjpKdW1wTGlzdCYgZmFsbFRocm91Z2gpCiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQWNjZXNzQ2FzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yODAs
OSArMjgwLDkgQEAgcHJpdmF0ZToKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgogICAg
IHZvaWQgZm9yRWFjaERlcGVuZGVudENlbGwoVk0mLCBjb25zdCBGdW5jdG9yJikgY29uc3Q7CiAK
LSAgICB2b2lkIHZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJikgY29uc3Q7CisgICAgREVDTEFS
RV9WSVNJVF9BR0dSRUdBVEVfV0lUSF9NT0RJRklFUihjb25zdCk7CiAgICAgYm9vbCB2aXNpdFdl
YWsoVk0mKSBjb25zdDsKLSAgICBib29sIHByb3BhZ2F0ZVRyYW5zaXRpb25zKFNsb3RWaXNpdG9y
JikgY29uc3Q7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gYm9vbCBwcm9wYWdhdGVU
cmFuc2l0aW9ucyhWaXNpdG9yJikgY29uc3Q7CiAKICAgICAvLyBGSVhNRTogVGhpcyBvbmx5IGV4
aXN0cyBiZWNhdXNlIG9mIGhvdyBBY2Nlc3NDYXNlIHB1dHMgcG9zdC1nZW5lcmF0aW9uIHRoaW5n
cyBpbnRvIGl0c2VsZi4KICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTU2NDU2CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnlWYWxJ
bmZvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnlW
YWxJbmZvLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0J5VmFsSW5mby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAyMC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzIsMTEgKzMyLDE0IEBAIG5hbWVz
cGFjZSBKU0MgewogCiAjaWYgRU5BQkxFKEpJVCkKIAotdm9pZCBCeVZhbEluZm86OnZpc2l0QWdn
cmVnYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4K
K3ZvaWQgQnlWYWxJbmZvOjp2aXNpdEFnZ3JlZ2F0ZUltcGwoVmlzaXRvciYgdmlzaXRvcikKIHsK
ICAgICBjYWNoZWRJZC52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKIH0KIAorREVGSU5FX1ZJU0lU
X0FHR1JFR0FURShCeVZhbEluZm8pOworCiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKIAogfSAvLyBu
YW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnlWYWxJ
bmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5VmFs
SW5mby5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQnlWYWxJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDEyLTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEyLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNjAsNyArMjYwLDcgQEAgc3RydWN0
IEJ5VmFsSW5mbyB7CiAgICAgICAgIHRoaXMtPnNlZW4gPSBmYWxzZTsKICAgICB9CiAKLSAgICB2
b2lkIHZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9BR0dS
RUdBVEU7CiAKICAgICBDb2RlTG9jYXRpb25KdW1wPEpTSW50ZXJuYWxQdHJUYWc+IG5vdEluZGV4
SnVtcDsKICAgICBDb2RlTG9jYXRpb25KdW1wPEpTSW50ZXJuYWxQdHJUYWc+IGJhZFR5cGVKdW1w
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NoZWNrUHJpdmF0ZUJyYW5k
U3RhdHVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Q2hlY2tQcml2YXRlQnJhbmRTdGF0dXMuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2hlY2tQcml2YXRlQnJhbmRTdGF0dXMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMjgsMTggKzIyOCwyNSBAQCBDYWNoZWFibGVJZGVudGlmaWVyIENoZWNr
UHJpdmF0ZUJyYW5kU3RhCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotdm9pZCBDaGVja1ByaXZh
dGVCcmFuZFN0YXR1czo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1w
bGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBDaGVja1ByaXZhdGVCcmFuZFN0YXR1czo6dmlz
aXRBZ2dyZWdhdGVJbXBsKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgZm9yIChDaGVja1ByaXZh
dGVCcmFuZFZhcmlhbnQmIHZhcmlhbnQgOiBtX3ZhcmlhbnRzKQogICAgICAgICB2YXJpYW50LnZp
c2l0QWdncmVnYXRlKHZpc2l0b3IpOwogfQogCi12b2lkIENoZWNrUHJpdmF0ZUJyYW5kU3RhdHVz
OjptYXJrSWZDaGVhcChTbG90VmlzaXRvciYgdmlzaXRvcikKK0RFRklORV9WSVNJVF9BR0dSRUdB
VEUoQ2hlY2tQcml2YXRlQnJhbmRTdGF0dXMpOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
Pgordm9pZCBDaGVja1ByaXZhdGVCcmFuZFN0YXR1czo6bWFya0lmQ2hlYXAoVmlzaXRvciYgdmlz
aXRvcikKIHsKICAgICBmb3IgKENoZWNrUHJpdmF0ZUJyYW5kVmFyaWFudCYgdmFyaWFudCA6IG1f
dmFyaWFudHMpCiAgICAgICAgIHZhcmlhbnQubWFya0lmQ2hlYXAodmlzaXRvcik7CiB9CiAKK3Rl
bXBsYXRlIHZvaWQgQ2hlY2tQcml2YXRlQnJhbmRTdGF0dXM6Om1hcmtJZkNoZWFwKEFic3RyYWN0
U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgQ2hlY2tQcml2YXRlQnJhbmRTdGF0dXM6Om1h
cmtJZkNoZWFwKFNsb3RWaXNpdG9yJik7CisKIGJvb2wgQ2hlY2tQcml2YXRlQnJhbmRTdGF0dXM6
OmZpbmFsaXplKFZNJiB2bSkKIHsKICAgICBmb3IgKGF1dG8mIHZhcmlhbnQgOiBtX3ZhcmlhbnRz
KSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2hlY2tQcml2YXRlQnJh
bmRTdGF0dXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Q2hlY2tQcml2YXRlQnJhbmRTdGF0dXMuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NoZWNrUHJpdmF0ZUJyYW5kU3RhdHVzLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTgyLDggKzgyLDggQEAgcHVibGljOgogICAgIC8vIEF0dGVtcHRzIHRvIHJlZHVj
ZSB0aGUgc2V0IG9mIHZhcmlhbnRzIHRvIGZpdCB0aGUgZ2l2ZW4gc3RydWN0dXJlIHNldC4gVGhp
cyBtYXkgYmUgYXBwcm94aW1hdGUuCiAgICAgdm9pZCBmaWx0ZXIoY29uc3QgU3RydWN0dXJlU2V0
Jik7CiAKLSAgICB2b2lkIHZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJik7Ci0gICAgdm9pZCBt
YXJrSWZDaGVhcChTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQUdHUkVHQVRFOwor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgbWFya0lmQ2hlYXAoVmlzaXRvciYp
OwogICAgIGJvb2wgZmluYWxpemUoVk0mKTsKIAogICAgIGJvb2wgYXBwZW5kVmFyaWFudChjb25z
dCBDaGVja1ByaXZhdGVCcmFuZFZhcmlhbnQmKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9DaGVja1ByaXZhdGVCcmFuZFZhcmlhbnQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DaGVja1ByaXZhdGVCcmFuZFZhcmlhbnQuY3Bw
CShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2hl
Y2tQcml2YXRlQnJhbmRWYXJpYW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTEsMTEgKzUxLDE1
IEBAIGJvb2wgQ2hlY2tQcml2YXRlQnJhbmRWYXJpYW50OjphdHRlbXB0VG8KICAgICByZXR1cm4g
dHJ1ZTsKIH0KIAotdm9pZCBDaGVja1ByaXZhdGVCcmFuZFZhcmlhbnQ6Om1hcmtJZkNoZWFwKFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgQ2hl
Y2tQcml2YXRlQnJhbmRWYXJpYW50OjptYXJrSWZDaGVhcChWaXNpdG9yJiB2aXNpdG9yKQogewog
ICAgIG1fc3RydWN0dXJlU2V0Lm1hcmtJZkNoZWFwKHZpc2l0b3IpOwogfQogCit0ZW1wbGF0ZSB2
b2lkIENoZWNrUHJpdmF0ZUJyYW5kVmFyaWFudDo6bWFya0lmQ2hlYXAoQWJzdHJhY3RTbG90Vmlz
aXRvciYpOwordGVtcGxhdGUgdm9pZCBDaGVja1ByaXZhdGVCcmFuZFZhcmlhbnQ6Om1hcmtJZkNo
ZWFwKFNsb3RWaXNpdG9yJik7CisKIGJvb2wgQ2hlY2tQcml2YXRlQnJhbmRWYXJpYW50OjpmaW5h
bGl6ZShWTSYgdm0pCiB7CiAgICAgaWYgKCFtX3N0cnVjdHVyZVNldC5pc1N0aWxsQWxpdmUodm0p
KQpAQCAtNjMsMTEgKzY3LDE0IEBAIGJvb2wgQ2hlY2tQcml2YXRlQnJhbmRWYXJpYW50OjpmaW5h
bGl6ZSgKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBDaGVja1ByaXZhdGVCcmFuZFZhcmlh
bnQ6OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5h
bWUgVmlzaXRvcj4KK3ZvaWQgQ2hlY2tQcml2YXRlQnJhbmRWYXJpYW50Ojp2aXNpdEFnZ3JlZ2F0
ZUltcGwoVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBtX2lkZW50aWZpZXIudmlzaXRBZ2dyZWdh
dGUodmlzaXRvcik7CiB9CiAKK0RFRklORV9WSVNJVF9BR0dSRUdBVEUoQ2hlY2tQcml2YXRlQnJh
bmRWYXJpYW50KTsKKwogdm9pZCBDaGVja1ByaXZhdGVCcmFuZFZhcmlhbnQ6OmR1bXAoUHJpbnRT
dHJlYW0mIG91dCkgY29uc3QKIHsKICAgICBkdW1wSW5Db250ZXh0KG91dCwgbnVsbHB0cik7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2hlY2tQcml2YXRlQnJhbmRWYXJp
YW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NoZWNr
UHJpdmF0ZUJyYW5kVmFyaWFudC5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ2hlY2tQcml2YXRlQnJhbmRWYXJpYW50LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTMyLDYgKzMyLDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKK2NsYXNzIEFic3RyYWN0
U2xvdFZpc2l0b3I7CiBjbGFzcyBDaGVja1ByaXZhdGVCcmFuZFN0YXR1czsKIAogY2xhc3MgQ2hl
Y2tQcml2YXRlQnJhbmRWYXJpYW50IHsKQEAgLTQ2LDggKzQ3LDggQEAgcHVibGljOgogCiAgICAg
Ym9vbCBhdHRlbXB0VG9NZXJnZShjb25zdCBDaGVja1ByaXZhdGVCcmFuZFZhcmlhbnQmIG90aGVy
KTsKIAotICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImKTsKLSAgICB2b2lkIG1h
cmtJZkNoZWFwKFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9BR0dSRUdBVEU7Cisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCBtYXJrSWZDaGVhcChWaXNpdG9yJik7
CiAgICAgYm9vbCBmaW5hbGl6ZShWTSYpOwogCiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikg
Y29uc3Q7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2Nr
LmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMDEsNyArMTAwMSw4IEBAIHNpemVf
dCBDb2RlQmxvY2s6OmVzdGltYXRlZFNpemUoSlNDZWxsKiAKICAgICByZXR1cm4gQmFzZTo6ZXN0
aW1hdGVkU2l6ZShjZWxsLCB2bSkgKyBleHRyYU1lbW9yeUFsbG9jYXRlZDsKIH0KIAotdm9pZCBD
b2RlQmxvY2s6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRv
cikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIENvZGVCbG9jazo6dmlzaXRDaGls
ZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIENvZGVCbG9j
ayogdGhpc09iamVjdCA9IGpzQ2FzdDxDb2RlQmxvY2sqPihjZWxsKTsKICAgICBBU1NFUlRfR0Nf
T0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC0xMDEwLDkgKzEwMTEsMTQg
QEAgdm9pZCBDb2RlQmxvY2s6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZQogICAgIHRoaXNPYmpl
Y3QtPnZpc2l0Q2hpbGRyZW4odmlzaXRvcik7CiB9CiAKLXZvaWQgQ29kZUJsb2NrOjp2aXNpdENo
aWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorREVGSU5FX1ZJU0lUX0NISUxEUkVOKENvZGVC
bG9jayk7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIENvZGVCbG9jazo6dmlz
aXRDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIENvbmN1cnJlbnRKU0xvY2tlciBs
b2NrZXIobV9sb2NrKTsKKworICAgIG1fdmlzaXRDaGlsZHJlblNraXBwZWREdWVUb09sZEFnZSA9
IGZhbHNlOwogICAgIGlmIChDb2RlQmxvY2sqIG90aGVyQmxvY2sgPSBzcGVjaWFsT1NSRW50cnlC
bG9ja09yTnVsbCgpKQogICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKG90aGVyQmxv
Y2spOwogCkBAIC0xMDI5LDEzICsxMDM1LDIxIEBAIHZvaWQgQ29kZUJsb2NrOjp2aXNpdENoaWxk
cmVuKFNsb3RWaXNpdG8KICAgICBWTTo6U3BhY2VBbmRTZXQ6OnNldEZvcigqc3Vic3BhY2UoKSku
YWRkKHRoaXMpOwogfQogCi1ib29sIENvZGVCbG9jazo6c2hvdWxkVmlzaXRTdHJvbmdseShjb25z
dCBDb25jdXJyZW50SlNMb2NrZXImIGxvY2tlcikKK2Jvb2wgQ29kZUJsb2NrOjpzaG91bGRWaXNp
dFN0cm9uZ2x5KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYgbG9ja2VyLCBBYnN0cmFjdFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQogewogICAgIGlmIChPcHRpb25zOjpmb3JjZUNvZGVCbG9ja0xpdmVu
ZXNzKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgaWYgKHNob3VsZEpldHRpc29uRHVl
VG9PbGRBZ2UobG9ja2VyKSkKKyAgICBpZiAoc2hvdWxkSmV0dGlzb25EdWVUb09sZEFnZShsb2Nr
ZXIsIHZpc2l0b3IpKSB7CisgICAgICAgIGlmIChPcHRpb25zOjp2ZXJpZnlHQygpKQorICAgICAg
ICAgICAgbV92aXNpdENoaWxkcmVuU2tpcHBlZER1ZVRvT2xkQWdlID0gdHJ1ZTsKICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmIChtX3Zpc2l0Q2hpbGRyZW5Ta2lwcGVkRHVl
VG9PbGRBZ2UpIHsKKyAgICAgICAgQVNTRVJUKE9wdGlvbnM6OnZlcmlmeUdDKCkpOworICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQogCiAgICAgLy8gSW50ZXJwcmV0ZXIgYW5kIEJhc2VsaW5l
IEpJVCBDb2RlQmxvY2tzIGRvbid0IG5lZWQgdG8gYmUgamV0dGlzb25lZCB3aGVuCiAgICAgLy8g
dGhlaXIgd2VhayByZWZlcmVuY2VzIGdvIHN0YWxlLiBTbyBpZiBhIGJhc2xpbmUgSklUIENvZGVC
bG9jayBnZXRzCkBAIC0xMDg2LDkgKzExMDAsOSBAQCBzdGF0aWMgU2Vjb25kcyB0aW1lVG9MaXZl
KEpJVFR5cGUgaml0VHlwCiAgICAgfQogfQogCi1ib29sIENvZGVCbG9jazo6c2hvdWxkSmV0dGlz
b25EdWVUb09sZEFnZShjb25zdCBDb25jdXJyZW50SlNMb2NrZXImKQorYm9vbCBDb2RlQmxvY2s6
OnNob3VsZEpldHRpc29uRHVlVG9PbGRBZ2UoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgQWJz
dHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKLSAgICBpZiAobV92bS0+aGVhcC5pc01hcmtl
ZCh0aGlzKSkKKyAgICBpZiAodmlzaXRvci5pc01hcmtlZCh0aGlzKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCiAgICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OmZvcmNlQ29kZUJsb2NrVG9KZXR0
aXNvbkR1ZVRvT2xkQWdlKCkpKQpAQCAtMTEwMSwxMiArMTExNSwxMyBAQCBib29sIENvZGVCbG9j
azo6c2hvdWxkSmV0dGlzb25EdWVUb09sZEFnCiB9CiAKICNpZiBFTkFCTEUoREZHX0pJVCkKLXN0
YXRpYyBib29sIHNob3VsZE1hcmtUcmFuc2l0aW9uKFZNJiB2bSwgREZHOjpXZWFrUmVmZXJlbmNl
VHJhbnNpdGlvbiYgdHJhbnNpdGlvbikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+CitzdGF0
aWMgaW5saW5lIGJvb2wgc2hvdWxkTWFya1RyYW5zaXRpb24oVmlzaXRvciYgdmlzaXRvciwgREZH
OjpXZWFrUmVmZXJlbmNlVHJhbnNpdGlvbiYgdHJhbnNpdGlvbikKIHsKLSAgICBpZiAodHJhbnNp
dGlvbi5tX2NvZGVPcmlnaW4gJiYgIXZtLmhlYXAuaXNNYXJrZWQodHJhbnNpdGlvbi5tX2NvZGVP
cmlnaW4uZ2V0KCkpKQorICAgIGlmICh0cmFuc2l0aW9uLm1fY29kZU9yaWdpbiAmJiAhdmlzaXRv
ci5pc01hcmtlZCh0cmFuc2l0aW9uLm1fY29kZU9yaWdpbi5nZXQoKSkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICAKLSAgICBpZiAoIXZtLmhlYXAuaXNNYXJrZWQodHJhbnNpdGlvbi5tX2Zy
b20uZ2V0KCkpKQorICAgIGlmICghdmlzaXRvci5pc01hcmtlZCh0cmFuc2l0aW9uLm1fZnJvbS5n
ZXQoKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKICAgICByZXR1cm4gdHJ1ZTsKQEAg
LTExMjIsOCArMTEzNywxMCBAQCBCeXRlY29kZUluZGV4IENvZGVCbG9jazo6Ynl0ZWNvZGVJbmRl
eEZvCiB9CiAjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCiAKLXZvaWQgQ29kZUJsb2NrOjpwcm9w
YWdhdGVUcmFuc2l0aW9ucyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBTbG90VmlzaXRvciYg
dmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIENvZGVCbG9jazo6cHJv
cGFnYXRlVHJhbnNpdGlvbnMoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgVmlzaXRvciYgdmlz
aXRvcikKIHsKKyAgICBBYnN0cmFjdFNsb3RWaXNpdG9yOjpTdXBwcmVzc0dDVmVyaWZpZXJTY29w
ZSBzdXBwcmVzc1Njb3BlKHZpc2l0b3IpOwogICAgIFZNJiB2bSA9ICptX3ZtOwogCiAgICAgaWYg
KGppdFR5cGUoKSA9PSBKSVRUeXBlOjpJbnRlcnByZXRlclRodW5rKSB7CkBAIC0xMTMzLDggKzEx
NTAsOSBAQCB2b2lkIENvZGVCbG9jazo6cHJvcGFnYXRlVHJhbnNpdGlvbnMoY29uCiAgICAgICAg
ICAgICAgICAgU3RydWN0dXJlSUQgbmV3U3RydWN0dXJlSUQgPSBtZXRhZGF0YS5tX25ld1N0cnVj
dHVyZUlEOwogICAgICAgICAgICAgICAgIGlmICghb2xkU3RydWN0dXJlSUQgfHwgIW5ld1N0cnVj
dHVyZUlEKQogICAgICAgICAgICAgICAgICAgICByZXR1cm47CisKICAgICAgICAgICAgICAgICBT
dHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSA9IHZtLmhlYXAuc3RydWN0dXJlSURUYWJsZSgpLmdldChv
bGRTdHJ1Y3R1cmVJRCk7Ci0gICAgICAgICAgICAgICAgaWYgKHZtLmhlYXAuaXNNYXJrZWQob2xk
U3RydWN0dXJlKSkgeworICAgICAgICAgICAgICAgIGlmICh2aXNpdG9yLmlzTWFya2VkKG9sZFN0
cnVjdHVyZSkpIHsKICAgICAgICAgICAgICAgICAgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUg
PSB2bS5oZWFwLnN0cnVjdHVyZUlEVGFibGUoKS5nZXQobmV3U3RydWN0dXJlSUQpOwogICAgICAg
ICAgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKG5ld1N0cnVjdHVyZSk7CiAg
ICAgICAgICAgICAgICAgfQpAQCAtMTE0OCwxMSArMTE2NiwxMSBAQCB2b2lkIENvZGVCbG9jazo6
cHJvcGFnYXRlVHJhbnNpdGlvbnMoY29uCiAKICAgICAgICAgICAgICAgICBKU0NlbGwqIHByb3Bl
cnR5ID0gbWV0YWRhdGEubV9wcm9wZXJ0eS5nZXQoKTsKICAgICAgICAgICAgICAgICBBU1NFUlQo
cHJvcGVydHkpOwotICAgICAgICAgICAgICAgIGlmICghdm0uaGVhcC5pc01hcmtlZChwcm9wZXJ0
eSkpCisgICAgICAgICAgICAgICAgaWYgKCF2aXNpdG9yLmlzTWFya2VkKHByb3BlcnR5KSkKICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgICAgICAgICAgU3RydWN0dXJlKiBv
bGRTdHJ1Y3R1cmUgPSB2bS5oZWFwLnN0cnVjdHVyZUlEVGFibGUoKS5nZXQob2xkU3RydWN0dXJl
SUQpOwotICAgICAgICAgICAgICAgIGlmICh2bS5oZWFwLmlzTWFya2VkKG9sZFN0cnVjdHVyZSkp
IHsKKyAgICAgICAgICAgICAgICBpZiAodmlzaXRvci5pc01hcmtlZChvbGRTdHJ1Y3R1cmUpKSB7
CiAgICAgICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0gdm0uaGVhcC5z
dHJ1Y3R1cmVJRFRhYmxlKCkuZ2V0KG5ld1N0cnVjdHVyZUlEKTsKICAgICAgICAgICAgICAgICAg
ICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZChuZXdTdHJ1Y3R1cmUpOwogICAgICAgICAgICAg
ICAgIH0KQEAgLTExNzAsNyArMTE4OCw3IEBAIHZvaWQgQ29kZUJsb2NrOjpwcm9wYWdhdGVUcmFu
c2l0aW9ucyhjb24KICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgICAgICAg
ICAgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUgPSB2bS5oZWFwLnN0cnVjdHVyZUlEVGFibGUoKS5n
ZXQob2xkU3RydWN0dXJlSUQpOwotICAgICAgICAgICAgICAgIGlmICh2bS5oZWFwLmlzTWFya2Vk
KG9sZFN0cnVjdHVyZSkpIHsKKyAgICAgICAgICAgICAgICBpZiAodmlzaXRvci5pc01hcmtlZChv
bGRTdHJ1Y3R1cmUpKSB7CiAgICAgICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogbmV3U3RydWN0
dXJlID0gdm0uaGVhcC5zdHJ1Y3R1cmVJRFRhYmxlKCkuZ2V0KG5ld1N0cnVjdHVyZUlEKTsKICAg
ICAgICAgICAgICAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZChuZXdTdHJ1Y3R1cmUp
OwogICAgICAgICAgICAgICAgIH0KQEAgLTExOTcsNyArMTIxNSw3IEBAIHZvaWQgQ29kZUJsb2Nr
Ojpwcm9wYWdhdGVUcmFuc2l0aW9ucyhjb24KICAgICAgICAgICAgIHZtLmdldFN0cnVjdHVyZShz
dHJ1Y3R1cmVJRCktPm1hcmtJZkNoZWFwKHZpc2l0b3IpOwogCiAgICAgICAgIGZvciAoYXV0byYg
dHJhbnNpdGlvbiA6IGRmZ0NvbW1vbi0+dHJhbnNpdGlvbnMpIHsKLSAgICAgICAgICAgIGlmIChz
aG91bGRNYXJrVHJhbnNpdGlvbih2bSwgdHJhbnNpdGlvbikpIHsKKyAgICAgICAgICAgIGlmIChz
aG91bGRNYXJrVHJhbnNpdGlvbih2aXNpdG9yLCB0cmFuc2l0aW9uKSkgewogICAgICAgICAgICAg
ICAgIC8vIElmIHRoZSBmb2xsb3dpbmcgdGhyZWUgdGhpbmdzIGFyZSBsaXZlLCB0aGVuIHRoZSB0
YXJnZXQgb2YgdGhlCiAgICAgICAgICAgICAgICAgLy8gdHJhbnNpdGlvbiBpcyBhbHNvIGxpdmU6
CiAgICAgICAgICAgICAgICAgLy8KQEAgLTEyMjQsMTMgKzEyNDIsMTcgQEAgdm9pZCBDb2RlQmxv
Y2s6OnByb3BhZ2F0ZVRyYW5zaXRpb25zKGNvbgogI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQog
fQogCi12b2lkIENvZGVCbG9jazo6ZGV0ZXJtaW5lTGl2ZW5lc3MoY29uc3QgQ29uY3VycmVudEpT
TG9ja2VyJiwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZSB2b2lkIENvZGVCbG9jazo6
cHJvcGFnYXRlVHJhbnNpdGlvbnMoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgQWJzdHJhY3RT
bG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBDb2RlQmxvY2s6OnByb3BhZ2F0ZVRyYW5zaXRp
b25zKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIFNsb3RWaXNpdG9yJik7CisKK3RlbXBsYXRl
PHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIENvZGVCbG9jazo6ZGV0ZXJtaW5lTGl2ZW5lc3MoY29u
c3QgQ29uY3VycmVudEpTTG9ja2VyJiwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBVTlVTRURf
UEFSQU0odmlzaXRvcik7CiAgICAgCiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAgVk0mIHZtID0g
Km1fdm07Ci0gICAgaWYgKHZtLmhlYXAuaXNNYXJrZWQodGhpcykpCisgICAgaWYgKHZpc2l0b3Iu
aXNNYXJrZWQodGhpcykpCiAgICAgICAgIHJldHVybjsKICAgICAKICAgICAvLyBJbiByYXJlIGFu
ZCB3ZWlyZCBjYXNlcywgdGhpcyBjb3VsZCBiZSBjYWxsZWQgb24gYSBiYXNlbGluZSBDb2RlQmxv
Y2suIE9uZSB0aGF0IEkgZm91bmQgd2FzCkBAIC0xMjQ3LDcgKzEyNjksNyBAQCB2b2lkIENvZGVC
bG9jazo6ZGV0ZXJtaW5lTGl2ZW5lc3MoY29uc3QgCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGRmZ0NvbW1vbi0+d2Vha1JlZmVyZW5jZXMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgSlND
ZWxsKiByZWZlcmVuY2UgPSBkZmdDb21tb24tPndlYWtSZWZlcmVuY2VzW2ldLmdldCgpOwogICAg
ICAgICBBU1NFUlQoIWpzRHluYW1pY0Nhc3Q8Q29kZUJsb2NrKj4odm0sIHJlZmVyZW5jZSkpOwot
ICAgICAgICBpZiAoIXZtLmhlYXAuaXNNYXJrZWQocmVmZXJlbmNlKSkgeworICAgICAgICBpZiAo
IXZpc2l0b3IuaXNNYXJrZWQocmVmZXJlbmNlKSkgewogICAgICAgICAgICAgYWxsQXJlTGl2ZVNv
RmFyID0gZmFsc2U7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtMTI1NSw3ICsx
Mjc3LDcgQEAgdm9pZCBDb2RlQmxvY2s6OmRldGVybWluZUxpdmVuZXNzKGNvbnN0IAogICAgIGlm
IChhbGxBcmVMaXZlU29GYXIpIHsKICAgICAgICAgZm9yIChTdHJ1Y3R1cmVJRCBzdHJ1Y3R1cmVJ
RCA6IGRmZ0NvbW1vbi0+d2Vha1N0cnVjdHVyZVJlZmVyZW5jZXMpIHsKICAgICAgICAgICAgIFN0
cnVjdHVyZSogc3RydWN0dXJlID0gdm0uZ2V0U3RydWN0dXJlKHN0cnVjdHVyZUlEKTsKLSAgICAg
ICAgICAgIGlmICghdm0uaGVhcC5pc01hcmtlZChzdHJ1Y3R1cmUpKSB7CisgICAgICAgICAgICBp
ZiAoIXZpc2l0b3IuaXNNYXJrZWQoc3RydWN0dXJlKSkgewogICAgICAgICAgICAgICAgIGFsbEFy
ZUxpdmVTb0ZhciA9IGZhbHNlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
fQpAQCAtMTI3Myw2ICsxMjk1LDkgQEAgdm9pZCBDb2RlQmxvY2s6OmRldGVybWluZUxpdmVuZXNz
KGNvbnN0IAogI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQogfQogCit0ZW1wbGF0ZSB2b2lkIENv
ZGVCbG9jazo6ZGV0ZXJtaW5lTGl2ZW5lc3MoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgQWJz
dHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBDb2RlQmxvY2s6OmRldGVybWluZUxp
dmVuZXNzKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIFNsb3RWaXNpdG9yJik7CisKIHZvaWQg
Q29kZUJsb2NrOjpmaW5hbGl6ZUxMSW50SW5saW5lQ2FjaGVzKCkKIHsKICAgICBWTSYgdm0gPSAq
bV92bTsKQEAgLTE2MTYsNiArMTY0MSw3IEBAIHZvaWQgQ29kZUJsb2NrOjpmaW5hbGl6ZVVuY29u
ZGl0aW9uYWxseSgKICAgICB1cGRhdGVBY3Rpdml0eSgpOwogCiAgICAgVk06OlNwYWNlQW5kU2V0
OjpzZXRGb3IoKnN1YnNwYWNlKCkpLnJlbW92ZSh0aGlzKTsKKyAgICBtX3Zpc2l0Q2hpbGRyZW5T
a2lwcGVkRHVlVG9PbGRBZ2UgPSBmYWxzZTsKIH0KIAogdm9pZCBDb2RlQmxvY2s6OmRlc3Ryb3ko
SlNDZWxsKiBjZWxsKQpAQCAtMTgwOCw3ICsxODM0LDggQEAgdm9pZCBDb2RlQmxvY2s6OnJlc2V0
SklURGF0YSgpCiB9CiAjZW5kaWYKIAotdm9pZCBDb2RlQmxvY2s6OnZpc2l0T1NSRXhpdFRhcmdl
dHMoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1w
bGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBDb2RlQmxvY2s6OnZpc2l0T1NSRXhpdFRhcmdl
dHMoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICAv
LyBXZSBzdHJvbmdseSB2aXNpdCBPU1IgZXhpdHMgdGFyZ2V0cyBiZWNhdXNlIHdlIGRvbid0IHdh
bnQgdG8gZGVhbCB3aXRoCiAgICAgLy8gdGhlIGNvbXBsZXhpdHkgb2YgZ2VuZXJhdGluZyBhbiBl
eGl0IHRhcmdldCBDb2RlQmxvY2sgb24gZGVtYW5kIGFuZApAQCAtMTgyOCw3ICsxODU1LDggQEAg
dm9pZCBDb2RlQmxvY2s6OnZpc2l0T1NSRXhpdFRhcmdldHMoY29ucwogI2VuZGlmCiB9CiAKLXZv
aWQgQ29kZUJsb2NrOjpzdHJvbmdseVZpc2l0U3Ryb25nUmVmZXJlbmNlcyhjb25zdCBDb25jdXJy
ZW50SlNMb2NrZXImIGxvY2tlciwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBl
bmFtZSBWaXNpdG9yPgordm9pZCBDb2RlQmxvY2s6OnN0cm9uZ2x5VmlzaXRTdHJvbmdSZWZlcmVu
Y2VzKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYgbG9ja2VyLCBWaXNpdG9yJiB2aXNpdG9yKQog
ewogICAgIFVOVVNFRF9QQVJBTShsb2NrZXIpOwogICAgIApAQCAtMTg2NCw3ICsxODkyLDggQEAg
dm9pZCBDb2RlQmxvY2s6OnN0cm9uZ2x5VmlzaXRTdHJvbmdSZWZlcgogI2VuZGlmCiB9CiAKLXZv
aWQgQ29kZUJsb2NrOjpzdHJvbmdseVZpc2l0V2Vha1JlZmVyZW5jZXMoY29uc3QgQ29uY3VycmVu
dEpTTG9ja2VyJiwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNp
dG9yPgordm9pZCBDb2RlQmxvY2s6OnN0cm9uZ2x5VmlzaXRXZWFrUmVmZXJlbmNlcyhjb25zdCBD
b25jdXJyZW50SlNMb2NrZXImLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFVOVVNFRF9QQVJB
TSh2aXNpdG9yKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVC
bG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2Rl
QmxvY2suaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAwOC0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAwOC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqIENvcHlyaWdodCAoQykgMjAwOCBDYW1lcm9uIFp3YXJpY2ggPGN3endhcmljaEB1d2F0ZXJs
b28uY2E+CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0yMDEsMTAgKzIwMSwxMCBAQCBwdWJsaWM6CiAg
ICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyMzY3NwogICAg
IENvZGVCbG9jayogYmFzZWxpbmVWZXJzaW9uKCk7CiAKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxE
UkVOOworCiAgICAgc3RhdGljIHNpemVfdCBlc3RpbWF0ZWRTaXplKEpTQ2VsbCosIFZNJik7Ci0g
ICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwogICAg
IHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7Ci0gICAgdm9pZCB2aXNpdENoaWxkcmVuKFNs
b3RWaXNpdG9yJik7CiAgICAgdm9pZCBmaW5hbGl6ZVVuY29uZGl0aW9uYWxseShWTSYpOwogCiAg
ICAgdm9pZCBub3RpZnlMZXhpY2FsQmluZGluZ1VwZGF0ZSgpOwpAQCAtOTQzLDYgKzk0Myw4IEBA
IHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIENvZGVCbG9ja1NldDsKICAgICBmcmllbmQgY2xh
c3MgRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZTsKIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZp
c2l0b3I+IEFMV0FZU19JTkxJTkUgdm9pZCB2aXNpdENoaWxkcmVuKFZpc2l0b3ImKTsKKwogICAg
IEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcyYgbGl2ZW5lc3NBbmFseXNpc1Nsb3coKTsKICAgICAK
ICAgICBDb2RlQmxvY2sqIHNwZWNpYWxPU1JFbnRyeUJsb2NrT3JOdWxsKCk7CkBAIC05NjMsMTYg
Kzk2NSwxNiBAQCBwcml2YXRlOgogICAgICAgICBtX2NvbnN0YW50UmVnaXN0ZXJzW3JlZy50b0Nv
bnN0YW50SW5kZXgoKV0uc2V0KCptX3ZtLCB0aGlzLCB2YWx1ZSk7CiAgICAgfQogCi0gICAgYm9v
bCBzaG91bGRWaXNpdFN0cm9uZ2x5KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYpOworICAgIGJv
b2wgc2hvdWxkVmlzaXRTdHJvbmdseShjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBBYnN0cmFj
dFNsb3RWaXNpdG9yJik7CiAgICAgYm9vbCBzaG91bGRKZXR0aXNvbkR1ZVRvV2Vha1JlZmVyZW5j
ZShWTSYpOwotICAgIGJvb2wgc2hvdWxkSmV0dGlzb25EdWVUb09sZEFnZShjb25zdCBDb25jdXJy
ZW50SlNMb2NrZXImKTsKKyAgICBib29sIHNob3VsZEpldHRpc29uRHVlVG9PbGRBZ2UoY29uc3Qg
Q29uY3VycmVudEpTTG9ja2VyJiwgQWJzdHJhY3RTbG90VmlzaXRvciYpOwogICAgIAotICAgIHZv
aWQgcHJvcGFnYXRlVHJhbnNpdGlvbnMoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgU2xvdFZp
c2l0b3ImKTsKLSAgICB2b2lkIGRldGVybWluZUxpdmVuZXNzKGNvbnN0IENvbmN1cnJlbnRKU0xv
Y2tlciYsIFNsb3RWaXNpdG9yJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9p
ZCBwcm9wYWdhdGVUcmFuc2l0aW9ucyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBWaXNpdG9y
Jik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCBkZXRlcm1pbmVMaXZlbmVz
cyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBWaXNpdG9yJik7CiAgICAgICAgIAotICAgIHZv
aWQgc3Ryb25nbHlWaXNpdFN0cm9uZ1JlZmVyZW5jZXMoY29uc3QgQ29uY3VycmVudEpTTG9ja2Vy
JiwgU2xvdFZpc2l0b3ImKTsKLSAgICB2b2lkIHN0cm9uZ2x5VmlzaXRXZWFrUmVmZXJlbmNlcyhj
b25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBTbG90VmlzaXRvciYpOwotICAgIHZvaWQgdmlzaXRP
U1JFeGl0VGFyZ2V0cyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBTbG90VmlzaXRvciYpOwor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgc3Ryb25nbHlWaXNpdFN0cm9uZ1Jl
ZmVyZW5jZXMoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgVmlzaXRvciYpOworICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgc3Ryb25nbHlWaXNpdFdlYWtSZWZlcmVuY2VzKGNv
bnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIFZpc2l0b3ImKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBWaXNpdG9yPiB2b2lkIHZpc2l0T1NSRXhpdFRhcmdldHMoY29uc3QgQ29uY3VycmVudEpTTG9j
a2VyJiwgVmlzaXRvciYpOwogCiAgICAgdW5zaWduZWQgbnVtYmVyT2ZOb25Bcmd1bWVudFZhbHVl
UHJvZmlsZXMoKSB7IHJldHVybiBtX251bWJlck9mTm9uQXJndW1lbnRWYWx1ZVByb2ZpbGVzOyB9
CiAgICAgdW5zaWduZWQgdG90YWxOdW1iZXJPZlZhbHVlUHJvZmlsZXMoKSB7IHJldHVybiBudW1i
ZXJPZkFyZ3VtZW50VmFsdWVQcm9maWxlcygpICsgbnVtYmVyT2ZOb25Bcmd1bWVudFZhbHVlUHJv
ZmlsZXMoKTsgfQpAQCAtMTAxMSw2ICsxMDEzLDcgQEAgcHJpdmF0ZToKICAgICB1bnNpZ25lZCBt
X2J5dGVjb2RlQ29zdCB7IDAgfTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgbV9zY29wZVJlZ2lzdGVy
OwogICAgIG11dGFibGUgQ29kZUJsb2NrSGFzaCBtX2hhc2g7CisgICAgYm9vbCBtX3Zpc2l0Q2hp
bGRyZW5Ta2lwcGVkRHVlVG9PbGRBZ2UgeyBmYWxzZSB9OwogCiAgICAgV3JpdGVCYXJyaWVyPFVu
bGlua2VkQ29kZUJsb2NrPiBtX3VubGlua2VkQ29kZTsKICAgICBXcml0ZUJhcnJpZXI8U2NyaXB0
RXhlY3V0YWJsZT4gbV9vd25lckV4ZWN1dGFibGU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvRGVsZXRlQnlJZFZhcmlhbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9EZWxldGVCeUlkVmFyaWFudC5jcHAJKHJldmlzaW9uIDI3
MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9EZWxldGVCeUlkVmFyaWFu
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAyMC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtODgsMTIgKzg4LDE2IEBAIGJvb2wgRGVsZXRlQnlJZFZhcmlh
bnQ6OndyaXRlc1N0cnVjdHVyZXMKICAgICByZXR1cm4gISFuZXdTdHJ1Y3R1cmUoKTsKIH0KIAot
dm9pZCBEZWxldGVCeUlkVmFyaWFudDo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImIHZpc2l0
b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBEZWxldGVCeUlkVmFyaWFudDo6
dmlzaXRBZ2dyZWdhdGVJbXBsKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgbV9pZGVudGlmaWVy
LnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOwogfQogCi12b2lkIERlbGV0ZUJ5SWRWYXJpYW50Ojpt
YXJrSWZDaGVhcChTbG90VmlzaXRvciYgdmlzaXRvcikKK0RFRklORV9WSVNJVF9BR0dSRUdBVEUo
RGVsZXRlQnlJZFZhcmlhbnQpOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBE
ZWxldGVCeUlkVmFyaWFudDo6bWFya0lmQ2hlYXAoVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBp
ZiAobV9vbGRTdHJ1Y3R1cmUpCiAgICAgICAgIG1fb2xkU3RydWN0dXJlLT5tYXJrSWZDaGVhcCh2
aXNpdG9yKTsKQEAgLTEwMSw2ICsxMDUsOSBAQCB2b2lkIERlbGV0ZUJ5SWRWYXJpYW50OjptYXJr
SWZDaGVhcChTbG90CiAgICAgICAgIG1fbmV3U3RydWN0dXJlLT5tYXJrSWZDaGVhcCh2aXNpdG9y
KTsKIH0KIAordGVtcGxhdGUgdm9pZCBEZWxldGVCeUlkVmFyaWFudDo6bWFya0lmQ2hlYXAoQWJz
dHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBEZWxldGVCeUlkVmFyaWFudDo6bWFy
a0lmQ2hlYXAoU2xvdFZpc2l0b3ImKTsKKwogdm9pZCBEZWxldGVCeUlkVmFyaWFudDo6ZHVtcChQ
cmludFN0cmVhbSYgb3V0KSBjb25zdAogewogICAgIGR1bXBJbkNvbnRleHQob3V0LCBudWxscHRy
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9EZWxldGVCeUlkVmFyaWFu
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9EZWxldGVC
eUlkVmFyaWFudC5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvRGVsZXRlQnlJZFZhcmlhbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIwLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02MSw4ICs2MSw4IEBA
IHB1YmxpYzoKIAogICAgIGJvb2wgYXR0ZW1wdFRvTWVyZ2UoY29uc3QgRGVsZXRlQnlJZFZhcmlh
bnQmIG90aGVyKTsKIAotICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImKTsKLSAg
ICB2b2lkIG1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9BR0dS
RUdBVEU7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCBtYXJrSWZDaGVhcChW
aXNpdG9yJik7CiAgICAgYm9vbCBmaW5hbGl6ZShWTSYpOwogCiAgICAgdm9pZCBkdW1wKFByaW50
U3RyZWFtJikgY29uc3Q7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRGVs
ZXRlQnlTdGF0dXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9EZWxldGVCeVN0YXR1cy5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9EZWxldGVCeVN0YXR1cy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMC0yMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjU0
LDE4ICsyNTQsMjUgQEAgQ2FjaGVhYmxlSWRlbnRpZmllciBEZWxldGVCeVN0YXR1czo6c2luZwog
ICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQgRGVsZXRlQnlTdGF0dXM6OnZpc2l0QWdncmVn
YXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3Zv
aWQgRGVsZXRlQnlTdGF0dXM6OnZpc2l0QWdncmVnYXRlSW1wbChWaXNpdG9yJiB2aXNpdG9yKQog
ewogICAgIGZvciAoRGVsZXRlQnlJZFZhcmlhbnQmIHZhcmlhbnQgOiBtX3ZhcmlhbnRzKQogICAg
ICAgICB2YXJpYW50LnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOwogfQogCi12b2lkIERlbGV0ZUJ5
U3RhdHVzOjptYXJrSWZDaGVhcChTbG90VmlzaXRvciYgdmlzaXRvcikKK0RFRklORV9WSVNJVF9B
R0dSRUdBVEUoRGVsZXRlQnlTdGF0dXMpOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgor
dm9pZCBEZWxldGVCeVN0YXR1czo6bWFya0lmQ2hlYXAoVmlzaXRvciYgdmlzaXRvcikKIHsKICAg
ICBmb3IgKERlbGV0ZUJ5SWRWYXJpYW50JiB2YXJpYW50IDogbV92YXJpYW50cykKICAgICAgICAg
dmFyaWFudC5tYXJrSWZDaGVhcCh2aXNpdG9yKTsKIH0KIAordGVtcGxhdGUgdm9pZCBEZWxldGVC
eVN0YXR1czo6bWFya0lmQ2hlYXAoQWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9p
ZCBEZWxldGVCeVN0YXR1czo6bWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImKTsKKwogYm9vbCBEZWxl
dGVCeVN0YXR1czo6ZmluYWxpemUoVk0mIHZtKQogewogICAgIGZvciAoYXV0byYgdmFyaWFudCA6
IG1fdmFyaWFudHMpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9EZWxl
dGVCeVN0YXR1cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9EZWxldGVCeVN0YXR1cy5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvRGVsZXRlQnlTdGF0dXMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIwLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC04MSw4ICs4MSw4
IEBAIHB1YmxpYzoKICAgICAvLyBBdHRlbXB0cyB0byByZWR1Y2UgdGhlIHNldCBvZiB2YXJpYW50
cyB0byBmaXQgdGhlIGdpdmVuIHN0cnVjdHVyZSBzZXQuIFRoaXMgbWF5IGJlIGFwcHJveGltYXRl
LgogICAgIHZvaWQgZmlsdGVyKGNvbnN0IFN0cnVjdHVyZVNldCYpOwogCi0gICAgdm9pZCB2aXNp
dEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYpOwotICAgIHZvaWQgbWFya0lmQ2hlYXAoU2xvdFZpc2l0
b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0FHR1JFR0FURTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBWaXNpdG9yPiB2b2lkIG1hcmtJZkNoZWFwKFZpc2l0b3ImKTsKICAgICBib29sIGZpbmFsaXpl
KFZNJik7CiAKICAgICBib29sIGFwcGVuZFZhcmlhbnQoY29uc3QgRGVsZXRlQnlJZFZhcmlhbnQm
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9EaXJlY3RFdmFsQ29kZUNh
Y2hlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRGly
ZWN0RXZhbENvZGVDYWNoZS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9EaXJlY3RFdmFsQ29kZUNhY2hlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00
NSw3ICs0NSw4IEBAIHZvaWQgRGlyZWN0RXZhbENvZGVDYWNoZTo6Y2xlYXIoKQogICAgIG1fY2Fj
aGVNYXAuY2xlYXIoKTsKIH0KIAotdm9pZCBEaXJlY3RFdmFsQ29kZUNhY2hlOjp2aXNpdEFnZ3Jl
Z2F0ZShTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2
b2lkIERpcmVjdEV2YWxDb2RlQ2FjaGU6OnZpc2l0QWdncmVnYXRlSW1wbChWaXNpdG9yJiB2aXNp
dG9yKQogewogICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fbG9jayk7CiAgICAgRXZhbENhY2hlTWFw
OjppdGVyYXRvciBlbmQgPSBtX2NhY2hlTWFwLmVuZCgpOwpAQCAtNTMsNSArNTQsNiBAQCB2b2lk
IERpcmVjdEV2YWxDb2RlQ2FjaGU6OnZpc2l0QWdncmVnYXRlCiAgICAgICAgIHZpc2l0b3IuYXBw
ZW5kKHB0ci0+dmFsdWUpOwogfQogCi19IC8vIG5hbWVzcGFjZSBKU0MKK0RFRklORV9WSVNJVF9B
R0dSRUdBVEUoRGlyZWN0RXZhbENvZGVDYWNoZSk7CiAKK30gLy8gbmFtZXNwYWNlIEpTQwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0RpcmVjdEV2YWxDb2RlQ2FjaGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRGlyZWN0RXZhbENv
ZGVDYWNoZS5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvRGlyZWN0RXZhbENvZGVDYWNoZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtOTcsNyArOTcs
NyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJl
dHVybiBtX2NhY2hlTWFwLmlzRW1wdHkoKTsgfQogCi0gICAgICAgIHZvaWQgdmlzaXRBZ2dyZWdh
dGUoU2xvdFZpc2l0b3ImKTsKKyAgICAgICAgREVDTEFSRV9WSVNJVF9BR0dSRUdBVEU7CiAKICAg
ICAgICAgdm9pZCBjbGVhcigpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UuY3BwCShyZXZp
c2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhlY3V0YWJs
ZVRvQ29kZUJsb2NrRWRnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxOC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTMsNyArNTMsOCBAQCB2b2lkIEV4
ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2U6OmZpbmlzaENyCiAgICAgQVNTRVJUKCFpc0FjdGl2ZSgp
KTsKIH0KIAotdm9pZCBFeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlOjp2aXNpdENoaWxkcmVuKEpT
Q2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNp
dG9yPgordm9pZCBFeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlOjp2aXNpdENoaWxkcmVuSW1wbChK
U0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgVk0mIHZtID0gdmlzaXRvci52
bSgpOwogICAgIEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UqIGVkZ2UgPSBqc0Nhc3Q8RXhlY3V0
YWJsZVRvQ29kZUJsb2NrRWRnZSo+KGNlbGwpOwpAQCAtNjEsNyArNjIsNyBAQCB2b2lkIEV4ZWN1
dGFibGVUb0NvZGVCbG9ja0VkZ2U6OnZpc2l0Q2hpCiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbihj
ZWxsLCB2aXNpdG9yKTsKIAogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gZWRnZS0+bV9jb2Rl
QmxvY2suZ2V0KCk7Ci0gICAgCisKICAgICAvLyBJdCdzIHBvc3NpYmxlIGZvciBzb21lb25lIHRv
IGhvbGQgYSBwb2ludGVyIHRvIHRoZSBlZGdlIGFmdGVyIHRoZSBlZGdlIGhhcyBjbGVhcmVkIGl0
cyB3ZWFrCiAgICAgLy8gcmVmZXJlbmNlIHRvIHRoZSBjb2RlQmxvY2suIEluIGEgY29uc2VydmF0
aXZlIEdDIGxpa2Ugb3VycywgdGhhdCBjb3VsZCBoYXBwZW4gYXQgcmFuZG9tIGZvcgogICAgIC8v
IG5vIGdvb2QgcmVhc29uIGFuZCBpdCdzIFRvdGFsbHkgT0sgKFRNKS4gU2VlIGZpbmFsaXplVW5j
b25kaXRpb25hbGx5KCkgZm9yIHdoZXJlIHdlIGNsZWFyCkBAIC03NSwxMSArNzYsMTEgQEAgdm9p
ZCBFeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlOjp2aXNpdENoaQogICAgIH0KICAgICAKICAgICBD
b25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrKTsKLSAgICAKLSAgICBp
ZiAoY29kZUJsb2NrLT5zaG91bGRWaXNpdFN0cm9uZ2x5KGxvY2tlcikpCisKKyAgICBpZiAoY29k
ZUJsb2NrLT5zaG91bGRWaXNpdFN0cm9uZ2x5KGxvY2tlciwgdmlzaXRvcikpCiAgICAgICAgIHZp
c2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQoY29kZUJsb2NrKTsKICAgICAKLSAgICBpZiAoIXZtLmhl
YXAuaXNNYXJrZWQoY29kZUJsb2NrKSkKKyAgICBpZiAoIXZpc2l0b3IuaXNNYXJrZWQoY29kZUJs
b2NrKSkKICAgICAgICAgdm0uZXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZXNXaXRoRmluYWxpemVy
cy5hZGQoZWRnZSk7CiAgICAgCiAgICAgaWYgKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChjb2Rl
QmxvY2stPmppdFR5cGUoKSkpIHsKQEAgLTExNyw3ICsxMTgsOSBAQCB2b2lkIEV4ZWN1dGFibGVU
b0NvZGVCbG9ja0VkZ2U6OnZpc2l0Q2hpCiAgICAgZWRnZS0+cnVuQ29uc3RyYWludChsb2NrZXIs
IHZtLCB2aXNpdG9yKTsKIH0KIAotdm9pZCBFeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlOjp2aXNp
dE91dHB1dENvbnN0cmFpbnRzKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCitE
RUZJTkVfVklTSVRfQ0hJTERSRU4oRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZSk7CisKK3ZvaWQg
RXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZTo6dmlzaXRPdXRwdXRDb25zdHJhaW50cyhKU0NlbGwq
IGNlbGwsIEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgVk0mIHZtID0gdmlz
aXRvci52bSgpOwogICAgIEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UqIGVkZ2UgPSBqc0Nhc3Q8
RXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZSo+KGNlbGwpOwpAQCAtMTg2LDE2ICsxODksMjEgQEAg
RXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZTo6RXhlY3V0YWJsZVRvQwogewogfQogCi12b2lkIEV4
ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2U6OnJ1bkNvbnN0cmFpbnQoY29uc3QgQ29uY3VycmVudEpT
TG9ja2VyJiBsb2NrZXIsIFZNJiB2bSwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0
eXBlbmFtZSBWaXNpdG9yPgordm9pZCBFeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlOjpydW5Db25z
dHJhaW50KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYgbG9ja2VyLCBWTSYgdm0sIFZpc2l0b3Im
IHZpc2l0b3IpCiB7CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBtX2NvZGVCbG9jay5nZXQo
KTsKICAgICAKICAgICBjb2RlQmxvY2stPnByb3BhZ2F0ZVRyYW5zaXRpb25zKGxvY2tlciwgdmlz
aXRvcik7CiAgICAgY29kZUJsb2NrLT5kZXRlcm1pbmVMaXZlbmVzcyhsb2NrZXIsIHZpc2l0b3Ip
OwotICAgIAotICAgIGlmICh2bS5oZWFwLmlzTWFya2VkKGNvZGVCbG9jaykpCisKKyAgICBpZiAo
dmlzaXRvci5pc01hcmtlZChjb2RlQmxvY2spKQogICAgICAgICB2bS5leGVjdXRhYmxlVG9Db2Rl
QmxvY2tFZGdlc1dpdGhDb25zdHJhaW50cy5yZW1vdmUodGhpcyk7CiB9CiAKK3RlbXBsYXRlIHZv
aWQgRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZTo6cnVuQ29uc3RyYWludChjb25zdCBDb25jdXJy
ZW50SlNMb2NrZXImLCBWTSYsIEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQg
RXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZTo6cnVuQ29uc3RyYWludChjb25zdCBDb25jdXJyZW50
SlNMb2NrZXImLCBWTSYsIFNsb3RWaXNpdG9yJik7CisKKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGVjdXRhYmxlVG9Db2RlQmxv
Y2tFZGdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4
ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAxOSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTUzLDkgKzUzLDkgQEAgcHVibGljOgogICAgIERFQ0xBUkVfSU5GTzsKIAog
ICAgIENvZGVCbG9jayogY29kZUJsb2NrKCkgY29uc3QgeyByZXR1cm4gbV9jb2RlQmxvY2suZ2V0
KCk7IH0KLSAgICAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RW
aXNpdG9yJik7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRPdXRwdXRDb25zdHJhaW50cyhKU0NlbGwq
LCBTbG90VmlzaXRvciYpOworCisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKKyAgICBzdGF0
aWMgdm9pZCB2aXNpdE91dHB1dENvbnN0cmFpbnRzKEpTQ2VsbCosIEFic3RyYWN0U2xvdFZpc2l0
b3ImKTsKICAgICB2b2lkIGZpbmFsaXplVW5jb25kaXRpb25hbGx5KFZNJik7CiAgICAgCiAgICAg
c3RhdGljIENvZGVCbG9jayogdW53cmFwKEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UqIGVkZ2Up
CkBAIC04MSw5ICs4MSw5IEBAIHByaXZhdGU6CiAgICAgdm9pZCBhY3RpdmF0ZSgpOwogICAgIHZv
aWQgZGVhY3RpdmF0ZSgpOwogICAgIGJvb2wgaXNBY3RpdmUoKSBjb25zdDsKLSAgICAKLSAgICB2
b2lkIHJ1bkNvbnN0cmFpbnQoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgVk0mLCBTbG90Vmlz
aXRvciYpOwotICAgIAorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCBydW5D
b25zdHJhaW50KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIFZNJiwgVmlzaXRvciYpOworCiAg
ICAgV3JpdGVCYXJyaWVyPENvZGVCbG9jaz4gbV9jb2RlQmxvY2s7CiB9OwogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFZhcmlhbnQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkVmFyaWFudC5jcHAJKHJl
dmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlk
VmFyaWFudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDE0LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE0LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xNTYsMTYgKzE1NiwyMyBAQCBib29sIEdl
dEJ5SWRWYXJpYW50OjphdHRlbXB0VG9NZXJnZShjb25zCiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
LXZvaWQgR2V0QnlJZFZhcmlhbnQ6OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9y
KQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgR2V0QnlJZFZhcmlhbnQ6OnZpc2l0
QWdncmVnYXRlSW1wbChWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIG1faWRlbnRpZmllci52aXNp
dEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKIH0KIAotdm9pZCBHZXRCeUlkVmFyaWFudDo6bWFya0lmQ2hl
YXAoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCitERUZJTkVfVklTSVRfQUdHUkVHQVRFKEdldEJ5SWRW
YXJpYW50KTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgR2V0QnlJZFZhcmlh
bnQ6Om1hcmtJZkNoZWFwKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgbV9zdHJ1Y3R1cmVTZXQu
bWFya0lmQ2hlYXAodmlzaXRvcik7CiB9CiAKK3RlbXBsYXRlIHZvaWQgR2V0QnlJZFZhcmlhbnQ6
Om1hcmtJZkNoZWFwKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgR2V0QnlJ
ZFZhcmlhbnQ6Om1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJik7CisKIGJvb2wgR2V0QnlJZFZhcmlh
bnQ6OmZpbmFsaXplKFZNJiB2bSkKIHsKICAgICBpZiAoIW1fc3RydWN0dXJlU2V0LmlzU3RpbGxB
bGl2ZSh2bSkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFZh
cmlhbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0
QnlJZFZhcmlhbnQuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0dldEJ5SWRWYXJpYW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03Nyw4ICs3Nyw4
IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgYXR0ZW1wdFRvTWVyZ2UoY29uc3QgR2V0QnlJZFZhcmlh
bnQmIG90aGVyKTsKICAgICAKLSAgICB2b2lkIHZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJik7
Ci0gICAgdm9pZCBtYXJrSWZDaGVhcChTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRf
QUdHUkVHQVRFOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgbWFya0lmQ2hl
YXAoVmlzaXRvciYpOwogICAgIGJvb2wgZmluYWxpemUoVk0mKTsKICAgICAKICAgICB2b2lkIGR1
bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9HZXRCeVN0YXR1cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0dldEJ5U3RhdHVzLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5U3RhdHVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTUzMCw3ICs1MzAsOCBAQCB2b2lkIEdldEJ5U3RhdHVzOjpmaWx0ZXIoY29uc3QgU3RydWN0dXJl
CiAgICAgICAgIG1fc3RhdGUgPSBOb0luZm9ybWF0aW9uOwogfQogCi12b2lkIEdldEJ5U3RhdHVz
Ojp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1l
IFZpc2l0b3I+Cit2b2lkIEdldEJ5U3RhdHVzOjp2aXNpdEFnZ3JlZ2F0ZUltcGwoVmlzaXRvciYg
dmlzaXRvcikKIHsKICAgICBpZiAoaXNNb2R1bGVOYW1lc3BhY2UoKSkKICAgICAgICAgbV9tb2R1
bGVOYW1lc3BhY2VEYXRhLT5tX2lkZW50aWZpZXIudmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7CkBA
IC01MzgsMTIgKzUzOSwxOCBAQCB2b2lkIEdldEJ5U3RhdHVzOjp2aXNpdEFnZ3JlZ2F0ZShTbG90
VmlzCiAgICAgICAgIHZhcmlhbnQudmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7CiB9CiAKLXZvaWQg
R2V0QnlTdGF0dXM6Om1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorREVGSU5FX1ZJ
U0lUX0FHR1JFR0FURShHZXRCeVN0YXR1cyk7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+
Cit2b2lkIEdldEJ5U3RhdHVzOjptYXJrSWZDaGVhcChWaXNpdG9yJiB2aXNpdG9yKQogewogICAg
IGZvciAoR2V0QnlJZFZhcmlhbnQmIHZhcmlhbnQgOiBtX3ZhcmlhbnRzKQogICAgICAgICB2YXJp
YW50Lm1hcmtJZkNoZWFwKHZpc2l0b3IpOwogfQogCit0ZW1wbGF0ZSB2b2lkIEdldEJ5U3RhdHVz
OjptYXJrSWZDaGVhcChBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEdldEJ5
U3RhdHVzOjptYXJrSWZDaGVhcChTbG90VmlzaXRvciYpOworCiBib29sIEdldEJ5U3RhdHVzOjpm
aW5hbGl6ZShWTSYgdm0pCiB7CiAgICAgZm9yIChHZXRCeUlkVmFyaWFudCYgdmFyaWFudCA6IG1f
dmFyaWFudHMpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeVN0
YXR1cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRC
eVN0YXR1cy5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvR2V0QnlTdGF0dXMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTExOCw4ICsxMTgsOCBAQCBw
dWJsaWM6CiAgICAgSlNNb2R1bGVFbnZpcm9ubWVudCogbW9kdWxlRW52aXJvbm1lbnQoKSBjb25z
dCB7IHJldHVybiBtX21vZHVsZU5hbWVzcGFjZURhdGEtPm1fbW9kdWxlRW52aXJvbm1lbnQ7IH0K
ICAgICBTY29wZU9mZnNldCBzY29wZU9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fbW9kdWxlTmFt
ZXNwYWNlRGF0YS0+bV9zY29wZU9mZnNldDsgfQogICAgIAotICAgIHZvaWQgdmlzaXRBZ2dyZWdh
dGUoU2xvdFZpc2l0b3ImKTsKLSAgICB2b2lkIG1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJik7Cisg
ICAgREVDTEFSRV9WSVNJVF9BR0dSRUdBVEU7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRv
cj4gdm9pZCBtYXJrSWZDaGVhcChWaXNpdG9yJik7CiAgICAgYm9vbCBmaW5hbGl6ZShWTSYpOyAv
LyBSZXR1cm4gdHJ1ZSBpZiB0aGlzIGdldHMgdG8gbGl2ZS4KIAogICAgIGJvb2wgYXBwZW5kVmFy
aWFudChjb25zdCBHZXRCeUlkVmFyaWFudCYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0luQnlJZFN0YXR1cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0luQnlJZFN0YXR1cy5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbkJ5SWRTdGF0dXMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxOCBZdXN1a2UgU3V6
dWtpIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+LgotICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOC0yMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMjUxLDEyICsyNTEsMTYgQEAgdm9pZCBJbkJ5SWRTdGF0dXM6OmZpbHRlcihjb25z
dCBTdHJ1Y3R1cgogICAgICAgICBtX3N0YXRlID0gTm9JbmZvcm1hdGlvbjsKIH0KIAotdm9pZCBJ
bkJ5SWRTdGF0dXM6Om1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8
dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSW5CeUlkU3RhdHVzOjptYXJrSWZDaGVhcChWaXNpdG9y
JiB2aXNpdG9yKQogewogICAgIGZvciAoSW5CeUlkVmFyaWFudCYgdmFyaWFudCA6IG1fdmFyaWFu
dHMpCiAgICAgICAgIHZhcmlhbnQubWFya0lmQ2hlYXAodmlzaXRvcik7CiB9CiAKK3RlbXBsYXRl
IHZvaWQgSW5CeUlkU3RhdHVzOjptYXJrSWZDaGVhcChBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0
ZW1wbGF0ZSB2b2lkIEluQnlJZFN0YXR1czo6bWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImKTsKKwog
Ym9vbCBJbkJ5SWRTdGF0dXM6OmZpbmFsaXplKFZNJiB2bSkKIHsKICAgICBmb3IgKEluQnlJZFZh
cmlhbnQmIHZhcmlhbnQgOiBtX3ZhcmlhbnRzKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvSW5CeUlkU3RhdHVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0luQnlJZFN0YXR1cy5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5CeUlkU3RhdHVzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNiArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDE4IFl1c3VrZSBTdXp1a2kg
PHV0YXRhbmUudGVhQGdtYWlsLmNvbT4uCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMjEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC0xMDYsNyArMTA2LDcgQEAgcHVibGljOgogICAgIC8vIEF0dGVtcHRzIHRvIHJlZHVjZSB0
aGUgc2V0IG9mIHZhcmlhbnRzIHRvIGZpdCB0aGUgZ2l2ZW4gc3RydWN0dXJlIHNldC4gVGhpcyBt
YXkgYmUgYXBwcm94aW1hdGUuCiAgICAgdm9pZCBmaWx0ZXIoY29uc3QgU3RydWN0dXJlU2V0Jik7
CiAgICAgCi0gICAgdm9pZCBtYXJrSWZDaGVhcChTbG90VmlzaXRvciYpOworICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgbWFya0lmQ2hlYXAoVmlzaXRvciYpOwogICAgIGJvb2wg
ZmluYWxpemUoVk0mKTsKIAogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luQnlJZFZhcmlhbnQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbkJ5SWRWYXJpYW50LmNw
cAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lu
QnlJZFZhcmlhbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENv
cHlyaWdodCAoQykgMjAxOCBZdXN1a2UgU3V6dWtpIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+Lgot
ICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxOC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjQsMTEgKzY0LDE1IEBAIGJvb2wg
SW5CeUlkVmFyaWFudDo6YXR0ZW1wdFRvTWVyZ2UoY29uc3QKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IAotdm9pZCBJbkJ5SWRWYXJpYW50OjptYXJrSWZDaGVhcChTbG90VmlzaXRvciYgdmlzaXRvcikK
K3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEluQnlJZFZhcmlhbnQ6Om1hcmtJZkNo
ZWFwKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgbV9zdHJ1Y3R1cmVTZXQubWFya0lmQ2hlYXAo
dmlzaXRvcik7CiB9CiAKK3RlbXBsYXRlIHZvaWQgSW5CeUlkVmFyaWFudDo6bWFya0lmQ2hlYXAo
QWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBJbkJ5SWRWYXJpYW50OjptYXJr
SWZDaGVhcChTbG90VmlzaXRvciYpOworCiBib29sIEluQnlJZFZhcmlhbnQ6OmZpbmFsaXplKFZN
JiB2bSkKIHsKICAgICBpZiAoIW1fc3RydWN0dXJlU2V0LmlzU3RpbGxBbGl2ZSh2bSkpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5CeUlkVmFyaWFudC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbkJ5SWRWYXJpYW50LmgJKHJl
dmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbkJ5SWRW
YXJpYW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogQ29weXJpZ2h0
IChDKSAyMDE4IFl1c3VrZSBTdXp1a2kgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4uCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE4LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01Nyw3ICs1Nyw3IEBAIHB1YmxpYzoKIAogICAg
IGJvb2wgYXR0ZW1wdFRvTWVyZ2UoY29uc3QgSW5CeUlkVmFyaWFudCYgb3RoZXIpOwogICAgIAot
ICAgIHZvaWQgbWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBWaXNpdG9yPiB2b2lkIG1hcmtJZkNoZWFwKFZpc2l0b3ImKTsKICAgICBib29sIGZpbmFsaXpl
KFZNJik7CiAKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnRlcm5hbEZ1bmN0aW9uQWxsb2NhdGlvblByb2Zp
bGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW50ZXJu
YWxGdW5jdGlvbkFsbG9jYXRpb25Qcm9maWxlLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnRlcm5hbEZ1bmN0aW9uQWxsb2NhdGlvblByb2Zp
bGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM5LDcgKzM5LDcgQEAgcHVibGljOgogICAgIFN0cnVj
dHVyZSogY3JlYXRlQWxsb2NhdGlvblN0cnVjdHVyZUZyb21CYXNlKFZNJiwgSlNHbG9iYWxPYmpl
Y3QqLCBKU0NlbGwqIG93bmVyLCBKU09iamVjdCogcHJvdG90eXBlLCBTdHJ1Y3R1cmUqIGJhc2Up
OwogCiAgICAgdm9pZCBjbGVhcigpIHsgbV9zdHJ1Y3R1cmUuY2xlYXIoKTsgfQotICAgIHZvaWQg
dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsgdmlzaXRvci5hcHBlbmQobV9z
dHJ1Y3R1cmUpOyB9CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCB2aXNpdEFn
Z3JlZ2F0ZShWaXNpdG9yJiB2aXNpdG9yKSB7IHZpc2l0b3IuYXBwZW5kKG1fc3RydWN0dXJlKTsg
fQogCiBwcml2YXRlOgogICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1fc3RydWN0dXJlOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09iamVjdEFsbG9jYXRpb25Qcm9m
aWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09iamVj
dEFsbG9jYXRpb25Qcm9maWxlLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9PYmplY3RBbGxvY2F0aW9uUHJvZmlsZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE3IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIxIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtNjQsNyArNjQsOCBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIEFTU0VSVChpc051bGwoKSk7
CiAgICAgfQogCi0gICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYgdmlzaXRvcikK
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgorICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUo
VmlzaXRvciYgdmlzaXRvcikKICAgICB7CiAgICAgICAgIHZpc2l0b3IuYXBwZW5kKG1fc3RydWN0
dXJlKTsKICAgICB9CkBAIC0xMTAsNyArMTExLDggQEAgcHVibGljOgogICAgICAgICBBU1NFUlQo
aXNOdWxsKCkpOwogICAgIH0KIAotICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3Im
IHZpc2l0b3IpCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KKyAgICB2b2lkIHZpc2l0
QWdncmVnYXRlKFZpc2l0b3ImIHZpc2l0b3IpCiAgICAgewogICAgICAgICBCYXNlOjp2aXNpdEFn
Z3JlZ2F0ZSh2aXNpdG9yKTsKICAgICAgICAgdmlzaXRvci5hcHBlbmQobV9wcm90b3R5cGUpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBo
aWNBY2Nlc3MuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNC0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzU4LDcg
KzM1OCw4IEBAIGJvb2wgUG9seW1vcnBoaWNBY2Nlc3M6OnZpc2l0V2VhayhWTSYgdm0KICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBQb2x5bW9ycGhpY0FjY2Vzczo6cHJvcGFnYXRlVHJhbnNp
dGlvbnMoU2xvdFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNp
dG9yPgorYm9vbCBQb2x5bW9ycGhpY0FjY2Vzczo6cHJvcGFnYXRlVHJhbnNpdGlvbnMoVmlzaXRv
ciYgdmlzaXRvcikgY29uc3QKIHsKICAgICBib29sIHJlc3VsdCA9IHRydWU7CiAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IHNpemUoKTsgKytpKQpAQCAtMzY2LDEyICszNjcsMTggQEAgYm9v
bCBQb2x5bW9ycGhpY0FjY2Vzczo6cHJvcGFnYXRlVHJhbnNpdAogICAgIHJldHVybiByZXN1bHQ7
CiB9CiAKLXZvaWQgUG9seW1vcnBoaWNBY2Nlc3M6OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9y
JiB2aXNpdG9yKQordGVtcGxhdGUgYm9vbCBQb2x5bW9ycGhpY0FjY2Vzczo6cHJvcGFnYXRlVHJh
bnNpdGlvbnMoQWJzdHJhY3RTbG90VmlzaXRvciYpIGNvbnN0OwordGVtcGxhdGUgYm9vbCBQb2x5
bW9ycGhpY0FjY2Vzczo6cHJvcGFnYXRlVHJhbnNpdGlvbnMoU2xvdFZpc2l0b3ImKSBjb25zdDsK
KwordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgUG9seW1vcnBoaWNBY2Nlc3M6OnZp
c2l0QWdncmVnYXRlSW1wbChWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBzaXplKCk7ICsraSkKICAgICAgICAgYXQoaSkudmlzaXRBZ2dyZWdhdGUodmlz
aXRvcik7CiB9CiAKK0RFRklORV9WSVNJVF9BR0dSRUdBVEUoUG9seW1vcnBoaWNBY2Nlc3MpOwor
CiB2b2lkIFBvbHltb3JwaGljQWNjZXNzOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiB7
CiAgICAgb3V0LnByaW50KFJhd1BvaW50ZXIodGhpcyksICI6WyIpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmgJKHJldmlz
aW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhp
Y0FjY2Vzcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxNC0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTUyLDE0ICsxNTIsMTQgQEAgcHVibGljOgog
ICAgIGNvbnN0IEFjY2Vzc0Nhc2UmIGF0KHVuc2lnbmVkIGkpIGNvbnN0IHsgcmV0dXJuICptX2xp
c3RbaV07IH0KICAgICBjb25zdCBBY2Nlc3NDYXNlJiBvcGVyYXRvcltdKHVuc2lnbmVkIGkpIGNv
bnN0IHsgcmV0dXJuICptX2xpc3RbaV07IH0KIAotICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xv
dFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0FHR1JFR0FURTsKIAogICAgIC8vIElmIHRo
aXMgcmV0dXJucyBmYWxzZSB0aGVuIHdlIGFyZSByZXF1ZXN0aW5nIGEgcmVzZXQgb2YgdGhlIG93
bmluZyBTdHJ1Y3R1cmVTdHViSW5mby4KICAgICBib29sIHZpc2l0V2VhayhWTSYpIGNvbnN0Owog
ICAgIAogICAgIC8vIFRoaXMgcmV0dXJucyB0cnVlIGlmIGl0IGhhcyBtYXJrZWQgZXZlcnl0aGlu
ZyBpdCB3aWxsIGV2ZXIgbWFya2VkLiBUaGlzIGNhbiBiZSB1c2VkIGFzIGFuCiAgICAgLy8gb3B0
aW1pemF0aW9uIHRvIHRoZW4gYXZvaWQgY2FsbGluZyB0aGlzIG1ldGhvZCBhZ2FpbiBkdXJpbmcg
dGhlIGZpeHBvaW50LgotICAgIGJvb2wgcHJvcGFnYXRlVHJhbnNpdGlvbnMoU2xvdFZpc2l0b3Im
KSBjb25zdDsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiBib29sIHByb3BhZ2F0ZVRy
YW5zaXRpb25zKFZpc2l0b3ImKSBjb25zdDsKIAogICAgIHZvaWQgYWJvdXRUb0RpZSgpOwogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMu
Y3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
UHV0QnlJZFN0YXR1cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDEyLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zOTYsMTIgKzM5NiwxNiBAQCBQ
dXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OnNsb3dWZXJzaW9uCiAgICAgcmV0dXJuIFB1dEJ5
SWRTdGF0dXMobWFrZXNDYWxscygpID8gTWFrZXNDYWxscyA6IFRha2VzU2xvd1BhdGgpOwogfQog
Ci12b2lkIFB1dEJ5SWRTdGF0dXM6Om1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQor
dGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgUHV0QnlJZFN0YXR1czo6bWFya0lmQ2hl
YXAoVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBmb3IgKFB1dEJ5SWRWYXJpYW50JiB2YXJpYW50
IDogbV92YXJpYW50cykKICAgICAgICAgdmFyaWFudC5tYXJrSWZDaGVhcCh2aXNpdG9yKTsKIH0K
IAordGVtcGxhdGUgdm9pZCBQdXRCeUlkU3RhdHVzOjptYXJrSWZDaGVhcChBYnN0cmFjdFNsb3RW
aXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIFB1dEJ5SWRTdGF0dXM6Om1hcmtJZkNoZWFwKFNsb3RW
aXNpdG9yJik7CisKIGJvb2wgUHV0QnlJZFN0YXR1czo6ZmluYWxpemUoVk0mIHZtKQogewogICAg
IGZvciAoUHV0QnlJZFZhcmlhbnQmIHZhcmlhbnQgOiBtX3ZhcmlhbnRzKSB7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmgJKHJldmlzaW9u
IDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVz
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDEyLTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEyLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0xMTcsNyArMTE3LDcgQEAgcHVibGljOgogICAgIGNvbnN0
IFB1dEJ5SWRWYXJpYW50JiBhdChzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fdmFyaWFu
dHNbaW5kZXhdOyB9CiAgICAgY29uc3QgUHV0QnlJZFZhcmlhbnQmIG9wZXJhdG9yW10oc2l6ZV90
IGluZGV4KSBjb25zdCB7IHJldHVybiBhdChpbmRleCk7IH0KICAgICAKLSAgICB2b2lkIG1hcmtJ
ZkNoZWFwKFNsb3RWaXNpdG9yJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9p
ZCBtYXJrSWZDaGVhcChWaXNpdG9yJik7CiAgICAgYm9vbCBmaW5hbGl6ZShWTSYpOwogICAgIAog
ICAgIHZvaWQgbWVyZ2UoY29uc3QgUHV0QnlJZFN0YXR1cyYpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuY3BwCShyZXZpc2lvbiAy
NzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxNC0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYyLDEzICsyNjIsMTcgQEAgYm9vbCBQdXRCeUlkVmFy
aWFudDo6YXR0ZW1wdFRvTWVyZ2VUcmFucwogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIFB1
dEJ5SWRWYXJpYW50OjptYXJrSWZDaGVhcChTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRl
PHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFB1dEJ5SWRWYXJpYW50OjptYXJrSWZDaGVhcChWaXNp
dG9yJiB2aXNpdG9yKQogewogICAgIG1fb2xkU3RydWN0dXJlLm1hcmtJZkNoZWFwKHZpc2l0b3Ip
OwogICAgIGlmIChtX25ld1N0cnVjdHVyZSkKICAgICAgICAgbV9uZXdTdHJ1Y3R1cmUtPm1hcmtJ
ZkNoZWFwKHZpc2l0b3IpOwogfQogCit0ZW1wbGF0ZSB2b2lkIFB1dEJ5SWRWYXJpYW50OjptYXJr
SWZDaGVhcChBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIFB1dEJ5SWRWYXJp
YW50OjptYXJrSWZDaGVhcChTbG90VmlzaXRvciYpOworCiBib29sIFB1dEJ5SWRWYXJpYW50Ojpm
aW5hbGl6ZShWTSYgdm0pCiB7CiAgICAgaWYgKCFtX29sZFN0cnVjdHVyZS5pc1N0aWxsQWxpdmUo
dm0pKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRW
YXJpYW50LmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9QdXRCeUlkVmFyaWFudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxNC0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTMyLDcgKzEzMiw3IEBA
IHB1YmxpYzoKIAogICAgIGJvb2wgYXR0ZW1wdFRvTWVyZ2UoY29uc3QgUHV0QnlJZFZhcmlhbnQm
IG90aGVyKTsKICAgICAKLSAgICB2b2lkIG1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJik7CisgICAg
dGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCBtYXJrSWZDaGVhcChWaXNpdG9yJik7CiAg
ICAgYm9vbCBmaW5hbGl6ZShWTSYpOwogICAgIAogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYp
IGNvbnN0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1JlY29yZGVkU3Rh
dHVzZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9S
ZWNvcmRlZFN0YXR1c2VzLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1JlY29yZGVkU3RhdHVzZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MDIsNyArMTAyLDggQEAgU2V0UHJpdmF0ZUJyYW5kU3RhdHVzKiBSZWNvcmRlZFN0YXR1c2VzOgog
ICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQgUmVjb3JkZWRTdGF0dXNlczo6dmlzaXRBZ2dy
ZWdhdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgor
dm9pZCBSZWNvcmRlZFN0YXR1c2VzOjp2aXNpdEFnZ3JlZ2F0ZUltcGwoVmlzaXRvciYgdmlzaXRv
cikKIHsKICAgICBmb3IgKGF1dG8mIHBhaXIgOiBnZXRzKQogICAgICAgICBwYWlyLnNlY29uZC0+
dmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7CkBAIC0xMTQsNyArMTE1LDEwIEBAIHZvaWQgUmVjb3Jk
ZWRTdGF0dXNlczo6dmlzaXRBZ2dyZWdhdGUoU2wKICAgICAgICAgcGFpci5zZWNvbmQtPnZpc2l0
QWdncmVnYXRlKHZpc2l0b3IpOwogfQogCi12b2lkIFJlY29yZGVkU3RhdHVzZXM6Om1hcmtJZkNo
ZWFwKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorREVGSU5FX1ZJU0lUX0FHR1JFR0FURShSZWNvcmRl
ZFN0YXR1c2VzKTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgUmVjb3JkZWRT
dGF0dXNlczo6bWFya0lmQ2hlYXAoVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBmb3IgKGF1dG8m
IHBhaXIgOiBnZXRzKQogICAgICAgICBwYWlyLnNlY29uZC0+bWFya0lmQ2hlYXAodmlzaXRvcik7
CkBAIC0xMzAsNiArMTM0LDkgQEAgdm9pZCBSZWNvcmRlZFN0YXR1c2VzOjptYXJrSWZDaGVhcChT
bG90VgogICAgICAgICBwYWlyLnNlY29uZC0+bWFya0lmQ2hlYXAodmlzaXRvcik7CiB9CiAKK3Rl
bXBsYXRlIHZvaWQgUmVjb3JkZWRTdGF0dXNlczo6bWFya0lmQ2hlYXAoQWJzdHJhY3RTbG90Vmlz
aXRvciYpOwordGVtcGxhdGUgdm9pZCBSZWNvcmRlZFN0YXR1c2VzOjptYXJrSWZDaGVhcChTbG90
VmlzaXRvciYpOworCiB2b2lkIFJlY29yZGVkU3RhdHVzZXM6OmZpbmFsaXplV2l0aG91dERlbGV0
aW5nKFZNJiB2bSkKIHsKICAgICAvLyBUaGlzIHZhcmlhbnQgb2YgZmluYWxpemUgZ2V0cyBjYWxs
ZWQgZnJvbSB3aXRoaW4gZ3JhcGggc2FmZXBvaW50cyAtLSBzbyB0aGVyZSBtYXkgYmUgREZHIElS
IGluCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUmVjb3JkZWRTdGF0dXNl
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9SZWNvcmRl
ZFN0YXR1c2VzLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9SZWNvcmRlZFN0YXR1c2VzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01NCw4ICs1NCw4
IEBAIHN0cnVjdCBSZWNvcmRlZFN0YXR1c2VzIHsKICAgICBDaGVja1ByaXZhdGVCcmFuZFN0YXR1
cyogYWRkQ2hlY2tQcml2YXRlQnJhbmRTdGF0dXMoY29uc3QgQ29kZU9yaWdpbiYsIGNvbnN0IENo
ZWNrUHJpdmF0ZUJyYW5kU3RhdHVzJik7CiAgICAgU2V0UHJpdmF0ZUJyYW5kU3RhdHVzKiBhZGRT
ZXRQcml2YXRlQnJhbmRTdGF0dXMoY29uc3QgQ29kZU9yaWdpbiYsIGNvbnN0IFNldFByaXZhdGVC
cmFuZFN0YXR1cyYpOwogICAgIAotICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3Im
KTsKLSAgICB2b2lkIG1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJ
VF9BR0dSRUdBVEU7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCBtYXJrSWZD
aGVhcChWaXNpdG9yJik7CiAgICAgCiAgICAgdm9pZCBmaW5hbGl6ZVdpdGhvdXREZWxldGluZyhW
TSYpOwogICAgIHZvaWQgZmluYWxpemUoVk0mKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9TZXRQcml2YXRlQnJhbmRTdGF0dXMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TZXRQcml2YXRlQnJhbmRTdGF0dXMuY3BwCShyZXZp
c2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU2V0UHJpdmF0
ZUJyYW5kU3RhdHVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjM1LDE4ICsyMzUsMjUgQEAgQ2Fj
aGVhYmxlSWRlbnRpZmllciBTZXRQcml2YXRlQnJhbmRTdGF0dQogICAgIHJldHVybiByZXN1bHQ7
CiB9CiAKLXZvaWQgU2V0UHJpdmF0ZUJyYW5kU3RhdHVzOjp2aXNpdEFnZ3JlZ2F0ZShTbG90Vmlz
aXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFNldFByaXZh
dGVCcmFuZFN0YXR1czo6dmlzaXRBZ2dyZWdhdGVJbXBsKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAg
ICAgZm9yIChTZXRQcml2YXRlQnJhbmRWYXJpYW50JiB2YXJpYW50IDogbV92YXJpYW50cykKICAg
ICAgICAgdmFyaWFudC52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKIH0KIAotdm9pZCBTZXRQcml2
YXRlQnJhbmRTdGF0dXM6Om1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorREVGSU5F
X1ZJU0lUX0FHR1JFR0FURShTZXRQcml2YXRlQnJhbmRTdGF0dXMpOworCit0ZW1wbGF0ZTx0eXBl
bmFtZSBWaXNpdG9yPgordm9pZCBTZXRQcml2YXRlQnJhbmRTdGF0dXM6Om1hcmtJZkNoZWFwKFZp
c2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgZm9yIChTZXRQcml2YXRlQnJhbmRWYXJpYW50JiB2YXJp
YW50IDogbV92YXJpYW50cykKICAgICAgICAgdmFyaWFudC5tYXJrSWZDaGVhcCh2aXNpdG9yKTsK
IH0KIAordGVtcGxhdGUgdm9pZCBTZXRQcml2YXRlQnJhbmRTdGF0dXM6Om1hcmtJZkNoZWFwKEFi
c3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgU2V0UHJpdmF0ZUJyYW5kU3RhdHVz
OjptYXJrSWZDaGVhcChTbG90VmlzaXRvciYpOworCiBib29sIFNldFByaXZhdGVCcmFuZFN0YXR1
czo6ZmluYWxpemUoVk0mIHZtKQogewogICAgIGZvciAoYXV0byYgdmFyaWFudCA6IG1fdmFyaWFu
dHMpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TZXRQcml2YXRlQnJh
bmRTdGF0dXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
U2V0UHJpdmF0ZUJyYW5kU3RhdHVzLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9TZXRQcml2YXRlQnJhbmRTdGF0dXMuaAkod29ya2luZyBjb3B5
KQpAQCAtODMsOCArODMsOCBAQCBwdWJsaWM6CiAgICAgLy8gQXR0ZW1wdHMgdG8gcmVkdWNlIHRo
ZSBzZXQgb2YgdmFyaWFudHMgdG8gZml0IHRoZSBnaXZlbiBzdHJ1Y3R1cmUgc2V0LiBUaGlzIG1h
eSBiZSBhcHByb3hpbWF0ZS4KICAgICB2b2lkIGZpbHRlcihjb25zdCBTdHJ1Y3R1cmVTZXQmKTsK
IAotICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImKTsKLSAgICB2b2lkIG1hcmtJ
ZkNoZWFwKFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9BR0dSRUdBVEU7CisgICAg
dGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCBtYXJrSWZDaGVhcChWaXNpdG9yJik7CiAg
ICAgYm9vbCBmaW5hbGl6ZShWTSYpOwogCiAgICAgYm9vbCBhcHBlbmRWYXJpYW50KGNvbnN0IFNl
dFByaXZhdGVCcmFuZFZhcmlhbnQmKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9TZXRQcml2YXRlQnJhbmRWYXJpYW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvU2V0UHJpdmF0ZUJyYW5kVmFyaWFudC5jcHAJKHJldmlzaW9u
IDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TZXRQcml2YXRlQnJh
bmRWYXJpYW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDIwLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29w
eXJpZ2h0IChDKSAyMDIxIElnYWxpYSBTLkEuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CkBAIC01NCw3ICs1NCw4IEBAIGJvb2wgU2V0UHJpdmF0ZUJyYW5kVmFyaWFudDo6
YXR0ZW1wdFRvTWUKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBTZXRQcml2YXRlQnJhbmRW
YXJpYW50OjptYXJrSWZDaGVhcChTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVu
YW1lIFZpc2l0b3I+Cit2b2lkIFNldFByaXZhdGVCcmFuZFZhcmlhbnQ6Om1hcmtJZkNoZWFwKFZp
c2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgaWYgKG1fb2xkU3RydWN0dXJlKQogICAgICAgICBtX29s
ZFN0cnVjdHVyZS0+bWFya0lmQ2hlYXAodmlzaXRvcik7CkBAIC02Miw2ICs2Myw5IEBAIHZvaWQg
U2V0UHJpdmF0ZUJyYW5kVmFyaWFudDo6bWFya0lmQ2hlYXAKICAgICAgICAgbV9uZXdTdHJ1Y3R1
cmUtPm1hcmtJZkNoZWFwKHZpc2l0b3IpOwogfQogCit0ZW1wbGF0ZSB2b2lkIFNldFByaXZhdGVC
cmFuZFZhcmlhbnQ6Om1hcmtJZkNoZWFwKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRl
IHZvaWQgU2V0UHJpdmF0ZUJyYW5kVmFyaWFudDo6bWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImKTsK
KwogYm9vbCBTZXRQcml2YXRlQnJhbmRWYXJpYW50OjpmaW5hbGl6ZShWTSYgdm0pCiB7CiAgICAg
aWYgKCF2bS5oZWFwLmlzTWFya2VkKG1fb2xkU3RydWN0dXJlKSkKQEAgLTcxLDExICs3NSwxNCBA
QCBib29sIFNldFByaXZhdGVCcmFuZFZhcmlhbnQ6OmZpbmFsaXplKFZNCiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKLXZvaWQgU2V0UHJpdmF0ZUJyYW5kVmFyaWFudDo6dmlzaXRBZ2dyZWdhdGUoU2xv
dFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBTZXRQ
cml2YXRlQnJhbmRWYXJpYW50Ojp2aXNpdEFnZ3JlZ2F0ZUltcGwoVmlzaXRvciYgdmlzaXRvcikK
IHsKICAgICBtX2lkZW50aWZpZXIudmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7CiB9CiAKK0RFRklO
RV9WSVNJVF9BR0dSRUdBVEUoU2V0UHJpdmF0ZUJyYW5kVmFyaWFudCk7CisKIHZvaWQgU2V0UHJp
dmF0ZUJyYW5kVmFyaWFudDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAogewogICAgIGR1
bXBJbkNvbnRleHQob3V0LCBudWxscHRyKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9TZXRQcml2YXRlQnJhbmRWYXJpYW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NldFByaXZhdGVCcmFuZFZhcmlhbnQuaAkocmV2aXNpb24g
MjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NldFByaXZhdGVCcmFu
ZFZhcmlhbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNDUsOCArNDUsOCBAQCBwdWJsaWM6CiAKICAg
ICBib29sIGF0dGVtcHRUb01lcmdlKGNvbnN0IFNldFByaXZhdGVCcmFuZFZhcmlhbnQmIG90aGVy
KTsKIAotICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImKTsKLSAgICB2b2lkIG1h
cmtJZkNoZWFwKFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9BR0dSRUdBVEU7Cisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCBtYXJrSWZDaGVhcChWaXNpdG9yJik7
CiAgICAgYm9vbCBmaW5hbGl6ZShWTSYpOwogCiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikg
Y29uc3Q7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU2V0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0
dXJlU2V0LmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1N0cnVjdHVyZVNldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMSwxMiArMzEsMTYg
QEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLXZvaWQgU3RydWN0dXJlU2V0OjptYXJrSWZDaGVhcChT
bG90VmlzaXRvciYgdmlzaXRvcikgY29uc3QKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2
b2lkIFN0cnVjdHVyZVNldDo6bWFya0lmQ2hlYXAoVmlzaXRvciYgdmlzaXRvcikgY29uc3QKIHsK
ICAgICBmb3IgKFN0cnVjdHVyZSogc3RydWN0dXJlIDogKnRoaXMpCiAgICAgICAgIHN0cnVjdHVy
ZS0+bWFya0lmQ2hlYXAodmlzaXRvcik7CiB9CiAKK3RlbXBsYXRlIHZvaWQgU3RydWN0dXJlU2V0
OjptYXJrSWZDaGVhcChBYnN0cmFjdFNsb3RWaXNpdG9yJikgY29uc3Q7Cit0ZW1wbGF0ZSB2b2lk
IFN0cnVjdHVyZVNldDo6bWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImKSBjb25zdDsKKwogYm9vbCBT
dHJ1Y3R1cmVTZXQ6OmlzU3RpbGxBbGl2ZShWTSYgdm0pIGNvbnN0CiB7CiAgICAgZm9yIChTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSA6ICp0aGlzKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvU3RydWN0dXJlU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1N0cnVjdHVyZVNldC5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU2V0LmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTggQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC01NCw3ICs1NCw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG9ubHlFbnRyeSgpOwogICAg
IH0KIAotICAgIHZvaWQgbWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImKSBjb25zdDsKKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIG1hcmtJZkNoZWFwKFZpc2l0b3ImKSBjb25zdDsK
ICAgICBib29sIGlzU3RpbGxBbGl2ZShWTSYpIGNvbnN0OwogICAgIAogICAgIHZvaWQgZHVtcElu
Q29udGV4dChQcmludFN0cmVhbSYsIER1bXBDb250ZXh0KikgY29uc3Q7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAJ
KHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1
Y3R1cmVTdHViSW5mby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDA4LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOTYsNyArMjk2LDggQEAgdm9p
ZCBTdHJ1Y3R1cmVTdHViSW5mbzo6cmVzZXQoY29uc3QgQ29uYwogICAgIHNldENhY2hlVHlwZShs
b2NrZXIsIENhY2hlVHlwZTo6VW5zZXQpOwogfQogCi12b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjp2
aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZp
c2l0b3I+Cit2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjp2aXNpdEFnZ3JlZ2F0ZUltcGwoVmlzaXRv
ciYgdmlzaXRvcikKIHsKICAgICB7CiAgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9i
dWZmZXJlZFN0cnVjdHVyZXNMb2NrKTsKQEAgLTMyMiw2ICszMjMsOCBAQCB2b2lkIFN0cnVjdHVy
ZVN0dWJJbmZvOjp2aXNpdEFnZ3JlZ2F0ZShTCiAgICAgcmV0dXJuOwogfQogCitERUZJTkVfVklT
SVRfQUdHUkVHQVRFKFN0cnVjdHVyZVN0dWJJbmZvKTsKKwogdm9pZCBTdHJ1Y3R1cmVTdHViSW5m
bzo6dmlzaXRXZWFrUmVmZXJlbmNlcyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXJCYXNlJiBsb2Nr
ZXIsIENvZGVCbG9jayogY29kZUJsb2NrKQogewogICAgIFZNJiB2bSA9IGNvZGVCbG9jay0+dm0o
KTsKQEAgLTM1Miw3ICszNTUsOCBAQCB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjp2aXNpdFdlYWtS
ZWZlcmVuCiAgICAgcmVzZXRCeUdDID0gdHJ1ZTsKIH0KIAotYm9vbCBTdHJ1Y3R1cmVTdHViSW5m
bzo6cHJvcGFnYXRlVHJhbnNpdGlvbnMoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0
eXBlbmFtZSBWaXNpdG9yPgorYm9vbCBTdHJ1Y3R1cmVTdHViSW5mbzo6cHJvcGFnYXRlVHJhbnNp
dGlvbnMoVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBzd2l0Y2ggKG1fY2FjaGVUeXBlKSB7CiAg
ICAgY2FzZSBDYWNoZVR5cGU6OlVuc2V0OgpAQCAtMzcxLDYgKzM3NSw5IEBAIGJvb2wgU3RydWN0
dXJlU3R1YkluZm86OnByb3BhZ2F0ZVRyYW5zaXQKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAordGVt
cGxhdGUgYm9vbCBTdHJ1Y3R1cmVTdHViSW5mbzo6cHJvcGFnYXRlVHJhbnNpdGlvbnMoQWJzdHJh
Y3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgYm9vbCBTdHJ1Y3R1cmVTdHViSW5mbzo6cHJvcGFn
YXRlVHJhbnNpdGlvbnMoU2xvdFZpc2l0b3ImKTsKKwogU3R1YkluZm9TdW1tYXJ5IFN0cnVjdHVy
ZVN0dWJJbmZvOjpzdW1tYXJ5KFZNJiB2bSkgY29uc3QKIHsKICAgICBTdHViSW5mb1N1bW1hcnkg
dGFrZXNTbG93UGF0aCA9IFN0dWJJbmZvU3VtbWFyeTo6VGFrZXNTbG93UGF0aDsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5o
CShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3Ry
dWN0dXJlU3R1YkluZm8uaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDgtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTkzLDE0ICs5MywxNCBAQCBwdWJs
aWM6CiAgICAgdm9pZCBkZXJlZigpOwogICAgIHZvaWQgYWJvdXRUb0RpZSgpOwogCi0gICAgdm9p
ZCB2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQUdHUkVH
QVRFOwogCiAgICAgLy8gQ2hlY2sgaWYgdGhlIHN0dWIgaGFzIHdlYWsgcmVmZXJlbmNlcyB0aGF0
IGFyZSBkZWFkLiBJZiBpdCBkb2VzLCB0aGVuIGl0IHJlc2V0cyBpdHNlbGYsCiAgICAgLy8gZWl0
aGVyIGVudGlyZWx5IG9yIGp1c3QgZW5vdWdoIHRvIGVuc3VyZSB0aGF0IHRob3NlIGRlYWQgcG9p
bnRlcnMgZG9uJ3QgZ2V0IHVzZWQgYW55bW9yZS4KICAgICB2b2lkIHZpc2l0V2Vha1JlZmVyZW5j
ZXMoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyQmFzZSYsIENvZGVCbG9jayopOwogICAgIAogICAg
IC8vIFRoaXMgcmV0dXJucyB0cnVlIGlmIGl0IGhhcyBtYXJrZWQgZXZlcnl0aGluZyB0aGF0IGl0
IHdpbGwgZXZlciBtYXJrLgotICAgIGJvb2wgcHJvcGFnYXRlVHJhbnNpdGlvbnMoU2xvdFZpc2l0
b3ImKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiBib29sIHByb3BhZ2F0ZVRyYW5z
aXRpb25zKFZpc2l0b3ImKTsKICAgICAgICAgCiAgICAgU3R1YkluZm9TdW1tYXJ5IHN1bW1hcnko
Vk0mKSBjb25zdDsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9V
bmxpbmtlZENvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxOSBB
cHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAy
MSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTc1LDcgKzc1LDggQEAgVW5saW5rZWRDb2RlQmxvY2s6OlVubGlua2VkQ29k
ZUJsb2NrKFZNJgogICAgIH0KIH0KIAotdm9pZCBVbmxpbmtlZENvZGVCbG9jazo6dmlzaXRDaGls
ZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5h
bWUgVmlzaXRvcj4KK3ZvaWQgVW5saW5rZWRDb2RlQmxvY2s6OnZpc2l0Q2hpbGRyZW5JbXBsKEpT
Q2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBVbmxpbmtlZENvZGVCbG9jayog
dGhpc09iamVjdCA9IGpzQ2FzdDxVbmxpbmtlZENvZGVCbG9jayo+KGNlbGwpOwogICAgIEFTU0VS
VF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTk0LDYgKzk1LDgg
QEAgdm9pZCBVbmxpbmtlZENvZGVCbG9jazo6dmlzaXRDaGlsZHJlbihKUwogICAgIHZpc2l0b3Iu
cmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKGV4dHJhTWVtb3J5KTsKIH0KIAorREVGSU5FX1ZJU0lU
X0NISUxEUkVOKFVubGlua2VkQ29kZUJsb2NrKTsKKwogc2l6ZV90IFVubGlua2VkQ29kZUJsb2Nr
Ojplc3RpbWF0ZWRTaXplKEpTQ2VsbCogY2VsbCwgVk0mIHZtKQogewogICAgIFVubGlua2VkQ29k
ZUJsb2NrKiB0aGlzT2JqZWN0ID0ganNDYXN0PFVubGlua2VkQ29kZUJsb2NrKj4oY2VsbCk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2Rl
QmxvY2suaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1VubGlua2VkQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTkgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjEgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00MzEsNyArNDMxLDcg
QEAgcHJpdmF0ZToKICAgICBSZWZDb3VudGVkQXJyYXk8RXhwcmVzc2lvblJhbmdlSW5mbz4gbV9l
eHByZXNzaW9uSW5mbzsKIAogcHJvdGVjdGVkOgotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwog
ICAgIHN0YXRpYyBzaXplX3QgZXN0aW1hdGVkU2l6ZShKU0NlbGwqLCBWTSYpOwogCiBwdWJsaWM6
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRGdW5jdGlvbkV4
ZWN1dGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9VbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDEyLTIwMTkgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEyLTIwMjEgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0xNDYsNyArMTQ2LDggQEAgdm9pZCBVbmxpbmtlZEZ1bmN0
aW9uRXhlY3V0YWJsZTo6ZGVzdHJveQogICAgIHN0YXRpY19jYXN0PFVubGlua2VkRnVuY3Rpb25F
eGVjdXRhYmxlKj4oY2VsbCktPn5VbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSgpOwogfQogCi12
b2lkIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2Vs
bCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9p
ZCBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBj
ZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxl
KiB0aGlzT2JqZWN0ID0ganNDYXN0PFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKj4oY2VsbCk7
CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAt
MTY5LDYgKzE3MCw4IEBAIHZvaWQgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU6OnZpc2l0Q2gK
ICAgICB9CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0
YWJsZSk7CisKIFNvdXJjZUNvZGUgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU6OmxpbmtlZFNv
dXJjZUNvZGUoY29uc3QgU291cmNlQ29kZSYgcGFzc2VkUGFyZW50U291cmNlKSBjb25zdAogewog
ICAgIGNvbnN0IFNvdXJjZUNvZGUmIHBhcmVudFNvdXJjZSA9ICFtX2lzQnVpbHRpbkRlZmF1bHRD
bGFzc0NvbnN0cnVjdG9yID8gcGFzc2VkUGFyZW50U291cmNlIDogQnVpbHRpbkV4ZWN1dGFibGVz
OjpkZWZhdWx0Q29uc3RydWN0b3JTb3VyY2VDb2RlKGNvbnN0cnVjdG9yS2luZCgpKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJs
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Vbmxpbmtl
ZEZ1bmN0aW9uRXhlY3V0YWJsZS5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUuaAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxOSBBcHBs
ZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMSBB
cHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTI0Miw3ICsyNDIsNyBAQCBwcml2YXRlOgogICAgIFVubGlua2VkRnVuY3Rpb25F
eGVjdXRhYmxlKFZNJiwgU3RydWN0dXJlKiwgY29uc3QgU291cmNlQ29kZSYsIEZ1bmN0aW9uTWV0
YWRhdGFOb2RlKiwgVW5saW5rZWRGdW5jdGlvbktpbmQsIENvbnN0cnVjdEFiaWxpdHksIEpTUGFy
c2VyU2NyaXB0TW9kZSwgUmVmUHRyPFREWkVudmlyb25tZW50TGluaz4sIE9wdGlvbmFsPFByaXZh
dGVOYW1lRW52aXJvbm1lbnQ+LCBKU0M6OkRlcml2ZWRDb250ZXh0VHlwZSwgSlNDOjpOZWVkc0Ns
YXNzRmllbGRJbml0aWFsaXplciwgUHJpdmF0ZUJyYW5kUmVxdWlyZW1lbnQsIGJvb2wgaXNCdWls
dGluRGVmYXVsdENsYXNzQ29uc3RydWN0b3IpOwogICAgIFVubGlua2VkRnVuY3Rpb25FeGVjdXRh
YmxlKERlY29kZXImLCBjb25zdCBDYWNoZWRGdW5jdGlvbkV4ZWN1dGFibGUmKTsKIAotICAgIHN0
YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNM
QVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgdm9pZCBkZWNvZGVDYWNoZWRDb2RlQmxvY2tzKFZN
Jik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlclNjb3Bl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdn
ZXJTY29wZS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZWJ1Z2dlci9EZWJ1Z2dlclNjb3BlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU1LDcgKzU1LDgg
QEAgdm9pZCBEZWJ1Z2dlclNjb3BlOjpmaW5pc2hDcmVhdGlvbihWTSYgdgogICAgIEJhc2U6OmZp
bmlzaENyZWF0aW9uKHZtKTsKIH0KIAotdm9pZCBEZWJ1Z2dlclNjb3BlOjp2aXNpdENoaWxkcmVu
KEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPgordm9pZCBEZWJ1Z2dlclNjb3BlOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNl
bGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgRGVidWdnZXJTY29wZSogdGhpc09iamVjdCA9
IGpzQ2FzdDxEZWJ1Z2dlclNjb3BlKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhF
UklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNjUsNiArNjYsOCBAQCB2b2lkIERlYnVnZ2Vy
U2NvcGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsCiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVj
dC0+bV9uZXh0KTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKERlYnVnZ2VyU2NvcGUpOwor
CiBTdHJpbmcgRGVidWdnZXJTY29wZTo6Y2xhc3NOYW1lKGNvbnN0IEpTT2JqZWN0KiBvYmplY3Qs
IFZNJiB2bSkKIHsKICAgICBjb25zdCBEZWJ1Z2dlclNjb3BlKiBzY29wZSA9IGpzQ2FzdDxjb25z
dCBEZWJ1Z2dlclNjb3BlKj4ob2JqZWN0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZWJ1Z2dlci9EZWJ1Z2dlclNjb3BlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RlYnVnZ2VyL0RlYnVnZ2VyU2NvcGUuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyU2NvcGUuaAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAyMCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAyMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTQ2LDcgKzQ2LDcgQEAgcHVibGljOgogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGlj
IERlYnVnZ2VyU2NvcGUqIGNyZWF0ZShWTSYgdm0sIEpTU2NvcGUqIHNjb3BlKTsKIAotICAgIHN0
YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNM
QVJFX1ZJU0lUX0NISUxEUkVOOwogICAgIHN0YXRpYyBTdHJpbmcgY2xhc3NOYW1lKGNvbnN0IEpT
T2JqZWN0KiwgVk0mKTsKICAgICBzdGF0aWMgU3RyaW5nIHRvU3RyaW5nTmFtZShjb25zdCBKU09i
amVjdCosIEpTR2xvYmFsT2JqZWN0Kik7CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlT
bG90KEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xv
dCYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkVHJhbnNpdGlv
bnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJl
ZFRyYW5zaXRpb25zLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdEZXNpcmVkVHJhbnNpdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTIs
NyArNTIsNyBAQCB2b2lkIERlc2lyZWRUcmFuc2l0aW9uOjpyZWFsbHlBZGQoVk0mIHZtCiAgICAg
ICAgICAgICBtX29sZFN0cnVjdHVyZSwgbV9uZXdTdHJ1Y3R1cmUpKTsKIH0KIAotdm9pZCBEZXNp
cmVkVHJhbnNpdGlvbjo6dmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQg
RGVzaXJlZFRyYW5zaXRpb246OnZpc2l0Q2hpbGRyZW4oQWJzdHJhY3RTbG90VmlzaXRvciYgdmlz
aXRvcikKIHsKICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKG1fY29kZU9yaWdpbk93bmVy
KTsKICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKG1fb2xkU3RydWN0dXJlKTsKQEAgLTc4
LDcgKzc4LDcgQEAgdm9pZCBEZXNpcmVkVHJhbnNpdGlvbnM6OnJlYWxseUFkZChWTSYgdgogICAg
ICAgICBtX3RyYW5zaXRpb25zW2ldLnJlYWxseUFkZCh2bSwgY29tbW9uKTsKIH0KIAotdm9pZCBE
ZXNpcmVkVHJhbnNpdGlvbnM6OnZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2
b2lkIERlc2lyZWRUcmFuc2l0aW9uczo6dmlzaXRDaGlsZHJlbihBYnN0cmFjdFNsb3RWaXNpdG9y
JiB2aXNpdG9yKQogewogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3RyYW5zaXRpb25z
LnNpemUoKTsgaSsrKQogICAgICAgICBtX3RyYW5zaXRpb25zW2ldLnZpc2l0Q2hpbGRyZW4odmlz
aXRvcik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRUcmFuc2l0
aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJl
ZFRyYW5zaXRpb25zLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHRGVzaXJlZFRyYW5zaXRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDYsOCAr
NDYsNyBAQCBwdWJsaWM6CiAgICAgRGVzaXJlZFRyYW5zaXRpb24oQ29kZUJsb2NrKiwgQ29kZUJs
b2NrKiBjb2RlT3JpZ2luT3duZXIsIFN0cnVjdHVyZSosIFN0cnVjdHVyZSopOwogCiAgICAgdm9p
ZCByZWFsbHlBZGQoVk0mLCBDb21tb25EYXRhKik7Ci0gICAgCi0gICAgdm9pZCB2aXNpdENoaWxk
cmVuKFNsb3RWaXNpdG9yJik7CisgICAgdm9pZCB2aXNpdENoaWxkcmVuKEFic3RyYWN0U2xvdFZp
c2l0b3ImKTsKIAogcHJpdmF0ZToKICAgICBDb2RlQmxvY2sqIG1fY29kZUJsb2NrOwpAQCAtNjMs
NyArNjIsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGFkZExhemlseShDb2RlQmxvY2sqLCBDb2Rl
QmxvY2sqIGNvZGVPcmlnaW5Pd25lciwgU3RydWN0dXJlKiwgU3RydWN0dXJlKik7CiAgICAgdm9p
ZCByZWFsbHlBZGQoVk0mLCBDb21tb25EYXRhKik7Ci0gICAgdm9pZCB2aXNpdENoaWxkcmVuKFNs
b3RWaXNpdG9yJik7CisgICAgdm9pZCB2aXNpdENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0b3Im
KTsKIAogcHJpdmF0ZToKICAgICBWZWN0b3I8RGVzaXJlZFRyYW5zaXRpb24+IG1fdHJhbnNpdGlv
bnM7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXZWFrUmVmZXJl
bmNlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNp
cmVkV2Vha1JlZmVyZW5jZXMuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXZWFrUmVmZXJlbmNlcy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC04Nyw3ICs4Nyw3IEBAIHZvaWQgRGVzaXJlZFdlYWtSZWZlcmVuY2VzOjpyZWFsbHlBZGQo
Vk0KICAgICB9CiB9CiAKLXZvaWQgRGVzaXJlZFdlYWtSZWZlcmVuY2VzOjp2aXNpdENoaWxkcmVu
KFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBEZXNpcmVkV2Vha1JlZmVyZW5jZXM6OnZpc2l0
Q2hpbGRyZW4oQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBmb3IgKEpTQ2Vs
bCogdGFyZ2V0IDogbV9yZWZlcmVuY2VzKQogICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmll
cmVkKHRhcmdldCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRX
ZWFrUmVmZXJlbmNlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHRGVzaXJlZFdlYWtSZWZlcmVuY2VzLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFdlYWtSZWZlcmVuY2VzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0zMSwxMCArMzEsMTAgQEAKIAogbmFtZXNwYWNlIEpTQyB7IAogCitjbGFzcyBBYnN0
cmFjdFNsb3RWaXNpdG9yOwogY2xhc3MgQ29kZUJsb2NrOwogY2xhc3MgSlNDZWxsOwogY2xhc3Mg
SlNWYWx1ZTsKLWNsYXNzIFNsb3RWaXNpdG9yOwogY2xhc3MgVk07CiAKIG5hbWVzcGFjZSBERkcg
ewpAQCAtNTIsOCArNTIsOCBAQCBwdWJsaWM6CiAgICAgYm9vbCBjb250YWlucyhKU0NlbGwqKTsK
ICAgICAKICAgICB2b2lkIHJlYWxseUFkZChWTSYsIENvbW1vbkRhdGEqKTsKLSAgICAKLSAgICB2
b2lkIHZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKKworICAgIHZvaWQgdmlzaXRDaGlsZHJl
bihBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAKIHByaXZhdGU6CiAgICAgQ29kZUJsb2NrKiBtX2Nv
ZGVCbG9jazsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCShyZXZp
c2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTQ0OCw3ICsxNDQ4LDcgQEAgdm9pZCBHcmFwaDo6cmVnaXN0ZXJG
cm96ZW5WYWx1ZXMoKQogICAgIG1fY29kZUJsb2NrLT5jb25zdGFudHNTb3VyY2VDb2RlUmVwcmVz
ZW50YXRpb24oKS5zaHJpbmtUb0ZpdCgpOwogfQogCi12b2lkIEdyYXBoOjp2aXNpdENoaWxkcmVu
KFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBHcmFwaDo6dmlzaXRDaGlsZHJlbihBYnN0cmFj
dFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGZvciAoRnJvemVuVmFsdWUqIHZhbHVlIDog
bV9mcm96ZW5WYWx1ZXMpIHsKICAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZCh2YWx1
ZS0+dmFsdWUoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCShyZXZp
c2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLTIw
MjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEx
LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0xMDAwLDkgKzEwMDAsOSBAQCBwdWJsaWM6CiAgICAgYm9vbCBjYW5E
b0Zhc3RTcHJlYWQoTm9kZSosIGNvbnN0IEFic3RyYWN0VmFsdWUmKTsKICAgICAKICAgICB2b2lk
IHJlZ2lzdGVyRnJvemVuVmFsdWVzKCk7Ci0gICAgCi0gICAgdm9pZCB2aXNpdENoaWxkcmVuKFNs
b3RWaXNpdG9yJikgZmluYWw7Ci0gICAgCisKKyAgICB2b2lkIHZpc2l0Q2hpbGRyZW4oQWJzdHJh
Y3RTbG90VmlzaXRvciYpIGZpbmFsOworCiAgICAgdm9pZCBsb2dBc3NlcnRpb25GYWlsdXJlKAog
ICAgICAgICBzdGQ6Om51bGxwdHJfdCwgY29uc3QgY2hhciogZmlsZSwgaW50IGxpbmUsIGNvbnN0
IGNoYXIqIGZ1bmN0aW9uLAogICAgICAgICBjb25zdCBjaGFyKiBhc3NlcnRpb24pOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIwIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
NjcyLDkgKzY3Miw5IEBAIENvbXBpbGF0aW9uS2V5IFBsYW46OmtleSgpCiAgICAgcmV0dXJuIENv
bXBpbGF0aW9uS2V5KG1fY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpLCBtX21vZGUpOwogfQogCi12
b2lkIFBsYW46OmNoZWNrTGl2ZW5lc3NBbmRWaXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNp
dG9yKQordm9pZCBQbGFuOjpjaGVja0xpdmVuZXNzQW5kVmlzaXRDaGlsZHJlbihBYnN0cmFjdFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQogewotICAgIGlmICghaXNLbm93blRvQmVMaXZlRHVyaW5nR0Mo
KSkKKyAgICBpZiAoIWlzS25vd25Ub0JlTGl2ZUR1cmluZ0dDKHZpc2l0b3IpKQogICAgICAgICBy
ZXR1cm47CiAKICAgICBjbGVhbk11c3RIYW5kbGVWYWx1ZXNJZk5lY2Vzc2FyeSgpOwpAQCAtNzA4
LDcgKzcwOCwyMCBAQCB2b2lkIFBsYW46OmZpbmFsaXplSW5HQygpCiAgICAgbV9yZWNvcmRlZFN0
YXR1c2VzLmZpbmFsaXplV2l0aG91dERlbGV0aW5nKCptX3ZtKTsKIH0KIAotYm9vbCBQbGFuOjpp
c0tub3duVG9CZUxpdmVEdXJpbmdHQygpCitib29sIFBsYW46OmlzS25vd25Ub0JlTGl2ZUR1cmlu
Z0dDKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgaWYgKG1fc3RhZ2UgPT0g
Q2FuY2VsbGVkKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCF2aXNpdG9yLmlzTWFy
a2VkKG1fY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICBpZiAoIXZpc2l0b3IuaXNNYXJrZWQobV9jb2RlQmxvY2stPmFsdGVybmF0aXZlKCkp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCEhbV9wcm9maWxlZERGR0NvZGVCbG9j
ayAmJiAhdmlzaXRvci5pc01hcmtlZChtX3Byb2ZpbGVkREZHQ29kZUJsb2NrKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFBsYW46OmlzS25vd25U
b0JlTGl2ZUFmdGVyR0MoKQogewogICAgIGlmIChtX3N0YWdlID09IENhbmNlbGxlZCkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFu
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmgJKHJl
dmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
My0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtNDMsOCArNDMsOCBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAorY2xh
c3MgQWJzdHJhY3RTbG90VmlzaXRvcjsKIGNsYXNzIENvZGVCbG9jazsKLWNsYXNzIFNsb3RWaXNp
dG9yOwogCiBuYW1lc3BhY2UgREZHIHsKIApAQCAtNzEsOSArNzEsMTAgQEAgcHVibGljOgogICAg
IENvbXBpbGF0aW9uS2V5IGtleSgpOwogICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+
Ci0gICAgdm9pZCBpdGVyYXRlQ29kZUJsb2Nrc0ZvckdDKGNvbnN0IEZ1bmMmKTsKLSAgICB2b2lk
IGNoZWNrTGl2ZW5lc3NBbmRWaXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJik7Ci0gICAgYm9vbCBp
c0tub3duVG9CZUxpdmVEdXJpbmdHQygpOworICAgIHZvaWQgaXRlcmF0ZUNvZGVCbG9ja3NGb3JH
QyhBYnN0cmFjdFNsb3RWaXNpdG9yJiwgY29uc3QgRnVuYyYpOworICAgIHZvaWQgY2hlY2tMaXZl
bmVzc0FuZFZpc2l0Q2hpbGRyZW4oQWJzdHJhY3RTbG90VmlzaXRvciYpOworICAgIGJvb2wgaXNL
bm93blRvQmVMaXZlRHVyaW5nR0MoQWJzdHJhY3RTbG90VmlzaXRvciYpOworICAgIGJvb2wgaXNL
bm93blRvQmVMaXZlQWZ0ZXJHQygpOwogICAgIHZvaWQgZmluYWxpemVJbkdDKCk7CiAgICAgdm9p
ZCBjYW5jZWwoKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuSW5s
aW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbklu
bGluZXMuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdQbGFuSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxNy0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzIsOSArMzIsOSBAQCBuYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAjaWYgRU5BQkxFKERGR19KSVQpCiAKIHRlbXBsYXRl
PHR5cGVuYW1lIEZ1bmM+Ci12b2lkIFBsYW46Oml0ZXJhdGVDb2RlQmxvY2tzRm9yR0MoY29uc3Qg
RnVuYyYgZnVuYykKK3ZvaWQgUGxhbjo6aXRlcmF0ZUNvZGVCbG9ja3NGb3JHQyhBYnN0cmFjdFNs
b3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBGdW5jJiBmdW5jKQogewotICAgIGlmICghaXNLbm93
blRvQmVMaXZlRHVyaW5nR0MoKSkKKyAgICBpZiAoIWlzS25vd25Ub0JlTGl2ZUR1cmluZ0dDKHZp
c2l0b3IpKQogICAgICAgICByZXR1cm47CiAgICAgCiAgICAgLy8gQ29tcGlsYXRpb24gd3JpdGVz
IGxvdHMgb2YgdmFsdWVzIHRvIGEgQ29kZUJsb2NrIHdpdGhvdXQgcGVyZm9ybWluZwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlcG9pbnQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZXBvaW50LmNwcAkocmV2aXNpb24gMjcy
ODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlcG9pbnQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNC0yMDE5
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNC0y
MDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtODMsMjggKzgzLDM4IEBAIHZvaWQgU2FmZXBvaW50OjpiZWdpbigpCiAg
ICAgfQogfQogCi12b2lkIFNhZmVwb2ludDo6Y2hlY2tMaXZlbmVzc0FuZFZpc2l0Q2hpbGRyZW4o
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIFNhZmVwb2ludDo6Y2hlY2tMaXZlbmVzc0FuZFZp
c2l0Q2hpbGRyZW4oQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBSRUxFQVNF
X0FTU0VSVChtX2RpZENhbGxCZWdpbik7CiAKICAgICBpZiAobV9yZXN1bHQubV9kaWRHZXRDYW5j
ZWxsZWQpCiAgICAgICAgIHJldHVybjsgLy8gV2Ugd2VyZSBjYW5jZWxsZWQgZHVyaW5nIGEgcHJl
dmlvdXMgR0MhCiAgICAgCi0gICAgaWYgKCFpc0tub3duVG9CZUxpdmVEdXJpbmdHQygpKQorICAg
IGlmICghaXNLbm93blRvQmVMaXZlRHVyaW5nR0ModmlzaXRvcikpCiAgICAgICAgIHJldHVybjsK
ICAgICAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX3NjYW5uYWJsZXMuc2l6ZSgpOyBpLS07KQog
ICAgICAgICBtX3NjYW5uYWJsZXNbaV0tPnZpc2l0Q2hpbGRyZW4odmlzaXRvcik7CiB9CiAKLWJv
b2wgU2FmZXBvaW50Ojppc0tub3duVG9CZUxpdmVEdXJpbmdHQygpCitib29sIFNhZmVwb2ludDo6
aXNLbm93blRvQmVMaXZlRHVyaW5nR0MoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsK
ICAgICBSRUxFQVNFX0FTU0VSVChtX2RpZENhbGxCZWdpbik7CiAgICAgCiAgICAgaWYgKG1fcmVz
dWx0Lm1fZGlkR2V0Q2FuY2VsbGVkKQogICAgICAgICByZXR1cm4gdHJ1ZTsgLy8gV2Ugd2VyZSBj
YW5jZWxsZWQgZHVyaW5nIGEgcHJldmlvdXMgR0MsIHNvIGxldCdzIG5vdCBtZXNzIHdpdGggaXQg
dGhpcyB0aW1lIGFyb3VuZCAtIHByZXRlbmQgaXQncyBsaXZlIGFuZCBtb3ZlIG9uLgogICAgIAot
ICAgIHJldHVybiBtX3BsYW4uaXNLbm93blRvQmVMaXZlRHVyaW5nR0MoKTsKKyAgICByZXR1cm4g
bV9wbGFuLmlzS25vd25Ub0JlTGl2ZUR1cmluZ0dDKHZpc2l0b3IpOworfQorCitib29sIFNhZmVw
b2ludDo6aXNLbm93blRvQmVMaXZlQWZ0ZXJHQygpCit7CisgICAgUkVMRUFTRV9BU1NFUlQobV9k
aWRDYWxsQmVnaW4pOworICAgIAorICAgIGlmIChtX3Jlc3VsdC5tX2RpZEdldENhbmNlbGxlZCkK
KyAgICAgICAgcmV0dXJuIHRydWU7IC8vIFdlIHdlcmUgY2FuY2VsbGVkIGR1cmluZyBhIHByZXZp
b3VzIEdDLCBzbyBsZXQncyBub3QgbWVzcyB3aXRoIGl0IHRoaXMgdGltZSBhcm91bmQgLSBwcmV0
ZW5kIGl0J3MgbGl2ZSBhbmQgbW92ZSBvbi4KKyAgICAKKyAgICByZXR1cm4gbV9wbGFuLmlzS25v
d25Ub0JlTGl2ZUFmdGVyR0MoKTsKIH0KIAogdm9pZCBTYWZlcG9pbnQ6OmNhbmNlbCgpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVwb2ludC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZXBvaW50LmgJKHJldmlzaW9uIDI3Mjgz
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZXBvaW50LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0LCAyMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMzEsNyArMzEsNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotY2xhc3MgU2xv
dFZpc2l0b3I7CitjbGFzcyBBYnN0cmFjdFNsb3RWaXNpdG9yOwogY2xhc3MgVk07CiAKIG5hbWVz
cGFjZSBERkcgewpAQCAtNjYsOSArNjYsMTAgQEAgcHVibGljOgogICAgIHZvaWQgYWRkKFNjYW5u
YWJsZSopOwogICAgIAogICAgIHZvaWQgYmVnaW4oKTsKLSAgICAKLSAgICB2b2lkIGNoZWNrTGl2
ZW5lc3NBbmRWaXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJik7Ci0gICAgYm9vbCBpc0tub3duVG9C
ZUxpdmVEdXJpbmdHQygpOworCisgICAgdm9pZCBjaGVja0xpdmVuZXNzQW5kVmlzaXRDaGlsZHJl
bihBYnN0cmFjdFNsb3RWaXNpdG9yJik7CisgICAgYm9vbCBpc0tub3duVG9CZUxpdmVEdXJpbmdH
QyhBYnN0cmFjdFNsb3RWaXNpdG9yJik7CisgICAgYm9vbCBpc0tub3duVG9CZUxpdmVBZnRlckdD
KCk7CiAgICAgdm9pZCBjYW5jZWwoKTsKICAgICAKICAgICBWTSogdm0oKSBjb25zdDsgLy8gTWF5
IHJldHVybiBudWxsIGlmIHdlJ3ZlIGJlZW4gY2FuY2VsbGVkLgpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTY2FubmFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NjYW5uYWJsZS5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NjYW5uYWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI5LDcgKzI5
LDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLWNsYXNzIFNsb3RWaXNpdG9yOworY2xhc3MgQWJz
dHJhY3RTbG90VmlzaXRvcjsKIAogbmFtZXNwYWNlIERGRyB7CiAKQEAgLTM4LDcgKzM4LDcgQEAg
cHVibGljOgogICAgIFNjYW5uYWJsZSgpIHsgfQogICAgIHZpcnR1YWwgflNjYW5uYWJsZSgpIHsg
fQogICAgIAotICAgIHZpcnR1YWwgdm9pZCB2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJikgPSAw
OworICAgIHZpcnR1YWwgdm9pZCB2aXNpdENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImKSA9
IDA7CiB9OwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0LmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjAgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0z
NzIsNyArMzcyLDcgQEAgdm9pZCBXb3JrbGlzdDo6cmVzdW1lQWxsVGhyZWFkcygpCiAgICAgbV9z
dXNwZW5zaW9uTG9jay51bmxvY2soKTsKIH0KIAotdm9pZCBXb3JrbGlzdDo6dmlzaXRXZWFrUmVm
ZXJlbmNlcyhTbG90VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgV29ya2xpc3Q6OnZpc2l0V2Vha1Jl
ZmVyZW5jZXMoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBWTSogdm0gPSAm
dmlzaXRvci5oZWFwKCktPnZtKCk7CiAgICAgewpAQCAtNDA1LDcgKzQwNSw3IEBAIHZvaWQgV29y
a2xpc3Q6OnJlbW92ZURlYWRQbGFucyhWTSYgdm0pCiAgICAgICAgICAgICBQbGFuKiBwbGFuID0g
aXRlci0+dmFsdWUuZ2V0KCk7CiAgICAgICAgICAgICBpZiAocGxhbi0+dm0oKSAhPSAmdm0pCiAg
ICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBpZiAocGxhbi0+aXNLbm93blRv
QmVMaXZlRHVyaW5nR0MoKSkgeworICAgICAgICAgICAgaWYgKHBsYW4tPmlzS25vd25Ub0JlTGl2
ZUFmdGVyR0MoKSkgewogICAgICAgICAgICAgICAgIHBsYW4tPmZpbmFsaXplSW5HQygpOwogICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQpAQCAtNDQwLDcgKzQ0MCw3IEBA
IHZvaWQgV29ya2xpc3Q6OnJlbW92ZURlYWRQbGFucyhWTSYgdm0pCiAgICAgICAgICAgICBjb250
aW51ZTsKICAgICAgICAgaWYgKHNhZmVwb2ludC0+dm0oKSAhPSAmdm0pCiAgICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgaWYgKHNhZmVwb2ludC0+aXNLbm93blRvQmVMaXZlRHVyaW5nR0Mo
KSkKKyAgICAgICAgaWYgKHNhZmVwb2ludC0+aXNLbm93blRvQmVMaXZlQWZ0ZXJHQygpKQogICAg
ICAgICAgICAgY29udGludWU7CiAgICAgICAgIHNhZmVwb2ludC0+Y2FuY2VsKCk7CiAgICAgfQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3QuaAkocmV2aXNpb24gMjcy
ODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIwIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMzUsNyArMzUsNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotY2xhc3MgU2xv
dFZpc2l0b3I7CitjbGFzcyBBYnN0cmFjdFNsb3RWaXNpdG9yOwogCiBuYW1lc3BhY2UgREZHIHsK
IApAQCAtNTcsNyArNTcsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBjb21wbGV0ZUFsbFBsYW5zRm9y
Vk0oVk0mKTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+Ci0gICAgdm9pZCBpdGVyYXRl
Q29kZUJsb2Nrc0ZvckdDKFZNJiwgY29uc3QgRnVuYyYpOworICAgIHZvaWQgaXRlcmF0ZUNvZGVC
bG9ja3NGb3JHQyhBYnN0cmFjdFNsb3RWaXNpdG9yJiwgVk0mLCBjb25zdCBGdW5jJik7CiAKICAg
ICB2b2lkIHdhaXRVbnRpbEFsbFBsYW5zRm9yVk1BcmVSZWFkeShWTSYpOwogICAgIFN0YXRlIGNv
bXBsZXRlQWxsUmVhZHlQbGFuc0ZvclZNKFZNJiwgQ29tcGlsYXRpb25LZXkgPSBDb21waWxhdGlv
bktleSgpKTsKQEAgLTczLDcgKzczLDcgQEAgcHVibGljOgogICAgIGJvb2wgaXNBY3RpdmVGb3JW
TShWTSYpIGNvbnN0OwogICAgIAogICAgIC8vIE9ubHkgY2FsbGVkIG9uIHRoZSBtYWluIHRocmVh
ZCBhZnRlciBzdXNwZW5kaW5nIGFsbCB0aHJlYWRzLgotICAgIHZvaWQgdmlzaXRXZWFrUmVmZXJl
bmNlcyhTbG90VmlzaXRvciYpOworICAgIHZvaWQgdmlzaXRXZWFrUmVmZXJlbmNlcyhBYnN0cmFj
dFNsb3RWaXNpdG9yJik7CiAgICAgdm9pZCByZW1vdmVEZWFkUGxhbnMoVk0mKTsKICAgICAKICAg
ICB2b2lkIHJlbW92ZU5vbkNvbXBpbGluZ1BsYW5zRm9yVk0oVk0mKTsKQEAgLTE0NCw3ICsxNDQs
NyBAQCBXb3JrbGlzdCYgZXhpc3RpbmdXb3JrbGlzdEZvckluZGV4KHVuc2lnCiB2b2lkIGNvbXBs
ZXRlQWxsUGxhbnNGb3JWTShWTSYpOwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgotdm9pZCBp
dGVyYXRlQ29kZUJsb2Nrc0ZvckdDKFZNJiwgY29uc3QgRnVuYyYpOwordm9pZCBpdGVyYXRlQ29k
ZUJsb2Nrc0ZvckdDKEFic3RyYWN0U2xvdFZpc2l0b3ImLCBWTSYsIGNvbnN0IEZ1bmMmKTsKIAog
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1dvcmtsaXN0SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHV29ya2xpc3RJbmxpbmVzLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3RJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMTggQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC0zMywzMCArMzMsMzAgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogI2lm
IEVOQUJMRShERkdfSklUKQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgotdm9pZCBpdGVyYXRl
Q29kZUJsb2Nrc0ZvckdDKFZNJiB2bSwgY29uc3QgRnVuYyYgZnVuYykKK3ZvaWQgaXRlcmF0ZUNv
ZGVCbG9ja3NGb3JHQyhBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBWTSYgdm0sIGNvbnN0
IEZ1bmMmIGZ1bmMpCiB7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gREZHOjpudW1iZXJPZldvcmts
aXN0cygpOyBpLS07KSB7CiAgICAgICAgIGlmIChERkc6OldvcmtsaXN0KiB3b3JrbGlzdCA9IERG
Rzo6ZXhpc3RpbmdXb3JrbGlzdEZvckluZGV4T3JOdWxsKGkpKQotICAgICAgICAgICAgd29ya2xp
c3QtPml0ZXJhdGVDb2RlQmxvY2tzRm9yR0Modm0sIGZ1bmMpOworICAgICAgICAgICAgd29ya2xp
c3QtPml0ZXJhdGVDb2RlQmxvY2tzRm9yR0ModmlzaXRvciwgdm0sIGZ1bmMpOwogICAgIH0KIH0K
IAogdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KLXZvaWQgV29ya2xpc3Q6Oml0ZXJhdGVDb2RlQmxv
Y2tzRm9yR0MoVk0mIHZtLCBjb25zdCBGdW5jJiBmdW5jKQordm9pZCBXb3JrbGlzdDo6aXRlcmF0
ZUNvZGVCbG9ja3NGb3JHQyhBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBWTSYgdm0sIGNv
bnN0IEZ1bmMmIGZ1bmMpCiB7CiAgICAgTG9ja0hvbGRlciBsb2NrZXIoKm1fbG9jayk7CiAgICAg
Zm9yIChQbGFuTWFwOjppdGVyYXRvciBpdGVyID0gbV9wbGFucy5iZWdpbigpOyBpdGVyICE9IG1f
cGxhbnMuZW5kKCk7ICsraXRlcikgewogICAgICAgICBQbGFuKiBwbGFuID0gaXRlci0+dmFsdWUu
Z2V0KCk7CiAgICAgICAgIGlmIChwbGFuLT52bSgpICE9ICZ2bSkKICAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICBwbGFuLT5pdGVyYXRlQ29kZUJsb2Nrc0ZvckdDKGZ1bmMpOworICAgICAg
ICBwbGFuLT5pdGVyYXRlQ29kZUJsb2Nrc0ZvckdDKHZpc2l0b3IsIGZ1bmMpOwogICAgIH0KIH0K
IAogI2Vsc2UgLy8gRU5BQkxFKERGR19KSVQpCiAKIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+Ci12
b2lkIGl0ZXJhdGVDb2RlQmxvY2tzRm9yR0MoVk0mLCBjb25zdCBGdW5jJikKK3ZvaWQgaXRlcmF0
ZUNvZGVCbG9ja3NGb3JHQyhBYnN0cmFjdFNsb3RWaXNpdG9yJiwgVk0mLCBjb25zdCBGdW5jJikK
IHsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQWJzdHJhY3RTbG90Vmlz
aXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Fic3RyYWN0
U2xvdFZpc2l0b3IuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9BYnN0cmFjdFNsb3RWaXNpdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMDcgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9u
Y2UKKworI2luY2x1ZGUgIkpTQ0pTVmFsdWUuaCIKKyNpbmNsdWRlICJNYXJrU3RhY2suaCIKKyNp
bmNsdWRlICJSb290TWFya1JlYXNvbi5oIgorI2luY2x1ZGUgIlZpc2l0UmFjZUtleS5oIgorI2lu
Y2x1ZGUgPHd0Zi9Db25jdXJyZW50UHRySGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9TaGFyZWRU
YXNrLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgSlNDIHsK
KworY2xhc3MgQ29uc2VydmF0aXZlUm9vdHM7CitjbGFzcyBIZWFwOworY2xhc3MgSGVhcENlbGw7
CitjbGFzcyBKU0NlbGw7CitjbGFzcyBNYXJrZWRCbG9jazsKK2NsYXNzIE1hcmtpbmdDb25zdHJh
aW50OworY2xhc3MgTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXI7CitjbGFzcyBQcmVjaXNlQWxsb2Nh
dGlvbjsKK2NsYXNzIFNsb3RWaXNpdG9yOworY2xhc3MgVk07CitjbGFzcyBWZXJpZmllclNsb3RW
aXNpdG9yOwordGVtcGxhdGU8dHlwZW5hbWUgVD4gY2xhc3MgV2VhazsKK3RlbXBsYXRlPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIFRyYWl0cz4gY2xhc3MgV3JpdGVCYXJyaWVyQmFzZTsKKworY2xhc3Mg
QWJzdHJhY3RTbG90VmlzaXRvciB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQWJzdHJhY3RT
bG90VmlzaXRvcik7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAg
Y2xhc3MgQ29udGV4dCB7CisgICAgcHVibGljOgorICAgICAgICBDb250ZXh0KEFic3RyYWN0U2xv
dFZpc2l0b3ImLCBIZWFwQ2VsbCopOworICAgICAgICB+Q29udGV4dCgpOworICAgICAgICBIZWFw
Q2VsbCogY2VsbCgpIGNvbnN0IHsgcmV0dXJuIG1fY2VsbDsgfQorICAgIHByaXZhdGU6CisgICAg
ICAgIEFic3RyYWN0U2xvdFZpc2l0b3ImIG1fdmlzaXRvcjsKKyAgICAgICAgSGVhcENlbGwqIG1f
Y2VsbDsKKyAgICAgICAgQ29udGV4dCogbV9wcmV2aW91czsKKyAgICB9OworCisgICAgY2xhc3Mg
U3VwcHJlc3NHQ1ZlcmlmaWVyU2NvcGUgeworICAgIHB1YmxpYzoKKyAgICAgICAgU3VwcHJlc3NH
Q1ZlcmlmaWVyU2NvcGUoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKKyAgICAgICAgICAg
IDogbV92aXNpdG9yKHZpc2l0b3IpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVCghbV92
aXNpdG9yLm1fc3VwcHJlc3NWZXJpZmllcik7CisgICAgICAgICAgICBtX3Zpc2l0b3IubV9zdXBw
cmVzc1ZlcmlmaWVyID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICB+U3VwcHJlc3NHQ1Zlcmlm
aWVyU2NvcGUoKSB7IG1fdmlzaXRvci5tX3N1cHByZXNzVmVyaWZpZXIgPSBmYWxzZTsgfQorICAg
IHByaXZhdGU6CisgICAgICAgIEFic3RyYWN0U2xvdFZpc2l0b3ImIG1fdmlzaXRvcjsKKyAgICB9
OworCisgICAgY2xhc3MgRGVmYXVsdE1hcmtpbmdWaW9sYXRpb25Bc3NlcnRpb25TY29wZSB7Cisg
ICAgcHVibGljOgorICAgICAgICBEZWZhdWx0TWFya2luZ1Zpb2xhdGlvbkFzc2VydGlvblNjb3Bl
KEFic3RyYWN0U2xvdFZpc2l0b3ImKSB7IH0KKyAgICB9OworCisgICAgdmlydHVhbCB+QWJzdHJh
Y3RTbG90VmlzaXRvcigpID0gZGVmYXVsdDsKKworICAgIE1hcmtTdGFja0FycmF5JiBjb2xsZWN0
b3JNYXJrU3RhY2soKSB7IHJldHVybiBtX2NvbGxlY3RvclN0YWNrOyB9CisgICAgTWFya1N0YWNr
QXJyYXkmIG11dGF0b3JNYXJrU3RhY2soKSB7IHJldHVybiBtX211dGF0b3JTdGFjazsgfQorICAg
IGNvbnN0IE1hcmtTdGFja0FycmF5JiBjb2xsZWN0b3JNYXJrU3RhY2soKSBjb25zdCB7IHJldHVy
biBtX2NvbGxlY3RvclN0YWNrOyB9CisgICAgY29uc3QgTWFya1N0YWNrQXJyYXkmIG11dGF0b3JN
YXJrU3RhY2soKSBjb25zdCB7IHJldHVybiBtX211dGF0b3JTdGFjazsgfQorCisgICAgYm9vbCBp
c0VtcHR5KCkgeyByZXR1cm4gbV9jb2xsZWN0b3JTdGFjay5pc0VtcHR5KCkgJiYgbV9tdXRhdG9y
U3RhY2suaXNFbXB0eSgpOyB9CisKKyAgICBWTSYgdm0oKTsKKyAgICBjb25zdCBWTSYgdm0oKSBj
b25zdDsKKyAgICBIZWFwKiBoZWFwKCkgY29uc3Q7CisKKyAgICB2aXJ0dWFsIHZvaWQgYXBwZW5k
KGNvbnN0IENvbnNlcnZhdGl2ZVJvb3RzJikgPSAwOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
VCwgdHlwZW5hbWUgVHJhaXRzPiB2b2lkIGFwcGVuZChjb25zdCBXcml0ZUJhcnJpZXJCYXNlPFQs
IFRyYWl0cz4mKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBUcmFpdHM+IHZv
aWQgYXBwZW5kSGlkZGVuKGNvbnN0IFdyaXRlQmFycmllckJhc2U8VCwgVHJhaXRzPiYpOworICAg
IHRlbXBsYXRlPHR5cGVuYW1lIEl0ZXJhdG9yPiB2b2lkIGFwcGVuZChJdGVyYXRvciBiZWdpbiAs
IEl0ZXJhdG9yIGVuZCk7CisgICAgQUxXQVlTX0lOTElORSB2b2lkIGFwcGVuZFZhbHVlcyhjb25z
dCBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24sIFJhd1ZhbHVlVHJhaXRzPFVua25vd24+PiosIHNp
emVfdCBjb3VudCk7CisgICAgQUxXQVlTX0lOTElORSB2b2lkIGFwcGVuZFZhbHVlc0hpZGRlbihj
b25zdCBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24sIFJhd1ZhbHVlVHJhaXRzPFVua25vd24+Pios
IHNpemVfdCBjb3VudCk7CisKKyAgICAvLyBUaGVzZSBkb24ndCByZXF1aXJlIHlvdSB0byBwcm92
ZSB0aGF0IHlvdSBoYXZlIGEgV3JpdGVCYXJyaWVyPD4uIFRoYXQgbWFrZXMgc2Vuc2UKKyAgICAv
LyBmb3I6CisgICAgLy8KKyAgICAvLyAtIHJvb3RzLgorICAgIC8vIC0gc29waGlzdGljYXRlZCBk
YXRhIHN0cnVjdHVyZXMgdGhhdCBiYXJyaWVyIHRocm91Z2ggb3RoZXIgbWVhbnMgKGxpa2UgREZH
OjpQbGFuIGFuZAorICAgIC8vICAgZnJpZW5kcykuCisgICAgLy8KKyAgICAvLyBJZiB5b3UgYXJl
IG5vdCBhIHJvb3QgYW5kIHlvdSBkb24ndCBrbm93IHdoYXQga2luZCBvZiBiYXJyaWVyIHlvdSBo
YXZlLCB0aGVuIHlvdQorICAgIC8vIHNob3VsZG4ndCBjYWxsIHRoZXNlIG1ldGhvZHMuCisgICAg
QUxXQVlTX0lOTElORSB2b2lkIGFwcGVuZFVuYmFycmllcmVkKEpTVmFsdWUpOworICAgIEFMV0FZ
U19JTkxJTkUgdm9pZCBhcHBlbmRVbmJhcnJpZXJlZChKU1ZhbHVlKiwgc2l6ZV90KTsKKyAgICB2
aXJ0dWFsIHZvaWQgYXBwZW5kVW5iYXJyaWVyZWQoSlNDZWxsKikgPSAwOworCisgICAgaW5saW5l
IGJvb2wgYWRkT3BhcXVlUm9vdCh2b2lkKik7IC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgcm9vdCB3
YXMgbmV3LgorICAgIGlubGluZSBib29sIGNvbnRhaW5zT3BhcXVlUm9vdCh2b2lkKikgY29uc3Q7
CisgICAgdm9pZCBzZXRJZ25vcmVOZXdPcGFxdWVSb290cyhib29sIHZhbHVlKSB7IG1faWdub3Jl
TmV3T3BhcXVlUm9vdHMgPSB2YWx1ZTsgfQorCisgICAgdmlydHVhbCBib29sIGlzRmlyc3RWaXNp
dCgpIGNvbnN0ID0gMDsKKworICAgIHZpcnR1YWwgYm9vbCBpc01hcmtlZChjb25zdCB2b2lkKikg
Y29uc3QgPSAwOworICAgIHZpcnR1YWwgYm9vbCBpc01hcmtlZChNYXJrZWRCbG9jayYsIEhlYXBD
ZWxsKikgY29uc3QgPSAwOworICAgIHZpcnR1YWwgYm9vbCBpc01hcmtlZChQcmVjaXNlQWxsb2Nh
dGlvbiYsIEhlYXBDZWxsKikgY29uc3QgPSAwOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4K
KyAgICB2b2lkIGFwcGVuZChjb25zdCBXZWFrPFQ+Jik7CisKKyAgICBBTFdBWVNfSU5MSU5FIHZv
aWQgYXBwZW5kSGlkZGVuVW5iYXJyaWVyZWQoSlNWYWx1ZSk7CisgICAgdmlydHVhbCB2b2lkIGFw
cGVuZEhpZGRlblVuYmFycmllcmVkKEpTQ2VsbCopID0gMDsKKworICAgIHNpemVfdCB2aXNpdENv
dW50KCkgY29uc3QgeyByZXR1cm4gbV92aXNpdENvdW50OyB9CisKKyAgICB2b2lkIGFkZFRvVmlz
aXRDb3VudChzaXplX3QgdmFsdWUpIHsgbV92aXNpdENvdW50ICs9IHZhbHVlOyB9CisKKyAgICB2
aXJ0dWFsIHZvaWQgYWRkUGFyYWxsZWxDb25zdHJhaW50VGFzayhSZWZQdHI8U2hhcmVkVGFzazx2
b2lkKEFic3RyYWN0U2xvdFZpc2l0b3ImKT4+KSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgbWFy
a0F1eGlsaWFyeShjb25zdCB2b2lkKiBiYXNlKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgcmVw
b3J0RXh0cmFNZW1vcnlWaXNpdGVkKHNpemVfdCkgPSAwOworI2lmIEVOQUJMRShSRVNPVVJDRV9V
U0FHRSkKKyAgICB2aXJ0dWFsIHZvaWQgcmVwb3J0RXh0ZXJuYWxNZW1vcnlWaXNpdGVkKHNpemVf
dCkgPSAwOworI2VuZGlmCisKKyAgICB2aXJ0dWFsIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNv
bnN0ID0gMDsKKworICAgIFJvb3RNYXJrUmVhc29uIHJvb3RNYXJrUmVhc29uKCkgY29uc3QgeyBy
ZXR1cm4gbV9yb290TWFya1JlYXNvbjsgfQorICAgIHZvaWQgc2V0Um9vdE1hcmtSZWFzb24oUm9v
dE1hcmtSZWFzb24gcmVhc29uKSB7IG1fcm9vdE1hcmtSZWFzb24gPSByZWFzb247IH0KKworICAg
IHZpcnR1YWwgYm9vbCBtdXRhdG9ySXNTdG9wcGVkKCkgY29uc3QgPSAwOworCisgICAgdmlydHVh
bCB2b2lkIGRpZFJhY2UoY29uc3QgVmlzaXRSYWNlS2V5JikgPSAwOworICAgIHZvaWQgZGlkUmFj
ZShKU0NlbGwqIGNlbGwsIGNvbnN0IGNoYXIqIHJlYXNvbikgeyBkaWRSYWNlKFZpc2l0UmFjZUtl
eShjZWxsLCByZWFzb24pKTsgfQorCisgICAgdmlydHVhbCB2b2lkIHZpc2l0QXNDb25zdHJhaW50
KGNvbnN0IEpTQ2VsbCopID0gMDsKKworICAgIGNvbnN0IGNoYXIqIGNvZGVOYW1lKCkgY29uc3Qg
eyByZXR1cm4gbV9jb2RlTmFtZS5kYXRhKCk7IH0KKworcHJvdGVjdGVkOgorICAgIGlubGluZSBB
YnN0cmFjdFNsb3RWaXNpdG9yKEhlYXAmLCBDU3RyaW5nIGNvZGVOYW1lLCBDb25jdXJyZW50UHRy
SGFzaFNldCYpOworCisgICAgSGVhcENlbGwqIHBhcmVudENlbGwoKSBjb25zdDsKKyAgICB2b2lk
IHJlc2V0KCk7CisKKyAgICBNYXJrU3RhY2tBcnJheSBtX2NvbGxlY3RvclN0YWNrOworICAgIE1h
cmtTdGFja0FycmF5IG1fbXV0YXRvclN0YWNrOworCisgICAgc2l6ZV90IG1fdmlzaXRDb3VudCB7
IDAgfTsKKworICAgIEhlYXAmIG1faGVhcDsKKyAgICBDb250ZXh0KiBtX2NvbnRleHQgeyBudWxs
cHRyIH07CisgICAgQ1N0cmluZyBtX2NvZGVOYW1lOworCisgICAgTWFya2luZ0NvbnN0cmFpbnQq
IG1fY3VycmVudENvbnN0cmFpbnQgeyBudWxscHRyIH07CisgICAgTWFya2luZ0NvbnN0cmFpbnRT
b2x2ZXIqIG1fY3VycmVudFNvbHZlciB7IG51bGxwdHIgfTsKKyAgICBDb25jdXJyZW50UHRySGFz
aFNldCYgbV9vcGFxdWVSb290czsKKworICAgIFJvb3RNYXJrUmVhc29uIG1fcm9vdE1hcmtSZWFz
b24geyBSb290TWFya1JlYXNvbjo6Tm9uZSB9OworICAgIGJvb2wgbV9zdXBwcmVzc1ZlcmlmaWVy
IHsgZmFsc2UgfTsKKyAgICBib29sIG1faWdub3JlTmV3T3BhcXVlUm9vdHMgeyBmYWxzZSB9OyAv
LyBVc2VmdWwgYXMgYSBkZWJ1Z2dpbmcgbW9kZS4KKworICAgIGZyaWVuZCBjbGFzcyBNYXJraW5n
Q29uc3RyYWludFNvbHZlcjsKK307CisKK2NsYXNzIFNldFJvb3RNYXJrUmVhc29uU2NvcGUgewor
cHVibGljOgorICAgIFNldFJvb3RNYXJrUmVhc29uU2NvcGUoQWJzdHJhY3RTbG90VmlzaXRvciYg
dmlzaXRvciwgUm9vdE1hcmtSZWFzb24gcmVhc29uKQorICAgICAgICA6IG1fdmlzaXRvcih2aXNp
dG9yKQorICAgICAgICAsIG1fcHJldmlvdXNSZWFzb24odmlzaXRvci5yb290TWFya1JlYXNvbigp
KQorICAgIHsKKyAgICAgICAgbV92aXNpdG9yLnNldFJvb3RNYXJrUmVhc29uKHJlYXNvbik7Cisg
ICAgfQorCisgICAgflNldFJvb3RNYXJrUmVhc29uU2NvcGUoKQorICAgIHsKKyAgICAgICAgbV92
aXNpdG9yLnNldFJvb3RNYXJrUmVhc29uKG1fcHJldmlvdXNSZWFzb24pOworICAgIH0KKworcHJp
dmF0ZToKKyAgICBBYnN0cmFjdFNsb3RWaXNpdG9yJiBtX3Zpc2l0b3I7CisgICAgUm9vdE1hcmtS
ZWFzb24gbV9wcmV2aW91c1JlYXNvbjsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQWJzdHJhY3RTbG90VmlzaXRvcklubGluZXMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9BYnN0cmFjdFNsb3RWaXNp
dG9ySW5saW5lcy5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0Fic3RyYWN0U2xvdFZpc2l0b3JJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwx
NTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJh
Z21hIG9uY2UKKworI2luY2x1ZGUgIkFic3RyYWN0U2xvdFZpc2l0b3IuaCIKKyNpbmNsdWRlICJI
ZWFwLmgiCisjaW5jbHVkZSAiV2Vha0lubGluZXMuaCIKKyNpbmNsdWRlICJXcml0ZUJhcnJpZXIu
aCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2lubGluZSBBYnN0cmFjdFNsb3RWaXNpdG9yOjpDb250
ZXh0OjpDb250ZXh0KEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIEhlYXBDZWxsKiBjZWxs
KQorICAgIDogbV92aXNpdG9yKHZpc2l0b3IpCisgICAgLCBtX2NlbGwoY2VsbCkKK3sKKyAgICBt
X3ByZXZpb3VzID0gbV92aXNpdG9yLm1fY29udGV4dDsKKyAgICBtX3Zpc2l0b3IubV9jb250ZXh0
ID0gdGhpczsKK30KKworaW5saW5lIEFic3RyYWN0U2xvdFZpc2l0b3I6OkNvbnRleHQ6On5Db250
ZXh0KCkKK3sKKyAgICBtX3Zpc2l0b3IubV9jb250ZXh0ID0gbV9wcmV2aW91czsKK30KKworaW5s
aW5lIEFic3RyYWN0U2xvdFZpc2l0b3I6OkFic3RyYWN0U2xvdFZpc2l0b3IoSGVhcCYgaGVhcCwg
Q1N0cmluZyBjb2RlTmFtZSwgQ29uY3VycmVudFB0ckhhc2hTZXQmIG9wYXF1ZVJvb3RzKQorICAg
IDogbV9oZWFwKGhlYXApCisgICAgLCBtX2NvZGVOYW1lKGNvZGVOYW1lKQorICAgICwgbV9vcGFx
dWVSb290cyhvcGFxdWVSb290cykKK3sKK30KKworaW5saW5lIEhlYXAqIEFic3RyYWN0U2xvdFZp
c2l0b3I6OmhlYXAoKSBjb25zdAoreworICAgIHJldHVybiAmbV9oZWFwOworfQorCitpbmxpbmUg
Vk0mIEFic3RyYWN0U2xvdFZpc2l0b3I6OnZtKCkKK3sKKyAgICByZXR1cm4gbV9oZWFwLnZtKCk7
Cit9CisKK2lubGluZSBjb25zdCBWTSYgQWJzdHJhY3RTbG90VmlzaXRvcjo6dm0oKSBjb25zdAor
eworICAgIHJldHVybiBtX2hlYXAudm0oKTsKK30KKworaW5saW5lIGJvb2wgQWJzdHJhY3RTbG90
VmlzaXRvcjo6YWRkT3BhcXVlUm9vdCh2b2lkKiBwdHIpCit7CisgICAgaWYgKCFwdHIpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAobV9pZ25vcmVOZXdPcGFxdWVSb290cykKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghbV9vcGFxdWVSb290cy5hZGQocHRyKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIG1fdmlzaXRDb3VudCsrOworICAgIHJldHVybiB0cnVlOwor
fQorCitpbmxpbmUgYm9vbCBBYnN0cmFjdFNsb3RWaXNpdG9yOjpjb250YWluc09wYXF1ZVJvb3Qo
dm9pZCogcHRyKSBjb25zdAoreworICAgIHJldHVybiBtX29wYXF1ZVJvb3RzLmNvbnRhaW5zKHB0
cik7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitBTFdBWVNfSU5MSU5FIHZvaWQgQWJzdHJh
Y3RTbG90VmlzaXRvcjo6YXBwZW5kKGNvbnN0IFdlYWs8VD4mIHdlYWspCit7CisgICAgYXBwZW5k
VW5iYXJyaWVyZWQod2Vhay5nZXQoKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVu
YW1lIFRyYWl0cz4KK0FMV0FZU19JTkxJTkUgdm9pZCBBYnN0cmFjdFNsb3RWaXNpdG9yOjphcHBl
bmQoY29uc3QgV3JpdGVCYXJyaWVyQmFzZTxULCBUcmFpdHM+JiBzbG90KQoreworICAgIGFwcGVu
ZFVuYmFycmllcmVkKHNsb3QuZ2V0KCkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBl
bmFtZSBUcmFpdHM+CitBTFdBWVNfSU5MSU5FIHZvaWQgQWJzdHJhY3RTbG90VmlzaXRvcjo6YXBw
ZW5kSGlkZGVuKGNvbnN0IFdyaXRlQmFycmllckJhc2U8VCwgVHJhaXRzPiYgc2xvdCkKK3sKKyAg
ICBhcHBlbmRIaWRkZW5VbmJhcnJpZXJlZChzbG90LmdldCgpKTsKK30KKworQUxXQVlTX0lOTElO
RSB2b2lkIEFic3RyYWN0U2xvdFZpc2l0b3I6OmFwcGVuZEhpZGRlblVuYmFycmllcmVkKEpTVmFs
dWUgdmFsdWUpCit7CisgICAgaWYgKHZhbHVlLmlzQ2VsbCgpKQorICAgICAgICBhcHBlbmRIaWRk
ZW5VbmJhcnJpZXJlZCh2YWx1ZS5hc0NlbGwoKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEl0
ZXJhdG9yPgorQUxXQVlTX0lOTElORSB2b2lkIEFic3RyYWN0U2xvdFZpc2l0b3I6OmFwcGVuZChJ
dGVyYXRvciBiZWdpbiwgSXRlcmF0b3IgZW5kKQoreworICAgIGZvciAoYXV0byBpdCA9IGJlZ2lu
OyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgIGFwcGVuZCgqaXQpOworfQorCitBTFdBWVNfSU5M
SU5FIHZvaWQgQWJzdHJhY3RTbG90VmlzaXRvcjo6YXBwZW5kVmFsdWVzKGNvbnN0IFdyaXRlQmFy
cmllckJhc2U8VW5rbm93bj4qIGJhcnJpZXJzLCBzaXplX3QgY291bnQpCit7CisgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKQorICAgICAgICBhcHBlbmQoYmFycmllcnNbaV0p
OworfQorCitBTFdBWVNfSU5MSU5FIHZvaWQgQWJzdHJhY3RTbG90VmlzaXRvcjo6YXBwZW5kVmFs
dWVzSGlkZGVuKGNvbnN0IFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4qIGJhcnJpZXJzLCBzaXpl
X3QgY291bnQpCit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKQorICAg
ICAgICBhcHBlbmRIaWRkZW4oYmFycmllcnNbaV0pOworfQorCitBTFdBWVNfSU5MSU5FIHZvaWQg
QWJzdHJhY3RTbG90VmlzaXRvcjo6YXBwZW5kVW5iYXJyaWVyZWQoSlNWYWx1ZSB2YWx1ZSkKK3sK
KyAgICBpZiAodmFsdWUuaXNDZWxsKCkpCisgICAgICAgIGFwcGVuZFVuYmFycmllcmVkKHZhbHVl
LmFzQ2VsbCgpKTsKK30KKworQUxXQVlTX0lOTElORSB2b2lkIEFic3RyYWN0U2xvdFZpc2l0b3I6
OmFwcGVuZFVuYmFycmllcmVkKEpTVmFsdWUqIHNsb3QsIHNpemVfdCBjb3VudCkKK3sKKyAgICBm
b3IgKHNpemVfdCBpID0gY291bnQ7IGktLTspCisgICAgICAgIGFwcGVuZFVuYmFycmllcmVkKHNs
b3RbaV0pOworfQorCitBTFdBWVNfSU5MSU5FIEhlYXBDZWxsKiBBYnN0cmFjdFNsb3RWaXNpdG9y
OjpwYXJlbnRDZWxsKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fY29udGV4dCkKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIG1fY29udGV4dC0+Y2VsbCgpOworfQorCitBTFdBWVNf
SU5MSU5FIHZvaWQgQWJzdHJhY3RTbG90VmlzaXRvcjo6cmVzZXQoKQoreworICAgIG1fdmlzaXRD
b3VudCA9IDA7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvSGFuZGxlU2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9IYW5kbGVTZXQuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9IYW5kbGVTZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMS0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTYsNyAr
NTYsNyBAQCB2b2lkIEhhbmRsZVNldDo6Z3JvdygpCiAgICAgfQogfQogCi12b2lkIEhhbmRsZVNl
dDo6dmlzaXRTdHJvbmdIYW5kbGVzKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBIYW5kbGVT
ZXQ6OnZpc2l0U3Ryb25nSGFuZGxlcyhBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewog
ICAgIE5vZGUqIGVuZCA9IG1fc3Ryb25nTGlzdC5lbmQoKTsKICAgICBmb3IgKE5vZGUqIG5vZGUg
PSBtX3N0cm9uZ0xpc3QuYmVnaW4oKTsgbm9kZSAhPSBlbmQ7IG5vZGUgPSBub2RlLT5uZXh0KCkp
IHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hhbmRsZVNldC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hhbmRsZVNldC5oCShyZXZpc2lvbiAy
NzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IYW5kbGVTZXQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxOSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTM1LDEwICszNSwxMCBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAorY2xhc3Mg
QWJzdHJhY3RTbG90VmlzaXRvcjsKIGNsYXNzIEhhbmRsZVNldDsKIGNsYXNzIFZNOwogY2xhc3Mg
SlNWYWx1ZTsKLWNsYXNzIFNsb3RWaXNpdG9yOwogCiBjbGFzcyBIYW5kbGVOb2RlIHsKIHB1Ymxp
YzoKQEAgLTczLDcgKzczLDcgQEAgcHVibGljOgogICAgIEhhbmRsZVNsb3QgYWxsb2NhdGUoKTsK
ICAgICB2b2lkIGRlYWxsb2NhdGUoSGFuZGxlU2xvdCk7CiAKLSAgICB2b2lkIHZpc2l0U3Ryb25n
SGFuZGxlcyhTbG90VmlzaXRvciYpOworICAgIHZvaWQgdmlzaXRTdHJvbmdIYW5kbGVzKEFic3Ry
YWN0U2xvdFZpc2l0b3ImKTsKIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgd3JpdGVCYXJy
aWVyKEhhbmRsZVNsb3QsIGNvbnN0IEpTVmFsdWUmKTsKIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvSGVhcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvSGVhcC5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0hlYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Miw2ICs3Miw3IEBACiAjaW5jbHVk
ZSAiVHlwZVByb2ZpbGVyLmgiCiAjaW5jbHVkZSAiVHlwZVByb2ZpbGVyTG9nLmgiCiAjaW5jbHVk
ZSAiVk0uaCIKKyNpbmNsdWRlICJWZXJpZmllclNsb3RWaXNpdG9ySW5saW5lcy5oIgogI2luY2x1
ZGUgIldlYWtNYXBJbXBsSW5saW5lcy5oIgogI2luY2x1ZGUgIldlYWtTZXRJbmxpbmVzLmgiCiAj
aW5jbHVkZSA8YWxnb3JpdGhtPgpAQCAtNjQ0LDE4ICs2NDUsMTggQEAgdm9pZCBIZWFwOjpjb21w
bGV0ZUFsbEpJVFBsYW5zKCkKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KLXZvaWQgSGVh
cDo6aXRlcmF0ZUV4ZWN1dGluZ0FuZENvbXBpbGluZ0NvZGVCbG9ja3MoY29uc3QgRnVuYyYgZnVu
YykKK3ZvaWQgSGVhcDo6aXRlcmF0ZUV4ZWN1dGluZ0FuZENvbXBpbGluZ0NvZGVCbG9ja3MoQWJz
dHJhY3RTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgRnVuYyYgZnVuYykKIHsKICAgICBtX2Nv
ZGVCbG9ja3MtPml0ZXJhdGVDdXJyZW50bHlFeGVjdXRpbmcoZnVuYyk7CiAgICAgaWYgKE9wdGlv
bnM6OnVzZUpJVCgpKQotICAgICAgICBERkc6Oml0ZXJhdGVDb2RlQmxvY2tzRm9yR0MobV92bSwg
ZnVuYyk7CisgICAgICAgIERGRzo6aXRlcmF0ZUNvZGVCbG9ja3NGb3JHQyh2aXNpdG9yLCBtX3Zt
LCBmdW5jKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KLXZvaWQgSGVhcDo6aXRlcmF0
ZUV4ZWN1dGluZ0FuZENvbXBpbGluZ0NvZGVCbG9ja3NXaXRob3V0SG9sZGluZ0xvY2tzKGNvbnN0
IEZ1bmMmIGZ1bmMpCit2b2lkIEhlYXA6Oml0ZXJhdGVFeGVjdXRpbmdBbmRDb21waWxpbmdDb2Rl
QmxvY2tzV2l0aG91dEhvbGRpbmdMb2NrcyhBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBj
b25zdCBGdW5jJiBmdW5jKQogewogICAgIFZlY3RvcjxDb2RlQmxvY2sqLCAyNTY+IGNvZGVCbG9j
a3M7Ci0gICAgaXRlcmF0ZUV4ZWN1dGluZ0FuZENvbXBpbGluZ0NvZGVCbG9ja3MoCisgICAgaXRl
cmF0ZUV4ZWN1dGluZ0FuZENvbXBpbGluZ0NvZGVCbG9ja3ModmlzaXRvciwKICAgICAgICAgWyZd
IChDb2RlQmxvY2sqIGNvZGVCbG9jaykgewogICAgICAgICAgICAgY29kZUJsb2Nrcy5hcHBlbmQo
Y29kZUJsb2NrKTsKICAgICAgICAgfSk7CkBAIC03MzMsMTQgKzczNCw2IEBAIHZvaWQgSGVhcDo6
cmVtb3ZlRGVhZENvbXBpbGVyV29ya2xpc3RFbnQKICNlbmRpZgogfQogCi1ib29sIEhlYXA6Omlz
QW5hbHl6aW5nSGVhcCgpIGNvbnN0Ci17Ci0gICAgSGVhcFByb2ZpbGVyKiBoZWFwUHJvZmlsZXIg
PSBtX3ZtLmhlYXBQcm9maWxlcigpOwotICAgIGlmIChVTkxJS0VMWShoZWFwUHJvZmlsZXIpKQot
ICAgICAgICByZXR1cm4gaGVhcFByb2ZpbGVyLT5hY3RpdmVIZWFwQW5hbHl6ZXIoKTsKLSAgICBy
ZXR1cm4gZmFsc2U7Ci19Ci0KIHN0cnVjdCBHYXRoZXJFeHRyYUhlYXBEYXRhIDogTWFya2VkQmxv
Y2s6OkNvdW50RnVuY3RvciB7CiAgICAgR2F0aGVyRXh0cmFIZWFwRGF0YShWTSYgdm0sIEhlYXBB
bmFseXplciYgYW5hbHl6ZXIpCiAgICAgICAgIDogbV92bSh2bSkKQEAgLTE0ODUsMTQgKzE0Nzgs
MjEgQEAgTkVWRVJfSU5MSU5FIGJvb2wgSGVhcDo6cnVuRW5kUGhhc2UoR0NDbwogICAgIH0KICAg
ICBtX2hlbHBlckNsaWVudC5maW5pc2goKTsKICAgICAKLSAgICBpdGVyYXRlRXhlY3V0aW5nQW5k
Q29tcGlsaW5nQ29kZUJsb2NrcygKKyAgICBBU1NFUlQobV9tdXRhdG9yTWFya1N0YWNrLT5pc0Vt
cHR5KCkpOworICAgIEFTU0VSVChtX3JhY2VNYXJrU3RhY2stPmlzRW1wdHkoKSk7CisKKyAgICBT
bG90VmlzaXRvciYgdmlzaXRvciA9ICptX2NvbGxlY3RvclNsb3RWaXNpdG9yOworICAgIGl0ZXJh
dGVFeGVjdXRpbmdBbmRDb21waWxpbmdDb2RlQmxvY2tzKHZpc2l0b3IsCiAgICAgICAgIFsmXSAo
Q29kZUJsb2NrKiBjb2RlQmxvY2spIHsKICAgICAgICAgICAgIHdyaXRlQmFycmllcihjb2RlQmxv
Y2spOwogICAgICAgICB9KTsKLSAgICAgICAgCisKICAgICB1cGRhdGVPYmplY3RDb3VudHMoKTsK
ICAgICBlbmRNYXJraW5nKCk7CiAKKyAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6dmVyaWZ5R0Mo
KSkpCisgICAgICAgIHZlcmlmeUdDKCk7CisKICAgICBpZiAoVU5MSUtFTFkobV92ZXJpZmllcikp
IHsKICAgICAgICAgbV92ZXJpZmllci0+Z2F0aGVyTGl2ZUNlbGxzKEhlYXBWZXJpZmllcjo6UGhh
c2U6OkFmdGVyTWFya2luZyk7CiAgICAgICAgIG1fdmVyaWZpZXItPnZlcmlmeShIZWFwVmVyaWZp
ZXI6OlBoYXNlOjpBZnRlck1hcmtpbmcpOwpAQCAtMjE3MCw2ICsyMTcwLDExIEBAIHZvaWQgSGVh
cDo6c3VzcGVuZENvbXBpbGVyVGhyZWFkcygpCiAKIHZvaWQgSGVhcDo6d2lsbFN0YXJ0Q29sbGVj
dGlvbigpCiB7CisgICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OnZlcmlmeUdDKCkpKSB7CisgICAg
ICAgIG1fdmVyaWZpZXJTbG90VmlzaXRvciA9IG1ha2VVbmlxdWU8VmVyaWZpZXJTbG90VmlzaXRv
cj4oKnRoaXMpOworICAgICAgICBBU1NFUlQoIW1faXNNYXJraW5nRm9yR0NWZXJpZmllcik7Cisg
ICAgfQorCiAgICAgZGF0YUxvZ0lmKE9wdGlvbnM6OmxvZ0dDKCksICI9PiAiKTsKICAgICAKICAg
ICBpZiAoc2hvdWxkRG9GdWxsQ29sbGVjdGlvbigpKSB7CkBAIC0yNzAxLDkgKzI3MDYsMTQgQEAg
dm9pZCBIZWFwOjphZGRDb3JlQ29uc3RyYWludHMoKQogewogICAgIG1fY29uc3RyYWludFNldC0+
YWRkKAogICAgICAgICAiQ3MiLCAiQ29uc2VydmF0aXZlIFNjYW4iLAotICAgICAgICBbdGhpcywg
bGFzdFZlcnNpb24gPSBzdGF0aWNfY2FzdDx1aW50NjRfdD4oMCldIChTbG90VmlzaXRvciYgdmlz
aXRvcikgbXV0YWJsZSB7CisgICAgICAgIFt0aGlzLCBsYXN0VmVyc2lvbiA9IHN0YXRpY19jYXN0
PHVpbnQ2NF90PigwKV0gKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpIG11dGFibGUgewog
ICAgICAgICAgICAgYm9vbCBzaG91bGROb3RQcm9kdWNlV29yayA9IGxhc3RWZXJzaW9uID09IG1f
cGhhc2VWZXJzaW9uOwotICAgICAgICAgICAgaWYgKHNob3VsZE5vdFByb2R1Y2VXb3JrKQorCisg
ICAgICAgICAgICAvLyBGb3IgdGhlIEdDIFZlcmZpZXIsIHdlIHdvdWxkIGxpa2UgdG8gdXNlIHRo
ZSBpZGVudGljYWwgc2V0IG9mIGNvbnNlcnZhdGl2ZSByb290cworICAgICAgICAgICAgLy8gYXMg
dGhlIHJlYWwgR0MuIE90aGVyd2lzZSwgdGhlIEdDIHZlcmlmaWVyIG1heSByZXBvcnQgZmFsc2Ug
bmVnYXRpdmVzIGR1ZSB0bworICAgICAgICAgICAgLy8gdmFyaWF0aW9ucyBpbiBzdGFjayB2YWx1
ZXMuIEZvciB0aGlzIHNhbWUgcmVhc29uLCB3ZSB3aWxsIHNraXAgdGhpcyBjb25zdHJhaW50Cisg
ICAgICAgICAgICAvLyB3aGVuIHdlJ3JlIHJ1bm5pbmcgdGhlIEdDIHZlcmlmaWNhdGlvbiBpbiB0
aGUgRW5kIHBoYXNlLgorICAgICAgICAgICAgaWYgKHNob3VsZE5vdFByb2R1Y2VXb3JrIHx8IG1f
aXNNYXJraW5nRm9yR0NWZXJpZmllcikKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
ICAgICAKICAgICAgICAgICAgIFRpbWluZ1Njb3BlIHByZUNvbnZlcmdlbmNlVGltaW5nU2NvcGUo
KnRoaXMsICJDb25zdHJhaW50OiBjb25zZXJ2YXRpdmUgc2NhbiIpOwpAQCAtMjcyMCwxMSArMjcz
MCwxNSBAQCB2b2lkIEhlYXA6OmFkZENvcmVDb25zdHJhaW50cygpCiAKICAgICAgICAgICAgICAg
ICBTZXRSb290TWFya1JlYXNvblNjb3BlIHJvb3RTY29wZSh2aXNpdG9yLCBSb290TWFya1JlYXNv
bjo6Q29uc2VydmF0aXZlU2Nhbik7CiAgICAgICAgICAgICAgICAgdmlzaXRvci5hcHBlbmQoY29u
c2VydmF0aXZlUm9vdHMpOworICAgICAgICAgICAgICAgIGlmIChVTkxJS0VMWShtX3ZlcmlmaWVy
U2xvdFZpc2l0b3IpKQorICAgICAgICAgICAgICAgICAgICBtX3ZlcmlmaWVyU2xvdFZpc2l0b3It
PmFwcGVuZChjb25zZXJ2YXRpdmVSb290cyk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBp
ZiAoT3B0aW9uczo6dXNlSklUKCkpIHsKICAgICAgICAgICAgICAgICAvLyBKSVRTdHViUm91dGlu
ZXMgbXVzdCBiZSB2aXNpdGVkIGFmdGVyIHNjYW5uaW5nIENvbnNlcnZhdGl2ZVJvb3RzIHNpbmNl
IEpJVFN0dWJSb3V0aW5lcyBkZXBlbmQgb24gdGhlIGhvb2sgZXhlY3V0ZWQgZHVyaW5nIGdhdGhl
cmluZyBDb25zZXJ2YXRpdmVSb290cy4KICAgICAgICAgICAgICAgICBTZXRSb290TWFya1JlYXNv
blNjb3BlIHJvb3RTY29wZSh2aXNpdG9yLCBSb290TWFya1JlYXNvbjo6SklUU3R1YlJvdXRpbmVz
KTsKICAgICAgICAgICAgICAgICBtX2ppdFN0dWJSb3V0aW5lcy0+dHJhY2VNYXJrZWRTdHViUm91
dGluZXModmlzaXRvcik7CisgICAgICAgICAgICAgICAgaWYgKFVOTElLRUxZKG1fdmVyaWZpZXJT
bG90VmlzaXRvcikpCisgICAgICAgICAgICAgICAgICAgIG1faml0U3R1YlJvdXRpbmVzLT50cmFj
ZU1hcmtlZFN0dWJSb3V0aW5lcygqbV92ZXJpZmllclNsb3RWaXNpdG9yKTsKICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIAogICAgICAgICAgICAgbGFzdFZlcnNpb24gPSBtX3BoYXNlVmVyc2lv
bjsKQEAgLTI3MzMsOCArMjc0Nyw3IEBAIHZvaWQgSGVhcDo6YWRkQ29yZUNvbnN0cmFpbnRzKCkK
ICAgICAKICAgICBtX2NvbnN0cmFpbnRTZXQtPmFkZCgKICAgICAgICAgIk1zciIsICJNaXNjIFNt
YWxsIFJvb3RzIiwKLSAgICAgICAgW3RoaXNdIChTbG90VmlzaXRvciYgdmlzaXRvcikgewotCisg
ICAgICAgIFt0aGlzXSAoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikgewogI2lmIEpTQ19P
QkpDX0FQSV9FTkFCTEVECiAgICAgICAgICAgICBzY2FuRXh0ZXJuYWxSZW1lbWJlcmVkU2V0KG1f
dm0sIHZpc2l0b3IpOwogI2VuZGlmCkBAIC0yNzY4LDcgKzI3ODEsNyBAQCB2b2lkIEhlYXA6OmFk
ZENvcmVDb25zdHJhaW50cygpCiAgICAgCiAgICAgbV9jb25zdHJhaW50U2V0LT5hZGQoCiAgICAg
ICAgICJTaCIsICJTdHJvbmcgSGFuZGxlcyIsCi0gICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3Im
IHZpc2l0b3IpIHsKKyAgICAgICAgW3RoaXNdIChBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9y
KSB7CiAgICAgICAgICAgICBTZXRSb290TWFya1JlYXNvblNjb3BlIHJvb3RTY29wZSh2aXNpdG9y
LCBSb290TWFya1JlYXNvbjo6U3Ryb25nSGFuZGxlcyk7CiAgICAgICAgICAgICBtX2hhbmRsZVNl
dC52aXNpdFN0cm9uZ0hhbmRsZXModmlzaXRvcik7CiAgICAgICAgIH0sCkBAIC0yNzc2LDcgKzI3
ODksNyBAQCB2b2lkIEhlYXA6OmFkZENvcmVDb25zdHJhaW50cygpCiAgICAgCiAgICAgbV9jb25z
dHJhaW50U2V0LT5hZGQoCiAgICAgICAgICJEIiwgIkRlYnVnZ2VyIiwKLSAgICAgICAgW3RoaXNd
IChTbG90VmlzaXRvciYgdmlzaXRvcikgeworICAgICAgICBbdGhpc10gKEFic3RyYWN0U2xvdFZp
c2l0b3ImIHZpc2l0b3IpIHsKICAgICAgICAgICAgIFNldFJvb3RNYXJrUmVhc29uU2NvcGUgcm9v
dFNjb3BlKHZpc2l0b3IsIFJvb3RNYXJrUmVhc29uOjpEZWJ1Z2dlcik7CiAKICNpZiBFTkFCTEUo
U0FNUExJTkdfUFJPRklMRVIpCkBAIC0yNzk5LDcgKzI4MTIsNyBAQCB2b2lkIEhlYXA6OmFkZENv
cmVDb25zdHJhaW50cygpCiAgICAgCiAgICAgbV9jb25zdHJhaW50U2V0LT5hZGQoCiAgICAgICAg
ICJXcyIsICJXZWFrIFNldHMiLAotICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiB2aXNpdG9y
KSB7CisgICAgICAgIFt0aGlzXSAoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikgewogICAg
ICAgICAgICAgU2V0Um9vdE1hcmtSZWFzb25TY29wZSByb290U2NvcGUodmlzaXRvciwgUm9vdE1h
cmtSZWFzb246OldlYWtTZXRzKTsKICAgICAgICAgICAgIG1fb2JqZWN0U3BhY2UudmlzaXRXZWFr
U2V0cyh2aXNpdG9yKTsKICAgICAgICAgfSwKQEAgLTI4MDcsMTAgKzI4MjAsMTAgQEAgdm9pZCBI
ZWFwOjphZGRDb3JlQ29uc3RyYWludHMoKQogICAgIAogICAgIG1fY29uc3RyYWludFNldC0+YWRk
KAogICAgICAgICAiTyIsICJPdXRwdXQiLAotICAgICAgICBbXSAoU2xvdFZpc2l0b3ImIHZpc2l0
b3IpIHsKKyAgICAgICAgW10gKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsKICAgICAg
ICAgICAgIFZNJiB2bSA9IHZpc2l0b3Iudm0oKTsKIAotICAgICAgICAgICAgYXV0byBjYWxsT3V0
cHV0Q29uc3RyYWludCA9IFtdIChTbG90VmlzaXRvciYgdmlzaXRvciwgSGVhcENlbGwqIGhlYXBD
ZWxsLCBIZWFwQ2VsbDo6S2luZCkgeworICAgICAgICAgICAgYXV0byBjYWxsT3V0cHV0Q29uc3Ry
YWludCA9IFtdIChBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBIZWFwQ2VsbCogaGVhcENl
bGwsIEhlYXBDZWxsOjpLaW5kKSB7CiAgICAgICAgICAgICAgICAgU2V0Um9vdE1hcmtSZWFzb25T
Y29wZSByb290U2NvcGUodmlzaXRvciwgUm9vdE1hcmtSZWFzb246Ok91dHB1dCk7CiAgICAgICAg
ICAgICAgICAgVk0mIHZtID0gdmlzaXRvci52bSgpOwogICAgICAgICAgICAgICAgIEpTQ2VsbCog
Y2VsbCA9IHN0YXRpY19jYXN0PEpTQ2VsbCo+KGhlYXBDZWxsKTsKQEAgLTI4MzIsNyArMjg0NSw3
IEBAIHZvaWQgSGVhcDo6YWRkQ29yZUNvbnN0cmFpbnRzKCkKICAgICBpZiAoT3B0aW9uczo6dXNl
SklUKCkpIHsKICAgICAgICAgbV9jb25zdHJhaW50U2V0LT5hZGQoCiAgICAgICAgICAgICAiRHci
LCAiREZHIFdvcmtsaXN0cyIsCi0gICAgICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiB2aXNp
dG9yKSB7CisgICAgICAgICAgICBbdGhpc10gKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3Ip
IHsKICAgICAgICAgICAgICAgICBTZXRSb290TWFya1JlYXNvblNjb3BlIHJvb3RTY29wZSh2aXNp
dG9yLCBSb290TWFya1JlYXNvbjo6REZHV29ya0xpc3RzKTsKIAogICAgICAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IERGRzo6bnVtYmVyT2ZXb3JrbGlzdHMoKTsgaS0tOykKQEAgLTI4NDAs
NyArMjg1Myw3IEBAIHZvaWQgSGVhcDo6YWRkQ29yZUNvbnN0cmFpbnRzKCkKICAgICAgICAgICAg
ICAgICAKICAgICAgICAgICAgICAgICAvLyBGSVhNRTogVGhpcyBpcyBhbG1vc3QgY2VydGFpbmx5
IHVubmVjZXNzYXJ5LgogICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNjY4MjkKLSAgICAgICAgICAgICAgICBERkc6Oml0ZXJhdGVDb2Rl
QmxvY2tzRm9yR0MoCisgICAgICAgICAgICAgICAgREZHOjppdGVyYXRlQ29kZUJsb2Nrc0ZvckdD
KHZpc2l0b3IsCiAgICAgICAgICAgICAgICAgICAgIG1fdm0sCiAgICAgICAgICAgICAgICAgICAg
IFsmXSAoQ29kZUJsb2NrKiBjb2RlQmxvY2spIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHZp
c2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQoY29kZUJsb2NrKTsKQEAgLTI4NTUsMTIgKzI4NjgsMTIg
QEAgdm9pZCBIZWFwOjphZGRDb3JlQ29uc3RyYWludHMoKQogICAgIAogICAgIG1fY29uc3RyYWlu
dFNldC0+YWRkKAogICAgICAgICAiQ2IiLCAiQ29kZUJsb2NrcyIsCi0gICAgICAgIFt0aGlzXSAo
U2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsKKyAgICAgICAgW3RoaXNdIChBYnN0cmFjdFNsb3RWaXNp
dG9yJiB2aXNpdG9yKSB7CiAgICAgICAgICAgICBTZXRSb290TWFya1JlYXNvblNjb3BlIHJvb3RT
Y29wZSh2aXNpdG9yLCBSb290TWFya1JlYXNvbjo6Q29kZUJsb2Nrcyk7Ci0gICAgICAgICAgICBp
dGVyYXRlRXhlY3V0aW5nQW5kQ29tcGlsaW5nQ29kZUJsb2Nrc1dpdGhvdXRIb2xkaW5nTG9ja3Mo
CisgICAgICAgICAgICBpdGVyYXRlRXhlY3V0aW5nQW5kQ29tcGlsaW5nQ29kZUJsb2Nrc1dpdGhv
dXRIb2xkaW5nTG9ja3ModmlzaXRvciwKICAgICAgICAgICAgICAgICBbJl0gKENvZGVCbG9jayog
Y29kZUJsb2NrKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIFZpc2l0IHRoZSBDb2RlQmxvY2sg
YXMgYSBjb25zdHJhaW50IG9ubHkgaWYgaXQncyBibGFjay4KLSAgICAgICAgICAgICAgICAgICAg
aWYgKGlzTWFya2VkKGNvZGVCbG9jaykKKyAgICAgICAgICAgICAgICAgICAgaWYgKHZpc2l0b3Iu
aXNNYXJrZWQoY29kZUJsb2NrKQogICAgICAgICAgICAgICAgICAgICAgICAgJiYgY29kZUJsb2Nr
LT5jZWxsU3RhdGUoKSA9PSBDZWxsU3RhdGU6OlBvc3NpYmx5QmxhY2spCiAgICAgICAgICAgICAg
ICAgICAgICAgICB2aXNpdG9yLnZpc2l0QXNDb25zdHJhaW50KGNvZGVCbG9jayk7CiAgICAgICAg
ICAgICAgICAgfSk7CkBAIC0zMDIzLDQgKzMwMzYsMzMgQEAgdm9pZCBIZWFwOjpydW5UYXNrSW5Q
YXJhbGxlbChSZWZQdHI8U2hhcgogICAgIH0KIH0KIAordm9pZCBIZWFwOjp2ZXJpZnlHQygpCit7
CisgICAgUkVMRUFTRV9BU1NFUlQobV92ZXJpZmllclNsb3RWaXNpdG9yKTsKKyAgICBSRUxFQVNF
X0FTU0VSVCghbV9pc01hcmtpbmdGb3JHQ1ZlcmlmaWVyKTsKKyAgICBtX2lzTWFya2luZ0ZvckdD
VmVyaWZpZXIgPSB0cnVlOworCisgICAgVmVyaWZpZXJTbG90VmlzaXRvciYgdmlzaXRvciA9ICpt
X3ZlcmlmaWVyU2xvdFZpc2l0b3I7CisKKyAgICBkbyB7CisgICAgICAgIHZpc2l0b3IuZHJhaW4o
KTsKKyAgICAgICAgbV9jb25zdHJhaW50U2V0LT5leGVjdXRlQWxsU3luY2hyb25vdXNseSh2aXNp
dG9yKTsKKyAgICAgICAgdmlzaXRvci5leGVjdXRlQ29uc3RyYWludFRhc2tzKCk7CisgICAgfSB3
aGlsZSAoIXZpc2l0b3IuaXNFbXB0eSgpKTsKKworICAgIG1faXNNYXJraW5nRm9yR0NWZXJpZmll
ciA9IGZhbHNlOworCisgICAgdmlzaXRvci5mb3JFYWNoTGl2ZUNlbGwoWyZdIChIZWFwQ2VsbCog
Y2VsbCkgeworICAgICAgICBpZiAoSGVhcDo6aXNNYXJrZWQoY2VsbCkpCisgICAgICAgICAgICBy
ZXR1cm47CisKKyAgICAgICAgZGF0YUxvZ0xuKCJcbiIgIkdDIFZlcmlmaWVyOiBFUlJPUiBjZWxs
ICIsIFJhd1BvaW50ZXIoY2VsbCksICIgd2FzIG5vdCBtYXJrZWQiKTsKKyAgICAgICAgaWYgKFVO
TElLRUxZKE9wdGlvbnM6OnZlcmJvc2VWZXJpZnlHQygpKSkKKyAgICAgICAgICAgIHZpc2l0b3Iu
ZHVtcE1hcmtlckRhdGEoY2VsbCk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKHRoaXMtPmlzTWFy
a2VkKGNlbGwpKTsKKyAgICB9KTsKKworICAgIG1fdmVyaWZpZXJTbG90VmlzaXRvciA9IG51bGxw
dHI7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvSGVhcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hl
YXAuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVh
cC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMp
IDE5OTktMjAwMCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQogICogIENvcHlyaWdodCAo
QykgMjAwMSBQZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQotICogIENvcHlyaWdodCAoQykgMjAw
My0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMp
IDIwMDMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
ICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwg
UHVibGljCkBAIC04Niw2ICs4Niw3IEBAIGNsYXNzIFNwYWNlVGltZU11dGF0b3JTY2hlZHVsZXI7
CiBjbGFzcyBTdG9wSWZOZWNlc3NhcnlUaW1lcjsKIGNsYXNzIFN3ZWVwaW5nU2NvcGU7CiBjbGFz
cyBWTTsKK2NsYXNzIFZlcmlmaWVyU2xvdFZpc2l0b3I7CiBjbGFzcyBXZWFrR0NNYXBCYXNlOwog
c3RydWN0IEN1cnJlbnRUaHJlYWRTdGF0ZTsKIApAQCAtMTg0LDggKzE4NSw2IEBAIHB1YmxpYzoK
ICAgICAKICAgICBib29sIGlzU2h1dHRpbmdEb3duKCkgY29uc3QgeyByZXR1cm4gbV9pc1NodXR0
aW5nRG93bjsgfQogCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBpc0FuYWx5emluZ0hlYXAo
KSBjb25zdDsKLQogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgc3dlZXBTeW5jaHJvbm91c2x5
KCk7CiAKICAgICBib29sIHNob3VsZENvbGxlY3RIZXVyaXN0aWMoKTsKQEAgLTM4NSw4ICszODQs
NiBAQCBwdWJsaWM6CiAgICAgCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBhZGRNYXJraW5n
Q29uc3RyYWludChzdGQ6OnVuaXF1ZV9wdHI8TWFya2luZ0NvbnN0cmFpbnQ+KTsKICAgICAKLSAg
ICBzaXplX3QgbnVtT3BhcXVlUm9vdHMoKSBjb25zdCB7IHJldHVybiBtX29wYXF1ZVJvb3RzLnNp
emUoKTsgfQotCiAgICAgSGVhcFZlcmlmaWVyKiB2ZXJpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1f
dmVyaWZpZXIuZ2V0KCk7IH0KICAgICAKICAgICB2b2lkIGFkZEhlYXBGaW5hbGl6ZXJDYWxsYmFj
ayhjb25zdCBIZWFwRmluYWxpemVyQ2FsbGJhY2smKTsKQEAgLTU3NiwxMCArNTczLDEwIEBAIHBy
aXZhdGU6CiAgICAgYm9vbCBvdmVyQ3JpdGljYWxNZW1vcnlUaHJlc2hvbGQoTWVtb3J5VGhyZXNo
b2xkQ2FsbFR5cGUgbWVtb3J5VGhyZXNob2xkQ2FsbFR5cGUgPSBNZW1vcnlUaHJlc2hvbGRDYWxs
VHlwZTo6Q2FjaGVkKTsKICAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgotICAgIHZv
aWQgaXRlcmF0ZUV4ZWN1dGluZ0FuZENvbXBpbGluZ0NvZGVCbG9ja3MoY29uc3QgRnVuYyYpOwor
ICAgIHZvaWQgaXRlcmF0ZUV4ZWN1dGluZ0FuZENvbXBpbGluZ0NvZGVCbG9ja3MoQWJzdHJhY3RT
bG90VmlzaXRvciYsIGNvbnN0IEZ1bmMmKTsKICAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBG
dW5jPgotICAgIHZvaWQgaXRlcmF0ZUV4ZWN1dGluZ0FuZENvbXBpbGluZ0NvZGVCbG9ja3NXaXRo
b3V0SG9sZGluZ0xvY2tzKGNvbnN0IEZ1bmMmKTsKKyAgICB2b2lkIGl0ZXJhdGVFeGVjdXRpbmdB
bmRDb21waWxpbmdDb2RlQmxvY2tzV2l0aG91dEhvbGRpbmdMb2NrcyhBYnN0cmFjdFNsb3RWaXNp
dG9yJiwgY29uc3QgRnVuYyYpOwogICAgIAogICAgIHZvaWQgYXNzZXJ0TWFya1N0YWNrc0VtcHR5
KCk7CiAKQEAgLTU5MCw2ICs1ODcsOCBAQCBwcml2YXRlOgogICAgIHN0YXRpYyBib29sIHVzZUdl
bmVyYXRpb25hbEdDKCk7CiAgICAgc3RhdGljIGJvb2wgc2hvdWxkU3dlZXBTeW5jaHJvbm91c2x5
KCk7CiAgICAgCisgICAgdm9pZCB2ZXJpZnlHQygpOworCiAgICAgY29uc3QgSGVhcFR5cGUgbV9o
ZWFwVHlwZTsKICAgICBNdXRhdG9yU3RhdGUgbV9tdXRhdG9yU3RhdGUgeyBNdXRhdG9yU3RhdGU6
OlJ1bm5pbmcgfTsKICAgICBjb25zdCBzaXplX3QgbV9yYW1TaXplOwpAQCAtNjM2LDYgKzYzNSw3
IEBAIHByaXZhdGU6CiAgICAgc3RkOjp1bmlxdWVfcHRyPE1hcmtTdGFja0FycmF5PiBtX211dGF0
b3JNYXJrU3RhY2s7CiAgICAgc3RkOjp1bmlxdWVfcHRyPE1hcmtTdGFja0FycmF5PiBtX3JhY2VN
YXJrU3RhY2s7CiAgICAgc3RkOjp1bmlxdWVfcHRyPE1hcmtpbmdDb25zdHJhaW50U2V0PiBtX2Nv
bnN0cmFpbnRTZXQ7CisgICAgc3RkOjp1bmlxdWVfcHRyPFZlcmlmaWVyU2xvdFZpc2l0b3I+IG1f
dmVyaWZpZXJTbG90VmlzaXRvcjsKIAogICAgIC8vIFdlIHBvb2wgdGhlIHNsb3QgdmlzaXRvcnMg
dXNlZCBieSBwYXJhbGxlbCBtYXJraW5nIHRocmVhZHMuIEl0J3MgdXNlZnVsIHRvIGJlIGFibGUg
dG8KICAgICAvLyBlbnVtZXJhdGUgb3ZlciB0aGVtLCBhbmQgaXQncyB1c2VmdWwgdG8gaGF2ZSB0
aGVtIGNhY2hlIHNvbWUgc21hbGwgYW1vdW50IG9mIG1lbW9yeSBmcm9tCkBAIC02NTQsNiArNjU0
LDcgQEAgcHJpdmF0ZToKICAgICBib29sIG1faXNTYWZlVG9Db2xsZWN0IHsgZmFsc2UgfTsKICAg
ICBib29sIG1faXNTaHV0dGluZ0Rvd24geyBmYWxzZSB9OwogICAgIGJvb2wgbV9tdXRhdG9yU2hv
dWxkQmVGZW5jZWQgeyBPcHRpb25zOjpmb3JjZUZlbmNlZEJhcnJpZXIoKSB9OworICAgIGJvb2wg
bV9pc01hcmtpbmdGb3JHQ1ZlcmlmaWVyIHsgZmFsc2UgfTsKIAogICAgIHVuc2lnbmVkIG1fYmFy
cmllclRocmVzaG9sZCB7IE9wdGlvbnM6OmZvcmNlRmVuY2VkQmFycmllcigpID8gdGF1dG9sb2dp
Y2FsVGhyZXNob2xkIDogYmxhY2tUaHJlc2hvbGQgfTsKIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvSGVhcElubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9IZWFwSW5saW5lcy5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9IZWFwSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC02OSw2ICs2
OSw3IEBAIGlubGluZSBib29sIEhlYXA6OndvcmxkSXNTdG9wcGVkKCkgY29uc3QKIAogQUxXQVlT
X0lOTElORSBib29sIEhlYXA6OmlzTWFya2VkKGNvbnN0IHZvaWQqIHJhd0NlbGwpCiB7CisgICAg
QVNTRVJUKCFtX2lzTWFya2luZ0ZvckdDVmVyaWZpZXIpOwogICAgIEhlYXBDZWxsKiBjZWxsID0g
Yml0d2lzZV9jYXN0PEhlYXBDZWxsKj4ocmF3Q2VsbCk7CiAgICAgaWYgKGNlbGwtPmlzUHJlY2lz
ZUFsbG9jYXRpb24oKSkKICAgICAgICAgcmV0dXJuIGNlbGwtPnByZWNpc2VBbGxvY2F0aW9uKCku
aXNNYXJrZWQoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBQcm9maWxl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcFByb2Zp
bGVyLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
SGVhcFByb2ZpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02MCw2ICs2MCw3IEBAIHZvaWQgSGVhcFBy
b2ZpbGVyOjpzZXRBY3RpdmVIZWFwQW5hbHl6ZXIKIHsKICAgICBBU1NFUlQoISFtX2FjdGl2ZUFu
YWx5emVyICE9ICEhYW5hbHl6ZXIpOwogICAgIG1fYWN0aXZlQW5hbHl6ZXIgPSBhbmFseXplcjsK
KyAgICBtX3ZtLnNldEFjdGl2ZUhlYXBBbmFseXplcihhbmFseXplcik7CiB9CiAKIH0gLy8gbmFt
ZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvQ2VsbFNldC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0lzb0NlbGxTZXQuaAko
cmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvQ2VsbFNl
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTM0LDYgKzM0LDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKK2Ns
YXNzIEFic3RyYWN0U2xvdFZpc2l0b3I7CiBjbGFzcyBIZWFwQ2VsbDsKIGNsYXNzIElzb1N1YnNw
YWNlOwogCkBAIC01OSw3ICs2MCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGZvckVhY2hNYXJrZWRD
ZWxsKGNvbnN0IEZ1bmMmKTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+Ci0gICAgUmVm
PFNoYXJlZFRhc2s8dm9pZChTbG90VmlzaXRvciYpPj4gZm9yRWFjaE1hcmtlZENlbGxJblBhcmFs
bGVsKGNvbnN0IEZ1bmMmKTsKKyAgICBSZWY8U2hhcmVkVGFzazx2b2lkKEFic3RyYWN0U2xvdFZp
c2l0b3ImKT4+IGZvckVhY2hNYXJrZWRDZWxsSW5QYXJhbGxlbChjb25zdCBGdW5jJik7CiAgICAg
CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KICAgICB2b2lkIGZvckVhY2hMaXZlQ2VsbChj
b25zdCBGdW5jJik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Jc29DZWxsU2V0
SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0lzb0Nl
bGxTZXRJbmxpbmVzLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0lzb0NlbGxTZXRJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtOTIsOSArOTIsOSBAQCB2
b2lkIElzb0NlbGxTZXQ6OmZvckVhY2hNYXJrZWRDZWxsKGNvbnN0CiB9CiAKIHRlbXBsYXRlPHR5
cGVuYW1lIEZ1bmM+Ci1SZWY8U2hhcmVkVGFzazx2b2lkKFNsb3RWaXNpdG9yJik+PiBJc29DZWxs
U2V0Ojpmb3JFYWNoTWFya2VkQ2VsbEluUGFyYWxsZWwoY29uc3QgRnVuYyYgZnVuYykKK1JlZjxT
aGFyZWRUYXNrPHZvaWQoQWJzdHJhY3RTbG90VmlzaXRvciYpPj4gSXNvQ2VsbFNldDo6Zm9yRWFj
aE1hcmtlZENlbGxJblBhcmFsbGVsKGNvbnN0IEZ1bmMmIGZ1bmMpCiB7Ci0gICAgY2xhc3MgVGFz
ayBmaW5hbCA6IHB1YmxpYyBTaGFyZWRUYXNrPHZvaWQoU2xvdFZpc2l0b3ImKT4geworICAgIGNs
YXNzIFRhc2sgZmluYWwgOiBwdWJsaWMgU2hhcmVkVGFzazx2b2lkKEFic3RyYWN0U2xvdFZpc2l0
b3ImKT4gewogICAgIHB1YmxpYzoKICAgICAgICAgVGFzayhJc29DZWxsU2V0JiBzZXQsIGNvbnN0
IEZ1bmMmIGZ1bmMpCiAgICAgICAgICAgICA6IG1fc2V0KHNldCkKQEAgLTEwMyw3ICsxMDMsNyBA
QCBSZWY8U2hhcmVkVGFzazx2b2lkKFNsb3RWaXNpdG9yJik+PiBJc29DCiAgICAgICAgIHsKICAg
ICAgICAgfQogICAgICAgICAKLSAgICAgICAgdm9pZCBydW4oU2xvdFZpc2l0b3ImIHZpc2l0b3Ip
IGZpbmFsCisgICAgICAgIHZvaWQgcnVuKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpIGZp
bmFsCiAgICAgICAgIHsKICAgICAgICAgICAgIHdoaWxlIChNYXJrZWRCbG9jazo6SGFuZGxlKiBo
YW5kbGUgPSBtX2Jsb2NrU291cmNlLT5ydW4oKSkgewogICAgICAgICAgICAgICAgIHVuc2lnbmVk
IGJsb2NrSW5kZXggPSBoYW5kbGUtPmluZGV4KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9KSVRTdHViUm91dGluZVNldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvSklUU3R1YlJvdXRpbmVTZXQuY3BwCShyZXZpc2lvbiAyNzI4MzApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9KSVRTdHViUm91dGluZVNldC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMTI4LDcgKzEyOCw3IEBAIHZvaWQgSklUU3R1YlJvdXRpbmVTZXQ6OmRlbGV0ZVVu
bWFya2VkSmUKICAgICBtX3JvdXRpbmVzLnNocmluayhkc3RJbmRleCk7CiB9CiAKLXZvaWQgSklU
U3R1YlJvdXRpbmVTZXQ6OnRyYWNlTWFya2VkU3R1YlJvdXRpbmVzKFNsb3RWaXNpdG9yJiB2aXNp
dG9yKQordm9pZCBKSVRTdHViUm91dGluZVNldDo6dHJhY2VNYXJrZWRTdHViUm91dGluZXMoQWJz
dHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBmb3IgKGF1dG8mIGVudHJ5IDogbV9y
b3V0aW5lcykgewogICAgICAgICBHQ0F3YXJlSklUU3R1YlJvdXRpbmUqIHJvdXRpbmUgPSBlbnRy
eS5yb3V0aW5lOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSklUU3R1YlJvdXRp
bmVTZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9KSVRTdHVi
Um91dGluZVNldC5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9KSVRTdHViUm91dGluZVNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzUsOCArMzUsOCBA
QCB1c2luZyBXVEY6OlJhbmdlOwogCiBuYW1lc3BhY2UgSlNDIHsKIAorY2xhc3MgQWJzdHJhY3RT
bG90VmlzaXRvcjsKIGNsYXNzIEdDQXdhcmVKSVRTdHViUm91dGluZTsKLWNsYXNzIFNsb3RWaXNp
dG9yOwogCiAjaWYgRU5BQkxFKEpJVCkKIApAQCAtNjMsOCArNjMsOCBAQCBwdWJsaWM6CiAgICAg
dm9pZCBwcmVwYXJlRm9yQ29uc2VydmF0aXZlU2NhbigpOwogICAgIAogICAgIHZvaWQgZGVsZXRl
VW5tYXJrZWRKZXR0aXNvbmVkU3R1YlJvdXRpbmVzKCk7Ci0gICAgCi0gICAgdm9pZCB0cmFjZU1h
cmtlZFN0dWJSb3V0aW5lcyhTbG90VmlzaXRvciYpOworCisgICAgdm9pZCB0cmFjZU1hcmtlZFN0
dWJSb3V0aW5lcyhBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAgICAgCiBwcml2YXRlOgogICAgIHZv
aWQgbWFya1Nsb3codWludHB0cl90IGFkZHJlc3MpOwpAQCAtOTIsNyArOTIsNyBAQCBwdWJsaWM6
CiAgICAgdm9pZCBtYXJrKHZvaWQqKSB7IH0KICAgICB2b2lkIHByZXBhcmVGb3JDb25zZXJ2YXRp
dmVTY2FuKCkgeyB9CiAgICAgdm9pZCBkZWxldGVVbm1hcmtlZEpldHRpc29uZWRTdHViUm91dGlu
ZXMoKSB7IH0KLSAgICB2b2lkIHRyYWNlTWFya2VkU3R1YlJvdXRpbmVzKFNsb3RWaXNpdG9yJikg
eyB9CisgICAgdm9pZCB0cmFjZU1hcmtlZFN0dWJSb3V0aW5lcyhBYnN0cmFjdFNsb3RWaXNpdG9y
JikgeyB9CiB9OwogCiAjZW5kaWYgLy8gIUVOQUJMRShKSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9NYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQu
Y3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJr
U3RhY2tNZXJnaW5nQ29uc3RyYWludC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjUsNyArMjUsNiBAQAog
CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFp
bnQuaCIKLQogI2luY2x1ZGUgIkdDU2VnbWVudGVkQXJyYXlJbmxpbmVzLmgiCiAjaW5jbHVkZSAi
SlNDSW5saW5lcy5oIgogCkBAIC00MSwxMiArNDAsMTIgQEAgTWFya1N0YWNrTWVyZ2luZ0NvbnN0
cmFpbnQ6On5NYXJrU3RhY2tNZQogewogfQogCi1kb3VibGUgTWFya1N0YWNrTWVyZ2luZ0NvbnN0
cmFpbnQ6OnF1aWNrV29ya0VzdGltYXRlKFNsb3RWaXNpdG9yJikKK2RvdWJsZSBNYXJrU3RhY2tN
ZXJnaW5nQ29uc3RyYWludDo6cXVpY2tXb3JrRXN0aW1hdGUoQWJzdHJhY3RTbG90VmlzaXRvciYp
CiB7CiAgICAgcmV0dXJuIG1faGVhcC5tX211dGF0b3JNYXJrU3RhY2stPnNpemUoKSArIG1faGVh
cC5tX3JhY2VNYXJrU3RhY2stPnNpemUoKTsKIH0KIAotdm9pZCBNYXJrU3RhY2tNZXJnaW5nQ29u
c3RyYWludDo6cHJlcGFyZVRvRXhlY3V0ZUltcGwoY29uc3QgQWJzdHJhY3RMb2NrZXImLCBTbG90
VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQ6OnByZXBh
cmVUb0V4ZWN1dGVJbXBsKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgQWJzdHJhY3RTbG90VmlzaXRv
ciYgdmlzaXRvcikKIHsKICAgICAvLyBMb2dnaW5nIHRoZSB3b3JrIGhlcmUgZW5zdXJlcyB0aGF0
IHRoZSBjb25zdHJhaW50IHNvbHZlciBrbm93cyB0aGF0IGl0IGRvZXNuJ3QgbmVlZCB0byBwcm9k
dWNlCiAgICAgLy8gYW55bW9yZSB3b3JrLgpAQCAtNTYsOCArNTUsMTcgQEAgdm9pZCBNYXJrU3Rh
Y2tNZXJnaW5nQ29uc3RyYWludDo6cHJlcGFyZQogICAgIGRhdGFMb2dJZihPcHRpb25zOjpsb2dH
QygpLCAiKCIsIHNpemUsICIpIik7CiB9CiAKLXZvaWQgTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFp
bnQ6OmV4ZWN1dGVJbXBsKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBNYXJrU3RhY2tNZXJn
aW5nQ29uc3RyYWludDo6ZXhlY3V0ZUltcGwoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikK
IHsKKyAgICAvLyBXZSB3YW50IHRvIHNraXAgdGhpcyBjb25zdHJhaW50IGZvciB0aGUgR0MgdmVy
aWZpZXIgYmVjYXVzZToKKyAgICAvLyAxLiBUaGVyZSBzaG91bGQgYmUgbm8gbXV0YXRvciBtYXJr
aW5nIGFjdGlvbiBiZXR3ZWVuIHRoZSBFbmQgcGhhc2UgYW5kIHZlcmlmeUdDKCkuCisgICAgLy8g
ICAgSGVuY2UsIHdlIGNhbiBpZ25vcmUgdGhzZSBzdGFja3MuCisgICAgLy8gMi4gVGhlIEVuZCBw
aGFzZSBleHBsaWN0bHkgY2FsbHMgaXRlcmF0ZUV4ZWN1dGluZ0FuZENvbXBpbGluZ0NvZGVCbG9j
a3MoKQorICAgIC8vICAgIHRvIGFkZCBleGVjdXRpbmcgQ29kZUJsb2NrcyB0byBtX2hlYXAubV9t
dXRhdG9yTWFya1N0YWNrLiBXZSB3YW50IHRvCisgICAgLy8gICAgbGVhdmUgdGhvc2UgdW5wZXJ0
dXJiZWQuCisgICAgaWYgKG1faGVhcC5tX2lzTWFya2luZ0ZvckdDVmVyaWZpZXIpCisgICAgICAg
IHJldHVybjsKKwogICAgIG1faGVhcC5tX211dGF0b3JNYXJrU3RhY2stPnRyYW5zZmVyVG8odmlz
aXRvci5tdXRhdG9yTWFya1N0YWNrKCkpOwogICAgIG1faGVhcC5tX3JhY2VNYXJrU3RhY2stPnRy
YW5zZmVyVG8odmlzaXRvci5tdXRhdG9yTWFya1N0YWNrKCkpOwogfQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWlu
dC5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJr
U3RhY2tNZXJnaW5nQ29uc3RyYWludC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCwxOCArMzAsMTgg
QEAKIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBIZWFwOwotY2xhc3MgU2xvdFZpc2l0b3I7Citj
bGFzcyBBYnN0cmFjdFNsb3RWaXNpdG9yOwogCiBjbGFzcyBNYXJrU3RhY2tNZXJnaW5nQ29uc3Ry
YWludCBmaW5hbCA6IHB1YmxpYyBNYXJraW5nQ29uc3RyYWludCB7CiBwdWJsaWM6CiAgICAgTWFy
a1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQoSGVhcCYpOwogICAgIH5NYXJrU3RhY2tNZXJnaW5nQ29u
c3RyYWludCgpIGZpbmFsOwogICAgIAotICAgIGRvdWJsZSBxdWlja1dvcmtFc3RpbWF0ZShTbG90
VmlzaXRvciYpIGZpbmFsOworICAgIGRvdWJsZSBxdWlja1dvcmtFc3RpbWF0ZShBYnN0cmFjdFNs
b3RWaXNpdG9yJikgZmluYWw7CiAgICAgCiBwcml2YXRlOgotICAgIHZvaWQgcHJlcGFyZVRvRXhl
Y3V0ZUltcGwoY29uc3QgQWJzdHJhY3RMb2NrZXImIGNvbnN0cmFpbnRTb2x2aW5nTG9ja2VyLCBT
bG90VmlzaXRvciYpIGZpbmFsOwotICAgIHZvaWQgZXhlY3V0ZUltcGwoU2xvdFZpc2l0b3ImKSBm
aW5hbDsKKyAgICB2b2lkIHByZXBhcmVUb0V4ZWN1dGVJbXBsKGNvbnN0IEFic3RyYWN0TG9ja2Vy
JiBjb25zdHJhaW50U29sdmluZ0xvY2tlciwgQWJzdHJhY3RTbG90VmlzaXRvciYpIGZpbmFsOwor
ICAgIHZvaWQgZXhlY3V0ZUltcGwoQWJzdHJhY3RTbG90VmlzaXRvciYpIGZpbmFsOwogICAgIAog
ICAgIEhlYXAmIG1faGVhcDsKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9N
YXJrZWRCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01h
cmtlZEJsb2NrLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL01hcmtlZEJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTIwMCw2ICsyMDAsNyBAQCBwdWJs
aWM6CiAgICAgICAgIAogICAgICAgICB2b2lkKiBzdGFydCgpIGNvbnN0IHsgcmV0dXJuICZtX2Js
b2NrLT5hdG9tcygpWzBdOyB9CiAgICAgICAgIHZvaWQqIGVuZCgpIGNvbnN0IHsgcmV0dXJuICZt
X2Jsb2NrLT5hdG9tcygpW21fZW5kQXRvbV07IH0KKyAgICAgICAgdm9pZCogYXRvbUF0KHNpemVf
dCBpKSBjb25zdCB7IHJldHVybiAmbV9ibG9jay0+YXRvbXMoKVtpXTsgfQogICAgICAgICBib29s
IGNvbnRhaW5zKHZvaWQqIHApIGNvbnN0IHsgcmV0dXJuIHN0YXJ0KCkgPD0gcCAmJiBwIDwgZW5k
KCk7IH0KIAogICAgICAgICB2b2lkIGR1bXBTdGF0ZShQcmludFN0cmVhbSYpOwpAQCAtMjk1LDYg
KzI5Niw3IEBAIHB1YmxpYzoKIAogICAgICAgICBCaXRtYXA8YXRvbXNQZXJCbG9jaz4gbV9tYXJr
czsKICAgICAgICAgQml0bWFwPGF0b21zUGVyQmxvY2s+IG1fbmV3bHlBbGxvY2F0ZWQ7CisgICAg
ICAgIHZvaWQqIG1fdmVyaWZpZXJNZW1vIHsgbnVsbHB0ciB9OwogICAgIH07CiAgICAgCiBwcml2
YXRlOiAgICAKQEAgLTM4NCw2ICszODYsOSBAQCBwdWJsaWM6CiAgICAgICAgICpiaXR3aXNlX2Nh
c3Q8dm9sYXRpbGUgdWludDhfdCo+KCZmb290ZXIoKSk7CiAgICAgfQogICAgIAorICAgIHZvaWQg
c2V0VmVyaWZpZXJNZW1vKHZvaWQqKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBUIHZlcmlm
aWVyTWVtbygpIGNvbnN0OworCiAgICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3Qgb2Zmc2V0T2ZG
b290ZXIgPSBlbmRBdG9tICogYXRvbVNpemU7CiAKIHByaXZhdGU6CkBAIC02NjAsNiArNjY1LDE3
IEBAIGlubGluZSB2b2lkIE1hcmtlZEJsb2NrOjpub3RlTWFya2VkKCkKICAgICAgICAgbm90ZU1h
cmtlZFNsb3coKTsKIH0KIAoraW5saW5lIHZvaWQgTWFya2VkQmxvY2s6OnNldFZlcmlmaWVyTWVt
byh2b2lkKiBwKQoreworICAgIGZvb3RlcigpLm1fdmVyaWZpZXJNZW1vID0gcDsKK30KKwordGVt
cGxhdGU8dHlwZW5hbWUgVD4KK1QgTWFya2VkQmxvY2s6OnZlcmlmaWVyTWVtbygpIGNvbnN0Cit7
CisgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxUPihmb290ZXIoKS5tX3ZlcmlmaWVyTWVtbyk7Cit9
CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiBuYW1lc3BhY2UgV1RGIHsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZFNwYWNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRTcGFjZS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZFNwYWNlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjcyLDcgKzI3Miw3IEBAIHZvaWQgTWFya2VkU3BhY2U6OmVuYWJsZVByZWNpc2VBbGxv
Y2F0aW8KICAgICAgICAgbV9wcmVjaXNlQWxsb2NhdGlvblNldC0+YWRkKGFsbG9jYXRpb24tPmNl
bGwoKSk7CiB9CiAKLXZvaWQgTWFya2VkU3BhY2U6OnZpc2l0V2Vha1NldHMoU2xvdFZpc2l0b3Im
IHZpc2l0b3IpCit2b2lkIE1hcmtlZFNwYWNlOjp2aXNpdFdlYWtTZXRzKEFic3RyYWN0U2xvdFZp
c2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0byB2aXNpdCA9IFsmXSAoV2Vha1NldCogd2Vha1Nl
dCkgewogICAgICAgICB3ZWFrU2V0LT52aXNpdCh2aXNpdG9yKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL01hcmtlZFNwYWNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvTWFya2VkU3BhY2UuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkU3BhY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMSw3
ICsxLDcgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDAgSGFycmkgUG9ydGVuIChw
b3J0ZW5Aa2RlLm9yZykKICAqICBDb3B5cmlnaHQgKEMpIDIwMDEgUGV0ZXIgS2VsbHkgKHBta0Bw
b3N0LmNvbSkKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwpAQCAtMzcsNiArMzcsNyBAQAog
CiBuYW1lc3BhY2UgSlNDIHsKIAorY2xhc3MgQWJzdHJhY3RTbG90VmlzaXRvcjsKIGNsYXNzIENv
bXBsZXRlU3Vic3BhY2U7CiBjbGFzcyBIZWFwOwogY2xhc3MgSGVhcENlbGw7CkBAIC0xMDUsNyAr
MTA2LDcgQEAgcHVibGljOgogICAgIAogICAgIHZvaWQgcHJlcGFyZUZvckFsbG9jYXRpb24oKTsK
IAotICAgIHZvaWQgdmlzaXRXZWFrU2V0cyhTbG90VmlzaXRvciYpOworICAgIHZvaWQgdmlzaXRX
ZWFrU2V0cyhBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAgICAgdm9pZCByZWFwV2Vha1NldHMoKTsK
IAogICAgIE1hcmtlZEJsb2NrU2V0JiBibG9ja3MoKSB7IHJldHVybiBtX2Jsb2NrczsgfQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50LmNw
cAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2lu
Z0NvbnN0cmFpbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJj
b25maWcuaCIKICNpbmNsdWRlICJNYXJraW5nQ29uc3RyYWludC5oIgogCisjaW5jbHVkZSAiQWJz
dHJhY3RTbG90VmlzaXRvcklubGluZXMuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5j
bHVkZSAiVmlzaXRDb3VudGVyLmgiCiAKQEAgLTUxLDcgKzUyLDcgQEAgdm9pZCBNYXJraW5nQ29u
c3RyYWludDo6cmVzZXRTdGF0cygpCiAgICAgbV9sYXN0VmlzaXRDb3VudCA9IDA7CiB9CiAKLXZv
aWQgTWFya2luZ0NvbnN0cmFpbnQ6OmV4ZWN1dGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2b2lk
IE1hcmtpbmdDb25zdHJhaW50OjpleGVjdXRlKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3Ip
CiB7CiAgICAgVmlzaXRDb3VudGVyIHZpc2l0Q291bnRlcih2aXNpdG9yKTsKICAgICBleGVjdXRl
SW1wbCh2aXNpdG9yKTsKQEAgLTYwLDE3ICs2MSwyMyBAQCB2b2lkIE1hcmtpbmdDb25zdHJhaW50
OjpleGVjdXRlKFNsb3RWaXNpCiAgICAgICAgIGRhdGFMb2coIigiLCBhYmJyZXZpYXRlZE5hbWUo
KSwgIiB2aXNpdGVkICIsIHZpc2l0Q291bnRlci52aXNpdENvdW50KCksICIgaW4gZXhlY3V0ZSki
KTsKIH0KIAotZG91YmxlIE1hcmtpbmdDb25zdHJhaW50OjpxdWlja1dvcmtFc3RpbWF0ZShTbG90
VmlzaXRvciYpCit2b2lkIE1hcmtpbmdDb25zdHJhaW50OjpleGVjdXRlU3luY2hyb25vdXNseShB
YnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIHByZXBhcmVUb0V4ZWN1dGVJbXBs
KE5vTG9ja2luZ05lY2Vzc2FyeSwgdmlzaXRvcik7CisgICAgZXhlY3V0ZUltcGwodmlzaXRvcik7
Cit9CisKK2RvdWJsZSBNYXJraW5nQ29uc3RyYWludDo6cXVpY2tXb3JrRXN0aW1hdGUoQWJzdHJh
Y3RTbG90VmlzaXRvciYpCiB7CiAgICAgcmV0dXJuIDA7CiB9CiAKLWRvdWJsZSBNYXJraW5nQ29u
c3RyYWludDo6d29ya0VzdGltYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorZG91YmxlIE1hcmtp
bmdDb25zdHJhaW50Ojp3b3JrRXN0aW1hdGUoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikK
IHsKICAgICByZXR1cm4gbGFzdFZpc2l0Q291bnQoKSArIHF1aWNrV29ya0VzdGltYXRlKHZpc2l0
b3IpOwogfQogCi12b2lkIE1hcmtpbmdDb25zdHJhaW50OjpwcmVwYXJlVG9FeGVjdXRlKGNvbnN0
IEFic3RyYWN0TG9ja2VyJiBjb25zdHJhaW50U29sdmluZ0xvY2tlciwgU2xvdFZpc2l0b3ImIHZp
c2l0b3IpCit2b2lkIE1hcmtpbmdDb25zdHJhaW50OjpwcmVwYXJlVG9FeGVjdXRlKGNvbnN0IEFi
c3RyYWN0TG9ja2VyJiBjb25zdHJhaW50U29sdmluZ0xvY2tlciwgQWJzdHJhY3RTbG90VmlzaXRv
ciYgdmlzaXRvcikKIHsKICAgICBkYXRhTG9nSWYoT3B0aW9uczo6bG9nR0MoKSwgYWJicmV2aWF0
ZWROYW1lKCkpOwogICAgIFZpc2l0Q291bnRlciB2aXNpdENvdW50ZXIodmlzaXRvcik7CkBAIC04
MCw3ICs4Nyw3IEBAIHZvaWQgTWFya2luZ0NvbnN0cmFpbnQ6OnByZXBhcmVUb0V4ZWN1dGUKICAg
ICAgICAgZGF0YUxvZygiKCIsIGFiYnJldmlhdGVkTmFtZSgpLCAiIHZpc2l0ZWQgIiwgdmlzaXRD
b3VudGVyLnZpc2l0Q291bnQoKSwgIiBpbiBwcmVwYXJlVG9FeGVjdXRlKSIpOwogfQogCi12b2lk
IE1hcmtpbmdDb25zdHJhaW50Ojpkb1BhcmFsbGVsV29yayhTbG90VmlzaXRvciYgdmlzaXRvciwg
U2hhcmVkVGFzazx2b2lkKFNsb3RWaXNpdG9yJik+JiB0YXNrKQordm9pZCBNYXJraW5nQ29uc3Ry
YWludDo6ZG9QYXJhbGxlbFdvcmsoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvciwgU2hhcmVk
VGFzazx2b2lkKEFic3RyYWN0U2xvdFZpc2l0b3ImKT4mIHRhc2spCiB7CiAgICAgVmlzaXRDb3Vu
dGVyIHZpc2l0Q291bnRlcih2aXNpdG9yKTsKICAgICB0YXNrLnJ1bih2aXNpdG9yKTsKQEAgLTky
LDcgKzk5LDcgQEAgdm9pZCBNYXJraW5nQ29uc3RyYWludDo6ZG9QYXJhbGxlbFdvcmsoUwogICAg
IH0KIH0KIAotdm9pZCBNYXJraW5nQ29uc3RyYWludDo6cHJlcGFyZVRvRXhlY3V0ZUltcGwoY29u
c3QgQWJzdHJhY3RMb2NrZXImLCBTbG90VmlzaXRvciYpCit2b2lkIE1hcmtpbmdDb25zdHJhaW50
OjpwcmVwYXJlVG9FeGVjdXRlSW1wbChjb25zdCBBYnN0cmFjdExvY2tlciYsIEFic3RyYWN0U2xv
dFZpc2l0b3ImKQogewogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJr
aW5nQ29uc3RyYWludC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L01hcmtpbmdDb25zdHJhaW50LmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzgsNyArMzgs
NyBAQAogbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIE1hcmtpbmdDb25zdHJhaW50U2V0OwotY2xh
c3MgU2xvdFZpc2l0b3I7CitjbGFzcyBBYnN0cmFjdFNsb3RWaXNpdG9yOwogCiBjbGFzcyBNYXJr
aW5nQ29uc3RyYWludCB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoTWFya2luZ0NvbnN0cmFp
bnQpOwpAQCAtNjAsMTUgKzYwLDE1IEBAIHB1YmxpYzoKICAgICAKICAgICBzaXplX3QgbGFzdFZp
c2l0Q291bnQoKSBjb25zdCB7IHJldHVybiBtX2xhc3RWaXNpdENvdW50OyB9CiAgICAgCi0gICAg
dm9pZCBleGVjdXRlKFNsb3RWaXNpdG9yJik7Ci0gICAgCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUg
dmlydHVhbCBkb3VibGUgcXVpY2tXb3JrRXN0aW1hdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpOwor
ICAgIHZvaWQgZXhlY3V0ZShBYnN0cmFjdFNsb3RWaXNpdG9yJik7CisKKyAgICBKU19FWFBPUlRf
UFJJVkFURSB2aXJ0dWFsIGRvdWJsZSBxdWlja1dvcmtFc3RpbWF0ZShBYnN0cmFjdFNsb3RWaXNp
dG9yJik7CiAgICAgCi0gICAgZG91YmxlIHdvcmtFc3RpbWF0ZShTbG90VmlzaXRvciYgdmlzaXRv
cik7CisgICAgZG91YmxlIHdvcmtFc3RpbWF0ZShBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAgICAg
Ci0gICAgdm9pZCBwcmVwYXJlVG9FeGVjdXRlKGNvbnN0IEFic3RyYWN0TG9ja2VyJiBjb25zdHJh
aW50U29sdmluZ0xvY2tlciwgU2xvdFZpc2l0b3ImKTsKKyAgICB2b2lkIHByZXBhcmVUb0V4ZWN1
dGUoY29uc3QgQWJzdHJhY3RMb2NrZXImIGNvbnN0cmFpbnRTb2x2aW5nTG9ja2VyLCBBYnN0cmFj
dFNsb3RWaXNpdG9yJik7CiAgICAgCi0gICAgdm9pZCBkb1BhcmFsbGVsV29yayhTbG90VmlzaXRv
ciYsIFNoYXJlZFRhc2s8dm9pZChTbG90VmlzaXRvciYpPiYpOworICAgIHZvaWQgZG9QYXJhbGxl
bFdvcmsoQWJzdHJhY3RTbG90VmlzaXRvciYsIFNoYXJlZFRhc2s8dm9pZChBYnN0cmFjdFNsb3RW
aXNpdG9yJik+Jik7CiAgICAgCiAgICAgQ29uc3RyYWludFZvbGF0aWxpdHkgdm9sYXRpbGl0eSgp
IGNvbnN0IHsgcmV0dXJuIG1fdm9sYXRpbGl0eTsgfQogICAgIApAQCAtNzYsOSArNzYsMTEgQEAg
cHVibGljOgogICAgIENvbnN0cmFpbnRQYXJhbGxlbGlzbSBwYXJhbGxlbGlzbSgpIGNvbnN0IHsg
cmV0dXJuIG1fcGFyYWxsZWxpc207IH0KIAogcHJvdGVjdGVkOgotICAgIHZpcnR1YWwgdm9pZCBl
eGVjdXRlSW1wbChTbG90VmlzaXRvciYpID0gMDsKLSAgICBKU19FWFBPUlRfUFJJVkFURSB2aXJ0
dWFsIHZvaWQgcHJlcGFyZVRvRXhlY3V0ZUltcGwoY29uc3QgQWJzdHJhY3RMb2NrZXImIGNvbnN0
cmFpbnRTb2x2aW5nTG9ja2VyLCBTbG90VmlzaXRvciYpOwotICAgIAorICAgIHZpcnR1YWwgdm9p
ZCBleGVjdXRlSW1wbChBYnN0cmFjdFNsb3RWaXNpdG9yJikgPSAwOworICAgIEpTX0VYUE9SVF9Q
UklWQVRFIHZpcnR1YWwgdm9pZCBwcmVwYXJlVG9FeGVjdXRlSW1wbChjb25zdCBBYnN0cmFjdExv
Y2tlciYgY29uc3RyYWludFNvbHZpbmdMb2NrZXIsIEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKKwor
ICAgIHZvaWQgZXhlY3V0ZVN5bmNocm9ub3VzbHkoQWJzdHJhY3RTbG90VmlzaXRvciYpOworCiBw
cml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBNYXJraW5nQ29uc3RyYWludFNldDsgLy8gU28gaXQg
Y2FuIHNldCBtX2luZGV4LgogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
TWFya2luZ0NvbnN0cmFpbnRTZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50U2V0LmNwcAkocmV2aXNpb24gMjcyODMwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnRTZXQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTYzLDcgKzYzLDcgQEAgdm9pZCBNYXJraW5nQ29uc3RyYWludFNldDo6ZGlkU3Rh
cnRNYXJraQogICAgIG1faXRlcmF0aW9uID0gMTsKIH0KIAotdm9pZCBNYXJraW5nQ29uc3RyYWlu
dFNldDo6YWRkKENTdHJpbmcgYWJicmV2aWF0ZWROYW1lLCBDU3RyaW5nIG5hbWUsIDo6RnVuY3Rp
b248dm9pZChTbG90VmlzaXRvciYpPiBmdW5jdGlvbiwgQ29uc3RyYWludFZvbGF0aWxpdHkgdm9s
YXRpbGl0eSwgQ29uc3RyYWludENvbmN1cnJlbmN5IGNvbmN1cnJlbmN5LCBDb25zdHJhaW50UGFy
YWxsZWxpc20gcGFyYWxsZWxpc20pCit2b2lkIE1hcmtpbmdDb25zdHJhaW50U2V0OjphZGQoQ1N0
cmluZyBhYmJyZXZpYXRlZE5hbWUsIENTdHJpbmcgbmFtZSwgOjpGdW5jdGlvbjx2b2lkKEFic3Ry
YWN0U2xvdFZpc2l0b3ImKT4gZnVuY3Rpb24sIENvbnN0cmFpbnRWb2xhdGlsaXR5IHZvbGF0aWxp
dHksIENvbnN0cmFpbnRDb25jdXJyZW5jeSBjb25jdXJyZW5jeSwgQ29uc3RyYWludFBhcmFsbGVs
aXNtIHBhcmFsbGVsaXNtKQogewogICAgIGFkZChtYWtlVW5pcXVlPFNpbXBsZU1hcmtpbmdDb25z
dHJhaW50PihXVEZNb3ZlKGFiYnJldmlhdGVkTmFtZSksIFdURk1vdmUobmFtZSksIFdURk1vdmUo
ZnVuY3Rpb24pLCB2b2xhdGlsaXR5LCBjb25jdXJyZW5jeSwgcGFyYWxsZWxpc20pKTsKIH0KQEAg
LTc4LDE0ICs3OCwxNCBAQCB2b2lkIE1hcmtpbmdDb25zdHJhaW50U2V0OjphZGQoCiAgICAgbV9z
ZXQuYXBwZW5kKFdURk1vdmUoY29uc3RyYWludCkpOwogfQogCi1ib29sIE1hcmtpbmdDb25zdHJh
aW50U2V0OjpleGVjdXRlQ29udmVyZ2VuY2UoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCitib29sIE1h
cmtpbmdDb25zdHJhaW50U2V0OjpleGVjdXRlQ29udmVyZ2VuY2UoQWJzdHJhY3RTbG90VmlzaXRv
ciYgdmlzaXRvcikKIHsKICAgICBib29sIHJlc3VsdCA9IGV4ZWN1dGVDb252ZXJnZW5jZUltcGwo
dmlzaXRvcik7CiAgICAgZGF0YUxvZ0lmKE9wdGlvbnM6OmxvZ0dDKCksICIgIik7CiAgICAgcmV0
dXJuIHJlc3VsdDsKIH0KIAotYm9vbCBNYXJraW5nQ29uc3RyYWludFNldDo6aXNXYXZlZnJvbnRB
ZHZhbmNpbmcoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCitib29sIE1hcmtpbmdDb25zdHJhaW50U2V0
Ojppc1dhdmVmcm9udEFkdmFuY2luZyhBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewog
ICAgIGZvciAoTWFya2luZ0NvbnN0cmFpbnQqIG91dGdyb3d0aCA6IG1fb3V0Z3Jvd3Rocykgewog
ICAgICAgICBpZiAob3V0Z3Jvd3RoLT53b3JrRXN0aW1hdGUodmlzaXRvcikpCkBAIC05NCw3ICs5
NCw3IEBAIGJvb2wgTWFya2luZ0NvbnN0cmFpbnRTZXQ6OmlzV2F2ZWZyb250QWQKICAgICByZXR1
cm4gZmFsc2U7CiB9CiAKLWJvb2wgTWFya2luZ0NvbnN0cmFpbnRTZXQ6OmV4ZWN1dGVDb252ZXJn
ZW5jZUltcGwoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCitib29sIE1hcmtpbmdDb25zdHJhaW50U2V0
OjpleGVjdXRlQ29udmVyZ2VuY2VJbXBsKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7
CiAgICAgU3VwZXJTYW1wbGVyU2NvcGUgc3VwZXJTYW1wbGVyU2NvcGUoZmFsc2UpOwogICAgIE1h
cmtpbmdDb25zdHJhaW50U29sdmVyIHNvbHZlcigqdGhpcyk7CkBAIC0xNjYsMTAgKzE2NiwxMCBA
QCBib29sIE1hcmtpbmdDb25zdHJhaW50U2V0OjpleGVjdXRlQ29udmVyCiAgICAgcmV0dXJuICFz
b2x2ZXIuZGlkVmlzaXRTb21ldGhpbmcoKTsKIH0KIAotdm9pZCBNYXJraW5nQ29uc3RyYWludFNl
dDo6ZXhlY3V0ZUFsbChTbG90VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgTWFya2luZ0NvbnN0cmFp
bnRTZXQ6OmV4ZWN1dGVBbGxTeW5jaHJvbm91c2x5KEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0
b3IpCiB7CiAgICAgZm9yIChhdXRvJiBjb25zdHJhaW50IDogbV9zZXQpCi0gICAgICAgIGNvbnN0
cmFpbnQtPmV4ZWN1dGUodmlzaXRvcik7CisgICAgICAgIGNvbnN0cmFpbnQtPmV4ZWN1dGVTeW5j
aHJvbm91c2x5KHZpc2l0b3IpOwogICAgIGRhdGFMb2dJZihPcHRpb25zOjpsb2dHQygpLCAiICIp
OwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWlu
dFNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdD
b25zdHJhaW50U2V0LmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL01hcmtpbmdDb25zdHJhaW50U2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDYsMTQgKzQ2LDE0
IEBAIHB1YmxpYzoKICAgICB2b2lkIGFkZCgKICAgICAgICAgQ1N0cmluZyBhYmJyZXZpYXRlZE5h
bWUsCiAgICAgICAgIENTdHJpbmcgbmFtZSwKLSAgICAgICAgOjpGdW5jdGlvbjx2b2lkKFNsb3RW
aXNpdG9yJik+LAorICAgICAgICA6OkZ1bmN0aW9uPHZvaWQoQWJzdHJhY3RTbG90VmlzaXRvciYp
PiwKICAgICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHksCiAgICAgICAgIENvbnN0cmFpbnRDb25j
dXJyZW5jeSA9IENvbnN0cmFpbnRDb25jdXJyZW5jeTo6Q29uY3VycmVudCwKICAgICAgICAgQ29u
c3RyYWludFBhcmFsbGVsaXNtID0gQ29uc3RyYWludFBhcmFsbGVsaXNtOjpTZXF1ZW50aWFsKTsK
ICAgICAKICAgICB2b2lkIGFkZCgKICAgICAgICAgQ1N0cmluZyBhYmJyZXZpYXRlZE5hbWUsIENT
dHJpbmcgbmFtZSwKLSAgICAgICAgOjpGdW5jdGlvbjx2b2lkKFNsb3RWaXNpdG9yJik+IGZ1bmMs
CisgICAgICAgIDo6RnVuY3Rpb248dm9pZChBYnN0cmFjdFNsb3RWaXNpdG9yJik+IGZ1bmMsCiAg
ICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5IHZvbGF0aWxpdHksCiAgICAgICAgIENvbnN0cmFp
bnRQYXJhbGxlbGlzbSBwYXJhbGxlbGlzbSkKICAgICB7CkBAIC02NCwyMCArNjQsMjAgQEAgcHVi
bGljOgogICAgIAogICAgIC8vIEFzc3VtaW5nIHRoYXQgdGhlIG1hcmsgc3RhY2tzIGFyZSBhbGwg
ZW1wdHksIHRoaXMgd2lsbCBnaXZlIHlvdSBhIGd1ZXNzIGFzIHRvIHdoZXRoZXIgb3IKICAgICAv
LyBub3QgdGhlIHdhdmVmcm9udCBpcyBhZHZhbmNpbmcuCi0gICAgYm9vbCBpc1dhdmVmcm9udEFk
dmFuY2luZyhTbG90VmlzaXRvciYpOwotICAgIGJvb2wgaXNXYXZlZnJvbnRSZXRyZWF0aW5nKFNs
b3RWaXNpdG9yJiB2aXNpdG9yKSB7IHJldHVybiAhaXNXYXZlZnJvbnRBZHZhbmNpbmcodmlzaXRv
cik7IH0KKyAgICBib29sIGlzV2F2ZWZyb250QWR2YW5jaW5nKEFic3RyYWN0U2xvdFZpc2l0b3Im
KTsKKyAgICBib29sIGlzV2F2ZWZyb250UmV0cmVhdGluZyhBYnN0cmFjdFNsb3RWaXNpdG9yJiB2
aXNpdG9yKSB7IHJldHVybiAhaXNXYXZlZnJvbnRBZHZhbmNpbmcodmlzaXRvcik7IH0KICAgICAK
ICAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhpcyBleGVjdXRlZCBhbGwgY29uc3RyYWludHMgYW5k
IG5vbmUgb2YgdGhlbSBwcm9kdWNlZCBuZXcgd29yay4gVGhpcwogICAgIC8vIGFzc3VtZXMgdGhh
dCB5b3UndmUgYWxyYWVkeSB2aXNpdGVkIHJvb3RzIGFuZCBkcmFpbmVkIGZyb20gdGhlcmUuCi0g
ICAgYm9vbCBleGVjdXRlQ29udmVyZ2VuY2UoU2xvdFZpc2l0b3ImKTsKLSAgICAKKyAgICBib29s
IGV4ZWN1dGVDb252ZXJnZW5jZShBYnN0cmFjdFNsb3RWaXNpdG9yJik7CisKICAgICAvLyBTaW1w
bHkgcnVucyBhbGwgY29uc3RyYWludHMgd2l0aG91dCBhbnkgc2hlbmFuaWdhbnMuCi0gICAgdm9p
ZCBleGVjdXRlQWxsKFNsb3RWaXNpdG9yJik7CisgICAgdm9pZCBleGVjdXRlQWxsU3luY2hyb25v
dXNseShBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAgICAgCiBwcml2YXRlOgogICAgIGZyaWVuZCBj
bGFzcyBNYXJraW5nQ29uc3RyYWludFNvbHZlcjsKLSAgICAKLSAgICBib29sIGV4ZWN1dGVDb252
ZXJnZW5jZUltcGwoU2xvdFZpc2l0b3ImKTsKKworICAgIGJvb2wgZXhlY3V0ZUNvbnZlcmdlbmNl
SW1wbChBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAgICAgCiAgICAgSGVhcCYgbV9oZWFwOwogICAg
IEJpdFZlY3RvciBtX3VuZXhlY3V0ZWRSb290czsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL01hcmtpbmdDb25zdHJhaW50U29sdmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludFNvbHZlci5jcHAJKHJldmlzaW9u
IDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50
U29sdmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xNTAsMTMgKzE1MCwxMyBAQCB2b2lkIE1hcmtpbmdD
b25zdHJhaW50U29sdmVyOjpleGVjdXRlKE1hCiAgICAgbV9leGVjdXRlZC5zZXQoY29uc3RyYWlu
dC5pbmRleCgpKTsKIH0KIAotdm9pZCBNYXJraW5nQ29uc3RyYWludFNvbHZlcjo6YWRkUGFyYWxs
ZWxUYXNrKFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoU2xvdFZpc2l0b3ImKT4+IHRhc2ssIE1hcmtp
bmdDb25zdHJhaW50JiBjb25zdHJhaW50KQordm9pZCBNYXJraW5nQ29uc3RyYWludFNvbHZlcjo6
YWRkUGFyYWxsZWxUYXNrKFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoQWJzdHJhY3RTbG90VmlzaXRv
ciYpPj4gdGFzaywgTWFya2luZ0NvbnN0cmFpbnQmIGNvbnN0cmFpbnQpCiB7CiAgICAgYXV0byBs
b2NrZXIgPSBob2xkTG9jayhtX2xvY2spOwogICAgIG1fdG9FeGVjdXRlSW5QYXJhbGxlbC5hcHBl
bmQoVGFza1dpdGhDb25zdHJhaW50KFdURk1vdmUodGFzayksICZjb25zdHJhaW50KSk7CiB9CiAK
LXZvaWQgTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXI6OnJ1bkV4ZWN1dGlvblRocmVhZChTbG90Vmlz
aXRvciYgdmlzaXRvciwgU2NoZWR1bGVyUHJlZmVyZW5jZSBwcmVmZXJlbmNlLCBTY29wZWRMYW1i
ZGE8T3B0aW9uYWw8dW5zaWduZWQ+KCk+IHBpY2tOZXh0KQordm9pZCBNYXJraW5nQ29uc3RyYWlu
dFNvbHZlcjo6cnVuRXhlY3V0aW9uVGhyZWFkKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3Is
IFNjaGVkdWxlclByZWZlcmVuY2UgcHJlZmVyZW5jZSwgU2NvcGVkTGFtYmRhPE9wdGlvbmFsPHVu
c2lnbmVkPigpPiBwaWNrTmV4dCkKIHsKICAgICBmb3IgKDs7KSB7CiAgICAgICAgIGJvb2wgZG9Q
YXJhbGxlbFdvcmtNb2RlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2lu
Z0NvbnN0cmFpbnRTb2x2ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9NYXJraW5nQ29uc3RyYWludFNvbHZlci5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludFNvbHZlci5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTY1LDE1ICs2NSwxNSBAQCBwdWJsaWM6CiAgICAgdm9pZCBleGVjdXRlKE1hcmtpbmdD
b25zdHJhaW50Jik7CiAgICAgCiAgICAgLy8gUGFyYWxsZWwgY29uc3RyYWludHMgY2FuIGFkZCBw
YXJhbGxlbCB0YXNrcy4KLSAgICB2b2lkIGFkZFBhcmFsbGVsVGFzayhSZWZQdHI8U2hhcmVkVGFz
azx2b2lkKFNsb3RWaXNpdG9yJik+PiwgTWFya2luZ0NvbnN0cmFpbnQmKTsKKyAgICB2b2lkIGFk
ZFBhcmFsbGVsVGFzayhSZWZQdHI8U2hhcmVkVGFzazx2b2lkKEFic3RyYWN0U2xvdFZpc2l0b3Im
KT4+LCBNYXJraW5nQ29uc3RyYWludCYpOwogICAgIAogcHJpdmF0ZToKLSAgICB2b2lkIHJ1bkV4
ZWN1dGlvblRocmVhZChTbG90VmlzaXRvciYsIFNjaGVkdWxlclByZWZlcmVuY2UsIFNjb3BlZExh
bWJkYTxPcHRpb25hbDx1bnNpZ25lZD4oKT4gcGlja05leHQpOworICAgIHZvaWQgcnVuRXhlY3V0
aW9uVGhyZWFkKEFic3RyYWN0U2xvdFZpc2l0b3ImLCBTY2hlZHVsZXJQcmVmZXJlbmNlLCBTY29w
ZWRMYW1iZGE8T3B0aW9uYWw8dW5zaWduZWQ+KCk+IHBpY2tOZXh0KTsKICAgICAKICAgICBzdHJ1
Y3QgVGFza1dpdGhDb25zdHJhaW50IHsKICAgICAgICAgVGFza1dpdGhDb25zdHJhaW50KCkgeyB9
CiAgICAgICAgIAotICAgICAgICBUYXNrV2l0aENvbnN0cmFpbnQoUmVmUHRyPFNoYXJlZFRhc2s8
dm9pZChTbG90VmlzaXRvciYpPj4gdGFzaywgTWFya2luZ0NvbnN0cmFpbnQqIGNvbnN0cmFpbnQp
CisgICAgICAgIFRhc2tXaXRoQ29uc3RyYWludChSZWZQdHI8U2hhcmVkVGFzazx2b2lkKEFic3Ry
YWN0U2xvdFZpc2l0b3ImKT4+IHRhc2ssIE1hcmtpbmdDb25zdHJhaW50KiBjb25zdHJhaW50KQog
ICAgICAgICAgICAgOiB0YXNrKFdURk1vdmUodGFzaykpCiAgICAgICAgICAgICAsIGNvbnN0cmFp
bnQoY29uc3RyYWludCkKICAgICAgICAgewpAQCAtODUsMTIgKzg1LDEyIEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICAgICAgJiYgY29uc3RyYWludCA9PSBvdGhlci5jb25zdHJhaW50OwogICAgICAg
ICB9CiAgICAgICAgIAotICAgICAgICBSZWZQdHI8U2hhcmVkVGFzazx2b2lkKFNsb3RWaXNpdG9y
Jik+PiB0YXNrOworICAgICAgICBSZWZQdHI8U2hhcmVkVGFzazx2b2lkKEFic3RyYWN0U2xvdFZp
c2l0b3ImKT4+IHRhc2s7CiAgICAgICAgIE1hcmtpbmdDb25zdHJhaW50KiBjb25zdHJhaW50IHsg
bnVsbHB0ciB9OwogICAgIH07CiAgICAgCiAgICAgSGVhcCYgbV9oZWFwOwotICAgIFNsb3RWaXNp
dG9yJiBtX21haW5WaXNpdG9yOworICAgIEFic3RyYWN0U2xvdFZpc2l0b3ImIG1fbWFpblZpc2l0
b3I7CiAgICAgTWFya2luZ0NvbnN0cmFpbnRTZXQmIG1fc2V0OwogICAgIEJpdFZlY3RvciBtX2V4
ZWN1dGVkOwogICAgIERlcXVlPFRhc2tXaXRoQ29uc3RyYWludCwgMzI+IG1fdG9FeGVjdXRlSW5Q
YXJhbGxlbDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1NpbXBsZU1hcmtpbmdD
b25zdHJhaW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9T
aW1wbGVNYXJraW5nQ29uc3RyYWludC5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL1NpbXBsZU1hcmtpbmdDb25zdHJhaW50LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC0zMCw3ICszMCw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiBTaW1wbGVNYXJraW5nQ29uc3Ry
YWludDo6U2ltcGxlTWFya2luZ0NvbnN0cmFpbnQoCiAgICAgQ1N0cmluZyBhYmJyZXZpYXRlZE5h
bWUsIENTdHJpbmcgbmFtZSwKLSAgICA6OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3ImKT4gZXhl
Y3V0ZUZ1bmN0aW9uLAorICAgIDo6RnVuY3Rpb248dm9pZChBYnN0cmFjdFNsb3RWaXNpdG9yJik+
IGV4ZWN1dGVGdW5jdGlvbiwKICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eSB2b2xhdGlsaXR5LCBD
b25zdHJhaW50Q29uY3VycmVuY3kgY29uY3VycmVuY3ksCiAgICAgQ29uc3RyYWludFBhcmFsbGVs
aXNtIHBhcmFsbGVsaXNtKQogICAgIDogTWFya2luZ0NvbnN0cmFpbnQoV1RGTW92ZShhYmJyZXZp
YXRlZE5hbWUpLCBXVEZNb3ZlKG5hbWUpLCB2b2xhdGlsaXR5LCBjb25jdXJyZW5jeSwgcGFyYWxs
ZWxpc20pCkBAIC00Miw3ICs0Miw3IEBAIFNpbXBsZU1hcmtpbmdDb25zdHJhaW50Ojp+U2ltcGxl
TWFya2luZ0MKIHsKIH0KIAotdm9pZCBTaW1wbGVNYXJraW5nQ29uc3RyYWludDo6ZXhlY3V0ZUlt
cGwoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIFNpbXBsZU1hcmtpbmdDb25zdHJhaW50Ojpl
eGVjdXRlSW1wbChBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIG1fZXhlY3V0
ZUZ1bmN0aW9uKHZpc2l0b3IpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
U2ltcGxlTWFya2luZ0NvbnN0cmFpbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9TaW1wbGVNYXJraW5nQ29uc3RyYWludC5oCShyZXZpc2lvbiAyNzI4MzApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TaW1wbGVNYXJraW5nQ29uc3RyYWludC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTM3LDE0ICszNywxNCBAQCBjbGFzcyBTaW1wbGVNYXJraW5nQ29uc3RyYWlu
dCBmaW5hbCA6IHB1CiBwdWJsaWM6CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgU2ltcGxlTWFya2lu
Z0NvbnN0cmFpbnQoCiAgICAgICAgIENTdHJpbmcgYWJicmV2aWF0ZWROYW1lLCBDU3RyaW5nIG5h
bWUsCi0gICAgICAgIDo6RnVuY3Rpb248dm9pZChTbG90VmlzaXRvciYpPiwKKyAgICAgICAgOjpG
dW5jdGlvbjx2b2lkKEFic3RyYWN0U2xvdFZpc2l0b3ImKT4sCiAgICAgICAgIENvbnN0cmFpbnRW
b2xhdGlsaXR5LAogICAgICAgICBDb25zdHJhaW50Q29uY3VycmVuY3kgPSBDb25zdHJhaW50Q29u
Y3VycmVuY3k6OkNvbmN1cnJlbnQsCiAgICAgICAgIENvbnN0cmFpbnRQYXJhbGxlbGlzbSA9IENv
bnN0cmFpbnRQYXJhbGxlbGlzbTo6U2VxdWVudGlhbCk7CiAgICAgCiAgICAgU2ltcGxlTWFya2lu
Z0NvbnN0cmFpbnQoCiAgICAgICAgIENTdHJpbmcgYWJicmV2aWF0ZWROYW1lLCBDU3RyaW5nIG5h
bWUsCi0gICAgICAgIDo6RnVuY3Rpb248dm9pZChTbG90VmlzaXRvciYpPiBmdW5jLAorICAgICAg
ICA6OkZ1bmN0aW9uPHZvaWQoQWJzdHJhY3RTbG90VmlzaXRvciYpPiBmdW5jLAogICAgICAgICBD
b25zdHJhaW50Vm9sYXRpbGl0eSB2b2xhdGlsaXR5LAogICAgICAgICBDb25zdHJhaW50UGFyYWxs
ZWxpc20gcGFyYWxsZWxpc20pCiAgICAgICAgIDogU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQoYWJi
cmV2aWF0ZWROYW1lLCBuYW1lLCBXVEZNb3ZlKGZ1bmMpLCB2b2xhdGlsaXR5LCBDb25zdHJhaW50
Q29uY3VycmVuY3k6OkNvbmN1cnJlbnQsIHBhcmFsbGVsaXNtKQpAQCAtNTQsOSArNTQsOSBAQCBw
dWJsaWM6CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgflNpbXBsZU1hcmtpbmdDb25zdHJhaW50KCkg
ZmluYWw7CiAgICAgCiBwcml2YXRlOgotICAgIHZvaWQgZXhlY3V0ZUltcGwoU2xvdFZpc2l0b3Im
KSBmaW5hbDsKKyAgICB2b2lkIGV4ZWN1dGVJbXBsKEFic3RyYWN0U2xvdFZpc2l0b3ImKSBmaW5h
bDsKIAotICAgIDo6RnVuY3Rpb248dm9pZChTbG90VmlzaXRvciYpPiBtX2V4ZWN1dGVGdW5jdGlv
bjsKKyAgICA6OkZ1bmN0aW9uPHZvaWQoQWJzdHJhY3RTbG90VmlzaXRvciYpPiBtX2V4ZWN1dGVG
dW5jdGlvbjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDIwIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
NzcsMTUgKzc3LDEwIEBAIHN0YXRpYyB2b2lkIHZhbGlkYXRlKEpTQ2VsbCogY2VsbCkKICNlbmRp
ZgogCiBTbG90VmlzaXRvcjo6U2xvdFZpc2l0b3IoSGVhcCYgaGVhcCwgQ1N0cmluZyBjb2RlTmFt
ZSkKLSAgICA6IG1fYnl0ZXNWaXNpdGVkKDApCi0gICAgLCBtX3Zpc2l0Q291bnQoMCkKLSAgICAs
IG1faXNJblBhcmFsbGVsTW9kZShmYWxzZSkKKyAgICA6IEJhc2UoaGVhcCwgY29kZU5hbWUsIGhl
YXAubV9vcGFxdWVSb290cykKICAgICAsIG1fbWFya2luZ1ZlcnNpb24oTWFya2VkU3BhY2U6Omlu
aXRpYWxWZXJzaW9uKQotICAgICwgbV9oZWFwKGhlYXApCi0gICAgLCBtX2NvZGVOYW1lKGNvZGVO
YW1lKQogI2lmIEFTU0VSVF9FTkFCTEVECiAgICAgLCBtX2lzQ2hlY2tpbmdGb3JEZWZhdWx0TWFy
a1Zpb2xhdGlvbihmYWxzZSkKLSAgICAsIG1faXNEcmFpbmluZyhmYWxzZSkKICNlbmRpZgogewog
fQpAQCAtMTE3LDggKzExMiw4IEBAIHZvaWQgU2xvdFZpc2l0b3I6OmRpZFN0YXJ0TWFya2luZygp
CiAKIHZvaWQgU2xvdFZpc2l0b3I6OnJlc2V0KCkKIHsKKyAgICBBYnN0cmFjdFNsb3RWaXNpdG9y
OjpyZXNldCgpOwogICAgIG1fYnl0ZXNWaXNpdGVkID0gMDsKLSAgICBtX3Zpc2l0Q291bnQgPSAw
OwogICAgIG1faGVhcEFuYWx5emVyID0gbnVsbHB0cjsKICAgICBSRUxFQVNFX0FTU0VSVCghbV9j
dXJyZW50Q2VsbCk7CiB9CkBAIC0yMzAsNyArMjI1LDcgQEAgdm9pZCBTbG90VmlzaXRvcjo6YXBw
ZW5kSlNDZWxsT3JBdXhpbGlhcgogdm9pZCBTbG90VmlzaXRvcjo6YXBwZW5kU2xvdyhKU0NlbGwq
IGNlbGwsIERlcGVuZGVuY3kgZGVwZW5kZW5jeSkKIHsKICAgICBpZiAoVU5MSUtFTFkobV9oZWFw
QW5hbHl6ZXIpKQotICAgICAgICBtX2hlYXBBbmFseXplci0+YW5hbHl6ZUVkZ2UobV9jdXJyZW50
Q2VsbCwgY2VsbCwgbV9yb290TWFya1JlYXNvbik7CisgICAgICAgIG1faGVhcEFuYWx5emVyLT5h
bmFseXplRWRnZShtX2N1cnJlbnRDZWxsLCBjZWxsLCByb290TWFya1JlYXNvbigpKTsKIAogICAg
IGFwcGVuZEhpZGRlblNsb3dJbXBsKGNlbGwsIGRlcGVuZGVuY3kpOwogfQpAQCAtODA3LDEyICs4
MDIsMTIgQEAgTWFya1N0YWNrQXJyYXkmIFNsb3RWaXNpdG9yOjpjb3JyZXNwb25kaQogICAgIHJl
dHVybiAqbV9oZWFwLm1fc2hhcmVkTXV0YXRvck1hcmtTdGFjazsKIH0KIAotdm9pZCBTbG90Vmlz
aXRvcjo6YWRkUGFyYWxsZWxDb25zdHJhaW50VGFzayhSZWZQdHI8U2hhcmVkVGFzazx2b2lkKFNs
b3RWaXNpdG9yJik+PiB0YXNrKQordm9pZCBTbG90VmlzaXRvcjo6YWRkUGFyYWxsZWxDb25zdHJh
aW50VGFzayhSZWZQdHI8U2hhcmVkVGFzazx2b2lkKEFic3RyYWN0U2xvdFZpc2l0b3ImKT4+IHRh
c2spCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQobV9jdXJyZW50U29sdmVyKTsKICAgICBSRUxFQVNF
X0FTU0VSVChtX2N1cnJlbnRDb25zdHJhaW50KTsKICAgICBSRUxFQVNFX0FTU0VSVCh0YXNrKTsK
LSAgICAKKwogICAgIG1fY3VycmVudFNvbHZlci0+YWRkUGFyYWxsZWxUYXNrKHRhc2ssICptX2N1
cnJlbnRDb25zdHJhaW50KTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
U2xvdFZpc2l0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9T
bG90VmlzaXRvci5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9TbG90VmlzaXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw1OSArMjUsNzEgQEAKIAog
I3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRlICJBYnN0cmFjdFNsb3RWaXNpdG9yLmgiCiAjaW5jbHVk
ZSAiSGFuZGxlVHlwZXMuaCIKICNpbmNsdWRlICJJdGVyYXRpb25TdGF0dXMuaCIKLSNpbmNsdWRl
ICJNYXJrU3RhY2suaCIKLSNpbmNsdWRlICJSb290TWFya1JlYXNvbi5oIgotI2luY2x1ZGUgIlZp
c2l0UmFjZUtleS5oIgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL01v
bm90b25pY1RpbWUuaD4KLSNpbmNsdWRlIDx3dGYvU2hhcmVkVGFzay5oPgotI2luY2x1ZGUgPHd0
Zi90ZXh0L0NTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKLWNsYXNzIENvbnNlcnZhdGl2
ZVJvb3RzOwogY2xhc3MgR0NUaHJlYWRTaGFyZWREYXRhOwotY2xhc3MgSGVhcDsKIGNsYXNzIEhl
YXBDZWxsOwogY2xhc3MgSGVhcEFuYWx5emVyOwotY2xhc3MgTWFya2VkQmxvY2s7CiBjbGFzcyBN
YXJraW5nQ29uc3RyYWludDsKIGNsYXNzIE1hcmtpbmdDb25zdHJhaW50U29sdmVyOwotdGVtcGxh
dGU8dHlwZW5hbWUgVD4gY2xhc3MgV2VhazsKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1l
IFRyYWl0cz4gY2xhc3MgV3JpdGVCYXJyaWVyQmFzZTsKIAogdHlwZWRlZiB1aW50MzJfdCBIZWFw
VmVyc2lvbjsKIAotY2xhc3MgU2xvdFZpc2l0b3IgeworY2xhc3MgU2xvdFZpc2l0b3IgZmluYWwg
OiBwdWJsaWMgQWJzdHJhY3RTbG90VmlzaXRvciB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUo
U2xvdFZpc2l0b3IpOwogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogCisgICAgdXNpbmcg
QmFzZSA9IEFic3RyYWN0U2xvdFZpc2l0b3I7CisKICAgICBmcmllbmQgY2xhc3MgU2V0Q3VycmVu
dENlbGxTY29wZTsKICAgICBmcmllbmQgY2xhc3MgSGVhcDsKIAogcHVibGljOgorICAgIGNsYXNz
IENvbnRleHQgeworICAgIHB1YmxpYzoKKyAgICAgICAgQUxXQVlTX0lOTElORSBDb250ZXh0KEFi
c3RyYWN0U2xvdFZpc2l0b3ImLCBIZWFwQ2VsbCopIHsgfQorICAgIH07CisKKyAgICBjbGFzcyBE
ZWZhdWx0TWFya2luZ1Zpb2xhdGlvbkFzc2VydGlvblNjb3BlIHsKKyAgICBwdWJsaWM6CisjaWYg
QVNTRVJUX0VOQUJMRUQKKyAgICAgICAgRGVmYXVsdE1hcmtpbmdWaW9sYXRpb25Bc3NlcnRpb25T
Y29wZShTbG90VmlzaXRvciYgdmlzaXRvcikKKyAgICAgICAgICAgIDogbV92aXNpdG9yKHZpc2l0
b3IpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1fd2FzQ2hlY2tpbmdGb3JEZWZhdWx0TWFya1Zp
b2xhdGlvbiA9IG1fdmlzaXRvci5tX2lzQ2hlY2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlvbjsK
KyAgICAgICAgICAgIG1fdmlzaXRvci5tX2lzQ2hlY2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlv
biA9IGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgfkRlZmF1bHRNYXJraW5nVmlvbGF0aW9u
QXNzZXJ0aW9uU2NvcGUoKQorICAgICAgICB7CisgICAgICAgICAgICBtX3Zpc2l0b3IubV9pc0No
ZWNraW5nRm9yRGVmYXVsdE1hcmtWaW9sYXRpb24gPSBtX3dhc0NoZWNraW5nRm9yRGVmYXVsdE1h
cmtWaW9sYXRpb247CisgICAgICAgIH0KKworICAgIHByaXZhdGU6CisgICAgICAgIFNsb3RWaXNp
dG9yJiBtX3Zpc2l0b3I7CisgICAgICAgIGJvb2wgbV93YXNDaGVja2luZ0ZvckRlZmF1bHRNYXJr
VmlvbGF0aW9uOworI2Vsc2UKKyAgICAgICAgRGVmYXVsdE1hcmtpbmdWaW9sYXRpb25Bc3NlcnRp
b25TY29wZShTbG90VmlzaXRvciYpIHsgfQorI2VuZGlmCisgICAgfTsKKwogICAgIFNsb3RWaXNp
dG9yKEhlYXAmLCBDU3RyaW5nIGNvZGVOYW1lKTsKICAgICB+U2xvdFZpc2l0b3IoKTsKIAotICAg
IE1hcmtTdGFja0FycmF5JiBjb2xsZWN0b3JNYXJrU3RhY2soKSB7IHJldHVybiBtX2NvbGxlY3Rv
clN0YWNrOyB9Ci0gICAgTWFya1N0YWNrQXJyYXkmIG11dGF0b3JNYXJrU3RhY2soKSB7IHJldHVy
biBtX211dGF0b3JTdGFjazsgfQotICAgIGNvbnN0IE1hcmtTdGFja0FycmF5JiBjb2xsZWN0b3JN
YXJrU3RhY2soKSBjb25zdCB7IHJldHVybiBtX2NvbGxlY3RvclN0YWNrOyB9Ci0gICAgY29uc3Qg
TWFya1N0YWNrQXJyYXkmIG11dGF0b3JNYXJrU3RhY2soKSBjb25zdCB7IHJldHVybiBtX211dGF0
b3JTdGFjazsgfQotICAgIAotICAgIFZNJiB2bSgpOwotICAgIGNvbnN0IFZNJiB2bSgpIGNvbnN0
OwotICAgIEhlYXAqIGhlYXAoKSBjb25zdDsKKyAgICB2b2lkIGFwcGVuZChjb25zdCBDb25zZXJ2
YXRpdmVSb290cyYpIGZpbmFsOwogCi0gICAgdm9pZCBhcHBlbmQoY29uc3QgQ29uc2VydmF0aXZl
Um9vdHMmKTsKLSAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBUcmFpdHM+
IHZvaWQgYXBwZW5kKGNvbnN0IFdyaXRlQmFycmllckJhc2U8VCwgVHJhaXRzPiYpOwogICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFRyYWl0cz4gdm9pZCBhcHBlbmRIaWRkZW4oY29u
c3QgV3JpdGVCYXJyaWVyQmFzZTxULCBUcmFpdHM+Jik7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
SXRlcmF0b3I+IHZvaWQgYXBwZW5kKEl0ZXJhdG9yIGJlZ2luICwgSXRlcmF0b3IgZW5kKTsKLSAg
ICB2b2lkIGFwcGVuZFZhbHVlcyhjb25zdCBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24sIFJhd1Zh
bHVlVHJhaXRzPFVua25vd24+PiosIHNpemVfdCBjb3VudCk7Ci0gICAgdm9pZCBhcHBlbmRWYWx1
ZXNIaWRkZW4oY29uc3QgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duLCBSYXdWYWx1ZVRyYWl0czxV
bmtub3duPj4qLCBzaXplX3QgY291bnQpOwotICAgIAorICAgIEFMV0FZU19JTkxJTkUgdm9pZCBh
cHBlbmRWYWx1ZXMoY29uc3QgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duLCBSYXdWYWx1ZVRyYWl0
czxVbmtub3duPj4qLCBzaXplX3QgY291bnQpOworICAgIEFMV0FZU19JTkxJTkUgdm9pZCBhcHBl
bmRWYWx1ZXNIaWRkZW4oY29uc3QgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duLCBSYXdWYWx1ZVRy
YWl0czxVbmtub3duPj4qLCBzaXplX3QgY291bnQpOworCiAgICAgLy8gVGhlc2UgZG9uJ3QgcmVx
dWlyZSB5b3UgdG8gcHJvdmUgdGhhdCB5b3UgaGF2ZSBhIFdyaXRlQmFycmllcjw+LiBUaGF0IG1h
a2VzIHNlbnNlCiAgICAgLy8gZm9yOgogICAgIC8vCkBAIC04NywzMiArOTksMjcgQEAgcHVibGlj
OgogICAgIC8vCiAgICAgLy8gSWYgeW91IGFyZSBub3QgYSByb290IGFuZCB5b3UgZG9uJ3Qga25v
dyB3aGF0IGtpbmQgb2YgYmFycmllciB5b3UgaGF2ZSwgdGhlbiB5b3UKICAgICAvLyBzaG91bGRu
J3QgY2FsbCB0aGVzZSBtZXRob2RzLgotICAgIHZvaWQgYXBwZW5kVW5iYXJyaWVyZWQoSlNWYWx1
ZSk7Ci0gICAgdm9pZCBhcHBlbmRVbmJhcnJpZXJlZChKU1ZhbHVlKiwgc2l6ZV90KTsKLSAgICB2
b2lkIGFwcGVuZFVuYmFycmllcmVkKEpTQ2VsbCopOworICAgIEFMV0FZU19JTkxJTkUgdm9pZCBh
cHBlbmRVbmJhcnJpZXJlZChKU1ZhbHVlKTsKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgYXBwZW5k
VW5iYXJyaWVyZWQoSlNWYWx1ZSosIHNpemVfdCk7CisgICAgdm9pZCBhcHBlbmRVbmJhcnJpZXJl
ZChKU0NlbGwqKSBmaW5hbDsKICAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogICAgIHZv
aWQgYXBwZW5kKGNvbnN0IFdlYWs8VD4mIHdlYWspOwogICAgIAotICAgIHZvaWQgYXBwZW5kSGlk
ZGVuVW5iYXJyaWVyZWQoSlNWYWx1ZSk7Ci0gICAgdm9pZCBhcHBlbmRIaWRkZW5VbmJhcnJpZXJl
ZChKU0NlbGwqKTsKLQotICAgIGJvb2wgYWRkT3BhcXVlUm9vdCh2b2lkKik7IC8vIFJldHVybnMg
dHJ1ZSBpZiB0aGUgcm9vdCB3YXMgbmV3LgotICAgIAotICAgIGJvb2wgY29udGFpbnNPcGFxdWVS
b290KHZvaWQqKSBjb25zdDsKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgYXBwZW5kSGlkZGVuVW5i
YXJyaWVyZWQoSlNWYWx1ZSk7CisgICAgdm9pZCBhcHBlbmRIaWRkZW5VbmJhcnJpZXJlZChKU0Nl
bGwqKSBmaW5hbDsKIAotICAgIGJvb2wgaXNFbXB0eSgpIHsgcmV0dXJuIG1fY29sbGVjdG9yU3Rh
Y2suaXNFbXB0eSgpICYmIG1fbXV0YXRvclN0YWNrLmlzRW1wdHkoKTsgfQorICAgIGJvb2wgaXNG
aXJzdFZpc2l0KCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9pc0ZpcnN0VmlzaXQ7IH0KIAotICAg
IGJvb2wgaXNGaXJzdFZpc2l0KCkgY29uc3QgeyByZXR1cm4gbV9pc0ZpcnN0VmlzaXQ7IH0KKyAg
ICBib29sIGlzTWFya2VkKGNvbnN0IHZvaWQqKSBjb25zdCBmaW5hbDsKKyAgICBib29sIGlzTWFy
a2VkKE1hcmtlZEJsb2NrJiwgSGVhcENlbGwqKSBjb25zdCBmaW5hbDsKKyAgICBib29sIGlzTWFy
a2VkKFByZWNpc2VBbGxvY2F0aW9uJiwgSGVhcENlbGwqKSBjb25zdCBmaW5hbDsKIAogICAgIHZv
aWQgZGlkU3RhcnRNYXJraW5nKCk7CiAgICAgdm9pZCByZXNldCgpOwogICAgIHZvaWQgY2xlYXJN
YXJrU3RhY2tzKCk7CiAKICAgICBzaXplX3QgYnl0ZXNWaXNpdGVkKCkgY29uc3QgeyByZXR1cm4g
bV9ieXRlc1Zpc2l0ZWQ7IH0KLSAgICBzaXplX3QgdmlzaXRDb3VudCgpIGNvbnN0IHsgcmV0dXJu
IG1fdmlzaXRDb3VudDsgfQotICAgIAotICAgIHZvaWQgYWRkVG9WaXNpdENvdW50KHNpemVfdCB2
YWx1ZSkgeyBtX3Zpc2l0Q291bnQgKz0gdmFsdWU7IH0KIAogICAgIHZvaWQgZG9uYXRlKCk7CiAg
ICAgdm9pZCBkcmFpbihNb25vdG9uaWNUaW1lIHRpbWVvdXQgPSBNb25vdG9uaWNUaW1lOjppbmZp
bml0eSgpKTsKQEAgLTEzNSwyNCArMTQyLDE4IEBAIHB1YmxpYzoKICAgICAKICAgICAvLyBUaGlz
IGluZm9ybXMgdGhlIEdDIGFib3V0IGF1eGlsaWFyeSBvZiBzb21lIHNpemUgdGhhdCB3ZSBhcmUg
a2VlcGluZyBhbGl2ZS4gSWYgeW91IGRvbid0IGRvCiAgICAgLy8gdGhpcyB0aGVuIHRoZSBzcGFj
ZSB3aWxsIGJlIGZyZWVkIGF0IGVuZCBvZiBHQy4KLSAgICB2b2lkIG1hcmtBdXhpbGlhcnkoY29u
c3Qgdm9pZCogYmFzZSk7CisgICAgdm9pZCBtYXJrQXV4aWxpYXJ5KGNvbnN0IHZvaWQqIGJhc2Up
IGZpbmFsOwogCi0gICAgdm9pZCByZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQoc2l6ZV90KTsKKyAg
ICB2b2lkIHJlcG9ydEV4dHJhTWVtb3J5VmlzaXRlZChzaXplX3QpIGZpbmFsOwogI2lmIEVOQUJM
RShSRVNPVVJDRV9VU0FHRSkKLSAgICB2b2lkIHJlcG9ydEV4dGVybmFsTWVtb3J5VmlzaXRlZChz
aXplX3QpOworICAgIHZvaWQgcmVwb3J0RXh0ZXJuYWxNZW1vcnlWaXNpdGVkKHNpemVfdCkgZmlu
YWw7CiAjZW5kaWYKICAgICAKLSAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKLQot
ICAgIGJvb2wgaXNBbmFseXppbmdIZWFwKCkgY29uc3QgeyByZXR1cm4gISFtX2hlYXBBbmFseXpl
cjsgfQotICAgIEhlYXBBbmFseXplciogaGVhcEFuYWx5emVyKCkgY29uc3QgeyByZXR1cm4gbV9o
ZWFwQW5hbHl6ZXI7IH0KLSAgICAKLSAgICBSb290TWFya1JlYXNvbiByb290TWFya1JlYXNvbigp
IGNvbnN0IHsgcmV0dXJuIG1fcm9vdE1hcmtSZWFzb247IH0KLSAgICB2b2lkIHNldFJvb3RNYXJr
UmVhc29uKFJvb3RNYXJrUmVhc29uIHJlYXNvbikgeyBtX3Jvb3RNYXJrUmVhc29uID0gcmVhc29u
OyB9CisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3QgZmluYWw7CiAKICAgICBIZWFw
VmVyc2lvbiBtYXJraW5nVmVyc2lvbigpIGNvbnN0IHsgcmV0dXJuIG1fbWFya2luZ1ZlcnNpb247
IH0KIAotICAgIGJvb2wgbXV0YXRvcklzU3RvcHBlZCgpIGNvbnN0IHsgcmV0dXJuIG1fbXV0YXRv
cklzU3RvcHBlZDsgfQorICAgIGJvb2wgbXV0YXRvcklzU3RvcHBlZCgpIGNvbnN0IGZpbmFsIHsg
cmV0dXJuIG1fbXV0YXRvcklzU3RvcHBlZDsgfQogICAgIAogICAgIExvY2smIHJpZ2h0VG9SdW4o
KSB7IHJldHVybiBtX3JpZ2h0VG9SdW47IH0KICAgICAKQEAgLTE2NCwyMCArMTY1LDE2IEBAIHB1
YmxpYzoKICAgICAKICAgICB2b2lkIG9wdGltaXplRm9yU3RvcHBlZE11dGF0b3IoKTsKICAgICAK
LSAgICB2b2lkIGRpZFJhY2UoY29uc3QgVmlzaXRSYWNlS2V5Jik7CisgICAgdm9pZCBkaWRSYWNl
KGNvbnN0IFZpc2l0UmFjZUtleSYpIGZpbmFsOwogICAgIHZvaWQgZGlkUmFjZShKU0NlbGwqIGNl
bGwsIGNvbnN0IGNoYXIqIHJlYXNvbikgeyBkaWRSYWNlKFZpc2l0UmFjZUtleShjZWxsLCByZWFz
b24pKTsgfQogICAgIAotICAgIHZvaWQgdmlzaXRBc0NvbnN0cmFpbnQoY29uc3QgSlNDZWxsKik7
CisgICAgdm9pZCB2aXNpdEFzQ29uc3RyYWludChjb25zdCBKU0NlbGwqKSBmaW5hbDsKICAgICAK
ICAgICBib29sIGRpZFJlYWNoVGVybWluYXRpb24oKTsKICAgICAKLSAgICB2b2lkIHNldElnbm9y
ZU5ld09wYXF1ZVJvb3RzKGJvb2wgdmFsdWUpIHsgbV9pZ25vcmVOZXdPcGFxdWVSb290cyA9IHZh
bHVlOyB9Ci0KICAgICB2b2lkIGRvbmF0ZUFsbCgpOwogICAgIAotICAgIGNvbnN0IGNoYXIqIGNv
ZGVOYW1lKCkgY29uc3QgeyByZXR1cm4gbV9jb2RlTmFtZS5kYXRhKCk7IH0KLSAgICAKLSAgICBK
U19FWFBPUlRfUFJJVkFURSB2b2lkIGFkZFBhcmFsbGVsQ29uc3RyYWludFRhc2soUmVmUHRyPFNo
YXJlZFRhc2s8dm9pZChTbG90VmlzaXRvciYpPj4pOworICAgIHZvaWQgYWRkUGFyYWxsZWxDb25z
dHJhaW50VGFzayhSZWZQdHI8U2hhcmVkVGFzazx2b2lkKEFic3RyYWN0U2xvdFZpc2l0b3ImKT4+
KSBmaW5hbDsKIAogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgUGFyYWxsZWxNb2RlRW5hYmxl
cjsKQEAgLTIxNiwzOSArMjEzLDI1IEBAIHByaXZhdGU6CiAKICAgICBNYXJrU3RhY2tBcnJheSYg
Y29ycmVzcG9uZGluZ0dsb2JhbFN0YWNrKE1hcmtTdGFja0FycmF5Jik7CiAKLSAgICBNYXJrU3Rh
Y2tBcnJheSBtX2NvbGxlY3RvclN0YWNrOwotICAgIE1hcmtTdGFja0FycmF5IG1fbXV0YXRvclN0
YWNrOwotICAgIAotICAgIHNpemVfdCBtX2J5dGVzVmlzaXRlZDsKLSAgICBzaXplX3QgbV92aXNp
dENvdW50OwotICAgIHNpemVfdCBtX25vbkNlbGxWaXNpdENvdW50IHsgMCB9OyAvLyBVc2VkIGZv
ciBpbmNyZW1lbnRhbCBkcmFpbmluZywgaWdub3JlZCBvdGhlcndpc2UuCi0gICAgQ2hlY2tlZFNp
emUgbV9leHRyYU1lbW9yeVNpemUgeyAwIH07Ci0gICAgYm9vbCBtX2lzSW5QYXJhbGxlbE1vZGU7
Ci0gICAgYm9vbCBtX2lnbm9yZU5ld09wYXF1ZVJvb3RzIHsgZmFsc2UgfTsgLy8gVXNlZnVsIGFz
IGEgZGVidWdnaW5nIG1vZGUuCisgICAgYm9vbCBtX2lzSW5QYXJhbGxlbE1vZGUgeyBmYWxzZSB9
OwogCiAgICAgSGVhcFZlcnNpb24gbV9tYXJraW5nVmVyc2lvbjsKLSAgICAKLSAgICBIZWFwJiBt
X2hlYXA7CisKKyAgICBzaXplX3QgbV9ieXRlc1Zpc2l0ZWQgeyAwIH07CisgICAgc2l6ZV90IG1f
bm9uQ2VsbFZpc2l0Q291bnQgeyAwIH07IC8vIFVzZWQgZm9yIGluY3JlbWVudGFsIGRyYWluaW5n
LCBpZ25vcmVkIG90aGVyd2lzZS4KKyAgICBDaGVja2VkU2l6ZSBtX2V4dHJhTWVtb3J5U2l6ZSB7
IDAgfTsKIAogICAgIEhlYXBBbmFseXplciogbV9oZWFwQW5hbHl6ZXIgeyBudWxscHRyIH07CiAg
ICAgSlNDZWxsKiBtX2N1cnJlbnRDZWxsIHsgbnVsbHB0ciB9OwotICAgIFJvb3RNYXJrUmVhc29u
IG1fcm9vdE1hcmtSZWFzb24geyBSb290TWFya1JlYXNvbjo6Tm9uZSB9OwogICAgIGJvb2wgbV9p
c0ZpcnN0VmlzaXQgeyBmYWxzZSB9OwogICAgIGJvb2wgbV9tdXRhdG9ySXNTdG9wcGVkIHsgZmFs
c2UgfTsKICAgICBib29sIG1fY2FuT3B0aW1pemVGb3JTdG9wcGVkTXV0YXRvciB7IGZhbHNlIH07
CiAgICAgTG9jayBtX3JpZ2h0VG9SdW47CiAgICAgCi0gICAgQ1N0cmluZyBtX2NvZGVOYW1lOwot
ICAgIAotICAgIE1hcmtpbmdDb25zdHJhaW50KiBtX2N1cnJlbnRDb25zdHJhaW50IHsgbnVsbHB0
ciB9OwotICAgIE1hcmtpbmdDb25zdHJhaW50U29sdmVyKiBtX2N1cnJlbnRTb2x2ZXIgeyBudWxs
cHRyIH07Ci0gICAgCiAgICAgLy8gUHV0IHBhZGRpbmcgaGVyZSB0byBtaXRpZ2F0ZSBmYWxzZSBz
aGFyaW5nIGJldHdlZW4gbXVsdGlwbGUgU2xvdFZpc2l0b3JzLgogICAgIGNoYXIgcGFkZGluZ1s2
NF07Ci1wdWJsaWM6CiAjaWYgQVNTRVJUX0VOQUJMRUQKLSAgICBib29sIG1faXNDaGVja2luZ0Zv
ckRlZmF1bHRNYXJrVmlvbGF0aW9uOwotICAgIGJvb2wgbV9pc0RyYWluaW5nOworICAgIGJvb2wg
bV9pc0NoZWNraW5nRm9yRGVmYXVsdE1hcmtWaW9sYXRpb24geyBmYWxzZSB9OwogI2VuZGlmCiB9
OwogCkBAIC0yNzEsMjMgKzI1NCw0IEBAIHByaXZhdGU6CiAgICAgU2xvdFZpc2l0b3ImIG1fc3Rh
Y2s7CiB9OwogCi1jbGFzcyBTZXRSb290TWFya1JlYXNvblNjb3BlIHsKLXB1YmxpYzoKLSAgICBT
ZXRSb290TWFya1JlYXNvblNjb3BlKFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBSb290TWFya1JlYXNv
biByZWFzb24pCi0gICAgICAgIDogbV92aXNpdG9yKHZpc2l0b3IpCi0gICAgICAgICwgbV9wcmV2
aW91c1JlYXNvbih2aXNpdG9yLnJvb3RNYXJrUmVhc29uKCkpCi0gICAgewotICAgICAgICBtX3Zp
c2l0b3Iuc2V0Um9vdE1hcmtSZWFzb24ocmVhc29uKTsKLSAgICB9Ci0KLSAgICB+U2V0Um9vdE1h
cmtSZWFzb25TY29wZSgpCi0gICAgewotICAgICAgICBtX3Zpc2l0b3Iuc2V0Um9vdE1hcmtSZWFz
b24obV9wcmV2aW91c1JlYXNvbik7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIFNsb3RWaXNpdG9y
JiBtX3Zpc2l0b3I7Ci0gICAgUm9vdE1hcmtSZWFzb24gbV9wcmV2aW91c1JlYXNvbjsKLX07Ci0K
IH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xv
dFZpc2l0b3JJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvU2xvdFZpc2l0b3JJbmxpbmVzLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9ySW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE5IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MjUsOSArMjUsMTAgQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRlICJBYnN0cmFjdFNsb3RW
aXNpdG9ySW5saW5lcy5oIgorI2luY2x1ZGUgIk1hcmtlZEJsb2NrLmgiCisjaW5jbHVkZSAiUHJl
Y2lzZUFsbG9jYXRpb24uaCIKICNpbmNsdWRlICJTbG90VmlzaXRvci5oIgotI2luY2x1ZGUgIldl
YWsuaCIKLSNpbmNsdWRlICJXZWFrSW5saW5lcy5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIApAQCAt
MTM0LDIxICsxMzUsMTkgQEAgQUxXQVlTX0lOTElORSB2b2lkIFNsb3RWaXNpdG9yOjphcHBlbmRW
YQogICAgICAgICBhcHBlbmRIaWRkZW4oYmFycmllcnNbaV0pOwogfQogCi1pbmxpbmUgYm9vbCBT
bG90VmlzaXRvcjo6YWRkT3BhcXVlUm9vdCh2b2lkKiBwdHIpCitBTFdBWVNfSU5MSU5FIGJvb2wg
U2xvdFZpc2l0b3I6OmlzTWFya2VkKGNvbnN0IHZvaWQqIHApIGNvbnN0CiB7Ci0gICAgaWYgKCFw
dHIpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAobV9pZ25vcmVOZXdPcGFxdWVSb290
cykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghaGVhcCgpLT5tX29wYXF1ZVJvb3Rz
LmFkZChwdHIpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV92aXNpdENvdW50Kys7Ci0g
ICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIGhlYXAoKS0+aXNNYXJrZWQocCk7CiB9CiAKLWlu
bGluZSBib29sIFNsb3RWaXNpdG9yOjpjb250YWluc09wYXF1ZVJvb3Qodm9pZCogcHRyKSBjb25z
dAorQUxXQVlTX0lOTElORSBib29sIFNsb3RWaXNpdG9yOjppc01hcmtlZChNYXJrZWRCbG9jayYg
Y29udGFpbmVyLCBIZWFwQ2VsbCogY2VsbCkgY29uc3QKIHsKLSAgICByZXR1cm4gaGVhcCgpLT5t
X29wYXF1ZVJvb3RzLmNvbnRhaW5zKHB0cik7CisgICAgcmV0dXJuIGNvbnRhaW5lci5pc01hcmtl
ZChtYXJraW5nVmVyc2lvbigpLCBjZWxsKTsKK30KKworQUxXQVlTX0lOTElORSBib29sIFNsb3RW
aXNpdG9yOjppc01hcmtlZChQcmVjaXNlQWxsb2NhdGlvbiYgY29udGFpbmVyLCBIZWFwQ2VsbCog
Y2VsbCkgY29uc3QKK3sKKyAgICByZXR1cm4gY29udGFpbmVyLmlzTWFya2VkKG1hcmtpbmdWZXJz
aW9uKCksIGNlbGwpOwogfQogCiBpbmxpbmUgdm9pZCBTbG90VmlzaXRvcjo6cmVwb3J0RXh0cmFN
ZW1vcnlWaXNpdGVkKHNpemVfdCBzaXplKQpAQCAtMTY5LDIxICsxNjgsNiBAQCBpbmxpbmUgdm9p
ZCBTbG90VmlzaXRvcjo6cmVwb3J0RXh0ZXJuYWxNCiB9CiAjZW5kaWYKIAotaW5saW5lIEhlYXAq
IFNsb3RWaXNpdG9yOjpoZWFwKCkgY29uc3QKLXsKLSAgICByZXR1cm4gJm1faGVhcDsKLX0KLQot
aW5saW5lIFZNJiBTbG90VmlzaXRvcjo6dm0oKQotewotICAgIHJldHVybiBtX2hlYXAudm0oKTsK
LX0KLQotaW5saW5lIGNvbnN0IFZNJiBTbG90VmlzaXRvcjo6dm0oKSBjb25zdAotewotICAgIHJl
dHVybiBtX2hlYXAudm0oKTsKLX0KLQogdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KIEl0ZXJhdGlv
blN0YXR1cyBTbG90VmlzaXRvcjo6Zm9yRWFjaE1hcmtTdGFjayhjb25zdCBGdW5jJiBmdW5jKQog
ewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3JNYWNyb3MuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvck1hY3Jv
cy5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNp
dG9yTWFjcm9zLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5MyBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCituYW1lc3Bh
Y2UgSlNDIHsKKworY2xhc3MgQWJzdHJhY3RTbG90VmlzaXRvcjsKK2NsYXNzIEpTQ2VsbDsKK2Ns
YXNzIFNsb3RWaXNpdG9yOworCisjZGVmaW5lIFVOVVNFRF9NT0RJRklFUl9BUkdVTUVOVCAvKiB1
bnVzZWQgKi8KKworI2RlZmluZSBERUNMQVJFX1VOVVNFRF9TVFJVQ1RfVE9fVEVSTUlOQVRFX1ZJ
U0lUX01BQ1JPX0VYUEFOREVSX0lNUEwoY291bnRlcikgXAorICAgIHN0cnVjdCBVbnVzZWRTbG90
VmlzaXRvck1hY3JvU3RydWN0U29XZUNhbkhhdmVBU2VtaWNvbG9uIyNjb3VudGVyIHsgfQorCisj
ZGVmaW5lIERFQ0xBUkVfVU5VU0VEX1NUUlVDVF9UT19URVJNSU5BVEVfVklTSVRfTUFDUk9fRVhQ
QU5ERVIoY291bnRlcikgXAorICAgIERFQ0xBUkVfVU5VU0VEX1NUUlVDVF9UT19URVJNSU5BVEVf
VklTSVRfTUFDUk9fRVhQQU5ERVJfSU1QTChjb3VudGVyKQorCisjZGVmaW5lIERFQ0xBUkVfVU5V
U0VEX1NUUlVDVF9UT19URVJNSU5BVEVfVklTSVRfTUFDUk8gXAorICAgIERFQ0xBUkVfVU5VU0VE
X1NUUlVDVF9UT19URVJNSU5BVEVfVklTSVRfTUFDUk9fRVhQQU5ERVIoX19DT1VOVEVSX18pCisK
Ky8vIE1hY3JvcyBmb3Igc3RhdGljIHZpc2l0QWdncmVnYXRlKCkuCisKKyNkZWZpbmUgREVDTEFS
RV9WSVNJVF9BR0dSRUdBVEVfV0lUSF9NT0RJRklFUihwb3N0TW9kaWZpZXIpIFwKK3ByaXZhdGU6
IFwKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiBBTFdBWVNfSU5MSU5FIHZvaWQgdmlz
aXRBZ2dyZWdhdGVJbXBsKFZpc2l0b3ImKSBwb3N0TW9kaWZpZXI7IFwKK3B1YmxpYzogXAorICAg
IHZvaWQgdmlzaXRBZ2dyZWdhdGUoQWJzdHJhY3RTbG90VmlzaXRvciYpIHBvc3RNb2RpZmllcjsg
XAorICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImKSBwb3N0TW9kaWZpZXIKKwor
I2RlZmluZSBERUNMQVJFX1ZJU0lUX0FHR1JFR0FURSBcCisgICAgREVDTEFSRV9WSVNJVF9BR0dS
RUdBVEVfV0lUSF9NT0RJRklFUihVTlVTRURfTU9ESUZJRVJfQVJHVU1FTlQpCisKKyNkZWZpbmUg
REVGSU5FX1ZJU0lUX0FHR1JFR0FURV9XSVRIX01PRElGSUVSKGNsYXNzTmFtZSwgcG9zdE1vZGlm
aWVyKSBcCisgICAgdm9pZCBjbGFzc05hbWU6OnZpc2l0QWdncmVnYXRlKEFic3RyYWN0U2xvdFZp
c2l0b3ImIHZpc2l0b3IpIHBvc3RNb2RpZmllciB7IHZpc2l0QWdncmVnYXRlSW1wbCh2aXNpdG9y
KTsgfSBcCisgICAgdm9pZCBjbGFzc05hbWU6OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJiB2
aXNpdG9yKSBwb3N0TW9kaWZpZXIgeyB2aXNpdEFnZ3JlZ2F0ZUltcGwodmlzaXRvcik7IH0gXAor
ICAgIERFQ0xBUkVfVU5VU0VEX1NUUlVDVF9UT19URVJNSU5BVEVfVklTSVRfTUFDUk8KKworI2Rl
ZmluZSBERUZJTkVfVklTSVRfQUdHUkVHQVRFKGNsYXNzTmFtZSkgXAorICAgIERFRklORV9WSVNJ
VF9BR0dSRUdBVEVfV0lUSF9NT0RJRklFUihjbGFzc05hbWUsIFVOVVNFRF9NT0RJRklFUl9BUkdV
TUVOVCkKKworLy8gTWFjcm9zIGZvciBzdGF0aWMgdmlzaXRDaGlsZHJlbigpLgorCisjZGVmaW5l
IERFQ0xBUkVfVklTSVRfQ0hJTERSRU5fV0lUSF9NT0RJRklFUihwcmVNb2RpZmllcikgXAorcHJp
dmF0ZTogXAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IEFMV0FZU19JTkxJTkUgc3Rh
dGljIHZvaWQgdmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiwgVmlzaXRvciYpOyBcCitwdWJsaWM6
IFwKKyAgICBwcmVNb2RpZmllciBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIEFi
c3RyYWN0U2xvdFZpc2l0b3ImKTsgXAorICAgIHByZU1vZGlmaWVyIHN0YXRpYyB2b2lkIHZpc2l0
Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKQorCisjZGVmaW5lIERFQ0xBUkVfVklTSVRf
Q0hJTERSRU4gXAorICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU5fV0lUSF9NT0RJRklFUihVTlVT
RURfTU9ESUZJRVJfQVJHVU1FTlQpCisKKyNkZWZpbmUgREVGSU5FX1ZJU0lUX0NISUxEUkVOX1dJ
VEhfTU9ESUZJRVIocHJlTW9kaWZpZXIsIGNsYXNzTmFtZSkgXAorICAgIHByZU1vZGlmaWVyIHZv
aWQgY2xhc3NOYW1lOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgQWJzdHJhY3RTbG90Vmlz
aXRvciYgdmlzaXRvcikgXAorICAgIHsgXAorICAgICAgICBBYnN0cmFjdFNsb3RWaXNpdG9yOjpD
b250ZXh0IGNvbnRleHQodmlzaXRvciwgY2VsbCk7IFwKKyAgICAgICAgdmlzaXRDaGlsZHJlbklt
cGwoY2VsbCwgdmlzaXRvcik7IFwKKyAgICB9IFwKKyAgICBwcmVNb2RpZmllciB2b2lkIGNsYXNz
TmFtZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKSB7
IHZpc2l0Q2hpbGRyZW5JbXBsKGNlbGwsIHZpc2l0b3IpOyB9IFwKKyAgICBERUNMQVJFX1VOVVNF
RF9TVFJVQ1RfVE9fVEVSTUlOQVRFX1ZJU0lUX01BQ1JPCisKKyNkZWZpbmUgREVGSU5FX1ZJU0lU
X0NISUxEUkVOKGNsYXNzTmFtZSkgXAorICAgIERFRklORV9WSVNJVF9DSElMRFJFTl9XSVRIX01P
RElGSUVSKFVOVVNFRF9NT0RJRklFUl9BUkdVTUVOVCwgY2xhc3NOYW1lKQorCit9IC8vIG5hbWVz
cGFjZSBKU0MKKwordXNpbmcgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yOwordXNpbmcgSlNDOjpK
U0NlbGw7Cit1c2luZyBKU0M6OlNsb3RWaXNpdG9yOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvU3Vic3BhY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9TdWJzcGFjZS5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9TdWJzcGFjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxNy0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzQsNiArMzQsNyBAQAogCiBu
YW1lc3BhY2UgSlNDIHsKIAorY2xhc3MgQWJzdHJhY3RTbG90VmlzaXRvcjsKIGNsYXNzIEFsaWdu
ZWRNZW1vcnlBbGxvY2F0b3I7CiBjbGFzcyBIZWFwQ2VsbFR5cGU7CiAKQEAgLTg3LDcgKzg4LDcg
QEAgcHVibGljOgogICAgIHZvaWQgZm9yRWFjaE1hcmtlZENlbGwoY29uc3QgRnVuYyYpOwogICAg
IAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+Ci0gICAgUmVmPFNoYXJlZFRhc2s8dm9pZChT
bG90VmlzaXRvciYpPj4gZm9yRWFjaE1hcmtlZENlbGxJblBhcmFsbGVsKGNvbnN0IEZ1bmMmKTsK
KyAgICBSZWY8U2hhcmVkVGFzazx2b2lkKEFic3RyYWN0U2xvdFZpc2l0b3ImKT4+IGZvckVhY2hN
YXJrZWRDZWxsSW5QYXJhbGxlbChjb25zdCBGdW5jJik7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBGdW5jPgogICAgIHZvaWQgZm9yRWFjaExpdmVDZWxsKGNvbnN0IEZ1bmMmKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N1YnNwYWNlSW5saW5lcy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N1YnNwYWNlSW5saW5lcy5oCShyZXZpc2lvbiAy
NzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdWJzcGFjZUlubGluZXMuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTct
MjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTg2LDkgKzg2LDkgQEAgdm9pZCBTdWJzcGFjZTo6Zm9yRWFjaE1h
cmtlZENlbGwoY29uc3QgRgogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgotUmVmPFNoYXJl
ZFRhc2s8dm9pZChTbG90VmlzaXRvciYpPj4gU3Vic3BhY2U6OmZvckVhY2hNYXJrZWRDZWxsSW5Q
YXJhbGxlbChjb25zdCBGdW5jJiBmdW5jKQorUmVmPFNoYXJlZFRhc2s8dm9pZChBYnN0cmFjdFNs
b3RWaXNpdG9yJik+PiBTdWJzcGFjZTo6Zm9yRWFjaE1hcmtlZENlbGxJblBhcmFsbGVsKGNvbnN0
IEZ1bmMmIGZ1bmMpCiB7Ci0gICAgY2xhc3MgVGFzayBmaW5hbCA6IHB1YmxpYyBTaGFyZWRUYXNr
PHZvaWQoU2xvdFZpc2l0b3ImKT4geworICAgIGNsYXNzIFRhc2sgZmluYWwgOiBwdWJsaWMgU2hh
cmVkVGFzazx2b2lkKEFic3RyYWN0U2xvdFZpc2l0b3ImKT4gewogICAgIHB1YmxpYzoKICAgICAg
ICAgVGFzayhTdWJzcGFjZSYgc3Vic3BhY2UsIGNvbnN0IEZ1bmMmIGZ1bmMpCiAgICAgICAgICAg
ICA6IG1fc3Vic3BhY2Uoc3Vic3BhY2UpCkBAIC05Nyw3ICs5Nyw3IEBAIFJlZjxTaGFyZWRUYXNr
PHZvaWQoU2xvdFZpc2l0b3ImKT4+IFN1YnMKICAgICAgICAgewogICAgICAgICB9CiAgICAgICAg
IAotICAgICAgICB2b2lkIHJ1bihTbG90VmlzaXRvciYgdmlzaXRvcikgZmluYWwKKyAgICAgICAg
dm9pZCBydW4oQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikgZmluYWwKICAgICAgICAgewog
ICAgICAgICAgICAgd2hpbGUgKE1hcmtlZEJsb2NrOjpIYW5kbGUqIGhhbmRsZSA9IG1fYmxvY2tT
b3VyY2UtPnJ1bigpKSB7CiAgICAgICAgICAgICAgICAgaGFuZGxlLT5mb3JFYWNoTWFya2VkQ2Vs
bCgKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1ZlcmlmaWVyU2xvdFZpc2l0b3Iu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1ZlcmlmaWVyU2xv
dFZpc2l0b3IuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L1ZlcmlmaWVyU2xvdFZpc2l0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzQxIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlZlcmlmaWVyU2xv
dFZpc2l0b3IuaCIKKworI2luY2x1ZGUgIkJsb2NrRGlyZWN0b3J5SW5saW5lcy5oIgorI2luY2x1
ZGUgIkNvbnNlcnZhdGl2ZVJvb3RzLmgiCisjaW5jbHVkZSAiR0NTZWdtZW50ZWRBcnJheUlubGlu
ZXMuaCIKKyNpbmNsdWRlICJIZWFwQ2VsbC5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNp
bmNsdWRlICJWTS5oIgorI2luY2x1ZGUgIlZlcmlmaWVyU2xvdFZpc2l0b3JJbmxpbmVzLmgiCisj
aW5jbHVkZSA8d3RmL1N0YWNrVHJhY2UuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK3VzaW5nIE1h
cmtlckRhdGEgPSBWZXJpZmllclNsb3RWaXNpdG9yOjpNYXJrZXJEYXRhOworCitjb25zdGV4cHIg
aW50IG1heE1hcmtpbmdTdGFja0ZyYW1lc1RvQ2FwdHVyZSA9IDEwMDsKKworTWFya2VyRGF0YTo6
TWFya2VyRGF0YShIZWFwQ2VsbCogcGFyZW50LCBzdGQ6OnVuaXF1ZV9wdHI8U3RhY2tUcmFjZT4m
JiBzdGFjaykKKyAgICA6IHBhcmVudChwYXJlbnQpCisgICAgLCBzdGFjayhXVEZNb3ZlKHN0YWNr
KSkKK3sKK30KKworVmVyaWZpZXJTbG90VmlzaXRvcjo6TWFya2VkQmxvY2tEYXRhOjpNYXJrZWRC
bG9ja0RhdGEoTWFya2VkQmxvY2sqIGJsb2NrKQorICAgIDogbV9ibG9jayhibG9jaykKK3sKK30K
Kwordm9pZCBWZXJpZmllclNsb3RWaXNpdG9yOjpNYXJrZWRCbG9ja0RhdGE6OmFkZE1hcmtlckRh
dGEodW5zaWduZWQgYXRvbU51bWJlciwgTWFya2VyRGF0YSYmIG1hcmtlcikKK3sKKyAgICBpZiAo
bV9tYXJrZXJzLmlzRW1wdHkoKSkKKyAgICAgICAgbV9tYXJrZXJzLmdyb3coTWFya2VkQmxvY2s6
OmF0b21zUGVyQmxvY2spOworICAgIG1fbWFya2Vyc1thdG9tTnVtYmVyXSA9IFdURk1vdmUobWFy
a2VyKTsKK30KKworY29uc3QgTWFya2VyRGF0YSogVmVyaWZpZXJTbG90VmlzaXRvcjo6TWFya2Vk
QmxvY2tEYXRhOjptYXJrZXJEYXRhKHVuc2lnbmVkIGF0b21OdW1iZXIpIGNvbnN0Cit7CisgICAg
YXV0byYgbWFya2VyID0gbV9tYXJrZXJzW2F0b21OdW1iZXJdOworICAgIGlmIChtYXJrZXIuc3Rh
Y2spCisgICAgICAgIHJldHVybiAmbWFya2VyOworICAgIHJldHVybiBudWxscHRyOworfQorCitW
ZXJpZmllclNsb3RWaXNpdG9yOjpQcmVjaXNlQWxsb2NhdGlvbkRhdGE6OlByZWNpc2VBbGxvY2F0
aW9uRGF0YShQcmVjaXNlQWxsb2NhdGlvbiogYWxsb2NhdGlvbikKKyAgICA6IG1fYWxsb2NhdGlv
bihhbGxvY2F0aW9uKQoreworfQorCitjb25zdCBNYXJrZXJEYXRhKiBWZXJpZmllclNsb3RWaXNp
dG9yOjpQcmVjaXNlQWxsb2NhdGlvbkRhdGE6Om1hcmtlckRhdGEoKSBjb25zdAoreworICAgIGlm
IChtX21hcmtlci5zdGFjaykKKyAgICAgICAgcmV0dXJuICZtX21hcmtlcjsKKyAgICByZXR1cm4g
bnVsbHB0cjsKK30KKwordm9pZCBWZXJpZmllclNsb3RWaXNpdG9yOjpQcmVjaXNlQWxsb2NhdGlv
bkRhdGE6OmFkZE1hcmtlckRhdGEoTWFya2VyRGF0YSYmIG1hcmtlcikKK3sKKyAgICBtX21hcmtl
ciA9IFdURk1vdmUobWFya2VyKTsKK30KKworVmVyaWZpZXJTbG90VmlzaXRvcjo6VmVyaWZpZXJT
bG90VmlzaXRvcihIZWFwJiBoZWFwKQorICAgIDogQmFzZShoZWFwLCAiVmVyaWZpZXIiLCBtX29w
YXF1ZVJvb3RTdG9yYWdlKQoreworfQorCitWZXJpZmllclNsb3RWaXNpdG9yOjp+VmVyaWZpZXJT
bG90VmlzaXRvcigpCit7CisgICAgaGVhcCgpLT5vYmplY3RTcGFjZSgpLmZvckVhY2hCbG9jaygK
KyAgICAgICAgWyZdIChNYXJrZWRCbG9jazo6SGFuZGxlKiBoYW5kbGUpIHsKKyAgICAgICAgICAg
IGhhbmRsZS0+YmxvY2soKS5zZXRWZXJpZmllck1lbW8obnVsbHB0cik7CisgICAgICAgIH0pOwor
fQorCit2b2lkIFZlcmlmaWVyU2xvdFZpc2l0b3I6OmFkZFBhcmFsbGVsQ29uc3RyYWludFRhc2so
UmVmUHRyPFNoYXJlZFRhc2s8dm9pZChBYnN0cmFjdFNsb3RWaXNpdG9yJik+PiB0YXNrKQorewor
ICAgIG1fY29uc3RyYWludFRhc2tzLmFwcGVuZChXVEZNb3ZlKHRhc2spKTsKK30KKwordm9pZCBW
ZXJpZmllclNsb3RWaXNpdG9yOjpleGVjdXRlQ29uc3RyYWludFRhc2tzKCkKK3sKKyAgICB3aGls
ZSAoIW1fY29uc3RyYWludFRhc2tzLmlzRW1wdHkoKSkKKyAgICAgICAgbV9jb25zdHJhaW50VGFz
a3MudGFrZUZpcnN0KCktPnJ1bigqdGhpcyk7Cit9CisKK3ZvaWQgVmVyaWZpZXJTbG90VmlzaXRv
cjo6YXBwZW5kKGNvbnN0IENvbnNlcnZhdGl2ZVJvb3RzJiBjb25zZXJ2YXRpdmVSb290cykKK3sK
KyAgICBhdXRvIGFwcGVuZEpTQ2VsbE9yQXV4aWxpYXJ5ID0gWyZdIChIZWFwQ2VsbCogaGVhcENl
bGwpIHsKKyAgICAgICAgaWYgKCFoZWFwQ2VsbCkKKyAgICAgICAgICAgIHJldHVybjsKKworICAg
ICAgICBpZiAodGVzdEFuZFNldE1hcmtlZChoZWFwQ2VsbCkpCisgICAgICAgICAgICByZXR1cm47
CisKKyAgICAgICAgc3dpdGNoIChoZWFwQ2VsbC0+Y2VsbEtpbmQoKSkgeworICAgICAgICBjYXNl
IEhlYXBDZWxsOjpKU0NlbGw6CisgICAgICAgIGNhc2UgSGVhcENlbGw6OkpTQ2VsbFdpdGhJbmRl
eGluZ0hlYWRlcjogeworICAgICAgICAgICAgSlNDZWxsKiBqc0NlbGwgPSBzdGF0aWNfY2FzdDxK
U0NlbGwqPihoZWFwQ2VsbCk7CisgICAgICAgICAgICBhcHBlbmRUb01hcmtTdGFjayhqc0NlbGwp
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBIZWFwQ2Vs
bDo6QXV4aWxpYXJ5OgorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfTsKKwor
ICAgIEhlYXBDZWxsKiogcm9vdHMgPSBjb25zZXJ2YXRpdmVSb290cy5yb290cygpOworICAgIHNp
emVfdCBzaXplID0gY29uc2VydmF0aXZlUm9vdHMuc2l6ZSgpOworICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgc2l6ZTsgKytpKQorICAgICAgICBhcHBlbmRKU0NlbGxPckF1eGlsaWFyeShyb290
c1tpXSk7Cit9CisKK3ZvaWQgVmVyaWZpZXJTbG90VmlzaXRvcjo6YXBwZW5kVG9NYXJrU3RhY2so
SlNDZWxsKiBjZWxsKQoreworICAgIEFTU0VSVCghY2VsbC0+aXNaYXBwZWQoKSk7CisgICAgbV9j
b2xsZWN0b3JTdGFjay5hcHBlbmQoY2VsbCk7Cit9CisKK3ZvaWQgVmVyaWZpZXJTbG90VmlzaXRv
cjo6YXBwZW5kVW5iYXJyaWVyZWQoSlNDZWxsKiBjZWxsKQoreworICAgIGlmICghY2VsbCkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgaWYgKFVOTElLRUxZKGNlbGwtPmlzUHJlY2lzZUFsbG9jYXRp
b24oKSkpIHsKKyAgICAgICAgaWYgKExJS0VMWShpc01hcmtlZChjZWxsLT5wcmVjaXNlQWxsb2Nh
dGlvbigpLCBjZWxsKSkpCisgICAgICAgICAgICByZXR1cm47CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgTWFya2VkQmxvY2smIGJsb2NrID0gY2VsbC0+bWFya2VkQmxvY2soKTsKKyAgICAgICAgaWYg
KExJS0VMWShpc01hcmtlZChibG9jaywgY2VsbCkpKQorICAgICAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIGFwcGVuZFNsb3coY2VsbCk7Cit9CisKK3ZvaWQgVmVyaWZpZXJTbG90VmlzaXRv
cjo6YXBwZW5kSGlkZGVuVW5iYXJyaWVyZWQoSlNDZWxsKiBjZWxsKQoreworICAgIGFwcGVuZFVu
YmFycmllcmVkKGNlbGwpOworfQorCit2b2lkIFZlcmlmaWVyU2xvdFZpc2l0b3I6OmRyYWluKCkK
K3sKKyAgICBSRUxFQVNFX0FTU0VSVChtX211dGF0b3JTdGFjay5pc0VtcHR5KCkpOworCisgICAg
TWFya1N0YWNrQXJyYXkmIHN0YWNrID0gbV9jb2xsZWN0b3JTdGFjazsKKyAgICBpZiAoc3RhY2su
aXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBzdGFjay5yZWZpbGwoKTsKKyAgICB3
aGlsZSAoc3RhY2suY2FuUmVtb3ZlTGFzdCgpKQorICAgICAgICB2aXNpdENoaWxkcmVuKHN0YWNr
LnJlbW92ZUxhc3QoKSk7Cit9CisKK3ZvaWQgVmVyaWZpZXJTbG90VmlzaXRvcjo6ZHVtcE1hcmtl
ckRhdGEoSGVhcENlbGwqIGNlbGwpCit7CisgICAgaWYgKGNlbGwtPmlzUHJlY2lzZUFsbG9jYXRp
b24oKSkKKyAgICAgICAgcmV0dXJuIGR1bXBNYXJrZXJEYXRhKGNlbGwtPnByZWNpc2VBbGxvY2F0
aW9uKCksIGNlbGwpOworICAgIHJldHVybiBkdW1wTWFya2VyRGF0YShjZWxsLT5tYXJrZWRCbG9j
aygpLCBjZWxsKTsKK30KKwordm9pZCBWZXJpZmllclNsb3RWaXNpdG9yOjpkdW1wTWFya2VyRGF0
YShQcmVjaXNlQWxsb2NhdGlvbiYgYWxsb2NhdGlvbiwgSGVhcENlbGwqIGNlbGwpCit7CisgICAg
YXV0byBpdGVyYXRvciA9IG1fcHJlY2lzZUFsbG9jYXRpb25NYXAuZmluZCgmYWxsb2NhdGlvbik7
CisgICAgaWYgKGl0ZXJhdG9yICE9IG1fcHJlY2lzZUFsbG9jYXRpb25NYXAuZW5kKCkpIHsKKyAg
ICAgICAgZHVtcE1hcmtlckRhdGEoY2VsbCwgaXRlcmF0b3ItPnZhbHVlLT5tYXJrZXJEYXRhKCkp
OworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGRhdGFMb2dMbigiQ2VsbCAiLCBSYXdQb2lu
dGVyKGNlbGwpLCAiIG5vdCBmb3VuZCIpOworfQorCit2b2lkIFZlcmlmaWVyU2xvdFZpc2l0b3I6
OmR1bXBNYXJrZXJEYXRhKE1hcmtlZEJsb2NrJiBibG9jaywgSGVhcENlbGwqIGNlbGwpCit7Cisg
ICAgYXV0byBpdGVyYXRvciA9IG1fbWFya2VkQmxvY2tNYXAuZmluZCgmYmxvY2spOworICAgIGlm
IChpdGVyYXRvciAhPSBtX21hcmtlZEJsb2NrTWFwLmVuZCgpKSB7CisgICAgICAgIHVuc2lnbmVk
IGF0b21OdW1iZXIgPSBibG9jay5hdG9tTnVtYmVyKGNlbGwpOworICAgICAgICBkdW1wTWFya2Vy
RGF0YShjZWxsLCBpdGVyYXRvci0+dmFsdWUtPm1hcmtlckRhdGEoYXRvbU51bWJlcikpOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIGRhdGFMb2dMbigiQ2VsbCAiLCBSYXdQb2ludGVyKGNl
bGwpLCAiIG5vdCBmb3VuZCIpOworfQorCit2b2lkIFZlcmlmaWVyU2xvdFZpc2l0b3I6OmR1bXBN
YXJrZXJEYXRhKEhlYXBDZWxsKiBjZWxsLCBjb25zdCBNYXJrZXJEYXRhKiBtYXJrZXIpCit7Cisg
ICAgaWYgKCFtYXJrZXIpIHsKKyAgICAgICAgZGF0YUxvZ0xuKCJNYXJrZXIgZGF0YSBpcyBub3Qg
YXZhaWxhYmxlIGZvciBjZWxsICIsIFJhd1BvaW50ZXIoY2VsbCkpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgZGF0YUxvZ0xuKCJDZWxsICIsIFJhd1BvaW50ZXIoY2VsbCksICIgd2Fz
IHJlYWNoYWJsZSB2aWEgY2VsbCAiLCBSYXdQb2ludGVyKG1hcmtlci0+cGFyZW50KSwgIiBhdDoi
KTsKKyAgICBtYXJrZXItPnN0YWNrLT5kdW1wKFdURjo6ZGF0YUZpbGUoKSwgIiAgICAiKTsKK30K
KworYm9vbCBWZXJpZmllclNsb3RWaXNpdG9yOjppc0ZpcnN0VmlzaXQoKSBjb25zdAoreworICAg
IC8vIEluIHRoZSByZWd1bGFyIEdDLCB0aGlzIHJldHVybiB2YWx1ZSBpcyBvbmx5IHVzZWQgdG8g
Y29udHJvbCB3aGV0aGVyCisgICAgLy8gVW5saW5rZWRDb2RlQmxvY2tzIHdpbGwgYmUgYWdlZCAo
c2VlIFVubGlua2VkQ29kZUJsb2NrOjp2aXNpdENoaWxkcmVuSW1wbCgpKS4KKyAgICAvLyBGb3Ig
dGhlIHZlcmlmaWVyIEdDIHBhc3MsIHdlIHNob3VsZCBhbHdheXMgcmV0dXJuIGZhbHNlIGJlY2F1
c2Ugd2UgZG9uJ3QKKyAgICAvLyB3YW50IHRvIGRvIHRoZSBhZ2luZyBhY3Rpb24gYWdhaW4uCisg
ICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFZlcmlmaWVyU2xvdFZpc2l0b3I6OmlzTWFya2Vk
KGNvbnN0IHZvaWQqIHJhd0NlbGwpIGNvbnN0Cit7CisgICAgSGVhcENlbGwqIGNlbGwgPSBiaXR3
aXNlX2Nhc3Q8SGVhcENlbGwqPihyYXdDZWxsKTsKKyAgICBpZiAoY2VsbC0+aXNQcmVjaXNlQWxs
b2NhdGlvbigpKQorICAgICAgICByZXR1cm4gaXNNYXJrZWQoY2VsbC0+cHJlY2lzZUFsbG9jYXRp
b24oKSwgY2VsbCk7CisgICAgcmV0dXJuIGlzTWFya2VkKGNlbGwtPm1hcmtlZEJsb2NrKCksIGNl
bGwpOworfQorCitib29sIFZlcmlmaWVyU2xvdFZpc2l0b3I6OmlzTWFya2VkKFByZWNpc2VBbGxv
Y2F0aW9uJiBhbGxvY2F0aW9uLCBIZWFwQ2VsbCopIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcHJl
Y2lzZUFsbG9jYXRpb25NYXAuY29udGFpbnMoJmFsbG9jYXRpb24pOworfQorCitib29sIFZlcmlm
aWVyU2xvdFZpc2l0b3I6OmlzTWFya2VkKE1hcmtlZEJsb2NrJiBibG9jaywgSGVhcENlbGwqIGNl
bGwpIGNvbnN0Cit7CisgICAgYXV0byBlbnRyeSA9IG1fbWFya2VkQmxvY2tNYXAuZmluZCgmYmxv
Y2spOworICAgIGlmIChlbnRyeSA9PSBtX21hcmtlZEJsb2NrTWFwLmVuZCgpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICBhdXRvJiBkYXRhID0gZW50cnktPnZhbHVlOworICAgIHVuc2ln
bmVkIGF0b21OdW1iZXIgPSBibG9jay5hdG9tTnVtYmVyKGNlbGwpOworICAgIHJldHVybiBkYXRh
LT5pc01hcmtlZChhdG9tTnVtYmVyKTsKK30KKwordm9pZCBWZXJpZmllclNsb3RWaXNpdG9yOjpt
YXJrQXV4aWxpYXJ5KGNvbnN0IHZvaWQqIGJhc2UpCit7CisgICAgSGVhcENlbGwqIGNlbGwgPSBi
aXR3aXNlX2Nhc3Q8SGVhcENlbGwqPihiYXNlKTsKKworICAgIEFTU0VSVChjZWxsLT5oZWFwKCkg
PT0gaGVhcCgpKTsKKyAgICB0ZXN0QW5kU2V0TWFya2VkKGNlbGwpOworfQorCitib29sIFZlcmlm
aWVyU2xvdFZpc2l0b3I6Om11dGF0b3JJc1N0b3BwZWQoKSBjb25zdAoreworICAgIHJldHVybiB0
cnVlOworfQorCitib29sIFZlcmlmaWVyU2xvdFZpc2l0b3I6OnRlc3RBbmRTZXRNYXJrZWQoY29u
c3Qgdm9pZCogcmF3Q2VsbCkKK3sKKyAgICBIZWFwQ2VsbCogY2VsbCA9IGJpdHdpc2VfY2FzdDxI
ZWFwQ2VsbCo+KHJhd0NlbGwpOworICAgIGlmIChjZWxsLT5pc1ByZWNpc2VBbGxvY2F0aW9uKCkp
CisgICAgICAgIHJldHVybiB0ZXN0QW5kU2V0TWFya2VkKGNlbGwtPnByZWNpc2VBbGxvY2F0aW9u
KCkpOworICAgIHJldHVybiB0ZXN0QW5kU2V0TWFya2VkKGNlbGwtPm1hcmtlZEJsb2NrKCksIGNl
bGwpOworfQorCitib29sIFZlcmlmaWVyU2xvdFZpc2l0b3I6OnRlc3RBbmRTZXRNYXJrZWQoUHJl
Y2lzZUFsbG9jYXRpb24mIGFsbG9jYXRpb24pCit7CisgICAgc3RkOjp1bmlxdWVfcHRyPFByZWNp
c2VBbGxvY2F0aW9uRGF0YT4mIGRhdGEgPSBtX3ByZWNpc2VBbGxvY2F0aW9uTWFwLmFkZCgmYWxs
b2NhdGlvbiwgbnVsbHB0cikuaXRlcmF0b3ItPnZhbHVlOworICAgIGlmICghZGF0YSkgeworICAg
ICAgICBkYXRhID0gbWFrZVVuaXF1ZTxQcmVjaXNlQWxsb2NhdGlvbkRhdGE+KCZhbGxvY2F0aW9u
KTsKKyAgICAgICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OnZlcmJvc2VWZXJpZnlHQygpKSkKKyAg
ICAgICAgICAgIGRhdGEtPmFkZE1hcmtlckRhdGEoeyBwYXJlbnRDZWxsKCksIFN0YWNrVHJhY2U6
OmNhcHR1cmVTdGFja1RyYWNlKG1heE1hcmtpbmdTdGFja0ZyYW1lc1RvQ2FwdHVyZSwgMikgfSk7
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jv
b2wgVmVyaWZpZXJTbG90VmlzaXRvcjo6dGVzdEFuZFNldE1hcmtlZChNYXJrZWRCbG9jayYgYmxv
Y2ssIEhlYXBDZWxsKiBjZWxsKQoreworICAgIE1hcmtlZEJsb2NrRGF0YSogZGF0YSA9IGJsb2Nr
LnZlcmlmaWVyTWVtbzxNYXJrZWRCbG9ja0RhdGEqPigpOworICAgIGlmIChVTkxJS0VMWSghZGF0
YSkpIHsKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPE1hcmtlZEJsb2NrRGF0YT4mIGVudHJ5RGF0
YSA9IG1fbWFya2VkQmxvY2tNYXAuYWRkKCZibG9jaywgbnVsbHB0cikuaXRlcmF0b3ItPnZhbHVl
OworICAgICAgICBSRUxFQVNFX0FTU0VSVCghZW50cnlEYXRhKTsKKyAgICAgICAgZW50cnlEYXRh
ID0gbWFrZVVuaXF1ZTxNYXJrZWRCbG9ja0RhdGE+KCZibG9jayk7CisgICAgICAgIGRhdGEgPSBl
bnRyeURhdGEuZ2V0KCk7CisgICAgICAgIGJsb2NrLnNldFZlcmlmaWVyTWVtbyhkYXRhKTsKKyAg
ICB9CisKKyAgICB1bnNpZ25lZCBhdG9tTnVtYmVyID0gYmxvY2suYXRvbU51bWJlcihjZWxsKTsK
KyAgICBib29sIGFscmVhZHlTZXQgPSBkYXRhLT50ZXN0QW5kU2V0TWFya2VkKGF0b21OdW1iZXIp
OworICAgIGlmICghYWxyZWFkeVNldCAmJiBVTkxJS0VMWShPcHRpb25zOjp2ZXJib3NlVmVyaWZ5
R0MoKSkpCisgICAgICAgIGRhdGEtPmFkZE1hcmtlckRhdGEoYXRvbU51bWJlciwgeyBwYXJlbnRD
ZWxsKCksIFN0YWNrVHJhY2U6OmNhcHR1cmVTdGFja1RyYWNlKG1heE1hcmtpbmdTdGFja0ZyYW1l
c1RvQ2FwdHVyZSwgMikgfSk7CisgICAgcmV0dXJuIGFscmVhZHlTZXQ7Cit9CisKK3ZvaWQgVmVy
aWZpZXJTbG90VmlzaXRvcjo6c2V0TWFya2VkQW5kQXBwZW5kVG9NYXJrU3RhY2soSlNDZWxsKiBj
ZWxsKQoreworICAgIGlmIChtX3N1cHByZXNzVmVyaWZpZXIpCisgICAgICAgIHJldHVybjsKKyAg
ICBpZiAodGVzdEFuZFNldE1hcmtlZChjZWxsKSkKKyAgICAgICAgcmV0dXJuOworICAgIGFwcGVu
ZFRvTWFya1N0YWNrKGNlbGwpOworfQorCit2b2lkIFZlcmlmaWVyU2xvdFZpc2l0b3I6OnZpc2l0
QXNDb25zdHJhaW50KGNvbnN0IEpTQ2VsbCogY2VsbCkKK3sKKyAgICB2aXNpdENoaWxkcmVuKGNl
bGwpOworfQorCit2b2lkIFZlcmlmaWVyU2xvdFZpc2l0b3I6OnZpc2l0Q2hpbGRyZW4oY29uc3Qg
SlNDZWxsKiBjZWxsKQoreworICAgIFJFTEVBU0VfQVNTRVJUKGlzTWFya2VkKGNlbGwpKTsKKyAg
ICBzd2l0Y2ggKGNlbGwtPnR5cGUoKSkgeworICAgIGNhc2UgU3RyaW5nVHlwZToKKyAgICAgICAg
SlNTdHJpbmc6OnZpc2l0Q2hpbGRyZW4oY29uc3RfY2FzdDxKU0NlbGwqPihjZWxsKSwgKnRoaXMp
OworICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAgY2FzZSBGaW5hbE9iamVjdFR5cGU6Cisg
ICAgICAgIEpTRmluYWxPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oY29uc3RfY2FzdDxKU0NlbGwqPihj
ZWxsKSwgKnRoaXMpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgQXJyYXlUeXBlOgorICAg
ICAgICBKU0FycmF5Ojp2aXNpdENoaWxkcmVuKGNvbnN0X2Nhc3Q8SlNDZWxsKj4oY2VsbCksICp0
aGlzKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIC8v
IEZJWE1FOiBUaGlzIGNvdWxkIGJlIHNvIG11Y2ggYmV0dGVyLgorICAgICAgICAvLyBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYyNDYyCisgICAgICAgIGNlbGwtPm1l
dGhvZFRhYmxlKHZtKCkpLT52aXNpdENoaWxkcmVuKGNvbnN0X2Nhc3Q8SlNDZWxsKj4oY2VsbCks
ICp0aGlzKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCit9IC8vIG5hbWVzcGFjZSBKU0MK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1ZlcmlmaWVyU2xvdFZpc2l0b3IuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9WZXJpZmllclNsb3RWaXNp
dG9yLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVmVyaWZp
ZXJTbG90VmlzaXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTcxIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNp
bmNsdWRlICJBYnN0cmFjdFNsb3RWaXNpdG9yLmgiCisjaW5jbHVkZSAiSlNDSlNWYWx1ZS5oIgor
I2luY2x1ZGUgIk1hcmtlZEJsb2NrLmgiCisjaW5jbHVkZSAiVmlzaXRSYWNlS2V5LmgiCisjaW5j
bHVkZSAiV2Vhay5oIgorI2luY2x1ZGUgPG1lbW9yeT4KKyNpbmNsdWRlIDx3dGYvQml0bWFwLmg+
CisjaW5jbHVkZSA8d3RmL0RlcXVlLmg+CisjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KKyNp
bmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRl
IDx3dGYvU2hhcmVkVGFzay5oPgorCituYW1lc3BhY2UgV1RGIHsKKworY2xhc3MgU3RhY2tUcmFj
ZTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBDb25z
ZXJ2YXRpdmVSb290czsKK2NsYXNzIEhlYXA7CitjbGFzcyBIZWFwQ2VsbDsKK2NsYXNzIFByZWNp
c2VBbGxvY2F0aW9uOworCit1c2luZyBXVEY6OlN0YWNrVHJhY2U7CisKK2NsYXNzIFZlcmlmaWVy
U2xvdFZpc2l0b3IgOiBwdWJsaWMgQWJzdHJhY3RTbG90VmlzaXRvciB7CisgICAgV1RGX01BS0Vf
Tk9OQ09QWUFCTEUoVmVyaWZpZXJTbG90VmlzaXRvcik7CisgICAgV1RGX01BS0VfRkFTVF9BTExP
Q0FURUQ7CisgICAgdXNpbmcgQmFzZSA9IEFic3RyYWN0U2xvdFZpc2l0b3I7CitwdWJsaWM6Cisg
ICAgc3RydWN0IE1hcmtlckRhdGEgeworICAgICAgICBNYXJrZXJEYXRhKCkgPSBkZWZhdWx0Owor
ICAgICAgICBNYXJrZXJEYXRhKE1hcmtlckRhdGEmJikgPSBkZWZhdWx0OworICAgICAgICBNYXJr
ZXJEYXRhKEhlYXBDZWxsKiwgc3RkOjp1bmlxdWVfcHRyPFN0YWNrVHJhY2U+JiYpOworICAgICAg
ICBNYXJrZXJEYXRhJiBvcGVyYXRvcj0oTWFya2VyRGF0YSYmKSA9IGRlZmF1bHQ7CisKKyAgICAg
ICAgSGVhcENlbGwqIHBhcmVudCB7IG51bGxwdHIgfTsKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRy
PFN0YWNrVHJhY2U+IHN0YWNrOworICAgIH07CisKKyAgICBWZXJpZmllclNsb3RWaXNpdG9yKEhl
YXAmKTsKKyAgICB+VmVyaWZpZXJTbG90VmlzaXRvcigpOworCisgICAgdm9pZCBhcHBlbmQoY29u
c3QgQ29uc2VydmF0aXZlUm9vdHMmKSBmaW5hbDsKKyAgICB2b2lkIGFwcGVuZFVuYmFycmllcmVk
KEpTQ2VsbCopIGZpbmFsOworICAgIHZvaWQgYXBwZW5kSGlkZGVuVW5iYXJyaWVyZWQoSlNDZWxs
KikgZmluYWw7CisKKyAgICBib29sIGlzRmlyc3RWaXNpdCgpIGNvbnN0IGZpbmFsOworICAgIGJv
b2wgaXNNYXJrZWQoY29uc3Qgdm9pZCopIGNvbnN0IGZpbmFsOworICAgIGJvb2wgaXNNYXJrZWQo
TWFya2VkQmxvY2smLCBIZWFwQ2VsbCopIGNvbnN0IGZpbmFsOworICAgIGJvb2wgaXNNYXJrZWQo
UHJlY2lzZUFsbG9jYXRpb24mLCBIZWFwQ2VsbCopIGNvbnN0IGZpbmFsOworCisgICAgdm9pZCBt
YXJrQXV4aWxpYXJ5KGNvbnN0IHZvaWQqKSBmaW5hbDsKKworICAgIHZvaWQgcmVwb3J0RXh0cmFN
ZW1vcnlWaXNpdGVkKHNpemVfdCkgZmluYWwgeyB9CisjaWYgRU5BQkxFKFJFU09VUkNFX1VTQUdF
KQorICAgIHZvaWQgcmVwb3J0RXh0ZXJuYWxNZW1vcnlWaXNpdGVkKHNpemVfdCkgZmluYWwgeyB9
CisjZW5kaWYKKworICAgIGJvb2wgbXV0YXRvcklzU3RvcHBlZCgpIGNvbnN0IGZpbmFsOworCisg
ICAgdm9pZCBkaWRSYWNlKGNvbnN0IFZpc2l0UmFjZUtleSYpIGZpbmFsIHsgfQorICAgIHZvaWQg
ZHVtcChQcmludFN0cmVhbSYpIGNvbnN0IGZpbmFsIHsgfQorCisgICAgdm9pZCB2aXNpdEFzQ29u
c3RyYWludChjb25zdCBKU0NlbGwqKSBmaW5hbDsKKworICAgIHZvaWQgZHJhaW4oKTsKKworICAg
IHZvaWQgYWRkUGFyYWxsZWxDb25zdHJhaW50VGFzayhSZWZQdHI8U2hhcmVkVGFzazx2b2lkKEFi
c3RyYWN0U2xvdFZpc2l0b3ImKT4+KSBmaW5hbDsKKyAgICB2b2lkIGV4ZWN1dGVDb25zdHJhaW50
VGFza3MoKTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaExp
dmVDZWxsKGNvbnN0IEZ1bmN0b3ImKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiB2
b2lkIGZvckVhY2hMaXZlUHJlY2lzZUFsbG9jYXRpb24oY29uc3QgRnVuY3RvciYpOworICAgIHRl
bXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaExpdmVNYXJrZWRCbG9ja0NlbGwo
Y29uc3QgRnVuY3RvciYpOworCisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBkdW1wTWFya2Vy
RGF0YShIZWFwQ2VsbCopOworCitwcml2YXRlOgorICAgIGNsYXNzIE1hcmtlZEJsb2NrRGF0YSB7
CisgICAgICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworICAgICAgICBXVEZfTUFLRV9OT05D
T1BZQUJMRShNYXJrZWRCbG9ja0RhdGEpOworICAgIHB1YmxpYzoKKyAgICAgICAgdXNpbmcgQXRv
bXNCaXRtYXAgPSBCaXRtYXA8TWFya2VkQmxvY2s6OmF0b21zUGVyQmxvY2s+OworCisgICAgICAg
IE1hcmtlZEJsb2NrRGF0YShNYXJrZWRCbG9jayopOworCisgICAgICAgIE1hcmtlZEJsb2NrKiBi
bG9jaygpIGNvbnN0IHsgcmV0dXJuIG1fYmxvY2s7IH0KKyAgICAgICAgY29uc3QgQXRvbXNCaXRt
YXAmIGF0b21zKCkgY29uc3QgeyByZXR1cm4gbV9hdG9tczsgfQorCisgICAgICAgIGJvb2wgaXNN
YXJrZWQodW5zaWduZWQgYXRvbU51bWJlcikgeyByZXR1cm4gbV9hdG9tcy5nZXQoYXRvbU51bWJl
cik7IH0KKyAgICAgICAgYm9vbCB0ZXN0QW5kU2V0TWFya2VkKHVuc2lnbmVkIGF0b21OdW1iZXIp
IHsgcmV0dXJuIG1fYXRvbXMudGVzdEFuZFNldChhdG9tTnVtYmVyKTsgfQorCisgICAgICAgIHZv
aWQgYWRkTWFya2VyRGF0YSh1bnNpZ25lZCBhdG9tTnVtYmVyLCBNYXJrZXJEYXRhJiYpOworICAg
ICAgICBjb25zdCBNYXJrZXJEYXRhKiBtYXJrZXJEYXRhKHVuc2lnbmVkIGF0b21OdW1iZXIpIGNv
bnN0OworCisgICAgcHJpdmF0ZToKKyAgICAgICAgTWFya2VkQmxvY2sqIG1fYmxvY2sgeyBudWxs
cHRyIH07CisgICAgICAgIEF0b21zQml0bWFwIG1fYXRvbXM7CisgICAgICAgIFZlY3RvcjxNYXJr
ZXJEYXRhPiBtX21hcmtlcnM7CisgICAgfTsKKworICAgIGNsYXNzIFByZWNpc2VBbGxvY2F0aW9u
RGF0YSB7CisgICAgICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworICAgICAgICBXVEZfTUFL
RV9OT05DT1BZQUJMRShQcmVjaXNlQWxsb2NhdGlvbkRhdGEpOworICAgIHB1YmxpYzoKKyAgICAg
ICAgUHJlY2lzZUFsbG9jYXRpb25EYXRhKFByZWNpc2VBbGxvY2F0aW9uKik7CisgICAgICAgIFBy
ZWNpc2VBbGxvY2F0aW9uKiBhbGxvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9hbGxvY2F0aW9u
OyB9CisKKyAgICAgICAgdm9pZCBhZGRNYXJrZXJEYXRhKE1hcmtlckRhdGEmJik7CisgICAgICAg
IGNvbnN0IE1hcmtlckRhdGEqIG1hcmtlckRhdGEoKSBjb25zdDsKKworICAgIHByaXZhdGU6Cisg
ICAgICAgIFByZWNpc2VBbGxvY2F0aW9uKiBtX2FsbG9jYXRpb24geyBudWxscHRyIH07CisgICAg
ICAgIE1hcmtlckRhdGEgbV9tYXJrZXI7CisgICAgfTsKKworICAgIHVzaW5nIE1hcmtlZEJsb2Nr
TWFwID0gSGFzaE1hcDxNYXJrZWRCbG9jayosIHN0ZDo6dW5pcXVlX3B0cjxNYXJrZWRCbG9ja0Rh
dGE+PjsKKyAgICB1c2luZyBQcmVjaXNlQWxsb2NhdGlvbk1hcCA9IEhhc2hNYXA8UHJlY2lzZUFs
bG9jYXRpb24qLCBzdGQ6OnVuaXF1ZV9wdHI8UHJlY2lzZUFsbG9jYXRpb25EYXRhPj47CisKKyAg
ICB2b2lkIGFwcGVuZFRvTWFya1N0YWNrKEpTQ2VsbCopOworICAgIHZvaWQgYXBwZW5kU2xvdyhK
U0NlbGwqIGNlbGwpIHsgc2V0TWFya2VkQW5kQXBwZW5kVG9NYXJrU3RhY2soY2VsbCk7IH0KKwor
ICAgIGJvb2wgdGVzdEFuZFNldE1hcmtlZChjb25zdCB2b2lkKiByYXdDZWxsKTsKKyAgICBib29s
IHRlc3RBbmRTZXRNYXJrZWQoUHJlY2lzZUFsbG9jYXRpb24mKTsKKyAgICBib29sIHRlc3RBbmRT
ZXRNYXJrZWQoTWFya2VkQmxvY2smLCBIZWFwQ2VsbCopOworCisgICAgdm9pZCBzZXRNYXJrZWRB
bmRBcHBlbmRUb01hcmtTdGFjayhKU0NlbGwqKTsKKworICAgIHZvaWQgdmlzaXRDaGlsZHJlbihj
b25zdCBKU0NlbGwqKTsKKworICAgIHZvaWQgZHVtcE1hcmtlckRhdGEoUHJlY2lzZUFsbG9jYXRp
b24mLCBIZWFwQ2VsbCopOworICAgIHZvaWQgZHVtcE1hcmtlckRhdGEoTWFya2VkQmxvY2smLCBI
ZWFwQ2VsbCopOworICAgIHZvaWQgZHVtcE1hcmtlckRhdGEoSGVhcENlbGwqLCBjb25zdCBNYXJr
ZXJEYXRhKik7CisKKyAgICBQcmVjaXNlQWxsb2NhdGlvbk1hcCBtX3ByZWNpc2VBbGxvY2F0aW9u
TWFwOworICAgIE1hcmtlZEJsb2NrTWFwIG1fbWFya2VkQmxvY2tNYXA7CisgICAgQ29uY3VycmVu
dFB0ckhhc2hTZXQgbV9vcGFxdWVSb290U3RvcmFnZTsKKyAgICBEZXF1ZTxSZWZQdHI8U2hhcmVk
VGFzazx2b2lkKEFic3RyYWN0U2xvdFZpc2l0b3ImKT4+LCAzMj4gbV9jb25zdHJhaW50VGFza3M7
Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL1ZlcmlmaWVyU2xvdFZpc2l0b3JJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvVmVyaWZpZXJTbG90VmlzaXRvcklubGluZXMuaAkobm9uZXhpc3Rl
bnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9WZXJpZmllclNsb3RWaXNpdG9ySW5s
aW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjEgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkFi
c3RyYWN0U2xvdFZpc2l0b3JJbmxpbmVzLmgiCisjaW5jbHVkZSAiVmVyaWZpZXJTbG90VmlzaXRv
ci5oIgorCituYW1lc3BhY2UgSlNDIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KK3Zv
aWQgVmVyaWZpZXJTbG90VmlzaXRvcjo6Zm9yRWFjaExpdmVDZWxsKGNvbnN0IEZ1bmN0b3ImIGZ1
bmN0b3IpCit7CisgICAgZm9yRWFjaExpdmVQcmVjaXNlQWxsb2NhdGlvbihmdW5jdG9yKTsKKyAg
ICBmb3JFYWNoTGl2ZU1hcmtlZEJsb2NrQ2VsbChmdW5jdG9yKTsKK30KKwordGVtcGxhdGU8dHlw
ZW5hbWUgRnVuY3Rvcj4KK3ZvaWQgVmVyaWZpZXJTbG90VmlzaXRvcjo6Zm9yRWFjaExpdmVQcmVj
aXNlQWxsb2NhdGlvbihjb25zdCBGdW5jdG9yJiBmdW5jKQoreworICAgIGZvciAoYXV0byYgZW50
cnkgOiBtX3ByZWNpc2VBbGxvY2F0aW9uTWFwKSB7CisgICAgICAgIFByZWNpc2VBbGxvY2F0aW9u
KiBhbGxvY2F0aW9uID0gZW50cnkudmFsdWUtPmFsbG9jYXRpb24oKTsKKyAgICAgICAgZnVuYyhh
bGxvY2F0aW9uLT5jZWxsKCkpOworICAgIH0KK30KKwordGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rv
cj4KK3ZvaWQgVmVyaWZpZXJTbG90VmlzaXRvcjo6Zm9yRWFjaExpdmVNYXJrZWRCbG9ja0NlbGwo
Y29uc3QgRnVuY3RvciYgZnVuYykKK3sKKyAgICBmb3IgKGF1dG8mIGVudHJ5IDogbV9tYXJrZWRC
bG9ja01hcCkgeworICAgICAgICBhdXRvJiBkYXRhID0gZW50cnkudmFsdWU7CisgICAgICAgIE1h
cmtlZEJsb2NrKiBibG9jayA9IGRhdGEtPmJsb2NrKCk7CisgICAgICAgIGNvbnN0IE1hcmtlZEJs
b2NrRGF0YTo6QXRvbXNCaXRtYXAmIGF0b21zID0gIGRhdGEtPmF0b21zKCk7CisgICAgICAgIGZv
ciAoYXV0byBhdG9tTnVtYmVyIDogYXRvbXMpCisgICAgICAgICAgICBmdW5jKGJpdHdpc2VfY2Fz
dDxIZWFwQ2VsbCo+KGJsb2NrLT5oYW5kbGUoKS5hdG9tQXQoYXRvbU51bWJlcikpKTsKKyAgICB9
Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvVmlzaXRDb3VudGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvVmlzaXRDb3VudGVyLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL1Zpc2l0Q291bnRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI1LDcgKzI1LDcgQEAKIAog
I3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlICJTbG90VmlzaXRvci5oIgorI2luY2x1ZGUgIkFic3Ry
YWN0U2xvdFZpc2l0b3IuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAgLTMzLDEzICszMywxMyBA
QCBjbGFzcyBWaXNpdENvdW50ZXIgewogcHVibGljOgogICAgIFZpc2l0Q291bnRlcigpIHsgfQog
ICAgIAotICAgIFZpc2l0Q291bnRlcihTbG90VmlzaXRvciYgdmlzaXRvcikKKyAgICBWaXNpdENv
dW50ZXIoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKICAgICAgICAgOiBtX3Zpc2l0b3Io
JnZpc2l0b3IpCiAgICAgICAgICwgbV9pbml0aWFsVmlzaXRDb3VudCh2aXNpdG9yLnZpc2l0Q291
bnQoKSkKICAgICB7CiAgICAgfQogICAgIAotICAgIFNsb3RWaXNpdG9yJiB2aXNpdG9yKCkgY29u
c3QgeyByZXR1cm4gKm1fdmlzaXRvcjsgfQorICAgIEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0
b3IoKSBjb25zdCB7IHJldHVybiAqbV92aXNpdG9yOyB9CiAgICAgCiAgICAgc2l6ZV90IHZpc2l0
Q291bnQoKSBjb25zdAogICAgIHsKQEAgLTQ3LDcgKzQ3LDcgQEAgcHVibGljOgogICAgIH0KICAg
ICAKIHByaXZhdGU6Ci0gICAgU2xvdFZpc2l0b3IqIG1fdmlzaXRvciB7IG51bGxwdHIgfTsKKyAg
ICBBYnN0cmFjdFNsb3RWaXNpdG9yKiBtX3Zpc2l0b3IgeyBudWxscHRyIH07CiAgICAgc2l6ZV90
IG1faW5pdGlhbFZpc2l0Q291bnQgeyAwIH07CiB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9XZWFrQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL1dlYWtCbG9jay5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL1dlYWtCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC05OCwxMiAr
OTgsMTEgQEAgdm9pZCBXZWFrQmxvY2s6OnN3ZWVwKCkKICAgICBBU1NFUlQoIW1fc3dlZXBSZXN1
bHQuaXNOdWxsKCkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBDb250YWluZXJUeXBlPgotdm9p
ZCBXZWFrQmxvY2s6OnNwZWNpYWxpemVkVmlzaXQoQ29udGFpbmVyVHlwZSYgY29udGFpbmVyLCBT
bG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIENvbnRhaW5lclR5cGUsIHR5
cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFdlYWtCbG9jazo6c3BlY2lhbGl6ZWRWaXNpdChDb250YWlu
ZXJUeXBlJiBjb250YWluZXIsIFZpc2l0b3ImIHZpc2l0b3IpCiB7Ci0gICAgSGVhcFZlcnNpb24g
bWFya2luZ1ZlcnNpb24gPSB2aXNpdG9yLm1hcmtpbmdWZXJzaW9uKCk7Ci0KICAgICBzaXplX3Qg
Y291bnQgPSB3ZWFrSW1wbENvdW50KCk7CisgICAgSGVhcEFuYWx5emVyKiBoZWFwQW5hbHl6ZXIg
PSB2aXNpdG9yLnZtKCkuYWN0aXZlSGVhcEFuYWx5emVyKCk7CiAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBjb3VudDsgKytpKSB7CiAgICAgICAgIFdlYWtJbXBsKiB3ZWFrSW1wbCA9ICZ3ZWFr
SW1wbHMoKVtpXTsKICAgICAgICAgaWYgKHdlYWtJbXBsLT5zdGF0ZSgpICE9IFdlYWtJbXBsOjpM
aXZlKQpAQCAtMTE0LDEyICsxMTMsMTIgQEAgdm9pZCBXZWFrQmxvY2s6OnNwZWNpYWxpemVkVmlz
aXQoQ29udGFpbgogICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgSlNWYWx1ZSBqc1Zh
bHVlID0gd2Vha0ltcGwtPmpzVmFsdWUoKTsKLSAgICAgICAgaWYgKGNvbnRhaW5lci5pc01hcmtl
ZChtYXJraW5nVmVyc2lvbiwganNWYWx1ZS5hc0NlbGwoKSkpCisgICAgICAgIGlmICh2aXNpdG9y
LmlzTWFya2VkKGNvbnRhaW5lciwganNWYWx1ZS5hc0NlbGwoKSkpCiAgICAgICAgICAgICBjb250
aW51ZTsKICAgICAgICAgCiAgICAgICAgIGNvbnN0IGNoYXIqIHJlYXNvbiA9ICIiOwogICAgICAg
ICBjb25zdCBjaGFyKiogcmVhc29uUHRyID0gbnVsbHB0cjsKLSAgICAgICAgaWYgKFVOTElLRUxZ
KHZpc2l0b3IuaXNBbmFseXppbmdIZWFwKCkpKQorICAgICAgICBpZiAoVU5MSUtFTFkoaGVhcEFu
YWx5emVyKSkKICAgICAgICAgICAgIHJlYXNvblB0ciA9ICZyZWFzb247CiAKICAgICAgICAgaWYg
KCF3ZWFrSGFuZGxlT3duZXItPmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEhhbmRsZTxVbmtu
b3duPjo6d3JhcFNsb3QoJmNvbnN0X2Nhc3Q8SlNWYWx1ZSY+KGpzVmFsdWUpKSwgd2Vha0ltcGwt
PmNvbnRleHQoKSwgdmlzaXRvciwgcmVhc29uUHRyKSkKQEAgLTEyNywxNCArMTI2LDE0IEBAIHZv
aWQgV2Vha0Jsb2NrOjpzcGVjaWFsaXplZFZpc2l0KENvbnRhaW4KIAogICAgICAgICB2aXNpdG9y
LmFwcGVuZFVuYmFycmllcmVkKGpzVmFsdWUpOwogCi0gICAgICAgIGlmIChVTkxJS0VMWSh2aXNp
dG9yLmlzQW5hbHl6aW5nSGVhcCgpKSkgeworICAgICAgICBpZiAoVU5MSUtFTFkoaGVhcEFuYWx5
emVyKSkgewogICAgICAgICAgICAgaWYgKGpzVmFsdWUuaXNDZWxsKCkpCi0gICAgICAgICAgICAg
ICAgdmlzaXRvci5oZWFwQW5hbHl6ZXIoKS0+c2V0T3BhcXVlUm9vdFJlYWNoYWJpbGl0eVJlYXNv
bkZvckNlbGwoanNWYWx1ZS5hc0NlbGwoKSwgKnJlYXNvblB0cik7CisgICAgICAgICAgICAgICAg
aGVhcEFuYWx5emVyLT5zZXRPcGFxdWVSb290UmVhY2hhYmlsaXR5UmVhc29uRm9yQ2VsbChqc1Zh
bHVlLmFzQ2VsbCgpLCAqcmVhc29uUHRyKTsKICAgICAgICAgfQogICAgIH0KIH0KIAotdm9pZCBX
ZWFrQmxvY2s6OnZpc2l0KFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBXZWFrQmxvY2s6OnZp
c2l0KEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgLy8gSWYgYSBibG9jayBp
cyBjb21wbGV0ZWx5IGVtcHR5LCBhIHZpc2l0IHdvbid0IGhhdmUgYW55IGVmZmVjdC4KICAgICBp
ZiAoaXNFbXB0eSgpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha0Jsb2Nr
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha0Jsb2NrLmgJ
KHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtCbG9j
ay5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMi0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzIsOCArMzIsOCBAQAogCiBuYW1lc3BhY2UgSlNDIHsK
IAorY2xhc3MgQWJzdHJhY3RTbG90VmlzaXRvcjsKIGNsYXNzIEhlYXA7Ci1jbGFzcyBTbG90Vmlz
aXRvcjsKIAogREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoV2Vha0Jsb2Nr
KTsKIApAQCAtNjUsNyArNjUsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzd2VlcCgpOwogICAgIFN3
ZWVwUmVzdWx0IHRha2VTd2VlcFJlc3VsdCgpOwogCi0gICAgdm9pZCB2aXNpdChTbG90VmlzaXRv
ciYpOworICAgIHZvaWQgdmlzaXQoQWJzdHJhY3RTbG90VmlzaXRvciYpOwogCiAgICAgdm9pZCBy
ZWFwKCk7CiAKQEAgLTc1LDggKzc1LDggQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBzdGF0aWMg
RnJlZUNlbGwqIGFzRnJlZUNlbGwoV2Vha0ltcGwqKTsKICAgICAKLSAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBDb250YWluZXJUeXBlPgotICAgIHZvaWQgc3BlY2lhbGl6ZWRWaXNpdChDb250YWluZXJU
eXBlJiwgU2xvdFZpc2l0b3ImKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDb250YWluZXJUeXBl
LCB0eXBlbmFtZSBWaXNpdG9yPgorICAgIHZvaWQgc3BlY2lhbGl6ZWRWaXNpdChDb250YWluZXJU
eXBlJiwgVmlzaXRvciYpOwogCiAgICAgZXhwbGljaXQgV2Vha0Jsb2NrKENlbGxDb250YWluZXIp
OwogICAgIHZvaWQgZmluYWxpemUoV2Vha0ltcGwqKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL1dlYWtIYW5kbGVPd25lci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvV2Vha0hhbmRsZU93bmVyLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha0hhbmRsZU93bmVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC0zNSw3ICszNSw3IEBAIFdlYWtIYW5kbGVPd25lcjo6fldlYWtIYW5kbGVPd25lcigpCiB7
CiB9CiAKLWJvb2wgV2Vha0hhbmRsZU93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhI
YW5kbGU8VW5rbm93bj4sIHZvaWQqLCBTbG90VmlzaXRvciYsIGNvbnN0IGNoYXIqKikKK2Jvb2wg
V2Vha0hhbmRsZU93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhIYW5kbGU8VW5rbm93
bj4sIHZvaWQqLCBBYnN0cmFjdFNsb3RWaXNpdG9yJiwgY29uc3QgY2hhcioqKQogewogICAgIHJl
dHVybiBmYWxzZTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtIYW5k
bGVPd25lci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtI
YW5kbGVPd25lci5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9XZWFrSGFuZGxlT3duZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOSwxMyArMjksMTMgQEAKIAog
bmFtZXNwYWNlIEpTQyB7CiAKLWNsYXNzIFNsb3RWaXNpdG9yOworY2xhc3MgQWJzdHJhY3RTbG90
VmlzaXRvcjsKIAogY2xhc3MgSlNfRVhQT1JUX1BSSVZBVEUgV2Vha0hhbmRsZU93bmVyIHsKIHB1
YmxpYzoKICAgICB2aXJ0dWFsIH5XZWFrSGFuZGxlT3duZXIoKTsKICAgICAvLyByZWFzb24gd2ls
bCBvbmx5IGJlIG5vbi1udWxsIHdoZW4gZ2VuZXJhdGluZyBhIGRlYnVnIEdDIGhlYXAgc25hcHNo
b3QuCi0gICAgdmlydHVhbCBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEhhbmRsZTxV
bmtub3duPiwgdm9pZCogY29udGV4dCwgU2xvdFZpc2l0b3ImLCBjaGFyIGNvbnN0KiogcmVhc29u
ID0gbnVsbHB0cik7CisgICAgdmlydHVhbCBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3Rz
KEhhbmRsZTxVbmtub3duPiwgdm9pZCogY29udGV4dCwgQWJzdHJhY3RTbG90VmlzaXRvciYsIGNo
YXIgY29uc3QqKiByZWFzb24gPSBudWxscHRyKTsKICAgICB2aXJ0dWFsIHZvaWQgZmluYWxpemUo
SGFuZGxlPFVua25vd24+LCB2b2lkKiBjb250ZXh0KTsKIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL1dlYWtTZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9XZWFrU2V0LmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL1dlYWtTZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTUxLDcgKzUxLDcgQEAg
cHVibGljOgogICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0OwogICAgIGJvb2wgaXNUcml2aWFsbHlE
ZXN0cnVjdGlibGUoKSBjb25zdDsKIAotICAgIHZvaWQgdmlzaXQoU2xvdFZpc2l0b3ImKTsKKyAg
ICB2b2lkIHZpc2l0KEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKIAogICAgIHZvaWQgcmVhcCgpOwog
ICAgIHZvaWQgc3dlZXAoKTsKQEAgLTExNCw3ICsxMTQsNyBAQCBpbmxpbmUgdm9pZCBXZWFrU2V0
OjpsYXN0Q2hhbmNlVG9GaW5hbGl6CiAgICAgICAgIGJsb2NrLT5sYXN0Q2hhbmNlVG9GaW5hbGl6
ZSgpOwogfQogCi1pbmxpbmUgdm9pZCBXZWFrU2V0Ojp2aXNpdChTbG90VmlzaXRvciYgdmlzaXRv
cikKK2lubGluZSB2b2lkIFdlYWtTZXQ6OnZpc2l0KEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0
b3IpCiB7CiAgICAgZm9yIChXZWFrQmxvY2sqIGJsb2NrID0gbV9ibG9ja3MuaGVhZCgpOyBibG9j
azsgYmxvY2sgPSBibG9jay0+bmV4dCgpKQogICAgICAgICBibG9jay0+dmlzaXQodmlzaXRvcik7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU2hhZG93Q2hpY2tlbi5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1NoYWRv
d0NoaWNrZW4uY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW50ZXJwcmV0ZXIvU2hhZG93Q2hpY2tlbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00NDAsNyAr
NDQwLDcgQEAgdm9pZCBTaGFkb3dDaGlja2VuOjp1cGRhdGUoVk0mIHZtLCBDYWxsRgogICAgICAg
ICBkYXRhTG9nKCIgICAgQWZ0ZXIgY2xlYW4tdXA6ICIsICp0aGlzLCAiXG4iKTsKIH0KIAotdm9p
ZCBTaGFkb3dDaGlja2VuOjp2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordm9p
ZCBTaGFkb3dDaGlja2VuOjp2aXNpdENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0
b3IpCiB7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9sb2dDdXJzb3IgLSBtX2xvZzsgaS0tOykg
ewogICAgICAgICBKU09iamVjdCogY2FsbGVlID0gbV9sb2dbaV0uY2FsbGVlOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1NoYWRvd0NoaWNrZW4uaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU2hhZG93Q2hpY2tlbi5oCShy
ZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU2hh
ZG93Q2hpY2tlbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM1LDEzICszNSwxMyBAQAogCiBuYW1lc3BhY2Ug
SlNDIHsKIAorY2xhc3MgQWJzdHJhY3RTbG90VmlzaXRvcjsKIGNsYXNzIENhbGxGcmFtZTsKIGNs
YXNzIENvZGVCbG9jazsKIGNsYXNzIEpTQXJyYXk7CiBjbGFzcyBKU09iamVjdDsKIGNsYXNzIEpT
U2NvcGU7CiBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7Ci1jbGFzcyBTbG90VmlzaXRvcjsK
IGNsYXNzIFZNOwogCiAvLyBTaGFkb3dDaGlja2VuIGlzIGEgbG9nIHRoYXQgY2FuIGJlIHVzZWQg
dG8gcHJvZHVjZSBhIHNoYWRvdyBzdGFjayBvZiBDSElDS0VOLXN0eWxlIHN0YWNrIGZyYW1lcy4K
QEAgLTE5Niw3ICsxOTYsNyBAQCBwdWJsaWM6CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rv
cj4KICAgICB2b2lkIGl0ZXJhdGUoVk0mLCBDYWxsRnJhbWUqLCBjb25zdCBGdW5jdG9yJik7CiAg
ICAgCi0gICAgdm9pZCB2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CisgICAgdm9pZCB2aXNp
dENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKICAgICB2b2lkIHJlc2V0KCk7CiAgICAg
CiAgICAgLy8gSklUIHN1cHBvcnQuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0dD
QXdhcmVKSVRTdHViUm91dGluZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9HQ0F3YXJlSklUU3R1YlJvdXRpbmUuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0dDQXdhcmVKSVRTdHViUm91dGluZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTgg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIw
MjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC03Myw3ICs3Myw3IEBAIHZvaWQgR0NBd2FyZUpJVFN0dWJSb3V0aW5lOjpk
ZWxldGVGcm9tR0MKICAgICBkZWxldGUgdGhpczsKIH0KIAotdm9pZCBHQ0F3YXJlSklUU3R1YlJv
dXRpbmU6Om1hcmtSZXF1aXJlZE9iamVjdHNJbnRlcm5hbChTbG90VmlzaXRvciYpCit2b2lkIEdD
QXdhcmVKSVRTdHViUm91dGluZTo6bWFya1JlcXVpcmVkT2JqZWN0c0ludGVybmFsKEFic3RyYWN0
U2xvdFZpc2l0b3ImKQogewogfQogCkBAIC05Miw3ICs5Miw3IEBAIE1hcmtpbmdHQ0F3YXJlSklU
U3R1YlJvdXRpbmU6On5NYXJraW5nR0MKIHsKIH0KIAotdm9pZCBNYXJraW5nR0NBd2FyZUpJVFN0
dWJSb3V0aW5lOjptYXJrUmVxdWlyZWRPYmplY3RzSW50ZXJuYWwoU2xvdFZpc2l0b3ImIHZpc2l0
b3IpCit2b2lkIE1hcmtpbmdHQ0F3YXJlSklUU3R1YlJvdXRpbmU6Om1hcmtSZXF1aXJlZE9iamVj
dHNJbnRlcm5hbChBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGZvciAoYXV0
byYgZW50cnkgOiBtX2NlbGxzKQogICAgICAgICB2aXNpdG9yLmFwcGVuZChlbnRyeSk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0dDQXdhcmVKSVRTdHViUm91dGluZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvR0NBd2FyZUpJVFN0dWJSb3V0aW5l
LmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvR0NBd2Fy
ZUpJVFN0dWJSb3V0aW5lLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDEyLTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02MCw4ICs2MCw4IEBAIHB1Ymxp
YzoKICAgICB7CiAgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEdDQXdhcmVKSVRTdHViUm91
dGluZShjb2RlLCB2bSkpOwogICAgIH0KLSAgICAKLSAgICB2b2lkIG1hcmtSZXF1aXJlZE9iamVj
dHMoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisKKyAgICB2b2lkIG1hcmtSZXF1aXJlZE9iamVjdHMo
QWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKICAgICB7CiAgICAgICAgIG1hcmtSZXF1aXJl
ZE9iamVjdHNJbnRlcm5hbCh2aXNpdG9yKTsKICAgICB9CkBAIC03MSw3ICs3MSw3IEBAIHB1Ymxp
YzoKIHByb3RlY3RlZDoKICAgICB2b2lkIG9ic2VydmVaZXJvUmVmQ291bnQoKSBvdmVycmlkZTsK
ICAgICAKLSAgICB2aXJ0dWFsIHZvaWQgbWFya1JlcXVpcmVkT2JqZWN0c0ludGVybmFsKFNsb3RW
aXNpdG9yJik7CisgICAgdmlydHVhbCB2b2lkIG1hcmtSZXF1aXJlZE9iamVjdHNJbnRlcm5hbChB
YnN0cmFjdFNsb3RWaXNpdG9yJik7CiAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIEpJVFN0
dWJSb3V0aW5lU2V0OwpAQCAtODksNyArODksNyBAQCBwdWJsaWM6CiAgICAgfk1hcmtpbmdHQ0F3
YXJlSklUU3R1YlJvdXRpbmUoKSBvdmVycmlkZTsKICAgICAKIHByb3RlY3RlZDoKLSAgICB2b2lk
IG1hcmtSZXF1aXJlZE9iamVjdHNJbnRlcm5hbChTbG90VmlzaXRvciYpIG92ZXJyaWRlOworICAg
IHZvaWQgbWFya1JlcXVpcmVkT2JqZWN0c0ludGVybmFsKEFic3RyYWN0U2xvdFZpc2l0b3ImKSBv
dmVycmlkZTsKIAogcHJpdmF0ZToKICAgICBWZWN0b3I8V3JpdGVCYXJyaWVyPEpTQ2VsbD4+IG1f
Y2VsbHM7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFdvcmtsaXN0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFdvcmtsaXN0LmNwcAko
cmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRXb3JrbGlz
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDE2LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE2LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Bv
bHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L1BvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lLmNwcAkocmV2aXNpb24gMjcy
ODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Qb2x5bW9ycGhpY0NhbGxTdHViUm91
dGluZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDE1LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE1LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMzUsNyArMTM1LDcgQEAgYm9vbCBQb2x5bW9y
cGhpY0NhbGxTdHViUm91dGluZTo6dmlzaXRXZQogICAgIHJldHVybiBpc1N0aWxsTGl2ZTsKIH0K
IAotdm9pZCBQb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZTo6bWFya1JlcXVpcmVkT2JqZWN0c0lu
dGVybmFsKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBQb2x5bW9ycGhpY0NhbGxTdHViUm91
dGluZTo6bWFya1JlcXVpcmVkT2JqZWN0c0ludGVybmFsKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZp
c2l0b3IpCiB7CiAgICAgZm9yIChhdXRvJiB2YXJpYW50IDogbV92YXJpYW50cykKICAgICAgICAg
dmlzaXRvci5hcHBlbmQodmFyaWFudCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L1BvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9Qb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZS5oCShyZXZpc2lvbiAyNzI4
MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1BvbHltb3JwaGljQ2FsbFN0dWJSb3V0
aW5lLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDE1LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE1LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMDUsNyArMTA1LDcgQEAgcHVibGljOgogICAgIGJv
b2wgdmlzaXRXZWFrKFZNJikgZmluYWw7CiAKIHByaXZhdGU6Ci0gICAgdm9pZCBtYXJrUmVxdWly
ZWRPYmplY3RzSW50ZXJuYWwoU2xvdFZpc2l0b3ImKSBmaW5hbDsKKyAgICB2b2lkIG1hcmtSZXF1
aXJlZE9iamVjdHNJbnRlcm5hbChBYnN0cmFjdFNsb3RWaXNpdG9yJikgZmluYWw7CiAKICAgICBW
ZWN0b3I8V3JpdGVCYXJyaWVyPEpTQ2VsbD4sIDI+IG1fdmFyaWFudHM7CiAgICAgVW5pcXVlQXJy
YXk8dWludDMyX3Q+IG1fZmFzdENvdW50czsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0Fic3RyYWN0TW9kdWxlUmVjb3JkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9BYnN0cmFjdE1vZHVsZVJlY29yZC5jcHAJKHJldmlzaW9uIDI3
MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Fic3RyYWN0TW9kdWxlUmVj
b3JkLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTUtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTUtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTYwLDcgKzYwLDggQEAgdm9pZCBBYnN0cmFjdE1v
ZHVsZVJlY29yZDo6ZmluaXNoQ3JlYXRpbwogICAgIHB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6
ZnJvbVN0cmluZyh2bSwgImRlcGVuZGVuY2llc01hcCJfcyksIG1fZGVwZW5kZW5jaWVzTWFwLmdl
dCgpKTsKIH0KIAotdm9pZCBBYnN0cmFjdE1vZHVsZVJlY29yZDo6dmlzaXRDaGlsZHJlbihKU0Nl
bGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRv
cj4KK3ZvaWQgQWJzdHJhY3RNb2R1bGVSZWNvcmQ6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCog
Y2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBBYnN0cmFjdE1vZHVsZVJlY29yZCogdGhp
c09iamVjdCA9IGpzQ2FzdDxBYnN0cmFjdE1vZHVsZVJlY29yZCo+KGNlbGwpOwogICAgIEFTU0VS
VF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTcwLDYgKzcxLDgg
QEAgdm9pZCBBYnN0cmFjdE1vZHVsZVJlY29yZDo6dmlzaXRDaGlsZHJlbgogICAgIHZpc2l0b3Iu
YXBwZW5kKHRoaXNPYmplY3QtPm1fZGVwZW5kZW5jaWVzTWFwKTsKIH0KIAorREVGSU5FX1ZJU0lU
X0NISUxEUkVOKEFic3RyYWN0TW9kdWxlUmVjb3JkKTsKKwogdm9pZCBBYnN0cmFjdE1vZHVsZVJl
Y29yZDo6YXBwZW5kUmVxdWVzdGVkTW9kdWxlKGNvbnN0IElkZW50aWZpZXImIG1vZHVsZU5hbWUp
CiB7CiAgICAgbV9yZXF1ZXN0ZWRNb2R1bGVzLmFkZChtb2R1bGVOYW1lLmltcGwoKSk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BYnN0cmFjdE1vZHVsZVJlY29yZC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Fic3RyYWN0TW9kdWxl
UmVjb3JkLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0Fic3RyYWN0TW9kdWxlUmVjb3JkLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTM2LDcgKzEzNiw3IEBA
IHByb3RlY3RlZDoKICAgICBBYnN0cmFjdE1vZHVsZVJlY29yZChWTSYsIFN0cnVjdHVyZSosIGNv
bnN0IElkZW50aWZpZXImKTsKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTR2xvYmFsT2JqZWN0
KiwgVk0mKTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZp
c2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgdm9pZCBzZXRNb2R1
bGVFbnZpcm9ubWVudChKU0dsb2JhbE9iamVjdCosIEpTTW9kdWxlRW52aXJvbm1lbnQqKTsKIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJnTGlzdC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJnTGlzdC5jcHAJKHJldmlzaW9u
IDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FyZ0xpc3QuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDMt
MjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAy
MDAzLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAg
KiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKQEAgLTUxLDcgKzUxLDcgQEAgdm9pZCBBcmdMaXN0OjpnZXRTbGljZShpbnQgc3RhcnRJ
bmRleCwgQQogICAgIHJlc3VsdC5tX2FyZ0NvdW50ID0gIG1fYXJnQ291bnQgLSBzdGFydEluZGV4
OwogfQogCi12b2lkIE1hcmtlZEFyZ3VtZW50QnVmZmVyOjptYXJrTGlzdHMoU2xvdFZpc2l0b3Im
IHZpc2l0b3IsIExpc3RTZXQmIG1hcmtTZXQpCit2b2lkIE1hcmtlZEFyZ3VtZW50QnVmZmVyOjpt
YXJrTGlzdHMoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvciwgTGlzdFNldCYgbWFya1NldCkK
IHsKICAgICBMaXN0U2V0OjppdGVyYXRvciBlbmQgPSBtYXJrU2V0LmVuZCgpOwogICAgIGZvciAo
TGlzdFNldDo6aXRlcmF0b3IgaXQgPSBtYXJrU2V0LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkg
ewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJnTGlzdC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FyZ0xpc3QuaAkocmV2aXNpb24g
MjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJnTGlzdC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAw
MSBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQotICogIENvcHlyaWdodCAoQykgMjAwMy0y
MDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIw
MDMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAq
ICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYwpAQCAtMTE4LDcgKzExOCw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHJlc3VsdDsK
ICAgICB9CiAgICAgICAgIAotICAgIHN0YXRpYyB2b2lkIG1hcmtMaXN0cyhTbG90VmlzaXRvciYs
IExpc3RTZXQmKTsKKyAgICBzdGF0aWMgdm9pZCBtYXJrTGlzdHMoQWJzdHJhY3RTbG90VmlzaXRv
ciYsIExpc3RTZXQmKTsKIAogICAgIHZvaWQgZW5zdXJlQ2FwYWNpdHkoc2l6ZV90IHJlcXVlc3Rl
ZENhcGFjaXR5KQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Nh
Y2hlYWJsZUlkZW50aWZpZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9DYWNoZWFibGVJZGVudGlmaWVyLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlYWJsZUlkZW50aWZpZXIuaAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIwLTIwMjEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC0zOSwxMCArMzksMTAgQEAgdXNpbmcgV1RGOjpVbmlxdWVkU3RyaW5nSW1wbDsKIAogbmFt
ZXNwYWNlIEpTQyB7CiAKK2NsYXNzIEFic3RyYWN0U2xvdFZpc2l0b3I7CiBjbGFzcyBDb2RlQmxv
Y2s7CiBjbGFzcyBJZGVudGlmaWVyOwogY2xhc3MgSlNDZWxsOwotY2xhc3MgU2xvdFZpc2l0b3I7
CiAKIGNsYXNzIENhY2hlYWJsZUlkZW50aWZpZXIgewogcHVibGljOgpAQCAtODcsNyArODcsNyBA
QCBwdWJsaWM6CiAKICAgICB1aW50cHRyX3QgcmF3Qml0cygpIGNvbnN0IHsgcmV0dXJuIG1fYml0
czsgfQogCi0gICAgaW5saW5lIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImKSBjb25z
dDsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiBpbmxpbmUgdm9pZCB2aXNpdEFnZ3Jl
Z2F0ZShWaXNpdG9yJikgY29uc3Q7CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGR1bXAo
UHJpbnRTdHJlYW0mKSBjb25zdDsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvQ2FjaGVhYmxlSWRlbnRpZmllcklubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWFibGVJZGVudGlmaWVySW5saW5lcy5oCShyZXZpc2lv
biAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWFibGVJZGVu
dGlmaWVySW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMjAtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEzNyw3ICsxMzcsOCBAQCBpbmxpbmUgdm9p
ZCBDYWNoZWFibGVJZGVudGlmaWVyOjpzZXRVaWRCCiAgICAgbV9iaXRzID0gYml0d2lzZV9jYXN0
PHVpbnRwdHJfdD4odWlkKSB8IHNfdWlkVGFnOwogfQogCi1pbmxpbmUgdm9pZCBDYWNoZWFibGVJ
ZGVudGlmaWVyOjp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYgdmlzaXRvcikgY29uc3QKK3Rl
bXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+CitpbmxpbmUgdm9pZCBDYWNoZWFibGVJZGVudGlmaWVy
Ojp2aXNpdEFnZ3JlZ2F0ZShWaXNpdG9yJiB2aXNpdG9yKSBjb25zdAogewogICAgIGlmIChtX2Jp
dHMgJiYgaXNDZWxsKCkpCiAgICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQoY2VsbCgp
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NsYXNzSW5mby5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NsYXNzSW5mby5oCShyZXZp
c2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DbGFzc0luZm8u
aAkod29ya2luZyBjb3B5KQpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAx
OTk5LTIwMDEgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKICAqICBDb3B5cmlnaHQgKEMp
IDIwMDEgUGV0ZXIgS2VsbHkgKHBta0Bwb3N0LmNvbSkKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDMt
MjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAy
MDAzLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAg
KiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKQEAgLTQ0LDkgKzQ0LDYgQEAgc3RydWN0IE1ldGhvZFRhYmxlIHsKICAgICB1c2luZyBE
ZXN0cm95RnVuY3Rpb25QdHIgPSB2b2lkICgqKShKU0NlbGwqKTsKICAgICBEZXN0cm95RnVuY3Rp
b25QdHIgTUVUSE9EX1RBQkxFX0VOVFJZKGRlc3Ryb3kpOwogCi0gICAgdXNpbmcgVmlzaXRDaGls
ZHJlbkZ1bmN0aW9uUHRyID0gdm9pZCAoKikoSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKLSAgICBW
aXNpdENoaWxkcmVuRnVuY3Rpb25QdHIgTUVUSE9EX1RBQkxFX0VOVFJZKHZpc2l0Q2hpbGRyZW4p
OwotCiAgICAgdXNpbmcgR2V0Q2FsbERhdGFGdW5jdGlvblB0ciA9IENhbGxEYXRhICgqKShKU0Nl
bGwqKTsKICAgICBHZXRDYWxsRGF0YUZ1bmN0aW9uUHRyIE1FVEhPRF9UQUJMRV9FTlRSWShnZXRD
YWxsRGF0YSk7CiAKQEAgLTEyMCw3ICsxMTcsMTYgQEAgc3RydWN0IE1ldGhvZFRhYmxlIHsKICAg
ICB1c2luZyBFc3RpbWF0ZWRTaXplRnVuY3Rpb25QdHIgPSBzaXplX3QgKCopKEpTQ2VsbCosIFZN
Jik7CiAgICAgRXN0aW1hdGVkU2l6ZUZ1bmN0aW9uUHRyIE1FVEhPRF9UQUJMRV9FTlRSWShlc3Rp
bWF0ZWRTaXplKTsKIAotICAgIHVzaW5nIFZpc2l0T3V0cHV0Q29uc3RyYWludHNQdHIgPSB2b2lk
ICgqKShKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIHVzaW5nIFZpc2l0Q2hpbGRyZW5GdW5j
dGlvblB0ciA9IHZvaWQgKCopKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgVmlzaXRDaGls
ZHJlbkZ1bmN0aW9uUHRyIE1FVEhPRF9UQUJMRV9FTlRSWSh2aXNpdENoaWxkcmVuV2l0aFNsb3RW
aXNpdG9yKTsKKworICAgIHVzaW5nIFZpc2l0Q2hpbGRyZW5XaXRoQWJzdHJhY3RTbG90VmlzaXRv
clB0ciA9IHZvaWQgKCopKEpTQ2VsbCosIEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKKyAgICBWaXNp
dENoaWxkcmVuV2l0aEFic3RyYWN0U2xvdFZpc2l0b3JQdHIgTUVUSE9EX1RBQkxFX0VOVFJZKHZp
c2l0Q2hpbGRyZW5XaXRoQWJzdHJhY3RTbG90VmlzaXRvcik7CisKKyAgICBBTFdBWVNfSU5MSU5F
IHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBj
b25zdCB7IHZpc2l0Q2hpbGRyZW5XaXRoU2xvdFZpc2l0b3IoY2VsbCwgdmlzaXRvcik7IH0KKyAg
ICBBTFdBWVNfSU5MSU5FIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIEFic3RyYWN0
U2xvdFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0IHsgdmlzaXRDaGlsZHJlbldpdGhBYnN0cmFjdFNs
b3RWaXNpdG9yKGNlbGwsIHZpc2l0b3IpOyB9CisKKyAgICB1c2luZyBWaXNpdE91dHB1dENvbnN0
cmFpbnRzUHRyID0gdm9pZCAoKikoSlNDZWxsKiwgQWJzdHJhY3RTbG90VmlzaXRvciYpOwogICAg
IFZpc2l0T3V0cHV0Q29uc3RyYWludHNQdHIgTUVUSE9EX1RBQkxFX0VOVFJZKHZpc2l0T3V0cHV0
Q29uc3RyYWludHMpOwogfTsKIApAQCAtMTQ3LDcgKzE1Myw2IEBAIHN0cnVjdCBNZXRob2RUYWJs
ZSB7CiAgICAgSlNDYXN0aW5nSGVscGVyczo6SW5oZXJpdHNUcmFpdHM8Q2xhc3NOYW1lPjo6dHlw
ZVJhbmdlLCBcCiAgICAgeyBcCiAgICAgICAgICZDbGFzc05hbWU6OmRlc3Ryb3ksIFwKLSAgICAg
ICAgJkNsYXNzTmFtZTo6dmlzaXRDaGlsZHJlbiwgXAogICAgICAgICAmQ2xhc3NOYW1lOjpnZXRD
YWxsRGF0YSwgXAogICAgICAgICAmQ2xhc3NOYW1lOjpnZXRDb25zdHJ1Y3REYXRhLCBcCiAgICAg
ICAgICZDbGFzc05hbWU6OnB1dCwgXApAQCAtMTczLDYgKzE3OCw4IEBAIHN0cnVjdCBNZXRob2RU
YWJsZSB7CiAgICAgICAgICZDbGFzc05hbWU6OmR1bXBUb1N0cmVhbSwgXAogICAgICAgICAmQ2xh
c3NOYW1lOjphbmFseXplSGVhcCwgXAogICAgICAgICAmQ2xhc3NOYW1lOjplc3RpbWF0ZWRTaXpl
LCBcCisgICAgICAgICZDbGFzc05hbWU6OnZpc2l0Q2hpbGRyZW4sIFwKKyAgICAgICAgJkNsYXNz
TmFtZTo6dmlzaXRDaGlsZHJlbiwgXAogICAgICAgICAmQ2xhc3NOYW1lOjp2aXNpdE91dHB1dENv
bnN0cmFpbnRzLCBcCiAgICAgfSwgXAogICAgIENsYXNzTmFtZTo6VHlwZWRBcnJheVN0b3JhZ2VU
eXBlLCBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DbG9uZWRBcmd1bWVu
dHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Nsb25l
ZEFyZ3VtZW50cy5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0Nsb25lZEFyZ3VtZW50cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNjcsNyAr
MjY3LDggQEAgdm9pZCBDbG9uZWRBcmd1bWVudHM6Om1hdGVyaWFsaXplU3BlY2lhbAogICAgICAg
ICBtYXRlcmlhbGl6ZVNwZWNpYWxzKGdsb2JhbE9iamVjdCk7CiB9CiAKLXZvaWQgQ2xvbmVkQXJn
dW1lbnRzOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3Ip
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBDbG9uZWRBcmd1bWVudHM6OnZpc2l0
Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBDbG9u
ZWRBcmd1bWVudHMqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8Q2xvbmVkQXJndW1lbnRzKj4oY2VsbCk7
CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAt
Mjc1LDUgKzI3Niw3IEBAIHZvaWQgQ2xvbmVkQXJndW1lbnRzOjp2aXNpdENoaWxkcmVuKEpTQ2UK
ICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2NhbGxlZSk7CiB9CiAKK0RFRklORV9W
SVNJVF9DSElMRFJFTihDbG9uZWRBcmd1bWVudHMpOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xvbmVkQXJndW1lbnRzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xvbmVkQXJndW1lbnRz
LmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Ns
b25lZEFyZ3VtZW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxNS0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjIsNyArNjIsNyBAQCBwdWJsaWM6
CiAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmpl
Y3QqLCBKU1ZhbHVlIHByb3RvdHlwZSk7CiAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU2xv
d1B1dFN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBwcm90b3R5cGUpOwog
Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwor
ICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBERUNMQVJFX0lORk87CiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGlyZWN0QXJndW1lbnRzLmNw
cAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGly
ZWN0QXJndW1lbnRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTUtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTkwLDcgKzkwLDggQEAgc2l6ZV90
IERpcmVjdEFyZ3VtZW50czo6ZXN0aW1hdGVkU2l6ZShKUwogICAgIHJldHVybiBCYXNlOjplc3Rp
bWF0ZWRTaXplKGNlbGwsIHZtKSArIG1hcHBlZEFyZ3VtZW50c1NpemUgKyBtb2RpZmllZEFyZ3Vt
ZW50c1NpemU7CiB9CiAKLXZvaWQgRGlyZWN0QXJndW1lbnRzOjp2aXNpdENoaWxkcmVuKEpTQ2Vs
bCogdGhpc0NlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlz
aXRvcj4KK3ZvaWQgRGlyZWN0QXJndW1lbnRzOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIHRo
aXNDZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIERpcmVjdEFyZ3VtZW50cyogdGhpc09i
amVjdCA9IHN0YXRpY19jYXN0PERpcmVjdEFyZ3VtZW50cyo+KHRoaXNDZWxsKTsKICAgICBBU1NF
UlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC0xMDQsNiArMTA1
LDggQEAgdm9pZCBEaXJlY3RBcmd1bWVudHM6OnZpc2l0Q2hpbGRyZW4oSlNDZQogICAgIEdlbmVy
aWNBcmd1bWVudHM8RGlyZWN0QXJndW1lbnRzPjo6dmlzaXRDaGlsZHJlbih0aGlzQ2VsbCwgdmlz
aXRvcik7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihEaXJlY3RBcmd1bWVudHMpOworCiBT
dHJ1Y3R1cmUqIERpcmVjdEFyZ3VtZW50czo6Y3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCiB7CiAgICAgcmV0dXJu
IFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8o
RGlyZWN0QXJndW1lbnRzVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGlyZWN0QXJndW1lbnRzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGlyZWN0QXJndW1lbnRzLmgJKHJldmlz
aW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3Vt
ZW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxNS0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjUsNyArNjUsNyBAQCBwdWJsaWM6CiAgICAgc3Rh
dGljIERpcmVjdEFyZ3VtZW50cyogY3JlYXRlQnlDb3B5aW5nKEpTR2xvYmFsT2JqZWN0KiwgQ2Fs
bEZyYW1lKik7CiAKICAgICBzdGF0aWMgc2l6ZV90IGVzdGltYXRlZFNpemUoSlNDZWxsKiwgVk0m
KTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7
CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKICAgICAKICAgICB1aW50MzJfdCBpbnRlcm5h
bExlbmd0aCgpIGNvbnN0CiAgICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvRXZhbEV4ZWN1dGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0V2YWxFeGVjdXRhYmxlLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXZhbEV4ZWN1dGFibGUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCwgMjAxMywg
MjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAwOS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTAsNyArNTAsOCBAQCBhdXRvIEV2YWxFeGVjdXRhYmxl
OjplbnN1cmVUZW1wbGF0ZU9iamVjCiAgICAgcmV0dXJuIGVuc3VyZVRlbXBsYXRlT2JqZWN0TWFw
SW1wbChtX3RlbXBsYXRlT2JqZWN0TWFwKTsKIH0KIAotdm9pZCBFdmFsRXhlY3V0YWJsZTo6dmlz
aXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8
dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgRXZhbEV4ZWN1dGFibGU6OnZpc2l0Q2hpbGRyZW5JbXBs
KEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBFdmFsRXhlY3V0YWJsZSog
dGhpc09iamVjdCA9IGpzQ2FzdDxFdmFsRXhlY3V0YWJsZSo+KGNlbGwpOwogICAgIEFTU0VSVF9H
Q19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTY0LDQgKzY1LDYgQEAg
dm9pZCBFdmFsRXhlY3V0YWJsZTo6dmlzaXRDaGlsZHJlbihKU0NlbAogICAgIH0KIH0KIAorREVG
SU5FX1ZJU0lUX0NISUxEUkVOKEV2YWxFeGVjdXRhYmxlKTsKKwogfSAvLyBuYW1lc3BhY2UgSlND
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FdmFsRXhlY3V0YWJsZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V2YWxFeGVjdXRhYmxl
LmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V2
YWxFeGVjdXRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDA5LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDA5LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03OSw3ICs3OSw3IEBAIHByb3RlY3Rl
ZDoKICAgICB1c2luZyBCYXNlOjpmaW5pc2hDcmVhdGlvbjsKICAgICBFdmFsRXhlY3V0YWJsZShK
U0dsb2JhbE9iamVjdCosIGNvbnN0IFNvdXJjZUNvZGUmLCBib29sIGluU3RyaWN0Q29udGV4dCwg
RGVyaXZlZENvbnRleHRUeXBlLCBib29sIGlzQXJyb3dGdW5jdGlvbkNvbnRleHQsIGJvb2wgaXNJ
bnNpZGVPcmRpbmFyeUZ1bmN0aW9uLCBFdmFsQ29udGV4dFR5cGUsIE5lZWRzQ2xhc3NGaWVsZElu
aXRpYWxpemVyLCBQcml2YXRlQnJhbmRSZXF1aXJlbWVudCk7CiAKLSAgICBzdGF0aWMgdm9pZCB2
aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9D
SElMRFJFTjsKIAogICAgIHVuc2lnbmVkIG1fbmVlZHNDbGFzc0ZpZWxkSW5pdGlhbGl6ZXIgOiAx
OwogICAgIHVuc2lnbmVkIG1fcHJpdmF0ZUJyYW5kUmVxdWlyZW1lbnQgOiAxOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9uLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGNlcHRpb24uY3BwCShyZXZpc2lvbiAyNzI4
MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGNlcHRpb24uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE5
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0y
MDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtNTMsNyArNTMsOCBAQCBTdHJ1Y3R1cmUqIEV4Y2VwdGlvbjo6Y3JlYXRl
U3RydWN0dXJlKFZNCiAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmpl
Y3QsIHByb3RvdHlwZSwgVHlwZUluZm8oQ2VsbFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygp
KTsKIH0KIAotdm9pZCBFeGNlcHRpb246OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90
VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEV4Y2Vw
dGlvbjo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQog
ewogICAgIEV4Y2VwdGlvbiogdGhpc09iamVjdCA9IGpzQ2FzdDxFeGNlcHRpb24qPihjZWxsKTsK
ICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC02
NCw2ICs2NSw4IEBAIHZvaWQgRXhjZXB0aW9uOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2UKICAg
ICAgICAgZnJhbWUudmlzaXRDaGlsZHJlbih2aXNpdG9yKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NI
SUxEUkVOKEV4Y2VwdGlvbik7CisKIEV4Y2VwdGlvbjo6RXhjZXB0aW9uKFZNJiB2bSkKICAgICA6
IEJhc2Uodm0sIHZtLmV4Y2VwdGlvblN0cnVjdHVyZS5nZXQoKSkKIHsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbi5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGNlcHRpb24uaAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxOSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTUxLDcgKzUxLDcgQEAgcHVibGljOgogCiAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRl
U3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlIHByb3RvdHlwZSk7CiAKLSAg
ICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAg
REVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIERFQ0xBUkVfRVhQT1JUX0lORk87CiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25FeGVj
dXRhYmxlLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvRnVuY3Rpb25FeGVjdXRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY3LDcgKzY3
LDggQEAgRnVuY3Rpb25Db2RlQmxvY2sqIEZ1bmN0aW9uRXhlY3V0YWJsZTo6YgogICAgIHJldHVy
biBzdGF0aWNfY2FzdDxGdW5jdGlvbkNvZGVCbG9jayo+KGVkZ2UtPmNvZGVCbG9jaygpLT5iYXNl
bGluZUFsdGVybmF0aXZlKCkpOwogfQogCi12b2lkIEZ1bmN0aW9uRXhlY3V0YWJsZTo6dmlzaXRD
aGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlw
ZW5hbWUgVmlzaXRvcj4KK3ZvaWQgRnVuY3Rpb25FeGVjdXRhYmxlOjp2aXNpdENoaWxkcmVuSW1w
bChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgRnVuY3Rpb25FeGVjdXRh
YmxlKiB0aGlzT2JqZWN0ID0ganNDYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGNlbGwpOwogICAg
IEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTg2LDYg
Kzg3LDggQEAgdm9pZCBGdW5jdGlvbkV4ZWN1dGFibGU6OnZpc2l0Q2hpbGRyZW4oSgogICAgIH0K
IH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEZ1bmN0aW9uRXhlY3V0YWJsZSk7CisKIEZ1bmN0
aW9uRXhlY3V0YWJsZSogRnVuY3Rpb25FeGVjdXRhYmxlOjpmcm9tR2xvYmFsQ29kZSgKICAgICBj
b25zdCBJZGVudGlmaWVyJiBuYW1lLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25z
dCBTb3VyY2VDb2RlJiBzb3VyY2UsIAogICAgIEpTT2JqZWN0KiYgZXhjZXB0aW9uLCBpbnQgb3Zl
cnJpZGVMaW5lTnVtYmVyLCBPcHRpb25hbDxpbnQ+IGZ1bmN0aW9uQ29uc3RydWN0b3JQYXJhbWV0
ZXJzRW5kUG9zaXRpb24pCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5j
dGlvbkV4ZWN1dGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9GdW5jdGlvbkV4ZWN1dGFibGUuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25FeGVjdXRhYmxlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTkgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMjEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC0xNjYsNyArMTY2LDcgQEAgcHVibGljOgogICAgIEpTUGFyc2VyU2NyaXB0TW9kZSBzY3Jp
cHRNb2RlKCkgY29uc3QgeyByZXR1cm4gbV91bmxpbmtlZEV4ZWN1dGFibGUtPnNjcmlwdE1vZGUo
KTsgfQogICAgIFNvdXJjZUNvZGUgY2xhc3NTb3VyY2UoKSBjb25zdCB7IHJldHVybiBtX3VubGlu
a2VkRXhlY3V0YWJsZS0+Y2xhc3NTb3VyY2UoKTsgfQogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRD
aGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERS
RU47CiAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90bykKICAgICB7CiAgICAgICAgIHJl
dHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90bywgVHlwZUluZm8o
RnVuY3Rpb25FeGVjdXRhYmxlVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25SYXJlRGF0YS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25SYXJlRGF0YS5j
cHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1
bmN0aW9uUmFyZURhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxNS0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTEsNyArNTEsOCBAQCBTdHJ1
Y3R1cmUqIEZ1bmN0aW9uUmFyZURhdGE6OmNyZWF0ZVN0cnVjCiAgICAgcmV0dXJuIFN0cnVjdHVy
ZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oQ2VsbFR5cGUs
IFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKIH0KIAotdm9pZCBGdW5jdGlvblJhcmVEYXRhOjp2
aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0
ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBGdW5jdGlvblJhcmVEYXRhOjp2aXNpdENoaWxkcmVu
SW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgRnVuY3Rpb25SYXJl
RGF0YSogcmFyZURhdGEgPSBqc0Nhc3Q8RnVuY3Rpb25SYXJlRGF0YSo+KGNlbGwpOwogICAgIEFT
U0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2VsbCwgaW5mbygpKTsKQEAgLTYzLDYgKzY0LDggQEAg
dm9pZCBGdW5jdGlvblJhcmVEYXRhOjp2aXNpdENoaWxkcmVuKEpTQwogICAgIHZpc2l0b3IuYXBw
ZW5kKHJhcmVEYXRhLT5tX2V4ZWN1dGFibGUpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4o
RnVuY3Rpb25SYXJlRGF0YSk7CisKIEZ1bmN0aW9uUmFyZURhdGE6OkZ1bmN0aW9uUmFyZURhdGEo
Vk0mIHZtLCBFeGVjdXRhYmxlQmFzZSogZXhlY3V0YWJsZSkKICAgICA6IEJhc2Uodm0sIHZtLmZ1
bmN0aW9uUmFyZURhdGFTdHJ1Y3R1cmUuZ2V0KCkpCiAgICAgLCBtX29iamVjdEFsbG9jYXRpb25Q
cm9maWxlKCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uUmFy
ZURhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5j
dGlvblJhcmVEYXRhLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0Z1bmN0aW9uUmFyZURhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY1LDcgKzY1
LDcgQEAgcHVibGljOgogCiAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZN
JiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlIHByb3RvdHlwZSk7CiAKLSAgICBzdGF0aWMgdm9p
ZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJ
VF9DSElMRFJFTjsKIAogICAgIERFQ0xBUkVfSU5GTzsKIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50cy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNBcmd1bWVudHMuaAkocmV2aXNpb24gMjcyODMw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50cy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0y
MDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
NS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtNDQsNyArNDQsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgewogICAgIH0K
IAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsK
KyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogICAgIHN0YXRpYyBib29sIGdldE93blByb3Bl
cnR5U2xvdChKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0
eVNsb3QmKTsKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTT2Jq
ZWN0KiwgSlNHbG9iYWxPYmplY3QqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xv
dCYpOwogICAgIHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBKU0ds
b2JhbE9iamVjdCosIFByb3BlcnR5TmFtZUFycmF5JiwgRG9udEVudW1Qcm9wZXJ0aWVzTW9kZSk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljQXJndW1lbnRzSW5s
aW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVy
aWNBcmd1bWVudHNJbmxpbmVzLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0dlbmVyaWNBcmd1bWVudHNJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjAgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC0zMSw3ICszMSw4IEBACiBuYW1lc3BhY2UgSlNDIHsKIAogdGVtcGxhdGU8dHlwZW5hbWUg
VHlwZT4KLXZvaWQgR2VuZXJpY0FyZ3VtZW50czxUeXBlPjo6dmlzaXRDaGlsZHJlbihKU0NlbGwq
IHRoaXNDZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0
b3I+Cit2b2lkIEdlbmVyaWNBcmd1bWVudHM8VHlwZT46OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2Vs
bCogdGhpc0NlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgVHlwZSogdGhpc09iamVjdCA9
IHN0YXRpY19jYXN0PFR5cGUqPih0aGlzQ2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhF
UklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNDEsNiArNDIsOCBAQCB2b2lkIEdlbmVyaWNB
cmd1bWVudHM8VHlwZT46OnZpc2l0Q2hpbGRyCiAgICAgICAgIHZpc2l0b3IubWFya0F1eGlsaWFy
eSh0aGlzT2JqZWN0LT5tX21vZGlmaWVkQXJndW1lbnRzRGVzY3JpcHRvci5nZXRVbnNhZmUoKSk7
CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTl9XSVRIX01PRElGSUVSKHRlbXBsYXRlPHR5cGVu
YW1lIFR5cGU+LCBHZW5lcmljQXJndW1lbnRzPFR5cGU+KTsKKwogdGVtcGxhdGU8dHlwZW5hbWUg
VHlwZT4KIGJvb2wgR2VuZXJpY0FyZ3VtZW50czxUeXBlPjo6Z2V0T3duUHJvcGVydHlTbG90KEpT
T2JqZWN0KiBvYmplY3QsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFByb3BlcnR5TmFt
ZSBpZGVudCwgUHJvcGVydHlTbG90JiBzbG90KQogewpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvR2V0dGVyU2V0dGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9HZXR0ZXJTZXR0ZXIuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZXR0ZXJTZXR0ZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMiBIYXJy
aSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQogICogIENvcHlyaWdodCAoQykgMjAwMSBQZXRlciBL
ZWxseSAocG1rQHBvc3QuY29tKQotICogIENvcHlyaWdodCAoQykgMjAwNC0yMDE3IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDQtMjAyMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMzMs
NyArMzMsOCBAQCBTVEFUSUNfQVNTRVJUX0lTX1RSSVZJQUxMWV9ERVNUUlVDVElCTEUoCiAKIGNv
bnN0IENsYXNzSW5mbyBHZXR0ZXJTZXR0ZXI6OnNfaW5mbyA9IHsgIkdldHRlclNldHRlciIsIG51
bGxwdHIsIG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoR2V0dGVyU2V0dGVy
KSB9OwogCi12b2lkIEdldHRlclNldHRlcjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgR2V0
dGVyU2V0dGVyOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0
b3IpCiB7CiAgICAgR2V0dGVyU2V0dGVyKiB0aGlzT2JqZWN0ID0ganNDYXN0PEdldHRlclNldHRl
cio+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5m
bygpKTsKQEAgLTQzLDYgKzQ0LDggQEAgdm9pZCBHZXR0ZXJTZXR0ZXI6OnZpc2l0Q2hpbGRyZW4o
SlNDZWxsKgogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fc2V0dGVyKTsKIH0KIAor
REVGSU5FX1ZJU0lUX0NISUxEUkVOKEdldHRlclNldHRlcik7CisKIEpTVmFsdWUgY2FsbEdldHRl
cihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIGJhc2UsIEpTVmFsdWUgZ2V0
dGVyU2V0dGVyKQogewogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dldHRlclNldHRlci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dldHRlclNldHRlci5oCShyZXZpc2lvbiAy
NzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZXR0ZXJTZXR0ZXIuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5
LTIwMDEgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKICAqICBDb3B5cmlnaHQgKEMpIDIw
MDEgUGV0ZXIgS2VsbHkgKHBta0Bwb3N0LmNvbSkKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAx
OSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDAz
LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAg
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKQEAgLTgyLDcgKzgyLDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gY3JlYXRlKHZtLCBn
bG9iYWxPYmplY3QsIGdldHRlck9iamVjdCwgc2V0dGVyT2JqZWN0KTsKICAgICB9CiAKLSAgICBz
dGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVD
TEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIEpTT2JqZWN0KiBnZXR0ZXIoKSBjb25zdCB7IHJl
dHVybiBtX2dldHRlci5nZXQoKTsgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9IYXNoTWFwSW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSGFzaE1hcEltcGwuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9IYXNoTWFwSW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzAsNiAr
MzAsOSBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOX1dJVEhf
TU9ESUZJRVIodGVtcGxhdGU8PiwgSGFzaE1hcEJ1Y2tldDxIYXNoTWFwQnVja2V0RGF0YUtleT4p
OworREVGSU5FX1ZJU0lUX0NISUxEUkVOX1dJVEhfTU9ESUZJRVIodGVtcGxhdGU8PiwgSGFzaE1h
cEJ1Y2tldDxIYXNoTWFwQnVja2V0RGF0YUtleVZhbHVlPik7CisKIHRlbXBsYXRlPD4KIGNvbnN0
IENsYXNzSW5mbyBIYXNoTWFwQnVja2V0PEhhc2hNYXBCdWNrZXREYXRhS2V5Pjo6c19pbmZvID0K
ICAgICB7ICJIYXNoTWFwQnVja2V0IiwgbnVsbHB0ciwgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRF
X01FVEhPRF9UQUJMRShIYXNoTWFwQnVja2V0PEhhc2hNYXBCdWNrZXREYXRhS2V5PikgfTsKQEAg
LTM4LDggKzQxLDkgQEAgdGVtcGxhdGU8PgogY29uc3QgQ2xhc3NJbmZvIEhhc2hNYXBCdWNrZXQ8
SGFzaE1hcEJ1Y2tldERhdGFLZXlWYWx1ZT46OnNfaW5mbyA9CiAgICAgeyAiSGFzaE1hcEJ1Y2tl
dCIsIG51bGxwdHIsIG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSGFzaE1h
cEJ1Y2tldDxIYXNoTWFwQnVja2V0RGF0YUtleVZhbHVlPikgfTsKIAotdGVtcGxhdGUgPHR5cGVu
YW1lIERhdGE+Ci12b2lkIEhhc2hNYXBCdWNrZXQ8RGF0YT46OnZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIERhdGE+Cit0
ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBIYXNoTWFwQnVja2V0PERhdGE+Ojp2aXNp
dENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSGFz
aE1hcEJ1Y2tldCogdGhpc09iamVjdCA9IGpzQ2FzdDxIYXNoTWFwQnVja2V0Kj4oY2VsbCk7CiAg
ICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNTIs
OCArNTYsOSBAQCB2b2lkIEhhc2hNYXBCdWNrZXQ8RGF0YT46OnZpc2l0Q2hpbGRyZW4oCiAgICAg
dmlzaXRvci5hcHBlbmRWYWx1ZXMoYml0d2lzZV9jYXN0PFdyaXRlQmFycmllcjxVbmtub3duPio+
KCZ0aGlzT2JqZWN0LT5tX2RhdGEpLCBzaXplb2YoRGF0YSkgLyBzaXplb2YoV3JpdGVCYXJyaWVy
PFVua25vd24+KSk7CiB9CiAKLXRlbXBsYXRlIDx0eXBlbmFtZSBIYXNoTWFwQnVja2V0Pgotdm9p
ZCBIYXNoTWFwSW1wbDxIYXNoTWFwQnVja2V0Pjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGws
IFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgSGFzaE1hcEJ1Y2tldD4K
K3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEhhc2hNYXBJbXBsPEhhc2hNYXBCdWNr
ZXQ+Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7
CiAgICAgSGFzaE1hcEltcGwqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SGFzaE1hcEltcGwqPihjZWxs
KTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBA
IC02Niw2ICs3MSw4IEBAIHZvaWQgSGFzaE1hcEltcGw8SGFzaE1hcEJ1Y2tldD46OnZpc2l0Q2gK
ICAgICAgICAgdmlzaXRvci5tYXJrQXV4aWxpYXJ5KGJ1ZmZlcik7CiB9CiAKK0RFRklORV9WSVNJ
VF9DSElMRFJFTl9XSVRIX01PRElGSUVSKHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hNYXBCdWNrZXQ+
LCBIYXNoTWFwSW1wbDxIYXNoTWFwQnVja2V0Pik7CisKIHRlbXBsYXRlIDx0eXBlbmFtZSBIYXNo
TWFwQnVja2V0Pgogc2l6ZV90IEhhc2hNYXBJbXBsPEhhc2hNYXBCdWNrZXQ+Ojplc3RpbWF0ZWRT
aXplKEpTQ2VsbCogY2VsbCwgVk0mIHZtKQogewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSGFzaE1hcEltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9IYXNoTWFwSW1wbC5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9IYXNoTWFwSW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE4IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTQ4
LDcgKzE0OCw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fZGF0YS52YWx1ZS5nZXQoKTsK
ICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNp
dG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIEFMV0FZU19JTkxJTkUg
SGFzaE1hcEJ1Y2tldCogbmV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fbmV4dC5nZXQoKTsgfQogICAg
IEFMV0FZU19JTkxJTkUgSGFzaE1hcEJ1Y2tldCogcHJldigpIGNvbnN0IHsgcmV0dXJuIG1fcHJl
di5nZXQoKTsgfQpAQCAtMzY0LDcgKzM2NCw3IEBAIGNsYXNzIEhhc2hNYXBJbXBsIDogcHVibGlj
IEpTTm9uRmluYWxPYmoKIHB1YmxpYzoKICAgICB1c2luZyBCdWNrZXRUeXBlID0gSGFzaE1hcEJ1
Y2tldFR5cGU7CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RW
aXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIHN0YXRpYyBzaXpl
X3QgZXN0aW1hdGVkU2l6ZShKU0NlbGwqLCBWTSYpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9JbnRlcm5hbEZ1bmN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRlcm5hbEZ1bmN0aW9uLmNwcAkocmV2aXNpb24gMjcy
ODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50ZXJuYWxGdW5jdGlvbi5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSw3IEBACiAvKgogICogIENvcHlyaWdodCAoQykg
MTk5OS0yMDAyIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCiAgKiAgQ29weXJpZ2h0IChD
KSAyMDAxIFBldGVyIEtlbGx5IChwbWtAcG9zdC5jb20pCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA0
LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykg
MjAwNC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgog
ICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCkBAIC02NCw3ICs2NCw4IEBAIHZvaWQgSW50ZXJuYWxGdW5jdGlvbjo6ZmluaXNoQ3Jl
YXRpb24oVk0KICAgICB9CiB9CiAKLXZvaWQgSW50ZXJuYWxGdW5jdGlvbjo6dmlzaXRDaGlsZHJl
bihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUg
VmlzaXRvcj4KK3ZvaWQgSW50ZXJuYWxGdW5jdGlvbjo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxs
KiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEludGVybmFsRnVuY3Rpb24qIHRoaXNP
YmplY3QgPSBqc0Nhc3Q8SW50ZXJuYWxGdW5jdGlvbio+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19P
QkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTczLDYgKzc0LDggQEAgdm9p
ZCBJbnRlcm5hbEZ1bmN0aW9uOjp2aXNpdENoaWxkcmVuKEpTQwogICAgIHZpc2l0b3IuYXBwZW5k
KHRoaXNPYmplY3QtPm1fb3JpZ2luYWxOYW1lKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVO
X1dJVEhfTU9ESUZJRVIoSlNfRVhQT1JUX1BSSVZBVEUsIEludGVybmFsRnVuY3Rpb24pOworCiBj
b25zdCBTdHJpbmcmIEludGVybmFsRnVuY3Rpb246Om5hbWUoKQogewogICAgIGNvbnN0IFN0cmlu
ZyYgbmFtZSA9IG1fb3JpZ2luYWxOYW1lLT50cnlHZXRWYWx1ZSgpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50ZXJuYWxGdW5jdGlvbi5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGVybmFsRnVuY3Rpb24uaAkocmV2aXNpb24g
MjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50ZXJuYWxGdW5jdGlv
bi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMp
IDE5OTktMjAwMCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQotICogIENvcHlyaWdodCAo
QykgMjAwMy0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmln
aHQgKEMpIDIwMDMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiAgQ29w
eXJpZ2h0IChDKSAyMDA3IENhbWVyb24gWndhcmljaCAoY3d6d2FyaWNoQHV3YXRlcmxvby5jYSkK
ICAqICBDb3B5cmlnaHQgKEMpIDIwMDcgTWFrcyBPcmxvdmljaAogICoKQEAgLTQ2LDcgKzQ2LDcg
QEAgcHVibGljOgogCiAgICAgREVDTEFSRV9FWFBPUlRfSU5GTzsKIAotICAgIEpTX0VYUE9SVF9Q
UklWQVRFIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsK
KyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOX1dJVEhfTU9ESUZJRVIoSlNfRVhQT1JUX1BSSVZB
VEUpOwogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgY29uc3QgU3RyaW5nJiBuYW1lKCk7CiAgICAg
Y29uc3QgU3RyaW5nIGRpc3BsYXlOYW1lKFZNJik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9JbnRsQ29sbGF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0ludGxDb2xsYXRvci5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxDb2xsYXRvci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNyArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDE1IEFuZHkgVmFuV2Fn
b25lciAoYW5keUB2YW53YWdvbmVyLmZhbWlseSkKICAqIENvcHlyaWdodCAoQykgMjAxNSBTdWtv
bHNhayBTYWtzaHV3b25nIChzdWtvbHNha0BnbWFpbC5jb20pCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTYtMjAyMCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTY1LDcgKzY1LDggQEAgdm9pZCBJbnRsQ29sbGF0b3I6OmZp
bmlzaENyZWF0aW9uKFZNJiB2bQogICAgIEFTU0VSVChpbmhlcml0cyh2bSwgaW5mbygpKSk7CiB9
CiAKLXZvaWQgSW50bENvbGxhdG9yOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZp
c2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBJbnRsQ29s
bGF0b3I6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikK
IHsKICAgICBJbnRsQ29sbGF0b3IqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SW50bENvbGxhdG9yKj4o
Y2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkp
OwpAQCAtNzUsNiArNzYsOCBAQCB2b2lkIEludGxDb2xsYXRvcjo6dmlzaXRDaGlsZHJlbihKU0Nl
bGwqCiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9ib3VuZENvbXBhcmUpOwogfQog
CitERUZJTkVfVklTSVRfQ0hJTERSRU4oSW50bENvbGxhdG9yKTsKKwogVmVjdG9yPFN0cmluZz4g
SW50bENvbGxhdG9yOjpzb3J0TG9jYWxlRGF0YShjb25zdCBTdHJpbmcmIGxvY2FsZSwgUmVsZXZh
bnRFeHRlbnNpb25LZXkga2V5KQogewogICAgIC8vIDkuMSBJbnRlcm5hbCBzbG90cyBvZiBTZXJ2
aWNlIENvbnN0cnVjdG9ycyAmIDEwLjIuMyBJbnRlcm5hbCBzbG90cyAoRUNNQS00MDIgMi4wKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bENvbGxhdG9yLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bENvbGxhdG9yLmgJKHJl
dmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxDb2xs
YXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAo
QykgMjAxNSBBbmR5IFZhbldhZ29uZXIgKGFuZHlAdmFud2Fnb25lci5mYW1pbHkpCisgKiBDb3B5
cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC04MCw3ICs4MSw3IEBAIHB1YmxpYzoKIHByaXZhdGU6
CiAgICAgSW50bENvbGxhdG9yKFZNJiwgU3RydWN0dXJlKik7CiAgICAgdm9pZCBmaW5pc2hDcmVh
dGlvbihWTSYpOwotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZp
c2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgYm9vbCB1cGRhdGVD
YW5Eb0FTQ0lJVUNBRFVDRVRDb21wYXJpc29uKCkgY29uc3Q7CiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0ludGxEYXRlVGltZUZvcm1hdC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERhdGVUaW1lRm9ybWF0LmNwcAkocmV2
aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERhdGVU
aW1lRm9ybWF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5
cmlnaHQgKEMpIDIwMTUgQW5keSBWYW5XYWdvbmVyIChhbmR5QHZhbndhZ29uZXIuZmFtaWx5KQot
ICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC05MCw3ICs5MCw4IEBAIHZv
aWQgSW50bERhdGVUaW1lRm9ybWF0OjpmaW5pc2hDcmVhdGlvbigKICAgICBBU1NFUlQoaW5oZXJp
dHModm0sIGluZm8oKSkpOwogfQogCi12b2lkIEludGxEYXRlVGltZUZvcm1hdDo6dmlzaXRDaGls
ZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5h
bWUgVmlzaXRvcj4KK3ZvaWQgSW50bERhdGVUaW1lRm9ybWF0Ojp2aXNpdENoaWxkcmVuSW1wbChK
U0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSW50bERhdGVUaW1lRm9ybWF0
KiB0aGlzT2JqZWN0ID0ganNDYXN0PEludGxEYXRlVGltZUZvcm1hdCo+KGNlbGwpOwogICAgIEFT
U0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTEwMCw2ICsx
MDEsOCBAQCB2b2lkIEludGxEYXRlVGltZUZvcm1hdDo6dmlzaXRDaGlsZHJlbihKCiAgICAgdmlz
aXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9ib3VuZEZvcm1hdCk7CiB9CiAKK0RFRklORV9WSVNJ
VF9DSElMRFJFTihJbnRsRGF0ZVRpbWVGb3JtYXQpOworCiB2b2lkIEludGxEYXRlVGltZUZvcm1h
dDo6c2V0Qm91bmRGb3JtYXQoVk0mIHZtLCBKU0JvdW5kRnVuY3Rpb24qIGZvcm1hdCkKIHsKICAg
ICBtX2JvdW5kRm9ybWF0LnNldCh2bSwgdGhpcywgZm9ybWF0KTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0ludGxEYXRlVGltZUZvcm1hdC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxEYXRlVGltZUZvcm1hdC5oCShyZXZpc2lv
biAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsRGF0ZVRpbWVG
b3JtYXQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQg
KEMpIDIwMTUgQW5keSBWYW5XYWdvbmVyIChhbmR5QHZhbndhZ29uZXIuZmFtaWx5KQorICogQ29w
eXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODUsNyArODYsNyBAQCBwdWJsaWM6CiBwcml2YXRl
OgogICAgIEludGxEYXRlVGltZUZvcm1hdChWTSYsIFN0cnVjdHVyZSopOwogICAgIHZvaWQgZmlu
aXNoQ3JlYXRpb24oVk0mKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCos
IFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIHN0YXRp
YyBWZWN0b3I8U3RyaW5nPiBsb2NhbGVEYXRhKGNvbnN0IFN0cmluZyYsIFJlbGV2YW50RXh0ZW5z
aW9uS2V5KTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bExvY2Fs
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bExv
Y2FsZS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0ludGxMb2NhbGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAq
IENvcHlyaWdodCAoQykgMjAyMCBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgor
ICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTgsNyArNTksOCBAQCB2b2lkIEludGxM
b2NhbGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKICAgICBBU1NFUlQoaW5oZXJpdHModm0sIGlu
Zm8oKSkpOwogfQogCi12b2lkIEludGxMb2NhbGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxs
LCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lk
IEludGxMb2NhbGU6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlz
aXRvcikKIHsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEludGxMb2NhbGUqPihjZWxs
KTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBA
IC02Niw2ICs2OCw4IEBAIHZvaWQgSW50bExvY2FsZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGMK
ICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwogfQogCitERUZJ
TkVfVklTSVRfQ0hJTERSRU4oSW50bExvY2FsZSk7CisKIGNsYXNzIExvY2FsZUlEQnVpbGRlciBm
aW5hbCB7CiBwdWJsaWM6CiAgICAgYm9vbCBpbml0aWFsaXplKGNvbnN0IFN0cmluZyYpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bExvY2FsZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxMb2NhbGUuaAkocmV2aXNpb24g
MjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bExvY2FsZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAyMCBT
b255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtNzEsNyArNzIsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIEludGxMb2Nh
bGUoVk0mLCBTdHJ1Y3R1cmUqKTsKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7Ci0gICAg
c3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERF
Q0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBTdHJpbmcga2V5d29yZFZhbHVlKEFTQ0lJTGl0
ZXJhbCwgYm9vbCBpc0Jvb2xlYW4gPSBmYWxzZSkgY29uc3Q7CiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0ludGxOdW1iZXJGb3JtYXQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxOdW1iZXJGb3JtYXQuY3BwCShyZXZpc2lv
biAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTnVtYmVyRm9y
bWF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQg
KEMpIDIwMTUgQW5keSBWYW5XYWdvbmVyIChhbmR5QHZhbndhZ29uZXIuZmFtaWx5KQogICogQ29w
eXJpZ2h0IChDKSAyMDE2IFN1a29sc2FrIFNha3NodXdvbmcgKHN1a29sc2FrQGdtYWlsLmNvbSkK
LSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAyMCBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1l
bnQgSW5jLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtNzMsNyArNzMsOCBAQCB2b2lkIEludGxOdW1i
ZXJGb3JtYXQ6OmZpbmlzaENyZWF0aW9uKFZNCiAgICAgQVNTRVJUKGluaGVyaXRzKHZtLCBpbmZv
KCkpKTsKIH0KIAotdm9pZCBJbnRsTnVtYmVyRm9ybWF0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCog
Y2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgor
dm9pZCBJbnRsTnVtYmVyRm9ybWF0Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZp
c2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSW50bE51bWJlckZvcm1hdCogdGhpc09iamVjdCA9IGpz
Q2FzdDxJbnRsTnVtYmVyRm9ybWF0Kj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhF
UklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtODMsNiArODQsOCBAQCB2b2lkIEludGxOdW1i
ZXJGb3JtYXQ6OnZpc2l0Q2hpbGRyZW4oSlNDCiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVj
dC0+bV9ib3VuZEZvcm1hdCk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihJbnRsTnVtYmVy
Rm9ybWF0KTsKKwogVmVjdG9yPFN0cmluZz4gSW50bE51bWJlckZvcm1hdDo6bG9jYWxlRGF0YShj
b25zdCBTdHJpbmcmIGxvY2FsZSwgUmVsZXZhbnRFeHRlbnNpb25LZXkga2V5KQogewogICAgIC8v
IDkuMSBJbnRlcm5hbCBzbG90cyBvZiBTZXJ2aWNlIENvbnN0cnVjdG9ycyAmIDExLjIuMyBJbnRl
cm5hbCBzbG90cyAoRUNNQS00MDIgMi4wKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSW50bE51bWJlckZvcm1hdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0ludGxOdW1iZXJGb3JtYXQuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE51bWJlckZvcm1hdC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDYgKzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxNSBBbmR5IFZhbldh
Z29uZXIgKGFuZHlAdmFud2Fnb25lci5mYW1pbHkpCiAgKiBDb3B5cmlnaHQgKEMpIDIwMjAgU29u
eSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTk2LDcgKzk3LDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBJbnRsTnVtYmVy
Rm9ybWF0KFZNJiwgU3RydWN0dXJlKik7CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOwot
ICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAg
ICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgc3RhdGljIFZlY3RvcjxTdHJpbmc+IGxv
Y2FsZURhdGEoY29uc3QgU3RyaW5nJiwgUmVsZXZhbnRFeHRlbnNpb25LZXkpOwogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsUGx1cmFsUnVsZXMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxQbHVyYWxSdWxlcy5jcHAJ
KHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxQ
bHVyYWxSdWxlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogQ29w
eXJpZ2h0IChDKSAyMDE4IEFuZHkgVmFuV2Fnb25lciAoYW5keUB2YW53YWdvbmVyLmZhbWlseSkK
LSAqIENvcHlyaWdodCAoQykgMjAxOS0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjEsNyArNjEsOCBAQCB2
b2lkIEludGxQbHVyYWxSdWxlczo6ZmluaXNoQ3JlYXRpb24oVk0mCiAgICAgQVNTRVJUKGluaGVy
aXRzKHZtLCBpbmZvKCkpKTsKIH0KIAotdm9pZCBJbnRsUGx1cmFsUnVsZXM6OnZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1l
IFZpc2l0b3I+Cit2b2lkIEludGxQbHVyYWxSdWxlczo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxs
KiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEludGxQbHVyYWxSdWxlcyogdGhpc09i
amVjdCA9IGpzQ2FzdDxJbnRsUGx1cmFsUnVsZXMqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JK
RUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC02OSw2ICs3MCw4IEBAIHZvaWQg
SW50bFBsdXJhbFJ1bGVzOjp2aXNpdENoaWxkcmVuKEpTQ2UKICAgICBCYXNlOjp2aXNpdENoaWxk
cmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSW50
bFBsdXJhbFJ1bGVzKTsKKwogVmVjdG9yPFN0cmluZz4gSW50bFBsdXJhbFJ1bGVzOjpsb2NhbGVE
YXRhKGNvbnN0IFN0cmluZyYsIFJlbGV2YW50RXh0ZW5zaW9uS2V5KQogewogICAgIHJldHVybiB7
IH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsUGx1cmFsUnVsZXMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsUGx1cmFs
UnVsZXMuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSW50bFBsdXJhbFJ1bGVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKgog
ICogQ29weXJpZ2h0IChDKSAyMDE4IEFuZHkgVmFuV2Fnb25lciAoYW5keUB2YW53YWdvbmVyLmZh
bWlseSkKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY2LDcgKzY3LDcgQEAgcHVi
bGljOgogcHJpdmF0ZToKICAgICBJbnRsUGx1cmFsUnVsZXMoVk0mLCBTdHJ1Y3R1cmUqKTsKICAg
ICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJl
bihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAK
ICAgICBzdGF0aWMgVmVjdG9yPFN0cmluZz4gbG9jYWxlRGF0YShjb25zdCBTdHJpbmcmLCBSZWxl
dmFudEV4dGVuc2lvbktleSk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0ludGxSZWxhdGl2ZVRpbWVGb3JtYXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0ludGxSZWxhdGl2ZVRpbWVGb3JtYXQuY3BwCShyZXZpc2lvbiAyNzI4
MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsUmVsYXRpdmVUaW1lRm9y
bWF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQg
KEMpIDIwMjAgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAqIENvcHlyaWdo
dCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTYyLDcgKzYzLDggQEAgdm9pZCBJbnRsUmVsYXRpdmVUaW1l
Rm9ybWF0OjpmaW5pc2hDcmVhdAogICAgIEFTU0VSVChpbmhlcml0cyh2bSwgaW5mbygpKSk7CiB9
CiAKLXZvaWQgSW50bFJlbGF0aXZlVGltZUZvcm1hdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNl
bGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3Zv
aWQgSW50bFJlbGF0aXZlVGltZUZvcm1hdDo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxs
LCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SW50
bFJlbGF0aXZlVGltZUZvcm1hdCo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJ
VFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTcwLDYgKzcyLDggQEAgdm9pZCBJbnRsUmVsYXRp
dmVUaW1lRm9ybWF0Ojp2aXNpdENoaWxkcgogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09i
amVjdCwgdmlzaXRvcik7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihJbnRsUmVsYXRpdmVU
aW1lRm9ybWF0KTsKKwogVmVjdG9yPFN0cmluZz4gSW50bFJlbGF0aXZlVGltZUZvcm1hdDo6bG9j
YWxlRGF0YShjb25zdCBTdHJpbmcmIGxvY2FsZSwgUmVsZXZhbnRFeHRlbnNpb25LZXkga2V5KQog
ewogICAgIEFTU0VSVF9VTlVTRUQoa2V5LCBrZXkgPT0gUmVsZXZhbnRFeHRlbnNpb25LZXk6Ok51
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxSZWxhdGl2ZVRpbWVG
b3JtYXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRs
UmVsYXRpdmVUaW1lRm9ybWF0LmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0ludGxSZWxhdGl2ZVRpbWVGb3JtYXQuaAkod29ya2luZyBjb3B5KQpA
QCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMjAgU29ueSBJbnRlcmFjdGl2
ZSBFbnRlcnRhaW5tZW50IEluYy4KLSAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAtMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTY0LDcgKzY0LDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBJbnRsUmVsYXRpdmVUaW1lRm9y
bWF0KFZNJiwgU3RydWN0dXJlKik7CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOwotICAg
IHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBE
RUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgc3RhdGljIFZlY3RvcjxTdHJpbmc+IGxvY2Fs
ZURhdGEoY29uc3QgU3RyaW5nJiwgUmVsZXZhbnRFeHRlbnNpb25LZXkpOwogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsU2VnbWVudEl0ZXJhdG9yLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsU2VnbWVudEl0ZXJhdG9y
LmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SW50bFNlZ21lbnRJdGVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAv
KgogICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY0LDEzICs2NSwxNiBAQCB2b2lkIElu
dGxTZWdtZW50SXRlcmF0b3I6OmZpbmlzaENyZWF0aW9uCiAgICAgbV9zdHJpbmcuc2V0KHZtLCB0
aGlzLCBzdHJpbmcpOwogfQogCi12b2lkIEludGxTZWdtZW50SXRlcmF0b3I6OnZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1l
IFZpc2l0b3I+Cit2b2lkIEludGxTZWdtZW50SXRlcmF0b3I6OnZpc2l0Q2hpbGRyZW5JbXBsKEpT
Q2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0g
anNDYXN0PEludGxTZWdtZW50SXRlcmF0b3IqPihjZWxsKTsKICAgICBCYXNlOjp2aXNpdENoaWxk
cmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3Qt
Pm1fc3RyaW5nKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEludGxTZWdtZW50SXRlcmF0
b3IpOworCiBKU09iamVjdCogSW50bFNlZ21lbnRJdGVyYXRvcjo6bmV4dChKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0KQogewogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxTZWdtZW50SXRlcmF0b3IuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsU2VnbWVudEl0
ZXJhdG9yLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0ludGxTZWdtZW50SXRlcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAK
IC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTMsNyArNTQsNyBAQCBwdWJsaWM6
CiAKICAgICBKU09iamVjdCogbmV4dChKU0dsb2JhbE9iamVjdCopOwogCi0gICAgc3RhdGljIHZv
aWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklT
SVRfQ0hJTERSRU47CiAKIHByaXZhdGU6CiAgICAgSW50bFNlZ21lbnRJdGVyYXRvcihWTSYsIFN0
cnVjdHVyZSosIHN0ZDo6dW5pcXVlX3B0cjxVQnJlYWtJdGVyYXRvciwgVUJyZWFrSXRlcmF0b3JE
ZWxldGVyPiYmLCBCb3g8VmVjdG9yPFVDaGFyPj4mJiwgSW50bFNlZ21lbnRlcjo6R3JhbnVsYXJp
dHkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFNlZ21lbnRzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsU2VnbWVu
dHMuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9JbnRsU2VnbWVudHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAq
IENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMDksMTEgKzExMCwxNCBAQCBKU09iamVjdCog
SW50bFNlZ21lbnRzOjpjcmVhdGVTZWdtZW50SXRlCiAgICAgcmV0dXJuIEludGxTZWdtZW50SXRl
cmF0b3I6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LT5zZWdtZW50SXRlcmF0b3JTdHJ1Y3R1cmUo
KSwgV1RGTW92ZShzZWdtZW50ZXIpLCBtX2J1ZmZlciwgbV9zdHJpbmcuZ2V0KCksIG1fZ3JhbnVs
YXJpdHkpOwogfQogCi12b2lkIEludGxTZWdtZW50czo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNl
bGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3Zv
aWQgSW50bFNlZ21lbnRzOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3Im
IHZpc2l0b3IpCiB7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxJbnRsU2VnbWVudHMq
PihjZWxsKTsKICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwog
ICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fc3RyaW5nKTsKIH0KIAorREVGSU5FX1ZJ
U0lUX0NISUxEUkVOKEludGxTZWdtZW50cyk7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFNlZ21lbnRzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFNlZ21lbnRzLmgJKHJldmlzaW9u
IDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxTZWdtZW50cy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAy
MCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC01NCw3ICs1NSw3IEBAIHB1YmxpYzoKICAgICBKU1ZhbHVlIGNvbnRhaW5pbmco
SlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlIGluZGV4VmFsdWUpOwogICAgIEpTT2JqZWN0KiBjcmVh
dGVTZWdtZW50SXRlcmF0b3IoSlNHbG9iYWxPYmplY3QqKTsKIAotICAgIHN0YXRpYyB2b2lkIHZp
c2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NI
SUxEUkVOOwogCiBwcml2YXRlOgogICAgIEludGxTZWdtZW50cyhWTSYsIFN0cnVjdHVyZSosIHN0
ZDo6dW5pcXVlX3B0cjxVQnJlYWtJdGVyYXRvciwgVUJyZWFrSXRlcmF0b3JEZWxldGVyPiYmLCBC
b3g8VmVjdG9yPFVDaGFyPj4mJiwgSW50bFNlZ21lbnRlcjo6R3JhbnVsYXJpdHkpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3
LmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNBcnJheUJ1ZmZlclZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTU1LDcgKzE1NSw4IEBA
IHZvaWQgSlNBcnJheUJ1ZmZlclZpZXc6OmZpbmlzaENyZWF0aW9uKFYKICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCi12b2lkIEpTQXJyYXlCdWZmZXJWaWV3Ojp2aXNpdENo
aWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBl
bmFtZSBWaXNpdG9yPgordm9pZCBKU0FycmF5QnVmZmVyVmlldzo6dmlzaXRDaGlsZHJlbkltcGwo
SlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTQXJyYXlCdWZmZXJWaWV3
KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQXJyYXlCdWZmZXJWaWV3Kj4oY2VsbCk7CiAgICAgQVNT
RVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtMTY5LDYgKzE3
MCw4IEBAIHZvaWQgSlNBcnJheUJ1ZmZlclZpZXc6OnZpc2l0Q2hpbGRyZW4oSlMKICAgICB9CiB9
CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU0FycmF5QnVmZmVyVmlldyk7CisKIGJvb2wgSlNB
cnJheUJ1ZmZlclZpZXc6OnB1dCgKICAgICBKU0NlbGwqIGNlbGwsIEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsCiAg
ICAgUHV0UHJvcGVydHlTbG90JiBzbG90KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIwIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMTcyLDcgKzE3Miw3IEBAIHByb3RlY3RlZDoKICAgICAKICAgICBzdGF0aWMg
Ym9vbCBwdXQoSlNDZWxsKiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUs
IFB1dFByb3BlcnR5U2xvdCYpOwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0Nl
bGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAgICAgCiBw
dWJsaWM6CiAgICAgVHlwZWRBcnJheU1vZGUgbW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fbW9kZTsg
fQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUl0ZXJhdG9yLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5SXRl
cmF0b3IuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0FycmF5SXRlcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMjAtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY4LDExICs2OCwxNCBAQCB2
b2lkIEpTQXJyYXlJdGVyYXRvcjo6ZmluaXNoQ3JlYXRpb24oVk0mCiAgICAgICAgIEJhc2U6Omlu
dGVybmFsRmllbGQoaW5kZXgpLnNldCh2bSwgdGhpcywgdmFsdWVzW2luZGV4XSk7CiB9CiAKLXZv
aWQgSlNBcnJheUl0ZXJhdG9yOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0
b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0FycmF5SXRl
cmF0b3I6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikK
IHsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQXJyYXlJdGVyYXRvcio+KGNlbGwp
OwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKICAg
ICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwogfQogCitERUZJTkVf
VklTSVRfQ0hJTERSRU4oSlNBcnJheUl0ZXJhdG9yKTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5SXRlcmF0b3IuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5SXRlcmF0b3Iu
aAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNB
cnJheUl0ZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAyMC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNzgsNyArNzgsNyBAQCBwdWJsaWM6CiAKICAg
ICBERUNMQVJFX0lORk87CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCos
IFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogcHJpdmF0ZToK
ICAgICBKU0FycmF5SXRlcmF0b3IoVk0mLCBTdHJ1Y3R1cmUqKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTQXN5bmNHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXN5bmNHZW5lcmF0b3IuY3BwCShyZXZpc2lv
biAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FzeW5jR2VuZXJh
dG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE5LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC01OSwxMSArNTksMTQgQEAgdm9pZCBKU0FzeW5jR2VuZXJh
dG9yOjpmaW5pc2hDcmVhdGlvbihWTQogICAgICAgICBpbnRlcm5hbEZpZWxkKGluZGV4KS5zZXQo
dm0sIHRoaXMsIHZhbHVlc1tpbmRleF0pOwogfQogCi12b2lkIEpTQXN5bmNHZW5lcmF0b3I6OnZp
c2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRl
PHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTQXN5bmNHZW5lcmF0b3I6OnZpc2l0Q2hpbGRyZW5J
bXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBhdXRvKiB0aGlzT2Jq
ZWN0ID0ganNDYXN0PEpTQXN5bmNHZW5lcmF0b3IqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JK
RUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAgICAgQmFzZTo6dmlzaXRDaGlsZHJl
bih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTQXN5
bmNHZW5lcmF0b3IpOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTQXN5bmNHZW5lcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FzeW5jR2VuZXJhdG9yLmgJKHJldmlzaW9uIDI3Mjgz
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXN5bmNHZW5lcmF0b3IuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTkg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE5LTIw
MjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC05NSw3ICs5NSw3IEBAIHB1YmxpYzoKIAogICAgIERFQ0xBUkVfRVhQT1JU
X0lORk87CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNp
dG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogcHJpdmF0ZToKICAgICBKU0Fz
eW5jR2VuZXJhdG9yKFZNJiwgU3RydWN0dXJlKik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0JpZ0ludC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNCaWdJbnQuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0JpZ0ludC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiAr
MSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDE3IENhaW8gTGltYSA8dGljYWlvbGltYUBn
bWFpbC5jb20+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY3LDcg
KzY3LDggQEAgSlNCaWdJbnQ6OkpTQmlnSW50KFZNJiB2bSwgU3RydWN0dXJlKiBzdAogICAgICwg
bV9kYXRhKHZtLCB0aGlzLCBkYXRhLCBsZW5ndGgpCiB7IH0KIAotdm9pZCBKU0JpZ0ludDo6dmlz
aXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8
dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNCaWdJbnQ6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2Vs
bCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganND
YXN0PEpTQmlnSW50Kj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlz
T2JqZWN0LCBpbmZvKCkpOwpAQCAtNzYsNiArNzcsOCBAQCB2b2lkIEpTQmlnSW50Ojp2aXNpdENo
aWxkcmVuKEpTQ2VsbCogY2VsCiAgICAgICAgIHZpc2l0b3IubWFya0F1eGlsaWFyeShkYXRhKTsK
IH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTQmlnSW50KTsKKwogdm9pZCBKU0JpZ0ludDo6
aW5pdGlhbGl6ZShJbml0aWFsaXphdGlvblR5cGUgaW5pdFR5cGUpCiB7CiAgICAgaWYgKGluaXRU
eXBlID09IEluaXRpYWxpemF0aW9uVHlwZTo6V2l0aFplcm8pCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0JpZ0ludC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTQmlnSW50LmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQmlnSW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiAr
MSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDE3IENhaW8gTGltYSA8dGljYWlvbGltYUBn
bWFpbC5jb20+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTUwLDcg
KzUwLDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJl
RmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IFN0cnVjdHVyZUlzSW1tb3J0YWwgfCBPdmVy
cmlkZXNUb1RoaXM7CiAgICAgZnJpZW5kIGNsYXNzIENhY2hlZEJpZ0ludDsKIAotICAgIHN0YXRp
YyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJF
X1ZJU0lUX0NISUxEUkVOOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNw
YWNlQWNjZXNzPgogICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCb3VuZEZ1bmN0aW9uLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JvdW5kRnVuY3Rp
b24uY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0JvdW5kRnVuY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjQ5LDcgKzI0
OSw4IEBAIHZvaWQgSlNCb3VuZEZ1bmN0aW9uOjpmaW5pc2hDcmVhdGlvbihWTSYKICAgICBBU1NF
UlQoaW5oZXJpdHModm0sIGluZm8oKSkpOwogfQogCi12b2lkIEpTQm91bmRGdW5jdGlvbjo6dmlz
aXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8
dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNCb3VuZEZ1bmN0aW9uOjp2aXNpdENoaWxkcmVuSW1w
bChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNCb3VuZEZ1bmN0aW9u
KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQm91bmRGdW5jdGlvbio+KGNlbGwpOwogICAgIEFTU0VS
VF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTI2MSw0ICsyNjIs
NiBAQCB2b2lkIEpTQm91bmRGdW5jdGlvbjo6dmlzaXRDaGlsZHJlbihKU0NlCiAgICAgdmlzaXRv
ci5hcHBlbmQodGhpc09iamVjdC0+bV9uYW1lTWF5QmVOdWxsKTsKIH0KIAorREVGSU5FX1ZJU0lU
X0NISUxEUkVOKEpTQm91bmRGdW5jdGlvbik7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCb3VuZEZ1bmN0aW9uLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCb3VuZEZ1bmN0aW9uLmgJKHJl
dmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQm91bmRG
dW5jdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMS0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODQsNyArODQsNyBAQCBwcml2YXRlOgogICAg
IEpTQm91bmRGdW5jdGlvbihWTSYsIE5hdGl2ZUV4ZWN1dGFibGUqLCBKU0dsb2JhbE9iamVjdCos
IFN0cnVjdHVyZSosIEpTT2JqZWN0KiB0YXJnZXRGdW5jdGlvbiwgSlNWYWx1ZSBib3VuZFRoaXMs
IEpTSW1tdXRhYmxlQnV0dGVyZmx5KiBib3VuZEFyZ3MsIEpTU3RyaW5nKiBuYW1lTWF5QmVOdWxs
LCBkb3VibGUgbGVuZ3RoKTsKIAogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKLSAgICBz
dGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVD
TEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIFdyaXRlQmFycmllcjxKU09iamVjdD4gbV90YXJn
ZXRGdW5jdGlvbjsKICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4gbV9ib3VuZFRoaXM7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NhbGxlZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDYWxsZWUuY3BwCShyZXZpc2lvbiAy
NzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NhbGxlZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0LCAy
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
NC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtNTAsNyArNTAsOCBAQCB2b2lkIEpTQ2FsbGVlOjpmaW5pc2hDcmVh
dGlvbihWTSYgdm0pCiAgICAgQVNTRVJUKGluaGVyaXRzKHZtLCBpbmZvKCkpKTsKIH0KIAotdm9p
ZCBKU0NhbGxlZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNp
dG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNDYWxsZWU6OnZpc2l0Q2hp
bGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU0NhbGxl
ZSogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0NhbGxlZSo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19P
QkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTU5LDQgKzYwLDYgQEAgdm9p
ZCBKU0NhbGxlZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbAogICAgIHZpc2l0b3IuYXBwZW5k
KHRoaXNPYmplY3QtPm1fc2NvcGUpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNDYWxs
ZWUpOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTQ2FsbGVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNDYWxsZWUuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNDYWxsZWUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMDAsNyArMTAwLDcgQEAgcHJv
dGVjdGVkOgogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKICAgICB1c2luZyBCYXNlOjpm
aW5pc2hDcmVhdGlvbjsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwg
U2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiBwcml2YXRlOgog
ICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSw3
IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAxIEhhcnJpIFBvcnRlbiAocG9ydGVu
QGtkZS5vcmcpCiAgKiAgQ29weXJpZ2h0IChDKSAyMDAxIFBldGVyIEtlbGx5IChwbWtAcG9zdC5j
b20pCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0zMiw2ICszMiw3IEBACiAjaW5j
bHVkZSAiSlNMb2NrLmgiCiAjaW5jbHVkZSAiSlNUeXBlSW5mby5oIgogI2luY2x1ZGUgIlNsb3RW
aXNpdG9yLmgiCisjaW5jbHVkZSAiU2xvdFZpc2l0b3JNYWNyb3MuaCIKICNpbmNsdWRlICJTdWJz
cGFjZUFjY2Vzcy5oIgogI2luY2x1ZGUgIlR5cGVkQXJyYXlUeXBlLmgiCiAjaW5jbHVkZSAiV3Jp
dGVCYXJyaWVyLmgiCkBAIC0xNjcsOCArMTY4LDggQEAgcHVibGljOgogICAgIHNpemVfdCBlc3Rp
bWF0ZWRTaXplSW5CeXRlcyhWTSYpIGNvbnN0OwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRp
YyBzaXplX3QgZXN0aW1hdGVkU2l6ZShKU0NlbGwqLCBWTSYpOwogCi0gICAgc3RhdGljIHZvaWQg
dmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwotICAgIHN0YXRpYyB2b2lkIHZp
c2l0T3V0cHV0Q29uc3RyYWludHMoSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJF
X1ZJU0lUX0NISUxEUkVOX1dJVEhfTU9ESUZJRVIoaW5saW5lKTsKKyAgICBzdGF0aWMgdm9pZCB2
aXNpdE91dHB1dENvbnN0cmFpbnRzKEpTQ2VsbCosIEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKIAog
ICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGFuYWx5emVIZWFwKEpTQ2VsbCosIEhl
YXBBbmFseXplciYpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Nl
bGxJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNDZWxsSW5saW5lcy5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0NlbGxJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNSw2ICsyNSw3
IEBACiAKICNwcmFnbWEgb25jZQogCisjaW5jbHVkZSAiQWJzdHJhY3RTbG90VmlzaXRvcklubGlu
ZXMuaCIKICNpbmNsdWRlICJBbGxvY2F0b3JGb3JNb2RlLmgiCiAjaW5jbHVkZSAiQWxsb2NhdG9y
SW5saW5lcy5oIgogI2luY2x1ZGUgIkNvbXBsZXRlU3Vic3BhY2VJbmxpbmVzLmgiCkBAIC0xNDEs
MTIgKzE0MiwxNSBAQCBBTFdBWVNfSU5MSU5FIFN0cnVjdHVyZSogSlNDZWxsOjpzdHJ1Y3R1CiAg
ICAgcmV0dXJuIHZtLmdldFN0cnVjdHVyZShtX3N0cnVjdHVyZUlEKTsKIH0KIAotaW5saW5lIHZv
aWQgSlNDZWxsOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0
b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0NlbGw6OnZpc2l0Q2hpbGRy
ZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB2aXNpdG9yLmFw
cGVuZFVuYmFycmllcmVkKGNlbGwtPnN0cnVjdHVyZSh2aXNpdG9yLnZtKCkpKTsKIH0KIAotaW5s
aW5lIHZvaWQgSlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzKEpTQ2VsbCosIFNsb3RWaXNp
dG9yJikKK0RFRklORV9WSVNJVF9DSElMRFJFTl9XSVRIX01PRElGSUVSKGlubGluZSwgSlNDZWxs
KTsKKworaW5saW5lIHZvaWQgSlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzKEpTQ2VsbCos
IEFic3RyYWN0U2xvdFZpc2l0b3ImKQogewogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0N1c3RvbUdldHRlclNldHRlckZ1bmN0aW9uLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0N1c3RvbUdldHRlclNldHRlckZ1bmN0
aW9uLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNDdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LCAyMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
ODUsNyArODUsOCBAQCBKU0N1c3RvbUdldHRlclNldHRlckZ1bmN0aW9uKiBKU0N1c3RvbUdlCiAg
ICAgcmV0dXJuIGZ1bmN0aW9uOwogfQogCi12b2lkIEpTQ3VzdG9tR2V0dGVyU2V0dGVyRnVuY3Rp
b246OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3Rl
bXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTQ3VzdG9tR2V0dGVyU2V0dGVyRnVuY3Rp
b246OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsK
ICAgICBKU0N1c3RvbUdldHRlclNldHRlckZ1bmN0aW9uKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpT
Q3VzdG9tR2V0dGVyU2V0dGVyRnVuY3Rpb24qPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNU
X0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC05NCw2ICs5NSw4IEBAIHZvaWQgSlND
dXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbjo6dmlzaXQKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlz
T2JqZWN0LT5tX2dldHRlclNldHRlcik7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU0N1
c3RvbUdldHRlclNldHRlckZ1bmN0aW9uKTsKKwogdm9pZCBKU0N1c3RvbUdldHRlclNldHRlckZ1
bmN0aW9uOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIE5hdGl2ZUV4ZWN1dGFibGUqIGV4ZWN1dGFi
bGUsIEN1c3RvbUdldHRlclNldHRlciogZ2V0dGVyU2V0dGVyLCBjb25zdCBTdHJpbmcmIG5hbWUp
CiB7CiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0sIGV4ZWN1dGFibGUsIGlzU2V0dGVyKCks
IG5hbWUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDdXN0b21HZXR0
ZXJTZXR0ZXJGdW5jdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTQ3VzdG9tR2V0dGVyU2V0dGVyRnVuY3Rpb24uaAkocmV2aXNpb24gMjcyODMwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDdXN0b21HZXR0ZXJTZXR0ZXJGdW5j
dGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxNS0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjMsNyArNjMsNyBAQCBwdWJsaWM6CiBwcml2YXRl
OgogICAgIEpTQ3VzdG9tR2V0dGVyU2V0dGVyRnVuY3Rpb24oVk0mLCBOYXRpdmVFeGVjdXRhYmxl
KiwgSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqLCBUeXBlLCBjb25zdCBQcm9wZXJ0eU5hbWUm
KTsKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgTmF0aXZlRXhlY3V0YWJsZSosIEN1c3Rv
bUdldHRlclNldHRlciosIGNvbnN0IFN0cmluZyYpOwotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hp
bGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVO
OwogCiAgICAgV3JpdGVCYXJyaWVyPEN1c3RvbUdldHRlclNldHRlcj4gbV9nZXR0ZXJTZXR0ZXI7
CiAgICAgVHlwZSBtX3R5cGU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0ZpbmFsaXphdGlvblJlZ2lzdHJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0ZpbmFsaXphdGlvblJlZ2lzdHJ5LmNwcAkocmV2aXNpb24gMjcyODMw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGaW5hbGl6YXRpb25SZWdpc3Ry
eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDIwIEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMjAtMjAyMSBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgi
CiAjaW5jbHVkZSAiSlNGaW5hbGl6YXRpb25SZWdpc3RyeS5oIgogCisjaW5jbHVkZSAiQWJzdHJh
Y3RTbG90VmlzaXRvci5oIgogI2luY2x1ZGUgIkRlZmVycmVkV29ya1RpbWVyLmgiCiAjaW5jbHVk
ZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTSW50ZXJuYWxGaWVsZE9iamVjdEltcGxJbmxp
bmVzLmgiCkBAIC02MCw3ICs2MSw4IEBAIHZvaWQgSlNGaW5hbGl6YXRpb25SZWdpc3RyeTo6Zmlu
aXNoQ3JlYXQKICAgICBnbG9iYWxPYmplY3QtPmdsb2JhbE9iamVjdE1ldGhvZFRhYmxlKCktPmN1
cnJlbnRTY3JpcHRFeGVjdXRpb25Pd25lcihnbG9iYWxPYmplY3QpOwogfQogCi12b2lkIEpTRmlu
YWxpemF0aW9uUmVnaXN0cnk6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRv
ciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTRmluYWxpemF0
aW9uUmVnaXN0cnk6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlz
aXRvcikKIHsKICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKGNlbGwsIHZpc2l0b3IpOwogCkBAIC04
MCwxMyArODIsMTUgQEAgdm9pZCBKU0ZpbmFsaXphdGlvblJlZ2lzdHJ5Ojp2aXNpdENoaWxkcgog
ICAgIGZvciAoYXV0byYgaG9sZGluZ3MgOiB0aGlzT2JqZWN0LT5tX25vVW5yZWdpc3RyYXRpb25E
ZWFkKQogICAgICAgICB2aXNpdG9yLmFwcGVuZChob2xkaW5ncyk7CiAKLSAgICBzaXplX3QgdG90
YWxCdWZmZXJTaXplc0luQnl0ZXMgPSB0aGlzT2JqZWN0LT5tX2RlYWRSZWdpc3RyYXRpb25zLmNh
cGFjaXR5KCkgKiBzaXplb2YoZGVjbHR5cGUodGhpc09iamVjdC0+bV9kZWFkUmVnaXN0cmF0aW9u
cyk6OktleVZhbHVlUGFpclR5cGUpOwotICAgIHRvdGFsQnVmZmVyU2l6ZXNJbkJ5dGVzICs9IHRo
aXNPYmplY3QtPm1fbGl2ZVJlZ2lzdHJhdGlvbnMuY2FwYWNpdHkoKSAqIHNpemVvZihkZWNsdHlw
ZSh0aGlzT2JqZWN0LT5tX2RlYWRSZWdpc3RyYXRpb25zKTo6S2V5VmFsdWVQYWlyVHlwZSk7Cisg
ICAgc2l6ZV90IHRvdGFsQnVmZmVyU2l6ZXNJbkJ5dGVzID0gdGhpc09iamVjdC0+bV9kZWFkUmVn
aXN0cmF0aW9ucy5jYXBhY2l0eSgpICogc2l6ZW9mKHR5cGVuYW1lIGRlY2x0eXBlKHRoaXNPYmpl
Y3QtPm1fZGVhZFJlZ2lzdHJhdGlvbnMpOjpLZXlWYWx1ZVBhaXJUeXBlKTsKKyAgICB0b3RhbEJ1
ZmZlclNpemVzSW5CeXRlcyArPSB0aGlzT2JqZWN0LT5tX2xpdmVSZWdpc3RyYXRpb25zLmNhcGFj
aXR5KCkgKiBzaXplb2YodHlwZW5hbWUgZGVjbHR5cGUodGhpc09iamVjdC0+bV9kZWFkUmVnaXN0
cmF0aW9ucyk6OktleVZhbHVlUGFpclR5cGUpOwogICAgIHRvdGFsQnVmZmVyU2l6ZXNJbkJ5dGVz
ICs9IHRoaXNPYmplY3QtPm1fbm9VbnJlZ2lzdHJhdGlvbkxpdmUuY2FwYWNpdHkoKSAqIHNpemVv
ZihkZWNsdHlwZSh0aGlzT2JqZWN0LT5tX25vVW5yZWdpc3RyYXRpb25MaXZlLnRha2VMYXN0KCkp
KTsKICAgICB0b3RhbEJ1ZmZlclNpemVzSW5CeXRlcyArPSB0aGlzT2JqZWN0LT5tX25vVW5yZWdp
c3RyYXRpb25EZWFkLmNhcGFjaXR5KCkgKiBzaXplb2YoZGVjbHR5cGUodGhpc09iamVjdC0+bV9u
b1VucmVnaXN0cmF0aW9uTGl2ZS50YWtlTGFzdCgpKSk7CiAgICAgdmlzaXRvci52bSgpLmhlYXAu
cmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKHRvdGFsQnVmZmVyU2l6ZXNJbkJ5dGVzKTsKIH0KIAor
REVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTRmluYWxpemF0aW9uUmVnaXN0cnkpOworCiB2b2lkIEpT
RmluYWxpemF0aW9uUmVnaXN0cnk6OmRlc3Ryb3koSlNDZWxsKiB0YWJsZSkKIHsKICAgICBzdGF0
aWNfY2FzdDxKU0ZpbmFsaXphdGlvblJlZ2lzdHJ5Kj4odGFibGUpLT5+SlNGaW5hbGl6YXRpb25S
ZWdpc3RyeSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGaW5hbGl6
YXRpb25SZWdpc3RyeS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTRmluYWxpemF0aW9uUmVnaXN0cnkuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGaW5hbGl6YXRpb25SZWdpc3RyeS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSwg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIwLTIwMjEgQXBw
bGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtNzAsNyArNzAsNyBAQCBwdWJsaWM6CiAgICAgREVDTEFSRV9FWFBPUlRfSU5GTzsK
IAogICAgIHZvaWQgZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoVk0mKTsKLSAgICBzdGF0aWMgdm9p
ZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJ
VF9DSElMRFJFTjsKICAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwogICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBuZWVkc0Rlc3RydWN0aW9uID0gdHJ1ZTsKIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5jcHAJKHJldmlzaW9uIDI3Mjgz
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAw
MiBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQogICogIENvcHlyaWdodCAoQykgMjAwMSBQ
ZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQotICogIENvcHlyaWdodCAoQykgMjAwMy0yMDIwIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA3
IENhbWVyb24gWndhcmljaCAoY3d6d2FyaWNoQHV3YXRlcmxvby5jYSkKICAqICBDb3B5cmlnaHQg
KEMpIDIwMDcgTWFrcyBPcmxvdmljaAogICogIENvcHlyaWdodCAoQykgMjAxNSBDYW5vbiBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCkBAIC0yNTIsNyArMjUyLDggQEAgY29uc3QgU291cmNlQ29k
ZSogSlNGdW5jdGlvbjo6c291cmNlQ29kZQogICAgIHJldHVybiAmanNFeGVjdXRhYmxlKCktPnNv
dXJjZSgpOwogfQogICAgIAotdm9pZCBKU0Z1bmN0aW9uOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCog
Y2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgor
dm9pZCBKU0Z1bmN0aW9uOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3Im
IHZpc2l0b3IpCiB7CiAgICAgSlNGdW5jdGlvbiogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0Z1bmN0
aW9uKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBp
bmZvKCkpOwpAQCAtMjYxLDYgKzI2Miw4IEBAIHZvaWQgSlNGdW5jdGlvbjo6dmlzaXRDaGlsZHJl
bihKU0NlbGwqIGMKICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKGJpdHdpc2VfY2FzdDxK
U0NlbGwqPihiaXR3aXNlX2Nhc3Q8dWludHB0cl90Pih0aGlzT2JqZWN0LT5tX2V4ZWN1dGFibGVP
clJhcmVEYXRhKSAmIH5yYXJlRGF0YVRhZykpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4o
SlNGdW5jdGlvbik7CisKIENhbGxEYXRhIEpTRnVuY3Rpb246OmdldENhbGxEYXRhKEpTQ2VsbCog
Y2VsbCkKIHsKICAgICAvLyBLZWVwIHRoaXMgZnVuY3Rpb24gT0sgZm9yIGludm9jYXRpb24gZnJv
bSBjb25jdXJyZW50IGNvbXBpbGVycy4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTRnVuY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0Z1bmN0aW9uLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAK
IC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDAgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2Rl
Lm9yZykKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICogIENvcHlyaWdodCAoQykgMjAwNyBDYW1lcm9uIFp3YXJpY2ggKGN3
endhcmljaEB1d2F0ZXJsb28uY2EpCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA3IE1ha3MgT3Jsb3Zp
Y2gKICAqCkBAIC0xODAsNyArMTgwLDcgQEAgcHJvdGVjdGVkOgogCiAgICAgc3RhdGljIGJvb2wg
ZGVsZXRlUHJvcGVydHkoSlNDZWxsKiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIERl
bGV0ZVByb3BlcnR5U2xvdCYpOwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0Nl
bGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKIHByaXZh
dGU6CiAgICAgc3RhdGljIEpTRnVuY3Rpb24qIGNyZWF0ZUltcGwoVk0mIHZtLCBGdW5jdGlvbkV4
ZWN1dGFibGUqIGV4ZWN1dGFibGUsIEpTU2NvcGUqIHNjb3BlLCBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJhdG9yLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyYXRvci5j
cHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
R2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE5LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01OSwxMSArNTksMTQgQEAgdm9pZCBKU0dlbmVy
YXRvcjo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQogICAgICAgICBpbnRlcm5hbEZpZWxkKGluZGV4
KS5zZXQodm0sIHRoaXMsIHZhbHVlc1tpbmRleF0pOwogfQogCi12b2lkIEpTR2VuZXJhdG9yOjp2
aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0
ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0dlbmVyYXRvcjo6dmlzaXRDaGlsZHJlbkltcGwo
SlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGF1dG8qIHRoaXNPYmplY3Qg
PSBqc0Nhc3Q8SlNHZW5lcmF0b3IqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVS
SVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2Jq
ZWN0LCB2aXNpdG9yKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTR2VuZXJhdG9yKTsK
KwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0dlbmVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTR2VuZXJhdG9yLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTR2VuZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtOTQsNyArOTQsNyBAQCBw
dWJsaWM6CiAKICAgICBERUNMQVJFX0VYUE9SVF9JTkZPOwogCi0gICAgc3RhdGljIHZvaWQgdmlz
aXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJ
TERSRU47CiAKIHByaXZhdGU6CiAgICAgSlNHZW5lcmF0b3IoVk0mLCBTdHJ1Y3R1cmUqKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmlj
VHlwZWRBcnJheVZpZXcuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTMxMyw3ICszMTMsNyBAQCBwcml2YXRlOgogICAgIHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5
TmFtZXMoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZUFycmF5JiwgRG9u
dEVudW1Qcm9wZXJ0aWVzTW9kZSk7CiAKICAgICBzdGF0aWMgc2l6ZV90IGVzdGltYXRlZFNpemUo
SlNDZWxsKiwgVk0mKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNs
b3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIC8vIFJldHVy
bnMgdHJ1ZSBpZiBzdWNjZXNzZnVsLCBhbmQgZmFsc2Ugb24gZXJyb3I7IGl0IHdpbGwgdGhyb3cg
b24gZXJyb3IuCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3RoZXJBZGFwdG9yPgpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmlj
VHlwZWRBcnJheVZpZXdJbmxpbmVzLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE5
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtNTE3LDcgKzUxNyw4IEBAIHNpemVfdCBKU0dlbmVyaWNUeXBlZEFycmF5
VmlldzxBZGFwdG9yPjoKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KLXZvaWQgSlNH
ZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxs
LCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lk
IEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+Ojp2aXNpdENoaWxkcmVuSW1wbChKU0Nl
bGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNHZW5lcmljVHlwZWRBcnJheVZp
ZXcqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNHZW5lcmljVHlwZWRBcnJheVZpZXcqPihjZWxsKTsK
ICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC01
NTUsNCArNTU2LDYgQEAgdm9pZCBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6dgog
ICAgIH0KIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOX1dJVEhfTU9ESUZJRVIodGVtcGxhdGU8
dHlwZW5hbWUgQWRhcHRvcj4sIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+KTsKKwog
fSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0dsb2JhbE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMjAgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA4IENhbWVyb24gWndh
cmljaCAoY3d6d2FyaWNoQHV3YXRlcmxvby5jYSkKICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTE4OTIs
NyArMTg5Miw4IEBAIHZvaWQgSlNHbG9iYWxPYmplY3Q6OnJlc2V0UHJvdG90eXBlKFZNJiAKICAg
ICBzZXRHbG9iYWxUaGlzKHZtLCBKU1Byb3h5OjpjcmVhdGUodm0sIEpTUHJveHk6OmNyZWF0ZVN0
cnVjdHVyZSh2bSwgdGhpcywgcHJvdG90eXBlLCBQdXJlRm9yd2FyZGluZ1Byb3h5VHlwZSksIHRo
aXMpKTsKIH0KIAotdm9pZCBKU0dsb2JhbE9iamVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNl
bGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3Zv
aWQgSlNHbG9iYWxPYmplY3Q6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRv
ciYgdmlzaXRvcikKIHsgCiAgICAgSlNHbG9iYWxPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8
SlNHbG9iYWxPYmplY3QqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRo
aXNPYmplY3QsIGluZm8oKSk7CkBAIC0yMDYwLDYgKzIwNjEsOCBAQCB2b2lkIEpTR2xvYmFsT2Jq
ZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsCiAgICAgdGhpc09iamVjdC0+bV9yZWdFeHBHbG9iYWxE
YXRhLnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU5f
V0lUSF9NT0RJRklFUihKU19FWFBPUlRfUFJJVkFURSwgSlNHbG9iYWxPYmplY3QpOworCiBDYWxs
RnJhbWUqIEpTR2xvYmFsT2JqZWN0OjpkZXByZWNhdGVkQ2FsbEZyYW1lRm9yRGVidWdnZXIoKQog
ewogICAgIHJldHVybiBDYWxsRnJhbWU6OmNyZWF0ZShtX2RlcHJlY2F0ZWRDYWxsRnJhbWVGb3JE
ZWJ1Z2dlcik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9i
amVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xv
YmFsT2JqZWN0LmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTR2xvYmFsT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAv
KgogICogIENvcHlyaWdodCAoQykgMjAwNyBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgot
ICogIENvcHlyaWdodCAoQykgMjAwNy0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtNjA5LDcgKzYwOSw3IEBAIHB1YmxpYzoK
ICAgICBKU19FWFBPUlRfUFJJVkFURSB+SlNHbG9iYWxPYmplY3QoKTsKICAgICBKU19FWFBPUlRf
UFJJVkFURSBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwogCi0gICAgSlNfRVhQT1JUX1BS
SVZBVEUgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwor
ICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU5fV0lUSF9NT0RJRklFUihKU19FWFBPUlRfUFJJVkFU
RSk7CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNs
b3QoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90
Jik7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIGJvb2wgcHV0KEpTQ2VsbCosIEpTR2xv
YmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTSW1tdXRhYmxlQnV0dGVyZmx5LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ltbXV0YWJs
ZUJ1dHRlcmZseS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTSW1tdXRhYmxlQnV0dGVyZmx5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMiw3ICsz
Miw4IEBAIG5hbWVzcGFjZSBKU0MgewogCiBjb25zdCBDbGFzc0luZm8gSlNJbW11dGFibGVCdXR0
ZXJmbHk6OnNfaW5mbyA9IHsgIkltbXV0YWJsZSBCdXR0ZXJmbHkiLCBudWxscHRyLCBudWxscHRy
LCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTSW1tdXRhYmxlQnV0dGVyZmx5KSB9Owog
Ci12b2lkIEpTSW1tdXRhYmxlQnV0dGVyZmx5Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwg
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBK
U0ltbXV0YWJsZUJ1dHRlcmZseTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNp
dG9yJiB2aXNpdG9yKQogewogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2VsbCwgaW5m
bygpKTsKICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKGNlbGwsIHZpc2l0b3IpOwpAQCAtNDUsNiAr
NDYsOCBAQCB2b2lkIEpTSW1tdXRhYmxlQnV0dGVyZmx5Ojp2aXNpdENoaWxkcmVuCiAgICAgdmlz
aXRvci5hcHBlbmRWYWx1ZXNIaWRkZW4oYnV0dGVyZmx5LT5jb250aWd1b3VzKCkuZGF0YSgpLCBi
dXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpT
SW1tdXRhYmxlQnV0dGVyZmx5KTsKKwogdm9pZCBKU0ltbXV0YWJsZUJ1dHRlcmZseTo6Y29weVRv
QXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSogZmlyc3RFbGVtZW50RGVzdCwgdW5z
aWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCiB7CiAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGxlbmd0aDsgKytpKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0ltbXV0YWJsZUJ1dHRlcmZseS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTSW1tdXRhYmxlQnV0dGVyZmx5LmgJKHJldmlzaW9uIDI3MjgzMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTSW1tdXRhYmxlQnV0dGVyZmx5LmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE4LTIw
MTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE4
LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0xNDUsNyArMTQ1LDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4g
anNEb3VibGVOdW1iZXIodmFsdWUpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hp
bGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVO
OwogCiAgICAgdm9pZCBjb3B5VG9Bcmd1bWVudHMoSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlKiBm
aXJzdEVsZW1lbnREZXN0LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7CiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTSW50ZXJuYWxGaWVsZE9iamVjdElt
cGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ludGVy
bmFsRmllbGRPYmplY3RJbXBsLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTSW50ZXJuYWxGaWVsZE9iamVjdEltcGwuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE5LTIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC02Niw3ICs2Niw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mSW50
ZXJuYWxGaWVsZCh1bnNpZ25lZCBpbmRleCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTSW50
ZXJuYWxGaWVsZE9iamVjdEltcGwsIG1faW50ZXJuYWxGaWVsZHMpICsgaW5kZXggKiBzaXplb2Yo
V3JpdGVCYXJyaWVyPFVua25vd24+KTsgfQogCiBwcm90ZWN0ZWQ6Ci0gICAgc3RhdGljIHZvaWQg
dmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRf
Q0hJTERSRU47CiAKICAgICBKU0ludGVybmFsRmllbGRPYmplY3RJbXBsKFZNJiB2bSwgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUpCiAgICAgICAgIDogQmFzZSh2bSwgc3RydWN0dXJlKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbElubGlu
ZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ludGVy
bmFsRmllbGRPYmplY3RJbXBsSW5saW5lcy5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ludGVybmFsRmllbGRPYmplY3RJbXBsSW5saW5lcy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
OSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkt
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTMwLDcgKzMwLDggQEAKIG5hbWVzcGFjZSBKU0MgewogCiB0ZW1wbGF0
ZTx1bnNpZ25lZCBwYXNzZWROdW1iZXJPZkludGVybmFsRmllbGRzPgotdm9pZCBKU0ludGVybmFs
RmllbGRPYmplY3RJbXBsPHBhc3NlZE51bWJlck9mSW50ZXJuYWxGaWVsZHM+Ojp2aXNpdENoaWxk
cmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBWaXNpdG9yPgordm9pZCBKU0ludGVybmFsRmllbGRPYmplY3RJbXBsPHBhc3NlZE51bWJlck9m
SW50ZXJuYWxGaWVsZHM+Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3Im
IHZpc2l0b3IpCiB7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0ludGVybmFsRmll
bGRPYmplY3RJbXBsKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlz
T2JqZWN0LCBpbmZvKCkpOwpAQCAtMzgsNCArMzksNiBAQCB2b2lkIEpTSW50ZXJuYWxGaWVsZE9i
amVjdEltcGw8cGFzc2VkTnVtCiAgICAgdmlzaXRvci5hcHBlbmRWYWx1ZXModGhpc09iamVjdC0+
bV9pbnRlcm5hbEZpZWxkcywgbnVtYmVyT2ZJbnRlcm5hbEZpZWxkcyk7CiB9CiAKK0RFRklORV9W
SVNJVF9DSElMRFJFTl9XSVRIX01PRElGSUVSKHRlbXBsYXRlPHVuc2lnbmVkIHBhc3NlZE51bWJl
ck9mSW50ZXJuYWxGaWVsZHM+LCBKU0ludGVybmFsRmllbGRPYmplY3RJbXBsPHBhc3NlZE51bWJl
ck9mSW50ZXJuYWxGaWVsZHM+KTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xleGljYWxFbnZpcm9ubWVudC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMZXhpY2FsRW52aXJvbm1lbnQu
Y3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0xleGljYWxFbnZpcm9ubWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNiw3ICszNiw4IEBA
IG5hbWVzcGFjZSBKU0MgewogCiBjb25zdCBDbGFzc0luZm8gSlNMZXhpY2FsRW52aXJvbm1lbnQ6
OnNfaW5mbyA9IHsgIkpTTGV4aWNhbEVudmlyb25tZW50IiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0
ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU0xleGljYWxFbnZpcm9ubWVudCkgfTsK
IAotdm9pZCBKU0xleGljYWxFbnZpcm9ubWVudDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGws
IFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQg
SlNMZXhpY2FsRW52aXJvbm1lbnQ6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlz
aXRvciYgdmlzaXRvcikKIHsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTTGV4aWNh
bEVudmlyb25tZW50Kj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlz
T2JqZWN0LCBpbmZvKCkpOwpAQCAtNDQsNiArNDUsOCBAQCB2b2lkIEpTTGV4aWNhbEVudmlyb25t
ZW50Ojp2aXNpdENoaWxkcmVuCiAgICAgdmlzaXRvci5hcHBlbmRWYWx1ZXNIaWRkZW4odGhpc09i
amVjdC0+dmFyaWFibGVzKCksIHRoaXNPYmplY3QtPnN5bWJvbFRhYmxlKCktPnNjb3BlU2l6ZSgp
KTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTTGV4aWNhbEVudmlyb25tZW50KTsKKwog
dm9pZCBKU0xleGljYWxFbnZpcm9ubWVudDo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFw
QW5hbHl6ZXImIGFuYWx5emVyKQogewogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNM
ZXhpY2FsRW52aXJvbm1lbnQqPihjZWxsKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTTGV4aWNhbEVudmlyb25tZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNMZXhpY2FsRW52aXJvbm1lbnQuaAkocmV2aXNpb24gMjcyODMw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMZXhpY2FsRW52aXJvbm1lbnQu
aAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDgtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDgtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTEzNCw3ICsxMzQsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgICAg
IH0KICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RW
aXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKICAgICBzdGF0aWMgdm9pZCBh
bmFseXplSGVhcChKU0NlbGwqLCBIZWFwQW5hbHl6ZXImKTsKIH07CiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTWFwSXRlcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTWFwSXRlcmF0b3IuY3BwCShyZXZpc2lvbiAy
NzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01hcEl0ZXJhdG9yLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNyBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMjEgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTcsMTMgKzU3LDE2IEBAIHZvaWQgSlNNYXBJdGVyYXRv
cjo6ZmluaXNoQ3JlYXRpb24oVk0mIHYKICAgICAgICAgQmFzZTo6aW50ZXJuYWxGaWVsZChpbmRl
eCkuc2V0KHZtLCB0aGlzLCB2YWx1ZXNbaW5kZXhdKTsKIH0KIAotdm9pZCBKU01hcEl0ZXJhdG9y
Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1w
bGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU01hcEl0ZXJhdG9yOjp2aXNpdENoaWxkcmVu
SW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0byogdGhpc09i
amVjdCA9IGpzQ2FzdDxKU01hcEl0ZXJhdG9yKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVD
VF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4o
dGhpc09iamVjdCwgdmlzaXRvcik7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU01hcEl0
ZXJhdG9yKTsKKwogSlNWYWx1ZSBKU01hcEl0ZXJhdG9yOjpjcmVhdGVQYWlyKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUga2V5LCBKU1ZhbHVlIHZhbHVlKQogewogICAgIE1h
cmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3M7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU01hcEl0ZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNNYXBJdGVyYXRvci5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU01hcEl0ZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE2IEFwcGxlLCBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMSBBcHBsZSwgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0xNDIsNyArMTQyLDcgQEAgcHJpdmF0ZToKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGZp
bmlzaENyZWF0aW9uKFZNJiwgSlNNYXAqLCBJdGVyYXRpb25LaW5kKTsKICAgICB2b2lkIGZpbmlz
aENyZWF0aW9uKFZNJik7CiAgICAgSlNWYWx1ZSBjcmVhdGVQYWlyKEpTR2xvYmFsT2JqZWN0Kiwg
SlNWYWx1ZSwgSlNWYWx1ZSk7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwq
LCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiB9OwogU1RBVElD
X0FTU0VSVF9JU19UUklWSUFMTFlfREVTVFJVQ1RJQkxFKEpTTWFwSXRlcmF0b3IpOwogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZUVudmlyb25tZW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZUVudmly
b25tZW50LmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNNb2R1bGVFbnZpcm9ubWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02NSw3ICs2
NSw4IEBAIHZvaWQgSlNNb2R1bGVFbnZpcm9ubWVudDo6ZmluaXNoQ3JlYXRpb24KICAgICB0aGlz
LT5tb2R1bGVSZWNvcmRTbG90KCkuc2V0KHZtLCB0aGlzLCBtb2R1bGVSZWNvcmQpOwogfQogCi12
b2lkIEpTTW9kdWxlRW52aXJvbm1lbnQ6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90
VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTTW9k
dWxlRW52aXJvbm1lbnQ6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYg
dmlzaXRvcikKIHsKICAgICBKU01vZHVsZUVudmlyb25tZW50KiB0aGlzT2JqZWN0ID0ganNDYXN0
PEpTTW9kdWxlRW52aXJvbm1lbnQqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVS
SVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC03NCw2ICs3NSw4IEBAIHZvaWQgSlNNb2R1bGVF
bnZpcm9ubWVudDo6dmlzaXRDaGlsZHJlbigKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0
LT5tb2R1bGVSZWNvcmRTbG90KCkpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNNb2R1
bGVFbnZpcm9ubWVudCk7CisKIGJvb2wgSlNNb2R1bGVFbnZpcm9ubWVudDo6Z2V0T3duUHJvcGVy
dHlTbG90KEpTT2JqZWN0KiBjZWxsLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcm9w
ZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgVk0mIHZt
ID0gZ2xvYmFsT2JqZWN0LT52bSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNNb2R1bGVFbnZpcm9ubWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTTW9kdWxlRW52aXJvbm1lbnQuaAkocmV2aXNpb24gMjcyODMwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVFbnZpcm9ubWVudC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIw
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0y
MDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtODksNyArODksNyBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gKmJp
dHdpc2VfY2FzdDxXcml0ZUJhcnJpZXJCYXNlPEFic3RyYWN0TW9kdWxlUmVjb3JkPio+KGJpdHdp
c2VfY2FzdDxjaGFyKj4odGhpcykgKyBvZmZzZXRPZk1vZHVsZVJlY29yZChzeW1ib2xUYWJsZSgp
KSk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90
VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiB9OwogCiBpbmxpbmUgSlNN
b2R1bGVFbnZpcm9ubWVudDo6SlNNb2R1bGVFbnZpcm9ubWVudChWTSYgdm0sIFN0cnVjdHVyZSog
c3RydWN0dXJlLCBKU1Njb3BlKiBjdXJyZW50U2NvcGUsIFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJs
ZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlTmFtZXNwYWNl
T2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U01vZHVsZU5hbWVzcGFjZU9iamVjdC5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlTmFtZXNwYWNlT2JqZWN0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTg1LDcgKzg1LDggQEAgdm9pZCBKU01vZHVsZU5hbWVzcGFjZU9iamVjdDo6
ZGVzdHJveShKUwogICAgIHRoaXNPYmplY3QtPkpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0Ojp+SlNN
b2R1bGVOYW1lc3BhY2VPYmplY3QoKTsKIH0KIAotdm9pZCBKU01vZHVsZU5hbWVzcGFjZU9iamVj
dDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVt
cGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNNb2R1bGVOYW1lc3BhY2VPYmplY3Q6OnZp
c2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBK
U01vZHVsZU5hbWVzcGFjZU9iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU01vZHVsZU5hbWVz
cGFjZU9iamVjdCo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09i
amVjdCwgaW5mbygpKTsKQEAgLTk4LDYgKzk5LDggQEAgdm9pZCBKU01vZHVsZU5hbWVzcGFjZU9i
amVjdDo6dmlzaXRDaGlsZAogICAgIH0KIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTTW9k
dWxlTmFtZXNwYWNlT2JqZWN0KTsKKwogc3RhdGljIEpTVmFsdWUgZ2V0VmFsdWUoSlNNb2R1bGVF
bnZpcm9ubWVudCogZW52aXJvbm1lbnQsIFByb3BlcnR5TmFtZSBsb2NhbE5hbWUsIFNjb3BlT2Zm
c2V0JiBzY29wZU9mZnNldCkKIHsKICAgICBTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUgPSBlbnZp
cm9ubWVudC0+c3ltYm9sVGFibGUoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTTW9kdWxlTmFtZXNwYWNlT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QuaAkocmV2aXNpb24gMjcy
ODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVOYW1lc3BhY2VP
YmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTUtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTUtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTcyLDcgKzcyLDcgQEAgcHVibGljOgogcHJpdmF0
ZToKICAgICBKU19FWFBPUlRfUFJJVkFURSBKU01vZHVsZU5hbWVzcGFjZU9iamVjdChWTSYsIFN0
cnVjdHVyZSopOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNH
bG9iYWxPYmplY3QqLCBBYnN0cmFjdE1vZHVsZVJlY29yZCosIFZlY3RvcjxzdGQ6OnBhaXI8SWRl
bnRpZmllciwgQWJzdHJhY3RNb2R1bGVSZWNvcmQ6OlJlc29sdXRpb24+PiYmKTsKLSAgICBzdGF0
aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFS
RV9WSVNJVF9DSElMRFJFTjsKICAgICBib29sIGdldE93blByb3BlcnR5U2xvdENvbW1vbihKU0ds
b2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CiAKICAgICBzdHJ1Y3Qg
RXhwb3J0RW50cnkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1
bGVSZWNvcmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTTW9kdWxlUmVjb3JkLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVSZWNvcmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE5IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNzAs
NyArNzAsOCBAQCB2b2lkIEpTTW9kdWxlUmVjb3JkOjpmaW5pc2hDcmVhdGlvbihKU0dsCiAgICAg
QVNTRVJUKGluaGVyaXRzKHZtLCBpbmZvKCkpKTsKIH0KIAotdm9pZCBKU01vZHVsZVJlY29yZDo6
dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxh
dGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNNb2R1bGVSZWNvcmQ6OnZpc2l0Q2hpbGRyZW5J
bXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU01vZHVsZVJlY29y
ZCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU01vZHVsZVJlY29yZCo+KGNlbGwpOwogICAgIEFTU0VS
VF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTc4LDYgKzc5LDgg
QEAgdm9pZCBKU01vZHVsZVJlY29yZDo6dmlzaXRDaGlsZHJlbihKU0NlbAogICAgIHZpc2l0b3Iu
YXBwZW5kKHRoaXNPYmplY3QtPm1fbW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUpOwogfQogCitERUZJ
TkVfVklTSVRfQ0hJTERSRU4oSlNNb2R1bGVSZWNvcmQpOworCiB2b2lkIEpTTW9kdWxlUmVjb3Jk
OjpsaW5rKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgc2NyaXB0RmV0Y2hl
cikKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZVJlY29yZC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlUmVjb3JkLmgJKHJldmlzaW9uIDI3Mjgz
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlUmVjb3JkLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1
LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC02Niw3ICs2Niw3IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGZpbmlz
aENyZWF0aW9uKEpTR2xvYmFsT2JqZWN0KiwgVk0mKTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0
Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxE
UkVOOwogCiAgICAgdm9pZCBpbnN0YW50aWF0ZURlY2xhcmF0aW9ucyhKU0dsb2JhbE9iamVjdCos
IE1vZHVsZVByb2dyYW1FeGVjdXRhYmxlKiwgSlNWYWx1ZSBzY3JpcHRGZXRjaGVyKTsKIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNOYXRpdmVTdGRGdW5jdGlvbi5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNOYXRpdmVTdGRG
dW5jdGlvbi5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTTmF0aXZlU3RkRnVuY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDEsMTMg
KzQxLDE2IEBAIEpTTmF0aXZlU3RkRnVuY3Rpb246OkpTTmF0aXZlU3RkRnVuY3Rpb24KIHsKIH0K
IAotdm9pZCBKU05hdGl2ZVN0ZEZ1bmN0aW9uOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwg
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBK
U05hdGl2ZVN0ZEZ1bmN0aW9uOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0
b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNOYXRpdmVTdGRGdW5jdGlvbiogdGhpc09iamVjdCA9IGpz
Q2FzdDxKU05hdGl2ZVN0ZEZ1bmN0aW9uKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9J
TkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhp
c09iamVjdCwgdmlzaXRvcik7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU05hdGl2ZVN0
ZEZ1bmN0aW9uKTsKKwogdm9pZCBKU05hdGl2ZVN0ZEZ1bmN0aW9uOjpmaW5pc2hDcmVhdGlvbihW
TSYgdm0sIE5hdGl2ZUV4ZWN1dGFibGUqIGV4ZWN1dGFibGUsIHVuc2lnbmVkIGxlbmd0aCwgY29u
c3QgU3RyaW5nJiBuYW1lKQogewogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtLCBleGVjdXRh
YmxlLCBsZW5ndGgsIG5hbWUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNOYXRpdmVTdGRGdW5jdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTTmF0aXZlU3RkRnVuY3Rpb24uaAkocmV2aXNpb24gMjcyODMwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNOYXRpdmVTdGRGdW5jdGlvbi5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE4IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtNjUsNyArNjUsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIEpTTmF0aXZl
U3RkRnVuY3Rpb24oVk0mLCBOYXRpdmVFeGVjdXRhYmxlKiwgSlNHbG9iYWxPYmplY3QqLCBTdHJ1
Y3R1cmUqLCBOYXRpdmVTdGRGdW5jdGlvbiYmKTsKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZN
JiwgTmF0aXZlRXhlY3V0YWJsZSosIHVuc2lnbmVkIGxlbmd0aCwgY29uc3QgU3RyaW5nJiBuYW1l
KTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7
CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIE5hdGl2ZVN0ZEZ1bmN0aW9uIG1f
ZnVuY3Rpb247CiB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmpl
Y3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2Jq
ZWN0LmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqICBD
b3B5cmlnaHQgKEMpIDE5OTktMjAwMSBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQogICog
IENvcHlyaWdodCAoQykgMjAwMSBQZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQotICogIENvcHly
aWdodCAoQykgMjAwMy0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBD
b3B5cmlnaHQgKEMpIDIwMDMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KiAgQ29weXJpZ2h0IChDKSAyMDA3IEVyaWMgU2VpZGVsIChlcmljQHdlYmtpdC5vcmcpCiAgKgog
ICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKQEAgLTcyLDcgKzcyLDggQEAgY29uc3QgQ2xhc3NJbmZvIEpTT2JqZWN0OjpzX2lu
Zm8gPSB7ICJPYgogCiBjb25zdCBDbGFzc0luZm8gSlNGaW5hbE9iamVjdDo6c19pbmZvID0geyAi
T2JqZWN0IiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9U
QUJMRShKU0ZpbmFsT2JqZWN0KSB9OwogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSlNPYmplY3Q6Om1h
cmtBdXhpbGlhcnlBbmRWaXNpdE91dE9mTGluZVByb3BlcnRpZXMoU2xvdFZpc2l0b3ImIHZpc2l0
b3IsIEJ1dHRlcmZseSogYnV0dGVyZmx5LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUHJvcGVydHlP
ZmZzZXQgbWF4T2Zmc2V0KQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK0FMV0FZU19JTkxJ
TkUgdm9pZCBKU09iamVjdDo6bWFya0F1eGlsaWFyeUFuZFZpc2l0T3V0T2ZMaW5lUHJvcGVydGll
cyhWaXNpdG9yJiB2aXNpdG9yLCBCdXR0ZXJmbHkqIGJ1dHRlcmZseSwgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IG1heE9mZnNldCkKIHsKICAgICAvLyBXZSBjYWxsIHRoaXMg
d2hlbiB3ZSBmb3VuZCBldmVyeXRoaW5nIHdpdGhvdXQgcmFjZXMuCiAgICAgQVNTRVJUKHN0cnVj
dHVyZSk7CkBAIC0xMDMsNyArMTA0LDggQEAgQUxXQVlTX0lOTElORSB2b2lkIEpTT2JqZWN0Ojpt
YXJrQXV4aWxpYQogICAgIHZpc2l0b3IuYXBwZW5kVmFsdWVzSGlkZGVuKGJ1dHRlcmZseS0+cHJv
cGVydHlTdG9yYWdlKCkgLSBvdXRPZkxpbmVTaXplLCBvdXRPZkxpbmVTaXplKTsKIH0KIAotQUxX
QVlTX0lOTElORSBTdHJ1Y3R1cmUqIEpTT2JqZWN0Ojp2aXNpdEJ1dHRlcmZseShTbG90VmlzaXRv
ciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+CitBTFdBWVNfSU5MSU5FIFN0
cnVjdHVyZSogSlNPYmplY3Q6OnZpc2l0QnV0dGVyZmx5KFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAg
ICAgc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IHJhY2VSZWFzb24gPSAiSlNPYmplY3Q6OnZpc2l0
QnV0dGVyZmx5IjsKICAgICBTdHJ1Y3R1cmUqIHJlc3VsdCA9IHZpc2l0QnV0dGVyZmx5SW1wbCh2
aXNpdG9yKTsKQEAgLTExMiw3ICsxMTQsOCBAQCBBTFdBWVNfSU5MSU5FIFN0cnVjdHVyZSogSlNP
YmplY3Q6OnZpc2l0CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotQUxXQVlTX0lOTElORSBTdHJ1
Y3R1cmUqIEpTT2JqZWN0Ojp2aXNpdEJ1dHRlcmZseUltcGwoU2xvdFZpc2l0b3ImIHZpc2l0b3Ip
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgorQUxXQVlTX0lOTElORSBTdHJ1Y3R1cmUqIEpT
T2JqZWN0Ojp2aXNpdEJ1dHRlcmZseUltcGwoVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBWTSYg
dm0gPSB2aXNpdG9yLnZtKCk7CiAgICAgCkBAIC00MTIsMjQgKzQxNSwyMCBAQCBzaXplX3QgSlNP
YmplY3Q6OmVzdGltYXRlZFNpemUoSlNDZWxsKiBjCiAgICAgcmV0dXJuIEJhc2U6OmVzdGltYXRl
ZFNpemUoY2VsbCwgdm0pICsgYnV0dGVyZmx5T3V0T2ZMaW5lU2l6ZTsKIH0KIAotdm9pZCBKU09i
amVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQor
dGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNPYmplY3Q6OnZpc2l0Q2hpbGRyZW5J
bXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU09iamVjdCogdGhp
c09iamVjdCA9IGpzQ2FzdDxKU09iamVjdCo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1Rf
SU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKLSNpZiBBU1NFUlRfRU5BQkxFRAotICAgIGJv
b2wgd2FzQ2hlY2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlvbiA9IHZpc2l0b3IubV9pc0NoZWNr
aW5nRm9yRGVmYXVsdE1hcmtWaW9sYXRpb247Ci0gICAgdmlzaXRvci5tX2lzQ2hlY2tpbmdGb3JE
ZWZhdWx0TWFya1Zpb2xhdGlvbiA9IGZhbHNlOwotI2VuZGlmCi0gICAgCisgICAgdHlwZW5hbWUg
VmlzaXRvcjo6RGVmYXVsdE1hcmtpbmdWaW9sYXRpb25Bc3NlcnRpb25TY29wZSBhc3NlcnRpb25T
Y29wZSh2aXNpdG9yKTsKKwogICAgIEpTQ2VsbDo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2
aXNpdG9yKTsKLSAgICAKKwogICAgIHRoaXNPYmplY3QtPnZpc2l0QnV0dGVyZmx5KHZpc2l0b3Ip
OwotICAgIAotI2lmIEFTU0VSVF9FTkFCTEVECi0gICAgdmlzaXRvci5tX2lzQ2hlY2tpbmdGb3JE
ZWZhdWx0TWFya1Zpb2xhdGlvbiA9IHdhc0NoZWNraW5nRm9yRGVmYXVsdE1hcmtWaW9sYXRpb247
Ci0jZW5kaWYKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOX1dJVEhfTU9ESUZJRVIoSlNfRVhQ
T1JUX1BSSVZBVEUsIEpTT2JqZWN0KTsKKwogdm9pZCBKU09iamVjdDo6YW5hbHl6ZUhlYXAoSlND
ZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQogewogICAgIEpTT2JqZWN0KiB0aGlz
T2JqZWN0ID0ganNDYXN0PEpTT2JqZWN0Kj4oY2VsbCk7CkBAIC00NjgsMTQgKzQ2NywxMiBAQCB2
b2lkIEpTT2JqZWN0OjphbmFseXplSGVhcChKU0NlbGwqIGNlbGwsCiAgICAgfQogfQogCi12b2lk
IEpTRmluYWxPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYg
dmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTRmluYWxPYmplY3Q6
OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAg
ICBKU0ZpbmFsT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTRmluYWxPYmplY3QqPihjZWxs
KTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7Ci0j
aWYgQVNTRVJUX0VOQUJMRUQKLSAgICBib29sIHdhc0NoZWNraW5nRm9yRGVmYXVsdE1hcmtWaW9s
YXRpb24gPSB2aXNpdG9yLm1faXNDaGVja2luZ0ZvckRlZmF1bHRNYXJrVmlvbGF0aW9uOwotICAg
IHZpc2l0b3IubV9pc0NoZWNraW5nRm9yRGVmYXVsdE1hcmtWaW9sYXRpb24gPSBmYWxzZTsKLSNl
bmRpZgorICAgIHR5cGVuYW1lIFZpc2l0b3I6OkRlZmF1bHRNYXJraW5nVmlvbGF0aW9uQXNzZXJ0
aW9uU2NvcGUgYXNzZXJ0aW9uU2NvcGUodmlzaXRvcik7CiAgICAgCiAgICAgSlNDZWxsOjp2aXNp
dENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwogICAgIApAQCAtNDgzLDEyICs0ODAsMTAg
QEAgdm9pZCBKU0ZpbmFsT2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbAogICAgICAgICBpZiAo
dW5zaWduZWQgc3RvcmFnZVNpemUgPSBzdHJ1Y3R1cmUtPmlubGluZVNpemUoKSkKICAgICAgICAg
ICAgIHZpc2l0b3IuYXBwZW5kVmFsdWVzSGlkZGVuKHRoaXNPYmplY3QtPmlubGluZVN0b3JhZ2Uo
KSwgc3RvcmFnZVNpemUpOwogICAgIH0KLSAgICAKLSNpZiBBU1NFUlRfRU5BQkxFRAotICAgIHZp
c2l0b3IubV9pc0NoZWNraW5nRm9yRGVmYXVsdE1hcmtWaW9sYXRpb24gPSB3YXNDaGVja2luZ0Zv
ckRlZmF1bHRNYXJrVmlvbGF0aW9uOwotI2VuZGlmCiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJF
Tl9XSVRIX01PRElGSUVSKEpTX0VYUE9SVF9QUklWQVRFLCBKU0ZpbmFsT2JqZWN0KTsKKwogU3Ry
aW5nIEpTT2JqZWN0OjpjbGFzc05hbWUoY29uc3QgSlNPYmplY3QqIG9iamVjdCwgVk0mIHZtKQog
ewogICAgIGNvbnN0IENsYXNzSW5mbyogaW5mbyA9IG9iamVjdC0+Y2xhc3NJbmZvKHZtKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAkocmV2aXNpb24gMjcy
ODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDEg
SGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKICAqICBDb3B5cmlnaHQgKEMpIDIwMDEgUGV0
ZXIgS2VsbHkgKHBta0Bwb3N0LmNvbSkKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAxOSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAg
LTEwOCw4ICsxMDgsOSBAQCBjbGFzcyBKU09iamVjdCA6IHB1YmxpYyBKU0NlbGwgewogcHVibGlj
OgogICAgIHVzaW5nIEJhc2UgPSBKU0NlbGw7CiAKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVO
X1dJVEhfTU9ESUZJRVIoSlNfRVhQT1JUX1BSSVZBVEUpOworCiAgICAgSlNfRVhQT1JUX1BSSVZB
VEUgc3RhdGljIHNpemVfdCBlc3RpbWF0ZWRTaXplKEpTQ2VsbCosIFZNJik7Ci0gICAgSlNfRVhQ
T1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRv
ciYpOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGFuYWx5emVIZWFwKEpTQ2Vs
bCosIEhlYXBBbmFseXplciYpOwogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFN0cmlu
ZyBjbGFzc05hbWUoY29uc3QgSlNPYmplY3QqLCBWTSYpOwpAQCAtOTgyLDExICs5ODMsMTEgQEAg
cHJvdGVjdGVkOgogICAgIEpTT2JqZWN0KFZNJiwgU3RydWN0dXJlKiwgQnV0dGVyZmx5KiA9IG51
bGxwdHIpOwogICAgIAogICAgIC8vIFZpc2l0cyB0aGUgYnV0dGVyZmx5IHVubGVzcyB0aGVyZSBp
cyBhIHJhY2UuIFJldHVybnMgdGhlIHN0cnVjdHVyZSBpZiB0aGVyZSB3YXMgbm8gcmFjZS4KLSAg
ICBTdHJ1Y3R1cmUqIHZpc2l0QnV0dGVyZmx5KFNsb3RWaXNpdG9yJik7CisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgVmlzaXRvcj4gU3RydWN0dXJlKiB2aXNpdEJ1dHRlcmZseShWaXNpdG9yJik7CiAg
ICAgCi0gICAgU3RydWN0dXJlKiB2aXNpdEJ1dHRlcmZseUltcGwoU2xvdFZpc2l0b3ImKTsKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiBTdHJ1Y3R1cmUqIHZpc2l0QnV0dGVyZmx5SW1w
bChWaXNpdG9yJik7CiAgICAgCi0gICAgdm9pZCBtYXJrQXV4aWxpYXJ5QW5kVmlzaXRPdXRPZkxp
bmVQcm9wZXJ0aWVzKFNsb3RWaXNpdG9yJiwgQnV0dGVyZmx5KiwgU3RydWN0dXJlKiwgUHJvcGVy
dHlPZmZzZXQgbWF4T2Zmc2V0KTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lk
IG1hcmtBdXhpbGlhcnlBbmRWaXNpdE91dE9mTGluZVByb3BlcnRpZXMoVmlzaXRvciYsIEJ1dHRl
cmZseSosIFN0cnVjdHVyZSosIFByb3BlcnR5T2Zmc2V0IG1heE9mZnNldCk7CiAKICAgICAvLyBD
YWxsIHRoaXMgaWYgeW91IGtub3cgdGhhdCB0aGUgb2JqZWN0IGlzIGluIGEgbW9kZSB3aGVyZSBp
dCBoYXMgYXJyYXkKICAgICAvLyBzdG9yYWdlLiBUaGlzIHdpbGwgYXNzZXJ0IG90aGVyd2lzZS4K
QEAgLTExNzQsOCArMTE3NSw2IEBAIHByb3RlY3RlZDoKICAgICB9CiB9OwogCi1jbGFzcyBKU0Zp
bmFsT2JqZWN0OwotCiAvLyBKU0ZpbmFsT2JqZWN0IGlzIGEgdHlwZSBvZiBKU09iamVjdCB0aGF0
IGNvbnRhaW5zIHN1ZmZpY2llbnQgaW50ZXJuYWwKIC8vIHN0b3JhZ2UgdG8gZnVsbHkgbWFrZSB1
c2Ugb2YgdGhlIGNvbGxlY3RvciBjZWxsIGNvbnRhaW5pbmcgaXQuCiBjbGFzcyBKU0ZpbmFsT2Jq
ZWN0IGZpbmFsIDogcHVibGljIEpTT2JqZWN0IHsKQEAgLTEyMTQsMTUgKzEyMTMsMTMgQEAgcHVi
bGljOgogICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwg
cHJvdG90eXBlLCB0eXBlSW5mbygpLCBpbmZvKCksIGRlZmF1bHRJbmRleGluZ1R5cGUsIGlubGlu
ZUNhcGFjaXR5KTsKICAgICB9CiAKLSAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCB2
aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9D
SElMRFJFTl9XSVRIX01PRElGSUVSKEpTX0VYUE9SVF9QUklWQVRFKTsKIAogICAgIERFQ0xBUkVf
RVhQT1JUX0lORk87CiAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4
dHJhY3RvcjsKIAotICAgIHZvaWQgdmlzaXRDaGlsZHJlbkNvbW1vbihTbG90VmlzaXRvciYpOwot
CiAgICAgZXhwbGljaXQgSlNGaW5hbE9iamVjdChWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJl
LCBCdXR0ZXJmbHkqIGJ1dHRlcmZseSkKICAgICAgICAgOiBKU09iamVjdCh2bSwgc3RydWN0dXJl
LCBidXR0ZXJmbHkpCiAgICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNQcm9taXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU1Byb21pc2UuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1Byb21pc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjcsMTMgKzY3LDE2
IEBAIHZvaWQgSlNQcm9taXNlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCiAgICAgICAgIEJhc2U6
OmludGVybmFsRmllbGQoaW5kZXgpLnNldCh2bSwgdGhpcywgdmFsdWVzW2luZGV4XSk7CiB9CiAK
LXZvaWQgSlNQcm9taXNlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3Im
IHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1Byb21pc2U6OnZp
c2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBh
dXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTUHJvbWlzZSo+KGNlbGwpOwogICAgIEFTU0VSVF9H
Q19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKICAgICBCYXNlOjp2aXNpdENo
aWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4o
SlNQcm9taXNlKTsKKwogYXV0byBKU1Byb21pc2U6OnN0YXR1cyhWTSYpIGNvbnN0IC0+IFN0YXR1
cwogewogICAgIEpTVmFsdWUgdmFsdWUgPSBpbnRlcm5hbEZpZWxkKEZpZWxkOjpGbGFncykuZ2V0
KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb21pc2UuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb21pc2UuaAkocmV2
aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9taXNl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
My0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtOTYsNyArOTYsNyBAQCBwdWJsaWM6CiAgICAgfTsKICAgICBzdGF0
aWMgRGVmZXJyZWREYXRhIGNyZWF0ZURlZmVycmVkRGF0YShKU0dsb2JhbE9iamVjdCosIEpTUHJv
bWlzZUNvbnN0cnVjdG9yKik7CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2Vs
bCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogcHJvdGVj
dGVkOgogICAgIEpTUHJvbWlzZShWTSYsIFN0cnVjdHVyZSopOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3BlcnR5TmFtZUVudW1lcmF0
b3IuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNzAsNyAr
NzAsOCBAQCB2b2lkIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6ZmluaXNoQ3JlCiAgICAgfQog
fQogCi12b2lkIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6dmlzaXRDaGlsZHJlbihKU0NlbGwq
IGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4K
K3ZvaWQgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwq
IGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9y
KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcio+KGNlbGwpOwog
ICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTg3
LDYgKzg4LDggQEAgdm9pZCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OnZpc2l0Q2hpbAogICAg
IH0KIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcik7
CisKIC8vIEZJWE1FOiBBc3NlcnQgdGhhdCBwcm9wZXJ0aWVzIHJldHVybmVkIGJ5IGdldE93blBy
b3BlcnR5TmFtZXMoKSBhcmUgcmVwb3J0ZWQgZW51bWVyYWJsZSBieSBnZXRPd25Qcm9wZXJ0eVNs
b3QoKS4KIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTk5MjYK
IHZvaWQgZ2V0RW51bWVyYWJsZVByb3BlcnR5TmFtZXMoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgSlNPYmplY3QqIGJhc2UsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCB1
aW50MzJfdCYgaW5kZXhlZExlbmd0aCwgdWludDMyX3QmIHN0cnVjdHVyZVByb3BlcnR5Q291bnQp
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3BlcnR5TmFtZUVudW1l
cmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1By
b3BlcnR5TmFtZUVudW1lcmF0b3IuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTkgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC04NCw3ICs4NCw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZT
RVRPRihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IsIG1fcHJvcGVydHlOYW1lcyk7CiAgICAgfQog
Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwor
ICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNz
IExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTUHJveHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTUHJveHkuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1Byb3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxMiwgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzUs
NyArMzUsOCBAQCBTVEFUSUNfQVNTRVJUX0lTX1RSSVZJQUxMWV9ERVNUUlVDVElCTEUoCiAKIGNv
bnN0IENsYXNzSW5mbyBKU1Byb3h5OjpzX2luZm8gPSB7ICJKU1Byb3h5IiwgJkJhc2U6OnNfaW5m
bywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1Byb3h5KSB9OwogCi12
b2lkIEpTUHJveHk6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlz
aXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTUHJveHk6OnZpc2l0Q2hp
bGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU1Byb3h5
KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTUHJveHkqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JK
RUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC00Myw2ICs0NCw4IEBAIHZvaWQg
SlNQcm94eTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwKICAgICB2aXNpdG9yLmFwcGVuZCh0
aGlzT2JqZWN0LT5tX3RhcmdldCk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTl9XSVRIX01P
RElGSUVSKEpTX0VYUE9SVF9QUklWQVRFLCBKU1Byb3h5KTsKKwogdm9pZCBKU1Byb3h5OjpzZXRU
YXJnZXQoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQogewogICAgIG1fdGFy
Z2V0LnNldCh2bSwgdGhpcywgZ2xvYmFsT2JqZWN0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTUHJveHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1Byb3h5LmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTUHJveHkuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTg1LDcgKzg1LDcg
QEAgcHJvdGVjdGVkOgogICAgICAgICBtX3RhcmdldC5zZXQodm0sIHRoaXMsIHRhcmdldCk7CiAg
ICAgfQogCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihK
U0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU5fV0lUSF9N
T0RJRklFUihKU19FWFBPUlRfUFJJVkFURSk7CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0
aWMgU3RyaW5nIGNsYXNzTmFtZShjb25zdCBKU09iamVjdCosIFZNJik7CiAgICAgSlNfRVhQT1JU
X1BSSVZBVEUgc3RhdGljIFN0cmluZyB0b1N0cmluZ05hbWUoY29uc3QgSlNPYmplY3QqLCBKU0ds
b2JhbE9iamVjdCopOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTY29w
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTY29w
ZS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTU2NvcGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMi0yMDIwIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMi0yMDIxIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzksNyArMzksOCBAQCBTVEFUSUNfQVNT
RVJUX0lTX1RSSVZJQUxMWV9ERVNUUlVDVElCTEUoCiAKIGNvbnN0IENsYXNzSW5mbyBKU1Njb3Bl
OjpzX2luZm8gPSB7ICJTY29wZSIsICZCYXNlOjpzX2luZm8sIG51bGxwdHIsIG51bGxwdHIsIENS
RUFURV9NRVRIT0RfVEFCTEUoSlNTY29wZSkgfTsKIAotdm9pZCBKU1Njb3BlOjp2aXNpdENoaWxk
cmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBWaXNpdG9yPgordm9pZCBKU1Njb3BlOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGws
IFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNTY29wZSogdGhpc09iamVjdCA9IGpzQ2FzdDxK
U1Njb3BlKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0
LCBpbmZvKCkpOwpAQCAtNDcsNiArNDgsOCBAQCB2b2lkIEpTU2NvcGU6OnZpc2l0Q2hpbGRyZW4o
SlNDZWxsKiBjZWxsCiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9uZXh0KTsKIH0K
IAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTU2NvcGUpOworCiAvLyBSZXR1cm5zIHRydWUgaWYg
d2UgZm91bmQgZW5vdWdoIGluZm9ybWF0aW9uIHRvIHRlcm1pbmF0ZSBvcHRpbWl6YXRpb24uCiBz
dGF0aWMgaW5saW5lIGJvb2wgYWJzdHJhY3RBY2Nlc3MoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgSlNTY29wZSogc2NvcGUsIGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBHZXRPclB1dCBn
ZXRPclB1dCwgc2l6ZV90IGRlcHRoLCBib29sJiBuZWVkc1ZhckluamVjdGlvbkNoZWNrcywgUmVz
b2x2ZU9wJiBvcCwgSW5pdGlhbGl6YXRpb25Nb2RlIGluaXRpYWxpemF0aW9uTW9kZSkKIHsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2NvcGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Njb3BlLmgJKHJldmlzaW9uIDI3Mjgz
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2NvcGUuaAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxOSBBcHBs
ZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMSBB
cHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTY0LDcgKzY0LDcgQEAgcHVibGljOgogCiAgICAgc3RhdGljIHZvaWQgY29sbGVj
dENsb3N1cmVWYXJpYWJsZXNVbmRlclREWihKU1Njb3BlKiwgVERaRW52aXJvbm1lbnQmIHJlc3Vs
dCwgUHJpdmF0ZU5hbWVFbnZpcm9ubWVudCYpOwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGls
ZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47
CiAKICAgICBib29sIGlzVmFyU2NvcGUoKTsKICAgICBib29sIGlzTGV4aWNhbFNjb3BlKCk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2Jq
ZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Nl
Z21lbnRlZFZhcmlhYmxlT2JqZWN0LmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTYyLDcgKzYyLDggQEAgU2NvcGVPZmZzZXQgSlNTZWdtZW50ZWRWYXJpYWJs
ZU9iamVjdDo6YQogICAgIHJldHVybiBTY29wZU9mZnNldChvbGRTaXplKTsKIH0KIAotdm9pZCBK
U1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xv
dFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1Nl
Z21lbnRlZFZhcmlhYmxlT2JqZWN0Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZp
c2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdCogdGhpc09i
amVjdCA9IGpzQ2FzdDxKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0Kj4oY2VsbCk7CiAgICAgQVNT
RVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNzUsNiArNzYs
OCBAQCB2b2lkIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3Q6OnZpc2l0Q2hpCiAgICAgICAgIHZp
c2l0b3IuYXBwZW5kSGlkZGVuKHRoaXNPYmplY3QtPm1fdmFyaWFibGVzW2ldKTsKIH0KIAorREVG
SU5FX1ZJU0lUX0NISUxEUkVOX1dJVEhfTU9ESUZJRVIoSlNfRVhQT1JUX1BSSVZBVEUsIEpTU2Vn
bWVudGVkVmFyaWFibGVPYmplY3QpOworCiB2b2lkIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3Q6
OmFuYWx5emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFuYWx5emVyJiBhbmFseXplcikKIHsKICAg
ICBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTU2VnbWVu
dGVkVmFyaWFibGVPYmplY3QqPihjZWxsKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmgJKHJldmlz
aW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2VnbWVudGVk
VmFyaWFibGVPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTItMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTg1LDggKzg1LDggQEAgcHVibGlj
OgogICAgIC8vIEFkZHMgbnVtYmVyT2ZSZWdpc3RlcnNUb0FkZCByZWdpc3RlcnMsIGluaXRpYWxp
emVzIHRoZW0gdG8gVW5kZWZpbmVkLCBhbmQgcmV0dXJucwogICAgIC8vIHRoZSBpbmRleCBvZiB0
aGUgZmlyc3Qgb25lIGFkZGVkLgogICAgIEpTX0VYUE9SVF9QUklWQVRFIFNjb3BlT2Zmc2V0IGFk
ZFZhcmlhYmxlcyh1bnNpZ25lZCBudW1iZXJPZlZhcmlhYmxlc1RvQWRkLCBKU1ZhbHVlKTsKLSAg
ICAKLSAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2Vs
bCosIFNsb3RWaXNpdG9yJik7CisKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOX1dJVEhfTU9E
SUZJRVIoSlNfRVhQT1JUX1BSSVZBVEUpOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2
b2lkIGFuYWx5emVIZWFwKEpTQ2VsbCosIEhlYXBBbmFseXplciYpOwogICAgIAogcHJvdGVjdGVk
OgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZXRJdGVyYXRvci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZXRJdGVyYXRv
ci5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTU2V0SXRlcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE3IEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMSBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01NywxMyArNTcsMTYgQEAg
dm9pZCBKU1NldEl0ZXJhdG9yOjpmaW5pc2hDcmVhdGlvbihWTSYgdgogICAgICAgICBCYXNlOjpp
bnRlcm5hbEZpZWxkKGluZGV4KS5zZXQodm0sIHRoaXMsIHZhbHVlc1tpbmRleF0pOwogfQogCi12
b2lkIEpTU2V0SXRlcmF0b3I6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRv
ciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTU2V0SXRlcmF0
b3I6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsK
ICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTU2V0SXRlcmF0b3IqPihjZWxsKTsKICAg
ICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAgICAgQmFz
ZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKIH0KIAorREVGSU5FX1ZJU0lU
X0NISUxEUkVOKEpTU2V0SXRlcmF0b3IpOworCiBKU1ZhbHVlIEpTU2V0SXRlcmF0b3I6OmNyZWF0
ZVBhaXIoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBrZXksIEpTVmFsdWUg
dmFsdWUpCiB7CiAgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgYXJnczsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2V0SXRlcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NldEl0ZXJhdG9yLmgJKHJldmlzaW9uIDI3Mjgz
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2V0SXRlcmF0b3IuaAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIw
MTYgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
My0yMDIxIEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTEzMCw3ICsxMzAsNyBAQCBwcml2YXRlOgogICAgIEpTX0VYUE9S
VF9QUklWQVRFIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBKU1NldCosIEl0ZXJhdGlvbktpbmQp
OwogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBK
U1ZhbHVlIGNyZWF0ZVBhaXIoSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlLCBKU1ZhbHVlKTsKLSAg
ICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAg
REVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIH07CiBTVEFUSUNfQVNTRVJUX0lTX1RSSVZJQUxMWV9E
RVNUUlVDVElCTEUoSlNTZXRJdGVyYXRvcik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTU3RyaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1N0cmluZy5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw3ICsx
LDcgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDIgSGFycmkgUG9ydGVuIChwb3J0
ZW5Aa2RlLm9yZykKICAqICBDb3B5cmlnaHQgKEMpIDIwMDEgUGV0ZXIgS2VsbHkgKHBta0Bwb3N0
LmNvbSkKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDA0LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTEwNSw3ICsxMDUsOCBAQCBz
aXplX3QgSlNTdHJpbmc6OmVzdGltYXRlZFNpemUoSlNDZWxsKiBjCiAgICAgcmV0dXJuIEJhc2U6
OmVzdGltYXRlZFNpemUoY2VsbCwgdm0pICsgYml0d2lzZV9jYXN0PFN0cmluZ0ltcGwqPihwb2lu
dGVyKS0+Y29zdER1cmluZ0dDKCk7CiB9CiAKLXZvaWQgSlNTdHJpbmc6OnZpc2l0Q2hpbGRyZW4o
SlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZp
c2l0b3I+Cit2b2lkIEpTU3RyaW5nOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZp
c2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNTdHJpbmcqIHRoaXNPYmplY3QgPSBhc1N0cmluZyhj
ZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7
CkBAIC0xNDMsNiArMTQ0LDggQEAgdm9pZCBKU1N0cmluZzo6dmlzaXRDaGlsZHJlbihKU0NlbGwq
IGNlbAogICAgICAgICB2aXNpdG9yLnJlcG9ydEV4dHJhTWVtb3J5VmlzaXRlZChpbXBsLT5jb3N0
RHVyaW5nR0MoKSk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU1N0cmluZyk7CisKIHN0
YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbWF4TGVuZ3RoRm9yT25TdGFja1Jlc29sdmUgPSAyMDQ4
OwogCiB2b2lkIEpTUm9wZVN0cmluZzo6cmVzb2x2ZVJvcGVJbnRlcm5hbDgoTENoYXIqIGJ1ZmZl
cikgY29uc3QKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuaAko
cmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJp
bmcuaAkod29ya2luZyBjb3B5KQpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChD
KSAxOTk5LTIwMDEgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKICAqICBDb3B5cmlnaHQg
KEMpIDIwMDEgUGV0ZXIgS2VsbHkgKHBta0Bwb3N0LmNvbSkKLSAqICBDb3B5cmlnaHQgKEMpIDIw
MDMtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChD
KSAyMDAzLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKQEAgLTIxNyw3ICsyMTcsNyBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgdm9pZCBk
dW1wVG9TdHJlYW0oY29uc3QgSlNDZWxsKiwgUHJpbnRTdHJlYW0mKTsKICAgICBzdGF0aWMgc2l6
ZV90IGVzdGltYXRlZFNpemUoSlNDZWxsKiwgVk0mKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENo
aWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJF
TjsKIAogICAgIEFMV0FZU19JTkxJTkUgYm9vbCBpc1JvcGUoKSBjb25zdAogICAgIHsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nSXRlcmF0b3IuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nSXRlcmF0b3Iu
Y3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U1N0cmluZ0l0ZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAg
KiBDb3B5cmlnaHQgKEMpIDIwMTUgWXVzdWtlIFN1enVraSA8dXRhdGFuZS50ZWFAZ21haWwuY29t
Pi4KLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTUxLDExICs1MSwxNCBAQCBK
U1N0cmluZ0l0ZXJhdG9yKiBKU1N0cmluZ0l0ZXJhdG9yOjpjbG9uCiAgICAgcmV0dXJuIGNsb25l
OwogfQogCi12b2lkIEpTU3RyaW5nSXRlcmF0b3I6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxs
LCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lk
IEpTU3RyaW5nSXRlcmF0b3I6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRv
ciYgdmlzaXRvcikKIHsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTU3RyaW5nSXRl
cmF0b3IqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3Qs
IGluZm8oKSk7CiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsK
IH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTU3RyaW5nSXRlcmF0b3IpOworCiB9IC8vIG5h
bWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5n
SXRlcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U1N0cmluZ0l0ZXJhdG9yLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTU3RyaW5nSXRlcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTUgWXVzdWtlIFN1enVraSA8dXRhdGFuZS50
ZWFAZ21haWwuY29tPi4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTc5LDcgKzgw
LDcgQEAgcHVibGljOgogICAgIEpTVmFsdWUgaW5kZXgoKSBjb25zdCB7IHJldHVybiBpbnRlcm5h
bEZpZWxkKEZpZWxkOjpJbmRleCkuZ2V0KCk7IH0KICAgICBKU1N0cmluZ0l0ZXJhdG9yKiBjbG9u
ZShKU0dsb2JhbE9iamVjdCopOwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0Nl
bGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKIHByaXZh
dGU6CiAgICAgSlNTdHJpbmdJdGVyYXRvcihWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVjdC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTeW1ib2xU
YWJsZU9iamVjdC5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE5IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzYs
NyArMzYsOCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogY29uc3QgQ2xhc3NJbmZvIEpTU3ltYm9sVGFi
bGVPYmplY3Q6OnNfaW5mbyA9IHsgIlN5bWJvbFRhYmxlT2JqZWN0IiwgJkJhc2U6OnNfaW5mbywg
bnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1N5bWJvbFRhYmxlT2JqZWN0
KSB9OwogCi12b2lkIEpTU3ltYm9sVGFibGVPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBj
ZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2
b2lkIEpTU3ltYm9sVGFibGVPYmplY3Q6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwg
VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU1N5bWJvbFRhYmxlT2JqZWN0KiB0aGlzT2JqZWN0
ID0ganNDYXN0PEpTU3ltYm9sVGFibGVPYmplY3QqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JK
RUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC00NCw2ICs0NSw4IEBAIHZvaWQg
SlNTeW1ib2xUYWJsZU9iamVjdDo6dmlzaXRDaGlsZHJlbigKICAgICB2aXNpdG9yLmFwcGVuZCh0
aGlzT2JqZWN0LT5tX3N5bWJvbFRhYmxlKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpT
U3ltYm9sVGFibGVPYmplY3QpOworCiBib29sIEpTU3ltYm9sVGFibGVPYmplY3Q6OmRlbGV0ZVBy
b3BlcnR5KEpTQ2VsbCogY2VsbCwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUHJvcGVy
dHlOYW1lIHByb3BlcnR5TmFtZSwgRGVsZXRlUHJvcGVydHlTbG90JiBzbG90KQogewogICAgIEpT
U3ltYm9sVGFibGVPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNTeW1ib2xUYWJsZU9iamVj
dCo+KGNlbGwpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTeW1ib2xU
YWJsZU9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTU3ltYm9sVGFibGVPYmplY3QuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDIwIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDIxIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtNzAsNyArNzAsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIG1fc3ltYm9sVGFibGUuc2V0KHZt
LCB0aGlzLCBzeW1ib2xUYWJsZSk7CiAgICAgfQogICAgIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0
Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxE
UkVOOwogICAgIAogcHJpdmF0ZToKICAgICBXcml0ZUJhcnJpZXI8U3ltYm9sVGFibGU+IG1fc3lt
Ym9sVGFibGU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1dlYWtPYmpl
Y3RSZWYuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
V2Vha09iamVjdFJlZi5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTV2Vha09iamVjdFJlZi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlLCBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMSBBcHBsZSwgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zOSw3ICsz
OSw4IEBAIHZvaWQgSlNXZWFrT2JqZWN0UmVmOjpmaW5pc2hDcmVhdGlvbihWTSYKICAgICBCYXNl
OjpmaW5pc2hDcmVhdGlvbih2bSk7CiB9CiAKLXZvaWQgSlNXZWFrT2JqZWN0UmVmOjp2aXNpdENo
aWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBl
bmFtZSBWaXNpdG9yPgordm9pZCBKU1dlYWtPYmplY3RSZWY6OnZpc2l0Q2hpbGRyZW5JbXBsKEpT
Q2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0g
anNDYXN0PEpTV2Vha09iamVjdFJlZio+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5I
RVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTUxLDYgKzUyLDggQEAgdm9pZCBKU1dlYWtP
YmplY3RSZWY6OnZpc2l0Q2hpbGRyZW4oSlNDZQogICAgIH0KIH0KIAorREVGSU5FX1ZJU0lUX0NI
SUxEUkVOKEpTV2Vha09iamVjdFJlZik7CisKIHZvaWQgSlNXZWFrT2JqZWN0UmVmOjpmaW5hbGl6
ZVVuY29uZGl0aW9uYWxseShWTSYgdm0pCiB7CiAgICAgaWYgKG1fdmFsdWUgJiYgIXZtLmhlYXAu
aXNNYXJrZWQobV92YWx1ZS5nZXQoKSkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1dlYWtPYmplY3RSZWYuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1dlYWtPYmplY3RSZWYuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNXZWFrT2JqZWN0UmVmLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlLCBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMSBBcHBsZSwgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC02NSw3ICs2NSw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICB2b2lkIGZpbmFsaXplVW5jb25k
aXRpb25hbGx5KFZNJik7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBT
bG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKIHByaXZhdGU6CiAg
ICAgSlNXZWFrT2JqZWN0UmVmKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1dpdGhTY29wZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNXaXRoU2NvcGUuY3BwCShyZXZpc2lv
biAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1dpdGhTY29wZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDEyLCAyMDE2IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMi0yMDIxIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDEsNyArNDEsOCBAQCBKU1dpdGhTY29wZSogSlNXaXRo
U2NvcGU6OmNyZWF0ZSgKICAgICByZXR1cm4gd2l0aFNjb3BlOwogfQogCi12b2lkIEpTV2l0aFNj
b3BlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0
ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1dpdGhTY29wZTo6dmlzaXRDaGlsZHJl
bkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTV2l0aFNjb3Bl
KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTV2l0aFNjb3BlKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dD
X09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNDksNiArNTAsOCBAQCB2
b2lkIEpTV2l0aFNjb3BlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogCiAgICAgdmlzaXRvci5hcHBl
bmQodGhpc09iamVjdC0+bV9vYmplY3QpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNX
aXRoU2NvcGUpOworCiBTdHJ1Y3R1cmUqIEpTV2l0aFNjb3BlOjpjcmVhdGVTdHJ1Y3R1cmUoVk0m
IHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvKQogewogICAg
IHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90bywgVHlwZUlu
Zm8oV2l0aFNjb3BlVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNXaXRoU2NvcGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1dpdGhTY29wZS5oCShyZXZpc2lvbiAyNzI4MzAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1dpdGhTY29wZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxNiBB
cHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAy
MSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTQzLDcgKzQzLDcgQEAgcHVibGljOgogCiAgICAgSlNPYmplY3QqIG9iamVj
dCgpIHsgcmV0dXJuIG1fb2JqZWN0LmdldCgpOyB9CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENo
aWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJF
TjsKIAogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFs
T2JqZWN0KiwgSlNWYWx1ZSBwcm90byk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTV3JhcHBlck9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNXcmFwcGVyT2JqZWN0LmNwcAkocmV2aXNpb24gMjcyODMwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNXcmFwcGVyT2JqZWN0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA2IE1ha3Mg
T3Jsb3ZpY2gKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDksIDIwMTIgQXBwbGUsIEluYy4K
KyAqICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMSBBcHBsZSwgSW5jLgogICoKICAqICBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAg
KiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKQEAgLTI5LDExICsyOSwxNCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogU1RBVElDX0FTU0VS
VF9JU19UUklWSUFMTFlfREVTVFJVQ1RJQkxFKEpTV3JhcHBlck9iamVjdCk7CiAKLXZvaWQgSlNX
cmFwcGVyT2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZp
c2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1dyYXBwZXJPYmplY3Q6
OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAg
ICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTV3JhcHBlck9iamVjdCo+KGNlbGwpOwogICAg
IEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKICAgICBCYXNl
Ojp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwogfQogCitERUZJTkVfVklTSVRf
Q0hJTERSRU5fV0lUSF9NT0RJRklFUihKU19FWFBPUlRfUFJJVkFURSwgSlNXcmFwcGVyT2JqZWN0
KTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1dyYXBwZXJPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1dyYXBwZXJPYmplY3QuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNXcmFwcGVyT2JqZWN0LmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNiArMSw2IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMjAwNiBNYWtzIE9ybG92aWNo
Ci0gKiAgQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtNjQsNyArNjQs
NyBAQCBwdWJsaWM6CiBwcm90ZWN0ZWQ6CiAgICAgZXhwbGljaXQgSlNXcmFwcGVyT2JqZWN0KFZN
JiwgU3RydWN0dXJlKik7CiAKLSAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCB2aXNp
dENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElM
RFJFTl9XSVRIX01PRElGSUVSKEpTX0VYUE9SVF9QUklWQVRFKTsKIH07CiAKIGlubGluZSBKU1dy
YXBwZXJPYmplY3Q6OkpTV3JhcHBlck9iamVjdChWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJl
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTGF6eUNsYXNzU3RydWN0dXJl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9MYXp5Q2xh
c3NTdHJ1Y3R1cmUuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9MYXp5Q2xhc3NTdHJ1Y3R1cmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE5IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNzIs
MTIgKzcyLDE2IEBAIHZvaWQgTGF6eUNsYXNzU3RydWN0dXJlOjpJbml0aWFsaXplcjo6c2UKICAg
ICBjbGFzc1N0cnVjdHVyZS5tX2NvbnN0cnVjdG9yLnNldCh2bSwgZ2xvYmFsLCBjb25zdHJ1Y3Rv
cik7CiB9CiAKLXZvaWQgTGF6eUNsYXNzU3RydWN0dXJlOjp2aXNpdChTbG90VmlzaXRvciYgdmlz
aXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIExhenlDbGFzc1N0cnVjdHVy
ZTo6dmlzaXQoVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBtX3N0cnVjdHVyZS52aXNpdCh2aXNp
dG9yKTsKICAgICB2aXNpdG9yLmFwcGVuZChtX2NvbnN0cnVjdG9yKTsKIH0KIAordGVtcGxhdGUg
dm9pZCBMYXp5Q2xhc3NTdHJ1Y3R1cmU6OnZpc2l0KEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3Rl
bXBsYXRlIHZvaWQgTGF6eUNsYXNzU3RydWN0dXJlOjp2aXNpdChTbG90VmlzaXRvciYpOworCiB2
b2lkIExhenlDbGFzc1N0cnVjdHVyZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAogewog
ICAgIG91dC5wcmludCgiPHN0cnVjdHVyZSA9ICIsIG1fc3RydWN0dXJlLCAiLCBjb25zdHJ1Y3Rv
ciA9ICIsIFJhd1BvaW50ZXIobV9jb25zdHJ1Y3Rvci5nZXQoKSksICI+Iik7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9MYXp5Q2xhc3NTdHJ1Y3R1cmUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9MYXp5Q2xhc3NTdHJ1Y3R1cmUuaAko
cmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTGF6eUNs
YXNzU3RydWN0dXJlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTE3LDcgKzExNyw3IEBAIHB1YmxpYzoKICAg
ICAgICAgcmV0dXJuIG1fY29uc3RydWN0b3IuZ2V0KCk7CiAgICAgfQogICAgIAotICAgIHZvaWQg
dmlzaXQoU2xvdFZpc2l0b3ImKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lk
IHZpc2l0KFZpc2l0b3ImKTsKICAgICAKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25z
dDsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTGF6eVByb3BlcnR5LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTGF6eVByb3BlcnR5
LmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0xh
enlQcm9wZXJ0eS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxNi0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTAzLDcgKzEwMyw3IEBAIHB1YmxpYzoK
ICAgICB2b2lkIHNldE1heUJlTnVsbChWTSYsIGNvbnN0IE93bmVyVHlwZSogb3duZXIsIEVsZW1l
bnRUeXBlKik7CiAgICAgdm9pZCBzZXQoVk0mLCBjb25zdCBPd25lclR5cGUqIG93bmVyLCBFbGVt
ZW50VHlwZSopOwogICAgIAotICAgIHZvaWQgdmlzaXQoU2xvdFZpc2l0b3ImKTsKKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIHZpc2l0KFZpc2l0b3ImKTsKICAgICAKICAgICB2
b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0xhenlQcm9wZXJ0eUlubGluZXMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9MYXp5UHJvcGVydHlJbmxpbmVzLmgJKHJldmlzaW9u
IDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0xhenlQcm9wZXJ0eUlu
bGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC02Niw3ICs2Niw4IEBAIHZvaWQgTGF6eVByb3BlcnR5PE93
bmVyVHlwZSwgRWxlbWVudFR5cGUKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3duZXJUeXBlLCB0
eXBlbmFtZSBFbGVtZW50VHlwZT4KLXZvaWQgTGF6eVByb3BlcnR5PE93bmVyVHlwZSwgRWxlbWVu
dFR5cGU+Ojp2aXNpdChTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZp
c2l0b3I+Cit2b2lkIExhenlQcm9wZXJ0eTxPd25lclR5cGUsIEVsZW1lbnRUeXBlPjo6dmlzaXQo
VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBpZiAobV9wb2ludGVyICYmICEobV9wb2ludGVyICYg
bGF6eVRhZykpCiAgICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQoYml0d2lzZV9jYXN0
PEVsZW1lbnRUeXBlKj4obV9wb2ludGVyKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9Nb2R1bGVQcm9ncmFtRXhlY3V0YWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUuY3BwCShyZXZp
c2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Nb2R1bGVQcm9n
cmFtRXhlY3V0YWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDA5LCAyMDEwLCAyMDEzLCAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03
OSw3ICs3OSw4IEBAIGF1dG8gTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGU6OmVuc3VyZVRlbXAKICAg
ICByZXR1cm4gZW5zdXJlVGVtcGxhdGVPYmplY3RNYXBJbXBsKG1fdGVtcGxhdGVPYmplY3RNYXAp
OwogfQogCi12b2lkIE1vZHVsZVByb2dyYW1FeGVjdXRhYmxlOjp2aXNpdENoaWxkcmVuKEpTQ2Vs
bCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
Pgordm9pZCBNb2R1bGVQcm9ncmFtRXhlY3V0YWJsZTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxs
KiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIE1vZHVsZVByb2dyYW1FeGVjdXRhYmxl
KiB0aGlzT2JqZWN0ID0ganNDYXN0PE1vZHVsZVByb2dyYW1FeGVjdXRhYmxlKj4oY2VsbCk7CiAg
ICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtOTQs
NCArOTUsNiBAQCB2b2lkIE1vZHVsZVByb2dyYW1FeGVjdXRhYmxlOjp2aXNpdENoaWxkCiAgICAg
fQogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUpOwor
CiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L01vZHVsZVByb2dyYW1FeGVjdXRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUuaAkocmV2aXNpb24gMjcyODMw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTW9kdWxlUHJvZ3JhbUV4ZWN1dGFi
bGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDktMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDktMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTc3LDcgKzc3LDcgQEAgcHJpdmF0ZToKIAogICAgIE1v
ZHVsZVByb2dyYW1FeGVjdXRhYmxlKEpTR2xvYmFsT2JqZWN0KiwgY29uc3QgU291cmNlQ29kZSYp
OwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYp
OworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBXcml0ZUJhcnJpZXI8VW5saW5r
ZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrPiBtX3VubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9j
azsKICAgICBXcml0ZUJhcnJpZXI8U3ltYm9sVGFibGU+IG1fbW9kdWxlRW52aXJvbm1lbnRTeW1i
b2xUYWJsZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuY3Bw
CShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRp
b25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTEtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTEtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU1OCw2ICs1NTgsOSBAQCB2b2lkIE9wdGlvbnM6
OnJlY29tcHV0ZURlcGVuZGVudE9wdGlvbnMoCiAKICAgICBpZiAoT3B0aW9uczo6dXNlUHJpdmF0
ZVN0YXRpY0NsYXNzRmllbGRzKCkpCiAgICAgICAgIE9wdGlvbnM6OnVzZVByaXZhdGVDbGFzc0Zp
ZWxkcygpID0gdHJ1ZTsKKworICAgIGlmIChPcHRpb25zOjp2ZXJib3NlVmVyaWZ5R0MoKSkKKyAg
ICAgICAgT3B0aW9uczo6dmVyaWZ5R0MoKSA9IHRydWU7CiB9CiAKIGlubGluZSB2b2lkKiBPcHRp
b25zOjphZGRyZXNzT2ZPcHRpb24oT3B0aW9uczo6SUQgaWQpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9PcHRpb25zTGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0LmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0LmgJKHdvcmtpbmcgY29weSkK
QEAgLTM2OSw2ICszNjksOCBAQCBKU19FWFBPUlRfUFJJVkFURSBib29sIGNhblVzZUpJVENhZ2Uo
KTsKICAgICB2KEJvb2wsIGFsd2F5c0dlbmVyYXRlUENUb0NvZGVPcmlnaW5NYXAsIGZhbHNlLCBO
b3JtYWwsICJUaGlzIHdpbGwgbWFrZSBzdXJlIHdlIGFsd2F5cyBnZW5lcmF0ZSBhIFBDVG9Db2Rl
T3JpZ2luTWFwIGZvciBKSVRlZCBjb2RlLiIpIFwKICAgICBcCiAgICAgdihEb3VibGUsIHJhbmRv
bUludGVncml0eUF1ZGl0UmF0ZSwgMC4wNSwgTm9ybWFsLCAiUHJvYmFiaWxpdHkgb2YgcmFuZG9t
IGludGVncml0eSBhdWRpdHMgWzAuMCAtIDEuMF0iKSBcCisgICAgdihCb29sLCB2ZXJpZnlHQywg
ZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAorICAgIHYoQm9vbCwgdmVyYm9zZVZlcmlmeUdDLCBm
YWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihCb29sLCB2ZXJpZnlIZWFwLCBmYWxzZSwg
Tm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihVbnNpZ25lZCwgbnVtYmVyT2ZHQ0N5Y2xlc1RvUmVj
b3JkRm9yVmVyaWZpY2F0aW9uLCAzLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICBcCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9ncmFtRXhlY3V0YWJsZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvZ3JhbUV4ZWN1dGFibGUu
Y3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Q
cm9ncmFtRXhlY3V0YWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yMDgsNyArMjA4LDggQEAg
YXV0byBQcm9ncmFtRXhlY3V0YWJsZTo6ZW5zdXJlVGVtcGxhdGVPYgogICAgIHJldHVybiBlbnN1
cmVUZW1wbGF0ZU9iamVjdE1hcEltcGwobV90ZW1wbGF0ZU9iamVjdE1hcCk7CiB9CiAKLXZvaWQg
UHJvZ3JhbUV4ZWN1dGFibGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRv
ciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFByb2dyYW1FeGVj
dXRhYmxlOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3Ip
CiB7CiAgICAgUHJvZ3JhbUV4ZWN1dGFibGUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8UHJvZ3JhbUV4
ZWN1dGFibGUqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmpl
Y3QsIGluZm8oKSk7CkBAIC0yMjIsNCArMjIzLDYgQEAgdm9pZCBQcm9ncmFtRXhlY3V0YWJsZTo6
dmlzaXRDaGlsZHJlbihKUwogICAgIH0KIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKFByb2dy
YW1FeGVjdXRhYmxlKTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9Qcm9ncmFtRXhlY3V0YWJsZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb2dyYW1FeGVjdXRhYmxlLmgJKHJldmlzaW9uIDI3
MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb2dyYW1FeGVjdXRhYmxl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDA5LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDA5LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC04MSw3ICs4MSw3IEBAIHByaXZhdGU6CiAKICAgICBQcm9n
cmFtRXhlY3V0YWJsZShKU0dsb2JhbE9iamVjdCosIGNvbnN0IFNvdXJjZUNvZGUmKTsKIAotICAg
IHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBE
RUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgV3JpdGVCYXJyaWVyPFVubGlua2VkUHJvZ3Jh
bUNvZGVCbG9jaz4gbV91bmxpbmtlZFByb2dyYW1Db2RlQmxvY2s7CiAgICAgV3JpdGVCYXJyaWVy
PEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2U+IG1fcHJvZ3JhbUNvZGVCbG9jazsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5TWFwSGFzaFRhYmxlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlNYXBIYXNoVGFi
bGUuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
UHJvcGVydHlNYXBIYXNoVGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiAgQ29weXJpZ2h0IChDKSAyMDA0LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogIENvcHlyaWdodCAoQykgMjAwNC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0xMzMsNyArMTMzLDcgQEAgcHVibGlj
OgogCiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOwog
ICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRD
aGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERS
RU47CiAKICAgICBERUNMQVJFX0VYUE9SVF9JTkZPOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9Qcm9wZXJ0eVRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eVRhYmxlLmNwcAkocmV2aXNpb24gMjcyODMwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlUYWJsZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMTE4LDcgKzExOCw4IEBAIHZvaWQgUHJvcGVydHlUYWJsZTo6ZmluaXNo
Q3JlYXRpb24oVk0mIHYKICAgICB2bS5oZWFwLnJlcG9ydEV4dHJhTWVtb3J5QWxsb2NhdGVkKGRh
dGFTaXplKCkpOwogfQogCi12b2lkIFByb3BlcnR5VGFibGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+
Cit2b2lkIFByb3BlcnR5VGFibGU6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlz
aXRvciYgdmlzaXRvcikKIHsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PFByb3BlcnR5
VGFibGUqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3Qs
IGluZm8oKSk7CkBAIC0xMjYsNiArMTI3LDggQEAgdm9pZCBQcm9wZXJ0eVRhYmxlOjp2aXNpdENo
aWxkcmVuKEpTQ2VsbAogICAgIHZpc2l0b3IucmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKHRoaXNP
YmplY3QtPmRhdGFTaXplKCkpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oUHJvcGVydHlU
YWJsZSk7CisKIHZvaWQgUHJvcGVydHlUYWJsZTo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCiB7CiAg
ICAgc3RhdGljX2Nhc3Q8UHJvcGVydHlUYWJsZSo+KGNlbGwpLT5Qcm9wZXJ0eVRhYmxlOjp+UHJv
cGVydHlUYWJsZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJveHlP
YmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1By
b3h5T2JqZWN0LmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvUHJveHlPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIwIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIxIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBS
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTE1OCw3ICsxMTU4
LDggQEAgYm9vbCBQcm94eU9iamVjdDo6aXNSZXZva2VkKCkgY29uc3QKICAgICByZXR1cm4gaGFu
ZGxlcigpLmlzTnVsbCgpOwogfQogCi12b2lkIFByb3h5T2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpT
Q2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNp
dG9yPgordm9pZCBQcm94eU9iamVjdDo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBW
aXNpdG9yJiB2aXNpdG9yKQogewogICAgIFByb3h5T2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0
PFByb3h5T2JqZWN0Kj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlz
T2JqZWN0LCBpbmZvKCkpOwpAQCAtMTE2OCw0ICsxMTY5LDYgQEAgdm9pZCBQcm94eU9iamVjdDo6
dmlzaXRDaGlsZHJlbihKU0NlbGwqIAogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1f
aGFuZGxlcik7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihQcm94eU9iamVjdCk7CisKIH0g
Ly8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJv
eHlPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Q
cm94eU9iamVjdC5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9Qcm94eU9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTkxLDcgKzkxLDcgQEAgcHJpdmF0
ZToKICAgICBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgSlNHbG9i
YWxPYmplY3QqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIERvbnRFbnVtUHJvcGVydGllc01vZGUpOwog
ICAgIHN0YXRpYyBib29sIHNldFByb3RvdHlwZShKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0Kiwg
SlNWYWx1ZSBwcm90b3R5cGUsIGJvb2wgc2hvdWxkVGhyb3dJZkNhbnRTZXQpOwogICAgIHN0YXRp
YyBKU1ZhbHVlIGdldFByb3RvdHlwZShKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0Kik7Ci0gICAg
c3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERF
Q0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBib29sIGdldE93blByb3BlcnR5U2xvdENvbW1v
bihKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CiAgICAgYm9v
bCBwZXJmb3JtSW50ZXJuYWxNZXRob2RHZXRPd25Qcm9wZXJ0eShKU0dsb2JhbE9iamVjdCosIFBy
b3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9Qcm94eVJldm9rZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvUHJveHlSZXZva2UuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm94eVJldm9rZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIFJp
Z2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIxIEFwcGxlIEluYy4gQWxs
IFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjks
NyArNjksOCBAQCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04ocGVyZm9ybVByb3h5UmV2CiAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KIAotdm9pZCBQcm94eVJl
dm9rZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQor
dGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgUHJveHlSZXZva2U6OnZpc2l0Q2hpbGRy
ZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBQcm94eVJldm9r
ZSogdGhpc09iamVjdCA9IGpzQ2FzdDxQcm94eVJldm9rZSo+KGNlbGwpOwogICAgIEFTU0VSVF9H
Q19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTc4LDQgKzc5LDYgQEAg
dm9pZCBQcm94eVJldm9rZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIAogICAgIHZpc2l0b3IuYXBw
ZW5kKHRoaXNPYmplY3QtPm1fcHJveHkpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oUHJv
eHlSZXZva2UpOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1Byb3h5UmV2b2tlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvUHJveHlSZXZva2UuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJveHlSZXZva2UuaAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxOSBBcHBsZSBJbmMuIEFs
bCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMu
IEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTUyLDcgKzUyLDcgQEAgcHVibGljOgogICAgIH0KIAogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24o
Vk0mLCBQcm94eU9iamVjdCopOwotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogICAgIEpTVmFs
dWUgcHJveHkoKSB7IHJldHVybiBtX3Byb3h5LmdldCgpOyB9CiAgICAgdm9pZCBzZXRQcm94eVRv
TnVsbChWTSYgdm0pIHsgcmV0dXJuIG1fcHJveHkuc2V0KHZtLCB0aGlzLCBqc051bGwoKSk7IH0K
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwQ2FjaGVkUmVzdWx0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBD
YWNoZWRSZXN1bHQuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9SZWdFeHBDYWNoZWRSZXN1bHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMx
LDcgKzMxLDggQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLXZvaWQgUmVnRXhwQ2FjaGVkUmVzdWx0
Ojp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1l
IFZpc2l0b3I+Cit2b2lkIFJlZ0V4cENhY2hlZFJlc3VsdDo6dmlzaXRBZ2dyZWdhdGVJbXBsKFZp
c2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgdmlzaXRvci5hcHBlbmQobV9sYXN0SW5wdXQpOwogICAg
IHZpc2l0b3IuYXBwZW5kKG1fbGFzdFJlZ0V4cCk7CkBAIC00Myw2ICs0NCw4IEBAIHZvaWQgUmVn
RXhwQ2FjaGVkUmVzdWx0Ojp2aXNpdEFnZ3JlZ2F0ZSgKICAgICB9CiB9CiAKK0RFRklORV9WSVNJ
VF9BR0dSRUdBVEUoUmVnRXhwQ2FjaGVkUmVzdWx0KTsKKwogSlNBcnJheSogUmVnRXhwQ2FjaGVk
UmVzdWx0OjpsYXN0UmVzdWx0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTT2JqZWN0
KiBvd25lcikKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBDYWNoZWRSZXN1bHQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBDYWNoZWRSZXN1bHQuaAko
cmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhw
Q2FjaGVkUmVzdWx0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDEyLCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjUsNyArNjUsNyBAQCBwdWJsaWM6
CiAgICAgICAgIHJldHVybiBtX3JlaWZpZWQgPyBtX3JlaWZpZWRJbnB1dC5nZXQoKSA6IG1fbGFz
dElucHV0LmdldCgpOwogICAgIH0KIAotICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0
b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0FHR1JFR0FURTsKIAogICAgIC8vIG1fbGFzdFJlZ0V4
cCB3b3VsZCBiZSBudWxscHRyIHdoZW4gUmVnRXhwQ2FjaGVkUmVzdWx0IGlzIG5vdCByZWlmaWVk
LgogICAgIC8vIElmIHdlIGZpbmQgbV9sYXN0UmVnRXhwIGlzIG51bGxwdHIsIGl0IG1lYW5zIHRo
aXMgc2hvdWxkIGhvbGQgdGhlIGVtcHR5IFJlZ0V4cC4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1JlZ0V4cEdsb2JhbERhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cEdsb2JhbERhdGEuY3BwCShyZXZpc2lvbiAyNzI4
MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBHbG9iYWxEYXRhLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTkgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE5
LTIwMjEgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0zMCwxMSArMzAsMTQgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLXZv
aWQgUmVnRXhwR2xvYmFsRGF0YTo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3Ip
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBSZWdFeHBHbG9iYWxEYXRhOjp2aXNp
dEFnZ3JlZ2F0ZUltcGwoVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBtX2NhY2hlZFJlc3VsdC52
aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKIH0KIAorREVGSU5FX1ZJU0lUX0FHR1JFR0FURShSZWdF
eHBHbG9iYWxEYXRhKTsKKwogSlNWYWx1ZSBSZWdFeHBHbG9iYWxEYXRhOjpnZXRCYWNrcmVmKEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIHVuc2lnbmVkIGkpCiB7CiAgICAgVk0mIHZtID0g
Z2xvYmFsT2JqZWN0LT52bSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
UmVnRXhwR2xvYmFsRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1JlZ0V4cEdsb2JhbERhdGEuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwR2xvYmFsRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCBS
aWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMSBBcHBsZSBJbmMuIEFs
bCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQx
LDcgKzQxLDcgQEAgcHVibGljOgogICAgIHZvaWQgc2V0SW5wdXQoSlNHbG9iYWxPYmplY3QqLCBK
U1N0cmluZyopOwogICAgIEpTU3RyaW5nKiBpbnB1dCgpIHsgcmV0dXJuIG1fY2FjaGVkUmVzdWx0
LmlucHV0KCk7IH0KIAotICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImKTsKKyAg
ICBERUNMQVJFX1ZJU0lUX0FHR1JFR0FURTsKIAogICAgIEpTVmFsdWUgZ2V0QmFja3JlZihKU0ds
b2JhbE9iamVjdCosIHVuc2lnbmVkKTsKICAgICBKU1ZhbHVlIGdldExhc3RQYXJlbihKU0dsb2Jh
bE9iamVjdCopOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwT2Jq
ZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdF
eHBPYmplY3QuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9SZWdFeHBPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAog
LyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUu
b3JnKQotICogIENvcHlyaWdodCAoQykgMjAwMy0yMDE5IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBS
ZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAyMSBBcHBsZSBJbmMuIEFsbCBSaWdo
dHMgUmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCkBAIC00Niw3ICs0Niw4IEBAIHZvaWQg
UmVnRXhwT2JqZWN0OjpmaW5pc2hDcmVhdGlvbihWTSYgdm0KICAgICBBU1NFUlQodHlwZSgpID09
IFJlZ0V4cE9iamVjdFR5cGUpOwogfQogCi12b2lkIFJlZ0V4cE9iamVjdDo6dmlzaXRDaGlsZHJl
bihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUg
VmlzaXRvcj4KK3ZvaWQgUmVnRXhwT2JqZWN0Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNl
bGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgUmVnRXhwT2JqZWN0KiB0aGlzT2JqZWN0ID0g
anNDYXN0PFJlZ0V4cE9iamVjdCo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJ
VFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTU1LDYgKzU2LDggQEAgdm9pZCBSZWdFeHBPYmpl
Y3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKgogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3Qt
Pm1fbGFzdEluZGV4KTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKFJlZ0V4cE9iamVjdCk7
CisKIGJvb2wgUmVnRXhwT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqIG9iamVj
dCwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFt
ZSwgUHJvcGVydHlTbG90JiBzbG90KQogewogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0o
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE9iamVjdC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE9iamVjdC5o
CShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdF
eHBPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJp
Z2h0IChDKSAxOTk5LTIwMDAgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKLSAqICBDb3B5
cmlnaHQgKEMpIDIwMDMtMjAxOSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiAg
Q29weXJpZ2h0IChDKSAyMDAzLTIwMjEgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgog
ICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExl
c3NlciBHZW5lcmFsIFB1YmxpYwpAQCAtMTMzLDcgKzEzMyw3IEBAIHByaXZhdGU6CiAgICAgSlNf
RVhQT1JUX1BSSVZBVEUgUmVnRXhwT2JqZWN0KFZNJiwgU3RydWN0dXJlKiwgUmVnRXhwKik7CiAg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOwogCi0gICAgc3Rh
dGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xB
UkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBib29sIGxhc3RJbmRleElzV3JpdGFibGUoKSBjb25z
dAogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NhbXBsaW5nUHJv
ZmlsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Nh
bXBsaW5nUHJvZmlsZXIuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TYW1wbGluZ1Byb2ZpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjUy
LDcgKzY1Miw3IEBAIHZvaWQgU2FtcGxpbmdQcm9maWxlcjo6cHJvY2Vzc1VudmVyaWZpZWQKICAg
ICBtX3VucHJvY2Vzc2VkU3RhY2tUcmFjZXMuY2xlYXIoKTsKIH0KIAotdm9pZCBTYW1wbGluZ1By
b2ZpbGVyOjp2aXNpdChTbG90VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgU2FtcGxpbmdQcm9maWxl
cjo6dmlzaXQoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBSRUxFQVNFX0FT
U0VSVChtX2xvY2suaXNMb2NrZWQoKSk7CiAgICAgZm9yIChKU0NlbGwqIGNlbGwgOiBtX2xpdmVD
ZWxsUG9pbnRlcnMpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TYW1wbGlu
Z1Byb2ZpbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U2FtcGxpbmdQcm9maWxlci5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TYW1wbGluZ1Byb2ZpbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTcxLDcgKzE3
MSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIG5vdGljZUpTTG9ja0FjcXVpc2l0aW9uKCk7CiAgICAg
dm9pZCBub3RpY2VWTUVudHJ5KCk7CiAgICAgdm9pZCBzaHV0ZG93bigpOwotICAgIHZvaWQgdmlz
aXQoU2xvdFZpc2l0b3ImKTsKKyAgICB2b2lkIHZpc2l0KEFic3RyYWN0U2xvdFZpc2l0b3ImKTsK
ICAgICBMb2NrJiBnZXRMb2NrKCkgeyByZXR1cm4gbV9sb2NrOyB9CiAgICAgdm9pZCBzZXRUaW1p
bmdJbnRlcnZhbChTZWNvbmRzIGludGVydmFsKSB7IG1fdGltaW5nSW50ZXJ2YWwgPSBpbnRlcnZh
bDsgfQogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgc3RhcnQoKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlZEFyZ3VtZW50cy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVkQXJndW1lbnRzLmNwcAkocmV2aXNp
b24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVkQXJndW1l
bnRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTUtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTUtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTk4LDcgKzk4LDggQEAgU2NvcGVkQXJndW1lbnRz
KiBTY29wZWRBcmd1bWVudHM6OmNyZWF0ZQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQg
U2NvcGVkQXJndW1lbnRzOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3Im
IHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBTY29wZWRBcmd1bWVu
dHM6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsK
ICAgICBTY29wZWRBcmd1bWVudHMqIHRoaXNPYmplY3QgPSBzdGF0aWNfY2FzdDxTY29wZWRBcmd1
bWVudHMqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3Qs
IGluZm8oKSk7CkBAIC0xMTUsNiArMTE2LDggQEAgdm9pZCBTY29wZWRBcmd1bWVudHM6OnZpc2l0
Q2hpbGRyZW4oSlNDZQogICAgIH0KIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKFNjb3BlZEFy
Z3VtZW50cyk7CisKIFN0cnVjdHVyZSogU2NvcGVkQXJndW1lbnRzOjpjcmVhdGVTdHJ1Y3R1cmUo
Vk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkK
IHsKICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90
eXBlLCBUeXBlSW5mbyhTY29wZWRBcmd1bWVudHNUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8o
KSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29wZWRBcmd1bWVudHMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29wZWRBcmd1
bWVudHMuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU2NvcGVkQXJndW1lbnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02Myw5ICs2Myw5IEBAIHB1
YmxpYzoKICAgICAKICAgICAvLyBDcmVhdGVzIGFuIGFyZ3VtZW50cyBvYmplY3QgYnkgY29weWlu
ZyB0aGUgYXJndW1lbnRzIGZyb20gYSB3ZWxsLWRlZmluZWQgc3RhY2sgbG9jYXRpb24uCiAgICAg
c3RhdGljIFNjb3BlZEFyZ3VtZW50cyogY3JlYXRlQnlDb3B5aW5nRnJvbShWTSYsIFN0cnVjdHVy
ZSosIFJlZ2lzdGVyKiBhcmd1bWVudHNTdGFydCwgdW5zaWduZWQgdG90YWxMZW5ndGgsIEpTRnVu
Y3Rpb24qIGNhbGxlZSwgU2NvcGVkQXJndW1lbnRzVGFibGUqLCBKU0xleGljYWxFbnZpcm9ubWVu
dCopOwotICAgIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZp
c2l0b3ImKTsKLSAgICAKKworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CisKICAgICB1aW50
MzJfdCBpbnRlcm5hbExlbmd0aCgpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1cm4gbV90b3Rh
bExlbmd0aDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NpbXBsZVR5cGVk
QXJyYXlDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlci5jcHAJKHJldmlzaW9uIDI3MjgzMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NpbXBsZVR5cGVkQXJyYXlDb250cm9s
bGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02Miw3ICs2Miw3IEBAIGJvb2wgU2ltcGxlVHlw
ZWRBcnJheUNvbnRyb2xsZXI6OmlzQXRvbWkKICAgICByZXR1cm4gbV9hbGxvd0F0b21pY3NXYWl0
OwogfQogCi1ib29sIFNpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyOjpKU0FycmF5QnVmZmVyT3du
ZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4g
aGFuZGxlLCB2b2lkKiwgSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJl
YXNvbikKK2Jvb2wgU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXI6OkpTQXJyYXlCdWZmZXJPd25l
cjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBo
YW5kbGUsIHZvaWQqLCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNo
YXIqKiByZWFzb24pCiB7CiAgICAgaWYgKFVOTElLRUxZKHJlYXNvbikpCiAgICAgICAgICpyZWFz
b24gPSAiSlNBcnJheUJ1ZmZlciBpcyBvcGFxdWUgcm9vdCI7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NpbXBsZVR5cGVkQXJyYXlDb250cm9s
bGVyLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1NpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTgsNyArNTgsNyBA
QCBwdWJsaWM6CiBwcml2YXRlOgogICAgIGNsYXNzIEpTQXJyYXlCdWZmZXJPd25lciBmaW5hbCA6
IHB1YmxpYyBXZWFrSGFuZGxlT3duZXIgewogICAgIHB1YmxpYzoKLSAgICAgICAgYm9vbCBpc1Jl
YWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBj
b250ZXh0LCBTbG90VmlzaXRvciYsIGNvbnN0IGNoYXIqKiByZWFzb24pIGZpbmFsOworICAgICAg
ICBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93
bj4sIHZvaWQqIGNvbnRleHQsIEFic3RyYWN0U2xvdFZpc2l0b3ImLCBjb25zdCBjaGFyKiogcmVh
c29uKSBmaW5hbDsKICAgICAgICAgdm9pZCBmaW5hbGl6ZShKU0M6OkhhbmRsZTxKU0M6OlVua25v
d24+LCB2b2lkKiBjb250ZXh0KSBmaW5hbDsKICAgICB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TbWFsbFN0cmluZ3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1NtYWxsU3RyaW5ncy5jcHAJKHJldmlzaW9uIDI3MjgzMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NtYWxsU3RyaW5ncy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDEw
IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0y
MDIxIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtNjYsNyArNjYsNyBAQCB2b2lkIFNtYWxsU3RyaW5nczo6aW5pdGlhbGl6
ZUNvbW1vblN0cmluCiAgICAgc2V0SXNJbml0aWFsaXplZCh0cnVlKTsKIH0KIAotdm9pZCBTbWFs
bFN0cmluZ3M6OnZpc2l0U3Ryb25nUmVmZXJlbmNlcyhTbG90VmlzaXRvciYgdmlzaXRvcikKK3Zv
aWQgU21hbGxTdHJpbmdzOjp2aXNpdFN0cm9uZ1JlZmVyZW5jZXMoQWJzdHJhY3RTbG90VmlzaXRv
ciYgdmlzaXRvcikKIHsKICAgICBtX25lZWRzVG9CZVZpc2l0ZWQgPSBmYWxzZTsKICAgICB2aXNp
dG9yLmFwcGVuZFVuYmFycmllcmVkKG1fZW1wdHlTdHJpbmcpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU21hbGxTdHJpbmdzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU21hbGxTdHJpbmdzLmgJKHJldmlzaW9uIDI3MjgzMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NtYWxsU3RyaW5ncy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOC0yMDE5IEFwcGxl
IEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDIxIEFw
cGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtNDksOSArNDksOSBAQCBjbGFzcyBTdHJpbmdJbXBsOwogCiBuYW1lc3BhY2UgSlND
IHsKIAorY2xhc3MgQWJzdHJhY3RTbG90VmlzaXRvcjsKIGNsYXNzIFZNOwogY2xhc3MgSlNTdHJp
bmc7Ci1jbGFzcyBTbG90VmlzaXRvcjsKIAogc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBtYXhT
aW5nbGVDaGFyYWN0ZXJTdHJpbmcgPSAweEZGOwogCkBAIC03OCw3ICs3OCw3IEBAIHB1YmxpYzoK
ICAgICBKU1N0cmluZyoqIHNpbmdsZUNoYXJhY3RlclN0cmluZ3MoKSB7IHJldHVybiAmbV9zaW5n
bGVDaGFyYWN0ZXJTdHJpbmdzWzBdOyB9CiAKICAgICB2b2lkIGluaXRpYWxpemVDb21tb25TdHJp
bmdzKFZNJik7Ci0gICAgdm9pZCB2aXNpdFN0cm9uZ1JlZmVyZW5jZXMoU2xvdFZpc2l0b3ImKTsK
KyAgICB2b2lkIHZpc2l0U3Ryb25nUmVmZXJlbmNlcyhBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAK
ICNkZWZpbmUgSlNDX0NPTU1PTl9TVFJJTkdTX0FDQ0VTU09SX0RFRklOSVRJT04obmFtZSkgXAog
ICAgIEpTU3RyaW5nKiBuYW1lIyNTdHJpbmcoKSBjb25zdCAgICAgICAgICAgICAgICAgICBcCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TcGFyc2VBcnJheVZhbHVlTWFwLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TcGFyc2VBcnJh
eVZhbHVlTWFwLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU3BhcnNlQXJyYXlWYWx1ZU1hcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yMTAs
NyArMjEwLDggQEAgSlNWYWx1ZSBTcGFyc2VBcnJheUVudHJ5OjpnZXROb25TcGFyc2VNbwogICAg
IHJldHVybiBCYXNlOjpnZXQoKTsKIH0KIAotdm9pZCBTcGFyc2VBcnJheVZhbHVlTWFwOjp2aXNp
dENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0
eXBlbmFtZSBWaXNpdG9yPgordm9pZCBTcGFyc2VBcnJheVZhbHVlTWFwOjp2aXNpdENoaWxkcmVu
SW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgU3BhcnNlQXJyYXlW
YWx1ZU1hcCogdGhpc09iamVjdCA9IGpzQ2FzdDxTcGFyc2VBcnJheVZhbHVlTWFwKj4oY2VsbCk7
CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAt
MjIzLDUgKzIyNCw3IEBAIHZvaWQgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6dmlzaXRDaGlsZHJlbigK
ICAgICB2aXNpdG9yLnJlcG9ydEV4dHJhTWVtb3J5VmlzaXRlZCh0aGlzT2JqZWN0LT5tX3JlcG9y
dGVkQ2FwYWNpdHkgKiBzaXplb2YoTWFwOjpLZXlWYWx1ZVBhaXJUeXBlKSk7CiB9CiAKK0RFRklO
RV9WSVNJVF9DSElMRFJFTihTcGFyc2VBcnJheVZhbHVlTWFwKTsKKwogfSAvLyBuYW1lc3BhY2Ug
SlNDCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NwYXJzZUFycmF5VmFs
dWVNYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TcGFy
c2VBcnJheVZhbHVlTWFwLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1NwYXJzZUFycmF5VmFsdWVNYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxOSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAyMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEx
NSw3ICsxMTUsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRl
U3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlIHByb3RvdHlwZSk7CiAKLSAg
ICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAg
REVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIGJvb2wgc3BhcnNlTW9kZSgpCiAgICAgewpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RhY2tGcmFtZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RhY2tGcmFtZS5jcHAJKHJl
dmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0YWNrRnJh
bWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxNi0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTQxLDEzICsxNDEsNSBAQCBTdHJpbmcgU3RhY2tG
cmFtZTo6dG9TdHJpbmcoVk0mIHZtKSBjb25zCiAgICAgcmV0dXJuIHRyYWNlQnVpbGQudG9TdHJp
bmcoKS5pbXBsKCk7CiB9CiAKLXZvaWQgU3RhY2tGcmFtZTo6dmlzaXRDaGlsZHJlbihTbG90Vmlz
aXRvciYgdmlzaXRvcikKLXsKLSAgICBpZiAobV9jYWxsZWUpCi0gICAgICAgIHZpc2l0b3IuYXBw
ZW5kKG1fY2FsbGVlKTsKLSAgICBpZiAobV9jb2RlQmxvY2spCi0gICAgICAgIHZpc2l0b3IuYXBw
ZW5kKG1fY29kZUJsb2NrKTsKLX0KLQogfSAvLyBuYW1lc3BhY2UgSlNDCiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0YWNrRnJhbWUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdGFja0ZyYW1lLmgJKHJldmlzaW9uIDI3MjgzMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0YWNrRnJhbWUuaAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTI2LDYgKzI2LDcgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiSGVhcC5o
IgorI2luY2x1ZGUgIlNsb3RWaXNpdG9yTWFjcm9zLmgiCiAjaW5jbHVkZSAiVk0uaCIKICNpbmNs
dWRlICJXYXNtSW5kZXhPck5hbWUuaCIKICNpbmNsdWRlICJXcml0ZUJhcnJpZXIuaCIKQEAgLTM1
LDcgKzM2LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIENvZGVCbG9jazsKIGNsYXNzIEpT
T2JqZWN0OwotY2xhc3MgU2xvdFZpc2l0b3I7CiAKIGNsYXNzIFN0YWNrRnJhbWUgewogcHVibGlj
OgpAQCAtNTcsOCArNTcsMTYgQEAgcHVibGljOgogICAgICAgICBBU1NFUlQoaGFzQnl0ZWNvZGVJ
bmRleCgpKTsKICAgICAgICAgcmV0dXJuIG1fYnl0ZWNvZGVJbmRleDsKICAgICB9Ci0gICAgCi0g
ICAgdm9pZCB2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CisKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBWaXNpdG9yPgorICAgIHZvaWQgdmlzaXRDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQor
ICAgIHsKKyAgICAgICAgaWYgKG1fY2FsbGVlKQorICAgICAgICAgICAgdmlzaXRvci5hcHBlbmQo
bV9jYWxsZWUpOworICAgICAgICBpZiAobV9jb2RlQmxvY2spCisgICAgICAgICAgICB2aXNpdG9y
LmFwcGVuZChtX2NvZGVCbG9jayk7CisgICAgfQorCiAgICAgYm9vbCBpc01hcmtlZChWTSYgdm0p
IGNvbnN0IHsgcmV0dXJuICghbV9jYWxsZWUgfHwgdm0uaGVhcC5pc01hcmtlZChtX2NhbGxlZS5n
ZXQoKSkpICYmICghbV9jb2RlQmxvY2sgfHwgdm0uaGVhcC5pc01hcmtlZChtX2NvZGVCbG9jay5n
ZXQoKSkpOyB9CiAKIHByaXZhdGU6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TdHJ1Y3R1cmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1N0cnVjdHVyZS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDIwIEFsZXhleSBTaHZheWthIDxzaHZhaWth
bGVzaEBnbWFpbC5jb20+LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMTI2OCw3ICsxMjY4LDggQEAg
dm9pZCBTdHJ1Y3R1cmU6OmRpZFRyYW5zaXRpb25Gcm9tVGhpc1N0cgogICAgICAgICBtX3RyYW5z
aXRpb25XYXRjaHBvaW50U2V0LmZpcmVBbGwodm0oKSwgU3RydWN0dXJlRmlyZURldGFpbCh0aGlz
KSk7CiB9CiAKLXZvaWQgU3RydWN0dXJlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xv
dFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBTdHJ1
Y3R1cmU6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikK
IHsKICAgICBTdHJ1Y3R1cmUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8U3RydWN0dXJlKj4oY2VsbCk7
CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAt
MTI5MCwzMiArMTI5MSwzOCBAQCB2b2lkIFN0cnVjdHVyZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwq
IGNlCiAgICAgICAgIC8vIE5PVEU6IFRoaXMgY2FuIGludGVybGVhdmUgaW4gcGluKCksIGluIHdo
aWNoIGNhc2UgaXQgbWF5IHNlZSBhIG51bGwgcHJvcGVydHkgdGFibGUuCiAgICAgICAgIC8vIFRo
YXQncyBmaW5lLCBiZWNhdXNlIHRoZW4gdGhlIGJhcnJpZXIgd2lsbCBmaXJlIGFuZCB3ZSB3aWxs
IHNjYW4gdGhpcyBhZ2Fpbi4KICAgICAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9w
cm9wZXJ0eVRhYmxlVW5zYWZlKTsKLSAgICB9IGVsc2UgaWYgKHZpc2l0b3IuaXNBbmFseXppbmdI
ZWFwKCkpCisgICAgfSBlbHNlIGlmICh2aXNpdG9yLnZtKCkuaXNBbmFseXppbmdIZWFwKCkpCiAg
ICAgICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fcHJvcGVydHlUYWJsZVVuc2FmZSk7
CiAgICAgZWxzZSBpZiAodGhpc09iamVjdC0+bV9wcm9wZXJ0eVRhYmxlVW5zYWZlKQogICAgICAg
ICB0aGlzT2JqZWN0LT5tX3Byb3BlcnR5VGFibGVVbnNhZmUuY2xlYXIoKTsKIH0KIAotYm9vbCBT
dHJ1Y3R1cmU6OmlzQ2hlYXBEdXJpbmdHQyhWTSYgdm0pCitERUZJTkVfVklTSVRfQ0hJTERSRU4o
U3RydWN0dXJlKTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK0FMV0FZU19JTkxJTkUg
Ym9vbCBTdHJ1Y3R1cmU6OmlzQ2hlYXBEdXJpbmdHQyhWaXNpdG9yJiB2aXNpdG9yKQogewogICAg
IC8vIEZJWE1FOiBXZSBjb3VsZCBtYWtlIHRoaXMgZXZlbiBzYWZlciBieSByZXR1cm5pbmcgZmFs
c2UgaWYgdGhpcyBzdHJ1Y3R1cmUncyBwcm9wZXJ0eSB0YWJsZQogICAgIC8vIGhhcyBhbnkgbGFy
Z2UgcHJvcGVydHkgbmFtZXMuCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE1NzMzNAogICAgIAotICAgIHJldHVybiAoIW1fZ2xvYmFsT2JqZWN0IHx8IHZt
LmhlYXAuaXNNYXJrZWQobV9nbG9iYWxPYmplY3QuZ2V0KCkpKQotICAgICAgICAmJiAoaGFzUG9s
eVByb3RvKCkgfHwgIXN0b3JlZFByb3RvdHlwZU9iamVjdCgpIHx8IHZtLmhlYXAuaXNNYXJrZWQo
c3RvcmVkUHJvdG90eXBlT2JqZWN0KCkpKTsKKyAgICByZXR1cm4gKCFtX2dsb2JhbE9iamVjdCB8
fCB2aXNpdG9yLmlzTWFya2VkKG1fZ2xvYmFsT2JqZWN0LmdldCgpKSkKKyAgICAgICAgJiYgKGhh
c1BvbHlQcm90bygpIHx8ICFzdG9yZWRQcm90b3R5cGVPYmplY3QoKSB8fCB2aXNpdG9yLmlzTWFy
a2VkKHN0b3JlZFByb3RvdHlwZU9iamVjdCgpKSk7CiB9CiAKLWJvb2wgU3RydWN0dXJlOjptYXJr
SWZDaGVhcChTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+
Citib29sIFN0cnVjdHVyZTo6bWFya0lmQ2hlYXAoVmlzaXRvciYgdmlzaXRvcikKIHsKLSAgICBW
TSYgdm0gPSB2aXNpdG9yLnZtKCk7Ci0gICAgaWYgKCFpc0NoZWFwRHVyaW5nR0Modm0pKQotICAg
ICAgICByZXR1cm4gdm0uaGVhcC5pc01hcmtlZCh0aGlzKTsKLSAgICAKKyAgICBpZiAoIWlzQ2hl
YXBEdXJpbmdHQyh2aXNpdG9yKSkKKyAgICAgICAgcmV0dXJuIHZpc2l0b3IuaXNNYXJrZWQodGhp
cyk7CisKICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKHRoaXMpOwogICAgIHJldHVybiB0
cnVlOwogfQogCit0ZW1wbGF0ZSBib29sIFN0cnVjdHVyZTo6bWFya0lmQ2hlYXAoQWJzdHJhY3RT
bG90VmlzaXRvciYpOwordGVtcGxhdGUgYm9vbCBTdHJ1Y3R1cmU6Om1hcmtJZkNoZWFwKFNsb3RW
aXNpdG9yJik7CisKIFJlZjxTdHJ1Y3R1cmVTaGFwZT4gU3RydWN0dXJlOjp0b1N0cnVjdHVyZVNo
YXBlKEpTVmFsdWUgdmFsdWUsIGJvb2wmIHNhd1BvbHlQcm90b1N0cnVjdHVyZSkKIHsKICAgICBS
ZWY8U3RydWN0dXJlU2hhcGU+IGJhc2VTaGFwZSA9IFN0cnVjdHVyZVNoYXBlOjpjcmVhdGUoKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCShyZXZpc2lv
biAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgt
MjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDgtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTYwLDcgKzYwLDYgQEAgY2xhc3MgUHJvcGVydHlOYW1lQXJyYXlE
YXRhOwogY2xhc3MgUHJvcGVydHlUYWJsZTsKIGNsYXNzIFN0cnVjdHVyZUNoYWluOwogY2xhc3Mg
U3RydWN0dXJlU2hhcGU7Ci1jbGFzcyBTbG90VmlzaXRvcjsKIGNsYXNzIEpTU3RyaW5nOwogc3Ry
dWN0IER1bXBDb250ZXh0Owogc3RydWN0IEhhc2hUYWJsZTsKQEAgLTMxMCw3ICszMDksNyBAQCBw
dWJsaWM6CiAgICAgSlNWYWx1ZSBwcm90b3R5cGVGb3JMb29rdXAoSlNHbG9iYWxPYmplY3QqLCBK
U0NlbGwqIGJhc2UpIGNvbnN0OwogICAgIFN0cnVjdHVyZUNoYWluKiBwcm90b3R5cGVDaGFpbihW
TSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNPYmplY3QqIGJhc2UpIGNvbnN0OwogICAgIFN0cnVjdHVy
ZUNoYWluKiBwcm90b3R5cGVDaGFpbihKU0dsb2JhbE9iamVjdCosIEpTT2JqZWN0KiBiYXNlKSBj
b25zdDsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9y
Jik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKICAgICAKICAgICAvLyBBIFN0cnVjdHVy
ZSBpcyBjaGVhcCB0byBtYXJrIGR1cmluZyBHQyBpZiBkb2luZyBzbyB3b3VsZCBvbmx5IGFkZCBh
IHNtYWxsIGFuZCBib3VuZGVkIGFtb3VudAogICAgIC8vIHRvIG91ciBoZWFwIGZvb3RwcmludC4g
Rm9yIGV4YW1wbGUsIGlmIHRoZSBzdHJ1Y3R1cmUgcmVmZXJzIHRvIGEgZ2xvYmFsIG9iamVjdCB0
aGF0IGlzIG5vdApAQCAtMzE4LDEwICszMTcsMTAgQEAgcHVibGljOgogICAgIC8vIGluY3JlYXNl
IGluIGZvb3RwcmludCBiZWNhdXNlIG5vIG90aGVyIG9iamVjdCByZWZlcnMgdG8gdGhhdCBnbG9i
YWwgb2JqZWN0LiBUaGlzIG1ldGhvZAogICAgIC8vIHJldHVybnMgdHJ1ZSBpZiBhbGwgdXNlci1j
b250cm9sbGVkIChhbmQgaGVuY2UgdW5ib3VuZGVkIGluIHNpemUpIG9iamVjdHMgcmVmZXJlbmNl
ZCBmcm9tIHRoZQogICAgIC8vIFN0cnVjdHVyZSBhcmUgYWxyZWFkeSBtYXJrZWQuCi0gICAgYm9v
bCBpc0NoZWFwRHVyaW5nR0MoVk0mKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiBi
b29sIGlzQ2hlYXBEdXJpbmdHQyhWaXNpdG9yJik7CiAgICAgCiAgICAgLy8gUmV0dXJucyB0cnVl
IGlmIHRoaXMgc3RydWN0dXJlIGlzIG5vdyBtYXJrZWQuCi0gICAgYm9vbCBtYXJrSWZDaGVhcChT
bG90VmlzaXRvciYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IGJvb2wgbWFya0lm
Q2hlYXAoVmlzaXRvciYpOwogICAgIAogICAgIGJvb2wgaGFzUmFyZURhdGEoKSBjb25zdAogICAg
IHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUNoYWluLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVD
aGFpbi5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1N0cnVjdHVyZUNoYWluLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02Niw3ICs2Niw4IEBAIHZvaWQg
U3RydWN0dXJlQ2hhaW46OmZpbmlzaENyZWF0aW9uKFZNJiAKICAgICB9CiB9CiAKLXZvaWQgU3Ry
dWN0dXJlQ2hhaW46OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlz
aXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFN0cnVjdHVyZUNoYWluOjp2
aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAg
U3RydWN0dXJlQ2hhaW4qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8U3RydWN0dXJlQ2hhaW4qPihjZWxs
KTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBA
IC04MCw0ICs4MSw2IEBAIHZvaWQgU3RydWN0dXJlQ2hhaW46OnZpc2l0Q2hpbGRyZW4oSlNDZWwK
ICAgICB9CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihTdHJ1Y3R1cmVDaGFpbik7CisKIH0g
Ly8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3Ry
dWN0dXJlQ2hhaW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TdHJ1Y3R1cmVDaGFpbi5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TdHJ1Y3R1cmVDaGFpbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTEsNyAr
NTEsNyBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgU3RydWN0dXJlQ2hhaW4qIGNyZWF0ZShWTSYs
IEpTT2JqZWN0Kik7CiAgICAgU3RydWN0dXJlSUQqIGhlYWQoKSB7IHJldHVybiBtX3ZlY3Rvci5n
ZXQoKTsgfQotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0
b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgc3RhdGljIFN0cnVjdHVy
ZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
SlNWYWx1ZSBwcm90b3R5cGUpCiAgICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU3RydWN0dXJlUmFyZURhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZVJhcmVEYXRhLmNwcAkocmV2aXNpb24gMjcyODMwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlUmFyZURhdGEuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
My0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtNjcsNyArNjcsOCBAQCBTdHJ1Y3R1cmVSYXJlRGF0YTo6U3RydWN0
dXJlUmFyZURhdGEoVk0mCiAgICAgICAgIG1fcHJldmlvdXMuc2V0KHZtLCB0aGlzLCBwcmV2aW91
cyk7CiB9CiAKLXZvaWQgU3RydWN0dXJlUmFyZURhdGE6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBj
ZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2
b2lkIFN0cnVjdHVyZVJhcmVEYXRhOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZp
c2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgU3RydWN0dXJlUmFyZURhdGEqIHRoaXNPYmplY3QgPSBq
c0Nhc3Q8U3RydWN0dXJlUmFyZURhdGEqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lO
SEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC04Niw2ICs4Nyw4IEBAIHZvaWQgU3RydWN0
dXJlUmFyZURhdGE6OnZpc2l0Q2hpbGRyZW4oSlMKICAgICB9CiB9CiAKK0RFRklORV9WSVNJVF9D
SElMRFJFTihTdHJ1Y3R1cmVSYXJlRGF0YSk7CisKIC8vIC0tLS0tLS0tLS0tIENhY2hlZCBzcGVj
aWFsIHByb3BlcnRpZXMgaGVscGVyIHdhdGNocG9pbnQgY2xhc3NlcyAtLS0tLS0tLS0tLQogCiBj
bGFzcyBDYWNoZWRTcGVjaWFsUHJvcGVydHlBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdh
dGNocG9pbnQgZmluYWwgOiBwdWJsaWMgQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRj
aHBvaW50QmFzZSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1
cmVSYXJlRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1N0cnVjdHVyZVJhcmVEYXRhLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZVJhcmVEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjAgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02
OCw3ICs2OCw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNEZXN0
cnVjdGlvbiA9IHRydWU7CiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKIAotICAg
IHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBE
RUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3Ry
dWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlIHByb3RvdHlwZSk7CiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJvbFRhYmxlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TeW1ib2xUYWJsZS5jcHAJKHJldmlz
aW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJvbFRhYmxl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTItMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTItMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTkyLDcgKzkyLDggQEAgdm9pZCBTeW1ib2xUYWJsZTo6
ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKIH0K
IAotdm9pZCBTeW1ib2xUYWJsZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIHRoaXNDZWxsLCBTbG90
VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFN5bWJv
bFRhYmxlOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIHRoaXNDZWxsLCBWaXNpdG9yJiB2aXNp
dG9yKQogewogICAgIFN5bWJvbFRhYmxlKiB0aGlzU3ltYm9sVGFibGUgPSBqc0Nhc3Q8U3ltYm9s
VGFibGUqPih0aGlzQ2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzU3lt
Ym9sVGFibGUsIGluZm8oKSk7CkBAIC0xMDgsNiArMTA5LDggQEAgdm9pZCBTeW1ib2xUYWJsZTo6
dmlzaXRDaGlsZHJlbihKU0NlbGwqIAogICAgIHRoaXNTeW1ib2xUYWJsZS0+bV9sb2NhbFRvRW50
cnkgPSBudWxscHRyOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oU3ltYm9sVGFibGUpOwor
CiBjb25zdCBTeW1ib2xUYWJsZTo6TG9jYWxUb0VudHJ5VmVjJiBTeW1ib2xUYWJsZTo6bG9jYWxU
b0VudHJ5KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYpCiB7CiAgICAgaWYgKFVOTElLRUxZKCFt
X2xvY2FsVG9FbnRyeSkpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5
bWJvbFRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U3ltYm9sVGFibGUuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU3ltYm9sVGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTczMyw3ICs3MzMsNyBA
QCBwdWJsaWM6CiAgICAgICAgIG1fc2luZ2xldG9uLm5vdGlmeVdyaXRlKHZtLCB0aGlzLCBzY29w
ZSwgcmVhc29uKTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2Vs
bCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIERF
Q0xBUkVfRVhQT1JUX0lORk87CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1R5cGVQcm9maWxlckxvZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvVHlwZVByb2ZpbGVyTG9nLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZVByb2ZpbGVyTG9nLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxOSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAyMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTEyNCw3ICsxMjQsNyBAQCB2b2lkIFR5cGVQcm9maWxlckxvZzo6cHJvY2Vzc0xvZ0Vu
dHJpZXMoCiAgICAgfQogfQogCi12b2lkIFR5cGVQcm9maWxlckxvZzo6dmlzaXQoU2xvdFZpc2l0
b3ImIHZpc2l0b3IpCit2b2lkIFR5cGVQcm9maWxlckxvZzo6dmlzaXQoQWJzdHJhY3RTbG90Vmlz
aXRvciYgdmlzaXRvcikKIHsKICAgICBmb3IgKExvZ0VudHJ5KiBlbnRyeSA9IG1fbG9nU3RhcnRQ
dHI7IGVudHJ5ICE9IG1fY3VycmVudExvZ0VudHJ5UHRyOyArK2VudHJ5KSB7CiAgICAgICAgIHZp
c2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQoZW50cnktPnZhbHVlKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1R5cGVQcm9maWxlckxvZy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVQcm9maWxlckxvZy5oCShyZXZpc2lvbiAyNzI4
MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlUHJvZmlsZXJMb2cuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIw
MjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC01OSw3ICs1OSw3IEBAIHB1YmxpYzoKICAgICBKU19FWFBPUlRfUFJJVkFU
RSB2b2lkIHByb2Nlc3NMb2dFbnRyaWVzKFZNJiwgY29uc3QgU3RyaW5nJik7CiAgICAgTG9nRW50
cnkqIGxvZ0VuZFB0cigpIGNvbnN0IHsgcmV0dXJuIG1fbG9nRW5kUHRyOyB9CiAKLSAgICB2b2lk
IHZpc2l0KFNsb3RWaXNpdG9yJik7CisgICAgdm9pZCB2aXNpdChBYnN0cmFjdFNsb3RWaXNpdG9y
Jik7CiAKICAgICBzdGF0aWMgcHRyZGlmZl90IGxvZ1N0YXJ0T2Zmc2V0KCkgeyByZXR1cm4gT0JK
RUNUX09GRlNFVE9GKFR5cGVQcm9maWxlckxvZywgbV9sb2dTdGFydFB0cik7IH0KICAgICBzdGF0
aWMgcHRyZGlmZl90IGN1cnJlbnRMb2dFbnRyeU9mZnNldCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZT
RVRPRihUeXBlUHJvZmlsZXJMb2csIG1fY3VycmVudExvZ0VudHJ5UHRyKTsgfQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAwOC0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTIxLDYgKzEyMSw3
IEBAIGNsYXNzIEZhc3RNYWxsb2NBbGlnbmVkTWVtb3J5QWxsb2NhdG9yOwogY2xhc3MgR2lnYWNh
Z2VBbGlnbmVkTWVtb3J5QWxsb2NhdG9yOwogY2xhc3MgSGFuZGxlU3RhY2s7CiBjbGFzcyBIYXNP
d25Qcm9wZXJ0eUNhY2hlOworY2xhc3MgSGVhcEFuYWx5emVyOwogY2xhc3MgSGVhcFByb2ZpbGVy
OwogY2xhc3MgSWRlbnRpZmllcjsKIGNsYXNzIEludGVycHJldGVyOwpAQCAtMzEwLDYgKzMxMSwx
MCBAQCBwdWJsaWM6CiAgICAgSGVhcFByb2ZpbGVyKiBoZWFwUHJvZmlsZXIoKSBjb25zdCB7IHJl
dHVybiBtX2hlYXBQcm9maWxlci5nZXQoKTsgfQogICAgIEpTX0VYUE9SVF9QUklWQVRFIEhlYXBQ
cm9maWxlciYgZW5zdXJlSGVhcFByb2ZpbGVyKCk7CiAKKyAgICBib29sIGlzQW5hbHl6aW5nSGVh
cCgpIGNvbnN0IHsgcmV0dXJuIG1fYWN0aXZlSGVhcEFuYWx5emVyOyB9CisgICAgSGVhcEFuYWx5
emVyKiBhY3RpdmVIZWFwQW5hbHl6ZXIoKSBjb25zdCB7IHJldHVybiBtX2FjdGl2ZUhlYXBBbmFs
eXplcjsgfQorICAgIHZvaWQgc2V0QWN0aXZlSGVhcEFuYWx5emVyKEhlYXBBbmFseXplciogYW5h
bHl6ZXIpIHsgbV9hY3RpdmVIZWFwQW5hbHl6ZXIgPSBhbmFseXplcjsgfQorCiAjaWYgRU5BQkxF
KFNBTVBMSU5HX1BST0ZJTEVSKQogICAgIFNhbXBsaW5nUHJvZmlsZXIqIHNhbXBsaW5nUHJvZmls
ZXIoKSB7IHJldHVybiBtX3NhbXBsaW5nUHJvZmlsZXIuZ2V0KCk7IH0KICAgICBKU19FWFBPUlRf
UFJJVkFURSBTYW1wbGluZ1Byb2ZpbGVyJiBlbnN1cmVTYW1wbGluZ1Byb2ZpbGVyKFJlZjxTdG9w
d2F0Y2g+JiYpOwpAQCAtMTE5NSw5ICsxMjAwLDEwIEBAIHB1YmxpYzoKICAgICBib29sIGRpZEVu
dGVyVk0geyBmYWxzZSB9OwogcHJpdmF0ZToKICAgICBib29sIG1fZmFpbE5leHROZXdDb2RlQmxv
Y2sgeyBmYWxzZSB9OwotICAgIERlbGV0ZVByb3BlcnR5TW9kZSBtX2RlbGV0ZVByb3BlcnR5TW9k
ZSB7IERlbGV0ZVByb3BlcnR5TW9kZTo6RGVmYXVsdCB9OwogICAgIGJvb2wgbV9nbG9iYWxDb25z
dFJlZGVjbGFyYXRpb25TaG91bGRUaHJvdyB7IHRydWUgfTsKICAgICBib29sIG1fc2hvdWxkQnVp
bGRQQ1RvQ29kZU9yaWdpbk1hcHBpbmcgeyBmYWxzZSB9OworICAgIERlbGV0ZVByb3BlcnR5TW9k
ZSBtX2RlbGV0ZVByb3BlcnR5TW9kZSB7IERlbGV0ZVByb3BlcnR5TW9kZTo6RGVmYXVsdCB9Owor
ICAgIEhlYXBBbmFseXplciogbV9hY3RpdmVIZWFwQW5hbHl6ZXIgeyBudWxscHRyIH07CiAgICAg
c3RkOjp1bmlxdWVfcHRyPENvZGVDYWNoZT4gbV9jb2RlQ2FjaGU7CiAgICAgc3RkOjp1bmlxdWVf
cHRyPEludGxDYWNoZT4gbV9pbnRsQ2FjaGU7CiAgICAgc3RkOjp1bmlxdWVfcHRyPEJ1aWx0aW5F
eGVjdXRhYmxlcz4gbV9idWlsdGluRXhlY3V0YWJsZXM7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9XZWFrTWFwSW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvV2Vha01hcEltcGwuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9XZWFrTWFwSW1wbC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIxIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAxNyBZdXN1a2UgU3V6
dWtpIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMzksOCAr
MzksOSBAQCB2b2lkIFdlYWtNYXBJbXBsPFdlYWtNYXBCdWNrZXQ+OjpkZXN0cm95CiAgICAgc3Rh
dGljX2Nhc3Q8V2Vha01hcEltcGwqPihjZWxsKS0+fldlYWtNYXBJbXBsKCk7CiB9CiAKLXRlbXBs
YXRlIDx0eXBlbmFtZSBXZWFrTWFwQnVja2V0Pgotdm9pZCBXZWFrTWFwSW1wbDxXZWFrTWFwQnVj
a2V0Pjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQor
dGVtcGxhdGU8dHlwZW5hbWUgV2Vha01hcEJ1Y2tldD4KK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0
b3I+Cit2b2lkIFdlYWtNYXBJbXBsPFdlYWtNYXBCdWNrZXQ+Ojp2aXNpdENoaWxkcmVuSW1wbChK
U0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgV2Vha01hcEltcGwqIHRoaXNP
YmplY3QgPSBqc0Nhc3Q8V2Vha01hcEltcGwqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNU
X0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC00OCw2ICs0OSw4IEBAIHZvaWQgV2Vh
a01hcEltcGw8V2Vha01hcEJ1Y2tldD46OnZpc2l0Q2gKICAgICB2aXNpdG9yLnJlcG9ydEV4dHJh
TWVtb3J5VmlzaXRlZCh0aGlzT2JqZWN0LT5tX2NhcGFjaXR5ICogc2l6ZW9mKFdlYWtNYXBCdWNr
ZXQpKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOX1dJVEhfTU9ESUZJRVIodGVtcGxhdGU8
dHlwZW5hbWUgV2Vha01hcEJ1Y2tldD4sIFdlYWtNYXBJbXBsPFdlYWtNYXBCdWNrZXQ+KTsKKwog
dGVtcGxhdGUgPHR5cGVuYW1lIFdlYWtNYXBCdWNrZXQ+CiBzaXplX3QgV2Vha01hcEltcGw8V2Vh
a01hcEJ1Y2tldD46OmVzdGltYXRlZFNpemUoSlNDZWxsKiBjZWxsLCBWTSYgdm0pCiB7CkBAIC01
NiwxNSArNTksMTQgQEAgc2l6ZV90IFdlYWtNYXBJbXBsPFdlYWtNYXBCdWNrZXQ+Ojplc3RpbQog
fQogCiB0ZW1wbGF0ZSA8Pgotdm9pZCBXZWFrTWFwSW1wbDxXZWFrTWFwQnVja2V0PFdlYWtNYXBC
dWNrZXREYXRhS2V5Pj46OnZpc2l0T3V0cHV0Q29uc3RyYWludHMoSlNDZWxsKiwgU2xvdFZpc2l0
b3ImKQordm9pZCBXZWFrTWFwSW1wbDxXZWFrTWFwQnVja2V0PFdlYWtNYXBCdWNrZXREYXRhS2V5
Pj46OnZpc2l0T3V0cHV0Q29uc3RyYWludHMoSlNDZWxsKiwgQWJzdHJhY3RTbG90VmlzaXRvciYp
CiB7CiAgICAgLy8gT25seSBKU1dlYWtNYXAgbmVlZHMgdG8gaGFydmVzdCB2YWx1ZSByZWZlcmVu
Y2VzCiB9CiAKIHRlbXBsYXRlIDw+Ci12b2lkIFdlYWtNYXBJbXBsPFdlYWtNYXBCdWNrZXQ8V2Vh
a01hcEJ1Y2tldERhdGFLZXlWYWx1ZT4+Ojp2aXNpdE91dHB1dENvbnN0cmFpbnRzKEpTQ2VsbCog
Y2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIFdlYWtNYXBJbXBsPFdlYWtNYXBCdWNr
ZXQ8V2Vha01hcEJ1Y2tldERhdGFLZXlWYWx1ZT4+Ojp2aXNpdE91dHB1dENvbnN0cmFpbnRzKEpT
Q2VsbCogY2VsbCwgQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKLSAgICBWTSYgdm0g
PSB2aXNpdG9yLnZtKCk7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxXZWFrTWFwSW1w
bCo+KGNlbGwpOwogICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sodGhpc09iamVjdC0+Y2VsbExv
Y2soKSk7CiAgICAgYXV0byogYnVmZmVyID0gdGhpc09iamVjdC0+YnVmZmVyKCk7CkBAIC03Miw3
ICs3NCw3IEBAIHZvaWQgV2Vha01hcEltcGw8V2Vha01hcEJ1Y2tldDxXZWFrTWFwQnUKICAgICAg
ICAgYXV0byogYnVja2V0ID0gYnVmZmVyICsgaW5kZXg7CiAgICAgICAgIGlmIChidWNrZXQtPmlz
RW1wdHkoKSB8fCBidWNrZXQtPmlzRGVsZXRlZCgpKQogICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgIGlmICghdm0uaGVhcC5pc01hcmtlZChidWNrZXQtPmtleSgpKSkKKyAgICAgICAgaWYg
KCF2aXNpdG9yLmlzTWFya2VkKGJ1Y2tldC0+a2V5KCkpKQogICAgICAgICAgICAgY29udGludWU7
CiAgICAgICAgIGJ1Y2tldC0+dmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7CiAgICAgfQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha01hcEltcGwuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9XZWFrTWFwSW1wbC5oCShyZXZpc2lvbiAy
NzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9XZWFrTWFwSW1wbC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNi0y
MDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
Ni0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykg
MjAxNyBZdXN1a2UgU3V6dWtpIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+LgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dApAQCAtMTQ1LDcgKzE0NSw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICB0ZW1wbGF0ZSA8
dHlwZW5hbWUgVCA9IERhdGE+Ci0gICAgQUxXQVlTX0lOTElORSB0eXBlbmFtZSBzdGQ6OmVuYWJs
ZV9pZjxzdGQ6OmlzX3NhbWU8VCwgV2Vha01hcEJ1Y2tldERhdGFLZXlWYWx1ZT46OnZhbHVlPjo6
dHlwZSB2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYgdmlzaXRvcikKKyAgICBBTFdBWVNfSU5M
SU5FIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTxULCBXZWFrTWFwQnVja2V0
RGF0YUtleVZhbHVlPjo6dmFsdWU+Ojp0eXBlIHZpc2l0QWdncmVnYXRlKEFic3RyYWN0U2xvdFZp
c2l0b3ImIHZpc2l0b3IpCiAgICAgewogICAgICAgICB2aXNpdG9yLmFwcGVuZChtX2RhdGEudmFs
dWUpOwogICAgIH0KQEAgLTIwMiw3ICsyMDIsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOwogICAgIHN0YXRpYyB2b2lkIGRlc3Ry
b3koSlNDZWxsKik7CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNs
b3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIHN0YXRpYyBz
aXplX3QgZXN0aW1hdGVkU2l6ZShKU0NlbGwqLCBWTSYpOwogCkBAIC0zMTEsNyArMzExLDcgQEAg
cHVibGljOgogICAgICAgICByZXR1cm4gdm0ud2Vha1NldFNwYWNlPG1vZGU+KCk7CiAgICAgfQog
Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRPdXRwdXRDb25zdHJhaW50cyhKU0NlbGwqLCBTbG90Vmlz
aXRvciYpOworICAgIHN0YXRpYyB2b2lkIHZpc2l0T3V0cHV0Q29uc3RyYWludHMoSlNDZWxsKiwg
QWJzdHJhY3RTbG90VmlzaXRvciYpOwogICAgIHZvaWQgZmluYWxpemVVbmNvbmRpdGlvbmFsbHko
Vk0mKTsKIAogcHJpdmF0ZToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9KU0Rv
bGxhclZNLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvSlNE
b2xsYXJWTS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90
b29scy9KU0RvbGxhclZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTIyNCwxNCArMjI0LDcgQEAg
cHVibGljOgogCiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIFJvb3QqKTsKIAotICAgIHN0
YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRv
cikKLSAgICB7Ci0gICAgICAgIERvbGxhclZNQXNzZXJ0U2NvcGUgYXNzZXJ0U2NvcGU7Ci0gICAg
ICAgIEVsZW1lbnQqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8RWxlbWVudCo+KGNlbGwpOwotICAgICAg
ICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7Ci0gICAgICAg
IEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7Ci0gICAgICAgIHZpc2l0
b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fcm9vdCk7Ci0gICAgfQorICAgIERFQ0xBUkVfVklTSVRf
Q0hJTERSRU47CiAKICAgICBzdGF0aWMgRWxlbWVudEhhbmRsZU93bmVyKiBoYW5kbGVPd25lcigp
OwogCkBAIC0yNDcsMTAgKzI0MCwyMiBAQCBwcml2YXRlOgogICAgIFdyaXRlQmFycmllcjxSb290
PiBtX3Jvb3Q7CiB9OwogCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBFbGVtZW50
Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCit7Cisg
ICAgRG9sbGFyVk1Bc3NlcnRTY29wZSBhc3NlcnRTY29wZTsKKyAgICBFbGVtZW50KiB0aGlzT2Jq
ZWN0ID0ganNDYXN0PEVsZW1lbnQqPihjZWxsKTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVS
SVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CisgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2Jq
ZWN0LCB2aXNpdG9yKTsKKyAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX3Jvb3QpOwor
fQorCitERUZJTkVfVklTSVRfQ0hJTERSRU4oRWxlbWVudCk7CisKIGNsYXNzIEVsZW1lbnRIYW5k
bGVPd25lciBmaW5hbCA6IHB1YmxpYyBXZWFrSGFuZGxlT3duZXIgewogICAgIFdURl9NQUtFX0ZB
U1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIGJvb2wgaXNSZWFjaGFibGVGcm9tT3BhcXVlUm9v
dHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBTbG90VmlzaXRvciYg
dmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikgZmluYWwKKyAgICBib29sIGlzUmVhY2hhYmxl
RnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwg
QWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikgZmluYWwK
ICAgICB7CiAgICAgICAgIERvbGxhclZNQXNzZXJ0U2NvcGUgYXNzZXJ0U2NvcGU7CiAgICAgICAg
IGlmIChVTkxJS0VMWShyZWFzb24pKQpAQCAtMzA0LDE4ICszMDksMjMgQEAgcHVibGljOgogICAg
ICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBl
LCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CiAgICAgfQog
Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqIHRoaXNPYmplY3QsIFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQotICAgIHsKLSAgICAgICAgRG9sbGFyVk1Bc3NlcnRTY29wZSBhc3Nl
cnRTY29wZTsKLSAgICAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBp
bmZvKCkpOwotICAgICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3Ip
OwotICAgICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QodGhpc09iamVjdCk7Ci0gICAgfQorICAg
IERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKIHByaXZhdGU6CiAgICAgV2VhazxFbGVtZW50PiBt
X2VsZW1lbnQ7CiB9OwogCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBSb290Ojp2
aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIHRoaXNPYmplY3QsIFZpc2l0b3ImIHZpc2l0b3IpCit7
CisgICAgRG9sbGFyVk1Bc3NlcnRTY29wZSBhc3NlcnRTY29wZTsKKyAgICBBU1NFUlRfR0NfT0JK
RUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CisgICAgQmFzZTo6dmlzaXRDaGlsZHJl
bih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKKyAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QodGhpc09i
amVjdCk7Cit9CisKK0RFRklORV9WSVNJVF9DSElMRFJFTihSb290KTsKKwogY2xhc3MgU2ltcGxl
T2JqZWN0IDogcHVibGljIEpTTm9uRmluYWxPYmplY3QgewogcHVibGljOgogICAgIFNpbXBsZU9i
amVjdChWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQpAQCAtMzQwLDE0ICszNTAsNyBAQCBw
dWJsaWM6CiAgICAgICAgIHJldHVybiBzaW1wbGVPYmplY3Q7CiAgICAgfQogCi0gICAgc3RhdGlj
IHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQot
ICAgIHsKLSAgICAgICAgRG9sbGFyVk1Bc3NlcnRTY29wZSBhc3NlcnRTY29wZTsKLSAgICAgICAg
U2ltcGxlT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PFNpbXBsZU9iamVjdCo+KGNlbGwpOwot
ICAgICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7Ci0g
ICAgICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7Ci0gICAgICAg
IHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1faGlkZGVuVmFsdWUpOwotICAgIH0KKyAgICBE
RUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3Ry
dWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90
b3R5cGUpCiAgICAgewpAQCAtMzgwLDYgKzM4MywxOCBAQCBwcml2YXRlOgogICAgIFdyaXRlQmFy
cmllcjxKU0M6OlVua25vd24+IG1faGlkZGVuVmFsdWU7CiB9OwogCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBWaXNpdG9yPgordm9pZCBTaW1wbGVPYmplY3Q6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCog
Y2VsbCwgVmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBEb2xsYXJWTUFzc2VydFNjb3BlIGFzc2Vy
dFNjb3BlOworICAgIFNpbXBsZU9iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxTaW1wbGVPYmpl
Y3QqPihjZWxsKTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGlu
Zm8oKSk7CisgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKKyAg
ICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2hpZGRlblZhbHVlKTsKK30KKworREVGSU5F
X1ZJU0lUX0NISUxEUkVOKFNpbXBsZU9iamVjdCk7CisKIGNsYXNzIEltcHVyZUdldHRlciA6IHB1
YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKIHB1YmxpYzoKICAgICBJbXB1cmVHZXR0ZXIoVk0mIHZt
LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKQEAgLTQzNiwxNCArNDUxLDcgQEAgcHVibGljOgogICAg
ICAgICByZXR1cm4gQmFzZTo6Z2V0T3duUHJvcGVydHlTbG90KG9iamVjdCwgZ2xvYmFsT2JqZWN0
LCBuYW1lLCBzbG90KTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpT
Q2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCi0gICAgewotICAgICAgICBEb2xsYXJW
TUFzc2VydFNjb3BlIGFzc2VydFNjb3BlOwotICAgICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVS
SVRTKGNlbGwsIGluZm8oKSk7Ci0gICAgICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4oY2VsbCwgdmlz
aXRvcik7Ci0gICAgICAgIEltcHVyZUdldHRlciogdGhpc09iamVjdCA9IGpzQ2FzdDxJbXB1cmVH
ZXR0ZXIqPihjZWxsKTsKLSAgICAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9kZWxl
Z2F0ZSk7Ci0gICAgfQorICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICB2b2lkIHNl
dERlbGVnYXRlKFZNJiB2bSwgSlNPYmplY3QqIGRlbGVnYXRlKQogICAgIHsKQEAgLTQ1NCw2ICs0
NjIsMTggQEAgcHJpdmF0ZToKICAgICBXcml0ZUJhcnJpZXI8SlNPYmplY3Q+IG1fZGVsZWdhdGU7
CiB9OwogCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBJbXB1cmVHZXR0ZXI6OnZp
c2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBE
b2xsYXJWTUFzc2VydFNjb3BlIGFzc2VydFNjb3BlOworICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5I
RVJJVFMoY2VsbCwgaW5mbygpKTsKKyAgICBCYXNlOjp2aXNpdENoaWxkcmVuKGNlbGwsIHZpc2l0
b3IpOworICAgIEltcHVyZUdldHRlciogdGhpc09iamVjdCA9IGpzQ2FzdDxJbXB1cmVHZXR0ZXIq
PihjZWxsKTsKKyAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2RlbGVnYXRlKTsKK30K
KworREVGSU5FX1ZJU0lUX0NISUxEUkVOKEltcHVyZUdldHRlcik7CisKIHN0YXRpYyBKU0NfREVD
TEFSRV9DVVNUT01fR0VUVEVSKGN1c3RvbUdldHRlclZhbHVlR2V0dGVyKTsKIHN0YXRpYyBKU0Nf
REVDTEFSRV9DVVNUT01fR0VUVEVSKGN1c3RvbUdldHRlckFjZXNzb3JHZXR0ZXIpOwogCkBAIC0x
ODIyLDE0ICsxODQyLDcgQEAgcHVibGljOgogICAgICAgICBwdXREaXJlY3ROYXRpdmVGdW5jdGlv
bih2bSwgZ2xvYmFsT2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiYWRkQnl0ZXMi
KSwgMCwgZnVuY3Rpb25XYXNtU3RyZWFtaW5nQ29tcGlsZXJBZGRCeXRlcywgTm9JbnRyaW5zaWMs
IHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pKTsKICAg
ICB9CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZp
c2l0b3ImIHZpc2l0b3IpCi0gICAgewotICAgICAgICBEb2xsYXJWTUFzc2VydFNjb3BlIGFzc2Vy
dFNjb3BlOwotICAgICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PFdhc21TdHJlYW1pbmdD
b21waWxlcio+KGNlbGwpOwotICAgICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNP
YmplY3QsIGluZm8oKSk7Ci0gICAgICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwg
dmlzaXRvcik7Ci0gICAgICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fcHJvbWlzZSk7
Ci0gICAgfQorICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBERUNMQVJFX0lORk87
CiAKQEAgLTE4MzcsNiArMTg1MCwxOCBAQCBwdWJsaWM6CiAgICAgUmVmPFdhc206OlN0cmVhbWlu
Z0NvbXBpbGVyPiBtX3N0cmVhbWluZ0NvbXBpbGVyOwogfTsKIAordGVtcGxhdGU8dHlwZW5hbWUg
VmlzaXRvcj4KK3ZvaWQgV2FzbVN0cmVhbWluZ0NvbXBpbGVyOjp2aXNpdENoaWxkcmVuSW1wbChK
U0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgRG9sbGFyVk1Bc3NlcnRTY29w
ZSBhc3NlcnRTY29wZTsKKyAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PFdhc21TdHJlYW1p
bmdDb21waWxlcio+KGNlbGwpOworICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09i
amVjdCwgaW5mbygpKTsKKyAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0
b3IpOworICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fcHJvbWlzZSk7Cit9CisKK0RF
RklORV9WSVNJVF9DSElMRFJFTihXYXNtU3RyZWFtaW5nQ29tcGlsZXIpOworCiBjb25zdCBDbGFz
c0luZm8gV2FzbVN0cmVhbWluZ0NvbXBpbGVyOjpzX2luZm8gPSB7ICJXYXNtU3RyZWFtaW5nQ29t
cGlsZXIiLCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RB
QkxFKFdhc21TdHJlYW1pbmdDb21waWxlcikgfTsKIAogSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9O
KGZ1bmN0aW9uV2FzbVN0cmVhbWluZ0NvbXBpbGVyQWRkQnl0ZXMsIChKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkpCkBAIC0zNjk5LDEzICszNzI0LDE2
IEBAIHZvaWQgSlNEb2xsYXJWTTo6YWRkQ29uc3RydWN0aWJsZUZ1bmN0aW8KICAgICBwdXREaXJl
Y3Qodm0sIGlkZW50aWZpZXIsIEpTRnVuY3Rpb246OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBh
cmd1bWVudHMsIGlkZW50aWZpZXIuc3RyaW5nKCksIGZ1bmN0aW9uLCBOb0ludHJpbnNpYywgZnVu
Y3Rpb24pLCBqc0RvbGxhclZNUHJvcGVydHlBdHRyaWJ1dGVzKTsKIH0KIAotdm9pZCBKU0RvbGxh
clZNOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0
ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0RvbGxhclZNOjp2aXNpdENoaWxkcmVu
SW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNEb2xsYXJWTSog
dGhpc09iamVjdCA9IGpzQ2FzdDxKU0RvbGxhclZNKj4oY2VsbCk7CiAgICAgQmFzZTo6dmlzaXRD
aGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2Jq
ZWN0LT5tX29iamVjdERvaW5nU2lkZUVmZmVjdFB1dFdpdGhvdXRDb3JyZWN0U2xvdFN0YXR1c1N0
cnVjdHVyZSk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU0RvbGxhclZNKTsKKwogfSAv
LyBuYW1lc3BhY2UgSlNDCiAKIElHTk9SRV9XQVJOSU5HU19FTkQKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS90b29scy9KU0RvbGxhclZNLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3Rvb2xzL0pTRG9sbGFyVk0uaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3Rvb2xzL0pTRG9sbGFyVk0uaAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxOSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTc0
LDcgKzc0LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGFkZEZ1bmN0aW9uKFZNJiwgSlNHbG9iYWxP
YmplY3QqLCBjb25zdCBjaGFyKiBuYW1lLCBOYXRpdmVGdW5jdGlvbiwgdW5zaWduZWQgYXJndW1l
bnRzKTsKICAgICB2b2lkIGFkZENvbnN0cnVjdGlibGVGdW5jdGlvbihWTSYsIEpTR2xvYmFsT2Jq
ZWN0KiwgY29uc3QgY2hhciogbmFtZSwgTmF0aXZlRnVuY3Rpb24sIHVuc2lnbmVkIGFyZ3VtZW50
cyk7CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9y
Jik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIFdyaXRlQmFycmllcjxTdHJ1
Y3R1cmU+IG1fb2JqZWN0RG9pbmdTaWRlRWZmZWN0UHV0V2l0aG91dENvcnJlY3RTbG90U3RhdHVz
U3RydWN0dXJlOwogfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21HbG9i
YWwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21HbG9i
YWwuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtR2xvYmFsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE5LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMDMsNyArMTAzLDggQEAgdm9pZCBHbG9iYWw6
OnNldChKU0dsb2JhbE9iamVjdCogZ2xvYmFsTwogICAgIH0KIH0KIAotdm9pZCBHbG9iYWw6OnZp
c2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlz
aXRvcj4KK3ZvaWQgR2xvYmFsOjp2aXNpdEFnZ3JlZ2F0ZUltcGwoVmlzaXRvciYgdmlzaXRvcikK
IHsKICAgICBzd2l0Y2ggKG1fdHlwZSkgewogICAgIGNhc2UgV2FzbTo6VHlwZTo6RXh0ZXJucmVm
OgpAQCAtMTE3LDYgKzExOCw4IEBAIHZvaWQgR2xvYmFsOjp2aXNpdEFnZ3JlZ2F0ZShTbG90Vmlz
aXRvciYKICAgICB9CiB9CiAKK0RFRklORV9WSVNJVF9BR0dSRUdBVEUoR2xvYmFsKTsKKwogfSB9
IC8vIG5hbWVzcGFjZSBKU0M6Okdsb2JhbAogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZ
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUdsb2JhbC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21HbG9iYWwuaAkocmV2aXNpb24g
MjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUdsb2JhbC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNy0yMDE4
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0y
MDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtNTcsNyArNTcsOCBAQCBwdWJsaWM6CiAgICAgSlNWYWx1ZSBnZXQoSlNH
bG9iYWxPYmplY3QqKSBjb25zdDsKICAgICB1aW50NjRfdCBnZXRQcmltaXRpdmUoKSBjb25zdCB7
IHJldHVybiBtX3ZhbHVlLm1fcHJpbWl0aXZlOyB9CiAgICAgdm9pZCBzZXQoSlNHbG9iYWxPYmpl
Y3QqLCBKU1ZhbHVlKTsKLSAgICB2b2lkIHZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJik7Cisv
LyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIHZpc2l0QWdncmVnYXRlKFZpc2l0
b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0FHR1JFR0FURTsKIAogICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFQ+IFQqIG93bmVyKCkgY29uc3QgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxUKj4obV9v
d25lcik7IH0KICAgICB2b2lkIHNldE93bmVyKEpTT2JqZWN0KiBvd25lcikKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UYWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRhYmxlLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAxOSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTE2Niw3ICsxNjYsOCBAQCBKU1ZhbHVlIFRhYmxlOjpnZXQodWludDMyX3QgaW5kZXgpIGNv
bnN0CiAgICAgcmV0dXJuIG1fanNWYWx1ZXMuZ2V0KClbaW5kZXggJiBtX21hc2tdLmdldCgpOwog
fQogCi12b2lkIFRhYmxlOjp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYgdmlzaXRvcikKK3Rl
bXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFRhYmxlOjp2aXNpdEFnZ3JlZ2F0ZUltcGwo
VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBSRUxFQVNFX0FTU0VSVChtX293bmVyKTsKICAgICBh
dXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fb3duZXItPmNlbGxMb2NrKCkpOwpAQCAtMTc0LDYgKzE3
NSw4IEBAIHZvaWQgVGFibGU6OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJiAKICAgICAgICAg
dmlzaXRvci5hcHBlbmQobV9qc1ZhbHVlcy5nZXQoKVtpXSk7CiB9CiAKK0RFRklORV9WSVNJVF9B
R0dSRUdBVEUoVGFibGUpOworCiBUeXBlIFRhYmxlOjp3YXNtVHlwZSgpIGNvbnN0CiB7CiAgICAg
aWYgKGlzRXh0ZXJucmVmVGFibGUoKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21UYWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21UYWJsZS5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtVGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTctMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTgwLDcgKzgwLDcgQEAgcHVibGljOgog
ICAgIE9wdGlvbmFsPHVpbnQzMl90PiBncm93KHVpbnQzMl90IGRlbHRhLCBKU1ZhbHVlIGRlZmF1
bHRWYWx1ZSk7CiAgICAgdm9pZCBjb3B5KGNvbnN0IFRhYmxlKiBzcmNUYWJsZSwgdWludDMyX3Qg
ZHN0SW5kZXgsIHVpbnQzMl90IHNyY0luZGV4KTsKIAotICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUo
U2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0FHR1JFR0FURTsKIAogcHJvdGVjdGVk
OgogICAgIFRhYmxlKHVpbnQzMl90IGluaXRpYWwsIE9wdGlvbmFsPHVpbnQzMl90PiBtYXhpbXVt
LCBUYWJsZUVsZW1lbnRUeXBlID0gVGFibGVFbGVtZW50VHlwZTo6RXh0ZXJucmVmKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTVG9XYXNtSUNDYWxsZWUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTVG9XYXNtSUNDYWxsZWUu
Y3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9K
U1RvV2FzbUlDQ2FsbGVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE5LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00OSw3ICs0OSw4IEBAIFN0cnVjdHVy
ZSogSlNUb1dhc21JQ0NhbGxlZTo6Y3JlYXRlU3RydWMKICAgICByZXR1cm4gU3RydWN0dXJlOjpj
cmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhKU0NhbGxlZVR5cGUs
IFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKIH0KIAotdm9pZCBKU1RvV2FzbUlDQ2FsbGVlOjp2
aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0
ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1RvV2FzbUlDQ2FsbGVlOjp2aXNpdENoaWxkcmVu
SW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNUb1dhc21JQ0Nh
bGxlZSogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1RvV2FzbUlDQ2FsbGVlKj4oY2VsbCk7CiAgICAg
QVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNTgsNiAr
NTksOCBAQCB2b2lkIEpTVG9XYXNtSUNDYWxsZWU6OnZpc2l0Q2hpbGRyZW4oSlNDCiAgICAgdmlz
aXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9mdW5jdGlvbik7CiB9CiAKK0RFRklORV9WSVNJVF9D
SElMRFJFTihKU1RvV2FzbUlDQ2FsbGVlKTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRp
ZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9KU1RvV2FzbUlDQ2FsbGVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvSlNUb1dhc21JQ0NhbGxlZS5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1RvV2FzbUlDQ2FsbGVlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOS0yMDIxIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtNTYsNyArNTYsNyBAQCBwcml2YXRlOgogICAgIEpTVG9XYXNtSUNDYWxsZWUoVk0mIHZtLCBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKICAgICAg
ICAgOiBCYXNlKHZtLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSkKICAgICB7IH0KLSAgICBzdGF0
aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFS
RV9WSVNJVF9DSElMRFJFTjsKIAogICAgIFdyaXRlQmFycmllcjxXZWJBc3NlbWJseUZ1bmN0aW9u
PiBtX2Z1bmN0aW9uOwogfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pT
V2ViQXNzZW1ibHlDb2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suY3BwCShyZXZpc2lvbiAyNzI4MzAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2Nr
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTctMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTgyLDcgKzgyLDggQEAgdm9pZCBKU1dlYkFzc2VtYmx5
Q29kZUJsb2NrOjpjbGVhckpTQ2FsbAogICAgICAgICAoKml0ZXIpLT51bmxpbmsodm0pOwogfQog
Ci12b2lkIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxs
LCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lk
IEpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwg
VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKiB0aGlzT2Jq
ZWN0ID0ganNDYXN0PEpTV2ViQXNzZW1ibHlDb2RlQmxvY2sqPihjZWxsKTsKICAgICBBU1NFUlRf
R0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC05MCw2ICs5MSw4IEBA
IHZvaWQgSlNXZWJBc3NlbWJseUNvZGVCbG9jazo6dmlzaXRDaGlsZHIKICAgICBCYXNlOjp2aXNp
dENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERS
RU4oSlNXZWJBc3NlbWJseUNvZGVCbG9jayk7CisKIHZvaWQgSlNXZWJBc3NlbWJseUNvZGVCbG9j
azo6ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoVk0mIHZtKQogewogICAgIGZvciAoYXV0byBpdGVy
ID0gbV9jYWxsTGlua0luZm9zLmJlZ2luKCk7ICEhaXRlcjsgKytpdGVyKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9jay5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxv
Y2suaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
SlNXZWJBc3NlbWJseUNvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODYsNyArODYsNyBA
QCBwcml2YXRlOgogICAgIERFQ0xBUkVfRVhQT1JUX0lORk87CiAgICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOwogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3ko
SlNDZWxsKik7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90Vmlz
aXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBSZWY8V2FzbTo6Q29k
ZUJsb2NrPiBtX2NvZGVCbG9jazsKICAgICBWZWN0b3I8TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPFdh
c21FbnRyeVB0clRhZz4+IG1fd2FzbVRvSlNFeGl0U3R1YnM7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5R2xvYmFsLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5R2xvYmFsLmNwcAkocmV2
aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3Nl
bWJseUdsb2JhbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxOS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNzEsNyArNzEsOCBAQCB2b2lkIEpTV2ViQXNz
ZW1ibHlHbG9iYWw6OmRlc3Ryb3koSlNDZWxsCiAgICAgc3RhdGljX2Nhc3Q8SlNXZWJBc3NlbWJs
eUdsb2JhbCo+KGNlbGwpLT5KU1dlYkFzc2VtYmx5R2xvYmFsOjp+SlNXZWJBc3NlbWJseUdsb2Jh
bCgpOwogfQogCi12b2lkIEpTV2ViQXNzZW1ibHlHbG9iYWw6OnZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+
Cit2b2lkIEpTV2ViQXNzZW1ibHlHbG9iYWw6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2Vs
bCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU1dlYkFzc2VtYmx5R2xvYmFsKiB0aGlzT2Jq
ZWN0ID0ganNDYXN0PEpTV2ViQXNzZW1ibHlHbG9iYWwqPihjZWxsKTsKICAgICBBU1NFUlRfR0Nf
T0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC04MCw2ICs4MSw4IEBAIHZv
aWQgSlNXZWJBc3NlbWJseUdsb2JhbDo6dmlzaXRDaGlsZHJlbigKICAgICB0aGlzT2JqZWN0LT5n
bG9iYWwoKS0+dmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7CiB9CiAKK0RFRklORV9WSVNJVF9DSElM
RFJFTihKU1dlYkFzc2VtYmx5R2xvYmFsKTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRp
ZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9KU1dlYkFzc2VtYmx5R2xvYmFsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUdsb2JhbC5oCShyZXZpc2lvbiAyNzI4MzApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5R2xvYmFsLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE5IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOS0yMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtNTksNyArNTksNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIEpTV2ViQXNz
ZW1ibHlHbG9iYWwoVk0mLCBTdHJ1Y3R1cmUqLCBSZWY8V2FzbTo6R2xvYmFsPiYmKTsKICAgICB2
b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihK
U0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAg
ICBSZWY8V2FzbTo6R2xvYmFsPiBtX2dsb2JhbDsKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5jcHAJKHJl
dmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNz
ZW1ibHlJbnN0YW5jZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDE2LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03Myw3ICs3Myw4IEBAIHZvaWQg
SlNXZWJBc3NlbWJseUluc3RhbmNlOjpkZXN0cm95KEpTQ2UKICAgICBzdGF0aWNfY2FzdDxKU1dl
YkFzc2VtYmx5SW5zdGFuY2UqPihjZWxsKS0+SlNXZWJBc3NlbWJseUluc3RhbmNlOjp+SlNXZWJB
c3NlbWJseUluc3RhbmNlKCk7CiB9CiAKLXZvaWQgSlNXZWJBc3NlbWJseUluc3RhbmNlOjp2aXNp
dENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0
eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OnZpc2l0Q2hpbGRy
ZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBhdXRvKiB0aGlz
T2JqZWN0ID0ganNDYXN0PEpTV2ViQXNzZW1ibHlJbnN0YW5jZSo+KGNlbGwpOwogICAgIEFTU0VS
VF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTEwMiw2ICsxMDMs
OCBAQCB2b2lkIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6dmlzaXRDaGlsZHJlCiAgICAgICAgIHZp
c2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQod3JhcHBlci5nZXQoKSk7CiB9CiAKK0RFRklORV9WSVNJ
VF9DSElMRFJFTihKU1dlYkFzc2VtYmx5SW5zdGFuY2UpOworCiB2b2lkIEpTV2ViQXNzZW1ibHlJ
bnN0YW5jZTo6ZmluYWxpemVDcmVhdGlvbihWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIFJlZjxXYXNtOjpDb2RlQmxvY2s+JiYgd2FzbUNvZGVCbG9jaywgSlNPYmplY3QqIGlt
cG9ydE9iamVjdCwgV2FzbTo6Q3JlYXRpb25Nb2RlIGNyZWF0aW9uTW9kZSkKIHsKICAgICBtX2lu
c3RhbmNlLT5maW5hbGl6ZUNyZWF0aW9uKHRoaXMsIHdhc21Db2RlQmxvY2suY29weVJlZigpKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5j
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNz
ZW1ibHlJbnN0YW5jZS5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxOSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEw
NSw3ICsxMDUsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIEpTV2ViQXNzZW1ibHlJbnN0YW5j
ZShWTSYsIFN0cnVjdHVyZSosIFJlZjxXYXNtOjpJbnN0YW5jZT4mJik7CiAgICAgdm9pZCBmaW5p
c2hDcmVhdGlvbihWTSYsIEpTV2ViQXNzZW1ibHlNb2R1bGUqLCBXZWJBc3NlbWJseU1vZHVsZVJl
Y29yZCopOwotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0
b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgUmVmPFdhc206Okluc3Rh
bmNlPiBtX2luc3RhbmNlOwogICAgIFZNKiBtX3ZtOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1lbW9yeS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1lbW9yeS5jcHAJKHJldmlzaW9u
IDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlN
ZW1vcnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTU5LDcgKzE1OSw4IEBAIHZvaWQgSlNXZWJB
c3NlbWJseU1lbW9yeTo6ZGVzdHJveShKU0NlbGwKICAgICBtZW1vcnktPkpTV2ViQXNzZW1ibHlN
ZW1vcnk6On5KU1dlYkFzc2VtYmx5TWVtb3J5KCk7CiB9CiAKLXZvaWQgSlNXZWJBc3NlbWJseU1l
bW9yeTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQor
dGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNXZWJBc3NlbWJseU1lbW9yeTo6dmlz
aXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGF1
dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNXZWJBc3NlbWJseU1lbW9yeSo+KGNlbGwpOwogICAg
IEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTE2OSw2
ICsxNzAsOCBAQCB2b2lkIEpTV2ViQXNzZW1ibHlNZW1vcnk6OnZpc2l0Q2hpbGRyZW4oCiAgICAg
dmlzaXRvci5yZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQodGhpc09iamVjdC0+bWVtb3J5KCkuc2l6
ZSgpKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTV2ViQXNzZW1ibHlNZW1vcnkpOwor
CiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNZW1vcnkuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5
TWVtb3J5LmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL0pTV2ViQXNzZW1ibHlNZW1vcnkuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTYzLDcgKzYzLDcg
QEAgcHVibGljOgogcHJpdmF0ZToKICAgICBKU1dlYkFzc2VtYmx5TWVtb3J5KFZNJiwgU3RydWN0
dXJlKik7CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOwotICAgIHN0YXRpYyB2b2lkIHZp
c2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NI
SUxEUkVOOwogCiAgICAgUmVmPFdhc206Ok1lbW9yeT4gbV9tZW1vcnk7CiAgICAgV3JpdGVCYXJy
aWVyPEpTQXJyYXlCdWZmZXI+IG1fYnVmZmVyV3JhcHBlcjsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuY3BwCShyZXZp
c2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2Vt
Ymx5TW9kdWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEyNCw3ICsxMjQsOCBAQCB2b2lkIEpT
V2ViQXNzZW1ibHlNb2R1bGU6OnNldENvZGVCbG9jayhWCiAgICAgbV9jb2RlQmxvY2tzW3N0YXRp
Y19jYXN0PHNpemVfdD4obW9kZSldLnNldCh2bSwgdGhpcywgY29kZUJsb2NrKTsKIH0KIAotdm9p
ZCBKU1dlYkFzc2VtYmx5TW9kdWxlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZp
c2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1dlYkFz
c2VtYmx5TW9kdWxlOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZp
c2l0b3IpCiB7CiAgICAgSlNXZWJBc3NlbWJseU1vZHVsZSogdGhpc09iamVjdCA9IGpzQ2FzdDxK
U1dlYkFzc2VtYmx5TW9kdWxlKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklU
Uyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtMTM1LDYgKzEzNiw4IEBAIHZvaWQgSlNXZWJBc3Nl
bWJseU1vZHVsZTo6dmlzaXRDaGlsZHJlbigKICAgICAgICAgdmlzaXRvci5hcHBlbmQodGhpc09i
amVjdC0+bV9jb2RlQmxvY2tzW2ldKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTV2Vi
QXNzZW1ibHlNb2R1bGUpOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIEVOQUJM
RShXRUJBU1NFTUJMWSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2Vi
QXNzZW1ibHlNb2R1bGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxOSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTgwLDcgKzgwLDcgQEAgcHJpdmF0ZToKIAogICAgIEpTV2ViQXNzZW1ibHlNb2R1bGUo
Vk0mLCBTdHJ1Y3R1cmUqLCBSZWY8V2FzbTo6TW9kdWxlPiYmKTsKICAgICB2b2lkIGZpbmlzaENy
ZWF0aW9uKFZNJik7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90
VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBSZWY8V2FzbTo6
TW9kdWxlPiBtX21vZHVsZTsKICAgICBXcml0ZUJhcnJpZXI8U3ltYm9sVGFibGU+IG1fZXhwb3J0
U3ltYm9sVGFibGU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFz
c2VtYmx5VGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL0pTV2ViQXNzZW1ibHlUYWJsZS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlUYWJsZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTkgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC03Miw3ICs3Miw4IEBAIHZvaWQgSlNXZWJBc3NlbWJseVRhYmxlOjpkZXN0cm95KEpT
Q2VsbCoKICAgICBzdGF0aWNfY2FzdDxKU1dlYkFzc2VtYmx5VGFibGUqPihjZWxsKS0+SlNXZWJB
c3NlbWJseVRhYmxlOjp+SlNXZWJBc3NlbWJseVRhYmxlKCk7CiB9CiAKLXZvaWQgSlNXZWJBc3Nl
bWJseVRhYmxlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0
b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1dlYkFzc2VtYmx5VGFibGU6
OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAg
ICBKU1dlYkFzc2VtYmx5VGFibGUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNXZWJBc3NlbWJseVRh
YmxlKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBp
bmZvKCkpOwpAQCAtODEsNiArODIsOCBAQCB2b2lkIEpTV2ViQXNzZW1ibHlUYWJsZTo6dmlzaXRD
aGlsZHJlbihKCiAgICAgdGhpc09iamVjdC0+dGFibGUoKS0+dmlzaXRBZ2dyZWdhdGUodmlzaXRv
cik7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU1dlYkFzc2VtYmx5VGFibGUpOworCiBi
b29sIEpTV2ViQXNzZW1ibHlUYWJsZTo6Z3Jvdyh1aW50MzJfdCBkZWx0YSwgSlNWYWx1ZSBkZWZh
dWx0VmFsdWUpCiB7CiAgICAgaWYgKGRlbHRhID09IDApCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5VGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5VGFibGUuaAkocmV2aXNpb24gMjcy
ODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseVRhYmxl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDE2LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC03MCw3ICs3MCw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAg
ICAgSlNXZWJBc3NlbWJseVRhYmxlKFZNJiwgU3RydWN0dXJlKiwgUmVmPFdhc206OlRhYmxlPiYm
KTsKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRD
aGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERS
RU47CiAKICAgICBSZWY8V2FzbTo6VGFibGU+IG1fdGFibGU7CiB9OwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5jcHAJ
KHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFz
c2VtYmx5RnVuY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxNi0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDUyLDcgKzQ1Miw4IEBAIFdl
YkFzc2VtYmx5RnVuY3Rpb246OldlYkFzc2VtYmx5RnVuY3Rpb24KICAgICAsIG1faW1wb3J0YWJs
ZUZ1bmN0aW9uIHsgc2lnbmF0dXJlSW5kZXgsIHdhc21Ub1dhc21FbnRyeXBvaW50TG9hZExvY2F0
aW9uIH0KIHsgfQogCi12b2lkIFdlYkFzc2VtYmx5RnVuY3Rpb246OnZpc2l0Q2hpbGRyZW4oSlND
ZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0
b3I+Cit2b2lkIFdlYkFzc2VtYmx5RnVuY3Rpb246OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCog
Y2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBXZWJBc3NlbWJseUZ1bmN0aW9uKiB0aGlz
T2JqZWN0ID0ganNDYXN0PFdlYkFzc2VtYmx5RnVuY3Rpb24qPihjZWxsKTsKICAgICBBU1NFUlRf
R0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC00NjEsNiArNDYyLDgg
QEAgdm9pZCBXZWJBc3NlbWJseUZ1bmN0aW9uOjp2aXNpdENoaWxkcmVuKAogICAgIHZpc2l0b3Iu
YXBwZW5kKHRoaXNPYmplY3QtPm1fanNUb1dhc21JQ0NhbGxlZSk7CiB9CiAKK0RFRklORV9WSVNJ
VF9DSElMRFJFTihXZWJBc3NlbWJseUZ1bmN0aW9uKTsKKwogdm9pZCBXZWJBc3NlbWJseUZ1bmN0
aW9uOjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKIHsKICAgICBzdGF0aWNfY2FzdDxXZWJBc3NlbWJs
eUZ1bmN0aW9uKj4oY2VsbCktPldlYkFzc2VtYmx5RnVuY3Rpb246On5XZWJBc3NlbWJseUZ1bmN0
aW9uKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1
bmN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2Vi
QXNzZW1ibHlGdW5jdGlvbi5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTkgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC04
Niw3ICs4Niw3IEBAIHB1YmxpYzoKICAgICBXYXNtOjpJbnN0YW5jZSogcHJldmlvdXNJbnN0YW5j
ZShDYWxsRnJhbWUqKTsKIAogcHJpdmF0ZToKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVu
KEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKICAg
ICBXZWJBc3NlbWJseUZ1bmN0aW9uKFZNJiwgTmF0aXZlRXhlY3V0YWJsZSosIEpTR2xvYmFsT2Jq
ZWN0KiwgU3RydWN0dXJlKiwgV2FzbTo6Q2FsbGVlJiBqc0VudHJ5cG9pbnQsIFdhc21Ub1dhc21J
bXBvcnRhYmxlRnVuY3Rpb246OkxvYWRMb2NhdGlvbiBlbnRyeXBvaW50TG9hZExvY2F0aW9uLCBX
YXNtOjpTaWduYXR1cmVJbmRleCk7CiAKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRy
eVB0clRhZz4ganNDYWxsRW50cnlwb2ludFNsb3coKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb25CYXNlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uQmFzZS5jcHAJ
KHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFz
c2VtYmx5RnVuY3Rpb25CYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00MSw3ICs0MSw4IEBAIFdlYkFz
c2VtYmx5RnVuY3Rpb25CYXNlOjpXZWJBc3NlbWJseUZ1bmMKICAgICA6IEJhc2Uodm0sIGV4ZWN1
dGFibGUsIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKQogeyB9CiAKLXZvaWQgV2ViQXNzZW1ibHlG
dW5jdGlvbkJhc2U6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlz
aXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFdlYkFzc2VtYmx5RnVuY3Rp
b25CYXNlOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3Ip
CiB7CiAgICAgV2ViQXNzZW1ibHlGdW5jdGlvbkJhc2UqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8V2Vi
QXNzZW1ibHlGdW5jdGlvbkJhc2UqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVS
SVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC00OSw2ICs1MCw4IEBAIHZvaWQgV2ViQXNzZW1i
bHlGdW5jdGlvbkJhc2U6OnZpc2l0Q2hpbGQKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0
LT5tX2luc3RhbmNlKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKFdlYkFzc2VtYmx5RnVu
Y3Rpb25CYXNlKTsKKwogdm9pZCBXZWJBc3NlbWJseUZ1bmN0aW9uQmFzZTo6ZmluaXNoQ3JlYXRp
b24oVk0mIHZtLCBOYXRpdmVFeGVjdXRhYmxlKiBleGVjdXRhYmxlLCB1bnNpZ25lZCBsZW5ndGgs
IGNvbnN0IFN0cmluZyYgbmFtZSwgSlNXZWJBc3NlbWJseUluc3RhbmNlKiBpbnN0YW5jZSkKIHsK
ICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSwgZXhlY3V0YWJsZSwgbGVuZ3RoLCBuYW1lKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb25C
YXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNz
ZW1ibHlGdW5jdGlvbkJhc2UuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbkJhc2UuaAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAxOCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTQ2LDcgKzQ2LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZJ
bnN0YW5jZSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihXZWJBc3NlbWJseUZ1bmN0aW9uQmFz
ZSwgbV9pbnN0YW5jZSk7IH0KIAogcHJvdGVjdGVkOgotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hp
bGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVO
OwogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBOYXRpdmVFeGVjdXRhYmxlKiwgdW5zaWdu
ZWQgbGVuZ3RoLCBjb25zdCBTdHJpbmcmIG5hbWUsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSopOwog
ICAgIFdlYkFzc2VtYmx5RnVuY3Rpb25CYXNlKFZNJiwgTmF0aXZlRXhlY3V0YWJsZSosIEpTR2xv
YmFsT2JqZWN0KiwgU3RydWN0dXJlKik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZVJlY29yZC5jcHAJKHJldmlz
aW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5
TW9kdWxlUmVjb3JkLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTYtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTc4LDcgKzc4LDggQEAgdm9pZCBX
ZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6ZmluaXNoQ3JlYQogICAgIH0KIH0KIAotdm9pZCBXZWJB
c3NlbWJseU1vZHVsZVJlY29yZDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNp
dG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgV2ViQXNzZW1i
bHlNb2R1bGVSZWNvcmQ6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYg
dmlzaXRvcikKIHsKICAgICBXZWJBc3NlbWJseU1vZHVsZVJlY29yZCogdGhpc09iamVjdCA9IGpz
Q2FzdDxXZWJBc3NlbWJseU1vZHVsZVJlY29yZCo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpF
Q1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTg4LDYgKzg5LDggQEAgdm9pZCBX
ZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6dmlzaXRDaGlsZAogICAgIHZpc2l0b3IuYXBwZW5kKHRo
aXNPYmplY3QtPm1fZXhwb3J0c09iamVjdCk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihX
ZWJBc3NlbWJseU1vZHVsZVJlY29yZCk7CisKIHZvaWQgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6
OnByZXBhcmVMaW5rKFZNJiB2bSwgSlNXZWJBc3NlbWJseUluc3RhbmNlKiBpbnN0YW5jZSkKIHsK
ICAgICBSRUxFQVNFX0FTU0VSVCghbV9pbnN0YW5jZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZVJlY29yZC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmgJKHJl
dmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2Vt
Ymx5TW9kdWxlUmVjb3JkLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDE2LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02OSw3ICs2OSw3IEBAIHByaXZh
dGU6CiAKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTR2xvYmFsT2JqZWN0KiwgVk0mLCBjb25z
dCBXYXNtOjpNb2R1bGVJbmZvcm1hdGlvbiYpOwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGls
ZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47
CiAKICAgICBXcml0ZUJhcnJpZXI8SlNXZWJBc3NlbWJseUluc3RhbmNlPiBtX2luc3RhbmNlOwog
ICAgIFdyaXRlQmFycmllcjxKU09iamVjdD4gbV9zdGFydEZ1bmN0aW9uOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5V3Jh
cHBlckZ1bmN0aW9uLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNy0yMDE4IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIxIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtNjcsNyArNjcsOCBAQCBTdHJ1Y3R1cmUqIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9u
OjpjCiAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3Rv
dHlwZSwgVHlwZUluZm8oSlNGdW5jdGlvblR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsK
IH0KIAotdm9pZCBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbjo6dmlzaXRDaGlsZHJlbihKU0Nl
bGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRv
cj4KK3ZvaWQgV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb246OnZpc2l0Q2hpbGRyZW5JbXBsKEpT
Q2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBXZWJBc3NlbWJseVdyYXBwZXJG
dW5jdGlvbiogdGhpc09iamVjdCA9IGpzQ2FzdDxXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbio+
KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygp
KTsKQEAgLTc2LDYgKzc3LDggQEAgdm9pZCBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbjo6dmlz
aXRDaAogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fZnVuY3Rpb24pOwogfQogCitE
RUZJTkVfVklTSVRfQ0hJTERSRU4oV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24pOworCiBKU0Nf
REVGSU5FX0hPU1RfRlVOQ1RJT04oY2FsbFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLCAoSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpKQogewogICAg
IFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL1dlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uaAko
cmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNz
ZW1ibHlXcmFwcGVyRnVuY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU5LDcgKzU5LDcgQEAg
cHVibGljOgogcHJpdmF0ZToKICAgICBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbihWTSYsIE5h
dGl2ZUV4ZWN1dGFibGUqLCBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSosIFdhc21Ub1dhc21J
bXBvcnRhYmxlRnVuY3Rpb24pOwogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBOYXRpdmVF
eGVjdXRhYmxlKiwgdW5zaWduZWQgbGVuZ3RoLCBjb25zdCBTdHJpbmcmIG5hbWUsIEpTT2JqZWN0
KiwgSlNXZWJBc3NlbWJseUluc3RhbmNlKik7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJl
bihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAK
ICAgICBXcml0ZUJhcnJpZXI8SlNPYmplY3Q+IG1fZnVuY3Rpb247CiAgICAgLy8gSXQncyBzYWZl
IHRvIGp1c3QgaG9sZCB0aGUgcmF3IFdhc21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rpb24gYmVjYXVz
ZSB3ZSBoYXZlIGEgcmVmZXJlbmNlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJPYmplY3RTdG9yZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtNzI4LDcgKzcyOCw4IEBAIHZvaWQgSURCT2JqZWN0U3RvcmU6OnJvbGxiYWNrRm9y
VmVyc2lvbkMKICAgICB9CiB9CiAKLXZvaWQgSURCT2JqZWN0U3RvcmU6OnZpc2l0UmVmZXJlbmNl
ZEluZGV4ZXMoU2xvdFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0Cit0ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPgordm9pZCBJREJPYmplY3RTdG9yZTo6dmlzaXRSZWZlcmVuY2VkSW5kZXhlcyhWaXNp
dG9yJiB2aXNpdG9yKSBjb25zdAogewogICAgIExvY2tlcjxMb2NrPiBsb2NrZXIobV9yZWZlcmVu
Y2VkSW5kZXhMb2NrKTsKICAgICBmb3IgKGF1dG8mIGluZGV4IDogbV9yZWZlcmVuY2VkSW5kZXhl
cy52YWx1ZXMoKSkKQEAgLTczNyw2ICs3MzgsOSBAQCB2b2lkIElEQk9iamVjdFN0b3JlOjp2aXNp
dFJlZmVyZW5jZWRJbmRlCiAgICAgICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChpbmRleC5nZXQo
KSk7CiB9CiAKK3RlbXBsYXRlIHZvaWQgSURCT2JqZWN0U3RvcmU6OnZpc2l0UmVmZXJlbmNlZElu
ZGV4ZXMoQWJzdHJhY3RTbG90VmlzaXRvciYpIGNvbnN0OwordGVtcGxhdGUgdm9pZCBJREJPYmpl
Y3RTdG9yZTo6dmlzaXRSZWZlcmVuY2VkSW5kZXhlcyhTbG90VmlzaXRvciYpIGNvbnN0OworCiB2
b2lkIElEQk9iamVjdFN0b3JlOjpyZW5hbWVSZWZlcmVuY2VkSW5kZXgoSURCSW5kZXgmIGluZGV4
LCBjb25zdCBTdHJpbmcmIG5ld05hbWUpCiB7CiAgICAgTE9HKEluZGV4ZWREQiwgIklEQk9iamVj
dFN0b3JlOjpyZW5hbWVSZWZlcmVuY2VkSW5kZXgiKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuaAkocmV2aXNpb24gMjcyODMw
KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIw
MjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0xMDksNyArMTA5LDcgQEAgcHVibGljOgogICAgIHZvaWQgcmVmKCk7CiAg
ICAgdm9pZCBkZXJlZigpOwogCi0gICAgdm9pZCB2aXNpdFJlZmVyZW5jZWRJbmRleGVzKEpTQzo6
U2xvdFZpc2l0b3ImKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lk
IHZpc2l0UmVmZXJlbmNlZEluZGV4ZXMoVmlzaXRvciYpIGNvbnN0OwogICAgIHZvaWQgcmVuYW1l
UmVmZXJlbmNlZEluZGV4KElEQkluZGV4JiwgY29uc3QgU3RyaW5nJiBuZXdOYW1lKTsKIAogcHJp
dmF0ZToKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0
aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJUcmFuc2FjdGlvbi5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE0
NTUsNyArMTQ1NSw4IEBAIHZvaWQgSURCVHJhbnNhY3Rpb246OmNvbm5lY3Rpb25DbG9zZWRGcm8K
ICAgICBmaXJlT25BYm9ydCgpOwogfQogCi12b2lkIElEQlRyYW5zYWN0aW9uOjp2aXNpdFJlZmVy
ZW5jZWRPYmplY3RTdG9yZXMoSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikgY29uc3QKK3RlbXBs
YXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIElEQlRyYW5zYWN0aW9uOjp2aXNpdFJlZmVyZW5j
ZWRPYmplY3RTdG9yZXMoVmlzaXRvciYgdmlzaXRvcikgY29uc3QKIHsKICAgICBMb2NrZXI8TG9j
az4gbG9ja2VyKG1fcmVmZXJlbmNlZE9iamVjdFN0b3JlTG9jayk7CiAgICAgZm9yIChhdXRvJiBv
YmplY3RTdG9yZSA6IG1fcmVmZXJlbmNlZE9iamVjdFN0b3Jlcy52YWx1ZXMoKSkKQEAgLTE0NjQs
NiArMTQ2NSw5IEBAIHZvaWQgSURCVHJhbnNhY3Rpb246OnZpc2l0UmVmZXJlbmNlZE9iamUKICAg
ICAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KG9iamVjdFN0b3JlLmdldCgpKTsKIH0KIAordGVt
cGxhdGUgdm9pZCBJREJUcmFuc2FjdGlvbjo6dmlzaXRSZWZlcmVuY2VkT2JqZWN0U3RvcmVzKEpT
Qzo6QWJzdHJhY3RTbG90VmlzaXRvciYpIGNvbnN0OwordGVtcGxhdGUgdm9pZCBJREJUcmFuc2Fj
dGlvbjo6dmlzaXRSZWZlcmVuY2VkT2JqZWN0U3RvcmVzKEpTQzo6U2xvdFZpc2l0b3ImKSBjb25z
dDsKKwogdm9pZCBJREJUcmFuc2FjdGlvbjo6aGFuZGxlUGVuZGluZ09wZXJhdGlvbnMoKQogewog
ICAgIEFTU0VSVChjYW5DdXJyZW50VGhyZWFkQWNjZXNzVGhyZWFkTG9jYWxEYXRhKG1fZGF0YWJh
c2UtPm9yaWdpblRocmVhZCgpKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJUcmFuc2FjdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIxIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtMTQ5LDcgKzE0OSw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgY29ubmVjdGlvbkNsb3NlZEZy
b21TZXJ2ZXIoY29uc3QgSURCRXJyb3ImKTsKIAotICAgIHZvaWQgdmlzaXRSZWZlcmVuY2VkT2Jq
ZWN0U3RvcmVzKEpTQzo6U2xvdFZpc2l0b3ImKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBWaXNpdG9yPiB2b2lkIHZpc2l0UmVmZXJlbmNlZE9iamVjdFN0b3JlcyhWaXNpdG9yJikgY29u
c3Q7CiAKICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgc3RkOjphdG9taWM8dW5zaWduZWQ+IG51
bWJlck9mSURCVHJhbnNhY3Rpb25zOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmF1ZGlvL0F1ZGlvQnVmZmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmF1ZGlvL0F1ZGlvQnVmZmVyLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0J1ZmZlci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsNiArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0x
NTQsMTIgKzE1NCwxNiBAQCBFeGNlcHRpb25PcjxKU0M6OkpTVmFsdWU+IEF1ZGlvQnVmZmVyOjpn
CiAgICAgcmV0dXJuIGNvbnN0cnVjdEpTQXJyYXkoKTsKIH0KIAotdm9pZCBBdWRpb0J1ZmZlcjo6
dmlzaXRDaGFubmVsV3JhcHBlcnMoSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRl
PHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEF1ZGlvQnVmZmVyOjp2aXNpdENoYW5uZWxXcmFwcGVy
cyhWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGZvciAoYXV0byYgY2hhbm5lbFdyYXBwZXIgOiBt
X2NoYW5uZWxXcmFwcGVycykKICAgICAgICAgY2hhbm5lbFdyYXBwZXIudmlzaXQodmlzaXRvcik7
CiB9CiAKK3RlbXBsYXRlIHZvaWQgQXVkaW9CdWZmZXI6OnZpc2l0Q2hhbm5lbFdyYXBwZXJzKEpT
Qzo6QWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBBdWRpb0J1ZmZlcjo6dmlz
aXRDaGFubmVsV3JhcHBlcnMoSlNDOjpTbG90VmlzaXRvciYpOworCiBSZWZQdHI8RmxvYXQzMkFy
cmF5PiBBdWRpb0J1ZmZlcjo6Y2hhbm5lbERhdGEodW5zaWduZWQgY2hhbm5lbEluZGV4KQogewog
ICAgIGlmIChjaGFubmVsSW5kZXggPj0gbV9jaGFubmVscy5zaXplKCkpCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQnVmZmVyLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0J1ZmZlci5oCShyZXZpc2lvbiAyNzI4
MzApCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQnVmZmVyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDEwIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC03NSw3ICs3NSw3IEBAIHB1YmxpYzoKIAogICAgIHNpemVfdCBtZW1vcnlDb3N0
KCkgY29uc3Q7CiAKLSAgICB2b2lkIHZpc2l0Q2hhbm5lbFdyYXBwZXJzKEpTQzo6U2xvdFZpc2l0
b3ImKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIHZpc2l0Q2hhbm5lbFdy
YXBwZXJzKFZpc2l0b3ImKTsKICAgICAKIHByaXZhdGU6CiAgICAgQXVkaW9CdWZmZXIodW5zaWdu
ZWQgbnVtYmVyT2ZDaGFubmVscywgc2l6ZV90IGxlbmd0aCwgZmxvYXQgc2FtcGxlUmF0ZSwgTGVn
YWN5UHJldmVudERldGFjaGluZyA9IExlZ2FjeVByZXZlbnREZXRhY2hpbmc6Ok5vKTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0RPTUdDT3V0cHV0Q29uc3RyYWludC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvRE9NR0NPdXRwdXRDb25zdHJh
aW50LmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
RE9NR0NPdXRwdXRDb25zdHJhaW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDksNyArNDksNyBA
QCBET01HQ091dHB1dENvbnN0cmFpbnQ6On5ET01HQ091dHB1dENvbnN0CiB7CiB9CiAKLXZvaWQg
RE9NR0NPdXRwdXRDb25zdHJhaW50OjpleGVjdXRlSW1wbChTbG90VmlzaXRvciYgdmlzaXRvcikK
K3ZvaWQgRE9NR0NPdXRwdXRDb25zdHJhaW50OjpleGVjdXRlSW1wbChBYnN0cmFjdFNsb3RWaXNp
dG9yJiB2aXNpdG9yKQogewogICAgIEhlYXAmIGhlYXAgPSBtX3ZtLmhlYXA7CiAgICAgCkBAIC02
MCw3ICs2MCw3IEBAIHZvaWQgRE9NR0NPdXRwdXRDb25zdHJhaW50OjpleGVjdXRlSW1wbCgKICAg
ICAKICAgICBtX2NsaWVudERhdGEuZm9yRWFjaE91dHB1dENvbnN0cmFpbnRTcGFjZSgKICAgICAg
ICAgWyZdIChTdWJzcGFjZSYgc3Vic3BhY2UpIHsKLSAgICAgICAgICAgIGF1dG8gZnVuYyA9IFtd
IChTbG90VmlzaXRvciYgdmlzaXRvciwgSGVhcENlbGwqIGhlYXBDZWxsLCBIZWFwQ2VsbDo6S2lu
ZCkgeworICAgICAgICAgICAgYXV0byBmdW5jID0gW10gKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZp
c2l0b3IsIEhlYXBDZWxsKiBoZWFwQ2VsbCwgSGVhcENlbGw6OktpbmQpIHsKICAgICAgICAgICAg
ICAgICBTZXRSb290TWFya1JlYXNvblNjb3BlIHJvb3RTY29wZSh2aXNpdG9yLCBSb290TWFya1Jl
YXNvbjo6RE9NR0NPdXRwdXQpOwogICAgICAgICAgICAgICAgIEpTQ2VsbCogY2VsbCA9IHN0YXRp
Y19jYXN0PEpTQ2VsbCo+KGhlYXBDZWxsKTsKICAgICAgICAgICAgICAgICBjZWxsLT5tZXRob2RU
YWJsZSh2aXNpdG9yLnZtKCkpLT52aXNpdE91dHB1dENvbnN0cmFpbnRzKGNlbGwsIHZpc2l0b3Ip
OwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvRE9NR0NPdXRwdXRDb25zdHJhaW50
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvRE9NR0NPdXRwdXRD
b25zdHJhaW50LmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0RPTUdDT3V0cHV0Q29uc3RyYWludC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNy0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDIsNyArNDIs
NyBAQCBwdWJsaWM6CiAgICAgfkRPTUdDT3V0cHV0Q29uc3RyYWludCgpOwogICAgIAogcHJvdGVj
dGVkOgotICAgIHZvaWQgZXhlY3V0ZUltcGwoSlNDOjpTbG90VmlzaXRvciYpIG92ZXJyaWRlOwor
ICAgIHZvaWQgZXhlY3V0ZUltcGwoSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJikgb3ZlcnJpZGU7
CiAKIHByaXZhdGU6CiAgICAgSlNDOjpWTSYgbV92bTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTQWJvcnRDb250cm9sbGVyQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Fib3J0Q29udHJvbGxlckN1c3RvbS5jcHAJKHJldmlz
aW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQWJvcnRDb250cm9s
bGVyQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0qIENvcHly
aWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqIENvcHlyaWdo
dCAoQykgMjAxOS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICoKICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjgsOSArMjgsMTMgQEAKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi12b2lkIEpTQWJvcnRDb250cm9sbGVyOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihK
U0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3Zv
aWQgSlNBYm9ydENvbnRyb2xsZXI6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZp
c2l0b3IpCiB7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KCZ3cmFwcGVkKCkuc2lnbmFsKCkp
OwogfQogCit0ZW1wbGF0ZSB2b2lkIEpTQWJvcnRDb250cm9sbGVyOjp2aXNpdEFkZGl0aW9uYWxD
aGlsZHJlbihKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNBYm9y
dENvbnRyb2xsZXI6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImKTsK
KwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNBYm9ydFNpZ25hbEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNBYm9ydFNpZ25hbEN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQWJvcnRTaWduYWxDdXN0b20uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyogQ29weXJpZ2h0IChDKSAyMDE5LTIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogKgogKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC0yOCw3ICsyOCw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotYm9vbCBKU0Fib3J0
U2lnbmFsT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6
VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3Qg
Y2hhcioqIHJlYXNvbikKK2Jvb2wgSlNBYm9ydFNpZ25hbE93bmVyOjppc1JlYWNoYWJsZUZyb21P
cGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIEpTQzo6
QWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikKIHsKICAg
ICBhdXRvJiBhYm9ydFNpZ25hbCA9IEpTQzo6anNDYXN0PEpTQWJvcnRTaWduYWwqPihoYW5kbGUu
c2xvdCgpLT5hc0NlbGwoKSktPndyYXBwZWQoKTsKICAgICBpZiAoYWJvcnRTaWduYWwuaXNGaXJp
bmdFdmVudExpc3RlbmVycygpKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0F0dHJDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTQXR0ckN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTQXR0ckN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzMs
MTAgKzMzLDE0IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBKU0F0dHI6OnZpc2l0
QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0
eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0F0dHI6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZp
c2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgaWYgKEVsZW1lbnQqIGVsZW1lbnQgPSB3cmFwcGVkKCku
b3duZXJFbGVtZW50KCkpCiAgICAgICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChyb290KGVsZW1l
bnQpKTsKIH0KIAordGVtcGxhdGUgdm9pZCBKU0F0dHI6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVu
KEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU0F0dHI6OnZpc2l0
QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImKTsKKwogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNBdWRpb0J1ZmZlckN1
c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNBdWRp
b0J1ZmZlckN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTQXVkaW9CdWZmZXJDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMxLDExICsz
MSwxNSBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAotdm9p
ZCBKU0F1ZGlvQnVmZmVyOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlz
aXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTQXVkaW9CdWZmZXI6OnZp
c2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgd3JhcHBlZCgp
LnZpc2l0Q2hhbm5lbFdyYXBwZXJzKHZpc2l0b3IpOwogfQogCit0ZW1wbGF0ZSB2b2lkIEpTQXVk
aW9CdWZmZXI6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsK
K3RlbXBsYXRlIHZvaWQgSlNBdWRpb0J1ZmZlcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xv
dFZpc2l0b3ImKTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxF
KFdFQl9BVURJTykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXVkaW9UcmFj
a0N1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNB
dWRpb1RyYWNrQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNBdWRpb1RyYWNrQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNSwxMSAr
MzUsMTUgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKLXZv
aWQgSlNBdWRpb1RyYWNrOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlz
aXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTQXVkaW9UcmFjazo6dmlz
aXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB2aXNpdG9yLmFk
ZE9wYXF1ZVJvb3Qocm9vdCgmd3JhcHBlZCgpKSk7CiB9CiAKK3RlbXBsYXRlIHZvaWQgSlNBdWRp
b1RyYWNrOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0
ZW1wbGF0ZSB2b2lkIEpTQXVkaW9UcmFjazo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZp
c2l0b3ImKTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXVkaW9UcmFja0xpc3RDdXN0b20uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXVkaW9UcmFja0xpc3RDdXN0b20u
Y3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0F1
ZGlvVHJhY2tMaXN0Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDExLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNiwxMSArMzYsMTUgQEAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKLXZvaWQgSlNBdWRpb1Ry
YWNrTGlzdDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0
ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0F1ZGlvVHJhY2tMaXN0Ojp2aXNpdEFk
ZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHZpc2l0b3IuYWRkT3Bh
cXVlUm9vdChyb290KHdyYXBwZWQoKS5lbGVtZW50KCkpKTsKIH0KIAordGVtcGxhdGUgdm9pZCBK
U0F1ZGlvVHJhY2tMaXN0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihBYnN0cmFjdFNsb3RWaXNp
dG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTQXVkaW9UcmFja0xpc3Q6OnZpc2l0QWRkaXRpb25hbENo
aWxkcmVuKFNsb3RWaXNpdG9yJik7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlm
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0F1ZGlvV29ya2xldFByb2Nlc3Nv
ckN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNB
dWRpb1dvcmtsZXRQcm9jZXNzb3JDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0F1ZGlvV29ya2xldFByb2Nlc3NvckN1c3RvbS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDIw
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMC0y
MDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMzEsNyArMzEsOCBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogdXNpbmcg
bmFtZXNwYWNlIEpTQzsKIAotdm9pZCBKU0F1ZGlvV29ya2xldFByb2Nlc3Nvcjo6dmlzaXRBZGRp
dGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPgordm9pZCBKU0F1ZGlvV29ya2xldFByb2Nlc3Nvcjo6dmlzaXRBZGRpdGlvbmFsQ2hp
bGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBhdXRvJiBwcm9jZXNzb3IgPSB3cmFwcGVk
KCk7CiAgICAgcHJvY2Vzc29yLmpzSW5wdXRzV3JhcHBlcigpLnZpc2l0KHZpc2l0b3IpOwpAQCAt
MzksNiArNDAsOSBAQCB2b2lkIEpTQXVkaW9Xb3JrbGV0UHJvY2Vzc29yOjp2aXNpdEFkZGl0CiAg
ICAgcHJvY2Vzc29yLmpzUGFyYW1WYWx1ZXNXcmFwcGVyKCkudmlzaXQodmlzaXRvcik7CiB9CiAK
K3RlbXBsYXRlIHZvaWQgSlNBdWRpb1dvcmtsZXRQcm9jZXNzb3I6OnZpc2l0QWRkaXRpb25hbENo
aWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNBdWRpb1dvcmts
ZXRQcm9jZXNzb3I6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CisKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShXRUJfQVVESU8pCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NTU1J1bGVDdXN0b20uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ1NTUnVsZUN1c3RvbS5jcHAJKHJl
dmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ1NTUnVsZUN1
c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAwNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTEsMTEgKzUxLDE1IEBACiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCi12b2lkIEpTQ1NTUnVsZTo6dmlzaXRB
ZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBWaXNpdG9yPgordm9pZCBKU0NTU1J1bGU6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0
b3ImIHZpc2l0b3IpCiB7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHJvb3QoJndyYXBwZWQo
KSkpOwogfQogCit0ZW1wbGF0ZSB2b2lkIEpTQ1NTUnVsZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRy
ZW4oQWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU0NTU1J1bGU6OnZpc2l0
QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CisKIEpTVmFsdWUgdG9KU05ld2x5Q3Jl
YXRlZChKU0dsb2JhbE9iamVjdCosIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJl
ZjxDU1NSdWxlPiYmIHJ1bGUpCiB7CiAgICAgc3dpdGNoIChydWxlLT50eXBlKCkpIHsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ1NTUnVsZUxpc3RDdXN0b20uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ1NTUnVsZUxpc3RDdXN0b20u
Y3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NT
U1J1bGVMaXN0Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodCByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0IHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNiw3ICszNiw3IEBACiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCi1ib29sIEpTQ1NTUnVsZUxp
c3RPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtu
b3duPiBoYW5kbGUsIHZvaWQqLCBTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJl
YXNvbikKK2Jvb2wgSlNDU1NSdWxlTGlzdE93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290
cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIEFic3RyYWN0U2xvdFZp
c2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCiB7CiAgICAgSlNDU1NSdWxlTGlz
dCoganNDU1NSdWxlTGlzdCA9IGpzQ2FzdDxKU0NTU1J1bGVMaXN0Kj4oaGFuZGxlLnNsb3QoKS0+
YXNDZWxsKCkpOwogICAgIGlmICghanNDU1NSdWxlTGlzdC0+aGFzQ3VzdG9tUHJvcGVydGllcyhq
c0NTU1J1bGVMaXN0LT52bSgpKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
Q1NTU3R5bGVEZWNsYXJhdGlvbkN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNDU1NTdHlsZURlY2xhcmF0aW9uQ3VzdG9tLmNwcAkocmV2aXNpb24g
MjcyODMwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDU1NTdHlsZURlY2xhcmF0
aW9uQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDctMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTUxLDkgKzUxLDEzIEBAIHZvaWQqIHJv
b3QoQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUpCiAgICAgcmV0dXJuIHN0eWxlOwogfQogCi12
b2lkIEpTQ1NTU3R5bGVEZWNsYXJhdGlvbjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZp
c2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0NTU1N0
eWxlRGVjbGFyYXRpb246OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3Ip
CiB7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHJvb3QoJndyYXBwZWQoKSkpOwogfQogCit0
ZW1wbGF0ZSB2b2lkIEpTQ1NTU3R5bGVEZWNsYXJhdGlvbjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRy
ZW4oQWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU0NTU1N0eWxlRGVjbGFy
YXRpb246OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CisKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2FsbGJh
Y2tEYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Nh
bGxiYWNrRGF0YS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTQ2FsbGJhY2tEYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOSwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTk1LDEy
ICs5NSwxNiBAQCBKU1ZhbHVlIEpTQ2FsbGJhY2tEYXRhOjppbnZva2VDYWxsYmFjayhKCiAgICAg
cmV0dXJuIHJlc3VsdDsKIH0KIAotdm9pZCBKU0NhbGxiYWNrRGF0YVdlYWs6OnZpc2l0SlNGdW5j
dGlvbihKU0M6OlNsb3RWaXNpdG9yJiB2aXN0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
Pgordm9pZCBKU0NhbGxiYWNrRGF0YVdlYWs6OnZpc2l0SlNGdW5jdGlvbihWaXNpdG9yJiB2aXNp
dG9yKQogewotICAgIHZpc3Rvci5hcHBlbmQobV9jYWxsYmFjayk7CisgICAgdmlzaXRvci5hcHBl
bmQobV9jYWxsYmFjayk7CiB9CiAKLWJvb2wgSlNDYWxsYmFja0RhdGFXZWFrOjpXZWFrT3duZXI6
OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZv
aWQqIGNvbnRleHQsIFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQor
dGVtcGxhdGUgdm9pZCBKU0NhbGxiYWNrRGF0YVdlYWs6OnZpc2l0SlNGdW5jdGlvbihKU0M6OkFi
c3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNDYWxsYmFja0RhdGFXZWFrOjp2
aXNpdEpTRnVuY3Rpb24oSlNDOjpTbG90VmlzaXRvciYpOworCitib29sIEpTQ2FsbGJhY2tEYXRh
V2Vhazo6V2Vha093bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxK
U0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0LCBBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9y
LCBjb25zdCBjaGFyKiogcmVhc29uKQogewogICAgIGlmIChVTkxJS0VMWShyZWFzb24pKQogICAg
ICAgICAqcmVhc29uID0gIkNvbnRleHQgaXMgb3BhcXVlIHJvb3QiOyAvLyBGSVhNRTogd2hhdCBp
cyB0aGUgY29udGV4dC4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2FsbGJh
Y2tEYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDYWxs
YmFja0RhdGEuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNDYWxsYmFja0RhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOSwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTExMywxMSArMTEz
LDExIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIEpTQ2FsbGJhY2tEYXRhOjppbnZva2VDYWxs
YmFjaygqZ2xvYmFsT2JqZWN0LCBjYWxsYmFjaygpLCB0aGlzVmFsdWUsIGFyZ3MsIGNhbGxiYWNr
VHlwZSwgZnVuY3Rpb25OYW1lLCByZXR1cm5lZEV4Y2VwdGlvbik7CiAgICAgfQogCi0gICAgdm9p
ZCB2aXNpdEpTRnVuY3Rpb24oSlNDOjpTbG90VmlzaXRvciYpOworICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFZpc2l0b3I+IHZvaWQgdmlzaXRKU0Z1bmN0aW9uKFZpc2l0b3ImKTsKIAogcHJpdmF0ZToK
ICAgICBjbGFzcyBXZWFrT3duZXIgOiBwdWJsaWMgSlNDOjpXZWFrSGFuZGxlT3duZXIgewotICAg
ICAgICBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5r
bm93bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6U2xvdFZpc2l0b3ImLCBjb25zdCBjaGFyKiopIG92
ZXJyaWRlOworICAgICAgICBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFu
ZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRv
ciYsIGNvbnN0IGNoYXIqKikgb3ZlcnJpZGU7CiAgICAgfTsKICAgICBXZWFrT3duZXIgbV93ZWFr
T3duZXI7CiAgICAgSlNDOjpXZWFrPEpTQzo6SlNPYmplY3Q+IG1fY2FsbGJhY2s7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREN1c3Rv
bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkRDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREN1c3RvbS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA2
LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDA2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCkBAIC0yNCw3ICsyNCw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotYm9vbCBKU0Nh
bnZhc1JlbmRlcmluZ0NvbnRleHQyRE93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhK
U0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIEpTQzo6U2xvdFZpc2l0b3Im
IHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCitib29sIEpTQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJET3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6
VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9y
LCBjb25zdCBjaGFyKiogcmVhc29uKQogewogICAgIGlmIChVTkxJS0VMWShyZWFzb24pKQogICAg
ICAgICAqcmVhc29uID0gIkNhbnZhcyBpcyBvcGFxdWUgcm9vdCI7CkBAIC0zNCw5ICszNCwxMyBA
QCBib29sIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJET3duZXI6OmlzCiAgICAgcmV0dXJuIHZp
c2l0b3IuY29udGFpbnNPcGFxdWVSb290KHJvb3QpOwogfQogCi12b2lkIEpTQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJEOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2
aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNDYW52YXNSZW5kZXJp
bmdDb250ZXh0MkQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7
CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHJvb3Qod3JhcHBlZCgpLmNhbnZhcygpKSk7CiB9
CiAKK3RlbXBsYXRlIHZvaWQgSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnZpc2l0QWRkaXRp
b25hbENoaWxkcmVuKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBK
U0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpT
bG90VmlzaXRvciYpOworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0N1c3RvbUV2ZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0N1c3RvbUV2ZW50Q3VzdG9tLmNwcAkocmV2aXNp
b24gMjcyODMwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDdXN0b21FdmVudEN1
c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDE1LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE1LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00MiwxMCArNDIsMTQgQEAgSlNDOjpKU1ZhbHVl
IEpTQ3VzdG9tRXZlbnQ6OmRldGFpbChKU0M6OgogICAgIH0pOwogfQogCi12b2lkIEpTQ3VzdG9t
RXZlbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3Ip
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0N1c3RvbUV2ZW50Ojp2aXNpdEFk
ZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHdyYXBwZWQoKS5kZXRh
aWwoKS52aXNpdCh2aXNpdG9yKTsKICAgICB3cmFwcGVkKCkuY2FjaGVkRGV0YWlsKCkudmlzaXQo
dmlzaXRvcik7CiB9CiAKK3RlbXBsYXRlIHZvaWQgSlNDdXN0b21FdmVudDo6dmlzaXRBZGRpdGlv
bmFsQ2hpbGRyZW4oSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpT
Q3VzdG9tRXZlbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImKTsK
KwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNET01CdWlsdGluQ29uc3RydWN0b3JCYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJ1aWx0aW5Db25zdHJ1Y3RvckJhc2UuY3BwCShyZXZp
c2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJ1aWx0aW5D
b25zdHJ1Y3RvckJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAq
ICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMSBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQot
ICogIENvcHlyaWdodCAoQykgMjAwNC0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDQtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA3IFNhbXVlbCBXZWluaWcgPHNhbUB3ZWJraXQu
b3JnPgogICogIENvcHlyaWdodCAoQykgMjAxMyBNaWNoYWVsIFBydWV0dCA8bWljaGFlbEA2OGsu
b3JnPgogICoKQEAgLTQ1LDcgKzQ1LDggQEAgdm9pZCBKU0RPTUJ1aWx0aW5Db25zdHJ1Y3RvckJh
c2U6OmNhbGxGdQogICAgIEpTQzo6Y2FsbCgmbGV4aWNhbEdsb2JhbE9iamVjdCwgJmZ1bmN0aW9u
LCBjYWxsRGF0YSwgJnRoaXNPYmplY3QsIGFyZ3VtZW50cyk7CiB9CiAKLXZvaWQgSlNET01CdWls
dGluQ29uc3RydWN0b3JCYXNlOjp2aXNpdENoaWxkcmVuKEpTQzo6SlNDZWxsKiBjZWxsLCBKU0M6
OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQg
SlNET01CdWlsdGluQ29uc3RydWN0b3JCYXNlOjp2aXNpdENoaWxkcmVuSW1wbChKU0M6OkpTQ2Vs
bCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganND
YXN0PEpTRE9NQnVpbHRpbkNvbnN0cnVjdG9yQmFzZSo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19P
QkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTUzLDYgKzU0LDggQEAgdm9p
ZCBKU0RPTUJ1aWx0aW5Db25zdHJ1Y3RvckJhc2U6OnZpc2l0QwogICAgIHZpc2l0b3IuYXBwZW5k
KHRoaXNPYmplY3QtPm1faW5pdGlhbGl6ZUZ1bmN0aW9uKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NI
SUxEUkVOKEpTRE9NQnVpbHRpbkNvbnN0cnVjdG9yQmFzZSk7CisKIEpTQzo6SXNvU3Vic3BhY2Uq
IEpTRE9NQnVpbHRpbkNvbnN0cnVjdG9yQmFzZTo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZt
KQogewogICAgIHJldHVybiAmc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnRE
YXRhKS0+ZG9tQnVpbHRpbkNvbnN0cnVjdG9yU3BhY2UoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTRE9NQnVpbHRpbkNvbnN0cnVjdG9yQmFzZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQnVpbHRpbkNvbnN0cnVjdG9yQmFzZS5o
CShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJ1
aWx0aW5Db25zdHJ1Y3RvckJhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8q
CiAgKiAgQ29weXJpZ2h0IChDKSAyMDE1LCAyMDE2IENhbm9uIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqICBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogIENvcHlyaWdodCAoQykgMjAxNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKQEAgLTQyLDcgKzQyLDcgQEAgcHJvdGVjdGVk
OgogICAgIHsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQzo6SlND
ZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAK
ICAgICBKU0M6OkpTRnVuY3Rpb24qIGluaXRpYWxpemVGdW5jdGlvbigpOwogICAgIHZvaWQgc2V0
SW5pdGlhbGl6ZUZ1bmN0aW9uKEpTQzo6Vk0mLCBKU0M6OkpTRnVuY3Rpb24mKTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5jcHAJKHJl
dmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFs
T2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDgtMjAxOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDgtMjAyMSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTIzOCw3ICsyMzgsOCBAQCBTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiBKU0RPTUdsb2JhbE9iamVjCiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAK
LXZvaWQgSlNET01HbG9iYWxPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90
VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTRE9N
R2xvYmFsT2JqZWN0Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZp
c2l0b3IpCiB7CiAgICAgSlNET01HbG9iYWxPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNE
T01HbG9iYWxPYmplY3QqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRo
aXNPYmplY3QsIGluZm8oKSk7CkBAIC0yNjAsNiArMjYxLDggQEAgdm9pZCBKU0RPTUdsb2JhbE9i
amVjdDo6dmlzaXRDaGlsZHJlbihKUwogICAgIHRoaXNPYmplY3QtPm1fYnVpbHRpbkludGVybmFs
RnVuY3Rpb25zLnZpc2l0KHZpc2l0b3IpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNE
T01HbG9iYWxPYmplY3QpOworCiB2b2lkIEpTRE9NR2xvYmFsT2JqZWN0Ojpwcm9taXNlUmVqZWN0
aW9uVHJhY2tlcihKU0dsb2JhbE9iamVjdCoganNHbG9iYWxPYmplY3QsIEpTUHJvbWlzZSogcHJv
bWlzZSwgSlNQcm9taXNlUmVqZWN0aW9uT3BlcmF0aW9uIG9wZXJhdGlvbikKIHsKICAgICAvLyBo
dHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS93ZWJhcHBhcGlzLmh0bWwjdGhl
LWhvc3Rwcm9taXNlcmVqZWN0aW9udHJhY2tlci1pbXBsZW1lbnRhdGlvbgpJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01HbG9iYWxPYmplY3QuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5oCShyZXZpc2lvbiAy
NzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAw
OC0yMDE4IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAwOC0yMDIxIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtNjksNyArNjksNyBAQCBwdWJsaWM6CiAgICAgLy8gTWFrZSBi
aW5kaW5nIGNvZGUgZ2VuZXJhdGlvbiBlYXNpZXIuCiAgICAgSlNET01HbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCgpIHsgcmV0dXJuIHRoaXM7IH0KIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hp
bGRyZW4oSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJ
VF9DSElMRFJFTjsKIAogICAgIERPTVdyYXBwZXJXb3JsZCYgd29ybGQoKSB7IHJldHVybiBtX3dv
cmxkLmdldCgpOyB9CiAgICAgYm9vbCB3b3JsZElzTm9ybWFsKCkgY29uc3QgeyByZXR1cm4gbV93
b3JsZElzTm9ybWFsOyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUd1
YXJkZWRPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0RPTUd1YXJkZWRPYmplY3QuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNET01HdWFyZGVkT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDAsNyArNDAs
NyBAQCBwdWJsaWM6CiAKICAgICBib29sIGlzU3VzcGVuZGVkKCkgY29uc3QgeyByZXR1cm4gIW1f
Z3VhcmRlZCB8fCAhY2FuSW52b2tlQ2FsbGJhY2soKTsgfSAvLyBUaGUgd3JhcHBlciB3b3JsZCBo
YXMgZ29uZSBhd2F5IG9yIGFjdGl2ZSBET00gb2JqZWN0cyBoYXZlIGJlZW4gc3VzcGVuZGVkLgog
Ci0gICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKSB7IHZp
c2l0b3IuYXBwZW5kKG1fZ3VhcmRlZCk7IH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
PiB2b2lkIHZpc2l0QWdncmVnYXRlKFZpc2l0b3ImIHZpc2l0b3IpIHsgdmlzaXRvci5hcHBlbmQo
bV9ndWFyZGVkKTsgfQogCiAgICAgSlNDOjpKU1ZhbHVlIGd1YXJkZWRPYmplY3QoKSBjb25zdCB7
IHJldHVybiBtX2d1YXJkZWQuZ2V0KCk7IH0KICAgICBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0KCkgY29uc3QgeyByZXR1cm4gbV9nbG9iYWxPYmplY3QuZ2V0KCk7IH0KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NUXVhZEN1c3RvbS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01RdWFkQ3VzdG9tLmNwcAkocmV2aXNp
b24gMjcyODMwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01RdWFkQ3VzdG9t
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC0zMyw3ICszMyw4IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1
c2luZyBuYW1lc3BhY2UgSlNDOwogCi12b2lkIEpTRE9NUXVhZDo6dmlzaXRBZGRpdGlvbmFsQ2hp
bGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgor
dm9pZCBKU0RPTVF1YWQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3Ip
CiB7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KGNvbnN0X2Nhc3Q8RE9NUG9pbnQqPigmd3Jh
cHBlZCgpLnAxKCkpKTsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QoY29uc3RfY2FzdDxET01Q
b2ludCo+KCZ3cmFwcGVkKCkucDIoKSkpOwpAQCAtNDEsNCArNDIsNyBAQCB2b2lkIEpTRE9NUXVh
ZDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oCiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KGNv
bnN0X2Nhc3Q8RE9NUG9pbnQqPigmd3JhcHBlZCgpLnA0KCkpKTsKIH0KIAotfQordGVtcGxhdGUg
dm9pZCBKU0RPTVF1YWQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0
b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNET01RdWFkOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihT
bG90VmlzaXRvciYpOworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0N1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dDdXN0b20uY3BwCShyZXZpc2lvbiAy
NzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0N1c3RvbS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDA3LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDA3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0
IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpA
QCAtMTE2LDcgKzExNiw4IEBAIEpTQ19ERUZJTkVfQ1VTVE9NX0dFVFRFUihqc0RPTVdpbmRvd0lu
c3QKICAgICByZXR1cm4gbm9uQ2FjaGluZ1N0YXRpY0Z1bmN0aW9uR2V0dGVySW1wbDxqc0RPTVdp
bmRvd0luc3RhbmNlRnVuY3Rpb25fcG9zdE1lc3NhZ2UsIDI+KGdsb2JhbE9iamVjdCwgcHJvcGVy
dHlOYW1lKTsKIH0KIAotdm9pZCBKU0RPTVdpbmRvdzo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4o
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBK
U0RPTVdpbmRvdzo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsK
ICAgICBpZiAoRnJhbWUqIGZyYW1lID0gd3JhcHBlZCgpLmZyYW1lKCkpCiAgICAgICAgIHZpc2l0
b3IuYWRkT3BhcXVlUm9vdChmcmFtZSk7CkBAIC0xMjksNiArMTMwLDkgQEAgdm9pZCBKU0RPTVdp
bmRvdzo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZQogICAgIHdyYXBwZWQoKS52aXNpdEpTRXZlbnRM
aXN0ZW5lcnModmlzaXRvcik7CiB9CiAKK3RlbXBsYXRlIHZvaWQgSlNET01XaW5kb3c6OnZpc2l0
QWRkaXRpb25hbENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQg
SlNET01XaW5kb3c6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CisKICNp
ZiBFTkFCTEUoVVNFUl9NRVNTQUdFX0hBTkRMRVJTKQogSlNDX0RFRklORV9DVVNUT01fR0VUVEVS
KGpzRE9NV2luZG93X3dlYmtpdCwgKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0
LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkpCiB7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RlcHJlY2F0ZWRDU1NPTVZhbHVlQ3VzdG9tLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RlcHJlY2F0ZWRDU1NP
TVZhbHVlQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNEZXByZWNhdGVkQ1NTT01WYWx1ZUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMTkgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMjEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC0zNSw3ICszNSw3IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2Ug
SlNDOwogCi1ib29sIEpTRGVwcmVjYXRlZENTU09NVmFsdWVPd25lcjo6aXNSZWFjaGFibGVGcm9t
T3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBTbG90
VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikKK2Jvb2wgSlNEZXByZWNhdGVk
Q1NTT01WYWx1ZU93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxK
U0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3Is
IGNvbnN0IGNoYXIqKiByZWFzb24pCiB7CiAgICAgSlNEZXByZWNhdGVkQ1NTT01WYWx1ZSoganND
U1NWYWx1ZSA9IGpzQ2FzdDxKU0RlcHJlY2F0ZWRDU1NPTVZhbHVlKj4oaGFuZGxlLnNsb3QoKS0+
YXNDZWxsKCkpOwogICAgIGlmICghanNDU1NWYWx1ZS0+aGFzQ3VzdG9tUHJvcGVydGllcyhqc0NT
U1ZhbHVlLT52bSgpKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRG9jdW1l
bnRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
RG9jdW1lbnRDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0RvY3VtZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOSwgMjAxMSwgMjAxNiwgMjAxNyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAg
LTkxLDExICs5MSwxNSBAQCBKU1ZhbHVlIHRvSlMoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9i
CiAgICAgcmV0dXJuIHRvSlNOZXdseUNyZWF0ZWQobGV4aWNhbEdsb2JhbE9iamVjdCwgZ2xvYmFs
T2JqZWN0LCBSZWY8RG9jdW1lbnQ+KGRvY3VtZW50KSk7CiB9CiAKLXZvaWQgSlNEb2N1bWVudDo6
dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0
eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0RvY3VtZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJl
bihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChzdGF0aWNf
Y2FzdDxTY3JpcHRFeGVjdXRpb25Db250ZXh0Kj4oJndyYXBwZWQoKSkpOwogfQogCit0ZW1wbGF0
ZSB2b2lkIEpTRG9jdW1lbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEFic3RyYWN0U2xvdFZp
c2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNEb2N1bWVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRy
ZW4oU2xvdFZpc2l0b3ImKTsKKwogdm9pZCBKU0RvY3VtZW50OjphbmFseXplSGVhcChKU0NlbGwq
IGNlbGwsIEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCiB7CiAgICAgQmFzZTo6YW5hbHl6ZUhlYXAo
Y2VsbCwgYW5hbHl6ZXIpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFcnJv
ckV2ZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0Vycm9yRXZlbnRDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0Vycm9yRXZlbnRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxOCBZdXN1a2UgU3V6dWtpIDx5
dXN1a2VzdXp1a2lAc2xvd3N0YXJ0Lm9yZz4uCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC0yOCw5ICsyOSwxMyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgSlNFcnJv
ckV2ZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9y
KQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNFcnJvckV2ZW50Ojp2aXNpdEFk
ZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHdyYXBwZWQoKS5vcmln
aW5hbEVycm9yKCkudmlzaXQodmlzaXRvcik7CiB9CiAKK3RlbXBsYXRlIHZvaWQgSlNFcnJvckV2
ZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKTsK
K3RlbXBsYXRlIHZvaWQgSlNFcnJvckV2ZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6
OlNsb3RWaXNpdG9yJik7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRMaXN0ZW5lci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudExpc3RlbmVyLmNwcAkocmV2aXNpb24gMjcy
ODMwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudExpc3RlbmVyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAyMDAx
IFBldGVyIEtlbGx5IChwbWtAcG9zdC5jb20pCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMTkg
QXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwMy0y
MDIxIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMK
QEAgLTc4LDcgKzc4LDggQEAgSlNPYmplY3QqIEpTRXZlbnRMaXN0ZW5lcjo6aW5pdGlhbGl6ZUpT
RgogICAgIHJldHVybiBudWxscHRyOwogfQogCi12b2lkIEpTRXZlbnRMaXN0ZW5lcjo6dmlzaXRK
U0Z1bmN0aW9uKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRv
cj4KK2lubGluZSB2b2lkIEpTRXZlbnRMaXN0ZW5lcjo6dmlzaXRKU0Z1bmN0aW9uSW1wbChWaXNp
dG9yJiB2aXNpdG9yKQogewogICAgIC8vIElmIG1fd3JhcHBlciBpcyBudWxsLCB3ZSBhcmUgbm90
IGtlZXBpbmcgbV9qc0Z1bmN0aW9uIGFsaXZlLgogICAgIGlmICghbV93cmFwcGVyKQpAQCAtODcs
NiArODgsOSBAQCB2b2lkIEpTRXZlbnRMaXN0ZW5lcjo6dmlzaXRKU0Z1bmN0aW9uKFNsCiAgICAg
dmlzaXRvci5hcHBlbmQobV9qc0Z1bmN0aW9uKTsKIH0KIAordm9pZCBKU0V2ZW50TGlzdGVuZXI6
OnZpc2l0SlNGdW5jdGlvbihBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKSB7IHZpc2l0SlNG
dW5jdGlvbkltcGwodmlzaXRvcik7IH0KK3ZvaWQgSlNFdmVudExpc3RlbmVyOjp2aXNpdEpTRnVu
Y3Rpb24oU2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsgdmlzaXRKU0Z1bmN0aW9uSW1wbCh2aXNpdG9y
KTsgfQorCiBzdGF0aWMgdm9pZCBoYW5kbGVCZWZvcmVVbmxvYWRFdmVudFJldHVyblZhbHVlKEJl
Zm9yZVVubG9hZEV2ZW50JiBldmVudCwgY29uc3QgU3RyaW5nJiByZXR1cm5WYWx1ZSkKIHsKICAg
ICBpZiAocmV0dXJuVmFsdWUuaXNOdWxsKCkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0V2ZW50TGlzdGVuZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0V2ZW50TGlzdGVuZXIuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNFdmVudExpc3RlbmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NiArMSw2IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMjAwMSBQZXRlciBLZWxseSAocG1rQHBv
c3QuY29tKQotICogIENvcHlyaWdodCAoQykgMjAwMy0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCkBAIC02Miw2ICs2Miw5IEBAIHB1
YmxpYzoKIAogcHJpdmF0ZToKICAgICB2aXJ0dWFsIEpTQzo6SlNPYmplY3QqIGluaXRpYWxpemVK
U0Z1bmN0aW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmKSBjb25zdDsKKworICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgdmlzaXRKU0Z1bmN0aW9uSW1wbChWaXNpdG9yJik7Cisg
ICAgdm9pZCB2aXNpdEpTRnVuY3Rpb24oSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJikgZmluYWw7
CiAgICAgdm9pZCB2aXNpdEpTRnVuY3Rpb24oSlNDOjpTbG90VmlzaXRvciYpIGZpbmFsOwogCiBw
cm90ZWN0ZWQ6CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50VGFyZ2V0
Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2
ZW50VGFyZ2V0Q3VzdG9tLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNFdmVudFRhcmdldEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTcgQXBwbGUgSW5jLiBBbGwg
UmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMjEgQXBwbGUgSW5jLiBB
bGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03
Miw5ICs3MiwxMyBAQCBzdGQ6OnVuaXF1ZV9wdHI8SlNFdmVudFRhcmdldFdyYXBwZXI+IGpzCiAg
ICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLXZvaWQgSlNFdmVudFRhcmdldDo6dmlzaXRBZGRpdGlv
bmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNp
dG9yPgordm9pZCBKU0V2ZW50VGFyZ2V0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9y
JiB2aXNpdG9yKQogewogICAgIHdyYXBwZWQoKS52aXNpdEpTRXZlbnRMaXN0ZW5lcnModmlzaXRv
cik7CiB9CiAKK3RlbXBsYXRlIHZvaWQgSlNFdmVudFRhcmdldDo6dmlzaXRBZGRpdGlvbmFsQ2hp
bGRyZW4oQWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU0V2ZW50VGFyZ2V0
Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYpOworCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0ZldGNoRXZlbnRD
dXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRmV0
Y2hFdmVudEN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTRmV0Y2hFdmVudEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzAsMTEgKzMw
LDE1IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBKU0ZldGNoRXZlbnQ6OnZpc2l0
QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0
eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0ZldGNoRXZlbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxk
cmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KCZ3cmFw
cGVkKCkucmVxdWVzdCgpKTsKIH0KIAotfQordGVtcGxhdGUgdm9pZCBKU0ZldGNoRXZlbnQ6OnZp
c2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxh
dGUgdm9pZCBKU0ZldGNoRXZlbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZp
c2l0b3ImKTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTENhbnZhc0VsZW1lbnRDdXN0b20uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTENhbnZhc0VsZW1lbnRD
dXN0b20uY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0hUTUxDYW52YXNFbGVtZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIwLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMSw5ICszMSwx
MyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgSlNIVE1MQ2FudmFzRWxlbWVudDo6
dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBs
YXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTSFRNTENhbnZhc0VsZW1lbnQ6OnZpc2l0QWRk
aXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgdmlzaXRvci5hZGRPcGFx
dWVSb290KHN0YXRpY19jYXN0PENhbnZhc0Jhc2UqPigmd3JhcHBlZCgpKSk7CiB9CiAKK3RlbXBs
YXRlIHZvaWQgSlNIVE1MQ2FudmFzRWxlbWVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlND
OjpBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTSFRNTENhbnZhc0VsZW1l
bnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImKTsKKwogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1M
VGVtcGxhdGVFbGVtZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0hUTUxUZW1wbGF0ZUVsZW1lbnRDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI4
MzApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxUZW1wbGF0ZUVsZW1lbnRD
dXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdo
dCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKQEAgLTM3LDEwICszOCwxNCBAQAogbmFtZXNwYWNlIFdlYkNv
cmUgewogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAotdm9pZCBKU0hUTUxUZW1wbGF0ZUVsZW1lbnQ6
OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1w
bGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0hUTUxUZW1wbGF0ZUVsZW1lbnQ6OnZpc2l0
QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgaWYgKGF1dG8qIGNv
bnRlbnQgPSB3cmFwcGVkKCkuY29udGVudElmQXZhaWxhYmxlKCkpCiAgICAgICAgIHZpc2l0b3Iu
YWRkT3BhcXVlUm9vdChyb290KGNvbnRlbnQpKTsKIH0KIAordGVtcGxhdGUgdm9pZCBKU0hUTUxU
ZW1wbGF0ZUVsZW1lbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6QWJzdHJhY3RTbG90
VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU0hUTUxUZW1wbGF0ZUVsZW1lbnQ6OnZpc2l0QWRk
aXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImKTsKKwogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIaXN0b3J5Q3VzdG9tLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hpc3RvcnlDdXN0
b20uY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0hpc3RvcnlDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAwOC0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDQsOSArNDQsMTMgQEAgSlNW
YWx1ZSBKU0hpc3Rvcnk6OnN0YXRlKEpTR2xvYmFsT2JqZWN0JgogICAgIH0pOwogfQogCi12b2lk
IEpTSGlzdG9yeTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3Ip
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0hpc3Rvcnk6OnZpc2l0QWRkaXRp
b25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgd3JhcHBlZCgpLmNhY2hlZFN0
YXRlRm9yR0MoKS52aXNpdCh2aXNpdG9yKTsKIH0KIAordGVtcGxhdGUgdm9pZCBKU0hpc3Rvcnk6
OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRl
IHZvaWQgSlNIaXN0b3J5Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYpOwor
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0lEQkN1cnNvckN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNJREJDdXJzb3JDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQkN1cnNvckN1c3RvbS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIxIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtNTAsNyArNTAsOCBAQCBKU0M6OkpTVmFsdWUgSlNJREJDdXJzb3I6OnByaW1hcnlLZXkoSlND
CiAgICAgfSk7CiB9CiAKLXZvaWQgSlNJREJDdXJzb3I6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVu
KFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQg
SlNJREJDdXJzb3I6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7
CiAgICAgYXV0byYgY3Vyc29yID0gd3JhcHBlZCgpOwogICAgIGlmIChhdXRvKiByZXF1ZXN0ID0g
Y3Vyc29yLnJlcXVlc3QoKSkKQEAgLTU5LDYgKzYwLDkgQEAgdm9pZCBKU0lEQkN1cnNvcjo6dmlz
aXRBZGRpdGlvbmFsQ2hpbGRyZQogICAgIGN1cnNvci5wcmltYXJ5S2V5V3JhcHBlcigpLnZpc2l0
KHZpc2l0b3IpOwogfQogCit0ZW1wbGF0ZSB2b2lkIEpTSURCQ3Vyc29yOjp2aXNpdEFkZGl0aW9u
YWxDaGlsZHJlbihBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTSURCQ3Vy
c29yOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYpOworCiBKU1ZhbHVlIHRv
SlNOZXdseUNyZWF0ZWQoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTRE9NR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIFJlZjxJREJDdXJzb3I+JiYgY3Vyc29yKQogewogICAgIGlmIChpczxJREJD
dXJzb3JXaXRoVmFsdWU+KGN1cnNvcikpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0lEQkN1cnNvcldpdGhWYWx1ZUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNJREJDdXJzb3JXaXRoVmFsdWVDdXN0b20uY3BwCShyZXZpc2lv
biAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQkN1cnNvcldpdGhW
YWx1ZUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDMsMTIgKzQzLDE2IEBAIEpTQzo6SlNWYWx1
ZSBKU0lEQkN1cnNvcldpdGhWYWx1ZTo6dmFsdWUKICAgICB9KTsKIH0KIAotdm9pZCBKU0lEQkN1
cnNvcldpdGhWYWx1ZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0
b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0lEQkN1cnNvcldpdGhWYWx1
ZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU0lE
QkN1cnNvcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4odmlzaXRvcik7CiAgICAgd3JhcHBlZCgp
LnZhbHVlV3JhcHBlcigpLnZpc2l0KHZpc2l0b3IpOwogfQogCit0ZW1wbGF0ZSB2b2lkIEpTSURC
Q3Vyc29yV2l0aFZhbHVlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihBYnN0cmFjdFNsb3RWaXNp
dG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTSURCQ3Vyc29yV2l0aFZhbHVlOjp2aXNpdEFkZGl0aW9u
YWxDaGlsZHJlbihTbG90VmlzaXRvciYpOworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNl
bmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTSURCSW5kZXhDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTSURCSW5kZXhDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI4MzApCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQkluZGV4Q3VzdG9tLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0zNCwxMSArMzQsMTUgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVz
cGFjZSBKU0M7CiAKLXZvaWQgSlNJREJJbmRleDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xv
dFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0lE
QkluZGV4Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAg
IHZpc2l0b3IuYWRkT3BhcXVlUm9vdChzdGF0aWNfY2FzdDxJREJJbmRleCY+KHdyYXBwZWQoKSku
b2JqZWN0U3RvcmVBc09wYXF1ZVJvb3QoKSk7CiB9CiAKK3RlbXBsYXRlIHZvaWQgSlNJREJJbmRl
eDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oQWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxh
dGUgdm9pZCBKU0lEQkluZGV4Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYp
OworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9E
QVRBQkFTRSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCT2JqZWN0U3Rv
cmVDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
SURCT2JqZWN0U3RvcmVDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0lEQk9iamVjdFN0b3JlQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTIgTWljaGFlbCBQcnVl
dHQgPG1pY2hhZWxANjhrLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCkBA
IC0zNiwxMSArMzcsMTUgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBK
U0M7CiAKLXZvaWQgSlNJREJPYmplY3RTdG9yZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xv
dFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0lE
Qk9iamVjdFN0b3JlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQog
ewogICAgIHN0YXRpY19jYXN0PElEQk9iamVjdFN0b3JlJj4od3JhcHBlZCgpKS52aXNpdFJlZmVy
ZW5jZWRJbmRleGVzKHZpc2l0b3IpOwogfQogCi19Cit0ZW1wbGF0ZSB2b2lkIEpTSURCT2JqZWN0
U3RvcmU6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3Rl
bXBsYXRlIHZvaWQgSlNJREJPYmplY3RTdG9yZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xv
dFZpc2l0b3ImKTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCUmVxdWVzdEN1c3RvbS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJSZXF1ZXN0Q3VzdG9tLmNwcAko
cmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJSZXF1
ZXN0Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE5LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC04OSwxMiArODksMTcgQEAgSlNDOjpKU1ZhbHVl
IEpTSURCUmVxdWVzdDo6cmVzdWx0KEpTQzo6SgogICAgIH0pOwogfQogCi12b2lkIEpTSURCUmVx
dWVzdDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1w
bGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0lEQlJlcXVlc3Q6OnZpc2l0QWRkaXRpb25h
bENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0byYgcmVxdWVzdCA9IHdyYXBw
ZWQoKTsKICAgICByZXF1ZXN0LnJlc3VsdFdyYXBwZXIoKS52aXNpdCh2aXNpdG9yKTsKICAgICBy
ZXF1ZXN0LmN1cnNvcldyYXBwZXIoKS52aXNpdCh2aXNpdG9yKTsKIH0KIAotfQordGVtcGxhdGUg
dm9pZCBKU0lEQlJlcXVlc3Q6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEFic3RyYWN0U2xvdFZp
c2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNJREJSZXF1ZXN0Ojp2aXNpdEFkZGl0aW9uYWxDaGls
ZHJlbihTbG90VmlzaXRvciYpOworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKICNlbmRpZiAv
LyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTSURCVHJhbnNhY3Rpb25DdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTSURCVHJhbnNhY3Rpb25DdXN0b20uY3BwCShyZXZpc2lvbiAyNzI4
MzApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQlRyYW5zYWN0aW9uQ3VzdG9t
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC0zNCwxMSArMzQsMTUgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKLXZvaWQgSlNJREJUcmFuc2FjdGlvbjo6dmlzaXRBZGRp
dGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPgordm9pZCBKU0lEQlRyYW5zYWN0aW9uOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihW
aXNpdG9yJiB2aXNpdG9yKQogewogICAgIHN0YXRpY19jYXN0PElEQlRyYW5zYWN0aW9uJj4od3Jh
cHBlZCgpKS52aXNpdFJlZmVyZW5jZWRPYmplY3RTdG9yZXModmlzaXRvcik7CiB9CiAKLX0KK3Rl
bXBsYXRlIHZvaWQgSlNJREJUcmFuc2FjdGlvbjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oQWJz
dHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU0lEQlRyYW5zYWN0aW9uOjp2aXNp
dEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYpOworCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCiAKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJbnRlcnNl
Y3Rpb25PYnNlcnZlckN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNJbnRlcnNlY3Rpb25PYnNlcnZlckN1c3RvbS5jcHAJKHJldmlzaW9uIDI3Mjgz
MCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW50ZXJzZWN0aW9uT2JzZXJ2ZXJD
dXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdo
dCAoQykgMjAyMCBJZ2FsaWEgUy5MLgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MzAsMTAgKzMxLDE0IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBKU0ludGVyc2Vj
dGlvbk9ic2VydmVyOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2
aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNJbnRlcnNlY3Rpb25P
YnNlcnZlcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAg
ICBpZiAoYXV0byogY2FsbGJhY2sgPSB3cmFwcGVkKCkuY2FsbGJhY2tDb25jdXJyZW50bHkoKSkK
ICAgICAgICAgY2FsbGJhY2stPnZpc2l0SlNGdW5jdGlvbih2aXNpdG9yKTsKIH0KIAotfQordGVt
cGxhdGUgdm9pZCBKU0ludGVyc2VjdGlvbk9ic2VydmVyOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJl
bihKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNJbnRlcnNlY3Rp
b25PYnNlcnZlcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYpOwor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0ludGVyc2VjdGlvbk9ic2VydmVyRW50cnlDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW50ZXJzZWN0aW9uT2JzZXJ2ZXJFbnRyeUN1c3Rv
bS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
SW50ZXJzZWN0aW9uT2JzZXJ2ZXJFbnRyeUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDE4IEdvb2dsZSBMTEMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMCw3ICszMSw4
IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBKU0ludGVyc2VjdGlvbk9ic2VydmVy
RW50cnk6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3Ip
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0ludGVyc2VjdGlvbk9ic2VydmVy
RW50cnk6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAg
dmlzaXRvci5hZGRPcGFxdWVSb290KHJvb3Qod3JhcHBlZCgpLnRhcmdldCgpKSk7CiAgICAgdmlz
aXRvci5hZGRPcGFxdWVSb290KHdyYXBwZWQoKS5ib3VuZGluZ0NsaWVudFJlY3QoKSk7CkBAIC0z
OCw0ICs0MCw3IEBAIHZvaWQgSlNJbnRlcnNlY3Rpb25PYnNlcnZlckVudHJ5Ojp2aXNpdEEKICAg
ICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qod3JhcHBlZCgpLnJvb3RCb3VuZHMoKSk7CiB9CiAKLX0K
K3RlbXBsYXRlIHZvaWQgSlNJbnRlcnNlY3Rpb25PYnNlcnZlckVudHJ5Ojp2aXNpdEFkZGl0aW9u
YWxDaGlsZHJlbihKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNJ
bnRlcnNlY3Rpb25PYnNlcnZlckVudHJ5Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNs
b3RWaXNpdG9yJik7CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTTWVzc2FnZUNoYW5uZWxDdXN0b20uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWVzc2FnZUNoYW5uZWxDdXN0b20uY3BwCShy
ZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01lc3NhZ2VD
aGFubmVsQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMjEgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMyw3ICszMyw4IEBACiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBKU01lc3NhZ2VDaGFubmVsOjp2aXNpdEFkZGl0aW9u
YWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUg
VmlzaXRvcj4KK3ZvaWQgSlNNZXNzYWdlQ2hhbm5lbDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4o
VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBpZiAoTWVzc2FnZVBvcnQqIHBvcnQgPSB3cmFwcGVk
KCkucG9ydDEoKSkKICAgICAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHBvcnQpOwpAQCAtNDIs
NiArNDMsOSBAQCB2b2lkIEpTTWVzc2FnZUNoYW5uZWw6OnZpc2l0QWRkaXRpb25hbENoCiAgICAg
ICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChwb3J0KTsKIH0KIAordGVtcGxhdGUgdm9pZCBKU01l
c3NhZ2VDaGFubmVsOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OkFic3RyYWN0U2xvdFZp
c2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNNZXNzYWdlQ2hhbm5lbDo6dmlzaXRBZGRpdGlvbmFs
Q2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYpOworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAK
ICNlbmRpZiAvLyBFTkFCTEUoQ0hBTk5FTF9NRVNTQUdJTkcpCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU01lc3NhZ2VFdmVudEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNZXNzYWdlRXZlbnRDdXN0b20uY3BwCShyZXZpc2lv
biAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01lc3NhZ2VFdmVudEN1
c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogQ29weXJpZ2h0
IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDktMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMDktMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCkBAIC03MCw3ICs3MCw4IEBAIEpTQzo6SlNWYWx1
ZSBKU01lc3NhZ2VFdmVudDo6ZGF0YShKU0M6OkoKICAgICB9KTsKIH0KIAotdm9pZCBKU01lc3Nh
Z2VFdmVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRv
cikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTTWVzc2FnZUV2ZW50Ojp2aXNp
dEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFdURjo6c3dpdGNo
T24od3JhcHBlZCgpLmRhdGEoKSwgWyZ2aXNpdG9yXSAoY29uc3QgSlNWYWx1ZUluV3JhcHBlZE9i
amVjdCYgZGF0YSkgewogICAgICAgICBkYXRhLnZpc2l0KHZpc2l0b3IpOwpAQCAtODQsNCArODUs
NyBAQCB2b2lkIEpTTWVzc2FnZUV2ZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsCiAgICAgd3JhcHBl
ZCgpLmNhY2hlZFBvcnRzKCkudmlzaXQodmlzaXRvcik7CiB9CiAKK3RlbXBsYXRlIHZvaWQgSlNN
ZXNzYWdlRXZlbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6QWJzdHJhY3RTbG90Vmlz
aXRvciYpOwordGVtcGxhdGUgdm9pZCBKU01lc3NhZ2VFdmVudDo6dmlzaXRBZGRpdGlvbmFsQ2hp
bGRyZW4oSlNDOjpTbG90VmlzaXRvciYpOworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01lc3NhZ2VQb3J0Q3VzdG9tLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01lc3NhZ2VQb3J0Q3VzdG9t
LmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNN
ZXNzYWdlUG9ydEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMDksIDIwMTYgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMjEgQXBwbGUgSW5jLiBBbGwgUmlnaHRz
IFJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCBSaWdodHMg
UmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0zMSwxMSArMzEsMTUgQEAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKLXZvaWQgSlNNZXNzYWdlUG9ydDo6
dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0
eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU01lc3NhZ2VQb3J0Ojp2aXNpdEFkZGl0aW9uYWxDaGls
ZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIC8vIElmIHdlIGhhdmUgYSBsb2NhbGx5IGVu
dGFuZ2xlZCBwb3J0LCB3ZSBjYW4gZGlyZWN0bHkgbWFyayBpdCBhcyByZWFjaGFibGUuIFBvcnRz
IHRoYXQgYXJlIHJlbW90ZWx5IGVudGFuZ2xlZCBhcmUgbWFya2VkIGluLXVzZSBieSBtYXJrQWN0
aXZlT2JqZWN0c0ZvckNvbnRleHQoKS4KICAgICBpZiAoTWVzc2FnZVBvcnQqIHBvcnQgPSB3cmFw
cGVkKCkubG9jYWxseUVudGFuZ2xlZFBvcnQoKSkKICAgICAgICAgdmlzaXRvci5hZGRPcGFxdWVS
b290KHBvcnQpOwogfQogCit0ZW1wbGF0ZSB2b2lkIEpTTWVzc2FnZVBvcnQ6OnZpc2l0QWRkaXRp
b25hbENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNNZXNz
YWdlUG9ydDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKKwogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNdXRh
dGlvbk9ic2VydmVyQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU011dGF0aW9uT2JzZXJ2ZXJDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI4MzApCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU011dGF0aW9uT2JzZXJ2ZXJDdXN0b20uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAx
MSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0y
MDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucyBhcmUKQEAgLTM5LDEyICszOSwxNiBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewog
dXNpbmcgbmFtZXNwYWNlIEpTQzsKIAotdm9pZCBKU011dGF0aW9uT2JzZXJ2ZXI6OnZpc2l0QWRk
aXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBl
bmFtZSBWaXNpdG9yPgordm9pZCBKU011dGF0aW9uT2JzZXJ2ZXI6OnZpc2l0QWRkaXRpb25hbENo
aWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgd3JhcHBlZCgpLmNhbGxiYWNrKCkudmlz
aXRKU0Z1bmN0aW9uKHZpc2l0b3IpOwogfQogCi1ib29sIEpTTXV0YXRpb25PYnNlcnZlck93bmVy
Ojppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhh
bmRsZSwgdm9pZCosIFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKipyZWFzb24pCit0
ZW1wbGF0ZSB2b2lkIEpTTXV0YXRpb25PYnNlcnZlcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4o
SlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTTXV0YXRpb25PYnNl
cnZlcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYpOworCitib29s
IEpTTXV0YXRpb25PYnNlcnZlck93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6
OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIEFic3RyYWN0U2xvdFZpc2l0b3Im
IHZpc2l0b3IsIGNvbnN0IGNoYXIqKnJlYXNvbikKIHsKICAgICBmb3IgKGF1dG8qIG5vZGUgOiBq
c0Nhc3Q8SlNNdXRhdGlvbk9ic2VydmVyKj4oaGFuZGxlLnNsb3QoKS0+YXNDZWxsKCkpLT53cmFw
cGVkKCkub2JzZXJ2ZWROb2RlcygpKSB7CiAgICAgICAgIGlmICh2aXNpdG9yLmNvbnRhaW5zT3Bh
cXVlUm9vdChyb290KG5vZGUpKSkgewpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNNdXRhdGlvblJlY29yZEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNNdXRhdGlvblJlY29yZEN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjgzMCkK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTXV0YXRpb25SZWNvcmRDdXN0b20uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
OCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTgt
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTMwLDkgKzMwLDEzIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAot
dm9pZCBKU011dGF0aW9uUmVjb3JkOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RW
aXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNNdXRh
dGlvblJlY29yZDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsK
ICAgICB3cmFwcGVkKCkudmlzaXROb2Rlc0NvbmN1cnJlbnRseSh2aXNpdG9yKTsKIH0KLSAgICAK
KwordGVtcGxhdGUgdm9pZCBKU011dGF0aW9uUmVjb3JkOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJl
bihKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNNdXRhdGlvblJl
Y29yZDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYpOworCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05h
dmlnYXRvckN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNOYXZpZ2F0b3JDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU05hdmlnYXRvckN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzIs
MTEgKzMyLDE1IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBKU05hdmlnYXRvcjo6
dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBs
YXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTTmF2aWdhdG9yOjp2aXNpdEFkZGl0aW9uYWxD
aGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChz
dGF0aWNfY2FzdDxOYXZpZ2F0b3JCYXNlKj4oJndyYXBwZWQoKSkpOwogfQogCit0ZW1wbGF0ZSB2
b2lkIEpTTmF2aWdhdG9yOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OkFic3RyYWN0U2xv
dFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNOYXZpZ2F0b3I6OnZpc2l0QWRkaXRpb25hbENo
aWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImKTsKKwogI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCiBK
U0M6OkpTVmFsdWUgSlNOYXZpZ2F0b3I6OmdldFVzZXJNZWRpYShKU0M6OkpTR2xvYmFsT2JqZWN0
JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OkNhbGxGcmFtZSYgY2FsbEZyYW1lKQogewpJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlQ3VzdG9tLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVDdXN0b20uY3BwCShyZXZpc2lv
biAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVDdXN0b20uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAw
NywgMjAwOS0yMDEwLCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAwNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNzQsNyArNzQsNyBAQCB1c2luZyBuYW1l
c3BhY2UgSlNDOwogCiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCi1zdGF0aWMgaW5saW5l
IGJvb2wgaXNSZWFjaGFibGVGcm9tRE9NKE5vZGUqIG5vZGUsIFNsb3RWaXNpdG9yJiB2aXNpdG9y
LCBjb25zdCBjaGFyKiogcmVhc29uKQorc3RhdGljIGlubGluZSBib29sIGlzUmVhY2hhYmxlRnJv
bURPTShOb2RlKiBub2RlLCBBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFy
KiogcmVhc29uKQogewogICAgIGlmICghbm9kZS0+aXNDb25uZWN0ZWQoKSkgewogICAgICAgICBp
ZiAoaXM8RWxlbWVudD4oKm5vZGUpKSB7CkBAIC0xMjMsNyArMTIzLDcgQEAgc3RhdGljIGlubGlu
ZSBib29sIGlzUmVhY2hhYmxlRnJvbURPTShObwogICAgIHJldHVybiB2aXNpdG9yLmNvbnRhaW5z
T3BhcXVlUm9vdChyb290KG5vZGUpKTsKIH0KIAotYm9vbCBKU05vZGVPd25lcjo6aXNSZWFjaGFi
bGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQq
LCBTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikKK2Jvb2wgSlNOb2Rl
T3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93
bj4gaGFuZGxlLCB2b2lkKiwgQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hh
cioqIHJlYXNvbikKIHsKICAgICBKU05vZGUqIGpzTm9kZSA9IGpzQ2FzdDxKU05vZGUqPihoYW5k
bGUuc2xvdCgpLT5hc0NlbGwoKSk7CiAgICAgcmV0dXJuIGlzUmVhY2hhYmxlRnJvbURPTSgmanNO
b2RlLT53cmFwcGVkKCksIHZpc2l0b3IsIHJlYXNvbik7CkBAIC0xMzYsMTEgKzEzNiwxNSBAQCBK
U1Njb3BlKiBKU05vZGU6OnB1c2hFdmVudEhhbmRsZXJTY29wZShKCiAgICAgcmV0dXJuIG5vZGU7
CiB9CiAKLXZvaWQgSlNOb2RlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYg
dmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTTm9kZTo6dmlzaXRB
ZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB2aXNpdG9yLmFkZE9w
YXF1ZVJvb3Qocm9vdCh3cmFwcGVkKCkpKTsKIH0KIAordGVtcGxhdGUgdm9pZCBKU05vZGU6OnZp
c2l0QWRkaXRpb25hbENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZv
aWQgSlNOb2RlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYpOworCiBzdGF0
aWMgQUxXQVlTX0lOTElORSBKU1ZhbHVlIGNyZWF0ZVdyYXBwZXJJbmxpbmUoSlNHbG9iYWxPYmpl
Y3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IFJlZjxOb2RlPiYmIG5vZGUpCiB7CiAgICAgQVNTRVJUKCFnZXRDYWNoZWRXcmFwcGVyKGdsb2Jh
bE9iamVjdC0+d29ybGQoKSwgbm9kZSkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNOb2RlSXRlcmF0b3JDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTTm9kZUl0ZXJhdG9yQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcyODMwKQor
KysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlSXRlcmF0b3JDdXN0b20uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwg
MjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKQEAgLTI1LDEwICsyNSwxNCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZv
aWQgSlNOb2RlSXRlcmF0b3I6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0
b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU05vZGVJdGVy
YXRvcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBp
ZiAoTm9kZUZpbHRlciogZmlsdGVyID0gd3JhcHBlZCgpLmZpbHRlcigpKQogICAgICAgICB2aXNp
dG9yLmFkZE9wYXF1ZVJvb3QoZmlsdGVyKTsKIH0KIAotfQordGVtcGxhdGUgdm9pZCBKU05vZGVJ
dGVyYXRvcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9y
Jik7Cit0ZW1wbGF0ZSB2b2lkIEpTTm9kZUl0ZXJhdG9yOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJl
bihKU0M6OlNsb3RWaXNpdG9yJik7CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUxpc3RDdXN0b20uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUxpc3RDdXN0b20uY3BwCShyZXZp
c2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVMaXN0Q3Vz
dG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDctMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMDctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM3LDcgKzM3LDcgQEAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKLWJvb2wgSlNOb2RlTGlzdE93bmVyOjppc1Jl
YWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwg
dm9pZCosIFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQorYm9vbCBK
U05vZGVMaXN0T3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpT
Qzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvciwg
Y29uc3QgY2hhcioqIHJlYXNvbikKIHsKICAgICBKU05vZGVMaXN0KiBqc05vZGVMaXN0ID0ganND
YXN0PEpTTm9kZUxpc3QqPihoYW5kbGUuc2xvdCgpLT5hc0NlbGwoKSk7CiAgICAgaWYgKCFqc05v
ZGVMaXN0LT5oYXNDdXN0b21Qcm9wZXJ0aWVzKGpzTm9kZUxpc3QtPnZtKCkpKQpJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNPZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0
MkRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
T2Zmc2NyZWVuQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcy
ODMwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNPZmZzY3JlZW5DYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTMxLDcgKzMxLDcgQEAgaW5saW5lIHZvaWQqIHJv
b3QoT2Zmc2NyZWVuQ2FudmFzKiBjYW52YQogICAgIHJldHVybiBjYW52YXM7CiB9CiAKLWJvb2wg
SlNPZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRPd25lcjo6aXNSZWFjaGFibGVGcm9t
T3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBTbG90
VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikKK2Jvb2wgSlNPZmZzY3JlZW5D
YW52YXNSZW5kZXJpbmdDb250ZXh0MkRPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMo
SlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBBYnN0cmFjdFNsb3RWaXNp
dG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQogewogICAgIGlmIChVTkxJS0VMWShy
ZWFzb24pKQogICAgICAgICAqcmVhc29uID0gIkNhbnZhcyBpcyBvcGFxdWUgcm9vdCI7CkBAIC00
MSwxMSArNDEsMTUgQEAgYm9vbCBKU09mZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRAog
ICAgIHJldHVybiB2aXNpdG9yLmNvbnRhaW5zT3BhcXVlUm9vdChyb290KTsKIH0KIAotdm9pZCBK
U09mZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRy
ZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9p
ZCBKU09mZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6dmlzaXRBZGRpdGlvbmFsQ2hp
bGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qocm9v
dCgmd3JhcHBlZCgpLmNhbnZhcygpKSk7CiB9CiAKK3RlbXBsYXRlIHZvaWQgSlNPZmZzY3JlZW5D
YW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEFic3RyYWN0
U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNPZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdD
b250ZXh0MkQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CisKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU1BhaW50UmVuZGVyaW5nQ29udGV4dDJEQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1BhaW50UmVuZGVyaW5nQ29udGV4dDJEQ3VzdG9t
LmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNQ
YWludFJlbmRlcmluZ0NvbnRleHQyREN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzYsNyArMzYs
NyBAQCBpbmxpbmUgdm9pZCogcm9vdChDdXN0b21QYWludENhbnZhcyogY2FuCiAgICAgcmV0dXJu
IGNhbnZhczsKIH0KIAotYm9vbCBKU1BhaW50UmVuZGVyaW5nQ29udGV4dDJET3duZXI6OmlzUmVh
Y2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2
b2lkKiwgU2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCitib29sIEpT
UGFpbnRSZW5kZXJpbmdDb250ZXh0MkRPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMo
SlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBBYnN0cmFjdFNsb3RWaXNp
dG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQogewogICAgIGlmIChVTkxJS0VMWShy
ZWFzb24pKQogICAgICAgICAqcmVhc29uID0gIkNhbnZhcyBpcyBvcGFxdWUgcm9vdCI7CkBAIC00
NiwxMSArNDYsMTUgQEAgYm9vbCBKU1BhaW50UmVuZGVyaW5nQ29udGV4dDJET3duZXI6OmlzUgog
ICAgIHJldHVybiB2aXNpdG9yLmNvbnRhaW5zT3BhcXVlUm9vdChyb290KTsKIH0KIAotdm9pZCBK
U1BhaW50UmVuZGVyaW5nQ29udGV4dDJEOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90Vmlz
aXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTUGFpbnRS
ZW5kZXJpbmdDb250ZXh0MkQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0
b3IpCiB7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHJvb3QoJndyYXBwZWQoKS5jYW52YXMo
KSkpOwogfQogCit0ZW1wbGF0ZSB2b2lkIEpTUGFpbnRSZW5kZXJpbmdDb250ZXh0MkQ6OnZpc2l0
QWRkaXRpb25hbENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQg
SlNQYWludFJlbmRlcmluZ0NvbnRleHQyRDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZp
c2l0b3ImKTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogI2VuZGlmCiAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUGFpbnRXb3JrbGV0R2xvYmFsU2NvcGVDdXN0b20uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUGFpbnRXb3JrbGV0
R2xvYmFsU2NvcGVDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU1BhaW50V29ya2xldEdsb2JhbFNjb3BlQ3VzdG9tLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0zMSw3ICszMSw4IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3Bh
Y2UgSlNDOwogCi12b2lkIEpTUGFpbnRXb3JrbGV0R2xvYmFsU2NvcGU6OnZpc2l0QWRkaXRpb25h
bENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPgordm9pZCBKU1BhaW50V29ya2xldEdsb2JhbFNjb3BlOjp2aXNpdEFkZGl0aW9uYWxD
aGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2so
d3JhcHBlZCgpLnBhaW50RGVmaW5pdGlvbkxvY2soKSk7CiAgICAgZm9yIChhdXRvJiByZWdpc3Rl
cmVkIDogd3JhcHBlZCgpLnBhaW50RGVmaW5pdGlvbk1hcCgpLnZhbHVlcygpKSB7CkBAIC00MCw1
ICs0MSw5IEBAIHZvaWQgSlNQYWludFdvcmtsZXRHbG9iYWxTY29wZTo6dmlzaXRBZGQKICAgICB9
CiB9CiAKLX0KK3RlbXBsYXRlIHZvaWQgSlNQYWludFdvcmtsZXRHbG9iYWxTY29wZTo6dmlzaXRB
ZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2
b2lkIEpTUGFpbnRXb3JrbGV0R2xvYmFsU2NvcGU6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpT
Qzo6U2xvdFZpc2l0b3ImKTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCiAjZW5kaWYKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUGF5bWVudE1ldGhvZENoYW5nZUV2ZW50
Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1Bh
eW1lbnRNZXRob2RDaGFuZ2VFdmVudEN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUGF5bWVudE1ldGhvZENoYW5nZUV2ZW50Q3VzdG9t
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE4LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC00MSw3ICs0MSw4IEBAIEpTQzo6SlNWYWx1ZSBKU1BheW1lbnRN
ZXRob2RDaGFuZ2VFdmVudDoKICAgICB9KTsKIH0KIAotdm9pZCBKU1BheW1lbnRNZXRob2RDaGFu
Z2VFdmVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRv
cikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTUGF5bWVudE1ldGhvZENoYW5n
ZUV2ZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAg
IFdURjo6c3dpdGNoT24od3JhcHBlZCgpLm1ldGhvZERldGFpbHMoKSwgWyZ2aXNpdG9yXShjb25z
dCBKU1ZhbHVlSW5XcmFwcGVkT2JqZWN0JiBtZXRob2REZXRhaWxzKSB7CiAgICAgICAgIG1ldGhv
ZERldGFpbHMudmlzaXQodmlzaXRvcik7CkBAIC01MSw2ICs1Miw5IEBAIHZvaWQgSlNQYXltZW50
TWV0aG9kQ2hhbmdlRXZlbnQ6OnZpc2l0QWQKICAgICB3cmFwcGVkKCkuY2FjaGVkTWV0aG9kRGV0
YWlscygpLnZpc2l0KHZpc2l0b3IpOwogfQogCit0ZW1wbGF0ZSB2b2lkIEpTUGF5bWVudE1ldGhv
ZENoYW5nZUV2ZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OkFic3RyYWN0U2xvdFZp
c2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNQYXltZW50TWV0aG9kQ2hhbmdlRXZlbnQ6OnZpc2l0
QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImKTsKKwogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKFBBWU1FTlRfUkVRVUVTVCkKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUGF5bWVudFJlc3BvbnNlQ3VzdG9tLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1BheW1lbnRSZXNwb25zZUN1c3Rv
bS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
UGF5bWVudFJlc3BvbnNlQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNywxMSArMzcsMTUgQEAg
SlNDOjpKU1ZhbHVlIEpTUGF5bWVudFJlc3BvbnNlOjpkZXRhaWxzKAogICAgIH0pOwogfQogCi12
b2lkIEpTUGF5bWVudFJlc3BvbnNlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RW
aXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNQYXlt
ZW50UmVzcG9uc2U6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7
CiAgICAgd3JhcHBlZCgpLmNhY2hlZERldGFpbHMoKS52aXNpdCh2aXNpdG9yKTsKIH0KIAordGVt
cGxhdGUgdm9pZCBKU1BheW1lbnRSZXNwb25zZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlND
OjpBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTUGF5bWVudFJlc3BvbnNl
Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJik7CisKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShQQVlNRU5UX1JFUVVFU1QpCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1BlcmZvcm1hbmNlT2JzZXJ2ZXJDdXN0b20u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUGVyZm9ybWFu
Y2VPYnNlcnZlckN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTUGVyZm9ybWFuY2VPYnNlcnZlckN1c3RvbS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOC0yMDIxIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtMzEsMTIgKzMxLDE2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBKU1BlcmZv
cm1hbmNlT2JzZXJ2ZXI6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3Im
IHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1BlcmZvcm1hbmNl
T2JzZXJ2ZXI6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAg
ICAgd3JhcHBlZCgpLmNhbGxiYWNrKCkudmlzaXRKU0Z1bmN0aW9uKHZpc2l0b3IpOwogfQogCi1i
b29sIEpTUGVyZm9ybWFuY2VPYnNlcnZlck93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290
cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIEpTQzo6U2xvdFZpc2l0
b3ImLCBjb25zdCBjaGFyKiogcmVhc29uKQordGVtcGxhdGUgdm9pZCBKU1BlcmZvcm1hbmNlT2Jz
ZXJ2ZXI6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYp
OwordGVtcGxhdGUgdm9pZCBKU1BlcmZvcm1hbmNlT2JzZXJ2ZXI6OnZpc2l0QWRkaXRpb25hbENo
aWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImKTsKKworYm9vbCBKU1BlcmZvcm1hbmNlT2JzZXJ2ZXJP
d25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3du
PiBoYW5kbGUsIHZvaWQqLCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImLCBjb25zdCBjaGFyKiog
cmVhc29uKQogewogICAgIGlmIChVTkxJS0VMWShyZWFzb24pKQogICAgICAgICAqcmVhc29uID0g
IlJlZ2lzdGVyZWQgUGVyZm9ybWFuY2VPYnNlcnZlciBjYWxsYmFjayI7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU1BvcFN0YXRlRXZlbnRDdXN0b20uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUG9wU3RhdGVFdmVudEN1c3RvbS5jcHAJ
KHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUG9wU3Rh
dGVFdmVudEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKgogICog
Q29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQpAQCAtOTAsOSArOTEsMTMgQEAgSlNWYWx1ZSBK
U1BvcFN0YXRlRXZlbnQ6OnN0YXRlKEpTR2xvYmFsTwogICAgIHJldHVybiBjYWNoZVN0YXRlKHJl
c3VsdCk7CiB9CiAKLXZvaWQgSlNQb3BTdGF0ZUV2ZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJl
bihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4K
K3ZvaWQgSlNQb3BTdGF0ZUV2ZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2
aXNpdG9yKQogewogICAgIHdyYXBwZWQoKS5zdGF0ZSgpLnZpc2l0KHZpc2l0b3IpOwogfQogCit0
ZW1wbGF0ZSB2b2lkIEpTUG9wU3RhdGVFdmVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlND
OjpBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTUG9wU3RhdGVFdmVudDo6
dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYpOworCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1Byb21pc2VS
ZWplY3Rpb25FdmVudEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNQcm9taXNlUmVqZWN0aW9uRXZlbnRDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI4
MzApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1Byb21pc2VSZWplY3Rpb25FdmVu
dEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJp
Z2h0IChDKSAyMDE4IFl1c3VrZSBTdXp1a2kgPHl1c3VrZXN1enVraUBzbG93c3RhcnQub3JnPi4K
KyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMyLDkgKzMzLDEzIEBACiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotdm9pZCBKU1Byb21pc2VSZWplY3Rpb25FdmVudDo6dmlzaXRBZGRp
dGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVu
YW1lIFZpc2l0b3I+Cit2b2lkIEpTUHJvbWlzZVJlamVjdGlvbkV2ZW50Ojp2aXNpdEFkZGl0aW9u
YWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHdyYXBwZWQoKS5yZWFzb24oKS52
aXNpdCh2aXNpdG9yKTsKIH0KIAordGVtcGxhdGUgdm9pZCBKU1Byb21pc2VSZWplY3Rpb25FdmVu
dDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0
ZW1wbGF0ZSB2b2lkIEpTUHJvbWlzZVJlamVjdGlvbkV2ZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGls
ZHJlbihKU0M6OlNsb3RWaXNpdG9yJik7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUmVzaXplT2JzZXJ2ZXJDdXN0b20uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUmVzaXplT2JzZXJ2ZXJD
dXN0b20uY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU1Jlc2l6ZU9ic2VydmVyQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYg
QEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMjAgSWdhbGlhIFMuTC4KKyAqIENvcHlyaWdodCAo
QykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTMwLDExICszMSwxNSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLXZvaWQgSlNSZXNpemVPYnNlcnZlcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpT
bG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpT
UmVzaXplT2JzZXJ2ZXI6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3Ip
CiB7CiAgICAgUmVzaXplT2JzZXJ2ZXJDYWxsYmFjayogY2FsbGJhY2sgPSB3cmFwcGVkKCkuY2Fs
bGJhY2tDb25jdXJyZW50bHkoKTsKICAgICBpZiAoY2FsbGJhY2spCiAgICAgICAgIGNhbGxiYWNr
LT52aXNpdEpTRnVuY3Rpb24odmlzaXRvcik7CiB9CiAKLX0KK3RlbXBsYXRlIHZvaWQgSlNSZXNp
emVPYnNlcnZlcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpBYnN0cmFjdFNsb3RWaXNp
dG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTUmVzaXplT2JzZXJ2ZXI6OnZpc2l0QWRkaXRpb25hbENo
aWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImKTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNSZXNpemVPYnNlcnZlckVudHJ5Q3VzdG9t
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1Jlc2l6ZU9i
c2VydmVyRW50cnlDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU1Jlc2l6ZU9ic2VydmVyRW50cnlDdXN0b20uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxOSBJZ2FsaWEgUy5M
LgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzAsMTAgKzMxLDE0IEBACiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBKU1Jlc2l6ZU9ic2VydmVyRW50cnk6OnZpc2l0QWRk
aXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBl
bmFtZSBWaXNpdG9yPgordm9pZCBKU1Jlc2l6ZU9ic2VydmVyRW50cnk6OnZpc2l0QWRkaXRpb25h
bENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290
KHJvb3Qod3JhcHBlZCgpLnRhcmdldCgpKSk7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHdy
YXBwZWQoKS5jb250ZW50UmVjdCgpKTsKIH0KIAotfQordGVtcGxhdGUgdm9pZCBKU1Jlc2l6ZU9i
c2VydmVyRW50cnk6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6QWJzdHJhY3RTbG90Vmlz
aXRvciYpOwordGVtcGxhdGUgdm9pZCBKU1Jlc2l6ZU9ic2VydmVyRW50cnk6OnZpc2l0QWRkaXRp
b25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImKTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNTVkdWaWV3U3BlY0N1c3RvbS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNTVkdWaWV3U3Bl
Y0N1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTU1ZHVmlld1NwZWNDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMwLDEwICszMCwxNCBA
QAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgSlNTVkdWaWV3U3BlYzo6dmlzaXRBZGRp
dGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVu
YW1lIFZpc2l0b3I+Cit2b2lkIEpTU1ZHVmlld1NwZWM6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVu
KFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgQVNTRVJUKHdyYXBwZWQoKS5jb250ZXh0RWxlbWVu
dENvbmN1cnJlbnRseSgpLmdldCgpKTsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qocm9vdCh3
cmFwcGVkKCkuY29udGV4dEVsZW1lbnRDb25jdXJyZW50bHkoKS5nZXQoKSkpOwogfQogCi19Cit0
ZW1wbGF0ZSB2b2lkIEpTU1ZHVmlld1NwZWM6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6
QWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU1NWR1ZpZXdTcGVjOjp2aXNp
dEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJik7CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU2VydmljZVdvcmtl
ckdsb2JhbFNjb3BlQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU1NlcnZpY2VXb3JrZXJHbG9iYWxTY29wZUN1c3RvbS5jcHAJKHJldmlzaW9uIDI3
MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU2VydmljZVdvcmtlckdsb2Jh
bFNjb3BlQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNCwxMiArMzQsMTYgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCi12b2lkIEpTU2VydmljZVdvcmtl
ckdsb2JhbFNjb3BlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRv
cikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTU2VydmljZVdvcmtlckdsb2Jh
bFNjb3BlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAg
IHZpc2l0b3IuYWRkT3BhcXVlUm9vdCgmd3JhcHBlZCgpLmNsaWVudHMoKSk7CiAgICAgdmlzaXRv
ci5hZGRPcGFxdWVSb290KCZ3cmFwcGVkKCkucmVnaXN0cmF0aW9uKCkpOwogfQogCit0ZW1wbGF0
ZSB2b2lkIEpTU2VydmljZVdvcmtlckdsb2JhbFNjb3BlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJl
bihBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTU2VydmljZVdvcmtlckds
b2JhbFNjb3BlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYpOworCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNTdGF0aWNSYW5nZUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNTdGF0aWNSYW5nZUN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjgzMCkK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU3RhdGljUmFuZ2VDdXN0b20uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zMCw5ICszMCwxMyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
LXZvaWQgSlNTdGF0aWNSYW5nZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90Vmlz
aXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTU3RhdGlj
UmFuZ2U6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAg
d3JhcHBlZCgpLnZpc2l0Tm9kZXNDb25jdXJyZW50bHkodmlzaXRvcik7CiB9CiAKK3RlbXBsYXRl
IHZvaWQgSlNTdGF0aWNSYW5nZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpBYnN0cmFj
dFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTU3RhdGljUmFuZ2U6OnZpc2l0QWRkaXRp
b25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImKTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNTdHlsZVNoZWV0Q3VzdG9tLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1N0eWxlU2hlZXRD
dXN0b20uY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU1N0eWxlU2hlZXRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMwLDEx
ICszMCwxNSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgSlNTdHlsZVNoZWV0Ojp2
aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxh
dGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNTdHlsZVNoZWV0Ojp2aXNpdEFkZGl0aW9uYWxD
aGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChy
b290KCZ3cmFwcGVkKCkpKTsKIH0KIAordGVtcGxhdGUgdm9pZCBKU1N0eWxlU2hlZXQ6OnZpc2l0
QWRkaXRpb25hbENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQg
SlNTdHlsZVNoZWV0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYpOworCiBK
U0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNET01H
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmPFN0eWxlU2hlZXQ+JiYgc3R5bGVTaGVldCkK
IHsKICAgICBpZiAoc3R5bGVTaGVldC0+aXNDU1NTdHlsZVNoZWV0KCkpCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU1RleHRUcmFja0N1ZUN1c3RvbS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNUZXh0VHJhY2tDdWVDdXN0b20uY3BwCShy
ZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1RleHRUcmFj
a0N1ZUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzgsNyArMzgsNyBAQAogbmFtZXNwYWNlIFdl
YkNvcmUgewogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAotYm9vbCBKU1RleHRUcmFja0N1ZU93bmVy
Ojppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhh
bmRsZSwgdm9pZCosIFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQor
Ym9vbCBKU1RleHRUcmFja0N1ZU93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6
OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIEFic3RyYWN0U2xvdFZpc2l0b3Im
IHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCiB7CiAgICAgSlNUZXh0VHJhY2tDdWUqIGpz
VGV4dFRyYWNrQ3VlID0ganNDYXN0PEpTVGV4dFRyYWNrQ3VlKj4oaGFuZGxlLnNsb3QoKS0+YXND
ZWxsKCkpOwogICAgIFRleHRUcmFja0N1ZSYgdGV4dFRyYWNrQ3VlID0ganNUZXh0VHJhY2tDdWUt
PndyYXBwZWQoKTsKQEAgLTgyLDEyICs4MiwxNiBAQCBKU1ZhbHVlIHRvSlMoSlNHbG9iYWxPYmpl
Y3QqIGxleGljYWxHbG9iCiAgICAgcmV0dXJuIHdyYXAobGV4aWNhbEdsb2JhbE9iamVjdCwgZ2xv
YmFsT2JqZWN0LCBjdWUpOwogfQogCi12b2lkIEpTVGV4dFRyYWNrQ3VlOjp2aXNpdEFkZGl0aW9u
YWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0
b3I+Cit2b2lkIEpTVGV4dFRyYWNrQ3VlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9y
JiB2aXNpdG9yKQogewogICAgIGlmIChUZXh0VHJhY2sqIHRleHRUcmFjayA9IHdyYXBwZWQoKS50
cmFjaygpKQogICAgICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qocm9vdCh0ZXh0VHJhY2spKTsK
IH0KIAordGVtcGxhdGUgdm9pZCBKU1RleHRUcmFja0N1ZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRy
ZW4oQWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU1RleHRUcmFja0N1ZTo6
dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKKwogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQogCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVGV4
dFRyYWNrQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU1RleHRUcmFja0N1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTVGV4dFRyYWNrQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNiwx
MSArMzYsMTUgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAK
LXZvaWQgSlNUZXh0VHJhY2s6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNUZXh0VHJhY2s6OnZp
c2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgdmlzaXRvci5h
ZGRPcGFxdWVSb290KHJvb3QoJndyYXBwZWQoKSkpOwogfQogCit0ZW1wbGF0ZSB2b2lkIEpTVGV4
dFRyYWNrOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0
ZW1wbGF0ZSB2b2lkIEpTVGV4dFRyYWNrOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90Vmlz
aXRvciYpOworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZgpJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNUZXh0VHJhY2tMaXN0Q3VzdG9tLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1RleHRUcmFja0xpc3RDdXN0b20uY3Bw
CShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1RleHRU
cmFja0xpc3RDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTEtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM2LDExICszNiwxNSBAQAogbmFtZXNw
YWNlIFdlYkNvcmUgewogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAotdm9pZCBKU1RleHRUcmFja0xp
c3Q6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0
ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1RleHRUcmFja0xpc3Q6OnZpc2l0QWRk
aXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgdmlzaXRvci5hZGRPcGFx
dWVSb290KHJvb3Qod3JhcHBlZCgpLmVsZW1lbnQoKSkpOwogfQogICAgIAordGVtcGxhdGUgdm9p
ZCBKU1RleHRUcmFja0xpc3Q6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEFic3RyYWN0U2xvdFZp
c2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNUZXh0VHJhY2tMaXN0Ojp2aXNpdEFkZGl0aW9uYWxD
aGlsZHJlbihTbG90VmlzaXRvciYpOworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRp
ZgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNUcmVlV2Fsa2VyQ3VzdG9tLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1RyZWVXYWxrZXJD
dXN0b20uY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU1RyZWVXYWxrZXJDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI1LDEwICsyNSwxNCBAQAog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgSlNUcmVlV2Fsa2VyOjp2aXNpdEFkZGl0aW9u
YWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUg
VmlzaXRvcj4KK3ZvaWQgSlNUcmVlV2Fsa2VyOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNp
dG9yJiB2aXNpdG9yKQogewogICAgIGlmIChOb2RlRmlsdGVyKiBmaWx0ZXIgPSB3cmFwcGVkKCku
ZmlsdGVyKCkpCiAgICAgICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChmaWx0ZXIpOwogfQogCi19
Cit0ZW1wbGF0ZSB2b2lkIEpTVHJlZVdhbGtlcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlND
OjpBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTVHJlZVdhbGtlcjo6dmlz
aXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYpOworCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1VuZG9JdGVtQ3Vz
dG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1VuZG9J
dGVtQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNVbmRvSXRlbUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjksMTMgKzI5LDE3IEBA
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBKU1VuZG9JdGVtOjp2aXNpdEFkZGl0aW9u
YWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUg
VmlzaXRvcj4KK3ZvaWQgSlNVbmRvSXRlbTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRv
ciYgdmlzaXRvcikKIHsKICAgICB3cmFwcGVkKCkudW5kb0hhbmRsZXIoKS52aXNpdEpTRnVuY3Rp
b24odmlzaXRvcik7CiAgICAgd3JhcHBlZCgpLnJlZG9IYW5kbGVyKCkudmlzaXRKU0Z1bmN0aW9u
KHZpc2l0b3IpOwogfQogCi1ib29sIEpTVW5kb0l0ZW1Pd25lcjo6aXNSZWFjaGFibGVGcm9tT3Bh
cXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBKU0M6OlNs
b3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQordGVtcGxhdGUgdm9pZCBK
U1VuZG9JdGVtOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OkFic3RyYWN0U2xvdFZpc2l0
b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNVbmRvSXRlbTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4o
SlNDOjpTbG90VmlzaXRvciYpOworCitib29sIEpTVW5kb0l0ZW1Pd25lcjo6aXNSZWFjaGFibGVG
cm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBK
U0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCiB7
CiAgICAgaWYgKFVOTElLRUxZKHJlYXNvbikpCiAgICAgICAgICpyZWFzb24gPSAiRG9jdW1lbnQg
aXMgYW4gb3BhcXVlIHJvb3QuIjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
VmFsdWVJbldyYXBwZWRPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU1ZhbHVlSW5XcmFwcGVkT2JqZWN0LmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVmFsdWVJbldyYXBwZWRPYmplY3QuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtNDAsNyArNDAsNyBAQCBwdWJsaWM6CiAgICAgb3BlcmF0b3IgSlNDOjpKU1ZhbHVlKCkg
Y29uc3Q7CiAgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0OwogICAgIEpTVmFsdWVJ
bldyYXBwZWRPYmplY3QmIG9wZXJhdG9yPShjb25zdCBKU1ZhbHVlSW5XcmFwcGVkT2JqZWN0JiBv
dGhlcik7Ci0gICAgdm9pZCB2aXNpdChKU0M6OlNsb3RWaXNpdG9yJikgY29uc3Q7CisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCB2aXNpdChWaXNpdG9yJikgY29uc3Q7CiAgICAg
dm9pZCBjbGVhcigpOwogCiBwcml2YXRlOgpAQCAtOTgsNyArOTgsOCBAQCBpbmxpbmUgSlNWYWx1
ZUluV3JhcHBlZE9iamVjdCYgSlNWYWx1ZUluCiAgICAgcmV0dXJuICp0aGlzOwogfQogCi1pbmxp
bmUgdm9pZCBKU1ZhbHVlSW5XcmFwcGVkT2JqZWN0Ojp2aXNpdChKU0M6OlNsb3RWaXNpdG9yJiB2
aXNpdG9yKSBjb25zdAordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK2lubGluZSB2b2lkIEpT
VmFsdWVJbldyYXBwZWRPYmplY3Q6OnZpc2l0KFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0CiB7CiAg
ICAgcmV0dXJuIFdURjo6c3dpdGNoT24obV92YWx1ZSwgW10gKEpTQzo6SlNWYWx1ZSkgewogICAg
ICAgICAvLyBOb3RoaW5nIHRvIHZpc2l0LgpAQCAtMTA3LDYgKzEwOCw5IEBAIGlubGluZSB2b2lk
IEpTVmFsdWVJbldyYXBwZWRPYmplY3Q6OnZpc2kKICAgICB9KTsKIH0KIAordGVtcGxhdGUgdm9p
ZCBKU1ZhbHVlSW5XcmFwcGVkT2JqZWN0Ojp2aXNpdChKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3Im
KSBjb25zdDsKK3RlbXBsYXRlIHZvaWQgSlNWYWx1ZUluV3JhcHBlZE9iamVjdDo6dmlzaXQoSlND
OjpTbG90VmlzaXRvciYpIGNvbnN0OworCiBpbmxpbmUgdm9pZCBKU1ZhbHVlSW5XcmFwcGVkT2Jq
ZWN0OjpjbGVhcigpCiB7CiAgICAgV1RGOjpzd2l0Y2hPbihtX3ZhbHVlLCBbXSAoV2VhayYgdmFs
dWUpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVmlkZW9UcmFja0N1c3Rv
bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNWaWRlb1Ry
YWNrQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNWaWRlb1RyYWNrQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNSwxMSArMzUsMTUg
QEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKLXZvaWQgSlNW
aWRlb1RyYWNrOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikK
K3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTVmlkZW9UcmFjazo6dmlzaXRBZGRp
dGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB2aXNpdG9yLmFkZE9wYXF1
ZVJvb3Qocm9vdCgmd3JhcHBlZCgpKSk7CiB9CiAKK3RlbXBsYXRlIHZvaWQgSlNWaWRlb1RyYWNr
Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3Rl
bXBsYXRlIHZvaWQgSlNWaWRlb1RyYWNrOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNs
b3RWaXNpdG9yJik7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1ZpZGVvVHJhY2tMaXN0Q3VzdG9tLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1ZpZGVvVHJhY2tMaXN0Q3Vz
dG9tLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNWaWRlb1RyYWNrTGlzdEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzUsMTEgKzM1LDE1IEBA
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCi12b2lkIEpTVmlk
ZW9UcmFja0xpc3Q6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9y
KQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNWaWRlb1RyYWNrTGlzdDo6dmlz
aXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB2aXNpdG9yLmFk
ZE9wYXF1ZVJvb3Qocm9vdCh3cmFwcGVkKCkuZWxlbWVudCgpKSk7CiB9CiAKK3RlbXBsYXRlIHZv
aWQgSlNWaWRlb1RyYWNrTGlzdDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oQWJzdHJhY3RTbG90
VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU1ZpZGVvVHJhY2tMaXN0Ojp2aXNpdEFkZGl0aW9u
YWxDaGlsZHJlbihTbG90VmlzaXRvciYpOworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNl
bmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJHTDJSZW5kZXJpbmdD
b250ZXh0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU1dlYkdMMlJlbmRlcmluZ0NvbnRleHRDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI4MzApCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYkdMMlJlbmRlcmluZ0NvbnRleHRDdXN0
b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxNS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzMsMTIgKzMzLDE2IEBACiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCi12b2lkIEpTV2ViR0wyUmVuZGVyaW5nQ29u
dGV4dDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1w
bGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1dlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OnZp
c2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgdmlzaXRvci5h
ZGRPcGFxdWVSb290KCZ3cmFwcGVkKCkpOwogICAgIHdyYXBwZWQoKS5hZGRNZW1iZXJzVG9PcGFx
dWVSb290cyh2aXNpdG9yKTsKIH0KIAordGVtcGxhdGUgdm9pZCBKU1dlYkdMMlJlbmRlcmluZ0Nv
bnRleHQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYp
OwordGVtcGxhdGUgdm9pZCBKU1dlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OnZpc2l0QWRkaXRpb25h
bENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImKTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQog
CiAjZW5kaWYgLy8gRU5BQkxFKFdFQkdMKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViR0xSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcAko
cmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJHTFJl
bmRlcmluZ0NvbnRleHRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMzLDEyICszMywxNiBAQAog
bmFtZXNwYWNlIFdlYkNvcmUgewogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAotdm9pZCBKU1dlYkdM
UmVuZGVyaW5nQ29udGV4dDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZp
c2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1dlYkdMUmVuZGVyaW5n
Q29udGV4dDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAg
ICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QoJndyYXBwZWQoKSk7CiAgICAgd3JhcHBlZCgpLmFkZE1l
bWJlcnNUb09wYXF1ZVJvb3RzKHZpc2l0b3IpOwogfQogCit0ZW1wbGF0ZSB2b2lkIEpTV2ViR0xS
ZW5kZXJpbmdDb250ZXh0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihBYnN0cmFjdFNsb3RWaXNp
dG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2aXNpdEFkZGl0
aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYpOworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAK
ICNlbmRpZiAvLyBFTkFCTEUoV0VCR0wpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU1dvcmtlckdsb2JhbFNjb3BlQmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNXb3JrZXJHbG9iYWxTY29wZUJhc2UuY3BwCShyZXZpc2lvbiAyNzI4
MzApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckdsb2JhbFNjb3BlQmFz
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDA4LCAyMDA5LCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAwOC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
IENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dApAQCAtOTIsNyArOTIsOCBAQCB2b2lkIEpTV29ya2VyR2xvYmFsU2NvcGVC
YXNlOjpmaW5pc2hDcmVhCiAgICAgQVNTRVJUKGluaGVyaXRzKHZtLCBpbmZvKCkpKTsKIH0KIAot
dm9pZCBKU1dvcmtlckdsb2JhbFNjb3BlQmFzZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGws
IFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQg
SlNXb3JrZXJHbG9iYWxTY29wZUJhc2U6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwg
VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU1dvcmtlckdsb2JhbFNjb3BlQmFzZSogdGhpc09i
amVjdCA9IGpzQ2FzdDxKU1dvcmtlckdsb2JhbFNjb3BlQmFzZSo+KGNlbGwpOwogICAgIEFTU0VS
VF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTEwMCw2ICsxMDEs
OCBAQCB2b2lkIEpTV29ya2VyR2xvYmFsU2NvcGVCYXNlOjp2aXNpdENoaWxkCiAgICAgdmlzaXRv
ci5hcHBlbmQodGhpc09iamVjdC0+bV9wcm94eSk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJF
TihKU1dvcmtlckdsb2JhbFNjb3BlQmFzZSk7CisKIHZvaWQgSlNXb3JrZXJHbG9iYWxTY29wZUJh
c2U6OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQogewogICAgIHN0YXRpY19jYXN0PEpTV29ya2VyR2xv
YmFsU2NvcGVCYXNlKj4oY2VsbCktPkpTV29ya2VyR2xvYmFsU2NvcGVCYXNlOjp+SlNXb3JrZXJH
bG9iYWxTY29wZUJhc2UoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29y
a2VyR2xvYmFsU2NvcGVCYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNXb3JrZXJHbG9iYWxTY29wZUJhc2UuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrZXJHbG9iYWxTY29wZUJhc2UuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIw
MjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC03OSw3ICs3OSw3IEBAIHByb3RlY3RlZDoKICAgICBKU1dvcmtlckdsb2Jh
bFNjb3BlQmFzZShKU0M6OlZNJiwgSlNDOjpTdHJ1Y3R1cmUqLCBSZWZQdHI8V29ya2VyR2xvYmFs
U2NvcGU+JiYpOwogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYsIEpTQzo6SlNQcm94
eSopOwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0M6OkpTQ2VsbCosIEpTQzo6
U2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiBwcml2YXRlOgog
ICAgIFJlZlB0cjxXb3JrZXJHbG9iYWxTY29wZT4gbV93cmFwcGVkOwpJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNXb3JrZXJHbG9iYWxTY29wZUN1c3RvbS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrZXJHbG9iYWxTY29wZUN1c3Rv
bS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
V29ya2VyR2xvYmFsU2NvcGVDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOC0yMDA5LCAyMDExLCAyMDE2IEFwcGxlIEluYy4g
QWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDIxIEFwcGxlIElu
Yy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtMzMsNyArMzMsOCBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogdXNpbmcgbmFtZXNwYWNlIEpT
QzsKIAotdm9pZCBKU1dvcmtlckdsb2JhbFNjb3BlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihT
bG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpT
V29ya2VyR2xvYmFsU2NvcGU6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0
b3IpCiB7CiAgICAgaWYgKGF1dG8qIGxvY2F0aW9uID0gd3JhcHBlZCgpLm9wdGlvbmFsTG9jYXRp
b24oKSkKICAgICAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KGxvY2F0aW9uKTsKQEAgLTQ4LDYg
KzQ5LDkgQEAgdm9pZCBKU1dvcmtlckdsb2JhbFNjb3BlOjp2aXNpdEFkZGl0aW9uYQogICAgIHdy
YXBwZWQoKS52aXNpdEpTRXZlbnRMaXN0ZW5lcnModmlzaXRvcik7CiB9CiAKK3RlbXBsYXRlIHZv
aWQgSlNXb3JrZXJHbG9iYWxTY29wZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oQWJzdHJhY3RT
bG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU1dvcmtlckdsb2JhbFNjb3BlOjp2aXNpdEFk
ZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYpOworCiBKU1ZhbHVlIEpTV29ya2VyR2xvYmFs
U2NvcGU6OnF1ZXVlTWljcm90YXNrKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0
LCBDYWxsRnJhbWUmIGNhbGxGcmFtZSkKIHsKICAgICBWTSYgdm0gPSBsZXhpY2FsR2xvYmFsT2Jq
ZWN0LnZtKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlck5hdmln
YXRvckN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNXb3JrZXJOYXZpZ2F0b3JDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlck5hdmlnYXRvckN1c3RvbS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIxIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMjgsOSArMjgsMTMgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIEpTV29y
a2VyTmF2aWdhdG9yOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2
aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNXb3JrZXJOYXZpZ2F0
b3I6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgdmlz
aXRvci5hZGRPcGFxdWVSb290KHN0YXRpY19jYXN0PE5hdmlnYXRvckJhc2UqPigmd3JhcHBlZCgp
KSk7CiB9CiAKLX0KK3RlbXBsYXRlIHZvaWQgSlNXb3JrZXJOYXZpZ2F0b3I6OnZpc2l0QWRkaXRp
b25hbENoaWxkcmVuKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBK
U1dvcmtlck5hdmlnYXRvcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRv
ciYpOworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU1dvcmtsZXRHbG9iYWxTY29wZUJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2xldEdsb2JhbFNjb3BlQmFzZS5jcHAJKHJldmlz
aW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2xldEdsb2Jh
bFNjb3BlQmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxOC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODIsNyArODIsOCBAQCB2b2lkIEpTV29ya2xl
dEdsb2JhbFNjb3BlQmFzZTo6ZmluaXNoQ3JlCiAgICAgQVNTRVJUKGluaGVyaXRzKHZtLCBpbmZv
KCkpKTsKIH0KIAotdm9pZCBKU1dvcmtsZXRHbG9iYWxTY29wZUJhc2U6OnZpc2l0Q2hpbGRyZW4o
SlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZp
c2l0b3I+Cit2b2lkIEpTV29ya2xldEdsb2JhbFNjb3BlQmFzZTo6dmlzaXRDaGlsZHJlbkltcGwo
SlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGF1dG8qIHRoaXNPYmplY3Qg
PSBqc0Nhc3Q8SlNXb3JrbGV0R2xvYmFsU2NvcGVCYXNlKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dD
X09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtOTAsNiArOTEsOCBAQCB2
b2lkIEpTV29ya2xldEdsb2JhbFNjb3BlQmFzZTo6dmlzaXRDaGlsCiAgICAgdmlzaXRvci5hcHBl
bmQodGhpc09iamVjdC0+bV9wcm94eSk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU1dv
cmtsZXRHbG9iYWxTY29wZUJhc2UpOworCiB2b2lkIEpTV29ya2xldEdsb2JhbFNjb3BlQmFzZTo6
ZGVzdHJveShKU0NlbGwqIGNlbGwpCiB7CiAgICAgc3RhdGljX2Nhc3Q8SlNXb3JrbGV0R2xvYmFs
U2NvcGVCYXNlKj4oY2VsbCktPkpTV29ya2xldEdsb2JhbFNjb3BlQmFzZTo6fkpTV29ya2xldEds
b2JhbFNjb3BlQmFzZSgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXb3Jr
bGV0R2xvYmFsU2NvcGVCYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNXb3JrbGV0R2xvYmFsU2NvcGVCYXNlLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2xldEdsb2JhbFNjb3BlQmFzZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTY3LDcgKzY3LDcgQEAgcHJvdGVjdGVkOgogICAgIEpTV29ya2xldEdsb2JhbFNj
b3BlQmFzZShKU0M6OlZNJiwgSlNDOjpTdHJ1Y3R1cmUqLCBSZWZQdHI8V29ya2xldEdsb2JhbFNj
b3BlPiYmKTsKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mLCBKU0M6OkpTUHJveHkq
KTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDOjpKU0NlbGwqLCBKU0M6OlNs
b3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogcHJpdmF0ZToKICAg
ICBSZWZQdHI8V29ya2xldEdsb2JhbFNjb3BlPiBtX3dyYXBwZWQ7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU1hNTEh0dHBSZXF1ZXN0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1hNTEh0dHBSZXF1ZXN0Q3VzdG9tLmNwcAko
cmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNYTUxIdHRw
UmVxdWVzdEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDEsNyArNDEsOCBAQAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAotdm9pZCBKU1hNTEh0dHBS
ZXF1ZXN0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3Rl
bXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTWE1MSHR0cFJlcXVlc3Q6OnZpc2l0QWRk
aXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgaWYgKGF1dG8qIHVwbG9h
ZCA9IHdyYXBwZWQoKS5vcHRpb25hbFVwbG9hZCgpKQogICAgICAgICB2aXNpdG9yLmFkZE9wYXF1
ZVJvb3QodXBsb2FkKTsKQEAgLTUwLDYgKzUxLDkgQEAgdm9pZCBKU1hNTEh0dHBSZXF1ZXN0Ojp2
aXNpdEFkZGl0aW9uYWxDaAogICAgICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QocmVzcG9uc2VE
b2N1bWVudCk7CiB9CiAKK3RlbXBsYXRlIHZvaWQgSlNYTUxIdHRwUmVxdWVzdDo6dmlzaXRBZGRp
dGlvbmFsQ2hpbGRyZW4oQWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU1hN
TEh0dHBSZXF1ZXN0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYpOworCiBK
U1ZhbHVlIEpTWE1MSHR0cFJlcXVlc3Q6OnJlc3BvbnNlKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2Fs
R2xvYmFsT2JqZWN0KSBjb25zdAogewogICAgIGF1dG8gY2FjaGVSZXN1bHQgPSBbJl0gKEpTVmFs
dWUgdmFsdWUpIC0+IEpTVmFsdWUgewpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNYUGF0aFJlc3VsdEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNYUGF0aFJlc3VsdEN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTWFBhdGhSZXN1bHRDdXN0b20uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxMSBKdWxpZW4g
Q2hhZmZyYWl4IDxqY2hhZmZyYWl4QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0zMSw3ICszMiw4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBK
U1hQYXRoUmVzdWx0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2
aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNYUGF0aFJlc3VsdDo6
dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBhdXRvJiB2
YWx1ZSA9IHdyYXBwZWQoKS52YWx1ZSgpOwogICAgIGlmICh2YWx1ZS5pc05vZGVTZXQoKSkgewpA
QCAtNDEsNCArNDMsNyBAQCB2b2lkIEpTWFBhdGhSZXN1bHQ6OnZpc2l0QWRkaXRpb25hbENoaWxk
CiAgICAgfQogfQogCit0ZW1wbGF0ZSB2b2lkIEpTWFBhdGhSZXN1bHQ6OnZpc2l0QWRkaXRpb25h
bENoaWxkcmVuKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU1hQ
YXRoUmVzdWx0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJik7CisK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L1dlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvV2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyLmNwcAkocmV2aXNp
b24gMjcyODMwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV2ViQ29yZVR5cGVkQXJy
YXlDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01Niw3ICs1Niw3IEBAIGJvb2wgV2ViQ29y
ZVR5cGVkQXJyYXlDb250cm9sbGVyOjppc0F0b20KICAgICByZXR1cm4gbV9hbGxvd0F0b21pY3NX
YWl0OwogfQogCi1ib29sIFdlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlcjo6SlNBcnJheUJ1ZmZl
ck93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25v
d24+IGhhbmRsZSwgdm9pZCosIEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIq
KiByZWFzb24pCitib29sIFdlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlcjo6SlNBcnJheUJ1ZmZl
ck93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25v
d24+IGhhbmRsZSwgdm9pZCosIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvciwgY29u
c3QgY2hhcioqIHJlYXNvbikKIHsKICAgICBpZiAoVU5MSUtFTFkocmVhc29uKSkKICAgICAgICAg
KnJlYXNvbiA9ICJBcnJheUJ1ZmZlciBpcyBvcGFxdWUgcm9vdCI7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xs
ZXIuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV2Vi
Q29yZVR5cGVkQXJyYXlDb250cm9sbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDgsNyArNDgsNyBAQCBw
dWJsaWM6CiBwcml2YXRlOgogICAgIGNsYXNzIEpTQXJyYXlCdWZmZXJPd25lciA6IHB1YmxpYyBK
U0M6OldlYWtIYW5kbGVPd25lciB7CiAgICAgcHVibGljOgotICAgICAgICBib29sIGlzUmVhY2hh
YmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRl
eHQsIEpTQzo6U2xvdFZpc2l0b3ImLCBjb25zdCBjaGFyKiopIG92ZXJyaWRlOworICAgICAgICBi
b29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4s
IHZvaWQqIGNvbnRleHQsIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYsIGNvbnN0IGNoYXIqKikg
b3ZlcnJpZGU7CiAgICAgICAgIHZvaWQgZmluYWxpemUoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3du
Piwgdm9pZCogY29udGV4dCkgb3ZlcnJpZGU7CiAgICAgfTsKIApJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0JKHJldmlzaW9u
IDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRv
ckpTLnBtCSh3b3JraW5nIGNvcHkpCkBAIC0zLDcgKzMsNyBAQAogIyBDb3B5cmlnaHQgKEMpIDIw
MDYgQW5kZXJzIENhcmxzc29uIDxhbmRlcnNjYUBtYWMuY29tPgogIyBDb3B5cmlnaHQgKEMpIDIw
MDYsIDIwMDcgU2FtdWVsIFdlaW5pZyA8c2FtQHdlYmtpdC5vcmc+CiAjIENvcHlyaWdodCAoQykg
MjAwNiBBbGV4ZXkgUHJvc2t1cnlha292IDxhcEB3ZWJraXQub3JnPgotIyBDb3B5cmlnaHQgKEMp
IDIwMDYtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjIENvcHlyaWdodCAo
QykgMjAwNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICMgQ29weXJpZ2h0
IChDKSAyMDA5IENhbWVyb24gTWNDb3JtYWNrIDxjYW1AbWNjLmlkLmF1PgogIyBDb3B5cmlnaHQg
KEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAjIENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNp
ZGlhcnkoLWllcykKQEAgLTMwNzgsOCArMzA3OCw4IEBAIHN1YiBHZW5lcmF0ZUhlYWRlcgogCiAg
ICAgIyB2aXNpdCBmdW5jdGlvbgogICAgIGlmICgkbmVlZHNWaXNpdENoaWxkcmVuKSB7Ci0gICAg
ICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihK
U0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJik7XG4iKTsKLSAgICAgICAgcHVzaChAaGVhZGVyQ29u
dGVudCwgIiAgICB2b2lkIHZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3Im
KTtcbiIpIGlmICRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+e0pTQ3VzdG9tTWFya0Z1
bmN0aW9ufTsKKyAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICBERUNMQVJFX1ZJU0lU
X0NISUxEUkVOO1xuIik7CisgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgdGVtcGxh
dGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCB2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9y
Jik7XG4iKSBpZiAkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntKU0N1c3RvbU1hcmtG
dW5jdGlvbn07CiAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJcbiIpOwogCiAgICAgICAg
IGlmICgkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntKU0N1c3RvbU1hcmtGdW5jdGlv
bn0pIHsKQEAgLTMwOTQsNyArMzA5NCw3IEBAIHN1YiBHZW5lcmF0ZUhlYWRlcgogICAgICAgICAg
ICAgIyB0aGF0IHRoZSBHQyBjYWxscyB0byBhc2sgYW4gb2JqZWN0IGlzIGl0IHdvdWxkIGxpa2Ug
dG8gbWFyayBhbnl0aGluZyBlbHNlIGFmdGVyIHRoZQogICAgICAgICAgICAgIyBwcm9ncmFtIHJl
c3VtZWQgc2luY2UgdGhlIGxhc3QgY2FsbCB0byB2aXNpdENoaWxkcmVuIG9yIHZpc2l0T3V0cHV0
Q29uc3RyYWludHMuIFNpbmNlCiAgICAgICAgICAgICAjIHRoaXMganVzdCBjYWxscyB2aXNpdEFk
ZGl0aW9uYWxDaGlsZHJlbiwgeW91IHVzdWFsbHkgZG9uJ3QgaGF2ZSB0byB3b3JyeSBhYm91dCB0
aGlzLgotICAgICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICBzdGF0aWMgdm9pZCB2
aXNpdE91dHB1dENvbnN0cmFpbnRzKEpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKTtcbiIpOwor
ICAgICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICBzdGF0aWMgdm9pZCB2aXNpdE91
dHB1dENvbnN0cmFpbnRzKEpTQ2VsbCosIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpO1xuIik7
CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTMyMTUsNyArMzIxNSw3IEBAIHN1YiBHZW5lcmF0ZUhl
YWRlcgogICAgICAgICB9CiAgICAgICAgICRoZWFkZXJJbmNsdWRlc3siPHd0Zi9OZXZlckRlc3Ry
b3llZC5oPiJ9ID0gMTsKICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgInB1YmxpYzpcbiIp
OwotICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIGJvb2wgaXNSZWFjaGFibGVGcm9t
T3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCwgSlND
OjpTbG90VmlzaXRvciYsIGNvbnN0IGNoYXIqKikgJHtvdmVycmlkZURlY2x9O1xuIik7CisgICAg
ICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgYm9vbCBpc1JlYWNoYWJsZUZyb21PcGFxdWVS
b290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0LCBKU0M6OkFic3Ry
YWN0U2xvdFZpc2l0b3ImLCBjb25zdCBjaGFyKiopICR7b3ZlcnJpZGVEZWNsfTtcbiIpOwogICAg
ICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHZvaWQgZmluYWxpemUoSlNDOjpIYW5kbGU8
SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCkgJHtvdmVycmlkZURlY2x9O1xuIik7CiAgICAg
ICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJ9O1xuIik7CiAgICAgICAgIHB1c2goQGhlYWRlckNv
bnRlbnQsICJcbiIpOwpAQCAtNDkzOSw2ICs0OTM5LDcgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50
YXRpb24KICAgICBBZGRUb0ltcGxJbmNsdWRlcygiRE9NSXNvU3Vic3BhY2VzLmgiKTsKICAgICBB
ZGRUb0ltcGxJbmNsdWRlcygiV2ViQ29yZUpTQ2xpZW50RGF0YS5oIik7CiAgICAgQWRkVG9JbXBs
SW5jbHVkZXMoIjxKYXZhU2NyaXB0Q29yZS9KU0Rlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlw
ZS5oPiIpOworICAgIEFkZFRvSW1wbEluY2x1ZGVzKCI8SmF2YVNjcmlwdENvcmUvU2xvdFZpc2l0
b3JNYWNyb3MuaD4iKTsKICAgICBBZGRUb0ltcGxJbmNsdWRlcygiPEphdmFTY3JpcHRDb3JlL1N1
YnNwYWNlSW5saW5lcy5oPiIpOwogICAgIHB1c2goQGltcGxDb250ZW50LCAiSlNDOjpJc29TdWJz
cGFjZSogJHtjbGFzc05hbWV9OjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pXG4iKTsKICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgIntcbiIpOwpAQCAtNDk2Niw3ICs0OTY3LDggQEAgc3ViIEdl
bmVyYXRlSW1wbGVtZW50YXRpb24KICAgICBwdXNoKEBpbXBsQ29udGVudCwgIn1cblxuIik7CiAK
ICAgICBpZiAoJG5lZWRzVmlzaXRDaGlsZHJlbikgewotICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgInZvaWQgJHtjbGFzc05hbWV9Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZp
c2l0b3ImIHZpc2l0b3IpXG4iKTsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ0ZW1wbGF0
ZTx0eXBlbmFtZSBWaXNpdG9yPlxuIik7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAidm9p
ZCAke2NsYXNzTmFtZX06OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYg
dmlzaXRvcilcbiIpOwogICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIntcbiIpOwogICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PCR7Y2xh
c3NOYW1lfSo+KGNlbGwpO1xuIik7CiAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIEFT
U0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTtcbiIpOwpAQCAtNDk5
MSw4ICs0OTkzLDEwIEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgICAgICAgICB9
CiAgICAgICAgIH0KICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ9XG5cbiIpOworICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgIkRFRklORV9WSVNJVF9DSElMRFJFTigke2NsYXNzTmFtZX0p
O1xuXG4iKTsKKwogICAgICAgICBpZiAoJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57
SlNDdXN0b21NYXJrRnVuY3Rpb259KSB7Ci0gICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwg
InZvaWQgJHtjbGFzc05hbWV9Ojp2aXNpdE91dHB1dENvbnN0cmFpbnRzKEpTQ2VsbCogY2VsbCwg
U2xvdFZpc2l0b3ImIHZpc2l0b3IpXG4iKTsKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50
LCAidm9pZCAke2NsYXNzTmFtZX06OnZpc2l0T3V0cHV0Q29uc3RyYWludHMoSlNDZWxsKiBjZWxs
LCBBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKVxuIik7CiAgICAgICAgICAgICBwdXNoKEBp
bXBsQ29udGVudCwgIntcbiIpOwogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAg
YXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDwke2NsYXNzTmFtZX0qPihjZWxsKTtcbiIpOwogICAg
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklU
Uyh0aGlzT2JqZWN0LCBpbmZvKCkpO1xuIik7CkBAIC01MDMzLDcgKzUwMzcsNyBAQCBzdWIgR2Vu
ZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgIH0KIAogICAgIGlmIChTaG91bGRHZW5lcmF0ZVdyYXBw
ZXJPd25lckNvZGUoJGhhc1BhcmVudCwgJGludGVyZmFjZSkgJiYgIUdldEN1c3RvbUlzUmVhY2hh
YmxlKCRpbnRlcmZhY2UpKSB7Ci0gICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiYm9vbCBKUyR7
aW50ZXJmYWNlTmFtZX1Pd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5k
bGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBTbG90VmlzaXRvciYgdmlzaXRvciwgY29u
c3QgY2hhcioqIHJlYXNvbilcbiIpOworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgImJvb2wg
SlMke2ludGVyZmFjZU5hbWV9T3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6
SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgQWJzdHJhY3RTbG90VmlzaXRvciYg
dmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbilcbiIpOwogICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudCwgIntcbiIpOwogICAgICAgICAjIEFsbCBBY3RpdmVET01PYmplY3RzIGltcGxlbWVudCBo
YXNQZW5kaW5nQWN0aXZpdHkoKSwgYnV0IG5vdCBhbGwgb2YgdGhlbQogICAgICAgICAjIGluY3Jl
bWVudCB0aGVpciBDKysgcmVmZXJlbmNlIGNvdW50cyB3aGVuIGhhc1BlbmRpbmdBY3Rpdml0eSgp
IGJlY29tZXMKQEAgLTY0MzIsNiArNjQzNiw3IEBAIHN1YiBHZW5lcmF0ZUNhbGxiYWNrSGVhZGVy
Q29udGVudAogICAgICAgICBwdXNoKEAkY29udGVudFJlZiwgIiAgICBib29sIGhhc0NhbGxiYWNr
KCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9kYXRhICYmIG1fZGF0YS0+Y2FsbGJhY2soKTsgfVxu
XG4iKTsKICAgICB9CiAKKyAgICBwdXNoKEAkY29udGVudFJlZiwgIiAgICB2b2lkIHZpc2l0SlNG
dW5jdGlvbihKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKSBvdmVycmlkZTtcblxuIikgaWYgJGlu
dGVyZmFjZU9yQ2FsbGJhY2stPmV4dGVuZGVkQXR0cmlidXRlcy0+e0lzV2Vha0NhbGxiYWNrfTsK
ICAgICBwdXNoKEAkY29udGVudFJlZiwgIiAgICB2b2lkIHZpc2l0SlNGdW5jdGlvbihKU0M6OlNs
b3RWaXNpdG9yJikgb3ZlcnJpZGU7XG5cbiIpIGlmICRpbnRlcmZhY2VPckNhbGxiYWNrLT5leHRl
bmRlZEF0dHJpYnV0ZXMtPntJc1dlYWtDYWxsYmFja307CiAKICAgICBwdXNoKEAkY29udGVudFJl
ZiwgIiAgICAke2NhbGxiYWNrRGF0YVR5cGV9KiBtX2RhdGE7XG4iKTsKQEAgLTY2MjMsNiArNjYy
OCwxMCBAQCBzdWIgR2VuZXJhdGVDYWxsYmFja0ltcGxlbWVudGF0aW9uQ29udGVuCiAgICAgfQog
CiAgICAgaWYgKCRpbnRlcmZhY2VPckNhbGxiYWNrLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntJc1dl
YWtDYWxsYmFja30pIHsKKyAgICAgICAgcHVzaChAJGNvbnRlbnRSZWYsICJ2b2lkICR7Y2xhc3NO
YW1lfTo6dmlzaXRKU0Z1bmN0aW9uKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcilc
biIpOworICAgICAgICBwdXNoKEAkY29udGVudFJlZiwgIntcbiIpOworICAgICAgICBwdXNoKEAk
Y29udGVudFJlZiwgIiAgICBtX2RhdGEtPnZpc2l0SlNGdW5jdGlvbih2aXNpdG9yKTtcbiIpOwor
ICAgICAgICBwdXNoKEAkY29udGVudFJlZiwgIn1cblxuIik7CiAgICAgICAgIHB1c2goQCRjb250
ZW50UmVmLCAidm9pZCAke2NsYXNzTmFtZX06OnZpc2l0SlNGdW5jdGlvbihKU0M6OlNsb3RWaXNp
dG9yJiB2aXNpdG9yKVxuIik7CiAgICAgICAgIHB1c2goQCRjb250ZW50UmVmLCAie1xuIik7CiAg
ICAgICAgIHB1c2goQCRjb250ZW50UmVmLCAiICAgIG1fZGF0YS0+dmlzaXRKU0Z1bmN0aW9uKHZp
c2l0b3IpO1xuIik7CkBAIC02NzM0LDYgKzY3NDMsNyBAQCBzdWIgR2VuZXJhdGVJdGVyYWJsZURl
ZmluaXRpb24KICAgICBteSAkdmlzaWJsZUludGVyZmFjZU5hbWUgPSAkY29kZUdlbmVyYXRvci0+
R2V0VmlzaWJsZUludGVyZmFjZU5hbWUoJGludGVyZmFjZSk7CiAKICAgICBBZGRUb0ltcGxJbmNs
dWRlcygiSlNET01JdGVyYXRvci5oIik7CisgICAgQWRkVG9JbXBsSW5jbHVkZXMoIjxKYXZhU2Ny
aXB0Q29yZS9TbG90VmlzaXRvck1hY3Jvcy5oPiIpOwogCiAgICAgcmV0dXJuIHVubGVzcyBJc0tl
eVZhbHVlSXRlcmFibGVJbnRlcmZhY2UoJGludGVyZmFjZSk7CiAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2RvbS9BY3RpdmVET01DYWxsYmFjay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2RvbS9BY3RpdmVET01DYWxsYmFjay5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2Vi
Q29yZS9kb20vQWN0aXZlRE9NQ2FsbGJhY2suaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYg
QEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCkBAIC0zMyw2ICsz
NCw3IEBACiAjaW5jbHVkZSAiQ29udGV4dERlc3RydWN0aW9uT2JzZXJ2ZXIuaCIKIAogbmFtZXNw
YWNlIEpTQyB7CitjbGFzcyBBYnN0cmFjdFNsb3RWaXNpdG9yOwogY2xhc3MgU2xvdFZpc2l0b3I7
CiB9CiAKQEAgLTU1LDYgKzU3LDcgQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wg
YWN0aXZlRE9NT2JqZWN0c0FyZVN1c3BlbmRlZCgpIGNvbnN0OwogICAgIFdFQkNPUkVfRVhQT1JU
IGJvb2wgYWN0aXZlRE9NT2JqZWN0QXJlU3RvcHBlZCgpIGNvbnN0OwogICAgIAorICAgIHZpcnR1
YWwgdm9pZCB2aXNpdEpTRnVuY3Rpb24oSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJikgeyB9CiAg
ICAgdmlydHVhbCB2b2lkIHZpc2l0SlNGdW5jdGlvbihKU0M6OlNsb3RWaXNpdG9yJikgeyB9CiB9
OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRMaXN0ZW5lci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9FdmVudExpc3RlbmVyLmgJKHJldmlzaW9uIDI3MjgzMCkK
KysrIFNvdXJjZS9XZWJDb3JlL2RvbS9FdmVudExpc3RlbmVyLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA4LCAyMDA5IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjQs
NiArMjQsNyBAQAogI2luY2x1ZGUgPHd0Zi9XZWFrUHRyLmg+CiAKIG5hbWVzcGFjZSBKU0Mgewor
Y2xhc3MgQWJzdHJhY3RTbG90VmlzaXRvcjsKIGNsYXNzIEpTT2JqZWN0OwogY2xhc3MgU2xvdFZp
c2l0b3I7CiB9CkBAIC01Miw2ICs1Myw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgaGFu
ZGxlRXZlbnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIEV2ZW50JikgPSAwOwogICAgIHZpcnR1
YWwgYm9vbCB3YXNDcmVhdGVkRnJvbU1hcmt1cCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAK
KyAgICB2aXJ0dWFsIHZvaWQgdmlzaXRKU0Z1bmN0aW9uKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRv
ciYpIHsgfQogICAgIHZpcnR1YWwgdm9pZCB2aXNpdEpTRnVuY3Rpb24oSlNDOjpTbG90VmlzaXRv
ciYpIHsgfQogCiAgICAgdmlydHVhbCBib29sIGlzQXR0cmlidXRlKCkgY29uc3QgeyByZXR1cm4g
ZmFsc2U7IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9FdmVudFRhcmdldC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50VGFyZ2V0LmNwcAkocmV2aXNpb24gMjcy
ODMwKQorKysgU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50VGFyZ2V0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMiw3ICsyLDcgQEAKICAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9s
bEBrZGUub3JnKQogICogICAgICAgICAgIChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0
b0BrZGUub3JnKQogICogICAgICAgICAgIChDKSAyMDAxIERpcmsgTXVlbGxlciAobXVlbGxlckBr
ZGUub3JnKQotICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA2IEFsZXhleSBQcm9za3VyeWFrb3Yg
KGFwQHdlYmtpdC5vcmcpCiAgKiAgICAgICAgICAgKEMpIDIwMDcsIDIwMDggTmlrb2xhcyBaaW1t
ZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CiAgKgpAQCAtMzg0LDcgKzM4NCw4IEBAIHZvaWQg
RXZlbnRUYXJnZXQ6OnJlbW92ZUFsbEV2ZW50TGlzdGVuZXIKICAgICB0aHJlYWREYXRhLnNldElz
SW5SZW1vdmVBbGxFdmVudExpc3RlbmVycyhmYWxzZSk7CiB9CiAKLXZvaWQgRXZlbnRUYXJnZXQ6
OnZpc2l0SlNFdmVudExpc3RlbmVycyhKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxh
dGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgRXZlbnRUYXJnZXQ6OnZpc2l0SlNFdmVudExpc3Rl
bmVycyhWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEV2ZW50VGFyZ2V0RGF0YSogZGF0YSA9IGV2
ZW50VGFyZ2V0RGF0YUNvbmN1cnJlbnRseSgpOwogICAgIGlmICghZGF0YSkKQEAgLTM5Niw2ICsz
OTcsOSBAQCB2b2lkIEV2ZW50VGFyZ2V0Ojp2aXNpdEpTRXZlbnRMaXN0ZW5lcnMoCiAgICAgICAg
IGxpc3RlbmVyLT52aXNpdEpTRnVuY3Rpb24odmlzaXRvcik7CiB9CiAKK3RlbXBsYXRlIHZvaWQg
RXZlbnRUYXJnZXQ6OnZpc2l0SlNFdmVudExpc3RlbmVycyhKU0M6OkFic3RyYWN0U2xvdFZpc2l0
b3ImKTsKK3RlbXBsYXRlIHZvaWQgRXZlbnRUYXJnZXQ6OnZpc2l0SlNFdmVudExpc3RlbmVycyhK
U0M6OlNsb3RWaXNpdG9yJik7CisKIHZvaWQgRXZlbnRUYXJnZXQ6OmludmFsaWRhdGVFdmVudExp
c3RlbmVyUmVnaW9ucygpCiB7CiAgICAgaWYgKGlzPEVsZW1lbnQ+KCp0aGlzKSkgewpJbmRleDog
U291cmNlL1dlYkNvcmUvZG9tL0V2ZW50VGFyZ2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvZG9tL0V2ZW50VGFyZ2V0LmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJD
b3JlL2RvbS9FdmVudFRhcmdldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yLDcgKzIsNyBAQAogICog
Q29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCiAgKiAgICAgICAg
ICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCiAgKiAgICAgICAg
ICAgKEMpIDIwMDEgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDQtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMDQtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5
cmlnaHQgKEMpIDIwMDYgQWxleGV5IFByb3NrdXJ5YWtvdiAoYXBAd2Via2l0Lm9yZykKICAqICAg
ICAgICAgICAoQykgMjAwNywgMjAwOCBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2Rl
Lm9yZz4KICAqCkBAIC05Nyw3ICs5Nyw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGZpcmVFdmVudExp
c3RlbmVycyhFdmVudCYsIEV2ZW50SW52b2tlUGhhc2UpOwogICAgIGJvb2wgaXNGaXJpbmdFdmVu
dExpc3RlbmVycygpIGNvbnN0OwogCi0gICAgdm9pZCB2aXNpdEpTRXZlbnRMaXN0ZW5lcnMoSlND
OjpTbG90VmlzaXRvciYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgdmlz
aXRKU0V2ZW50TGlzdGVuZXJzKFZpc2l0b3ImKTsKICAgICB2b2lkIGludmFsaWRhdGVKU0V2ZW50
TGlzdGVuZXJzKEpTQzo6SlNPYmplY3QqKTsKIAogICAgIGNvbnN0IEV2ZW50VGFyZ2V0RGF0YSog
ZXZlbnRUYXJnZXREYXRhKCkgY29uc3Q7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vTXV0YXRp
b25SZWNvcmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9NdXRhdGlvblJl
Y29yZC5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9NdXRhdGlv
blJlY29yZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJp
Z2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zIGFyZQpAQCAtNDEsNyArNDIsNyBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKIG5hbWVzcGFjZSB7CiAKLXN0YXRpYyB2b2lkIHZpc2l0Tm9kZUxpc3QoSlNDOjpTbG90
VmlzaXRvciYgdmlzaXRvciwgTm9kZUxpc3QmIG5vZGVMaXN0KQorc3RhdGljIHZvaWQgdmlzaXRO
b2RlTGlzdChKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIE5vZGVMaXN0JiBub2Rl
TGlzdCkKIHsKICAgICBBU1NFUlQoIW5vZGVMaXN0LmlzTGl2ZU5vZGVMaXN0KCkpOwogICAgIHVu
c2lnbmVkIGxlbmd0aCA9IG5vZGVMaXN0Lmxlbmd0aCgpOwpAQCAtNjgsNyArNjksNyBAQCBwcml2
YXRlOgogICAgIE5vZGUqIHByZXZpb3VzU2libGluZygpIG92ZXJyaWRlIHsgcmV0dXJuIG1fcHJl
dmlvdXNTaWJsaW5nLmdldCgpOyB9CiAgICAgTm9kZSogbmV4dFNpYmxpbmcoKSBvdmVycmlkZSB7
IHJldHVybiBtX25leHRTaWJsaW5nLmdldCgpOyB9CiAKLSAgICB2b2lkIHZpc2l0Tm9kZXNDb25j
dXJyZW50bHkoSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikgY29uc3QgZmluYWwKKyAgICB2b2lk
IHZpc2l0Tm9kZXNDb25jdXJyZW50bHkoSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9y
KSBjb25zdCBmaW5hbAogICAgIHsKICAgICAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHJvb3Qo
bV90YXJnZXQucHRyKCkpKTsKICAgICAgICAgaWYgKG1fYWRkZWROb2RlcykKQEAgLTEwNSw3ICsx
MDYsNyBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gbm9kZUxpc3QuZ2V0KCk7CiAgICAgfQog
Ci0gICAgdm9pZCB2aXNpdE5vZGVzQ29uY3VycmVudGx5KEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0
b3IpIGNvbnN0IGZpbmFsCisgICAgdm9pZCB2aXNpdE5vZGVzQ29uY3VycmVudGx5KEpTQzo6QWJz
dHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikgY29uc3QgZmluYWwKICAgICB7CiAgICAgICAgIHZp
c2l0b3IuYWRkT3BhcXVlUm9vdChyb290KG1fdGFyZ2V0LnB0cigpKSk7CiAgICAgfQpAQCAtMTY0
LDcgKzE2NSw3IEBAIHByaXZhdGU6CiAKICAgICBTdHJpbmcgb2xkVmFsdWUoKSBvdmVycmlkZSB7
IHJldHVybiBTdHJpbmcoKTsgfQogCi0gICAgdm9pZCB2aXNpdE5vZGVzQ29uY3VycmVudGx5KEpT
Qzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0IGZpbmFsCisgICAgdm9pZCB2aXNpdE5vZGVz
Q29uY3VycmVudGx5KEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikgY29uc3QgZmlu
YWwKICAgICB7CiAgICAgICAgIG1fcmVjb3JkLT52aXNpdE5vZGVzQ29uY3VycmVudGx5KHZpc2l0
b3IpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9NdXRhdGlvblJlY29yZC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9NdXRhdGlvblJlY29yZC5oCShyZXZpc2lv
biAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vTXV0YXRpb25SZWNvcmQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCkBAIC0zNiw3ICszNyw3IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1jbGFzcyBTbG90Vmlz
aXRvcjsKK2NsYXNzIEFic3RyYWN0U2xvdFZpc2l0b3I7CiAKIH0KIApAQCAtNzIsNyArNzMsNyBA
QCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIFN0cmluZyBvbGRWYWx1ZSgpIHsgcmV0dXJuIFN0cmlu
ZygpOyB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXROb2Rlc0NvbmN1cnJlbnRseShKU0M6OlNs
b3RWaXNpdG9yJikgY29uc3QgPSAwOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdE5vZGVzQ29uY3Vy
cmVudGx5KEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpIGNvbnN0ID0gMDsKIH07CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlRmlsdGVyQ29u
ZGl0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL05vZGVGaWx0ZXJDb25k
aXRpb24uaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL1dlYkNvcmUvZG9tL05vZGVGaWx0
ZXJDb25kaXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyArMzgsNyBAQCBjbGFzcyBOb2Rl
RmlsdGVyQ29uZGl0aW9uIDogcHVibGljIFJlZkNvCiBwdWJsaWM6CiAgICAgdmlydHVhbCB+Tm9k
ZUZpbHRlckNvbmRpdGlvbigpID0gZGVmYXVsdDsKICAgICB2aXJ0dWFsIHVuc2lnbmVkIHNob3J0
IGFjY2VwdE5vZGUoTm9kZSYpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXRBZ2dy
ZWdhdGUoSlNDOjpTbG90VmlzaXRvciYpIHsgfQorLy8gICAgdmlydHVhbCB2b2lkIHZpc2l0QWdn
cmVnYXRlKEpTQzo6U2xvdFZpc2l0b3ImKSB7IH0gLy8gbWxhbSBVTlVTRUQKIH07CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9TdGF0aWNSYW5nZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL1N0YXRpY1JhbmdlLmNwcAkocmV2
aXNpb24gMjcyODMwKQorKysgU291cmNlL1dlYkNvcmUvZG9tL1N0YXRpY1JhbmdlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAy
MCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYt
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTc2LDcgKzc2LDcgQEAgRXhjZXB0aW9uT3I8UmVmPFN0YXRpY1Jhbmdl
Pj4gU3RhdGljUmFuZwogICAgIHJldHVybiBjcmVhdGUoeyB7IGluaXQuc3RhcnRDb250YWluZXIu
cmVsZWFzZU5vbk51bGwoKSwgaW5pdC5zdGFydE9mZnNldCB9LCB7IGluaXQuZW5kQ29udGFpbmVy
LnJlbGVhc2VOb25OdWxsKCksIGluaXQuZW5kT2Zmc2V0IH0gfSk7CiB9CiAKLXZvaWQgU3RhdGlj
UmFuZ2U6OnZpc2l0Tm9kZXNDb25jdXJyZW50bHkoSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikg
Y29uc3QKK3ZvaWQgU3RhdGljUmFuZ2U6OnZpc2l0Tm9kZXNDb25jdXJyZW50bHkoSlNDOjpBYnN0
cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBjb25zdAogewogICAgIHZpc2l0b3IuYWRkT3BhcXVl
Um9vdChyb290KHN0YXJ0LmNvbnRhaW5lci5nZXQoKSkpOwogICAgIHZpc2l0b3IuYWRkT3BhcXVl
Um9vdChyb290KGVuZC5jb250YWluZXIuZ2V0KCkpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Rv
bS9TdGF0aWNSYW5nZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9TdGF0aWNS
YW5nZS5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vU3RhdGljUmFu
Z2UuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTYtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMwLDcgKzMwLDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7
CiAKLWNsYXNzIFNsb3RWaXNpdG9yOworY2xhc3MgQWJzdHJhY3RTbG90VmlzaXRvcjsKIAogfQog
CkBAIC01OCw3ICs1OCw3IEBAIHB1YmxpYzoKICAgICB1bnNpZ25lZCBlbmRPZmZzZXQoKSBjb25z
dCBmaW5hbCB7IHJldHVybiBTaW1wbGVSYW5nZTo6ZW5kT2Zmc2V0KCk7IH0KICAgICBib29sIGNv
bGxhcHNlZCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIFNpbXBsZVJhbmdlOjpjb2xsYXBzZWQoKTsg
fQogCi0gICAgdm9pZCB2aXNpdE5vZGVzQ29uY3VycmVudGx5KEpTQzo6U2xvdFZpc2l0b3ImKSBj
b25zdDsKKyAgICB2b2lkIHZpc2l0Tm9kZXNDb25jdXJyZW50bHkoSlNDOjpBYnN0cmFjdFNsb3RW
aXNpdG9yJikgY29uc3Q7CiAKIHByaXZhdGU6CiAgICAgU3RhdGljUmFuZ2UoU2ltcGxlUmFuZ2Um
Jik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTDJSZW5kZXJpbmdDb250
ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTDJS
ZW5kZXJpbmdDb250ZXh0LmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjAgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0zMDc4LDcgKzMwNzgsNyBAQCBib29sIFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OmNoZWNrQW5k
VHJhCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgV2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6
YWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMoSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQg
V2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6YWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMoSlNDOjpBYnN0
cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2U6OmFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKHZpc2l0b3IpOwogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9odG1sL2NhbnZhcy9XZWJHTDJSZW5kZXJpbmdDb250ZXh0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5oCShyZXZp
c2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTDJSZW5kZXJp
bmdDb250ZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE1LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNjEsNyArMjYxLDcgQEAgcHVibGljOgog
CiAgICAgYm9vbCBjaGVja0FuZFRyYW5zbGF0ZUF0dGFjaG1lbnRzKGNvbnN0IGNoYXIqIGZ1bmN0
aW9uTmFtZSwgR0NHTGVudW0sIFZlY3RvcjxHQ0dMZW51bT4mKTsKIAotICAgIHZvaWQgYWRkTWVt
YmVyc1RvT3BhcXVlUm9vdHMoSlNDOjpTbG90VmlzaXRvciYpIG92ZXJyaWRlOworICAgIHZvaWQg
YWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMoSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJikgb3ZlcnJp
ZGU7CiAKIHByaXZhdGU6CiAgICAgV2ViR0wyUmVuZGVyaW5nQ29udGV4dChDYW52YXNCYXNlJiwg
R3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL1dlYkdMRnJhbWVidWZmZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL1dlYkdMRnJhbWVidWZmZXIuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBT
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEZyYW1lYnVmZmVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxNyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTYzLDcgKzYzLDcgQEAgbmFtZXNwYWNlIHsKICAgICAgICAgdm9pZCBvbkRldGFj
aGVkKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgR3JhcGhpY3NDb250ZXh0R0wqKSBvdmVycmlkZTsK
ICAgICAgICAgdm9pZCBhdHRhY2goR3JhcGhpY3NDb250ZXh0R0wqLCBHQ0dMZW51bSB0YXJnZXQs
IEdDR0xlbnVtIGF0dGFjaG1lbnQpIG92ZXJyaWRlOwogICAgICAgICB2b2lkIHVuYXR0YWNoKEdy
YXBoaWNzQ29udGV4dEdMKiwgR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBhdHRhY2htZW50KSBv
dmVycmlkZTsKLSAgICAgICAgdm9pZCBhZGRNZW1iZXJzVG9PcGFxdWVSb290cyhjb25zdCBBYnN0
cmFjdExvY2tlciYsIEpTQzo6U2xvdFZpc2l0b3ImKSBvdmVycmlkZTsKKyAgICAgICAgdm9pZCBh
ZGRNZW1iZXJzVG9PcGFxdWVSb290cyhjb25zdCBBYnN0cmFjdExvY2tlciYsIEpTQzo6QWJzdHJh
Y3RTbG90VmlzaXRvciYpIG92ZXJyaWRlOwogCiAgICAgICAgIFdlYkdMUmVuZGVyYnVmZmVyQXR0
YWNobWVudCgpIHsgfTsKIApAQCAtMTQ1LDcgKzE0NSw3IEBAIG5hbWVzcGFjZSB7CiAgICAgICAg
ICAgICBjb250ZXh0LT5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcih0YXJnZXQsIGF0dGFjaG1lbnQs
IEdyYXBoaWNzQ29udGV4dEdMOjpSRU5ERVJCVUZGRVIsIDApOwogICAgIH0KIAotICAgIHZvaWQg
V2ViR0xSZW5kZXJidWZmZXJBdHRhY2htZW50OjphZGRNZW1iZXJzVG9PcGFxdWVSb290cyhjb25z
dCBBYnN0cmFjdExvY2tlciYsIEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCisgICAgdm9pZCBX
ZWJHTFJlbmRlcmJ1ZmZlckF0dGFjaG1lbnQ6OmFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKGNvbnN0
IEFic3RyYWN0TG9ja2VyJiwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogICAg
IHsKICAgICAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KG1fcmVuZGVyYnVmZmVyLmdldCgpKTsK
ICAgICB9CkBAIC0xNjksNyArMTY5LDcgQEAgbmFtZXNwYWNlIHsKICAgICAgICAgdm9pZCBvbkRl
dGFjaGVkKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgR3JhcGhpY3NDb250ZXh0R0wqKSBvdmVycmlk
ZTsKICAgICAgICAgdm9pZCBhdHRhY2goR3JhcGhpY3NDb250ZXh0R0wqLCBHQ0dMZW51bSB0YXJn
ZXQsIEdDR0xlbnVtIGF0dGFjaG1lbnQpIG92ZXJyaWRlOwogICAgICAgICB2b2lkIHVuYXR0YWNo
KEdyYXBoaWNzQ29udGV4dEdMKiwgR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBhdHRhY2htZW50
KSBvdmVycmlkZTsKLSAgICAgICAgdm9pZCBhZGRNZW1iZXJzVG9PcGFxdWVSb290cyhjb25zdCBB
YnN0cmFjdExvY2tlciYsIEpTQzo6U2xvdFZpc2l0b3ImKSBvdmVycmlkZTsKKyAgICAgICAgdm9p
ZCBhZGRNZW1iZXJzVG9PcGFxdWVSb290cyhjb25zdCBBYnN0cmFjdExvY2tlciYsIEpTQzo6QWJz
dHJhY3RTbG90VmlzaXRvciYpIG92ZXJyaWRlOwogCiAgICAgICAgIFdlYkdMVGV4dHVyZUF0dGFj
aG1lbnQoKSB7IH07CiAKQEAgLTI2Nyw3ICsyNjcsNyBAQCBuYW1lc3BhY2UgewogI2VuZGlmCiAg
ICAgfQogCi0gICAgdm9pZCBXZWJHTFRleHR1cmVBdHRhY2htZW50OjphZGRNZW1iZXJzVG9PcGFx
dWVSb290cyhjb25zdCBBYnN0cmFjdExvY2tlciYsIEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3Ip
CisgICAgdm9pZCBXZWJHTFRleHR1cmVBdHRhY2htZW50OjphZGRNZW1iZXJzVG9PcGFxdWVSb290
cyhjb25zdCBBYnN0cmFjdExvY2tlciYsIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRv
cikKICAgICB7CiAgICAgICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChtX3RleHR1cmUuZ2V0KCkp
OwogICAgIH0KQEAgLTcyMSw3ICs3MjEsNyBAQCBHQ0dMZW51bSBXZWJHTEZyYW1lYnVmZmVyOjpn
ZXREcmF3QnVmZmVyCiAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dEdMOjpOT05FOwogfQogCi12
b2lkIFdlYkdMRnJhbWVidWZmZXI6OmFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKGNvbnN0IEFic3Ry
YWN0TG9ja2VyJiBsb2NrZXIsIEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIFdlYkdM
RnJhbWVidWZmZXI6OmFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKGNvbnN0IEFic3RyYWN0TG9ja2Vy
JiBsb2NrZXIsIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBmb3Ig
KGF1dG8mIGVudHJ5IDogbV9hdHRhY2htZW50cykKICAgICAgICAgZW50cnkudmFsdWUtPmFkZE1l
bWJlcnNUb09wYXF1ZVJvb3RzKGxvY2tlciwgdmlzaXRvcik7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9XZWJHTEZyYW1lYnVmZmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvaHRtbC9jYW52YXMvV2ViR0xGcmFtZWJ1ZmZlci5oCShyZXZpc2lvbiAyNzI4MzApCisr
KyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEZyYW1lYnVmZmVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDIxIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMzQsNyArMzQsNyBAQAogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNl
IEpTQyB7Ci1jbGFzcyBTbG90VmlzaXRvcjsKK2NsYXNzIEFic3RyYWN0U2xvdFZpc2l0b3I7CiB9
CiAKIG5hbWVzcGFjZSBXVEYgewpAQCAtNjUsNyArNjUsNyBAQCBwdWJsaWM6CiAgICAgICAgIHZp
cnR1YWwgdm9pZCBvbkRldGFjaGVkKGNvbnN0IFdURjo6QWJzdHJhY3RMb2NrZXImLCBHcmFwaGlj
c0NvbnRleHRHTCopID0gMDsKICAgICAgICAgdmlydHVhbCB2b2lkIGF0dGFjaChHcmFwaGljc0Nv
bnRleHRHTCosIEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gYXR0YWNobWVudCkgPSAwOwogICAg
ICAgICB2aXJ0dWFsIHZvaWQgdW5hdHRhY2goR3JhcGhpY3NDb250ZXh0R0wqLCBHQ0dMZW51bSB0
YXJnZXQsIEdDR0xlbnVtIGF0dGFjaG1lbnQpID0gMDsKLSAgICAgICAgdmlydHVhbCB2b2lkIGFk
ZE1lbWJlcnNUb09wYXF1ZVJvb3RzKGNvbnN0IFdURjo6QWJzdHJhY3RMb2NrZXImLCBKU0M6OlNs
b3RWaXNpdG9yJikgPSAwOworICAgICAgICB2aXJ0dWFsIHZvaWQgYWRkTWVtYmVyc1RvT3BhcXVl
Um9vdHMoY29uc3QgV1RGOjpBYnN0cmFjdExvY2tlciYsIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRv
ciYpID0gMDsKIAogICAgIHByb3RlY3RlZDoKICAgICAgICAgV2ViR0xBdHRhY2htZW50KCk7CkBA
IC0xMTQsNyArMTE0LDcgQEAgcHVibGljOgogCiAgICAgR0NHTGVudW0gZ2V0RHJhd0J1ZmZlcihH
Q0dMZW51bSk7CiAKLSAgICB2b2lkIGFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKGNvbnN0IFdURjo6
QWJzdHJhY3RMb2NrZXImLCBKU0M6OlNsb3RWaXNpdG9yJik7CisgICAgdm9pZCBhZGRNZW1iZXJz
VG9PcGFxdWVSb290cyhjb25zdCBXVEY6OkFic3RyYWN0TG9ja2VyJiwgSlNDOjpBYnN0cmFjdFNs
b3RWaXNpdG9yJik7CiAKIHByaXZhdGU6CiAgICAgV2ViR0xGcmFtZWJ1ZmZlcihXZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlJik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJH
TFByb2dyYW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dl
YkdMUHJvZ3JhbS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL1dlYkdMUHJvZ3JhbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjA2LDcgKzIwNiw3IEBAIGJv
b2wgV2ViR0xQcm9ncmFtOjpkZXRhY2hTaGFkZXIoY29uc3QgQWIKICAgICB9CiB9CiAKLXZvaWQg
V2ViR0xQcm9ncmFtOjphZGRNZW1iZXJzVG9PcGFxdWVSb290cyhjb25zdCBBYnN0cmFjdExvY2tl
ciYsIEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIFdlYkdMUHJvZ3JhbTo6YWRkTWVt
YmVyc1RvT3BhcXVlUm9vdHMoY29uc3QgQWJzdHJhY3RMb2NrZXImLCBKU0M6OkFic3RyYWN0U2xv
dFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KG1fdmVydGV4
U2hhZGVyLmdldCgpKTsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QobV9mcmFnbWVudFNoYWRl
ci5nZXQoKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFByb2dyYW0u
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFByb2dyYW0u
aAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xQ
cm9ncmFtLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDA5LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDA5LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNSw3ICszNSw3IEBACiAjaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgSlNDIHsKLWNsYXNzIFNsb3RWaXNpdG9yOworY2xhc3Mg
QWJzdHJhY3RTbG90VmlzaXRvcjsKIH0KIAogbmFtZXNwYWNlIFdURiB7CkBAIC04OCw3ICs4OCw3
IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fcmVxdWlyZWRUcmFuc2Zvcm1GZWVkYmFja0J1
ZmZlckNvdW50OwogICAgIH0KIAotICAgIHZvaWQgYWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMoY29u
c3QgV1RGOjpBYnN0cmFjdExvY2tlciYsIEpTQzo6U2xvdFZpc2l0b3ImKTsKKyAgICB2b2lkIGFk
ZE1lbWJlcnNUb09wYXF1ZVJvb3RzKGNvbnN0IFdURjo6QWJzdHJhY3RMb2NrZXImLCBKU0M6OkFi
c3RyYWN0U2xvdFZpc2l0b3ImKTsKIAogcHJpdmF0ZToKICAgICBXZWJHTFByb2dyYW0oV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZSYpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHAJKHJldmlzaW9uIDI3
MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxNS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNzkzMSw3ICs3OTMxLDcgQEAgdm9pZCBXZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlOjpkaXNwYXRjaAogICAgIHF1ZXVlVGFza1RvRGlzcGF0Y2hF
dmVudCgqY2FudmFzLCBUYXNrU291cmNlOjpXZWJHTCwgV2ViR0xDb250ZXh0RXZlbnQ6OmNyZWF0
ZShldmVudE5hbWVzKCkud2ViZ2xjb250ZXh0Y2hhbmdlZEV2ZW50LCBFdmVudDo6Q2FuQnViYmxl
OjpObywgRXZlbnQ6OklzQ2FuY2VsYWJsZTo6WWVzLCBlbXB0eVN0cmluZygpKSk7CiB9CiAKLXZv
aWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6YWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMoSlND
OjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6
YWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMoSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9y
KQogewogICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sob2JqZWN0R3JhcGhMb2NrKCkpOwogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJp
bmdDb250ZXh0QmFzZS5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01
OCw3ICs1OCw3IEBACiAjZW5kaWYKIAogbmFtZXNwYWNlIEpTQyB7Ci1jbGFzcyBTbG90VmlzaXRv
cjsKK2NsYXNzIEFic3RyYWN0U2xvdFZpc2l0b3I7CiB9CiAKIG5hbWVzcGFjZSBXVEYgewpAQCAt
NDExLDcgKzQxMSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHJlY3ljbGVDb250ZXh0KCkgb3ZlcnJp
ZGU7CiAgICAgdm9pZCBkaXNwYXRjaENvbnRleHRDaGFuZ2VkTm90aWZpY2F0aW9uKCkgb3ZlcnJp
ZGU7CiAKLSAgICB2aXJ0dWFsIHZvaWQgYWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMoSlNDOjpTbG90
VmlzaXRvciYpOworICAgIHZpcnR1YWwgdm9pZCBhZGRNZW1iZXJzVG9PcGFxdWVSb290cyhKU0M6
OkFic3RyYWN0U2xvdFZpc2l0b3ImKTsKICAgICAvLyBUaGlzIGxvY2sgbXVzdCBiZSBoZWxkIGFj
cm9zcyBhbGwgbXV0YXRpb25zIG9mIGNvbnRhaW5lcnMgbGlrZQogICAgIC8vIFZlY3RvcnMsIEhh
c2hTZXRzLCBldGMuIHdoaWNoIGNvbnRhaW4gUmVmUHRyPFdlYkdMT2JqZWN0PiwgYW5kCiAgICAg
Ly8gd2hpY2ggYXJlIHRyYXZlcnNlZCBieSBhZGRNZW1iZXJzVG9PcGFxdWVSb290cygpIG9yIGFu
eSBvZiB0aGUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVHJhbnNmb3Jt
RmVlZGJhY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dl
YkdMVHJhbnNmb3JtRmVlZGJhY2suY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2Vi
Q29yZS9odG1sL2NhbnZhcy9XZWJHTFRyYW5zZm9ybUZlZWRiYWNrLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0zMCw4ICszMCw3IEBACiAKICNpbmNsdWRlICJXZWJHTENvbnRleHRHcm91cC5oIgogI2luY2x1
ZGUgIldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9TbG90VmlzaXRvci5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1Nsb3RWaXNpdG9ySW5s
aW5lcy5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0Fic3RyYWN0U2xvdFZpc2l0b3JJbmxp
bmVzLmg+CiAjaW5jbHVkZSA8d3RmL0xvY2suaD4KICNpbmNsdWRlIDx3dGYvTG9ja2VyLmg+CiAK
QEAgLTkzLDcgKzkyLDcgQEAgYm9vbCBXZWJHTFRyYW5zZm9ybUZlZWRiYWNrOjpoYXNFbm91Z2hC
dQogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIFdlYkdMVHJhbnNmb3JtRmVlZGJhY2s6OmFk
ZE1lbWJlcnNUb09wYXF1ZVJvb3RzKGNvbnN0IEFic3RyYWN0TG9ja2VyJiBsb2NrZXIsIEpTQzo6
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIFdlYkdMVHJhbnNmb3JtRmVlZGJhY2s6OmFkZE1l
bWJlcnNUb09wYXF1ZVJvb3RzKGNvbnN0IEFic3RyYWN0TG9ja2VyJiBsb2NrZXIsIEpTQzo6QWJz
dHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBmb3IgKGF1dG8mIGJ1ZmZlciA6IG1f
Ym91bmRJbmRleGVkVHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJzKQogICAgICAgICB2aXNpdG9yLmFk
ZE9wYXF1ZVJvb3QoYnVmZmVyLmdldCgpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2Fu
dmFzL1dlYkdMVHJhbnNmb3JtRmVlZGJhY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9XZWJHTFRyYW5zZm9ybUZlZWRiYWNrLmgJKHJldmlzaW9uIDI3MjgzMCkK
KysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVHJhbnNmb3JtRmVlZGJhY2suaAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUt
MjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTUtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTMxLDcgKzMxLDcgQEAKICNpbmNsdWRlICJXZWJHTFNoYXJlZE9i
amVjdC5oIgogCiBuYW1lc3BhY2UgSlNDIHsKLWNsYXNzIFNsb3RWaXNpdG9yOworY2xhc3MgQWJz
dHJhY3RTbG90VmlzaXRvcjsKIH0KIAogbmFtZXNwYWNlIFdURiB7CkBAIC03MCw3ICs3MCw3IEBA
IHB1YmxpYzoKICAgICAKICAgICBib29sIGhhc0Vub3VnaEJ1ZmZlcnMoR0NHTHVpbnQgbnVtUmVx
dWlyZWQpIGNvbnN0OwogCi0gICAgdm9pZCBhZGRNZW1iZXJzVG9PcGFxdWVSb290cyhjb25zdCBB
YnN0cmFjdExvY2tlciYsIEpTQzo6U2xvdFZpc2l0b3ImKTsKKyAgICB2b2lkIGFkZE1lbWJlcnNU
b09wYXF1ZVJvb3RzKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgSlNDOjpBYnN0cmFjdFNsb3RWaXNp
dG9yJik7CiAKIHByaXZhdGU6CiAgICAgV2ViR0xUcmFuc2Zvcm1GZWVkYmFjayhXZWJHTDJSZW5k
ZXJpbmdDb250ZXh0Jik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFZl
cnRleEFycmF5T2JqZWN0QmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvV2ViR0xWZXJ0ZXhBcnJheU9iamVjdEJhc2UuY3BwCShyZXZpc2lvbiAyNzI4MzAp
CisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFZlcnRleEFycmF5T2JqZWN0QmFz
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE1LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOSw4ICsyOSw3IEBACiAjaWYgRU5BQkxFKFdFQkdM
KQogCiAjaW5jbHVkZSAiV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5oIgotI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL1Nsb3RWaXNpdG9yLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvU2xv
dFZpc2l0b3JJbmxpbmVzLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvQWJzdHJhY3RTbG90
VmlzaXRvcklubGluZXMuaD4KICNpbmNsdWRlIDx3dGYvTG9ja2VyLmg+CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKQEAgLTEwOSw3ICsxMDgsNyBAQCB2b2lkIFdlYkdMVmVydGV4QXJyYXlPYmplY3RC
YXNlOjpzZXRWZXJ0CiAgICAgbV92ZXJ0ZXhBdHRyaWJTdGF0ZVtpbmRleF0uZGl2aXNvciA9IGRp
dmlzb3I7CiB9CiAKLXZvaWQgV2ViR0xWZXJ0ZXhBcnJheU9iamVjdEJhc2U6OmFkZE1lbWJlcnNU
b09wYXF1ZVJvb3RzKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgSlNDOjpTbG90VmlzaXRvciYgdmlz
aXRvcikKK3ZvaWQgV2ViR0xWZXJ0ZXhBcnJheU9iamVjdEJhc2U6OmFkZE1lbWJlcnNUb09wYXF1
ZVJvb3RzKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQogewogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChtX2JvdW5kRWxlbWVudEFycmF5
QnVmZmVyLmdldCgpKTsKICAgICBmb3IgKGF1dG8mIHN0YXRlIDogbV92ZXJ0ZXhBdHRyaWJTdGF0
ZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVmVydGV4QXJyYXlPYmpl
Y3RCYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xW
ZXJ0ZXhBcnJheU9iamVjdEJhc2UuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvV2ViR0xWZXJ0ZXhBcnJheU9iamVjdEJhc2UuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTMyLDcgKzMyLDcgQEAKICNpbmNsdWRlICJXZWJHTENvbnRleHRPYmplY3QuaCIKIAog
bmFtZXNwYWNlIEpTQyB7Ci1jbGFzcyBTbG90VmlzaXRvcjsKK2NsYXNzIEFic3RyYWN0U2xvdFZp
c2l0b3I7CiB9CiAKIG5hbWVzcGFjZSBXVEYgewpAQCAtNzcsNyArNzcsNyBAQCBwdWJsaWM6CiAK
ICAgICB2b2lkIHNldFZlcnRleEF0dHJpYkRpdmlzb3IoR0NHTHVpbnQgaW5kZXgsIEdDR0x1aW50
IGRpdmlzb3IpOwogCi0gICAgdm9pZCBhZGRNZW1iZXJzVG9PcGFxdWVSb290cyhjb25zdCBXVEY6
OkFic3RyYWN0TG9ja2VyJiwgSlNDOjpTbG90VmlzaXRvciYpOworICAgIHZvaWQgYWRkTWVtYmVy
c1RvT3BhcXVlUm9vdHMoY29uc3QgV1RGOjpBYnN0cmFjdExvY2tlciYsIEpTQzo6QWJzdHJhY3RT
bG90VmlzaXRvciYpOwogCiBwcm90ZWN0ZWQ6CiAgICAgV2ViR0xWZXJ0ZXhBcnJheU9iamVjdEJh
c2UoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSYsIFR5cGUpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>420450</attachid>
            <date>2021-02-16 04:36:04 -0800</date>
            <delta_ts>2021-02-16 05:17:44 -0800</delta_ts>
            <desc>work in progress.</desc>
            <filename>bug-217274p.patch</filename>
            <type>text/plain</type>
            <size>597150</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDI3MjgzMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtNjEzLDYgKzYxMyw4IEBAIHNldChKYXZhU2NyaXB0Q29yZV9QUklWQVRFX0ZSQU1FV09SS19I
RUEKICAgICBkb21qaXQvRE9NSklUSGVhcFJhbmdlLmgKICAgICBkb21qaXQvRE9NSklUU2lnbmF0
dXJlLmgKIAorICAgIGhlYXAvQWJzdHJhY3RTbG90VmlzaXRvci5oCisgICAgaGVhcC9BYnN0cmFj
dFNsb3RWaXNpdG9ySW5saW5lcy5oCiAgICAgaGVhcC9BbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmgK
ICAgICBoZWFwL0FsbG9jYXRpb25GYWlsdXJlTW9kZS5oCiAgICAgaGVhcC9BbGxvY2F0b3IuaApA
QCAtNjc4LDYgKzY4MCw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9QUklWQVRFX0ZSQU1FV09SS19I
RUEKICAgICBoZWFwL01hcmtlZEJsb2NrU2V0LmgKICAgICBoZWFwL01hcmtlZFNwYWNlLmgKICAg
ICBoZWFwL01hcmtpbmdDb25zdHJhaW50LmgKKyAgICBoZWFwL01hcmtpbmdDb25zdHJhaW50RXhl
Y3V0b3JQYWlyLmgKICAgICBoZWFwL011dGF0b3JTdGF0ZS5oCiAgICAgaGVhcC9QYWNrZWRDZWxs
UHRyLmgKICAgICBoZWFwL1ByZWNpc2VBbGxvY2F0aW9uLmgKQEAgLTY4NywxMiArNjkwLDE0IEBA
IHNldChKYXZhU2NyaXB0Q29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUEKICAgICBoZWFwL1NpbXBs
ZU1hcmtpbmdDb25zdHJhaW50LmgKICAgICBoZWFwL1Nsb3RWaXNpdG9yLmgKICAgICBoZWFwL1Ns
b3RWaXNpdG9ySW5saW5lcy5oCisgICAgaGVhcC9TbG90VmlzaXRvck1hY3Jvcy5oCiAgICAgaGVh
cC9TdHJvbmcuaAogICAgIGhlYXAvU3Ryb25nSW5saW5lcy5oCiAgICAgaGVhcC9TdWJzcGFjZS5o
CiAgICAgaGVhcC9TdWJzcGFjZUlubGluZXMuaAogICAgIGhlYXAvU3luY2hyb25vdXNuZXNzLmgK
ICAgICBoZWFwL1RpbnlCbG9vbUZpbHRlci5oCisgICAgaGVhcC9WZXJpZmllclNsb3RWaXNpdG9y
LmgKICAgICBoZWFwL1Zpc2l0UmFjZUtleS5oCiAgICAgaGVhcC9XZWFrLmgKICAgICBoZWFwL1dl
YWtCbG9jay5oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CShyZXZpc2lvbiAyNzI4
MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQJKHdvcmtpbmcgY29weSkK
QEAgLTU2Myw2ICs1NjMsNyBAQCBoZWFwL1N0b3BJZk5lY2Vzc2FyeVRpbWVyLmNwcAogaGVhcC9T
dWJzcGFjZS5jcHAKIGhlYXAvU3luY2hyb25vdXNTdG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1bGVy
LmNwcAogaGVhcC9TeW5jaHJvbm91c25lc3MuY3BwCitoZWFwL1ZlcmlmaWVyU2xvdFZpc2l0b3Iu
Y3BwCiBoZWFwL1Zpc2l0UmFjZUtleS5jcHAKIGhlYXAvV2Vhay5jcHAKIGhlYXAvV2Vha0Jsb2Nr
LmNwcApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0FQSVdyYXBwZXJPYmplY3Qu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQVBJV3JhcHBlck9i
amVjdC5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pT
QVBJV3JhcHBlck9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDEsNyArNDEsNyBAQCBwdWJs
aWM6CiAgICAgc3RhdGljIHZvaWQgc3Vic3BhY2VGb3IoVk0mKSB7IFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7IH0KICAgICAKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7Ci0gICAg
c3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJik7Cisg
ICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTl9XSVRIX01PRElGSUVSKEpTX0VYUE9SVF9QUklWQVRF
KTsKICAgICAKICAgICB2b2lkKiB3cmFwcGVkT2JqZWN0KCkgeyByZXR1cm4gbV93cmFwcGVkT2Jq
ZWN0OyB9CiAgICAgdm9pZCBzZXRXcmFwcGVkT2JqZWN0KHZvaWQqKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9BUEkvSlNBUElXcmFwcGVyT2JqZWN0Lm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNBUElXcmFwcGVyT2JqZWN0Lm1tCShyZXZpc2lvbiAy
NzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQVBJV3JhcHBlck9iamVjdC5t
bQkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTM3LDcgKzM3LDcgQEAKIGNsYXNzIEpTQVBJV3JhcHBlck9i
amVjdEhhbmRsZU93bmVyIGZpbmFsIDogcHVibGljIEpTQzo6V2Vha0hhbmRsZU93bmVyIHsKIHB1
YmxpYzoKICAgICB2b2lkIGZpbmFsaXplKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQq
KSBmaW5hbDsKLSAgICBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxl
PEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6U2xvdFZpc2l0b3ImLCBjb25zdCBj
aGFyKiopIGZpbmFsOworICAgIGJvb2wgaXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpI
YW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCwgSlNDOjpBYnN0cmFjdFNsb3RWaXNp
dG9yJiwgY29uc3QgY2hhcioqKSBmaW5hbDsKIH07CiAKIHN0YXRpYyBKU0FQSVdyYXBwZXJPYmpl
Y3RIYW5kbGVPd25lcioganNBUElXcmFwcGVyT2JqZWN0SGFuZGxlT3duZXIoKQpAQCAtNTYsMTQg
KzU2LDE0IEBAIHZvaWQgSlNBUElXcmFwcGVyT2JqZWN0SGFuZGxlT3duZXI6OmZpbmEKICAgICBK
U0M6OldlYWtTZXQ6OmRlYWxsb2NhdGUoSlNDOjpXZWFrSW1wbDo6YXNXZWFrSW1wbChoYW5kbGUu
c2xvdCgpKSk7CiB9CiAKLWJvb2wgSlNBUElXcmFwcGVyT2JqZWN0SGFuZGxlT3duZXI6OmlzUmVh
Y2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2
b2lkKiwgSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqKQorYm9vbCBKU0FQ
SVdyYXBwZXJPYmplY3RIYW5kbGVPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlND
OjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBKU0M6OkFic3RyYWN0U2xvdFZp
c2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKikKIHsKICAgICBKU0M6OkpTQVBJV3JhcHBlck9i
amVjdCogd3JhcHBlck9iamVjdCA9IEpTQzo6anNDYXN0PEpTQzo6SlNBUElXcmFwcGVyT2JqZWN0
Kj4oaGFuZGxlLmdldCgpLmFzQ2VsbCgpKTsKICAgICAvLyBXZSB1c2UgdGhlIEpTR2xvYmFsT2Jq
ZWN0IHdoZW4gcHJvY2Vzc2luZyB3ZWFrIGhhbmRsZXMgdG8gcHJldmVudCB0aGUgc2l0dWF0aW9u
IHdoZXJlIHVzaW5nCiAgICAgLy8gdGhlIHNhbWUgT2JqZWN0aXZlLUMgb2JqZWN0IGluIG11bHRp
cGxlIGdsb2JhbCBvYmplY3RzIGtlZXBzIGFsbCBvZiB0aGUgZ2xvYmFsIG9iamVjdHMgYWxpdmUu
CiAgICAgaWYgKCF3cmFwcGVyT2JqZWN0LT53cmFwcGVkT2JqZWN0KCkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICByZXR1cm4gdmlzaXRvci52bSgpLmhlYXAuaXNNYXJrZWQod3JhcHBlck9i
amVjdC0+c3RydWN0dXJlKCktPmdsb2JhbE9iamVjdCgpKSAmJiB2aXNpdG9yLmNvbnRhaW5zT3Bh
cXVlUm9vdCh3cmFwcGVyT2JqZWN0LT53cmFwcGVkT2JqZWN0KCkpOworICAgIHJldHVybiB2aXNp
dG9yLmlzTWFya2VkKHdyYXBwZXJPYmplY3QtPnN0cnVjdHVyZSgpLT5nbG9iYWxPYmplY3QoKSkg
JiYgdmlzaXRvci5jb250YWluc09wYXF1ZVJvb3Qod3JhcHBlck9iamVjdC0+d3JhcHBlZE9iamVj
dCgpKTsKIH0KIAogbmFtZXNwYWNlIEpTQyB7CkBAIC03Myw2ICs3Myw4IEBAIHN0YXRpYyBKU0Nf
REVDTEFSRV9IT1NUX0ZVTkNUSU9OKGNvbnN0cnUKIHN0YXRpYyBKU0NfREVDTEFSRV9DVVNUT01f
R0VUVEVSKGNhbGxiYWNrR2V0dGVySlNBUElXcmFwcGVyT2JqZWN0Q2FsbGJhY2tPYmplY3QpOwog
c3RhdGljIEpTQ19ERUNMQVJFX0NVU1RPTV9HRVRURVIoc3RhdGljRnVuY3Rpb25HZXR0ZXJKU0FQ
SVdyYXBwZXJPYmplY3RDYWxsYmFja09iamVjdCk7CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTl9X
SVRIX01PRElGSUVSKHRlbXBsYXRlPD4sIEpTQ2FsbGJhY2tPYmplY3Q8SlNBUElXcmFwcGVyT2Jq
ZWN0Pik7CisKIHRlbXBsYXRlIDw+IGNvbnN0IENsYXNzSW5mbyBKU0NhbGxiYWNrT2JqZWN0PEpT
QVBJV3JhcHBlck9iamVjdD46OnNfaW5mbyA9IHsgIkpTQVBJV3JhcHBlck9iamVjdCIsICZCYXNl
OjpzX2luZm8sIG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNDYWxsYmFj
a09iamVjdCkgfTsKIHRlbXBsYXRlIDw+IGNvbnN0IGJvb2wgSlNDYWxsYmFja09iamVjdDxKU0FQ
SVdyYXBwZXJPYmplY3Q+OjpuZWVkc0Rlc3RydWN0aW9uID0gdHJ1ZTsKIApAQCAtMTIzLDcgKzEy
NSw4IEBAIHZvaWQgSlNBUElXcmFwcGVyT2JqZWN0OjpzZXRXcmFwcGVkT2JqZWMKICAgICBtX3dy
YXBwZWRPYmplY3QgPSBbc3RhdGljX2Nhc3Q8aWQ+KHdyYXBwZWRPYmplY3QpIHJldGFpbl07CiB9
CiAKLXZvaWQgSlNBUElXcmFwcGVyT2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwg
SlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2
b2lkIEpTQVBJV3JhcHBlck9iamVjdDo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBW
aXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTQVBJV3JhcHBlck9iamVjdCogdGhpc09iamVjdCA9
IEpTQzo6anNDYXN0PEpTQVBJV3JhcHBlck9iamVjdCo+KGNlbGwpOwogICAgIEJhc2U6OnZpc2l0
Q2hpbGRyZW4oY2VsbCwgdmlzaXRvcik7CkBAIC0xMzMsNiArMTM2LDggQEAgdm9pZCBKU0FQSVdy
YXBwZXJPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSgogICAgICAgICBzY2FuRXh0ZXJuYWxPYmplY3RH
cmFwaCh2aXNpdG9yLnZtKCksIHZpc2l0b3IsIHdyYXBwZWRPYmplY3QpOwogfQogCitERUZJTkVf
VklTSVRfQ0hJTERSRU5fV0lUSF9NT0RJRklFUihKU19FWFBPUlRfUFJJVkFURSwgSlNBUElXcmFw
cGVyT2JqZWN0KTsKKwogdGVtcGxhdGUgPD4KIElzb1N1YnNwYWNlKiBKU0NhbGxiYWNrT2JqZWN0
PEpTQVBJV3JhcHBlck9iamVjdD46OnN1YnNwYWNlRm9ySW1wbChWTSYgdm0sIFN1YnNwYWNlQWNj
ZXNzIG1vZGUpCiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tP
YmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxs
YmFja09iamVjdC5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9BUEkvSlNDYWxsYmFja09iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMTcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwNyBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJr
aXQub3JnPgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtNDEsNiArNDEsOSBAQCBzdGF0aWMgSlNDX0RF
Q0xBUkVfQ1VTVE9NX0dFVFRFUihzdGF0aWNGCiBzdGF0aWMgSlNDX0RFQ0xBUkVfQ1VTVE9NX0dF
VFRFUihjYWxsYmFja0dldHRlckpTR2xvYmFsT2JqZWN0Q2FsbGJhY2tPYmplY3QpOwogc3RhdGlj
IEpTQ19ERUNMQVJFX0NVU1RPTV9HRVRURVIoc3RhdGljRnVuY3Rpb25HZXR0ZXJKU0dsb2JhbE9i
amVjdENhbGxiYWNrT2JqZWN0KTsKIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOX1dJVEhfTU9ESUZJ
RVIodGVtcGxhdGU8PiwgSlNDYWxsYmFja09iamVjdDxKU05vbkZpbmFsT2JqZWN0Pik7CitERUZJ
TkVfVklTSVRfQ0hJTERSRU5fV0lUSF9NT0RJRklFUih0ZW1wbGF0ZTw+LCBKU0NhbGxiYWNrT2Jq
ZWN0PEpTR2xvYmFsT2JqZWN0Pik7CisKIC8vIERlZmluZSB0aGUgdHdvIHR5cGVzIG9mIEpTQ2Fs
bGJhY2tPYmplY3RzIHdlIHN1cHBvcnQuCiB0ZW1wbGF0ZSA8PiBjb25zdCBDbGFzc0luZm8gSlND
YWxsYmFja09iamVjdDxKU05vbkZpbmFsT2JqZWN0Pjo6c19pbmZvID0geyAiQ2FsbGJhY2tPYmpl
Y3QiLCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxF
KEpTQ2FsbGJhY2tPYmplY3QpIH07CiB0ZW1wbGF0ZSA8PiBjb25zdCBDbGFzc0luZm8gSlNDYWxs
YmFja09iamVjdDxKU0dsb2JhbE9iamVjdD46OnNfaW5mbyA9IHsgIkNhbGxiYWNrR2xvYmFsT2Jq
ZWN0IiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJM
RShKU0NhbGxiYWNrT2JqZWN0KSB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9K
U0NhbGxiYWNrT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQ
SS9KU0NhbGxiYWNrT2JqZWN0LmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwNyBFcmljIFNlaWRlbCA8ZXJpY0B3
ZWJraXQub3JnPgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtNjksNyArNjksMTAgQEAgcHVibGljOgog
ICAgICAgICBtX3ByaXZhdGVQcm9wZXJ0aWVzLT5kZWxldGVQcml2YXRlUHJvcGVydHkocHJvcGVy
dHlOYW1lKTsKICAgICB9CiAKLSAgICB2b2lkIHZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZp
c2l0b3IpCisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKKworICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFZpc2l0b3I+CisgICAgdm9pZCB2aXNpdENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiAg
ICAgewogICAgICAgICBKU1ByaXZhdGVQcm9wZXJ0eU1hcCogcHJvcGVydGllcyA9IG1fcHJpdmF0
ZVByb3BlcnRpZXMuZ2V0KCk7CiAgICAgICAgIGlmICghcHJvcGVydGllcykKQEAgLTEwMyw3ICsx
MDYsOCBAQCBwdWJsaWM6CiAgICAgICAgICAgICBtX3Byb3BlcnR5TWFwLnJlbW92ZShwcm9wZXJ0
eU5hbWUuaW1wbCgpKTsKICAgICAgICAgfQogCi0gICAgICAgIHZvaWQgdmlzaXRDaGlsZHJlbihT
bG90VmlzaXRvciYgdmlzaXRvcikKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4K
KyAgICAgICAgdm9pZCB2aXNpdENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiAgICAgICAgIHsK
ICAgICAgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fbG9jayk7CiAgICAgICAgICAgICBmb3Ig
KGF1dG8mIHBhaXIgOiBtX3Byb3BlcnR5TWFwKSB7CkBAIC0yMTYsMTMgKzIyMCw3IEBAIHByaXZh
dGU6CiAgICAgc3RhdGljIENhbGxEYXRhIGdldENvbnN0cnVjdERhdGEoSlNDZWxsKik7CiAgICAg
c3RhdGljIENhbGxEYXRhIGdldENhbGxEYXRhKEpTQ2VsbCopOwogCi0gICAgc3RhdGljIHZvaWQg
dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQotICAgIHsK
LSAgICAgICAgSlNDYWxsYmFja09iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0NhbGxiYWNr
T2JqZWN0Kj4oY2VsbCk7Ci0gICAgICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoKHN0YXRp
Y19jYXN0PFBhcmVudCo+KHRoaXNPYmplY3QpKSwgSlNDYWxsYmFja09iamVjdDxQYXJlbnQ+Ojpp
bmZvKCkpOwotICAgICAgICBQYXJlbnQ6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRv
cik7Ci0gICAgICAgIHRoaXNPYmplY3QtPm1fY2FsbGJhY2tPYmplY3REYXRhLT52aXNpdENoaWxk
cmVuKHZpc2l0b3IpOwotICAgIH0KKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAg
dm9pZCBpbml0KEpTR2xvYmFsT2JqZWN0Kik7CiAgCkBAIC0yNDUsNiArMjQzLDE2IEBAIHByaXZh
dGU6CiAgICAgY29uc3QgQ2xhc3NJbmZvKiBtX2NsYXNzSW5mbyB7IG51bGxwdHIgfTsKIH07CiAK
K3RlbXBsYXRlIDxjbGFzcyBQYXJlbnQ+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9p
ZCBKU0NhbGxiYWNrT2JqZWN0PFBhcmVudD46OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2Vs
bCwgVmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBKU0NhbGxiYWNrT2JqZWN0KiB0aGlzT2JqZWN0
ID0ganNDYXN0PEpTQ2FsbGJhY2tPYmplY3QqPihjZWxsKTsKKyAgICBBU1NFUlRfR0NfT0JKRUNU
X0lOSEVSSVRTKChzdGF0aWNfY2FzdDxQYXJlbnQqPih0aGlzT2JqZWN0KSksIEpTQ2FsbGJhY2tP
YmplY3Q8UGFyZW50Pjo6aW5mbygpKTsKKyAgICBQYXJlbnQ6OnZpc2l0Q2hpbGRyZW4odGhpc09i
amVjdCwgdmlzaXRvcik7CisgICAgdGhpc09iamVjdC0+bV9jYWxsYmFja09iamVjdERhdGEtPnZp
c2l0Q2hpbGRyZW4odmlzaXRvcik7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAvLyBpbmNs
dWRlIHRoZSBhY3R1YWwgdGVtcGxhdGUgY2xhc3MgaW1wbGVtZW50YXRpb24KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNNYW5hZ2VkVmFsdWUubW0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU01hbmFnZWRWYWx1ZS5tbQkocmV2aXNpb24gMjcyODMw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU01hbmFnZWRWYWx1ZS5tbQkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC00Miw3ICs0Miw3IEBACiBjbGFzcyBKU01hbmFnZWRWYWx1ZUhhbmRsZU93
bmVyIGZpbmFsIDogcHVibGljIEpTQzo6V2Vha0hhbmRsZU93bmVyIHsKIHB1YmxpYzoKICAgICB2
b2lkIGZpbmFsaXplKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQpIGZp
bmFsOwotICAgIGJvb2wgaXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlND
OjpVbmtub3duPiwgdm9pZCogY29udGV4dCwgSlNDOjpTbG90VmlzaXRvciYsIGNvbnN0IGNoYXIq
KikgZmluYWw7CisgICAgYm9vbCBpc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRs
ZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0LCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3Im
LCBjb25zdCBjaGFyKiopIGZpbmFsOwogfTsKIAogc3RhdGljIEpTTWFuYWdlZFZhbHVlSGFuZGxl
T3duZXImIG1hbmFnZWRWYWx1ZUhhbmRsZU93bmVyKCkKQEAgLTE4MCw3ICsxODAsNyBAQCBAaW50
ZXJmYWNlIEpTTWFuYWdlZFZhbHVlIChQcml2YXRlTWV0aG9kCiAtICh2b2lkKWRpc2Nvbm5lY3RW
YWx1ZTsKIEBlbmQKIAotYm9vbCBKU01hbmFnZWRWYWx1ZUhhbmRsZU93bmVyOjppc1JlYWNoYWJs
ZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0
LCBKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQorYm9vbCBK
U01hbmFnZWRWYWx1ZUhhbmRsZU93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6
OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0LCBKU0M6OkFic3RyYWN0U2xvdFZp
c2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCiB7CiAgICAgaWYgKFVOTElLRUxZ
KHJlYXNvbikpCiAgICAgICAgICpyZWFzb24gPSAiSlNNYW5hZ2VkVmFsdWUgaXMgb3BhcXVlIHJv
b3QiOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU01hcmtpbmdDb25zdHJhaW50
UHJpdmF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU01h
cmtpbmdDb25zdHJhaW50UHJpdmF0ZS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9BUEkvSlNNYXJraW5nQ29uc3RyYWludFByaXZhdGUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zNiw3ICszNiw3IEBAIG5hbWVzcGFjZSB7CiBBdG9taWM8dW5zaWduZWQ+IGNv
bnN0cmFpbnRDb3VudGVyOwogCiBzdHJ1Y3QgTWFya2VyIDogSlNNYXJrZXIgewotICAgIFNsb3RW
aXNpdG9yKiB2aXNpdG9yOworICAgIEFic3RyYWN0U2xvdFZpc2l0b3IqIHZpc2l0b3I7CiB9Owog
CiBib29sIGlzTWFya2VkKEpTTWFya2VyUmVmIG1hcmtlclJlZiwgSlNPYmplY3RSZWYgb2JqZWN0
UmVmKQpAQCAtNDQsNyArNDQsNyBAQCBib29sIGlzTWFya2VkKEpTTWFya2VyUmVmIG1hcmtlclJl
ZiwgSlNPCiAgICAgaWYgKCFvYmplY3RSZWYpCiAgICAgICAgIHJldHVybiB0cnVlOyAvLyBOdWxs
IGlzIGFuIGltbW9ydGFsIG9iamVjdC4KICAgICAKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8TWFy
a2VyKj4obWFya2VyUmVmKS0+dmlzaXRvci0+dm0oKS5oZWFwLmlzTWFya2VkKHRvSlMob2JqZWN0
UmVmKSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PE1hcmtlcio+KG1hcmtlclJlZiktPnZpc2l0
b3ItPmlzTWFya2VkKHRvSlMob2JqZWN0UmVmKSk7CiB9CiAKIHZvaWQgbWFyayhKU01hcmtlclJl
ZiBtYXJrZXJSZWYsIEpTT2JqZWN0UmVmIG9iamVjdFJlZikKQEAgLTczLDE0ICs3MywxNCBAQCB2
b2lkIEpTQ29udGV4dEdyb3VwQWRkTWFya2luZ0NvbnN0cmFpbnQoCiAgICAgYXV0byBjb25zdHJh
aW50ID0gbWFrZVVuaXF1ZTxTaW1wbGVNYXJraW5nQ29uc3RyYWludD4oCiAgICAgICAgIHRvQ1N0
cmluZygiQW1jIiwgY29uc3RyYWludEluZGV4LCAiKCIsIFJhd1BvaW50ZXIoYml0d2lzZV9jYXN0
PHZvaWQqPihjb25zdHJhaW50Q2FsbGJhY2spKSwgIikiKSwKICAgICAgICAgdG9DU3RyaW5nKCJB
UEkgTWFya2luZyBDb25zdHJhaW50ICMiLCBjb25zdHJhaW50SW5kZXgsICIgKCIsIFJhd1BvaW50
ZXIoYml0d2lzZV9jYXN0PHZvaWQqPihjb25zdHJhaW50Q2FsbGJhY2spKSwgIiwgIiwgUmF3UG9p
bnRlcih1c2VyRGF0YSksICIpIiksCi0gICAgICAgIFtjb25zdHJhaW50Q2FsbGJhY2ssIHVzZXJE
YXRhXSAoU2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsKKyAgICAgICAgTUFLRV9NQVJLSU5HX0NPTlNU
UkFJTlRfRVhFQ1VUT1JfUEFJUigoW2NvbnN0cmFpbnRDYWxsYmFjaywgdXNlckRhdGFdIChBYnN0
cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKSB7CiAgICAgICAgICAgICBNYXJrZXIgbWFya2VyOwog
ICAgICAgICAgICAgbWFya2VyLklzTWFya2VkID0gaXNNYXJrZWQ7CiAgICAgICAgICAgICBtYXJr
ZXIuTWFyayA9IG1hcms7CiAgICAgICAgICAgICBtYXJrZXIudmlzaXRvciA9ICZ2aXNpdG9yOwog
ICAgICAgICAgICAgCiAgICAgICAgICAgICBjb25zdHJhaW50Q2FsbGJhY2soJm1hcmtlciwgdXNl
ckRhdGEpOwotICAgICAgICB9LAorICAgICAgICB9KSksCiAgICAgICAgIHZvbGF0aWxpdHksCiAg
ICAgICAgIENvbnN0cmFpbnRDb25jdXJyZW5jeTo6U2VxdWVudGlhbCk7CiAgICAgCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmlydHVhbE1hY2hpbmUubW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1ZpcnR1YWxNYWNoaW5lLm1tCShyZXZpc2lv
biAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmlydHVhbE1hY2hpbmUu
bW0JKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0zMTUsNyArMzE1LDcgQEAgKyAodm9pZClzZXRDcmFzaE9u
Vk1DcmVhdGlvbjooQk9PTClzaG91bAogCiBAZW5kCiAKLXN0YXRpYyB2b2lkIHNjYW5FeHRlcm5h
bE9iamVjdEdyYXBoKEpTQzo6Vk0mIHZtLCBKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yLCB2b2lk
KiByb290LCBib29sIGxvY2tBY3F1aXJlZCkKK3N0YXRpYyB2b2lkIHNjYW5FeHRlcm5hbE9iamVj
dEdyYXBoKEpTQzo6Vk0mIHZtLCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIHZv
aWQqIHJvb3QsIGJvb2wgbG9ja0FjcXVpcmVkKQogewogICAgIEBhdXRvcmVsZWFzZXBvb2wgewog
ICAgICAgICBKU1ZpcnR1YWxNYWNoaW5lICp2aXJ0dWFsTWFjaGluZSA9IFtKU1ZNV3JhcHBlckNh
Y2hlIHdyYXBwZXJGb3JKU0NvbnRleHRHcm91cFJlZjp0b1JlZigmdm0pXTsKQEAgLTM0NywxMyAr
MzQ3LDEzIEBAIHN0YXRpYyB2b2lkIHNjYW5FeHRlcm5hbE9iamVjdEdyYXBoKEpTQzoKICAgICB9
CiB9CiAKLXZvaWQgc2NhbkV4dGVybmFsT2JqZWN0R3JhcGgoSlNDOjpWTSYgdm0sIEpTQzo6U2xv
dFZpc2l0b3ImIHZpc2l0b3IsIHZvaWQqIHJvb3QpCit2b2lkIHNjYW5FeHRlcm5hbE9iamVjdEdy
YXBoKEpTQzo6Vk0mIHZtLCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIHZvaWQq
IHJvb3QpCiB7CiAgICAgYm9vbCBsb2NrQWNxdWlyZWQgPSBmYWxzZTsKICAgICBzY2FuRXh0ZXJu
YWxPYmplY3RHcmFwaCh2bSwgdmlzaXRvciwgcm9vdCwgbG9ja0FjcXVpcmVkKTsKIH0KIAotdm9p
ZCBzY2FuRXh0ZXJuYWxSZW1lbWJlcmVkU2V0KEpTQzo6Vk0mIHZtLCBKU0M6OlNsb3RWaXNpdG9y
JiB2aXNpdG9yKQordm9pZCBzY2FuRXh0ZXJuYWxSZW1lbWJlcmVkU2V0KEpTQzo6Vk0mIHZtLCBK
U0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgQGF1dG9yZWxlYXNlcG9v
bCB7CiAgICAgICAgIEpTVmlydHVhbE1hY2hpbmUgKnZpcnR1YWxNYWNoaW5lID0gW0pTVk1XcmFw
cGVyQ2FjaGUgd3JhcHBlckZvckpTQ29udGV4dEdyb3VwUmVmOnRvUmVmKCZ2bSldOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1ZpcnR1YWxNYWNoaW5lSW50ZXJuYWwuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmlydHVhbE1hY2hpbmVJbnRl
cm5hbC5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pT
VmlydHVhbE1hY2hpbmVJbnRlcm5hbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMyLDcgKzMyLDcg
QEAKIAogbmFtZXNwYWNlIEpTQyB7CiBjbGFzcyBWTTsKLWNsYXNzIFNsb3RWaXNpdG9yOworY2xh
c3MgQWJzdHJhY3RTbG90VmlzaXRvcjsKIH0KIAogI2lmIGRlZmluZWQoX19PQkpDX18pCkBAIC01
NCw4ICs1NCw4IEBAIEpTQ29udGV4dEdyb3VwUmVmIGdldEdyb3VwRnJvbVZpcnR1YWxNYWMKIAog
I2VuZGlmIC8vIGRlZmluZWQoX19PQkpDX18pCiAKLXZvaWQgc2NhbkV4dGVybmFsT2JqZWN0R3Jh
cGgoSlNDOjpWTSYsIEpTQzo6U2xvdFZpc2l0b3ImLCB2b2lkKiByb290KTsKLXZvaWQgc2NhbkV4
dGVybmFsUmVtZW1iZXJlZFNldChKU0M6OlZNJiwgSlNDOjpTbG90VmlzaXRvciYpOwordm9pZCBz
Y2FuRXh0ZXJuYWxPYmplY3RHcmFwaChKU0M6OlZNJiwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9y
Jiwgdm9pZCogcm9vdCk7Cit2b2lkIHNjYW5FeHRlcm5hbFJlbWVtYmVyZWRTZXQoSlNDOjpWTSYs
IEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpOwogCiAjZW5kaWYgLy8gSlNDX09CSkNfQVBJX0VO
QUJMRUQKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9NYXJrZWRKU1ZhbHVlUmVm
QXJyYXkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvTWFya2Vk
SlNWYWx1ZVJlZkFycmF5LmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL0FQSS9NYXJrZWRKU1ZhbHVlUmVmQXJyYXkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAtMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ2LDcg
KzQ2LDggQEAgTWFya2VkSlNWYWx1ZVJlZkFycmF5Ojp+TWFya2VkSlNWYWx1ZVJlZgogICAgICAg
ICByZW1vdmUoKTsKIH0KIAotdm9pZCBNYXJrZWRKU1ZhbHVlUmVmQXJyYXk6OnZpc2l0QWdncmVn
YXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3Zv
aWQgTWFya2VkSlNWYWx1ZVJlZkFycmF5Ojp2aXNpdEFnZ3JlZ2F0ZShWaXNpdG9yJiB2aXNpdG9y
KQogewogICAgIEpTVmFsdWVSZWYqIGJ1ZmZlciA9IGRhdGEoKTsKICAgICBmb3IgKHVuc2lnbmVk
IGluZGV4ID0gMDsgaW5kZXggPCBtX3NpemU7ICsraW5kZXgpIHsKQEAgLTYyLDQgKzYzLDcgQEAg
dm9pZCBNYXJrZWRKU1ZhbHVlUmVmQXJyYXk6OnZpc2l0QWdncmVnYQogICAgIH0KIH0KIAordGVt
cGxhdGUgdm9pZCBNYXJrZWRKU1ZhbHVlUmVmQXJyYXk6OnZpc2l0QWdncmVnYXRlKEFic3RyYWN0
U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgTWFya2VkSlNWYWx1ZVJlZkFycmF5Ojp2aXNp
dEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYpOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvTWFya2VkSlNWYWx1ZVJlZkFycmF5LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9NYXJrZWRKU1ZhbHVlUmVmQXJyYXkuaAko
cmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9NYXJrZWRKU1Zh
bHVlUmVmQXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDIwLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02Miw3ICs2Miw3IEBAIHB1YmxpYzoKICAgICAg
ICAgcmV0dXJuIG1faW5saW5lQnVmZmVyOwogICAgIH0KIAotICAgIHZvaWQgdmlzaXRBZ2dyZWdh
dGUoU2xvdFZpc2l0b3ImKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIHZp
c2l0QWdncmVnYXRlKFZpc2l0b3ImKTsKIAogcHJpdmF0ZToKICAgICB1bnNpZ25lZCBtX3NpemU7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNBUElXcmFwcGVyR2xvYmFs
T2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIv
SlNBUElXcmFwcGVyR2xvYmFsT2JqZWN0LmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQVBJV3JhcHBlckdsb2JhbE9iamVjdC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTU5LDYgKzU5LDggQEAgc3RhdGljIEpTQ19ERUNMQVJFX0hPU1RfRlVO
Q1RJT04oY29uc3RydQogc3RhdGljIEpTQ19ERUNMQVJFX0NVU1RPTV9HRVRURVIoY2FsbGJhY2tH
ZXR0ZXJKU0FQSVdyYXBwZXJHbG9iYWxPYmplY3RDYWxsYmFja09iamVjdCk7CiBzdGF0aWMgSlND
X0RFQ0xBUkVfQ1VTVE9NX0dFVFRFUihzdGF0aWNGdW5jdGlvbkdldHRlckpTQVBJV3JhcHBlckds
b2JhbE9iamVjdENhbGxiYWNrT2JqZWN0KTsKIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOX1dJVEhf
TU9ESUZJRVIodGVtcGxhdGU8PiwgSlNDYWxsYmFja09iamVjdDxKU0FQSVdyYXBwZXJHbG9iYWxP
YmplY3Q+KTsKKwogdGVtcGxhdGUgPD4gY29uc3QgQ2xhc3NJbmZvIEpTQ2FsbGJhY2tPYmplY3Q8
SlNBUElXcmFwcGVyR2xvYmFsT2JqZWN0Pjo6c19pbmZvID0geyAiSlNBUElXcmFwcGVyR2xvYmFs
T2JqZWN0IiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9U
QUJMRShKU0NhbGxiYWNrT2JqZWN0KSB9OwogdGVtcGxhdGU8PiBjb25zdCBib29sIEpTQ2FsbGJh
Y2tPYmplY3Q8SlNBUElXcmFwcGVyR2xvYmFsT2JqZWN0Pjo6bmVlZHNEZXN0cnVjdGlvbiA9IHRy
dWU7CiAKQEAgLTE0NCw5ICsxNDYsNCBAQCB2b2lkIEpTQVBJV3JhcHBlckdsb2JhbE9iamVjdDo6
ZmluaXNoQ3JlCiAgICAgV2Vha1NldDo6YWxsb2NhdGUodGhpcywganNBUElXcmFwcGVyR2xvYmFs
T2JqZWN0SGFuZGxlT3duZXIoKSwgMCk7IC8vIEJhbGFuY2VkIGluIEpTQVBJV3JhcHBlckdsb2Jh
bE9iamVjdEhhbmRsZU93bmVyOjpmaW5hbGl6ZS4KIH0KIAotdm9pZCBKU0FQSVdyYXBwZXJHbG9i
YWxPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBKU0M6OlNsb3RWaXNpdG9yJiB2
aXNpdG9yKQotewotICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4oY2VsbCwgdmlzaXRvcik7Ci19Ci0K
IH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGli
L0pTQVBJV3JhcHBlckdsb2JhbE9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvZ2xpYi9KU0FQSVdyYXBwZXJHbG9iYWxPYmplY3QuaAkocmV2aXNpb24gMjcy
ODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQVBJV3JhcHBlckdsb2Jh
bE9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw3ICszOSw2IEBAIHB1YmxpYzoKICAgICBz
dGF0aWMgdm9pZCBzdWJzcGFjZUZvcihWTSYpIHsgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsgfQogCiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOwotICAgIHN0YXRpYyB2b2lkIHZp
c2l0Q2hpbGRyZW4oSlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpOwogCiAgICAgSlNDR0xpYldy
YXBwZXJPYmplY3QqIHdyYXBwZWRPYmplY3QoKSBjb25zdCB7IHJldHVybiBtX3dyYXBwZWRPYmpl
Y3Q7IH0KICAgICB2b2lkIHNldFdyYXBwZWRPYmplY3QoSlNDR0xpYldyYXBwZXJPYmplY3QqIHdy
YXBwZWRPYmplY3QpIHsgbV93cmFwcGVkT2JqZWN0ID0gd3JhcHBlZE9iamVjdDsgfQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQVBJV3JhcHBlck9iamVjdEdMaWIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0FQSVdyYXBw
ZXJPYmplY3RHTGliLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL0FQSS9nbGliL0pTQVBJV3JhcHBlck9iamVjdEdMaWIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSlNBUElXcmFw
cGVyT2JqZWN0LmgiCiAKKyNpbmNsdWRlICJBYnN0cmFjdFNsb3RWaXNpdG9yLmgiCiAjaW5jbHVk
ZSAiSlNDR0xpYldyYXBwZXJPYmplY3QuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5j
bHVkZSAiSlNDYWxsYmFja09iamVjdC5oIgpAQCAtMzYsNyArMzcsNyBAQAogY2xhc3MgSlNBUElX
cmFwcGVyT2JqZWN0SGFuZGxlT3duZXIgZmluYWwgOiBwdWJsaWMgSlNDOjpXZWFrSGFuZGxlT3du
ZXIgewogcHVibGljOgogICAgIHZvaWQgZmluYWxpemUoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3du
Piwgdm9pZCopIGZpbmFsOwotICAgIGJvb2wgaXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlND
OjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCwgSlNDOjpTbG90VmlzaXRvciYs
IGNvbnN0IGNoYXIqKikgZmluYWw7CisgICAgYm9vbCBpc1JlYWNoYWJsZUZyb21PcGFxdWVSb290
cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0LCBKU0M6OkFic3RyYWN0
U2xvdFZpc2l0b3ImLCBjb25zdCBjaGFyKiopIGZpbmFsOwogfTsKIAogc3RhdGljIEpTQVBJV3Jh
cHBlck9iamVjdEhhbmRsZU93bmVyKiBqc0FQSVdyYXBwZXJPYmplY3RIYW5kbGVPd25lcigpCkBA
IC01NSw3ICs1Niw3IEBAIHZvaWQgSlNBUElXcmFwcGVyT2JqZWN0SGFuZGxlT3duZXI6OmZpbmEK
ICAgICBKU0M6OldlYWtTZXQ6OmRlYWxsb2NhdGUoSlNDOjpXZWFrSW1wbDo6YXNXZWFrSW1wbCho
YW5kbGUuc2xvdCgpKSk7CiB9CiAKLWJvb2wgSlNBUElXcmFwcGVyT2JqZWN0SGFuZGxlT3duZXI6
OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFu
ZGxlLCB2b2lkKiwgSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqKQorYm9v
bCBKU0FQSVdyYXBwZXJPYmplY3RIYW5kbGVPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9v
dHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBKU0M6OkFic3RyYWN0
U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKikKIHsKICAgICBKU0M6OkpTQVBJV3Jh
cHBlck9iamVjdCogd3JhcHBlck9iamVjdCA9IEpTQzo6anNDYXN0PEpTQzo6SlNBUElXcmFwcGVy
T2JqZWN0Kj4oaGFuZGxlLmdldCgpLmFzQ2VsbCgpKTsKICAgICAvLyBXZSB1c2UgdGhlIEpTR2xv
YmFsT2JqZWN0IHdoZW4gcHJvY2Vzc2luZyB3ZWFrIGhhbmRsZXMgdG8gcHJldmVudCB0aGUgc2l0
dWF0aW9uIHdoZXJlIHVzaW5nCkBAIC03Miw2ICs3Myw4IEBAIHN0YXRpYyBKU0NfREVDTEFSRV9I
T1NUX0ZVTkNUSU9OKGNvbnN0cnUKIHN0YXRpYyBKU0NfREVDTEFSRV9DVVNUT01fR0VUVEVSKGNh
bGxiYWNrR2V0dGVySlNBUElXcmFwcGVyT2JqZWN0Q2FsbGJhY2tPYmplY3QpOwogc3RhdGljIEpT
Q19ERUNMQVJFX0NVU1RPTV9HRVRURVIoc3RhdGljRnVuY3Rpb25HZXR0ZXJKU0FQSVdyYXBwZXJP
YmplY3RDYWxsYmFja09iamVjdCk7CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTl9XSVRIX01PRElG
SUVSKHRlbXBsYXRlPD4sIEpTQ2FsbGJhY2tPYmplY3Q8SlNBUElXcmFwcGVyT2JqZWN0Pik7CisK
IHRlbXBsYXRlIDw+IGNvbnN0IENsYXNzSW5mbyBKU0NhbGxiYWNrT2JqZWN0PEpTQVBJV3JhcHBl
ck9iamVjdD46OnNfaW5mbyA9IHsgIkpTQVBJV3JhcHBlck9iamVjdCIsICZCYXNlOjpzX2luZm8s
IG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNDYWxsYmFja09iamVjdCkg
fTsKIHRlbXBsYXRlPD4gY29uc3QgYm9vbCBKU0NhbGxiYWNrT2JqZWN0PEpTQVBJV3JhcHBlck9i
amVjdD46Om5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOwogCkBAIC0xNTUsOSArMTU4LDEyIEBAIHZv
aWQgSlNBUElXcmFwcGVyT2JqZWN0OjpzZXRXcmFwcGVkT2JqZWMKICAgICBtX3dyYXBwZWRPYmpl
Y3QgPSB3cmFwcGVkT2JqZWN0OwogfQogCi12b2lkIEpTQVBJV3JhcHBlck9iamVjdDo6dmlzaXRD
aGlsZHJlbihKU0NlbGwqIGNlbGwsIEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0
ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0FQSVdyYXBwZXJPYmplY3Q6OnZpc2l0Q2hpbGRy
ZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBCYXNlOjp2aXNp
dENoaWxkcmVuKGNlbGwsIHZpc2l0b3IpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU5fV0lU
SF9NT0RJRklFUihKU19FWFBPUlRfUFJJVkFURSwgSlNBUElXcmFwcGVyT2JqZWN0KTsKKwogfSAv
LyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNp
b24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTExNTgsNiArMTE1OCw3IEBA
CiAJCTY1QjgzOTJFMUJBQ0FEMzYwMDQ0RTgyNCAvKiBDYWNoZWRSZWNvdmVyeS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjVCODM5MkMxQkFDQTkyQTAw
NDRFODI0IC8qIENhY2hlZFJlY292ZXJ5LmggKi87IH07CiAJCTZBMzhDRkFBMUUzMkI1QUIwMDYw
MjA2RiAvKiBBc3luY1N0YWNrVHJhY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDZBMzhDRkE4MUUzMkI1OEIwMDYwMjA2RiAvKiBBc3luY1N0YWNrVHJh
Y2UuaCAqLzsgfTsKIAkJNkFEMkNCNEQxOUI5MTQwMTAwMDY1NzE5IC8qIERlYnVnZ2VyRXZhbEVu
YWJsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZB
RDJDQjRDMTlCOTE0MDEwMDA2NTcxOSAvKiBEZWJ1Z2dlckV2YWxFbmFibGVyLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNkJDQ0VDMDQyNUQxRkEy
NzAwMEYzOTFEIC8qIFZlcmlmaWVyU2xvdFZpc2l0b3JJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2QkNDRUMwMzI1RDFGQTI3MDAwRjM5MUQg
LyogVmVyaWZpZXJTbG90VmlzaXRvcklubGluZXMuaCAqLzsgfTsKIAkJNzAxMTNENEMxQThEQjA5
MzAwMzg0OEM0IC8qIEl0ZXJhdG9yT3BlcmF0aW9ucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzAxMTNENEExQThEQjA5MzAwMzg0OEM0IC8qIEl0ZXJh
dG9yT3BlcmF0aW9ucy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTcwMTNDQThDMUI0OTFBOTQwMENBRTYxMyAvKiBKU01pY3JvdGFzay5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzAxM0NBOEExQjQ5MUE5
NDAwQ0FFNjEzIC8qIEpTTWljcm90YXNrLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzA1QjQxQUMxQTZFNTAxRTAwNzE2NzU3IC8qIFN5bWJvbC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzA1QjQxQTQx
QTZFNTAxRTAwNzE2NzU3IC8qIFN5bWJvbC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CkBAIC0xOTE2LDYgKzE5MTcsNyBAQAogCQlFM0ZGNzUzMzFEOUNF
QTE4MDBDN0UxNkQgLyogRE9NSklUR2V0dGVyU2V0dGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFM0ZGNzUyRjFEOUNFQTEyMDBDN0UxNkQgLyogRE9N
SklUR2V0dGVyU2V0dGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJRTQ5REMxNkMxMkVGMjk0RTAwMTg0QTFGIC8qIFNvdXJjZVByb3ZpZGVyQ2Fj
aGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0OURD
MTUxMTJFRjI3MjIwMDE4NEExRiAvKiBTb3VyY2VQcm92aWRlckNhY2hlLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTQ5REMxNkQxMkVGMjk1MzAw
MTg0QTFGIC8qIFNvdXJjZVByb3ZpZGVyQ2FjaGVJdGVtLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDlEQzE0OTEyRUYyNjFBMDAxODRBMUYgLyogU291
cmNlUHJvdmlkZXJDYWNoZUl0ZW0uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OworCQlGRTA0MTU1MzI1MkVDMDczMDA5MUVCNUQgLyogU2xvdFZpc2l0b3JN
YWNyb3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZF
MDQxNTUyMjUyRUMwNzMwMDkxRUI1RCAvKiBTbG90VmlzaXRvck1hY3Jvcy5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUZFMDVGQUZEMUZFNENFREEw
MDA5MzIzMCAvKiBEZXByZWNhdGVkSW5zcGVjdG9yVmFsdWVzLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk5MkQ2QTExMUZCRDQ5MUQwMDAyNDVGNCAv
KiBEZXByZWNhdGVkSW5zcGVjdG9yVmFsdWVzLmNwcCAqLzsgfTsKIAkJRkUwODZCQ0EyMTIzREVG
QjAwM0YyOTI5IC8qIEVudHJ5RnJhbWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEZFMDg2QkM5MjEyM0RFRkEwMDNGMjkyOSAvKiBFbnRyeUZyYW1lLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRkUwRDRB
MDYxQUI4REQwQTAwMkY1NEJGIC8qIEV4ZWN1dGlvblRpbWVMaW1pdFRlc3QuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUwRDRBMDQxQUI4REQwQTAw
MkY1NEJGIC8qIEV4ZWN1dGlvblRpbWVMaW1pdFRlc3QuY3BwICovOyB9OwpAQCAtMTkzOCw5ICsx
OTQwLDExIEBACiAJCUZFMUUyQzNGMjI0MERENTgwMEY2QjcyOSAvKiBNYWNyb0Fzc2VtYmxlckFS
TTY0RS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUx
RTJDM0UyMjQwRDMwQjAwRjZCNzI5IC8qIE1hY3JvQXNzZW1ibGVyQVJNNjRFLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRkUxRTJDNDAyMjQwREQ2
MjAwRjZCNzI5IC8qIEFSTTY0RUFzc2VtYmxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRkUxRTJDM0QyMjQwRDJGNjAwRjZCNzI5IC8qIEFSTTY0RUFz
c2VtYmxlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCUZFMjBDRTlFMTVGMDRBOTUwMERGMzQzMCAvKiBMTEludENMb29wLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTIwQ0U5QzE1RjA0QTk1MDBERjM0
MzAgLyogTExJbnRDTG9vcC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CisJCUZFMjg3RDAyMjUyRkIyRTgwMEQ3MjNGOSAvKiBWZXJpZmllclNsb3RWaXNp
dG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTI4
N0QwMTI1MkZCMkU4MDBENzIzRjkgLyogVmVyaWZpZXJTbG90VmlzaXRvci5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUZFMkE4NzYwMUYwMjM4MTYw
MEVCMzFCMiAvKiBNaW5pbXVtUmVzZXJ2ZWRab25lU2l6ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUyQTg3NUYxRjAyMzgxNjAwRUIzMUIyIC8qIE1p
bmltdW1SZXNlcnZlZFpvbmVTaXplLmggKi87IH07CiAJCUZFMzAyMkQzMUUzRDczQTUwMEJBQzQ5
MyAvKiBTaWdpbGxDcmFzaEFuYWx5emVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBGRTMwMjJEMTFFM0Q3Mzk2MDBCQUM0OTMgLyogU2lnaWxsQ3Jhc2hB
bmFseXplci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCUZFMzAyMkQ3MUU0Mjg1NzMwMEJBQzQ5MyAvKiBWTUluc3BlY3Rvci5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUzMDIyRDUxRTQyODU2NzAwQkFD
NDkzIC8qIFZNSW5zcGVjdG9yLmggKi87IH07CisJCUZFMzM2QjUzMjVEQjQ5N0QwMDk4RjAzNCAv
KiBNYXJraW5nQ29uc3RyYWludEV4ZWN1dG9yUGFpci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUzMzZCNTIyNURCNDk3RDAwOThGMDM0IC8qIE1hcmtp
bmdDb25zdHJhaW50RXhlY3V0b3JQYWlyLmggKi87IH07CiAJCUZFMzQyMjEyMUQ2QjgxQzMwMDMy
QkU4OCAvKiBUaHJvd1Njb3BlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBGRTM0MjIxMTFENkI4MThDMDAzMkJFODggLyogVGhyb3dTY29wZS5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUZFMzRFRTIxMjQz
OThBQUUwMEFBMkU3QyAvKiBFbnN1cmVTdGlsbEFsaXZlSGVyZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUzNEVFMjAyNDM5OEE5QTAwQUEyRTdDIC8q
IEVuc3VyZVN0aWxsQWxpdmVIZXJlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJRkUzODQyMzMyMzI0RDUxQjAwOURENDQ1IC8qIE9wdGlvbnNMaXN0
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTM4NDIz
MTIzMjRENTFCMDA5REQ0NDUgLyogT3B0aW9uc0xpc3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMTk3Niw2ICsxOTgwLDggQEAKIAkJRkU4MEMx
OTcxRDc3NUNERDAwODUxMEMwIC8qIENhdGNoU2NvcGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFODBDMTk2MUQ3NzVCMjcwMDg1MTBDMCAvKiBDYXRj
aFNjb3BlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJRkU4REU1NEIyM0FDMURBRDAwNUM5MTQyIC8qIENhY2hlYWJsZUlkZW50aWZpZXIuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFOERFNTRBMjNBQzFE
QUQwMDVDOTE0MiAvKiBDYWNoZWFibGVJZGVudGlmaWVyLmggKi87IH07CiAJCUZFOERFNTREMjNB
QzFFODYwMDVDOTE0MiAvKiBDYWNoZWFibGVJZGVudGlmaWVySW5saW5lcy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkU4REU1NEMyM0FDMUU4NjAwNUM5
MTQyIC8qIENhY2hlYWJsZUlkZW50aWZpZXJJbmxpbmVzLmggKi87IH07CisJCUZFOTEyQjRGMjUz
MTE5MzMwMEZBQkRERiAvKiBBYnN0cmFjdFNsb3RWaXNpdG9yLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTkxMkI0RTI1MzExOTMzMDBGQUJEREYgLyog
QWJzdHJhY3RTbG90VmlzaXRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CisJCUZFOTEyQjUxMjUzMTFBRDEwMEZBQkRERiAvKiBBYnN0cmFjdFNsb3RW
aXNpdG9ySW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gRkU5MTJCNTAyNTMxMUFEMTAwRkFCRERGIC8qIEFic3RyYWN0U2xvdFZpc2l0b3JJbmxp
bmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
RkU5OUIyNDkxQzI0QzNEMzAwQzgyMTU5IC8qIEpJVE5lZ0dlbmVyYXRvci5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkU5OUIyNDgxQzI0QjZEMzAwQzgy
MTU5IC8qIEpJVE5lZ0dlbmVyYXRvci5oICovOyB9OwogCQlGRUEwODYyMDE4MkI3QTA0MDBGNkQ4
NTEgLyogQnJlYWtwb2ludC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRkVBMDg2MUUxODJCN0EwNDAwRjZEODUxIC8qIEJyZWFrcG9pbnQuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlGRUEwODYyMTE4MkI3
QTA0MDBGNkQ4NTEgLyogRGVidWdnZXJQcmltaXRpdmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRUEwODYxRjE4MkI3QTA0MDBGNkQ4NTEgLyogRGVi
dWdnZXJQcmltaXRpdmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKQEAgLTM5ODgsNiArMzk5NCw3IEBACiAJCTZBMzhDRkE4MUUzMkI1OEIwMDYwMjA2
RiAvKiBBc3luY1N0YWNrVHJhY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
QXN5bmNTdGFja1RyYWNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZBRDJDQjRD
MTlCOTE0MDEwMDA2NTcxOSAvKiBEZWJ1Z2dlckV2YWxFbmFibGVyLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IERlYnVnZ2VyRXZhbEVuYWJsZXIuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNkJBOTNDOTU5MDQ4NEM1QkFEOTMxNkVBIC8qIEpTU2NyaXB0RmV0Y2hl
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1NjcmlwdEZldGNoZXIuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNkJDQ0VDMDMyNUQxRkEyNzAwMEYzOTFEIC8q
IFZlcmlmaWVyU2xvdFZpc2l0b3JJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFZlcmlmaWVyU2xvdFZpc2l0b3JJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTcwMTEzRDQ5MUE4REIwOTMwMDM4NDhDNCAvKiBJdGVyYXRvck9wZXJhdGlvbnMu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSXRlcmF0b3JPcGVyYXRp
b25zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzAxMTNENEExQThEQjA5MzAw
Mzg0OEM0IC8qIEl0ZXJhdG9yT3BlcmF0aW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBJdGVyYXRvck9wZXJhdGlvbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNzAxM0NBODkxQjQ5MUE5NDAwQ0FFNjEzIC8qIEpTTWljcm90YXNrLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTTWljcm90YXNrLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTUyMjEsNiArNTIyOCw3IEBACiAJCUY2OTJBODg3MDI1NTU5N0Qw
MUZGNjBGNyAvKiBKU0NKU1ZhbHVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTQ0pTVmFsdWUuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB0YWJXaWR0aCA9IDg7IH07CiAJCUY3MzkyNjkxOERDNjQzMzBBRkNERjBENyAvKiBK
U1NvdXJjZUNvZGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNT
b3VyY2VDb2RlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkUwMDI2MjIyM0Yz
QUYzMzAwM0EzNThGIC8qIFdlYkFzc2VtYmx5LmFzbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYXNtLmFzbTsgbmFtZSA9IFdlYkFz
c2VtYmx5LmFzbTsgcGF0aCA9IGxsaW50L1dlYkFzc2VtYmx5LmFzbTsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJRkUwNDE1NTIyNTJFQzA3MzAwOTFFQjVEIC8qIFNsb3RWaXNpdG9yTWFj
cm9zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNsb3RWaXNpdG9yTWFjcm9z
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFMDg2QkM5MjEyM0RFRkEwMDNGMjky
OSAvKiBFbnRyeUZyYW1lLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEVudHJ5
RnJhbWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkUwRDRBMDQxQUI4REQwQTAw
MkY1NEJGIC8qIEV4ZWN1dGlvblRpbWVMaW1pdFRlc3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBuYW1lID0gRXhlY3V0aW9uVGltZUxpbWl0VGVzdC5jcHA7IHBhdGggPSBBUEkv
dGVzdHMvRXhlY3V0aW9uVGltZUxpbWl0VGVzdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUZFMEQ0QTA1MUFCOEREMEEwMDJGNTRCRiAvKiBFeGVjdXRpb25UaW1lTGltaXRUZXN0
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEV4ZWN1dGlvblRpbWVMaW1pdFRl
c3QuaDsgcGF0aCA9IEFQSS90ZXN0cy9FeGVjdXRpb25UaW1lTGltaXRUZXN0Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01MjU1LDEyICs1MjYzLDE1IEBACiAJCUZFMUUyQzNFMjI0
MEQzMEIwMEY2QjcyOSAvKiBNYWNyb0Fzc2VtYmxlckFSTTY0RS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBNYWNyb0Fzc2VtYmxlckFSTTY0RS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlGRTIwQ0U5QjE1RjA0QTk1MDBERjM0MzAgLyogTExJbnRDTG9vcC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBMTEludENMb29wLmNwcDsgcGF0
aCA9IGxsaW50L0xMSW50Q0xvb3AuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlG
RTIwQ0U5QzE1RjA0QTk1MDBERjM0MzAgLyogTExJbnRDTG9vcC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBMTEludENMb29wLmg7IHBhdGggPSBsbGludC9MTEludENMb29wLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZFMjg3RDAxMjUyRkIyRTgwMEQ3MjNGOSAv
KiBWZXJpZmllclNsb3RWaXNpdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFZlcmlmaWVyU2xvdFZpc2l0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkUy
QTg3NUYxRjAyMzgxNjAwRUIzMUIyIC8qIE1pbmltdW1SZXNlcnZlZFpvbmVTaXplLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IE1pbmltdW1SZXNlcnZlZFpvbmVTaXplLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUZFMkJENjZFMjVDMERDODIwMDk5OUQzQiAvKiBWZXJpZmllclNsb3RWaXNpdG9y
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFZlcmlmaWVyU2xvdFZp
c2l0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTJFNkE3QTFENkVBNUZF
MDA2MEY4OTYgLyogVGhyb3dTY29wZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBUaHJvd1Njb3BlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkUz
MDIyRDAxRTNENzM5NjAwQkFDNDkzIC8qIFNpZ2lsbENyYXNoQW5hbHl6ZXIuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2lnaWxsQ3Jhc2hBbmFseXplci5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFMzAyMkQxMUUzRDczOTYwMEJBQzQ5MyAvKiBT
aWdpbGxDcmFzaEFuYWx5emVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNp
Z2lsbENyYXNoQW5hbHl6ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkUzMDIy
RDQxRTQyODU2NzAwQkFDNDkzIC8qIFZNSW5zcGVjdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFZNSW5zcGVjdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJRkUzMDIyRDUxRTQyODU2NzAwQkFDNDkzIC8qIFZNSW5zcGVjdG9yLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZNSW5zcGVjdG9yLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCUZFMzM2QjUyMjVEQjQ5N0QwMDk4RjAzNCAvKiBNYXJraW5nQ29uc3Ry
YWludEV4ZWN1dG9yUGFpci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNYXJr
aW5nQ29uc3RyYWludEV4ZWN1dG9yUGFpci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlGRTM0MjIxMTFENkI4MThDMDAzMkJFODggLyogVGhyb3dTY29wZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBUaHJvd1Njb3BlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUZFMzRFRTIwMjQzOThBOUEwMEFBMkU3QyAvKiBFbnN1cmVTdGlsbEFsaXZlSGVyZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBFbnN1cmVTdGlsbEFsaXZlSGVyZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlGRTM0RUUyMjI0Mzk4Qjg1MDBBQTJFN0MgLyogRW5zdXJlU3RpbGxBbGl2
ZUhlcmUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRW5zdXJlU3Rp
bGxBbGl2ZUhlcmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNTMyOSw2ICs1
MzQwLDggQEAKIAkJRkU4REU1NEMyM0FDMUU4NjAwNUM5MTQyIC8qIENhY2hlYWJsZUlkZW50aWZp
ZXJJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENhY2hlYWJsZUlk
ZW50aWZpZXJJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFOERFNTRF
MjNBQzNBOEUwMDVDOTE0MiAvKiBDYWNoZWFibGVJZGVudGlmaWVyLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IENhY2hlYWJsZUlkZW50aWZpZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlGRTkwQkIzQTFCN0NGNjRFMDA2QjNGMDMgLyogVk1JbmxpbmVzLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZNSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlGRTkxMkI0RTI1MzExOTMzMDBGQUJEREYgLyogQWJzdHJhY3RTbG90VmlzaXRvci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBYnN0cmFjdFNsb3RWaXNpdG9yLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZFOTEyQjUwMjUzMTFBRDEwMEZBQkRERiAv
KiBBYnN0cmFjdFNsb3RWaXNpdG9ySW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBBYnN0cmFjdFNsb3RWaXNpdG9ySW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlGRTk4QjVCNjFCQjlBRTExMDA3M0U3QTYgLyogSklUU3ViR2VuZXJhdG9yLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpJVFN1YkdlbmVyYXRvci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTk5QjI0NzFDMjRCNkQzMDBDODIxNTkgLyogSklU
TmVnR2VuZXJhdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpJ
VE5lZ0dlbmVyYXRvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFOTlCMjQ4
MUMyNEI2RDMwMEM4MjE1OSAvKiBKSVROZWdHZW5lcmF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSklUTmVnR2VuZXJhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC02Mjc4LDYgKzYyOTEsOCBAQAogCQkxNDJFMzEyQTEzNEZGMEE2MDBBRkFEQjUgLyog
aGVhcCAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJRkU5
MTJCNEUyNTMxMTkzMzAwRkFCRERGIC8qIEFic3RyYWN0U2xvdFZpc2l0b3IuaCAqLywKKwkJCQlG
RTkxMkI1MDI1MzExQUQxMDBGQUJEREYgLyogQWJzdHJhY3RTbG90VmlzaXRvcklubGluZXMuaCAq
LywKIAkJCQkwRkVDM0M1MDFGMzNBNDE2MDBGNTlCNkMgLyogQWxpZ25lZE1lbW9yeUFsbG9jYXRv
ci5jcHAgKi8sCiAJCQkJMEZFQzNDNTExRjMzQTQxNjAwRjU5QjZDIC8qIEFsaWduZWRNZW1vcnlB
bGxvY2F0b3IuaCAqLywKIAkJCQkwRkE3NjIwQTFEQjk1OUY2MDBCN0EyRkQgLyogQWxsb2NhdGlu
Z1Njb3BlLmggKi8sCkBAIC02NDA5LDYgKzY0MjQsNyBAQAogCQkJCTBGN0RGMTMwMUUyOTcwRDUw
MDk1OTUxQiAvKiBNYXJrZWRTcGFjZUlubGluZXMuaCAqLywKIAkJCQkwRjY2MEUzMzFFMDUxN0I3
MDAzMTQ2MkMgLyogTWFya2luZ0NvbnN0cmFpbnQuY3BwICovLAogCQkJCTBGNjYwRTM0MUUwNTE3
QjcwMDMxNDYyQyAvKiBNYXJraW5nQ29uc3RyYWludC5oICovLAorCQkJCUZFMzM2QjUyMjVEQjQ5
N0QwMDk4RjAzNCAvKiBNYXJraW5nQ29uc3RyYWludEV4ZWN1dG9yUGFpci5oICovLAogCQkJCTBG
NjYwRTM1MUUwNTE3QjcwMDMxNDYyQyAvKiBNYXJraW5nQ29uc3RyYWludFNldC5jcHAgKi8sCiAJ
CQkJMEY2NjBFMzYxRTA1MTdCODAwMzE0NjJDIC8qIE1hcmtpbmdDb25zdHJhaW50U2V0LmggKi8s
CiAJCQkJMEY5REFBMDYxRkQxQzNDODAwNzlDNUIyIC8qIE1hcmtpbmdDb25zdHJhaW50U29sdmVy
LmNwcCAqLywKQEAgLTY0MzUsNiArNjQ1MSw3IEBACiAJCQkJQzIyNTQ5NDIxNUY3REJBQTAwNjVF
ODk4IC8qIFNsb3RWaXNpdG9yLmNwcCAqLywKIAkJCQkxNEJBNzhGMDEzQUFCODhGMDA1QjdDMkMg
LyogU2xvdFZpc2l0b3IuaCAqLywKIAkJCQkwRkNCNDA4NTE1QzBBM0MzMDA0ODkzMkIgLyogU2xv
dFZpc2l0b3JJbmxpbmVzLmggKi8sCisJCQkJRkUwNDE1NTIyNTJFQzA3MzAwOTFFQjVEIC8qIFNs
b3RWaXNpdG9yTWFjcm9zLmggKi8sCiAJCQkJMEZERTg3RkExREZFNkU1MDAwNjRDMzkwIC8qIFNw
YWNlVGltZU11dGF0b3JTY2hlZHVsZXIuY3BwICovLAogCQkJCTBGREU4N0ZCMURGRTZFNTAwMDY0
QzM5MCAvKiBTcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyLmggKi8sCiAJCQkJMEY0RjgyODkxRTMx
Qjk3MTAwNzUxODRDIC8qIFN0b2NoYXN0aWNTcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyLmNwcCAq
LywKQEAgLTY0NTIsNiArNjQ2OSw5IEBACiAJCQkJMEYxRkIzOEExRTE3M0E2MjAwQTlCRTUwIC8q
IFN5bmNocm9ub3VzU3RvcFRoZVdvcmxkTXV0YXRvclNjaGVkdWxlci5jcHAgKi8sCiAJCQkJMEYx
RkIzOEIxRTE3M0E2MjAwQTlCRTUwIC8qIFN5bmNocm9ub3VzU3RvcFRoZVdvcmxkTXV0YXRvclNj
aGVkdWxlci5oICovLAogCQkJCTE0MTQ0OENDMTNBMTc4MzcwMEY1QkExQSAvKiBUaW55Qmxvb21G
aWx0ZXIuaCAqLywKKwkJCQlGRTJCRDY2RTI1QzBEQzgyMDA5OTlEM0IgLyogVmVyaWZpZXJTbG90
VmlzaXRvci5jcHAgKi8sCisJCQkJRkUyODdEMDEyNTJGQjJFODAwRDcyM0Y5IC8qIFZlcmlmaWVy
U2xvdFZpc2l0b3IuaCAqLywKKwkJCQk2QkNDRUMwMzI1RDFGQTI3MDAwRjM5MUQgLyogVmVyaWZp
ZXJTbG90VmlzaXRvcklubGluZXMuaCAqLywKIAkJCQkwRjREOEM3MjFGQzdBOTczMDAxRDMyQUMg
LyogVmlzaXRDb3VudGVyLmggKi8sCiAJCQkJMEY5NTJBOUYxREY3ODYwNzAwRTA2RkJEIC8qIFZp
c2l0UmFjZUtleS5jcHAgKi8sCiAJCQkJMEY5NTJBQTAxREY3ODYwNzAwRTA2RkJEIC8qIFZpc2l0
UmFjZUtleS5oICovLApAQCAtOTI5Myw2ICs5MzEzLDcgQEAKIAkJCQkxNDdCODNBQzBFNkRCOEM5
MDA0Nzc1QTQgLyogQmF0Y2hlZFRyYW5zaXRpb25PcHRpbWl6ZXIuaCBpbiBIZWFkZXJzICovLAog
CQkJCUUzNUU4OUZEMjVDNTBGODcwMDcxRUUxRSAvKiBCaWdJbnQ2NEFycmF5LmggaW4gSGVhZGVy
cyAqLywKIAkJCQk4Njk3NkU1RjFGQTNFOEJDMDBFN0M0RTEgLyogQmlnSW50Q29uc3RydWN0b3Iu
aCBpbiBIZWFkZXJzICovLAorCQkJCUZFMDQxNTUzMjUyRUMwNzMwMDkxRUI1RCAvKiBTbG90Vmlz
aXRvck1hY3Jvcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODY2NzM5RDIxM0JGREU3MTAwMjNEODdD
IC8qIEJpZ0ludGVnZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2MTgxNjc3MUZCNzkyNDIwMEVD
QzRFQyAvKiBCaWdJbnRPYmplY3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2OTc2RTVFMUZBM0U4
QjYwMEU3QzRFMSAvKiBCaWdJbnRQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovLApAQCAtOTU3NCw2
ICs5NTk1LDcgQEAKIAkJCQkwRkQ4MkU1NzE0MURBRjEwMDAxNzlDOTQgLyogREZHT1NSRW50cnku
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGRDhBMzI2MTdENTFGNTcwMENBMkM0MCAvKiBERkdPU1JF
bnRyeXBvaW50Q3JlYXRpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZDMDk3NkExNDY4
QTZGNzAwQ0YyNDQyIC8qIERGR09TUkV4aXQuaCBpbiBIZWFkZXJzICovLAorCQkJCUZFOTEyQjRG
MjUzMTE5MzMwMEZBQkRERiAvKiBBYnN0cmFjdFNsb3RWaXNpdG9yLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRjIzNUJFQzE3MTc4RTczMDA2OTBDN0YgLyogREZHT1NSRXhpdEJhc2UuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGRkI5MjFDMTZEMDJGMTEwMDU1QTVEQiAvKiBERkdPU1JFeGl0Q29tcGls
YXRpb25JbmZvLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjcwMjVBQTE3MTRCMEZDMDAzODJDMEUg
LyogREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmggaW4gSGVhZGVycyAqLywKQEAgLTk4NTksNiAr
OTg4MSw3IEBACiAJCQkJQTUxM0U1QkUxODVCRkFDQzAwN0U5NUFEIC8qIEluamVjdGVkU2NyaXB0
SG9zdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTUxM0U1Q0IxODVGOTYyNDAwN0U5NUFEIC8qIElu
amVjdGVkU2NyaXB0TWFuYWdlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTU4NDBFMjExODdCN0I4
NjAwODQzQjEwIC8qIEluamVjdGVkU2NyaXB0TW9kdWxlLmggaW4gSGVhZGVycyAqLywKKwkJCQlG
RTI4N0QwMjI1MkZCMkU4MDBENzIzRjkgLyogVmVyaWZpZXJTbG90VmlzaXRvci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQTUxM0U1QzcxODVGOTQ0NjAwN0U5NUFEIC8qIEluamVjdGVkU2NyaXB0U291
cmNlLmggaW4gSGVhZGVycyAqLywKIAkJCQk5OTU5RTkzMjFCRDE4Mjc5MDAxQUE0MTMgLyogaW5s
aW5lLWFuZC1taW5pZnktc3R5bGVzaGVldHMtYW5kLXNjcmlwdHMucHkgaW4gSGVhZGVycyAqLywK
IAkJCQk3OTA1QkI2OTFEMTIwNTBFMDAxOUZFNTcgLyogSW5saW5lQWNjZXNzLmggaW4gSGVhZGVy
cyAqLywKQEAgLTk5OTgsNiArMTAwMjEsNyBAQAogCQkJCTUzQzRGNjZCMjFCMUE0MDkwMDJGRDAw
OSAvKiBKU0FQSUdsb2JhbE9iamVjdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODQwNDgwMTMxMDIx
QTFEOTAwOEU3RjAxIC8qIEpTQVBJVmFsdWVXcmFwcGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlD
MkNGMzlDMjE2RTE1QTgxMDBERDY5QkUgLyogSlNBUElXcmFwcGVyT2JqZWN0LmggaW4gSGVhZGVy
cyAqLywKKwkJCQlGRTMzNkI1MzI1REI0OTdEMDA5OEYwMzQgLyogTWFya2luZ0NvbnN0cmFpbnRF
eGVjdXRvclBhaXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDE3MEUxNkY1Q0QwMEIzNDQ2
MCAvKiBKU0FycmF5LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCNjZFMzE3QjZCNUFCMDBBN0FF
M0YgLyogSlNBcnJheUJ1ZmZlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjY2RTUxN0I2QjVB
QjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCkBA
IC0xMDAzNCw2ICsxMDA1OCw3IEBACiAJCQkJQTU4QzAyNDIxOEU0QTQxQTAwMDMyQkM1IC8qIEpT
Q29udGV4dFByaXZhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDFFMEUxNkY1Q0QwMEIz
NDQ2MCAvKiBKU0NvbnRleHRSZWYuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1RUE3MEVFMTlGNUI1
QzQwMDk4RjVFQyAvKiBKU0NvbnRleHRSZWZJbnNwZWN0b3JTdXBwb3J0LmggaW4gSGVhZGVycyAq
LywKKwkJCQk2QkNDRUMwNDI1RDFGQTI3MDAwRjM5MUQgLyogVmVyaWZpZXJTbG90VmlzaXRvcklu
bGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1RDJFNjY1MTk1RTE3NDAwMEE1MThFNyAvKiBK
U0NvbnRleHRSZWZJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQ4Q0QxRDgxMDhDRjkw
MjAwODE2M0M2IC8qIEpTQ29udGV4dFJlZlByaXZhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUZF
NzQ5N0U2MjA5MDAxQjEwMDAzNTY1QiAvKiBKU0NQdHJUYWcuaCBpbiBIZWFkZXJzICovLApAQCAt
MTAxNjQsNiArMTAxODksNyBAQAogCQkJCTc5NUFDNjE4MjBBMjM1NUUwMDUyQzc2QyAvKiBKU1Zp
cnR1YWxNYWNoaW5lUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdDQTNBRTgxN0RBNDFB
RTAwNjUzOEFGIC8qIEpTV2Vha01hcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc0ODJFOTMxMTZB
N0NBRDAwM0IwNzEyIC8qIEpTV2Vha09iamVjdE1hcFJlZkludGVybmFsLmggaW4gSGVhZGVycyAq
LywKKwkJCQlGRTkxMkI1MTI1MzExQUQxMDBGQUJEREYgLyogQWJzdHJhY3RTbG90VmlzaXRvcklu
bGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3NDgyQjkzMTE2NzExNDcwMDNCMDcxMiAvKiBK
U1dlYWtPYmplY3RNYXBSZWZQcml2YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MzlCRkJCMDIy
QUQzQ0RDMDAyM0Y0QzAgLyogSlNXZWFrT2JqZWN0UmVmLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RjBCMjg2QjFFQjhFNkNGMDAwRUI1RDIgLyogSlNXZWFrUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8s
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy93a2J1aWx0aW5zL2J1aWx0aW5z
X2dlbmVyYXRlX2ludGVybmFsc193cmFwcGVyX2hlYWRlci5weQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy93a2J1aWx0aW5zL2J1aWx0aW5zX2dlbmVyYXRlX2lu
dGVybmFsc193cmFwcGVyX2hlYWRlci5weQkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL1NjcmlwdHMvd2tidWlsdGlucy9idWlsdGluc19nZW5lcmF0ZV9pbnRlcm5h
bHNfd3JhcHBlcl9oZWFkZXIucHkJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAjIS91
c3IvYmluL2VudiBweXRob24KICMKLSMgQ29weXJpZ2h0IChjKSAyMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyMgQ29weXJpZ2h0IChjKSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogIwogIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICMgbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC05Myw3
ICs5Myw3IEBAIGNsYXNzIEJ1aWx0aW5zSW50ZXJuYWxzV3JhcHBlckhlYWRlckdlbmUKIAogICAg
IGRlZiBnZW5lcmF0ZV9tZXRob2RzKHNlbGYpOgogICAgICAgICByZXR1cm4gIiIiCi0gICAgdm9p
ZCB2aXNpdChKU0M6OlNsb3RWaXNpdG9yJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRv
cj4gdm9pZCB2aXNpdChWaXNpdG9yJik7CiAgICAgdm9pZCBpbml0aWFsaXplKEpTRE9NR2xvYmFs
T2JqZWN0Jik7CiAiIiIKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvd2ti
dWlsdGlucy9idWlsdGluc19nZW5lcmF0ZV9pbnRlcm5hbHNfd3JhcHBlcl9pbXBsZW1lbnRhdGlv
bi5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy93a2J1aWx0
aW5zL2J1aWx0aW5zX2dlbmVyYXRlX2ludGVybmFsc193cmFwcGVyX2ltcGxlbWVudGF0aW9uLnB5
CShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy93a2J1
aWx0aW5zL2J1aWx0aW5zX2dlbmVyYXRlX2ludGVybmFsc193cmFwcGVyX2ltcGxlbWVudGF0aW9u
LnB5CSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogIyEvdXNyL2Jpbi9lbnYgcHl0aG9u
CiAjCi0jIENvcHlyaWdodCAoYykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisjIENvcHlyaWdodCAoYykgMjAxNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICMKICMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTIwLDEzICsxMjAsMTYgQEAgY2xh
c3MgQnVpbHRpbnNJbnRlcm5hbHNXcmFwcGVySW1wbGVtZW50YQogICAgICAgICByZXR1cm4gJ1xu
Jy5qb2luKGxpbmVzKQogCiAgICAgZGVmIGdlbmVyYXRlX3Zpc2l0X21ldGhvZChzZWxmKToKLSAg
ICAgICAgbGluZXMgPSBbInZvaWQgSlNCdWlsdGluSW50ZXJuYWxGdW5jdGlvbnM6OnZpc2l0KEpT
Qzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpIiwKKyAgICAgICAgbGluZXMgPSBbInRlbXBsYXRlPHR5
cGVuYW1lIFZpc2l0b3I+IiwKKyAgICAgICAgICAgICAgICAgInZvaWQgSlNCdWlsdGluSW50ZXJu
YWxGdW5jdGlvbnM6OnZpc2l0KFZpc2l0b3ImIHZpc2l0b3IpIiwKICAgICAgICAgICAgICAgICAg
InsiXQogICAgICAgICBmb3Igb2JqZWN0IGluIHNlbGYuaW50ZXJuYWxzOgogICAgICAgICAgICAg
dmlzaXQgPSAiICAgICVzLnZpc2l0KHZpc2l0b3IpOyIgJSBzZWxmLm1lbWJlcl9uYW1lKG9iamVj
dCkKICAgICAgICAgICAgIGxpbmVzLmFwcGVuZChCdWlsdGluc0dlbmVyYXRvci53cmFwX3dpdGhf
Z3VhcmQob2JqZWN0LmFubm90YXRpb25zLmdldCgnY29uZGl0aW9uYWwnKSwgdmlzaXQpKQogICAg
ICAgICBsaW5lcy5hcHBlbmQoIiAgICBVTlVTRURfUEFSQU0odmlzaXRvcik7IikKICAgICAgICAg
bGluZXMuYXBwZW5kKCJ9XG4iKQorICAgICAgICBsaW5lcy5hcHBlbmQoInRlbXBsYXRlIHZvaWQg
SlNCdWlsdGluSW50ZXJuYWxGdW5jdGlvbnM6OnZpc2l0KEFic3RyYWN0U2xvdFZpc2l0b3ImKTsi
KQorICAgICAgICBsaW5lcy5hcHBlbmQoInRlbXBsYXRlIHZvaWQgSlNCdWlsdGluSW50ZXJuYWxG
dW5jdGlvbnM6OnZpc2l0KFNsb3RWaXNpdG9yJik7XG4iKQogICAgICAgICByZXR1cm4gJ1xuJy5q
b2luKGxpbmVzKQogCiAgICAgZGVmIF9nZW5lcmF0ZV9pbml0aWFsaXplX3N0YXRpY19nbG9iYWxz
KHNlbGYpOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvd2tidWlsdGlucy9i
dWlsdGluc190ZW1wbGF0ZXMucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L1NjcmlwdHMvd2tidWlsdGlucy9idWlsdGluc190ZW1wbGF0ZXMucHkJKHJldmlzaW9uIDI3Mjgz
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL3drYnVpbHRpbnMvYnVpbHRpbnNf
dGVtcGxhdGVzLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogIyEvdXNyL2Jpbi9l
bnYgcHl0aG9uCiAjCi0jIENvcHlyaWdodCAoYykgMjAxNC0yMDE5IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyMgQ29weXJpZ2h0IChjKSAyMDE0LTIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogIyBDb3B5cmlnaHQgKEMpIDIwMTUgQ2Fub24gSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogIwogIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTE4OCw3ICsxODgsNyBAQCBwdWJsaWM6
CiAgICAgZXhwbGljaXQgJHtvYmplY3ROYW1lfUJ1aWx0aW5GdW5jdGlvbnMoSlNDOjpWTSYgdm0p
IDogbV92bSh2bSkgeyB9CiAKICAgICB2b2lkIGluaXQoSlNDOjpKU0dsb2JhbE9iamVjdCYpOwot
ICAgIHZvaWQgdmlzaXQoSlNDOjpTbG90VmlzaXRvciYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFZpc2l0b3I+IHZvaWQgdmlzaXQoVmlzaXRvciYpOwogCiBwdWJsaWM6CiAgICAgSlNDOjpWTSYg
bV92bTsKQEAgLTIwNywxMCArMjA3LDE1IEBAIGlubGluZSB2b2lkICR7b2JqZWN0TmFtZX1CdWls
dGluRnVuY3Rpb24KICN1bmRlZiBFWFBPUlRfRlVOQ1RJT04KIH0KIAotaW5saW5lIHZvaWQgJHtv
YmplY3ROYW1lfUJ1aWx0aW5GdW5jdGlvbnM6OnZpc2l0KEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0
b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgoraW5saW5lIHZvaWQgJHtvYmplY3ROYW1l
fUJ1aWx0aW5GdW5jdGlvbnM6OnZpc2l0KFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAjZGVmaW5lIFZJ
U0lUX0ZVTkNUSU9OKG5hbWUpIHZpc2l0b3IuYXBwZW5kKG1fIyNuYW1lIyNGdW5jdGlvbik7CiAg
ICAgJHttYWNyb1ByZWZpeH1fRk9SRUFDSF8ke29iamVjdE1hY3JvfV9CVUlMVElOX0ZVTkNUSU9O
X05BTUUoVklTSVRfRlVOQ1RJT04pCiAjdW5kZWYgVklTSVRfRlVOQ1RJT04KIH0KKwordGVtcGxh
dGUgdm9pZCAke29iamVjdE5hbWV9QnVpbHRpbkZ1bmN0aW9uczo6dmlzaXQoSlNDOjpBYnN0cmFj
dFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkICR7b2JqZWN0TmFtZX1CdWlsdGluRnVuY3Rp
b25zOjp2aXNpdChKU0M6OlNsb3RWaXNpdG9yJik7CisKICIiIikKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAJKHJldmlzaW9uIDI3MjgzMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTc1Nyw3ICs3NTcsOCBAQCBib29sIEFjY2Vzc0Nhc2U6OnZpc2l0V2VhayhW
TSYgdm0pIGNvbnN0CiAgICAgcmV0dXJuIGlzVmFsaWQ7CiB9CiAKLWJvb2wgQWNjZXNzQ2FzZTo6
cHJvcGFnYXRlVHJhbnNpdGlvbnMoU2xvdFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0Cit0ZW1wbGF0
ZTx0eXBlbmFtZSBWaXNpdG9yPgorYm9vbCBBY2Nlc3NDYXNlOjpwcm9wYWdhdGVUcmFuc2l0aW9u
cyhWaXNpdG9yJiB2aXNpdG9yKSBjb25zdAogewogICAgIGJvb2wgcmVzdWx0ID0gdHJ1ZTsKIApA
QCAtNzcyLDcgKzc3Myw3IEBAIGJvb2wgQWNjZXNzQ2FzZTo6cHJvcGFnYXRlVHJhbnNpdGlvbnMo
U2wKICAgICBzd2l0Y2ggKG1fdHlwZSkgewogICAgIGNhc2UgVHJhbnNpdGlvbjoKICAgICBjYXNl
IERlbGV0ZToKLSAgICAgICAgaWYgKHZpc2l0b3Iudm0oKS5oZWFwLmlzTWFya2VkKG1fc3RydWN0
dXJlLT5wcmV2aW91c0lEKCkpKQorICAgICAgICBpZiAodmlzaXRvci5pc01hcmtlZChtX3N0cnVj
dHVyZS0+cHJldmlvdXNJRCgpKSkKICAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVy
ZWQobV9zdHJ1Y3R1cmUuZ2V0KCkpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICByZXN1bHQg
PSBmYWxzZTsKQEAgLTc4NCwxMSArNzg1LDE4IEBAIGJvb2wgQWNjZXNzQ2FzZTo6cHJvcGFnYXRl
VHJhbnNpdGlvbnMoU2wKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi12b2lkIEFjY2Vzc0Nhc2U6
OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBjb25zdAordGVtcGxhdGUgYm9v
bCBBY2Nlc3NDYXNlOjpwcm9wYWdhdGVUcmFuc2l0aW9ucyhBYnN0cmFjdFNsb3RWaXNpdG9yJikg
Y29uc3Q7Cit0ZW1wbGF0ZSBib29sIEFjY2Vzc0Nhc2U6OnByb3BhZ2F0ZVRyYW5zaXRpb25zKFNs
b3RWaXNpdG9yJikgY29uc3Q7CisKKwordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQg
QWNjZXNzQ2FzZTo6dmlzaXRBZ2dyZWdhdGVJbXBsKFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0CiB7
CiAgICAgbV9pZGVudGlmaWVyLnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOwogfQogCitERUZJTkVf
VklTSVRfQUdHUkVHQVRFX1dJVEhfTU9ESUZJRVIoQWNjZXNzQ2FzZSwgY29uc3QpOworCiB2b2lk
IEFjY2Vzc0Nhc2U6OmdlbmVyYXRlV2l0aEd1YXJkKAogICAgIEFjY2Vzc0dlbmVyYXRpb25TdGF0
ZSYgc3RhdGUsIENDYWxsSGVscGVyczo6SnVtcExpc3QmIGZhbGxUaHJvdWdoKQogewpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5oCShyZXZpc2lvbiAy
NzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNy0y
MDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
Ny0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMjgwLDkgKzI4MCw5IEBAIHByaXZhdGU6CiAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgRnVuY3Rvcj4KICAgICB2b2lkIGZvckVhY2hEZXBlbmRlbnRDZWxsKFZNJiwgY29u
c3QgRnVuY3RvciYpIGNvbnN0OwogCi0gICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRv
ciYpIGNvbnN0OworICAgIERFQ0xBUkVfVklTSVRfQUdHUkVHQVRFX1dJVEhfTU9ESUZJRVIoY29u
c3QpOwogICAgIGJvb2wgdmlzaXRXZWFrKFZNJikgY29uc3Q7Ci0gICAgYm9vbCBwcm9wYWdhdGVU
cmFuc2l0aW9ucyhTbG90VmlzaXRvciYpIGNvbnN0OworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZp
c2l0b3I+IGJvb2wgcHJvcGFnYXRlVHJhbnNpdGlvbnMoVmlzaXRvciYpIGNvbnN0OwogCiAgICAg
Ly8gRklYTUU6IFRoaXMgb25seSBleGlzdHMgYmVjYXVzZSBvZiBob3cgQWNjZXNzQ2FzZSBwdXRz
IHBvc3QtZ2VuZXJhdGlvbiB0aGluZ3MgaW50byBpdHNlbGYuCiAgICAgLy8gaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NjQ1NgpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0J5VmFsSW5mby5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0J5VmFsSW5mby5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeVZhbEluZm8uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAtMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTMyLDExICszMiwxNCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogI2lmIEVOQUJMRShKSVQpCiAKLXZv
aWQgQnlWYWxJbmZvOjp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBs
YXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEJ5VmFsSW5mbzo6dmlzaXRBZ2dyZWdhdGVJbXBs
KFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgY2FjaGVkSWQudmlzaXRBZ2dyZWdhdGUodmlzaXRv
cik7CiB9CiAKK0RFRklORV9WSVNJVF9BR0dSRUdBVEUoQnlWYWxJbmZvKTsKKwogI2VuZGlmIC8v
IEVOQUJMRShKSVQpCiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0J5VmFsSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9CeVZhbEluZm8uaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5VmFsSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE4IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MjYwLDcgKzI2MCw3IEBAIHN0cnVjdCBCeVZhbEluZm8gewogICAgICAgICB0aGlzLT5zZWVuID0g
ZmFsc2U7CiAgICAgfQogCi0gICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYpOwor
ICAgIERFQ0xBUkVfVklTSVRfQUdHUkVHQVRFOwogCiAgICAgQ29kZUxvY2F0aW9uSnVtcDxKU0lu
dGVybmFsUHRyVGFnPiBub3RJbmRleEp1bXA7CiAgICAgQ29kZUxvY2F0aW9uSnVtcDxKU0ludGVy
bmFsUHRyVGFnPiBiYWRUeXBlSnVtcDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9DaGVja1ByaXZhdGVCcmFuZFN0YXR1cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NoZWNrUHJpdmF0ZUJyYW5kU3RhdHVzLmNwcAkocmV2aXNp
b24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NoZWNrUHJpdmF0
ZUJyYW5kU3RhdHVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjI4LDE4ICsyMjgsMjUgQEAgQ2Fj
aGVhYmxlSWRlbnRpZmllciBDaGVja1ByaXZhdGVCcmFuZFN0YQogICAgIHJldHVybiByZXN1bHQ7
CiB9CiAKLXZvaWQgQ2hlY2tQcml2YXRlQnJhbmRTdGF0dXM6OnZpc2l0QWdncmVnYXRlKFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgQ2hlY2tQ
cml2YXRlQnJhbmRTdGF0dXM6OnZpc2l0QWdncmVnYXRlSW1wbChWaXNpdG9yJiB2aXNpdG9yKQog
ewogICAgIGZvciAoQ2hlY2tQcml2YXRlQnJhbmRWYXJpYW50JiB2YXJpYW50IDogbV92YXJpYW50
cykKICAgICAgICAgdmFyaWFudC52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKIH0KIAotdm9pZCBD
aGVja1ByaXZhdGVCcmFuZFN0YXR1czo6bWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImIHZpc2l0b3Ip
CitERUZJTkVfVklTSVRfQUdHUkVHQVRFKENoZWNrUHJpdmF0ZUJyYW5kU3RhdHVzKTsKKwordGVt
cGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgQ2hlY2tQcml2YXRlQnJhbmRTdGF0dXM6Om1h
cmtJZkNoZWFwKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgZm9yIChDaGVja1ByaXZhdGVCcmFu
ZFZhcmlhbnQmIHZhcmlhbnQgOiBtX3ZhcmlhbnRzKQogICAgICAgICB2YXJpYW50Lm1hcmtJZkNo
ZWFwKHZpc2l0b3IpOwogfQogCit0ZW1wbGF0ZSB2b2lkIENoZWNrUHJpdmF0ZUJyYW5kU3RhdHVz
OjptYXJrSWZDaGVhcChBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIENoZWNr
UHJpdmF0ZUJyYW5kU3RhdHVzOjptYXJrSWZDaGVhcChTbG90VmlzaXRvciYpOworCiBib29sIENo
ZWNrUHJpdmF0ZUJyYW5kU3RhdHVzOjpmaW5hbGl6ZShWTSYgdm0pCiB7CiAgICAgZm9yIChhdXRv
JiB2YXJpYW50IDogbV92YXJpYW50cykgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0NoZWNrUHJpdmF0ZUJyYW5kU3RhdHVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NoZWNrUHJpdmF0ZUJyYW5kU3RhdHVzLmgJKHJldmlzaW9u
IDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DaGVja1ByaXZhdGVC
cmFuZFN0YXR1cy5oCSh3b3JraW5nIGNvcHkpCkBAIC04Miw4ICs4Miw4IEBAIHB1YmxpYzoKICAg
ICAvLyBBdHRlbXB0cyB0byByZWR1Y2UgdGhlIHNldCBvZiB2YXJpYW50cyB0byBmaXQgdGhlIGdp
dmVuIHN0cnVjdHVyZSBzZXQuIFRoaXMgbWF5IGJlIGFwcHJveGltYXRlLgogICAgIHZvaWQgZmls
dGVyKGNvbnN0IFN0cnVjdHVyZVNldCYpOwogCi0gICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShTbG90
VmlzaXRvciYpOwotICAgIHZvaWQgbWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImKTsKKyAgICBERUNM
QVJFX1ZJU0lUX0FHR1JFR0FURTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lk
IG1hcmtJZkNoZWFwKFZpc2l0b3ImKTsKICAgICBib29sIGZpbmFsaXplKFZNJik7CiAKICAgICBi
b29sIGFwcGVuZFZhcmlhbnQoY29uc3QgQ2hlY2tQcml2YXRlQnJhbmRWYXJpYW50Jik7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2hlY2tQcml2YXRlQnJhbmRWYXJpYW50
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2hlY2tQ
cml2YXRlQnJhbmRWYXJpYW50LmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NoZWNrUHJpdmF0ZUJyYW5kVmFyaWFudC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTUxLDExICs1MSwxNSBAQCBib29sIENoZWNrUHJpdmF0ZUJyYW5kVmFyaWFudDo6
YXR0ZW1wdFRvCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgQ2hlY2tQcml2YXRlQnJhbmRW
YXJpYW50OjptYXJrSWZDaGVhcChTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVu
YW1lIFZpc2l0b3I+Cit2b2lkIENoZWNrUHJpdmF0ZUJyYW5kVmFyaWFudDo6bWFya0lmQ2hlYXAo
VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBtX3N0cnVjdHVyZVNldC5tYXJrSWZDaGVhcCh2aXNp
dG9yKTsKIH0KIAordGVtcGxhdGUgdm9pZCBDaGVja1ByaXZhdGVCcmFuZFZhcmlhbnQ6Om1hcmtJ
ZkNoZWFwKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgQ2hlY2tQcml2YXRl
QnJhbmRWYXJpYW50OjptYXJrSWZDaGVhcChTbG90VmlzaXRvciYpOworCiBib29sIENoZWNrUHJp
dmF0ZUJyYW5kVmFyaWFudDo6ZmluYWxpemUoVk0mIHZtKQogewogICAgIGlmICghbV9zdHJ1Y3R1
cmVTZXQuaXNTdGlsbEFsaXZlKHZtKSkKQEAgLTYzLDExICs2NywxNCBAQCBib29sIENoZWNrUHJp
dmF0ZUJyYW5kVmFyaWFudDo6ZmluYWxpemUoCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQg
Q2hlY2tQcml2YXRlQnJhbmRWYXJpYW50Ojp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYgdmlz
aXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIENoZWNrUHJpdmF0ZUJyYW5k
VmFyaWFudDo6dmlzaXRBZ2dyZWdhdGVJbXBsKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgbV9p
ZGVudGlmaWVyLnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOwogfQogCitERUZJTkVfVklTSVRfQUdH
UkVHQVRFKENoZWNrUHJpdmF0ZUJyYW5kVmFyaWFudCk7CisKIHZvaWQgQ2hlY2tQcml2YXRlQnJh
bmRWYXJpYW50OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiB7CiAgICAgZHVtcEluQ29u
dGV4dChvdXQsIG51bGxwdHIpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NoZWNrUHJpdmF0ZUJyYW5kVmFyaWFudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9DaGVja1ByaXZhdGVCcmFuZFZhcmlhbnQuaAkocmV2aXNpb24gMjcy
ODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NoZWNrUHJpdmF0ZUJyYW5k
VmFyaWFudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiAKIG5hbWVzcGFjZSBK
U0MgewogCitjbGFzcyBBYnN0cmFjdFNsb3RWaXNpdG9yOwogY2xhc3MgQ2hlY2tQcml2YXRlQnJh
bmRTdGF0dXM7CiAKIGNsYXNzIENoZWNrUHJpdmF0ZUJyYW5kVmFyaWFudCB7CkBAIC00Niw4ICs0
Nyw4IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgYXR0ZW1wdFRvTWVyZ2UoY29uc3QgQ2hlY2tQcml2
YXRlQnJhbmRWYXJpYW50JiBvdGhlcik7CiAKLSAgICB2b2lkIHZpc2l0QWdncmVnYXRlKFNsb3RW
aXNpdG9yJik7Ci0gICAgdm9pZCBtYXJrSWZDaGVhcChTbG90VmlzaXRvciYpOworICAgIERFQ0xB
UkVfVklTSVRfQUdHUkVHQVRFOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQg
bWFya0lmQ2hlYXAoVmlzaXRvciYpOwogICAgIGJvb2wgZmluYWxpemUoVk0mKTsKIAogICAgIHZv
aWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MDAxLDcgKzEwMDEsOCBAQCBzaXplX3QgQ29kZUJsb2NrOjplc3RpbWF0ZWRTaXplKEpTQ2VsbCog
CiAgICAgcmV0dXJuIEJhc2U6OmVzdGltYXRlZFNpemUoY2VsbCwgdm0pICsgZXh0cmFNZW1vcnlB
bGxvY2F0ZWQ7CiB9CiAKLXZvaWQgQ29kZUJsb2NrOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2Vs
bCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9p
ZCBDb2RlQmxvY2s6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlz
aXRvcikKIHsKICAgICBDb2RlQmxvY2sqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8Q29kZUJsb2NrKj4o
Y2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkp
OwpAQCAtMTAxMCw5ICsxMDExLDE0IEBAIHZvaWQgQ29kZUJsb2NrOjp2aXNpdENoaWxkcmVuKEpT
Q2VsbCogY2UKICAgICB0aGlzT2JqZWN0LT52aXNpdENoaWxkcmVuKHZpc2l0b3IpOwogfQogCi12
b2lkIENvZGVCbG9jazo6dmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK0RFRklO
RV9WSVNJVF9DSElMRFJFTihDb2RlQmxvY2spOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
Pgordm9pZCBDb2RlQmxvY2s6OnZpc2l0Q2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAg
ICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fbG9jayk7CisKKyAgICBtX3Zpc2l0Q2hpbGRy
ZW5Ta2lwcGVkRHVlVG9PbGRBZ2UgPSBmYWxzZTsKICAgICBpZiAoQ29kZUJsb2NrKiBvdGhlckJs
b2NrID0gc3BlY2lhbE9TUkVudHJ5QmxvY2tPck51bGwoKSkKICAgICAgICAgdmlzaXRvci5hcHBl
bmRVbmJhcnJpZXJlZChvdGhlckJsb2NrKTsKIApAQCAtMTAyOSwxMyArMTAzNSwyMSBAQCB2b2lk
IENvZGVCbG9jazo6dmlzaXRDaGlsZHJlbihTbG90VmlzaXRvCiAgICAgVk06OlNwYWNlQW5kU2V0
OjpzZXRGb3IoKnN1YnNwYWNlKCkpLmFkZCh0aGlzKTsKIH0KIAotYm9vbCBDb2RlQmxvY2s6OnNo
b3VsZFZpc2l0U3Ryb25nbHkoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiBsb2NrZXIpCitib29s
IENvZGVCbG9jazo6c2hvdWxkVmlzaXRTdHJvbmdseShjb25zdCBDb25jdXJyZW50SlNMb2NrZXIm
IGxvY2tlciwgQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBpZiAoT3B0aW9u
czo6Zm9yY2VDb2RlQmxvY2tMaXZlbmVzcygpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAg
IGlmIChzaG91bGRKZXR0aXNvbkR1ZVRvT2xkQWdlKGxvY2tlcikpCisgICAgaWYgKHNob3VsZEpl
dHRpc29uRHVlVG9PbGRBZ2UobG9ja2VyLCB2aXNpdG9yKSkgeworICAgICAgICBpZiAoT3B0aW9u
czo6dmVyaWZ5R0MoKSkKKyAgICAgICAgICAgIG1fdmlzaXRDaGlsZHJlblNraXBwZWREdWVUb09s
ZEFnZSA9IHRydWU7CiAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoVU5M
SUtFTFkobV92aXNpdENoaWxkcmVuU2tpcHBlZER1ZVRvT2xkQWdlKSkgeworICAgICAgICBSRUxF
QVNFX0FTU0VSVChPcHRpb25zOjp2ZXJpZnlHQygpKTsgLy8gbWxhbSBBU1NFUlQ/CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CiAKICAgICAvLyBJbnRlcnByZXRlciBhbmQgQmFzZWxpbmUg
SklUIENvZGVCbG9ja3MgZG9uJ3QgbmVlZCB0byBiZSBqZXR0aXNvbmVkIHdoZW4KICAgICAvLyB0
aGVpciB3ZWFrIHJlZmVyZW5jZXMgZ28gc3RhbGUuIFNvIGlmIGEgYmFzbGluZSBKSVQgQ29kZUJs
b2NrIGdldHMKQEAgLTEwODYsOSArMTEwMCw5IEBAIHN0YXRpYyBTZWNvbmRzIHRpbWVUb0xpdmUo
SklUVHlwZSBqaXRUeXAKICAgICB9CiB9CiAKLWJvb2wgQ29kZUJsb2NrOjpzaG91bGRKZXR0aXNv
bkR1ZVRvT2xkQWdlKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYpCitib29sIENvZGVCbG9jazo6
c2hvdWxkSmV0dGlzb25EdWVUb09sZEFnZShjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBBYnN0
cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewotICAgIGlmIChtX3ZtLT5oZWFwLmlzTWFya2Vk
KHRoaXMpKQorICAgIGlmICh2aXNpdG9yLmlzTWFya2VkKHRoaXMpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKICAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6Zm9yY2VDb2RlQmxvY2tUb0pldHRp
c29uRHVlVG9PbGRBZ2UoKSkpCkBAIC0xMTAxLDEyICsxMTE1LDEzIEBAIGJvb2wgQ29kZUJsb2Nr
OjpzaG91bGRKZXR0aXNvbkR1ZVRvT2xkQWcKIH0KIAogI2lmIEVOQUJMRShERkdfSklUKQotc3Rh
dGljIGJvb2wgc2hvdWxkTWFya1RyYW5zaXRpb24oVk0mIHZtLCBERkc6OldlYWtSZWZlcmVuY2VU
cmFuc2l0aW9uJiB0cmFuc2l0aW9uKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3N0YXRp
YyBpbmxpbmUgYm9vbCBzaG91bGRNYXJrVHJhbnNpdGlvbihWaXNpdG9yJiB2aXNpdG9yLCBERkc6
OldlYWtSZWZlcmVuY2VUcmFuc2l0aW9uJiB0cmFuc2l0aW9uKQogewotICAgIGlmICh0cmFuc2l0
aW9uLm1fY29kZU9yaWdpbiAmJiAhdm0uaGVhcC5pc01hcmtlZCh0cmFuc2l0aW9uLm1fY29kZU9y
aWdpbi5nZXQoKSkpCisgICAgaWYgKHRyYW5zaXRpb24ubV9jb2RlT3JpZ2luICYmICF2aXNpdG9y
LmlzTWFya2VkKHRyYW5zaXRpb24ubV9jb2RlT3JpZ2luLmdldCgpKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIAotICAgIGlmICghdm0uaGVhcC5pc01hcmtlZCh0cmFuc2l0aW9uLm1fZnJv
bS5nZXQoKSkpCisgICAgaWYgKCF2aXNpdG9yLmlzTWFya2VkKHRyYW5zaXRpb24ubV9mcm9tLmdl
dCgpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAogICAgIHJldHVybiB0cnVlOwpAQCAt
MTEyMiw4ICsxMTM3LDEwIEBAIEJ5dGVjb2RlSW5kZXggQ29kZUJsb2NrOjpieXRlY29kZUluZGV4
Rm8KIH0KICNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKIAotdm9pZCBDb2RlQmxvY2s6OnByb3Bh
Z2F0ZVRyYW5zaXRpb25zKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgQ29kZUJsb2NrOjpwcm9w
YWdhdGVUcmFuc2l0aW9ucyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBWaXNpdG9yJiB2aXNp
dG9yKQogeworICAgIHR5cGVuYW1lIFZpc2l0b3I6OlN1cHByZXNzR0NWZXJpZmllclNjb3BlIHN1
cHByZXNzU2NvcGUodmlzaXRvcik7CiAgICAgVk0mIHZtID0gKm1fdm07CiAKICAgICBpZiAoaml0
VHlwZSgpID09IEpJVFR5cGU6OkludGVycHJldGVyVGh1bmspIHsKQEAgLTExMzMsOCArMTE1MCw5
IEBAIHZvaWQgQ29kZUJsb2NrOjpwcm9wYWdhdGVUcmFuc2l0aW9ucyhjb24KICAgICAgICAgICAg
ICAgICBTdHJ1Y3R1cmVJRCBuZXdTdHJ1Y3R1cmVJRCA9IG1ldGFkYXRhLm1fbmV3U3RydWN0dXJl
SUQ7CiAgICAgICAgICAgICAgICAgaWYgKCFvbGRTdHJ1Y3R1cmVJRCB8fCAhbmV3U3RydWN0dXJl
SUQpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKwogICAgICAgICAgICAgICAgIFN0cnVj
dHVyZSogb2xkU3RydWN0dXJlID0gdm0uaGVhcC5zdHJ1Y3R1cmVJRFRhYmxlKCkuZ2V0KG9sZFN0
cnVjdHVyZUlEKTsKLSAgICAgICAgICAgICAgICBpZiAodm0uaGVhcC5pc01hcmtlZChvbGRTdHJ1
Y3R1cmUpKSB7CisgICAgICAgICAgICAgICAgaWYgKHZpc2l0b3IuaXNNYXJrZWQob2xkU3RydWN0
dXJlKSkgewogICAgICAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IHZt
LmhlYXAuc3RydWN0dXJlSURUYWJsZSgpLmdldChuZXdTdHJ1Y3R1cmVJRCk7CiAgICAgICAgICAg
ICAgICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQobmV3U3RydWN0dXJlKTsKICAgICAg
ICAgICAgICAgICB9CkBAIC0xMTQ4LDExICsxMTY2LDExIEBAIHZvaWQgQ29kZUJsb2NrOjpwcm9w
YWdhdGVUcmFuc2l0aW9ucyhjb24KIAogICAgICAgICAgICAgICAgIEpTQ2VsbCogcHJvcGVydHkg
PSBtZXRhZGF0YS5tX3Byb3BlcnR5LmdldCgpOwogICAgICAgICAgICAgICAgIEFTU0VSVChwcm9w
ZXJ0eSk7Ci0gICAgICAgICAgICAgICAgaWYgKCF2bS5oZWFwLmlzTWFya2VkKHByb3BlcnR5KSkK
KyAgICAgICAgICAgICAgICBpZiAoIXZpc2l0b3IuaXNNYXJrZWQocHJvcGVydHkpKQogICAgICAg
ICAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIG9sZFN0
cnVjdHVyZSA9IHZtLmhlYXAuc3RydWN0dXJlSURUYWJsZSgpLmdldChvbGRTdHJ1Y3R1cmVJRCk7
Ci0gICAgICAgICAgICAgICAgaWYgKHZtLmhlYXAuaXNNYXJrZWQob2xkU3RydWN0dXJlKSkgewor
ICAgICAgICAgICAgICAgIGlmICh2aXNpdG9yLmlzTWFya2VkKG9sZFN0cnVjdHVyZSkpIHsKICAg
ICAgICAgICAgICAgICAgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSB2bS5oZWFwLnN0cnVj
dHVyZUlEVGFibGUoKS5nZXQobmV3U3RydWN0dXJlSUQpOwogICAgICAgICAgICAgICAgICAgICB2
aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKG5ld1N0cnVjdHVyZSk7CiAgICAgICAgICAgICAgICAg
fQpAQCAtMTE3MCw3ICsxMTg4LDcgQEAgdm9pZCBDb2RlQmxvY2s6OnByb3BhZ2F0ZVRyYW5zaXRp
b25zKGNvbgogICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgICAgICAgICBT
dHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSA9IHZtLmhlYXAuc3RydWN0dXJlSURUYWJsZSgpLmdldChv
bGRTdHJ1Y3R1cmVJRCk7Ci0gICAgICAgICAgICAgICAgaWYgKHZtLmhlYXAuaXNNYXJrZWQob2xk
U3RydWN0dXJlKSkgeworICAgICAgICAgICAgICAgIGlmICh2aXNpdG9yLmlzTWFya2VkKG9sZFN0
cnVjdHVyZSkpIHsKICAgICAgICAgICAgICAgICAgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUg
PSB2bS5oZWFwLnN0cnVjdHVyZUlEVGFibGUoKS5nZXQobmV3U3RydWN0dXJlSUQpOwogICAgICAg
ICAgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKG5ld1N0cnVjdHVyZSk7CiAg
ICAgICAgICAgICAgICAgfQpAQCAtMTE5Nyw3ICsxMjE1LDcgQEAgdm9pZCBDb2RlQmxvY2s6OnBy
b3BhZ2F0ZVRyYW5zaXRpb25zKGNvbgogICAgICAgICAgICAgdm0uZ2V0U3RydWN0dXJlKHN0cnVj
dHVyZUlEKS0+bWFya0lmQ2hlYXAodmlzaXRvcik7CiAKICAgICAgICAgZm9yIChhdXRvJiB0cmFu
c2l0aW9uIDogZGZnQ29tbW9uLT50cmFuc2l0aW9ucykgewotICAgICAgICAgICAgaWYgKHNob3Vs
ZE1hcmtUcmFuc2l0aW9uKHZtLCB0cmFuc2l0aW9uKSkgeworICAgICAgICAgICAgaWYgKHNob3Vs
ZE1hcmtUcmFuc2l0aW9uKHZpc2l0b3IsIHRyYW5zaXRpb24pKSB7CiAgICAgICAgICAgICAgICAg
Ly8gSWYgdGhlIGZvbGxvd2luZyB0aHJlZSB0aGluZ3MgYXJlIGxpdmUsIHRoZW4gdGhlIHRhcmdl
dCBvZiB0aGUKICAgICAgICAgICAgICAgICAvLyB0cmFuc2l0aW9uIGlzIGFsc28gbGl2ZToKICAg
ICAgICAgICAgICAgICAvLwpAQCAtMTIyNCwxMyArMTI0MiwxNyBAQCB2b2lkIENvZGVCbG9jazo6
cHJvcGFnYXRlVHJhbnNpdGlvbnMoY29uCiAjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCiB9CiAK
LXZvaWQgQ29kZUJsb2NrOjpkZXRlcm1pbmVMaXZlbmVzcyhjb25zdCBDb25jdXJyZW50SlNMb2Nr
ZXImLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlIHZvaWQgQ29kZUJsb2NrOjpwcm9w
YWdhdGVUcmFuc2l0aW9ucyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBBYnN0cmFjdFNsb3RW
aXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIENvZGVCbG9jazo6cHJvcGFnYXRlVHJhbnNpdGlvbnMo
Y29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgU2xvdFZpc2l0b3ImKTsKKwordGVtcGxhdGU8dHlw
ZW5hbWUgVmlzaXRvcj4KK3ZvaWQgQ29kZUJsb2NrOjpkZXRlcm1pbmVMaXZlbmVzcyhjb25zdCBD
b25jdXJyZW50SlNMb2NrZXImLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFVOVVNFRF9QQVJB
TSh2aXNpdG9yKTsKICAgICAKICNpZiBFTkFCTEUoREZHX0pJVCkKICAgICBWTSYgdm0gPSAqbV92
bTsKLSAgICBpZiAodm0uaGVhcC5pc01hcmtlZCh0aGlzKSkKKyAgICBpZiAodmlzaXRvci5pc01h
cmtlZCh0aGlzKSkKICAgICAgICAgcmV0dXJuOwogICAgIAogICAgIC8vIEluIHJhcmUgYW5kIHdl
aXJkIGNhc2VzLCB0aGlzIGNvdWxkIGJlIGNhbGxlZCBvbiBhIGJhc2VsaW5lIENvZGVCbG9jay4g
T25lIHRoYXQgSSBmb3VuZCB3YXMKQEAgLTEyNDcsNyArMTI2OSw3IEBAIHZvaWQgQ29kZUJsb2Nr
OjpkZXRlcm1pbmVMaXZlbmVzcyhjb25zdCAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
ZGZnQ29tbW9uLT53ZWFrUmVmZXJlbmNlcy5zaXplKCk7ICsraSkgewogICAgICAgICBKU0NlbGwq
IHJlZmVyZW5jZSA9IGRmZ0NvbW1vbi0+d2Vha1JlZmVyZW5jZXNbaV0uZ2V0KCk7CiAgICAgICAg
IEFTU0VSVCghanNEeW5hbWljQ2FzdDxDb2RlQmxvY2sqPih2bSwgcmVmZXJlbmNlKSk7Ci0gICAg
ICAgIGlmICghdm0uaGVhcC5pc01hcmtlZChyZWZlcmVuY2UpKSB7CisgICAgICAgIGlmICghdmlz
aXRvci5pc01hcmtlZChyZWZlcmVuY2UpKSB7CiAgICAgICAgICAgICBhbGxBcmVMaXZlU29GYXIg
PSBmYWxzZTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC0xMjU1LDcgKzEyNzcs
NyBAQCB2b2lkIENvZGVCbG9jazo6ZGV0ZXJtaW5lTGl2ZW5lc3MoY29uc3QgCiAgICAgaWYgKGFs
bEFyZUxpdmVTb0ZhcikgewogICAgICAgICBmb3IgKFN0cnVjdHVyZUlEIHN0cnVjdHVyZUlEIDog
ZGZnQ29tbW9uLT53ZWFrU3RydWN0dXJlUmVmZXJlbmNlcykgewogICAgICAgICAgICAgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUgPSB2bS5nZXRTdHJ1Y3R1cmUoc3RydWN0dXJlSUQpOwotICAgICAgICAg
ICAgaWYgKCF2bS5oZWFwLmlzTWFya2VkKHN0cnVjdHVyZSkpIHsKKyAgICAgICAgICAgIGlmICgh
dmlzaXRvci5pc01hcmtlZChzdHJ1Y3R1cmUpKSB7CiAgICAgICAgICAgICAgICAgYWxsQXJlTGl2
ZVNvRmFyID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CkBA
IC0xMjczLDYgKzEyOTUsOSBAQCB2b2lkIENvZGVCbG9jazo6ZGV0ZXJtaW5lTGl2ZW5lc3MoY29u
c3QgCiAjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCiB9CiAKK3RlbXBsYXRlIHZvaWQgQ29kZUJs
b2NrOjpkZXRlcm1pbmVMaXZlbmVzcyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBBYnN0cmFj
dFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIENvZGVCbG9jazo6ZGV0ZXJtaW5lTGl2ZW5l
c3MoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgU2xvdFZpc2l0b3ImKTsKKwogdm9pZCBDb2Rl
QmxvY2s6OmZpbmFsaXplTExJbnRJbmxpbmVDYWNoZXMoKQogewogICAgIFZNJiB2bSA9ICptX3Zt
OwpAQCAtMTYxNiw2ICsxNjQxLDcgQEAgdm9pZCBDb2RlQmxvY2s6OmZpbmFsaXplVW5jb25kaXRp
b25hbGx5KAogICAgIHVwZGF0ZUFjdGl2aXR5KCk7CiAKICAgICBWTTo6U3BhY2VBbmRTZXQ6OnNl
dEZvcigqc3Vic3BhY2UoKSkucmVtb3ZlKHRoaXMpOworICAgIG1fdmlzaXRDaGlsZHJlblNraXBw
ZWREdWVUb09sZEFnZSA9IGZhbHNlOwogfQogCiB2b2lkIENvZGVCbG9jazo6ZGVzdHJveShKU0Nl
bGwqIGNlbGwpCkBAIC0xODA4LDcgKzE4MzQsOCBAQCB2b2lkIENvZGVCbG9jazo6cmVzZXRKSVRE
YXRhKCkKIH0KICNlbmRpZgogCi12b2lkIENvZGVCbG9jazo6dmlzaXRPU1JFeGl0VGFyZ2V0cyhj
b25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRl
PHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIENvZGVCbG9jazo6dmlzaXRPU1JFeGl0VGFyZ2V0cyhj
b25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIC8vIFdl
IHN0cm9uZ2x5IHZpc2l0IE9TUiBleGl0cyB0YXJnZXRzIGJlY2F1c2Ugd2UgZG9uJ3Qgd2FudCB0
byBkZWFsIHdpdGgKICAgICAvLyB0aGUgY29tcGxleGl0eSBvZiBnZW5lcmF0aW5nIGFuIGV4aXQg
dGFyZ2V0IENvZGVCbG9jayBvbiBkZW1hbmQgYW5kCkBAIC0xODI4LDcgKzE4NTUsOCBAQCB2b2lk
IENvZGVCbG9jazo6dmlzaXRPU1JFeGl0VGFyZ2V0cyhjb25zCiAjZW5kaWYKIH0KIAotdm9pZCBD
b2RlQmxvY2s6OnN0cm9uZ2x5VmlzaXRTdHJvbmdSZWZlcmVuY2VzKGNvbnN0IENvbmN1cnJlbnRK
U0xvY2tlciYgbG9ja2VyLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1l
IFZpc2l0b3I+Cit2b2lkIENvZGVCbG9jazo6c3Ryb25nbHlWaXNpdFN0cm9uZ1JlZmVyZW5jZXMo
Y29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiBsb2NrZXIsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAg
ICAgVU5VU0VEX1BBUkFNKGxvY2tlcik7CiAgICAgCkBAIC0xODY0LDcgKzE4OTIsOCBAQCB2b2lk
IENvZGVCbG9jazo6c3Ryb25nbHlWaXNpdFN0cm9uZ1JlZmVyCiAjZW5kaWYKIH0KIAotdm9pZCBD
b2RlQmxvY2s6OnN0cm9uZ2x5VmlzaXRXZWFrUmVmZXJlbmNlcyhjb25zdCBDb25jdXJyZW50SlNM
b2NrZXImLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+
Cit2b2lkIENvZGVCbG9jazo6c3Ryb25nbHlWaXNpdFdlYWtSZWZlcmVuY2VzKGNvbnN0IENvbmN1
cnJlbnRKU0xvY2tlciYsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHZp
c2l0b3IpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2Nr
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9j
ay5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Q29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDA4LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDA4LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICog
Q29weXJpZ2h0IChDKSAyMDA4IENhbWVyb24gWndhcmljaCA8Y3d6d2FyaWNoQHV3YXRlcmxvby5j
YT4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTIwMSwxMCArMjAxLDEwIEBAIHB1YmxpYzoKICAgICAv
LyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIzNjc3CiAgICAgQ29k
ZUJsb2NrKiBiYXNlbGluZVZlcnNpb24oKTsKIAorICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47
CisKICAgICBzdGF0aWMgc2l6ZV90IGVzdGltYXRlZFNpemUoSlNDZWxsKiwgVk0mKTsKLSAgICBz
dGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CiAgICAgc3Rh
dGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKLSAgICB2b2lkIHZpc2l0Q2hpbGRyZW4oU2xvdFZp
c2l0b3ImKTsKICAgICB2b2lkIGZpbmFsaXplVW5jb25kaXRpb25hbGx5KFZNJik7CiAKICAgICB2
b2lkIG5vdGlmeUxleGljYWxCaW5kaW5nVXBkYXRlKCk7CkBAIC05NDMsNiArOTQzLDggQEAgcHJp
dmF0ZToKICAgICBmcmllbmQgY2xhc3MgQ29kZUJsb2NrU2V0OwogICAgIGZyaWVuZCBjbGFzcyBF
eGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlOwogCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRv
cj4gQUxXQVlTX0lOTElORSB2b2lkIHZpc2l0Q2hpbGRyZW4oVmlzaXRvciYpOworCiAgICAgQnl0
ZWNvZGVMaXZlbmVzc0FuYWx5c2lzJiBsaXZlbmVzc0FuYWx5c2lzU2xvdygpOwogICAgIAogICAg
IENvZGVCbG9jayogc3BlY2lhbE9TUkVudHJ5QmxvY2tPck51bGwoKTsKQEAgLTk2MywxNiArOTY1
LDE2IEBAIHByaXZhdGU6CiAgICAgICAgIG1fY29uc3RhbnRSZWdpc3RlcnNbcmVnLnRvQ29uc3Rh
bnRJbmRleCgpXS5zZXQoKm1fdm0sIHRoaXMsIHZhbHVlKTsKICAgICB9CiAKLSAgICBib29sIHNo
b3VsZFZpc2l0U3Ryb25nbHkoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJik7CisgICAgYm9vbCBz
aG91bGRWaXNpdFN0cm9uZ2x5KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIEFic3RyYWN0U2xv
dFZpc2l0b3ImKTsKICAgICBib29sIHNob3VsZEpldHRpc29uRHVlVG9XZWFrUmVmZXJlbmNlKFZN
Jik7Ci0gICAgYm9vbCBzaG91bGRKZXR0aXNvbkR1ZVRvT2xkQWdlKGNvbnN0IENvbmN1cnJlbnRK
U0xvY2tlciYpOworICAgIGJvb2wgc2hvdWxkSmV0dGlzb25EdWVUb09sZEFnZShjb25zdCBDb25j
dXJyZW50SlNMb2NrZXImLCBBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAgICAgCi0gICAgdm9pZCBw
cm9wYWdhdGVUcmFuc2l0aW9ucyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBTbG90VmlzaXRv
ciYpOwotICAgIHZvaWQgZGV0ZXJtaW5lTGl2ZW5lc3MoY29uc3QgQ29uY3VycmVudEpTTG9ja2Vy
JiwgU2xvdFZpc2l0b3ImKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIHBy
b3BhZ2F0ZVRyYW5zaXRpb25zKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIFZpc2l0b3ImKTsK
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIGRldGVybWluZUxpdmVuZXNzKGNv
bnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIFZpc2l0b3ImKTsKICAgICAgICAgCi0gICAgdm9pZCBz
dHJvbmdseVZpc2l0U3Ryb25nUmVmZXJlbmNlcyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBT
bG90VmlzaXRvciYpOwotICAgIHZvaWQgc3Ryb25nbHlWaXNpdFdlYWtSZWZlcmVuY2VzKGNvbnN0
IENvbmN1cnJlbnRKU0xvY2tlciYsIFNsb3RWaXNpdG9yJik7Ci0gICAgdm9pZCB2aXNpdE9TUkV4
aXRUYXJnZXRzKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIFNsb3RWaXNpdG9yJik7CisgICAg
dGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCBzdHJvbmdseVZpc2l0U3Ryb25nUmVmZXJl
bmNlcyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBWaXNpdG9yJik7CisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCBzdHJvbmdseVZpc2l0V2Vha1JlZmVyZW5jZXMoY29uc3Qg
Q29uY3VycmVudEpTTG9ja2VyJiwgVmlzaXRvciYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZp
c2l0b3I+IHZvaWQgdmlzaXRPU1JFeGl0VGFyZ2V0cyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXIm
LCBWaXNpdG9yJik7CiAKICAgICB1bnNpZ25lZCBudW1iZXJPZk5vbkFyZ3VtZW50VmFsdWVQcm9m
aWxlcygpIHsgcmV0dXJuIG1fbnVtYmVyT2ZOb25Bcmd1bWVudFZhbHVlUHJvZmlsZXM7IH0KICAg
ICB1bnNpZ25lZCB0b3RhbE51bWJlck9mVmFsdWVQcm9maWxlcygpIHsgcmV0dXJuIG51bWJlck9m
QXJndW1lbnRWYWx1ZVByb2ZpbGVzKCkgKyBudW1iZXJPZk5vbkFyZ3VtZW50VmFsdWVQcm9maWxl
cygpOyB9CkBAIC0xMDExLDYgKzEwMTMsNyBAQCBwcml2YXRlOgogICAgIHVuc2lnbmVkIG1fYnl0
ZWNvZGVDb3N0IHsgMCB9OwogICAgIFZpcnR1YWxSZWdpc3RlciBtX3Njb3BlUmVnaXN0ZXI7CiAg
ICAgbXV0YWJsZSBDb2RlQmxvY2tIYXNoIG1faGFzaDsKKyAgICBib29sIG1fdmlzaXRDaGlsZHJl
blNraXBwZWREdWVUb09sZEFnZSB7IGZhbHNlIH07CiAKICAgICBXcml0ZUJhcnJpZXI8VW5saW5r
ZWRDb2RlQmxvY2s+IG1fdW5saW5rZWRDb2RlOwogICAgIFdyaXRlQmFycmllcjxTY3JpcHRFeGVj
dXRhYmxlPiBtX293bmVyRXhlY3V0YWJsZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9EZWxldGVCeUlkVmFyaWFudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0RlbGV0ZUJ5SWRWYXJpYW50LmNwcAkocmV2aXNpb24gMjcyODMw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0RlbGV0ZUJ5SWRWYXJpYW50LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIw
LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC04OCwxMiArODgsMTYgQEAgYm9vbCBEZWxldGVCeUlkVmFyaWFudDo6
d3JpdGVzU3RydWN0dXJlcwogICAgIHJldHVybiAhIW5ld1N0cnVjdHVyZSgpOwogfQogCi12b2lk
IERlbGV0ZUJ5SWRWYXJpYW50Ojp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYgdmlzaXRvcikK
K3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIERlbGV0ZUJ5SWRWYXJpYW50Ojp2aXNp
dEFnZ3JlZ2F0ZUltcGwoVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBtX2lkZW50aWZpZXIudmlz
aXRBZ2dyZWdhdGUodmlzaXRvcik7CiB9CiAKLXZvaWQgRGVsZXRlQnlJZFZhcmlhbnQ6Om1hcmtJ
ZkNoZWFwKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorREVGSU5FX1ZJU0lUX0FHR1JFR0FURShEZWxl
dGVCeUlkVmFyaWFudCk7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIERlbGV0
ZUJ5SWRWYXJpYW50OjptYXJrSWZDaGVhcChWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGlmICht
X29sZFN0cnVjdHVyZSkKICAgICAgICAgbV9vbGRTdHJ1Y3R1cmUtPm1hcmtJZkNoZWFwKHZpc2l0
b3IpOwpAQCAtMTAxLDYgKzEwNSw5IEBAIHZvaWQgRGVsZXRlQnlJZFZhcmlhbnQ6Om1hcmtJZkNo
ZWFwKFNsb3QKICAgICAgICAgbV9uZXdTdHJ1Y3R1cmUtPm1hcmtJZkNoZWFwKHZpc2l0b3IpOwog
fQogCit0ZW1wbGF0ZSB2b2lkIERlbGV0ZUJ5SWRWYXJpYW50OjptYXJrSWZDaGVhcChBYnN0cmFj
dFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIERlbGV0ZUJ5SWRWYXJpYW50OjptYXJrSWZD
aGVhcChTbG90VmlzaXRvciYpOworCiB2b2lkIERlbGV0ZUJ5SWRWYXJpYW50OjpkdW1wKFByaW50
U3RyZWFtJiBvdXQpIGNvbnN0CiB7CiAgICAgZHVtcEluQ29udGV4dChvdXQsIG51bGxwdHIpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0RlbGV0ZUJ5SWRWYXJpYW50LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0RlbGV0ZUJ5SWRW
YXJpYW50LmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9EZWxldGVCeUlkVmFyaWFudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMjAtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTYxLDggKzYxLDggQEAgcHVi
bGljOgogCiAgICAgYm9vbCBhdHRlbXB0VG9NZXJnZShjb25zdCBEZWxldGVCeUlkVmFyaWFudCYg
b3RoZXIpOwogCi0gICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYpOwotICAgIHZv
aWQgbWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0FHR1JFR0FU
RTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIG1hcmtJZkNoZWFwKFZpc2l0
b3ImKTsKICAgICBib29sIGZpbmFsaXplKFZNJik7CiAKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJl
YW0mKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9EZWxldGVC
eVN0YXR1cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0RlbGV0ZUJ5U3RhdHVzLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0RlbGV0ZUJ5U3RhdHVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIwLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNTQsMTgg
KzI1NCwyNSBAQCBDYWNoZWFibGVJZGVudGlmaWVyIERlbGV0ZUJ5U3RhdHVzOjpzaW5nCiAgICAg
cmV0dXJuIHJlc3VsdDsKIH0KIAotdm9pZCBEZWxldGVCeVN0YXR1czo6dmlzaXRBZ2dyZWdhdGUo
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBE
ZWxldGVCeVN0YXR1czo6dmlzaXRBZ2dyZWdhdGVJbXBsKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAg
ICAgZm9yIChEZWxldGVCeUlkVmFyaWFudCYgdmFyaWFudCA6IG1fdmFyaWFudHMpCiAgICAgICAg
IHZhcmlhbnQudmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7CiB9CiAKLXZvaWQgRGVsZXRlQnlTdGF0
dXM6Om1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorREVGSU5FX1ZJU0lUX0FHR1JF
R0FURShEZWxldGVCeVN0YXR1cyk7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lk
IERlbGV0ZUJ5U3RhdHVzOjptYXJrSWZDaGVhcChWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGZv
ciAoRGVsZXRlQnlJZFZhcmlhbnQmIHZhcmlhbnQgOiBtX3ZhcmlhbnRzKQogICAgICAgICB2YXJp
YW50Lm1hcmtJZkNoZWFwKHZpc2l0b3IpOwogfQogCit0ZW1wbGF0ZSB2b2lkIERlbGV0ZUJ5U3Rh
dHVzOjptYXJrSWZDaGVhcChBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIERl
bGV0ZUJ5U3RhdHVzOjptYXJrSWZDaGVhcChTbG90VmlzaXRvciYpOworCiBib29sIERlbGV0ZUJ5
U3RhdHVzOjpmaW5hbGl6ZShWTSYgdm0pCiB7CiAgICAgZm9yIChhdXRvJiB2YXJpYW50IDogbV92
YXJpYW50cykgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0RlbGV0ZUJ5
U3RhdHVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Rl
bGV0ZUJ5U3RhdHVzLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9EZWxldGVCeVN0YXR1cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTgxLDggKzgxLDggQEAg
cHVibGljOgogICAgIC8vIEF0dGVtcHRzIHRvIHJlZHVjZSB0aGUgc2V0IG9mIHZhcmlhbnRzIHRv
IGZpdCB0aGUgZ2l2ZW4gc3RydWN0dXJlIHNldC4gVGhpcyBtYXkgYmUgYXBwcm94aW1hdGUuCiAg
ICAgdm9pZCBmaWx0ZXIoY29uc3QgU3RydWN0dXJlU2V0Jik7CiAKLSAgICB2b2lkIHZpc2l0QWdn
cmVnYXRlKFNsb3RWaXNpdG9yJik7Ci0gICAgdm9pZCBtYXJrSWZDaGVhcChTbG90VmlzaXRvciYp
OworICAgIERFQ0xBUkVfVklTSVRfQUdHUkVHQVRFOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZp
c2l0b3I+IHZvaWQgbWFya0lmQ2hlYXAoVmlzaXRvciYpOwogICAgIGJvb2wgZmluYWxpemUoVk0m
KTsKIAogICAgIGJvb2wgYXBwZW5kVmFyaWFudChjb25zdCBEZWxldGVCeUlkVmFyaWFudCYpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0RpcmVjdEV2YWxDb2RlQ2FjaGUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9EaXJlY3RF
dmFsQ29kZUNhY2hlLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0RpcmVjdEV2YWxDb2RlQ2FjaGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ1LDcg
KzQ1LDggQEAgdm9pZCBEaXJlY3RFdmFsQ29kZUNhY2hlOjpjbGVhcigpCiAgICAgbV9jYWNoZU1h
cC5jbGVhcigpOwogfQogCi12b2lkIERpcmVjdEV2YWxDb2RlQ2FjaGU6OnZpc2l0QWdncmVnYXRl
KFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQg
RGlyZWN0RXZhbENvZGVDYWNoZTo6dmlzaXRBZ2dyZWdhdGVJbXBsKFZpc2l0b3ImIHZpc2l0b3Ip
CiB7CiAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9sb2NrKTsKICAgICBFdmFsQ2FjaGVNYXA6Oml0
ZXJhdG9yIGVuZCA9IG1fY2FjaGVNYXAuZW5kKCk7CkBAIC01Myw1ICs1NCw2IEBAIHZvaWQgRGly
ZWN0RXZhbENvZGVDYWNoZTo6dmlzaXRBZ2dyZWdhdGUKICAgICAgICAgdmlzaXRvci5hcHBlbmQo
cHRyLT52YWx1ZSk7CiB9CiAKLX0gLy8gbmFtZXNwYWNlIEpTQworREVGSU5FX1ZJU0lUX0FHR1JF
R0FURShEaXJlY3RFdmFsQ29kZUNhY2hlKTsKIAorfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRGlyZWN0RXZhbENvZGVDYWNoZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9EaXJlY3RFdmFsQ29kZUNh
Y2hlLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9EaXJlY3RFdmFsQ29kZUNhY2hlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC05Nyw3ICs5Nyw3IEBA
IG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJu
IG1fY2FjaGVNYXAuaXNFbXB0eSgpOyB9CiAKLSAgICAgICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShT
bG90VmlzaXRvciYpOworICAgICAgICBERUNMQVJFX1ZJU0lUX0FHR1JFR0FURTsKIAogICAgICAg
ICB2b2lkIGNsZWFyKCk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9F
eGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZS5jcHAJKHJldmlzaW9u
IDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGVjdXRhYmxlVG9D
b2RlQmxvY2tFZGdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE4LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01Myw3ICs1Myw4IEBAIHZvaWQgRXhlY3V0
YWJsZVRvQ29kZUJsb2NrRWRnZTo6ZmluaXNoQ3IKICAgICBBU1NFUlQoIWlzQWN0aXZlKCkpOwog
fQogCi12b2lkIEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2U6OnZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+
Cit2b2lkIEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2U6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2Vs
bCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBWTSYgdm0gPSB2aXNpdG9yLnZtKCk7
CiAgICAgRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZSogZWRnZSA9IGpzQ2FzdDxFeGVjdXRhYmxl
VG9Db2RlQmxvY2tFZGdlKj4oY2VsbCk7CkBAIC02MSw3ICs2Miw3IEBAIHZvaWQgRXhlY3V0YWJs
ZVRvQ29kZUJsb2NrRWRnZTo6dmlzaXRDaGkKICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKGNlbGws
IHZpc2l0b3IpOwogCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBlZGdlLT5tX2NvZGVCbG9j
ay5nZXQoKTsKLSAgICAKKwogICAgIC8vIEl0J3MgcG9zc2libGUgZm9yIHNvbWVvbmUgdG8gaG9s
ZCBhIHBvaW50ZXIgdG8gdGhlIGVkZ2UgYWZ0ZXIgdGhlIGVkZ2UgaGFzIGNsZWFyZWQgaXRzIHdl
YWsKICAgICAvLyByZWZlcmVuY2UgdG8gdGhlIGNvZGVCbG9jay4gSW4gYSBjb25zZXJ2YXRpdmUg
R0MgbGlrZSBvdXJzLCB0aGF0IGNvdWxkIGhhcHBlbiBhdCByYW5kb20gZm9yCiAgICAgLy8gbm8g
Z29vZCByZWFzb24gYW5kIGl0J3MgVG90YWxseSBPSyAoVE0pLiBTZWUgZmluYWxpemVVbmNvbmRp
dGlvbmFsbHkoKSBmb3Igd2hlcmUgd2UgY2xlYXIKQEAgLTc1LDExICs3NiwxMSBAQCB2b2lkIEV4
ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2U6OnZpc2l0Q2hpCiAgICAgfQogICAgIAogICAgIENvbmN1
cnJlbnRKU0xvY2tlciBsb2NrZXIoY29kZUJsb2NrLT5tX2xvY2spOwotICAgIAotICAgIGlmIChj
b2RlQmxvY2stPnNob3VsZFZpc2l0U3Ryb25nbHkobG9ja2VyKSkKKworICAgIGlmIChjb2RlQmxv
Y2stPnNob3VsZFZpc2l0U3Ryb25nbHkobG9ja2VyLCB2aXNpdG9yKSkKICAgICAgICAgdmlzaXRv
ci5hcHBlbmRVbmJhcnJpZXJlZChjb2RlQmxvY2spOwogICAgIAotICAgIGlmICghdm0uaGVhcC5p
c01hcmtlZChjb2RlQmxvY2spKQorICAgIGlmICghdmlzaXRvci5pc01hcmtlZChjb2RlQmxvY2sp
KQogICAgICAgICB2bS5leGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlc1dpdGhGaW5hbGl6ZXJzLmFk
ZChlZGdlKTsKICAgICAKICAgICBpZiAoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGNvZGVCbG9j
ay0+aml0VHlwZSgpKSkgewpAQCAtMTE3LDcgKzExOCwxMCBAQCB2b2lkIEV4ZWN1dGFibGVUb0Nv
ZGVCbG9ja0VkZ2U6OnZpc2l0Q2hpCiAgICAgZWRnZS0+cnVuQ29uc3RyYWludChsb2NrZXIsIHZt
LCB2aXNpdG9yKTsKIH0KIAotdm9pZCBFeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlOjp2aXNpdE91
dHB1dENvbnN0cmFpbnRzKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCitERUZJ
TkVfVklTSVRfQ0hJTERSRU4oRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZSk7CisKK3RlbXBsYXRl
PHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2U6OnZpc2l0
T3V0cHV0Q29uc3RyYWludHNJbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsK
ICAgICBWTSYgdm0gPSB2aXNpdG9yLnZtKCk7CiAgICAgRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRn
ZSogZWRnZSA9IGpzQ2FzdDxFeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlKj4oY2VsbCk7CkBAIC0x
MjUsNiArMTI5LDggQEAgdm9pZCBFeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlOjp2aXNpdE91dAog
ICAgIGVkZ2UtPnJ1bkNvbnN0cmFpbnQoTm9Mb2NraW5nTmVjZXNzYXJ5LCB2bSwgdmlzaXRvcik7
CiB9CiAKK0RFRklORV9WSVNJVF9PVVRQVVRfQ09OU1RSQUlOVFMoRXhlY3V0YWJsZVRvQ29kZUJs
b2NrRWRnZSk7CisKIHZvaWQgRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZTo6ZmluYWxpemVVbmNv
bmRpdGlvbmFsbHkoVk0mIHZtKQogewogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gbV9jb2Rl
QmxvY2suZ2V0KCk7CkBAIC0xODYsMTYgKzE5MiwyMSBAQCBFeGVjdXRhYmxlVG9Db2RlQmxvY2tF
ZGdlOjpFeGVjdXRhYmxlVG9DCiB7CiB9CiAKLXZvaWQgRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRn
ZTo6cnVuQ29uc3RyYWludChjb25zdCBDb25jdXJyZW50SlNMb2NrZXImIGxvY2tlciwgVk0mIHZt
LCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lk
IEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2U6OnJ1bkNvbnN0cmFpbnQoY29uc3QgQ29uY3VycmVu
dEpTTG9ja2VyJiBsb2NrZXIsIFZNJiB2bSwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBDb2Rl
QmxvY2sqIGNvZGVCbG9jayA9IG1fY29kZUJsb2NrLmdldCgpOwogICAgIAogICAgIGNvZGVCbG9j
ay0+cHJvcGFnYXRlVHJhbnNpdGlvbnMobG9ja2VyLCB2aXNpdG9yKTsKICAgICBjb2RlQmxvY2st
PmRldGVybWluZUxpdmVuZXNzKGxvY2tlciwgdmlzaXRvcik7Ci0gICAgCi0gICAgaWYgKHZtLmhl
YXAuaXNNYXJrZWQoY29kZUJsb2NrKSkKKworICAgIGlmICh2aXNpdG9yLmlzTWFya2VkKGNvZGVC
bG9jaykpCiAgICAgICAgIHZtLmV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2VzV2l0aENvbnN0cmFp
bnRzLnJlbW92ZSh0aGlzKTsKIH0KIAordGVtcGxhdGUgdm9pZCBFeGVjdXRhYmxlVG9Db2RlQmxv
Y2tFZGdlOjpydW5Db25zdHJhaW50KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIFZNJiwgQWJz
dHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBFeGVjdXRhYmxlVG9Db2RlQmxvY2tF
ZGdlOjpydW5Db25zdHJhaW50KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIFZNJiwgU2xvdFZp
c2l0b3ImKTsKKworCiB9IC8vIG5hbWVzcGFjZSBKU0MKIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRn
ZS5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
RXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTMsOSArNTMs
OSBAQCBwdWJsaWM6CiAgICAgREVDTEFSRV9JTkZPOwogCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxv
Y2soKSBjb25zdCB7IHJldHVybiBtX2NvZGVCbG9jay5nZXQoKTsgfQotICAgIAotICAgIHN0YXRp
YyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKLSAgICBzdGF0aWMg
dm9pZCB2aXNpdE91dHB1dENvbnN0cmFpbnRzKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisKKyAg
ICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOworICAgIERFQ0xBUkVfVklTSVRfT1VUUFVUX0NPTlNU
UkFJTlRTOwogICAgIHZvaWQgZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoVk0mKTsKICAgICAKICAg
ICBzdGF0aWMgQ29kZUJsb2NrKiB1bndyYXAoRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZSogZWRn
ZSkKQEAgLTgxLDkgKzgxLDkgQEAgcHJpdmF0ZToKICAgICB2b2lkIGFjdGl2YXRlKCk7CiAgICAg
dm9pZCBkZWFjdGl2YXRlKCk7CiAgICAgYm9vbCBpc0FjdGl2ZSgpIGNvbnN0OwotICAgIAotICAg
IHZvaWQgcnVuQ29uc3RyYWludChjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBWTSYsIFNsb3RW
aXNpdG9yJik7Ci0gICAgCisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIHJ1
bkNvbnN0cmFpbnQoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgVk0mLCBWaXNpdG9yJik7CisK
ICAgICBXcml0ZUJhcnJpZXI8Q29kZUJsb2NrPiBtX2NvZGVCbG9jazsKIH07CiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkVmFyaWFudC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRWYXJpYW50LmNwcAko
cmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5
SWRWYXJpYW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTQtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTQtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE1NiwxNiArMTU2LDIzIEBAIGJvb2wg
R2V0QnlJZFZhcmlhbnQ6OmF0dGVtcHRUb01lcmdlKGNvbnMKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IAotdm9pZCBHZXRCeUlkVmFyaWFudDo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImIHZpc2l0
b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBHZXRCeUlkVmFyaWFudDo6dmlz
aXRBZ2dyZWdhdGVJbXBsKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgbV9pZGVudGlmaWVyLnZp
c2l0QWdncmVnYXRlKHZpc2l0b3IpOwogfQogCi12b2lkIEdldEJ5SWRWYXJpYW50OjptYXJrSWZD
aGVhcChTbG90VmlzaXRvciYgdmlzaXRvcikKK0RFRklORV9WSVNJVF9BR0dSRUdBVEUoR2V0QnlJ
ZFZhcmlhbnQpOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBHZXRCeUlkVmFy
aWFudDo6bWFya0lmQ2hlYXAoVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBtX3N0cnVjdHVyZVNl
dC5tYXJrSWZDaGVhcCh2aXNpdG9yKTsKIH0KIAordGVtcGxhdGUgdm9pZCBHZXRCeUlkVmFyaWFu
dDo6bWFya0lmQ2hlYXAoQWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBHZXRC
eUlkVmFyaWFudDo6bWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImKTsKKwogYm9vbCBHZXRCeUlkVmFy
aWFudDo6ZmluYWxpemUoVk0mIHZtKQogewogICAgIGlmICghbV9zdHJ1Y3R1cmVTZXQuaXNTdGls
bEFsaXZlKHZtKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlk
VmFyaWFudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9H
ZXRCeUlkVmFyaWFudC5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvR2V0QnlJZFZhcmlhbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTc3LDggKzc3
LDggQEAgcHVibGljOgogCiAgICAgYm9vbCBhdHRlbXB0VG9NZXJnZShjb25zdCBHZXRCeUlkVmFy
aWFudCYgb3RoZXIpOwogICAgIAotICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3Im
KTsKLSAgICB2b2lkIG1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJ
VF9BR0dSRUdBVEU7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCBtYXJrSWZD
aGVhcChWaXNpdG9yJik7CiAgICAgYm9vbCBmaW5hbGl6ZShWTSYpOwogICAgIAogICAgIHZvaWQg
ZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0dldEJ5U3RhdHVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvR2V0QnlTdGF0dXMuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlTdGF0dXMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDIwIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDIxIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtNTMwLDcgKzUzMCw4IEBAIHZvaWQgR2V0QnlTdGF0dXM6OmZpbHRlcihjb25zdCBTdHJ1Y3R1
cmUKICAgICAgICAgbV9zdGF0ZSA9IE5vSW5mb3JtYXRpb247CiB9CiAKLXZvaWQgR2V0QnlTdGF0
dXM6OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5h
bWUgVmlzaXRvcj4KK3ZvaWQgR2V0QnlTdGF0dXM6OnZpc2l0QWdncmVnYXRlSW1wbChWaXNpdG9y
JiB2aXNpdG9yKQogewogICAgIGlmIChpc01vZHVsZU5hbWVzcGFjZSgpKQogICAgICAgICBtX21v
ZHVsZU5hbWVzcGFjZURhdGEtPm1faWRlbnRpZmllci52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsK
QEAgLTUzOCwxMiArNTM5LDE4IEBAIHZvaWQgR2V0QnlTdGF0dXM6OnZpc2l0QWdncmVnYXRlKFNs
b3RWaXMKICAgICAgICAgdmFyaWFudC52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKIH0KIAotdm9p
ZCBHZXRCeVN0YXR1czo6bWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCitERUZJTkVf
VklTSVRfQUdHUkVHQVRFKEdldEJ5U3RhdHVzKTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRv
cj4KK3ZvaWQgR2V0QnlTdGF0dXM6Om1hcmtJZkNoZWFwKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAg
ICAgZm9yIChHZXRCeUlkVmFyaWFudCYgdmFyaWFudCA6IG1fdmFyaWFudHMpCiAgICAgICAgIHZh
cmlhbnQubWFya0lmQ2hlYXAodmlzaXRvcik7CiB9CiAKK3RlbXBsYXRlIHZvaWQgR2V0QnlTdGF0
dXM6Om1hcmtJZkNoZWFwKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgR2V0
QnlTdGF0dXM6Om1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJik7CisKIGJvb2wgR2V0QnlTdGF0dXM6
OmZpbmFsaXplKFZNJiB2bSkKIHsKICAgICBmb3IgKEdldEJ5SWRWYXJpYW50JiB2YXJpYW50IDog
bV92YXJpYW50cykgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5
U3RhdHVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dl
dEJ5U3RhdHVzLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9HZXRCeVN0YXR1cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTE4LDggKzExOCw4IEBA
IHB1YmxpYzoKICAgICBKU01vZHVsZUVudmlyb25tZW50KiBtb2R1bGVFbnZpcm9ubWVudCgpIGNv
bnN0IHsgcmV0dXJuIG1fbW9kdWxlTmFtZXNwYWNlRGF0YS0+bV9tb2R1bGVFbnZpcm9ubWVudDsg
fQogICAgIFNjb3BlT2Zmc2V0IHNjb3BlT2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9tb2R1bGVO
YW1lc3BhY2VEYXRhLT5tX3Njb3BlT2Zmc2V0OyB9CiAgICAgCi0gICAgdm9pZCB2aXNpdEFnZ3Jl
Z2F0ZShTbG90VmlzaXRvciYpOwotICAgIHZvaWQgbWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImKTsK
KyAgICBERUNMQVJFX1ZJU0lUX0FHR1JFR0FURTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNp
dG9yPiB2b2lkIG1hcmtJZkNoZWFwKFZpc2l0b3ImKTsKICAgICBib29sIGZpbmFsaXplKFZNJik7
IC8vIFJldHVybiB0cnVlIGlmIHRoaXMgZ2V0cyB0byBsaXZlLgogCiAgICAgYm9vbCBhcHBlbmRW
YXJpYW50KGNvbnN0IEdldEJ5SWRWYXJpYW50Jik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvSW5CeUlkU3RhdHVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvSW5CeUlkU3RhdHVzLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luQnlJZFN0YXR1cy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDE4IFl1c3VrZSBT
dXp1a2kgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4uCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0yNTEsMTIgKzI1MSwxNiBAQCB2b2lkIEluQnlJZFN0YXR1czo6ZmlsdGVyKGNv
bnN0IFN0cnVjdHVyCiAgICAgICAgIG1fc3RhdGUgPSBOb0luZm9ybWF0aW9uOwogfQogCi12b2lk
IEluQnlJZFN0YXR1czo6bWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0
ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBJbkJ5SWRTdGF0dXM6Om1hcmtJZkNoZWFwKFZpc2l0
b3ImIHZpc2l0b3IpCiB7CiAgICAgZm9yIChJbkJ5SWRWYXJpYW50JiB2YXJpYW50IDogbV92YXJp
YW50cykKICAgICAgICAgdmFyaWFudC5tYXJrSWZDaGVhcCh2aXNpdG9yKTsKIH0KIAordGVtcGxh
dGUgdm9pZCBJbkJ5SWRTdGF0dXM6Om1hcmtJZkNoZWFwKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsK
K3RlbXBsYXRlIHZvaWQgSW5CeUlkU3RhdHVzOjptYXJrSWZDaGVhcChTbG90VmlzaXRvciYpOwor
CiBib29sIEluQnlJZFN0YXR1czo6ZmluYWxpemUoVk0mIHZtKQogewogICAgIGZvciAoSW5CeUlk
VmFyaWFudCYgdmFyaWFudCA6IG1fdmFyaWFudHMpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9JbkJ5SWRTdGF0dXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvSW5CeUlkU3RhdHVzLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbkJ5SWRTdGF0dXMuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTggWXVzdWtlIFN1enVr
aSA8dXRhdGFuZS50ZWFAZ21haWwuY29tPi4KLSAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAyMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTEwNiw3ICsxMDYsNyBAQCBwdWJsaWM6CiAgICAgLy8gQXR0ZW1wdHMgdG8gcmVkdWNl
IHRoZSBzZXQgb2YgdmFyaWFudHMgdG8gZml0IHRoZSBnaXZlbiBzdHJ1Y3R1cmUgc2V0LiBUaGlz
IG1heSBiZSBhcHByb3hpbWF0ZS4KICAgICB2b2lkIGZpbHRlcihjb25zdCBTdHJ1Y3R1cmVTZXQm
KTsKICAgICAKLSAgICB2b2lkIG1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJik7CisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCBtYXJrSWZDaGVhcChWaXNpdG9yJik7CiAgICAgYm9v
bCBmaW5hbGl6ZShWTSYpOwogCiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5CeUlkVmFyaWFudC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luQnlJZFZhcmlhbnQu
Y3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
SW5CeUlkVmFyaWFudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICog
Q29weXJpZ2h0IChDKSAyMDE4IFl1c3VrZSBTdXp1a2kgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4u
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02NCwxMSArNjQsMTUgQEAgYm9v
bCBJbkJ5SWRWYXJpYW50OjphdHRlbXB0VG9NZXJnZShjb25zdAogICAgIHJldHVybiB0cnVlOwog
fQogCi12b2lkIEluQnlJZFZhcmlhbnQ6Om1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJiB2aXNpdG9y
KQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSW5CeUlkVmFyaWFudDo6bWFya0lm
Q2hlYXAoVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBtX3N0cnVjdHVyZVNldC5tYXJrSWZDaGVh
cCh2aXNpdG9yKTsKIH0KIAordGVtcGxhdGUgdm9pZCBJbkJ5SWRWYXJpYW50OjptYXJrSWZDaGVh
cChBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEluQnlJZFZhcmlhbnQ6Om1h
cmtJZkNoZWFwKFNsb3RWaXNpdG9yJik7CisKIGJvb2wgSW5CeUlkVmFyaWFudDo6ZmluYWxpemUo
Vk0mIHZtKQogewogICAgIGlmICghbV9zdHJ1Y3R1cmVTZXQuaXNTdGlsbEFsaXZlKHZtKSkKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbkJ5SWRWYXJpYW50LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luQnlJZFZhcmlhbnQuaAko
cmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luQnlJ
ZFZhcmlhbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmln
aHQgKEMpIDIwMTggWXVzdWtlIFN1enVraSA8dXRhdGFuZS50ZWFAZ21haWwuY29tPi4KLSAqIENv
cHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTgtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU3LDcgKzU3LDcgQEAgcHVibGljOgogCiAg
ICAgYm9vbCBhdHRlbXB0VG9NZXJnZShjb25zdCBJbkJ5SWRWYXJpYW50JiBvdGhlcik7CiAgICAg
Ci0gICAgdm9pZCBtYXJrSWZDaGVhcChTbG90VmlzaXRvciYpOworICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFZpc2l0b3I+IHZvaWQgbWFya0lmQ2hlYXAoVmlzaXRvciYpOwogICAgIGJvb2wgZmluYWxp
emUoVk0mKTsKIAogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0ludGVybmFsRnVuY3Rpb25BbGxvY2F0aW9uUHJv
ZmlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnRl
cm5hbEZ1bmN0aW9uQWxsb2NhdGlvblByb2ZpbGUuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0ludGVybmFsRnVuY3Rpb25BbGxvY2F0aW9uUHJv
ZmlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzksNyArMzksNyBAQCBwdWJsaWM6CiAgICAgU3Ry
dWN0dXJlKiBjcmVhdGVBbGxvY2F0aW9uU3RydWN0dXJlRnJvbUJhc2UoVk0mLCBKU0dsb2JhbE9i
amVjdCosIEpTQ2VsbCogb3duZXIsIEpTT2JqZWN0KiBwcm90b3R5cGUsIFN0cnVjdHVyZSogYmFz
ZSk7CiAKICAgICB2b2lkIGNsZWFyKCkgeyBtX3N0cnVjdHVyZS5jbGVhcigpOyB9Ci0gICAgdm9p
ZCB2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYgdmlzaXRvcikgeyB2aXNpdG9yLmFwcGVuZCht
X3N0cnVjdHVyZSk7IH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIHZpc2l0
QWdncmVnYXRlKFZpc2l0b3ImIHZpc2l0b3IpIHsgdmlzaXRvci5hcHBlbmQobV9zdHJ1Y3R1cmUp
OyB9CiAKIHByaXZhdGU6CiAgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gbV9zdHJ1Y3R1cmU7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT2JqZWN0QWxsb2NhdGlvblBy
b2ZpbGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT2Jq
ZWN0QWxsb2NhdGlvblByb2ZpbGUuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL09iamVjdEFsbG9jYXRpb25Qcm9maWxlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTcgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC02NCw3ICs2NCw4IEBAIHByb3RlY3RlZDoKICAgICAgICAgQVNTRVJUKGlzTnVsbCgp
KTsKICAgICB9CiAKLSAgICB2b2lkIHZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9y
KQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+CisgICAgdm9pZCB2aXNpdEFnZ3JlZ2F0
ZShWaXNpdG9yJiB2aXNpdG9yKQogICAgIHsKICAgICAgICAgdmlzaXRvci5hcHBlbmQobV9zdHJ1
Y3R1cmUpOwogICAgIH0KQEAgLTExMCw3ICsxMTEsOCBAQCBwdWJsaWM6CiAgICAgICAgIEFTU0VS
VChpc051bGwoKSk7CiAgICAgfQogCi0gICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRv
ciYgdmlzaXRvcikKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgorICAgIHZvaWQgdmlz
aXRBZ2dyZWdhdGUoVmlzaXRvciYgdmlzaXRvcikKICAgICB7CiAgICAgICAgIEJhc2U6OnZpc2l0
QWdncmVnYXRlKHZpc2l0b3IpOwogICAgICAgICB2aXNpdG9yLmFwcGVuZChtX3Byb3RvdHlwZSk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3Mu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9y
cGhpY0FjY2Vzcy5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNTgs
NyArMzU4LDggQEAgYm9vbCBQb2x5bW9ycGhpY0FjY2Vzczo6dmlzaXRXZWFrKFZNJiB2bQogICAg
IHJldHVybiB0cnVlOwogfQogCi1ib29sIFBvbHltb3JwaGljQWNjZXNzOjpwcm9wYWdhdGVUcmFu
c2l0aW9ucyhTbG90VmlzaXRvciYgdmlzaXRvcikgY29uc3QKK3RlbXBsYXRlPHR5cGVuYW1lIFZp
c2l0b3I+Citib29sIFBvbHltb3JwaGljQWNjZXNzOjpwcm9wYWdhdGVUcmFuc2l0aW9ucyhWaXNp
dG9yJiB2aXNpdG9yKSBjb25zdAogewogICAgIGJvb2wgcmVzdWx0ID0gdHJ1ZTsKICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZSgpOyArK2kpCkBAIC0zNjYsMTIgKzM2NywxOCBAQCBi
b29sIFBvbHltb3JwaGljQWNjZXNzOjpwcm9wYWdhdGVUcmFuc2l0CiAgICAgcmV0dXJuIHJlc3Vs
dDsKIH0KIAotdm9pZCBQb2x5bW9ycGhpY0FjY2Vzczo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0
b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZSBib29sIFBvbHltb3JwaGljQWNjZXNzOjpwcm9wYWdhdGVU
cmFuc2l0aW9ucyhBYnN0cmFjdFNsb3RWaXNpdG9yJikgY29uc3Q7Cit0ZW1wbGF0ZSBib29sIFBv
bHltb3JwaGljQWNjZXNzOjpwcm9wYWdhdGVUcmFuc2l0aW9ucyhTbG90VmlzaXRvciYpIGNvbnN0
OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBQb2x5bW9ycGhpY0FjY2Vzczo6
dmlzaXRBZ2dyZWdhdGVJbXBsKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IHNpemUoKTsgKytpKQogICAgICAgICBhdChpKS52aXNpdEFnZ3JlZ2F0ZSh2
aXNpdG9yKTsKIH0KIAorREVGSU5FX1ZJU0lUX0FHR1JFR0FURShQb2x5bW9ycGhpY0FjY2Vzcyk7
CisKIHZvaWQgUG9seW1vcnBoaWNBY2Nlc3M6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QK
IHsKICAgICBvdXQucHJpbnQoUmF3UG9pbnRlcih0aGlzKSwgIjpbIik7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuaAkocmV2
aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3Jw
aGljQWNjZXNzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDE0LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE0LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xNTIsMTQgKzE1MiwxNCBAQCBwdWJsaWM6
CiAgICAgY29uc3QgQWNjZXNzQ2FzZSYgYXQodW5zaWduZWQgaSkgY29uc3QgeyByZXR1cm4gKm1f
bGlzdFtpXTsgfQogICAgIGNvbnN0IEFjY2Vzc0Nhc2UmIG9wZXJhdG9yW10odW5zaWduZWQgaSkg
Y29uc3QgeyByZXR1cm4gKm1fbGlzdFtpXTsgfQogCi0gICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShT
bG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQUdHUkVHQVRFOwogCiAgICAgLy8gSWYg
dGhpcyByZXR1cm5zIGZhbHNlIHRoZW4gd2UgYXJlIHJlcXVlc3RpbmcgYSByZXNldCBvZiB0aGUg
b3duaW5nIFN0cnVjdHVyZVN0dWJJbmZvLgogICAgIGJvb2wgdmlzaXRXZWFrKFZNJikgY29uc3Q7
CiAgICAgCiAgICAgLy8gVGhpcyByZXR1cm5zIHRydWUgaWYgaXQgaGFzIG1hcmtlZCBldmVyeXRo
aW5nIGl0IHdpbGwgZXZlciBtYXJrZWQuIFRoaXMgY2FuIGJlIHVzZWQgYXMgYW4KICAgICAvLyBv
cHRpbWl6YXRpb24gdG8gdGhlbiBhdm9pZCBjYWxsaW5nIHRoaXMgbWV0aG9kIGFnYWluIGR1cmlu
ZyB0aGUgZml4cG9pbnQuCi0gICAgYm9vbCBwcm9wYWdhdGVUcmFuc2l0aW9ucyhTbG90VmlzaXRv
ciYpIGNvbnN0OworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IGJvb2wgcHJvcGFnYXRl
VHJhbnNpdGlvbnMoVmlzaXRvciYpIGNvbnN0OwogCiAgICAgdm9pZCBhYm91dFRvRGllKCk7CiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1
cy5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9QdXRCeUlkU3RhdHVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM5NiwxMiArMzk2LDE2IEBA
IFB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6c2xvd1ZlcnNpb24KICAgICByZXR1cm4gUHV0
QnlJZFN0YXR1cyhtYWtlc0NhbGxzKCkgPyBNYWtlc0NhbGxzIDogVGFrZXNTbG93UGF0aCk7CiB9
CiAKLXZvaWQgUHV0QnlJZFN0YXR1czo6bWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImIHZpc2l0b3Ip
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBQdXRCeUlkU3RhdHVzOjptYXJrSWZD
aGVhcChWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGZvciAoUHV0QnlJZFZhcmlhbnQmIHZhcmlh
bnQgOiBtX3ZhcmlhbnRzKQogICAgICAgICB2YXJpYW50Lm1hcmtJZkNoZWFwKHZpc2l0b3IpOwog
fQogCit0ZW1wbGF0ZSB2b2lkIFB1dEJ5SWRTdGF0dXM6Om1hcmtJZkNoZWFwKEFic3RyYWN0U2xv
dFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgUHV0QnlJZFN0YXR1czo6bWFya0lmQ2hlYXAoU2xv
dFZpc2l0b3ImKTsKKwogYm9vbCBQdXRCeUlkU3RhdHVzOjpmaW5hbGl6ZShWTSYgdm0pCiB7CiAg
ICAgZm9yIChQdXRCeUlkVmFyaWFudCYgdmFyaWFudCA6IG1fdmFyaWFudHMpIHsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuaAkocmV2aXNp
b24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0
dXMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTItMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTItMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTExNyw3ICsxMTcsNyBAQCBwdWJsaWM6CiAgICAgY29u
c3QgUHV0QnlJZFZhcmlhbnQmIGF0KHNpemVfdCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV92YXJp
YW50c1tpbmRleF07IH0KICAgICBjb25zdCBQdXRCeUlkVmFyaWFudCYgb3BlcmF0b3JbXShzaXpl
X3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIGF0KGluZGV4KTsgfQogICAgIAotICAgIHZvaWQgbWFy
a0lmQ2hlYXAoU2xvdFZpc2l0b3ImKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2
b2lkIG1hcmtJZkNoZWFwKFZpc2l0b3ImKTsKICAgICBib29sIGZpbmFsaXplKFZNJik7CiAgICAg
CiAgICAgdm9pZCBtZXJnZShjb25zdCBQdXRCeUlkU3RhdHVzJik7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkVmFyaWFudC5jcHAJKHJldmlzaW9u
IDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkVmFyaWFu
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDE0LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE0LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNjIsMTMgKzI2MiwxNyBAQCBib29sIFB1dEJ5SWRW
YXJpYW50OjphdHRlbXB0VG9NZXJnZVRyYW5zCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQg
UHV0QnlJZFZhcmlhbnQ6Om1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxh
dGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgUHV0QnlJZFZhcmlhbnQ6Om1hcmtJZkNoZWFwKFZp
c2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgbV9vbGRTdHJ1Y3R1cmUubWFya0lmQ2hlYXAodmlzaXRv
cik7CiAgICAgaWYgKG1fbmV3U3RydWN0dXJlKQogICAgICAgICBtX25ld1N0cnVjdHVyZS0+bWFy
a0lmQ2hlYXAodmlzaXRvcik7CiB9CiAKK3RlbXBsYXRlIHZvaWQgUHV0QnlJZFZhcmlhbnQ6Om1h
cmtJZkNoZWFwKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgUHV0QnlJZFZh
cmlhbnQ6Om1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJik7CisKIGJvb2wgUHV0QnlJZFZhcmlhbnQ6
OmZpbmFsaXplKFZNJiB2bSkKIHsKICAgICBpZiAoIW1fb2xkU3RydWN0dXJlLmlzU3RpbGxBbGl2
ZSh2bSkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlh
bnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJ
ZFZhcmlhbnQuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMzIsNyArMTMyLDcg
QEAgcHVibGljOgogCiAgICAgYm9vbCBhdHRlbXB0VG9NZXJnZShjb25zdCBQdXRCeUlkVmFyaWFu
dCYgb3RoZXIpOwogICAgIAotICAgIHZvaWQgbWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImKTsKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIG1hcmtJZkNoZWFwKFZpc2l0b3ImKTsK
ICAgICBib29sIGZpbmFsaXplKFZNJik7CiAgICAgCiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFt
JikgY29uc3Q7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUmVjb3JkZWRT
dGF0dXNlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1JlY29yZGVkU3RhdHVzZXMuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvUmVjb3JkZWRTdGF0dXNlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEwMiw3ICsxMDIsOCBAQCBTZXRQcml2YXRlQnJhbmRTdGF0dXMqIFJlY29yZGVkU3RhdHVzZXM6
CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotdm9pZCBSZWNvcmRlZFN0YXR1c2VzOjp2aXNpdEFn
Z3JlZ2F0ZShTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+
Cit2b2lkIFJlY29yZGVkU3RhdHVzZXM6OnZpc2l0QWdncmVnYXRlSW1wbChWaXNpdG9yJiB2aXNp
dG9yKQogewogICAgIGZvciAoYXV0byYgcGFpciA6IGdldHMpCiAgICAgICAgIHBhaXIuc2Vjb25k
LT52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKQEAgLTExNCw3ICsxMTUsMTAgQEAgdm9pZCBSZWNv
cmRlZFN0YXR1c2VzOjp2aXNpdEFnZ3JlZ2F0ZShTbAogICAgICAgICBwYWlyLnNlY29uZC0+dmlz
aXRBZ2dyZWdhdGUodmlzaXRvcik7CiB9CiAKLXZvaWQgUmVjb3JkZWRTdGF0dXNlczo6bWFya0lm
Q2hlYXAoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCitERUZJTkVfVklTSVRfQUdHUkVHQVRFKFJlY29y
ZGVkU3RhdHVzZXMpOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBSZWNvcmRl
ZFN0YXR1c2VzOjptYXJrSWZDaGVhcChWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGZvciAoYXV0
byYgcGFpciA6IGdldHMpCiAgICAgICAgIHBhaXIuc2Vjb25kLT5tYXJrSWZDaGVhcCh2aXNpdG9y
KTsKQEAgLTEzMCw2ICsxMzQsOSBAQCB2b2lkIFJlY29yZGVkU3RhdHVzZXM6Om1hcmtJZkNoZWFw
KFNsb3RWCiAgICAgICAgIHBhaXIuc2Vjb25kLT5tYXJrSWZDaGVhcCh2aXNpdG9yKTsKIH0KIAor
dGVtcGxhdGUgdm9pZCBSZWNvcmRlZFN0YXR1c2VzOjptYXJrSWZDaGVhcChBYnN0cmFjdFNsb3RW
aXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIFJlY29yZGVkU3RhdHVzZXM6Om1hcmtJZkNoZWFwKFNs
b3RWaXNpdG9yJik7CisKIHZvaWQgUmVjb3JkZWRTdGF0dXNlczo6ZmluYWxpemVXaXRob3V0RGVs
ZXRpbmcoVk0mIHZtKQogewogICAgIC8vIFRoaXMgdmFyaWFudCBvZiBmaW5hbGl6ZSBnZXRzIGNh
bGxlZCBmcm9tIHdpdGhpbiBncmFwaCBzYWZlcG9pbnRzIC0tIHNvIHRoZXJlIG1heSBiZSBERkcg
SVIgaW4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9SZWNvcmRlZFN0YXR1
c2VzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1JlY29y
ZGVkU3RhdHVzZXMuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1JlY29yZGVkU3RhdHVzZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU0LDggKzU0
LDggQEAgc3RydWN0IFJlY29yZGVkU3RhdHVzZXMgewogICAgIENoZWNrUHJpdmF0ZUJyYW5kU3Rh
dHVzKiBhZGRDaGVja1ByaXZhdGVCcmFuZFN0YXR1cyhjb25zdCBDb2RlT3JpZ2luJiwgY29uc3Qg
Q2hlY2tQcml2YXRlQnJhbmRTdGF0dXMmKTsKICAgICBTZXRQcml2YXRlQnJhbmRTdGF0dXMqIGFk
ZFNldFByaXZhdGVCcmFuZFN0YXR1cyhjb25zdCBDb2RlT3JpZ2luJiwgY29uc3QgU2V0UHJpdmF0
ZUJyYW5kU3RhdHVzJik7CiAgICAgCi0gICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRv
ciYpOwotICAgIHZvaWQgbWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJ
U0lUX0FHR1JFR0FURTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIG1hcmtJ
ZkNoZWFwKFZpc2l0b3ImKTsKICAgICAKICAgICB2b2lkIGZpbmFsaXplV2l0aG91dERlbGV0aW5n
KFZNJik7CiAgICAgdm9pZCBmaW5hbGl6ZShWTSYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1NldFByaXZhdGVCcmFuZFN0YXR1cy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NldFByaXZhdGVCcmFuZFN0YXR1cy5jcHAJKHJl
dmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TZXRQcml2
YXRlQnJhbmRTdGF0dXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzUsMTggKzIzNSwyNSBAQCBD
YWNoZWFibGVJZGVudGlmaWVyIFNldFByaXZhdGVCcmFuZFN0YXR1CiAgICAgcmV0dXJuIHJlc3Vs
dDsKIH0KIAotdm9pZCBTZXRQcml2YXRlQnJhbmRTdGF0dXM6OnZpc2l0QWdncmVnYXRlKFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgU2V0UHJp
dmF0ZUJyYW5kU3RhdHVzOjp2aXNpdEFnZ3JlZ2F0ZUltcGwoVmlzaXRvciYgdmlzaXRvcikKIHsK
ICAgICBmb3IgKFNldFByaXZhdGVCcmFuZFZhcmlhbnQmIHZhcmlhbnQgOiBtX3ZhcmlhbnRzKQog
ICAgICAgICB2YXJpYW50LnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOwogfQogCi12b2lkIFNldFBy
aXZhdGVCcmFuZFN0YXR1czo6bWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCitERUZJ
TkVfVklTSVRfQUdHUkVHQVRFKFNldFByaXZhdGVCcmFuZFN0YXR1cyk7CisKK3RlbXBsYXRlPHR5
cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFNldFByaXZhdGVCcmFuZFN0YXR1czo6bWFya0lmQ2hlYXAo
VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBmb3IgKFNldFByaXZhdGVCcmFuZFZhcmlhbnQmIHZh
cmlhbnQgOiBtX3ZhcmlhbnRzKQogICAgICAgICB2YXJpYW50Lm1hcmtJZkNoZWFwKHZpc2l0b3Ip
OwogfQogCit0ZW1wbGF0ZSB2b2lkIFNldFByaXZhdGVCcmFuZFN0YXR1czo6bWFya0lmQ2hlYXAo
QWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBTZXRQcml2YXRlQnJhbmRTdGF0
dXM6Om1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJik7CisKIGJvb2wgU2V0UHJpdmF0ZUJyYW5kU3Rh
dHVzOjpmaW5hbGl6ZShWTSYgdm0pCiB7CiAgICAgZm9yIChhdXRvJiB2YXJpYW50IDogbV92YXJp
YW50cykgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NldFByaXZhdGVC
cmFuZFN0YXR1cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9TZXRQcml2YXRlQnJhbmRTdGF0dXMuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NldFByaXZhdGVCcmFuZFN0YXR1cy5oCSh3b3JraW5nIGNv
cHkpCkBAIC04Myw4ICs4Myw4IEBAIHB1YmxpYzoKICAgICAvLyBBdHRlbXB0cyB0byByZWR1Y2Ug
dGhlIHNldCBvZiB2YXJpYW50cyB0byBmaXQgdGhlIGdpdmVuIHN0cnVjdHVyZSBzZXQuIFRoaXMg
bWF5IGJlIGFwcHJveGltYXRlLgogICAgIHZvaWQgZmlsdGVyKGNvbnN0IFN0cnVjdHVyZVNldCYp
OwogCi0gICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYpOwotICAgIHZvaWQgbWFy
a0lmQ2hlYXAoU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0FHR1JFR0FURTsKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIG1hcmtJZkNoZWFwKFZpc2l0b3ImKTsK
ICAgICBib29sIGZpbmFsaXplKFZNJik7CiAKICAgICBib29sIGFwcGVuZFZhcmlhbnQoY29uc3Qg
U2V0UHJpdmF0ZUJyYW5kVmFyaWFudCYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1NldFByaXZhdGVCcmFuZFZhcmlhbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TZXRQcml2YXRlQnJhbmRWYXJpYW50LmNwcAkocmV2aXNp
b24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NldFByaXZhdGVC
cmFuZFZhcmlhbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMjAtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBD
b3B5cmlnaHQgKEMpIDIwMjEgSWdhbGlhIFMuQS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKQEAgLTU0LDcgKzU0LDggQEAgYm9vbCBTZXRQcml2YXRlQnJhbmRWYXJpYW50
OjphdHRlbXB0VG9NZQogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIFNldFByaXZhdGVCcmFu
ZFZhcmlhbnQ6Om1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlw
ZW5hbWUgVmlzaXRvcj4KK3ZvaWQgU2V0UHJpdmF0ZUJyYW5kVmFyaWFudDo6bWFya0lmQ2hlYXAo
VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBpZiAobV9vbGRTdHJ1Y3R1cmUpCiAgICAgICAgIG1f
b2xkU3RydWN0dXJlLT5tYXJrSWZDaGVhcCh2aXNpdG9yKTsKQEAgLTYyLDYgKzYzLDkgQEAgdm9p
ZCBTZXRQcml2YXRlQnJhbmRWYXJpYW50OjptYXJrSWZDaGVhcAogICAgICAgICBtX25ld1N0cnVj
dHVyZS0+bWFya0lmQ2hlYXAodmlzaXRvcik7CiB9CiAKK3RlbXBsYXRlIHZvaWQgU2V0UHJpdmF0
ZUJyYW5kVmFyaWFudDo6bWFya0lmQ2hlYXAoQWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxh
dGUgdm9pZCBTZXRQcml2YXRlQnJhbmRWYXJpYW50OjptYXJrSWZDaGVhcChTbG90VmlzaXRvciYp
OworCiBib29sIFNldFByaXZhdGVCcmFuZFZhcmlhbnQ6OmZpbmFsaXplKFZNJiB2bSkKIHsKICAg
ICBpZiAoIXZtLmhlYXAuaXNNYXJrZWQobV9vbGRTdHJ1Y3R1cmUpKQpAQCAtNzEsMTEgKzc1LDE0
IEBAIGJvb2wgU2V0UHJpdmF0ZUJyYW5kVmFyaWFudDo6ZmluYWxpemUoVk0KICAgICByZXR1cm4g
dHJ1ZTsKIH0KIAotdm9pZCBTZXRQcml2YXRlQnJhbmRWYXJpYW50Ojp2aXNpdEFnZ3JlZ2F0ZShT
bG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFNl
dFByaXZhdGVCcmFuZFZhcmlhbnQ6OnZpc2l0QWdncmVnYXRlSW1wbChWaXNpdG9yJiB2aXNpdG9y
KQogewogICAgIG1faWRlbnRpZmllci52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKIH0KIAorREVG
SU5FX1ZJU0lUX0FHR1JFR0FURShTZXRQcml2YXRlQnJhbmRWYXJpYW50KTsKKwogdm9pZCBTZXRQ
cml2YXRlQnJhbmRWYXJpYW50OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiB7CiAgICAg
ZHVtcEluQ29udGV4dChvdXQsIG51bGxwdHIpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1NldFByaXZhdGVCcmFuZFZhcmlhbnQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU2V0UHJpdmF0ZUJyYW5kVmFyaWFudC5oCShyZXZpc2lv
biAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU2V0UHJpdmF0ZUJy
YW5kVmFyaWFudC5oCSh3b3JraW5nIGNvcHkpCkBAIC00NSw4ICs0NSw4IEBAIHB1YmxpYzoKIAog
ICAgIGJvb2wgYXR0ZW1wdFRvTWVyZ2UoY29uc3QgU2V0UHJpdmF0ZUJyYW5kVmFyaWFudCYgb3Ro
ZXIpOwogCi0gICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYpOwotICAgIHZvaWQg
bWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0FHR1JFR0FURTsK
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIG1hcmtJZkNoZWFwKFZpc2l0b3Im
KTsKICAgICBib29sIGZpbmFsaXplKFZNJik7CiAKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0m
KSBjb25zdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVT
ZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1
Y3R1cmVTZXQuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvU3RydWN0dXJlU2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMxLDEyICszMSwx
NiBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotdm9pZCBTdHJ1Y3R1cmVTZXQ6Om1hcmtJZkNoZWFw
KFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBjb25zdAordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4K
K3ZvaWQgU3RydWN0dXJlU2V0OjptYXJrSWZDaGVhcChWaXNpdG9yJiB2aXNpdG9yKSBjb25zdAog
ewogICAgIGZvciAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUgOiAqdGhpcykKICAgICAgICAgc3RydWN0
dXJlLT5tYXJrSWZDaGVhcCh2aXNpdG9yKTsKIH0KIAordGVtcGxhdGUgdm9pZCBTdHJ1Y3R1cmVT
ZXQ6Om1hcmtJZkNoZWFwKEFic3RyYWN0U2xvdFZpc2l0b3ImKSBjb25zdDsKK3RlbXBsYXRlIHZv
aWQgU3RydWN0dXJlU2V0OjptYXJrSWZDaGVhcChTbG90VmlzaXRvciYpIGNvbnN0OworCiBib29s
IFN0cnVjdHVyZVNldDo6aXNTdGlsbEFsaXZlKFZNJiB2bSkgY29uc3QKIHsKICAgICBmb3IgKFN0
cnVjdHVyZSogc3RydWN0dXJlIDogKnRoaXMpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9TdHJ1Y3R1cmVTZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU2V0LmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTZXQuaAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxOCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAyMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTU0LDcgKzU0LDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gb25seUVudHJ5KCk7CiAg
ICAgfQogCi0gICAgdm9pZCBtYXJrSWZDaGVhcChTbG90VmlzaXRvciYpIGNvbnN0OworICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgbWFya0lmQ2hlYXAoVmlzaXRvciYpIGNvbnN0
OwogICAgIGJvb2wgaXNTdGlsbEFsaXZlKFZNJikgY29uc3Q7CiAgICAgCiAgICAgdm9pZCBkdW1w
SW5Db250ZXh0KFByaW50U3RyZWFtJiwgRHVtcENvbnRleHQqKSBjb25zdDsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNw
cAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0
cnVjdHVyZVN0dWJJbmZvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI5Niw3ICsyOTYsOCBAQCB2
b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjpyZXNldChjb25zdCBDb25jCiAgICAgc2V0Q2FjaGVUeXBl
KGxvY2tlciwgQ2FjaGVUeXBlOjpVbnNldCk7CiB9CiAKLXZvaWQgU3RydWN0dXJlU3R1YkluZm86
OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUg
VmlzaXRvcj4KK3ZvaWQgU3RydWN0dXJlU3R1YkluZm86OnZpc2l0QWdncmVnYXRlSW1wbChWaXNp
dG9yJiB2aXNpdG9yKQogewogICAgIHsKICAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayht
X2J1ZmZlcmVkU3RydWN0dXJlc0xvY2spOwpAQCAtMzIyLDYgKzMyMyw4IEBAIHZvaWQgU3RydWN0
dXJlU3R1YkluZm86OnZpc2l0QWdncmVnYXRlKFMKICAgICByZXR1cm47CiB9CiAKK0RFRklORV9W
SVNJVF9BR0dSRUdBVEUoU3RydWN0dXJlU3R1YkluZm8pOworCiB2b2lkIFN0cnVjdHVyZVN0dWJJ
bmZvOjp2aXNpdFdlYWtSZWZlcmVuY2VzKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlckJhc2UmIGxv
Y2tlciwgQ29kZUJsb2NrKiBjb2RlQmxvY2spCiB7CiAgICAgVk0mIHZtID0gY29kZUJsb2NrLT52
bSgpOwpAQCAtMzUyLDcgKzM1NSw4IEBAIHZvaWQgU3RydWN0dXJlU3R1YkluZm86OnZpc2l0V2Vh
a1JlZmVyZW4KICAgICByZXNldEJ5R0MgPSB0cnVlOwogfQogCi1ib29sIFN0cnVjdHVyZVN0dWJJ
bmZvOjpwcm9wYWdhdGVUcmFuc2l0aW9ucyhTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRl
PHR5cGVuYW1lIFZpc2l0b3I+Citib29sIFN0cnVjdHVyZVN0dWJJbmZvOjpwcm9wYWdhdGVUcmFu
c2l0aW9ucyhWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHN3aXRjaCAobV9jYWNoZVR5cGUpIHsK
ICAgICBjYXNlIENhY2hlVHlwZTo6VW5zZXQ6CkBAIC0zNzEsNiArMzc1LDkgQEAgYm9vbCBTdHJ1
Y3R1cmVTdHViSW5mbzo6cHJvcGFnYXRlVHJhbnNpdAogICAgIHJldHVybiB0cnVlOwogfQogCit0
ZW1wbGF0ZSBib29sIFN0cnVjdHVyZVN0dWJJbmZvOjpwcm9wYWdhdGVUcmFuc2l0aW9ucyhBYnN0
cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSBib29sIFN0cnVjdHVyZVN0dWJJbmZvOjpwcm9w
YWdhdGVUcmFuc2l0aW9ucyhTbG90VmlzaXRvciYpOworCiBTdHViSW5mb1N1bW1hcnkgU3RydWN0
dXJlU3R1YkluZm86OnN1bW1hcnkoVk0mIHZtKSBjb25zdAogewogICAgIFN0dWJJbmZvU3VtbWFy
eSB0YWtlc1Nsb3dQYXRoID0gU3R1YkluZm9TdW1tYXJ5OjpUYWtlc1Nsb3dQYXRoOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZv
LmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9T
dHJ1Y3R1cmVTdHViSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAwOC0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtOTMsMTQgKzkzLDE0IEBAIHB1
YmxpYzoKICAgICB2b2lkIGRlcmVmKCk7CiAgICAgdm9pZCBhYm91dFRvRGllKCk7CiAKLSAgICB2
b2lkIHZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9BR0dS
RUdBVEU7CiAKICAgICAvLyBDaGVjayBpZiB0aGUgc3R1YiBoYXMgd2VhayByZWZlcmVuY2VzIHRo
YXQgYXJlIGRlYWQuIElmIGl0IGRvZXMsIHRoZW4gaXQgcmVzZXRzIGl0c2VsZiwKICAgICAvLyBl
aXRoZXIgZW50aXJlbHkgb3IganVzdCBlbm91Z2ggdG8gZW5zdXJlIHRoYXQgdGhvc2UgZGVhZCBw
b2ludGVycyBkb24ndCBnZXQgdXNlZCBhbnltb3JlLgogICAgIHZvaWQgdmlzaXRXZWFrUmVmZXJl
bmNlcyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXJCYXNlJiwgQ29kZUJsb2NrKik7CiAgICAgCiAg
ICAgLy8gVGhpcyByZXR1cm5zIHRydWUgaWYgaXQgaGFzIG1hcmtlZCBldmVyeXRoaW5nIHRoYXQg
aXQgd2lsbCBldmVyIG1hcmsuCi0gICAgYm9vbCBwcm9wYWdhdGVUcmFuc2l0aW9ucyhTbG90Vmlz
aXRvciYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IGJvb2wgcHJvcGFnYXRlVHJh
bnNpdGlvbnMoVmlzaXRvciYpOwogICAgICAgICAKICAgICBTdHViSW5mb1N1bW1hcnkgc3VtbWFy
eShWTSYpIGNvbnN0OwogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1VubGlua2VkQ29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE5
IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0y
MDIxIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtNzUsNyArNzUsOCBAQCBVbmxpbmtlZENvZGVCbG9jazo6VW5saW5rZWRD
b2RlQmxvY2soVk0mCiAgICAgfQogfQogCi12b2lkIFVubGlua2VkQ29kZUJsb2NrOjp2aXNpdENo
aWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBl
bmFtZSBWaXNpdG9yPgordm9pZCBVbmxpbmtlZENvZGVCbG9jazo6dmlzaXRDaGlsZHJlbkltcGwo
SlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFVubGlua2VkQ29kZUJsb2Nr
KiB0aGlzT2JqZWN0ID0ganNDYXN0PFVubGlua2VkQ29kZUJsb2NrKj4oY2VsbCk7CiAgICAgQVNT
RVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtOTQsNiArOTUs
OCBAQCB2b2lkIFVubGlua2VkQ29kZUJsb2NrOjp2aXNpdENoaWxkcmVuKEpTCiAgICAgdmlzaXRv
ci5yZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQoZXh0cmFNZW1vcnkpOwogfQogCitERUZJTkVfVklT
SVRfQ0hJTERSRU4oVW5saW5rZWRDb2RlQmxvY2spOworCiBzaXplX3QgVW5saW5rZWRDb2RlQmxv
Y2s6OmVzdGltYXRlZFNpemUoSlNDZWxsKiBjZWxsLCBWTSYgdm0pCiB7CiAgICAgVW5saW5rZWRD
b2RlQmxvY2sqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8VW5saW5rZWRDb2RlQmxvY2sqPihjZWxsKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENv
ZGVCbG9jay5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxOSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMSBBcHBsZSBJbmMuIEFsbCBSaWdodHMg
UmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQzMSw3ICs0MzEs
NyBAQCBwcml2YXRlOgogICAgIFJlZkNvdW50ZWRBcnJheTxFeHByZXNzaW9uUmFuZ2VJbmZvPiBt
X2V4cHJlc3Npb25JbmZvOwogCiBwcm90ZWN0ZWQ6Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGls
ZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47
CiAgICAgc3RhdGljIHNpemVfdCBlc3RpbWF0ZWRTaXplKEpTQ2VsbCosIFZNJik7CiAKIHB1Ymxp
YzoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9u
RXhlY3V0YWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1VubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTItMjAxOSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTItMjAyMSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE0Niw3ICsxNDYsOCBAQCB2b2lkIFVubGlua2VkRnVu
Y3Rpb25FeGVjdXRhYmxlOjpkZXN0cm95CiAgICAgc3RhdGljX2Nhc3Q8VW5saW5rZWRGdW5jdGlv
bkV4ZWN1dGFibGUqPihjZWxsKS0+flVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKCk7CiB9CiAK
LXZvaWQgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBj
ZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2
b2lkIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwq
IGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFi
bGUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqPihjZWxs
KTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBA
IC0xNjksNiArMTcwLDggQEAgdm9pZCBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6dmlzaXRD
aAogICAgIH0KIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKFVubGlua2VkRnVuY3Rpb25FeGVj
dXRhYmxlKTsKKwogU291cmNlQ29kZSBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6bGlua2Vk
U291cmNlQ29kZShjb25zdCBTb3VyY2VDb2RlJiBwYXNzZWRQYXJlbnRTb3VyY2UpIGNvbnN0CiB7
CiAgICAgY29uc3QgU291cmNlQ29kZSYgcGFyZW50U291cmNlID0gIW1faXNCdWlsdGluRGVmYXVs
dENsYXNzQ29uc3RydWN0b3IgPyBwYXNzZWRQYXJlbnRTb3VyY2UgOiBCdWlsdGluRXhlY3V0YWJs
ZXM6OmRlZmF1bHRDb25zdHJ1Y3RvclNvdXJjZUNvZGUoY29uc3RydWN0b3JLaW5kKCkpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkRnVuY3Rpb25FeGVjdXRh
YmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlu
a2VkRnVuY3Rpb25FeGVjdXRhYmxlLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE5IEFw
cGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDIx
IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMjQyLDcgKzI0Miw3IEBAIHByaXZhdGU6CiAgICAgVW5saW5rZWRGdW5jdGlv
bkV4ZWN1dGFibGUoVk0mLCBTdHJ1Y3R1cmUqLCBjb25zdCBTb3VyY2VDb2RlJiwgRnVuY3Rpb25N
ZXRhZGF0YU5vZGUqLCBVbmxpbmtlZEZ1bmN0aW9uS2luZCwgQ29uc3RydWN0QWJpbGl0eSwgSlNQ
YXJzZXJTY3JpcHRNb2RlLCBSZWZQdHI8VERaRW52aXJvbm1lbnRMaW5rPiwgT3B0aW9uYWw8UHJp
dmF0ZU5hbWVFbnZpcm9ubWVudD4sIEpTQzo6RGVyaXZlZENvbnRleHRUeXBlLCBKU0M6Ok5lZWRz
Q2xhc3NGaWVsZEluaXRpYWxpemVyLCBQcml2YXRlQnJhbmRSZXF1aXJlbWVudCwgYm9vbCBpc0J1
aWx0aW5EZWZhdWx0Q2xhc3NDb25zdHJ1Y3Rvcik7CiAgICAgVW5saW5rZWRGdW5jdGlvbkV4ZWN1
dGFibGUoRGVjb2RlciYsIGNvbnN0IENhY2hlZEZ1bmN0aW9uRXhlY3V0YWJsZSYpOwogCi0gICAg
c3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERF
Q0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICB2b2lkIGRlY29kZUNhY2hlZENvZGVCbG9ja3Mo
Vk0mKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyU2Nv
cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1
Z2dlclNjb3BlLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RlYnVnZ2VyL0RlYnVnZ2VyU2NvcGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTUsNyArNTUs
OCBAQCB2b2lkIERlYnVnZ2VyU2NvcGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2CiAgICAgQmFzZTo6
ZmluaXNoQ3JlYXRpb24odm0pOwogfQogCi12b2lkIERlYnVnZ2VyU2NvcGU6OnZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1l
IFZpc2l0b3I+Cit2b2lkIERlYnVnZ2VyU2NvcGU6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCog
Y2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBEZWJ1Z2dlclNjb3BlKiB0aGlzT2JqZWN0
ID0ganNDYXN0PERlYnVnZ2VyU2NvcGUqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lO
SEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC02NSw2ICs2Niw4IEBAIHZvaWQgRGVidWdn
ZXJTY29wZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2Jq
ZWN0LT5tX25leHQpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oRGVidWdnZXJTY29wZSk7
CisKIFN0cmluZyBEZWJ1Z2dlclNjb3BlOjpjbGFzc05hbWUoY29uc3QgSlNPYmplY3QqIG9iamVj
dCwgVk0mIHZtKQogewogICAgIGNvbnN0IERlYnVnZ2VyU2NvcGUqIHNjb3BlID0ganNDYXN0PGNv
bnN0IERlYnVnZ2VyU2NvcGUqPihvYmplY3QpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RlYnVnZ2VyL0RlYnVnZ2VyU2NvcGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGVidWdnZXIvRGVidWdnZXJTY29wZS5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXJTY29wZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOC0yMDIwIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDIxIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtNDYsNyArNDYsNyBAQCBwdWJsaWM6CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0
aWMgRGVidWdnZXJTY29wZSogY3JlYXRlKFZNJiB2bSwgSlNTY29wZSogc2NvcGUpOwogCi0gICAg
c3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERF
Q0xBUkVfVklTSVRfQ0hJTERSRU47CiAgICAgc3RhdGljIFN0cmluZyBjbGFzc05hbWUoY29uc3Qg
SlNPYmplY3QqLCBWTSYpOwogICAgIHN0YXRpYyBTdHJpbmcgdG9TdHJpbmdOYW1lKGNvbnN0IEpT
T2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqKTsKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0
eVNsb3QoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlT
bG90Jik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRUcmFuc2l0
aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNp
cmVkVHJhbnNpdGlvbnMuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Rlc2lyZWRUcmFuc2l0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01
Miw3ICs1Miw3IEBAIHZvaWQgRGVzaXJlZFRyYW5zaXRpb246OnJlYWxseUFkZChWTSYgdm0KICAg
ICAgICAgICAgIG1fb2xkU3RydWN0dXJlLCBtX25ld1N0cnVjdHVyZSkpOwogfQogCi12b2lkIERl
c2lyZWRUcmFuc2l0aW9uOjp2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordm9p
ZCBEZXNpcmVkVHJhbnNpdGlvbjo6dmlzaXRDaGlsZHJlbihBYnN0cmFjdFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQogewogICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQobV9jb2RlT3JpZ2luT3du
ZXIpOwogICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQobV9vbGRTdHJ1Y3R1cmUpOwpAQCAt
NzgsNyArNzgsNyBAQCB2b2lkIERlc2lyZWRUcmFuc2l0aW9uczo6cmVhbGx5QWRkKFZNJiB2CiAg
ICAgICAgIG1fdHJhbnNpdGlvbnNbaV0ucmVhbGx5QWRkKHZtLCBjb21tb24pOwogfQogCi12b2lk
IERlc2lyZWRUcmFuc2l0aW9uczo6dmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikK
K3ZvaWQgRGVzaXJlZFRyYW5zaXRpb25zOjp2aXNpdENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0
b3ImIHZpc2l0b3IpCiB7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fdHJhbnNpdGlv
bnMuc2l6ZSgpOyBpKyspCiAgICAgICAgIG1fdHJhbnNpdGlvbnNbaV0udmlzaXRDaGlsZHJlbih2
aXNpdG9yKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFRyYW5z
aXRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNp
cmVkVHJhbnNpdGlvbnMuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdEZXNpcmVkVHJhbnNpdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00Niw4
ICs0Niw3IEBAIHB1YmxpYzoKICAgICBEZXNpcmVkVHJhbnNpdGlvbihDb2RlQmxvY2sqLCBDb2Rl
QmxvY2sqIGNvZGVPcmlnaW5Pd25lciwgU3RydWN0dXJlKiwgU3RydWN0dXJlKik7CiAKICAgICB2
b2lkIHJlYWxseUFkZChWTSYsIENvbW1vbkRhdGEqKTsKLSAgICAKLSAgICB2b2lkIHZpc2l0Q2hp
bGRyZW4oU2xvdFZpc2l0b3ImKTsKKyAgICB2b2lkIHZpc2l0Q2hpbGRyZW4oQWJzdHJhY3RTbG90
VmlzaXRvciYpOwogCiBwcml2YXRlOgogICAgIENvZGVCbG9jayogbV9jb2RlQmxvY2s7CkBAIC02
Myw3ICs2Miw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgYWRkTGF6aWx5KENvZGVCbG9jayosIENv
ZGVCbG9jayogY29kZU9yaWdpbk93bmVyLCBTdHJ1Y3R1cmUqLCBTdHJ1Y3R1cmUqKTsKICAgICB2
b2lkIHJlYWxseUFkZChWTSYsIENvbW1vbkRhdGEqKTsKLSAgICB2b2lkIHZpc2l0Q2hpbGRyZW4o
U2xvdFZpc2l0b3ImKTsKKyAgICB2b2lkIHZpc2l0Q2hpbGRyZW4oQWJzdHJhY3RTbG90VmlzaXRv
ciYpOwogCiBwcml2YXRlOgogICAgIFZlY3RvcjxEZXNpcmVkVHJhbnNpdGlvbj4gbV90cmFuc2l0
aW9uczsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFdlYWtSZWZl
cmVuY2VzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rl
c2lyZWRXZWFrUmVmZXJlbmNlcy5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFdlYWtSZWZlcmVuY2VzLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTg3LDcgKzg3LDcgQEAgdm9pZCBEZXNpcmVkV2Vha1JlZmVyZW5jZXM6OnJlYWxseUFk
ZChWTQogICAgIH0KIH0KIAotdm9pZCBEZXNpcmVkV2Vha1JlZmVyZW5jZXM6OnZpc2l0Q2hpbGRy
ZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIERlc2lyZWRXZWFrUmVmZXJlbmNlczo6dmlz
aXRDaGlsZHJlbihBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGZvciAoSlND
ZWxsKiB0YXJnZXQgOiBtX3JlZmVyZW5jZXMpCiAgICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJy
aWVyZWQodGFyZ2V0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJl
ZFdlYWtSZWZlcmVuY2VzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdEZXNpcmVkV2Vha1JlZmVyZW5jZXMuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2Vha1JlZmVyZW5jZXMuaAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTMxLDEwICszMSwxMCBAQAogCiBuYW1lc3BhY2UgSlNDIHsgCiAKK2NsYXNzIEFi
c3RyYWN0U2xvdFZpc2l0b3I7CiBjbGFzcyBDb2RlQmxvY2s7CiBjbGFzcyBKU0NlbGw7CiBjbGFz
cyBKU1ZhbHVlOwotY2xhc3MgU2xvdFZpc2l0b3I7CiBjbGFzcyBWTTsKIAogbmFtZXNwYWNlIERG
RyB7CkBAIC01Miw4ICs1Miw4IEBAIHB1YmxpYzoKICAgICBib29sIGNvbnRhaW5zKEpTQ2VsbCop
OwogICAgIAogICAgIHZvaWQgcmVhbGx5QWRkKFZNJiwgQ29tbW9uRGF0YSopOwotICAgIAotICAg
IHZvaWQgdmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYpOworCisgICAgdm9pZCB2aXNpdENoaWxk
cmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKIAogcHJpdmF0ZToKICAgICBDb2RlQmxvY2sqIG1f
Y29kZUJsb2NrOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHJl
dmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xNDQ4LDcgKzE0NDgsNyBAQCB2b2lkIEdyYXBoOjpyZWdpc3Rl
ckZyb3plblZhbHVlcygpCiAgICAgbV9jb2RlQmxvY2stPmNvbnN0YW50c1NvdXJjZUNvZGVSZXBy
ZXNlbnRhdGlvbigpLnNocmlua1RvRml0KCk7CiB9CiAKLXZvaWQgR3JhcGg6OnZpc2l0Q2hpbGRy
ZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIEdyYXBoOjp2aXNpdENoaWxkcmVuKEFic3Ry
YWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgZm9yIChGcm96ZW5WYWx1ZSogdmFsdWUg
OiBtX2Zyb3plblZhbHVlcykgewogICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKHZh
bHVlLT52YWx1ZSgpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGgu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHJl
dmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEt
MjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTEtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTEwMDAsOSArMTAwMCw5IEBAIHB1YmxpYzoKICAgICBib29sIGNh
bkRvRmFzdFNwcmVhZChOb2RlKiwgY29uc3QgQWJzdHJhY3RWYWx1ZSYpOwogICAgIAogICAgIHZv
aWQgcmVnaXN0ZXJGcm96ZW5WYWx1ZXMoKTsKLSAgICAKLSAgICB2b2lkIHZpc2l0Q2hpbGRyZW4o
U2xvdFZpc2l0b3ImKSBmaW5hbDsKLSAgICAKKworICAgIHZvaWQgdmlzaXRDaGlsZHJlbihBYnN0
cmFjdFNsb3RWaXNpdG9yJikgZmluYWw7CisKICAgICB2b2lkIGxvZ0Fzc2VydGlvbkZhaWx1cmUo
CiAgICAgICAgIHN0ZDo6bnVsbHB0cl90LCBjb25zdCBjaGFyKiBmaWxlLCBpbnQgbGluZSwgY29u
c3QgY2hhciogZnVuY3Rpb24sCiAgICAgICAgIGNvbnN0IGNoYXIqIGFzc2VydGlvbik7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjAgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC02NzIsOSArNjcyLDEwIEBAIENvbXBpbGF0aW9uS2V5IFBsYW46OmtleSgpCiAgICAgcmV0dXJu
IENvbXBpbGF0aW9uS2V5KG1fY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpLCBtX21vZGUpOwogfQog
Ci12b2lkIFBsYW46OmNoZWNrTGl2ZW5lc3NBbmRWaXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgUGxhbjo6Y2hlY2tMaXZl
bmVzc0FuZFZpc2l0Q2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKLSAgICBpZiAoIWlzS25v
d25Ub0JlTGl2ZUR1cmluZ0dDKCkpCisgICAgaWYgKCFpc0tub3duVG9CZUxpdmVEdXJpbmdHQyh2
aXNpdG9yKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgY2xlYW5NdXN0SGFuZGxlVmFsdWVzSWZO
ZWNlc3NhcnkoKTsKQEAgLTcwMiwxMyArNzAzLDMzIEBAIHZvaWQgUGxhbjo6Y2hlY2tMaXZlbmVz
c0FuZFZpc2l0Q2hpbGRyZW4KICAgICBtX3RyYW5zaXRpb25zLnZpc2l0Q2hpbGRyZW4odmlzaXRv
cik7CiB9CiAKK3RlbXBsYXRlIHZvaWQgUGxhbjo6Y2hlY2tMaXZlbmVzc0FuZFZpc2l0Q2hpbGRy
ZW4oQWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBQbGFuOjpjaGVja0xpdmVu
ZXNzQW5kVmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYpOworCiB2b2lkIFBsYW46OmZpbmFsaXpl
SW5HQygpCiB7CiAgICAgQVNTRVJUKG1fdm0pOwogICAgIG1fcmVjb3JkZWRTdGF0dXNlcy5maW5h
bGl6ZVdpdGhvdXREZWxldGluZygqbV92bSk7CiB9CiAKLWJvb2wgUGxhbjo6aXNLbm93blRvQmVM
aXZlRHVyaW5nR0MoKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK2Jvb2wgUGxhbjo6aXNL
bm93blRvQmVMaXZlRHVyaW5nR0MoVmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBpZiAobV9zdGFn
ZSA9PSBDYW5jZWxsZWQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIXZpc2l0b3Iu
aXNNYXJrZWQobV9jb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIGlmICghdmlzaXRvci5pc01hcmtlZChtX2NvZGVCbG9jay0+YWx0ZXJuYXRp
dmUoKSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoISFtX3Byb2ZpbGVkREZHQ29k
ZUJsb2NrICYmICF2aXNpdG9yLmlzTWFya2VkKG1fcHJvZmlsZWRERkdDb2RlQmxvY2spKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3RlbXBsYXRlIGJvb2wg
UGxhbjo6aXNLbm93blRvQmVMaXZlRHVyaW5nR0MoQWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVt
cGxhdGUgYm9vbCBQbGFuOjppc0tub3duVG9CZUxpdmVEdXJpbmdHQyhTbG90VmlzaXRvciYpOwor
Citib29sIFBsYW46OmlzS25vd25Ub0JlTGl2ZUFmdGVyR0MoKQogewogICAgIGlmIChtX3N0YWdl
ID09IENhbmNlbGxlZCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdQbGFuLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdQbGFuLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHUGxhbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDMsOCArNDMsOCBAQAogCiBu
YW1lc3BhY2UgSlNDIHsKIAorY2xhc3MgQWJzdHJhY3RTbG90VmlzaXRvcjsKIGNsYXNzIENvZGVC
bG9jazsKLWNsYXNzIFNsb3RWaXNpdG9yOwogCiBuYW1lc3BhY2UgREZHIHsKIApAQCAtNzAsMTAg
KzcwLDExIEBAIHB1YmxpYzoKICAgICAKICAgICBDb21waWxhdGlvbktleSBrZXkoKTsKICAgICAK
LSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgotICAgIHZvaWQgaXRlcmF0ZUNvZGVCbG9ja3NG
b3JHQyhjb25zdCBGdW5jJik7Ci0gICAgdm9pZCBjaGVja0xpdmVuZXNzQW5kVmlzaXRDaGlsZHJl
bihTbG90VmlzaXRvciYpOwotICAgIGJvb2wgaXNLbm93blRvQmVMaXZlRHVyaW5nR0MoKTsKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jLCB0eXBlbmFtZSBWaXNpdG9yPgorICAgIHZvaWQgaXRl
cmF0ZUNvZGVCbG9ja3NGb3JHQyhWaXNpdG9yJiwgY29uc3QgRnVuYyYpOworICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgY2hlY2tMaXZlbmVzc0FuZFZpc2l0Q2hpbGRyZW4oVmlz
aXRvciYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IGJvb2wgaXNLbm93blRvQmVM
aXZlRHVyaW5nR0MoVmlzaXRvciYpOworICAgIGJvb2wgaXNLbm93blRvQmVMaXZlQWZ0ZXJHQygp
OwogICAgIHZvaWQgZmluYWxpemVJbkdDKCk7CiAgICAgdm9pZCBjYW5jZWwoKTsKIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuSW5saW5lcy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbklubGluZXMuaAkocmV2aXNpb24gMjcy
ODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuSW5saW5lcy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNy0yMDE4
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0y
MDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMzEsMTAgKzMxLDEwIEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
REZHIHsKIAogI2lmIEVOQUJMRShERkdfSklUKQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgot
dm9pZCBQbGFuOjppdGVyYXRlQ29kZUJsb2Nrc0ZvckdDKGNvbnN0IEZ1bmMmIGZ1bmMpCit0ZW1w
bGF0ZTx0eXBlbmFtZSBGdW5jLCB0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBQbGFuOjppdGVyYXRl
Q29kZUJsb2Nrc0ZvckdDKFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IEZ1bmMmIGZ1bmMpCiB7Ci0g
ICAgaWYgKCFpc0tub3duVG9CZUxpdmVEdXJpbmdHQygpKQorICAgIGlmICghaXNLbm93blRvQmVM
aXZlRHVyaW5nR0ModmlzaXRvcikpCiAgICAgICAgIHJldHVybjsKICAgICAKICAgICAvLyBDb21w
aWxhdGlvbiB3cml0ZXMgbG90cyBvZiB2YWx1ZXMgdG8gYSBDb2RlQmxvY2sgd2l0aG91dCBwZXJm
b3JtaW5nCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVwb2ludC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlcG9pbnQuY3Bw
CShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVw
b2ludC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDE0LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE0LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC04MywyOCArODMsNDYgQEAgdm9pZCBTYWZlcG9p
bnQ6OmJlZ2luKCkKICAgICB9CiB9CiAKLXZvaWQgU2FmZXBvaW50OjpjaGVja0xpdmVuZXNzQW5k
VmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZp
c2l0b3I+Cit2b2lkIFNhZmVwb2ludDo6Y2hlY2tMaXZlbmVzc0FuZFZpc2l0Q2hpbGRyZW4oVmlz
aXRvciYgdmlzaXRvcikKIHsKICAgICBSRUxFQVNFX0FTU0VSVChtX2RpZENhbGxCZWdpbik7CiAK
ICAgICBpZiAobV9yZXN1bHQubV9kaWRHZXRDYW5jZWxsZWQpCiAgICAgICAgIHJldHVybjsgLy8g
V2Ugd2VyZSBjYW5jZWxsZWQgZHVyaW5nIGEgcHJldmlvdXMgR0MhCiAgICAgCi0gICAgaWYgKCFp
c0tub3duVG9CZUxpdmVEdXJpbmdHQygpKQorICAgIGlmICghaXNLbm93blRvQmVMaXZlRHVyaW5n
R0ModmlzaXRvcikpCiAgICAgICAgIHJldHVybjsKICAgICAKICAgICBmb3IgKHVuc2lnbmVkIGkg
PSBtX3NjYW5uYWJsZXMuc2l6ZSgpOyBpLS07KQogICAgICAgICBtX3NjYW5uYWJsZXNbaV0tPnZp
c2l0Q2hpbGRyZW4odmlzaXRvcik7CiB9CiAKLWJvb2wgU2FmZXBvaW50Ojppc0tub3duVG9CZUxp
dmVEdXJpbmdHQygpCit0ZW1wbGF0ZSB2b2lkIFNhZmVwb2ludDo6Y2hlY2tMaXZlbmVzc0FuZFZp
c2l0Q2hpbGRyZW4oQWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBTYWZlcG9p
bnQ6OmNoZWNrTGl2ZW5lc3NBbmRWaXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CisKK3RlbXBs
YXRlPHR5cGVuYW1lIFZpc2l0b3I+Citib29sIFNhZmVwb2ludDo6aXNLbm93blRvQmVMaXZlRHVy
aW5nR0MoVmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChtX2RpZENhbGxC
ZWdpbik7CisgICAgCisgICAgaWYgKG1fcmVzdWx0Lm1fZGlkR2V0Q2FuY2VsbGVkKQorICAgICAg
ICByZXR1cm4gdHJ1ZTsgLy8gV2Ugd2VyZSBjYW5jZWxsZWQgZHVyaW5nIGEgcHJldmlvdXMgR0Ms
IHNvIGxldCdzIG5vdCBtZXNzIHdpdGggaXQgdGhpcyB0aW1lIGFyb3VuZCAtIHByZXRlbmQgaXQn
cyBsaXZlIGFuZCBtb3ZlIG9uLgorICAgIAorICAgIHJldHVybiBtX3BsYW4uaXNLbm93blRvQmVM
aXZlRHVyaW5nR0ModmlzaXRvcik7Cit9CisKK3RlbXBsYXRlIGJvb2wgU2FmZXBvaW50Ojppc0tu
b3duVG9CZUxpdmVEdXJpbmdHQyhBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSBib29s
IFNhZmVwb2ludDo6aXNLbm93blRvQmVMaXZlRHVyaW5nR0MoU2xvdFZpc2l0b3ImKTsKKworYm9v
bCBTYWZlcG9pbnQ6OmlzS25vd25Ub0JlTGl2ZUFmdGVyR0MoKQogewogICAgIFJFTEVBU0VfQVNT
RVJUKG1fZGlkQ2FsbEJlZ2luKTsKICAgICAKICAgICBpZiAobV9yZXN1bHQubV9kaWRHZXRDYW5j
ZWxsZWQpCiAgICAgICAgIHJldHVybiB0cnVlOyAvLyBXZSB3ZXJlIGNhbmNlbGxlZCBkdXJpbmcg
YSBwcmV2aW91cyBHQywgc28gbGV0J3Mgbm90IG1lc3Mgd2l0aCBpdCB0aGlzIHRpbWUgYXJvdW5k
IC0gcHJldGVuZCBpdCdzIGxpdmUgYW5kIG1vdmUgb24uCiAgICAgCi0gICAgcmV0dXJuIG1fcGxh
bi5pc0tub3duVG9CZUxpdmVEdXJpbmdHQygpOworICAgIHJldHVybiBtX3BsYW4uaXNLbm93blRv
QmVMaXZlQWZ0ZXJHQygpOwogfQogCiB2b2lkIFNhZmVwb2ludDo6Y2FuY2VsKCkKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZXBvaW50LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlcG9pbnQuaAkocmV2aXNpb24gMjcyODMwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlcG9pbnQuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQsIDIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0zMSw3ICszMSw3IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1jbGFzcyBTbG90Vmlz
aXRvcjsKK2NsYXNzIEFic3RyYWN0U2xvdFZpc2l0b3I7CiBjbGFzcyBWTTsKIAogbmFtZXNwYWNl
IERGRyB7CkBAIC02Niw5ICs2NiwxMCBAQCBwdWJsaWM6CiAgICAgdm9pZCBhZGQoU2Nhbm5hYmxl
Kik7CiAgICAgCiAgICAgdm9pZCBiZWdpbigpOwotICAgIAotICAgIHZvaWQgY2hlY2tMaXZlbmVz
c0FuZFZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKLSAgICBib29sIGlzS25vd25Ub0JlTGl2
ZUR1cmluZ0dDKCk7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIGNoZWNr
TGl2ZW5lc3NBbmRWaXNpdENoaWxkcmVuKFZpc2l0b3ImKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBWaXNpdG9yPiBib29sIGlzS25vd25Ub0JlTGl2ZUR1cmluZ0dDKFZpc2l0b3ImKTsKKyAgICBi
b29sIGlzS25vd25Ub0JlTGl2ZUFmdGVyR0MoKTsKICAgICB2b2lkIGNhbmNlbCgpOwogICAgIAog
ICAgIFZNKiB2bSgpIGNvbnN0OyAvLyBNYXkgcmV0dXJuIG51bGwgaWYgd2UndmUgYmVlbiBjYW5j
ZWxsZWQuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NjYW5uYWJsZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2Nhbm5hYmxlLmgJKHJl
dmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2Nhbm5hYmxl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
NC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMjksNyArMjksNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotY2xh
c3MgU2xvdFZpc2l0b3I7CitjbGFzcyBBYnN0cmFjdFNsb3RWaXNpdG9yOwogCiBuYW1lc3BhY2Ug
REZHIHsKIApAQCAtMzgsNyArMzgsNyBAQCBwdWJsaWM6CiAgICAgU2Nhbm5hYmxlKCkgeyB9CiAg
ICAgdmlydHVhbCB+U2Nhbm5hYmxlKCkgeyB9CiAgICAgCi0gICAgdmlydHVhbCB2b2lkIHZpc2l0
Q2hpbGRyZW4oU2xvdFZpc2l0b3ImKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0Q2hpbGRy
ZW4oQWJzdHJhY3RTbG90VmlzaXRvciYpID0gMDsKIH07CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlND
OjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3QuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3QuY3BwCShy
ZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM3Miw3ICszNzIsOCBAQCB2b2lkIFdvcmtsaXN0Ojpy
ZXN1bWVBbGxUaHJlYWRzKCkKICAgICBtX3N1c3BlbnNpb25Mb2NrLnVubG9jaygpOwogfQogCi12
b2lkIFdvcmtsaXN0Ojp2aXNpdFdlYWtSZWZlcmVuY2VzKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQor
dGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgV29ya2xpc3Q6OnZpc2l0V2Vha1JlZmVy
ZW5jZXMoVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBWTSogdm0gPSAmdmlzaXRvci5oZWFwKCkt
PnZtKCk7CiAgICAgewpAQCAtMzk2LDYgKzM5Nyw5IEBAIHZvaWQgV29ya2xpc3Q6OnZpc2l0V2Vh
a1JlZmVyZW5jZXMoU2xvdFYKICAgICB9CiB9CiAKK3RlbXBsYXRlIHZvaWQgV29ya2xpc3Q6OnZp
c2l0V2Vha1JlZmVyZW5jZXMoQWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBX
b3JrbGlzdDo6dmlzaXRXZWFrUmVmZXJlbmNlcyhTbG90VmlzaXRvciYpOworCiB2b2lkIFdvcmts
aXN0OjpyZW1vdmVEZWFkUGxhbnMoVk0mIHZtKQogewogICAgIHsKQEAgLTQwNSw3ICs0MDksNyBA
QCB2b2lkIFdvcmtsaXN0OjpyZW1vdmVEZWFkUGxhbnMoVk0mIHZtKQogICAgICAgICAgICAgUGxh
biogcGxhbiA9IGl0ZXItPnZhbHVlLmdldCgpOwogICAgICAgICAgICAgaWYgKHBsYW4tPnZtKCkg
IT0gJnZtKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgaWYgKHBsYW4t
PmlzS25vd25Ub0JlTGl2ZUR1cmluZ0dDKCkpIHsKKyAgICAgICAgICAgIGlmIChwbGFuLT5pc0tu
b3duVG9CZUxpdmVBZnRlckdDKCkpIHsKICAgICAgICAgICAgICAgICBwbGFuLT5maW5hbGl6ZUlu
R0MoKTsKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KQEAgLTQ0MCw3
ICs0NDQsNyBAQCB2b2lkIFdvcmtsaXN0OjpyZW1vdmVEZWFkUGxhbnMoVk0mIHZtKQogICAgICAg
ICAgICAgY29udGludWU7CiAgICAgICAgIGlmIChzYWZlcG9pbnQtPnZtKCkgIT0gJnZtKQogICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlmIChzYWZlcG9pbnQtPmlzS25vd25Ub0JlTGl2
ZUR1cmluZ0dDKCkpCisgICAgICAgIGlmIChzYWZlcG9pbnQtPmlzS25vd25Ub0JlTGl2ZUFmdGVy
R0MoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBzYWZlcG9pbnQtPmNhbmNlbCgp
OwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3QuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0LmgJKHJl
dmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3Qu
aAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTM1LDcgKzM1LDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAK
LWNsYXNzIFNsb3RWaXNpdG9yOworY2xhc3MgQWJzdHJhY3RTbG90VmlzaXRvcjsKIAogbmFtZXNw
YWNlIERGRyB7CiAKQEAgLTU3LDcgKzU3LDcgQEAgcHVibGljOgogICAgIHZvaWQgY29tcGxldGVB
bGxQbGFuc0ZvclZNKFZNJik7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgotICAgIHZv
aWQgaXRlcmF0ZUNvZGVCbG9ja3NGb3JHQyhWTSYsIGNvbnN0IEZ1bmMmKTsKKyAgICB2b2lkIGl0
ZXJhdGVDb2RlQmxvY2tzRm9yR0MoQWJzdHJhY3RTbG90VmlzaXRvciYsIFZNJiwgY29uc3QgRnVu
YyYpOwogCiAgICAgdm9pZCB3YWl0VW50aWxBbGxQbGFuc0ZvclZNQXJlUmVhZHkoVk0mKTsKICAg
ICBTdGF0ZSBjb21wbGV0ZUFsbFJlYWR5UGxhbnNGb3JWTShWTSYsIENvbXBpbGF0aW9uS2V5ID0g
Q29tcGlsYXRpb25LZXkoKSk7CkBAIC03Myw3ICs3Myw3IEBAIHB1YmxpYzoKICAgICBib29sIGlz
QWN0aXZlRm9yVk0oVk0mKSBjb25zdDsKICAgICAKICAgICAvLyBPbmx5IGNhbGxlZCBvbiB0aGUg
bWFpbiB0aHJlYWQgYWZ0ZXIgc3VzcGVuZGluZyBhbGwgdGhyZWFkcy4KLSAgICB2b2lkIHZpc2l0
V2Vha1JlZmVyZW5jZXMoU2xvdFZpc2l0b3ImKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNp
dG9yPiB2b2lkIHZpc2l0V2Vha1JlZmVyZW5jZXMoVmlzaXRvciYpOwogICAgIHZvaWQgcmVtb3Zl
RGVhZFBsYW5zKFZNJik7CiAgICAgCiAgICAgdm9pZCByZW1vdmVOb25Db21waWxpbmdQbGFuc0Zv
clZNKFZNJik7CkBAIC0xNDQsNyArMTQ0LDcgQEAgV29ya2xpc3QmIGV4aXN0aW5nV29ya2xpc3RG
b3JJbmRleCh1bnNpZwogdm9pZCBjb21wbGV0ZUFsbFBsYW5zRm9yVk0oVk0mKTsKIAogdGVtcGxh
dGU8dHlwZW5hbWUgRnVuYz4KLXZvaWQgaXRlcmF0ZUNvZGVCbG9ja3NGb3JHQyhWTSYsIGNvbnN0
IEZ1bmMmKTsKK3ZvaWQgaXRlcmF0ZUNvZGVCbG9ja3NGb3JHQyhBYnN0cmFjdFNsb3RWaXNpdG9y
JiwgVk0mLCBjb25zdCBGdW5jJik7CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlzdElubGluZXMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0SW5saW5lcy5oCShy
ZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0
SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxNy0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzMsMzAgKzMzLDMwIEBAIG5hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgREZHIHsKICNpZiBFTkFCTEUoREZHX0pJVCkKIAogdGVtcGxhdGU8dHlw
ZW5hbWUgRnVuYz4KLXZvaWQgaXRlcmF0ZUNvZGVCbG9ja3NGb3JHQyhWTSYgdm0sIGNvbnN0IEZ1
bmMmIGZ1bmMpCit2b2lkIGl0ZXJhdGVDb2RlQmxvY2tzRm9yR0MoQWJzdHJhY3RTbG90VmlzaXRv
ciYgdmlzaXRvciwgVk0mIHZtLCBjb25zdCBGdW5jJiBmdW5jKQogewogICAgIGZvciAodW5zaWdu
ZWQgaSA9IERGRzo6bnVtYmVyT2ZXb3JrbGlzdHMoKTsgaS0tOykgewogICAgICAgICBpZiAoREZH
OjpXb3JrbGlzdCogd29ya2xpc3QgPSBERkc6OmV4aXN0aW5nV29ya2xpc3RGb3JJbmRleE9yTnVs
bChpKSkKLSAgICAgICAgICAgIHdvcmtsaXN0LT5pdGVyYXRlQ29kZUJsb2Nrc0ZvckdDKHZtLCBm
dW5jKTsKKyAgICAgICAgICAgIHdvcmtsaXN0LT5pdGVyYXRlQ29kZUJsb2Nrc0ZvckdDKHZpc2l0
b3IsIHZtLCBmdW5jKTsKICAgICB9CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+Ci12b2lk
IFdvcmtsaXN0OjppdGVyYXRlQ29kZUJsb2Nrc0ZvckdDKFZNJiB2bSwgY29uc3QgRnVuYyYgZnVu
YykKK3ZvaWQgV29ya2xpc3Q6Oml0ZXJhdGVDb2RlQmxvY2tzRm9yR0MoQWJzdHJhY3RTbG90Vmlz
aXRvciYgdmlzaXRvciwgVk0mIHZtLCBjb25zdCBGdW5jJiBmdW5jKQogewogICAgIExvY2tIb2xk
ZXIgbG9ja2VyKCptX2xvY2spOwogICAgIGZvciAoUGxhbk1hcDo6aXRlcmF0b3IgaXRlciA9IG1f
cGxhbnMuYmVnaW4oKTsgaXRlciAhPSBtX3BsYW5zLmVuZCgpOyArK2l0ZXIpIHsKICAgICAgICAg
UGxhbiogcGxhbiA9IGl0ZXItPnZhbHVlLmdldCgpOwogICAgICAgICBpZiAocGxhbi0+dm0oKSAh
PSAmdm0pCiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgcGxhbi0+aXRlcmF0ZUNvZGVC
bG9ja3NGb3JHQyhmdW5jKTsKKyAgICAgICAgcGxhbi0+aXRlcmF0ZUNvZGVCbG9ja3NGb3JHQyh2
aXNpdG9yLCBmdW5jKTsKICAgICB9CiB9CiAKICNlbHNlIC8vIEVOQUJMRShERkdfSklUKQogCiB0
ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgotdm9pZCBpdGVyYXRlQ29kZUJsb2Nrc0ZvckdDKFZNJiwg
Y29uc3QgRnVuYyYpCit2b2lkIGl0ZXJhdGVDb2RlQmxvY2tzRm9yR0MoQWJzdHJhY3RTbG90Vmlz
aXRvciYsIFZNJiwgY29uc3QgRnVuYyYpCiB7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0Fic3RyYWN0U2xvdFZpc2l0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9BYnN0cmFjdFNsb3RWaXNpdG9yLmgJKG5vbmV4aXN0ZW50KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQWJzdHJhY3RTbG90VmlzaXRvci5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsMjA4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJKU0NKU1ZhbHVlLmgiCisj
aW5jbHVkZSAiTWFya1N0YWNrLmgiCisjaW5jbHVkZSAiUm9vdE1hcmtSZWFzb24uaCIKKyNpbmNs
dWRlICJWaXNpdFJhY2VLZXkuaCIKKyNpbmNsdWRlIDx3dGYvQ29uY3VycmVudFB0ckhhc2hTZXQu
aD4KKyNpbmNsdWRlIDx3dGYvU2hhcmVkVGFzay5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJp
bmcuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIENvbnNlcnZhdGl2ZVJvb3RzOworY2xh
c3MgSGVhcDsKK2NsYXNzIEhlYXBDZWxsOworY2xhc3MgSlNDZWxsOworY2xhc3MgTWFya2VkQmxv
Y2s7CitjbGFzcyBNYXJraW5nQ29uc3RyYWludDsKK2NsYXNzIE1hcmtpbmdDb25zdHJhaW50U29s
dmVyOworY2xhc3MgUHJlY2lzZUFsbG9jYXRpb247CitjbGFzcyBTbG90VmlzaXRvcjsKK2NsYXNz
IFZNOworY2xhc3MgVmVyaWZpZXJTbG90VmlzaXRvcjsKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGNs
YXNzIFdlYWs7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBUcmFpdHM+IGNsYXNzIFdy
aXRlQmFycmllckJhc2U7CisKK2NsYXNzIEFic3RyYWN0U2xvdFZpc2l0b3IgeworICAgIFdURl9N
QUtFX05PTkNPUFlBQkxFKEFic3RyYWN0U2xvdFZpc2l0b3IpOworICAgIFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEOworcHVibGljOgorICAgIGNsYXNzIENvbnRleHQgeworICAgIHB1YmxpYzoKKyAg
ICAgICAgQ29udGV4dChBYnN0cmFjdFNsb3RWaXNpdG9yJiwgSGVhcENlbGwqKTsKKyAgICAgICAg
fkNvbnRleHQoKTsKKyAgICAgICAgSGVhcENlbGwqIGNlbGwoKSBjb25zdCB7IHJldHVybiBtX2Nl
bGw7IH0KKyAgICBwcml2YXRlOgorICAgICAgICBBYnN0cmFjdFNsb3RWaXNpdG9yJiBtX3Zpc2l0
b3I7CisgICAgICAgIEhlYXBDZWxsKiBtX2NlbGw7CisgICAgICAgIENvbnRleHQqIG1fcHJldmlv
dXM7CisgICAgfTsKKworICAgIGNsYXNzIFN1cHByZXNzR0NWZXJpZmllclNjb3BlIHsKKyAgICBw
dWJsaWM6CisgICAgICAgIFN1cHByZXNzR0NWZXJpZmllclNjb3BlKEFic3RyYWN0U2xvdFZpc2l0
b3ImIHZpc2l0b3IpCisgICAgICAgICAgICA6IG1fdmlzaXRvcih2aXNpdG9yKQorICAgICAgICB7
CisgICAgICAgICAgICBBU1NFUlQoIW1fdmlzaXRvci5tX3N1cHByZXNzVmVyaWZpZXIpOworICAg
ICAgICAgICAgbV92aXNpdG9yLm1fc3VwcHJlc3NWZXJpZmllciA9IHRydWU7CisgICAgICAgIH0K
KyAgICAgICAgflN1cHByZXNzR0NWZXJpZmllclNjb3BlKCkgeyBtX3Zpc2l0b3IubV9zdXBwcmVz
c1ZlcmlmaWVyID0gZmFsc2U7IH0KKyAgICBwcml2YXRlOgorICAgICAgICBBYnN0cmFjdFNsb3RW
aXNpdG9yJiBtX3Zpc2l0b3I7CisgICAgfTsKKworICAgIGNsYXNzIERlZmF1bHRNYXJraW5nVmlv
bGF0aW9uQXNzZXJ0aW9uU2NvcGUgeworICAgIHB1YmxpYzoKKyAgICAgICAgRGVmYXVsdE1hcmtp
bmdWaW9sYXRpb25Bc3NlcnRpb25TY29wZShBYnN0cmFjdFNsb3RWaXNpdG9yJikgeyB9CisgICAg
fTsKKworICAgIHZpcnR1YWwgfkFic3RyYWN0U2xvdFZpc2l0b3IoKSA9IGRlZmF1bHQ7CisKKyAg
ICBNYXJrU3RhY2tBcnJheSYgY29sbGVjdG9yTWFya1N0YWNrKCkgeyByZXR1cm4gbV9jb2xsZWN0
b3JTdGFjazsgfQorICAgIE1hcmtTdGFja0FycmF5JiBtdXRhdG9yTWFya1N0YWNrKCkgeyByZXR1
cm4gbV9tdXRhdG9yU3RhY2s7IH0KKyAgICBjb25zdCBNYXJrU3RhY2tBcnJheSYgY29sbGVjdG9y
TWFya1N0YWNrKCkgY29uc3QgeyByZXR1cm4gbV9jb2xsZWN0b3JTdGFjazsgfQorICAgIGNvbnN0
IE1hcmtTdGFja0FycmF5JiBtdXRhdG9yTWFya1N0YWNrKCkgY29uc3QgeyByZXR1cm4gbV9tdXRh
dG9yU3RhY2s7IH0KKworICAgIGJvb2wgaXNFbXB0eSgpIHsgcmV0dXJuIG1fY29sbGVjdG9yU3Rh
Y2suaXNFbXB0eSgpICYmIG1fbXV0YXRvclN0YWNrLmlzRW1wdHkoKTsgfQorCisgICAgVk0mIHZt
KCk7CisgICAgY29uc3QgVk0mIHZtKCkgY29uc3Q7CisgICAgSGVhcCogaGVhcCgpIGNvbnN0Owor
CisgICAgdmlydHVhbCB2b2lkIGFwcGVuZChjb25zdCBDb25zZXJ2YXRpdmVSb290cyYpID0gMDsK
KworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFRyYWl0cz4gdm9pZCBhcHBlbmQo
Y29uc3QgV3JpdGVCYXJyaWVyQmFzZTxULCBUcmFpdHM+Jik7CisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgVCwgdHlwZW5hbWUgVHJhaXRzPiB2b2lkIGFwcGVuZEhpZGRlbihjb25zdCBXcml0ZUJhcnJp
ZXJCYXNlPFQsIFRyYWl0cz4mKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJdGVyYXRvcj4gdm9p
ZCBhcHBlbmQoSXRlcmF0b3IgYmVnaW4gLCBJdGVyYXRvciBlbmQpOworICAgIEFMV0FZU19JTkxJ
TkUgdm9pZCBhcHBlbmRWYWx1ZXMoY29uc3QgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duLCBSYXdW
YWx1ZVRyYWl0czxVbmtub3duPj4qLCBzaXplX3QgY291bnQpOworICAgIEFMV0FZU19JTkxJTkUg
dm9pZCBhcHBlbmRWYWx1ZXNIaWRkZW4oY29uc3QgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duLCBS
YXdWYWx1ZVRyYWl0czxVbmtub3duPj4qLCBzaXplX3QgY291bnQpOworCisgICAgLy8gVGhlc2Ug
ZG9uJ3QgcmVxdWlyZSB5b3UgdG8gcHJvdmUgdGhhdCB5b3UgaGF2ZSBhIFdyaXRlQmFycmllcjw+
LiBUaGF0IG1ha2VzIHNlbnNlCisgICAgLy8gZm9yOgorICAgIC8vCisgICAgLy8gLSByb290cy4K
KyAgICAvLyAtIHNvcGhpc3RpY2F0ZWQgZGF0YSBzdHJ1Y3R1cmVzIHRoYXQgYmFycmllciB0aHJv
dWdoIG90aGVyIG1lYW5zIChsaWtlIERGRzo6UGxhbiBhbmQKKyAgICAvLyAgIGZyaWVuZHMpLgor
ICAgIC8vCisgICAgLy8gSWYgeW91IGFyZSBub3QgYSByb290IGFuZCB5b3UgZG9uJ3Qga25vdyB3
aGF0IGtpbmQgb2YgYmFycmllciB5b3UgaGF2ZSwgdGhlbiB5b3UKKyAgICAvLyBzaG91bGRuJ3Qg
Y2FsbCB0aGVzZSBtZXRob2RzLgorICAgIEFMV0FZU19JTkxJTkUgdm9pZCBhcHBlbmRVbmJhcnJp
ZXJlZChKU1ZhbHVlKTsKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgYXBwZW5kVW5iYXJyaWVyZWQo
SlNWYWx1ZSosIHNpemVfdCk7CisgICAgdmlydHVhbCB2b2lkIGFwcGVuZFVuYmFycmllcmVkKEpT
Q2VsbCopID0gMDsKKworICAgIGlubGluZSBib29sIGFkZE9wYXF1ZVJvb3Qodm9pZCopOyAvLyBS
ZXR1cm5zIHRydWUgaWYgdGhlIHJvb3Qgd2FzIG5ldy4KKyAgICBpbmxpbmUgYm9vbCBjb250YWlu
c09wYXF1ZVJvb3Qodm9pZCopIGNvbnN0OworICAgIHZvaWQgc2V0SWdub3JlTmV3T3BhcXVlUm9v
dHMoYm9vbCB2YWx1ZSkgeyBtX2lnbm9yZU5ld09wYXF1ZVJvb3RzID0gdmFsdWU7IH0KKworICAg
IHZpcnR1YWwgYm9vbCBpc0ZpcnN0VmlzaXQoKSBjb25zdCA9IDA7CisKKyAgICB2aXJ0dWFsIGJv
b2wgaXNNYXJrZWQoY29uc3Qgdm9pZCopIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNN
YXJrZWQoTWFya2VkQmxvY2smLCBIZWFwQ2VsbCopIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGJv
b2wgaXNNYXJrZWQoUHJlY2lzZUFsbG9jYXRpb24mLCBIZWFwQ2VsbCopIGNvbnN0ID0gMDsKKwor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgdm9pZCBhcHBlbmQoY29uc3QgV2VhazxUPiYp
OworCisgICAgQUxXQVlTX0lOTElORSB2b2lkIGFwcGVuZEhpZGRlblVuYmFycmllcmVkKEpTVmFs
dWUpOworICAgIHZpcnR1YWwgdm9pZCBhcHBlbmRIaWRkZW5VbmJhcnJpZXJlZChKU0NlbGwqKSA9
IDA7CisKKyAgICBzaXplX3QgdmlzaXRDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fdmlzaXRDb3Vu
dDsgfQorCisgICAgdm9pZCBhZGRUb1Zpc2l0Q291bnQoc2l6ZV90IHZhbHVlKSB7IG1fdmlzaXRD
b3VudCArPSB2YWx1ZTsgfQorCisgICAgdmlydHVhbCB2b2lkIGFkZFBhcmFsbGVsQ29uc3RyYWlu
dFRhc2soUmVmUHRyPFNoYXJlZFRhc2s8dm9pZChBYnN0cmFjdFNsb3RWaXNpdG9yJik+PikgPSAw
OworICAgIHZpcnR1YWwgdm9pZCBhZGRQYXJhbGxlbENvbnN0cmFpbnRUYXNrKFJlZlB0cjxTaGFy
ZWRUYXNrPHZvaWQoU2xvdFZpc2l0b3ImKT4+KSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgbWFy
a0F1eGlsaWFyeShjb25zdCB2b2lkKiBiYXNlKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgcmVw
b3J0RXh0cmFNZW1vcnlWaXNpdGVkKHNpemVfdCkgPSAwOworI2lmIEVOQUJMRShSRVNPVVJDRV9V
U0FHRSkKKyAgICB2aXJ0dWFsIHZvaWQgcmVwb3J0RXh0ZXJuYWxNZW1vcnlWaXNpdGVkKHNpemVf
dCkgPSAwOworI2VuZGlmCisKKyAgICB2aXJ0dWFsIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNv
bnN0ID0gMDsKKworICAgIFJvb3RNYXJrUmVhc29uIHJvb3RNYXJrUmVhc29uKCkgY29uc3QgeyBy
ZXR1cm4gbV9yb290TWFya1JlYXNvbjsgfQorICAgIHZvaWQgc2V0Um9vdE1hcmtSZWFzb24oUm9v
dE1hcmtSZWFzb24gcmVhc29uKSB7IG1fcm9vdE1hcmtSZWFzb24gPSByZWFzb247IH0KKworICAg
IHZpcnR1YWwgYm9vbCBtdXRhdG9ySXNTdG9wcGVkKCkgY29uc3QgPSAwOworCisgICAgdmlydHVh
bCB2b2lkIGRpZFJhY2UoY29uc3QgVmlzaXRSYWNlS2V5JikgPSAwOworICAgIHZvaWQgZGlkUmFj
ZShKU0NlbGwqIGNlbGwsIGNvbnN0IGNoYXIqIHJlYXNvbikgeyBkaWRSYWNlKFZpc2l0UmFjZUtl
eShjZWxsLCByZWFzb24pKTsgfQorCisgICAgdmlydHVhbCB2b2lkIHZpc2l0QXNDb25zdHJhaW50
KGNvbnN0IEpTQ2VsbCopID0gMDsKKworICAgIGNvbnN0IGNoYXIqIGNvZGVOYW1lKCkgY29uc3Qg
eyByZXR1cm4gbV9jb2RlTmFtZS5kYXRhKCk7IH0KKworcHJvdGVjdGVkOgorICAgIGlubGluZSBB
YnN0cmFjdFNsb3RWaXNpdG9yKEhlYXAmLCBDU3RyaW5nIGNvZGVOYW1lLCBDb25jdXJyZW50UHRy
SGFzaFNldCYpOworCisgICAgSGVhcENlbGwqIHBhcmVudENlbGwoKSBjb25zdDsKKyAgICB2b2lk
IHJlc2V0KCk7CisKKyAgICBNYXJrU3RhY2tBcnJheSBtX2NvbGxlY3RvclN0YWNrOworICAgIE1h
cmtTdGFja0FycmF5IG1fbXV0YXRvclN0YWNrOworCisgICAgc2l6ZV90IG1fdmlzaXRDb3VudCB7
IDAgfTsKKworICAgIEhlYXAmIG1faGVhcDsKKyAgICBDb250ZXh0KiBtX2NvbnRleHQgeyBudWxs
cHRyIH07CisgICAgQ1N0cmluZyBtX2NvZGVOYW1lOworCisgICAgTWFya2luZ0NvbnN0cmFpbnQq
IG1fY3VycmVudENvbnN0cmFpbnQgeyBudWxscHRyIH07CisgICAgTWFya2luZ0NvbnN0cmFpbnRT
b2x2ZXIqIG1fY3VycmVudFNvbHZlciB7IG51bGxwdHIgfTsKKyAgICBDb25jdXJyZW50UHRySGFz
aFNldCYgbV9vcGFxdWVSb290czsKKworICAgIFJvb3RNYXJrUmVhc29uIG1fcm9vdE1hcmtSZWFz
b24geyBSb290TWFya1JlYXNvbjo6Tm9uZSB9OworICAgIGJvb2wgbV9zdXBwcmVzc1ZlcmlmaWVy
IHsgZmFsc2UgfTsKKyAgICBib29sIG1faWdub3JlTmV3T3BhcXVlUm9vdHMgeyBmYWxzZSB9OyAv
LyBVc2VmdWwgYXMgYSBkZWJ1Z2dpbmcgbW9kZS4KKworICAgIGZyaWVuZCBjbGFzcyBNYXJraW5n
Q29uc3RyYWludFNvbHZlcjsKK307CisKK2NsYXNzIFNldFJvb3RNYXJrUmVhc29uU2NvcGUgewor
cHVibGljOgorICAgIFNldFJvb3RNYXJrUmVhc29uU2NvcGUoQWJzdHJhY3RTbG90VmlzaXRvciYg
dmlzaXRvciwgUm9vdE1hcmtSZWFzb24gcmVhc29uKQorICAgICAgICA6IG1fdmlzaXRvcih2aXNp
dG9yKQorICAgICAgICAsIG1fcHJldmlvdXNSZWFzb24odmlzaXRvci5yb290TWFya1JlYXNvbigp
KQorICAgIHsKKyAgICAgICAgbV92aXNpdG9yLnNldFJvb3RNYXJrUmVhc29uKHJlYXNvbik7Cisg
ICAgfQorCisgICAgflNldFJvb3RNYXJrUmVhc29uU2NvcGUoKQorICAgIHsKKyAgICAgICAgbV92
aXNpdG9yLnNldFJvb3RNYXJrUmVhc29uKG1fcHJldmlvdXNSZWFzb24pOworICAgIH0KKworcHJp
dmF0ZToKKyAgICBBYnN0cmFjdFNsb3RWaXNpdG9yJiBtX3Zpc2l0b3I7CisgICAgUm9vdE1hcmtS
ZWFzb24gbV9wcmV2aW91c1JlYXNvbjsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQWJzdHJhY3RTbG90VmlzaXRvcklubGluZXMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9BYnN0cmFjdFNsb3RWaXNp
dG9ySW5saW5lcy5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0Fic3RyYWN0U2xvdFZpc2l0b3JJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwx
NTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJh
Z21hIG9uY2UKKworI2luY2x1ZGUgIkFic3RyYWN0U2xvdFZpc2l0b3IuaCIKKyNpbmNsdWRlICJI
ZWFwLmgiCisjaW5jbHVkZSAiV2Vha0lubGluZXMuaCIKKyNpbmNsdWRlICJXcml0ZUJhcnJpZXIu
aCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2lubGluZSBBYnN0cmFjdFNsb3RWaXNpdG9yOjpDb250
ZXh0OjpDb250ZXh0KEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIEhlYXBDZWxsKiBjZWxs
KQorICAgIDogbV92aXNpdG9yKHZpc2l0b3IpCisgICAgLCBtX2NlbGwoY2VsbCkKK3sKKyAgICBt
X3ByZXZpb3VzID0gbV92aXNpdG9yLm1fY29udGV4dDsKKyAgICBtX3Zpc2l0b3IubV9jb250ZXh0
ID0gdGhpczsKK30KKworaW5saW5lIEFic3RyYWN0U2xvdFZpc2l0b3I6OkNvbnRleHQ6On5Db250
ZXh0KCkKK3sKKyAgICBtX3Zpc2l0b3IubV9jb250ZXh0ID0gbV9wcmV2aW91czsKK30KKworaW5s
aW5lIEFic3RyYWN0U2xvdFZpc2l0b3I6OkFic3RyYWN0U2xvdFZpc2l0b3IoSGVhcCYgaGVhcCwg
Q1N0cmluZyBjb2RlTmFtZSwgQ29uY3VycmVudFB0ckhhc2hTZXQmIG9wYXF1ZVJvb3RzKQorICAg
IDogbV9oZWFwKGhlYXApCisgICAgLCBtX2NvZGVOYW1lKGNvZGVOYW1lKQorICAgICwgbV9vcGFx
dWVSb290cyhvcGFxdWVSb290cykKK3sKK30KKworaW5saW5lIEhlYXAqIEFic3RyYWN0U2xvdFZp
c2l0b3I6OmhlYXAoKSBjb25zdAoreworICAgIHJldHVybiAmbV9oZWFwOworfQorCitpbmxpbmUg
Vk0mIEFic3RyYWN0U2xvdFZpc2l0b3I6OnZtKCkKK3sKKyAgICByZXR1cm4gbV9oZWFwLnZtKCk7
Cit9CisKK2lubGluZSBjb25zdCBWTSYgQWJzdHJhY3RTbG90VmlzaXRvcjo6dm0oKSBjb25zdAor
eworICAgIHJldHVybiBtX2hlYXAudm0oKTsKK30KKworaW5saW5lIGJvb2wgQWJzdHJhY3RTbG90
VmlzaXRvcjo6YWRkT3BhcXVlUm9vdCh2b2lkKiBwdHIpCit7CisgICAgaWYgKCFwdHIpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAobV9pZ25vcmVOZXdPcGFxdWVSb290cykKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghbV9vcGFxdWVSb290cy5hZGQocHRyKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIG1fdmlzaXRDb3VudCsrOworICAgIHJldHVybiB0cnVlOwor
fQorCitpbmxpbmUgYm9vbCBBYnN0cmFjdFNsb3RWaXNpdG9yOjpjb250YWluc09wYXF1ZVJvb3Qo
dm9pZCogcHRyKSBjb25zdAoreworICAgIHJldHVybiBtX29wYXF1ZVJvb3RzLmNvbnRhaW5zKHB0
cik7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitBTFdBWVNfSU5MSU5FIHZvaWQgQWJzdHJh
Y3RTbG90VmlzaXRvcjo6YXBwZW5kKGNvbnN0IFdlYWs8VD4mIHdlYWspCit7CisgICAgYXBwZW5k
VW5iYXJyaWVyZWQod2Vhay5nZXQoKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVu
YW1lIFRyYWl0cz4KK0FMV0FZU19JTkxJTkUgdm9pZCBBYnN0cmFjdFNsb3RWaXNpdG9yOjphcHBl
bmQoY29uc3QgV3JpdGVCYXJyaWVyQmFzZTxULCBUcmFpdHM+JiBzbG90KQoreworICAgIGFwcGVu
ZFVuYmFycmllcmVkKHNsb3QuZ2V0KCkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBl
bmFtZSBUcmFpdHM+CitBTFdBWVNfSU5MSU5FIHZvaWQgQWJzdHJhY3RTbG90VmlzaXRvcjo6YXBw
ZW5kSGlkZGVuKGNvbnN0IFdyaXRlQmFycmllckJhc2U8VCwgVHJhaXRzPiYgc2xvdCkKK3sKKyAg
ICBhcHBlbmRIaWRkZW5VbmJhcnJpZXJlZChzbG90LmdldCgpKTsKK30KKworQUxXQVlTX0lOTElO
RSB2b2lkIEFic3RyYWN0U2xvdFZpc2l0b3I6OmFwcGVuZEhpZGRlblVuYmFycmllcmVkKEpTVmFs
dWUgdmFsdWUpCit7CisgICAgaWYgKHZhbHVlLmlzQ2VsbCgpKQorICAgICAgICBhcHBlbmRIaWRk
ZW5VbmJhcnJpZXJlZCh2YWx1ZS5hc0NlbGwoKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEl0
ZXJhdG9yPgorQUxXQVlTX0lOTElORSB2b2lkIEFic3RyYWN0U2xvdFZpc2l0b3I6OmFwcGVuZChJ
dGVyYXRvciBiZWdpbiwgSXRlcmF0b3IgZW5kKQoreworICAgIGZvciAoYXV0byBpdCA9IGJlZ2lu
OyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgIGFwcGVuZCgqaXQpOworfQorCitBTFdBWVNfSU5M
SU5FIHZvaWQgQWJzdHJhY3RTbG90VmlzaXRvcjo6YXBwZW5kVmFsdWVzKGNvbnN0IFdyaXRlQmFy
cmllckJhc2U8VW5rbm93bj4qIGJhcnJpZXJzLCBzaXplX3QgY291bnQpCit7CisgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKQorICAgICAgICBhcHBlbmQoYmFycmllcnNbaV0p
OworfQorCitBTFdBWVNfSU5MSU5FIHZvaWQgQWJzdHJhY3RTbG90VmlzaXRvcjo6YXBwZW5kVmFs
dWVzSGlkZGVuKGNvbnN0IFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4qIGJhcnJpZXJzLCBzaXpl
X3QgY291bnQpCit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKQorICAg
ICAgICBhcHBlbmRIaWRkZW4oYmFycmllcnNbaV0pOworfQorCitBTFdBWVNfSU5MSU5FIHZvaWQg
QWJzdHJhY3RTbG90VmlzaXRvcjo6YXBwZW5kVW5iYXJyaWVyZWQoSlNWYWx1ZSB2YWx1ZSkKK3sK
KyAgICBpZiAodmFsdWUuaXNDZWxsKCkpCisgICAgICAgIGFwcGVuZFVuYmFycmllcmVkKHZhbHVl
LmFzQ2VsbCgpKTsKK30KKworQUxXQVlTX0lOTElORSB2b2lkIEFic3RyYWN0U2xvdFZpc2l0b3I6
OmFwcGVuZFVuYmFycmllcmVkKEpTVmFsdWUqIHNsb3QsIHNpemVfdCBjb3VudCkKK3sKKyAgICBm
b3IgKHNpemVfdCBpID0gY291bnQ7IGktLTspCisgICAgICAgIGFwcGVuZFVuYmFycmllcmVkKHNs
b3RbaV0pOworfQorCitBTFdBWVNfSU5MSU5FIEhlYXBDZWxsKiBBYnN0cmFjdFNsb3RWaXNpdG9y
OjpwYXJlbnRDZWxsKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fY29udGV4dCkKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIG1fY29udGV4dC0+Y2VsbCgpOworfQorCitBTFdBWVNf
SU5MSU5FIHZvaWQgQWJzdHJhY3RTbG90VmlzaXRvcjo6cmVzZXQoKQoreworICAgIG1fdmlzaXRD
b3VudCA9IDA7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvSGFuZGxlU2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9IYW5kbGVTZXQuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9IYW5kbGVTZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMS0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTYsNyAr
NTYsOCBAQCB2b2lkIEhhbmRsZVNldDo6Z3JvdygpCiAgICAgfQogfQogCi12b2lkIEhhbmRsZVNl
dDo6dmlzaXRTdHJvbmdIYW5kbGVzKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlw
ZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSGFuZGxlU2V0Ojp2aXNpdFN0cm9uZ0hhbmRsZXMoVmlzaXRv
ciYgdmlzaXRvcikKIHsKICAgICBOb2RlKiBlbmQgPSBtX3N0cm9uZ0xpc3QuZW5kKCk7CiAgICAg
Zm9yIChOb2RlKiBub2RlID0gbV9zdHJvbmdMaXN0LmJlZ2luKCk7IG5vZGUgIT0gZW5kOyBub2Rl
ID0gbm9kZS0+bmV4dCgpKSB7CkBAIC02Nyw2ICs2OCw5IEBAIHZvaWQgSGFuZGxlU2V0Ojp2aXNp
dFN0cm9uZ0hhbmRsZXMoU2xvdFYKICAgICB9CiB9CiAKK3RlbXBsYXRlIHZvaWQgSGFuZGxlU2V0
Ojp2aXNpdFN0cm9uZ0hhbmRsZXMoQWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9p
ZCBIYW5kbGVTZXQ6OnZpc2l0U3Ryb25nSGFuZGxlcyhTbG90VmlzaXRvciYpOworCiB2b2lkIEhh
bmRsZVNldDo6d3JpdGVCYXJyaWVyKEhhbmRsZVNsb3Qgc2xvdCwgY29uc3QgSlNWYWx1ZSYgdmFs
dWUpCiB7CiAgICAgaWYgKCF2YWx1ZSA9PSAhKnNsb3QgJiYgc2xvdC0+aXNDZWxsKCkgPT0gdmFs
dWUuaXNDZWxsKCkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IYW5kbGVTZXQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IYW5kbGVTZXQuaAko
cmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGFuZGxlU2V0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDExLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDExLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0zNSwxMCArMzUsMTAgQEAKIAogbmFtZXNwYWNlIEpTQyB7
CiAKK2NsYXNzIEFic3RyYWN0U2xvdFZpc2l0b3I7CiBjbGFzcyBIYW5kbGVTZXQ7CiBjbGFzcyBW
TTsKIGNsYXNzIEpTVmFsdWU7Ci1jbGFzcyBTbG90VmlzaXRvcjsKIAogY2xhc3MgSGFuZGxlTm9k
ZSB7CiBwdWJsaWM6CkBAIC03Myw3ICs3Myw3IEBAIHB1YmxpYzoKICAgICBIYW5kbGVTbG90IGFs
bG9jYXRlKCk7CiAgICAgdm9pZCBkZWFsbG9jYXRlKEhhbmRsZVNsb3QpOwogCi0gICAgdm9pZCB2
aXNpdFN0cm9uZ0hhbmRsZXMoU2xvdFZpc2l0b3ImKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPiB2b2lkIHZpc2l0U3Ryb25nSGFuZGxlcyhWaXNpdG9yJik7CiAKICAgICBKU19FWFBP
UlRfUFJJVkFURSB2b2lkIHdyaXRlQmFycmllcihIYW5kbGVTbG90LCBjb25zdCBKU1ZhbHVlJik7
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCShyZXZpc2lvbiAyNzI4MzAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNzIsNiArNzIsNyBAQAogI2luY2x1ZGUgIlR5cGVQcm9maWxlci5oIgogI2luY2x1ZGUgIlR5
cGVQcm9maWxlckxvZy5oIgogI2luY2x1ZGUgIlZNLmgiCisjaW5jbHVkZSAiVmVyaWZpZXJTbG90
VmlzaXRvcklubGluZXMuaCIKICNpbmNsdWRlICJXZWFrTWFwSW1wbElubGluZXMuaCIKICNpbmNs
dWRlICJXZWFrU2V0SW5saW5lcy5oIgogI2luY2x1ZGUgPGFsZ29yaXRobT4KQEAgLTY0MywxOSAr
NjQ0LDE5IEBAIHZvaWQgSGVhcDo6Y29tcGxldGVBbGxKSVRQbGFucygpCiAgICAgREZHOjpjb21w
bGV0ZUFsbFBsYW5zRm9yVk0obV92bSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+Ci12
b2lkIEhlYXA6Oml0ZXJhdGVFeGVjdXRpbmdBbmRDb21waWxpbmdDb2RlQmxvY2tzKGNvbnN0IEZ1
bmMmIGZ1bmMpCit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jLCB0eXBlbmFtZSBWaXNpdG9yPgordm9p
ZCBIZWFwOjppdGVyYXRlRXhlY3V0aW5nQW5kQ29tcGlsaW5nQ29kZUJsb2NrcyhWaXNpdG9yJiB2
aXNpdG9yLCBjb25zdCBGdW5jJiBmdW5jKQogewogICAgIG1fY29kZUJsb2Nrcy0+aXRlcmF0ZUN1
cnJlbnRseUV4ZWN1dGluZyhmdW5jKTsKICAgICBpZiAoT3B0aW9uczo6dXNlSklUKCkpCi0gICAg
ICAgIERGRzo6aXRlcmF0ZUNvZGVCbG9ja3NGb3JHQyhtX3ZtLCBmdW5jKTsKKyAgICAgICAgREZH
OjppdGVyYXRlQ29kZUJsb2Nrc0ZvckdDKHZpc2l0b3IsIG1fdm0sIGZ1bmMpOwogfQogCi10ZW1w
bGF0ZTx0eXBlbmFtZSBGdW5jPgotdm9pZCBIZWFwOjppdGVyYXRlRXhlY3V0aW5nQW5kQ29tcGls
aW5nQ29kZUJsb2Nrc1dpdGhvdXRIb2xkaW5nTG9ja3MoY29uc3QgRnVuYyYgZnVuYykKK3RlbXBs
YXRlPHR5cGVuYW1lIEZ1bmMsIHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEhlYXA6Oml0ZXJhdGVF
eGVjdXRpbmdBbmRDb21waWxpbmdDb2RlQmxvY2tzV2l0aG91dEhvbGRpbmdMb2NrcyhWaXNpdG9y
JiB2aXNpdG9yLCBjb25zdCBGdW5jJiBmdW5jKQogewogICAgIFZlY3RvcjxDb2RlQmxvY2sqLCAy
NTY+IGNvZGVCbG9ja3M7Ci0gICAgaXRlcmF0ZUV4ZWN1dGluZ0FuZENvbXBpbGluZ0NvZGVCbG9j
a3MoCisgICAgaXRlcmF0ZUV4ZWN1dGluZ0FuZENvbXBpbGluZ0NvZGVCbG9ja3ModmlzaXRvciwK
ICAgICAgICAgWyZdIChDb2RlQmxvY2sqIGNvZGVCbG9jaykgewogICAgICAgICAgICAgY29kZUJs
b2Nrcy5hcHBlbmQoY29kZUJsb2NrKTsKICAgICAgICAgfSk7CkBAIC03MzMsMTQgKzczNCw2IEBA
IHZvaWQgSGVhcDo6cmVtb3ZlRGVhZENvbXBpbGVyV29ya2xpc3RFbnQKICNlbmRpZgogfQogCi1i
b29sIEhlYXA6OmlzQW5hbHl6aW5nSGVhcCgpIGNvbnN0Ci17Ci0gICAgSGVhcFByb2ZpbGVyKiBo
ZWFwUHJvZmlsZXIgPSBtX3ZtLmhlYXBQcm9maWxlcigpOwotICAgIGlmIChVTkxJS0VMWShoZWFw
UHJvZmlsZXIpKQotICAgICAgICByZXR1cm4gaGVhcFByb2ZpbGVyLT5hY3RpdmVIZWFwQW5hbHl6
ZXIoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KIHN0cnVjdCBHYXRoZXJFeHRyYUhlYXBEYXRh
IDogTWFya2VkQmxvY2s6OkNvdW50RnVuY3RvciB7CiAgICAgR2F0aGVyRXh0cmFIZWFwRGF0YShW
TSYgdm0sIEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCiAgICAgICAgIDogbV92bSh2bSkKQEAgLTE0
ODUsMTQgKzE0NzgsMjEgQEAgTkVWRVJfSU5MSU5FIGJvb2wgSGVhcDo6cnVuRW5kUGhhc2UoR0ND
bwogICAgIH0KICAgICBtX2hlbHBlckNsaWVudC5maW5pc2goKTsKICAgICAKLSAgICBpdGVyYXRl
RXhlY3V0aW5nQW5kQ29tcGlsaW5nQ29kZUJsb2NrcygKKyAgICBBU1NFUlQobV9tdXRhdG9yTWFy
a1N0YWNrLT5pc0VtcHR5KCkpOworICAgIEFTU0VSVChtX3JhY2VNYXJrU3RhY2stPmlzRW1wdHko
KSk7CisKKyAgICBTbG90VmlzaXRvciYgdmlzaXRvciA9ICptX2NvbGxlY3RvclNsb3RWaXNpdG9y
OworICAgIGl0ZXJhdGVFeGVjdXRpbmdBbmRDb21waWxpbmdDb2RlQmxvY2tzKHZpc2l0b3IsCiAg
ICAgICAgIFsmXSAoQ29kZUJsb2NrKiBjb2RlQmxvY2spIHsKICAgICAgICAgICAgIHdyaXRlQmFy
cmllcihjb2RlQmxvY2spOwogICAgICAgICB9KTsKLSAgICAgICAgCisKICAgICB1cGRhdGVPYmpl
Y3RDb3VudHMoKTsKICAgICBlbmRNYXJraW5nKCk7CiAKKyAgICBpZiAoVU5MSUtFTFkoT3B0aW9u
czo6dmVyaWZ5R0MoKSkpCisgICAgICAgIHZlcmlmeUdDKCk7CisKICAgICBpZiAoVU5MSUtFTFko
bV92ZXJpZmllcikpIHsKICAgICAgICAgbV92ZXJpZmllci0+Z2F0aGVyTGl2ZUNlbGxzKEhlYXBW
ZXJpZmllcjo6UGhhc2U6OkFmdGVyTWFya2luZyk7CiAgICAgICAgIG1fdmVyaWZpZXItPnZlcmlm
eShIZWFwVmVyaWZpZXI6OlBoYXNlOjpBZnRlck1hcmtpbmcpOwpAQCAtMjE3MCw2ICsyMTcwLDEy
IEBAIHZvaWQgSGVhcDo6c3VzcGVuZENvbXBpbGVyVGhyZWFkcygpCiAKIHZvaWQgSGVhcDo6d2ls
bFN0YXJ0Q29sbGVjdGlvbigpCiB7CisgICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OnZlcmlmeUdD
KCkpKSB7CisgICAgICAgIG1fdmVyaWZpZXJTbG90VmlzaXRvciA9IG1ha2VVbmlxdWU8VmVyaWZp
ZXJTbG90VmlzaXRvcj4oKnRoaXMpOworICAgICAgICBBU1NFUlQoIW1faXNNYXJraW5nRm9yR0NW
ZXJpZmllcik7CisvLyAgICAgICAgUkVMRUFTRV9BU1NFUlQoIW1faXNNYXJraW5nRm9yR0NWZXJp
Zmllcik7IC8vIG1sYW0gVEVTVCBvbmx5CisgICAgfQorCiAgICAgZGF0YUxvZ0lmKE9wdGlvbnM6
OmxvZ0dDKCksICI9PiAiKTsKICAgICAKICAgICBpZiAoc2hvdWxkRG9GdWxsQ29sbGVjdGlvbigp
KSB7CkBAIC0yNzAxLDkgKzI3MDcsMTQgQEAgdm9pZCBIZWFwOjphZGRDb3JlQ29uc3RyYWludHMo
KQogewogICAgIG1fY29uc3RyYWludFNldC0+YWRkKAogICAgICAgICAiQ3MiLCAiQ29uc2VydmF0
aXZlIFNjYW4iLAotICAgICAgICBbdGhpcywgbGFzdFZlcnNpb24gPSBzdGF0aWNfY2FzdDx1aW50
NjRfdD4oMCldIChTbG90VmlzaXRvciYgdmlzaXRvcikgbXV0YWJsZSB7CisgICAgICAgIE1BS0Vf
TUFSS0lOR19DT05TVFJBSU5UX0VYRUNVVE9SX1BBSVIoKFt0aGlzLCBsYXN0VmVyc2lvbiA9IHN0
YXRpY19jYXN0PHVpbnQ2NF90PigwKV0gKGF1dG8mIHZpc2l0b3IpIG11dGFibGUgewogICAgICAg
ICAgICAgYm9vbCBzaG91bGROb3RQcm9kdWNlV29yayA9IGxhc3RWZXJzaW9uID09IG1fcGhhc2VW
ZXJzaW9uOwotICAgICAgICAgICAgaWYgKHNob3VsZE5vdFByb2R1Y2VXb3JrKQorCisgICAgICAg
ICAgICAvLyBGb3IgdGhlIEdDIFZlcmZpZXIsIHdlIHdvdWxkIGxpa2UgdG8gdXNlIHRoZSBpZGVu
dGljYWwgc2V0IG9mIGNvbnNlcnZhdGl2ZSByb290cworICAgICAgICAgICAgLy8gYXMgdGhlIHJl
YWwgR0MuIE90aGVyd2lzZSwgdGhlIEdDIHZlcmlmaWVyIG1heSByZXBvcnQgZmFsc2UgbmVnYXRp
dmVzIGR1ZSB0bworICAgICAgICAgICAgLy8gdmFyaWF0aW9ucyBpbiBzdGFjayB2YWx1ZXMuIEZv
ciB0aGlzIHNhbWUgcmVhc29uLCB3ZSB3aWxsIHNraXAgdGhpcyBjb25zdHJhaW50CisgICAgICAg
ICAgICAvLyB3aGVuIHdlJ3JlIHJ1bm5pbmcgdGhlIEdDIHZlcmlmaWNhdGlvbiBpbiB0aGUgRW5k
IHBoYXNlLgorICAgICAgICAgICAgaWYgKHNob3VsZE5vdFByb2R1Y2VXb3JrIHx8IG1faXNNYXJr
aW5nRm9yR0NWZXJpZmllcikKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAK
ICAgICAgICAgICAgIFRpbWluZ1Njb3BlIHByZUNvbnZlcmdlbmNlVGltaW5nU2NvcGUoKnRoaXMs
ICJDb25zdHJhaW50OiBjb25zZXJ2YXRpdmUgc2NhbiIpOwpAQCAtMjcyMCwyMSArMjczMSwyNiBA
QCB2b2lkIEhlYXA6OmFkZENvcmVDb25zdHJhaW50cygpCiAKICAgICAgICAgICAgICAgICBTZXRS
b290TWFya1JlYXNvblNjb3BlIHJvb3RTY29wZSh2aXNpdG9yLCBSb290TWFya1JlYXNvbjo6Q29u
c2VydmF0aXZlU2Nhbik7CiAgICAgICAgICAgICAgICAgdmlzaXRvci5hcHBlbmQoY29uc2VydmF0
aXZlUm9vdHMpOworICAgICAgICAgICAgICAgIGlmIChVTkxJS0VMWShtX3ZlcmlmaWVyU2xvdFZp
c2l0b3IpKQorICAgICAgICAgICAgICAgICAgICBtX3ZlcmlmaWVyU2xvdFZpc2l0b3ItPmFwcGVu
ZChjb25zZXJ2YXRpdmVSb290cyk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoT3B0
aW9uczo6dXNlSklUKCkpIHsKICAgICAgICAgICAgICAgICAvLyBKSVRTdHViUm91dGluZXMgbXVz
dCBiZSB2aXNpdGVkIGFmdGVyIHNjYW5uaW5nIENvbnNlcnZhdGl2ZVJvb3RzIHNpbmNlIEpJVFN0
dWJSb3V0aW5lcyBkZXBlbmQgb24gdGhlIGhvb2sgZXhlY3V0ZWQgZHVyaW5nIGdhdGhlcmluZyBD
b25zZXJ2YXRpdmVSb290cy4KICAgICAgICAgICAgICAgICBTZXRSb290TWFya1JlYXNvblNjb3Bl
IHJvb3RTY29wZSh2aXNpdG9yLCBSb290TWFya1JlYXNvbjo6SklUU3R1YlJvdXRpbmVzKTsKICAg
ICAgICAgICAgICAgICBtX2ppdFN0dWJSb3V0aW5lcy0+dHJhY2VNYXJrZWRTdHViUm91dGluZXMo
dmlzaXRvcik7CisgICAgICAgICAgICAgICAgaWYgKFVOTElLRUxZKG1fdmVyaWZpZXJTbG90Vmlz
aXRvcikpIHsKKyAgICAgICAgICAgICAgICAgICAgQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRv
ciA9ICptX3ZlcmlmaWVyU2xvdFZpc2l0b3I7CisgICAgICAgICAgICAgICAgICAgIG1faml0U3R1
YlJvdXRpbmVzLT50cmFjZU1hcmtlZFN0dWJSb3V0aW5lcyh2aXNpdG9yKTsKKyAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGxhc3RWZXJz
aW9uID0gbV9waGFzZVZlcnNpb247Ci0gICAgICAgIH0sCisgICAgICAgIH0pKSwKICAgICAgICAg
Q29uc3RyYWludFZvbGF0aWxpdHk6OkdyZXllZEJ5RXhlY3V0aW9uKTsKICAgICAKICAgICBtX2Nv
bnN0cmFpbnRTZXQtPmFkZCgKICAgICAgICAgIk1zciIsICJNaXNjIFNtYWxsIFJvb3RzIiwKLSAg
ICAgICAgW3RoaXNdIChTbG90VmlzaXRvciYgdmlzaXRvcikgewotCisgICAgICAgIE1BS0VfTUFS
S0lOR19DT05TVFJBSU5UX0VYRUNVVE9SX1BBSVIoKFt0aGlzXSAoYXV0byYgdmlzaXRvcikgewog
I2lmIEpTQ19PQkpDX0FQSV9FTkFCTEVECiAgICAgICAgICAgICBzY2FuRXh0ZXJuYWxSZW1lbWJl
cmVkU2V0KG1fdm0sIHZpc2l0b3IpOwogI2VuZGlmCkBAIC0yNzYzLDIwICsyNzc5LDIwIEBAIHZv
aWQgSGVhcDo6YWRkQ29yZUNvbnN0cmFpbnRzKCkKICAgICAgICAgICAgICAgICB2aXNpdG9yLmFw
cGVuZFVuYmFycmllcmVkKG1fdm0uZXhjZXB0aW9uKCkpOwogICAgICAgICAgICAgICAgIHZpc2l0
b3IuYXBwZW5kVW5iYXJyaWVyZWQobV92bS5sYXN0RXhjZXB0aW9uKCkpOwogICAgICAgICAgICAg
fQotICAgICAgICB9LAorICAgICAgICB9KSksCiAgICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5
OjpHcmV5ZWRCeUV4ZWN1dGlvbik7CiAgICAgCiAgICAgbV9jb25zdHJhaW50U2V0LT5hZGQoCiAg
ICAgICAgICJTaCIsICJTdHJvbmcgSGFuZGxlcyIsCi0gICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0
b3ImIHZpc2l0b3IpIHsKKyAgICAgICAgTUFLRV9NQVJLSU5HX0NPTlNUUkFJTlRfRVhFQ1VUT1Jf
UEFJUigoW3RoaXNdIChhdXRvJiB2aXNpdG9yKSB7CiAgICAgICAgICAgICBTZXRSb290TWFya1Jl
YXNvblNjb3BlIHJvb3RTY29wZSh2aXNpdG9yLCBSb290TWFya1JlYXNvbjo6U3Ryb25nSGFuZGxl
cyk7CiAgICAgICAgICAgICBtX2hhbmRsZVNldC52aXNpdFN0cm9uZ0hhbmRsZXModmlzaXRvcik7
Ci0gICAgICAgIH0sCisgICAgICAgIH0pKSwKICAgICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHk6
OkdyZXllZEJ5RXhlY3V0aW9uKTsKICAgICAKICAgICBtX2NvbnN0cmFpbnRTZXQtPmFkZCgKICAg
ICAgICAgIkQiLCAiRGVidWdnZXIiLAotICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiB2aXNp
dG9yKSB7CisgICAgICAgIE1BS0VfTUFSS0lOR19DT05TVFJBSU5UX0VYRUNVVE9SX1BBSVIoKFt0
aGlzXSAoYXV0byYgdmlzaXRvcikgewogICAgICAgICAgICAgU2V0Um9vdE1hcmtSZWFzb25TY29w
ZSByb290U2NvcGUodmlzaXRvciwgUm9vdE1hcmtSZWFzb246OkRlYnVnZ2VyKTsKIAogI2lmIEVO
QUJMRShTQU1QTElOR19QUk9GSUxFUikKQEAgLTI3OTQsMjMgKzI4MTAsMjQgQEAgdm9pZCBIZWFw
OjphZGRDb3JlQ29uc3RyYWludHMoKQogICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAoYXV0
byogc2hhZG93Q2hpY2tlbiA9IG1fdm0uc2hhZG93Q2hpY2tlbigpKQogICAgICAgICAgICAgICAg
IHNoYWRvd0NoaWNrZW4tPnZpc2l0Q2hpbGRyZW4odmlzaXRvcik7Ci0gICAgICAgIH0sCisgICAg
ICAgIH0pKSwKICAgICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHk6OkdyZXllZEJ5RXhlY3V0aW9u
KTsKICAgICAKICAgICBtX2NvbnN0cmFpbnRTZXQtPmFkZCgKICAgICAgICAgIldzIiwgIldlYWsg
U2V0cyIsCi0gICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsKKyAgICAgICAg
TUFLRV9NQVJLSU5HX0NPTlNUUkFJTlRfRVhFQ1VUT1JfUEFJUigoW3RoaXNdIChhdXRvJiB2aXNp
dG9yKSB7CiAgICAgICAgICAgICBTZXRSb290TWFya1JlYXNvblNjb3BlIHJvb3RTY29wZSh2aXNp
dG9yLCBSb290TWFya1JlYXNvbjo6V2Vha1NldHMpOwogICAgICAgICAgICAgbV9vYmplY3RTcGFj
ZS52aXNpdFdlYWtTZXRzKHZpc2l0b3IpOwotICAgICAgICB9LAorICAgICAgICB9KSksCiAgICAg
ICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5OjpHcmV5ZWRCeU1hcmtpbmcpOwogICAgIAogICAgIG1f
Y29uc3RyYWludFNldC0+YWRkKAogICAgICAgICAiTyIsICJPdXRwdXQiLAotICAgICAgICBbXSAo
U2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsKKyAgICAgICAgTUFLRV9NQVJLSU5HX0NPTlNUUkFJTlRf
RVhFQ1VUT1JfUEFJUigoW10gKGF1dG8mIHZpc2l0b3IpIHsKKyAgICAgICAgICAgIHVzaW5nIFZp
c2l0b3IgPSB0eXBlb2YodmlzaXRvcik7CiAgICAgICAgICAgICBWTSYgdm0gPSB2aXNpdG9yLnZt
KCk7CiAKLSAgICAgICAgICAgIGF1dG8gY2FsbE91dHB1dENvbnN0cmFpbnQgPSBbXSAoU2xvdFZp
c2l0b3ImIHZpc2l0b3IsIEhlYXBDZWxsKiBoZWFwQ2VsbCwgSGVhcENlbGw6OktpbmQpIHsKKyAg
ICAgICAgICAgIGF1dG8gY2FsbE91dHB1dENvbnN0cmFpbnQgPSBbXSAoVmlzaXRvciYgdmlzaXRv
ciwgSGVhcENlbGwqIGhlYXBDZWxsLCBIZWFwQ2VsbDo6S2luZCkgewogICAgICAgICAgICAgICAg
IFNldFJvb3RNYXJrUmVhc29uU2NvcGUgcm9vdFNjb3BlKHZpc2l0b3IsIFJvb3RNYXJrUmVhc29u
OjpPdXRwdXQpOwogICAgICAgICAgICAgICAgIFZNJiB2bSA9IHZpc2l0b3Iudm0oKTsKICAgICAg
ICAgICAgICAgICBKU0NlbGwqIGNlbGwgPSBzdGF0aWNfY2FzdDxKU0NlbGwqPihoZWFwQ2VsbCk7
CkBAIC0yODE4LDEzICsyODM1LDE0IEBAIHZvaWQgSGVhcDo6YWRkQ29yZUNvbnN0cmFpbnRzKCkK
ICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGF1dG8gYWRkID0gWyZd
IChhdXRvJiBzZXQpIHsKLSAgICAgICAgICAgICAgICB2aXNpdG9yLmFkZFBhcmFsbGVsQ29uc3Ry
YWludFRhc2soc2V0LmZvckVhY2hNYXJrZWRDZWxsSW5QYXJhbGxlbChjYWxsT3V0cHV0Q29uc3Ry
YWludCkpOworICAgICAgICAgICAgICAgIFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoVmlzaXRvciYp
Pj4gdGFzayA9IHNldC50ZW1wbGF0ZSBmb3JFYWNoTWFya2VkQ2VsbEluUGFyYWxsZWw8VmlzaXRv
cj4oY2FsbE91dHB1dENvbnN0cmFpbnQpOworICAgICAgICAgICAgICAgIHZpc2l0b3IuYWRkUGFy
YWxsZWxDb25zdHJhaW50VGFzayh0YXNrKTsKICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAK
ICAgICAgICAgICAgIGFkZCh2bS5leGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlc1dpdGhDb25zdHJh
aW50cyk7CiAgICAgICAgICAgICBpZiAodm0ubV93ZWFrTWFwU3BhY2UpCiAgICAgICAgICAgICAg
ICAgYWRkKCp2bS5tX3dlYWtNYXBTcGFjZSk7Ci0gICAgICAgIH0sCisgICAgICAgIH0pKSwKICAg
ICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHk6OkdyZXllZEJ5TWFya2luZywKICAgICAgICAgQ29u
c3RyYWludFBhcmFsbGVsaXNtOjpQYXJhbGxlbCk7CiAgICAgCkBAIC0yODMyLDcgKzI4NTAsNyBA
QCB2b2lkIEhlYXA6OmFkZENvcmVDb25zdHJhaW50cygpCiAgICAgaWYgKE9wdGlvbnM6OnVzZUpJ
VCgpKSB7CiAgICAgICAgIG1fY29uc3RyYWludFNldC0+YWRkKAogICAgICAgICAgICAgIkR3Iiwg
IkRGRyBXb3JrbGlzdHMiLAotICAgICAgICAgICAgW3RoaXNdIChTbG90VmlzaXRvciYgdmlzaXRv
cikgeworICAgICAgICAgICAgTUFLRV9NQVJLSU5HX0NPTlNUUkFJTlRfRVhFQ1VUT1JfUEFJUigo
W3RoaXNdIChhdXRvJiB2aXNpdG9yKSB7CiAgICAgICAgICAgICAgICAgU2V0Um9vdE1hcmtSZWFz
b25TY29wZSByb290U2NvcGUodmlzaXRvciwgUm9vdE1hcmtSZWFzb246OkRGR1dvcmtMaXN0cyk7
CiAKICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBERkc6Om51bWJlck9mV29ya2xp
c3RzKCk7IGktLTspCkBAIC0yODQwLDcgKzI4NTgsNyBAQCB2b2lkIEhlYXA6OmFkZENvcmVDb25z
dHJhaW50cygpCiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFRo
aXMgaXMgYWxtb3N0IGNlcnRhaW5seSB1bm5lY2Vzc2FyeS4KICAgICAgICAgICAgICAgICAvLyBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY2ODI5Ci0gICAgICAgICAg
ICAgICAgREZHOjppdGVyYXRlQ29kZUJsb2Nrc0ZvckdDKAorICAgICAgICAgICAgICAgIERGRzo6
aXRlcmF0ZUNvZGVCbG9ja3NGb3JHQyh2aXNpdG9yLAogICAgICAgICAgICAgICAgICAgICBtX3Zt
LAogICAgICAgICAgICAgICAgICAgICBbJl0gKENvZGVCbG9jayogY29kZUJsb2NrKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKGNvZGVCbG9jayk7
CkBAIC0yODQ4LDIzICsyODY2LDIzIEBAIHZvaWQgSGVhcDo6YWRkQ29yZUNvbnN0cmFpbnRzKCkK
ICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSA9
PSBHQ0xvZ2dpbmc6OlZlcmJvc2UpCiAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIkRGRyBX
b3JrbGlzdHM6XG4iLCB2aXNpdG9yKTsKLSAgICAgICAgICAgIH0sCisgICAgICAgICAgICB9KSks
CiAgICAgICAgICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eTo6R3JleWVkQnlNYXJraW5nKTsKICAg
ICB9CiAjZW5kaWYKICAgICAKICAgICBtX2NvbnN0cmFpbnRTZXQtPmFkZCgKICAgICAgICAgIkNi
IiwgIkNvZGVCbG9ja3MiLAotICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiB2aXNpdG9yKSB7
CisgICAgICAgIE1BS0VfTUFSS0lOR19DT05TVFJBSU5UX0VYRUNVVE9SX1BBSVIoKFt0aGlzXSAo
YXV0byYgdmlzaXRvcikgewogICAgICAgICAgICAgU2V0Um9vdE1hcmtSZWFzb25TY29wZSByb290
U2NvcGUodmlzaXRvciwgUm9vdE1hcmtSZWFzb246OkNvZGVCbG9ja3MpOwotICAgICAgICAgICAg
aXRlcmF0ZUV4ZWN1dGluZ0FuZENvbXBpbGluZ0NvZGVCbG9ja3NXaXRob3V0SG9sZGluZ0xvY2tz
KAorICAgICAgICAgICAgaXRlcmF0ZUV4ZWN1dGluZ0FuZENvbXBpbGluZ0NvZGVCbG9ja3NXaXRo
b3V0SG9sZGluZ0xvY2tzKHZpc2l0b3IsCiAgICAgICAgICAgICAgICAgWyZdIChDb2RlQmxvY2sq
IGNvZGVCbG9jaykgewogICAgICAgICAgICAgICAgICAgICAvLyBWaXNpdCB0aGUgQ29kZUJsb2Nr
IGFzIGEgY29uc3RyYWludCBvbmx5IGlmIGl0J3MgYmxhY2suCi0gICAgICAgICAgICAgICAgICAg
IGlmIChpc01hcmtlZChjb2RlQmxvY2spCisgICAgICAgICAgICAgICAgICAgIGlmICh2aXNpdG9y
LmlzTWFya2VkKGNvZGVCbG9jaykKICAgICAgICAgICAgICAgICAgICAgICAgICYmIGNvZGVCbG9j
ay0+Y2VsbFN0YXRlKCkgPT0gQ2VsbFN0YXRlOjpQb3NzaWJseUJsYWNrKQogICAgICAgICAgICAg
ICAgICAgICAgICAgdmlzaXRvci52aXNpdEFzQ29uc3RyYWludChjb2RlQmxvY2spOwogICAgICAg
ICAgICAgICAgIH0pOwotICAgICAgICB9LAorICAgICAgICB9KSksCiAgICAgICAgIENvbnN0cmFp
bnRWb2xhdGlsaXR5OjpTZWxkb21HcmV5ZWQpOwogICAgIAogICAgIG1fY29uc3RyYWludFNldC0+
YWRkKG1ha2VVbmlxdWU8TWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQ+KCp0aGlzKSk7CkBAIC0z
MDIzLDQgKzMwNDEsMzMgQEAgdm9pZCBIZWFwOjpydW5UYXNrSW5QYXJhbGxlbChSZWZQdHI8U2hh
cgogICAgIH0KIH0KIAordm9pZCBIZWFwOjp2ZXJpZnlHQygpCit7CisgICAgUkVMRUFTRV9BU1NF
UlQobV92ZXJpZmllclNsb3RWaXNpdG9yKTsKKyAgICBSRUxFQVNFX0FTU0VSVCghbV9pc01hcmtp
bmdGb3JHQ1ZlcmlmaWVyKTsKKyAgICBtX2lzTWFya2luZ0ZvckdDVmVyaWZpZXIgPSB0cnVlOwor
CisgICAgVmVyaWZpZXJTbG90VmlzaXRvciYgdmlzaXRvciA9ICptX3ZlcmlmaWVyU2xvdFZpc2l0
b3I7CisKKyAgICBkbyB7CisgICAgICAgIHZpc2l0b3IuZHJhaW4oKTsKKyAgICAgICAgbV9jb25z
dHJhaW50U2V0LT5leGVjdXRlQWxsU3luY2hyb25vdXNseSh2aXNpdG9yKTsKKyAgICAgICAgdmlz
aXRvci5leGVjdXRlQ29uc3RyYWludFRhc2tzKCk7CisgICAgfSB3aGlsZSAoIXZpc2l0b3IuaXNF
bXB0eSgpKTsKKworICAgIG1faXNNYXJraW5nRm9yR0NWZXJpZmllciA9IGZhbHNlOworCisgICAg
dmlzaXRvci5mb3JFYWNoTGl2ZUNlbGwoWyZdIChIZWFwQ2VsbCogY2VsbCkgeworICAgICAgICBp
ZiAoSGVhcDo6aXNNYXJrZWQoY2VsbCkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAg
ZGF0YUxvZ0xuKCJcbiIgIkdDIFZlcmlmaWVyOiBFUlJPUiBjZWxsICIsIFJhd1BvaW50ZXIoY2Vs
bCksICIgd2FzIG5vdCBtYXJrZWQiKTsKKyAgICAgICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OnZl
cmJvc2VWZXJpZnlHQygpKSkKKyAgICAgICAgICAgIHZpc2l0b3IuZHVtcE1hcmtlckRhdGEoY2Vs
bCk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKHRoaXMtPmlzTWFya2VkKGNlbGwpKTsKKyAgICB9
KTsKKworICAgIG1fdmVyaWZpZXJTbG90VmlzaXRvciA9IG51bGxwdHI7Cit9CisKIH0gLy8gbmFt
ZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkocmV2aXNpb24gMjcy
ODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDcgKzEsNyBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMCBIYXJyaSBQ
b3J0ZW4gKHBvcnRlbkBrZGUub3JnKQogICogIENvcHlyaWdodCAoQykgMjAwMSBQZXRlciBLZWxs
eSAocG1rQHBvc3QuY29tKQotICogIENvcHlyaWdodCAoQykgMjAwMy0yMDIwIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAyMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCkBAIC04Niw2ICs4
Niw3IEBAIGNsYXNzIFNwYWNlVGltZU11dGF0b3JTY2hlZHVsZXI7CiBjbGFzcyBTdG9wSWZOZWNl
c3NhcnlUaW1lcjsKIGNsYXNzIFN3ZWVwaW5nU2NvcGU7CiBjbGFzcyBWTTsKK2NsYXNzIFZlcmlm
aWVyU2xvdFZpc2l0b3I7CiBjbGFzcyBXZWFrR0NNYXBCYXNlOwogc3RydWN0IEN1cnJlbnRUaHJl
YWRTdGF0ZTsKIApAQCAtMTg0LDggKzE4NSw2IEBAIHB1YmxpYzoKICAgICAKICAgICBib29sIGlz
U2h1dHRpbmdEb3duKCkgY29uc3QgeyByZXR1cm4gbV9pc1NodXR0aW5nRG93bjsgfQogCi0gICAg
SlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBpc0FuYWx5emluZ0hlYXAoKSBjb25zdDsKLQogICAgIEpT
X0VYUE9SVF9QUklWQVRFIHZvaWQgc3dlZXBTeW5jaHJvbm91c2x5KCk7CiAKICAgICBib29sIHNo
b3VsZENvbGxlY3RIZXVyaXN0aWMoKTsKQEAgLTM4NSw4ICszODQsNiBAQCBwdWJsaWM6CiAgICAg
CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBhZGRNYXJraW5nQ29uc3RyYWludChzdGQ6OnVu
aXF1ZV9wdHI8TWFya2luZ0NvbnN0cmFpbnQ+KTsKICAgICAKLSAgICBzaXplX3QgbnVtT3BhcXVl
Um9vdHMoKSBjb25zdCB7IHJldHVybiBtX29wYXF1ZVJvb3RzLnNpemUoKTsgfQotCiAgICAgSGVh
cFZlcmlmaWVyKiB2ZXJpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1fdmVyaWZpZXIuZ2V0KCk7IH0K
ICAgICAKICAgICB2b2lkIGFkZEhlYXBGaW5hbGl6ZXJDYWxsYmFjayhjb25zdCBIZWFwRmluYWxp
emVyQ2FsbGJhY2smKTsKQEAgLTQwNyw2ICs0MDQsOCBAQCBwdWJsaWM6CiAKICAgICBIYXNoTWFw
PEpTSW1tdXRhYmxlQnV0dGVyZmx5KiwgSlNTdHJpbmcqPiBpbW11dGFibGVCdXR0ZXJmbHlUb1N0
cmluZ0NhY2hlOwogCisgICAgYm9vbCBpc01hcmtpbmdGb3JHQ1ZlcmlmaWVyKCkgY29uc3QgeyBy
ZXR1cm4gbV9pc01hcmtpbmdGb3JHQ1ZlcmlmaWVyOyB9CisKIHByaXZhdGU6CiAgICAgZnJpZW5k
IGNsYXNzIEFsbG9jYXRpbmdTY29wZTsKICAgICBmcmllbmQgY2xhc3MgQ29kZUJsb2NrOwpAQCAt
NTc1LDExICs1NzQsMTEgQEAgcHJpdmF0ZToKIAogICAgIGJvb2wgb3ZlckNyaXRpY2FsTWVtb3J5
VGhyZXNob2xkKE1lbW9yeVRocmVzaG9sZENhbGxUeXBlIG1lbW9yeVRocmVzaG9sZENhbGxUeXBl
ID0gTWVtb3J5VGhyZXNob2xkQ2FsbFR5cGU6OkNhY2hlZCk7CiAgICAgCi0gICAgdGVtcGxhdGU8
dHlwZW5hbWUgRnVuYz4KLSAgICB2b2lkIGl0ZXJhdGVFeGVjdXRpbmdBbmRDb21waWxpbmdDb2Rl
QmxvY2tzKGNvbnN0IEZ1bmMmKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jLCB0eXBlbmFt
ZSBWaXNpdG9yPgorICAgIHZvaWQgaXRlcmF0ZUV4ZWN1dGluZ0FuZENvbXBpbGluZ0NvZGVCbG9j
a3MoVmlzaXRvciYsIGNvbnN0IEZ1bmMmKTsKICAgICAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBG
dW5jPgotICAgIHZvaWQgaXRlcmF0ZUV4ZWN1dGluZ0FuZENvbXBpbGluZ0NvZGVCbG9ja3NXaXRo
b3V0SG9sZGluZ0xvY2tzKGNvbnN0IEZ1bmMmKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5j
LCB0eXBlbmFtZSBWaXNpdG9yPgorICAgIHZvaWQgaXRlcmF0ZUV4ZWN1dGluZ0FuZENvbXBpbGlu
Z0NvZGVCbG9ja3NXaXRob3V0SG9sZGluZ0xvY2tzKFZpc2l0b3ImLCBjb25zdCBGdW5jJik7CiAg
ICAgCiAgICAgdm9pZCBhc3NlcnRNYXJrU3RhY2tzRW1wdHkoKTsKIApAQCAtNTkwLDYgKzU4OSw4
IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIGJvb2wgdXNlR2VuZXJhdGlvbmFsR0MoKTsKICAgICBz
dGF0aWMgYm9vbCBzaG91bGRTd2VlcFN5bmNocm9ub3VzbHkoKTsKICAgICAKKyAgICB2b2lkIHZl
cmlmeUdDKCk7CisKICAgICBjb25zdCBIZWFwVHlwZSBtX2hlYXBUeXBlOwogICAgIE11dGF0b3JT
dGF0ZSBtX211dGF0b3JTdGF0ZSB7IE11dGF0b3JTdGF0ZTo6UnVubmluZyB9OwogICAgIGNvbnN0
IHNpemVfdCBtX3JhbVNpemU7CkBAIC02MzYsNiArNjM3LDcgQEAgcHJpdmF0ZToKICAgICBzdGQ6
OnVuaXF1ZV9wdHI8TWFya1N0YWNrQXJyYXk+IG1fbXV0YXRvck1hcmtTdGFjazsKICAgICBzdGQ6
OnVuaXF1ZV9wdHI8TWFya1N0YWNrQXJyYXk+IG1fcmFjZU1hcmtTdGFjazsKICAgICBzdGQ6OnVu
aXF1ZV9wdHI8TWFya2luZ0NvbnN0cmFpbnRTZXQ+IG1fY29uc3RyYWludFNldDsKKyAgICBzdGQ6
OnVuaXF1ZV9wdHI8VmVyaWZpZXJTbG90VmlzaXRvcj4gbV92ZXJpZmllclNsb3RWaXNpdG9yOwog
CiAgICAgLy8gV2UgcG9vbCB0aGUgc2xvdCB2aXNpdG9ycyB1c2VkIGJ5IHBhcmFsbGVsIG1hcmtp
bmcgdGhyZWFkcy4gSXQncyB1c2VmdWwgdG8gYmUgYWJsZSB0bwogICAgIC8vIGVudW1lcmF0ZSBv
dmVyIHRoZW0sIGFuZCBpdCdzIHVzZWZ1bCB0byBoYXZlIHRoZW0gY2FjaGUgc29tZSBzbWFsbCBh
bW91bnQgb2YgbWVtb3J5IGZyb20KQEAgLTY1NCw2ICs2NTYsNyBAQCBwcml2YXRlOgogICAgIGJv
b2wgbV9pc1NhZmVUb0NvbGxlY3QgeyBmYWxzZSB9OwogICAgIGJvb2wgbV9pc1NodXR0aW5nRG93
biB7IGZhbHNlIH07CiAgICAgYm9vbCBtX211dGF0b3JTaG91bGRCZUZlbmNlZCB7IE9wdGlvbnM6
OmZvcmNlRmVuY2VkQmFycmllcigpIH07CisgICAgYm9vbCBtX2lzTWFya2luZ0ZvckdDVmVyaWZp
ZXIgeyBmYWxzZSB9OwogCiAgICAgdW5zaWduZWQgbV9iYXJyaWVyVGhyZXNob2xkIHsgT3B0aW9u
czo6Zm9yY2VGZW5jZWRCYXJyaWVyKCkgPyB0YXV0b2xvZ2ljYWxUaHJlc2hvbGQgOiBibGFja1Ro
cmVzaG9sZCB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwSW5saW5l
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBJbmxpbmVz
LmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBJ
bmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTY5LDYgKzY5LDggQEAgaW5saW5lIGJvb2wgSGVh
cDo6d29ybGRJc1N0b3BwZWQoKSBjb25zdAogCiBBTFdBWVNfSU5MSU5FIGJvb2wgSGVhcDo6aXNN
YXJrZWQoY29uc3Qgdm9pZCogcmF3Q2VsbCkKIHsKKyAgICBBU1NFUlQoIW1faXNNYXJraW5nRm9y
R0NWZXJpZmllcik7CisvLyAgICBSRUxFQVNFX0FTU0VSVCghbV9pc01hcmtpbmdGb3JHQ1Zlcmlm
aWVyKTsgLy8gbWxhbSBURVNUIG9ubHkKICAgICBIZWFwQ2VsbCogY2VsbCA9IGJpdHdpc2VfY2Fz
dDxIZWFwQ2VsbCo+KHJhd0NlbGwpOwogICAgIGlmIChjZWxsLT5pc1ByZWNpc2VBbGxvY2F0aW9u
KCkpCiAgICAgICAgIHJldHVybiBjZWxsLT5wcmVjaXNlQWxsb2NhdGlvbigpLmlzTWFya2VkKCk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwUHJvZmlsZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBQcm9maWxlci5jcHAJKHJl
dmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBQcm9maWxl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtNjAsNiArNjAsNyBAQCB2b2lkIEhlYXBQcm9maWxlcjo6c2V0
QWN0aXZlSGVhcEFuYWx5emVyCiB7CiAgICAgQVNTRVJUKCEhbV9hY3RpdmVBbmFseXplciAhPSAh
IWFuYWx5emVyKTsKICAgICBtX2FjdGl2ZUFuYWx5emVyID0gYW5hbHl6ZXI7CisgICAgbV92bS5z
ZXRBY3RpdmVIZWFwQW5hbHl6ZXIoYW5hbHl6ZXIpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0lzb0NlbGxTZXQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Jc29DZWxsU2V0LmgJKHJldmlzaW9uIDI3
MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0lzb0NlbGxTZXQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0zNCw2ICszNCw3IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCitjbGFzcyBBYnN0cmFj
dFNsb3RWaXNpdG9yOwogY2xhc3MgSGVhcENlbGw7CiBjbGFzcyBJc29TdWJzcGFjZTsKIApAQCAt
NTgsOCArNTksOCBAQCBwdWJsaWM6CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KICAgICB2
b2lkIGZvckVhY2hNYXJrZWRDZWxsKGNvbnN0IEZ1bmMmKTsKIAotICAgIHRlbXBsYXRlPHR5cGVu
YW1lIEZ1bmM+Ci0gICAgUmVmPFNoYXJlZFRhc2s8dm9pZChTbG90VmlzaXRvciYpPj4gZm9yRWFj
aE1hcmtlZENlbGxJblBhcmFsbGVsKGNvbnN0IEZ1bmMmKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBWaXNpdG9yLCB0eXBlbmFtZSBGdW5jPgorICAgIFJlZjxTaGFyZWRUYXNrPHZvaWQoVmlzaXRv
ciYpPj4gZm9yRWFjaE1hcmtlZENlbGxJblBhcmFsbGVsKGNvbnN0IEZ1bmMmKTsKICAgICAKICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgogICAgIHZvaWQgZm9yRWFjaExpdmVDZWxsKGNvbnN0
IEZ1bmMmKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0lzb0NlbGxTZXRJbmxp
bmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvQ2VsbFNl
dElubGluZXMuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvSXNvQ2VsbFNldElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC05MSwxMCArOTEsMTAgQEAgdm9p
ZCBJc29DZWxsU2V0Ojpmb3JFYWNoTWFya2VkQ2VsbChjb25zdAogICAgICAgICB9KTsKIH0KIAot
dGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KLVJlZjxTaGFyZWRUYXNrPHZvaWQoU2xvdFZpc2l0b3Im
KT4+IElzb0NlbGxTZXQ6OmZvckVhY2hNYXJrZWRDZWxsSW5QYXJhbGxlbChjb25zdCBGdW5jJiBm
dW5jKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvciwgdHlwZW5hbWUgRnVuYz4KK1JlZjxTaGFy
ZWRUYXNrPHZvaWQoVmlzaXRvciYpPj4gSXNvQ2VsbFNldDo6Zm9yRWFjaE1hcmtlZENlbGxJblBh
cmFsbGVsKGNvbnN0IEZ1bmMmIGZ1bmMpCiB7Ci0gICAgY2xhc3MgVGFzayBmaW5hbCA6IHB1Ymxp
YyBTaGFyZWRUYXNrPHZvaWQoU2xvdFZpc2l0b3ImKT4geworICAgIGNsYXNzIFRhc2sgZmluYWwg
OiBwdWJsaWMgU2hhcmVkVGFzazx2b2lkKFZpc2l0b3ImKT4gewogICAgIHB1YmxpYzoKICAgICAg
ICAgVGFzayhJc29DZWxsU2V0JiBzZXQsIGNvbnN0IEZ1bmMmIGZ1bmMpCiAgICAgICAgICAgICA6
IG1fc2V0KHNldCkKQEAgLTEwMyw3ICsxMDMsNyBAQCBSZWY8U2hhcmVkVGFzazx2b2lkKFNsb3RW
aXNpdG9yJik+PiBJc29DCiAgICAgICAgIHsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAg
dm9pZCBydW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpIGZpbmFsCisgICAgICAgIHZvaWQgcnVuKFZp
c2l0b3ImIHZpc2l0b3IpIGZpbmFsCiAgICAgICAgIHsKICAgICAgICAgICAgIHdoaWxlIChNYXJr
ZWRCbG9jazo6SGFuZGxlKiBoYW5kbGUgPSBtX2Jsb2NrU291cmNlLT5ydW4oKSkgewogICAgICAg
ICAgICAgICAgIHVuc2lnbmVkIGJsb2NrSW5kZXggPSBoYW5kbGUtPmluZGV4KCk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9KSVRTdHViUm91dGluZVNldC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSklUU3R1YlJvdXRpbmVTZXQuY3BwCShy
ZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9KSVRTdHViUm91
dGluZVNldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTI4LDcgKzEyOCw4IEBAIHZvaWQgSklUU3R1YlJv
dXRpbmVTZXQ6OmRlbGV0ZVVubWFya2VkSmUKICAgICBtX3JvdXRpbmVzLnNocmluayhkc3RJbmRl
eCk7CiB9CiAKLXZvaWQgSklUU3R1YlJvdXRpbmVTZXQ6OnRyYWNlTWFya2VkU3R1YlJvdXRpbmVz
KFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQg
SklUU3R1YlJvdXRpbmVTZXQ6OnRyYWNlTWFya2VkU3R1YlJvdXRpbmVzKFZpc2l0b3ImIHZpc2l0
b3IpCiB7CiAgICAgZm9yIChhdXRvJiBlbnRyeSA6IG1fcm91dGluZXMpIHsKICAgICAgICAgR0NB
d2FyZUpJVFN0dWJSb3V0aW5lKiByb3V0aW5lID0gZW50cnkucm91dGluZTsKQEAgLTEzOSw2ICsx
NDAsOSBAQCB2b2lkIEpJVFN0dWJSb3V0aW5lU2V0Ojp0cmFjZU1hcmtlZFN0dWJSCiAgICAgfQog
fQogCit0ZW1wbGF0ZSB2b2lkIEpJVFN0dWJSb3V0aW5lU2V0Ojp0cmFjZU1hcmtlZFN0dWJSb3V0
aW5lcyhBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpJVFN0dWJSb3V0aW5l
U2V0Ojp0cmFjZU1hcmtlZFN0dWJSb3V0aW5lcyhTbG90VmlzaXRvciYpOworCiB9IC8vIG5hbWVz
cGFjZSBKU0MKIAogI2VuZGlmIC8vIEVOQUJMRShKSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9KSVRTdHViUm91dGluZVNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0pJVFN0dWJSb3V0aW5lU2V0LmgJKHJldmlzaW9uIDI3MjgzMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0pJVFN0dWJSb3V0aW5lU2V0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTggQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0zNSw4ICszNSw4IEBAIHVzaW5nIFdURjo6UmFuZ2U7CiAKIG5hbWVzcGFjZSBK
U0MgewogCitjbGFzcyBBYnN0cmFjdFNsb3RWaXNpdG9yOwogY2xhc3MgR0NBd2FyZUpJVFN0dWJS
b3V0aW5lOwotY2xhc3MgU2xvdFZpc2l0b3I7CiAKICNpZiBFTkFCTEUoSklUKQogCkBAIC02Myw4
ICs2Myw4IEBAIHB1YmxpYzoKICAgICB2b2lkIHByZXBhcmVGb3JDb25zZXJ2YXRpdmVTY2FuKCk7
CiAgICAgCiAgICAgdm9pZCBkZWxldGVVbm1hcmtlZEpldHRpc29uZWRTdHViUm91dGluZXMoKTsK
LSAgICAKLSAgICB2b2lkIHRyYWNlTWFya2VkU3R1YlJvdXRpbmVzKFNsb3RWaXNpdG9yJik7CisK
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIHRyYWNlTWFya2VkU3R1YlJvdXRp
bmVzKFZpc2l0b3ImKTsKICAgICAKIHByaXZhdGU6CiAgICAgdm9pZCBtYXJrU2xvdyh1aW50cHRy
X3QgYWRkcmVzcyk7CkBAIC05Miw3ICs5Miw3IEBAIHB1YmxpYzoKICAgICB2b2lkIG1hcmsodm9p
ZCopIHsgfQogICAgIHZvaWQgcHJlcGFyZUZvckNvbnNlcnZhdGl2ZVNjYW4oKSB7IH0KICAgICB2
b2lkIGRlbGV0ZVVubWFya2VkSmV0dGlzb25lZFN0dWJSb3V0aW5lcygpIHsgfQotICAgIHZvaWQg
dHJhY2VNYXJrZWRTdHViUm91dGluZXMoU2xvdFZpc2l0b3ImKSB7IH0KKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBWaXNpdG9yPiB2b2lkIHRyYWNlTWFya2VkU3R1YlJvdXRpbmVzKFZpc2l0b3ImKSB7
IH0KIH07CiAKICNlbmRpZiAvLyAhRU5BQkxFKEpJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL01hcmtTdGFja01lcmdpbmdDb25zdHJhaW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludC5jcHAJ
KHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtTdGFj
a01lcmdpbmdDb25zdHJhaW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNSw3ICsyNSw2IEBACiAKICNp
bmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJNYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludC5o
IgotCiAjaW5jbHVkZSAiR0NTZWdtZW50ZWRBcnJheUlubGluZXMuaCIKICNpbmNsdWRlICJKU0NJ
bmxpbmVzLmgiCiAKQEAgLTQ2LDcgKzQ1LDcgQEAgZG91YmxlIE1hcmtTdGFja01lcmdpbmdDb25z
dHJhaW50OjpxdWljawogICAgIHJldHVybiBtX2hlYXAubV9tdXRhdG9yTWFya1N0YWNrLT5zaXpl
KCkgKyBtX2hlYXAubV9yYWNlTWFya1N0YWNrLT5zaXplKCk7CiB9CiAKLXZvaWQgTWFya1N0YWNr
TWVyZ2luZ0NvbnN0cmFpbnQ6OnByZXBhcmVUb0V4ZWN1dGVJbXBsKGNvbnN0IEFic3RyYWN0TG9j
a2VyJiwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIE1hcmtTdGFja01lcmdpbmdDb25zdHJh
aW50OjpwcmVwYXJlVG9FeGVjdXRlSW1wbChjb25zdCBBYnN0cmFjdExvY2tlciYsIEFic3RyYWN0
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgLy8gTG9nZ2luZyB0aGUgd29yayBoZXJlIGVu
c3VyZXMgdGhhdCB0aGUgY29uc3RyYWludCBzb2x2ZXIga25vd3MgdGhhdCBpdCBkb2Vzbid0IG5l
ZWQgdG8gcHJvZHVjZQogICAgIC8vIGFueW1vcmUgd29yay4KQEAgLTU2LDExICs1NSwyNCBAQCB2
b2lkIE1hcmtTdGFja01lcmdpbmdDb25zdHJhaW50OjpwcmVwYXJlCiAgICAgZGF0YUxvZ0lmKE9w
dGlvbnM6OmxvZ0dDKCksICIoIiwgc2l6ZSwgIikiKTsKIH0KIAotdm9pZCBNYXJrU3RhY2tNZXJn
aW5nQ29uc3RyYWludDo6ZXhlY3V0ZUltcGwoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0
ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBNYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludDo6ZXhl
Y3V0ZUltcGxJbXBsKFZpc2l0b3ImIHZpc2l0b3IpCiB7CisgICAgLy8gV2Ugd2FudCB0byBza2lw
IHRoaXMgY29uc3RyYWludCBmb3IgdGhlIEdDIHZlcmlmaWVyIGJlY2F1c2U6CisgICAgLy8gMS4g
VGhlcmUgc2hvdWxkIGJlIG5vIG11dGF0b3IgbWFya2luZyBhY3Rpb24gYmV0d2VlbiB0aGUgRW5k
IHBoYXNlIGFuZCB2ZXJpZnlHQygpLgorICAgIC8vICAgIEhlbmNlLCB3ZSBjYW4gaWdub3JlIHRo
c2Ugc3RhY2tzLgorICAgIC8vIDIuIFRoZSBFbmQgcGhhc2UgZXhwbGljdGx5IGNhbGxzIGl0ZXJh
dGVFeGVjdXRpbmdBbmRDb21waWxpbmdDb2RlQmxvY2tzKCkKKyAgICAvLyAgICB0byBhZGQgZXhl
Y3V0aW5nIENvZGVCbG9ja3MgdG8gbV9oZWFwLm1fbXV0YXRvck1hcmtTdGFjay4gV2Ugd2FudCB0
bworICAgIC8vICAgIGxlYXZlIHRob3NlIHVucGVydHVyYmVkLgorICAgIGlmIChtX2hlYXAubV9p
c01hcmtpbmdGb3JHQ1ZlcmlmaWVyKQorICAgICAgICByZXR1cm47CisKICAgICBtX2hlYXAubV9t
dXRhdG9yTWFya1N0YWNrLT50cmFuc2ZlclRvKHZpc2l0b3IubXV0YXRvck1hcmtTdGFjaygpKTsK
ICAgICBtX2hlYXAubV9yYWNlTWFya1N0YWNrLT50cmFuc2ZlclRvKHZpc2l0b3IubXV0YXRvck1h
cmtTdGFjaygpKTsKIH0KIAordm9pZCBNYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludDo6ZXhlY3V0
ZUltcGwoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikgeyBleGVjdXRlSW1wbEltcGwodmlz
aXRvcik7IH0KK3ZvaWQgTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQ6OmV4ZWN1dGVJbXBsKFNs
b3RWaXNpdG9yJiB2aXNpdG9yKSB7IGV4ZWN1dGVJbXBsSW1wbCh2aXNpdG9yKTsgfQorCiB9IC8v
IG5hbWVzcGFjZSBKU0MKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya1N0
YWNrTWVyZ2luZ0NvbnN0cmFpbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9NYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludC5oCShyZXZpc2lvbiAyNzI4MzApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiBuYW1lc3BhY2UgSlNDIHsKIAogY2xh
c3MgSGVhcDsKK2NsYXNzIEFic3RyYWN0U2xvdFZpc2l0b3I7CiBjbGFzcyBTbG90VmlzaXRvcjsK
IAogY2xhc3MgTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQgZmluYWwgOiBwdWJsaWMgTWFya2lu
Z0NvbnN0cmFpbnQgewpAQCAtNDAsNyArNDEsOSBAQCBwdWJsaWM6CiAgICAgZG91YmxlIHF1aWNr
V29ya0VzdGltYXRlKFNsb3RWaXNpdG9yJikgZmluYWw7CiAgICAgCiBwcml2YXRlOgotICAgIHZv
aWQgcHJlcGFyZVRvRXhlY3V0ZUltcGwoY29uc3QgQWJzdHJhY3RMb2NrZXImIGNvbnN0cmFpbnRT
b2x2aW5nTG9ja2VyLCBTbG90VmlzaXRvciYpIGZpbmFsOworICAgIHZvaWQgcHJlcGFyZVRvRXhl
Y3V0ZUltcGwoY29uc3QgQWJzdHJhY3RMb2NrZXImIGNvbnN0cmFpbnRTb2x2aW5nTG9ja2VyLCBB
YnN0cmFjdFNsb3RWaXNpdG9yJikgZmluYWw7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRv
cj4gQUxXQVlTX0lOTElORSB2b2lkIGV4ZWN1dGVJbXBsSW1wbChWaXNpdG9yJik7CisgICAgdm9p
ZCBleGVjdXRlSW1wbChBYnN0cmFjdFNsb3RWaXNpdG9yJikgZmluYWw7CiAgICAgdm9pZCBleGVj
dXRlSW1wbChTbG90VmlzaXRvciYpIGZpbmFsOwogICAgIAogICAgIEhlYXAmIG1faGVhcDsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suaAkocmV2aXNpb24gMjcy
ODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjAwLDYgKzIwMCw3IEBAIHB1YmxpYzoKICAgICAgICAgCiAgICAgICAgIHZv
aWQqIHN0YXJ0KCkgY29uc3QgeyByZXR1cm4gJm1fYmxvY2stPmF0b21zKClbMF07IH0KICAgICAg
ICAgdm9pZCogZW5kKCkgY29uc3QgeyByZXR1cm4gJm1fYmxvY2stPmF0b21zKClbbV9lbmRBdG9t
XTsgfQorICAgICAgICB2b2lkKiBhdG9tQXQoc2l6ZV90IGkpIGNvbnN0IHsgcmV0dXJuICZtX2Js
b2NrLT5hdG9tcygpW2ldOyB9CiAgICAgICAgIGJvb2wgY29udGFpbnModm9pZCogcCkgY29uc3Qg
eyByZXR1cm4gc3RhcnQoKSA8PSBwICYmIHAgPCBlbmQoKTsgfQogCiAgICAgICAgIHZvaWQgZHVt
cFN0YXRlKFByaW50U3RyZWFtJik7CkBAIC0yOTUsOSArMjk2LDEwIEBAIHB1YmxpYzoKIAogICAg
ICAgICBCaXRtYXA8YXRvbXNQZXJCbG9jaz4gbV9tYXJrczsKICAgICAgICAgQml0bWFwPGF0b21z
UGVyQmxvY2s+IG1fbmV3bHlBbGxvY2F0ZWQ7CisgICAgICAgIHZvaWQqIG1fdmVyaWZpZXJNZW1v
IHsgbnVsbHB0ciB9OwogICAgIH07CiAgICAgCi1wcml2YXRlOiAgICAKK3ByaXZhdGU6CiAgICAg
Rm9vdGVyJiBmb290ZXIoKTsKICAgICBjb25zdCBGb290ZXImIGZvb3RlcigpIGNvbnN0OwogCkBA
IC0zODQsNyArMzg2LDExIEBAIHB1YmxpYzoKICAgICAgICAgKmJpdHdpc2VfY2FzdDx2b2xhdGls
ZSB1aW50OF90Kj4oJmZvb3RlcigpKTsKICAgICB9CiAgICAgCisgICAgdm9pZCBzZXRWZXJpZmll
ck1lbW8odm9pZCopOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IFQgdmVyaWZpZXJNZW1vKCkg
Y29uc3Q7CisKICAgICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBvZmZzZXRPZkZvb3RlciA9IGVu
ZEF0b20gKiBhdG9tU2l6ZTsKKyAgICBzdGF0aWNfYXNzZXJ0KG9mZnNldE9mRm9vdGVyICsgc2l6
ZW9mKEZvb3RlcikgPD0gYmxvY2tTaXplKTsKIAogcHJpdmF0ZToKICAgICBNYXJrZWRCbG9jayhW
TSYsIEhhbmRsZSYpOwpAQCAtNjYwLDYgKzY2NiwxNyBAQCBpbmxpbmUgdm9pZCBNYXJrZWRCbG9j
azo6bm90ZU1hcmtlZCgpCiAgICAgICAgIG5vdGVNYXJrZWRTbG93KCk7CiB9CiAKK2lubGluZSB2
b2lkIE1hcmtlZEJsb2NrOjpzZXRWZXJpZmllck1lbW8odm9pZCogcCkKK3sKKyAgICBmb290ZXIo
KS5tX3ZlcmlmaWVyTWVtbyA9IHA7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitUIE1hcmtl
ZEJsb2NrOjp2ZXJpZmllck1lbW8oKSBjb25zdAoreworICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8
VD4oZm9vdGVyKCkubV92ZXJpZmllck1lbW8pOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAog
bmFtZXNwYWNlIFdURiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRT
cGFjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2Vk
U3BhY2UuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9NYXJrZWRTcGFjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3Miw3ICsyNzIsOCBAQCB2b2lk
IE1hcmtlZFNwYWNlOjplbmFibGVQcmVjaXNlQWxsb2NhdGlvCiAgICAgICAgIG1fcHJlY2lzZUFs
bG9jYXRpb25TZXQtPmFkZChhbGxvY2F0aW9uLT5jZWxsKCkpOwogfQogCi12b2lkIE1hcmtlZFNw
YWNlOjp2aXNpdFdlYWtTZXRzKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5h
bWUgVmlzaXRvcj4KK3ZvaWQgTWFya2VkU3BhY2U6OnZpc2l0V2Vha1NldHMoVmlzaXRvciYgdmlz
aXRvcikKIHsKICAgICBhdXRvIHZpc2l0ID0gWyZdIChXZWFrU2V0KiB3ZWFrU2V0KSB7CiAgICAg
ICAgIHdlYWtTZXQtPnZpc2l0KHZpc2l0b3IpOwpAQCAtMjg0LDYgKzI4NSw5IEBAIHZvaWQgTWFy
a2VkU3BhY2U6OnZpc2l0V2Vha1NldHMoU2xvdFZpc2kKICAgICAgICAgbV9hY3RpdmVXZWFrU2V0
cy5mb3JFYWNoKHZpc2l0KTsKIH0KIAordGVtcGxhdGUgdm9pZCBNYXJrZWRTcGFjZTo6dmlzaXRX
ZWFrU2V0cyhBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIE1hcmtlZFNwYWNl
Ojp2aXNpdFdlYWtTZXRzKFNsb3RWaXNpdG9yJik7CisKIHZvaWQgTWFya2VkU3BhY2U6OnJlYXBX
ZWFrU2V0cygpCiB7CiAgICAgYXV0byB2aXNpdCA9IFsmXSAoV2Vha1NldCogd2Vha1NldCkgewpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkU3BhY2UuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRTcGFjZS5oCShyZXZpc2lvbiAy
NzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRTcGFjZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAw
MCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQogICogIENvcHlyaWdodCAoQykgMjAwMSBQ
ZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQotICogIENvcHlyaWdodCAoQykgMjAwMy0yMDE4IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCkBA
IC0zNyw2ICszNyw3IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCitjbGFzcyBBYnN0cmFjdFNsb3RW
aXNpdG9yOwogY2xhc3MgQ29tcGxldGVTdWJzcGFjZTsKIGNsYXNzIEhlYXA7CiBjbGFzcyBIZWFw
Q2VsbDsKQEAgLTEwNSw3ICsxMDYsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgdm9pZCBwcmVwYXJl
Rm9yQWxsb2NhdGlvbigpOwogCi0gICAgdm9pZCB2aXNpdFdlYWtTZXRzKFNsb3RWaXNpdG9yJik7
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCB2aXNpdFdlYWtTZXRzKFZpc2l0
b3ImKTsKICAgICB2b2lkIHJlYXBXZWFrU2V0cygpOwogCiAgICAgTWFya2VkQmxvY2tTZXQmIGJs
b2NrcygpIHsgcmV0dXJuIG1fYmxvY2tzOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9NYXJraW5nQ29uc3RyYWludC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnQuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIxIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIk1hcmtp
bmdDb25zdHJhaW50LmgiCiAKKyNpbmNsdWRlICJBYnN0cmFjdFNsb3RWaXNpdG9ySW5saW5lcy5o
IgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJWaXNpdENvdW50ZXIuaCIKIApA
QCAtNTMsNiArNTQsNyBAQCB2b2lkIE1hcmtpbmdDb25zdHJhaW50OjpyZXNldFN0YXRzKCkKIAog
dm9pZCBNYXJraW5nQ29uc3RyYWludDo6ZXhlY3V0ZShTbG90VmlzaXRvciYgdmlzaXRvcikKIHsK
KyAgICBBU1NFUlQoIXZpc2l0b3IuaGVhcCgpLT5pc01hcmtpbmdGb3JHQ1ZlcmlmaWVyKCkpOwog
ICAgIFZpc2l0Q291bnRlciB2aXNpdENvdW50ZXIodmlzaXRvcik7CiAgICAgZXhlY3V0ZUltcGwo
dmlzaXRvcik7CiAgICAgbV9sYXN0VmlzaXRDb3VudCArPSB2aXNpdENvdW50ZXIudmlzaXRDb3Vu
dCgpOwpAQCAtNjAsNiArNjIsMTIgQEAgdm9pZCBNYXJraW5nQ29uc3RyYWludDo6ZXhlY3V0ZShT
bG90VmlzaQogICAgICAgICBkYXRhTG9nKCIoIiwgYWJicmV2aWF0ZWROYW1lKCksICIgdmlzaXRl
ZCAiLCB2aXNpdENvdW50ZXIudmlzaXRDb3VudCgpLCAiIGluIGV4ZWN1dGUpIik7CiB9CiAKK3Zv
aWQgTWFya2luZ0NvbnN0cmFpbnQ6OmV4ZWN1dGVTeW5jaHJvbm91c2x5KEFic3RyYWN0U2xvdFZp
c2l0b3ImIHZpc2l0b3IpCit7CisgICAgcHJlcGFyZVRvRXhlY3V0ZUltcGwoTm9Mb2NraW5nTmVj
ZXNzYXJ5LCB2aXNpdG9yKTsKKyAgICBleGVjdXRlSW1wbCh2aXNpdG9yKTsKK30KKwogZG91Ymxl
IE1hcmtpbmdDb25zdHJhaW50OjpxdWlja1dvcmtFc3RpbWF0ZShTbG90VmlzaXRvciYpCiB7CiAg
ICAgcmV0dXJuIDA7CkBAIC03Miw2ICs4MCw3IEBAIGRvdWJsZSBNYXJraW5nQ29uc3RyYWludDo6
d29ya0VzdGltYXRlKFMKIAogdm9pZCBNYXJraW5nQ29uc3RyYWludDo6cHJlcGFyZVRvRXhlY3V0
ZShjb25zdCBBYnN0cmFjdExvY2tlciYgY29uc3RyYWludFNvbHZpbmdMb2NrZXIsIFNsb3RWaXNp
dG9yJiB2aXNpdG9yKQogeworICAgIEFTU0VSVCghdmlzaXRvci5oZWFwKCktPmlzTWFya2luZ0Zv
ckdDVmVyaWZpZXIoKSk7CiAgICAgZGF0YUxvZ0lmKE9wdGlvbnM6OmxvZ0dDKCksIGFiYnJldmlh
dGVkTmFtZSgpKTsKICAgICBWaXNpdENvdW50ZXIgdmlzaXRDb3VudGVyKHZpc2l0b3IpOwogICAg
IHByZXBhcmVUb0V4ZWN1dGVJbXBsKGNvbnN0cmFpbnRTb2x2aW5nTG9ja2VyLCB2aXNpdG9yKTsK
QEAgLTgyLDYgKzkxLDcgQEAgdm9pZCBNYXJraW5nQ29uc3RyYWludDo6cHJlcGFyZVRvRXhlY3V0
ZQogCiB2b2lkIE1hcmtpbmdDb25zdHJhaW50Ojpkb1BhcmFsbGVsV29yayhTbG90VmlzaXRvciYg
dmlzaXRvciwgU2hhcmVkVGFzazx2b2lkKFNsb3RWaXNpdG9yJik+JiB0YXNrKQogeworICAgIEFT
U0VSVCghdmlzaXRvci5oZWFwKCktPmlzTWFya2luZ0ZvckdDVmVyaWZpZXIoKSk7CiAgICAgVmlz
aXRDb3VudGVyIHZpc2l0Q291bnRlcih2aXNpdG9yKTsKICAgICB0YXNrLnJ1bih2aXNpdG9yKTsK
ICAgICBpZiAodmVyYm9zZU1hcmtpbmdDb25zdHJhaW50ICYmIHZpc2l0Q291bnRlci52aXNpdENv
dW50KCkpCkBAIC05Miw3ICsxMDIsNyBAQCB2b2lkIE1hcmtpbmdDb25zdHJhaW50Ojpkb1BhcmFs
bGVsV29yayhTCiAgICAgfQogfQogCi12b2lkIE1hcmtpbmdDb25zdHJhaW50OjpwcmVwYXJlVG9F
eGVjdXRlSW1wbChjb25zdCBBYnN0cmFjdExvY2tlciYsIFNsb3RWaXNpdG9yJikKK3ZvaWQgTWFy
a2luZ0NvbnN0cmFpbnQ6OnByZXBhcmVUb0V4ZWN1dGVJbXBsKGNvbnN0IEFic3RyYWN0TG9ja2Vy
JiwgQWJzdHJhY3RTbG90VmlzaXRvciYpCiB7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnQuaAkocmV2aXNpb24gMjcyODMwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnQuaAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC0zOCw2ICszOCw3IEBACiBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgTWFya2luZ0NvbnN0
cmFpbnRTZXQ7CitjbGFzcyBBYnN0cmFjdFNsb3RWaXNpdG9yOwogY2xhc3MgU2xvdFZpc2l0b3I7
CiAKIGNsYXNzIE1hcmtpbmdDb25zdHJhaW50IHsKQEAgLTYxLDEwICs2MiwxMCBAQCBwdWJsaWM6
CiAgICAgc2l6ZV90IGxhc3RWaXNpdENvdW50KCkgY29uc3QgeyByZXR1cm4gbV9sYXN0VmlzaXRD
b3VudDsgfQogICAgIAogICAgIHZvaWQgZXhlY3V0ZShTbG90VmlzaXRvciYpOworCisgICAgSlNf
RVhQT1JUX1BSSVZBVEUgdmlydHVhbCBkb3VibGUgcXVpY2tXb3JrRXN0aW1hdGUoU2xvdFZpc2l0
b3ImKTsKICAgICAKLSAgICBKU19FWFBPUlRfUFJJVkFURSB2aXJ0dWFsIGRvdWJsZSBxdWlja1dv
cmtFc3RpbWF0ZShTbG90VmlzaXRvciYgdmlzaXRvcik7Ci0gICAgCi0gICAgZG91YmxlIHdvcmtF
c3RpbWF0ZShTbG90VmlzaXRvciYgdmlzaXRvcik7CisgICAgZG91YmxlIHdvcmtFc3RpbWF0ZShT
bG90VmlzaXRvciYpOwogICAgIAogICAgIHZvaWQgcHJlcGFyZVRvRXhlY3V0ZShjb25zdCBBYnN0
cmFjdExvY2tlciYgY29uc3RyYWludFNvbHZpbmdMb2NrZXIsIFNsb3RWaXNpdG9yJik7CiAgICAg
CkBAIC03Niw5ICs3NywxMiBAQCBwdWJsaWM6CiAgICAgQ29uc3RyYWludFBhcmFsbGVsaXNtIHBh
cmFsbGVsaXNtKCkgY29uc3QgeyByZXR1cm4gbV9wYXJhbGxlbGlzbTsgfQogCiBwcm90ZWN0ZWQ6
CisgICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVJbXBsKEFic3RyYWN0U2xvdFZpc2l0b3ImKSA9IDA7
CiAgICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVJbXBsKFNsb3RWaXNpdG9yJikgPSAwOwotICAgIEpT
X0VYUE9SVF9QUklWQVRFIHZpcnR1YWwgdm9pZCBwcmVwYXJlVG9FeGVjdXRlSW1wbChjb25zdCBB
YnN0cmFjdExvY2tlciYgY29uc3RyYWludFNvbHZpbmdMb2NrZXIsIFNsb3RWaXNpdG9yJik7Ci0g
ICAgCisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdmlydHVhbCB2b2lkIHByZXBhcmVUb0V4ZWN1dGVJ
bXBsKGNvbnN0IEFic3RyYWN0TG9ja2VyJiBjb25zdHJhaW50U29sdmluZ0xvY2tlciwgQWJzdHJh
Y3RTbG90VmlzaXRvciYpOworCisgICAgdm9pZCBleGVjdXRlU3luY2hyb25vdXNseShBYnN0cmFj
dFNsb3RWaXNpdG9yJik7CisKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIE1hcmtpbmdDb25z
dHJhaW50U2V0OyAvLyBTbyBpdCBjYW4gc2V0IG1faW5kZXguCiAgICAgCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludEV4ZWN1dG9yUGFpci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50RXhl
Y3V0b3JQYWlyLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
TWFya2luZ0NvbnN0cmFpbnRFeGVjdXRvclBhaXIuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDU0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvRnVuY3Rp
b24uaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEFic3RyYWN0U2xvdFZpc2l0b3I7Citj
bGFzcyBTbG90VmlzaXRvcjsKKworc3RydWN0IE1hcmtpbmdDb25zdHJhaW50RXhlY3V0b3JQYWly
IHsKKyAgICBNYXJraW5nQ29uc3RyYWludEV4ZWN1dG9yUGFpcigKKyAgICAgICAgOjpGdW5jdGlv
bjx2b2lkKEFic3RyYWN0U2xvdFZpc2l0b3ImKT4gYWJzdHJhY3RTbG90VmlzaXRvckZ1bmMsCisg
ICAgICAgIDo6RnVuY3Rpb248dm9pZChTbG90VmlzaXRvciYpPiBzbG90VmlzaXRvckZ1bmMpCisg
ICAgICAgIDogYWJzdHJhY3RTbG90VmlzaXRvckZ1bmMoV1RGTW92ZShhYnN0cmFjdFNsb3RWaXNp
dG9yRnVuYykpCisgICAgICAgICwgc2xvdFZpc2l0b3JGdW5jKFdURk1vdmUoc2xvdFZpc2l0b3JG
dW5jKSkKKyAgICB7IH0KKyAgICBNYXJraW5nQ29uc3RyYWludEV4ZWN1dG9yUGFpcihNYXJraW5n
Q29uc3RyYWludEV4ZWN1dG9yUGFpciYmKSA9IGRlZmF1bHQ7CisKKyAgICB2b2lkIGV4ZWN1dGUo
QWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikgeyBhYnN0cmFjdFNsb3RWaXNpdG9yRnVuYyh2
aXNpdG9yKTsgfQorICAgIHZvaWQgZXhlY3V0ZShTbG90VmlzaXRvciYgdmlzaXRvcikgeyBzbG90
VmlzaXRvckZ1bmModmlzaXRvcik7IH0KKworICAgIDo6RnVuY3Rpb248dm9pZChBYnN0cmFjdFNs
b3RWaXNpdG9yJik+IGFic3RyYWN0U2xvdFZpc2l0b3JGdW5jOworICAgIDo6RnVuY3Rpb248dm9p
ZChTbG90VmlzaXRvciYpPiBzbG90VmlzaXRvckZ1bmM7Cit9OworCisjZGVmaW5lIE1BS0VfTUFS
S0lOR19DT05TVFJBSU5UX0VYRUNVVE9SX1BBSVIobGFtYmRhKSBcCisgICAgTWFya2luZ0NvbnN0
cmFpbnRFeGVjdXRvclBhaXIoKGxhbWJkYSksIChsYW1iZGEpKQorCit9IC8vIG5hbWVzcGFjZSBK
U0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50U2V0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29u
c3RyYWludFNldC5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL01hcmtpbmdDb25zdHJhaW50U2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02Myw5ICs2Myw5
IEBAIHZvaWQgTWFya2luZ0NvbnN0cmFpbnRTZXQ6OmRpZFN0YXJ0TWFya2kKICAgICBtX2l0ZXJh
dGlvbiA9IDE7CiB9CiAKLXZvaWQgTWFya2luZ0NvbnN0cmFpbnRTZXQ6OmFkZChDU3RyaW5nIGFi
YnJldmlhdGVkTmFtZSwgQ1N0cmluZyBuYW1lLCA6OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3Im
KT4gZnVuY3Rpb24sIENvbnN0cmFpbnRWb2xhdGlsaXR5IHZvbGF0aWxpdHksIENvbnN0cmFpbnRD
b25jdXJyZW5jeSBjb25jdXJyZW5jeSwgQ29uc3RyYWludFBhcmFsbGVsaXNtIHBhcmFsbGVsaXNt
KQordm9pZCBNYXJraW5nQ29uc3RyYWludFNldDo6YWRkKENTdHJpbmcgYWJicmV2aWF0ZWROYW1l
LCBDU3RyaW5nIG5hbWUsIE1hcmtpbmdDb25zdHJhaW50RXhlY3V0b3JQYWlyJiYgZXhlY3V0b3Jz
LCBDb25zdHJhaW50Vm9sYXRpbGl0eSB2b2xhdGlsaXR5LCBDb25zdHJhaW50Q29uY3VycmVuY3kg
Y29uY3VycmVuY3ksIENvbnN0cmFpbnRQYXJhbGxlbGlzbSBwYXJhbGxlbGlzbSkKIHsKLSAgICBh
ZGQobWFrZVVuaXF1ZTxTaW1wbGVNYXJraW5nQ29uc3RyYWludD4oV1RGTW92ZShhYmJyZXZpYXRl
ZE5hbWUpLCBXVEZNb3ZlKG5hbWUpLCBXVEZNb3ZlKGZ1bmN0aW9uKSwgdm9sYXRpbGl0eSwgY29u
Y3VycmVuY3ksIHBhcmFsbGVsaXNtKSk7CisgICAgYWRkKG1ha2VVbmlxdWU8U2ltcGxlTWFya2lu
Z0NvbnN0cmFpbnQ+KFdURk1vdmUoYWJicmV2aWF0ZWROYW1lKSwgV1RGTW92ZShuYW1lKSwgV1RG
TW92ZShleGVjdXRvcnMpLCB2b2xhdGlsaXR5LCBjb25jdXJyZW5jeSwgcGFyYWxsZWxpc20pKTsK
IH0KIAogdm9pZCBNYXJraW5nQ29uc3RyYWludFNldDo6YWRkKApAQCAtMTY2LDEwICsxNjYsMTAg
QEAgYm9vbCBNYXJraW5nQ29uc3RyYWludFNldDo6ZXhlY3V0ZUNvbnZlcgogICAgIHJldHVybiAh
c29sdmVyLmRpZFZpc2l0U29tZXRoaW5nKCk7CiB9CiAKLXZvaWQgTWFya2luZ0NvbnN0cmFpbnRT
ZXQ6OmV4ZWN1dGVBbGwoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIE1hcmtpbmdDb25zdHJh
aW50U2V0OjpleGVjdXRlQWxsU3luY2hyb25vdXNseShBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNp
dG9yKQogewogICAgIGZvciAoYXV0byYgY29uc3RyYWludCA6IG1fc2V0KQotICAgICAgICBjb25z
dHJhaW50LT5leGVjdXRlKHZpc2l0b3IpOworICAgICAgICBjb25zdHJhaW50LT5leGVjdXRlU3lu
Y2hyb25vdXNseSh2aXNpdG9yKTsKICAgICBkYXRhTG9nSWYoT3B0aW9uczo6bG9nR0MoKSwgIiAi
KTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFp
bnRTZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5n
Q29uc3RyYWludFNldC5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9NYXJraW5nQ29uc3RyYWludFNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2LDYgKzI2LDcg
QEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiTWFya2luZ0NvbnN0cmFpbnQuaCIKKyNpbmNs
dWRlICJNYXJraW5nQ29uc3RyYWludEV4ZWN1dG9yUGFpci5oIgogI2luY2x1ZGUgPHd0Zi9CaXRW
ZWN0b3IuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKQEAgLTQ2LDE4ICs0NywxOCBAQCBw
dWJsaWM6CiAgICAgdm9pZCBhZGQoCiAgICAgICAgIENTdHJpbmcgYWJicmV2aWF0ZWROYW1lLAog
ICAgICAgICBDU3RyaW5nIG5hbWUsCi0gICAgICAgIDo6RnVuY3Rpb248dm9pZChTbG90VmlzaXRv
ciYpPiwKKyAgICAgICAgTWFya2luZ0NvbnN0cmFpbnRFeGVjdXRvclBhaXImJiwKICAgICAgICAg
Q29uc3RyYWludFZvbGF0aWxpdHksCiAgICAgICAgIENvbnN0cmFpbnRDb25jdXJyZW5jeSA9IENv
bnN0cmFpbnRDb25jdXJyZW5jeTo6Q29uY3VycmVudCwKICAgICAgICAgQ29uc3RyYWludFBhcmFs
bGVsaXNtID0gQ29uc3RyYWludFBhcmFsbGVsaXNtOjpTZXF1ZW50aWFsKTsKICAgICAKICAgICB2
b2lkIGFkZCgKICAgICAgICAgQ1N0cmluZyBhYmJyZXZpYXRlZE5hbWUsIENTdHJpbmcgbmFtZSwK
LSAgICAgICAgOjpGdW5jdGlvbjx2b2lkKFNsb3RWaXNpdG9yJik+IGZ1bmMsCisgICAgICAgIE1h
cmtpbmdDb25zdHJhaW50RXhlY3V0b3JQYWlyJiYgZXhlY3V0b3JzLAogICAgICAgICBDb25zdHJh
aW50Vm9sYXRpbGl0eSB2b2xhdGlsaXR5LAogICAgICAgICBDb25zdHJhaW50UGFyYWxsZWxpc20g
cGFyYWxsZWxpc20pCiAgICAgewotICAgICAgICBhZGQoYWJicmV2aWF0ZWROYW1lLCBuYW1lLCBX
VEZNb3ZlKGZ1bmMpLCB2b2xhdGlsaXR5LCBDb25zdHJhaW50Q29uY3VycmVuY3k6OkNvbmN1cnJl
bnQsIHBhcmFsbGVsaXNtKTsKKyAgICAgICAgYWRkKGFiYnJldmlhdGVkTmFtZSwgbmFtZSwgV1RG
TW92ZShleGVjdXRvcnMpLCB2b2xhdGlsaXR5LCBDb25zdHJhaW50Q29uY3VycmVuY3k6OkNvbmN1
cnJlbnQsIHBhcmFsbGVsaXNtKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBhZGQoc3RkOjp1bmlx
dWVfcHRyPE1hcmtpbmdDb25zdHJhaW50Pik7CkBAIC03MCwxMyArNzEsMTMgQEAgcHVibGljOgog
ICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGlzIGV4ZWN1dGVkIGFsbCBjb25zdHJhaW50cyBhbmQg
bm9uZSBvZiB0aGVtIHByb2R1Y2VkIG5ldyB3b3JrLiBUaGlzCiAgICAgLy8gYXNzdW1lcyB0aGF0
IHlvdSd2ZSBhbHJhZWR5IHZpc2l0ZWQgcm9vdHMgYW5kIGRyYWluZWQgZnJvbSB0aGVyZS4KICAg
ICBib29sIGV4ZWN1dGVDb252ZXJnZW5jZShTbG90VmlzaXRvciYpOwotICAgIAorCiAgICAgLy8g
U2ltcGx5IHJ1bnMgYWxsIGNvbnN0cmFpbnRzIHdpdGhvdXQgYW55IHNoZW5hbmlnYW5zLgotICAg
IHZvaWQgZXhlY3V0ZUFsbChTbG90VmlzaXRvciYpOworICAgIHZvaWQgZXhlY3V0ZUFsbFN5bmNo
cm9ub3VzbHkoQWJzdHJhY3RTbG90VmlzaXRvciYpOwogICAgIAogcHJpdmF0ZToKICAgICBmcmll
bmQgY2xhc3MgTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXI7Ci0gICAgCisKICAgICBib29sIGV4ZWN1
dGVDb252ZXJnZW5jZUltcGwoU2xvdFZpc2l0b3ImKTsKICAgICAKICAgICBIZWFwJiBtX2hlYXA7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludFNvbHZl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0Nv
bnN0cmFpbnRTb2x2ZXIuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludFNvbHZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXIuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludFNv
bHZlci5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9N
YXJraW5nQ29uc3RyYWludFNvbHZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL1NpbXBsZU1hcmtpbmdDb25zdHJhaW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TaW1wbGVNYXJraW5nQ29uc3RyYWludC5jcHAJKHJl
dmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1NpbXBsZU1hcmtp
bmdDb25zdHJhaW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMCwxMSArMzAsMTEgQEAgbmFtZXNwYWNl
IEpTQyB7CiAKIFNpbXBsZU1hcmtpbmdDb25zdHJhaW50OjpTaW1wbGVNYXJraW5nQ29uc3RyYWlu
dCgKICAgICBDU3RyaW5nIGFiYnJldmlhdGVkTmFtZSwgQ1N0cmluZyBuYW1lLAotICAgIDo6RnVu
Y3Rpb248dm9pZChTbG90VmlzaXRvciYpPiBleGVjdXRlRnVuY3Rpb24sCisgICAgTWFya2luZ0Nv
bnN0cmFpbnRFeGVjdXRvclBhaXImJiBleGVjdXRvcnMsCiAgICAgQ29uc3RyYWludFZvbGF0aWxp
dHkgdm9sYXRpbGl0eSwgQ29uc3RyYWludENvbmN1cnJlbmN5IGNvbmN1cnJlbmN5LAogICAgIENv
bnN0cmFpbnRQYXJhbGxlbGlzbSBwYXJhbGxlbGlzbSkKICAgICA6IE1hcmtpbmdDb25zdHJhaW50
KFdURk1vdmUoYWJicmV2aWF0ZWROYW1lKSwgV1RGTW92ZShuYW1lKSwgdm9sYXRpbGl0eSwgY29u
Y3VycmVuY3ksIHBhcmFsbGVsaXNtKQotICAgICwgbV9leGVjdXRlRnVuY3Rpb24oV1RGTW92ZShl
eGVjdXRlRnVuY3Rpb24pKQorICAgICwgbV9leGVjdXRvcnMoV1RGTW92ZShleGVjdXRvcnMpKQog
ewogfQogCkBAIC00MiwxMCArNDIsMTQgQEAgU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQ6On5TaW1w
bGVNYXJraW5nQwogewogfQogCi12b2lkIFNpbXBsZU1hcmtpbmdDb25zdHJhaW50OjpleGVjdXRl
SW1wbChTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2
b2lkIFNpbXBsZU1hcmtpbmdDb25zdHJhaW50OjpleGVjdXRlSW1wbEltcGwoVmlzaXRvciYgdmlz
aXRvcikKIHsKLSAgICBtX2V4ZWN1dGVGdW5jdGlvbih2aXNpdG9yKTsKKyAgICBtX2V4ZWN1dG9y
cy5leGVjdXRlKHZpc2l0b3IpOwogfQogCit2b2lkIFNpbXBsZU1hcmtpbmdDb25zdHJhaW50Ojpl
eGVjdXRlSW1wbChBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKSB7IGV4ZWN1dGVJbXBsSW1w
bCh2aXNpdG9yKTsgfQordm9pZCBTaW1wbGVNYXJraW5nQ29uc3RyYWludDo6ZXhlY3V0ZUltcGwo
U2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsgZXhlY3V0ZUltcGxJbXBsKHZpc2l0b3IpOyB9CisKIH0g
Ly8gbmFtZXNwYWNlIEpTQwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TaW1w
bGVNYXJraW5nQ29uc3RyYWludC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL1NpbXBsZU1hcmtpbmdDb25zdHJhaW50LmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1NpbXBsZU1hcmtpbmdDb25zdHJhaW50LmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMjYsNyArMjYsNyBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJNYXJraW5n
Q29uc3RyYWludC5oIgotI2luY2x1ZGUgPHd0Zi9GdW5jdGlvbi5oPgorI2luY2x1ZGUgIk1hcmtp
bmdDb25zdHJhaW50RXhlY3V0b3JQYWlyLmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC0zNywy
NiArMzcsMjggQEAgY2xhc3MgU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQgZmluYWwgOiBwdQogcHVi
bGljOgogICAgIEpTX0VYUE9SVF9QUklWQVRFIFNpbXBsZU1hcmtpbmdDb25zdHJhaW50KAogICAg
ICAgICBDU3RyaW5nIGFiYnJldmlhdGVkTmFtZSwgQ1N0cmluZyBuYW1lLAotICAgICAgICA6OkZ1
bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3ImKT4sCisgICAgICAgIE1hcmtpbmdDb25zdHJhaW50RXhl
Y3V0b3JQYWlyJiYsCiAgICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5LAogICAgICAgICBDb25z
dHJhaW50Q29uY3VycmVuY3kgPSBDb25zdHJhaW50Q29uY3VycmVuY3k6OkNvbmN1cnJlbnQsCiAg
ICAgICAgIENvbnN0cmFpbnRQYXJhbGxlbGlzbSA9IENvbnN0cmFpbnRQYXJhbGxlbGlzbTo6U2Vx
dWVudGlhbCk7CiAgICAgCiAgICAgU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQoCiAgICAgICAgIENT
dHJpbmcgYWJicmV2aWF0ZWROYW1lLCBDU3RyaW5nIG5hbWUsCi0gICAgICAgIDo6RnVuY3Rpb248
dm9pZChTbG90VmlzaXRvciYpPiBmdW5jLAorICAgICAgICBNYXJraW5nQ29uc3RyYWludEV4ZWN1
dG9yUGFpciYmIGV4ZWN1dG9ycywKICAgICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHkgdm9sYXRp
bGl0eSwKICAgICAgICAgQ29uc3RyYWludFBhcmFsbGVsaXNtIHBhcmFsbGVsaXNtKQotICAgICAg
ICA6IFNpbXBsZU1hcmtpbmdDb25zdHJhaW50KGFiYnJldmlhdGVkTmFtZSwgbmFtZSwgV1RGTW92
ZShmdW5jKSwgdm9sYXRpbGl0eSwgQ29uc3RyYWludENvbmN1cnJlbmN5OjpDb25jdXJyZW50LCBw
YXJhbGxlbGlzbSkKKyAgICAgICAgOiBTaW1wbGVNYXJraW5nQ29uc3RyYWludChhYmJyZXZpYXRl
ZE5hbWUsIG5hbWUsIFdURk1vdmUoZXhlY3V0b3JzKSwgdm9sYXRpbGl0eSwgQ29uc3RyYWludENv
bmN1cnJlbmN5OjpDb25jdXJyZW50LCBwYXJhbGxlbGlzbSkKICAgICB7CiAgICAgfQogICAgIAog
ICAgIEpTX0VYUE9SVF9QUklWQVRFIH5TaW1wbGVNYXJraW5nQ29uc3RyYWludCgpIGZpbmFsOwog
ICAgIAogcHJpdmF0ZToKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiBBTFdBWVNfSU5M
SU5FIHZvaWQgZXhlY3V0ZUltcGxJbXBsKFZpc2l0b3ImKTsKKyAgICB2b2lkIGV4ZWN1dGVJbXBs
KEFic3RyYWN0U2xvdFZpc2l0b3ImKSBmaW5hbDsKICAgICB2b2lkIGV4ZWN1dGVJbXBsKFNsb3RW
aXNpdG9yJikgZmluYWw7CiAKLSAgICA6OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3ImKT4gbV9l
eGVjdXRlRnVuY3Rpb247CisgICAgTWFya2luZ0NvbnN0cmFpbnRFeGVjdXRvclBhaXIgbV9leGVj
dXRvcnM7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9TbG90VmlzaXRvci5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTc3
LDE1ICs3NywxMCBAQCBzdGF0aWMgdm9pZCB2YWxpZGF0ZShKU0NlbGwqIGNlbGwpCiAjZW5kaWYK
IAogU2xvdFZpc2l0b3I6OlNsb3RWaXNpdG9yKEhlYXAmIGhlYXAsIENTdHJpbmcgY29kZU5hbWUp
Ci0gICAgOiBtX2J5dGVzVmlzaXRlZCgwKQotICAgICwgbV92aXNpdENvdW50KDApCi0gICAgLCBt
X2lzSW5QYXJhbGxlbE1vZGUoZmFsc2UpCisgICAgOiBCYXNlKGhlYXAsIGNvZGVOYW1lLCBoZWFw
Lm1fb3BhcXVlUm9vdHMpCiAgICAgLCBtX21hcmtpbmdWZXJzaW9uKE1hcmtlZFNwYWNlOjppbml0
aWFsVmVyc2lvbikKLSAgICAsIG1faGVhcChoZWFwKQotICAgICwgbV9jb2RlTmFtZShjb2RlTmFt
ZSkKICNpZiBBU1NFUlRfRU5BQkxFRAogICAgICwgbV9pc0NoZWNraW5nRm9yRGVmYXVsdE1hcmtW
aW9sYXRpb24oZmFsc2UpCi0gICAgLCBtX2lzRHJhaW5pbmcoZmFsc2UpCiAjZW5kaWYKIHsKIH0K
QEAgLTExNyw4ICsxMTIsOCBAQCB2b2lkIFNsb3RWaXNpdG9yOjpkaWRTdGFydE1hcmtpbmcoKQog
CiB2b2lkIFNsb3RWaXNpdG9yOjpyZXNldCgpCiB7CisgICAgQWJzdHJhY3RTbG90VmlzaXRvcjo6
cmVzZXQoKTsKICAgICBtX2J5dGVzVmlzaXRlZCA9IDA7Ci0gICAgbV92aXNpdENvdW50ID0gMDsK
ICAgICBtX2hlYXBBbmFseXplciA9IG51bGxwdHI7CiAgICAgUkVMRUFTRV9BU1NFUlQoIW1fY3Vy
cmVudENlbGwpOwogfQpAQCAtMjMwLDcgKzIyNSw3IEBAIHZvaWQgU2xvdFZpc2l0b3I6OmFwcGVu
ZEpTQ2VsbE9yQXV4aWxpYXIKIHZvaWQgU2xvdFZpc2l0b3I6OmFwcGVuZFNsb3coSlNDZWxsKiBj
ZWxsLCBEZXBlbmRlbmN5IGRlcGVuZGVuY3kpCiB7CiAgICAgaWYgKFVOTElLRUxZKG1faGVhcEFu
YWx5emVyKSkKLSAgICAgICAgbV9oZWFwQW5hbHl6ZXItPmFuYWx5emVFZGdlKG1fY3VycmVudENl
bGwsIGNlbGwsIG1fcm9vdE1hcmtSZWFzb24pOworICAgICAgICBtX2hlYXBBbmFseXplci0+YW5h
bHl6ZUVkZ2UobV9jdXJyZW50Q2VsbCwgY2VsbCwgcm9vdE1hcmtSZWFzb24oKSk7CiAKICAgICBh
cHBlbmRIaWRkZW5TbG93SW1wbChjZWxsLCBkZXBlbmRlbmN5KTsKIH0KQEAgLTgwNywxMiArODAy
LDE3IEBAIE1hcmtTdGFja0FycmF5JiBTbG90VmlzaXRvcjo6Y29ycmVzcG9uZGkKICAgICByZXR1
cm4gKm1faGVhcC5tX3NoYXJlZE11dGF0b3JNYXJrU3RhY2s7CiB9CiAKLXZvaWQgU2xvdFZpc2l0
b3I6OmFkZFBhcmFsbGVsQ29uc3RyYWludFRhc2soUmVmUHRyPFNoYXJlZFRhc2s8dm9pZChTbG90
VmlzaXRvciYpPj4gdGFzaykKK05PX1JFVFVSTl9EVUVfVE9fQ1JBU0ggdm9pZCBTbG90VmlzaXRv
cjo6YWRkUGFyYWxsZWxDb25zdHJhaW50VGFzayhSZWZQdHI8U2hhcmVkVGFzazx2b2lkKEFic3Ry
YWN0U2xvdFZpc2l0b3ImKT4+KQoreworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
Cit9CisKK0pTX0VYUE9SVF9QUklWQVRFIHZvaWQgU2xvdFZpc2l0b3I6OmFkZFBhcmFsbGVsQ29u
c3RyYWludFRhc2soUmVmUHRyPFNoYXJlZFRhc2s8dm9pZChTbG90VmlzaXRvciYpPj4gdGFzaykK
IHsKICAgICBSRUxFQVNFX0FTU0VSVChtX2N1cnJlbnRTb2x2ZXIpOwogICAgIFJFTEVBU0VfQVNT
RVJUKG1fY3VycmVudENvbnN0cmFpbnQpOwogICAgIFJFTEVBU0VfQVNTRVJUKHRhc2spOwotICAg
IAorCiAgICAgbV9jdXJyZW50U29sdmVyLT5hZGRQYXJhbGxlbFRhc2sodGFzaywgKm1fY3VycmVu
dENvbnN0cmFpbnQpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90
VmlzaXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RW
aXNpdG9yLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L1Nsb3RWaXNpdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDU5ICsyNSw3NiBAQAogCiAjcHJh
Z21hIG9uY2UKIAorI2luY2x1ZGUgIkFic3RyYWN0U2xvdFZpc2l0b3IuaCIKICNpbmNsdWRlICJI
YW5kbGVUeXBlcy5oIgogI2luY2x1ZGUgIkl0ZXJhdGlvblN0YXR1cy5oIgotI2luY2x1ZGUgIk1h
cmtTdGFjay5oIgotI2luY2x1ZGUgIlJvb3RNYXJrUmVhc29uLmgiCi0jaW5jbHVkZSAiVmlzaXRS
YWNlS2V5LmgiCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3dGYvTW9ub3Rv
bmljVGltZS5oPgotI2luY2x1ZGUgPHd0Zi9TaGFyZWRUYXNrLmg+Ci0jaW5jbHVkZSA8d3RmL3Rl
eHQvQ1N0cmluZy5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIAotY2xhc3MgQ29uc2VydmF0aXZlUm9v
dHM7CiBjbGFzcyBHQ1RocmVhZFNoYXJlZERhdGE7Ci1jbGFzcyBIZWFwOwogY2xhc3MgSGVhcENl
bGw7CiBjbGFzcyBIZWFwQW5hbHl6ZXI7Ci1jbGFzcyBNYXJrZWRCbG9jazsKIGNsYXNzIE1hcmtp
bmdDb25zdHJhaW50OwogY2xhc3MgTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXI7Ci10ZW1wbGF0ZTx0
eXBlbmFtZSBUPiBjbGFzcyBXZWFrOwotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVHJh
aXRzPiBjbGFzcyBXcml0ZUJhcnJpZXJCYXNlOwogCiB0eXBlZGVmIHVpbnQzMl90IEhlYXBWZXJz
aW9uOwogCi1jbGFzcyBTbG90VmlzaXRvciB7CitjbGFzcyBTbG90VmlzaXRvciBmaW5hbCA6IHB1
YmxpYyBBYnN0cmFjdFNsb3RWaXNpdG9yIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShTbG90
VmlzaXRvcik7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiAKKyAgICB1c2luZyBCYXNl
ID0gQWJzdHJhY3RTbG90VmlzaXRvcjsKKwogICAgIGZyaWVuZCBjbGFzcyBTZXRDdXJyZW50Q2Vs
bFNjb3BlOwogICAgIGZyaWVuZCBjbGFzcyBIZWFwOwogCiBwdWJsaWM6CisgICAgY2xhc3MgQ29u
dGV4dCB7CisgICAgcHVibGljOgorICAgICAgICBBTFdBWVNfSU5MSU5FIENvbnRleHQoQWJzdHJh
Y3RTbG90VmlzaXRvciYsIEhlYXBDZWxsKikgeyB9CisgICAgfTsKKworICAgIGNsYXNzIFN1cHBy
ZXNzR0NWZXJpZmllclNjb3BlIHsKKyAgICBwdWJsaWM6CisgICAgICAgIFN1cHByZXNzR0NWZXJp
ZmllclNjb3BlKFNsb3RWaXNpdG9yJikgeyB9CisgICAgfTsKKworICAgIGNsYXNzIERlZmF1bHRN
YXJraW5nVmlvbGF0aW9uQXNzZXJ0aW9uU2NvcGUgeworICAgIHB1YmxpYzoKKyNpZiBBU1NFUlRf
RU5BQkxFRAorICAgICAgICBEZWZhdWx0TWFya2luZ1Zpb2xhdGlvbkFzc2VydGlvblNjb3BlKFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQorICAgICAgICAgICAgOiBtX3Zpc2l0b3IodmlzaXRvcikKKyAg
ICAgICAgeworICAgICAgICAgICAgbV93YXNDaGVja2luZ0ZvckRlZmF1bHRNYXJrVmlvbGF0aW9u
ID0gbV92aXNpdG9yLm1faXNDaGVja2luZ0ZvckRlZmF1bHRNYXJrVmlvbGF0aW9uOworICAgICAg
ICAgICAgbV92aXNpdG9yLm1faXNDaGVja2luZ0ZvckRlZmF1bHRNYXJrVmlvbGF0aW9uID0gZmFs
c2U7CisgICAgICAgIH0KKworICAgICAgICB+RGVmYXVsdE1hcmtpbmdWaW9sYXRpb25Bc3NlcnRp
b25TY29wZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1fdmlzaXRvci5tX2lzQ2hlY2tpbmdG
b3JEZWZhdWx0TWFya1Zpb2xhdGlvbiA9IG1fd2FzQ2hlY2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xh
dGlvbjsKKyAgICAgICAgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgU2xvdFZpc2l0b3ImIG1f
dmlzaXRvcjsKKyAgICAgICAgYm9vbCBtX3dhc0NoZWNraW5nRm9yRGVmYXVsdE1hcmtWaW9sYXRp
b247CisjZWxzZQorICAgICAgICBEZWZhdWx0TWFya2luZ1Zpb2xhdGlvbkFzc2VydGlvblNjb3Bl
KFNsb3RWaXNpdG9yJikgeyB9CisjZW5kaWYKKyAgICB9OworCiAgICAgU2xvdFZpc2l0b3IoSGVh
cCYsIENTdHJpbmcgY29kZU5hbWUpOwogICAgIH5TbG90VmlzaXRvcigpOwogCi0gICAgTWFya1N0
YWNrQXJyYXkmIGNvbGxlY3Rvck1hcmtTdGFjaygpIHsgcmV0dXJuIG1fY29sbGVjdG9yU3RhY2s7
IH0KLSAgICBNYXJrU3RhY2tBcnJheSYgbXV0YXRvck1hcmtTdGFjaygpIHsgcmV0dXJuIG1fbXV0
YXRvclN0YWNrOyB9Ci0gICAgY29uc3QgTWFya1N0YWNrQXJyYXkmIGNvbGxlY3Rvck1hcmtTdGFj
aygpIGNvbnN0IHsgcmV0dXJuIG1fY29sbGVjdG9yU3RhY2s7IH0KLSAgICBjb25zdCBNYXJrU3Rh
Y2tBcnJheSYgbXV0YXRvck1hcmtTdGFjaygpIGNvbnN0IHsgcmV0dXJuIG1fbXV0YXRvclN0YWNr
OyB9Ci0gICAgCi0gICAgVk0mIHZtKCk7Ci0gICAgY29uc3QgVk0mIHZtKCkgY29uc3Q7Ci0gICAg
SGVhcCogaGVhcCgpIGNvbnN0OworICAgIHZvaWQgYXBwZW5kKGNvbnN0IENvbnNlcnZhdGl2ZVJv
b3RzJikgZmluYWw7CiAKLSAgICB2b2lkIGFwcGVuZChjb25zdCBDb25zZXJ2YXRpdmVSb290cyYp
OwotICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFRyYWl0cz4gdm9pZCBh
cHBlbmQoY29uc3QgV3JpdGVCYXJyaWVyQmFzZTxULCBUcmFpdHM+Jik7CiAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgVCwgdHlwZW5hbWUgVHJhaXRzPiB2b2lkIGFwcGVuZEhpZGRlbihjb25zdCBXcml0
ZUJhcnJpZXJCYXNlPFQsIFRyYWl0cz4mKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJdGVyYXRv
cj4gdm9pZCBhcHBlbmQoSXRlcmF0b3IgYmVnaW4gLCBJdGVyYXRvciBlbmQpOwotICAgIHZvaWQg
YXBwZW5kVmFsdWVzKGNvbnN0IFdyaXRlQmFycmllckJhc2U8VW5rbm93biwgUmF3VmFsdWVUcmFp
dHM8VW5rbm93bj4+Kiwgc2l6ZV90IGNvdW50KTsKLSAgICB2b2lkIGFwcGVuZFZhbHVlc0hpZGRl
bihjb25zdCBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24sIFJhd1ZhbHVlVHJhaXRzPFVua25vd24+
PiosIHNpemVfdCBjb3VudCk7Ci0gICAgCisgICAgQUxXQVlTX0lOTElORSB2b2lkIGFwcGVuZFZh
bHVlcyhjb25zdCBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24sIFJhd1ZhbHVlVHJhaXRzPFVua25v
d24+PiosIHNpemVfdCBjb3VudCk7CisgICAgQUxXQVlTX0lOTElORSB2b2lkIGFwcGVuZFZhbHVl
c0hpZGRlbihjb25zdCBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24sIFJhd1ZhbHVlVHJhaXRzPFVu
a25vd24+PiosIHNpemVfdCBjb3VudCk7CisKICAgICAvLyBUaGVzZSBkb24ndCByZXF1aXJlIHlv
dSB0byBwcm92ZSB0aGF0IHlvdSBoYXZlIGEgV3JpdGVCYXJyaWVyPD4uIFRoYXQgbWFrZXMgc2Vu
c2UKICAgICAvLyBmb3I6CiAgICAgLy8KQEAgLTg3LDMyICsxMDQsMjcgQEAgcHVibGljOgogICAg
IC8vCiAgICAgLy8gSWYgeW91IGFyZSBub3QgYSByb290IGFuZCB5b3UgZG9uJ3Qga25vdyB3aGF0
IGtpbmQgb2YgYmFycmllciB5b3UgaGF2ZSwgdGhlbiB5b3UKICAgICAvLyBzaG91bGRuJ3QgY2Fs
bCB0aGVzZSBtZXRob2RzLgotICAgIHZvaWQgYXBwZW5kVW5iYXJyaWVyZWQoSlNWYWx1ZSk7Ci0g
ICAgdm9pZCBhcHBlbmRVbmJhcnJpZXJlZChKU1ZhbHVlKiwgc2l6ZV90KTsKLSAgICB2b2lkIGFw
cGVuZFVuYmFycmllcmVkKEpTQ2VsbCopOworICAgIEFMV0FZU19JTkxJTkUgdm9pZCBhcHBlbmRV
bmJhcnJpZXJlZChKU1ZhbHVlKTsKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgYXBwZW5kVW5iYXJy
aWVyZWQoSlNWYWx1ZSosIHNpemVfdCk7CisgICAgdm9pZCBhcHBlbmRVbmJhcnJpZXJlZChKU0Nl
bGwqKSBmaW5hbDsKICAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogICAgIHZvaWQgYXBw
ZW5kKGNvbnN0IFdlYWs8VD4mIHdlYWspOwogICAgIAotICAgIHZvaWQgYXBwZW5kSGlkZGVuVW5i
YXJyaWVyZWQoSlNWYWx1ZSk7Ci0gICAgdm9pZCBhcHBlbmRIaWRkZW5VbmJhcnJpZXJlZChKU0Nl
bGwqKTsKLQotICAgIGJvb2wgYWRkT3BhcXVlUm9vdCh2b2lkKik7IC8vIFJldHVybnMgdHJ1ZSBp
ZiB0aGUgcm9vdCB3YXMgbmV3LgotICAgIAotICAgIGJvb2wgY29udGFpbnNPcGFxdWVSb290KHZv
aWQqKSBjb25zdDsKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgYXBwZW5kSGlkZGVuVW5iYXJyaWVy
ZWQoSlNWYWx1ZSk7CisgICAgdm9pZCBhcHBlbmRIaWRkZW5VbmJhcnJpZXJlZChKU0NlbGwqKSBm
aW5hbDsKIAotICAgIGJvb2wgaXNFbXB0eSgpIHsgcmV0dXJuIG1fY29sbGVjdG9yU3RhY2suaXNF
bXB0eSgpICYmIG1fbXV0YXRvclN0YWNrLmlzRW1wdHkoKTsgfQorICAgIGJvb2wgaXNGaXJzdFZp
c2l0KCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9pc0ZpcnN0VmlzaXQ7IH0KIAotICAgIGJvb2wg
aXNGaXJzdFZpc2l0KCkgY29uc3QgeyByZXR1cm4gbV9pc0ZpcnN0VmlzaXQ7IH0KKyAgICBib29s
IGlzTWFya2VkKGNvbnN0IHZvaWQqKSBjb25zdCBmaW5hbDsKKyAgICBib29sIGlzTWFya2VkKE1h
cmtlZEJsb2NrJiwgSGVhcENlbGwqKSBjb25zdCBmaW5hbDsKKyAgICBib29sIGlzTWFya2VkKFBy
ZWNpc2VBbGxvY2F0aW9uJiwgSGVhcENlbGwqKSBjb25zdCBmaW5hbDsKIAogICAgIHZvaWQgZGlk
U3RhcnRNYXJraW5nKCk7CiAgICAgdm9pZCByZXNldCgpOwogICAgIHZvaWQgY2xlYXJNYXJrU3Rh
Y2tzKCk7CiAKICAgICBzaXplX3QgYnl0ZXNWaXNpdGVkKCkgY29uc3QgeyByZXR1cm4gbV9ieXRl
c1Zpc2l0ZWQ7IH0KLSAgICBzaXplX3QgdmlzaXRDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fdmlz
aXRDb3VudDsgfQotICAgIAotICAgIHZvaWQgYWRkVG9WaXNpdENvdW50KHNpemVfdCB2YWx1ZSkg
eyBtX3Zpc2l0Q291bnQgKz0gdmFsdWU7IH0KIAogICAgIHZvaWQgZG9uYXRlKCk7CiAgICAgdm9p
ZCBkcmFpbihNb25vdG9uaWNUaW1lIHRpbWVvdXQgPSBNb25vdG9uaWNUaW1lOjppbmZpbml0eSgp
KTsKQEAgLTEzNSwyNCArMTQ3LDE4IEBAIHB1YmxpYzoKICAgICAKICAgICAvLyBUaGlzIGluZm9y
bXMgdGhlIEdDIGFib3V0IGF1eGlsaWFyeSBvZiBzb21lIHNpemUgdGhhdCB3ZSBhcmUga2VlcGlu
ZyBhbGl2ZS4gSWYgeW91IGRvbid0IGRvCiAgICAgLy8gdGhpcyB0aGVuIHRoZSBzcGFjZSB3aWxs
IGJlIGZyZWVkIGF0IGVuZCBvZiBHQy4KLSAgICB2b2lkIG1hcmtBdXhpbGlhcnkoY29uc3Qgdm9p
ZCogYmFzZSk7CisgICAgdm9pZCBtYXJrQXV4aWxpYXJ5KGNvbnN0IHZvaWQqIGJhc2UpIGZpbmFs
OwogCi0gICAgdm9pZCByZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQoc2l6ZV90KTsKKyAgICB2b2lk
IHJlcG9ydEV4dHJhTWVtb3J5VmlzaXRlZChzaXplX3QpIGZpbmFsOwogI2lmIEVOQUJMRShSRVNP
VVJDRV9VU0FHRSkKLSAgICB2b2lkIHJlcG9ydEV4dGVybmFsTWVtb3J5VmlzaXRlZChzaXplX3Qp
OworICAgIHZvaWQgcmVwb3J0RXh0ZXJuYWxNZW1vcnlWaXNpdGVkKHNpemVfdCkgZmluYWw7CiAj
ZW5kaWYKICAgICAKLSAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKLQotICAgIGJv
b2wgaXNBbmFseXppbmdIZWFwKCkgY29uc3QgeyByZXR1cm4gISFtX2hlYXBBbmFseXplcjsgfQot
ICAgIEhlYXBBbmFseXplciogaGVhcEFuYWx5emVyKCkgY29uc3QgeyByZXR1cm4gbV9oZWFwQW5h
bHl6ZXI7IH0KLSAgICAKLSAgICBSb290TWFya1JlYXNvbiByb290TWFya1JlYXNvbigpIGNvbnN0
IHsgcmV0dXJuIG1fcm9vdE1hcmtSZWFzb247IH0KLSAgICB2b2lkIHNldFJvb3RNYXJrUmVhc29u
KFJvb3RNYXJrUmVhc29uIHJlYXNvbikgeyBtX3Jvb3RNYXJrUmVhc29uID0gcmVhc29uOyB9Cisg
ICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3QgZmluYWw7CiAKICAgICBIZWFwVmVyc2lv
biBtYXJraW5nVmVyc2lvbigpIGNvbnN0IHsgcmV0dXJuIG1fbWFya2luZ1ZlcnNpb247IH0KIAot
ICAgIGJvb2wgbXV0YXRvcklzU3RvcHBlZCgpIGNvbnN0IHsgcmV0dXJuIG1fbXV0YXRvcklzU3Rv
cHBlZDsgfQorICAgIGJvb2wgbXV0YXRvcklzU3RvcHBlZCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJu
IG1fbXV0YXRvcklzU3RvcHBlZDsgfQogICAgIAogICAgIExvY2smIHJpZ2h0VG9SdW4oKSB7IHJl
dHVybiBtX3JpZ2h0VG9SdW47IH0KICAgICAKQEAgLTE2NCwyMCArMTcwLDE3IEBAIHB1YmxpYzoK
ICAgICAKICAgICB2b2lkIG9wdGltaXplRm9yU3RvcHBlZE11dGF0b3IoKTsKICAgICAKLSAgICB2
b2lkIGRpZFJhY2UoY29uc3QgVmlzaXRSYWNlS2V5Jik7CisgICAgdm9pZCBkaWRSYWNlKGNvbnN0
IFZpc2l0UmFjZUtleSYpIGZpbmFsOwogICAgIHZvaWQgZGlkUmFjZShKU0NlbGwqIGNlbGwsIGNv
bnN0IGNoYXIqIHJlYXNvbikgeyBkaWRSYWNlKFZpc2l0UmFjZUtleShjZWxsLCByZWFzb24pKTsg
fQogICAgIAotICAgIHZvaWQgdmlzaXRBc0NvbnN0cmFpbnQoY29uc3QgSlNDZWxsKik7CisgICAg
dm9pZCB2aXNpdEFzQ29uc3RyYWludChjb25zdCBKU0NlbGwqKSBmaW5hbDsKICAgICAKICAgICBi
b29sIGRpZFJlYWNoVGVybWluYXRpb24oKTsKICAgICAKLSAgICB2b2lkIHNldElnbm9yZU5ld09w
YXF1ZVJvb3RzKGJvb2wgdmFsdWUpIHsgbV9pZ25vcmVOZXdPcGFxdWVSb290cyA9IHZhbHVlOyB9
Ci0KICAgICB2b2lkIGRvbmF0ZUFsbCgpOwogICAgIAotICAgIGNvbnN0IGNoYXIqIGNvZGVOYW1l
KCkgY29uc3QgeyByZXR1cm4gbV9jb2RlTmFtZS5kYXRhKCk7IH0KLSAgICAKLSAgICBKU19FWFBP
UlRfUFJJVkFURSB2b2lkIGFkZFBhcmFsbGVsQ29uc3RyYWludFRhc2soUmVmUHRyPFNoYXJlZFRh
c2s8dm9pZChTbG90VmlzaXRvciYpPj4pOworICAgIHZvaWQgYWRkUGFyYWxsZWxDb25zdHJhaW50
VGFzayhSZWZQdHI8U2hhcmVkVGFzazx2b2lkKEFic3RyYWN0U2xvdFZpc2l0b3ImKT4+KSBmaW5h
bDsKKyAgICB2b2lkIGFkZFBhcmFsbGVsQ29uc3RyYWludFRhc2soUmVmUHRyPFNoYXJlZFRhc2s8
dm9pZChTbG90VmlzaXRvciYpPj4pIGZpbmFsOwogCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFz
cyBQYXJhbGxlbE1vZGVFbmFibGVyOwpAQCAtMjE2LDM5ICsyMTksMjUgQEAgcHJpdmF0ZToKIAog
ICAgIE1hcmtTdGFja0FycmF5JiBjb3JyZXNwb25kaW5nR2xvYmFsU3RhY2soTWFya1N0YWNrQXJy
YXkmKTsKIAotICAgIE1hcmtTdGFja0FycmF5IG1fY29sbGVjdG9yU3RhY2s7Ci0gICAgTWFya1N0
YWNrQXJyYXkgbV9tdXRhdG9yU3RhY2s7Ci0gICAgCi0gICAgc2l6ZV90IG1fYnl0ZXNWaXNpdGVk
OwotICAgIHNpemVfdCBtX3Zpc2l0Q291bnQ7Ci0gICAgc2l6ZV90IG1fbm9uQ2VsbFZpc2l0Q291
bnQgeyAwIH07IC8vIFVzZWQgZm9yIGluY3JlbWVudGFsIGRyYWluaW5nLCBpZ25vcmVkIG90aGVy
d2lzZS4KLSAgICBDaGVja2VkU2l6ZSBtX2V4dHJhTWVtb3J5U2l6ZSB7IDAgfTsKLSAgICBib29s
IG1faXNJblBhcmFsbGVsTW9kZTsKLSAgICBib29sIG1faWdub3JlTmV3T3BhcXVlUm9vdHMgeyBm
YWxzZSB9OyAvLyBVc2VmdWwgYXMgYSBkZWJ1Z2dpbmcgbW9kZS4KKyAgICBib29sIG1faXNJblBh
cmFsbGVsTW9kZSB7IGZhbHNlIH07CiAKICAgICBIZWFwVmVyc2lvbiBtX21hcmtpbmdWZXJzaW9u
OwotICAgIAotICAgIEhlYXAmIG1faGVhcDsKKworICAgIHNpemVfdCBtX2J5dGVzVmlzaXRlZCB7
IDAgfTsKKyAgICBzaXplX3QgbV9ub25DZWxsVmlzaXRDb3VudCB7IDAgfTsgLy8gVXNlZCBmb3Ig
aW5jcmVtZW50YWwgZHJhaW5pbmcsIGlnbm9yZWQgb3RoZXJ3aXNlLgorICAgIENoZWNrZWRTaXpl
IG1fZXh0cmFNZW1vcnlTaXplIHsgMCB9OwogCiAgICAgSGVhcEFuYWx5emVyKiBtX2hlYXBBbmFs
eXplciB7IG51bGxwdHIgfTsKICAgICBKU0NlbGwqIG1fY3VycmVudENlbGwgeyBudWxscHRyIH07
Ci0gICAgUm9vdE1hcmtSZWFzb24gbV9yb290TWFya1JlYXNvbiB7IFJvb3RNYXJrUmVhc29uOjpO
b25lIH07CiAgICAgYm9vbCBtX2lzRmlyc3RWaXNpdCB7IGZhbHNlIH07CiAgICAgYm9vbCBtX211
dGF0b3JJc1N0b3BwZWQgeyBmYWxzZSB9OwogICAgIGJvb2wgbV9jYW5PcHRpbWl6ZUZvclN0b3Bw
ZWRNdXRhdG9yIHsgZmFsc2UgfTsKICAgICBMb2NrIG1fcmlnaHRUb1J1bjsKICAgICAKLSAgICBD
U3RyaW5nIG1fY29kZU5hbWU7Ci0gICAgCi0gICAgTWFya2luZ0NvbnN0cmFpbnQqIG1fY3VycmVu
dENvbnN0cmFpbnQgeyBudWxscHRyIH07Ci0gICAgTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXIqIG1f
Y3VycmVudFNvbHZlciB7IG51bGxwdHIgfTsKLSAgICAKICAgICAvLyBQdXQgcGFkZGluZyBoZXJl
IHRvIG1pdGlnYXRlIGZhbHNlIHNoYXJpbmcgYmV0d2VlbiBtdWx0aXBsZSBTbG90VmlzaXRvcnMu
CiAgICAgY2hhciBwYWRkaW5nWzY0XTsKLXB1YmxpYzoKICNpZiBBU1NFUlRfRU5BQkxFRAotICAg
IGJvb2wgbV9pc0NoZWNraW5nRm9yRGVmYXVsdE1hcmtWaW9sYXRpb247Ci0gICAgYm9vbCBtX2lz
RHJhaW5pbmc7CisgICAgYm9vbCBtX2lzQ2hlY2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlvbiB7
IGZhbHNlIH07CiAjZW5kaWYKIH07CiAKQEAgLTI3MSwyMyArMjYwLDQgQEAgcHJpdmF0ZToKICAg
ICBTbG90VmlzaXRvciYgbV9zdGFjazsKIH07CiAKLWNsYXNzIFNldFJvb3RNYXJrUmVhc29uU2Nv
cGUgewotcHVibGljOgotICAgIFNldFJvb3RNYXJrUmVhc29uU2NvcGUoU2xvdFZpc2l0b3ImIHZp
c2l0b3IsIFJvb3RNYXJrUmVhc29uIHJlYXNvbikKLSAgICAgICAgOiBtX3Zpc2l0b3IodmlzaXRv
cikKLSAgICAgICAgLCBtX3ByZXZpb3VzUmVhc29uKHZpc2l0b3Iucm9vdE1hcmtSZWFzb24oKSkK
LSAgICB7Ci0gICAgICAgIG1fdmlzaXRvci5zZXRSb290TWFya1JlYXNvbihyZWFzb24pOwotICAg
IH0KLQotICAgIH5TZXRSb290TWFya1JlYXNvblNjb3BlKCkKLSAgICB7Ci0gICAgICAgIG1fdmlz
aXRvci5zZXRSb290TWFya1JlYXNvbihtX3ByZXZpb3VzUmVhc29uKTsKLSAgICB9Ci0KLXByaXZh
dGU6Ci0gICAgU2xvdFZpc2l0b3ImIG1fdmlzaXRvcjsKLSAgICBSb290TWFya1JlYXNvbiBtX3By
ZXZpb3VzUmVhc29uOwotfTsKLQogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvcklubGluZXMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvcklubGluZXMuaAkocmV2aXNpb24gMjcy
ODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEy
LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEyLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC0yNSw5ICsyNSwxMCBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2lu
Y2x1ZGUgIkFic3RyYWN0U2xvdFZpc2l0b3JJbmxpbmVzLmgiCisjaW5jbHVkZSAiTWFya2VkQmxv
Y2suaCIKKyNpbmNsdWRlICJQcmVjaXNlQWxsb2NhdGlvbi5oIgogI2luY2x1ZGUgIlNsb3RWaXNp
dG9yLmgiCi0jaW5jbHVkZSAiV2Vhay5oIgotI2luY2x1ZGUgIldlYWtJbmxpbmVzLmgiCiAKIG5h
bWVzcGFjZSBKU0MgewogCkBAIC0xMzQsMjEgKzEzNSwxOSBAQCBBTFdBWVNfSU5MSU5FIHZvaWQg
U2xvdFZpc2l0b3I6OmFwcGVuZFZhCiAgICAgICAgIGFwcGVuZEhpZGRlbihiYXJyaWVyc1tpXSk7
CiB9CiAKLWlubGluZSBib29sIFNsb3RWaXNpdG9yOjphZGRPcGFxdWVSb290KHZvaWQqIHB0cikK
K0FMV0FZU19JTkxJTkUgYm9vbCBTbG90VmlzaXRvcjo6aXNNYXJrZWQoY29uc3Qgdm9pZCogcCkg
Y29uc3QKIHsKLSAgICBpZiAoIXB0cikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICht
X2lnbm9yZU5ld09wYXF1ZVJvb3RzKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFo
ZWFwKCktPm1fb3BhcXVlUm9vdHMuYWRkKHB0cikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICBtX3Zpc2l0Q291bnQrKzsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gaGVhcCgpLT5p
c01hcmtlZChwKTsKIH0KIAotaW5saW5lIGJvb2wgU2xvdFZpc2l0b3I6OmNvbnRhaW5zT3BhcXVl
Um9vdCh2b2lkKiBwdHIpIGNvbnN0CitBTFdBWVNfSU5MSU5FIGJvb2wgU2xvdFZpc2l0b3I6Omlz
TWFya2VkKE1hcmtlZEJsb2NrJiBjb250YWluZXIsIEhlYXBDZWxsKiBjZWxsKSBjb25zdAogewot
ICAgIHJldHVybiBoZWFwKCktPm1fb3BhcXVlUm9vdHMuY29udGFpbnMocHRyKTsKKyAgICByZXR1
cm4gY29udGFpbmVyLmlzTWFya2VkKG1hcmtpbmdWZXJzaW9uKCksIGNlbGwpOworfQorCitBTFdB
WVNfSU5MSU5FIGJvb2wgU2xvdFZpc2l0b3I6OmlzTWFya2VkKFByZWNpc2VBbGxvY2F0aW9uJiBj
b250YWluZXIsIEhlYXBDZWxsKiBjZWxsKSBjb25zdAoreworICAgIHJldHVybiBjb250YWluZXIu
aXNNYXJrZWQobWFya2luZ1ZlcnNpb24oKSwgY2VsbCk7CiB9CiAKIGlubGluZSB2b2lkIFNsb3RW
aXNpdG9yOjpyZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQoc2l6ZV90IHNpemUpCkBAIC0xNjksMjEg
KzE2OCw2IEBAIGlubGluZSB2b2lkIFNsb3RWaXNpdG9yOjpyZXBvcnRFeHRlcm5hbE0KIH0KICNl
bmRpZgogCi1pbmxpbmUgSGVhcCogU2xvdFZpc2l0b3I6OmhlYXAoKSBjb25zdAotewotICAgIHJl
dHVybiAmbV9oZWFwOwotfQotCi1pbmxpbmUgVk0mIFNsb3RWaXNpdG9yOjp2bSgpCi17Ci0gICAg
cmV0dXJuIG1faGVhcC52bSgpOwotfQotCi1pbmxpbmUgY29uc3QgVk0mIFNsb3RWaXNpdG9yOjp2
bSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1faGVhcC52bSgpOwotfQotCiB0ZW1wbGF0ZTx0eXBl
bmFtZSBGdW5jPgogSXRlcmF0aW9uU3RhdHVzIFNsb3RWaXNpdG9yOjpmb3JFYWNoTWFya1N0YWNr
KGNvbnN0IEZ1bmMmIGZ1bmMpCiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9T
bG90VmlzaXRvck1hY3Jvcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL1Nsb3RWaXNpdG9yTWFjcm9zLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvU2xvdFZpc2l0b3JNYWNyb3MuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDEyMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNw
cmFnbWEgb25jZQorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgQWJzdHJhY3RTbG90VmlzaXRv
cjsKK2NsYXNzIEpTQ2VsbDsKK2NsYXNzIFNsb3RWaXNpdG9yOworCisjZGVmaW5lIFVOVVNFRF9N
T0RJRklFUl9BUkdVTUVOVCAvKiB1bnVzZWQgKi8KKworI2RlZmluZSBERUNMQVJFX1VOVVNFRF9T
VFJVQ1RfVE9fVEVSTUlOQVRFX1ZJU0lUX01BQ1JPX0VYUEFOREVSX0lNUEwoY291bnRlcikgXAor
ICAgIHN0cnVjdCBVbnVzZWRTbG90VmlzaXRvck1hY3JvU3RydWN0U29XZUNhbkhhdmVBU2VtaWNv
bG9uIyNjb3VudGVyIHsgfQorCisjZGVmaW5lIERFQ0xBUkVfVU5VU0VEX1NUUlVDVF9UT19URVJN
SU5BVEVfVklTSVRfTUFDUk9fRVhQQU5ERVIoY291bnRlcikgXAorICAgIERFQ0xBUkVfVU5VU0VE
X1NUUlVDVF9UT19URVJNSU5BVEVfVklTSVRfTUFDUk9fRVhQQU5ERVJfSU1QTChjb3VudGVyKQor
CisjZGVmaW5lIERFQ0xBUkVfVU5VU0VEX1NUUlVDVF9UT19URVJNSU5BVEVfVklTSVRfTUFDUk8g
XAorICAgIERFQ0xBUkVfVU5VU0VEX1NUUlVDVF9UT19URVJNSU5BVEVfVklTSVRfTUFDUk9fRVhQ
QU5ERVIoX19DT1VOVEVSX18pCisKKy8vIE1hY3JvcyBmb3IgdmlzaXRBZ2dyZWdhdGUoKS4KKwor
I2RlZmluZSBERUNMQVJFX1ZJU0lUX0FHR1JFR0FURV9XSVRIX01PRElGSUVSKHBvc3RNb2RpZmll
cikgXAorcHJpdmF0ZTogXAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IEFMV0FZU19J
TkxJTkUgdm9pZCB2aXNpdEFnZ3JlZ2F0ZUltcGwoVmlzaXRvciYpIHBvc3RNb2RpZmllcjsgXAor
cHVibGljOiBcCisgICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShBYnN0cmFjdFNsb3RWaXNpdG9yJikg
cG9zdE1vZGlmaWVyOyBcCisgICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYpIHBv
c3RNb2RpZmllcgorCisjZGVmaW5lIERFQ0xBUkVfVklTSVRfQUdHUkVHQVRFIFwKKyAgICBERUNM
QVJFX1ZJU0lUX0FHR1JFR0FURV9XSVRIX01PRElGSUVSKFVOVVNFRF9NT0RJRklFUl9BUkdVTUVO
VCkKKworI2RlZmluZSBERUZJTkVfVklTSVRfQUdHUkVHQVRFX1dJVEhfTU9ESUZJRVIoY2xhc3NO
YW1lLCBwb3N0TW9kaWZpZXIpIFwKKyAgICB2b2lkIGNsYXNzTmFtZTo6dmlzaXRBZ2dyZWdhdGUo
QWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikgcG9zdE1vZGlmaWVyIHsgdmlzaXRBZ2dyZWdh
dGVJbXBsKHZpc2l0b3IpOyB9IFwKKyAgICB2b2lkIGNsYXNzTmFtZTo6dmlzaXRBZ2dyZWdhdGUo
U2xvdFZpc2l0b3ImIHZpc2l0b3IpIHBvc3RNb2RpZmllciB7IHZpc2l0QWdncmVnYXRlSW1wbCh2
aXNpdG9yKTsgfSBcCisgICAgREVDTEFSRV9VTlVTRURfU1RSVUNUX1RPX1RFUk1JTkFURV9WSVNJ
VF9NQUNSTworCisjZGVmaW5lIERFRklORV9WSVNJVF9BR0dSRUdBVEUoY2xhc3NOYW1lKSBcCisg
ICAgREVGSU5FX1ZJU0lUX0FHR1JFR0FURV9XSVRIX01PRElGSUVSKGNsYXNzTmFtZSwgVU5VU0VE
X01PRElGSUVSX0FSR1VNRU5UKQorCisvLyBNYWNyb3MgZm9yIHN0YXRpYyB2aXNpdENoaWxkcmVu
KCkuCisKKyNkZWZpbmUgREVDTEFSRV9WSVNJVF9DSElMRFJFTl9XSVRIX01PRElGSUVSKHByZU1v
ZGlmaWVyKSBcCitwcml2YXRlOiBcCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gQUxX
QVlTX0lOTElORSBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqLCBWaXNpdG9y
Jik7IFwKK3B1YmxpYzogXAorICAgIHByZU1vZGlmaWVyIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKiwgQWJzdHJhY3RTbG90VmlzaXRvciYpOyBcCisgICAgcHJlTW9kaWZpZXIgc3Rh
dGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpCisKKyNkZWZpbmUg
REVDTEFSRV9WSVNJVF9DSElMRFJFTiBcCisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTl9XSVRI
X01PRElGSUVSKFVOVVNFRF9NT0RJRklFUl9BUkdVTUVOVCkKKworI2RlZmluZSBERUZJTkVfVklT
SVRfQ0hJTERSRU5fV0lUSF9NT0RJRklFUihwcmVNb2RpZmllciwgY2xhc3NOYW1lKSBcCisgICAg
cHJlTW9kaWZpZXIgdm9pZCBjbGFzc05hbWU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBB
YnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBcCisgICAgeyBcCisgICAgICAgIEFic3RyYWN0
U2xvdFZpc2l0b3I6OkNvbnRleHQgY29udGV4dCh2aXNpdG9yLCBjZWxsKTsgXAorICAgICAgICB2
aXNpdENoaWxkcmVuSW1wbChjZWxsLCB2aXNpdG9yKTsgXAorICAgIH0gXAorICAgIHByZU1vZGlm
aWVyIHZvaWQgY2xhc3NOYW1lOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0
b3ImIHZpc2l0b3IpIHsgdmlzaXRDaGlsZHJlbkltcGwoY2VsbCwgdmlzaXRvcik7IH0gXAorICAg
IERFQ0xBUkVfVU5VU0VEX1NUUlVDVF9UT19URVJNSU5BVEVfVklTSVRfTUFDUk8KKworI2RlZmlu
ZSBERUZJTkVfVklTSVRfQ0hJTERSRU4oY2xhc3NOYW1lKSBcCisgICAgREVGSU5FX1ZJU0lUX0NI
SUxEUkVOX1dJVEhfTU9ESUZJRVIoVU5VU0VEX01PRElGSUVSX0FSR1VNRU5ULCBjbGFzc05hbWUp
CisKKy8vIE1hY3JvcyBmb3Igc3RhdGljIHZpc2l0T3V0cHV0Q29uc3RyYWludHMoKS4KKworI2Rl
ZmluZSBERUNMQVJFX1ZJU0lUX09VVFBVVF9DT05TVFJBSU5UU19XSVRIX01PRElGSUVSKHByZU1v
ZGlmaWVyKSBcCitwcml2YXRlOiBcCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gQUxX
QVlTX0lOTElORSBzdGF0aWMgdm9pZCB2aXNpdE91dHB1dENvbnN0cmFpbnRzSW1wbChKU0NlbGwq
LCBWaXNpdG9yJik7IFwKK3B1YmxpYzogXAorICAgIHByZU1vZGlmaWVyIHN0YXRpYyB2b2lkIHZp
c2l0T3V0cHV0Q29uc3RyYWludHMoSlNDZWxsKiwgQWJzdHJhY3RTbG90VmlzaXRvciYpOyBcCisg
ICAgcHJlTW9kaWZpZXIgc3RhdGljIHZvaWQgdmlzaXRPdXRwdXRDb25zdHJhaW50cyhKU0NlbGwq
LCBTbG90VmlzaXRvciYpCisKKyNkZWZpbmUgREVDTEFSRV9WSVNJVF9PVVRQVVRfQ09OU1RSQUlO
VFMgXAorICAgIERFQ0xBUkVfVklTSVRfT1VUUFVUX0NPTlNUUkFJTlRTX1dJVEhfTU9ESUZJRVIo
VU5VU0VEX01PRElGSUVSX0FSR1VNRU5UKQorCisjZGVmaW5lIERFRklORV9WSVNJVF9PVVRQVVRf
Q09OU1RSQUlOVFNfV0lUSF9NT0RJRklFUihwcmVNb2RpZmllciwgY2xhc3NOYW1lKSBcCisgICAg
cHJlTW9kaWZpZXIgdm9pZCBjbGFzc05hbWU6OnZpc2l0T3V0cHV0Q29uc3RyYWludHMoSlNDZWxs
KiBjZWxsLCBBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBcCisgICAgeyBcCisgICAgICAg
IEFic3RyYWN0U2xvdFZpc2l0b3I6OkNvbnRleHQgY29udGV4dCh2aXNpdG9yLCBjZWxsKTsgXAor
ICAgICAgICB2aXNpdE91dHB1dENvbnN0cmFpbnRzSW1wbChjZWxsLCB2aXNpdG9yKTsgXAorICAg
IH0gXAorICAgIHByZU1vZGlmaWVyIHZvaWQgY2xhc3NOYW1lOjp2aXNpdE91dHB1dENvbnN0cmFp
bnRzKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsgdmlzaXRPdXRwdXRDb25z
dHJhaW50c0ltcGwoY2VsbCwgdmlzaXRvcik7IH0gXAorICAgIERFQ0xBUkVfVU5VU0VEX1NUUlVD
VF9UT19URVJNSU5BVEVfVklTSVRfTUFDUk8KKworI2RlZmluZSBERUZJTkVfVklTSVRfT1VUUFVU
X0NPTlNUUkFJTlRTKGNsYXNzTmFtZSkgXAorICAgIERFRklORV9WSVNJVF9PVVRQVVRfQ09OU1RS
QUlOVFNfV0lUSF9NT0RJRklFUihVTlVTRURfTU9ESUZJRVJfQVJHVU1FTlQsIGNsYXNzTmFtZSkK
KworLy8gTWFjcm9zIGZvciB2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbigpLgorCisjZGVmaW5lIERF
RklORV9WSVNJVF9BRERJVElPTkFMX0NISUxEUkVOKGNsYXNzTmFtZSkgXAorICAgIHRlbXBsYXRl
IHZvaWQgY2xhc3NOYW1lOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OkFic3RyYWN0U2xv
dFZpc2l0b3ImKTsgXAorICAgIHRlbXBsYXRlIHZvaWQgY2xhc3NOYW1lOjp2aXNpdEFkZGl0aW9u
YWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJikKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKK3Vz
aW5nIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvcjsKK3VzaW5nIEpTQzo6SlNDZWxsOwordXNpbmcg
SlNDOjpTbG90VmlzaXRvcjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N1YnNw
YWNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3Vic3BhY2Uu
aAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3Vic3Bh
Y2UuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTctMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM0LDYgKzM0LDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7
CiAKK2NsYXNzIEFic3RyYWN0U2xvdFZpc2l0b3I7CiBjbGFzcyBBbGlnbmVkTWVtb3J5QWxsb2Nh
dG9yOwogY2xhc3MgSGVhcENlbGxUeXBlOwogCkBAIC04Niw4ICs4Nyw4IEBAIHB1YmxpYzoKICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgogICAgIHZvaWQgZm9yRWFjaE1hcmtlZENlbGwoY29u
c3QgRnVuYyYpOwogICAgIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+Ci0gICAgUmVmPFNo
YXJlZFRhc2s8dm9pZChTbG90VmlzaXRvciYpPj4gZm9yRWFjaE1hcmtlZENlbGxJblBhcmFsbGVs
KGNvbnN0IEZ1bmMmKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yLCB0eXBlbmFtZSBG
dW5jPgorICAgIFJlZjxTaGFyZWRUYXNrPHZvaWQoVmlzaXRvciYpPj4gZm9yRWFjaE1hcmtlZENl
bGxJblBhcmFsbGVsKGNvbnN0IEZ1bmMmKTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+
CiAgICAgdm9pZCBmb3JFYWNoTGl2ZUNlbGwoY29uc3QgRnVuYyYpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvU3Vic3BhY2VJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvU3Vic3BhY2VJbmxpbmVzLmgJKHJldmlzaW9uIDI3MjgzMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N1YnNwYWNlSW5saW5lcy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNy0yMDE4IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtODUsMTAgKzg1LDEwIEBAIHZvaWQgU3Vic3BhY2U6OmZvckVhY2hNYXJrZWRD
ZWxsKGNvbnN0IEYKICAgICAgICAgfSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+Ci1S
ZWY8U2hhcmVkVGFzazx2b2lkKFNsb3RWaXNpdG9yJik+PiBTdWJzcGFjZTo6Zm9yRWFjaE1hcmtl
ZENlbGxJblBhcmFsbGVsKGNvbnN0IEZ1bmMmIGZ1bmMpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNp
dG9yLCB0eXBlbmFtZSBGdW5jPgorUmVmPFNoYXJlZFRhc2s8dm9pZChWaXNpdG9yJik+PiBTdWJz
cGFjZTo6Zm9yRWFjaE1hcmtlZENlbGxJblBhcmFsbGVsKGNvbnN0IEZ1bmMmIGZ1bmMpCiB7Ci0g
ICAgY2xhc3MgVGFzayBmaW5hbCA6IHB1YmxpYyBTaGFyZWRUYXNrPHZvaWQoU2xvdFZpc2l0b3Im
KT4geworICAgIGNsYXNzIFRhc2sgZmluYWwgOiBwdWJsaWMgU2hhcmVkVGFzazx2b2lkKFZpc2l0
b3ImKT4gewogICAgIHB1YmxpYzoKICAgICAgICAgVGFzayhTdWJzcGFjZSYgc3Vic3BhY2UsIGNv
bnN0IEZ1bmMmIGZ1bmMpCiAgICAgICAgICAgICA6IG1fc3Vic3BhY2Uoc3Vic3BhY2UpCkBAIC05
Nyw3ICs5Nyw3IEBAIFJlZjxTaGFyZWRUYXNrPHZvaWQoU2xvdFZpc2l0b3ImKT4+IFN1YnMKICAg
ICAgICAgewogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICB2b2lkIHJ1bihTbG90VmlzaXRv
ciYgdmlzaXRvcikgZmluYWwKKyAgICAgICAgdm9pZCBydW4oVmlzaXRvciYgdmlzaXRvcikgZmlu
YWwKICAgICAgICAgewogICAgICAgICAgICAgd2hpbGUgKE1hcmtlZEJsb2NrOjpIYW5kbGUqIGhh
bmRsZSA9IG1fYmxvY2tTb3VyY2UtPnJ1bigpKSB7CiAgICAgICAgICAgICAgICAgaGFuZGxlLT5m
b3JFYWNoTWFya2VkQ2VsbCgKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Zlcmlm
aWVyU2xvdFZpc2l0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL1ZlcmlmaWVyU2xvdFZpc2l0b3IuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL1ZlcmlmaWVyU2xvdFZpc2l0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMzQ2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIlZlcmlmaWVyU2xvdFZpc2l0b3IuaCIKKworI2luY2x1ZGUgIkJsb2NrRGlyZWN0b3J5SW5s
aW5lcy5oIgorI2luY2x1ZGUgIkNvbnNlcnZhdGl2ZVJvb3RzLmgiCisjaW5jbHVkZSAiR0NTZWdt
ZW50ZWRBcnJheUlubGluZXMuaCIKKyNpbmNsdWRlICJIZWFwQ2VsbC5oIgorI2luY2x1ZGUgIkpT
Q0lubGluZXMuaCIKKyNpbmNsdWRlICJWTS5oIgorI2luY2x1ZGUgIlZlcmlmaWVyU2xvdFZpc2l0
b3JJbmxpbmVzLmgiCisjaW5jbHVkZSA8d3RmL1N0YWNrVHJhY2UuaD4KKworbmFtZXNwYWNlIEpT
QyB7CisKK3VzaW5nIE1hcmtlckRhdGEgPSBWZXJpZmllclNsb3RWaXNpdG9yOjpNYXJrZXJEYXRh
OworCitjb25zdGV4cHIgaW50IG1heE1hcmtpbmdTdGFja0ZyYW1lc1RvQ2FwdHVyZSA9IDEwMDsK
KworTWFya2VyRGF0YTo6TWFya2VyRGF0YShIZWFwQ2VsbCogcGFyZW50LCBzdGQ6OnVuaXF1ZV9w
dHI8U3RhY2tUcmFjZT4mJiBzdGFjaykKKyAgICA6IHBhcmVudChwYXJlbnQpCisgICAgLCBzdGFj
ayhXVEZNb3ZlKHN0YWNrKSkKK3sKK30KKworVmVyaWZpZXJTbG90VmlzaXRvcjo6TWFya2VkQmxv
Y2tEYXRhOjpNYXJrZWRCbG9ja0RhdGEoTWFya2VkQmxvY2sqIGJsb2NrKQorICAgIDogbV9ibG9j
ayhibG9jaykKK3sKK30KKwordm9pZCBWZXJpZmllclNsb3RWaXNpdG9yOjpNYXJrZWRCbG9ja0Rh
dGE6OmFkZE1hcmtlckRhdGEodW5zaWduZWQgYXRvbU51bWJlciwgTWFya2VyRGF0YSYmIG1hcmtl
cikKK3sKKyAgICBpZiAobV9tYXJrZXJzLmlzRW1wdHkoKSkKKyAgICAgICAgbV9tYXJrZXJzLmdy
b3coTWFya2VkQmxvY2s6OmF0b21zUGVyQmxvY2spOworICAgIG1fbWFya2Vyc1thdG9tTnVtYmVy
XSA9IFdURk1vdmUobWFya2VyKTsKK30KKworY29uc3QgTWFya2VyRGF0YSogVmVyaWZpZXJTbG90
VmlzaXRvcjo6TWFya2VkQmxvY2tEYXRhOjptYXJrZXJEYXRhKHVuc2lnbmVkIGF0b21OdW1iZXIp
IGNvbnN0Cit7CisgICAgYXV0byYgbWFya2VyID0gbV9tYXJrZXJzW2F0b21OdW1iZXJdOworICAg
IGlmIChtYXJrZXIuc3RhY2spCisgICAgICAgIHJldHVybiAmbWFya2VyOworICAgIHJldHVybiBu
dWxscHRyOworfQorCitWZXJpZmllclNsb3RWaXNpdG9yOjpQcmVjaXNlQWxsb2NhdGlvbkRhdGE6
OlByZWNpc2VBbGxvY2F0aW9uRGF0YShQcmVjaXNlQWxsb2NhdGlvbiogYWxsb2NhdGlvbikKKyAg
ICA6IG1fYWxsb2NhdGlvbihhbGxvY2F0aW9uKQoreworfQorCitjb25zdCBNYXJrZXJEYXRhKiBW
ZXJpZmllclNsb3RWaXNpdG9yOjpQcmVjaXNlQWxsb2NhdGlvbkRhdGE6Om1hcmtlckRhdGEoKSBj
b25zdAoreworICAgIGlmIChtX21hcmtlci5zdGFjaykKKyAgICAgICAgcmV0dXJuICZtX21hcmtl
cjsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKwordm9pZCBWZXJpZmllclNsb3RWaXNpdG9yOjpQ
cmVjaXNlQWxsb2NhdGlvbkRhdGE6OmFkZE1hcmtlckRhdGEoTWFya2VyRGF0YSYmIG1hcmtlcikK
K3sKKyAgICBtX21hcmtlciA9IFdURk1vdmUobWFya2VyKTsKK30KKworVmVyaWZpZXJTbG90Vmlz
aXRvcjo6VmVyaWZpZXJTbG90VmlzaXRvcihIZWFwJiBoZWFwKQorICAgIDogQmFzZShoZWFwLCAi
VmVyaWZpZXIiLCBtX29wYXF1ZVJvb3RTdG9yYWdlKQoreworfQorCitWZXJpZmllclNsb3RWaXNp
dG9yOjp+VmVyaWZpZXJTbG90VmlzaXRvcigpCit7CisgICAgaGVhcCgpLT5vYmplY3RTcGFjZSgp
LmZvckVhY2hCbG9jaygKKyAgICAgICAgWyZdIChNYXJrZWRCbG9jazo6SGFuZGxlKiBoYW5kbGUp
IHsKKyAgICAgICAgICAgIGhhbmRsZS0+YmxvY2soKS5zZXRWZXJpZmllck1lbW8obnVsbHB0cik7
CisgICAgICAgIH0pOworfQorCit2b2lkIFZlcmlmaWVyU2xvdFZpc2l0b3I6OmFkZFBhcmFsbGVs
Q29uc3RyYWludFRhc2soUmVmUHRyPFNoYXJlZFRhc2s8dm9pZChBYnN0cmFjdFNsb3RWaXNpdG9y
Jik+PiB0YXNrKQoreworICAgIG1fY29uc3RyYWludFRhc2tzLmFwcGVuZChXVEZNb3ZlKHRhc2sp
KTsKK30KKworTk9fUkVUVVJOX0RVRV9UT19DUkFTSCB2b2lkIFZlcmlmaWVyU2xvdFZpc2l0b3I6
OmFkZFBhcmFsbGVsQ29uc3RyYWludFRhc2soUmVmUHRyPFNoYXJlZFRhc2s8dm9pZChTbG90Vmlz
aXRvciYpPj4pCit7CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwordm9p
ZCBWZXJpZmllclNsb3RWaXNpdG9yOjpleGVjdXRlQ29uc3RyYWludFRhc2tzKCkKK3sKKyAgICB3
aGlsZSAoIW1fY29uc3RyYWludFRhc2tzLmlzRW1wdHkoKSkKKyAgICAgICAgbV9jb25zdHJhaW50
VGFza3MudGFrZUZpcnN0KCktPnJ1bigqdGhpcyk7Cit9CisKK3ZvaWQgVmVyaWZpZXJTbG90Vmlz
aXRvcjo6YXBwZW5kKGNvbnN0IENvbnNlcnZhdGl2ZVJvb3RzJiBjb25zZXJ2YXRpdmVSb290cykK
K3sKKyAgICBhdXRvIGFwcGVuZEpTQ2VsbE9yQXV4aWxpYXJ5ID0gWyZdIChIZWFwQ2VsbCogaGVh
cENlbGwpIHsKKyAgICAgICAgaWYgKCFoZWFwQ2VsbCkKKyAgICAgICAgICAgIHJldHVybjsKKwor
ICAgICAgICBpZiAodGVzdEFuZFNldE1hcmtlZChoZWFwQ2VsbCkpCisgICAgICAgICAgICByZXR1
cm47CisKKyAgICAgICAgc3dpdGNoIChoZWFwQ2VsbC0+Y2VsbEtpbmQoKSkgeworICAgICAgICBj
YXNlIEhlYXBDZWxsOjpKU0NlbGw6CisgICAgICAgIGNhc2UgSGVhcENlbGw6OkpTQ2VsbFdpdGhJ
bmRleGluZ0hlYWRlcjogeworICAgICAgICAgICAgSlNDZWxsKiBqc0NlbGwgPSBzdGF0aWNfY2Fz
dDxKU0NlbGwqPihoZWFwQ2VsbCk7CisgICAgICAgICAgICBhcHBlbmRUb01hcmtTdGFjayhqc0Nl
bGwpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBIZWFw
Q2VsbDo6QXV4aWxpYXJ5OgorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfTsK
KworICAgIEhlYXBDZWxsKiogcm9vdHMgPSBjb25zZXJ2YXRpdmVSb290cy5yb290cygpOworICAg
IHNpemVfdCBzaXplID0gY29uc2VydmF0aXZlUm9vdHMuc2l6ZSgpOworICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgc2l6ZTsgKytpKQorICAgICAgICBhcHBlbmRKU0NlbGxPckF1eGlsaWFyeShy
b290c1tpXSk7Cit9CisKK3ZvaWQgVmVyaWZpZXJTbG90VmlzaXRvcjo6YXBwZW5kVG9NYXJrU3Rh
Y2soSlNDZWxsKiBjZWxsKQoreworICAgIEFTU0VSVCghY2VsbC0+aXNaYXBwZWQoKSk7CisgICAg
bV9jb2xsZWN0b3JTdGFjay5hcHBlbmQoY2VsbCk7Cit9CisKK3ZvaWQgVmVyaWZpZXJTbG90Vmlz
aXRvcjo6YXBwZW5kVW5iYXJyaWVyZWQoSlNDZWxsKiBjZWxsKQoreworICAgIGlmICghY2VsbCkK
KyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKFVOTElLRUxZKGNlbGwtPmlzUHJlY2lzZUFsbG9j
YXRpb24oKSkpIHsKKyAgICAgICAgaWYgKExJS0VMWShpc01hcmtlZChjZWxsLT5wcmVjaXNlQWxs
b2NhdGlvbigpLCBjZWxsKSkpCisgICAgICAgICAgICByZXR1cm47CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgTWFya2VkQmxvY2smIGJsb2NrID0gY2VsbC0+bWFya2VkQmxvY2soKTsKKyAgICAgICAg
aWYgKExJS0VMWShpc01hcmtlZChibG9jaywgY2VsbCkpKQorICAgICAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIGFwcGVuZFNsb3coY2VsbCk7Cit9CisKK3ZvaWQgVmVyaWZpZXJTbG90Vmlz
aXRvcjo6YXBwZW5kSGlkZGVuVW5iYXJyaWVyZWQoSlNDZWxsKiBjZWxsKQoreworICAgIGFwcGVu
ZFVuYmFycmllcmVkKGNlbGwpOworfQorCit2b2lkIFZlcmlmaWVyU2xvdFZpc2l0b3I6OmRyYWlu
KCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChtX211dGF0b3JTdGFjay5pc0VtcHR5KCkpOworCisg
ICAgTWFya1N0YWNrQXJyYXkmIHN0YWNrID0gbV9jb2xsZWN0b3JTdGFjazsKKyAgICBpZiAoc3Rh
Y2suaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBzdGFjay5yZWZpbGwoKTsKKyAg
ICB3aGlsZSAoc3RhY2suY2FuUmVtb3ZlTGFzdCgpKQorICAgICAgICB2aXNpdENoaWxkcmVuKHN0
YWNrLnJlbW92ZUxhc3QoKSk7Cit9CisKK3ZvaWQgVmVyaWZpZXJTbG90VmlzaXRvcjo6ZHVtcE1h
cmtlckRhdGEoSGVhcENlbGwqIGNlbGwpCit7CisgICAgaWYgKGNlbGwtPmlzUHJlY2lzZUFsbG9j
YXRpb24oKSkKKyAgICAgICAgcmV0dXJuIGR1bXBNYXJrZXJEYXRhKGNlbGwtPnByZWNpc2VBbGxv
Y2F0aW9uKCksIGNlbGwpOworICAgIHJldHVybiBkdW1wTWFya2VyRGF0YShjZWxsLT5tYXJrZWRC
bG9jaygpLCBjZWxsKTsKK30KKwordm9pZCBWZXJpZmllclNsb3RWaXNpdG9yOjpkdW1wTWFya2Vy
RGF0YShQcmVjaXNlQWxsb2NhdGlvbiYgYWxsb2NhdGlvbiwgSGVhcENlbGwqIGNlbGwpCit7Cisg
ICAgYXV0byBpdGVyYXRvciA9IG1fcHJlY2lzZUFsbG9jYXRpb25NYXAuZmluZCgmYWxsb2NhdGlv
bik7CisgICAgaWYgKGl0ZXJhdG9yICE9IG1fcHJlY2lzZUFsbG9jYXRpb25NYXAuZW5kKCkpIHsK
KyAgICAgICAgZHVtcE1hcmtlckRhdGEoY2VsbCwgaXRlcmF0b3ItPnZhbHVlLT5tYXJrZXJEYXRh
KCkpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGRhdGFMb2dMbigiQ2VsbCAiLCBSYXdQ
b2ludGVyKGNlbGwpLCAiIG5vdCBmb3VuZCIpOworfQorCit2b2lkIFZlcmlmaWVyU2xvdFZpc2l0
b3I6OmR1bXBNYXJrZXJEYXRhKE1hcmtlZEJsb2NrJiBibG9jaywgSGVhcENlbGwqIGNlbGwpCit7
CisgICAgYXV0byBpdGVyYXRvciA9IG1fbWFya2VkQmxvY2tNYXAuZmluZCgmYmxvY2spOworICAg
IGlmIChpdGVyYXRvciAhPSBtX21hcmtlZEJsb2NrTWFwLmVuZCgpKSB7CisgICAgICAgIHVuc2ln
bmVkIGF0b21OdW1iZXIgPSBibG9jay5hdG9tTnVtYmVyKGNlbGwpOworICAgICAgICBkdW1wTWFy
a2VyRGF0YShjZWxsLCBpdGVyYXRvci0+dmFsdWUtPm1hcmtlckRhdGEoYXRvbU51bWJlcikpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorICAgIGRhdGFMb2dMbigiQ2VsbCAiLCBSYXdQb2ludGVy
KGNlbGwpLCAiIG5vdCBmb3VuZCIpOworfQorCit2b2lkIFZlcmlmaWVyU2xvdFZpc2l0b3I6OmR1
bXBNYXJrZXJEYXRhKEhlYXBDZWxsKiBjZWxsLCBjb25zdCBNYXJrZXJEYXRhKiBtYXJrZXIpCit7
CisgICAgaWYgKCFtYXJrZXIpIHsKKyAgICAgICAgZGF0YUxvZ0xuKCJNYXJrZXIgZGF0YSBpcyBu
b3QgYXZhaWxhYmxlIGZvciBjZWxsICIsIFJhd1BvaW50ZXIoY2VsbCkpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgZGF0YUxvZ0xuKCJDZWxsICIsIFJhd1BvaW50ZXIoY2VsbCksICIg
d2FzIHJlYWNoYWJsZSB2aWEgY2VsbCAiLCBSYXdQb2ludGVyKG1hcmtlci0+cGFyZW50KSwgIiBh
dDoiKTsKKyAgICBtYXJrZXItPnN0YWNrLT5kdW1wKFdURjo6ZGF0YUZpbGUoKSwgIiAgICAiKTsK
K30KKworYm9vbCBWZXJpZmllclNsb3RWaXNpdG9yOjppc0ZpcnN0VmlzaXQoKSBjb25zdAorewor
ICAgIC8vIEluIHRoZSByZWd1bGFyIEdDLCB0aGlzIHJldHVybiB2YWx1ZSBpcyBvbmx5IHVzZWQg
dG8gY29udHJvbCB3aGV0aGVyCisgICAgLy8gVW5saW5rZWRDb2RlQmxvY2tzIHdpbGwgYmUgYWdl
ZCAoc2VlIFVubGlua2VkQ29kZUJsb2NrOjp2aXNpdENoaWxkcmVuSW1wbCgpKS4KKyAgICAvLyBG
b3IgdGhlIHZlcmlmaWVyIEdDIHBhc3MsIHdlIHNob3VsZCBhbHdheXMgcmV0dXJuIGZhbHNlIGJl
Y2F1c2Ugd2UgZG9uJ3QKKyAgICAvLyB3YW50IHRvIGRvIHRoZSBhZ2luZyBhY3Rpb24gYWdhaW4u
CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFZlcmlmaWVyU2xvdFZpc2l0b3I6OmlzTWFy
a2VkKGNvbnN0IHZvaWQqIHJhd0NlbGwpIGNvbnN0Cit7CisgICAgSGVhcENlbGwqIGNlbGwgPSBi
aXR3aXNlX2Nhc3Q8SGVhcENlbGwqPihyYXdDZWxsKTsKKyAgICBpZiAoY2VsbC0+aXNQcmVjaXNl
QWxsb2NhdGlvbigpKQorICAgICAgICByZXR1cm4gaXNNYXJrZWQoY2VsbC0+cHJlY2lzZUFsbG9j
YXRpb24oKSwgY2VsbCk7CisgICAgcmV0dXJuIGlzTWFya2VkKGNlbGwtPm1hcmtlZEJsb2NrKCks
IGNlbGwpOworfQorCitib29sIFZlcmlmaWVyU2xvdFZpc2l0b3I6OmlzTWFya2VkKFByZWNpc2VB
bGxvY2F0aW9uJiBhbGxvY2F0aW9uLCBIZWFwQ2VsbCopIGNvbnN0Cit7CisgICAgcmV0dXJuIG1f
cHJlY2lzZUFsbG9jYXRpb25NYXAuY29udGFpbnMoJmFsbG9jYXRpb24pOworfQorCitib29sIFZl
cmlmaWVyU2xvdFZpc2l0b3I6OmlzTWFya2VkKE1hcmtlZEJsb2NrJiBibG9jaywgSGVhcENlbGwq
IGNlbGwpIGNvbnN0Cit7CisgICAgYXV0byBlbnRyeSA9IG1fbWFya2VkQmxvY2tNYXAuZmluZCgm
YmxvY2spOworICAgIGlmIChlbnRyeSA9PSBtX21hcmtlZEJsb2NrTWFwLmVuZCgpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBhdXRvJiBkYXRhID0gZW50cnktPnZhbHVlOworICAgIHVu
c2lnbmVkIGF0b21OdW1iZXIgPSBibG9jay5hdG9tTnVtYmVyKGNlbGwpOworICAgIHJldHVybiBk
YXRhLT5pc01hcmtlZChhdG9tTnVtYmVyKTsKK30KKwordm9pZCBWZXJpZmllclNsb3RWaXNpdG9y
OjptYXJrQXV4aWxpYXJ5KGNvbnN0IHZvaWQqIGJhc2UpCit7CisgICAgSGVhcENlbGwqIGNlbGwg
PSBiaXR3aXNlX2Nhc3Q8SGVhcENlbGwqPihiYXNlKTsKKworICAgIEFTU0VSVChjZWxsLT5oZWFw
KCkgPT0gaGVhcCgpKTsKKyAgICB0ZXN0QW5kU2V0TWFya2VkKGNlbGwpOworfQorCitib29sIFZl
cmlmaWVyU2xvdFZpc2l0b3I6Om11dGF0b3JJc1N0b3BwZWQoKSBjb25zdAoreworICAgIHJldHVy
biB0cnVlOworfQorCitib29sIFZlcmlmaWVyU2xvdFZpc2l0b3I6OnRlc3RBbmRTZXRNYXJrZWQo
Y29uc3Qgdm9pZCogcmF3Q2VsbCkKK3sKKyAgICBIZWFwQ2VsbCogY2VsbCA9IGJpdHdpc2VfY2Fz
dDxIZWFwQ2VsbCo+KHJhd0NlbGwpOworICAgIGlmIChjZWxsLT5pc1ByZWNpc2VBbGxvY2F0aW9u
KCkpCisgICAgICAgIHJldHVybiB0ZXN0QW5kU2V0TWFya2VkKGNlbGwtPnByZWNpc2VBbGxvY2F0
aW9uKCkpOworICAgIHJldHVybiB0ZXN0QW5kU2V0TWFya2VkKGNlbGwtPm1hcmtlZEJsb2NrKCks
IGNlbGwpOworfQorCitib29sIFZlcmlmaWVyU2xvdFZpc2l0b3I6OnRlc3RBbmRTZXRNYXJrZWQo
UHJlY2lzZUFsbG9jYXRpb24mIGFsbG9jYXRpb24pCit7CisgICAgc3RkOjp1bmlxdWVfcHRyPFBy
ZWNpc2VBbGxvY2F0aW9uRGF0YT4mIGRhdGEgPSBtX3ByZWNpc2VBbGxvY2F0aW9uTWFwLmFkZCgm
YWxsb2NhdGlvbiwgbnVsbHB0cikuaXRlcmF0b3ItPnZhbHVlOworICAgIGlmICghZGF0YSkgewor
ICAgICAgICBkYXRhID0gbWFrZVVuaXF1ZTxQcmVjaXNlQWxsb2NhdGlvbkRhdGE+KCZhbGxvY2F0
aW9uKTsKKyAgICAgICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OnZlcmJvc2VWZXJpZnlHQygpKSkK
KyAgICAgICAgICAgIGRhdGEtPmFkZE1hcmtlckRhdGEoeyBwYXJlbnRDZWxsKCksIFN0YWNrVHJh
Y2U6OmNhcHR1cmVTdGFja1RyYWNlKG1heE1hcmtpbmdTdGFja0ZyYW1lc1RvQ2FwdHVyZSwgMikg
fSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisK
K2Jvb2wgVmVyaWZpZXJTbG90VmlzaXRvcjo6dGVzdEFuZFNldE1hcmtlZChNYXJrZWRCbG9jayYg
YmxvY2ssIEhlYXBDZWxsKiBjZWxsKQoreworICAgIE1hcmtlZEJsb2NrRGF0YSogZGF0YSA9IGJs
b2NrLnZlcmlmaWVyTWVtbzxNYXJrZWRCbG9ja0RhdGEqPigpOworICAgIGlmIChVTkxJS0VMWSgh
ZGF0YSkpIHsKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPE1hcmtlZEJsb2NrRGF0YT4mIGVudHJ5
RGF0YSA9IG1fbWFya2VkQmxvY2tNYXAuYWRkKCZibG9jaywgbnVsbHB0cikuaXRlcmF0b3ItPnZh
bHVlOworICAgICAgICBSRUxFQVNFX0FTU0VSVCghZW50cnlEYXRhKTsKKyAgICAgICAgZW50cnlE
YXRhID0gbWFrZVVuaXF1ZTxNYXJrZWRCbG9ja0RhdGE+KCZibG9jayk7CisgICAgICAgIGRhdGEg
PSBlbnRyeURhdGEuZ2V0KCk7CisgICAgICAgIGJsb2NrLnNldFZlcmlmaWVyTWVtbyhkYXRhKTsK
KyAgICB9CisKKyAgICB1bnNpZ25lZCBhdG9tTnVtYmVyID0gYmxvY2suYXRvbU51bWJlcihjZWxs
KTsKKyAgICBib29sIGFscmVhZHlTZXQgPSBkYXRhLT50ZXN0QW5kU2V0TWFya2VkKGF0b21OdW1i
ZXIpOworICAgIGlmICghYWxyZWFkeVNldCAmJiBVTkxJS0VMWShPcHRpb25zOjp2ZXJib3NlVmVy
aWZ5R0MoKSkpCisgICAgICAgIGRhdGEtPmFkZE1hcmtlckRhdGEoYXRvbU51bWJlciwgeyBwYXJl
bnRDZWxsKCksIFN0YWNrVHJhY2U6OmNhcHR1cmVTdGFja1RyYWNlKG1heE1hcmtpbmdTdGFja0Zy
YW1lc1RvQ2FwdHVyZSwgMikgfSk7CisgICAgcmV0dXJuIGFscmVhZHlTZXQ7Cit9CisKK3ZvaWQg
VmVyaWZpZXJTbG90VmlzaXRvcjo6c2V0TWFya2VkQW5kQXBwZW5kVG9NYXJrU3RhY2soSlNDZWxs
KiBjZWxsKQoreworICAgIGlmIChtX3N1cHByZXNzVmVyaWZpZXIpCisgICAgICAgIHJldHVybjsK
KyAgICBpZiAodGVzdEFuZFNldE1hcmtlZChjZWxsKSkKKyAgICAgICAgcmV0dXJuOworICAgIGFw
cGVuZFRvTWFya1N0YWNrKGNlbGwpOworfQorCit2b2lkIFZlcmlmaWVyU2xvdFZpc2l0b3I6OnZp
c2l0QXNDb25zdHJhaW50KGNvbnN0IEpTQ2VsbCogY2VsbCkKK3sKKyAgICB2aXNpdENoaWxkcmVu
KGNlbGwpOworfQorCit2b2lkIFZlcmlmaWVyU2xvdFZpc2l0b3I6OnZpc2l0Q2hpbGRyZW4oY29u
c3QgSlNDZWxsKiBjZWxsKQoreworICAgIFJFTEVBU0VfQVNTRVJUKGlzTWFya2VkKGNlbGwpKTsK
KyAgICBzd2l0Y2ggKGNlbGwtPnR5cGUoKSkgeworICAgIGNhc2UgU3RyaW5nVHlwZToKKyAgICAg
ICAgSlNTdHJpbmc6OnZpc2l0Q2hpbGRyZW4oY29uc3RfY2FzdDxKU0NlbGwqPihjZWxsKSwgKnRo
aXMpOworICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAgY2FzZSBGaW5hbE9iamVjdFR5cGU6
CisgICAgICAgIEpTRmluYWxPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oY29uc3RfY2FzdDxKU0NlbGwq
PihjZWxsKSwgKnRoaXMpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgQXJyYXlUeXBlOgor
ICAgICAgICBKU0FycmF5Ojp2aXNpdENoaWxkcmVuKGNvbnN0X2Nhc3Q8SlNDZWxsKj4oY2VsbCks
ICp0aGlzKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAg
IC8vIEZJWE1FOiBUaGlzIGNvdWxkIGJlIHNvIG11Y2ggYmV0dGVyLgorICAgICAgICAvLyBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYyNDYyCisgICAgICAgIGNlbGwt
Pm1ldGhvZFRhYmxlKHZtKCkpLT52aXNpdENoaWxkcmVuKGNvbnN0X2Nhc3Q8SlNDZWxsKj4oY2Vs
bCksICp0aGlzKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCit9IC8vIG5hbWVzcGFjZSBK
U0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1ZlcmlmaWVyU2xvdFZpc2l0b3Iu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9WZXJpZmllclNsb3RW
aXNpdG9yLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVmVy
aWZpZXJTbG90VmlzaXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTcyIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisK
KyNpbmNsdWRlICJBYnN0cmFjdFNsb3RWaXNpdG9yLmgiCisjaW5jbHVkZSAiSlNDSlNWYWx1ZS5o
IgorI2luY2x1ZGUgIk1hcmtlZEJsb2NrLmgiCisjaW5jbHVkZSAiVmlzaXRSYWNlS2V5LmgiCisj
aW5jbHVkZSAiV2Vhay5oIgorI2luY2x1ZGUgPG1lbW9yeT4KKyNpbmNsdWRlIDx3dGYvQml0bWFw
Lmg+CisjaW5jbHVkZSA8d3RmL0RlcXVlLmg+CisjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4K
KyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNs
dWRlIDx3dGYvU2hhcmVkVGFzay5oPgorCituYW1lc3BhY2UgV1RGIHsKKworY2xhc3MgU3RhY2tU
cmFjZTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBD
b25zZXJ2YXRpdmVSb290czsKK2NsYXNzIEhlYXA7CitjbGFzcyBIZWFwQ2VsbDsKK2NsYXNzIFBy
ZWNpc2VBbGxvY2F0aW9uOworCit1c2luZyBXVEY6OlN0YWNrVHJhY2U7CisKK2NsYXNzIFZlcmlm
aWVyU2xvdFZpc2l0b3IgOiBwdWJsaWMgQWJzdHJhY3RTbG90VmlzaXRvciB7CisgICAgV1RGX01B
S0VfTk9OQ09QWUFCTEUoVmVyaWZpZXJTbG90VmlzaXRvcik7CisgICAgV1RGX01BS0VfRkFTVF9B
TExPQ0FURUQ7CisgICAgdXNpbmcgQmFzZSA9IEFic3RyYWN0U2xvdFZpc2l0b3I7CitwdWJsaWM6
CisgICAgc3RydWN0IE1hcmtlckRhdGEgeworICAgICAgICBNYXJrZXJEYXRhKCkgPSBkZWZhdWx0
OworICAgICAgICBNYXJrZXJEYXRhKE1hcmtlckRhdGEmJikgPSBkZWZhdWx0OworICAgICAgICBN
YXJrZXJEYXRhKEhlYXBDZWxsKiwgc3RkOjp1bmlxdWVfcHRyPFN0YWNrVHJhY2U+JiYpOworICAg
ICAgICBNYXJrZXJEYXRhJiBvcGVyYXRvcj0oTWFya2VyRGF0YSYmKSA9IGRlZmF1bHQ7CisKKyAg
ICAgICAgSGVhcENlbGwqIHBhcmVudCB7IG51bGxwdHIgfTsKKyAgICAgICAgc3RkOjp1bmlxdWVf
cHRyPFN0YWNrVHJhY2U+IHN0YWNrOworICAgIH07CisKKyAgICBWZXJpZmllclNsb3RWaXNpdG9y
KEhlYXAmKTsKKyAgICB+VmVyaWZpZXJTbG90VmlzaXRvcigpOworCisgICAgdm9pZCBhcHBlbmQo
Y29uc3QgQ29uc2VydmF0aXZlUm9vdHMmKSBmaW5hbDsKKyAgICB2b2lkIGFwcGVuZFVuYmFycmll
cmVkKEpTQ2VsbCopIGZpbmFsOworICAgIHZvaWQgYXBwZW5kSGlkZGVuVW5iYXJyaWVyZWQoSlND
ZWxsKikgZmluYWw7CisKKyAgICBib29sIGlzRmlyc3RWaXNpdCgpIGNvbnN0IGZpbmFsOworICAg
IGJvb2wgaXNNYXJrZWQoY29uc3Qgdm9pZCopIGNvbnN0IGZpbmFsOworICAgIGJvb2wgaXNNYXJr
ZWQoTWFya2VkQmxvY2smLCBIZWFwQ2VsbCopIGNvbnN0IGZpbmFsOworICAgIGJvb2wgaXNNYXJr
ZWQoUHJlY2lzZUFsbG9jYXRpb24mLCBIZWFwQ2VsbCopIGNvbnN0IGZpbmFsOworCisgICAgdm9p
ZCBtYXJrQXV4aWxpYXJ5KGNvbnN0IHZvaWQqKSBmaW5hbDsKKworICAgIHZvaWQgcmVwb3J0RXh0
cmFNZW1vcnlWaXNpdGVkKHNpemVfdCkgZmluYWwgeyB9CisjaWYgRU5BQkxFKFJFU09VUkNFX1VT
QUdFKQorICAgIHZvaWQgcmVwb3J0RXh0ZXJuYWxNZW1vcnlWaXNpdGVkKHNpemVfdCkgZmluYWwg
eyB9CisjZW5kaWYKKworICAgIGJvb2wgbXV0YXRvcklzU3RvcHBlZCgpIGNvbnN0IGZpbmFsOwor
CisgICAgdm9pZCBkaWRSYWNlKGNvbnN0IFZpc2l0UmFjZUtleSYpIGZpbmFsIHsgfQorICAgIHZv
aWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0IGZpbmFsIHsgfQorCisgICAgdm9pZCB2aXNpdEFz
Q29uc3RyYWludChjb25zdCBKU0NlbGwqKSBmaW5hbDsKKworICAgIHZvaWQgZHJhaW4oKTsKKwor
ICAgIHZvaWQgYWRkUGFyYWxsZWxDb25zdHJhaW50VGFzayhSZWZQdHI8U2hhcmVkVGFzazx2b2lk
KEFic3RyYWN0U2xvdFZpc2l0b3ImKT4+KSBmaW5hbDsKKyAgICB2b2lkIGFkZFBhcmFsbGVsQ29u
c3RyYWludFRhc2soUmVmUHRyPFNoYXJlZFRhc2s8dm9pZChTbG90VmlzaXRvciYpPj4pIGZpbmFs
OworICAgIHZvaWQgZXhlY3V0ZUNvbnN0cmFpbnRUYXNrcygpOworCisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgRnVuY3Rvcj4gdm9pZCBmb3JFYWNoTGl2ZUNlbGwoY29uc3QgRnVuY3RvciYpOworICAg
IHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaExpdmVQcmVjaXNlQWxsb2Nh
dGlvbihjb25zdCBGdW5jdG9yJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4gdm9p
ZCBmb3JFYWNoTGl2ZU1hcmtlZEJsb2NrQ2VsbChjb25zdCBGdW5jdG9yJik7CisKKyAgICBKU19F
WFBPUlRfUFJJVkFURSB2b2lkIGR1bXBNYXJrZXJEYXRhKEhlYXBDZWxsKik7CisKK3ByaXZhdGU6
CisgICAgY2xhc3MgTWFya2VkQmxvY2tEYXRhIHsKKyAgICAgICAgV1RGX01BS0VfRkFTVF9BTExP
Q0FURUQ7CisgICAgICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKE1hcmtlZEJsb2NrRGF0YSk7Cisg
ICAgcHVibGljOgorICAgICAgICB1c2luZyBBdG9tc0JpdG1hcCA9IEJpdG1hcDxNYXJrZWRCbG9j
azo6YXRvbXNQZXJCbG9jaz47CisKKyAgICAgICAgTWFya2VkQmxvY2tEYXRhKE1hcmtlZEJsb2Nr
Kik7CisKKyAgICAgICAgTWFya2VkQmxvY2sqIGJsb2NrKCkgY29uc3QgeyByZXR1cm4gbV9ibG9j
azsgfQorICAgICAgICBjb25zdCBBdG9tc0JpdG1hcCYgYXRvbXMoKSBjb25zdCB7IHJldHVybiBt
X2F0b21zOyB9CisKKyAgICAgICAgYm9vbCBpc01hcmtlZCh1bnNpZ25lZCBhdG9tTnVtYmVyKSB7
IHJldHVybiBtX2F0b21zLmdldChhdG9tTnVtYmVyKTsgfQorICAgICAgICBib29sIHRlc3RBbmRT
ZXRNYXJrZWQodW5zaWduZWQgYXRvbU51bWJlcikgeyByZXR1cm4gbV9hdG9tcy50ZXN0QW5kU2V0
KGF0b21OdW1iZXIpOyB9CisKKyAgICAgICAgdm9pZCBhZGRNYXJrZXJEYXRhKHVuc2lnbmVkIGF0
b21OdW1iZXIsIE1hcmtlckRhdGEmJik7CisgICAgICAgIGNvbnN0IE1hcmtlckRhdGEqIG1hcmtl
ckRhdGEodW5zaWduZWQgYXRvbU51bWJlcikgY29uc3Q7CisKKyAgICBwcml2YXRlOgorICAgICAg
ICBNYXJrZWRCbG9jayogbV9ibG9jayB7IG51bGxwdHIgfTsKKyAgICAgICAgQXRvbXNCaXRtYXAg
bV9hdG9tczsKKyAgICAgICAgVmVjdG9yPE1hcmtlckRhdGE+IG1fbWFya2VyczsKKyAgICB9Owor
CisgICAgY2xhc3MgUHJlY2lzZUFsbG9jYXRpb25EYXRhIHsKKyAgICAgICAgV1RGX01BS0VfRkFT
VF9BTExPQ0FURUQ7CisgICAgICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFByZWNpc2VBbGxvY2F0
aW9uRGF0YSk7CisgICAgcHVibGljOgorICAgICAgICBQcmVjaXNlQWxsb2NhdGlvbkRhdGEoUHJl
Y2lzZUFsbG9jYXRpb24qKTsKKyAgICAgICAgUHJlY2lzZUFsbG9jYXRpb24qIGFsbG9jYXRpb24o
KSBjb25zdCB7IHJldHVybiBtX2FsbG9jYXRpb247IH0KKworICAgICAgICB2b2lkIGFkZE1hcmtl
ckRhdGEoTWFya2VyRGF0YSYmKTsKKyAgICAgICAgY29uc3QgTWFya2VyRGF0YSogbWFya2VyRGF0
YSgpIGNvbnN0OworCisgICAgcHJpdmF0ZToKKyAgICAgICAgUHJlY2lzZUFsbG9jYXRpb24qIG1f
YWxsb2NhdGlvbiB7IG51bGxwdHIgfTsKKyAgICAgICAgTWFya2VyRGF0YSBtX21hcmtlcjsKKyAg
ICB9OworCisgICAgdXNpbmcgTWFya2VkQmxvY2tNYXAgPSBIYXNoTWFwPE1hcmtlZEJsb2NrKiwg
c3RkOjp1bmlxdWVfcHRyPE1hcmtlZEJsb2NrRGF0YT4+OworICAgIHVzaW5nIFByZWNpc2VBbGxv
Y2F0aW9uTWFwID0gSGFzaE1hcDxQcmVjaXNlQWxsb2NhdGlvbiosIHN0ZDo6dW5pcXVlX3B0cjxQ
cmVjaXNlQWxsb2NhdGlvbkRhdGE+PjsKKworICAgIHZvaWQgYXBwZW5kVG9NYXJrU3RhY2soSlND
ZWxsKik7CisgICAgdm9pZCBhcHBlbmRTbG93KEpTQ2VsbCogY2VsbCkgeyBzZXRNYXJrZWRBbmRB
cHBlbmRUb01hcmtTdGFjayhjZWxsKTsgfQorCisgICAgYm9vbCB0ZXN0QW5kU2V0TWFya2VkKGNv
bnN0IHZvaWQqIHJhd0NlbGwpOworICAgIGJvb2wgdGVzdEFuZFNldE1hcmtlZChQcmVjaXNlQWxs
b2NhdGlvbiYpOworICAgIGJvb2wgdGVzdEFuZFNldE1hcmtlZChNYXJrZWRCbG9jayYsIEhlYXBD
ZWxsKik7CisKKyAgICB2b2lkIHNldE1hcmtlZEFuZEFwcGVuZFRvTWFya1N0YWNrKEpTQ2VsbCop
OworCisgICAgdm9pZCB2aXNpdENoaWxkcmVuKGNvbnN0IEpTQ2VsbCopOworCisgICAgdm9pZCBk
dW1wTWFya2VyRGF0YShQcmVjaXNlQWxsb2NhdGlvbiYsIEhlYXBDZWxsKik7CisgICAgdm9pZCBk
dW1wTWFya2VyRGF0YShNYXJrZWRCbG9jayYsIEhlYXBDZWxsKik7CisgICAgdm9pZCBkdW1wTWFy
a2VyRGF0YShIZWFwQ2VsbCosIGNvbnN0IE1hcmtlckRhdGEqKTsKKworICAgIFByZWNpc2VBbGxv
Y2F0aW9uTWFwIG1fcHJlY2lzZUFsbG9jYXRpb25NYXA7CisgICAgTWFya2VkQmxvY2tNYXAgbV9t
YXJrZWRCbG9ja01hcDsKKyAgICBDb25jdXJyZW50UHRySGFzaFNldCBtX29wYXF1ZVJvb3RTdG9y
YWdlOworICAgIERlcXVlPFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoQWJzdHJhY3RTbG90VmlzaXRv
ciYpPj4sIDMyPiBtX2NvbnN0cmFpbnRUYXNrczsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVmVyaWZpZXJTbG90VmlzaXRvcklubGlu
ZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9WZXJpZmllclNs
b3RWaXNpdG9ySW5saW5lcy5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL1ZlcmlmaWVyU2xvdFZpc2l0b3JJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw2MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQWJzdHJhY3RTbG90VmlzaXRvcklubGluZXMuaCIK
KyNpbmNsdWRlICJWZXJpZmllclNsb3RWaXNpdG9yLmgiCisKK25hbWVzcGFjZSBKU0MgeworCit0
ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgordm9pZCBWZXJpZmllclNsb3RWaXNpdG9yOjpmb3JF
YWNoTGl2ZUNlbGwoY29uc3QgRnVuY3RvciYgZnVuY3RvcikKK3sKKyAgICBmb3JFYWNoTGl2ZVBy
ZWNpc2VBbGxvY2F0aW9uKGZ1bmN0b3IpOworICAgIGZvckVhY2hMaXZlTWFya2VkQmxvY2tDZWxs
KGZ1bmN0b3IpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgordm9pZCBWZXJpZmll
clNsb3RWaXNpdG9yOjpmb3JFYWNoTGl2ZVByZWNpc2VBbGxvY2F0aW9uKGNvbnN0IEZ1bmN0b3Im
IGZ1bmMpCit7CisgICAgZm9yIChhdXRvJiBlbnRyeSA6IG1fcHJlY2lzZUFsbG9jYXRpb25NYXAp
IHsKKyAgICAgICAgUHJlY2lzZUFsbG9jYXRpb24qIGFsbG9jYXRpb24gPSBlbnRyeS52YWx1ZS0+
YWxsb2NhdGlvbigpOworICAgICAgICBmdW5jKGFsbG9jYXRpb24tPmNlbGwoKSk7CisgICAgfQor
fQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgordm9pZCBWZXJpZmllclNsb3RWaXNpdG9y
Ojpmb3JFYWNoTGl2ZU1hcmtlZEJsb2NrQ2VsbChjb25zdCBGdW5jdG9yJiBmdW5jKQoreworICAg
IGZvciAoYXV0byYgZW50cnkgOiBtX21hcmtlZEJsb2NrTWFwKSB7CisgICAgICAgIGF1dG8mIGRh
dGEgPSBlbnRyeS52YWx1ZTsKKyAgICAgICAgTWFya2VkQmxvY2sqIGJsb2NrID0gZGF0YS0+Ymxv
Y2soKTsKKyAgICAgICAgY29uc3QgTWFya2VkQmxvY2tEYXRhOjpBdG9tc0JpdG1hcCYgYXRvbXMg
PSAgZGF0YS0+YXRvbXMoKTsKKyAgICAgICAgZm9yIChhdXRvIGF0b21OdW1iZXIgOiBhdG9tcykK
KyAgICAgICAgICAgIGZ1bmMoYml0d2lzZV9jYXN0PEhlYXBDZWxsKj4oYmxvY2stPmhhbmRsZSgp
LmF0b21BdChhdG9tTnVtYmVyKSkpOworICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9WaXNpdENvdW50ZXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9WaXNpdENvdW50ZXIuaAkocmV2aXNpb24g
MjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVmlzaXRDb3VudGVyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMjUsNyArMjUsNyBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgIlNs
b3RWaXNpdG9yLmgiCisjaW5jbHVkZSAiQWJzdHJhY3RTbG90VmlzaXRvci5oIgogCiBuYW1lc3Bh
Y2UgSlNDIHsKIApAQCAtMzMsMTMgKzMzLDEzIEBAIGNsYXNzIFZpc2l0Q291bnRlciB7CiBwdWJs
aWM6CiAgICAgVmlzaXRDb3VudGVyKCkgeyB9CiAgICAgCi0gICAgVmlzaXRDb3VudGVyKFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQorICAgIFZpc2l0Q291bnRlcihBYnN0cmFjdFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQogICAgICAgICA6IG1fdmlzaXRvcigmdmlzaXRvcikKICAgICAgICAgLCBtX2luaXRp
YWxWaXNpdENvdW50KHZpc2l0b3IudmlzaXRDb3VudCgpKQogICAgIHsKICAgICB9CiAgICAgCi0g
ICAgU2xvdFZpc2l0b3ImIHZpc2l0b3IoKSBjb25zdCB7IHJldHVybiAqbV92aXNpdG9yOyB9Cisg
ICAgQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcigpIGNvbnN0IHsgcmV0dXJuICptX3Zpc2l0
b3I7IH0KICAgICAKICAgICBzaXplX3QgdmlzaXRDb3VudCgpIGNvbnN0CiAgICAgewpAQCAtNDcs
NyArNDcsNyBAQCBwdWJsaWM6CiAgICAgfQogICAgIAogcHJpdmF0ZToKLSAgICBTbG90VmlzaXRv
ciogbV92aXNpdG9yIHsgbnVsbHB0ciB9OworICAgIEFic3RyYWN0U2xvdFZpc2l0b3IqIG1fdmlz
aXRvciB7IG51bGxwdHIgfTsKICAgICBzaXplX3QgbV9pbml0aWFsVmlzaXRDb3VudCB7IDAgfTsK
IH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtCbG9jay5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha0Jsb2NrLmNwcAkocmV2
aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha0Jsb2NrLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTItMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTItMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTk4LDEyICs5OCwxMSBAQCB2b2lkIFdlYWtCbG9jazo6c3dl
ZXAoKQogICAgIEFTU0VSVCghbV9zd2VlcFJlc3VsdC5pc051bGwoKSk7CiB9CiAKLXRlbXBsYXRl
PHR5cGVuYW1lIENvbnRhaW5lclR5cGU+Ci12b2lkIFdlYWtCbG9jazo6c3BlY2lhbGl6ZWRWaXNp
dChDb250YWluZXJUeXBlJiBjb250YWluZXIsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxh
dGU8dHlwZW5hbWUgQ29udGFpbmVyVHlwZSwgdHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgV2Vha0Js
b2NrOjpzcGVjaWFsaXplZFZpc2l0KENvbnRhaW5lclR5cGUmIGNvbnRhaW5lciwgVmlzaXRvciYg
dmlzaXRvcikKIHsKLSAgICBIZWFwVmVyc2lvbiBtYXJraW5nVmVyc2lvbiA9IHZpc2l0b3IubWFy
a2luZ1ZlcnNpb24oKTsKLQogICAgIHNpemVfdCBjb3VudCA9IHdlYWtJbXBsQ291bnQoKTsKKyAg
ICBIZWFwQW5hbHl6ZXIqIGhlYXBBbmFseXplciA9IHZpc2l0b3Iudm0oKS5hY3RpdmVIZWFwQW5h
bHl6ZXIoKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKICAgICAg
ICAgV2Vha0ltcGwqIHdlYWtJbXBsID0gJndlYWtJbXBscygpW2ldOwogICAgICAgICBpZiAod2Vh
a0ltcGwtPnN0YXRlKCkgIT0gV2Vha0ltcGw6OkxpdmUpCkBAIC0xMTQsMTIgKzExMywxMiBAQCB2
b2lkIFdlYWtCbG9jazo6c3BlY2lhbGl6ZWRWaXNpdChDb250YWluCiAgICAgICAgICAgICBjb250
aW51ZTsKIAogICAgICAgICBKU1ZhbHVlIGpzVmFsdWUgPSB3ZWFrSW1wbC0+anNWYWx1ZSgpOwot
ICAgICAgICBpZiAoY29udGFpbmVyLmlzTWFya2VkKG1hcmtpbmdWZXJzaW9uLCBqc1ZhbHVlLmFz
Q2VsbCgpKSkKKyAgICAgICAgaWYgKHZpc2l0b3IuaXNNYXJrZWQoY29udGFpbmVyLCBqc1ZhbHVl
LmFzQ2VsbCgpKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAKICAgICAgICAgY29u
c3QgY2hhciogcmVhc29uID0gIiI7CiAgICAgICAgIGNvbnN0IGNoYXIqKiByZWFzb25QdHIgPSBu
dWxscHRyOwotICAgICAgICBpZiAoVU5MSUtFTFkodmlzaXRvci5pc0FuYWx5emluZ0hlYXAoKSkp
CisgICAgICAgIGlmIChVTkxJS0VMWShoZWFwQW5hbHl6ZXIpKQogICAgICAgICAgICAgcmVhc29u
UHRyID0gJnJlYXNvbjsKIAogICAgICAgICBpZiAoIXdlYWtIYW5kbGVPd25lci0+aXNSZWFjaGFi
bGVGcm9tT3BhcXVlUm9vdHMoSGFuZGxlPFVua25vd24+Ojp3cmFwU2xvdCgmY29uc3RfY2FzdDxK
U1ZhbHVlJj4oanNWYWx1ZSkpLCB3ZWFrSW1wbC0+Y29udGV4dCgpLCB2aXNpdG9yLCByZWFzb25Q
dHIpKQpAQCAtMTI3LDE0ICsxMjYsMTUgQEAgdm9pZCBXZWFrQmxvY2s6OnNwZWNpYWxpemVkVmlz
aXQoQ29udGFpbgogCiAgICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQoanNWYWx1ZSk7
CiAKLSAgICAgICAgaWYgKFVOTElLRUxZKHZpc2l0b3IuaXNBbmFseXppbmdIZWFwKCkpKSB7Cisg
ICAgICAgIGlmIChVTkxJS0VMWShoZWFwQW5hbHl6ZXIpKSB7CiAgICAgICAgICAgICBpZiAoanNW
YWx1ZS5pc0NlbGwoKSkKLSAgICAgICAgICAgICAgICB2aXNpdG9yLmhlYXBBbmFseXplcigpLT5z
ZXRPcGFxdWVSb290UmVhY2hhYmlsaXR5UmVhc29uRm9yQ2VsbChqc1ZhbHVlLmFzQ2VsbCgpLCAq
cmVhc29uUHRyKTsKKyAgICAgICAgICAgICAgICBoZWFwQW5hbHl6ZXItPnNldE9wYXF1ZVJvb3RS
ZWFjaGFiaWxpdHlSZWFzb25Gb3JDZWxsKGpzVmFsdWUuYXNDZWxsKCksICpyZWFzb25QdHIpOwog
ICAgICAgICB9CiAgICAgfQogfQogCi12b2lkIFdlYWtCbG9jazo6dmlzaXQoU2xvdFZpc2l0b3Im
IHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgorQUxXQVlTX0lOTElORSB2b2lk
IFdlYWtCbG9jazo6dmlzaXRJbXBsKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgLy8gSWYgYSBi
bG9jayBpcyBjb21wbGV0ZWx5IGVtcHR5LCBhIHZpc2l0IHdvbid0IGhhdmUgYW55IGVmZmVjdC4K
ICAgICBpZiAoaXNFbXB0eSgpKQpAQCAtMTQ5LDYgKzE0OSw5IEBAIHZvaWQgV2Vha0Jsb2NrOjp2
aXNpdChTbG90VmlzaXRvciYgdmlzaXQKICAgICAgICAgc3BlY2lhbGl6ZWRWaXNpdChtX2NvbnRh
aW5lci5tYXJrZWRCbG9jaygpLCB2aXNpdG9yKTsKIH0KIAordm9pZCBXZWFrQmxvY2s6OnZpc2l0
KEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsgdmlzaXRJbXBsKHZpc2l0b3IpOyB9Cit2
b2lkIFdlYWtCbG9jazo6dmlzaXQoU2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsgdmlzaXRJbXBsKHZp
c2l0b3IpOyB9CisKIHZvaWQgV2Vha0Jsb2NrOjpyZWFwKCkKIHsKICAgICAvLyBJZiBhIGJsb2Nr
IGlzIGNvbXBsZXRlbHkgZW1wdHksIGEgcmVhcGluZyB3b24ndCBoYXZlIGFueSBlZmZlY3QuCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrQmxvY2suaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrQmxvY2suaAkocmV2aXNpb24gMjcyODMw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha0Jsb2NrLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTkgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0zMiw2ICszMiw3IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCitjbGFzcyBBYnN0cmFj
dFNsb3RWaXNpdG9yOwogY2xhc3MgSGVhcDsKIGNsYXNzIFNsb3RWaXNpdG9yOwogCkBAIC02NSw3
ICs2Niw4IEBAIHB1YmxpYzoKICAgICB2b2lkIHN3ZWVwKCk7CiAgICAgU3dlZXBSZXN1bHQgdGFr
ZVN3ZWVwUmVzdWx0KCk7CiAKLSAgICB2b2lkIHZpc2l0KFNsb3RWaXNpdG9yJik7CisgICAgSlNf
RVhQT1JUX1BSSVZBVEUgdm9pZCB2aXNpdChBYnN0cmFjdFNsb3RWaXNpdG9yJik7CisgICAgSlNf
RVhQT1JUX1BSSVZBVEUgdm9pZCB2aXNpdChTbG90VmlzaXRvciYpOwogCiAgICAgdm9pZCByZWFw
KCk7CiAKQEAgLTczLDEwICs3NSwxMiBAQCBwdWJsaWM6CiAgICAgdm9pZCBkaXNjb25uZWN0Q29u
dGFpbmVyKCkgeyBtX2NvbnRhaW5lciA9IENlbGxDb250YWluZXIoKTsgfQogCiBwcml2YXRlOgor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgdmlzaXRJbXBsKFZpc2l0b3ImKTsK
KwogICAgIHN0YXRpYyBGcmVlQ2VsbCogYXNGcmVlQ2VsbChXZWFrSW1wbCopOwogICAgIAotICAg
IHRlbXBsYXRlPHR5cGVuYW1lIENvbnRhaW5lclR5cGU+Ci0gICAgdm9pZCBzcGVjaWFsaXplZFZp
c2l0KENvbnRhaW5lclR5cGUmLCBTbG90VmlzaXRvciYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1l
IENvbnRhaW5lclR5cGUsIHR5cGVuYW1lIFZpc2l0b3I+CisgICAgdm9pZCBzcGVjaWFsaXplZFZp
c2l0KENvbnRhaW5lclR5cGUmLCBWaXNpdG9yJik7CiAKICAgICBleHBsaWNpdCBXZWFrQmxvY2so
Q2VsbENvbnRhaW5lcik7CiAgICAgdm9pZCBmaW5hbGl6ZShXZWFrSW1wbCopOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha0hhbmRsZU93bmVyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrSGFuZGxlT3duZXIuY3BwCShyZXZpc2lv
biAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrSGFuZGxlT3duZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTItMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTM1LDcgKzM1LDcgQEAgV2Vha0hhbmRsZU93bmVyOjp+V2Vha0hh
bmRsZU93bmVyKCkKIHsKIH0KIAotYm9vbCBXZWFrSGFuZGxlT3duZXI6OmlzUmVhY2hhYmxlRnJv
bU9wYXF1ZVJvb3RzKEhhbmRsZTxVbmtub3duPiwgdm9pZCosIFNsb3RWaXNpdG9yJiwgY29uc3Qg
Y2hhcioqKQorYm9vbCBXZWFrSGFuZGxlT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3Rz
KEhhbmRsZTxVbmtub3duPiwgdm9pZCosIEFic3RyYWN0U2xvdFZpc2l0b3ImLCBjb25zdCBjaGFy
KiopCiB7CiAgICAgcmV0dXJuIGZhbHNlOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvV2Vha0hhbmRsZU93bmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvV2Vha0hhbmRsZU93bmVyLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtIYW5kbGVPd25lci5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI5LDEz
ICsyOSwxMyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotY2xhc3MgU2xvdFZpc2l0b3I7CitjbGFz
cyBBYnN0cmFjdFNsb3RWaXNpdG9yOwogCiBjbGFzcyBKU19FWFBPUlRfUFJJVkFURSBXZWFrSGFu
ZGxlT3duZXIgewogcHVibGljOgogICAgIHZpcnR1YWwgfldlYWtIYW5kbGVPd25lcigpOwogICAg
IC8vIHJlYXNvbiB3aWxsIG9ubHkgYmUgbm9uLW51bGwgd2hlbiBnZW5lcmF0aW5nIGEgZGVidWcg
R0MgaGVhcCBzbmFwc2hvdC4KLSAgICB2aXJ0dWFsIGJvb2wgaXNSZWFjaGFibGVGcm9tT3BhcXVl
Um9vdHMoSGFuZGxlPFVua25vd24+LCB2b2lkKiBjb250ZXh0LCBTbG90VmlzaXRvciYsIGNoYXIg
Y29uc3QqKiByZWFzb24gPSBudWxscHRyKTsKKyAgICB2aXJ0dWFsIGJvb2wgaXNSZWFjaGFibGVG
cm9tT3BhcXVlUm9vdHMoSGFuZGxlPFVua25vd24+LCB2b2lkKiBjb250ZXh0LCBBYnN0cmFjdFNs
b3RWaXNpdG9yJiwgY2hhciBjb25zdCoqIHJlYXNvbiA9IG51bGxwdHIpOwogICAgIHZpcnR1YWwg
dm9pZCBmaW5hbGl6ZShIYW5kbGU8VW5rbm93bj4sIHZvaWQqIGNvbnRleHQpOwogfTsKIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha1NldC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha1NldC5jcHAJKHJldmlzaW9uIDI3MjgzMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtTZXQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMjMsNCArMTIzLDcgQEAgdm9pZCBXZWFrU2V0OjpyZW1vdmVBbGxvY2F0b3IoV2Vha0Js
b2NrKgogICAgIFdlYWtCbG9jazo6ZGVzdHJveSgqaGVhcCgpLCBibG9jayk7CiB9CiAKK3RlbXBs
YXRlIHZvaWQgV2Vha1NldDo6dmlzaXQoQWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUg
dm9pZCBXZWFrU2V0Ojp2aXNpdChTbG90VmlzaXRvciYpOworCiB9IC8vIG5hbWVzcGFjZSBKU0MK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtTZXQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrU2V0LmgJKHJldmlzaW9uIDI3MjgzMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtTZXQuaAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxOSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTUxLDcgKzUxLDcgQEAgcHVibGljOgogICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0OwogICAg
IGJvb2wgaXNUcml2aWFsbHlEZXN0cnVjdGlibGUoKSBjb25zdDsKIAotICAgIHZvaWQgdmlzaXQo
U2xvdFZpc2l0b3ImKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIHZpc2l0
KFZpc2l0b3ImKTsKIAogICAgIHZvaWQgcmVhcCgpOwogICAgIHZvaWQgc3dlZXAoKTsKQEAgLTEx
NCw3ICsxMTQsOCBAQCBpbmxpbmUgdm9pZCBXZWFrU2V0OjpsYXN0Q2hhbmNlVG9GaW5hbGl6CiAg
ICAgICAgIGJsb2NrLT5sYXN0Q2hhbmNlVG9GaW5hbGl6ZSgpOwogfQogCi1pbmxpbmUgdm9pZCBX
ZWFrU2V0Ojp2aXNpdChTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZp
c2l0b3I+CitpbmxpbmUgdm9pZCBXZWFrU2V0Ojp2aXNpdChWaXNpdG9yJiB2aXNpdG9yKQogewog
ICAgIGZvciAoV2Vha0Jsb2NrKiBibG9jayA9IG1fYmxvY2tzLmhlYWQoKTsgYmxvY2s7IGJsb2Nr
ID0gYmxvY2stPm5leHQoKSkKICAgICAgICAgYmxvY2stPnZpc2l0KHZpc2l0b3IpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1NoYWRvd0NoaWNrZW4uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TaGFkb3dDaGlja2Vu
LmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJl
dGVyL1NoYWRvd0NoaWNrZW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDQwLDcgKzQ0MCw3IEBA
IHZvaWQgU2hhZG93Q2hpY2tlbjo6dXBkYXRlKFZNJiB2bSwgQ2FsbEYKICAgICAgICAgZGF0YUxv
ZygiICAgIEFmdGVyIGNsZWFuLXVwOiAiLCAqdGhpcywgIlxuIik7CiB9CiAKLXZvaWQgU2hhZG93
Q2hpY2tlbjo6dmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgU2hhZG93
Q2hpY2tlbjo6dmlzaXRDaGlsZHJlbihBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewog
ICAgIGZvciAodW5zaWduZWQgaSA9IG1fbG9nQ3Vyc29yIC0gbV9sb2c7IGktLTspIHsKICAgICAg
ICAgSlNPYmplY3QqIGNhbGxlZSA9IG1fbG9nW2ldLmNhbGxlZTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnRlcnByZXRlci9TaGFkb3dDaGlja2VuLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1NoYWRvd0NoaWNrZW4uaAkocmV2aXNpb24g
MjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1NoYWRvd0NoaWNr
ZW4uaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC0zNSwxMyArMzUsMTMgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAK
K2NsYXNzIEFic3RyYWN0U2xvdFZpc2l0b3I7CiBjbGFzcyBDYWxsRnJhbWU7CiBjbGFzcyBDb2Rl
QmxvY2s7CiBjbGFzcyBKU0FycmF5OwogY2xhc3MgSlNPYmplY3Q7CiBjbGFzcyBKU1Njb3BlOwog
Y2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwotY2xhc3MgU2xvdFZpc2l0b3I7CiBjbGFzcyBW
TTsKIAogLy8gU2hhZG93Q2hpY2tlbiBpcyBhIGxvZyB0aGF0IGNhbiBiZSB1c2VkIHRvIHByb2R1
Y2UgYSBzaGFkb3cgc3RhY2sgb2YgQ0hJQ0tFTi1zdHlsZSBzdGFjayBmcmFtZXMuCkBAIC0xOTYs
NyArMTk2LDcgQEAgcHVibGljOgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CiAgICAg
dm9pZCBpdGVyYXRlKFZNJiwgQ2FsbEZyYW1lKiwgY29uc3QgRnVuY3RvciYpOwogICAgIAotICAg
IHZvaWQgdmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYpOworICAgIHZvaWQgdmlzaXRDaGlsZHJl
bihBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAgICAgdm9pZCByZXNldCgpOwogICAgIAogICAgIC8v
IEpJVCBzdXBwb3J0LgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9HQ0F3YXJlSklU
U3R1YlJvdXRpbmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
R0NBd2FyZUpJVFN0dWJSb3V0aW5lLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9HQ0F3YXJlSklUU3R1YlJvdXRpbmUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE4IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDIxIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtNzMsMTAgKzczLDYgQEAgdm9pZCBHQ0F3YXJlSklUU3R1YlJvdXRpbmU6OmRlbGV0ZUZy
b21HQwogICAgIGRlbGV0ZSB0aGlzOwogfQogCi12b2lkIEdDQXdhcmVKSVRTdHViUm91dGluZTo6
bWFya1JlcXVpcmVkT2JqZWN0c0ludGVybmFsKFNsb3RWaXNpdG9yJikKLXsKLX0KLQogTWFya2lu
Z0dDQXdhcmVKSVRTdHViUm91dGluZTo6TWFya2luZ0dDQXdhcmVKSVRTdHViUm91dGluZSgKICAg
ICBjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUU3R1YlJvdXRpbmVQdHJUYWc+JiBjb2Rl
LCBWTSYgdm0sIGNvbnN0IEpTQ2VsbCogb3duZXIsCiAgICAgY29uc3QgVmVjdG9yPEpTQ2VsbCo+
JiBjZWxscywgQmFnPENhbGxMaW5rSW5mbz4mJiBjYWxsTGlua0luZm9zKQpAQCAtOTIsMTIgKzg4
LDIxIEBAIE1hcmtpbmdHQ0F3YXJlSklUU3R1YlJvdXRpbmU6On5NYXJraW5nR0MKIHsKIH0KIAot
dm9pZCBNYXJraW5nR0NBd2FyZUpJVFN0dWJSb3V0aW5lOjptYXJrUmVxdWlyZWRPYmplY3RzSW50
ZXJuYWwoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgor
QUxXQVlTX0lOTElORSB2b2lkIE1hcmtpbmdHQ0F3YXJlSklUU3R1YlJvdXRpbmU6Om1hcmtSZXF1
aXJlZE9iamVjdHNJbnRlcm5hbEltcGwoVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBmb3IgKGF1
dG8mIGVudHJ5IDogbV9jZWxscykKICAgICAgICAgdmlzaXRvci5hcHBlbmQoZW50cnkpOwogfQog
Cit2b2lkIE1hcmtpbmdHQ0F3YXJlSklUU3R1YlJvdXRpbmU6Om1hcmtSZXF1aXJlZE9iamVjdHNJ
bnRlcm5hbChBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIG1hcmtSZXF1aXJl
ZE9iamVjdHNJbnRlcm5hbEltcGwodmlzaXRvcik7Cit9Cit2b2lkIE1hcmtpbmdHQ0F3YXJlSklU
U3R1YlJvdXRpbmU6Om1hcmtSZXF1aXJlZE9iamVjdHNJbnRlcm5hbChTbG90VmlzaXRvciYgdmlz
aXRvcikKK3sKKyAgICBtYXJrUmVxdWlyZWRPYmplY3RzSW50ZXJuYWxJbXBsKHZpc2l0b3IpOwor
fQogCiBHQ0F3YXJlSklUU3R1YlJvdXRpbmVXaXRoRXhjZXB0aW9uSGFuZGxlcjo6R0NBd2FyZUpJ
VFN0dWJSb3V0aW5lV2l0aEV4Y2VwdGlvbkhhbmRsZXIoCiAgICAgY29uc3QgTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiYgY29kZSwgVk0mIHZtLCAgY29uc3QgSlND
ZWxsKiBvd25lciwgY29uc3QgVmVjdG9yPEpTQ2VsbCo+JiBjZWxscywgQmFnPENhbGxMaW5rSW5m
bz4mJiBjYWxsTGlua0luZm9zLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9HQ0F3
YXJlSklUU3R1YlJvdXRpbmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0dDQXdhcmVKSVRTdHViUm91dGluZS5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0dDQXdhcmVKSVRTdHViUm91dGluZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE4IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDIxIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtNjAsOCArNjAsOSBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBHQ0F3YXJlSklUU3R1YlJvdXRpbmUoY29kZSwgdm0pKTsKICAgICB9Ci0gICAgCi0g
ICAgdm9pZCBtYXJrUmVxdWlyZWRPYmplY3RzKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorCisgICAg
dGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KKyAgICB2b2lkIG1hcmtSZXF1aXJlZE9iamVjdHMo
VmlzaXRvciYgdmlzaXRvcikKICAgICB7CiAgICAgICAgIG1hcmtSZXF1aXJlZE9iamVjdHNJbnRl
cm5hbCh2aXNpdG9yKTsKICAgICB9CkBAIC03MSw3ICs3Miw4IEBAIHB1YmxpYzoKIHByb3RlY3Rl
ZDoKICAgICB2b2lkIG9ic2VydmVaZXJvUmVmQ291bnQoKSBvdmVycmlkZTsKICAgICAKLSAgICB2
aXJ0dWFsIHZvaWQgbWFya1JlcXVpcmVkT2JqZWN0c0ludGVybmFsKFNsb3RWaXNpdG9yJik7Cisg
ICAgdmlydHVhbCB2b2lkIG1hcmtSZXF1aXJlZE9iamVjdHNJbnRlcm5hbChBYnN0cmFjdFNsb3RW
aXNpdG9yJikgeyB9CisgICAgdmlydHVhbCB2b2lkIG1hcmtSZXF1aXJlZE9iamVjdHNJbnRlcm5h
bChTbG90VmlzaXRvciYpIHsgfQogCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBKSVRTdHVi
Um91dGluZVNldDsKQEAgLTg5LDcgKzkxLDkgQEAgcHVibGljOgogICAgIH5NYXJraW5nR0NBd2Fy
ZUpJVFN0dWJSb3V0aW5lKCkgb3ZlcnJpZGU7CiAgICAgCiBwcm90ZWN0ZWQ6Ci0gICAgdm9pZCBt
YXJrUmVxdWlyZWRPYmplY3RzSW50ZXJuYWwoU2xvdFZpc2l0b3ImKSBvdmVycmlkZTsKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIG1hcmtSZXF1aXJlZE9iamVjdHNJbnRlcm5h
bEltcGwoVmlzaXRvciYpOworICAgIHZvaWQgbWFya1JlcXVpcmVkT2JqZWN0c0ludGVybmFsKEFi
c3RyYWN0U2xvdFZpc2l0b3ImKSBmaW5hbDsKKyAgICB2b2lkIG1hcmtSZXF1aXJlZE9iamVjdHNJ
bnRlcm5hbChTbG90VmlzaXRvciYpIGZpbmFsOwogCiBwcml2YXRlOgogICAgIFZlY3RvcjxXcml0
ZUJhcnJpZXI8SlNDZWxsPj4gbV9jZWxsczsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUV29ya2xpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUV29ya2xpc3QuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVFdvcmtsaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRp
bmUuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Bv
bHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEzNSwxMiAr
MTM1LDIyIEBAIGJvb2wgUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmU6OnZpc2l0V2UKICAgICBy
ZXR1cm4gaXNTdGlsbExpdmU7CiB9CiAKLXZvaWQgUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmU6
Om1hcmtSZXF1aXJlZE9iamVjdHNJbnRlcm5hbChTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBs
YXRlPHR5cGVuYW1lIFZpc2l0b3I+CitBTFdBWVNfSU5MSU5FIHZvaWQgUG9seW1vcnBoaWNDYWxs
U3R1YlJvdXRpbmU6Om1hcmtSZXF1aXJlZE9iamVjdHNJbnRlcm5hbEltcGwoVmlzaXRvciYgdmlz
aXRvcikKIHsKICAgICBmb3IgKGF1dG8mIHZhcmlhbnQgOiBtX3ZhcmlhbnRzKQogICAgICAgICB2
aXNpdG9yLmFwcGVuZCh2YXJpYW50KTsKIH0KIAordm9pZCBQb2x5bW9ycGhpY0NhbGxTdHViUm91
dGluZTo6bWFya1JlcXVpcmVkT2JqZWN0c0ludGVybmFsKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZp
c2l0b3IpCit7CisgICAgbWFya1JlcXVpcmVkT2JqZWN0c0ludGVybmFsSW1wbCh2aXNpdG9yKTsK
K30KK3ZvaWQgUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmU6Om1hcmtSZXF1aXJlZE9iamVjdHNJ
bnRlcm5hbChTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBtYXJrUmVxdWlyZWRPYmplY3Rz
SW50ZXJuYWxJbXBsKHZpc2l0b3IpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlm
IC8vIEVOQUJMRShKSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1BvbHltb3Jw
aGljQ2FsbFN0dWJSb3V0aW5lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9Qb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZS5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1BvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIw
MTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1
LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0xMDUsNiArMTA1LDggQEAgcHVibGljOgogICAgIGJvb2wgdmlzaXRX
ZWFrKFZNJikgZmluYWw7CiAKIHByaXZhdGU6CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRv
cj4gdm9pZCBtYXJrUmVxdWlyZWRPYmplY3RzSW50ZXJuYWxJbXBsKFZpc2l0b3ImKTsKKyAgICB2
b2lkIG1hcmtSZXF1aXJlZE9iamVjdHNJbnRlcm5hbChBYnN0cmFjdFNsb3RWaXNpdG9yJikgZmlu
YWw7CiAgICAgdm9pZCBtYXJrUmVxdWlyZWRPYmplY3RzSW50ZXJuYWwoU2xvdFZpc2l0b3ImKSBm
aW5hbDsKIAogICAgIFZlY3RvcjxXcml0ZUJhcnJpZXI8SlNDZWxsPiwgMj4gbV92YXJpYW50czsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Fic3RyYWN0TW9kdWxlUmVjb3Jk
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BYnN0cmFj
dE1vZHVsZVJlY29yZC5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0Fic3RyYWN0TW9kdWxlUmVjb3JkLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxOSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTYwLDcgKzYwLDggQEAgdm9pZCBBYnN0cmFjdE1vZHVsZVJlY29yZDo6ZmluaXNoQ3JlYXRpbwog
ICAgIHB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImRlcGVuZGVuY2ll
c01hcCJfcyksIG1fZGVwZW5kZW5jaWVzTWFwLmdldCgpKTsKIH0KIAotdm9pZCBBYnN0cmFjdE1v
ZHVsZVJlY29yZDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNp
dG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgQWJzdHJhY3RNb2R1bGVSZWNv
cmQ6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsK
ICAgICBBYnN0cmFjdE1vZHVsZVJlY29yZCogdGhpc09iamVjdCA9IGpzQ2FzdDxBYnN0cmFjdE1v
ZHVsZVJlY29yZCo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09i
amVjdCwgaW5mbygpKTsKQEAgLTcwLDYgKzcxLDggQEAgdm9pZCBBYnN0cmFjdE1vZHVsZVJlY29y
ZDo6dmlzaXRDaGlsZHJlbgogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fZGVwZW5k
ZW5jaWVzTWFwKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEFic3RyYWN0TW9kdWxlUmVj
b3JkKTsKKwogdm9pZCBBYnN0cmFjdE1vZHVsZVJlY29yZDo6YXBwZW5kUmVxdWVzdGVkTW9kdWxl
KGNvbnN0IElkZW50aWZpZXImIG1vZHVsZU5hbWUpCiB7CiAgICAgbV9yZXF1ZXN0ZWRNb2R1bGVz
LmFkZChtb2R1bGVOYW1lLmltcGwoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9BYnN0cmFjdE1vZHVsZVJlY29yZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0Fic3RyYWN0TW9kdWxlUmVjb3JkLmgJKHJldmlzaW9uIDI3MjgzMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Fic3RyYWN0TW9kdWxlUmVjb3JkLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0y
MDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMTM2LDcgKzEzNiw3IEBAIHByb3RlY3RlZDoKICAgICBBYnN0cmFjdE1v
ZHVsZVJlY29yZChWTSYsIFN0cnVjdHVyZSosIGNvbnN0IElkZW50aWZpZXImKTsKICAgICB2b2lk
IGZpbmlzaENyZWF0aW9uKEpTR2xvYmFsT2JqZWN0KiwgVk0mKTsKIAotICAgIHN0YXRpYyB2b2lk
IHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lU
X0NISUxEUkVOOwogCiAgICAgdm9pZCBzZXRNb2R1bGVFbnZpcm9ubWVudChKU0dsb2JhbE9iamVj
dCosIEpTTW9kdWxlRW52aXJvbm1lbnQqKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQXJnTGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQXJnTGlzdC5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0FyZ0xpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTUxLDcgKzUxLDggQEAgdm9p
ZCBBcmdMaXN0OjpnZXRTbGljZShpbnQgc3RhcnRJbmRleCwgQQogICAgIHJlc3VsdC5tX2FyZ0Nv
dW50ID0gIG1fYXJnQ291bnQgLSBzdGFydEluZGV4OwogfQogCi12b2lkIE1hcmtlZEFyZ3VtZW50
QnVmZmVyOjptYXJrTGlzdHMoU2xvdFZpc2l0b3ImIHZpc2l0b3IsIExpc3RTZXQmIG1hcmtTZXQp
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBNYXJrZWRBcmd1bWVudEJ1ZmZlcjo6
bWFya0xpc3RzKFZpc2l0b3ImIHZpc2l0b3IsIExpc3RTZXQmIG1hcmtTZXQpCiB7CiAgICAgTGlz
dFNldDo6aXRlcmF0b3IgZW5kID0gbWFya1NldC5lbmQoKTsKICAgICBmb3IgKExpc3RTZXQ6Oml0
ZXJhdG9yIGl0ID0gbWFya1NldC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKQEAgLTYxLDYg
KzYyLDkgQEAgdm9pZCBNYXJrZWRBcmd1bWVudEJ1ZmZlcjo6bWFya0xpc3RzKFNsbwogICAgIH0K
IH0KIAordGVtcGxhdGUgdm9pZCBNYXJrZWRBcmd1bWVudEJ1ZmZlcjo6bWFya0xpc3RzKEFic3Ry
YWN0U2xvdFZpc2l0b3ImLCBMaXN0U2V0Jik7Cit0ZW1wbGF0ZSB2b2lkIE1hcmtlZEFyZ3VtZW50
QnVmZmVyOjptYXJrTGlzdHMoU2xvdFZpc2l0b3ImLCBMaXN0U2V0Jik7CisKIHZvaWQgTWFya2Vk
QXJndW1lbnRCdWZmZXI6OnNsb3dFbnN1cmVDYXBhY2l0eShzaXplX3QgcmVxdWVzdGVkQ2FwYWNp
dHkpCiB7CiAgICAgc2V0TmVlZHNPdmVyZmxvd0NoZWNrKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9BcmdMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQXJnTGlzdC5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9BcmdMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2
IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAxIEhhcnJpIFBvcnRlbiAocG9ydGVu
QGtkZS5vcmcpCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwMy0yMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0xMTgsNyArMTE4LDcg
QEAgcHVibGljOgogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KICAgICAgICAgCi0gICAg
c3RhdGljIHZvaWQgbWFya0xpc3RzKFNsb3RWaXNpdG9yJiwgTGlzdFNldCYpOworICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFZpc2l0b3I+IHN0YXRpYyB2b2lkIG1hcmtMaXN0cyhWaXNpdG9yJiwgTGlz
dFNldCYpOwogCiAgICAgdm9pZCBlbnN1cmVDYXBhY2l0eShzaXplX3QgcmVxdWVzdGVkQ2FwYWNp
dHkpCiAgICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVhYmxl
SWRlbnRpZmllci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0NhY2hlYWJsZUlkZW50aWZpZXIuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVhYmxlSWRlbnRpZmllci5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAtMjAyMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM5
LDEwICszOSwxMCBAQCB1c2luZyBXVEY6OlVuaXF1ZWRTdHJpbmdJbXBsOwogCiBuYW1lc3BhY2Ug
SlNDIHsKIAorY2xhc3MgQWJzdHJhY3RTbG90VmlzaXRvcjsKIGNsYXNzIENvZGVCbG9jazsKIGNs
YXNzIElkZW50aWZpZXI7CiBjbGFzcyBKU0NlbGw7Ci1jbGFzcyBTbG90VmlzaXRvcjsKIAogY2xh
c3MgQ2FjaGVhYmxlSWRlbnRpZmllciB7CiBwdWJsaWM6CkBAIC04Nyw3ICs4Nyw3IEBAIHB1Ymxp
YzoKIAogICAgIHVpbnRwdHJfdCByYXdCaXRzKCkgY29uc3QgeyByZXR1cm4gbV9iaXRzOyB9CiAK
LSAgICBpbmxpbmUgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYpIGNvbnN0OworICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IGlubGluZSB2b2lkIHZpc2l0QWdncmVnYXRlKFZp
c2l0b3ImKSBjb25zdDsKIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZHVtcChQcmludFN0
cmVhbSYpIGNvbnN0OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNo
ZWFibGVJZGVudGlmaWVySW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0NhY2hlYWJsZUlkZW50aWZpZXJJbmxpbmVzLmgJKHJldmlzaW9uIDI3Mjgz
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlYWJsZUlkZW50aWZpZXJJ
bmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAyMC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTM3LDcgKzEzNyw4IEBAIGlubGluZSB2b2lkIENhY2hl
YWJsZUlkZW50aWZpZXI6OnNldFVpZEIKICAgICBtX2JpdHMgPSBiaXR3aXNlX2Nhc3Q8dWludHB0
cl90Pih1aWQpIHwgc191aWRUYWc7CiB9CiAKLWlubGluZSB2b2lkIENhY2hlYWJsZUlkZW50aWZp
ZXI6OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBjb25zdAordGVtcGxhdGU8
dHlwZW5hbWUgVmlzaXRvcj4KK2lubGluZSB2b2lkIENhY2hlYWJsZUlkZW50aWZpZXI6OnZpc2l0
QWdncmVnYXRlKFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0CiB7CiAgICAgaWYgKG1fYml0cyAmJiBp
c0NlbGwoKSkKICAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZChjZWxsKCkpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xhc3NJbmZvLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xhc3NJbmZvLmgJKHJldmlzaW9uIDI3
MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NsYXNzSW5mby5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAw
MSBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQogICogIENvcHlyaWdodCAoQykgMjAwMSBQ
ZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQotICogIENvcHlyaWdodCAoQykgMjAwMy0yMDE5IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpA
QCAtNDQsOSArNDQsNiBAQCBzdHJ1Y3QgTWV0aG9kVGFibGUgewogICAgIHVzaW5nIERlc3Ryb3lG
dW5jdGlvblB0ciA9IHZvaWQgKCopKEpTQ2VsbCopOwogICAgIERlc3Ryb3lGdW5jdGlvblB0ciBN
RVRIT0RfVEFCTEVfRU5UUlkoZGVzdHJveSk7CiAKLSAgICB1c2luZyBWaXNpdENoaWxkcmVuRnVu
Y3Rpb25QdHIgPSB2b2lkICgqKShKU0NlbGwqLCBTbG90VmlzaXRvciYpOwotICAgIFZpc2l0Q2hp
bGRyZW5GdW5jdGlvblB0ciBNRVRIT0RfVEFCTEVfRU5UUlkodmlzaXRDaGlsZHJlbik7Ci0KICAg
ICB1c2luZyBHZXRDYWxsRGF0YUZ1bmN0aW9uUHRyID0gQ2FsbERhdGEgKCopKEpTQ2VsbCopOwog
ICAgIEdldENhbGxEYXRhRnVuY3Rpb25QdHIgTUVUSE9EX1RBQkxFX0VOVFJZKGdldENhbGxEYXRh
KTsKIApAQCAtMTIwLDggKzExNywyMyBAQCBzdHJ1Y3QgTWV0aG9kVGFibGUgewogICAgIHVzaW5n
IEVzdGltYXRlZFNpemVGdW5jdGlvblB0ciA9IHNpemVfdCAoKikoSlNDZWxsKiwgVk0mKTsKICAg
ICBFc3RpbWF0ZWRTaXplRnVuY3Rpb25QdHIgTUVUSE9EX1RBQkxFX0VOVFJZKGVzdGltYXRlZFNp
emUpOwogCisgICAgdXNpbmcgVmlzaXRDaGlsZHJlbkZ1bmN0aW9uUHRyID0gdm9pZCAoKikoSlND
ZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBWaXNpdENoaWxkcmVuRnVuY3Rpb25QdHIgTUVUSE9E
X1RBQkxFX0VOVFJZKHZpc2l0Q2hpbGRyZW5XaXRoU2xvdFZpc2l0b3IpOworCisgICAgdXNpbmcg
VmlzaXRDaGlsZHJlbldpdGhBYnN0cmFjdFNsb3RWaXNpdG9yUHRyID0gdm9pZCAoKikoSlNDZWxs
KiwgQWJzdHJhY3RTbG90VmlzaXRvciYpOworICAgIFZpc2l0Q2hpbGRyZW5XaXRoQWJzdHJhY3RT
bG90VmlzaXRvclB0ciBNRVRIT0RfVEFCTEVfRU5UUlkodmlzaXRDaGlsZHJlbldpdGhBYnN0cmFj
dFNsb3RWaXNpdG9yKTsKKworICAgIEFMV0FZU19JTkxJTkUgdm9pZCB2aXNpdENoaWxkcmVuKEpT
Q2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0IHsgdmlzaXRDaGlsZHJlbldp
dGhTbG90VmlzaXRvcihjZWxsLCB2aXNpdG9yKTsgfQorICAgIEFMV0FZU19JTkxJTkUgdm9pZCB2
aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikg
Y29uc3QgeyB2aXNpdENoaWxkcmVuV2l0aEFic3RyYWN0U2xvdFZpc2l0b3IoY2VsbCwgdmlzaXRv
cik7IH0KKwogICAgIHVzaW5nIFZpc2l0T3V0cHV0Q29uc3RyYWludHNQdHIgPSB2b2lkICgqKShK
U0NlbGwqLCBTbG90VmlzaXRvciYpOwotICAgIFZpc2l0T3V0cHV0Q29uc3RyYWludHNQdHIgTUVU
SE9EX1RBQkxFX0VOVFJZKHZpc2l0T3V0cHV0Q29uc3RyYWludHMpOworICAgIFZpc2l0T3V0cHV0
Q29uc3RyYWludHNQdHIgTUVUSE9EX1RBQkxFX0VOVFJZKHZpc2l0T3V0cHV0Q29uc3RyYWludHNX
aXRoU2xvdFZpc2l0b3IpOworCisgICAgdXNpbmcgVmlzaXRPdXRwdXRDb25zdHJhaW50c1dpdGhB
YnN0cmFjdFNsb3RWaXNpdG9yUHRyID0gdm9pZCAoKikoSlNDZWxsKiwgQWJzdHJhY3RTbG90Vmlz
aXRvciYpOworICAgIFZpc2l0T3V0cHV0Q29uc3RyYWludHNXaXRoQWJzdHJhY3RTbG90VmlzaXRv
clB0ciBNRVRIT0RfVEFCTEVfRU5UUlkodmlzaXRPdXRwdXRDb25zdHJhaW50c1dpdGhBYnN0cmFj
dFNsb3RWaXNpdG9yKTsKKworICAgIEFMV0FZU19JTkxJTkUgdm9pZCB2aXNpdE91dHB1dENvbnN0
cmFpbnRzKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0IHsgdmlzaXRP
dXRwdXRDb25zdHJhaW50c1dpdGhTbG90VmlzaXRvcihjZWxsLCB2aXNpdG9yKTsgfQorICAgIEFM
V0FZU19JTkxJTkUgdm9pZCB2aXNpdE91dHB1dENvbnN0cmFpbnRzKEpTQ2VsbCogY2VsbCwgQWJz
dHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikgY29uc3QgeyB2aXNpdE91dHB1dENvbnN0cmFpbnRz
V2l0aEFic3RyYWN0U2xvdFZpc2l0b3IoY2VsbCwgdmlzaXRvcik7IH0KIH07CiAKICNkZWZpbmUg
Q1JFQVRFX01FTUJFUl9DSEVDS0VSKG1lbWJlcikgXApAQCAtMTQ3LDcgKzE1OSw2IEBAIHN0cnVj
dCBNZXRob2RUYWJsZSB7CiAgICAgSlNDYXN0aW5nSGVscGVyczo6SW5oZXJpdHNUcmFpdHM8Q2xh
c3NOYW1lPjo6dHlwZVJhbmdlLCBcCiAgICAgeyBcCiAgICAgICAgICZDbGFzc05hbWU6OmRlc3Ry
b3ksIFwKLSAgICAgICAgJkNsYXNzTmFtZTo6dmlzaXRDaGlsZHJlbiwgXAogICAgICAgICAmQ2xh
c3NOYW1lOjpnZXRDYWxsRGF0YSwgXAogICAgICAgICAmQ2xhc3NOYW1lOjpnZXRDb25zdHJ1Y3RE
YXRhLCBcCiAgICAgICAgICZDbGFzc05hbWU6OnB1dCwgXApAQCAtMTczLDYgKzE4NCw5IEBAIHN0
cnVjdCBNZXRob2RUYWJsZSB7CiAgICAgICAgICZDbGFzc05hbWU6OmR1bXBUb1N0cmVhbSwgXAog
ICAgICAgICAmQ2xhc3NOYW1lOjphbmFseXplSGVhcCwgXAogICAgICAgICAmQ2xhc3NOYW1lOjpl
c3RpbWF0ZWRTaXplLCBcCisgICAgICAgICZDbGFzc05hbWU6OnZpc2l0Q2hpbGRyZW4sIFwKKyAg
ICAgICAgJkNsYXNzTmFtZTo6dmlzaXRDaGlsZHJlbiwgXAorICAgICAgICAmQ2xhc3NOYW1lOjp2
aXNpdE91dHB1dENvbnN0cmFpbnRzLCBcCiAgICAgICAgICZDbGFzc05hbWU6OnZpc2l0T3V0cHV0
Q29uc3RyYWludHMsIFwKICAgICB9LCBcCiAgICAgQ2xhc3NOYW1lOjpUeXBlZEFycmF5U3RvcmFn
ZVR5cGUsIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Nsb25lZEFyZ3Vt
ZW50cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xv
bmVkQXJndW1lbnRzLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQ2xvbmVkQXJndW1lbnRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2Nyw3
ICsyNjcsOCBAQCB2b2lkIENsb25lZEFyZ3VtZW50czo6bWF0ZXJpYWxpemVTcGVjaWFsCiAgICAg
ICAgIG1hdGVyaWFsaXplU3BlY2lhbHMoZ2xvYmFsT2JqZWN0KTsKIH0KIAotdm9pZCBDbG9uZWRB
cmd1bWVudHM6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRv
cikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIENsb25lZEFyZ3VtZW50czo6dmlz
aXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIENs
b25lZEFyZ3VtZW50cyogdGhpc09iamVjdCA9IGpzQ2FzdDxDbG9uZWRBcmd1bWVudHMqPihjZWxs
KTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBA
IC0yNzUsNSArMjc2LDcgQEAgdm9pZCBDbG9uZWRBcmd1bWVudHM6OnZpc2l0Q2hpbGRyZW4oSlND
ZQogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fY2FsbGVlKTsKIH0KIAorREVGSU5F
X1ZJU0lUX0NISUxEUkVOKENsb25lZEFyZ3VtZW50cyk7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DbG9uZWRBcmd1bWVudHMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DbG9uZWRBcmd1bWVu
dHMuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Q2xvbmVkQXJndW1lbnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDE1LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02Miw3ICs2Miw3IEBAIHB1Ymxp
YzoKICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9i
amVjdCosIEpTVmFsdWUgcHJvdG90eXBlKTsKICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVT
bG93UHV0U3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlIHByb3RvdHlwZSk7
CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7
CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIERFQ0xBUkVfSU5GTzsKIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGlyZWN0QXJndW1lbnRzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EaXJlY3RBcmd1bWVudHMu
Y3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9E
aXJlY3RBcmd1bWVudHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxNS0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtOTAsNyArOTAsOCBAQCBzaXpl
X3QgRGlyZWN0QXJndW1lbnRzOjplc3RpbWF0ZWRTaXplKEpTCiAgICAgcmV0dXJuIEJhc2U6OmVz
dGltYXRlZFNpemUoY2VsbCwgdm0pICsgbWFwcGVkQXJndW1lbnRzU2l6ZSArIG1vZGlmaWVkQXJn
dW1lbnRzU2l6ZTsKIH0KIAotdm9pZCBEaXJlY3RBcmd1bWVudHM6OnZpc2l0Q2hpbGRyZW4oSlND
ZWxsKiB0aGlzQ2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPgordm9pZCBEaXJlY3RBcmd1bWVudHM6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCog
dGhpc0NlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgRGlyZWN0QXJndW1lbnRzKiB0aGlz
T2JqZWN0ID0gc3RhdGljX2Nhc3Q8RGlyZWN0QXJndW1lbnRzKj4odGhpc0NlbGwpOwogICAgIEFT
U0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTEwNCw2ICsx
MDUsOCBAQCB2b2lkIERpcmVjdEFyZ3VtZW50czo6dmlzaXRDaGlsZHJlbihKU0NlCiAgICAgR2Vu
ZXJpY0FyZ3VtZW50czxEaXJlY3RBcmd1bWVudHM+Ojp2aXNpdENoaWxkcmVuKHRoaXNDZWxsLCB2
aXNpdG9yKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKERpcmVjdEFyZ3VtZW50cyk7CisK
IFN0cnVjdHVyZSogRGlyZWN0QXJndW1lbnRzOjpjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKIHsKICAgICByZXR1
cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5m
byhEaXJlY3RBcmd1bWVudHNUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EaXJlY3RBcmd1bWVudHMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EaXJlY3RBcmd1bWVudHMuaAkocmV2
aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGlyZWN0QXJn
dW1lbnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDE1LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE1LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02NSw3ICs2NSw3IEBAIHB1YmxpYzoKICAgICBz
dGF0aWMgRGlyZWN0QXJndW1lbnRzKiBjcmVhdGVCeUNvcHlpbmcoSlNHbG9iYWxPYmplY3QqLCBD
YWxsRnJhbWUqKTsKIAogICAgIHN0YXRpYyBzaXplX3QgZXN0aW1hdGVkU2l6ZShKU0NlbGwqLCBW
TSYpOwotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3Im
KTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogICAgIAogICAgIHVpbnQzMl90IGludGVy
bmFsTGVuZ3RoKCkgY29uc3QKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9FdmFsRXhlY3V0YWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvRXZhbEV4ZWN1dGFibGUuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FdmFsRXhlY3V0YWJsZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEwLCAyMDEz
LCAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDA5LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01MCw3ICs1MCw4IEBAIGF1dG8gRXZhbEV4ZWN1dGFi
bGU6OmVuc3VyZVRlbXBsYXRlT2JqZWMKICAgICByZXR1cm4gZW5zdXJlVGVtcGxhdGVPYmplY3RN
YXBJbXBsKG1fdGVtcGxhdGVPYmplY3RNYXApOwogfQogCi12b2lkIEV2YWxFeGVjdXRhYmxlOjp2
aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0
ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBFdmFsRXhlY3V0YWJsZTo6dmlzaXRDaGlsZHJlbklt
cGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEV2YWxFeGVjdXRhYmxl
KiB0aGlzT2JqZWN0ID0ganNDYXN0PEV2YWxFeGVjdXRhYmxlKj4oY2VsbCk7CiAgICAgQVNTRVJU
X0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNjQsNCArNjUsNiBA
QCB2b2lkIEV2YWxFeGVjdXRhYmxlOjp2aXNpdENoaWxkcmVuKEpTQ2VsCiAgICAgfQogfQogCitE
RUZJTkVfVklTSVRfQ0hJTERSRU4oRXZhbEV4ZWN1dGFibGUpOworCiB9IC8vIG5hbWVzcGFjZSBK
U0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V2YWxFeGVjdXRhYmxlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXZhbEV4ZWN1dGFi
bGUuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
RXZhbEV4ZWN1dGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDktMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDktMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTc5LDcgKzc5LDcgQEAgcHJvdGVj
dGVkOgogICAgIHVzaW5nIEJhc2U6OmZpbmlzaENyZWF0aW9uOwogICAgIEV2YWxFeGVjdXRhYmxl
KEpTR2xvYmFsT2JqZWN0KiwgY29uc3QgU291cmNlQ29kZSYsIGJvb2wgaW5TdHJpY3RDb250ZXh0
LCBEZXJpdmVkQ29udGV4dFR5cGUsIGJvb2wgaXNBcnJvd0Z1bmN0aW9uQ29udGV4dCwgYm9vbCBp
c0luc2lkZU9yZGluYXJ5RnVuY3Rpb24sIEV2YWxDb250ZXh0VHlwZSwgTmVlZHNDbGFzc0ZpZWxk
SW5pdGlhbGl6ZXIsIFByaXZhdGVCcmFuZFJlcXVpcmVtZW50KTsKIAotICAgIHN0YXRpYyB2b2lk
IHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lU
X0NISUxEUkVOOwogCiAgICAgdW5zaWduZWQgbV9uZWVkc0NsYXNzRmllbGRJbml0aWFsaXplciA6
IDE7CiAgICAgdW5zaWduZWQgbV9wcml2YXRlQnJhbmRSZXF1aXJlbWVudCA6IDE7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGNlcHRpb24uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbi5jcHAJKHJldmlzaW9uIDI3
MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbi5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIw
MTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1
LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC01Myw3ICs1Myw4IEBAIFN0cnVjdHVyZSogRXhjZXB0aW9uOjpjcmVh
dGVTdHJ1Y3R1cmUoVk0KICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9i
amVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhDZWxsVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZv
KCkpOwogfQogCi12b2lkIEV4Y2VwdGlvbjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgRXhj
ZXB0aW9uOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3Ip
CiB7CiAgICAgRXhjZXB0aW9uKiB0aGlzT2JqZWN0ID0ganNDYXN0PEV4Y2VwdGlvbio+KGNlbGwp
OwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAg
LTY0LDYgKzY1LDggQEAgdm9pZCBFeGNlcHRpb246OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZQog
ICAgICAgICBmcmFtZS52aXNpdENoaWxkcmVuKHZpc2l0b3IpOwogfQogCitERUZJTkVfVklTSVRf
Q0hJTERSRU4oRXhjZXB0aW9uKTsKKwogRXhjZXB0aW9uOjpFeGNlcHRpb24oVk0mIHZtKQogICAg
IDogQmFzZSh2bSwgdm0uZXhjZXB0aW9uU3RydWN0dXJlLmdldCgpKQogewpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9uLmgJKHJldmlzaW9uIDI3MjgzMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbi5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE5IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIxIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtNTEsNyArNTEsNyBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVh
dGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUgcHJvdG90eXBlKTsKIAot
ICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAg
ICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgREVDTEFSRV9FWFBPUlRfSU5GTzsKIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25FeGVjdXRhYmxlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvbkV4
ZWN1dGFibGUuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9GdW5jdGlvbkV4ZWN1dGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOS0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjcsNyAr
NjcsOCBAQCBGdW5jdGlvbkNvZGVCbG9jayogRnVuY3Rpb25FeGVjdXRhYmxlOjpiCiAgICAgcmV0
dXJuIHN0YXRpY19jYXN0PEZ1bmN0aW9uQ29kZUJsb2NrKj4oZWRnZS0+Y29kZUJsb2NrKCktPmJh
c2VsaW5lQWx0ZXJuYXRpdmUoKSk7CiB9CiAKLXZvaWQgRnVuY3Rpb25FeGVjdXRhYmxlOjp2aXNp
dENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0
eXBlbmFtZSBWaXNpdG9yPgordm9pZCBGdW5jdGlvbkV4ZWN1dGFibGU6OnZpc2l0Q2hpbGRyZW5J
bXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBGdW5jdGlvbkV4ZWN1
dGFibGUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4oY2VsbCk7CiAg
ICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtODYs
NiArODcsOCBAQCB2b2lkIEZ1bmN0aW9uRXhlY3V0YWJsZTo6dmlzaXRDaGlsZHJlbihKCiAgICAg
fQogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oRnVuY3Rpb25FeGVjdXRhYmxlKTsKKwogRnVu
Y3Rpb25FeGVjdXRhYmxlKiBGdW5jdGlvbkV4ZWN1dGFibGU6OmZyb21HbG9iYWxDb2RlKAogICAg
IGNvbnN0IElkZW50aWZpZXImIG5hbWUsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNv
bnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgCiAgICAgSlNPYmplY3QqJiBleGNlcHRpb24sIGludCBv
dmVycmlkZUxpbmVOdW1iZXIsIE9wdGlvbmFsPGludD4gZnVuY3Rpb25Db25zdHJ1Y3RvclBhcmFt
ZXRlcnNFbmRQb3NpdGlvbikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1
bmN0aW9uRXhlY3V0YWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZS5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvbkV4ZWN1dGFibGUuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxOSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAyMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTE2Niw3ICsxNjYsNyBAQCBwdWJsaWM6CiAgICAgSlNQYXJzZXJTY3JpcHRNb2RlIHNj
cmlwdE1vZGUoKSBjb25zdCB7IHJldHVybiBtX3VubGlua2VkRXhlY3V0YWJsZS0+c2NyaXB0TW9k
ZSgpOyB9CiAgICAgU291cmNlQ29kZSBjbGFzc1NvdXJjZSgpIGNvbnN0IHsgcmV0dXJuIG1fdW5s
aW5rZWRFeGVjdXRhYmxlLT5jbGFzc1NvdXJjZSgpOyB9CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNp
dENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElM
RFJFTjsKICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvKQogICAgIHsKICAgICAgICAg
cmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvLCBUeXBlSW5m
byhGdW5jdGlvbkV4ZWN1dGFibGVUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvblJhcmVEYXRhLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvblJhcmVEYXRh
LmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
RnVuY3Rpb25SYXJlRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01MSw3ICs1MSw4IEBAIFN0
cnVjdHVyZSogRnVuY3Rpb25SYXJlRGF0YTo6Y3JlYXRlU3RydWMKICAgICByZXR1cm4gU3RydWN0
dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhDZWxsVHlw
ZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwogfQogCi12b2lkIEZ1bmN0aW9uUmFyZURhdGE6
OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBs
YXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEZ1bmN0aW9uUmFyZURhdGE6OnZpc2l0Q2hpbGRy
ZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBGdW5jdGlvblJh
cmVEYXRhKiByYXJlRGF0YSA9IGpzQ2FzdDxGdW5jdGlvblJhcmVEYXRhKj4oY2VsbCk7CiAgICAg
QVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjZWxsLCBpbmZvKCkpOwpAQCAtNjMsNiArNjQsOCBA
QCB2b2lkIEZ1bmN0aW9uUmFyZURhdGE6OnZpc2l0Q2hpbGRyZW4oSlNDCiAgICAgdmlzaXRvci5h
cHBlbmQocmFyZURhdGEtPm1fZXhlY3V0YWJsZSk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJF
TihGdW5jdGlvblJhcmVEYXRhKTsKKwogRnVuY3Rpb25SYXJlRGF0YTo6RnVuY3Rpb25SYXJlRGF0
YShWTSYgdm0sIEV4ZWN1dGFibGVCYXNlKiBleGVjdXRhYmxlKQogICAgIDogQmFzZSh2bSwgdm0u
ZnVuY3Rpb25SYXJlRGF0YVN0cnVjdHVyZS5nZXQoKSkKICAgICAsIG1fb2JqZWN0QWxsb2NhdGlv
blByb2ZpbGUoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25S
YXJlRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1
bmN0aW9uUmFyZURhdGEuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvRnVuY3Rpb25SYXJlRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjUsNyAr
NjUsNyBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUo
Vk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUgcHJvdG90eXBlKTsKIAotICAgIHN0YXRpYyB2
b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJ
U0lUX0NISUxEUkVOOwogCiAgICAgREVDTEFSRV9JTkZPOwogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9HZW5lcmljQXJndW1lbnRzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50cy5oCShyZXZpc2lvbiAyNzI4
MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljQXJndW1lbnRzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1
LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE1LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC00NCw3ICs0NCw3IEBAIHByb3RlY3RlZDoKICAgICB7CiAgICAg
fQogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYp
OworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJv
cGVydHlTbG90KEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIFByb3Bl
cnR5U2xvdCYpOwogICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNP
YmplY3QqLCBKU0dsb2JhbE9iamVjdCosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgUHJvcGVydHlT
bG90Jik7CiAgICAgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCosIEpT
R2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lQXJyYXkmLCBEb250RW51bVByb3BlcnRpZXNNb2Rl
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNBcmd1bWVudHNJ
bmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2Vu
ZXJpY0FyZ3VtZW50c0lubGluZXMuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50c0lubGluZXMuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTMxLDcgKzMxLDggQEAKIG5hbWVzcGFjZSBKU0MgewogCiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUeXBlPgotdm9pZCBHZW5lcmljQXJndW1lbnRzPFR5cGU+Ojp2aXNpdENoaWxkcmVuKEpTQ2Vs
bCogdGhpc0NlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlz
aXRvcj4KK3ZvaWQgR2VuZXJpY0FyZ3VtZW50czxUeXBlPjo6dmlzaXRDaGlsZHJlbkltcGwoSlND
ZWxsKiB0aGlzQ2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBUeXBlKiB0aGlzT2JqZWN0
ID0gc3RhdGljX2Nhc3Q8VHlwZSo+KHRoaXNDZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lO
SEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC00MSw2ICs0Miw4IEBAIHZvaWQgR2VuZXJp
Y0FyZ3VtZW50czxUeXBlPjo6dmlzaXRDaGlsZHIKICAgICAgICAgdmlzaXRvci5tYXJrQXV4aWxp
YXJ5KHRoaXNPYmplY3QtPm1fbW9kaWZpZWRBcmd1bWVudHNEZXNjcmlwdG9yLmdldFVuc2FmZSgp
KTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOX1dJVEhfTU9ESUZJRVIodGVtcGxhdGU8dHlw
ZW5hbWUgVHlwZT4sIEdlbmVyaWNBcmd1bWVudHM8VHlwZT4pOworCiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUeXBlPgogYm9vbCBHZW5lcmljQXJndW1lbnRzPFR5cGU+OjpnZXRPd25Qcm9wZXJ0eVNsb3Qo
SlNPYmplY3QqIG9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUHJvcGVydHlO
YW1lIGlkZW50LCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9HZXR0ZXJTZXR0ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0dldHRlclNldHRlci5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dldHRlclNldHRlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNyArMSw3IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAyIEhh
cnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCiAgKiAgQ29weXJpZ2h0IChDKSAyMDAxIFBldGVy
IEtlbGx5IChwbWtAcG9zdC5jb20pCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA0LTIwMTcgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwNC0yMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0z
Myw3ICszMyw4IEBAIFNUQVRJQ19BU1NFUlRfSVNfVFJJVklBTExZX0RFU1RSVUNUSUJMRSgKIAog
Y29uc3QgQ2xhc3NJbmZvIEdldHRlclNldHRlcjo6c19pbmZvID0geyAiR2V0dGVyU2V0dGVyIiwg
bnVsbHB0ciwgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShHZXR0ZXJTZXR0
ZXIpIH07CiAKLXZvaWQgR2V0dGVyU2V0dGVyOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwg
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBH
ZXR0ZXJTZXR0ZXI6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlz
aXRvcikKIHsKICAgICBHZXR0ZXJTZXR0ZXIqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8R2V0dGVyU2V0
dGVyKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBp
bmZvKCkpOwpAQCAtNDMsNiArNDQsOCBAQCB2b2lkIEdldHRlclNldHRlcjo6dmlzaXRDaGlsZHJl
bihKU0NlbGwqCiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9zZXR0ZXIpOwogfQog
CitERUZJTkVfVklTSVRfQ0hJTERSRU4oR2V0dGVyU2V0dGVyKTsKKwogSlNWYWx1ZSBjYWxsR2V0
dGVyKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgYmFzZSwgSlNWYWx1ZSBn
ZXR0ZXJTZXR0ZXIpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2V0dGVyU2V0dGVyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2V0dGVyU2V0dGVyLmgJKHJldmlzaW9u
IDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dldHRlclNldHRlci5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5
OTktMjAwMSBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQogICogIENvcHlyaWdodCAoQykg
MjAwMSBQZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQotICogIENvcHlyaWdodCAoQykgMjAwMy0y
MDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIw
MDMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAq
ICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYwpAQCAtODIsNyArODIsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBjcmVhdGUodm0s
IGdsb2JhbE9iamVjdCwgZ2V0dGVyT2JqZWN0LCBzZXR0ZXJPYmplY3QpOwogICAgIH0KIAotICAg
IHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBE
RUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgSlNPYmplY3QqIGdldHRlcigpIGNvbnN0IHsg
cmV0dXJuIG1fZ2V0dGVyLmdldCgpOyB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0hhc2hNYXBJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9IYXNoTWFwSW1wbC5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0hhc2hNYXBJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMCw2
ICszMCw5IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCitERUZJTkVfVklTSVRfQ0hJTERSRU5fV0lU
SF9NT0RJRklFUih0ZW1wbGF0ZTw+LCBIYXNoTWFwQnVja2V0PEhhc2hNYXBCdWNrZXREYXRhS2V5
Pik7CitERUZJTkVfVklTSVRfQ0hJTERSRU5fV0lUSF9NT0RJRklFUih0ZW1wbGF0ZTw+LCBIYXNo
TWFwQnVja2V0PEhhc2hNYXBCdWNrZXREYXRhS2V5VmFsdWU+KTsKKwogdGVtcGxhdGU8PgogY29u
c3QgQ2xhc3NJbmZvIEhhc2hNYXBCdWNrZXQ8SGFzaE1hcEJ1Y2tldERhdGFLZXk+OjpzX2luZm8g
PQogICAgIHsgIkhhc2hNYXBCdWNrZXQiLCBudWxscHRyLCBudWxscHRyLCBudWxscHRyLCBDUkVB
VEVfTUVUSE9EX1RBQkxFKEhhc2hNYXBCdWNrZXQ8SGFzaE1hcEJ1Y2tldERhdGFLZXk+KSB9OwpA
QCAtMzgsOCArNDEsOSBAQCB0ZW1wbGF0ZTw+CiBjb25zdCBDbGFzc0luZm8gSGFzaE1hcEJ1Y2tl
dDxIYXNoTWFwQnVja2V0RGF0YUtleVZhbHVlPjo6c19pbmZvID0KICAgICB7ICJIYXNoTWFwQnVj
a2V0IiwgbnVsbHB0ciwgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShIYXNo
TWFwQnVja2V0PEhhc2hNYXBCdWNrZXREYXRhS2V5VmFsdWU+KSB9OwogCi10ZW1wbGF0ZSA8dHlw
ZW5hbWUgRGF0YT4KLXZvaWQgSGFzaE1hcEJ1Y2tldDxEYXRhPjo6dmlzaXRDaGlsZHJlbihKU0Nl
bGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgRGF0YT4K
K3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEhhc2hNYXBCdWNrZXQ8RGF0YT46OnZp
c2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBI
YXNoTWFwQnVja2V0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEhhc2hNYXBCdWNrZXQqPihjZWxsKTsK
ICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC01
Miw4ICs1Niw5IEBAIHZvaWQgSGFzaE1hcEJ1Y2tldDxEYXRhPjo6dmlzaXRDaGlsZHJlbigKICAg
ICB2aXNpdG9yLmFwcGVuZFZhbHVlcyhiaXR3aXNlX2Nhc3Q8V3JpdGVCYXJyaWVyPFVua25vd24+
Kj4oJnRoaXNPYmplY3QtPm1fZGF0YSksIHNpemVvZihEYXRhKSAvIHNpemVvZihXcml0ZUJhcnJp
ZXI8VW5rbm93bj4pKTsKIH0KIAotdGVtcGxhdGUgPHR5cGVuYW1lIEhhc2hNYXBCdWNrZXQ+Ci12
b2lkIEhhc2hNYXBJbXBsPEhhc2hNYXBCdWNrZXQ+Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2Vs
bCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoTWFwQnVja2V0
PgordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSGFzaE1hcEltcGw8SGFzaE1hcEJ1
Y2tldD46OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikK
IHsKICAgICBIYXNoTWFwSW1wbCogdGhpc09iamVjdCA9IGpzQ2FzdDxIYXNoTWFwSW1wbCo+KGNl
bGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsK
QEAgLTY2LDYgKzcxLDggQEAgdm9pZCBIYXNoTWFwSW1wbDxIYXNoTWFwQnVja2V0Pjo6dmlzaXRD
aAogICAgICAgICB2aXNpdG9yLm1hcmtBdXhpbGlhcnkoYnVmZmVyKTsKIH0KIAorREVGSU5FX1ZJ
U0lUX0NISUxEUkVOX1dJVEhfTU9ESUZJRVIodGVtcGxhdGU8dHlwZW5hbWUgSGFzaE1hcEJ1Y2tl
dD4sIEhhc2hNYXBJbXBsPEhhc2hNYXBCdWNrZXQ+KTsKKwogdGVtcGxhdGUgPHR5cGVuYW1lIEhh
c2hNYXBCdWNrZXQ+CiBzaXplX3QgSGFzaE1hcEltcGw8SGFzaE1hcEJ1Y2tldD46OmVzdGltYXRl
ZFNpemUoSlNDZWxsKiBjZWxsLCBWTSYgdm0pCiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9IYXNoTWFwSW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0hhc2hNYXBJbXBsLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0hhc2hNYXBJbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTggQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0x
NDgsNyArMTQ4LDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9kYXRhLnZhbHVlLmdldCgp
OwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZp
c2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgQUxXQVlTX0lOTElO
RSBIYXNoTWFwQnVja2V0KiBuZXh0KCkgY29uc3QgeyByZXR1cm4gbV9uZXh0LmdldCgpOyB9CiAg
ICAgQUxXQVlTX0lOTElORSBIYXNoTWFwQnVja2V0KiBwcmV2KCkgY29uc3QgeyByZXR1cm4gbV9w
cmV2LmdldCgpOyB9CkBAIC0zNjQsNyArMzY0LDcgQEAgY2xhc3MgSGFzaE1hcEltcGwgOiBwdWJs
aWMgSlNOb25GaW5hbE9iagogcHVibGljOgogICAgIHVzaW5nIEJ1Y2tldFR5cGUgPSBIYXNoTWFw
QnVja2V0VHlwZTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xv
dFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgc3RhdGljIHNp
emVfdCBlc3RpbWF0ZWRTaXplKEpTQ2VsbCosIFZNJik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0ludGVybmFsRnVuY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGVybmFsRnVuY3Rpb24uY3BwCShyZXZpc2lvbiAy
NzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRlcm5hbEZ1bmN0aW9u
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChD
KSAxOTk5LTIwMDIgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKICAqICBDb3B5cmlnaHQg
KEMpIDIwMDEgUGV0ZXIgS2VsbHkgKHBta0Bwb3N0LmNvbSkKLSAqICBDb3B5cmlnaHQgKEMpIDIw
MDQtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChD
KSAyMDA0LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKQEAgLTY0LDcgKzY0LDggQEAgdm9pZCBJbnRlcm5hbEZ1bmN0aW9uOjpmaW5pc2hD
cmVhdGlvbihWTQogICAgIH0KIH0KIAotdm9pZCBJbnRlcm5hbEZ1bmN0aW9uOjp2aXNpdENoaWxk
cmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBWaXNpdG9yPgordm9pZCBJbnRlcm5hbEZ1bmN0aW9uOjp2aXNpdENoaWxkcmVuSW1wbChKU0Nl
bGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSW50ZXJuYWxGdW5jdGlvbiogdGhp
c09iamVjdCA9IGpzQ2FzdDxJbnRlcm5hbEZ1bmN0aW9uKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dD
X09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNzMsNiArNzQsOCBAQCB2
b2lkIEludGVybmFsRnVuY3Rpb246OnZpc2l0Q2hpbGRyZW4oSlNDCiAgICAgdmlzaXRvci5hcHBl
bmQodGhpc09iamVjdC0+bV9vcmlnaW5hbE5hbWUpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERS
RU5fV0lUSF9NT0RJRklFUihKU19FWFBPUlRfUFJJVkFURSwgSW50ZXJuYWxGdW5jdGlvbik7CisK
IGNvbnN0IFN0cmluZyYgSW50ZXJuYWxGdW5jdGlvbjo6bmFtZSgpCiB7CiAgICAgY29uc3QgU3Ry
aW5nJiBuYW1lID0gbV9vcmlnaW5hbE5hbWUtPnRyeUdldFZhbHVlKCk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRlcm5hbEZ1bmN0aW9uLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50ZXJuYWxGdW5jdGlvbi5oCShyZXZpc2lv
biAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRlcm5hbEZ1bmN0
aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogIENvcHlyaWdodCAo
QykgMTk5OS0yMDAwIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCi0gKiAgQ29weXJpZ2h0
IChDKSAyMDAzLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHly
aWdodCAoQykgMjAwMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqICBD
b3B5cmlnaHQgKEMpIDIwMDcgQ2FtZXJvbiBad2FyaWNoIChjd3p3YXJpY2hAdXdhdGVybG9vLmNh
KQogICogIENvcHlyaWdodCAoQykgMjAwNyBNYWtzIE9ybG92aWNoCiAgKgpAQCAtNDYsNyArNDYs
NyBAQCBwdWJsaWM6CiAKICAgICBERUNMQVJFX0VYUE9SVF9JTkZPOwogCi0gICAgSlNfRVhQT1JU
X1BSSVZBVEUgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYp
OworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU5fV0lUSF9NT0RJRklFUihKU19FWFBPUlRfUFJJ
VkFURSk7CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSBjb25zdCBTdHJpbmcmIG5hbWUoKTsKICAg
ICBjb25zdCBTdHJpbmcgZGlzcGxheU5hbWUoVk0mKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0ludGxDb2xsYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSW50bENvbGxhdG9yLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bENvbGxhdG9yLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQW5keSBWYW5X
YWdvbmVyIChhbmR5QHZhbndhZ29uZXIuZmFtaWx5KQogICogQ29weXJpZ2h0IChDKSAyMDE1IFN1
a29sc2FrIFNha3NodXdvbmcgKHN1a29sc2FrQGdtYWlsLmNvbSkKLSAqIENvcHlyaWdodCAoQykg
MjAxNi0yMDIwIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNi0yMDIxIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjUsNyArNjUsOCBAQCB2b2lkIEludGxDb2xsYXRvcjo6
ZmluaXNoQ3JlYXRpb24oVk0mIHZtCiAgICAgQVNTRVJUKGluaGVyaXRzKHZtLCBpbmZvKCkpKTsK
IH0KIAotdm9pZCBJbnRsQ29sbGF0b3I6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90
VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEludGxD
b2xsYXRvcjo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9y
KQogewogICAgIEludGxDb2xsYXRvciogdGhpc09iamVjdCA9IGpzQ2FzdDxJbnRsQ29sbGF0b3Iq
PihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8o
KSk7CkBAIC03NSw2ICs3Niw4IEBAIHZvaWQgSW50bENvbGxhdG9yOjp2aXNpdENoaWxkcmVuKEpT
Q2VsbCoKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2JvdW5kQ29tcGFyZSk7CiB9
CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihJbnRsQ29sbGF0b3IpOworCiBWZWN0b3I8U3RyaW5n
PiBJbnRsQ29sbGF0b3I6OnNvcnRMb2NhbGVEYXRhKGNvbnN0IFN0cmluZyYgbG9jYWxlLCBSZWxl
dmFudEV4dGVuc2lvbktleSBrZXkpCiB7CiAgICAgLy8gOS4xIEludGVybmFsIHNsb3RzIG9mIFNl
cnZpY2UgQ29uc3RydWN0b3JzICYgMTAuMi4zIEludGVybmFsIHNsb3RzIChFQ01BLTQwMiAyLjAp
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsQ29sbGF0b3IuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsQ29sbGF0b3IuaAko
cmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bENv
bGxhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0
IChDKSAyMDE1IEFuZHkgVmFuV2Fnb25lciAoYW5keUB2YW53YWdvbmVyLmZhbWlseSkKKyAqIENv
cHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTgwLDcgKzgxLDcgQEAgcHVibGljOgogcHJpdmF0
ZToKICAgICBJbnRsQ29sbGF0b3IoVk0mLCBTdHJ1Y3R1cmUqKTsKICAgICB2b2lkIGZpbmlzaENy
ZWF0aW9uKFZNJik7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90
VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBib29sIHVwZGF0
ZUNhbkRvQVNDSUlVQ0FEVUNFVENvbXBhcmlzb24oKSBjb25zdDsKIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERhdGVUaW1lRm9ybWF0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsRGF0ZVRpbWVGb3JtYXQuY3BwCShy
ZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsRGF0
ZVRpbWVGb3JtYXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENv
cHlyaWdodCAoQykgMjAxNSBBbmR5IFZhbldhZ29uZXIgKGFuZHlAdmFud2Fnb25lci5mYW1pbHkp
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTkwLDcgKzkwLDggQEAg
dm9pZCBJbnRsRGF0ZVRpbWVGb3JtYXQ6OmZpbmlzaENyZWF0aW9uKAogICAgIEFTU0VSVChpbmhl
cml0cyh2bSwgaW5mbygpKSk7CiB9CiAKLXZvaWQgSW50bERhdGVUaW1lRm9ybWF0Ojp2aXNpdENo
aWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBl
bmFtZSBWaXNpdG9yPgordm9pZCBJbnRsRGF0ZVRpbWVGb3JtYXQ6OnZpc2l0Q2hpbGRyZW5JbXBs
KEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBJbnRsRGF0ZVRpbWVGb3Jt
YXQqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SW50bERhdGVUaW1lRm9ybWF0Kj4oY2VsbCk7CiAgICAg
QVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtMTAwLDYg
KzEwMSw4IEBAIHZvaWQgSW50bERhdGVUaW1lRm9ybWF0Ojp2aXNpdENoaWxkcmVuKEoKICAgICB2
aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2JvdW5kRm9ybWF0KTsKIH0KIAorREVGSU5FX1ZJ
U0lUX0NISUxEUkVOKEludGxEYXRlVGltZUZvcm1hdCk7CisKIHZvaWQgSW50bERhdGVUaW1lRm9y
bWF0OjpzZXRCb3VuZEZvcm1hdChWTSYgdm0sIEpTQm91bmRGdW5jdGlvbiogZm9ybWF0KQogewog
ICAgIG1fYm91bmRGb3JtYXQuc2V0KHZtLCB0aGlzLCBmb3JtYXQpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERhdGVUaW1lRm9ybWF0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERhdGVUaW1lRm9ybWF0LmgJKHJldmlz
aW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxEYXRlVGlt
ZUZvcm1hdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdo
dCAoQykgMjAxNSBBbmR5IFZhbldhZ29uZXIgKGFuZHlAdmFud2Fnb25lci5mYW1pbHkpCisgKiBD
b3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC04NSw3ICs4Niw3IEBAIHB1YmxpYzoKIHByaXZh
dGU6CiAgICAgSW50bERhdGVUaW1lRm9ybWF0KFZNJiwgU3RydWN0dXJlKik7CiAgICAgdm9pZCBm
aW5pc2hDcmVhdGlvbihWTSYpOwotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgc3Rh
dGljIFZlY3RvcjxTdHJpbmc+IGxvY2FsZURhdGEoY29uc3QgU3RyaW5nJiwgUmVsZXZhbnRFeHRl
bnNpb25LZXkpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTG9j
YWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRs
TG9jYWxlLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSW50bExvY2FsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKgog
ICogQ29weXJpZ2h0IChDKSAyMDIwIFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01OCw3ICs1OSw4IEBAIHZvaWQgSW50
bExvY2FsZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQogICAgIEFTU0VSVChpbmhlcml0cyh2bSwg
aW5mbygpKSk7CiB9CiAKLXZvaWQgSW50bExvY2FsZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNl
bGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3Zv
aWQgSW50bExvY2FsZTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2
aXNpdG9yKQogewogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SW50bExvY2FsZSo+KGNl
bGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsK
QEAgLTY2LDYgKzY4LDggQEAgdm9pZCBJbnRsTG9jYWxlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCog
YwogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CiB9CiAKK0RF
RklORV9WSVNJVF9DSElMRFJFTihJbnRsTG9jYWxlKTsKKwogY2xhc3MgTG9jYWxlSURCdWlsZGVy
IGZpbmFsIHsKIHB1YmxpYzoKICAgICBib29sIGluaXRpYWxpemUoY29uc3QgU3RyaW5nJik7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTG9jYWxlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bExvY2FsZS5oCShyZXZpc2lv
biAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTG9jYWxlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDIw
IFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC03MSw3ICs3Miw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgSW50bExv
Y2FsZShWTSYsIFN0cnVjdHVyZSopOwogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKLSAg
ICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAg
REVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIFN0cmluZyBrZXl3b3JkVmFsdWUoQVNDSUlM
aXRlcmFsLCBib29sIGlzQm9vbGVhbiA9IGZhbHNlKSBjb25zdDsKIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE51bWJlckZvcm1hdC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE51bWJlckZvcm1hdC5jcHAJKHJldmlz
aW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxOdW1iZXJG
b3JtYXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIENvcHlyaWdo
dCAoQykgMjAxNSBBbmR5IFZhbldhZ29uZXIgKGFuZHlAdmFud2Fnb25lci5mYW1pbHkpCiAgKiBD
b3B5cmlnaHQgKEMpIDIwMTYgU3Vrb2xzYWsgU2Frc2h1d29uZyAoc3Vrb2xzYWtAZ21haWwuY29t
KQotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDIwIFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlu
bWVudCBJbmMuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC03Myw3ICs3Myw4IEBAIHZvaWQgSW50bE51
bWJlckZvcm1hdDo6ZmluaXNoQ3JlYXRpb24oVk0KICAgICBBU1NFUlQoaW5oZXJpdHModm0sIGlu
Zm8oKSkpOwogfQogCi12b2lkIEludGxOdW1iZXJGb3JtYXQ6OnZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+
Cit2b2lkIEludGxOdW1iZXJGb3JtYXQ6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwg
VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBJbnRsTnVtYmVyRm9ybWF0KiB0aGlzT2JqZWN0ID0g
anNDYXN0PEludGxOdW1iZXJGb3JtYXQqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lO
SEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC04Myw2ICs4NCw4IEBAIHZvaWQgSW50bE51
bWJlckZvcm1hdDo6dmlzaXRDaGlsZHJlbihKU0MKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2Jq
ZWN0LT5tX2JvdW5kRm9ybWF0KTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEludGxOdW1i
ZXJGb3JtYXQpOworCiBWZWN0b3I8U3RyaW5nPiBJbnRsTnVtYmVyRm9ybWF0Ojpsb2NhbGVEYXRh
KGNvbnN0IFN0cmluZyYgbG9jYWxlLCBSZWxldmFudEV4dGVuc2lvbktleSBrZXkpCiB7CiAgICAg
Ly8gOS4xIEludGVybmFsIHNsb3RzIG9mIFNlcnZpY2UgQ29uc3RydWN0b3JzICYgMTEuMi4zIElu
dGVybmFsIHNsb3RzIChFQ01BLTQwMiAyLjApCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9JbnRsTnVtYmVyRm9ybWF0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSW50bE51bWJlckZvcm1hdC5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTnVtYmVyRm9ybWF0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNiArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDE1IEFuZHkgVmFu
V2Fnb25lciAoYW5keUB2YW53YWdvbmVyLmZhbWlseSkKICAqIENvcHlyaWdodCAoQykgMjAyMCBT
b255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtOTYsNyArOTcsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIEludGxOdW1i
ZXJGb3JtYXQoVk0mLCBTdHJ1Y3R1cmUqKTsKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7
Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwor
ICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBzdGF0aWMgVmVjdG9yPFN0cmluZz4g
bG9jYWxlRGF0YShjb25zdCBTdHJpbmcmLCBSZWxldmFudEV4dGVuc2lvbktleSk7CiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxQbHVyYWxSdWxlcy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFBsdXJhbFJ1bGVzLmNw
cAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50
bFBsdXJhbFJ1bGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBD
b3B5cmlnaHQgKEMpIDIwMTggQW5keSBWYW5XYWdvbmVyIChhbmR5QHZhbndhZ29uZXIuZmFtaWx5
KQotICogQ29weXJpZ2h0IChDKSAyMDE5LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE5LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02MSw3ICs2MSw4IEBA
IHZvaWQgSW50bFBsdXJhbFJ1bGVzOjpmaW5pc2hDcmVhdGlvbihWTSYKICAgICBBU1NFUlQoaW5o
ZXJpdHModm0sIGluZm8oKSkpOwogfQogCi12b2lkIEludGxQbHVyYWxSdWxlczo6dmlzaXRDaGls
ZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5h
bWUgVmlzaXRvcj4KK3ZvaWQgSW50bFBsdXJhbFJ1bGVzOjp2aXNpdENoaWxkcmVuSW1wbChKU0Nl
bGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSW50bFBsdXJhbFJ1bGVzKiB0aGlz
T2JqZWN0ID0ganNDYXN0PEludGxQbHVyYWxSdWxlcyo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19P
QkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTY5LDYgKzcwLDggQEAgdm9p
ZCBJbnRsUGx1cmFsUnVsZXM6OnZpc2l0Q2hpbGRyZW4oSlNDZQogICAgIEJhc2U6OnZpc2l0Q2hp
bGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihJ
bnRsUGx1cmFsUnVsZXMpOworCiBWZWN0b3I8U3RyaW5nPiBJbnRsUGx1cmFsUnVsZXM6OmxvY2Fs
ZURhdGEoY29uc3QgU3RyaW5nJiwgUmVsZXZhbnRFeHRlbnNpb25LZXkpCiB7CiAgICAgcmV0dXJu
IHsgfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxQbHVyYWxSdWxl
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxQbHVy
YWxSdWxlcy5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9JbnRsUGx1cmFsUnVsZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8q
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMTggQW5keSBWYW5XYWdvbmVyIChhbmR5QHZhbndhZ29uZXIu
ZmFtaWx5KQorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjYsNyArNjcsNyBAQCBw
dWJsaWM6CiBwcml2YXRlOgogICAgIEludGxQbHVyYWxSdWxlcyhWTSYsIFN0cnVjdHVyZSopOwog
ICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxk
cmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsK
IAogICAgIHN0YXRpYyBWZWN0b3I8U3RyaW5nPiBsb2NhbGVEYXRhKGNvbnN0IFN0cmluZyYsIFJl
bGV2YW50RXh0ZW5zaW9uS2V5KTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSW50bFJlbGF0aXZlVGltZUZvcm1hdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSW50bFJlbGF0aXZlVGltZUZvcm1hdC5jcHAJKHJldmlzaW9uIDI3
MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxSZWxhdGl2ZVRpbWVG
b3JtYXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdo
dCAoQykgMjAyMCBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgorICogQ29weXJp
Z2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjIsNyArNjMsOCBAQCB2b2lkIEludGxSZWxhdGl2ZVRp
bWVGb3JtYXQ6OmZpbmlzaENyZWF0CiAgICAgQVNTRVJUKGluaGVyaXRzKHZtLCBpbmZvKCkpKTsK
IH0KIAotdm9pZCBJbnRsUmVsYXRpdmVUaW1lRm9ybWF0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCog
Y2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgor
dm9pZCBJbnRsUmVsYXRpdmVUaW1lRm9ybWF0Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNl
bGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxJ
bnRsUmVsYXRpdmVUaW1lRm9ybWF0Kj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhF
UklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNzAsNiArNzIsOCBAQCB2b2lkIEludGxSZWxh
dGl2ZVRpbWVGb3JtYXQ6OnZpc2l0Q2hpbGRyCiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlz
T2JqZWN0LCB2aXNpdG9yKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEludGxSZWxhdGl2
ZVRpbWVGb3JtYXQpOworCiBWZWN0b3I8U3RyaW5nPiBJbnRsUmVsYXRpdmVUaW1lRm9ybWF0Ojps
b2NhbGVEYXRhKGNvbnN0IFN0cmluZyYgbG9jYWxlLCBSZWxldmFudEV4dGVuc2lvbktleSBrZXkp
CiB7CiAgICAgQVNTRVJUX1VOVVNFRChrZXksIGtleSA9PSBSZWxldmFudEV4dGVuc2lvbktleTo6
TnUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFJlbGF0aXZlVGlt
ZUZvcm1hdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lu
dGxSZWxhdGl2ZVRpbWVGb3JtYXQuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSW50bFJlbGF0aXZlVGltZUZvcm1hdC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAyMCBTb255IEludGVyYWN0
aXZlIEVudGVydGFpbm1lbnQgSW5jLgotICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMC0yMDIxIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtNjQsNyArNjQsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIEludGxSZWxhdGl2ZVRpbWVG
b3JtYXQoVk0mLCBTdHJ1Y3R1cmUqKTsKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7Ci0g
ICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAg
IERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBzdGF0aWMgVmVjdG9yPFN0cmluZz4gbG9j
YWxlRGF0YShjb25zdCBTdHJpbmcmLCBSZWxldmFudEV4dGVuc2lvbktleSk7CiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxTZWdtZW50SXRlcmF0b3IuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxTZWdtZW50SXRlcmF0
b3IuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9JbnRsU2VnbWVudEl0ZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAK
IC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjQsMTMgKzY1LDE2IEBAIHZvaWQg
SW50bFNlZ21lbnRJdGVyYXRvcjo6ZmluaXNoQ3JlYXRpb24KICAgICBtX3N0cmluZy5zZXQodm0s
IHRoaXMsIHN0cmluZyk7CiB9CiAKLXZvaWQgSW50bFNlZ21lbnRJdGVyYXRvcjo6dmlzaXRDaGls
ZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5h
bWUgVmlzaXRvcj4KK3ZvaWQgSW50bFNlZ21lbnRJdGVyYXRvcjo6dmlzaXRDaGlsZHJlbkltcGwo
SlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGF1dG8qIHRoaXNPYmplY3Qg
PSBqc0Nhc3Q8SW50bFNlZ21lbnRJdGVyYXRvcio+KGNlbGwpOwogICAgIEJhc2U6OnZpc2l0Q2hp
bGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVj
dC0+bV9zdHJpbmcpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSW50bFNlZ21lbnRJdGVy
YXRvcik7CisKIEpTT2JqZWN0KiBJbnRsU2VnbWVudEl0ZXJhdG9yOjpuZXh0KEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFNlZ21lbnRJdGVyYXRvci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxTZWdtZW50
SXRlcmF0b3IuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSW50bFNlZ21lbnRJdGVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBA
QAogLyoKICAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01Myw3ICs1NCw3IEBAIHB1Ymxp
YzoKIAogICAgIEpTT2JqZWN0KiBuZXh0KEpTR2xvYmFsT2JqZWN0Kik7CiAKLSAgICBzdGF0aWMg
dm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9W
SVNJVF9DSElMRFJFTjsKIAogcHJpdmF0ZToKICAgICBJbnRsU2VnbWVudEl0ZXJhdG9yKFZNJiwg
U3RydWN0dXJlKiwgc3RkOjp1bmlxdWVfcHRyPFVCcmVha0l0ZXJhdG9yLCBVQnJlYWtJdGVyYXRv
ckRlbGV0ZXI+JiYsIEJveDxWZWN0b3I8VUNoYXI+PiYmLCBJbnRsU2VnbWVudGVyOjpHcmFudWxh
cml0eSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsU2VnbWVudHMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxTZWdt
ZW50cy5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0ludGxTZWdtZW50cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKgog
ICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEwOSwxMSArMTEwLDE0IEBAIEpTT2JqZWN0
KiBJbnRsU2VnbWVudHM6OmNyZWF0ZVNlZ21lbnRJdGUKICAgICByZXR1cm4gSW50bFNlZ21lbnRJ
dGVyYXRvcjo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QtPnNlZ21lbnRJdGVyYXRvclN0cnVjdHVy
ZSgpLCBXVEZNb3ZlKHNlZ21lbnRlciksIG1fYnVmZmVyLCBtX3N0cmluZy5nZXQoKSwgbV9ncmFu
dWxhcml0eSk7CiB9CiAKLXZvaWQgSW50bFNlZ21lbnRzOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCog
Y2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgor
dm9pZCBJbnRsU2VnbWVudHM6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRv
ciYgdmlzaXRvcikKIHsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEludGxTZWdtZW50
cyo+KGNlbGwpOwogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7
CiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9zdHJpbmcpOwogfQogCitERUZJTkVf
VklTSVRfQ0hJTERSRU4oSW50bFNlZ21lbnRzKTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsU2VnbWVudHMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsU2VnbWVudHMuaAkocmV2aXNp
b24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFNlZ21lbnRz
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAy
MDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTU0LDcgKzU1LDcgQEAgcHVibGljOgogICAgIEpTVmFsdWUgY29udGFpbmlu
ZyhKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUgaW5kZXhWYWx1ZSk7CiAgICAgSlNPYmplY3QqIGNy
ZWF0ZVNlZ21lbnRJdGVyYXRvcihKU0dsb2JhbE9iamVjdCopOwogCi0gICAgc3RhdGljIHZvaWQg
dmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRf
Q0hJTERSRU47CiAKIHByaXZhdGU6CiAgICAgSW50bFNlZ21lbnRzKFZNJiwgU3RydWN0dXJlKiwg
c3RkOjp1bmlxdWVfcHRyPFVCcmVha0l0ZXJhdG9yLCBVQnJlYWtJdGVyYXRvckRlbGV0ZXI+JiYs
IEJveDxWZWN0b3I8VUNoYXI+PiYmLCBJbnRsU2VnbWVudGVyOjpHcmFudWxhcml0eSk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZp
ZXcuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0FycmF5QnVmZmVyVmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xNTUsNyArMTU1LDgg
QEAgdm9pZCBKU0FycmF5QnVmZmVyVmlldzo6ZmluaXNoQ3JlYXRpb24oVgogICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKLXZvaWQgSlNBcnJheUJ1ZmZlclZpZXc6OnZpc2l0
Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5
cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTQXJyYXlCdWZmZXJWaWV3Ojp2aXNpdENoaWxkcmVuSW1w
bChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNBcnJheUJ1ZmZlclZp
ZXcqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNBcnJheUJ1ZmZlclZpZXcqPihjZWxsKTsKICAgICBB
U1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC0xNjksNiAr
MTcwLDggQEAgdm9pZCBKU0FycmF5QnVmZmVyVmlldzo6dmlzaXRDaGlsZHJlbihKUwogICAgIH0K
IH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTQXJyYXlCdWZmZXJWaWV3KTsKKwogYm9vbCBK
U0FycmF5QnVmZmVyVmlldzo6cHV0KAogICAgIEpTQ2VsbCogY2VsbCwgSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwK
ICAgICBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3LmgJKHJldmlzaW9uIDI3MjgzMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3LmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjAg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0xNzIsNyArMTcyLDcgQEAgcHJvdGVjdGVkOgogICAgIAogICAgIHN0YXRp
YyBib29sIHB1dChKU0NlbGwqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSwgSlNWYWx1
ZSwgUHV0UHJvcGVydHlTbG90Jik7CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpT
Q2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKICAgICAK
IHB1YmxpYzoKICAgICBUeXBlZEFycmF5TW9kZSBtb2RlKCkgY29uc3QgeyByZXR1cm4gbV9tb2Rl
OyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5SXRlcmF0b3Iu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlJ
dGVyYXRvci5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTQXJyYXlJdGVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjgsMTEgKzY4LDE0IEBA
IHZvaWQgSlNBcnJheUl0ZXJhdG9yOjpmaW5pc2hDcmVhdGlvbihWTSYKICAgICAgICAgQmFzZTo6
aW50ZXJuYWxGaWVsZChpbmRleCkuc2V0KHZtLCB0aGlzLCB2YWx1ZXNbaW5kZXhdKTsKIH0KIAot
dm9pZCBKU0FycmF5SXRlcmF0b3I6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90Vmlz
aXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTQXJyYXlJ
dGVyYXRvcjo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9y
KQogewogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNBcnJheUl0ZXJhdG9yKj4oY2Vs
bCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwog
ICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CiB9CiAKK0RFRklO
RV9WSVNJVF9DSElMRFJFTihKU0FycmF5SXRlcmF0b3IpOworCiB9IC8vIG5hbWVzcGFjZSBKU0MK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlJdGVyYXRvci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlJdGVyYXRv
ci5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0FycmF5SXRlcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDIwLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03OCw3ICs3OCw3IEBAIHB1YmxpYzoKIAog
ICAgIERFQ0xBUkVfSU5GTzsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiBwcml2YXRl
OgogICAgIEpTQXJyYXlJdGVyYXRvcihWTSYsIFN0cnVjdHVyZSopOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBc3luY0dlbmVyYXRvci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBc3luY0dlbmVyYXRvci5jcHAJKHJldmlz
aW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXN5bmNHZW5l
cmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTktMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU5LDExICs1OSwxNCBAQCB2b2lkIEpTQXN5bmNHZW5l
cmF0b3I6OmZpbmlzaENyZWF0aW9uKFZNCiAgICAgICAgIGludGVybmFsRmllbGQoaW5kZXgpLnNl
dCh2bSwgdGhpcywgdmFsdWVzW2luZGV4XSk7CiB9CiAKLXZvaWQgSlNBc3luY0dlbmVyYXRvcjo6
dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxh
dGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNBc3luY0dlbmVyYXRvcjo6dmlzaXRDaGlsZHJl
bkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGF1dG8qIHRoaXNP
YmplY3QgPSBqc0Nhc3Q8SlNBc3luY0dlbmVyYXRvcio+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19P
QkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKICAgICBCYXNlOjp2aXNpdENoaWxk
cmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNB
c3luY0dlbmVyYXRvcik7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNBc3luY0dlbmVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXN5bmNHZW5lcmF0b3IuaAkocmV2aXNpb24gMjcy
ODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBc3luY0dlbmVyYXRvci5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
OSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkt
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTk1LDcgKzk1LDcgQEAgcHVibGljOgogCiAgICAgREVDTEFSRV9FWFBP
UlRfSU5GTzsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZp
c2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiBwcml2YXRlOgogICAgIEpT
QXN5bmNHZW5lcmF0b3IoVk0mLCBTdHJ1Y3R1cmUqKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTQmlnSW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0JpZ0ludC5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQmlnSW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2
ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQ2FpbyBMaW1hIDx0aWNhaW9saW1h
QGdtYWlsLmNvbT4KLSAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIwIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjcs
NyArNjcsOCBAQCBKU0JpZ0ludDo6SlNCaWdJbnQoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0CiAgICAg
LCBtX2RhdGEodm0sIHRoaXMsIGRhdGEsIGxlbmd0aCkKIHsgfQogCi12b2lkIEpTQmlnSW50Ojp2
aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0
ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0JpZ0ludDo6dmlzaXRDaGlsZHJlbkltcGwoSlND
ZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBq
c0Nhc3Q8SlNCaWdJbnQqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRo
aXNPYmplY3QsIGluZm8oKSk7CkBAIC03Niw2ICs3Nyw4IEBAIHZvaWQgSlNCaWdJbnQ6OnZpc2l0
Q2hpbGRyZW4oSlNDZWxsKiBjZWwKICAgICAgICAgdmlzaXRvci5tYXJrQXV4aWxpYXJ5KGRhdGEp
OwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNCaWdJbnQpOworCiB2b2lkIEpTQmlnSW50
Ojppbml0aWFsaXplKEluaXRpYWxpemF0aW9uVHlwZSBpbml0VHlwZSkKIHsKICAgICBpZiAoaW5p
dFR5cGUgPT0gSW5pdGlhbGl6YXRpb25UeXBlOjpXaXRoWmVybykKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTQmlnSW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNCaWdJbnQuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCaWdJbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2
ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQ2FpbyBMaW1hIDx0aWNhaW9saW1h
QGdtYWlsLmNvbT4KLSAqIENvcHlyaWdodCAoQykgMjAxOS0yMDIwIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOS0yMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTAs
NyArNTAsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1
cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgU3RydWN0dXJlSXNJbW1vcnRhbCB8IE92
ZXJyaWRlc1RvVGhpczsKICAgICBmcmllbmQgY2xhc3MgQ2FjaGVkQmlnSW50OwogCi0gICAgc3Rh
dGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xB
UkVfVklTSVRfQ0hJTERSRU47CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vi
c3BhY2VBY2Nlc3M+CiAgICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0p
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JvdW5kRnVuY3Rpb24uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQm91bmRGdW5j
dGlvbi5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTQm91bmRGdW5jdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNDksNyAr
MjQ5LDggQEAgdm9pZCBKU0JvdW5kRnVuY3Rpb246OmZpbmlzaENyZWF0aW9uKFZNJgogICAgIEFT
U0VSVChpbmhlcml0cyh2bSwgaW5mbygpKSk7CiB9CiAKLXZvaWQgSlNCb3VuZEZ1bmN0aW9uOjp2
aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0
ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0JvdW5kRnVuY3Rpb246OnZpc2l0Q2hpbGRyZW5J
bXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU0JvdW5kRnVuY3Rp
b24qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNCb3VuZEZ1bmN0aW9uKj4oY2VsbCk7CiAgICAgQVNT
RVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtMjYxLDQgKzI2
Miw2IEBAIHZvaWQgSlNCb3VuZEZ1bmN0aW9uOjp2aXNpdENoaWxkcmVuKEpTQ2UKICAgICB2aXNp
dG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX25hbWVNYXlCZU51bGwpOwogfQogCitERUZJTkVfVklT
SVRfQ0hJTERSRU4oSlNCb3VuZEZ1bmN0aW9uKTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JvdW5kRnVuY3Rpb24uaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JvdW5kRnVuY3Rpb24uaAko
cmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCb3Vu
ZEZ1bmN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDExLTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDExLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC04NCw3ICs4NCw3IEBAIHByaXZhdGU6CiAg
ICAgSlNCb3VuZEZ1bmN0aW9uKFZNJiwgTmF0aXZlRXhlY3V0YWJsZSosIEpTR2xvYmFsT2JqZWN0
KiwgU3RydWN0dXJlKiwgSlNPYmplY3QqIHRhcmdldEZ1bmN0aW9uLCBKU1ZhbHVlIGJvdW5kVGhp
cywgSlNJbW11dGFibGVCdXR0ZXJmbHkqIGJvdW5kQXJncywgSlNTdHJpbmcqIG5hbWVNYXlCZU51
bGwsIGRvdWJsZSBsZW5ndGgpOwogCiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOwotICAg
IHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBE
RUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgV3JpdGVCYXJyaWVyPEpTT2JqZWN0PiBtX3Rh
cmdldEZ1bmN0aW9uOwogICAgIFdyaXRlQmFycmllcjxVbmtub3duPiBtX2JvdW5kVGhpczsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2FsbGVlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NhbGxlZS5jcHAJKHJldmlzaW9u
IDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2FsbGVlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQs
IDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE0LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC01MCw3ICs1MCw4IEBAIHZvaWQgSlNDYWxsZWU6OmZpbmlzaENy
ZWF0aW9uKFZNJiB2bSkKICAgICBBU1NFUlQoaW5oZXJpdHModm0sIGluZm8oKSkpOwogfQogCi12
b2lkIEpTQ2FsbGVlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZp
c2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0NhbGxlZTo6dmlzaXRD
aGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTQ2Fs
bGVlKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQ2FsbGVlKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dD
X09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNTksNCArNjAsNiBAQCB2
b2lkIEpTQ2FsbGVlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsCiAgICAgdmlzaXRvci5hcHBl
bmQodGhpc09iamVjdC0+bV9zY29wZSk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU0Nh
bGxlZSk7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNDYWxsZWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0NhbGxlZS5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0NhbGxlZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEwMCw3ICsxMDAsNyBAQCBw
cm90ZWN0ZWQ6CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOwogICAgIHVzaW5nIEJhc2U6
OmZpbmlzaENyZWF0aW9uOwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwq
LCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKIHByaXZhdGU6
CiAgICAgZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAkod29ya2luZyBjb3B5KQpAQCAtMSw3ICsx
LDcgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDEgSGFycmkgUG9ydGVuIChwb3J0
ZW5Aa2RlLm9yZykKICAqICBDb3B5cmlnaHQgKEMpIDIwMDEgUGV0ZXIgS2VsbHkgKHBta0Bwb3N0
LmNvbSkKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTMyLDYgKzMyLDcgQEAKICNp
bmNsdWRlICJKU0xvY2suaCIKICNpbmNsdWRlICJKU1R5cGVJbmZvLmgiCiAjaW5jbHVkZSAiU2xv
dFZpc2l0b3IuaCIKKyNpbmNsdWRlICJTbG90VmlzaXRvck1hY3Jvcy5oIgogI2luY2x1ZGUgIlN1
YnNwYWNlQWNjZXNzLmgiCiAjaW5jbHVkZSAiVHlwZWRBcnJheVR5cGUuaCIKICNpbmNsdWRlICJX
cml0ZUJhcnJpZXIuaCIKQEAgLTE2Nyw4ICsxNjgsOCBAQCBwdWJsaWM6CiAgICAgc2l6ZV90IGVz
dGltYXRlZFNpemVJbkJ5dGVzKFZNJikgY29uc3Q7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3Rh
dGljIHNpemVfdCBlc3RpbWF0ZWRTaXplKEpTQ2VsbCosIFZNJik7CiAKLSAgICBzdGF0aWMgdm9p
ZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7Ci0gICAgc3RhdGljIHZvaWQg
dmlzaXRPdXRwdXRDb25zdHJhaW50cyhKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xB
UkVfVklTSVRfQ0hJTERSRU5fV0lUSF9NT0RJRklFUihpbmxpbmUpOworICAgIERFQ0xBUkVfVklT
SVRfT1VUUFVUX0NPTlNUUkFJTlRTX1dJVEhfTU9ESUZJRVIoaW5saW5lKTsKIAogICAgIEpTX0VY
UE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGFuYWx5emVIZWFwKEpTQ2VsbCosIEhlYXBBbmFseXpl
ciYpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGxJbmxpbmVz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsSW5s
aW5lcy5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0NlbGxJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDEyLTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNSw2ICsyNSw3IEBACiAKICNw
cmFnbWEgb25jZQogCisjaW5jbHVkZSAiQWJzdHJhY3RTbG90VmlzaXRvcklubGluZXMuaCIKICNp
bmNsdWRlICJBbGxvY2F0b3JGb3JNb2RlLmgiCiAjaW5jbHVkZSAiQWxsb2NhdG9ySW5saW5lcy5o
IgogI2luY2x1ZGUgIkNvbXBsZXRlU3Vic3BhY2VJbmxpbmVzLmgiCkBAIC0xNDEsMTUgKzE0Miwy
MSBAQCBBTFdBWVNfSU5MSU5FIFN0cnVjdHVyZSogSlNDZWxsOjpzdHJ1Y3R1CiAgICAgcmV0dXJu
IHZtLmdldFN0cnVjdHVyZShtX3N0cnVjdHVyZUlEKTsKIH0KIAotaW5saW5lIHZvaWQgSlNDZWxs
Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1w
bGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0NlbGw6OnZpc2l0Q2hpbGRyZW5JbXBsKEpT
Q2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB2aXNpdG9yLmFwcGVuZFVuYmFy
cmllcmVkKGNlbGwtPnN0cnVjdHVyZSh2aXNpdG9yLnZtKCkpKTsKIH0KIAotaW5saW5lIHZvaWQg
SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzKEpTQ2VsbCosIFNsb3RWaXNpdG9yJikKK0RF
RklORV9WSVNJVF9DSElMRFJFTl9XSVRIX01PRElGSUVSKGlubGluZSwgSlNDZWxsKTsKKwordGVt
cGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK0FMV0FZU19JTkxJTkUgdm9pZCBKU0NlbGw6OnZpc2l0
T3V0cHV0Q29uc3RyYWludHNJbXBsKEpTQ2VsbCosIFZpc2l0b3ImKQogewogfQogCitERUZJTkVf
VklTSVRfT1VUUFVUX0NPTlNUUkFJTlRTX1dJVEhfTU9ESUZJRVIoaW5saW5lLCBKU0NlbGwpOwor
CiBBTFdBWVNfSU5MSU5FIFZNJiBDYWxsRnJhbWU6OmRlcHJlY2F0ZWRWTSgpIGNvbnN0CiB7CiAg
ICAgSlNDZWxsKiBjYWxsZWUgPSB0aGlzLT5jYWxsZWUoKS5hc0NlbGwoKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ3VzdG9tR2V0dGVyU2V0dGVyRnVuY3Rpb24uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ3VzdG9tR2V0
dGVyU2V0dGVyRnVuY3Rpb24uY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0N1c3RvbUdldHRlclNldHRlckZ1bmN0aW9uLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUsIDIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIw
MjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC04NSw3ICs4NSw4IEBAIEpTQ3VzdG9tR2V0dGVyU2V0dGVyRnVuY3Rpb24q
IEpTQ3VzdG9tR2UKICAgICByZXR1cm4gZnVuY3Rpb247CiB9CiAKLXZvaWQgSlNDdXN0b21HZXR0
ZXJTZXR0ZXJGdW5jdGlvbjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9y
JiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNDdXN0b21HZXR0
ZXJTZXR0ZXJGdW5jdGlvbjo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9y
JiB2aXNpdG9yKQogewogICAgIEpTQ3VzdG9tR2V0dGVyU2V0dGVyRnVuY3Rpb24qIHRoaXNPYmpl
Y3QgPSBqc0Nhc3Q8SlNDdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbio+KGNlbGwpOwogICAgIEFT
U0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTk0LDYgKzk1
LDggQEAgdm9pZCBKU0N1c3RvbUdldHRlclNldHRlckZ1bmN0aW9uOjp2aXNpdAogICAgIHZpc2l0
b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fZ2V0dGVyU2V0dGVyKTsKIH0KIAorREVGSU5FX1ZJU0lU
X0NISUxEUkVOKEpTQ3VzdG9tR2V0dGVyU2V0dGVyRnVuY3Rpb24pOworCiB2b2lkIEpTQ3VzdG9t
R2V0dGVyU2V0dGVyRnVuY3Rpb246OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgTmF0aXZlRXhlY3V0
YWJsZSogZXhlY3V0YWJsZSwgQ3VzdG9tR2V0dGVyU2V0dGVyKiBnZXR0ZXJTZXR0ZXIsIGNvbnN0
IFN0cmluZyYgbmFtZSkKIHsKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSwgZXhlY3V0YWJs
ZSwgaXNTZXR0ZXIoKSwgbmFtZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0N1c3RvbUdldHRlclNldHRlckZ1bmN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbi5oCShyZXZp
c2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0N1c3RvbUdl
dHRlclNldHRlckZ1bmN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02Myw3ICs2Myw3IEBAIHB1
YmxpYzoKIHByaXZhdGU6CiAgICAgSlNDdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbihWTSYsIE5h
dGl2ZUV4ZWN1dGFibGUqLCBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSosIFR5cGUsIGNvbnN0
IFByb3BlcnR5TmFtZSYpOwogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBOYXRpdmVFeGVj
dXRhYmxlKiwgQ3VzdG9tR2V0dGVyU2V0dGVyKiwgY29uc3QgU3RyaW5nJik7Ci0gICAgc3RhdGlj
IHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVf
VklTSVRfQ0hJTERSRU47CiAKICAgICBXcml0ZUJhcnJpZXI8Q3VzdG9tR2V0dGVyU2V0dGVyPiBt
X2dldHRlclNldHRlcjsKICAgICBUeXBlIG1fdHlwZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTRmluYWxpemF0aW9uUmVnaXN0cnkuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRmluYWxpemF0aW9uUmVnaXN0cnkuY3BwCShy
ZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ZpbmFs
aXphdGlvblJlZ2lzdHJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAyMC0yMDIxIEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNs
dWRlICJjb25maWcuaCIKICNpbmNsdWRlICJKU0ZpbmFsaXphdGlvblJlZ2lzdHJ5LmgiCiAKKyNp
bmNsdWRlICJBYnN0cmFjdFNsb3RWaXNpdG9yLmgiCiAjaW5jbHVkZSAiRGVmZXJyZWRXb3JrVGlt
ZXIuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNJbnRlcm5hbEZpZWxk
T2JqZWN0SW1wbElubGluZXMuaCIKQEAgLTYwLDcgKzYxLDggQEAgdm9pZCBKU0ZpbmFsaXphdGlv
blJlZ2lzdHJ5OjpmaW5pc2hDcmVhdAogICAgIGdsb2JhbE9iamVjdC0+Z2xvYmFsT2JqZWN0TWV0
aG9kVGFibGUoKS0+Y3VycmVudFNjcmlwdEV4ZWN1dGlvbk93bmVyKGdsb2JhbE9iamVjdCk7CiB9
CiAKLXZvaWQgSlNGaW5hbGl6YXRpb25SZWdpc3RyeTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNl
bGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3Zv
aWQgSlNGaW5hbGl6YXRpb25SZWdpc3RyeTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxs
LCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4oY2VsbCwgdmlz
aXRvcik7CiAKQEAgLTgwLDEzICs4MiwxNSBAQCB2b2lkIEpTRmluYWxpemF0aW9uUmVnaXN0cnk6
OnZpc2l0Q2hpbGRyCiAgICAgZm9yIChhdXRvJiBob2xkaW5ncyA6IHRoaXNPYmplY3QtPm1fbm9V
bnJlZ2lzdHJhdGlvbkRlYWQpCiAgICAgICAgIHZpc2l0b3IuYXBwZW5kKGhvbGRpbmdzKTsKIAot
ICAgIHNpemVfdCB0b3RhbEJ1ZmZlclNpemVzSW5CeXRlcyA9IHRoaXNPYmplY3QtPm1fZGVhZFJl
Z2lzdHJhdGlvbnMuY2FwYWNpdHkoKSAqIHNpemVvZihkZWNsdHlwZSh0aGlzT2JqZWN0LT5tX2Rl
YWRSZWdpc3RyYXRpb25zKTo6S2V5VmFsdWVQYWlyVHlwZSk7Ci0gICAgdG90YWxCdWZmZXJTaXpl
c0luQnl0ZXMgKz0gdGhpc09iamVjdC0+bV9saXZlUmVnaXN0cmF0aW9ucy5jYXBhY2l0eSgpICog
c2l6ZW9mKGRlY2x0eXBlKHRoaXNPYmplY3QtPm1fZGVhZFJlZ2lzdHJhdGlvbnMpOjpLZXlWYWx1
ZVBhaXJUeXBlKTsKKyAgICBzaXplX3QgdG90YWxCdWZmZXJTaXplc0luQnl0ZXMgPSB0aGlzT2Jq
ZWN0LT5tX2RlYWRSZWdpc3RyYXRpb25zLmNhcGFjaXR5KCkgKiBzaXplb2YodHlwZW5hbWUgZGVj
bHR5cGUodGhpc09iamVjdC0+bV9kZWFkUmVnaXN0cmF0aW9ucyk6OktleVZhbHVlUGFpclR5cGUp
OworICAgIHRvdGFsQnVmZmVyU2l6ZXNJbkJ5dGVzICs9IHRoaXNPYmplY3QtPm1fbGl2ZVJlZ2lz
dHJhdGlvbnMuY2FwYWNpdHkoKSAqIHNpemVvZih0eXBlbmFtZSBkZWNsdHlwZSh0aGlzT2JqZWN0
LT5tX2RlYWRSZWdpc3RyYXRpb25zKTo6S2V5VmFsdWVQYWlyVHlwZSk7CiAgICAgdG90YWxCdWZm
ZXJTaXplc0luQnl0ZXMgKz0gdGhpc09iamVjdC0+bV9ub1VucmVnaXN0cmF0aW9uTGl2ZS5jYXBh
Y2l0eSgpICogc2l6ZW9mKGRlY2x0eXBlKHRoaXNPYmplY3QtPm1fbm9VbnJlZ2lzdHJhdGlvbkxp
dmUudGFrZUxhc3QoKSkpOwogICAgIHRvdGFsQnVmZmVyU2l6ZXNJbkJ5dGVzICs9IHRoaXNPYmpl
Y3QtPm1fbm9VbnJlZ2lzdHJhdGlvbkRlYWQuY2FwYWNpdHkoKSAqIHNpemVvZihkZWNsdHlwZSh0
aGlzT2JqZWN0LT5tX25vVW5yZWdpc3RyYXRpb25MaXZlLnRha2VMYXN0KCkpKTsKICAgICB2aXNp
dG9yLnZtKCkuaGVhcC5yZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQodG90YWxCdWZmZXJTaXplc0lu
Qnl0ZXMpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNGaW5hbGl6YXRpb25SZWdpc3Ry
eSk7CisKIHZvaWQgSlNGaW5hbGl6YXRpb25SZWdpc3RyeTo6ZGVzdHJveShKU0NlbGwqIHRhYmxl
KQogewogICAgIHN0YXRpY19jYXN0PEpTRmluYWxpemF0aW9uUmVnaXN0cnkqPih0YWJsZSktPn5K
U0ZpbmFsaXphdGlvblJlZ2lzdHJ5KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0ZpbmFsaXphdGlvblJlZ2lzdHJ5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNGaW5hbGl6YXRpb25SZWdpc3RyeS5oCShyZXZpc2lvbiAyNzI4
MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ZpbmFsaXphdGlvblJlZ2lz
dHJ5LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDIwIEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMjAtMjAyMSBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC03MCw3ICs3MCw3IEBAIHB1YmxpYzoKICAgICBERUNMQVJF
X0VYUE9SVF9JTkZPOwogCiAgICAgdm9pZCBmaW5hbGl6ZVVuY29uZGl0aW9uYWxseShWTSYpOwot
ICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAg
ICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxs
Kik7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOwog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmNwcAko
cmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5j
dGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSw3IEBACiAvKgogICogIENvcHlyaWdo
dCAoQykgMTk5OS0yMDAyIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCiAgKiAgQ29weXJp
Z2h0IChDKSAyMDAxIFBldGVyIEtlbGx5IChwbWtAcG9zdC5jb20pCi0gKiAgQ29weXJpZ2h0IChD
KSAyMDAzLTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdo
dCAoQykgMjAwMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqICBDb3B5
cmlnaHQgKEMpIDIwMDcgQ2FtZXJvbiBad2FyaWNoIChjd3p3YXJpY2hAdXdhdGVybG9vLmNhKQog
ICogIENvcHlyaWdodCAoQykgMjAwNyBNYWtzIE9ybG92aWNoCiAgKiAgQ29weXJpZ2h0IChDKSAy
MDE1IENhbm9uIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KQEAgLTI1Miw3ICsyNTIsOCBAQCBj
b25zdCBTb3VyY2VDb2RlKiBKU0Z1bmN0aW9uOjpzb3VyY2VDb2RlCiAgICAgcmV0dXJuICZqc0V4
ZWN1dGFibGUoKS0+c291cmNlKCk7CiB9CiAgICAgCi12b2lkIEpTRnVuY3Rpb246OnZpc2l0Q2hp
bGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVu
YW1lIFZpc2l0b3I+Cit2b2lkIEpTRnVuY3Rpb246OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCog
Y2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU0Z1bmN0aW9uKiB0aGlzT2JqZWN0ID0g
anNDYXN0PEpTRnVuY3Rpb24qPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRT
KHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC0yNjEsNiArMjYyLDggQEAgdm9pZCBKU0Z1bmN0aW9u
Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogYwogICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQo
Yml0d2lzZV9jYXN0PEpTQ2VsbCo+KGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KHRoaXNPYmplY3Qt
Pm1fZXhlY3V0YWJsZU9yUmFyZURhdGEpICYgfnJhcmVEYXRhVGFnKSk7CiB9CiAKK0RFRklORV9W
SVNJVF9DSElMRFJFTihKU0Z1bmN0aW9uKTsKKwogQ2FsbERhdGEgSlNGdW5jdGlvbjo6Z2V0Q2Fs
bERhdGEoSlNDZWxsKiBjZWxsKQogewogICAgIC8vIEtlZXAgdGhpcyBmdW5jdGlvbiBPSyBmb3Ig
aW52b2NhdGlvbiBmcm9tIGNvbmN1cnJlbnQgY29tcGlsZXJzLgpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uaAkocmV2aXNpb24gMjcyODMwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDYgKzEsNiBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMCBIYXJyaSBQb3J0
ZW4gKHBvcnRlbkBrZGUub3JnKQotICogIENvcHlyaWdodCAoQykgMjAwMy0yMDIwIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAyMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA3IENhbWVy
b24gWndhcmljaCAoY3d6d2FyaWNoQHV3YXRlcmxvby5jYSkKICAqICBDb3B5cmlnaHQgKEMpIDIw
MDcgTWFrcyBPcmxvdmljaAogICoKQEAgLTE4MCw3ICsxODAsNyBAQCBwcm90ZWN0ZWQ6CiAKICAg
ICBzdGF0aWMgYm9vbCBkZWxldGVQcm9wZXJ0eShKU0NlbGwqLCBKU0dsb2JhbE9iamVjdCosIFBy
b3BlcnR5TmFtZSwgRGVsZXRlUHJvcGVydHlTbG90Jik7CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNp
dENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElM
RFJFTjsKIAogcHJpdmF0ZToKICAgICBzdGF0aWMgSlNGdW5jdGlvbiogY3JlYXRlSW1wbChWTSYg
dm0sIEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJsZSwgSlNTY29wZSogc2NvcGUsIFN0cnVj
dHVyZSogc3RydWN0dXJlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNH
ZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTR2VuZXJhdG9yLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU5LDExICs1OSwxNCBA
QCB2b2lkIEpTR2VuZXJhdG9yOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCiAgICAgICAgIGludGVy
bmFsRmllbGQoaW5kZXgpLnNldCh2bSwgdGhpcywgdmFsdWVzW2luZGV4XSk7CiB9CiAKLXZvaWQg
SlNHZW5lcmF0b3I6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlz
aXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTR2VuZXJhdG9yOjp2aXNp
dENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0
byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0dlbmVyYXRvcio+KGNlbGwpOwogICAgIEFTU0VSVF9H
Q19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKICAgICBCYXNlOjp2aXNpdENo
aWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4o
SlNHZW5lcmF0b3IpOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTR2VuZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmF0b3IuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmF0b3IuaAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE5LTIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC05
NCw3ICs5NCw3IEBAIHB1YmxpYzoKIAogICAgIERFQ0xBUkVfRVhQT1JUX0lORk87CiAKLSAgICBz
dGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVD
TEFSRV9WSVNJVF9DSElMRFJFTjsKIAogcHJpdmF0ZToKICAgICBKU0dlbmVyYXRvcihWTSYsIFN0
cnVjdHVyZSopOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmlj
VHlwZWRBcnJheVZpZXcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlldy5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlldy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIw
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMzEzLDcgKzMxMyw3IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIHZvaWQg
Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlO
YW1lQXJyYXkmLCBEb250RW51bVByb3BlcnRpZXNNb2RlKTsKIAogICAgIHN0YXRpYyBzaXplX3Qg
ZXN0aW1hdGVkU2l6ZShKU0NlbGwqLCBWTSYpOwotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwog
CiAgICAgLy8gUmV0dXJucyB0cnVlIGlmIHN1Y2Nlc3NmdWwsIGFuZCBmYWxzZSBvbiBlcnJvcjsg
aXQgd2lsbCB0aHJvdyBvbiBlcnJvci4KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPdGhlckFkYXB0
b3I+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFy
cmF5Vmlld0lubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaAkocmV2aXNpb24gMjcyODMwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdJ
bmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01MTcsNyArNTE3LDggQEAgc2l6ZV90IEpTR2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OgogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFw
dG9yPgotdm9pZCBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6dmlzaXRDaGlsZHJl
bihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUg
VmlzaXRvcj4KK3ZvaWQgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OnZpc2l0Q2hp
bGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU0dlbmVy
aWNUeXBlZEFycmF5VmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0dlbmVyaWNUeXBlZEFycmF5
Vmlldyo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwg
aW5mbygpKTsKQEAgLTU1NSw0ICs1NTYsNiBAQCB2b2lkIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3
PEFkYXB0b3I+Ojp2CiAgICAgfQogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU5fV0lUSF9NT0RJ
RklFUih0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPiwgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8
QWRhcHRvcj4pOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAJKHJldmlzaW9uIDI3MjgzMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAy
MCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDct
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIw
MDggQ2FtZXJvbiBad2FyaWNoIChjd3p3YXJpY2hAdXdhdGVybG9vLmNhKQogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dApAQCAtMTg5Miw3ICsxODkyLDggQEAgdm9pZCBKU0dsb2JhbE9iamVjdDo6cmVzZXRQcm90
b3R5cGUoVk0mIAogICAgIHNldEdsb2JhbFRoaXModm0sIEpTUHJveHk6OmNyZWF0ZSh2bSwgSlNQ
cm94eTo6Y3JlYXRlU3RydWN0dXJlKHZtLCB0aGlzLCBwcm90b3R5cGUsIFB1cmVGb3J3YXJkaW5n
UHJveHlUeXBlKSwgdGhpcykpOwogfQogCi12b2lkIEpTR2xvYmFsT2JqZWN0Ojp2aXNpdENoaWxk
cmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBWaXNpdG9yPgordm9pZCBKU0dsb2JhbE9iamVjdDo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxs
KiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogeyAKICAgICBKU0dsb2JhbE9iamVjdCogdGhpc09i
amVjdCA9IGpzQ2FzdDxKU0dsb2JhbE9iamVjdCo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpF
Q1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTIwNjAsNiArMjA2MSw4IEBAIHZv
aWQgSlNHbG9iYWxPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWwKICAgICB0aGlzT2JqZWN0LT5t
X3JlZ0V4cEdsb2JhbERhdGEudmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7CiB9CiAKK0RFRklORV9W
SVNJVF9DSElMRFJFTl9XSVRIX01PRElGSUVSKEpTX0VYUE9SVF9QUklWQVRFLCBKU0dsb2JhbE9i
amVjdCk7CisKIENhbGxGcmFtZSogSlNHbG9iYWxPYmplY3Q6OmRlcHJlY2F0ZWRDYWxsRnJhbWVG
b3JEZWJ1Z2dlcigpCiB7CiAgICAgcmV0dXJuIENhbGxGcmFtZTo6Y3JlYXRlKG1fZGVwcmVjYXRl
ZENhbGxGcmFtZUZvckRlYnVnZ2VyKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTR2xvYmFsT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAt
MSw2ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA3IEVyaWMgU2VpZGVsIDxlcmlj
QHdlYmtpdC5vcmc+Ci0gKiAgQ29weXJpZ2h0IChDKSAyMDA3LTIwMjAgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwNy0yMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC02MDksNyArNjA5
LDcgQEAgcHVibGljOgogICAgIEpTX0VYUE9SVF9QUklWQVRFIH5KU0dsb2JhbE9iamVjdCgpOwog
ICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CiAKLSAg
ICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNs
b3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTl9XSVRIX01PRElGSUVSKEpT
X0VYUE9SVF9QUklWQVRFKTsKIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBib29sIGdl
dE93blByb3BlcnR5U2xvdChKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1l
LCBQcm9wZXJ0eVNsb3QmKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgYm9vbCBwdXQo
SlNDZWxsKiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3Bl
cnR5U2xvdCYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbW11dGFi
bGVCdXR0ZXJmbHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTSW1tdXRhYmxlQnV0dGVyZmx5LmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbW11dGFibGVCdXR0ZXJmbHkuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAyMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTMyLDcgKzMyLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAKIGNvbnN0IENsYXNzSW5mbyBK
U0ltbXV0YWJsZUJ1dHRlcmZseTo6c19pbmZvID0geyAiSW1tdXRhYmxlIEJ1dHRlcmZseSIsIG51
bGxwdHIsIG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNJbW11dGFibGVC
dXR0ZXJmbHkpIH07CiAKLXZvaWQgSlNJbW11dGFibGVCdXR0ZXJmbHk6OnZpc2l0Q2hpbGRyZW4o
SlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZp
c2l0b3I+Cit2b2lkIEpTSW1tdXRhYmxlQnV0dGVyZmx5Ojp2aXNpdENoaWxkcmVuSW1wbChKU0Nl
bGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhF
UklUUyhjZWxsLCBpbmZvKCkpOwogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4oY2VsbCwgdmlzaXRv
cik7CkBAIC00NSw2ICs0Niw4IEBAIHZvaWQgSlNJbW11dGFibGVCdXR0ZXJmbHk6OnZpc2l0Q2hp
bGRyZW4KICAgICB2aXNpdG9yLmFwcGVuZFZhbHVlc0hpZGRlbihidXR0ZXJmbHktPmNvbnRpZ3Vv
dXMoKS5kYXRhKCksIGJ1dHRlcmZseS0+cHVibGljTGVuZ3RoKCkpOwogfQogCitERUZJTkVfVklT
SVRfQ0hJTERSRU4oSlNJbW11dGFibGVCdXR0ZXJmbHkpOworCiB2b2lkIEpTSW1tdXRhYmxlQnV0
dGVyZmx5Ojpjb3B5VG9Bcmd1bWVudHMoSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlKiBmaXJzdEVs
ZW1lbnREZXN0LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKIHsKICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTSW1tdXRhYmxlQnV0dGVyZmx5LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbW11dGFibGVCdXR0ZXJmbHkuaAkocmV2aXNp
b24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbW11dGFibGVC
dXR0ZXJmbHkuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTgtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTgtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE0NSw3ICsxNDUsNyBAQCBwdWJsaWM6CiAg
ICAgICAgIHJldHVybiBqc0RvdWJsZU51bWJlcih2YWx1ZSk7CiAgICAgfQogCi0gICAgc3RhdGlj
IHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVf
VklTSVRfQ0hJTERSRU47CiAKICAgICB2b2lkIGNvcHlUb0FyZ3VtZW50cyhKU0dsb2JhbE9iamVj
dCosIEpTVmFsdWUqIGZpcnN0RWxlbWVudERlc3QsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQg
bGVuZ3RoKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbnRlcm5h
bEZpZWxkT2JqZWN0SW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTSW50ZXJuYWxGaWVsZE9iamVjdEltcGwuaAkocmV2aXNpb24gMjcyODMwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
OSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkt
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTY2LDcgKzY2LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBwdHJkaWZm
X3Qgb2Zmc2V0T2ZJbnRlcm5hbEZpZWxkKHVuc2lnbmVkIGluZGV4KSB7IHJldHVybiBPQkpFQ1Rf
T0ZGU0VUT0YoSlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbCwgbV9pbnRlcm5hbEZpZWxkcykgKyBp
bmRleCAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pOyB9CiAKIHByb3RlY3RlZDoKLSAg
ICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAg
REVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIEpTSW50ZXJuYWxGaWVsZE9iamVjdEltcGwo
Vk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKICAgICAgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1
cmUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ludGVybmFsRmllbGRP
YmplY3RJbXBsSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTSW50ZXJuYWxGaWVsZE9iamVjdEltcGxJbmxpbmVzLmgJKHJldmlzaW9uIDI3Mjgz
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTSW50ZXJuYWxGaWVsZE9iamVj
dEltcGxJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxOS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzAsNyArMzAsOCBAQAogbmFtZXNwYWNlIEpT
QyB7CiAKIHRlbXBsYXRlPHVuc2lnbmVkIHBhc3NlZE51bWJlck9mSW50ZXJuYWxGaWVsZHM+Ci12
b2lkIEpTSW50ZXJuYWxGaWVsZE9iamVjdEltcGw8cGFzc2VkTnVtYmVyT2ZJbnRlcm5hbEZpZWxk
cz46OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3Rl
bXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTSW50ZXJuYWxGaWVsZE9iamVjdEltcGw8
cGFzc2VkTnVtYmVyT2ZJbnRlcm5hbEZpZWxkcz46OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCog
Y2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0
PEpTSW50ZXJuYWxGaWVsZE9iamVjdEltcGwqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNU
X0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC0zOCw0ICszOSw2IEBAIHZvaWQgSlNJ
bnRlcm5hbEZpZWxkT2JqZWN0SW1wbDxwYXNzZWROdW0KICAgICB2aXNpdG9yLmFwcGVuZFZhbHVl
cyh0aGlzT2JqZWN0LT5tX2ludGVybmFsRmllbGRzLCBudW1iZXJPZkludGVybmFsRmllbGRzKTsK
IH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOX1dJVEhfTU9ESUZJRVIodGVtcGxhdGU8dW5zaWdu
ZWQgcGFzc2VkTnVtYmVyT2ZJbnRlcm5hbEZpZWxkcz4sIEpTSW50ZXJuYWxGaWVsZE9iamVjdElt
cGw8cGFzc2VkTnVtYmVyT2ZJbnRlcm5hbEZpZWxkcz4pOworCiB9IC8vIG5hbWVzcGFjZSBKU0MK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTGV4aWNhbEVudmlyb25tZW50
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xleGlj
YWxFbnZpcm9ubWVudC5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTTGV4aWNhbEVudmlyb25tZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxOSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTM2LDcgKzM2LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAKIGNvbnN0IENsYXNzSW5mbyBKU0xleGlj
YWxFbnZpcm9ubWVudDo6c19pbmZvID0geyAiSlNMZXhpY2FsRW52aXJvbm1lbnQiLCAmQmFzZTo6
c19pbmZvLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTTGV4aWNhbEVu
dmlyb25tZW50KSB9OwogCi12b2lkIEpTTGV4aWNhbEVudmlyb25tZW50Ojp2aXNpdENoaWxkcmVu
KEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPgordm9pZCBKU0xleGljYWxFbnZpcm9ubWVudDo6dmlzaXRDaGlsZHJlbkltcGwoSlND
ZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBq
c0Nhc3Q8SlNMZXhpY2FsRW52aXJvbm1lbnQqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNU
X0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC00NCw2ICs0NSw4IEBAIHZvaWQgSlNM
ZXhpY2FsRW52aXJvbm1lbnQ6OnZpc2l0Q2hpbGRyZW4KICAgICB2aXNpdG9yLmFwcGVuZFZhbHVl
c0hpZGRlbih0aGlzT2JqZWN0LT52YXJpYWJsZXMoKSwgdGhpc09iamVjdC0+c3ltYm9sVGFibGUo
KS0+c2NvcGVTaXplKCkpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNMZXhpY2FsRW52
aXJvbm1lbnQpOworCiB2b2lkIEpTTGV4aWNhbEVudmlyb25tZW50OjphbmFseXplSGVhcChKU0Nl
bGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCiB7CiAgICAgYXV0byogdGhpc09iamVj
dCA9IGpzQ2FzdDxKU0xleGljYWxFbnZpcm9ubWVudCo+KGNlbGwpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMZXhpY2FsRW52aXJvbm1lbnQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xleGljYWxFbnZpcm9ubWVudC5oCShy
ZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xleGlj
YWxFbnZpcm9ubWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAwOC0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAwOC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTM0LDcgKzEzNCw3IEBAIHByb3Rl
Y3RlZDoKICAgICAgICAgfQogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4o
SlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogICAg
IHN0YXRpYyB2b2lkIGFuYWx5emVIZWFwKEpTQ2VsbCosIEhlYXBBbmFseXplciYpOwogfTsKIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNYXBJdGVyYXRvci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNYXBJdGVyYXRvci5j
cHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
TWFwSXRlcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE3IEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMSBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01NywxMyArNTcsMTYgQEAgdm9p
ZCBKU01hcEl0ZXJhdG9yOjpmaW5pc2hDcmVhdGlvbihWTSYgdgogICAgICAgICBCYXNlOjppbnRl
cm5hbEZpZWxkKGluZGV4KS5zZXQodm0sIHRoaXMsIHZhbHVlc1tpbmRleF0pOwogfQogCi12b2lk
IEpTTWFwSXRlcmF0b3I6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYg
dmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTTWFwSXRlcmF0b3I6
OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAg
ICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTTWFwSXRlcmF0b3IqPihjZWxsKTsKICAgICBB
U1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAgICAgQmFzZTo6
dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NI
SUxEUkVOKEpTTWFwSXRlcmF0b3IpOworCiBKU1ZhbHVlIEpTTWFwSXRlcmF0b3I6OmNyZWF0ZVBh
aXIoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBrZXksIEpTVmFsdWUgdmFs
dWUpCiB7CiAgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgYXJnczsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTTWFwSXRlcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01hcEl0ZXJhdG9yLmgJKHJldmlzaW9uIDI3MjgzMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTWFwSXRlcmF0b3IuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTYg
QXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDIxIEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTE0Miw3ICsxNDIsNyBAQCBwcml2YXRlOgogICAgIEpTX0VYUE9SVF9Q
UklWQVRFIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBKU01hcCosIEl0ZXJhdGlvbktpbmQpOwog
ICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKICAgICBKU1ZhbHVlIGNyZWF0ZVBhaXIoSlNH
bG9iYWxPYmplY3QqLCBKU1ZhbHVlLCBKU1ZhbHVlKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENo
aWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJF
TjsKIH07CiBTVEFUSUNfQVNTRVJUX0lTX1RSSVZJQUxMWV9ERVNUUlVDVElCTEUoSlNNYXBJdGVy
YXRvcik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlRW52
aXJvbm1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTTW9kdWxlRW52aXJvbm1lbnQuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZUVudmlyb25tZW50LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxOSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTY1LDcgKzY1LDggQEAgdm9pZCBKU01vZHVsZUVudmlyb25tZW50OjpmaW5pc2hDcmVh
dGlvbgogICAgIHRoaXMtPm1vZHVsZVJlY29yZFNsb3QoKS5zZXQodm0sIHRoaXMsIG1vZHVsZVJl
Y29yZCk7CiB9CiAKLXZvaWQgSlNNb2R1bGVFbnZpcm9ubWVudDo6dmlzaXRDaGlsZHJlbihKU0Nl
bGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRv
cj4KK3ZvaWQgSlNNb2R1bGVFbnZpcm9ubWVudDo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBj
ZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTTW9kdWxlRW52aXJvbm1lbnQqIHRoaXNP
YmplY3QgPSBqc0Nhc3Q8SlNNb2R1bGVFbnZpcm9ubWVudCo+KGNlbGwpOwogICAgIEFTU0VSVF9H
Q19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTc0LDYgKzc1LDggQEAg
dm9pZCBKU01vZHVsZUVudmlyb25tZW50Ojp2aXNpdENoaWxkcmVuKAogICAgIHZpc2l0b3IuYXBw
ZW5kKHRoaXNPYmplY3QtPm1vZHVsZVJlY29yZFNsb3QoKSk7CiB9CiAKK0RFRklORV9WSVNJVF9D
SElMRFJFTihKU01vZHVsZUVudmlyb25tZW50KTsKKwogYm9vbCBKU01vZHVsZUVudmlyb25tZW50
OjpnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqIGNlbGwsIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkK
IHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU01vZHVsZUVudmlyb25tZW50LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVFbnZpcm9ubWVudC5oCShyZXZpc2lv
biAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZUVudmly
b25tZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDE1LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE1LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC04OSw3ICs4OSw3IEBAIHByaXZhdGU6CiAgICAg
ICAgIHJldHVybiAqYml0d2lzZV9jYXN0PFdyaXRlQmFycmllckJhc2U8QWJzdHJhY3RNb2R1bGVS
ZWNvcmQ+Kj4oYml0d2lzZV9jYXN0PGNoYXIqPih0aGlzKSArIG9mZnNldE9mTW9kdWxlUmVjb3Jk
KHN5bWJvbFRhYmxlKCkpKTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVu
KEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIH07
CiAKIGlubGluZSBKU01vZHVsZUVudmlyb25tZW50OjpKU01vZHVsZUVudmlyb25tZW50KFZNJiB2
bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTU2NvcGUqIGN1cnJlbnRTY29wZSwgU3ltYm9sVGFi
bGUqIHN5bWJvbFRhYmxlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNN
b2R1bGVOYW1lc3BhY2VPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTTW9kdWxlTmFtZXNwYWNlT2JqZWN0LmNwcAkocmV2aXNpb24gMjcyODMw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVOYW1lc3BhY2VPYmpl
Y3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxNS0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODUsNyArODUsOCBAQCB2b2lkIEpTTW9kdWxlTmFt
ZXNwYWNlT2JqZWN0OjpkZXN0cm95KEpTCiAgICAgdGhpc09iamVjdC0+SlNNb2R1bGVOYW1lc3Bh
Y2VPYmplY3Q6On5KU01vZHVsZU5hbWVzcGFjZU9iamVjdCgpOwogfQogCi12b2lkIEpTTW9kdWxl
TmFtZXNwYWNlT2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3Im
IHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU01vZHVsZU5hbWVz
cGFjZU9iamVjdDo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNp
dG9yKQogewogICAgIEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0
PEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0Kj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9J
TkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtOTgsNiArOTksOCBAQCB2b2lkIEpTTW9k
dWxlTmFtZXNwYWNlT2JqZWN0Ojp2aXNpdENoaWxkCiAgICAgfQogfQogCitERUZJTkVfVklTSVRf
Q0hJTERSRU4oSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QpOworCiBzdGF0aWMgSlNWYWx1ZSBnZXRW
YWx1ZShKU01vZHVsZUVudmlyb25tZW50KiBlbnZpcm9ubWVudCwgUHJvcGVydHlOYW1lIGxvY2Fs
TmFtZSwgU2NvcGVPZmZzZXQmIHNjb3BlT2Zmc2V0KQogewogICAgIFN5bWJvbFRhYmxlKiBzeW1i
b2xUYWJsZSA9IGVudmlyb25tZW50LT5zeW1ib2xUYWJsZSgpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZU5hbWVzcGFjZU9iamVjdC5o
CShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01v
ZHVsZU5hbWVzcGFjZU9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNzIsNyArNzIsNyBAQCBw
dWJsaWM6CiBwcml2YXRlOgogICAgIEpTX0VYUE9SVF9QUklWQVRFIEpTTW9kdWxlTmFtZXNwYWNl
T2JqZWN0KFZNJiwgU3RydWN0dXJlKik7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBmaW5p
c2hDcmVhdGlvbihKU0dsb2JhbE9iamVjdCosIEFic3RyYWN0TW9kdWxlUmVjb3JkKiwgVmVjdG9y
PHN0ZDo6cGFpcjxJZGVudGlmaWVyLCBBYnN0cmFjdE1vZHVsZVJlY29yZDo6UmVzb2x1dGlvbj4+
JiYpOwotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3Im
KTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogICAgIGJvb2wgZ2V0T3duUHJvcGVydHlT
bG90Q29tbW9uKEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsK
IAogICAgIHN0cnVjdCBFeHBvcnRFbnRyeSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU01vZHVsZVJlY29yZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVSZWNvcmQuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZVJlY29yZC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTkgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC03MCw3ICs3MCw4IEBAIHZvaWQgSlNNb2R1bGVSZWNvcmQ6OmZpbmlzaENyZWF0
aW9uKEpTR2wKICAgICBBU1NFUlQoaW5oZXJpdHModm0sIGluZm8oKSkpOwogfQogCi12b2lkIEpT
TW9kdWxlUmVjb3JkOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZp
c2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU01vZHVsZVJlY29yZDo6
dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAg
IEpTTW9kdWxlUmVjb3JkKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTTW9kdWxlUmVjb3JkKj4oY2Vs
bCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpA
QCAtNzgsNiArNzksOCBAQCB2b2lkIEpTTW9kdWxlUmVjb3JkOjp2aXNpdENoaWxkcmVuKEpTQ2Vs
CiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9tb2R1bGVQcm9ncmFtRXhlY3V0YWJs
ZSk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU01vZHVsZVJlY29yZCk7CisKIHZvaWQg
SlNNb2R1bGVSZWNvcmQ6OmxpbmsoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1
ZSBzY3JpcHRGZXRjaGVyKQogewogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlUmVjb3JkLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVSZWNvcmQuaAko
cmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1
bGVSZWNvcmQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTUtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY2LDcgKzY2LDcgQEAgcHJpdmF0ZToKIAog
ICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxPYmplY3QqLCBWTSYpOwogCi0gICAgc3Rh
dGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xB
UkVfVklTSVRfQ0hJTERSRU47CiAKICAgICB2b2lkIGluc3RhbnRpYXRlRGVjbGFyYXRpb25zKEpT
R2xvYmFsT2JqZWN0KiwgTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUqLCBKU1ZhbHVlIHNjcmlwdEZl
dGNoZXIpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU05hdGl2ZVN0
ZEZ1bmN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU05hdGl2ZVN0ZEZ1bmN0aW9uLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNOYXRpdmVTdGRGdW5jdGlvbi5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC00MSwxMyArNDEsMTYgQEAgSlNOYXRpdmVTdGRGdW5jdGlvbjo6SlNOYXRpdmVTdGRG
dW5jdGlvbgogewogfQogCi12b2lkIEpTTmF0aXZlU3RkRnVuY3Rpb246OnZpc2l0Q2hpbGRyZW4o
SlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZp
c2l0b3I+Cit2b2lkIEpTTmF0aXZlU3RkRnVuY3Rpb246OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2Vs
bCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU05hdGl2ZVN0ZEZ1bmN0aW9uKiB0
aGlzT2JqZWN0ID0ganNDYXN0PEpTTmF0aXZlU3RkRnVuY3Rpb24qPihjZWxsKTsKICAgICBBU1NF
UlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAgICAgQmFzZTo6dmlz
aXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxE
UkVOKEpTTmF0aXZlU3RkRnVuY3Rpb24pOworCiB2b2lkIEpTTmF0aXZlU3RkRnVuY3Rpb246OmZp
bmlzaENyZWF0aW9uKFZNJiB2bSwgTmF0aXZlRXhlY3V0YWJsZSogZXhlY3V0YWJsZSwgdW5zaWdu
ZWQgbGVuZ3RoLCBjb25zdCBTdHJpbmcmIG5hbWUpCiB7CiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRp
b24odm0sIGV4ZWN1dGFibGUsIGxlbmd0aCwgbmFtZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU05hdGl2ZVN0ZEZ1bmN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNOYXRpdmVTdGRGdW5jdGlvbi5oCShyZXZpc2lvbiAy
NzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU05hdGl2ZVN0ZEZ1bmN0
aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDE1LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE1LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02NSw3ICs2NSw3IEBAIHB1YmxpYzoKIHByaXZhdGU6
CiAgICAgSlNOYXRpdmVTdGRGdW5jdGlvbihWTSYsIE5hdGl2ZUV4ZWN1dGFibGUqLCBKU0dsb2Jh
bE9iamVjdCosIFN0cnVjdHVyZSosIE5hdGl2ZVN0ZEZ1bmN0aW9uJiYpOwogICAgIHZvaWQgZmlu
aXNoQ3JlYXRpb24oVk0mLCBOYXRpdmVFeGVjdXRhYmxlKiwgdW5zaWduZWQgbGVuZ3RoLCBjb25z
dCBTdHJpbmcmIG5hbWUpOwotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwg
U2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgTmF0aXZl
U3RkRnVuY3Rpb24gbV9mdW5jdGlvbjsKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU09iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNPYmplY3QuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSw3
IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAxIEhhcnJpIFBvcnRlbiAocG9ydGVu
QGtkZS5vcmcpCiAgKiAgQ29weXJpZ2h0IChDKSAyMDAxIFBldGVyIEtlbGx5IChwbWtAcG9zdC5j
b20pCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqICBDb3B5cmlnaHQgKEMpIDIwMDcgRXJpYyBTZWlkZWwgKGVyaWNAd2Vi
a2l0Lm9yZykKICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAtNzIsNyArNzIsOCBAQCBjb25zdCBDbGFzc0luZm8g
SlNPYmplY3Q6OnNfaW5mbyA9IHsgIk9iCiAKIGNvbnN0IENsYXNzSW5mbyBKU0ZpbmFsT2JqZWN0
OjpzX2luZm8gPSB7ICJPYmplY3QiLCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBudWxscHRyLCBD
UkVBVEVfTUVUSE9EX1RBQkxFKEpTRmluYWxPYmplY3QpIH07CiAKLUFMV0FZU19JTkxJTkUgdm9p
ZCBKU09iamVjdDo6bWFya0F1eGlsaWFyeUFuZFZpc2l0T3V0T2ZMaW5lUHJvcGVydGllcyhTbG90
VmlzaXRvciYgdmlzaXRvciwgQnV0dGVyZmx5KiBidXR0ZXJmbHksIFN0cnVjdHVyZSogc3RydWN0
dXJlLCBQcm9wZXJ0eU9mZnNldCBtYXhPZmZzZXQpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
PgorQUxXQVlTX0lOTElORSB2b2lkIEpTT2JqZWN0OjptYXJrQXV4aWxpYXJ5QW5kVmlzaXRPdXRP
ZkxpbmVQcm9wZXJ0aWVzKFZpc2l0b3ImIHZpc2l0b3IsIEJ1dHRlcmZseSogYnV0dGVyZmx5LCBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgbWF4T2Zmc2V0KQogewogICAgIC8v
IFdlIGNhbGwgdGhpcyB3aGVuIHdlIGZvdW5kIGV2ZXJ5dGhpbmcgd2l0aG91dCByYWNlcy4KICAg
ICBBU1NFUlQoc3RydWN0dXJlKTsKQEAgLTEwMyw3ICsxMDQsOCBAQCBBTFdBWVNfSU5MSU5FIHZv
aWQgSlNPYmplY3Q6Om1hcmtBdXhpbGlhCiAgICAgdmlzaXRvci5hcHBlbmRWYWx1ZXNIaWRkZW4o
YnV0dGVyZmx5LT5wcm9wZXJ0eVN0b3JhZ2UoKSAtIG91dE9mTGluZVNpemUsIG91dE9mTGluZVNp
emUpOwogfQogCi1BTFdBWVNfSU5MSU5FIFN0cnVjdHVyZSogSlNPYmplY3Q6OnZpc2l0QnV0dGVy
Zmx5KFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK0FM
V0FZU19JTkxJTkUgU3RydWN0dXJlKiBKU09iamVjdDo6dmlzaXRCdXR0ZXJmbHkoVmlzaXRvciYg
dmlzaXRvcikKIHsKICAgICBzdGF0aWMgY29uc3QgY2hhciogY29uc3QgcmFjZVJlYXNvbiA9ICJK
U09iamVjdDo6dmlzaXRCdXR0ZXJmbHkiOwogICAgIFN0cnVjdHVyZSogcmVzdWx0ID0gdmlzaXRC
dXR0ZXJmbHlJbXBsKHZpc2l0b3IpOwpAQCAtMTEyLDcgKzExNCw4IEBAIEFMV0FZU19JTkxJTkUg
U3RydWN0dXJlKiBKU09iamVjdDo6dmlzaXQKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1BTFdB
WVNfSU5MSU5FIFN0cnVjdHVyZSogSlNPYmplY3Q6OnZpc2l0QnV0dGVyZmx5SW1wbChTbG90Vmlz
aXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+CitBTFdBWVNfSU5MSU5F
IFN0cnVjdHVyZSogSlNPYmplY3Q6OnZpc2l0QnV0dGVyZmx5SW1wbChWaXNpdG9yJiB2aXNpdG9y
KQogewogICAgIFZNJiB2bSA9IHZpc2l0b3Iudm0oKTsKICAgICAKQEAgLTQxMiwyNCArNDE1LDIw
IEBAIHNpemVfdCBKU09iamVjdDo6ZXN0aW1hdGVkU2l6ZShKU0NlbGwqIGMKICAgICByZXR1cm4g
QmFzZTo6ZXN0aW1hdGVkU2l6ZShjZWxsLCB2bSkgKyBidXR0ZXJmbHlPdXRPZkxpbmVTaXplOwog
fQogCi12b2lkIEpTT2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0
b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU09iamVjdDo6
dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAg
IEpTT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTT2JqZWN0Kj4oY2VsbCk7CiAgICAgQVNT
RVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwotI2lmIEFTU0VSVF9F
TkFCTEVECi0gICAgYm9vbCB3YXNDaGVja2luZ0ZvckRlZmF1bHRNYXJrVmlvbGF0aW9uID0gdmlz
aXRvci5tX2lzQ2hlY2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlvbjsKLSAgICB2aXNpdG9yLm1f
aXNDaGVja2luZ0ZvckRlZmF1bHRNYXJrVmlvbGF0aW9uID0gZmFsc2U7Ci0jZW5kaWYKLSAgICAK
KyAgICB0eXBlbmFtZSBWaXNpdG9yOjpEZWZhdWx0TWFya2luZ1Zpb2xhdGlvbkFzc2VydGlvblNj
b3BlIGFzc2VydGlvblNjb3BlKHZpc2l0b3IpOworCiAgICAgSlNDZWxsOjp2aXNpdENoaWxkcmVu
KHRoaXNPYmplY3QsIHZpc2l0b3IpOwotICAgIAorCiAgICAgdGhpc09iamVjdC0+dmlzaXRCdXR0
ZXJmbHkodmlzaXRvcik7Ci0gICAgCi0jaWYgQVNTRVJUX0VOQUJMRUQKLSAgICB2aXNpdG9yLm1f
aXNDaGVja2luZ0ZvckRlZmF1bHRNYXJrVmlvbGF0aW9uID0gd2FzQ2hlY2tpbmdGb3JEZWZhdWx0
TWFya1Zpb2xhdGlvbjsKLSNlbmRpZgogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU5fV0lUSF9N
T0RJRklFUihKU19FWFBPUlRfUFJJVkFURSwgSlNPYmplY3QpOworCiB2b2lkIEpTT2JqZWN0Ojph
bmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCiB7CiAgICAg
SlNPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNPYmplY3QqPihjZWxsKTsKQEAgLTQ2OCwx
NCArNDY3LDEyIEBAIHZvaWQgSlNPYmplY3Q6OmFuYWx5emVIZWFwKEpTQ2VsbCogY2VsbCwKICAg
ICB9CiB9CiAKLXZvaWQgSlNGaW5hbE9iamVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGws
IFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQg
SlNGaW5hbE9iamVjdDo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2
aXNpdG9yKQogewogICAgIEpTRmluYWxPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNGaW5h
bE9iamVjdCo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVj
dCwgaW5mbygpKTsKLSNpZiBBU1NFUlRfRU5BQkxFRAotICAgIGJvb2wgd2FzQ2hlY2tpbmdGb3JE
ZWZhdWx0TWFya1Zpb2xhdGlvbiA9IHZpc2l0b3IubV9pc0NoZWNraW5nRm9yRGVmYXVsdE1hcmtW
aW9sYXRpb247Ci0gICAgdmlzaXRvci5tX2lzQ2hlY2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlv
biA9IGZhbHNlOwotI2VuZGlmCisgICAgdHlwZW5hbWUgVmlzaXRvcjo6RGVmYXVsdE1hcmtpbmdW
aW9sYXRpb25Bc3NlcnRpb25TY29wZSBhc3NlcnRpb25TY29wZSh2aXNpdG9yKTsKICAgICAKICAg
ICBKU0NlbGw6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CiAgICAgCkBAIC00
ODMsMTIgKzQ4MCwxMCBAQCB2b2lkIEpTRmluYWxPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxs
CiAgICAgICAgIGlmICh1bnNpZ25lZCBzdG9yYWdlU2l6ZSA9IHN0cnVjdHVyZS0+aW5saW5lU2l6
ZSgpKQogICAgICAgICAgICAgdmlzaXRvci5hcHBlbmRWYWx1ZXNIaWRkZW4odGhpc09iamVjdC0+
aW5saW5lU3RvcmFnZSgpLCBzdG9yYWdlU2l6ZSk7CiAgICAgfQotICAgIAotI2lmIEFTU0VSVF9F
TkFCTEVECi0gICAgdmlzaXRvci5tX2lzQ2hlY2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlvbiA9
IHdhc0NoZWNraW5nRm9yRGVmYXVsdE1hcmtWaW9sYXRpb247Ci0jZW5kaWYKIH0KIAorREVGSU5F
X1ZJU0lUX0NISUxEUkVOX1dJVEhfTU9ESUZJRVIoSlNfRVhQT1JUX1BSSVZBVEUsIEpTRmluYWxP
YmplY3QpOworCiBTdHJpbmcgSlNPYmplY3Q6OmNsYXNzTmFtZShjb25zdCBKU09iamVjdCogb2Jq
ZWN0LCBWTSYgdm0pCiB7CiAgICAgY29uc3QgQ2xhc3NJbmZvKiBpbmZvID0gb2JqZWN0LT5jbGFz
c0luZm8odm0pOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3Qu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5o
CShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09i
amVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqICBDb3B5cmlnaHQg
KEMpIDE5OTktMjAwMSBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQogICogIENvcHlyaWdo
dCAoQykgMjAwMSBQZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQotICogIENvcHlyaWdodCAoQykg
MjAwMy0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQg
KEMpIDIwMDMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYwpAQCAtMTA4LDggKzEwOCw5IEBAIGNsYXNzIEpTT2JqZWN0IDogcHVibGljIEpT
Q2VsbCB7CiBwdWJsaWM6CiAgICAgdXNpbmcgQmFzZSA9IEpTQ2VsbDsKIAorICAgIERFQ0xBUkVf
VklTSVRfQ0hJTERSRU5fV0lUSF9NT0RJRklFUihKU19FWFBPUlRfUFJJVkFURSk7CisKICAgICBK
U19FWFBPUlRfUFJJVkFURSBzdGF0aWMgc2l6ZV90IGVzdGltYXRlZFNpemUoSlNDZWxsKiwgVk0m
KTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2Vs
bCosIFNsb3RWaXNpdG9yJik7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgYW5h
bHl6ZUhlYXAoSlNDZWxsKiwgSGVhcEFuYWx5emVyJik7CiAKICAgICBKU19FWFBPUlRfUFJJVkFU
RSBzdGF0aWMgU3RyaW5nIGNsYXNzTmFtZShjb25zdCBKU09iamVjdCosIFZNJik7CkBAIC05ODIs
MTEgKzk4MywxMSBAQCBwcm90ZWN0ZWQ6CiAgICAgSlNPYmplY3QoVk0mLCBTdHJ1Y3R1cmUqLCBC
dXR0ZXJmbHkqID0gbnVsbHB0cik7CiAgICAgCiAgICAgLy8gVmlzaXRzIHRoZSBidXR0ZXJmbHkg
dW5sZXNzIHRoZXJlIGlzIGEgcmFjZS4gUmV0dXJucyB0aGUgc3RydWN0dXJlIGlmIHRoZXJlIHdh
cyBubyByYWNlLgotICAgIFN0cnVjdHVyZSogdmlzaXRCdXR0ZXJmbHkoU2xvdFZpc2l0b3ImKTsK
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiBTdHJ1Y3R1cmUqIHZpc2l0QnV0dGVyZmx5
KFZpc2l0b3ImKTsKICAgICAKLSAgICBTdHJ1Y3R1cmUqIHZpc2l0QnV0dGVyZmx5SW1wbChTbG90
VmlzaXRvciYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IFN0cnVjdHVyZSogdmlz
aXRCdXR0ZXJmbHlJbXBsKFZpc2l0b3ImKTsKICAgICAKLSAgICB2b2lkIG1hcmtBdXhpbGlhcnlB
bmRWaXNpdE91dE9mTGluZVByb3BlcnRpZXMoU2xvdFZpc2l0b3ImLCBCdXR0ZXJmbHkqLCBTdHJ1
Y3R1cmUqLCBQcm9wZXJ0eU9mZnNldCBtYXhPZmZzZXQpOworICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFZpc2l0b3I+IHZvaWQgbWFya0F1eGlsaWFyeUFuZFZpc2l0T3V0T2ZMaW5lUHJvcGVydGllcyhW
aXNpdG9yJiwgQnV0dGVyZmx5KiwgU3RydWN0dXJlKiwgUHJvcGVydHlPZmZzZXQgbWF4T2Zmc2V0
KTsKIAogICAgIC8vIENhbGwgdGhpcyBpZiB5b3Uga25vdyB0aGF0IHRoZSBvYmplY3QgaXMgaW4g
YSBtb2RlIHdoZXJlIGl0IGhhcyBhcnJheQogICAgIC8vIHN0b3JhZ2UuIFRoaXMgd2lsbCBhc3Nl
cnQgb3RoZXJ3aXNlLgpAQCAtMTE3NCw4ICsxMTc1LDYgQEAgcHJvdGVjdGVkOgogICAgIH0KIH07
CiAKLWNsYXNzIEpTRmluYWxPYmplY3Q7Ci0KIC8vIEpTRmluYWxPYmplY3QgaXMgYSB0eXBlIG9m
IEpTT2JqZWN0IHRoYXQgY29udGFpbnMgc3VmZmljaWVudCBpbnRlcm5hbAogLy8gc3RvcmFnZSB0
byBmdWxseSBtYWtlIHVzZSBvZiB0aGUgY29sbGVjdG9yIGNlbGwgY29udGFpbmluZyBpdC4KIGNs
YXNzIEpTRmluYWxPYmplY3QgZmluYWwgOiBwdWJsaWMgSlNPYmplY3QgewpAQCAtMTIxNCwxNSAr
MTIxMywxMyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwg
Z2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIHR5cGVJbmZvKCksIGluZm8oKSwgZGVmYXVsdEluZGV4
aW5nVHlwZSwgaW5saW5lQ2FwYWNpdHkpOwogICAgIH0KIAotICAgIEpTX0VYUE9SVF9QUklWQVRF
IHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBE
RUNMQVJFX1ZJU0lUX0NISUxEUkVOX1dJVEhfTU9ESUZJRVIoSlNfRVhQT1JUX1BSSVZBVEUpOwog
CiAgICAgREVDTEFSRV9FWFBPUlRfSU5GTzsKIAogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3Mg
TExJbnRPZmZzZXRzRXh0cmFjdG9yOwogCi0gICAgdm9pZCB2aXNpdENoaWxkcmVuQ29tbW9uKFNs
b3RWaXNpdG9yJik7Ci0KICAgICBleHBsaWNpdCBKU0ZpbmFsT2JqZWN0KFZNJiB2bSwgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUsIEJ1dHRlcmZseSogYnV0dGVyZmx5KQogICAgICAgICA6IEpTT2JqZWN0
KHZtLCBzdHJ1Y3R1cmUsIGJ1dHRlcmZseSkKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU1Byb21pc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTUHJvbWlzZS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvbWlzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTcgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC02NywxMyArNjcsMTYgQEAgdm9pZCBKU1Byb21pc2U6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkK
ICAgICAgICAgQmFzZTo6aW50ZXJuYWxGaWVsZChpbmRleCkuc2V0KHZtLCB0aGlzLCB2YWx1ZXNb
aW5kZXhdKTsKIH0KIAotdm9pZCBKU1Byb21pc2U6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxs
LCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lk
IEpTUHJvbWlzZTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNp
dG9yKQogewogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNQcm9taXNlKj4oY2VsbCk7
CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwogICAg
IEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CiB9CiAKK0RFRklORV9W
SVNJVF9DSElMRFJFTihKU1Byb21pc2UpOworCiBhdXRvIEpTUHJvbWlzZTo6c3RhdHVzKFZNJikg
Y29uc3QgLT4gU3RhdHVzCiB7CiAgICAgSlNWYWx1ZSB2YWx1ZSA9IGludGVybmFsRmllbGQoRmll
bGQ6OkZsYWdzKS5nZXQoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
UHJvbWlzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
UHJvbWlzZS5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1Byb21pc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC05Niw3ICs5Niw3IEBAIHB1YmxpYzoKICAg
ICB9OwogICAgIHN0YXRpYyBEZWZlcnJlZERhdGEgY3JlYXRlRGVmZXJyZWREYXRhKEpTR2xvYmFs
T2JqZWN0KiwgSlNQcm9taXNlQ29uc3RydWN0b3IqKTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0
Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxE
UkVOOwogCiBwcm90ZWN0ZWQ6CiAgICAgSlNQcm9taXNlKFZNJiwgU3RydWN0dXJlKik7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3Iu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVy
dHlOYW1lRW51bWVyYXRvci5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTUHJvcGVydHlOYW1lRW51bWVyYXRvci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTkgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC03MCw3ICs3MCw4IEBAIHZvaWQgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpmaW5p
c2hDcmUKICAgICB9CiB9CiAKLXZvaWQgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjp2aXNpdENo
aWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBl
bmFtZSBWaXNpdG9yPgordm9pZCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OnZpc2l0Q2hpbGRy
ZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU1Byb3BlcnR5
TmFtZUVudW1lcmF0b3IqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBp
bmZvKCkpOwpAQCAtODcsNiArODgsOCBAQCB2b2lkIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6
dmlzaXRDaGlsCiAgICAgfQogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNQcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yKTsKKwogLy8gRklYTUU6IEFzc2VydCB0aGF0IHByb3BlcnRpZXMgcmV0dXJu
ZWQgYnkgZ2V0T3duUHJvcGVydHlOYW1lcygpIGFyZSByZXBvcnRlZCBlbnVtZXJhYmxlIGJ5IGdl
dE93blByb3BlcnR5U2xvdCgpLgogLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTIxOTkyNgogdm9pZCBnZXRFbnVtZXJhYmxlUHJvcGVydHlOYW1lcyhKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBKU09iamVjdCogYmFzZSwgUHJvcGVydHlOYW1lQXJyYXkmIHBy
b3BlcnR5TmFtZXMsIHVpbnQzMl90JiBpbmRleGVkTGVuZ3RoLCB1aW50MzJfdCYgc3RydWN0dXJl
UHJvcGVydHlDb3VudCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJv
cGVydHlOYW1lRW51bWVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTUHJvcGVydHlOYW1lRW51bWVyYXRvci5oCShyZXZpc2lvbiAyNzI4MzApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3Iu
aAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTQtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTQtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTg0LDcgKzg0LDcgQEAgcHVibGljOgogICAgICAgICByZXR1
cm4gT0JKRUNUX09GRlNFVE9GKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvciwgbV9wcm9wZXJ0eU5h
bWVzKTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNs
b3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogcHJpdmF0ZToKICAg
ICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNQcm94eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNQcm94eS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMS0yMDEyLCAyMDE2LTIwMTcgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0zNSw3ICszNSw4IEBAIFNUQVRJQ19BU1NFUlRfSVNfVFJJVklBTExZX0RFU1RS
VUNUSUJMRSgKIAogY29uc3QgQ2xhc3NJbmZvIEpTUHJveHk6OnNfaW5mbyA9IHsgIkpTUHJveHki
LCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpT
UHJveHkpIH07CiAKLXZvaWQgSlNQcm94eTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNQ
cm94eTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQog
ewogICAgIEpTUHJveHkqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNQcm94eSo+KGNlbGwpOwogICAg
IEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTQzLDYg
KzQ0LDggQEAgdm9pZCBKU1Byb3h5Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbAogICAgIHZp
c2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fdGFyZ2V0KTsKIH0KIAorREVGSU5FX1ZJU0lUX0NI
SUxEUkVOX1dJVEhfTU9ESUZJRVIoSlNfRVhQT1JUX1BSSVZBVEUsIEpTUHJveHkpOworCiB2b2lk
IEpTUHJveHk6OnNldFRhcmdldChWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qp
CiB7CiAgICAgbV90YXJnZXQuc2V0KHZtLCB0aGlzLCBnbG9iYWxPYmplY3QpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm94eS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJveHkuaAkocmV2aXNpb24gMjcyODMwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm94eS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMS0yMDIwIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDIxIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtODUsNyArODUsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIG1fdGFyZ2V0LnNldCh2bSwgdGhp
cywgdGFyZ2V0KTsKICAgICB9CiAKLSAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCB2
aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9D
SElMRFJFTl9XSVRIX01PRElGSUVSKEpTX0VYUE9SVF9QUklWQVRFKTsKIAogICAgIEpTX0VYUE9S
VF9QUklWQVRFIHN0YXRpYyBTdHJpbmcgY2xhc3NOYW1lKGNvbnN0IEpTT2JqZWN0KiwgVk0mKTsK
ICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgU3RyaW5nIHRvU3RyaW5nTmFtZShjb25zdCBK
U09iamVjdCosIEpTR2xvYmFsT2JqZWN0Kik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU1Njb3BlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU1Njb3BlLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNTY29wZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjAgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjEgQXBwbGUgSW5jLiBBbGwgUmlnaHRz
IFJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zOSw3ICszOSw4
IEBAIFNUQVRJQ19BU1NFUlRfSVNfVFJJVklBTExZX0RFU1RSVUNUSUJMRSgKIAogY29uc3QgQ2xh
c3NJbmZvIEpTU2NvcGU6OnNfaW5mbyA9IHsgIlNjb3BlIiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0
ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1Njb3BlKSB9OwogCi12b2lkIEpTU2Nv
cGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3Rl
bXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTU2NvcGU6OnZpc2l0Q2hpbGRyZW5JbXBs
KEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU1Njb3BlKiB0aGlzT2Jq
ZWN0ID0ganNDYXN0PEpTU2NvcGUqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVS
SVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC00Nyw2ICs0OCw4IEBAIHZvaWQgSlNTY29wZTo6
dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0
LT5tX25leHQpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNTY29wZSk7CisKIC8vIFJl
dHVybnMgdHJ1ZSBpZiB3ZSBmb3VuZCBlbm91Z2ggaW5mb3JtYXRpb24gdG8gdGVybWluYXRlIG9w
dGltaXphdGlvbi4KIHN0YXRpYyBpbmxpbmUgYm9vbCBhYnN0cmFjdEFjY2VzcyhKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBKU1Njb3BlKiBzY29wZSwgY29uc3QgSWRlbnRpZmllciYgaWRl
bnQsIEdldE9yUHV0IGdldE9yUHV0LCBzaXplX3QgZGVwdGgsIGJvb2wmIG5lZWRzVmFySW5qZWN0
aW9uQ2hlY2tzLCBSZXNvbHZlT3AmIG9wLCBJbml0aWFsaXphdGlvbk1vZGUgaW5pdGlhbGl6YXRp
b25Nb2RlKQogewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTY29wZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2NvcGUuaAko
cmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTY29w
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMi0yMDE5IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMi0yMDIxIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjQsNyArNjQsNyBAQCBwdWJsaWM6CiAKICAgICBzdGF0
aWMgdm9pZCBjb2xsZWN0Q2xvc3VyZVZhcmlhYmxlc1VuZGVyVERaKEpTU2NvcGUqLCBURFpFbnZp
cm9ubWVudCYgcmVzdWx0LCBQcml2YXRlTmFtZUVudmlyb25tZW50Jik7CiAKLSAgICBzdGF0aWMg
dm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9W
SVNJVF9DSElMRFJFTjsKIAogICAgIGJvb2wgaXNWYXJTY29wZSgpOwogICAgIGJvb2wgaXNMZXhp
Y2FsU2NvcGUoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2VnbWVu
dGVkVmFyaWFibGVPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVPYmplY3QuY3BwCShyZXZpc2lvbiAyNzI4MzAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2Jq
ZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjIsNyArNjIsOCBAQCBTY29wZU9mZnNldCBKU1Nl
Z21lbnRlZFZhcmlhYmxlT2JqZWN0OjphCiAgICAgcmV0dXJuIFNjb3BlT2Zmc2V0KG9sZFNpemUp
OwogfQogCi12b2lkIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlND
ZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0
b3I+Cit2b2lkIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3Q6OnZpc2l0Q2hpbGRyZW5JbXBsKEpT
Q2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU1NlZ21lbnRlZFZhcmlhYmxl
T2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3QqPihj
ZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7
CkBAIC03NSw2ICs3Niw4IEBAIHZvaWQgSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdDo6dmlzaXRD
aGkKICAgICAgICAgdmlzaXRvci5hcHBlbmRIaWRkZW4odGhpc09iamVjdC0+bV92YXJpYWJsZXNb
aV0pOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU5fV0lUSF9NT0RJRklFUihKU19FWFBPUlRf
UFJJVkFURSwgSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdCk7CisKIHZvaWQgSlNTZWdtZW50ZWRW
YXJpYWJsZU9iamVjdDo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFu
YWx5emVyKQogewogICAgIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3QqIHRoaXNPYmplY3QgPSBq
c0Nhc3Q8SlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdCo+KGNlbGwpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVP
YmplY3QuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODUsOCAr
ODUsOCBAQCBwdWJsaWM6CiAgICAgLy8gQWRkcyBudW1iZXJPZlJlZ2lzdGVyc1RvQWRkIHJlZ2lz
dGVycywgaW5pdGlhbGl6ZXMgdGhlbSB0byBVbmRlZmluZWQsIGFuZCByZXR1cm5zCiAgICAgLy8g
dGhlIGluZGV4IG9mIHRoZSBmaXJzdCBvbmUgYWRkZWQuCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUg
U2NvcGVPZmZzZXQgYWRkVmFyaWFibGVzKHVuc2lnbmVkIG51bWJlck9mVmFyaWFibGVzVG9BZGQs
IEpTVmFsdWUpOwotICAgIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIHZpc2l0
Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKworICAgIERFQ0xBUkVfVklTSVRfQ0hJ
TERSRU5fV0lUSF9NT0RJRklFUihKU19FWFBPUlRfUFJJVkFURSk7CiAgICAgSlNfRVhQT1JUX1BS
SVZBVEUgc3RhdGljIHZvaWQgYW5hbHl6ZUhlYXAoSlNDZWxsKiwgSGVhcEFuYWx5emVyJik7CiAg
ICAgCiBwcm90ZWN0ZWQ6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Nl
dEl0ZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU1NldEl0ZXJhdG9yLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNTZXRJdGVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTcgQXBwbGUsIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIxIEFwcGxlLCBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU3
LDEzICs1NywxNiBAQCB2b2lkIEpTU2V0SXRlcmF0b3I6OmZpbmlzaENyZWF0aW9uKFZNJiB2CiAg
ICAgICAgIEJhc2U6OmludGVybmFsRmllbGQoaW5kZXgpLnNldCh2bSwgdGhpcywgdmFsdWVzW2lu
ZGV4XSk7CiB9CiAKLXZvaWQgSlNTZXRJdGVyYXRvcjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNl
bGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3Zv
aWQgSlNTZXRJdGVyYXRvcjo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9y
JiB2aXNpdG9yKQogewogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNTZXRJdGVyYXRv
cio+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5m
bygpKTsKICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwogfQog
CitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNTZXRJdGVyYXRvcik7CisKIEpTVmFsdWUgSlNTZXRJ
dGVyYXRvcjo6Y3JlYXRlUGFpcihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVl
IGtleSwgSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdzOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZXRJdGVyYXRvci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2V0SXRlcmF0b3IuaAko
cmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZXRJ
dGVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMywgMjAxNiBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMjEgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTMwLDcgKzEzMCw3IEBAIHByaXZhdGU6
CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIEpTU2V0Kiwg
SXRlcmF0aW9uS2luZCk7CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOwogICAgIEpTX0VY
UE9SVF9QUklWQVRFIEpTVmFsdWUgY3JlYXRlUGFpcihKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUs
IEpTVmFsdWUpOwotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZp
c2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogfTsKIFNUQVRJQ19BU1NFUlRf
SVNfVFJJVklBTExZX0RFU1RSVUNUSUJMRShKU1NldEl0ZXJhdG9yKTsKIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmNwcAkocmV2aXNpb24gMjcyODMwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMiBIYXJy
aSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQogICogIENvcHlyaWdodCAoQykgMjAwMSBQZXRlciBL
ZWxseSAocG1rQHBvc3QuY29tKQotICogIENvcHlyaWdodCAoQykgMjAwNC0yMDE5IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDQtMjAyMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMTA1
LDcgKzEwNSw4IEBAIHNpemVfdCBKU1N0cmluZzo6ZXN0aW1hdGVkU2l6ZShKU0NlbGwqIGMKICAg
ICByZXR1cm4gQmFzZTo6ZXN0aW1hdGVkU2l6ZShjZWxsLCB2bSkgKyBiaXR3aXNlX2Nhc3Q8U3Ry
aW5nSW1wbCo+KHBvaW50ZXIpLT5jb3N0RHVyaW5nR0MoKTsKIH0KIAotdm9pZCBKU1N0cmluZzo6
dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxh
dGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNTdHJpbmc6OnZpc2l0Q2hpbGRyZW5JbXBsKEpT
Q2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU1N0cmluZyogdGhpc09iamVj
dCA9IGFzU3RyaW5nKGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09i
amVjdCwgaW5mbygpKTsKQEAgLTE0Myw2ICsxNDQsOCBAQCB2b2lkIEpTU3RyaW5nOjp2aXNpdENo
aWxkcmVuKEpTQ2VsbCogY2VsCiAgICAgICAgIHZpc2l0b3IucmVwb3J0RXh0cmFNZW1vcnlWaXNp
dGVkKGltcGwtPmNvc3REdXJpbmdHQygpKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpT
U3RyaW5nKTsKKwogc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBtYXhMZW5ndGhGb3JPblN0YWNr
UmVzb2x2ZSA9IDIwNDg7CiAKIHZvaWQgSlNSb3BlU3RyaW5nOjpyZXNvbHZlUm9wZUludGVybmFs
OChMQ2hhciogYnVmZmVyKSBjb25zdApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNTdHJpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU1N0cmluZy5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU1N0cmluZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBAQAogLyoKICAq
ICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMSBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQog
ICogIENvcHlyaWdodCAoQykgMjAwMSBQZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQotICogIENv
cHlyaWdodCAoQykgMjAwMy0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
ICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjE3LDcgKzIxNyw3IEBAIHB1YmxpYzoKIAogICAg
IHN0YXRpYyB2b2lkIGR1bXBUb1N0cmVhbShjb25zdCBKU0NlbGwqLCBQcmludFN0cmVhbSYpOwog
ICAgIHN0YXRpYyBzaXplX3QgZXN0aW1hdGVkU2l6ZShKU0NlbGwqLCBWTSYpOwotICAgIHN0YXRp
YyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJF
X1ZJU0lUX0NISUxEUkVOOwogCiAgICAgQUxXQVlTX0lOTElORSBib29sIGlzUm9wZSgpIGNvbnN0
CiAgICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmdJdGVy
YXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNT
dHJpbmdJdGVyYXRvci5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTU3RyaW5nSXRlcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYg
KzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxNSBZdXN1a2UgU3V6dWtpIDx1dGF0YW5l
LnRlYUBnbWFpbC5jb20+LgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTEs
MTEgKzUxLDE0IEBAIEpTU3RyaW5nSXRlcmF0b3IqIEpTU3RyaW5nSXRlcmF0b3I6OmNsb24KICAg
ICByZXR1cm4gY2xvbmU7CiB9CiAKLXZvaWQgSlNTdHJpbmdJdGVyYXRvcjo6dmlzaXRDaGlsZHJl
bihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUg
VmlzaXRvcj4KK3ZvaWQgSlNTdHJpbmdJdGVyYXRvcjo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxs
KiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nh
c3Q8SlNTdHJpbmdJdGVyYXRvcio+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJ
VFModGhpc09iamVjdCwgaW5mbygpKTsKICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmpl
Y3QsIHZpc2l0b3IpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNTdHJpbmdJdGVyYXRv
cik7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNTdHJpbmdJdGVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTU3RyaW5nSXRlcmF0b3IuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmdJdGVyYXRvci5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxNSBZdXN1a2UgU3V6
dWtpIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+LgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtNzksNyArODAsNyBAQCBwdWJsaWM6CiAgICAgSlNWYWx1ZSBpbmRleCgpIGNvbnN0IHsg
cmV0dXJuIGludGVybmFsRmllbGQoRmllbGQ6OkluZGV4KS5nZXQoKTsgfQogICAgIEpTU3RyaW5n
SXRlcmF0b3IqIGNsb25lKEpTR2xvYmFsT2JqZWN0Kik7CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNp
dENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElM
RFJFTjsKIAogcHJpdmF0ZToKICAgICBKU1N0cmluZ0l0ZXJhdG9yKFZNJiB2bSwgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N5bWJv
bFRhYmxlT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0LmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVjdC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTkgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0zNiw3ICszNiw4IEBAIG5hbWVzcGFjZSBKU0MgewogCiBjb25zdCBDbGFzc0lu
Zm8gSlNTeW1ib2xUYWJsZU9iamVjdDo6c19pbmZvID0geyAiU3ltYm9sVGFibGVPYmplY3QiLCAm
QmFzZTo6c19pbmZvLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTU3lt
Ym9sVGFibGVPYmplY3QpIH07CiAKLXZvaWQgSlNTeW1ib2xUYWJsZU9iamVjdDo6dmlzaXRDaGls
ZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5h
bWUgVmlzaXRvcj4KK3ZvaWQgSlNTeW1ib2xUYWJsZU9iamVjdDo6dmlzaXRDaGlsZHJlbkltcGwo
SlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTU3ltYm9sVGFibGVPYmpl
Y3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNTeW1ib2xUYWJsZU9iamVjdCo+KGNlbGwpOwogICAg
IEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTQ0LDYg
KzQ1LDggQEAgdm9pZCBKU1N5bWJvbFRhYmxlT2JqZWN0Ojp2aXNpdENoaWxkcmVuKAogICAgIHZp
c2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fc3ltYm9sVGFibGUpOwogfQogCitERUZJTkVfVklT
SVRfQ0hJTERSRU4oSlNTeW1ib2xUYWJsZU9iamVjdCk7CisKIGJvb2wgSlNTeW1ib2xUYWJsZU9i
amVjdDo6ZGVsZXRlUHJvcGVydHkoSlNDZWxsKiBjZWxsLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBEZWxldGVQcm9wZXJ0eVNsb3QmIHNs
b3QpCiB7CiAgICAgSlNTeW1ib2xUYWJsZU9iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1N5
bWJvbFRhYmxlT2JqZWN0Kj4oY2VsbCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVjdC5oCShyZXZpc2lvbiAyNzI4MzApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0LmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIw
MjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEy
LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC03MCw3ICs3MCw3IEBAIHByb3RlY3RlZDoKICAgICAgICAgbV9zeW1i
b2xUYWJsZS5zZXQodm0sIHRoaXMsIHN5bWJvbFRhYmxlKTsKICAgICB9CiAgICAgCi0gICAgc3Rh
dGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xB
UkVfVklTSVRfQ0hJTERSRU47CiAgICAgCiBwcml2YXRlOgogICAgIFdyaXRlQmFycmllcjxTeW1i
b2xUYWJsZT4gbV9zeW1ib2xUYWJsZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTV2Vha09iamVjdFJlZi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNXZWFrT2JqZWN0UmVmLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNXZWFrT2JqZWN0UmVmLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUsIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOS0yMDIxIEFwcGxl
LCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTM5LDcgKzM5LDggQEAgdm9pZCBKU1dlYWtPYmplY3RSZWY6OmZpbmlzaENyZWF0aW9u
KFZNJgogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKIH0KIAotdm9pZCBKU1dlYWtPYmpl
Y3RSZWY6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikK
K3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTV2Vha09iamVjdFJlZjo6dmlzaXRD
aGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGF1dG8q
IHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNXZWFrT2JqZWN0UmVmKj4oY2VsbCk7CiAgICAgQVNTRVJU
X0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNTEsNiArNTIsOCBA
QCB2b2lkIEpTV2Vha09iamVjdFJlZjo6dmlzaXRDaGlsZHJlbihKU0NlCiAgICAgfQogfQogCitE
RUZJTkVfVklTSVRfQ0hJTERSRU4oSlNXZWFrT2JqZWN0UmVmKTsKKwogdm9pZCBKU1dlYWtPYmpl
Y3RSZWY6OmZpbmFsaXplVW5jb25kaXRpb25hbGx5KFZNJiB2bSkKIHsKICAgICBpZiAobV92YWx1
ZSAmJiAhdm0uaGVhcC5pc01hcmtlZChtX3ZhbHVlLmdldCgpKSkKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTV2Vha09iamVjdFJlZi5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTV2Vha09iamVjdFJlZi5oCShyZXZpc2lvbiAyNzI4
MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1dlYWtPYmplY3RSZWYuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTkg
QXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOS0y
MDIxIEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTY1LDcgKzY1LDcgQEAgcHVibGljOgogICAgIH0KIAogICAgIHZvaWQg
ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoVk0mKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxk
cmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsK
IAogcHJpdmF0ZToKICAgICBKU1dlYWtPYmplY3RSZWYoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTV2l0aFNjb3BlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1dpdGhTY29w
ZS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTV2l0aFNjb3BlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTIsIDIwMTYgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjEgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00MSw3ICs0MSw4IEBAIEpTV2l0
aFNjb3BlKiBKU1dpdGhTY29wZTo6Y3JlYXRlKAogICAgIHJldHVybiB3aXRoU2NvcGU7CiB9CiAK
LXZvaWQgSlNXaXRoU2NvcGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRv
ciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTV2l0aFNjb3Bl
Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAg
ICAgSlNXaXRoU2NvcGUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNXaXRoU2NvcGUqPihjZWxsKTsK
ICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC00
OSw2ICs1MCw4IEBAIHZvaWQgSlNXaXRoU2NvcGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiAKICAg
ICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX29iamVjdCk7CiB9CiAKK0RFRklORV9WSVNJ
VF9DSElMRFJFTihKU1dpdGhTY29wZSk7CisKIFN0cnVjdHVyZSogSlNXaXRoU2NvcGU6OmNyZWF0
ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUg
cHJvdG8pCiB7CiAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3Qs
IHByb3RvLCBUeXBlSW5mbyhXaXRoU2NvcGVUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1dpdGhTY29wZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTV2l0aFNjb3BlLmgJKHJl
dmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTV2l0aFNj
b3BlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDEyLCAyMDE2IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMi0yMDIxIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDMsNyArNDMsNyBAQCBwdWJsaWM6CiAKICAgICBK
U09iamVjdCogb2JqZWN0KCkgeyByZXR1cm4gbV9vYmplY3QuZ2V0KCk7IH0KIAotICAgIHN0YXRp
YyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJF
X1ZJU0lUX0NISUxEUkVOOwogCiAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJl
KFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlIHByb3RvKTsKIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNXcmFwcGVyT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1dyYXBwZXJPYmplY3QuY3BwCShyZXZpc2lv
biAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1dyYXBwZXJPYmpl
Y3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqICBDb3B5cmlnaHQg
KEMpIDIwMDYgTWFrcyBPcmxvdmljaAotICogIENvcHlyaWdodCAoQykgMjAwNiwgMjAwOSwgMjAx
MiBBcHBsZSwgSW5jLgorICogIENvcHlyaWdodCAoQykgMjAwNi0yMDIxIEFwcGxlLCBJbmMuCiAg
KgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjksMTEgKzI5LDE0IEBAIG5hbWVzcGFjZSBKU0Mgewog
CiBTVEFUSUNfQVNTRVJUX0lTX1RSSVZJQUxMWV9ERVNUUlVDVElCTEUoSlNXcmFwcGVyT2JqZWN0
KTsKIAotdm9pZCBKU1dyYXBwZXJPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBT
bG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpT
V3JhcHBlck9iamVjdDo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2
aXNpdG9yKQogewogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNXcmFwcGVyT2JqZWN0
Kj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZv
KCkpOwogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CiB9CiAK
K0RFRklORV9WSVNJVF9DSElMRFJFTl9XSVRIX01PRElGSUVSKEpTX0VYUE9SVF9QUklWQVRFLCBK
U1dyYXBwZXJPYmplY3QpOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTV3JhcHBlck9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTV3JhcHBlck9iamVjdC5oCShyZXZpc2lvbiAyNzI4
MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1dyYXBwZXJPYmplY3QuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA2
IE1ha3MgT3Jsb3ZpY2gKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwNi0y
MDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CkBAIC02NCw3ICs2NCw3IEBAIHB1YmxpYzoKIHByb3RlY3RlZDoKICAgICBleHBsaWNpdCBKU1dy
YXBwZXJPYmplY3QoVk0mLCBTdHJ1Y3R1cmUqKTsKIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0
YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNM
QVJFX1ZJU0lUX0NISUxEUkVOX1dJVEhfTU9ESUZJRVIoSlNfRVhQT1JUX1BSSVZBVEUpOwogfTsK
IAogaW5saW5lIEpTV3JhcHBlck9iamVjdDo6SlNXcmFwcGVyT2JqZWN0KFZNJiB2bSwgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9MYXp5
Q2xhc3NTdHJ1Y3R1cmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0xhenlDbGFzc1N0cnVjdHVyZS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0xhenlDbGFzc1N0cnVjdHVyZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTkgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC03MiwxMiArNzIsMTYgQEAgdm9pZCBMYXp5Q2xhc3NTdHJ1Y3R1cmU6OkluaXRp
YWxpemVyOjpzZQogICAgIGNsYXNzU3RydWN0dXJlLm1fY29uc3RydWN0b3Iuc2V0KHZtLCBnbG9i
YWwsIGNvbnN0cnVjdG9yKTsKIH0KIAotdm9pZCBMYXp5Q2xhc3NTdHJ1Y3R1cmU6OnZpc2l0KFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgTGF6
eUNsYXNzU3RydWN0dXJlOjp2aXNpdChWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIG1fc3RydWN0
dXJlLnZpc2l0KHZpc2l0b3IpOwogICAgIHZpc2l0b3IuYXBwZW5kKG1fY29uc3RydWN0b3IpOwog
fQogCit0ZW1wbGF0ZSB2b2lkIExhenlDbGFzc1N0cnVjdHVyZTo6dmlzaXQoQWJzdHJhY3RTbG90
VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBMYXp5Q2xhc3NTdHJ1Y3R1cmU6OnZpc2l0KFNsb3RW
aXNpdG9yJik7CisKIHZvaWQgTGF6eUNsYXNzU3RydWN0dXJlOjpkdW1wKFByaW50U3RyZWFtJiBv
dXQpIGNvbnN0CiB7CiAgICAgb3V0LnByaW50KCI8c3RydWN0dXJlID0gIiwgbV9zdHJ1Y3R1cmUs
ICIsIGNvbnN0cnVjdG9yID0gIiwgUmF3UG9pbnRlcihtX2NvbnN0cnVjdG9yLmdldCgpKSwgIj4i
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0xhenlDbGFzc1N0cnVjdHVy
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0xhenlDbGFz
c1N0cnVjdHVyZS5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9MYXp5Q2xhc3NTdHJ1Y3R1cmUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMTcsNyArMTE3LDcg
QEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9jb25zdHJ1Y3Rvci5nZXQoKTsKICAgICB9CiAg
ICAgCi0gICAgdm9pZCB2aXNpdChTbG90VmlzaXRvciYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFZpc2l0b3I+IHZvaWQgdmlzaXQoVmlzaXRvciYpOwogICAgIAogICAgIHZvaWQgZHVtcChQcmlu
dFN0cmVhbSYpIGNvbnN0OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9M
YXp5UHJvcGVydHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9MYXp5UHJvcGVydHkuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvTGF6eVByb3BlcnR5LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMDMsNyArMTAz
LDcgQEAgcHVibGljOgogICAgIHZvaWQgc2V0TWF5QmVOdWxsKFZNJiwgY29uc3QgT3duZXJUeXBl
KiBvd25lciwgRWxlbWVudFR5cGUqKTsKICAgICB2b2lkIHNldChWTSYsIGNvbnN0IE93bmVyVHlw
ZSogb3duZXIsIEVsZW1lbnRUeXBlKik7CiAgICAgCi0gICAgdm9pZCB2aXNpdChTbG90VmlzaXRv
ciYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgdmlzaXQoVmlzaXRvciYp
OwogICAgIAogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwogICAgIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTGF6eVByb3BlcnR5SW5saW5lcy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0xhenlQcm9wZXJ0eUlubGlu
ZXMuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
TGF6eVByb3BlcnR5SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY2LDcgKzY2LDggQEAgdm9pZCBM
YXp5UHJvcGVydHk8T3duZXJUeXBlLCBFbGVtZW50VHlwZQogfQogCiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBPd25lclR5cGUsIHR5cGVuYW1lIEVsZW1lbnRUeXBlPgotdm9pZCBMYXp5UHJvcGVydHk8T3du
ZXJUeXBlLCBFbGVtZW50VHlwZT46OnZpc2l0KFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxh
dGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgTGF6eVByb3BlcnR5PE93bmVyVHlwZSwgRWxlbWVu
dFR5cGU+Ojp2aXNpdChWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGlmIChtX3BvaW50ZXIgJiYg
IShtX3BvaW50ZXIgJiBsYXp5VGFnKSkKICAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJl
ZChiaXR3aXNlX2Nhc3Q8RWxlbWVudFR5cGUqPihtX3BvaW50ZXIpKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL01vZHVsZVByb2dyYW1FeGVjdXRhYmxlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Nb2R1bGVQcm9ncmFtRXhlY3V0
YWJsZS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL01vZHVsZVByb2dyYW1FeGVjdXRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAsIDIwMTMsIDIwMTUtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTc5LDcgKzc5LDggQEAgYXV0byBNb2R1bGVQcm9ncmFtRXhlY3V0YWJsZTo6
ZW5zdXJlVGVtcAogICAgIHJldHVybiBlbnN1cmVUZW1wbGF0ZU9iamVjdE1hcEltcGwobV90ZW1w
bGF0ZU9iamVjdE1hcCk7CiB9CiAKLXZvaWQgTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGU6OnZpc2l0
Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5
cGVuYW1lIFZpc2l0b3I+Cit2b2lkIE1vZHVsZVByb2dyYW1FeGVjdXRhYmxlOjp2aXNpdENoaWxk
cmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgTW9kdWxlUHJv
Z3JhbUV4ZWN1dGFibGUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8TW9kdWxlUHJvZ3JhbUV4ZWN1dGFi
bGUqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGlu
Zm8oKSk7CkBAIC05NCw0ICs5NSw2IEBAIHZvaWQgTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGU6OnZp
c2l0Q2hpbGQKICAgICB9CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihNb2R1bGVQcm9ncmFt
RXhlY3V0YWJsZSk7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Nb2R1bGVQcm9ncmFtRXhlY3V0YWJsZS5oCShy
ZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Nb2R1bGVQ
cm9ncmFtRXhlY3V0YWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAwOS0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNzcsNyArNzcsNyBAQCBwcml2
YXRlOgogCiAgICAgTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUoSlNHbG9iYWxPYmplY3QqLCBjb25z
dCBTb3VyY2VDb2RlJik7CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCos
IFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIFdyaXRl
QmFycmllcjxVbmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2s+IG1fdW5saW5rZWRNb2R1bGVQ
cm9ncmFtQ29kZUJsb2NrOwogICAgIFdyaXRlQmFycmllcjxTeW1ib2xUYWJsZT4gbV9tb2R1bGVF
bnZpcm9ubWVudFN5bWJvbFRhYmxlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvT3B0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvT3B0aW9ucy5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL09wdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMS0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTU4LDYgKzU1OCw5IEBA
IHZvaWQgT3B0aW9uczo6cmVjb21wdXRlRGVwZW5kZW50T3B0aW9ucygKIAogICAgIGlmIChPcHRp
b25zOjp1c2VQcml2YXRlU3RhdGljQ2xhc3NGaWVsZHMoKSkKICAgICAgICAgT3B0aW9uczo6dXNl
UHJpdmF0ZUNsYXNzRmllbGRzKCkgPSB0cnVlOworCisgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VW
ZXJpZnlHQygpKQorICAgICAgICBPcHRpb25zOjp2ZXJpZnlHQygpID0gdHJ1ZTsKIH0KIAogaW5s
aW5lIHZvaWQqIE9wdGlvbnM6OmFkZHJlc3NPZk9wdGlvbihPcHRpb25zOjpJRCBpZCkKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaAkocmV2aXNpb24g
MjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaAko
d29ya2luZyBjb3B5KQpAQCAtMzY5LDYgKzM2OSw4IEBAIEpTX0VYUE9SVF9QUklWQVRFIGJvb2wg
Y2FuVXNlSklUQ2FnZSgpOwogICAgIHYoQm9vbCwgYWx3YXlzR2VuZXJhdGVQQ1RvQ29kZU9yaWdp
bk1hcCwgZmFsc2UsIE5vcm1hbCwgIlRoaXMgd2lsbCBtYWtlIHN1cmUgd2UgYWx3YXlzIGdlbmVy
YXRlIGEgUENUb0NvZGVPcmlnaW5NYXAgZm9yIEpJVGVkIGNvZGUuIikgXAogICAgIFwKICAgICB2
KERvdWJsZSwgcmFuZG9tSW50ZWdyaXR5QXVkaXRSYXRlLCAwLjA1LCBOb3JtYWwsICJQcm9iYWJp
bGl0eSBvZiByYW5kb20gaW50ZWdyaXR5IGF1ZGl0cyBbMC4wIC0gMS4wXSIpIFwKKyAgICB2KEJv
b2wsIHZlcmlmeUdDLCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCisgICAgdihCb29sLCB2ZXJi
b3NlVmVyaWZ5R0MsIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KEJvb2wsIHZlcmlm
eUhlYXAsIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KFVuc2lnbmVkLCBudW1iZXJP
ZkdDQ3ljbGVzVG9SZWNvcmRGb3JWZXJpZmljYXRpb24sIDMsIE5vcm1hbCwgbnVsbHB0cikgXAog
ICAgIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb2dyYW1FeGVjdXRh
YmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9n
cmFtRXhlY3V0YWJsZS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1Byb2dyYW1FeGVjdXRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxOSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAyMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTIw
OCw3ICsyMDgsOCBAQCBhdXRvIFByb2dyYW1FeGVjdXRhYmxlOjplbnN1cmVUZW1wbGF0ZU9iCiAg
ICAgcmV0dXJuIGVuc3VyZVRlbXBsYXRlT2JqZWN0TWFwSW1wbChtX3RlbXBsYXRlT2JqZWN0TWFw
KTsKIH0KIAotdm9pZCBQcm9ncmFtRXhlY3V0YWJsZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNl
bGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3Zv
aWQgUHJvZ3JhbUV4ZWN1dGFibGU6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlz
aXRvciYgdmlzaXRvcikKIHsKICAgICBQcm9ncmFtRXhlY3V0YWJsZSogdGhpc09iamVjdCA9IGpz
Q2FzdDxQcm9ncmFtRXhlY3V0YWJsZSo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5I
RVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTIyMiw0ICsyMjMsNiBAQCB2b2lkIFByb2dy
YW1FeGVjdXRhYmxlOjp2aXNpdENoaWxkcmVuKEpTCiAgICAgfQogfQogCitERUZJTkVfVklTSVRf
Q0hJTERSRU4oUHJvZ3JhbUV4ZWN1dGFibGUpOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb2dyYW1FeGVjdXRhYmxlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvZ3JhbUV4ZWN1dGFibGUu
aAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJv
Z3JhbUV4ZWN1dGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDktMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDktMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTgxLDcgKzgxLDcgQEAgcHJpdmF0
ZToKIAogICAgIFByb2dyYW1FeGVjdXRhYmxlKEpTR2xvYmFsT2JqZWN0KiwgY29uc3QgU291cmNl
Q29kZSYpOwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90Vmlz
aXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBXcml0ZUJhcnJpZXI8
VW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrPiBtX3VubGlua2VkUHJvZ3JhbUNvZGVCbG9jazsKICAg
ICBXcml0ZUJhcnJpZXI8RXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZT4gbV9wcm9ncmFtQ29kZUJs
b2NrOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlNYXBIYXNo
VGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9w
ZXJ0eU1hcEhhc2hUYWJsZS5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9Qcm9wZXJ0eU1hcEhhc2hUYWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxOSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDA0LTIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTEzMyw3ICsx
MzMsNyBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNEZXN0cnVj
dGlvbiA9IHRydWU7CiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKLSAgICBzdGF0
aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFS
RV9WSVNJVF9DSElMRFJFTjsKIAogICAgIERFQ0xBUkVfRVhQT1JUX0lORk87CiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5VGFibGUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5VGFibGUuY3BwCShyZXZp
c2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eVRh
YmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMTgsNyArMTE4LDggQEAgdm9pZCBQcm9wZXJ0
eVRhYmxlOjpmaW5pc2hDcmVhdGlvbihWTSYgdgogICAgIHZtLmhlYXAucmVwb3J0RXh0cmFNZW1v
cnlBbGxvY2F0ZWQoZGF0YVNpemUoKSk7CiB9CiAKLXZvaWQgUHJvcGVydHlUYWJsZTo6dmlzaXRD
aGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlw
ZW5hbWUgVmlzaXRvcj4KK3ZvaWQgUHJvcGVydHlUYWJsZTo6dmlzaXRDaGlsZHJlbkltcGwoSlND
ZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBq
c0Nhc3Q8UHJvcGVydHlUYWJsZSo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJ
VFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTEyNiw2ICsxMjcsOCBAQCB2b2lkIFByb3BlcnR5
VGFibGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsCiAgICAgdmlzaXRvci5yZXBvcnRFeHRyYU1lbW9y
eVZpc2l0ZWQodGhpc09iamVjdC0+ZGF0YVNpemUoKSk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElM
RFJFTihQcm9wZXJ0eVRhYmxlKTsKKwogdm9pZCBQcm9wZXJ0eVRhYmxlOjpkZXN0cm95KEpTQ2Vs
bCogY2VsbCkKIHsKICAgICBzdGF0aWNfY2FzdDxQcm9wZXJ0eVRhYmxlKj4oY2VsbCktPlByb3Bl
cnR5VGFibGU6On5Qcm9wZXJ0eVRhYmxlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9Qcm94eU9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvUHJveHlPYmplY3QuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm94eU9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjAgQXBwbGUgSW5jLiBB
bGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjEgQXBwbGUgSW5j
LiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0xMTU4LDcgKzExNTgsOCBAQCBib29sIFByb3h5T2JqZWN0Ojppc1Jldm9rZWQoKSBjb25zdAog
ICAgIHJldHVybiBoYW5kbGVyKCkuaXNOdWxsKCk7CiB9CiAKLXZvaWQgUHJveHlPYmplY3Q6OnZp
c2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRl
PHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFByb3h5T2JqZWN0Ojp2aXNpdENoaWxkcmVuSW1wbChK
U0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgUHJveHlPYmplY3QqIHRoaXNP
YmplY3QgPSBqc0Nhc3Q8UHJveHlPYmplY3QqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNU
X0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC0xMTY4LDQgKzExNjksNiBAQCB2b2lk
IFByb3h5T2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogCiAgICAgdmlzaXRvci5hcHBlbmQo
dGhpc09iamVjdC0+bV9oYW5kbGVyKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKFByb3h5
T2JqZWN0KTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9Qcm94eU9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1Byb3h5T2JqZWN0LmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3h5T2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtOTEsNyAr
OTEsNyBAQCBwcml2YXRlOgogICAgIHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNP
YmplY3QqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZUFycmF5JiwgRG9udEVudW1Qcm9w
ZXJ0aWVzTW9kZSk7CiAgICAgc3RhdGljIGJvb2wgc2V0UHJvdG90eXBlKEpTT2JqZWN0KiwgSlNH
bG9iYWxPYmplY3QqLCBKU1ZhbHVlIHByb3RvdHlwZSwgYm9vbCBzaG91bGRUaHJvd0lmQ2FudFNl
dCk7CiAgICAgc3RhdGljIEpTVmFsdWUgZ2V0UHJvdG90eXBlKEpTT2JqZWN0KiwgSlNHbG9iYWxP
YmplY3QqKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNp
dG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIGJvb2wgZ2V0T3duUHJv
cGVydHlTbG90Q29tbW9uKEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNs
b3QmKTsKICAgICBib29sIHBlcmZvcm1JbnRlcm5hbE1ldGhvZEdldE93blByb3BlcnR5KEpTR2xv
YmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3h5UmV2b2tlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm94eVJldm9rZS5jcHAJKHJldmlzaW9uIDI3Mjgz
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3h5UmV2b2tlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBw
bGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjEg
QXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC02OSw3ICs2OSw4IEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihwZXJmb3Jt
UHJveHlSZXYKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQog
Ci12b2lkIFByb3h5UmV2b2tlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0
b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBQcm94eVJldm9r
ZTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewog
ICAgIFByb3h5UmV2b2tlKiB0aGlzT2JqZWN0ID0ganNDYXN0PFByb3h5UmV2b2tlKj4oY2VsbCk7
CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAt
NzgsNCArNzksNiBAQCB2b2lkIFByb3h5UmV2b2tlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogCiAg
ICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9wcm94eSk7CiB9CiAKK0RFRklORV9WSVNJ
VF9DSElMRFJFTihQcm94eVJldm9rZSk7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJveHlSZXZva2UuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm94eVJldm9rZS5oCShyZXZpc2lvbiAyNzI4
MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm94eVJldm9rZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE5
IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0y
MDIxIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtNTIsNyArNTIsNyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgdm9pZCBm
aW5pc2hDcmVhdGlvbihWTSYsIFByb3h5T2JqZWN0Kik7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRD
aGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERS
RU47CiAgICAgSlNWYWx1ZSBwcm94eSgpIHsgcmV0dXJuIG1fcHJveHkuZ2V0KCk7IH0KICAgICB2
b2lkIHNldFByb3h5VG9OdWxsKFZNJiB2bSkgeyByZXR1cm4gbV9wcm94eS5zZXQodm0sIHRoaXMs
IGpzTnVsbCgpKTsgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdF
eHBDYWNoZWRSZXN1bHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1JlZ0V4cENhY2hlZFJlc3VsdC5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENhY2hlZFJlc3VsdC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMzEsNyArMzEsOCBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotdm9pZCBSZWdF
eHBDYWNoZWRSZXN1bHQ6OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVt
cGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgUmVnRXhwQ2FjaGVkUmVzdWx0Ojp2aXNpdEFn
Z3JlZ2F0ZUltcGwoVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB2aXNpdG9yLmFwcGVuZChtX2xh
c3RJbnB1dCk7CiAgICAgdmlzaXRvci5hcHBlbmQobV9sYXN0UmVnRXhwKTsKQEAgLTQzLDYgKzQ0
LDggQEAgdm9pZCBSZWdFeHBDYWNoZWRSZXN1bHQ6OnZpc2l0QWdncmVnYXRlKAogICAgIH0KIH0K
IAorREVGSU5FX1ZJU0lUX0FHR1JFR0FURShSZWdFeHBDYWNoZWRSZXN1bHQpOworCiBKU0FycmF5
KiBSZWdFeHBDYWNoZWRSZXN1bHQ6Omxhc3RSZXN1bHQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgSlNPYmplY3QqIG93bmVyKQogewogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0o
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENhY2hlZFJlc3Vs
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENh
Y2hlZFJlc3VsdC5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9SZWdFeHBDYWNoZWRSZXN1bHQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02NSw3ICs2
NSw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fcmVpZmllZCA/IG1fcmVpZmllZElucHV0
LmdldCgpIDogbV9sYXN0SW5wdXQuZ2V0KCk7CiAgICAgfQogCi0gICAgdm9pZCB2aXNpdEFnZ3Jl
Z2F0ZShTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQUdHUkVHQVRFOwogCiAgICAg
Ly8gbV9sYXN0UmVnRXhwIHdvdWxkIGJlIG51bGxwdHIgd2hlbiBSZWdFeHBDYWNoZWRSZXN1bHQg
aXMgbm90IHJlaWZpZWQuCiAgICAgLy8gSWYgd2UgZmluZCBtX2xhc3RSZWdFeHAgaXMgbnVsbHB0
ciwgaXQgbWVhbnMgdGhpcyBzaG91bGQgaG9sZCB0aGUgZW1wdHkgUmVnRXhwLgpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwR2xvYmFsRGF0YS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwR2xvYmFsRGF0YS5jcHAJ
KHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4
cEdsb2JhbERhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTktMjAyMSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMwLDExICszMCwxNCBAQAogCiBuYW1lc3Bh
Y2UgSlNDIHsKIAotdm9pZCBSZWdFeHBHbG9iYWxEYXRhOjp2aXNpdEFnZ3JlZ2F0ZShTbG90Vmlz
aXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFJlZ0V4cEds
b2JhbERhdGE6OnZpc2l0QWdncmVnYXRlSW1wbChWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIG1f
Y2FjaGVkUmVzdWx0LnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOwogfQogCitERUZJTkVfVklTSVRf
QUdHUkVHQVRFKFJlZ0V4cEdsb2JhbERhdGEpOworCiBKU1ZhbHVlIFJlZ0V4cEdsb2JhbERhdGE6
OmdldEJhY2tyZWYoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgdW5zaWduZWQgaSkKIHsK
ICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9SZWdFeHBHbG9iYWxEYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwR2xvYmFsRGF0YS5oCShyZXZpc2lvbiAyNzI4MzAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBHbG9iYWxEYXRhLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE5IEFw
cGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOS0yMDIx
IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtNDEsNyArNDEsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRJbnB1dChKU0ds
b2JhbE9iamVjdCosIEpTU3RyaW5nKik7CiAgICAgSlNTdHJpbmcqIGlucHV0KCkgeyByZXR1cm4g
bV9jYWNoZWRSZXN1bHQuaW5wdXQoKTsgfQogCi0gICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShTbG90
VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQUdHUkVHQVRFOwogCiAgICAgSlNWYWx1ZSBn
ZXRCYWNrcmVmKEpTR2xvYmFsT2JqZWN0KiwgdW5zaWduZWQpOwogICAgIEpTVmFsdWUgZ2V0TGFz
dFBhcmVuKEpTR2xvYmFsT2JqZWN0Kik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9SZWdFeHBPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1JlZ0V4cE9iamVjdC5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNiArMSw2IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAwIEhhcnJpIFBvcnRl
biAocG9ydGVuQGtkZS5vcmcpCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMTkgQXBwbGUgSW5j
LiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwMy0yMDIxIEFwcGxl
IEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKQEAgLTQ2LDcg
KzQ2LDggQEAgdm9pZCBSZWdFeHBPYmplY3Q6OmZpbmlzaENyZWF0aW9uKFZNJiB2bQogICAgIEFT
U0VSVCh0eXBlKCkgPT0gUmVnRXhwT2JqZWN0VHlwZSk7CiB9CiAKLXZvaWQgUmVnRXhwT2JqZWN0
Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1w
bGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBSZWdFeHBPYmplY3Q6OnZpc2l0Q2hpbGRyZW5J
bXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBSZWdFeHBPYmplY3Qq
IHRoaXNPYmplY3QgPSBqc0Nhc3Q8UmVnRXhwT2JqZWN0Kj4oY2VsbCk7CiAgICAgQVNTRVJUX0dD
X09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNTUsNiArNTYsOCBAQCB2
b2lkIFJlZ0V4cE9iamVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqCiAgICAgdmlzaXRvci5hcHBl
bmQodGhpc09iamVjdC0+bV9sYXN0SW5kZXgpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4o
UmVnRXhwT2JqZWN0KTsKKwogYm9vbCBSZWdFeHBPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdChK
U09iamVjdCogb2JqZWN0LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5h
bWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgVk0mIHZtID0gZ2xv
YmFsT2JqZWN0LT52bSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVn
RXhwT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
UmVnRXhwT2JqZWN0LmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1JlZ0V4cE9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAog
LyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUu
b3JnKQotICogIENvcHlyaWdodCAoQykgMjAwMy0yMDE5IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBS
ZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAyMSBBcHBsZSBJbmMuIEFsbCBSaWdo
dHMgUmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCkBAIC0xMzMsNyArMTMzLDcgQEAgcHJp
dmF0ZToKICAgICBKU19FWFBPUlRfUFJJVkFURSBSZWdFeHBPYmplY3QoVk0mLCBTdHJ1Y3R1cmUq
LCBSZWdFeHAqKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGZpbmlzaENyZWF0aW9uKFZN
Jik7CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9y
Jik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIGJvb2wgbGFzdEluZGV4SXNX
cml0YWJsZSgpIGNvbnN0CiAgICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU2FtcGxpbmdQcm9maWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NhbXBsaW5nUHJvZmlsZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC02NTIsNyArNjUyLDcgQEAgdm9pZCBTYW1wbGluZ1Byb2ZpbGVyOjpwcm9jZXNz
VW52ZXJpZmllZAogICAgIG1fdW5wcm9jZXNzZWRTdGFja1RyYWNlcy5jbGVhcigpOwogfQogCi12
b2lkIFNhbXBsaW5nUHJvZmlsZXI6OnZpc2l0KFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBT
YW1wbGluZ1Byb2ZpbGVyOjp2aXNpdChBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewog
ICAgIFJFTEVBU0VfQVNTRVJUKG1fbG9jay5pc0xvY2tlZCgpKTsKICAgICBmb3IgKEpTQ2VsbCog
Y2VsbCA6IG1fbGl2ZUNlbGxQb2ludGVycykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1NhbXBsaW5nUHJvZmlsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TYW1wbGluZ1Byb2ZpbGVyLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NhbXBsaW5nUHJvZmlsZXIuaAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC0xNzEsNyArMTcxLDcgQEAgcHVibGljOgogICAgIHZvaWQgbm90aWNlSlNMb2NrQWNxdWlz
aXRpb24oKTsKICAgICB2b2lkIG5vdGljZVZNRW50cnkoKTsKICAgICB2b2lkIHNodXRkb3duKCk7
Ci0gICAgdm9pZCB2aXNpdChTbG90VmlzaXRvciYpOworICAgIHZvaWQgdmlzaXQoQWJzdHJhY3RT
bG90VmlzaXRvciYpOwogICAgIExvY2smIGdldExvY2soKSB7IHJldHVybiBtX2xvY2s7IH0KICAg
ICB2b2lkIHNldFRpbWluZ0ludGVydmFsKFNlY29uZHMgaW50ZXJ2YWwpIHsgbV90aW1pbmdJbnRl
cnZhbCA9IGludGVydmFsOyB9CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBzdGFydCgpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVkQXJndW1lbnRzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29wZWRBcmd1bWVu
dHMuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TY29wZWRBcmd1bWVudHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtOTgsNyArOTgsOCBAQCBT
Y29wZWRBcmd1bWVudHMqIFNjb3BlZEFyZ3VtZW50czo6Y3JlYXRlCiAgICAgcmV0dXJuIHJlc3Vs
dDsKIH0KIAotdm9pZCBTY29wZWRBcmd1bWVudHM6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxs
LCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lk
IFNjb3BlZEFyZ3VtZW50czo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9y
JiB2aXNpdG9yKQogewogICAgIFNjb3BlZEFyZ3VtZW50cyogdGhpc09iamVjdCA9IHN0YXRpY19j
YXN0PFNjb3BlZEFyZ3VtZW50cyo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJ
VFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTExNSw2ICsxMTYsOCBAQCB2b2lkIFNjb3BlZEFy
Z3VtZW50czo6dmlzaXRDaGlsZHJlbihKU0NlCiAgICAgfQogfQogCitERUZJTkVfVklTSVRfQ0hJ
TERSRU4oU2NvcGVkQXJndW1lbnRzKTsKKwogU3RydWN0dXJlKiBTY29wZWRBcmd1bWVudHM6OmNy
ZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFs
dWUgcHJvdG90eXBlKQogewogICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFs
T2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKFNjb3BlZEFyZ3VtZW50c1R5cGUsIFN0cnVjdHVy
ZUZsYWdzKSwgaW5mbygpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Nj
b3BlZEFyZ3VtZW50cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1Njb3BlZEFyZ3VtZW50cy5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TY29wZWRBcmd1bWVudHMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxOSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTYz
LDkgKzYzLDkgQEAgcHVibGljOgogICAgIAogICAgIC8vIENyZWF0ZXMgYW4gYXJndW1lbnRzIG9i
amVjdCBieSBjb3B5aW5nIHRoZSBhcmd1bWVudHMgZnJvbSBhIHdlbGwtZGVmaW5lZCBzdGFjayBs
b2NhdGlvbi4KICAgICBzdGF0aWMgU2NvcGVkQXJndW1lbnRzKiBjcmVhdGVCeUNvcHlpbmdGcm9t
KFZNJiwgU3RydWN0dXJlKiwgUmVnaXN0ZXIqIGFyZ3VtZW50c1N0YXJ0LCB1bnNpZ25lZCB0b3Rh
bExlbmd0aCwgSlNGdW5jdGlvbiogY2FsbGVlLCBTY29wZWRBcmd1bWVudHNUYWJsZSosIEpTTGV4
aWNhbEVudmlyb25tZW50Kik7Ci0gICAgCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihK
U0NlbGwqLCBTbG90VmlzaXRvciYpOwotICAgIAorCisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJF
TjsKKwogICAgIHVpbnQzMl90IGludGVybmFsTGVuZ3RoKCkgY29uc3QKICAgICB7CiAgICAgICAg
IHJldHVybiBtX3RvdGFsTGVuZ3RoOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1NpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyLmNwcAkocmV2
aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2ltcGxlVHlw
ZWRBcnJheUNvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTYyLDcgKzYyLDcgQEAg
Ym9vbCBTaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlcjo6aXNBdG9taQogICAgIHJldHVybiBtX2Fs
bG93QXRvbWljc1dhaXQ7CiB9CiAKLWJvb2wgU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXI6OkpT
QXJyYXlCdWZmZXJPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8
SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yLCBj
b25zdCBjaGFyKiogcmVhc29uKQorYm9vbCBTaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlcjo6SlNB
cnJheUJ1ZmZlck93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxK
U0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYgdmlz
aXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikKIHsKICAgICBpZiAoVU5MSUtFTFkocmVhc29uKSkK
ICAgICAgICAgKnJlYXNvbiA9ICJKU0FycmF5QnVmZmVyIGlzIG9wYXF1ZSByb290IjsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2ltcGxlVHlw
ZWRBcnJheUNvbnRyb2xsZXIuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC01OCw3ICs1OCw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgY2xhc3MgSlNBcnJheUJ1ZmZl
ck93bmVyIGZpbmFsIDogcHVibGljIFdlYWtIYW5kbGVPd25lciB7CiAgICAgcHVibGljOgotICAg
ICAgICBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5r
bm93bj4sIHZvaWQqIGNvbnRleHQsIFNsb3RWaXNpdG9yJiwgY29uc3QgY2hhcioqIHJlYXNvbikg
ZmluYWw7CisgICAgICAgIGJvb2wgaXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5k
bGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCwgQWJzdHJhY3RTbG90VmlzaXRvciYsIGNv
bnN0IGNoYXIqKiByZWFzb24pIGZpbmFsOwogICAgICAgICB2b2lkIGZpbmFsaXplKEpTQzo6SGFu
ZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQpIGZpbmFsOwogICAgIH07CiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NtYWxsU3RyaW5ncy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU21hbGxTdHJpbmdzLmNwcAkocmV2
aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU21hbGxTdHJp
bmdzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDgsIDIwMTAgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDA4LTIwMjEgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02Niw3ICs2Niw4IEBAIHZvaWQgU21hbGxTdHJp
bmdzOjppbml0aWFsaXplQ29tbW9uU3RyaW4KICAgICBzZXRJc0luaXRpYWxpemVkKHRydWUpOwog
fQogCi12b2lkIFNtYWxsU3RyaW5nczo6dmlzaXRTdHJvbmdSZWZlcmVuY2VzKFNsb3RWaXNpdG9y
JiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgU21hbGxTdHJpbmdz
Ojp2aXNpdFN0cm9uZ1JlZmVyZW5jZXMoVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBtX25lZWRz
VG9CZVZpc2l0ZWQgPSBmYWxzZTsKICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKG1fZW1w
dHlTdHJpbmcpOwpAQCAtODQsNiArODUsOSBAQCB2b2lkIFNtYWxsU3RyaW5nczo6dmlzaXRTdHJv
bmdSZWZlcmVuY2VzCiAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZChtX29rU3RyaW5nKTsK
IH0KIAordGVtcGxhdGUgdm9pZCBTbWFsbFN0cmluZ3M6OnZpc2l0U3Ryb25nUmVmZXJlbmNlcyhB
YnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIFNtYWxsU3RyaW5nczo6dmlzaXRT
dHJvbmdSZWZlcmVuY2VzKFNsb3RWaXNpdG9yJik7CisKIFNtYWxsU3RyaW5nczo6flNtYWxsU3Ry
aW5ncygpCiB7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TbWFsbFN0
cmluZ3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TbWFs
bFN0cmluZ3MuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU21hbGxTdHJpbmdzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTkgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMjEgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00OSw5ICs0OSw5IEBAIGNs
YXNzIFN0cmluZ0ltcGw7CiAKIG5hbWVzcGFjZSBKU0MgewogCitjbGFzcyBBYnN0cmFjdFNsb3RW
aXNpdG9yOwogY2xhc3MgVk07CiBjbGFzcyBKU1N0cmluZzsKLWNsYXNzIFNsb3RWaXNpdG9yOwog
CiBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG1heFNpbmdsZUNoYXJhY3RlclN0cmluZyA9IDB4
RkY7CiAKQEAgLTc4LDcgKzc4LDcgQEAgcHVibGljOgogICAgIEpTU3RyaW5nKiogc2luZ2xlQ2hh
cmFjdGVyU3RyaW5ncygpIHsgcmV0dXJuICZtX3NpbmdsZUNoYXJhY3RlclN0cmluZ3NbMF07IH0K
IAogICAgIHZvaWQgaW5pdGlhbGl6ZUNvbW1vblN0cmluZ3MoVk0mKTsKLSAgICB2b2lkIHZpc2l0
U3Ryb25nUmVmZXJlbmNlcyhTbG90VmlzaXRvciYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZp
c2l0b3I+IHZvaWQgdmlzaXRTdHJvbmdSZWZlcmVuY2VzKFZpc2l0b3ImKTsKIAogI2RlZmluZSBK
U0NfQ09NTU9OX1NUUklOR1NfQUNDRVNTT1JfREVGSU5JVElPTihuYW1lKSBcCiAgICAgSlNTdHJp
bmcqIG5hbWUjI1N0cmluZygpIGNvbnN0ICAgICAgICAgICAgICAgICAgIFwKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NwYXJzZUFycmF5VmFsdWVNYXAuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NwYXJzZUFycmF5VmFsdWVNYXAu
Y3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
cGFyc2VBcnJheVZhbHVlTWFwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTIxMCw3ICsyMTAsOCBA
QCBKU1ZhbHVlIFNwYXJzZUFycmF5RW50cnk6OmdldE5vblNwYXJzZU1vCiAgICAgcmV0dXJuIEJh
c2U6OmdldCgpOwogfQogCi12b2lkIFNwYXJzZUFycmF5VmFsdWVNYXA6OnZpc2l0Q2hpbGRyZW4o
SlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZp
c2l0b3I+Cit2b2lkIFNwYXJzZUFycmF5VmFsdWVNYXA6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2Vs
bCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBTcGFyc2VBcnJheVZhbHVlTWFwKiB0
aGlzT2JqZWN0ID0ganNDYXN0PFNwYXJzZUFycmF5VmFsdWVNYXAqPihjZWxsKTsKICAgICBBU1NF
UlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC0yMjMsNSArMjI0
LDcgQEAgdm9pZCBTcGFyc2VBcnJheVZhbHVlTWFwOjp2aXNpdENoaWxkcmVuKAogICAgIHZpc2l0
b3IucmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKHRoaXNPYmplY3QtPm1fcmVwb3J0ZWRDYXBhY2l0
eSAqIHNpemVvZihNYXA6OktleVZhbHVlUGFpclR5cGUpKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NI
SUxEUkVOKFNwYXJzZUFycmF5VmFsdWVNYXApOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3BhcnNlQXJyYXlWYWx1ZU1hcC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NwYXJzZUFycmF5VmFs
dWVNYXAuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU3BhcnNlQXJyYXlWYWx1ZU1hcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMS0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTE1LDcgKzExNSw3
IEBAIHB1YmxpYzoKICAgICAKICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUo
Vk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUgcHJvdG90eXBlKTsKIAotICAgIHN0YXRpYyB2
b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJ
U0lUX0NISUxEUkVOOwogCiAgICAgYm9vbCBzcGFyc2VNb2RlKCkKICAgICB7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdGFja0ZyYW1lLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdGFja0ZyYW1lLmNwcAkocmV2aXNpb24gMjcy
ODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RhY2tGcmFtZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIw
MTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2
LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0xNDEsMTMgKzE0MSw1IEBAIFN0cmluZyBTdGFja0ZyYW1lOjp0b1N0
cmluZyhWTSYgdm0pIGNvbnMKICAgICByZXR1cm4gdHJhY2VCdWlsZC50b1N0cmluZygpLmltcGwo
KTsKIH0KIAotdm9pZCBTdGFja0ZyYW1lOjp2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNp
dG9yKQotewotICAgIGlmIChtX2NhbGxlZSkKLSAgICAgICAgdmlzaXRvci5hcHBlbmQobV9jYWxs
ZWUpOwotICAgIGlmIChtX2NvZGVCbG9jaykKLSAgICAgICAgdmlzaXRvci5hcHBlbmQobV9jb2Rl
QmxvY2spOwotfQotCiB9IC8vIG5hbWVzcGFjZSBKU0MKIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU3RhY2tGcmFtZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1N0YWNrRnJhbWUuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RhY2tGcmFtZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MjYsNiArMjYsNyBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJIZWFwLmgiCisjaW5jbHVk
ZSAiU2xvdFZpc2l0b3JNYWNyb3MuaCIKICNpbmNsdWRlICJWTS5oIgogI2luY2x1ZGUgIldhc21J
bmRleE9yTmFtZS5oIgogI2luY2x1ZGUgIldyaXRlQmFycmllci5oIgpAQCAtMzUsNyArMzYsNiBA
QCBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgQ29kZUJsb2NrOwogY2xhc3MgSlNPYmplY3Q7Ci1j
bGFzcyBTbG90VmlzaXRvcjsKIAogY2xhc3MgU3RhY2tGcmFtZSB7CiBwdWJsaWM6CkBAIC01Nyw4
ICs1NywxNiBAQCBwdWJsaWM6CiAgICAgICAgIEFTU0VSVChoYXNCeXRlY29kZUluZGV4KCkpOwog
ICAgICAgICByZXR1cm4gbV9ieXRlY29kZUluZGV4OwogICAgIH0KLSAgICAKLSAgICB2b2lkIHZp
c2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0
b3I+CisgICAgdm9pZCB2aXNpdENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCisgICAgeworICAg
ICAgICBpZiAobV9jYWxsZWUpCisgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZChtX2NhbGxlZSk7
CisgICAgICAgIGlmIChtX2NvZGVCbG9jaykKKyAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kKG1f
Y29kZUJsb2NrKTsKKyAgICB9CisKICAgICBib29sIGlzTWFya2VkKFZNJiB2bSkgY29uc3QgeyBy
ZXR1cm4gKCFtX2NhbGxlZSB8fCB2bS5oZWFwLmlzTWFya2VkKG1fY2FsbGVlLmdldCgpKSkgJiYg
KCFtX2NvZGVCbG9jayB8fCB2bS5oZWFwLmlzTWFya2VkKG1fY29kZUJsb2NrLmdldCgpKSk7IH0K
IAogcHJpdmF0ZToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVy
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0
dXJlLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU3RydWN0dXJlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDgtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQWxleGV5IFNodmF5a2EgPHNodmFpa2FsZXNoQGdtYWls
LmNvbT4uCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0xMjY4LDcgKzEyNjgsOCBAQCB2b2lkIFN0cnVj
dHVyZTo6ZGlkVHJhbnNpdGlvbkZyb21UaGlzU3RyCiAgICAgICAgIG1fdHJhbnNpdGlvbldhdGNo
cG9pbnRTZXQuZmlyZUFsbCh2bSgpLCBTdHJ1Y3R1cmVGaXJlRGV0YWlsKHRoaXMpKTsKIH0KIAot
dm9pZCBTdHJ1Y3R1cmU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYg
dmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFN0cnVjdHVyZTo6dmlz
aXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFN0
cnVjdHVyZSogdGhpc09iamVjdCA9IGpzQ2FzdDxTdHJ1Y3R1cmUqPihjZWxsKTsKICAgICBBU1NF
UlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC0xMjkwLDMyICsx
MjkxLDM4IEBAIHZvaWQgU3RydWN0dXJlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2UKICAgICAg
ICAgLy8gTk9URTogVGhpcyBjYW4gaW50ZXJsZWF2ZSBpbiBwaW4oKSwgaW4gd2hpY2ggY2FzZSBp
dCBtYXkgc2VlIGEgbnVsbCBwcm9wZXJ0eSB0YWJsZS4KICAgICAgICAgLy8gVGhhdCdzIGZpbmUs
IGJlY2F1c2UgdGhlbiB0aGUgYmFycmllciB3aWxsIGZpcmUgYW5kIHdlIHdpbGwgc2NhbiB0aGlz
IGFnYWluLgogICAgICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX3Byb3BlcnR5VGFi
bGVVbnNhZmUpOwotICAgIH0gZWxzZSBpZiAodmlzaXRvci5pc0FuYWx5emluZ0hlYXAoKSkKKyAg
ICB9IGVsc2UgaWYgKHZpc2l0b3Iudm0oKS5pc0FuYWx5emluZ0hlYXAoKSkKICAgICAgICAgdmlz
aXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9wcm9wZXJ0eVRhYmxlVW5zYWZlKTsKICAgICBlbHNl
IGlmICh0aGlzT2JqZWN0LT5tX3Byb3BlcnR5VGFibGVVbnNhZmUpCiAgICAgICAgIHRoaXNPYmpl
Y3QtPm1fcHJvcGVydHlUYWJsZVVuc2FmZS5jbGVhcigpOwogfQogCi1ib29sIFN0cnVjdHVyZTo6
aXNDaGVhcER1cmluZ0dDKFZNJiB2bSkKK0RFRklORV9WSVNJVF9DSElMRFJFTihTdHJ1Y3R1cmUp
OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgorQUxXQVlTX0lOTElORSBib29sIFN0cnVj
dHVyZTo6aXNDaGVhcER1cmluZ0dDKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgLy8gRklYTUU6
IFdlIGNvdWxkIG1ha2UgdGhpcyBldmVuIHNhZmVyIGJ5IHJldHVybmluZyBmYWxzZSBpZiB0aGlz
IHN0cnVjdHVyZSdzIHByb3BlcnR5IHRhYmxlCiAgICAgLy8gaGFzIGFueSBsYXJnZSBwcm9wZXJ0
eSBuYW1lcy4KICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTU3MzM0CiAgICAgCi0gICAgcmV0dXJuICghbV9nbG9iYWxPYmplY3QgfHwgdm0uaGVhcC5pc01h
cmtlZChtX2dsb2JhbE9iamVjdC5nZXQoKSkpCi0gICAgICAgICYmIChoYXNQb2x5UHJvdG8oKSB8
fCAhc3RvcmVkUHJvdG90eXBlT2JqZWN0KCkgfHwgdm0uaGVhcC5pc01hcmtlZChzdG9yZWRQcm90
b3R5cGVPYmplY3QoKSkpOworICAgIHJldHVybiAoIW1fZ2xvYmFsT2JqZWN0IHx8IHZpc2l0b3Iu
aXNNYXJrZWQobV9nbG9iYWxPYmplY3QuZ2V0KCkpKQorICAgICAgICAmJiAoaGFzUG9seVByb3Rv
KCkgfHwgIXN0b3JlZFByb3RvdHlwZU9iamVjdCgpIHx8IHZpc2l0b3IuaXNNYXJrZWQoc3RvcmVk
UHJvdG90eXBlT2JqZWN0KCkpKTsKIH0KIAotYm9vbCBTdHJ1Y3R1cmU6Om1hcmtJZkNoZWFwKFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK2Jvb2wgU3Ry
dWN0dXJlOjptYXJrSWZDaGVhcChWaXNpdG9yJiB2aXNpdG9yKQogewotICAgIFZNJiB2bSA9IHZp
c2l0b3Iudm0oKTsKLSAgICBpZiAoIWlzQ2hlYXBEdXJpbmdHQyh2bSkpCi0gICAgICAgIHJldHVy
biB2bS5oZWFwLmlzTWFya2VkKHRoaXMpOwotICAgIAorICAgIGlmICghaXNDaGVhcER1cmluZ0dD
KHZpc2l0b3IpKQorICAgICAgICByZXR1cm4gdmlzaXRvci5pc01hcmtlZCh0aGlzKTsKKwogICAg
IHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQodGhpcyk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
K3RlbXBsYXRlIGJvb2wgU3RydWN0dXJlOjptYXJrSWZDaGVhcChBYnN0cmFjdFNsb3RWaXNpdG9y
Jik7Cit0ZW1wbGF0ZSBib29sIFN0cnVjdHVyZTo6bWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImKTsK
KwogUmVmPFN0cnVjdHVyZVNoYXBlPiBTdHJ1Y3R1cmU6OnRvU3RydWN0dXJlU2hhcGUoSlNWYWx1
ZSB2YWx1ZSwgYm9vbCYgc2F3UG9seVByb3RvU3RydWN0dXJlKQogewogICAgIFJlZjxTdHJ1Y3R1
cmVTaGFwZT4gYmFzZVNoYXBlID0gU3RydWN0dXJlU2hhcGU6OmNyZWF0ZSgpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgJKHJldmlzaW9uIDI3MjgzMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOC0yMDIwIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtNjAsNyArNjAsNiBAQCBjbGFzcyBQcm9wZXJ0eU5hbWVBcnJheURhdGE7CiBjbGFz
cyBQcm9wZXJ0eVRhYmxlOwogY2xhc3MgU3RydWN0dXJlQ2hhaW47CiBjbGFzcyBTdHJ1Y3R1cmVT
aGFwZTsKLWNsYXNzIFNsb3RWaXNpdG9yOwogY2xhc3MgSlNTdHJpbmc7CiBzdHJ1Y3QgRHVtcENv
bnRleHQ7CiBzdHJ1Y3QgSGFzaFRhYmxlOwpAQCAtMzEwLDcgKzMwOSw3IEBAIHB1YmxpYzoKICAg
ICBKU1ZhbHVlIHByb3RvdHlwZUZvckxvb2t1cChKU0dsb2JhbE9iamVjdCosIEpTQ2VsbCogYmFz
ZSkgY29uc3Q7CiAgICAgU3RydWN0dXJlQ2hhaW4qIHByb3RvdHlwZUNoYWluKFZNJiwgSlNHbG9i
YWxPYmplY3QqLCBKU09iamVjdCogYmFzZSkgY29uc3Q7CiAgICAgU3RydWN0dXJlQ2hhaW4qIHBy
b3RvdHlwZUNoYWluKEpTR2xvYmFsT2JqZWN0KiwgSlNPYmplY3QqIGJhc2UpIGNvbnN0OwotICAg
IHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBE
RUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogICAgIAogICAgIC8vIEEgU3RydWN0dXJlIGlzIGNoZWFw
IHRvIG1hcmsgZHVyaW5nIEdDIGlmIGRvaW5nIHNvIHdvdWxkIG9ubHkgYWRkIGEgc21hbGwgYW5k
IGJvdW5kZWQgYW1vdW50CiAgICAgLy8gdG8gb3VyIGhlYXAgZm9vdHByaW50LiBGb3IgZXhhbXBs
ZSwgaWYgdGhlIHN0cnVjdHVyZSByZWZlcnMgdG8gYSBnbG9iYWwgb2JqZWN0IHRoYXQgaXMgbm90
CkBAIC0zMTgsMTAgKzMxNywxMCBAQCBwdWJsaWM6CiAgICAgLy8gaW5jcmVhc2UgaW4gZm9vdHBy
aW50IGJlY2F1c2Ugbm8gb3RoZXIgb2JqZWN0IHJlZmVycyB0byB0aGF0IGdsb2JhbCBvYmplY3Qu
IFRoaXMgbWV0aG9kCiAgICAgLy8gcmV0dXJucyB0cnVlIGlmIGFsbCB1c2VyLWNvbnRyb2xsZWQg
KGFuZCBoZW5jZSB1bmJvdW5kZWQgaW4gc2l6ZSkgb2JqZWN0cyByZWZlcmVuY2VkIGZyb20gdGhl
CiAgICAgLy8gU3RydWN0dXJlIGFyZSBhbHJlYWR5IG1hcmtlZC4KLSAgICBib29sIGlzQ2hlYXBE
dXJpbmdHQyhWTSYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IGJvb2wgaXNDaGVh
cER1cmluZ0dDKFZpc2l0b3ImKTsKICAgICAKICAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhpcyBz
dHJ1Y3R1cmUgaXMgbm93IG1hcmtlZC4KLSAgICBib29sIG1hcmtJZkNoZWFwKFNsb3RWaXNpdG9y
Jik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gYm9vbCBtYXJrSWZDaGVhcChWaXNp
dG9yJik7CiAgICAgCiAgICAgYm9vbCBoYXNSYXJlRGF0YSgpIGNvbnN0CiAgICAgewpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlQ2hhaW4uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUNoYWluLmNwcAko
cmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0
dXJlQ2hhaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMDgtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY2LDcgKzY2LDggQEAgdm9pZCBTdHJ1Y3R1cmVD
aGFpbjo6ZmluaXNoQ3JlYXRpb24oVk0mIAogICAgIH0KIH0KIAotdm9pZCBTdHJ1Y3R1cmVDaGFp
bjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVt
cGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgU3RydWN0dXJlQ2hhaW46OnZpc2l0Q2hpbGRy
ZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBTdHJ1Y3R1cmVD
aGFpbiogdGhpc09iamVjdCA9IGpzQ2FzdDxTdHJ1Y3R1cmVDaGFpbio+KGNlbGwpOwogICAgIEFT
U0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTgwLDQgKzgx
LDYgQEAgdm9pZCBTdHJ1Y3R1cmVDaGFpbjo6dmlzaXRDaGlsZHJlbihKU0NlbAogICAgIH0KIH0K
IAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKFN0cnVjdHVyZUNoYWluKTsKKwogfSAvLyBuYW1lc3Bh
Y2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVDaGFp
bi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVy
ZUNoYWluLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1N0cnVjdHVyZUNoYWluLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01MSw3ICs1MSw3IEBAIHB1
YmxpYzoKIAogICAgIHN0YXRpYyBTdHJ1Y3R1cmVDaGFpbiogY3JlYXRlKFZNJiwgSlNPYmplY3Qq
KTsKICAgICBTdHJ1Y3R1cmVJRCogaGVhZCgpIHsgcmV0dXJuIG1fdmVjdG9yLmdldCgpOyB9Ci0g
ICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAg
IERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVT
dHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHBy
b3RvdHlwZSkKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1
Y3R1cmVSYXJlRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU3RydWN0dXJlUmFyZURhdGEuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVSYXJlRGF0YS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjAgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC02Nyw3ICs2Nyw4IEBAIFN0cnVjdHVyZVJhcmVEYXRhOjpTdHJ1Y3R1cmVSYXJlRGF0
YShWTSYKICAgICAgICAgbV9wcmV2aW91cy5zZXQodm0sIHRoaXMsIHByZXZpb3VzKTsKIH0KIAot
dm9pZCBTdHJ1Y3R1cmVSYXJlRGF0YTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgU3RydWN0
dXJlUmFyZURhdGE6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlz
aXRvcikKIHsKICAgICBTdHJ1Y3R1cmVSYXJlRGF0YSogdGhpc09iamVjdCA9IGpzQ2FzdDxTdHJ1
Y3R1cmVSYXJlRGF0YSo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhp
c09iamVjdCwgaW5mbygpKTsKQEAgLTg2LDYgKzg3LDggQEAgdm9pZCBTdHJ1Y3R1cmVSYXJlRGF0
YTo6dmlzaXRDaGlsZHJlbihKUwogICAgIH0KIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKFN0
cnVjdHVyZVJhcmVEYXRhKTsKKwogLy8gLS0tLS0tLS0tLS0gQ2FjaGVkIHNwZWNpYWwgcHJvcGVy
dGllcyBoZWxwZXIgd2F0Y2hwb2ludCBjbGFzc2VzIC0tLS0tLS0tLS0tCiAKIGNsYXNzIENhY2hl
ZFNwZWNpYWxQcm9wZXJ0eUFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludCBm
aW5hbCA6IHB1YmxpYyBBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnRCYXNl
IHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZVJhcmVEYXRh
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJl
UmFyZURhdGEuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU3RydWN0dXJlUmFyZURhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY4LDcgKzY4LDcg
QEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0Rlc3RydWN0aW9uID0g
dHJ1ZTsKICAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwogCi0gICAgc3RhdGljIHZv
aWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklT
SVRfQ0hJTERSRU47CiAKICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0m
LCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUgcHJvdG90eXBlKTsKIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJvbFRhYmxlLmNwcAkocmV2aXNpb24gMjcyODMw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFibGUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE5
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0y
MDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtOTIsNyArOTIsOCBAQCB2b2lkIFN5bWJvbFRhYmxlOjpmaW5pc2hDcmVh
dGlvbihWTSYgdm0pCiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwogfQogCi12b2lkIFN5
bWJvbFRhYmxlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogdGhpc0NlbGwsIFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgU3ltYm9sVGFibGU6OnZp
c2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogdGhpc0NlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAg
ICAgU3ltYm9sVGFibGUqIHRoaXNTeW1ib2xUYWJsZSA9IGpzQ2FzdDxTeW1ib2xUYWJsZSo+KHRo
aXNDZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNTeW1ib2xUYWJsZSwg
aW5mbygpKTsKQEAgLTEwOCw2ICsxMDksOCBAQCB2b2lkIFN5bWJvbFRhYmxlOjp2aXNpdENoaWxk
cmVuKEpTQ2VsbCogCiAgICAgdGhpc1N5bWJvbFRhYmxlLT5tX2xvY2FsVG9FbnRyeSA9IG51bGxw
dHI7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihTeW1ib2xUYWJsZSk7CisKIGNvbnN0IFN5
bWJvbFRhYmxlOjpMb2NhbFRvRW50cnlWZWMmIFN5bWJvbFRhYmxlOjpsb2NhbFRvRW50cnkoY29u
c3QgQ29uY3VycmVudEpTTG9ja2VyJikKIHsKICAgICBpZiAoVU5MSUtFTFkoIW1fbG9jYWxUb0Vu
dHJ5KSkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFibGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TeW1ib2xUYWJs
ZS5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
eW1ib2xUYWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAwNy0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAwNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNzMzLDcgKzczMyw3IEBAIHB1YmxpYzoK
ICAgICAgICAgbV9zaW5nbGV0b24ubm90aWZ5V3JpdGUodm0sIHRoaXMsIHNjb3BlLCByZWFzb24p
OwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZp
c2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgREVDTEFSRV9FWFBP
UlRfSU5GTzsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZVByb2Zp
bGVyTG9nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9U
eXBlUHJvZmlsZXJMb2cuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9UeXBlUHJvZmlsZXJMb2cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNC0yMDE5IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTI0
LDcgKzEyNCw3IEBAIHZvaWQgVHlwZVByb2ZpbGVyTG9nOjpwcm9jZXNzTG9nRW50cmllcygKICAg
ICB9CiB9CiAKLXZvaWQgVHlwZVByb2ZpbGVyTG9nOjp2aXNpdChTbG90VmlzaXRvciYgdmlzaXRv
cikKK3ZvaWQgVHlwZVByb2ZpbGVyTG9nOjp2aXNpdChBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNp
dG9yKQogewogICAgIGZvciAoTG9nRW50cnkqIGVudHJ5ID0gbV9sb2dTdGFydFB0cjsgZW50cnkg
IT0gbV9jdXJyZW50TG9nRW50cnlQdHI7ICsrZW50cnkpIHsKICAgICAgICAgdmlzaXRvci5hcHBl
bmRVbmJhcnJpZXJlZChlbnRyeS0+dmFsdWUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvVHlwZVByb2ZpbGVyTG9nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvVHlwZVByb2ZpbGVyTG9nLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVQcm9maWxlckxvZy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAyMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTU5LDcgKzU5LDcgQEAgcHVibGljOgogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgcHJv
Y2Vzc0xvZ0VudHJpZXMoVk0mLCBjb25zdCBTdHJpbmcmKTsKICAgICBMb2dFbnRyeSogbG9nRW5k
UHRyKCkgY29uc3QgeyByZXR1cm4gbV9sb2dFbmRQdHI7IH0KIAotICAgIHZvaWQgdmlzaXQoU2xv
dFZpc2l0b3ImKTsKKyAgICB2b2lkIHZpc2l0KEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKIAogICAg
IHN0YXRpYyBwdHJkaWZmX3QgbG9nU3RhcnRPZmZzZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VU
T0YoVHlwZVByb2ZpbGVyTG9nLCBtX2xvZ1N0YXJ0UHRyKTsgfQogICAgIHN0YXRpYyBwdHJkaWZm
X3QgY3VycmVudExvZ0VudHJ5T2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFR5cGVQ
cm9maWxlckxvZywgbV9jdXJyZW50TG9nRW50cnlQdHIpOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9WTS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1ZNLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1ZNLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDA4LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDA4LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMjEsNiArMTIxLDcgQEAgY2xhc3Mg
RmFzdE1hbGxvY0FsaWduZWRNZW1vcnlBbGxvY2F0b3I7CiBjbGFzcyBHaWdhY2FnZUFsaWduZWRN
ZW1vcnlBbGxvY2F0b3I7CiBjbGFzcyBIYW5kbGVTdGFjazsKIGNsYXNzIEhhc093blByb3BlcnR5
Q2FjaGU7CitjbGFzcyBIZWFwQW5hbHl6ZXI7CiBjbGFzcyBIZWFwUHJvZmlsZXI7CiBjbGFzcyBJ
ZGVudGlmaWVyOwogY2xhc3MgSW50ZXJwcmV0ZXI7CkBAIC0zMTAsNiArMzExLDEwIEBAIHB1Ymxp
YzoKICAgICBIZWFwUHJvZmlsZXIqIGhlYXBQcm9maWxlcigpIGNvbnN0IHsgcmV0dXJuIG1faGVh
cFByb2ZpbGVyLmdldCgpOyB9CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgSGVhcFByb2ZpbGVyJiBl
bnN1cmVIZWFwUHJvZmlsZXIoKTsKIAorICAgIGJvb2wgaXNBbmFseXppbmdIZWFwKCkgY29uc3Qg
eyByZXR1cm4gbV9hY3RpdmVIZWFwQW5hbHl6ZXI7IH0KKyAgICBIZWFwQW5hbHl6ZXIqIGFjdGl2
ZUhlYXBBbmFseXplcigpIGNvbnN0IHsgcmV0dXJuIG1fYWN0aXZlSGVhcEFuYWx5emVyOyB9Cisg
ICAgdm9pZCBzZXRBY3RpdmVIZWFwQW5hbHl6ZXIoSGVhcEFuYWx5emVyKiBhbmFseXplcikgeyBt
X2FjdGl2ZUhlYXBBbmFseXplciA9IGFuYWx5emVyOyB9CisKICNpZiBFTkFCTEUoU0FNUExJTkdf
UFJPRklMRVIpCiAgICAgU2FtcGxpbmdQcm9maWxlciogc2FtcGxpbmdQcm9maWxlcigpIHsgcmV0
dXJuIG1fc2FtcGxpbmdQcm9maWxlci5nZXQoKTsgfQogICAgIEpTX0VYUE9SVF9QUklWQVRFIFNh
bXBsaW5nUHJvZmlsZXImIGVuc3VyZVNhbXBsaW5nUHJvZmlsZXIoUmVmPFN0b3B3YXRjaD4mJik7
CkBAIC0xMTk1LDkgKzEyMDAsMTAgQEAgcHVibGljOgogICAgIGJvb2wgZGlkRW50ZXJWTSB7IGZh
bHNlIH07CiBwcml2YXRlOgogICAgIGJvb2wgbV9mYWlsTmV4dE5ld0NvZGVCbG9jayB7IGZhbHNl
IH07Ci0gICAgRGVsZXRlUHJvcGVydHlNb2RlIG1fZGVsZXRlUHJvcGVydHlNb2RlIHsgRGVsZXRl
UHJvcGVydHlNb2RlOjpEZWZhdWx0IH07CiAgICAgYm9vbCBtX2dsb2JhbENvbnN0UmVkZWNsYXJh
dGlvblNob3VsZFRocm93IHsgdHJ1ZSB9OwogICAgIGJvb2wgbV9zaG91bGRCdWlsZFBDVG9Db2Rl
T3JpZ2luTWFwcGluZyB7IGZhbHNlIH07CisgICAgRGVsZXRlUHJvcGVydHlNb2RlIG1fZGVsZXRl
UHJvcGVydHlNb2RlIHsgRGVsZXRlUHJvcGVydHlNb2RlOjpEZWZhdWx0IH07CisgICAgSGVhcEFu
YWx5emVyKiBtX2FjdGl2ZUhlYXBBbmFseXplciB7IG51bGxwdHIgfTsKICAgICBzdGQ6OnVuaXF1
ZV9wdHI8Q29kZUNhY2hlPiBtX2NvZGVDYWNoZTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SW50bENh
Y2hlPiBtX2ludGxDYWNoZTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8QnVpbHRpbkV4ZWN1dGFibGVz
PiBtX2J1aWx0aW5FeGVjdXRhYmxlczsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1dlYWtNYXBJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9XZWFrTWFwSW1wbC5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1dlYWtNYXBJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDE3IFl1c3VrZSBTdXp1a2kgPHV0YXRh
bmUudGVhQGdtYWlsLmNvbT4uCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0zOSw4ICszOSw5IEBAIHZv
aWQgV2Vha01hcEltcGw8V2Vha01hcEJ1Y2tldD46OmRlc3Ryb3kKICAgICBzdGF0aWNfY2FzdDxX
ZWFrTWFwSW1wbCo+KGNlbGwpLT5+V2Vha01hcEltcGwoKTsKIH0KIAotdGVtcGxhdGUgPHR5cGVu
YW1lIFdlYWtNYXBCdWNrZXQ+Ci12b2lkIFdlYWtNYXBJbXBsPFdlYWtNYXBCdWNrZXQ+Ojp2aXNp
dENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0
eXBlbmFtZSBXZWFrTWFwQnVja2V0PgordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQg
V2Vha01hcEltcGw8V2Vha01hcEJ1Y2tldD46OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2Vs
bCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBXZWFrTWFwSW1wbCogdGhpc09iamVjdCA9IGpz
Q2FzdDxXZWFrTWFwSW1wbCo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMo
dGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTQ4LDYgKzQ5LDggQEAgdm9pZCBXZWFrTWFwSW1wbDxX
ZWFrTWFwQnVja2V0Pjo6dmlzaXRDaAogICAgIHZpc2l0b3IucmVwb3J0RXh0cmFNZW1vcnlWaXNp
dGVkKHRoaXNPYmplY3QtPm1fY2FwYWNpdHkgKiBzaXplb2YoV2Vha01hcEJ1Y2tldCkpOwogfQog
CitERUZJTkVfVklTSVRfQ0hJTERSRU5fV0lUSF9NT0RJRklFUih0ZW1wbGF0ZTx0eXBlbmFtZSBX
ZWFrTWFwQnVja2V0PiwgV2Vha01hcEltcGw8V2Vha01hcEJ1Y2tldD4pOworCiB0ZW1wbGF0ZSA8
dHlwZW5hbWUgV2Vha01hcEJ1Y2tldD4KIHNpemVfdCBXZWFrTWFwSW1wbDxXZWFrTWFwQnVja2V0
Pjo6ZXN0aW1hdGVkU2l6ZShKU0NlbGwqIGNlbGwsIFZNJiB2bSkKIHsKQEAgLTU2LDE1ICs1OSwy
NSBAQCBzaXplX3QgV2Vha01hcEltcGw8V2Vha01hcEJ1Y2tldD46OmVzdGltCiB9CiAKIHRlbXBs
YXRlIDw+Ci12b2lkIFdlYWtNYXBJbXBsPFdlYWtNYXBCdWNrZXQ8V2Vha01hcEJ1Y2tldERhdGFL
ZXk+Pjo6dmlzaXRPdXRwdXRDb25zdHJhaW50cyhKU0NlbGwqLCBTbG90VmlzaXRvciYpCit0ZW1w
bGF0ZSA8Pgordm9pZCBXZWFrTWFwSW1wbDxXZWFrTWFwQnVja2V0PFdlYWtNYXBCdWNrZXREYXRh
S2V5Pj46OnZpc2l0T3V0cHV0Q29uc3RyYWludHMoSlNDZWxsKiwgQWJzdHJhY3RTbG90VmlzaXRv
ciYpCiB7CiAgICAgLy8gT25seSBKU1dlYWtNYXAgbmVlZHMgdG8gaGFydmVzdCB2YWx1ZSByZWZl
cmVuY2VzCiB9CiAKIHRlbXBsYXRlIDw+Ci12b2lkIFdlYWtNYXBJbXBsPFdlYWtNYXBCdWNrZXQ8
V2Vha01hcEJ1Y2tldERhdGFLZXlWYWx1ZT4+Ojp2aXNpdE91dHB1dENvbnN0cmFpbnRzKEpTQ2Vs
bCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZSA8Pgordm9pZCBXZWFrTWFw
SW1wbDxXZWFrTWFwQnVja2V0PFdlYWtNYXBCdWNrZXREYXRhS2V5Pj46OnZpc2l0T3V0cHV0Q29u
c3RyYWludHMoSlNDZWxsKiwgU2xvdFZpc2l0b3ImKQogewotICAgIFZNJiB2bSA9IHZpc2l0b3Iu
dm0oKTsKKyAgICAvLyBPbmx5IEpTV2Vha01hcCBuZWVkcyB0byBoYXJ2ZXN0IHZhbHVlIHJlZmVy
ZW5jZXMKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQnVja2V0VHlwZT4KK3RlbXBsYXRlPHR5cGVu
YW1lIFZpc2l0b3I+CitBTFdBWVNfSU5MSU5FIHZvaWQgV2Vha01hcEltcGw8QnVja2V0VHlwZT46
OnZpc2l0T3V0cHV0Q29uc3RyYWludHMoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQor
eworICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19zYW1lPEJ1Y2tldFR5cGUsIFdlYWtNYXBCdWNr
ZXQ8V2Vha01hcEJ1Y2tldERhdGFLZXlWYWx1ZT4+Ojp2YWx1ZSk7CisKICAgICBhdXRvKiB0aGlz
T2JqZWN0ID0ganNDYXN0PFdlYWtNYXBJbXBsKj4oY2VsbCk7CiAgICAgYXV0byBsb2NrZXIgPSBo
b2xkTG9jayh0aGlzT2JqZWN0LT5jZWxsTG9jaygpKTsKICAgICBhdXRvKiBidWZmZXIgPSB0aGlz
T2JqZWN0LT5idWZmZXIoKTsKQEAgLTcyLDEyICs4NSwxNSBAQCB2b2lkIFdlYWtNYXBJbXBsPFdl
YWtNYXBCdWNrZXQ8V2Vha01hcEJ1CiAgICAgICAgIGF1dG8qIGJ1Y2tldCA9IGJ1ZmZlciArIGlu
ZGV4OwogICAgICAgICBpZiAoYnVja2V0LT5pc0VtcHR5KCkgfHwgYnVja2V0LT5pc0RlbGV0ZWQo
KSkKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAoIXZtLmhlYXAuaXNNYXJrZWQo
YnVja2V0LT5rZXkoKSkpCisgICAgICAgIGlmICghdmlzaXRvci5pc01hcmtlZChidWNrZXQtPmtl
eSgpKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBidWNrZXQtPnZpc2l0QWdncmVn
YXRlKHZpc2l0b3IpOwogICAgIH0KIH0KIAordGVtcGxhdGUgdm9pZCBXZWFrTWFwSW1wbDxXZWFr
TWFwQnVja2V0PFdlYWtNYXBCdWNrZXREYXRhS2V5VmFsdWU+Pjo6dmlzaXRPdXRwdXRDb25zdHJh
aW50cyhKU0NlbGwqLCBBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIFdlYWtN
YXBJbXBsPFdlYWtNYXBCdWNrZXQ8V2Vha01hcEJ1Y2tldERhdGFLZXlWYWx1ZT4+Ojp2aXNpdE91
dHB1dENvbnN0cmFpbnRzKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisKIHRlbXBsYXRlIDx0eXBl
bmFtZSBXZWFrTWFwQnVja2V0PgogdGVtcGxhdGU8dHlwZW5hbWUgQXBwZW5kZXI+CiB2b2lkIFdl
YWtNYXBJbXBsPFdlYWtNYXBCdWNrZXQ+Ojp0YWtlU25hcHNob3RJbnRlcm5hbCh1bnNpZ25lZCBs
aW1pdCwgQXBwZW5kZXIgYXBwZW5kZXIpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9XZWFrTWFwSW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1dlYWtNYXBJbXBsLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1dlYWtNYXBJbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDE3IFl1c3VrZSBTdXp1a2kgPHV0YXRh
bmUudGVhQGdtYWlsLmNvbT4uCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0xNDUsNyArMTQ1LDcgQEAg
cHVibGljOgogICAgIH0KIAogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUID0gRGF0YT4KLSAgICBB
TFdBWVNfSU5MSU5FIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTxULCBXZWFr
TWFwQnVja2V0RGF0YUtleVZhbHVlPjo6dmFsdWU+Ojp0eXBlIHZpc2l0QWdncmVnYXRlKFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQorICAgIEFMV0FZU19JTkxJTkUgdHlwZW5hbWUgc3RkOjplbmFibGVf
aWY8c3RkOjppc19zYW1lPFQsIFdlYWtNYXBCdWNrZXREYXRhS2V5VmFsdWU+Ojp2YWx1ZT46OnR5
cGUgdmlzaXRBZ2dyZWdhdGUoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKICAgICB7CiAg
ICAgICAgIHZpc2l0b3IuYXBwZW5kKG1fZGF0YS52YWx1ZSk7CiAgICAgfQpAQCAtMjAyLDcgKzIw
Miw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNEZXN0cnVjdGlv
biA9IHRydWU7CiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKIAotICAgIHN0YXRp
YyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJF
X1ZJU0lUX0NISUxEUkVOOwogCiAgICAgc3RhdGljIHNpemVfdCBlc3RpbWF0ZWRTaXplKEpTQ2Vs
bCosIFZNJik7CiAKQEAgLTMxMSwxMCArMzExLDEzIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJu
IHZtLndlYWtTZXRTcGFjZTxtb2RlPigpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0
T3V0cHV0Q29uc3RyYWludHMoSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBWaXNpdG9yPiBzdGF0aWMgdm9pZCB2aXNpdE91dHB1dENvbnN0cmFpbnRzKEpTQ2Vs
bCosIFZpc2l0b3ImKTsKICAgICB2b2lkIGZpbmFsaXplVW5jb25kaXRpb25hbGx5KFZNJik7CiAK
IHByaXZhdGU6CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KKyAgICBBTFdBWVNfSU5M
SU5FIHN0YXRpYyB2b2lkIHZpc2l0T3V0cHV0Q29uc3RyYWludHNGb3JEYXRhS2V5VmFsdWUoSlND
ZWxsKiwgVmlzaXRvciYpOworCiAgICAgQUxXQVlTX0lOTElORSBXZWFrTWFwQnVja2V0VHlwZSog
ZmluZEJ1Y2tldChKU09iamVjdCoga2V5KQogICAgIHsKICAgICAgICAgcmV0dXJuIGZpbmRCdWNr
ZXQoa2V5LCBqc1dlYWtNYXBIYXNoKGtleSkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3Rvb2xzL0pTRG9sbGFyVk0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS90b29scy9KU0RvbGxhclZNLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3Rvb2xzL0pTRG9sbGFyVk0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjI0LDE0
ICsyMjQsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgUm9vdCop
OwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNp
dG9yJiB2aXNpdG9yKQotICAgIHsKLSAgICAgICAgRG9sbGFyVk1Bc3NlcnRTY29wZSBhc3NlcnRT
Y29wZTsKLSAgICAgICAgRWxlbWVudCogdGhpc09iamVjdCA9IGpzQ2FzdDxFbGVtZW50Kj4oY2Vs
bCk7Ci0gICAgICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygp
KTsKLSAgICAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKLSAg
ICAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9yb290KTsKLSAgICB9CisgICAgREVD
TEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIHN0YXRpYyBFbGVtZW50SGFuZGxlT3duZXIqIGhh
bmRsZU93bmVyKCk7CiAKQEAgLTI0NywxMCArMjQwLDIyIEBAIHByaXZhdGU6CiAgICAgV3JpdGVC
YXJyaWVyPFJvb3Q+IG1fcm9vdDsKIH07CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2
b2lkIEVsZW1lbnQ6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlz
aXRvcikKK3sKKyAgICBEb2xsYXJWTUFzc2VydFNjb3BlIGFzc2VydFNjb3BlOworICAgIEVsZW1l
bnQqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8RWxlbWVudCo+KGNlbGwpOworICAgIEFTU0VSVF9HQ19P
QkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKKyAgICBCYXNlOjp2aXNpdENoaWxk
cmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOworICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3Qt
Pm1fcm9vdCk7Cit9CisKK0RFRklORV9WSVNJVF9DSElMRFJFTihFbGVtZW50KTsKKwogY2xhc3Mg
RWxlbWVudEhhbmRsZU93bmVyIGZpbmFsIDogcHVibGljIFdlYWtIYW5kbGVPd25lciB7CiAgICAg
V1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgYm9vbCBpc1JlYWNoYWJsZUZy
b21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIFNs
b3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKSBmaW5hbAorICAgIGJvb2wg
aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5k
bGUsIHZvaWQqLCBBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVh
c29uKSBmaW5hbAogICAgIHsKICAgICAgICAgRG9sbGFyVk1Bc3NlcnRTY29wZSBhc3NlcnRTY29w
ZTsKICAgICAgICAgaWYgKFVOTElLRUxZKHJlYXNvbikpCkBAIC0zMDQsMTggKzMwOSwyMyBAQCBw
dWJsaWM6CiAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0
LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygp
KTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCogdGhpc09i
amVjdCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCi0gICAgewotICAgICAgICBEb2xsYXJWTUFzc2Vy
dFNjb3BlIGFzc2VydFNjb3BlOwotICAgICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRo
aXNPYmplY3QsIGluZm8oKSk7Ci0gICAgICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVj
dCwgdmlzaXRvcik7Ci0gICAgICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdCh0aGlzT2JqZWN0KTsK
LSAgICB9CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogcHJpdmF0ZToKICAgICBXZWFr
PEVsZW1lbnQ+IG1fZWxlbWVudDsKIH07CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2
b2lkIFJvb3Q6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogdGhpc09iamVjdCwgVmlzaXRvciYg
dmlzaXRvcikKK3sKKyAgICBEb2xsYXJWTUFzc2VydFNjb3BlIGFzc2VydFNjb3BlOworICAgIEFT
U0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKKyAgICBCYXNlOjp2
aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOworICAgIHZpc2l0b3IuYWRkT3BhcXVl
Um9vdCh0aGlzT2JqZWN0KTsKK30KKworREVGSU5FX1ZJU0lUX0NISUxEUkVOKFJvb3QpOworCiBj
bGFzcyBTaW1wbGVPYmplY3QgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7CiBwdWJsaWM6CiAg
ICAgU2ltcGxlT2JqZWN0KFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCkBAIC0zNDAsMTQg
KzM1MCw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHNpbXBsZU9iamVjdDsKICAgICB9CiAK
LSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3Im
IHZpc2l0b3IpCi0gICAgewotICAgICAgICBEb2xsYXJWTUFzc2VydFNjb3BlIGFzc2VydFNjb3Bl
OwotICAgICAgICBTaW1wbGVPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8U2ltcGxlT2JqZWN0
Kj4oY2VsbCk7Ci0gICAgICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwg
aW5mbygpKTsKLSAgICAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9y
KTsKLSAgICAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9oaWRkZW5WYWx1ZSk7Ci0g
ICAgfQorICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBzdGF0aWMgU3RydWN0dXJl
KiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBK
U1ZhbHVlIHByb3RvdHlwZSkKICAgICB7CkBAIC0zODAsNiArMzgzLDE4IEBAIHByaXZhdGU6CiAg
ICAgV3JpdGVCYXJyaWVyPEpTQzo6VW5rbm93bj4gbV9oaWRkZW5WYWx1ZTsKIH07CiAKK3RlbXBs
YXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFNpbXBsZU9iamVjdDo6dmlzaXRDaGlsZHJlbklt
cGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIERvbGxhclZNQXNzZXJ0
U2NvcGUgYXNzZXJ0U2NvcGU7CisgICAgU2ltcGxlT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0
PFNpbXBsZU9iamVjdCo+KGNlbGwpOworICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhp
c09iamVjdCwgaW5mbygpKTsKKyAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZp
c2l0b3IpOworICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1faGlkZGVuVmFsdWUpOwor
fQorCitERUZJTkVfVklTSVRfQ0hJTERSRU4oU2ltcGxlT2JqZWN0KTsKKwogY2xhc3MgSW1wdXJl
R2V0dGVyIDogcHVibGljIEpTTm9uRmluYWxPYmplY3QgewogcHVibGljOgogICAgIEltcHVyZUdl
dHRlcihWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQpAQCAtNDM2LDE0ICs0NTEsNyBAQCBw
dWJsaWM6CiAgICAgICAgIHJldHVybiBCYXNlOjpnZXRPd25Qcm9wZXJ0eVNsb3Qob2JqZWN0LCBn
bG9iYWxPYmplY3QsIG5hbWUsIHNsb3QpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0
Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKLSAgICB7Ci0gICAg
ICAgIERvbGxhclZNQXNzZXJ0U2NvcGUgYXNzZXJ0U2NvcGU7Ci0gICAgICAgIEFTU0VSVF9HQ19P
QkpFQ1RfSU5IRVJJVFMoY2VsbCwgaW5mbygpKTsKLSAgICAgICAgQmFzZTo6dmlzaXRDaGlsZHJl
bihjZWxsLCB2aXNpdG9yKTsKLSAgICAgICAgSW1wdXJlR2V0dGVyKiB0aGlzT2JqZWN0ID0ganND
YXN0PEltcHVyZUdldHRlcio+KGNlbGwpOwotICAgICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2Jq
ZWN0LT5tX2RlbGVnYXRlKTsKLSAgICB9CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAog
ICAgIHZvaWQgc2V0RGVsZWdhdGUoVk0mIHZtLCBKU09iamVjdCogZGVsZWdhdGUpCiAgICAgewpA
QCAtNDU0LDYgKzQ2MiwxOCBAQCBwcml2YXRlOgogICAgIFdyaXRlQmFycmllcjxKU09iamVjdD4g
bV9kZWxlZ2F0ZTsKIH07CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEltcHVy
ZUdldHRlcjo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9y
KQoreworICAgIERvbGxhclZNQXNzZXJ0U2NvcGUgYXNzZXJ0U2NvcGU7CisgICAgQVNTRVJUX0dD
X09CSkVDVF9JTkhFUklUUyhjZWxsLCBpbmZvKCkpOworICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4o
Y2VsbCwgdmlzaXRvcik7CisgICAgSW1wdXJlR2V0dGVyKiB0aGlzT2JqZWN0ID0ganNDYXN0PElt
cHVyZUdldHRlcio+KGNlbGwpOworICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fZGVs
ZWdhdGUpOworfQorCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSW1wdXJlR2V0dGVyKTsKKwogc3Rh
dGljIEpTQ19ERUNMQVJFX0NVU1RPTV9HRVRURVIoY3VzdG9tR2V0dGVyVmFsdWVHZXR0ZXIpOwog
c3RhdGljIEpTQ19ERUNMQVJFX0NVU1RPTV9HRVRURVIoY3VzdG9tR2V0dGVyQWNlc3NvckdldHRl
cik7CiAKQEAgLTE4MjIsMTQgKzE4NDIsNyBAQCBwdWJsaWM6CiAgICAgICAgIHB1dERpcmVjdE5h
dGl2ZUZ1bmN0aW9uKHZtLCBnbG9iYWxPYmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0s
ICJhZGRCeXRlcyIpLCAwLCBmdW5jdGlvbldhc21TdHJlYW1pbmdDb21waWxlckFkZEJ5dGVzLCBO
b0ludHJpbnNpYywgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpEb250
RW51bSkpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBj
ZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKLSAgICB7Ci0gICAgICAgIERvbGxhclZNQXNzZXJ0
U2NvcGUgYXNzZXJ0U2NvcGU7Ci0gICAgICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8V2Fz
bVN0cmVhbWluZ0NvbXBpbGVyKj4oY2VsbCk7Ci0gICAgICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5I
RVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKLSAgICAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0
aGlzT2JqZWN0LCB2aXNpdG9yKTsKLSAgICAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+
bV9wcm9taXNlKTsKLSAgICB9CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIERF
Q0xBUkVfSU5GTzsKIApAQCAtMTgzNyw2ICsxODUwLDE4IEBAIHB1YmxpYzoKICAgICBSZWY8V2Fz
bTo6U3RyZWFtaW5nQ29tcGlsZXI+IG1fc3RyZWFtaW5nQ29tcGlsZXI7CiB9OwogCit0ZW1wbGF0
ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBXYXNtU3RyZWFtaW5nQ29tcGlsZXI6OnZpc2l0Q2hp
bGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBEb2xsYXJW
TUFzc2VydFNjb3BlIGFzc2VydFNjb3BlOworICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8
V2FzbVN0cmVhbWluZ0NvbXBpbGVyKj4oY2VsbCk7CisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhF
UklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOworICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09i
amVjdCwgdmlzaXRvcik7CisgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9wcm9taXNl
KTsKK30KKworREVGSU5FX1ZJU0lUX0NISUxEUkVOKFdhc21TdHJlYW1pbmdDb21waWxlcik7CisK
IGNvbnN0IENsYXNzSW5mbyBXYXNtU3RyZWFtaW5nQ29tcGlsZXI6OnNfaW5mbyA9IHsgIldhc21T
dHJlYW1pbmdDb21waWxlciIsICZCYXNlOjpzX2luZm8sIG51bGxwdHIsIG51bGxwdHIsIENSRUFU
RV9NRVRIT0RfVEFCTEUoV2FzbVN0cmVhbWluZ0NvbXBpbGVyKSB9OwogCiBKU0NfREVGSU5FX0hP
U1RfRlVOQ1RJT04oZnVuY3Rpb25XYXNtU3RyZWFtaW5nQ29tcGlsZXJBZGRCeXRlcywgKEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKSkKQEAgLTM2OTks
MTMgKzM3MjQsMTYgQEAgdm9pZCBKU0RvbGxhclZNOjphZGRDb25zdHJ1Y3RpYmxlRnVuY3Rpbwog
ICAgIHB1dERpcmVjdCh2bSwgaWRlbnRpZmllciwgSlNGdW5jdGlvbjo6Y3JlYXRlKHZtLCBnbG9i
YWxPYmplY3QsIGFyZ3VtZW50cywgaWRlbnRpZmllci5zdHJpbmcoKSwgZnVuY3Rpb24sIE5vSW50
cmluc2ljLCBmdW5jdGlvbiksIGpzRG9sbGFyVk1Qcm9wZXJ0eUF0dHJpYnV0ZXMpOwogfQogCi12
b2lkIEpTRG9sbGFyVk06OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYg
dmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTRG9sbGFyVk06OnZp
c2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBK
U0RvbGxhclZNKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTRG9sbGFyVk0qPihjZWxsKTsKICAgICBC
YXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwogICAgIHZpc2l0b3IuYXBw
ZW5kKHRoaXNPYmplY3QtPm1fb2JqZWN0RG9pbmdTaWRlRWZmZWN0UHV0V2l0aG91dENvcnJlY3RT
bG90U3RhdHVzU3RydWN0dXJlKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTRG9sbGFy
Vk0pOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogSUdOT1JFX1dBUk5JTkdTX0VORApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0pTRG9sbGFyVk0uaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvSlNEb2xsYXJWTS5oCShyZXZpc2lvbiAyNzI4MzAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvSlNEb2xsYXJWTS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE5IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtNzQsNyArNzQsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgYWRkRnVuY3Rpb24oVk0m
LCBKU0dsb2JhbE9iamVjdCosIGNvbnN0IGNoYXIqIG5hbWUsIE5hdGl2ZUZ1bmN0aW9uLCB1bnNp
Z25lZCBhcmd1bWVudHMpOwogICAgIHZvaWQgYWRkQ29uc3RydWN0aWJsZUZ1bmN0aW9uKFZNJiwg
SlNHbG9iYWxPYmplY3QqLCBjb25zdCBjaGFyKiBuYW1lLCBOYXRpdmVGdW5jdGlvbiwgdW5zaWdu
ZWQgYXJndW1lbnRzKTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwg
U2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgV3JpdGVC
YXJyaWVyPFN0cnVjdHVyZT4gbV9vYmplY3REb2luZ1NpZGVFZmZlY3RQdXRXaXRob3V0Q29ycmVj
dFNsb3RTdGF0dXNTdHJ1Y3R1cmU7CiB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbUdsb2JhbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbUdsb2JhbC5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21HbG9iYWwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEwMyw3ICsxMDMsOCBAQCB2
b2lkIEdsb2JhbDo6c2V0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPCiAgICAgfQogfQogCi12b2lk
IEdsb2JhbDo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0
eXBlbmFtZSBWaXNpdG9yPgordm9pZCBHbG9iYWw6OnZpc2l0QWdncmVnYXRlSW1wbChWaXNpdG9y
JiB2aXNpdG9yKQogewogICAgIHN3aXRjaCAobV90eXBlKSB7CiAgICAgY2FzZSBXYXNtOjpUeXBl
OjpFeHRlcm5yZWY6CkBAIC0xMTcsNiArMTE4LDggQEAgdm9pZCBHbG9iYWw6OnZpc2l0QWdncmVn
YXRlKFNsb3RWaXNpdG9yJgogICAgIH0KIH0KIAorREVGSU5FX1ZJU0lUX0FHR1JFR0FURShHbG9i
YWwpOworCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6R2xvYmFsCiAKICNlbmRpZiAvLyBFTkFCTEUo
V0VCQVNTRU1CTFkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtR2xvYmFs
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUdsb2JhbC5o
CShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtR2xv
YmFsLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDE3LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01Nyw3ICs1Nyw4IEBAIHB1YmxpYzoKICAgICBKU1Zh
bHVlIGdldChKU0dsb2JhbE9iamVjdCopIGNvbnN0OwogICAgIHVpbnQ2NF90IGdldFByaW1pdGl2
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWUubV9wcmltaXRpdmU7IH0KICAgICB2b2lkIHNldChK
U0dsb2JhbE9iamVjdCosIEpTVmFsdWUpOwotICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZp
c2l0b3ImKTsKKy8vICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgdmlzaXRBZ2dy
ZWdhdGUoVmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQUdHUkVHQVRFOwogCiAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgVD4gVCogb3duZXIoKSBjb25zdCB7IHJldHVybiByZWludGVycHJldF9j
YXN0PFQqPihtX293bmVyKTsgfQogICAgIHZvaWQgc2V0T3duZXIoSlNPYmplY3QqIG93bmVyKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRhYmxlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGFibGUuY3BwCShyZXZpc2lvbiAy
NzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGFibGUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNy0yMDE5
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0y
MDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMTY2LDcgKzE2Niw4IEBAIEpTVmFsdWUgVGFibGU6OmdldCh1aW50MzJf
dCBpbmRleCkgY29uc3QKICAgICByZXR1cm4gbV9qc1ZhbHVlcy5nZXQoKVtpbmRleCAmIG1fbWFz
a10uZ2V0KCk7CiB9CiAKLXZvaWQgVGFibGU6OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgVGFibGU6OnZpc2l0QWdn
cmVnYXRlSW1wbChWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFJFTEVBU0VfQVNTRVJUKG1fb3du
ZXIpOwogICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9vd25lci0+Y2VsbExvY2soKSk7CkBA
IC0xNzQsNiArMTc1LDggQEAgdm9pZCBUYWJsZTo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3Im
IAogICAgICAgICB2aXNpdG9yLmFwcGVuZChtX2pzVmFsdWVzLmdldCgpW2ldKTsKIH0KIAorREVG
SU5FX1ZJU0lUX0FHR1JFR0FURShUYWJsZSk7CisKIFR5cGUgVGFibGU6Ondhc21UeXBlKCkgY29u
c3QKIHsKICAgICBpZiAoaXNFeHRlcm5yZWZUYWJsZSgpKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbVRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbVRhYmxlLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21UYWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNy0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODAsNyArODAsNyBA
QCBwdWJsaWM6CiAgICAgT3B0aW9uYWw8dWludDMyX3Q+IGdyb3codWludDMyX3QgZGVsdGEsIEpT
VmFsdWUgZGVmYXVsdFZhbHVlKTsKICAgICB2b2lkIGNvcHkoY29uc3QgVGFibGUqIHNyY1RhYmxl
LCB1aW50MzJfdCBkc3RJbmRleCwgdWludDMyX3Qgc3JjSW5kZXgpOwogCi0gICAgdm9pZCB2aXNp
dEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQUdHUkVHQVRFOwog
CiBwcm90ZWN0ZWQ6CiAgICAgVGFibGUodWludDMyX3QgaW5pdGlhbCwgT3B0aW9uYWw8dWludDMy
X3Q+IG1heGltdW0sIFRhYmxlRWxlbWVudFR5cGUgPSBUYWJsZUVsZW1lbnRUeXBlOjpFeHRlcm5y
ZWYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNUb1dhc21JQ0NhbGxl
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNUb1dh
c21JQ0NhbGxlZS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL0pTVG9XYXNtSUNDYWxsZWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ5LDcgKzQ5LDgg
QEAgU3RydWN0dXJlKiBKU1RvV2FzbUlDQ2FsbGVlOjpjcmVhdGVTdHJ1YwogICAgIHJldHVybiBT
dHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKEpT
Q2FsbGVlVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwogfQogCi12b2lkIEpTVG9XYXNt
SUNDYWxsZWU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRv
cikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTVG9XYXNtSUNDYWxsZWU6OnZp
c2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBK
U1RvV2FzbUlDQ2FsbGVlKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVG9XYXNtSUNDYWxsZWUqPihj
ZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7
CkBAIC01OCw2ICs1OSw4IEBAIHZvaWQgSlNUb1dhc21JQ0NhbGxlZTo6dmlzaXRDaGlsZHJlbihK
U0MKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2Z1bmN0aW9uKTsKIH0KIAorREVG
SU5FX1ZJU0lUX0NISUxEUkVOKEpTVG9XYXNtSUNDYWxsZWUpOworCiB9IC8vIG5hbWVzcGFjZSBK
U0MKIAogI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL0pTVG9XYXNtSUNDYWxsZWUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1RvV2FzbUlDQ2FsbGVlLmgJKHJldmlzaW9uIDI3Mjgz
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTVG9XYXNtSUNDYWxsZWUuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTkg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE5LTIw
MjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC01Niw3ICs1Niw3IEBAIHByaXZhdGU6CiAgICAgSlNUb1dhc21JQ0NhbGxl
ZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0
dXJlKQogICAgICAgICA6IEJhc2Uodm0sIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKQogICAgIHsg
fQotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsK
KyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgV3JpdGVCYXJyaWVyPFdlYkFzc2Vt
Ymx5RnVuY3Rpb24+IG1fZnVuY3Rpb247CiB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9jay5jcHAJKHJldmlz
aW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1i
bHlDb2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxNy0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODIsNyArODIsOCBAQCB2b2lkIEpT
V2ViQXNzZW1ibHlDb2RlQmxvY2s6OmNsZWFySlNDYWxsCiAgICAgICAgICgqaXRlciktPnVubGlu
ayh2bSk7CiB9CiAKLXZvaWQgSlNXZWJBc3NlbWJseUNvZGVCbG9jazo6dmlzaXRDaGlsZHJlbihK
U0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlz
aXRvcj4KK3ZvaWQgSlNXZWJBc3NlbWJseUNvZGVCbG9jazo6dmlzaXRDaGlsZHJlbkltcGwoSlND
ZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTV2ViQXNzZW1ibHlDb2RlQmxv
Y2sqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNXZWJBc3NlbWJseUNvZGVCbG9jayo+KGNlbGwpOwog
ICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTkw
LDYgKzkxLDggQEAgdm9pZCBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrOjp2aXNpdENoaWxkcgogICAg
IEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CiB9CiAKK0RFRklORV9W
SVNJVF9DSElMRFJFTihKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKTsKKwogdm9pZCBKU1dlYkFzc2Vt
Ymx5Q29kZUJsb2NrOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxseShWTSYgdm0pCiB7CiAgICAgZm9y
IChhdXRvIGl0ZXIgPSBtX2NhbGxMaW5rSW5mb3MuYmVnaW4oKTsgISFpdGVyOyArK2l0ZXIpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2Nr
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3Nl
bWJseUNvZGVCbG9jay5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjAgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC04
Niw3ICs4Niw3IEBAIHByaXZhdGU6CiAgICAgREVDTEFSRV9FWFBPUlRfSU5GTzsKICAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgbmVlZHNEZXN0cnVjdGlvbiA9IHRydWU7CiAgICAgc3RhdGljIHZv
aWQgZGVzdHJveShKU0NlbGwqKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2Vs
bCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIFJl
ZjxXYXNtOjpDb2RlQmxvY2s+IG1fY29kZUJsb2NrOwogICAgIFZlY3RvcjxNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY8V2FzbUVudHJ5UHRyVGFnPj4gbV93YXNtVG9KU0V4aXRTdHViczsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlHbG9iYWwuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlHbG9i
YWwuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9KU1dlYkFzc2VtYmx5R2xvYmFsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE5LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03MSw3ICs3MSw4IEBAIHZv
aWQgSlNXZWJBc3NlbWJseUdsb2JhbDo6ZGVzdHJveShKU0NlbGwKICAgICBzdGF0aWNfY2FzdDxK
U1dlYkFzc2VtYmx5R2xvYmFsKj4oY2VsbCktPkpTV2ViQXNzZW1ibHlHbG9iYWw6On5KU1dlYkFz
c2VtYmx5R2xvYmFsKCk7CiB9CiAKLXZvaWQgSlNXZWJBc3NlbWJseUdsb2JhbDo6dmlzaXRDaGls
ZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5h
bWUgVmlzaXRvcj4KK3ZvaWQgSlNXZWJBc3NlbWJseUdsb2JhbDo6dmlzaXRDaGlsZHJlbkltcGwo
SlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTV2ViQXNzZW1ibHlHbG9i
YWwqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNXZWJBc3NlbWJseUdsb2JhbCo+KGNlbGwpOwogICAg
IEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTgwLDYg
KzgxLDggQEAgdm9pZCBKU1dlYkFzc2VtYmx5R2xvYmFsOjp2aXNpdENoaWxkcmVuKAogICAgIHRo
aXNPYmplY3QtPmdsb2JhbCgpLT52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKIH0KIAorREVGSU5F
X1ZJU0lUX0NISUxEUkVOKEpTV2ViQXNzZW1ibHlHbG9iYWwpOworCiB9IC8vIG5hbWVzcGFjZSBK
U0MKIAogI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlHbG9iYWwuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5R2xvYmFsLmgJKHJldmlzaW9u
IDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlH
bG9iYWwuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE5LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC01OSw3ICs1OSw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAg
ICAgSlNXZWJBc3NlbWJseUdsb2JhbChWTSYsIFN0cnVjdHVyZSosIFJlZjxXYXNtOjpHbG9iYWw+
JiYpOwogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNp
dENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElM
RFJFTjsKIAogICAgIFJlZjxXYXNtOjpHbG9iYWw+IG1fZ2xvYmFsOwogfTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUluc3Rh
bmNlLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
anMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTczLDcgKzcz
LDggQEAgdm9pZCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OmRlc3Ryb3koSlNDZQogICAgIHN0YXRp
Y19jYXN0PEpTV2ViQXNzZW1ibHlJbnN0YW5jZSo+KGNlbGwpLT5KU1dlYkFzc2VtYmx5SW5zdGFu
Y2U6On5KU1dlYkFzc2VtYmx5SW5zdGFuY2UoKTsKIH0KIAotdm9pZCBKU1dlYkFzc2VtYmx5SW5z
dGFuY2U6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikK
K3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6
dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAg
IGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNXZWJBc3NlbWJseUluc3RhbmNlKj4oY2VsbCk7
CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAt
MTAyLDYgKzEwMyw4IEBAIHZvaWQgSlNXZWJBc3NlbWJseUluc3RhbmNlOjp2aXNpdENoaWxkcmUK
ICAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZCh3cmFwcGVyLmdldCgpKTsKIH0KIAor
REVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTV2ViQXNzZW1ibHlJbnN0YW5jZSk7CisKIHZvaWQgSlNX
ZWJBc3NlbWJseUluc3RhbmNlOjpmaW5hbGl6ZUNyZWF0aW9uKFZNJiB2bSwgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgUmVmPFdhc206OkNvZGVCbG9jaz4mJiB3YXNtQ29kZUJsb2NrLCBK
U09iamVjdCogaW1wb3J0T2JqZWN0LCBXYXNtOjpDcmVhdGlvbk1vZGUgY3JlYXRpb25Nb2RlKQog
ewogICAgIG1faW5zdGFuY2UtPmZpbmFsaXplQ3JlYXRpb24odGhpcywgd2FzbUNvZGVCbG9jay5j
b3B5UmVmKCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3Nl
bWJseUluc3RhbmNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
anMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE5IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMTA1LDcgKzEwNSw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgSlNXZWJBc3Nl
bWJseUluc3RhbmNlKFZNJiwgU3RydWN0dXJlKiwgUmVmPFdhc206Okluc3RhbmNlPiYmKTsKICAg
ICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgSlNXZWJBc3NlbWJseU1vZHVsZSosIFdlYkFzc2Vt
Ymx5TW9kdWxlUmVjb3JkKik7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwq
LCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBSZWY8
V2FzbTo6SW5zdGFuY2U+IG1faW5zdGFuY2U7CiAgICAgVk0qIG1fdm07CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TWVtb3J5LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TWVtb3J5LmNw
cAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNX
ZWJBc3NlbWJseU1lbW9yeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xNTksNyArMTU5LDggQEAg
dm9pZCBKU1dlYkFzc2VtYmx5TWVtb3J5OjpkZXN0cm95KEpTQ2VsbAogICAgIG1lbW9yeS0+SlNX
ZWJBc3NlbWJseU1lbW9yeTo6fkpTV2ViQXNzZW1ibHlNZW1vcnkoKTsKIH0KIAotdm9pZCBKU1dl
YkFzc2VtYmx5TWVtb3J5Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3Im
IHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1dlYkFzc2VtYmx5
TWVtb3J5Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3Ip
CiB7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1dlYkFzc2VtYmx5TWVtb3J5Kj4o
Y2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkp
OwpAQCAtMTY5LDYgKzE3MCw4IEBAIHZvaWQgSlNXZWJBc3NlbWJseU1lbW9yeTo6dmlzaXRDaGls
ZHJlbigKICAgICB2aXNpdG9yLnJlcG9ydEV4dHJhTWVtb3J5VmlzaXRlZCh0aGlzT2JqZWN0LT5t
ZW1vcnkoKS5zaXplKCkpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNXZWJBc3NlbWJs
eU1lbW9yeSk7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQkFT
U0VNQkxZKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJs
eU1lbW9yeS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pT
V2ViQXNzZW1ibHlNZW1vcnkuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1lbW9yeS5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE5IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
NjMsNyArNjMsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIEpTV2ViQXNzZW1ibHlNZW1vcnko
Vk0mLCBTdHJ1Y3R1cmUqKTsKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7Ci0gICAgc3Rh
dGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xB
UkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBSZWY8V2FzbTo6TWVtb3J5PiBtX21lbW9yeTsKICAg
ICBXcml0ZUJhcnJpZXI8SlNBcnJheUJ1ZmZlcj4gbV9idWZmZXJXcmFwcGVyOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1vZHVs
ZS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L0pTV2ViQXNzZW1ibHlNb2R1bGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTI0LDcgKzEyNCw4
IEBAIHZvaWQgSlNXZWJBc3NlbWJseU1vZHVsZTo6c2V0Q29kZUJsb2NrKFYKICAgICBtX2NvZGVC
bG9ja3Nbc3RhdGljX2Nhc3Q8c2l6ZV90Pihtb2RlKV0uc2V0KHZtLCB0aGlzLCBjb2RlQmxvY2sp
OwogfQogCi12b2lkIEpTV2ViQXNzZW1ibHlNb2R1bGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBj
ZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2
b2lkIEpTV2ViQXNzZW1ibHlNb2R1bGU6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwg
VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU1dlYkFzc2VtYmx5TW9kdWxlKiB0aGlzT2JqZWN0
ID0ganNDYXN0PEpTV2ViQXNzZW1ibHlNb2R1bGUqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JK
RUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC0xMzUsNiArMTM2LDggQEAgdm9p
ZCBKU1dlYkFzc2VtYmx5TW9kdWxlOjp2aXNpdENoaWxkcmVuKAogICAgICAgICB2aXNpdG9yLmFw
cGVuZCh0aGlzT2JqZWN0LT5tX2NvZGVCbG9ja3NbaV0pOwogfQogCitERUZJTkVfVklTSVRfQ0hJ
TERSRU4oSlNXZWJBc3NlbWJseU1vZHVsZSk7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5k
aWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuaAkocmV2aXNpb24gMjcyODMwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNi0y
MDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
Ni0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtODAsNyArODAsNyBAQCBwcml2YXRlOgogCiAgICAgSlNXZWJBc3Nl
bWJseU1vZHVsZShWTSYsIFN0cnVjdHVyZSosIFJlZjxXYXNtOjpNb2R1bGU+JiYpOwogICAgIHZv
aWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpT
Q2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAg
IFJlZjxXYXNtOjpNb2R1bGU+IG1fbW9kdWxlOwogICAgIFdyaXRlQmFycmllcjxTeW1ib2xUYWJs
ZT4gbV9leHBvcnRTeW1ib2xUYWJsZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL0pTV2ViQXNzZW1ibHlUYWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseVRhYmxlLmNwcAkocmV2aXNpb24gMjcyODMwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseVRhYmxlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYt
MjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTcyLDcgKzcyLDggQEAgdm9pZCBKU1dlYkFzc2VtYmx5VGFibGU6
OmRlc3Ryb3koSlNDZWxsKgogICAgIHN0YXRpY19jYXN0PEpTV2ViQXNzZW1ibHlUYWJsZSo+KGNl
bGwpLT5KU1dlYkFzc2VtYmx5VGFibGU6On5KU1dlYkFzc2VtYmx5VGFibGUoKTsKIH0KIAotdm9p
ZCBKU1dlYkFzc2VtYmx5VGFibGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90Vmlz
aXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTV2ViQXNz
ZW1ibHlUYWJsZTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNp
dG9yKQogewogICAgIEpTV2ViQXNzZW1ibHlUYWJsZSogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1dl
YkFzc2VtYmx5VGFibGUqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRo
aXNPYmplY3QsIGluZm8oKSk7CkBAIC04MSw2ICs4Miw4IEBAIHZvaWQgSlNXZWJBc3NlbWJseVRh
YmxlOjp2aXNpdENoaWxkcmVuKEoKICAgICB0aGlzT2JqZWN0LT50YWJsZSgpLT52aXNpdEFnZ3Jl
Z2F0ZSh2aXNpdG9yKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTV2ViQXNzZW1ibHlU
YWJsZSk7CisKIGJvb2wgSlNXZWJBc3NlbWJseVRhYmxlOjpncm93KHVpbnQzMl90IGRlbHRhLCBK
U1ZhbHVlIGRlZmF1bHRWYWx1ZSkKIHsKICAgICBpZiAoZGVsdGEgPT0gMCkKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlUYWJsZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlUYWJsZS5oCShy
ZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFz
c2VtYmx5VGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTYtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTcwLDcgKzcwLDcgQEAgcHVibGljOgog
cHJpdmF0ZToKICAgICBKU1dlYkFzc2VtYmx5VGFibGUoVk0mLCBTdHJ1Y3R1cmUqLCBSZWY8V2Fz
bTo6VGFibGU+JiYpOwogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKLSAgICBzdGF0aWMg
dm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9W
SVNJVF9DSElMRFJFTjsKIAogICAgIFJlZjxXYXNtOjpUYWJsZT4gbV90YWJsZTsKIH07CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1
bmN0aW9uLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00NTIsNyAr
NDUyLDggQEAgV2ViQXNzZW1ibHlGdW5jdGlvbjo6V2ViQXNzZW1ibHlGdW5jdGlvbgogICAgICwg
bV9pbXBvcnRhYmxlRnVuY3Rpb24geyBzaWduYXR1cmVJbmRleCwgd2FzbVRvV2FzbUVudHJ5cG9p
bnRMb2FkTG9jYXRpb24gfQogeyB9CiAKLXZvaWQgV2ViQXNzZW1ibHlGdW5jdGlvbjo6dmlzaXRD
aGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlw
ZW5hbWUgVmlzaXRvcj4KK3ZvaWQgV2ViQXNzZW1ibHlGdW5jdGlvbjo6dmlzaXRDaGlsZHJlbklt
cGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFdlYkFzc2VtYmx5RnVu
Y3Rpb24qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8V2ViQXNzZW1ibHlGdW5jdGlvbio+KGNlbGwpOwog
ICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTQ2
MSw2ICs0NjIsOCBAQCB2b2lkIFdlYkFzc2VtYmx5RnVuY3Rpb246OnZpc2l0Q2hpbGRyZW4oCiAg
ICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9qc1RvV2FzbUlDQ2FsbGVlKTsKIH0KIAor
REVGSU5FX1ZJU0lUX0NISUxEUkVOKFdlYkFzc2VtYmx5RnVuY3Rpb24pOworCiB2b2lkIFdlYkFz
c2VtYmx5RnVuY3Rpb246OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQogewogICAgIHN0YXRpY19jYXN0
PFdlYkFzc2VtYmx5RnVuY3Rpb24qPihjZWxsKS0+V2ViQXNzZW1ibHlGdW5jdGlvbjo6fldlYkFz
c2VtYmx5RnVuY3Rpb24oKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dl
YkFzc2VtYmx5RnVuY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uaAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxOSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTg2LDcgKzg2LDcgQEAgcHVibGljOgogICAgIFdhc206Okluc3RhbmNlKiBwcmV2
aW91c0luc3RhbmNlKENhbGxGcmFtZSopOwogCiBwcml2YXRlOgotICAgIHN0YXRpYyB2b2lkIHZp
c2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NI
SUxEUkVOOwogICAgIFdlYkFzc2VtYmx5RnVuY3Rpb24oVk0mLCBOYXRpdmVFeGVjdXRhYmxlKiwg
SlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqLCBXYXNtOjpDYWxsZWUmIGpzRW50cnlwb2ludCwg
V2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbjo6TG9hZExvY2F0aW9uIGVudHJ5cG9pbnRMb2Fk
TG9jYXRpb24sIFdhc206OlNpZ25hdHVyZUluZGV4KTsKIAogICAgIE1hY3JvQXNzZW1ibGVyQ29k
ZVB0cjxKU0VudHJ5UHRyVGFnPiBqc0NhbGxFbnRyeXBvaW50U2xvdygpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbkJhc2UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rp
b25CYXNlLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbkJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQxLDcgKzQx
LDggQEAgV2ViQXNzZW1ibHlGdW5jdGlvbkJhc2U6OldlYkFzc2VtYmx5RnVuYwogICAgIDogQmFz
ZSh2bSwgZXhlY3V0YWJsZSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUpCiB7IH0KIAotdm9pZCBX
ZWJBc3NlbWJseUZ1bmN0aW9uQmFzZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgV2ViQXNz
ZW1ibHlGdW5jdGlvbkJhc2U6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRv
ciYgdmlzaXRvcikKIHsKICAgICBXZWJBc3NlbWJseUZ1bmN0aW9uQmFzZSogdGhpc09iamVjdCA9
IGpzQ2FzdDxXZWJBc3NlbWJseUZ1bmN0aW9uQmFzZSo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19P
QkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTQ5LDYgKzUwLDggQEAgdm9p
ZCBXZWJBc3NlbWJseUZ1bmN0aW9uQmFzZTo6dmlzaXRDaGlsZAogICAgIHZpc2l0b3IuYXBwZW5k
KHRoaXNPYmplY3QtPm1faW5zdGFuY2UpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oV2Vi
QXNzZW1ibHlGdW5jdGlvbkJhc2UpOworCiB2b2lkIFdlYkFzc2VtYmx5RnVuY3Rpb25CYXNlOjpm
aW5pc2hDcmVhdGlvbihWTSYgdm0sIE5hdGl2ZUV4ZWN1dGFibGUqIGV4ZWN1dGFibGUsIHVuc2ln
bmVkIGxlbmd0aCwgY29uc3QgU3RyaW5nJiBuYW1lLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGlu
c3RhbmNlKQogewogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtLCBleGVjdXRhYmxlLCBsZW5n
dGgsIG5hbWUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1i
bHlGdW5jdGlvbkJhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uQmFzZS5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uQmFzZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNy0yMDE4
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0y
MDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtNDYsNyArNDYsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHB0cmRpZmZf
dCBvZmZzZXRPZkluc3RhbmNlKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFdlYkFzc2VtYmx5
RnVuY3Rpb25CYXNlLCBtX2luc3RhbmNlKTsgfQogCiBwcm90ZWN0ZWQ6Ci0gICAgc3RhdGljIHZv
aWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklT
SVRfQ0hJTERSRU47CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIE5hdGl2ZUV4ZWN1dGFi
bGUqLCB1bnNpZ25lZCBsZW5ndGgsIGNvbnN0IFN0cmluZyYgbmFtZSwgSlNXZWJBc3NlbWJseUlu
c3RhbmNlKik7CiAgICAgV2ViQXNzZW1ibHlGdW5jdGlvbkJhc2UoVk0mLCBOYXRpdmVFeGVjdXRh
YmxlKiwgSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqKTsKIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3Jk
LmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
V2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNzgsNyArNzgs
OCBAQCB2b2lkIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpmaW5pc2hDcmVhCiAgICAgfQogfQog
Ci12b2lkIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2Vs
bCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9p
ZCBXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxs
LCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkKiB0aGlz
T2JqZWN0ID0ganNDYXN0PFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkKj4oY2VsbCk7CiAgICAgQVNT
RVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtODgsNiArODks
OCBAQCB2b2lkIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjp2aXNpdENoaWxkCiAgICAgdmlzaXRv
ci5hcHBlbmQodGhpc09iamVjdC0+bV9leHBvcnRzT2JqZWN0KTsKIH0KIAorREVGSU5FX1ZJU0lU
X0NISUxEUkVOKFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkKTsKKwogdm9pZCBXZWJBc3NlbWJseU1v
ZHVsZVJlY29yZDo6cHJlcGFyZUxpbmsoVk0mIHZtLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGlu
c3RhbmNlKQogewogICAgIFJFTEVBU0VfQVNTRVJUKCFtX2luc3RhbmNlKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVS
ZWNvcmQuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
anMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY5LDcgKzY5
LDcgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxPYmplY3Qq
LCBWTSYsIGNvbnN0IFdhc206Ok1vZHVsZUluZm9ybWF0aW9uJik7CiAKLSAgICBzdGF0aWMgdm9p
ZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJ
VF9DSElMRFJFTjsKIAogICAgIFdyaXRlQmFycmllcjxKU1dlYkFzc2VtYmx5SW5zdGFuY2U+IG1f
aW5zdGFuY2U7CiAgICAgV3JpdGVCYXJyaWVyPEpTT2JqZWN0PiBtX3N0YXJ0RnVuY3Rpb247Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVdyYXBwZXJGdW5j
dGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2Vi
QXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3LTIw
MTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3
LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC02Nyw3ICs2Nyw4IEBAIFN0cnVjdHVyZSogV2ViQXNzZW1ibHlXcmFw
cGVyRnVuY3Rpb246OmMKICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9i
amVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhKU0Z1bmN0aW9uVHlwZSwgU3RydWN0dXJlRmxhZ3Mp
LCBpbmZvKCkpOwogfQogCi12b2lkIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uOjp2aXNpdENo
aWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBl
bmFtZSBWaXNpdG9yPgordm9pZCBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbjo6dmlzaXRDaGls
ZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFdlYkFzc2Vt
Ymx5V3JhcHBlckZ1bmN0aW9uKiB0aGlzT2JqZWN0ID0ganNDYXN0PFdlYkFzc2VtYmx5V3JhcHBl
ckZ1bmN0aW9uKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2Jq
ZWN0LCBpbmZvKCkpOwpAQCAtNzYsNiArNzcsOCBAQCB2b2lkIFdlYkFzc2VtYmx5V3JhcHBlckZ1
bmN0aW9uOjp2aXNpdENoCiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9mdW5jdGlv
bik7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlv
bik7CisKIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihjYWxsV2ViQXNzZW1ibHlXcmFwcGVyRnVu
Y3Rpb24sIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFt
ZSkpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVdyYXBwZXJG
dW5jdGlvbi5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9XZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNy0yMDE5IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTks
NyArNTksNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0
aW9uKFZNJiwgTmF0aXZlRXhlY3V0YWJsZSosIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKiwg
V2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbik7CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihW
TSYsIE5hdGl2ZUV4ZWN1dGFibGUqLCB1bnNpZ25lZCBsZW5ndGgsIGNvbnN0IFN0cmluZyYgbmFt
ZSwgSlNPYmplY3QqLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqKTsKLSAgICBzdGF0aWMgdm9pZCB2
aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9D
SElMRFJFTjsKIAogICAgIFdyaXRlQmFycmllcjxKU09iamVjdD4gbV9mdW5jdGlvbjsKICAgICAv
LyBJdCdzIHNhZmUgdG8ganVzdCBob2xkIHRoZSByYXcgV2FzbVRvV2FzbUltcG9ydGFibGVGdW5j
dGlvbiBiZWNhdXNlIHdlIGhhdmUgYSByZWZlcmVuY2UKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5jcHAJKHJldmlzaW9uIDI3
MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3Jl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE1LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC03MjgsNyArNzI4LDggQEAgdm9pZCBJREJPYmplY3RTdG9yZTo6
cm9sbGJhY2tGb3JWZXJzaW9uQwogICAgIH0KIH0KIAotdm9pZCBJREJPYmplY3RTdG9yZTo6dmlz
aXRSZWZlcmVuY2VkSW5kZXhlcyhTbG90VmlzaXRvciYgdmlzaXRvcikgY29uc3QKK3RlbXBsYXRl
PHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIElEQk9iamVjdFN0b3JlOjp2aXNpdFJlZmVyZW5jZWRJ
bmRleGVzKFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0CiB7CiAgICAgTG9ja2VyPExvY2s+IGxvY2tl
cihtX3JlZmVyZW5jZWRJbmRleExvY2spOwogICAgIGZvciAoYXV0byYgaW5kZXggOiBtX3JlZmVy
ZW5jZWRJbmRleGVzLnZhbHVlcygpKQpAQCAtNzM3LDYgKzczOCw5IEBAIHZvaWQgSURCT2JqZWN0
U3RvcmU6OnZpc2l0UmVmZXJlbmNlZEluZGUKICAgICAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290
KGluZGV4LmdldCgpKTsKIH0KIAordGVtcGxhdGUgdm9pZCBJREJPYmplY3RTdG9yZTo6dmlzaXRS
ZWZlcmVuY2VkSW5kZXhlcyhBYnN0cmFjdFNsb3RWaXNpdG9yJikgY29uc3Q7Cit0ZW1wbGF0ZSB2
b2lkIElEQk9iamVjdFN0b3JlOjp2aXNpdFJlZmVyZW5jZWRJbmRleGVzKFNsb3RWaXNpdG9yJikg
Y29uc3Q7CisKIHZvaWQgSURCT2JqZWN0U3RvcmU6OnJlbmFtZVJlZmVyZW5jZWRJbmRleChJREJJ
bmRleCYgaW5kZXgsIGNvbnN0IFN0cmluZyYgbmV3TmFtZSkKIHsKICAgICBMT0coSW5kZXhlZERC
LCAiSURCT2JqZWN0U3RvcmU6OnJlbmFtZVJlZmVyZW5jZWRJbmRleCIpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5oCShyZXZp
c2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmpl
Y3RTdG9yZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTUtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEwOSw3ICsxMDksNyBAQCBwdWJsaWM6CiAgICAgdm9p
ZCByZWYoKTsKICAgICB2b2lkIGRlcmVmKCk7CiAKLSAgICB2b2lkIHZpc2l0UmVmZXJlbmNlZElu
ZGV4ZXMoSlNDOjpTbG90VmlzaXRvciYpIGNvbnN0OworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZp
c2l0b3I+IHZvaWQgdmlzaXRSZWZlcmVuY2VkSW5kZXhlcyhWaXNpdG9yJikgY29uc3Q7CiAgICAg
dm9pZCByZW5hbWVSZWZlcmVuY2VkSW5kZXgoSURCSW5kZXgmLCBjb25zdCBTdHJpbmcmIG5ld05h
bWUpOwogCiBwcml2YXRlOgpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCVHJhbnNhY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb24uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE3IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMTQ1NSw3ICsxNDU1LDggQEAgdm9pZCBJREJUcmFuc2FjdGlvbjo6Y29ubmVjdGlv
bkNsb3NlZEZybwogICAgIGZpcmVPbkFib3J0KCk7CiB9CiAKLXZvaWQgSURCVHJhbnNhY3Rpb246
OnZpc2l0UmVmZXJlbmNlZE9iamVjdFN0b3JlcyhKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKSBj
b25zdAordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSURCVHJhbnNhY3Rpb246OnZp
c2l0UmVmZXJlbmNlZE9iamVjdFN0b3JlcyhWaXNpdG9yJiB2aXNpdG9yKSBjb25zdAogewogICAg
IExvY2tlcjxMb2NrPiBsb2NrZXIobV9yZWZlcmVuY2VkT2JqZWN0U3RvcmVMb2NrKTsKICAgICBm
b3IgKGF1dG8mIG9iamVjdFN0b3JlIDogbV9yZWZlcmVuY2VkT2JqZWN0U3RvcmVzLnZhbHVlcygp
KQpAQCAtMTQ2NCw2ICsxNDY1LDkgQEAgdm9pZCBJREJUcmFuc2FjdGlvbjo6dmlzaXRSZWZlcmVu
Y2VkT2JqZQogICAgICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qob2JqZWN0U3RvcmUuZ2V0KCkp
OwogfQogCit0ZW1wbGF0ZSB2b2lkIElEQlRyYW5zYWN0aW9uOjp2aXNpdFJlZmVyZW5jZWRPYmpl
Y3RTdG9yZXMoSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJikgY29uc3Q7Cit0ZW1wbGF0ZSB2b2lk
IElEQlRyYW5zYWN0aW9uOjp2aXNpdFJlZmVyZW5jZWRPYmplY3RTdG9yZXMoSlNDOjpTbG90Vmlz
aXRvciYpIGNvbnN0OworCiB2b2lkIElEQlRyYW5zYWN0aW9uOjpoYW5kbGVQZW5kaW5nT3BlcmF0
aW9ucygpCiB7CiAgICAgQVNTRVJUKGNhbkN1cnJlbnRUaHJlYWRBY2Nlc3NUaHJlYWRMb2NhbERh
dGEobV9kYXRhYmFzZS0+b3JpZ2luVGhyZWFkKCkpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb24uaAkocmV2aXNpb24gMjcyODMw
KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb24uaAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIw
MjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0xNDksNyArMTQ5LDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBjb25uZWN0
aW9uQ2xvc2VkRnJvbVNlcnZlcihjb25zdCBJREJFcnJvciYpOwogCi0gICAgdm9pZCB2aXNpdFJl
ZmVyZW5jZWRPYmplY3RTdG9yZXMoSlNDOjpTbG90VmlzaXRvciYpIGNvbnN0OworICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgdmlzaXRSZWZlcmVuY2VkT2JqZWN0U3RvcmVzKFZp
c2l0b3ImKSBjb25zdDsKIAogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBzdGQ6OmF0b21pYzx1
bnNpZ25lZD4gbnVtYmVyT2ZJREJUcmFuc2FjdGlvbnM7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViYXVkaW8vQXVkaW9CdWZmZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9CdWZmZXIuY3BwCShyZXZpc2lvbiAyNzI4MzAp
CisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQnVmZmVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTE1NCwxMiArMTU0LDE2IEBAIEV4Y2VwdGlvbk9yPEpTQzo6SlNWYWx1ZT4gQXVk
aW9CdWZmZXI6OmcKICAgICByZXR1cm4gY29uc3RydWN0SlNBcnJheSgpOwogfQogCi12b2lkIEF1
ZGlvQnVmZmVyOjp2aXNpdENoYW5uZWxXcmFwcGVycyhKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9y
KQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgQXVkaW9CdWZmZXI6OnZpc2l0Q2hh
bm5lbFdyYXBwZXJzKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgZm9yIChhdXRvJiBjaGFubmVs
V3JhcHBlciA6IG1fY2hhbm5lbFdyYXBwZXJzKQogICAgICAgICBjaGFubmVsV3JhcHBlci52aXNp
dCh2aXNpdG9yKTsKIH0KIAordGVtcGxhdGUgdm9pZCBBdWRpb0J1ZmZlcjo6dmlzaXRDaGFubmVs
V3JhcHBlcnMoSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEF1ZGlv
QnVmZmVyOjp2aXNpdENoYW5uZWxXcmFwcGVycyhKU0M6OlNsb3RWaXNpdG9yJik7CisKIFJlZlB0
cjxGbG9hdDMyQXJyYXk+IEF1ZGlvQnVmZmVyOjpjaGFubmVsRGF0YSh1bnNpZ25lZCBjaGFubmVs
SW5kZXgpCiB7CiAgICAgaWYgKGNoYW5uZWxJbmRleCA+PSBtX2NoYW5uZWxzLnNpemUoKSkKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9CdWZmZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQnVmZmVyLmgJKHJl
dmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9C
dWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQg
KEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTc1LDcgKzc1LDcgQEAgcHVibGljOgogCiAgICAgc2l6ZV90
IG1lbW9yeUNvc3QoKSBjb25zdDsKIAotICAgIHZvaWQgdmlzaXRDaGFubmVsV3JhcHBlcnMoSlND
OjpTbG90VmlzaXRvciYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgdmlz
aXRDaGFubmVsV3JhcHBlcnMoVmlzaXRvciYpOwogICAgIAogcHJpdmF0ZToKICAgICBBdWRpb0J1
ZmZlcih1bnNpZ25lZCBudW1iZXJPZkNoYW5uZWxzLCBzaXplX3QgbGVuZ3RoLCBmbG9hdCBzYW1w
bGVSYXRlLCBMZWdhY3lQcmV2ZW50RGV0YWNoaW5nID0gTGVnYWN5UHJldmVudERldGFjaGluZzo6
Tm8pOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvRE9NR0NPdXRwdXRDb25zdHJh
aW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9ET01HQ091
dHB1dENvbnN0cmFpbnQuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9ET01HQ091dHB1dENvbnN0cmFpbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
OSw3ICs0OSw4IEBAIERPTUdDT3V0cHV0Q29uc3RyYWludDo6fkRPTUdDT3V0cHV0Q29uc3QKIHsK
IH0KIAotdm9pZCBET01HQ091dHB1dENvbnN0cmFpbnQ6OmV4ZWN1dGVJbXBsKFNsb3RWaXNpdG9y
JiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgRE9NR0NPdXRwdXRD
b25zdHJhaW50OjpleGVjdXRlSW1wbEltcGwoVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBIZWFw
JiBoZWFwID0gbV92bS5oZWFwOwogICAgIApAQCAtNjAsMTUgKzYxLDE5IEBAIHZvaWQgRE9NR0NP
dXRwdXRDb25zdHJhaW50OjpleGVjdXRlSW1wbCgKICAgICAKICAgICBtX2NsaWVudERhdGEuZm9y
RWFjaE91dHB1dENvbnN0cmFpbnRTcGFjZSgKICAgICAgICAgWyZdIChTdWJzcGFjZSYgc3Vic3Bh
Y2UpIHsKLSAgICAgICAgICAgIGF1dG8gZnVuYyA9IFtdIChTbG90VmlzaXRvciYgdmlzaXRvciwg
SGVhcENlbGwqIGhlYXBDZWxsLCBIZWFwQ2VsbDo6S2luZCkgeworICAgICAgICAgICAgYXV0byBm
dW5jID0gW10gKFZpc2l0b3ImIHZpc2l0b3IsIEhlYXBDZWxsKiBoZWFwQ2VsbCwgSGVhcENlbGw6
OktpbmQpIHsKICAgICAgICAgICAgICAgICBTZXRSb290TWFya1JlYXNvblNjb3BlIHJvb3RTY29w
ZSh2aXNpdG9yLCBSb290TWFya1JlYXNvbjo6RE9NR0NPdXRwdXQpOwogICAgICAgICAgICAgICAg
IEpTQ2VsbCogY2VsbCA9IHN0YXRpY19jYXN0PEpTQ2VsbCo+KGhlYXBDZWxsKTsKICAgICAgICAg
ICAgICAgICBjZWxsLT5tZXRob2RUYWJsZSh2aXNpdG9yLnZtKCkpLT52aXNpdE91dHB1dENvbnN0
cmFpbnRzKGNlbGwsIHZpc2l0b3IpOwogICAgICAgICAgICAgfTsKICAgICAgICAgICAgIAotICAg
ICAgICAgICAgdmlzaXRvci5hZGRQYXJhbGxlbENvbnN0cmFpbnRUYXNrKHN1YnNwYWNlLmZvckVh
Y2hNYXJrZWRDZWxsSW5QYXJhbGxlbChmdW5jKSk7CisgICAgICAgICAgICBSZWZQdHI8U2hhcmVk
VGFzazx2b2lkKFZpc2l0b3ImKT4+IHRhc2sgPSBzdWJzcGFjZS50ZW1wbGF0ZSBmb3JFYWNoTWFy
a2VkQ2VsbEluUGFyYWxsZWw8VmlzaXRvcj4oZnVuYyk7CisgICAgICAgICAgICB2aXNpdG9yLmFk
ZFBhcmFsbGVsQ29uc3RyYWludFRhc2sodGFzayk7CiAgICAgICAgIH0pOwogfQogICAgICAgICAK
K3ZvaWQgRE9NR0NPdXRwdXRDb25zdHJhaW50OjpleGVjdXRlSW1wbChBYnN0cmFjdFNsb3RWaXNp
dG9yJiB2aXNpdG9yKSB7IGV4ZWN1dGVJbXBsSW1wbCh2aXNpdG9yKTsgfQordm9pZCBET01HQ091
dHB1dENvbnN0cmFpbnQ6OmV4ZWN1dGVJbXBsKFNsb3RWaXNpdG9yJiB2aXNpdG9yKSB7IGV4ZWN1
dGVJbXBsSW1wbCh2aXNpdG9yKTsgfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0RPTUdDT3V0cHV0Q29uc3RyYWludC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0RPTUdDT3V0cHV0Q29uc3RyYWlu
dC5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9ET01H
Q091dHB1dENvbnN0cmFpbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTctMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQyLDkgKzQyLDEyIEBAIHB1
YmxpYzoKICAgICB+RE9NR0NPdXRwdXRDb25zdHJhaW50KCk7CiAgICAgCiBwcm90ZWN0ZWQ6Cisg
ICAgdm9pZCBleGVjdXRlSW1wbChKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKSBvdmVycmlkZTsK
ICAgICB2b2lkIGV4ZWN1dGVJbXBsKEpTQzo6U2xvdFZpc2l0b3ImKSBvdmVycmlkZTsKIAogcHJp
dmF0ZToKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIGV4ZWN1dGVJbXBsSW1w
bChWaXNpdG9yJik7CisKICAgICBKU0M6OlZNJiBtX3ZtOwogICAgIEpTVk1DbGllbnREYXRhJiBt
X2NsaWVudERhdGE7CiAgICAgdWludDY0X3QgbV9sYXN0RXhlY3V0aW9uVmVyc2lvbjsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQWJvcnRDb250cm9sbGVyQ3VzdG9tLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Fib3J0Q29udHJvbGxl
ckN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTQWJvcnRDb250cm9sbGVyQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0qIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisqIENvcHlyaWdodCAoQykgMjAxOS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICoKICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjgsOSArMjgsMTIgQEAK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIEpTQWJvcnRDb250cm9sbGVyOjp2aXNpdEFk
ZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlw
ZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNBYm9ydENvbnRyb2xsZXI6OnZpc2l0QWRkaXRpb25hbENo
aWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KCZ3
cmFwcGVkKCkuc2lnbmFsKCkpOwogfQogCitERUZJTkVfVklTSVRfQURESVRJT05BTF9DSElMRFJF
TihKU0Fib3J0Q29udHJvbGxlcik7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQWJvcnRTaWduYWxDdXN0b20uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQWJvcnRTaWduYWxDdXN0b20uY3Bw
CShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Fib3J0
U2lnbmFsQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0qIENv
cHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqIENvcHly
aWdodCAoQykgMjAxOS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICoKICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjgsNyArMjgsNyBAQAogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLWJvb2wgSlNBYm9ydFNpZ25hbE93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVS
b290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIEpTQzo6U2xvdFZp
c2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCitib29sIEpTQWJvcnRTaWduYWxP
d25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3du
PiBoYW5kbGUsIHZvaWQqLCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0
IGNoYXIqKiByZWFzb24pCiB7CiAgICAgYXV0byYgYWJvcnRTaWduYWwgPSBKU0M6OmpzQ2FzdDxK
U0Fib3J0U2lnbmFsKj4oaGFuZGxlLnNsb3QoKS0+YXNDZWxsKCkpLT53cmFwcGVkKCk7CiAgICAg
aWYgKGFib3J0U2lnbmFsLmlzRmlyaW5nRXZlbnRMaXN0ZW5lcnMoKSkgewpJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNBdHRyQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0F0dHJDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI4MzAp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0F0dHJDdXN0b20uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCwg
MjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTMzLDEwICszMywxMyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLXZvaWQgSlNBdHRyOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9y
JiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNBdHRyOjp2aXNp
dEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGlmIChFbGVtZW50
KiBlbGVtZW50ID0gd3JhcHBlZCgpLm93bmVyRWxlbWVudCgpKQogICAgICAgICB2aXNpdG9yLmFk
ZE9wYXF1ZVJvb3Qocm9vdChlbGVtZW50KSk7CiB9CiAKK0RFRklORV9WSVNJVF9BRERJVElPTkFM
X0NISUxEUkVOKEpTQXR0cik7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXVkaW9CdWZmZXJDdXN0b20uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXVkaW9CdWZmZXJDdXN0b20uY3BwCShy
ZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0F1ZGlvQnVm
ZmVyQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDIwLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMSwxMSArMzEsMTQgQEAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKLXZvaWQgSlNBdWRpb0J1ZmZlcjo6dmlz
aXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBl
bmFtZSBWaXNpdG9yPgordm9pZCBKU0F1ZGlvQnVmZmVyOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJl
bihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHdyYXBwZWQoKS52aXNpdENoYW5uZWxXcmFwcGVy
cyh2aXNpdG9yKTsKIH0KIAorREVGSU5FX1ZJU0lUX0FERElUSU9OQUxfQ0hJTERSRU4oSlNBdWRp
b0J1ZmZlcik7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShX
RUJfQVVESU8pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0F1ZGlvVHJhY2tD
dXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXVk
aW9UcmFja0N1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTQXVkaW9UcmFja0N1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzUsMTEgKzM1
LDE0IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCi12b2lk
IEpTQXVkaW9UcmFjazo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0
b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0F1ZGlvVHJhY2s6OnZpc2l0
QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgdmlzaXRvci5hZGRP
cGFxdWVSb290KHJvb3QoJndyYXBwZWQoKSkpOwogfQogCitERUZJTkVfVklTSVRfQURESVRJT05B
TF9DSElMRFJFTihKU0F1ZGlvVHJhY2spOworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNl
bmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNBdWRpb1RyYWNrTGlzdEN1
c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNBdWRp
b1RyYWNrTGlzdEN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTQXVkaW9UcmFja0xpc3RDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAyMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM2
LDExICszNiwxNCBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogdXNpbmcgbmFtZXNwYWNlIEpTQzsK
IAotdm9pZCBKU0F1ZGlvVHJhY2tMaXN0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90Vmlz
aXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTQXVkaW9U
cmFja0xpc3Q6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAg
ICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHJvb3Qod3JhcHBlZCgpLmVsZW1lbnQoKSkpOwogfQog
CitERUZJTkVfVklTSVRfQURESVRJT05BTF9DSElMRFJFTihKU0F1ZGlvVHJhY2tMaXN0KTsKKwog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTQXVkaW9Xb3JrbGV0UHJvY2Vzc29yQ3VzdG9tLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0F1ZGlvV29ya2xldFByb2Nlc3NvckN1c3Rv
bS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
QXVkaW9Xb3JrbGV0UHJvY2Vzc29yQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIwLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMSw3ICszMSw4
IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCi12b2lkIEpT
QXVkaW9Xb3JrbGV0UHJvY2Vzc29yOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRv
ciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTQXVkaW9Xb3Jr
bGV0UHJvY2Vzc29yOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQog
ewogICAgIGF1dG8mIHByb2Nlc3NvciA9IHdyYXBwZWQoKTsKICAgICBwcm9jZXNzb3IuanNJbnB1
dHNXcmFwcGVyKCkudmlzaXQodmlzaXRvcik7CkBAIC0zOSw2ICs0MCw4IEBAIHZvaWQgSlNBdWRp
b1dvcmtsZXRQcm9jZXNzb3I6OnZpc2l0QWRkaXQKICAgICBwcm9jZXNzb3IuanNQYXJhbVZhbHVl
c1dyYXBwZXIoKS52aXNpdCh2aXNpdG9yKTsKIH0KIAorREVGSU5FX1ZJU0lUX0FERElUSU9OQUxf
Q0hJTERSRU4oSlNBdWRpb1dvcmtsZXRQcm9jZXNzb3IpOworCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoV0VCX0FVRElPKQpJbmRleDogU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNDU1NSdWxlQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0NTU1J1bGVDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI4MzApCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NTU1J1bGVDdXN0b20uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTUxLDExICs1MSwxNCBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogdXNpbmcg
bmFtZXNwYWNlIEpTQzsKIAotdm9pZCBKU0NTU1J1bGU6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVu
KFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQg
SlNDU1NSdWxlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewog
ICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChyb290KCZ3cmFwcGVkKCkpKTsKIH0KIAorREVGSU5F
X1ZJU0lUX0FERElUSU9OQUxfQ0hJTERSRU4oSlNDU1NSdWxlKTsKKwogSlNWYWx1ZSB0b0pTTmV3
bHlDcmVhdGVkKEpTR2xvYmFsT2JqZWN0KiwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgUmVmPENTU1J1bGU+JiYgcnVsZSkKIHsKICAgICBzd2l0Y2ggKHJ1bGUtPnR5cGUoKSkgewpJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDU1NSdWxlTGlzdEN1c3RvbS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDU1NSdWxlTGlzdEN1
c3RvbS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTQ1NTUnVsZUxpc3RDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAwOS0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0IHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHQgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM2LDcgKzM2LDcgQEAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKLWJvb2wgSlNDU1NS
dWxlTGlzdE93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6
OlVua25vd24+IGhhbmRsZSwgdm9pZCosIFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFy
KiogcmVhc29uKQorYm9vbCBKU0NTU1J1bGVMaXN0T3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1
ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgQWJzdHJhY3RT
bG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikKIHsKICAgICBKU0NTU1J1
bGVMaXN0KiBqc0NTU1J1bGVMaXN0ID0ganNDYXN0PEpTQ1NTUnVsZUxpc3QqPihoYW5kbGUuc2xv
dCgpLT5hc0NlbGwoKSk7CiAgICAgaWYgKCFqc0NTU1J1bGVMaXN0LT5oYXNDdXN0b21Qcm9wZXJ0
aWVzKGpzQ1NTUnVsZUxpc3QtPnZtKCkpKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNDU1NTdHlsZURlY2xhcmF0aW9uQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NTU1N0eWxlRGVjbGFyYXRpb25DdXN0b20uY3BwCShyZXZp
c2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NTU1N0eWxlRGVj
bGFyYXRpb25DdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAwNy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTEsOSArNTEsMTIgQEAgdm9p
ZCogcm9vdChDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSkKICAgICByZXR1cm4gc3R5bGU7CiB9
CiAKLXZvaWQgSlNDU1NTdHlsZURlY2xhcmF0aW9uOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihT
bG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpT
Q1NTU3R5bGVEZWNsYXJhdGlvbjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlz
aXRvcikKIHsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qocm9vdCgmd3JhcHBlZCgpKSk7CiB9
CiAKK0RFRklORV9WSVNJVF9BRERJVElPTkFMX0NISUxEUkVOKEpTQ1NTU3R5bGVEZWNsYXJhdGlv
bik7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTQ2FsbGJhY2tEYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0NhbGxiYWNrRGF0YS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2FsbGJhY2tEYXRhLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOSwgMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTk1LDEyICs5NSwxNiBAQCBKU1ZhbHVlIEpTQ2FsbGJhY2tEYXRhOjppbnZva2VD
YWxsYmFjayhKCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotdm9pZCBKU0NhbGxiYWNrRGF0YVdl
YWs6OnZpc2l0SlNGdW5jdGlvbihKU0M6OlNsb3RWaXNpdG9yJiB2aXN0b3IpCit0ZW1wbGF0ZTx0
eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0NhbGxiYWNrRGF0YVdlYWs6OnZpc2l0SlNGdW5jdGlv
bihWaXNpdG9yJiB2aXNpdG9yKQogewotICAgIHZpc3Rvci5hcHBlbmQobV9jYWxsYmFjayk7Cisg
ICAgdmlzaXRvci5hcHBlbmQobV9jYWxsYmFjayk7CiB9CiAKLWJvb2wgSlNDYWxsYmFja0RhdGFX
ZWFrOjpXZWFrT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpT
Qzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBj
aGFyKiogcmVhc29uKQordGVtcGxhdGUgdm9pZCBKU0NhbGxiYWNrRGF0YVdlYWs6OnZpc2l0SlNG
dW5jdGlvbihKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNDYWxs
YmFja0RhdGFXZWFrOjp2aXNpdEpTRnVuY3Rpb24oSlNDOjpTbG90VmlzaXRvciYpOworCitib29s
IEpTQ2FsbGJhY2tEYXRhV2Vhazo6V2Vha093bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290
cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0LCBBYnN0cmFjdFNsb3RW
aXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQogewogICAgIGlmIChVTkxJS0VM
WShyZWFzb24pKQogICAgICAgICAqcmVhc29uID0gIkNvbnRleHQgaXMgb3BhcXVlIHJvb3QiOyAv
LyBGSVhNRTogd2hhdCBpcyB0aGUgY29udGV4dC4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTQ2FsbGJhY2tEYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNDYWxsYmFja0RhdGEuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNDYWxsYmFja0RhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOSwgMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAyMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTExMywxMSArMTEzLDExIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIEpTQ2FsbGJhY2tE
YXRhOjppbnZva2VDYWxsYmFjaygqZ2xvYmFsT2JqZWN0LCBjYWxsYmFjaygpLCB0aGlzVmFsdWUs
IGFyZ3MsIGNhbGxiYWNrVHlwZSwgZnVuY3Rpb25OYW1lLCByZXR1cm5lZEV4Y2VwdGlvbik7CiAg
ICAgfQogCi0gICAgdm9pZCB2aXNpdEpTRnVuY3Rpb24oSlNDOjpTbG90VmlzaXRvciYpOworICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgdmlzaXRKU0Z1bmN0aW9uKFZpc2l0b3Im
KTsKIAogcHJpdmF0ZToKICAgICBjbGFzcyBXZWFrT3duZXIgOiBwdWJsaWMgSlNDOjpXZWFrSGFu
ZGxlT3duZXIgewotICAgICAgICBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6
SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6U2xvdFZpc2l0b3ImLCBj
b25zdCBjaGFyKiopIG92ZXJyaWRlOworICAgICAgICBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1
ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6QWJz
dHJhY3RTbG90VmlzaXRvciYsIGNvbnN0IGNoYXIqKikgb3ZlcnJpZGU7CiAgICAgfTsKICAgICBX
ZWFrT3duZXIgbV93ZWFrT3duZXI7CiAgICAgSlNDOjpXZWFrPEpTQzo6SlNPYmplY3Q+IG1fY2Fs
bGJhY2s7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyREN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI4
MzApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyREN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDA2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDA2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yNCw3ICsyNCw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotYm9vbCBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRE93bmVyOjppc1JlYWNoYWJsZUZy
b21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIEpT
Qzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCitib29sIEpTQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJET3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpT
Qzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgSlNDOjpBYnN0cmFjdFNsb3RW
aXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQogewogICAgIGlmIChVTkxJS0VM
WShyZWFzb24pKQogICAgICAgICAqcmVhc29uID0gIkNhbnZhcyBpcyBvcGFxdWUgcm9vdCI7CkBA
IC0zNCw5ICszNCwxMiBAQCBib29sIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJET3duZXI6Omlz
CiAgICAgcmV0dXJuIHZpc2l0b3IuY29udGFpbnNPcGFxdWVSb290KHJvb3QpOwogfQogCi12b2lk
IEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6
OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQg
SlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0
b3ImIHZpc2l0b3IpCiB7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHJvb3Qod3JhcHBlZCgp
LmNhbnZhcygpKSk7CiB9CiAKK0RFRklORV9WSVNJVF9BRERJVElPTkFMX0NISUxEUkVOKEpTQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEKTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDog
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDdXN0b21FdmVudEN1c3RvbS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDdXN0b21FdmVudEN1c3RvbS5j
cHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3Vz
dG9tRXZlbnRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxNS0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDIsMTAgKzQyLDEzIEBAIEpT
Qzo6SlNWYWx1ZSBKU0N1c3RvbUV2ZW50OjpkZXRhaWwoSlNDOjoKICAgICB9KTsKIH0KIAotdm9p
ZCBKU0N1c3RvbUV2ZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9y
JiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNDdXN0b21FdmVu
dDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB3cmFw
cGVkKCkuZGV0YWlsKCkudmlzaXQodmlzaXRvcik7CiAgICAgd3JhcHBlZCgpLmNhY2hlZERldGFp
bCgpLnZpc2l0KHZpc2l0b3IpOwogfQogCitERUZJTkVfVklTSVRfQURESVRJT05BTF9DSElMRFJF
TihKU0N1c3RvbUV2ZW50KTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CdWlsdGluQ29uc3RydWN0b3JCYXNlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJ1aWx0aW5Db25zdHJ1
Y3RvckJhc2UuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0RPTUJ1aWx0aW5Db25zdHJ1Y3RvckJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDYgKzEsNiBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMSBIYXJyaSBQb3J0ZW4g
KHBvcnRlbkBrZGUub3JnKQotICogIENvcHlyaWdodCAoQykgMjAwNC0yMDE3IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDQtMjAyMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA3IFNhbXVlbCBX
ZWluaWcgPHNhbUB3ZWJraXQub3JnPgogICogIENvcHlyaWdodCAoQykgMjAxMyBNaWNoYWVsIFBy
dWV0dCA8bWljaGFlbEA2OGsub3JnPgogICoKQEAgLTQ1LDcgKzQ1LDggQEAgdm9pZCBKU0RPTUJ1
aWx0aW5Db25zdHJ1Y3RvckJhc2U6OmNhbGxGdQogICAgIEpTQzo6Y2FsbCgmbGV4aWNhbEdsb2Jh
bE9iamVjdCwgJmZ1bmN0aW9uLCBjYWxsRGF0YSwgJnRoaXNPYmplY3QsIGFyZ3VtZW50cyk7CiB9
CiAKLXZvaWQgSlNET01CdWlsdGluQ29uc3RydWN0b3JCYXNlOjp2aXNpdENoaWxkcmVuKEpTQzo6
SlNDZWxsKiBjZWxsLCBKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5h
bWUgVmlzaXRvcj4KK3ZvaWQgSlNET01CdWlsdGluQ29uc3RydWN0b3JCYXNlOjp2aXNpdENoaWxk
cmVuSW1wbChKU0M6OkpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBhdXRv
KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTRE9NQnVpbHRpbkNvbnN0cnVjdG9yQmFzZSo+KGNlbGwp
OwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAg
LTUzLDYgKzU0LDggQEAgdm9pZCBKU0RPTUJ1aWx0aW5Db25zdHJ1Y3RvckJhc2U6OnZpc2l0Qwog
ICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1faW5pdGlhbGl6ZUZ1bmN0aW9uKTsKIH0K
IAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTRE9NQnVpbHRpbkNvbnN0cnVjdG9yQmFzZSk7CisK
IEpTQzo6SXNvU3Vic3BhY2UqIEpTRE9NQnVpbHRpbkNvbnN0cnVjdG9yQmFzZTo6c3Vic3BhY2VG
b3JJbXBsKEpTQzo6Vk0mIHZtKQogewogICAgIHJldHVybiAmc3RhdGljX2Nhc3Q8SlNWTUNsaWVu
dERhdGEqPih2bS5jbGllbnREYXRhKS0+ZG9tQnVpbHRpbkNvbnN0cnVjdG9yU3BhY2UoKTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQnVpbHRpbkNvbnN0cnVjdG9yQmFz
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQnVpbHRp
bkNvbnN0cnVjdG9yQmFzZS5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0RPTUJ1aWx0aW5Db25zdHJ1Y3RvckJhc2UuaAkod29ya2luZyBjb3B5KQpA
QCAtMSw2ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAyMDE1LCAyMDE2IENhbm9uIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqICBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAxNi0yMDIxIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKQEAgLTQyLDcg
KzQyLDcgQEAgcHJvdGVjdGVkOgogICAgIHsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNp
dENoaWxkcmVuKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVf
VklTSVRfQ0hJTERSRU47CiAKICAgICBKU0M6OkpTRnVuY3Rpb24qIGluaXRpYWxpemVGdW5jdGlv
bigpOwogICAgIHZvaWQgc2V0SW5pdGlhbGl6ZUZ1bmN0aW9uKEpTQzo6Vk0mLCBKU0M6OkpTRnVu
Y3Rpb24mKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2Jq
ZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUds
b2JhbE9iamVjdC5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMg
UmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAyMSBBcHBsZSBJbmMuIEFsbCBSaWdo
dHMgUmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTIzOCw3ICsy
MzgsOCBAQCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBKU0RPTUdsb2JhbE9iamVjCiAgICAgcmV0
dXJuIG51bGxwdHI7CiB9CiAKLXZvaWQgSlNET01HbG9iYWxPYmplY3Q6OnZpc2l0Q2hpbGRyZW4o
SlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZp
c2l0b3I+Cit2b2lkIEpTRE9NR2xvYmFsT2JqZWN0Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwq
IGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNET01HbG9iYWxPYmplY3QqIHRoaXNP
YmplY3QgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihjZWxsKTsKICAgICBBU1NFUlRfR0Nf
T0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC0yNjAsNiArMjYxLDggQEAg
dm9pZCBKU0RPTUdsb2JhbE9iamVjdDo6dmlzaXRDaGlsZHJlbihKUwogICAgIHRoaXNPYmplY3Qt
Pm1fYnVpbHRpbkludGVybmFsRnVuY3Rpb25zLnZpc2l0KHZpc2l0b3IpOwogfQogCitERUZJTkVf
VklTSVRfQ0hJTERSRU4oSlNET01HbG9iYWxPYmplY3QpOworCiB2b2lkIEpTRE9NR2xvYmFsT2Jq
ZWN0Ojpwcm9taXNlUmVqZWN0aW9uVHJhY2tlcihKU0dsb2JhbE9iamVjdCoganNHbG9iYWxPYmpl
Y3QsIEpTUHJvbWlzZSogcHJvbWlzZSwgSlNQcm9taXNlUmVqZWN0aW9uT3BlcmF0aW9uIG9wZXJh
dGlvbikKIHsKICAgICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS93
ZWJhcHBhcGlzLmh0bWwjdGhlLWhvc3Rwcm9taXNlcmVqZWN0aW9udHJhY2tlci1pbXBsZW1lbnRh
dGlvbgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01HbG9iYWxPYmplY3Qu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9i
amVjdC5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0RPTUdsb2JhbE9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAwOC0yMDE4IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDIxIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjksNyArNjksNyBAQCBwdWJs
aWM6CiAgICAgLy8gTWFrZSBiaW5kaW5nIGNvZGUgZ2VuZXJhdGlvbiBlYXNpZXIuCiAgICAgSlNE
T01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCgpIHsgcmV0dXJuIHRoaXM7IH0KIAotICAgIHN0
YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJik7
CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIERPTVdyYXBwZXJXb3JsZCYgd29y
bGQoKSB7IHJldHVybiBtX3dvcmxkLmdldCgpOyB9CiAgICAgYm9vbCB3b3JsZElzTm9ybWFsKCkg
Y29uc3QgeyByZXR1cm4gbV93b3JsZElzTm9ybWFsOyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0RPTUd1YXJkZWRPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0RPTUd1YXJkZWRPYmplY3QuaAkocmV2aXNpb24gMjcyODMwKQor
KysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01HdWFyZGVkT2JqZWN0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtNDAsNyArNDAsNyBAQCBwdWJsaWM6CiAKICAgICBib29sIGlzU3VzcGVuZGVkKCkg
Y29uc3QgeyByZXR1cm4gIW1fZ3VhcmRlZCB8fCAhY2FuSW52b2tlQ2FsbGJhY2soKTsgfSAvLyBU
aGUgd3JhcHBlciB3b3JsZCBoYXMgZ29uZSBhd2F5IG9yIGFjdGl2ZSBET00gb2JqZWN0cyBoYXZl
IGJlZW4gc3VzcGVuZGVkLgogCi0gICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShKU0M6OlNsb3RWaXNp
dG9yJiB2aXNpdG9yKSB7IHZpc2l0b3IuYXBwZW5kKG1fZ3VhcmRlZCk7IH0KKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIHZpc2l0QWdncmVnYXRlKFZpc2l0b3ImIHZpc2l0b3Ip
IHsgdmlzaXRvci5hcHBlbmQobV9ndWFyZGVkKTsgfQogCiAgICAgSlNDOjpKU1ZhbHVlIGd1YXJk
ZWRPYmplY3QoKSBjb25zdCB7IHJldHVybiBtX2d1YXJkZWQuZ2V0KCk7IH0KICAgICBKU0RPTUds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KCkgY29uc3QgeyByZXR1cm4gbV9nbG9iYWxPYmplY3Qu
Z2V0KCk7IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NUXVhZEN1c3Rv
bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01RdWFk
Q3VzdG9tLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNET01RdWFkQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMyw3ICszMyw4IEBACiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCi12b2lkIEpTRE9NUXVhZDo6
dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0
eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0RPTVF1YWQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVu
KFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KGNvbnN0X2Nh
c3Q8RE9NUG9pbnQqPigmd3JhcHBlZCgpLnAxKCkpKTsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJv
b3QoY29uc3RfY2FzdDxET01Qb2ludCo+KCZ3cmFwcGVkKCkucDIoKSkpOwpAQCAtNDEsNCArNDIs
NiBAQCB2b2lkIEpTRE9NUXVhZDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oCiAgICAgdmlzaXRv
ci5hZGRPcGFxdWVSb290KGNvbnN0X2Nhc3Q8RE9NUG9pbnQqPigmd3JhcHBlZCgpLnA0KCkpKTsK
IH0KIAotfQorREVGSU5FX1ZJU0lUX0FERElUSU9OQUxfQ0hJTERSRU4oSlNET01RdWFkKTsKKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNET01XaW5kb3dDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTRE9NV2luZG93Q3VzdG9tLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNy0yMDIwIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDIxIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTExNiw3ICsxMTYsOCBA
QCBKU0NfREVGSU5FX0NVU1RPTV9HRVRURVIoanNET01XaW5kb3dJbnN0CiAgICAgcmV0dXJuIG5v
bkNhY2hpbmdTdGF0aWNGdW5jdGlvbkdldHRlckltcGw8anNET01XaW5kb3dJbnN0YW5jZUZ1bmN0
aW9uX3Bvc3RNZXNzYWdlLCAyPihnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSk7CiB9CiAKLXZv
aWQgSlNET01XaW5kb3c6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNp
dG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNET01XaW5kb3c6OnZpc2l0
QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgaWYgKEZyYW1lKiBm
cmFtZSA9IHdyYXBwZWQoKS5mcmFtZSgpKQogICAgICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qo
ZnJhbWUpOwpAQCAtMTI5LDYgKzEzMCw4IEBAIHZvaWQgSlNET01XaW5kb3c6OnZpc2l0QWRkaXRp
b25hbENoaWxkcmUKICAgICB3cmFwcGVkKCkudmlzaXRKU0V2ZW50TGlzdGVuZXJzKHZpc2l0b3Ip
OwogfQogCitERUZJTkVfVklTSVRfQURESVRJT05BTF9DSElMRFJFTihKU0RPTVdpbmRvdyk7CisK
ICNpZiBFTkFCTEUoVVNFUl9NRVNTQUdFX0hBTkRMRVJTKQogSlNDX0RFRklORV9DVVNUT01fR0VU
VEVSKGpzRE9NV2luZG93X3dlYmtpdCwgKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkpCiB7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RlcHJlY2F0ZWRDU1NPTVZhbHVlQ3VzdG9tLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RlcHJlY2F0ZWRD
U1NPTVZhbHVlQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNEZXByZWNhdGVkQ1NTT01WYWx1ZUN1c3RvbS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMTkgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0zNSw3ICszNSw3IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3Bh
Y2UgSlNDOwogCi1ib29sIEpTRGVwcmVjYXRlZENTU09NVmFsdWVPd25lcjo6aXNSZWFjaGFibGVG
cm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBT
bG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikKK2Jvb2wgSlNEZXByZWNh
dGVkQ1NTT01WYWx1ZU93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRs
ZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0
b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCiB7CiAgICAgSlNEZXByZWNhdGVkQ1NTT01WYWx1ZSog
anNDU1NWYWx1ZSA9IGpzQ2FzdDxKU0RlcHJlY2F0ZWRDU1NPTVZhbHVlKj4oaGFuZGxlLnNsb3Qo
KS0+YXNDZWxsKCkpOwogICAgIGlmICghanNDU1NWYWx1ZS0+aGFzQ3VzdG9tUHJvcGVydGllcyhq
c0NTU1ZhbHVlLT52bSgpKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRG9j
dW1lbnRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTRG9jdW1lbnRDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0RvY3VtZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOSwgMjAxMSwgMjAxNiwgMjAx
NyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDct
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
QEAgLTkxLDExICs5MSwxNCBAQCBKU1ZhbHVlIHRvSlMoSlNHbG9iYWxPYmplY3QqIGxleGljYWxH
bG9iCiAgICAgcmV0dXJuIHRvSlNOZXdseUNyZWF0ZWQobGV4aWNhbEdsb2JhbE9iamVjdCwgZ2xv
YmFsT2JqZWN0LCBSZWY8RG9jdW1lbnQ+KGRvY3VtZW50KSk7CiB9CiAKLXZvaWQgSlNEb2N1bWVu
dDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0
ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0RvY3VtZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGls
ZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChzdGF0
aWNfY2FzdDxTY3JpcHRFeGVjdXRpb25Db250ZXh0Kj4oJndyYXBwZWQoKSkpOwogfQogCitERUZJ
TkVfVklTSVRfQURESVRJT05BTF9DSElMRFJFTihKU0RvY3VtZW50KTsKKwogdm9pZCBKU0RvY3Vt
ZW50OjphbmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCiB7
CiAgICAgQmFzZTo6YW5hbHl6ZUhlYXAoY2VsbCwgYW5hbHl6ZXIpOwpJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNFcnJvckV2ZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Vycm9yRXZlbnRDdXN0b20uY3BwCShyZXZpc2lv
biAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Vycm9yRXZlbnRDdXN0
b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAo
QykgMjAxOCBZdXN1a2UgU3V6dWtpIDx5dXN1a2VzdXp1a2lAc2xvd3N0YXJ0Lm9yZz4uCisgKiBD
b3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOCw5ICsyOSwxMiBAQAogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLXZvaWQgSlNFcnJvckV2ZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihK
U0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3Zv
aWQgSlNFcnJvckV2ZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9y
KQogewogICAgIHdyYXBwZWQoKS5vcmlnaW5hbEVycm9yKCkudmlzaXQodmlzaXRvcik7CiB9CiAK
K0RFRklORV9WSVNJVF9BRERJVElPTkFMX0NISUxEUkVOKEpTRXJyb3JFdmVudCk7CisKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZl
bnRMaXN0ZW5lci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNFdmVudExpc3RlbmVyLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNFdmVudExpc3RlbmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsx
LDYgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAyMDAxIFBldGVyIEtlbGx5IChwbWtAcG9zdC5j
b20pCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMTkgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJl
c2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwMy0yMDIxIEFwcGxlIEluYy4gQWxsIFJpZ2h0
cyBSZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKQEAgLTc4LDcgKzc4LDggQEAgSlNPYmpl
Y3QqIEpTRXZlbnRMaXN0ZW5lcjo6aW5pdGlhbGl6ZUpTRgogICAgIHJldHVybiBudWxscHRyOwog
fQogCi12b2lkIEpTRXZlbnRMaXN0ZW5lcjo6dmlzaXRKU0Z1bmN0aW9uKFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK2lubGluZSB2b2lkIEpTRXZlbnRM
aXN0ZW5lcjo6dmlzaXRKU0Z1bmN0aW9uSW1wbChWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIC8v
IElmIG1fd3JhcHBlciBpcyBudWxsLCB3ZSBhcmUgbm90IGtlZXBpbmcgbV9qc0Z1bmN0aW9uIGFs
aXZlLgogICAgIGlmICghbV93cmFwcGVyKQpAQCAtODcsNiArODgsOSBAQCB2b2lkIEpTRXZlbnRM
aXN0ZW5lcjo6dmlzaXRKU0Z1bmN0aW9uKFNsCiAgICAgdmlzaXRvci5hcHBlbmQobV9qc0Z1bmN0
aW9uKTsKIH0KIAordm9pZCBKU0V2ZW50TGlzdGVuZXI6OnZpc2l0SlNGdW5jdGlvbihBYnN0cmFj
dFNsb3RWaXNpdG9yJiB2aXNpdG9yKSB7IHZpc2l0SlNGdW5jdGlvbkltcGwodmlzaXRvcik7IH0K
K3ZvaWQgSlNFdmVudExpc3RlbmVyOjp2aXNpdEpTRnVuY3Rpb24oU2xvdFZpc2l0b3ImIHZpc2l0
b3IpIHsgdmlzaXRKU0Z1bmN0aW9uSW1wbCh2aXNpdG9yKTsgfQorCiBzdGF0aWMgdm9pZCBoYW5k
bGVCZWZvcmVVbmxvYWRFdmVudFJldHVyblZhbHVlKEJlZm9yZVVubG9hZEV2ZW50JiBldmVudCwg
Y29uc3QgU3RyaW5nJiByZXR1cm5WYWx1ZSkKIHsKICAgICBpZiAocmV0dXJuVmFsdWUuaXNOdWxs
KCkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50TGlzdGVuZXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50TGlzdGVuZXIu
aAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVu
dExpc3RlbmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogIENvcHly
aWdodCAoQykgMjAwMSBQZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQotICogIENvcHlyaWdodCAo
QykgMjAwMy0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmln
aHQgKEMpIDIwMDMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdl
bmVyYWwgUHVibGljCkBAIC02Miw2ICs2Miw5IEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICB2
aXJ0dWFsIEpTQzo6SlNPYmplY3QqIGluaXRpYWxpemVKU0Z1bmN0aW9uKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQmKSBjb25zdDsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQg
dmlzaXRKU0Z1bmN0aW9uSW1wbChWaXNpdG9yJik7CisgICAgdm9pZCB2aXNpdEpTRnVuY3Rpb24o
SlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJikgZmluYWw7CiAgICAgdm9pZCB2aXNpdEpTRnVuY3Rp
b24oSlNDOjpTbG90VmlzaXRvciYpIGZpbmFsOwogCiBwcm90ZWN0ZWQ6CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50VGFyZ2V0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50VGFyZ2V0Q3VzdG9tLmNwcAkocmV2
aXNpb24gMjcyODMwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudFRhcmdl
dEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDA4LTIwMTcgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDA4LTIwMjEgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03Miw5ICs3MiwxMiBAQCBzdGQ6OnVuaXF1
ZV9wdHI8SlNFdmVudFRhcmdldFdyYXBwZXI+IGpzCiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAK
LXZvaWQgSlNFdmVudFRhcmdldDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3Im
IHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0V2ZW50VGFyZ2V0
Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHdyYXBw
ZWQoKS52aXNpdEpTRXZlbnRMaXN0ZW5lcnModmlzaXRvcik7CiB9CiAKK0RFRklORV9WSVNJVF9B
RERJVElPTkFMX0NISUxEUkVOKEpTRXZlbnRUYXJnZXQpOworCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0ZldGNoRXZlbnRDdXN0b20u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRmV0Y2hFdmVu
dEN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTRmV0Y2hFdmVudEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzAsMTEgKzMwLDE0IEBA
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBKU0ZldGNoRXZlbnQ6OnZpc2l0QWRkaXRp
b25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBWaXNpdG9yPgordm9pZCBKU0ZldGNoRXZlbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZp
c2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KCZ3cmFwcGVkKCku
cmVxdWVzdCgpKTsKIH0KIAotfQorREVGSU5FX1ZJU0lUX0FERElUSU9OQUxfQ0hJTERSRU4oSlNG
ZXRjaEV2ZW50KTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTENhbnZhc0VsZW1lbnRDdXN0b20uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTENhbnZhc0VsZW1l
bnRDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0hUTUxDYW52YXNFbGVtZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIwLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMSw5ICsz
MSwxMiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgSlNIVE1MQ2FudmFzRWxlbWVu
dDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3Rl
bXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTSFRNTENhbnZhc0VsZW1lbnQ6OnZpc2l0
QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgdmlzaXRvci5hZGRP
cGFxdWVSb290KHN0YXRpY19jYXN0PENhbnZhc0Jhc2UqPigmd3JhcHBlZCgpKSk7CiB9CiAKK0RF
RklORV9WSVNJVF9BRERJVElPTkFMX0NISUxEUkVOKEpTSFRNTENhbnZhc0VsZW1lbnQpOworCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0hUTUxUZW1wbGF0ZUVsZW1lbnRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTSFRNTFRlbXBsYXRlRWxlbWVudEN1c3RvbS5jcHAJKHJldmlzaW9u
IDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTFRlbXBsYXRlRWxl
bWVudEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29w
eXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQpAQCAtMzcsMTAgKzM4LDEzIEBACiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCi12b2lkIEpTSFRNTFRlbXBsYXRlRWxl
bWVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikK
K3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTSFRNTFRlbXBsYXRlRWxlbWVudDo6
dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBpZiAoYXV0
byogY29udGVudCA9IHdyYXBwZWQoKS5jb250ZW50SWZBdmFpbGFibGUoKSkKICAgICAgICAgdmlz
aXRvci5hZGRPcGFxdWVSb290KHJvb3QoY29udGVudCkpOwogfQogCitERUZJTkVfVklTSVRfQURE
SVRJT05BTF9DSElMRFJFTihKU0hUTUxUZW1wbGF0ZUVsZW1lbnQpOworCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hpc3RvcnlDdXN0
b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSGlzdG9y
eUN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTSGlzdG9yeUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00NCw5ICs0NCwxMiBA
QCBKU1ZhbHVlIEpTSGlzdG9yeTo6c3RhdGUoSlNHbG9iYWxPYmplY3QmCiAgICAgfSk7CiB9CiAK
LXZvaWQgSlNIaXN0b3J5Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlz
aXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTSGlzdG9yeTo6dmlzaXRB
ZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB3cmFwcGVkKCkuY2Fj
aGVkU3RhdGVGb3JHQygpLnZpc2l0KHZpc2l0b3IpOwogfQogCitERUZJTkVfVklTSVRfQURESVRJ
T05BTF9DSElMRFJFTihKU0hpc3RvcnkpOworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQkN1cnNvckN1c3RvbS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJDdXJzb3JDdXN0b20uY3Bw
CShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQkN1
cnNvckN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTAsNyArNTAsOCBAQCBKU0M6OkpTVmFsdWUg
SlNJREJDdXJzb3I6OnByaW1hcnlLZXkoSlNDCiAgICAgfSk7CiB9CiAKLXZvaWQgSlNJREJDdXJz
b3I6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxh
dGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNJREJDdXJzb3I6OnZpc2l0QWRkaXRpb25hbENo
aWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0byYgY3Vyc29yID0gd3JhcHBlZCgp
OwogICAgIGlmIChhdXRvKiByZXF1ZXN0ID0gY3Vyc29yLnJlcXVlc3QoKSkKQEAgLTU5LDYgKzYw
LDggQEAgdm9pZCBKU0lEQkN1cnNvcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZQogICAgIGN1cnNv
ci5wcmltYXJ5S2V5V3JhcHBlcigpLnZpc2l0KHZpc2l0b3IpOwogfQogCitERUZJTkVfVklTSVRf
QURESVRJT05BTF9DSElMRFJFTihKU0lEQkN1cnNvcik7CisKIEpTVmFsdWUgdG9KU05ld2x5Q3Jl
YXRlZChKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgUmVmPElEQkN1cnNvcj4mJiBjdXJzb3IpCiB7CiAgICAgaWYgKGlzPElEQkN1cnNvcldpdGhW
YWx1ZT4oY3Vyc29yKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCQ3Vy
c29yV2l0aFZhbHVlQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0lEQkN1cnNvcldpdGhWYWx1ZUN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjgzMCkK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCQ3Vyc29yV2l0aFZhbHVlQ3VzdG9t
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC00MywxMiArNDMsMTUgQEAgSlNDOjpKU1ZhbHVlIEpTSURCQ3Vy
c29yV2l0aFZhbHVlOjp2YWx1ZQogICAgIH0pOwogfQogCi12b2lkIEpTSURCQ3Vyc29yV2l0aFZh
bHVlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBs
YXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTSURCQ3Vyc29yV2l0aFZhbHVlOjp2aXNpdEFk
ZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTSURCQ3Vyc29yOjp2
aXNpdEFkZGl0aW9uYWxDaGlsZHJlbih2aXNpdG9yKTsKICAgICB3cmFwcGVkKCkudmFsdWVXcmFw
cGVyKCkudmlzaXQodmlzaXRvcik7CiB9CiAKK0RFRklORV9WSVNJVF9BRERJVElPTkFMX0NISUxE
UkVOKEpTSURCQ3Vyc29yV2l0aFZhbHVlKTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAj
ZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0lEQkluZGV4Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0lEQkluZGV4Q3VzdG9tLmNwcAkocmV2aXNpb24gMjcyODMwKQor
KysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJJbmRleEN1c3RvbS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMzQsMTEgKzM0LDE0IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1l
c3BhY2UgSlNDOwogCi12b2lkIEpTSURCSW5kZXg6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNJ
REJJbmRleDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAg
ICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qoc3RhdGljX2Nhc3Q8SURCSW5kZXgmPih3cmFwcGVkKCkp
Lm9iamVjdFN0b3JlQXNPcGFxdWVSb290KCkpOwogfQogCitERUZJTkVfVklTSVRfQURESVRJT05B
TF9DSElMRFJFTihKU0lEQkluZGV4KTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5k
aWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0lEQk9iamVjdFN0b3JlQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQk9iamVjdFN0b3JlQ3VzdG9tLmNwcAkocmV2aXNpb24g
MjcyODMwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJPYmplY3RTdG9yZUN1
c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0
IChDKSAyMDEyIE1pY2hhZWwgUHJ1ZXR0IDxtaWNoYWVsQDY4ay5vcmc+CisgKiBDb3B5cmlnaHQg
KEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zIGFyZQpAQCAtMzYsMTEgKzM3LDE0IEBACiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCi12b2lkIEpTSURCT2JqZWN0U3RvcmU6OnZpc2l0
QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5h
bWUgVmlzaXRvcj4KK3ZvaWQgSlNJREJPYmplY3RTdG9yZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRy
ZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBzdGF0aWNfY2FzdDxJREJPYmplY3RTdG9yZSY+
KHdyYXBwZWQoKSkudmlzaXRSZWZlcmVuY2VkSW5kZXhlcyh2aXNpdG9yKTsKIH0KIAotfQorREVG
SU5FX1ZJU0lUX0FERElUSU9OQUxfQ0hJTERSRU4oSlNJREJPYmplY3RTdG9yZSk7CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0lEQlJlcXVlc3RDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTSURCUmVxdWVzdEN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCUmVxdWVzdEN1c3RvbS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOS0yMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtODksMTIgKzg5LDE2IEBAIEpTQzo6SlNWYWx1ZSBKU0lEQlJlcXVlc3Q6OnJlc3Vs
dChKU0M6OkoKICAgICB9KTsKIH0KIAotdm9pZCBKU0lEQlJlcXVlc3Q6OnZpc2l0QWRkaXRpb25h
bENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRv
cj4KK3ZvaWQgSlNJREJSZXF1ZXN0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2
aXNpdG9yKQogewogICAgIGF1dG8mIHJlcXVlc3QgPSB3cmFwcGVkKCk7CiAgICAgcmVxdWVzdC5y
ZXN1bHRXcmFwcGVyKCkudmlzaXQodmlzaXRvcik7CiAgICAgcmVxdWVzdC5jdXJzb3JXcmFwcGVy
KCkudmlzaXQodmlzaXRvcik7CiB9CiAKLX0KK0RFRklORV9WSVNJVF9BRERJVElPTkFMX0NISUxE
UkVOKEpTSURCUmVxdWVzdCk7CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwogI2VuZGlmIC8v
IEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNJREJUcmFuc2FjdGlvbkN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNJREJUcmFuc2FjdGlvbkN1c3RvbS5jcHAJKHJldmlzaW9uIDI3Mjgz
MCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCVHJhbnNhY3Rpb25DdXN0b20u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTM0LDExICszNCwxNCBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewog
dXNpbmcgbmFtZXNwYWNlIEpTQzsKIAotdm9pZCBKU0lEQlRyYW5zYWN0aW9uOjp2aXNpdEFkZGl0
aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZp
c2l0b3I+Cit2b2lkIEpTSURCVHJhbnNhY3Rpb246OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZp
c2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgc3RhdGljX2Nhc3Q8SURCVHJhbnNhY3Rpb24mPih3cmFw
cGVkKCkpLnZpc2l0UmVmZXJlbmNlZE9iamVjdFN0b3Jlcyh2aXNpdG9yKTsKIH0KIAotfQorREVG
SU5FX1ZJU0lUX0FERElUSU9OQUxfQ0hJTERSRU4oSlNJREJUcmFuc2FjdGlvbik7CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0ludGVyc2VjdGlvbk9ic2VydmVyQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0ludGVyc2VjdGlvbk9ic2VydmVyQ3VzdG9tLmNwcAko
cmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJbnRlcnNl
Y3Rpb25PYnNlcnZlckN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAv
KgogICogQ29weXJpZ2h0IChDKSAyMDIwIElnYWxpYSBTLkwuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0zMCwxMCArMzEsMTMgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12
b2lkIEpTSW50ZXJzZWN0aW9uT2JzZXJ2ZXI6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBK
U0ludGVyc2VjdGlvbk9ic2VydmVyOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2
aXNpdG9yKQogewogICAgIGlmIChhdXRvKiBjYWxsYmFjayA9IHdyYXBwZWQoKS5jYWxsYmFja0Nv
bmN1cnJlbnRseSgpKQogICAgICAgICBjYWxsYmFjay0+dmlzaXRKU0Z1bmN0aW9uKHZpc2l0b3Ip
OwogfQogCi19CitERUZJTkVfVklTSVRfQURESVRJT05BTF9DSElMRFJFTihKU0ludGVyc2VjdGlv
bk9ic2VydmVyKTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNJbnRlcnNlY3Rpb25PYnNlcnZlckVudHJ5Q3VzdG9tLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0ludGVyc2VjdGlvbk9ic2Vy
dmVyRW50cnlDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0ludGVyc2VjdGlvbk9ic2VydmVyRW50cnlDdXN0b20uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxOCBHb29nbGUg
TExDLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtMzAsNyArMzEsOCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgSlNJbnRlcnNl
Y3Rpb25PYnNlcnZlckVudHJ5Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNp
dG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNJbnRlcnNl
Y3Rpb25PYnNlcnZlckVudHJ5Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNp
dG9yKQogewogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChyb290KHdyYXBwZWQoKS50YXJnZXQo
KSkpOwogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdCh3cmFwcGVkKCkuYm91bmRpbmdDbGllbnRS
ZWN0KCkpOwpAQCAtMzgsNCArNDAsNiBAQCB2b2lkIEpTSW50ZXJzZWN0aW9uT2JzZXJ2ZXJFbnRy
eTo6dmlzaXRBCiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHdyYXBwZWQoKS5yb290Qm91bmRz
KCkpOwogfQogCi19CitERUZJTkVfVklTSVRfQURESVRJT05BTF9DSElMRFJFTihKU0ludGVyc2Vj
dGlvbk9ic2VydmVyRW50cnkpOworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01lc3NhZ2VDaGFubmVsQ3VzdG9tLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01lc3NhZ2VDaGFubmVsQ3VzdG9t
LmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNN
ZXNzYWdlQ2hhbm5lbEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDIxIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBS
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzMsNyArMzMsOCBA
QAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgSlNNZXNzYWdlQ2hhbm5lbDo6dmlzaXRB
ZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5
cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTTWVzc2FnZUNoYW5uZWw6OnZpc2l0QWRkaXRpb25hbENo
aWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgaWYgKE1lc3NhZ2VQb3J0KiBwb3J0ID0g
d3JhcHBlZCgpLnBvcnQxKCkpCiAgICAgICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChwb3J0KTsK
QEAgLTQyLDYgKzQzLDggQEAgdm9pZCBKU01lc3NhZ2VDaGFubmVsOjp2aXNpdEFkZGl0aW9uYWxD
aAogICAgICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QocG9ydCk7CiB9CiAKK0RFRklORV9WSVNJ
VF9BRERJVElPTkFMX0NISUxEUkVOKEpTTWVzc2FnZUNoYW5uZWwpOworCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoQ0hBTk5FTF9NRVNTQUdJTkcpCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01lc3NhZ2VFdmVudEN1c3RvbS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNZXNzYWdlRXZlbnRDdXN0b20u
Y3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01l
c3NhZ2VFdmVudEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgog
ICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCkBAIC03MCw3ICs3MCw4IEBA
IEpTQzo6SlNWYWx1ZSBKU01lc3NhZ2VFdmVudDo6ZGF0YShKU0M6OkoKICAgICB9KTsKIH0KIAot
dm9pZCBKU01lc3NhZ2VFdmVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90Vmlz
aXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTTWVzc2Fn
ZUV2ZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAg
IFdURjo6c3dpdGNoT24od3JhcHBlZCgpLmRhdGEoKSwgWyZ2aXNpdG9yXSAoY29uc3QgSlNWYWx1
ZUluV3JhcHBlZE9iamVjdCYgZGF0YSkgewogICAgICAgICBkYXRhLnZpc2l0KHZpc2l0b3IpOwpA
QCAtODQsNCArODUsNiBAQCB2b2lkIEpTTWVzc2FnZUV2ZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGls
CiAgICAgd3JhcHBlZCgpLmNhY2hlZFBvcnRzKCkudmlzaXQodmlzaXRvcik7CiB9CiAKK0RFRklO
RV9WSVNJVF9BRERJVElPTkFMX0NISUxEUkVOKEpTTWVzc2FnZUV2ZW50KTsKKwogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNZXNzYWdl
UG9ydEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNNZXNzYWdlUG9ydEN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTTWVzc2FnZVBvcnRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOC0yMDA5LCAyMDE2IEFwcGxl
IEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDIxIEFw
cGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAxMSBHb29n
bGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMzEsMTEg
KzMxLDE0IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCi12
b2lkIEpTTWVzc2FnZVBvcnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNNZXNzYWdlUG9ydDo6
dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICAvLyBJZiB3
ZSBoYXZlIGEgbG9jYWxseSBlbnRhbmdsZWQgcG9ydCwgd2UgY2FuIGRpcmVjdGx5IG1hcmsgaXQg
YXMgcmVhY2hhYmxlLiBQb3J0cyB0aGF0IGFyZSByZW1vdGVseSBlbnRhbmdsZWQgYXJlIG1hcmtl
ZCBpbi11c2UgYnkgbWFya0FjdGl2ZU9iamVjdHNGb3JDb250ZXh0KCkuCiAgICAgaWYgKE1lc3Nh
Z2VQb3J0KiBwb3J0ID0gd3JhcHBlZCgpLmxvY2FsbHlFbnRhbmdsZWRQb3J0KCkpCiAgICAgICAg
IHZpc2l0b3IuYWRkT3BhcXVlUm9vdChwb3J0KTsKIH0KIAorREVGSU5FX1ZJU0lUX0FERElUSU9O
QUxfQ0hJTERSRU4oSlNNZXNzYWdlUG9ydCk7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTXV0YXRpb25PYnNlcnZlckN1c3RvbS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNdXRhdGlvbk9i
c2VydmVyQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNNdXRhdGlvbk9ic2VydmVyQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCkBAIC0z
OSwxMiArMzksMTUgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBKU0M7
CiAKLXZvaWQgSlNNdXRhdGlvbk9ic2VydmVyOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6
OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQg
SlNNdXRhdGlvbk9ic2VydmVyOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNp
dG9yKQogewogICAgIHdyYXBwZWQoKS5jYWxsYmFjaygpLnZpc2l0SlNGdW5jdGlvbih2aXNpdG9y
KTsKIH0KIAotYm9vbCBKU011dGF0aW9uT2JzZXJ2ZXJPd25lcjo6aXNSZWFjaGFibGVGcm9tT3Bh
cXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBTbG90Vmlz
aXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqcmVhc29uKQorREVGSU5FX1ZJU0lUX0FERElUSU9O
QUxfQ0hJTERSRU4oSlNNdXRhdGlvbk9ic2VydmVyKTsKKworYm9vbCBKU011dGF0aW9uT2JzZXJ2
ZXJPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtu
b3duPiBoYW5kbGUsIHZvaWQqLCBBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBj
aGFyKipyZWFzb24pCiB7CiAgICAgZm9yIChhdXRvKiBub2RlIDoganNDYXN0PEpTTXV0YXRpb25P
YnNlcnZlcio+KGhhbmRsZS5zbG90KCktPmFzQ2VsbCgpKS0+d3JhcHBlZCgpLm9ic2VydmVkTm9k
ZXMoKSkgewogICAgICAgICBpZiAodmlzaXRvci5jb250YWluc09wYXF1ZVJvb3Qocm9vdChub2Rl
KSkpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTXV0YXRpb25SZWNvcmRD
dXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTXV0
YXRpb25SZWNvcmRDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU011dGF0aW9uUmVjb3JkQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0z
MCw5ICszMCwxMiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgSlNNdXRhdGlvblJl
Y29yZDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikK
K3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTTXV0YXRpb25SZWNvcmQ6OnZpc2l0
QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgd3JhcHBlZCgpLnZp
c2l0Tm9kZXNDb25jdXJyZW50bHkodmlzaXRvcik7CiB9Ci0gICAgCisKK0RFRklORV9WSVNJVF9B
RERJVElPTkFMX0NISUxEUkVOKEpTTXV0YXRpb25SZWNvcmQpOworCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05hdmlnYXRvckN1c3Rv
bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOYXZpZ2F0
b3JDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU05hdmlnYXRvckN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzIsMTEgKzMyLDE0IEBA
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBKU05hdmlnYXRvcjo6dmlzaXRBZGRpdGlv
bmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1l
IFZpc2l0b3I+Cit2b2lkIEpTTmF2aWdhdG9yOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNp
dG9yJiB2aXNpdG9yKQogewogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChzdGF0aWNfY2FzdDxO
YXZpZ2F0b3JCYXNlKj4oJndyYXBwZWQoKSkpOwogfQogCitERUZJTkVfVklTSVRfQURESVRJT05B
TF9DSElMRFJFTihKU05hdmlnYXRvcik7CisKICNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQogSlND
OjpKU1ZhbHVlIEpTTmF2aWdhdG9yOjpnZXRVc2VyTWVkaWEoSlNDOjpKU0dsb2JhbE9iamVjdCYg
bGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpDYWxsRnJhbWUmIGNhbGxGcmFtZSkKIHsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUN1c3RvbS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlQ3VzdG9tLmNwcAkocmV2aXNpb24g
MjcyODMwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlQ3VzdG9tLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcs
IDIwMDktMjAxMCwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTc0LDcgKzc0LDcgQEAgdXNpbmcgbmFtZXNw
YWNlIEpTQzsKIAogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAotc3RhdGljIGlubGluZSBi
b29sIGlzUmVhY2hhYmxlRnJvbURPTShOb2RlKiBub2RlLCBTbG90VmlzaXRvciYgdmlzaXRvciwg
Y29uc3QgY2hhcioqIHJlYXNvbikKK3N0YXRpYyBpbmxpbmUgYm9vbCBpc1JlYWNoYWJsZUZyb21E
T00oTm9kZSogbm9kZSwgQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioq
IHJlYXNvbikKIHsKICAgICBpZiAoIW5vZGUtPmlzQ29ubmVjdGVkKCkpIHsKICAgICAgICAgaWYg
KGlzPEVsZW1lbnQ+KCpub2RlKSkgewpAQCAtMTIzLDcgKzEyMyw3IEBAIHN0YXRpYyBpbmxpbmUg
Ym9vbCBpc1JlYWNoYWJsZUZyb21ET00oTm8KICAgICByZXR1cm4gdmlzaXRvci5jb250YWluc09w
YXF1ZVJvb3Qocm9vdChub2RlKSk7CiB9CiAKLWJvb2wgSlNOb2RlT3duZXI6OmlzUmVhY2hhYmxl
RnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwg
U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCitib29sIEpTTm9kZU93
bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+
IGhhbmRsZSwgdm9pZCosIEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIq
KiByZWFzb24pCiB7CiAgICAgSlNOb2RlKiBqc05vZGUgPSBqc0Nhc3Q8SlNOb2RlKj4oaGFuZGxl
LnNsb3QoKS0+YXNDZWxsKCkpOwogICAgIHJldHVybiBpc1JlYWNoYWJsZUZyb21ET00oJmpzTm9k
ZS0+d3JhcHBlZCgpLCB2aXNpdG9yLCByZWFzb24pOwpAQCAtMTM2LDExICsxMzYsMTQgQEAgSlNT
Y29wZSogSlNOb2RlOjpwdXNoRXZlbnRIYW5kbGVyU2NvcGUoSgogICAgIHJldHVybiBub2RlOwog
fQogCi12b2lkIEpTTm9kZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZp
c2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU05vZGU6OnZpc2l0QWRk
aXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgdmlzaXRvci5hZGRPcGFx
dWVSb290KHJvb3Qod3JhcHBlZCgpKSk7CiB9CiAKK0RFRklORV9WSVNJVF9BRERJVElPTkFMX0NI
SUxEUkVOKEpTTm9kZSk7CisKIHN0YXRpYyBBTFdBWVNfSU5MSU5FIEpTVmFsdWUgY3JlYXRlV3Jh
cHBlcklubGluZShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNET01HbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmPE5vZGU+JiYgbm9kZSkKIHsKICAgICBBU1NFUlQo
IWdldENhY2hlZFdyYXBwZXIoZ2xvYmFsT2JqZWN0LT53b3JsZCgpLCBub2RlKSk7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVJdGVyYXRvckN1c3RvbS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlSXRlcmF0b3JDdXN0b20u
Y3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05v
ZGVJdGVyYXRvckN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjUsMTAgKzI1LDEzIEBACiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBKU05vZGVJdGVyYXRvcjo6dmlzaXRBZGRpdGlvbmFs
Q2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZp
c2l0b3I+Cit2b2lkIEpTTm9kZUl0ZXJhdG9yOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNp
dG9yJiB2aXNpdG9yKQogewogICAgIGlmIChOb2RlRmlsdGVyKiBmaWx0ZXIgPSB3cmFwcGVkKCku
ZmlsdGVyKCkpCiAgICAgICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChmaWx0ZXIpOwogfQogCi19
CitERUZJTkVfVklTSVRfQURESVRJT05BTF9DSElMRFJFTihKU05vZGVJdGVyYXRvcik7CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
Tm9kZUxpc3RDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTTm9kZUxpc3RDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU05vZGVMaXN0Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAxOSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTM3LDcgKzM3LDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBKU0M7
CiAKLWJvb2wgSlNOb2RlTGlzdE93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6
OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIFNsb3RWaXNpdG9yJiB2aXNpdG9y
LCBjb25zdCBjaGFyKiogcmVhc29uKQorYm9vbCBKU05vZGVMaXN0T3duZXI6OmlzUmVhY2hhYmxl
RnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwg
QWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikKIHsKICAg
ICBKU05vZGVMaXN0KiBqc05vZGVMaXN0ID0ganNDYXN0PEpTTm9kZUxpc3QqPihoYW5kbGUuc2xv
dCgpLT5hc0NlbGwoKSk7CiAgICAgaWYgKCFqc05vZGVMaXN0LT5oYXNDdXN0b21Qcm9wZXJ0aWVz
KGpzTm9kZUxpc3QtPnZtKCkpKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNP
ZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRDdXN0b20uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTT2Zmc2NyZWVuQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNPZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRDdXN0b20uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAg
LTMxLDcgKzMxLDcgQEAgaW5saW5lIHZvaWQqIHJvb3QoT2Zmc2NyZWVuQ2FudmFzKiBjYW52YQog
ICAgIHJldHVybiBjYW52YXM7CiB9CiAKLWJvb2wgSlNPZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdD
b250ZXh0MkRPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlND
OjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hh
cioqIHJlYXNvbikKK2Jvb2wgSlNPZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRPd25l
cjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBo
YW5kbGUsIHZvaWQqLCBBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiog
cmVhc29uKQogewogICAgIGlmIChVTkxJS0VMWShyZWFzb24pKQogICAgICAgICAqcmVhc29uID0g
IkNhbnZhcyBpcyBvcGFxdWUgcm9vdCI7CkBAIC00MSwxMSArNDEsMTQgQEAgYm9vbCBKU09mZnNj
cmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRAogICAgIHJldHVybiB2aXNpdG9yLmNvbnRhaW5z
T3BhcXVlUm9vdChyb290KTsKIH0KIAotdm9pZCBKU09mZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyRDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0
ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU09mZnNjcmVlbkNhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyRDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsK
ICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qocm9vdCgmd3JhcHBlZCgpLmNhbnZhcygpKSk7CiB9
CiAKK0RFRklORV9WSVNJVF9BRERJVElPTkFMX0NISUxEUkVOKEpTT2Zmc2NyZWVuQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEKTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUGFpbnRSZW5kZXJpbmdDb250ZXh0MkRD
dXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUGFp
bnRSZW5kZXJpbmdDb250ZXh0MkRDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1BhaW50UmVuZGVyaW5nQ29udGV4dDJEQ3VzdG9tLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE4
LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0zNiw3ICszNiw3IEBAIGlubGluZSB2b2lkKiByb290KEN1c3RvbVBh
aW50Q2FudmFzKiBjYW4KICAgICByZXR1cm4gY2FudmFzOwogfQogCi1ib29sIEpTUGFpbnRSZW5k
ZXJpbmdDb250ZXh0MkRPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5k
bGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBTbG90VmlzaXRvciYgdmlzaXRvciwgY29u
c3QgY2hhcioqIHJlYXNvbikKK2Jvb2wgSlNQYWludFJlbmRlcmluZ0NvbnRleHQyRE93bmVyOjpp
c1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRs
ZSwgdm9pZCosIEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFz
b24pCiB7CiAgICAgaWYgKFVOTElLRUxZKHJlYXNvbikpCiAgICAgICAgICpyZWFzb24gPSAiQ2Fu
dmFzIGlzIG9wYXF1ZSByb290IjsKQEAgLTQ2LDExICs0NiwxNCBAQCBib29sIEpTUGFpbnRSZW5k
ZXJpbmdDb250ZXh0MkRPd25lcjo6aXNSCiAgICAgcmV0dXJuIHZpc2l0b3IuY29udGFpbnNPcGFx
dWVSb290KHJvb3QpOwogfQogCi12b2lkIEpTUGFpbnRSZW5kZXJpbmdDb250ZXh0MkQ6OnZpc2l0
QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5h
bWUgVmlzaXRvcj4KK3ZvaWQgSlNQYWludFJlbmRlcmluZ0NvbnRleHQyRDo6dmlzaXRBZGRpdGlv
bmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJv
b3Qocm9vdCgmd3JhcHBlZCgpLmNhbnZhcygpKSk7CiB9CiAKK0RFRklORV9WSVNJVF9BRERJVElP
TkFMX0NISUxEUkVOKEpTUGFpbnRSZW5kZXJpbmdDb250ZXh0MkQpOworCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCiAjZW5kaWYKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNQ
YWludFdvcmtsZXRHbG9iYWxTY29wZUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNQYWludFdvcmtsZXRHbG9iYWxTY29wZUN1c3RvbS5jcHAJKHJl
dmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUGFpbnRXb3Jr
bGV0R2xvYmFsU2NvcGVDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMxLDcgKzMxLDggQEAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKLXZvaWQgSlNQYWludFdv
cmtsZXRHbG9iYWxTY29wZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRv
ciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTUGFpbnRXb3Jr
bGV0R2xvYmFsU2NvcGU6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3Ip
CiB7CiAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayh3cmFwcGVkKCkucGFpbnREZWZpbml0aW9u
TG9jaygpKTsKICAgICBmb3IgKGF1dG8mIHJlZ2lzdGVyZWQgOiB3cmFwcGVkKCkucGFpbnREZWZp
bml0aW9uTWFwKCkudmFsdWVzKCkpIHsKQEAgLTQwLDUgKzQxLDggQEAgdm9pZCBKU1BhaW50V29y
a2xldEdsb2JhbFNjb3BlOjp2aXNpdEFkZAogICAgIH0KIH0KIAotfQorREVGSU5FX1ZJU0lUX0FE
RElUSU9OQUxfQ0hJTERSRU4oSlNQYWludFdvcmtsZXRHbG9iYWxTY29wZSk7CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKwogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU1BheW1lbnRNZXRob2RDaGFuZ2VFdmVudEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNQYXltZW50TWV0aG9kQ2hhbmdlRXZlbnRDdXN0b20u
Y3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1Bh
eW1lbnRNZXRob2RDaGFuZ2VFdmVudEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDEsNyArNDEs
OCBAQCBKU0M6OkpTVmFsdWUgSlNQYXltZW50TWV0aG9kQ2hhbmdlRXZlbnQ6CiAgICAgfSk7CiB9
CiAKLXZvaWQgSlNQYXltZW50TWV0aG9kQ2hhbmdlRXZlbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxk
cmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
Pgordm9pZCBKU1BheW1lbnRNZXRob2RDaGFuZ2VFdmVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRy
ZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBXVEY6OnN3aXRjaE9uKHdyYXBwZWQoKS5tZXRo
b2REZXRhaWxzKCksIFsmdmlzaXRvcl0oY29uc3QgSlNWYWx1ZUluV3JhcHBlZE9iamVjdCYgbWV0
aG9kRGV0YWlscykgewogICAgICAgICBtZXRob2REZXRhaWxzLnZpc2l0KHZpc2l0b3IpOwpAQCAt
NTEsNiArNTIsOCBAQCB2b2lkIEpTUGF5bWVudE1ldGhvZENoYW5nZUV2ZW50Ojp2aXNpdEFkCiAg
ICAgd3JhcHBlZCgpLmNhY2hlZE1ldGhvZERldGFpbHMoKS52aXNpdCh2aXNpdG9yKTsKIH0KIAor
REVGSU5FX1ZJU0lUX0FERElUSU9OQUxfQ0hJTERSRU4oSlNQYXltZW50TWV0aG9kQ2hhbmdlRXZl
bnQpOworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoUEFZTUVO
VF9SRVFVRVNUKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNQYXltZW50UmVz
cG9uc2VDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTUGF5bWVudFJlc3BvbnNlQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNQYXltZW50UmVzcG9uc2VDdXN0b20uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAyMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTM3LDExICszNywxNCBAQCBKU0M6OkpTVmFsdWUgSlNQYXltZW50UmVzcG9uc2U6OmRl
dGFpbHMoCiAgICAgfSk7CiB9CiAKLXZvaWQgSlNQYXltZW50UmVzcG9uc2U6OnZpc2l0QWRkaXRp
b25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBWaXNpdG9yPgordm9pZCBKU1BheW1lbnRSZXNwb25zZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRy
ZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB3cmFwcGVkKCkuY2FjaGVkRGV0YWlscygpLnZp
c2l0KHZpc2l0b3IpOwogfQogCitERUZJTkVfVklTSVRfQURESVRJT05BTF9DSElMRFJFTihKU1Bh
eW1lbnRSZXNwb25zZSk7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVO
QUJMRShQQVlNRU5UX1JFUVVFU1QpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U1BlcmZvcm1hbmNlT2JzZXJ2ZXJDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTUGVyZm9ybWFuY2VPYnNlcnZlckN1c3RvbS5jcHAJKHJldmlzaW9u
IDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUGVyZm9ybWFuY2VPYnNl
cnZlckN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxOC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzEsMTIgKzMxLDE1IEBACiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotdm9pZCBKU1BlcmZvcm1hbmNlT2JzZXJ2ZXI6OnZpc2l0QWRkaXRpb25h
bENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPgordm9pZCBKU1BlcmZvcm1hbmNlT2JzZXJ2ZXI6OnZpc2l0QWRkaXRpb25hbENoaWxk
cmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgd3JhcHBlZCgpLmNhbGxiYWNrKCkudmlzaXRK
U0Z1bmN0aW9uKHZpc2l0b3IpOwogfQogCi1ib29sIEpTUGVyZm9ybWFuY2VPYnNlcnZlck93bmVy
Ojppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhh
bmRsZSwgdm9pZCosIEpTQzo6U2xvdFZpc2l0b3ImLCBjb25zdCBjaGFyKiogcmVhc29uKQorREVG
SU5FX1ZJU0lUX0FERElUSU9OQUxfQ0hJTERSRU4oSlNQZXJmb3JtYW5jZU9ic2VydmVyKTsKKwor
Ym9vbCBKU1BlcmZvcm1hbmNlT2JzZXJ2ZXJPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9v
dHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBKU0M6OkFic3RyYWN0
U2xvdFZpc2l0b3ImLCBjb25zdCBjaGFyKiogcmVhc29uKQogewogICAgIGlmIChVTkxJS0VMWShy
ZWFzb24pKQogICAgICAgICAqcmVhc29uID0gIlJlZ2lzdGVyZWQgUGVyZm9ybWFuY2VPYnNlcnZl
ciBjYWxsYmFjayI7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1BvcFN0YXRl
RXZlbnRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTUG9wU3RhdGVFdmVudEN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTUG9wU3RhdGVFdmVudEN1c3RvbS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQpA
QCAtOTAsOSArOTEsMTIgQEAgSlNWYWx1ZSBKU1BvcFN0YXRlRXZlbnQ6OnN0YXRlKEpTR2xvYmFs
TwogICAgIHJldHVybiBjYWNoZVN0YXRlKHJlc3VsdCk7CiB9CiAKLXZvaWQgSlNQb3BTdGF0ZUV2
ZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQor
dGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNQb3BTdGF0ZUV2ZW50Ojp2aXNpdEFk
ZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHdyYXBwZWQoKS5zdGF0
ZSgpLnZpc2l0KHZpc2l0b3IpOwogfQogCitERUZJTkVfVklTSVRfQURESVRJT05BTF9DSElMRFJF
TihKU1BvcFN0YXRlRXZlbnQpOworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1Byb21pc2VSZWplY3Rpb25FdmVudEN1c3RvbS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNQcm9taXNlUmVqZWN0
aW9uRXZlbnRDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU1Byb21pc2VSZWplY3Rpb25FdmVudEN1c3RvbS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDE4IFl1c3VrZSBTdXp1
a2kgPHl1c3VrZXN1enVraUBzbG93c3RhcnQub3JnPi4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTMyLDkgKzMzLDEyIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBK
U1Byb21pc2VSZWplY3Rpb25FdmVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90
VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTUHJv
bWlzZVJlamVjdGlvbkV2ZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNp
dG9yKQogewogICAgIHdyYXBwZWQoKS5yZWFzb24oKS52aXNpdCh2aXNpdG9yKTsKIH0KIAorREVG
SU5FX1ZJU0lUX0FERElUSU9OQUxfQ0hJTERSRU4oSlNQcm9taXNlUmVqZWN0aW9uRXZlbnQpOwor
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU1Jlc2l6ZU9ic2VydmVyQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU1Jlc2l6ZU9ic2VydmVyQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcyODMw
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNSZXNpemVPYnNlcnZlckN1c3RvbS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAy
MDIwIElnYWxpYSBTLkwuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMCwxMSAr
MzEsMTQgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIEpTUmVzaXplT2JzZXJ2ZXI6
OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1w
bGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1Jlc2l6ZU9ic2VydmVyOjp2aXNpdEFkZGl0
aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFJlc2l6ZU9ic2VydmVyQ2Fs
bGJhY2sqIGNhbGxiYWNrID0gd3JhcHBlZCgpLmNhbGxiYWNrQ29uY3VycmVudGx5KCk7CiAgICAg
aWYgKGNhbGxiYWNrKQogICAgICAgICBjYWxsYmFjay0+dmlzaXRKU0Z1bmN0aW9uKHZpc2l0b3Ip
OwogfQogCi19CitERUZJTkVfVklTSVRfQURESVRJT05BTF9DSElMRFJFTihKU1Jlc2l6ZU9ic2Vy
dmVyKTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNSZXNpemVPYnNlcnZlckVudHJ5Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1Jlc2l6ZU9ic2VydmVyRW50cnlDdXN0b20uY3Bw
CShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1Jlc2l6
ZU9ic2VydmVyRW50cnlDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAog
LyoKICAqIENvcHlyaWdodCAoQykgMjAxOSBJZ2FsaWEgUy5MLgorICogQ29weXJpZ2h0IChDKSAy
MDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMzAsMTAgKzMxLDEzIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAot
dm9pZCBKU1Jlc2l6ZU9ic2VydmVyRW50cnk6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBK
U1Jlc2l6ZU9ic2VydmVyRW50cnk6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZp
c2l0b3IpCiB7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHJvb3Qod3JhcHBlZCgpLnRhcmdl
dCgpKSk7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHdyYXBwZWQoKS5jb250ZW50UmVjdCgp
KTsKIH0KIAotfQorREVGSU5FX1ZJU0lUX0FERElUSU9OQUxfQ0hJTERSRU4oSlNSZXNpemVPYnNl
cnZlckVudHJ5KTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNTVkdWaWV3U3BlY0N1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNTVkdWaWV3U3BlY0N1c3RvbS5jcHAJKHJldmlzaW9u
IDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU1ZHVmlld1NwZWNDdXN0
b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTgtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTMwLDEwICszMCwxMyBAQAogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLXZvaWQgSlNTVkdWaWV3U3BlYzo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpT
bG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpT
U1ZHVmlld1NwZWM6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7
CiAgICAgQVNTRVJUKHdyYXBwZWQoKS5jb250ZXh0RWxlbWVudENvbmN1cnJlbnRseSgpLmdldCgp
KTsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qocm9vdCh3cmFwcGVkKCkuY29udGV4dEVsZW1l
bnRDb25jdXJyZW50bHkoKS5nZXQoKSkpOwogfQogCi19CitERUZJTkVfVklTSVRfQURESVRJT05B
TF9DSElMRFJFTihKU1NWR1ZpZXdTcGVjKTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNTZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGVD
dXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU2Vy
dmljZVdvcmtlckdsb2JhbFNjb3BlQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNTZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGVDdXN0b20u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTM0LDEyICszNCwxNSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
IHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKLXZvaWQgSlNTZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGU6
OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8
dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNTZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGU6OnZpc2l0
QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgdmlzaXRvci5hZGRP
cGFxdWVSb290KCZ3cmFwcGVkKCkuY2xpZW50cygpKTsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJv
b3QoJndyYXBwZWQoKS5yZWdpc3RyYXRpb24oKSk7CiB9CiAKK0RFRklORV9WSVNJVF9BRERJVElP
TkFMX0NISUxEUkVOKEpTU2VydmljZVdvcmtlckdsb2JhbFNjb3BlKTsKKwogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQogCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
U3RhdGljUmFuZ2VDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTU3RhdGljUmFuZ2VDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1N0YXRpY1JhbmdlQ3VzdG9tLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzAsOSArMzAsMTIgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIEpT
U3RhdGljUmFuZ2U6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZp
c2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1N0YXRpY1JhbmdlOjp2
aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHdyYXBwZWQo
KS52aXNpdE5vZGVzQ29uY3VycmVudGx5KHZpc2l0b3IpOwogfQogCitERUZJTkVfVklTSVRfQURE
SVRJT05BTF9DSElMRFJFTihKU1N0YXRpY1JhbmdlKTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNTdHlsZVNoZWV0Q3VzdG9tLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1N0eWxlU2hlZXRD
dXN0b20uY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU1N0eWxlU2hlZXRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMwLDEx
ICszMCwxNCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgSlNTdHlsZVNoZWV0Ojp2
aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxh
dGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNTdHlsZVNoZWV0Ojp2aXNpdEFkZGl0aW9uYWxD
aGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChy
b290KCZ3cmFwcGVkKCkpKTsKIH0KIAorREVGSU5FX1ZJU0lUX0FERElUSU9OQUxfQ0hJTERSRU4o
SlNTdHlsZVNoZWV0KTsKKwogSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpKU0ds
b2JhbE9iamVjdCosIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZjxTdHlsZVNo
ZWV0PiYmIHN0eWxlU2hlZXQpCiB7CiAgICAgaWYgKHN0eWxlU2hlZXQtPmlzQ1NTU3R5bGVTaGVl
dCgpKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNUZXh0VHJhY2tDdWVDdXN0
b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVGV4dFRy
YWNrQ3VlQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNUZXh0VHJhY2tDdWVDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM4LDcgKzM4
LDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKLWJvb2wg
SlNUZXh0VHJhY2tDdWVPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5k
bGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBTbG90VmlzaXRvciYgdmlzaXRvciwgY29u
c3QgY2hhcioqIHJlYXNvbikKK2Jvb2wgSlNUZXh0VHJhY2tDdWVPd25lcjo6aXNSZWFjaGFibGVG
cm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBB
YnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQogewogICAg
IEpTVGV4dFRyYWNrQ3VlKiBqc1RleHRUcmFja0N1ZSA9IGpzQ2FzdDxKU1RleHRUcmFja0N1ZSo+
KGhhbmRsZS5zbG90KCktPmFzQ2VsbCgpKTsKICAgICBUZXh0VHJhY2tDdWUmIHRleHRUcmFja0N1
ZSA9IGpzVGV4dFRyYWNrQ3VlLT53cmFwcGVkKCk7CkBAIC04MiwxMiArODIsMTUgQEAgSlNWYWx1
ZSB0b0pTKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYgogICAgIHJldHVybiB3cmFwKGxleGlj
YWxHbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdCwgY3VlKTsKIH0KIAotdm9pZCBKU1RleHRUcmFj
a0N1ZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1w
bGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1RleHRUcmFja0N1ZTo6dmlzaXRBZGRpdGlv
bmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBpZiAoVGV4dFRyYWNrKiB0ZXh0
VHJhY2sgPSB3cmFwcGVkKCkudHJhY2soKSkKICAgICAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290
KHJvb3QodGV4dFRyYWNrKSk7CiB9CiAKK0RFRklORV9WSVNJVF9BRERJVElPTkFMX0NISUxEUkVO
KEpTVGV4dFRyYWNrQ3VlKTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVGV4dFRyYWNrQ3VzdG9tLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1RleHRUcmFja0N1c3RvbS5j
cHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVGV4
dFRyYWNrQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDExLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNiwxMSArMzYsMTQgQEAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKLXZvaWQgSlNUZXh0VHJhY2s6OnZp
c2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlw
ZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNUZXh0VHJhY2s6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVu
KFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHJvb3QoJndy
YXBwZWQoKSkpOwogfQogCitERUZJTkVfVklTSVRfQURESVRJT05BTF9DSElMRFJFTihKU1RleHRU
cmFjayk7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU1RleHRUcmFja0xpc3RDdXN0b20uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVGV4dFRyYWNrTGlzdEN1c3RvbS5jcHAJ
KHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVGV4dFRy
YWNrTGlzdEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzYsMTEgKzM2LDE0IEBACiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCi12b2lkIEpTVGV4dFRyYWNrTGlz
dDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3Rl
bXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTVGV4dFRyYWNrTGlzdDo6dmlzaXRBZGRp
dGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB2aXNpdG9yLmFkZE9wYXF1
ZVJvb3Qocm9vdCh3cmFwcGVkKCkuZWxlbWVudCgpKSk7CiB9CiAgICAgCitERUZJTkVfVklTSVRf
QURESVRJT05BTF9DSElMRFJFTihKU1RleHRUcmFja0xpc3QpOworCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCiAKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNUcmVl
V2Fsa2VyQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU1RyZWVXYWxrZXJDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU1RyZWVXYWxrZXJDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwOCwgMjAwOSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI1
LDEwICsyNSwxMyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgSlNUcmVlV2Fsa2Vy
Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVt
cGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNUcmVlV2Fsa2VyOjp2aXNpdEFkZGl0aW9u
YWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGlmIChOb2RlRmlsdGVyKiBmaWx0
ZXIgPSB3cmFwcGVkKCkuZmlsdGVyKCkpCiAgICAgICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChm
aWx0ZXIpOwogfQogCi19CitERUZJTkVfVklTSVRfQURESVRJT05BTF9DSElMRFJFTihKU1RyZWVX
YWxrZXIpOworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU1VuZG9JdGVtQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU1VuZG9JdGVtQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcyODMwKQor
KysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNVbmRvSXRlbUN1c3RvbS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOS0yMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMjksMTMgKzI5LDE2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBK
U1VuZG9JdGVtOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNp
dG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNVbmRvSXRlbTo6dmlzaXRB
ZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB3cmFwcGVkKCkudW5k
b0hhbmRsZXIoKS52aXNpdEpTRnVuY3Rpb24odmlzaXRvcik7CiAgICAgd3JhcHBlZCgpLnJlZG9I
YW5kbGVyKCkudmlzaXRKU0Z1bmN0aW9uKHZpc2l0b3IpOwogfQogCi1ib29sIEpTVW5kb0l0ZW1P
d25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3du
PiBoYW5kbGUsIHZvaWQqLCBKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiog
cmVhc29uKQorREVGSU5FX1ZJU0lUX0FERElUSU9OQUxfQ0hJTERSRU4oSlNVbmRvSXRlbSk7CisK
K2Jvb2wgSlNVbmRvSXRlbU93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6Okhh
bmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRv
ciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikKIHsKICAgICBpZiAoVU5MSUtFTFkocmVh
c29uKSkKICAgICAgICAgKnJlYXNvbiA9ICJEb2N1bWVudCBpcyBhbiBvcGFxdWUgcm9vdC4iOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNWYWx1ZUluV3JhcHBlZE9iamVjdC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVmFsdWVJbldyYXBw
ZWRPYmplY3QuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNWYWx1ZUluV3JhcHBlZE9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00MCw3ICs0MCw3IEBAIHB1
YmxpYzoKICAgICBvcGVyYXRvciBKU0M6OkpTVmFsdWUoKSBjb25zdDsKICAgICBleHBsaWNpdCBv
cGVyYXRvciBib29sKCkgY29uc3Q7CiAgICAgSlNWYWx1ZUluV3JhcHBlZE9iamVjdCYgb3BlcmF0
b3I9KGNvbnN0IEpTVmFsdWVJbldyYXBwZWRPYmplY3QmIG90aGVyKTsKLSAgICB2b2lkIHZpc2l0
KEpTQzo6U2xvdFZpc2l0b3ImKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
PiB2b2lkIHZpc2l0KFZpc2l0b3ImKSBjb25zdDsKICAgICB2b2lkIGNsZWFyKCk7CiAKIHByaXZh
dGU6CkBAIC05OCw3ICs5OCw4IEBAIGlubGluZSBKU1ZhbHVlSW5XcmFwcGVkT2JqZWN0JiBKU1Zh
bHVlSW4KICAgICByZXR1cm4gKnRoaXM7CiB9CiAKLWlubGluZSB2b2lkIEpTVmFsdWVJbldyYXBw
ZWRPYmplY3Q6OnZpc2l0KEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0Cit0ZW1wbGF0
ZTx0eXBlbmFtZSBWaXNpdG9yPgoraW5saW5lIHZvaWQgSlNWYWx1ZUluV3JhcHBlZE9iamVjdDo6
dmlzaXQoVmlzaXRvciYgdmlzaXRvcikgY29uc3QKIHsKICAgICByZXR1cm4gV1RGOjpzd2l0Y2hP
bihtX3ZhbHVlLCBbXSAoSlNDOjpKU1ZhbHVlKSB7CiAgICAgICAgIC8vIE5vdGhpbmcgdG8gdmlz
aXQuCkBAIC0xMDcsNiArMTA4LDkgQEAgaW5saW5lIHZvaWQgSlNWYWx1ZUluV3JhcHBlZE9iamVj
dDo6dmlzaQogICAgIH0pOwogfQogCit0ZW1wbGF0ZSB2b2lkIEpTVmFsdWVJbldyYXBwZWRPYmpl
Y3Q6OnZpc2l0KEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpIGNvbnN0OwordGVtcGxhdGUgdm9p
ZCBKU1ZhbHVlSW5XcmFwcGVkT2JqZWN0Ojp2aXNpdChKU0M6OlNsb3RWaXNpdG9yJikgY29uc3Q7
CisKIGlubGluZSB2b2lkIEpTVmFsdWVJbldyYXBwZWRPYmplY3Q6OmNsZWFyKCkKIHsKICAgICBX
VEY6OnN3aXRjaE9uKG1fdmFsdWUsIFtdIChXZWFrJiB2YWx1ZSkgewpJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNWaWRlb1RyYWNrQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1ZpZGVvVHJhY2tDdXN0b20uY3BwCShyZXZpc2lv
biAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1ZpZGVvVHJhY2tDdXN0
b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTEtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTM1LDExICszNSwxNCBAQAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAotdm9pZCBKU1ZpZGVvVHJhY2s6OnZpc2l0QWRkaXRp
b25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlz
aXRvcj4KK3ZvaWQgSlNWaWRlb1RyYWNrOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9y
JiB2aXNpdG9yKQogewogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChyb290KCZ3cmFwcGVkKCkp
KTsKIH0KIAorREVGSU5FX1ZJU0lUX0FERElUSU9OQUxfQ0hJTERSRU4oSlNWaWRlb1RyYWNrKTsK
KwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTVmlkZW9UcmFja0xpc3RDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVmlkZW9UcmFja0xpc3RDdXN0b20uY3BwCShyZXZp
c2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1ZpZGVvVHJhY2tM
aXN0Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDExLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNSwxMSArMzUsMTQgQEAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKLXZvaWQgSlNWaWRlb1RyYWNrTGlzdDo6
dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0
eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1ZpZGVvVHJhY2tMaXN0Ojp2aXNpdEFkZGl0aW9uYWxD
aGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChy
b290KHdyYXBwZWQoKS5lbGVtZW50KCkpKTsKIH0KIAorREVGSU5FX1ZJU0lUX0FERElUSU9OQUxf
Q0hJTERSRU4oSlNWaWRlb1RyYWNrTGlzdCk7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAog
I2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYkdMMlJlbmRlcmlu
Z0NvbnRleHRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTV2ViR0wyUmVuZGVyaW5nQ29udGV4dEN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjgzMCkK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViR0wyUmVuZGVyaW5nQ29udGV4dEN1
c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE1LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMywxMiArMzMsMTUgQEAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKLXZvaWQgSlNXZWJHTDJSZW5kZXJpbmdD
b250ZXh0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3Rl
bXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTV2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6
dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB2aXNpdG9y
LmFkZE9wYXF1ZVJvb3QoJndyYXBwZWQoKSk7CiAgICAgd3JhcHBlZCgpLmFkZE1lbWJlcnNUb09w
YXF1ZVJvb3RzKHZpc2l0b3IpOwogfQogCitERUZJTkVfVklTSVRfQURESVRJT05BTF9DSElMRFJF
TihKU1dlYkdMMlJlbmRlcmluZ0NvbnRleHQpOworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAK
ICNlbmRpZiAvLyBFTkFCTEUoV0VCR0wpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU1dlYkdMUmVuZGVyaW5nQ29udGV4dEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRDdXN0b20uY3BwCShy
ZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYkdMUmVu
ZGVyaW5nQ29udGV4dEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzMsMTIgKzMzLDE1IEBACiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCi12b2lkIEpTV2ViR0xS
ZW5kZXJpbmdDb250ZXh0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlz
aXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTV2ViR0xSZW5kZXJpbmdD
b250ZXh0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAg
IHZpc2l0b3IuYWRkT3BhcXVlUm9vdCgmd3JhcHBlZCgpKTsKICAgICB3cmFwcGVkKCkuYWRkTWVt
YmVyc1RvT3BhcXVlUm9vdHModmlzaXRvcik7CiB9CiAKK0RFRklORV9WSVNJVF9BRERJVElPTkFM
X0NISUxEUkVOKEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0KTsKKwogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQkdMKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNXb3JrZXJHbG9iYWxTY29wZUJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyR2xvYmFsU2NvcGVCYXNlLmNwcAkocmV2aXNp
b24gMjcyODMwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrZXJHbG9iYWxT
Y29wZUJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAwOCwgMjAwOSwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTkyLDcgKzkyLDggQEAgdm9pZCBKU1dvcmtlckdsb2Jh
bFNjb3BlQmFzZTo6ZmluaXNoQ3JlYQogICAgIEFTU0VSVChpbmhlcml0cyh2bSwgaW5mbygpKSk7
CiB9CiAKLXZvaWQgSlNXb3JrZXJHbG9iYWxTY29wZUJhc2U6OnZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+
Cit2b2lkIEpTV29ya2VyR2xvYmFsU2NvcGVCYXNlOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwq
IGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNXb3JrZXJHbG9iYWxTY29wZUJhc2Uq
IHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNXb3JrZXJHbG9iYWxTY29wZUJhc2UqPihjZWxsKTsKICAg
ICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC0xMDAs
NiArMTAxLDggQEAgdm9pZCBKU1dvcmtlckdsb2JhbFNjb3BlQmFzZTo6dmlzaXRDaGlsZAogICAg
IHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fcHJveHkpOwogfQogCitERUZJTkVfVklTSVRf
Q0hJTERSRU4oSlNXb3JrZXJHbG9iYWxTY29wZUJhc2UpOworCiB2b2lkIEpTV29ya2VyR2xvYmFs
U2NvcGVCYXNlOjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKIHsKICAgICBzdGF0aWNfY2FzdDxKU1dv
cmtlckdsb2JhbFNjb3BlQmFzZSo+KGNlbGwpLT5KU1dvcmtlckdsb2JhbFNjb3BlQmFzZTo6fkpT
V29ya2VyR2xvYmFsU2NvcGVCYXNlKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU1dvcmtlckdsb2JhbFNjb3BlQmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTV29ya2VyR2xvYmFsU2NvcGVCYXNlLmgJKHJldmlzaW9uIDI3MjgzMCkK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyR2xvYmFsU2NvcGVCYXNlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4
LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAwOC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtNzksNyArNzksNyBAQCBwcm90ZWN0ZWQ6CiAgICAgSlNXb3Jr
ZXJHbG9iYWxTY29wZUJhc2UoSlNDOjpWTSYsIEpTQzo6U3RydWN0dXJlKiwgUmVmUHRyPFdvcmtl
ckdsb2JhbFNjb3BlPiYmKTsKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mLCBKU0M6
OkpTUHJveHkqKTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDOjpKU0NlbGwq
LCBKU0M6OlNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogcHJp
dmF0ZToKICAgICBSZWZQdHI8V29ya2VyR2xvYmFsU2NvcGU+IG1fd3JhcHBlZDsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyR2xvYmFsU2NvcGVDdXN0b20uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyR2xvYmFsU2Nv
cGVDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU1dvcmtlckdsb2JhbFNjb3BlQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAwOSwgMjAxMSwgMjAxNiBBcHBs
ZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAyMSBB
cHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTMzLDcgKzMzLDggQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVz
cGFjZSBKU0M7CiAKLXZvaWQgSlNXb3JrZXJHbG9iYWxTY29wZTo6dmlzaXRBZGRpdGlvbmFsQ2hp
bGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgor
dm9pZCBKU1dvcmtlckdsb2JhbFNjb3BlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9y
JiB2aXNpdG9yKQogewogICAgIGlmIChhdXRvKiBsb2NhdGlvbiA9IHdyYXBwZWQoKS5vcHRpb25h
bExvY2F0aW9uKCkpCiAgICAgICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChsb2NhdGlvbik7CkBA
IC00OCw2ICs0OSw4IEBAIHZvaWQgSlNXb3JrZXJHbG9iYWxTY29wZTo6dmlzaXRBZGRpdGlvbmEK
ICAgICB3cmFwcGVkKCkudmlzaXRKU0V2ZW50TGlzdGVuZXJzKHZpc2l0b3IpOwogfQogCitERUZJ
TkVfVklTSVRfQURESVRJT05BTF9DSElMRFJFTihKU1dvcmtlckdsb2JhbFNjb3BlKTsKKwogSlNW
YWx1ZSBKU1dvcmtlckdsb2JhbFNjb3BlOjpxdWV1ZU1pY3JvdGFzayhKU0dsb2JhbE9iamVjdCYg
bGV4aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lJiBjYWxsRnJhbWUpCiB7CiAgICAgVk0mIHZt
ID0gbGV4aWNhbEdsb2JhbE9iamVjdC52bSgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNXb3JrZXJOYXZpZ2F0b3JDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyTmF2aWdhdG9yQ3VzdG9tLmNwcAkocmV2aXNpb24g
MjcyODMwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrZXJOYXZpZ2F0b3JD
dXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI4LDkgKzI4LDEyIEBACiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAotdm9pZCBKU1dvcmtlck5hdmlnYXRvcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4o
SlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2
b2lkIEpTV29ya2VyTmF2aWdhdG9yOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2
aXNpdG9yKQogewogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChzdGF0aWNfY2FzdDxOYXZpZ2F0
b3JCYXNlKj4oJndyYXBwZWQoKSkpOwogfQogCi19CitERUZJTkVfVklTSVRfQURESVRJT05BTF9D
SElMRFJFTihKU1dvcmtlck5hdmlnYXRvcik7CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2xldEdsb2JhbFNjb3BlQmFzZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrbGV0R2xv
YmFsU2NvcGVCYXNlLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNXb3JrbGV0R2xvYmFsU2NvcGVCYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC04Miw3
ICs4Miw4IEBAIHZvaWQgSlNXb3JrbGV0R2xvYmFsU2NvcGVCYXNlOjpmaW5pc2hDcmUKICAgICBB
U1NFUlQoaW5oZXJpdHModm0sIGluZm8oKSkpOwogfQogCi12b2lkIEpTV29ya2xldEdsb2JhbFNj
b3BlQmFzZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9y
KQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNXb3JrbGV0R2xvYmFsU2NvcGVC
YXNlOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7
CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1dvcmtsZXRHbG9iYWxTY29wZUJhc2Uq
PihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8o
KSk7CkBAIC05MCw2ICs5MSw4IEBAIHZvaWQgSlNXb3JrbGV0R2xvYmFsU2NvcGVCYXNlOjp2aXNp
dENoaWwKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX3Byb3h5KTsKIH0KIAorREVG
SU5FX1ZJU0lUX0NISUxEUkVOKEpTV29ya2xldEdsb2JhbFNjb3BlQmFzZSk7CisKIHZvaWQgSlNX
b3JrbGV0R2xvYmFsU2NvcGVCYXNlOjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKIHsKICAgICBzdGF0
aWNfY2FzdDxKU1dvcmtsZXRHbG9iYWxTY29wZUJhc2UqPihjZWxsKS0+SlNXb3JrbGV0R2xvYmFs
U2NvcGVCYXNlOjp+SlNXb3JrbGV0R2xvYmFsU2NvcGVCYXNlKCk7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU1dvcmtsZXRHbG9iYWxTY29wZUJhc2UuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtsZXRHbG9iYWxTY29wZUJhc2UuaAko
cmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrbGV0
R2xvYmFsU2NvcGVCYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxOC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjcsNyArNjcsNyBAQCBwcm90ZWN0ZWQ6
CiAgICAgSlNXb3JrbGV0R2xvYmFsU2NvcGVCYXNlKEpTQzo6Vk0mLCBKU0M6OlN0cnVjdHVyZSos
IFJlZlB0cjxXb3JrbGV0R2xvYmFsU2NvcGU+JiYpOwogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24o
SlNDOjpWTSYsIEpTQzo6SlNQcm94eSopOwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJl
bihKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NI
SUxEUkVOOwogCiBwcml2YXRlOgogICAgIFJlZlB0cjxXb3JrbGV0R2xvYmFsU2NvcGU+IG1fd3Jh
cHBlZDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTWE1MSHR0cFJlcXVlc3RD
dXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTWE1M
SHR0cFJlcXVlc3RDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU1hNTEh0dHBSZXF1ZXN0Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMjEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC00MSw3ICs0MSw4IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2Ug
SlNDOwogCi12b2lkIEpTWE1MSHR0cFJlcXVlc3Q6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNY
TUxIdHRwUmVxdWVzdDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikK
IHsKICAgICBpZiAoYXV0byogdXBsb2FkID0gd3JhcHBlZCgpLm9wdGlvbmFsVXBsb2FkKCkpCiAg
ICAgICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdCh1cGxvYWQpOwpAQCAtNTAsNiArNTEsOCBAQCB2
b2lkIEpTWE1MSHR0cFJlcXVlc3Q6OnZpc2l0QWRkaXRpb25hbENoCiAgICAgICAgIHZpc2l0b3Iu
YWRkT3BhcXVlUm9vdChyZXNwb25zZURvY3VtZW50KTsKIH0KIAorREVGSU5FX1ZJU0lUX0FERElU
SU9OQUxfQ0hJTERSRU4oSlNYTUxIdHRwUmVxdWVzdCk7CisKIEpTVmFsdWUgSlNYTUxIdHRwUmVx
dWVzdDo6cmVzcG9uc2UoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QpIGNvbnN0
CiB7CiAgICAgYXV0byBjYWNoZVJlc3VsdCA9IFsmXSAoSlNWYWx1ZSB2YWx1ZSkgLT4gSlNWYWx1
ZSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1hQYXRoUmVzdWx0Q3VzdG9t
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1hQYXRoUmVz
dWx0Q3VzdG9tLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNYUGF0aFJlc3VsdEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2
IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDExIEp1bGllbiBDaGFmZnJhaXggPGpjaGFmZnJh
aXhAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMxLDcgKzMy
LDggQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIEpTWFBhdGhSZXN1bHQ6OnZpc2l0
QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0
eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1hQYXRoUmVzdWx0Ojp2aXNpdEFkZGl0aW9uYWxDaGls
ZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGF1dG8mIHZhbHVlID0gd3JhcHBlZCgpLnZh
bHVlKCk7CiAgICAgaWYgKHZhbHVlLmlzTm9kZVNldCgpKSB7CkBAIC00MSw0ICs0Myw2IEBAIHZv
aWQgSlNYUGF0aFJlc3VsdDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGQKICAgICB9CiB9CiAKK0RFRklO
RV9WSVNJVF9BRERJVElPTkFMX0NISUxEUkVOKEpTWFBhdGhSZXN1bHQpOworCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlVHlw
ZWRBcnJheUNvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL1dlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlci5jcHAJKHJldmlzaW9uIDI3MjgzMCkK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtNTYsNyArNTYsNyBAQCBib29sIFdlYkNvcmVUeXBlZEFycmF5
Q29udHJvbGxlcjo6aXNBdG9tCiAgICAgcmV0dXJuIG1fYWxsb3dBdG9taWNzV2FpdDsKIH0KIAot
Ym9vbCBXZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXI6OkpTQXJyYXlCdWZmZXJPd25lcjo6aXNS
ZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUs
IHZvaWQqLCBKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQor
Ym9vbCBXZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXI6OkpTQXJyYXlCdWZmZXJPd25lcjo6aXNS
ZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUs
IHZvaWQqLCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiBy
ZWFzb24pCiB7CiAgICAgaWYgKFVOTElLRUxZKHJlYXNvbikpCiAgICAgICAgICpyZWFzb24gPSAi
QXJyYXlCdWZmZXIgaXMgb3BhcXVlIHJvb3QiOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvV2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvV2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyLmgJKHJldmlz
aW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dlYkNvcmVUeXBlZEFy
cmF5Q29udHJvbGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ4LDcgKzQ4LDcgQEAgcHVibGljOgogcHJp
dmF0ZToKICAgICBjbGFzcyBKU0FycmF5QnVmZmVyT3duZXIgOiBwdWJsaWMgSlNDOjpXZWFrSGFu
ZGxlT3duZXIgewogICAgIHB1YmxpYzoKLSAgICAgICAgYm9vbCBpc1JlYWNoYWJsZUZyb21PcGFx
dWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0LCBKU0M6OlNs
b3RWaXNpdG9yJiwgY29uc3QgY2hhcioqKSBvdmVycmlkZTsKKyAgICAgICAgYm9vbCBpc1JlYWNo
YWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250
ZXh0LCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImLCBjb25zdCBjaGFyKiopIG92ZXJyaWRlOwog
ICAgICAgICB2b2lkIGZpbmFsaXplKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNv
bnRleHQpIG92ZXJyaWRlOwogICAgIH07CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCShyZXZpc2lvbiAyNzI4MzApCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQkod29y
a2luZyBjb3B5KQpAQCAtMyw3ICszLDcgQEAKICMgQ29weXJpZ2h0IChDKSAyMDA2IEFuZGVycyBD
YXJsc3NvbiA8YW5kZXJzY2FAbWFjLmNvbT4KICMgQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IFNh
bXVlbCBXZWluaWcgPHNhbUB3ZWJraXQub3JnPgogIyBDb3B5cmlnaHQgKEMpIDIwMDYgQWxleGV5
IFByb3NrdXJ5YWtvdiA8YXBAd2Via2l0Lm9yZz4KLSMgQ29weXJpZ2h0IChDKSAyMDA2LTIwMjAg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyBDb3B5cmlnaHQgKEMpIDIwMDYtMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAjIENvcHlyaWdodCAoQykgMjAwOSBD
YW1lcm9uIE1jQ29ybWFjayA8Y2FtQG1jYy5pZC5hdT4KICMgQ29weXJpZ2h0IChDKSBSZXNlYXJj
aCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogIyBDb3B5cmln
aHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMp
CkBAIC0zMDc4LDggKzMwNzgsOCBAQCBzdWIgR2VuZXJhdGVIZWFkZXIKIAogICAgICMgdmlzaXQg
ZnVuY3Rpb24KICAgICBpZiAoJG5lZWRzVmlzaXRDaGlsZHJlbikgewotICAgICAgICBwdXNoKEBo
ZWFkZXJDb250ZW50LCAiICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgSlND
OjpTbG90VmlzaXRvciYpO1xuIik7Ci0gICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAg
dm9pZCB2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJik7XG4iKSBpZiAk
aW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntKU0N1c3RvbU1hcmtGdW5jdGlvbn07Cisg
ICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjtc
biIpOworICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFZpc2l0b3I+IHZvaWQgdmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYpO1xuIikgaWYg
JGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57SlNDdXN0b21NYXJrRnVuY3Rpb259Owog
ICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiXG4iKTsKIAogICAgICAgICBpZiAoJGludGVy
ZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57SlNDdXN0b21NYXJrRnVuY3Rpb259KSB7CkBAIC0z
MDk0LDcgKzMwOTQsNyBAQCBzdWIgR2VuZXJhdGVIZWFkZXIKICAgICAgICAgICAgICMgdGhhdCB0
aGUgR0MgY2FsbHMgdG8gYXNrIGFuIG9iamVjdCBpcyBpdCB3b3VsZCBsaWtlIHRvIG1hcmsgYW55
dGhpbmcgZWxzZSBhZnRlciB0aGUKICAgICAgICAgICAgICMgcHJvZ3JhbSByZXN1bWVkIHNpbmNl
IHRoZSBsYXN0IGNhbGwgdG8gdmlzaXRDaGlsZHJlbiBvciB2aXNpdE91dHB1dENvbnN0cmFpbnRz
LiBTaW5jZQogICAgICAgICAgICAgIyB0aGlzIGp1c3QgY2FsbHMgdmlzaXRBZGRpdGlvbmFsQ2hp
bGRyZW4sIHlvdSB1c3VhbGx5IGRvbid0IGhhdmUgdG8gd29ycnkgYWJvdXQgdGhpcy4KLSAgICAg
ICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgc3RhdGljIHZvaWQgdmlzaXRPdXRwdXRD
b25zdHJhaW50cyhKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJik7XG4iKTsKKyAgICAgICAgICAg
IHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gc3Rh
dGljIHZvaWQgdmlzaXRPdXRwdXRDb25zdHJhaW50cyhKU0NlbGwqLCBWaXNpdG9yJik7XG4iKTsK
ICAgICAgICAgfQogICAgIH0KIApAQCAtMzIxNSw3ICszMjE1LDcgQEAgc3ViIEdlbmVyYXRlSGVh
ZGVyCiAgICAgICAgIH0KICAgICAgICAgJGhlYWRlckluY2x1ZGVzeyI8d3RmL05ldmVyRGVzdHJv
eWVkLmg+In0gPSAxOwogICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAicHVibGljOlxuIik7
Ci0gICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgYm9vbCBpc1JlYWNoYWJsZUZyb21P
cGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0LCBKU0M6
OlNsb3RWaXNpdG9yJiwgY29uc3QgY2hhcioqKSAke292ZXJyaWRlRGVjbH07XG4iKTsKKyAgICAg
ICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJv
b3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6QWJzdHJh
Y3RTbG90VmlzaXRvciYsIGNvbnN0IGNoYXIqKikgJHtvdmVycmlkZURlY2x9O1xuIik7CiAgICAg
ICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgdm9pZCBmaW5hbGl6ZShKU0M6OkhhbmRsZTxK
U0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0KSAke292ZXJyaWRlRGVjbH07XG4iKTsKICAgICAg
ICAgcHVzaChAaGVhZGVyQ29udGVudCwgIn07XG4iKTsKICAgICAgICAgcHVzaChAaGVhZGVyQ29u
dGVudCwgIlxuIik7CkBAIC00OTM5LDYgKzQ5MzksNyBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRh
dGlvbgogICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJET01Jc29TdWJzcGFjZXMuaCIpOwogICAgIEFk
ZFRvSW1wbEluY2x1ZGVzKCJXZWJDb3JlSlNDbGllbnREYXRhLmgiKTsKICAgICBBZGRUb0ltcGxJ
bmNsdWRlcygiPEphdmFTY3JpcHRDb3JlL0pTRGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBl
Lmg+Iik7CisgICAgQWRkVG9JbXBsSW5jbHVkZXMoIjxKYXZhU2NyaXB0Q29yZS9TbG90VmlzaXRv
ck1hY3Jvcy5oPiIpOwogICAgIEFkZFRvSW1wbEluY2x1ZGVzKCI8SmF2YVNjcmlwdENvcmUvU3Vi
c3BhY2VJbmxpbmVzLmg+Iik7CiAgICAgcHVzaChAaW1wbENvbnRlbnQsICJKU0M6Oklzb1N1YnNw
YWNlKiAke2NsYXNzTmFtZX06OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSlcbiIpOwogICAg
IHB1c2goQGltcGxDb250ZW50LCAie1xuIik7CkBAIC00OTU4LDcgKzQ5NTksMTAgQEAgc3ViIEdl
bmVyYXRlSW1wbGVtZW50YXRpb24KICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBhdXRvKiBz
cGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yJHtpbnRlcmZhY2VOYW1lfS5nZXQoKTtcbiIpOwog
ICAgIHB1c2goQGltcGxDb250ZW50LCAiSUdOT1JFX1dBUk5JTkdTX0JFR0lOKFwidW5yZWFjaGFi
bGUtY29kZVwiKVxuIik7CiAgICAgcHVzaChAaW1wbENvbnRlbnQsICJJR05PUkVfV0FSTklOR1Nf
QkVHSU4oXCJ0YXV0b2xvZ2ljYWwtY29tcGFyZVwiKVxuIik7Ci0gICAgcHVzaChAaW1wbENvbnRl
bnQsICIgICAgaWYgKCYke2NsYXNzTmFtZX06OnZpc2l0T3V0cHV0Q29uc3RyYWludHMgIT0gJkpT
Qzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzKVxuIik7CisgICAgcHVzaChAaW1wbENv
bnRlbnQsICIgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCos
IEpTQzo6U2xvdFZpc2l0b3ImKSA9ICR7Y2xhc3NOYW1lfTo6dmlzaXRPdXRwdXRDb25zdHJhaW50
cztcbiIpOworICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91
dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpK
U0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7XG4iKTsKKyAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIiAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRD
b25zdHJhaW50KVxuIik7CisjICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGlmICgmJHtjbGFz
c05hbWV9Ojp2aXNpdE91dHB1dENvbnN0cmFpbnRzICE9ICZKU0M6OkpTQ2VsbDo6dmlzaXRPdXRw
dXRDb25zdHJhaW50cylcbiIpOwogICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICBjbGll
bnREYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpO1xuIik7CiAgICAg
cHVzaChAaW1wbENvbnRlbnQsICJJR05PUkVfV0FSTklOR1NfRU5EXG4iKTsKICAgICBwdXNoKEBp
bXBsQ29udGVudCwgIklHTk9SRV9XQVJOSU5HU19FTkRcbiIpOwpAQCAtNDk2Niw3ICs0OTcwLDgg
QEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICBwdXNoKEBpbXBsQ29udGVudCwgIn1c
blxuIik7CiAKICAgICBpZiAoJG5lZWRzVmlzaXRDaGlsZHJlbikgewotICAgICAgICBwdXNoKEBp
bXBsQ29udGVudCwgInZvaWQgJHtjbGFzc05hbWV9Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2Vs
bCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpXG4iKTsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICJ0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPlxuIik7CisgICAgICAgIHB1c2goQGltcGxDb250
ZW50LCAidm9pZCAke2NsYXNzTmFtZX06OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwg
VmlzaXRvciYgdmlzaXRvcilcbiIpOwogICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIntcbiIp
OwogICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganND
YXN0PCR7Y2xhc3NOYW1lfSo+KGNlbGwpO1xuIik7CiAgICAgICAgIHB1c2goQGltcGxDb250ZW50
LCAiICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTtcbiIp
OwpAQCAtNDk5MSwxNCArNDk5NiwxOSBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAg
ICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAifVxuXG4i
KTsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJERUZJTkVfVklTSVRfQ0hJTERSRU4oJHtj
bGFzc05hbWV9KTtcblxuIik7CisKICAgICAgICAgaWYgKCRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0
cmlidXRlcy0+e0pTQ3VzdG9tTWFya0Z1bmN0aW9ufSkgewotICAgICAgICAgICAgcHVzaChAaW1w
bENvbnRlbnQsICJ2b2lkICR7Y2xhc3NOYW1lfTo6dmlzaXRPdXRwdXRDb25zdHJhaW50cyhKU0Nl
bGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKVxuIik7CisgICAgICAgICAgICBwdXNoKEBp
bXBsQ29udGVudCwgInRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+XG4iKTsKKyAgICAgICAgICAg
IHB1c2goQGltcGxDb250ZW50LCAidm9pZCAke2NsYXNzTmFtZX06OnZpc2l0T3V0cHV0Q29uc3Ry
YWludHMoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKVxuIik7CiAgICAgICAgICAgICBw
dXNoKEBpbXBsQ29udGVudCwgIntcbiIpOwogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICIgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDwke2NsYXNzTmFtZX0qPihjZWxsKTtcbiIp
OwogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgQVNTRVJUX0dDX09CSkVDVF9J
TkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpO1xuIik7CiAgICAgICAgICAgICBwdXNoKEBpbXBs
Q29udGVudCwgIiAgICBCYXNlOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzKHRoaXNPYmplY3QsIHZp
c2l0b3IpO1xuIik7CiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICB0aGlzT2Jq
ZWN0LT52aXNpdEFkZGl0aW9uYWxDaGlsZHJlbih2aXNpdG9yKTtcbiIpOwogICAgICAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICJ9XG5cbiIpOworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRl
bnQsICJ0ZW1wbGF0ZSB2b2lkICR7Y2xhc3NOYW1lfTo6dmlzaXRPdXRwdXRDb25zdHJhaW50cyhK
U0NlbGwqLCBBYnN0cmFjdFNsb3RWaXNpdG9yJik7XG4iKTsKKyAgICAgICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAidGVtcGxhdGUgdm9pZCAke2NsYXNzTmFtZX06OnZpc2l0T3V0cHV0Q29uc3Ry
YWludHMoSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTtcbiIpOwogICAgICAgICB9CiAgICAgfQogCkBA
IC01MDMzLDcgKzUwNDMsNyBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgIH0KIAog
ICAgIGlmIChTaG91bGRHZW5lcmF0ZVdyYXBwZXJPd25lckNvZGUoJGhhc1BhcmVudCwgJGludGVy
ZmFjZSkgJiYgIUdldEN1c3RvbUlzUmVhY2hhYmxlKCRpbnRlcmZhY2UpKSB7Ci0gICAgICAgIHB1
c2goQGltcGxDb250ZW50LCAiYm9vbCBKUyR7aW50ZXJmYWNlTmFtZX1Pd25lcjo6aXNSZWFjaGFi
bGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQq
LCBTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbilcbiIpOworICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgImJvb2wgSlMke2ludGVyZmFjZU5hbWV9T3duZXI6OmlzUmVh
Y2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2
b2lkKiwgQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbilc
biIpOwogICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIntcbiIpOwogICAgICAgICAjIEFsbCBB
Y3RpdmVET01PYmplY3RzIGltcGxlbWVudCBoYXNQZW5kaW5nQWN0aXZpdHkoKSwgYnV0IG5vdCBh
bGwgb2YgdGhlbQogICAgICAgICAjIGluY3JlbWVudCB0aGVpciBDKysgcmVmZXJlbmNlIGNvdW50
cyB3aGVuIGhhc1BlbmRpbmdBY3Rpdml0eSgpIGJlY29tZXMKQEAgLTY0MzIsNiArNjQ0Miw3IEBA
IHN1YiBHZW5lcmF0ZUNhbGxiYWNrSGVhZGVyQ29udGVudAogICAgICAgICBwdXNoKEAkY29udGVu
dFJlZiwgIiAgICBib29sIGhhc0NhbGxiYWNrKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9kYXRh
ICYmIG1fZGF0YS0+Y2FsbGJhY2soKTsgfVxuXG4iKTsKICAgICB9CiAKKyAgICBwdXNoKEAkY29u
dGVudFJlZiwgIiAgICB2b2lkIHZpc2l0SlNGdW5jdGlvbihKU0M6OkFic3RyYWN0U2xvdFZpc2l0
b3ImKSBvdmVycmlkZTtcblxuIikgaWYgJGludGVyZmFjZU9yQ2FsbGJhY2stPmV4dGVuZGVkQXR0
cmlidXRlcy0+e0lzV2Vha0NhbGxiYWNrfTsKICAgICBwdXNoKEAkY29udGVudFJlZiwgIiAgICB2
b2lkIHZpc2l0SlNGdW5jdGlvbihKU0M6OlNsb3RWaXNpdG9yJikgb3ZlcnJpZGU7XG5cbiIpIGlm
ICRpbnRlcmZhY2VPckNhbGxiYWNrLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntJc1dlYWtDYWxsYmFj
a307CiAKICAgICBwdXNoKEAkY29udGVudFJlZiwgIiAgICAke2NhbGxiYWNrRGF0YVR5cGV9KiBt
X2RhdGE7XG4iKTsKQEAgLTY2MjMsNiArNjYzNCwxMCBAQCBzdWIgR2VuZXJhdGVDYWxsYmFja0lt
cGxlbWVudGF0aW9uQ29udGVuCiAgICAgfQogCiAgICAgaWYgKCRpbnRlcmZhY2VPckNhbGxiYWNr
LT5leHRlbmRlZEF0dHJpYnV0ZXMtPntJc1dlYWtDYWxsYmFja30pIHsKKyAgICAgICAgcHVzaChA
JGNvbnRlbnRSZWYsICJ2b2lkICR7Y2xhc3NOYW1lfTo6dmlzaXRKU0Z1bmN0aW9uKEpTQzo6QWJz
dHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcilcbiIpOworICAgICAgICBwdXNoKEAkY29udGVudFJl
ZiwgIntcbiIpOworICAgICAgICBwdXNoKEAkY29udGVudFJlZiwgIiAgICBtX2RhdGEtPnZpc2l0
SlNGdW5jdGlvbih2aXNpdG9yKTtcbiIpOworICAgICAgICBwdXNoKEAkY29udGVudFJlZiwgIn1c
blxuIik7CiAgICAgICAgIHB1c2goQCRjb250ZW50UmVmLCAidm9pZCAke2NsYXNzTmFtZX06OnZp
c2l0SlNGdW5jdGlvbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKVxuIik7CiAgICAgICAgIHB1
c2goQCRjb250ZW50UmVmLCAie1xuIik7CiAgICAgICAgIHB1c2goQCRjb250ZW50UmVmLCAiICAg
IG1fZGF0YS0+dmlzaXRKU0Z1bmN0aW9uKHZpc2l0b3IpO1xuIik7CkBAIC02NzM0LDYgKzY3NDks
NyBAQCBzdWIgR2VuZXJhdGVJdGVyYWJsZURlZmluaXRpb24KICAgICBteSAkdmlzaWJsZUludGVy
ZmFjZU5hbWUgPSAkY29kZUdlbmVyYXRvci0+R2V0VmlzaWJsZUludGVyZmFjZU5hbWUoJGludGVy
ZmFjZSk7CiAKICAgICBBZGRUb0ltcGxJbmNsdWRlcygiSlNET01JdGVyYXRvci5oIik7CisgICAg
QWRkVG9JbXBsSW5jbHVkZXMoIjxKYXZhU2NyaXB0Q29yZS9TbG90VmlzaXRvck1hY3Jvcy5oPiIp
OwogCiAgICAgcmV0dXJuIHVubGVzcyBJc0tleVZhbHVlSXRlcmFibGVJbnRlcmZhY2UoJGludGVy
ZmFjZSk7CiAKQEAgLTY3NzcsNyArNjc5Myw5IEBAIHB1YmxpYzoKICAgICAgICAgYXV0byogc3Bh
Y2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvciR7aXRlcmF0b3JOYW1lfS5nZXQoKTsKIElHTk9SRV9X
QVJOSU5HU19CRUdJTihcInVucmVhY2hhYmxlLWNvZGVcIikKIElHTk9SRV9XQVJOSU5HU19CRUdJ
TihcInRhdXRvbG9naWNhbC1jb21wYXJlXCIpCi0gICAgICAgIGlmICgmJHtpdGVyYXRvck5hbWV9
Ojp2aXNpdE91dHB1dENvbnN0cmFpbnRzICE9ICZKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25z
dHJhaW50cykKKyAgICAgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpT
Q2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9ICR7aXRlcmF0b3JOYW1lfTo6dmlzaXRPdXRwdXRD
b25zdHJhaW50czsKKyAgICAgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCko
SlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRw
dXRDb25zdHJhaW50czsKKyAgICAgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpz
Q2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKICAgICAgICAgICAgIGNsaWVudERhdGEub3V0cHV0
Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7CiBJR05PUkVfV0FSTklOR1NfRU5ECiBJ
R05PUkVfV0FSTklOR1NfRU5ECkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vQWN0aXZlRE9NQ2Fs
bGJhY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vQWN0aXZlRE9NQ2FsbGJh
Y2suaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL1dlYkNvcmUvZG9tL0FjdGl2ZURPTUNh
bGxiYWNrLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0
IChDKSAyMDEwLCAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQpAQCAtMzMsNiArMzQsNyBAQAogI2luY2x1ZGUgIkNv
bnRleHREZXN0cnVjdGlvbk9ic2VydmVyLmgiCiAKIG5hbWVzcGFjZSBKU0MgeworY2xhc3MgQWJz
dHJhY3RTbG90VmlzaXRvcjsKIGNsYXNzIFNsb3RWaXNpdG9yOwogfQogCkBAIC01NSw2ICs1Nyw3
IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCBib29sIGFjdGl2ZURPTU9iamVjdHNBcmVT
dXNwZW5kZWQoKSBjb25zdDsKICAgICBXRUJDT1JFX0VYUE9SVCBib29sIGFjdGl2ZURPTU9iamVj
dEFyZVN0b3BwZWQoKSBjb25zdDsKICAgICAKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXRKU0Z1bmN0
aW9uKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpIHsgfQogICAgIHZpcnR1YWwgdm9pZCB2aXNp
dEpTRnVuY3Rpb24oSlNDOjpTbG90VmlzaXRvciYpIHsgfQogfTsKIApJbmRleDogU291cmNlL1dl
YkNvcmUvZG9tL0V2ZW50TGlzdGVuZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9k
b20vRXZlbnRMaXN0ZW5lci5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9k
b20vRXZlbnRMaXN0ZW5lci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAwNiwgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI0LDYgKzI0LDcgQEAKICNpbmNsdWRl
IDx3dGYvV2Vha1B0ci5oPgogCiBuYW1lc3BhY2UgSlNDIHsKK2NsYXNzIEFic3RyYWN0U2xvdFZp
c2l0b3I7CiBjbGFzcyBKU09iamVjdDsKIGNsYXNzIFNsb3RWaXNpdG9yOwogfQpAQCAtNTIsNiAr
NTMsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGhhbmRsZUV2ZW50KFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQmLCBFdmVudCYpID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgd2FzQ3JlYXRlZEZy
b21NYXJrdXAoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogCisgICAgdmlydHVhbCB2b2lkIHZp
c2l0SlNGdW5jdGlvbihKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKSB7IH0KICAgICB2aXJ0dWFs
IHZvaWQgdmlzaXRKU0Z1bmN0aW9uKEpTQzo6U2xvdFZpc2l0b3ImKSB7IH0KIAogICAgIHZpcnR1
YWwgYm9vbCBpc0F0dHJpYnV0ZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9kb20vRXZlbnRUYXJnZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2RvbS9FdmVudFRhcmdldC5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJD
b3JlL2RvbS9FdmVudFRhcmdldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIsNyArMiw3IEBACiAg
KiBDb3B5cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKICAqICAgICAg
ICAgICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKICAqICAgICAg
ICAgICAoQykgMjAwMSBEaXJrIE11ZWxsZXIgKG11ZWxsZXJAa2RlLm9yZykKLSAqIENvcHlyaWdo
dCAoQykgMjAwNC0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAwNC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENv
cHlyaWdodCAoQykgMjAwNiBBbGV4ZXkgUHJvc2t1cnlha292IChhcEB3ZWJraXQub3JnKQogICog
ICAgICAgICAgIChDKSAyMDA3LCAyMDA4IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBr
ZGUub3JnPgogICoKQEAgLTM4NCw3ICszODQsOCBAQCB2b2lkIEV2ZW50VGFyZ2V0OjpyZW1vdmVB
bGxFdmVudExpc3RlbmVyCiAgICAgdGhyZWFkRGF0YS5zZXRJc0luUmVtb3ZlQWxsRXZlbnRMaXN0
ZW5lcnMoZmFsc2UpOwogfQogCi12b2lkIEV2ZW50VGFyZ2V0Ojp2aXNpdEpTRXZlbnRMaXN0ZW5l
cnMoSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+
Cit2b2lkIEV2ZW50VGFyZ2V0Ojp2aXNpdEpTRXZlbnRMaXN0ZW5lcnMoVmlzaXRvciYgdmlzaXRv
cikKIHsKICAgICBFdmVudFRhcmdldERhdGEqIGRhdGEgPSBldmVudFRhcmdldERhdGFDb25jdXJy
ZW50bHkoKTsKICAgICBpZiAoIWRhdGEpCkBAIC0zOTYsNiArMzk3LDkgQEAgdm9pZCBFdmVudFRh
cmdldDo6dmlzaXRKU0V2ZW50TGlzdGVuZXJzKAogICAgICAgICBsaXN0ZW5lci0+dmlzaXRKU0Z1
bmN0aW9uKHZpc2l0b3IpOwogfQogCit0ZW1wbGF0ZSB2b2lkIEV2ZW50VGFyZ2V0Ojp2aXNpdEpT
RXZlbnRMaXN0ZW5lcnMoSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lk
IEV2ZW50VGFyZ2V0Ojp2aXNpdEpTRXZlbnRMaXN0ZW5lcnMoSlNDOjpTbG90VmlzaXRvciYpOwor
CiB2b2lkIEV2ZW50VGFyZ2V0OjppbnZhbGlkYXRlRXZlbnRMaXN0ZW5lclJlZ2lvbnMoKQogewog
ICAgIGlmIChpczxFbGVtZW50PigqdGhpcykpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9F
dmVudFRhcmdldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9FdmVudFRhcmdl
dC5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRUYXJnZXQu
aAkod29ya2luZyBjb3B5KQpAQCAtMiw3ICsyLDcgQEAKICAqIENvcHlyaWdodCAoQykgMTk5OSBM
YXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQogICogICAgICAgICAgIChDKSAxOTk5IEFudHRpIEtv
aXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQogICogICAgICAgICAgIChDKSAyMDAxIERpcmsgTXVl
bGxlciAobXVlbGxlckBrZGUub3JnKQotICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMTcgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA2IEFsZXhl
eSBQcm9za3VyeWFrb3YgKGFwQHdlYmtpdC5vcmcpCiAgKiAgICAgICAgICAgKEMpIDIwMDcsIDIw
MDggTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CiAgKgpAQCAtOTcsNyAr
OTcsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBmaXJlRXZlbnRMaXN0ZW5lcnMoRXZlbnQmLCBFdmVu
dEludm9rZVBoYXNlKTsKICAgICBib29sIGlzRmlyaW5nRXZlbnRMaXN0ZW5lcnMoKSBjb25zdDsK
IAotICAgIHZvaWQgdmlzaXRKU0V2ZW50TGlzdGVuZXJzKEpTQzo6U2xvdFZpc2l0b3ImKTsKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIHZpc2l0SlNFdmVudExpc3RlbmVycyhW
aXNpdG9yJik7CiAgICAgdm9pZCBpbnZhbGlkYXRlSlNFdmVudExpc3RlbmVycyhKU0M6OkpTT2Jq
ZWN0Kik7CiAKICAgICBjb25zdCBFdmVudFRhcmdldERhdGEqIGV2ZW50VGFyZ2V0RGF0YSgpIGNv
bnN0OwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL011dGF0aW9uUmVjb3JkLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vTXV0YXRpb25SZWNvcmQuY3BwCShyZXZpc2lvbiAy
NzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vTXV0YXRpb25SZWNvcmQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKQEAgLTQxLDcgKzQyLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBuYW1lc3BhY2Ugewog
Ci1zdGF0aWMgdm9pZCB2aXNpdE5vZGVMaXN0KEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IsIE5v
ZGVMaXN0JiBub2RlTGlzdCkKK3N0YXRpYyB2b2lkIHZpc2l0Tm9kZUxpc3QoSlNDOjpBYnN0cmFj
dFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBOb2RlTGlzdCYgbm9kZUxpc3QpCiB7CiAgICAgQVNTRVJU
KCFub2RlTGlzdC5pc0xpdmVOb2RlTGlzdCgpKTsKICAgICB1bnNpZ25lZCBsZW5ndGggPSBub2Rl
TGlzdC5sZW5ndGgoKTsKQEAgLTY4LDcgKzY5LDcgQEAgcHJpdmF0ZToKICAgICBOb2RlKiBwcmV2
aW91c1NpYmxpbmcoKSBvdmVycmlkZSB7IHJldHVybiBtX3ByZXZpb3VzU2libGluZy5nZXQoKTsg
fQogICAgIE5vZGUqIG5leHRTaWJsaW5nKCkgb3ZlcnJpZGUgeyByZXR1cm4gbV9uZXh0U2libGlu
Zy5nZXQoKTsgfQogCi0gICAgdm9pZCB2aXNpdE5vZGVzQ29uY3VycmVudGx5KEpTQzo6U2xvdFZp
c2l0b3ImIHZpc2l0b3IpIGNvbnN0IGZpbmFsCisgICAgdm9pZCB2aXNpdE5vZGVzQ29uY3VycmVu
dGx5KEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikgY29uc3QgZmluYWwKICAgICB7
CiAgICAgICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChyb290KG1fdGFyZ2V0LnB0cigpKSk7CiAg
ICAgICAgIGlmIChtX2FkZGVkTm9kZXMpCkBAIC0xMDUsNyArMTA2LDcgQEAgcHJpdmF0ZToKICAg
ICAgICAgcmV0dXJuIG5vZGVMaXN0LmdldCgpOwogICAgIH0KIAotICAgIHZvaWQgdmlzaXROb2Rl
c0NvbmN1cnJlbnRseShKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKSBjb25zdCBmaW5hbAorICAg
IHZvaWQgdmlzaXROb2Rlc0NvbmN1cnJlbnRseShKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImIHZp
c2l0b3IpIGNvbnN0IGZpbmFsCiAgICAgewogICAgICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qo
cm9vdChtX3RhcmdldC5wdHIoKSkpOwogICAgIH0KQEAgLTE2NCw3ICsxNjUsNyBAQCBwcml2YXRl
OgogCiAgICAgU3RyaW5nIG9sZFZhbHVlKCkgb3ZlcnJpZGUgeyByZXR1cm4gU3RyaW5nKCk7IH0K
IAotICAgIHZvaWQgdmlzaXROb2Rlc0NvbmN1cnJlbnRseShKU0M6OlNsb3RWaXNpdG9yJiB2aXNp
dG9yKSBjb25zdCBmaW5hbAorICAgIHZvaWQgdmlzaXROb2Rlc0NvbmN1cnJlbnRseShKU0M6OkFi
c3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0IGZpbmFsCiAgICAgewogICAgICAgICBt
X3JlY29yZC0+dmlzaXROb2Rlc0NvbmN1cnJlbnRseSh2aXNpdG9yKTsKICAgICB9CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9kb20vTXV0YXRpb25SZWNvcmQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9kb20vTXV0YXRpb25SZWNvcmQuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNl
L1dlYkNvcmUvZG9tL011dGF0aW9uUmVjb3JkLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2
IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQpAQCAtMzYsNyArMzcsNyBA
QAogCiBuYW1lc3BhY2UgSlNDIHsKIAotY2xhc3MgU2xvdFZpc2l0b3I7CitjbGFzcyBBYnN0cmFj
dFNsb3RWaXNpdG9yOwogCiB9CiAKQEAgLTcyLDcgKzczLDcgQEAgcHVibGljOgogCiAgICAgdmly
dHVhbCBTdHJpbmcgb2xkVmFsdWUoKSB7IHJldHVybiBTdHJpbmcoKTsgfQogCi0gICAgdmlydHVh
bCB2b2lkIHZpc2l0Tm9kZXNDb25jdXJyZW50bHkoSlNDOjpTbG90VmlzaXRvciYpIGNvbnN0ID0g
MDsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXROb2Rlc0NvbmN1cnJlbnRseShKU0M6OkFic3RyYWN0
U2xvdFZpc2l0b3ImKSBjb25zdCA9IDA7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZUZpbHRlckNvbmRpdGlvbi5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlRmlsdGVyQ29uZGl0aW9uLmgJKHJldmlzaW9uIDI3
MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlRmlsdGVyQ29uZGl0aW9uLmgJKHdvcmtp
bmcgY29weSkKQEAgLTM4LDcgKzM4LDcgQEAgY2xhc3MgTm9kZUZpbHRlckNvbmRpdGlvbiA6IHB1
YmxpYyBSZWZDbwogcHVibGljOgogICAgIHZpcnR1YWwgfk5vZGVGaWx0ZXJDb25kaXRpb24oKSA9
IGRlZmF1bHQ7CiAgICAgdmlydHVhbCB1bnNpZ25lZCBzaG9ydCBhY2NlcHROb2RlKE5vZGUmKSBj
b25zdCA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHZpc2l0QWdncmVnYXRlKEpTQzo6U2xvdFZpc2l0
b3ImKSB7IH0KKy8vICAgIHZpcnR1YWwgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShKU0M6OlNsb3RWaXNp
dG9yJikgeyB9IC8vIG1sYW0gVU5VU0VECiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vU3RhdGljUmFuZ2UuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2RvbS9TdGF0aWNSYW5nZS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNv
dXJjZS9XZWJDb3JlL2RvbS9TdGF0aWNSYW5nZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03Niw3
ICs3Niw3IEBAIEV4Y2VwdGlvbk9yPFJlZjxTdGF0aWNSYW5nZT4+IFN0YXRpY1JhbmcKICAgICBy
ZXR1cm4gY3JlYXRlKHsgeyBpbml0LnN0YXJ0Q29udGFpbmVyLnJlbGVhc2VOb25OdWxsKCksIGlu
aXQuc3RhcnRPZmZzZXQgfSwgeyBpbml0LmVuZENvbnRhaW5lci5yZWxlYXNlTm9uTnVsbCgpLCBp
bml0LmVuZE9mZnNldCB9IH0pOwogfQogCi12b2lkIFN0YXRpY1JhbmdlOjp2aXNpdE5vZGVzQ29u
Y3VycmVudGx5KEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0Cit2b2lkIFN0YXRpY1Jh
bmdlOjp2aXNpdE5vZGVzQ29uY3VycmVudGx5KEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYgdmlz
aXRvcikgY29uc3QKIHsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qocm9vdChzdGFydC5jb250
YWluZXIuZ2V0KCkpKTsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qocm9vdChlbmQuY29udGFp
bmVyLmdldCgpKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vU3RhdGljUmFuZ2UuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vU3RhdGljUmFuZ2UuaAkocmV2aXNpb24gMjcy
ODMwKQorKysgU291cmNlL1dlYkNvcmUvZG9tL1N0YXRpY1JhbmdlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjAgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC0zMCw3ICszMCw3IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1jbGFzcyBTbG90VmlzaXRv
cjsKK2NsYXNzIEFic3RyYWN0U2xvdFZpc2l0b3I7CiAKIH0KIApAQCAtNTgsNyArNTgsNyBAQCBw
dWJsaWM6CiAgICAgdW5zaWduZWQgZW5kT2Zmc2V0KCkgY29uc3QgZmluYWwgeyByZXR1cm4gU2lt
cGxlUmFuZ2U6OmVuZE9mZnNldCgpOyB9CiAgICAgYm9vbCBjb2xsYXBzZWQoKSBjb25zdCBmaW5h
bCB7IHJldHVybiBTaW1wbGVSYW5nZTo6Y29sbGFwc2VkKCk7IH0KIAotICAgIHZvaWQgdmlzaXRO
b2Rlc0NvbmN1cnJlbnRseShKU0M6OlNsb3RWaXNpdG9yJikgY29uc3Q7CisgICAgdm9pZCB2aXNp
dE5vZGVzQ29uY3VycmVudGx5KEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpIGNvbnN0OwogCiBw
cml2YXRlOgogICAgIFN0YXRpY1JhbmdlKFNpbXBsZVJhbmdlJiYpOwpJbmRleDogU291cmNlL1dl
YkNvcmUvaHRtbC9jYW52YXMvV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5jcHAJ
KHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMMlJl
bmRlcmluZ0NvbnRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxNS0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzA3OCw3ICszMDc4LDcgQEAg
Ym9vbCBXZWJHTDJSZW5kZXJpbmdDb250ZXh0OjpjaGVja0FuZFRyYQogICAgIHJldHVybiB0cnVl
OwogfQogCi12b2lkIFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OmFkZE1lbWJlcnNUb09wYXF1ZVJv
b3RzKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIFdlYkdMMlJlbmRlcmluZ0NvbnRl
eHQ6OmFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYgdmlz
aXRvcikKIHsKICAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjphZGRNZW1iZXJzVG9PcGFx
dWVSb290cyh2aXNpdG9yKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2Vi
R0wyUmVuZGVyaW5nQ29udGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL1dlYkdMMlJlbmRlcmluZ0NvbnRleHQuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE3IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMjYxLDcgKzI2MSw3IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgY2hlY2tBbmRU
cmFuc2xhdGVBdHRhY2htZW50cyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDR0xlbnVtLCBW
ZWN0b3I8R0NHTGVudW0+Jik7CiAKLSAgICB2b2lkIGFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKEpT
Qzo6U2xvdFZpc2l0b3ImKSBvdmVycmlkZTsKKyAgICB2b2lkIGFkZE1lbWJlcnNUb09wYXF1ZVJv
b3RzKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpIG92ZXJyaWRlOwogCiBwcml2YXRlOgogICAg
IFdlYkdMMlJlbmRlcmluZ0NvbnRleHQoQ2FudmFzQmFzZSYsIEdyYXBoaWNzQ29udGV4dEdMQXR0
cmlidXRlcyk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEZyYW1lYnVm
ZmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEZy
YW1lYnVmZmVyLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9j
YW52YXMvV2ViR0xGcmFtZWJ1ZmZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02Myw3ICs2Myw3
IEBAIG5hbWVzcGFjZSB7CiAgICAgICAgIHZvaWQgb25EZXRhY2hlZChjb25zdCBBYnN0cmFjdExv
Y2tlciYsIEdyYXBoaWNzQ29udGV4dEdMKikgb3ZlcnJpZGU7CiAgICAgICAgIHZvaWQgYXR0YWNo
KEdyYXBoaWNzQ29udGV4dEdMKiwgR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBhdHRhY2htZW50
KSBvdmVycmlkZTsKICAgICAgICAgdm9pZCB1bmF0dGFjaChHcmFwaGljc0NvbnRleHRHTCosIEdD
R0xlbnVtIHRhcmdldCwgR0NHTGVudW0gYXR0YWNobWVudCkgb3ZlcnJpZGU7Ci0gICAgICAgIHZv
aWQgYWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMoY29uc3QgQWJzdHJhY3RMb2NrZXImLCBKU0M6OlNs
b3RWaXNpdG9yJikgb3ZlcnJpZGU7CisgICAgICAgIHZvaWQgYWRkTWVtYmVyc1RvT3BhcXVlUm9v
dHMoY29uc3QgQWJzdHJhY3RMb2NrZXImLCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKSBvdmVy
cmlkZTsKIAogICAgICAgICBXZWJHTFJlbmRlcmJ1ZmZlckF0dGFjaG1lbnQoKSB7IH07CiAKQEAg
LTE0NSw3ICsxNDUsNyBAQCBuYW1lc3BhY2UgewogICAgICAgICAgICAgY29udGV4dC0+ZnJhbWVi
dWZmZXJSZW5kZXJidWZmZXIodGFyZ2V0LCBhdHRhY2htZW50LCBHcmFwaGljc0NvbnRleHRHTDo6
UkVOREVSQlVGRkVSLCAwKTsKICAgICB9CiAKLSAgICB2b2lkIFdlYkdMUmVuZGVyYnVmZmVyQXR0
YWNobWVudDo6YWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMoY29uc3QgQWJzdHJhY3RMb2NrZXImLCBK
U0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQorICAgIHZvaWQgV2ViR0xSZW5kZXJidWZmZXJBdHRh
Y2htZW50OjphZGRNZW1iZXJzVG9PcGFxdWVSb290cyhjb25zdCBBYnN0cmFjdExvY2tlciYsIEpT
Qzo6QWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKICAgICB7CiAgICAgICAgIHZpc2l0b3Iu
YWRkT3BhcXVlUm9vdChtX3JlbmRlcmJ1ZmZlci5nZXQoKSk7CiAgICAgfQpAQCAtMTY5LDcgKzE2
OSw3IEBAIG5hbWVzcGFjZSB7CiAgICAgICAgIHZvaWQgb25EZXRhY2hlZChjb25zdCBBYnN0cmFj
dExvY2tlciYsIEdyYXBoaWNzQ29udGV4dEdMKikgb3ZlcnJpZGU7CiAgICAgICAgIHZvaWQgYXR0
YWNoKEdyYXBoaWNzQ29udGV4dEdMKiwgR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBhdHRhY2ht
ZW50KSBvdmVycmlkZTsKICAgICAgICAgdm9pZCB1bmF0dGFjaChHcmFwaGljc0NvbnRleHRHTCos
IEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gYXR0YWNobWVudCkgb3ZlcnJpZGU7Ci0gICAgICAg
IHZvaWQgYWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMoY29uc3QgQWJzdHJhY3RMb2NrZXImLCBKU0M6
OlNsb3RWaXNpdG9yJikgb3ZlcnJpZGU7CisgICAgICAgIHZvaWQgYWRkTWVtYmVyc1RvT3BhcXVl
Um9vdHMoY29uc3QgQWJzdHJhY3RMb2NrZXImLCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKSBv
dmVycmlkZTsKIAogICAgICAgICBXZWJHTFRleHR1cmVBdHRhY2htZW50KCkgeyB9OwogCkBAIC0y
NjcsNyArMjY3LDcgQEAgbmFtZXNwYWNlIHsKICNlbmRpZgogICAgIH0KIAotICAgIHZvaWQgV2Vi
R0xUZXh0dXJlQXR0YWNobWVudDo6YWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMoY29uc3QgQWJzdHJh
Y3RMb2NrZXImLCBKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQorICAgIHZvaWQgV2ViR0xUZXh0
dXJlQXR0YWNobWVudDo6YWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMoY29uc3QgQWJzdHJhY3RMb2Nr
ZXImLCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiAgICAgewogICAgICAgICB2
aXNpdG9yLmFkZE9wYXF1ZVJvb3QobV90ZXh0dXJlLmdldCgpKTsKICAgICB9CkBAIC03MjEsNyAr
NzIxLDcgQEAgR0NHTGVudW0gV2ViR0xGcmFtZWJ1ZmZlcjo6Z2V0RHJhd0J1ZmZlcgogICAgIHJl
dHVybiBHcmFwaGljc0NvbnRleHRHTDo6Tk9ORTsKIH0KIAotdm9pZCBXZWJHTEZyYW1lYnVmZmVy
OjphZGRNZW1iZXJzVG9PcGFxdWVSb290cyhjb25zdCBBYnN0cmFjdExvY2tlciYgbG9ja2VyLCBK
U0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBXZWJHTEZyYW1lYnVmZmVyOjphZGRNZW1i
ZXJzVG9PcGFxdWVSb290cyhjb25zdCBBYnN0cmFjdExvY2tlciYgbG9ja2VyLCBKU0M6OkFic3Ry
YWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgZm9yIChhdXRvJiBlbnRyeSA6IG1fYXR0
YWNobWVudHMpCiAgICAgICAgIGVudHJ5LnZhbHVlLT5hZGRNZW1iZXJzVG9PcGFxdWVSb290cyhs
b2NrZXIsIHZpc2l0b3IpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xG
cmFtZWJ1ZmZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dl
YkdMRnJhbWVidWZmZXIuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvV2ViR0xGcmFtZWJ1ZmZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM0LDcgKzM0LDcgQEAK
ICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBKU0MgewotY2xhc3MgU2xvdFZp
c2l0b3I7CitjbGFzcyBBYnN0cmFjdFNsb3RWaXNpdG9yOwogfQogCiBuYW1lc3BhY2UgV1RGIHsK
QEAgLTY1LDcgKzY1LDcgQEAgcHVibGljOgogICAgICAgICB2aXJ0dWFsIHZvaWQgb25EZXRhY2hl
ZChjb25zdCBXVEY6OkFic3RyYWN0TG9ja2VyJiwgR3JhcGhpY3NDb250ZXh0R0wqKSA9IDA7CiAg
ICAgICAgIHZpcnR1YWwgdm9pZCBhdHRhY2goR3JhcGhpY3NDb250ZXh0R0wqLCBHQ0dMZW51bSB0
YXJnZXQsIEdDR0xlbnVtIGF0dGFjaG1lbnQpID0gMDsKICAgICAgICAgdmlydHVhbCB2b2lkIHVu
YXR0YWNoKEdyYXBoaWNzQ29udGV4dEdMKiwgR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBhdHRh
Y2htZW50KSA9IDA7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBhZGRNZW1iZXJzVG9PcGFxdWVSb290
cyhjb25zdCBXVEY6OkFic3RyYWN0TG9ja2VyJiwgSlNDOjpTbG90VmlzaXRvciYpID0gMDsKKyAg
ICAgICAgdmlydHVhbCB2b2lkIGFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKGNvbnN0IFdURjo6QWJz
dHJhY3RMb2NrZXImLCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKSA9IDA7CiAKICAgICBwcm90
ZWN0ZWQ6CiAgICAgICAgIFdlYkdMQXR0YWNobWVudCgpOwpAQCAtMTE0LDcgKzExNCw3IEBAIHB1
YmxpYzoKIAogICAgIEdDR0xlbnVtIGdldERyYXdCdWZmZXIoR0NHTGVudW0pOwogCi0gICAgdm9p
ZCBhZGRNZW1iZXJzVG9PcGFxdWVSb290cyhjb25zdCBXVEY6OkFic3RyYWN0TG9ja2VyJiwgSlND
OjpTbG90VmlzaXRvciYpOworICAgIHZvaWQgYWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMoY29uc3Qg
V1RGOjpBYnN0cmFjdExvY2tlciYsIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpOwogCiBwcml2
YXRlOgogICAgIFdlYkdMRnJhbWVidWZmZXIoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSYpOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xQcm9ncmFtLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFByb2dyYW0uY3BwCShyZXZp
c2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFByb2dyYW0u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDktMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTIwNiw3ICsyMDYsNyBAQCBib29sIFdlYkdMUHJvZ3JhbTo6ZGV0
YWNoU2hhZGVyKGNvbnN0IEFiCiAgICAgfQogfQogCi12b2lkIFdlYkdMUHJvZ3JhbTo6YWRkTWVt
YmVyc1RvT3BhcXVlUm9vdHMoY29uc3QgQWJzdHJhY3RMb2NrZXImLCBKU0M6OlNsb3RWaXNpdG9y
JiB2aXNpdG9yKQordm9pZCBXZWJHTFByb2dyYW06OmFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKGNv
bnN0IEFic3RyYWN0TG9ja2VyJiwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQog
ewogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChtX3ZlcnRleFNoYWRlci5nZXQoKSk7CiAgICAg
dmlzaXRvci5hZGRPcGFxdWVSb290KG1fZnJhZ21lbnRTaGFkZXIuZ2V0KCkpOwpJbmRleDogU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xQcm9ncmFtLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xQcm9ncmFtLmgJKHJldmlzaW9uIDI3MjgzMCkK
KysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUHJvZ3JhbS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOS0yMDE3IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMzUsNyArMzUsNyBAQAogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNw
YWNlIEpTQyB7Ci1jbGFzcyBTbG90VmlzaXRvcjsKK2NsYXNzIEFic3RyYWN0U2xvdFZpc2l0b3I7
CiB9CiAKIG5hbWVzcGFjZSBXVEYgewpAQCAtODgsNyArODgsNyBAQCBwdWJsaWM6CiAgICAgICAg
IHJldHVybiBtX3JlcXVpcmVkVHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJDb3VudDsKICAgICB9CiAK
LSAgICB2b2lkIGFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKGNvbnN0IFdURjo6QWJzdHJhY3RMb2Nr
ZXImLCBKU0M6OlNsb3RWaXNpdG9yJik7CisgICAgdm9pZCBhZGRNZW1iZXJzVG9PcGFxdWVSb290
cyhjb25zdCBXVEY6OkFic3RyYWN0TG9ja2VyJiwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJik7
CiAKIHByaXZhdGU6CiAgICAgV2ViR0xQcm9ncmFtKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2Um
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2UuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2Vi
Q29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTc5MzEsNyArNzkzMSw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZTo6ZGlzcGF0Y2gKICAgICBxdWV1ZVRhc2tUb0Rpc3BhdGNoRXZlbnQoKmNhbnZhcywgVGFza1Nv
dXJjZTo6V2ViR0wsIFdlYkdMQ29udGV4dEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLndlYmds
Y29udGV4dGNoYW5nZWRFdmVudCwgRXZlbnQ6OkNhbkJ1YmJsZTo6Tm8sIEV2ZW50OjpJc0NhbmNl
bGFibGU6OlllcywgZW1wdHlTdHJpbmcoKSkpOwogfQogCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2U6OmFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0
b3IpCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmFkZE1lbWJlcnNUb09wYXF1ZVJv
b3RzKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBhdXRvIGxvY2tl
ciA9IGhvbGRMb2NrKG9iamVjdEdyYXBoTG9jaygpKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuaAkocmV2
aXNpb24gMjcyODMwKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJp
bmdDb250ZXh0QmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxNS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTgsNyArNTgsNyBAQAogI2VuZGlm
CiAKIG5hbWVzcGFjZSBKU0MgewotY2xhc3MgU2xvdFZpc2l0b3I7CitjbGFzcyBBYnN0cmFjdFNs
b3RWaXNpdG9yOwogfQogCiBuYW1lc3BhY2UgV1RGIHsKQEAgLTQxMSw3ICs0MTEsNyBAQCBwdWJs
aWM6CiAgICAgdm9pZCByZWN5Y2xlQ29udGV4dCgpIG92ZXJyaWRlOwogICAgIHZvaWQgZGlzcGF0
Y2hDb250ZXh0Q2hhbmdlZE5vdGlmaWNhdGlvbigpIG92ZXJyaWRlOwogCi0gICAgdmlydHVhbCB2
b2lkIGFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKEpTQzo6U2xvdFZpc2l0b3ImKTsKKyAgICB2aXJ0
dWFsIHZvaWQgYWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMoSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9y
Jik7CiAgICAgLy8gVGhpcyBsb2NrIG11c3QgYmUgaGVsZCBhY3Jvc3MgYWxsIG11dGF0aW9ucyBv
ZiBjb250YWluZXJzIGxpa2UKICAgICAvLyBWZWN0b3JzLCBIYXNoU2V0cywgZXRjLiB3aGljaCBj
b250YWluIFJlZlB0cjxXZWJHTE9iamVjdD4sIGFuZAogICAgIC8vIHdoaWNoIGFyZSB0cmF2ZXJz
ZWQgYnkgYWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMoKSBvciBhbnkgb2YgdGhlCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFRyYW5zZm9ybUZlZWRiYWNrLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFRyYW5zZm9ybUZlZWRiYWNr
LmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2Vi
R0xUcmFuc2Zvcm1GZWVkYmFjay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzAsOCArMzAsNyBAQAogCiAj
aW5jbHVkZSAiV2ViR0xDb250ZXh0R3JvdXAuaCIKICNpbmNsdWRlICJXZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvU2xvdFZpc2l0b3IuaD4KLSNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9TbG90VmlzaXRvcklubGluZXMuaD4KKyNpbmNsdWRlIDxK
YXZhU2NyaXB0Q29yZS9BYnN0cmFjdFNsb3RWaXNpdG9ySW5saW5lcy5oPgogI2luY2x1ZGUgPHd0
Zi9Mb2NrLmg+CiAjaW5jbHVkZSA8d3RmL0xvY2tlci5oPgogCkBAIC05Myw3ICs5Miw3IEBAIGJv
b2wgV2ViR0xUcmFuc2Zvcm1GZWVkYmFjazo6aGFzRW5vdWdoQnUKICAgICByZXR1cm4gdHJ1ZTsK
IH0KIAotdm9pZCBXZWJHTFRyYW5zZm9ybUZlZWRiYWNrOjphZGRNZW1iZXJzVG9PcGFxdWVSb290
cyhjb25zdCBBYnN0cmFjdExvY2tlciYgbG9ja2VyLCBKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9y
KQordm9pZCBXZWJHTFRyYW5zZm9ybUZlZWRiYWNrOjphZGRNZW1iZXJzVG9PcGFxdWVSb290cyhj
b25zdCBBYnN0cmFjdExvY2tlciYgbG9ja2VyLCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImIHZp
c2l0b3IpCiB7CiAgICAgZm9yIChhdXRvJiBidWZmZXIgOiBtX2JvdW5kSW5kZXhlZFRyYW5zZm9y
bUZlZWRiYWNrQnVmZmVycykKICAgICAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KGJ1ZmZlci5n
ZXQoKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFRyYW5zZm9ybUZl
ZWRiYWNrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xU
cmFuc2Zvcm1GZWVkYmFjay5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9XZWJHTFRyYW5zZm9ybUZlZWRiYWNrLmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0z
MSw3ICszMSw3IEBACiAjaW5jbHVkZSAiV2ViR0xTaGFyZWRPYmplY3QuaCIKIAogbmFtZXNwYWNl
IEpTQyB7Ci1jbGFzcyBTbG90VmlzaXRvcjsKK2NsYXNzIEFic3RyYWN0U2xvdFZpc2l0b3I7CiB9
CiAKIG5hbWVzcGFjZSBXVEYgewpAQCAtNzAsNyArNzAsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAg
Ym9vbCBoYXNFbm91Z2hCdWZmZXJzKEdDR0x1aW50IG51bVJlcXVpcmVkKSBjb25zdDsKIAotICAg
IHZvaWQgYWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMoY29uc3QgQWJzdHJhY3RMb2NrZXImLCBKU0M6
OlNsb3RWaXNpdG9yJik7CisgICAgdm9pZCBhZGRNZW1iZXJzVG9PcGFxdWVSb290cyhjb25zdCBB
YnN0cmFjdExvY2tlciYsIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpOwogCiBwcml2YXRlOgog
ICAgIFdlYkdMVHJhbnNmb3JtRmVlZGJhY2soV2ViR0wyUmVuZGVyaW5nQ29udGV4dCYpOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xWZXJ0ZXhBcnJheU9iamVjdEJhc2Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVmVydGV4
QXJyYXlPYmplY3RCYXNlLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvV2ViR0xWZXJ0ZXhBcnJheU9iamVjdEJhc2UuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE3IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIxIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMjksOCArMjksNyBAQAogI2lmIEVOQUJMRShXRUJHTCkKIAogI2luY2x1ZGUgIldlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2UuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9TbG90Vmlz
aXRvci5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1Nsb3RWaXNpdG9ySW5saW5lcy5oPgor
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0Fic3RyYWN0U2xvdFZpc2l0b3JJbmxpbmVzLmg+CiAj
aW5jbHVkZSA8d3RmL0xvY2tlci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0xMDksNyAr
MTA4LDcgQEAgdm9pZCBXZWJHTFZlcnRleEFycmF5T2JqZWN0QmFzZTo6c2V0VmVydAogICAgIG1f
dmVydGV4QXR0cmliU3RhdGVbaW5kZXhdLmRpdmlzb3IgPSBkaXZpc29yOwogfQogCi12b2lkIFdl
YkdMVmVydGV4QXJyYXlPYmplY3RCYXNlOjphZGRNZW1iZXJzVG9PcGFxdWVSb290cyhjb25zdCBB
YnN0cmFjdExvY2tlciYsIEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIFdlYkdMVmVy
dGV4QXJyYXlPYmplY3RCYXNlOjphZGRNZW1iZXJzVG9PcGFxdWVSb290cyhjb25zdCBBYnN0cmFj
dExvY2tlciYsIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB2aXNp
dG9yLmFkZE9wYXF1ZVJvb3QobV9ib3VuZEVsZW1lbnRBcnJheUJ1ZmZlci5nZXQoKSk7CiAgICAg
Zm9yIChhdXRvJiBzdGF0ZSA6IG1fdmVydGV4QXR0cmliU3RhdGUpCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9odG1sL2NhbnZhcy9XZWJHTFZlcnRleEFycmF5T2JqZWN0QmFzZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVmVydGV4QXJyYXlPYmplY3RCYXNl
LmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdM
VmVydGV4QXJyYXlPYmplY3RCYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMiw3ICszMiw3IEBA
CiAjaW5jbHVkZSAiV2ViR0xDb250ZXh0T2JqZWN0LmgiCiAKIG5hbWVzcGFjZSBKU0MgewotY2xh
c3MgU2xvdFZpc2l0b3I7CitjbGFzcyBBYnN0cmFjdFNsb3RWaXNpdG9yOwogfQogCiBuYW1lc3Bh
Y2UgV1RGIHsKQEAgLTc3LDcgKzc3LDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBzZXRWZXJ0ZXhB
dHRyaWJEaXZpc29yKEdDR0x1aW50IGluZGV4LCBHQ0dMdWludCBkaXZpc29yKTsKIAotICAgIHZv
aWQgYWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMoY29uc3QgV1RGOjpBYnN0cmFjdExvY2tlciYsIEpT
Qzo6U2xvdFZpc2l0b3ImKTsKKyAgICB2b2lkIGFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKGNvbnN0
IFdURjo6QWJzdHJhY3RMb2NrZXImLCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKTsKIAogcHJv
dGVjdGVkOgogICAgIFdlYkdMVmVydGV4QXJyYXlPYmplY3RCYXNlKFdlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2UmLCBUeXBlKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>420455</attachid>
            <date>2021-02-16 05:17:44 -0800</date>
            <delta_ts>2021-02-16 11:42:22 -0800</delta_ts>
            <desc>work in progress.</desc>
            <filename>bug-217274p2.patch</filename>
            <type>text/plain</type>
            <size>594769</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDI3MjkwMikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtNjEzLDYgKzYxMyw4IEBAIHNldChKYXZhU2NyaXB0Q29yZV9QUklWQVRFX0ZSQU1FV09SS19I
RUEKICAgICBkb21qaXQvRE9NSklUSGVhcFJhbmdlLmgKICAgICBkb21qaXQvRE9NSklUU2lnbmF0
dXJlLmgKIAorICAgIGhlYXAvQWJzdHJhY3RTbG90VmlzaXRvci5oCisgICAgaGVhcC9BYnN0cmFj
dFNsb3RWaXNpdG9ySW5saW5lcy5oCiAgICAgaGVhcC9BbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmgK
ICAgICBoZWFwL0FsbG9jYXRpb25GYWlsdXJlTW9kZS5oCiAgICAgaGVhcC9BbGxvY2F0b3IuaApA
QCAtNjc4LDYgKzY4MCw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9QUklWQVRFX0ZSQU1FV09SS19I
RUEKICAgICBoZWFwL01hcmtlZEJsb2NrU2V0LmgKICAgICBoZWFwL01hcmtlZFNwYWNlLmgKICAg
ICBoZWFwL01hcmtpbmdDb25zdHJhaW50LmgKKyAgICBoZWFwL01hcmtpbmdDb25zdHJhaW50RXhl
Y3V0b3JQYWlyLmgKICAgICBoZWFwL011dGF0b3JTdGF0ZS5oCiAgICAgaGVhcC9QYWNrZWRDZWxs
UHRyLmgKICAgICBoZWFwL1ByZWNpc2VBbGxvY2F0aW9uLmgKQEAgLTY4NywxMiArNjkwLDE0IEBA
IHNldChKYXZhU2NyaXB0Q29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUEKICAgICBoZWFwL1NpbXBs
ZU1hcmtpbmdDb25zdHJhaW50LmgKICAgICBoZWFwL1Nsb3RWaXNpdG9yLmgKICAgICBoZWFwL1Ns
b3RWaXNpdG9ySW5saW5lcy5oCisgICAgaGVhcC9TbG90VmlzaXRvck1hY3Jvcy5oCiAgICAgaGVh
cC9TdHJvbmcuaAogICAgIGhlYXAvU3Ryb25nSW5saW5lcy5oCiAgICAgaGVhcC9TdWJzcGFjZS5o
CiAgICAgaGVhcC9TdWJzcGFjZUlubGluZXMuaAogICAgIGhlYXAvU3luY2hyb25vdXNuZXNzLmgK
ICAgICBoZWFwL1RpbnlCbG9vbUZpbHRlci5oCisgICAgaGVhcC9WZXJpZmllclNsb3RWaXNpdG9y
LmgKICAgICBoZWFwL1Zpc2l0UmFjZUtleS5oCiAgICAgaGVhcC9XZWFrLmgKICAgICBoZWFwL1dl
YWtCbG9jay5oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CShyZXZpc2lvbiAyNzI5
MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQJKHdvcmtpbmcgY29weSkK
QEAgLTU2Myw2ICs1NjMsNyBAQCBoZWFwL1N0b3BJZk5lY2Vzc2FyeVRpbWVyLmNwcAogaGVhcC9T
dWJzcGFjZS5jcHAKIGhlYXAvU3luY2hyb25vdXNTdG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1bGVy
LmNwcAogaGVhcC9TeW5jaHJvbm91c25lc3MuY3BwCitoZWFwL1ZlcmlmaWVyU2xvdFZpc2l0b3Iu
Y3BwCiBoZWFwL1Zpc2l0UmFjZUtleS5jcHAKIGhlYXAvV2Vhay5jcHAKIGhlYXAvV2Vha0Jsb2Nr
LmNwcApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0FQSVdyYXBwZXJPYmplY3Qu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQVBJV3JhcHBlck9i
amVjdC5oCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pT
QVBJV3JhcHBlck9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDEsNyArNDEsNyBAQCBwdWJs
aWM6CiAgICAgc3RhdGljIHZvaWQgc3Vic3BhY2VGb3IoVk0mKSB7IFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7IH0KICAgICAKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7Ci0gICAg
c3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJik7Cisg
ICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTl9XSVRIX01PRElGSUVSKEpTX0VYUE9SVF9QUklWQVRF
KTsKICAgICAKICAgICB2b2lkKiB3cmFwcGVkT2JqZWN0KCkgeyByZXR1cm4gbV93cmFwcGVkT2Jq
ZWN0OyB9CiAgICAgdm9pZCBzZXRXcmFwcGVkT2JqZWN0KHZvaWQqKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9BUEkvSlNBUElXcmFwcGVyT2JqZWN0Lm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNBUElXcmFwcGVyT2JqZWN0Lm1tCShyZXZpc2lvbiAy
NzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQVBJV3JhcHBlck9iamVjdC5t
bQkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTM3LDcgKzM3LDcgQEAKIGNsYXNzIEpTQVBJV3JhcHBlck9i
amVjdEhhbmRsZU93bmVyIGZpbmFsIDogcHVibGljIEpTQzo6V2Vha0hhbmRsZU93bmVyIHsKIHB1
YmxpYzoKICAgICB2b2lkIGZpbmFsaXplKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQq
KSBmaW5hbDsKLSAgICBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxl
PEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6U2xvdFZpc2l0b3ImLCBjb25zdCBj
aGFyKiopIGZpbmFsOworICAgIGJvb2wgaXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpI
YW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCwgSlNDOjpBYnN0cmFjdFNsb3RWaXNp
dG9yJiwgY29uc3QgY2hhcioqKSBmaW5hbDsKIH07CiAKIHN0YXRpYyBKU0FQSVdyYXBwZXJPYmpl
Y3RIYW5kbGVPd25lcioganNBUElXcmFwcGVyT2JqZWN0SGFuZGxlT3duZXIoKQpAQCAtNTYsMTQg
KzU2LDE0IEBAIHZvaWQgSlNBUElXcmFwcGVyT2JqZWN0SGFuZGxlT3duZXI6OmZpbmEKICAgICBK
U0M6OldlYWtTZXQ6OmRlYWxsb2NhdGUoSlNDOjpXZWFrSW1wbDo6YXNXZWFrSW1wbChoYW5kbGUu
c2xvdCgpKSk7CiB9CiAKLWJvb2wgSlNBUElXcmFwcGVyT2JqZWN0SGFuZGxlT3duZXI6OmlzUmVh
Y2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2
b2lkKiwgSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqKQorYm9vbCBKU0FQ
SVdyYXBwZXJPYmplY3RIYW5kbGVPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlND
OjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBKU0M6OkFic3RyYWN0U2xvdFZp
c2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKikKIHsKICAgICBKU0M6OkpTQVBJV3JhcHBlck9i
amVjdCogd3JhcHBlck9iamVjdCA9IEpTQzo6anNDYXN0PEpTQzo6SlNBUElXcmFwcGVyT2JqZWN0
Kj4oaGFuZGxlLmdldCgpLmFzQ2VsbCgpKTsKICAgICAvLyBXZSB1c2UgdGhlIEpTR2xvYmFsT2Jq
ZWN0IHdoZW4gcHJvY2Vzc2luZyB3ZWFrIGhhbmRsZXMgdG8gcHJldmVudCB0aGUgc2l0dWF0aW9u
IHdoZXJlIHVzaW5nCiAgICAgLy8gdGhlIHNhbWUgT2JqZWN0aXZlLUMgb2JqZWN0IGluIG11bHRp
cGxlIGdsb2JhbCBvYmplY3RzIGtlZXBzIGFsbCBvZiB0aGUgZ2xvYmFsIG9iamVjdHMgYWxpdmUu
CiAgICAgaWYgKCF3cmFwcGVyT2JqZWN0LT53cmFwcGVkT2JqZWN0KCkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICByZXR1cm4gdmlzaXRvci52bSgpLmhlYXAuaXNNYXJrZWQod3JhcHBlck9i
amVjdC0+c3RydWN0dXJlKCktPmdsb2JhbE9iamVjdCgpKSAmJiB2aXNpdG9yLmNvbnRhaW5zT3Bh
cXVlUm9vdCh3cmFwcGVyT2JqZWN0LT53cmFwcGVkT2JqZWN0KCkpOworICAgIHJldHVybiB2aXNp
dG9yLmlzTWFya2VkKHdyYXBwZXJPYmplY3QtPnN0cnVjdHVyZSgpLT5nbG9iYWxPYmplY3QoKSkg
JiYgdmlzaXRvci5jb250YWluc09wYXF1ZVJvb3Qod3JhcHBlck9iamVjdC0+d3JhcHBlZE9iamVj
dCgpKTsKIH0KIAogbmFtZXNwYWNlIEpTQyB7CkBAIC03Myw2ICs3Myw4IEBAIHN0YXRpYyBKU0Nf
REVDTEFSRV9IT1NUX0ZVTkNUSU9OKGNvbnN0cnUKIHN0YXRpYyBKU0NfREVDTEFSRV9DVVNUT01f
R0VUVEVSKGNhbGxiYWNrR2V0dGVySlNBUElXcmFwcGVyT2JqZWN0Q2FsbGJhY2tPYmplY3QpOwog
c3RhdGljIEpTQ19ERUNMQVJFX0NVU1RPTV9HRVRURVIoc3RhdGljRnVuY3Rpb25HZXR0ZXJKU0FQ
SVdyYXBwZXJPYmplY3RDYWxsYmFja09iamVjdCk7CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTl9X
SVRIX01PRElGSUVSKHRlbXBsYXRlPD4sIEpTQ2FsbGJhY2tPYmplY3Q8SlNBUElXcmFwcGVyT2Jq
ZWN0Pik7CisKIHRlbXBsYXRlIDw+IGNvbnN0IENsYXNzSW5mbyBKU0NhbGxiYWNrT2JqZWN0PEpT
QVBJV3JhcHBlck9iamVjdD46OnNfaW5mbyA9IHsgIkpTQVBJV3JhcHBlck9iamVjdCIsICZCYXNl
OjpzX2luZm8sIG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNDYWxsYmFj
a09iamVjdCkgfTsKIHRlbXBsYXRlIDw+IGNvbnN0IGJvb2wgSlNDYWxsYmFja09iamVjdDxKU0FQ
SVdyYXBwZXJPYmplY3Q+OjpuZWVkc0Rlc3RydWN0aW9uID0gdHJ1ZTsKIApAQCAtMTIzLDcgKzEy
NSw4IEBAIHZvaWQgSlNBUElXcmFwcGVyT2JqZWN0OjpzZXRXcmFwcGVkT2JqZWMKICAgICBtX3dy
YXBwZWRPYmplY3QgPSBbc3RhdGljX2Nhc3Q8aWQ+KHdyYXBwZWRPYmplY3QpIHJldGFpbl07CiB9
CiAKLXZvaWQgSlNBUElXcmFwcGVyT2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwg
SlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2
b2lkIEpTQVBJV3JhcHBlck9iamVjdDo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBW
aXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTQVBJV3JhcHBlck9iamVjdCogdGhpc09iamVjdCA9
IEpTQzo6anNDYXN0PEpTQVBJV3JhcHBlck9iamVjdCo+KGNlbGwpOwogICAgIEJhc2U6OnZpc2l0
Q2hpbGRyZW4oY2VsbCwgdmlzaXRvcik7CkBAIC0xMzMsNiArMTM2LDggQEAgdm9pZCBKU0FQSVdy
YXBwZXJPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSgogICAgICAgICBzY2FuRXh0ZXJuYWxPYmplY3RH
cmFwaCh2aXNpdG9yLnZtKCksIHZpc2l0b3IsIHdyYXBwZWRPYmplY3QpOwogfQogCitERUZJTkVf
VklTSVRfQ0hJTERSRU5fV0lUSF9NT0RJRklFUihKU19FWFBPUlRfUFJJVkFURSwgSlNBUElXcmFw
cGVyT2JqZWN0KTsKKwogdGVtcGxhdGUgPD4KIElzb1N1YnNwYWNlKiBKU0NhbGxiYWNrT2JqZWN0
PEpTQVBJV3JhcHBlck9iamVjdD46OnN1YnNwYWNlRm9ySW1wbChWTSYgdm0sIFN1YnNwYWNlQWNj
ZXNzIG1vZGUpCiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tP
YmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxs
YmFja09iamVjdC5jcHAJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9BUEkvSlNDYWxsYmFja09iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMTcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwNyBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJr
aXQub3JnPgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtNDEsNiArNDEsOSBAQCBzdGF0aWMgSlNDX0RF
Q0xBUkVfQ1VTVE9NX0dFVFRFUihzdGF0aWNGCiBzdGF0aWMgSlNDX0RFQ0xBUkVfQ1VTVE9NX0dF
VFRFUihjYWxsYmFja0dldHRlckpTR2xvYmFsT2JqZWN0Q2FsbGJhY2tPYmplY3QpOwogc3RhdGlj
IEpTQ19ERUNMQVJFX0NVU1RPTV9HRVRURVIoc3RhdGljRnVuY3Rpb25HZXR0ZXJKU0dsb2JhbE9i
amVjdENhbGxiYWNrT2JqZWN0KTsKIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOX1dJVEhfTU9ESUZJ
RVIodGVtcGxhdGU8PiwgSlNDYWxsYmFja09iamVjdDxKU05vbkZpbmFsT2JqZWN0Pik7CitERUZJ
TkVfVklTSVRfQ0hJTERSRU5fV0lUSF9NT0RJRklFUih0ZW1wbGF0ZTw+LCBKU0NhbGxiYWNrT2Jq
ZWN0PEpTR2xvYmFsT2JqZWN0Pik7CisKIC8vIERlZmluZSB0aGUgdHdvIHR5cGVzIG9mIEpTQ2Fs
bGJhY2tPYmplY3RzIHdlIHN1cHBvcnQuCiB0ZW1wbGF0ZSA8PiBjb25zdCBDbGFzc0luZm8gSlND
YWxsYmFja09iamVjdDxKU05vbkZpbmFsT2JqZWN0Pjo6c19pbmZvID0geyAiQ2FsbGJhY2tPYmpl
Y3QiLCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxF
KEpTQ2FsbGJhY2tPYmplY3QpIH07CiB0ZW1wbGF0ZSA8PiBjb25zdCBDbGFzc0luZm8gSlNDYWxs
YmFja09iamVjdDxKU0dsb2JhbE9iamVjdD46OnNfaW5mbyA9IHsgIkNhbGxiYWNrR2xvYmFsT2Jq
ZWN0IiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJM
RShKU0NhbGxiYWNrT2JqZWN0KSB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9K
U0NhbGxiYWNrT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQ
SS9KU0NhbGxiYWNrT2JqZWN0LmgJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwNyBFcmljIFNlaWRlbCA8ZXJpY0B3
ZWJraXQub3JnPgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtNjksNyArNjksMTAgQEAgcHVibGljOgog
ICAgICAgICBtX3ByaXZhdGVQcm9wZXJ0aWVzLT5kZWxldGVQcml2YXRlUHJvcGVydHkocHJvcGVy
dHlOYW1lKTsKICAgICB9CiAKLSAgICB2b2lkIHZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZp
c2l0b3IpCisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKKworICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFZpc2l0b3I+CisgICAgdm9pZCB2aXNpdENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiAg
ICAgewogICAgICAgICBKU1ByaXZhdGVQcm9wZXJ0eU1hcCogcHJvcGVydGllcyA9IG1fcHJpdmF0
ZVByb3BlcnRpZXMuZ2V0KCk7CiAgICAgICAgIGlmICghcHJvcGVydGllcykKQEAgLTEwMyw3ICsx
MDYsOCBAQCBwdWJsaWM6CiAgICAgICAgICAgICBtX3Byb3BlcnR5TWFwLnJlbW92ZShwcm9wZXJ0
eU5hbWUuaW1wbCgpKTsKICAgICAgICAgfQogCi0gICAgICAgIHZvaWQgdmlzaXRDaGlsZHJlbihT
bG90VmlzaXRvciYgdmlzaXRvcikKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4K
KyAgICAgICAgdm9pZCB2aXNpdENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiAgICAgICAgIHsK
ICAgICAgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fbG9jayk7CiAgICAgICAgICAgICBmb3Ig
KGF1dG8mIHBhaXIgOiBtX3Byb3BlcnR5TWFwKSB7CkBAIC0yMTYsMTMgKzIyMCw3IEBAIHByaXZh
dGU6CiAgICAgc3RhdGljIENhbGxEYXRhIGdldENvbnN0cnVjdERhdGEoSlNDZWxsKik7CiAgICAg
c3RhdGljIENhbGxEYXRhIGdldENhbGxEYXRhKEpTQ2VsbCopOwogCi0gICAgc3RhdGljIHZvaWQg
dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQotICAgIHsK
LSAgICAgICAgSlNDYWxsYmFja09iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0NhbGxiYWNr
T2JqZWN0Kj4oY2VsbCk7Ci0gICAgICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoKHN0YXRp
Y19jYXN0PFBhcmVudCo+KHRoaXNPYmplY3QpKSwgSlNDYWxsYmFja09iamVjdDxQYXJlbnQ+Ojpp
bmZvKCkpOwotICAgICAgICBQYXJlbnQ6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRv
cik7Ci0gICAgICAgIHRoaXNPYmplY3QtPm1fY2FsbGJhY2tPYmplY3REYXRhLT52aXNpdENoaWxk
cmVuKHZpc2l0b3IpOwotICAgIH0KKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAg
dm9pZCBpbml0KEpTR2xvYmFsT2JqZWN0Kik7CiAgCkBAIC0yNDMsNiArMjQxLDE2IEBAIHByaXZh
dGU6CiAgICAgY29uc3QgQ2xhc3NJbmZvKiBtX2NsYXNzSW5mbyB7IG51bGxwdHIgfTsKIH07CiAK
K3RlbXBsYXRlIDxjbGFzcyBQYXJlbnQ+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9p
ZCBKU0NhbGxiYWNrT2JqZWN0PFBhcmVudD46OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2Vs
bCwgVmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBKU0NhbGxiYWNrT2JqZWN0KiB0aGlzT2JqZWN0
ID0ganNDYXN0PEpTQ2FsbGJhY2tPYmplY3QqPihjZWxsKTsKKyAgICBBU1NFUlRfR0NfT0JKRUNU
X0lOSEVSSVRTKChzdGF0aWNfY2FzdDxQYXJlbnQqPih0aGlzT2JqZWN0KSksIEpTQ2FsbGJhY2tP
YmplY3Q8UGFyZW50Pjo6aW5mbygpKTsKKyAgICBQYXJlbnQ6OnZpc2l0Q2hpbGRyZW4odGhpc09i
amVjdCwgdmlzaXRvcik7CisgICAgdGhpc09iamVjdC0+bV9jYWxsYmFja09iamVjdERhdGEtPnZp
c2l0Q2hpbGRyZW4odmlzaXRvcik7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAvLyBpbmNs
dWRlIHRoZSBhY3R1YWwgdGVtcGxhdGUgY2xhc3MgaW1wbGVtZW50YXRpb24KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNNYW5hZ2VkVmFsdWUubW0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU01hbmFnZWRWYWx1ZS5tbQkocmV2aXNpb24gMjcyOTAy
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU01hbmFnZWRWYWx1ZS5tbQkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC00Miw3ICs0Miw3IEBACiBjbGFzcyBKU01hbmFnZWRWYWx1ZUhhbmRsZU93
bmVyIGZpbmFsIDogcHVibGljIEpTQzo6V2Vha0hhbmRsZU93bmVyIHsKIHB1YmxpYzoKICAgICB2
b2lkIGZpbmFsaXplKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQpIGZp
bmFsOwotICAgIGJvb2wgaXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlND
OjpVbmtub3duPiwgdm9pZCogY29udGV4dCwgSlNDOjpTbG90VmlzaXRvciYsIGNvbnN0IGNoYXIq
KikgZmluYWw7CisgICAgYm9vbCBpc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRs
ZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0LCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3Im
LCBjb25zdCBjaGFyKiopIGZpbmFsOwogfTsKIAogc3RhdGljIEpTTWFuYWdlZFZhbHVlSGFuZGxl
T3duZXImIG1hbmFnZWRWYWx1ZUhhbmRsZU93bmVyKCkKQEAgLTE4MCw3ICsxODAsNyBAQCBAaW50
ZXJmYWNlIEpTTWFuYWdlZFZhbHVlIChQcml2YXRlTWV0aG9kCiAtICh2b2lkKWRpc2Nvbm5lY3RW
YWx1ZTsKIEBlbmQKIAotYm9vbCBKU01hbmFnZWRWYWx1ZUhhbmRsZU93bmVyOjppc1JlYWNoYWJs
ZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0
LCBKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQorYm9vbCBK
U01hbmFnZWRWYWx1ZUhhbmRsZU93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6
OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0LCBKU0M6OkFic3RyYWN0U2xvdFZp
c2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCiB7CiAgICAgaWYgKFVOTElLRUxZ
KHJlYXNvbikpCiAgICAgICAgICpyZWFzb24gPSAiSlNNYW5hZ2VkVmFsdWUgaXMgb3BhcXVlIHJv
b3QiOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU01hcmtpbmdDb25zdHJhaW50
UHJpdmF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU01h
cmtpbmdDb25zdHJhaW50UHJpdmF0ZS5jcHAJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9BUEkvSlNNYXJraW5nQ29uc3RyYWludFByaXZhdGUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zNiw3ICszNiw3IEBAIG5hbWVzcGFjZSB7CiBBdG9taWM8dW5zaWduZWQ+IGNv
bnN0cmFpbnRDb3VudGVyOwogCiBzdHJ1Y3QgTWFya2VyIDogSlNNYXJrZXIgewotICAgIFNsb3RW
aXNpdG9yKiB2aXNpdG9yOworICAgIEFic3RyYWN0U2xvdFZpc2l0b3IqIHZpc2l0b3I7CiB9Owog
CiBib29sIGlzTWFya2VkKEpTTWFya2VyUmVmIG1hcmtlclJlZiwgSlNPYmplY3RSZWYgb2JqZWN0
UmVmKQpAQCAtNDQsNyArNDQsNyBAQCBib29sIGlzTWFya2VkKEpTTWFya2VyUmVmIG1hcmtlclJl
ZiwgSlNPCiAgICAgaWYgKCFvYmplY3RSZWYpCiAgICAgICAgIHJldHVybiB0cnVlOyAvLyBOdWxs
IGlzIGFuIGltbW9ydGFsIG9iamVjdC4KICAgICAKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8TWFy
a2VyKj4obWFya2VyUmVmKS0+dmlzaXRvci0+dm0oKS5oZWFwLmlzTWFya2VkKHRvSlMob2JqZWN0
UmVmKSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PE1hcmtlcio+KG1hcmtlclJlZiktPnZpc2l0
b3ItPmlzTWFya2VkKHRvSlMob2JqZWN0UmVmKSk7CiB9CiAKIHZvaWQgbWFyayhKU01hcmtlclJl
ZiBtYXJrZXJSZWYsIEpTT2JqZWN0UmVmIG9iamVjdFJlZikKQEAgLTczLDE0ICs3MywxNCBAQCB2
b2lkIEpTQ29udGV4dEdyb3VwQWRkTWFya2luZ0NvbnN0cmFpbnQoCiAgICAgYXV0byBjb25zdHJh
aW50ID0gbWFrZVVuaXF1ZTxTaW1wbGVNYXJraW5nQ29uc3RyYWludD4oCiAgICAgICAgIHRvQ1N0
cmluZygiQW1jIiwgY29uc3RyYWludEluZGV4LCAiKCIsIFJhd1BvaW50ZXIoYml0d2lzZV9jYXN0
PHZvaWQqPihjb25zdHJhaW50Q2FsbGJhY2spKSwgIikiKSwKICAgICAgICAgdG9DU3RyaW5nKCJB
UEkgTWFya2luZyBDb25zdHJhaW50ICMiLCBjb25zdHJhaW50SW5kZXgsICIgKCIsIFJhd1BvaW50
ZXIoYml0d2lzZV9jYXN0PHZvaWQqPihjb25zdHJhaW50Q2FsbGJhY2spKSwgIiwgIiwgUmF3UG9p
bnRlcih1c2VyRGF0YSksICIpIiksCi0gICAgICAgIFtjb25zdHJhaW50Q2FsbGJhY2ssIHVzZXJE
YXRhXSAoU2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsKKyAgICAgICAgTUFLRV9NQVJLSU5HX0NPTlNU
UkFJTlRfRVhFQ1VUT1JfUEFJUigoW2NvbnN0cmFpbnRDYWxsYmFjaywgdXNlckRhdGFdIChBYnN0
cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKSB7CiAgICAgICAgICAgICBNYXJrZXIgbWFya2VyOwog
ICAgICAgICAgICAgbWFya2VyLklzTWFya2VkID0gaXNNYXJrZWQ7CiAgICAgICAgICAgICBtYXJr
ZXIuTWFyayA9IG1hcms7CiAgICAgICAgICAgICBtYXJrZXIudmlzaXRvciA9ICZ2aXNpdG9yOwog
ICAgICAgICAgICAgCiAgICAgICAgICAgICBjb25zdHJhaW50Q2FsbGJhY2soJm1hcmtlciwgdXNl
ckRhdGEpOwotICAgICAgICB9LAorICAgICAgICB9KSksCiAgICAgICAgIHZvbGF0aWxpdHksCiAg
ICAgICAgIENvbnN0cmFpbnRDb25jdXJyZW5jeTo6U2VxdWVudGlhbCk7CiAgICAgCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmlydHVhbE1hY2hpbmUubW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1ZpcnR1YWxNYWNoaW5lLm1tCShyZXZpc2lv
biAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmlydHVhbE1hY2hpbmUu
bW0JKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0zMTUsNyArMzE1LDcgQEAgKyAodm9pZClzZXRDcmFzaE9u
Vk1DcmVhdGlvbjooQk9PTClzaG91bAogCiBAZW5kCiAKLXN0YXRpYyB2b2lkIHNjYW5FeHRlcm5h
bE9iamVjdEdyYXBoKEpTQzo6Vk0mIHZtLCBKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yLCB2b2lk
KiByb290LCBib29sIGxvY2tBY3F1aXJlZCkKK3N0YXRpYyB2b2lkIHNjYW5FeHRlcm5hbE9iamVj
dEdyYXBoKEpTQzo6Vk0mIHZtLCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIHZv
aWQqIHJvb3QsIGJvb2wgbG9ja0FjcXVpcmVkKQogewogICAgIEBhdXRvcmVsZWFzZXBvb2wgewog
ICAgICAgICBKU1ZpcnR1YWxNYWNoaW5lICp2aXJ0dWFsTWFjaGluZSA9IFtKU1ZNV3JhcHBlckNh
Y2hlIHdyYXBwZXJGb3JKU0NvbnRleHRHcm91cFJlZjp0b1JlZigmdm0pXTsKQEAgLTM0NywxMyAr
MzQ3LDEzIEBAIHN0YXRpYyB2b2lkIHNjYW5FeHRlcm5hbE9iamVjdEdyYXBoKEpTQzoKICAgICB9
CiB9CiAKLXZvaWQgc2NhbkV4dGVybmFsT2JqZWN0R3JhcGgoSlNDOjpWTSYgdm0sIEpTQzo6U2xv
dFZpc2l0b3ImIHZpc2l0b3IsIHZvaWQqIHJvb3QpCit2b2lkIHNjYW5FeHRlcm5hbE9iamVjdEdy
YXBoKEpTQzo6Vk0mIHZtLCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIHZvaWQq
IHJvb3QpCiB7CiAgICAgYm9vbCBsb2NrQWNxdWlyZWQgPSBmYWxzZTsKICAgICBzY2FuRXh0ZXJu
YWxPYmplY3RHcmFwaCh2bSwgdmlzaXRvciwgcm9vdCwgbG9ja0FjcXVpcmVkKTsKIH0KIAotdm9p
ZCBzY2FuRXh0ZXJuYWxSZW1lbWJlcmVkU2V0KEpTQzo6Vk0mIHZtLCBKU0M6OlNsb3RWaXNpdG9y
JiB2aXNpdG9yKQordm9pZCBzY2FuRXh0ZXJuYWxSZW1lbWJlcmVkU2V0KEpTQzo6Vk0mIHZtLCBK
U0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgQGF1dG9yZWxlYXNlcG9v
bCB7CiAgICAgICAgIEpTVmlydHVhbE1hY2hpbmUgKnZpcnR1YWxNYWNoaW5lID0gW0pTVk1XcmFw
cGVyQ2FjaGUgd3JhcHBlckZvckpTQ29udGV4dEdyb3VwUmVmOnRvUmVmKCZ2bSldOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1ZpcnR1YWxNYWNoaW5lSW50ZXJuYWwuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmlydHVhbE1hY2hpbmVJbnRl
cm5hbC5oCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pT
VmlydHVhbE1hY2hpbmVJbnRlcm5hbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMyLDcgKzMyLDcg
QEAKIAogbmFtZXNwYWNlIEpTQyB7CiBjbGFzcyBWTTsKLWNsYXNzIFNsb3RWaXNpdG9yOworY2xh
c3MgQWJzdHJhY3RTbG90VmlzaXRvcjsKIH0KIAogI2lmIGRlZmluZWQoX19PQkpDX18pCkBAIC01
NCw4ICs1NCw4IEBAIEpTQ29udGV4dEdyb3VwUmVmIGdldEdyb3VwRnJvbVZpcnR1YWxNYWMKIAog
I2VuZGlmIC8vIGRlZmluZWQoX19PQkpDX18pCiAKLXZvaWQgc2NhbkV4dGVybmFsT2JqZWN0R3Jh
cGgoSlNDOjpWTSYsIEpTQzo6U2xvdFZpc2l0b3ImLCB2b2lkKiByb290KTsKLXZvaWQgc2NhbkV4
dGVybmFsUmVtZW1iZXJlZFNldChKU0M6OlZNJiwgSlNDOjpTbG90VmlzaXRvciYpOwordm9pZCBz
Y2FuRXh0ZXJuYWxPYmplY3RHcmFwaChKU0M6OlZNJiwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9y
Jiwgdm9pZCogcm9vdCk7Cit2b2lkIHNjYW5FeHRlcm5hbFJlbWVtYmVyZWRTZXQoSlNDOjpWTSYs
IEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpOwogCiAjZW5kaWYgLy8gSlNDX09CSkNfQVBJX0VO
QUJMRUQKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9NYXJrZWRKU1ZhbHVlUmVm
QXJyYXkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvTWFya2Vk
SlNWYWx1ZVJlZkFycmF5LmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL0FQSS9NYXJrZWRKU1ZhbHVlUmVmQXJyYXkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAtMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ2LDcg
KzQ2LDggQEAgTWFya2VkSlNWYWx1ZVJlZkFycmF5Ojp+TWFya2VkSlNWYWx1ZVJlZgogICAgICAg
ICByZW1vdmUoKTsKIH0KIAotdm9pZCBNYXJrZWRKU1ZhbHVlUmVmQXJyYXk6OnZpc2l0QWdncmVn
YXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3Zv
aWQgTWFya2VkSlNWYWx1ZVJlZkFycmF5Ojp2aXNpdEFnZ3JlZ2F0ZShWaXNpdG9yJiB2aXNpdG9y
KQogewogICAgIEpTVmFsdWVSZWYqIGJ1ZmZlciA9IGRhdGEoKTsKICAgICBmb3IgKHVuc2lnbmVk
IGluZGV4ID0gMDsgaW5kZXggPCBtX3NpemU7ICsraW5kZXgpIHsKQEAgLTYyLDQgKzYzLDcgQEAg
dm9pZCBNYXJrZWRKU1ZhbHVlUmVmQXJyYXk6OnZpc2l0QWdncmVnYQogICAgIH0KIH0KIAordGVt
cGxhdGUgdm9pZCBNYXJrZWRKU1ZhbHVlUmVmQXJyYXk6OnZpc2l0QWdncmVnYXRlKEFic3RyYWN0
U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgTWFya2VkSlNWYWx1ZVJlZkFycmF5Ojp2aXNp
dEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYpOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvTWFya2VkSlNWYWx1ZVJlZkFycmF5LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9NYXJrZWRKU1ZhbHVlUmVmQXJyYXkuaAko
cmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9NYXJrZWRKU1Zh
bHVlUmVmQXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDIwLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02Miw3ICs2Miw3IEBAIHB1YmxpYzoKICAgICAg
ICAgcmV0dXJuIG1faW5saW5lQnVmZmVyOwogICAgIH0KIAotICAgIHZvaWQgdmlzaXRBZ2dyZWdh
dGUoU2xvdFZpc2l0b3ImKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIHZp
c2l0QWdncmVnYXRlKFZpc2l0b3ImKTsKIAogcHJpdmF0ZToKICAgICB1bnNpZ25lZCBtX3NpemU7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNBUElXcmFwcGVyR2xvYmFs
T2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIv
SlNBUElXcmFwcGVyR2xvYmFsT2JqZWN0LmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQVBJV3JhcHBlckdsb2JhbE9iamVjdC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTU5LDYgKzU5LDggQEAgc3RhdGljIEpTQ19ERUNMQVJFX0hPU1RfRlVO
Q1RJT04oY29uc3RydQogc3RhdGljIEpTQ19ERUNMQVJFX0NVU1RPTV9HRVRURVIoY2FsbGJhY2tH
ZXR0ZXJKU0FQSVdyYXBwZXJHbG9iYWxPYmplY3RDYWxsYmFja09iamVjdCk7CiBzdGF0aWMgSlND
X0RFQ0xBUkVfQ1VTVE9NX0dFVFRFUihzdGF0aWNGdW5jdGlvbkdldHRlckpTQVBJV3JhcHBlckds
b2JhbE9iamVjdENhbGxiYWNrT2JqZWN0KTsKIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOX1dJVEhf
TU9ESUZJRVIodGVtcGxhdGU8PiwgSlNDYWxsYmFja09iamVjdDxKU0FQSVdyYXBwZXJHbG9iYWxP
YmplY3Q+KTsKKwogdGVtcGxhdGUgPD4gY29uc3QgQ2xhc3NJbmZvIEpTQ2FsbGJhY2tPYmplY3Q8
SlNBUElXcmFwcGVyR2xvYmFsT2JqZWN0Pjo6c19pbmZvID0geyAiSlNBUElXcmFwcGVyR2xvYmFs
T2JqZWN0IiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9U
QUJMRShKU0NhbGxiYWNrT2JqZWN0KSB9OwogdGVtcGxhdGU8PiBjb25zdCBib29sIEpTQ2FsbGJh
Y2tPYmplY3Q8SlNBUElXcmFwcGVyR2xvYmFsT2JqZWN0Pjo6bmVlZHNEZXN0cnVjdGlvbiA9IHRy
dWU7CiAKQEAgLTE0NCw5ICsxNDYsNCBAQCB2b2lkIEpTQVBJV3JhcHBlckdsb2JhbE9iamVjdDo6
ZmluaXNoQ3JlCiAgICAgV2Vha1NldDo6YWxsb2NhdGUodGhpcywganNBUElXcmFwcGVyR2xvYmFs
T2JqZWN0SGFuZGxlT3duZXIoKSwgMCk7IC8vIEJhbGFuY2VkIGluIEpTQVBJV3JhcHBlckdsb2Jh
bE9iamVjdEhhbmRsZU93bmVyOjpmaW5hbGl6ZS4KIH0KIAotdm9pZCBKU0FQSVdyYXBwZXJHbG9i
YWxPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBKU0M6OlNsb3RWaXNpdG9yJiB2
aXNpdG9yKQotewotICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4oY2VsbCwgdmlzaXRvcik7Ci19Ci0K
IH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGli
L0pTQVBJV3JhcHBlckdsb2JhbE9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvZ2xpYi9KU0FQSVdyYXBwZXJHbG9iYWxPYmplY3QuaAkocmV2aXNpb24gMjcy
OTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQVBJV3JhcHBlckdsb2Jh
bE9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw3ICszOSw2IEBAIHB1YmxpYzoKICAgICBz
dGF0aWMgdm9pZCBzdWJzcGFjZUZvcihWTSYpIHsgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsgfQogCiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOwotICAgIHN0YXRpYyB2b2lkIHZp
c2l0Q2hpbGRyZW4oSlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpOwogCiAgICAgSlNDR0xpYldy
YXBwZXJPYmplY3QqIHdyYXBwZWRPYmplY3QoKSBjb25zdCB7IHJldHVybiBtX3dyYXBwZWRPYmpl
Y3Q7IH0KICAgICB2b2lkIHNldFdyYXBwZWRPYmplY3QoSlNDR0xpYldyYXBwZXJPYmplY3QqIHdy
YXBwZWRPYmplY3QpIHsgbV93cmFwcGVkT2JqZWN0ID0gd3JhcHBlZE9iamVjdDsgfQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQVBJV3JhcHBlck9iamVjdEdMaWIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0FQSVdyYXBw
ZXJPYmplY3RHTGliLmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL0FQSS9nbGliL0pTQVBJV3JhcHBlck9iamVjdEdMaWIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSlNBUElXcmFw
cGVyT2JqZWN0LmgiCiAKKyNpbmNsdWRlICJBYnN0cmFjdFNsb3RWaXNpdG9yLmgiCiAjaW5jbHVk
ZSAiSlNDR0xpYldyYXBwZXJPYmplY3QuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5j
bHVkZSAiSlNDYWxsYmFja09iamVjdC5oIgpAQCAtMzYsNyArMzcsNyBAQAogY2xhc3MgSlNBUElX
cmFwcGVyT2JqZWN0SGFuZGxlT3duZXIgZmluYWwgOiBwdWJsaWMgSlNDOjpXZWFrSGFuZGxlT3du
ZXIgewogcHVibGljOgogICAgIHZvaWQgZmluYWxpemUoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3du
Piwgdm9pZCopIGZpbmFsOwotICAgIGJvb2wgaXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlND
OjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCwgSlNDOjpTbG90VmlzaXRvciYs
IGNvbnN0IGNoYXIqKikgZmluYWw7CisgICAgYm9vbCBpc1JlYWNoYWJsZUZyb21PcGFxdWVSb290
cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0LCBKU0M6OkFic3RyYWN0
U2xvdFZpc2l0b3ImLCBjb25zdCBjaGFyKiopIGZpbmFsOwogfTsKIAogc3RhdGljIEpTQVBJV3Jh
cHBlck9iamVjdEhhbmRsZU93bmVyKiBqc0FQSVdyYXBwZXJPYmplY3RIYW5kbGVPd25lcigpCkBA
IC01NSw3ICs1Niw3IEBAIHZvaWQgSlNBUElXcmFwcGVyT2JqZWN0SGFuZGxlT3duZXI6OmZpbmEK
ICAgICBKU0M6OldlYWtTZXQ6OmRlYWxsb2NhdGUoSlNDOjpXZWFrSW1wbDo6YXNXZWFrSW1wbCho
YW5kbGUuc2xvdCgpKSk7CiB9CiAKLWJvb2wgSlNBUElXcmFwcGVyT2JqZWN0SGFuZGxlT3duZXI6
OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFu
ZGxlLCB2b2lkKiwgSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqKQorYm9v
bCBKU0FQSVdyYXBwZXJPYmplY3RIYW5kbGVPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9v
dHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBKU0M6OkFic3RyYWN0
U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKikKIHsKICAgICBKU0M6OkpTQVBJV3Jh
cHBlck9iamVjdCogd3JhcHBlck9iamVjdCA9IEpTQzo6anNDYXN0PEpTQzo6SlNBUElXcmFwcGVy
T2JqZWN0Kj4oaGFuZGxlLmdldCgpLmFzQ2VsbCgpKTsKICAgICAvLyBXZSB1c2UgdGhlIEpTR2xv
YmFsT2JqZWN0IHdoZW4gcHJvY2Vzc2luZyB3ZWFrIGhhbmRsZXMgdG8gcHJldmVudCB0aGUgc2l0
dWF0aW9uIHdoZXJlIHVzaW5nCkBAIC03Miw2ICs3Myw4IEBAIHN0YXRpYyBKU0NfREVDTEFSRV9I
T1NUX0ZVTkNUSU9OKGNvbnN0cnUKIHN0YXRpYyBKU0NfREVDTEFSRV9DVVNUT01fR0VUVEVSKGNh
bGxiYWNrR2V0dGVySlNBUElXcmFwcGVyT2JqZWN0Q2FsbGJhY2tPYmplY3QpOwogc3RhdGljIEpT
Q19ERUNMQVJFX0NVU1RPTV9HRVRURVIoc3RhdGljRnVuY3Rpb25HZXR0ZXJKU0FQSVdyYXBwZXJP
YmplY3RDYWxsYmFja09iamVjdCk7CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTl9XSVRIX01PRElG
SUVSKHRlbXBsYXRlPD4sIEpTQ2FsbGJhY2tPYmplY3Q8SlNBUElXcmFwcGVyT2JqZWN0Pik7CisK
IHRlbXBsYXRlIDw+IGNvbnN0IENsYXNzSW5mbyBKU0NhbGxiYWNrT2JqZWN0PEpTQVBJV3JhcHBl
ck9iamVjdD46OnNfaW5mbyA9IHsgIkpTQVBJV3JhcHBlck9iamVjdCIsICZCYXNlOjpzX2luZm8s
IG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNDYWxsYmFja09iamVjdCkg
fTsKIHRlbXBsYXRlPD4gY29uc3QgYm9vbCBKU0NhbGxiYWNrT2JqZWN0PEpTQVBJV3JhcHBlck9i
amVjdD46Om5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOwogCkBAIC0xNTUsOSArMTU4LDEyIEBAIHZv
aWQgSlNBUElXcmFwcGVyT2JqZWN0OjpzZXRXcmFwcGVkT2JqZWMKICAgICBtX3dyYXBwZWRPYmpl
Y3QgPSB3cmFwcGVkT2JqZWN0OwogfQogCi12b2lkIEpTQVBJV3JhcHBlck9iamVjdDo6dmlzaXRD
aGlsZHJlbihKU0NlbGwqIGNlbGwsIEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0
ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0FQSVdyYXBwZXJPYmplY3Q6OnZpc2l0Q2hpbGRy
ZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBCYXNlOjp2aXNp
dENoaWxkcmVuKGNlbGwsIHZpc2l0b3IpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU5fV0lU
SF9NT0RJRklFUihKU19FWFBPUlRfUFJJVkFURSwgSlNBUElXcmFwcGVyT2JqZWN0KTsKKwogfSAv
LyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNp
b24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTExNTgsNiArMTE1OCw3IEBA
CiAJCTY1QjgzOTJFMUJBQ0FEMzYwMDQ0RTgyNCAvKiBDYWNoZWRSZWNvdmVyeS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjVCODM5MkMxQkFDQTkyQTAw
NDRFODI0IC8qIENhY2hlZFJlY292ZXJ5LmggKi87IH07CiAJCTZBMzhDRkFBMUUzMkI1QUIwMDYw
MjA2RiAvKiBBc3luY1N0YWNrVHJhY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDZBMzhDRkE4MUUzMkI1OEIwMDYwMjA2RiAvKiBBc3luY1N0YWNrVHJh
Y2UuaCAqLzsgfTsKIAkJNkFEMkNCNEQxOUI5MTQwMTAwMDY1NzE5IC8qIERlYnVnZ2VyRXZhbEVu
YWJsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZB
RDJDQjRDMTlCOTE0MDEwMDA2NTcxOSAvKiBEZWJ1Z2dlckV2YWxFbmFibGVyLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNkJDQ0VDMDQyNUQxRkEy
NzAwMEYzOTFEIC8qIFZlcmlmaWVyU2xvdFZpc2l0b3JJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2QkNDRUMwMzI1RDFGQTI3MDAwRjM5MUQg
LyogVmVyaWZpZXJTbG90VmlzaXRvcklubGluZXMuaCAqLzsgfTsKIAkJNzAxMTNENEMxQThEQjA5
MzAwMzg0OEM0IC8qIEl0ZXJhdG9yT3BlcmF0aW9ucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzAxMTNENEExQThEQjA5MzAwMzg0OEM0IC8qIEl0ZXJh
dG9yT3BlcmF0aW9ucy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTcwMTNDQThDMUI0OTFBOTQwMENBRTYxMyAvKiBKU01pY3JvdGFzay5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzAxM0NBOEExQjQ5MUE5
NDAwQ0FFNjEzIC8qIEpTTWljcm90YXNrLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzA1QjQxQUMxQTZFNTAxRTAwNzE2NzU3IC8qIFN5bWJvbC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzA1QjQxQTQx
QTZFNTAxRTAwNzE2NzU3IC8qIFN5bWJvbC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CkBAIC0xOTIwLDYgKzE5MjEsNyBAQAogCQlFM0ZGNzUzMzFEOUNF
QTE4MDBDN0UxNkQgLyogRE9NSklUR2V0dGVyU2V0dGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFM0ZGNzUyRjFEOUNFQTEyMDBDN0UxNkQgLyogRE9N
SklUR2V0dGVyU2V0dGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJRTQ5REMxNkMxMkVGMjk0RTAwMTg0QTFGIC8qIFNvdXJjZVByb3ZpZGVyQ2Fj
aGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0OURD
MTUxMTJFRjI3MjIwMDE4NEExRiAvKiBTb3VyY2VQcm92aWRlckNhY2hlLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTQ5REMxNkQxMkVGMjk1MzAw
MTg0QTFGIC8qIFNvdXJjZVByb3ZpZGVyQ2FjaGVJdGVtLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDlEQzE0OTEyRUYyNjFBMDAxODRBMUYgLyogU291
cmNlUHJvdmlkZXJDYWNoZUl0ZW0uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OworCQlGRTA0MTU1MzI1MkVDMDczMDA5MUVCNUQgLyogU2xvdFZpc2l0b3JN
YWNyb3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZF
MDQxNTUyMjUyRUMwNzMwMDkxRUI1RCAvKiBTbG90VmlzaXRvck1hY3Jvcy5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUZFMDVGQUZEMUZFNENFREEw
MDA5MzIzMCAvKiBEZXByZWNhdGVkSW5zcGVjdG9yVmFsdWVzLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk5MkQ2QTExMUZCRDQ5MUQwMDAyNDVGNCAv
KiBEZXByZWNhdGVkSW5zcGVjdG9yVmFsdWVzLmNwcCAqLzsgfTsKIAkJRkUwODZCQ0EyMTIzREVG
QjAwM0YyOTI5IC8qIEVudHJ5RnJhbWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEZFMDg2QkM5MjEyM0RFRkEwMDNGMjkyOSAvKiBFbnRyeUZyYW1lLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRkUwRDRB
MDYxQUI4REQwQTAwMkY1NEJGIC8qIEV4ZWN1dGlvblRpbWVMaW1pdFRlc3QuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUwRDRBMDQxQUI4REQwQTAw
MkY1NEJGIC8qIEV4ZWN1dGlvblRpbWVMaW1pdFRlc3QuY3BwICovOyB9OwpAQCAtMTk0Miw5ICsx
OTQ0LDExIEBACiAJCUZFMUUyQzNGMjI0MERENTgwMEY2QjcyOSAvKiBNYWNyb0Fzc2VtYmxlckFS
TTY0RS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUx
RTJDM0UyMjQwRDMwQjAwRjZCNzI5IC8qIE1hY3JvQXNzZW1ibGVyQVJNNjRFLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRkUxRTJDNDAyMjQwREQ2
MjAwRjZCNzI5IC8qIEFSTTY0RUFzc2VtYmxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRkUxRTJDM0QyMjQwRDJGNjAwRjZCNzI5IC8qIEFSTTY0RUFz
c2VtYmxlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCUZFMjBDRTlFMTVGMDRBOTUwMERGMzQzMCAvKiBMTEludENMb29wLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTIwQ0U5QzE1RjA0QTk1MDBERjM0
MzAgLyogTExJbnRDTG9vcC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CisJCUZFMjg3RDAyMjUyRkIyRTgwMEQ3MjNGOSAvKiBWZXJpZmllclNsb3RWaXNp
dG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTI4
N0QwMTI1MkZCMkU4MDBENzIzRjkgLyogVmVyaWZpZXJTbG90VmlzaXRvci5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUZFMkE4NzYwMUYwMjM4MTYw
MEVCMzFCMiAvKiBNaW5pbXVtUmVzZXJ2ZWRab25lU2l6ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUyQTg3NUYxRjAyMzgxNjAwRUIzMUIyIC8qIE1p
bmltdW1SZXNlcnZlZFpvbmVTaXplLmggKi87IH07CiAJCUZFMzAyMkQzMUUzRDczQTUwMEJBQzQ5
MyAvKiBTaWdpbGxDcmFzaEFuYWx5emVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBGRTMwMjJEMTFFM0Q3Mzk2MDBCQUM0OTMgLyogU2lnaWxsQ3Jhc2hB
bmFseXplci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCUZFMzAyMkQ3MUU0Mjg1NzMwMEJBQzQ5MyAvKiBWTUluc3BlY3Rvci5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUzMDIyRDUxRTQyODU2NzAwQkFD
NDkzIC8qIFZNSW5zcGVjdG9yLmggKi87IH07CisJCUZFMzM2QjUzMjVEQjQ5N0QwMDk4RjAzNCAv
KiBNYXJraW5nQ29uc3RyYWludEV4ZWN1dG9yUGFpci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUzMzZCNTIyNURCNDk3RDAwOThGMDM0IC8qIE1hcmtp
bmdDb25zdHJhaW50RXhlY3V0b3JQYWlyLmggKi87IH07CiAJCUZFMzQyMjEyMUQ2QjgxQzMwMDMy
QkU4OCAvKiBUaHJvd1Njb3BlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBGRTM0MjIxMTFENkI4MThDMDAzMkJFODggLyogVGhyb3dTY29wZS5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUZFMzRFRTIxMjQz
OThBQUUwMEFBMkU3QyAvKiBFbnN1cmVTdGlsbEFsaXZlSGVyZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUzNEVFMjAyNDM5OEE5QTAwQUEyRTdDIC8q
IEVuc3VyZVN0aWxsQWxpdmVIZXJlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJRkUzODQyMzMyMzI0RDUxQjAwOURENDQ1IC8qIE9wdGlvbnNMaXN0
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTM4NDIz
MTIzMjRENTFCMDA5REQ0NDUgLyogT3B0aW9uc0xpc3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMTk4MCw2ICsxOTg0LDggQEAKIAkJRkU4MEMx
OTcxRDc3NUNERDAwODUxMEMwIC8qIENhdGNoU2NvcGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFODBDMTk2MUQ3NzVCMjcwMDg1MTBDMCAvKiBDYXRj
aFNjb3BlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJRkU4REU1NEIyM0FDMURBRDAwNUM5MTQyIC8qIENhY2hlYWJsZUlkZW50aWZpZXIuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFOERFNTRBMjNBQzFE
QUQwMDVDOTE0MiAvKiBDYWNoZWFibGVJZGVudGlmaWVyLmggKi87IH07CiAJCUZFOERFNTREMjNB
QzFFODYwMDVDOTE0MiAvKiBDYWNoZWFibGVJZGVudGlmaWVySW5saW5lcy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkU4REU1NEMyM0FDMUU4NjAwNUM5
MTQyIC8qIENhY2hlYWJsZUlkZW50aWZpZXJJbmxpbmVzLmggKi87IH07CisJCUZFOTEyQjRGMjUz
MTE5MzMwMEZBQkRERiAvKiBBYnN0cmFjdFNsb3RWaXNpdG9yLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTkxMkI0RTI1MzExOTMzMDBGQUJEREYgLyog
QWJzdHJhY3RTbG90VmlzaXRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CisJCUZFOTEyQjUxMjUzMTFBRDEwMEZBQkRERiAvKiBBYnN0cmFjdFNsb3RW
aXNpdG9ySW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gRkU5MTJCNTAyNTMxMUFEMTAwRkFCRERGIC8qIEFic3RyYWN0U2xvdFZpc2l0b3JJbmxp
bmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
RkU5OUIyNDkxQzI0QzNEMzAwQzgyMTU5IC8qIEpJVE5lZ0dlbmVyYXRvci5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkU5OUIyNDgxQzI0QjZEMzAwQzgy
MTU5IC8qIEpJVE5lZ0dlbmVyYXRvci5oICovOyB9OwogCQlGRUEwODYyMDE4MkI3QTA0MDBGNkQ4
NTEgLyogQnJlYWtwb2ludC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRkVBMDg2MUUxODJCN0EwNDAwRjZEODUxIC8qIEJyZWFrcG9pbnQuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlGRUEwODYyMTE4MkI3
QTA0MDBGNkQ4NTEgLyogRGVidWdnZXJQcmltaXRpdmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRUEwODYxRjE4MkI3QTA0MDBGNkQ4NTEgLyogRGVi
dWdnZXJQcmltaXRpdmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKQEAgLTM5OTEsNiArMzk5Nyw3IEBACiAJCTZBMzhDRkE4MUUzMkI1OEIwMDYwMjA2
RiAvKiBBc3luY1N0YWNrVHJhY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
QXN5bmNTdGFja1RyYWNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZBRDJDQjRD
MTlCOTE0MDEwMDA2NTcxOSAvKiBEZWJ1Z2dlckV2YWxFbmFibGVyLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IERlYnVnZ2VyRXZhbEVuYWJsZXIuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNkJBOTNDOTU5MDQ4NEM1QkFEOTMxNkVBIC8qIEpTU2NyaXB0RmV0Y2hl
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1NjcmlwdEZldGNoZXIuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNkJDQ0VDMDMyNUQxRkEyNzAwMEYzOTFEIC8q
IFZlcmlmaWVyU2xvdFZpc2l0b3JJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFZlcmlmaWVyU2xvdFZpc2l0b3JJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTcwMTEzRDQ5MUE4REIwOTMwMDM4NDhDNCAvKiBJdGVyYXRvck9wZXJhdGlvbnMu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSXRlcmF0b3JPcGVyYXRp
b25zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzAxMTNENEExQThEQjA5MzAw
Mzg0OEM0IC8qIEl0ZXJhdG9yT3BlcmF0aW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBJdGVyYXRvck9wZXJhdGlvbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNzAxM0NBODkxQjQ5MUE5NDAwQ0FFNjEzIC8qIEpTTWljcm90YXNrLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTTWljcm90YXNrLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTUyMjcsNiArNTIzNCw3IEBACiAJCUY2OTJBODg3MDI1NTU5N0Qw
MUZGNjBGNyAvKiBKU0NKU1ZhbHVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTQ0pTVmFsdWUuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB0YWJXaWR0aCA9IDg7IH07CiAJCUY3MzkyNjkxOERDNjQzMzBBRkNERjBENyAvKiBK
U1NvdXJjZUNvZGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNT
b3VyY2VDb2RlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkUwMDI2MjIyM0Yz
QUYzMzAwM0EzNThGIC8qIFdlYkFzc2VtYmx5LmFzbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYXNtLmFzbTsgbmFtZSA9IFdlYkFz
c2VtYmx5LmFzbTsgcGF0aCA9IGxsaW50L1dlYkFzc2VtYmx5LmFzbTsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJRkUwNDE1NTIyNTJFQzA3MzAwOTFFQjVEIC8qIFNsb3RWaXNpdG9yTWFj
cm9zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNsb3RWaXNpdG9yTWFjcm9z
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFMDg2QkM5MjEyM0RFRkEwMDNGMjky
OSAvKiBFbnRyeUZyYW1lLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEVudHJ5
RnJhbWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkUwRDRBMDQxQUI4REQwQTAw
MkY1NEJGIC8qIEV4ZWN1dGlvblRpbWVMaW1pdFRlc3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBuYW1lID0gRXhlY3V0aW9uVGltZUxpbWl0VGVzdC5jcHA7IHBhdGggPSBBUEkv
dGVzdHMvRXhlY3V0aW9uVGltZUxpbWl0VGVzdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUZFMEQ0QTA1MUFCOEREMEEwMDJGNTRCRiAvKiBFeGVjdXRpb25UaW1lTGltaXRUZXN0
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEV4ZWN1dGlvblRpbWVMaW1pdFRl
c3QuaDsgcGF0aCA9IEFQSS90ZXN0cy9FeGVjdXRpb25UaW1lTGltaXRUZXN0Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01MjYxLDEyICs1MjY5LDE1IEBACiAJCUZFMUUyQzNFMjI0
MEQzMEIwMEY2QjcyOSAvKiBNYWNyb0Fzc2VtYmxlckFSTTY0RS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBNYWNyb0Fzc2VtYmxlckFSTTY0RS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlGRTIwQ0U5QjE1RjA0QTk1MDBERjM0MzAgLyogTExJbnRDTG9vcC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBMTEludENMb29wLmNwcDsgcGF0
aCA9IGxsaW50L0xMSW50Q0xvb3AuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlG
RTIwQ0U5QzE1RjA0QTk1MDBERjM0MzAgLyogTExJbnRDTG9vcC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBMTEludENMb29wLmg7IHBhdGggPSBsbGludC9MTEludENMb29wLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZFMjg3RDAxMjUyRkIyRTgwMEQ3MjNGOSAv
KiBWZXJpZmllclNsb3RWaXNpdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFZlcmlmaWVyU2xvdFZpc2l0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkUy
QTg3NUYxRjAyMzgxNjAwRUIzMUIyIC8qIE1pbmltdW1SZXNlcnZlZFpvbmVTaXplLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IE1pbmltdW1SZXNlcnZlZFpvbmVTaXplLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUZFMkJENjZFMjVDMERDODIwMDk5OUQzQiAvKiBWZXJpZmllclNsb3RWaXNpdG9y
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFZlcmlmaWVyU2xvdFZp
c2l0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTJFNkE3QTFENkVBNUZF
MDA2MEY4OTYgLyogVGhyb3dTY29wZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBUaHJvd1Njb3BlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkUz
MDIyRDAxRTNENzM5NjAwQkFDNDkzIC8qIFNpZ2lsbENyYXNoQW5hbHl6ZXIuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2lnaWxsQ3Jhc2hBbmFseXplci5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFMzAyMkQxMUUzRDczOTYwMEJBQzQ5MyAvKiBT
aWdpbGxDcmFzaEFuYWx5emVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNp
Z2lsbENyYXNoQW5hbHl6ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkUzMDIy
RDQxRTQyODU2NzAwQkFDNDkzIC8qIFZNSW5zcGVjdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFZNSW5zcGVjdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJRkUzMDIyRDUxRTQyODU2NzAwQkFDNDkzIC8qIFZNSW5zcGVjdG9yLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZNSW5zcGVjdG9yLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCUZFMzM2QjUyMjVEQjQ5N0QwMDk4RjAzNCAvKiBNYXJraW5nQ29uc3Ry
YWludEV4ZWN1dG9yUGFpci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNYXJr
aW5nQ29uc3RyYWludEV4ZWN1dG9yUGFpci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlGRTM0MjIxMTFENkI4MThDMDAzMkJFODggLyogVGhyb3dTY29wZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBUaHJvd1Njb3BlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUZFMzRFRTIwMjQzOThBOUEwMEFBMkU3QyAvKiBFbnN1cmVTdGlsbEFsaXZlSGVyZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBFbnN1cmVTdGlsbEFsaXZlSGVyZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlGRTM0RUUyMjI0Mzk4Qjg1MDBBQTJFN0MgLyogRW5zdXJlU3RpbGxBbGl2
ZUhlcmUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRW5zdXJlU3Rp
bGxBbGl2ZUhlcmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNTMzNSw2ICs1
MzQ2LDggQEAKIAkJRkU4REU1NEMyM0FDMUU4NjAwNUM5MTQyIC8qIENhY2hlYWJsZUlkZW50aWZp
ZXJJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENhY2hlYWJsZUlk
ZW50aWZpZXJJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFOERFNTRF
MjNBQzNBOEUwMDVDOTE0MiAvKiBDYWNoZWFibGVJZGVudGlmaWVyLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IENhY2hlYWJsZUlkZW50aWZpZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlGRTkwQkIzQTFCN0NGNjRFMDA2QjNGMDMgLyogVk1JbmxpbmVzLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZNSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlGRTkxMkI0RTI1MzExOTMzMDBGQUJEREYgLyogQWJzdHJhY3RTbG90VmlzaXRvci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBYnN0cmFjdFNsb3RWaXNpdG9yLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZFOTEyQjUwMjUzMTFBRDEwMEZBQkRERiAv
KiBBYnN0cmFjdFNsb3RWaXNpdG9ySW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBBYnN0cmFjdFNsb3RWaXNpdG9ySW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlGRTk4QjVCNjFCQjlBRTExMDA3M0U3QTYgLyogSklUU3ViR2VuZXJhdG9yLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpJVFN1YkdlbmVyYXRvci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTk5QjI0NzFDMjRCNkQzMDBDODIxNTkgLyogSklU
TmVnR2VuZXJhdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpJ
VE5lZ0dlbmVyYXRvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFOTlCMjQ4
MUMyNEI2RDMwMEM4MjE1OSAvKiBKSVROZWdHZW5lcmF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSklUTmVnR2VuZXJhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC02MjgyLDYgKzYyOTUsOCBAQAogCQkxNDJFMzEyQTEzNEZGMEE2MDBBRkFEQjUgLyog
aGVhcCAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJRkU5
MTJCNEUyNTMxMTkzMzAwRkFCRERGIC8qIEFic3RyYWN0U2xvdFZpc2l0b3IuaCAqLywKKwkJCQlG
RTkxMkI1MDI1MzExQUQxMDBGQUJEREYgLyogQWJzdHJhY3RTbG90VmlzaXRvcklubGluZXMuaCAq
LywKIAkJCQkwRkVDM0M1MDFGMzNBNDE2MDBGNTlCNkMgLyogQWxpZ25lZE1lbW9yeUFsbG9jYXRv
ci5jcHAgKi8sCiAJCQkJMEZFQzNDNTExRjMzQTQxNjAwRjU5QjZDIC8qIEFsaWduZWRNZW1vcnlB
bGxvY2F0b3IuaCAqLywKIAkJCQkwRkE3NjIwQTFEQjk1OUY2MDBCN0EyRkQgLyogQWxsb2NhdGlu
Z1Njb3BlLmggKi8sCkBAIC02NDEzLDYgKzY0MjgsNyBAQAogCQkJCTBGN0RGMTMwMUUyOTcwRDUw
MDk1OTUxQiAvKiBNYXJrZWRTcGFjZUlubGluZXMuaCAqLywKIAkJCQkwRjY2MEUzMzFFMDUxN0I3
MDAzMTQ2MkMgLyogTWFya2luZ0NvbnN0cmFpbnQuY3BwICovLAogCQkJCTBGNjYwRTM0MUUwNTE3
QjcwMDMxNDYyQyAvKiBNYXJraW5nQ29uc3RyYWludC5oICovLAorCQkJCUZFMzM2QjUyMjVEQjQ5
N0QwMDk4RjAzNCAvKiBNYXJraW5nQ29uc3RyYWludEV4ZWN1dG9yUGFpci5oICovLAogCQkJCTBG
NjYwRTM1MUUwNTE3QjcwMDMxNDYyQyAvKiBNYXJraW5nQ29uc3RyYWludFNldC5jcHAgKi8sCiAJ
CQkJMEY2NjBFMzYxRTA1MTdCODAwMzE0NjJDIC8qIE1hcmtpbmdDb25zdHJhaW50U2V0LmggKi8s
CiAJCQkJMEY5REFBMDYxRkQxQzNDODAwNzlDNUIyIC8qIE1hcmtpbmdDb25zdHJhaW50U29sdmVy
LmNwcCAqLywKQEAgLTY0MzksNiArNjQ1NSw3IEBACiAJCQkJQzIyNTQ5NDIxNUY3REJBQTAwNjVF
ODk4IC8qIFNsb3RWaXNpdG9yLmNwcCAqLywKIAkJCQkxNEJBNzhGMDEzQUFCODhGMDA1QjdDMkMg
LyogU2xvdFZpc2l0b3IuaCAqLywKIAkJCQkwRkNCNDA4NTE1QzBBM0MzMDA0ODkzMkIgLyogU2xv
dFZpc2l0b3JJbmxpbmVzLmggKi8sCisJCQkJRkUwNDE1NTIyNTJFQzA3MzAwOTFFQjVEIC8qIFNs
b3RWaXNpdG9yTWFjcm9zLmggKi8sCiAJCQkJMEZERTg3RkExREZFNkU1MDAwNjRDMzkwIC8qIFNw
YWNlVGltZU11dGF0b3JTY2hlZHVsZXIuY3BwICovLAogCQkJCTBGREU4N0ZCMURGRTZFNTAwMDY0
QzM5MCAvKiBTcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyLmggKi8sCiAJCQkJMEY0RjgyODkxRTMx
Qjk3MTAwNzUxODRDIC8qIFN0b2NoYXN0aWNTcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyLmNwcCAq
LywKQEAgLTY0NTYsNiArNjQ3Myw5IEBACiAJCQkJMEYxRkIzOEExRTE3M0E2MjAwQTlCRTUwIC8q
IFN5bmNocm9ub3VzU3RvcFRoZVdvcmxkTXV0YXRvclNjaGVkdWxlci5jcHAgKi8sCiAJCQkJMEYx
RkIzOEIxRTE3M0E2MjAwQTlCRTUwIC8qIFN5bmNocm9ub3VzU3RvcFRoZVdvcmxkTXV0YXRvclNj
aGVkdWxlci5oICovLAogCQkJCTE0MTQ0OENDMTNBMTc4MzcwMEY1QkExQSAvKiBUaW55Qmxvb21G
aWx0ZXIuaCAqLywKKwkJCQlGRTJCRDY2RTI1QzBEQzgyMDA5OTlEM0IgLyogVmVyaWZpZXJTbG90
VmlzaXRvci5jcHAgKi8sCisJCQkJRkUyODdEMDEyNTJGQjJFODAwRDcyM0Y5IC8qIFZlcmlmaWVy
U2xvdFZpc2l0b3IuaCAqLywKKwkJCQk2QkNDRUMwMzI1RDFGQTI3MDAwRjM5MUQgLyogVmVyaWZp
ZXJTbG90VmlzaXRvcklubGluZXMuaCAqLywKIAkJCQkwRjREOEM3MjFGQzdBOTczMDAxRDMyQUMg
LyogVmlzaXRDb3VudGVyLmggKi8sCiAJCQkJMEY5NTJBOUYxREY3ODYwNzAwRTA2RkJEIC8qIFZp
c2l0UmFjZUtleS5jcHAgKi8sCiAJCQkJMEY5NTJBQTAxREY3ODYwNzAwRTA2RkJEIC8qIFZpc2l0
UmFjZUtleS5oICovLApAQCAtOTMwMSw2ICs5MzIxLDcgQEAKIAkJCQkxNDdCODNBQzBFNkRCOEM5
MDA0Nzc1QTQgLyogQmF0Y2hlZFRyYW5zaXRpb25PcHRpbWl6ZXIuaCBpbiBIZWFkZXJzICovLAog
CQkJCUUzNUU4OUZEMjVDNTBGODcwMDcxRUUxRSAvKiBCaWdJbnQ2NEFycmF5LmggaW4gSGVhZGVy
cyAqLywKIAkJCQk4Njk3NkU1RjFGQTNFOEJDMDBFN0M0RTEgLyogQmlnSW50Q29uc3RydWN0b3Iu
aCBpbiBIZWFkZXJzICovLAorCQkJCUZFMDQxNTUzMjUyRUMwNzMwMDkxRUI1RCAvKiBTbG90Vmlz
aXRvck1hY3Jvcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODY2NzM5RDIxM0JGREU3MTAwMjNEODdD
IC8qIEJpZ0ludGVnZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2MTgxNjc3MUZCNzkyNDIwMEVD
QzRFQyAvKiBCaWdJbnRPYmplY3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2OTc2RTVFMUZBM0U4
QjYwMEU3QzRFMSAvKiBCaWdJbnRQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovLApAQCAtOTU4Miw2
ICs5NjAzLDcgQEAKIAkJCQkwRkQ4MkU1NzE0MURBRjEwMDAxNzlDOTQgLyogREZHT1NSRW50cnku
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGRDhBMzI2MTdENTFGNTcwMENBMkM0MCAvKiBERkdPU1JF
bnRyeXBvaW50Q3JlYXRpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZDMDk3NkExNDY4
QTZGNzAwQ0YyNDQyIC8qIERGR09TUkV4aXQuaCBpbiBIZWFkZXJzICovLAorCQkJCUZFOTEyQjRG
MjUzMTE5MzMwMEZBQkRERiAvKiBBYnN0cmFjdFNsb3RWaXNpdG9yLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRjIzNUJFQzE3MTc4RTczMDA2OTBDN0YgLyogREZHT1NSRXhpdEJhc2UuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGRkI5MjFDMTZEMDJGMTEwMDU1QTVEQiAvKiBERkdPU1JFeGl0Q29tcGls
YXRpb25JbmZvLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjcwMjVBQTE3MTRCMEZDMDAzODJDMEUg
LyogREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmggaW4gSGVhZGVycyAqLywKQEAgLTk4NjgsNiAr
OTg5MCw3IEBACiAJCQkJQTUxM0U1QkUxODVCRkFDQzAwN0U5NUFEIC8qIEluamVjdGVkU2NyaXB0
SG9zdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTUxM0U1Q0IxODVGOTYyNDAwN0U5NUFEIC8qIElu
amVjdGVkU2NyaXB0TWFuYWdlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTU4NDBFMjExODdCN0I4
NjAwODQzQjEwIC8qIEluamVjdGVkU2NyaXB0TW9kdWxlLmggaW4gSGVhZGVycyAqLywKKwkJCQlG
RTI4N0QwMjI1MkZCMkU4MDBENzIzRjkgLyogVmVyaWZpZXJTbG90VmlzaXRvci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQTUxM0U1QzcxODVGOTQ0NjAwN0U5NUFEIC8qIEluamVjdGVkU2NyaXB0U291
cmNlLmggaW4gSGVhZGVycyAqLywKIAkJCQk5OTU5RTkzMjFCRDE4Mjc5MDAxQUE0MTMgLyogaW5s
aW5lLWFuZC1taW5pZnktc3R5bGVzaGVldHMtYW5kLXNjcmlwdHMucHkgaW4gSGVhZGVycyAqLywK
IAkJCQk3OTA1QkI2OTFEMTIwNTBFMDAxOUZFNTcgLyogSW5saW5lQWNjZXNzLmggaW4gSGVhZGVy
cyAqLywKQEAgLTEwMDA3LDYgKzEwMDMwLDcgQEAKIAkJCQk1M0M0RjY2QjIxQjFBNDA5MDAyRkQw
MDkgLyogSlNBUElHbG9iYWxPYmplY3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTg0MDQ4MDEzMTAy
MUExRDkwMDhFN0YwMSAvKiBKU0FQSVZhbHVlV3JhcHBlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QzJDRjM5QzIxNkUxNUE4MTAwREQ2OUJFIC8qIEpTQVBJV3JhcHBlck9iamVjdC5oIGluIEhlYWRl
cnMgKi8sCisJCQkJRkUzMzZCNTMyNURCNDk3RDAwOThGMDM0IC8qIE1hcmtpbmdDb25zdHJhaW50
RXhlY3V0b3JQYWlyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQxNzBFMTZGNUNEMDBCMzQ0
NjAgLyogSlNBcnJheS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjY2RTMxN0I2QjVBQjAwQTdB
RTNGIC8qIEpTQXJyYXlCdWZmZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkI2NkU1MTdCNkI1
QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLApA
QCAtMTAwNDMsNiArMTAwNjcsNyBAQAogCQkJCUE1OEMwMjQyMThFNEE0MUEwMDAzMkJDNSAvKiBK
U0NvbnRleHRQcml2YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQxRTBFMTZGNUNEMDBC
MzQ0NjAgLyogSlNDb250ZXh0UmVmLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNUVBNzBFRTE5RjVC
NUM0MDA5OEY1RUMgLyogSlNDb250ZXh0UmVmSW5zcGVjdG9yU3VwcG9ydC5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJNkJDQ0VDMDQyNUQxRkEyNzAwMEYzOTFEIC8qIFZlcmlmaWVyU2xvdFZpc2l0b3JJ
bmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNUQyRTY2NTE5NUUxNzQwMDBBNTE4RTcgLyog
SlNDb250ZXh0UmVmSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0OENEMUQ4MTA4Q0Y5
MDIwMDgxNjNDNiAvKiBKU0NvbnRleHRSZWZQcml2YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQlG
RTc0OTdFNjIwOTAwMUIxMDAwMzU2NUIgLyogSlNDUHRyVGFnLmggaW4gSGVhZGVycyAqLywKQEAg
LTEwMTc0LDYgKzEwMTk5LDcgQEAKIAkJCQk3OTVBQzYxODIwQTIzNTVFMDA1MkM3NkMgLyogSlNW
aXJ0dWFsTWFjaGluZVByaXZhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3Q0EzQUU4MTdEQTQx
QUUwMDY1MzhBRiAvKiBKU1dlYWtNYXAuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3NDgyRTkzMTE2
QTdDQUQwMDNCMDcxMiAvKiBKU1dlYWtPYmplY3RNYXBSZWZJbnRlcm5hbC5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJRkU5MTJCNTEyNTMxMUFEMTAwRkFCRERGIC8qIEFic3RyYWN0U2xvdFZpc2l0b3JJ
bmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzQ4MkI5MzExNjcxMTQ3MDAzQjA3MTIgLyog
SlNXZWFrT2JqZWN0TWFwUmVmUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTM5QkZCQjAy
MkFEM0NEQzAwMjNGNEMwIC8qIEpTV2Vha09iamVjdFJlZi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEYwQjI4NkIxRUI4RTZDRjAwMEVCNUQyIC8qIEpTV2Vha1ByaXZhdGUuaCBpbiBIZWFkZXJzICov
LApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvd2tidWlsdGlucy9idWlsdGlu
c19nZW5lcmF0ZV9pbnRlcm5hbHNfd3JhcHBlcl9oZWFkZXIucHkKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvd2tidWlsdGlucy9idWlsdGluc19nZW5lcmF0ZV9p
bnRlcm5hbHNfd3JhcHBlcl9oZWFkZXIucHkJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9TY3JpcHRzL3drYnVpbHRpbnMvYnVpbHRpbnNfZ2VuZXJhdGVfaW50ZXJu
YWxzX3dyYXBwZXJfaGVhZGVyLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogIyEv
dXNyL2Jpbi9lbnYgcHl0aG9uCiAjCi0jIENvcHlyaWdodCAoYykgMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisjIENvcHlyaWdodCAoYykgMjAxNi0yMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICMKICMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAjIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtOTMs
NyArOTMsNyBAQCBjbGFzcyBCdWlsdGluc0ludGVybmFsc1dyYXBwZXJIZWFkZXJHZW5lCiAKICAg
ICBkZWYgZ2VuZXJhdGVfbWV0aG9kcyhzZWxmKToKICAgICAgICAgcmV0dXJuICIiIgotICAgIHZv
aWQgdmlzaXQoSlNDOjpTbG90VmlzaXRvciYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0
b3I+IHZvaWQgdmlzaXQoVmlzaXRvciYpOwogICAgIHZvaWQgaW5pdGlhbGl6ZShKU0RPTUdsb2Jh
bE9iamVjdCYpOwogIiIiCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL3dr
YnVpbHRpbnMvYnVpbHRpbnNfZ2VuZXJhdGVfaW50ZXJuYWxzX3dyYXBwZXJfaW1wbGVtZW50YXRp
b24ucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvd2tidWls
dGlucy9idWlsdGluc19nZW5lcmF0ZV9pbnRlcm5hbHNfd3JhcHBlcl9pbXBsZW1lbnRhdGlvbi5w
eQkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvd2ti
dWlsdGlucy9idWlsdGluc19nZW5lcmF0ZV9pbnRlcm5hbHNfd3JhcHBlcl9pbXBsZW1lbnRhdGlv
bi5weQkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKICMhL3Vzci9iaW4vZW52IHB5dGhv
bgogIwotIyBDb3B5cmlnaHQgKGMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorIyBDb3B5cmlnaHQgKGMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAjCiAjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEyMCwxMyArMTIwLDE2IEBAIGNs
YXNzIEJ1aWx0aW5zSW50ZXJuYWxzV3JhcHBlckltcGxlbWVudGEKICAgICAgICAgcmV0dXJuICdc
bicuam9pbihsaW5lcykKIAogICAgIGRlZiBnZW5lcmF0ZV92aXNpdF9tZXRob2Qoc2VsZik6Ci0g
ICAgICAgIGxpbmVzID0gWyJ2b2lkIEpTQnVpbHRpbkludGVybmFsRnVuY3Rpb25zOjp2aXNpdChK
U0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKSIsCisgICAgICAgIGxpbmVzID0gWyJ0ZW1wbGF0ZTx0
eXBlbmFtZSBWaXNpdG9yPiIsCisgICAgICAgICAgICAgICAgICJ2b2lkIEpTQnVpbHRpbkludGVy
bmFsRnVuY3Rpb25zOjp2aXNpdChWaXNpdG9yJiB2aXNpdG9yKSIsCiAgICAgICAgICAgICAgICAg
ICJ7Il0KICAgICAgICAgZm9yIG9iamVjdCBpbiBzZWxmLmludGVybmFsczoKICAgICAgICAgICAg
IHZpc2l0ID0gIiAgICAlcy52aXNpdCh2aXNpdG9yKTsiICUgc2VsZi5tZW1iZXJfbmFtZShvYmpl
Y3QpCiAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoQnVpbHRpbnNHZW5lcmF0b3Iud3JhcF93aXRo
X2d1YXJkKG9iamVjdC5hbm5vdGF0aW9ucy5nZXQoJ2NvbmRpdGlvbmFsJyksIHZpc2l0KSkKICAg
ICAgICAgbGluZXMuYXBwZW5kKCIgICAgVU5VU0VEX1BBUkFNKHZpc2l0b3IpOyIpCiAgICAgICAg
IGxpbmVzLmFwcGVuZCgifVxuIikKKyAgICAgICAgbGluZXMuYXBwZW5kKCJ0ZW1wbGF0ZSB2b2lk
IEpTQnVpbHRpbkludGVybmFsRnVuY3Rpb25zOjp2aXNpdChBYnN0cmFjdFNsb3RWaXNpdG9yJik7
IikKKyAgICAgICAgbGluZXMuYXBwZW5kKCJ0ZW1wbGF0ZSB2b2lkIEpTQnVpbHRpbkludGVybmFs
RnVuY3Rpb25zOjp2aXNpdChTbG90VmlzaXRvciYpO1xuIikKICAgICAgICAgcmV0dXJuICdcbicu
am9pbihsaW5lcykKIAogICAgIGRlZiBfZ2VuZXJhdGVfaW5pdGlhbGl6ZV9zdGF0aWNfZ2xvYmFs
cyhzZWxmKToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL3drYnVpbHRpbnMv
YnVpbHRpbnNfdGVtcGxhdGVzLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9TY3JpcHRzL3drYnVpbHRpbnMvYnVpbHRpbnNfdGVtcGxhdGVzLnB5CShyZXZpc2lvbiAyNzI5
MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy93a2J1aWx0aW5zL2J1aWx0aW5z
X3RlbXBsYXRlcy5weQkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKICMhL3Vzci9iaW4v
ZW52IHB5dGhvbgogIwotIyBDb3B5cmlnaHQgKGMpIDIwMTQtMjAxOSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisjIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICMgQ29weXJpZ2h0IChDKSAyMDE1IENhbm9uIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICMKICMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0xODgsNyArMTg4LDcgQEAgcHVibGlj
OgogICAgIGV4cGxpY2l0ICR7b2JqZWN0TmFtZX1CdWlsdGluRnVuY3Rpb25zKEpTQzo6Vk0mIHZt
KSA6IG1fdm0odm0pIHsgfQogCiAgICAgdm9pZCBpbml0KEpTQzo6SlNHbG9iYWxPYmplY3QmKTsK
LSAgICB2b2lkIHZpc2l0KEpTQzo6U2xvdFZpc2l0b3ImKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBWaXNpdG9yPiB2b2lkIHZpc2l0KFZpc2l0b3ImKTsKIAogcHVibGljOgogICAgIEpTQzo6Vk0m
IG1fdm07CkBAIC0yMDcsMTAgKzIwNywxNSBAQCBpbmxpbmUgdm9pZCAke29iamVjdE5hbWV9QnVp
bHRpbkZ1bmN0aW9uCiAjdW5kZWYgRVhQT1JUX0ZVTkNUSU9OCiB9CiAKLWlubGluZSB2b2lkICR7
b2JqZWN0TmFtZX1CdWlsdGluRnVuY3Rpb25zOjp2aXNpdChKU0M6OlNsb3RWaXNpdG9yJiB2aXNp
dG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK2lubGluZSB2b2lkICR7b2JqZWN0TmFt
ZX1CdWlsdGluRnVuY3Rpb25zOjp2aXNpdChWaXNpdG9yJiB2aXNpdG9yKQogewogI2RlZmluZSBW
SVNJVF9GVU5DVElPTihuYW1lKSB2aXNpdG9yLmFwcGVuZChtXyMjbmFtZSMjRnVuY3Rpb24pOwog
ICAgICR7bWFjcm9QcmVmaXh9X0ZPUkVBQ0hfJHtvYmplY3RNYWNyb31fQlVJTFRJTl9GVU5DVElP
Tl9OQU1FKFZJU0lUX0ZVTkNUSU9OKQogI3VuZGVmIFZJU0lUX0ZVTkNUSU9OCiB9CisKK3RlbXBs
YXRlIHZvaWQgJHtvYmplY3ROYW1lfUJ1aWx0aW5GdW5jdGlvbnM6OnZpc2l0KEpTQzo6QWJzdHJh
Y3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCAke29iamVjdE5hbWV9QnVpbHRpbkZ1bmN0
aW9uczo6dmlzaXQoSlNDOjpTbG90VmlzaXRvciYpOworCiAiIiIpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCShyZXZpc2lvbiAyNzI5MDIp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjAg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIw
MjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC03NTcsNyArNzU3LDggQEAgYm9vbCBBY2Nlc3NDYXNlOjp2aXNpdFdlYWso
Vk0mIHZtKSBjb25zdAogICAgIHJldHVybiBpc1ZhbGlkOwogfQogCi1ib29sIEFjY2Vzc0Nhc2U6
OnByb3BhZ2F0ZVRyYW5zaXRpb25zKFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBjb25zdAordGVtcGxh
dGU8dHlwZW5hbWUgVmlzaXRvcj4KK2Jvb2wgQWNjZXNzQ2FzZTo6cHJvcGFnYXRlVHJhbnNpdGlv
bnMoVmlzaXRvciYgdmlzaXRvcikgY29uc3QKIHsKICAgICBib29sIHJlc3VsdCA9IHRydWU7CiAK
QEAgLTc3Miw3ICs3NzMsNyBAQCBib29sIEFjY2Vzc0Nhc2U6OnByb3BhZ2F0ZVRyYW5zaXRpb25z
KFNsCiAgICAgc3dpdGNoIChtX3R5cGUpIHsKICAgICBjYXNlIFRyYW5zaXRpb246CiAgICAgY2Fz
ZSBEZWxldGU6Ci0gICAgICAgIGlmICh2aXNpdG9yLnZtKCkuaGVhcC5pc01hcmtlZChtX3N0cnVj
dHVyZS0+cHJldmlvdXNJRCgpKSkKKyAgICAgICAgaWYgKHZpc2l0b3IuaXNNYXJrZWQobV9zdHJ1
Y3R1cmUtPnByZXZpb3VzSUQoKSkpCiAgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmll
cmVkKG1fc3RydWN0dXJlLmdldCgpKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgcmVzdWx0
ID0gZmFsc2U7CkBAIC03ODQsMTEgKzc4NSwxOCBAQCBib29sIEFjY2Vzc0Nhc2U6OnByb3BhZ2F0
ZVRyYW5zaXRpb25zKFNsCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotdm9pZCBBY2Nlc3NDYXNl
Ojp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYgdmlzaXRvcikgY29uc3QKK3RlbXBsYXRlIGJv
b2wgQWNjZXNzQ2FzZTo6cHJvcGFnYXRlVHJhbnNpdGlvbnMoQWJzdHJhY3RTbG90VmlzaXRvciYp
IGNvbnN0OwordGVtcGxhdGUgYm9vbCBBY2Nlc3NDYXNlOjpwcm9wYWdhdGVUcmFuc2l0aW9ucyhT
bG90VmlzaXRvciYpIGNvbnN0OworCisKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lk
IEFjY2Vzc0Nhc2U6OnZpc2l0QWdncmVnYXRlSW1wbChWaXNpdG9yJiB2aXNpdG9yKSBjb25zdAog
ewogICAgIG1faWRlbnRpZmllci52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKIH0KIAorREVGSU5F
X1ZJU0lUX0FHR1JFR0FURV9XSVRIX01PRElGSUVSKEFjY2Vzc0Nhc2UsIGNvbnN0KTsKKwogdm9p
ZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZVdpdGhHdWFyZCgKICAgICBBY2Nlc3NHZW5lcmF0aW9uU3Rh
dGUmIHN0YXRlLCBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0JiBmYWxsVGhyb3VnaCkKIHsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuaAkocmV2aXNpb24g
MjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTct
MjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTI4MCw5ICsyODAsOSBAQCBwcml2YXRlOgogICAgIHRlbXBsYXRl
PHR5cGVuYW1lIEZ1bmN0b3I+CiAgICAgdm9pZCBmb3JFYWNoRGVwZW5kZW50Q2VsbChWTSYsIGNv
bnN0IEZ1bmN0b3ImKSBjb25zdDsKIAotICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0
b3ImKSBjb25zdDsKKyAgICBERUNMQVJFX1ZJU0lUX0FHR1JFR0FURV9XSVRIX01PRElGSUVSKGNv
bnN0KTsKICAgICBib29sIHZpc2l0V2VhayhWTSYpIGNvbnN0OwotICAgIGJvb2wgcHJvcGFnYXRl
VHJhbnNpdGlvbnMoU2xvdFZpc2l0b3ImKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPiBib29sIHByb3BhZ2F0ZVRyYW5zaXRpb25zKFZpc2l0b3ImKSBjb25zdDsKIAogICAg
IC8vIEZJWE1FOiBUaGlzIG9ubHkgZXhpc3RzIGJlY2F1c2Ugb2YgaG93IEFjY2Vzc0Nhc2UgcHV0
cyBwb3N0LWdlbmVyYXRpb24gdGhpbmdzIGludG8gaXRzZWxmLgogICAgIC8vIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTY0NTYKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9CeVZhbEluZm8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9CeVZhbEluZm8uY3BwCShyZXZpc2lvbiAyNzI5MDIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnlWYWxJbmZvLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIwLTIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0zMiwxMSArMzIsMTQgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICNpZiBFTkFCTEUoSklUKQogCi12
b2lkIEJ5VmFsSW5mbzo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1w
bGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBCeVZhbEluZm86OnZpc2l0QWdncmVnYXRlSW1w
bChWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGNhY2hlZElkLnZpc2l0QWdncmVnYXRlKHZpc2l0
b3IpOwogfQogCitERUZJTkVfVklTSVRfQUdHUkVHQVRFKEJ5VmFsSW5mbyk7CisKICNlbmRpZiAv
LyBFTkFCTEUoSklUKQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9CeVZhbEluZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQnlWYWxJbmZvLmgJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeVZhbEluZm8uaAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxOCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTI2MCw3ICsyNjAsNyBAQCBzdHJ1Y3QgQnlWYWxJbmZvIHsKICAgICAgICAgdGhpcy0+c2VlbiA9
IGZhbHNlOwogICAgIH0KIAotICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImKTsK
KyAgICBERUNMQVJFX1ZJU0lUX0FHR1JFR0FURTsKIAogICAgIENvZGVMb2NhdGlvbkp1bXA8SlNJ
bnRlcm5hbFB0clRhZz4gbm90SW5kZXhKdW1wOwogICAgIENvZGVMb2NhdGlvbkp1bXA8SlNJbnRl
cm5hbFB0clRhZz4gYmFkVHlwZUp1bXA7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQ2hlY2tQcml2YXRlQnJhbmRTdGF0dXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DaGVja1ByaXZhdGVCcmFuZFN0YXR1cy5jcHAJKHJldmlz
aW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DaGVja1ByaXZh
dGVCcmFuZFN0YXR1cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyOCwxOCArMjI4LDI1IEBAIENh
Y2hlYWJsZUlkZW50aWZpZXIgQ2hlY2tQcml2YXRlQnJhbmRTdGEKICAgICByZXR1cm4gcmVzdWx0
OwogfQogCi12b2lkIENoZWNrUHJpdmF0ZUJyYW5kU3RhdHVzOjp2aXNpdEFnZ3JlZ2F0ZShTbG90
VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIENoZWNr
UHJpdmF0ZUJyYW5kU3RhdHVzOjp2aXNpdEFnZ3JlZ2F0ZUltcGwoVmlzaXRvciYgdmlzaXRvcikK
IHsKICAgICBmb3IgKENoZWNrUHJpdmF0ZUJyYW5kVmFyaWFudCYgdmFyaWFudCA6IG1fdmFyaWFu
dHMpCiAgICAgICAgIHZhcmlhbnQudmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7CiB9CiAKLXZvaWQg
Q2hlY2tQcml2YXRlQnJhbmRTdGF0dXM6Om1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJiB2aXNpdG9y
KQorREVGSU5FX1ZJU0lUX0FHR1JFR0FURShDaGVja1ByaXZhdGVCcmFuZFN0YXR1cyk7CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIENoZWNrUHJpdmF0ZUJyYW5kU3RhdHVzOjpt
YXJrSWZDaGVhcChWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGZvciAoQ2hlY2tQcml2YXRlQnJh
bmRWYXJpYW50JiB2YXJpYW50IDogbV92YXJpYW50cykKICAgICAgICAgdmFyaWFudC5tYXJrSWZD
aGVhcCh2aXNpdG9yKTsKIH0KIAordGVtcGxhdGUgdm9pZCBDaGVja1ByaXZhdGVCcmFuZFN0YXR1
czo6bWFya0lmQ2hlYXAoQWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBDaGVj
a1ByaXZhdGVCcmFuZFN0YXR1czo6bWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImKTsKKwogYm9vbCBD
aGVja1ByaXZhdGVCcmFuZFN0YXR1czo6ZmluYWxpemUoVk0mIHZtKQogewogICAgIGZvciAoYXV0
byYgdmFyaWFudCA6IG1fdmFyaWFudHMpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9DaGVja1ByaXZhdGVCcmFuZFN0YXR1cy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DaGVja1ByaXZhdGVCcmFuZFN0YXR1cy5oCShyZXZpc2lv
biAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2hlY2tQcml2YXRl
QnJhbmRTdGF0dXMuaAkod29ya2luZyBjb3B5KQpAQCAtODIsOCArODIsOCBAQCBwdWJsaWM6CiAg
ICAgLy8gQXR0ZW1wdHMgdG8gcmVkdWNlIHRoZSBzZXQgb2YgdmFyaWFudHMgdG8gZml0IHRoZSBn
aXZlbiBzdHJ1Y3R1cmUgc2V0LiBUaGlzIG1heSBiZSBhcHByb3hpbWF0ZS4KICAgICB2b2lkIGZp
bHRlcihjb25zdCBTdHJ1Y3R1cmVTZXQmKTsKIAotICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xv
dFZpc2l0b3ImKTsKLSAgICB2b2lkIG1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJik7CisgICAgREVD
TEFSRV9WSVNJVF9BR0dSRUdBVEU7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9p
ZCBtYXJrSWZDaGVhcChWaXNpdG9yJik7CiAgICAgYm9vbCBmaW5hbGl6ZShWTSYpOwogCiAgICAg
Ym9vbCBhcHBlbmRWYXJpYW50KGNvbnN0IENoZWNrUHJpdmF0ZUJyYW5kVmFyaWFudCYpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NoZWNrUHJpdmF0ZUJyYW5kVmFyaWFu
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NoZWNr
UHJpdmF0ZUJyYW5kVmFyaWFudC5jcHAJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9DaGVja1ByaXZhdGVCcmFuZFZhcmlhbnQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC01MSwxMSArNTEsMTUgQEAgYm9vbCBDaGVja1ByaXZhdGVCcmFuZFZhcmlhbnQ6
OmF0dGVtcHRUbwogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIENoZWNrUHJpdmF0ZUJyYW5k
VmFyaWFudDo6bWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBl
bmFtZSBWaXNpdG9yPgordm9pZCBDaGVja1ByaXZhdGVCcmFuZFZhcmlhbnQ6Om1hcmtJZkNoZWFw
KFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgbV9zdHJ1Y3R1cmVTZXQubWFya0lmQ2hlYXAodmlz
aXRvcik7CiB9CiAKK3RlbXBsYXRlIHZvaWQgQ2hlY2tQcml2YXRlQnJhbmRWYXJpYW50OjptYXJr
SWZDaGVhcChBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIENoZWNrUHJpdmF0
ZUJyYW5kVmFyaWFudDo6bWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImKTsKKwogYm9vbCBDaGVja1By
aXZhdGVCcmFuZFZhcmlhbnQ6OmZpbmFsaXplKFZNJiB2bSkKIHsKICAgICBpZiAoIW1fc3RydWN0
dXJlU2V0LmlzU3RpbGxBbGl2ZSh2bSkpCkBAIC02MywxMSArNjcsMTQgQEAgYm9vbCBDaGVja1By
aXZhdGVCcmFuZFZhcmlhbnQ6OmZpbmFsaXplKAogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lk
IENoZWNrUHJpdmF0ZUJyYW5kVmFyaWFudDo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImIHZp
c2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBDaGVja1ByaXZhdGVCcmFu
ZFZhcmlhbnQ6OnZpc2l0QWdncmVnYXRlSW1wbChWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIG1f
aWRlbnRpZmllci52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKIH0KIAorREVGSU5FX1ZJU0lUX0FH
R1JFR0FURShDaGVja1ByaXZhdGVCcmFuZFZhcmlhbnQpOworCiB2b2lkIENoZWNrUHJpdmF0ZUJy
YW5kVmFyaWFudDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAogewogICAgIGR1bXBJbkNv
bnRleHQob3V0LCBudWxscHRyKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9DaGVja1ByaXZhdGVCcmFuZFZhcmlhbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ2hlY2tQcml2YXRlQnJhbmRWYXJpYW50LmgJKHJldmlzaW9uIDI3
MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DaGVja1ByaXZhdGVCcmFu
ZFZhcmlhbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAogCiBuYW1lc3BhY2Ug
SlNDIHsKIAorY2xhc3MgQWJzdHJhY3RTbG90VmlzaXRvcjsKIGNsYXNzIENoZWNrUHJpdmF0ZUJy
YW5kU3RhdHVzOwogCiBjbGFzcyBDaGVja1ByaXZhdGVCcmFuZFZhcmlhbnQgewpAQCAtNDYsOCAr
NDcsOCBAQCBwdWJsaWM6CiAKICAgICBib29sIGF0dGVtcHRUb01lcmdlKGNvbnN0IENoZWNrUHJp
dmF0ZUJyYW5kVmFyaWFudCYgb3RoZXIpOwogCi0gICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShTbG90
VmlzaXRvciYpOwotICAgIHZvaWQgbWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImKTsKKyAgICBERUNM
QVJFX1ZJU0lUX0FHR1JFR0FURTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lk
IG1hcmtJZkNoZWFwKFZpc2l0b3ImKTsKICAgICBib29sIGZpbmFsaXplKFZNJik7CiAKICAgICB2
b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTAwMSw3ICsxMDAxLDggQEAgc2l6ZV90IENvZGVCbG9jazo6ZXN0aW1hdGVkU2l6ZShKU0NlbGwq
IAogICAgIHJldHVybiBCYXNlOjplc3RpbWF0ZWRTaXplKGNlbGwsIHZtKSArIGV4dHJhTWVtb3J5
QWxsb2NhdGVkOwogfQogCi12b2lkIENvZGVCbG9jazo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNl
bGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3Zv
aWQgQ29kZUJsb2NrOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZp
c2l0b3IpCiB7CiAgICAgQ29kZUJsb2NrKiB0aGlzT2JqZWN0ID0ganNDYXN0PENvZGVCbG9jayo+
KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygp
KTsKQEAgLTEwMTAsOSArMTAxMSwxNCBAQCB2b2lkIENvZGVCbG9jazo6dmlzaXRDaGlsZHJlbihK
U0NlbGwqIGNlCiAgICAgdGhpc09iamVjdC0+dmlzaXRDaGlsZHJlbih2aXNpdG9yKTsKIH0KIAot
dm9pZCBDb2RlQmxvY2s6OnZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCitERUZJ
TkVfVklTSVRfQ0hJTERSRU4oQ29kZUJsb2NrKTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRv
cj4KK3ZvaWQgQ29kZUJsb2NrOjp2aXNpdENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAg
ICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2spOworCisgICAgbV92aXNpdENoaWxk
cmVuU2tpcHBlZER1ZVRvT2xkQWdlID0gZmFsc2U7CiAgICAgaWYgKENvZGVCbG9jayogb3RoZXJC
bG9jayA9IHNwZWNpYWxPU1JFbnRyeUJsb2NrT3JOdWxsKCkpCiAgICAgICAgIHZpc2l0b3IuYXBw
ZW5kVW5iYXJyaWVyZWQob3RoZXJCbG9jayk7CiAKQEAgLTEwMjksMTMgKzEwMzUsMjEgQEAgdm9p
ZCBDb2RlQmxvY2s6OnZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0bwogICAgIFZNOjpTcGFjZUFuZFNl
dDo6c2V0Rm9yKCpzdWJzcGFjZSgpKS5hZGQodGhpcyk7CiB9CiAKLWJvb2wgQ29kZUJsb2NrOjpz
aG91bGRWaXNpdFN0cm9uZ2x5KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYgbG9ja2VyKQorYm9v
bCBDb2RlQmxvY2s6OnNob3VsZFZpc2l0U3Ryb25nbHkoY29uc3QgQ29uY3VycmVudEpTTG9ja2Vy
JiBsb2NrZXIsIEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgaWYgKE9wdGlv
bnM6OmZvcmNlQ29kZUJsb2NrTGl2ZW5lc3MoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAg
ICBpZiAoc2hvdWxkSmV0dGlzb25EdWVUb09sZEFnZShsb2NrZXIpKQorICAgIGlmIChzaG91bGRK
ZXR0aXNvbkR1ZVRvT2xkQWdlKGxvY2tlciwgdmlzaXRvcikpIHsKKyAgICAgICAgaWYgKE9wdGlv
bnM6OnZlcmlmeUdDKCkpCisgICAgICAgICAgICBtX3Zpc2l0Q2hpbGRyZW5Ta2lwcGVkRHVlVG9P
bGRBZ2UgPSB0cnVlOwogICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKFVO
TElLRUxZKG1fdmlzaXRDaGlsZHJlblNraXBwZWREdWVUb09sZEFnZSkpIHsKKyAgICAgICAgUkVM
RUFTRV9BU1NFUlQoT3B0aW9uczo6dmVyaWZ5R0MoKSk7IC8vIG1sYW0gQVNTRVJUPworICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQogCiAgICAgLy8gSW50ZXJwcmV0ZXIgYW5kIEJhc2VsaW5l
IEpJVCBDb2RlQmxvY2tzIGRvbid0IG5lZWQgdG8gYmUgamV0dGlzb25lZCB3aGVuCiAgICAgLy8g
dGhlaXIgd2VhayByZWZlcmVuY2VzIGdvIHN0YWxlLiBTbyBpZiBhIGJhc2xpbmUgSklUIENvZGVC
bG9jayBnZXRzCkBAIC0xMDg2LDkgKzExMDAsOSBAQCBzdGF0aWMgU2Vjb25kcyB0aW1lVG9MaXZl
KEpJVFR5cGUgaml0VHlwCiAgICAgfQogfQogCi1ib29sIENvZGVCbG9jazo6c2hvdWxkSmV0dGlz
b25EdWVUb09sZEFnZShjb25zdCBDb25jdXJyZW50SlNMb2NrZXImKQorYm9vbCBDb2RlQmxvY2s6
OnNob3VsZEpldHRpc29uRHVlVG9PbGRBZ2UoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgQWJz
dHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKLSAgICBpZiAobV92bS0+aGVhcC5pc01hcmtl
ZCh0aGlzKSkKKyAgICBpZiAodmlzaXRvci5pc01hcmtlZCh0aGlzKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCiAgICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OmZvcmNlQ29kZUJsb2NrVG9KZXR0
aXNvbkR1ZVRvT2xkQWdlKCkpKQpAQCAtMTEwMSwxMiArMTExNSwxMyBAQCBib29sIENvZGVCbG9j
azo6c2hvdWxkSmV0dGlzb25EdWVUb09sZEFnCiB9CiAKICNpZiBFTkFCTEUoREZHX0pJVCkKLXN0
YXRpYyBib29sIHNob3VsZE1hcmtUcmFuc2l0aW9uKFZNJiB2bSwgREZHOjpXZWFrUmVmZXJlbmNl
VHJhbnNpdGlvbiYgdHJhbnNpdGlvbikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+CitzdGF0
aWMgaW5saW5lIGJvb2wgc2hvdWxkTWFya1RyYW5zaXRpb24oVmlzaXRvciYgdmlzaXRvciwgREZH
OjpXZWFrUmVmZXJlbmNlVHJhbnNpdGlvbiYgdHJhbnNpdGlvbikKIHsKLSAgICBpZiAodHJhbnNp
dGlvbi5tX2NvZGVPcmlnaW4gJiYgIXZtLmhlYXAuaXNNYXJrZWQodHJhbnNpdGlvbi5tX2NvZGVP
cmlnaW4uZ2V0KCkpKQorICAgIGlmICh0cmFuc2l0aW9uLm1fY29kZU9yaWdpbiAmJiAhdmlzaXRv
ci5pc01hcmtlZCh0cmFuc2l0aW9uLm1fY29kZU9yaWdpbi5nZXQoKSkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICAKLSAgICBpZiAoIXZtLmhlYXAuaXNNYXJrZWQodHJhbnNpdGlvbi5tX2Zy
b20uZ2V0KCkpKQorICAgIGlmICghdmlzaXRvci5pc01hcmtlZCh0cmFuc2l0aW9uLm1fZnJvbS5n
ZXQoKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKICAgICByZXR1cm4gdHJ1ZTsKQEAg
LTExMjIsOCArMTEzNywxMCBAQCBCeXRlY29kZUluZGV4IENvZGVCbG9jazo6Ynl0ZWNvZGVJbmRl
eEZvCiB9CiAjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCiAKLXZvaWQgQ29kZUJsb2NrOjpwcm9w
YWdhdGVUcmFuc2l0aW9ucyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBTbG90VmlzaXRvciYg
dmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIENvZGVCbG9jazo6cHJv
cGFnYXRlVHJhbnNpdGlvbnMoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgVmlzaXRvciYgdmlz
aXRvcikKIHsKKyAgICB0eXBlbmFtZSBWaXNpdG9yOjpTdXBwcmVzc0dDVmVyaWZpZXJTY29wZSBz
dXBwcmVzc1Njb3BlKHZpc2l0b3IpOwogICAgIFZNJiB2bSA9ICptX3ZtOwogCiAgICAgaWYgKGpp
dFR5cGUoKSA9PSBKSVRUeXBlOjpJbnRlcnByZXRlclRodW5rKSB7CkBAIC0xMTMzLDggKzExNTAs
OSBAQCB2b2lkIENvZGVCbG9jazo6cHJvcGFnYXRlVHJhbnNpdGlvbnMoY29uCiAgICAgICAgICAg
ICAgICAgU3RydWN0dXJlSUQgbmV3U3RydWN0dXJlSUQgPSBtZXRhZGF0YS5tX25ld1N0cnVjdHVy
ZUlEOwogICAgICAgICAgICAgICAgIGlmICghb2xkU3RydWN0dXJlSUQgfHwgIW5ld1N0cnVjdHVy
ZUlEKQogICAgICAgICAgICAgICAgICAgICByZXR1cm47CisKICAgICAgICAgICAgICAgICBTdHJ1
Y3R1cmUqIG9sZFN0cnVjdHVyZSA9IHZtLmhlYXAuc3RydWN0dXJlSURUYWJsZSgpLmdldChvbGRT
dHJ1Y3R1cmVJRCk7Ci0gICAgICAgICAgICAgICAgaWYgKHZtLmhlYXAuaXNNYXJrZWQob2xkU3Ry
dWN0dXJlKSkgeworICAgICAgICAgICAgICAgIGlmICh2aXNpdG9yLmlzTWFya2VkKG9sZFN0cnVj
dHVyZSkpIHsKICAgICAgICAgICAgICAgICAgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSB2
bS5oZWFwLnN0cnVjdHVyZUlEVGFibGUoKS5nZXQobmV3U3RydWN0dXJlSUQpOwogICAgICAgICAg
ICAgICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKG5ld1N0cnVjdHVyZSk7CiAgICAg
ICAgICAgICAgICAgfQpAQCAtMTE0OCwxMSArMTE2NiwxMSBAQCB2b2lkIENvZGVCbG9jazo6cHJv
cGFnYXRlVHJhbnNpdGlvbnMoY29uCiAKICAgICAgICAgICAgICAgICBKU0NlbGwqIHByb3BlcnR5
ID0gbWV0YWRhdGEubV9wcm9wZXJ0eS5nZXQoKTsKICAgICAgICAgICAgICAgICBBU1NFUlQocHJv
cGVydHkpOwotICAgICAgICAgICAgICAgIGlmICghdm0uaGVhcC5pc01hcmtlZChwcm9wZXJ0eSkp
CisgICAgICAgICAgICAgICAgaWYgKCF2aXNpdG9yLmlzTWFya2VkKHByb3BlcnR5KSkKICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgICAgICAgICAgU3RydWN0dXJlKiBvbGRT
dHJ1Y3R1cmUgPSB2bS5oZWFwLnN0cnVjdHVyZUlEVGFibGUoKS5nZXQob2xkU3RydWN0dXJlSUQp
OwotICAgICAgICAgICAgICAgIGlmICh2bS5oZWFwLmlzTWFya2VkKG9sZFN0cnVjdHVyZSkpIHsK
KyAgICAgICAgICAgICAgICBpZiAodmlzaXRvci5pc01hcmtlZChvbGRTdHJ1Y3R1cmUpKSB7CiAg
ICAgICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0gdm0uaGVhcC5zdHJ1
Y3R1cmVJRFRhYmxlKCkuZ2V0KG5ld1N0cnVjdHVyZUlEKTsKICAgICAgICAgICAgICAgICAgICAg
dmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZChuZXdTdHJ1Y3R1cmUpOwogICAgICAgICAgICAgICAg
IH0KQEAgLTExNzAsNyArMTE4OCw3IEBAIHZvaWQgQ29kZUJsb2NrOjpwcm9wYWdhdGVUcmFuc2l0
aW9ucyhjb24KICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgICAgICAgICAg
U3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUgPSB2bS5oZWFwLnN0cnVjdHVyZUlEVGFibGUoKS5nZXQo
b2xkU3RydWN0dXJlSUQpOwotICAgICAgICAgICAgICAgIGlmICh2bS5oZWFwLmlzTWFya2VkKG9s
ZFN0cnVjdHVyZSkpIHsKKyAgICAgICAgICAgICAgICBpZiAodmlzaXRvci5pc01hcmtlZChvbGRT
dHJ1Y3R1cmUpKSB7CiAgICAgICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJl
ID0gdm0uaGVhcC5zdHJ1Y3R1cmVJRFRhYmxlKCkuZ2V0KG5ld1N0cnVjdHVyZUlEKTsKICAgICAg
ICAgICAgICAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZChuZXdTdHJ1Y3R1cmUpOwog
ICAgICAgICAgICAgICAgIH0KQEAgLTExOTcsNyArMTIxNSw3IEBAIHZvaWQgQ29kZUJsb2NrOjpw
cm9wYWdhdGVUcmFuc2l0aW9ucyhjb24KICAgICAgICAgICAgIHZtLmdldFN0cnVjdHVyZShzdHJ1
Y3R1cmVJRCktPm1hcmtJZkNoZWFwKHZpc2l0b3IpOwogCiAgICAgICAgIGZvciAoYXV0byYgdHJh
bnNpdGlvbiA6IGRmZ0NvbW1vbi0+dHJhbnNpdGlvbnMpIHsKLSAgICAgICAgICAgIGlmIChzaG91
bGRNYXJrVHJhbnNpdGlvbih2bSwgdHJhbnNpdGlvbikpIHsKKyAgICAgICAgICAgIGlmIChzaG91
bGRNYXJrVHJhbnNpdGlvbih2aXNpdG9yLCB0cmFuc2l0aW9uKSkgewogICAgICAgICAgICAgICAg
IC8vIElmIHRoZSBmb2xsb3dpbmcgdGhyZWUgdGhpbmdzIGFyZSBsaXZlLCB0aGVuIHRoZSB0YXJn
ZXQgb2YgdGhlCiAgICAgICAgICAgICAgICAgLy8gdHJhbnNpdGlvbiBpcyBhbHNvIGxpdmU6CiAg
ICAgICAgICAgICAgICAgLy8KQEAgLTEyMjQsMTMgKzEyNDIsMTcgQEAgdm9pZCBDb2RlQmxvY2s6
OnByb3BhZ2F0ZVRyYW5zaXRpb25zKGNvbgogI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQogfQog
Ci12b2lkIENvZGVCbG9jazo6ZGV0ZXJtaW5lTGl2ZW5lc3MoY29uc3QgQ29uY3VycmVudEpTTG9j
a2VyJiwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZSB2b2lkIENvZGVCbG9jazo6cHJv
cGFnYXRlVHJhbnNpdGlvbnMoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgQWJzdHJhY3RTbG90
VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBDb2RlQmxvY2s6OnByb3BhZ2F0ZVRyYW5zaXRpb25z
KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIFNsb3RWaXNpdG9yJik7CisKK3RlbXBsYXRlPHR5
cGVuYW1lIFZpc2l0b3I+Cit2b2lkIENvZGVCbG9jazo6ZGV0ZXJtaW5lTGl2ZW5lc3MoY29uc3Qg
Q29uY3VycmVudEpTTG9ja2VyJiwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBVTlVTRURfUEFS
QU0odmlzaXRvcik7CiAgICAgCiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAgVk0mIHZtID0gKm1f
dm07Ci0gICAgaWYgKHZtLmhlYXAuaXNNYXJrZWQodGhpcykpCisgICAgaWYgKHZpc2l0b3IuaXNN
YXJrZWQodGhpcykpCiAgICAgICAgIHJldHVybjsKICAgICAKICAgICAvLyBJbiByYXJlIGFuZCB3
ZWlyZCBjYXNlcywgdGhpcyBjb3VsZCBiZSBjYWxsZWQgb24gYSBiYXNlbGluZSBDb2RlQmxvY2su
IE9uZSB0aGF0IEkgZm91bmQgd2FzCkBAIC0xMjQ3LDcgKzEyNjksNyBAQCB2b2lkIENvZGVCbG9j
azo6ZGV0ZXJtaW5lTGl2ZW5lc3MoY29uc3QgCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGRmZ0NvbW1vbi0+d2Vha1JlZmVyZW5jZXMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgSlNDZWxs
KiByZWZlcmVuY2UgPSBkZmdDb21tb24tPndlYWtSZWZlcmVuY2VzW2ldLmdldCgpOwogICAgICAg
ICBBU1NFUlQoIWpzRHluYW1pY0Nhc3Q8Q29kZUJsb2NrKj4odm0sIHJlZmVyZW5jZSkpOwotICAg
ICAgICBpZiAoIXZtLmhlYXAuaXNNYXJrZWQocmVmZXJlbmNlKSkgeworICAgICAgICBpZiAoIXZp
c2l0b3IuaXNNYXJrZWQocmVmZXJlbmNlKSkgewogICAgICAgICAgICAgYWxsQXJlTGl2ZVNvRmFy
ID0gZmFsc2U7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtMTI1NSw3ICsxMjc3
LDcgQEAgdm9pZCBDb2RlQmxvY2s6OmRldGVybWluZUxpdmVuZXNzKGNvbnN0IAogICAgIGlmIChh
bGxBcmVMaXZlU29GYXIpIHsKICAgICAgICAgZm9yIChTdHJ1Y3R1cmVJRCBzdHJ1Y3R1cmVJRCA6
IGRmZ0NvbW1vbi0+d2Vha1N0cnVjdHVyZVJlZmVyZW5jZXMpIHsKICAgICAgICAgICAgIFN0cnVj
dHVyZSogc3RydWN0dXJlID0gdm0uZ2V0U3RydWN0dXJlKHN0cnVjdHVyZUlEKTsKLSAgICAgICAg
ICAgIGlmICghdm0uaGVhcC5pc01hcmtlZChzdHJ1Y3R1cmUpKSB7CisgICAgICAgICAgICBpZiAo
IXZpc2l0b3IuaXNNYXJrZWQoc3RydWN0dXJlKSkgewogICAgICAgICAgICAgICAgIGFsbEFyZUxp
dmVTb0ZhciA9IGZhbHNlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQpA
QCAtMTI3Myw2ICsxMjk1LDkgQEAgdm9pZCBDb2RlQmxvY2s6OmRldGVybWluZUxpdmVuZXNzKGNv
bnN0IAogI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQogfQogCit0ZW1wbGF0ZSB2b2lkIENvZGVC
bG9jazo6ZGV0ZXJtaW5lTGl2ZW5lc3MoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgQWJzdHJh
Y3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBDb2RlQmxvY2s6OmRldGVybWluZUxpdmVu
ZXNzKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIFNsb3RWaXNpdG9yJik7CisKIHZvaWQgQ29k
ZUJsb2NrOjpmaW5hbGl6ZUxMSW50SW5saW5lQ2FjaGVzKCkKIHsKICAgICBWTSYgdm0gPSAqbV92
bTsKQEAgLTE2MTYsNiArMTY0MSw3IEBAIHZvaWQgQ29kZUJsb2NrOjpmaW5hbGl6ZVVuY29uZGl0
aW9uYWxseSgKICAgICB1cGRhdGVBY3Rpdml0eSgpOwogCiAgICAgVk06OlNwYWNlQW5kU2V0Ojpz
ZXRGb3IoKnN1YnNwYWNlKCkpLnJlbW92ZSh0aGlzKTsKKyAgICBtX3Zpc2l0Q2hpbGRyZW5Ta2lw
cGVkRHVlVG9PbGRBZ2UgPSBmYWxzZTsKIH0KIAogdm9pZCBDb2RlQmxvY2s6OmRlc3Ryb3koSlND
ZWxsKiBjZWxsKQpAQCAtMTgwOCw3ICsxODM0LDggQEAgdm9pZCBDb2RlQmxvY2s6OnJlc2V0SklU
RGF0YSgpCiB9CiAjZW5kaWYKIAotdm9pZCBDb2RlQmxvY2s6OnZpc2l0T1NSRXhpdFRhcmdldHMo
Y29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0
ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBDb2RlQmxvY2s6OnZpc2l0T1NSRXhpdFRhcmdldHMo
Y29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICAvLyBX
ZSBzdHJvbmdseSB2aXNpdCBPU1IgZXhpdHMgdGFyZ2V0cyBiZWNhdXNlIHdlIGRvbid0IHdhbnQg
dG8gZGVhbCB3aXRoCiAgICAgLy8gdGhlIGNvbXBsZXhpdHkgb2YgZ2VuZXJhdGluZyBhbiBleGl0
IHRhcmdldCBDb2RlQmxvY2sgb24gZGVtYW5kIGFuZApAQCAtMTgyOCw3ICsxODU1LDggQEAgdm9p
ZCBDb2RlQmxvY2s6OnZpc2l0T1NSRXhpdFRhcmdldHMoY29ucwogI2VuZGlmCiB9CiAKLXZvaWQg
Q29kZUJsb2NrOjpzdHJvbmdseVZpc2l0U3Ryb25nUmVmZXJlbmNlcyhjb25zdCBDb25jdXJyZW50
SlNMb2NrZXImIGxvY2tlciwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBWaXNpdG9yPgordm9pZCBDb2RlQmxvY2s6OnN0cm9uZ2x5VmlzaXRTdHJvbmdSZWZlcmVuY2Vz
KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYgbG9ja2VyLCBWaXNpdG9yJiB2aXNpdG9yKQogewog
ICAgIFVOVVNFRF9QQVJBTShsb2NrZXIpOwogICAgIApAQCAtMTg2NCw3ICsxODkyLDggQEAgdm9p
ZCBDb2RlQmxvY2s6OnN0cm9uZ2x5VmlzaXRTdHJvbmdSZWZlcgogI2VuZGlmCiB9CiAKLXZvaWQg
Q29kZUJsb2NrOjpzdHJvbmdseVZpc2l0V2Vha1JlZmVyZW5jZXMoY29uc3QgQ29uY3VycmVudEpT
TG9ja2VyJiwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
Pgordm9pZCBDb2RlQmxvY2s6OnN0cm9uZ2x5VmlzaXRXZWFrUmVmZXJlbmNlcyhjb25zdCBDb25j
dXJyZW50SlNMb2NrZXImLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFVOVVNFRF9QQVJBTSh2
aXNpdG9yKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9j
ay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxv
Y2suaAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAwOC0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAwOC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
IENvcHlyaWdodCAoQykgMjAwOCBDYW1lcm9uIFp3YXJpY2ggPGN3endhcmljaEB1d2F0ZXJsb28u
Y2E+CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0yMDEsMTAgKzIwMSwxMCBAQCBwdWJsaWM6CiAgICAg
Ly8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyMzY3NwogICAgIENv
ZGVCbG9jayogYmFzZWxpbmVWZXJzaW9uKCk7CiAKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVO
OworCiAgICAgc3RhdGljIHNpemVfdCBlc3RpbWF0ZWRTaXplKEpTQ2VsbCosIFZNJik7Ci0gICAg
c3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwogICAgIHN0
YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7Ci0gICAgdm9pZCB2aXNpdENoaWxkcmVuKFNsb3RW
aXNpdG9yJik7CiAgICAgdm9pZCBmaW5hbGl6ZVVuY29uZGl0aW9uYWxseShWTSYpOwogCiAgICAg
dm9pZCBub3RpZnlMZXhpY2FsQmluZGluZ1VwZGF0ZSgpOwpAQCAtOTQzLDYgKzk0Myw4IEBAIHBy
aXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIENvZGVCbG9ja1NldDsKICAgICBmcmllbmQgY2xhc3Mg
RXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZTsKIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0
b3I+IEFMV0FZU19JTkxJTkUgdm9pZCB2aXNpdENoaWxkcmVuKFZpc2l0b3ImKTsKKwogICAgIEJ5
dGVjb2RlTGl2ZW5lc3NBbmFseXNpcyYgbGl2ZW5lc3NBbmFseXNpc1Nsb3coKTsKICAgICAKICAg
ICBDb2RlQmxvY2sqIHNwZWNpYWxPU1JFbnRyeUJsb2NrT3JOdWxsKCk7CkBAIC05NjMsMTYgKzk2
NSwxNiBAQCBwcml2YXRlOgogICAgICAgICBtX2NvbnN0YW50UmVnaXN0ZXJzW3JlZy50b0NvbnN0
YW50SW5kZXgoKV0uc2V0KCptX3ZtLCB0aGlzLCB2YWx1ZSk7CiAgICAgfQogCi0gICAgYm9vbCBz
aG91bGRWaXNpdFN0cm9uZ2x5KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYpOworICAgIGJvb2wg
c2hvdWxkVmlzaXRTdHJvbmdseShjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBBYnN0cmFjdFNs
b3RWaXNpdG9yJik7CiAgICAgYm9vbCBzaG91bGRKZXR0aXNvbkR1ZVRvV2Vha1JlZmVyZW5jZShW
TSYpOwotICAgIGJvb2wgc2hvdWxkSmV0dGlzb25EdWVUb09sZEFnZShjb25zdCBDb25jdXJyZW50
SlNMb2NrZXImKTsKKyAgICBib29sIHNob3VsZEpldHRpc29uRHVlVG9PbGRBZ2UoY29uc3QgQ29u
Y3VycmVudEpTTG9ja2VyJiwgQWJzdHJhY3RTbG90VmlzaXRvciYpOwogICAgIAotICAgIHZvaWQg
cHJvcGFnYXRlVHJhbnNpdGlvbnMoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgU2xvdFZpc2l0
b3ImKTsKLSAgICB2b2lkIGRldGVybWluZUxpdmVuZXNzKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tl
ciYsIFNsb3RWaXNpdG9yJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCBw
cm9wYWdhdGVUcmFuc2l0aW9ucyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBWaXNpdG9yJik7
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCBkZXRlcm1pbmVMaXZlbmVzcyhj
b25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBWaXNpdG9yJik7CiAgICAgICAgIAotICAgIHZvaWQg
c3Ryb25nbHlWaXNpdFN0cm9uZ1JlZmVyZW5jZXMoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwg
U2xvdFZpc2l0b3ImKTsKLSAgICB2b2lkIHN0cm9uZ2x5VmlzaXRXZWFrUmVmZXJlbmNlcyhjb25z
dCBDb25jdXJyZW50SlNMb2NrZXImLCBTbG90VmlzaXRvciYpOwotICAgIHZvaWQgdmlzaXRPU1JF
eGl0VGFyZ2V0cyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBTbG90VmlzaXRvciYpOworICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgc3Ryb25nbHlWaXNpdFN0cm9uZ1JlZmVy
ZW5jZXMoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgVmlzaXRvciYpOworICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgc3Ryb25nbHlWaXNpdFdlYWtSZWZlcmVuY2VzKGNvbnN0
IENvbmN1cnJlbnRKU0xvY2tlciYsIFZpc2l0b3ImKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPiB2b2lkIHZpc2l0T1NSRXhpdFRhcmdldHMoY29uc3QgQ29uY3VycmVudEpTTG9ja2Vy
JiwgVmlzaXRvciYpOwogCiAgICAgdW5zaWduZWQgbnVtYmVyT2ZOb25Bcmd1bWVudFZhbHVlUHJv
ZmlsZXMoKSB7IHJldHVybiBtX251bWJlck9mTm9uQXJndW1lbnRWYWx1ZVByb2ZpbGVzOyB9CiAg
ICAgdW5zaWduZWQgdG90YWxOdW1iZXJPZlZhbHVlUHJvZmlsZXMoKSB7IHJldHVybiBudW1iZXJP
ZkFyZ3VtZW50VmFsdWVQcm9maWxlcygpICsgbnVtYmVyT2ZOb25Bcmd1bWVudFZhbHVlUHJvZmls
ZXMoKTsgfQpAQCAtMTAxMSw2ICsxMDEzLDcgQEAgcHJpdmF0ZToKICAgICB1bnNpZ25lZCBtX2J5
dGVjb2RlQ29zdCB7IDAgfTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgbV9zY29wZVJlZ2lzdGVyOwog
ICAgIG11dGFibGUgQ29kZUJsb2NrSGFzaCBtX2hhc2g7CisgICAgYm9vbCBtX3Zpc2l0Q2hpbGRy
ZW5Ta2lwcGVkRHVlVG9PbGRBZ2UgeyBmYWxzZSB9OwogCiAgICAgV3JpdGVCYXJyaWVyPFVubGlu
a2VkQ29kZUJsb2NrPiBtX3VubGlua2VkQ29kZTsKICAgICBXcml0ZUJhcnJpZXI8U2NyaXB0RXhl
Y3V0YWJsZT4gbV9vd25lckV4ZWN1dGFibGU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvRGVsZXRlQnlJZFZhcmlhbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9EZWxldGVCeUlkVmFyaWFudC5jcHAJKHJldmlzaW9uIDI3Mjkw
MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9EZWxldGVCeUlkVmFyaWFudC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAy
MC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtODgsMTIgKzg4LDE2IEBAIGJvb2wgRGVsZXRlQnlJZFZhcmlhbnQ6
OndyaXRlc1N0cnVjdHVyZXMKICAgICByZXR1cm4gISFuZXdTdHJ1Y3R1cmUoKTsKIH0KIAotdm9p
ZCBEZWxldGVCeUlkVmFyaWFudDo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3Ip
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBEZWxldGVCeUlkVmFyaWFudDo6dmlz
aXRBZ2dyZWdhdGVJbXBsKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgbV9pZGVudGlmaWVyLnZp
c2l0QWdncmVnYXRlKHZpc2l0b3IpOwogfQogCi12b2lkIERlbGV0ZUJ5SWRWYXJpYW50OjptYXJr
SWZDaGVhcChTbG90VmlzaXRvciYgdmlzaXRvcikKK0RFRklORV9WSVNJVF9BR0dSRUdBVEUoRGVs
ZXRlQnlJZFZhcmlhbnQpOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBEZWxl
dGVCeUlkVmFyaWFudDo6bWFya0lmQ2hlYXAoVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBpZiAo
bV9vbGRTdHJ1Y3R1cmUpCiAgICAgICAgIG1fb2xkU3RydWN0dXJlLT5tYXJrSWZDaGVhcCh2aXNp
dG9yKTsKQEAgLTEwMSw2ICsxMDUsOSBAQCB2b2lkIERlbGV0ZUJ5SWRWYXJpYW50OjptYXJrSWZD
aGVhcChTbG90CiAgICAgICAgIG1fbmV3U3RydWN0dXJlLT5tYXJrSWZDaGVhcCh2aXNpdG9yKTsK
IH0KIAordGVtcGxhdGUgdm9pZCBEZWxldGVCeUlkVmFyaWFudDo6bWFya0lmQ2hlYXAoQWJzdHJh
Y3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBEZWxldGVCeUlkVmFyaWFudDo6bWFya0lm
Q2hlYXAoU2xvdFZpc2l0b3ImKTsKKwogdm9pZCBEZWxldGVCeUlkVmFyaWFudDo6ZHVtcChQcmlu
dFN0cmVhbSYgb3V0KSBjb25zdAogewogICAgIGR1bXBJbkNvbnRleHQob3V0LCBudWxscHRyKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9EZWxldGVCeUlkVmFyaWFudC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9EZWxldGVCeUlk
VmFyaWFudC5oCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvRGVsZXRlQnlJZFZhcmlhbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDIwLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02MSw4ICs2MSw4IEBAIHB1
YmxpYzoKIAogICAgIGJvb2wgYXR0ZW1wdFRvTWVyZ2UoY29uc3QgRGVsZXRlQnlJZFZhcmlhbnQm
IG90aGVyKTsKIAotICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImKTsKLSAgICB2
b2lkIG1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9BR0dSRUdB
VEU7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCBtYXJrSWZDaGVhcChWaXNp
dG9yJik7CiAgICAgYm9vbCBmaW5hbGl6ZShWTSYpOwogCiAgICAgdm9pZCBkdW1wKFByaW50U3Ry
ZWFtJikgY29uc3Q7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRGVsZXRl
QnlTdGF0dXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9EZWxldGVCeVN0YXR1cy5jcHAJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9EZWxldGVCeVN0YXR1cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMC0yMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjU0LDE4
ICsyNTQsMjUgQEAgQ2FjaGVhYmxlSWRlbnRpZmllciBEZWxldGVCeVN0YXR1czo6c2luZwogICAg
IHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQgRGVsZXRlQnlTdGF0dXM6OnZpc2l0QWdncmVnYXRl
KFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQg
RGVsZXRlQnlTdGF0dXM6OnZpc2l0QWdncmVnYXRlSW1wbChWaXNpdG9yJiB2aXNpdG9yKQogewog
ICAgIGZvciAoRGVsZXRlQnlJZFZhcmlhbnQmIHZhcmlhbnQgOiBtX3ZhcmlhbnRzKQogICAgICAg
ICB2YXJpYW50LnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOwogfQogCi12b2lkIERlbGV0ZUJ5U3Rh
dHVzOjptYXJrSWZDaGVhcChTbG90VmlzaXRvciYgdmlzaXRvcikKK0RFRklORV9WSVNJVF9BR0dS
RUdBVEUoRGVsZXRlQnlTdGF0dXMpOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9p
ZCBEZWxldGVCeVN0YXR1czo6bWFya0lmQ2hlYXAoVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBm
b3IgKERlbGV0ZUJ5SWRWYXJpYW50JiB2YXJpYW50IDogbV92YXJpYW50cykKICAgICAgICAgdmFy
aWFudC5tYXJrSWZDaGVhcCh2aXNpdG9yKTsKIH0KIAordGVtcGxhdGUgdm9pZCBEZWxldGVCeVN0
YXR1czo6bWFya0lmQ2hlYXAoQWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBE
ZWxldGVCeVN0YXR1czo6bWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImKTsKKwogYm9vbCBEZWxldGVC
eVN0YXR1czo6ZmluYWxpemUoVk0mIHZtKQogewogICAgIGZvciAoYXV0byYgdmFyaWFudCA6IG1f
dmFyaWFudHMpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9EZWxldGVC
eVN0YXR1cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9E
ZWxldGVCeVN0YXR1cy5oCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvRGVsZXRlQnlTdGF0dXMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIwLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC04MSw4ICs4MSw4IEBA
IHB1YmxpYzoKICAgICAvLyBBdHRlbXB0cyB0byByZWR1Y2UgdGhlIHNldCBvZiB2YXJpYW50cyB0
byBmaXQgdGhlIGdpdmVuIHN0cnVjdHVyZSBzZXQuIFRoaXMgbWF5IGJlIGFwcHJveGltYXRlLgog
ICAgIHZvaWQgZmlsdGVyKGNvbnN0IFN0cnVjdHVyZVNldCYpOwogCi0gICAgdm9pZCB2aXNpdEFn
Z3JlZ2F0ZShTbG90VmlzaXRvciYpOwotICAgIHZvaWQgbWFya0lmQ2hlYXAoU2xvdFZpc2l0b3Im
KTsKKyAgICBERUNMQVJFX1ZJU0lUX0FHR1JFR0FURTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPiB2b2lkIG1hcmtJZkNoZWFwKFZpc2l0b3ImKTsKICAgICBib29sIGZpbmFsaXplKFZN
Jik7CiAKICAgICBib29sIGFwcGVuZFZhcmlhbnQoY29uc3QgRGVsZXRlQnlJZFZhcmlhbnQmKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9EaXJlY3RFdmFsQ29kZUNhY2hl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRGlyZWN0
RXZhbENvZGVDYWNoZS5jcHAJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9EaXJlY3RFdmFsQ29kZUNhY2hlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00NSw3
ICs0NSw4IEBAIHZvaWQgRGlyZWN0RXZhbENvZGVDYWNoZTo6Y2xlYXIoKQogICAgIG1fY2FjaGVN
YXAuY2xlYXIoKTsKIH0KIAotdm9pZCBEaXJlY3RFdmFsQ29kZUNhY2hlOjp2aXNpdEFnZ3JlZ2F0
ZShTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lk
IERpcmVjdEV2YWxDb2RlQ2FjaGU6OnZpc2l0QWdncmVnYXRlSW1wbChWaXNpdG9yJiB2aXNpdG9y
KQogewogICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fbG9jayk7CiAgICAgRXZhbENhY2hlTWFwOjpp
dGVyYXRvciBlbmQgPSBtX2NhY2hlTWFwLmVuZCgpOwpAQCAtNTMsNSArNTQsNiBAQCB2b2lkIERp
cmVjdEV2YWxDb2RlQ2FjaGU6OnZpc2l0QWdncmVnYXRlCiAgICAgICAgIHZpc2l0b3IuYXBwZW5k
KHB0ci0+dmFsdWUpOwogfQogCi19IC8vIG5hbWVzcGFjZSBKU0MKK0RFRklORV9WSVNJVF9BR0dS
RUdBVEUoRGlyZWN0RXZhbENvZGVDYWNoZSk7CiAKK30gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0RpcmVjdEV2YWxDb2RlQ2FjaGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRGlyZWN0RXZhbENvZGVD
YWNoZS5oCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvRGlyZWN0RXZhbENvZGVDYWNoZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAwOC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtOTcsNyArOTcsNyBA
QCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVy
biBtX2NhY2hlTWFwLmlzRW1wdHkoKTsgfQogCi0gICAgICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUo
U2xvdFZpc2l0b3ImKTsKKyAgICAgICAgREVDTEFSRV9WSVNJVF9BR0dSRUdBVEU7CiAKICAgICAg
ICAgdm9pZCBjbGVhcigpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
RXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UuY3BwCShyZXZpc2lv
biAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhlY3V0YWJsZVRv
Q29kZUJsb2NrRWRnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxOC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTMsNyArNTMsOCBAQCB2b2lkIEV4ZWN1
dGFibGVUb0NvZGVCbG9ja0VkZ2U6OmZpbmlzaENyCiAgICAgQVNTRVJUKCFpc0FjdGl2ZSgpKTsK
IH0KIAotdm9pZCBFeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlOjp2aXNpdENoaWxkcmVuKEpTQ2Vs
bCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
Pgordm9pZCBFeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlOjp2aXNpdENoaWxkcmVuSW1wbChKU0Nl
bGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgVk0mIHZtID0gdmlzaXRvci52bSgp
OwogICAgIEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UqIGVkZ2UgPSBqc0Nhc3Q8RXhlY3V0YWJs
ZVRvQ29kZUJsb2NrRWRnZSo+KGNlbGwpOwpAQCAtNjEsNyArNjIsNyBAQCB2b2lkIEV4ZWN1dGFi
bGVUb0NvZGVCbG9ja0VkZ2U6OnZpc2l0Q2hpCiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbihjZWxs
LCB2aXNpdG9yKTsKIAogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gZWRnZS0+bV9jb2RlQmxv
Y2suZ2V0KCk7Ci0gICAgCisKICAgICAvLyBJdCdzIHBvc3NpYmxlIGZvciBzb21lb25lIHRvIGhv
bGQgYSBwb2ludGVyIHRvIHRoZSBlZGdlIGFmdGVyIHRoZSBlZGdlIGhhcyBjbGVhcmVkIGl0cyB3
ZWFrCiAgICAgLy8gcmVmZXJlbmNlIHRvIHRoZSBjb2RlQmxvY2suIEluIGEgY29uc2VydmF0aXZl
IEdDIGxpa2Ugb3VycywgdGhhdCBjb3VsZCBoYXBwZW4gYXQgcmFuZG9tIGZvcgogICAgIC8vIG5v
IGdvb2QgcmVhc29uIGFuZCBpdCdzIFRvdGFsbHkgT0sgKFRNKS4gU2VlIGZpbmFsaXplVW5jb25k
aXRpb25hbGx5KCkgZm9yIHdoZXJlIHdlIGNsZWFyCkBAIC03NSwxMSArNzYsMTEgQEAgdm9pZCBF
eGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlOjp2aXNpdENoaQogICAgIH0KICAgICAKICAgICBDb25j
dXJyZW50SlNMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrKTsKLSAgICAKLSAgICBpZiAo
Y29kZUJsb2NrLT5zaG91bGRWaXNpdFN0cm9uZ2x5KGxvY2tlcikpCisKKyAgICBpZiAoY29kZUJs
b2NrLT5zaG91bGRWaXNpdFN0cm9uZ2x5KGxvY2tlciwgdmlzaXRvcikpCiAgICAgICAgIHZpc2l0
b3IuYXBwZW5kVW5iYXJyaWVyZWQoY29kZUJsb2NrKTsKICAgICAKLSAgICBpZiAoIXZtLmhlYXAu
aXNNYXJrZWQoY29kZUJsb2NrKSkKKyAgICBpZiAoIXZpc2l0b3IuaXNNYXJrZWQoY29kZUJsb2Nr
KSkKICAgICAgICAgdm0uZXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZXNXaXRoRmluYWxpemVycy5h
ZGQoZWRnZSk7CiAgICAgCiAgICAgaWYgKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChjb2RlQmxv
Y2stPmppdFR5cGUoKSkpIHsKQEAgLTExNyw3ICsxMTgsMTAgQEAgdm9pZCBFeGVjdXRhYmxlVG9D
b2RlQmxvY2tFZGdlOjp2aXNpdENoaQogICAgIGVkZ2UtPnJ1bkNvbnN0cmFpbnQobG9ja2VyLCB2
bSwgdmlzaXRvcik7CiB9CiAKLXZvaWQgRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZTo6dmlzaXRP
dXRwdXRDb25zdHJhaW50cyhKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorREVG
SU5FX1ZJU0lUX0NISUxEUkVOKEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UpOworCit0ZW1wbGF0
ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBFeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlOjp2aXNp
dE91dHB1dENvbnN0cmFpbnRzSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7
CiAgICAgVk0mIHZtID0gdmlzaXRvci52bSgpOwogICAgIEV4ZWN1dGFibGVUb0NvZGVCbG9ja0Vk
Z2UqIGVkZ2UgPSBqc0Nhc3Q8RXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZSo+KGNlbGwpOwpAQCAt
MTI1LDYgKzEyOSw4IEBAIHZvaWQgRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZTo6dmlzaXRPdXQK
ICAgICBlZGdlLT5ydW5Db25zdHJhaW50KE5vTG9ja2luZ05lY2Vzc2FyeSwgdm0sIHZpc2l0b3Ip
OwogfQogCitERUZJTkVfVklTSVRfT1VUUFVUX0NPTlNUUkFJTlRTKEV4ZWN1dGFibGVUb0NvZGVC
bG9ja0VkZ2UpOworCiB2b2lkIEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2U6OmZpbmFsaXplVW5j
b25kaXRpb25hbGx5KFZNJiB2bSkKIHsKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IG1fY29k
ZUJsb2NrLmdldCgpOwpAQCAtMTg2LDE2ICsxOTIsMjEgQEAgRXhlY3V0YWJsZVRvQ29kZUJsb2Nr
RWRnZTo6RXhlY3V0YWJsZVRvQwogewogfQogCi12b2lkIEV4ZWN1dGFibGVUb0NvZGVCbG9ja0Vk
Z2U6OnJ1bkNvbnN0cmFpbnQoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiBsb2NrZXIsIFZNJiB2
bSwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9p
ZCBFeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlOjpydW5Db25zdHJhaW50KGNvbnN0IENvbmN1cnJl
bnRKU0xvY2tlciYgbG9ja2VyLCBWTSYgdm0sIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgQ29k
ZUJsb2NrKiBjb2RlQmxvY2sgPSBtX2NvZGVCbG9jay5nZXQoKTsKICAgICAKICAgICBjb2RlQmxv
Y2stPnByb3BhZ2F0ZVRyYW5zaXRpb25zKGxvY2tlciwgdmlzaXRvcik7CiAgICAgY29kZUJsb2Nr
LT5kZXRlcm1pbmVMaXZlbmVzcyhsb2NrZXIsIHZpc2l0b3IpOwotICAgIAotICAgIGlmICh2bS5o
ZWFwLmlzTWFya2VkKGNvZGVCbG9jaykpCisKKyAgICBpZiAodmlzaXRvci5pc01hcmtlZChjb2Rl
QmxvY2spKQogICAgICAgICB2bS5leGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlc1dpdGhDb25zdHJh
aW50cy5yZW1vdmUodGhpcyk7CiB9CiAKK3RlbXBsYXRlIHZvaWQgRXhlY3V0YWJsZVRvQ29kZUJs
b2NrRWRnZTo6cnVuQ29uc3RyYWludChjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBWTSYsIEFi
c3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgRXhlY3V0YWJsZVRvQ29kZUJsb2Nr
RWRnZTo6cnVuQ29uc3RyYWludChjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBWTSYsIFNsb3RW
aXNpdG9yJik7CisKKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9FeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGFibGVUb0NvZGVCbG9ja0Vk
Z2UuaAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0V4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTUzLDkgKzUz
LDkgQEAgcHVibGljOgogICAgIERFQ0xBUkVfSU5GTzsKIAogICAgIENvZGVCbG9jayogY29kZUJs
b2NrKCkgY29uc3QgeyByZXR1cm4gbV9jb2RlQmxvY2suZ2V0KCk7IH0KLSAgICAKLSAgICBzdGF0
aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7Ci0gICAgc3RhdGlj
IHZvaWQgdmlzaXRPdXRwdXRDb25zdHJhaW50cyhKU0NlbGwqLCBTbG90VmlzaXRvciYpOworCisg
ICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKKyAgICBERUNMQVJFX1ZJU0lUX09VVFBVVF9DT05T
VFJBSU5UUzsKICAgICB2b2lkIGZpbmFsaXplVW5jb25kaXRpb25hbGx5KFZNJik7CiAgICAgCiAg
ICAgc3RhdGljIENvZGVCbG9jayogdW53cmFwKEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UqIGVk
Z2UpCkBAIC04MSw5ICs4MSw5IEBAIHByaXZhdGU6CiAgICAgdm9pZCBhY3RpdmF0ZSgpOwogICAg
IHZvaWQgZGVhY3RpdmF0ZSgpOwogICAgIGJvb2wgaXNBY3RpdmUoKSBjb25zdDsKLSAgICAKLSAg
ICB2b2lkIHJ1bkNvbnN0cmFpbnQoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgVk0mLCBTbG90
VmlzaXRvciYpOwotICAgIAorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCBy
dW5Db25zdHJhaW50KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIFZNJiwgVmlzaXRvciYpOwor
CiAgICAgV3JpdGVCYXJyaWVyPENvZGVCbG9jaz4gbV9jb2RlQmxvY2s7CiB9OwogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFZhcmlhbnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkVmFyaWFudC5jcHAJ
KHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRC
eUlkVmFyaWFudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDE0LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE0LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xNTYsMTYgKzE1NiwyMyBAQCBib29s
IEdldEJ5SWRWYXJpYW50OjphdHRlbXB0VG9NZXJnZShjb25zCiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKLXZvaWQgR2V0QnlJZFZhcmlhbnQ6OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJiB2aXNp
dG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgR2V0QnlJZFZhcmlhbnQ6OnZp
c2l0QWdncmVnYXRlSW1wbChWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIG1faWRlbnRpZmllci52
aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKIH0KIAotdm9pZCBHZXRCeUlkVmFyaWFudDo6bWFya0lm
Q2hlYXAoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCitERUZJTkVfVklTSVRfQUdHUkVHQVRFKEdldEJ5
SWRWYXJpYW50KTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgR2V0QnlJZFZh
cmlhbnQ6Om1hcmtJZkNoZWFwKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgbV9zdHJ1Y3R1cmVT
ZXQubWFya0lmQ2hlYXAodmlzaXRvcik7CiB9CiAKK3RlbXBsYXRlIHZvaWQgR2V0QnlJZFZhcmlh
bnQ6Om1hcmtJZkNoZWFwKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgR2V0
QnlJZFZhcmlhbnQ6Om1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJik7CisKIGJvb2wgR2V0QnlJZFZh
cmlhbnQ6OmZpbmFsaXplKFZNJiB2bSkKIHsKICAgICBpZiAoIW1fc3RydWN0dXJlU2V0LmlzU3Rp
bGxBbGl2ZSh2bSkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJ
ZFZhcmlhbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
R2V0QnlJZFZhcmlhbnQuaAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0dldEJ5SWRWYXJpYW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03Nyw4ICs3
Nyw4IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgYXR0ZW1wdFRvTWVyZ2UoY29uc3QgR2V0QnlJZFZh
cmlhbnQmIG90aGVyKTsKICAgICAKLSAgICB2b2lkIHZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9y
Jik7Ci0gICAgdm9pZCBtYXJrSWZDaGVhcChTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklT
SVRfQUdHUkVHQVRFOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgbWFya0lm
Q2hlYXAoVmlzaXRvciYpOwogICAgIGJvb2wgZmluYWxpemUoVk0mKTsKICAgICAKICAgICB2b2lk
IGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9HZXRCeVN0YXR1cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0dldEJ5U3RhdHVzLmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5U3RhdHVzLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTUzMCw3ICs1MzAsOCBAQCB2b2lkIEdldEJ5U3RhdHVzOjpmaWx0ZXIoY29uc3QgU3RydWN0
dXJlCiAgICAgICAgIG1fc3RhdGUgPSBOb0luZm9ybWF0aW9uOwogfQogCi12b2lkIEdldEJ5U3Rh
dHVzOjp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVu
YW1lIFZpc2l0b3I+Cit2b2lkIEdldEJ5U3RhdHVzOjp2aXNpdEFnZ3JlZ2F0ZUltcGwoVmlzaXRv
ciYgdmlzaXRvcikKIHsKICAgICBpZiAoaXNNb2R1bGVOYW1lc3BhY2UoKSkKICAgICAgICAgbV9t
b2R1bGVOYW1lc3BhY2VEYXRhLT5tX2lkZW50aWZpZXIudmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7
CkBAIC01MzgsMTIgKzUzOSwxOCBAQCB2b2lkIEdldEJ5U3RhdHVzOjp2aXNpdEFnZ3JlZ2F0ZShT
bG90VmlzCiAgICAgICAgIHZhcmlhbnQudmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7CiB9CiAKLXZv
aWQgR2V0QnlTdGF0dXM6Om1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorREVGSU5F
X1ZJU0lUX0FHR1JFR0FURShHZXRCeVN0YXR1cyk7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0
b3I+Cit2b2lkIEdldEJ5U3RhdHVzOjptYXJrSWZDaGVhcChWaXNpdG9yJiB2aXNpdG9yKQogewog
ICAgIGZvciAoR2V0QnlJZFZhcmlhbnQmIHZhcmlhbnQgOiBtX3ZhcmlhbnRzKQogICAgICAgICB2
YXJpYW50Lm1hcmtJZkNoZWFwKHZpc2l0b3IpOwogfQogCit0ZW1wbGF0ZSB2b2lkIEdldEJ5U3Rh
dHVzOjptYXJrSWZDaGVhcChBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEdl
dEJ5U3RhdHVzOjptYXJrSWZDaGVhcChTbG90VmlzaXRvciYpOworCiBib29sIEdldEJ5U3RhdHVz
OjpmaW5hbGl6ZShWTSYgdm0pCiB7CiAgICAgZm9yIChHZXRCeUlkVmFyaWFudCYgdmFyaWFudCA6
IG1fdmFyaWFudHMpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRC
eVN0YXR1cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9H
ZXRCeVN0YXR1cy5oCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvR2V0QnlTdGF0dXMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTExOCw4ICsxMTgsOCBA
QCBwdWJsaWM6CiAgICAgSlNNb2R1bGVFbnZpcm9ubWVudCogbW9kdWxlRW52aXJvbm1lbnQoKSBj
b25zdCB7IHJldHVybiBtX21vZHVsZU5hbWVzcGFjZURhdGEtPm1fbW9kdWxlRW52aXJvbm1lbnQ7
IH0KICAgICBTY29wZU9mZnNldCBzY29wZU9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fbW9kdWxl
TmFtZXNwYWNlRGF0YS0+bV9zY29wZU9mZnNldDsgfQogICAgIAotICAgIHZvaWQgdmlzaXRBZ2dy
ZWdhdGUoU2xvdFZpc2l0b3ImKTsKLSAgICB2b2lkIG1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJik7
CisgICAgREVDTEFSRV9WSVNJVF9BR0dSRUdBVEU7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlz
aXRvcj4gdm9pZCBtYXJrSWZDaGVhcChWaXNpdG9yJik7CiAgICAgYm9vbCBmaW5hbGl6ZShWTSYp
OyAvLyBSZXR1cm4gdHJ1ZSBpZiB0aGlzIGdldHMgdG8gbGl2ZS4KIAogICAgIGJvb2wgYXBwZW5k
VmFyaWFudChjb25zdCBHZXRCeUlkVmFyaWFudCYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0luQnlJZFN0YXR1cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0luQnlJZFN0YXR1cy5jcHAJKHJldmlzaW9uIDI3MjkwMikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbkJ5SWRTdGF0dXMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxOCBZdXN1a2Ug
U3V6dWtpIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+LgotICogQ29weXJpZ2h0IChDKSAyMDE4IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOC0yMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMjUxLDEyICsyNTEsMTYgQEAgdm9pZCBJbkJ5SWRTdGF0dXM6OmZpbHRlcihj
b25zdCBTdHJ1Y3R1cgogICAgICAgICBtX3N0YXRlID0gTm9JbmZvcm1hdGlvbjsKIH0KIAotdm9p
ZCBJbkJ5SWRTdGF0dXM6Om1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxh
dGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSW5CeUlkU3RhdHVzOjptYXJrSWZDaGVhcChWaXNp
dG9yJiB2aXNpdG9yKQogewogICAgIGZvciAoSW5CeUlkVmFyaWFudCYgdmFyaWFudCA6IG1fdmFy
aWFudHMpCiAgICAgICAgIHZhcmlhbnQubWFya0lmQ2hlYXAodmlzaXRvcik7CiB9CiAKK3RlbXBs
YXRlIHZvaWQgSW5CeUlkU3RhdHVzOjptYXJrSWZDaGVhcChBYnN0cmFjdFNsb3RWaXNpdG9yJik7
Cit0ZW1wbGF0ZSB2b2lkIEluQnlJZFN0YXR1czo6bWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImKTsK
KwogYm9vbCBJbkJ5SWRTdGF0dXM6OmZpbmFsaXplKFZNJiB2bSkKIHsKICAgICBmb3IgKEluQnlJ
ZFZhcmlhbnQmIHZhcmlhbnQgOiBtX3ZhcmlhbnRzKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvSW5CeUlkU3RhdHVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0luQnlJZFN0YXR1cy5oCShyZXZpc2lvbiAyNzI5MDIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5CeUlkU3RhdHVzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDE4IFl1c3VrZSBTdXp1
a2kgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4uCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0xMDYsNyArMTA2LDcgQEAgcHVibGljOgogICAgIC8vIEF0dGVtcHRzIHRvIHJlZHVj
ZSB0aGUgc2V0IG9mIHZhcmlhbnRzIHRvIGZpdCB0aGUgZ2l2ZW4gc3RydWN0dXJlIHNldC4gVGhp
cyBtYXkgYmUgYXBwcm94aW1hdGUuCiAgICAgdm9pZCBmaWx0ZXIoY29uc3QgU3RydWN0dXJlU2V0
Jik7CiAgICAgCi0gICAgdm9pZCBtYXJrSWZDaGVhcChTbG90VmlzaXRvciYpOworICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgbWFya0lmQ2hlYXAoVmlzaXRvciYpOwogICAgIGJv
b2wgZmluYWxpemUoVk0mKTsKIAogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luQnlJZFZhcmlhbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbkJ5SWRWYXJpYW50
LmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0luQnlJZFZhcmlhbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAq
IENvcHlyaWdodCAoQykgMjAxOCBZdXN1a2UgU3V6dWtpIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+
LgotICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxOC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjQsMTEgKzY0LDE1IEBAIGJv
b2wgSW5CeUlkVmFyaWFudDo6YXR0ZW1wdFRvTWVyZ2UoY29uc3QKICAgICByZXR1cm4gdHJ1ZTsK
IH0KIAotdm9pZCBJbkJ5SWRWYXJpYW50OjptYXJrSWZDaGVhcChTbG90VmlzaXRvciYgdmlzaXRv
cikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEluQnlJZFZhcmlhbnQ6Om1hcmtJ
ZkNoZWFwKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgbV9zdHJ1Y3R1cmVTZXQubWFya0lmQ2hl
YXAodmlzaXRvcik7CiB9CiAKK3RlbXBsYXRlIHZvaWQgSW5CeUlkVmFyaWFudDo6bWFya0lmQ2hl
YXAoQWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBJbkJ5SWRWYXJpYW50Ojpt
YXJrSWZDaGVhcChTbG90VmlzaXRvciYpOworCiBib29sIEluQnlJZFZhcmlhbnQ6OmZpbmFsaXpl
KFZNJiB2bSkKIHsKICAgICBpZiAoIW1fc3RydWN0dXJlU2V0LmlzU3RpbGxBbGl2ZSh2bSkpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5CeUlkVmFyaWFudC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbkJ5SWRWYXJpYW50LmgJ
KHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbkJ5
SWRWYXJpYW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogQ29weXJp
Z2h0IChDKSAyMDE4IFl1c3VrZSBTdXp1a2kgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4uCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE4LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01Nyw3ICs1Nyw3IEBAIHB1YmxpYzoKIAog
ICAgIGJvb2wgYXR0ZW1wdFRvTWVyZ2UoY29uc3QgSW5CeUlkVmFyaWFudCYgb3RoZXIpOwogICAg
IAotICAgIHZvaWQgbWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImKTsKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBWaXNpdG9yPiB2b2lkIG1hcmtJZkNoZWFwKFZpc2l0b3ImKTsKICAgICBib29sIGZpbmFs
aXplKFZNJik7CiAKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnRlcm5hbEZ1bmN0aW9uQWxsb2NhdGlvblBy
b2ZpbGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW50
ZXJuYWxGdW5jdGlvbkFsbG9jYXRpb25Qcm9maWxlLmgJKHJldmlzaW9uIDI3MjkwMikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnRlcm5hbEZ1bmN0aW9uQWxsb2NhdGlvblBy
b2ZpbGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM5LDcgKzM5LDcgQEAgcHVibGljOgogICAgIFN0
cnVjdHVyZSogY3JlYXRlQWxsb2NhdGlvblN0cnVjdHVyZUZyb21CYXNlKFZNJiwgSlNHbG9iYWxP
YmplY3QqLCBKU0NlbGwqIG93bmVyLCBKU09iamVjdCogcHJvdG90eXBlLCBTdHJ1Y3R1cmUqIGJh
c2UpOwogCiAgICAgdm9pZCBjbGVhcigpIHsgbV9zdHJ1Y3R1cmUuY2xlYXIoKTsgfQotICAgIHZv
aWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsgdmlzaXRvci5hcHBlbmQo
bV9zdHJ1Y3R1cmUpOyB9CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCB2aXNp
dEFnZ3JlZ2F0ZShWaXNpdG9yJiB2aXNpdG9yKSB7IHZpc2l0b3IuYXBwZW5kKG1fc3RydWN0dXJl
KTsgfQogCiBwcml2YXRlOgogICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1fc3RydWN0dXJl
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09iamVjdEFsbG9jYXRpb25Q
cm9maWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09i
amVjdEFsbG9jYXRpb25Qcm9maWxlLmgJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9PYmplY3RBbGxvY2F0aW9uUHJvZmlsZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE3IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtNjQsNyArNjQsOCBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIEFTU0VSVChpc051bGwo
KSk7CiAgICAgfQogCi0gICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYgdmlzaXRv
cikKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgorICAgIHZvaWQgdmlzaXRBZ2dyZWdh
dGUoVmlzaXRvciYgdmlzaXRvcikKICAgICB7CiAgICAgICAgIHZpc2l0b3IuYXBwZW5kKG1fc3Ry
dWN0dXJlKTsKICAgICB9CkBAIC0xMTAsNyArMTExLDggQEAgcHVibGljOgogICAgICAgICBBU1NF
UlQoaXNOdWxsKCkpOwogICAgIH0KIAotICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0
b3ImIHZpc2l0b3IpCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KKyAgICB2b2lkIHZp
c2l0QWdncmVnYXRlKFZpc2l0b3ImIHZpc2l0b3IpCiAgICAgewogICAgICAgICBCYXNlOjp2aXNp
dEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKICAgICAgICAgdmlzaXRvci5hcHBlbmQobV9wcm90b3R5cGUp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1v
cnBoaWNBY2Nlc3MuY3BwCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNC0yMDIwIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzU4
LDcgKzM1OCw4IEBAIGJvb2wgUG9seW1vcnBoaWNBY2Nlc3M6OnZpc2l0V2VhayhWTSYgdm0KICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBQb2x5bW9ycGhpY0FjY2Vzczo6cHJvcGFnYXRlVHJh
bnNpdGlvbnMoU2xvdFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0Cit0ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPgorYm9vbCBQb2x5bW9ycGhpY0FjY2Vzczo6cHJvcGFnYXRlVHJhbnNpdGlvbnMoVmlz
aXRvciYgdmlzaXRvcikgY29uc3QKIHsKICAgICBib29sIHJlc3VsdCA9IHRydWU7CiAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemUoKTsgKytpKQpAQCAtMzY2LDEyICszNjcsMTggQEAg
Ym9vbCBQb2x5bW9ycGhpY0FjY2Vzczo6cHJvcGFnYXRlVHJhbnNpdAogICAgIHJldHVybiByZXN1
bHQ7CiB9CiAKLXZvaWQgUG9seW1vcnBoaWNBY2Nlc3M6OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNp
dG9yJiB2aXNpdG9yKQordGVtcGxhdGUgYm9vbCBQb2x5bW9ycGhpY0FjY2Vzczo6cHJvcGFnYXRl
VHJhbnNpdGlvbnMoQWJzdHJhY3RTbG90VmlzaXRvciYpIGNvbnN0OwordGVtcGxhdGUgYm9vbCBQ
b2x5bW9ycGhpY0FjY2Vzczo6cHJvcGFnYXRlVHJhbnNpdGlvbnMoU2xvdFZpc2l0b3ImKSBjb25z
dDsKKwordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgUG9seW1vcnBoaWNBY2Nlc3M6
OnZpc2l0QWdncmVnYXRlSW1wbChWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBzaXplKCk7ICsraSkKICAgICAgICAgYXQoaSkudmlzaXRBZ2dyZWdhdGUo
dmlzaXRvcik7CiB9CiAKK0RFRklORV9WSVNJVF9BR0dSRUdBVEUoUG9seW1vcnBoaWNBY2Nlc3Mp
OworCiB2b2lkIFBvbHltb3JwaGljQWNjZXNzOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0
CiB7CiAgICAgb3V0LnByaW50KFJhd1BvaW50ZXIodGhpcyksICI6WyIpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmgJKHJl
dmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9y
cGhpY0FjY2Vzcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxNC0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTUyLDE0ICsxNTIsMTQgQEAgcHVibGlj
OgogICAgIGNvbnN0IEFjY2Vzc0Nhc2UmIGF0KHVuc2lnbmVkIGkpIGNvbnN0IHsgcmV0dXJuICpt
X2xpc3RbaV07IH0KICAgICBjb25zdCBBY2Nlc3NDYXNlJiBvcGVyYXRvcltdKHVuc2lnbmVkIGkp
IGNvbnN0IHsgcmV0dXJuICptX2xpc3RbaV07IH0KIAotICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUo
U2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0FHR1JFR0FURTsKIAogICAgIC8vIElm
IHRoaXMgcmV0dXJucyBmYWxzZSB0aGVuIHdlIGFyZSByZXF1ZXN0aW5nIGEgcmVzZXQgb2YgdGhl
IG93bmluZyBTdHJ1Y3R1cmVTdHViSW5mby4KICAgICBib29sIHZpc2l0V2VhayhWTSYpIGNvbnN0
OwogICAgIAogICAgIC8vIFRoaXMgcmV0dXJucyB0cnVlIGlmIGl0IGhhcyBtYXJrZWQgZXZlcnl0
aGluZyBpdCB3aWxsIGV2ZXIgbWFya2VkLiBUaGlzIGNhbiBiZSB1c2VkIGFzIGFuCiAgICAgLy8g
b3B0aW1pemF0aW9uIHRvIHRoZW4gYXZvaWQgY2FsbGluZyB0aGlzIG1ldGhvZCBhZ2FpbiBkdXJp
bmcgdGhlIGZpeHBvaW50LgotICAgIGJvb2wgcHJvcGFnYXRlVHJhbnNpdGlvbnMoU2xvdFZpc2l0
b3ImKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiBib29sIHByb3BhZ2F0
ZVRyYW5zaXRpb25zKFZpc2l0b3ImKSBjb25zdDsKIAogICAgIHZvaWQgYWJvdXRUb0RpZSgpOwog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0
dXMuY3BwCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvUHV0QnlJZFN0YXR1cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zOTYsMTIgKzM5NiwxNiBA
QCBQdXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OnNsb3dWZXJzaW9uCiAgICAgcmV0dXJuIFB1
dEJ5SWRTdGF0dXMobWFrZXNDYWxscygpID8gTWFrZXNDYWxscyA6IFRha2VzU2xvd1BhdGgpOwog
fQogCi12b2lkIFB1dEJ5SWRTdGF0dXM6Om1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJiB2aXNpdG9y
KQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgUHV0QnlJZFN0YXR1czo6bWFya0lm
Q2hlYXAoVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBmb3IgKFB1dEJ5SWRWYXJpYW50JiB2YXJp
YW50IDogbV92YXJpYW50cykKICAgICAgICAgdmFyaWFudC5tYXJrSWZDaGVhcCh2aXNpdG9yKTsK
IH0KIAordGVtcGxhdGUgdm9pZCBQdXRCeUlkU3RhdHVzOjptYXJrSWZDaGVhcChBYnN0cmFjdFNs
b3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIFB1dEJ5SWRTdGF0dXM6Om1hcmtJZkNoZWFwKFNs
b3RWaXNpdG9yJik7CisKIGJvb2wgUHV0QnlJZFN0YXR1czo6ZmluYWxpemUoVk0mIHZtKQogewog
ICAgIGZvciAoUHV0QnlJZFZhcmlhbnQmIHZhcmlhbnQgOiBtX3ZhcmlhbnRzKSB7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmgJKHJldmlz
aW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3Rh
dHVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDEyLTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEyLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMTcsNyArMTE3LDcgQEAgcHVibGljOgogICAgIGNv
bnN0IFB1dEJ5SWRWYXJpYW50JiBhdChzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fdmFy
aWFudHNbaW5kZXhdOyB9CiAgICAgY29uc3QgUHV0QnlJZFZhcmlhbnQmIG9wZXJhdG9yW10oc2l6
ZV90IGluZGV4KSBjb25zdCB7IHJldHVybiBhdChpbmRleCk7IH0KICAgICAKLSAgICB2b2lkIG1h
cmtJZkNoZWFwKFNsb3RWaXNpdG9yJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4g
dm9pZCBtYXJrSWZDaGVhcChWaXNpdG9yJik7CiAgICAgYm9vbCBmaW5hbGl6ZShWTSYpOwogICAg
IAogICAgIHZvaWQgbWVyZ2UoY29uc3QgUHV0QnlJZFN0YXR1cyYpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuY3BwCShyZXZpc2lv
biAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlh
bnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxNC0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYyLDEzICsyNjIsMTcgQEAgYm9vbCBQdXRCeUlk
VmFyaWFudDo6YXR0ZW1wdFRvTWVyZ2VUcmFucwogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lk
IFB1dEJ5SWRWYXJpYW50OjptYXJrSWZDaGVhcChTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBs
YXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFB1dEJ5SWRWYXJpYW50OjptYXJrSWZDaGVhcChW
aXNpdG9yJiB2aXNpdG9yKQogewogICAgIG1fb2xkU3RydWN0dXJlLm1hcmtJZkNoZWFwKHZpc2l0
b3IpOwogICAgIGlmIChtX25ld1N0cnVjdHVyZSkKICAgICAgICAgbV9uZXdTdHJ1Y3R1cmUtPm1h
cmtJZkNoZWFwKHZpc2l0b3IpOwogfQogCit0ZW1wbGF0ZSB2b2lkIFB1dEJ5SWRWYXJpYW50Ojpt
YXJrSWZDaGVhcChBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIFB1dEJ5SWRW
YXJpYW50OjptYXJrSWZDaGVhcChTbG90VmlzaXRvciYpOworCiBib29sIFB1dEJ5SWRWYXJpYW50
OjpmaW5hbGl6ZShWTSYgdm0pCiB7CiAgICAgaWYgKCFtX29sZFN0cnVjdHVyZS5pc1N0aWxsQWxp
dmUodm0pKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJp
YW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5
SWRWYXJpYW50LmgJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9QdXRCeUlkVmFyaWFudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNC0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTMyLDcgKzEzMiw3
IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgYXR0ZW1wdFRvTWVyZ2UoY29uc3QgUHV0QnlJZFZhcmlh
bnQmIG90aGVyKTsKICAgICAKLSAgICB2b2lkIG1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJik7Cisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCBtYXJrSWZDaGVhcChWaXNpdG9yJik7
CiAgICAgYm9vbCBmaW5hbGl6ZShWTSYpOwogICAgIAogICAgIHZvaWQgZHVtcChQcmludFN0cmVh
bSYpIGNvbnN0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1JlY29yZGVk
U3RhdHVzZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9SZWNvcmRlZFN0YXR1c2VzLmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1JlY29yZGVkU3RhdHVzZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMDIsNyArMTAyLDggQEAgU2V0UHJpdmF0ZUJyYW5kU3RhdHVzKiBSZWNvcmRlZFN0YXR1c2Vz
OgogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQgUmVjb3JkZWRTdGF0dXNlczo6dmlzaXRB
Z2dyZWdhdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
Pgordm9pZCBSZWNvcmRlZFN0YXR1c2VzOjp2aXNpdEFnZ3JlZ2F0ZUltcGwoVmlzaXRvciYgdmlz
aXRvcikKIHsKICAgICBmb3IgKGF1dG8mIHBhaXIgOiBnZXRzKQogICAgICAgICBwYWlyLnNlY29u
ZC0+dmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7CkBAIC0xMTQsNyArMTE1LDEwIEBAIHZvaWQgUmVj
b3JkZWRTdGF0dXNlczo6dmlzaXRBZ2dyZWdhdGUoU2wKICAgICAgICAgcGFpci5zZWNvbmQtPnZp
c2l0QWdncmVnYXRlKHZpc2l0b3IpOwogfQogCi12b2lkIFJlY29yZGVkU3RhdHVzZXM6Om1hcmtJ
ZkNoZWFwKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorREVGSU5FX1ZJU0lUX0FHR1JFR0FURShSZWNv
cmRlZFN0YXR1c2VzKTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgUmVjb3Jk
ZWRTdGF0dXNlczo6bWFya0lmQ2hlYXAoVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBmb3IgKGF1
dG8mIHBhaXIgOiBnZXRzKQogICAgICAgICBwYWlyLnNlY29uZC0+bWFya0lmQ2hlYXAodmlzaXRv
cik7CkBAIC0xMzAsNiArMTM0LDkgQEAgdm9pZCBSZWNvcmRlZFN0YXR1c2VzOjptYXJrSWZDaGVh
cChTbG90VgogICAgICAgICBwYWlyLnNlY29uZC0+bWFya0lmQ2hlYXAodmlzaXRvcik7CiB9CiAK
K3RlbXBsYXRlIHZvaWQgUmVjb3JkZWRTdGF0dXNlczo6bWFya0lmQ2hlYXAoQWJzdHJhY3RTbG90
VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBSZWNvcmRlZFN0YXR1c2VzOjptYXJrSWZDaGVhcChT
bG90VmlzaXRvciYpOworCiB2b2lkIFJlY29yZGVkU3RhdHVzZXM6OmZpbmFsaXplV2l0aG91dERl
bGV0aW5nKFZNJiB2bSkKIHsKICAgICAvLyBUaGlzIHZhcmlhbnQgb2YgZmluYWxpemUgZ2V0cyBj
YWxsZWQgZnJvbSB3aXRoaW4gZ3JhcGggc2FmZXBvaW50cyAtLSBzbyB0aGVyZSBtYXkgYmUgREZH
IElSIGluCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUmVjb3JkZWRTdGF0
dXNlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9SZWNv
cmRlZFN0YXR1c2VzLmgJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9SZWNvcmRlZFN0YXR1c2VzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01NCw4ICs1
NCw4IEBAIHN0cnVjdCBSZWNvcmRlZFN0YXR1c2VzIHsKICAgICBDaGVja1ByaXZhdGVCcmFuZFN0
YXR1cyogYWRkQ2hlY2tQcml2YXRlQnJhbmRTdGF0dXMoY29uc3QgQ29kZU9yaWdpbiYsIGNvbnN0
IENoZWNrUHJpdmF0ZUJyYW5kU3RhdHVzJik7CiAgICAgU2V0UHJpdmF0ZUJyYW5kU3RhdHVzKiBh
ZGRTZXRQcml2YXRlQnJhbmRTdGF0dXMoY29uc3QgQ29kZU9yaWdpbiYsIGNvbnN0IFNldFByaXZh
dGVCcmFuZFN0YXR1cyYpOwogICAgIAotICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0
b3ImKTsKLSAgICB2b2lkIG1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9W
SVNJVF9BR0dSRUdBVEU7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCBtYXJr
SWZDaGVhcChWaXNpdG9yJik7CiAgICAgCiAgICAgdm9pZCBmaW5hbGl6ZVdpdGhvdXREZWxldGlu
ZyhWTSYpOwogICAgIHZvaWQgZmluYWxpemUoVk0mKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9TZXRQcml2YXRlQnJhbmRTdGF0dXMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TZXRQcml2YXRlQnJhbmRTdGF0dXMuY3BwCShy
ZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU2V0UHJp
dmF0ZUJyYW5kU3RhdHVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjM1LDE4ICsyMzUsMjUgQEAg
Q2FjaGVhYmxlSWRlbnRpZmllciBTZXRQcml2YXRlQnJhbmRTdGF0dQogICAgIHJldHVybiByZXN1
bHQ7CiB9CiAKLXZvaWQgU2V0UHJpdmF0ZUJyYW5kU3RhdHVzOjp2aXNpdEFnZ3JlZ2F0ZShTbG90
VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFNldFBy
aXZhdGVCcmFuZFN0YXR1czo6dmlzaXRBZ2dyZWdhdGVJbXBsKFZpc2l0b3ImIHZpc2l0b3IpCiB7
CiAgICAgZm9yIChTZXRQcml2YXRlQnJhbmRWYXJpYW50JiB2YXJpYW50IDogbV92YXJpYW50cykK
ICAgICAgICAgdmFyaWFudC52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKIH0KIAotdm9pZCBTZXRQ
cml2YXRlQnJhbmRTdGF0dXM6Om1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorREVG
SU5FX1ZJU0lUX0FHR1JFR0FURShTZXRQcml2YXRlQnJhbmRTdGF0dXMpOworCit0ZW1wbGF0ZTx0
eXBlbmFtZSBWaXNpdG9yPgordm9pZCBTZXRQcml2YXRlQnJhbmRTdGF0dXM6Om1hcmtJZkNoZWFw
KFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgZm9yIChTZXRQcml2YXRlQnJhbmRWYXJpYW50JiB2
YXJpYW50IDogbV92YXJpYW50cykKICAgICAgICAgdmFyaWFudC5tYXJrSWZDaGVhcCh2aXNpdG9y
KTsKIH0KIAordGVtcGxhdGUgdm9pZCBTZXRQcml2YXRlQnJhbmRTdGF0dXM6Om1hcmtJZkNoZWFw
KEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgU2V0UHJpdmF0ZUJyYW5kU3Rh
dHVzOjptYXJrSWZDaGVhcChTbG90VmlzaXRvciYpOworCiBib29sIFNldFByaXZhdGVCcmFuZFN0
YXR1czo6ZmluYWxpemUoVk0mIHZtKQogewogICAgIGZvciAoYXV0byYgdmFyaWFudCA6IG1fdmFy
aWFudHMpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TZXRQcml2YXRl
QnJhbmRTdGF0dXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvU2V0UHJpdmF0ZUJyYW5kU3RhdHVzLmgJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TZXRQcml2YXRlQnJhbmRTdGF0dXMuaAkod29ya2luZyBj
b3B5KQpAQCAtODMsOCArODMsOCBAQCBwdWJsaWM6CiAgICAgLy8gQXR0ZW1wdHMgdG8gcmVkdWNl
IHRoZSBzZXQgb2YgdmFyaWFudHMgdG8gZml0IHRoZSBnaXZlbiBzdHJ1Y3R1cmUgc2V0LiBUaGlz
IG1heSBiZSBhcHByb3hpbWF0ZS4KICAgICB2b2lkIGZpbHRlcihjb25zdCBTdHJ1Y3R1cmVTZXQm
KTsKIAotICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImKTsKLSAgICB2b2lkIG1h
cmtJZkNoZWFwKFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9BR0dSRUdBVEU7Cisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCBtYXJrSWZDaGVhcChWaXNpdG9yJik7
CiAgICAgYm9vbCBmaW5hbGl6ZShWTSYpOwogCiAgICAgYm9vbCBhcHBlbmRWYXJpYW50KGNvbnN0
IFNldFByaXZhdGVCcmFuZFZhcmlhbnQmKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9TZXRQcml2YXRlQnJhbmRWYXJpYW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU2V0UHJpdmF0ZUJyYW5kVmFyaWFudC5jcHAJKHJldmlz
aW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TZXRQcml2YXRl
QnJhbmRWYXJpYW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDIwLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICog
Q29weXJpZ2h0IChDKSAyMDIxIElnYWxpYSBTLkEuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CkBAIC01NCw3ICs1NCw4IEBAIGJvb2wgU2V0UHJpdmF0ZUJyYW5kVmFyaWFu
dDo6YXR0ZW1wdFRvTWUKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBTZXRQcml2YXRlQnJh
bmRWYXJpYW50OjptYXJrSWZDaGVhcChTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5
cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFNldFByaXZhdGVCcmFuZFZhcmlhbnQ6Om1hcmtJZkNoZWFw
KFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgaWYgKG1fb2xkU3RydWN0dXJlKQogICAgICAgICBt
X29sZFN0cnVjdHVyZS0+bWFya0lmQ2hlYXAodmlzaXRvcik7CkBAIC02Miw2ICs2Myw5IEBAIHZv
aWQgU2V0UHJpdmF0ZUJyYW5kVmFyaWFudDo6bWFya0lmQ2hlYXAKICAgICAgICAgbV9uZXdTdHJ1
Y3R1cmUtPm1hcmtJZkNoZWFwKHZpc2l0b3IpOwogfQogCit0ZW1wbGF0ZSB2b2lkIFNldFByaXZh
dGVCcmFuZFZhcmlhbnQ6Om1hcmtJZkNoZWFwKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBs
YXRlIHZvaWQgU2V0UHJpdmF0ZUJyYW5kVmFyaWFudDo6bWFya0lmQ2hlYXAoU2xvdFZpc2l0b3Im
KTsKKwogYm9vbCBTZXRQcml2YXRlQnJhbmRWYXJpYW50OjpmaW5hbGl6ZShWTSYgdm0pCiB7CiAg
ICAgaWYgKCF2bS5oZWFwLmlzTWFya2VkKG1fb2xkU3RydWN0dXJlKSkKQEAgLTcxLDExICs3NSwx
NCBAQCBib29sIFNldFByaXZhdGVCcmFuZFZhcmlhbnQ6OmZpbmFsaXplKFZNCiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKLXZvaWQgU2V0UHJpdmF0ZUJyYW5kVmFyaWFudDo6dmlzaXRBZ2dyZWdhdGUo
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBT
ZXRQcml2YXRlQnJhbmRWYXJpYW50Ojp2aXNpdEFnZ3JlZ2F0ZUltcGwoVmlzaXRvciYgdmlzaXRv
cikKIHsKICAgICBtX2lkZW50aWZpZXIudmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7CiB9CiAKK0RF
RklORV9WSVNJVF9BR0dSRUdBVEUoU2V0UHJpdmF0ZUJyYW5kVmFyaWFudCk7CisKIHZvaWQgU2V0
UHJpdmF0ZUJyYW5kVmFyaWFudDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAogewogICAg
IGR1bXBJbkNvbnRleHQob3V0LCBudWxscHRyKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9TZXRQcml2YXRlQnJhbmRWYXJpYW50LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NldFByaXZhdGVCcmFuZFZhcmlhbnQuaAkocmV2aXNp
b24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NldFByaXZhdGVC
cmFuZFZhcmlhbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNDUsOCArNDUsOCBAQCBwdWJsaWM6CiAK
ICAgICBib29sIGF0dGVtcHRUb01lcmdlKGNvbnN0IFNldFByaXZhdGVCcmFuZFZhcmlhbnQmIG90
aGVyKTsKIAotICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImKTsKLSAgICB2b2lk
IG1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9BR0dSRUdBVEU7
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCBtYXJrSWZDaGVhcChWaXNpdG9y
Jik7CiAgICAgYm9vbCBmaW5hbGl6ZShWTSYpOwogCiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFt
JikgY29uc3Q7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJl
U2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3Ry
dWN0dXJlU2V0LmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1N0cnVjdHVyZVNldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMSwxMiArMzEs
MTYgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLXZvaWQgU3RydWN0dXJlU2V0OjptYXJrSWZDaGVh
cChTbG90VmlzaXRvciYgdmlzaXRvcikgY29uc3QKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+
Cit2b2lkIFN0cnVjdHVyZVNldDo6bWFya0lmQ2hlYXAoVmlzaXRvciYgdmlzaXRvcikgY29uc3QK
IHsKICAgICBmb3IgKFN0cnVjdHVyZSogc3RydWN0dXJlIDogKnRoaXMpCiAgICAgICAgIHN0cnVj
dHVyZS0+bWFya0lmQ2hlYXAodmlzaXRvcik7CiB9CiAKK3RlbXBsYXRlIHZvaWQgU3RydWN0dXJl
U2V0OjptYXJrSWZDaGVhcChBYnN0cmFjdFNsb3RWaXNpdG9yJikgY29uc3Q7Cit0ZW1wbGF0ZSB2
b2lkIFN0cnVjdHVyZVNldDo6bWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImKSBjb25zdDsKKwogYm9v
bCBTdHJ1Y3R1cmVTZXQ6OmlzU3RpbGxBbGl2ZShWTSYgdm0pIGNvbnN0CiB7CiAgICAgZm9yIChT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSA6ICp0aGlzKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvU3RydWN0dXJlU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVNldC5oCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU2V0LmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTggQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMjEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC01NCw3ICs1NCw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG9ubHlFbnRyeSgpOwog
ICAgIH0KIAotICAgIHZvaWQgbWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImKSBjb25zdDsKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIG1hcmtJZkNoZWFwKFZpc2l0b3ImKSBjb25z
dDsKICAgICBib29sIGlzU3RpbGxBbGl2ZShWTSYpIGNvbnN0OwogICAgIAogICAgIHZvaWQgZHVt
cEluQ29udGV4dChQcmludFN0cmVhbSYsIER1bXBDb250ZXh0KikgY29uc3Q7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5j
cHAJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9T
dHJ1Y3R1cmVTdHViSW5mby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOTYsNyArMjk2LDggQEAg
dm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6cmVzZXQoY29uc3QgQ29uYwogICAgIHNldENhY2hlVHlw
ZShsb2NrZXIsIENhY2hlVHlwZTo6VW5zZXQpOwogfQogCi12b2lkIFN0cnVjdHVyZVN0dWJJbmZv
Ojp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1l
IFZpc2l0b3I+Cit2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjp2aXNpdEFnZ3JlZ2F0ZUltcGwoVmlz
aXRvciYgdmlzaXRvcikKIHsKICAgICB7CiAgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2so
bV9idWZmZXJlZFN0cnVjdHVyZXNMb2NrKTsKQEAgLTMyMiw2ICszMjMsOCBAQCB2b2lkIFN0cnVj
dHVyZVN0dWJJbmZvOjp2aXNpdEFnZ3JlZ2F0ZShTCiAgICAgcmV0dXJuOwogfQogCitERUZJTkVf
VklTSVRfQUdHUkVHQVRFKFN0cnVjdHVyZVN0dWJJbmZvKTsKKwogdm9pZCBTdHJ1Y3R1cmVTdHVi
SW5mbzo6dmlzaXRXZWFrUmVmZXJlbmNlcyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXJCYXNlJiBs
b2NrZXIsIENvZGVCbG9jayogY29kZUJsb2NrKQogewogICAgIFZNJiB2bSA9IGNvZGVCbG9jay0+
dm0oKTsKQEAgLTM1Miw3ICszNTUsOCBAQCB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjp2aXNpdFdl
YWtSZWZlcmVuCiAgICAgcmVzZXRCeUdDID0gdHJ1ZTsKIH0KIAotYm9vbCBTdHJ1Y3R1cmVTdHVi
SW5mbzo6cHJvcGFnYXRlVHJhbnNpdGlvbnMoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0
ZTx0eXBlbmFtZSBWaXNpdG9yPgorYm9vbCBTdHJ1Y3R1cmVTdHViSW5mbzo6cHJvcGFnYXRlVHJh
bnNpdGlvbnMoVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBzd2l0Y2ggKG1fY2FjaGVUeXBlKSB7
CiAgICAgY2FzZSBDYWNoZVR5cGU6OlVuc2V0OgpAQCAtMzcxLDYgKzM3NSw5IEBAIGJvb2wgU3Ry
dWN0dXJlU3R1YkluZm86OnByb3BhZ2F0ZVRyYW5zaXQKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAor
dGVtcGxhdGUgYm9vbCBTdHJ1Y3R1cmVTdHViSW5mbzo6cHJvcGFnYXRlVHJhbnNpdGlvbnMoQWJz
dHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgYm9vbCBTdHJ1Y3R1cmVTdHViSW5mbzo6cHJv
cGFnYXRlVHJhbnNpdGlvbnMoU2xvdFZpc2l0b3ImKTsKKwogU3R1YkluZm9TdW1tYXJ5IFN0cnVj
dHVyZVN0dWJJbmZvOjpzdW1tYXJ5KFZNJiB2bSkgY29uc3QKIHsKICAgICBTdHViSW5mb1N1bW1h
cnkgdGFrZXNTbG93UGF0aCA9IFN0dWJJbmZvU3VtbWFyeTo6VGFrZXNTbG93UGF0aDsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5m
by5oCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
U3RydWN0dXJlU3R1YkluZm8uaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTkzLDE0ICs5MywxNCBAQCBw
dWJsaWM6CiAgICAgdm9pZCBkZXJlZigpOwogICAgIHZvaWQgYWJvdXRUb0RpZSgpOwogCi0gICAg
dm9pZCB2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQUdH
UkVHQVRFOwogCiAgICAgLy8gQ2hlY2sgaWYgdGhlIHN0dWIgaGFzIHdlYWsgcmVmZXJlbmNlcyB0
aGF0IGFyZSBkZWFkLiBJZiBpdCBkb2VzLCB0aGVuIGl0IHJlc2V0cyBpdHNlbGYsCiAgICAgLy8g
ZWl0aGVyIGVudGlyZWx5IG9yIGp1c3QgZW5vdWdoIHRvIGVuc3VyZSB0aGF0IHRob3NlIGRlYWQg
cG9pbnRlcnMgZG9uJ3QgZ2V0IHVzZWQgYW55bW9yZS4KICAgICB2b2lkIHZpc2l0V2Vha1JlZmVy
ZW5jZXMoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyQmFzZSYsIENvZGVCbG9jayopOwogICAgIAog
ICAgIC8vIFRoaXMgcmV0dXJucyB0cnVlIGlmIGl0IGhhcyBtYXJrZWQgZXZlcnl0aGluZyB0aGF0
IGl0IHdpbGwgZXZlciBtYXJrLgotICAgIGJvb2wgcHJvcGFnYXRlVHJhbnNpdGlvbnMoU2xvdFZp
c2l0b3ImKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiBib29sIHByb3BhZ2F0ZVRy
YW5zaXRpb25zKFZpc2l0b3ImKTsKICAgICAgICAgCiAgICAgU3R1YkluZm9TdW1tYXJ5IHN1bW1h
cnkoVk0mKSBjb25zdDsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9VbmxpbmtlZENvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAx
OSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIt
MjAyMSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTc1LDcgKzc1LDggQEAgVW5saW5rZWRDb2RlQmxvY2s6OlVubGlua2Vk
Q29kZUJsb2NrKFZNJgogICAgIH0KIH0KIAotdm9pZCBVbmxpbmtlZENvZGVCbG9jazo6dmlzaXRD
aGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlw
ZW5hbWUgVmlzaXRvcj4KK3ZvaWQgVW5saW5rZWRDb2RlQmxvY2s6OnZpc2l0Q2hpbGRyZW5JbXBs
KEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBVbmxpbmtlZENvZGVCbG9j
ayogdGhpc09iamVjdCA9IGpzQ2FzdDxVbmxpbmtlZENvZGVCbG9jayo+KGNlbGwpOwogICAgIEFT
U0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTk0LDYgKzk1
LDggQEAgdm9pZCBVbmxpbmtlZENvZGVCbG9jazo6dmlzaXRDaGlsZHJlbihKUwogICAgIHZpc2l0
b3IucmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKGV4dHJhTWVtb3J5KTsKIH0KIAorREVGSU5FX1ZJ
U0lUX0NISUxEUkVOKFVubGlua2VkQ29kZUJsb2NrKTsKKwogc2l6ZV90IFVubGlua2VkQ29kZUJs
b2NrOjplc3RpbWF0ZWRTaXplKEpTQ2VsbCogY2VsbCwgVk0mIHZtKQogewogICAgIFVubGlua2Vk
Q29kZUJsb2NrKiB0aGlzT2JqZWN0ID0ganNDYXN0PFVubGlua2VkQ29kZUJsb2NrKj4oY2VsbCk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2su
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRD
b2RlQmxvY2suaAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTkgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjEgQXBwbGUgSW5jLiBBbGwgUmlnaHRz
IFJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00MzEsNyArNDMx
LDcgQEAgcHJpdmF0ZToKICAgICBSZWZDb3VudGVkQXJyYXk8RXhwcmVzc2lvblJhbmdlSW5mbz4g
bV9leHByZXNzaW9uSW5mbzsKIAogcHJvdGVjdGVkOgotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hp
bGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVO
OwogICAgIHN0YXRpYyBzaXplX3QgZXN0aW1hdGVkU2l6ZShKU0NlbGwqLCBWTSYpOwogCiBwdWJs
aWM6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRGdW5jdGlv
bkV4ZWN1dGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9VbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5jcHAJKHJldmlzaW9uIDI3MjkwMikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJs
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDEyLTIwMTkgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEyLTIwMjEgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xNDYsNyArMTQ2LDggQEAgdm9pZCBVbmxpbmtlZEZ1
bmN0aW9uRXhlY3V0YWJsZTo6ZGVzdHJveQogICAgIHN0YXRpY19jYXN0PFVubGlua2VkRnVuY3Rp
b25FeGVjdXRhYmxlKj4oY2VsbCktPn5VbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSgpOwogfQog
Ci12b2lkIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCog
Y2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgor
dm9pZCBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxs
KiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFVubGlua2VkRnVuY3Rpb25FeGVjdXRh
YmxlKiB0aGlzT2JqZWN0ID0ganNDYXN0PFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKj4oY2Vs
bCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpA
QCAtMTY5LDYgKzE3MCw4IEBAIHZvaWQgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU6OnZpc2l0
Q2gKICAgICB9CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihVbmxpbmtlZEZ1bmN0aW9uRXhl
Y3V0YWJsZSk7CisKIFNvdXJjZUNvZGUgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU6Omxpbmtl
ZFNvdXJjZUNvZGUoY29uc3QgU291cmNlQ29kZSYgcGFzc2VkUGFyZW50U291cmNlKSBjb25zdAog
ewogICAgIGNvbnN0IFNvdXJjZUNvZGUmIHBhcmVudFNvdXJjZSA9ICFtX2lzQnVpbHRpbkRlZmF1
bHRDbGFzc0NvbnN0cnVjdG9yID8gcGFzc2VkUGFyZW50U291cmNlIDogQnVpbHRpbkV4ZWN1dGFi
bGVzOjpkZWZhdWx0Q29uc3RydWN0b3JTb3VyY2VDb2RlKGNvbnN0cnVjdG9yS2luZCgpKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9uRXhlY3V0
YWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Vbmxp
bmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5oCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxOSBB
cHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAy
MSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTI0Miw3ICsyNDIsNyBAQCBwcml2YXRlOgogICAgIFVubGlua2VkRnVuY3Rp
b25FeGVjdXRhYmxlKFZNJiwgU3RydWN0dXJlKiwgY29uc3QgU291cmNlQ29kZSYsIEZ1bmN0aW9u
TWV0YWRhdGFOb2RlKiwgVW5saW5rZWRGdW5jdGlvbktpbmQsIENvbnN0cnVjdEFiaWxpdHksIEpT
UGFyc2VyU2NyaXB0TW9kZSwgUmVmUHRyPFREWkVudmlyb25tZW50TGluaz4sIE9wdGlvbmFsPFBy
aXZhdGVOYW1lRW52aXJvbm1lbnQ+LCBKU0M6OkRlcml2ZWRDb250ZXh0VHlwZSwgSlNDOjpOZWVk
c0NsYXNzRmllbGRJbml0aWFsaXplciwgUHJpdmF0ZUJyYW5kUmVxdWlyZW1lbnQsIGJvb2wgaXNC
dWlsdGluRGVmYXVsdENsYXNzQ29uc3RydWN0b3IpOwogICAgIFVubGlua2VkRnVuY3Rpb25FeGVj
dXRhYmxlKERlY29kZXImLCBjb25zdCBDYWNoZWRGdW5jdGlvbkV4ZWN1dGFibGUmKTsKIAotICAg
IHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBE
RUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgdm9pZCBkZWNvZGVDYWNoZWRDb2RlQmxvY2tz
KFZNJik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlclNj
b3BlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVi
dWdnZXJTY29wZS5jcHAJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZWJ1Z2dlci9EZWJ1Z2dlclNjb3BlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU1LDcgKzU1
LDggQEAgdm9pZCBEZWJ1Z2dlclNjb3BlOjpmaW5pc2hDcmVhdGlvbihWTSYgdgogICAgIEJhc2U6
OmZpbmlzaENyZWF0aW9uKHZtKTsKIH0KIAotdm9pZCBEZWJ1Z2dlclNjb3BlOjp2aXNpdENoaWxk
cmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBWaXNpdG9yPgordm9pZCBEZWJ1Z2dlclNjb3BlOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwq
IGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgRGVidWdnZXJTY29wZSogdGhpc09iamVj
dCA9IGpzQ2FzdDxEZWJ1Z2dlclNjb3BlKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9J
TkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNjUsNiArNjYsOCBAQCB2b2lkIERlYnVn
Z2VyU2NvcGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsCiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09i
amVjdC0+bV9uZXh0KTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKERlYnVnZ2VyU2NvcGUp
OworCiBTdHJpbmcgRGVidWdnZXJTY29wZTo6Y2xhc3NOYW1lKGNvbnN0IEpTT2JqZWN0KiBvYmpl
Y3QsIFZNJiB2bSkKIHsKICAgICBjb25zdCBEZWJ1Z2dlclNjb3BlKiBzY29wZSA9IGpzQ2FzdDxj
b25zdCBEZWJ1Z2dlclNjb3BlKj4ob2JqZWN0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZWJ1Z2dlci9EZWJ1Z2dlclNjb3BlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyU2NvcGUuaAkocmV2aXNpb24gMjcyOTAyKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyU2NvcGUuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAyMCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAyMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTQ2LDcgKzQ2LDcgQEAgcHVibGljOgogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3Rh
dGljIERlYnVnZ2VyU2NvcGUqIGNyZWF0ZShWTSYgdm0sIEpTU2NvcGUqIHNjb3BlKTsKIAotICAg
IHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBE
RUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogICAgIHN0YXRpYyBTdHJpbmcgY2xhc3NOYW1lKGNvbnN0
IEpTT2JqZWN0KiwgVk0mKTsKICAgICBzdGF0aWMgU3RyaW5nIHRvU3RyaW5nTmFtZShjb25zdCBK
U09iamVjdCosIEpTR2xvYmFsT2JqZWN0Kik7CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVy
dHlTbG90KEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5
U2xvdCYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkVHJhbnNp
dGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVz
aXJlZFRyYW5zaXRpb25zLmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdEZXNpcmVkVHJhbnNpdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
NTIsNyArNTIsNyBAQCB2b2lkIERlc2lyZWRUcmFuc2l0aW9uOjpyZWFsbHlBZGQoVk0mIHZtCiAg
ICAgICAgICAgICBtX29sZFN0cnVjdHVyZSwgbV9uZXdTdHJ1Y3R1cmUpKTsKIH0KIAotdm9pZCBE
ZXNpcmVkVHJhbnNpdGlvbjo6dmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3Zv
aWQgRGVzaXJlZFRyYW5zaXRpb246OnZpc2l0Q2hpbGRyZW4oQWJzdHJhY3RTbG90VmlzaXRvciYg
dmlzaXRvcikKIHsKICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKG1fY29kZU9yaWdpbk93
bmVyKTsKICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKG1fb2xkU3RydWN0dXJlKTsKQEAg
LTc4LDcgKzc4LDcgQEAgdm9pZCBEZXNpcmVkVHJhbnNpdGlvbnM6OnJlYWxseUFkZChWTSYgdgog
ICAgICAgICBtX3RyYW5zaXRpb25zW2ldLnJlYWxseUFkZCh2bSwgY29tbW9uKTsKIH0KIAotdm9p
ZCBEZXNpcmVkVHJhbnNpdGlvbnM6OnZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3Ip
Cit2b2lkIERlc2lyZWRUcmFuc2l0aW9uczo6dmlzaXRDaGlsZHJlbihBYnN0cmFjdFNsb3RWaXNp
dG9yJiB2aXNpdG9yKQogewogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3RyYW5zaXRp
b25zLnNpemUoKTsgaSsrKQogICAgICAgICBtX3RyYW5zaXRpb25zW2ldLnZpc2l0Q2hpbGRyZW4o
dmlzaXRvcik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRUcmFu
c2l0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVz
aXJlZFRyYW5zaXRpb25zLmgJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHRGVzaXJlZFRyYW5zaXRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDYs
OCArNDYsNyBAQCBwdWJsaWM6CiAgICAgRGVzaXJlZFRyYW5zaXRpb24oQ29kZUJsb2NrKiwgQ29k
ZUJsb2NrKiBjb2RlT3JpZ2luT3duZXIsIFN0cnVjdHVyZSosIFN0cnVjdHVyZSopOwogCiAgICAg
dm9pZCByZWFsbHlBZGQoVk0mLCBDb21tb25EYXRhKik7Ci0gICAgCi0gICAgdm9pZCB2aXNpdENo
aWxkcmVuKFNsb3RWaXNpdG9yJik7CisgICAgdm9pZCB2aXNpdENoaWxkcmVuKEFic3RyYWN0U2xv
dFZpc2l0b3ImKTsKIAogcHJpdmF0ZToKICAgICBDb2RlQmxvY2sqIG1fY29kZUJsb2NrOwpAQCAt
NjMsNyArNjIsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGFkZExhemlseShDb2RlQmxvY2sqLCBD
b2RlQmxvY2sqIGNvZGVPcmlnaW5Pd25lciwgU3RydWN0dXJlKiwgU3RydWN0dXJlKik7CiAgICAg
dm9pZCByZWFsbHlBZGQoVk0mLCBDb21tb25EYXRhKik7Ci0gICAgdm9pZCB2aXNpdENoaWxkcmVu
KFNsb3RWaXNpdG9yJik7CisgICAgdm9pZCB2aXNpdENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0
b3ImKTsKIAogcHJpdmF0ZToKICAgICBWZWN0b3I8RGVzaXJlZFRyYW5zaXRpb24+IG1fdHJhbnNp
dGlvbnM7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXZWFrUmVm
ZXJlbmNlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdE
ZXNpcmVkV2Vha1JlZmVyZW5jZXMuY3BwCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXZWFrUmVmZXJlbmNlcy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC04Nyw3ICs4Nyw3IEBAIHZvaWQgRGVzaXJlZFdlYWtSZWZlcmVuY2VzOjpyZWFsbHlB
ZGQoVk0KICAgICB9CiB9CiAKLXZvaWQgRGVzaXJlZFdlYWtSZWZlcmVuY2VzOjp2aXNpdENoaWxk
cmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBEZXNpcmVkV2Vha1JlZmVyZW5jZXM6OnZp
c2l0Q2hpbGRyZW4oQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBmb3IgKEpT
Q2VsbCogdGFyZ2V0IDogbV9yZWZlcmVuY2VzKQogICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFy
cmllcmVkKHRhcmdldCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2ly
ZWRXZWFrUmVmZXJlbmNlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHRGVzaXJlZFdlYWtSZWZlcmVuY2VzLmgJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFdlYWtSZWZlcmVuY2VzLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0zMSwxMCArMzEsMTAgQEAKIAogbmFtZXNwYWNlIEpTQyB7IAogCitjbGFzcyBB
YnN0cmFjdFNsb3RWaXNpdG9yOwogY2xhc3MgQ29kZUJsb2NrOwogY2xhc3MgSlNDZWxsOwogY2xh
c3MgSlNWYWx1ZTsKLWNsYXNzIFNsb3RWaXNpdG9yOwogY2xhc3MgVk07CiAKIG5hbWVzcGFjZSBE
RkcgewpAQCAtNTIsOCArNTIsOCBAQCBwdWJsaWM6CiAgICAgYm9vbCBjb250YWlucyhKU0NlbGwq
KTsKICAgICAKICAgICB2b2lkIHJlYWxseUFkZChWTSYsIENvbW1vbkRhdGEqKTsKLSAgICAKLSAg
ICB2b2lkIHZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKKworICAgIHZvaWQgdmlzaXRDaGls
ZHJlbihBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAKIHByaXZhdGU6CiAgICAgQ29kZUJsb2NrKiBt
X2NvZGVCbG9jazsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCShy
ZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTQ0OCw3ICsxNDQ4LDcgQEAgdm9pZCBHcmFwaDo6cmVnaXN0
ZXJGcm96ZW5WYWx1ZXMoKQogICAgIG1fY29kZUJsb2NrLT5jb25zdGFudHNTb3VyY2VDb2RlUmVw
cmVzZW50YXRpb24oKS5zaHJpbmtUb0ZpdCgpOwogfQogCi12b2lkIEdyYXBoOjp2aXNpdENoaWxk
cmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBHcmFwaDo6dmlzaXRDaGlsZHJlbihBYnN0
cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGZvciAoRnJvemVuVmFsdWUqIHZhbHVl
IDogbV9mcm96ZW5WYWx1ZXMpIHsKICAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZCh2
YWx1ZS0+dmFsdWUoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBo
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCShy
ZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEx
LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDExLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC0xMDAwLDkgKzEwMDAsOSBAQCBwdWJsaWM6CiAgICAgYm9vbCBj
YW5Eb0Zhc3RTcHJlYWQoTm9kZSosIGNvbnN0IEFic3RyYWN0VmFsdWUmKTsKICAgICAKICAgICB2
b2lkIHJlZ2lzdGVyRnJvemVuVmFsdWVzKCk7Ci0gICAgCi0gICAgdm9pZCB2aXNpdENoaWxkcmVu
KFNsb3RWaXNpdG9yJikgZmluYWw7Ci0gICAgCisKKyAgICB2b2lkIHZpc2l0Q2hpbGRyZW4oQWJz
dHJhY3RTbG90VmlzaXRvciYpIGZpbmFsOworCiAgICAgdm9pZCBsb2dBc3NlcnRpb25GYWlsdXJl
KAogICAgICAgICBzdGQ6Om51bGxwdHJfdCwgY29uc3QgY2hhciogZmlsZSwgaW50IGxpbmUsIGNv
bnN0IGNoYXIqIGZ1bmN0aW9uLAogICAgICAgICBjb25zdCBjaGFyKiBhc3NlcnRpb24pOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCShyZXZpc2lvbiAyNzI5MDIpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIwIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIxIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtNjcyLDkgKzY3MiwxMCBAQCBDb21waWxhdGlvbktleSBQbGFuOjprZXkoKQogICAgIHJldHVy
biBDb21waWxhdGlvbktleShtX2NvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSwgbV9tb2RlKTsKIH0K
IAotdm9pZCBQbGFuOjpjaGVja0xpdmVuZXNzQW5kVmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYg
dmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFBsYW46OmNoZWNrTGl2
ZW5lc3NBbmRWaXNpdENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7Ci0gICAgaWYgKCFpc0tu
b3duVG9CZUxpdmVEdXJpbmdHQygpKQorICAgIGlmICghaXNLbm93blRvQmVMaXZlRHVyaW5nR0Mo
dmlzaXRvcikpCiAgICAgICAgIHJldHVybjsKIAogICAgIGNsZWFuTXVzdEhhbmRsZVZhbHVlc0lm
TmVjZXNzYXJ5KCk7CkBAIC03MDIsMTMgKzcwMywzMyBAQCB2b2lkIFBsYW46OmNoZWNrTGl2ZW5l
c3NBbmRWaXNpdENoaWxkcmVuCiAgICAgbV90cmFuc2l0aW9ucy52aXNpdENoaWxkcmVuKHZpc2l0
b3IpOwogfQogCit0ZW1wbGF0ZSB2b2lkIFBsYW46OmNoZWNrTGl2ZW5lc3NBbmRWaXNpdENoaWxk
cmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgUGxhbjo6Y2hlY2tMaXZl
bmVzc0FuZFZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKKwogdm9pZCBQbGFuOjpmaW5hbGl6
ZUluR0MoKQogewogICAgIEFTU0VSVChtX3ZtKTsKICAgICBtX3JlY29yZGVkU3RhdHVzZXMuZmlu
YWxpemVXaXRob3V0RGVsZXRpbmcoKm1fdm0pOwogfQogCi1ib29sIFBsYW46OmlzS25vd25Ub0Jl
TGl2ZUR1cmluZ0dDKCkKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Citib29sIFBsYW46Omlz
S25vd25Ub0JlTGl2ZUR1cmluZ0dDKFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgaWYgKG1fc3Rh
Z2UgPT0gQ2FuY2VsbGVkKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCF2aXNpdG9y
LmlzTWFya2VkKG1fY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICBpZiAoIXZpc2l0b3IuaXNNYXJrZWQobV9jb2RlQmxvY2stPmFsdGVybmF0
aXZlKCkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCEhbV9wcm9maWxlZERGR0Nv
ZGVCbG9jayAmJiAhdmlzaXRvci5pc01hcmtlZChtX3Byb2ZpbGVkREZHQ29kZUJsb2NrKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiB0cnVlOworfQorCit0ZW1wbGF0ZSBib29s
IFBsYW46OmlzS25vd25Ub0JlTGl2ZUR1cmluZ0dDKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3Rl
bXBsYXRlIGJvb2wgUGxhbjo6aXNLbm93blRvQmVMaXZlRHVyaW5nR0MoU2xvdFZpc2l0b3ImKTsK
KworYm9vbCBQbGFuOjppc0tub3duVG9CZUxpdmVBZnRlckdDKCkKIHsKICAgICBpZiAobV9zdGFn
ZSA9PSBDYW5jZWxsZWQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHUGxhbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHUGxhbi5oCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1BsYW4uaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQzLDggKzQzLDggQEAKIAog
bmFtZXNwYWNlIEpTQyB7CiAKK2NsYXNzIEFic3RyYWN0U2xvdFZpc2l0b3I7CiBjbGFzcyBDb2Rl
QmxvY2s7Ci1jbGFzcyBTbG90VmlzaXRvcjsKIAogbmFtZXNwYWNlIERGRyB7CiAKQEAgLTcwLDEw
ICs3MCwxMSBAQCBwdWJsaWM6CiAgICAgCiAgICAgQ29tcGlsYXRpb25LZXkga2V5KCk7CiAgICAg
Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KLSAgICB2b2lkIGl0ZXJhdGVDb2RlQmxvY2tz
Rm9yR0MoY29uc3QgRnVuYyYpOwotICAgIHZvaWQgY2hlY2tMaXZlbmVzc0FuZFZpc2l0Q2hpbGRy
ZW4oU2xvdFZpc2l0b3ImKTsKLSAgICBib29sIGlzS25vd25Ub0JlTGl2ZUR1cmluZ0dDKCk7Cisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYywgdHlwZW5hbWUgVmlzaXRvcj4KKyAgICB2b2lkIGl0
ZXJhdGVDb2RlQmxvY2tzRm9yR0MoVmlzaXRvciYsIGNvbnN0IEZ1bmMmKTsKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIGNoZWNrTGl2ZW5lc3NBbmRWaXNpdENoaWxkcmVuKFZp
c2l0b3ImKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiBib29sIGlzS25vd25Ub0Jl
TGl2ZUR1cmluZ0dDKFZpc2l0b3ImKTsKKyAgICBib29sIGlzS25vd25Ub0JlTGl2ZUFmdGVyR0Mo
KTsKICAgICB2b2lkIGZpbmFsaXplSW5HQygpOwogICAgIHZvaWQgY2FuY2VsKCk7CiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbklubGluZXMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW5JbmxpbmVzLmgJKHJldmlzaW9uIDI3
MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbklubGluZXMuaAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAx
OCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTct
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTMxLDEwICszMSwxMCBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IERGRyB7CiAKICNpZiBFTkFCTEUoREZHX0pJVCkKIAotdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4K
LXZvaWQgUGxhbjo6aXRlcmF0ZUNvZGVCbG9ja3NGb3JHQyhjb25zdCBGdW5jJiBmdW5jKQordGVt
cGxhdGU8dHlwZW5hbWUgRnVuYywgdHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgUGxhbjo6aXRlcmF0
ZUNvZGVCbG9ja3NGb3JHQyhWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBGdW5jJiBmdW5jKQogewot
ICAgIGlmICghaXNLbm93blRvQmVMaXZlRHVyaW5nR0MoKSkKKyAgICBpZiAoIWlzS25vd25Ub0Jl
TGl2ZUR1cmluZ0dDKHZpc2l0b3IpKQogICAgICAgICByZXR1cm47CiAgICAgCiAgICAgLy8gQ29t
cGlsYXRpb24gd3JpdGVzIGxvdHMgb2YgdmFsdWVzIHRvIGEgQ29kZUJsb2NrIHdpdGhvdXQgcGVy
Zm9ybWluZwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlcG9pbnQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZXBvaW50LmNw
cAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZl
cG9pbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxNC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODMsMjggKzgzLDQ2IEBAIHZvaWQgU2FmZXBv
aW50OjpiZWdpbigpCiAgICAgfQogfQogCi12b2lkIFNhZmVwb2ludDo6Y2hlY2tMaXZlbmVzc0Fu
ZFZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPgordm9pZCBTYWZlcG9pbnQ6OmNoZWNrTGl2ZW5lc3NBbmRWaXNpdENoaWxkcmVuKFZp
c2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQobV9kaWRDYWxsQmVnaW4pOwog
CiAgICAgaWYgKG1fcmVzdWx0Lm1fZGlkR2V0Q2FuY2VsbGVkKQogICAgICAgICByZXR1cm47IC8v
IFdlIHdlcmUgY2FuY2VsbGVkIGR1cmluZyBhIHByZXZpb3VzIEdDIQogICAgIAotICAgIGlmICgh
aXNLbm93blRvQmVMaXZlRHVyaW5nR0MoKSkKKyAgICBpZiAoIWlzS25vd25Ub0JlTGl2ZUR1cmlu
Z0dDKHZpc2l0b3IpKQogICAgICAgICByZXR1cm47CiAgICAgCiAgICAgZm9yICh1bnNpZ25lZCBp
ID0gbV9zY2FubmFibGVzLnNpemUoKTsgaS0tOykKICAgICAgICAgbV9zY2FubmFibGVzW2ldLT52
aXNpdENoaWxkcmVuKHZpc2l0b3IpOwogfQogCi1ib29sIFNhZmVwb2ludDo6aXNLbm93blRvQmVM
aXZlRHVyaW5nR0MoKQordGVtcGxhdGUgdm9pZCBTYWZlcG9pbnQ6OmNoZWNrTGl2ZW5lc3NBbmRW
aXNpdENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgU2FmZXBv
aW50OjpjaGVja0xpdmVuZXNzQW5kVmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYpOworCit0ZW1w
bGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgorYm9vbCBTYWZlcG9pbnQ6OmlzS25vd25Ub0JlTGl2ZUR1
cmluZ0dDKFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgUkVMRUFTRV9BU1NFUlQobV9kaWRDYWxs
QmVnaW4pOworICAgIAorICAgIGlmIChtX3Jlc3VsdC5tX2RpZEdldENhbmNlbGxlZCkKKyAgICAg
ICAgcmV0dXJuIHRydWU7IC8vIFdlIHdlcmUgY2FuY2VsbGVkIGR1cmluZyBhIHByZXZpb3VzIEdD
LCBzbyBsZXQncyBub3QgbWVzcyB3aXRoIGl0IHRoaXMgdGltZSBhcm91bmQgLSBwcmV0ZW5kIGl0
J3MgbGl2ZSBhbmQgbW92ZSBvbi4KKyAgICAKKyAgICByZXR1cm4gbV9wbGFuLmlzS25vd25Ub0Jl
TGl2ZUR1cmluZ0dDKHZpc2l0b3IpOworfQorCit0ZW1wbGF0ZSBib29sIFNhZmVwb2ludDo6aXNL
bm93blRvQmVMaXZlRHVyaW5nR0MoQWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgYm9v
bCBTYWZlcG9pbnQ6OmlzS25vd25Ub0JlTGl2ZUR1cmluZ0dDKFNsb3RWaXNpdG9yJik7CisKK2Jv
b2wgU2FmZXBvaW50Ojppc0tub3duVG9CZUxpdmVBZnRlckdDKCkKIHsKICAgICBSRUxFQVNFX0FT
U0VSVChtX2RpZENhbGxCZWdpbik7CiAgICAgCiAgICAgaWYgKG1fcmVzdWx0Lm1fZGlkR2V0Q2Fu
Y2VsbGVkKQogICAgICAgICByZXR1cm4gdHJ1ZTsgLy8gV2Ugd2VyZSBjYW5jZWxsZWQgZHVyaW5n
IGEgcHJldmlvdXMgR0MsIHNvIGxldCdzIG5vdCBtZXNzIHdpdGggaXQgdGhpcyB0aW1lIGFyb3Vu
ZCAtIHByZXRlbmQgaXQncyBsaXZlIGFuZCBtb3ZlIG9uLgogICAgIAotICAgIHJldHVybiBtX3Bs
YW4uaXNLbm93blRvQmVMaXZlRHVyaW5nR0MoKTsKKyAgICByZXR1cm4gbV9wbGFuLmlzS25vd25U
b0JlTGl2ZUFmdGVyR0MoKTsKIH0KIAogdm9pZCBTYWZlcG9pbnQ6OmNhbmNlbCgpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVwb2ludC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZXBvaW50LmgJKHJldmlzaW9uIDI3MjkwMikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZXBvaW50LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0LCAyMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMzEsNyArMzEsNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotY2xhc3MgU2xvdFZp
c2l0b3I7CitjbGFzcyBBYnN0cmFjdFNsb3RWaXNpdG9yOwogY2xhc3MgVk07CiAKIG5hbWVzcGFj
ZSBERkcgewpAQCAtNjYsOSArNjYsMTAgQEAgcHVibGljOgogICAgIHZvaWQgYWRkKFNjYW5uYWJs
ZSopOwogICAgIAogICAgIHZvaWQgYmVnaW4oKTsKLSAgICAKLSAgICB2b2lkIGNoZWNrTGl2ZW5l
c3NBbmRWaXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJik7Ci0gICAgYm9vbCBpc0tub3duVG9CZUxp
dmVEdXJpbmdHQygpOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCBjaGVj
a0xpdmVuZXNzQW5kVmlzaXRDaGlsZHJlbihWaXNpdG9yJik7CisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgVmlzaXRvcj4gYm9vbCBpc0tub3duVG9CZUxpdmVEdXJpbmdHQyhWaXNpdG9yJik7CisgICAg
Ym9vbCBpc0tub3duVG9CZUxpdmVBZnRlckdDKCk7CiAgICAgdm9pZCBjYW5jZWwoKTsKICAgICAK
ICAgICBWTSogdm0oKSBjb25zdDsgLy8gTWF5IHJldHVybiBudWxsIGlmIHdlJ3ZlIGJlZW4gY2Fu
Y2VsbGVkLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTY2FubmFibGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NjYW5uYWJsZS5oCShy
ZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NjYW5uYWJs
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTQtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTI5LDcgKzI5LDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLWNs
YXNzIFNsb3RWaXNpdG9yOworY2xhc3MgQWJzdHJhY3RTbG90VmlzaXRvcjsKIAogbmFtZXNwYWNl
IERGRyB7CiAKQEAgLTM4LDcgKzM4LDcgQEAgcHVibGljOgogICAgIFNjYW5uYWJsZSgpIHsgfQog
ICAgIHZpcnR1YWwgflNjYW5uYWJsZSgpIHsgfQogICAgIAotICAgIHZpcnR1YWwgdm9pZCB2aXNp
dENoaWxkcmVuKFNsb3RWaXNpdG9yJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdENoaWxk
cmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImKSA9IDA7CiB9OwogCiB9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0LmNwcAko
cmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlz
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNzIsNyArMzcyLDggQEAgdm9pZCBXb3JrbGlzdDo6
cmVzdW1lQWxsVGhyZWFkcygpCiAgICAgbV9zdXNwZW5zaW9uTG9jay51bmxvY2soKTsKIH0KIAot
dm9pZCBXb3JrbGlzdDo6dmlzaXRXZWFrUmVmZXJlbmNlcyhTbG90VmlzaXRvciYgdmlzaXRvcikK
K3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFdvcmtsaXN0Ojp2aXNpdFdlYWtSZWZl
cmVuY2VzKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgVk0qIHZtID0gJnZpc2l0b3IuaGVhcCgp
LT52bSgpOwogICAgIHsKQEAgLTM5Niw2ICszOTcsOSBAQCB2b2lkIFdvcmtsaXN0Ojp2aXNpdFdl
YWtSZWZlcmVuY2VzKFNsb3RWCiAgICAgfQogfQogCit0ZW1wbGF0ZSB2b2lkIFdvcmtsaXN0Ojp2
aXNpdFdlYWtSZWZlcmVuY2VzKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQg
V29ya2xpc3Q6OnZpc2l0V2Vha1JlZmVyZW5jZXMoU2xvdFZpc2l0b3ImKTsKKwogdm9pZCBXb3Jr
bGlzdDo6cmVtb3ZlRGVhZFBsYW5zKFZNJiB2bSkKIHsKICAgICB7CkBAIC00MDUsNyArNDA5LDcg
QEAgdm9pZCBXb3JrbGlzdDo6cmVtb3ZlRGVhZFBsYW5zKFZNJiB2bSkKICAgICAgICAgICAgIFBs
YW4qIHBsYW4gPSBpdGVyLT52YWx1ZS5nZXQoKTsKICAgICAgICAgICAgIGlmIChwbGFuLT52bSgp
ICE9ICZ2bSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGlmIChwbGFu
LT5pc0tub3duVG9CZUxpdmVEdXJpbmdHQygpKSB7CisgICAgICAgICAgICBpZiAocGxhbi0+aXNL
bm93blRvQmVMaXZlQWZ0ZXJHQygpKSB7CiAgICAgICAgICAgICAgICAgcGxhbi0+ZmluYWxpemVJ
bkdDKCk7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CkBAIC00NDAs
NyArNDQ0LDcgQEAgdm9pZCBXb3JrbGlzdDo6cmVtb3ZlRGVhZFBsYW5zKFZNJiB2bSkKICAgICAg
ICAgICAgIGNvbnRpbnVlOwogICAgICAgICBpZiAoc2FmZXBvaW50LT52bSgpICE9ICZ2bSkKICAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAoc2FmZXBvaW50LT5pc0tub3duVG9CZUxp
dmVEdXJpbmdHQygpKQorICAgICAgICBpZiAoc2FmZXBvaW50LT5pc0tub3duVG9CZUxpdmVBZnRl
ckdDKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgc2FmZXBvaW50LT5jYW5jZWwo
KTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5oCShy
ZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0zNSw3ICszNSw3IEBACiAKIG5hbWVzcGFjZSBKU0Mgewog
Ci1jbGFzcyBTbG90VmlzaXRvcjsKK2NsYXNzIEFic3RyYWN0U2xvdFZpc2l0b3I7CiAKIG5hbWVz
cGFjZSBERkcgewogCkBAIC01Nyw3ICs1Nyw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGNvbXBsZXRl
QWxsUGxhbnNGb3JWTShWTSYpOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KLSAgICB2
b2lkIGl0ZXJhdGVDb2RlQmxvY2tzRm9yR0MoVk0mLCBjb25zdCBGdW5jJik7CisgICAgdm9pZCBp
dGVyYXRlQ29kZUJsb2Nrc0ZvckdDKEFic3RyYWN0U2xvdFZpc2l0b3ImLCBWTSYsIGNvbnN0IEZ1
bmMmKTsKIAogICAgIHZvaWQgd2FpdFVudGlsQWxsUGxhbnNGb3JWTUFyZVJlYWR5KFZNJik7CiAg
ICAgU3RhdGUgY29tcGxldGVBbGxSZWFkeVBsYW5zRm9yVk0oVk0mLCBDb21waWxhdGlvbktleSA9
IENvbXBpbGF0aW9uS2V5KCkpOwpAQCAtNzMsNyArNzMsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBp
c0FjdGl2ZUZvclZNKFZNJikgY29uc3Q7CiAgICAgCiAgICAgLy8gT25seSBjYWxsZWQgb24gdGhl
IG1haW4gdGhyZWFkIGFmdGVyIHN1c3BlbmRpbmcgYWxsIHRocmVhZHMuCi0gICAgdm9pZCB2aXNp
dFdlYWtSZWZlcmVuY2VzKFNsb3RWaXNpdG9yJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlz
aXRvcj4gdm9pZCB2aXNpdFdlYWtSZWZlcmVuY2VzKFZpc2l0b3ImKTsKICAgICB2b2lkIHJlbW92
ZURlYWRQbGFucyhWTSYpOwogICAgIAogICAgIHZvaWQgcmVtb3ZlTm9uQ29tcGlsaW5nUGxhbnNG
b3JWTShWTSYpOwpAQCAtMTQ0LDcgKzE0NCw3IEBAIFdvcmtsaXN0JiBleGlzdGluZ1dvcmtsaXN0
Rm9ySW5kZXgodW5zaWcKIHZvaWQgY29tcGxldGVBbGxQbGFuc0ZvclZNKFZNJik7CiAKIHRlbXBs
YXRlPHR5cGVuYW1lIEZ1bmM+Ci12b2lkIGl0ZXJhdGVDb2RlQmxvY2tzRm9yR0MoVk0mLCBjb25z
dCBGdW5jJik7Cit2b2lkIGl0ZXJhdGVDb2RlQmxvY2tzRm9yR0MoQWJzdHJhY3RTbG90VmlzaXRv
ciYsIFZNJiwgY29uc3QgRnVuYyYpOwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3RJbmxpbmVzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlzdElubGluZXMuaAko
cmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlz
dElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTctMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMzLDMwICszMywzMCBAQCBuYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIERGRyB7CiAjaWYgRU5BQkxFKERGR19KSVQpCiAKIHRlbXBsYXRlPHR5
cGVuYW1lIEZ1bmM+Ci12b2lkIGl0ZXJhdGVDb2RlQmxvY2tzRm9yR0MoVk0mIHZtLCBjb25zdCBG
dW5jJiBmdW5jKQordm9pZCBpdGVyYXRlQ29kZUJsb2Nrc0ZvckdDKEFic3RyYWN0U2xvdFZpc2l0
b3ImIHZpc2l0b3IsIFZNJiB2bSwgY29uc3QgRnVuYyYgZnVuYykKIHsKICAgICBmb3IgKHVuc2ln
bmVkIGkgPSBERkc6Om51bWJlck9mV29ya2xpc3RzKCk7IGktLTspIHsKICAgICAgICAgaWYgKERG
Rzo6V29ya2xpc3QqIHdvcmtsaXN0ID0gREZHOjpleGlzdGluZ1dvcmtsaXN0Rm9ySW5kZXhPck51
bGwoaSkpCi0gICAgICAgICAgICB3b3JrbGlzdC0+aXRlcmF0ZUNvZGVCbG9ja3NGb3JHQyh2bSwg
ZnVuYyk7CisgICAgICAgICAgICB3b3JrbGlzdC0+aXRlcmF0ZUNvZGVCbG9ja3NGb3JHQyh2aXNp
dG9yLCB2bSwgZnVuYyk7CiAgICAgfQogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgotdm9p
ZCBXb3JrbGlzdDo6aXRlcmF0ZUNvZGVCbG9ja3NGb3JHQyhWTSYgdm0sIGNvbnN0IEZ1bmMmIGZ1
bmMpCit2b2lkIFdvcmtsaXN0OjppdGVyYXRlQ29kZUJsb2Nrc0ZvckdDKEFic3RyYWN0U2xvdFZp
c2l0b3ImIHZpc2l0b3IsIFZNJiB2bSwgY29uc3QgRnVuYyYgZnVuYykKIHsKICAgICBMb2NrSG9s
ZGVyIGxvY2tlcigqbV9sb2NrKTsKICAgICBmb3IgKFBsYW5NYXA6Oml0ZXJhdG9yIGl0ZXIgPSBt
X3BsYW5zLmJlZ2luKCk7IGl0ZXIgIT0gbV9wbGFucy5lbmQoKTsgKytpdGVyKSB7CiAgICAgICAg
IFBsYW4qIHBsYW4gPSBpdGVyLT52YWx1ZS5nZXQoKTsKICAgICAgICAgaWYgKHBsYW4tPnZtKCkg
IT0gJnZtKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIHBsYW4tPml0ZXJhdGVDb2Rl
QmxvY2tzRm9yR0MoZnVuYyk7CisgICAgICAgIHBsYW4tPml0ZXJhdGVDb2RlQmxvY2tzRm9yR0Mo
dmlzaXRvciwgZnVuYyk7CiAgICAgfQogfQogCiAjZWxzZSAvLyBFTkFCTEUoREZHX0pJVCkKIAog
dGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KLXZvaWQgaXRlcmF0ZUNvZGVCbG9ja3NGb3JHQyhWTSYs
IGNvbnN0IEZ1bmMmKQordm9pZCBpdGVyYXRlQ29kZUJsb2Nrc0ZvckdDKEFic3RyYWN0U2xvdFZp
c2l0b3ImLCBWTSYsIGNvbnN0IEZ1bmMmKQogewogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9BYnN0cmFjdFNsb3RWaXNpdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvQWJzdHJhY3RTbG90VmlzaXRvci5oCShub25leGlzdGVudCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Fic3RyYWN0U2xvdFZpc2l0b3IuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDIwOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiSlNDSlNWYWx1ZS5oIgor
I2luY2x1ZGUgIk1hcmtTdGFjay5oIgorI2luY2x1ZGUgIlJvb3RNYXJrUmVhc29uLmgiCisjaW5j
bHVkZSAiVmlzaXRSYWNlS2V5LmgiCisjaW5jbHVkZSA8d3RmL0NvbmN1cnJlbnRQdHJIYXNoU2V0
Lmg+CisjaW5jbHVkZSA8d3RmL1NoYXJlZFRhc2suaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3Ry
aW5nLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBDb25zZXJ2YXRpdmVSb290czsKK2Ns
YXNzIEhlYXA7CitjbGFzcyBIZWFwQ2VsbDsKK2NsYXNzIEpTQ2VsbDsKK2NsYXNzIE1hcmtlZEJs
b2NrOworY2xhc3MgTWFya2luZ0NvbnN0cmFpbnQ7CitjbGFzcyBNYXJraW5nQ29uc3RyYWludFNv
bHZlcjsKK2NsYXNzIFByZWNpc2VBbGxvY2F0aW9uOworY2xhc3MgU2xvdFZpc2l0b3I7CitjbGFz
cyBWTTsKK2NsYXNzIFZlcmlmaWVyU2xvdFZpc2l0b3I7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBj
bGFzcyBXZWFrOwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVHJhaXRzPiBjbGFzcyBX
cml0ZUJhcnJpZXJCYXNlOworCitjbGFzcyBBYnN0cmFjdFNsb3RWaXNpdG9yIHsKKyAgICBXVEZf
TUFLRV9OT05DT1BZQUJMRShBYnN0cmFjdFNsb3RWaXNpdG9yKTsKKyAgICBXVEZfTUFLRV9GQVNU
X0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBjbGFzcyBDb250ZXh0IHsKKyAgICBwdWJsaWM6Cisg
ICAgICAgIENvbnRleHQoQWJzdHJhY3RTbG90VmlzaXRvciYsIEhlYXBDZWxsKik7CisgICAgICAg
IH5Db250ZXh0KCk7CisgICAgICAgIEhlYXBDZWxsKiBjZWxsKCkgY29uc3QgeyByZXR1cm4gbV9j
ZWxsOyB9CisgICAgcHJpdmF0ZToKKyAgICAgICAgQWJzdHJhY3RTbG90VmlzaXRvciYgbV92aXNp
dG9yOworICAgICAgICBIZWFwQ2VsbCogbV9jZWxsOworICAgICAgICBDb250ZXh0KiBtX3ByZXZp
b3VzOworICAgIH07CisKKyAgICBjbGFzcyBTdXBwcmVzc0dDVmVyaWZpZXJTY29wZSB7CisgICAg
cHVibGljOgorICAgICAgICBTdXBwcmVzc0dDVmVyaWZpZXJTY29wZShBYnN0cmFjdFNsb3RWaXNp
dG9yJiB2aXNpdG9yKQorICAgICAgICAgICAgOiBtX3Zpc2l0b3IodmlzaXRvcikKKyAgICAgICAg
eworICAgICAgICAgICAgQVNTRVJUKCFtX3Zpc2l0b3IubV9zdXBwcmVzc1ZlcmlmaWVyKTsKKyAg
ICAgICAgICAgIG1fdmlzaXRvci5tX3N1cHByZXNzVmVyaWZpZXIgPSB0cnVlOworICAgICAgICB9
CisgICAgICAgIH5TdXBwcmVzc0dDVmVyaWZpZXJTY29wZSgpIHsgbV92aXNpdG9yLm1fc3VwcHJl
c3NWZXJpZmllciA9IGZhbHNlOyB9CisgICAgcHJpdmF0ZToKKyAgICAgICAgQWJzdHJhY3RTbG90
VmlzaXRvciYgbV92aXNpdG9yOworICAgIH07CisKKyAgICBjbGFzcyBEZWZhdWx0TWFya2luZ1Zp
b2xhdGlvbkFzc2VydGlvblNjb3BlIHsKKyAgICBwdWJsaWM6CisgICAgICAgIERlZmF1bHRNYXJr
aW5nVmlvbGF0aW9uQXNzZXJ0aW9uU2NvcGUoQWJzdHJhY3RTbG90VmlzaXRvciYpIHsgfQorICAg
IH07CisKKyAgICB2aXJ0dWFsIH5BYnN0cmFjdFNsb3RWaXNpdG9yKCkgPSBkZWZhdWx0OworCisg
ICAgTWFya1N0YWNrQXJyYXkmIGNvbGxlY3Rvck1hcmtTdGFjaygpIHsgcmV0dXJuIG1fY29sbGVj
dG9yU3RhY2s7IH0KKyAgICBNYXJrU3RhY2tBcnJheSYgbXV0YXRvck1hcmtTdGFjaygpIHsgcmV0
dXJuIG1fbXV0YXRvclN0YWNrOyB9CisgICAgY29uc3QgTWFya1N0YWNrQXJyYXkmIGNvbGxlY3Rv
ck1hcmtTdGFjaygpIGNvbnN0IHsgcmV0dXJuIG1fY29sbGVjdG9yU3RhY2s7IH0KKyAgICBjb25z
dCBNYXJrU3RhY2tBcnJheSYgbXV0YXRvck1hcmtTdGFjaygpIGNvbnN0IHsgcmV0dXJuIG1fbXV0
YXRvclN0YWNrOyB9CisKKyAgICBib29sIGlzRW1wdHkoKSB7IHJldHVybiBtX2NvbGxlY3RvclN0
YWNrLmlzRW1wdHkoKSAmJiBtX211dGF0b3JTdGFjay5pc0VtcHR5KCk7IH0KKworICAgIFZNJiB2
bSgpOworICAgIGNvbnN0IFZNJiB2bSgpIGNvbnN0OworICAgIEhlYXAqIGhlYXAoKSBjb25zdDsK
KworICAgIHZpcnR1YWwgdm9pZCBhcHBlbmQoY29uc3QgQ29uc2VydmF0aXZlUm9vdHMmKSA9IDA7
CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBUcmFpdHM+IHZvaWQgYXBwZW5k
KGNvbnN0IFdyaXRlQmFycmllckJhc2U8VCwgVHJhaXRzPiYpOworICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIFRyYWl0cz4gdm9pZCBhcHBlbmRIaWRkZW4oY29uc3QgV3JpdGVCYXJy
aWVyQmFzZTxULCBUcmFpdHM+Jik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSXRlcmF0b3I+IHZv
aWQgYXBwZW5kKEl0ZXJhdG9yIGJlZ2luICwgSXRlcmF0b3IgZW5kKTsKKyAgICBBTFdBWVNfSU5M
SU5FIHZvaWQgYXBwZW5kVmFsdWVzKGNvbnN0IFdyaXRlQmFycmllckJhc2U8VW5rbm93biwgUmF3
VmFsdWVUcmFpdHM8VW5rbm93bj4+Kiwgc2l6ZV90IGNvdW50KTsKKyAgICBBTFdBWVNfSU5MSU5F
IHZvaWQgYXBwZW5kVmFsdWVzSGlkZGVuKGNvbnN0IFdyaXRlQmFycmllckJhc2U8VW5rbm93biwg
UmF3VmFsdWVUcmFpdHM8VW5rbm93bj4+Kiwgc2l6ZV90IGNvdW50KTsKKworICAgIC8vIFRoZXNl
IGRvbid0IHJlcXVpcmUgeW91IHRvIHByb3ZlIHRoYXQgeW91IGhhdmUgYSBXcml0ZUJhcnJpZXI8
Pi4gVGhhdCBtYWtlcyBzZW5zZQorICAgIC8vIGZvcjoKKyAgICAvLworICAgIC8vIC0gcm9vdHMu
CisgICAgLy8gLSBzb3BoaXN0aWNhdGVkIGRhdGEgc3RydWN0dXJlcyB0aGF0IGJhcnJpZXIgdGhy
b3VnaCBvdGhlciBtZWFucyAobGlrZSBERkc6OlBsYW4gYW5kCisgICAgLy8gICBmcmllbmRzKS4K
KyAgICAvLworICAgIC8vIElmIHlvdSBhcmUgbm90IGEgcm9vdCBhbmQgeW91IGRvbid0IGtub3cg
d2hhdCBraW5kIG9mIGJhcnJpZXIgeW91IGhhdmUsIHRoZW4geW91CisgICAgLy8gc2hvdWxkbid0
IGNhbGwgdGhlc2UgbWV0aG9kcy4KKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgYXBwZW5kVW5iYXJy
aWVyZWQoSlNWYWx1ZSk7CisgICAgQUxXQVlTX0lOTElORSB2b2lkIGFwcGVuZFVuYmFycmllcmVk
KEpTVmFsdWUqLCBzaXplX3QpOworICAgIHZpcnR1YWwgdm9pZCBhcHBlbmRVbmJhcnJpZXJlZChK
U0NlbGwqKSA9IDA7CisKKyAgICBpbmxpbmUgYm9vbCBhZGRPcGFxdWVSb290KHZvaWQqKTsgLy8g
UmV0dXJucyB0cnVlIGlmIHRoZSByb290IHdhcyBuZXcuCisgICAgaW5saW5lIGJvb2wgY29udGFp
bnNPcGFxdWVSb290KHZvaWQqKSBjb25zdDsKKyAgICB2b2lkIHNldElnbm9yZU5ld09wYXF1ZVJv
b3RzKGJvb2wgdmFsdWUpIHsgbV9pZ25vcmVOZXdPcGFxdWVSb290cyA9IHZhbHVlOyB9CisKKyAg
ICB2aXJ0dWFsIGJvb2wgaXNGaXJzdFZpc2l0KCkgY29uc3QgPSAwOworCisgICAgdmlydHVhbCBi
b29sIGlzTWFya2VkKGNvbnN0IHZvaWQqKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBib29sIGlz
TWFya2VkKE1hcmtlZEJsb2NrJiwgSGVhcENlbGwqKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBi
b29sIGlzTWFya2VkKFByZWNpc2VBbGxvY2F0aW9uJiwgSGVhcENlbGwqKSBjb25zdCA9IDA7CisK
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIHZvaWQgYXBwZW5kKGNvbnN0IFdlYWs8VD4m
KTsKKworICAgIEFMV0FZU19JTkxJTkUgdm9pZCBhcHBlbmRIaWRkZW5VbmJhcnJpZXJlZChKU1Zh
bHVlKTsKKyAgICB2aXJ0dWFsIHZvaWQgYXBwZW5kSGlkZGVuVW5iYXJyaWVyZWQoSlNDZWxsKikg
PSAwOworCisgICAgc2l6ZV90IHZpc2l0Q291bnQoKSBjb25zdCB7IHJldHVybiBtX3Zpc2l0Q291
bnQ7IH0KKworICAgIHZvaWQgYWRkVG9WaXNpdENvdW50KHNpemVfdCB2YWx1ZSkgeyBtX3Zpc2l0
Q291bnQgKz0gdmFsdWU7IH0KKworICAgIHZpcnR1YWwgdm9pZCBhZGRQYXJhbGxlbENvbnN0cmFp
bnRUYXNrKFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoQWJzdHJhY3RTbG90VmlzaXRvciYpPj4pID0g
MDsKKyAgICB2aXJ0dWFsIHZvaWQgYWRkUGFyYWxsZWxDb25zdHJhaW50VGFzayhSZWZQdHI8U2hh
cmVkVGFzazx2b2lkKFNsb3RWaXNpdG9yJik+PikgPSAwOworCisgICAgdmlydHVhbCB2b2lkIG1h
cmtBdXhpbGlhcnkoY29uc3Qgdm9pZCogYmFzZSkgPSAwOworCisgICAgdmlydHVhbCB2b2lkIHJl
cG9ydEV4dHJhTWVtb3J5VmlzaXRlZChzaXplX3QpID0gMDsKKyNpZiBFTkFCTEUoUkVTT1VSQ0Vf
VVNBR0UpCisgICAgdmlydHVhbCB2b2lkIHJlcG9ydEV4dGVybmFsTWVtb3J5VmlzaXRlZChzaXpl
X3QpID0gMDsKKyNlbmRpZgorCisgICAgdmlydHVhbCB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBj
b25zdCA9IDA7CisKKyAgICBSb290TWFya1JlYXNvbiByb290TWFya1JlYXNvbigpIGNvbnN0IHsg
cmV0dXJuIG1fcm9vdE1hcmtSZWFzb247IH0KKyAgICB2b2lkIHNldFJvb3RNYXJrUmVhc29uKFJv
b3RNYXJrUmVhc29uIHJlYXNvbikgeyBtX3Jvb3RNYXJrUmVhc29uID0gcmVhc29uOyB9CisKKyAg
ICB2aXJ0dWFsIGJvb2wgbXV0YXRvcklzU3RvcHBlZCgpIGNvbnN0ID0gMDsKKworICAgIHZpcnR1
YWwgdm9pZCBkaWRSYWNlKGNvbnN0IFZpc2l0UmFjZUtleSYpID0gMDsKKyAgICB2b2lkIGRpZFJh
Y2UoSlNDZWxsKiBjZWxsLCBjb25zdCBjaGFyKiByZWFzb24pIHsgZGlkUmFjZShWaXNpdFJhY2VL
ZXkoY2VsbCwgcmVhc29uKSk7IH0KKworICAgIHZpcnR1YWwgdm9pZCB2aXNpdEFzQ29uc3RyYWlu
dChjb25zdCBKU0NlbGwqKSA9IDA7CisKKyAgICBjb25zdCBjaGFyKiBjb2RlTmFtZSgpIGNvbnN0
IHsgcmV0dXJuIG1fY29kZU5hbWUuZGF0YSgpOyB9CisKK3Byb3RlY3RlZDoKKyAgICBpbmxpbmUg
QWJzdHJhY3RTbG90VmlzaXRvcihIZWFwJiwgQ1N0cmluZyBjb2RlTmFtZSwgQ29uY3VycmVudFB0
ckhhc2hTZXQmKTsKKworICAgIEhlYXBDZWxsKiBwYXJlbnRDZWxsKCkgY29uc3Q7CisgICAgdm9p
ZCByZXNldCgpOworCisgICAgTWFya1N0YWNrQXJyYXkgbV9jb2xsZWN0b3JTdGFjazsKKyAgICBN
YXJrU3RhY2tBcnJheSBtX211dGF0b3JTdGFjazsKKworICAgIHNpemVfdCBtX3Zpc2l0Q291bnQg
eyAwIH07CisKKyAgICBIZWFwJiBtX2hlYXA7CisgICAgQ29udGV4dCogbV9jb250ZXh0IHsgbnVs
bHB0ciB9OworICAgIENTdHJpbmcgbV9jb2RlTmFtZTsKKworICAgIE1hcmtpbmdDb25zdHJhaW50
KiBtX2N1cnJlbnRDb25zdHJhaW50IHsgbnVsbHB0ciB9OworICAgIE1hcmtpbmdDb25zdHJhaW50
U29sdmVyKiBtX2N1cnJlbnRTb2x2ZXIgeyBudWxscHRyIH07CisgICAgQ29uY3VycmVudFB0ckhh
c2hTZXQmIG1fb3BhcXVlUm9vdHM7CisKKyAgICBSb290TWFya1JlYXNvbiBtX3Jvb3RNYXJrUmVh
c29uIHsgUm9vdE1hcmtSZWFzb246Ok5vbmUgfTsKKyAgICBib29sIG1fc3VwcHJlc3NWZXJpZmll
ciB7IGZhbHNlIH07CisgICAgYm9vbCBtX2lnbm9yZU5ld09wYXF1ZVJvb3RzIHsgZmFsc2UgfTsg
Ly8gVXNlZnVsIGFzIGEgZGVidWdnaW5nIG1vZGUuCisKKyAgICBmcmllbmQgY2xhc3MgTWFya2lu
Z0NvbnN0cmFpbnRTb2x2ZXI7Cit9OworCitjbGFzcyBTZXRSb290TWFya1JlYXNvblNjb3BlIHsK
K3B1YmxpYzoKKyAgICBTZXRSb290TWFya1JlYXNvblNjb3BlKEFic3RyYWN0U2xvdFZpc2l0b3Im
IHZpc2l0b3IsIFJvb3RNYXJrUmVhc29uIHJlYXNvbikKKyAgICAgICAgOiBtX3Zpc2l0b3Iodmlz
aXRvcikKKyAgICAgICAgLCBtX3ByZXZpb3VzUmVhc29uKHZpc2l0b3Iucm9vdE1hcmtSZWFzb24o
KSkKKyAgICB7CisgICAgICAgIG1fdmlzaXRvci5zZXRSb290TWFya1JlYXNvbihyZWFzb24pOwor
ICAgIH0KKworICAgIH5TZXRSb290TWFya1JlYXNvblNjb3BlKCkKKyAgICB7CisgICAgICAgIG1f
dmlzaXRvci5zZXRSb290TWFya1JlYXNvbihtX3ByZXZpb3VzUmVhc29uKTsKKyAgICB9CisKK3By
aXZhdGU6CisgICAgQWJzdHJhY3RTbG90VmlzaXRvciYgbV92aXNpdG9yOworICAgIFJvb3RNYXJr
UmVhc29uIG1fcHJldmlvdXNSZWFzb247Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Fic3RyYWN0U2xvdFZpc2l0b3JJbmxpbmVzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQWJzdHJhY3RTbG90Vmlz
aXRvcklubGluZXMuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9BYnN0cmFjdFNsb3RWaXNpdG9ySW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MTU0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3By
YWdtYSBvbmNlCisKKyNpbmNsdWRlICJBYnN0cmFjdFNsb3RWaXNpdG9yLmgiCisjaW5jbHVkZSAi
SGVhcC5oIgorI2luY2x1ZGUgIldlYWtJbmxpbmVzLmgiCisjaW5jbHVkZSAiV3JpdGVCYXJyaWVy
LmgiCisKK25hbWVzcGFjZSBKU0MgeworCitpbmxpbmUgQWJzdHJhY3RTbG90VmlzaXRvcjo6Q29u
dGV4dDo6Q29udGV4dChBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBIZWFwQ2VsbCogY2Vs
bCkKKyAgICA6IG1fdmlzaXRvcih2aXNpdG9yKQorICAgICwgbV9jZWxsKGNlbGwpCit7CisgICAg
bV9wcmV2aW91cyA9IG1fdmlzaXRvci5tX2NvbnRleHQ7CisgICAgbV92aXNpdG9yLm1fY29udGV4
dCA9IHRoaXM7Cit9CisKK2lubGluZSBBYnN0cmFjdFNsb3RWaXNpdG9yOjpDb250ZXh0Ojp+Q29u
dGV4dCgpCit7CisgICAgbV92aXNpdG9yLm1fY29udGV4dCA9IG1fcHJldmlvdXM7Cit9CisKK2lu
bGluZSBBYnN0cmFjdFNsb3RWaXNpdG9yOjpBYnN0cmFjdFNsb3RWaXNpdG9yKEhlYXAmIGhlYXAs
IENTdHJpbmcgY29kZU5hbWUsIENvbmN1cnJlbnRQdHJIYXNoU2V0JiBvcGFxdWVSb290cykKKyAg
ICA6IG1faGVhcChoZWFwKQorICAgICwgbV9jb2RlTmFtZShjb2RlTmFtZSkKKyAgICAsIG1fb3Bh
cXVlUm9vdHMob3BhcXVlUm9vdHMpCit7Cit9CisKK2lubGluZSBIZWFwKiBBYnN0cmFjdFNsb3RW
aXNpdG9yOjpoZWFwKCkgY29uc3QKK3sKKyAgICByZXR1cm4gJm1faGVhcDsKK30KKworaW5saW5l
IFZNJiBBYnN0cmFjdFNsb3RWaXNpdG9yOjp2bSgpCit7CisgICAgcmV0dXJuIG1faGVhcC52bSgp
OworfQorCitpbmxpbmUgY29uc3QgVk0mIEFic3RyYWN0U2xvdFZpc2l0b3I6OnZtKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gbV9oZWFwLnZtKCk7Cit9CisKK2lubGluZSBib29sIEFic3RyYWN0U2xv
dFZpc2l0b3I6OmFkZE9wYXF1ZVJvb3Qodm9pZCogcHRyKQoreworICAgIGlmICghcHRyKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG1faWdub3JlTmV3T3BhcXVlUm9vdHMpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIW1fb3BhcXVlUm9vdHMuYWRkKHB0cikpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICBtX3Zpc2l0Q291bnQrKzsKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKworaW5saW5lIGJvb2wgQWJzdHJhY3RTbG90VmlzaXRvcjo6Y29udGFpbnNPcGFxdWVSb290
KHZvaWQqIHB0cikgY29uc3QKK3sKKyAgICByZXR1cm4gbV9vcGFxdWVSb290cy5jb250YWlucyhw
dHIpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorQUxXQVlTX0lOTElORSB2b2lkIEFic3Ry
YWN0U2xvdFZpc2l0b3I6OmFwcGVuZChjb25zdCBXZWFrPFQ+JiB3ZWFrKQoreworICAgIGFwcGVu
ZFVuYmFycmllcmVkKHdlYWsuZ2V0KCkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBl
bmFtZSBUcmFpdHM+CitBTFdBWVNfSU5MSU5FIHZvaWQgQWJzdHJhY3RTbG90VmlzaXRvcjo6YXBw
ZW5kKGNvbnN0IFdyaXRlQmFycmllckJhc2U8VCwgVHJhaXRzPiYgc2xvdCkKK3sKKyAgICBhcHBl
bmRVbmJhcnJpZXJlZChzbG90LmdldCgpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlw
ZW5hbWUgVHJhaXRzPgorQUxXQVlTX0lOTElORSB2b2lkIEFic3RyYWN0U2xvdFZpc2l0b3I6OmFw
cGVuZEhpZGRlbihjb25zdCBXcml0ZUJhcnJpZXJCYXNlPFQsIFRyYWl0cz4mIHNsb3QpCit7Cisg
ICAgYXBwZW5kSGlkZGVuVW5iYXJyaWVyZWQoc2xvdC5nZXQoKSk7Cit9CisKK0FMV0FZU19JTkxJ
TkUgdm9pZCBBYnN0cmFjdFNsb3RWaXNpdG9yOjphcHBlbmRIaWRkZW5VbmJhcnJpZXJlZChKU1Zh
bHVlIHZhbHVlKQoreworICAgIGlmICh2YWx1ZS5pc0NlbGwoKSkKKyAgICAgICAgYXBwZW5kSGlk
ZGVuVW5iYXJyaWVyZWQodmFsdWUuYXNDZWxsKCkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBJ
dGVyYXRvcj4KK0FMV0FZU19JTkxJTkUgdm9pZCBBYnN0cmFjdFNsb3RWaXNpdG9yOjphcHBlbmQo
SXRlcmF0b3IgYmVnaW4sIEl0ZXJhdG9yIGVuZCkKK3sKKyAgICBmb3IgKGF1dG8gaXQgPSBiZWdp
bjsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICBhcHBlbmQoKml0KTsKK30KKworQUxXQVlTX0lO
TElORSB2b2lkIEFic3RyYWN0U2xvdFZpc2l0b3I6OmFwcGVuZFZhbHVlcyhjb25zdCBXcml0ZUJh
cnJpZXJCYXNlPFVua25vd24+KiBiYXJyaWVycywgc2l6ZV90IGNvdW50KQoreworICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgY291bnQ7ICsraSkKKyAgICAgICAgYXBwZW5kKGJhcnJpZXJzW2ld
KTsKK30KKworQUxXQVlTX0lOTElORSB2b2lkIEFic3RyYWN0U2xvdFZpc2l0b3I6OmFwcGVuZFZh
bHVlc0hpZGRlbihjb25zdCBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+KiBiYXJyaWVycywgc2l6
ZV90IGNvdW50KQoreworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY291bnQ7ICsraSkKKyAg
ICAgICAgYXBwZW5kSGlkZGVuKGJhcnJpZXJzW2ldKTsKK30KKworQUxXQVlTX0lOTElORSB2b2lk
IEFic3RyYWN0U2xvdFZpc2l0b3I6OmFwcGVuZFVuYmFycmllcmVkKEpTVmFsdWUgdmFsdWUpCit7
CisgICAgaWYgKHZhbHVlLmlzQ2VsbCgpKQorICAgICAgICBhcHBlbmRVbmJhcnJpZXJlZCh2YWx1
ZS5hc0NlbGwoKSk7Cit9CisKK0FMV0FZU19JTkxJTkUgdm9pZCBBYnN0cmFjdFNsb3RWaXNpdG9y
OjphcHBlbmRVbmJhcnJpZXJlZChKU1ZhbHVlKiBzbG90LCBzaXplX3QgY291bnQpCit7CisgICAg
Zm9yIChzaXplX3QgaSA9IGNvdW50OyBpLS07KQorICAgICAgICBhcHBlbmRVbmJhcnJpZXJlZChz
bG90W2ldKTsKK30KKworQUxXQVlTX0lOTElORSBIZWFwQ2VsbCogQWJzdHJhY3RTbG90VmlzaXRv
cjo6cGFyZW50Q2VsbCgpIGNvbnN0Cit7CisgICAgaWYgKCFtX2NvbnRleHQpCisgICAgICAgIHJl
dHVybiBudWxscHRyOworICAgIHJldHVybiBtX2NvbnRleHQtPmNlbGwoKTsKK30KKworQUxXQVlT
X0lOTElORSB2b2lkIEFic3RyYWN0U2xvdFZpc2l0b3I6OnJlc2V0KCkKK3sKKyAgICBtX3Zpc2l0
Q291bnQgPSAwOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0hhbmRsZVNldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvSGFuZGxlU2V0LmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvSGFuZGxlU2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU2LDcg
KzU2LDggQEAgdm9pZCBIYW5kbGVTZXQ6Omdyb3coKQogICAgIH0KIH0KIAotdm9pZCBIYW5kbGVT
ZXQ6OnZpc2l0U3Ryb25nSGFuZGxlcyhTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5
cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEhhbmRsZVNldDo6dmlzaXRTdHJvbmdIYW5kbGVzKFZpc2l0
b3ImIHZpc2l0b3IpCiB7CiAgICAgTm9kZSogZW5kID0gbV9zdHJvbmdMaXN0LmVuZCgpOwogICAg
IGZvciAoTm9kZSogbm9kZSA9IG1fc3Ryb25nTGlzdC5iZWdpbigpOyBub2RlICE9IGVuZDsgbm9k
ZSA9IG5vZGUtPm5leHQoKSkgewpAQCAtNjcsNiArNjgsOSBAQCB2b2lkIEhhbmRsZVNldDo6dmlz
aXRTdHJvbmdIYW5kbGVzKFNsb3RWCiAgICAgfQogfQogCit0ZW1wbGF0ZSB2b2lkIEhhbmRsZVNl
dDo6dmlzaXRTdHJvbmdIYW5kbGVzKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZv
aWQgSGFuZGxlU2V0Ojp2aXNpdFN0cm9uZ0hhbmRsZXMoU2xvdFZpc2l0b3ImKTsKKwogdm9pZCBI
YW5kbGVTZXQ6OndyaXRlQmFycmllcihIYW5kbGVTbG90IHNsb3QsIGNvbnN0IEpTVmFsdWUmIHZh
bHVlKQogewogICAgIGlmICghdmFsdWUgPT0gISpzbG90ICYmIHNsb3QtPmlzQ2VsbCgpID09IHZh
bHVlLmlzQ2VsbCgpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGFuZGxlU2V0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGFuZGxlU2V0LmgJ
KHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hhbmRsZVNl
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMS0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzUsMTAgKzM1LDEwIEBACiAKIG5hbWVzcGFjZSBKU0Mg
ewogCitjbGFzcyBBYnN0cmFjdFNsb3RWaXNpdG9yOwogY2xhc3MgSGFuZGxlU2V0OwogY2xhc3Mg
Vk07CiBjbGFzcyBKU1ZhbHVlOwotY2xhc3MgU2xvdFZpc2l0b3I7CiAKIGNsYXNzIEhhbmRsZU5v
ZGUgewogcHVibGljOgpAQCAtNzMsNyArNzMsNyBAQCBwdWJsaWM6CiAgICAgSGFuZGxlU2xvdCBh
bGxvY2F0ZSgpOwogICAgIHZvaWQgZGVhbGxvY2F0ZShIYW5kbGVTbG90KTsKIAotICAgIHZvaWQg
dmlzaXRTdHJvbmdIYW5kbGVzKFNsb3RWaXNpdG9yJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
VmlzaXRvcj4gdm9pZCB2aXNpdFN0cm9uZ0hhbmRsZXMoVmlzaXRvciYpOwogCiAgICAgSlNfRVhQ
T1JUX1BSSVZBVEUgdm9pZCB3cml0ZUJhcnJpZXIoSGFuZGxlU2xvdCwgY29uc3QgSlNWYWx1ZSYp
OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAkocmV2aXNpb24gMjcyOTAy
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTcyLDYgKzcyLDcgQEAKICNpbmNsdWRlICJUeXBlUHJvZmlsZXIuaCIKICNpbmNsdWRlICJU
eXBlUHJvZmlsZXJMb2cuaCIKICNpbmNsdWRlICJWTS5oIgorI2luY2x1ZGUgIlZlcmlmaWVyU2xv
dFZpc2l0b3JJbmxpbmVzLmgiCiAjaW5jbHVkZSAiV2Vha01hcEltcGxJbmxpbmVzLmgiCiAjaW5j
bHVkZSAiV2Vha1NldElubGluZXMuaCIKICNpbmNsdWRlIDxhbGdvcml0aG0+CkBAIC02NDMsMTkg
KzY0NCwxOSBAQCB2b2lkIEhlYXA6OmNvbXBsZXRlQWxsSklUUGxhbnMoKQogICAgIERGRzo6Y29t
cGxldGVBbGxQbGFuc0ZvclZNKG1fdm0pOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgot
dm9pZCBIZWFwOjppdGVyYXRlRXhlY3V0aW5nQW5kQ29tcGlsaW5nQ29kZUJsb2Nrcyhjb25zdCBG
dW5jJiBmdW5jKQordGVtcGxhdGU8dHlwZW5hbWUgRnVuYywgdHlwZW5hbWUgVmlzaXRvcj4KK3Zv
aWQgSGVhcDo6aXRlcmF0ZUV4ZWN1dGluZ0FuZENvbXBpbGluZ0NvZGVCbG9ja3MoVmlzaXRvciYg
dmlzaXRvciwgY29uc3QgRnVuYyYgZnVuYykKIHsKICAgICBtX2NvZGVCbG9ja3MtPml0ZXJhdGVD
dXJyZW50bHlFeGVjdXRpbmcoZnVuYyk7CiAgICAgaWYgKE9wdGlvbnM6OnVzZUpJVCgpKQotICAg
ICAgICBERkc6Oml0ZXJhdGVDb2RlQmxvY2tzRm9yR0MobV92bSwgZnVuYyk7CisgICAgICAgIERG
Rzo6aXRlcmF0ZUNvZGVCbG9ja3NGb3JHQyh2aXNpdG9yLCBtX3ZtLCBmdW5jKTsKIH0KIAotdGVt
cGxhdGU8dHlwZW5hbWUgRnVuYz4KLXZvaWQgSGVhcDo6aXRlcmF0ZUV4ZWN1dGluZ0FuZENvbXBp
bGluZ0NvZGVCbG9ja3NXaXRob3V0SG9sZGluZ0xvY2tzKGNvbnN0IEZ1bmMmIGZ1bmMpCit0ZW1w
bGF0ZTx0eXBlbmFtZSBGdW5jLCB0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBIZWFwOjppdGVyYXRl
RXhlY3V0aW5nQW5kQ29tcGlsaW5nQ29kZUJsb2Nrc1dpdGhvdXRIb2xkaW5nTG9ja3MoVmlzaXRv
ciYgdmlzaXRvciwgY29uc3QgRnVuYyYgZnVuYykKIHsKICAgICBWZWN0b3I8Q29kZUJsb2NrKiwg
MjU2PiBjb2RlQmxvY2tzOwotICAgIGl0ZXJhdGVFeGVjdXRpbmdBbmRDb21waWxpbmdDb2RlQmxv
Y2tzKAorICAgIGl0ZXJhdGVFeGVjdXRpbmdBbmRDb21waWxpbmdDb2RlQmxvY2tzKHZpc2l0b3Is
CiAgICAgICAgIFsmXSAoQ29kZUJsb2NrKiBjb2RlQmxvY2spIHsKICAgICAgICAgICAgIGNvZGVC
bG9ja3MuYXBwZW5kKGNvZGVCbG9jayk7CiAgICAgICAgIH0pOwpAQCAtNzMzLDE0ICs3MzQsNiBA
QCB2b2lkIEhlYXA6OnJlbW92ZURlYWRDb21waWxlcldvcmtsaXN0RW50CiAjZW5kaWYKIH0KIAot
Ym9vbCBIZWFwOjppc0FuYWx5emluZ0hlYXAoKSBjb25zdAotewotICAgIEhlYXBQcm9maWxlciog
aGVhcFByb2ZpbGVyID0gbV92bS5oZWFwUHJvZmlsZXIoKTsKLSAgICBpZiAoVU5MSUtFTFkoaGVh
cFByb2ZpbGVyKSkKLSAgICAgICAgcmV0dXJuIGhlYXBQcm9maWxlci0+YWN0aXZlSGVhcEFuYWx5
emVyKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCiBzdHJ1Y3QgR2F0aGVyRXh0cmFIZWFwRGF0
YSA6IE1hcmtlZEJsb2NrOjpDb3VudEZ1bmN0b3IgewogICAgIEdhdGhlckV4dHJhSGVhcERhdGEo
Vk0mIHZtLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQogICAgICAgICA6IG1fdm0odm0pCkBAIC0x
NDg1LDE0ICsxNDc4LDIxIEBAIE5FVkVSX0lOTElORSBib29sIEhlYXA6OnJ1bkVuZFBoYXNlKEdD
Q28KICAgICB9CiAgICAgbV9oZWxwZXJDbGllbnQuZmluaXNoKCk7CiAgICAgCi0gICAgaXRlcmF0
ZUV4ZWN1dGluZ0FuZENvbXBpbGluZ0NvZGVCbG9ja3MoCisgICAgQVNTRVJUKG1fbXV0YXRvck1h
cmtTdGFjay0+aXNFbXB0eSgpKTsKKyAgICBBU1NFUlQobV9yYWNlTWFya1N0YWNrLT5pc0VtcHR5
KCkpOworCisgICAgU2xvdFZpc2l0b3ImIHZpc2l0b3IgPSAqbV9jb2xsZWN0b3JTbG90VmlzaXRv
cjsKKyAgICBpdGVyYXRlRXhlY3V0aW5nQW5kQ29tcGlsaW5nQ29kZUJsb2Nrcyh2aXNpdG9yLAog
ICAgICAgICBbJl0gKENvZGVCbG9jayogY29kZUJsb2NrKSB7CiAgICAgICAgICAgICB3cml0ZUJh
cnJpZXIoY29kZUJsb2NrKTsKICAgICAgICAgfSk7Ci0gICAgICAgIAorCiAgICAgdXBkYXRlT2Jq
ZWN0Q291bnRzKCk7CiAgICAgZW5kTWFya2luZygpOwogCisgICAgaWYgKFVOTElLRUxZKE9wdGlv
bnM6OnZlcmlmeUdDKCkpKQorICAgICAgICB2ZXJpZnlHQygpOworCiAgICAgaWYgKFVOTElLRUxZ
KG1fdmVyaWZpZXIpKSB7CiAgICAgICAgIG1fdmVyaWZpZXItPmdhdGhlckxpdmVDZWxscyhIZWFw
VmVyaWZpZXI6OlBoYXNlOjpBZnRlck1hcmtpbmcpOwogICAgICAgICBtX3ZlcmlmaWVyLT52ZXJp
ZnkoSGVhcFZlcmlmaWVyOjpQaGFzZTo6QWZ0ZXJNYXJraW5nKTsKQEAgLTIxNzAsNiArMjE3MCwx
MiBAQCB2b2lkIEhlYXA6OnN1c3BlbmRDb21waWxlclRocmVhZHMoKQogCiB2b2lkIEhlYXA6Ondp
bGxTdGFydENvbGxlY3Rpb24oKQogeworICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjp2ZXJpZnlH
QygpKSkgeworICAgICAgICBtX3ZlcmlmaWVyU2xvdFZpc2l0b3IgPSBtYWtlVW5pcXVlPFZlcmlm
aWVyU2xvdFZpc2l0b3I+KCp0aGlzKTsKKyAgICAgICAgQVNTRVJUKCFtX2lzTWFya2luZ0ZvckdD
VmVyaWZpZXIpOworLy8gICAgICAgIFJFTEVBU0VfQVNTRVJUKCFtX2lzTWFya2luZ0ZvckdDVmVy
aWZpZXIpOyAvLyBtbGFtIFRFU1Qgb25seQorICAgIH0KKwogICAgIGRhdGFMb2dJZihPcHRpb25z
Ojpsb2dHQygpLCAiPT4gIik7CiAgICAgCiAgICAgaWYgKHNob3VsZERvRnVsbENvbGxlY3Rpb24o
KSkgewpAQCAtMjcwMSw5ICsyNzA3LDE0IEBAIHZvaWQgSGVhcDo6YWRkQ29yZUNvbnN0cmFpbnRz
KCkKIHsKICAgICBtX2NvbnN0cmFpbnRTZXQtPmFkZCgKICAgICAgICAgIkNzIiwgIkNvbnNlcnZh
dGl2ZSBTY2FuIiwKLSAgICAgICAgW3RoaXMsIGxhc3RWZXJzaW9uID0gc3RhdGljX2Nhc3Q8dWlu
dDY0X3Q+KDApXSAoU2xvdFZpc2l0b3ImIHZpc2l0b3IpIG11dGFibGUgeworICAgICAgICBNQUtF
X01BUktJTkdfQ09OU1RSQUlOVF9FWEVDVVRPUl9QQUlSKChbdGhpcywgbGFzdFZlcnNpb24gPSBz
dGF0aWNfY2FzdDx1aW50NjRfdD4oMCldIChhdXRvJiB2aXNpdG9yKSBtdXRhYmxlIHsKICAgICAg
ICAgICAgIGJvb2wgc2hvdWxkTm90UHJvZHVjZVdvcmsgPSBsYXN0VmVyc2lvbiA9PSBtX3BoYXNl
VmVyc2lvbjsKLSAgICAgICAgICAgIGlmIChzaG91bGROb3RQcm9kdWNlV29yaykKKworICAgICAg
ICAgICAgLy8gRm9yIHRoZSBHQyBWZXJmaWVyLCB3ZSB3b3VsZCBsaWtlIHRvIHVzZSB0aGUgaWRl
bnRpY2FsIHNldCBvZiBjb25zZXJ2YXRpdmUgcm9vdHMKKyAgICAgICAgICAgIC8vIGFzIHRoZSBy
ZWFsIEdDLiBPdGhlcndpc2UsIHRoZSBHQyB2ZXJpZmllciBtYXkgcmVwb3J0IGZhbHNlIG5lZ2F0
aXZlcyBkdWUgdG8KKyAgICAgICAgICAgIC8vIHZhcmlhdGlvbnMgaW4gc3RhY2sgdmFsdWVzLiBG
b3IgdGhpcyBzYW1lIHJlYXNvbiwgd2Ugd2lsbCBza2lwIHRoaXMgY29uc3RyYWludAorICAgICAg
ICAgICAgLy8gd2hlbiB3ZSdyZSBydW5uaW5nIHRoZSBHQyB2ZXJpZmljYXRpb24gaW4gdGhlIEVu
ZCBwaGFzZS4KKyAgICAgICAgICAgIGlmIChzaG91bGROb3RQcm9kdWNlV29yayB8fCBtX2lzTWFy
a2luZ0ZvckdDVmVyaWZpZXIpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAg
CiAgICAgICAgICAgICBUaW1pbmdTY29wZSBwcmVDb252ZXJnZW5jZVRpbWluZ1Njb3BlKCp0aGlz
LCAiQ29uc3RyYWludDogY29uc2VydmF0aXZlIHNjYW4iKTsKQEAgLTI3MjAsMjEgKzI3MzEsMjYg
QEAgdm9pZCBIZWFwOjphZGRDb3JlQ29uc3RyYWludHMoKQogCiAgICAgICAgICAgICAgICAgU2V0
Um9vdE1hcmtSZWFzb25TY29wZSByb290U2NvcGUodmlzaXRvciwgUm9vdE1hcmtSZWFzb246OkNv
bnNlcnZhdGl2ZVNjYW4pOwogICAgICAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kKGNvbnNlcnZh
dGl2ZVJvb3RzKTsKKyAgICAgICAgICAgICAgICBpZiAoVU5MSUtFTFkobV92ZXJpZmllclNsb3RW
aXNpdG9yKSkKKyAgICAgICAgICAgICAgICAgICAgbV92ZXJpZmllclNsb3RWaXNpdG9yLT5hcHBl
bmQoY29uc2VydmF0aXZlUm9vdHMpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKE9w
dGlvbnM6OnVzZUpJVCgpKSB7CiAgICAgICAgICAgICAgICAgLy8gSklUU3R1YlJvdXRpbmVzIG11
c3QgYmUgdmlzaXRlZCBhZnRlciBzY2FubmluZyBDb25zZXJ2YXRpdmVSb290cyBzaW5jZSBKSVRT
dHViUm91dGluZXMgZGVwZW5kIG9uIHRoZSBob29rIGV4ZWN1dGVkIGR1cmluZyBnYXRoZXJpbmcg
Q29uc2VydmF0aXZlUm9vdHMuCiAgICAgICAgICAgICAgICAgU2V0Um9vdE1hcmtSZWFzb25TY29w
ZSByb290U2NvcGUodmlzaXRvciwgUm9vdE1hcmtSZWFzb246OkpJVFN0dWJSb3V0aW5lcyk7CiAg
ICAgICAgICAgICAgICAgbV9qaXRTdHViUm91dGluZXMtPnRyYWNlTWFya2VkU3R1YlJvdXRpbmVz
KHZpc2l0b3IpOworICAgICAgICAgICAgICAgIGlmIChVTkxJS0VMWShtX3ZlcmlmaWVyU2xvdFZp
c2l0b3IpKSB7CisgICAgICAgICAgICAgICAgICAgIEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0
b3IgPSAqbV92ZXJpZmllclNsb3RWaXNpdG9yOworICAgICAgICAgICAgICAgICAgICBtX2ppdFN0
dWJSb3V0aW5lcy0+dHJhY2VNYXJrZWRTdHViUm91dGluZXModmlzaXRvcik7CisgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgICAgICBsYXN0VmVy
c2lvbiA9IG1fcGhhc2VWZXJzaW9uOwotICAgICAgICB9LAorICAgICAgICB9KSksCiAgICAgICAg
IENvbnN0cmFpbnRWb2xhdGlsaXR5OjpHcmV5ZWRCeUV4ZWN1dGlvbik7CiAgICAgCiAgICAgbV9j
b25zdHJhaW50U2V0LT5hZGQoCiAgICAgICAgICJNc3IiLCAiTWlzYyBTbWFsbCBSb290cyIsCi0g
ICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsKLQorICAgICAgICBNQUtFX01B
UktJTkdfQ09OU1RSQUlOVF9FWEVDVVRPUl9QQUlSKChbdGhpc10gKGF1dG8mIHZpc2l0b3IpIHsK
ICNpZiBKU0NfT0JKQ19BUElfRU5BQkxFRAogICAgICAgICAgICAgc2NhbkV4dGVybmFsUmVtZW1i
ZXJlZFNldChtX3ZtLCB2aXNpdG9yKTsKICNlbmRpZgpAQCAtMjc2MywyMCArMjc3OSwyMCBAQCB2
b2lkIEhlYXA6OmFkZENvcmVDb25zdHJhaW50cygpCiAgICAgICAgICAgICAgICAgdmlzaXRvci5h
cHBlbmRVbmJhcnJpZXJlZChtX3ZtLmV4Y2VwdGlvbigpKTsKICAgICAgICAgICAgICAgICB2aXNp
dG9yLmFwcGVuZFVuYmFycmllcmVkKG1fdm0ubGFzdEV4Y2VwdGlvbigpKTsKICAgICAgICAgICAg
IH0KLSAgICAgICAgfSwKKyAgICAgICAgfSkpLAogICAgICAgICBDb25zdHJhaW50Vm9sYXRpbGl0
eTo6R3JleWVkQnlFeGVjdXRpb24pOwogICAgIAogICAgIG1fY29uc3RyYWludFNldC0+YWRkKAog
ICAgICAgICAiU2giLCAiU3Ryb25nIEhhbmRsZXMiLAotICAgICAgICBbdGhpc10gKFNsb3RWaXNp
dG9yJiB2aXNpdG9yKSB7CisgICAgICAgIE1BS0VfTUFSS0lOR19DT05TVFJBSU5UX0VYRUNVVE9S
X1BBSVIoKFt0aGlzXSAoYXV0byYgdmlzaXRvcikgewogICAgICAgICAgICAgU2V0Um9vdE1hcmtS
ZWFzb25TY29wZSByb290U2NvcGUodmlzaXRvciwgUm9vdE1hcmtSZWFzb246OlN0cm9uZ0hhbmRs
ZXMpOwogICAgICAgICAgICAgbV9oYW5kbGVTZXQudmlzaXRTdHJvbmdIYW5kbGVzKHZpc2l0b3Ip
OwotICAgICAgICB9LAorICAgICAgICB9KSksCiAgICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5
OjpHcmV5ZWRCeUV4ZWN1dGlvbik7CiAgICAgCiAgICAgbV9jb25zdHJhaW50U2V0LT5hZGQoCiAg
ICAgICAgICJEIiwgIkRlYnVnZ2VyIiwKLSAgICAgICAgW3RoaXNdIChTbG90VmlzaXRvciYgdmlz
aXRvcikgeworICAgICAgICBNQUtFX01BUktJTkdfQ09OU1RSQUlOVF9FWEVDVVRPUl9QQUlSKChb
dGhpc10gKGF1dG8mIHZpc2l0b3IpIHsKICAgICAgICAgICAgIFNldFJvb3RNYXJrUmVhc29uU2Nv
cGUgcm9vdFNjb3BlKHZpc2l0b3IsIFJvb3RNYXJrUmVhc29uOjpEZWJ1Z2dlcik7CiAKICNpZiBF
TkFCTEUoU0FNUExJTkdfUFJPRklMRVIpCkBAIC0yNzk0LDIzICsyODEwLDI0IEBAIHZvaWQgSGVh
cDo6YWRkQ29yZUNvbnN0cmFpbnRzKCkKICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKGF1
dG8qIHNoYWRvd0NoaWNrZW4gPSBtX3ZtLnNoYWRvd0NoaWNrZW4oKSkKICAgICAgICAgICAgICAg
ICBzaGFkb3dDaGlja2VuLT52aXNpdENoaWxkcmVuKHZpc2l0b3IpOwotICAgICAgICB9LAorICAg
ICAgICB9KSksCiAgICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5OjpHcmV5ZWRCeUV4ZWN1dGlv
bik7CiAgICAgCiAgICAgbV9jb25zdHJhaW50U2V0LT5hZGQoCiAgICAgICAgICJXcyIsICJXZWFr
IFNldHMiLAotICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiB2aXNpdG9yKSB7CisgICAgICAg
IE1BS0VfTUFSS0lOR19DT05TVFJBSU5UX0VYRUNVVE9SX1BBSVIoKFt0aGlzXSAoYXV0byYgdmlz
aXRvcikgewogICAgICAgICAgICAgU2V0Um9vdE1hcmtSZWFzb25TY29wZSByb290U2NvcGUodmlz
aXRvciwgUm9vdE1hcmtSZWFzb246OldlYWtTZXRzKTsKICAgICAgICAgICAgIG1fb2JqZWN0U3Bh
Y2UudmlzaXRXZWFrU2V0cyh2aXNpdG9yKTsKLSAgICAgICAgfSwKKyAgICAgICAgfSkpLAogICAg
ICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eTo6R3JleWVkQnlNYXJraW5nKTsKICAgICAKICAgICBt
X2NvbnN0cmFpbnRTZXQtPmFkZCgKICAgICAgICAgIk8iLCAiT3V0cHV0IiwKLSAgICAgICAgW10g
KFNsb3RWaXNpdG9yJiB2aXNpdG9yKSB7CisgICAgICAgIE1BS0VfTUFSS0lOR19DT05TVFJBSU5U
X0VYRUNVVE9SX1BBSVIoKFtdIChhdXRvJiB2aXNpdG9yKSB7CisgICAgICAgICAgICB1c2luZyBW
aXNpdG9yID0gdHlwZW9mKHZpc2l0b3IpOwogICAgICAgICAgICAgVk0mIHZtID0gdmlzaXRvci52
bSgpOwogCi0gICAgICAgICAgICBhdXRvIGNhbGxPdXRwdXRDb25zdHJhaW50ID0gW10gKFNsb3RW
aXNpdG9yJiB2aXNpdG9yLCBIZWFwQ2VsbCogaGVhcENlbGwsIEhlYXBDZWxsOjpLaW5kKSB7Cisg
ICAgICAgICAgICBhdXRvIGNhbGxPdXRwdXRDb25zdHJhaW50ID0gW10gKFZpc2l0b3ImIHZpc2l0
b3IsIEhlYXBDZWxsKiBoZWFwQ2VsbCwgSGVhcENlbGw6OktpbmQpIHsKICAgICAgICAgICAgICAg
ICBTZXRSb290TWFya1JlYXNvblNjb3BlIHJvb3RTY29wZSh2aXNpdG9yLCBSb290TWFya1JlYXNv
bjo6T3V0cHV0KTsKICAgICAgICAgICAgICAgICBWTSYgdm0gPSB2aXNpdG9yLnZtKCk7CiAgICAg
ICAgICAgICAgICAgSlNDZWxsKiBjZWxsID0gc3RhdGljX2Nhc3Q8SlNDZWxsKj4oaGVhcENlbGwp
OwpAQCAtMjgxOCwxMyArMjgzNSwxNCBAQCB2b2lkIEhlYXA6OmFkZENvcmVDb25zdHJhaW50cygp
CiAgICAgICAgICAgICB9OwogICAgICAgICAgICAgCiAgICAgICAgICAgICBhdXRvIGFkZCA9IFsm
XSAoYXV0byYgc2V0KSB7Ci0gICAgICAgICAgICAgICAgdmlzaXRvci5hZGRQYXJhbGxlbENvbnN0
cmFpbnRUYXNrKHNldC5mb3JFYWNoTWFya2VkQ2VsbEluUGFyYWxsZWwoY2FsbE91dHB1dENvbnN0
cmFpbnQpKTsKKyAgICAgICAgICAgICAgICBSZWZQdHI8U2hhcmVkVGFzazx2b2lkKFZpc2l0b3Im
KT4+IHRhc2sgPSBzZXQudGVtcGxhdGUgZm9yRWFjaE1hcmtlZENlbGxJblBhcmFsbGVsPFZpc2l0
b3I+KGNhbGxPdXRwdXRDb25zdHJhaW50KTsKKyAgICAgICAgICAgICAgICB2aXNpdG9yLmFkZFBh
cmFsbGVsQ29uc3RyYWludFRhc2sodGFzayk7CiAgICAgICAgICAgICB9OwogICAgICAgICAgICAg
CiAgICAgICAgICAgICBhZGQodm0uZXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZXNXaXRoQ29uc3Ry
YWludHMpOwogICAgICAgICAgICAgaWYgKHZtLm1fd2Vha01hcFNwYWNlKQogICAgICAgICAgICAg
ICAgIGFkZCgqdm0ubV93ZWFrTWFwU3BhY2UpOwotICAgICAgICB9LAorICAgICAgICB9KSksCiAg
ICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5OjpHcmV5ZWRCeU1hcmtpbmcsCiAgICAgICAgIENv
bnN0cmFpbnRQYXJhbGxlbGlzbTo6UGFyYWxsZWwpOwogICAgIApAQCAtMjgzMiw3ICsyODUwLDcg
QEAgdm9pZCBIZWFwOjphZGRDb3JlQ29uc3RyYWludHMoKQogICAgIGlmIChPcHRpb25zOjp1c2VK
SVQoKSkgewogICAgICAgICBtX2NvbnN0cmFpbnRTZXQtPmFkZCgKICAgICAgICAgICAgICJEdyIs
ICJERkcgV29ya2xpc3RzIiwKLSAgICAgICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHZpc2l0
b3IpIHsKKyAgICAgICAgICAgIE1BS0VfTUFSS0lOR19DT05TVFJBSU5UX0VYRUNVVE9SX1BBSVIo
KFt0aGlzXSAoYXV0byYgdmlzaXRvcikgewogICAgICAgICAgICAgICAgIFNldFJvb3RNYXJrUmVh
c29uU2NvcGUgcm9vdFNjb3BlKHZpc2l0b3IsIFJvb3RNYXJrUmVhc29uOjpERkdXb3JrTGlzdHMp
OwogCiAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gREZHOjpudW1iZXJPZldvcmts
aXN0cygpOyBpLS07KQpAQCAtMjg0MCw3ICsyODU4LDcgQEAgdm9pZCBIZWFwOjphZGRDb3JlQ29u
c3RyYWludHMoKQogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBU
aGlzIGlzIGFsbW9zdCBjZXJ0YWlubHkgdW5uZWNlc3NhcnkuCiAgICAgICAgICAgICAgICAgLy8g
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NjgyOQotICAgICAgICAg
ICAgICAgIERGRzo6aXRlcmF0ZUNvZGVCbG9ja3NGb3JHQygKKyAgICAgICAgICAgICAgICBERkc6
Oml0ZXJhdGVDb2RlQmxvY2tzRm9yR0ModmlzaXRvciwKICAgICAgICAgICAgICAgICAgICAgbV92
bSwKICAgICAgICAgICAgICAgICAgICAgWyZdIChDb2RlQmxvY2sqIGNvZGVCbG9jaykgewogICAg
ICAgICAgICAgICAgICAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZChjb2RlQmxvY2sp
OwpAQCAtMjg0OCwyMyArMjg2NiwyMyBAQCB2b2lkIEhlYXA6OmFkZENvcmVDb25zdHJhaW50cygp
CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkg
PT0gR0NMb2dnaW5nOjpWZXJib3NlKQogICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJERkcg
V29ya2xpc3RzOlxuIiwgdmlzaXRvcik7Ci0gICAgICAgICAgICB9LAorICAgICAgICAgICAgfSkp
LAogICAgICAgICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHk6OkdyZXllZEJ5TWFya2luZyk7CiAg
ICAgfQogI2VuZGlmCiAgICAgCiAgICAgbV9jb25zdHJhaW50U2V0LT5hZGQoCiAgICAgICAgICJD
YiIsICJDb2RlQmxvY2tzIiwKLSAgICAgICAgW3RoaXNdIChTbG90VmlzaXRvciYgdmlzaXRvcikg
eworICAgICAgICBNQUtFX01BUktJTkdfQ09OU1RSQUlOVF9FWEVDVVRPUl9QQUlSKChbdGhpc10g
KGF1dG8mIHZpc2l0b3IpIHsKICAgICAgICAgICAgIFNldFJvb3RNYXJrUmVhc29uU2NvcGUgcm9v
dFNjb3BlKHZpc2l0b3IsIFJvb3RNYXJrUmVhc29uOjpDb2RlQmxvY2tzKTsKLSAgICAgICAgICAg
IGl0ZXJhdGVFeGVjdXRpbmdBbmRDb21waWxpbmdDb2RlQmxvY2tzV2l0aG91dEhvbGRpbmdMb2Nr
cygKKyAgICAgICAgICAgIGl0ZXJhdGVFeGVjdXRpbmdBbmRDb21waWxpbmdDb2RlQmxvY2tzV2l0
aG91dEhvbGRpbmdMb2Nrcyh2aXNpdG9yLAogICAgICAgICAgICAgICAgIFsmXSAoQ29kZUJsb2Nr
KiBjb2RlQmxvY2spIHsKICAgICAgICAgICAgICAgICAgICAgLy8gVmlzaXQgdGhlIENvZGVCbG9j
ayBhcyBhIGNvbnN0cmFpbnQgb25seSBpZiBpdCdzIGJsYWNrLgotICAgICAgICAgICAgICAgICAg
ICBpZiAoaXNNYXJrZWQoY29kZUJsb2NrKQorICAgICAgICAgICAgICAgICAgICBpZiAodmlzaXRv
ci5pc01hcmtlZChjb2RlQmxvY2spCiAgICAgICAgICAgICAgICAgICAgICAgICAmJiBjb2RlQmxv
Y2stPmNlbGxTdGF0ZSgpID09IENlbGxTdGF0ZTo6UG9zc2libHlCbGFjaykKICAgICAgICAgICAg
ICAgICAgICAgICAgIHZpc2l0b3IudmlzaXRBc0NvbnN0cmFpbnQoY29kZUJsb2NrKTsKICAgICAg
ICAgICAgICAgICB9KTsKLSAgICAgICAgfSwKKyAgICAgICAgfSkpLAogICAgICAgICBDb25zdHJh
aW50Vm9sYXRpbGl0eTo6U2VsZG9tR3JleWVkKTsKICAgICAKICAgICBtX2NvbnN0cmFpbnRTZXQt
PmFkZChtYWtlVW5pcXVlPE1hcmtTdGFja01lcmdpbmdDb25zdHJhaW50PigqdGhpcykpOwpAQCAt
MzAyMyw0ICszMDQxLDMzIEBAIHZvaWQgSGVhcDo6cnVuVGFza0luUGFyYWxsZWwoUmVmUHRyPFNo
YXIKICAgICB9CiB9CiAKK3ZvaWQgSGVhcDo6dmVyaWZ5R0MoKQoreworICAgIFJFTEVBU0VfQVNT
RVJUKG1fdmVyaWZpZXJTbG90VmlzaXRvcik7CisgICAgUkVMRUFTRV9BU1NFUlQoIW1faXNNYXJr
aW5nRm9yR0NWZXJpZmllcik7CisgICAgbV9pc01hcmtpbmdGb3JHQ1ZlcmlmaWVyID0gdHJ1ZTsK
KworICAgIFZlcmlmaWVyU2xvdFZpc2l0b3ImIHZpc2l0b3IgPSAqbV92ZXJpZmllclNsb3RWaXNp
dG9yOworCisgICAgZG8geworICAgICAgICB2aXNpdG9yLmRyYWluKCk7CisgICAgICAgIG1fY29u
c3RyYWludFNldC0+ZXhlY3V0ZUFsbFN5bmNocm9ub3VzbHkodmlzaXRvcik7CisgICAgICAgIHZp
c2l0b3IuZXhlY3V0ZUNvbnN0cmFpbnRUYXNrcygpOworICAgIH0gd2hpbGUgKCF2aXNpdG9yLmlz
RW1wdHkoKSk7CisKKyAgICBtX2lzTWFya2luZ0ZvckdDVmVyaWZpZXIgPSBmYWxzZTsKKworICAg
IHZpc2l0b3IuZm9yRWFjaExpdmVDZWxsKFsmXSAoSGVhcENlbGwqIGNlbGwpIHsKKyAgICAgICAg
aWYgKEhlYXA6OmlzTWFya2VkKGNlbGwpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAg
IGRhdGFMb2dMbigiXG4iICJHQyBWZXJpZmllcjogRVJST1IgY2VsbCAiLCBSYXdQb2ludGVyKGNl
bGwpLCAiIHdhcyBub3QgbWFya2VkIik7CisgICAgICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjp2
ZXJib3NlVmVyaWZ5R0MoKSkpCisgICAgICAgICAgICB2aXNpdG9yLmR1bXBNYXJrZXJEYXRhKGNl
bGwpOworICAgICAgICBSRUxFQVNFX0FTU0VSVCh0aGlzLT5pc01hcmtlZChjZWxsKSk7CisgICAg
fSk7CisKKyAgICBtX3ZlcmlmaWVyU2xvdFZpc2l0b3IgPSBudWxscHRyOworfQorCiB9IC8vIG5h
bWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgJKHJldmlzaW9uIDI3
MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDAgSGFycmkg
UG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKICAqICBDb3B5cmlnaHQgKEMpIDIwMDEgUGV0ZXIgS2Vs
bHkgKHBta0Bwb3N0LmNvbSkKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAyMCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMjEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwpAQCAtODYsNiAr
ODYsNyBAQCBjbGFzcyBTcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyOwogY2xhc3MgU3RvcElmTmVj
ZXNzYXJ5VGltZXI7CiBjbGFzcyBTd2VlcGluZ1Njb3BlOwogY2xhc3MgVk07CitjbGFzcyBWZXJp
ZmllclNsb3RWaXNpdG9yOwogY2xhc3MgV2Vha0dDTWFwQmFzZTsKIHN0cnVjdCBDdXJyZW50VGhy
ZWFkU3RhdGU7CiAKQEAgLTE4NCw4ICsxODUsNiBAQCBwdWJsaWM6CiAgICAgCiAgICAgYm9vbCBp
c1NodXR0aW5nRG93bigpIGNvbnN0IHsgcmV0dXJuIG1faXNTaHV0dGluZ0Rvd247IH0KIAotICAg
IEpTX0VYUE9SVF9QUklWQVRFIGJvb2wgaXNBbmFseXppbmdIZWFwKCkgY29uc3Q7Ci0KICAgICBK
U19FWFBPUlRfUFJJVkFURSB2b2lkIHN3ZWVwU3luY2hyb25vdXNseSgpOwogCiAgICAgYm9vbCBz
aG91bGRDb2xsZWN0SGV1cmlzdGljKCk7CkBAIC0zODUsOCArMzg0LDYgQEAgcHVibGljOgogICAg
IAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgYWRkTWFya2luZ0NvbnN0cmFpbnQoc3RkOjp1
bmlxdWVfcHRyPE1hcmtpbmdDb25zdHJhaW50Pik7CiAgICAgCi0gICAgc2l6ZV90IG51bU9wYXF1
ZVJvb3RzKCkgY29uc3QgeyByZXR1cm4gbV9vcGFxdWVSb290cy5zaXplKCk7IH0KLQogICAgIEhl
YXBWZXJpZmllciogdmVyaWZpZXIoKSBjb25zdCB7IHJldHVybiBtX3ZlcmlmaWVyLmdldCgpOyB9
CiAgICAgCiAgICAgdm9pZCBhZGRIZWFwRmluYWxpemVyQ2FsbGJhY2soY29uc3QgSGVhcEZpbmFs
aXplckNhbGxiYWNrJik7CkBAIC00MDcsNiArNDA0LDggQEAgcHVibGljOgogCiAgICAgSGFzaE1h
cDxKU0ltbXV0YWJsZUJ1dHRlcmZseSosIEpTU3RyaW5nKj4gaW1tdXRhYmxlQnV0dGVyZmx5VG9T
dHJpbmdDYWNoZTsKIAorICAgIGJvb2wgaXNNYXJraW5nRm9yR0NWZXJpZmllcigpIGNvbnN0IHsg
cmV0dXJuIG1faXNNYXJraW5nRm9yR0NWZXJpZmllcjsgfQorCiBwcml2YXRlOgogICAgIGZyaWVu
ZCBjbGFzcyBBbGxvY2F0aW5nU2NvcGU7CiAgICAgZnJpZW5kIGNsYXNzIENvZGVCbG9jazsKQEAg
LTU3NSwxMSArNTc0LDExIEBAIHByaXZhdGU6CiAKICAgICBib29sIG92ZXJDcml0aWNhbE1lbW9y
eVRocmVzaG9sZChNZW1vcnlUaHJlc2hvbGRDYWxsVHlwZSBtZW1vcnlUaHJlc2hvbGRDYWxsVHlw
ZSA9IE1lbW9yeVRocmVzaG9sZENhbGxUeXBlOjpDYWNoZWQpOwogICAgIAotICAgIHRlbXBsYXRl
PHR5cGVuYW1lIEZ1bmM+Ci0gICAgdm9pZCBpdGVyYXRlRXhlY3V0aW5nQW5kQ29tcGlsaW5nQ29k
ZUJsb2Nrcyhjb25zdCBGdW5jJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYywgdHlwZW5h
bWUgVmlzaXRvcj4KKyAgICB2b2lkIGl0ZXJhdGVFeGVjdXRpbmdBbmRDb21waWxpbmdDb2RlQmxv
Y2tzKFZpc2l0b3ImLCBjb25zdCBGdW5jJik7CiAgICAgCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUg
RnVuYz4KLSAgICB2b2lkIGl0ZXJhdGVFeGVjdXRpbmdBbmRDb21waWxpbmdDb2RlQmxvY2tzV2l0
aG91dEhvbGRpbmdMb2Nrcyhjb25zdCBGdW5jJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVu
YywgdHlwZW5hbWUgVmlzaXRvcj4KKyAgICB2b2lkIGl0ZXJhdGVFeGVjdXRpbmdBbmRDb21waWxp
bmdDb2RlQmxvY2tzV2l0aG91dEhvbGRpbmdMb2NrcyhWaXNpdG9yJiwgY29uc3QgRnVuYyYpOwog
ICAgIAogICAgIHZvaWQgYXNzZXJ0TWFya1N0YWNrc0VtcHR5KCk7CiAKQEAgLTU5MCw2ICs1ODks
OCBAQCBwcml2YXRlOgogICAgIHN0YXRpYyBib29sIHVzZUdlbmVyYXRpb25hbEdDKCk7CiAgICAg
c3RhdGljIGJvb2wgc2hvdWxkU3dlZXBTeW5jaHJvbm91c2x5KCk7CiAgICAgCisgICAgdm9pZCB2
ZXJpZnlHQygpOworCiAgICAgY29uc3QgSGVhcFR5cGUgbV9oZWFwVHlwZTsKICAgICBNdXRhdG9y
U3RhdGUgbV9tdXRhdG9yU3RhdGUgeyBNdXRhdG9yU3RhdGU6OlJ1bm5pbmcgfTsKICAgICBjb25z
dCBzaXplX3QgbV9yYW1TaXplOwpAQCAtNjM2LDYgKzYzNyw3IEBAIHByaXZhdGU6CiAgICAgc3Rk
Ojp1bmlxdWVfcHRyPE1hcmtTdGFja0FycmF5PiBtX211dGF0b3JNYXJrU3RhY2s7CiAgICAgc3Rk
Ojp1bmlxdWVfcHRyPE1hcmtTdGFja0FycmF5PiBtX3JhY2VNYXJrU3RhY2s7CiAgICAgc3RkOjp1
bmlxdWVfcHRyPE1hcmtpbmdDb25zdHJhaW50U2V0PiBtX2NvbnN0cmFpbnRTZXQ7CisgICAgc3Rk
Ojp1bmlxdWVfcHRyPFZlcmlmaWVyU2xvdFZpc2l0b3I+IG1fdmVyaWZpZXJTbG90VmlzaXRvcjsK
IAogICAgIC8vIFdlIHBvb2wgdGhlIHNsb3QgdmlzaXRvcnMgdXNlZCBieSBwYXJhbGxlbCBtYXJr
aW5nIHRocmVhZHMuIEl0J3MgdXNlZnVsIHRvIGJlIGFibGUgdG8KICAgICAvLyBlbnVtZXJhdGUg
b3ZlciB0aGVtLCBhbmQgaXQncyB1c2VmdWwgdG8gaGF2ZSB0aGVtIGNhY2hlIHNvbWUgc21hbGwg
YW1vdW50IG9mIG1lbW9yeSBmcm9tCkBAIC02NTQsNiArNjU2LDcgQEAgcHJpdmF0ZToKICAgICBi
b29sIG1faXNTYWZlVG9Db2xsZWN0IHsgZmFsc2UgfTsKICAgICBib29sIG1faXNTaHV0dGluZ0Rv
d24geyBmYWxzZSB9OwogICAgIGJvb2wgbV9tdXRhdG9yU2hvdWxkQmVGZW5jZWQgeyBPcHRpb25z
Ojpmb3JjZUZlbmNlZEJhcnJpZXIoKSB9OworICAgIGJvb2wgbV9pc01hcmtpbmdGb3JHQ1Zlcmlm
aWVyIHsgZmFsc2UgfTsKIAogICAgIHVuc2lnbmVkIG1fYmFycmllclRocmVzaG9sZCB7IE9wdGlv
bnM6OmZvcmNlRmVuY2VkQmFycmllcigpID8gdGF1dG9sb2dpY2FsVGhyZXNob2xkIDogYmxhY2tU
aHJlc2hvbGQgfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcElubGlu
ZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwSW5saW5l
cy5oCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFw
SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC02OSw2ICs2OSw4IEBAIGlubGluZSBib29sIEhl
YXA6OndvcmxkSXNTdG9wcGVkKCkgY29uc3QKIAogQUxXQVlTX0lOTElORSBib29sIEhlYXA6Omlz
TWFya2VkKGNvbnN0IHZvaWQqIHJhd0NlbGwpCiB7CisgICAgQVNTRVJUKCFtX2lzTWFya2luZ0Zv
ckdDVmVyaWZpZXIpOworLy8gICAgUkVMRUFTRV9BU1NFUlQoIW1faXNNYXJraW5nRm9yR0NWZXJp
Zmllcik7IC8vIG1sYW0gVEVTVCBvbmx5CiAgICAgSGVhcENlbGwqIGNlbGwgPSBiaXR3aXNlX2Nh
c3Q8SGVhcENlbGwqPihyYXdDZWxsKTsKICAgICBpZiAoY2VsbC0+aXNQcmVjaXNlQWxsb2NhdGlv
bigpKQogICAgICAgICByZXR1cm4gY2VsbC0+cHJlY2lzZUFsbG9jYXRpb24oKS5pc01hcmtlZCgp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcFByb2ZpbGVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwUHJvZmlsZXIuY3BwCShy
ZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwUHJvZmls
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTYwLDYgKzYwLDcgQEAgdm9pZCBIZWFwUHJvZmlsZXI6OnNl
dEFjdGl2ZUhlYXBBbmFseXplcgogewogICAgIEFTU0VSVCghIW1fYWN0aXZlQW5hbHl6ZXIgIT0g
ISFhbmFseXplcik7CiAgICAgbV9hY3RpdmVBbmFseXplciA9IGFuYWx5emVyOworICAgIG1fdm0u
c2V0QWN0aXZlSGVhcEFuYWx5emVyKGFuYWx5emVyKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlND
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Jc29DZWxsU2V0LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvQ2VsbFNldC5oCShyZXZpc2lvbiAy
NzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Jc29DZWxsU2V0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMzQsNiArMzQsNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAorY2xhc3MgQWJzdHJh
Y3RTbG90VmlzaXRvcjsKIGNsYXNzIEhlYXBDZWxsOwogY2xhc3MgSXNvU3Vic3BhY2U7CiAKQEAg
LTU4LDggKzU5LDggQEAgcHVibGljOgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CiAgICAg
dm9pZCBmb3JFYWNoTWFya2VkQ2VsbChjb25zdCBGdW5jJik7CiAKLSAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBGdW5jPgotICAgIFJlZjxTaGFyZWRUYXNrPHZvaWQoU2xvdFZpc2l0b3ImKT4+IGZvckVh
Y2hNYXJrZWRDZWxsSW5QYXJhbGxlbChjb25zdCBGdW5jJik7CisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgVmlzaXRvciwgdHlwZW5hbWUgRnVuYz4KKyAgICBSZWY8U2hhcmVkVGFzazx2b2lkKFZpc2l0
b3ImKT4+IGZvckVhY2hNYXJrZWRDZWxsSW5QYXJhbGxlbChjb25zdCBGdW5jJik7CiAgICAgCiAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KICAgICB2b2lkIGZvckVhY2hMaXZlQ2VsbChjb25z
dCBGdW5jJik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Jc29DZWxsU2V0SW5s
aW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0lzb0NlbGxT
ZXRJbmxpbmVzLmgJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0lzb0NlbGxTZXRJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtOTEsMTAgKzkxLDEwIEBAIHZv
aWQgSXNvQ2VsbFNldDo6Zm9yRWFjaE1hcmtlZENlbGwoY29uc3QKICAgICAgICAgfSk7CiB9CiAK
LXRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+Ci1SZWY8U2hhcmVkVGFzazx2b2lkKFNsb3RWaXNpdG9y
Jik+PiBJc29DZWxsU2V0Ojpmb3JFYWNoTWFya2VkQ2VsbEluUGFyYWxsZWwoY29uc3QgRnVuYyYg
ZnVuYykKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3IsIHR5cGVuYW1lIEZ1bmM+CitSZWY8U2hh
cmVkVGFzazx2b2lkKFZpc2l0b3ImKT4+IElzb0NlbGxTZXQ6OmZvckVhY2hNYXJrZWRDZWxsSW5Q
YXJhbGxlbChjb25zdCBGdW5jJiBmdW5jKQogewotICAgIGNsYXNzIFRhc2sgZmluYWwgOiBwdWJs
aWMgU2hhcmVkVGFzazx2b2lkKFNsb3RWaXNpdG9yJik+IHsKKyAgICBjbGFzcyBUYXNrIGZpbmFs
IDogcHVibGljIFNoYXJlZFRhc2s8dm9pZChWaXNpdG9yJik+IHsKICAgICBwdWJsaWM6CiAgICAg
ICAgIFRhc2soSXNvQ2VsbFNldCYgc2V0LCBjb25zdCBGdW5jJiBmdW5jKQogICAgICAgICAgICAg
OiBtX3NldChzZXQpCkBAIC0xMDMsNyArMTAzLDcgQEAgUmVmPFNoYXJlZFRhc2s8dm9pZChTbG90
VmlzaXRvciYpPj4gSXNvQwogICAgICAgICB7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAg
IHZvaWQgcnVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBmaW5hbAorICAgICAgICB2b2lkIHJ1bihW
aXNpdG9yJiB2aXNpdG9yKSBmaW5hbAogICAgICAgICB7CiAgICAgICAgICAgICB3aGlsZSAoTWFy
a2VkQmxvY2s6OkhhbmRsZSogaGFuZGxlID0gbV9ibG9ja1NvdXJjZS0+cnVuKCkpIHsKICAgICAg
ICAgICAgICAgICB1bnNpZ25lZCBibG9ja0luZGV4ID0gaGFuZGxlLT5pbmRleCgpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSklUU3R1YlJvdXRpbmVTZXQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0pJVFN0dWJSb3V0aW5lU2V0LmNwcAko
cmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSklUU3R1YlJv
dXRpbmVTZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTItMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEyOCw3ICsxMjgsOCBAQCB2b2lkIEpJVFN0dWJS
b3V0aW5lU2V0OjpkZWxldGVVbm1hcmtlZEplCiAgICAgbV9yb3V0aW5lcy5zaHJpbmsoZHN0SW5k
ZXgpOwogfQogCi12b2lkIEpJVFN0dWJSb3V0aW5lU2V0Ojp0cmFjZU1hcmtlZFN0dWJSb3V0aW5l
cyhTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lk
IEpJVFN0dWJSb3V0aW5lU2V0Ojp0cmFjZU1hcmtlZFN0dWJSb3V0aW5lcyhWaXNpdG9yJiB2aXNp
dG9yKQogewogICAgIGZvciAoYXV0byYgZW50cnkgOiBtX3JvdXRpbmVzKSB7CiAgICAgICAgIEdD
QXdhcmVKSVRTdHViUm91dGluZSogcm91dGluZSA9IGVudHJ5LnJvdXRpbmU7CkBAIC0xMzksNiAr
MTQwLDkgQEAgdm9pZCBKSVRTdHViUm91dGluZVNldDo6dHJhY2VNYXJrZWRTdHViUgogICAgIH0K
IH0KIAordGVtcGxhdGUgdm9pZCBKSVRTdHViUm91dGluZVNldDo6dHJhY2VNYXJrZWRTdHViUm91
dGluZXMoQWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKSVRTdHViUm91dGlu
ZVNldDo6dHJhY2VNYXJrZWRTdHViUm91dGluZXMoU2xvdFZpc2l0b3ImKTsKKwogfSAvLyBuYW1l
c3BhY2UgSlNDCiAKICNlbmRpZiAvLyBFTkFCTEUoSklUKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvSklUU3R1YlJvdXRpbmVTZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9KSVRTdHViUm91dGluZVNldC5oCShyZXZpc2lvbiAyNzI5MDIpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9KSVRTdHViUm91dGluZVNldC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE4IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMzUsOCArMzUsOCBAQCB1c2luZyBXVEY6OlJhbmdlOwogCiBuYW1lc3BhY2Ug
SlNDIHsKIAorY2xhc3MgQWJzdHJhY3RTbG90VmlzaXRvcjsKIGNsYXNzIEdDQXdhcmVKSVRTdHVi
Um91dGluZTsKLWNsYXNzIFNsb3RWaXNpdG9yOwogCiAjaWYgRU5BQkxFKEpJVCkKIApAQCAtNjMs
OCArNjMsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBwcmVwYXJlRm9yQ29uc2VydmF0aXZlU2Nhbigp
OwogICAgIAogICAgIHZvaWQgZGVsZXRlVW5tYXJrZWRKZXR0aXNvbmVkU3R1YlJvdXRpbmVzKCk7
Ci0gICAgCi0gICAgdm9pZCB0cmFjZU1hcmtlZFN0dWJSb3V0aW5lcyhTbG90VmlzaXRvciYpOwor
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCB0cmFjZU1hcmtlZFN0dWJSb3V0
aW5lcyhWaXNpdG9yJik7CiAgICAgCiBwcml2YXRlOgogICAgIHZvaWQgbWFya1Nsb3codWludHB0
cl90IGFkZHJlc3MpOwpAQCAtOTIsNyArOTIsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBtYXJrKHZv
aWQqKSB7IH0KICAgICB2b2lkIHByZXBhcmVGb3JDb25zZXJ2YXRpdmVTY2FuKCkgeyB9CiAgICAg
dm9pZCBkZWxldGVVbm1hcmtlZEpldHRpc29uZWRTdHViUm91dGluZXMoKSB7IH0KLSAgICB2b2lk
IHRyYWNlTWFya2VkU3R1YlJvdXRpbmVzKFNsb3RWaXNpdG9yJikgeyB9CisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCB0cmFjZU1hcmtlZFN0dWJSb3V0aW5lcyhWaXNpdG9yJikg
eyB9CiB9OwogCiAjZW5kaWYgLy8gIUVOQUJMRShKSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9NYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQuY3Bw
CShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3Rh
Y2tNZXJnaW5nQ29uc3RyYWludC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjUsNyArMjUsNiBAQAogCiAj
aW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQu
aCIKLQogI2luY2x1ZGUgIkdDU2VnbWVudGVkQXJyYXlJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlND
SW5saW5lcy5oIgogCkBAIC00Niw3ICs0NSw3IEBAIGRvdWJsZSBNYXJrU3RhY2tNZXJnaW5nQ29u
c3RyYWludDo6cXVpY2sKICAgICByZXR1cm4gbV9oZWFwLm1fbXV0YXRvck1hcmtTdGFjay0+c2l6
ZSgpICsgbV9oZWFwLm1fcmFjZU1hcmtTdGFjay0+c2l6ZSgpOwogfQogCi12b2lkIE1hcmtTdGFj
a01lcmdpbmdDb25zdHJhaW50OjpwcmVwYXJlVG9FeGVjdXRlSW1wbChjb25zdCBBYnN0cmFjdExv
Y2tlciYsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBNYXJrU3RhY2tNZXJnaW5nQ29uc3Ry
YWludDo6cHJlcGFyZVRvRXhlY3V0ZUltcGwoY29uc3QgQWJzdHJhY3RMb2NrZXImLCBBYnN0cmFj
dFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIC8vIExvZ2dpbmcgdGhlIHdvcmsgaGVyZSBl
bnN1cmVzIHRoYXQgdGhlIGNvbnN0cmFpbnQgc29sdmVyIGtub3dzIHRoYXQgaXQgZG9lc24ndCBu
ZWVkIHRvIHByb2R1Y2UKICAgICAvLyBhbnltb3JlIHdvcmsuCkBAIC01NiwxMSArNTUsMjQgQEAg
dm9pZCBNYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludDo6cHJlcGFyZQogICAgIGRhdGFMb2dJZihP
cHRpb25zOjpsb2dHQygpLCAiKCIsIHNpemUsICIpIik7CiB9CiAKLXZvaWQgTWFya1N0YWNrTWVy
Z2luZ0NvbnN0cmFpbnQ6OmV4ZWN1dGVJbXBsKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxh
dGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQ6OmV4
ZWN1dGVJbXBsSW1wbChWaXNpdG9yJiB2aXNpdG9yKQogeworICAgIC8vIFdlIHdhbnQgdG8gc2tp
cCB0aGlzIGNvbnN0cmFpbnQgZm9yIHRoZSBHQyB2ZXJpZmllciBiZWNhdXNlOgorICAgIC8vIDEu
IFRoZXJlIHNob3VsZCBiZSBubyBtdXRhdG9yIG1hcmtpbmcgYWN0aW9uIGJldHdlZW4gdGhlIEVu
ZCBwaGFzZSBhbmQgdmVyaWZ5R0MoKS4KKyAgICAvLyAgICBIZW5jZSwgd2UgY2FuIGlnbm9yZSB0
aHNlIHN0YWNrcy4KKyAgICAvLyAyLiBUaGUgRW5kIHBoYXNlIGV4cGxpY3RseSBjYWxscyBpdGVy
YXRlRXhlY3V0aW5nQW5kQ29tcGlsaW5nQ29kZUJsb2NrcygpCisgICAgLy8gICAgdG8gYWRkIGV4
ZWN1dGluZyBDb2RlQmxvY2tzIHRvIG1faGVhcC5tX211dGF0b3JNYXJrU3RhY2suIFdlIHdhbnQg
dG8KKyAgICAvLyAgICBsZWF2ZSB0aG9zZSB1bnBlcnR1cmJlZC4KKyAgICBpZiAobV9oZWFwLm1f
aXNNYXJraW5nRm9yR0NWZXJpZmllcikKKyAgICAgICAgcmV0dXJuOworCiAgICAgbV9oZWFwLm1f
bXV0YXRvck1hcmtTdGFjay0+dHJhbnNmZXJUbyh2aXNpdG9yLm11dGF0b3JNYXJrU3RhY2soKSk7
CiAgICAgbV9oZWFwLm1fcmFjZU1hcmtTdGFjay0+dHJhbnNmZXJUbyh2aXNpdG9yLm11dGF0b3JN
YXJrU3RhY2soKSk7CiB9CiAKK3ZvaWQgTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQ6OmV4ZWN1
dGVJbXBsKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsgZXhlY3V0ZUltcGxJbXBsKHZp
c2l0b3IpOyB9Cit2b2lkIE1hcmtTdGFja01lcmdpbmdDb25zdHJhaW50OjpleGVjdXRlSW1wbChT
bG90VmlzaXRvciYgdmlzaXRvcikgeyBleGVjdXRlSW1wbEltcGwodmlzaXRvcik7IH0KKwogfSAv
LyBuYW1lc3BhY2UgSlNDCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtT
dGFja01lcmdpbmdDb25zdHJhaW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQuaAkocmV2aXNpb24gMjcyOTAyKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQu
aAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogbmFtZXNwYWNlIEpTQyB7CiAKIGNs
YXNzIEhlYXA7CitjbGFzcyBBYnN0cmFjdFNsb3RWaXNpdG9yOwogY2xhc3MgU2xvdFZpc2l0b3I7
CiAKIGNsYXNzIE1hcmtTdGFja01lcmdpbmdDb25zdHJhaW50IGZpbmFsIDogcHVibGljIE1hcmtp
bmdDb25zdHJhaW50IHsKQEAgLTQwLDcgKzQxLDkgQEAgcHVibGljOgogICAgIGRvdWJsZSBxdWlj
a1dvcmtFc3RpbWF0ZShTbG90VmlzaXRvciYpIGZpbmFsOwogICAgIAogcHJpdmF0ZToKLSAgICB2
b2lkIHByZXBhcmVUb0V4ZWN1dGVJbXBsKGNvbnN0IEFic3RyYWN0TG9ja2VyJiBjb25zdHJhaW50
U29sdmluZ0xvY2tlciwgU2xvdFZpc2l0b3ImKSBmaW5hbDsKKyAgICB2b2lkIHByZXBhcmVUb0V4
ZWN1dGVJbXBsKGNvbnN0IEFic3RyYWN0TG9ja2VyJiBjb25zdHJhaW50U29sdmluZ0xvY2tlciwg
QWJzdHJhY3RTbG90VmlzaXRvciYpIGZpbmFsOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0
b3I+IEFMV0FZU19JTkxJTkUgdm9pZCBleGVjdXRlSW1wbEltcGwoVmlzaXRvciYpOworICAgIHZv
aWQgZXhlY3V0ZUltcGwoQWJzdHJhY3RTbG90VmlzaXRvciYpIGZpbmFsOwogICAgIHZvaWQgZXhl
Y3V0ZUltcGwoU2xvdFZpc2l0b3ImKSBmaW5hbDsKICAgICAKICAgICBIZWFwJiBtX2hlYXA7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmgJKHJldmlzaW9uIDI3
MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmgJKHdvcmtp
bmcgY29weSkKQEAgLTIwMCw2ICsyMDAsNyBAQCBwdWJsaWM6CiAgICAgICAgIAogICAgICAgICB2
b2lkKiBzdGFydCgpIGNvbnN0IHsgcmV0dXJuICZtX2Jsb2NrLT5hdG9tcygpWzBdOyB9CiAgICAg
ICAgIHZvaWQqIGVuZCgpIGNvbnN0IHsgcmV0dXJuICZtX2Jsb2NrLT5hdG9tcygpW21fZW5kQXRv
bV07IH0KKyAgICAgICAgdm9pZCogYXRvbUF0KHNpemVfdCBpKSBjb25zdCB7IHJldHVybiAmbV9i
bG9jay0+YXRvbXMoKVtpXTsgfQogICAgICAgICBib29sIGNvbnRhaW5zKHZvaWQqIHApIGNvbnN0
IHsgcmV0dXJuIHN0YXJ0KCkgPD0gcCAmJiBwIDwgZW5kKCk7IH0KIAogICAgICAgICB2b2lkIGR1
bXBTdGF0ZShQcmludFN0cmVhbSYpOwpAQCAtMjk1LDkgKzI5NiwxMCBAQCBwdWJsaWM6CiAKICAg
ICAgICAgQml0bWFwPGF0b21zUGVyQmxvY2s+IG1fbWFya3M7CiAgICAgICAgIEJpdG1hcDxhdG9t
c1BlckJsb2NrPiBtX25ld2x5QWxsb2NhdGVkOworICAgICAgICB2b2lkKiBtX3ZlcmlmaWVyTWVt
byB7IG51bGxwdHIgfTsKICAgICB9OwogICAgIAotcHJpdmF0ZTogICAgCitwcml2YXRlOgogICAg
IEZvb3RlciYgZm9vdGVyKCk7CiAgICAgY29uc3QgRm9vdGVyJiBmb290ZXIoKSBjb25zdDsKIApA
QCAtMzg0LDcgKzM4NiwxMSBAQCBwdWJsaWM6CiAgICAgICAgICpiaXR3aXNlX2Nhc3Q8dm9sYXRp
bGUgdWludDhfdCo+KCZmb290ZXIoKSk7CiAgICAgfQogICAgIAorICAgIHZvaWQgc2V0VmVyaWZp
ZXJNZW1vKHZvaWQqKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBUIHZlcmlmaWVyTWVtbygp
IGNvbnN0OworCiAgICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3Qgb2Zmc2V0T2ZGb290ZXIgPSBl
bmRBdG9tICogYXRvbVNpemU7CisgICAgc3RhdGljX2Fzc2VydChvZmZzZXRPZkZvb3RlciArIHNp
emVvZihGb290ZXIpIDw9IGJsb2NrU2l6ZSk7CiAKIHByaXZhdGU6CiAgICAgTWFya2VkQmxvY2so
Vk0mLCBIYW5kbGUmKTsKQEAgLTY2MCw2ICs2NjYsMTcgQEAgaW5saW5lIHZvaWQgTWFya2VkQmxv
Y2s6Om5vdGVNYXJrZWQoKQogICAgICAgICBub3RlTWFya2VkU2xvdygpOwogfQogCitpbmxpbmUg
dm9pZCBNYXJrZWRCbG9jazo6c2V0VmVyaWZpZXJNZW1vKHZvaWQqIHApCit7CisgICAgZm9vdGVy
KCkubV92ZXJpZmllck1lbW8gPSBwOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorVCBNYXJr
ZWRCbG9jazo6dmVyaWZpZXJNZW1vKCkgY29uc3QKK3sKKyAgICByZXR1cm4gYml0d2lzZV9jYXN0
PFQ+KGZvb3RlcigpLm1fdmVyaWZpZXJNZW1vKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAK
IG5hbWVzcGFjZSBXVEYgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2Vk
U3BhY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtl
ZFNwYWNlLmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvTWFya2VkU3BhY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNzIsNyArMjcyLDggQEAgdm9p
ZCBNYXJrZWRTcGFjZTo6ZW5hYmxlUHJlY2lzZUFsbG9jYXRpbwogICAgICAgICBtX3ByZWNpc2VB
bGxvY2F0aW9uU2V0LT5hZGQoYWxsb2NhdGlvbi0+Y2VsbCgpKTsKIH0KIAotdm9pZCBNYXJrZWRT
cGFjZTo6dmlzaXRXZWFrU2V0cyhTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVu
YW1lIFZpc2l0b3I+Cit2b2lkIE1hcmtlZFNwYWNlOjp2aXNpdFdlYWtTZXRzKFZpc2l0b3ImIHZp
c2l0b3IpCiB7CiAgICAgYXV0byB2aXNpdCA9IFsmXSAoV2Vha1NldCogd2Vha1NldCkgewogICAg
ICAgICB3ZWFrU2V0LT52aXNpdCh2aXNpdG9yKTsKQEAgLTI4NCw2ICsyODUsOSBAQCB2b2lkIE1h
cmtlZFNwYWNlOjp2aXNpdFdlYWtTZXRzKFNsb3RWaXNpCiAgICAgICAgIG1fYWN0aXZlV2Vha1Nl
dHMuZm9yRWFjaCh2aXNpdCk7CiB9CiAKK3RlbXBsYXRlIHZvaWQgTWFya2VkU3BhY2U6OnZpc2l0
V2Vha1NldHMoQWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBNYXJrZWRTcGFj
ZTo6dmlzaXRXZWFrU2V0cyhTbG90VmlzaXRvciYpOworCiB2b2lkIE1hcmtlZFNwYWNlOjpyZWFw
V2Vha1NldHMoKQogewogICAgIGF1dG8gdmlzaXQgPSBbJl0gKFdlYWtTZXQqIHdlYWtTZXQpIHsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZFNwYWNlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkU3BhY2UuaAkocmV2aXNpb24g
MjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkU3BhY2UuaAkod29y
a2luZyBjb3B5KQpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIw
MDAgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKICAqICBDb3B5cmlnaHQgKEMpIDIwMDEg
UGV0ZXIgS2VsbHkgKHBta0Bwb3N0LmNvbSkKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAxOCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIw
MjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwpA
QCAtMzcsNiArMzcsNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAorY2xhc3MgQWJzdHJhY3RTbG90
VmlzaXRvcjsKIGNsYXNzIENvbXBsZXRlU3Vic3BhY2U7CiBjbGFzcyBIZWFwOwogY2xhc3MgSGVh
cENlbGw7CkBAIC0xMDUsNyArMTA2LDcgQEAgcHVibGljOgogICAgIAogICAgIHZvaWQgcHJlcGFy
ZUZvckFsbG9jYXRpb24oKTsKIAotICAgIHZvaWQgdmlzaXRXZWFrU2V0cyhTbG90VmlzaXRvciYp
OworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgdmlzaXRXZWFrU2V0cyhWaXNp
dG9yJik7CiAgICAgdm9pZCByZWFwV2Vha1NldHMoKTsKIAogICAgIE1hcmtlZEJsb2NrU2V0JiBi
bG9ja3MoKSB7IHJldHVybiBtX2Jsb2NrczsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvTWFya2luZ0NvbnN0cmFpbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50LmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJNYXJr
aW5nQ29uc3RyYWludC5oIgogCisjaW5jbHVkZSAiQWJzdHJhY3RTbG90VmlzaXRvcklubGluZXMu
aCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiVmlzaXRDb3VudGVyLmgiCiAK
QEAgLTUzLDYgKzU0LDcgQEAgdm9pZCBNYXJraW5nQ29uc3RyYWludDo6cmVzZXRTdGF0cygpCiAK
IHZvaWQgTWFya2luZ0NvbnN0cmFpbnQ6OmV4ZWN1dGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7
CisgICAgQVNTRVJUKCF2aXNpdG9yLmhlYXAoKS0+aXNNYXJraW5nRm9yR0NWZXJpZmllcigpKTsK
ICAgICBWaXNpdENvdW50ZXIgdmlzaXRDb3VudGVyKHZpc2l0b3IpOwogICAgIGV4ZWN1dGVJbXBs
KHZpc2l0b3IpOwogICAgIG1fbGFzdFZpc2l0Q291bnQgKz0gdmlzaXRDb3VudGVyLnZpc2l0Q291
bnQoKTsKQEAgLTYwLDYgKzYyLDEyIEBAIHZvaWQgTWFya2luZ0NvbnN0cmFpbnQ6OmV4ZWN1dGUo
U2xvdFZpc2kKICAgICAgICAgZGF0YUxvZygiKCIsIGFiYnJldmlhdGVkTmFtZSgpLCAiIHZpc2l0
ZWQgIiwgdmlzaXRDb3VudGVyLnZpc2l0Q291bnQoKSwgIiBpbiBleGVjdXRlKSIpOwogfQogCit2
b2lkIE1hcmtpbmdDb25zdHJhaW50OjpleGVjdXRlU3luY2hyb25vdXNseShBYnN0cmFjdFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQoreworICAgIHByZXBhcmVUb0V4ZWN1dGVJbXBsKE5vTG9ja2luZ05l
Y2Vzc2FyeSwgdmlzaXRvcik7CisgICAgZXhlY3V0ZUltcGwodmlzaXRvcik7Cit9CisKIGRvdWJs
ZSBNYXJraW5nQ29uc3RyYWludDo6cXVpY2tXb3JrRXN0aW1hdGUoU2xvdFZpc2l0b3ImKQogewog
ICAgIHJldHVybiAwOwpAQCAtNzIsNiArODAsNyBAQCBkb3VibGUgTWFya2luZ0NvbnN0cmFpbnQ6
OndvcmtFc3RpbWF0ZShTCiAKIHZvaWQgTWFya2luZ0NvbnN0cmFpbnQ6OnByZXBhcmVUb0V4ZWN1
dGUoY29uc3QgQWJzdHJhY3RMb2NrZXImIGNvbnN0cmFpbnRTb2x2aW5nTG9ja2VyLCBTbG90Vmlz
aXRvciYgdmlzaXRvcikKIHsKKyAgICBBU1NFUlQoIXZpc2l0b3IuaGVhcCgpLT5pc01hcmtpbmdG
b3JHQ1ZlcmlmaWVyKCkpOwogICAgIGRhdGFMb2dJZihPcHRpb25zOjpsb2dHQygpLCBhYmJyZXZp
YXRlZE5hbWUoKSk7CiAgICAgVmlzaXRDb3VudGVyIHZpc2l0Q291bnRlcih2aXNpdG9yKTsKICAg
ICBwcmVwYXJlVG9FeGVjdXRlSW1wbChjb25zdHJhaW50U29sdmluZ0xvY2tlciwgdmlzaXRvcik7
CkBAIC04Miw2ICs5MSw3IEBAIHZvaWQgTWFya2luZ0NvbnN0cmFpbnQ6OnByZXBhcmVUb0V4ZWN1
dGUKIAogdm9pZCBNYXJraW5nQ29uc3RyYWludDo6ZG9QYXJhbGxlbFdvcmsoU2xvdFZpc2l0b3Im
IHZpc2l0b3IsIFNoYXJlZFRhc2s8dm9pZChTbG90VmlzaXRvciYpPiYgdGFzaykKIHsKKyAgICBB
U1NFUlQoIXZpc2l0b3IuaGVhcCgpLT5pc01hcmtpbmdGb3JHQ1ZlcmlmaWVyKCkpOwogICAgIFZp
c2l0Q291bnRlciB2aXNpdENvdW50ZXIodmlzaXRvcik7CiAgICAgdGFzay5ydW4odmlzaXRvcik7
CiAgICAgaWYgKHZlcmJvc2VNYXJraW5nQ29uc3RyYWludCAmJiB2aXNpdENvdW50ZXIudmlzaXRD
b3VudCgpKQpAQCAtOTIsNyArMTAyLDcgQEAgdm9pZCBNYXJraW5nQ29uc3RyYWludDo6ZG9QYXJh
bGxlbFdvcmsoUwogICAgIH0KIH0KIAotdm9pZCBNYXJraW5nQ29uc3RyYWludDo6cHJlcGFyZVRv
RXhlY3V0ZUltcGwoY29uc3QgQWJzdHJhY3RMb2NrZXImLCBTbG90VmlzaXRvciYpCit2b2lkIE1h
cmtpbmdDb25zdHJhaW50OjpwcmVwYXJlVG9FeGVjdXRlSW1wbChjb25zdCBBYnN0cmFjdExvY2tl
ciYsIEFic3RyYWN0U2xvdFZpc2l0b3ImKQogewogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50LmgJKHJldmlzaW9uIDI3MjkwMikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIxIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMzgsNiArMzgsNyBAQAogbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIE1hcmtpbmdDb25z
dHJhaW50U2V0OworY2xhc3MgQWJzdHJhY3RTbG90VmlzaXRvcjsKIGNsYXNzIFNsb3RWaXNpdG9y
OwogCiBjbGFzcyBNYXJraW5nQ29uc3RyYWludCB7CkBAIC02MSwxMCArNjIsMTAgQEAgcHVibGlj
OgogICAgIHNpemVfdCBsYXN0VmlzaXRDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fbGFzdFZpc2l0
Q291bnQ7IH0KICAgICAKICAgICB2b2lkIGV4ZWN1dGUoU2xvdFZpc2l0b3ImKTsKKworICAgIEpT
X0VYUE9SVF9QUklWQVRFIHZpcnR1YWwgZG91YmxlIHF1aWNrV29ya0VzdGltYXRlKFNsb3RWaXNp
dG9yJik7CiAgICAgCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgdmlydHVhbCBkb3VibGUgcXVpY2tX
b3JrRXN0aW1hdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpOwotICAgIAotICAgIGRvdWJsZSB3b3Jr
RXN0aW1hdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpOworICAgIGRvdWJsZSB3b3JrRXN0aW1hdGUo
U2xvdFZpc2l0b3ImKTsKICAgICAKICAgICB2b2lkIHByZXBhcmVUb0V4ZWN1dGUoY29uc3QgQWJz
dHJhY3RMb2NrZXImIGNvbnN0cmFpbnRTb2x2aW5nTG9ja2VyLCBTbG90VmlzaXRvciYpOwogICAg
IApAQCAtNzYsOSArNzcsMTIgQEAgcHVibGljOgogICAgIENvbnN0cmFpbnRQYXJhbGxlbGlzbSBw
YXJhbGxlbGlzbSgpIGNvbnN0IHsgcmV0dXJuIG1fcGFyYWxsZWxpc207IH0KIAogcHJvdGVjdGVk
OgorICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlSW1wbChBYnN0cmFjdFNsb3RWaXNpdG9yJikgPSAw
OwogICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlSW1wbChTbG90VmlzaXRvciYpID0gMDsKLSAgICBK
U19FWFBPUlRfUFJJVkFURSB2aXJ0dWFsIHZvaWQgcHJlcGFyZVRvRXhlY3V0ZUltcGwoY29uc3Qg
QWJzdHJhY3RMb2NrZXImIGNvbnN0cmFpbnRTb2x2aW5nTG9ja2VyLCBTbG90VmlzaXRvciYpOwot
ICAgIAorICAgIEpTX0VYUE9SVF9QUklWQVRFIHZpcnR1YWwgdm9pZCBwcmVwYXJlVG9FeGVjdXRl
SW1wbChjb25zdCBBYnN0cmFjdExvY2tlciYgY29uc3RyYWludFNvbHZpbmdMb2NrZXIsIEFic3Ry
YWN0U2xvdFZpc2l0b3ImKTsKKworICAgIHZvaWQgZXhlY3V0ZVN5bmNocm9ub3VzbHkoQWJzdHJh
Y3RTbG90VmlzaXRvciYpOworCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBNYXJraW5nQ29u
c3RyYWludFNldDsgLy8gU28gaXQgY2FuIHNldCBtX2luZGV4LgogICAgIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnRFeGVjdXRvclBhaXIuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludEV4
ZWN1dG9yUGFpci5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L01hcmtpbmdDb25zdHJhaW50RXhlY3V0b3JQYWlyLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw1NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3RmL0Z1bmN0
aW9uLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBBYnN0cmFjdFNsb3RWaXNpdG9yOwor
Y2xhc3MgU2xvdFZpc2l0b3I7CisKK3N0cnVjdCBNYXJraW5nQ29uc3RyYWludEV4ZWN1dG9yUGFp
ciB7CisgICAgTWFya2luZ0NvbnN0cmFpbnRFeGVjdXRvclBhaXIoCisgICAgICAgIDo6RnVuY3Rp
b248dm9pZChBYnN0cmFjdFNsb3RWaXNpdG9yJik+IGFic3RyYWN0U2xvdFZpc2l0b3JGdW5jLAor
ICAgICAgICA6OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3ImKT4gc2xvdFZpc2l0b3JGdW5jKQor
ICAgICAgICA6IGFic3RyYWN0U2xvdFZpc2l0b3JGdW5jKFdURk1vdmUoYWJzdHJhY3RTbG90Vmlz
aXRvckZ1bmMpKQorICAgICAgICAsIHNsb3RWaXNpdG9yRnVuYyhXVEZNb3ZlKHNsb3RWaXNpdG9y
RnVuYykpCisgICAgeyB9CisgICAgTWFya2luZ0NvbnN0cmFpbnRFeGVjdXRvclBhaXIoTWFya2lu
Z0NvbnN0cmFpbnRFeGVjdXRvclBhaXImJikgPSBkZWZhdWx0OworCisgICAgdm9pZCBleGVjdXRl
KEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsgYWJzdHJhY3RTbG90VmlzaXRvckZ1bmMo
dmlzaXRvcik7IH0KKyAgICB2b2lkIGV4ZWN1dGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsgc2xv
dFZpc2l0b3JGdW5jKHZpc2l0b3IpOyB9CisKKyAgICA6OkZ1bmN0aW9uPHZvaWQoQWJzdHJhY3RT
bG90VmlzaXRvciYpPiBhYnN0cmFjdFNsb3RWaXNpdG9yRnVuYzsKKyAgICA6OkZ1bmN0aW9uPHZv
aWQoU2xvdFZpc2l0b3ImKT4gc2xvdFZpc2l0b3JGdW5jOworfTsKKworI2RlZmluZSBNQUtFX01B
UktJTkdfQ09OU1RSQUlOVF9FWEVDVVRPUl9QQUlSKGxhbWJkYSkgXAorICAgIE1hcmtpbmdDb25z
dHJhaW50RXhlY3V0b3JQYWlyKChsYW1iZGEpLCAobGFtYmRhKSkKKworfSAvLyBuYW1lc3BhY2Ug
SlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludFNl
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0Nv
bnN0cmFpbnRTZXQuY3BwCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9NYXJraW5nQ29uc3RyYWludFNldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjMsOSArNjMs
OSBAQCB2b2lkIE1hcmtpbmdDb25zdHJhaW50U2V0OjpkaWRTdGFydE1hcmtpCiAgICAgbV9pdGVy
YXRpb24gPSAxOwogfQogCi12b2lkIE1hcmtpbmdDb25zdHJhaW50U2V0OjphZGQoQ1N0cmluZyBh
YmJyZXZpYXRlZE5hbWUsIENTdHJpbmcgbmFtZSwgOjpGdW5jdGlvbjx2b2lkKFNsb3RWaXNpdG9y
Jik+IGZ1bmN0aW9uLCBDb25zdHJhaW50Vm9sYXRpbGl0eSB2b2xhdGlsaXR5LCBDb25zdHJhaW50
Q29uY3VycmVuY3kgY29uY3VycmVuY3ksIENvbnN0cmFpbnRQYXJhbGxlbGlzbSBwYXJhbGxlbGlz
bSkKK3ZvaWQgTWFya2luZ0NvbnN0cmFpbnRTZXQ6OmFkZChDU3RyaW5nIGFiYnJldmlhdGVkTmFt
ZSwgQ1N0cmluZyBuYW1lLCBNYXJraW5nQ29uc3RyYWludEV4ZWN1dG9yUGFpciYmIGV4ZWN1dG9y
cywgQ29uc3RyYWludFZvbGF0aWxpdHkgdm9sYXRpbGl0eSwgQ29uc3RyYWludENvbmN1cnJlbmN5
IGNvbmN1cnJlbmN5LCBDb25zdHJhaW50UGFyYWxsZWxpc20gcGFyYWxsZWxpc20pCiB7Ci0gICAg
YWRkKG1ha2VVbmlxdWU8U2ltcGxlTWFya2luZ0NvbnN0cmFpbnQ+KFdURk1vdmUoYWJicmV2aWF0
ZWROYW1lKSwgV1RGTW92ZShuYW1lKSwgV1RGTW92ZShmdW5jdGlvbiksIHZvbGF0aWxpdHksIGNv
bmN1cnJlbmN5LCBwYXJhbGxlbGlzbSkpOworICAgIGFkZChtYWtlVW5pcXVlPFNpbXBsZU1hcmtp
bmdDb25zdHJhaW50PihXVEZNb3ZlKGFiYnJldmlhdGVkTmFtZSksIFdURk1vdmUobmFtZSksIFdU
Rk1vdmUoZXhlY3V0b3JzKSwgdm9sYXRpbGl0eSwgY29uY3VycmVuY3ksIHBhcmFsbGVsaXNtKSk7
CiB9CiAKIHZvaWQgTWFya2luZ0NvbnN0cmFpbnRTZXQ6OmFkZCgKQEAgLTE2NiwxMCArMTY2LDEw
IEBAIGJvb2wgTWFya2luZ0NvbnN0cmFpbnRTZXQ6OmV4ZWN1dGVDb252ZXIKICAgICByZXR1cm4g
IXNvbHZlci5kaWRWaXNpdFNvbWV0aGluZygpOwogfQogCi12b2lkIE1hcmtpbmdDb25zdHJhaW50
U2V0OjpleGVjdXRlQWxsKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBNYXJraW5nQ29uc3Ry
YWludFNldDo6ZXhlY3V0ZUFsbFN5bmNocm9ub3VzbHkoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlz
aXRvcikKIHsKICAgICBmb3IgKGF1dG8mIGNvbnN0cmFpbnQgOiBtX3NldCkKLSAgICAgICAgY29u
c3RyYWludC0+ZXhlY3V0ZSh2aXNpdG9yKTsKKyAgICAgICAgY29uc3RyYWludC0+ZXhlY3V0ZVN5
bmNocm9ub3VzbHkodmlzaXRvcik7CiAgICAgZGF0YUxvZ0lmKE9wdGlvbnM6OmxvZ0dDKCksICIg
Iik7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJh
aW50U2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2lu
Z0NvbnN0cmFpbnRTZXQuaAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnRTZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNiw2ICsyNiw3
IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIk1hcmtpbmdDb25zdHJhaW50LmgiCisjaW5j
bHVkZSAiTWFya2luZ0NvbnN0cmFpbnRFeGVjdXRvclBhaXIuaCIKICNpbmNsdWRlIDx3dGYvQml0
VmVjdG9yLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCkBAIC00NiwxOCArNDcsMTggQEAg
cHVibGljOgogICAgIHZvaWQgYWRkKAogICAgICAgICBDU3RyaW5nIGFiYnJldmlhdGVkTmFtZSwK
ICAgICAgICAgQ1N0cmluZyBuYW1lLAotICAgICAgICA6OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0
b3ImKT4sCisgICAgICAgIE1hcmtpbmdDb25zdHJhaW50RXhlY3V0b3JQYWlyJiYsCiAgICAgICAg
IENvbnN0cmFpbnRWb2xhdGlsaXR5LAogICAgICAgICBDb25zdHJhaW50Q29uY3VycmVuY3kgPSBD
b25zdHJhaW50Q29uY3VycmVuY3k6OkNvbmN1cnJlbnQsCiAgICAgICAgIENvbnN0cmFpbnRQYXJh
bGxlbGlzbSA9IENvbnN0cmFpbnRQYXJhbGxlbGlzbTo6U2VxdWVudGlhbCk7CiAgICAgCiAgICAg
dm9pZCBhZGQoCiAgICAgICAgIENTdHJpbmcgYWJicmV2aWF0ZWROYW1lLCBDU3RyaW5nIG5hbWUs
Ci0gICAgICAgIDo6RnVuY3Rpb248dm9pZChTbG90VmlzaXRvciYpPiBmdW5jLAorICAgICAgICBN
YXJraW5nQ29uc3RyYWludEV4ZWN1dG9yUGFpciYmIGV4ZWN1dG9ycywKICAgICAgICAgQ29uc3Ry
YWludFZvbGF0aWxpdHkgdm9sYXRpbGl0eSwKICAgICAgICAgQ29uc3RyYWludFBhcmFsbGVsaXNt
IHBhcmFsbGVsaXNtKQogICAgIHsKLSAgICAgICAgYWRkKGFiYnJldmlhdGVkTmFtZSwgbmFtZSwg
V1RGTW92ZShmdW5jKSwgdm9sYXRpbGl0eSwgQ29uc3RyYWludENvbmN1cnJlbmN5OjpDb25jdXJy
ZW50LCBwYXJhbGxlbGlzbSk7CisgICAgICAgIGFkZChhYmJyZXZpYXRlZE5hbWUsIG5hbWUsIFdU
Rk1vdmUoZXhlY3V0b3JzKSwgdm9sYXRpbGl0eSwgQ29uc3RyYWludENvbmN1cnJlbmN5OjpDb25j
dXJyZW50LCBwYXJhbGxlbGlzbSk7CiAgICAgfQogICAgIAogICAgIHZvaWQgYWRkKHN0ZDo6dW5p
cXVlX3B0cjxNYXJraW5nQ29uc3RyYWludD4pOwpAQCAtNzAsMTMgKzcxLDEzIEBAIHB1YmxpYzoK
ICAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhpcyBleGVjdXRlZCBhbGwgY29uc3RyYWludHMgYW5k
IG5vbmUgb2YgdGhlbSBwcm9kdWNlZCBuZXcgd29yay4gVGhpcwogICAgIC8vIGFzc3VtZXMgdGhh
dCB5b3UndmUgYWxyYWVkeSB2aXNpdGVkIHJvb3RzIGFuZCBkcmFpbmVkIGZyb20gdGhlcmUuCiAg
ICAgYm9vbCBleGVjdXRlQ29udmVyZ2VuY2UoU2xvdFZpc2l0b3ImKTsKLSAgICAKKwogICAgIC8v
IFNpbXBseSBydW5zIGFsbCBjb25zdHJhaW50cyB3aXRob3V0IGFueSBzaGVuYW5pZ2Fucy4KLSAg
ICB2b2lkIGV4ZWN1dGVBbGwoU2xvdFZpc2l0b3ImKTsKKyAgICB2b2lkIGV4ZWN1dGVBbGxTeW5j
aHJvbm91c2x5KEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKICAgICAKIHByaXZhdGU6CiAgICAgZnJp
ZW5kIGNsYXNzIE1hcmtpbmdDb25zdHJhaW50U29sdmVyOwotICAgIAorCiAgICAgYm9vbCBleGVj
dXRlQ29udmVyZ2VuY2VJbXBsKFNsb3RWaXNpdG9yJik7CiAgICAgCiAgICAgSGVhcCYgbV9oZWFw
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnRTb2x2
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdD
b25zdHJhaW50U29sdmVyLmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50U29sdmVyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnRT
b2x2ZXIuaAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
TWFya2luZ0NvbnN0cmFpbnRTb2x2ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9TaW1wbGVNYXJraW5nQ29uc3RyYWludC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQuY3BwCShy
ZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TaW1wbGVNYXJr
aW5nQ29uc3RyYWludC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzAsMTEgKzMwLDExIEBAIG5hbWVzcGFj
ZSBKU0MgewogCiBTaW1wbGVNYXJraW5nQ29uc3RyYWludDo6U2ltcGxlTWFya2luZ0NvbnN0cmFp
bnQoCiAgICAgQ1N0cmluZyBhYmJyZXZpYXRlZE5hbWUsIENTdHJpbmcgbmFtZSwKLSAgICA6OkZ1
bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3ImKT4gZXhlY3V0ZUZ1bmN0aW9uLAorICAgIE1hcmtpbmdD
b25zdHJhaW50RXhlY3V0b3JQYWlyJiYgZXhlY3V0b3JzLAogICAgIENvbnN0cmFpbnRWb2xhdGls
aXR5IHZvbGF0aWxpdHksIENvbnN0cmFpbnRDb25jdXJyZW5jeSBjb25jdXJyZW5jeSwKICAgICBD
b25zdHJhaW50UGFyYWxsZWxpc20gcGFyYWxsZWxpc20pCiAgICAgOiBNYXJraW5nQ29uc3RyYWlu
dChXVEZNb3ZlKGFiYnJldmlhdGVkTmFtZSksIFdURk1vdmUobmFtZSksIHZvbGF0aWxpdHksIGNv
bmN1cnJlbmN5LCBwYXJhbGxlbGlzbSkKLSAgICAsIG1fZXhlY3V0ZUZ1bmN0aW9uKFdURk1vdmUo
ZXhlY3V0ZUZ1bmN0aW9uKSkKKyAgICAsIG1fZXhlY3V0b3JzKFdURk1vdmUoZXhlY3V0b3JzKSkK
IHsKIH0KIApAQCAtNDIsMTAgKzQyLDE0IEBAIFNpbXBsZU1hcmtpbmdDb25zdHJhaW50Ojp+U2lt
cGxlTWFya2luZ0MKIHsKIH0KIAotdm9pZCBTaW1wbGVNYXJraW5nQ29uc3RyYWludDo6ZXhlY3V0
ZUltcGwoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgor
dm9pZCBTaW1wbGVNYXJraW5nQ29uc3RyYWludDo6ZXhlY3V0ZUltcGxJbXBsKFZpc2l0b3ImIHZp
c2l0b3IpCiB7Ci0gICAgbV9leGVjdXRlRnVuY3Rpb24odmlzaXRvcik7CisgICAgbV9leGVjdXRv
cnMuZXhlY3V0ZSh2aXNpdG9yKTsKIH0KIAordm9pZCBTaW1wbGVNYXJraW5nQ29uc3RyYWludDo6
ZXhlY3V0ZUltcGwoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikgeyBleGVjdXRlSW1wbElt
cGwodmlzaXRvcik7IH0KK3ZvaWQgU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQ6OmV4ZWN1dGVJbXBs
KFNsb3RWaXNpdG9yJiB2aXNpdG9yKSB7IGV4ZWN1dGVJbXBsSW1wbCh2aXNpdG9yKTsgfQorCiB9
IC8vIG5hbWVzcGFjZSBKU0MKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2lt
cGxlTWFya2luZ0NvbnN0cmFpbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9TaW1wbGVNYXJraW5nQ29uc3RyYWludC5oCShyZXZpc2lvbiAyNzI5MDIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TaW1wbGVNYXJraW5nQ29uc3RyYWludC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTI2LDcgKzI2LDcgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiTWFya2lu
Z0NvbnN0cmFpbnQuaCIKLSNpbmNsdWRlIDx3dGYvRnVuY3Rpb24uaD4KKyNpbmNsdWRlICJNYXJr
aW5nQ29uc3RyYWludEV4ZWN1dG9yUGFpci5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIApAQCAtMzcs
MjYgKzM3LDI4IEBAIGNsYXNzIFNpbXBsZU1hcmtpbmdDb25zdHJhaW50IGZpbmFsIDogcHUKIHB1
YmxpYzoKICAgICBKU19FWFBPUlRfUFJJVkFURSBTaW1wbGVNYXJraW5nQ29uc3RyYWludCgKICAg
ICAgICAgQ1N0cmluZyBhYmJyZXZpYXRlZE5hbWUsIENTdHJpbmcgbmFtZSwKLSAgICAgICAgOjpG
dW5jdGlvbjx2b2lkKFNsb3RWaXNpdG9yJik+LAorICAgICAgICBNYXJraW5nQ29uc3RyYWludEV4
ZWN1dG9yUGFpciYmLAogICAgICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eSwKICAgICAgICAgQ29u
c3RyYWludENvbmN1cnJlbmN5ID0gQ29uc3RyYWludENvbmN1cnJlbmN5OjpDb25jdXJyZW50LAog
ICAgICAgICBDb25zdHJhaW50UGFyYWxsZWxpc20gPSBDb25zdHJhaW50UGFyYWxsZWxpc206OlNl
cXVlbnRpYWwpOwogICAgIAogICAgIFNpbXBsZU1hcmtpbmdDb25zdHJhaW50KAogICAgICAgICBD
U3RyaW5nIGFiYnJldmlhdGVkTmFtZSwgQ1N0cmluZyBuYW1lLAotICAgICAgICA6OkZ1bmN0aW9u
PHZvaWQoU2xvdFZpc2l0b3ImKT4gZnVuYywKKyAgICAgICAgTWFya2luZ0NvbnN0cmFpbnRFeGVj
dXRvclBhaXImJiBleGVjdXRvcnMsCiAgICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5IHZvbGF0
aWxpdHksCiAgICAgICAgIENvbnN0cmFpbnRQYXJhbGxlbGlzbSBwYXJhbGxlbGlzbSkKLSAgICAg
ICAgOiBTaW1wbGVNYXJraW5nQ29uc3RyYWludChhYmJyZXZpYXRlZE5hbWUsIG5hbWUsIFdURk1v
dmUoZnVuYyksIHZvbGF0aWxpdHksIENvbnN0cmFpbnRDb25jdXJyZW5jeTo6Q29uY3VycmVudCwg
cGFyYWxsZWxpc20pCisgICAgICAgIDogU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQoYWJicmV2aWF0
ZWROYW1lLCBuYW1lLCBXVEZNb3ZlKGV4ZWN1dG9ycyksIHZvbGF0aWxpdHksIENvbnN0cmFpbnRD
b25jdXJyZW5jeTo6Q29uY3VycmVudCwgcGFyYWxsZWxpc20pCiAgICAgewogICAgIH0KICAgICAK
ICAgICBKU19FWFBPUlRfUFJJVkFURSB+U2ltcGxlTWFya2luZ0NvbnN0cmFpbnQoKSBmaW5hbDsK
ICAgICAKIHByaXZhdGU6CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gQUxXQVlTX0lO
TElORSB2b2lkIGV4ZWN1dGVJbXBsSW1wbChWaXNpdG9yJik7CisgICAgdm9pZCBleGVjdXRlSW1w
bChBYnN0cmFjdFNsb3RWaXNpdG9yJikgZmluYWw7CiAgICAgdm9pZCBleGVjdXRlSW1wbChTbG90
VmlzaXRvciYpIGZpbmFsOwogCi0gICAgOjpGdW5jdGlvbjx2b2lkKFNsb3RWaXNpdG9yJik+IG1f
ZXhlY3V0ZUZ1bmN0aW9uOworICAgIE1hcmtpbmdDb25zdHJhaW50RXhlY3V0b3JQYWlyIG1fZXhl
Y3V0b3JzOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9TbG90VmlzaXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuY3BwCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjAgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03
NywxNSArNzcsMTAgQEAgc3RhdGljIHZvaWQgdmFsaWRhdGUoSlNDZWxsKiBjZWxsKQogI2VuZGlm
CiAKIFNsb3RWaXNpdG9yOjpTbG90VmlzaXRvcihIZWFwJiBoZWFwLCBDU3RyaW5nIGNvZGVOYW1l
KQotICAgIDogbV9ieXRlc1Zpc2l0ZWQoMCkKLSAgICAsIG1fdmlzaXRDb3VudCgwKQotICAgICwg
bV9pc0luUGFyYWxsZWxNb2RlKGZhbHNlKQorICAgIDogQmFzZShoZWFwLCBjb2RlTmFtZSwgaGVh
cC5tX29wYXF1ZVJvb3RzKQogICAgICwgbV9tYXJraW5nVmVyc2lvbihNYXJrZWRTcGFjZTo6aW5p
dGlhbFZlcnNpb24pCi0gICAgLCBtX2hlYXAoaGVhcCkKLSAgICAsIG1fY29kZU5hbWUoY29kZU5h
bWUpCiAjaWYgQVNTRVJUX0VOQUJMRUQKICAgICAsIG1faXNDaGVja2luZ0ZvckRlZmF1bHRNYXJr
VmlvbGF0aW9uKGZhbHNlKQotICAgICwgbV9pc0RyYWluaW5nKGZhbHNlKQogI2VuZGlmCiB7CiB9
CkBAIC0xMTcsOCArMTEyLDggQEAgdm9pZCBTbG90VmlzaXRvcjo6ZGlkU3RhcnRNYXJraW5nKCkK
IAogdm9pZCBTbG90VmlzaXRvcjo6cmVzZXQoKQogeworICAgIEFic3RyYWN0U2xvdFZpc2l0b3I6
OnJlc2V0KCk7CiAgICAgbV9ieXRlc1Zpc2l0ZWQgPSAwOwotICAgIG1fdmlzaXRDb3VudCA9IDA7
CiAgICAgbV9oZWFwQW5hbHl6ZXIgPSBudWxscHRyOwogICAgIFJFTEVBU0VfQVNTRVJUKCFtX2N1
cnJlbnRDZWxsKTsKIH0KQEAgLTIzMCw3ICsyMjUsNyBAQCB2b2lkIFNsb3RWaXNpdG9yOjphcHBl
bmRKU0NlbGxPckF1eGlsaWFyCiB2b2lkIFNsb3RWaXNpdG9yOjphcHBlbmRTbG93KEpTQ2VsbCog
Y2VsbCwgRGVwZW5kZW5jeSBkZXBlbmRlbmN5KQogewogICAgIGlmIChVTkxJS0VMWShtX2hlYXBB
bmFseXplcikpCi0gICAgICAgIG1faGVhcEFuYWx5emVyLT5hbmFseXplRWRnZShtX2N1cnJlbnRD
ZWxsLCBjZWxsLCBtX3Jvb3RNYXJrUmVhc29uKTsKKyAgICAgICAgbV9oZWFwQW5hbHl6ZXItPmFu
YWx5emVFZGdlKG1fY3VycmVudENlbGwsIGNlbGwsIHJvb3RNYXJrUmVhc29uKCkpOwogCiAgICAg
YXBwZW5kSGlkZGVuU2xvd0ltcGwoY2VsbCwgZGVwZW5kZW5jeSk7CiB9CkBAIC04MDcsMTIgKzgw
MiwxNyBAQCBNYXJrU3RhY2tBcnJheSYgU2xvdFZpc2l0b3I6OmNvcnJlc3BvbmRpCiAgICAgcmV0
dXJuICptX2hlYXAubV9zaGFyZWRNdXRhdG9yTWFya1N0YWNrOwogfQogCi12b2lkIFNsb3RWaXNp
dG9yOjphZGRQYXJhbGxlbENvbnN0cmFpbnRUYXNrKFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoU2xv
dFZpc2l0b3ImKT4+IHRhc2spCitOT19SRVRVUk5fRFVFX1RPX0NSQVNIIHZvaWQgU2xvdFZpc2l0
b3I6OmFkZFBhcmFsbGVsQ29uc3RyYWludFRhc2soUmVmUHRyPFNoYXJlZFRhc2s8dm9pZChBYnN0
cmFjdFNsb3RWaXNpdG9yJik+PikKK3sKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OworfQorCitKU19FWFBPUlRfUFJJVkFURSB2b2lkIFNsb3RWaXNpdG9yOjphZGRQYXJhbGxlbENv
bnN0cmFpbnRUYXNrKFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoU2xvdFZpc2l0b3ImKT4+IHRhc2sp
CiB7CiAgICAgUkVMRUFTRV9BU1NFUlQobV9jdXJyZW50U29sdmVyKTsKICAgICBSRUxFQVNFX0FT
U0VSVChtX2N1cnJlbnRDb25zdHJhaW50KTsKICAgICBSRUxFQVNFX0FTU0VSVCh0YXNrKTsKLSAg
ICAKKwogICAgIG1fY3VycmVudFNvbHZlci0+YWRkUGFyYWxsZWxUYXNrKHRhc2ssICptX2N1cnJl
bnRDb25zdHJhaW50KTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xv
dFZpc2l0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90
VmlzaXRvci5oCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9TbG90VmlzaXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw1OSArMjUsNzYgQEAKIAogI3By
YWdtYSBvbmNlCiAKKyNpbmNsdWRlICJBYnN0cmFjdFNsb3RWaXNpdG9yLmgiCiAjaW5jbHVkZSAi
SGFuZGxlVHlwZXMuaCIKICNpbmNsdWRlICJJdGVyYXRpb25TdGF0dXMuaCIKLSNpbmNsdWRlICJN
YXJrU3RhY2suaCIKLSNpbmNsdWRlICJSb290TWFya1JlYXNvbi5oIgotI2luY2x1ZGUgIlZpc2l0
UmFjZUtleS5oIgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL01vbm90
b25pY1RpbWUuaD4KLSNpbmNsdWRlIDx3dGYvU2hhcmVkVGFzay5oPgotI2luY2x1ZGUgPHd0Zi90
ZXh0L0NTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKLWNsYXNzIENvbnNlcnZhdGl2ZVJv
b3RzOwogY2xhc3MgR0NUaHJlYWRTaGFyZWREYXRhOwotY2xhc3MgSGVhcDsKIGNsYXNzIEhlYXBD
ZWxsOwogY2xhc3MgSGVhcEFuYWx5emVyOwotY2xhc3MgTWFya2VkQmxvY2s7CiBjbGFzcyBNYXJr
aW5nQ29uc3RyYWludDsKIGNsYXNzIE1hcmtpbmdDb25zdHJhaW50U29sdmVyOwotdGVtcGxhdGU8
dHlwZW5hbWUgVD4gY2xhc3MgV2VhazsKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFRy
YWl0cz4gY2xhc3MgV3JpdGVCYXJyaWVyQmFzZTsKIAogdHlwZWRlZiB1aW50MzJfdCBIZWFwVmVy
c2lvbjsKIAotY2xhc3MgU2xvdFZpc2l0b3IgeworY2xhc3MgU2xvdFZpc2l0b3IgZmluYWwgOiBw
dWJsaWMgQWJzdHJhY3RTbG90VmlzaXRvciB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU2xv
dFZpc2l0b3IpOwogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogCisgICAgdXNpbmcgQmFz
ZSA9IEFic3RyYWN0U2xvdFZpc2l0b3I7CisKICAgICBmcmllbmQgY2xhc3MgU2V0Q3VycmVudENl
bGxTY29wZTsKICAgICBmcmllbmQgY2xhc3MgSGVhcDsKIAogcHVibGljOgorICAgIGNsYXNzIENv
bnRleHQgeworICAgIHB1YmxpYzoKKyAgICAgICAgQUxXQVlTX0lOTElORSBDb250ZXh0KEFic3Ry
YWN0U2xvdFZpc2l0b3ImLCBIZWFwQ2VsbCopIHsgfQorICAgIH07CisKKyAgICBjbGFzcyBTdXBw
cmVzc0dDVmVyaWZpZXJTY29wZSB7CisgICAgcHVibGljOgorICAgICAgICBTdXBwcmVzc0dDVmVy
aWZpZXJTY29wZShTbG90VmlzaXRvciYpIHsgfQorICAgIH07CisKKyAgICBjbGFzcyBEZWZhdWx0
TWFya2luZ1Zpb2xhdGlvbkFzc2VydGlvblNjb3BlIHsKKyAgICBwdWJsaWM6CisjaWYgQVNTRVJU
X0VOQUJMRUQKKyAgICAgICAgRGVmYXVsdE1hcmtpbmdWaW9sYXRpb25Bc3NlcnRpb25TY29wZShT
bG90VmlzaXRvciYgdmlzaXRvcikKKyAgICAgICAgICAgIDogbV92aXNpdG9yKHZpc2l0b3IpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIG1fd2FzQ2hlY2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlv
biA9IG1fdmlzaXRvci5tX2lzQ2hlY2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlvbjsKKyAgICAg
ICAgICAgIG1fdmlzaXRvci5tX2lzQ2hlY2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlvbiA9IGZh
bHNlOworICAgICAgICB9CisKKyAgICAgICAgfkRlZmF1bHRNYXJraW5nVmlvbGF0aW9uQXNzZXJ0
aW9uU2NvcGUoKQorICAgICAgICB7CisgICAgICAgICAgICBtX3Zpc2l0b3IubV9pc0NoZWNraW5n
Rm9yRGVmYXVsdE1hcmtWaW9sYXRpb24gPSBtX3dhc0NoZWNraW5nRm9yRGVmYXVsdE1hcmtWaW9s
YXRpb247CisgICAgICAgIH0KKworICAgIHByaXZhdGU6CisgICAgICAgIFNsb3RWaXNpdG9yJiBt
X3Zpc2l0b3I7CisgICAgICAgIGJvb2wgbV93YXNDaGVja2luZ0ZvckRlZmF1bHRNYXJrVmlvbGF0
aW9uOworI2Vsc2UKKyAgICAgICAgRGVmYXVsdE1hcmtpbmdWaW9sYXRpb25Bc3NlcnRpb25TY29w
ZShTbG90VmlzaXRvciYpIHsgfQorI2VuZGlmCisgICAgfTsKKwogICAgIFNsb3RWaXNpdG9yKEhl
YXAmLCBDU3RyaW5nIGNvZGVOYW1lKTsKICAgICB+U2xvdFZpc2l0b3IoKTsKIAotICAgIE1hcmtT
dGFja0FycmF5JiBjb2xsZWN0b3JNYXJrU3RhY2soKSB7IHJldHVybiBtX2NvbGxlY3RvclN0YWNr
OyB9Ci0gICAgTWFya1N0YWNrQXJyYXkmIG11dGF0b3JNYXJrU3RhY2soKSB7IHJldHVybiBtX211
dGF0b3JTdGFjazsgfQotICAgIGNvbnN0IE1hcmtTdGFja0FycmF5JiBjb2xsZWN0b3JNYXJrU3Rh
Y2soKSBjb25zdCB7IHJldHVybiBtX2NvbGxlY3RvclN0YWNrOyB9Ci0gICAgY29uc3QgTWFya1N0
YWNrQXJyYXkmIG11dGF0b3JNYXJrU3RhY2soKSBjb25zdCB7IHJldHVybiBtX211dGF0b3JTdGFj
azsgfQotICAgIAotICAgIFZNJiB2bSgpOwotICAgIGNvbnN0IFZNJiB2bSgpIGNvbnN0OwotICAg
IEhlYXAqIGhlYXAoKSBjb25zdDsKKyAgICB2b2lkIGFwcGVuZChjb25zdCBDb25zZXJ2YXRpdmVS
b290cyYpIGZpbmFsOwogCi0gICAgdm9pZCBhcHBlbmQoY29uc3QgQ29uc2VydmF0aXZlUm9vdHMm
KTsKLSAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBUcmFpdHM+IHZvaWQg
YXBwZW5kKGNvbnN0IFdyaXRlQmFycmllckJhc2U8VCwgVHJhaXRzPiYpOwogICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFQsIHR5cGVuYW1lIFRyYWl0cz4gdm9pZCBhcHBlbmRIaWRkZW4oY29uc3QgV3Jp
dGVCYXJyaWVyQmFzZTxULCBUcmFpdHM+Jik7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgSXRlcmF0
b3I+IHZvaWQgYXBwZW5kKEl0ZXJhdG9yIGJlZ2luICwgSXRlcmF0b3IgZW5kKTsKLSAgICB2b2lk
IGFwcGVuZFZhbHVlcyhjb25zdCBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24sIFJhd1ZhbHVlVHJh
aXRzPFVua25vd24+PiosIHNpemVfdCBjb3VudCk7Ci0gICAgdm9pZCBhcHBlbmRWYWx1ZXNIaWRk
ZW4oY29uc3QgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duLCBSYXdWYWx1ZVRyYWl0czxVbmtub3du
Pj4qLCBzaXplX3QgY291bnQpOwotICAgIAorICAgIEFMV0FZU19JTkxJTkUgdm9pZCBhcHBlbmRW
YWx1ZXMoY29uc3QgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duLCBSYXdWYWx1ZVRyYWl0czxVbmtu
b3duPj4qLCBzaXplX3QgY291bnQpOworICAgIEFMV0FZU19JTkxJTkUgdm9pZCBhcHBlbmRWYWx1
ZXNIaWRkZW4oY29uc3QgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duLCBSYXdWYWx1ZVRyYWl0czxV
bmtub3duPj4qLCBzaXplX3QgY291bnQpOworCiAgICAgLy8gVGhlc2UgZG9uJ3QgcmVxdWlyZSB5
b3UgdG8gcHJvdmUgdGhhdCB5b3UgaGF2ZSBhIFdyaXRlQmFycmllcjw+LiBUaGF0IG1ha2VzIHNl
bnNlCiAgICAgLy8gZm9yOgogICAgIC8vCkBAIC04NywzMiArMTA0LDI3IEBAIHB1YmxpYzoKICAg
ICAvLwogICAgIC8vIElmIHlvdSBhcmUgbm90IGEgcm9vdCBhbmQgeW91IGRvbid0IGtub3cgd2hh
dCBraW5kIG9mIGJhcnJpZXIgeW91IGhhdmUsIHRoZW4geW91CiAgICAgLy8gc2hvdWxkbid0IGNh
bGwgdGhlc2UgbWV0aG9kcy4KLSAgICB2b2lkIGFwcGVuZFVuYmFycmllcmVkKEpTVmFsdWUpOwot
ICAgIHZvaWQgYXBwZW5kVW5iYXJyaWVyZWQoSlNWYWx1ZSosIHNpemVfdCk7Ci0gICAgdm9pZCBh
cHBlbmRVbmJhcnJpZXJlZChKU0NlbGwqKTsKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgYXBwZW5k
VW5iYXJyaWVyZWQoSlNWYWx1ZSk7CisgICAgQUxXQVlTX0lOTElORSB2b2lkIGFwcGVuZFVuYmFy
cmllcmVkKEpTVmFsdWUqLCBzaXplX3QpOworICAgIHZvaWQgYXBwZW5kVW5iYXJyaWVyZWQoSlND
ZWxsKikgZmluYWw7CiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KICAgICB2b2lkIGFw
cGVuZChjb25zdCBXZWFrPFQ+JiB3ZWFrKTsKICAgICAKLSAgICB2b2lkIGFwcGVuZEhpZGRlblVu
YmFycmllcmVkKEpTVmFsdWUpOwotICAgIHZvaWQgYXBwZW5kSGlkZGVuVW5iYXJyaWVyZWQoSlND
ZWxsKik7Ci0KLSAgICBib29sIGFkZE9wYXF1ZVJvb3Qodm9pZCopOyAvLyBSZXR1cm5zIHRydWUg
aWYgdGhlIHJvb3Qgd2FzIG5ldy4KLSAgICAKLSAgICBib29sIGNvbnRhaW5zT3BhcXVlUm9vdCh2
b2lkKikgY29uc3Q7CisgICAgQUxXQVlTX0lOTElORSB2b2lkIGFwcGVuZEhpZGRlblVuYmFycmll
cmVkKEpTVmFsdWUpOworICAgIHZvaWQgYXBwZW5kSGlkZGVuVW5iYXJyaWVyZWQoSlNDZWxsKikg
ZmluYWw7CiAKLSAgICBib29sIGlzRW1wdHkoKSB7IHJldHVybiBtX2NvbGxlY3RvclN0YWNrLmlz
RW1wdHkoKSAmJiBtX211dGF0b3JTdGFjay5pc0VtcHR5KCk7IH0KKyAgICBib29sIGlzRmlyc3RW
aXNpdCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1faXNGaXJzdFZpc2l0OyB9CiAKLSAgICBib29s
IGlzRmlyc3RWaXNpdCgpIGNvbnN0IHsgcmV0dXJuIG1faXNGaXJzdFZpc2l0OyB9CisgICAgYm9v
bCBpc01hcmtlZChjb25zdCB2b2lkKikgY29uc3QgZmluYWw7CisgICAgYm9vbCBpc01hcmtlZChN
YXJrZWRCbG9jayYsIEhlYXBDZWxsKikgY29uc3QgZmluYWw7CisgICAgYm9vbCBpc01hcmtlZChQ
cmVjaXNlQWxsb2NhdGlvbiYsIEhlYXBDZWxsKikgY29uc3QgZmluYWw7CiAKICAgICB2b2lkIGRp
ZFN0YXJ0TWFya2luZygpOwogICAgIHZvaWQgcmVzZXQoKTsKICAgICB2b2lkIGNsZWFyTWFya1N0
YWNrcygpOwogCiAgICAgc2l6ZV90IGJ5dGVzVmlzaXRlZCgpIGNvbnN0IHsgcmV0dXJuIG1fYnl0
ZXNWaXNpdGVkOyB9Ci0gICAgc2l6ZV90IHZpc2l0Q291bnQoKSBjb25zdCB7IHJldHVybiBtX3Zp
c2l0Q291bnQ7IH0KLSAgICAKLSAgICB2b2lkIGFkZFRvVmlzaXRDb3VudChzaXplX3QgdmFsdWUp
IHsgbV92aXNpdENvdW50ICs9IHZhbHVlOyB9CiAKICAgICB2b2lkIGRvbmF0ZSgpOwogICAgIHZv
aWQgZHJhaW4oTW9ub3RvbmljVGltZSB0aW1lb3V0ID0gTW9ub3RvbmljVGltZTo6aW5maW5pdHko
KSk7CkBAIC0xMzUsMjQgKzE0NywxOCBAQCBwdWJsaWM6CiAgICAgCiAgICAgLy8gVGhpcyBpbmZv
cm1zIHRoZSBHQyBhYm91dCBhdXhpbGlhcnkgb2Ygc29tZSBzaXplIHRoYXQgd2UgYXJlIGtlZXBp
bmcgYWxpdmUuIElmIHlvdSBkb24ndCBkbwogICAgIC8vIHRoaXMgdGhlbiB0aGUgc3BhY2Ugd2ls
bCBiZSBmcmVlZCBhdCBlbmQgb2YgR0MuCi0gICAgdm9pZCBtYXJrQXV4aWxpYXJ5KGNvbnN0IHZv
aWQqIGJhc2UpOworICAgIHZvaWQgbWFya0F1eGlsaWFyeShjb25zdCB2b2lkKiBiYXNlKSBmaW5h
bDsKIAotICAgIHZvaWQgcmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKHNpemVfdCk7CisgICAgdm9p
ZCByZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQoc2l6ZV90KSBmaW5hbDsKICNpZiBFTkFCTEUoUkVT
T1VSQ0VfVVNBR0UpCi0gICAgdm9pZCByZXBvcnRFeHRlcm5hbE1lbW9yeVZpc2l0ZWQoc2l6ZV90
KTsKKyAgICB2b2lkIHJlcG9ydEV4dGVybmFsTWVtb3J5VmlzaXRlZChzaXplX3QpIGZpbmFsOwog
I2VuZGlmCiAgICAgCi0gICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7Ci0KLSAgICBi
b29sIGlzQW5hbHl6aW5nSGVhcCgpIGNvbnN0IHsgcmV0dXJuICEhbV9oZWFwQW5hbHl6ZXI7IH0K
LSAgICBIZWFwQW5hbHl6ZXIqIGhlYXBBbmFseXplcigpIGNvbnN0IHsgcmV0dXJuIG1faGVhcEFu
YWx5emVyOyB9Ci0gICAgCi0gICAgUm9vdE1hcmtSZWFzb24gcm9vdE1hcmtSZWFzb24oKSBjb25z
dCB7IHJldHVybiBtX3Jvb3RNYXJrUmVhc29uOyB9Ci0gICAgdm9pZCBzZXRSb290TWFya1JlYXNv
bihSb290TWFya1JlYXNvbiByZWFzb24pIHsgbV9yb290TWFya1JlYXNvbiA9IHJlYXNvbjsgfQor
ICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0IGZpbmFsOwogCiAgICAgSGVhcFZlcnNp
b24gbWFya2luZ1ZlcnNpb24oKSBjb25zdCB7IHJldHVybiBtX21hcmtpbmdWZXJzaW9uOyB9CiAK
LSAgICBib29sIG11dGF0b3JJc1N0b3BwZWQoKSBjb25zdCB7IHJldHVybiBtX211dGF0b3JJc1N0
b3BwZWQ7IH0KKyAgICBib29sIG11dGF0b3JJc1N0b3BwZWQoKSBjb25zdCBmaW5hbCB7IHJldHVy
biBtX211dGF0b3JJc1N0b3BwZWQ7IH0KICAgICAKICAgICBMb2NrJiByaWdodFRvUnVuKCkgeyBy
ZXR1cm4gbV9yaWdodFRvUnVuOyB9CiAgICAgCkBAIC0xNjQsMjAgKzE3MCwxNyBAQCBwdWJsaWM6
CiAgICAgCiAgICAgdm9pZCBvcHRpbWl6ZUZvclN0b3BwZWRNdXRhdG9yKCk7CiAgICAgCi0gICAg
dm9pZCBkaWRSYWNlKGNvbnN0IFZpc2l0UmFjZUtleSYpOworICAgIHZvaWQgZGlkUmFjZShjb25z
dCBWaXNpdFJhY2VLZXkmKSBmaW5hbDsKICAgICB2b2lkIGRpZFJhY2UoSlNDZWxsKiBjZWxsLCBj
b25zdCBjaGFyKiByZWFzb24pIHsgZGlkUmFjZShWaXNpdFJhY2VLZXkoY2VsbCwgcmVhc29uKSk7
IH0KICAgICAKLSAgICB2b2lkIHZpc2l0QXNDb25zdHJhaW50KGNvbnN0IEpTQ2VsbCopOworICAg
IHZvaWQgdmlzaXRBc0NvbnN0cmFpbnQoY29uc3QgSlNDZWxsKikgZmluYWw7CiAgICAgCiAgICAg
Ym9vbCBkaWRSZWFjaFRlcm1pbmF0aW9uKCk7CiAgICAgCi0gICAgdm9pZCBzZXRJZ25vcmVOZXdP
cGFxdWVSb290cyhib29sIHZhbHVlKSB7IG1faWdub3JlTmV3T3BhcXVlUm9vdHMgPSB2YWx1ZTsg
fQotCiAgICAgdm9pZCBkb25hdGVBbGwoKTsKICAgICAKLSAgICBjb25zdCBjaGFyKiBjb2RlTmFt
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29kZU5hbWUuZGF0YSgpOyB9Ci0gICAgCi0gICAgSlNfRVhQ
T1JUX1BSSVZBVEUgdm9pZCBhZGRQYXJhbGxlbENvbnN0cmFpbnRUYXNrKFJlZlB0cjxTaGFyZWRU
YXNrPHZvaWQoU2xvdFZpc2l0b3ImKT4+KTsKKyAgICB2b2lkIGFkZFBhcmFsbGVsQ29uc3RyYWlu
dFRhc2soUmVmUHRyPFNoYXJlZFRhc2s8dm9pZChBYnN0cmFjdFNsb3RWaXNpdG9yJik+PikgZmlu
YWw7CisgICAgdm9pZCBhZGRQYXJhbGxlbENvbnN0cmFpbnRUYXNrKFJlZlB0cjxTaGFyZWRUYXNr
PHZvaWQoU2xvdFZpc2l0b3ImKT4+KSBmaW5hbDsKIAogcHJpdmF0ZToKICAgICBmcmllbmQgY2xh
c3MgUGFyYWxsZWxNb2RlRW5hYmxlcjsKQEAgLTIxNiwzOSArMjE5LDI1IEBAIHByaXZhdGU6CiAK
ICAgICBNYXJrU3RhY2tBcnJheSYgY29ycmVzcG9uZGluZ0dsb2JhbFN0YWNrKE1hcmtTdGFja0Fy
cmF5Jik7CiAKLSAgICBNYXJrU3RhY2tBcnJheSBtX2NvbGxlY3RvclN0YWNrOwotICAgIE1hcmtT
dGFja0FycmF5IG1fbXV0YXRvclN0YWNrOwotICAgIAotICAgIHNpemVfdCBtX2J5dGVzVmlzaXRl
ZDsKLSAgICBzaXplX3QgbV92aXNpdENvdW50OwotICAgIHNpemVfdCBtX25vbkNlbGxWaXNpdENv
dW50IHsgMCB9OyAvLyBVc2VkIGZvciBpbmNyZW1lbnRhbCBkcmFpbmluZywgaWdub3JlZCBvdGhl
cndpc2UuCi0gICAgQ2hlY2tlZFNpemUgbV9leHRyYU1lbW9yeVNpemUgeyAwIH07Ci0gICAgYm9v
bCBtX2lzSW5QYXJhbGxlbE1vZGU7Ci0gICAgYm9vbCBtX2lnbm9yZU5ld09wYXF1ZVJvb3RzIHsg
ZmFsc2UgfTsgLy8gVXNlZnVsIGFzIGEgZGVidWdnaW5nIG1vZGUuCisgICAgYm9vbCBtX2lzSW5Q
YXJhbGxlbE1vZGUgeyBmYWxzZSB9OwogCiAgICAgSGVhcFZlcnNpb24gbV9tYXJraW5nVmVyc2lv
bjsKLSAgICAKLSAgICBIZWFwJiBtX2hlYXA7CisKKyAgICBzaXplX3QgbV9ieXRlc1Zpc2l0ZWQg
eyAwIH07CisgICAgc2l6ZV90IG1fbm9uQ2VsbFZpc2l0Q291bnQgeyAwIH07IC8vIFVzZWQgZm9y
IGluY3JlbWVudGFsIGRyYWluaW5nLCBpZ25vcmVkIG90aGVyd2lzZS4KKyAgICBDaGVja2VkU2l6
ZSBtX2V4dHJhTWVtb3J5U2l6ZSB7IDAgfTsKIAogICAgIEhlYXBBbmFseXplciogbV9oZWFwQW5h
bHl6ZXIgeyBudWxscHRyIH07CiAgICAgSlNDZWxsKiBtX2N1cnJlbnRDZWxsIHsgbnVsbHB0ciB9
OwotICAgIFJvb3RNYXJrUmVhc29uIG1fcm9vdE1hcmtSZWFzb24geyBSb290TWFya1JlYXNvbjo6
Tm9uZSB9OwogICAgIGJvb2wgbV9pc0ZpcnN0VmlzaXQgeyBmYWxzZSB9OwogICAgIGJvb2wgbV9t
dXRhdG9ySXNTdG9wcGVkIHsgZmFsc2UgfTsKICAgICBib29sIG1fY2FuT3B0aW1pemVGb3JTdG9w
cGVkTXV0YXRvciB7IGZhbHNlIH07CiAgICAgTG9jayBtX3JpZ2h0VG9SdW47CiAgICAgCi0gICAg
Q1N0cmluZyBtX2NvZGVOYW1lOwotICAgIAotICAgIE1hcmtpbmdDb25zdHJhaW50KiBtX2N1cnJl
bnRDb25zdHJhaW50IHsgbnVsbHB0ciB9OwotICAgIE1hcmtpbmdDb25zdHJhaW50U29sdmVyKiBt
X2N1cnJlbnRTb2x2ZXIgeyBudWxscHRyIH07Ci0gICAgCiAgICAgLy8gUHV0IHBhZGRpbmcgaGVy
ZSB0byBtaXRpZ2F0ZSBmYWxzZSBzaGFyaW5nIGJldHdlZW4gbXVsdGlwbGUgU2xvdFZpc2l0b3Jz
LgogICAgIGNoYXIgcGFkZGluZ1s2NF07Ci1wdWJsaWM6CiAjaWYgQVNTRVJUX0VOQUJMRUQKLSAg
ICBib29sIG1faXNDaGVja2luZ0ZvckRlZmF1bHRNYXJrVmlvbGF0aW9uOwotICAgIGJvb2wgbV9p
c0RyYWluaW5nOworICAgIGJvb2wgbV9pc0NoZWNraW5nRm9yRGVmYXVsdE1hcmtWaW9sYXRpb24g
eyBmYWxzZSB9OwogI2VuZGlmCiB9OwogCkBAIC0yNzEsMjMgKzI2MCw0IEBAIHByaXZhdGU6CiAg
ICAgU2xvdFZpc2l0b3ImIG1fc3RhY2s7CiB9OwogCi1jbGFzcyBTZXRSb290TWFya1JlYXNvblNj
b3BlIHsKLXB1YmxpYzoKLSAgICBTZXRSb290TWFya1JlYXNvblNjb3BlKFNsb3RWaXNpdG9yJiB2
aXNpdG9yLCBSb290TWFya1JlYXNvbiByZWFzb24pCi0gICAgICAgIDogbV92aXNpdG9yKHZpc2l0
b3IpCi0gICAgICAgICwgbV9wcmV2aW91c1JlYXNvbih2aXNpdG9yLnJvb3RNYXJrUmVhc29uKCkp
Ci0gICAgewotICAgICAgICBtX3Zpc2l0b3Iuc2V0Um9vdE1hcmtSZWFzb24ocmVhc29uKTsKLSAg
ICB9Ci0KLSAgICB+U2V0Um9vdE1hcmtSZWFzb25TY29wZSgpCi0gICAgewotICAgICAgICBtX3Zp
c2l0b3Iuc2V0Um9vdE1hcmtSZWFzb24obV9wcmV2aW91c1JlYXNvbik7Ci0gICAgfQotCi1wcml2
YXRlOgotICAgIFNsb3RWaXNpdG9yJiBtX3Zpc2l0b3I7Ci0gICAgUm9vdE1hcmtSZWFzb24gbV9w
cmV2aW91c1JlYXNvbjsKLX07Ci0KIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmgJKHJldmlzaW9uIDI3
MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9ySW5saW5lcy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
Mi0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMjUsOSArMjUsMTAgQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNp
bmNsdWRlICJBYnN0cmFjdFNsb3RWaXNpdG9ySW5saW5lcy5oIgorI2luY2x1ZGUgIk1hcmtlZEJs
b2NrLmgiCisjaW5jbHVkZSAiUHJlY2lzZUFsbG9jYXRpb24uaCIKICNpbmNsdWRlICJTbG90Vmlz
aXRvci5oIgotI2luY2x1ZGUgIldlYWsuaCIKLSNpbmNsdWRlICJXZWFrSW5saW5lcy5oIgogCiBu
YW1lc3BhY2UgSlNDIHsKIApAQCAtMTM0LDIxICsxMzUsMTkgQEAgQUxXQVlTX0lOTElORSB2b2lk
IFNsb3RWaXNpdG9yOjphcHBlbmRWYQogICAgICAgICBhcHBlbmRIaWRkZW4oYmFycmllcnNbaV0p
OwogfQogCi1pbmxpbmUgYm9vbCBTbG90VmlzaXRvcjo6YWRkT3BhcXVlUm9vdCh2b2lkKiBwdHIp
CitBTFdBWVNfSU5MSU5FIGJvb2wgU2xvdFZpc2l0b3I6OmlzTWFya2VkKGNvbnN0IHZvaWQqIHAp
IGNvbnN0CiB7Ci0gICAgaWYgKCFwdHIpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAo
bV9pZ25vcmVOZXdPcGFxdWVSb290cykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICgh
aGVhcCgpLT5tX29wYXF1ZVJvb3RzLmFkZChwdHIpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgbV92aXNpdENvdW50Kys7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIGhlYXAoKS0+
aXNNYXJrZWQocCk7CiB9CiAKLWlubGluZSBib29sIFNsb3RWaXNpdG9yOjpjb250YWluc09wYXF1
ZVJvb3Qodm9pZCogcHRyKSBjb25zdAorQUxXQVlTX0lOTElORSBib29sIFNsb3RWaXNpdG9yOjpp
c01hcmtlZChNYXJrZWRCbG9jayYgY29udGFpbmVyLCBIZWFwQ2VsbCogY2VsbCkgY29uc3QKIHsK
LSAgICByZXR1cm4gaGVhcCgpLT5tX29wYXF1ZVJvb3RzLmNvbnRhaW5zKHB0cik7CisgICAgcmV0
dXJuIGNvbnRhaW5lci5pc01hcmtlZChtYXJraW5nVmVyc2lvbigpLCBjZWxsKTsKK30KKworQUxX
QVlTX0lOTElORSBib29sIFNsb3RWaXNpdG9yOjppc01hcmtlZChQcmVjaXNlQWxsb2NhdGlvbiYg
Y29udGFpbmVyLCBIZWFwQ2VsbCogY2VsbCkgY29uc3QKK3sKKyAgICByZXR1cm4gY29udGFpbmVy
LmlzTWFya2VkKG1hcmtpbmdWZXJzaW9uKCksIGNlbGwpOwogfQogCiBpbmxpbmUgdm9pZCBTbG90
VmlzaXRvcjo6cmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKHNpemVfdCBzaXplKQpAQCAtMTY5LDIx
ICsxNjgsNiBAQCBpbmxpbmUgdm9pZCBTbG90VmlzaXRvcjo6cmVwb3J0RXh0ZXJuYWxNCiB9CiAj
ZW5kaWYKIAotaW5saW5lIEhlYXAqIFNsb3RWaXNpdG9yOjpoZWFwKCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gJm1faGVhcDsKLX0KLQotaW5saW5lIFZNJiBTbG90VmlzaXRvcjo6dm0oKQotewotICAg
IHJldHVybiBtX2hlYXAudm0oKTsKLX0KLQotaW5saW5lIGNvbnN0IFZNJiBTbG90VmlzaXRvcjo6
dm0oKSBjb25zdAotewotICAgIHJldHVybiBtX2hlYXAudm0oKTsKLX0KLQogdGVtcGxhdGU8dHlw
ZW5hbWUgRnVuYz4KIEl0ZXJhdGlvblN0YXR1cyBTbG90VmlzaXRvcjo6Zm9yRWFjaE1hcmtTdGFj
ayhjb25zdCBGdW5jJiBmdW5jKQogewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
U2xvdFZpc2l0b3JNYWNyb3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9TbG90VmlzaXRvck1hY3Jvcy5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yTWFjcm9zLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwxMjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
cHJhZ21hIG9uY2UKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEFic3RyYWN0U2xvdFZpc2l0
b3I7CitjbGFzcyBKU0NlbGw7CitjbGFzcyBTbG90VmlzaXRvcjsKKworI2RlZmluZSBVTlVTRURf
TU9ESUZJRVJfQVJHVU1FTlQgLyogdW51c2VkICovCisKKyNkZWZpbmUgREVDTEFSRV9VTlVTRURf
U1RSVUNUX1RPX1RFUk1JTkFURV9WSVNJVF9NQUNST19FWFBBTkRFUl9JTVBMKGNvdW50ZXIpIFwK
KyAgICBzdHJ1Y3QgVW51c2VkU2xvdFZpc2l0b3JNYWNyb1N0cnVjdFNvV2VDYW5IYXZlQVNlbWlj
b2xvbiMjY291bnRlciB7IH0KKworI2RlZmluZSBERUNMQVJFX1VOVVNFRF9TVFJVQ1RfVE9fVEVS
TUlOQVRFX1ZJU0lUX01BQ1JPX0VYUEFOREVSKGNvdW50ZXIpIFwKKyAgICBERUNMQVJFX1VOVVNF
RF9TVFJVQ1RfVE9fVEVSTUlOQVRFX1ZJU0lUX01BQ1JPX0VYUEFOREVSX0lNUEwoY291bnRlcikK
KworI2RlZmluZSBERUNMQVJFX1VOVVNFRF9TVFJVQ1RfVE9fVEVSTUlOQVRFX1ZJU0lUX01BQ1JP
IFwKKyAgICBERUNMQVJFX1VOVVNFRF9TVFJVQ1RfVE9fVEVSTUlOQVRFX1ZJU0lUX01BQ1JPX0VY
UEFOREVSKF9fQ09VTlRFUl9fKQorCisvLyBNYWNyb3MgZm9yIHZpc2l0QWdncmVnYXRlKCkuCisK
KyNkZWZpbmUgREVDTEFSRV9WSVNJVF9BR0dSRUdBVEVfV0lUSF9NT0RJRklFUihwb3N0TW9kaWZp
ZXIpIFwKK3ByaXZhdGU6IFwKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiBBTFdBWVNf
SU5MSU5FIHZvaWQgdmlzaXRBZ2dyZWdhdGVJbXBsKFZpc2l0b3ImKSBwb3N0TW9kaWZpZXI7IFwK
K3B1YmxpYzogXAorICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoQWJzdHJhY3RTbG90VmlzaXRvciYp
IHBvc3RNb2RpZmllcjsgXAorICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImKSBw
b3N0TW9kaWZpZXIKKworI2RlZmluZSBERUNMQVJFX1ZJU0lUX0FHR1JFR0FURSBcCisgICAgREVD
TEFSRV9WSVNJVF9BR0dSRUdBVEVfV0lUSF9NT0RJRklFUihVTlVTRURfTU9ESUZJRVJfQVJHVU1F
TlQpCisKKyNkZWZpbmUgREVGSU5FX1ZJU0lUX0FHR1JFR0FURV9XSVRIX01PRElGSUVSKGNsYXNz
TmFtZSwgcG9zdE1vZGlmaWVyKSBcCisgICAgdm9pZCBjbGFzc05hbWU6OnZpc2l0QWdncmVnYXRl
KEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpIHBvc3RNb2RpZmllciB7IHZpc2l0QWdncmVn
YXRlSW1wbCh2aXNpdG9yKTsgfSBcCisgICAgdm9pZCBjbGFzc05hbWU6OnZpc2l0QWdncmVnYXRl
KFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBwb3N0TW9kaWZpZXIgeyB2aXNpdEFnZ3JlZ2F0ZUltcGwo
dmlzaXRvcik7IH0gXAorICAgIERFQ0xBUkVfVU5VU0VEX1NUUlVDVF9UT19URVJNSU5BVEVfVklT
SVRfTUFDUk8KKworI2RlZmluZSBERUZJTkVfVklTSVRfQUdHUkVHQVRFKGNsYXNzTmFtZSkgXAor
ICAgIERFRklORV9WSVNJVF9BR0dSRUdBVEVfV0lUSF9NT0RJRklFUihjbGFzc05hbWUsIFVOVVNF
RF9NT0RJRklFUl9BUkdVTUVOVCkKKworLy8gTWFjcm9zIGZvciBzdGF0aWMgdmlzaXRDaGlsZHJl
bigpLgorCisjZGVmaW5lIERFQ0xBUkVfVklTSVRfQ0hJTERSRU5fV0lUSF9NT0RJRklFUihwcmVN
b2RpZmllcikgXAorcHJpdmF0ZTogXAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IEFM
V0FZU19JTkxJTkUgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiwgVmlzaXRv
ciYpOyBcCitwdWJsaWM6IFwKKyAgICBwcmVNb2RpZmllciBzdGF0aWMgdm9pZCB2aXNpdENoaWxk
cmVuKEpTQ2VsbCosIEFic3RyYWN0U2xvdFZpc2l0b3ImKTsgXAorICAgIHByZU1vZGlmaWVyIHN0
YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKQorCisjZGVmaW5l
IERFQ0xBUkVfVklTSVRfQ0hJTERSRU4gXAorICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU5fV0lU
SF9NT0RJRklFUihVTlVTRURfTU9ESUZJRVJfQVJHVU1FTlQpCisKKyNkZWZpbmUgREVGSU5FX1ZJ
U0lUX0NISUxEUkVOX1dJVEhfTU9ESUZJRVIocHJlTW9kaWZpZXIsIGNsYXNzTmFtZSkgXAorICAg
IHByZU1vZGlmaWVyIHZvaWQgY2xhc3NOYW1lOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwg
QWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikgXAorICAgIHsgXAorICAgICAgICBBYnN0cmFj
dFNsb3RWaXNpdG9yOjpDb250ZXh0IGNvbnRleHQodmlzaXRvciwgY2VsbCk7IFwKKyAgICAgICAg
dmlzaXRDaGlsZHJlbkltcGwoY2VsbCwgdmlzaXRvcik7IFwKKyAgICB9IFwKKyAgICBwcmVNb2Rp
ZmllciB2b2lkIGNsYXNzTmFtZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNp
dG9yJiB2aXNpdG9yKSB7IHZpc2l0Q2hpbGRyZW5JbXBsKGNlbGwsIHZpc2l0b3IpOyB9IFwKKyAg
ICBERUNMQVJFX1VOVVNFRF9TVFJVQ1RfVE9fVEVSTUlOQVRFX1ZJU0lUX01BQ1JPCisKKyNkZWZp
bmUgREVGSU5FX1ZJU0lUX0NISUxEUkVOKGNsYXNzTmFtZSkgXAorICAgIERFRklORV9WSVNJVF9D
SElMRFJFTl9XSVRIX01PRElGSUVSKFVOVVNFRF9NT0RJRklFUl9BUkdVTUVOVCwgY2xhc3NOYW1l
KQorCisvLyBNYWNyb3MgZm9yIHN0YXRpYyB2aXNpdE91dHB1dENvbnN0cmFpbnRzKCkuCisKKyNk
ZWZpbmUgREVDTEFSRV9WSVNJVF9PVVRQVVRfQ09OU1RSQUlOVFNfV0lUSF9NT0RJRklFUihwcmVN
b2RpZmllcikgXAorcHJpdmF0ZTogXAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IEFM
V0FZU19JTkxJTkUgc3RhdGljIHZvaWQgdmlzaXRPdXRwdXRDb25zdHJhaW50c0ltcGwoSlNDZWxs
KiwgVmlzaXRvciYpOyBcCitwdWJsaWM6IFwKKyAgICBwcmVNb2RpZmllciBzdGF0aWMgdm9pZCB2
aXNpdE91dHB1dENvbnN0cmFpbnRzKEpTQ2VsbCosIEFic3RyYWN0U2xvdFZpc2l0b3ImKTsgXAor
ICAgIHByZU1vZGlmaWVyIHN0YXRpYyB2b2lkIHZpc2l0T3V0cHV0Q29uc3RyYWludHMoSlNDZWxs
KiwgU2xvdFZpc2l0b3ImKQorCisjZGVmaW5lIERFQ0xBUkVfVklTSVRfT1VUUFVUX0NPTlNUUkFJ
TlRTIFwKKyAgICBERUNMQVJFX1ZJU0lUX09VVFBVVF9DT05TVFJBSU5UU19XSVRIX01PRElGSUVS
KFVOVVNFRF9NT0RJRklFUl9BUkdVTUVOVCkKKworI2RlZmluZSBERUZJTkVfVklTSVRfT1VUUFVU
X0NPTlNUUkFJTlRTX1dJVEhfTU9ESUZJRVIocHJlTW9kaWZpZXIsIGNsYXNzTmFtZSkgXAorICAg
IHByZU1vZGlmaWVyIHZvaWQgY2xhc3NOYW1lOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzKEpTQ2Vs
bCogY2VsbCwgQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikgXAorICAgIHsgXAorICAgICAg
ICBBYnN0cmFjdFNsb3RWaXNpdG9yOjpDb250ZXh0IGNvbnRleHQodmlzaXRvciwgY2VsbCk7IFwK
KyAgICAgICAgdmlzaXRPdXRwdXRDb25zdHJhaW50c0ltcGwoY2VsbCwgdmlzaXRvcik7IFwKKyAg
ICB9IFwKKyAgICBwcmVNb2RpZmllciB2b2lkIGNsYXNzTmFtZTo6dmlzaXRPdXRwdXRDb25zdHJh
aW50cyhKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKSB7IHZpc2l0T3V0cHV0Q29u
c3RyYWludHNJbXBsKGNlbGwsIHZpc2l0b3IpOyB9IFwKKyAgICBERUNMQVJFX1VOVVNFRF9TVFJV
Q1RfVE9fVEVSTUlOQVRFX1ZJU0lUX01BQ1JPCisKKyNkZWZpbmUgREVGSU5FX1ZJU0lUX09VVFBV
VF9DT05TVFJBSU5UUyhjbGFzc05hbWUpIFwKKyAgICBERUZJTkVfVklTSVRfT1VUUFVUX0NPTlNU
UkFJTlRTX1dJVEhfTU9ESUZJRVIoVU5VU0VEX01PRElGSUVSX0FSR1VNRU5ULCBjbGFzc05hbWUp
CisKKy8vIE1hY3JvcyBmb3IgdmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oKS4KKworI2RlZmluZSBE
RUZJTkVfVklTSVRfQURESVRJT05BTF9DSElMRFJFTihjbGFzc05hbWUpIFwKKyAgICB0ZW1wbGF0
ZSB2b2lkIGNsYXNzTmFtZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpBYnN0cmFjdFNs
b3RWaXNpdG9yJik7IFwKKyAgICB0ZW1wbGF0ZSB2b2lkIGNsYXNzTmFtZTo6dmlzaXRBZGRpdGlv
bmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYpCisKK30gLy8gbmFtZXNwYWNlIEpTQworCit1
c2luZyBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3I7Cit1c2luZyBKU0M6OkpTQ2VsbDsKK3VzaW5n
IEpTQzo6U2xvdFZpc2l0b3I7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdWJz
cGFjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N1YnNwYWNl
LmgJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N1YnNw
YWNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDE3LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNCw2ICszNCw3IEBACiAKIG5hbWVzcGFjZSBKU0Mg
ewogCitjbGFzcyBBYnN0cmFjdFNsb3RWaXNpdG9yOwogY2xhc3MgQWxpZ25lZE1lbW9yeUFsbG9j
YXRvcjsKIGNsYXNzIEhlYXBDZWxsVHlwZTsKIApAQCAtODYsOCArODcsOCBAQCBwdWJsaWM6CiAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KICAgICB2b2lkIGZvckVhY2hNYXJrZWRDZWxsKGNv
bnN0IEZ1bmMmKTsKICAgICAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgotICAgIFJlZjxT
aGFyZWRUYXNrPHZvaWQoU2xvdFZpc2l0b3ImKT4+IGZvckVhY2hNYXJrZWRDZWxsSW5QYXJhbGxl
bChjb25zdCBGdW5jJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvciwgdHlwZW5hbWUg
RnVuYz4KKyAgICBSZWY8U2hhcmVkVGFzazx2b2lkKFZpc2l0b3ImKT4+IGZvckVhY2hNYXJrZWRD
ZWxsSW5QYXJhbGxlbChjb25zdCBGdW5jJik7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5j
PgogICAgIHZvaWQgZm9yRWFjaExpdmVDZWxsKGNvbnN0IEZ1bmMmKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL1N1YnNwYWNlSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N1YnNwYWNlSW5saW5lcy5oCShyZXZpc2lvbiAyNzI5MDIp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdWJzcGFjZUlubGluZXMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAxOCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTg1LDEwICs4NSwxMCBAQCB2b2lkIFN1YnNwYWNlOjpmb3JFYWNoTWFya2Vk
Q2VsbChjb25zdCBGCiAgICAgICAgIH0pOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgot
UmVmPFNoYXJlZFRhc2s8dm9pZChTbG90VmlzaXRvciYpPj4gU3Vic3BhY2U6OmZvckVhY2hNYXJr
ZWRDZWxsSW5QYXJhbGxlbChjb25zdCBGdW5jJiBmdW5jKQordGVtcGxhdGU8dHlwZW5hbWUgVmlz
aXRvciwgdHlwZW5hbWUgRnVuYz4KK1JlZjxTaGFyZWRUYXNrPHZvaWQoVmlzaXRvciYpPj4gU3Vi
c3BhY2U6OmZvckVhY2hNYXJrZWRDZWxsSW5QYXJhbGxlbChjb25zdCBGdW5jJiBmdW5jKQogewot
ICAgIGNsYXNzIFRhc2sgZmluYWwgOiBwdWJsaWMgU2hhcmVkVGFzazx2b2lkKFNsb3RWaXNpdG9y
Jik+IHsKKyAgICBjbGFzcyBUYXNrIGZpbmFsIDogcHVibGljIFNoYXJlZFRhc2s8dm9pZChWaXNp
dG9yJik+IHsKICAgICBwdWJsaWM6CiAgICAgICAgIFRhc2soU3Vic3BhY2UmIHN1YnNwYWNlLCBj
b25zdCBGdW5jJiBmdW5jKQogICAgICAgICAgICAgOiBtX3N1YnNwYWNlKHN1YnNwYWNlKQpAQCAt
OTcsNyArOTcsNyBAQCBSZWY8U2hhcmVkVGFzazx2b2lkKFNsb3RWaXNpdG9yJik+PiBTdWJzCiAg
ICAgICAgIHsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgdm9pZCBydW4oU2xvdFZpc2l0
b3ImIHZpc2l0b3IpIGZpbmFsCisgICAgICAgIHZvaWQgcnVuKFZpc2l0b3ImIHZpc2l0b3IpIGZp
bmFsCiAgICAgICAgIHsKICAgICAgICAgICAgIHdoaWxlIChNYXJrZWRCbG9jazo6SGFuZGxlKiBo
YW5kbGUgPSBtX2Jsb2NrU291cmNlLT5ydW4oKSkgewogICAgICAgICAgICAgICAgIGhhbmRsZS0+
Zm9yRWFjaE1hcmtlZENlbGwoCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9WZXJp
ZmllclNsb3RWaXNpdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9WZXJpZmllclNsb3RWaXNpdG9yLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9WZXJpZmllclNsb3RWaXNpdG9yLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDM0NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJWZXJpZmllclNsb3RWaXNpdG9yLmgiCisKKyNpbmNsdWRlICJCbG9ja0RpcmVjdG9yeUlu
bGluZXMuaCIKKyNpbmNsdWRlICJDb25zZXJ2YXRpdmVSb290cy5oIgorI2luY2x1ZGUgIkdDU2Vn
bWVudGVkQXJyYXlJbmxpbmVzLmgiCisjaW5jbHVkZSAiSGVhcENlbGwuaCIKKyNpbmNsdWRlICJK
U0NJbmxpbmVzLmgiCisjaW5jbHVkZSAiVk0uaCIKKyNpbmNsdWRlICJWZXJpZmllclNsb3RWaXNp
dG9ySW5saW5lcy5oIgorI2luY2x1ZGUgPHd0Zi9TdGFja1RyYWNlLmg+CisKK25hbWVzcGFjZSBK
U0MgeworCit1c2luZyBNYXJrZXJEYXRhID0gVmVyaWZpZXJTbG90VmlzaXRvcjo6TWFya2VyRGF0
YTsKKworY29uc3RleHByIGludCBtYXhNYXJraW5nU3RhY2tGcmFtZXNUb0NhcHR1cmUgPSAxMDA7
CisKK01hcmtlckRhdGE6Ok1hcmtlckRhdGEoSGVhcENlbGwqIHBhcmVudCwgc3RkOjp1bmlxdWVf
cHRyPFN0YWNrVHJhY2U+JiYgc3RhY2spCisgICAgOiBwYXJlbnQocGFyZW50KQorICAgICwgc3Rh
Y2soV1RGTW92ZShzdGFjaykpCit7Cit9CisKK1ZlcmlmaWVyU2xvdFZpc2l0b3I6Ok1hcmtlZEJs
b2NrRGF0YTo6TWFya2VkQmxvY2tEYXRhKE1hcmtlZEJsb2NrKiBibG9jaykKKyAgICA6IG1fYmxv
Y2soYmxvY2spCit7Cit9CisKK3ZvaWQgVmVyaWZpZXJTbG90VmlzaXRvcjo6TWFya2VkQmxvY2tE
YXRhOjphZGRNYXJrZXJEYXRhKHVuc2lnbmVkIGF0b21OdW1iZXIsIE1hcmtlckRhdGEmJiBtYXJr
ZXIpCit7CisgICAgaWYgKG1fbWFya2Vycy5pc0VtcHR5KCkpCisgICAgICAgIG1fbWFya2Vycy5n
cm93KE1hcmtlZEJsb2NrOjphdG9tc1BlckJsb2NrKTsKKyAgICBtX21hcmtlcnNbYXRvbU51bWJl
cl0gPSBXVEZNb3ZlKG1hcmtlcik7Cit9CisKK2NvbnN0IE1hcmtlckRhdGEqIFZlcmlmaWVyU2xv
dFZpc2l0b3I6Ok1hcmtlZEJsb2NrRGF0YTo6bWFya2VyRGF0YSh1bnNpZ25lZCBhdG9tTnVtYmVy
KSBjb25zdAoreworICAgIGF1dG8mIG1hcmtlciA9IG1fbWFya2Vyc1thdG9tTnVtYmVyXTsKKyAg
ICBpZiAobWFya2VyLnN0YWNrKQorICAgICAgICByZXR1cm4gJm1hcmtlcjsKKyAgICByZXR1cm4g
bnVsbHB0cjsKK30KKworVmVyaWZpZXJTbG90VmlzaXRvcjo6UHJlY2lzZUFsbG9jYXRpb25EYXRh
OjpQcmVjaXNlQWxsb2NhdGlvbkRhdGEoUHJlY2lzZUFsbG9jYXRpb24qIGFsbG9jYXRpb24pCisg
ICAgOiBtX2FsbG9jYXRpb24oYWxsb2NhdGlvbikKK3sKK30KKworY29uc3QgTWFya2VyRGF0YSog
VmVyaWZpZXJTbG90VmlzaXRvcjo6UHJlY2lzZUFsbG9jYXRpb25EYXRhOjptYXJrZXJEYXRhKCkg
Y29uc3QKK3sKKyAgICBpZiAobV9tYXJrZXIuc3RhY2spCisgICAgICAgIHJldHVybiAmbV9tYXJr
ZXI7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK3ZvaWQgVmVyaWZpZXJTbG90VmlzaXRvcjo6
UHJlY2lzZUFsbG9jYXRpb25EYXRhOjphZGRNYXJrZXJEYXRhKE1hcmtlckRhdGEmJiBtYXJrZXIp
Cit7CisgICAgbV9tYXJrZXIgPSBXVEZNb3ZlKG1hcmtlcik7Cit9CisKK1ZlcmlmaWVyU2xvdFZp
c2l0b3I6OlZlcmlmaWVyU2xvdFZpc2l0b3IoSGVhcCYgaGVhcCkKKyAgICA6IEJhc2UoaGVhcCwg
IlZlcmlmaWVyIiwgbV9vcGFxdWVSb290U3RvcmFnZSkKK3sKK30KKworVmVyaWZpZXJTbG90Vmlz
aXRvcjo6flZlcmlmaWVyU2xvdFZpc2l0b3IoKQoreworICAgIGhlYXAoKS0+b2JqZWN0U3BhY2Uo
KS5mb3JFYWNoQmxvY2soCisgICAgICAgIFsmXSAoTWFya2VkQmxvY2s6OkhhbmRsZSogaGFuZGxl
KSB7CisgICAgICAgICAgICBoYW5kbGUtPmJsb2NrKCkuc2V0VmVyaWZpZXJNZW1vKG51bGxwdHIp
OworICAgICAgICB9KTsKK30KKwordm9pZCBWZXJpZmllclNsb3RWaXNpdG9yOjphZGRQYXJhbGxl
bENvbnN0cmFpbnRUYXNrKFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoQWJzdHJhY3RTbG90VmlzaXRv
ciYpPj4gdGFzaykKK3sKKyAgICBtX2NvbnN0cmFpbnRUYXNrcy5hcHBlbmQoV1RGTW92ZSh0YXNr
KSk7Cit9CisKK05PX1JFVFVSTl9EVUVfVE9fQ1JBU0ggdm9pZCBWZXJpZmllclNsb3RWaXNpdG9y
OjphZGRQYXJhbGxlbENvbnN0cmFpbnRUYXNrKFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoU2xvdFZp
c2l0b3ImKT4+KQoreworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK3Zv
aWQgVmVyaWZpZXJTbG90VmlzaXRvcjo6ZXhlY3V0ZUNvbnN0cmFpbnRUYXNrcygpCit7CisgICAg
d2hpbGUgKCFtX2NvbnN0cmFpbnRUYXNrcy5pc0VtcHR5KCkpCisgICAgICAgIG1fY29uc3RyYWlu
dFRhc2tzLnRha2VGaXJzdCgpLT5ydW4oKnRoaXMpOworfQorCit2b2lkIFZlcmlmaWVyU2xvdFZp
c2l0b3I6OmFwcGVuZChjb25zdCBDb25zZXJ2YXRpdmVSb290cyYgY29uc2VydmF0aXZlUm9vdHMp
Cit7CisgICAgYXV0byBhcHBlbmRKU0NlbGxPckF1eGlsaWFyeSA9IFsmXSAoSGVhcENlbGwqIGhl
YXBDZWxsKSB7CisgICAgICAgIGlmICghaGVhcENlbGwpCisgICAgICAgICAgICByZXR1cm47CisK
KyAgICAgICAgaWYgKHRlc3RBbmRTZXRNYXJrZWQoaGVhcENlbGwpKQorICAgICAgICAgICAgcmV0
dXJuOworCisgICAgICAgIHN3aXRjaCAoaGVhcENlbGwtPmNlbGxLaW5kKCkpIHsKKyAgICAgICAg
Y2FzZSBIZWFwQ2VsbDo6SlNDZWxsOgorICAgICAgICBjYXNlIEhlYXBDZWxsOjpKU0NlbGxXaXRo
SW5kZXhpbmdIZWFkZXI6IHsKKyAgICAgICAgICAgIEpTQ2VsbCoganNDZWxsID0gc3RhdGljX2Nh
c3Q8SlNDZWxsKj4oaGVhcENlbGwpOworICAgICAgICAgICAgYXBwZW5kVG9NYXJrU3RhY2soanND
ZWxsKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgSGVh
cENlbGw6OkF1eGlsaWFyeToKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH07
CisKKyAgICBIZWFwQ2VsbCoqIHJvb3RzID0gY29uc2VydmF0aXZlUm9vdHMucm9vdHMoKTsKKyAg
ICBzaXplX3Qgc2l6ZSA9IGNvbnNlcnZhdGl2ZVJvb3RzLnNpemUoKTsKKyAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IHNpemU7ICsraSkKKyAgICAgICAgYXBwZW5kSlNDZWxsT3JBdXhpbGlhcnko
cm9vdHNbaV0pOworfQorCit2b2lkIFZlcmlmaWVyU2xvdFZpc2l0b3I6OmFwcGVuZFRvTWFya1N0
YWNrKEpTQ2VsbCogY2VsbCkKK3sKKyAgICBBU1NFUlQoIWNlbGwtPmlzWmFwcGVkKCkpOworICAg
IG1fY29sbGVjdG9yU3RhY2suYXBwZW5kKGNlbGwpOworfQorCit2b2lkIFZlcmlmaWVyU2xvdFZp
c2l0b3I6OmFwcGVuZFVuYmFycmllcmVkKEpTQ2VsbCogY2VsbCkKK3sKKyAgICBpZiAoIWNlbGwp
CisgICAgICAgIHJldHVybjsKKworICAgIGlmIChVTkxJS0VMWShjZWxsLT5pc1ByZWNpc2VBbGxv
Y2F0aW9uKCkpKSB7CisgICAgICAgIGlmIChMSUtFTFkoaXNNYXJrZWQoY2VsbC0+cHJlY2lzZUFs
bG9jYXRpb24oKSwgY2VsbCkpKQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIE1hcmtlZEJsb2NrJiBibG9jayA9IGNlbGwtPm1hcmtlZEJsb2NrKCk7CisgICAgICAg
IGlmIChMSUtFTFkoaXNNYXJrZWQoYmxvY2ssIGNlbGwpKSkKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBhcHBlbmRTbG93KGNlbGwpOworfQorCit2b2lkIFZlcmlmaWVyU2xvdFZp
c2l0b3I6OmFwcGVuZEhpZGRlblVuYmFycmllcmVkKEpTQ2VsbCogY2VsbCkKK3sKKyAgICBhcHBl
bmRVbmJhcnJpZXJlZChjZWxsKTsKK30KKwordm9pZCBWZXJpZmllclNsb3RWaXNpdG9yOjpkcmFp
bigpCit7CisgICAgUkVMRUFTRV9BU1NFUlQobV9tdXRhdG9yU3RhY2suaXNFbXB0eSgpKTsKKwor
ICAgIE1hcmtTdGFja0FycmF5JiBzdGFjayA9IG1fY29sbGVjdG9yU3RhY2s7CisgICAgaWYgKHN0
YWNrLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgc3RhY2sucmVmaWxsKCk7Cisg
ICAgd2hpbGUgKHN0YWNrLmNhblJlbW92ZUxhc3QoKSkKKyAgICAgICAgdmlzaXRDaGlsZHJlbihz
dGFjay5yZW1vdmVMYXN0KCkpOworfQorCit2b2lkIFZlcmlmaWVyU2xvdFZpc2l0b3I6OmR1bXBN
YXJrZXJEYXRhKEhlYXBDZWxsKiBjZWxsKQoreworICAgIGlmIChjZWxsLT5pc1ByZWNpc2VBbGxv
Y2F0aW9uKCkpCisgICAgICAgIHJldHVybiBkdW1wTWFya2VyRGF0YShjZWxsLT5wcmVjaXNlQWxs
b2NhdGlvbigpLCBjZWxsKTsKKyAgICByZXR1cm4gZHVtcE1hcmtlckRhdGEoY2VsbC0+bWFya2Vk
QmxvY2soKSwgY2VsbCk7Cit9CisKK3ZvaWQgVmVyaWZpZXJTbG90VmlzaXRvcjo6ZHVtcE1hcmtl
ckRhdGEoUHJlY2lzZUFsbG9jYXRpb24mIGFsbG9jYXRpb24sIEhlYXBDZWxsKiBjZWxsKQorewor
ICAgIGF1dG8gaXRlcmF0b3IgPSBtX3ByZWNpc2VBbGxvY2F0aW9uTWFwLmZpbmQoJmFsbG9jYXRp
b24pOworICAgIGlmIChpdGVyYXRvciAhPSBtX3ByZWNpc2VBbGxvY2F0aW9uTWFwLmVuZCgpKSB7
CisgICAgICAgIGR1bXBNYXJrZXJEYXRhKGNlbGwsIGl0ZXJhdG9yLT52YWx1ZS0+bWFya2VyRGF0
YSgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBkYXRhTG9nTG4oIkNlbGwgIiwgUmF3
UG9pbnRlcihjZWxsKSwgIiBub3QgZm91bmQiKTsKK30KKwordm9pZCBWZXJpZmllclNsb3RWaXNp
dG9yOjpkdW1wTWFya2VyRGF0YShNYXJrZWRCbG9jayYgYmxvY2ssIEhlYXBDZWxsKiBjZWxsKQor
eworICAgIGF1dG8gaXRlcmF0b3IgPSBtX21hcmtlZEJsb2NrTWFwLmZpbmQoJmJsb2NrKTsKKyAg
ICBpZiAoaXRlcmF0b3IgIT0gbV9tYXJrZWRCbG9ja01hcC5lbmQoKSkgeworICAgICAgICB1bnNp
Z25lZCBhdG9tTnVtYmVyID0gYmxvY2suYXRvbU51bWJlcihjZWxsKTsKKyAgICAgICAgZHVtcE1h
cmtlckRhdGEoY2VsbCwgaXRlcmF0b3ItPnZhbHVlLT5tYXJrZXJEYXRhKGF0b21OdW1iZXIpKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBkYXRhTG9nTG4oIkNlbGwgIiwgUmF3UG9pbnRl
cihjZWxsKSwgIiBub3QgZm91bmQiKTsKK30KKwordm9pZCBWZXJpZmllclNsb3RWaXNpdG9yOjpk
dW1wTWFya2VyRGF0YShIZWFwQ2VsbCogY2VsbCwgY29uc3QgTWFya2VyRGF0YSogbWFya2VyKQor
eworICAgIGlmICghbWFya2VyKSB7CisgICAgICAgIGRhdGFMb2dMbigiTWFya2VyIGRhdGEgaXMg
bm90IGF2YWlsYWJsZSBmb3IgY2VsbCAiLCBSYXdQb2ludGVyKGNlbGwpKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIGRhdGFMb2dMbigiQ2VsbCAiLCBSYXdQb2ludGVyKGNlbGwpLCAi
IHdhcyByZWFjaGFibGUgdmlhIGNlbGwgIiwgUmF3UG9pbnRlcihtYXJrZXItPnBhcmVudCksICIg
YXQ6Iik7CisgICAgbWFya2VyLT5zdGFjay0+ZHVtcChXVEY6OmRhdGFGaWxlKCksICIgICAgIik7
Cit9CisKK2Jvb2wgVmVyaWZpZXJTbG90VmlzaXRvcjo6aXNGaXJzdFZpc2l0KCkgY29uc3QKK3sK
KyAgICAvLyBJbiB0aGUgcmVndWxhciBHQywgdGhpcyByZXR1cm4gdmFsdWUgaXMgb25seSB1c2Vk
IHRvIGNvbnRyb2wgd2hldGhlcgorICAgIC8vIFVubGlua2VkQ29kZUJsb2NrcyB3aWxsIGJlIGFn
ZWQgKHNlZSBVbmxpbmtlZENvZGVCbG9jazo6dmlzaXRDaGlsZHJlbkltcGwoKSkuCisgICAgLy8g
Rm9yIHRoZSB2ZXJpZmllciBHQyBwYXNzLCB3ZSBzaG91bGQgYWx3YXlzIHJldHVybiBmYWxzZSBi
ZWNhdXNlIHdlIGRvbid0CisgICAgLy8gd2FudCB0byBkbyB0aGUgYWdpbmcgYWN0aW9uIGFnYWlu
LgorICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBWZXJpZmllclNsb3RWaXNpdG9yOjppc01h
cmtlZChjb25zdCB2b2lkKiByYXdDZWxsKSBjb25zdAoreworICAgIEhlYXBDZWxsKiBjZWxsID0g
Yml0d2lzZV9jYXN0PEhlYXBDZWxsKj4ocmF3Q2VsbCk7CisgICAgaWYgKGNlbGwtPmlzUHJlY2lz
ZUFsbG9jYXRpb24oKSkKKyAgICAgICAgcmV0dXJuIGlzTWFya2VkKGNlbGwtPnByZWNpc2VBbGxv
Y2F0aW9uKCksIGNlbGwpOworICAgIHJldHVybiBpc01hcmtlZChjZWxsLT5tYXJrZWRCbG9jaygp
LCBjZWxsKTsKK30KKworYm9vbCBWZXJpZmllclNsb3RWaXNpdG9yOjppc01hcmtlZChQcmVjaXNl
QWxsb2NhdGlvbiYgYWxsb2NhdGlvbiwgSGVhcENlbGwqKSBjb25zdAoreworICAgIHJldHVybiBt
X3ByZWNpc2VBbGxvY2F0aW9uTWFwLmNvbnRhaW5zKCZhbGxvY2F0aW9uKTsKK30KKworYm9vbCBW
ZXJpZmllclNsb3RWaXNpdG9yOjppc01hcmtlZChNYXJrZWRCbG9jayYgYmxvY2ssIEhlYXBDZWxs
KiBjZWxsKSBjb25zdAoreworICAgIGF1dG8gZW50cnkgPSBtX21hcmtlZEJsb2NrTWFwLmZpbmQo
JmJsb2NrKTsKKyAgICBpZiAoZW50cnkgPT0gbV9tYXJrZWRCbG9ja01hcC5lbmQoKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgYXV0byYgZGF0YSA9IGVudHJ5LT52YWx1ZTsKKyAgICB1
bnNpZ25lZCBhdG9tTnVtYmVyID0gYmxvY2suYXRvbU51bWJlcihjZWxsKTsKKyAgICByZXR1cm4g
ZGF0YS0+aXNNYXJrZWQoYXRvbU51bWJlcik7Cit9CisKK3ZvaWQgVmVyaWZpZXJTbG90VmlzaXRv
cjo6bWFya0F1eGlsaWFyeShjb25zdCB2b2lkKiBiYXNlKQoreworICAgIEhlYXBDZWxsKiBjZWxs
ID0gYml0d2lzZV9jYXN0PEhlYXBDZWxsKj4oYmFzZSk7CisKKyAgICBBU1NFUlQoY2VsbC0+aGVh
cCgpID09IGhlYXAoKSk7CisgICAgdGVzdEFuZFNldE1hcmtlZChjZWxsKTsKK30KKworYm9vbCBW
ZXJpZmllclNsb3RWaXNpdG9yOjptdXRhdG9ySXNTdG9wcGVkKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKworYm9vbCBWZXJpZmllclNsb3RWaXNpdG9yOjp0ZXN0QW5kU2V0TWFya2Vk
KGNvbnN0IHZvaWQqIHJhd0NlbGwpCit7CisgICAgSGVhcENlbGwqIGNlbGwgPSBiaXR3aXNlX2Nh
c3Q8SGVhcENlbGwqPihyYXdDZWxsKTsKKyAgICBpZiAoY2VsbC0+aXNQcmVjaXNlQWxsb2NhdGlv
bigpKQorICAgICAgICByZXR1cm4gdGVzdEFuZFNldE1hcmtlZChjZWxsLT5wcmVjaXNlQWxsb2Nh
dGlvbigpKTsKKyAgICByZXR1cm4gdGVzdEFuZFNldE1hcmtlZChjZWxsLT5tYXJrZWRCbG9jaygp
LCBjZWxsKTsKK30KKworYm9vbCBWZXJpZmllclNsb3RWaXNpdG9yOjp0ZXN0QW5kU2V0TWFya2Vk
KFByZWNpc2VBbGxvY2F0aW9uJiBhbGxvY2F0aW9uKQoreworICAgIHN0ZDo6dW5pcXVlX3B0cjxQ
cmVjaXNlQWxsb2NhdGlvbkRhdGE+JiBkYXRhID0gbV9wcmVjaXNlQWxsb2NhdGlvbk1hcC5hZGQo
JmFsbG9jYXRpb24sIG51bGxwdHIpLml0ZXJhdG9yLT52YWx1ZTsKKyAgICBpZiAoIWRhdGEpIHsK
KyAgICAgICAgZGF0YSA9IG1ha2VVbmlxdWU8UHJlY2lzZUFsbG9jYXRpb25EYXRhPigmYWxsb2Nh
dGlvbik7CisgICAgICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjp2ZXJib3NlVmVyaWZ5R0MoKSkp
CisgICAgICAgICAgICBkYXRhLT5hZGRNYXJrZXJEYXRhKHsgcGFyZW50Q2VsbCgpLCBTdGFja1Ry
YWNlOjpjYXB0dXJlU3RhY2tUcmFjZShtYXhNYXJraW5nU3RhY2tGcmFtZXNUb0NhcHR1cmUsIDIp
IH0pOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQor
Citib29sIFZlcmlmaWVyU2xvdFZpc2l0b3I6OnRlc3RBbmRTZXRNYXJrZWQoTWFya2VkQmxvY2sm
IGJsb2NrLCBIZWFwQ2VsbCogY2VsbCkKK3sKKyAgICBNYXJrZWRCbG9ja0RhdGEqIGRhdGEgPSBi
bG9jay52ZXJpZmllck1lbW88TWFya2VkQmxvY2tEYXRhKj4oKTsKKyAgICBpZiAoVU5MSUtFTFko
IWRhdGEpKSB7CisgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxNYXJrZWRCbG9ja0RhdGE+JiBlbnRy
eURhdGEgPSBtX21hcmtlZEJsb2NrTWFwLmFkZCgmYmxvY2ssIG51bGxwdHIpLml0ZXJhdG9yLT52
YWx1ZTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWVudHJ5RGF0YSk7CisgICAgICAgIGVudHJ5
RGF0YSA9IG1ha2VVbmlxdWU8TWFya2VkQmxvY2tEYXRhPigmYmxvY2spOworICAgICAgICBkYXRh
ID0gZW50cnlEYXRhLmdldCgpOworICAgICAgICBibG9jay5zZXRWZXJpZmllck1lbW8oZGF0YSk7
CisgICAgfQorCisgICAgdW5zaWduZWQgYXRvbU51bWJlciA9IGJsb2NrLmF0b21OdW1iZXIoY2Vs
bCk7CisgICAgYm9vbCBhbHJlYWR5U2V0ID0gZGF0YS0+dGVzdEFuZFNldE1hcmtlZChhdG9tTnVt
YmVyKTsKKyAgICBpZiAoIWFscmVhZHlTZXQgJiYgVU5MSUtFTFkoT3B0aW9uczo6dmVyYm9zZVZl
cmlmeUdDKCkpKQorICAgICAgICBkYXRhLT5hZGRNYXJrZXJEYXRhKGF0b21OdW1iZXIsIHsgcGFy
ZW50Q2VsbCgpLCBTdGFja1RyYWNlOjpjYXB0dXJlU3RhY2tUcmFjZShtYXhNYXJraW5nU3RhY2tG
cmFtZXNUb0NhcHR1cmUsIDIpIH0pOworICAgIHJldHVybiBhbHJlYWR5U2V0OworfQorCit2b2lk
IFZlcmlmaWVyU2xvdFZpc2l0b3I6OnNldE1hcmtlZEFuZEFwcGVuZFRvTWFya1N0YWNrKEpTQ2Vs
bCogY2VsbCkKK3sKKyAgICBpZiAobV9zdXBwcmVzc1ZlcmlmaWVyKQorICAgICAgICByZXR1cm47
CisgICAgaWYgKHRlc3RBbmRTZXRNYXJrZWQoY2VsbCkpCisgICAgICAgIHJldHVybjsKKyAgICBh
cHBlbmRUb01hcmtTdGFjayhjZWxsKTsKK30KKwordm9pZCBWZXJpZmllclNsb3RWaXNpdG9yOjp2
aXNpdEFzQ29uc3RyYWludChjb25zdCBKU0NlbGwqIGNlbGwpCit7CisgICAgdmlzaXRDaGlsZHJl
bihjZWxsKTsKK30KKwordm9pZCBWZXJpZmllclNsb3RWaXNpdG9yOjp2aXNpdENoaWxkcmVuKGNv
bnN0IEpTQ2VsbCogY2VsbCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChpc01hcmtlZChjZWxsKSk7
CisgICAgc3dpdGNoIChjZWxsLT50eXBlKCkpIHsKKyAgICBjYXNlIFN0cmluZ1R5cGU6CisgICAg
ICAgIEpTU3RyaW5nOjp2aXNpdENoaWxkcmVuKGNvbnN0X2Nhc3Q8SlNDZWxsKj4oY2VsbCksICp0
aGlzKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAgIGNhc2UgRmluYWxPYmplY3RUeXBl
OgorICAgICAgICBKU0ZpbmFsT2JqZWN0Ojp2aXNpdENoaWxkcmVuKGNvbnN0X2Nhc3Q8SlNDZWxs
Kj4oY2VsbCksICp0aGlzKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEFycmF5VHlwZToK
KyAgICAgICAgSlNBcnJheTo6dmlzaXRDaGlsZHJlbihjb25zdF9jYXN0PEpTQ2VsbCo+KGNlbGwp
LCAqdGhpcyk7CisgICAgICAgIGJyZWFrOworICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAg
ICAvLyBGSVhNRTogVGhpcyBjb3VsZCBiZSBzbyBtdWNoIGJldHRlci4KKyAgICAgICAgLy8gaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MjQ2MgorICAgICAgICBjZWxs
LT5tZXRob2RUYWJsZSh2bSgpKS0+dmlzaXRDaGlsZHJlbihjb25zdF9jYXN0PEpTQ2VsbCo+KGNl
bGwpLCAqdGhpcyk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2Ug
SlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9WZXJpZmllclNsb3RWaXNpdG9y
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVmVyaWZpZXJTbG90
VmlzaXRvci5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Zl
cmlmaWVyU2xvdFZpc2l0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE3MiBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQor
CisjaW5jbHVkZSAiQWJzdHJhY3RTbG90VmlzaXRvci5oIgorI2luY2x1ZGUgIkpTQ0pTVmFsdWUu
aCIKKyNpbmNsdWRlICJNYXJrZWRCbG9jay5oIgorI2luY2x1ZGUgIlZpc2l0UmFjZUtleS5oIgor
I2luY2x1ZGUgIldlYWsuaCIKKyNpbmNsdWRlIDxtZW1vcnk+CisjaW5jbHVkZSA8d3RmL0JpdG1h
cC5oPgorI2luY2x1ZGUgPHd0Zi9EZXF1ZS5oPgorI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+
CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5j
bHVkZSA8d3RmL1NoYXJlZFRhc2suaD4KKworbmFtZXNwYWNlIFdURiB7CisKK2NsYXNzIFN0YWNr
VHJhY2U7CisKK30gLy8gbmFtZXNwYWNlIFdURgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3Mg
Q29uc2VydmF0aXZlUm9vdHM7CitjbGFzcyBIZWFwOworY2xhc3MgSGVhcENlbGw7CitjbGFzcyBQ
cmVjaXNlQWxsb2NhdGlvbjsKKwordXNpbmcgV1RGOjpTdGFja1RyYWNlOworCitjbGFzcyBWZXJp
ZmllclNsb3RWaXNpdG9yIDogcHVibGljIEFic3RyYWN0U2xvdFZpc2l0b3IgeworICAgIFdURl9N
QUtFX05PTkNPUFlBQkxFKFZlcmlmaWVyU2xvdFZpc2l0b3IpOworICAgIFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEOworICAgIHVzaW5nIEJhc2UgPSBBYnN0cmFjdFNsb3RWaXNpdG9yOworcHVibGlj
OgorICAgIHN0cnVjdCBNYXJrZXJEYXRhIHsKKyAgICAgICAgTWFya2VyRGF0YSgpID0gZGVmYXVs
dDsKKyAgICAgICAgTWFya2VyRGF0YShNYXJrZXJEYXRhJiYpID0gZGVmYXVsdDsKKyAgICAgICAg
TWFya2VyRGF0YShIZWFwQ2VsbCosIHN0ZDo6dW5pcXVlX3B0cjxTdGFja1RyYWNlPiYmKTsKKyAg
ICAgICAgTWFya2VyRGF0YSYgb3BlcmF0b3I9KE1hcmtlckRhdGEmJikgPSBkZWZhdWx0OworCisg
ICAgICAgIEhlYXBDZWxsKiBwYXJlbnQgeyBudWxscHRyIH07CisgICAgICAgIHN0ZDo6dW5pcXVl
X3B0cjxTdGFja1RyYWNlPiBzdGFjazsKKyAgICB9OworCisgICAgVmVyaWZpZXJTbG90VmlzaXRv
cihIZWFwJik7CisgICAgflZlcmlmaWVyU2xvdFZpc2l0b3IoKTsKKworICAgIHZvaWQgYXBwZW5k
KGNvbnN0IENvbnNlcnZhdGl2ZVJvb3RzJikgZmluYWw7CisgICAgdm9pZCBhcHBlbmRVbmJhcnJp
ZXJlZChKU0NlbGwqKSBmaW5hbDsKKyAgICB2b2lkIGFwcGVuZEhpZGRlblVuYmFycmllcmVkKEpT
Q2VsbCopIGZpbmFsOworCisgICAgYm9vbCBpc0ZpcnN0VmlzaXQoKSBjb25zdCBmaW5hbDsKKyAg
ICBib29sIGlzTWFya2VkKGNvbnN0IHZvaWQqKSBjb25zdCBmaW5hbDsKKyAgICBib29sIGlzTWFy
a2VkKE1hcmtlZEJsb2NrJiwgSGVhcENlbGwqKSBjb25zdCBmaW5hbDsKKyAgICBib29sIGlzTWFy
a2VkKFByZWNpc2VBbGxvY2F0aW9uJiwgSGVhcENlbGwqKSBjb25zdCBmaW5hbDsKKworICAgIHZv
aWQgbWFya0F1eGlsaWFyeShjb25zdCB2b2lkKikgZmluYWw7CisKKyAgICB2b2lkIHJlcG9ydEV4
dHJhTWVtb3J5VmlzaXRlZChzaXplX3QpIGZpbmFsIHsgfQorI2lmIEVOQUJMRShSRVNPVVJDRV9V
U0FHRSkKKyAgICB2b2lkIHJlcG9ydEV4dGVybmFsTWVtb3J5VmlzaXRlZChzaXplX3QpIGZpbmFs
IHsgfQorI2VuZGlmCisKKyAgICBib29sIG11dGF0b3JJc1N0b3BwZWQoKSBjb25zdCBmaW5hbDsK
KworICAgIHZvaWQgZGlkUmFjZShjb25zdCBWaXNpdFJhY2VLZXkmKSBmaW5hbCB7IH0KKyAgICB2
b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdCBmaW5hbCB7IH0KKworICAgIHZvaWQgdmlzaXRB
c0NvbnN0cmFpbnQoY29uc3QgSlNDZWxsKikgZmluYWw7CisKKyAgICB2b2lkIGRyYWluKCk7CisK
KyAgICB2b2lkIGFkZFBhcmFsbGVsQ29uc3RyYWludFRhc2soUmVmUHRyPFNoYXJlZFRhc2s8dm9p
ZChBYnN0cmFjdFNsb3RWaXNpdG9yJik+PikgZmluYWw7CisgICAgdm9pZCBhZGRQYXJhbGxlbENv
bnN0cmFpbnRUYXNrKFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoU2xvdFZpc2l0b3ImKT4+KSBmaW5h
bDsKKyAgICB2b2lkIGV4ZWN1dGVDb25zdHJhaW50VGFza3MoKTsKKworICAgIHRlbXBsYXRlPHR5
cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaExpdmVDZWxsKGNvbnN0IEZ1bmN0b3ImKTsKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hMaXZlUHJlY2lzZUFsbG9j
YXRpb24oY29uc3QgRnVuY3RvciYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZv
aWQgZm9yRWFjaExpdmVNYXJrZWRCbG9ja0NlbGwoY29uc3QgRnVuY3RvciYpOworCisgICAgSlNf
RVhQT1JUX1BSSVZBVEUgdm9pZCBkdW1wTWFya2VyRGF0YShIZWFwQ2VsbCopOworCitwcml2YXRl
OgorICAgIGNsYXNzIE1hcmtlZEJsb2NrRGF0YSB7CisgICAgICAgIFdURl9NQUtFX0ZBU1RfQUxM
T0NBVEVEOworICAgICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShNYXJrZWRCbG9ja0RhdGEpOwor
ICAgIHB1YmxpYzoKKyAgICAgICAgdXNpbmcgQXRvbXNCaXRtYXAgPSBCaXRtYXA8TWFya2VkQmxv
Y2s6OmF0b21zUGVyQmxvY2s+OworCisgICAgICAgIE1hcmtlZEJsb2NrRGF0YShNYXJrZWRCbG9j
ayopOworCisgICAgICAgIE1hcmtlZEJsb2NrKiBibG9jaygpIGNvbnN0IHsgcmV0dXJuIG1fYmxv
Y2s7IH0KKyAgICAgICAgY29uc3QgQXRvbXNCaXRtYXAmIGF0b21zKCkgY29uc3QgeyByZXR1cm4g
bV9hdG9tczsgfQorCisgICAgICAgIGJvb2wgaXNNYXJrZWQodW5zaWduZWQgYXRvbU51bWJlcikg
eyByZXR1cm4gbV9hdG9tcy5nZXQoYXRvbU51bWJlcik7IH0KKyAgICAgICAgYm9vbCB0ZXN0QW5k
U2V0TWFya2VkKHVuc2lnbmVkIGF0b21OdW1iZXIpIHsgcmV0dXJuIG1fYXRvbXMudGVzdEFuZFNl
dChhdG9tTnVtYmVyKTsgfQorCisgICAgICAgIHZvaWQgYWRkTWFya2VyRGF0YSh1bnNpZ25lZCBh
dG9tTnVtYmVyLCBNYXJrZXJEYXRhJiYpOworICAgICAgICBjb25zdCBNYXJrZXJEYXRhKiBtYXJr
ZXJEYXRhKHVuc2lnbmVkIGF0b21OdW1iZXIpIGNvbnN0OworCisgICAgcHJpdmF0ZToKKyAgICAg
ICAgTWFya2VkQmxvY2sqIG1fYmxvY2sgeyBudWxscHRyIH07CisgICAgICAgIEF0b21zQml0bWFw
IG1fYXRvbXM7CisgICAgICAgIFZlY3RvcjxNYXJrZXJEYXRhPiBtX21hcmtlcnM7CisgICAgfTsK
KworICAgIGNsYXNzIFByZWNpc2VBbGxvY2F0aW9uRGF0YSB7CisgICAgICAgIFdURl9NQUtFX0ZB
U1RfQUxMT0NBVEVEOworICAgICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShQcmVjaXNlQWxsb2Nh
dGlvbkRhdGEpOworICAgIHB1YmxpYzoKKyAgICAgICAgUHJlY2lzZUFsbG9jYXRpb25EYXRhKFBy
ZWNpc2VBbGxvY2F0aW9uKik7CisgICAgICAgIFByZWNpc2VBbGxvY2F0aW9uKiBhbGxvY2F0aW9u
KCkgY29uc3QgeyByZXR1cm4gbV9hbGxvY2F0aW9uOyB9CisKKyAgICAgICAgdm9pZCBhZGRNYXJr
ZXJEYXRhKE1hcmtlckRhdGEmJik7CisgICAgICAgIGNvbnN0IE1hcmtlckRhdGEqIG1hcmtlckRh
dGEoKSBjb25zdDsKKworICAgIHByaXZhdGU6CisgICAgICAgIFByZWNpc2VBbGxvY2F0aW9uKiBt
X2FsbG9jYXRpb24geyBudWxscHRyIH07CisgICAgICAgIE1hcmtlckRhdGEgbV9tYXJrZXI7Cisg
ICAgfTsKKworICAgIHVzaW5nIE1hcmtlZEJsb2NrTWFwID0gSGFzaE1hcDxNYXJrZWRCbG9jayos
IHN0ZDo6dW5pcXVlX3B0cjxNYXJrZWRCbG9ja0RhdGE+PjsKKyAgICB1c2luZyBQcmVjaXNlQWxs
b2NhdGlvbk1hcCA9IEhhc2hNYXA8UHJlY2lzZUFsbG9jYXRpb24qLCBzdGQ6OnVuaXF1ZV9wdHI8
UHJlY2lzZUFsbG9jYXRpb25EYXRhPj47CisKKyAgICB2b2lkIGFwcGVuZFRvTWFya1N0YWNrKEpT
Q2VsbCopOworICAgIHZvaWQgYXBwZW5kU2xvdyhKU0NlbGwqIGNlbGwpIHsgc2V0TWFya2VkQW5k
QXBwZW5kVG9NYXJrU3RhY2soY2VsbCk7IH0KKworICAgIGJvb2wgdGVzdEFuZFNldE1hcmtlZChj
b25zdCB2b2lkKiByYXdDZWxsKTsKKyAgICBib29sIHRlc3RBbmRTZXRNYXJrZWQoUHJlY2lzZUFs
bG9jYXRpb24mKTsKKyAgICBib29sIHRlc3RBbmRTZXRNYXJrZWQoTWFya2VkQmxvY2smLCBIZWFw
Q2VsbCopOworCisgICAgdm9pZCBzZXRNYXJrZWRBbmRBcHBlbmRUb01hcmtTdGFjayhKU0NlbGwq
KTsKKworICAgIHZvaWQgdmlzaXRDaGlsZHJlbihjb25zdCBKU0NlbGwqKTsKKworICAgIHZvaWQg
ZHVtcE1hcmtlckRhdGEoUHJlY2lzZUFsbG9jYXRpb24mLCBIZWFwQ2VsbCopOworICAgIHZvaWQg
ZHVtcE1hcmtlckRhdGEoTWFya2VkQmxvY2smLCBIZWFwQ2VsbCopOworICAgIHZvaWQgZHVtcE1h
cmtlckRhdGEoSGVhcENlbGwqLCBjb25zdCBNYXJrZXJEYXRhKik7CisKKyAgICBQcmVjaXNlQWxs
b2NhdGlvbk1hcCBtX3ByZWNpc2VBbGxvY2F0aW9uTWFwOworICAgIE1hcmtlZEJsb2NrTWFwIG1f
bWFya2VkQmxvY2tNYXA7CisgICAgQ29uY3VycmVudFB0ckhhc2hTZXQgbV9vcGFxdWVSb290U3Rv
cmFnZTsKKyAgICBEZXF1ZTxSZWZQdHI8U2hhcmVkVGFzazx2b2lkKEFic3RyYWN0U2xvdFZpc2l0
b3ImKT4+LCAzMj4gbV9jb25zdHJhaW50VGFza3M7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1ZlcmlmaWVyU2xvdFZpc2l0b3JJbmxp
bmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVmVyaWZpZXJT
bG90VmlzaXRvcklubGluZXMuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9WZXJpZmllclNsb3RWaXNpdG9ySW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsNjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkFic3RyYWN0U2xvdFZpc2l0b3JJbmxpbmVzLmgi
CisjaW5jbHVkZSAiVmVyaWZpZXJTbG90VmlzaXRvci5oIgorCituYW1lc3BhY2UgSlNDIHsKKwor
dGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KK3ZvaWQgVmVyaWZpZXJTbG90VmlzaXRvcjo6Zm9y
RWFjaExpdmVDZWxsKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCit7CisgICAgZm9yRWFjaExpdmVQ
cmVjaXNlQWxsb2NhdGlvbihmdW5jdG9yKTsKKyAgICBmb3JFYWNoTGl2ZU1hcmtlZEJsb2NrQ2Vs
bChmdW5jdG9yKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KK3ZvaWQgVmVyaWZp
ZXJTbG90VmlzaXRvcjo6Zm9yRWFjaExpdmVQcmVjaXNlQWxsb2NhdGlvbihjb25zdCBGdW5jdG9y
JiBmdW5jKQoreworICAgIGZvciAoYXV0byYgZW50cnkgOiBtX3ByZWNpc2VBbGxvY2F0aW9uTWFw
KSB7CisgICAgICAgIFByZWNpc2VBbGxvY2F0aW9uKiBhbGxvY2F0aW9uID0gZW50cnkudmFsdWUt
PmFsbG9jYXRpb24oKTsKKyAgICAgICAgZnVuYyhhbGxvY2F0aW9uLT5jZWxsKCkpOworICAgIH0K
K30KKwordGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KK3ZvaWQgVmVyaWZpZXJTbG90VmlzaXRv
cjo6Zm9yRWFjaExpdmVNYXJrZWRCbG9ja0NlbGwoY29uc3QgRnVuY3RvciYgZnVuYykKK3sKKyAg
ICBmb3IgKGF1dG8mIGVudHJ5IDogbV9tYXJrZWRCbG9ja01hcCkgeworICAgICAgICBhdXRvJiBk
YXRhID0gZW50cnkudmFsdWU7CisgICAgICAgIE1hcmtlZEJsb2NrKiBibG9jayA9IGRhdGEtPmJs
b2NrKCk7CisgICAgICAgIGNvbnN0IE1hcmtlZEJsb2NrRGF0YTo6QXRvbXNCaXRtYXAmIGF0b21z
ID0gIGRhdGEtPmF0b21zKCk7CisgICAgICAgIGZvciAoYXV0byBhdG9tTnVtYmVyIDogYXRvbXMp
CisgICAgICAgICAgICBmdW5jKGJpdHdpc2VfY2FzdDxIZWFwQ2VsbCo+KGJsb2NrLT5oYW5kbGUo
KS5hdG9tQXQoYXRvbU51bWJlcikpKTsKKyAgICB9Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVmlzaXRDb3VudGVyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVmlzaXRDb3VudGVyLmgJKHJldmlzaW9u
IDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Zpc2l0Q291bnRlci5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTI1LDcgKzI1LDcgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlICJT
bG90VmlzaXRvci5oIgorI2luY2x1ZGUgIkFic3RyYWN0U2xvdFZpc2l0b3IuaCIKIAogbmFtZXNw
YWNlIEpTQyB7CiAKQEAgLTMzLDEzICszMywxMyBAQCBjbGFzcyBWaXNpdENvdW50ZXIgewogcHVi
bGljOgogICAgIFZpc2l0Q291bnRlcigpIHsgfQogICAgIAotICAgIFZpc2l0Q291bnRlcihTbG90
VmlzaXRvciYgdmlzaXRvcikKKyAgICBWaXNpdENvdW50ZXIoQWJzdHJhY3RTbG90VmlzaXRvciYg
dmlzaXRvcikKICAgICAgICAgOiBtX3Zpc2l0b3IoJnZpc2l0b3IpCiAgICAgICAgICwgbV9pbml0
aWFsVmlzaXRDb3VudCh2aXNpdG9yLnZpc2l0Q291bnQoKSkKICAgICB7CiAgICAgfQogICAgIAot
ICAgIFNsb3RWaXNpdG9yJiB2aXNpdG9yKCkgY29uc3QgeyByZXR1cm4gKm1fdmlzaXRvcjsgfQor
ICAgIEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IoKSBjb25zdCB7IHJldHVybiAqbV92aXNp
dG9yOyB9CiAgICAgCiAgICAgc2l6ZV90IHZpc2l0Q291bnQoKSBjb25zdAogICAgIHsKQEAgLTQ3
LDcgKzQ3LDcgQEAgcHVibGljOgogICAgIH0KICAgICAKIHByaXZhdGU6Ci0gICAgU2xvdFZpc2l0
b3IqIG1fdmlzaXRvciB7IG51bGxwdHIgfTsKKyAgICBBYnN0cmFjdFNsb3RWaXNpdG9yKiBtX3Zp
c2l0b3IgeyBudWxscHRyIH07CiAgICAgc2l6ZV90IG1faW5pdGlhbFZpc2l0Q291bnQgeyAwIH07
CiB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrQmxvY2suY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtCbG9jay5jcHAJKHJl
dmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtCbG9jay5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDEyLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEyLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC05OCwxMiArOTgsMTEgQEAgdm9pZCBXZWFrQmxvY2s6OnN3
ZWVwKCkKICAgICBBU1NFUlQoIW1fc3dlZXBSZXN1bHQuaXNOdWxsKCkpOwogfQogCi10ZW1wbGF0
ZTx0eXBlbmFtZSBDb250YWluZXJUeXBlPgotdm9pZCBXZWFrQmxvY2s6OnNwZWNpYWxpemVkVmlz
aXQoQ29udGFpbmVyVHlwZSYgY29udGFpbmVyLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBs
YXRlPHR5cGVuYW1lIENvbnRhaW5lclR5cGUsIHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFdlYWtC
bG9jazo6c3BlY2lhbGl6ZWRWaXNpdChDb250YWluZXJUeXBlJiBjb250YWluZXIsIFZpc2l0b3Im
IHZpc2l0b3IpCiB7Ci0gICAgSGVhcFZlcnNpb24gbWFya2luZ1ZlcnNpb24gPSB2aXNpdG9yLm1h
cmtpbmdWZXJzaW9uKCk7Ci0KICAgICBzaXplX3QgY291bnQgPSB3ZWFrSW1wbENvdW50KCk7Cisg
ICAgSGVhcEFuYWx5emVyKiBoZWFwQW5hbHl6ZXIgPSB2aXNpdG9yLnZtKCkuYWN0aXZlSGVhcEFu
YWx5emVyKCk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7CiAgICAg
ICAgIFdlYWtJbXBsKiB3ZWFrSW1wbCA9ICZ3ZWFrSW1wbHMoKVtpXTsKICAgICAgICAgaWYgKHdl
YWtJbXBsLT5zdGF0ZSgpICE9IFdlYWtJbXBsOjpMaXZlKQpAQCAtMTE0LDEyICsxMTMsMTIgQEAg
dm9pZCBXZWFrQmxvY2s6OnNwZWNpYWxpemVkVmlzaXQoQ29udGFpbgogICAgICAgICAgICAgY29u
dGludWU7CiAKICAgICAgICAgSlNWYWx1ZSBqc1ZhbHVlID0gd2Vha0ltcGwtPmpzVmFsdWUoKTsK
LSAgICAgICAgaWYgKGNvbnRhaW5lci5pc01hcmtlZChtYXJraW5nVmVyc2lvbiwganNWYWx1ZS5h
c0NlbGwoKSkpCisgICAgICAgIGlmICh2aXNpdG9yLmlzTWFya2VkKGNvbnRhaW5lciwganNWYWx1
ZS5hc0NlbGwoKSkpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgCiAgICAgICAgIGNv
bnN0IGNoYXIqIHJlYXNvbiA9ICIiOwogICAgICAgICBjb25zdCBjaGFyKiogcmVhc29uUHRyID0g
bnVsbHB0cjsKLSAgICAgICAgaWYgKFVOTElLRUxZKHZpc2l0b3IuaXNBbmFseXppbmdIZWFwKCkp
KQorICAgICAgICBpZiAoVU5MSUtFTFkoaGVhcEFuYWx5emVyKSkKICAgICAgICAgICAgIHJlYXNv
blB0ciA9ICZyZWFzb247CiAKICAgICAgICAgaWYgKCF3ZWFrSGFuZGxlT3duZXItPmlzUmVhY2hh
YmxlRnJvbU9wYXF1ZVJvb3RzKEhhbmRsZTxVbmtub3duPjo6d3JhcFNsb3QoJmNvbnN0X2Nhc3Q8
SlNWYWx1ZSY+KGpzVmFsdWUpKSwgd2Vha0ltcGwtPmNvbnRleHQoKSwgdmlzaXRvciwgcmVhc29u
UHRyKSkKQEAgLTEyNywxNCArMTI2LDE1IEBAIHZvaWQgV2Vha0Jsb2NrOjpzcGVjaWFsaXplZFZp
c2l0KENvbnRhaW4KIAogICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKGpzVmFsdWUp
OwogCi0gICAgICAgIGlmIChVTkxJS0VMWSh2aXNpdG9yLmlzQW5hbHl6aW5nSGVhcCgpKSkgewor
ICAgICAgICBpZiAoVU5MSUtFTFkoaGVhcEFuYWx5emVyKSkgewogICAgICAgICAgICAgaWYgKGpz
VmFsdWUuaXNDZWxsKCkpCi0gICAgICAgICAgICAgICAgdmlzaXRvci5oZWFwQW5hbHl6ZXIoKS0+
c2V0T3BhcXVlUm9vdFJlYWNoYWJpbGl0eVJlYXNvbkZvckNlbGwoanNWYWx1ZS5hc0NlbGwoKSwg
KnJlYXNvblB0cik7CisgICAgICAgICAgICAgICAgaGVhcEFuYWx5emVyLT5zZXRPcGFxdWVSb290
UmVhY2hhYmlsaXR5UmVhc29uRm9yQ2VsbChqc1ZhbHVlLmFzQ2VsbCgpLCAqcmVhc29uUHRyKTsK
ICAgICAgICAgfQogICAgIH0KIH0KIAotdm9pZCBXZWFrQmxvY2s6OnZpc2l0KFNsb3RWaXNpdG9y
JiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK0FMV0FZU19JTkxJTkUgdm9p
ZCBXZWFrQmxvY2s6OnZpc2l0SW1wbChWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIC8vIElmIGEg
YmxvY2sgaXMgY29tcGxldGVseSBlbXB0eSwgYSB2aXNpdCB3b24ndCBoYXZlIGFueSBlZmZlY3Qu
CiAgICAgaWYgKGlzRW1wdHkoKSkKQEAgLTE0OSw2ICsxNDksOSBAQCB2b2lkIFdlYWtCbG9jazo6
dmlzaXQoU2xvdFZpc2l0b3ImIHZpc2l0CiAgICAgICAgIHNwZWNpYWxpemVkVmlzaXQobV9jb250
YWluZXIubWFya2VkQmxvY2soKSwgdmlzaXRvcik7CiB9CiAKK3ZvaWQgV2Vha0Jsb2NrOjp2aXNp
dChBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKSB7IHZpc2l0SW1wbCh2aXNpdG9yKTsgfQor
dm9pZCBXZWFrQmxvY2s6OnZpc2l0KFNsb3RWaXNpdG9yJiB2aXNpdG9yKSB7IHZpc2l0SW1wbCh2
aXNpdG9yKTsgfQorCiB2b2lkIFdlYWtCbG9jazo6cmVhcCgpCiB7CiAgICAgLy8gSWYgYSBibG9j
ayBpcyBjb21wbGV0ZWx5IGVtcHR5LCBhIHJlYXBpbmcgd29uJ3QgaGF2ZSBhbnkgZWZmZWN0LgpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha0Jsb2NrLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha0Jsb2NrLmgJKHJldmlzaW9uIDI3Mjkw
MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtCbG9jay5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE5IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMzIsNiArMzIsNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAorY2xhc3MgQWJzdHJh
Y3RTbG90VmlzaXRvcjsKIGNsYXNzIEhlYXA7CiBjbGFzcyBTbG90VmlzaXRvcjsKIApAQCAtNjUs
NyArNjYsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzd2VlcCgpOwogICAgIFN3ZWVwUmVzdWx0IHRh
a2VTd2VlcFJlc3VsdCgpOwogCi0gICAgdm9pZCB2aXNpdChTbG90VmlzaXRvciYpOworICAgIEpT
X0VYUE9SVF9QUklWQVRFIHZvaWQgdmlzaXQoQWJzdHJhY3RTbG90VmlzaXRvciYpOworICAgIEpT
X0VYUE9SVF9QUklWQVRFIHZvaWQgdmlzaXQoU2xvdFZpc2l0b3ImKTsKIAogICAgIHZvaWQgcmVh
cCgpOwogCkBAIC03MywxMCArNzUsMTIgQEAgcHVibGljOgogICAgIHZvaWQgZGlzY29ubmVjdENv
bnRhaW5lcigpIHsgbV9jb250YWluZXIgPSBDZWxsQ29udGFpbmVyKCk7IH0KIAogcHJpdmF0ZToK
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIHZpc2l0SW1wbChWaXNpdG9yJik7
CisKICAgICBzdGF0aWMgRnJlZUNlbGwqIGFzRnJlZUNlbGwoV2Vha0ltcGwqKTsKICAgICAKLSAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBDb250YWluZXJUeXBlPgotICAgIHZvaWQgc3BlY2lhbGl6ZWRW
aXNpdChDb250YWluZXJUeXBlJiwgU2xvdFZpc2l0b3ImKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBDb250YWluZXJUeXBlLCB0eXBlbmFtZSBWaXNpdG9yPgorICAgIHZvaWQgc3BlY2lhbGl6ZWRW
aXNpdChDb250YWluZXJUeXBlJiwgVmlzaXRvciYpOwogCiAgICAgZXhwbGljaXQgV2Vha0Jsb2Nr
KENlbGxDb250YWluZXIpOwogICAgIHZvaWQgZmluYWxpemUoV2Vha0ltcGwqKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtIYW5kbGVPd25lci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha0hhbmRsZU93bmVyLmNwcAkocmV2aXNp
b24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha0hhbmRsZU93bmVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEyLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC0zNSw3ICszNSw3IEBAIFdlYWtIYW5kbGVPd25lcjo6fldlYWtI
YW5kbGVPd25lcigpCiB7CiB9CiAKLWJvb2wgV2Vha0hhbmRsZU93bmVyOjppc1JlYWNoYWJsZUZy
b21PcGFxdWVSb290cyhIYW5kbGU8VW5rbm93bj4sIHZvaWQqLCBTbG90VmlzaXRvciYsIGNvbnN0
IGNoYXIqKikKK2Jvb2wgV2Vha0hhbmRsZU93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290
cyhIYW5kbGU8VW5rbm93bj4sIHZvaWQqLCBBYnN0cmFjdFNsb3RWaXNpdG9yJiwgY29uc3QgY2hh
cioqKQogewogICAgIHJldHVybiBmYWxzZTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL1dlYWtIYW5kbGVPd25lci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL1dlYWtIYW5kbGVPd25lci5oCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrSGFuZGxlT3duZXIuaAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOSwx
MyArMjksMTMgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLWNsYXNzIFNsb3RWaXNpdG9yOworY2xh
c3MgQWJzdHJhY3RTbG90VmlzaXRvcjsKIAogY2xhc3MgSlNfRVhQT1JUX1BSSVZBVEUgV2Vha0hh
bmRsZU93bmVyIHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5XZWFrSGFuZGxlT3duZXIoKTsKICAg
ICAvLyByZWFzb24gd2lsbCBvbmx5IGJlIG5vbi1udWxsIHdoZW4gZ2VuZXJhdGluZyBhIGRlYnVn
IEdDIGhlYXAgc25hcHNob3QuCi0gICAgdmlydHVhbCBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1
ZVJvb3RzKEhhbmRsZTxVbmtub3duPiwgdm9pZCogY29udGV4dCwgU2xvdFZpc2l0b3ImLCBjaGFy
IGNvbnN0KiogcmVhc29uID0gbnVsbHB0cik7CisgICAgdmlydHVhbCBib29sIGlzUmVhY2hhYmxl
RnJvbU9wYXF1ZVJvb3RzKEhhbmRsZTxVbmtub3duPiwgdm9pZCogY29udGV4dCwgQWJzdHJhY3RT
bG90VmlzaXRvciYsIGNoYXIgY29uc3QqKiByZWFzb24gPSBudWxscHRyKTsKICAgICB2aXJ0dWFs
IHZvaWQgZmluYWxpemUoSGFuZGxlPFVua25vd24+LCB2b2lkKiBjb250ZXh0KTsKIH07CiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtTZXQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtTZXQuY3BwCShyZXZpc2lvbiAyNzI5MDIp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrU2V0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTIzLDQgKzEyMyw3IEBAIHZvaWQgV2Vha1NldDo6cmVtb3ZlQWxsb2NhdG9yKFdlYWtC
bG9jayoKICAgICBXZWFrQmxvY2s6OmRlc3Ryb3koKmhlYXAoKSwgYmxvY2spOwogfQogCit0ZW1w
bGF0ZSB2b2lkIFdlYWtTZXQ6OnZpc2l0KEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRl
IHZvaWQgV2Vha1NldDo6dmlzaXQoU2xvdFZpc2l0b3ImKTsKKwogfSAvLyBuYW1lc3BhY2UgSlND
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrU2V0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha1NldC5oCShyZXZpc2lvbiAyNzI5MDIp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrU2V0LmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTkgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC01MSw3ICs1MSw3IEBAIHB1YmxpYzoKICAgICBib29sIGlzRW1wdHkoKSBjb25zdDsKICAg
ICBib29sIGlzVHJpdmlhbGx5RGVzdHJ1Y3RpYmxlKCkgY29uc3Q7CiAKLSAgICB2b2lkIHZpc2l0
KFNsb3RWaXNpdG9yJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCB2aXNp
dChWaXNpdG9yJik7CiAKICAgICB2b2lkIHJlYXAoKTsKICAgICB2b2lkIHN3ZWVwKCk7CkBAIC0x
MTQsNyArMTE0LDggQEAgaW5saW5lIHZvaWQgV2Vha1NldDo6bGFzdENoYW5jZVRvRmluYWxpegog
ICAgICAgICBibG9jay0+bGFzdENoYW5jZVRvRmluYWxpemUoKTsKIH0KIAotaW5saW5lIHZvaWQg
V2Vha1NldDo6dmlzaXQoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPgoraW5saW5lIHZvaWQgV2Vha1NldDo6dmlzaXQoVmlzaXRvciYgdmlzaXRvcikKIHsK
ICAgICBmb3IgKFdlYWtCbG9jayogYmxvY2sgPSBtX2Jsb2Nrcy5oZWFkKCk7IGJsb2NrOyBibG9j
ayA9IGJsb2NrLT5uZXh0KCkpCiAgICAgICAgIGJsb2NrLT52aXNpdCh2aXNpdG9yKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TaGFkb3dDaGlja2VuLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU2hhZG93Q2hpY2tl
bi5jcHAJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnBy
ZXRlci9TaGFkb3dDaGlja2VuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ0MCw3ICs0NDAsNyBA
QCB2b2lkIFNoYWRvd0NoaWNrZW46OnVwZGF0ZShWTSYgdm0sIENhbGxGCiAgICAgICAgIGRhdGFM
b2coIiAgICBBZnRlciBjbGVhbi11cDogIiwgKnRoaXMsICJcbiIpOwogfQogCi12b2lkIFNoYWRv
d0NoaWNrZW46OnZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIFNoYWRv
d0NoaWNrZW46OnZpc2l0Q2hpbGRyZW4oQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsK
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2xvZ0N1cnNvciAtIG1fbG9nOyBpLS07KSB7CiAgICAg
ICAgIEpTT2JqZWN0KiBjYWxsZWUgPSBtX2xvZ1tpXS5jYWxsZWU7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU2hhZG93Q2hpY2tlbi5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TaGFkb3dDaGlja2VuLmgJKHJldmlzaW9u
IDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TaGFkb3dDaGlj
a2VuLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMzUsMTMgKzM1LDEzIEBACiAKIG5hbWVzcGFjZSBKU0Mgewog
CitjbGFzcyBBYnN0cmFjdFNsb3RWaXNpdG9yOwogY2xhc3MgQ2FsbEZyYW1lOwogY2xhc3MgQ29k
ZUJsb2NrOwogY2xhc3MgSlNBcnJheTsKIGNsYXNzIEpTT2JqZWN0OwogY2xhc3MgSlNTY29wZTsK
IGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKLWNsYXNzIFNsb3RWaXNpdG9yOwogY2xhc3Mg
Vk07CiAKIC8vIFNoYWRvd0NoaWNrZW4gaXMgYSBsb2cgdGhhdCBjYW4gYmUgdXNlZCB0byBwcm9k
dWNlIGEgc2hhZG93IHN0YWNrIG9mIENISUNLRU4tc3R5bGUgc3RhY2sgZnJhbWVzLgpAQCAtMTk2
LDcgKzE5Niw3IEBAIHB1YmxpYzoKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgogICAg
IHZvaWQgaXRlcmF0ZShWTSYsIENhbGxGcmFtZSosIGNvbnN0IEZ1bmN0b3ImKTsKICAgICAKLSAg
ICB2b2lkIHZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKKyAgICB2b2lkIHZpc2l0Q2hpbGRy
ZW4oQWJzdHJhY3RTbG90VmlzaXRvciYpOwogICAgIHZvaWQgcmVzZXQoKTsKICAgICAKICAgICAv
LyBKSVQgc3VwcG9ydC4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvR0NBd2FyZUpJ
VFN0dWJSb3V0aW5lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0dDQXdhcmVKSVRTdHViUm91dGluZS5jcHAJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvR0NBd2FyZUpJVFN0dWJSb3V0aW5lLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxOCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTczLDEwICs3Myw2IEBAIHZvaWQgR0NBd2FyZUpJVFN0dWJSb3V0aW5lOjpkZWxldGVG
cm9tR0MKICAgICBkZWxldGUgdGhpczsKIH0KIAotdm9pZCBHQ0F3YXJlSklUU3R1YlJvdXRpbmU6
Om1hcmtSZXF1aXJlZE9iamVjdHNJbnRlcm5hbChTbG90VmlzaXRvciYpCi17Ci19Ci0KIE1hcmtp
bmdHQ0F3YXJlSklUU3R1YlJvdXRpbmU6Ok1hcmtpbmdHQ0F3YXJlSklUU3R1YlJvdXRpbmUoCiAg
ICAgY29uc3QgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiYgY29k
ZSwgVk0mIHZtLCBjb25zdCBKU0NlbGwqIG93bmVyLAogICAgIGNvbnN0IFZlY3RvcjxKU0NlbGwq
PiYgY2VsbHMsIEJhZzxDYWxsTGlua0luZm8+JiYgY2FsbExpbmtJbmZvcykKQEAgLTkyLDEyICs4
OCwyMSBAQCBNYXJraW5nR0NBd2FyZUpJVFN0dWJSb3V0aW5lOjp+TWFya2luZ0dDCiB7CiB9CiAK
LXZvaWQgTWFya2luZ0dDQXdhcmVKSVRTdHViUm91dGluZTo6bWFya1JlcXVpcmVkT2JqZWN0c0lu
dGVybmFsKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4K
K0FMV0FZU19JTkxJTkUgdm9pZCBNYXJraW5nR0NBd2FyZUpJVFN0dWJSb3V0aW5lOjptYXJrUmVx
dWlyZWRPYmplY3RzSW50ZXJuYWxJbXBsKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgZm9yIChh
dXRvJiBlbnRyeSA6IG1fY2VsbHMpCiAgICAgICAgIHZpc2l0b3IuYXBwZW5kKGVudHJ5KTsKIH0K
IAordm9pZCBNYXJraW5nR0NBd2FyZUpJVFN0dWJSb3V0aW5lOjptYXJrUmVxdWlyZWRPYmplY3Rz
SW50ZXJuYWwoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBtYXJrUmVxdWly
ZWRPYmplY3RzSW50ZXJuYWxJbXBsKHZpc2l0b3IpOworfQordm9pZCBNYXJraW5nR0NBd2FyZUpJ
VFN0dWJSb3V0aW5lOjptYXJrUmVxdWlyZWRPYmplY3RzSW50ZXJuYWwoU2xvdFZpc2l0b3ImIHZp
c2l0b3IpCit7CisgICAgbWFya1JlcXVpcmVkT2JqZWN0c0ludGVybmFsSW1wbCh2aXNpdG9yKTsK
K30KIAogR0NBd2FyZUpJVFN0dWJSb3V0aW5lV2l0aEV4Y2VwdGlvbkhhbmRsZXI6OkdDQXdhcmVK
SVRTdHViUm91dGluZVdpdGhFeGNlcHRpb25IYW5kbGVyKAogICAgIGNvbnN0IE1hY3JvQXNzZW1i
bGVyQ29kZVJlZjxKSVRTdHViUm91dGluZVB0clRhZz4mIGNvZGUsIFZNJiB2bSwgIGNvbnN0IEpT
Q2VsbCogb3duZXIsIGNvbnN0IFZlY3RvcjxKU0NlbGwqPiYgY2VsbHMsIEJhZzxDYWxsTGlua0lu
Zm8+JiYgY2FsbExpbmtJbmZvcywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvR0NB
d2FyZUpJVFN0dWJSb3V0aW5lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9HQ0F3YXJlSklUU3R1YlJvdXRpbmUuaAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9HQ0F3YXJlSklUU3R1YlJvdXRpbmUuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxOCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTYwLDggKzYwLDkgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKCpuZXcgR0NBd2FyZUpJVFN0dWJSb3V0aW5lKGNvZGUsIHZtKSk7CiAgICAgfQotICAgIAot
ICAgIHZvaWQgbWFya1JlcXVpcmVkT2JqZWN0cyhTbG90VmlzaXRvciYgdmlzaXRvcikKKworICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+CisgICAgdm9pZCBtYXJrUmVxdWlyZWRPYmplY3Rz
KFZpc2l0b3ImIHZpc2l0b3IpCiAgICAgewogICAgICAgICBtYXJrUmVxdWlyZWRPYmplY3RzSW50
ZXJuYWwodmlzaXRvcik7CiAgICAgfQpAQCAtNzEsNyArNzIsOCBAQCBwdWJsaWM6CiBwcm90ZWN0
ZWQ6CiAgICAgdm9pZCBvYnNlcnZlWmVyb1JlZkNvdW50KCkgb3ZlcnJpZGU7CiAgICAgCi0gICAg
dmlydHVhbCB2b2lkIG1hcmtSZXF1aXJlZE9iamVjdHNJbnRlcm5hbChTbG90VmlzaXRvciYpOwor
ICAgIHZpcnR1YWwgdm9pZCBtYXJrUmVxdWlyZWRPYmplY3RzSW50ZXJuYWwoQWJzdHJhY3RTbG90
VmlzaXRvciYpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBtYXJrUmVxdWlyZWRPYmplY3RzSW50ZXJu
YWwoU2xvdFZpc2l0b3ImKSB7IH0KIAogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgSklUU3R1
YlJvdXRpbmVTZXQ7CkBAIC04OSw3ICs5MSw5IEBAIHB1YmxpYzoKICAgICB+TWFya2luZ0dDQXdh
cmVKSVRTdHViUm91dGluZSgpIG92ZXJyaWRlOwogICAgIAogcHJvdGVjdGVkOgotICAgIHZvaWQg
bWFya1JlcXVpcmVkT2JqZWN0c0ludGVybmFsKFNsb3RWaXNpdG9yJikgb3ZlcnJpZGU7CisgICAg
dGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCBtYXJrUmVxdWlyZWRPYmplY3RzSW50ZXJu
YWxJbXBsKFZpc2l0b3ImKTsKKyAgICB2b2lkIG1hcmtSZXF1aXJlZE9iamVjdHNJbnRlcm5hbChB
YnN0cmFjdFNsb3RWaXNpdG9yJikgZmluYWw7CisgICAgdm9pZCBtYXJrUmVxdWlyZWRPYmplY3Rz
SW50ZXJuYWwoU2xvdFZpc2l0b3ImKSBmaW5hbDsKIAogcHJpdmF0ZToKICAgICBWZWN0b3I8V3Jp
dGVCYXJyaWVyPEpTQ2VsbD4+IG1fY2VsbHM7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVFdvcmtsaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVFdvcmtsaXN0LmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRXb3JrbGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L1BvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1BvbHltb3JwaGljQ2FsbFN0dWJSb3V0
aW5lLmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Q
b2x5bW9ycGhpY0NhbGxTdHViUm91dGluZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMzUsMTIg
KzEzNSwyMiBAQCBib29sIFBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lOjp2aXNpdFdlCiAgICAg
cmV0dXJuIGlzU3RpbGxMaXZlOwogfQogCi12b2lkIFBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5l
OjptYXJrUmVxdWlyZWRPYmplY3RzSW50ZXJuYWwoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1w
bGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgorQUxXQVlTX0lOTElORSB2b2lkIFBvbHltb3JwaGljQ2Fs
bFN0dWJSb3V0aW5lOjptYXJrUmVxdWlyZWRPYmplY3RzSW50ZXJuYWxJbXBsKFZpc2l0b3ImIHZp
c2l0b3IpCiB7CiAgICAgZm9yIChhdXRvJiB2YXJpYW50IDogbV92YXJpYW50cykKICAgICAgICAg
dmlzaXRvci5hcHBlbmQodmFyaWFudCk7CiB9CiAKK3ZvaWQgUG9seW1vcnBoaWNDYWxsU3R1YlJv
dXRpbmU6Om1hcmtSZXF1aXJlZE9iamVjdHNJbnRlcm5hbChBYnN0cmFjdFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQoreworICAgIG1hcmtSZXF1aXJlZE9iamVjdHNJbnRlcm5hbEltcGwodmlzaXRvcik7
Cit9Cit2b2lkIFBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lOjptYXJrUmVxdWlyZWRPYmplY3Rz
SW50ZXJuYWwoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgbWFya1JlcXVpcmVkT2JqZWN0
c0ludGVybmFsSW1wbCh2aXNpdG9yKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRp
ZiAvLyBFTkFCTEUoSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Qb2x5bW9y
cGhpY0NhbGxTdHViUm91dGluZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUuaAkocmV2aXNpb24gMjcyOTAyKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Qb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0y
MDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
NS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMTA1LDYgKzEwNSw4IEBAIHB1YmxpYzoKICAgICBib29sIHZpc2l0
V2VhayhWTSYpIGZpbmFsOwogCiBwcml2YXRlOgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0
b3I+IHZvaWQgbWFya1JlcXVpcmVkT2JqZWN0c0ludGVybmFsSW1wbChWaXNpdG9yJik7CisgICAg
dm9pZCBtYXJrUmVxdWlyZWRPYmplY3RzSW50ZXJuYWwoQWJzdHJhY3RTbG90VmlzaXRvciYpIGZp
bmFsOwogICAgIHZvaWQgbWFya1JlcXVpcmVkT2JqZWN0c0ludGVybmFsKFNsb3RWaXNpdG9yJikg
ZmluYWw7CiAKICAgICBWZWN0b3I8V3JpdGVCYXJyaWVyPEpTQ2VsbD4sIDI+IG1fdmFyaWFudHM7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BYnN0cmFjdE1vZHVsZVJlY29y
ZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQWJzdHJh
Y3RNb2R1bGVSZWNvcmQuY3BwCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9BYnN0cmFjdE1vZHVsZVJlY29yZC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTkgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC02MCw3ICs2MCw4IEBAIHZvaWQgQWJzdHJhY3RNb2R1bGVSZWNvcmQ6OmZpbmlzaENyZWF0aW8K
ICAgICBwdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJkZXBlbmRlbmNp
ZXNNYXAiX3MpLCBtX2RlcGVuZGVuY2llc01hcC5nZXQoKSk7CiB9CiAKLXZvaWQgQWJzdHJhY3RN
b2R1bGVSZWNvcmQ6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlz
aXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEFic3RyYWN0TW9kdWxlUmVj
b3JkOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7
CiAgICAgQWJzdHJhY3RNb2R1bGVSZWNvcmQqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8QWJzdHJhY3RN
b2R1bGVSZWNvcmQqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNP
YmplY3QsIGluZm8oKSk7CkBAIC03MCw2ICs3MSw4IEBAIHZvaWQgQWJzdHJhY3RNb2R1bGVSZWNv
cmQ6OnZpc2l0Q2hpbGRyZW4KICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2RlcGVu
ZGVuY2llc01hcCk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihBYnN0cmFjdE1vZHVsZVJl
Y29yZCk7CisKIHZvaWQgQWJzdHJhY3RNb2R1bGVSZWNvcmQ6OmFwcGVuZFJlcXVlc3RlZE1vZHVs
ZShjb25zdCBJZGVudGlmaWVyJiBtb2R1bGVOYW1lKQogewogICAgIG1fcmVxdWVzdGVkTW9kdWxl
cy5hZGQobW9kdWxlTmFtZS5pbXBsKCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQWJzdHJhY3RNb2R1bGVSZWNvcmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9BYnN0cmFjdE1vZHVsZVJlY29yZC5oCShyZXZpc2lvbiAyNzI5MDIp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BYnN0cmFjdE1vZHVsZVJlY29yZC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUt
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTEzNiw3ICsxMzYsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgQWJzdHJhY3RN
b2R1bGVSZWNvcmQoVk0mLCBTdHJ1Y3R1cmUqLCBjb25zdCBJZGVudGlmaWVyJik7CiAgICAgdm9p
ZCBmaW5pc2hDcmVhdGlvbihKU0dsb2JhbE9iamVjdCosIFZNJik7CiAKLSAgICBzdGF0aWMgdm9p
ZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJ
VF9DSElMRFJFTjsKIAogICAgIHZvaWQgc2V0TW9kdWxlRW52aXJvbm1lbnQoSlNHbG9iYWxPYmpl
Y3QqLCBKU01vZHVsZUVudmlyb25tZW50Kik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0FyZ0xpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0FyZ0xpc3QuY3BwCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9BcmdMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC01MSw3ICs1MSw4IEBAIHZv
aWQgQXJnTGlzdDo6Z2V0U2xpY2UoaW50IHN0YXJ0SW5kZXgsIEEKICAgICByZXN1bHQubV9hcmdD
b3VudCA9ICBtX2FyZ0NvdW50IC0gc3RhcnRJbmRleDsKIH0KIAotdm9pZCBNYXJrZWRBcmd1bWVu
dEJ1ZmZlcjo6bWFya0xpc3RzKFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBMaXN0U2V0JiBtYXJrU2V0
KQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgTWFya2VkQXJndW1lbnRCdWZmZXI6
Om1hcmtMaXN0cyhWaXNpdG9yJiB2aXNpdG9yLCBMaXN0U2V0JiBtYXJrU2V0KQogewogICAgIExp
c3RTZXQ6Oml0ZXJhdG9yIGVuZCA9IG1hcmtTZXQuZW5kKCk7CiAgICAgZm9yIChMaXN0U2V0Ojpp
dGVyYXRvciBpdCA9IG1hcmtTZXQuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CkBAIC02MSw2
ICs2Miw5IEBAIHZvaWQgTWFya2VkQXJndW1lbnRCdWZmZXI6Om1hcmtMaXN0cyhTbG8KICAgICB9
CiB9CiAKK3RlbXBsYXRlIHZvaWQgTWFya2VkQXJndW1lbnRCdWZmZXI6Om1hcmtMaXN0cyhBYnN0
cmFjdFNsb3RWaXNpdG9yJiwgTGlzdFNldCYpOwordGVtcGxhdGUgdm9pZCBNYXJrZWRBcmd1bWVu
dEJ1ZmZlcjo6bWFya0xpc3RzKFNsb3RWaXNpdG9yJiwgTGlzdFNldCYpOworCiB2b2lkIE1hcmtl
ZEFyZ3VtZW50QnVmZmVyOjpzbG93RW5zdXJlQ2FwYWNpdHkoc2l6ZV90IHJlcXVlc3RlZENhcGFj
aXR5KQogewogICAgIHNldE5lZWRzT3ZlcmZsb3dDaGVjaygpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQXJnTGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0FyZ0xpc3QuaAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJnTGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEs
NiBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMSBIYXJyaSBQb3J0ZW4gKHBvcnRl
bkBrZGUub3JnKQotICogIENvcHlyaWdodCAoQykgMjAwMy0yMDE3IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAyMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMTE4LDcgKzExOCw3
IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAgICAgICAgIAotICAg
IHN0YXRpYyB2b2lkIG1hcmtMaXN0cyhTbG90VmlzaXRvciYsIExpc3RTZXQmKTsKKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiBzdGF0aWMgdm9pZCBtYXJrTGlzdHMoVmlzaXRvciYsIExp
c3RTZXQmKTsKIAogICAgIHZvaWQgZW5zdXJlQ2FwYWNpdHkoc2l6ZV90IHJlcXVlc3RlZENhcGFj
aXR5KQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlYWJs
ZUlkZW50aWZpZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9DYWNoZWFibGVJZGVudGlmaWVyLmgJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlYWJsZUlkZW50aWZpZXIuaAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIwLTIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0z
OSwxMCArMzksMTAgQEAgdXNpbmcgV1RGOjpVbmlxdWVkU3RyaW5nSW1wbDsKIAogbmFtZXNwYWNl
IEpTQyB7CiAKK2NsYXNzIEFic3RyYWN0U2xvdFZpc2l0b3I7CiBjbGFzcyBDb2RlQmxvY2s7CiBj
bGFzcyBJZGVudGlmaWVyOwogY2xhc3MgSlNDZWxsOwotY2xhc3MgU2xvdFZpc2l0b3I7CiAKIGNs
YXNzIENhY2hlYWJsZUlkZW50aWZpZXIgewogcHVibGljOgpAQCAtODcsNyArODcsNyBAQCBwdWJs
aWM6CiAKICAgICB1aW50cHRyX3QgcmF3Qml0cygpIGNvbnN0IHsgcmV0dXJuIG1fYml0czsgfQog
Ci0gICAgaW5saW5lIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImKSBjb25zdDsKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiBpbmxpbmUgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShW
aXNpdG9yJikgY29uc3Q7CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGR1bXAoUHJpbnRT
dHJlYW0mKSBjb25zdDsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2Fj
aGVhYmxlSWRlbnRpZmllcklubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9DYWNoZWFibGVJZGVudGlmaWVySW5saW5lcy5oCShyZXZpc2lvbiAyNzI5
MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWFibGVJZGVudGlmaWVy
SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMjAtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEzNyw3ICsxMzcsOCBAQCBpbmxpbmUgdm9pZCBDYWNo
ZWFibGVJZGVudGlmaWVyOjpzZXRVaWRCCiAgICAgbV9iaXRzID0gYml0d2lzZV9jYXN0PHVpbnRw
dHJfdD4odWlkKSB8IHNfdWlkVGFnOwogfQogCi1pbmxpbmUgdm9pZCBDYWNoZWFibGVJZGVudGlm
aWVyOjp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYgdmlzaXRvcikgY29uc3QKK3RlbXBsYXRl
PHR5cGVuYW1lIFZpc2l0b3I+CitpbmxpbmUgdm9pZCBDYWNoZWFibGVJZGVudGlmaWVyOjp2aXNp
dEFnZ3JlZ2F0ZShWaXNpdG9yJiB2aXNpdG9yKSBjb25zdAogewogICAgIGlmIChtX2JpdHMgJiYg
aXNDZWxsKCkpCiAgICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQoY2VsbCgpKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NsYXNzSW5mby5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NsYXNzSW5mby5oCShyZXZpc2lvbiAy
NzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DbGFzc0luZm8uaAkod29y
a2luZyBjb3B5KQpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIw
MDEgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKICAqICBDb3B5cmlnaHQgKEMpIDIwMDEg
UGV0ZXIgS2VsbHkgKHBta0Bwb3N0LmNvbSkKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAxOSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIw
MjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
QEAgLTQ0LDkgKzQ0LDYgQEAgc3RydWN0IE1ldGhvZFRhYmxlIHsKICAgICB1c2luZyBEZXN0cm95
RnVuY3Rpb25QdHIgPSB2b2lkICgqKShKU0NlbGwqKTsKICAgICBEZXN0cm95RnVuY3Rpb25QdHIg
TUVUSE9EX1RBQkxFX0VOVFJZKGRlc3Ryb3kpOwogCi0gICAgdXNpbmcgVmlzaXRDaGlsZHJlbkZ1
bmN0aW9uUHRyID0gdm9pZCAoKikoSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKLSAgICBWaXNpdENo
aWxkcmVuRnVuY3Rpb25QdHIgTUVUSE9EX1RBQkxFX0VOVFJZKHZpc2l0Q2hpbGRyZW4pOwotCiAg
ICAgdXNpbmcgR2V0Q2FsbERhdGFGdW5jdGlvblB0ciA9IENhbGxEYXRhICgqKShKU0NlbGwqKTsK
ICAgICBHZXRDYWxsRGF0YUZ1bmN0aW9uUHRyIE1FVEhPRF9UQUJMRV9FTlRSWShnZXRDYWxsRGF0
YSk7CiAKQEAgLTEyMCw4ICsxMTcsMjMgQEAgc3RydWN0IE1ldGhvZFRhYmxlIHsKICAgICB1c2lu
ZyBFc3RpbWF0ZWRTaXplRnVuY3Rpb25QdHIgPSBzaXplX3QgKCopKEpTQ2VsbCosIFZNJik7CiAg
ICAgRXN0aW1hdGVkU2l6ZUZ1bmN0aW9uUHRyIE1FVEhPRF9UQUJMRV9FTlRSWShlc3RpbWF0ZWRT
aXplKTsKIAorICAgIHVzaW5nIFZpc2l0Q2hpbGRyZW5GdW5jdGlvblB0ciA9IHZvaWQgKCopKEpT
Q2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgVmlzaXRDaGlsZHJlbkZ1bmN0aW9uUHRyIE1FVEhP
RF9UQUJMRV9FTlRSWSh2aXNpdENoaWxkcmVuV2l0aFNsb3RWaXNpdG9yKTsKKworICAgIHVzaW5n
IFZpc2l0Q2hpbGRyZW5XaXRoQWJzdHJhY3RTbG90VmlzaXRvclB0ciA9IHZvaWQgKCopKEpTQ2Vs
bCosIEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKKyAgICBWaXNpdENoaWxkcmVuV2l0aEFic3RyYWN0
U2xvdFZpc2l0b3JQdHIgTUVUSE9EX1RBQkxFX0VOVFJZKHZpc2l0Q2hpbGRyZW5XaXRoQWJzdHJh
Y3RTbG90VmlzaXRvcik7CisKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgdmlzaXRDaGlsZHJlbihK
U0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBjb25zdCB7IHZpc2l0Q2hpbGRyZW5X
aXRoU2xvdFZpc2l0b3IoY2VsbCwgdmlzaXRvcik7IH0KKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQg
dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3Ip
IGNvbnN0IHsgdmlzaXRDaGlsZHJlbldpdGhBYnN0cmFjdFNsb3RWaXNpdG9yKGNlbGwsIHZpc2l0
b3IpOyB9CisKICAgICB1c2luZyBWaXNpdE91dHB1dENvbnN0cmFpbnRzUHRyID0gdm9pZCAoKiko
SlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKLSAgICBWaXNpdE91dHB1dENvbnN0cmFpbnRzUHRyIE1F
VEhPRF9UQUJMRV9FTlRSWSh2aXNpdE91dHB1dENvbnN0cmFpbnRzKTsKKyAgICBWaXNpdE91dHB1
dENvbnN0cmFpbnRzUHRyIE1FVEhPRF9UQUJMRV9FTlRSWSh2aXNpdE91dHB1dENvbnN0cmFpbnRz
V2l0aFNsb3RWaXNpdG9yKTsKKworICAgIHVzaW5nIFZpc2l0T3V0cHV0Q29uc3RyYWludHNXaXRo
QWJzdHJhY3RTbG90VmlzaXRvclB0ciA9IHZvaWQgKCopKEpTQ2VsbCosIEFic3RyYWN0U2xvdFZp
c2l0b3ImKTsKKyAgICBWaXNpdE91dHB1dENvbnN0cmFpbnRzV2l0aEFic3RyYWN0U2xvdFZpc2l0
b3JQdHIgTUVUSE9EX1RBQkxFX0VOVFJZKHZpc2l0T3V0cHV0Q29uc3RyYWludHNXaXRoQWJzdHJh
Y3RTbG90VmlzaXRvcik7CisKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgdmlzaXRPdXRwdXRDb25z
dHJhaW50cyhKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBjb25zdCB7IHZpc2l0
T3V0cHV0Q29uc3RyYWludHNXaXRoU2xvdFZpc2l0b3IoY2VsbCwgdmlzaXRvcik7IH0KKyAgICBB
TFdBWVNfSU5MSU5FIHZvaWQgdmlzaXRPdXRwdXRDb25zdHJhaW50cyhKU0NlbGwqIGNlbGwsIEFi
c3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0IHsgdmlzaXRPdXRwdXRDb25zdHJhaW50
c1dpdGhBYnN0cmFjdFNsb3RWaXNpdG9yKGNlbGwsIHZpc2l0b3IpOyB9CiB9OwogCiAjZGVmaW5l
IENSRUFURV9NRU1CRVJfQ0hFQ0tFUihtZW1iZXIpIFwKQEAgLTE0Nyw3ICsxNTksNiBAQCBzdHJ1
Y3QgTWV0aG9kVGFibGUgewogICAgIEpTQ2FzdGluZ0hlbHBlcnM6OkluaGVyaXRzVHJhaXRzPENs
YXNzTmFtZT46OnR5cGVSYW5nZSwgXAogICAgIHsgXAogICAgICAgICAmQ2xhc3NOYW1lOjpkZXN0
cm95LCBcCi0gICAgICAgICZDbGFzc05hbWU6OnZpc2l0Q2hpbGRyZW4sIFwKICAgICAgICAgJkNs
YXNzTmFtZTo6Z2V0Q2FsbERhdGEsIFwKICAgICAgICAgJkNsYXNzTmFtZTo6Z2V0Q29uc3RydWN0
RGF0YSwgXAogICAgICAgICAmQ2xhc3NOYW1lOjpwdXQsIFwKQEAgLTE3Myw2ICsxODQsOSBAQCBz
dHJ1Y3QgTWV0aG9kVGFibGUgewogICAgICAgICAmQ2xhc3NOYW1lOjpkdW1wVG9TdHJlYW0sIFwK
ICAgICAgICAgJkNsYXNzTmFtZTo6YW5hbHl6ZUhlYXAsIFwKICAgICAgICAgJkNsYXNzTmFtZTo6
ZXN0aW1hdGVkU2l6ZSwgXAorICAgICAgICAmQ2xhc3NOYW1lOjp2aXNpdENoaWxkcmVuLCBcCisg
ICAgICAgICZDbGFzc05hbWU6OnZpc2l0Q2hpbGRyZW4sIFwKKyAgICAgICAgJkNsYXNzTmFtZTo6
dmlzaXRPdXRwdXRDb25zdHJhaW50cywgXAogICAgICAgICAmQ2xhc3NOYW1lOjp2aXNpdE91dHB1
dENvbnN0cmFpbnRzLCBcCiAgICAgfSwgXAogICAgIENsYXNzTmFtZTo6VHlwZWRBcnJheVN0b3Jh
Z2VUeXBlLCBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DbG9uZWRBcmd1
bWVudHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Ns
b25lZEFyZ3VtZW50cy5jcHAJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0Nsb25lZEFyZ3VtZW50cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNjcs
NyArMjY3LDggQEAgdm9pZCBDbG9uZWRBcmd1bWVudHM6Om1hdGVyaWFsaXplU3BlY2lhbAogICAg
ICAgICBtYXRlcmlhbGl6ZVNwZWNpYWxzKGdsb2JhbE9iamVjdCk7CiB9CiAKLXZvaWQgQ2xvbmVk
QXJndW1lbnRzOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0
b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBDbG9uZWRBcmd1bWVudHM6OnZp
c2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBD
bG9uZWRBcmd1bWVudHMqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8Q2xvbmVkQXJndW1lbnRzKj4oY2Vs
bCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpA
QCAtMjc1LDUgKzI3Niw3IEBAIHZvaWQgQ2xvbmVkQXJndW1lbnRzOjp2aXNpdENoaWxkcmVuKEpT
Q2UKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2NhbGxlZSk7CiB9CiAKK0RFRklO
RV9WSVNJVF9DSElMRFJFTihDbG9uZWRBcmd1bWVudHMpOworCiB9IC8vIG5hbWVzcGFjZSBKU0MK
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xvbmVkQXJndW1lbnRzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xvbmVkQXJndW1l
bnRzLmgJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0Nsb25lZEFyZ3VtZW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxNS0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjIsNyArNjIsNyBAQCBwdWJs
aWM6CiAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxP
YmplY3QqLCBKU1ZhbHVlIHByb3RvdHlwZSk7CiAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRl
U2xvd1B1dFN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBwcm90b3R5cGUp
OwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYp
OworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBERUNMQVJFX0lORk87CiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGlyZWN0QXJndW1lbnRz
LmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
RGlyZWN0QXJndW1lbnRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTkwLDcgKzkwLDggQEAgc2l6
ZV90IERpcmVjdEFyZ3VtZW50czo6ZXN0aW1hdGVkU2l6ZShKUwogICAgIHJldHVybiBCYXNlOjpl
c3RpbWF0ZWRTaXplKGNlbGwsIHZtKSArIG1hcHBlZEFyZ3VtZW50c1NpemUgKyBtb2RpZmllZEFy
Z3VtZW50c1NpemU7CiB9CiAKLXZvaWQgRGlyZWN0QXJndW1lbnRzOjp2aXNpdENoaWxkcmVuKEpT
Q2VsbCogdGhpc0NlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUg
VmlzaXRvcj4KK3ZvaWQgRGlyZWN0QXJndW1lbnRzOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwq
IHRoaXNDZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIERpcmVjdEFyZ3VtZW50cyogdGhp
c09iamVjdCA9IHN0YXRpY19jYXN0PERpcmVjdEFyZ3VtZW50cyo+KHRoaXNDZWxsKTsKICAgICBB
U1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC0xMDQsNiAr
MTA1LDggQEAgdm9pZCBEaXJlY3RBcmd1bWVudHM6OnZpc2l0Q2hpbGRyZW4oSlNDZQogICAgIEdl
bmVyaWNBcmd1bWVudHM8RGlyZWN0QXJndW1lbnRzPjo6dmlzaXRDaGlsZHJlbih0aGlzQ2VsbCwg
dmlzaXRvcik7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihEaXJlY3RBcmd1bWVudHMpOwor
CiBTdHJ1Y3R1cmUqIERpcmVjdEFyZ3VtZW50czo6Y3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCiB7CiAgICAgcmV0
dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUlu
Zm8oRGlyZWN0QXJndW1lbnRzVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGlyZWN0QXJndW1lbnRzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGlyZWN0QXJndW1lbnRzLmgJKHJl
dmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVjdEFy
Z3VtZW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxNS0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjUsNyArNjUsNyBAQCBwdWJsaWM6CiAgICAg
c3RhdGljIERpcmVjdEFyZ3VtZW50cyogY3JlYXRlQnlDb3B5aW5nKEpTR2xvYmFsT2JqZWN0Kiwg
Q2FsbEZyYW1lKik7CiAKICAgICBzdGF0aWMgc2l6ZV90IGVzdGltYXRlZFNpemUoSlNDZWxsKiwg
Vk0mKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9y
Jik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKICAgICAKICAgICB1aW50MzJfdCBpbnRl
cm5hbExlbmd0aCgpIGNvbnN0CiAgICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvRXZhbEV4ZWN1dGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0V2YWxFeGVjdXRhYmxlLmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXZhbEV4ZWN1dGFibGUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCwgMjAx
MywgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAwOS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTAsNyArNTAsOCBAQCBhdXRvIEV2YWxFeGVjdXRh
YmxlOjplbnN1cmVUZW1wbGF0ZU9iamVjCiAgICAgcmV0dXJuIGVuc3VyZVRlbXBsYXRlT2JqZWN0
TWFwSW1wbChtX3RlbXBsYXRlT2JqZWN0TWFwKTsKIH0KIAotdm9pZCBFdmFsRXhlY3V0YWJsZTo6
dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxh
dGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgRXZhbEV4ZWN1dGFibGU6OnZpc2l0Q2hpbGRyZW5J
bXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBFdmFsRXhlY3V0YWJs
ZSogdGhpc09iamVjdCA9IGpzQ2FzdDxFdmFsRXhlY3V0YWJsZSo+KGNlbGwpOwogICAgIEFTU0VS
VF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTY0LDQgKzY1LDYg
QEAgdm9pZCBFdmFsRXhlY3V0YWJsZTo6dmlzaXRDaGlsZHJlbihKU0NlbAogICAgIH0KIH0KIAor
REVGSU5FX1ZJU0lUX0NISUxEUkVOKEV2YWxFeGVjdXRhYmxlKTsKKwogfSAvLyBuYW1lc3BhY2Ug
SlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FdmFsRXhlY3V0YWJsZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V2YWxFeGVjdXRh
YmxlLmgJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0V2YWxFeGVjdXRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDA5LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03OSw3ICs3OSw3IEBAIHByb3Rl
Y3RlZDoKICAgICB1c2luZyBCYXNlOjpmaW5pc2hDcmVhdGlvbjsKICAgICBFdmFsRXhlY3V0YWJs
ZShKU0dsb2JhbE9iamVjdCosIGNvbnN0IFNvdXJjZUNvZGUmLCBib29sIGluU3RyaWN0Q29udGV4
dCwgRGVyaXZlZENvbnRleHRUeXBlLCBib29sIGlzQXJyb3dGdW5jdGlvbkNvbnRleHQsIGJvb2wg
aXNJbnNpZGVPcmRpbmFyeUZ1bmN0aW9uLCBFdmFsQ29udGV4dFR5cGUsIE5lZWRzQ2xhc3NGaWVs
ZEluaXRpYWxpemVyLCBQcml2YXRlQnJhbmRSZXF1aXJlbWVudCk7CiAKLSAgICBzdGF0aWMgdm9p
ZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJ
VF9DSElMRFJFTjsKIAogICAgIHVuc2lnbmVkIG1fbmVlZHNDbGFzc0ZpZWxkSW5pdGlhbGl6ZXIg
OiAxOwogICAgIHVuc2lnbmVkIG1fcHJpdmF0ZUJyYW5kUmVxdWlyZW1lbnQgOiAxOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9uLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGNlcHRpb24uY3BwCShyZXZpc2lvbiAy
NzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGNlcHRpb24uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0y
MDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
NS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtNTMsNyArNTMsOCBAQCBTdHJ1Y3R1cmUqIEV4Y2VwdGlvbjo6Y3Jl
YXRlU3RydWN0dXJlKFZNCiAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxP
YmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oQ2VsbFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5m
bygpKTsKIH0KIAotdm9pZCBFeGNlcHRpb246OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBT
bG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEV4
Y2VwdGlvbjo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9y
KQogewogICAgIEV4Y2VwdGlvbiogdGhpc09iamVjdCA9IGpzQ2FzdDxFeGNlcHRpb24qPihjZWxs
KTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBA
IC02NCw2ICs2NSw4IEBAIHZvaWQgRXhjZXB0aW9uOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2UK
ICAgICAgICAgZnJhbWUudmlzaXRDaGlsZHJlbih2aXNpdG9yKTsKIH0KIAorREVGSU5FX1ZJU0lU
X0NISUxEUkVOKEV4Y2VwdGlvbik7CisKIEV4Y2VwdGlvbjo6RXhjZXB0aW9uKFZNJiB2bSkKICAg
ICA6IEJhc2Uodm0sIHZtLmV4Y2VwdGlvblN0cnVjdHVyZS5nZXQoKSkKIHsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbi5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbi5oCShyZXZpc2lvbiAyNzI5MDIpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGNlcHRpb24uaAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxOSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTUxLDcgKzUxLDcgQEAgcHVibGljOgogCiAgICAgc3RhdGljIFN0cnVjdHVyZSogY3Jl
YXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlIHByb3RvdHlwZSk7CiAK
LSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7Cisg
ICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIERFQ0xBUkVfRVhQT1JUX0lORk87CiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25F
eGVjdXRhYmxlLmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvRnVuY3Rpb25FeGVjdXRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY3LDcg
KzY3LDggQEAgRnVuY3Rpb25Db2RlQmxvY2sqIEZ1bmN0aW9uRXhlY3V0YWJsZTo6YgogICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxGdW5jdGlvbkNvZGVCbG9jayo+KGVkZ2UtPmNvZGVCbG9jaygpLT5i
YXNlbGluZUFsdGVybmF0aXZlKCkpOwogfQogCi12b2lkIEZ1bmN0aW9uRXhlY3V0YWJsZTo6dmlz
aXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8
dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgRnVuY3Rpb25FeGVjdXRhYmxlOjp2aXNpdENoaWxkcmVu
SW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgRnVuY3Rpb25FeGVj
dXRhYmxlKiB0aGlzT2JqZWN0ID0ganNDYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGNlbGwpOwog
ICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTg2
LDYgKzg3LDggQEAgdm9pZCBGdW5jdGlvbkV4ZWN1dGFibGU6OnZpc2l0Q2hpbGRyZW4oSgogICAg
IH0KIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEZ1bmN0aW9uRXhlY3V0YWJsZSk7CisKIEZ1
bmN0aW9uRXhlY3V0YWJsZSogRnVuY3Rpb25FeGVjdXRhYmxlOjpmcm9tR2xvYmFsQ29kZSgKICAg
ICBjb25zdCBJZGVudGlmaWVyJiBuYW1lLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBj
b25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIAogICAgIEpTT2JqZWN0KiYgZXhjZXB0aW9uLCBpbnQg
b3ZlcnJpZGVMaW5lTnVtYmVyLCBPcHRpb25hbDxpbnQ+IGZ1bmN0aW9uQ29uc3RydWN0b3JQYXJh
bWV0ZXJzRW5kUG9zaXRpb24pCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9G
dW5jdGlvbkV4ZWN1dGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9GdW5jdGlvbkV4ZWN1dGFibGUuaAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25FeGVjdXRhYmxlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTkgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0xNjYsNyArMTY2LDcgQEAgcHVibGljOgogICAgIEpTUGFyc2VyU2NyaXB0TW9kZSBz
Y3JpcHRNb2RlKCkgY29uc3QgeyByZXR1cm4gbV91bmxpbmtlZEV4ZWN1dGFibGUtPnNjcmlwdE1v
ZGUoKTsgfQogICAgIFNvdXJjZUNvZGUgY2xhc3NTb3VyY2UoKSBjb25zdCB7IHJldHVybiBtX3Vu
bGlua2VkRXhlY3V0YWJsZS0+Y2xhc3NTb3VyY2UoKTsgfQogCi0gICAgc3RhdGljIHZvaWQgdmlz
aXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJ
TERSRU47CiAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90bykKICAgICB7CiAgICAgICAg
IHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90bywgVHlwZUlu
Zm8oRnVuY3Rpb25FeGVjdXRhYmxlVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25SYXJlRGF0YS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25SYXJlRGF0
YS5jcHAJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0Z1bmN0aW9uUmFyZURhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTEsNyArNTEsOCBAQCBT
dHJ1Y3R1cmUqIEZ1bmN0aW9uUmFyZURhdGE6OmNyZWF0ZVN0cnVjCiAgICAgcmV0dXJuIFN0cnVj
dHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oQ2VsbFR5
cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKIH0KIAotdm9pZCBGdW5jdGlvblJhcmVEYXRh
Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1w
bGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBGdW5jdGlvblJhcmVEYXRhOjp2aXNpdENoaWxk
cmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgRnVuY3Rpb25S
YXJlRGF0YSogcmFyZURhdGEgPSBqc0Nhc3Q8RnVuY3Rpb25SYXJlRGF0YSo+KGNlbGwpOwogICAg
IEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2VsbCwgaW5mbygpKTsKQEAgLTYzLDYgKzY0LDgg
QEAgdm9pZCBGdW5jdGlvblJhcmVEYXRhOjp2aXNpdENoaWxkcmVuKEpTQwogICAgIHZpc2l0b3Iu
YXBwZW5kKHJhcmVEYXRhLT5tX2V4ZWN1dGFibGUpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERS
RU4oRnVuY3Rpb25SYXJlRGF0YSk7CisKIEZ1bmN0aW9uUmFyZURhdGE6OkZ1bmN0aW9uUmFyZURh
dGEoVk0mIHZtLCBFeGVjdXRhYmxlQmFzZSogZXhlY3V0YWJsZSkKICAgICA6IEJhc2Uodm0sIHZt
LmZ1bmN0aW9uUmFyZURhdGFTdHJ1Y3R1cmUuZ2V0KCkpCiAgICAgLCBtX29iamVjdEFsbG9jYXRp
b25Qcm9maWxlKCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9u
UmFyZURhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9G
dW5jdGlvblJhcmVEYXRhLmgJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0Z1bmN0aW9uUmFyZURhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY1LDcg
KzY1LDcgQEAgcHVibGljOgogCiAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJl
KFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlIHByb3RvdHlwZSk7CiAKLSAgICBzdGF0aWMg
dm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9W
SVNJVF9DSElMRFJFTjsKIAogICAgIERFQ0xBUkVfSU5GTzsKIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50cy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNBcmd1bWVudHMuaAkocmV2aXNpb24gMjcy
OTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50cy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
NS0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtNDQsNyArNDQsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgewogICAg
IH0KIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3Im
KTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogICAgIHN0YXRpYyBib29sIGdldE93blBy
b3BlcnR5U2xvdChKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBQcm9w
ZXJ0eVNsb3QmKTsKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpT
T2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5
U2xvdCYpOwogICAgIHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBK
U0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZUFycmF5JiwgRG9udEVudW1Qcm9wZXJ0aWVzTW9k
ZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljQXJndW1lbnRz
SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dl
bmVyaWNBcmd1bWVudHNJbmxpbmVzLmgJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNBcmd1bWVudHNJbmxpbmVzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjAgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0zMSw3ICszMSw4IEBACiBuYW1lc3BhY2UgSlNDIHsKIAogdGVtcGxhdGU8dHlwZW5h
bWUgVHlwZT4KLXZvaWQgR2VuZXJpY0FyZ3VtZW50czxUeXBlPjo6dmlzaXRDaGlsZHJlbihKU0Nl
bGwqIHRoaXNDZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZp
c2l0b3I+Cit2b2lkIEdlbmVyaWNBcmd1bWVudHM8VHlwZT46OnZpc2l0Q2hpbGRyZW5JbXBsKEpT
Q2VsbCogdGhpc0NlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgVHlwZSogdGhpc09iamVj
dCA9IHN0YXRpY19jYXN0PFR5cGUqPih0aGlzQ2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9J
TkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNDEsNiArNDIsOCBAQCB2b2lkIEdlbmVy
aWNBcmd1bWVudHM8VHlwZT46OnZpc2l0Q2hpbGRyCiAgICAgICAgIHZpc2l0b3IubWFya0F1eGls
aWFyeSh0aGlzT2JqZWN0LT5tX21vZGlmaWVkQXJndW1lbnRzRGVzY3JpcHRvci5nZXRVbnNhZmUo
KSk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTl9XSVRIX01PRElGSUVSKHRlbXBsYXRlPHR5
cGVuYW1lIFR5cGU+LCBHZW5lcmljQXJndW1lbnRzPFR5cGU+KTsKKwogdGVtcGxhdGU8dHlwZW5h
bWUgVHlwZT4KIGJvb2wgR2VuZXJpY0FyZ3VtZW50czxUeXBlPjo6Z2V0T3duUHJvcGVydHlTbG90
KEpTT2JqZWN0KiBvYmplY3QsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFByb3BlcnR5
TmFtZSBpZGVudCwgUHJvcGVydHlTbG90JiBzbG90KQogewpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvR2V0dGVyU2V0dGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9HZXR0ZXJTZXR0ZXIuY3BwCShyZXZpc2lvbiAyNzI5MDIpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZXR0ZXJTZXR0ZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMiBI
YXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQogICogIENvcHlyaWdodCAoQykgMjAwMSBQZXRl
ciBLZWxseSAocG1rQHBvc3QuY29tKQotICogIENvcHlyaWdodCAoQykgMjAwNC0yMDE3IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDQtMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAt
MzMsNyArMzMsOCBAQCBTVEFUSUNfQVNTRVJUX0lTX1RSSVZJQUxMWV9ERVNUUlVDVElCTEUoCiAK
IGNvbnN0IENsYXNzSW5mbyBHZXR0ZXJTZXR0ZXI6OnNfaW5mbyA9IHsgIkdldHRlclNldHRlciIs
IG51bGxwdHIsIG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoR2V0dGVyU2V0
dGVyKSB9OwogCi12b2lkIEdldHRlclNldHRlcjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGws
IFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQg
R2V0dGVyU2V0dGVyOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZp
c2l0b3IpCiB7CiAgICAgR2V0dGVyU2V0dGVyKiB0aGlzT2JqZWN0ID0ganNDYXN0PEdldHRlclNl
dHRlcio+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwg
aW5mbygpKTsKQEAgLTQzLDYgKzQ0LDggQEAgdm9pZCBHZXR0ZXJTZXR0ZXI6OnZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKgogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fc2V0dGVyKTsKIH0K
IAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEdldHRlclNldHRlcik7CisKIEpTVmFsdWUgY2FsbEdl
dHRlcihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIGJhc2UsIEpTVmFsdWUg
Z2V0dGVyU2V0dGVyKQogewogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dldHRlclNldHRlci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dldHRlclNldHRlci5oCShyZXZpc2lv
biAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZXR0ZXJTZXR0ZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAx
OTk5LTIwMDEgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKICAqICBDb3B5cmlnaHQgKEMp
IDIwMDEgUGV0ZXIgS2VsbHkgKHBta0Bwb3N0LmNvbSkKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDMt
MjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAy
MDAzLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAg
KiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKQEAgLTgyLDcgKzgyLDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gY3JlYXRlKHZt
LCBnbG9iYWxPYmplY3QsIGdldHRlck9iamVjdCwgc2V0dGVyT2JqZWN0KTsKICAgICB9CiAKLSAg
ICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAg
REVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIEpTT2JqZWN0KiBnZXR0ZXIoKSBjb25zdCB7
IHJldHVybiBtX2dldHRlci5nZXQoKTsgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9IYXNoTWFwSW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSGFzaE1hcEltcGwuY3BwCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9IYXNoTWFwSW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzAs
NiArMzAsOSBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOX1dJ
VEhfTU9ESUZJRVIodGVtcGxhdGU8PiwgSGFzaE1hcEJ1Y2tldDxIYXNoTWFwQnVja2V0RGF0YUtl
eT4pOworREVGSU5FX1ZJU0lUX0NISUxEUkVOX1dJVEhfTU9ESUZJRVIodGVtcGxhdGU8PiwgSGFz
aE1hcEJ1Y2tldDxIYXNoTWFwQnVja2V0RGF0YUtleVZhbHVlPik7CisKIHRlbXBsYXRlPD4KIGNv
bnN0IENsYXNzSW5mbyBIYXNoTWFwQnVja2V0PEhhc2hNYXBCdWNrZXREYXRhS2V5Pjo6c19pbmZv
ID0KICAgICB7ICJIYXNoTWFwQnVja2V0IiwgbnVsbHB0ciwgbnVsbHB0ciwgbnVsbHB0ciwgQ1JF
QVRFX01FVEhPRF9UQUJMRShIYXNoTWFwQnVja2V0PEhhc2hNYXBCdWNrZXREYXRhS2V5PikgfTsK
QEAgLTM4LDggKzQxLDkgQEAgdGVtcGxhdGU8PgogY29uc3QgQ2xhc3NJbmZvIEhhc2hNYXBCdWNr
ZXQ8SGFzaE1hcEJ1Y2tldERhdGFLZXlWYWx1ZT46OnNfaW5mbyA9CiAgICAgeyAiSGFzaE1hcEJ1
Y2tldCIsIG51bGxwdHIsIG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSGFz
aE1hcEJ1Y2tldDxIYXNoTWFwQnVja2V0RGF0YUtleVZhbHVlPikgfTsKIAotdGVtcGxhdGUgPHR5
cGVuYW1lIERhdGE+Ci12b2lkIEhhc2hNYXBCdWNrZXQ8RGF0YT46OnZpc2l0Q2hpbGRyZW4oSlND
ZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIERhdGE+
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBIYXNoTWFwQnVja2V0PERhdGE+Ojp2
aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAg
SGFzaE1hcEJ1Y2tldCogdGhpc09iamVjdCA9IGpzQ2FzdDxIYXNoTWFwQnVja2V0Kj4oY2VsbCk7
CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAt
NTIsOCArNTYsOSBAQCB2b2lkIEhhc2hNYXBCdWNrZXQ8RGF0YT46OnZpc2l0Q2hpbGRyZW4oCiAg
ICAgdmlzaXRvci5hcHBlbmRWYWx1ZXMoYml0d2lzZV9jYXN0PFdyaXRlQmFycmllcjxVbmtub3du
Pio+KCZ0aGlzT2JqZWN0LT5tX2RhdGEpLCBzaXplb2YoRGF0YSkgLyBzaXplb2YoV3JpdGVCYXJy
aWVyPFVua25vd24+KSk7CiB9CiAKLXRlbXBsYXRlIDx0eXBlbmFtZSBIYXNoTWFwQnVja2V0Pgot
dm9pZCBIYXNoTWFwSW1wbDxIYXNoTWFwQnVja2V0Pjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNl
bGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgSGFzaE1hcEJ1Y2tl
dD4KK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEhhc2hNYXBJbXBsPEhhc2hNYXBC
dWNrZXQ+Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3Ip
CiB7CiAgICAgSGFzaE1hcEltcGwqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SGFzaE1hcEltcGwqPihj
ZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7
CkBAIC02Niw2ICs3MSw4IEBAIHZvaWQgSGFzaE1hcEltcGw8SGFzaE1hcEJ1Y2tldD46OnZpc2l0
Q2gKICAgICAgICAgdmlzaXRvci5tYXJrQXV4aWxpYXJ5KGJ1ZmZlcik7CiB9CiAKK0RFRklORV9W
SVNJVF9DSElMRFJFTl9XSVRIX01PRElGSUVSKHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hNYXBCdWNr
ZXQ+LCBIYXNoTWFwSW1wbDxIYXNoTWFwQnVja2V0Pik7CisKIHRlbXBsYXRlIDx0eXBlbmFtZSBI
YXNoTWFwQnVja2V0Pgogc2l6ZV90IEhhc2hNYXBJbXBsPEhhc2hNYXBCdWNrZXQ+Ojplc3RpbWF0
ZWRTaXplKEpTQ2VsbCogY2VsbCwgVk0mIHZtKQogewpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSGFzaE1hcEltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9IYXNoTWFwSW1wbC5oCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9IYXNoTWFwSW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE4IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MTQ4LDcgKzE0OCw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fZGF0YS52YWx1ZS5nZXQo
KTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RW
aXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIEFMV0FZU19JTkxJ
TkUgSGFzaE1hcEJ1Y2tldCogbmV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fbmV4dC5nZXQoKTsgfQog
ICAgIEFMV0FZU19JTkxJTkUgSGFzaE1hcEJ1Y2tldCogcHJldigpIGNvbnN0IHsgcmV0dXJuIG1f
cHJldi5nZXQoKTsgfQpAQCAtMzY0LDcgKzM2NCw3IEBAIGNsYXNzIEhhc2hNYXBJbXBsIDogcHVi
bGljIEpTTm9uRmluYWxPYmoKIHB1YmxpYzoKICAgICB1c2luZyBCdWNrZXRUeXBlID0gSGFzaE1h
cEJ1Y2tldFR5cGU7CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNs
b3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIHN0YXRpYyBz
aXplX3QgZXN0aW1hdGVkU2l6ZShKU0NlbGwqLCBWTSYpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9JbnRlcm5hbEZ1bmN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRlcm5hbEZ1bmN0aW9uLmNwcAkocmV2aXNpb24g
MjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50ZXJuYWxGdW5jdGlv
bi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSw3IEBACiAvKgogICogIENvcHlyaWdodCAo
QykgMTk5OS0yMDAyIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCiAgKiAgQ29weXJpZ2h0
IChDKSAyMDAxIFBldGVyIEtlbGx5IChwbWtAcG9zdC5jb20pCi0gKiAgQ29weXJpZ2h0IChDKSAy
MDA0LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAo
QykgMjAwNC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiAgVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCkBAIC02NCw3ICs2NCw4IEBAIHZvaWQgSW50ZXJuYWxGdW5jdGlvbjo6ZmluaXNo
Q3JlYXRpb24oVk0KICAgICB9CiB9CiAKLXZvaWQgSW50ZXJuYWxGdW5jdGlvbjo6dmlzaXRDaGls
ZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5h
bWUgVmlzaXRvcj4KK3ZvaWQgSW50ZXJuYWxGdW5jdGlvbjo6dmlzaXRDaGlsZHJlbkltcGwoSlND
ZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEludGVybmFsRnVuY3Rpb24qIHRo
aXNPYmplY3QgPSBqc0Nhc3Q8SW50ZXJuYWxGdW5jdGlvbio+KGNlbGwpOwogICAgIEFTU0VSVF9H
Q19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTczLDYgKzc0LDggQEAg
dm9pZCBJbnRlcm5hbEZ1bmN0aW9uOjp2aXNpdENoaWxkcmVuKEpTQwogICAgIHZpc2l0b3IuYXBw
ZW5kKHRoaXNPYmplY3QtPm1fb3JpZ2luYWxOYW1lKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxE
UkVOX1dJVEhfTU9ESUZJRVIoSlNfRVhQT1JUX1BSSVZBVEUsIEludGVybmFsRnVuY3Rpb24pOwor
CiBjb25zdCBTdHJpbmcmIEludGVybmFsRnVuY3Rpb246Om5hbWUoKQogewogICAgIGNvbnN0IFN0
cmluZyYgbmFtZSA9IG1fb3JpZ2luYWxOYW1lLT50cnlHZXRWYWx1ZSgpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50ZXJuYWxGdW5jdGlvbi5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGVybmFsRnVuY3Rpb24uaAkocmV2aXNp
b24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50ZXJuYWxGdW5j
dGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqICBDb3B5cmlnaHQg
KEMpIDE5OTktMjAwMCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQotICogIENvcHlyaWdo
dCAoQykgMjAwMy0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5
cmlnaHQgKEMpIDIwMDMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiAg
Q29weXJpZ2h0IChDKSAyMDA3IENhbWVyb24gWndhcmljaCAoY3d6d2FyaWNoQHV3YXRlcmxvby5j
YSkKICAqICBDb3B5cmlnaHQgKEMpIDIwMDcgTWFrcyBPcmxvdmljaAogICoKQEAgLTQ2LDcgKzQ2
LDcgQEAgcHVibGljOgogCiAgICAgREVDTEFSRV9FWFBPUlRfSU5GTzsKIAotICAgIEpTX0VYUE9S
VF9QUklWQVRFIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3Im
KTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOX1dJVEhfTU9ESUZJRVIoSlNfRVhQT1JUX1BS
SVZBVEUpOwogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgY29uc3QgU3RyaW5nJiBuYW1lKCk7CiAg
ICAgY29uc3QgU3RyaW5nIGRpc3BsYXlOYW1lKFZNJik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9JbnRsQ29sbGF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0ludGxDb2xsYXRvci5jcHAJKHJldmlzaW9uIDI3MjkwMikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxDb2xsYXRvci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNyArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDE1IEFuZHkgVmFu
V2Fnb25lciAoYW5keUB2YW53YWdvbmVyLmZhbWlseSkKICAqIENvcHlyaWdodCAoQykgMjAxNSBT
dWtvbHNhayBTYWtzaHV3b25nIChzdWtvbHNha0BnbWFpbC5jb20pCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTYtMjAyMCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY1LDcgKzY1LDggQEAgdm9pZCBJbnRsQ29sbGF0b3I6
OmZpbmlzaENyZWF0aW9uKFZNJiB2bQogICAgIEFTU0VSVChpbmhlcml0cyh2bSwgaW5mbygpKSk7
CiB9CiAKLXZvaWQgSW50bENvbGxhdG9yOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xv
dFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBJbnRs
Q29sbGF0b3I6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRv
cikKIHsKICAgICBJbnRsQ29sbGF0b3IqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SW50bENvbGxhdG9y
Kj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZv
KCkpOwpAQCAtNzUsNiArNzYsOCBAQCB2b2lkIEludGxDb2xsYXRvcjo6dmlzaXRDaGlsZHJlbihK
U0NlbGwqCiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9ib3VuZENvbXBhcmUpOwog
fQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSW50bENvbGxhdG9yKTsKKwogVmVjdG9yPFN0cmlu
Zz4gSW50bENvbGxhdG9yOjpzb3J0TG9jYWxlRGF0YShjb25zdCBTdHJpbmcmIGxvY2FsZSwgUmVs
ZXZhbnRFeHRlbnNpb25LZXkga2V5KQogewogICAgIC8vIDkuMSBJbnRlcm5hbCBzbG90cyBvZiBT
ZXJ2aWNlIENvbnN0cnVjdG9ycyAmIDEwLjIuMyBJbnRlcm5hbCBzbG90cyAoRUNNQS00MDIgMi4w
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bENvbGxhdG9yLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bENvbGxhdG9yLmgJ
KHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxD
b2xsYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdo
dCAoQykgMjAxNSBBbmR5IFZhbldhZ29uZXIgKGFuZHlAdmFud2Fnb25lci5mYW1pbHkpCisgKiBD
b3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC04MCw3ICs4MSw3IEBAIHB1YmxpYzoKIHByaXZh
dGU6CiAgICAgSW50bENvbGxhdG9yKFZNJiwgU3RydWN0dXJlKik7CiAgICAgdm9pZCBmaW5pc2hD
cmVhdGlvbihWTSYpOwotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xv
dFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgYm9vbCB1cGRh
dGVDYW5Eb0FTQ0lJVUNBRFVDRVRDb21wYXJpc29uKCkgY29uc3Q7CiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxEYXRlVGltZUZvcm1hdC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERhdGVUaW1lRm9ybWF0LmNwcAko
cmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERh
dGVUaW1lRm9ybWF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBD
b3B5cmlnaHQgKEMpIDIwMTUgQW5keSBWYW5XYWdvbmVyIChhbmR5QHZhbndhZ29uZXIuZmFtaWx5
KQotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC05MCw3ICs5MCw4IEBA
IHZvaWQgSW50bERhdGVUaW1lRm9ybWF0OjpmaW5pc2hDcmVhdGlvbigKICAgICBBU1NFUlQoaW5o
ZXJpdHModm0sIGluZm8oKSkpOwogfQogCi12b2lkIEludGxEYXRlVGltZUZvcm1hdDo6dmlzaXRD
aGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlw
ZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSW50bERhdGVUaW1lRm9ybWF0Ojp2aXNpdENoaWxkcmVuSW1w
bChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSW50bERhdGVUaW1lRm9y
bWF0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEludGxEYXRlVGltZUZvcm1hdCo+KGNlbGwpOwogICAg
IEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTEwMCw2
ICsxMDEsOCBAQCB2b2lkIEludGxEYXRlVGltZUZvcm1hdDo6dmlzaXRDaGlsZHJlbihKCiAgICAg
dmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9ib3VuZEZvcm1hdCk7CiB9CiAKK0RFRklORV9W
SVNJVF9DSElMRFJFTihJbnRsRGF0ZVRpbWVGb3JtYXQpOworCiB2b2lkIEludGxEYXRlVGltZUZv
cm1hdDo6c2V0Qm91bmRGb3JtYXQoVk0mIHZtLCBKU0JvdW5kRnVuY3Rpb24qIGZvcm1hdCkKIHsK
ICAgICBtX2JvdW5kRm9ybWF0LnNldCh2bSwgdGhpcywgZm9ybWF0KTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxEYXRlVGltZUZvcm1hdC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxEYXRlVGltZUZvcm1hdC5oCShyZXZp
c2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsRGF0ZVRp
bWVGb3JtYXQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmln
aHQgKEMpIDIwMTUgQW5keSBWYW5XYWdvbmVyIChhbmR5QHZhbndhZ29uZXIuZmFtaWx5KQorICog
Q29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODUsNyArODYsNyBAQCBwdWJsaWM6CiBwcml2
YXRlOgogICAgIEludGxEYXRlVGltZUZvcm1hdChWTSYsIFN0cnVjdHVyZSopOwogICAgIHZvaWQg
ZmluaXNoQ3JlYXRpb24oVk0mKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2Vs
bCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIHN0
YXRpYyBWZWN0b3I8U3RyaW5nPiBsb2NhbGVEYXRhKGNvbnN0IFN0cmluZyYsIFJlbGV2YW50RXh0
ZW5zaW9uS2V5KTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bExv
Y2FsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50
bExvY2FsZS5jcHAJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0ludGxMb2NhbGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoK
ICAqIENvcHlyaWdodCAoQykgMjAyMCBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5j
LgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTgsNyArNTksOCBAQCB2b2lkIElu
dGxMb2NhbGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKICAgICBBU1NFUlQoaW5oZXJpdHModm0s
IGluZm8oKSkpOwogfQogCi12b2lkIEludGxMb2NhbGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBj
ZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2
b2lkIEludGxMb2NhbGU6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYg
dmlzaXRvcikKIHsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEludGxMb2NhbGUqPihj
ZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7
CkBAIC02Niw2ICs2OCw4IEBAIHZvaWQgSW50bExvY2FsZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwq
IGMKICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwogfQogCitE
RUZJTkVfVklTSVRfQ0hJTERSRU4oSW50bExvY2FsZSk7CisKIGNsYXNzIExvY2FsZUlEQnVpbGRl
ciBmaW5hbCB7CiBwdWJsaWM6CiAgICAgYm9vbCBpbml0aWFsaXplKGNvbnN0IFN0cmluZyYpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bExvY2FsZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxMb2NhbGUuaAkocmV2aXNp
b24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bExvY2FsZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAy
MCBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgorICogQ29weXJpZ2h0IChDKSAy
MDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtNzEsNyArNzIsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIEludGxM
b2NhbGUoVk0mLCBTdHJ1Y3R1cmUqKTsKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7Ci0g
ICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAg
IERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBTdHJpbmcga2V5d29yZFZhbHVlKEFTQ0lJ
TGl0ZXJhbCwgYm9vbCBpc0Jvb2xlYW4gPSBmYWxzZSkgY29uc3Q7CiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxOdW1iZXJGb3JtYXQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxOdW1iZXJGb3JtYXQuY3BwCShyZXZp
c2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTnVtYmVy
Rm9ybWF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmln
aHQgKEMpIDIwMTUgQW5keSBWYW5XYWdvbmVyIChhbmR5QHZhbndhZ29uZXIuZmFtaWx5KQogICog
Q29weXJpZ2h0IChDKSAyMDE2IFN1a29sc2FrIFNha3NodXdvbmcgKHN1a29sc2FrQGdtYWlsLmNv
bSkKLSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAyMCBTb255IEludGVyYWN0aXZlIEVudGVydGFp
bm1lbnQgSW5jLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtNzMsNyArNzMsOCBAQCB2b2lkIEludGxO
dW1iZXJGb3JtYXQ6OmZpbmlzaENyZWF0aW9uKFZNCiAgICAgQVNTRVJUKGluaGVyaXRzKHZtLCBp
bmZvKCkpKTsKIH0KIAotdm9pZCBJbnRsTnVtYmVyRm9ybWF0Ojp2aXNpdENoaWxkcmVuKEpTQ2Vs
bCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
Pgordm9pZCBJbnRsTnVtYmVyRm9ybWF0Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGws
IFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSW50bE51bWJlckZvcm1hdCogdGhpc09iamVjdCA9
IGpzQ2FzdDxJbnRsTnVtYmVyRm9ybWF0Kj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9J
TkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtODMsNiArODQsOCBAQCB2b2lkIEludGxO
dW1iZXJGb3JtYXQ6OnZpc2l0Q2hpbGRyZW4oSlNDCiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09i
amVjdC0+bV9ib3VuZEZvcm1hdCk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihJbnRsTnVt
YmVyRm9ybWF0KTsKKwogVmVjdG9yPFN0cmluZz4gSW50bE51bWJlckZvcm1hdDo6bG9jYWxlRGF0
YShjb25zdCBTdHJpbmcmIGxvY2FsZSwgUmVsZXZhbnRFeHRlbnNpb25LZXkga2V5KQogewogICAg
IC8vIDkuMSBJbnRlcm5hbCBzbG90cyBvZiBTZXJ2aWNlIENvbnN0cnVjdG9ycyAmIDExLjIuMyBJ
bnRlcm5hbCBzbG90cyAoRUNNQS00MDIgMi4wKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSW50bE51bWJlckZvcm1hdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0ludGxOdW1iZXJGb3JtYXQuaAkocmV2aXNpb24gMjcyOTAyKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE51bWJlckZvcm1hdC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDYgKzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxNSBBbmR5IFZh
bldhZ29uZXIgKGFuZHlAdmFud2Fnb25lci5mYW1pbHkpCiAgKiBDb3B5cmlnaHQgKEMpIDIwMjAg
U29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTk2LDcgKzk3LDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBJbnRsTnVt
YmVyRm9ybWF0KFZNJiwgU3RydWN0dXJlKik7CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYp
OwotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsK
KyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgc3RhdGljIFZlY3RvcjxTdHJpbmc+
IGxvY2FsZURhdGEoY29uc3QgU3RyaW5nJiwgUmVsZXZhbnRFeHRlbnNpb25LZXkpOwogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsUGx1cmFsUnVsZXMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxQbHVyYWxSdWxlcy5j
cHAJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lu
dGxQbHVyYWxSdWxlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICog
Q29weXJpZ2h0IChDKSAyMDE4IEFuZHkgVmFuV2Fnb25lciAoYW5keUB2YW53YWdvbmVyLmZhbWls
eSkKLSAqIENvcHlyaWdodCAoQykgMjAxOS0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjEsNyArNjEsOCBA
QCB2b2lkIEludGxQbHVyYWxSdWxlczo6ZmluaXNoQ3JlYXRpb24oVk0mCiAgICAgQVNTRVJUKGlu
aGVyaXRzKHZtLCBpbmZvKCkpKTsKIH0KIAotdm9pZCBJbnRsUGx1cmFsUnVsZXM6OnZpc2l0Q2hp
bGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVu
YW1lIFZpc2l0b3I+Cit2b2lkIEludGxQbHVyYWxSdWxlczo6dmlzaXRDaGlsZHJlbkltcGwoSlND
ZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEludGxQbHVyYWxSdWxlcyogdGhp
c09iamVjdCA9IGpzQ2FzdDxJbnRsUGx1cmFsUnVsZXMqPihjZWxsKTsKICAgICBBU1NFUlRfR0Nf
T0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC02OSw2ICs3MCw4IEBAIHZv
aWQgSW50bFBsdXJhbFJ1bGVzOjp2aXNpdENoaWxkcmVuKEpTQ2UKICAgICBCYXNlOjp2aXNpdENo
aWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4o
SW50bFBsdXJhbFJ1bGVzKTsKKwogVmVjdG9yPFN0cmluZz4gSW50bFBsdXJhbFJ1bGVzOjpsb2Nh
bGVEYXRhKGNvbnN0IFN0cmluZyYsIFJlbGV2YW50RXh0ZW5zaW9uS2V5KQogewogICAgIHJldHVy
biB7IH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsUGx1cmFsUnVs
ZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsUGx1
cmFsUnVsZXMuaAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSW50bFBsdXJhbFJ1bGVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAv
KgogICogQ29weXJpZ2h0IChDKSAyMDE4IEFuZHkgVmFuV2Fnb25lciAoYW5keUB2YW53YWdvbmVy
LmZhbWlseSkKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY2LDcgKzY3LDcgQEAg
cHVibGljOgogcHJpdmF0ZToKICAgICBJbnRsUGx1cmFsUnVsZXMoVk0mLCBTdHJ1Y3R1cmUqKTsK
ICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGls
ZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47
CiAKICAgICBzdGF0aWMgVmVjdG9yPFN0cmluZz4gbG9jYWxlRGF0YShjb25zdCBTdHJpbmcmLCBS
ZWxldmFudEV4dGVuc2lvbktleSk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0ludGxSZWxhdGl2ZVRpbWVGb3JtYXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0ludGxSZWxhdGl2ZVRpbWVGb3JtYXQuY3BwCShyZXZpc2lvbiAy
NzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsUmVsYXRpdmVUaW1l
Rm9ybWF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmln
aHQgKEMpIDIwMjAgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAqIENvcHly
aWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTYyLDcgKzYzLDggQEAgdm9pZCBJbnRsUmVsYXRpdmVU
aW1lRm9ybWF0OjpmaW5pc2hDcmVhdAogICAgIEFTU0VSVChpbmhlcml0cyh2bSwgaW5mbygpKSk7
CiB9CiAKLXZvaWQgSW50bFJlbGF0aXZlVGltZUZvcm1hdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwq
IGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4K
K3ZvaWQgSW50bFJlbGF0aXZlVGltZUZvcm1hdDo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBj
ZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8
SW50bFJlbGF0aXZlVGltZUZvcm1hdCo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5I
RVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTcwLDYgKzcyLDggQEAgdm9pZCBJbnRsUmVs
YXRpdmVUaW1lRm9ybWF0Ojp2aXNpdENoaWxkcgogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhp
c09iamVjdCwgdmlzaXRvcik7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihJbnRsUmVsYXRp
dmVUaW1lRm9ybWF0KTsKKwogVmVjdG9yPFN0cmluZz4gSW50bFJlbGF0aXZlVGltZUZvcm1hdDo6
bG9jYWxlRGF0YShjb25zdCBTdHJpbmcmIGxvY2FsZSwgUmVsZXZhbnRFeHRlbnNpb25LZXkga2V5
KQogewogICAgIEFTU0VSVF9VTlVTRUQoa2V5LCBrZXkgPT0gUmVsZXZhbnRFeHRlbnNpb25LZXk6
Ok51KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxSZWxhdGl2ZVRp
bWVGb3JtYXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9J
bnRsUmVsYXRpdmVUaW1lRm9ybWF0LmgJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0ludGxSZWxhdGl2ZVRpbWVGb3JtYXQuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMjAgU29ueSBJbnRlcmFj
dGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KLSAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAtMjAyMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTY0LDcgKzY0LDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBJbnRsUmVsYXRpdmVUaW1l
Rm9ybWF0KFZNJiwgU3RydWN0dXJlKik7CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOwot
ICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAg
ICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgc3RhdGljIFZlY3RvcjxTdHJpbmc+IGxv
Y2FsZURhdGEoY29uc3QgU3RyaW5nJiwgUmVsZXZhbnRFeHRlbnNpb25LZXkpOwogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsU2VnbWVudEl0ZXJhdG9yLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsU2VnbWVudEl0ZXJh
dG9yLmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSW50bFNlZ21lbnRJdGVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBA
CiAvKgogICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY0LDEzICs2NSwxNiBAQCB2b2lk
IEludGxTZWdtZW50SXRlcmF0b3I6OmZpbmlzaENyZWF0aW9uCiAgICAgbV9zdHJpbmcuc2V0KHZt
LCB0aGlzLCBzdHJpbmcpOwogfQogCi12b2lkIEludGxTZWdtZW50SXRlcmF0b3I6OnZpc2l0Q2hp
bGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVu
YW1lIFZpc2l0b3I+Cit2b2lkIEludGxTZWdtZW50SXRlcmF0b3I6OnZpc2l0Q2hpbGRyZW5JbXBs
KEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBhdXRvKiB0aGlzT2JqZWN0
ID0ganNDYXN0PEludGxTZWdtZW50SXRlcmF0b3IqPihjZWxsKTsKICAgICBCYXNlOjp2aXNpdENo
aWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmpl
Y3QtPm1fc3RyaW5nKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEludGxTZWdtZW50SXRl
cmF0b3IpOworCiBKU09iamVjdCogSW50bFNlZ21lbnRJdGVyYXRvcjo6bmV4dChKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0KQogewogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxTZWdtZW50SXRlcmF0b3Iu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsU2VnbWVu
dEl0ZXJhdG9yLmgJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0ludGxTZWdtZW50SXRlcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYg
QEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTMsNyArNTQsNyBAQCBwdWJs
aWM6CiAKICAgICBKU09iamVjdCogbmV4dChKU0dsb2JhbE9iamVjdCopOwogCi0gICAgc3RhdGlj
IHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVf
VklTSVRfQ0hJTERSRU47CiAKIHByaXZhdGU6CiAgICAgSW50bFNlZ21lbnRJdGVyYXRvcihWTSYs
IFN0cnVjdHVyZSosIHN0ZDo6dW5pcXVlX3B0cjxVQnJlYWtJdGVyYXRvciwgVUJyZWFrSXRlcmF0
b3JEZWxldGVyPiYmLCBCb3g8VmVjdG9yPFVDaGFyPj4mJiwgSW50bFNlZ21lbnRlcjo6R3JhbnVs
YXJpdHkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFNlZ21lbnRz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsU2Vn
bWVudHMuY3BwCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9JbnRsU2VnbWVudHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoK
ICAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMDksMTEgKzExMCwxNCBAQCBKU09iamVj
dCogSW50bFNlZ21lbnRzOjpjcmVhdGVTZWdtZW50SXRlCiAgICAgcmV0dXJuIEludGxTZWdtZW50
SXRlcmF0b3I6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LT5zZWdtZW50SXRlcmF0b3JTdHJ1Y3R1
cmUoKSwgV1RGTW92ZShzZWdtZW50ZXIpLCBtX2J1ZmZlciwgbV9zdHJpbmcuZ2V0KCksIG1fZ3Jh
bnVsYXJpdHkpOwogfQogCi12b2lkIEludGxTZWdtZW50czo6dmlzaXRDaGlsZHJlbihKU0NlbGwq
IGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4K
K3ZvaWQgSW50bFNlZ21lbnRzOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0
b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxJbnRsU2VnbWVu
dHMqPihjZWxsKTsKICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3Ip
OwogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fc3RyaW5nKTsKIH0KIAorREVGSU5F
X1ZJU0lUX0NISUxEUkVOKEludGxTZWdtZW50cyk7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFNlZ21lbnRzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFNlZ21lbnRzLmgJKHJldmlz
aW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxTZWdtZW50
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykg
MjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC01NCw3ICs1NSw3IEBAIHB1YmxpYzoKICAgICBKU1ZhbHVlIGNvbnRhaW5p
bmcoSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlIGluZGV4VmFsdWUpOwogICAgIEpTT2JqZWN0KiBj
cmVhdGVTZWdtZW50SXRlcmF0b3IoSlNHbG9iYWxPYmplY3QqKTsKIAotICAgIHN0YXRpYyB2b2lk
IHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lU
X0NISUxEUkVOOwogCiBwcml2YXRlOgogICAgIEludGxTZWdtZW50cyhWTSYsIFN0cnVjdHVyZSos
IHN0ZDo6dW5pcXVlX3B0cjxVQnJlYWtJdGVyYXRvciwgVUJyZWFrSXRlcmF0b3JEZWxldGVyPiYm
LCBCb3g8VmVjdG9yPFVDaGFyPj4mJiwgSW50bFNlZ21lbnRlcjo6R3JhbnVsYXJpdHkpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJW
aWV3LmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNBcnJheUJ1ZmZlclZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTU1LDcgKzE1NSw4
IEBAIHZvaWQgSlNBcnJheUJ1ZmZlclZpZXc6OmZpbmlzaENyZWF0aW9uKFYKICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCi12b2lkIEpTQXJyYXlCdWZmZXJWaWV3Ojp2aXNp
dENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0
eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0FycmF5QnVmZmVyVmlldzo6dmlzaXRDaGlsZHJlbklt
cGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTQXJyYXlCdWZmZXJW
aWV3KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQXJyYXlCdWZmZXJWaWV3Kj4oY2VsbCk7CiAgICAg
QVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtMTY5LDYg
KzE3MCw4IEBAIHZvaWQgSlNBcnJheUJ1ZmZlclZpZXc6OnZpc2l0Q2hpbGRyZW4oSlMKICAgICB9
CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU0FycmF5QnVmZmVyVmlldyk7CisKIGJvb2wg
SlNBcnJheUJ1ZmZlclZpZXc6OnB1dCgKICAgICBKU0NlbGwqIGNlbGwsIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUs
CiAgICAgUHV0UHJvcGVydHlTbG90JiBzbG90KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5oCShyZXZpc2lvbiAyNzI5MDIpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIw
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMTcyLDcgKzE3Miw3IEBAIHByb3RlY3RlZDoKICAgICAKICAgICBzdGF0
aWMgYm9vbCBwdXQoSlNDZWxsKiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIEpTVmFs
dWUsIFB1dFByb3BlcnR5U2xvdCYpOwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihK
U0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAgICAg
CiBwdWJsaWM6CiAgICAgVHlwZWRBcnJheU1vZGUgbW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fbW9k
ZTsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUl0ZXJhdG9y
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5
SXRlcmF0b3IuY3BwCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0FycmF5SXRlcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY4LDExICs2OCwxNCBA
QCB2b2lkIEpTQXJyYXlJdGVyYXRvcjo6ZmluaXNoQ3JlYXRpb24oVk0mCiAgICAgICAgIEJhc2U6
OmludGVybmFsRmllbGQoaW5kZXgpLnNldCh2bSwgdGhpcywgdmFsdWVzW2luZGV4XSk7CiB9CiAK
LXZvaWQgSlNBcnJheUl0ZXJhdG9yOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZp
c2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0FycmF5
SXRlcmF0b3I6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRv
cikKIHsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQXJyYXlJdGVyYXRvcio+KGNl
bGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsK
ICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwogfQogCitERUZJ
TkVfVklTSVRfQ0hJTERSRU4oSlNBcnJheUl0ZXJhdG9yKTsKKwogfSAvLyBuYW1lc3BhY2UgSlND
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5SXRlcmF0b3IuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5SXRlcmF0
b3IuaAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNBcnJheUl0ZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAyMC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNzgsNyArNzgsNyBAQCBwdWJsaWM6CiAK
ICAgICBERUNMQVJFX0lORk87CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2Vs
bCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogcHJpdmF0
ZToKICAgICBKU0FycmF5SXRlcmF0b3IoVk0mLCBTdHJ1Y3R1cmUqKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXN5bmNHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXN5bmNHZW5lcmF0b3IuY3BwCShyZXZp
c2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FzeW5jR2Vu
ZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE5LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01OSwxMSArNTksMTQgQEAgdm9pZCBKU0FzeW5jR2Vu
ZXJhdG9yOjpmaW5pc2hDcmVhdGlvbihWTQogICAgICAgICBpbnRlcm5hbEZpZWxkKGluZGV4KS5z
ZXQodm0sIHRoaXMsIHZhbHVlc1tpbmRleF0pOwogfQogCi12b2lkIEpTQXN5bmNHZW5lcmF0b3I6
OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBs
YXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTQXN5bmNHZW5lcmF0b3I6OnZpc2l0Q2hpbGRy
ZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBhdXRvKiB0aGlz
T2JqZWN0ID0ganNDYXN0PEpTQXN5bmNHZW5lcmF0b3IqPihjZWxsKTsKICAgICBBU1NFUlRfR0Nf
T0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAgICAgQmFzZTo6dmlzaXRDaGls
ZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpT
QXN5bmNHZW5lcmF0b3IpOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTQXN5bmNHZW5lcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FzeW5jR2VuZXJhdG9yLmgJKHJldmlzaW9uIDI3
MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXN5bmNHZW5lcmF0b3Iu
aAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE5
LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC05NSw3ICs5NSw3IEBAIHB1YmxpYzoKIAogICAgIERFQ0xBUkVfRVhQ
T1JUX0lORk87CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RW
aXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogcHJpdmF0ZToKICAgICBK
U0FzeW5jR2VuZXJhdG9yKFZNJiwgU3RydWN0dXJlKik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0JpZ0ludC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNCaWdJbnQuY3BwCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JpZ0ludC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
NiArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDE3IENhaW8gTGltYSA8dGljYWlvbGlt
YUBnbWFpbC5jb20+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY3
LDcgKzY3LDggQEAgSlNCaWdJbnQ6OkpTQmlnSW50KFZNJiB2bSwgU3RydWN0dXJlKiBzdAogICAg
ICwgbV9kYXRhKHZtLCB0aGlzLCBkYXRhLCBsZW5ndGgpCiB7IH0KIAotdm9pZCBKU0JpZ0ludDo6
dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxh
dGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNCaWdJbnQ6OnZpc2l0Q2hpbGRyZW5JbXBsKEpT
Q2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0g
anNDYXN0PEpTQmlnSW50Kj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0
aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNzYsNiArNzcsOCBAQCB2b2lkIEpTQmlnSW50Ojp2aXNp
dENoaWxkcmVuKEpTQ2VsbCogY2VsCiAgICAgICAgIHZpc2l0b3IubWFya0F1eGlsaWFyeShkYXRh
KTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTQmlnSW50KTsKKwogdm9pZCBKU0JpZ0lu
dDo6aW5pdGlhbGl6ZShJbml0aWFsaXphdGlvblR5cGUgaW5pdFR5cGUpCiB7CiAgICAgaWYgKGlu
aXRUeXBlID09IEluaXRpYWxpemF0aW9uVHlwZTo6V2l0aFplcm8pCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0JpZ0ludC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTQmlnSW50LmgJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQmlnSW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NiArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDE3IENhaW8gTGltYSA8dGljYWlvbGlt
YUBnbWFpbC5jb20+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTUw
LDcgKzUwLDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0
dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IFN0cnVjdHVyZUlzSW1tb3J0YWwgfCBP
dmVycmlkZXNUb1RoaXM7CiAgICAgZnJpZW5kIGNsYXNzIENhY2hlZEJpZ0ludDsKIAotICAgIHN0
YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNM
QVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1
YnNwYWNlQWNjZXNzPgogICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZt
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCb3VuZEZ1bmN0aW9uLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JvdW5kRnVu
Y3Rpb24uY3BwCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0JvdW5kRnVuY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjQ5LDcg
KzI0OSw4IEBAIHZvaWQgSlNCb3VuZEZ1bmN0aW9uOjpmaW5pc2hDcmVhdGlvbihWTSYKICAgICBB
U1NFUlQoaW5oZXJpdHModm0sIGluZm8oKSkpOwogfQogCi12b2lkIEpTQm91bmRGdW5jdGlvbjo6
dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxh
dGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNCb3VuZEZ1bmN0aW9uOjp2aXNpdENoaWxkcmVu
SW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNCb3VuZEZ1bmN0
aW9uKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQm91bmRGdW5jdGlvbio+KGNlbGwpOwogICAgIEFT
U0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTI2MSw0ICsy
NjIsNiBAQCB2b2lkIEpTQm91bmRGdW5jdGlvbjo6dmlzaXRDaGlsZHJlbihKU0NlCiAgICAgdmlz
aXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9uYW1lTWF5QmVOdWxsKTsKIH0KIAorREVGSU5FX1ZJ
U0lUX0NISUxEUkVOKEpTQm91bmRGdW5jdGlvbik7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCb3VuZEZ1bmN0aW9uLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCb3VuZEZ1bmN0aW9uLmgJ
KHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQm91
bmRGdW5jdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMS0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODQsNyArODQsNyBAQCBwcml2YXRlOgog
ICAgIEpTQm91bmRGdW5jdGlvbihWTSYsIE5hdGl2ZUV4ZWN1dGFibGUqLCBKU0dsb2JhbE9iamVj
dCosIFN0cnVjdHVyZSosIEpTT2JqZWN0KiB0YXJnZXRGdW5jdGlvbiwgSlNWYWx1ZSBib3VuZFRo
aXMsIEpTSW1tdXRhYmxlQnV0dGVyZmx5KiBib3VuZEFyZ3MsIEpTU3RyaW5nKiBuYW1lTWF5QmVO
dWxsLCBkb3VibGUgbGVuZ3RoKTsKIAogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKLSAg
ICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAg
REVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIFdyaXRlQmFycmllcjxKU09iamVjdD4gbV90
YXJnZXRGdW5jdGlvbjsKICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4gbV9ib3VuZFRoaXM7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NhbGxlZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDYWxsZWUuY3BwCShyZXZpc2lv
biAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NhbGxlZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0
LCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtNTAsNyArNTAsOCBAQCB2b2lkIEpTQ2FsbGVlOjpmaW5pc2hD
cmVhdGlvbihWTSYgdm0pCiAgICAgQVNTRVJUKGluaGVyaXRzKHZtLCBpbmZvKCkpKTsKIH0KIAot
dm9pZCBKU0NhbGxlZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNDYWxsZWU6OnZpc2l0
Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU0Nh
bGxlZSogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0NhbGxlZSo+KGNlbGwpOwogICAgIEFTU0VSVF9H
Q19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTU5LDQgKzYwLDYgQEAg
dm9pZCBKU0NhbGxlZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbAogICAgIHZpc2l0b3IuYXBw
ZW5kKHRoaXNPYmplY3QtPm1fc2NvcGUpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlND
YWxsZWUpOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQ2FsbGVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNDYWxsZWUuaAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNDYWxsZWUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMDAsNyArMTAwLDcgQEAg
cHJvdGVjdGVkOgogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKICAgICB1c2luZyBCYXNl
OjpmaW5pc2hDcmVhdGlvbjsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiBwcml2YXRl
OgogICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNyAr
MSw3IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAxIEhhcnJpIFBvcnRlbiAocG9y
dGVuQGtkZS5vcmcpCiAgKiAgQ29weXJpZ2h0IChDKSAyMDAxIFBldGVyIEtlbGx5IChwbWtAcG9z
dC5jb20pCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0zMiw2ICszMiw3IEBACiAj
aW5jbHVkZSAiSlNMb2NrLmgiCiAjaW5jbHVkZSAiSlNUeXBlSW5mby5oIgogI2luY2x1ZGUgIlNs
b3RWaXNpdG9yLmgiCisjaW5jbHVkZSAiU2xvdFZpc2l0b3JNYWNyb3MuaCIKICNpbmNsdWRlICJT
dWJzcGFjZUFjY2Vzcy5oIgogI2luY2x1ZGUgIlR5cGVkQXJyYXlUeXBlLmgiCiAjaW5jbHVkZSAi
V3JpdGVCYXJyaWVyLmgiCkBAIC0xNjcsOCArMTY4LDggQEAgcHVibGljOgogICAgIHNpemVfdCBl
c3RpbWF0ZWRTaXplSW5CeXRlcyhWTSYpIGNvbnN0OwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0
YXRpYyBzaXplX3QgZXN0aW1hdGVkU2l6ZShKU0NlbGwqLCBWTSYpOwogCi0gICAgc3RhdGljIHZv
aWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwotICAgIHN0YXRpYyB2b2lk
IHZpc2l0T3V0cHV0Q29uc3RyYWludHMoSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNM
QVJFX1ZJU0lUX0NISUxEUkVOX1dJVEhfTU9ESUZJRVIoaW5saW5lKTsKKyAgICBERUNMQVJFX1ZJ
U0lUX09VVFBVVF9DT05TVFJBSU5UU19XSVRIX01PRElGSUVSKGlubGluZSk7CiAKICAgICBKU19F
WFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBhbmFseXplSGVhcChKU0NlbGwqLCBIZWFwQW5hbHl6
ZXImKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsSW5saW5l
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbElu
bGluZXMuaAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNDZWxsSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMi0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjUsNiArMjUsNyBAQAogCiAj
cHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgIkFic3RyYWN0U2xvdFZpc2l0b3JJbmxpbmVzLmgiCiAj
aW5jbHVkZSAiQWxsb2NhdG9yRm9yTW9kZS5oIgogI2luY2x1ZGUgIkFsbG9jYXRvcklubGluZXMu
aCIKICNpbmNsdWRlICJDb21wbGV0ZVN1YnNwYWNlSW5saW5lcy5oIgpAQCAtMTQxLDE1ICsxNDIs
MjEgQEAgQUxXQVlTX0lOTElORSBTdHJ1Y3R1cmUqIEpTQ2VsbDo6c3RydWN0dQogICAgIHJldHVy
biB2bS5nZXRTdHJ1Y3R1cmUobV9zdHJ1Y3R1cmVJRCk7CiB9CiAKLWlubGluZSB2b2lkIEpTQ2Vs
bDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVt
cGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNDZWxsOjp2aXNpdENoaWxkcmVuSW1wbChK
U0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgdmlzaXRvci5hcHBlbmRVbmJh
cnJpZXJlZChjZWxsLT5zdHJ1Y3R1cmUodmlzaXRvci52bSgpKSk7CiB9CiAKLWlubGluZSB2b2lk
IEpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50cyhKU0NlbGwqLCBTbG90VmlzaXRvciYpCitE
RUZJTkVfVklTSVRfQ0hJTERSRU5fV0lUSF9NT0RJRklFUihpbmxpbmUsIEpTQ2VsbCk7CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+CitBTFdBWVNfSU5MSU5FIHZvaWQgSlNDZWxsOjp2aXNp
dE91dHB1dENvbnN0cmFpbnRzSW1wbChKU0NlbGwqLCBWaXNpdG9yJikKIHsKIH0KIAorREVGSU5F
X1ZJU0lUX09VVFBVVF9DT05TVFJBSU5UU19XSVRIX01PRElGSUVSKGlubGluZSwgSlNDZWxsKTsK
KwogQUxXQVlTX0lOTElORSBWTSYgQ2FsbEZyYW1lOjpkZXByZWNhdGVkVk0oKSBjb25zdAogewog
ICAgIEpTQ2VsbCogY2FsbGVlID0gdGhpcy0+Y2FsbGVlKCkuYXNDZWxsKCk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ZpbmFsaXphdGlvblJlZ2lzdHJ5LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ZpbmFsaXphdGlvblJl
Z2lzdHJ5LmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNGaW5hbGl6YXRpb25SZWdpc3RyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlLCBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAtMjAyMSBBcHBsZSwgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNiw2ICsy
Niw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSlNGaW5hbGl6YXRpb25SZWdp
c3RyeS5oIgogCisjaW5jbHVkZSAiQWJzdHJhY3RTbG90VmlzaXRvci5oIgogI2luY2x1ZGUgIkRl
ZmVycmVkV29ya1RpbWVyLmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIkpT
SW50ZXJuYWxGaWVsZE9iamVjdEltcGxJbmxpbmVzLmgiCkBAIC02MCw3ICs2MSw4IEBAIHZvaWQg
SlNGaW5hbGl6YXRpb25SZWdpc3RyeTo6ZmluaXNoQ3JlYXQKICAgICBnbG9iYWxPYmplY3QtPmds
b2JhbE9iamVjdE1ldGhvZFRhYmxlKCktPmN1cnJlbnRTY3JpcHRFeGVjdXRpb25Pd25lcihnbG9i
YWxPYmplY3QpOwogfQogCi12b2lkIEpTRmluYWxpemF0aW9uUmVnaXN0cnk6OnZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1l
IFZpc2l0b3I+Cit2b2lkIEpTRmluYWxpemF0aW9uUmVnaXN0cnk6OnZpc2l0Q2hpbGRyZW5JbXBs
KEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBCYXNlOjp2aXNpdENoaWxk
cmVuKGNlbGwsIHZpc2l0b3IpOwogCkBAIC04MCwxMyArODIsMTUgQEAgdm9pZCBKU0ZpbmFsaXph
dGlvblJlZ2lzdHJ5Ojp2aXNpdENoaWxkcgogICAgIGZvciAoYXV0byYgaG9sZGluZ3MgOiB0aGlz
T2JqZWN0LT5tX25vVW5yZWdpc3RyYXRpb25EZWFkKQogICAgICAgICB2aXNpdG9yLmFwcGVuZCho
b2xkaW5ncyk7CiAKLSAgICBzaXplX3QgdG90YWxCdWZmZXJTaXplc0luQnl0ZXMgPSB0aGlzT2Jq
ZWN0LT5tX2RlYWRSZWdpc3RyYXRpb25zLmNhcGFjaXR5KCkgKiBzaXplb2YoZGVjbHR5cGUodGhp
c09iamVjdC0+bV9kZWFkUmVnaXN0cmF0aW9ucyk6OktleVZhbHVlUGFpclR5cGUpOwotICAgIHRv
dGFsQnVmZmVyU2l6ZXNJbkJ5dGVzICs9IHRoaXNPYmplY3QtPm1fbGl2ZVJlZ2lzdHJhdGlvbnMu
Y2FwYWNpdHkoKSAqIHNpemVvZihkZWNsdHlwZSh0aGlzT2JqZWN0LT5tX2RlYWRSZWdpc3RyYXRp
b25zKTo6S2V5VmFsdWVQYWlyVHlwZSk7CisgICAgc2l6ZV90IHRvdGFsQnVmZmVyU2l6ZXNJbkJ5
dGVzID0gdGhpc09iamVjdC0+bV9kZWFkUmVnaXN0cmF0aW9ucy5jYXBhY2l0eSgpICogc2l6ZW9m
KHR5cGVuYW1lIGRlY2x0eXBlKHRoaXNPYmplY3QtPm1fZGVhZFJlZ2lzdHJhdGlvbnMpOjpLZXlW
YWx1ZVBhaXJUeXBlKTsKKyAgICB0b3RhbEJ1ZmZlclNpemVzSW5CeXRlcyArPSB0aGlzT2JqZWN0
LT5tX2xpdmVSZWdpc3RyYXRpb25zLmNhcGFjaXR5KCkgKiBzaXplb2YodHlwZW5hbWUgZGVjbHR5
cGUodGhpc09iamVjdC0+bV9kZWFkUmVnaXN0cmF0aW9ucyk6OktleVZhbHVlUGFpclR5cGUpOwog
ICAgIHRvdGFsQnVmZmVyU2l6ZXNJbkJ5dGVzICs9IHRoaXNPYmplY3QtPm1fbm9VbnJlZ2lzdHJh
dGlvbkxpdmUuY2FwYWNpdHkoKSAqIHNpemVvZihkZWNsdHlwZSh0aGlzT2JqZWN0LT5tX25vVW5y
ZWdpc3RyYXRpb25MaXZlLnRha2VMYXN0KCkpKTsKICAgICB0b3RhbEJ1ZmZlclNpemVzSW5CeXRl
cyArPSB0aGlzT2JqZWN0LT5tX25vVW5yZWdpc3RyYXRpb25EZWFkLmNhcGFjaXR5KCkgKiBzaXpl
b2YoZGVjbHR5cGUodGhpc09iamVjdC0+bV9ub1VucmVnaXN0cmF0aW9uTGl2ZS50YWtlTGFzdCgp
KSk7CiAgICAgdmlzaXRvci52bSgpLmhlYXAucmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKHRvdGFs
QnVmZmVyU2l6ZXNJbkJ5dGVzKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTRmluYWxp
emF0aW9uUmVnaXN0cnkpOworCiB2b2lkIEpTRmluYWxpemF0aW9uUmVnaXN0cnk6OmRlc3Ryb3ko
SlNDZWxsKiB0YWJsZSkKIHsKICAgICBzdGF0aWNfY2FzdDxKU0ZpbmFsaXphdGlvblJlZ2lzdHJ5
Kj4odGFibGUpLT5+SlNGaW5hbGl6YXRpb25SZWdpc3RyeSgpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNGaW5hbGl6YXRpb25SZWdpc3RyeS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRmluYWxpemF0aW9uUmVnaXN0cnkuaAko
cmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGaW5h
bGl6YXRpb25SZWdpc3RyeS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDIwLTIwMjEgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNzAsNyArNzAsNyBAQCBwdWJsaWM6
CiAgICAgREVDTEFSRV9FWFBPUlRfSU5GTzsKIAogICAgIHZvaWQgZmluYWxpemVVbmNvbmRpdGlv
bmFsbHkoVk0mKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RW
aXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKICAgICBzdGF0aWMgdm9pZCBk
ZXN0cm95KEpTQ2VsbCopOwogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0Rlc3RydWN0
aW9uID0gdHJ1ZTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5j
dGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNG
dW5jdGlvbi5jcHAJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTRnVuY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBAQAogLyoK
ICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMiBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3Jn
KQogICogIENvcHlyaWdodCAoQykgMjAwMSBQZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQotICog
IENvcHlyaWdodCAoQykgMjAwMy0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA3IENhbWVyb24gWndhcmljaCAoY3d6d2FyaWNoQHV3
YXRlcmxvby5jYSkKICAqICBDb3B5cmlnaHQgKEMpIDIwMDcgTWFrcyBPcmxvdmljaAogICogIENv
cHlyaWdodCAoQykgMjAxNSBDYW5vbiBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCkBAIC0yNTIs
NyArMjUyLDggQEAgY29uc3QgU291cmNlQ29kZSogSlNGdW5jdGlvbjo6c291cmNlQ29kZQogICAg
IHJldHVybiAmanNFeGVjdXRhYmxlKCktPnNvdXJjZSgpOwogfQogICAgIAotdm9pZCBKU0Z1bmN0
aW9uOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0
ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0Z1bmN0aW9uOjp2aXNpdENoaWxkcmVu
SW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNGdW5jdGlvbiog
dGhpc09iamVjdCA9IGpzQ2FzdDxKU0Z1bmN0aW9uKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09C
SkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtMjYxLDYgKzI2Miw4IEBAIHZv
aWQgSlNGdW5jdGlvbjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGMKICAgICB2aXNpdG9yLmFwcGVu
ZFVuYmFycmllcmVkKGJpdHdpc2VfY2FzdDxKU0NlbGwqPihiaXR3aXNlX2Nhc3Q8dWludHB0cl90
Pih0aGlzT2JqZWN0LT5tX2V4ZWN1dGFibGVPclJhcmVEYXRhKSAmIH5yYXJlRGF0YVRhZykpOwog
fQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNGdW5jdGlvbik7CisKIENhbGxEYXRhIEpTRnVu
Y3Rpb246OmdldENhbGxEYXRhKEpTQ2VsbCogY2VsbCkKIHsKICAgICAvLyBLZWVwIHRoaXMgZnVu
Y3Rpb24gT0sgZm9yIGludm9jYXRpb24gZnJvbSBjb25jdXJyZW50IGNvbXBpbGVycy4KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmgJKHJldmlzaW9uIDI3
MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uaAkod29y
a2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIw
MDAgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDMt
MjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAy
MDAzLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogIENvcHlyaWdodCAo
QykgMjAwNyBDYW1lcm9uIFp3YXJpY2ggKGN3endhcmljaEB1d2F0ZXJsb28uY2EpCiAgKiAgQ29w
eXJpZ2h0IChDKSAyMDA3IE1ha3MgT3Jsb3ZpY2gKICAqCkBAIC0xODAsNyArMTgwLDcgQEAgcHJv
dGVjdGVkOgogCiAgICAgc3RhdGljIGJvb2wgZGVsZXRlUHJvcGVydHkoSlNDZWxsKiwgSlNHbG9i
YWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIERlbGV0ZVByb3BlcnR5U2xvdCYpOwogCi0gICAgc3Rh
dGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xB
UkVfVklTSVRfQ0hJTERSRU47CiAKIHByaXZhdGU6CiAgICAgc3RhdGljIEpTRnVuY3Rpb24qIGNy
ZWF0ZUltcGwoVk0mIHZtLCBGdW5jdGlvbkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUsIEpTU2NvcGUq
IHNjb3BlLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTR2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0dlbmVyYXRvci5jcHAJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE5LTIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01
OSwxMSArNTksMTQgQEAgdm9pZCBKU0dlbmVyYXRvcjo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQog
ICAgICAgICBpbnRlcm5hbEZpZWxkKGluZGV4KS5zZXQodm0sIHRoaXMsIHZhbHVlc1tpbmRleF0p
OwogfQogCi12b2lkIEpTR2VuZXJhdG9yOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xv
dFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0dl
bmVyYXRvcjo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9y
KQogewogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNHZW5lcmF0b3IqPihjZWxsKTsK
ICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAgICAg
QmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKIH0KIAorREVGSU5FX1ZJ
U0lUX0NISUxEUkVOKEpTR2VuZXJhdG9yKTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyYXRvci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJhdG9yLmgJKHJldmlzaW9uIDI3
MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJhdG9yLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE5IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOS0yMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtOTQsNyArOTQsNyBAQCBwdWJsaWM6CiAKICAgICBERUNMQVJFX0VYUE9SVF9J
TkZPOwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRv
ciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKIHByaXZhdGU6CiAgICAgSlNHZW5l
cmF0b3IoVk0mLCBTdHJ1Y3R1cmUqKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXcuaAkocmV2aXNpb24gMjcy
OTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJh
eVZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMxMyw3ICszMTMsNyBAQCBwcml2YXRlOgogICAg
IHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVj
dCosIFByb3BlcnR5TmFtZUFycmF5JiwgRG9udEVudW1Qcm9wZXJ0aWVzTW9kZSk7CiAKICAgICBz
dGF0aWMgc2l6ZV90IGVzdGltYXRlZFNpemUoSlNDZWxsKiwgVk0mKTsKLSAgICBzdGF0aWMgdm9p
ZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJ
VF9DSElMRFJFTjsKIAogICAgIC8vIFJldHVybnMgdHJ1ZSBpZiBzdWNjZXNzZnVsLCBhbmQgZmFs
c2Ugb24gZXJyb3I7IGl0IHdpbGwgdGhyb3cgb24gZXJyb3IuCiAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgT3RoZXJBZGFwdG9yPgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNH
ZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmgJKHJldmlz
aW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5
cGVkQXJyYXlWaWV3SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTE3LDcgKzUxNyw4IEBA
IHNpemVfdCBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjoKIH0KIAogdGVtcGxhdGU8
dHlwZW5hbWUgQWRhcHRvcj4KLXZvaWQgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46
OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBs
YXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0
b3I+Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7
CiAgICAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNHZW5l
cmljVHlwZWRBcnJheVZpZXcqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRT
KHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC01NTUsNCArNTU2LDYgQEAgdm9pZCBKU0dlbmVyaWNU
eXBlZEFycmF5VmlldzxBZGFwdG9yPjo6dgogICAgIH0KIH0KIAorREVGSU5FX1ZJU0lUX0NISUxE
UkVOX1dJVEhfTU9ESUZJRVIodGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4sIEpTR2VuZXJpY1R5
cGVkQXJyYXlWaWV3PEFkYXB0b3I+KTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCShyZXZp
c2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9i
amVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDA3LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDA3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29w
eXJpZ2h0IChDKSAyMDA4IENhbWVyb24gWndhcmljaCAoY3d6d2FyaWNoQHV3YXRlcmxvby5jYSkK
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKQEAgLTE4OTksNyArMTg5OSw4IEBAIHZvaWQgSlNHbG9iYWxPYmpl
Y3Q6OnJlc2V0UHJvdG90eXBlKFZNJiAKICAgICBzZXRHbG9iYWxUaGlzKHZtLCBKU1Byb3h5Ojpj
cmVhdGUodm0sIEpTUHJveHk6OmNyZWF0ZVN0cnVjdHVyZSh2bSwgdGhpcywgcHJvdG90eXBlLCBQ
dXJlRm9yd2FyZGluZ1Byb3h5VHlwZSksIHRoaXMpKTsKIH0KIAotdm9pZCBKU0dsb2JhbE9iamVj
dDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVt
cGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNHbG9iYWxPYmplY3Q6OnZpc2l0Q2hpbGRy
ZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsgCiAgICAgSlNHbG9iYWxP
YmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNHbG9iYWxPYmplY3QqPihjZWxsKTsKICAgICBB
U1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC0yMDY4LDYg
KzIwNjksOCBAQCB2b2lkIEpTR2xvYmFsT2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsCiAgICAg
dGhpc09iamVjdC0+bV9yZWdFeHBHbG9iYWxEYXRhLnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOwog
fQogCitERUZJTkVfVklTSVRfQ0hJTERSRU5fV0lUSF9NT0RJRklFUihKU19FWFBPUlRfUFJJVkFU
RSwgSlNHbG9iYWxPYmplY3QpOworCiBDYWxsRnJhbWUqIEpTR2xvYmFsT2JqZWN0OjpkZXByZWNh
dGVkQ2FsbEZyYW1lRm9yRGVidWdnZXIoKQogewogICAgIHJldHVybiBDYWxsRnJhbWU6OmNyZWF0
ZShtX2RlcHJlY2F0ZWRDYWxsRnJhbWVGb3JEZWJ1Z2dlcik7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgJKHJldmlzaW9uIDI3MjkwMikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMjAwNyBFcmlj
IFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgotICogIENvcHlyaWdodCAoQykgMjAwNy0yMDIwIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDctMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpA
QCAtNjE3LDcgKzYxNyw3IEBAIHB1YmxpYzoKICAgICBKU19FWFBPUlRfUFJJVkFURSB+SlNHbG9i
YWxPYmplY3QoKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBkZXN0cm95KEpT
Q2VsbCopOwogCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJl
bihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU5fV0lU
SF9NT0RJRklFUihKU19FWFBPUlRfUFJJVkFURSk7CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSBz
dGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCos
IFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3Rh
dGljIGJvb2wgcHV0KEpTQ2VsbCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBKU1Zh
bHVlLCBQdXRQcm9wZXJ0eVNsb3QmKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTSW1tdXRhYmxlQnV0dGVyZmx5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0ltbXV0YWJsZUJ1dHRlcmZseS5jcHAJKHJldmlzaW9uIDI3Mjkw
MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTSW1tdXRhYmxlQnV0dGVyZmx5
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE4LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC0zMiw3ICszMiw4IEBAIG5hbWVzcGFjZSBKU0MgewogCiBjb25z
dCBDbGFzc0luZm8gSlNJbW11dGFibGVCdXR0ZXJmbHk6OnNfaW5mbyA9IHsgIkltbXV0YWJsZSBC
dXR0ZXJmbHkiLCBudWxscHRyLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxF
KEpTSW1tdXRhYmxlQnV0dGVyZmx5KSB9OwogCi12b2lkIEpTSW1tdXRhYmxlQnV0dGVyZmx5Ojp2
aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0
ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0ltbXV0YWJsZUJ1dHRlcmZseTo6dmlzaXRDaGls
ZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEFTU0VSVF9H
Q19PQkpFQ1RfSU5IRVJJVFMoY2VsbCwgaW5mbygpKTsKICAgICBCYXNlOjp2aXNpdENoaWxkcmVu
KGNlbGwsIHZpc2l0b3IpOwpAQCAtNDUsNiArNDYsOCBAQCB2b2lkIEpTSW1tdXRhYmxlQnV0dGVy
Zmx5Ojp2aXNpdENoaWxkcmVuCiAgICAgdmlzaXRvci5hcHBlbmRWYWx1ZXNIaWRkZW4oYnV0dGVy
Zmx5LT5jb250aWd1b3VzKCkuZGF0YSgpLCBidXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpKTsKIH0K
IAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTSW1tdXRhYmxlQnV0dGVyZmx5KTsKKwogdm9pZCBK
U0ltbXV0YWJsZUJ1dHRlcmZseTo6Y29weVRvQXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0KiwgSlNW
YWx1ZSogZmlyc3RFbGVtZW50RGVzdCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgp
CiB7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ltbXV0YWJsZUJ1dHRlcmZseS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTSW1tdXRhYmxlQnV0dGVy
Zmx5LmgJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTSW1tdXRhYmxlQnV0dGVyZmx5LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xNDUsNyArMTQ1LDcg
QEAgcHVibGljOgogICAgICAgICByZXR1cm4ganNEb3VibGVOdW1iZXIodmFsdWUpOwogICAgIH0K
IAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsK
KyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgdm9pZCBjb3B5VG9Bcmd1bWVudHMo
SlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlKiBmaXJzdEVsZW1lbnREZXN0LCB1bnNpZ25lZCBvZmZz
ZXQsIHVuc2lnbmVkIGxlbmd0aCk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTSW50ZXJuYWxGaWVsZE9iamVjdEltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0ludGVybmFsRmllbGRPYmplY3RJbXBsLmgJKHJldmlzaW9u
IDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTSW50ZXJuYWxGaWVs
ZE9iamVjdEltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE5LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02Niw3ICs2Niw3IEBAIHB1YmxpYzoKICAgICBz
dGF0aWMgcHRyZGlmZl90IG9mZnNldE9mSW50ZXJuYWxGaWVsZCh1bnNpZ25lZCBpbmRleCkgeyBy
ZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTSW50ZXJuYWxGaWVsZE9iamVjdEltcGwsIG1faW50ZXJu
YWxGaWVsZHMpICsgaW5kZXggKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KTsgfQogCiBw
cm90ZWN0ZWQ6Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90Vmlz
aXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBKU0ludGVybmFsRmll
bGRPYmplY3RJbXBsKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiAgICAgICAgIDogQmFz
ZSh2bSwgc3RydWN0dXJlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJ
bnRlcm5hbEZpZWxkT2JqZWN0SW1wbElubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0ludGVybmFsRmllbGRPYmplY3RJbXBsSW5saW5lcy5oCShy
ZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ludGVy
bmFsRmllbGRPYmplY3RJbXBsSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMwLDcgKzMwLDggQEAK
IG5hbWVzcGFjZSBKU0MgewogCiB0ZW1wbGF0ZTx1bnNpZ25lZCBwYXNzZWROdW1iZXJPZkludGVy
bmFsRmllbGRzPgotdm9pZCBKU0ludGVybmFsRmllbGRPYmplY3RJbXBsPHBhc3NlZE51bWJlck9m
SW50ZXJuYWxGaWVsZHM+Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3Im
IHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0ludGVybmFsRmll
bGRPYmplY3RJbXBsPHBhc3NlZE51bWJlck9mSW50ZXJuYWxGaWVsZHM+Ojp2aXNpdENoaWxkcmVu
SW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0byogdGhpc09i
amVjdCA9IGpzQ2FzdDxKU0ludGVybmFsRmllbGRPYmplY3RJbXBsKj4oY2VsbCk7CiAgICAgQVNT
RVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtMzgsNCArMzks
NiBAQCB2b2lkIEpTSW50ZXJuYWxGaWVsZE9iamVjdEltcGw8cGFzc2VkTnVtCiAgICAgdmlzaXRv
ci5hcHBlbmRWYWx1ZXModGhpc09iamVjdC0+bV9pbnRlcm5hbEZpZWxkcywgbnVtYmVyT2ZJbnRl
cm5hbEZpZWxkcyk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTl9XSVRIX01PRElGSUVSKHRl
bXBsYXRlPHVuc2lnbmVkIHBhc3NlZE51bWJlck9mSW50ZXJuYWxGaWVsZHM+LCBKU0ludGVybmFs
RmllbGRPYmplY3RJbXBsPHBhc3NlZE51bWJlck9mSW50ZXJuYWxGaWVsZHM+KTsKKwogfSAvLyBu
YW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xleGlj
YWxFbnZpcm9ubWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNMZXhpY2FsRW52aXJvbm1lbnQuY3BwCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xleGljYWxFbnZpcm9ubWVudC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTkg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIw
MjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0zNiw3ICszNiw4IEBAIG5hbWVzcGFjZSBKU0MgewogCiBjb25zdCBDbGFz
c0luZm8gSlNMZXhpY2FsRW52aXJvbm1lbnQ6OnNfaW5mbyA9IHsgIkpTTGV4aWNhbEVudmlyb25t
ZW50IiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJM
RShKU0xleGljYWxFbnZpcm9ubWVudCkgfTsKIAotdm9pZCBKU0xleGljYWxFbnZpcm9ubWVudDo6
dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxh
dGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNMZXhpY2FsRW52aXJvbm1lbnQ6OnZpc2l0Q2hp
bGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBhdXRvKiB0
aGlzT2JqZWN0ID0ganNDYXN0PEpTTGV4aWNhbEVudmlyb25tZW50Kj4oY2VsbCk7CiAgICAgQVNT
RVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNDQsNiArNDUs
OCBAQCB2b2lkIEpTTGV4aWNhbEVudmlyb25tZW50Ojp2aXNpdENoaWxkcmVuCiAgICAgdmlzaXRv
ci5hcHBlbmRWYWx1ZXNIaWRkZW4odGhpc09iamVjdC0+dmFyaWFibGVzKCksIHRoaXNPYmplY3Qt
PnN5bWJvbFRhYmxlKCktPnNjb3BlU2l6ZSgpKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVO
KEpTTGV4aWNhbEVudmlyb25tZW50KTsKKwogdm9pZCBKU0xleGljYWxFbnZpcm9ubWVudDo6YW5h
bHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQogewogICAgIGF1
dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNMZXhpY2FsRW52aXJvbm1lbnQqPihjZWxsKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTGV4aWNhbEVudmlyb25tZW50LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMZXhpY2FsRW52
aXJvbm1lbnQuaAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNMZXhpY2FsRW52aXJvbm1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEzNCw3ICsx
MzQsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCB2
aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9D
SElMRFJFTjsKICAgICBzdGF0aWMgdm9pZCBhbmFseXplSGVhcChKU0NlbGwqLCBIZWFwQW5hbHl6
ZXImKTsKIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTWFwSXRl
cmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
TWFwSXRlcmF0b3IuY3BwCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU01hcEl0ZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNyBBcHBsZSwgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjEgQXBwbGUsIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTcsMTMg
KzU3LDE2IEBAIHZvaWQgSlNNYXBJdGVyYXRvcjo6ZmluaXNoQ3JlYXRpb24oVk0mIHYKICAgICAg
ICAgQmFzZTo6aW50ZXJuYWxGaWVsZChpbmRleCkuc2V0KHZtLCB0aGlzLCB2YWx1ZXNbaW5kZXhd
KTsKIH0KIAotdm9pZCBKU01hcEl0ZXJhdG9yOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwg
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBK
U01hcEl0ZXJhdG9yOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZp
c2l0b3IpCiB7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU01hcEl0ZXJhdG9yKj4o
Y2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkp
OwogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CiB9CiAKK0RF
RklORV9WSVNJVF9DSElMRFJFTihKU01hcEl0ZXJhdG9yKTsKKwogSlNWYWx1ZSBKU01hcEl0ZXJh
dG9yOjpjcmVhdGVQYWlyKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUga2V5
LCBKU1ZhbHVlIHZhbHVlKQogewogICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3M7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01hcEl0ZXJhdG9yLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNYXBJdGVyYXRvci5oCShyZXZp
c2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01hcEl0ZXJh
dG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDEzLCAyMDE2IEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAyMSBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xNDIsNyArMTQyLDcgQEAgcHJpdmF0ZToKICAg
ICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgSlNNYXAqLCBJdGVy
YXRpb25LaW5kKTsKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7CiAgICAgSlNWYWx1ZSBj
cmVhdGVQYWlyKEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSwgSlNWYWx1ZSk7Ci0gICAgc3RhdGlj
IHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVf
VklTSVRfQ0hJTERSRU47CiB9OwogU1RBVElDX0FTU0VSVF9JU19UUklWSUFMTFlfREVTVFJVQ1RJ
QkxFKEpTTWFwSXRlcmF0b3IpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU01vZHVsZUVudmlyb25tZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU01vZHVsZUVudmlyb25tZW50LmNwcAkocmV2aXNpb24gMjcyOTAyKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVFbnZpcm9ubWVudC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1
LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE1LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC02NSw3ICs2NSw4IEBAIHZvaWQgSlNNb2R1bGVFbnZpcm9ubWVu
dDo6ZmluaXNoQ3JlYXRpb24KICAgICB0aGlzLT5tb2R1bGVSZWNvcmRTbG90KCkuc2V0KHZtLCB0
aGlzLCBtb2R1bGVSZWNvcmQpOwogfQogCi12b2lkIEpTTW9kdWxlRW52aXJvbm1lbnQ6OnZpc2l0
Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5
cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTTW9kdWxlRW52aXJvbm1lbnQ6OnZpc2l0Q2hpbGRyZW5J
bXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU01vZHVsZUVudmly
b25tZW50KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTTW9kdWxlRW52aXJvbm1lbnQqPihjZWxsKTsK
ICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC03
NCw2ICs3NSw4IEBAIHZvaWQgSlNNb2R1bGVFbnZpcm9ubWVudDo6dmlzaXRDaGlsZHJlbigKICAg
ICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tb2R1bGVSZWNvcmRTbG90KCkpOwogfQogCitE
RUZJTkVfVklTSVRfQ0hJTERSRU4oSlNNb2R1bGVFbnZpcm9ubWVudCk7CisKIGJvb2wgSlNNb2R1
bGVFbnZpcm9ubWVudDo6Z2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiBjZWxsLCBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0
eVNsb3QmIHNsb3QpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVFbnZpcm9ubWVudC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlRW52aXJvbm1l
bnQuaAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNNb2R1bGVFbnZpcm9ubWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODksNyArODksNyBAQCBw
cml2YXRlOgogICAgICAgICByZXR1cm4gKmJpdHdpc2VfY2FzdDxXcml0ZUJhcnJpZXJCYXNlPEFi
c3RyYWN0TW9kdWxlUmVjb3JkPio+KGJpdHdpc2VfY2FzdDxjaGFyKj4odGhpcykgKyBvZmZzZXRP
Zk1vZHVsZVJlY29yZChzeW1ib2xUYWJsZSgpKSk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQg
dmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRf
Q0hJTERSRU47CiB9OwogCiBpbmxpbmUgSlNNb2R1bGVFbnZpcm9ubWVudDo6SlNNb2R1bGVFbnZp
cm9ubWVudChWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU1Njb3BlKiBjdXJyZW50U2Nv
cGUsIFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTTW9kdWxlTmFtZXNwYWNlT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZU5hbWVzcGFjZU9iamVjdC5jcHAJKHJl
dmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxl
TmFtZXNwYWNlT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTg1LDcgKzg1LDggQEAgdm9p
ZCBKU01vZHVsZU5hbWVzcGFjZU9iamVjdDo6ZGVzdHJveShKUwogICAgIHRoaXNPYmplY3QtPkpT
TW9kdWxlTmFtZXNwYWNlT2JqZWN0Ojp+SlNNb2R1bGVOYW1lc3BhY2VPYmplY3QoKTsKIH0KIAot
dm9pZCBKU01vZHVsZU5hbWVzcGFjZU9iamVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGws
IFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQg
SlNNb2R1bGVOYW1lc3BhY2VPYmplY3Q6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwg
VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU01vZHVsZU5hbWVzcGFjZU9iamVjdCogdGhpc09i
amVjdCA9IGpzQ2FzdDxKU01vZHVsZU5hbWVzcGFjZU9iamVjdCo+KGNlbGwpOwogICAgIEFTU0VS
VF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTk4LDYgKzk5LDgg
QEAgdm9pZCBKU01vZHVsZU5hbWVzcGFjZU9iamVjdDo6dmlzaXRDaGlsZAogICAgIH0KIH0KIAor
REVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0KTsKKwogc3RhdGlj
IEpTVmFsdWUgZ2V0VmFsdWUoSlNNb2R1bGVFbnZpcm9ubWVudCogZW52aXJvbm1lbnQsIFByb3Bl
cnR5TmFtZSBsb2NhbE5hbWUsIFNjb3BlT2Zmc2V0JiBzY29wZU9mZnNldCkKIHsKICAgICBTeW1i
b2xUYWJsZSogc3ltYm9sVGFibGUgPSBlbnZpcm9ubWVudC0+c3ltYm9sVGFibGUoKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlTmFtZXNwYWNlT2JqZWN0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVOYW1l
c3BhY2VPYmplY3QuaAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTcy
LDcgKzcyLDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBKU19FWFBPUlRfUFJJVkFURSBKU01v
ZHVsZU5hbWVzcGFjZU9iamVjdChWTSYsIFN0cnVjdHVyZSopOwogICAgIEpTX0VYUE9SVF9QUklW
QVRFIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxPYmplY3QqLCBBYnN0cmFjdE1vZHVsZVJl
Y29yZCosIFZlY3RvcjxzdGQ6OnBhaXI8SWRlbnRpZmllciwgQWJzdHJhY3RNb2R1bGVSZWNvcmQ6
OlJlc29sdXRpb24+PiYmKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCos
IFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKICAgICBib29sIGdl
dE93blByb3BlcnR5U2xvdENvbW1vbihKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSwgUHJv
cGVydHlTbG90Jik7CiAKICAgICBzdHJ1Y3QgRXhwb3J0RW50cnkgewpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVSZWNvcmQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlUmVjb3JkLmNwcAkocmV2aXNpb24g
MjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVSZWNvcmQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxNS0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNzAsNyArNzAsOCBAQCB2b2lkIEpTTW9kdWxlUmVjb3Jk
OjpmaW5pc2hDcmVhdGlvbihKU0dsCiAgICAgQVNTRVJUKGluaGVyaXRzKHZtLCBpbmZvKCkpKTsK
IH0KIAotdm9pZCBKU01vZHVsZVJlY29yZDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNN
b2R1bGVSZWNvcmQ6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlz
aXRvcikKIHsKICAgICBKU01vZHVsZVJlY29yZCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU01vZHVs
ZVJlY29yZCo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVj
dCwgaW5mbygpKTsKQEAgLTc4LDYgKzc5LDggQEAgdm9pZCBKU01vZHVsZVJlY29yZDo6dmlzaXRD
aGlsZHJlbihKU0NlbAogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fbW9kdWxlUHJv
Z3JhbUV4ZWN1dGFibGUpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNNb2R1bGVSZWNv
cmQpOworCiB2b2lkIEpTTW9kdWxlUmVjb3JkOjpsaW5rKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEpTVmFsdWUgc2NyaXB0RmV0Y2hlcikKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmpl
Y3QtPnZtKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZVJl
Y29yZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9k
dWxlUmVjb3JkLmgJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTTW9kdWxlUmVjb3JkLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02Niw3ICs2Niw3IEBA
IHByaXZhdGU6CiAKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTR2xvYmFsT2JqZWN0KiwgVk0m
KTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3Im
KTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgdm9pZCBpbnN0YW50aWF0ZURl
Y2xhcmF0aW9ucyhKU0dsb2JhbE9iamVjdCosIE1vZHVsZVByb2dyYW1FeGVjdXRhYmxlKiwgSlNW
YWx1ZSBzY3JpcHRGZXRjaGVyKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNOYXRpdmVTdGRGdW5jdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNOYXRpdmVTdGRGdW5jdGlvbi5jcHAJKHJldmlzaW9uIDI3MjkwMikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTmF0aXZlU3RkRnVuY3Rpb24uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
NS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtNDEsMTMgKzQxLDE2IEBAIEpTTmF0aXZlU3RkRnVuY3Rpb246
OkpTTmF0aXZlU3RkRnVuY3Rpb24KIHsKIH0KIAotdm9pZCBKU05hdGl2ZVN0ZEZ1bmN0aW9uOjp2
aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0
ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU05hdGl2ZVN0ZEZ1bmN0aW9uOjp2aXNpdENoaWxk
cmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNOYXRpdmVT
dGRGdW5jdGlvbiogdGhpc09iamVjdCA9IGpzQ2FzdDxKU05hdGl2ZVN0ZEZ1bmN0aW9uKj4oY2Vs
bCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwog
ICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CiB9CiAKK0RFRklO
RV9WSVNJVF9DSElMRFJFTihKU05hdGl2ZVN0ZEZ1bmN0aW9uKTsKKwogdm9pZCBKU05hdGl2ZVN0
ZEZ1bmN0aW9uOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIE5hdGl2ZUV4ZWN1dGFibGUqIGV4ZWN1
dGFibGUsIHVuc2lnbmVkIGxlbmd0aCwgY29uc3QgU3RyaW5nJiBuYW1lKQogewogICAgIEJhc2U6
OmZpbmlzaENyZWF0aW9uKHZtLCBleGVjdXRhYmxlLCBsZW5ndGgsIG5hbWUpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNOYXRpdmVTdGRGdW5jdGlvbi5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTmF0aXZlU3RkRnVuY3Rpb24u
aAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNO
YXRpdmVTdGRGdW5jdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxNS0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjUsNyArNjUsNyBAQCBwdWJs
aWM6CiBwcml2YXRlOgogICAgIEpTTmF0aXZlU3RkRnVuY3Rpb24oVk0mLCBOYXRpdmVFeGVjdXRh
YmxlKiwgSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqLCBOYXRpdmVTdGRGdW5jdGlvbiYmKTsK
ICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgTmF0aXZlRXhlY3V0YWJsZSosIHVuc2lnbmVk
IGxlbmd0aCwgY29uc3QgU3RyaW5nJiBuYW1lKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxk
cmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsK
IAogICAgIE5hdGl2ZVN0ZEZ1bmN0aW9uIG1fZnVuY3Rpb247CiB9OwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDcgKzEsNyBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMSBIYXJyaSBQ
b3J0ZW4gKHBvcnRlbkBrZGUub3JnKQogICogIENvcHlyaWdodCAoQykgMjAwMSBQZXRlciBLZWxs
eSAocG1rQHBvc3QuY29tKQotICogIENvcHlyaWdodCAoQykgMjAwMy0yMDIwIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAyMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA3IEVyaWMgU2Vp
ZGVsIChlcmljQHdlYmtpdC5vcmcpCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTczLDcgKzczLDggQEAgY29u
c3QgQ2xhc3NJbmZvIEpTT2JqZWN0OjpzX2luZm8gPSB7ICJPYgogCiBjb25zdCBDbGFzc0luZm8g
SlNGaW5hbE9iamVjdDo6c19pbmZvID0geyAiT2JqZWN0IiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0
ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU0ZpbmFsT2JqZWN0KSB9OwogCi1BTFdB
WVNfSU5MSU5FIHZvaWQgSlNPYmplY3Q6Om1hcmtBdXhpbGlhcnlBbmRWaXNpdE91dE9mTGluZVBy
b3BlcnRpZXMoU2xvdFZpc2l0b3ImIHZpc2l0b3IsIEJ1dHRlcmZseSogYnV0dGVyZmx5LCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgbWF4T2Zmc2V0KQordGVtcGxhdGU8dHlw
ZW5hbWUgVmlzaXRvcj4KK0FMV0FZU19JTkxJTkUgdm9pZCBKU09iamVjdDo6bWFya0F1eGlsaWFy
eUFuZFZpc2l0T3V0T2ZMaW5lUHJvcGVydGllcyhWaXNpdG9yJiB2aXNpdG9yLCBCdXR0ZXJmbHkq
IGJ1dHRlcmZseSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IG1heE9mZnNl
dCkKIHsKICAgICAvLyBXZSBjYWxsIHRoaXMgd2hlbiB3ZSBmb3VuZCBldmVyeXRoaW5nIHdpdGhv
dXQgcmFjZXMuCiAgICAgQVNTRVJUKHN0cnVjdHVyZSk7CkBAIC0xMDQsNyArMTA1LDggQEAgQUxX
QVlTX0lOTElORSB2b2lkIEpTT2JqZWN0OjptYXJrQXV4aWxpYQogICAgIHZpc2l0b3IuYXBwZW5k
VmFsdWVzSGlkZGVuKGJ1dHRlcmZseS0+cHJvcGVydHlTdG9yYWdlKCkgLSBvdXRPZkxpbmVTaXpl
LCBvdXRPZkxpbmVTaXplKTsKIH0KIAotQUxXQVlTX0lOTElORSBTdHJ1Y3R1cmUqIEpTT2JqZWN0
Ojp2aXNpdEJ1dHRlcmZseShTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1l
IFZpc2l0b3I+CitBTFdBWVNfSU5MSU5FIFN0cnVjdHVyZSogSlNPYmplY3Q6OnZpc2l0QnV0dGVy
Zmx5KFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IHJh
Y2VSZWFzb24gPSAiSlNPYmplY3Q6OnZpc2l0QnV0dGVyZmx5IjsKICAgICBTdHJ1Y3R1cmUqIHJl
c3VsdCA9IHZpc2l0QnV0dGVyZmx5SW1wbCh2aXNpdG9yKTsKQEAgLTExMyw3ICsxMTUsOCBAQCBB
TFdBWVNfSU5MSU5FIFN0cnVjdHVyZSogSlNPYmplY3Q6OnZpc2l0CiAgICAgcmV0dXJuIHJlc3Vs
dDsKIH0KIAotQUxXQVlTX0lOTElORSBTdHJ1Y3R1cmUqIEpTT2JqZWN0Ojp2aXNpdEJ1dHRlcmZs
eUltcGwoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgor
QUxXQVlTX0lOTElORSBTdHJ1Y3R1cmUqIEpTT2JqZWN0Ojp2aXNpdEJ1dHRlcmZseUltcGwoVmlz
aXRvciYgdmlzaXRvcikKIHsKICAgICBWTSYgdm0gPSB2aXNpdG9yLnZtKCk7CiAgICAgCkBAIC00
MTMsMjQgKzQxNiwyMCBAQCBzaXplX3QgSlNPYmplY3Q6OmVzdGltYXRlZFNpemUoSlNDZWxsKiBj
CiAgICAgcmV0dXJuIEJhc2U6OmVzdGltYXRlZFNpemUoY2VsbCwgdm0pICsgYnV0dGVyZmx5T3V0
T2ZMaW5lU2l6ZTsKIH0KIAotdm9pZCBKU09iamVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNl
bGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3Zv
aWQgSlNPYmplY3Q6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlz
aXRvcikKIHsKICAgICBKU09iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU09iamVjdCo+KGNl
bGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsK
LSNpZiBBU1NFUlRfRU5BQkxFRAotICAgIGJvb2wgd2FzQ2hlY2tpbmdGb3JEZWZhdWx0TWFya1Zp
b2xhdGlvbiA9IHZpc2l0b3IubV9pc0NoZWNraW5nRm9yRGVmYXVsdE1hcmtWaW9sYXRpb247Ci0g
ICAgdmlzaXRvci5tX2lzQ2hlY2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlvbiA9IGZhbHNlOwot
I2VuZGlmCi0gICAgCisgICAgdHlwZW5hbWUgVmlzaXRvcjo6RGVmYXVsdE1hcmtpbmdWaW9sYXRp
b25Bc3NlcnRpb25TY29wZSBhc3NlcnRpb25TY29wZSh2aXNpdG9yKTsKKwogICAgIEpTQ2VsbDo6
dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKLSAgICAKKwogICAgIHRoaXNPYmpl
Y3QtPnZpc2l0QnV0dGVyZmx5KHZpc2l0b3IpOwotICAgIAotI2lmIEFTU0VSVF9FTkFCTEVECi0g
ICAgdmlzaXRvci5tX2lzQ2hlY2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlvbiA9IHdhc0NoZWNr
aW5nRm9yRGVmYXVsdE1hcmtWaW9sYXRpb247Ci0jZW5kaWYKIH0KIAorREVGSU5FX1ZJU0lUX0NI
SUxEUkVOX1dJVEhfTU9ESUZJRVIoSlNfRVhQT1JUX1BSSVZBVEUsIEpTT2JqZWN0KTsKKwogdm9p
ZCBKU09iamVjdDo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5
emVyKQogewogICAgIEpTT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTT2JqZWN0Kj4oY2Vs
bCk7CkBAIC00NjksMTQgKzQ2OCwxMiBAQCB2b2lkIEpTT2JqZWN0OjphbmFseXplSGVhcChKU0Nl
bGwqIGNlbGwsCiAgICAgfQogfQogCi12b2lkIEpTRmluYWxPYmplY3Q6OnZpc2l0Q2hpbGRyZW4o
SlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZp
c2l0b3I+Cit2b2lkIEpTRmluYWxPYmplY3Q6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2Vs
bCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU0ZpbmFsT2JqZWN0KiB0aGlzT2JqZWN0ID0g
anNDYXN0PEpTRmluYWxPYmplY3QqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVS
SVRTKHRoaXNPYmplY3QsIGluZm8oKSk7Ci0jaWYgQVNTRVJUX0VOQUJMRUQKLSAgICBib29sIHdh
c0NoZWNraW5nRm9yRGVmYXVsdE1hcmtWaW9sYXRpb24gPSB2aXNpdG9yLm1faXNDaGVja2luZ0Zv
ckRlZmF1bHRNYXJrVmlvbGF0aW9uOwotICAgIHZpc2l0b3IubV9pc0NoZWNraW5nRm9yRGVmYXVs
dE1hcmtWaW9sYXRpb24gPSBmYWxzZTsKLSNlbmRpZgorICAgIHR5cGVuYW1lIFZpc2l0b3I6OkRl
ZmF1bHRNYXJraW5nVmlvbGF0aW9uQXNzZXJ0aW9uU2NvcGUgYXNzZXJ0aW9uU2NvcGUodmlzaXRv
cik7CiAgICAgCiAgICAgSlNDZWxsOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3Ip
OwogICAgIApAQCAtNDg0LDEyICs0ODEsMTAgQEAgdm9pZCBKU0ZpbmFsT2JqZWN0Ojp2aXNpdENo
aWxkcmVuKEpTQ2VsbAogICAgICAgICBpZiAodW5zaWduZWQgc3RvcmFnZVNpemUgPSBzdHJ1Y3R1
cmUtPmlubGluZVNpemUoKSkKICAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kVmFsdWVzSGlkZGVu
KHRoaXNPYmplY3QtPmlubGluZVN0b3JhZ2UoKSwgc3RvcmFnZVNpemUpOwogICAgIH0KLSAgICAK
LSNpZiBBU1NFUlRfRU5BQkxFRAotICAgIHZpc2l0b3IubV9pc0NoZWNraW5nRm9yRGVmYXVsdE1h
cmtWaW9sYXRpb24gPSB3YXNDaGVja2luZ0ZvckRlZmF1bHRNYXJrVmlvbGF0aW9uOwotI2VuZGlm
CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTl9XSVRIX01PRElGSUVSKEpTX0VYUE9SVF9QUklW
QVRFLCBKU0ZpbmFsT2JqZWN0KTsKKwogU3RyaW5nIEpTT2JqZWN0OjpjbGFzc05hbWUoY29uc3Qg
SlNPYmplY3QqIG9iamVjdCwgVk0mIHZtKQogewogICAgIGNvbnN0IENsYXNzSW5mbyogaW5mbyA9
IG9iamVjdC0+Y2xhc3NJbmZvKHZtKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNPYmplY3QuaAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMSw3ICsxLDcgQEAKIC8qCiAg
KiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDEgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykK
ICAqICBDb3B5cmlnaHQgKEMpIDIwMDEgUGV0ZXIgS2VsbHkgKHBta0Bwb3N0LmNvbSkKLSAqICBD
b3B5cmlnaHQgKEMpIDIwMDMtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTEwOCw4ICsxMDgsOSBAQCBjbGFzcyBKU09iamVj
dCA6IHB1YmxpYyBKU0NlbGwgewogcHVibGljOgogICAgIHVzaW5nIEJhc2UgPSBKU0NlbGw7CiAK
KyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOX1dJVEhfTU9ESUZJRVIoSlNfRVhQT1JUX1BSSVZB
VEUpOworCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHNpemVfdCBlc3RpbWF0ZWRTaXpl
KEpTQ2VsbCosIFZNJik7Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgdmlzaXRD
aGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0
YXRpYyB2b2lkIGFuYWx5emVIZWFwKEpTQ2VsbCosIEhlYXBBbmFseXplciYpOwogCiAgICAgSlNf
RVhQT1JUX1BSSVZBVEUgc3RhdGljIFN0cmluZyBjbGFzc05hbWUoY29uc3QgSlNPYmplY3QqLCBW
TSYpOwpAQCAtOTgyLDExICs5ODMsMTEgQEAgcHJvdGVjdGVkOgogICAgIEpTT2JqZWN0KFZNJiwg
U3RydWN0dXJlKiwgQnV0dGVyZmx5KiA9IG51bGxwdHIpOwogICAgIAogICAgIC8vIFZpc2l0cyB0
aGUgYnV0dGVyZmx5IHVubGVzcyB0aGVyZSBpcyBhIHJhY2UuIFJldHVybnMgdGhlIHN0cnVjdHVy
ZSBpZiB0aGVyZSB3YXMgbm8gcmFjZS4KLSAgICBTdHJ1Y3R1cmUqIHZpc2l0QnV0dGVyZmx5KFNs
b3RWaXNpdG9yJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gU3RydWN0dXJlKiB2
aXNpdEJ1dHRlcmZseShWaXNpdG9yJik7CiAgICAgCi0gICAgU3RydWN0dXJlKiB2aXNpdEJ1dHRl
cmZseUltcGwoU2xvdFZpc2l0b3ImKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiBT
dHJ1Y3R1cmUqIHZpc2l0QnV0dGVyZmx5SW1wbChWaXNpdG9yJik7CiAgICAgCi0gICAgdm9pZCBt
YXJrQXV4aWxpYXJ5QW5kVmlzaXRPdXRPZkxpbmVQcm9wZXJ0aWVzKFNsb3RWaXNpdG9yJiwgQnV0
dGVyZmx5KiwgU3RydWN0dXJlKiwgUHJvcGVydHlPZmZzZXQgbWF4T2Zmc2V0KTsKKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIG1hcmtBdXhpbGlhcnlBbmRWaXNpdE91dE9mTGlu
ZVByb3BlcnRpZXMoVmlzaXRvciYsIEJ1dHRlcmZseSosIFN0cnVjdHVyZSosIFByb3BlcnR5T2Zm
c2V0IG1heE9mZnNldCk7CiAKICAgICAvLyBDYWxsIHRoaXMgaWYgeW91IGtub3cgdGhhdCB0aGUg
b2JqZWN0IGlzIGluIGEgbW9kZSB3aGVyZSBpdCBoYXMgYXJyYXkKICAgICAvLyBzdG9yYWdlLiBU
aGlzIHdpbGwgYXNzZXJ0IG90aGVyd2lzZS4KQEAgLTExNzQsOCArMTE3NSw2IEBAIHByb3RlY3Rl
ZDoKICAgICB9CiB9OwogCi1jbGFzcyBKU0ZpbmFsT2JqZWN0OwotCiAvLyBKU0ZpbmFsT2JqZWN0
IGlzIGEgdHlwZSBvZiBKU09iamVjdCB0aGF0IGNvbnRhaW5zIHN1ZmZpY2llbnQgaW50ZXJuYWwK
IC8vIHN0b3JhZ2UgdG8gZnVsbHkgbWFrZSB1c2Ugb2YgdGhlIGNvbGxlY3RvciBjZWxsIGNvbnRh
aW5pbmcgaXQuCiBjbGFzcyBKU0ZpbmFsT2JqZWN0IGZpbmFsIDogcHVibGljIEpTT2JqZWN0IHsK
QEAgLTEyMTQsMTUgKzEyMTMsMTMgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gU3RydWN0dXJl
OjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCB0eXBlSW5mbygpLCBpbmZvKCks
IGRlZmF1bHRJbmRleGluZ1R5cGUsIGlubGluZUNhcGFjaXR5KTsKICAgICB9CiAKLSAgICBKU19F
WFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNp
dG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTl9XSVRIX01PRElGSUVSKEpTX0VYUE9S
VF9QUklWQVRFKTsKIAogICAgIERFQ0xBUkVfRVhQT1JUX0lORk87CiAKIHByaXZhdGU6CiAgICAg
ZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKIAotICAgIHZvaWQgdmlzaXRDaGls
ZHJlbkNvbW1vbihTbG90VmlzaXRvciYpOwotCiAgICAgZXhwbGljaXQgSlNGaW5hbE9iamVjdChW
TSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBCdXR0ZXJmbHkqIGJ1dHRlcmZseSkKICAgICAg
ICAgOiBKU09iamVjdCh2bSwgc3RydWN0dXJlLCBidXR0ZXJmbHkpCiAgICAgewpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9taXNlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb21pc2UuY3BwCShyZXZpc2lvbiAyNzI5
MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb21pc2UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtNjcsMTMgKzY3LDE2IEBAIHZvaWQgSlNQcm9taXNlOjpmaW5pc2hDcmVh
dGlvbihWTSYgdm0pCiAgICAgICAgIEJhc2U6OmludGVybmFsRmllbGQoaW5kZXgpLnNldCh2bSwg
dGhpcywgdmFsdWVzW2luZGV4XSk7CiB9CiAKLXZvaWQgSlNQcm9taXNlOjp2aXNpdENoaWxkcmVu
KEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPgordm9pZCBKU1Byb21pc2U6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwg
VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTUHJv
bWlzZSo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwg
aW5mbygpKTsKICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwog
fQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNQcm9taXNlKTsKKwogYXV0byBKU1Byb21pc2U6
OnN0YXR1cyhWTSYpIGNvbnN0IC0+IFN0YXR1cwogewogICAgIEpTVmFsdWUgdmFsdWUgPSBpbnRl
cm5hbEZpZWxkKEZpZWxkOjpGbGFncykuZ2V0KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1Byb21pc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1Byb21pc2UuaAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9taXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtOTYsNyArOTYsNyBA
QCBwdWJsaWM6CiAgICAgfTsKICAgICBzdGF0aWMgRGVmZXJyZWREYXRhIGNyZWF0ZURlZmVycmVk
RGF0YShKU0dsb2JhbE9iamVjdCosIEpTUHJvbWlzZUNvbnN0cnVjdG9yKik7CiAKLSAgICBzdGF0
aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFS
RV9WSVNJVF9DSElMRFJFTjsKIAogcHJvdGVjdGVkOgogICAgIEpTUHJvbWlzZShWTSYsIFN0cnVj
dHVyZSopOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuY3BwCShyZXZpc2lvbiAyNzI5MDIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
NC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtNzAsNyArNzAsOCBAQCB2b2lkIEpTUHJvcGVydHlOYW1lRW51
bWVyYXRvcjo6ZmluaXNoQ3JlCiAgICAgfQogfQogCi12b2lkIEpTUHJvcGVydHlOYW1lRW51bWVy
YXRvcjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQor
dGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9y
Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAg
ICAgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTUHJvcGVy
dHlOYW1lRW51bWVyYXRvcio+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMo
dGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTg3LDYgKzg4LDggQEAgdm9pZCBKU1Byb3BlcnR5TmFt
ZUVudW1lcmF0b3I6OnZpc2l0Q2hpbAogICAgIH0KIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVO
KEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcik7CisKIC8vIEZJWE1FOiBBc3NlcnQgdGhhdCBwcm9w
ZXJ0aWVzIHJldHVybmVkIGJ5IGdldE93blByb3BlcnR5TmFtZXMoKSBhcmUgcmVwb3J0ZWQgZW51
bWVyYWJsZSBieSBnZXRPd25Qcm9wZXJ0eVNsb3QoKS4KIC8vIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMTk5MjYKIHZvaWQgZ2V0RW51bWVyYWJsZVByb3BlcnR5TmFt
ZXMoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNPYmplY3QqIGJhc2UsIFByb3BlcnR5
TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCB1aW50MzJfdCYgaW5kZXhlZExlbmd0aCwgdWludDMy
X3QmIHN0cnVjdHVyZVByb3BlcnR5Q291bnQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaAkocmV2aXNp
b24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDE0LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE0LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC04NCw3ICs4NCw3IEBAIHB1YmxpYzoK
ICAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3Is
IG1fcHJvcGVydHlOYW1lcyk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJl
bihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAK
IHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJveHkuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJveHkuY3BwCShyZXZpc2lvbiAyNzI5
MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3h5LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxMiwg
MjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzUsNyArMzUsOCBAQCBTVEFUSUNfQVNTRVJUX0lTX1RS
SVZJQUxMWV9ERVNUUlVDVElCTEUoCiAKIGNvbnN0IENsYXNzSW5mbyBKU1Byb3h5OjpzX2luZm8g
PSB7ICJKU1Byb3h5IiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01F
VEhPRF9UQUJMRShKU1Byb3h5KSB9OwogCi12b2lkIEpTUHJveHk6OnZpc2l0Q2hpbGRyZW4oSlND
ZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0
b3I+Cit2b2lkIEpTUHJveHk6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRv
ciYgdmlzaXRvcikKIHsKICAgICBKU1Byb3h5KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTUHJveHkq
PihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8o
KSk7CkBAIC00Myw2ICs0NCw4IEBAIHZvaWQgSlNQcm94eTo6dmlzaXRDaGlsZHJlbihKU0NlbGwq
IGNlbGwKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX3RhcmdldCk7CiB9CiAKK0RF
RklORV9WSVNJVF9DSElMRFJFTl9XSVRIX01PRElGSUVSKEpTX0VYUE9SVF9QUklWQVRFLCBKU1By
b3h5KTsKKwogdm9pZCBKU1Byb3h5OjpzZXRUYXJnZXQoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0KQogewogICAgIG1fdGFyZ2V0LnNldCh2bSwgdGhpcywgZ2xvYmFsT2JqZWN0
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJveHkuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3h5LmgJKHJldmlzaW9u
IDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJveHkuaAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAy
MCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEt
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTg1LDcgKzg1LDcgQEAgcHJvdGVjdGVkOgogICAgICAgICBtX3Rhcmdl
dC5zZXQodm0sIHRoaXMsIHRhcmdldCk7CiAgICAgfQogCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUg
c3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERF
Q0xBUkVfVklTSVRfQ0hJTERSRU5fV0lUSF9NT0RJRklFUihKU19FWFBPUlRfUFJJVkFURSk7CiAK
ICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgU3RyaW5nIGNsYXNzTmFtZShjb25zdCBKU09i
amVjdCosIFZNJik7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFN0cmluZyB0b1N0cmlu
Z05hbWUoY29uc3QgSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCopOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTY29wZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTY29wZS5jcHAJKHJldmlzaW9uIDI3MjkwMikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2NvcGUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDIwIEFwcGxlIEluYy4g
QWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDIxIEFwcGxlIElu
Yy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtMzksNyArMzksOCBAQCBTVEFUSUNfQVNTRVJUX0lTX1RSSVZJQUxMWV9ERVNUUlVDVElCTEUo
CiAKIGNvbnN0IENsYXNzSW5mbyBKU1Njb3BlOjpzX2luZm8gPSB7ICJTY29wZSIsICZCYXNlOjpz
X2luZm8sIG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNTY29wZSkgfTsK
IAotdm9pZCBKU1Njb3BlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3Im
IHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1Njb3BlOjp2aXNp
dENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNT
Y29wZSogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Njb3BlKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dD
X09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNDcsNiArNDgsOCBAQCB2
b2lkIEpTU2NvcGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsCiAgICAgdmlzaXRvci5hcHBl
bmQodGhpc09iamVjdC0+bV9uZXh0KTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTU2Nv
cGUpOworCiAvLyBSZXR1cm5zIHRydWUgaWYgd2UgZm91bmQgZW5vdWdoIGluZm9ybWF0aW9uIHRv
IHRlcm1pbmF0ZSBvcHRpbWl6YXRpb24uCiBzdGF0aWMgaW5saW5lIGJvb2wgYWJzdHJhY3RBY2Nl
c3MoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNTY29wZSogc2NvcGUsIGNvbnN0IElk
ZW50aWZpZXImIGlkZW50LCBHZXRPclB1dCBnZXRPclB1dCwgc2l6ZV90IGRlcHRoLCBib29sJiBu
ZWVkc1ZhckluamVjdGlvbkNoZWNrcywgUmVzb2x2ZU9wJiBvcCwgSW5pdGlhbGl6YXRpb25Nb2Rl
IGluaXRpYWxpemF0aW9uTW9kZSkKIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTU2NvcGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU1Njb3BlLmgJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTU2NvcGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTItMjAxOSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY0LDcgKzY0LDcgQEAgcHVibGlj
OgogCiAgICAgc3RhdGljIHZvaWQgY29sbGVjdENsb3N1cmVWYXJpYWJsZXNVbmRlclREWihKU1Nj
b3BlKiwgVERaRW52aXJvbm1lbnQmIHJlc3VsdCwgUHJpdmF0ZU5hbWVFbnZpcm9ubWVudCYpOwog
Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwor
ICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBib29sIGlzVmFyU2NvcGUoKTsKICAg
ICBib29sIGlzTGV4aWNhbFNjb3BlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmNwcAkocmV2
aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZWdtZW50
ZWRWYXJpYWJsZU9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYyLDcgKzYyLDggQEAgU2Nv
cGVPZmZzZXQgSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdDo6YQogICAgIHJldHVybiBTY29wZU9m
ZnNldChvbGRTaXplKTsKIH0KIAotdm9pZCBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0Ojp2aXNp
dENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0
eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0Ojp2aXNpdENo
aWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNTZWdt
ZW50ZWRWYXJpYWJsZU9iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1NlZ21lbnRlZFZhcmlh
YmxlT2JqZWN0Kj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2Jq
ZWN0LCBpbmZvKCkpOwpAQCAtNzUsNiArNzYsOCBAQCB2b2lkIEpTU2VnbWVudGVkVmFyaWFibGVP
YmplY3Q6OnZpc2l0Q2hpCiAgICAgICAgIHZpc2l0b3IuYXBwZW5kSGlkZGVuKHRoaXNPYmplY3Qt
Pm1fdmFyaWFibGVzW2ldKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOX1dJVEhfTU9ESUZJ
RVIoSlNfRVhQT1JUX1BSSVZBVEUsIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3QpOworCiB2b2lk
IEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3Q6OmFuYWx5emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVh
cEFuYWx5emVyJiBhbmFseXplcikKIHsKICAgICBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0KiB0
aGlzT2JqZWN0ID0ganNDYXN0PEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3QqPihjZWxsKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVPYmpl
Y3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NlZ21l
bnRlZFZhcmlhYmxlT2JqZWN0LmgJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVPYmplY3QuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxOSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTg1LDggKzg1LDggQEAgcHVibGljOgogICAgIC8vIEFkZHMgbnVtYmVyT2ZSZWdpc3Rl
cnNUb0FkZCByZWdpc3RlcnMsIGluaXRpYWxpemVzIHRoZW0gdG8gVW5kZWZpbmVkLCBhbmQgcmV0
dXJucwogICAgIC8vIHRoZSBpbmRleCBvZiB0aGUgZmlyc3Qgb25lIGFkZGVkLgogICAgIEpTX0VY
UE9SVF9QUklWQVRFIFNjb3BlT2Zmc2V0IGFkZFZhcmlhYmxlcyh1bnNpZ25lZCBudW1iZXJPZlZh
cmlhYmxlc1RvQWRkLCBKU1ZhbHVlKTsKLSAgICAKLSAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0
aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisKKyAgICBERUNM
QVJFX1ZJU0lUX0NISUxEUkVOX1dJVEhfTU9ESUZJRVIoSlNfRVhQT1JUX1BSSVZBVEUpOwogICAg
IEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGFuYWx5emVIZWFwKEpTQ2VsbCosIEhlYXBB
bmFseXplciYpOwogICAgIAogcHJvdGVjdGVkOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNTZXRJdGVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNTZXRJdGVyYXRvci5jcHAJKHJldmlzaW9uIDI3MjkwMikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2V0SXRlcmF0b3IuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE3IEFwcGxl
LCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMSBB
cHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC01NywxMyArNTcsMTYgQEAgdm9pZCBKU1NldEl0ZXJhdG9yOjpmaW5pc2hDcmVh
dGlvbihWTSYgdgogICAgICAgICBCYXNlOjppbnRlcm5hbEZpZWxkKGluZGV4KS5zZXQodm0sIHRo
aXMsIHZhbHVlc1tpbmRleF0pOwogfQogCi12b2lkIEpTU2V0SXRlcmF0b3I6OnZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1l
IFZpc2l0b3I+Cit2b2lkIEpTU2V0SXRlcmF0b3I6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCog
Y2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0
PEpTU2V0SXRlcmF0b3IqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRo
aXNPYmplY3QsIGluZm8oKSk7CiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2
aXNpdG9yKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTU2V0SXRlcmF0b3IpOworCiBK
U1ZhbHVlIEpTU2V0SXRlcmF0b3I6OmNyZWF0ZVBhaXIoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgSlNWYWx1ZSBrZXksIEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgTWFya2VkQXJndW1lbnRC
dWZmZXIgYXJnczsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2V0SXRl
cmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Nl
dEl0ZXJhdG9yLmgJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTU2V0SXRlcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTYgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIxIEFwcGxlLCBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEzMCw3ICsxMzAs
NyBAQCBwcml2YXRlOgogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZmluaXNoQ3JlYXRpb24o
Vk0mLCBKU1NldCosIEl0ZXJhdGlvbktpbmQpOwogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0m
KTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBKU1ZhbHVlIGNyZWF0ZVBhaXIoSlNHbG9iYWxPYmpl
Y3QqLCBKU1ZhbHVlLCBKU1ZhbHVlKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpT
Q2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIH07CiBT
VEFUSUNfQVNTRVJUX0lTX1RSSVZJQUxMWV9ERVNUUlVDVElCTEUoSlNTZXRJdGVyYXRvcik7CiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5jcHAJKHJldmlz
aW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAx
OTk5LTIwMDIgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKICAqICBDb3B5cmlnaHQgKEMp
IDIwMDEgUGV0ZXIgS2VsbHkgKHBta0Bwb3N0LmNvbSkKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDQt
MjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAy
MDA0LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAg
KiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKQEAgLTEwNSw3ICsxMDUsOCBAQCBzaXplX3QgSlNTdHJpbmc6OmVzdGltYXRlZFNpemUo
SlNDZWxsKiBjCiAgICAgcmV0dXJuIEJhc2U6OmVzdGltYXRlZFNpemUoY2VsbCwgdm0pICsgYml0
d2lzZV9jYXN0PFN0cmluZ0ltcGwqPihwb2ludGVyKS0+Y29zdER1cmluZ0dDKCk7CiB9CiAKLXZv
aWQgSlNTdHJpbmc6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlz
aXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTU3RyaW5nOjp2aXNpdENo
aWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNTdHJp
bmcqIHRoaXNPYmplY3QgPSBhc1N0cmluZyhjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lO
SEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC0xNDMsNiArMTQ0LDggQEAgdm9pZCBKU1N0
cmluZzo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbAogICAgICAgICB2aXNpdG9yLnJlcG9ydEV4
dHJhTWVtb3J5VmlzaXRlZChpbXBsLT5jb3N0RHVyaW5nR0MoKSk7CiB9CiAKK0RFRklORV9WSVNJ
VF9DSElMRFJFTihKU1N0cmluZyk7CisKIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbWF4TGVu
Z3RoRm9yT25TdGFja1Jlc29sdmUgPSAyMDQ4OwogCiB2b2lkIEpTUm9wZVN0cmluZzo6cmVzb2x2
ZVJvcGVJbnRlcm5hbDgoTENoYXIqIGJ1ZmZlcikgY29uc3QKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuaAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuaAkod29ya2luZyBjb3B5KQpAQCAtMSw3ICsx
LDcgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDEgSGFycmkgUG9ydGVuIChwb3J0
ZW5Aa2RlLm9yZykKICAqICBDb3B5cmlnaHQgKEMpIDIwMDEgUGV0ZXIgS2VsbHkgKHBta0Bwb3N0
LmNvbSkKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIxNyw3ICsyMTcsNyBAQCBw
dWJsaWM6CiAKICAgICBzdGF0aWMgdm9pZCBkdW1wVG9TdHJlYW0oY29uc3QgSlNDZWxsKiwgUHJp
bnRTdHJlYW0mKTsKICAgICBzdGF0aWMgc2l6ZV90IGVzdGltYXRlZFNpemUoSlNDZWxsKiwgVk0m
KTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7
CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIEFMV0FZU19JTkxJTkUgYm9vbCBp
c1JvcGUoKSBjb25zdAogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTU3RyaW5nSXRlcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTU3RyaW5nSXRlcmF0b3IuY3BwCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZ0l0ZXJhdG9yLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTUgWXVzdWtlIFN1
enVraSA8dXRhdGFuZS50ZWFAZ21haWwuY29tPi4KLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTUxLDExICs1MSwxNCBAQCBKU1N0cmluZ0l0ZXJhdG9yKiBKU1N0cmluZ0l0ZXJh
dG9yOjpjbG9uCiAgICAgcmV0dXJuIGNsb25lOwogfQogCi12b2lkIEpTU3RyaW5nSXRlcmF0b3I6
OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBs
YXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTU3RyaW5nSXRlcmF0b3I6OnZpc2l0Q2hpbGRy
ZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBhdXRvKiB0aGlz
T2JqZWN0ID0ganNDYXN0PEpTU3RyaW5nSXRlcmF0b3IqPihjZWxsKTsKICAgICBBU1NFUlRfR0Nf
T0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAgICAgQmFzZTo6dmlzaXRDaGls
ZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpT
U3RyaW5nSXRlcmF0b3IpOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nSXRlcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZ0l0ZXJhdG9yLmgJKHJldmlzaW9uIDI3
MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nSXRlcmF0b3Iu
aAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIw
MTUgWXVzdWtlIFN1enVraSA8dXRhdGFuZS50ZWFAZ21haWwuY29tPi4KKyAqIENvcHlyaWdodCAo
QykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTc5LDcgKzgwLDcgQEAgcHVibGljOgogICAgIEpTVmFsdWUgaW5k
ZXgoKSBjb25zdCB7IHJldHVybiBpbnRlcm5hbEZpZWxkKEZpZWxkOjpJbmRleCkuZ2V0KCk7IH0K
ICAgICBKU1N0cmluZ0l0ZXJhdG9yKiBjbG9uZShKU0dsb2JhbE9iamVjdCopOwogCi0gICAgc3Rh
dGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xB
UkVfVklTSVRfQ0hJTERSRU47CiAKIHByaXZhdGU6CiAgICAgSlNTdHJpbmdJdGVyYXRvcihWTSYg
dm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVjdC5jcHAJKHJldmlzaW9uIDI3Mjkw
MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3Qu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMi0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzYsNyArMzYsOCBAQCBuYW1lc3BhY2UgSlNDIHsKIAog
Y29uc3QgQ2xhc3NJbmZvIEpTU3ltYm9sVGFibGVPYmplY3Q6OnNfaW5mbyA9IHsgIlN5bWJvbFRh
YmxlT2JqZWN0IiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhP
RF9UQUJMRShKU1N5bWJvbFRhYmxlT2JqZWN0KSB9OwogCi12b2lkIEpTU3ltYm9sVGFibGVPYmpl
Y3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3Rl
bXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTU3ltYm9sVGFibGVPYmplY3Q6OnZpc2l0
Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU1N5
bWJvbFRhYmxlT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTU3ltYm9sVGFibGVPYmplY3Qq
PihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8o
KSk7CkBAIC00NCw2ICs0NSw4IEBAIHZvaWQgSlNTeW1ib2xUYWJsZU9iamVjdDo6dmlzaXRDaGls
ZHJlbigKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX3N5bWJvbFRhYmxlKTsKIH0K
IAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTU3ltYm9sVGFibGVPYmplY3QpOworCiBib29sIEpT
U3ltYm9sVGFibGVPYmplY3Q6OmRlbGV0ZVByb3BlcnR5KEpTQ2VsbCogY2VsbCwgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgRGVsZXRlUHJv
cGVydHlTbG90JiBzbG90KQogewogICAgIEpTU3ltYm9sVGFibGVPYmplY3QqIHRoaXNPYmplY3Qg
PSBqc0Nhc3Q8SlNTeW1ib2xUYWJsZU9iamVjdCo+KGNlbGwpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVjdC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuaAkocmV2aXNp
b24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTeW1ib2xUYWJs
ZU9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMi0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNzAsNyArNzAsNyBAQCBwcm90ZWN0ZWQ6CiAg
ICAgICAgIG1fc3ltYm9sVGFibGUuc2V0KHZtLCB0aGlzLCBzeW1ib2xUYWJsZSk7CiAgICAgfQog
ICAgIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3Im
KTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogICAgIAogcHJpdmF0ZToKICAgICBXcml0
ZUJhcnJpZXI8U3ltYm9sVGFibGU+IG1fc3ltYm9sVGFibGU7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU1dlYWtPYmplY3RSZWYuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTV2Vha09iamVjdFJlZi5jcHAJKHJldmlzaW9uIDI3
MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTV2Vha09iamVjdFJlZi5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDE5IEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTktMjAyMSBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC0zOSw3ICszOSw4IEBAIHZvaWQgSlNXZWFrT2JqZWN0UmVmOjpm
aW5pc2hDcmVhdGlvbihWTSYKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CiB9CiAKLXZv
aWQgSlNXZWFrT2JqZWN0UmVmOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0
b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1dlYWtPYmpl
Y3RSZWY6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikK
IHsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTV2Vha09iamVjdFJlZio+KGNlbGwp
OwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAg
LTUxLDYgKzUyLDggQEAgdm9pZCBKU1dlYWtPYmplY3RSZWY6OnZpc2l0Q2hpbGRyZW4oSlNDZQog
ICAgIH0KIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTV2Vha09iamVjdFJlZik7CisKIHZv
aWQgSlNXZWFrT2JqZWN0UmVmOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxseShWTSYgdm0pCiB7CiAg
ICAgaWYgKG1fdmFsdWUgJiYgIXZtLmhlYXAuaXNNYXJrZWQobV92YWx1ZS5nZXQoKSkpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1dlYWtPYmplY3RSZWYuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1dlYWtPYmplY3RSZWYuaAko
cmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNXZWFr
T2JqZWN0UmVmLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDE5IEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTktMjAyMSBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02NSw3ICs2NSw3IEBAIHB1YmxpYzoKICAgICB9
CiAKICAgICB2b2lkIGZpbmFsaXplVW5jb25kaXRpb25hbGx5KFZNJik7Ci0gICAgc3RhdGljIHZv
aWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklT
SVRfQ0hJTERSRU47CiAKIHByaXZhdGU6CiAgICAgSlNXZWFrT2JqZWN0UmVmKFZNJiB2bSwgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U1dpdGhTY29wZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNXaXRoU2NvcGUuY3BwCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU1dpdGhTY29wZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDE2IEFwcGxlIEluYy4gQWxsIFJpZ2h0
cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDIxIEFwcGxlIEluYy4gQWxsIFJp
Z2h0cyBSZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDEsNyAr
NDEsOCBAQCBKU1dpdGhTY29wZSogSlNXaXRoU2NvcGU6OmNyZWF0ZSgKICAgICByZXR1cm4gd2l0
aFNjb3BlOwogfQogCi12b2lkIEpTV2l0aFNjb3BlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2Vs
bCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9p
ZCBKU1dpdGhTY29wZTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2
aXNpdG9yKQogewogICAgIEpTV2l0aFNjb3BlKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTV2l0aFNj
b3BlKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBp
bmZvKCkpOwpAQCAtNDksNiArNTAsOCBAQCB2b2lkIEpTV2l0aFNjb3BlOjp2aXNpdENoaWxkcmVu
KEpTQ2VsbCogCiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9vYmplY3QpOwogfQog
CitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNXaXRoU2NvcGUpOworCiBTdHJ1Y3R1cmUqIEpTV2l0
aFNjb3BlOjpjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBKU1ZhbHVlIHByb3RvKQogewogICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwg
Z2xvYmFsT2JqZWN0LCBwcm90bywgVHlwZUluZm8oV2l0aFNjb3BlVHlwZSwgU3RydWN0dXJlRmxh
Z3MpLCBpbmZvKCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNXaXRo
U2NvcGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1dp
dGhTY29wZS5oCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1dpdGhTY29wZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMiwgMjAxNiBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQzLDcgKzQzLDcgQEAgcHVi
bGljOgogCiAgICAgSlNPYmplY3QqIG9iamVjdCgpIHsgcmV0dXJuIG1fb2JqZWN0LmdldCgpOyB9
CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7
CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNy
ZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBwcm90byk7CiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTV3JhcHBlck9iamVjdC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNXcmFwcGVyT2JqZWN0
LmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNXcmFwcGVyT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAg
KiAgQ29weXJpZ2h0IChDKSAyMDA2IE1ha3MgT3Jsb3ZpY2gKLSAqICBDb3B5cmlnaHQgKEMpIDIw
MDYsIDIwMDksIDIwMTIgQXBwbGUsIEluYy4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMSBB
cHBsZSwgSW5jLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI5LDExICsyOSwxNCBAQCBuYW1l
c3BhY2UgSlNDIHsKIAogU1RBVElDX0FTU0VSVF9JU19UUklWSUFMTFlfREVTVFJVQ1RJQkxFKEpT
V3JhcHBlck9iamVjdCk7CiAKLXZvaWQgSlNXcmFwcGVyT2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpT
Q2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNp
dG9yPgordm9pZCBKU1dyYXBwZXJPYmplY3Q6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2Vs
bCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpT
V3JhcHBlck9iamVjdCo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhp
c09iamVjdCwgaW5mbygpKTsKICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZp
c2l0b3IpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU5fV0lUSF9NT0RJRklFUihKU19FWFBP
UlRfUFJJVkFURSwgSlNXcmFwcGVyT2JqZWN0KTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1dyYXBwZXJPYmplY3QuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1dyYXBwZXJPYmplY3QuaAko
cmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNXcmFw
cGVyT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogIENvcHly
aWdodCAoQykgMjAwNiBNYWtzIE9ybG92aWNoCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3
LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmln
aHQgKEMpIDIwMDYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYwpAQCAtNjQsNyArNjQsNyBAQCBwdWJsaWM6CiBwcm90ZWN0ZWQ6CiAgICAg
ZXhwbGljaXQgSlNXcmFwcGVyT2JqZWN0KFZNJiwgU3RydWN0dXJlKik7CiAKLSAgICBKU19FWFBP
UlRfUFJJVkFURSBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9y
Jik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTl9XSVRIX01PRElGSUVSKEpTX0VYUE9SVF9Q
UklWQVRFKTsKIH07CiAKIGlubGluZSBKU1dyYXBwZXJPYmplY3Q6OkpTV3JhcHBlck9iamVjdChW
TSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvTGF6eUNsYXNzU3RydWN0dXJlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9MYXp5Q2xhc3NTdHJ1Y3R1cmUuY3BwCShyZXZpc2lvbiAyNzI5
MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9MYXp5Q2xhc3NTdHJ1Y3R1cmUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxNi0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNzIsMTIgKzcyLDE2IEBAIHZvaWQgTGF6eUNsYXNzU3Ry
dWN0dXJlOjpJbml0aWFsaXplcjo6c2UKICAgICBjbGFzc1N0cnVjdHVyZS5tX2NvbnN0cnVjdG9y
LnNldCh2bSwgZ2xvYmFsLCBjb25zdHJ1Y3Rvcik7CiB9CiAKLXZvaWQgTGF6eUNsYXNzU3RydWN0
dXJlOjp2aXNpdChTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0
b3I+Cit2b2lkIExhenlDbGFzc1N0cnVjdHVyZTo6dmlzaXQoVmlzaXRvciYgdmlzaXRvcikKIHsK
ICAgICBtX3N0cnVjdHVyZS52aXNpdCh2aXNpdG9yKTsKICAgICB2aXNpdG9yLmFwcGVuZChtX2Nv
bnN0cnVjdG9yKTsKIH0KIAordGVtcGxhdGUgdm9pZCBMYXp5Q2xhc3NTdHJ1Y3R1cmU6OnZpc2l0
KEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgTGF6eUNsYXNzU3RydWN0dXJl
Ojp2aXNpdChTbG90VmlzaXRvciYpOworCiB2b2lkIExhenlDbGFzc1N0cnVjdHVyZTo6ZHVtcChQ
cmludFN0cmVhbSYgb3V0KSBjb25zdAogewogICAgIG91dC5wcmludCgiPHN0cnVjdHVyZSA9ICIs
IG1fc3RydWN0dXJlLCAiLCBjb25zdHJ1Y3RvciA9ICIsIFJhd1BvaW50ZXIobV9jb25zdHJ1Y3Rv
ci5nZXQoKSksICI+Iik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9MYXp5
Q2xhc3NTdHJ1Y3R1cmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9MYXp5Q2xhc3NTdHJ1Y3R1cmUuaAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvTGF6eUNsYXNzU3RydWN0dXJlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MTE3LDcgKzExNyw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fY29uc3RydWN0b3IuZ2V0
KCk7CiAgICAgfQogICAgIAotICAgIHZvaWQgdmlzaXQoU2xvdFZpc2l0b3ImKTsKKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIHZpc2l0KFZpc2l0b3ImKTsKICAgICAKICAgICB2
b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvTGF6eVByb3BlcnR5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvTGF6eVByb3BlcnR5LmgJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0xhenlQcm9wZXJ0eS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE5IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIxIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtMTAzLDcgKzEwMyw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldE1heUJlTnVsbChWTSYsIGNv
bnN0IE93bmVyVHlwZSogb3duZXIsIEVsZW1lbnRUeXBlKik7CiAgICAgdm9pZCBzZXQoVk0mLCBj
b25zdCBPd25lclR5cGUqIG93bmVyLCBFbGVtZW50VHlwZSopOwogICAgIAotICAgIHZvaWQgdmlz
aXQoU2xvdFZpc2l0b3ImKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIHZp
c2l0KFZpc2l0b3ImKTsKICAgICAKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsK
ICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0xhenlQcm9wZXJ0eUlu
bGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9MYXp5
UHJvcGVydHlJbmxpbmVzLmgJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0xhenlQcm9wZXJ0eUlubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02Niw3ICs2
Niw4IEBAIHZvaWQgTGF6eVByb3BlcnR5PE93bmVyVHlwZSwgRWxlbWVudFR5cGUKIH0KIAogdGVt
cGxhdGU8dHlwZW5hbWUgT3duZXJUeXBlLCB0eXBlbmFtZSBFbGVtZW50VHlwZT4KLXZvaWQgTGF6
eVByb3BlcnR5PE93bmVyVHlwZSwgRWxlbWVudFR5cGU+Ojp2aXNpdChTbG90VmlzaXRvciYgdmlz
aXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIExhenlQcm9wZXJ0eTxPd25l
clR5cGUsIEVsZW1lbnRUeXBlPjo6dmlzaXQoVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBpZiAo
bV9wb2ludGVyICYmICEobV9wb2ludGVyICYgbGF6eVRhZykpCiAgICAgICAgIHZpc2l0b3IuYXBw
ZW5kVW5iYXJyaWVyZWQoYml0d2lzZV9jYXN0PEVsZW1lbnRUeXBlKj4obV9wb2ludGVyKSk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Nb2R1bGVQcm9ncmFtRXhlY3V0YWJs
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTW9kdWxl
UHJvZ3JhbUV4ZWN1dGFibGUuY3BwCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9Nb2R1bGVQcm9ncmFtRXhlY3V0YWJsZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEwLCAyMDEz
LCAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDA5LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03OSw3ICs3OSw4IEBAIGF1dG8gTW9kdWxlUHJvZ3Jh
bUV4ZWN1dGFibGU6OmVuc3VyZVRlbXAKICAgICByZXR1cm4gZW5zdXJlVGVtcGxhdGVPYmplY3RN
YXBJbXBsKG1fdGVtcGxhdGVPYmplY3RNYXApOwogfQogCi12b2lkIE1vZHVsZVByb2dyYW1FeGVj
dXRhYmxlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3Ip
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBNb2R1bGVQcm9ncmFtRXhlY3V0YWJs
ZTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewog
ICAgIE1vZHVsZVByb2dyYW1FeGVjdXRhYmxlKiB0aGlzT2JqZWN0ID0ganNDYXN0PE1vZHVsZVBy
b2dyYW1FeGVjdXRhYmxlKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0
aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtOTQsNCArOTUsNiBAQCB2b2lkIE1vZHVsZVByb2dyYW1F
eGVjdXRhYmxlOjp2aXNpdENoaWxkCiAgICAgfQogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4o
TW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUpOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01vZHVsZVByb2dyYW1FeGVjdXRhYmxlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTW9kdWxlUHJvZ3JhbUV4
ZWN1dGFibGUuaAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTc3LDcg
Kzc3LDcgQEAgcHJpdmF0ZToKIAogICAgIE1vZHVsZVByb2dyYW1FeGVjdXRhYmxlKEpTR2xvYmFs
T2JqZWN0KiwgY29uc3QgU291cmNlQ29kZSYpOwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGls
ZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47
CiAKICAgICBXcml0ZUJhcnJpZXI8VW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrPiBtX3Vu
bGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jazsKICAgICBXcml0ZUJhcnJpZXI8U3ltYm9sVGFi
bGU+IG1fbW9kdWxlRW52aXJvbm1lbnRTeW1ib2xUYWJsZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL09wdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL09wdGlvbnMuY3BwCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAyMCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAyMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU1
OCw2ICs1NTgsOSBAQCB2b2lkIE9wdGlvbnM6OnJlY29tcHV0ZURlcGVuZGVudE9wdGlvbnMoCiAK
ICAgICBpZiAoT3B0aW9uczo6dXNlUHJpdmF0ZVN0YXRpY0NsYXNzRmllbGRzKCkpCiAgICAgICAg
IE9wdGlvbnM6OnVzZVByaXZhdGVDbGFzc0ZpZWxkcygpID0gdHJ1ZTsKKworICAgIGlmIChPcHRp
b25zOjp2ZXJib3NlVmVyaWZ5R0MoKSkKKyAgICAgICAgT3B0aW9uczo6dmVyaWZ5R0MoKSA9IHRy
dWU7CiB9CiAKIGlubGluZSB2b2lkKiBPcHRpb25zOjphZGRyZXNzT2ZPcHRpb24oT3B0aW9uczo6
SUQgaWQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zTGlzdC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0
LmgJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09w
dGlvbnNMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTM2OSw2ICszNjksOCBAQCBKU19FWFBPUlRf
UFJJVkFURSBib29sIGNhblVzZUpJVENhZ2UoKTsKICAgICB2KEJvb2wsIGFsd2F5c0dlbmVyYXRl
UENUb0NvZGVPcmlnaW5NYXAsIGZhbHNlLCBOb3JtYWwsICJUaGlzIHdpbGwgbWFrZSBzdXJlIHdl
IGFsd2F5cyBnZW5lcmF0ZSBhIFBDVG9Db2RlT3JpZ2luTWFwIGZvciBKSVRlZCBjb2RlLiIpIFwK
ICAgICBcCiAgICAgdihEb3VibGUsIHJhbmRvbUludGVncml0eUF1ZGl0UmF0ZSwgMC4wNSwgTm9y
bWFsLCAiUHJvYmFiaWxpdHkgb2YgcmFuZG9tIGludGVncml0eSBhdWRpdHMgWzAuMCAtIDEuMF0i
KSBcCisgICAgdihCb29sLCB2ZXJpZnlHQywgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAorICAg
IHYoQm9vbCwgdmVyYm9zZVZlcmlmeUdDLCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAg
dihCb29sLCB2ZXJpZnlIZWFwLCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihVbnNp
Z25lZCwgbnVtYmVyT2ZHQ0N5Y2xlc1RvUmVjb3JkRm9yVmVyaWZpY2F0aW9uLCAzLCBOb3JtYWws
IG51bGxwdHIpIFwKICAgICBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Q
cm9ncmFtRXhlY3V0YWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvUHJvZ3JhbUV4ZWN1dGFibGUuY3BwCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9ncmFtRXhlY3V0YWJsZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTkgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0yMDgsNyArMjA4LDggQEAgYXV0byBQcm9ncmFtRXhlY3V0YWJsZTo6ZW5zdXJl
VGVtcGxhdGVPYgogICAgIHJldHVybiBlbnN1cmVUZW1wbGF0ZU9iamVjdE1hcEltcGwobV90ZW1w
bGF0ZU9iamVjdE1hcCk7CiB9CiAKLXZvaWQgUHJvZ3JhbUV4ZWN1dGFibGU6OnZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1l
IFZpc2l0b3I+Cit2b2lkIFByb2dyYW1FeGVjdXRhYmxlOjp2aXNpdENoaWxkcmVuSW1wbChKU0Nl
bGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgUHJvZ3JhbUV4ZWN1dGFibGUqIHRo
aXNPYmplY3QgPSBqc0Nhc3Q8UHJvZ3JhbUV4ZWN1dGFibGUqPihjZWxsKTsKICAgICBBU1NFUlRf
R0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC0yMjIsNCArMjIzLDYg
QEAgdm9pZCBQcm9ncmFtRXhlY3V0YWJsZTo6dmlzaXRDaGlsZHJlbihKUwogICAgIH0KIH0KIAor
REVGSU5FX1ZJU0lUX0NISUxEUkVOKFByb2dyYW1FeGVjdXRhYmxlKTsKKwogfSAvLyBuYW1lc3Bh
Y2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9ncmFtRXhlY3V0
YWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb2dy
YW1FeGVjdXRhYmxlLmgJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1Byb2dyYW1FeGVjdXRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC04MSw3ICs4
MSw3IEBAIHByaXZhdGU6CiAKICAgICBQcm9ncmFtRXhlY3V0YWJsZShKU0dsb2JhbE9iamVjdCos
IGNvbnN0IFNvdXJjZUNvZGUmKTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlND
ZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAg
V3JpdGVCYXJyaWVyPFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jaz4gbV91bmxpbmtlZFByb2dyYW1D
b2RlQmxvY2s7CiAgICAgV3JpdGVCYXJyaWVyPEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2U+IG1f
cHJvZ3JhbUNvZGVCbG9jazsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1By
b3BlcnR5TWFwSGFzaFRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvUHJvcGVydHlNYXBIYXNoVGFibGUuaAkocmV2aXNpb24gMjcyOTAyKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlNYXBIYXNoVGFibGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA0LTIwMTkg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwNC0y
MDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CkBAIC0xMzMsNyArMTMzLDcgQEAgcHVibGljOgogCiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IG5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOwogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxs
Kik7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYp
OworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBERUNMQVJFX0VYUE9SVF9JTkZP
OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eVRhYmxlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eVRh
YmxlLmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvUHJvcGVydHlUYWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTE4LDcgKzExOCw4IEBA
IHZvaWQgUHJvcGVydHlUYWJsZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHYKICAgICB2bS5oZWFwLnJl
cG9ydEV4dHJhTWVtb3J5QWxsb2NhdGVkKGRhdGFTaXplKCkpOwogfQogCi12b2lkIFByb3BlcnR5
VGFibGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikK
K3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFByb3BlcnR5VGFibGU6OnZpc2l0Q2hp
bGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBhdXRvKiB0
aGlzT2JqZWN0ID0ganNDYXN0PFByb3BlcnR5VGFibGUqPihjZWxsKTsKICAgICBBU1NFUlRfR0Nf
T0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC0xMjYsNiArMTI3LDggQEAg
dm9pZCBQcm9wZXJ0eVRhYmxlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbAogICAgIHZpc2l0b3IucmVw
b3J0RXh0cmFNZW1vcnlWaXNpdGVkKHRoaXNPYmplY3QtPmRhdGFTaXplKCkpOwogfQogCitERUZJ
TkVfVklTSVRfQ0hJTERSRU4oUHJvcGVydHlUYWJsZSk7CisKIHZvaWQgUHJvcGVydHlUYWJsZTo6
ZGVzdHJveShKU0NlbGwqIGNlbGwpCiB7CiAgICAgc3RhdGljX2Nhc3Q8UHJvcGVydHlUYWJsZSo+
KGNlbGwpLT5Qcm9wZXJ0eVRhYmxlOjp+UHJvcGVydHlUYWJsZSgpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJveHlPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3h5T2JqZWN0LmNwcAkocmV2aXNpb24gMjcyOTAy
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJveHlPYmplY3QuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIw
IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0y
MDIxIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMTE3OSw3ICsxMTc5LDggQEAgYm9vbCBQcm94eU9iamVjdDo6aXNSZXZv
a2VkKCkgY29uc3QKICAgICByZXR1cm4gaGFuZGxlcigpLmlzTnVsbCgpOwogfQogCi12b2lkIFBy
b3h5T2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0
b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBQcm94eU9iamVjdDo6dmlzaXRD
aGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFByb3h5
T2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PFByb3h5T2JqZWN0Kj4oY2VsbCk7CiAgICAgQVNT
RVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtMTE4OSw0ICsx
MTkwLDYgQEAgdm9pZCBQcm94eU9iamVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIAogICAgIHZp
c2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1faGFuZGxlcik7CiB9CiAKK0RFRklORV9WSVNJVF9D
SElMRFJFTihQcm94eU9iamVjdCk7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJveHlPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm94eU9iamVjdC5oCShyZXZpc2lvbiAyNzI5MDIp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm94eU9iamVjdC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTkxLDcgKzkxLDcgQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgdm9pZCBnZXRPd25Qcm9w
ZXJ0eU5hbWVzKEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWVBcnJheSYs
IERvbnRFbnVtUHJvcGVydGllc01vZGUpOwogICAgIHN0YXRpYyBib29sIHNldFByb3RvdHlwZShK
U09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBwcm90b3R5cGUsIGJvb2wgc2hvdWxk
VGhyb3dJZkNhbnRTZXQpOwogICAgIHN0YXRpYyBKU1ZhbHVlIGdldFByb3RvdHlwZShKU09iamVj
dCosIEpTR2xvYmFsT2JqZWN0Kik7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0Nl
bGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBi
b29sIGdldE93blByb3BlcnR5U2xvdENvbW1vbihKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFt
ZSwgUHJvcGVydHlTbG90Jik7CiAgICAgYm9vbCBwZXJmb3JtSW50ZXJuYWxNZXRob2RHZXRPd25Q
cm9wZXJ0eShKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm94eVJldm9rZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJveHlSZXZva2UuY3BwCShy
ZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm94eVJl
dm9rZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNi0yMDIxIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjksNyArNjksOCBAQCBKU0NfREVGSU5FX0hPU1RfRlVO
Q1RJT04ocGVyZm9ybVByb3h5UmV2CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKIH0KIAotdm9pZCBQcm94eVJldm9rZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNl
bGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3Zv
aWQgUHJveHlSZXZva2U6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYg
dmlzaXRvcikKIHsKICAgICBQcm94eVJldm9rZSogdGhpc09iamVjdCA9IGpzQ2FzdDxQcm94eVJl
dm9rZSo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwg
aW5mbygpKTsKQEAgLTc4LDQgKzc5LDYgQEAgdm9pZCBQcm94eVJldm9rZTo6dmlzaXRDaGlsZHJl
bihKU0NlbGwqIAogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fcHJveHkpOwogfQog
CitERUZJTkVfVklTSVRfQ0hJTERSRU4oUHJveHlSZXZva2UpOworCiB9IC8vIG5hbWVzcGFjZSBK
U0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3h5UmV2b2tlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJveHlSZXZva2UuaAko
cmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJveHlS
ZXZva2UuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTYtMjAxOSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTUyLDcgKzUyLDcgQEAgcHVibGljOgogICAgIH0K
IAogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBQcm94eU9iamVjdCopOwotICAgIHN0YXRp
YyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJF
X1ZJU0lUX0NISUxEUkVOOwogICAgIEpTVmFsdWUgcHJveHkoKSB7IHJldHVybiBtX3Byb3h5Lmdl
dCgpOyB9CiAgICAgdm9pZCBzZXRQcm94eVRvTnVsbChWTSYgdm0pIHsgcmV0dXJuIG1fcHJveHku
c2V0KHZtLCB0aGlzLCBqc051bGwoKSk7IH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvUmVnRXhwQ2FjaGVkUmVzdWx0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBDYWNoZWRSZXN1bHQuY3BwCShyZXZpc2lvbiAyNzI5
MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBDYWNoZWRSZXN1bHQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMiwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTItMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMxLDcgKzMxLDggQEAKIAogbmFtZXNwYWNlIEpTQyB7
CiAKLXZvaWQgUmVnRXhwQ2FjaGVkUmVzdWx0Ojp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYg
dmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFJlZ0V4cENhY2hlZFJl
c3VsdDo6dmlzaXRBZ2dyZWdhdGVJbXBsKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgdmlzaXRv
ci5hcHBlbmQobV9sYXN0SW5wdXQpOwogICAgIHZpc2l0b3IuYXBwZW5kKG1fbGFzdFJlZ0V4cCk7
CkBAIC00Myw2ICs0NCw4IEBAIHZvaWQgUmVnRXhwQ2FjaGVkUmVzdWx0Ojp2aXNpdEFnZ3JlZ2F0
ZSgKICAgICB9CiB9CiAKK0RFRklORV9WSVNJVF9BR0dSRUdBVEUoUmVnRXhwQ2FjaGVkUmVzdWx0
KTsKKwogSlNBcnJheSogUmVnRXhwQ2FjaGVkUmVzdWx0OjpsYXN0UmVzdWx0KEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEpTT2JqZWN0KiBvd25lcikKIHsKICAgICBWTSYgdm0gPSBnbG9i
YWxPYmplY3QtPnZtKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdF
eHBDYWNoZWRSZXN1bHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9SZWdFeHBDYWNoZWRSZXN1bHQuaAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwQ2FjaGVkUmVzdWx0LmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDIxIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtNjUsNyArNjUsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX3JlaWZpZWQgPyBt
X3JlaWZpZWRJbnB1dC5nZXQoKSA6IG1fbGFzdElucHV0LmdldCgpOwogICAgIH0KIAotICAgIHZv
aWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0FHR1JF
R0FURTsKIAogICAgIC8vIG1fbGFzdFJlZ0V4cCB3b3VsZCBiZSBudWxscHRyIHdoZW4gUmVnRXhw
Q2FjaGVkUmVzdWx0IGlzIG5vdCByZWlmaWVkLgogICAgIC8vIElmIHdlIGZpbmQgbV9sYXN0UmVn
RXhwIGlzIG51bGxwdHIsIGl0IG1lYW5zIHRoaXMgc2hvdWxkIGhvbGQgdGhlIGVtcHR5IFJlZ0V4
cC4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cEdsb2JhbERhdGEu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cEds
b2JhbERhdGEuY3BwCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9SZWdFeHBHbG9iYWxEYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE5LTIwMjEgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMCwxMSArMzAsMTQg
QEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLXZvaWQgUmVnRXhwR2xvYmFsRGF0YTo6dmlzaXRBZ2dy
ZWdhdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgor
dm9pZCBSZWdFeHBHbG9iYWxEYXRhOjp2aXNpdEFnZ3JlZ2F0ZUltcGwoVmlzaXRvciYgdmlzaXRv
cikKIHsKICAgICBtX2NhY2hlZFJlc3VsdC52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKIH0KIAor
REVGSU5FX1ZJU0lUX0FHR1JFR0FURShSZWdFeHBHbG9iYWxEYXRhKTsKKwogSlNWYWx1ZSBSZWdF
eHBHbG9iYWxEYXRhOjpnZXRCYWNrcmVmKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIHVu
c2lnbmVkIGkpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwR2xvYmFsRGF0YS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cEdsb2JhbERhdGEuaAkocmV2
aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwR2xv
YmFsRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTktMjAyMSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQxLDcgKzQxLDcgQEAgcHVibGljOgogICAgIHZvaWQg
c2V0SW5wdXQoSlNHbG9iYWxPYmplY3QqLCBKU1N0cmluZyopOwogICAgIEpTU3RyaW5nKiBpbnB1
dCgpIHsgcmV0dXJuIG1fY2FjaGVkUmVzdWx0LmlucHV0KCk7IH0KIAotICAgIHZvaWQgdmlzaXRB
Z2dyZWdhdGUoU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0FHR1JFR0FURTsKIAog
ICAgIEpTVmFsdWUgZ2V0QmFja3JlZihKU0dsb2JhbE9iamVjdCosIHVuc2lnbmVkKTsKICAgICBK
U1ZhbHVlIGdldExhc3RQYXJlbihKU0dsb2JhbE9iamVjdCopOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBPYmplY3QuY3BwCShyZXZpc2lvbiAyNzI5MDIp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBPYmplY3QuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAw
MCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQotICogIENvcHlyaWdodCAoQykgMjAwMy0y
MDE5IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIw
MDMtMjAyMSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAq
ICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVi
bGljCkBAIC00Niw3ICs0Niw4IEBAIHZvaWQgUmVnRXhwT2JqZWN0OjpmaW5pc2hDcmVhdGlvbihW
TSYgdm0KICAgICBBU1NFUlQodHlwZSgpID09IFJlZ0V4cE9iamVjdFR5cGUpOwogfQogCi12b2lk
IFJlZ0V4cE9iamVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgUmVnRXhwT2JqZWN0Ojp2
aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAg
UmVnRXhwT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PFJlZ0V4cE9iamVjdCo+KGNlbGwpOwog
ICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTU1
LDYgKzU2LDggQEAgdm9pZCBSZWdFeHBPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKgogICAg
IHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fbGFzdEluZGV4KTsKIH0KIAorREVGSU5FX1ZJ
U0lUX0NISUxEUkVOKFJlZ0V4cE9iamVjdCk7CisKIGJvb2wgUmVnRXhwT2JqZWN0OjpnZXRPd25Q
cm9wZXJ0eVNsb3QoSlNPYmplY3QqIG9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQogewogICAg
IFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1JlZ0V4cE9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1JlZ0V4cE9iamVjdC5oCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAt
MSw2ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDAgSGFycmkgUG9ydGVu
IChwb3J0ZW5Aa2RlLm9yZykKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAxOSBBcHBsZSBJbmMu
IEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMjEgQXBwbGUg
SW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwpAQCAtMTMzLDcg
KzEzMyw3IEBAIHByaXZhdGU6CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgUmVnRXhwT2JqZWN0KFZN
JiwgU3RydWN0dXJlKiwgUmVnRXhwKik7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBmaW5p
c2hDcmVhdGlvbihWTSYpOwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwq
LCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBib29s
IGxhc3RJbmRleElzV3JpdGFibGUoKSBjb25zdAogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1NhbXBsaW5nUHJvZmlsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NhbXBsaW5nUHJvZmlsZXIuY3BwCShyZXZpc2lvbiAy
NzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TYW1wbGluZ1Byb2ZpbGVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjUyLDcgKzY1Miw3IEBAIHZvaWQgU2FtcGxpbmdQcm9m
aWxlcjo6cHJvY2Vzc1VudmVyaWZpZWQKICAgICBtX3VucHJvY2Vzc2VkU3RhY2tUcmFjZXMuY2xl
YXIoKTsKIH0KIAotdm9pZCBTYW1wbGluZ1Byb2ZpbGVyOjp2aXNpdChTbG90VmlzaXRvciYgdmlz
aXRvcikKK3ZvaWQgU2FtcGxpbmdQcm9maWxlcjo6dmlzaXQoQWJzdHJhY3RTbG90VmlzaXRvciYg
dmlzaXRvcikKIHsKICAgICBSRUxFQVNFX0FTU0VSVChtX2xvY2suaXNMb2NrZWQoKSk7CiAgICAg
Zm9yIChKU0NlbGwqIGNlbGwgOiBtX2xpdmVDZWxsUG9pbnRlcnMpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TYW1wbGluZ1Byb2ZpbGVyLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5oCShyZXZpc2lvbiAy
NzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TYW1wbGluZ1Byb2ZpbGVy
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
Ni0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMTcxLDcgKzE3MSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIG5vdGlj
ZUpTTG9ja0FjcXVpc2l0aW9uKCk7CiAgICAgdm9pZCBub3RpY2VWTUVudHJ5KCk7CiAgICAgdm9p
ZCBzaHV0ZG93bigpOwotICAgIHZvaWQgdmlzaXQoU2xvdFZpc2l0b3ImKTsKKyAgICB2b2lkIHZp
c2l0KEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKICAgICBMb2NrJiBnZXRMb2NrKCkgeyByZXR1cm4g
bV9sb2NrOyB9CiAgICAgdm9pZCBzZXRUaW1pbmdJbnRlcnZhbChTZWNvbmRzIGludGVydmFsKSB7
IG1fdGltaW5nSW50ZXJ2YWwgPSBpbnRlcnZhbDsgfQogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZv
aWQgc3RhcnQoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlZEFy
Z3VtZW50cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U2NvcGVkQXJndW1lbnRzLmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU2NvcGVkQXJndW1lbnRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxOCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTk4
LDcgKzk4LDggQEAgU2NvcGVkQXJndW1lbnRzKiBTY29wZWRBcmd1bWVudHM6OmNyZWF0ZQogICAg
IHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQgU2NvcGVkQXJndW1lbnRzOjp2aXNpdENoaWxkcmVu
KEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPgordm9pZCBTY29wZWRBcmd1bWVudHM6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCog
Y2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBTY29wZWRBcmd1bWVudHMqIHRoaXNPYmpl
Y3QgPSBzdGF0aWNfY2FzdDxTY29wZWRBcmd1bWVudHMqPihjZWxsKTsKICAgICBBU1NFUlRfR0Nf
T0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC0xMTUsNiArMTE2LDggQEAg
dm9pZCBTY29wZWRBcmd1bWVudHM6OnZpc2l0Q2hpbGRyZW4oSlNDZQogICAgIH0KIH0KIAorREVG
SU5FX1ZJU0lUX0NISUxEUkVOKFNjb3BlZEFyZ3VtZW50cyk7CisKIFN0cnVjdHVyZSogU2NvcGVk
QXJndW1lbnRzOjpjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKIHsKICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVh
dGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhTY29wZWRBcmd1bWVudHNU
eXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TY29wZWRBcmd1bWVudHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TY29wZWRBcmd1bWVudHMuaAkocmV2aXNpb24gMjcyOTAyKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVkQXJndW1lbnRzLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTkgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC02Myw5ICs2Myw5IEBAIHB1YmxpYzoKICAgICAKICAgICAvLyBDcmVhdGVzIGFu
IGFyZ3VtZW50cyBvYmplY3QgYnkgY29weWluZyB0aGUgYXJndW1lbnRzIGZyb20gYSB3ZWxsLWRl
ZmluZWQgc3RhY2sgbG9jYXRpb24uCiAgICAgc3RhdGljIFNjb3BlZEFyZ3VtZW50cyogY3JlYXRl
QnlDb3B5aW5nRnJvbShWTSYsIFN0cnVjdHVyZSosIFJlZ2lzdGVyKiBhcmd1bWVudHNTdGFydCwg
dW5zaWduZWQgdG90YWxMZW5ndGgsIEpTRnVuY3Rpb24qIGNhbGxlZSwgU2NvcGVkQXJndW1lbnRz
VGFibGUqLCBKU0xleGljYWxFbnZpcm9ubWVudCopOwotICAgIAotICAgIHN0YXRpYyB2b2lkIHZp
c2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKLSAgICAKKworICAgIERFQ0xBUkVf
VklTSVRfQ0hJTERSRU47CisKICAgICB1aW50MzJfdCBpbnRlcm5hbExlbmd0aCgpIGNvbnN0CiAg
ICAgewogICAgICAgICByZXR1cm4gbV90b3RhbExlbmd0aDsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1NpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TaW1wbGVUeXBlZEFycmF5Q29udHJv
bGxlci5jcHAJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1NpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02
Miw3ICs2Miw3IEBAIGJvb2wgU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXI6OmlzQXRvbWkKICAg
ICByZXR1cm4gbV9hbGxvd0F0b21pY3NXYWl0OwogfQogCi1ib29sIFNpbXBsZVR5cGVkQXJyYXlD
b250cm9sbGVyOjpKU0FycmF5QnVmZmVyT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3Rz
KEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgSlNDOjpTbG90VmlzaXRv
ciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikKK2Jvb2wgU2ltcGxlVHlwZWRBcnJheUNv
bnRyb2xsZXI6OkpTQXJyYXlCdWZmZXJPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMo
SlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBKU0M6OkFic3RyYWN0U2xv
dFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCiB7CiAgICAgaWYgKFVOTElL
RUxZKHJlYXNvbikpCiAgICAgICAgICpyZWFzb24gPSAiSlNBcnJheUJ1ZmZlciBpcyBvcGFxdWUg
cm9vdCI7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TaW1wbGVUeXBlZEFy
cmF5Q29udHJvbGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1NpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyLmgJKHJldmlzaW9uIDI3MjkwMikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEz
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtNTgsNyArNTgsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIGNsYXNz
IEpTQXJyYXlCdWZmZXJPd25lciBmaW5hbCA6IHB1YmxpYyBXZWFrSGFuZGxlT3duZXIgewogICAg
IHB1YmxpYzoKLSAgICAgICAgYm9vbCBpc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6Okhh
bmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0LCBTbG90VmlzaXRvciYsIGNvbnN0IGNo
YXIqKiByZWFzb24pIGZpbmFsOworICAgICAgICBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJv
b3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIEFic3RyYWN0U2xv
dFZpc2l0b3ImLCBjb25zdCBjaGFyKiogcmVhc29uKSBmaW5hbDsKICAgICAgICAgdm9pZCBmaW5h
bGl6ZShKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0KSBmaW5hbDsKICAg
ICB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TbWFsbFN0cmluZ3Mu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NtYWxsU3Ry
aW5ncy5jcHAJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1NtYWxsU3RyaW5ncy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDEwIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDIxIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjYsNyArNjYsOCBAQCB2
b2lkIFNtYWxsU3RyaW5nczo6aW5pdGlhbGl6ZUNvbW1vblN0cmluCiAgICAgc2V0SXNJbml0aWFs
aXplZCh0cnVlKTsKIH0KIAotdm9pZCBTbWFsbFN0cmluZ3M6OnZpc2l0U3Ryb25nUmVmZXJlbmNl
cyhTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lk
IFNtYWxsU3RyaW5nczo6dmlzaXRTdHJvbmdSZWZlcmVuY2VzKFZpc2l0b3ImIHZpc2l0b3IpCiB7
CiAgICAgbV9uZWVkc1RvQmVWaXNpdGVkID0gZmFsc2U7CiAgICAgdmlzaXRvci5hcHBlbmRVbmJh
cnJpZXJlZChtX2VtcHR5U3RyaW5nKTsKQEAgLTg0LDYgKzg1LDkgQEAgdm9pZCBTbWFsbFN0cmlu
Z3M6OnZpc2l0U3Ryb25nUmVmZXJlbmNlcwogICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQo
bV9va1N0cmluZyk7CiB9CiAKK3RlbXBsYXRlIHZvaWQgU21hbGxTdHJpbmdzOjp2aXNpdFN0cm9u
Z1JlZmVyZW5jZXMoQWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBTbWFsbFN0
cmluZ3M6OnZpc2l0U3Ryb25nUmVmZXJlbmNlcyhTbG90VmlzaXRvciYpOworCiBTbWFsbFN0cmlu
Z3M6On5TbWFsbFN0cmluZ3MoKQogewogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU21hbGxTdHJpbmdzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU21hbGxTdHJpbmdzLmgJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1NtYWxsU3RyaW5ncy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOC0yMDE5IEFwcGxlIEluYy4gQWxsIFJp
Z2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDIxIEFwcGxlIEluYy4gQWxs
IFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDks
OSArNDksOSBAQCBjbGFzcyBTdHJpbmdJbXBsOwogCiBuYW1lc3BhY2UgSlNDIHsKIAorY2xhc3Mg
QWJzdHJhY3RTbG90VmlzaXRvcjsKIGNsYXNzIFZNOwogY2xhc3MgSlNTdHJpbmc7Ci1jbGFzcyBT
bG90VmlzaXRvcjsKIAogc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBtYXhTaW5nbGVDaGFyYWN0
ZXJTdHJpbmcgPSAweEZGOwogCkBAIC03OCw3ICs3OCw3IEBAIHB1YmxpYzoKICAgICBKU1N0cmlu
ZyoqIHNpbmdsZUNoYXJhY3RlclN0cmluZ3MoKSB7IHJldHVybiAmbV9zaW5nbGVDaGFyYWN0ZXJT
dHJpbmdzWzBdOyB9CiAKICAgICB2b2lkIGluaXRpYWxpemVDb21tb25TdHJpbmdzKFZNJik7Ci0g
ICAgdm9pZCB2aXNpdFN0cm9uZ1JlZmVyZW5jZXMoU2xvdFZpc2l0b3ImKTsKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIHZpc2l0U3Ryb25nUmVmZXJlbmNlcyhWaXNpdG9yJik7
CiAKICNkZWZpbmUgSlNDX0NPTU1PTl9TVFJJTkdTX0FDQ0VTU09SX0RFRklOSVRJT04obmFtZSkg
XAogICAgIEpTU3RyaW5nKiBuYW1lIyNTdHJpbmcoKSBjb25zdCAgICAgICAgICAgICAgICAgICBc
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TcGFyc2VBcnJheVZhbHVlTWFw
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TcGFyc2VB
cnJheVZhbHVlTWFwLmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvU3BhcnNlQXJyYXlWYWx1ZU1hcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0y
MTAsNyArMjEwLDggQEAgSlNWYWx1ZSBTcGFyc2VBcnJheUVudHJ5OjpnZXROb25TcGFyc2VNbwog
ICAgIHJldHVybiBCYXNlOjpnZXQoKTsKIH0KIAotdm9pZCBTcGFyc2VBcnJheVZhbHVlTWFwOjp2
aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0
ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBTcGFyc2VBcnJheVZhbHVlTWFwOjp2aXNpdENoaWxk
cmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgU3BhcnNlQXJy
YXlWYWx1ZU1hcCogdGhpc09iamVjdCA9IGpzQ2FzdDxTcGFyc2VBcnJheVZhbHVlTWFwKj4oY2Vs
bCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpA
QCAtMjIzLDUgKzIyNCw3IEBAIHZvaWQgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6dmlzaXRDaGlsZHJl
bigKICAgICB2aXNpdG9yLnJlcG9ydEV4dHJhTWVtb3J5VmlzaXRlZCh0aGlzT2JqZWN0LT5tX3Jl
cG9ydGVkQ2FwYWNpdHkgKiBzaXplb2YoTWFwOjpLZXlWYWx1ZVBhaXJUeXBlKSk7CiB9CiAKK0RF
RklORV9WSVNJVF9DSElMRFJFTihTcGFyc2VBcnJheVZhbHVlTWFwKTsKKwogfSAvLyBuYW1lc3Bh
Y2UgSlNDCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NwYXJzZUFycmF5
VmFsdWVNYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
cGFyc2VBcnJheVZhbHVlTWFwLmgJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1NwYXJzZUFycmF5VmFsdWVNYXAuaAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxOSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTExNSw3ICsxMTUsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgc3RhdGljIFN0cnVjdHVyZSogY3Jl
YXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlIHByb3RvdHlwZSk7CiAK
LSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7Cisg
ICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIGJvb2wgc3BhcnNlTW9kZSgpCiAgICAg
ewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RhY2tGcmFtZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RhY2tGcmFtZS5jcHAJ
KHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0YWNr
RnJhbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxNi0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTQxLDEzICsxNDEsNSBAQCBTdHJpbmcgU3Rh
Y2tGcmFtZTo6dG9TdHJpbmcoVk0mIHZtKSBjb25zCiAgICAgcmV0dXJuIHRyYWNlQnVpbGQudG9T
dHJpbmcoKS5pbXBsKCk7CiB9CiAKLXZvaWQgU3RhY2tGcmFtZTo6dmlzaXRDaGlsZHJlbihTbG90
VmlzaXRvciYgdmlzaXRvcikKLXsKLSAgICBpZiAobV9jYWxsZWUpCi0gICAgICAgIHZpc2l0b3Iu
YXBwZW5kKG1fY2FsbGVlKTsKLSAgICBpZiAobV9jb2RlQmxvY2spCi0gICAgICAgIHZpc2l0b3Iu
YXBwZW5kKG1fY29kZUJsb2NrKTsKLX0KLQogfSAvLyBuYW1lc3BhY2UgSlNDCiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0YWNrRnJhbWUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdGFja0ZyYW1lLmgJKHJldmlzaW9uIDI3Mjkw
MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0YWNrRnJhbWUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTI2LDYgKzI2LDcgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiSGVh
cC5oIgorI2luY2x1ZGUgIlNsb3RWaXNpdG9yTWFjcm9zLmgiCiAjaW5jbHVkZSAiVk0uaCIKICNp
bmNsdWRlICJXYXNtSW5kZXhPck5hbWUuaCIKICNpbmNsdWRlICJXcml0ZUJhcnJpZXIuaCIKQEAg
LTM1LDcgKzM2LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIENvZGVCbG9jazsKIGNsYXNz
IEpTT2JqZWN0OwotY2xhc3MgU2xvdFZpc2l0b3I7CiAKIGNsYXNzIFN0YWNrRnJhbWUgewogcHVi
bGljOgpAQCAtNTcsOCArNTcsMTYgQEAgcHVibGljOgogICAgICAgICBBU1NFUlQoaGFzQnl0ZWNv
ZGVJbmRleCgpKTsKICAgICAgICAgcmV0dXJuIG1fYnl0ZWNvZGVJbmRleDsKICAgICB9Ci0gICAg
Ci0gICAgdm9pZCB2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CisKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBWaXNpdG9yPgorICAgIHZvaWQgdmlzaXRDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9y
KQorICAgIHsKKyAgICAgICAgaWYgKG1fY2FsbGVlKQorICAgICAgICAgICAgdmlzaXRvci5hcHBl
bmQobV9jYWxsZWUpOworICAgICAgICBpZiAobV9jb2RlQmxvY2spCisgICAgICAgICAgICB2aXNp
dG9yLmFwcGVuZChtX2NvZGVCbG9jayk7CisgICAgfQorCiAgICAgYm9vbCBpc01hcmtlZChWTSYg
dm0pIGNvbnN0IHsgcmV0dXJuICghbV9jYWxsZWUgfHwgdm0uaGVhcC5pc01hcmtlZChtX2NhbGxl
ZS5nZXQoKSkpICYmICghbV9jb2RlQmxvY2sgfHwgdm0uaGVhcC5pc01hcmtlZChtX2NvZGVCbG9j
ay5nZXQoKSkpOyB9CiAKIHByaXZhdGU6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TdHJ1Y3R1cmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1N0cnVjdHVyZS5jcHAJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDIwIEFsZXhleSBTaHZheWthIDxzaHZh
aWthbGVzaEBnbWFpbC5jb20+LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMTI2OCw3ICsxMjY4LDgg
QEAgdm9pZCBTdHJ1Y3R1cmU6OmRpZFRyYW5zaXRpb25Gcm9tVGhpc1N0cgogICAgICAgICBtX3Ry
YW5zaXRpb25XYXRjaHBvaW50U2V0LmZpcmVBbGwodm0oKSwgU3RydWN0dXJlRmlyZURldGFpbCh0
aGlzKSk7CiB9CiAKLXZvaWQgU3RydWN0dXJlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwg
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBT
dHJ1Y3R1cmU6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRv
cikKIHsKICAgICBTdHJ1Y3R1cmUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8U3RydWN0dXJlKj4oY2Vs
bCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpA
QCAtMTI5MCwzMiArMTI5MSwzOCBAQCB2b2lkIFN0cnVjdHVyZTo6dmlzaXRDaGlsZHJlbihKU0Nl
bGwqIGNlCiAgICAgICAgIC8vIE5PVEU6IFRoaXMgY2FuIGludGVybGVhdmUgaW4gcGluKCksIGlu
IHdoaWNoIGNhc2UgaXQgbWF5IHNlZSBhIG51bGwgcHJvcGVydHkgdGFibGUuCiAgICAgICAgIC8v
IFRoYXQncyBmaW5lLCBiZWNhdXNlIHRoZW4gdGhlIGJhcnJpZXIgd2lsbCBmaXJlIGFuZCB3ZSB3
aWxsIHNjYW4gdGhpcyBhZ2Fpbi4KICAgICAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+
bV9wcm9wZXJ0eVRhYmxlVW5zYWZlKTsKLSAgICB9IGVsc2UgaWYgKHZpc2l0b3IuaXNBbmFseXpp
bmdIZWFwKCkpCisgICAgfSBlbHNlIGlmICh2aXNpdG9yLnZtKCkuaXNBbmFseXppbmdIZWFwKCkp
CiAgICAgICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fcHJvcGVydHlUYWJsZVVuc2Fm
ZSk7CiAgICAgZWxzZSBpZiAodGhpc09iamVjdC0+bV9wcm9wZXJ0eVRhYmxlVW5zYWZlKQogICAg
ICAgICB0aGlzT2JqZWN0LT5tX3Byb3BlcnR5VGFibGVVbnNhZmUuY2xlYXIoKTsKIH0KIAotYm9v
bCBTdHJ1Y3R1cmU6OmlzQ2hlYXBEdXJpbmdHQyhWTSYgdm0pCitERUZJTkVfVklTSVRfQ0hJTERS
RU4oU3RydWN0dXJlKTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK0FMV0FZU19JTkxJ
TkUgYm9vbCBTdHJ1Y3R1cmU6OmlzQ2hlYXBEdXJpbmdHQyhWaXNpdG9yJiB2aXNpdG9yKQogewog
ICAgIC8vIEZJWE1FOiBXZSBjb3VsZCBtYWtlIHRoaXMgZXZlbiBzYWZlciBieSByZXR1cm5pbmcg
ZmFsc2UgaWYgdGhpcyBzdHJ1Y3R1cmUncyBwcm9wZXJ0eSB0YWJsZQogICAgIC8vIGhhcyBhbnkg
bGFyZ2UgcHJvcGVydHkgbmFtZXMuCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE1NzMzNAogICAgIAotICAgIHJldHVybiAoIW1fZ2xvYmFsT2JqZWN0IHx8
IHZtLmhlYXAuaXNNYXJrZWQobV9nbG9iYWxPYmplY3QuZ2V0KCkpKQotICAgICAgICAmJiAoaGFz
UG9seVByb3RvKCkgfHwgIXN0b3JlZFByb3RvdHlwZU9iamVjdCgpIHx8IHZtLmhlYXAuaXNNYXJr
ZWQoc3RvcmVkUHJvdG90eXBlT2JqZWN0KCkpKTsKKyAgICByZXR1cm4gKCFtX2dsb2JhbE9iamVj
dCB8fCB2aXNpdG9yLmlzTWFya2VkKG1fZ2xvYmFsT2JqZWN0LmdldCgpKSkKKyAgICAgICAgJiYg
KGhhc1BvbHlQcm90bygpIHx8ICFzdG9yZWRQcm90b3R5cGVPYmplY3QoKSB8fCB2aXNpdG9yLmlz
TWFya2VkKHN0b3JlZFByb3RvdHlwZU9iamVjdCgpKSk7CiB9CiAKLWJvb2wgU3RydWN0dXJlOjpt
YXJrSWZDaGVhcChTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0
b3I+Citib29sIFN0cnVjdHVyZTo6bWFya0lmQ2hlYXAoVmlzaXRvciYgdmlzaXRvcikKIHsKLSAg
ICBWTSYgdm0gPSB2aXNpdG9yLnZtKCk7Ci0gICAgaWYgKCFpc0NoZWFwRHVyaW5nR0Modm0pKQot
ICAgICAgICByZXR1cm4gdm0uaGVhcC5pc01hcmtlZCh0aGlzKTsKLSAgICAKKyAgICBpZiAoIWlz
Q2hlYXBEdXJpbmdHQyh2aXNpdG9yKSkKKyAgICAgICAgcmV0dXJuIHZpc2l0b3IuaXNNYXJrZWQo
dGhpcyk7CisKICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKHRoaXMpOwogICAgIHJldHVy
biB0cnVlOwogfQogCit0ZW1wbGF0ZSBib29sIFN0cnVjdHVyZTo6bWFya0lmQ2hlYXAoQWJzdHJh
Y3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgYm9vbCBTdHJ1Y3R1cmU6Om1hcmtJZkNoZWFwKFNs
b3RWaXNpdG9yJik7CisKIFJlZjxTdHJ1Y3R1cmVTaGFwZT4gU3RydWN0dXJlOjp0b1N0cnVjdHVy
ZVNoYXBlKEpTVmFsdWUgdmFsdWUsIGJvb2wmIHNhd1BvbHlQcm90b1N0cnVjdHVyZSkKIHsKICAg
ICBSZWY8U3RydWN0dXJlU2hhcGU+IGJhc2VTaGFwZSA9IFN0cnVjdHVyZVNoYXBlOjpjcmVhdGUo
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCShyZXZp
c2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUu
aAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDgtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDgtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTYwLDcgKzYwLDYgQEAgY2xhc3MgUHJvcGVydHlOYW1lQXJy
YXlEYXRhOwogY2xhc3MgUHJvcGVydHlUYWJsZTsKIGNsYXNzIFN0cnVjdHVyZUNoYWluOwogY2xh
c3MgU3RydWN0dXJlU2hhcGU7Ci1jbGFzcyBTbG90VmlzaXRvcjsKIGNsYXNzIEpTU3RyaW5nOwog
c3RydWN0IER1bXBDb250ZXh0Owogc3RydWN0IEhhc2hUYWJsZTsKQEAgLTMxMCw3ICszMDksNyBA
QCBwdWJsaWM6CiAgICAgSlNWYWx1ZSBwcm90b3R5cGVGb3JMb29rdXAoSlNHbG9iYWxPYmplY3Qq
LCBKU0NlbGwqIGJhc2UpIGNvbnN0OwogICAgIFN0cnVjdHVyZUNoYWluKiBwcm90b3R5cGVDaGFp
bihWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNPYmplY3QqIGJhc2UpIGNvbnN0OwogICAgIFN0cnVj
dHVyZUNoYWluKiBwcm90b3R5cGVDaGFpbihKU0dsb2JhbE9iamVjdCosIEpTT2JqZWN0KiBiYXNl
KSBjb25zdDsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNp
dG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKICAgICAKICAgICAvLyBBIFN0cnVj
dHVyZSBpcyBjaGVhcCB0byBtYXJrIGR1cmluZyBHQyBpZiBkb2luZyBzbyB3b3VsZCBvbmx5IGFk
ZCBhIHNtYWxsIGFuZCBib3VuZGVkIGFtb3VudAogICAgIC8vIHRvIG91ciBoZWFwIGZvb3Rwcmlu
dC4gRm9yIGV4YW1wbGUsIGlmIHRoZSBzdHJ1Y3R1cmUgcmVmZXJzIHRvIGEgZ2xvYmFsIG9iamVj
dCB0aGF0IGlzIG5vdApAQCAtMzE4LDEwICszMTcsMTAgQEAgcHVibGljOgogICAgIC8vIGluY3Jl
YXNlIGluIGZvb3RwcmludCBiZWNhdXNlIG5vIG90aGVyIG9iamVjdCByZWZlcnMgdG8gdGhhdCBn
bG9iYWwgb2JqZWN0LiBUaGlzIG1ldGhvZAogICAgIC8vIHJldHVybnMgdHJ1ZSBpZiBhbGwgdXNl
ci1jb250cm9sbGVkIChhbmQgaGVuY2UgdW5ib3VuZGVkIGluIHNpemUpIG9iamVjdHMgcmVmZXJl
bmNlZCBmcm9tIHRoZQogICAgIC8vIFN0cnVjdHVyZSBhcmUgYWxyZWFkeSBtYXJrZWQuCi0gICAg
Ym9vbCBpc0NoZWFwRHVyaW5nR0MoVk0mKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
PiBib29sIGlzQ2hlYXBEdXJpbmdHQyhWaXNpdG9yJik7CiAgICAgCiAgICAgLy8gUmV0dXJucyB0
cnVlIGlmIHRoaXMgc3RydWN0dXJlIGlzIG5vdyBtYXJrZWQuCi0gICAgYm9vbCBtYXJrSWZDaGVh
cChTbG90VmlzaXRvciYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IGJvb2wgbWFy
a0lmQ2hlYXAoVmlzaXRvciYpOwogICAgIAogICAgIGJvb2wgaGFzUmFyZURhdGEoKSBjb25zdAog
ICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUNoYWlu
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1
cmVDaGFpbi5jcHAJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1N0cnVjdHVyZUNoYWluLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02Niw3ICs2Niw4IEBAIHZv
aWQgU3RydWN0dXJlQ2hhaW46OmZpbmlzaENyZWF0aW9uKFZNJiAKICAgICB9CiB9CiAKLXZvaWQg
U3RydWN0dXJlQ2hhaW46OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYg
dmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFN0cnVjdHVyZUNoYWlu
Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAg
ICAgU3RydWN0dXJlQ2hhaW4qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8U3RydWN0dXJlQ2hhaW4qPihj
ZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7
CkBAIC04MCw0ICs4MSw2IEBAIHZvaWQgU3RydWN0dXJlQ2hhaW46OnZpc2l0Q2hpbGRyZW4oSlND
ZWwKICAgICB9CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihTdHJ1Y3R1cmVDaGFpbik7CisK
IH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U3RydWN0dXJlQ2hhaW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TdHJ1Y3R1cmVDaGFpbi5oCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVDaGFpbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOC0yMDE5IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTEs
NyArNTEsNyBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgU3RydWN0dXJlQ2hhaW4qIGNyZWF0ZShW
TSYsIEpTT2JqZWN0Kik7CiAgICAgU3RydWN0dXJlSUQqIGhlYWQoKSB7IHJldHVybiBtX3ZlY3Rv
ci5nZXQoKTsgfQotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZp
c2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgc3RhdGljIFN0cnVj
dHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgSlNWYWx1ZSBwcm90b3R5cGUpCiAgICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU3RydWN0dXJlUmFyZURhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZVJhcmVEYXRhLmNwcAkocmV2aXNpb24gMjcyOTAy
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlUmFyZURhdGEuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
My0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtNjcsNyArNjcsOCBAQCBTdHJ1Y3R1cmVSYXJlRGF0YTo6U3Ry
dWN0dXJlUmFyZURhdGEoVk0mCiAgICAgICAgIG1fcHJldmlvdXMuc2V0KHZtLCB0aGlzLCBwcmV2
aW91cyk7CiB9CiAKLXZvaWQgU3RydWN0dXJlUmFyZURhdGE6OnZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+
Cit2b2lkIFN0cnVjdHVyZVJhcmVEYXRhOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGws
IFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgU3RydWN0dXJlUmFyZURhdGEqIHRoaXNPYmplY3Qg
PSBqc0Nhc3Q8U3RydWN0dXJlUmFyZURhdGEqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNU
X0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC04Niw2ICs4Nyw4IEBAIHZvaWQgU3Ry
dWN0dXJlUmFyZURhdGE6OnZpc2l0Q2hpbGRyZW4oSlMKICAgICB9CiB9CiAKK0RFRklORV9WSVNJ
VF9DSElMRFJFTihTdHJ1Y3R1cmVSYXJlRGF0YSk7CisKIC8vIC0tLS0tLS0tLS0tIENhY2hlZCBz
cGVjaWFsIHByb3BlcnRpZXMgaGVscGVyIHdhdGNocG9pbnQgY2xhc3NlcyAtLS0tLS0tLS0tLQog
CiBjbGFzcyBDYWNoZWRTcGVjaWFsUHJvcGVydHlBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1
ZVdhdGNocG9pbnQgZmluYWwgOiBwdWJsaWMgQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVX
YXRjaHBvaW50QmFzZSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1
Y3R1cmVSYXJlRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1N0cnVjdHVyZVJhcmVEYXRhLmgJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZVJhcmVEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjAgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC02OCw3ICs2OCw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNE
ZXN0cnVjdGlvbiA9IHRydWU7CiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKIAot
ICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAg
ICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRl
U3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlIHByb3RvdHlwZSk7CiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJvbFRhYmxlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TeW1ib2xUYWJsZS5jcHAJKHJl
dmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJvbFRh
YmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTItMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTItMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTkyLDcgKzkyLDggQEAgdm9pZCBTeW1ib2xUYWJs
ZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsK
IH0KIAotdm9pZCBTeW1ib2xUYWJsZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIHRoaXNDZWxsLCBT
bG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFN5
bWJvbFRhYmxlOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIHRoaXNDZWxsLCBWaXNpdG9yJiB2
aXNpdG9yKQogewogICAgIFN5bWJvbFRhYmxlKiB0aGlzU3ltYm9sVGFibGUgPSBqc0Nhc3Q8U3lt
Ym9sVGFibGUqPih0aGlzQ2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlz
U3ltYm9sVGFibGUsIGluZm8oKSk7CkBAIC0xMDgsNiArMTA5LDggQEAgdm9pZCBTeW1ib2xUYWJs
ZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIAogICAgIHRoaXNTeW1ib2xUYWJsZS0+bV9sb2NhbFRv
RW50cnkgPSBudWxscHRyOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oU3ltYm9sVGFibGUp
OworCiBjb25zdCBTeW1ib2xUYWJsZTo6TG9jYWxUb0VudHJ5VmVjJiBTeW1ib2xUYWJsZTo6bG9j
YWxUb0VudHJ5KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYpCiB7CiAgICAgaWYgKFVOTElLRUxZ
KCFtX2xvY2FsVG9FbnRyeSkpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1N5bWJvbFRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU3ltYm9sVGFibGUuaAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvU3ltYm9sVGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTczMyw3ICs3MzMs
NyBAQCBwdWJsaWM6CiAgICAgICAgIG1fc2luZ2xldG9uLm5vdGlmeVdyaXRlKHZtLCB0aGlzLCBz
Y29wZSwgcmVhc29uKTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpT
Q2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAg
IERFQ0xBUkVfRVhQT1JUX0lORk87CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1R5cGVQcm9maWxlckxvZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvVHlwZVByb2ZpbGVyTG9nLmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZVByb2ZpbGVyTG9nLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxOSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTEyNCw3ICsxMjQsNyBAQCB2b2lkIFR5cGVQcm9maWxlckxvZzo6cHJvY2Vzc0xv
Z0VudHJpZXMoCiAgICAgfQogfQogCi12b2lkIFR5cGVQcm9maWxlckxvZzo6dmlzaXQoU2xvdFZp
c2l0b3ImIHZpc2l0b3IpCit2b2lkIFR5cGVQcm9maWxlckxvZzo6dmlzaXQoQWJzdHJhY3RTbG90
VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBmb3IgKExvZ0VudHJ5KiBlbnRyeSA9IG1fbG9nU3Rh
cnRQdHI7IGVudHJ5ICE9IG1fY3VycmVudExvZ0VudHJ5UHRyOyArK2VudHJ5KSB7CiAgICAgICAg
IHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQoZW50cnktPnZhbHVlKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVQcm9maWxlckxvZy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVQcm9maWxlckxvZy5oCShyZXZpc2lvbiAy
NzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlUHJvZmlsZXJMb2cu
aAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0
LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC01OSw3ICs1OSw3IEBAIHB1YmxpYzoKICAgICBKU19FWFBPUlRfUFJJ
VkFURSB2b2lkIHByb2Nlc3NMb2dFbnRyaWVzKFZNJiwgY29uc3QgU3RyaW5nJik7CiAgICAgTG9n
RW50cnkqIGxvZ0VuZFB0cigpIGNvbnN0IHsgcmV0dXJuIG1fbG9nRW5kUHRyOyB9CiAKLSAgICB2
b2lkIHZpc2l0KFNsb3RWaXNpdG9yJik7CisgICAgdm9pZCB2aXNpdChBYnN0cmFjdFNsb3RWaXNp
dG9yJik7CiAKICAgICBzdGF0aWMgcHRyZGlmZl90IGxvZ1N0YXJ0T2Zmc2V0KCkgeyByZXR1cm4g
T0JKRUNUX09GRlNFVE9GKFR5cGVQcm9maWxlckxvZywgbV9sb2dTdGFydFB0cik7IH0KICAgICBz
dGF0aWMgcHRyZGlmZl90IGN1cnJlbnRMb2dFbnRyeU9mZnNldCgpIHsgcmV0dXJuIE9CSkVDVF9P
RkZTRVRPRihUeXBlUHJvZmlsZXJMb2csIG1fY3VycmVudExvZ0VudHJ5UHRyKTsgfQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOC0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTIxLDYgKzEy
MSw3IEBAIGNsYXNzIEZhc3RNYWxsb2NBbGlnbmVkTWVtb3J5QWxsb2NhdG9yOwogY2xhc3MgR2ln
YWNhZ2VBbGlnbmVkTWVtb3J5QWxsb2NhdG9yOwogY2xhc3MgSGFuZGxlU3RhY2s7CiBjbGFzcyBI
YXNPd25Qcm9wZXJ0eUNhY2hlOworY2xhc3MgSGVhcEFuYWx5emVyOwogY2xhc3MgSGVhcFByb2Zp
bGVyOwogY2xhc3MgSWRlbnRpZmllcjsKIGNsYXNzIEludGVycHJldGVyOwpAQCAtMzA5LDYgKzMx
MCwxMCBAQCBwdWJsaWM6CiAgICAgSGVhcFByb2ZpbGVyKiBoZWFwUHJvZmlsZXIoKSBjb25zdCB7
IHJldHVybiBtX2hlYXBQcm9maWxlci5nZXQoKTsgfQogICAgIEpTX0VYUE9SVF9QUklWQVRFIEhl
YXBQcm9maWxlciYgZW5zdXJlSGVhcFByb2ZpbGVyKCk7CiAKKyAgICBib29sIGlzQW5hbHl6aW5n
SGVhcCgpIGNvbnN0IHsgcmV0dXJuIG1fYWN0aXZlSGVhcEFuYWx5emVyOyB9CisgICAgSGVhcEFu
YWx5emVyKiBhY3RpdmVIZWFwQW5hbHl6ZXIoKSBjb25zdCB7IHJldHVybiBtX2FjdGl2ZUhlYXBB
bmFseXplcjsgfQorICAgIHZvaWQgc2V0QWN0aXZlSGVhcEFuYWx5emVyKEhlYXBBbmFseXplciog
YW5hbHl6ZXIpIHsgbV9hY3RpdmVIZWFwQW5hbHl6ZXIgPSBhbmFseXplcjsgfQorCiAjaWYgRU5B
QkxFKFNBTVBMSU5HX1BST0ZJTEVSKQogICAgIFNhbXBsaW5nUHJvZmlsZXIqIHNhbXBsaW5nUHJv
ZmlsZXIoKSB7IHJldHVybiBtX3NhbXBsaW5nUHJvZmlsZXIuZ2V0KCk7IH0KICAgICBKU19FWFBP
UlRfUFJJVkFURSBTYW1wbGluZ1Byb2ZpbGVyJiBlbnN1cmVTYW1wbGluZ1Byb2ZpbGVyKFJlZjxT
dG9wd2F0Y2g+JiYpOwpAQCAtMTE5NCw5ICsxMTk5LDEwIEBAIHB1YmxpYzoKICAgICBib29sIGRp
ZEVudGVyVk0geyBmYWxzZSB9OwogcHJpdmF0ZToKICAgICBib29sIG1fZmFpbE5leHROZXdDb2Rl
QmxvY2sgeyBmYWxzZSB9OwotICAgIERlbGV0ZVByb3BlcnR5TW9kZSBtX2RlbGV0ZVByb3BlcnR5
TW9kZSB7IERlbGV0ZVByb3BlcnR5TW9kZTo6RGVmYXVsdCB9OwogICAgIGJvb2wgbV9nbG9iYWxD
b25zdFJlZGVjbGFyYXRpb25TaG91bGRUaHJvdyB7IHRydWUgfTsKICAgICBib29sIG1fc2hvdWxk
QnVpbGRQQ1RvQ29kZU9yaWdpbk1hcHBpbmcgeyBmYWxzZSB9OworICAgIERlbGV0ZVByb3BlcnR5
TW9kZSBtX2RlbGV0ZVByb3BlcnR5TW9kZSB7IERlbGV0ZVByb3BlcnR5TW9kZTo6RGVmYXVsdCB9
OworICAgIEhlYXBBbmFseXplciogbV9hY3RpdmVIZWFwQW5hbHl6ZXIgeyBudWxscHRyIH07CiAg
ICAgc3RkOjp1bmlxdWVfcHRyPENvZGVDYWNoZT4gbV9jb2RlQ2FjaGU7CiAgICAgc3RkOjp1bmlx
dWVfcHRyPEludGxDYWNoZT4gbV9pbnRsQ2FjaGU7CiAgICAgc3RkOjp1bmlxdWVfcHRyPEJ1aWx0
aW5FeGVjdXRhYmxlcz4gbV9idWlsdGluRXhlY3V0YWJsZXM7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9XZWFrTWFwSW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha01hcEltcGwuY3BwCShyZXZpc2lvbiAyNzI5MDIpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9XZWFrTWFwSW1wbC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIxIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAxNyBZdXN1a2Ug
U3V6dWtpIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMzks
OCArMzksOSBAQCB2b2lkIFdlYWtNYXBJbXBsPFdlYWtNYXBCdWNrZXQ+OjpkZXN0cm95CiAgICAg
c3RhdGljX2Nhc3Q8V2Vha01hcEltcGwqPihjZWxsKS0+fldlYWtNYXBJbXBsKCk7CiB9CiAKLXRl
bXBsYXRlIDx0eXBlbmFtZSBXZWFrTWFwQnVja2V0Pgotdm9pZCBXZWFrTWFwSW1wbDxXZWFrTWFw
QnVja2V0Pjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9y
KQordGVtcGxhdGU8dHlwZW5hbWUgV2Vha01hcEJ1Y2tldD4KK3RlbXBsYXRlPHR5cGVuYW1lIFZp
c2l0b3I+Cit2b2lkIFdlYWtNYXBJbXBsPFdlYWtNYXBCdWNrZXQ+Ojp2aXNpdENoaWxkcmVuSW1w
bChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgV2Vha01hcEltcGwqIHRo
aXNPYmplY3QgPSBqc0Nhc3Q8V2Vha01hcEltcGwqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JK
RUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC00OCw2ICs0OSw4IEBAIHZvaWQg
V2Vha01hcEltcGw8V2Vha01hcEJ1Y2tldD46OnZpc2l0Q2gKICAgICB2aXNpdG9yLnJlcG9ydEV4
dHJhTWVtb3J5VmlzaXRlZCh0aGlzT2JqZWN0LT5tX2NhcGFjaXR5ICogc2l6ZW9mKFdlYWtNYXBC
dWNrZXQpKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOX1dJVEhfTU9ESUZJRVIodGVtcGxh
dGU8dHlwZW5hbWUgV2Vha01hcEJ1Y2tldD4sIFdlYWtNYXBJbXBsPFdlYWtNYXBCdWNrZXQ+KTsK
KwogdGVtcGxhdGUgPHR5cGVuYW1lIFdlYWtNYXBCdWNrZXQ+CiBzaXplX3QgV2Vha01hcEltcGw8
V2Vha01hcEJ1Y2tldD46OmVzdGltYXRlZFNpemUoSlNDZWxsKiBjZWxsLCBWTSYgdm0pCiB7CkBA
IC01NiwxNSArNTksMjUgQEAgc2l6ZV90IFdlYWtNYXBJbXBsPFdlYWtNYXBCdWNrZXQ+Ojplc3Rp
bQogfQogCiB0ZW1wbGF0ZSA8Pgotdm9pZCBXZWFrTWFwSW1wbDxXZWFrTWFwQnVja2V0PFdlYWtN
YXBCdWNrZXREYXRhS2V5Pj46OnZpc2l0T3V0cHV0Q29uc3RyYWludHMoSlNDZWxsKiwgU2xvdFZp
c2l0b3ImKQordGVtcGxhdGUgPD4KK3ZvaWQgV2Vha01hcEltcGw8V2Vha01hcEJ1Y2tldDxXZWFr
TWFwQnVja2V0RGF0YUtleT4+Ojp2aXNpdE91dHB1dENvbnN0cmFpbnRzKEpTQ2VsbCosIEFic3Ry
YWN0U2xvdFZpc2l0b3ImKQogewogICAgIC8vIE9ubHkgSlNXZWFrTWFwIG5lZWRzIHRvIGhhcnZl
c3QgdmFsdWUgcmVmZXJlbmNlcwogfQogCiB0ZW1wbGF0ZSA8Pgotdm9pZCBXZWFrTWFwSW1wbDxX
ZWFrTWFwQnVja2V0PFdlYWtNYXBCdWNrZXREYXRhS2V5VmFsdWU+Pjo6dmlzaXRPdXRwdXRDb25z
dHJhaW50cyhKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGUgPD4K
K3ZvaWQgV2Vha01hcEltcGw8V2Vha01hcEJ1Y2tldDxXZWFrTWFwQnVja2V0RGF0YUtleT4+Ojp2
aXNpdE91dHB1dENvbnN0cmFpbnRzKEpTQ2VsbCosIFNsb3RWaXNpdG9yJikKIHsKLSAgICBWTSYg
dm0gPSB2aXNpdG9yLnZtKCk7CisgICAgLy8gT25seSBKU1dlYWtNYXAgbmVlZHMgdG8gaGFydmVz
dCB2YWx1ZSByZWZlcmVuY2VzCit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEJ1Y2tldFR5cGU+Cit0
ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgorQUxXQVlTX0lOTElORSB2b2lkIFdlYWtNYXBJbXBs
PEJ1Y2tldFR5cGU+Ojp2aXNpdE91dHB1dENvbnN0cmFpbnRzKEpTQ2VsbCogY2VsbCwgVmlzaXRv
ciYgdmlzaXRvcikKK3sKKyAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZTxCdWNrZXRUeXBl
LCBXZWFrTWFwQnVja2V0PFdlYWtNYXBCdWNrZXREYXRhS2V5VmFsdWU+Pjo6dmFsdWUpOworCiAg
ICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxXZWFrTWFwSW1wbCo+KGNlbGwpOwogICAgIGF1
dG8gbG9ja2VyID0gaG9sZExvY2sodGhpc09iamVjdC0+Y2VsbExvY2soKSk7CiAgICAgYXV0byog
YnVmZmVyID0gdGhpc09iamVjdC0+YnVmZmVyKCk7CkBAIC03MiwxMiArODUsMTUgQEAgdm9pZCBX
ZWFrTWFwSW1wbDxXZWFrTWFwQnVja2V0PFdlYWtNYXBCdQogICAgICAgICBhdXRvKiBidWNrZXQg
PSBidWZmZXIgKyBpbmRleDsKICAgICAgICAgaWYgKGJ1Y2tldC0+aXNFbXB0eSgpIHx8IGJ1Y2tl
dC0+aXNEZWxldGVkKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgaWYgKCF2bS5o
ZWFwLmlzTWFya2VkKGJ1Y2tldC0+a2V5KCkpKQorICAgICAgICBpZiAoIXZpc2l0b3IuaXNNYXJr
ZWQoYnVja2V0LT5rZXkoKSkpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgYnVja2V0
LT52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKICAgICB9CiB9CiAKK3RlbXBsYXRlIHZvaWQgV2Vh
a01hcEltcGw8V2Vha01hcEJ1Y2tldDxXZWFrTWFwQnVja2V0RGF0YUtleVZhbHVlPj46OnZpc2l0
T3V0cHV0Q29uc3RyYWludHMoSlNDZWxsKiwgQWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxh
dGUgdm9pZCBXZWFrTWFwSW1wbDxXZWFrTWFwQnVja2V0PFdlYWtNYXBCdWNrZXREYXRhS2V5VmFs
dWU+Pjo6dmlzaXRPdXRwdXRDb25zdHJhaW50cyhKU0NlbGwqLCBTbG90VmlzaXRvciYpOworCiB0
ZW1wbGF0ZSA8dHlwZW5hbWUgV2Vha01hcEJ1Y2tldD4KIHRlbXBsYXRlPHR5cGVuYW1lIEFwcGVu
ZGVyPgogdm9pZCBXZWFrTWFwSW1wbDxXZWFrTWFwQnVja2V0Pjo6dGFrZVNuYXBzaG90SW50ZXJu
YWwodW5zaWduZWQgbGltaXQsIEFwcGVuZGVyIGFwcGVuZGVyKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvV2Vha01hcEltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9XZWFrTWFwSW1wbC5oCShyZXZpc2lvbiAyNzI5MDIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9XZWFrTWFwSW1wbC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIxIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAxNyBZdXN1a2Ug
U3V6dWtpIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMTQ1
LDcgKzE0NSw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVCA9
IERhdGE+Ci0gICAgQUxXQVlTX0lOTElORSB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6Omlz
X3NhbWU8VCwgV2Vha01hcEJ1Y2tldERhdGFLZXlWYWx1ZT46OnZhbHVlPjo6dHlwZSB2aXNpdEFn
Z3JlZ2F0ZShTbG90VmlzaXRvciYgdmlzaXRvcikKKyAgICBBTFdBWVNfSU5MSU5FIHR5cGVuYW1l
IHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTxULCBXZWFrTWFwQnVja2V0RGF0YUtleVZhbHVl
Pjo6dmFsdWU+Ojp0eXBlIHZpc2l0QWdncmVnYXRlKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0
b3IpCiAgICAgewogICAgICAgICB2aXNpdG9yLmFwcGVuZChtX2RhdGEudmFsdWUpOwogICAgIH0K
QEAgLTIwMiw3ICsyMDIsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5l
ZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOwogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7
CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7
CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIHN0YXRpYyBzaXplX3QgZXN0aW1h
dGVkU2l6ZShKU0NlbGwqLCBWTSYpOwogCkBAIC0zMTEsMTAgKzMxMSwxMyBAQCBwdWJsaWM6CiAg
ICAgICAgIHJldHVybiB2bS53ZWFrU2V0U3BhY2U8bW9kZT4oKTsKICAgICB9CiAKLSAgICBzdGF0
aWMgdm9pZCB2aXNpdE91dHB1dENvbnN0cmFpbnRzKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7Cisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gc3RhdGljIHZvaWQgdmlzaXRPdXRwdXRDb25z
dHJhaW50cyhKU0NlbGwqLCBWaXNpdG9yJik7CiAgICAgdm9pZCBmaW5hbGl6ZVVuY29uZGl0aW9u
YWxseShWTSYpOwogCiBwcml2YXRlOgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cisg
ICAgQUxXQVlTX0lOTElORSBzdGF0aWMgdm9pZCB2aXNpdE91dHB1dENvbnN0cmFpbnRzRm9yRGF0
YUtleVZhbHVlKEpTQ2VsbCosIFZpc2l0b3ImKTsKKwogICAgIEFMV0FZU19JTkxJTkUgV2Vha01h
cEJ1Y2tldFR5cGUqIGZpbmRCdWNrZXQoSlNPYmplY3QqIGtleSkKICAgICB7CiAgICAgICAgIHJl
dHVybiBmaW5kQnVja2V0KGtleSwganNXZWFrTWFwSGFzaChrZXkpKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS90b29scy9KU0RvbGxhclZNLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvdG9vbHMvSlNEb2xsYXJWTS5jcHAJKHJldmlzaW9uIDI3MjkwMikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9KU0RvbGxhclZNLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTIyNCwxNCArMjI0LDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBmaW5pc2hDcmVhdGlv
bihWTSYsIFJvb3QqKTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBj
ZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKLSAgICB7Ci0gICAgICAgIERvbGxhclZNQXNzZXJ0
U2NvcGUgYXNzZXJ0U2NvcGU7Ci0gICAgICAgIEVsZW1lbnQqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8
RWxlbWVudCo+KGNlbGwpOwotICAgICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNP
YmplY3QsIGluZm8oKSk7Ci0gICAgICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwg
dmlzaXRvcik7Ci0gICAgICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fcm9vdCk7Ci0g
ICAgfQorICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBzdGF0aWMgRWxlbWVudEhh
bmRsZU93bmVyKiBoYW5kbGVPd25lcigpOwogCkBAIC0yNDcsMTAgKzI0MCwyMiBAQCBwcml2YXRl
OgogICAgIFdyaXRlQmFycmllcjxSb290PiBtX3Jvb3Q7CiB9OwogCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBWaXNpdG9yPgordm9pZCBFbGVtZW50Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGws
IFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgRG9sbGFyVk1Bc3NlcnRTY29wZSBhc3NlcnRTY29w
ZTsKKyAgICBFbGVtZW50KiB0aGlzT2JqZWN0ID0ganNDYXN0PEVsZW1lbnQqPihjZWxsKTsKKyAg
ICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CisgICAgQmFz
ZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKKyAgICB2aXNpdG9yLmFwcGVu
ZCh0aGlzT2JqZWN0LT5tX3Jvb3QpOworfQorCitERUZJTkVfVklTSVRfQ0hJTERSRU4oRWxlbWVu
dCk7CisKIGNsYXNzIEVsZW1lbnRIYW5kbGVPd25lciBmaW5hbCA6IHB1YmxpYyBXZWFrSGFuZGxl
T3duZXIgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIGJvb2wg
aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5k
bGUsIHZvaWQqLCBTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikgZmlu
YWwKKyAgICBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6
VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvciwgY29u
c3QgY2hhcioqIHJlYXNvbikgZmluYWwKICAgICB7CiAgICAgICAgIERvbGxhclZNQXNzZXJ0U2Nv
cGUgYXNzZXJ0U2NvcGU7CiAgICAgICAgIGlmIChVTkxJS0VMWShyZWFzb24pKQpAQCAtMzA0LDE4
ICszMDksMjMgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0s
IGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVG
bGFncyksIGluZm8oKSk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihK
U0NlbGwqIHRoaXNPYmplY3QsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQotICAgIHsKLSAgICAgICAg
RG9sbGFyVk1Bc3NlcnRTY29wZSBhc3NlcnRTY29wZTsKLSAgICAgICAgQVNTRVJUX0dDX09CSkVD
VF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwotICAgICAgICBCYXNlOjp2aXNpdENoaWxk
cmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwotICAgICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qo
dGhpc09iamVjdCk7Ci0gICAgfQorICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKIHByaXZh
dGU6CiAgICAgV2VhazxFbGVtZW50PiBtX2VsZW1lbnQ7CiB9OwogCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBWaXNpdG9yPgordm9pZCBSb290Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIHRoaXNPYmpl
Y3QsIFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgRG9sbGFyVk1Bc3NlcnRTY29wZSBhc3NlcnRT
Y29wZTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7
CisgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKKyAgICB2aXNp
dG9yLmFkZE9wYXF1ZVJvb3QodGhpc09iamVjdCk7Cit9CisKK0RFRklORV9WSVNJVF9DSElMRFJF
TihSb290KTsKKwogY2xhc3MgU2ltcGxlT2JqZWN0IDogcHVibGljIEpTTm9uRmluYWxPYmplY3Qg
ewogcHVibGljOgogICAgIFNpbXBsZU9iamVjdChWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJl
KQpAQCAtMzQwLDE0ICszNTAsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBzaW1wbGVPYmpl
Y3Q7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGws
IFNsb3RWaXNpdG9yJiB2aXNpdG9yKQotICAgIHsKLSAgICAgICAgRG9sbGFyVk1Bc3NlcnRTY29w
ZSBhc3NlcnRTY29wZTsKLSAgICAgICAgU2ltcGxlT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0
PFNpbXBsZU9iamVjdCo+KGNlbGwpOwotICAgICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRT
KHRoaXNPYmplY3QsIGluZm8oKSk7Ci0gICAgICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09i
amVjdCwgdmlzaXRvcik7Ci0gICAgICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1faGlk
ZGVuVmFsdWUpOwotICAgIH0KKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgc3Rh
dGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCiAgICAgewpAQCAtMzgwLDYgKzM4MywxOCBA
QCBwcml2YXRlOgogICAgIFdyaXRlQmFycmllcjxKU0M6OlVua25vd24+IG1faGlkZGVuVmFsdWU7
CiB9OwogCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBTaW1wbGVPYmplY3Q6OnZp
c2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBE
b2xsYXJWTUFzc2VydFNjb3BlIGFzc2VydFNjb3BlOworICAgIFNpbXBsZU9iamVjdCogdGhpc09i
amVjdCA9IGpzQ2FzdDxTaW1wbGVPYmplY3QqPihjZWxsKTsKKyAgICBBU1NFUlRfR0NfT0JKRUNU
X0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CisgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0
aGlzT2JqZWN0LCB2aXNpdG9yKTsKKyAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2hp
ZGRlblZhbHVlKTsKK30KKworREVGSU5FX1ZJU0lUX0NISUxEUkVOKFNpbXBsZU9iamVjdCk7CisK
IGNsYXNzIEltcHVyZUdldHRlciA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKIHB1YmxpYzoK
ICAgICBJbXB1cmVHZXR0ZXIoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKQEAgLTQzNiwx
NCArNDUxLDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gQmFzZTo6Z2V0T3duUHJvcGVydHlT
bG90KG9iamVjdCwgZ2xvYmFsT2JqZWN0LCBuYW1lLCBzbG90KTsKICAgICB9CiAKLSAgICBzdGF0
aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3Ip
Ci0gICAgewotICAgICAgICBEb2xsYXJWTUFzc2VydFNjb3BlIGFzc2VydFNjb3BlOwotICAgICAg
ICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNlbGwsIGluZm8oKSk7Ci0gICAgICAgIEJhc2U6
OnZpc2l0Q2hpbGRyZW4oY2VsbCwgdmlzaXRvcik7Ci0gICAgICAgIEltcHVyZUdldHRlciogdGhp
c09iamVjdCA9IGpzQ2FzdDxJbXB1cmVHZXR0ZXIqPihjZWxsKTsKLSAgICAgICAgdmlzaXRvci5h
cHBlbmQodGhpc09iamVjdC0+bV9kZWxlZ2F0ZSk7Ci0gICAgfQorICAgIERFQ0xBUkVfVklTSVRf
Q0hJTERSRU47CiAKICAgICB2b2lkIHNldERlbGVnYXRlKFZNJiB2bSwgSlNPYmplY3QqIGRlbGVn
YXRlKQogICAgIHsKQEAgLTQ1NCw2ICs0NjIsMTggQEAgcHJpdmF0ZToKICAgICBXcml0ZUJhcnJp
ZXI8SlNPYmplY3Q+IG1fZGVsZWdhdGU7CiB9OwogCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
Pgordm9pZCBJbXB1cmVHZXR0ZXI6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlz
aXRvciYgdmlzaXRvcikKK3sKKyAgICBEb2xsYXJWTUFzc2VydFNjb3BlIGFzc2VydFNjb3BlOwor
ICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2VsbCwgaW5mbygpKTsKKyAgICBCYXNlOjp2
aXNpdENoaWxkcmVuKGNlbGwsIHZpc2l0b3IpOworICAgIEltcHVyZUdldHRlciogdGhpc09iamVj
dCA9IGpzQ2FzdDxJbXB1cmVHZXR0ZXIqPihjZWxsKTsKKyAgICB2aXNpdG9yLmFwcGVuZCh0aGlz
T2JqZWN0LT5tX2RlbGVnYXRlKTsKK30KKworREVGSU5FX1ZJU0lUX0NISUxEUkVOKEltcHVyZUdl
dHRlcik7CisKIHN0YXRpYyBKU0NfREVDTEFSRV9DVVNUT01fR0VUVEVSKGN1c3RvbUdldHRlclZh
bHVlR2V0dGVyKTsKIHN0YXRpYyBKU0NfREVDTEFSRV9DVVNUT01fR0VUVEVSKGN1c3RvbUdldHRl
ckFjZXNzb3JHZXR0ZXIpOwogCkBAIC0xODIyLDE0ICsxODQyLDcgQEAgcHVibGljOgogICAgICAg
ICBwdXREaXJlY3ROYXRpdmVGdW5jdGlvbih2bSwgZ2xvYmFsT2JqZWN0LCBJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKHZtLCAiYWRkQnl0ZXMiKSwgMCwgZnVuY3Rpb25XYXNtU3RyZWFtaW5nQ29tcGls
ZXJBZGRCeXRlcywgTm9JbnRyaW5zaWMsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0
dHJpYnV0ZTo6RG9udEVudW0pKTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxk
cmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCi0gICAgewotICAgICAgICBE
b2xsYXJWTUFzc2VydFNjb3BlIGFzc2VydFNjb3BlOwotICAgICAgICBhdXRvKiB0aGlzT2JqZWN0
ID0ganNDYXN0PFdhc21TdHJlYW1pbmdDb21waWxlcio+KGNlbGwpOwotICAgICAgICBBU1NFUlRf
R0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7Ci0gICAgICAgIEJhc2U6OnZp
c2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7Ci0gICAgICAgIHZpc2l0b3IuYXBwZW5k
KHRoaXNPYmplY3QtPm1fcHJvbWlzZSk7Ci0gICAgfQorICAgIERFQ0xBUkVfVklTSVRfQ0hJTERS
RU47CiAKICAgICBERUNMQVJFX0lORk87CiAKQEAgLTE4MzcsNiArMTg1MCwxOCBAQCBwdWJsaWM6
CiAgICAgUmVmPFdhc206OlN0cmVhbWluZ0NvbXBpbGVyPiBtX3N0cmVhbWluZ0NvbXBpbGVyOwog
fTsKIAordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgV2FzbVN0cmVhbWluZ0NvbXBp
bGVyOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCit7
CisgICAgRG9sbGFyVk1Bc3NlcnRTY29wZSBhc3NlcnRTY29wZTsKKyAgICBhdXRvKiB0aGlzT2Jq
ZWN0ID0ganNDYXN0PFdhc21TdHJlYW1pbmdDb21waWxlcio+KGNlbGwpOworICAgIEFTU0VSVF9H
Q19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKKyAgICBCYXNlOjp2aXNpdENo
aWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOworICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmpl
Y3QtPm1fcHJvbWlzZSk7Cit9CisKK0RFRklORV9WSVNJVF9DSElMRFJFTihXYXNtU3RyZWFtaW5n
Q29tcGlsZXIpOworCiBjb25zdCBDbGFzc0luZm8gV2FzbVN0cmVhbWluZ0NvbXBpbGVyOjpzX2lu
Zm8gPSB7ICJXYXNtU3RyZWFtaW5nQ29tcGlsZXIiLCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBu
dWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKFdhc21TdHJlYW1pbmdDb21waWxlcikgfTsKIAog
SlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGZ1bmN0aW9uV2FzbVN0cmVhbWluZ0NvbXBpbGVyQWRk
Qnl0ZXMsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFt
ZSkpCkBAIC0zNjk5LDEzICszNzI0LDE2IEBAIHZvaWQgSlNEb2xsYXJWTTo6YWRkQ29uc3RydWN0
aWJsZUZ1bmN0aW8KICAgICBwdXREaXJlY3Qodm0sIGlkZW50aWZpZXIsIEpTRnVuY3Rpb246OmNy
ZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBhcmd1bWVudHMsIGlkZW50aWZpZXIuc3RyaW5nKCksIGZ1
bmN0aW9uLCBOb0ludHJpbnNpYywgZnVuY3Rpb24pLCBqc0RvbGxhclZNUHJvcGVydHlBdHRyaWJ1
dGVzKTsKIH0KIAotdm9pZCBKU0RvbGxhclZNOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwg
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBK
U0RvbGxhclZNOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0
b3IpCiB7CiAgICAgSlNEb2xsYXJWTSogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0RvbGxhclZNKj4o
Y2VsbCk7CiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKICAg
ICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX29iamVjdERvaW5nU2lkZUVmZmVjdFB1dFdp
dGhvdXRDb3JyZWN0U2xvdFN0YXR1c1N0cnVjdHVyZSk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElM
RFJFTihKU0RvbGxhclZNKTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKIElHTk9SRV9XQVJOSU5H
U19FTkQKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9KU0RvbGxhclZNLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0pTRG9sbGFyVk0uaAkocmV2
aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0pTRG9sbGFyVk0u
aAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTUtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTUtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTc0LDcgKzc0LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGFk
ZEZ1bmN0aW9uKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBjb25zdCBjaGFyKiBuYW1lLCBOYXRpdmVG
dW5jdGlvbiwgdW5zaWduZWQgYXJndW1lbnRzKTsKICAgICB2b2lkIGFkZENvbnN0cnVjdGlibGVG
dW5jdGlvbihWTSYsIEpTR2xvYmFsT2JqZWN0KiwgY29uc3QgY2hhciogbmFtZSwgTmF0aXZlRnVu
Y3Rpb24sIHVuc2lnbmVkIGFyZ3VtZW50cyk7CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxk
cmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsK
IAogICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1fb2JqZWN0RG9pbmdTaWRlRWZmZWN0UHV0
V2l0aG91dENvcnJlY3RTbG90U3RhdHVzU3RydWN0dXJlOwogfTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21HbG9iYWwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21HbG9iYWwuY3BwCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtR2xvYmFsLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE5LTIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMDMs
NyArMTAzLDggQEAgdm9pZCBHbG9iYWw6OnNldChKU0dsb2JhbE9iamVjdCogZ2xvYmFsTwogICAg
IH0KIH0KIAotdm9pZCBHbG9iYWw6OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9y
KQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgR2xvYmFsOjp2aXNpdEFnZ3JlZ2F0
ZUltcGwoVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBzd2l0Y2ggKG1fdHlwZSkgewogICAgIGNh
c2UgV2FzbTo6VHlwZTo6RXh0ZXJucmVmOgpAQCAtMTE3LDYgKzExOCw4IEBAIHZvaWQgR2xvYmFs
Ojp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYKICAgICB9CiB9CiAKK0RFRklORV9WSVNJVF9B
R0dSRUdBVEUoR2xvYmFsKTsKKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6Okdsb2JhbAogCiAjZW5k
aWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbUdsb2JhbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21HbG9iYWwuaAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbUdsb2JhbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxNy0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTcsNyArNTcsOCBAQCBwdWJs
aWM6CiAgICAgSlNWYWx1ZSBnZXQoSlNHbG9iYWxPYmplY3QqKSBjb25zdDsKICAgICB1aW50NjRf
dCBnZXRQcmltaXRpdmUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlLm1fcHJpbWl0aXZlOyB9CiAg
ICAgdm9pZCBzZXQoSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlKTsKLSAgICB2b2lkIHZpc2l0QWdn
cmVnYXRlKFNsb3RWaXNpdG9yJik7CisvLyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2
b2lkIHZpc2l0QWdncmVnYXRlKFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0FHR1JFR0FU
RTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IFQqIG93bmVyKCkgY29uc3QgeyByZXR1cm4g
cmVpbnRlcnByZXRfY2FzdDxUKj4obV9vd25lcik7IH0KICAgICB2b2lkIHNldE93bmVyKEpTT2Jq
ZWN0KiBvd25lcikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UYWJsZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRhYmxlLmNw
cAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRh
YmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTctMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE2Niw3ICsxNjYsOCBAQCBKU1ZhbHVlIFRhYmxl
OjpnZXQodWludDMyX3QgaW5kZXgpIGNvbnN0CiAgICAgcmV0dXJuIG1fanNWYWx1ZXMuZ2V0KClb
aW5kZXggJiBtX21hc2tdLmdldCgpOwogfQogCi12b2lkIFRhYmxlOjp2aXNpdEFnZ3JlZ2F0ZShT
bG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFRh
YmxlOjp2aXNpdEFnZ3JlZ2F0ZUltcGwoVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBSRUxFQVNF
X0FTU0VSVChtX293bmVyKTsKICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fb3duZXItPmNl
bGxMb2NrKCkpOwpAQCAtMTc0LDYgKzE3NSw4IEBAIHZvaWQgVGFibGU6OnZpc2l0QWdncmVnYXRl
KFNsb3RWaXNpdG9yJiAKICAgICAgICAgdmlzaXRvci5hcHBlbmQobV9qc1ZhbHVlcy5nZXQoKVtp
XSk7CiB9CiAKK0RFRklORV9WSVNJVF9BR0dSRUdBVEUoVGFibGUpOworCiBUeXBlIFRhYmxlOjp3
YXNtVHlwZSgpIGNvbnN0CiB7CiAgICAgaWYgKGlzRXh0ZXJucmVmVGFibGUoKSkKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UYWJsZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UYWJsZS5oCShyZXZpc2lvbiAyNzI5MDIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAxOCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTgwLDcgKzgwLDcgQEAgcHVibGljOgogICAgIE9wdGlvbmFsPHVpbnQzMl90PiBncm93KHVpbnQz
Ml90IGRlbHRhLCBKU1ZhbHVlIGRlZmF1bHRWYWx1ZSk7CiAgICAgdm9pZCBjb3B5KGNvbnN0IFRh
YmxlKiBzcmNUYWJsZSwgdWludDMyX3QgZHN0SW5kZXgsIHVpbnQzMl90IHNyY0luZGV4KTsKIAot
ICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lU
X0FHR1JFR0FURTsKIAogcHJvdGVjdGVkOgogICAgIFRhYmxlKHVpbnQzMl90IGluaXRpYWwsIE9w
dGlvbmFsPHVpbnQzMl90PiBtYXhpbXVtLCBUYWJsZUVsZW1lbnRUeXBlID0gVGFibGVFbGVtZW50
VHlwZTo6RXh0ZXJucmVmKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pT
VG9XYXNtSUNDYWxsZWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL2pzL0pTVG9XYXNtSUNDYWxsZWUuY3BwCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1RvV2FzbUlDQ2FsbGVlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE5LTIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC00OSw3ICs0OSw4IEBAIFN0cnVjdHVyZSogSlNUb1dhc21JQ0NhbGxlZTo6Y3JlYXRlU3RydWMK
ICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBl
LCBUeXBlSW5mbyhKU0NhbGxlZVR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKIH0KIAot
dm9pZCBKU1RvV2FzbUlDQ2FsbGVlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZp
c2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1RvV2Fz
bUlDQ2FsbGVlOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0
b3IpCiB7CiAgICAgSlNUb1dhc21JQ0NhbGxlZSogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1RvV2Fz
bUlDQ2FsbGVlKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2Jq
ZWN0LCBpbmZvKCkpOwpAQCAtNTgsNiArNTksOCBAQCB2b2lkIEpTVG9XYXNtSUNDYWxsZWU6OnZp
c2l0Q2hpbGRyZW4oSlNDCiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9mdW5jdGlv
bik7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU1RvV2FzbUlDQ2FsbGVlKTsKKwogfSAv
LyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1RvV2FzbUlDQ2FsbGVlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNUb1dhc21JQ0NhbGxlZS5oCShy
ZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1RvV2Fz
bUlDQ2FsbGVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxOS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTYsNyArNTYsNyBAQCBwcml2YXRlOgogICAgIEpT
VG9XYXNtSUNDYWxsZWUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSkKICAgICAgICAgOiBCYXNlKHZtLCBnbG9iYWxPYmplY3QsIHN0cnVj
dHVyZSkKICAgICB7IH0KLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNs
b3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIFdyaXRlQmFy
cmllcjxXZWJBc3NlbWJseUZ1bmN0aW9uPiBtX2Z1bmN0aW9uOwogfTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxv
Y2suY3BwCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTgyLDcgKzgy
LDggQEAgdm9pZCBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrOjpjbGVhckpTQ2FsbAogICAgICAgICAo
Kml0ZXIpLT51bmxpbmsodm0pOwogfQogCi12b2lkIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6OnZp
c2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRl
PHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6OnZpc2l0Q2hp
bGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU1dlYkFz
c2VtYmx5Q29kZUJsb2NrKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTV2ViQXNzZW1ibHlDb2RlQmxv
Y2sqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGlu
Zm8oKSk7CkBAIC05MCw2ICs5MSw4IEBAIHZvaWQgSlNXZWJBc3NlbWJseUNvZGVCbG9jazo6dmlz
aXRDaGlsZHIKICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwog
fQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNXZWJBc3NlbWJseUNvZGVCbG9jayk7CisKIHZv
aWQgSlNXZWJBc3NlbWJseUNvZGVCbG9jazo6ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoVk0mIHZt
KQogewogICAgIGZvciAoYXV0byBpdGVyID0gbV9jYWxsTGlua0luZm9zLmJlZ2luKCk7ICEhaXRl
cjsgKytpdGVyKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3Nl
bWJseUNvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suaAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9jay5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIwIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtODYsNyArODYsNyBAQCBwcml2YXRlOgogICAgIERFQ0xBUkVfRVhQT1JUX0lO
Rk87CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOwog
ICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRD
aGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERS
RU47CiAKICAgICBSZWY8V2FzbTo6Q29kZUJsb2NrPiBtX2NvZGVCbG9jazsKICAgICBWZWN0b3I8
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPFdhc21FbnRyeVB0clRhZz4+IG1fd2FzbVRvSlNFeGl0U3R1
YnM7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5R2xv
YmFsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dl
YkFzc2VtYmx5R2xvYmFsLmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUdsb2JhbC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOS0yMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNzEs
NyArNzEsOCBAQCB2b2lkIEpTV2ViQXNzZW1ibHlHbG9iYWw6OmRlc3Ryb3koSlNDZWxsCiAgICAg
c3RhdGljX2Nhc3Q8SlNXZWJBc3NlbWJseUdsb2JhbCo+KGNlbGwpLT5KU1dlYkFzc2VtYmx5R2xv
YmFsOjp+SlNXZWJBc3NlbWJseUdsb2JhbCgpOwogfQogCi12b2lkIEpTV2ViQXNzZW1ibHlHbG9i
YWw6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3Rl
bXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTV2ViQXNzZW1ibHlHbG9iYWw6OnZpc2l0
Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU1dl
YkFzc2VtYmx5R2xvYmFsKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTV2ViQXNzZW1ibHlHbG9iYWwq
PihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8o
KSk7CkBAIC04MCw2ICs4MSw4IEBAIHZvaWQgSlNXZWJBc3NlbWJseUdsb2JhbDo6dmlzaXRDaGls
ZHJlbigKICAgICB0aGlzT2JqZWN0LT5nbG9iYWwoKS0+dmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7
CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU1dlYkFzc2VtYmx5R2xvYmFsKTsKKwogfSAv
LyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5R2xvYmFsLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUdsb2Jh
bC5oCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9K
U1dlYkFzc2VtYmx5R2xvYmFsLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxOS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTksNyArNTksNyBAQCBwdWJsaWM6
CiBwcml2YXRlOgogICAgIEpTV2ViQXNzZW1ibHlHbG9iYWwoVk0mLCBTdHJ1Y3R1cmUqLCBSZWY8
V2FzbTo6R2xvYmFsPiYmKTsKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7Ci0gICAgc3Rh
dGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xB
UkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBSZWY8V2FzbTo6R2xvYmFsPiBtX2dsb2JhbDsKIH07
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFu
Y2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2Vi
QXNzZW1ibHlJbnN0YW5jZS5jcHAJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTkgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC03Myw3ICs3Myw4IEBAIHZvaWQgSlNXZWJBc3NlbWJseUluc3RhbmNlOjpkZXN0cm95KEpT
Q2UKICAgICBzdGF0aWNfY2FzdDxKU1dlYkFzc2VtYmx5SW5zdGFuY2UqPihjZWxsKS0+SlNXZWJB
c3NlbWJseUluc3RhbmNlOjp+SlNXZWJBc3NlbWJseUluc3RhbmNlKCk7CiB9CiAKLXZvaWQgSlNX
ZWJBc3NlbWJseUluc3RhbmNlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0
b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1dlYkFzc2Vt
Ymx5SW5zdGFuY2U6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlz
aXRvcikKIHsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTV2ViQXNzZW1ibHlJbnN0
YW5jZSo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwg
aW5mbygpKTsKQEAgLTEwMiw2ICsxMDMsOCBAQCB2b2lkIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6
dmlzaXRDaGlsZHJlCiAgICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQod3JhcHBlci5n
ZXQoKSk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU1dlYkFzc2VtYmx5SW5zdGFuY2Up
OworCiB2b2lkIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6ZmluYWxpemVDcmVhdGlvbihWTSYgdm0s
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZjxXYXNtOjpDb2RlQmxvY2s+JiYgd2Fz
bUNvZGVCbG9jaywgSlNPYmplY3QqIGltcG9ydE9iamVjdCwgV2FzbTo6Q3JlYXRpb25Nb2RlIGNy
ZWF0aW9uTW9kZSkKIHsKICAgICBtX2luc3RhbmNlLT5maW5hbGl6ZUNyZWF0aW9uKHRoaXMsIHdh
c21Db2RlQmxvY2suY29weVJlZigpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5oCShyZXZpc2lvbiAyNzI5MDIp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2Uu
aAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTYtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTEwNSw3ICsxMDUsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgog
ICAgIEpTV2ViQXNzZW1ibHlJbnN0YW5jZShWTSYsIFN0cnVjdHVyZSosIFJlZjxXYXNtOjpJbnN0
YW5jZT4mJik7CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIEpTV2ViQXNzZW1ibHlNb2R1
bGUqLCBXZWJBc3NlbWJseU1vZHVsZVJlY29yZCopOwotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hp
bGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVO
OwogCiAgICAgUmVmPFdhc206Okluc3RhbmNlPiBtX2luc3RhbmNlOwogICAgIFZNKiBtX3ZtOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1lbW9yeS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3Nl
bWJseU1lbW9yeS5jcHAJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNZW1vcnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTU5
LDcgKzE1OSw4IEBAIHZvaWQgSlNXZWJBc3NlbWJseU1lbW9yeTo6ZGVzdHJveShKU0NlbGwKICAg
ICBtZW1vcnktPkpTV2ViQXNzZW1ibHlNZW1vcnk6On5KU1dlYkFzc2VtYmx5TWVtb3J5KCk7CiB9
CiAKLXZvaWQgSlNXZWJBc3NlbWJseU1lbW9yeTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGws
IFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQg
SlNXZWJBc3NlbWJseU1lbW9yeTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNp
dG9yJiB2aXNpdG9yKQogewogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNXZWJBc3Nl
bWJseU1lbW9yeSo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09i
amVjdCwgaW5mbygpKTsKQEAgLTE2OSw2ICsxNzAsOCBAQCB2b2lkIEpTV2ViQXNzZW1ibHlNZW1v
cnk6OnZpc2l0Q2hpbGRyZW4oCiAgICAgdmlzaXRvci5yZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQo
dGhpc09iamVjdC0+bWVtb3J5KCkuc2l6ZSgpKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVO
KEpTV2ViQXNzZW1ibHlNZW1vcnkpOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8v
IEVOQUJMRShXRUJBU1NFTUJMWSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L0pTV2ViQXNzZW1ibHlNZW1vcnkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TWVtb3J5LmgJKHJldmlzaW9uIDI3MjkwMikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNZW1vcnkuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxOSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTYzLDcgKzYzLDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBKU1dlYkFz
c2VtYmx5TWVtb3J5KFZNJiwgU3RydWN0dXJlKik7CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihW
TSYpOwotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3Im
KTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgUmVmPFdhc206Ok1lbW9yeT4g
bV9tZW1vcnk7CiAgICAgV3JpdGVCYXJyaWVyPEpTQXJyYXlCdWZmZXI+IG1fYnVmZmVyV3JhcHBl
cjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1
bGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2Vi
QXNzZW1ibHlNb2R1bGUuY3BwCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTEyNCw3ICsxMjQsOCBAQCB2b2lkIEpTV2ViQXNzZW1ibHlNb2R1bGU6OnNldENvZGVCbG9jayhW
CiAgICAgbV9jb2RlQmxvY2tzW3N0YXRpY19jYXN0PHNpemVfdD4obW9kZSldLnNldCh2bSwgdGhp
cywgY29kZUJsb2NrKTsKIH0KIAotdm9pZCBKU1dlYkFzc2VtYmx5TW9kdWxlOjp2aXNpdENoaWxk
cmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBWaXNpdG9yPgordm9pZCBKU1dlYkFzc2VtYmx5TW9kdWxlOjp2aXNpdENoaWxkcmVuSW1wbChK
U0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNXZWJBc3NlbWJseU1vZHVs
ZSogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1dlYkFzc2VtYmx5TW9kdWxlKj4oY2VsbCk7CiAgICAg
QVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtMTM1LDYg
KzEzNiw4IEBAIHZvaWQgSlNXZWJBc3NlbWJseU1vZHVsZTo6dmlzaXRDaGlsZHJlbigKICAgICAg
ICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9jb2RlQmxvY2tzW2ldKTsKIH0KIAorREVG
SU5FX1ZJU0lUX0NISUxEUkVOKEpTV2ViQXNzZW1ibHlNb2R1bGUpOworCiB9IC8vIG5hbWVzcGFj
ZSBKU0MKIAogI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmgJKHJldmlz
aW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1i
bHlNb2R1bGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTYtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTgwLDcgKzgwLDcgQEAgcHJpdmF0ZToKIAog
ICAgIEpTV2ViQXNzZW1ibHlNb2R1bGUoVk0mLCBTdHJ1Y3R1cmUqLCBSZWY8V2FzbTo6TW9kdWxl
PiYmKTsKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7Ci0gICAgc3RhdGljIHZvaWQgdmlz
aXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJ
TERSRU47CiAKICAgICBSZWY8V2FzbTo6TW9kdWxlPiBtX21vZHVsZTsKICAgICBXcml0ZUJhcnJp
ZXI8U3ltYm9sVGFibGU+IG1fZXhwb3J0U3ltYm9sVGFibGU7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5VGFibGUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlUYWJsZS5jcHAJKHJldmlz
aW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1i
bHlUYWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDE2LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03Miw3ICs3Miw4IEBAIHZvaWQgSlNXZWJB
c3NlbWJseVRhYmxlOjpkZXN0cm95KEpTQ2VsbCoKICAgICBzdGF0aWNfY2FzdDxKU1dlYkFzc2Vt
Ymx5VGFibGUqPihjZWxsKS0+SlNXZWJBc3NlbWJseVRhYmxlOjp+SlNXZWJBc3NlbWJseVRhYmxl
KCk7CiB9CiAKLXZvaWQgSlNXZWJBc3NlbWJseVRhYmxlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCog
Y2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgor
dm9pZCBKU1dlYkFzc2VtYmx5VGFibGU6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwg
VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU1dlYkFzc2VtYmx5VGFibGUqIHRoaXNPYmplY3Qg
PSBqc0Nhc3Q8SlNXZWJBc3NlbWJseVRhYmxlKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVD
VF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtODEsNiArODIsOCBAQCB2b2lkIEpT
V2ViQXNzZW1ibHlUYWJsZTo6dmlzaXRDaGlsZHJlbihKCiAgICAgdGhpc09iamVjdC0+dGFibGUo
KS0+dmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihK
U1dlYkFzc2VtYmx5VGFibGUpOworCiBib29sIEpTV2ViQXNzZW1ibHlUYWJsZTo6Z3Jvdyh1aW50
MzJfdCBkZWx0YSwgSlNWYWx1ZSBkZWZhdWx0VmFsdWUpCiB7CiAgICAgaWYgKGRlbHRhID09IDAp
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5VGFibGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2Vt
Ymx5VGFibGUuaAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vanMvSlNXZWJBc3NlbWJseVRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03MCw3ICs3MCw3
IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgSlNXZWJBc3NlbWJseVRhYmxlKFZNJiwgU3RydWN0
dXJlKiwgUmVmPFdhc206OlRhYmxlPiYmKTsKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7
Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwor
ICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBSZWY8V2FzbTo6VGFibGU+IG1fdGFi
bGU7CiB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlG
dW5jdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
V2ViQXNzZW1ibHlGdW5jdGlvbi5jcHAJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIwIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIxIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtNDUyLDcgKzQ1Miw4IEBAIFdlYkFzc2VtYmx5RnVuY3Rpb246OldlYkFzc2VtYmx5RnVu
Y3Rpb24KICAgICAsIG1faW1wb3J0YWJsZUZ1bmN0aW9uIHsgc2lnbmF0dXJlSW5kZXgsIHdhc21U
b1dhc21FbnRyeXBvaW50TG9hZExvY2F0aW9uIH0KIHsgfQogCi12b2lkIFdlYkFzc2VtYmx5RnVu
Y3Rpb246OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikK
K3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFdlYkFzc2VtYmx5RnVuY3Rpb246OnZp
c2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBX
ZWJBc3NlbWJseUZ1bmN0aW9uKiB0aGlzT2JqZWN0ID0ganNDYXN0PFdlYkFzc2VtYmx5RnVuY3Rp
b24qPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGlu
Zm8oKSk7CkBAIC00NjEsNiArNDYyLDggQEAgdm9pZCBXZWJBc3NlbWJseUZ1bmN0aW9uOjp2aXNp
dENoaWxkcmVuKAogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fanNUb1dhc21JQ0Nh
bGxlZSk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihXZWJBc3NlbWJseUZ1bmN0aW9uKTsK
Kwogdm9pZCBXZWJBc3NlbWJseUZ1bmN0aW9uOjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKIHsKICAg
ICBzdGF0aWNfY2FzdDxXZWJBc3NlbWJseUZ1bmN0aW9uKj4oY2VsbCktPldlYkFzc2VtYmx5RnVu
Y3Rpb246On5XZWJBc3NlbWJseUZ1bmN0aW9uKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5oCShyZXZpc2lvbiAyNzI5
MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9u
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDE2LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC04Niw3ICs4Niw3IEBAIHB1YmxpYzoKICAgICBXYXNtOjpJ
bnN0YW5jZSogcHJldmlvdXNJbnN0YW5jZShDYWxsRnJhbWUqKTsKIAogcHJpdmF0ZToKLSAgICBz
dGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVD
TEFSRV9WSVNJVF9DSElMRFJFTjsKICAgICBXZWJBc3NlbWJseUZ1bmN0aW9uKFZNJiwgTmF0aXZl
RXhlY3V0YWJsZSosIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKiwgV2FzbTo6Q2FsbGVlJiBq
c0VudHJ5cG9pbnQsIFdhc21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rpb246OkxvYWRMb2NhdGlvbiBl
bnRyeXBvaW50TG9hZExvY2F0aW9uLCBXYXNtOjpTaWduYXR1cmVJbmRleCk7CiAKICAgICBNYWNy
b0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4ganNDYWxsRW50cnlwb2ludFNsb3coKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb25C
YXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJB
c3NlbWJseUZ1bmN0aW9uQmFzZS5jcHAJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb25CYXNlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC00MSw3ICs0MSw4IEBAIFdlYkFzc2VtYmx5RnVuY3Rpb25CYXNlOjpXZWJBc3NlbWJseUZ1
bmMKICAgICA6IEJhc2Uodm0sIGV4ZWN1dGFibGUsIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKQog
eyB9CiAKLXZvaWQgV2ViQXNzZW1ibHlGdW5jdGlvbkJhc2U6OnZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+
Cit2b2lkIFdlYkFzc2VtYmx5RnVuY3Rpb25CYXNlOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwq
IGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgV2ViQXNzZW1ibHlGdW5jdGlvbkJhc2Uq
IHRoaXNPYmplY3QgPSBqc0Nhc3Q8V2ViQXNzZW1ibHlGdW5jdGlvbkJhc2UqPihjZWxsKTsKICAg
ICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC00OSw2
ICs1MCw4IEBAIHZvaWQgV2ViQXNzZW1ibHlGdW5jdGlvbkJhc2U6OnZpc2l0Q2hpbGQKICAgICB2
aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2luc3RhbmNlKTsKIH0KIAorREVGSU5FX1ZJU0lU
X0NISUxEUkVOKFdlYkFzc2VtYmx5RnVuY3Rpb25CYXNlKTsKKwogdm9pZCBXZWJBc3NlbWJseUZ1
bmN0aW9uQmFzZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBOYXRpdmVFeGVjdXRhYmxlKiBleGVj
dXRhYmxlLCB1bnNpZ25lZCBsZW5ndGgsIGNvbnN0IFN0cmluZyYgbmFtZSwgSlNXZWJBc3NlbWJs
eUluc3RhbmNlKiBpbnN0YW5jZSkKIHsKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSwgZXhl
Y3V0YWJsZSwgbGVuZ3RoLCBuYW1lKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL1dlYkFzc2VtYmx5RnVuY3Rpb25CYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbkJhc2UuaAkocmV2aXNpb24gMjcy
OTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlv
bkJhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTctMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ2LDcgKzQ2LDcgQEAgcHVibGljOgogICAgIHN0
YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZJbnN0YW5jZSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRP
RihXZWJBc3NlbWJseUZ1bmN0aW9uQmFzZSwgbV9pbnN0YW5jZSk7IH0KIAogcHJvdGVjdGVkOgot
ICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAg
ICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBO
YXRpdmVFeGVjdXRhYmxlKiwgdW5zaWduZWQgbGVuZ3RoLCBjb25zdCBTdHJpbmcmIG5hbWUsIEpT
V2ViQXNzZW1ibHlJbnN0YW5jZSopOwogICAgIFdlYkFzc2VtYmx5RnVuY3Rpb25CYXNlKFZNJiwg
TmF0aXZlRXhlY3V0YWJsZSosIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKik7CiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJs
eU1vZHVsZVJlY29yZC5jcHAJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxOSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTc4LDcgKzc4LDggQEAgdm9pZCBXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6ZmluaXNoQ3Jl
YQogICAgIH0KIH0KIAotdm9pZCBXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6dmlzaXRDaGlsZHJl
bihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUg
VmlzaXRvcj4KK3ZvaWQgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OnZpc2l0Q2hpbGRyZW5JbXBs
KEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBXZWJBc3NlbWJseU1vZHVs
ZVJlY29yZCogdGhpc09iamVjdCA9IGpzQ2FzdDxXZWJBc3NlbWJseU1vZHVsZVJlY29yZCo+KGNl
bGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsK
QEAgLTg4LDYgKzg5LDggQEAgdm9pZCBXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6dmlzaXRDaGls
ZAogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fZXhwb3J0c09iamVjdCk7CiB9CiAK
K0RFRklORV9WSVNJVF9DSElMRFJFTihXZWJBc3NlbWJseU1vZHVsZVJlY29yZCk7CisKIHZvaWQg
V2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OnByZXBhcmVMaW5rKFZNJiB2bSwgSlNXZWJBc3NlbWJs
eUluc3RhbmNlKiBpbnN0YW5jZSkKIHsKICAgICBSRUxFQVNFX0FTU0VSVCghbV9pbnN0YW5jZSk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZVJl
Y29yZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFz
c2VtYmx5TW9kdWxlUmVjb3JkLmgJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTkgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC02OSw3ICs2OSw3IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpT
R2xvYmFsT2JqZWN0KiwgVk0mLCBjb25zdCBXYXNtOjpNb2R1bGVJbmZvcm1hdGlvbiYpOwogCi0g
ICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAg
IERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBXcml0ZUJhcnJpZXI8SlNXZWJBc3NlbWJs
eUluc3RhbmNlPiBtX2luc3RhbmNlOwogICAgIFdyaXRlQmFycmllcjxKU09iamVjdD4gbV9zdGFy
dEZ1bmN0aW9uOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1i
bHlXcmFwcGVyRnVuY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL1dlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmNwcAkocmV2aXNpb24gMjcyOTAy
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlXcmFwcGVyRnVu
Y3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxNy0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjcsNyArNjcsOCBAQCBTdHJ1Y3R1cmUqIFdl
YkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uOjpjCiAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRl
KHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oSlNGdW5jdGlvblR5cGUsIFN0
cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKIH0KIAotdm9pZCBXZWJBc3NlbWJseVdyYXBwZXJGdW5j
dGlvbjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQor
dGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rp
b246OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsK
ICAgICBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbiogdGhpc09iamVjdCA9IGpzQ2FzdDxXZWJB
c3NlbWJseVdyYXBwZXJGdW5jdGlvbio+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5I
RVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTc2LDYgKzc3LDggQEAgdm9pZCBXZWJBc3Nl
bWJseVdyYXBwZXJGdW5jdGlvbjo6dmlzaXRDaAogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmpl
Y3QtPm1fZnVuY3Rpb24pOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oV2ViQXNzZW1ibHlX
cmFwcGVyRnVuY3Rpb24pOworCiBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oY2FsbFdlYkFzc2Vt
Ymx5V3JhcHBlckZ1bmN0aW9uLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZy
YW1lKiBjYWxsRnJhbWUpKQogewogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5V3JhcHBlckZ1bmN0
aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNz
ZW1ibHlXcmFwcGVyRnVuY3Rpb24uaAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uaAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAxOSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTU5LDcgKzU5LDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBXZWJBc3NlbWJs
eVdyYXBwZXJGdW5jdGlvbihWTSYsIE5hdGl2ZUV4ZWN1dGFibGUqLCBKU0dsb2JhbE9iamVjdCos
IFN0cnVjdHVyZSosIFdhc21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rpb24pOwogICAgIHZvaWQgZmlu
aXNoQ3JlYXRpb24oVk0mLCBOYXRpdmVFeGVjdXRhYmxlKiwgdW5zaWduZWQgbGVuZ3RoLCBjb25z
dCBTdHJpbmcmIG5hbWUsIEpTT2JqZWN0KiwgSlNXZWJBc3NlbWJseUluc3RhbmNlKik7Ci0gICAg
c3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERF
Q0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBXcml0ZUJhcnJpZXI8SlNPYmplY3Q+IG1fZnVu
Y3Rpb247CiAgICAgLy8gSXQncyBzYWZlIHRvIGp1c3QgaG9sZCB0aGUgcmF3IFdhc21Ub1dhc21J
bXBvcnRhYmxlRnVuY3Rpb24gYmVjYXVzZSB3ZSBoYXZlIGEgcmVmZXJlbmNlCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuY3Bw
CShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJPYmplY3RTdG9yZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNzI4LDcgKzcyOCw4IEBAIHZvaWQgSURC
T2JqZWN0U3RvcmU6OnJvbGxiYWNrRm9yVmVyc2lvbkMKICAgICB9CiB9CiAKLXZvaWQgSURCT2Jq
ZWN0U3RvcmU6OnZpc2l0UmVmZXJlbmNlZEluZGV4ZXMoU2xvdFZpc2l0b3ImIHZpc2l0b3IpIGNv
bnN0Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBJREJPYmplY3RTdG9yZTo6dmlz
aXRSZWZlcmVuY2VkSW5kZXhlcyhWaXNpdG9yJiB2aXNpdG9yKSBjb25zdAogewogICAgIExvY2tl
cjxMb2NrPiBsb2NrZXIobV9yZWZlcmVuY2VkSW5kZXhMb2NrKTsKICAgICBmb3IgKGF1dG8mIGlu
ZGV4IDogbV9yZWZlcmVuY2VkSW5kZXhlcy52YWx1ZXMoKSkKQEAgLTczNyw2ICs3MzgsOSBAQCB2
b2lkIElEQk9iamVjdFN0b3JlOjp2aXNpdFJlZmVyZW5jZWRJbmRlCiAgICAgICAgIHZpc2l0b3Iu
YWRkT3BhcXVlUm9vdChpbmRleC5nZXQoKSk7CiB9CiAKK3RlbXBsYXRlIHZvaWQgSURCT2JqZWN0
U3RvcmU6OnZpc2l0UmVmZXJlbmNlZEluZGV4ZXMoQWJzdHJhY3RTbG90VmlzaXRvciYpIGNvbnN0
OwordGVtcGxhdGUgdm9pZCBJREJPYmplY3RTdG9yZTo6dmlzaXRSZWZlcmVuY2VkSW5kZXhlcyhT
bG90VmlzaXRvciYpIGNvbnN0OworCiB2b2lkIElEQk9iamVjdFN0b3JlOjpyZW5hbWVSZWZlcmVu
Y2VkSW5kZXgoSURCSW5kZXgmIGluZGV4LCBjb25zdCBTdHJpbmcmIG5ld05hbWUpCiB7CiAgICAg
TE9HKEluZGV4ZWREQiwgIklEQk9iamVjdFN0b3JlOjpyZW5hbWVSZWZlcmVuY2VkSW5kZXgiKTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0
U3RvcmUuaAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCT2JqZWN0U3RvcmUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMDksNyArMTA5LDcgQEAgcHVi
bGljOgogICAgIHZvaWQgcmVmKCk7CiAgICAgdm9pZCBkZXJlZigpOwogCi0gICAgdm9pZCB2aXNp
dFJlZmVyZW5jZWRJbmRleGVzKEpTQzo6U2xvdFZpc2l0b3ImKSBjb25zdDsKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIHZpc2l0UmVmZXJlbmNlZEluZGV4ZXMoVmlzaXRvciYp
IGNvbnN0OwogICAgIHZvaWQgcmVuYW1lUmVmZXJlbmNlZEluZGV4KElEQkluZGV4JiwgY29uc3Qg
U3RyaW5nJiBuZXdOYW1lKTsKIAogcHJpdmF0ZToKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5jcHAJKHJldmlzaW9uIDI3Mjkw
MikKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTUtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTE0NTUsNyArMTQ1NSw4IEBAIHZvaWQgSURCVHJhbnNhY3Rp
b246OmNvbm5lY3Rpb25DbG9zZWRGcm8KICAgICBmaXJlT25BYm9ydCgpOwogfQogCi12b2lkIElE
QlRyYW5zYWN0aW9uOjp2aXNpdFJlZmVyZW5jZWRPYmplY3RTdG9yZXMoSlNDOjpTbG90VmlzaXRv
ciYgdmlzaXRvcikgY29uc3QKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIElEQlRy
YW5zYWN0aW9uOjp2aXNpdFJlZmVyZW5jZWRPYmplY3RTdG9yZXMoVmlzaXRvciYgdmlzaXRvcikg
Y29uc3QKIHsKICAgICBMb2NrZXI8TG9jaz4gbG9ja2VyKG1fcmVmZXJlbmNlZE9iamVjdFN0b3Jl
TG9jayk7CiAgICAgZm9yIChhdXRvJiBvYmplY3RTdG9yZSA6IG1fcmVmZXJlbmNlZE9iamVjdFN0
b3Jlcy52YWx1ZXMoKSkKQEAgLTE0NjQsNiArMTQ2NSw5IEBAIHZvaWQgSURCVHJhbnNhY3Rpb246
OnZpc2l0UmVmZXJlbmNlZE9iamUKICAgICAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KG9iamVj
dFN0b3JlLmdldCgpKTsKIH0KIAordGVtcGxhdGUgdm9pZCBJREJUcmFuc2FjdGlvbjo6dmlzaXRS
ZWZlcmVuY2VkT2JqZWN0U3RvcmVzKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpIGNvbnN0Owor
dGVtcGxhdGUgdm9pZCBJREJUcmFuc2FjdGlvbjo6dmlzaXRSZWZlcmVuY2VkT2JqZWN0U3RvcmVz
KEpTQzo6U2xvdFZpc2l0b3ImKSBjb25zdDsKKwogdm9pZCBJREJUcmFuc2FjdGlvbjo6aGFuZGxl
UGVuZGluZ09wZXJhdGlvbnMoKQogewogICAgIEFTU0VSVChjYW5DdXJyZW50VGhyZWFkQWNjZXNz
VGhyZWFkTG9jYWxEYXRhKG1fZGF0YWJhc2UtPm9yaWdpblRocmVhZCgpKSk7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmgJKHJl
dmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRy
YW5zYWN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTQ5LDcgKzE0OSw3IEBAIHB1YmxpYzoKIAogICAg
IHZvaWQgY29ubmVjdGlvbkNsb3NlZEZyb21TZXJ2ZXIoY29uc3QgSURCRXJyb3ImKTsKIAotICAg
IHZvaWQgdmlzaXRSZWZlcmVuY2VkT2JqZWN0U3RvcmVzKEpTQzo6U2xvdFZpc2l0b3ImKSBjb25z
dDsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIHZpc2l0UmVmZXJlbmNlZE9i
amVjdFN0b3JlcyhWaXNpdG9yJikgY29uc3Q7CiAKICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMg
c3RkOjphdG9taWM8dW5zaWduZWQ+IG51bWJlck9mSURCVHJhbnNhY3Rpb25zOwogCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQnVmZmVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQnVmZmVyLmNwcAkocmV2
aXNpb24gMjcyOTAyKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0J1
ZmZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogQ29weXJpZ2h0
IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0xNTQsMTIgKzE1NCwxNiBAQCBFeGNlcHRpb25PcjxKU0M6
OkpTVmFsdWU+IEF1ZGlvQnVmZmVyOjpnCiAgICAgcmV0dXJuIGNvbnN0cnVjdEpTQXJyYXkoKTsK
IH0KIAotdm9pZCBBdWRpb0J1ZmZlcjo6dmlzaXRDaGFubmVsV3JhcHBlcnMoSlNDOjpTbG90Vmlz
aXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEF1ZGlvQnVm
ZmVyOjp2aXNpdENoYW5uZWxXcmFwcGVycyhWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGZvciAo
YXV0byYgY2hhbm5lbFdyYXBwZXIgOiBtX2NoYW5uZWxXcmFwcGVycykKICAgICAgICAgY2hhbm5l
bFdyYXBwZXIudmlzaXQodmlzaXRvcik7CiB9CiAKK3RlbXBsYXRlIHZvaWQgQXVkaW9CdWZmZXI6
OnZpc2l0Q2hhbm5lbFdyYXBwZXJzKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxh
dGUgdm9pZCBBdWRpb0J1ZmZlcjo6dmlzaXRDaGFubmVsV3JhcHBlcnMoSlNDOjpTbG90VmlzaXRv
ciYpOworCiBSZWZQdHI8RmxvYXQzMkFycmF5PiBBdWRpb0J1ZmZlcjo6Y2hhbm5lbERhdGEodW5z
aWduZWQgY2hhbm5lbEluZGV4KQogewogICAgIGlmIChjaGFubmVsSW5kZXggPj0gbV9jaGFubmVs
cy5zaXplKCkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQnVm
ZmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRp
b0J1ZmZlci5oCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmF1ZGlvL0F1ZGlvQnVmZmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgog
ICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03NSw3ICs3NSw3IEBAIHB1YmxpYzoK
IAogICAgIHNpemVfdCBtZW1vcnlDb3N0KCkgY29uc3Q7CiAKLSAgICB2b2lkIHZpc2l0Q2hhbm5l
bFdyYXBwZXJzKEpTQzo6U2xvdFZpc2l0b3ImKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNp
dG9yPiB2b2lkIHZpc2l0Q2hhbm5lbFdyYXBwZXJzKFZpc2l0b3ImKTsKICAgICAKIHByaXZhdGU6
CiAgICAgQXVkaW9CdWZmZXIodW5zaWduZWQgbnVtYmVyT2ZDaGFubmVscywgc2l6ZV90IGxlbmd0
aCwgZmxvYXQgc2FtcGxlUmF0ZSwgTGVnYWN5UHJldmVudERldGFjaGluZyA9IExlZ2FjeVByZXZl
bnREZXRhY2hpbmc6Ok5vKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0RPTUdD
T3V0cHV0Q29uc3RyYWludC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvRE9NR0NPdXRwdXRDb25zdHJhaW50LmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvRE9NR0NPdXRwdXRDb25zdHJhaW50LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDksNyArNDksOCBAQCBET01HQ091dHB1dENvbnN0cmFpbnQ6On5ET01HQ091
dHB1dENvbnN0CiB7CiB9CiAKLXZvaWQgRE9NR0NPdXRwdXRDb25zdHJhaW50OjpleGVjdXRlSW1w
bChTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lk
IERPTUdDT3V0cHV0Q29uc3RyYWludDo6ZXhlY3V0ZUltcGxJbXBsKFZpc2l0b3ImIHZpc2l0b3Ip
CiB7CiAgICAgSGVhcCYgaGVhcCA9IG1fdm0uaGVhcDsKICAgICAKQEAgLTYwLDE1ICs2MSwxOSBA
QCB2b2lkIERPTUdDT3V0cHV0Q29uc3RyYWludDo6ZXhlY3V0ZUltcGwoCiAgICAgCiAgICAgbV9j
bGllbnREYXRhLmZvckVhY2hPdXRwdXRDb25zdHJhaW50U3BhY2UoCiAgICAgICAgIFsmXSAoU3Vi
c3BhY2UmIHN1YnNwYWNlKSB7Ci0gICAgICAgICAgICBhdXRvIGZ1bmMgPSBbXSAoU2xvdFZpc2l0
b3ImIHZpc2l0b3IsIEhlYXBDZWxsKiBoZWFwQ2VsbCwgSGVhcENlbGw6OktpbmQpIHsKKyAgICAg
ICAgICAgIGF1dG8gZnVuYyA9IFtdIChWaXNpdG9yJiB2aXNpdG9yLCBIZWFwQ2VsbCogaGVhcENl
bGwsIEhlYXBDZWxsOjpLaW5kKSB7CiAgICAgICAgICAgICAgICAgU2V0Um9vdE1hcmtSZWFzb25T
Y29wZSByb290U2NvcGUodmlzaXRvciwgUm9vdE1hcmtSZWFzb246OkRPTUdDT3V0cHV0KTsKICAg
ICAgICAgICAgICAgICBKU0NlbGwqIGNlbGwgPSBzdGF0aWNfY2FzdDxKU0NlbGwqPihoZWFwQ2Vs
bCk7CiAgICAgICAgICAgICAgICAgY2VsbC0+bWV0aG9kVGFibGUodmlzaXRvci52bSgpKS0+dmlz
aXRPdXRwdXRDb25zdHJhaW50cyhjZWxsLCB2aXNpdG9yKTsKICAgICAgICAgICAgIH07CiAgICAg
ICAgICAgICAKLSAgICAgICAgICAgIHZpc2l0b3IuYWRkUGFyYWxsZWxDb25zdHJhaW50VGFzayhz
dWJzcGFjZS5mb3JFYWNoTWFya2VkQ2VsbEluUGFyYWxsZWwoZnVuYykpOworICAgICAgICAgICAg
UmVmUHRyPFNoYXJlZFRhc2s8dm9pZChWaXNpdG9yJik+PiB0YXNrID0gc3Vic3BhY2UudGVtcGxh
dGUgZm9yRWFjaE1hcmtlZENlbGxJblBhcmFsbGVsPFZpc2l0b3I+KGZ1bmMpOworICAgICAgICAg
ICAgdmlzaXRvci5hZGRQYXJhbGxlbENvbnN0cmFpbnRUYXNrKHRhc2spOwogICAgICAgICB9KTsK
IH0KICAgICAgICAgCit2b2lkIERPTUdDT3V0cHV0Q29uc3RyYWludDo6ZXhlY3V0ZUltcGwoQWJz
dHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikgeyBleGVjdXRlSW1wbEltcGwodmlzaXRvcik7IH0K
K3ZvaWQgRE9NR0NPdXRwdXRDb25zdHJhaW50OjpleGVjdXRlSW1wbChTbG90VmlzaXRvciYgdmlz
aXRvcikgeyBleGVjdXRlSW1wbEltcGwodmlzaXRvcik7IH0KKwogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9ET01HQ091dHB1dENvbnN0
cmFpbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9ET01HQ091
dHB1dENvbnN0cmFpbnQuaAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvRE9NR0NPdXRwdXRDb25zdHJhaW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMTggQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00Miw5
ICs0MiwxMiBAQCBwdWJsaWM6CiAgICAgfkRPTUdDT3V0cHV0Q29uc3RyYWludCgpOwogICAgIAog
cHJvdGVjdGVkOgorICAgIHZvaWQgZXhlY3V0ZUltcGwoSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9y
Jikgb3ZlcnJpZGU7CiAgICAgdm9pZCBleGVjdXRlSW1wbChKU0M6OlNsb3RWaXNpdG9yJikgb3Zl
cnJpZGU7CiAKIHByaXZhdGU6CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCBl
eGVjdXRlSW1wbEltcGwoVmlzaXRvciYpOworCiAgICAgSlNDOjpWTSYgbV92bTsKICAgICBKU1ZN
Q2xpZW50RGF0YSYgbV9jbGllbnREYXRhOwogICAgIHVpbnQ2NF90IG1fbGFzdEV4ZWN1dGlvblZl
cnNpb247CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Fib3J0Q29udHJvbGxl
ckN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNB
Ym9ydENvbnRyb2xsZXJDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0Fib3J0Q29udHJvbGxlckN1c3RvbS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorKiBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAqCiAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI4
LDkgKzI4LDEyIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBKU0Fib3J0Q29udHJv
bGxlcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikK
K3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTQWJvcnRDb250cm9sbGVyOjp2aXNp
dEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHZpc2l0b3IuYWRk
T3BhcXVlUm9vdCgmd3JhcHBlZCgpLnNpZ25hbCgpKTsKIH0KIAorREVGSU5FX1ZJU0lUX0FERElU
SU9OQUxfQ0hJTERSRU4oSlNBYm9ydENvbnRyb2xsZXIpOworCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Fib3J0U2lnbmFsQ3VzdG9t
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Fib3J0U2ln
bmFsQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNBYm9ydFNpZ25hbEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorKiBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAqCiAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI4LDcgKzI4LDcgQEAKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi1ib29sIEpTQWJvcnRTaWduYWxPd25lcjo6aXNSZWFjaGFi
bGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQq
LCBKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQorYm9vbCBK
U0Fib3J0U2lnbmFsT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxl
PEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiB2
aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQogewogICAgIGF1dG8mIGFib3J0U2lnbmFsID0g
SlNDOjpqc0Nhc3Q8SlNBYm9ydFNpZ25hbCo+KGhhbmRsZS5zbG90KCktPmFzQ2VsbCgpKS0+d3Jh
cHBlZCgpOwogICAgIGlmIChhYm9ydFNpZ25hbC5pc0ZpcmluZ0V2ZW50TGlzdGVuZXJzKCkpIHsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXR0ckN1c3RvbS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNBdHRyQ3VzdG9tLmNwcAkocmV2
aXNpb24gMjcyOTAyKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNBdHRyQ3VzdG9t
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDcsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDA3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMywxMCArMzMsMTMgQEAKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi12b2lkIEpTQXR0cjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlND
OjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lk
IEpTQXR0cjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAg
ICBpZiAoRWxlbWVudCogZWxlbWVudCA9IHdyYXBwZWQoKS5vd25lckVsZW1lbnQoKSkKICAgICAg
ICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHJvb3QoZWxlbWVudCkpOwogfQogCitERUZJTkVfVklT
SVRfQURESVRJT05BTF9DSElMRFJFTihKU0F0dHIpOworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0F1ZGlvQnVmZmVyQ3VzdG9tLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0F1ZGlvQnVmZmVy
Q3VzdG9tLmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNBdWRpb0J1ZmZlckN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzEsMTEgKzMxLDE0IEBA
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCi12b2lkIEpTQXVk
aW9CdWZmZXI6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQor
dGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNBdWRpb0J1ZmZlcjo6dmlzaXRBZGRp
dGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB3cmFwcGVkKCkudmlzaXRD
aGFubmVsV3JhcHBlcnModmlzaXRvcik7CiB9CiAKK0RFRklORV9WSVNJVF9BRERJVElPTkFMX0NI
SUxEUkVOKEpTQXVkaW9CdWZmZXIpOworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRp
ZiAvLyBFTkFCTEUoV0VCX0FVRElPKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNBdWRpb1RyYWNrQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0F1ZGlvVHJhY2tDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0F1ZGlvVHJhY2tDdXN0b20uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAyMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTM1LDExICszNSwxNCBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogdXNpbmcgbmFtZXNwYWNl
IEpTQzsKIAotdm9pZCBKU0F1ZGlvVHJhY2s6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNBdWRp
b1RyYWNrOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAg
IHZpc2l0b3IuYWRkT3BhcXVlUm9vdChyb290KCZ3cmFwcGVkKCkpKTsKIH0KIAorREVGSU5FX1ZJ
U0lUX0FERElUSU9OQUxfQ0hJTERSRU4oSlNBdWRpb1RyYWNrKTsKKwogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQogCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXVk
aW9UcmFja0xpc3RDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTQXVkaW9UcmFja0xpc3RDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI5MDIpCisrKyBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0F1ZGlvVHJhY2tMaXN0Q3VzdG9tLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0zNiwxMSArMzYsMTQgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5h
bWVzcGFjZSBKU0M7CiAKLXZvaWQgSlNBdWRpb1RyYWNrTGlzdDo6dmlzaXRBZGRpdGlvbmFsQ2hp
bGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgor
dm9pZCBKU0F1ZGlvVHJhY2tMaXN0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2
aXNpdG9yKQogewogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChyb290KHdyYXBwZWQoKS5lbGVt
ZW50KCkpKTsKIH0KIAorREVGSU5FX1ZJU0lUX0FERElUSU9OQUxfQ0hJTERSRU4oSlNBdWRpb1Ry
YWNrTGlzdCk7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0F1ZGlvV29ya2xldFByb2Nlc3NvckN1c3RvbS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNBdWRpb1dvcmtsZXRQ
cm9jZXNzb3JDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0F1ZGlvV29ya2xldFByb2Nlc3NvckN1c3RvbS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMC0yMDIxIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtMzEsNyArMzEsOCBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogdXNpbmcgbmFtZXNwYWNlIEpT
QzsKIAotdm9pZCBKU0F1ZGlvV29ya2xldFByb2Nlc3Nvcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRy
ZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9p
ZCBKU0F1ZGlvV29ya2xldFByb2Nlc3Nvcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRv
ciYgdmlzaXRvcikKIHsKICAgICBhdXRvJiBwcm9jZXNzb3IgPSB3cmFwcGVkKCk7CiAgICAgcHJv
Y2Vzc29yLmpzSW5wdXRzV3JhcHBlcigpLnZpc2l0KHZpc2l0b3IpOwpAQCAtMzksNiArNDAsOCBA
QCB2b2lkIEpTQXVkaW9Xb3JrbGV0UHJvY2Vzc29yOjp2aXNpdEFkZGl0CiAgICAgcHJvY2Vzc29y
LmpzUGFyYW1WYWx1ZXNXcmFwcGVyKCkudmlzaXQodmlzaXRvcik7CiB9CiAKK0RFRklORV9WSVNJ
VF9BRERJVElPTkFMX0NISUxEUkVOKEpTQXVkaW9Xb3JrbGV0UHJvY2Vzc29yKTsKKwogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQl9BVURJTykKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ1NTUnVsZUN1c3RvbS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDU1NSdWxlQ3VzdG9tLmNwcAkocmV2aXNp
b24gMjcyOTAyKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDU1NSdWxlQ3VzdG9t
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDA3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01MSwxMSArNTEsMTQgQEAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKLXZvaWQgSlNDU1NSdWxlOjp2aXNpdEFkZGl0
aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZp
c2l0b3I+Cit2b2lkIEpTQ1NTUnVsZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYg
dmlzaXRvcikKIHsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qocm9vdCgmd3JhcHBlZCgpKSk7
CiB9CiAKK0RFRklORV9WSVNJVF9BRERJVElPTkFMX0NISUxEUkVOKEpTQ1NTUnVsZSk7CisKIEpT
VmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0dsb2JhbE9iamVjdCosIEpTRE9NR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIFJlZjxDU1NSdWxlPiYmIHJ1bGUpCiB7CiAgICAgc3dpdGNoIChydWxl
LT50eXBlKCkpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ1NTUnVsZUxp
c3RDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
Q1NTUnVsZUxpc3RDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0NTU1J1bGVMaXN0Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxOSBBcHBsZSBJbmMuIEFs
bCByaWdodCByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0z
Niw3ICszNiw3IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2UgSlNDOwog
Ci1ib29sIEpTQ1NTUnVsZUxpc3RPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlND
OjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBTbG90VmlzaXRvciYgdmlzaXRv
ciwgY29uc3QgY2hhcioqIHJlYXNvbikKK2Jvb2wgSlNDU1NSdWxlTGlzdE93bmVyOjppc1JlYWNo
YWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9p
ZCosIEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCiB7
CiAgICAgSlNDU1NSdWxlTGlzdCoganNDU1NSdWxlTGlzdCA9IGpzQ2FzdDxKU0NTU1J1bGVMaXN0
Kj4oaGFuZGxlLnNsb3QoKS0+YXNDZWxsKCkpOwogICAgIGlmICghanNDU1NSdWxlTGlzdC0+aGFz
Q3VzdG9tUHJvcGVydGllcyhqc0NTU1J1bGVMaXN0LT52bSgpKSkKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTQ1NTU3R5bGVEZWNsYXJhdGlvbkN1c3RvbS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDU1NTdHlsZURlY2xhcmF0aW9uQ3Vz
dG9tLmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNDU1NTdHlsZURlY2xhcmF0aW9uQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTUxLDkg
KzUxLDEyIEBAIHZvaWQqIHJvb3QoQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUpCiAgICAgcmV0
dXJuIHN0eWxlOwogfQogCi12b2lkIEpTQ1NTU3R5bGVEZWNsYXJhdGlvbjo6dmlzaXRBZGRpdGlv
bmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNp
dG9yPgordm9pZCBKU0NTU1N0eWxlRGVjbGFyYXRpb246OnZpc2l0QWRkaXRpb25hbENoaWxkcmVu
KFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHJvb3QoJndy
YXBwZWQoKSkpOwogfQogCitERUZJTkVfVklTSVRfQURESVRJT05BTF9DSElMRFJFTihKU0NTU1N0
eWxlRGVjbGFyYXRpb24pOworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NhbGxiYWNrRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDYWxsYmFja0RhdGEuY3BwCShyZXZpc2lvbiAyNzI5
MDIpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NhbGxiYWNrRGF0YS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA3LTIw
MDksIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDA3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC05NSwxMiArOTUsMTYgQEAgSlNWYWx1ZSBKU0NhbGxiYWNr
RGF0YTo6aW52b2tlQ2FsbGJhY2soSgogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQgSlND
YWxsYmFja0RhdGFXZWFrOjp2aXNpdEpTRnVuY3Rpb24oSlNDOjpTbG90VmlzaXRvciYgdmlzdG9y
KQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNDYWxsYmFja0RhdGFXZWFrOjp2
aXNpdEpTRnVuY3Rpb24oVmlzaXRvciYgdmlzaXRvcikKIHsKLSAgICB2aXN0b3IuYXBwZW5kKG1f
Y2FsbGJhY2spOworICAgIHZpc2l0b3IuYXBwZW5kKG1fY2FsbGJhY2spOwogfQogCi1ib29sIEpT
Q2FsbGJhY2tEYXRhV2Vhazo6V2Vha093bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhK
U0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0LCBTbG90VmlzaXRvciYgdmlz
aXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikKK3RlbXBsYXRlIHZvaWQgSlNDYWxsYmFja0RhdGFX
ZWFrOjp2aXNpdEpTRnVuY3Rpb24oSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0
ZSB2b2lkIEpTQ2FsbGJhY2tEYXRhV2Vhazo6dmlzaXRKU0Z1bmN0aW9uKEpTQzo6U2xvdFZpc2l0
b3ImKTsKKworYm9vbCBKU0NhbGxiYWNrRGF0YVdlYWs6OldlYWtPd25lcjo6aXNSZWFjaGFibGVG
cm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCwg
QWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikKIHsKICAg
ICBpZiAoVU5MSUtFTFkocmVhc29uKSkKICAgICAgICAgKnJlYXNvbiA9ICJDb250ZXh0IGlzIG9w
YXF1ZSByb290IjsgLy8gRklYTUU6IHdoYXQgaXMgdGhlIGNvbnRleHQuCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NhbGxiYWNrRGF0YS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2FsbGJhY2tEYXRhLmgJKHJldmlzaW9uIDI3MjkwMikK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2FsbGJhY2tEYXRhLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDksIDIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3
LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0xMTMsMTEgKzExMywxMSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVy
biBKU0NhbGxiYWNrRGF0YTo6aW52b2tlQ2FsbGJhY2soKmdsb2JhbE9iamVjdCwgY2FsbGJhY2so
KSwgdGhpc1ZhbHVlLCBhcmdzLCBjYWxsYmFja1R5cGUsIGZ1bmN0aW9uTmFtZSwgcmV0dXJuZWRF
eGNlcHRpb24pOwogICAgIH0KIAotICAgIHZvaWQgdmlzaXRKU0Z1bmN0aW9uKEpTQzo6U2xvdFZp
c2l0b3ImKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIHZpc2l0SlNGdW5j
dGlvbihWaXNpdG9yJik7CiAKIHByaXZhdGU6CiAgICAgY2xhc3MgV2Vha093bmVyIDogcHVibGlj
IEpTQzo6V2Vha0hhbmRsZU93bmVyIHsKLSAgICAgICAgYm9vbCBpc1JlYWNoYWJsZUZyb21PcGFx
dWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0LCBKU0M6OlNs
b3RWaXNpdG9yJiwgY29uc3QgY2hhcioqKSBvdmVycmlkZTsKKyAgICAgICAgYm9vbCBpc1JlYWNo
YWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250
ZXh0LCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImLCBjb25zdCBjaGFyKiopIG92ZXJyaWRlOwog
ICAgIH07CiAgICAgV2Vha093bmVyIG1fd2Vha093bmVyOwogICAgIEpTQzo6V2VhazxKU0M6OkpT
T2JqZWN0PiBtX2NhbGxiYWNrOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlND
YW52YXNSZW5kZXJpbmdDb250ZXh0MkRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQ3VzdG9tLmNwcAko
cmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjQsNyArMjQsNyBAQAogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLWJvb2wgSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRPd25lcjo6
aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5k
bGUsIHZvaWQqLCBKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29u
KQorYm9vbCBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRE93bmVyOjppc1JlYWNoYWJsZUZyb21P
cGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIEpTQzo6
QWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikKIHsKICAg
ICBpZiAoVU5MSUtFTFkocmVhc29uKSkKICAgICAgICAgKnJlYXNvbiA9ICJDYW52YXMgaXMgb3Bh
cXVlIHJvb3QiOwpAQCAtMzQsOSArMzQsMTIgQEAgYm9vbCBKU0NhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyRE93bmVyOjppcwogICAgIHJldHVybiB2aXNpdG9yLmNvbnRhaW5zT3BhcXVlUm9vdChyb290
KTsKIH0KIAotdm9pZCBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6dmlzaXRBZGRpdGlvbmFs
Q2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZp
c2l0b3I+Cit2b2lkIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjp2aXNpdEFkZGl0aW9uYWxD
aGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChy
b290KHdyYXBwZWQoKS5jYW52YXMoKSkpOwogfQogCitERUZJTkVfVklTSVRfQURESVRJT05BTF9D
SElMRFJFTihKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCk7CisKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9tRXZlbnRDdXN0
b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9t
RXZlbnRDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0N1c3RvbUV2ZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQyLDEw
ICs0MiwxMyBAQCBKU0M6OkpTVmFsdWUgSlNDdXN0b21FdmVudDo6ZGV0YWlsKEpTQzo6CiAgICAg
fSk7CiB9CiAKLXZvaWQgSlNDdXN0b21FdmVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlND
OjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lk
IEpTQ3VzdG9tRXZlbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3Ip
CiB7CiAgICAgd3JhcHBlZCgpLmRldGFpbCgpLnZpc2l0KHZpc2l0b3IpOwogICAgIHdyYXBwZWQo
KS5jYWNoZWREZXRhaWwoKS52aXNpdCh2aXNpdG9yKTsKIH0KIAorREVGSU5FX1ZJU0lUX0FERElU
SU9OQUxfQ0hJTERSRU4oSlNDdXN0b21FdmVudCk7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQnVpbHRpbkNvbnN0cnVjdG9y
QmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01C
dWlsdGluQ29uc3RydWN0b3JCYXNlLmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNET01CdWlsdGluQ29uc3RydWN0b3JCYXNlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDEg
SGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDQtMjAx
NyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDA0
LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogIENvcHlyaWdodCAoQykg
MjAwNyBTYW11ZWwgV2VpbmlnIDxzYW1Ad2Via2l0Lm9yZz4KICAqICBDb3B5cmlnaHQgKEMpIDIw
MTMgTWljaGFlbCBQcnVldHQgPG1pY2hhZWxANjhrLm9yZz4KICAqCkBAIC00NSw3ICs0NSw4IEBA
IHZvaWQgSlNET01CdWlsdGluQ29uc3RydWN0b3JCYXNlOjpjYWxsRnUKICAgICBKU0M6OmNhbGwo
JmxleGljYWxHbG9iYWxPYmplY3QsICZmdW5jdGlvbiwgY2FsbERhdGEsICZ0aGlzT2JqZWN0LCBh
cmd1bWVudHMpOwogfQogCi12b2lkIEpTRE9NQnVpbHRpbkNvbnN0cnVjdG9yQmFzZTo6dmlzaXRD
aGlsZHJlbihKU0M6OkpTQ2VsbCogY2VsbCwgSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3Rl
bXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTRE9NQnVpbHRpbkNvbnN0cnVjdG9yQmFz
ZTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDOjpKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3Ip
CiB7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0RPTUJ1aWx0aW5Db25zdHJ1Y3Rv
ckJhc2UqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3Qs
IGluZm8oKSk7CkBAIC01Myw2ICs1NCw4IEBAIHZvaWQgSlNET01CdWlsdGluQ29uc3RydWN0b3JC
YXNlOjp2aXNpdEMKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2luaXRpYWxpemVG
dW5jdGlvbik7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU0RPTUJ1aWx0aW5Db25zdHJ1
Y3RvckJhc2UpOworCiBKU0M6Oklzb1N1YnNwYWNlKiBKU0RPTUJ1aWx0aW5Db25zdHJ1Y3RvckJh
c2U6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKIHsKICAgICByZXR1cm4gJnN0YXRpY19j
YXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSktPmRvbUJ1aWx0aW5Db25zdHJ1Y3Rv
clNwYWNlKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJ1aWx0aW5D
b25zdHJ1Y3RvckJhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0RPTUJ1aWx0aW5Db25zdHJ1Y3RvckJhc2UuaAkocmV2aXNpb24gMjcyOTAyKQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CdWlsdGluQ29uc3RydWN0b3JCYXNlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMjAxNSwg
MjAxNiBDYW5vbiBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiAgQ29weXJpZ2h0IChDKSAy
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIw
MTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAq
ICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVi
bGljCkBAIC00Miw3ICs0Miw3IEBAIHByb3RlY3RlZDoKICAgICB7CiAgICAgfQogCi0gICAgc3Rh
dGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKTsK
KyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgSlNDOjpKU0Z1bmN0aW9uKiBpbml0
aWFsaXplRnVuY3Rpb24oKTsKICAgICB2b2lkIHNldEluaXRpYWxpemVGdW5jdGlvbihKU0M6OlZN
JiwgSlNDOjpKU0Z1bmN0aW9uJik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0RPTUdsb2JhbE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNET01HbG9iYWxPYmplY3QuY3BwCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTggQXBwbGUgSW5j
LiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMjEgQXBwbGUg
SW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC0yMzgsNyArMjM4LDggQEAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogSlNET01HbG9iYWxP
YmplYwogICAgIHJldHVybiBudWxscHRyOwogfQogCi12b2lkIEpTRE9NR2xvYmFsT2JqZWN0Ojp2
aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0
ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0RPTUdsb2JhbE9iamVjdDo6dmlzaXRDaGlsZHJl
bkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTRE9NR2xvYmFs
T2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oY2VsbCk7CiAg
ICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtMjYw
LDYgKzI2MSw4IEBAIHZvaWQgSlNET01HbG9iYWxPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlMKICAg
ICB0aGlzT2JqZWN0LT5tX2J1aWx0aW5JbnRlcm5hbEZ1bmN0aW9ucy52aXNpdCh2aXNpdG9yKTsK
IH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTRE9NR2xvYmFsT2JqZWN0KTsKKwogdm9pZCBK
U0RPTUdsb2JhbE9iamVjdDo6cHJvbWlzZVJlamVjdGlvblRyYWNrZXIoSlNHbG9iYWxPYmplY3Qq
IGpzR2xvYmFsT2JqZWN0LCBKU1Byb21pc2UqIHByb21pc2UsIEpTUHJvbWlzZVJlamVjdGlvbk9w
ZXJhdGlvbiBvcGVyYXRpb24pCiB7CiAgICAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9y
Zy9tdWx0aXBhZ2Uvd2ViYXBwYXBpcy5odG1sI3RoZS1ob3N0cHJvbWlzZXJlamVjdGlvbnRyYWNr
ZXItaW1wbGVtZW50YXRpb24KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9N
R2xvYmFsT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNET01HbG9iYWxPYmplY3QuaAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNET01HbG9iYWxPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxOCBBcHBsZSBJbmMuIEFsbCBSaWdo
dHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAyMSBBcHBsZSBJbmMuIEFsbCBS
aWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY5LDcg
KzY5LDcgQEAgcHVibGljOgogICAgIC8vIE1ha2UgYmluZGluZyBjb2RlIGdlbmVyYXRpb24gZWFz
aWVyLgogICAgIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QoKSB7IHJldHVybiB0aGlz
OyB9CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQzo6SlNDZWxsKiwgSlNDOjpT
bG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBET01XcmFw
cGVyV29ybGQmIHdvcmxkKCkgeyByZXR1cm4gbV93b3JsZC5nZXQoKTsgfQogICAgIGJvb2wgd29y
bGRJc05vcm1hbCgpIGNvbnN0IHsgcmV0dXJuIG1fd29ybGRJc05vcm1hbDsgfQpJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01HdWFyZGVkT2JqZWN0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01HdWFyZGVkT2JqZWN0LmgJKHJldmlz
aW9uIDI3MjkwMikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR3VhcmRlZE9i
amVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTQwLDcgKzQwLDcgQEAgcHVibGljOgogCiAgICAgYm9vbCBp
c1N1c3BlbmRlZCgpIGNvbnN0IHsgcmV0dXJuICFtX2d1YXJkZWQgfHwgIWNhbkludm9rZUNhbGxi
YWNrKCk7IH0gLy8gVGhlIHdyYXBwZXIgd29ybGQgaGFzIGdvbmUgYXdheSBvciBhY3RpdmUgRE9N
IG9iamVjdHMgaGF2ZSBiZWVuIHN1c3BlbmRlZC4KIAotICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUo
SlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikgeyB2aXNpdG9yLmFwcGVuZChtX2d1YXJkZWQpOyB9
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCB2aXNpdEFnZ3JlZ2F0ZShWaXNp
dG9yJiB2aXNpdG9yKSB7IHZpc2l0b3IuYXBwZW5kKG1fZ3VhcmRlZCk7IH0KIAogICAgIEpTQzo6
SlNWYWx1ZSBndWFyZGVkT2JqZWN0KCkgY29uc3QgeyByZXR1cm4gbV9ndWFyZGVkLmdldCgpOyB9
CiAgICAgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCgpIGNvbnN0IHsgcmV0dXJuIG1f
Z2xvYmFsT2JqZWN0LmdldCgpOyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0RPTVF1YWRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTRE9NUXVhZEN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTRE9NUXVhZEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzMsNyAr
MzMsOCBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAotdm9p
ZCBKU0RPTVF1YWQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9y
KQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNET01RdWFkOjp2aXNpdEFkZGl0
aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHZpc2l0b3IuYWRkT3BhcXVl
Um9vdChjb25zdF9jYXN0PERPTVBvaW50Kj4oJndyYXBwZWQoKS5wMSgpKSk7CiAgICAgdmlzaXRv
ci5hZGRPcGFxdWVSb290KGNvbnN0X2Nhc3Q8RE9NUG9pbnQqPigmd3JhcHBlZCgpLnAyKCkpKTsK
QEAgLTQxLDQgKzQyLDYgQEAgdm9pZCBKU0RPTVF1YWQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVu
KAogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChjb25zdF9jYXN0PERPTVBvaW50Kj4oJndyYXBw
ZWQoKS5wNCgpKSk7CiB9CiAKLX0KK0RFRklORV9WSVNJVF9BRERJVElPTkFMX0NISUxEUkVOKEpT
RE9NUXVhZCk7CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTRE9NV2luZG93Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0N1c3RvbS5jcHAJKHJldmlzaW9uIDI3Mjkw
MikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93Q3VzdG9tLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDct
MjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMp
IDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBAIC0x
MTksNyArMTE5LDggQEAgSlNDX0RFRklORV9DVVNUT01fR0VUVEVSKGpzRE9NV2luZG93SW5zdAog
ICAgIHJldHVybiBub25DYWNoaW5nU3RhdGljRnVuY3Rpb25HZXR0ZXJJbXBsPGpzRE9NV2luZG93
SW5zdGFuY2VGdW5jdGlvbl9wb3N0TWVzc2FnZSwgMj4oZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5h
bWUpOwogfQogCi12b2lkIEpTRE9NV2luZG93Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90
VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTRE9N
V2luZG93Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAg
IGlmIChGcmFtZSogZnJhbWUgPSB3cmFwcGVkKCkuZnJhbWUoKSkKICAgICAgICAgdmlzaXRvci5h
ZGRPcGFxdWVSb290KGZyYW1lKTsKQEAgLTEzMiw2ICsxMzMsOCBAQCB2b2lkIEpTRE9NV2luZG93
Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlCiAgICAgd3JhcHBlZCgpLnZpc2l0SlNFdmVudExpc3Rl
bmVycyh2aXNpdG9yKTsKIH0KIAorREVGSU5FX1ZJU0lUX0FERElUSU9OQUxfQ0hJTERSRU4oSlNE
T01XaW5kb3cpOworCiAjaWYgRU5BQkxFKFVTRVJfTUVTU0FHRV9IQU5ETEVSUykKIEpTQ19ERUZJ
TkVfQ1VTVE9NX0dFVFRFUihqc0RPTVdpbmRvd193ZWJraXQsIChKU0dsb2JhbE9iamVjdCogbGV4
aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUp
KQogewpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNEZXByZWNhdGVkQ1NTT01W
YWx1ZUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNEZXByZWNhdGVkQ1NTT01WYWx1ZUN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjkwMikKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGVwcmVjYXRlZENTU09NVmFsdWVDdXN0b20uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAw
Ny0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAwNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMzUsNyArMzUsNyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewog
dXNpbmcgbmFtZXNwYWNlIEpTQzsKIAotYm9vbCBKU0RlcHJlY2F0ZWRDU1NPTVZhbHVlT3duZXI6
OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFu
ZGxlLCB2b2lkKiwgU2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCiti
b29sIEpTRGVwcmVjYXRlZENTU09NVmFsdWVPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9v
dHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBBYnN0cmFjdFNsb3RW
aXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQogewogICAgIEpTRGVwcmVjYXRl
ZENTU09NVmFsdWUqIGpzQ1NTVmFsdWUgPSBqc0Nhc3Q8SlNEZXByZWNhdGVkQ1NTT01WYWx1ZSo+
KGhhbmRsZS5zbG90KCktPmFzQ2VsbCgpKTsKICAgICBpZiAoIWpzQ1NTVmFsdWUtPmhhc0N1c3Rv
bVByb3BlcnRpZXMoanNDU1NWYWx1ZS0+dm0oKSkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0RvY3VtZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0RvY3VtZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNEb2N1bWVudEN1c3RvbS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDksIDIw
MTEsIDIwMTYsIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDA3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCkBAIC05MSwxMSArOTEsMTQgQEAgSlNWYWx1ZSB0b0pTKEpTR2xvYmFsT2Jq
ZWN0KiBsZXhpY2FsR2xvYgogICAgIHJldHVybiB0b0pTTmV3bHlDcmVhdGVkKGxleGljYWxHbG9i
YWxPYmplY3QsIGdsb2JhbE9iamVjdCwgUmVmPERvY3VtZW50Pihkb2N1bWVudCkpOwogfQogCi12
b2lkIEpTRG9jdW1lbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNp
dG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNEb2N1bWVudDo6dmlzaXRB
ZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB2aXNpdG9yLmFkZE9w
YXF1ZVJvb3Qoc3RhdGljX2Nhc3Q8U2NyaXB0RXhlY3V0aW9uQ29udGV4dCo+KCZ3cmFwcGVkKCkp
KTsKIH0KIAorREVGSU5FX1ZJU0lUX0FERElUSU9OQUxfQ0hJTERSRU4oSlNEb2N1bWVudCk7CisK
IHZvaWQgSlNEb2N1bWVudDo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXIm
IGFuYWx5emVyKQogewogICAgIEJhc2U6OmFuYWx5emVIZWFwKGNlbGwsIGFuYWx5emVyKTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXJyb3JFdmVudEN1c3RvbS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFcnJvckV2ZW50Q3VzdG9t
LmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNF
cnJvckV2ZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAg
KiBDb3B5cmlnaHQgKEMpIDIwMTggWXVzdWtlIFN1enVraSA8eXVzdWtlc3V6dWtpQHNsb3dzdGFy
dC5vcmc+LgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjgsOSArMjksMTIgQEAK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIEpTRXJyb3JFdmVudDo6dmlzaXRBZGRpdGlv
bmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1l
IFZpc2l0b3I+Cit2b2lkIEpTRXJyb3JFdmVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlz
aXRvciYgdmlzaXRvcikKIHsKICAgICB3cmFwcGVkKCkub3JpZ2luYWxFcnJvcigpLnZpc2l0KHZp
c2l0b3IpOwogfQogCitERUZJTkVfVklTSVRfQURESVRJT05BTF9DSElMRFJFTihKU0Vycm9yRXZl
bnQpOworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0V2ZW50TGlzdGVuZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTRXZlbnRMaXN0ZW5lci5jcHAJKHJldmlzaW9uIDI3MjkwMikKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRMaXN0ZW5lci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMjAwMSBQZXRlciBLZWxs
eSAocG1rQHBvc3QuY29tKQotICogIENvcHlyaWdodCAoQykgMjAwMy0yMDE5IEFwcGxlIEluYy4g
QWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAyMSBBcHBsZSBJ
bmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCkBAIC03OCw3ICs3
OCw4IEBAIEpTT2JqZWN0KiBKU0V2ZW50TGlzdGVuZXI6OmluaXRpYWxpemVKU0YKICAgICByZXR1
cm4gbnVsbHB0cjsKIH0KIAotdm9pZCBKU0V2ZW50TGlzdGVuZXI6OnZpc2l0SlNGdW5jdGlvbihT
bG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+CitpbmxpbmUg
dm9pZCBKU0V2ZW50TGlzdGVuZXI6OnZpc2l0SlNGdW5jdGlvbkltcGwoVmlzaXRvciYgdmlzaXRv
cikKIHsKICAgICAvLyBJZiBtX3dyYXBwZXIgaXMgbnVsbCwgd2UgYXJlIG5vdCBrZWVwaW5nIG1f
anNGdW5jdGlvbiBhbGl2ZS4KICAgICBpZiAoIW1fd3JhcHBlcikKQEAgLTg3LDYgKzg4LDkgQEAg
dm9pZCBKU0V2ZW50TGlzdGVuZXI6OnZpc2l0SlNGdW5jdGlvbihTbAogICAgIHZpc2l0b3IuYXBw
ZW5kKG1fanNGdW5jdGlvbik7CiB9CiAKK3ZvaWQgSlNFdmVudExpc3RlbmVyOjp2aXNpdEpTRnVu
Y3Rpb24oQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikgeyB2aXNpdEpTRnVuY3Rpb25JbXBs
KHZpc2l0b3IpOyB9Cit2b2lkIEpTRXZlbnRMaXN0ZW5lcjo6dmlzaXRKU0Z1bmN0aW9uKFNsb3RW
aXNpdG9yJiB2aXNpdG9yKSB7IHZpc2l0SlNGdW5jdGlvbkltcGwodmlzaXRvcik7IH0KKwogc3Rh
dGljIHZvaWQgaGFuZGxlQmVmb3JlVW5sb2FkRXZlbnRSZXR1cm5WYWx1ZShCZWZvcmVVbmxvYWRF
dmVudCYgZXZlbnQsIGNvbnN0IFN0cmluZyYgcmV0dXJuVmFsdWUpCiB7CiAgICAgaWYgKHJldHVy
blZhbHVlLmlzTnVsbCgpKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVu
dExpc3RlbmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNF
dmVudExpc3RlbmVyLmgJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTRXZlbnRMaXN0ZW5lci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAog
LyoKICAqICBDb3B5cmlnaHQgKEMpIDIwMDEgUGV0ZXIgS2VsbHkgKHBta0Bwb3N0LmNvbSkKLSAq
ICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwpAQCAtNjIsNiArNjIsOSBAQCBwdWJsaWM6CiAKIHBy
aXZhdGU6CiAgICAgdmlydHVhbCBKU0M6OkpTT2JqZWN0KiBpbml0aWFsaXplSlNGdW5jdGlvbihT
Y3JpcHRFeGVjdXRpb25Db250ZXh0JikgY29uc3Q7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPiB2b2lkIHZpc2l0SlNGdW5jdGlvbkltcGwoVmlzaXRvciYpOworICAgIHZvaWQgdmlz
aXRKU0Z1bmN0aW9uKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpIGZpbmFsOwogICAgIHZvaWQg
dmlzaXRKU0Z1bmN0aW9uKEpTQzo6U2xvdFZpc2l0b3ImKSBmaW5hbDsKIAogcHJvdGVjdGVkOgpJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudFRhcmdldEN1c3RvbS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudFRhcmdldEN1
c3RvbS5jcHAJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTRXZlbnRUYXJnZXRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAwOC0yMDE3IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDIxIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBS
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNzIsOSArNzIsMTIg
QEAgc3RkOjp1bmlxdWVfcHRyPEpTRXZlbnRUYXJnZXRXcmFwcGVyPiBqcwogICAgIHJldHVybiBu
dWxscHRyOwogfQogCi12b2lkIEpTRXZlbnRUYXJnZXQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVu
KFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQg
SlNFdmVudFRhcmdldDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikK
IHsKICAgICB3cmFwcGVkKCkudmlzaXRKU0V2ZW50TGlzdGVuZXJzKHZpc2l0b3IpOwogfQogCitE
RUZJTkVfVklTSVRfQURESVRJT05BTF9DSElMRFJFTihKU0V2ZW50VGFyZ2V0KTsKKwogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNGZXRj
aEV2ZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0ZldGNoRXZlbnRDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0ZldGNoRXZlbnRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMw
LDExICszMCwxNCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgSlNGZXRjaEV2ZW50
Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVt
cGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNGZXRjaEV2ZW50Ojp2aXNpdEFkZGl0aW9u
YWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9v
dCgmd3JhcHBlZCgpLnJlcXVlc3QoKSk7CiB9CiAKLX0KK0RFRklORV9WSVNJVF9BRERJVElPTkFM
X0NISUxEUkVOKEpTRmV0Y2hFdmVudCk7CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2Vu
ZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxDYW52YXNFbGVtZW50
Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hU
TUxDYW52YXNFbGVtZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNIVE1MQ2FudmFzRWxlbWVudEN1c3RvbS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMC0yMDIxIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMzEsOSArMzEsMTIgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIEpTSFRN
TENhbnZhc0VsZW1lbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3Im
IHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0hUTUxDYW52YXNF
bGVtZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAg
IHZpc2l0b3IuYWRkT3BhcXVlUm9vdChzdGF0aWNfY2FzdDxDYW52YXNCYXNlKj4oJndyYXBwZWQo
KSkpOwogfQogCitERUZJTkVfVklTSVRfQURESVRJT05BTF9DSElMRFJFTihKU0hUTUxDYW52YXNF
bGVtZW50KTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNIVE1MVGVtcGxhdGVFbGVtZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxUZW1wbGF0ZUVsZW1lbnRDdXN0b20u
Y3BwCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hU
TUxUZW1wbGF0ZUVsZW1lbnRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBA
QAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKQEAgLTM3LDEwICszOCwxMyBA
QAogbmFtZXNwYWNlIFdlYkNvcmUgewogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAotdm9pZCBKU0hU
TUxUZW1wbGF0ZUVsZW1lbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0
b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0hUTUxUZW1w
bGF0ZUVsZW1lbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7
CiAgICAgaWYgKGF1dG8qIGNvbnRlbnQgPSB3cmFwcGVkKCkuY29udGVudElmQXZhaWxhYmxlKCkp
CiAgICAgICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChyb290KGNvbnRlbnQpKTsKIH0KIAorREVG
SU5FX1ZJU0lUX0FERElUSU9OQUxfQ0hJTERSRU4oSlNIVE1MVGVtcGxhdGVFbGVtZW50KTsKKwog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNIaXN0b3J5Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0hpc3RvcnlDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0hpc3RvcnlDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOC0yMDE4IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
NDQsOSArNDQsMTIgQEAgSlNWYWx1ZSBKU0hpc3Rvcnk6OnN0YXRlKEpTR2xvYmFsT2JqZWN0Jgog
ICAgIH0pOwogfQogCi12b2lkIEpTSGlzdG9yeTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xv
dFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0hp
c3Rvcnk6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAg
d3JhcHBlZCgpLmNhY2hlZFN0YXRlRm9yR0MoKS52aXNpdCh2aXNpdG9yKTsKIH0KIAorREVGSU5F
X1ZJU0lUX0FERElUSU9OQUxfQ0hJTERSRU4oSlNIaXN0b3J5KTsKKwogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJDdXJzb3JDdXN0
b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCQ3Vy
c29yQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNJREJDdXJzb3JDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTUwLDcgKzUwLDggQEAg
SlNDOjpKU1ZhbHVlIEpTSURCQ3Vyc29yOjpwcmltYXJ5S2V5KEpTQwogICAgIH0pOwogfQogCi12
b2lkIEpTSURCQ3Vyc29yOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlz
aXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTSURCQ3Vyc29yOjp2aXNp
dEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGF1dG8mIGN1cnNv
ciA9IHdyYXBwZWQoKTsKICAgICBpZiAoYXV0byogcmVxdWVzdCA9IGN1cnNvci5yZXF1ZXN0KCkp
CkBAIC01OSw2ICs2MCw4IEBAIHZvaWQgSlNJREJDdXJzb3I6OnZpc2l0QWRkaXRpb25hbENoaWxk
cmUKICAgICBjdXJzb3IucHJpbWFyeUtleVdyYXBwZXIoKS52aXNpdCh2aXNpdG9yKTsKIH0KIAor
REVGSU5FX1ZJU0lUX0FERElUSU9OQUxfQ0hJTERSRU4oSlNJREJDdXJzb3IpOworCiBKU1ZhbHVl
IHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTRE9NR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIFJlZjxJREJDdXJzb3I+JiYgY3Vyc29yKQogewogICAgIGlmIChpczxJ
REJDdXJzb3JXaXRoVmFsdWU+KGN1cnNvcikpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0lEQkN1cnNvcldpdGhWYWx1ZUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJDdXJzb3JXaXRoVmFsdWVDdXN0b20uY3BwCShyZXZp
c2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQkN1cnNvcldp
dGhWYWx1ZUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDMsMTIgKzQzLDE1IEBAIEpTQzo6SlNW
YWx1ZSBKU0lEQkN1cnNvcldpdGhWYWx1ZTo6dmFsdWUKICAgICB9KTsKIH0KIAotdm9pZCBKU0lE
QkN1cnNvcldpdGhWYWx1ZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZp
c2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0lEQkN1cnNvcldpdGhW
YWx1ZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBK
U0lEQkN1cnNvcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4odmlzaXRvcik7CiAgICAgd3JhcHBl
ZCgpLnZhbHVlV3JhcHBlcigpLnZpc2l0KHZpc2l0b3IpOwogfQogCitERUZJTkVfVklTSVRfQURE
SVRJT05BTF9DSElMRFJFTihKU0lEQkN1cnNvcldpdGhWYWx1ZSk7CisKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQpJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJJbmRleEN1c3RvbS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJJbmRleEN1c3RvbS5jcHAJKHJldmlz
aW9uIDI3MjkwMikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCSW5kZXhDdXN0
b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTM0LDExICszNCwxNCBAQAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAotdm9pZCBKU0lEQkluZGV4Ojp2aXNpdEFkZGl0aW9u
YWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0
b3I+Cit2b2lkIEpTSURCSW5kZXg6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZp
c2l0b3IpCiB7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHN0YXRpY19jYXN0PElEQkluZGV4
Jj4od3JhcHBlZCgpKS5vYmplY3RTdG9yZUFzT3BhcXVlUm9vdCgpKTsKIH0KIAorREVGSU5FX1ZJ
U0lUX0FERElUSU9OQUxfQ0hJTERSRU4oSlNJREJJbmRleCk7CisKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQpJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJPYmplY3RTdG9yZUN1c3RvbS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJPYmplY3RTdG9yZUN1c3RvbS5j
cHAJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURC
T2JqZWN0U3RvcmVDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoK
ICAqIENvcHlyaWdodCAoQykgMjAxMiBNaWNoYWVsIFBydWV0dCA8bWljaGFlbEA2OGsub3JnPgor
ICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKQEAgLTM2LDExICszNywxNCBAQAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAotdm9pZCBKU0lEQk9iamVj
dFN0b3JlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3Rl
bXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTSURCT2JqZWN0U3RvcmU6OnZpc2l0QWRk
aXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgc3RhdGljX2Nhc3Q8SURC
T2JqZWN0U3RvcmUmPih3cmFwcGVkKCkpLnZpc2l0UmVmZXJlbmNlZEluZGV4ZXModmlzaXRvcik7
CiB9CiAKLX0KK0RFRklORV9WSVNJVF9BRERJVElPTkFMX0NISUxEUkVOKEpTSURCT2JqZWN0U3Rv
cmUpOworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZgpJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNJREJSZXF1ZXN0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQlJlcXVlc3RDdXN0b20uY3BwCShyZXZpc2lv
biAyNzI5MDIpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQlJlcXVlc3RDdXN0
b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTktMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTg5LDEyICs4OSwxNiBAQCBKU0M6OkpTVmFsdWUgSlNJREJS
ZXF1ZXN0OjpyZXN1bHQoSlNDOjpKCiAgICAgfSk7CiB9CiAKLXZvaWQgSlNJREJSZXF1ZXN0Ojp2
aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5
cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTSURCUmVxdWVzdDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRy
ZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBhdXRvJiByZXF1ZXN0ID0gd3JhcHBlZCgpOwog
ICAgIHJlcXVlc3QucmVzdWx0V3JhcHBlcigpLnZpc2l0KHZpc2l0b3IpOwogICAgIHJlcXVlc3Qu
Y3Vyc29yV3JhcHBlcigpLnZpc2l0KHZpc2l0b3IpOwogfQogCi19CitERUZJTkVfVklTSVRfQURE
SVRJT05BTF9DSElMRFJFTihKU0lEQlJlcXVlc3QpOworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CisKICNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTSURCVHJhbnNhY3Rpb25DdXN0b20uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCVHJhbnNhY3Rpb25DdXN0b20uY3BwCShy
ZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQlRyYW5z
YWN0aW9uQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNCwxMSArMzQsMTQgQEAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKLXZvaWQgSlNJREJUcmFuc2FjdGlv
bjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0
ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0lEQlRyYW5zYWN0aW9uOjp2aXNpdEFkZGl0aW9u
YWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHN0YXRpY19jYXN0PElEQlRyYW5z
YWN0aW9uJj4od3JhcHBlZCgpKS52aXNpdFJlZmVyZW5jZWRPYmplY3RTdG9yZXModmlzaXRvcik7
CiB9CiAKLX0KK0RFRklORV9WSVNJVF9BRERJVElPTkFMX0NISUxEUkVOKEpTSURCVHJhbnNhY3Rp
b24pOworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZgpJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNJbnRlcnNlY3Rpb25PYnNlcnZlckN1c3RvbS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJbnRlcnNlY3Rpb25PYnNlcnZl
ckN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTSW50ZXJzZWN0aW9uT2JzZXJ2ZXJDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAyMCBJZ2FsaWEgUy5MLgorICogQ29w
eXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzAsMTAgKzMxLDEzIEBACiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotdm9pZCBKU0ludGVyc2VjdGlvbk9ic2VydmVyOjp2aXNpdEFkZGl0aW9uYWxD
aGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlz
aXRvcj4KK3ZvaWQgSlNJbnRlcnNlY3Rpb25PYnNlcnZlcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRy
ZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBpZiAoYXV0byogY2FsbGJhY2sgPSB3cmFwcGVk
KCkuY2FsbGJhY2tDb25jdXJyZW50bHkoKSkKICAgICAgICAgY2FsbGJhY2stPnZpc2l0SlNGdW5j
dGlvbih2aXNpdG9yKTsKIH0KIAotfQorREVGSU5FX1ZJU0lUX0FERElUSU9OQUxfQ0hJTERSRU4o
SlNJbnRlcnNlY3Rpb25PYnNlcnZlcik7CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW50ZXJzZWN0aW9uT2JzZXJ2ZXJFbnRyeUN1
c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJbnRl
cnNlY3Rpb25PYnNlcnZlckVudHJ5Q3VzdG9tLmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJbnRlcnNlY3Rpb25PYnNlcnZlckVudHJ5Q3VzdG9t
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMp
IDIwMTggR29vZ2xlIExMQy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTMwLDcgKzMxLDggQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12
b2lkIEpTSW50ZXJzZWN0aW9uT2JzZXJ2ZXJFbnRyeTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4o
SlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2
b2lkIEpTSW50ZXJzZWN0aW9uT2JzZXJ2ZXJFbnRyeTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4o
VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qocm9vdCh3cmFw
cGVkKCkudGFyZ2V0KCkpKTsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qod3JhcHBlZCgpLmJv
dW5kaW5nQ2xpZW50UmVjdCgpKTsKQEAgLTM4LDQgKzQwLDYgQEAgdm9pZCBKU0ludGVyc2VjdGlv
bk9ic2VydmVyRW50cnk6OnZpc2l0QQogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdCh3cmFwcGVk
KCkucm9vdEJvdW5kcygpKTsKIH0KIAotfQorREVGSU5FX1ZJU0lUX0FERElUSU9OQUxfQ0hJTERS
RU4oSlNJbnRlcnNlY3Rpb25PYnNlcnZlckVudHJ5KTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNZXNzYWdlQ2hhbm5lbEN1c3Rv
bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNZXNzYWdl
Q2hhbm5lbEN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTTWVzc2FnZUNoYW5uZWxDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFs
bCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAyMSBBcHBsZSBJbmMu
IEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTMzLDcgKzMzLDggQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIEpTTWVzc2FnZUNo
YW5uZWw6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3Ip
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU01lc3NhZ2VDaGFubmVsOjp2aXNp
dEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGlmIChNZXNzYWdl
UG9ydCogcG9ydCA9IHdyYXBwZWQoKS5wb3J0MSgpKQogICAgICAgICB2aXNpdG9yLmFkZE9wYXF1
ZVJvb3QocG9ydCk7CkBAIC00Miw2ICs0Myw4IEBAIHZvaWQgSlNNZXNzYWdlQ2hhbm5lbDo6dmlz
aXRBZGRpdGlvbmFsQ2gKICAgICAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHBvcnQpOwogfQog
CitERUZJTkVfVklTSVRfQURESVRJT05BTF9DSElMRFJFTihKU01lc3NhZ2VDaGFubmVsKTsKKwog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKENIQU5ORUxfTUVTU0FH
SU5HKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNZXNzYWdlRXZlbnRDdXN0
b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWVzc2Fn
ZUV2ZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNNZXNzYWdlRXZlbnRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYg
KzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTggQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQpAQCAt
NzAsNyArNzAsOCBAQCBKU0M6OkpTVmFsdWUgSlNNZXNzYWdlRXZlbnQ6OmRhdGEoSlNDOjpKCiAg
ICAgfSk7CiB9CiAKLXZvaWQgSlNNZXNzYWdlRXZlbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVu
KEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgor
dm9pZCBKU01lc3NhZ2VFdmVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlz
aXRvcikKIHsKICAgICBXVEY6OnN3aXRjaE9uKHdyYXBwZWQoKS5kYXRhKCksIFsmdmlzaXRvcl0g
KGNvbnN0IEpTVmFsdWVJbldyYXBwZWRPYmplY3QmIGRhdGEpIHsKICAgICAgICAgZGF0YS52aXNp
dCh2aXNpdG9yKTsKQEAgLTg0LDQgKzg1LDYgQEAgdm9pZCBKU01lc3NhZ2VFdmVudDo6dmlzaXRB
ZGRpdGlvbmFsQ2hpbAogICAgIHdyYXBwZWQoKS5jYWNoZWRQb3J0cygpLnZpc2l0KHZpc2l0b3Ip
OwogfQogCitERUZJTkVfVklTSVRfQURESVRJT05BTF9DSElMRFJFTihKU01lc3NhZ2VFdmVudCk7
CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTTWVzc2FnZVBvcnRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTTWVzc2FnZVBvcnRDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI5MDIpCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01lc3NhZ2VQb3J0Q3VzdG9tLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAw
OSwgMjAxNiBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDgtMjAyMSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQg
KEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKQEAgLTMxLDExICszMSwxNCBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogdXNpbmcgbmFtZXNw
YWNlIEpTQzsKIAotdm9pZCBKU01lc3NhZ2VQb3J0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihT
bG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpT
TWVzc2FnZVBvcnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7
CiAgICAgLy8gSWYgd2UgaGF2ZSBhIGxvY2FsbHkgZW50YW5nbGVkIHBvcnQsIHdlIGNhbiBkaXJl
Y3RseSBtYXJrIGl0IGFzIHJlYWNoYWJsZS4gUG9ydHMgdGhhdCBhcmUgcmVtb3RlbHkgZW50YW5n
bGVkIGFyZSBtYXJrZWQgaW4tdXNlIGJ5IG1hcmtBY3RpdmVPYmplY3RzRm9yQ29udGV4dCgpLgog
ICAgIGlmIChNZXNzYWdlUG9ydCogcG9ydCA9IHdyYXBwZWQoKS5sb2NhbGx5RW50YW5nbGVkUG9y
dCgpKQogICAgICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QocG9ydCk7CiB9CiAKK0RFRklORV9W
SVNJVF9BRERJVElPTkFMX0NISUxEUkVOKEpTTWVzc2FnZVBvcnQpOworCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU011dGF0aW9uT2Jz
ZXJ2ZXJDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTTXV0YXRpb25PYnNlcnZlckN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTXV0YXRpb25PYnNlcnZlckN1c3RvbS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zIGFyZQpAQCAtMzksMTIgKzM5LDE1IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBu
YW1lc3BhY2UgSlNDOwogCi12b2lkIEpTTXV0YXRpb25PYnNlcnZlcjo6dmlzaXRBZGRpdGlvbmFs
Q2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZp
c2l0b3I+Cit2b2lkIEpTTXV0YXRpb25PYnNlcnZlcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4o
VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB3cmFwcGVkKCkuY2FsbGJhY2soKS52aXNpdEpTRnVu
Y3Rpb24odmlzaXRvcik7CiB9CiAKLWJvb2wgSlNNdXRhdGlvbk9ic2VydmVyT3duZXI6OmlzUmVh
Y2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2
b2lkKiwgU2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKnJlYXNvbikKK0RFRklORV9W
SVNJVF9BRERJVElPTkFMX0NISUxEUkVOKEpTTXV0YXRpb25PYnNlcnZlcik7CisKK2Jvb2wgSlNN
dXRhdGlvbk9ic2VydmVyT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFu
ZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgQWJzdHJhY3RTbG90VmlzaXRvciYgdmlz
aXRvciwgY29uc3QgY2hhcioqcmVhc29uKQogewogICAgIGZvciAoYXV0byogbm9kZSA6IGpzQ2Fz
dDxKU011dGF0aW9uT2JzZXJ2ZXIqPihoYW5kbGUuc2xvdCgpLT5hc0NlbGwoKSktPndyYXBwZWQo
KS5vYnNlcnZlZE5vZGVzKCkpIHsKICAgICAgICAgaWYgKHZpc2l0b3IuY29udGFpbnNPcGFxdWVS
b290KHJvb3Qobm9kZSkpKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU011
dGF0aW9uUmVjb3JkQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU011dGF0aW9uUmVjb3JkQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNdXRhdGlvblJlY29yZEN1c3RvbS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE4IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOC0yMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMzAsOSArMzAsMTIgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lk
IEpTTXV0YXRpb25SZWNvcmQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0
b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU011dGF0aW9u
UmVjb3JkOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAg
IHdyYXBwZWQoKS52aXNpdE5vZGVzQ29uY3VycmVudGx5KHZpc2l0b3IpOwogfQotICAgIAorCitE
RUZJTkVfVklTSVRfQURESVRJT05BTF9DSElMRFJFTihKU011dGF0aW9uUmVjb3JkKTsKKwogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNO
YXZpZ2F0b3JDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTTmF2aWdhdG9yQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNOYXZpZ2F0b3JDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMy
LDExICszMiwxNCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgSlNOYXZpZ2F0b3I6
OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1w
bGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU05hdmlnYXRvcjo6dmlzaXRBZGRpdGlvbmFs
Q2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qo
c3RhdGljX2Nhc3Q8TmF2aWdhdG9yQmFzZSo+KCZ3cmFwcGVkKCkpKTsKIH0KIAorREVGSU5FX1ZJ
U0lUX0FERElUSU9OQUxfQ0hJTERSRU4oSlNOYXZpZ2F0b3IpOworCiAjaWYgRU5BQkxFKE1FRElB
X1NUUkVBTSkKIEpTQzo6SlNWYWx1ZSBKU05hdmlnYXRvcjo6Z2V0VXNlck1lZGlhKEpTQzo6SlNH
bG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6Q2FsbEZyYW1lJiBjYWxsRnJh
bWUpCiB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVDdXN0b20uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUN1c3RvbS5j
cHAJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9k
ZUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDA3LCAyMDA5LTIwMTAsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03NCw3ICs3NCw3IEBA
IHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKLXN0
YXRpYyBpbmxpbmUgYm9vbCBpc1JlYWNoYWJsZUZyb21ET00oTm9kZSogbm9kZSwgU2xvdFZpc2l0
b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCitzdGF0aWMgaW5saW5lIGJvb2wgaXNS
ZWFjaGFibGVGcm9tRE9NKE5vZGUqIG5vZGUsIEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3Is
IGNvbnN0IGNoYXIqKiByZWFzb24pCiB7CiAgICAgaWYgKCFub2RlLT5pc0Nvbm5lY3RlZCgpKSB7
CiAgICAgICAgIGlmIChpczxFbGVtZW50Pigqbm9kZSkpIHsKQEAgLTEyMyw3ICsxMjMsNyBAQCBz
dGF0aWMgaW5saW5lIGJvb2wgaXNSZWFjaGFibGVGcm9tRE9NKE5vCiAgICAgcmV0dXJuIHZpc2l0
b3IuY29udGFpbnNPcGFxdWVSb290KHJvb3Qobm9kZSkpOwogfQogCi1ib29sIEpTTm9kZU93bmVy
Ojppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhh
bmRsZSwgdm9pZCosIFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQor
Ym9vbCBKU05vZGVPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8
SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9y
LCBjb25zdCBjaGFyKiogcmVhc29uKQogewogICAgIEpTTm9kZSoganNOb2RlID0ganNDYXN0PEpT
Tm9kZSo+KGhhbmRsZS5zbG90KCktPmFzQ2VsbCgpKTsKICAgICByZXR1cm4gaXNSZWFjaGFibGVG
cm9tRE9NKCZqc05vZGUtPndyYXBwZWQoKSwgdmlzaXRvciwgcmVhc29uKTsKQEAgLTEzNiwxMSAr
MTM2LDE0IEBAIEpTU2NvcGUqIEpTTm9kZTo6cHVzaEV2ZW50SGFuZGxlclNjb3BlKEoKICAgICBy
ZXR1cm4gbm9kZTsKIH0KIAotdm9pZCBKU05vZGU6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNO
b2RlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHZp
c2l0b3IuYWRkT3BhcXVlUm9vdChyb290KHdyYXBwZWQoKSkpOwogfQogCitERUZJTkVfVklTSVRf
QURESVRJT05BTF9DSElMRFJFTihKU05vZGUpOworCiBzdGF0aWMgQUxXQVlTX0lOTElORSBKU1Zh
bHVlIGNyZWF0ZVdyYXBwZXJJbmxpbmUoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmpl
Y3QsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZjxOb2RlPiYmIG5vZGUpCiB7
CiAgICAgQVNTRVJUKCFnZXRDYWNoZWRXcmFwcGVyKGdsb2JhbE9iamVjdC0+d29ybGQoKSwgbm9k
ZSkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlSXRlcmF0b3JDdXN0
b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUl0
ZXJhdG9yQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNOb2RlSXRlcmF0b3JDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwOCwgMjAwOSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI1LDEwICsy
NSwxMyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgSlNOb2RlSXRlcmF0b3I6OnZp
c2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0
ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU05vZGVJdGVyYXRvcjo6dmlzaXRBZGRpdGlvbmFs
Q2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBpZiAoTm9kZUZpbHRlciogZmlsdGVy
ID0gd3JhcHBlZCgpLmZpbHRlcigpKQogICAgICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QoZmls
dGVyKTsKIH0KIAotfQorREVGSU5FX1ZJU0lUX0FERElUSU9OQUxfQ0hJTERSRU4oSlNOb2RlSXRl
cmF0b3IpOworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU05vZGVMaXN0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU05vZGVMaXN0Q3VzdG9tLmNwcAkocmV2aXNpb24gMjcyOTAyKQor
KysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlTGlzdEN1c3RvbS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMTkg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3LTIw
MjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0zNyw3ICszNyw3IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBu
YW1lc3BhY2UgSlNDOwogCi1ib29sIEpTTm9kZUxpc3RPd25lcjo6aXNSZWFjaGFibGVGcm9tT3Bh
cXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBTbG90Vmlz
aXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikKK2Jvb2wgSlNOb2RlTGlzdE93bmVy
Ojppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhh
bmRsZSwgdm9pZCosIEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiBy
ZWFzb24pCiB7CiAgICAgSlNOb2RlTGlzdCoganNOb2RlTGlzdCA9IGpzQ2FzdDxKU05vZGVMaXN0
Kj4oaGFuZGxlLnNsb3QoKS0+YXNDZWxsKCkpOwogICAgIGlmICghanNOb2RlTGlzdC0+aGFzQ3Vz
dG9tUHJvcGVydGllcyhqc05vZGVMaXN0LT52bSgpKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTT2Zmc2NyZWVuQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQ3VzdG9tLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU09mZnNjcmVlbkNhbnZh
c1JlbmRlcmluZ0NvbnRleHQyREN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTT2Zmc2NyZWVuQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCkBAIC0zMSw3ICszMSw3IEBAIGlubGluZSB2b2lkKiByb290KE9mZnNjcmVlbkNh
bnZhcyogY2FudmEKICAgICByZXR1cm4gY2FudmFzOwogfQogCi1ib29sIEpTT2Zmc2NyZWVuQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJET3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpT
Qzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgU2xvdFZpc2l0b3ImIHZpc2l0
b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCitib29sIEpTT2Zmc2NyZWVuQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDJET3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpT
Qzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvciwg
Y29uc3QgY2hhcioqIHJlYXNvbikKIHsKICAgICBpZiAoVU5MSUtFTFkocmVhc29uKSkKICAgICAg
ICAgKnJlYXNvbiA9ICJDYW52YXMgaXMgb3BhcXVlIHJvb3QiOwpAQCAtNDEsMTEgKzQxLDE0IEBA
IGJvb2wgSlNPZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQKICAgICByZXR1cm4gdmlz
aXRvci5jb250YWluc09wYXF1ZVJvb3Qocm9vdCk7CiB9CiAKLXZvaWQgSlNPZmZzY3JlZW5DYW52
YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9y
JiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNPZmZzY3JlZW5D
YW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3Im
IHZpc2l0b3IpCiB7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHJvb3QoJndyYXBwZWQoKS5j
YW52YXMoKSkpOwogfQogCitERUZJTkVfVklTSVRfQURESVRJT05BTF9DSElMRFJFTihKU09mZnNj
cmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCk7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
IAogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1BhaW50UmVuZGVy
aW5nQ29udGV4dDJEQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU1BhaW50UmVuZGVyaW5nQ29udGV4dDJEQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcy
OTAyKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNQYWludFJlbmRlcmluZ0NvbnRl
eHQyREN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxOC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzYsNyArMzYsNyBAQCBpbmxpbmUgdm9pZCog
cm9vdChDdXN0b21QYWludENhbnZhcyogY2FuCiAgICAgcmV0dXJuIGNhbnZhczsKIH0KIAotYm9v
bCBKU1BhaW50UmVuZGVyaW5nQ29udGV4dDJET3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJv
b3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgU2xvdFZpc2l0b3Im
IHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCitib29sIEpTUGFpbnRSZW5kZXJpbmdDb250
ZXh0MkRPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpV
bmtub3duPiBoYW5kbGUsIHZvaWQqLCBBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25z
dCBjaGFyKiogcmVhc29uKQogewogICAgIGlmIChVTkxJS0VMWShyZWFzb24pKQogICAgICAgICAq
cmVhc29uID0gIkNhbnZhcyBpcyBvcGFxdWUgcm9vdCI7CkBAIC00NiwxMSArNDYsMTQgQEAgYm9v
bCBKU1BhaW50UmVuZGVyaW5nQ29udGV4dDJET3duZXI6OmlzUgogICAgIHJldHVybiB2aXNpdG9y
LmNvbnRhaW5zT3BhcXVlUm9vdChyb290KTsKIH0KIAotdm9pZCBKU1BhaW50UmVuZGVyaW5nQ29u
dGV4dDJEOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3Rl
bXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTUGFpbnRSZW5kZXJpbmdDb250ZXh0MkQ6
OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgdmlzaXRv
ci5hZGRPcGFxdWVSb290KHJvb3QoJndyYXBwZWQoKS5jYW52YXMoKSkpOwogfQogCitERUZJTkVf
VklTSVRfQURESVRJT05BTF9DSElMRFJFTihKU1BhaW50UmVuZGVyaW5nQ29udGV4dDJEKTsKKwog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogI2VuZGlmCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTUGFpbnRXb3JrbGV0R2xvYmFsU2NvcGVDdXN0b20uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUGFpbnRXb3JrbGV0R2xvYmFsU2NvcGVD
dXN0b20uY3BwCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU1BhaW50V29ya2xldEdsb2JhbFNjb3BlQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMSw3
ICszMSw4IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCi12
b2lkIEpTUGFpbnRXb3JrbGV0R2xvYmFsU2NvcGU6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpT
Qzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9p
ZCBKU1BhaW50V29ya2xldEdsb2JhbFNjb3BlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNp
dG9yJiB2aXNpdG9yKQogewogICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sod3JhcHBlZCgpLnBh
aW50RGVmaW5pdGlvbkxvY2soKSk7CiAgICAgZm9yIChhdXRvJiByZWdpc3RlcmVkIDogd3JhcHBl
ZCgpLnBhaW50RGVmaW5pdGlvbk1hcCgpLnZhbHVlcygpKSB7CkBAIC00MCw1ICs0MSw4IEBAIHZv
aWQgSlNQYWludFdvcmtsZXRHbG9iYWxTY29wZTo6dmlzaXRBZGQKICAgICB9CiB9CiAKLX0KK0RF
RklORV9WSVNJVF9BRERJVElPTkFMX0NISUxEUkVOKEpTUGFpbnRXb3JrbGV0R2xvYmFsU2NvcGUp
OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNQYXltZW50TWV0aG9kQ2hhbmdlRXZlbnRDdXN0b20uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUGF5bWVudE1ldGhvZENoYW5n
ZUV2ZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNQYXltZW50TWV0aG9kQ2hhbmdlRXZlbnRDdXN0b20uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAyMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTQxLDcgKzQxLDggQEAgSlNDOjpKU1ZhbHVlIEpTUGF5bWVudE1ldGhvZENoYW5nZUV2ZW50
OgogICAgIH0pOwogfQogCi12b2lkIEpTUGF5bWVudE1ldGhvZENoYW5nZUV2ZW50Ojp2aXNpdEFk
ZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlw
ZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNQYXltZW50TWV0aG9kQ2hhbmdlRXZlbnQ6OnZpc2l0QWRk
aXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgV1RGOjpzd2l0Y2hPbih3
cmFwcGVkKCkubWV0aG9kRGV0YWlscygpLCBbJnZpc2l0b3JdKGNvbnN0IEpTVmFsdWVJbldyYXBw
ZWRPYmplY3QmIG1ldGhvZERldGFpbHMpIHsKICAgICAgICAgbWV0aG9kRGV0YWlscy52aXNpdCh2
aXNpdG9yKTsKQEAgLTUxLDYgKzUyLDggQEAgdm9pZCBKU1BheW1lbnRNZXRob2RDaGFuZ2VFdmVu
dDo6dmlzaXRBZAogICAgIHdyYXBwZWQoKS5jYWNoZWRNZXRob2REZXRhaWxzKCkudmlzaXQodmlz
aXRvcik7CiB9CiAKK0RFRklORV9WSVNJVF9BRERJVElPTkFMX0NISUxEUkVOKEpTUGF5bWVudE1l
dGhvZENoYW5nZUV2ZW50KTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8g
RU5BQkxFKFBBWU1FTlRfUkVRVUVTVCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTUGF5bWVudFJlc3BvbnNlQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU1BheW1lbnRSZXNwb25zZUN1c3RvbS5jcHAJKHJldmlzaW9uIDI3Mjkw
MikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUGF5bWVudFJlc3BvbnNlQ3VzdG9t
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE4LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC0zNywxMSArMzcsMTQgQEAgSlNDOjpKU1ZhbHVlIEpTUGF5bWVu
dFJlc3BvbnNlOjpkZXRhaWxzKAogICAgIH0pOwogfQogCi12b2lkIEpTUGF5bWVudFJlc3BvbnNl
Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVt
cGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNQYXltZW50UmVzcG9uc2U6OnZpc2l0QWRk
aXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgd3JhcHBlZCgpLmNhY2hl
ZERldGFpbHMoKS52aXNpdCh2aXNpdG9yKTsKIH0KIAorREVGSU5FX1ZJU0lUX0FERElUSU9OQUxf
Q0hJTERSRU4oSlNQYXltZW50UmVzcG9uc2UpOworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAK
ICNlbmRpZiAvLyBFTkFCTEUoUEFZTUVOVF9SRVFVRVNUKQpJbmRleDogU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNQZXJmb3JtYW5jZU9ic2VydmVyQ3VzdG9tLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1BlcmZvcm1hbmNlT2JzZXJ2ZXJDdXN0b20u
Y3BwCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1Bl
cmZvcm1hbmNlT2JzZXJ2ZXJDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMxLDEyICszMSwxNSBA
QAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgSlNQZXJmb3JtYW5jZU9ic2VydmVyOjp2
aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxh
dGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNQZXJmb3JtYW5jZU9ic2VydmVyOjp2aXNpdEFk
ZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHdyYXBwZWQoKS5jYWxs
YmFjaygpLnZpc2l0SlNGdW5jdGlvbih2aXNpdG9yKTsKIH0KIAotYm9vbCBKU1BlcmZvcm1hbmNl
T2JzZXJ2ZXJPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlND
OjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBKU0M6OlNsb3RWaXNpdG9yJiwgY29uc3QgY2hhcioq
IHJlYXNvbikKK0RFRklORV9WSVNJVF9BRERJVElPTkFMX0NISUxEUkVOKEpTUGVyZm9ybWFuY2VP
YnNlcnZlcik7CisKK2Jvb2wgSlNQZXJmb3JtYW5jZU9ic2VydmVyT3duZXI6OmlzUmVhY2hhYmxl
RnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwg
SlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiwgY29uc3QgY2hhcioqIHJlYXNvbikKIHsKICAgICBp
ZiAoVU5MSUtFTFkocmVhc29uKSkKICAgICAgICAgKnJlYXNvbiA9ICJSZWdpc3RlcmVkIFBlcmZv
cm1hbmNlT2JzZXJ2ZXIgY2FsbGJhY2siOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNQb3BTdGF0ZUV2ZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU1BvcFN0YXRlRXZlbnRDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI5MDIp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1BvcFN0YXRlRXZlbnRDdXN0b20uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAx
MSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKQEAgLTkwLDkgKzkxLDEyIEBAIEpTVmFsdWUgSlNQb3BTdGF0ZUV2ZW50Ojpz
dGF0ZShKU0dsb2JhbE8KICAgICByZXR1cm4gY2FjaGVTdGF0ZShyZXN1bHQpOwogfQogCi12b2lk
IEpTUG9wU3RhdGVFdmVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRv
ciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTUG9wU3RhdGVF
dmVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB3
cmFwcGVkKCkuc3RhdGUoKS52aXNpdCh2aXNpdG9yKTsKIH0KIAorREVGSU5FX1ZJU0lUX0FERElU
SU9OQUxfQ0hJTERSRU4oSlNQb3BTdGF0ZUV2ZW50KTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNQcm9taXNlUmVqZWN0aW9uRXZl
bnRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
UHJvbWlzZVJlamVjdGlvbkV2ZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNQcm9taXNlUmVqZWN0aW9uRXZlbnRDdXN0b20uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAx
OCBZdXN1a2UgU3V6dWtpIDx5dXN1a2VzdXp1a2lAc2xvd3N0YXJ0Lm9yZz4uCisgKiBDb3B5cmln
aHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0zMiw5ICszMywxMiBAQAogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLXZvaWQgSlNQcm9taXNlUmVqZWN0aW9uRXZlbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxk
cmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
Pgordm9pZCBKU1Byb21pc2VSZWplY3Rpb25FdmVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4o
VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB3cmFwcGVkKCkucmVhc29uKCkudmlzaXQodmlzaXRv
cik7CiB9CiAKK0RFRklORV9WSVNJVF9BRERJVElPTkFMX0NISUxEUkVOKEpTUHJvbWlzZVJlamVj
dGlvbkV2ZW50KTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNSZXNpemVPYnNlcnZlckN1c3RvbS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNSZXNpemVPYnNlcnZlckN1c3RvbS5jcHAJKHJl
dmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUmVzaXplT2Jz
ZXJ2ZXJDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENv
cHlyaWdodCAoQykgMjAyMCBJZ2FsaWEgUy5MLgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMzAsMTEgKzMxLDE0IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBKU1Jl
c2l6ZU9ic2VydmVyOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2
aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNSZXNpemVPYnNlcnZl
cjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBSZXNp
emVPYnNlcnZlckNhbGxiYWNrKiBjYWxsYmFjayA9IHdyYXBwZWQoKS5jYWxsYmFja0NvbmN1cnJl
bnRseSgpOwogICAgIGlmIChjYWxsYmFjaykKICAgICAgICAgY2FsbGJhY2stPnZpc2l0SlNGdW5j
dGlvbih2aXNpdG9yKTsKIH0KIAotfQorREVGSU5FX1ZJU0lUX0FERElUSU9OQUxfQ0hJTERSRU4o
SlNSZXNpemVPYnNlcnZlcik7CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUmVzaXplT2JzZXJ2ZXJFbnRyeUN1c3RvbS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNSZXNpemVPYnNlcnZlckVu
dHJ5Q3VzdG9tLmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNSZXNpemVPYnNlcnZlckVudHJ5Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTkgSWdhbGlhIFMuTC4KKyAqIENv
cHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMwLDEwICszMSwxMyBAQAogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLXZvaWQgSlNSZXNpemVPYnNlcnZlckVudHJ5Ojp2aXNpdEFkZGl0aW9uYWxD
aGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlz
aXRvcj4KK3ZvaWQgSlNSZXNpemVPYnNlcnZlckVudHJ5Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJl
bihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChyb290KHdy
YXBwZWQoKS50YXJnZXQoKSkpOwogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdCh3cmFwcGVkKCku
Y29udGVudFJlY3QoKSk7CiB9CiAKLX0KK0RFRklORV9WSVNJVF9BRERJVElPTkFMX0NISUxEUkVO
KEpTUmVzaXplT2JzZXJ2ZXJFbnRyeSk7CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU1ZHVmlld1NwZWNDdXN0b20uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU1ZHVmlld1NwZWNDdXN0b20u
Y3BwCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NW
R1ZpZXdTcGVjQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE4LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMCwxMCArMzAsMTMgQEAKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIEpTU1ZHVmlld1NwZWM6OnZpc2l0QWRkaXRpb25hbENo
aWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNp
dG9yPgordm9pZCBKU1NWR1ZpZXdTcGVjOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9y
JiB2aXNpdG9yKQogewogICAgIEFTU0VSVCh3cmFwcGVkKCkuY29udGV4dEVsZW1lbnRDb25jdXJy
ZW50bHkoKS5nZXQoKSk7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHJvb3Qod3JhcHBlZCgp
LmNvbnRleHRFbGVtZW50Q29uY3VycmVudGx5KCkuZ2V0KCkpKTsKIH0KIAotfQorREVGSU5FX1ZJ
U0lUX0FERElUSU9OQUxfQ0hJTERSRU4oSlNTVkdWaWV3U3BlYyk7CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU2VydmljZVdvcmtl
ckdsb2JhbFNjb3BlQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU1NlcnZpY2VXb3JrZXJHbG9iYWxTY29wZUN1c3RvbS5jcHAJKHJldmlzaW9uIDI3
MjkwMikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU2VydmljZVdvcmtlckdsb2Jh
bFNjb3BlQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNCwxMiArMzQsMTUgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCi12b2lkIEpTU2VydmljZVdvcmtl
ckdsb2JhbFNjb3BlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRv
cikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTU2VydmljZVdvcmtlckdsb2Jh
bFNjb3BlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAg
IHZpc2l0b3IuYWRkT3BhcXVlUm9vdCgmd3JhcHBlZCgpLmNsaWVudHMoKSk7CiAgICAgdmlzaXRv
ci5hZGRPcGFxdWVSb290KCZ3cmFwcGVkKCkucmVnaXN0cmF0aW9uKCkpOwogfQogCitERUZJTkVf
VklTSVRfQURESVRJT05BTF9DSElMRFJFTihKU1NlcnZpY2VXb3JrZXJHbG9iYWxTY29wZSk7CisK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU1N0YXRpY1JhbmdlQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU1N0YXRpY1JhbmdlQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcy
OTAyKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNTdGF0aWNSYW5nZUN1c3RvbS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDkgKzMwLDEyIEBACiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotdm9pZCBKU1N0YXRpY1JhbmdlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNs
b3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNT
dGF0aWNSYW5nZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsK
ICAgICB3cmFwcGVkKCkudmlzaXROb2Rlc0NvbmN1cnJlbnRseSh2aXNpdG9yKTsKIH0KIAorREVG
SU5FX1ZJU0lUX0FERElUSU9OQUxfQ0hJTERSRU4oSlNTdGF0aWNSYW5nZSk7CisKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU3R5bGVT
aGVldEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNTdHlsZVNoZWV0Q3VzdG9tLmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNTdHlsZVNoZWV0Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIwMDkgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0zMCwxMSArMzAsMTQgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIEpT
U3R5bGVTaGVldDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlz
aXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTU3R5bGVTaGVldDo6dmlz
aXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB2aXNpdG9yLmFk
ZE9wYXF1ZVJvb3Qocm9vdCgmd3JhcHBlZCgpKSk7CiB9CiAKK0RFRklORV9WSVNJVF9BRERJVElP
TkFMX0NISUxEUkVOKEpTU3R5bGVTaGVldCk7CisKIEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVh
dGVkKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBSZWY8U3R5bGVTaGVldD4mJiBzdHlsZVNoZWV0KQogewogICAgIGlmIChzdHlsZVNoZWV0LT5p
c0NTU1N0eWxlU2hlZXQoKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVGV4
dFRyYWNrQ3VlQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU1RleHRUcmFja0N1ZUN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVGV4dFRyYWNrQ3VlQ3VzdG9tLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMjEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC0zOCw3ICszOCw3IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2Ug
SlNDOwogCi1ib29sIEpTVGV4dFRyYWNrQ3VlT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJv
b3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgU2xvdFZpc2l0b3Im
IHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCitib29sIEpTVGV4dFRyYWNrQ3VlT3duZXI6
OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFu
ZGxlLCB2b2lkKiwgQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJl
YXNvbikKIHsKICAgICBKU1RleHRUcmFja0N1ZSoganNUZXh0VHJhY2tDdWUgPSBqc0Nhc3Q8SlNU
ZXh0VHJhY2tDdWUqPihoYW5kbGUuc2xvdCgpLT5hc0NlbGwoKSk7CiAgICAgVGV4dFRyYWNrQ3Vl
JiB0ZXh0VHJhY2tDdWUgPSBqc1RleHRUcmFja0N1ZS0+d3JhcHBlZCgpOwpAQCAtODIsMTIgKzgy
LDE1IEBAIEpTVmFsdWUgdG9KUyhKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2IKICAgICByZXR1
cm4gd3JhcChsZXhpY2FsR2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QsIGN1ZSk7CiB9CiAKLXZv
aWQgSlNUZXh0VHJhY2tDdWU6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNUZXh0VHJhY2tDdWU6
OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgaWYgKFRl
eHRUcmFjayogdGV4dFRyYWNrID0gd3JhcHBlZCgpLnRyYWNrKCkpCiAgICAgICAgIHZpc2l0b3Iu
YWRkT3BhcXVlUm9vdChyb290KHRleHRUcmFjaykpOwogfQogCitERUZJTkVfVklTSVRfQURESVRJ
T05BTF9DSElMRFJFTihKU1RleHRUcmFja0N1ZSk7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
IAogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1RleHRUcmFja0N1
c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNUZXh0
VHJhY2tDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU1RleHRUcmFja0N1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzYsMTEgKzM2LDE0
IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCi12b2lkIEpT
VGV4dFRyYWNrOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikK
K3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTVGV4dFRyYWNrOjp2aXNpdEFkZGl0
aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHZpc2l0b3IuYWRkT3BhcXVl
Um9vdChyb290KCZ3cmFwcGVkKCkpKTsKIH0KIAorREVGSU5FX1ZJU0lUX0FERElUSU9OQUxfQ0hJ
TERSRU4oSlNUZXh0VHJhY2spOworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZgpJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNUZXh0VHJhY2tMaXN0Q3VzdG9tLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1RleHRUcmFja0xp
c3RDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU1RleHRUcmFja0xpc3RDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM2LDExICszNiwx
NCBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAotdm9pZCBK
U1RleHRUcmFja0xpc3Q6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3Im
IHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1RleHRUcmFja0xp
c3Q6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgdmlz
aXRvci5hZGRPcGFxdWVSb290KHJvb3Qod3JhcHBlZCgpLmVsZW1lbnQoKSkpOwogfQogICAgIAor
REVGSU5FX1ZJU0lUX0FERElUSU9OQUxfQ0hJTERSRU4oSlNUZXh0VHJhY2tMaXN0KTsKKwogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTVHJlZVdhbGtlckN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNUcmVlV2Fsa2VyQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcyOTAyKQor
KysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNUcmVlV2Fsa2VyQ3VzdG9tLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIw
MDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDA2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
ICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCkBAIC0yNSwxMCArMjUsMTMgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lk
IEpTVHJlZVdhbGtlcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYg
dmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTVHJlZVdhbGtlcjo6
dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBpZiAoTm9k
ZUZpbHRlciogZmlsdGVyID0gd3JhcHBlZCgpLmZpbHRlcigpKQogICAgICAgICB2aXNpdG9yLmFk
ZE9wYXF1ZVJvb3QoZmlsdGVyKTsKIH0KIAotfQorREVGSU5FX1ZJU0lUX0FERElUSU9OQUxfQ0hJ
TERSRU4oSlNUcmVlV2Fsa2VyKTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNVbmRvSXRlbUN1c3RvbS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNVbmRvSXRlbUN1c3RvbS5jcHAJKHJldmlz
aW9uIDI3MjkwMikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVW5kb0l0ZW1DdXN0
b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTktMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTI5LDEzICsyOSwxNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLXZvaWQgSlNVbmRvSXRlbTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90
VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTVW5k
b0l0ZW06OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAg
d3JhcHBlZCgpLnVuZG9IYW5kbGVyKCkudmlzaXRKU0Z1bmN0aW9uKHZpc2l0b3IpOwogICAgIHdy
YXBwZWQoKS5yZWRvSGFuZGxlcigpLnZpc2l0SlNGdW5jdGlvbih2aXNpdG9yKTsKIH0KIAotYm9v
bCBKU1VuZG9JdGVtT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxl
PEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvciwg
Y29uc3QgY2hhcioqIHJlYXNvbikKK0RFRklORV9WSVNJVF9BRERJVElPTkFMX0NISUxEUkVOKEpT
VW5kb0l0ZW0pOworCitib29sIEpTVW5kb0l0ZW1Pd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVl
Um9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBKU0M6OkFic3Ry
YWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCiB7CiAgICAgaWYg
KFVOTElLRUxZKHJlYXNvbikpCiAgICAgICAgICpyZWFzb24gPSAiRG9jdW1lbnQgaXMgYW4gb3Bh
cXVlIHJvb3QuIjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVmFsdWVJbldy
YXBwZWRPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U1ZhbHVlSW5XcmFwcGVkT2JqZWN0LmgJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTVmFsdWVJbldyYXBwZWRPYmplY3QuaAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDAs
NyArNDAsNyBAQCBwdWJsaWM6CiAgICAgb3BlcmF0b3IgSlNDOjpKU1ZhbHVlKCkgY29uc3Q7CiAg
ICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0OwogICAgIEpTVmFsdWVJbldyYXBwZWRP
YmplY3QmIG9wZXJhdG9yPShjb25zdCBKU1ZhbHVlSW5XcmFwcGVkT2JqZWN0JiBvdGhlcik7Ci0g
ICAgdm9pZCB2aXNpdChKU0M6OlNsb3RWaXNpdG9yJikgY29uc3Q7CisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVmlzaXRvcj4gdm9pZCB2aXNpdChWaXNpdG9yJikgY29uc3Q7CiAgICAgdm9pZCBjbGVh
cigpOwogCiBwcml2YXRlOgpAQCAtOTgsNyArOTgsOCBAQCBpbmxpbmUgSlNWYWx1ZUluV3JhcHBl
ZE9iamVjdCYgSlNWYWx1ZUluCiAgICAgcmV0dXJuICp0aGlzOwogfQogCi1pbmxpbmUgdm9pZCBK
U1ZhbHVlSW5XcmFwcGVkT2JqZWN0Ojp2aXNpdChKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKSBj
b25zdAordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK2lubGluZSB2b2lkIEpTVmFsdWVJbldy
YXBwZWRPYmplY3Q6OnZpc2l0KFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0CiB7CiAgICAgcmV0dXJu
IFdURjo6c3dpdGNoT24obV92YWx1ZSwgW10gKEpTQzo6SlNWYWx1ZSkgewogICAgICAgICAvLyBO
b3RoaW5nIHRvIHZpc2l0LgpAQCAtMTA3LDYgKzEwOCw5IEBAIGlubGluZSB2b2lkIEpTVmFsdWVJ
bldyYXBwZWRPYmplY3Q6OnZpc2kKICAgICB9KTsKIH0KIAordGVtcGxhdGUgdm9pZCBKU1ZhbHVl
SW5XcmFwcGVkT2JqZWN0Ojp2aXNpdChKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKSBjb25zdDsK
K3RlbXBsYXRlIHZvaWQgSlNWYWx1ZUluV3JhcHBlZE9iamVjdDo6dmlzaXQoSlNDOjpTbG90Vmlz
aXRvciYpIGNvbnN0OworCiBpbmxpbmUgdm9pZCBKU1ZhbHVlSW5XcmFwcGVkT2JqZWN0OjpjbGVh
cigpCiB7CiAgICAgV1RGOjpzd2l0Y2hPbihtX3ZhbHVlLCBbXSAoV2VhayYgdmFsdWUpIHsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVmlkZW9UcmFja0N1c3RvbS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNWaWRlb1RyYWNrQ3VzdG9t
LmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNW
aWRlb1RyYWNrQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDExLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNSwxMSArMzUsMTQgQEAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKLXZvaWQgSlNWaWRlb1RyYWNr
Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRl
PHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTVmlkZW9UcmFjazo6dmlzaXRBZGRpdGlvbmFsQ2hp
bGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qocm9v
dCgmd3JhcHBlZCgpKSk7CiB9CiAKK0RFRklORV9WSVNJVF9BRERJVElPTkFMX0NISUxEUkVOKEpT
VmlkZW9UcmFjayk7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1ZpZGVvVHJhY2tMaXN0Q3VzdG9tLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1ZpZGVvVHJhY2tMaXN0Q3Vz
dG9tLmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNWaWRlb1RyYWNrTGlzdEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzUsMTEgKzM1LDE0IEBA
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCi12b2lkIEpTVmlk
ZW9UcmFja0xpc3Q6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9y
KQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNWaWRlb1RyYWNrTGlzdDo6dmlz
aXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB2aXNpdG9yLmFk
ZE9wYXF1ZVJvb3Qocm9vdCh3cmFwcGVkKCkuZWxlbWVudCgpKSk7CiB9CiAKK0RFRklORV9WSVNJ
VF9BRERJVElPTkFMX0NISUxEUkVOKEpTVmlkZW9UcmFja0xpc3QpOworCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCiAKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNX
ZWJHTDJSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU1dlYkdMMlJlbmRlcmluZ0NvbnRleHRDdXN0b20uY3BwCShyZXZp
c2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYkdMMlJlbmRl
cmluZ0NvbnRleHRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzMsMTIgKzMzLDE1IEBA
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCi12b2lkIEpTV2Vi
R0wyUmVuZGVyaW5nQ29udGV4dDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3Im
IHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1dlYkdMMlJlbmRl
cmluZ0NvbnRleHQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7
CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KCZ3cmFwcGVkKCkpOwogICAgIHdyYXBwZWQoKS5h
ZGRNZW1iZXJzVG9PcGFxdWVSb290cyh2aXNpdG9yKTsKIH0KIAorREVGSU5FX1ZJU0lUX0FERElU
SU9OQUxfQ0hJTERSRU4oSlNXZWJHTDJSZW5kZXJpbmdDb250ZXh0KTsKKwogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQkdMKQpJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRDdXN0b20uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViR0xSZW5kZXJpbmdDb250ZXh0
Q3VzdG9tLmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMzLDEy
ICszMywxNSBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAot
dm9pZCBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xv
dFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1dl
YkdMUmVuZGVyaW5nQ29udGV4dDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlz
aXRvcikKIHsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QoJndyYXBwZWQoKSk7CiAgICAgd3Jh
cHBlZCgpLmFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKHZpc2l0b3IpOwogfQogCitERUZJTkVfVklT
SVRfQURESVRJT05BTF9DSElMRFJFTihKU1dlYkdMUmVuZGVyaW5nQ29udGV4dCk7CisKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShXRUJHTCkKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyR2xvYmFsU2NvcGVCYXNlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckdsb2JhbFNjb3BlQmFz
ZS5jcHAJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
V29ya2VyR2xvYmFsU2NvcGVCYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDksIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCBS
aWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC05Miw3ICs5Miw4IEBAIHZvaWQg
SlNXb3JrZXJHbG9iYWxTY29wZUJhc2U6OmZpbmlzaENyZWEKICAgICBBU1NFUlQoaW5oZXJpdHMo
dm0sIGluZm8oKSkpOwogfQogCi12b2lkIEpTV29ya2VyR2xvYmFsU2NvcGVCYXNlOjp2aXNpdENo
aWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBl
bmFtZSBWaXNpdG9yPgordm9pZCBKU1dvcmtlckdsb2JhbFNjb3BlQmFzZTo6dmlzaXRDaGlsZHJl
bkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTV29ya2VyR2xv
YmFsU2NvcGVCYXNlKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTV29ya2VyR2xvYmFsU2NvcGVCYXNl
Kj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZv
KCkpOwpAQCAtMTAwLDYgKzEwMSw4IEBAIHZvaWQgSlNXb3JrZXJHbG9iYWxTY29wZUJhc2U6OnZp
c2l0Q2hpbGQKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX3Byb3h5KTsKIH0KIAor
REVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTV29ya2VyR2xvYmFsU2NvcGVCYXNlKTsKKwogdm9pZCBK
U1dvcmtlckdsb2JhbFNjb3BlQmFzZTo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCiB7CiAgICAgc3Rh
dGljX2Nhc3Q8SlNXb3JrZXJHbG9iYWxTY29wZUJhc2UqPihjZWxsKS0+SlNXb3JrZXJHbG9iYWxT
Y29wZUJhc2U6On5KU1dvcmtlckdsb2JhbFNjb3BlQmFzZSgpOwpJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNXb3JrZXJHbG9iYWxTY29wZUJhc2UuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckdsb2JhbFNjb3BlQmFzZS5oCShyZXZp
c2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckdsb2Jh
bFNjb3BlQmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDgtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTc5LDcgKzc5LDcgQEAgcHJvdGVjdGVk
OgogICAgIEpTV29ya2VyR2xvYmFsU2NvcGVCYXNlKEpTQzo6Vk0mLCBKU0M6OlN0cnVjdHVyZSos
IFJlZlB0cjxXb3JrZXJHbG9iYWxTY29wZT4mJik7CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihK
U0M6OlZNJiwgSlNDOjpKU1Byb3h5Kik7CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVu
KEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJ
TERSRU47CiAKIHByaXZhdGU6CiAgICAgUmVmUHRyPFdvcmtlckdsb2JhbFNjb3BlPiBtX3dyYXBw
ZWQ7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckdsb2JhbFNjb3Bl
Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dv
cmtlckdsb2JhbFNjb3BlQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNXb3JrZXJHbG9iYWxTY29wZUN1c3RvbS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMDksIDIw
MTEsIDIwMTYgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDA4LTIwMjEgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0zMyw3ICszMyw4IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCi12b2lkIEpTV29ya2VyR2xvYmFsU2NvcGU6OnZpc2l0
QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5h
bWUgVmlzaXRvcj4KK3ZvaWQgSlNXb3JrZXJHbG9iYWxTY29wZTo6dmlzaXRBZGRpdGlvbmFsQ2hp
bGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBpZiAoYXV0byogbG9jYXRpb24gPSB3cmFw
cGVkKCkub3B0aW9uYWxMb2NhdGlvbigpKQogICAgICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qo
bG9jYXRpb24pOwpAQCAtNDgsNiArNDksOCBAQCB2b2lkIEpTV29ya2VyR2xvYmFsU2NvcGU6OnZp
c2l0QWRkaXRpb25hCiAgICAgd3JhcHBlZCgpLnZpc2l0SlNFdmVudExpc3RlbmVycyh2aXNpdG9y
KTsKIH0KIAorREVGSU5FX1ZJU0lUX0FERElUSU9OQUxfQ0hJTERSRU4oSlNXb3JrZXJHbG9iYWxT
Y29wZSk7CisKIEpTVmFsdWUgSlNXb3JrZXJHbG9iYWxTY29wZTo6cXVldWVNaWNyb3Rhc2soSlNH
bG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFtZSYgY2FsbEZyYW1lKQog
ewogICAgIFZNJiB2bSA9IGxleGljYWxHbG9iYWxPYmplY3Qudm0oKTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyTmF2aWdhdG9yQ3VzdG9tLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlck5hdmlnYXRvckN1c3RvbS5j
cHAJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29y
a2VyTmF2aWdhdG9yQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOCw5ICsyOCwxMiBAQAogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgSlNXb3JrZXJOYXZpZ2F0b3I6OnZpc2l0QWRkaXRp
b25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBWaXNpdG9yPgordm9pZCBKU1dvcmtlck5hdmlnYXRvcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRy
ZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qoc3RhdGlj
X2Nhc3Q8TmF2aWdhdG9yQmFzZSo+KCZ3cmFwcGVkKCkpKTsKIH0KIAotfQorREVGSU5FX1ZJU0lU
X0FERElUSU9OQUxfQ0hJTERSRU4oSlNXb3JrZXJOYXZpZ2F0b3IpOworCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtsZXRHbG9i
YWxTY29wZUJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTV29ya2xldEdsb2JhbFNjb3BlQmFzZS5jcHAJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2xldEdsb2JhbFNjb3BlQmFzZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOC0yMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtODIsNyArODIsOCBAQCB2b2lkIEpTV29ya2xldEdsb2JhbFNjb3BlQmFzZTo6Zmlu
aXNoQ3JlCiAgICAgQVNTRVJUKGluaGVyaXRzKHZtLCBpbmZvKCkpKTsKIH0KIAotdm9pZCBKU1dv
cmtsZXRHbG9iYWxTY29wZUJhc2U6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90Vmlz
aXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTV29ya2xl
dEdsb2JhbFNjb3BlQmFzZTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9y
JiB2aXNpdG9yKQogewogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNXb3JrbGV0R2xv
YmFsU2NvcGVCYXNlKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlz
T2JqZWN0LCBpbmZvKCkpOwpAQCAtOTAsNiArOTEsOCBAQCB2b2lkIEpTV29ya2xldEdsb2JhbFNj
b3BlQmFzZTo6dmlzaXRDaGlsCiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9wcm94
eSk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU1dvcmtsZXRHbG9iYWxTY29wZUJhc2Up
OworCiB2b2lkIEpTV29ya2xldEdsb2JhbFNjb3BlQmFzZTo6ZGVzdHJveShKU0NlbGwqIGNlbGwp
CiB7CiAgICAgc3RhdGljX2Nhc3Q8SlNXb3JrbGV0R2xvYmFsU2NvcGVCYXNlKj4oY2VsbCktPkpT
V29ya2xldEdsb2JhbFNjb3BlQmFzZTo6fkpTV29ya2xldEdsb2JhbFNjb3BlQmFzZSgpOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrbGV0R2xvYmFsU2NvcGVCYXNlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrbGV0R2xvYmFs
U2NvcGVCYXNlLmgJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTV29ya2xldEdsb2JhbFNjb3BlQmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY3LDcgKzY3LDcg
QEAgcHJvdGVjdGVkOgogICAgIEpTV29ya2xldEdsb2JhbFNjb3BlQmFzZShKU0M6OlZNJiwgSlND
OjpTdHJ1Y3R1cmUqLCBSZWZQdHI8V29ya2xldEdsb2JhbFNjb3BlPiYmKTsKICAgICB2b2lkIGZp
bmlzaENyZWF0aW9uKEpTQzo6Vk0mLCBKU0M6OkpTUHJveHkqKTsKIAotICAgIHN0YXRpYyB2b2lk
IHZpc2l0Q2hpbGRyZW4oSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJik7CisgICAgREVD
TEFSRV9WSVNJVF9DSElMRFJFTjsKIAogcHJpdmF0ZToKICAgICBSZWZQdHI8V29ya2xldEdsb2Jh
bFNjb3BlPiBtX3dyYXBwZWQ7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1hN
TEh0dHBSZXF1ZXN0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU1hNTEh0dHBSZXF1ZXN0Q3VzdG9tLmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNYTUxIdHRwUmVxdWVzdEN1c3RvbS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LCAy
MDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAw
OC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtNDEsNyArNDEsOCBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogdXNp
bmcgbmFtZXNwYWNlIEpTQzsKIAotdm9pZCBKU1hNTEh0dHBSZXF1ZXN0Ojp2aXNpdEFkZGl0aW9u
YWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0
b3I+Cit2b2lkIEpTWE1MSHR0cFJlcXVlc3Q6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0
b3ImIHZpc2l0b3IpCiB7CiAgICAgaWYgKGF1dG8qIHVwbG9hZCA9IHdyYXBwZWQoKS5vcHRpb25h
bFVwbG9hZCgpKQogICAgICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QodXBsb2FkKTsKQEAgLTUw
LDYgKzUxLDggQEAgdm9pZCBKU1hNTEh0dHBSZXF1ZXN0Ojp2aXNpdEFkZGl0aW9uYWxDaAogICAg
ICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QocmVzcG9uc2VEb2N1bWVudCk7CiB9CiAKK0RFRklO
RV9WSVNJVF9BRERJVElPTkFMX0NISUxEUkVOKEpTWE1MSHR0cFJlcXVlc3QpOworCiBKU1ZhbHVl
IEpTWE1MSHR0cFJlcXVlc3Q6OnJlc3BvbnNlKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFs
T2JqZWN0KSBjb25zdAogewogICAgIGF1dG8gY2FjaGVSZXN1bHQgPSBbJl0gKEpTVmFsdWUgdmFs
dWUpIC0+IEpTVmFsdWUgewpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNYUGF0
aFJlc3VsdEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNYUGF0aFJlc3VsdEN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTWFBhdGhSZXN1bHRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxMSBKdWxpZW4gQ2hhZmZy
YWl4IDxqY2hhZmZyYWl4QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC0zMSw3ICszMiw4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBKU1hQYXRo
UmVzdWx0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9y
KQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNYUGF0aFJlc3VsdDo6dmlzaXRB
ZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBhdXRvJiB2YWx1ZSA9
IHdyYXBwZWQoKS52YWx1ZSgpOwogICAgIGlmICh2YWx1ZS5pc05vZGVTZXQoKSkgewpAQCAtNDEs
NCArNDMsNiBAQCB2b2lkIEpTWFBhdGhSZXN1bHQ6OnZpc2l0QWRkaXRpb25hbENoaWxkCiAgICAg
fQogfQogCitERUZJTkVfVklTSVRfQURESVRJT05BTF9DSElMRFJFTihKU1hQYXRoUmVzdWx0KTsK
KwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvV2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwCShyZXZp
c2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlVHlwZWRB
cnJheUNvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU2LDcgKzU2LDcgQEAgYm9vbCBXZWJD
b3JlVHlwZWRBcnJheUNvbnRyb2xsZXI6OmlzQXRvbQogICAgIHJldHVybiBtX2FsbG93QXRvbWlj
c1dhaXQ7CiB9CiAKLWJvb2wgV2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyOjpKU0FycmF5QnVm
ZmVyT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5r
bm93bj4gaGFuZGxlLCB2b2lkKiwgSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hh
cioqIHJlYXNvbikKK2Jvb2wgV2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyOjpKU0FycmF5QnVm
ZmVyT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5r
bm93bj4gaGFuZGxlLCB2b2lkKiwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBj
b25zdCBjaGFyKiogcmVhc29uKQogewogICAgIGlmIChVTkxJS0VMWShyZWFzb24pKQogICAgICAg
ICAqcmVhc29uID0gIkFycmF5QnVmZmVyIGlzIG9wYXF1ZSByb290IjsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL1dlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dlYkNvcmVUeXBlZEFycmF5Q29udHJv
bGxlci5oCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9X
ZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00OCw3ICs0OCw3IEBA
IHB1YmxpYzoKIHByaXZhdGU6CiAgICAgY2xhc3MgSlNBcnJheUJ1ZmZlck93bmVyIDogcHVibGlj
IEpTQzo6V2Vha0hhbmRsZU93bmVyIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIGJvb2wgaXNSZWFj
aGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29u
dGV4dCwgSlNDOjpTbG90VmlzaXRvciYsIGNvbnN0IGNoYXIqKikgb3ZlcnJpZGU7CisgICAgICAg
IGJvb2wgaXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3du
Piwgdm9pZCogY29udGV4dCwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiwgY29uc3QgY2hhcioq
KSBvdmVycmlkZTsKICAgICAgICAgdm9pZCBmaW5hbGl6ZShKU0M6OkhhbmRsZTxKU0M6OlVua25v
d24+LCB2b2lkKiBjb250ZXh0KSBvdmVycmlkZTsKICAgICB9OwogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQkocmV2aXNp
b24gMjcyOTAyKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJh
dG9ySlMucG0JKHdvcmtpbmcgY29weSkKQEAgLTMsNyArMyw3IEBACiAjIENvcHlyaWdodCAoQykg
MjAwNiBBbmRlcnMgQ2FybHNzb24gPGFuZGVyc2NhQG1hYy5jb20+CiAjIENvcHlyaWdodCAoQykg
MjAwNiwgMjAwNyBTYW11ZWwgV2VpbmlnIDxzYW1Ad2Via2l0Lm9yZz4KICMgQ29weXJpZ2h0IChD
KSAyMDA2IEFsZXhleSBQcm9za3VyeWFrb3YgPGFwQHdlYmtpdC5vcmc+Ci0jIENvcHlyaWdodCAo
QykgMjAwNi0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgQ29weXJpZ2h0
IChDKSAyMDA2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogIyBDb3B5cmln
aHQgKEMpIDIwMDkgQ2FtZXJvbiBNY0Nvcm1hY2sgPGNhbUBtY2MuaWQuYXU+CiAjIENvcHlyaWdo
dCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICMgQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vi
c2lkaWFyeSgtaWVzKQpAQCAtMzA3OCw4ICszMDc4LDggQEAgc3ViIEdlbmVyYXRlSGVhZGVyCiAK
ICAgICAjIHZpc2l0IGZ1bmN0aW9uCiAgICAgaWYgKCRuZWVkc1Zpc2l0Q2hpbGRyZW4pIHsKLSAg
ICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVu
KEpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKTtcbiIpOwotICAgICAgICBwdXNoKEBoZWFkZXJD
b250ZW50LCAiICAgIHZvaWQgdmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRv
ciYpO1xuIikgaWYgJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57SlNDdXN0b21NYXJr
RnVuY3Rpb259OworICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIERFQ0xBUkVfVklT
SVRfQ0hJTERSRU47XG4iKTsKKyAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIHZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0
b3ImKTtcbiIpIGlmICRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+e0pTQ3VzdG9tTWFy
a0Z1bmN0aW9ufTsKICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIlxuIik7CiAKICAgICAg
ICAgaWYgKCRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+e0pTQ3VzdG9tTWFya0Z1bmN0
aW9ufSkgewpAQCAtMzA5NCw3ICszMDk0LDcgQEAgc3ViIEdlbmVyYXRlSGVhZGVyCiAgICAgICAg
ICAgICAjIHRoYXQgdGhlIEdDIGNhbGxzIHRvIGFzayBhbiBvYmplY3QgaXMgaXQgd291bGQgbGlr
ZSB0byBtYXJrIGFueXRoaW5nIGVsc2UgYWZ0ZXIgdGhlCiAgICAgICAgICAgICAjIHByb2dyYW0g
cmVzdW1lZCBzaW5jZSB0aGUgbGFzdCBjYWxsIHRvIHZpc2l0Q2hpbGRyZW4gb3IgdmlzaXRPdXRw
dXRDb25zdHJhaW50cy4gU2luY2UKICAgICAgICAgICAgICMgdGhpcyBqdXN0IGNhbGxzIHZpc2l0
QWRkaXRpb25hbENoaWxkcmVuLCB5b3UgdXN1YWxseSBkb24ndCBoYXZlIHRvIHdvcnJ5IGFib3V0
IHRoaXMuCi0gICAgICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHN0YXRpYyB2b2lk
IHZpc2l0T3V0cHV0Q29uc3RyYWludHMoSlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpO1xuIik7
CisgICAgICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFZpc2l0b3I+IHN0YXRpYyB2b2lkIHZpc2l0T3V0cHV0Q29uc3RyYWludHMoSlNDZWxsKiwgVmlz
aXRvciYpO1xuIik7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTMyMTUsNyArMzIxNSw3IEBAIHN1
YiBHZW5lcmF0ZUhlYWRlcgogICAgICAgICB9CiAgICAgICAgICRoZWFkZXJJbmNsdWRlc3siPHd0
Zi9OZXZlckRlc3Ryb3llZC5oPiJ9ID0gMTsKICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwg
InB1YmxpYzpcbiIpOwotICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIGJvb2wgaXNS
ZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCog
Y29udGV4dCwgSlNDOjpTbG90VmlzaXRvciYsIGNvbnN0IGNoYXIqKikgJHtvdmVycmlkZURlY2x9
O1xuIik7CisgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgYm9vbCBpc1JlYWNoYWJs
ZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0
LCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImLCBjb25zdCBjaGFyKiopICR7b3ZlcnJpZGVEZWNs
fTtcbiIpOwogICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHZvaWQgZmluYWxpemUo
SlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCkgJHtvdmVycmlkZURlY2x9
O1xuIik7CiAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJ9O1xuIik7CiAgICAgICAgIHB1
c2goQGhlYWRlckNvbnRlbnQsICJcbiIpOwpAQCAtNDkzOSw2ICs0OTM5LDcgQEAgc3ViIEdlbmVy
YXRlSW1wbGVtZW50YXRpb24KICAgICBBZGRUb0ltcGxJbmNsdWRlcygiRE9NSXNvU3Vic3BhY2Vz
LmgiKTsKICAgICBBZGRUb0ltcGxJbmNsdWRlcygiV2ViQ29yZUpTQ2xpZW50RGF0YS5oIik7CiAg
ICAgQWRkVG9JbXBsSW5jbHVkZXMoIjxKYXZhU2NyaXB0Q29yZS9KU0Rlc3RydWN0aWJsZU9iamVj
dEhlYXBDZWxsVHlwZS5oPiIpOworICAgIEFkZFRvSW1wbEluY2x1ZGVzKCI8SmF2YVNjcmlwdENv
cmUvU2xvdFZpc2l0b3JNYWNyb3MuaD4iKTsKICAgICBBZGRUb0ltcGxJbmNsdWRlcygiPEphdmFT
Y3JpcHRDb3JlL1N1YnNwYWNlSW5saW5lcy5oPiIpOwogICAgIHB1c2goQGltcGxDb250ZW50LCAi
SlNDOjpJc29TdWJzcGFjZSogJHtjbGFzc05hbWV9OjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYg
dm0pXG4iKTsKICAgICBwdXNoKEBpbXBsQ29udGVudCwgIntcbiIpOwpAQCAtNDk1OCw3ICs0OTU5
LDEwIEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICIgICAgYXV0byogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvciR7aW50ZXJmYWNlTmFtZX0u
Z2V0KCk7XG4iKTsKICAgICBwdXNoKEBpbXBsQ29udGVudCwgIklHTk9SRV9XQVJOSU5HU19CRUdJ
TihcInVucmVhY2hhYmxlLWNvZGVcIilcbiIpOwogICAgIHB1c2goQGltcGxDb250ZW50LCAiSUdO
T1JFX1dBUk5JTkdTX0JFR0lOKFwidGF1dG9sb2dpY2FsLWNvbXBhcmVcIilcbiIpOwotICAgIHB1
c2goQGltcGxDb250ZW50LCAiICAgIGlmICgmJHtjbGFzc05hbWV9Ojp2aXNpdE91dHB1dENvbnN0
cmFpbnRzICE9ICZKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50cylcbiIpOworICAg
IHB1c2goQGltcGxDb250ZW50LCAiICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCko
SlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSAke2NsYXNzTmFtZX06OnZpc2l0T3V0
cHV0Q29uc3RyYWludHM7XG4iKTsKKyAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICB2b2lkICgq
anNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0
b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzO1xuIik7CisgICAgcHVz
aChAaW1wbENvbnRlbnQsICIgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2Vs
bFZpc2l0T3V0cHV0Q29uc3RyYWludClcbiIpOworIyAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAg
ICBpZiAoJiR7Y2xhc3NOYW1lfTo6dmlzaXRPdXRwdXRDb25zdHJhaW50cyAhPSAmSlNDOjpKU0Nl
bGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHMpXG4iKTsKICAgICBwdXNoKEBpbXBsQ29udGVudCwg
IiAgICAgICAgY2xpZW50RGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNl
KTtcbiIpOwogICAgIHB1c2goQGltcGxDb250ZW50LCAiSUdOT1JFX1dBUk5JTkdTX0VORFxuIik7
CiAgICAgcHVzaChAaW1wbENvbnRlbnQsICJJR05PUkVfV0FSTklOR1NfRU5EXG4iKTsKQEAgLTQ5
NjYsNyArNDk3MCw4IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgcHVzaChAaW1w
bENvbnRlbnQsICJ9XG5cbiIpOwogCiAgICAgaWYgKCRuZWVkc1Zpc2l0Q2hpbGRyZW4pIHsKLSAg
ICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ2b2lkICR7Y2xhc3NOYW1lfTo6dmlzaXRDaGlsZHJl
bihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKVxuIik7CisgICAgICAgIHB1c2go
QGltcGxDb250ZW50LCAidGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj5cbiIpOworICAgICAgICBw
dXNoKEBpbXBsQ29udGVudCwgInZvaWQgJHtjbGFzc05hbWV9Ojp2aXNpdENoaWxkcmVuSW1wbChK
U0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpXG4iKTsKICAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsICJ7XG4iKTsKICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgYXV0byogdGhp
c09iamVjdCA9IGpzQ2FzdDwke2NsYXNzTmFtZX0qPihjZWxsKTtcbiIpOwogICAgICAgICBwdXNo
KEBpbXBsQ29udGVudCwgIiAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3Qs
IGluZm8oKSk7XG4iKTsKQEAgLTQ5OTEsMTQgKzQ5OTYsMTkgQEAgc3ViIEdlbmVyYXRlSW1wbGVt
ZW50YXRpb24KICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudCwgIn1cblxuIik7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiREVGSU5FX1ZJU0lU
X0NISUxEUkVOKCR7Y2xhc3NOYW1lfSk7XG5cbiIpOworCiAgICAgICAgIGlmICgkaW50ZXJmYWNl
LT5leHRlbmRlZEF0dHJpYnV0ZXMtPntKU0N1c3RvbU1hcmtGdW5jdGlvbn0pIHsKLSAgICAgICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAidm9pZCAke2NsYXNzTmFtZX06OnZpc2l0T3V0cHV0Q29u
c3RyYWludHMoSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcilcbiIpOworICAgICAg
ICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPlxuIik7
CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgInZvaWQgJHtjbGFzc05hbWV9Ojp2aXNp
dE91dHB1dENvbnN0cmFpbnRzKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcilcbiIpOwog
ICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ7XG4iKTsKICAgICAgICAgICAgIHB1c2go
QGltcGxDb250ZW50LCAiICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8JHtjbGFzc05hbWV9
Kj4oY2VsbCk7XG4iKTsKICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIEFTU0VS
VF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTtcbiIpOwogICAgICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgQmFzZTo6dmlzaXRPdXRwdXRDb25zdHJhaW50cyh0
aGlzT2JqZWN0LCB2aXNpdG9yKTtcbiIpOwogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICIgICAgdGhpc09iamVjdC0+dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4odmlzaXRvcik7XG4iKTsK
ICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAifVxuXG4iKTsKKyAgICAgICAgICAgIHB1
c2goQGltcGxDb250ZW50LCAidGVtcGxhdGUgdm9pZCAke2NsYXNzTmFtZX06OnZpc2l0T3V0cHV0
Q29uc3RyYWludHMoSlNDZWxsKiwgQWJzdHJhY3RTbG90VmlzaXRvciYpO1xuIik7CisgICAgICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgInRlbXBsYXRlIHZvaWQgJHtjbGFzc05hbWV9Ojp2aXNp
dE91dHB1dENvbnN0cmFpbnRzKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7XG4iKTsKICAgICAgICAg
fQogICAgIH0KIApAQCAtNTAzMyw3ICs1MDQzLDcgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRp
b24KICAgICB9CiAKICAgICBpZiAoU2hvdWxkR2VuZXJhdGVXcmFwcGVyT3duZXJDb2RlKCRoYXNQ
YXJlbnQsICRpbnRlcmZhY2UpICYmICFHZXRDdXN0b21Jc1JlYWNoYWJsZSgkaW50ZXJmYWNlKSkg
ewotICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgImJvb2wgSlMke2ludGVyZmFjZU5hbWV9T3du
ZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4g
aGFuZGxlLCB2b2lkKiwgU2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24p
XG4iKTsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJib29sIEpTJHtpbnRlcmZhY2VOYW1l
fU93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25v
d24+IGhhbmRsZSwgdm9pZCosIEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNo
YXIqKiByZWFzb24pXG4iKTsKICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ7XG4iKTsKICAg
ICAgICAgIyBBbGwgQWN0aXZlRE9NT2JqZWN0cyBpbXBsZW1lbnQgaGFzUGVuZGluZ0FjdGl2aXR5
KCksIGJ1dCBub3QgYWxsIG9mIHRoZW0KICAgICAgICAgIyBpbmNyZW1lbnQgdGhlaXIgQysrIHJl
ZmVyZW5jZSBjb3VudHMgd2hlbiBoYXNQZW5kaW5nQWN0aXZpdHkoKSBiZWNvbWVzCkBAIC02NDMy
LDYgKzY0NDIsNyBAQCBzdWIgR2VuZXJhdGVDYWxsYmFja0hlYWRlckNvbnRlbnQKICAgICAgICAg
cHVzaChAJGNvbnRlbnRSZWYsICIgICAgYm9vbCBoYXNDYWxsYmFjaygpIGNvbnN0IGZpbmFsIHsg
cmV0dXJuIG1fZGF0YSAmJiBtX2RhdGEtPmNhbGxiYWNrKCk7IH1cblxuIik7CiAgICAgfQogCisg
ICAgcHVzaChAJGNvbnRlbnRSZWYsICIgICAgdm9pZCB2aXNpdEpTRnVuY3Rpb24oSlNDOjpBYnN0
cmFjdFNsb3RWaXNpdG9yJikgb3ZlcnJpZGU7XG5cbiIpIGlmICRpbnRlcmZhY2VPckNhbGxiYWNr
LT5leHRlbmRlZEF0dHJpYnV0ZXMtPntJc1dlYWtDYWxsYmFja307CiAgICAgcHVzaChAJGNvbnRl
bnRSZWYsICIgICAgdm9pZCB2aXNpdEpTRnVuY3Rpb24oSlNDOjpTbG90VmlzaXRvciYpIG92ZXJy
aWRlO1xuXG4iKSBpZiAkaW50ZXJmYWNlT3JDYWxsYmFjay0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57
SXNXZWFrQ2FsbGJhY2t9OwogCiAgICAgcHVzaChAJGNvbnRlbnRSZWYsICIgICAgJHtjYWxsYmFj
a0RhdGFUeXBlfSogbV9kYXRhO1xuIik7CkBAIC02NjIzLDYgKzY2MzQsMTAgQEAgc3ViIEdlbmVy
YXRlQ2FsbGJhY2tJbXBsZW1lbnRhdGlvbkNvbnRlbgogICAgIH0KIAogICAgIGlmICgkaW50ZXJm
YWNlT3JDYWxsYmFjay0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57SXNXZWFrQ2FsbGJhY2t9KSB7Cisg
ICAgICAgIHB1c2goQCRjb250ZW50UmVmLCAidm9pZCAke2NsYXNzTmFtZX06OnZpc2l0SlNGdW5j
dGlvbihKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpXG4iKTsKKyAgICAgICAgcHVz
aChAJGNvbnRlbnRSZWYsICJ7XG4iKTsKKyAgICAgICAgcHVzaChAJGNvbnRlbnRSZWYsICIgICAg
bV9kYXRhLT52aXNpdEpTRnVuY3Rpb24odmlzaXRvcik7XG4iKTsKKyAgICAgICAgcHVzaChAJGNv
bnRlbnRSZWYsICJ9XG5cbiIpOwogICAgICAgICBwdXNoKEAkY29udGVudFJlZiwgInZvaWQgJHtj
bGFzc05hbWV9Ojp2aXNpdEpTRnVuY3Rpb24oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcilcbiIp
OwogICAgICAgICBwdXNoKEAkY29udGVudFJlZiwgIntcbiIpOwogICAgICAgICBwdXNoKEAkY29u
dGVudFJlZiwgIiAgICBtX2RhdGEtPnZpc2l0SlNGdW5jdGlvbih2aXNpdG9yKTtcbiIpOwpAQCAt
NjczNCw2ICs2NzQ5LDcgQEAgc3ViIEdlbmVyYXRlSXRlcmFibGVEZWZpbml0aW9uCiAgICAgbXkg
JHZpc2libGVJbnRlcmZhY2VOYW1lID0gJGNvZGVHZW5lcmF0b3ItPkdldFZpc2libGVJbnRlcmZh
Y2VOYW1lKCRpbnRlcmZhY2UpOwogCiAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIkpTRE9NSXRlcmF0
b3IuaCIpOworICAgIEFkZFRvSW1wbEluY2x1ZGVzKCI8SmF2YVNjcmlwdENvcmUvU2xvdFZpc2l0
b3JNYWNyb3MuaD4iKTsKIAogICAgIHJldHVybiB1bmxlc3MgSXNLZXlWYWx1ZUl0ZXJhYmxlSW50
ZXJmYWNlKCRpbnRlcmZhY2UpOwogCkBAIC02Nzc3LDcgKzY3OTMsOSBAQCBwdWJsaWM6CiAgICAg
ICAgIGF1dG8qIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3Ike2l0ZXJhdG9yTmFtZX0uZ2V0
KCk7CiBJR05PUkVfV0FSTklOR1NfQkVHSU4oXCJ1bnJlYWNoYWJsZS1jb2RlXCIpCiBJR05PUkVf
V0FSTklOR1NfQkVHSU4oXCJ0YXV0b2xvZ2ljYWwtY29tcGFyZVwiKQotICAgICAgICBpZiAoJiR7
aXRlcmF0b3JOYW1lfTo6dmlzaXRPdXRwdXRDb25zdHJhaW50cyAhPSAmSlNDOjpKU0NlbGw6OnZp
c2l0T3V0cHV0Q29uc3RyYWludHMpCisgICAgICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3Ry
YWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSAke2l0ZXJhdG9yTmFtZX06
OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAgICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1
dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0Nl
bGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAgICAgIGlmIChteVZpc2l0T3V0cHV0Q29u
c3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCiAgICAgICAgICAgICBjbGll
bnREYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOwogSUdOT1JFX1dB
Uk5JTkdTX0VORAogSUdOT1JFX1dBUk5JTkdTX0VORApJbmRleDogU291cmNlL1dlYkNvcmUvZG9t
L0FjdGl2ZURPTUNhbGxiYWNrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0Fj
dGl2ZURPTUNhbGxiYWNrLmgJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9XZWJDb3JlL2Rv
bS9BY3RpdmVET01DYWxsYmFjay5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoK
ICAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKQEAgLTMzLDYgKzM0LDcgQEAK
ICNpbmNsdWRlICJDb250ZXh0RGVzdHJ1Y3Rpb25PYnNlcnZlci5oIgogCiBuYW1lc3BhY2UgSlND
IHsKK2NsYXNzIEFic3RyYWN0U2xvdFZpc2l0b3I7CiBjbGFzcyBTbG90VmlzaXRvcjsKIH0KIApA
QCAtNTUsNiArNTcsNyBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBhY3RpdmVE
T01PYmplY3RzQXJlU3VzcGVuZGVkKCkgY29uc3Q7CiAgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBh
Y3RpdmVET01PYmplY3RBcmVTdG9wcGVkKCkgY29uc3Q7CiAgICAgCisgICAgdmlydHVhbCB2b2lk
IHZpc2l0SlNGdW5jdGlvbihKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKSB7IH0KICAgICB2aXJ0
dWFsIHZvaWQgdmlzaXRKU0Z1bmN0aW9uKEpTQzo6U2xvdFZpc2l0b3ImKSB7IH0KIH07CiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9FdmVudExpc3RlbmVyLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvZG9tL0V2ZW50TGlzdGVuZXIuaAkocmV2aXNpb24gMjcyOTAyKQorKysgU291
cmNlL1dlYkNvcmUvZG9tL0V2ZW50TGlzdGVuZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yNCw2ICsyNCw3
IEBACiAjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KIAogbmFtZXNwYWNlIEpTQyB7CitjbGFzcyBB
YnN0cmFjdFNsb3RWaXNpdG9yOwogY2xhc3MgSlNPYmplY3Q7CiBjbGFzcyBTbG90VmlzaXRvcjsK
IH0KQEAgLTUyLDYgKzUzLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVFdmVu
dChTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgRXZlbnQmKSA9IDA7CiAgICAgdmlydHVhbCBib29s
IHdhc0NyZWF0ZWRGcm9tTWFya3VwKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KIAorICAgIHZp
cnR1YWwgdm9pZCB2aXNpdEpTRnVuY3Rpb24oSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJikgeyB9
CiAgICAgdmlydHVhbCB2b2lkIHZpc2l0SlNGdW5jdGlvbihKU0M6OlNsb3RWaXNpdG9yJikgeyB9
CiAKICAgICB2aXJ0dWFsIGJvb2wgaXNBdHRyaWJ1dGUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsg
fQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50VGFyZ2V0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRUYXJnZXQuY3BwCShyZXZpc2lvbiAyNzI5MDIpCisr
KyBTb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRUYXJnZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
LDcgKzIsNyBAQAogICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5v
cmcpCiAgKiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5v
cmcpCiAgKiAgICAgICAgICAgKEMpIDIwMDEgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcp
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQWxleGV5IFByb3NrdXJ5YWtvdiAoYXBAd2Vi
a2l0Lm9yZykKICAqICAgICAgICAgICAoQykgMjAwNywgMjAwOCBOaWtvbGFzIFppbW1lcm1hbm4g
PHppbW1lcm1hbm5Aa2RlLm9yZz4KICAqCkBAIC0zODQsNyArMzg0LDggQEAgdm9pZCBFdmVudFRh
cmdldDo6cmVtb3ZlQWxsRXZlbnRMaXN0ZW5lcgogICAgIHRocmVhZERhdGEuc2V0SXNJblJlbW92
ZUFsbEV2ZW50TGlzdGVuZXJzKGZhbHNlKTsKIH0KIAotdm9pZCBFdmVudFRhcmdldDo6dmlzaXRK
U0V2ZW50TGlzdGVuZXJzKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBl
bmFtZSBWaXNpdG9yPgordm9pZCBFdmVudFRhcmdldDo6dmlzaXRKU0V2ZW50TGlzdGVuZXJzKFZp
c2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgRXZlbnRUYXJnZXREYXRhKiBkYXRhID0gZXZlbnRUYXJn
ZXREYXRhQ29uY3VycmVudGx5KCk7CiAgICAgaWYgKCFkYXRhKQpAQCAtMzk2LDYgKzM5Nyw5IEBA
IHZvaWQgRXZlbnRUYXJnZXQ6OnZpc2l0SlNFdmVudExpc3RlbmVycygKICAgICAgICAgbGlzdGVu
ZXItPnZpc2l0SlNGdW5jdGlvbih2aXNpdG9yKTsKIH0KIAordGVtcGxhdGUgdm9pZCBFdmVudFRh
cmdldDo6dmlzaXRKU0V2ZW50TGlzdGVuZXJzKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpOwor
dGVtcGxhdGUgdm9pZCBFdmVudFRhcmdldDo6dmlzaXRKU0V2ZW50TGlzdGVuZXJzKEpTQzo6U2xv
dFZpc2l0b3ImKTsKKwogdm9pZCBFdmVudFRhcmdldDo6aW52YWxpZGF0ZUV2ZW50TGlzdGVuZXJS
ZWdpb25zKCkKIHsKICAgICBpZiAoaXM8RWxlbWVudD4oKnRoaXMpKSB7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9kb20vRXZlbnRUYXJnZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9k
b20vRXZlbnRUYXJnZXQuaAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL1dlYkNvcmUvZG9t
L0V2ZW50VGFyZ2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTIsNyArMiw3IEBACiAgKiBDb3B5cmln
aHQgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKICAqICAgICAgICAgICAoQykg
MTk5OSBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKICAqICAgICAgICAgICAoQykg
MjAwMSBEaXJrIE11ZWxsZXIgKG11ZWxsZXJAa2RlLm9yZykKLSAqIENvcHlyaWdodCAoQykgMjAw
NC0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAwNC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAo
QykgMjAwNiBBbGV4ZXkgUHJvc2t1cnlha292IChhcEB3ZWJraXQub3JnKQogICogICAgICAgICAg
IChDKSAyMDA3LCAyMDA4IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgog
ICoKQEAgLTk3LDcgKzk3LDcgQEAgcHVibGljOgogICAgIHZvaWQgZmlyZUV2ZW50TGlzdGVuZXJz
KEV2ZW50JiwgRXZlbnRJbnZva2VQaGFzZSk7CiAgICAgYm9vbCBpc0ZpcmluZ0V2ZW50TGlzdGVu
ZXJzKCkgY29uc3Q7CiAKLSAgICB2b2lkIHZpc2l0SlNFdmVudExpc3RlbmVycyhKU0M6OlNsb3RW
aXNpdG9yJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCB2aXNpdEpTRXZl
bnRMaXN0ZW5lcnMoVmlzaXRvciYpOwogICAgIHZvaWQgaW52YWxpZGF0ZUpTRXZlbnRMaXN0ZW5l
cnMoSlNDOjpKU09iamVjdCopOwogCiAgICAgY29uc3QgRXZlbnRUYXJnZXREYXRhKiBldmVudFRh
cmdldERhdGEoKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9NdXRhdGlvblJlY29y
ZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL011dGF0aW9uUmVjb3JkLmNw
cAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL1dlYkNvcmUvZG9tL011dGF0aW9uUmVjb3Jk
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMp
IDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMgYXJlCkBAIC00MSw3ICs0Miw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
bmFtZXNwYWNlIHsKIAotc3RhdGljIHZvaWQgdmlzaXROb2RlTGlzdChKU0M6OlNsb3RWaXNpdG9y
JiB2aXNpdG9yLCBOb2RlTGlzdCYgbm9kZUxpc3QpCitzdGF0aWMgdm9pZCB2aXNpdE5vZGVMaXN0
KEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvciwgTm9kZUxpc3QmIG5vZGVMaXN0KQog
ewogICAgIEFTU0VSVCghbm9kZUxpc3QuaXNMaXZlTm9kZUxpc3QoKSk7CiAgICAgdW5zaWduZWQg
bGVuZ3RoID0gbm9kZUxpc3QubGVuZ3RoKCk7CkBAIC02OCw3ICs2OSw3IEBAIHByaXZhdGU6CiAg
ICAgTm9kZSogcHJldmlvdXNTaWJsaW5nKCkgb3ZlcnJpZGUgeyByZXR1cm4gbV9wcmV2aW91c1Np
YmxpbmcuZ2V0KCk7IH0KICAgICBOb2RlKiBuZXh0U2libGluZygpIG92ZXJyaWRlIHsgcmV0dXJu
IG1fbmV4dFNpYmxpbmcuZ2V0KCk7IH0KIAotICAgIHZvaWQgdmlzaXROb2Rlc0NvbmN1cnJlbnRs
eShKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKSBjb25zdCBmaW5hbAorICAgIHZvaWQgdmlzaXRO
b2Rlc0NvbmN1cnJlbnRseShKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0
IGZpbmFsCiAgICAgewogICAgICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qocm9vdChtX3Rhcmdl
dC5wdHIoKSkpOwogICAgICAgICBpZiAobV9hZGRlZE5vZGVzKQpAQCAtMTA1LDcgKzEwNiw3IEBA
IHByaXZhdGU6CiAgICAgICAgIHJldHVybiBub2RlTGlzdC5nZXQoKTsKICAgICB9CiAKLSAgICB2
b2lkIHZpc2l0Tm9kZXNDb25jdXJyZW50bHkoSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikgY29u
c3QgZmluYWwKKyAgICB2b2lkIHZpc2l0Tm9kZXNDb25jdXJyZW50bHkoSlNDOjpBYnN0cmFjdFNs
b3RWaXNpdG9yJiB2aXNpdG9yKSBjb25zdCBmaW5hbAogICAgIHsKICAgICAgICAgdmlzaXRvci5h
ZGRPcGFxdWVSb290KHJvb3QobV90YXJnZXQucHRyKCkpKTsKICAgICB9CkBAIC0xNjQsNyArMTY1
LDcgQEAgcHJpdmF0ZToKIAogICAgIFN0cmluZyBvbGRWYWx1ZSgpIG92ZXJyaWRlIHsgcmV0dXJu
IFN0cmluZygpOyB9CiAKLSAgICB2b2lkIHZpc2l0Tm9kZXNDb25jdXJyZW50bHkoSlNDOjpTbG90
VmlzaXRvciYgdmlzaXRvcikgY29uc3QgZmluYWwKKyAgICB2b2lkIHZpc2l0Tm9kZXNDb25jdXJy
ZW50bHkoSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBjb25zdCBmaW5hbAogICAg
IHsKICAgICAgICAgbV9yZWNvcmQtPnZpc2l0Tm9kZXNDb25jdXJyZW50bHkodmlzaXRvcik7CiAg
ICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL011dGF0aW9uUmVjb3JkLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL011dGF0aW9uUmVjb3JkLmgJKHJldmlzaW9uIDI3Mjkw
MikKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9NdXRhdGlvblJlY29yZC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKQEAg
LTM2LDcgKzM3LDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLWNsYXNzIFNsb3RWaXNpdG9yOwor
Y2xhc3MgQWJzdHJhY3RTbG90VmlzaXRvcjsKIAogfQogCkBAIC03Miw3ICs3Myw3IEBAIHB1Ymxp
YzoKIAogICAgIHZpcnR1YWwgU3RyaW5nIG9sZFZhbHVlKCkgeyByZXR1cm4gU3RyaW5nKCk7IH0K
IAotICAgIHZpcnR1YWwgdm9pZCB2aXNpdE5vZGVzQ29uY3VycmVudGx5KEpTQzo6U2xvdFZpc2l0
b3ImKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0Tm9kZXNDb25jdXJyZW50bHko
SlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJikgY29uc3QgPSAwOwogfTsKIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL05vZGVGaWx0ZXJDb25kaXRpb24u
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZUZpbHRlckNvbmRpdGlvbi5o
CShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZUZpbHRlckNvbmRp
dGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3ICszOCw3IEBAIGNsYXNzIE5vZGVGaWx0ZXJD
b25kaXRpb24gOiBwdWJsaWMgUmVmQ28KIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5Ob2RlRmlsdGVy
Q29uZGl0aW9uKCkgPSBkZWZhdWx0OwogICAgIHZpcnR1YWwgdW5zaWduZWQgc2hvcnQgYWNjZXB0
Tm9kZShOb2RlJikgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShK
U0M6OlNsb3RWaXNpdG9yJikgeyB9CisvLyAgICB2aXJ0dWFsIHZvaWQgdmlzaXRBZ2dyZWdhdGUo
SlNDOjpTbG90VmlzaXRvciYpIHsgfSAvLyBtbGFtIFVOVVNFRAogfTsKIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL1N0YXRpY1JhbmdlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vU3RhdGljUmFuZ2UuY3BwCShyZXZpc2lvbiAy
NzI5MDIpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vU3RhdGljUmFuZ2UuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIwIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtNzYsNyArNzYsNyBAQCBFeGNlcHRpb25PcjxSZWY8U3RhdGljUmFuZ2U+PiBTdGF0
aWNSYW5nCiAgICAgcmV0dXJuIGNyZWF0ZSh7IHsgaW5pdC5zdGFydENvbnRhaW5lci5yZWxlYXNl
Tm9uTnVsbCgpLCBpbml0LnN0YXJ0T2Zmc2V0IH0sIHsgaW5pdC5lbmRDb250YWluZXIucmVsZWFz
ZU5vbk51bGwoKSwgaW5pdC5lbmRPZmZzZXQgfSB9KTsKIH0KIAotdm9pZCBTdGF0aWNSYW5nZTo6
dmlzaXROb2Rlc0NvbmN1cnJlbnRseShKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKSBjb25zdAor
dm9pZCBTdGF0aWNSYW5nZTo6dmlzaXROb2Rlc0NvbmN1cnJlbnRseShKU0M6OkFic3RyYWN0U2xv
dFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0CiB7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHJv
b3Qoc3RhcnQuY29udGFpbmVyLmdldCgpKSk7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHJv
b3QoZW5kLmNvbnRhaW5lci5nZXQoKSkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL1N0YXRp
Y1JhbmdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL1N0YXRpY1JhbmdlLmgJ
KHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9TdGF0aWNSYW5nZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNi0y
MDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
Ni0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMzAsNyArMzAsNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotY2xh
c3MgU2xvdFZpc2l0b3I7CitjbGFzcyBBYnN0cmFjdFNsb3RWaXNpdG9yOwogCiB9CiAKQEAgLTU4
LDcgKzU4LDcgQEAgcHVibGljOgogICAgIHVuc2lnbmVkIGVuZE9mZnNldCgpIGNvbnN0IGZpbmFs
IHsgcmV0dXJuIFNpbXBsZVJhbmdlOjplbmRPZmZzZXQoKTsgfQogICAgIGJvb2wgY29sbGFwc2Vk
KCkgY29uc3QgZmluYWwgeyByZXR1cm4gU2ltcGxlUmFuZ2U6OmNvbGxhcHNlZCgpOyB9CiAKLSAg
ICB2b2lkIHZpc2l0Tm9kZXNDb25jdXJyZW50bHkoSlNDOjpTbG90VmlzaXRvciYpIGNvbnN0Owor
ICAgIHZvaWQgdmlzaXROb2Rlc0NvbmN1cnJlbnRseShKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3Im
KSBjb25zdDsKIAogcHJpdmF0ZToKICAgICBTdGF0aWNSYW5nZShTaW1wbGVSYW5nZSYmKTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMMlJlbmRlcmluZ0NvbnRleHQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMMlJlbmRlcmlu
Z0NvbnRleHQuY3BwCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2Nh
bnZhcy9XZWJHTDJSZW5kZXJpbmdDb250ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMwNzgs
NyArMzA3OCw3IEBAIGJvb2wgV2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6Y2hlY2tBbmRUcmEKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBXZWJHTDJSZW5kZXJpbmdDb250ZXh0OjphZGRNZW1i
ZXJzVG9PcGFxdWVSb290cyhKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBXZWJHTDJS
ZW5kZXJpbmdDb250ZXh0OjphZGRNZW1iZXJzVG9PcGFxdWVSb290cyhKU0M6OkFic3RyYWN0U2xv
dFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6YWRk
TWVtYmVyc1RvT3BhcXVlUm9vdHModmlzaXRvcik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0
bWwvY2FudmFzL1dlYkdMMlJlbmRlcmluZ0NvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTDJSZW5kZXJpbmdDb250ZXh0LmgJKHJldmlzaW9uIDI3
MjkwMikKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMMlJlbmRlcmluZ0NvbnRl
eHQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTUtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2MSw3ICsyNjEsNyBAQCBwdWJsaWM6CiAKICAgICBi
b29sIGNoZWNrQW5kVHJhbnNsYXRlQXR0YWNobWVudHMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1l
LCBHQ0dMZW51bSwgVmVjdG9yPEdDR0xlbnVtPiYpOwogCi0gICAgdm9pZCBhZGRNZW1iZXJzVG9P
cGFxdWVSb290cyhKU0M6OlNsb3RWaXNpdG9yJikgb3ZlcnJpZGU7CisgICAgdm9pZCBhZGRNZW1i
ZXJzVG9PcGFxdWVSb290cyhKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKSBvdmVycmlkZTsKIAog
cHJpdmF0ZToKICAgICBXZWJHTDJSZW5kZXJpbmdDb250ZXh0KENhbnZhc0Jhc2UmLCBHcmFwaGlj
c0NvbnRleHRHTEF0dHJpYnV0ZXMpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
V2ViR0xGcmFtZWJ1ZmZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9j
YW52YXMvV2ViR0xGcmFtZWJ1ZmZlci5jcHAJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRnJhbWVidWZmZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOS0yMDE3IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDIxIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtNjMsNyArNjMsNyBAQCBuYW1lc3BhY2UgewogICAgICAgICB2b2lkIG9uRGV0YWNoZWQoY29u
c3QgQWJzdHJhY3RMb2NrZXImLCBHcmFwaGljc0NvbnRleHRHTCopIG92ZXJyaWRlOwogICAgICAg
ICB2b2lkIGF0dGFjaChHcmFwaGljc0NvbnRleHRHTCosIEdDR0xlbnVtIHRhcmdldCwgR0NHTGVu
dW0gYXR0YWNobWVudCkgb3ZlcnJpZGU7CiAgICAgICAgIHZvaWQgdW5hdHRhY2goR3JhcGhpY3ND
b250ZXh0R0wqLCBHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIGF0dGFjaG1lbnQpIG92ZXJyaWRl
OwotICAgICAgICB2b2lkIGFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKGNvbnN0IEFic3RyYWN0TG9j
a2VyJiwgSlNDOjpTbG90VmlzaXRvciYpIG92ZXJyaWRlOworICAgICAgICB2b2lkIGFkZE1lbWJl
cnNUb09wYXF1ZVJvb3RzKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgSlNDOjpBYnN0cmFjdFNsb3RW
aXNpdG9yJikgb3ZlcnJpZGU7CiAKICAgICAgICAgV2ViR0xSZW5kZXJidWZmZXJBdHRhY2htZW50
KCkgeyB9OwogCkBAIC0xNDUsNyArMTQ1LDcgQEAgbmFtZXNwYWNlIHsKICAgICAgICAgICAgIGNv
bnRleHQtPmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKHRhcmdldCwgYXR0YWNobWVudCwgR3JhcGhp
Y3NDb250ZXh0R0w6OlJFTkRFUkJVRkZFUiwgMCk7CiAgICAgfQogCi0gICAgdm9pZCBXZWJHTFJl
bmRlcmJ1ZmZlckF0dGFjaG1lbnQ6OmFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKGNvbnN0IEFic3Ry
YWN0TG9ja2VyJiwgSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKKyAgICB2b2lkIFdlYkdMUmVu
ZGVyYnVmZmVyQXR0YWNobWVudDo6YWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMoY29uc3QgQWJzdHJh
Y3RMb2NrZXImLCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiAgICAgewogICAg
ICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QobV9yZW5kZXJidWZmZXIuZ2V0KCkpOwogICAgIH0K
QEAgLTE2OSw3ICsxNjksNyBAQCBuYW1lc3BhY2UgewogICAgICAgICB2b2lkIG9uRGV0YWNoZWQo
Y29uc3QgQWJzdHJhY3RMb2NrZXImLCBHcmFwaGljc0NvbnRleHRHTCopIG92ZXJyaWRlOwogICAg
ICAgICB2b2lkIGF0dGFjaChHcmFwaGljc0NvbnRleHRHTCosIEdDR0xlbnVtIHRhcmdldCwgR0NH
TGVudW0gYXR0YWNobWVudCkgb3ZlcnJpZGU7CiAgICAgICAgIHZvaWQgdW5hdHRhY2goR3JhcGhp
Y3NDb250ZXh0R0wqLCBHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIGF0dGFjaG1lbnQpIG92ZXJy
aWRlOwotICAgICAgICB2b2lkIGFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKGNvbnN0IEFic3RyYWN0
TG9ja2VyJiwgSlNDOjpTbG90VmlzaXRvciYpIG92ZXJyaWRlOworICAgICAgICB2b2lkIGFkZE1l
bWJlcnNUb09wYXF1ZVJvb3RzKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgSlNDOjpBYnN0cmFjdFNs
b3RWaXNpdG9yJikgb3ZlcnJpZGU7CiAKICAgICAgICAgV2ViR0xUZXh0dXJlQXR0YWNobWVudCgp
IHsgfTsKIApAQCAtMjY3LDcgKzI2Nyw3IEBAIG5hbWVzcGFjZSB7CiAjZW5kaWYKICAgICB9CiAK
LSAgICB2b2lkIFdlYkdMVGV4dHVyZUF0dGFjaG1lbnQ6OmFkZE1lbWJlcnNUb09wYXF1ZVJvb3Rz
KGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKKyAgICB2
b2lkIFdlYkdMVGV4dHVyZUF0dGFjaG1lbnQ6OmFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKGNvbnN0
IEFic3RyYWN0TG9ja2VyJiwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogICAg
IHsKICAgICAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KG1fdGV4dHVyZS5nZXQoKSk7CiAgICAg
fQpAQCAtNzIxLDcgKzcyMSw3IEBAIEdDR0xlbnVtIFdlYkdMRnJhbWVidWZmZXI6OmdldERyYXdC
dWZmZXIKICAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0R0w6Ok5PTkU7CiB9CiAKLXZvaWQgV2Vi
R0xGcmFtZWJ1ZmZlcjo6YWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMoY29uc3QgQWJzdHJhY3RMb2Nr
ZXImIGxvY2tlciwgSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgV2ViR0xGcmFtZWJ1
ZmZlcjo6YWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMoY29uc3QgQWJzdHJhY3RMb2NrZXImIGxvY2tl
ciwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGZvciAoYXV0byYg
ZW50cnkgOiBtX2F0dGFjaG1lbnRzKQogICAgICAgICBlbnRyeS52YWx1ZS0+YWRkTWVtYmVyc1Rv
T3BhcXVlUm9vdHMobG9ja2VyLCB2aXNpdG9yKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL1dlYkdMRnJhbWVidWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9XZWJHTEZyYW1lYnVmZmVyLmgJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRnJhbWVidWZmZXIuaAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0z
NCw3ICszNCw3IEBACiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgSlNDIHsK
LWNsYXNzIFNsb3RWaXNpdG9yOworY2xhc3MgQWJzdHJhY3RTbG90VmlzaXRvcjsKIH0KIAogbmFt
ZXNwYWNlIFdURiB7CkBAIC02NSw3ICs2NSw3IEBAIHB1YmxpYzoKICAgICAgICAgdmlydHVhbCB2
b2lkIG9uRGV0YWNoZWQoY29uc3QgV1RGOjpBYnN0cmFjdExvY2tlciYsIEdyYXBoaWNzQ29udGV4
dEdMKikgPSAwOwogICAgICAgICB2aXJ0dWFsIHZvaWQgYXR0YWNoKEdyYXBoaWNzQ29udGV4dEdM
KiwgR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBhdHRhY2htZW50KSA9IDA7CiAgICAgICAgIHZp
cnR1YWwgdm9pZCB1bmF0dGFjaChHcmFwaGljc0NvbnRleHRHTCosIEdDR0xlbnVtIHRhcmdldCwg
R0NHTGVudW0gYXR0YWNobWVudCkgPSAwOwotICAgICAgICB2aXJ0dWFsIHZvaWQgYWRkTWVtYmVy
c1RvT3BhcXVlUm9vdHMoY29uc3QgV1RGOjpBYnN0cmFjdExvY2tlciYsIEpTQzo6U2xvdFZpc2l0
b3ImKSA9IDA7CisgICAgICAgIHZpcnR1YWwgdm9pZCBhZGRNZW1iZXJzVG9PcGFxdWVSb290cyhj
b25zdCBXVEY6OkFic3RyYWN0TG9ja2VyJiwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJikgPSAw
OwogCiAgICAgcHJvdGVjdGVkOgogICAgICAgICBXZWJHTEF0dGFjaG1lbnQoKTsKQEAgLTExNCw3
ICsxMTQsNyBAQCBwdWJsaWM6CiAKICAgICBHQ0dMZW51bSBnZXREcmF3QnVmZmVyKEdDR0xlbnVt
KTsKIAotICAgIHZvaWQgYWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMoY29uc3QgV1RGOjpBYnN0cmFj
dExvY2tlciYsIEpTQzo6U2xvdFZpc2l0b3ImKTsKKyAgICB2b2lkIGFkZE1lbWJlcnNUb09wYXF1
ZVJvb3RzKGNvbnN0IFdURjo6QWJzdHJhY3RMb2NrZXImLCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0
b3ImKTsKIAogcHJpdmF0ZToKICAgICBXZWJHTEZyYW1lYnVmZmVyKFdlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2UmKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUHJvZ3Jh
bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xQcm9n
cmFtLmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
V2ViR0xQcm9ncmFtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDA5LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yMDYsNyArMjA2LDcgQEAgYm9vbCBXZWJH
TFByb2dyYW06OmRldGFjaFNoYWRlcihjb25zdCBBYgogICAgIH0KIH0KIAotdm9pZCBXZWJHTFBy
b2dyYW06OmFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgSlND
OjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgV2ViR0xQcm9ncmFtOjphZGRNZW1iZXJzVG9P
cGFxdWVSb290cyhjb25zdCBBYnN0cmFjdExvY2tlciYsIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRv
ciYgdmlzaXRvcikKIHsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QobV92ZXJ0ZXhTaGFkZXIu
Z2V0KCkpOwogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChtX2ZyYWdtZW50U2hhZGVyLmdldCgp
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUHJvZ3JhbS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUHJvZ3JhbS5oCShyZXZp
c2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFByb2dyYW0u
aAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDktMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDktMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTM1LDcgKzM1LDcgQEAKICNpbmNsdWRlIDx3dGYvVmVjdG9y
Lmg+CiAKIG5hbWVzcGFjZSBKU0MgewotY2xhc3MgU2xvdFZpc2l0b3I7CitjbGFzcyBBYnN0cmFj
dFNsb3RWaXNpdG9yOwogfQogCiBuYW1lc3BhY2UgV1RGIHsKQEAgLTg4LDcgKzg4LDcgQEAgcHVi
bGljOgogICAgICAgICByZXR1cm4gbV9yZXF1aXJlZFRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyQ291
bnQ7CiAgICAgfQogCi0gICAgdm9pZCBhZGRNZW1iZXJzVG9PcGFxdWVSb290cyhjb25zdCBXVEY6
OkFic3RyYWN0TG9ja2VyJiwgSlNDOjpTbG90VmlzaXRvciYpOworICAgIHZvaWQgYWRkTWVtYmVy
c1RvT3BhcXVlUm9vdHMoY29uc3QgV1RGOjpBYnN0cmFjdExvY2tlciYsIEpTQzo6QWJzdHJhY3RT
bG90VmlzaXRvciYpOwogCiBwcml2YXRlOgogICAgIFdlYkdMUHJvZ3JhbShXZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlJik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcAkocmV2aXNpb24gMjcyOTAyKQor
KysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE1LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC03OTMxLDcgKzc5MzEsNyBAQCB2b2lkIFdlYkdMUmVuZGVy
aW5nQ29udGV4dEJhc2U6OmRpc3BhdGNoCiAgICAgcXVldWVUYXNrVG9EaXNwYXRjaEV2ZW50KCpj
YW52YXMsIFRhc2tTb3VyY2U6OldlYkdMLCBXZWJHTENvbnRleHRFdmVudDo6Y3JlYXRlKGV2ZW50
TmFtZXMoKS53ZWJnbGNvbnRleHRjaGFuZ2VkRXZlbnQsIEV2ZW50OjpDYW5CdWJibGU6Ok5vLCBF
dmVudDo6SXNDYW5jZWxhYmxlOjpZZXMsIGVtcHR5U3RyaW5nKCkpKTsKIH0KIAotdm9pZCBXZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlOjphZGRNZW1iZXJzVG9PcGFxdWVSb290cyhKU0M6OlNsb3RW
aXNpdG9yJiB2aXNpdG9yKQordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjphZGRNZW1i
ZXJzVG9PcGFxdWVSb290cyhKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAg
ICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhvYmplY3RHcmFwaExvY2soKSk7CiAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlLmgJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU4LDcgKzU4
LDcgQEAKICNlbmRpZgogCiBuYW1lc3BhY2UgSlNDIHsKLWNsYXNzIFNsb3RWaXNpdG9yOworY2xh
c3MgQWJzdHJhY3RTbG90VmlzaXRvcjsKIH0KIAogbmFtZXNwYWNlIFdURiB7CkBAIC00MTEsNyAr
NDExLDcgQEAgcHVibGljOgogICAgIHZvaWQgcmVjeWNsZUNvbnRleHQoKSBvdmVycmlkZTsKICAg
ICB2b2lkIGRpc3BhdGNoQ29udGV4dENoYW5nZWROb3RpZmljYXRpb24oKSBvdmVycmlkZTsKIAot
ICAgIHZpcnR1YWwgdm9pZCBhZGRNZW1iZXJzVG9PcGFxdWVSb290cyhKU0M6OlNsb3RWaXNpdG9y
Jik7CisgICAgdmlydHVhbCB2b2lkIGFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKEpTQzo6QWJzdHJh
Y3RTbG90VmlzaXRvciYpOwogICAgIC8vIFRoaXMgbG9jayBtdXN0IGJlIGhlbGQgYWNyb3NzIGFs
bCBtdXRhdGlvbnMgb2YgY29udGFpbmVycyBsaWtlCiAgICAgLy8gVmVjdG9ycywgSGFzaFNldHMs
IGV0Yy4gd2hpY2ggY29udGFpbiBSZWZQdHI8V2ViR0xPYmplY3Q+LCBhbmQKICAgICAvLyB3aGlj
aCBhcmUgdHJhdmVyc2VkIGJ5IGFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKCkgb3IgYW55IG9mIHRo
ZQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xUcmFuc2Zvcm1GZWVkYmFj
ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xUcmFu
c2Zvcm1GZWVkYmFjay5jcHAJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9XZWJDb3JlL2h0
bWwvY2FudmFzL1dlYkdMVHJhbnNmb3JtRmVlZGJhY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMwLDgg
KzMwLDcgQEAKIAogI2luY2x1ZGUgIldlYkdMQ29udGV4dEdyb3VwLmgiCiAjaW5jbHVkZSAiV2Vi
R0xSZW5kZXJpbmdDb250ZXh0QmFzZS5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1Nsb3RW
aXNpdG9yLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvU2xvdFZpc2l0b3JJbmxpbmVzLmg+
CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvQWJzdHJhY3RTbG90VmlzaXRvcklubGluZXMuaD4K
ICNpbmNsdWRlIDx3dGYvTG9jay5oPgogI2luY2x1ZGUgPHd0Zi9Mb2NrZXIuaD4KIApAQCAtOTMs
NyArOTIsNyBAQCBib29sIFdlYkdMVHJhbnNmb3JtRmVlZGJhY2s6Omhhc0Vub3VnaEJ1CiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgV2ViR0xUcmFuc2Zvcm1GZWVkYmFjazo6YWRkTWVtYmVy
c1RvT3BhcXVlUm9vdHMoY29uc3QgQWJzdHJhY3RMb2NrZXImIGxvY2tlciwgSlNDOjpTbG90Vmlz
aXRvciYgdmlzaXRvcikKK3ZvaWQgV2ViR0xUcmFuc2Zvcm1GZWVkYmFjazo6YWRkTWVtYmVyc1Rv
T3BhcXVlUm9vdHMoY29uc3QgQWJzdHJhY3RMb2NrZXImIGxvY2tlciwgSlNDOjpBYnN0cmFjdFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGZvciAoYXV0byYgYnVmZmVyIDogbV9ib3VuZElu
ZGV4ZWRUcmFuc2Zvcm1GZWVkYmFja0J1ZmZlcnMpCiAgICAgICAgIHZpc2l0b3IuYWRkT3BhcXVl
Um9vdChidWZmZXIuZ2V0KCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2Vi
R0xUcmFuc2Zvcm1GZWVkYmFjay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL1dlYkdMVHJhbnNmb3JtRmVlZGJhY2suaAkocmV2aXNpb24gMjcyOTAyKQorKysgU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xUcmFuc2Zvcm1GZWVkYmFjay5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE3IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMzEsNyArMzEsNyBAQAogI2luY2x1ZGUgIldlYkdMU2hhcmVkT2JqZWN0Lmgi
CiAKIG5hbWVzcGFjZSBKU0MgewotY2xhc3MgU2xvdFZpc2l0b3I7CitjbGFzcyBBYnN0cmFjdFNs
b3RWaXNpdG9yOwogfQogCiBuYW1lc3BhY2UgV1RGIHsKQEAgLTcwLDcgKzcwLDcgQEAgcHVibGlj
OgogICAgIAogICAgIGJvb2wgaGFzRW5vdWdoQnVmZmVycyhHQ0dMdWludCBudW1SZXF1aXJlZCkg
Y29uc3Q7CiAKLSAgICB2b2lkIGFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKGNvbnN0IEFic3RyYWN0
TG9ja2VyJiwgSlNDOjpTbG90VmlzaXRvciYpOworICAgIHZvaWQgYWRkTWVtYmVyc1RvT3BhcXVl
Um9vdHMoY29uc3QgQWJzdHJhY3RMb2NrZXImLCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKTsK
IAogcHJpdmF0ZToKICAgICBXZWJHTFRyYW5zZm9ybUZlZWRiYWNrKFdlYkdMMlJlbmRlcmluZ0Nv
bnRleHQmKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVmVydGV4QXJy
YXlPYmplY3RCYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZh
cy9XZWJHTFZlcnRleEFycmF5T2JqZWN0QmFzZS5jcHAJKHJldmlzaW9uIDI3MjkwMikKKysrIFNv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVmVydGV4QXJyYXlPYmplY3RCYXNlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUt
MjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTUtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTI5LDggKzI5LDcgQEAKICNpZiBFTkFCTEUoV0VCR0wpCiAKICNp
bmNsdWRlICJXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvU2xvdFZpc2l0b3IuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9TbG90VmlzaXRv
cklubGluZXMuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9BYnN0cmFjdFNsb3RWaXNpdG9y
SW5saW5lcy5oPgogI2luY2x1ZGUgPHd0Zi9Mb2NrZXIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewpAQCAtMTA5LDcgKzEwOCw3IEBAIHZvaWQgV2ViR0xWZXJ0ZXhBcnJheU9iamVjdEJhc2U6OnNl
dFZlcnQKICAgICBtX3ZlcnRleEF0dHJpYlN0YXRlW2luZGV4XS5kaXZpc29yID0gZGl2aXNvcjsK
IH0KIAotdm9pZCBXZWJHTFZlcnRleEFycmF5T2JqZWN0QmFzZTo6YWRkTWVtYmVyc1RvT3BhcXVl
Um9vdHMoY29uc3QgQWJzdHJhY3RMb2NrZXImLCBKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQor
dm9pZCBXZWJHTFZlcnRleEFycmF5T2JqZWN0QmFzZTo6YWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMo
Y29uc3QgQWJzdHJhY3RMb2NrZXImLCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3Ip
CiB7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KG1fYm91bmRFbGVtZW50QXJyYXlCdWZmZXIu
Z2V0KCkpOwogICAgIGZvciAoYXV0byYgc3RhdGUgOiBtX3ZlcnRleEF0dHJpYlN0YXRlKQpJbmRl
eDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xWZXJ0ZXhBcnJheU9iamVjdEJhc2Uu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFZlcnRleEFy
cmF5T2JqZWN0QmFzZS5oCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9XZWJHTFZlcnRleEFycmF5T2JqZWN0QmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MzIsNyArMzIsNyBAQAogI2luY2x1ZGUgIldlYkdMQ29udGV4dE9iamVjdC5oIgogCiBuYW1lc3Bh
Y2UgSlNDIHsKLWNsYXNzIFNsb3RWaXNpdG9yOworY2xhc3MgQWJzdHJhY3RTbG90VmlzaXRvcjsK
IH0KIAogbmFtZXNwYWNlIFdURiB7CkBAIC03Nyw3ICs3Nyw3IEBAIHB1YmxpYzoKIAogICAgIHZv
aWQgc2V0VmVydGV4QXR0cmliRGl2aXNvcihHQ0dMdWludCBpbmRleCwgR0NHTHVpbnQgZGl2aXNv
cik7CiAKLSAgICB2b2lkIGFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKGNvbnN0IFdURjo6QWJzdHJh
Y3RMb2NrZXImLCBKU0M6OlNsb3RWaXNpdG9yJik7CisgICAgdm9pZCBhZGRNZW1iZXJzVG9PcGFx
dWVSb290cyhjb25zdCBXVEY6OkFic3RyYWN0TG9ja2VyJiwgSlNDOjpBYnN0cmFjdFNsb3RWaXNp
dG9yJik7CiAKIHByb3RlY3RlZDoKICAgICBXZWJHTFZlcnRleEFycmF5T2JqZWN0QmFzZShXZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlJiwgVHlwZSk7Cg==
</data>
<flag name="commit-queue"
          id="438977"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>420511</attachid>
            <date>2021-02-16 11:42:22 -0800</date>
            <delta_ts>2021-02-16 12:00:18 -0800</delta_ts>
            <desc>work in progress.</desc>
            <filename>bug-217274p3.patch</filename>
            <type>text/plain</type>
            <size>597337</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDI3MjkwMikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtNjEzLDYgKzYxMyw4IEBAIHNldChKYXZhU2NyaXB0Q29yZV9QUklWQVRFX0ZSQU1FV09SS19I
RUEKICAgICBkb21qaXQvRE9NSklUSGVhcFJhbmdlLmgKICAgICBkb21qaXQvRE9NSklUU2lnbmF0
dXJlLmgKIAorICAgIGhlYXAvQWJzdHJhY3RTbG90VmlzaXRvci5oCisgICAgaGVhcC9BYnN0cmFj
dFNsb3RWaXNpdG9ySW5saW5lcy5oCiAgICAgaGVhcC9BbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmgK
ICAgICBoZWFwL0FsbG9jYXRpb25GYWlsdXJlTW9kZS5oCiAgICAgaGVhcC9BbGxvY2F0b3IuaApA
QCAtNjc4LDYgKzY4MCw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9QUklWQVRFX0ZSQU1FV09SS19I
RUEKICAgICBoZWFwL01hcmtlZEJsb2NrU2V0LmgKICAgICBoZWFwL01hcmtlZFNwYWNlLmgKICAg
ICBoZWFwL01hcmtpbmdDb25zdHJhaW50LmgKKyAgICBoZWFwL01hcmtpbmdDb25zdHJhaW50RXhl
Y3V0b3JQYWlyLmgKICAgICBoZWFwL011dGF0b3JTdGF0ZS5oCiAgICAgaGVhcC9QYWNrZWRDZWxs
UHRyLmgKICAgICBoZWFwL1ByZWNpc2VBbGxvY2F0aW9uLmgKQEAgLTY4NywxMiArNjkwLDE0IEBA
IHNldChKYXZhU2NyaXB0Q29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUEKICAgICBoZWFwL1NpbXBs
ZU1hcmtpbmdDb25zdHJhaW50LmgKICAgICBoZWFwL1Nsb3RWaXNpdG9yLmgKICAgICBoZWFwL1Ns
b3RWaXNpdG9ySW5saW5lcy5oCisgICAgaGVhcC9TbG90VmlzaXRvck1hY3Jvcy5oCiAgICAgaGVh
cC9TdHJvbmcuaAogICAgIGhlYXAvU3Ryb25nSW5saW5lcy5oCiAgICAgaGVhcC9TdWJzcGFjZS5o
CiAgICAgaGVhcC9TdWJzcGFjZUlubGluZXMuaAogICAgIGhlYXAvU3luY2hyb25vdXNuZXNzLmgK
ICAgICBoZWFwL1RpbnlCbG9vbUZpbHRlci5oCisgICAgaGVhcC9WZXJpZmllclNsb3RWaXNpdG9y
LmgKICAgICBoZWFwL1Zpc2l0UmFjZUtleS5oCiAgICAgaGVhcC9XZWFrLmgKICAgICBoZWFwL1dl
YWtCbG9jay5oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CShyZXZpc2lvbiAyNzI5
MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQJKHdvcmtpbmcgY29weSkK
QEAgLTU2Myw2ICs1NjMsNyBAQCBoZWFwL1N0b3BJZk5lY2Vzc2FyeVRpbWVyLmNwcAogaGVhcC9T
dWJzcGFjZS5jcHAKIGhlYXAvU3luY2hyb25vdXNTdG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1bGVy
LmNwcAogaGVhcC9TeW5jaHJvbm91c25lc3MuY3BwCitoZWFwL1ZlcmlmaWVyU2xvdFZpc2l0b3Iu
Y3BwCiBoZWFwL1Zpc2l0UmFjZUtleS5jcHAKIGhlYXAvV2Vhay5jcHAKIGhlYXAvV2Vha0Jsb2Nr
LmNwcApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0FQSVdyYXBwZXJPYmplY3Qu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQVBJV3JhcHBlck9i
amVjdC5oCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pT
QVBJV3JhcHBlck9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDEsNyArNDEsNyBAQCBwdWJs
aWM6CiAgICAgc3RhdGljIHZvaWQgc3Vic3BhY2VGb3IoVk0mKSB7IFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7IH0KICAgICAKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7Ci0gICAg
c3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJik7Cisg
ICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTl9XSVRIX01PRElGSUVSKEpTX0VYUE9SVF9QUklWQVRF
KTsKICAgICAKICAgICB2b2lkKiB3cmFwcGVkT2JqZWN0KCkgeyByZXR1cm4gbV93cmFwcGVkT2Jq
ZWN0OyB9CiAgICAgdm9pZCBzZXRXcmFwcGVkT2JqZWN0KHZvaWQqKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9BUEkvSlNBUElXcmFwcGVyT2JqZWN0Lm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNBUElXcmFwcGVyT2JqZWN0Lm1tCShyZXZpc2lvbiAy
NzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQVBJV3JhcHBlck9iamVjdC5t
bQkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTM3LDcgKzM3LDcgQEAKIGNsYXNzIEpTQVBJV3JhcHBlck9i
amVjdEhhbmRsZU93bmVyIGZpbmFsIDogcHVibGljIEpTQzo6V2Vha0hhbmRsZU93bmVyIHsKIHB1
YmxpYzoKICAgICB2b2lkIGZpbmFsaXplKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQq
KSBmaW5hbDsKLSAgICBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxl
PEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6U2xvdFZpc2l0b3ImLCBjb25zdCBj
aGFyKiopIGZpbmFsOworICAgIGJvb2wgaXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpI
YW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCwgSlNDOjpBYnN0cmFjdFNsb3RWaXNp
dG9yJiwgY29uc3QgY2hhcioqKSBmaW5hbDsKIH07CiAKIHN0YXRpYyBKU0FQSVdyYXBwZXJPYmpl
Y3RIYW5kbGVPd25lcioganNBUElXcmFwcGVyT2JqZWN0SGFuZGxlT3duZXIoKQpAQCAtNTYsMTQg
KzU2LDE0IEBAIHZvaWQgSlNBUElXcmFwcGVyT2JqZWN0SGFuZGxlT3duZXI6OmZpbmEKICAgICBK
U0M6OldlYWtTZXQ6OmRlYWxsb2NhdGUoSlNDOjpXZWFrSW1wbDo6YXNXZWFrSW1wbChoYW5kbGUu
c2xvdCgpKSk7CiB9CiAKLWJvb2wgSlNBUElXcmFwcGVyT2JqZWN0SGFuZGxlT3duZXI6OmlzUmVh
Y2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2
b2lkKiwgSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqKQorYm9vbCBKU0FQ
SVdyYXBwZXJPYmplY3RIYW5kbGVPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlND
OjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBKU0M6OkFic3RyYWN0U2xvdFZp
c2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKikKIHsKICAgICBKU0M6OkpTQVBJV3JhcHBlck9i
amVjdCogd3JhcHBlck9iamVjdCA9IEpTQzo6anNDYXN0PEpTQzo6SlNBUElXcmFwcGVyT2JqZWN0
Kj4oaGFuZGxlLmdldCgpLmFzQ2VsbCgpKTsKICAgICAvLyBXZSB1c2UgdGhlIEpTR2xvYmFsT2Jq
ZWN0IHdoZW4gcHJvY2Vzc2luZyB3ZWFrIGhhbmRsZXMgdG8gcHJldmVudCB0aGUgc2l0dWF0aW9u
IHdoZXJlIHVzaW5nCiAgICAgLy8gdGhlIHNhbWUgT2JqZWN0aXZlLUMgb2JqZWN0IGluIG11bHRp
cGxlIGdsb2JhbCBvYmplY3RzIGtlZXBzIGFsbCBvZiB0aGUgZ2xvYmFsIG9iamVjdHMgYWxpdmUu
CiAgICAgaWYgKCF3cmFwcGVyT2JqZWN0LT53cmFwcGVkT2JqZWN0KCkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICByZXR1cm4gdmlzaXRvci52bSgpLmhlYXAuaXNNYXJrZWQod3JhcHBlck9i
amVjdC0+c3RydWN0dXJlKCktPmdsb2JhbE9iamVjdCgpKSAmJiB2aXNpdG9yLmNvbnRhaW5zT3Bh
cXVlUm9vdCh3cmFwcGVyT2JqZWN0LT53cmFwcGVkT2JqZWN0KCkpOworICAgIHJldHVybiB2aXNp
dG9yLmlzTWFya2VkKHdyYXBwZXJPYmplY3QtPnN0cnVjdHVyZSgpLT5nbG9iYWxPYmplY3QoKSkg
JiYgdmlzaXRvci5jb250YWluc09wYXF1ZVJvb3Qod3JhcHBlck9iamVjdC0+d3JhcHBlZE9iamVj
dCgpKTsKIH0KIAogbmFtZXNwYWNlIEpTQyB7CkBAIC03Myw2ICs3Myw4IEBAIHN0YXRpYyBKU0Nf
REVDTEFSRV9IT1NUX0ZVTkNUSU9OKGNvbnN0cnUKIHN0YXRpYyBKU0NfREVDTEFSRV9DVVNUT01f
R0VUVEVSKGNhbGxiYWNrR2V0dGVySlNBUElXcmFwcGVyT2JqZWN0Q2FsbGJhY2tPYmplY3QpOwog
c3RhdGljIEpTQ19ERUNMQVJFX0NVU1RPTV9HRVRURVIoc3RhdGljRnVuY3Rpb25HZXR0ZXJKU0FQ
SVdyYXBwZXJPYmplY3RDYWxsYmFja09iamVjdCk7CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTl9X
SVRIX01PRElGSUVSKHRlbXBsYXRlPD4sIEpTQ2FsbGJhY2tPYmplY3Q8SlNBUElXcmFwcGVyT2Jq
ZWN0Pik7CisKIHRlbXBsYXRlIDw+IGNvbnN0IENsYXNzSW5mbyBKU0NhbGxiYWNrT2JqZWN0PEpT
QVBJV3JhcHBlck9iamVjdD46OnNfaW5mbyA9IHsgIkpTQVBJV3JhcHBlck9iamVjdCIsICZCYXNl
OjpzX2luZm8sIG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNDYWxsYmFj
a09iamVjdCkgfTsKIHRlbXBsYXRlIDw+IGNvbnN0IGJvb2wgSlNDYWxsYmFja09iamVjdDxKU0FQ
SVdyYXBwZXJPYmplY3Q+OjpuZWVkc0Rlc3RydWN0aW9uID0gdHJ1ZTsKIApAQCAtMTIzLDcgKzEy
NSw4IEBAIHZvaWQgSlNBUElXcmFwcGVyT2JqZWN0OjpzZXRXcmFwcGVkT2JqZWMKICAgICBtX3dy
YXBwZWRPYmplY3QgPSBbc3RhdGljX2Nhc3Q8aWQ+KHdyYXBwZWRPYmplY3QpIHJldGFpbl07CiB9
CiAKLXZvaWQgSlNBUElXcmFwcGVyT2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwg
SlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2
b2lkIEpTQVBJV3JhcHBlck9iamVjdDo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBW
aXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTQVBJV3JhcHBlck9iamVjdCogdGhpc09iamVjdCA9
IEpTQzo6anNDYXN0PEpTQVBJV3JhcHBlck9iamVjdCo+KGNlbGwpOwogICAgIEJhc2U6OnZpc2l0
Q2hpbGRyZW4oY2VsbCwgdmlzaXRvcik7CkBAIC0xMzMsNiArMTM2LDggQEAgdm9pZCBKU0FQSVdy
YXBwZXJPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSgogICAgICAgICBzY2FuRXh0ZXJuYWxPYmplY3RH
cmFwaCh2aXNpdG9yLnZtKCksIHZpc2l0b3IsIHdyYXBwZWRPYmplY3QpOwogfQogCitERUZJTkVf
VklTSVRfQ0hJTERSRU5fV0lUSF9NT0RJRklFUihKU19FWFBPUlRfUFJJVkFURSwgSlNBUElXcmFw
cGVyT2JqZWN0KTsKKwogdGVtcGxhdGUgPD4KIElzb1N1YnNwYWNlKiBKU0NhbGxiYWNrT2JqZWN0
PEpTQVBJV3JhcHBlck9iamVjdD46OnN1YnNwYWNlRm9ySW1wbChWTSYgdm0sIFN1YnNwYWNlQWNj
ZXNzIG1vZGUpCiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tP
YmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxs
YmFja09iamVjdC5jcHAJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9BUEkvSlNDYWxsYmFja09iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMTcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwNyBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJr
aXQub3JnPgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtNDEsNiArNDEsOSBAQCBzdGF0aWMgSlNDX0RF
Q0xBUkVfQ1VTVE9NX0dFVFRFUihzdGF0aWNGCiBzdGF0aWMgSlNDX0RFQ0xBUkVfQ1VTVE9NX0dF
VFRFUihjYWxsYmFja0dldHRlckpTR2xvYmFsT2JqZWN0Q2FsbGJhY2tPYmplY3QpOwogc3RhdGlj
IEpTQ19ERUNMQVJFX0NVU1RPTV9HRVRURVIoc3RhdGljRnVuY3Rpb25HZXR0ZXJKU0dsb2JhbE9i
amVjdENhbGxiYWNrT2JqZWN0KTsKIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOX1dJVEhfTU9ESUZJ
RVIodGVtcGxhdGU8PiwgSlNDYWxsYmFja09iamVjdDxKU05vbkZpbmFsT2JqZWN0Pik7CitERUZJ
TkVfVklTSVRfQ0hJTERSRU5fV0lUSF9NT0RJRklFUih0ZW1wbGF0ZTw+LCBKU0NhbGxiYWNrT2Jq
ZWN0PEpTR2xvYmFsT2JqZWN0Pik7CisKIC8vIERlZmluZSB0aGUgdHdvIHR5cGVzIG9mIEpTQ2Fs
bGJhY2tPYmplY3RzIHdlIHN1cHBvcnQuCiB0ZW1wbGF0ZSA8PiBjb25zdCBDbGFzc0luZm8gSlND
YWxsYmFja09iamVjdDxKU05vbkZpbmFsT2JqZWN0Pjo6c19pbmZvID0geyAiQ2FsbGJhY2tPYmpl
Y3QiLCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxF
KEpTQ2FsbGJhY2tPYmplY3QpIH07CiB0ZW1wbGF0ZSA8PiBjb25zdCBDbGFzc0luZm8gSlNDYWxs
YmFja09iamVjdDxKU0dsb2JhbE9iamVjdD46OnNfaW5mbyA9IHsgIkNhbGxiYWNrR2xvYmFsT2Jq
ZWN0IiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJM
RShKU0NhbGxiYWNrT2JqZWN0KSB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9K
U0NhbGxiYWNrT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQ
SS9KU0NhbGxiYWNrT2JqZWN0LmgJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwNyBFcmljIFNlaWRlbCA8ZXJpY0B3
ZWJraXQub3JnPgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtNjksNyArNjksMTAgQEAgcHVibGljOgog
ICAgICAgICBtX3ByaXZhdGVQcm9wZXJ0aWVzLT5kZWxldGVQcml2YXRlUHJvcGVydHkocHJvcGVy
dHlOYW1lKTsKICAgICB9CiAKLSAgICB2b2lkIHZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZp
c2l0b3IpCisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKKworICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFZpc2l0b3I+CisgICAgdm9pZCB2aXNpdENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiAg
ICAgewogICAgICAgICBKU1ByaXZhdGVQcm9wZXJ0eU1hcCogcHJvcGVydGllcyA9IG1fcHJpdmF0
ZVByb3BlcnRpZXMuZ2V0KCk7CiAgICAgICAgIGlmICghcHJvcGVydGllcykKQEAgLTEwMyw3ICsx
MDYsOCBAQCBwdWJsaWM6CiAgICAgICAgICAgICBtX3Byb3BlcnR5TWFwLnJlbW92ZShwcm9wZXJ0
eU5hbWUuaW1wbCgpKTsKICAgICAgICAgfQogCi0gICAgICAgIHZvaWQgdmlzaXRDaGlsZHJlbihT
bG90VmlzaXRvciYgdmlzaXRvcikKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4K
KyAgICAgICAgdm9pZCB2aXNpdENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiAgICAgICAgIHsK
ICAgICAgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fbG9jayk7CiAgICAgICAgICAgICBmb3Ig
KGF1dG8mIHBhaXIgOiBtX3Byb3BlcnR5TWFwKSB7CkBAIC0yMTYsMTMgKzIyMCw3IEBAIHByaXZh
dGU6CiAgICAgc3RhdGljIENhbGxEYXRhIGdldENvbnN0cnVjdERhdGEoSlNDZWxsKik7CiAgICAg
c3RhdGljIENhbGxEYXRhIGdldENhbGxEYXRhKEpTQ2VsbCopOwogCi0gICAgc3RhdGljIHZvaWQg
dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQotICAgIHsK
LSAgICAgICAgSlNDYWxsYmFja09iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0NhbGxiYWNr
T2JqZWN0Kj4oY2VsbCk7Ci0gICAgICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoKHN0YXRp
Y19jYXN0PFBhcmVudCo+KHRoaXNPYmplY3QpKSwgSlNDYWxsYmFja09iamVjdDxQYXJlbnQ+Ojpp
bmZvKCkpOwotICAgICAgICBQYXJlbnQ6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRv
cik7Ci0gICAgICAgIHRoaXNPYmplY3QtPm1fY2FsbGJhY2tPYmplY3REYXRhLT52aXNpdENoaWxk
cmVuKHZpc2l0b3IpOwotICAgIH0KKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAg
dm9pZCBpbml0KEpTR2xvYmFsT2JqZWN0Kik7CiAgCkBAIC0yNDMsNiArMjQxLDE2IEBAIHByaXZh
dGU6CiAgICAgY29uc3QgQ2xhc3NJbmZvKiBtX2NsYXNzSW5mbyB7IG51bGxwdHIgfTsKIH07CiAK
K3RlbXBsYXRlIDxjbGFzcyBQYXJlbnQ+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9p
ZCBKU0NhbGxiYWNrT2JqZWN0PFBhcmVudD46OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2Vs
bCwgVmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBKU0NhbGxiYWNrT2JqZWN0KiB0aGlzT2JqZWN0
ID0ganNDYXN0PEpTQ2FsbGJhY2tPYmplY3QqPihjZWxsKTsKKyAgICBBU1NFUlRfR0NfT0JKRUNU
X0lOSEVSSVRTKChzdGF0aWNfY2FzdDxQYXJlbnQqPih0aGlzT2JqZWN0KSksIEpTQ2FsbGJhY2tP
YmplY3Q8UGFyZW50Pjo6aW5mbygpKTsKKyAgICBQYXJlbnQ6OnZpc2l0Q2hpbGRyZW4odGhpc09i
amVjdCwgdmlzaXRvcik7CisgICAgdGhpc09iamVjdC0+bV9jYWxsYmFja09iamVjdERhdGEtPnZp
c2l0Q2hpbGRyZW4odmlzaXRvcik7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAvLyBpbmNs
dWRlIHRoZSBhY3R1YWwgdGVtcGxhdGUgY2xhc3MgaW1wbGVtZW50YXRpb24KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNNYW5hZ2VkVmFsdWUubW0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU01hbmFnZWRWYWx1ZS5tbQkocmV2aXNpb24gMjcyOTAy
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU01hbmFnZWRWYWx1ZS5tbQkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC00Miw3ICs0Miw3IEBACiBjbGFzcyBKU01hbmFnZWRWYWx1ZUhhbmRsZU93
bmVyIGZpbmFsIDogcHVibGljIEpTQzo6V2Vha0hhbmRsZU93bmVyIHsKIHB1YmxpYzoKICAgICB2
b2lkIGZpbmFsaXplKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQpIGZp
bmFsOwotICAgIGJvb2wgaXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlND
OjpVbmtub3duPiwgdm9pZCogY29udGV4dCwgSlNDOjpTbG90VmlzaXRvciYsIGNvbnN0IGNoYXIq
KikgZmluYWw7CisgICAgYm9vbCBpc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRs
ZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0LCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3Im
LCBjb25zdCBjaGFyKiopIGZpbmFsOwogfTsKIAogc3RhdGljIEpTTWFuYWdlZFZhbHVlSGFuZGxl
T3duZXImIG1hbmFnZWRWYWx1ZUhhbmRsZU93bmVyKCkKQEAgLTE4MCw3ICsxODAsNyBAQCBAaW50
ZXJmYWNlIEpTTWFuYWdlZFZhbHVlIChQcml2YXRlTWV0aG9kCiAtICh2b2lkKWRpc2Nvbm5lY3RW
YWx1ZTsKIEBlbmQKIAotYm9vbCBKU01hbmFnZWRWYWx1ZUhhbmRsZU93bmVyOjppc1JlYWNoYWJs
ZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0
LCBKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQorYm9vbCBK
U01hbmFnZWRWYWx1ZUhhbmRsZU93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6
OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0LCBKU0M6OkFic3RyYWN0U2xvdFZp
c2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCiB7CiAgICAgaWYgKFVOTElLRUxZ
KHJlYXNvbikpCiAgICAgICAgICpyZWFzb24gPSAiSlNNYW5hZ2VkVmFsdWUgaXMgb3BhcXVlIHJv
b3QiOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU01hcmtpbmdDb25zdHJhaW50
UHJpdmF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU01h
cmtpbmdDb25zdHJhaW50UHJpdmF0ZS5jcHAJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9BUEkvSlNNYXJraW5nQ29uc3RyYWludFByaXZhdGUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zNiw3ICszNiw3IEBAIG5hbWVzcGFjZSB7CiBBdG9taWM8dW5zaWduZWQ+IGNv
bnN0cmFpbnRDb3VudGVyOwogCiBzdHJ1Y3QgTWFya2VyIDogSlNNYXJrZXIgewotICAgIFNsb3RW
aXNpdG9yKiB2aXNpdG9yOworICAgIEFic3RyYWN0U2xvdFZpc2l0b3IqIHZpc2l0b3I7CiB9Owog
CiBib29sIGlzTWFya2VkKEpTTWFya2VyUmVmIG1hcmtlclJlZiwgSlNPYmplY3RSZWYgb2JqZWN0
UmVmKQpAQCAtNDQsNyArNDQsNyBAQCBib29sIGlzTWFya2VkKEpTTWFya2VyUmVmIG1hcmtlclJl
ZiwgSlNPCiAgICAgaWYgKCFvYmplY3RSZWYpCiAgICAgICAgIHJldHVybiB0cnVlOyAvLyBOdWxs
IGlzIGFuIGltbW9ydGFsIG9iamVjdC4KICAgICAKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8TWFy
a2VyKj4obWFya2VyUmVmKS0+dmlzaXRvci0+dm0oKS5oZWFwLmlzTWFya2VkKHRvSlMob2JqZWN0
UmVmKSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PE1hcmtlcio+KG1hcmtlclJlZiktPnZpc2l0
b3ItPmlzTWFya2VkKHRvSlMob2JqZWN0UmVmKSk7CiB9CiAKIHZvaWQgbWFyayhKU01hcmtlclJl
ZiBtYXJrZXJSZWYsIEpTT2JqZWN0UmVmIG9iamVjdFJlZikKQEAgLTczLDE0ICs3MywxNCBAQCB2
b2lkIEpTQ29udGV4dEdyb3VwQWRkTWFya2luZ0NvbnN0cmFpbnQoCiAgICAgYXV0byBjb25zdHJh
aW50ID0gbWFrZVVuaXF1ZTxTaW1wbGVNYXJraW5nQ29uc3RyYWludD4oCiAgICAgICAgIHRvQ1N0
cmluZygiQW1jIiwgY29uc3RyYWludEluZGV4LCAiKCIsIFJhd1BvaW50ZXIoYml0d2lzZV9jYXN0
PHZvaWQqPihjb25zdHJhaW50Q2FsbGJhY2spKSwgIikiKSwKICAgICAgICAgdG9DU3RyaW5nKCJB
UEkgTWFya2luZyBDb25zdHJhaW50ICMiLCBjb25zdHJhaW50SW5kZXgsICIgKCIsIFJhd1BvaW50
ZXIoYml0d2lzZV9jYXN0PHZvaWQqPihjb25zdHJhaW50Q2FsbGJhY2spKSwgIiwgIiwgUmF3UG9p
bnRlcih1c2VyRGF0YSksICIpIiksCi0gICAgICAgIFtjb25zdHJhaW50Q2FsbGJhY2ssIHVzZXJE
YXRhXSAoU2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsKKyAgICAgICAgTUFLRV9NQVJLSU5HX0NPTlNU
UkFJTlRfRVhFQ1VUT1JfUEFJUigoW2NvbnN0cmFpbnRDYWxsYmFjaywgdXNlckRhdGFdIChBYnN0
cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKSB7CiAgICAgICAgICAgICBNYXJrZXIgbWFya2VyOwog
ICAgICAgICAgICAgbWFya2VyLklzTWFya2VkID0gaXNNYXJrZWQ7CiAgICAgICAgICAgICBtYXJr
ZXIuTWFyayA9IG1hcms7CiAgICAgICAgICAgICBtYXJrZXIudmlzaXRvciA9ICZ2aXNpdG9yOwog
ICAgICAgICAgICAgCiAgICAgICAgICAgICBjb25zdHJhaW50Q2FsbGJhY2soJm1hcmtlciwgdXNl
ckRhdGEpOwotICAgICAgICB9LAorICAgICAgICB9KSksCiAgICAgICAgIHZvbGF0aWxpdHksCiAg
ICAgICAgIENvbnN0cmFpbnRDb25jdXJyZW5jeTo6U2VxdWVudGlhbCk7CiAgICAgCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmlydHVhbE1hY2hpbmUubW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1ZpcnR1YWxNYWNoaW5lLm1tCShyZXZpc2lv
biAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmlydHVhbE1hY2hpbmUu
bW0JKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0zMTUsNyArMzE1LDcgQEAgKyAodm9pZClzZXRDcmFzaE9u
Vk1DcmVhdGlvbjooQk9PTClzaG91bAogCiBAZW5kCiAKLXN0YXRpYyB2b2lkIHNjYW5FeHRlcm5h
bE9iamVjdEdyYXBoKEpTQzo6Vk0mIHZtLCBKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yLCB2b2lk
KiByb290LCBib29sIGxvY2tBY3F1aXJlZCkKK3N0YXRpYyB2b2lkIHNjYW5FeHRlcm5hbE9iamVj
dEdyYXBoKEpTQzo6Vk0mIHZtLCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIHZv
aWQqIHJvb3QsIGJvb2wgbG9ja0FjcXVpcmVkKQogewogICAgIEBhdXRvcmVsZWFzZXBvb2wgewog
ICAgICAgICBKU1ZpcnR1YWxNYWNoaW5lICp2aXJ0dWFsTWFjaGluZSA9IFtKU1ZNV3JhcHBlckNh
Y2hlIHdyYXBwZXJGb3JKU0NvbnRleHRHcm91cFJlZjp0b1JlZigmdm0pXTsKQEAgLTM0NywxMyAr
MzQ3LDEzIEBAIHN0YXRpYyB2b2lkIHNjYW5FeHRlcm5hbE9iamVjdEdyYXBoKEpTQzoKICAgICB9
CiB9CiAKLXZvaWQgc2NhbkV4dGVybmFsT2JqZWN0R3JhcGgoSlNDOjpWTSYgdm0sIEpTQzo6U2xv
dFZpc2l0b3ImIHZpc2l0b3IsIHZvaWQqIHJvb3QpCit2b2lkIHNjYW5FeHRlcm5hbE9iamVjdEdy
YXBoKEpTQzo6Vk0mIHZtLCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIHZvaWQq
IHJvb3QpCiB7CiAgICAgYm9vbCBsb2NrQWNxdWlyZWQgPSBmYWxzZTsKICAgICBzY2FuRXh0ZXJu
YWxPYmplY3RHcmFwaCh2bSwgdmlzaXRvciwgcm9vdCwgbG9ja0FjcXVpcmVkKTsKIH0KIAotdm9p
ZCBzY2FuRXh0ZXJuYWxSZW1lbWJlcmVkU2V0KEpTQzo6Vk0mIHZtLCBKU0M6OlNsb3RWaXNpdG9y
JiB2aXNpdG9yKQordm9pZCBzY2FuRXh0ZXJuYWxSZW1lbWJlcmVkU2V0KEpTQzo6Vk0mIHZtLCBK
U0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgQGF1dG9yZWxlYXNlcG9v
bCB7CiAgICAgICAgIEpTVmlydHVhbE1hY2hpbmUgKnZpcnR1YWxNYWNoaW5lID0gW0pTVk1XcmFw
cGVyQ2FjaGUgd3JhcHBlckZvckpTQ29udGV4dEdyb3VwUmVmOnRvUmVmKCZ2bSldOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1ZpcnR1YWxNYWNoaW5lSW50ZXJuYWwuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmlydHVhbE1hY2hpbmVJbnRl
cm5hbC5oCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pT
VmlydHVhbE1hY2hpbmVJbnRlcm5hbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMyLDcgKzMyLDcg
QEAKIAogbmFtZXNwYWNlIEpTQyB7CiBjbGFzcyBWTTsKLWNsYXNzIFNsb3RWaXNpdG9yOworY2xh
c3MgQWJzdHJhY3RTbG90VmlzaXRvcjsKIH0KIAogI2lmIGRlZmluZWQoX19PQkpDX18pCkBAIC01
NCw4ICs1NCw4IEBAIEpTQ29udGV4dEdyb3VwUmVmIGdldEdyb3VwRnJvbVZpcnR1YWxNYWMKIAog
I2VuZGlmIC8vIGRlZmluZWQoX19PQkpDX18pCiAKLXZvaWQgc2NhbkV4dGVybmFsT2JqZWN0R3Jh
cGgoSlNDOjpWTSYsIEpTQzo6U2xvdFZpc2l0b3ImLCB2b2lkKiByb290KTsKLXZvaWQgc2NhbkV4
dGVybmFsUmVtZW1iZXJlZFNldChKU0M6OlZNJiwgSlNDOjpTbG90VmlzaXRvciYpOwordm9pZCBz
Y2FuRXh0ZXJuYWxPYmplY3RHcmFwaChKU0M6OlZNJiwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9y
Jiwgdm9pZCogcm9vdCk7Cit2b2lkIHNjYW5FeHRlcm5hbFJlbWVtYmVyZWRTZXQoSlNDOjpWTSYs
IEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpOwogCiAjZW5kaWYgLy8gSlNDX09CSkNfQVBJX0VO
QUJMRUQKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9NYXJrZWRKU1ZhbHVlUmVm
QXJyYXkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvTWFya2Vk
SlNWYWx1ZVJlZkFycmF5LmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL0FQSS9NYXJrZWRKU1ZhbHVlUmVmQXJyYXkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAtMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ2LDcg
KzQ2LDggQEAgTWFya2VkSlNWYWx1ZVJlZkFycmF5Ojp+TWFya2VkSlNWYWx1ZVJlZgogICAgICAg
ICByZW1vdmUoKTsKIH0KIAotdm9pZCBNYXJrZWRKU1ZhbHVlUmVmQXJyYXk6OnZpc2l0QWdncmVn
YXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3Zv
aWQgTWFya2VkSlNWYWx1ZVJlZkFycmF5Ojp2aXNpdEFnZ3JlZ2F0ZShWaXNpdG9yJiB2aXNpdG9y
KQogewogICAgIEpTVmFsdWVSZWYqIGJ1ZmZlciA9IGRhdGEoKTsKICAgICBmb3IgKHVuc2lnbmVk
IGluZGV4ID0gMDsgaW5kZXggPCBtX3NpemU7ICsraW5kZXgpIHsKQEAgLTYyLDQgKzYzLDcgQEAg
dm9pZCBNYXJrZWRKU1ZhbHVlUmVmQXJyYXk6OnZpc2l0QWdncmVnYQogICAgIH0KIH0KIAordGVt
cGxhdGUgdm9pZCBNYXJrZWRKU1ZhbHVlUmVmQXJyYXk6OnZpc2l0QWdncmVnYXRlKEFic3RyYWN0
U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgTWFya2VkSlNWYWx1ZVJlZkFycmF5Ojp2aXNp
dEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYpOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvTWFya2VkSlNWYWx1ZVJlZkFycmF5LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9NYXJrZWRKU1ZhbHVlUmVmQXJyYXkuaAko
cmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9NYXJrZWRKU1Zh
bHVlUmVmQXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDIwLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02Miw3ICs2Miw3IEBAIHB1YmxpYzoKICAgICAg
ICAgcmV0dXJuIG1faW5saW5lQnVmZmVyOwogICAgIH0KIAotICAgIHZvaWQgdmlzaXRBZ2dyZWdh
dGUoU2xvdFZpc2l0b3ImKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIHZp
c2l0QWdncmVnYXRlKFZpc2l0b3ImKTsKIAogcHJpdmF0ZToKICAgICB1bnNpZ25lZCBtX3NpemU7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNBUElXcmFwcGVyR2xvYmFs
T2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIv
SlNBUElXcmFwcGVyR2xvYmFsT2JqZWN0LmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQVBJV3JhcHBlckdsb2JhbE9iamVjdC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTU5LDYgKzU5LDggQEAgc3RhdGljIEpTQ19ERUNMQVJFX0hPU1RfRlVO
Q1RJT04oY29uc3RydQogc3RhdGljIEpTQ19ERUNMQVJFX0NVU1RPTV9HRVRURVIoY2FsbGJhY2tH
ZXR0ZXJKU0FQSVdyYXBwZXJHbG9iYWxPYmplY3RDYWxsYmFja09iamVjdCk7CiBzdGF0aWMgSlND
X0RFQ0xBUkVfQ1VTVE9NX0dFVFRFUihzdGF0aWNGdW5jdGlvbkdldHRlckpTQVBJV3JhcHBlckds
b2JhbE9iamVjdENhbGxiYWNrT2JqZWN0KTsKIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOX1dJVEhf
TU9ESUZJRVIodGVtcGxhdGU8PiwgSlNDYWxsYmFja09iamVjdDxKU0FQSVdyYXBwZXJHbG9iYWxP
YmplY3Q+KTsKKwogdGVtcGxhdGUgPD4gY29uc3QgQ2xhc3NJbmZvIEpTQ2FsbGJhY2tPYmplY3Q8
SlNBUElXcmFwcGVyR2xvYmFsT2JqZWN0Pjo6c19pbmZvID0geyAiSlNBUElXcmFwcGVyR2xvYmFs
T2JqZWN0IiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9U
QUJMRShKU0NhbGxiYWNrT2JqZWN0KSB9OwogdGVtcGxhdGU8PiBjb25zdCBib29sIEpTQ2FsbGJh
Y2tPYmplY3Q8SlNBUElXcmFwcGVyR2xvYmFsT2JqZWN0Pjo6bmVlZHNEZXN0cnVjdGlvbiA9IHRy
dWU7CiAKQEAgLTE0NCw5ICsxNDYsNCBAQCB2b2lkIEpTQVBJV3JhcHBlckdsb2JhbE9iamVjdDo6
ZmluaXNoQ3JlCiAgICAgV2Vha1NldDo6YWxsb2NhdGUodGhpcywganNBUElXcmFwcGVyR2xvYmFs
T2JqZWN0SGFuZGxlT3duZXIoKSwgMCk7IC8vIEJhbGFuY2VkIGluIEpTQVBJV3JhcHBlckdsb2Jh
bE9iamVjdEhhbmRsZU93bmVyOjpmaW5hbGl6ZS4KIH0KIAotdm9pZCBKU0FQSVdyYXBwZXJHbG9i
YWxPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBKU0M6OlNsb3RWaXNpdG9yJiB2
aXNpdG9yKQotewotICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4oY2VsbCwgdmlzaXRvcik7Ci19Ci0K
IH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGli
L0pTQVBJV3JhcHBlckdsb2JhbE9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvZ2xpYi9KU0FQSVdyYXBwZXJHbG9iYWxPYmplY3QuaAkocmV2aXNpb24gMjcy
OTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQVBJV3JhcHBlckdsb2Jh
bE9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw3ICszOSw2IEBAIHB1YmxpYzoKICAgICBz
dGF0aWMgdm9pZCBzdWJzcGFjZUZvcihWTSYpIHsgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsgfQogCiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOwotICAgIHN0YXRpYyB2b2lkIHZp
c2l0Q2hpbGRyZW4oSlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpOwogCiAgICAgSlNDR0xpYldy
YXBwZXJPYmplY3QqIHdyYXBwZWRPYmplY3QoKSBjb25zdCB7IHJldHVybiBtX3dyYXBwZWRPYmpl
Y3Q7IH0KICAgICB2b2lkIHNldFdyYXBwZWRPYmplY3QoSlNDR0xpYldyYXBwZXJPYmplY3QqIHdy
YXBwZWRPYmplY3QpIHsgbV93cmFwcGVkT2JqZWN0ID0gd3JhcHBlZE9iamVjdDsgfQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQVBJV3JhcHBlck9iamVjdEdMaWIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0FQSVdyYXBw
ZXJPYmplY3RHTGliLmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL0FQSS9nbGliL0pTQVBJV3JhcHBlck9iamVjdEdMaWIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSlNBUElXcmFw
cGVyT2JqZWN0LmgiCiAKKyNpbmNsdWRlICJBYnN0cmFjdFNsb3RWaXNpdG9yLmgiCiAjaW5jbHVk
ZSAiSlNDR0xpYldyYXBwZXJPYmplY3QuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5j
bHVkZSAiSlNDYWxsYmFja09iamVjdC5oIgpAQCAtMzYsNyArMzcsNyBAQAogY2xhc3MgSlNBUElX
cmFwcGVyT2JqZWN0SGFuZGxlT3duZXIgZmluYWwgOiBwdWJsaWMgSlNDOjpXZWFrSGFuZGxlT3du
ZXIgewogcHVibGljOgogICAgIHZvaWQgZmluYWxpemUoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3du
Piwgdm9pZCopIGZpbmFsOwotICAgIGJvb2wgaXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlND
OjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCwgSlNDOjpTbG90VmlzaXRvciYs
IGNvbnN0IGNoYXIqKikgZmluYWw7CisgICAgYm9vbCBpc1JlYWNoYWJsZUZyb21PcGFxdWVSb290
cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0LCBKU0M6OkFic3RyYWN0
U2xvdFZpc2l0b3ImLCBjb25zdCBjaGFyKiopIGZpbmFsOwogfTsKIAogc3RhdGljIEpTQVBJV3Jh
cHBlck9iamVjdEhhbmRsZU93bmVyKiBqc0FQSVdyYXBwZXJPYmplY3RIYW5kbGVPd25lcigpCkBA
IC01NSw3ICs1Niw3IEBAIHZvaWQgSlNBUElXcmFwcGVyT2JqZWN0SGFuZGxlT3duZXI6OmZpbmEK
ICAgICBKU0M6OldlYWtTZXQ6OmRlYWxsb2NhdGUoSlNDOjpXZWFrSW1wbDo6YXNXZWFrSW1wbCho
YW5kbGUuc2xvdCgpKSk7CiB9CiAKLWJvb2wgSlNBUElXcmFwcGVyT2JqZWN0SGFuZGxlT3duZXI6
OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFu
ZGxlLCB2b2lkKiwgSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqKQorYm9v
bCBKU0FQSVdyYXBwZXJPYmplY3RIYW5kbGVPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9v
dHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBKU0M6OkFic3RyYWN0
U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKikKIHsKICAgICBKU0M6OkpTQVBJV3Jh
cHBlck9iamVjdCogd3JhcHBlck9iamVjdCA9IEpTQzo6anNDYXN0PEpTQzo6SlNBUElXcmFwcGVy
T2JqZWN0Kj4oaGFuZGxlLmdldCgpLmFzQ2VsbCgpKTsKICAgICAvLyBXZSB1c2UgdGhlIEpTR2xv
YmFsT2JqZWN0IHdoZW4gcHJvY2Vzc2luZyB3ZWFrIGhhbmRsZXMgdG8gcHJldmVudCB0aGUgc2l0
dWF0aW9uIHdoZXJlIHVzaW5nCkBAIC03Miw2ICs3Myw4IEBAIHN0YXRpYyBKU0NfREVDTEFSRV9I
T1NUX0ZVTkNUSU9OKGNvbnN0cnUKIHN0YXRpYyBKU0NfREVDTEFSRV9DVVNUT01fR0VUVEVSKGNh
bGxiYWNrR2V0dGVySlNBUElXcmFwcGVyT2JqZWN0Q2FsbGJhY2tPYmplY3QpOwogc3RhdGljIEpT
Q19ERUNMQVJFX0NVU1RPTV9HRVRURVIoc3RhdGljRnVuY3Rpb25HZXR0ZXJKU0FQSVdyYXBwZXJP
YmplY3RDYWxsYmFja09iamVjdCk7CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTl9XSVRIX01PRElG
SUVSKHRlbXBsYXRlPD4sIEpTQ2FsbGJhY2tPYmplY3Q8SlNBUElXcmFwcGVyT2JqZWN0Pik7CisK
IHRlbXBsYXRlIDw+IGNvbnN0IENsYXNzSW5mbyBKU0NhbGxiYWNrT2JqZWN0PEpTQVBJV3JhcHBl
ck9iamVjdD46OnNfaW5mbyA9IHsgIkpTQVBJV3JhcHBlck9iamVjdCIsICZCYXNlOjpzX2luZm8s
IG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNDYWxsYmFja09iamVjdCkg
fTsKIHRlbXBsYXRlPD4gY29uc3QgYm9vbCBKU0NhbGxiYWNrT2JqZWN0PEpTQVBJV3JhcHBlck9i
amVjdD46Om5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOwogCkBAIC0xNTUsOSArMTU4LDEyIEBAIHZv
aWQgSlNBUElXcmFwcGVyT2JqZWN0OjpzZXRXcmFwcGVkT2JqZWMKICAgICBtX3dyYXBwZWRPYmpl
Y3QgPSB3cmFwcGVkT2JqZWN0OwogfQogCi12b2lkIEpTQVBJV3JhcHBlck9iamVjdDo6dmlzaXRD
aGlsZHJlbihKU0NlbGwqIGNlbGwsIEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0
ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0FQSVdyYXBwZXJPYmplY3Q6OnZpc2l0Q2hpbGRy
ZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBCYXNlOjp2aXNp
dENoaWxkcmVuKGNlbGwsIHZpc2l0b3IpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU5fV0lU
SF9NT0RJRklFUihKU19FWFBPUlRfUFJJVkFURSwgSlNBUElXcmFwcGVyT2JqZWN0KTsKKwogfSAv
LyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNp
b24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTExNTgsNiArMTE1OCw3IEBA
CiAJCTY1QjgzOTJFMUJBQ0FEMzYwMDQ0RTgyNCAvKiBDYWNoZWRSZWNvdmVyeS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjVCODM5MkMxQkFDQTkyQTAw
NDRFODI0IC8qIENhY2hlZFJlY292ZXJ5LmggKi87IH07CiAJCTZBMzhDRkFBMUUzMkI1QUIwMDYw
MjA2RiAvKiBBc3luY1N0YWNrVHJhY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDZBMzhDRkE4MUUzMkI1OEIwMDYwMjA2RiAvKiBBc3luY1N0YWNrVHJh
Y2UuaCAqLzsgfTsKIAkJNkFEMkNCNEQxOUI5MTQwMTAwMDY1NzE5IC8qIERlYnVnZ2VyRXZhbEVu
YWJsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZB
RDJDQjRDMTlCOTE0MDEwMDA2NTcxOSAvKiBEZWJ1Z2dlckV2YWxFbmFibGVyLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNkJDQ0VDMDQyNUQxRkEy
NzAwMEYzOTFEIC8qIFZlcmlmaWVyU2xvdFZpc2l0b3JJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2QkNDRUMwMzI1RDFGQTI3MDAwRjM5MUQg
LyogVmVyaWZpZXJTbG90VmlzaXRvcklubGluZXMuaCAqLzsgfTsKIAkJNzAxMTNENEMxQThEQjA5
MzAwMzg0OEM0IC8qIEl0ZXJhdG9yT3BlcmF0aW9ucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzAxMTNENEExQThEQjA5MzAwMzg0OEM0IC8qIEl0ZXJh
dG9yT3BlcmF0aW9ucy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTcwMTNDQThDMUI0OTFBOTQwMENBRTYxMyAvKiBKU01pY3JvdGFzay5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzAxM0NBOEExQjQ5MUE5
NDAwQ0FFNjEzIC8qIEpTTWljcm90YXNrLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzA1QjQxQUMxQTZFNTAxRTAwNzE2NzU3IC8qIFN5bWJvbC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzA1QjQxQTQx
QTZFNTAxRTAwNzE2NzU3IC8qIFN5bWJvbC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CkBAIC0xOTIwLDYgKzE5MjEsNyBAQAogCQlFM0ZGNzUzMzFEOUNF
QTE4MDBDN0UxNkQgLyogRE9NSklUR2V0dGVyU2V0dGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFM0ZGNzUyRjFEOUNFQTEyMDBDN0UxNkQgLyogRE9N
SklUR2V0dGVyU2V0dGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJRTQ5REMxNkMxMkVGMjk0RTAwMTg0QTFGIC8qIFNvdXJjZVByb3ZpZGVyQ2Fj
aGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0OURD
MTUxMTJFRjI3MjIwMDE4NEExRiAvKiBTb3VyY2VQcm92aWRlckNhY2hlLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTQ5REMxNkQxMkVGMjk1MzAw
MTg0QTFGIC8qIFNvdXJjZVByb3ZpZGVyQ2FjaGVJdGVtLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDlEQzE0OTEyRUYyNjFBMDAxODRBMUYgLyogU291
cmNlUHJvdmlkZXJDYWNoZUl0ZW0uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OworCQlGRTA0MTU1MzI1MkVDMDczMDA5MUVCNUQgLyogU2xvdFZpc2l0b3JN
YWNyb3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZF
MDQxNTUyMjUyRUMwNzMwMDkxRUI1RCAvKiBTbG90VmlzaXRvck1hY3Jvcy5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUZFMDVGQUZEMUZFNENFREEw
MDA5MzIzMCAvKiBEZXByZWNhdGVkSW5zcGVjdG9yVmFsdWVzLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk5MkQ2QTExMUZCRDQ5MUQwMDAyNDVGNCAv
KiBEZXByZWNhdGVkSW5zcGVjdG9yVmFsdWVzLmNwcCAqLzsgfTsKIAkJRkUwODZCQ0EyMTIzREVG
QjAwM0YyOTI5IC8qIEVudHJ5RnJhbWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEZFMDg2QkM5MjEyM0RFRkEwMDNGMjkyOSAvKiBFbnRyeUZyYW1lLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRkUwRDRB
MDYxQUI4REQwQTAwMkY1NEJGIC8qIEV4ZWN1dGlvblRpbWVMaW1pdFRlc3QuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUwRDRBMDQxQUI4REQwQTAw
MkY1NEJGIC8qIEV4ZWN1dGlvblRpbWVMaW1pdFRlc3QuY3BwICovOyB9OwpAQCAtMTk0Miw5ICsx
OTQ0LDExIEBACiAJCUZFMUUyQzNGMjI0MERENTgwMEY2QjcyOSAvKiBNYWNyb0Fzc2VtYmxlckFS
TTY0RS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUx
RTJDM0UyMjQwRDMwQjAwRjZCNzI5IC8qIE1hY3JvQXNzZW1ibGVyQVJNNjRFLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRkUxRTJDNDAyMjQwREQ2
MjAwRjZCNzI5IC8qIEFSTTY0RUFzc2VtYmxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRkUxRTJDM0QyMjQwRDJGNjAwRjZCNzI5IC8qIEFSTTY0RUFz
c2VtYmxlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCUZFMjBDRTlFMTVGMDRBOTUwMERGMzQzMCAvKiBMTEludENMb29wLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTIwQ0U5QzE1RjA0QTk1MDBERjM0
MzAgLyogTExJbnRDTG9vcC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CisJCUZFMjg3RDAyMjUyRkIyRTgwMEQ3MjNGOSAvKiBWZXJpZmllclNsb3RWaXNp
dG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTI4
N0QwMTI1MkZCMkU4MDBENzIzRjkgLyogVmVyaWZpZXJTbG90VmlzaXRvci5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUZFMkE4NzYwMUYwMjM4MTYw
MEVCMzFCMiAvKiBNaW5pbXVtUmVzZXJ2ZWRab25lU2l6ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUyQTg3NUYxRjAyMzgxNjAwRUIzMUIyIC8qIE1p
bmltdW1SZXNlcnZlZFpvbmVTaXplLmggKi87IH07CiAJCUZFMzAyMkQzMUUzRDczQTUwMEJBQzQ5
MyAvKiBTaWdpbGxDcmFzaEFuYWx5emVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBGRTMwMjJEMTFFM0Q3Mzk2MDBCQUM0OTMgLyogU2lnaWxsQ3Jhc2hB
bmFseXplci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCUZFMzAyMkQ3MUU0Mjg1NzMwMEJBQzQ5MyAvKiBWTUluc3BlY3Rvci5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUzMDIyRDUxRTQyODU2NzAwQkFD
NDkzIC8qIFZNSW5zcGVjdG9yLmggKi87IH07CisJCUZFMzM2QjUzMjVEQjQ5N0QwMDk4RjAzNCAv
KiBNYXJraW5nQ29uc3RyYWludEV4ZWN1dG9yUGFpci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUzMzZCNTIyNURCNDk3RDAwOThGMDM0IC8qIE1hcmtp
bmdDb25zdHJhaW50RXhlY3V0b3JQYWlyLmggKi87IH07CiAJCUZFMzQyMjEyMUQ2QjgxQzMwMDMy
QkU4OCAvKiBUaHJvd1Njb3BlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBGRTM0MjIxMTFENkI4MThDMDAzMkJFODggLyogVGhyb3dTY29wZS5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUZFMzRFRTIxMjQz
OThBQUUwMEFBMkU3QyAvKiBFbnN1cmVTdGlsbEFsaXZlSGVyZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUzNEVFMjAyNDM5OEE5QTAwQUEyRTdDIC8q
IEVuc3VyZVN0aWxsQWxpdmVIZXJlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJRkUzODQyMzMyMzI0RDUxQjAwOURENDQ1IC8qIE9wdGlvbnNMaXN0
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTM4NDIz
MTIzMjRENTFCMDA5REQ0NDUgLyogT3B0aW9uc0xpc3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMTk4MCw2ICsxOTg0LDggQEAKIAkJRkU4MEMx
OTcxRDc3NUNERDAwODUxMEMwIC8qIENhdGNoU2NvcGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFODBDMTk2MUQ3NzVCMjcwMDg1MTBDMCAvKiBDYXRj
aFNjb3BlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJRkU4REU1NEIyM0FDMURBRDAwNUM5MTQyIC8qIENhY2hlYWJsZUlkZW50aWZpZXIuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFOERFNTRBMjNBQzFE
QUQwMDVDOTE0MiAvKiBDYWNoZWFibGVJZGVudGlmaWVyLmggKi87IH07CiAJCUZFOERFNTREMjNB
QzFFODYwMDVDOTE0MiAvKiBDYWNoZWFibGVJZGVudGlmaWVySW5saW5lcy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkU4REU1NEMyM0FDMUU4NjAwNUM5
MTQyIC8qIENhY2hlYWJsZUlkZW50aWZpZXJJbmxpbmVzLmggKi87IH07CisJCUZFOTEyQjRGMjUz
MTE5MzMwMEZBQkRERiAvKiBBYnN0cmFjdFNsb3RWaXNpdG9yLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTkxMkI0RTI1MzExOTMzMDBGQUJEREYgLyog
QWJzdHJhY3RTbG90VmlzaXRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CisJCUZFOTEyQjUxMjUzMTFBRDEwMEZBQkRERiAvKiBBYnN0cmFjdFNsb3RW
aXNpdG9ySW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gRkU5MTJCNTAyNTMxMUFEMTAwRkFCRERGIC8qIEFic3RyYWN0U2xvdFZpc2l0b3JJbmxp
bmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
RkU5OUIyNDkxQzI0QzNEMzAwQzgyMTU5IC8qIEpJVE5lZ0dlbmVyYXRvci5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkU5OUIyNDgxQzI0QjZEMzAwQzgy
MTU5IC8qIEpJVE5lZ0dlbmVyYXRvci5oICovOyB9OwogCQlGRUEwODYyMDE4MkI3QTA0MDBGNkQ4
NTEgLyogQnJlYWtwb2ludC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRkVBMDg2MUUxODJCN0EwNDAwRjZEODUxIC8qIEJyZWFrcG9pbnQuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlGRUEwODYyMTE4MkI3
QTA0MDBGNkQ4NTEgLyogRGVidWdnZXJQcmltaXRpdmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRUEwODYxRjE4MkI3QTA0MDBGNkQ4NTEgLyogRGVi
dWdnZXJQcmltaXRpdmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKQEAgLTM5OTEsNiArMzk5Nyw3IEBACiAJCTZBMzhDRkE4MUUzMkI1OEIwMDYwMjA2
RiAvKiBBc3luY1N0YWNrVHJhY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
QXN5bmNTdGFja1RyYWNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZBRDJDQjRD
MTlCOTE0MDEwMDA2NTcxOSAvKiBEZWJ1Z2dlckV2YWxFbmFibGVyLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IERlYnVnZ2VyRXZhbEVuYWJsZXIuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNkJBOTNDOTU5MDQ4NEM1QkFEOTMxNkVBIC8qIEpTU2NyaXB0RmV0Y2hl
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1NjcmlwdEZldGNoZXIuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNkJDQ0VDMDMyNUQxRkEyNzAwMEYzOTFEIC8q
IFZlcmlmaWVyU2xvdFZpc2l0b3JJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFZlcmlmaWVyU2xvdFZpc2l0b3JJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTcwMTEzRDQ5MUE4REIwOTMwMDM4NDhDNCAvKiBJdGVyYXRvck9wZXJhdGlvbnMu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSXRlcmF0b3JPcGVyYXRp
b25zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzAxMTNENEExQThEQjA5MzAw
Mzg0OEM0IC8qIEl0ZXJhdG9yT3BlcmF0aW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBJdGVyYXRvck9wZXJhdGlvbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNzAxM0NBODkxQjQ5MUE5NDAwQ0FFNjEzIC8qIEpTTWljcm90YXNrLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTTWljcm90YXNrLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTUyMjcsNiArNTIzNCw3IEBACiAJCUY2OTJBODg3MDI1NTU5N0Qw
MUZGNjBGNyAvKiBKU0NKU1ZhbHVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTQ0pTVmFsdWUuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB0YWJXaWR0aCA9IDg7IH07CiAJCUY3MzkyNjkxOERDNjQzMzBBRkNERjBENyAvKiBK
U1NvdXJjZUNvZGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNT
b3VyY2VDb2RlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkUwMDI2MjIyM0Yz
QUYzMzAwM0EzNThGIC8qIFdlYkFzc2VtYmx5LmFzbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYXNtLmFzbTsgbmFtZSA9IFdlYkFz
c2VtYmx5LmFzbTsgcGF0aCA9IGxsaW50L1dlYkFzc2VtYmx5LmFzbTsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJRkUwNDE1NTIyNTJFQzA3MzAwOTFFQjVEIC8qIFNsb3RWaXNpdG9yTWFj
cm9zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNsb3RWaXNpdG9yTWFjcm9z
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFMDg2QkM5MjEyM0RFRkEwMDNGMjky
OSAvKiBFbnRyeUZyYW1lLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEVudHJ5
RnJhbWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkUwRDRBMDQxQUI4REQwQTAw
MkY1NEJGIC8qIEV4ZWN1dGlvblRpbWVMaW1pdFRlc3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBuYW1lID0gRXhlY3V0aW9uVGltZUxpbWl0VGVzdC5jcHA7IHBhdGggPSBBUEkv
dGVzdHMvRXhlY3V0aW9uVGltZUxpbWl0VGVzdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUZFMEQ0QTA1MUFCOEREMEEwMDJGNTRCRiAvKiBFeGVjdXRpb25UaW1lTGltaXRUZXN0
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEV4ZWN1dGlvblRpbWVMaW1pdFRl
c3QuaDsgcGF0aCA9IEFQSS90ZXN0cy9FeGVjdXRpb25UaW1lTGltaXRUZXN0Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01MjYxLDEyICs1MjY5LDE1IEBACiAJCUZFMUUyQzNFMjI0
MEQzMEIwMEY2QjcyOSAvKiBNYWNyb0Fzc2VtYmxlckFSTTY0RS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBNYWNyb0Fzc2VtYmxlckFSTTY0RS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlGRTIwQ0U5QjE1RjA0QTk1MDBERjM0MzAgLyogTExJbnRDTG9vcC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBMTEludENMb29wLmNwcDsgcGF0
aCA9IGxsaW50L0xMSW50Q0xvb3AuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlG
RTIwQ0U5QzE1RjA0QTk1MDBERjM0MzAgLyogTExJbnRDTG9vcC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBMTEludENMb29wLmg7IHBhdGggPSBsbGludC9MTEludENMb29wLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZFMjg3RDAxMjUyRkIyRTgwMEQ3MjNGOSAv
KiBWZXJpZmllclNsb3RWaXNpdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFZlcmlmaWVyU2xvdFZpc2l0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkUy
QTg3NUYxRjAyMzgxNjAwRUIzMUIyIC8qIE1pbmltdW1SZXNlcnZlZFpvbmVTaXplLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IE1pbmltdW1SZXNlcnZlZFpvbmVTaXplLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUZFMkJENjZFMjVDMERDODIwMDk5OUQzQiAvKiBWZXJpZmllclNsb3RWaXNpdG9y
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFZlcmlmaWVyU2xvdFZp
c2l0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTJFNkE3QTFENkVBNUZF
MDA2MEY4OTYgLyogVGhyb3dTY29wZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBUaHJvd1Njb3BlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkUz
MDIyRDAxRTNENzM5NjAwQkFDNDkzIC8qIFNpZ2lsbENyYXNoQW5hbHl6ZXIuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2lnaWxsQ3Jhc2hBbmFseXplci5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFMzAyMkQxMUUzRDczOTYwMEJBQzQ5MyAvKiBT
aWdpbGxDcmFzaEFuYWx5emVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNp
Z2lsbENyYXNoQW5hbHl6ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkUzMDIy
RDQxRTQyODU2NzAwQkFDNDkzIC8qIFZNSW5zcGVjdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFZNSW5zcGVjdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJRkUzMDIyRDUxRTQyODU2NzAwQkFDNDkzIC8qIFZNSW5zcGVjdG9yLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZNSW5zcGVjdG9yLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCUZFMzM2QjUyMjVEQjQ5N0QwMDk4RjAzNCAvKiBNYXJraW5nQ29uc3Ry
YWludEV4ZWN1dG9yUGFpci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNYXJr
aW5nQ29uc3RyYWludEV4ZWN1dG9yUGFpci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlGRTM0MjIxMTFENkI4MThDMDAzMkJFODggLyogVGhyb3dTY29wZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBUaHJvd1Njb3BlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUZFMzRFRTIwMjQzOThBOUEwMEFBMkU3QyAvKiBFbnN1cmVTdGlsbEFsaXZlSGVyZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBFbnN1cmVTdGlsbEFsaXZlSGVyZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlGRTM0RUUyMjI0Mzk4Qjg1MDBBQTJFN0MgLyogRW5zdXJlU3RpbGxBbGl2
ZUhlcmUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRW5zdXJlU3Rp
bGxBbGl2ZUhlcmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNTMzNSw2ICs1
MzQ2LDggQEAKIAkJRkU4REU1NEMyM0FDMUU4NjAwNUM5MTQyIC8qIENhY2hlYWJsZUlkZW50aWZp
ZXJJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENhY2hlYWJsZUlk
ZW50aWZpZXJJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFOERFNTRF
MjNBQzNBOEUwMDVDOTE0MiAvKiBDYWNoZWFibGVJZGVudGlmaWVyLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IENhY2hlYWJsZUlkZW50aWZpZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlGRTkwQkIzQTFCN0NGNjRFMDA2QjNGMDMgLyogVk1JbmxpbmVzLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZNSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlGRTkxMkI0RTI1MzExOTMzMDBGQUJEREYgLyogQWJzdHJhY3RTbG90VmlzaXRvci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBYnN0cmFjdFNsb3RWaXNpdG9yLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZFOTEyQjUwMjUzMTFBRDEwMEZBQkRERiAv
KiBBYnN0cmFjdFNsb3RWaXNpdG9ySW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBBYnN0cmFjdFNsb3RWaXNpdG9ySW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlGRTk4QjVCNjFCQjlBRTExMDA3M0U3QTYgLyogSklUU3ViR2VuZXJhdG9yLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpJVFN1YkdlbmVyYXRvci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTk5QjI0NzFDMjRCNkQzMDBDODIxNTkgLyogSklU
TmVnR2VuZXJhdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpJ
VE5lZ0dlbmVyYXRvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFOTlCMjQ4
MUMyNEI2RDMwMEM4MjE1OSAvKiBKSVROZWdHZW5lcmF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSklUTmVnR2VuZXJhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC02MjgyLDYgKzYyOTUsOCBAQAogCQkxNDJFMzEyQTEzNEZGMEE2MDBBRkFEQjUgLyog
aGVhcCAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJRkU5
MTJCNEUyNTMxMTkzMzAwRkFCRERGIC8qIEFic3RyYWN0U2xvdFZpc2l0b3IuaCAqLywKKwkJCQlG
RTkxMkI1MDI1MzExQUQxMDBGQUJEREYgLyogQWJzdHJhY3RTbG90VmlzaXRvcklubGluZXMuaCAq
LywKIAkJCQkwRkVDM0M1MDFGMzNBNDE2MDBGNTlCNkMgLyogQWxpZ25lZE1lbW9yeUFsbG9jYXRv
ci5jcHAgKi8sCiAJCQkJMEZFQzNDNTExRjMzQTQxNjAwRjU5QjZDIC8qIEFsaWduZWRNZW1vcnlB
bGxvY2F0b3IuaCAqLywKIAkJCQkwRkE3NjIwQTFEQjk1OUY2MDBCN0EyRkQgLyogQWxsb2NhdGlu
Z1Njb3BlLmggKi8sCkBAIC02NDEzLDYgKzY0MjgsNyBAQAogCQkJCTBGN0RGMTMwMUUyOTcwRDUw
MDk1OTUxQiAvKiBNYXJrZWRTcGFjZUlubGluZXMuaCAqLywKIAkJCQkwRjY2MEUzMzFFMDUxN0I3
MDAzMTQ2MkMgLyogTWFya2luZ0NvbnN0cmFpbnQuY3BwICovLAogCQkJCTBGNjYwRTM0MUUwNTE3
QjcwMDMxNDYyQyAvKiBNYXJraW5nQ29uc3RyYWludC5oICovLAorCQkJCUZFMzM2QjUyMjVEQjQ5
N0QwMDk4RjAzNCAvKiBNYXJraW5nQ29uc3RyYWludEV4ZWN1dG9yUGFpci5oICovLAogCQkJCTBG
NjYwRTM1MUUwNTE3QjcwMDMxNDYyQyAvKiBNYXJraW5nQ29uc3RyYWludFNldC5jcHAgKi8sCiAJ
CQkJMEY2NjBFMzYxRTA1MTdCODAwMzE0NjJDIC8qIE1hcmtpbmdDb25zdHJhaW50U2V0LmggKi8s
CiAJCQkJMEY5REFBMDYxRkQxQzNDODAwNzlDNUIyIC8qIE1hcmtpbmdDb25zdHJhaW50U29sdmVy
LmNwcCAqLywKQEAgLTY0MzksNiArNjQ1NSw3IEBACiAJCQkJQzIyNTQ5NDIxNUY3REJBQTAwNjVF
ODk4IC8qIFNsb3RWaXNpdG9yLmNwcCAqLywKIAkJCQkxNEJBNzhGMDEzQUFCODhGMDA1QjdDMkMg
LyogU2xvdFZpc2l0b3IuaCAqLywKIAkJCQkwRkNCNDA4NTE1QzBBM0MzMDA0ODkzMkIgLyogU2xv
dFZpc2l0b3JJbmxpbmVzLmggKi8sCisJCQkJRkUwNDE1NTIyNTJFQzA3MzAwOTFFQjVEIC8qIFNs
b3RWaXNpdG9yTWFjcm9zLmggKi8sCiAJCQkJMEZERTg3RkExREZFNkU1MDAwNjRDMzkwIC8qIFNw
YWNlVGltZU11dGF0b3JTY2hlZHVsZXIuY3BwICovLAogCQkJCTBGREU4N0ZCMURGRTZFNTAwMDY0
QzM5MCAvKiBTcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyLmggKi8sCiAJCQkJMEY0RjgyODkxRTMx
Qjk3MTAwNzUxODRDIC8qIFN0b2NoYXN0aWNTcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyLmNwcCAq
LywKQEAgLTY0NTYsNiArNjQ3Myw5IEBACiAJCQkJMEYxRkIzOEExRTE3M0E2MjAwQTlCRTUwIC8q
IFN5bmNocm9ub3VzU3RvcFRoZVdvcmxkTXV0YXRvclNjaGVkdWxlci5jcHAgKi8sCiAJCQkJMEYx
RkIzOEIxRTE3M0E2MjAwQTlCRTUwIC8qIFN5bmNocm9ub3VzU3RvcFRoZVdvcmxkTXV0YXRvclNj
aGVkdWxlci5oICovLAogCQkJCTE0MTQ0OENDMTNBMTc4MzcwMEY1QkExQSAvKiBUaW55Qmxvb21G
aWx0ZXIuaCAqLywKKwkJCQlGRTJCRDY2RTI1QzBEQzgyMDA5OTlEM0IgLyogVmVyaWZpZXJTbG90
VmlzaXRvci5jcHAgKi8sCisJCQkJRkUyODdEMDEyNTJGQjJFODAwRDcyM0Y5IC8qIFZlcmlmaWVy
U2xvdFZpc2l0b3IuaCAqLywKKwkJCQk2QkNDRUMwMzI1RDFGQTI3MDAwRjM5MUQgLyogVmVyaWZp
ZXJTbG90VmlzaXRvcklubGluZXMuaCAqLywKIAkJCQkwRjREOEM3MjFGQzdBOTczMDAxRDMyQUMg
LyogVmlzaXRDb3VudGVyLmggKi8sCiAJCQkJMEY5NTJBOUYxREY3ODYwNzAwRTA2RkJEIC8qIFZp
c2l0UmFjZUtleS5jcHAgKi8sCiAJCQkJMEY5NTJBQTAxREY3ODYwNzAwRTA2RkJEIC8qIFZpc2l0
UmFjZUtleS5oICovLApAQCAtOTMwMSw2ICs5MzIxLDcgQEAKIAkJCQkxNDdCODNBQzBFNkRCOEM5
MDA0Nzc1QTQgLyogQmF0Y2hlZFRyYW5zaXRpb25PcHRpbWl6ZXIuaCBpbiBIZWFkZXJzICovLAog
CQkJCUUzNUU4OUZEMjVDNTBGODcwMDcxRUUxRSAvKiBCaWdJbnQ2NEFycmF5LmggaW4gSGVhZGVy
cyAqLywKIAkJCQk4Njk3NkU1RjFGQTNFOEJDMDBFN0M0RTEgLyogQmlnSW50Q29uc3RydWN0b3Iu
aCBpbiBIZWFkZXJzICovLAorCQkJCUZFMDQxNTUzMjUyRUMwNzMwMDkxRUI1RCAvKiBTbG90Vmlz
aXRvck1hY3Jvcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODY2NzM5RDIxM0JGREU3MTAwMjNEODdD
IC8qIEJpZ0ludGVnZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2MTgxNjc3MUZCNzkyNDIwMEVD
QzRFQyAvKiBCaWdJbnRPYmplY3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2OTc2RTVFMUZBM0U4
QjYwMEU3QzRFMSAvKiBCaWdJbnRQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovLApAQCAtOTU4Miw2
ICs5NjAzLDcgQEAKIAkJCQkwRkQ4MkU1NzE0MURBRjEwMDAxNzlDOTQgLyogREZHT1NSRW50cnku
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGRDhBMzI2MTdENTFGNTcwMENBMkM0MCAvKiBERkdPU1JF
bnRyeXBvaW50Q3JlYXRpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZDMDk3NkExNDY4
QTZGNzAwQ0YyNDQyIC8qIERGR09TUkV4aXQuaCBpbiBIZWFkZXJzICovLAorCQkJCUZFOTEyQjRG
MjUzMTE5MzMwMEZBQkRERiAvKiBBYnN0cmFjdFNsb3RWaXNpdG9yLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRjIzNUJFQzE3MTc4RTczMDA2OTBDN0YgLyogREZHT1NSRXhpdEJhc2UuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGRkI5MjFDMTZEMDJGMTEwMDU1QTVEQiAvKiBERkdPU1JFeGl0Q29tcGls
YXRpb25JbmZvLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjcwMjVBQTE3MTRCMEZDMDAzODJDMEUg
LyogREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmggaW4gSGVhZGVycyAqLywKQEAgLTk4NjgsNiAr
OTg5MCw3IEBACiAJCQkJQTUxM0U1QkUxODVCRkFDQzAwN0U5NUFEIC8qIEluamVjdGVkU2NyaXB0
SG9zdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTUxM0U1Q0IxODVGOTYyNDAwN0U5NUFEIC8qIElu
amVjdGVkU2NyaXB0TWFuYWdlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTU4NDBFMjExODdCN0I4
NjAwODQzQjEwIC8qIEluamVjdGVkU2NyaXB0TW9kdWxlLmggaW4gSGVhZGVycyAqLywKKwkJCQlG
RTI4N0QwMjI1MkZCMkU4MDBENzIzRjkgLyogVmVyaWZpZXJTbG90VmlzaXRvci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQTUxM0U1QzcxODVGOTQ0NjAwN0U5NUFEIC8qIEluamVjdGVkU2NyaXB0U291
cmNlLmggaW4gSGVhZGVycyAqLywKIAkJCQk5OTU5RTkzMjFCRDE4Mjc5MDAxQUE0MTMgLyogaW5s
aW5lLWFuZC1taW5pZnktc3R5bGVzaGVldHMtYW5kLXNjcmlwdHMucHkgaW4gSGVhZGVycyAqLywK
IAkJCQk3OTA1QkI2OTFEMTIwNTBFMDAxOUZFNTcgLyogSW5saW5lQWNjZXNzLmggaW4gSGVhZGVy
cyAqLywKQEAgLTEwMDA3LDYgKzEwMDMwLDcgQEAKIAkJCQk1M0M0RjY2QjIxQjFBNDA5MDAyRkQw
MDkgLyogSlNBUElHbG9iYWxPYmplY3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTg0MDQ4MDEzMTAy
MUExRDkwMDhFN0YwMSAvKiBKU0FQSVZhbHVlV3JhcHBlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QzJDRjM5QzIxNkUxNUE4MTAwREQ2OUJFIC8qIEpTQVBJV3JhcHBlck9iamVjdC5oIGluIEhlYWRl
cnMgKi8sCisJCQkJRkUzMzZCNTMyNURCNDk3RDAwOThGMDM0IC8qIE1hcmtpbmdDb25zdHJhaW50
RXhlY3V0b3JQYWlyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQxNzBFMTZGNUNEMDBCMzQ0
NjAgLyogSlNBcnJheS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjY2RTMxN0I2QjVBQjAwQTdB
RTNGIC8qIEpTQXJyYXlCdWZmZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkI2NkU1MTdCNkI1
QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLApA
QCAtMTAwNDMsNiArMTAwNjcsNyBAQAogCQkJCUE1OEMwMjQyMThFNEE0MUEwMDAzMkJDNSAvKiBK
U0NvbnRleHRQcml2YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQxRTBFMTZGNUNEMDBC
MzQ0NjAgLyogSlNDb250ZXh0UmVmLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNUVBNzBFRTE5RjVC
NUM0MDA5OEY1RUMgLyogSlNDb250ZXh0UmVmSW5zcGVjdG9yU3VwcG9ydC5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJNkJDQ0VDMDQyNUQxRkEyNzAwMEYzOTFEIC8qIFZlcmlmaWVyU2xvdFZpc2l0b3JJ
bmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNUQyRTY2NTE5NUUxNzQwMDBBNTE4RTcgLyog
SlNDb250ZXh0UmVmSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0OENEMUQ4MTA4Q0Y5
MDIwMDgxNjNDNiAvKiBKU0NvbnRleHRSZWZQcml2YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQlG
RTc0OTdFNjIwOTAwMUIxMDAwMzU2NUIgLyogSlNDUHRyVGFnLmggaW4gSGVhZGVycyAqLywKQEAg
LTEwMTc0LDYgKzEwMTk5LDcgQEAKIAkJCQk3OTVBQzYxODIwQTIzNTVFMDA1MkM3NkMgLyogSlNW
aXJ0dWFsTWFjaGluZVByaXZhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3Q0EzQUU4MTdEQTQx
QUUwMDY1MzhBRiAvKiBKU1dlYWtNYXAuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3NDgyRTkzMTE2
QTdDQUQwMDNCMDcxMiAvKiBKU1dlYWtPYmplY3RNYXBSZWZJbnRlcm5hbC5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJRkU5MTJCNTEyNTMxMUFEMTAwRkFCRERGIC8qIEFic3RyYWN0U2xvdFZpc2l0b3JJ
bmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzQ4MkI5MzExNjcxMTQ3MDAzQjA3MTIgLyog
SlNXZWFrT2JqZWN0TWFwUmVmUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTM5QkZCQjAy
MkFEM0NEQzAwMjNGNEMwIC8qIEpTV2Vha09iamVjdFJlZi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEYwQjI4NkIxRUI4RTZDRjAwMEVCNUQyIC8qIEpTV2Vha1ByaXZhdGUuaCBpbiBIZWFkZXJzICov
LApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvd2tidWlsdGlucy9idWlsdGlu
c19nZW5lcmF0ZV9pbnRlcm5hbHNfd3JhcHBlcl9oZWFkZXIucHkKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvd2tidWlsdGlucy9idWlsdGluc19nZW5lcmF0ZV9p
bnRlcm5hbHNfd3JhcHBlcl9oZWFkZXIucHkJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9TY3JpcHRzL3drYnVpbHRpbnMvYnVpbHRpbnNfZ2VuZXJhdGVfaW50ZXJu
YWxzX3dyYXBwZXJfaGVhZGVyLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogIyEv
dXNyL2Jpbi9lbnYgcHl0aG9uCiAjCi0jIENvcHlyaWdodCAoYykgMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisjIENvcHlyaWdodCAoYykgMjAxNi0yMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICMKICMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAjIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtOTMs
NyArOTMsNyBAQCBjbGFzcyBCdWlsdGluc0ludGVybmFsc1dyYXBwZXJIZWFkZXJHZW5lCiAKICAg
ICBkZWYgZ2VuZXJhdGVfbWV0aG9kcyhzZWxmKToKICAgICAgICAgcmV0dXJuICIiIgotICAgIHZv
aWQgdmlzaXQoSlNDOjpTbG90VmlzaXRvciYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0
b3I+IHZvaWQgdmlzaXQoVmlzaXRvciYpOwogICAgIHZvaWQgaW5pdGlhbGl6ZShKU0RPTUdsb2Jh
bE9iamVjdCYpOwogIiIiCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL3dr
YnVpbHRpbnMvYnVpbHRpbnNfZ2VuZXJhdGVfaW50ZXJuYWxzX3dyYXBwZXJfaW1wbGVtZW50YXRp
b24ucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvd2tidWls
dGlucy9idWlsdGluc19nZW5lcmF0ZV9pbnRlcm5hbHNfd3JhcHBlcl9pbXBsZW1lbnRhdGlvbi5w
eQkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvd2ti
dWlsdGlucy9idWlsdGluc19nZW5lcmF0ZV9pbnRlcm5hbHNfd3JhcHBlcl9pbXBsZW1lbnRhdGlv
bi5weQkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKICMhL3Vzci9iaW4vZW52IHB5dGhv
bgogIwotIyBDb3B5cmlnaHQgKGMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorIyBDb3B5cmlnaHQgKGMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAjCiAjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEyMCwxMyArMTIwLDE2IEBAIGNs
YXNzIEJ1aWx0aW5zSW50ZXJuYWxzV3JhcHBlckltcGxlbWVudGEKICAgICAgICAgcmV0dXJuICdc
bicuam9pbihsaW5lcykKIAogICAgIGRlZiBnZW5lcmF0ZV92aXNpdF9tZXRob2Qoc2VsZik6Ci0g
ICAgICAgIGxpbmVzID0gWyJ2b2lkIEpTQnVpbHRpbkludGVybmFsRnVuY3Rpb25zOjp2aXNpdChK
U0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKSIsCisgICAgICAgIGxpbmVzID0gWyJ0ZW1wbGF0ZTx0
eXBlbmFtZSBWaXNpdG9yPiIsCisgICAgICAgICAgICAgICAgICJ2b2lkIEpTQnVpbHRpbkludGVy
bmFsRnVuY3Rpb25zOjp2aXNpdChWaXNpdG9yJiB2aXNpdG9yKSIsCiAgICAgICAgICAgICAgICAg
ICJ7Il0KICAgICAgICAgZm9yIG9iamVjdCBpbiBzZWxmLmludGVybmFsczoKICAgICAgICAgICAg
IHZpc2l0ID0gIiAgICAlcy52aXNpdCh2aXNpdG9yKTsiICUgc2VsZi5tZW1iZXJfbmFtZShvYmpl
Y3QpCiAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoQnVpbHRpbnNHZW5lcmF0b3Iud3JhcF93aXRo
X2d1YXJkKG9iamVjdC5hbm5vdGF0aW9ucy5nZXQoJ2NvbmRpdGlvbmFsJyksIHZpc2l0KSkKICAg
ICAgICAgbGluZXMuYXBwZW5kKCIgICAgVU5VU0VEX1BBUkFNKHZpc2l0b3IpOyIpCiAgICAgICAg
IGxpbmVzLmFwcGVuZCgifVxuIikKKyAgICAgICAgbGluZXMuYXBwZW5kKCJ0ZW1wbGF0ZSB2b2lk
IEpTQnVpbHRpbkludGVybmFsRnVuY3Rpb25zOjp2aXNpdChBYnN0cmFjdFNsb3RWaXNpdG9yJik7
IikKKyAgICAgICAgbGluZXMuYXBwZW5kKCJ0ZW1wbGF0ZSB2b2lkIEpTQnVpbHRpbkludGVybmFs
RnVuY3Rpb25zOjp2aXNpdChTbG90VmlzaXRvciYpO1xuIikKICAgICAgICAgcmV0dXJuICdcbicu
am9pbihsaW5lcykKIAogICAgIGRlZiBfZ2VuZXJhdGVfaW5pdGlhbGl6ZV9zdGF0aWNfZ2xvYmFs
cyhzZWxmKToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL3drYnVpbHRpbnMv
YnVpbHRpbnNfdGVtcGxhdGVzLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9TY3JpcHRzL3drYnVpbHRpbnMvYnVpbHRpbnNfdGVtcGxhdGVzLnB5CShyZXZpc2lvbiAyNzI5
MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy93a2J1aWx0aW5zL2J1aWx0aW5z
X3RlbXBsYXRlcy5weQkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKICMhL3Vzci9iaW4v
ZW52IHB5dGhvbgogIwotIyBDb3B5cmlnaHQgKGMpIDIwMTQtMjAxOSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisjIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICMgQ29weXJpZ2h0IChDKSAyMDE1IENhbm9uIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICMKICMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0xODgsNyArMTg4LDcgQEAgcHVibGlj
OgogICAgIGV4cGxpY2l0ICR7b2JqZWN0TmFtZX1CdWlsdGluRnVuY3Rpb25zKEpTQzo6Vk0mIHZt
KSA6IG1fdm0odm0pIHsgfQogCiAgICAgdm9pZCBpbml0KEpTQzo6SlNHbG9iYWxPYmplY3QmKTsK
LSAgICB2b2lkIHZpc2l0KEpTQzo6U2xvdFZpc2l0b3ImKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBWaXNpdG9yPiB2b2lkIHZpc2l0KFZpc2l0b3ImKTsKIAogcHVibGljOgogICAgIEpTQzo6Vk0m
IG1fdm07CkBAIC0yMDcsMTAgKzIwNywxNSBAQCBpbmxpbmUgdm9pZCAke29iamVjdE5hbWV9QnVp
bHRpbkZ1bmN0aW9uCiAjdW5kZWYgRVhQT1JUX0ZVTkNUSU9OCiB9CiAKLWlubGluZSB2b2lkICR7
b2JqZWN0TmFtZX1CdWlsdGluRnVuY3Rpb25zOjp2aXNpdChKU0M6OlNsb3RWaXNpdG9yJiB2aXNp
dG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK2lubGluZSB2b2lkICR7b2JqZWN0TmFt
ZX1CdWlsdGluRnVuY3Rpb25zOjp2aXNpdChWaXNpdG9yJiB2aXNpdG9yKQogewogI2RlZmluZSBW
SVNJVF9GVU5DVElPTihuYW1lKSB2aXNpdG9yLmFwcGVuZChtXyMjbmFtZSMjRnVuY3Rpb24pOwog
ICAgICR7bWFjcm9QcmVmaXh9X0ZPUkVBQ0hfJHtvYmplY3RNYWNyb31fQlVJTFRJTl9GVU5DVElP
Tl9OQU1FKFZJU0lUX0ZVTkNUSU9OKQogI3VuZGVmIFZJU0lUX0ZVTkNUSU9OCiB9CisKK3RlbXBs
YXRlIHZvaWQgJHtvYmplY3ROYW1lfUJ1aWx0aW5GdW5jdGlvbnM6OnZpc2l0KEpTQzo6QWJzdHJh
Y3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCAke29iamVjdE5hbWV9QnVpbHRpbkZ1bmN0
aW9uczo6dmlzaXQoSlNDOjpTbG90VmlzaXRvciYpOworCiAiIiIpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCShyZXZpc2lvbiAyNzI5MDIp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjAg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIw
MjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC03NTcsNyArNzU3LDggQEAgYm9vbCBBY2Nlc3NDYXNlOjp2aXNpdFdlYWso
Vk0mIHZtKSBjb25zdAogICAgIHJldHVybiBpc1ZhbGlkOwogfQogCi1ib29sIEFjY2Vzc0Nhc2U6
OnByb3BhZ2F0ZVRyYW5zaXRpb25zKFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBjb25zdAordGVtcGxh
dGU8dHlwZW5hbWUgVmlzaXRvcj4KK2Jvb2wgQWNjZXNzQ2FzZTo6cHJvcGFnYXRlVHJhbnNpdGlv
bnMoVmlzaXRvciYgdmlzaXRvcikgY29uc3QKIHsKICAgICBib29sIHJlc3VsdCA9IHRydWU7CiAK
QEAgLTc3Miw3ICs3NzMsNyBAQCBib29sIEFjY2Vzc0Nhc2U6OnByb3BhZ2F0ZVRyYW5zaXRpb25z
KFNsCiAgICAgc3dpdGNoIChtX3R5cGUpIHsKICAgICBjYXNlIFRyYW5zaXRpb246CiAgICAgY2Fz
ZSBEZWxldGU6Ci0gICAgICAgIGlmICh2aXNpdG9yLnZtKCkuaGVhcC5pc01hcmtlZChtX3N0cnVj
dHVyZS0+cHJldmlvdXNJRCgpKSkKKyAgICAgICAgaWYgKHZpc2l0b3IuaXNNYXJrZWQobV9zdHJ1
Y3R1cmUtPnByZXZpb3VzSUQoKSkpCiAgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmll
cmVkKG1fc3RydWN0dXJlLmdldCgpKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgcmVzdWx0
ID0gZmFsc2U7CkBAIC03ODQsMTEgKzc4NSwxOCBAQCBib29sIEFjY2Vzc0Nhc2U6OnByb3BhZ2F0
ZVRyYW5zaXRpb25zKFNsCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotdm9pZCBBY2Nlc3NDYXNl
Ojp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYgdmlzaXRvcikgY29uc3QKK3RlbXBsYXRlIGJv
b2wgQWNjZXNzQ2FzZTo6cHJvcGFnYXRlVHJhbnNpdGlvbnMoQWJzdHJhY3RTbG90VmlzaXRvciYp
IGNvbnN0OwordGVtcGxhdGUgYm9vbCBBY2Nlc3NDYXNlOjpwcm9wYWdhdGVUcmFuc2l0aW9ucyhT
bG90VmlzaXRvciYpIGNvbnN0OworCisKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lk
IEFjY2Vzc0Nhc2U6OnZpc2l0QWdncmVnYXRlSW1wbChWaXNpdG9yJiB2aXNpdG9yKSBjb25zdAog
ewogICAgIG1faWRlbnRpZmllci52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKIH0KIAorREVGSU5F
X1ZJU0lUX0FHR1JFR0FURV9XSVRIX01PRElGSUVSKEFjY2Vzc0Nhc2UsIGNvbnN0KTsKKwogdm9p
ZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZVdpdGhHdWFyZCgKICAgICBBY2Nlc3NHZW5lcmF0aW9uU3Rh
dGUmIHN0YXRlLCBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0JiBmYWxsVGhyb3VnaCkKIHsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuaAkocmV2aXNpb24g
MjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTct
MjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTI4MCw5ICsyODAsOSBAQCBwcml2YXRlOgogICAgIHRlbXBsYXRl
PHR5cGVuYW1lIEZ1bmN0b3I+CiAgICAgdm9pZCBmb3JFYWNoRGVwZW5kZW50Q2VsbChWTSYsIGNv
bnN0IEZ1bmN0b3ImKSBjb25zdDsKIAotICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0
b3ImKSBjb25zdDsKKyAgICBERUNMQVJFX1ZJU0lUX0FHR1JFR0FURV9XSVRIX01PRElGSUVSKGNv
bnN0KTsKICAgICBib29sIHZpc2l0V2VhayhWTSYpIGNvbnN0OwotICAgIGJvb2wgcHJvcGFnYXRl
VHJhbnNpdGlvbnMoU2xvdFZpc2l0b3ImKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPiBib29sIHByb3BhZ2F0ZVRyYW5zaXRpb25zKFZpc2l0b3ImKSBjb25zdDsKIAogICAg
IC8vIEZJWE1FOiBUaGlzIG9ubHkgZXhpc3RzIGJlY2F1c2Ugb2YgaG93IEFjY2Vzc0Nhc2UgcHV0
cyBwb3N0LWdlbmVyYXRpb24gdGhpbmdzIGludG8gaXRzZWxmLgogICAgIC8vIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTY0NTYKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9CeVZhbEluZm8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9CeVZhbEluZm8uY3BwCShyZXZpc2lvbiAyNzI5MDIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnlWYWxJbmZvLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIwLTIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0zMiwxMSArMzIsMTQgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICNpZiBFTkFCTEUoSklUKQogCi12
b2lkIEJ5VmFsSW5mbzo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1w
bGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBCeVZhbEluZm86OnZpc2l0QWdncmVnYXRlSW1w
bChWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGNhY2hlZElkLnZpc2l0QWdncmVnYXRlKHZpc2l0
b3IpOwogfQogCitERUZJTkVfVklTSVRfQUdHUkVHQVRFKEJ5VmFsSW5mbyk7CisKICNlbmRpZiAv
LyBFTkFCTEUoSklUKQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9CeVZhbEluZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQnlWYWxJbmZvLmgJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeVZhbEluZm8uaAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxOCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTI2MCw3ICsyNjAsNyBAQCBzdHJ1Y3QgQnlWYWxJbmZvIHsKICAgICAgICAgdGhpcy0+c2VlbiA9
IGZhbHNlOwogICAgIH0KIAotICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImKTsK
KyAgICBERUNMQVJFX1ZJU0lUX0FHR1JFR0FURTsKIAogICAgIENvZGVMb2NhdGlvbkp1bXA8SlNJ
bnRlcm5hbFB0clRhZz4gbm90SW5kZXhKdW1wOwogICAgIENvZGVMb2NhdGlvbkp1bXA8SlNJbnRl
cm5hbFB0clRhZz4gYmFkVHlwZUp1bXA7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQ2hlY2tQcml2YXRlQnJhbmRTdGF0dXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DaGVja1ByaXZhdGVCcmFuZFN0YXR1cy5jcHAJKHJldmlz
aW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DaGVja1ByaXZh
dGVCcmFuZFN0YXR1cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyOCwxOCArMjI4LDI1IEBAIENh
Y2hlYWJsZUlkZW50aWZpZXIgQ2hlY2tQcml2YXRlQnJhbmRTdGEKICAgICByZXR1cm4gcmVzdWx0
OwogfQogCi12b2lkIENoZWNrUHJpdmF0ZUJyYW5kU3RhdHVzOjp2aXNpdEFnZ3JlZ2F0ZShTbG90
VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIENoZWNr
UHJpdmF0ZUJyYW5kU3RhdHVzOjp2aXNpdEFnZ3JlZ2F0ZUltcGwoVmlzaXRvciYgdmlzaXRvcikK
IHsKICAgICBmb3IgKENoZWNrUHJpdmF0ZUJyYW5kVmFyaWFudCYgdmFyaWFudCA6IG1fdmFyaWFu
dHMpCiAgICAgICAgIHZhcmlhbnQudmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7CiB9CiAKLXZvaWQg
Q2hlY2tQcml2YXRlQnJhbmRTdGF0dXM6Om1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJiB2aXNpdG9y
KQorREVGSU5FX1ZJU0lUX0FHR1JFR0FURShDaGVja1ByaXZhdGVCcmFuZFN0YXR1cyk7CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIENoZWNrUHJpdmF0ZUJyYW5kU3RhdHVzOjpt
YXJrSWZDaGVhcChWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGZvciAoQ2hlY2tQcml2YXRlQnJh
bmRWYXJpYW50JiB2YXJpYW50IDogbV92YXJpYW50cykKICAgICAgICAgdmFyaWFudC5tYXJrSWZD
aGVhcCh2aXNpdG9yKTsKIH0KIAordGVtcGxhdGUgdm9pZCBDaGVja1ByaXZhdGVCcmFuZFN0YXR1
czo6bWFya0lmQ2hlYXAoQWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBDaGVj
a1ByaXZhdGVCcmFuZFN0YXR1czo6bWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImKTsKKwogYm9vbCBD
aGVja1ByaXZhdGVCcmFuZFN0YXR1czo6ZmluYWxpemUoVk0mIHZtKQogewogICAgIGZvciAoYXV0
byYgdmFyaWFudCA6IG1fdmFyaWFudHMpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9DaGVja1ByaXZhdGVCcmFuZFN0YXR1cy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DaGVja1ByaXZhdGVCcmFuZFN0YXR1cy5oCShyZXZpc2lv
biAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2hlY2tQcml2YXRl
QnJhbmRTdGF0dXMuaAkod29ya2luZyBjb3B5KQpAQCAtODIsOCArODIsOCBAQCBwdWJsaWM6CiAg
ICAgLy8gQXR0ZW1wdHMgdG8gcmVkdWNlIHRoZSBzZXQgb2YgdmFyaWFudHMgdG8gZml0IHRoZSBn
aXZlbiBzdHJ1Y3R1cmUgc2V0LiBUaGlzIG1heSBiZSBhcHByb3hpbWF0ZS4KICAgICB2b2lkIGZp
bHRlcihjb25zdCBTdHJ1Y3R1cmVTZXQmKTsKIAotICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xv
dFZpc2l0b3ImKTsKLSAgICB2b2lkIG1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJik7CisgICAgREVD
TEFSRV9WSVNJVF9BR0dSRUdBVEU7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9p
ZCBtYXJrSWZDaGVhcChWaXNpdG9yJik7CiAgICAgYm9vbCBmaW5hbGl6ZShWTSYpOwogCiAgICAg
Ym9vbCBhcHBlbmRWYXJpYW50KGNvbnN0IENoZWNrUHJpdmF0ZUJyYW5kVmFyaWFudCYpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NoZWNrUHJpdmF0ZUJyYW5kVmFyaWFu
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NoZWNr
UHJpdmF0ZUJyYW5kVmFyaWFudC5jcHAJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9DaGVja1ByaXZhdGVCcmFuZFZhcmlhbnQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC01MSwxMSArNTEsMTUgQEAgYm9vbCBDaGVja1ByaXZhdGVCcmFuZFZhcmlhbnQ6
OmF0dGVtcHRUbwogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIENoZWNrUHJpdmF0ZUJyYW5k
VmFyaWFudDo6bWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBl
bmFtZSBWaXNpdG9yPgordm9pZCBDaGVja1ByaXZhdGVCcmFuZFZhcmlhbnQ6Om1hcmtJZkNoZWFw
KFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgbV9zdHJ1Y3R1cmVTZXQubWFya0lmQ2hlYXAodmlz
aXRvcik7CiB9CiAKK3RlbXBsYXRlIHZvaWQgQ2hlY2tQcml2YXRlQnJhbmRWYXJpYW50OjptYXJr
SWZDaGVhcChBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIENoZWNrUHJpdmF0
ZUJyYW5kVmFyaWFudDo6bWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImKTsKKwogYm9vbCBDaGVja1By
aXZhdGVCcmFuZFZhcmlhbnQ6OmZpbmFsaXplKFZNJiB2bSkKIHsKICAgICBpZiAoIW1fc3RydWN0
dXJlU2V0LmlzU3RpbGxBbGl2ZSh2bSkpCkBAIC02MywxMSArNjcsMTQgQEAgYm9vbCBDaGVja1By
aXZhdGVCcmFuZFZhcmlhbnQ6OmZpbmFsaXplKAogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lk
IENoZWNrUHJpdmF0ZUJyYW5kVmFyaWFudDo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImIHZp
c2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBDaGVja1ByaXZhdGVCcmFu
ZFZhcmlhbnQ6OnZpc2l0QWdncmVnYXRlSW1wbChWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIG1f
aWRlbnRpZmllci52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKIH0KIAorREVGSU5FX1ZJU0lUX0FH
R1JFR0FURShDaGVja1ByaXZhdGVCcmFuZFZhcmlhbnQpOworCiB2b2lkIENoZWNrUHJpdmF0ZUJy
YW5kVmFyaWFudDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAogewogICAgIGR1bXBJbkNv
bnRleHQob3V0LCBudWxscHRyKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9DaGVja1ByaXZhdGVCcmFuZFZhcmlhbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ2hlY2tQcml2YXRlQnJhbmRWYXJpYW50LmgJKHJldmlzaW9uIDI3
MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DaGVja1ByaXZhdGVCcmFu
ZFZhcmlhbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAogCiBuYW1lc3BhY2Ug
SlNDIHsKIAorY2xhc3MgQWJzdHJhY3RTbG90VmlzaXRvcjsKIGNsYXNzIENoZWNrUHJpdmF0ZUJy
YW5kU3RhdHVzOwogCiBjbGFzcyBDaGVja1ByaXZhdGVCcmFuZFZhcmlhbnQgewpAQCAtNDYsOCAr
NDcsOCBAQCBwdWJsaWM6CiAKICAgICBib29sIGF0dGVtcHRUb01lcmdlKGNvbnN0IENoZWNrUHJp
dmF0ZUJyYW5kVmFyaWFudCYgb3RoZXIpOwogCi0gICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShTbG90
VmlzaXRvciYpOwotICAgIHZvaWQgbWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImKTsKKyAgICBERUNM
QVJFX1ZJU0lUX0FHR1JFR0FURTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lk
IG1hcmtJZkNoZWFwKFZpc2l0b3ImKTsKICAgICBib29sIGZpbmFsaXplKFZNJik7CiAKICAgICB2
b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTAwMSw3ICsxMDAxLDggQEAgc2l6ZV90IENvZGVCbG9jazo6ZXN0aW1hdGVkU2l6ZShKU0NlbGwq
IAogICAgIHJldHVybiBCYXNlOjplc3RpbWF0ZWRTaXplKGNlbGwsIHZtKSArIGV4dHJhTWVtb3J5
QWxsb2NhdGVkOwogfQogCi12b2lkIENvZGVCbG9jazo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNl
bGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3Zv
aWQgQ29kZUJsb2NrOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZp
c2l0b3IpCiB7CiAgICAgQ29kZUJsb2NrKiB0aGlzT2JqZWN0ID0ganNDYXN0PENvZGVCbG9jayo+
KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygp
KTsKQEAgLTEwMTAsOSArMTAxMSwxNCBAQCB2b2lkIENvZGVCbG9jazo6dmlzaXRDaGlsZHJlbihK
U0NlbGwqIGNlCiAgICAgdGhpc09iamVjdC0+dmlzaXRDaGlsZHJlbih2aXNpdG9yKTsKIH0KIAot
dm9pZCBDb2RlQmxvY2s6OnZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCitERUZJ
TkVfVklTSVRfQ0hJTERSRU4oQ29kZUJsb2NrKTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRv
cj4KK3ZvaWQgQ29kZUJsb2NrOjp2aXNpdENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAg
ICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2spOworCisgICAgbV92aXNpdENoaWxk
cmVuU2tpcHBlZER1ZVRvT2xkQWdlID0gZmFsc2U7CiAgICAgaWYgKENvZGVCbG9jayogb3RoZXJC
bG9jayA9IHNwZWNpYWxPU1JFbnRyeUJsb2NrT3JOdWxsKCkpCiAgICAgICAgIHZpc2l0b3IuYXBw
ZW5kVW5iYXJyaWVyZWQob3RoZXJCbG9jayk7CiAKQEAgLTEwMjksMTMgKzEwMzUsMjEgQEAgdm9p
ZCBDb2RlQmxvY2s6OnZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0bwogICAgIFZNOjpTcGFjZUFuZFNl
dDo6c2V0Rm9yKCpzdWJzcGFjZSgpKS5hZGQodGhpcyk7CiB9CiAKLWJvb2wgQ29kZUJsb2NrOjpz
aG91bGRWaXNpdFN0cm9uZ2x5KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYgbG9ja2VyKQorYm9v
bCBDb2RlQmxvY2s6OnNob3VsZFZpc2l0U3Ryb25nbHkoY29uc3QgQ29uY3VycmVudEpTTG9ja2Vy
JiBsb2NrZXIsIEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgaWYgKE9wdGlv
bnM6OmZvcmNlQ29kZUJsb2NrTGl2ZW5lc3MoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAg
ICBpZiAoc2hvdWxkSmV0dGlzb25EdWVUb09sZEFnZShsb2NrZXIpKQorICAgIGlmIChzaG91bGRK
ZXR0aXNvbkR1ZVRvT2xkQWdlKGxvY2tlciwgdmlzaXRvcikpIHsKKyAgICAgICAgaWYgKE9wdGlv
bnM6OnZlcmlmeUdDKCkpCisgICAgICAgICAgICBtX3Zpc2l0Q2hpbGRyZW5Ta2lwcGVkRHVlVG9P
bGRBZ2UgPSB0cnVlOwogICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKFVO
TElLRUxZKG1fdmlzaXRDaGlsZHJlblNraXBwZWREdWVUb09sZEFnZSkpIHsKKyAgICAgICAgUkVM
RUFTRV9BU1NFUlQoT3B0aW9uczo6dmVyaWZ5R0MoKSk7IC8vIG1sYW0gQVNTRVJUPworICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQogCiAgICAgLy8gSW50ZXJwcmV0ZXIgYW5kIEJhc2VsaW5l
IEpJVCBDb2RlQmxvY2tzIGRvbid0IG5lZWQgdG8gYmUgamV0dGlzb25lZCB3aGVuCiAgICAgLy8g
dGhlaXIgd2VhayByZWZlcmVuY2VzIGdvIHN0YWxlLiBTbyBpZiBhIGJhc2xpbmUgSklUIENvZGVC
bG9jayBnZXRzCkBAIC0xMDg2LDkgKzExMDAsOSBAQCBzdGF0aWMgU2Vjb25kcyB0aW1lVG9MaXZl
KEpJVFR5cGUgaml0VHlwCiAgICAgfQogfQogCi1ib29sIENvZGVCbG9jazo6c2hvdWxkSmV0dGlz
b25EdWVUb09sZEFnZShjb25zdCBDb25jdXJyZW50SlNMb2NrZXImKQorYm9vbCBDb2RlQmxvY2s6
OnNob3VsZEpldHRpc29uRHVlVG9PbGRBZ2UoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgQWJz
dHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKLSAgICBpZiAobV92bS0+aGVhcC5pc01hcmtl
ZCh0aGlzKSkKKyAgICBpZiAodmlzaXRvci5pc01hcmtlZCh0aGlzKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCiAgICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OmZvcmNlQ29kZUJsb2NrVG9KZXR0
aXNvbkR1ZVRvT2xkQWdlKCkpKQpAQCAtMTEwMSwxMiArMTExNSwxMyBAQCBib29sIENvZGVCbG9j
azo6c2hvdWxkSmV0dGlzb25EdWVUb09sZEFnCiB9CiAKICNpZiBFTkFCTEUoREZHX0pJVCkKLXN0
YXRpYyBib29sIHNob3VsZE1hcmtUcmFuc2l0aW9uKFZNJiB2bSwgREZHOjpXZWFrUmVmZXJlbmNl
VHJhbnNpdGlvbiYgdHJhbnNpdGlvbikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+CitzdGF0
aWMgaW5saW5lIGJvb2wgc2hvdWxkTWFya1RyYW5zaXRpb24oVmlzaXRvciYgdmlzaXRvciwgREZH
OjpXZWFrUmVmZXJlbmNlVHJhbnNpdGlvbiYgdHJhbnNpdGlvbikKIHsKLSAgICBpZiAodHJhbnNp
dGlvbi5tX2NvZGVPcmlnaW4gJiYgIXZtLmhlYXAuaXNNYXJrZWQodHJhbnNpdGlvbi5tX2NvZGVP
cmlnaW4uZ2V0KCkpKQorICAgIGlmICh0cmFuc2l0aW9uLm1fY29kZU9yaWdpbiAmJiAhdmlzaXRv
ci5pc01hcmtlZCh0cmFuc2l0aW9uLm1fY29kZU9yaWdpbi5nZXQoKSkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICAKLSAgICBpZiAoIXZtLmhlYXAuaXNNYXJrZWQodHJhbnNpdGlvbi5tX2Zy
b20uZ2V0KCkpKQorICAgIGlmICghdmlzaXRvci5pc01hcmtlZCh0cmFuc2l0aW9uLm1fZnJvbS5n
ZXQoKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKICAgICByZXR1cm4gdHJ1ZTsKQEAg
LTExMjIsOCArMTEzNywxMCBAQCBCeXRlY29kZUluZGV4IENvZGVCbG9jazo6Ynl0ZWNvZGVJbmRl
eEZvCiB9CiAjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCiAKLXZvaWQgQ29kZUJsb2NrOjpwcm9w
YWdhdGVUcmFuc2l0aW9ucyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBTbG90VmlzaXRvciYg
dmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIENvZGVCbG9jazo6cHJv
cGFnYXRlVHJhbnNpdGlvbnMoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgVmlzaXRvciYgdmlz
aXRvcikKIHsKKyAgICB0eXBlbmFtZSBWaXNpdG9yOjpTdXBwcmVzc0dDVmVyaWZpZXJTY29wZSBz
dXBwcmVzc1Njb3BlKHZpc2l0b3IpOwogICAgIFZNJiB2bSA9ICptX3ZtOwogCiAgICAgaWYgKGpp
dFR5cGUoKSA9PSBKSVRUeXBlOjpJbnRlcnByZXRlclRodW5rKSB7CkBAIC0xMTMzLDggKzExNTAs
OSBAQCB2b2lkIENvZGVCbG9jazo6cHJvcGFnYXRlVHJhbnNpdGlvbnMoY29uCiAgICAgICAgICAg
ICAgICAgU3RydWN0dXJlSUQgbmV3U3RydWN0dXJlSUQgPSBtZXRhZGF0YS5tX25ld1N0cnVjdHVy
ZUlEOwogICAgICAgICAgICAgICAgIGlmICghb2xkU3RydWN0dXJlSUQgfHwgIW5ld1N0cnVjdHVy
ZUlEKQogICAgICAgICAgICAgICAgICAgICByZXR1cm47CisKICAgICAgICAgICAgICAgICBTdHJ1
Y3R1cmUqIG9sZFN0cnVjdHVyZSA9IHZtLmhlYXAuc3RydWN0dXJlSURUYWJsZSgpLmdldChvbGRT
dHJ1Y3R1cmVJRCk7Ci0gICAgICAgICAgICAgICAgaWYgKHZtLmhlYXAuaXNNYXJrZWQob2xkU3Ry
dWN0dXJlKSkgeworICAgICAgICAgICAgICAgIGlmICh2aXNpdG9yLmlzTWFya2VkKG9sZFN0cnVj
dHVyZSkpIHsKICAgICAgICAgICAgICAgICAgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSB2
bS5oZWFwLnN0cnVjdHVyZUlEVGFibGUoKS5nZXQobmV3U3RydWN0dXJlSUQpOwogICAgICAgICAg
ICAgICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKG5ld1N0cnVjdHVyZSk7CiAgICAg
ICAgICAgICAgICAgfQpAQCAtMTE0OCwxMSArMTE2NiwxMSBAQCB2b2lkIENvZGVCbG9jazo6cHJv
cGFnYXRlVHJhbnNpdGlvbnMoY29uCiAKICAgICAgICAgICAgICAgICBKU0NlbGwqIHByb3BlcnR5
ID0gbWV0YWRhdGEubV9wcm9wZXJ0eS5nZXQoKTsKICAgICAgICAgICAgICAgICBBU1NFUlQocHJv
cGVydHkpOwotICAgICAgICAgICAgICAgIGlmICghdm0uaGVhcC5pc01hcmtlZChwcm9wZXJ0eSkp
CisgICAgICAgICAgICAgICAgaWYgKCF2aXNpdG9yLmlzTWFya2VkKHByb3BlcnR5KSkKICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgICAgICAgICAgU3RydWN0dXJlKiBvbGRT
dHJ1Y3R1cmUgPSB2bS5oZWFwLnN0cnVjdHVyZUlEVGFibGUoKS5nZXQob2xkU3RydWN0dXJlSUQp
OwotICAgICAgICAgICAgICAgIGlmICh2bS5oZWFwLmlzTWFya2VkKG9sZFN0cnVjdHVyZSkpIHsK
KyAgICAgICAgICAgICAgICBpZiAodmlzaXRvci5pc01hcmtlZChvbGRTdHJ1Y3R1cmUpKSB7CiAg
ICAgICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0gdm0uaGVhcC5zdHJ1
Y3R1cmVJRFRhYmxlKCkuZ2V0KG5ld1N0cnVjdHVyZUlEKTsKICAgICAgICAgICAgICAgICAgICAg
dmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZChuZXdTdHJ1Y3R1cmUpOwogICAgICAgICAgICAgICAg
IH0KQEAgLTExNzAsNyArMTE4OCw3IEBAIHZvaWQgQ29kZUJsb2NrOjpwcm9wYWdhdGVUcmFuc2l0
aW9ucyhjb24KICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgICAgICAgICAg
U3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUgPSB2bS5oZWFwLnN0cnVjdHVyZUlEVGFibGUoKS5nZXQo
b2xkU3RydWN0dXJlSUQpOwotICAgICAgICAgICAgICAgIGlmICh2bS5oZWFwLmlzTWFya2VkKG9s
ZFN0cnVjdHVyZSkpIHsKKyAgICAgICAgICAgICAgICBpZiAodmlzaXRvci5pc01hcmtlZChvbGRT
dHJ1Y3R1cmUpKSB7CiAgICAgICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJl
ID0gdm0uaGVhcC5zdHJ1Y3R1cmVJRFRhYmxlKCkuZ2V0KG5ld1N0cnVjdHVyZUlEKTsKICAgICAg
ICAgICAgICAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZChuZXdTdHJ1Y3R1cmUpOwog
ICAgICAgICAgICAgICAgIH0KQEAgLTExOTcsNyArMTIxNSw3IEBAIHZvaWQgQ29kZUJsb2NrOjpw
cm9wYWdhdGVUcmFuc2l0aW9ucyhjb24KICAgICAgICAgICAgIHZtLmdldFN0cnVjdHVyZShzdHJ1
Y3R1cmVJRCktPm1hcmtJZkNoZWFwKHZpc2l0b3IpOwogCiAgICAgICAgIGZvciAoYXV0byYgdHJh
bnNpdGlvbiA6IGRmZ0NvbW1vbi0+dHJhbnNpdGlvbnMpIHsKLSAgICAgICAgICAgIGlmIChzaG91
bGRNYXJrVHJhbnNpdGlvbih2bSwgdHJhbnNpdGlvbikpIHsKKyAgICAgICAgICAgIGlmIChzaG91
bGRNYXJrVHJhbnNpdGlvbih2aXNpdG9yLCB0cmFuc2l0aW9uKSkgewogICAgICAgICAgICAgICAg
IC8vIElmIHRoZSBmb2xsb3dpbmcgdGhyZWUgdGhpbmdzIGFyZSBsaXZlLCB0aGVuIHRoZSB0YXJn
ZXQgb2YgdGhlCiAgICAgICAgICAgICAgICAgLy8gdHJhbnNpdGlvbiBpcyBhbHNvIGxpdmU6CiAg
ICAgICAgICAgICAgICAgLy8KQEAgLTEyMjQsMTMgKzEyNDIsMTcgQEAgdm9pZCBDb2RlQmxvY2s6
OnByb3BhZ2F0ZVRyYW5zaXRpb25zKGNvbgogI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQogfQog
Ci12b2lkIENvZGVCbG9jazo6ZGV0ZXJtaW5lTGl2ZW5lc3MoY29uc3QgQ29uY3VycmVudEpTTG9j
a2VyJiwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZSB2b2lkIENvZGVCbG9jazo6cHJv
cGFnYXRlVHJhbnNpdGlvbnMoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgQWJzdHJhY3RTbG90
VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBDb2RlQmxvY2s6OnByb3BhZ2F0ZVRyYW5zaXRpb25z
KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIFNsb3RWaXNpdG9yJik7CisKK3RlbXBsYXRlPHR5
cGVuYW1lIFZpc2l0b3I+Cit2b2lkIENvZGVCbG9jazo6ZGV0ZXJtaW5lTGl2ZW5lc3MoY29uc3Qg
Q29uY3VycmVudEpTTG9ja2VyJiwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBVTlVTRURfUEFS
QU0odmlzaXRvcik7CiAgICAgCiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAgVk0mIHZtID0gKm1f
dm07Ci0gICAgaWYgKHZtLmhlYXAuaXNNYXJrZWQodGhpcykpCisgICAgaWYgKHZpc2l0b3IuaXNN
YXJrZWQodGhpcykpCiAgICAgICAgIHJldHVybjsKICAgICAKICAgICAvLyBJbiByYXJlIGFuZCB3
ZWlyZCBjYXNlcywgdGhpcyBjb3VsZCBiZSBjYWxsZWQgb24gYSBiYXNlbGluZSBDb2RlQmxvY2su
IE9uZSB0aGF0IEkgZm91bmQgd2FzCkBAIC0xMjQ3LDcgKzEyNjksNyBAQCB2b2lkIENvZGVCbG9j
azo6ZGV0ZXJtaW5lTGl2ZW5lc3MoY29uc3QgCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGRmZ0NvbW1vbi0+d2Vha1JlZmVyZW5jZXMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgSlNDZWxs
KiByZWZlcmVuY2UgPSBkZmdDb21tb24tPndlYWtSZWZlcmVuY2VzW2ldLmdldCgpOwogICAgICAg
ICBBU1NFUlQoIWpzRHluYW1pY0Nhc3Q8Q29kZUJsb2NrKj4odm0sIHJlZmVyZW5jZSkpOwotICAg
ICAgICBpZiAoIXZtLmhlYXAuaXNNYXJrZWQocmVmZXJlbmNlKSkgeworICAgICAgICBpZiAoIXZp
c2l0b3IuaXNNYXJrZWQocmVmZXJlbmNlKSkgewogICAgICAgICAgICAgYWxsQXJlTGl2ZVNvRmFy
ID0gZmFsc2U7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtMTI1NSw3ICsxMjc3
LDcgQEAgdm9pZCBDb2RlQmxvY2s6OmRldGVybWluZUxpdmVuZXNzKGNvbnN0IAogICAgIGlmIChh
bGxBcmVMaXZlU29GYXIpIHsKICAgICAgICAgZm9yIChTdHJ1Y3R1cmVJRCBzdHJ1Y3R1cmVJRCA6
IGRmZ0NvbW1vbi0+d2Vha1N0cnVjdHVyZVJlZmVyZW5jZXMpIHsKICAgICAgICAgICAgIFN0cnVj
dHVyZSogc3RydWN0dXJlID0gdm0uZ2V0U3RydWN0dXJlKHN0cnVjdHVyZUlEKTsKLSAgICAgICAg
ICAgIGlmICghdm0uaGVhcC5pc01hcmtlZChzdHJ1Y3R1cmUpKSB7CisgICAgICAgICAgICBpZiAo
IXZpc2l0b3IuaXNNYXJrZWQoc3RydWN0dXJlKSkgewogICAgICAgICAgICAgICAgIGFsbEFyZUxp
dmVTb0ZhciA9IGZhbHNlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQpA
QCAtMTI3Myw2ICsxMjk1LDkgQEAgdm9pZCBDb2RlQmxvY2s6OmRldGVybWluZUxpdmVuZXNzKGNv
bnN0IAogI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQogfQogCit0ZW1wbGF0ZSB2b2lkIENvZGVC
bG9jazo6ZGV0ZXJtaW5lTGl2ZW5lc3MoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgQWJzdHJh
Y3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBDb2RlQmxvY2s6OmRldGVybWluZUxpdmVu
ZXNzKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIFNsb3RWaXNpdG9yJik7CisKIHZvaWQgQ29k
ZUJsb2NrOjpmaW5hbGl6ZUxMSW50SW5saW5lQ2FjaGVzKCkKIHsKICAgICBWTSYgdm0gPSAqbV92
bTsKQEAgLTE2MTYsNiArMTY0MSw3IEBAIHZvaWQgQ29kZUJsb2NrOjpmaW5hbGl6ZVVuY29uZGl0
aW9uYWxseSgKICAgICB1cGRhdGVBY3Rpdml0eSgpOwogCiAgICAgVk06OlNwYWNlQW5kU2V0Ojpz
ZXRGb3IoKnN1YnNwYWNlKCkpLnJlbW92ZSh0aGlzKTsKKyAgICBtX3Zpc2l0Q2hpbGRyZW5Ta2lw
cGVkRHVlVG9PbGRBZ2UgPSBmYWxzZTsKIH0KIAogdm9pZCBDb2RlQmxvY2s6OmRlc3Ryb3koSlND
ZWxsKiBjZWxsKQpAQCAtMTgwOCw3ICsxODM0LDggQEAgdm9pZCBDb2RlQmxvY2s6OnJlc2V0SklU
RGF0YSgpCiB9CiAjZW5kaWYKIAotdm9pZCBDb2RlQmxvY2s6OnZpc2l0T1NSRXhpdFRhcmdldHMo
Y29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0
ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBDb2RlQmxvY2s6OnZpc2l0T1NSRXhpdFRhcmdldHMo
Y29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICAvLyBX
ZSBzdHJvbmdseSB2aXNpdCBPU1IgZXhpdHMgdGFyZ2V0cyBiZWNhdXNlIHdlIGRvbid0IHdhbnQg
dG8gZGVhbCB3aXRoCiAgICAgLy8gdGhlIGNvbXBsZXhpdHkgb2YgZ2VuZXJhdGluZyBhbiBleGl0
IHRhcmdldCBDb2RlQmxvY2sgb24gZGVtYW5kIGFuZApAQCAtMTgyOCw3ICsxODU1LDggQEAgdm9p
ZCBDb2RlQmxvY2s6OnZpc2l0T1NSRXhpdFRhcmdldHMoY29ucwogI2VuZGlmCiB9CiAKLXZvaWQg
Q29kZUJsb2NrOjpzdHJvbmdseVZpc2l0U3Ryb25nUmVmZXJlbmNlcyhjb25zdCBDb25jdXJyZW50
SlNMb2NrZXImIGxvY2tlciwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBWaXNpdG9yPgordm9pZCBDb2RlQmxvY2s6OnN0cm9uZ2x5VmlzaXRTdHJvbmdSZWZlcmVuY2Vz
KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYgbG9ja2VyLCBWaXNpdG9yJiB2aXNpdG9yKQogewog
ICAgIFVOVVNFRF9QQVJBTShsb2NrZXIpOwogICAgIApAQCAtMTg2NCw3ICsxODkyLDggQEAgdm9p
ZCBDb2RlQmxvY2s6OnN0cm9uZ2x5VmlzaXRTdHJvbmdSZWZlcgogI2VuZGlmCiB9CiAKLXZvaWQg
Q29kZUJsb2NrOjpzdHJvbmdseVZpc2l0V2Vha1JlZmVyZW5jZXMoY29uc3QgQ29uY3VycmVudEpT
TG9ja2VyJiwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
Pgordm9pZCBDb2RlQmxvY2s6OnN0cm9uZ2x5VmlzaXRXZWFrUmVmZXJlbmNlcyhjb25zdCBDb25j
dXJyZW50SlNMb2NrZXImLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFVOVVNFRF9QQVJBTSh2
aXNpdG9yKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9j
ay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxv
Y2suaAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAwOC0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAwOC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
IENvcHlyaWdodCAoQykgMjAwOCBDYW1lcm9uIFp3YXJpY2ggPGN3endhcmljaEB1d2F0ZXJsb28u
Y2E+CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0yMDEsMTAgKzIwMSwxMCBAQCBwdWJsaWM6CiAgICAg
Ly8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyMzY3NwogICAgIENv
ZGVCbG9jayogYmFzZWxpbmVWZXJzaW9uKCk7CiAKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVO
OworCiAgICAgc3RhdGljIHNpemVfdCBlc3RpbWF0ZWRTaXplKEpTQ2VsbCosIFZNJik7Ci0gICAg
c3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwogICAgIHN0
YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7Ci0gICAgdm9pZCB2aXNpdENoaWxkcmVuKFNsb3RW
aXNpdG9yJik7CiAgICAgdm9pZCBmaW5hbGl6ZVVuY29uZGl0aW9uYWxseShWTSYpOwogCiAgICAg
dm9pZCBub3RpZnlMZXhpY2FsQmluZGluZ1VwZGF0ZSgpOwpAQCAtOTQzLDYgKzk0Myw4IEBAIHBy
aXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIENvZGVCbG9ja1NldDsKICAgICBmcmllbmQgY2xhc3Mg
RXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZTsKIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0
b3I+IEFMV0FZU19JTkxJTkUgdm9pZCB2aXNpdENoaWxkcmVuKFZpc2l0b3ImKTsKKwogICAgIEJ5
dGVjb2RlTGl2ZW5lc3NBbmFseXNpcyYgbGl2ZW5lc3NBbmFseXNpc1Nsb3coKTsKICAgICAKICAg
ICBDb2RlQmxvY2sqIHNwZWNpYWxPU1JFbnRyeUJsb2NrT3JOdWxsKCk7CkBAIC05NjMsMTYgKzk2
NSwxNiBAQCBwcml2YXRlOgogICAgICAgICBtX2NvbnN0YW50UmVnaXN0ZXJzW3JlZy50b0NvbnN0
YW50SW5kZXgoKV0uc2V0KCptX3ZtLCB0aGlzLCB2YWx1ZSk7CiAgICAgfQogCi0gICAgYm9vbCBz
aG91bGRWaXNpdFN0cm9uZ2x5KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYpOworICAgIGJvb2wg
c2hvdWxkVmlzaXRTdHJvbmdseShjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBBYnN0cmFjdFNs
b3RWaXNpdG9yJik7CiAgICAgYm9vbCBzaG91bGRKZXR0aXNvbkR1ZVRvV2Vha1JlZmVyZW5jZShW
TSYpOwotICAgIGJvb2wgc2hvdWxkSmV0dGlzb25EdWVUb09sZEFnZShjb25zdCBDb25jdXJyZW50
SlNMb2NrZXImKTsKKyAgICBib29sIHNob3VsZEpldHRpc29uRHVlVG9PbGRBZ2UoY29uc3QgQ29u
Y3VycmVudEpTTG9ja2VyJiwgQWJzdHJhY3RTbG90VmlzaXRvciYpOwogICAgIAotICAgIHZvaWQg
cHJvcGFnYXRlVHJhbnNpdGlvbnMoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgU2xvdFZpc2l0
b3ImKTsKLSAgICB2b2lkIGRldGVybWluZUxpdmVuZXNzKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tl
ciYsIFNsb3RWaXNpdG9yJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCBw
cm9wYWdhdGVUcmFuc2l0aW9ucyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBWaXNpdG9yJik7
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCBkZXRlcm1pbmVMaXZlbmVzcyhj
b25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBWaXNpdG9yJik7CiAgICAgICAgIAotICAgIHZvaWQg
c3Ryb25nbHlWaXNpdFN0cm9uZ1JlZmVyZW5jZXMoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwg
U2xvdFZpc2l0b3ImKTsKLSAgICB2b2lkIHN0cm9uZ2x5VmlzaXRXZWFrUmVmZXJlbmNlcyhjb25z
dCBDb25jdXJyZW50SlNMb2NrZXImLCBTbG90VmlzaXRvciYpOwotICAgIHZvaWQgdmlzaXRPU1JF
eGl0VGFyZ2V0cyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBTbG90VmlzaXRvciYpOworICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgc3Ryb25nbHlWaXNpdFN0cm9uZ1JlZmVy
ZW5jZXMoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgVmlzaXRvciYpOworICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgc3Ryb25nbHlWaXNpdFdlYWtSZWZlcmVuY2VzKGNvbnN0
IENvbmN1cnJlbnRKU0xvY2tlciYsIFZpc2l0b3ImKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPiB2b2lkIHZpc2l0T1NSRXhpdFRhcmdldHMoY29uc3QgQ29uY3VycmVudEpTTG9ja2Vy
JiwgVmlzaXRvciYpOwogCiAgICAgdW5zaWduZWQgbnVtYmVyT2ZOb25Bcmd1bWVudFZhbHVlUHJv
ZmlsZXMoKSB7IHJldHVybiBtX251bWJlck9mTm9uQXJndW1lbnRWYWx1ZVByb2ZpbGVzOyB9CiAg
ICAgdW5zaWduZWQgdG90YWxOdW1iZXJPZlZhbHVlUHJvZmlsZXMoKSB7IHJldHVybiBudW1iZXJP
ZkFyZ3VtZW50VmFsdWVQcm9maWxlcygpICsgbnVtYmVyT2ZOb25Bcmd1bWVudFZhbHVlUHJvZmls
ZXMoKTsgfQpAQCAtMTAxMSw2ICsxMDEzLDcgQEAgcHJpdmF0ZToKICAgICB1bnNpZ25lZCBtX2J5
dGVjb2RlQ29zdCB7IDAgfTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgbV9zY29wZVJlZ2lzdGVyOwog
ICAgIG11dGFibGUgQ29kZUJsb2NrSGFzaCBtX2hhc2g7CisgICAgYm9vbCBtX3Zpc2l0Q2hpbGRy
ZW5Ta2lwcGVkRHVlVG9PbGRBZ2UgeyBmYWxzZSB9OwogCiAgICAgV3JpdGVCYXJyaWVyPFVubGlu
a2VkQ29kZUJsb2NrPiBtX3VubGlua2VkQ29kZTsKICAgICBXcml0ZUJhcnJpZXI8U2NyaXB0RXhl
Y3V0YWJsZT4gbV9vd25lckV4ZWN1dGFibGU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvRGVsZXRlQnlJZFZhcmlhbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9EZWxldGVCeUlkVmFyaWFudC5jcHAJKHJldmlzaW9uIDI3Mjkw
MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9EZWxldGVCeUlkVmFyaWFudC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAy
MC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtODgsMTIgKzg4LDE2IEBAIGJvb2wgRGVsZXRlQnlJZFZhcmlhbnQ6
OndyaXRlc1N0cnVjdHVyZXMKICAgICByZXR1cm4gISFuZXdTdHJ1Y3R1cmUoKTsKIH0KIAotdm9p
ZCBEZWxldGVCeUlkVmFyaWFudDo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3Ip
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBEZWxldGVCeUlkVmFyaWFudDo6dmlz
aXRBZ2dyZWdhdGVJbXBsKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgbV9pZGVudGlmaWVyLnZp
c2l0QWdncmVnYXRlKHZpc2l0b3IpOwogfQogCi12b2lkIERlbGV0ZUJ5SWRWYXJpYW50OjptYXJr
SWZDaGVhcChTbG90VmlzaXRvciYgdmlzaXRvcikKK0RFRklORV9WSVNJVF9BR0dSRUdBVEUoRGVs
ZXRlQnlJZFZhcmlhbnQpOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBEZWxl
dGVCeUlkVmFyaWFudDo6bWFya0lmQ2hlYXAoVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBpZiAo
bV9vbGRTdHJ1Y3R1cmUpCiAgICAgICAgIG1fb2xkU3RydWN0dXJlLT5tYXJrSWZDaGVhcCh2aXNp
dG9yKTsKQEAgLTEwMSw2ICsxMDUsOSBAQCB2b2lkIERlbGV0ZUJ5SWRWYXJpYW50OjptYXJrSWZD
aGVhcChTbG90CiAgICAgICAgIG1fbmV3U3RydWN0dXJlLT5tYXJrSWZDaGVhcCh2aXNpdG9yKTsK
IH0KIAordGVtcGxhdGUgdm9pZCBEZWxldGVCeUlkVmFyaWFudDo6bWFya0lmQ2hlYXAoQWJzdHJh
Y3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBEZWxldGVCeUlkVmFyaWFudDo6bWFya0lm
Q2hlYXAoU2xvdFZpc2l0b3ImKTsKKwogdm9pZCBEZWxldGVCeUlkVmFyaWFudDo6ZHVtcChQcmlu
dFN0cmVhbSYgb3V0KSBjb25zdAogewogICAgIGR1bXBJbkNvbnRleHQob3V0LCBudWxscHRyKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9EZWxldGVCeUlkVmFyaWFudC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9EZWxldGVCeUlk
VmFyaWFudC5oCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvRGVsZXRlQnlJZFZhcmlhbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDIwLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02MSw4ICs2MSw4IEBAIHB1
YmxpYzoKIAogICAgIGJvb2wgYXR0ZW1wdFRvTWVyZ2UoY29uc3QgRGVsZXRlQnlJZFZhcmlhbnQm
IG90aGVyKTsKIAotICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImKTsKLSAgICB2
b2lkIG1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9BR0dSRUdB
VEU7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCBtYXJrSWZDaGVhcChWaXNp
dG9yJik7CiAgICAgYm9vbCBmaW5hbGl6ZShWTSYpOwogCiAgICAgdm9pZCBkdW1wKFByaW50U3Ry
ZWFtJikgY29uc3Q7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRGVsZXRl
QnlTdGF0dXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9EZWxldGVCeVN0YXR1cy5jcHAJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9EZWxldGVCeVN0YXR1cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMC0yMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjU0LDE4
ICsyNTQsMjUgQEAgQ2FjaGVhYmxlSWRlbnRpZmllciBEZWxldGVCeVN0YXR1czo6c2luZwogICAg
IHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQgRGVsZXRlQnlTdGF0dXM6OnZpc2l0QWdncmVnYXRl
KFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQg
RGVsZXRlQnlTdGF0dXM6OnZpc2l0QWdncmVnYXRlSW1wbChWaXNpdG9yJiB2aXNpdG9yKQogewog
ICAgIGZvciAoRGVsZXRlQnlJZFZhcmlhbnQmIHZhcmlhbnQgOiBtX3ZhcmlhbnRzKQogICAgICAg
ICB2YXJpYW50LnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOwogfQogCi12b2lkIERlbGV0ZUJ5U3Rh
dHVzOjptYXJrSWZDaGVhcChTbG90VmlzaXRvciYgdmlzaXRvcikKK0RFRklORV9WSVNJVF9BR0dS
RUdBVEUoRGVsZXRlQnlTdGF0dXMpOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9p
ZCBEZWxldGVCeVN0YXR1czo6bWFya0lmQ2hlYXAoVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBm
b3IgKERlbGV0ZUJ5SWRWYXJpYW50JiB2YXJpYW50IDogbV92YXJpYW50cykKICAgICAgICAgdmFy
aWFudC5tYXJrSWZDaGVhcCh2aXNpdG9yKTsKIH0KIAordGVtcGxhdGUgdm9pZCBEZWxldGVCeVN0
YXR1czo6bWFya0lmQ2hlYXAoQWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBE
ZWxldGVCeVN0YXR1czo6bWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImKTsKKwogYm9vbCBEZWxldGVC
eVN0YXR1czo6ZmluYWxpemUoVk0mIHZtKQogewogICAgIGZvciAoYXV0byYgdmFyaWFudCA6IG1f
dmFyaWFudHMpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9EZWxldGVC
eVN0YXR1cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9E
ZWxldGVCeVN0YXR1cy5oCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvRGVsZXRlQnlTdGF0dXMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIwLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC04MSw4ICs4MSw4IEBA
IHB1YmxpYzoKICAgICAvLyBBdHRlbXB0cyB0byByZWR1Y2UgdGhlIHNldCBvZiB2YXJpYW50cyB0
byBmaXQgdGhlIGdpdmVuIHN0cnVjdHVyZSBzZXQuIFRoaXMgbWF5IGJlIGFwcHJveGltYXRlLgog
ICAgIHZvaWQgZmlsdGVyKGNvbnN0IFN0cnVjdHVyZVNldCYpOwogCi0gICAgdm9pZCB2aXNpdEFn
Z3JlZ2F0ZShTbG90VmlzaXRvciYpOwotICAgIHZvaWQgbWFya0lmQ2hlYXAoU2xvdFZpc2l0b3Im
KTsKKyAgICBERUNMQVJFX1ZJU0lUX0FHR1JFR0FURTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPiB2b2lkIG1hcmtJZkNoZWFwKFZpc2l0b3ImKTsKICAgICBib29sIGZpbmFsaXplKFZN
Jik7CiAKICAgICBib29sIGFwcGVuZFZhcmlhbnQoY29uc3QgRGVsZXRlQnlJZFZhcmlhbnQmKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9EaXJlY3RFdmFsQ29kZUNhY2hl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRGlyZWN0
RXZhbENvZGVDYWNoZS5jcHAJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9EaXJlY3RFdmFsQ29kZUNhY2hlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00NSw3
ICs0NSw4IEBAIHZvaWQgRGlyZWN0RXZhbENvZGVDYWNoZTo6Y2xlYXIoKQogICAgIG1fY2FjaGVN
YXAuY2xlYXIoKTsKIH0KIAotdm9pZCBEaXJlY3RFdmFsQ29kZUNhY2hlOjp2aXNpdEFnZ3JlZ2F0
ZShTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lk
IERpcmVjdEV2YWxDb2RlQ2FjaGU6OnZpc2l0QWdncmVnYXRlSW1wbChWaXNpdG9yJiB2aXNpdG9y
KQogewogICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fbG9jayk7CiAgICAgRXZhbENhY2hlTWFwOjpp
dGVyYXRvciBlbmQgPSBtX2NhY2hlTWFwLmVuZCgpOwpAQCAtNTMsNSArNTQsNiBAQCB2b2lkIERp
cmVjdEV2YWxDb2RlQ2FjaGU6OnZpc2l0QWdncmVnYXRlCiAgICAgICAgIHZpc2l0b3IuYXBwZW5k
KHB0ci0+dmFsdWUpOwogfQogCi19IC8vIG5hbWVzcGFjZSBKU0MKK0RFRklORV9WSVNJVF9BR0dS
RUdBVEUoRGlyZWN0RXZhbENvZGVDYWNoZSk7CiAKK30gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0RpcmVjdEV2YWxDb2RlQ2FjaGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRGlyZWN0RXZhbENvZGVD
YWNoZS5oCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvRGlyZWN0RXZhbENvZGVDYWNoZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAwOC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtOTcsNyArOTcsNyBA
QCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVy
biBtX2NhY2hlTWFwLmlzRW1wdHkoKTsgfQogCi0gICAgICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUo
U2xvdFZpc2l0b3ImKTsKKyAgICAgICAgREVDTEFSRV9WSVNJVF9BR0dSRUdBVEU7CiAKICAgICAg
ICAgdm9pZCBjbGVhcigpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
RXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UuY3BwCShyZXZpc2lv
biAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhlY3V0YWJsZVRv
Q29kZUJsb2NrRWRnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxOC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTMsNyArNTMsOCBAQCB2b2lkIEV4ZWN1
dGFibGVUb0NvZGVCbG9ja0VkZ2U6OmZpbmlzaENyCiAgICAgQVNTRVJUKCFpc0FjdGl2ZSgpKTsK
IH0KIAotdm9pZCBFeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlOjp2aXNpdENoaWxkcmVuKEpTQ2Vs
bCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
Pgordm9pZCBFeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlOjp2aXNpdENoaWxkcmVuSW1wbChKU0Nl
bGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgVk0mIHZtID0gdmlzaXRvci52bSgp
OwogICAgIEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UqIGVkZ2UgPSBqc0Nhc3Q8RXhlY3V0YWJs
ZVRvQ29kZUJsb2NrRWRnZSo+KGNlbGwpOwpAQCAtNjEsNyArNjIsNyBAQCB2b2lkIEV4ZWN1dGFi
bGVUb0NvZGVCbG9ja0VkZ2U6OnZpc2l0Q2hpCiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbihjZWxs
LCB2aXNpdG9yKTsKIAogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gZWRnZS0+bV9jb2RlQmxv
Y2suZ2V0KCk7Ci0gICAgCisKICAgICAvLyBJdCdzIHBvc3NpYmxlIGZvciBzb21lb25lIHRvIGhv
bGQgYSBwb2ludGVyIHRvIHRoZSBlZGdlIGFmdGVyIHRoZSBlZGdlIGhhcyBjbGVhcmVkIGl0cyB3
ZWFrCiAgICAgLy8gcmVmZXJlbmNlIHRvIHRoZSBjb2RlQmxvY2suIEluIGEgY29uc2VydmF0aXZl
IEdDIGxpa2Ugb3VycywgdGhhdCBjb3VsZCBoYXBwZW4gYXQgcmFuZG9tIGZvcgogICAgIC8vIG5v
IGdvb2QgcmVhc29uIGFuZCBpdCdzIFRvdGFsbHkgT0sgKFRNKS4gU2VlIGZpbmFsaXplVW5jb25k
aXRpb25hbGx5KCkgZm9yIHdoZXJlIHdlIGNsZWFyCkBAIC03NSwxMSArNzYsMTEgQEAgdm9pZCBF
eGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlOjp2aXNpdENoaQogICAgIH0KICAgICAKICAgICBDb25j
dXJyZW50SlNMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrKTsKLSAgICAKLSAgICBpZiAo
Y29kZUJsb2NrLT5zaG91bGRWaXNpdFN0cm9uZ2x5KGxvY2tlcikpCisKKyAgICBpZiAoY29kZUJs
b2NrLT5zaG91bGRWaXNpdFN0cm9uZ2x5KGxvY2tlciwgdmlzaXRvcikpCiAgICAgICAgIHZpc2l0
b3IuYXBwZW5kVW5iYXJyaWVyZWQoY29kZUJsb2NrKTsKICAgICAKLSAgICBpZiAoIXZtLmhlYXAu
aXNNYXJrZWQoY29kZUJsb2NrKSkKKyAgICBpZiAoIXZpc2l0b3IuaXNNYXJrZWQoY29kZUJsb2Nr
KSkKICAgICAgICAgdm0uZXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZXNXaXRoRmluYWxpemVycy5h
ZGQoZWRnZSk7CiAgICAgCiAgICAgaWYgKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChjb2RlQmxv
Y2stPmppdFR5cGUoKSkpIHsKQEAgLTExNyw3ICsxMTgsMTAgQEAgdm9pZCBFeGVjdXRhYmxlVG9D
b2RlQmxvY2tFZGdlOjp2aXNpdENoaQogICAgIGVkZ2UtPnJ1bkNvbnN0cmFpbnQobG9ja2VyLCB2
bSwgdmlzaXRvcik7CiB9CiAKLXZvaWQgRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZTo6dmlzaXRP
dXRwdXRDb25zdHJhaW50cyhKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorREVG
SU5FX1ZJU0lUX0NISUxEUkVOKEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UpOworCit0ZW1wbGF0
ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBFeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlOjp2aXNp
dE91dHB1dENvbnN0cmFpbnRzSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7
CiAgICAgVk0mIHZtID0gdmlzaXRvci52bSgpOwogICAgIEV4ZWN1dGFibGVUb0NvZGVCbG9ja0Vk
Z2UqIGVkZ2UgPSBqc0Nhc3Q8RXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZSo+KGNlbGwpOwpAQCAt
MTI1LDYgKzEyOSw4IEBAIHZvaWQgRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZTo6dmlzaXRPdXQK
ICAgICBlZGdlLT5ydW5Db25zdHJhaW50KE5vTG9ja2luZ05lY2Vzc2FyeSwgdm0sIHZpc2l0b3Ip
OwogfQogCitERUZJTkVfVklTSVRfT1VUUFVUX0NPTlNUUkFJTlRTKEV4ZWN1dGFibGVUb0NvZGVC
bG9ja0VkZ2UpOworCiB2b2lkIEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2U6OmZpbmFsaXplVW5j
b25kaXRpb25hbGx5KFZNJiB2bSkKIHsKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IG1fY29k
ZUJsb2NrLmdldCgpOwpAQCAtMTg2LDE2ICsxOTIsMjEgQEAgRXhlY3V0YWJsZVRvQ29kZUJsb2Nr
RWRnZTo6RXhlY3V0YWJsZVRvQwogewogfQogCi12b2lkIEV4ZWN1dGFibGVUb0NvZGVCbG9ja0Vk
Z2U6OnJ1bkNvbnN0cmFpbnQoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiBsb2NrZXIsIFZNJiB2
bSwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9p
ZCBFeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlOjpydW5Db25zdHJhaW50KGNvbnN0IENvbmN1cnJl
bnRKU0xvY2tlciYgbG9ja2VyLCBWTSYgdm0sIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgQ29k
ZUJsb2NrKiBjb2RlQmxvY2sgPSBtX2NvZGVCbG9jay5nZXQoKTsKICAgICAKICAgICBjb2RlQmxv
Y2stPnByb3BhZ2F0ZVRyYW5zaXRpb25zKGxvY2tlciwgdmlzaXRvcik7CiAgICAgY29kZUJsb2Nr
LT5kZXRlcm1pbmVMaXZlbmVzcyhsb2NrZXIsIHZpc2l0b3IpOwotICAgIAotICAgIGlmICh2bS5o
ZWFwLmlzTWFya2VkKGNvZGVCbG9jaykpCisKKyAgICBpZiAodmlzaXRvci5pc01hcmtlZChjb2Rl
QmxvY2spKQogICAgICAgICB2bS5leGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlc1dpdGhDb25zdHJh
aW50cy5yZW1vdmUodGhpcyk7CiB9CiAKK3RlbXBsYXRlIHZvaWQgRXhlY3V0YWJsZVRvQ29kZUJs
b2NrRWRnZTo6cnVuQ29uc3RyYWludChjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBWTSYsIEFi
c3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgRXhlY3V0YWJsZVRvQ29kZUJsb2Nr
RWRnZTo6cnVuQ29uc3RyYWludChjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBWTSYsIFNsb3RW
aXNpdG9yJik7CisKKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9FeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGFibGVUb0NvZGVCbG9ja0Vk
Z2UuaAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0V4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTUzLDkgKzUz
LDkgQEAgcHVibGljOgogICAgIERFQ0xBUkVfSU5GTzsKIAogICAgIENvZGVCbG9jayogY29kZUJs
b2NrKCkgY29uc3QgeyByZXR1cm4gbV9jb2RlQmxvY2suZ2V0KCk7IH0KLSAgICAKLSAgICBzdGF0
aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7Ci0gICAgc3RhdGlj
IHZvaWQgdmlzaXRPdXRwdXRDb25zdHJhaW50cyhKU0NlbGwqLCBTbG90VmlzaXRvciYpOworCisg
ICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKKyAgICBERUNMQVJFX1ZJU0lUX09VVFBVVF9DT05T
VFJBSU5UUzsKICAgICB2b2lkIGZpbmFsaXplVW5jb25kaXRpb25hbGx5KFZNJik7CiAgICAgCiAg
ICAgc3RhdGljIENvZGVCbG9jayogdW53cmFwKEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UqIGVk
Z2UpCkBAIC04MSw5ICs4MSw5IEBAIHByaXZhdGU6CiAgICAgdm9pZCBhY3RpdmF0ZSgpOwogICAg
IHZvaWQgZGVhY3RpdmF0ZSgpOwogICAgIGJvb2wgaXNBY3RpdmUoKSBjb25zdDsKLSAgICAKLSAg
ICB2b2lkIHJ1bkNvbnN0cmFpbnQoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgVk0mLCBTbG90
VmlzaXRvciYpOwotICAgIAorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCBy
dW5Db25zdHJhaW50KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIFZNJiwgVmlzaXRvciYpOwor
CiAgICAgV3JpdGVCYXJyaWVyPENvZGVCbG9jaz4gbV9jb2RlQmxvY2s7CiB9OwogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFZhcmlhbnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkVmFyaWFudC5jcHAJ
KHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRC
eUlkVmFyaWFudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDE0LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE0LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xNTYsMTYgKzE1NiwyMyBAQCBib29s
IEdldEJ5SWRWYXJpYW50OjphdHRlbXB0VG9NZXJnZShjb25zCiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKLXZvaWQgR2V0QnlJZFZhcmlhbnQ6OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJiB2aXNp
dG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgR2V0QnlJZFZhcmlhbnQ6OnZp
c2l0QWdncmVnYXRlSW1wbChWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIG1faWRlbnRpZmllci52
aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKIH0KIAotdm9pZCBHZXRCeUlkVmFyaWFudDo6bWFya0lm
Q2hlYXAoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCitERUZJTkVfVklTSVRfQUdHUkVHQVRFKEdldEJ5
SWRWYXJpYW50KTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgR2V0QnlJZFZh
cmlhbnQ6Om1hcmtJZkNoZWFwKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgbV9zdHJ1Y3R1cmVT
ZXQubWFya0lmQ2hlYXAodmlzaXRvcik7CiB9CiAKK3RlbXBsYXRlIHZvaWQgR2V0QnlJZFZhcmlh
bnQ6Om1hcmtJZkNoZWFwKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgR2V0
QnlJZFZhcmlhbnQ6Om1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJik7CisKIGJvb2wgR2V0QnlJZFZh
cmlhbnQ6OmZpbmFsaXplKFZNJiB2bSkKIHsKICAgICBpZiAoIW1fc3RydWN0dXJlU2V0LmlzU3Rp
bGxBbGl2ZSh2bSkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJ
ZFZhcmlhbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
R2V0QnlJZFZhcmlhbnQuaAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0dldEJ5SWRWYXJpYW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03Nyw4ICs3
Nyw4IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgYXR0ZW1wdFRvTWVyZ2UoY29uc3QgR2V0QnlJZFZh
cmlhbnQmIG90aGVyKTsKICAgICAKLSAgICB2b2lkIHZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9y
Jik7Ci0gICAgdm9pZCBtYXJrSWZDaGVhcChTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklT
SVRfQUdHUkVHQVRFOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgbWFya0lm
Q2hlYXAoVmlzaXRvciYpOwogICAgIGJvb2wgZmluYWxpemUoVk0mKTsKICAgICAKICAgICB2b2lk
IGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9HZXRCeVN0YXR1cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0dldEJ5U3RhdHVzLmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5U3RhdHVzLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTUzMCw3ICs1MzAsOCBAQCB2b2lkIEdldEJ5U3RhdHVzOjpmaWx0ZXIoY29uc3QgU3RydWN0
dXJlCiAgICAgICAgIG1fc3RhdGUgPSBOb0luZm9ybWF0aW9uOwogfQogCi12b2lkIEdldEJ5U3Rh
dHVzOjp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVu
YW1lIFZpc2l0b3I+Cit2b2lkIEdldEJ5U3RhdHVzOjp2aXNpdEFnZ3JlZ2F0ZUltcGwoVmlzaXRv
ciYgdmlzaXRvcikKIHsKICAgICBpZiAoaXNNb2R1bGVOYW1lc3BhY2UoKSkKICAgICAgICAgbV9t
b2R1bGVOYW1lc3BhY2VEYXRhLT5tX2lkZW50aWZpZXIudmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7
CkBAIC01MzgsMTIgKzUzOSwxOCBAQCB2b2lkIEdldEJ5U3RhdHVzOjp2aXNpdEFnZ3JlZ2F0ZShT
bG90VmlzCiAgICAgICAgIHZhcmlhbnQudmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7CiB9CiAKLXZv
aWQgR2V0QnlTdGF0dXM6Om1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorREVGSU5F
X1ZJU0lUX0FHR1JFR0FURShHZXRCeVN0YXR1cyk7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0
b3I+Cit2b2lkIEdldEJ5U3RhdHVzOjptYXJrSWZDaGVhcChWaXNpdG9yJiB2aXNpdG9yKQogewog
ICAgIGZvciAoR2V0QnlJZFZhcmlhbnQmIHZhcmlhbnQgOiBtX3ZhcmlhbnRzKQogICAgICAgICB2
YXJpYW50Lm1hcmtJZkNoZWFwKHZpc2l0b3IpOwogfQogCit0ZW1wbGF0ZSB2b2lkIEdldEJ5U3Rh
dHVzOjptYXJrSWZDaGVhcChBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEdl
dEJ5U3RhdHVzOjptYXJrSWZDaGVhcChTbG90VmlzaXRvciYpOworCiBib29sIEdldEJ5U3RhdHVz
OjpmaW5hbGl6ZShWTSYgdm0pCiB7CiAgICAgZm9yIChHZXRCeUlkVmFyaWFudCYgdmFyaWFudCA6
IG1fdmFyaWFudHMpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRC
eVN0YXR1cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9H
ZXRCeVN0YXR1cy5oCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvR2V0QnlTdGF0dXMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTExOCw4ICsxMTgsOCBA
QCBwdWJsaWM6CiAgICAgSlNNb2R1bGVFbnZpcm9ubWVudCogbW9kdWxlRW52aXJvbm1lbnQoKSBj
b25zdCB7IHJldHVybiBtX21vZHVsZU5hbWVzcGFjZURhdGEtPm1fbW9kdWxlRW52aXJvbm1lbnQ7
IH0KICAgICBTY29wZU9mZnNldCBzY29wZU9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fbW9kdWxl
TmFtZXNwYWNlRGF0YS0+bV9zY29wZU9mZnNldDsgfQogICAgIAotICAgIHZvaWQgdmlzaXRBZ2dy
ZWdhdGUoU2xvdFZpc2l0b3ImKTsKLSAgICB2b2lkIG1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJik7
CisgICAgREVDTEFSRV9WSVNJVF9BR0dSRUdBVEU7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlz
aXRvcj4gdm9pZCBtYXJrSWZDaGVhcChWaXNpdG9yJik7CiAgICAgYm9vbCBmaW5hbGl6ZShWTSYp
OyAvLyBSZXR1cm4gdHJ1ZSBpZiB0aGlzIGdldHMgdG8gbGl2ZS4KIAogICAgIGJvb2wgYXBwZW5k
VmFyaWFudChjb25zdCBHZXRCeUlkVmFyaWFudCYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0luQnlJZFN0YXR1cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0luQnlJZFN0YXR1cy5jcHAJKHJldmlzaW9uIDI3MjkwMikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbkJ5SWRTdGF0dXMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxOCBZdXN1a2Ug
U3V6dWtpIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+LgotICogQ29weXJpZ2h0IChDKSAyMDE4IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOC0yMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMjUxLDEyICsyNTEsMTYgQEAgdm9pZCBJbkJ5SWRTdGF0dXM6OmZpbHRlcihj
b25zdCBTdHJ1Y3R1cgogICAgICAgICBtX3N0YXRlID0gTm9JbmZvcm1hdGlvbjsKIH0KIAotdm9p
ZCBJbkJ5SWRTdGF0dXM6Om1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxh
dGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSW5CeUlkU3RhdHVzOjptYXJrSWZDaGVhcChWaXNp
dG9yJiB2aXNpdG9yKQogewogICAgIGZvciAoSW5CeUlkVmFyaWFudCYgdmFyaWFudCA6IG1fdmFy
aWFudHMpCiAgICAgICAgIHZhcmlhbnQubWFya0lmQ2hlYXAodmlzaXRvcik7CiB9CiAKK3RlbXBs
YXRlIHZvaWQgSW5CeUlkU3RhdHVzOjptYXJrSWZDaGVhcChBYnN0cmFjdFNsb3RWaXNpdG9yJik7
Cit0ZW1wbGF0ZSB2b2lkIEluQnlJZFN0YXR1czo6bWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImKTsK
KwogYm9vbCBJbkJ5SWRTdGF0dXM6OmZpbmFsaXplKFZNJiB2bSkKIHsKICAgICBmb3IgKEluQnlJ
ZFZhcmlhbnQmIHZhcmlhbnQgOiBtX3ZhcmlhbnRzKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvSW5CeUlkU3RhdHVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0luQnlJZFN0YXR1cy5oCShyZXZpc2lvbiAyNzI5MDIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5CeUlkU3RhdHVzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDE4IFl1c3VrZSBTdXp1
a2kgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4uCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0xMDYsNyArMTA2LDcgQEAgcHVibGljOgogICAgIC8vIEF0dGVtcHRzIHRvIHJlZHVj
ZSB0aGUgc2V0IG9mIHZhcmlhbnRzIHRvIGZpdCB0aGUgZ2l2ZW4gc3RydWN0dXJlIHNldC4gVGhp
cyBtYXkgYmUgYXBwcm94aW1hdGUuCiAgICAgdm9pZCBmaWx0ZXIoY29uc3QgU3RydWN0dXJlU2V0
Jik7CiAgICAgCi0gICAgdm9pZCBtYXJrSWZDaGVhcChTbG90VmlzaXRvciYpOworICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgbWFya0lmQ2hlYXAoVmlzaXRvciYpOwogICAgIGJv
b2wgZmluYWxpemUoVk0mKTsKIAogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luQnlJZFZhcmlhbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbkJ5SWRWYXJpYW50
LmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0luQnlJZFZhcmlhbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAq
IENvcHlyaWdodCAoQykgMjAxOCBZdXN1a2UgU3V6dWtpIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+
LgotICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxOC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjQsMTEgKzY0LDE1IEBAIGJv
b2wgSW5CeUlkVmFyaWFudDo6YXR0ZW1wdFRvTWVyZ2UoY29uc3QKICAgICByZXR1cm4gdHJ1ZTsK
IH0KIAotdm9pZCBJbkJ5SWRWYXJpYW50OjptYXJrSWZDaGVhcChTbG90VmlzaXRvciYgdmlzaXRv
cikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEluQnlJZFZhcmlhbnQ6Om1hcmtJ
ZkNoZWFwKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgbV9zdHJ1Y3R1cmVTZXQubWFya0lmQ2hl
YXAodmlzaXRvcik7CiB9CiAKK3RlbXBsYXRlIHZvaWQgSW5CeUlkVmFyaWFudDo6bWFya0lmQ2hl
YXAoQWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBJbkJ5SWRWYXJpYW50Ojpt
YXJrSWZDaGVhcChTbG90VmlzaXRvciYpOworCiBib29sIEluQnlJZFZhcmlhbnQ6OmZpbmFsaXpl
KFZNJiB2bSkKIHsKICAgICBpZiAoIW1fc3RydWN0dXJlU2V0LmlzU3RpbGxBbGl2ZSh2bSkpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5CeUlkVmFyaWFudC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbkJ5SWRWYXJpYW50LmgJ
KHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbkJ5
SWRWYXJpYW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogQ29weXJp
Z2h0IChDKSAyMDE4IFl1c3VrZSBTdXp1a2kgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4uCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE4LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01Nyw3ICs1Nyw3IEBAIHB1YmxpYzoKIAog
ICAgIGJvb2wgYXR0ZW1wdFRvTWVyZ2UoY29uc3QgSW5CeUlkVmFyaWFudCYgb3RoZXIpOwogICAg
IAotICAgIHZvaWQgbWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImKTsKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBWaXNpdG9yPiB2b2lkIG1hcmtJZkNoZWFwKFZpc2l0b3ImKTsKICAgICBib29sIGZpbmFs
aXplKFZNJik7CiAKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnRlcm5hbEZ1bmN0aW9uQWxsb2NhdGlvblBy
b2ZpbGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW50
ZXJuYWxGdW5jdGlvbkFsbG9jYXRpb25Qcm9maWxlLmgJKHJldmlzaW9uIDI3MjkwMikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnRlcm5hbEZ1bmN0aW9uQWxsb2NhdGlvblBy
b2ZpbGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM5LDcgKzM5LDcgQEAgcHVibGljOgogICAgIFN0
cnVjdHVyZSogY3JlYXRlQWxsb2NhdGlvblN0cnVjdHVyZUZyb21CYXNlKFZNJiwgSlNHbG9iYWxP
YmplY3QqLCBKU0NlbGwqIG93bmVyLCBKU09iamVjdCogcHJvdG90eXBlLCBTdHJ1Y3R1cmUqIGJh
c2UpOwogCiAgICAgdm9pZCBjbGVhcigpIHsgbV9zdHJ1Y3R1cmUuY2xlYXIoKTsgfQotICAgIHZv
aWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsgdmlzaXRvci5hcHBlbmQo
bV9zdHJ1Y3R1cmUpOyB9CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCB2aXNp
dEFnZ3JlZ2F0ZShWaXNpdG9yJiB2aXNpdG9yKSB7IHZpc2l0b3IuYXBwZW5kKG1fc3RydWN0dXJl
KTsgfQogCiBwcml2YXRlOgogICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1fc3RydWN0dXJl
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09iamVjdEFsbG9jYXRpb25Q
cm9maWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09i
amVjdEFsbG9jYXRpb25Qcm9maWxlLmgJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9PYmplY3RBbGxvY2F0aW9uUHJvZmlsZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE3IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtNjQsNyArNjQsOCBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIEFTU0VSVChpc051bGwo
KSk7CiAgICAgfQogCi0gICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYgdmlzaXRv
cikKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgorICAgIHZvaWQgdmlzaXRBZ2dyZWdh
dGUoVmlzaXRvciYgdmlzaXRvcikKICAgICB7CiAgICAgICAgIHZpc2l0b3IuYXBwZW5kKG1fc3Ry
dWN0dXJlKTsKICAgICB9CkBAIC0xMTAsNyArMTExLDggQEAgcHVibGljOgogICAgICAgICBBU1NF
UlQoaXNOdWxsKCkpOwogICAgIH0KIAotICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0
b3ImIHZpc2l0b3IpCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KKyAgICB2b2lkIHZp
c2l0QWdncmVnYXRlKFZpc2l0b3ImIHZpc2l0b3IpCiAgICAgewogICAgICAgICBCYXNlOjp2aXNp
dEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKICAgICAgICAgdmlzaXRvci5hcHBlbmQobV9wcm90b3R5cGUp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1v
cnBoaWNBY2Nlc3MuY3BwCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNC0yMDIwIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzU4
LDcgKzM1OCw4IEBAIGJvb2wgUG9seW1vcnBoaWNBY2Nlc3M6OnZpc2l0V2VhayhWTSYgdm0KICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBQb2x5bW9ycGhpY0FjY2Vzczo6cHJvcGFnYXRlVHJh
bnNpdGlvbnMoU2xvdFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0Cit0ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPgorYm9vbCBQb2x5bW9ycGhpY0FjY2Vzczo6cHJvcGFnYXRlVHJhbnNpdGlvbnMoVmlz
aXRvciYgdmlzaXRvcikgY29uc3QKIHsKICAgICBib29sIHJlc3VsdCA9IHRydWU7CiAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemUoKTsgKytpKQpAQCAtMzY2LDEyICszNjcsMTggQEAg
Ym9vbCBQb2x5bW9ycGhpY0FjY2Vzczo6cHJvcGFnYXRlVHJhbnNpdAogICAgIHJldHVybiByZXN1
bHQ7CiB9CiAKLXZvaWQgUG9seW1vcnBoaWNBY2Nlc3M6OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNp
dG9yJiB2aXNpdG9yKQordGVtcGxhdGUgYm9vbCBQb2x5bW9ycGhpY0FjY2Vzczo6cHJvcGFnYXRl
VHJhbnNpdGlvbnMoQWJzdHJhY3RTbG90VmlzaXRvciYpIGNvbnN0OwordGVtcGxhdGUgYm9vbCBQ
b2x5bW9ycGhpY0FjY2Vzczo6cHJvcGFnYXRlVHJhbnNpdGlvbnMoU2xvdFZpc2l0b3ImKSBjb25z
dDsKKwordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgUG9seW1vcnBoaWNBY2Nlc3M6
OnZpc2l0QWdncmVnYXRlSW1wbChWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBzaXplKCk7ICsraSkKICAgICAgICAgYXQoaSkudmlzaXRBZ2dyZWdhdGUo
dmlzaXRvcik7CiB9CiAKK0RFRklORV9WSVNJVF9BR0dSRUdBVEUoUG9seW1vcnBoaWNBY2Nlc3Mp
OworCiB2b2lkIFBvbHltb3JwaGljQWNjZXNzOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0
CiB7CiAgICAgb3V0LnByaW50KFJhd1BvaW50ZXIodGhpcyksICI6WyIpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmgJKHJl
dmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9y
cGhpY0FjY2Vzcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxNC0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTUyLDE0ICsxNTIsMTQgQEAgcHVibGlj
OgogICAgIGNvbnN0IEFjY2Vzc0Nhc2UmIGF0KHVuc2lnbmVkIGkpIGNvbnN0IHsgcmV0dXJuICpt
X2xpc3RbaV07IH0KICAgICBjb25zdCBBY2Nlc3NDYXNlJiBvcGVyYXRvcltdKHVuc2lnbmVkIGkp
IGNvbnN0IHsgcmV0dXJuICptX2xpc3RbaV07IH0KIAotICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUo
U2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0FHR1JFR0FURTsKIAogICAgIC8vIElm
IHRoaXMgcmV0dXJucyBmYWxzZSB0aGVuIHdlIGFyZSByZXF1ZXN0aW5nIGEgcmVzZXQgb2YgdGhl
IG93bmluZyBTdHJ1Y3R1cmVTdHViSW5mby4KICAgICBib29sIHZpc2l0V2VhayhWTSYpIGNvbnN0
OwogICAgIAogICAgIC8vIFRoaXMgcmV0dXJucyB0cnVlIGlmIGl0IGhhcyBtYXJrZWQgZXZlcnl0
aGluZyBpdCB3aWxsIGV2ZXIgbWFya2VkLiBUaGlzIGNhbiBiZSB1c2VkIGFzIGFuCiAgICAgLy8g
b3B0aW1pemF0aW9uIHRvIHRoZW4gYXZvaWQgY2FsbGluZyB0aGlzIG1ldGhvZCBhZ2FpbiBkdXJp
bmcgdGhlIGZpeHBvaW50LgotICAgIGJvb2wgcHJvcGFnYXRlVHJhbnNpdGlvbnMoU2xvdFZpc2l0
b3ImKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiBib29sIHByb3BhZ2F0
ZVRyYW5zaXRpb25zKFZpc2l0b3ImKSBjb25zdDsKIAogICAgIHZvaWQgYWJvdXRUb0RpZSgpOwog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0
dXMuY3BwCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvUHV0QnlJZFN0YXR1cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zOTYsMTIgKzM5NiwxNiBA
QCBQdXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OnNsb3dWZXJzaW9uCiAgICAgcmV0dXJuIFB1
dEJ5SWRTdGF0dXMobWFrZXNDYWxscygpID8gTWFrZXNDYWxscyA6IFRha2VzU2xvd1BhdGgpOwog
fQogCi12b2lkIFB1dEJ5SWRTdGF0dXM6Om1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJiB2aXNpdG9y
KQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgUHV0QnlJZFN0YXR1czo6bWFya0lm
Q2hlYXAoVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBmb3IgKFB1dEJ5SWRWYXJpYW50JiB2YXJp
YW50IDogbV92YXJpYW50cykKICAgICAgICAgdmFyaWFudC5tYXJrSWZDaGVhcCh2aXNpdG9yKTsK
IH0KIAordGVtcGxhdGUgdm9pZCBQdXRCeUlkU3RhdHVzOjptYXJrSWZDaGVhcChBYnN0cmFjdFNs
b3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIFB1dEJ5SWRTdGF0dXM6Om1hcmtJZkNoZWFwKFNs
b3RWaXNpdG9yJik7CisKIGJvb2wgUHV0QnlJZFN0YXR1czo6ZmluYWxpemUoVk0mIHZtKQogewog
ICAgIGZvciAoUHV0QnlJZFZhcmlhbnQmIHZhcmlhbnQgOiBtX3ZhcmlhbnRzKSB7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmgJKHJldmlz
aW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3Rh
dHVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDEyLTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEyLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMTcsNyArMTE3LDcgQEAgcHVibGljOgogICAgIGNv
bnN0IFB1dEJ5SWRWYXJpYW50JiBhdChzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fdmFy
aWFudHNbaW5kZXhdOyB9CiAgICAgY29uc3QgUHV0QnlJZFZhcmlhbnQmIG9wZXJhdG9yW10oc2l6
ZV90IGluZGV4KSBjb25zdCB7IHJldHVybiBhdChpbmRleCk7IH0KICAgICAKLSAgICB2b2lkIG1h
cmtJZkNoZWFwKFNsb3RWaXNpdG9yJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4g
dm9pZCBtYXJrSWZDaGVhcChWaXNpdG9yJik7CiAgICAgYm9vbCBmaW5hbGl6ZShWTSYpOwogICAg
IAogICAgIHZvaWQgbWVyZ2UoY29uc3QgUHV0QnlJZFN0YXR1cyYpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuY3BwCShyZXZpc2lv
biAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlh
bnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxNC0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYyLDEzICsyNjIsMTcgQEAgYm9vbCBQdXRCeUlk
VmFyaWFudDo6YXR0ZW1wdFRvTWVyZ2VUcmFucwogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lk
IFB1dEJ5SWRWYXJpYW50OjptYXJrSWZDaGVhcChTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBs
YXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFB1dEJ5SWRWYXJpYW50OjptYXJrSWZDaGVhcChW
aXNpdG9yJiB2aXNpdG9yKQogewogICAgIG1fb2xkU3RydWN0dXJlLm1hcmtJZkNoZWFwKHZpc2l0
b3IpOwogICAgIGlmIChtX25ld1N0cnVjdHVyZSkKICAgICAgICAgbV9uZXdTdHJ1Y3R1cmUtPm1h
cmtJZkNoZWFwKHZpc2l0b3IpOwogfQogCit0ZW1wbGF0ZSB2b2lkIFB1dEJ5SWRWYXJpYW50Ojpt
YXJrSWZDaGVhcChBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIFB1dEJ5SWRW
YXJpYW50OjptYXJrSWZDaGVhcChTbG90VmlzaXRvciYpOworCiBib29sIFB1dEJ5SWRWYXJpYW50
OjpmaW5hbGl6ZShWTSYgdm0pCiB7CiAgICAgaWYgKCFtX29sZFN0cnVjdHVyZS5pc1N0aWxsQWxp
dmUodm0pKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJp
YW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5
SWRWYXJpYW50LmgJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9QdXRCeUlkVmFyaWFudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNC0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTMyLDcgKzEzMiw3
IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgYXR0ZW1wdFRvTWVyZ2UoY29uc3QgUHV0QnlJZFZhcmlh
bnQmIG90aGVyKTsKICAgICAKLSAgICB2b2lkIG1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJik7Cisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCBtYXJrSWZDaGVhcChWaXNpdG9yJik7
CiAgICAgYm9vbCBmaW5hbGl6ZShWTSYpOwogICAgIAogICAgIHZvaWQgZHVtcChQcmludFN0cmVh
bSYpIGNvbnN0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1JlY29yZGVk
U3RhdHVzZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9SZWNvcmRlZFN0YXR1c2VzLmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1JlY29yZGVkU3RhdHVzZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMDIsNyArMTAyLDggQEAgU2V0UHJpdmF0ZUJyYW5kU3RhdHVzKiBSZWNvcmRlZFN0YXR1c2Vz
OgogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQgUmVjb3JkZWRTdGF0dXNlczo6dmlzaXRB
Z2dyZWdhdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
Pgordm9pZCBSZWNvcmRlZFN0YXR1c2VzOjp2aXNpdEFnZ3JlZ2F0ZUltcGwoVmlzaXRvciYgdmlz
aXRvcikKIHsKICAgICBmb3IgKGF1dG8mIHBhaXIgOiBnZXRzKQogICAgICAgICBwYWlyLnNlY29u
ZC0+dmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7CkBAIC0xMTQsNyArMTE1LDEwIEBAIHZvaWQgUmVj
b3JkZWRTdGF0dXNlczo6dmlzaXRBZ2dyZWdhdGUoU2wKICAgICAgICAgcGFpci5zZWNvbmQtPnZp
c2l0QWdncmVnYXRlKHZpc2l0b3IpOwogfQogCi12b2lkIFJlY29yZGVkU3RhdHVzZXM6Om1hcmtJ
ZkNoZWFwKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorREVGSU5FX1ZJU0lUX0FHR1JFR0FURShSZWNv
cmRlZFN0YXR1c2VzKTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgUmVjb3Jk
ZWRTdGF0dXNlczo6bWFya0lmQ2hlYXAoVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBmb3IgKGF1
dG8mIHBhaXIgOiBnZXRzKQogICAgICAgICBwYWlyLnNlY29uZC0+bWFya0lmQ2hlYXAodmlzaXRv
cik7CkBAIC0xMzAsNiArMTM0LDkgQEAgdm9pZCBSZWNvcmRlZFN0YXR1c2VzOjptYXJrSWZDaGVh
cChTbG90VgogICAgICAgICBwYWlyLnNlY29uZC0+bWFya0lmQ2hlYXAodmlzaXRvcik7CiB9CiAK
K3RlbXBsYXRlIHZvaWQgUmVjb3JkZWRTdGF0dXNlczo6bWFya0lmQ2hlYXAoQWJzdHJhY3RTbG90
VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBSZWNvcmRlZFN0YXR1c2VzOjptYXJrSWZDaGVhcChT
bG90VmlzaXRvciYpOworCiB2b2lkIFJlY29yZGVkU3RhdHVzZXM6OmZpbmFsaXplV2l0aG91dERl
bGV0aW5nKFZNJiB2bSkKIHsKICAgICAvLyBUaGlzIHZhcmlhbnQgb2YgZmluYWxpemUgZ2V0cyBj
YWxsZWQgZnJvbSB3aXRoaW4gZ3JhcGggc2FmZXBvaW50cyAtLSBzbyB0aGVyZSBtYXkgYmUgREZH
IElSIGluCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUmVjb3JkZWRTdGF0
dXNlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9SZWNv
cmRlZFN0YXR1c2VzLmgJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9SZWNvcmRlZFN0YXR1c2VzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01NCw4ICs1
NCw4IEBAIHN0cnVjdCBSZWNvcmRlZFN0YXR1c2VzIHsKICAgICBDaGVja1ByaXZhdGVCcmFuZFN0
YXR1cyogYWRkQ2hlY2tQcml2YXRlQnJhbmRTdGF0dXMoY29uc3QgQ29kZU9yaWdpbiYsIGNvbnN0
IENoZWNrUHJpdmF0ZUJyYW5kU3RhdHVzJik7CiAgICAgU2V0UHJpdmF0ZUJyYW5kU3RhdHVzKiBh
ZGRTZXRQcml2YXRlQnJhbmRTdGF0dXMoY29uc3QgQ29kZU9yaWdpbiYsIGNvbnN0IFNldFByaXZh
dGVCcmFuZFN0YXR1cyYpOwogICAgIAotICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0
b3ImKTsKLSAgICB2b2lkIG1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9W
SVNJVF9BR0dSRUdBVEU7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCBtYXJr
SWZDaGVhcChWaXNpdG9yJik7CiAgICAgCiAgICAgdm9pZCBmaW5hbGl6ZVdpdGhvdXREZWxldGlu
ZyhWTSYpOwogICAgIHZvaWQgZmluYWxpemUoVk0mKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9TZXRQcml2YXRlQnJhbmRTdGF0dXMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TZXRQcml2YXRlQnJhbmRTdGF0dXMuY3BwCShy
ZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU2V0UHJp
dmF0ZUJyYW5kU3RhdHVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjM1LDE4ICsyMzUsMjUgQEAg
Q2FjaGVhYmxlSWRlbnRpZmllciBTZXRQcml2YXRlQnJhbmRTdGF0dQogICAgIHJldHVybiByZXN1
bHQ7CiB9CiAKLXZvaWQgU2V0UHJpdmF0ZUJyYW5kU3RhdHVzOjp2aXNpdEFnZ3JlZ2F0ZShTbG90
VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFNldFBy
aXZhdGVCcmFuZFN0YXR1czo6dmlzaXRBZ2dyZWdhdGVJbXBsKFZpc2l0b3ImIHZpc2l0b3IpCiB7
CiAgICAgZm9yIChTZXRQcml2YXRlQnJhbmRWYXJpYW50JiB2YXJpYW50IDogbV92YXJpYW50cykK
ICAgICAgICAgdmFyaWFudC52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKIH0KIAotdm9pZCBTZXRQ
cml2YXRlQnJhbmRTdGF0dXM6Om1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorREVG
SU5FX1ZJU0lUX0FHR1JFR0FURShTZXRQcml2YXRlQnJhbmRTdGF0dXMpOworCit0ZW1wbGF0ZTx0
eXBlbmFtZSBWaXNpdG9yPgordm9pZCBTZXRQcml2YXRlQnJhbmRTdGF0dXM6Om1hcmtJZkNoZWFw
KFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgZm9yIChTZXRQcml2YXRlQnJhbmRWYXJpYW50JiB2
YXJpYW50IDogbV92YXJpYW50cykKICAgICAgICAgdmFyaWFudC5tYXJrSWZDaGVhcCh2aXNpdG9y
KTsKIH0KIAordGVtcGxhdGUgdm9pZCBTZXRQcml2YXRlQnJhbmRTdGF0dXM6Om1hcmtJZkNoZWFw
KEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgU2V0UHJpdmF0ZUJyYW5kU3Rh
dHVzOjptYXJrSWZDaGVhcChTbG90VmlzaXRvciYpOworCiBib29sIFNldFByaXZhdGVCcmFuZFN0
YXR1czo6ZmluYWxpemUoVk0mIHZtKQogewogICAgIGZvciAoYXV0byYgdmFyaWFudCA6IG1fdmFy
aWFudHMpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TZXRQcml2YXRl
QnJhbmRTdGF0dXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvU2V0UHJpdmF0ZUJyYW5kU3RhdHVzLmgJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TZXRQcml2YXRlQnJhbmRTdGF0dXMuaAkod29ya2luZyBj
b3B5KQpAQCAtODMsOCArODMsOCBAQCBwdWJsaWM6CiAgICAgLy8gQXR0ZW1wdHMgdG8gcmVkdWNl
IHRoZSBzZXQgb2YgdmFyaWFudHMgdG8gZml0IHRoZSBnaXZlbiBzdHJ1Y3R1cmUgc2V0LiBUaGlz
IG1heSBiZSBhcHByb3hpbWF0ZS4KICAgICB2b2lkIGZpbHRlcihjb25zdCBTdHJ1Y3R1cmVTZXQm
KTsKIAotICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImKTsKLSAgICB2b2lkIG1h
cmtJZkNoZWFwKFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9BR0dSRUdBVEU7Cisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCBtYXJrSWZDaGVhcChWaXNpdG9yJik7
CiAgICAgYm9vbCBmaW5hbGl6ZShWTSYpOwogCiAgICAgYm9vbCBhcHBlbmRWYXJpYW50KGNvbnN0
IFNldFByaXZhdGVCcmFuZFZhcmlhbnQmKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9TZXRQcml2YXRlQnJhbmRWYXJpYW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU2V0UHJpdmF0ZUJyYW5kVmFyaWFudC5jcHAJKHJldmlz
aW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TZXRQcml2YXRl
QnJhbmRWYXJpYW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDIwLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICog
Q29weXJpZ2h0IChDKSAyMDIxIElnYWxpYSBTLkEuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CkBAIC01NCw3ICs1NCw4IEBAIGJvb2wgU2V0UHJpdmF0ZUJyYW5kVmFyaWFu
dDo6YXR0ZW1wdFRvTWUKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBTZXRQcml2YXRlQnJh
bmRWYXJpYW50OjptYXJrSWZDaGVhcChTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5
cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFNldFByaXZhdGVCcmFuZFZhcmlhbnQ6Om1hcmtJZkNoZWFw
KFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgaWYgKG1fb2xkU3RydWN0dXJlKQogICAgICAgICBt
X29sZFN0cnVjdHVyZS0+bWFya0lmQ2hlYXAodmlzaXRvcik7CkBAIC02Miw2ICs2Myw5IEBAIHZv
aWQgU2V0UHJpdmF0ZUJyYW5kVmFyaWFudDo6bWFya0lmQ2hlYXAKICAgICAgICAgbV9uZXdTdHJ1
Y3R1cmUtPm1hcmtJZkNoZWFwKHZpc2l0b3IpOwogfQogCit0ZW1wbGF0ZSB2b2lkIFNldFByaXZh
dGVCcmFuZFZhcmlhbnQ6Om1hcmtJZkNoZWFwKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBs
YXRlIHZvaWQgU2V0UHJpdmF0ZUJyYW5kVmFyaWFudDo6bWFya0lmQ2hlYXAoU2xvdFZpc2l0b3Im
KTsKKwogYm9vbCBTZXRQcml2YXRlQnJhbmRWYXJpYW50OjpmaW5hbGl6ZShWTSYgdm0pCiB7CiAg
ICAgaWYgKCF2bS5oZWFwLmlzTWFya2VkKG1fb2xkU3RydWN0dXJlKSkKQEAgLTcxLDExICs3NSwx
NCBAQCBib29sIFNldFByaXZhdGVCcmFuZFZhcmlhbnQ6OmZpbmFsaXplKFZNCiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKLXZvaWQgU2V0UHJpdmF0ZUJyYW5kVmFyaWFudDo6dmlzaXRBZ2dyZWdhdGUo
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBT
ZXRQcml2YXRlQnJhbmRWYXJpYW50Ojp2aXNpdEFnZ3JlZ2F0ZUltcGwoVmlzaXRvciYgdmlzaXRv
cikKIHsKICAgICBtX2lkZW50aWZpZXIudmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7CiB9CiAKK0RF
RklORV9WSVNJVF9BR0dSRUdBVEUoU2V0UHJpdmF0ZUJyYW5kVmFyaWFudCk7CisKIHZvaWQgU2V0
UHJpdmF0ZUJyYW5kVmFyaWFudDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAogewogICAg
IGR1bXBJbkNvbnRleHQob3V0LCBudWxscHRyKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9TZXRQcml2YXRlQnJhbmRWYXJpYW50LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NldFByaXZhdGVCcmFuZFZhcmlhbnQuaAkocmV2aXNp
b24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NldFByaXZhdGVC
cmFuZFZhcmlhbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNDUsOCArNDUsOCBAQCBwdWJsaWM6CiAK
ICAgICBib29sIGF0dGVtcHRUb01lcmdlKGNvbnN0IFNldFByaXZhdGVCcmFuZFZhcmlhbnQmIG90
aGVyKTsKIAotICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImKTsKLSAgICB2b2lk
IG1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9BR0dSRUdBVEU7
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCBtYXJrSWZDaGVhcChWaXNpdG9y
Jik7CiAgICAgYm9vbCBmaW5hbGl6ZShWTSYpOwogCiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFt
JikgY29uc3Q7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJl
U2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3Ry
dWN0dXJlU2V0LmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1N0cnVjdHVyZVNldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMSwxMiArMzEs
MTYgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLXZvaWQgU3RydWN0dXJlU2V0OjptYXJrSWZDaGVh
cChTbG90VmlzaXRvciYgdmlzaXRvcikgY29uc3QKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+
Cit2b2lkIFN0cnVjdHVyZVNldDo6bWFya0lmQ2hlYXAoVmlzaXRvciYgdmlzaXRvcikgY29uc3QK
IHsKICAgICBmb3IgKFN0cnVjdHVyZSogc3RydWN0dXJlIDogKnRoaXMpCiAgICAgICAgIHN0cnVj
dHVyZS0+bWFya0lmQ2hlYXAodmlzaXRvcik7CiB9CiAKK3RlbXBsYXRlIHZvaWQgU3RydWN0dXJl
U2V0OjptYXJrSWZDaGVhcChBYnN0cmFjdFNsb3RWaXNpdG9yJikgY29uc3Q7Cit0ZW1wbGF0ZSB2
b2lkIFN0cnVjdHVyZVNldDo6bWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImKSBjb25zdDsKKwogYm9v
bCBTdHJ1Y3R1cmVTZXQ6OmlzU3RpbGxBbGl2ZShWTSYgdm0pIGNvbnN0CiB7CiAgICAgZm9yIChT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSA6ICp0aGlzKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvU3RydWN0dXJlU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVNldC5oCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU2V0LmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTggQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMjEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC01NCw3ICs1NCw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG9ubHlFbnRyeSgpOwog
ICAgIH0KIAotICAgIHZvaWQgbWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImKSBjb25zdDsKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIG1hcmtJZkNoZWFwKFZpc2l0b3ImKSBjb25z
dDsKICAgICBib29sIGlzU3RpbGxBbGl2ZShWTSYpIGNvbnN0OwogICAgIAogICAgIHZvaWQgZHVt
cEluQ29udGV4dChQcmludFN0cmVhbSYsIER1bXBDb250ZXh0KikgY29uc3Q7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5j
cHAJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9T
dHJ1Y3R1cmVTdHViSW5mby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOTYsNyArMjk2LDggQEAg
dm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6cmVzZXQoY29uc3QgQ29uYwogICAgIHNldENhY2hlVHlw
ZShsb2NrZXIsIENhY2hlVHlwZTo6VW5zZXQpOwogfQogCi12b2lkIFN0cnVjdHVyZVN0dWJJbmZv
Ojp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1l
IFZpc2l0b3I+Cit2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjp2aXNpdEFnZ3JlZ2F0ZUltcGwoVmlz
aXRvciYgdmlzaXRvcikKIHsKICAgICB7CiAgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2so
bV9idWZmZXJlZFN0cnVjdHVyZXNMb2NrKTsKQEAgLTMyMiw2ICszMjMsOCBAQCB2b2lkIFN0cnVj
dHVyZVN0dWJJbmZvOjp2aXNpdEFnZ3JlZ2F0ZShTCiAgICAgcmV0dXJuOwogfQogCitERUZJTkVf
VklTSVRfQUdHUkVHQVRFKFN0cnVjdHVyZVN0dWJJbmZvKTsKKwogdm9pZCBTdHJ1Y3R1cmVTdHVi
SW5mbzo6dmlzaXRXZWFrUmVmZXJlbmNlcyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXJCYXNlJiBs
b2NrZXIsIENvZGVCbG9jayogY29kZUJsb2NrKQogewogICAgIFZNJiB2bSA9IGNvZGVCbG9jay0+
dm0oKTsKQEAgLTM1Miw3ICszNTUsOCBAQCB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjp2aXNpdFdl
YWtSZWZlcmVuCiAgICAgcmVzZXRCeUdDID0gdHJ1ZTsKIH0KIAotYm9vbCBTdHJ1Y3R1cmVTdHVi
SW5mbzo6cHJvcGFnYXRlVHJhbnNpdGlvbnMoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0
ZTx0eXBlbmFtZSBWaXNpdG9yPgorYm9vbCBTdHJ1Y3R1cmVTdHViSW5mbzo6cHJvcGFnYXRlVHJh
bnNpdGlvbnMoVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBzd2l0Y2ggKG1fY2FjaGVUeXBlKSB7
CiAgICAgY2FzZSBDYWNoZVR5cGU6OlVuc2V0OgpAQCAtMzcxLDYgKzM3NSw5IEBAIGJvb2wgU3Ry
dWN0dXJlU3R1YkluZm86OnByb3BhZ2F0ZVRyYW5zaXQKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAor
dGVtcGxhdGUgYm9vbCBTdHJ1Y3R1cmVTdHViSW5mbzo6cHJvcGFnYXRlVHJhbnNpdGlvbnMoQWJz
dHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgYm9vbCBTdHJ1Y3R1cmVTdHViSW5mbzo6cHJv
cGFnYXRlVHJhbnNpdGlvbnMoU2xvdFZpc2l0b3ImKTsKKwogU3R1YkluZm9TdW1tYXJ5IFN0cnVj
dHVyZVN0dWJJbmZvOjpzdW1tYXJ5KFZNJiB2bSkgY29uc3QKIHsKICAgICBTdHViSW5mb1N1bW1h
cnkgdGFrZXNTbG93UGF0aCA9IFN0dWJJbmZvU3VtbWFyeTo6VGFrZXNTbG93UGF0aDsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5m
by5oCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
U3RydWN0dXJlU3R1YkluZm8uaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTkzLDE0ICs5MywxNCBAQCBw
dWJsaWM6CiAgICAgdm9pZCBkZXJlZigpOwogICAgIHZvaWQgYWJvdXRUb0RpZSgpOwogCi0gICAg
dm9pZCB2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQUdH
UkVHQVRFOwogCiAgICAgLy8gQ2hlY2sgaWYgdGhlIHN0dWIgaGFzIHdlYWsgcmVmZXJlbmNlcyB0
aGF0IGFyZSBkZWFkLiBJZiBpdCBkb2VzLCB0aGVuIGl0IHJlc2V0cyBpdHNlbGYsCiAgICAgLy8g
ZWl0aGVyIGVudGlyZWx5IG9yIGp1c3QgZW5vdWdoIHRvIGVuc3VyZSB0aGF0IHRob3NlIGRlYWQg
cG9pbnRlcnMgZG9uJ3QgZ2V0IHVzZWQgYW55bW9yZS4KICAgICB2b2lkIHZpc2l0V2Vha1JlZmVy
ZW5jZXMoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyQmFzZSYsIENvZGVCbG9jayopOwogICAgIAog
ICAgIC8vIFRoaXMgcmV0dXJucyB0cnVlIGlmIGl0IGhhcyBtYXJrZWQgZXZlcnl0aGluZyB0aGF0
IGl0IHdpbGwgZXZlciBtYXJrLgotICAgIGJvb2wgcHJvcGFnYXRlVHJhbnNpdGlvbnMoU2xvdFZp
c2l0b3ImKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiBib29sIHByb3BhZ2F0ZVRy
YW5zaXRpb25zKFZpc2l0b3ImKTsKICAgICAgICAgCiAgICAgU3R1YkluZm9TdW1tYXJ5IHN1bW1h
cnkoVk0mKSBjb25zdDsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9VbmxpbmtlZENvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAx
OSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIt
MjAyMSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTc1LDcgKzc1LDggQEAgVW5saW5rZWRDb2RlQmxvY2s6OlVubGlua2Vk
Q29kZUJsb2NrKFZNJgogICAgIH0KIH0KIAotdm9pZCBVbmxpbmtlZENvZGVCbG9jazo6dmlzaXRD
aGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlw
ZW5hbWUgVmlzaXRvcj4KK3ZvaWQgVW5saW5rZWRDb2RlQmxvY2s6OnZpc2l0Q2hpbGRyZW5JbXBs
KEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBVbmxpbmtlZENvZGVCbG9j
ayogdGhpc09iamVjdCA9IGpzQ2FzdDxVbmxpbmtlZENvZGVCbG9jayo+KGNlbGwpOwogICAgIEFT
U0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTk0LDYgKzk1
LDggQEAgdm9pZCBVbmxpbmtlZENvZGVCbG9jazo6dmlzaXRDaGlsZHJlbihKUwogICAgIHZpc2l0
b3IucmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKGV4dHJhTWVtb3J5KTsKIH0KIAorREVGSU5FX1ZJ
U0lUX0NISUxEUkVOKFVubGlua2VkQ29kZUJsb2NrKTsKKwogc2l6ZV90IFVubGlua2VkQ29kZUJs
b2NrOjplc3RpbWF0ZWRTaXplKEpTQ2VsbCogY2VsbCwgVk0mIHZtKQogewogICAgIFVubGlua2Vk
Q29kZUJsb2NrKiB0aGlzT2JqZWN0ID0ganNDYXN0PFVubGlua2VkQ29kZUJsb2NrKj4oY2VsbCk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2su
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRD
b2RlQmxvY2suaAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTkgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjEgQXBwbGUgSW5jLiBBbGwgUmlnaHRz
IFJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00MzEsNyArNDMx
LDcgQEAgcHJpdmF0ZToKICAgICBSZWZDb3VudGVkQXJyYXk8RXhwcmVzc2lvblJhbmdlSW5mbz4g
bV9leHByZXNzaW9uSW5mbzsKIAogcHJvdGVjdGVkOgotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hp
bGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVO
OwogICAgIHN0YXRpYyBzaXplX3QgZXN0aW1hdGVkU2l6ZShKU0NlbGwqLCBWTSYpOwogCiBwdWJs
aWM6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRGdW5jdGlv
bkV4ZWN1dGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9VbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5jcHAJKHJldmlzaW9uIDI3MjkwMikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJs
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDEyLTIwMTkgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEyLTIwMjEgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xNDYsNyArMTQ2LDggQEAgdm9pZCBVbmxpbmtlZEZ1
bmN0aW9uRXhlY3V0YWJsZTo6ZGVzdHJveQogICAgIHN0YXRpY19jYXN0PFVubGlua2VkRnVuY3Rp
b25FeGVjdXRhYmxlKj4oY2VsbCktPn5VbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSgpOwogfQog
Ci12b2lkIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCog
Y2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgor
dm9pZCBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxs
KiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFVubGlua2VkRnVuY3Rpb25FeGVjdXRh
YmxlKiB0aGlzT2JqZWN0ID0ganNDYXN0PFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKj4oY2Vs
bCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpA
QCAtMTY5LDYgKzE3MCw4IEBAIHZvaWQgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU6OnZpc2l0
Q2gKICAgICB9CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihVbmxpbmtlZEZ1bmN0aW9uRXhl
Y3V0YWJsZSk7CisKIFNvdXJjZUNvZGUgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU6Omxpbmtl
ZFNvdXJjZUNvZGUoY29uc3QgU291cmNlQ29kZSYgcGFzc2VkUGFyZW50U291cmNlKSBjb25zdAog
ewogICAgIGNvbnN0IFNvdXJjZUNvZGUmIHBhcmVudFNvdXJjZSA9ICFtX2lzQnVpbHRpbkRlZmF1
bHRDbGFzc0NvbnN0cnVjdG9yID8gcGFzc2VkUGFyZW50U291cmNlIDogQnVpbHRpbkV4ZWN1dGFi
bGVzOjpkZWZhdWx0Q29uc3RydWN0b3JTb3VyY2VDb2RlKGNvbnN0cnVjdG9yS2luZCgpKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9uRXhlY3V0
YWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Vbmxp
bmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5oCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxOSBB
cHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAy
MSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTI0Miw3ICsyNDIsNyBAQCBwcml2YXRlOgogICAgIFVubGlua2VkRnVuY3Rp
b25FeGVjdXRhYmxlKFZNJiwgU3RydWN0dXJlKiwgY29uc3QgU291cmNlQ29kZSYsIEZ1bmN0aW9u
TWV0YWRhdGFOb2RlKiwgVW5saW5rZWRGdW5jdGlvbktpbmQsIENvbnN0cnVjdEFiaWxpdHksIEpT
UGFyc2VyU2NyaXB0TW9kZSwgUmVmUHRyPFREWkVudmlyb25tZW50TGluaz4sIE9wdGlvbmFsPFBy
aXZhdGVOYW1lRW52aXJvbm1lbnQ+LCBKU0M6OkRlcml2ZWRDb250ZXh0VHlwZSwgSlNDOjpOZWVk
c0NsYXNzRmllbGRJbml0aWFsaXplciwgUHJpdmF0ZUJyYW5kUmVxdWlyZW1lbnQsIGJvb2wgaXNC
dWlsdGluRGVmYXVsdENsYXNzQ29uc3RydWN0b3IpOwogICAgIFVubGlua2VkRnVuY3Rpb25FeGVj
dXRhYmxlKERlY29kZXImLCBjb25zdCBDYWNoZWRGdW5jdGlvbkV4ZWN1dGFibGUmKTsKIAotICAg
IHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBE
RUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgdm9pZCBkZWNvZGVDYWNoZWRDb2RlQmxvY2tz
KFZNJik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlclNj
b3BlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVi
dWdnZXJTY29wZS5jcHAJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZWJ1Z2dlci9EZWJ1Z2dlclNjb3BlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU1LDcgKzU1
LDggQEAgdm9pZCBEZWJ1Z2dlclNjb3BlOjpmaW5pc2hDcmVhdGlvbihWTSYgdgogICAgIEJhc2U6
OmZpbmlzaENyZWF0aW9uKHZtKTsKIH0KIAotdm9pZCBEZWJ1Z2dlclNjb3BlOjp2aXNpdENoaWxk
cmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBWaXNpdG9yPgordm9pZCBEZWJ1Z2dlclNjb3BlOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwq
IGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgRGVidWdnZXJTY29wZSogdGhpc09iamVj
dCA9IGpzQ2FzdDxEZWJ1Z2dlclNjb3BlKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9J
TkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNjUsNiArNjYsOCBAQCB2b2lkIERlYnVn
Z2VyU2NvcGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsCiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09i
amVjdC0+bV9uZXh0KTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKERlYnVnZ2VyU2NvcGUp
OworCiBTdHJpbmcgRGVidWdnZXJTY29wZTo6Y2xhc3NOYW1lKGNvbnN0IEpTT2JqZWN0KiBvYmpl
Y3QsIFZNJiB2bSkKIHsKICAgICBjb25zdCBEZWJ1Z2dlclNjb3BlKiBzY29wZSA9IGpzQ2FzdDxj
b25zdCBEZWJ1Z2dlclNjb3BlKj4ob2JqZWN0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZWJ1Z2dlci9EZWJ1Z2dlclNjb3BlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyU2NvcGUuaAkocmV2aXNpb24gMjcyOTAyKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyU2NvcGUuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAyMCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAyMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTQ2LDcgKzQ2LDcgQEAgcHVibGljOgogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3Rh
dGljIERlYnVnZ2VyU2NvcGUqIGNyZWF0ZShWTSYgdm0sIEpTU2NvcGUqIHNjb3BlKTsKIAotICAg
IHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBE
RUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogICAgIHN0YXRpYyBTdHJpbmcgY2xhc3NOYW1lKGNvbnN0
IEpTT2JqZWN0KiwgVk0mKTsKICAgICBzdGF0aWMgU3RyaW5nIHRvU3RyaW5nTmFtZShjb25zdCBK
U09iamVjdCosIEpTR2xvYmFsT2JqZWN0Kik7CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVy
dHlTbG90KEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5
U2xvdCYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkVHJhbnNp
dGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVz
aXJlZFRyYW5zaXRpb25zLmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdEZXNpcmVkVHJhbnNpdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
NTIsNyArNTIsNyBAQCB2b2lkIERlc2lyZWRUcmFuc2l0aW9uOjpyZWFsbHlBZGQoVk0mIHZtCiAg
ICAgICAgICAgICBtX29sZFN0cnVjdHVyZSwgbV9uZXdTdHJ1Y3R1cmUpKTsKIH0KIAotdm9pZCBE
ZXNpcmVkVHJhbnNpdGlvbjo6dmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3Zv
aWQgRGVzaXJlZFRyYW5zaXRpb246OnZpc2l0Q2hpbGRyZW4oQWJzdHJhY3RTbG90VmlzaXRvciYg
dmlzaXRvcikKIHsKICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKG1fY29kZU9yaWdpbk93
bmVyKTsKICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKG1fb2xkU3RydWN0dXJlKTsKQEAg
LTc4LDcgKzc4LDcgQEAgdm9pZCBEZXNpcmVkVHJhbnNpdGlvbnM6OnJlYWxseUFkZChWTSYgdgog
ICAgICAgICBtX3RyYW5zaXRpb25zW2ldLnJlYWxseUFkZCh2bSwgY29tbW9uKTsKIH0KIAotdm9p
ZCBEZXNpcmVkVHJhbnNpdGlvbnM6OnZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3Ip
Cit2b2lkIERlc2lyZWRUcmFuc2l0aW9uczo6dmlzaXRDaGlsZHJlbihBYnN0cmFjdFNsb3RWaXNp
dG9yJiB2aXNpdG9yKQogewogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3RyYW5zaXRp
b25zLnNpemUoKTsgaSsrKQogICAgICAgICBtX3RyYW5zaXRpb25zW2ldLnZpc2l0Q2hpbGRyZW4o
dmlzaXRvcik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRUcmFu
c2l0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVz
aXJlZFRyYW5zaXRpb25zLmgJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHRGVzaXJlZFRyYW5zaXRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDYs
OCArNDYsNyBAQCBwdWJsaWM6CiAgICAgRGVzaXJlZFRyYW5zaXRpb24oQ29kZUJsb2NrKiwgQ29k
ZUJsb2NrKiBjb2RlT3JpZ2luT3duZXIsIFN0cnVjdHVyZSosIFN0cnVjdHVyZSopOwogCiAgICAg
dm9pZCByZWFsbHlBZGQoVk0mLCBDb21tb25EYXRhKik7Ci0gICAgCi0gICAgdm9pZCB2aXNpdENo
aWxkcmVuKFNsb3RWaXNpdG9yJik7CisgICAgdm9pZCB2aXNpdENoaWxkcmVuKEFic3RyYWN0U2xv
dFZpc2l0b3ImKTsKIAogcHJpdmF0ZToKICAgICBDb2RlQmxvY2sqIG1fY29kZUJsb2NrOwpAQCAt
NjMsNyArNjIsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGFkZExhemlseShDb2RlQmxvY2sqLCBD
b2RlQmxvY2sqIGNvZGVPcmlnaW5Pd25lciwgU3RydWN0dXJlKiwgU3RydWN0dXJlKik7CiAgICAg
dm9pZCByZWFsbHlBZGQoVk0mLCBDb21tb25EYXRhKik7Ci0gICAgdm9pZCB2aXNpdENoaWxkcmVu
KFNsb3RWaXNpdG9yJik7CisgICAgdm9pZCB2aXNpdENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0
b3ImKTsKIAogcHJpdmF0ZToKICAgICBWZWN0b3I8RGVzaXJlZFRyYW5zaXRpb24+IG1fdHJhbnNp
dGlvbnM7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXZWFrUmVm
ZXJlbmNlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdE
ZXNpcmVkV2Vha1JlZmVyZW5jZXMuY3BwCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXZWFrUmVmZXJlbmNlcy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC04Nyw3ICs4Nyw3IEBAIHZvaWQgRGVzaXJlZFdlYWtSZWZlcmVuY2VzOjpyZWFsbHlB
ZGQoVk0KICAgICB9CiB9CiAKLXZvaWQgRGVzaXJlZFdlYWtSZWZlcmVuY2VzOjp2aXNpdENoaWxk
cmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBEZXNpcmVkV2Vha1JlZmVyZW5jZXM6OnZp
c2l0Q2hpbGRyZW4oQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBmb3IgKEpT
Q2VsbCogdGFyZ2V0IDogbV9yZWZlcmVuY2VzKQogICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFy
cmllcmVkKHRhcmdldCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2ly
ZWRXZWFrUmVmZXJlbmNlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHRGVzaXJlZFdlYWtSZWZlcmVuY2VzLmgJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFdlYWtSZWZlcmVuY2VzLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0zMSwxMCArMzEsMTAgQEAKIAogbmFtZXNwYWNlIEpTQyB7IAogCitjbGFzcyBB
YnN0cmFjdFNsb3RWaXNpdG9yOwogY2xhc3MgQ29kZUJsb2NrOwogY2xhc3MgSlNDZWxsOwogY2xh
c3MgSlNWYWx1ZTsKLWNsYXNzIFNsb3RWaXNpdG9yOwogY2xhc3MgVk07CiAKIG5hbWVzcGFjZSBE
RkcgewpAQCAtNTIsOCArNTIsOCBAQCBwdWJsaWM6CiAgICAgYm9vbCBjb250YWlucyhKU0NlbGwq
KTsKICAgICAKICAgICB2b2lkIHJlYWxseUFkZChWTSYsIENvbW1vbkRhdGEqKTsKLSAgICAKLSAg
ICB2b2lkIHZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKKworICAgIHZvaWQgdmlzaXRDaGls
ZHJlbihBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAKIHByaXZhdGU6CiAgICAgQ29kZUJsb2NrKiBt
X2NvZGVCbG9jazsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCShy
ZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTQ0OCw3ICsxNDQ4LDcgQEAgdm9pZCBHcmFwaDo6cmVnaXN0
ZXJGcm96ZW5WYWx1ZXMoKQogICAgIG1fY29kZUJsb2NrLT5jb25zdGFudHNTb3VyY2VDb2RlUmVw
cmVzZW50YXRpb24oKS5zaHJpbmtUb0ZpdCgpOwogfQogCi12b2lkIEdyYXBoOjp2aXNpdENoaWxk
cmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBHcmFwaDo6dmlzaXRDaGlsZHJlbihBYnN0
cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGZvciAoRnJvemVuVmFsdWUqIHZhbHVl
IDogbV9mcm96ZW5WYWx1ZXMpIHsKICAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZCh2
YWx1ZS0+dmFsdWUoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBo
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCShy
ZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEx
LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDExLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC0xMDAwLDkgKzEwMDAsOSBAQCBwdWJsaWM6CiAgICAgYm9vbCBj
YW5Eb0Zhc3RTcHJlYWQoTm9kZSosIGNvbnN0IEFic3RyYWN0VmFsdWUmKTsKICAgICAKICAgICB2
b2lkIHJlZ2lzdGVyRnJvemVuVmFsdWVzKCk7Ci0gICAgCi0gICAgdm9pZCB2aXNpdENoaWxkcmVu
KFNsb3RWaXNpdG9yJikgZmluYWw7Ci0gICAgCisKKyAgICB2b2lkIHZpc2l0Q2hpbGRyZW4oQWJz
dHJhY3RTbG90VmlzaXRvciYpIGZpbmFsOworCiAgICAgdm9pZCBsb2dBc3NlcnRpb25GYWlsdXJl
KAogICAgICAgICBzdGQ6Om51bGxwdHJfdCwgY29uc3QgY2hhciogZmlsZSwgaW50IGxpbmUsIGNv
bnN0IGNoYXIqIGZ1bmN0aW9uLAogICAgICAgICBjb25zdCBjaGFyKiBhc3NlcnRpb24pOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCShyZXZpc2lvbiAyNzI5MDIpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIwIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIxIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtNjcyLDkgKzY3MiwxMCBAQCBDb21waWxhdGlvbktleSBQbGFuOjprZXkoKQogICAgIHJldHVy
biBDb21waWxhdGlvbktleShtX2NvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSwgbV9tb2RlKTsKIH0K
IAotdm9pZCBQbGFuOjpjaGVja0xpdmVuZXNzQW5kVmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYg
dmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFBsYW46OmNoZWNrTGl2
ZW5lc3NBbmRWaXNpdENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7Ci0gICAgaWYgKCFpc0tu
b3duVG9CZUxpdmVEdXJpbmdHQygpKQorICAgIGlmICghaXNLbm93blRvQmVMaXZlRHVyaW5nR0Mo
dmlzaXRvcikpCiAgICAgICAgIHJldHVybjsKIAogICAgIGNsZWFuTXVzdEhhbmRsZVZhbHVlc0lm
TmVjZXNzYXJ5KCk7CkBAIC03MDIsMTMgKzcwMywzMyBAQCB2b2lkIFBsYW46OmNoZWNrTGl2ZW5l
c3NBbmRWaXNpdENoaWxkcmVuCiAgICAgbV90cmFuc2l0aW9ucy52aXNpdENoaWxkcmVuKHZpc2l0
b3IpOwogfQogCit0ZW1wbGF0ZSB2b2lkIFBsYW46OmNoZWNrTGl2ZW5lc3NBbmRWaXNpdENoaWxk
cmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgUGxhbjo6Y2hlY2tMaXZl
bmVzc0FuZFZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKKwogdm9pZCBQbGFuOjpmaW5hbGl6
ZUluR0MoKQogewogICAgIEFTU0VSVChtX3ZtKTsKICAgICBtX3JlY29yZGVkU3RhdHVzZXMuZmlu
YWxpemVXaXRob3V0RGVsZXRpbmcoKm1fdm0pOwogfQogCi1ib29sIFBsYW46OmlzS25vd25Ub0Jl
TGl2ZUR1cmluZ0dDKCkKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Citib29sIFBsYW46Omlz
S25vd25Ub0JlTGl2ZUR1cmluZ0dDKFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgaWYgKG1fc3Rh
Z2UgPT0gQ2FuY2VsbGVkKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCF2aXNpdG9y
LmlzTWFya2VkKG1fY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICBpZiAoIXZpc2l0b3IuaXNNYXJrZWQobV9jb2RlQmxvY2stPmFsdGVybmF0
aXZlKCkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCEhbV9wcm9maWxlZERGR0Nv
ZGVCbG9jayAmJiAhdmlzaXRvci5pc01hcmtlZChtX3Byb2ZpbGVkREZHQ29kZUJsb2NrKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiB0cnVlOworfQorCit0ZW1wbGF0ZSBib29s
IFBsYW46OmlzS25vd25Ub0JlTGl2ZUR1cmluZ0dDKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3Rl
bXBsYXRlIGJvb2wgUGxhbjo6aXNLbm93blRvQmVMaXZlRHVyaW5nR0MoU2xvdFZpc2l0b3ImKTsK
KworYm9vbCBQbGFuOjppc0tub3duVG9CZUxpdmVBZnRlckdDKCkKIHsKICAgICBpZiAobV9zdGFn
ZSA9PSBDYW5jZWxsZWQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHUGxhbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHUGxhbi5oCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1BsYW4uaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQzLDggKzQzLDggQEAKIAog
bmFtZXNwYWNlIEpTQyB7CiAKK2NsYXNzIEFic3RyYWN0U2xvdFZpc2l0b3I7CiBjbGFzcyBDb2Rl
QmxvY2s7Ci1jbGFzcyBTbG90VmlzaXRvcjsKIAogbmFtZXNwYWNlIERGRyB7CiAKQEAgLTcwLDEw
ICs3MCwxMSBAQCBwdWJsaWM6CiAgICAgCiAgICAgQ29tcGlsYXRpb25LZXkga2V5KCk7CiAgICAg
Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KLSAgICB2b2lkIGl0ZXJhdGVDb2RlQmxvY2tz
Rm9yR0MoY29uc3QgRnVuYyYpOwotICAgIHZvaWQgY2hlY2tMaXZlbmVzc0FuZFZpc2l0Q2hpbGRy
ZW4oU2xvdFZpc2l0b3ImKTsKLSAgICBib29sIGlzS25vd25Ub0JlTGl2ZUR1cmluZ0dDKCk7Cisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYywgdHlwZW5hbWUgVmlzaXRvcj4KKyAgICB2b2lkIGl0
ZXJhdGVDb2RlQmxvY2tzRm9yR0MoVmlzaXRvciYsIGNvbnN0IEZ1bmMmKTsKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIGNoZWNrTGl2ZW5lc3NBbmRWaXNpdENoaWxkcmVuKFZp
c2l0b3ImKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiBib29sIGlzS25vd25Ub0Jl
TGl2ZUR1cmluZ0dDKFZpc2l0b3ImKTsKKyAgICBib29sIGlzS25vd25Ub0JlTGl2ZUFmdGVyR0Mo
KTsKICAgICB2b2lkIGZpbmFsaXplSW5HQygpOwogICAgIHZvaWQgY2FuY2VsKCk7CiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbklubGluZXMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW5JbmxpbmVzLmgJKHJldmlzaW9uIDI3
MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbklubGluZXMuaAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAx
OCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTct
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTMxLDEwICszMSwxMCBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IERGRyB7CiAKICNpZiBFTkFCTEUoREZHX0pJVCkKIAotdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4K
LXZvaWQgUGxhbjo6aXRlcmF0ZUNvZGVCbG9ja3NGb3JHQyhjb25zdCBGdW5jJiBmdW5jKQordGVt
cGxhdGU8dHlwZW5hbWUgRnVuYywgdHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgUGxhbjo6aXRlcmF0
ZUNvZGVCbG9ja3NGb3JHQyhWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBGdW5jJiBmdW5jKQogewot
ICAgIGlmICghaXNLbm93blRvQmVMaXZlRHVyaW5nR0MoKSkKKyAgICBpZiAoIWlzS25vd25Ub0Jl
TGl2ZUR1cmluZ0dDKHZpc2l0b3IpKQogICAgICAgICByZXR1cm47CiAgICAgCiAgICAgLy8gQ29t
cGlsYXRpb24gd3JpdGVzIGxvdHMgb2YgdmFsdWVzIHRvIGEgQ29kZUJsb2NrIHdpdGhvdXQgcGVy
Zm9ybWluZwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlcG9pbnQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZXBvaW50LmNw
cAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZl
cG9pbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxNC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODMsMjggKzgzLDQ2IEBAIHZvaWQgU2FmZXBv
aW50OjpiZWdpbigpCiAgICAgfQogfQogCi12b2lkIFNhZmVwb2ludDo6Y2hlY2tMaXZlbmVzc0Fu
ZFZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPgordm9pZCBTYWZlcG9pbnQ6OmNoZWNrTGl2ZW5lc3NBbmRWaXNpdENoaWxkcmVuKFZp
c2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQobV9kaWRDYWxsQmVnaW4pOwog
CiAgICAgaWYgKG1fcmVzdWx0Lm1fZGlkR2V0Q2FuY2VsbGVkKQogICAgICAgICByZXR1cm47IC8v
IFdlIHdlcmUgY2FuY2VsbGVkIGR1cmluZyBhIHByZXZpb3VzIEdDIQogICAgIAotICAgIGlmICgh
aXNLbm93blRvQmVMaXZlRHVyaW5nR0MoKSkKKyAgICBpZiAoIWlzS25vd25Ub0JlTGl2ZUR1cmlu
Z0dDKHZpc2l0b3IpKQogICAgICAgICByZXR1cm47CiAgICAgCiAgICAgZm9yICh1bnNpZ25lZCBp
ID0gbV9zY2FubmFibGVzLnNpemUoKTsgaS0tOykKICAgICAgICAgbV9zY2FubmFibGVzW2ldLT52
aXNpdENoaWxkcmVuKHZpc2l0b3IpOwogfQogCi1ib29sIFNhZmVwb2ludDo6aXNLbm93blRvQmVM
aXZlRHVyaW5nR0MoKQordGVtcGxhdGUgdm9pZCBTYWZlcG9pbnQ6OmNoZWNrTGl2ZW5lc3NBbmRW
aXNpdENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgU2FmZXBv
aW50OjpjaGVja0xpdmVuZXNzQW5kVmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYpOworCit0ZW1w
bGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgorYm9vbCBTYWZlcG9pbnQ6OmlzS25vd25Ub0JlTGl2ZUR1
cmluZ0dDKFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgUkVMRUFTRV9BU1NFUlQobV9kaWRDYWxs
QmVnaW4pOworICAgIAorICAgIGlmIChtX3Jlc3VsdC5tX2RpZEdldENhbmNlbGxlZCkKKyAgICAg
ICAgcmV0dXJuIHRydWU7IC8vIFdlIHdlcmUgY2FuY2VsbGVkIGR1cmluZyBhIHByZXZpb3VzIEdD
LCBzbyBsZXQncyBub3QgbWVzcyB3aXRoIGl0IHRoaXMgdGltZSBhcm91bmQgLSBwcmV0ZW5kIGl0
J3MgbGl2ZSBhbmQgbW92ZSBvbi4KKyAgICAKKyAgICByZXR1cm4gbV9wbGFuLmlzS25vd25Ub0Jl
TGl2ZUR1cmluZ0dDKHZpc2l0b3IpOworfQorCit0ZW1wbGF0ZSBib29sIFNhZmVwb2ludDo6aXNL
bm93blRvQmVMaXZlRHVyaW5nR0MoQWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgYm9v
bCBTYWZlcG9pbnQ6OmlzS25vd25Ub0JlTGl2ZUR1cmluZ0dDKFNsb3RWaXNpdG9yJik7CisKK2Jv
b2wgU2FmZXBvaW50Ojppc0tub3duVG9CZUxpdmVBZnRlckdDKCkKIHsKICAgICBSRUxFQVNFX0FT
U0VSVChtX2RpZENhbGxCZWdpbik7CiAgICAgCiAgICAgaWYgKG1fcmVzdWx0Lm1fZGlkR2V0Q2Fu
Y2VsbGVkKQogICAgICAgICByZXR1cm4gdHJ1ZTsgLy8gV2Ugd2VyZSBjYW5jZWxsZWQgZHVyaW5n
IGEgcHJldmlvdXMgR0MsIHNvIGxldCdzIG5vdCBtZXNzIHdpdGggaXQgdGhpcyB0aW1lIGFyb3Vu
ZCAtIHByZXRlbmQgaXQncyBsaXZlIGFuZCBtb3ZlIG9uLgogICAgIAotICAgIHJldHVybiBtX3Bs
YW4uaXNLbm93blRvQmVMaXZlRHVyaW5nR0MoKTsKKyAgICByZXR1cm4gbV9wbGFuLmlzS25vd25U
b0JlTGl2ZUFmdGVyR0MoKTsKIH0KIAogdm9pZCBTYWZlcG9pbnQ6OmNhbmNlbCgpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVwb2ludC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZXBvaW50LmgJKHJldmlzaW9uIDI3MjkwMikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZXBvaW50LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0LCAyMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMzEsNyArMzEsNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotY2xhc3MgU2xvdFZp
c2l0b3I7CitjbGFzcyBBYnN0cmFjdFNsb3RWaXNpdG9yOwogY2xhc3MgVk07CiAKIG5hbWVzcGFj
ZSBERkcgewpAQCAtNjYsOSArNjYsMTAgQEAgcHVibGljOgogICAgIHZvaWQgYWRkKFNjYW5uYWJs
ZSopOwogICAgIAogICAgIHZvaWQgYmVnaW4oKTsKLSAgICAKLSAgICB2b2lkIGNoZWNrTGl2ZW5l
c3NBbmRWaXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJik7Ci0gICAgYm9vbCBpc0tub3duVG9CZUxp
dmVEdXJpbmdHQygpOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCBjaGVj
a0xpdmVuZXNzQW5kVmlzaXRDaGlsZHJlbihWaXNpdG9yJik7CisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgVmlzaXRvcj4gYm9vbCBpc0tub3duVG9CZUxpdmVEdXJpbmdHQyhWaXNpdG9yJik7CisgICAg
Ym9vbCBpc0tub3duVG9CZUxpdmVBZnRlckdDKCk7CiAgICAgdm9pZCBjYW5jZWwoKTsKICAgICAK
ICAgICBWTSogdm0oKSBjb25zdDsgLy8gTWF5IHJldHVybiBudWxsIGlmIHdlJ3ZlIGJlZW4gY2Fu
Y2VsbGVkLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTY2FubmFibGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NjYW5uYWJsZS5oCShy
ZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NjYW5uYWJs
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTQtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTI5LDcgKzI5LDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLWNs
YXNzIFNsb3RWaXNpdG9yOworY2xhc3MgQWJzdHJhY3RTbG90VmlzaXRvcjsKIAogbmFtZXNwYWNl
IERGRyB7CiAKQEAgLTM4LDcgKzM4LDcgQEAgcHVibGljOgogICAgIFNjYW5uYWJsZSgpIHsgfQog
ICAgIHZpcnR1YWwgflNjYW5uYWJsZSgpIHsgfQogICAgIAotICAgIHZpcnR1YWwgdm9pZCB2aXNp
dENoaWxkcmVuKFNsb3RWaXNpdG9yJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdENoaWxk
cmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImKSA9IDA7CiB9OwogCiB9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0LmNwcAko
cmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlz
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNzIsNyArMzcyLDggQEAgdm9pZCBXb3JrbGlzdDo6
cmVzdW1lQWxsVGhyZWFkcygpCiAgICAgbV9zdXNwZW5zaW9uTG9jay51bmxvY2soKTsKIH0KIAot
dm9pZCBXb3JrbGlzdDo6dmlzaXRXZWFrUmVmZXJlbmNlcyhTbG90VmlzaXRvciYgdmlzaXRvcikK
K3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFdvcmtsaXN0Ojp2aXNpdFdlYWtSZWZl
cmVuY2VzKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgVk0qIHZtID0gJnZpc2l0b3IuaGVhcCgp
LT52bSgpOwogICAgIHsKQEAgLTM5Niw2ICszOTcsOSBAQCB2b2lkIFdvcmtsaXN0Ojp2aXNpdFdl
YWtSZWZlcmVuY2VzKFNsb3RWCiAgICAgfQogfQogCit0ZW1wbGF0ZSB2b2lkIFdvcmtsaXN0Ojp2
aXNpdFdlYWtSZWZlcmVuY2VzKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQg
V29ya2xpc3Q6OnZpc2l0V2Vha1JlZmVyZW5jZXMoU2xvdFZpc2l0b3ImKTsKKwogdm9pZCBXb3Jr
bGlzdDo6cmVtb3ZlRGVhZFBsYW5zKFZNJiB2bSkKIHsKICAgICB7CkBAIC00MDUsNyArNDA5LDcg
QEAgdm9pZCBXb3JrbGlzdDo6cmVtb3ZlRGVhZFBsYW5zKFZNJiB2bSkKICAgICAgICAgICAgIFBs
YW4qIHBsYW4gPSBpdGVyLT52YWx1ZS5nZXQoKTsKICAgICAgICAgICAgIGlmIChwbGFuLT52bSgp
ICE9ICZ2bSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGlmIChwbGFu
LT5pc0tub3duVG9CZUxpdmVEdXJpbmdHQygpKSB7CisgICAgICAgICAgICBpZiAocGxhbi0+aXNL
bm93blRvQmVMaXZlQWZ0ZXJHQygpKSB7CiAgICAgICAgICAgICAgICAgcGxhbi0+ZmluYWxpemVJ
bkdDKCk7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CkBAIC00NDAs
NyArNDQ0LDcgQEAgdm9pZCBXb3JrbGlzdDo6cmVtb3ZlRGVhZFBsYW5zKFZNJiB2bSkKICAgICAg
ICAgICAgIGNvbnRpbnVlOwogICAgICAgICBpZiAoc2FmZXBvaW50LT52bSgpICE9ICZ2bSkKICAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAoc2FmZXBvaW50LT5pc0tub3duVG9CZUxp
dmVEdXJpbmdHQygpKQorICAgICAgICBpZiAoc2FmZXBvaW50LT5pc0tub3duVG9CZUxpdmVBZnRl
ckdDKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgc2FmZXBvaW50LT5jYW5jZWwo
KTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5oCShy
ZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0zNSw3ICszNSw3IEBACiAKIG5hbWVzcGFjZSBKU0Mgewog
Ci1jbGFzcyBTbG90VmlzaXRvcjsKK2NsYXNzIEFic3RyYWN0U2xvdFZpc2l0b3I7CiAKIG5hbWVz
cGFjZSBERkcgewogCkBAIC01Nyw3ICs1Nyw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGNvbXBsZXRl
QWxsUGxhbnNGb3JWTShWTSYpOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KLSAgICB2
b2lkIGl0ZXJhdGVDb2RlQmxvY2tzRm9yR0MoVk0mLCBjb25zdCBGdW5jJik7CisgICAgdm9pZCBp
dGVyYXRlQ29kZUJsb2Nrc0ZvckdDKEFic3RyYWN0U2xvdFZpc2l0b3ImLCBWTSYsIGNvbnN0IEZ1
bmMmKTsKIAogICAgIHZvaWQgd2FpdFVudGlsQWxsUGxhbnNGb3JWTUFyZVJlYWR5KFZNJik7CiAg
ICAgU3RhdGUgY29tcGxldGVBbGxSZWFkeVBsYW5zRm9yVk0oVk0mLCBDb21waWxhdGlvbktleSA9
IENvbXBpbGF0aW9uS2V5KCkpOwpAQCAtNzMsNyArNzMsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBp
c0FjdGl2ZUZvclZNKFZNJikgY29uc3Q7CiAgICAgCiAgICAgLy8gT25seSBjYWxsZWQgb24gdGhl
IG1haW4gdGhyZWFkIGFmdGVyIHN1c3BlbmRpbmcgYWxsIHRocmVhZHMuCi0gICAgdm9pZCB2aXNp
dFdlYWtSZWZlcmVuY2VzKFNsb3RWaXNpdG9yJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlz
aXRvcj4gdm9pZCB2aXNpdFdlYWtSZWZlcmVuY2VzKFZpc2l0b3ImKTsKICAgICB2b2lkIHJlbW92
ZURlYWRQbGFucyhWTSYpOwogICAgIAogICAgIHZvaWQgcmVtb3ZlTm9uQ29tcGlsaW5nUGxhbnNG
b3JWTShWTSYpOwpAQCAtMTQ0LDcgKzE0NCw3IEBAIFdvcmtsaXN0JiBleGlzdGluZ1dvcmtsaXN0
Rm9ySW5kZXgodW5zaWcKIHZvaWQgY29tcGxldGVBbGxQbGFuc0ZvclZNKFZNJik7CiAKIHRlbXBs
YXRlPHR5cGVuYW1lIEZ1bmM+Ci12b2lkIGl0ZXJhdGVDb2RlQmxvY2tzRm9yR0MoVk0mLCBjb25z
dCBGdW5jJik7Cit2b2lkIGl0ZXJhdGVDb2RlQmxvY2tzRm9yR0MoQWJzdHJhY3RTbG90VmlzaXRv
ciYsIFZNJiwgY29uc3QgRnVuYyYpOwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3RJbmxpbmVzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlzdElubGluZXMuaAko
cmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlz
dElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTctMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMzLDMwICszMywzMCBAQCBuYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIERGRyB7CiAjaWYgRU5BQkxFKERGR19KSVQpCiAKIHRlbXBsYXRlPHR5
cGVuYW1lIEZ1bmM+Ci12b2lkIGl0ZXJhdGVDb2RlQmxvY2tzRm9yR0MoVk0mIHZtLCBjb25zdCBG
dW5jJiBmdW5jKQordm9pZCBpdGVyYXRlQ29kZUJsb2Nrc0ZvckdDKEFic3RyYWN0U2xvdFZpc2l0
b3ImIHZpc2l0b3IsIFZNJiB2bSwgY29uc3QgRnVuYyYgZnVuYykKIHsKICAgICBmb3IgKHVuc2ln
bmVkIGkgPSBERkc6Om51bWJlck9mV29ya2xpc3RzKCk7IGktLTspIHsKICAgICAgICAgaWYgKERG
Rzo6V29ya2xpc3QqIHdvcmtsaXN0ID0gREZHOjpleGlzdGluZ1dvcmtsaXN0Rm9ySW5kZXhPck51
bGwoaSkpCi0gICAgICAgICAgICB3b3JrbGlzdC0+aXRlcmF0ZUNvZGVCbG9ja3NGb3JHQyh2bSwg
ZnVuYyk7CisgICAgICAgICAgICB3b3JrbGlzdC0+aXRlcmF0ZUNvZGVCbG9ja3NGb3JHQyh2aXNp
dG9yLCB2bSwgZnVuYyk7CiAgICAgfQogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgotdm9p
ZCBXb3JrbGlzdDo6aXRlcmF0ZUNvZGVCbG9ja3NGb3JHQyhWTSYgdm0sIGNvbnN0IEZ1bmMmIGZ1
bmMpCit2b2lkIFdvcmtsaXN0OjppdGVyYXRlQ29kZUJsb2Nrc0ZvckdDKEFic3RyYWN0U2xvdFZp
c2l0b3ImIHZpc2l0b3IsIFZNJiB2bSwgY29uc3QgRnVuYyYgZnVuYykKIHsKICAgICBMb2NrSG9s
ZGVyIGxvY2tlcigqbV9sb2NrKTsKICAgICBmb3IgKFBsYW5NYXA6Oml0ZXJhdG9yIGl0ZXIgPSBt
X3BsYW5zLmJlZ2luKCk7IGl0ZXIgIT0gbV9wbGFucy5lbmQoKTsgKytpdGVyKSB7CiAgICAgICAg
IFBsYW4qIHBsYW4gPSBpdGVyLT52YWx1ZS5nZXQoKTsKICAgICAgICAgaWYgKHBsYW4tPnZtKCkg
IT0gJnZtKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIHBsYW4tPml0ZXJhdGVDb2Rl
QmxvY2tzRm9yR0MoZnVuYyk7CisgICAgICAgIHBsYW4tPml0ZXJhdGVDb2RlQmxvY2tzRm9yR0Mo
dmlzaXRvciwgZnVuYyk7CiAgICAgfQogfQogCiAjZWxzZSAvLyBFTkFCTEUoREZHX0pJVCkKIAog
dGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KLXZvaWQgaXRlcmF0ZUNvZGVCbG9ja3NGb3JHQyhWTSYs
IGNvbnN0IEZ1bmMmKQordm9pZCBpdGVyYXRlQ29kZUJsb2Nrc0ZvckdDKEFic3RyYWN0U2xvdFZp
c2l0b3ImLCBWTSYsIGNvbnN0IEZ1bmMmKQogewogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9BYnN0cmFjdFNsb3RWaXNpdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvQWJzdHJhY3RTbG90VmlzaXRvci5oCShub25leGlzdGVudCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Fic3RyYWN0U2xvdFZpc2l0b3IuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDIwOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiSlNDSlNWYWx1ZS5oIgor
I2luY2x1ZGUgIk1hcmtTdGFjay5oIgorI2luY2x1ZGUgIlJvb3RNYXJrUmVhc29uLmgiCisjaW5j
bHVkZSAiVmlzaXRSYWNlS2V5LmgiCisjaW5jbHVkZSA8d3RmL0NvbmN1cnJlbnRQdHJIYXNoU2V0
Lmg+CisjaW5jbHVkZSA8d3RmL1NoYXJlZFRhc2suaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3Ry
aW5nLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBDb25zZXJ2YXRpdmVSb290czsKK2Ns
YXNzIEhlYXA7CitjbGFzcyBIZWFwQ2VsbDsKK2NsYXNzIEpTQ2VsbDsKK2NsYXNzIE1hcmtlZEJs
b2NrOworY2xhc3MgTWFya2luZ0NvbnN0cmFpbnQ7CitjbGFzcyBNYXJraW5nQ29uc3RyYWludFNv
bHZlcjsKK2NsYXNzIFByZWNpc2VBbGxvY2F0aW9uOworY2xhc3MgU2xvdFZpc2l0b3I7CitjbGFz
cyBWTTsKK2NsYXNzIFZlcmlmaWVyU2xvdFZpc2l0b3I7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBj
bGFzcyBXZWFrOwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVHJhaXRzPiBjbGFzcyBX
cml0ZUJhcnJpZXJCYXNlOworCitjbGFzcyBBYnN0cmFjdFNsb3RWaXNpdG9yIHsKKyAgICBXVEZf
TUFLRV9OT05DT1BZQUJMRShBYnN0cmFjdFNsb3RWaXNpdG9yKTsKKyAgICBXVEZfTUFLRV9GQVNU
X0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBjbGFzcyBDb250ZXh0IHsKKyAgICBwdWJsaWM6Cisg
ICAgICAgIENvbnRleHQoQWJzdHJhY3RTbG90VmlzaXRvciYsIEhlYXBDZWxsKik7CisgICAgICAg
IH5Db250ZXh0KCk7CisgICAgICAgIEhlYXBDZWxsKiBjZWxsKCkgY29uc3QgeyByZXR1cm4gbV9j
ZWxsOyB9CisgICAgcHJpdmF0ZToKKyAgICAgICAgQWJzdHJhY3RTbG90VmlzaXRvciYgbV92aXNp
dG9yOworICAgICAgICBIZWFwQ2VsbCogbV9jZWxsOworICAgICAgICBDb250ZXh0KiBtX3ByZXZp
b3VzOworICAgIH07CisKKyAgICBjbGFzcyBTdXBwcmVzc0dDVmVyaWZpZXJTY29wZSB7CisgICAg
cHVibGljOgorICAgICAgICBTdXBwcmVzc0dDVmVyaWZpZXJTY29wZShBYnN0cmFjdFNsb3RWaXNp
dG9yJiB2aXNpdG9yKQorICAgICAgICAgICAgOiBtX3Zpc2l0b3IodmlzaXRvcikKKyAgICAgICAg
eworICAgICAgICAgICAgQVNTRVJUKCFtX3Zpc2l0b3IubV9zdXBwcmVzc1ZlcmlmaWVyKTsKKyAg
ICAgICAgICAgIG1fdmlzaXRvci5tX3N1cHByZXNzVmVyaWZpZXIgPSB0cnVlOworICAgICAgICB9
CisgICAgICAgIH5TdXBwcmVzc0dDVmVyaWZpZXJTY29wZSgpIHsgbV92aXNpdG9yLm1fc3VwcHJl
c3NWZXJpZmllciA9IGZhbHNlOyB9CisgICAgcHJpdmF0ZToKKyAgICAgICAgQWJzdHJhY3RTbG90
VmlzaXRvciYgbV92aXNpdG9yOworICAgIH07CisKKyAgICBjbGFzcyBEZWZhdWx0TWFya2luZ1Zp
b2xhdGlvbkFzc2VydGlvblNjb3BlIHsKKyAgICBwdWJsaWM6CisgICAgICAgIERlZmF1bHRNYXJr
aW5nVmlvbGF0aW9uQXNzZXJ0aW9uU2NvcGUoQWJzdHJhY3RTbG90VmlzaXRvciYpIHsgfQorICAg
IH07CisKKyAgICB2aXJ0dWFsIH5BYnN0cmFjdFNsb3RWaXNpdG9yKCkgPSBkZWZhdWx0OworCisg
ICAgTWFya1N0YWNrQXJyYXkmIGNvbGxlY3Rvck1hcmtTdGFjaygpIHsgcmV0dXJuIG1fY29sbGVj
dG9yU3RhY2s7IH0KKyAgICBNYXJrU3RhY2tBcnJheSYgbXV0YXRvck1hcmtTdGFjaygpIHsgcmV0
dXJuIG1fbXV0YXRvclN0YWNrOyB9CisgICAgY29uc3QgTWFya1N0YWNrQXJyYXkmIGNvbGxlY3Rv
ck1hcmtTdGFjaygpIGNvbnN0IHsgcmV0dXJuIG1fY29sbGVjdG9yU3RhY2s7IH0KKyAgICBjb25z
dCBNYXJrU3RhY2tBcnJheSYgbXV0YXRvck1hcmtTdGFjaygpIGNvbnN0IHsgcmV0dXJuIG1fbXV0
YXRvclN0YWNrOyB9CisKKyAgICBib29sIGlzRW1wdHkoKSB7IHJldHVybiBtX2NvbGxlY3RvclN0
YWNrLmlzRW1wdHkoKSAmJiBtX211dGF0b3JTdGFjay5pc0VtcHR5KCk7IH0KKworICAgIFZNJiB2
bSgpOworICAgIGNvbnN0IFZNJiB2bSgpIGNvbnN0OworICAgIEhlYXAqIGhlYXAoKSBjb25zdDsK
KworICAgIHZpcnR1YWwgdm9pZCBhcHBlbmQoY29uc3QgQ29uc2VydmF0aXZlUm9vdHMmKSA9IDA7
CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBUcmFpdHM+IHZvaWQgYXBwZW5k
KGNvbnN0IFdyaXRlQmFycmllckJhc2U8VCwgVHJhaXRzPiYpOworICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIFRyYWl0cz4gdm9pZCBhcHBlbmRIaWRkZW4oY29uc3QgV3JpdGVCYXJy
aWVyQmFzZTxULCBUcmFpdHM+Jik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSXRlcmF0b3I+IHZv
aWQgYXBwZW5kKEl0ZXJhdG9yIGJlZ2luICwgSXRlcmF0b3IgZW5kKTsKKyAgICBBTFdBWVNfSU5M
SU5FIHZvaWQgYXBwZW5kVmFsdWVzKGNvbnN0IFdyaXRlQmFycmllckJhc2U8VW5rbm93biwgUmF3
VmFsdWVUcmFpdHM8VW5rbm93bj4+Kiwgc2l6ZV90IGNvdW50KTsKKyAgICBBTFdBWVNfSU5MSU5F
IHZvaWQgYXBwZW5kVmFsdWVzSGlkZGVuKGNvbnN0IFdyaXRlQmFycmllckJhc2U8VW5rbm93biwg
UmF3VmFsdWVUcmFpdHM8VW5rbm93bj4+Kiwgc2l6ZV90IGNvdW50KTsKKworICAgIC8vIFRoZXNl
IGRvbid0IHJlcXVpcmUgeW91IHRvIHByb3ZlIHRoYXQgeW91IGhhdmUgYSBXcml0ZUJhcnJpZXI8
Pi4gVGhhdCBtYWtlcyBzZW5zZQorICAgIC8vIGZvcjoKKyAgICAvLworICAgIC8vIC0gcm9vdHMu
CisgICAgLy8gLSBzb3BoaXN0aWNhdGVkIGRhdGEgc3RydWN0dXJlcyB0aGF0IGJhcnJpZXIgdGhy
b3VnaCBvdGhlciBtZWFucyAobGlrZSBERkc6OlBsYW4gYW5kCisgICAgLy8gICBmcmllbmRzKS4K
KyAgICAvLworICAgIC8vIElmIHlvdSBhcmUgbm90IGEgcm9vdCBhbmQgeW91IGRvbid0IGtub3cg
d2hhdCBraW5kIG9mIGJhcnJpZXIgeW91IGhhdmUsIHRoZW4geW91CisgICAgLy8gc2hvdWxkbid0
IGNhbGwgdGhlc2UgbWV0aG9kcy4KKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgYXBwZW5kVW5iYXJy
aWVyZWQoSlNWYWx1ZSk7CisgICAgQUxXQVlTX0lOTElORSB2b2lkIGFwcGVuZFVuYmFycmllcmVk
KEpTVmFsdWUqLCBzaXplX3QpOworICAgIHZpcnR1YWwgdm9pZCBhcHBlbmRVbmJhcnJpZXJlZChK
U0NlbGwqKSA9IDA7CisKKyAgICBpbmxpbmUgYm9vbCBhZGRPcGFxdWVSb290KHZvaWQqKTsgLy8g
UmV0dXJucyB0cnVlIGlmIHRoZSByb290IHdhcyBuZXcuCisgICAgaW5saW5lIGJvb2wgY29udGFp
bnNPcGFxdWVSb290KHZvaWQqKSBjb25zdDsKKyAgICB2b2lkIHNldElnbm9yZU5ld09wYXF1ZVJv
b3RzKGJvb2wgdmFsdWUpIHsgbV9pZ25vcmVOZXdPcGFxdWVSb290cyA9IHZhbHVlOyB9CisKKyAg
ICB2aXJ0dWFsIGJvb2wgaXNGaXJzdFZpc2l0KCkgY29uc3QgPSAwOworCisgICAgdmlydHVhbCBi
b29sIGlzTWFya2VkKGNvbnN0IHZvaWQqKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBib29sIGlz
TWFya2VkKE1hcmtlZEJsb2NrJiwgSGVhcENlbGwqKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBi
b29sIGlzTWFya2VkKFByZWNpc2VBbGxvY2F0aW9uJiwgSGVhcENlbGwqKSBjb25zdCA9IDA7CisK
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIHZvaWQgYXBwZW5kKGNvbnN0IFdlYWs8VD4m
KTsKKworICAgIEFMV0FZU19JTkxJTkUgdm9pZCBhcHBlbmRIaWRkZW5VbmJhcnJpZXJlZChKU1Zh
bHVlKTsKKyAgICB2aXJ0dWFsIHZvaWQgYXBwZW5kSGlkZGVuVW5iYXJyaWVyZWQoSlNDZWxsKikg
PSAwOworCisgICAgc2l6ZV90IHZpc2l0Q291bnQoKSBjb25zdCB7IHJldHVybiBtX3Zpc2l0Q291
bnQ7IH0KKworICAgIHZvaWQgYWRkVG9WaXNpdENvdW50KHNpemVfdCB2YWx1ZSkgeyBtX3Zpc2l0
Q291bnQgKz0gdmFsdWU7IH0KKworICAgIHZpcnR1YWwgdm9pZCBhZGRQYXJhbGxlbENvbnN0cmFp
bnRUYXNrKFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoQWJzdHJhY3RTbG90VmlzaXRvciYpPj4pID0g
MDsKKyAgICB2aXJ0dWFsIHZvaWQgYWRkUGFyYWxsZWxDb25zdHJhaW50VGFzayhSZWZQdHI8U2hh
cmVkVGFzazx2b2lkKFNsb3RWaXNpdG9yJik+PikgPSAwOworCisgICAgdmlydHVhbCB2b2lkIG1h
cmtBdXhpbGlhcnkoY29uc3Qgdm9pZCogYmFzZSkgPSAwOworCisgICAgdmlydHVhbCB2b2lkIHJl
cG9ydEV4dHJhTWVtb3J5VmlzaXRlZChzaXplX3QpID0gMDsKKyNpZiBFTkFCTEUoUkVTT1VSQ0Vf
VVNBR0UpCisgICAgdmlydHVhbCB2b2lkIHJlcG9ydEV4dGVybmFsTWVtb3J5VmlzaXRlZChzaXpl
X3QpID0gMDsKKyNlbmRpZgorCisgICAgdmlydHVhbCB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBj
b25zdCA9IDA7CisKKyAgICBSb290TWFya1JlYXNvbiByb290TWFya1JlYXNvbigpIGNvbnN0IHsg
cmV0dXJuIG1fcm9vdE1hcmtSZWFzb247IH0KKyAgICB2b2lkIHNldFJvb3RNYXJrUmVhc29uKFJv
b3RNYXJrUmVhc29uIHJlYXNvbikgeyBtX3Jvb3RNYXJrUmVhc29uID0gcmVhc29uOyB9CisKKyAg
ICB2aXJ0dWFsIGJvb2wgbXV0YXRvcklzU3RvcHBlZCgpIGNvbnN0ID0gMDsKKworICAgIHZpcnR1
YWwgdm9pZCBkaWRSYWNlKGNvbnN0IFZpc2l0UmFjZUtleSYpID0gMDsKKyAgICB2b2lkIGRpZFJh
Y2UoSlNDZWxsKiBjZWxsLCBjb25zdCBjaGFyKiByZWFzb24pIHsgZGlkUmFjZShWaXNpdFJhY2VL
ZXkoY2VsbCwgcmVhc29uKSk7IH0KKworICAgIHZpcnR1YWwgdm9pZCB2aXNpdEFzQ29uc3RyYWlu
dChjb25zdCBKU0NlbGwqKSA9IDA7CisKKyAgICBjb25zdCBjaGFyKiBjb2RlTmFtZSgpIGNvbnN0
IHsgcmV0dXJuIG1fY29kZU5hbWUuZGF0YSgpOyB9CisKK3Byb3RlY3RlZDoKKyAgICBpbmxpbmUg
QWJzdHJhY3RTbG90VmlzaXRvcihIZWFwJiwgQ1N0cmluZyBjb2RlTmFtZSwgQ29uY3VycmVudFB0
ckhhc2hTZXQmKTsKKworICAgIEhlYXBDZWxsKiBwYXJlbnRDZWxsKCkgY29uc3Q7CisgICAgdm9p
ZCByZXNldCgpOworCisgICAgTWFya1N0YWNrQXJyYXkgbV9jb2xsZWN0b3JTdGFjazsKKyAgICBN
YXJrU3RhY2tBcnJheSBtX211dGF0b3JTdGFjazsKKworICAgIHNpemVfdCBtX3Zpc2l0Q291bnQg
eyAwIH07CisKKyAgICBIZWFwJiBtX2hlYXA7CisgICAgQ29udGV4dCogbV9jb250ZXh0IHsgbnVs
bHB0ciB9OworICAgIENTdHJpbmcgbV9jb2RlTmFtZTsKKworICAgIE1hcmtpbmdDb25zdHJhaW50
KiBtX2N1cnJlbnRDb25zdHJhaW50IHsgbnVsbHB0ciB9OworICAgIE1hcmtpbmdDb25zdHJhaW50
U29sdmVyKiBtX2N1cnJlbnRTb2x2ZXIgeyBudWxscHRyIH07CisgICAgQ29uY3VycmVudFB0ckhh
c2hTZXQmIG1fb3BhcXVlUm9vdHM7CisKKyAgICBSb290TWFya1JlYXNvbiBtX3Jvb3RNYXJrUmVh
c29uIHsgUm9vdE1hcmtSZWFzb246Ok5vbmUgfTsKKyAgICBib29sIG1fc3VwcHJlc3NWZXJpZmll
ciB7IGZhbHNlIH07CisgICAgYm9vbCBtX2lnbm9yZU5ld09wYXF1ZVJvb3RzIHsgZmFsc2UgfTsg
Ly8gVXNlZnVsIGFzIGEgZGVidWdnaW5nIG1vZGUuCisKKyAgICBmcmllbmQgY2xhc3MgTWFya2lu
Z0NvbnN0cmFpbnRTb2x2ZXI7Cit9OworCitjbGFzcyBTZXRSb290TWFya1JlYXNvblNjb3BlIHsK
K3B1YmxpYzoKKyAgICBTZXRSb290TWFya1JlYXNvblNjb3BlKEFic3RyYWN0U2xvdFZpc2l0b3Im
IHZpc2l0b3IsIFJvb3RNYXJrUmVhc29uIHJlYXNvbikKKyAgICAgICAgOiBtX3Zpc2l0b3Iodmlz
aXRvcikKKyAgICAgICAgLCBtX3ByZXZpb3VzUmVhc29uKHZpc2l0b3Iucm9vdE1hcmtSZWFzb24o
KSkKKyAgICB7CisgICAgICAgIG1fdmlzaXRvci5zZXRSb290TWFya1JlYXNvbihyZWFzb24pOwor
ICAgIH0KKworICAgIH5TZXRSb290TWFya1JlYXNvblNjb3BlKCkKKyAgICB7CisgICAgICAgIG1f
dmlzaXRvci5zZXRSb290TWFya1JlYXNvbihtX3ByZXZpb3VzUmVhc29uKTsKKyAgICB9CisKK3By
aXZhdGU6CisgICAgQWJzdHJhY3RTbG90VmlzaXRvciYgbV92aXNpdG9yOworICAgIFJvb3RNYXJr
UmVhc29uIG1fcHJldmlvdXNSZWFzb247Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Fic3RyYWN0U2xvdFZpc2l0b3JJbmxpbmVzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQWJzdHJhY3RTbG90Vmlz
aXRvcklubGluZXMuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9BYnN0cmFjdFNsb3RWaXNpdG9ySW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MTU0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3By
YWdtYSBvbmNlCisKKyNpbmNsdWRlICJBYnN0cmFjdFNsb3RWaXNpdG9yLmgiCisjaW5jbHVkZSAi
SGVhcC5oIgorI2luY2x1ZGUgIldlYWtJbmxpbmVzLmgiCisjaW5jbHVkZSAiV3JpdGVCYXJyaWVy
LmgiCisKK25hbWVzcGFjZSBKU0MgeworCitpbmxpbmUgQWJzdHJhY3RTbG90VmlzaXRvcjo6Q29u
dGV4dDo6Q29udGV4dChBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBIZWFwQ2VsbCogY2Vs
bCkKKyAgICA6IG1fdmlzaXRvcih2aXNpdG9yKQorICAgICwgbV9jZWxsKGNlbGwpCit7CisgICAg
bV9wcmV2aW91cyA9IG1fdmlzaXRvci5tX2NvbnRleHQ7CisgICAgbV92aXNpdG9yLm1fY29udGV4
dCA9IHRoaXM7Cit9CisKK2lubGluZSBBYnN0cmFjdFNsb3RWaXNpdG9yOjpDb250ZXh0Ojp+Q29u
dGV4dCgpCit7CisgICAgbV92aXNpdG9yLm1fY29udGV4dCA9IG1fcHJldmlvdXM7Cit9CisKK2lu
bGluZSBBYnN0cmFjdFNsb3RWaXNpdG9yOjpBYnN0cmFjdFNsb3RWaXNpdG9yKEhlYXAmIGhlYXAs
IENTdHJpbmcgY29kZU5hbWUsIENvbmN1cnJlbnRQdHJIYXNoU2V0JiBvcGFxdWVSb290cykKKyAg
ICA6IG1faGVhcChoZWFwKQorICAgICwgbV9jb2RlTmFtZShjb2RlTmFtZSkKKyAgICAsIG1fb3Bh
cXVlUm9vdHMob3BhcXVlUm9vdHMpCit7Cit9CisKK2lubGluZSBIZWFwKiBBYnN0cmFjdFNsb3RW
aXNpdG9yOjpoZWFwKCkgY29uc3QKK3sKKyAgICByZXR1cm4gJm1faGVhcDsKK30KKworaW5saW5l
IFZNJiBBYnN0cmFjdFNsb3RWaXNpdG9yOjp2bSgpCit7CisgICAgcmV0dXJuIG1faGVhcC52bSgp
OworfQorCitpbmxpbmUgY29uc3QgVk0mIEFic3RyYWN0U2xvdFZpc2l0b3I6OnZtKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gbV9oZWFwLnZtKCk7Cit9CisKK2lubGluZSBib29sIEFic3RyYWN0U2xv
dFZpc2l0b3I6OmFkZE9wYXF1ZVJvb3Qodm9pZCogcHRyKQoreworICAgIGlmICghcHRyKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG1faWdub3JlTmV3T3BhcXVlUm9vdHMpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIW1fb3BhcXVlUm9vdHMuYWRkKHB0cikpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICBtX3Zpc2l0Q291bnQrKzsKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKworaW5saW5lIGJvb2wgQWJzdHJhY3RTbG90VmlzaXRvcjo6Y29udGFpbnNPcGFxdWVSb290
KHZvaWQqIHB0cikgY29uc3QKK3sKKyAgICByZXR1cm4gbV9vcGFxdWVSb290cy5jb250YWlucyhw
dHIpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorQUxXQVlTX0lOTElORSB2b2lkIEFic3Ry
YWN0U2xvdFZpc2l0b3I6OmFwcGVuZChjb25zdCBXZWFrPFQ+JiB3ZWFrKQoreworICAgIGFwcGVu
ZFVuYmFycmllcmVkKHdlYWsuZ2V0KCkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBl
bmFtZSBUcmFpdHM+CitBTFdBWVNfSU5MSU5FIHZvaWQgQWJzdHJhY3RTbG90VmlzaXRvcjo6YXBw
ZW5kKGNvbnN0IFdyaXRlQmFycmllckJhc2U8VCwgVHJhaXRzPiYgc2xvdCkKK3sKKyAgICBhcHBl
bmRVbmJhcnJpZXJlZChzbG90LmdldCgpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlw
ZW5hbWUgVHJhaXRzPgorQUxXQVlTX0lOTElORSB2b2lkIEFic3RyYWN0U2xvdFZpc2l0b3I6OmFw
cGVuZEhpZGRlbihjb25zdCBXcml0ZUJhcnJpZXJCYXNlPFQsIFRyYWl0cz4mIHNsb3QpCit7Cisg
ICAgYXBwZW5kSGlkZGVuVW5iYXJyaWVyZWQoc2xvdC5nZXQoKSk7Cit9CisKK0FMV0FZU19JTkxJ
TkUgdm9pZCBBYnN0cmFjdFNsb3RWaXNpdG9yOjphcHBlbmRIaWRkZW5VbmJhcnJpZXJlZChKU1Zh
bHVlIHZhbHVlKQoreworICAgIGlmICh2YWx1ZS5pc0NlbGwoKSkKKyAgICAgICAgYXBwZW5kSGlk
ZGVuVW5iYXJyaWVyZWQodmFsdWUuYXNDZWxsKCkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBJ
dGVyYXRvcj4KK0FMV0FZU19JTkxJTkUgdm9pZCBBYnN0cmFjdFNsb3RWaXNpdG9yOjphcHBlbmQo
SXRlcmF0b3IgYmVnaW4sIEl0ZXJhdG9yIGVuZCkKK3sKKyAgICBmb3IgKGF1dG8gaXQgPSBiZWdp
bjsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICBhcHBlbmQoKml0KTsKK30KKworQUxXQVlTX0lO
TElORSB2b2lkIEFic3RyYWN0U2xvdFZpc2l0b3I6OmFwcGVuZFZhbHVlcyhjb25zdCBXcml0ZUJh
cnJpZXJCYXNlPFVua25vd24+KiBiYXJyaWVycywgc2l6ZV90IGNvdW50KQoreworICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgY291bnQ7ICsraSkKKyAgICAgICAgYXBwZW5kKGJhcnJpZXJzW2ld
KTsKK30KKworQUxXQVlTX0lOTElORSB2b2lkIEFic3RyYWN0U2xvdFZpc2l0b3I6OmFwcGVuZFZh
bHVlc0hpZGRlbihjb25zdCBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+KiBiYXJyaWVycywgc2l6
ZV90IGNvdW50KQoreworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY291bnQ7ICsraSkKKyAg
ICAgICAgYXBwZW5kSGlkZGVuKGJhcnJpZXJzW2ldKTsKK30KKworQUxXQVlTX0lOTElORSB2b2lk
IEFic3RyYWN0U2xvdFZpc2l0b3I6OmFwcGVuZFVuYmFycmllcmVkKEpTVmFsdWUgdmFsdWUpCit7
CisgICAgaWYgKHZhbHVlLmlzQ2VsbCgpKQorICAgICAgICBhcHBlbmRVbmJhcnJpZXJlZCh2YWx1
ZS5hc0NlbGwoKSk7Cit9CisKK0FMV0FZU19JTkxJTkUgdm9pZCBBYnN0cmFjdFNsb3RWaXNpdG9y
OjphcHBlbmRVbmJhcnJpZXJlZChKU1ZhbHVlKiBzbG90LCBzaXplX3QgY291bnQpCit7CisgICAg
Zm9yIChzaXplX3QgaSA9IGNvdW50OyBpLS07KQorICAgICAgICBhcHBlbmRVbmJhcnJpZXJlZChz
bG90W2ldKTsKK30KKworQUxXQVlTX0lOTElORSBIZWFwQ2VsbCogQWJzdHJhY3RTbG90VmlzaXRv
cjo6cGFyZW50Q2VsbCgpIGNvbnN0Cit7CisgICAgaWYgKCFtX2NvbnRleHQpCisgICAgICAgIHJl
dHVybiBudWxscHRyOworICAgIHJldHVybiBtX2NvbnRleHQtPmNlbGwoKTsKK30KKworQUxXQVlT
X0lOTElORSB2b2lkIEFic3RyYWN0U2xvdFZpc2l0b3I6OnJlc2V0KCkKK3sKKyAgICBtX3Zpc2l0
Q291bnQgPSAwOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0hhbmRsZVNldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvSGFuZGxlU2V0LmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvSGFuZGxlU2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU2LDcg
KzU2LDggQEAgdm9pZCBIYW5kbGVTZXQ6Omdyb3coKQogICAgIH0KIH0KIAotdm9pZCBIYW5kbGVT
ZXQ6OnZpc2l0U3Ryb25nSGFuZGxlcyhTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5
cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEhhbmRsZVNldDo6dmlzaXRTdHJvbmdIYW5kbGVzKFZpc2l0
b3ImIHZpc2l0b3IpCiB7CiAgICAgTm9kZSogZW5kID0gbV9zdHJvbmdMaXN0LmVuZCgpOwogICAg
IGZvciAoTm9kZSogbm9kZSA9IG1fc3Ryb25nTGlzdC5iZWdpbigpOyBub2RlICE9IGVuZDsgbm9k
ZSA9IG5vZGUtPm5leHQoKSkgewpAQCAtNjcsNiArNjgsOSBAQCB2b2lkIEhhbmRsZVNldDo6dmlz
aXRTdHJvbmdIYW5kbGVzKFNsb3RWCiAgICAgfQogfQogCit0ZW1wbGF0ZSB2b2lkIEhhbmRsZVNl
dDo6dmlzaXRTdHJvbmdIYW5kbGVzKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZv
aWQgSGFuZGxlU2V0Ojp2aXNpdFN0cm9uZ0hhbmRsZXMoU2xvdFZpc2l0b3ImKTsKKwogdm9pZCBI
YW5kbGVTZXQ6OndyaXRlQmFycmllcihIYW5kbGVTbG90IHNsb3QsIGNvbnN0IEpTVmFsdWUmIHZh
bHVlKQogewogICAgIGlmICghdmFsdWUgPT0gISpzbG90ICYmIHNsb3QtPmlzQ2VsbCgpID09IHZh
bHVlLmlzQ2VsbCgpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGFuZGxlU2V0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGFuZGxlU2V0LmgJ
KHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hhbmRsZVNl
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMS0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzUsMTAgKzM1LDEwIEBACiAKIG5hbWVzcGFjZSBKU0Mg
ewogCitjbGFzcyBBYnN0cmFjdFNsb3RWaXNpdG9yOwogY2xhc3MgSGFuZGxlU2V0OwogY2xhc3Mg
Vk07CiBjbGFzcyBKU1ZhbHVlOwotY2xhc3MgU2xvdFZpc2l0b3I7CiAKIGNsYXNzIEhhbmRsZU5v
ZGUgewogcHVibGljOgpAQCAtNzMsNyArNzMsNyBAQCBwdWJsaWM6CiAgICAgSGFuZGxlU2xvdCBh
bGxvY2F0ZSgpOwogICAgIHZvaWQgZGVhbGxvY2F0ZShIYW5kbGVTbG90KTsKIAotICAgIHZvaWQg
dmlzaXRTdHJvbmdIYW5kbGVzKFNsb3RWaXNpdG9yJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
VmlzaXRvcj4gdm9pZCB2aXNpdFN0cm9uZ0hhbmRsZXMoVmlzaXRvciYpOwogCiAgICAgSlNfRVhQ
T1JUX1BSSVZBVEUgdm9pZCB3cml0ZUJhcnJpZXIoSGFuZGxlU2xvdCwgY29uc3QgSlNWYWx1ZSYp
OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAkocmV2aXNpb24gMjcyOTAy
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTcyLDYgKzcyLDcgQEAKICNpbmNsdWRlICJUeXBlUHJvZmlsZXIuaCIKICNpbmNsdWRlICJU
eXBlUHJvZmlsZXJMb2cuaCIKICNpbmNsdWRlICJWTS5oIgorI2luY2x1ZGUgIlZlcmlmaWVyU2xv
dFZpc2l0b3JJbmxpbmVzLmgiCiAjaW5jbHVkZSAiV2Vha01hcEltcGxJbmxpbmVzLmgiCiAjaW5j
bHVkZSAiV2Vha1NldElubGluZXMuaCIKICNpbmNsdWRlIDxhbGdvcml0aG0+CkBAIC02NDMsMTkg
KzY0NCwxOSBAQCB2b2lkIEhlYXA6OmNvbXBsZXRlQWxsSklUUGxhbnMoKQogICAgIERGRzo6Y29t
cGxldGVBbGxQbGFuc0ZvclZNKG1fdm0pOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgot
dm9pZCBIZWFwOjppdGVyYXRlRXhlY3V0aW5nQW5kQ29tcGlsaW5nQ29kZUJsb2Nrcyhjb25zdCBG
dW5jJiBmdW5jKQordGVtcGxhdGU8dHlwZW5hbWUgRnVuYywgdHlwZW5hbWUgVmlzaXRvcj4KK3Zv
aWQgSGVhcDo6aXRlcmF0ZUV4ZWN1dGluZ0FuZENvbXBpbGluZ0NvZGVCbG9ja3MoVmlzaXRvciYg
dmlzaXRvciwgY29uc3QgRnVuYyYgZnVuYykKIHsKICAgICBtX2NvZGVCbG9ja3MtPml0ZXJhdGVD
dXJyZW50bHlFeGVjdXRpbmcoZnVuYyk7CiAgICAgaWYgKE9wdGlvbnM6OnVzZUpJVCgpKQotICAg
ICAgICBERkc6Oml0ZXJhdGVDb2RlQmxvY2tzRm9yR0MobV92bSwgZnVuYyk7CisgICAgICAgIERG
Rzo6aXRlcmF0ZUNvZGVCbG9ja3NGb3JHQyh2aXNpdG9yLCBtX3ZtLCBmdW5jKTsKIH0KIAotdGVt
cGxhdGU8dHlwZW5hbWUgRnVuYz4KLXZvaWQgSGVhcDo6aXRlcmF0ZUV4ZWN1dGluZ0FuZENvbXBp
bGluZ0NvZGVCbG9ja3NXaXRob3V0SG9sZGluZ0xvY2tzKGNvbnN0IEZ1bmMmIGZ1bmMpCit0ZW1w
bGF0ZTx0eXBlbmFtZSBGdW5jLCB0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBIZWFwOjppdGVyYXRl
RXhlY3V0aW5nQW5kQ29tcGlsaW5nQ29kZUJsb2Nrc1dpdGhvdXRIb2xkaW5nTG9ja3MoVmlzaXRv
ciYgdmlzaXRvciwgY29uc3QgRnVuYyYgZnVuYykKIHsKICAgICBWZWN0b3I8Q29kZUJsb2NrKiwg
MjU2PiBjb2RlQmxvY2tzOwotICAgIGl0ZXJhdGVFeGVjdXRpbmdBbmRDb21waWxpbmdDb2RlQmxv
Y2tzKAorICAgIGl0ZXJhdGVFeGVjdXRpbmdBbmRDb21waWxpbmdDb2RlQmxvY2tzKHZpc2l0b3Is
CiAgICAgICAgIFsmXSAoQ29kZUJsb2NrKiBjb2RlQmxvY2spIHsKICAgICAgICAgICAgIGNvZGVC
bG9ja3MuYXBwZW5kKGNvZGVCbG9jayk7CiAgICAgICAgIH0pOwpAQCAtNzMzLDE0ICs3MzQsNiBA
QCB2b2lkIEhlYXA6OnJlbW92ZURlYWRDb21waWxlcldvcmtsaXN0RW50CiAjZW5kaWYKIH0KIAot
Ym9vbCBIZWFwOjppc0FuYWx5emluZ0hlYXAoKSBjb25zdAotewotICAgIEhlYXBQcm9maWxlciog
aGVhcFByb2ZpbGVyID0gbV92bS5oZWFwUHJvZmlsZXIoKTsKLSAgICBpZiAoVU5MSUtFTFkoaGVh
cFByb2ZpbGVyKSkKLSAgICAgICAgcmV0dXJuIGhlYXBQcm9maWxlci0+YWN0aXZlSGVhcEFuYWx5
emVyKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCiBzdHJ1Y3QgR2F0aGVyRXh0cmFIZWFwRGF0
YSA6IE1hcmtlZEJsb2NrOjpDb3VudEZ1bmN0b3IgewogICAgIEdhdGhlckV4dHJhSGVhcERhdGEo
Vk0mIHZtLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQogICAgICAgICA6IG1fdm0odm0pCkBAIC0x
NDg1LDE0ICsxNDc4LDIxIEBAIE5FVkVSX0lOTElORSBib29sIEhlYXA6OnJ1bkVuZFBoYXNlKEdD
Q28KICAgICB9CiAgICAgbV9oZWxwZXJDbGllbnQuZmluaXNoKCk7CiAgICAgCi0gICAgaXRlcmF0
ZUV4ZWN1dGluZ0FuZENvbXBpbGluZ0NvZGVCbG9ja3MoCisgICAgQVNTRVJUKG1fbXV0YXRvck1h
cmtTdGFjay0+aXNFbXB0eSgpKTsKKyAgICBBU1NFUlQobV9yYWNlTWFya1N0YWNrLT5pc0VtcHR5
KCkpOworCisgICAgU2xvdFZpc2l0b3ImIHZpc2l0b3IgPSAqbV9jb2xsZWN0b3JTbG90VmlzaXRv
cjsKKyAgICBpdGVyYXRlRXhlY3V0aW5nQW5kQ29tcGlsaW5nQ29kZUJsb2Nrcyh2aXNpdG9yLAog
ICAgICAgICBbJl0gKENvZGVCbG9jayogY29kZUJsb2NrKSB7CiAgICAgICAgICAgICB3cml0ZUJh
cnJpZXIoY29kZUJsb2NrKTsKICAgICAgICAgfSk7Ci0gICAgICAgIAorCiAgICAgdXBkYXRlT2Jq
ZWN0Q291bnRzKCk7CiAgICAgZW5kTWFya2luZygpOwogCisgICAgaWYgKFVOTElLRUxZKE9wdGlv
bnM6OnZlcmlmeUdDKCkpKQorICAgICAgICB2ZXJpZnlHQygpOworCiAgICAgaWYgKFVOTElLRUxZ
KG1fdmVyaWZpZXIpKSB7CiAgICAgICAgIG1fdmVyaWZpZXItPmdhdGhlckxpdmVDZWxscyhIZWFw
VmVyaWZpZXI6OlBoYXNlOjpBZnRlck1hcmtpbmcpOwogICAgICAgICBtX3ZlcmlmaWVyLT52ZXJp
ZnkoSGVhcFZlcmlmaWVyOjpQaGFzZTo6QWZ0ZXJNYXJraW5nKTsKQEAgLTIxNzAsNiArMjE3MCwx
MiBAQCB2b2lkIEhlYXA6OnN1c3BlbmRDb21waWxlclRocmVhZHMoKQogCiB2b2lkIEhlYXA6Ondp
bGxTdGFydENvbGxlY3Rpb24oKQogeworICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjp2ZXJpZnlH
QygpKSkgeworICAgICAgICBtX3ZlcmlmaWVyU2xvdFZpc2l0b3IgPSBtYWtlVW5pcXVlPFZlcmlm
aWVyU2xvdFZpc2l0b3I+KCp0aGlzKTsKKyAgICAgICAgQVNTRVJUKCFtX2lzTWFya2luZ0ZvckdD
VmVyaWZpZXIpOworLy8gICAgICAgIFJFTEVBU0VfQVNTRVJUKCFtX2lzTWFya2luZ0ZvckdDVmVy
aWZpZXIpOyAvLyBtbGFtIFRFU1Qgb25seQorICAgIH0KKwogICAgIGRhdGFMb2dJZihPcHRpb25z
Ojpsb2dHQygpLCAiPT4gIik7CiAgICAgCiAgICAgaWYgKHNob3VsZERvRnVsbENvbGxlY3Rpb24o
KSkgewpAQCAtMjY5NywxMyArMjcwMyw0NyBAQCB2b2lkIEhlYXA6OmRpZEZyZWVCbG9jayhzaXpl
X3QgY2FwYWNpdHkpCiAjZW5kaWYKIH0KIAorLy8gVGhlIGZvbGxvd2luZyBhcmUgcHVsbGVkIG91
dCBvZiB0aGUgYm9keSBvZiBIZWFwOjphZGRDb3JlQ29uc3RyYWludHMoKSBvbmx5CisvLyBiZWNh
dXNlIHRoZSBXaW5DYWlybyBwb3J0IGlzIG5vdCBhYmxlIHRvIGhhbmRsZSAjaWYncyBpbnNpZGUg
dGhlIGJvZHkgb2YgdGhlCisvLyBsYW1iZGEgcGFzc2VkIGludG8gdGhlIE1BS0VfTUFSS0lOR19D
T05TVFJBSU5UX0VYRUNVVE9SX1BBSVIgbWFjcm8uIFRoaXMgd29ya3MKKy8vIGFyb3VuZCB0aGF0
IGlzc3VlLgorCisjaWYgRU5BQkxFKFNBTVBMSU5HX1BST0ZJTEVSKQorY29uc3RleHByIGJvb2wg
b2JqY0FQSUVuYWJsZWQgPSB0cnVlOworI2Vsc2UKK2NvbnN0ZXhwciBib29sIG9iamNBUElFbmFi
bGVkID0gZmFsc2U7CitzdGF0aWMgdm9pZCBzY2FuRXh0ZXJuYWxSZW1lbWJlcmVkU2V0KFZNJiwg
QWJzdHJhY3RTbG90VmlzaXRvciYpIHsgfQorI2VuZGlmCisKKyNpZiBFTkFCTEUoU0FNUExJTkdf
UFJPRklMRVIpCitjb25zdGV4cHIgYm9vbCBzYW1wbGluZ1Byb2ZpbGVyU3VwcG9ydGVkID0gdHJ1
ZTsKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXJ2aWNlU2FtcGxpbmdQcm9maWxlcihWTSYgdm0sIEFi
c3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgaWYgKFNhbXBsaW5nUHJvZmlsZXIq
IHNhbXBsaW5nUHJvZmlsZXIgPSB2bS5zYW1wbGluZ1Byb2ZpbGVyKCkpIHsKKyAgICAgICAgYXV0
byBsb2NrZXIgPSBob2xkTG9jayhzYW1wbGluZ1Byb2ZpbGVyLT5nZXRMb2NrKCkpOworICAgICAg
ICBzYW1wbGluZ1Byb2ZpbGVyLT5wcm9jZXNzVW52ZXJpZmllZFN0YWNrVHJhY2VzKGxvY2tlcik7
CisgICAgICAgIHNhbXBsaW5nUHJvZmlsZXItPnZpc2l0KHZpc2l0b3IpOworICAgICAgICBpZiAo
T3B0aW9uczo6bG9nR0MoKSA9PSBHQ0xvZ2dpbmc6OlZlcmJvc2UpCisgICAgICAgICAgICBkYXRh
TG9nKCJTYW1wbGluZyBQcm9maWxlciBkYXRhOlxuIiwgdmlzaXRvcik7CisgICAgfQorfTsKKyNl
bHNlCitjb25zdGV4cHIgYm9vbCBzYW1wbGluZ1Byb2ZpbGVyU3VwcG9ydGVkID0gZmFsc2U7Citz
dGF0aWMgdm9pZCBzZXJ2aWNlU2FtcGxpbmdQcm9maWxlcihWTSYsIEFic3RyYWN0U2xvdFZpc2l0
b3ImKSB7IH07CisjZW5kaWYKKwogdm9pZCBIZWFwOjphZGRDb3JlQ29uc3RyYWludHMoKQogewog
ICAgIG1fY29uc3RyYWludFNldC0+YWRkKAogICAgICAgICAiQ3MiLCAiQ29uc2VydmF0aXZlIFNj
YW4iLAotICAgICAgICBbdGhpcywgbGFzdFZlcnNpb24gPSBzdGF0aWNfY2FzdDx1aW50NjRfdD4o
MCldIChTbG90VmlzaXRvciYgdmlzaXRvcikgbXV0YWJsZSB7CisgICAgICAgIE1BS0VfTUFSS0lO
R19DT05TVFJBSU5UX0VYRUNVVE9SX1BBSVIoKFt0aGlzLCBsYXN0VmVyc2lvbiA9IHN0YXRpY19j
YXN0PHVpbnQ2NF90PigwKV0gKGF1dG8mIHZpc2l0b3IpIG11dGFibGUgewogICAgICAgICAgICAg
Ym9vbCBzaG91bGROb3RQcm9kdWNlV29yayA9IGxhc3RWZXJzaW9uID09IG1fcGhhc2VWZXJzaW9u
OwotICAgICAgICAgICAgaWYgKHNob3VsZE5vdFByb2R1Y2VXb3JrKQorCisgICAgICAgICAgICAv
LyBGb3IgdGhlIEdDIFZlcmZpZXIsIHdlIHdvdWxkIGxpa2UgdG8gdXNlIHRoZSBpZGVudGljYWwg
c2V0IG9mIGNvbnNlcnZhdGl2ZSByb290cworICAgICAgICAgICAgLy8gYXMgdGhlIHJlYWwgR0Mu
IE90aGVyd2lzZSwgdGhlIEdDIHZlcmlmaWVyIG1heSByZXBvcnQgZmFsc2UgbmVnYXRpdmVzIGR1
ZSB0bworICAgICAgICAgICAgLy8gdmFyaWF0aW9ucyBpbiBzdGFjayB2YWx1ZXMuIEZvciB0aGlz
IHNhbWUgcmVhc29uLCB3ZSB3aWxsIHNraXAgdGhpcyBjb25zdHJhaW50CisgICAgICAgICAgICAv
LyB3aGVuIHdlJ3JlIHJ1bm5pbmcgdGhlIEdDIHZlcmlmaWNhdGlvbiBpbiB0aGUgRW5kIHBoYXNl
LgorICAgICAgICAgICAgaWYgKHNob3VsZE5vdFByb2R1Y2VXb3JrIHx8IG1faXNNYXJraW5nRm9y
R0NWZXJpZmllcikKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAKICAgICAg
ICAgICAgIFRpbWluZ1Njb3BlIHByZUNvbnZlcmdlbmNlVGltaW5nU2NvcGUoKnRoaXMsICJDb25z
dHJhaW50OiBjb25zZXJ2YXRpdmUgc2NhbiIpOwpAQCAtMjcyMCwyNCArMjc2MCwyOSBAQCB2b2lk
IEhlYXA6OmFkZENvcmVDb25zdHJhaW50cygpCiAKICAgICAgICAgICAgICAgICBTZXRSb290TWFy
a1JlYXNvblNjb3BlIHJvb3RTY29wZSh2aXNpdG9yLCBSb290TWFya1JlYXNvbjo6Q29uc2VydmF0
aXZlU2Nhbik7CiAgICAgICAgICAgICAgICAgdmlzaXRvci5hcHBlbmQoY29uc2VydmF0aXZlUm9v
dHMpOworICAgICAgICAgICAgICAgIGlmIChVTkxJS0VMWShtX3ZlcmlmaWVyU2xvdFZpc2l0b3Ip
KQorICAgICAgICAgICAgICAgICAgICBtX3ZlcmlmaWVyU2xvdFZpc2l0b3ItPmFwcGVuZChjb25z
ZXJ2YXRpdmVSb290cyk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoT3B0aW9uczo6
dXNlSklUKCkpIHsKICAgICAgICAgICAgICAgICAvLyBKSVRTdHViUm91dGluZXMgbXVzdCBiZSB2
aXNpdGVkIGFmdGVyIHNjYW5uaW5nIENvbnNlcnZhdGl2ZVJvb3RzIHNpbmNlIEpJVFN0dWJSb3V0
aW5lcyBkZXBlbmQgb24gdGhlIGhvb2sgZXhlY3V0ZWQgZHVyaW5nIGdhdGhlcmluZyBDb25zZXJ2
YXRpdmVSb290cy4KICAgICAgICAgICAgICAgICBTZXRSb290TWFya1JlYXNvblNjb3BlIHJvb3RT
Y29wZSh2aXNpdG9yLCBSb290TWFya1JlYXNvbjo6SklUU3R1YlJvdXRpbmVzKTsKICAgICAgICAg
ICAgICAgICBtX2ppdFN0dWJSb3V0aW5lcy0+dHJhY2VNYXJrZWRTdHViUm91dGluZXModmlzaXRv
cik7CisgICAgICAgICAgICAgICAgaWYgKFVOTElLRUxZKG1fdmVyaWZpZXJTbG90VmlzaXRvcikp
IHsKKyAgICAgICAgICAgICAgICAgICAgQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvciA9ICpt
X3ZlcmlmaWVyU2xvdFZpc2l0b3I7CisgICAgICAgICAgICAgICAgICAgIG1faml0U3R1YlJvdXRp
bmVzLT50cmFjZU1hcmtlZFN0dWJSb3V0aW5lcyh2aXNpdG9yKTsKKyAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGxhc3RWZXJzaW9uID0g
bV9waGFzZVZlcnNpb247Ci0gICAgICAgIH0sCisgICAgICAgIH0pKSwKICAgICAgICAgQ29uc3Ry
YWludFZvbGF0aWxpdHk6OkdyZXllZEJ5RXhlY3V0aW9uKTsKICAgICAKICAgICBtX2NvbnN0cmFp
bnRTZXQtPmFkZCgKICAgICAgICAgIk1zciIsICJNaXNjIFNtYWxsIFJvb3RzIiwKLSAgICAgICAg
W3RoaXNdIChTbG90VmlzaXRvciYgdmlzaXRvcikgeworICAgICAgICBNQUtFX01BUktJTkdfQ09O
U1RSQUlOVF9FWEVDVVRPUl9QQUlSKChbdGhpc10gKGF1dG8mIHZpc2l0b3IpIHsKKyAgICAgICAg
ICAgIGlmIGNvbnN0ZXhwciAob2JqY0FQSUVuYWJsZWQpCisgICAgICAgICAgICAgICAgc2NhbkV4
dGVybmFsUmVtZW1iZXJlZFNldChtX3ZtLCB2aXNpdG9yKTsKIAotI2lmIEpTQ19PQkpDX0FQSV9F
TkFCTEVECi0gICAgICAgICAgICBzY2FuRXh0ZXJuYWxSZW1lbWJlcmVkU2V0KG1fdm0sIHZpc2l0
b3IpOwotI2VuZGlmCiAgICAgICAgICAgICBpZiAobV92bS5zbWFsbFN0cmluZ3MubmVlZHNUb0Jl
VmlzaXRlZCgqbV9jb2xsZWN0aW9uU2NvcGUpKSB7CiAgICAgICAgICAgICAgICAgU2V0Um9vdE1h
cmtSZWFzb25TY29wZSByb290U2NvcGUodmlzaXRvciwgUm9vdE1hcmtSZWFzb246OlN0cm9uZ1Jl
ZmVyZW5jZXMpOwogICAgICAgICAgICAgICAgIG1fdm0uc21hbGxTdHJpbmdzLnZpc2l0U3Ryb25n
UmVmZXJlbmNlcyh2aXNpdG9yKTsKQEAgLTI3NjMsNjggKzI4MDgsNjYgQEAgdm9pZCBIZWFwOjph
ZGRDb3JlQ29uc3RyYWludHMoKQogICAgICAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJy
aWVyZWQobV92bS5leGNlcHRpb24oKSk7CiAgICAgICAgICAgICAgICAgdmlzaXRvci5hcHBlbmRV
bmJhcnJpZXJlZChtX3ZtLmxhc3RFeGNlcHRpb24oKSk7CiAgICAgICAgICAgICB9Ci0gICAgICAg
IH0sCisgICAgICAgIH0pKSwKICAgICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHk6OkdyZXllZEJ5
RXhlY3V0aW9uKTsKICAgICAKICAgICBtX2NvbnN0cmFpbnRTZXQtPmFkZCgKICAgICAgICAgIlNo
IiwgIlN0cm9uZyBIYW5kbGVzIiwKLSAgICAgICAgW3RoaXNdIChTbG90VmlzaXRvciYgdmlzaXRv
cikgeworICAgICAgICBNQUtFX01BUktJTkdfQ09OU1RSQUlOVF9FWEVDVVRPUl9QQUlSKChbdGhp
c10gKGF1dG8mIHZpc2l0b3IpIHsKICAgICAgICAgICAgIFNldFJvb3RNYXJrUmVhc29uU2NvcGUg
cm9vdFNjb3BlKHZpc2l0b3IsIFJvb3RNYXJrUmVhc29uOjpTdHJvbmdIYW5kbGVzKTsKICAgICAg
ICAgICAgIG1faGFuZGxlU2V0LnZpc2l0U3Ryb25nSGFuZGxlcyh2aXNpdG9yKTsKLSAgICAgICAg
fSwKKyAgICAgICAgfSkpLAogICAgICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eTo6R3JleWVkQnlF
eGVjdXRpb24pOwogICAgIAogICAgIG1fY29uc3RyYWludFNldC0+YWRkKAogICAgICAgICAiRCIs
ICJEZWJ1Z2dlciIsCi0gICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsKKyAg
ICAgICAgTUFLRV9NQVJLSU5HX0NPTlNUUkFJTlRfRVhFQ1VUT1JfUEFJUigoW3RoaXNdIChhdXRv
JiB2aXNpdG9yKSB7CiAgICAgICAgICAgICBTZXRSb290TWFya1JlYXNvblNjb3BlIHJvb3RTY29w
ZSh2aXNpdG9yLCBSb290TWFya1JlYXNvbjo6RGVidWdnZXIpOwogCi0jaWYgRU5BQkxFKFNBTVBM
SU5HX1BST0ZJTEVSKQotICAgICAgICAgICAgaWYgKFNhbXBsaW5nUHJvZmlsZXIqIHNhbXBsaW5n
UHJvZmlsZXIgPSBtX3ZtLnNhbXBsaW5nUHJvZmlsZXIoKSkgewotICAgICAgICAgICAgICAgIGF1
dG8gbG9ja2VyID0gaG9sZExvY2soc2FtcGxpbmdQcm9maWxlci0+Z2V0TG9jaygpKTsKLSAgICAg
ICAgICAgICAgICBzYW1wbGluZ1Byb2ZpbGVyLT5wcm9jZXNzVW52ZXJpZmllZFN0YWNrVHJhY2Vz
KGxvY2tlcik7Ci0gICAgICAgICAgICAgICAgc2FtcGxpbmdQcm9maWxlci0+dmlzaXQodmlzaXRv
cik7Ci0gICAgICAgICAgICAgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkgPT0gR0NMb2dnaW5nOjpW
ZXJib3NlKQotICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJTYW1wbGluZyBQcm9maWxlciBk
YXRhOlxuIiwgdmlzaXRvcik7Ci0gICAgICAgICAgICB9Ci0jZW5kaWYgLy8gRU5BQkxFKFNBTVBM
SU5HX1BST0ZJTEVSKQorICAgICAgICAgICAgaWYgY29uc3RleHByIChzYW1wbGluZ1Byb2ZpbGVy
U3VwcG9ydGVkKQorICAgICAgICAgICAgICAgIHNlcnZpY2VTYW1wbGluZ1Byb2ZpbGVyKG1fdm0s
IHZpc2l0b3IpOwogCiAgICAgICAgICAgICBpZiAobV92bS50eXBlUHJvZmlsZXIoKSkKICAgICAg
ICAgICAgICAgICBtX3ZtLnR5cGVQcm9maWxlckxvZygpLT52aXNpdCh2aXNpdG9yKTsKICAgICAg
ICAgICAgIAogICAgICAgICAgICAgaWYgKGF1dG8qIHNoYWRvd0NoaWNrZW4gPSBtX3ZtLnNoYWRv
d0NoaWNrZW4oKSkKICAgICAgICAgICAgICAgICBzaGFkb3dDaGlja2VuLT52aXNpdENoaWxkcmVu
KHZpc2l0b3IpOwotICAgICAgICB9LAorICAgICAgICB9KSksCiAgICAgICAgIENvbnN0cmFpbnRW
b2xhdGlsaXR5OjpHcmV5ZWRCeUV4ZWN1dGlvbik7CiAgICAgCiAgICAgbV9jb25zdHJhaW50U2V0
LT5hZGQoCiAgICAgICAgICJXcyIsICJXZWFrIFNldHMiLAotICAgICAgICBbdGhpc10gKFNsb3RW
aXNpdG9yJiB2aXNpdG9yKSB7CisgICAgICAgIE1BS0VfTUFSS0lOR19DT05TVFJBSU5UX0VYRUNV
VE9SX1BBSVIoKFt0aGlzXSAoYXV0byYgdmlzaXRvcikgewogICAgICAgICAgICAgU2V0Um9vdE1h
cmtSZWFzb25TY29wZSByb290U2NvcGUodmlzaXRvciwgUm9vdE1hcmtSZWFzb246OldlYWtTZXRz
KTsKICAgICAgICAgICAgIG1fb2JqZWN0U3BhY2UudmlzaXRXZWFrU2V0cyh2aXNpdG9yKTsKLSAg
ICAgICAgfSwKKyAgICAgICAgfSkpLAogICAgICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eTo6R3Jl
eWVkQnlNYXJraW5nKTsKICAgICAKICAgICBtX2NvbnN0cmFpbnRTZXQtPmFkZCgKICAgICAgICAg
Ik8iLCAiT3V0cHV0IiwKLSAgICAgICAgW10gKFNsb3RWaXNpdG9yJiB2aXNpdG9yKSB7CisgICAg
ICAgIE1BS0VfTUFSS0lOR19DT05TVFJBSU5UX0VYRUNVVE9SX1BBSVIoKFtdIChhdXRvJiB2aXNp
dG9yKSB7CisgICAgICAgICAgICB1c2luZyBWaXNpdG9yID0gZGVjbHR5cGUodmlzaXRvcik7CiAg
ICAgICAgICAgICBWTSYgdm0gPSB2aXNpdG9yLnZtKCk7CiAKLSAgICAgICAgICAgIGF1dG8gY2Fs
bE91dHB1dENvbnN0cmFpbnQgPSBbXSAoU2xvdFZpc2l0b3ImIHZpc2l0b3IsIEhlYXBDZWxsKiBo
ZWFwQ2VsbCwgSGVhcENlbGw6OktpbmQpIHsKLSAgICAgICAgICAgICAgICBTZXRSb290TWFya1Jl
YXNvblNjb3BlIHJvb3RTY29wZSh2aXNpdG9yLCBSb290TWFya1JlYXNvbjo6T3V0cHV0KTsKLSAg
ICAgICAgICAgICAgICBWTSYgdm0gPSB2aXNpdG9yLnZtKCk7CisgICAgICAgICAgICAvLyBUaGUg
YHZpc2l0b3IyYCBhcmd1bWVudCBpcyBzdHJhbmdlbHkgbmFtZWQgYmVjYXVzZSB0aGUgV2luQ2Fp
cm8gcG9ydAorICAgICAgICAgICAgLy8gZ2V0cyBjb25mdXNlZCAgYW5kIHRoaW5rcyB3ZSdyZSB0
cnlpbmcgdG8gY2FwdHVyZSB0aGUgb3V0ZXIgdmlzaXRvcgorICAgICAgICAgICAgLy8gYXJnIGhl
cmUuIEdpdmluZyBpdCBhIHVuaXF1ZSBuYW1lIHdvcmtzIGFyb3VuZCB0aGlzIGlzc3VlLgorICAg
ICAgICAgICAgYXV0byBjYWxsT3V0cHV0Q29uc3RyYWludCA9IFtdIChWaXNpdG9yJiB2aXNpdG9y
MiwgSGVhcENlbGwqIGhlYXBDZWxsLCBIZWFwQ2VsbDo6S2luZCkgeworICAgICAgICAgICAgICAg
IFNldFJvb3RNYXJrUmVhc29uU2NvcGUgcm9vdFNjb3BlKHZpc2l0b3IyLCBSb290TWFya1JlYXNv
bjo6T3V0cHV0KTsKKyAgICAgICAgICAgICAgICBWTSYgdm0gPSB2aXNpdG9yMi52bSgpOwogICAg
ICAgICAgICAgICAgIEpTQ2VsbCogY2VsbCA9IHN0YXRpY19jYXN0PEpTQ2VsbCo+KGhlYXBDZWxs
KTsKLSAgICAgICAgICAgICAgICBjZWxsLT5tZXRob2RUYWJsZSh2bSktPnZpc2l0T3V0cHV0Q29u
c3RyYWludHMoY2VsbCwgdmlzaXRvcik7CisgICAgICAgICAgICAgICAgY2VsbC0+bWV0aG9kVGFi
bGUodm0pLT52aXNpdE91dHB1dENvbnN0cmFpbnRzKGNlbGwsIHZpc2l0b3IyKTsKICAgICAgICAg
ICAgIH07CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGF1dG8gYWRkID0gWyZdIChhdXRvJiBz
ZXQpIHsKLSAgICAgICAgICAgICAgICB2aXNpdG9yLmFkZFBhcmFsbGVsQ29uc3RyYWludFRhc2so
c2V0LmZvckVhY2hNYXJrZWRDZWxsSW5QYXJhbGxlbChjYWxsT3V0cHV0Q29uc3RyYWludCkpOwor
ICAgICAgICAgICAgICAgIFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoVmlzaXRvciYpPj4gdGFzayA9
IHNldC50ZW1wbGF0ZSBmb3JFYWNoTWFya2VkQ2VsbEluUGFyYWxsZWw8VmlzaXRvcj4oY2FsbE91
dHB1dENvbnN0cmFpbnQpOworICAgICAgICAgICAgICAgIHZpc2l0b3IuYWRkUGFyYWxsZWxDb25z
dHJhaW50VGFzayh0YXNrKTsKICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAKICAgICAgICAg
ICAgIGFkZCh2bS5leGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlc1dpdGhDb25zdHJhaW50cyk7CiAg
ICAgICAgICAgICBpZiAodm0ubV93ZWFrTWFwU3BhY2UpCiAgICAgICAgICAgICAgICAgYWRkKCp2
bS5tX3dlYWtNYXBTcGFjZSk7Ci0gICAgICAgIH0sCisgICAgICAgIH0pKSwKICAgICAgICAgQ29u
c3RyYWludFZvbGF0aWxpdHk6OkdyZXllZEJ5TWFya2luZywKICAgICAgICAgQ29uc3RyYWludFBh
cmFsbGVsaXNtOjpQYXJhbGxlbCk7CiAgICAgCkBAIC0yODMyLDcgKzI4NzUsNyBAQCB2b2lkIEhl
YXA6OmFkZENvcmVDb25zdHJhaW50cygpCiAgICAgaWYgKE9wdGlvbnM6OnVzZUpJVCgpKSB7CiAg
ICAgICAgIG1fY29uc3RyYWludFNldC0+YWRkKAogICAgICAgICAgICAgIkR3IiwgIkRGRyBXb3Jr
bGlzdHMiLAotICAgICAgICAgICAgW3RoaXNdIChTbG90VmlzaXRvciYgdmlzaXRvcikgeworICAg
ICAgICAgICAgTUFLRV9NQVJLSU5HX0NPTlNUUkFJTlRfRVhFQ1VUT1JfUEFJUigoW3RoaXNdIChh
dXRvJiB2aXNpdG9yKSB7CiAgICAgICAgICAgICAgICAgU2V0Um9vdE1hcmtSZWFzb25TY29wZSBy
b290U2NvcGUodmlzaXRvciwgUm9vdE1hcmtSZWFzb246OkRGR1dvcmtMaXN0cyk7CiAKICAgICAg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBERkc6Om51bWJlck9mV29ya2xpc3RzKCk7IGkt
LTspCkBAIC0yODQwLDcgKzI4ODMsNyBAQCB2b2lkIEhlYXA6OmFkZENvcmVDb25zdHJhaW50cygp
CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMgaXMgYWxt
b3N0IGNlcnRhaW5seSB1bm5lY2Vzc2FyeS4KICAgICAgICAgICAgICAgICAvLyBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY2ODI5Ci0gICAgICAgICAgICAgICAgREZH
OjppdGVyYXRlQ29kZUJsb2Nrc0ZvckdDKAorICAgICAgICAgICAgICAgIERGRzo6aXRlcmF0ZUNv
ZGVCbG9ja3NGb3JHQyh2aXNpdG9yLAogICAgICAgICAgICAgICAgICAgICBtX3ZtLAogICAgICAg
ICAgICAgICAgICAgICBbJl0gKENvZGVCbG9jayogY29kZUJsb2NrKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKGNvZGVCbG9jayk7CkBAIC0yODQ4
LDIzICsyODkxLDIzIEBAIHZvaWQgSGVhcDo6YWRkQ29yZUNvbnN0cmFpbnRzKCkKICAgICAgICAg
ICAgICAgICAKICAgICAgICAgICAgICAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSA9PSBHQ0xvZ2dp
bmc6OlZlcmJvc2UpCiAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIkRGRyBXb3JrbGlzdHM6
XG4iLCB2aXNpdG9yKTsKLSAgICAgICAgICAgIH0sCisgICAgICAgICAgICB9KSksCiAgICAgICAg
ICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eTo6R3JleWVkQnlNYXJraW5nKTsKICAgICB9CiAjZW5k
aWYKICAgICAKICAgICBtX2NvbnN0cmFpbnRTZXQtPmFkZCgKICAgICAgICAgIkNiIiwgIkNvZGVC
bG9ja3MiLAotICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiB2aXNpdG9yKSB7CisgICAgICAg
IE1BS0VfTUFSS0lOR19DT05TVFJBSU5UX0VYRUNVVE9SX1BBSVIoKFt0aGlzXSAoYXV0byYgdmlz
aXRvcikgewogICAgICAgICAgICAgU2V0Um9vdE1hcmtSZWFzb25TY29wZSByb290U2NvcGUodmlz
aXRvciwgUm9vdE1hcmtSZWFzb246OkNvZGVCbG9ja3MpOwotICAgICAgICAgICAgaXRlcmF0ZUV4
ZWN1dGluZ0FuZENvbXBpbGluZ0NvZGVCbG9ja3NXaXRob3V0SG9sZGluZ0xvY2tzKAorICAgICAg
ICAgICAgaXRlcmF0ZUV4ZWN1dGluZ0FuZENvbXBpbGluZ0NvZGVCbG9ja3NXaXRob3V0SG9sZGlu
Z0xvY2tzKHZpc2l0b3IsCiAgICAgICAgICAgICAgICAgWyZdIChDb2RlQmxvY2sqIGNvZGVCbG9j
aykgewogICAgICAgICAgICAgICAgICAgICAvLyBWaXNpdCB0aGUgQ29kZUJsb2NrIGFzIGEgY29u
c3RyYWludCBvbmx5IGlmIGl0J3MgYmxhY2suCi0gICAgICAgICAgICAgICAgICAgIGlmIChpc01h
cmtlZChjb2RlQmxvY2spCisgICAgICAgICAgICAgICAgICAgIGlmICh2aXNpdG9yLmlzTWFya2Vk
KGNvZGVCbG9jaykKICAgICAgICAgICAgICAgICAgICAgICAgICYmIGNvZGVCbG9jay0+Y2VsbFN0
YXRlKCkgPT0gQ2VsbFN0YXRlOjpQb3NzaWJseUJsYWNrKQogICAgICAgICAgICAgICAgICAgICAg
ICAgdmlzaXRvci52aXNpdEFzQ29uc3RyYWludChjb2RlQmxvY2spOwogICAgICAgICAgICAgICAg
IH0pOwotICAgICAgICB9LAorICAgICAgICB9KSksCiAgICAgICAgIENvbnN0cmFpbnRWb2xhdGls
aXR5OjpTZWxkb21HcmV5ZWQpOwogICAgIAogICAgIG1fY29uc3RyYWludFNldC0+YWRkKG1ha2VV
bmlxdWU8TWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQ+KCp0aGlzKSk7CkBAIC0zMDIzLDQgKzMw
NjYsMzMgQEAgdm9pZCBIZWFwOjpydW5UYXNrSW5QYXJhbGxlbChSZWZQdHI8U2hhcgogICAgIH0K
IH0KIAordm9pZCBIZWFwOjp2ZXJpZnlHQygpCit7CisgICAgUkVMRUFTRV9BU1NFUlQobV92ZXJp
ZmllclNsb3RWaXNpdG9yKTsKKyAgICBSRUxFQVNFX0FTU0VSVCghbV9pc01hcmtpbmdGb3JHQ1Zl
cmlmaWVyKTsKKyAgICBtX2lzTWFya2luZ0ZvckdDVmVyaWZpZXIgPSB0cnVlOworCisgICAgVmVy
aWZpZXJTbG90VmlzaXRvciYgdmlzaXRvciA9ICptX3ZlcmlmaWVyU2xvdFZpc2l0b3I7CisKKyAg
ICBkbyB7CisgICAgICAgIHZpc2l0b3IuZHJhaW4oKTsKKyAgICAgICAgbV9jb25zdHJhaW50U2V0
LT5leGVjdXRlQWxsU3luY2hyb25vdXNseSh2aXNpdG9yKTsKKyAgICAgICAgdmlzaXRvci5leGVj
dXRlQ29uc3RyYWludFRhc2tzKCk7CisgICAgfSB3aGlsZSAoIXZpc2l0b3IuaXNFbXB0eSgpKTsK
KworICAgIG1faXNNYXJraW5nRm9yR0NWZXJpZmllciA9IGZhbHNlOworCisgICAgdmlzaXRvci5m
b3JFYWNoTGl2ZUNlbGwoWyZdIChIZWFwQ2VsbCogY2VsbCkgeworICAgICAgICBpZiAoSGVhcDo6
aXNNYXJrZWQoY2VsbCkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgZGF0YUxvZ0xu
KCJcbiIgIkdDIFZlcmlmaWVyOiBFUlJPUiBjZWxsICIsIFJhd1BvaW50ZXIoY2VsbCksICIgd2Fz
IG5vdCBtYXJrZWQiKTsKKyAgICAgICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OnZlcmJvc2VWZXJp
ZnlHQygpKSkKKyAgICAgICAgICAgIHZpc2l0b3IuZHVtcE1hcmtlckRhdGEoY2VsbCk7CisgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKHRoaXMtPmlzTWFya2VkKGNlbGwpKTsKKyAgICB9KTsKKworICAg
IG1fdmVyaWZpZXJTbG90VmlzaXRvciA9IG51bGxwdHI7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpT
QwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkocmV2aXNpb24gMjcyOTAyKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcg
KzEsNyBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMCBIYXJyaSBQb3J0ZW4gKHBv
cnRlbkBrZGUub3JnKQogICogIENvcHlyaWdodCAoQykgMjAwMSBQZXRlciBLZWxseSAocG1rQHBv
c3QuY29tKQotICogIENvcHlyaWdodCAoQykgMjAwMy0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCkBAIC04Niw2ICs4Niw3IEBAIGNs
YXNzIFNwYWNlVGltZU11dGF0b3JTY2hlZHVsZXI7CiBjbGFzcyBTdG9wSWZOZWNlc3NhcnlUaW1l
cjsKIGNsYXNzIFN3ZWVwaW5nU2NvcGU7CiBjbGFzcyBWTTsKK2NsYXNzIFZlcmlmaWVyU2xvdFZp
c2l0b3I7CiBjbGFzcyBXZWFrR0NNYXBCYXNlOwogc3RydWN0IEN1cnJlbnRUaHJlYWRTdGF0ZTsK
IApAQCAtMTg0LDggKzE4NSw2IEBAIHB1YmxpYzoKICAgICAKICAgICBib29sIGlzU2h1dHRpbmdE
b3duKCkgY29uc3QgeyByZXR1cm4gbV9pc1NodXR0aW5nRG93bjsgfQogCi0gICAgSlNfRVhQT1JU
X1BSSVZBVEUgYm9vbCBpc0FuYWx5emluZ0hlYXAoKSBjb25zdDsKLQogICAgIEpTX0VYUE9SVF9Q
UklWQVRFIHZvaWQgc3dlZXBTeW5jaHJvbm91c2x5KCk7CiAKICAgICBib29sIHNob3VsZENvbGxl
Y3RIZXVyaXN0aWMoKTsKQEAgLTM4NSw4ICszODQsNiBAQCBwdWJsaWM6CiAgICAgCiAgICAgSlNf
RVhQT1JUX1BSSVZBVEUgdm9pZCBhZGRNYXJraW5nQ29uc3RyYWludChzdGQ6OnVuaXF1ZV9wdHI8
TWFya2luZ0NvbnN0cmFpbnQ+KTsKICAgICAKLSAgICBzaXplX3QgbnVtT3BhcXVlUm9vdHMoKSBj
b25zdCB7IHJldHVybiBtX29wYXF1ZVJvb3RzLnNpemUoKTsgfQotCiAgICAgSGVhcFZlcmlmaWVy
KiB2ZXJpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1fdmVyaWZpZXIuZ2V0KCk7IH0KICAgICAKICAg
ICB2b2lkIGFkZEhlYXBGaW5hbGl6ZXJDYWxsYmFjayhjb25zdCBIZWFwRmluYWxpemVyQ2FsbGJh
Y2smKTsKQEAgLTQwNyw2ICs0MDQsOCBAQCBwdWJsaWM6CiAKICAgICBIYXNoTWFwPEpTSW1tdXRh
YmxlQnV0dGVyZmx5KiwgSlNTdHJpbmcqPiBpbW11dGFibGVCdXR0ZXJmbHlUb1N0cmluZ0NhY2hl
OwogCisgICAgYm9vbCBpc01hcmtpbmdGb3JHQ1ZlcmlmaWVyKCkgY29uc3QgeyByZXR1cm4gbV9p
c01hcmtpbmdGb3JHQ1ZlcmlmaWVyOyB9CisKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIEFs
bG9jYXRpbmdTY29wZTsKICAgICBmcmllbmQgY2xhc3MgQ29kZUJsb2NrOwpAQCAtNTc1LDExICs1
NzQsMTEgQEAgcHJpdmF0ZToKIAogICAgIGJvb2wgb3ZlckNyaXRpY2FsTWVtb3J5VGhyZXNob2xk
KE1lbW9yeVRocmVzaG9sZENhbGxUeXBlIG1lbW9yeVRocmVzaG9sZENhbGxUeXBlID0gTWVtb3J5
VGhyZXNob2xkQ2FsbFR5cGU6OkNhY2hlZCk7CiAgICAgCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUg
RnVuYz4KLSAgICB2b2lkIGl0ZXJhdGVFeGVjdXRpbmdBbmRDb21waWxpbmdDb2RlQmxvY2tzKGNv
bnN0IEZ1bmMmKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jLCB0eXBlbmFtZSBWaXNpdG9y
PgorICAgIHZvaWQgaXRlcmF0ZUV4ZWN1dGluZ0FuZENvbXBpbGluZ0NvZGVCbG9ja3MoVmlzaXRv
ciYsIGNvbnN0IEZ1bmMmKTsKICAgICAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgotICAg
IHZvaWQgaXRlcmF0ZUV4ZWN1dGluZ0FuZENvbXBpbGluZ0NvZGVCbG9ja3NXaXRob3V0SG9sZGlu
Z0xvY2tzKGNvbnN0IEZ1bmMmKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jLCB0eXBlbmFt
ZSBWaXNpdG9yPgorICAgIHZvaWQgaXRlcmF0ZUV4ZWN1dGluZ0FuZENvbXBpbGluZ0NvZGVCbG9j
a3NXaXRob3V0SG9sZGluZ0xvY2tzKFZpc2l0b3ImLCBjb25zdCBGdW5jJik7CiAgICAgCiAgICAg
dm9pZCBhc3NlcnRNYXJrU3RhY2tzRW1wdHkoKTsKIApAQCAtNTkwLDYgKzU4OSw4IEBAIHByaXZh
dGU6CiAgICAgc3RhdGljIGJvb2wgdXNlR2VuZXJhdGlvbmFsR0MoKTsKICAgICBzdGF0aWMgYm9v
bCBzaG91bGRTd2VlcFN5bmNocm9ub3VzbHkoKTsKICAgICAKKyAgICB2b2lkIHZlcmlmeUdDKCk7
CisKICAgICBjb25zdCBIZWFwVHlwZSBtX2hlYXBUeXBlOwogICAgIE11dGF0b3JTdGF0ZSBtX211
dGF0b3JTdGF0ZSB7IE11dGF0b3JTdGF0ZTo6UnVubmluZyB9OwogICAgIGNvbnN0IHNpemVfdCBt
X3JhbVNpemU7CkBAIC02MzYsNiArNjM3LDcgQEAgcHJpdmF0ZToKICAgICBzdGQ6OnVuaXF1ZV9w
dHI8TWFya1N0YWNrQXJyYXk+IG1fbXV0YXRvck1hcmtTdGFjazsKICAgICBzdGQ6OnVuaXF1ZV9w
dHI8TWFya1N0YWNrQXJyYXk+IG1fcmFjZU1hcmtTdGFjazsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8
TWFya2luZ0NvbnN0cmFpbnRTZXQ+IG1fY29uc3RyYWludFNldDsKKyAgICBzdGQ6OnVuaXF1ZV9w
dHI8VmVyaWZpZXJTbG90VmlzaXRvcj4gbV92ZXJpZmllclNsb3RWaXNpdG9yOwogCiAgICAgLy8g
V2UgcG9vbCB0aGUgc2xvdCB2aXNpdG9ycyB1c2VkIGJ5IHBhcmFsbGVsIG1hcmtpbmcgdGhyZWFk
cy4gSXQncyB1c2VmdWwgdG8gYmUgYWJsZSB0bwogICAgIC8vIGVudW1lcmF0ZSBvdmVyIHRoZW0s
IGFuZCBpdCdzIHVzZWZ1bCB0byBoYXZlIHRoZW0gY2FjaGUgc29tZSBzbWFsbCBhbW91bnQgb2Yg
bWVtb3J5IGZyb20KQEAgLTY1NCw2ICs2NTYsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9pc1Nh
ZmVUb0NvbGxlY3QgeyBmYWxzZSB9OwogICAgIGJvb2wgbV9pc1NodXR0aW5nRG93biB7IGZhbHNl
IH07CiAgICAgYm9vbCBtX211dGF0b3JTaG91bGRCZUZlbmNlZCB7IE9wdGlvbnM6OmZvcmNlRmVu
Y2VkQmFycmllcigpIH07CisgICAgYm9vbCBtX2lzTWFya2luZ0ZvckdDVmVyaWZpZXIgeyBmYWxz
ZSB9OwogCiAgICAgdW5zaWduZWQgbV9iYXJyaWVyVGhyZXNob2xkIHsgT3B0aW9uczo6Zm9yY2VG
ZW5jZWRCYXJyaWVyKCkgPyB0YXV0b2xvZ2ljYWxUaHJlc2hvbGQgOiBibGFja1RocmVzaG9sZCB9
OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwSW5saW5lcy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBJbmxpbmVzLmgJKHJldmlz
aW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBJbmxpbmVzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTY5LDYgKzY5LDggQEAgaW5saW5lIGJvb2wgSGVhcDo6d29ybGRJ
c1N0b3BwZWQoKSBjb25zdAogCiBBTFdBWVNfSU5MSU5FIGJvb2wgSGVhcDo6aXNNYXJrZWQoY29u
c3Qgdm9pZCogcmF3Q2VsbCkKIHsKKyAgICBBU1NFUlQoIW1faXNNYXJraW5nRm9yR0NWZXJpZmll
cik7CisvLyAgICBSRUxFQVNFX0FTU0VSVCghbV9pc01hcmtpbmdGb3JHQ1ZlcmlmaWVyKTsgLy8g
bWxhbSBURVNUIG9ubHkKICAgICBIZWFwQ2VsbCogY2VsbCA9IGJpdHdpc2VfY2FzdDxIZWFwQ2Vs
bCo+KHJhd0NlbGwpOwogICAgIGlmIChjZWxsLT5pc1ByZWNpc2VBbGxvY2F0aW9uKCkpCiAgICAg
ICAgIHJldHVybiBjZWxsLT5wcmVjaXNlQWxsb2NhdGlvbigpLmlzTWFya2VkKCk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwUHJvZmlsZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBQcm9maWxlci5jcHAJKHJldmlzaW9uIDI3
MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBQcm9maWxlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtNjAsNiArNjAsNyBAQCB2b2lkIEhlYXBQcm9maWxlcjo6c2V0QWN0aXZlSGVh
cEFuYWx5emVyCiB7CiAgICAgQVNTRVJUKCEhbV9hY3RpdmVBbmFseXplciAhPSAhIWFuYWx5emVy
KTsKICAgICBtX2FjdGl2ZUFuYWx5emVyID0gYW5hbHl6ZXI7CisgICAgbV92bS5zZXRBY3RpdmVI
ZWFwQW5hbHl6ZXIoYW5hbHl6ZXIpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0lzb0NlbGxTZXQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Jc29DZWxsU2V0LmgJKHJldmlzaW9uIDI3MjkwMikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0lzb0NlbGxTZXQuaAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0z
NCw2ICszNCw3IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCitjbGFzcyBBYnN0cmFjdFNsb3RWaXNp
dG9yOwogY2xhc3MgSGVhcENlbGw7CiBjbGFzcyBJc29TdWJzcGFjZTsKIApAQCAtNTgsOCArNTks
OCBAQCBwdWJsaWM6CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KICAgICB2b2lkIGZvckVh
Y2hNYXJrZWRDZWxsKGNvbnN0IEZ1bmMmKTsKIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+
Ci0gICAgUmVmPFNoYXJlZFRhc2s8dm9pZChTbG90VmlzaXRvciYpPj4gZm9yRWFjaE1hcmtlZENl
bGxJblBhcmFsbGVsKGNvbnN0IEZ1bmMmKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
LCB0eXBlbmFtZSBGdW5jPgorICAgIFJlZjxTaGFyZWRUYXNrPHZvaWQoVmlzaXRvciYpPj4gZm9y
RWFjaE1hcmtlZENlbGxJblBhcmFsbGVsKGNvbnN0IEZ1bmMmKTsKICAgICAKICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBGdW5jPgogICAgIHZvaWQgZm9yRWFjaExpdmVDZWxsKGNvbnN0IEZ1bmMmKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0lzb0NlbGxTZXRJbmxpbmVzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvQ2VsbFNldElubGluZXMu
aAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvQ2Vs
bFNldElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC05MSwxMCArOTEsMTAgQEAgdm9pZCBJc29DZWxs
U2V0Ojpmb3JFYWNoTWFya2VkQ2VsbChjb25zdAogICAgICAgICB9KTsKIH0KIAotdGVtcGxhdGU8
dHlwZW5hbWUgRnVuYz4KLVJlZjxTaGFyZWRUYXNrPHZvaWQoU2xvdFZpc2l0b3ImKT4+IElzb0Nl
bGxTZXQ6OmZvckVhY2hNYXJrZWRDZWxsSW5QYXJhbGxlbChjb25zdCBGdW5jJiBmdW5jKQordGVt
cGxhdGU8dHlwZW5hbWUgVmlzaXRvciwgdHlwZW5hbWUgRnVuYz4KK1JlZjxTaGFyZWRUYXNrPHZv
aWQoVmlzaXRvciYpPj4gSXNvQ2VsbFNldDo6Zm9yRWFjaE1hcmtlZENlbGxJblBhcmFsbGVsKGNv
bnN0IEZ1bmMmIGZ1bmMpCiB7Ci0gICAgY2xhc3MgVGFzayBmaW5hbCA6IHB1YmxpYyBTaGFyZWRU
YXNrPHZvaWQoU2xvdFZpc2l0b3ImKT4geworICAgIGNsYXNzIFRhc2sgZmluYWwgOiBwdWJsaWMg
U2hhcmVkVGFzazx2b2lkKFZpc2l0b3ImKT4gewogICAgIHB1YmxpYzoKICAgICAgICAgVGFzayhJ
c29DZWxsU2V0JiBzZXQsIGNvbnN0IEZ1bmMmIGZ1bmMpCiAgICAgICAgICAgICA6IG1fc2V0KHNl
dCkKQEAgLTEwMyw3ICsxMDMsNyBAQCBSZWY8U2hhcmVkVGFzazx2b2lkKFNsb3RWaXNpdG9yJik+
PiBJc29DCiAgICAgICAgIHsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgdm9pZCBydW4o
U2xvdFZpc2l0b3ImIHZpc2l0b3IpIGZpbmFsCisgICAgICAgIHZvaWQgcnVuKFZpc2l0b3ImIHZp
c2l0b3IpIGZpbmFsCiAgICAgICAgIHsKICAgICAgICAgICAgIHdoaWxlIChNYXJrZWRCbG9jazo6
SGFuZGxlKiBoYW5kbGUgPSBtX2Jsb2NrU291cmNlLT5ydW4oKSkgewogICAgICAgICAgICAgICAg
IHVuc2lnbmVkIGJsb2NrSW5kZXggPSBoYW5kbGUtPmluZGV4KCk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9KSVRTdHViUm91dGluZVNldC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSklUU3R1YlJvdXRpbmVTZXQuY3BwCShyZXZpc2lvbiAy
NzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9KSVRTdHViUm91dGluZVNldC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
Mi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMTI4LDcgKzEyOCw4IEBAIHZvaWQgSklUU3R1YlJvdXRpbmVTZXQ6
OmRlbGV0ZVVubWFya2VkSmUKICAgICBtX3JvdXRpbmVzLnNocmluayhkc3RJbmRleCk7CiB9CiAK
LXZvaWQgSklUU3R1YlJvdXRpbmVTZXQ6OnRyYWNlTWFya2VkU3R1YlJvdXRpbmVzKFNsb3RWaXNp
dG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSklUU3R1YlJv
dXRpbmVTZXQ6OnRyYWNlTWFya2VkU3R1YlJvdXRpbmVzKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAg
ICAgZm9yIChhdXRvJiBlbnRyeSA6IG1fcm91dGluZXMpIHsKICAgICAgICAgR0NBd2FyZUpJVFN0
dWJSb3V0aW5lKiByb3V0aW5lID0gZW50cnkucm91dGluZTsKQEAgLTEzOSw2ICsxNDAsOSBAQCB2
b2lkIEpJVFN0dWJSb3V0aW5lU2V0Ojp0cmFjZU1hcmtlZFN0dWJSCiAgICAgfQogfQogCit0ZW1w
bGF0ZSB2b2lkIEpJVFN0dWJSb3V0aW5lU2V0Ojp0cmFjZU1hcmtlZFN0dWJSb3V0aW5lcyhBYnN0
cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpJVFN0dWJSb3V0aW5lU2V0Ojp0cmFj
ZU1hcmtlZFN0dWJSb3V0aW5lcyhTbG90VmlzaXRvciYpOworCiB9IC8vIG5hbWVzcGFjZSBKU0MK
IAogI2VuZGlmIC8vIEVOQUJMRShKSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9KSVRTdHViUm91dGluZVNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0pJVFN0dWJSb3V0aW5lU2V0LmgJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0pJVFN0dWJSb3V0aW5lU2V0LmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTggQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0zNSw4ICszNSw4IEBAIHVzaW5nIFdURjo6UmFuZ2U7CiAKIG5hbWVzcGFjZSBKU0MgewogCitj
bGFzcyBBYnN0cmFjdFNsb3RWaXNpdG9yOwogY2xhc3MgR0NBd2FyZUpJVFN0dWJSb3V0aW5lOwot
Y2xhc3MgU2xvdFZpc2l0b3I7CiAKICNpZiBFTkFCTEUoSklUKQogCkBAIC02Myw4ICs2Myw4IEBA
IHB1YmxpYzoKICAgICB2b2lkIHByZXBhcmVGb3JDb25zZXJ2YXRpdmVTY2FuKCk7CiAgICAgCiAg
ICAgdm9pZCBkZWxldGVVbm1hcmtlZEpldHRpc29uZWRTdHViUm91dGluZXMoKTsKLSAgICAKLSAg
ICB2b2lkIHRyYWNlTWFya2VkU3R1YlJvdXRpbmVzKFNsb3RWaXNpdG9yJik7CisKKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIHRyYWNlTWFya2VkU3R1YlJvdXRpbmVzKFZpc2l0
b3ImKTsKICAgICAKIHByaXZhdGU6CiAgICAgdm9pZCBtYXJrU2xvdyh1aW50cHRyX3QgYWRkcmVz
cyk7CkBAIC05Miw3ICs5Miw3IEBAIHB1YmxpYzoKICAgICB2b2lkIG1hcmsodm9pZCopIHsgfQog
ICAgIHZvaWQgcHJlcGFyZUZvckNvbnNlcnZhdGl2ZVNjYW4oKSB7IH0KICAgICB2b2lkIGRlbGV0
ZVVubWFya2VkSmV0dGlzb25lZFN0dWJSb3V0aW5lcygpIHsgfQotICAgIHZvaWQgdHJhY2VNYXJr
ZWRTdHViUm91dGluZXMoU2xvdFZpc2l0b3ImKSB7IH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPiB2b2lkIHRyYWNlTWFya2VkU3R1YlJvdXRpbmVzKFZpc2l0b3ImKSB7IH0KIH07CiAK
ICNlbmRpZiAvLyAhRU5BQkxFKEpJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L01hcmtTdGFja01lcmdpbmdDb25zdHJhaW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9NYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludC5jcHAJKHJldmlzaW9u
IDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtTdGFja01lcmdpbmdD
b25zdHJhaW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNSw3ICsyNSw2IEBACiAKICNpbmNsdWRlICJj
b25maWcuaCIKICNpbmNsdWRlICJNYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludC5oIgotCiAjaW5j
bHVkZSAiR0NTZWdtZW50ZWRBcnJheUlubGluZXMuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgi
CiAKQEAgLTQ2LDcgKzQ1LDcgQEAgZG91YmxlIE1hcmtTdGFja01lcmdpbmdDb25zdHJhaW50Ojpx
dWljawogICAgIHJldHVybiBtX2hlYXAubV9tdXRhdG9yTWFya1N0YWNrLT5zaXplKCkgKyBtX2hl
YXAubV9yYWNlTWFya1N0YWNrLT5zaXplKCk7CiB9CiAKLXZvaWQgTWFya1N0YWNrTWVyZ2luZ0Nv
bnN0cmFpbnQ6OnByZXBhcmVUb0V4ZWN1dGVJbXBsKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgU2xv
dFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIE1hcmtTdGFja01lcmdpbmdDb25zdHJhaW50OjpwcmVw
YXJlVG9FeGVjdXRlSW1wbChjb25zdCBBYnN0cmFjdExvY2tlciYsIEFic3RyYWN0U2xvdFZpc2l0
b3ImIHZpc2l0b3IpCiB7CiAgICAgLy8gTG9nZ2luZyB0aGUgd29yayBoZXJlIGVuc3VyZXMgdGhh
dCB0aGUgY29uc3RyYWludCBzb2x2ZXIga25vd3MgdGhhdCBpdCBkb2Vzbid0IG5lZWQgdG8gcHJv
ZHVjZQogICAgIC8vIGFueW1vcmUgd29yay4KQEAgLTU2LDExICs1NSwyNCBAQCB2b2lkIE1hcmtT
dGFja01lcmdpbmdDb25zdHJhaW50OjpwcmVwYXJlCiAgICAgZGF0YUxvZ0lmKE9wdGlvbnM6Omxv
Z0dDKCksICIoIiwgc2l6ZSwgIikiKTsKIH0KIAotdm9pZCBNYXJrU3RhY2tNZXJnaW5nQ29uc3Ry
YWludDo6ZXhlY3V0ZUltcGwoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBWaXNpdG9yPgordm9pZCBNYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludDo6ZXhlY3V0ZUltcGxJ
bXBsKFZpc2l0b3ImIHZpc2l0b3IpCiB7CisgICAgLy8gV2Ugd2FudCB0byBza2lwIHRoaXMgY29u
c3RyYWludCBmb3IgdGhlIEdDIHZlcmlmaWVyIGJlY2F1c2U6CisgICAgLy8gMS4gVGhlcmUgc2hv
dWxkIGJlIG5vIG11dGF0b3IgbWFya2luZyBhY3Rpb24gYmV0d2VlbiB0aGUgRW5kIHBoYXNlIGFu
ZCB2ZXJpZnlHQygpLgorICAgIC8vICAgIEhlbmNlLCB3ZSBjYW4gaWdub3JlIHRoc2Ugc3RhY2tz
LgorICAgIC8vIDIuIFRoZSBFbmQgcGhhc2UgZXhwbGljdGx5IGNhbGxzIGl0ZXJhdGVFeGVjdXRp
bmdBbmRDb21waWxpbmdDb2RlQmxvY2tzKCkKKyAgICAvLyAgICB0byBhZGQgZXhlY3V0aW5nIENv
ZGVCbG9ja3MgdG8gbV9oZWFwLm1fbXV0YXRvck1hcmtTdGFjay4gV2Ugd2FudCB0bworICAgIC8v
ICAgIGxlYXZlIHRob3NlIHVucGVydHVyYmVkLgorICAgIGlmIChtX2hlYXAubV9pc01hcmtpbmdG
b3JHQ1ZlcmlmaWVyKQorICAgICAgICByZXR1cm47CisKICAgICBtX2hlYXAubV9tdXRhdG9yTWFy
a1N0YWNrLT50cmFuc2ZlclRvKHZpc2l0b3IubXV0YXRvck1hcmtTdGFjaygpKTsKICAgICBtX2hl
YXAubV9yYWNlTWFya1N0YWNrLT50cmFuc2ZlclRvKHZpc2l0b3IubXV0YXRvck1hcmtTdGFjaygp
KTsKIH0KIAordm9pZCBNYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludDo6ZXhlY3V0ZUltcGwoQWJz
dHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikgeyBleGVjdXRlSW1wbEltcGwodmlzaXRvcik7IH0K
K3ZvaWQgTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQ6OmV4ZWN1dGVJbXBsKFNsb3RWaXNpdG9y
JiB2aXNpdG9yKSB7IGV4ZWN1dGVJbXBsSW1wbCh2aXNpdG9yKTsgfQorCiB9IC8vIG5hbWVzcGFj
ZSBKU0MKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya1N0YWNrTWVyZ2lu
Z0NvbnN0cmFpbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9N
YXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludC5oCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgSGVhcDsK
K2NsYXNzIEFic3RyYWN0U2xvdFZpc2l0b3I7CiBjbGFzcyBTbG90VmlzaXRvcjsKIAogY2xhc3Mg
TWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQgZmluYWwgOiBwdWJsaWMgTWFya2luZ0NvbnN0cmFp
bnQgewpAQCAtNDAsNyArNDEsOSBAQCBwdWJsaWM6CiAgICAgZG91YmxlIHF1aWNrV29ya0VzdGlt
YXRlKFNsb3RWaXNpdG9yJikgZmluYWw7CiAgICAgCiBwcml2YXRlOgotICAgIHZvaWQgcHJlcGFy
ZVRvRXhlY3V0ZUltcGwoY29uc3QgQWJzdHJhY3RMb2NrZXImIGNvbnN0cmFpbnRTb2x2aW5nTG9j
a2VyLCBTbG90VmlzaXRvciYpIGZpbmFsOworICAgIHZvaWQgcHJlcGFyZVRvRXhlY3V0ZUltcGwo
Y29uc3QgQWJzdHJhY3RMb2NrZXImIGNvbnN0cmFpbnRTb2x2aW5nTG9ja2VyLCBBYnN0cmFjdFNs
b3RWaXNpdG9yJikgZmluYWw7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gQUxXQVlT
X0lOTElORSB2b2lkIGV4ZWN1dGVJbXBsSW1wbChWaXNpdG9yJik7CisgICAgdm9pZCBleGVjdXRl
SW1wbChBYnN0cmFjdFNsb3RWaXNpdG9yJikgZmluYWw7CiAgICAgdm9pZCBleGVjdXRlSW1wbChT
bG90VmlzaXRvciYpIGZpbmFsOwogICAgIAogICAgIEhlYXAmIG1faGVhcDsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suaAkocmV2aXNpb24gMjcyOTAyKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suaAkod29ya2luZyBjb3B5KQpA
QCAtMjAwLDYgKzIwMCw3IEBAIHB1YmxpYzoKICAgICAgICAgCiAgICAgICAgIHZvaWQqIHN0YXJ0
KCkgY29uc3QgeyByZXR1cm4gJm1fYmxvY2stPmF0b21zKClbMF07IH0KICAgICAgICAgdm9pZCog
ZW5kKCkgY29uc3QgeyByZXR1cm4gJm1fYmxvY2stPmF0b21zKClbbV9lbmRBdG9tXTsgfQorICAg
ICAgICB2b2lkKiBhdG9tQXQoc2l6ZV90IGkpIGNvbnN0IHsgcmV0dXJuICZtX2Jsb2NrLT5hdG9t
cygpW2ldOyB9CiAgICAgICAgIGJvb2wgY29udGFpbnModm9pZCogcCkgY29uc3QgeyByZXR1cm4g
c3RhcnQoKSA8PSBwICYmIHAgPCBlbmQoKTsgfQogCiAgICAgICAgIHZvaWQgZHVtcFN0YXRlKFBy
aW50U3RyZWFtJik7CkBAIC0yOTUsOSArMjk2LDEwIEBAIHB1YmxpYzoKIAogICAgICAgICBCaXRt
YXA8YXRvbXNQZXJCbG9jaz4gbV9tYXJrczsKICAgICAgICAgQml0bWFwPGF0b21zUGVyQmxvY2s+
IG1fbmV3bHlBbGxvY2F0ZWQ7CisgICAgICAgIHZvaWQqIG1fdmVyaWZpZXJNZW1vIHsgbnVsbHB0
ciB9OwogICAgIH07CiAgICAgCi1wcml2YXRlOiAgICAKK3ByaXZhdGU6CiAgICAgRm9vdGVyJiBm
b290ZXIoKTsKICAgICBjb25zdCBGb290ZXImIGZvb3RlcigpIGNvbnN0OwogCkBAIC0zODQsNyAr
Mzg2LDExIEBAIHB1YmxpYzoKICAgICAgICAgKmJpdHdpc2VfY2FzdDx2b2xhdGlsZSB1aW50OF90
Kj4oJmZvb3RlcigpKTsKICAgICB9CiAgICAgCisgICAgdm9pZCBzZXRWZXJpZmllck1lbW8odm9p
ZCopOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IFQgdmVyaWZpZXJNZW1vKCkgY29uc3Q7CisK
ICAgICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBvZmZzZXRPZkZvb3RlciA9IGVuZEF0b20gKiBh
dG9tU2l6ZTsKKyAgICBzdGF0aWNfYXNzZXJ0KG9mZnNldE9mRm9vdGVyICsgc2l6ZW9mKEZvb3Rl
cikgPD0gYmxvY2tTaXplKTsKIAogcHJpdmF0ZToKICAgICBNYXJrZWRCbG9jayhWTSYsIEhhbmRs
ZSYpOwpAQCAtNjYwLDYgKzY2NiwxNyBAQCBpbmxpbmUgdm9pZCBNYXJrZWRCbG9jazo6bm90ZU1h
cmtlZCgpCiAgICAgICAgIG5vdGVNYXJrZWRTbG93KCk7CiB9CiAKK2lubGluZSB2b2lkIE1hcmtl
ZEJsb2NrOjpzZXRWZXJpZmllck1lbW8odm9pZCogcCkKK3sKKyAgICBmb290ZXIoKS5tX3Zlcmlm
aWVyTWVtbyA9IHA7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitUIE1hcmtlZEJsb2NrOjp2
ZXJpZmllck1lbW8oKSBjb25zdAoreworICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8VD4oZm9vdGVy
KCkubV92ZXJpZmllck1lbW8pOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogbmFtZXNwYWNl
IFdURiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRTcGFjZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkU3BhY2UuY3Bw
CShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRT
cGFjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3Miw3ICsyNzIsOCBAQCB2b2lkIE1hcmtlZFNw
YWNlOjplbmFibGVQcmVjaXNlQWxsb2NhdGlvCiAgICAgICAgIG1fcHJlY2lzZUFsbG9jYXRpb25T
ZXQtPmFkZChhbGxvY2F0aW9uLT5jZWxsKCkpOwogfQogCi12b2lkIE1hcmtlZFNwYWNlOjp2aXNp
dFdlYWtTZXRzKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRv
cj4KK3ZvaWQgTWFya2VkU3BhY2U6OnZpc2l0V2Vha1NldHMoVmlzaXRvciYgdmlzaXRvcikKIHsK
ICAgICBhdXRvIHZpc2l0ID0gWyZdIChXZWFrU2V0KiB3ZWFrU2V0KSB7CiAgICAgICAgIHdlYWtT
ZXQtPnZpc2l0KHZpc2l0b3IpOwpAQCAtMjg0LDYgKzI4NSw5IEBAIHZvaWQgTWFya2VkU3BhY2U6
OnZpc2l0V2Vha1NldHMoU2xvdFZpc2kKICAgICAgICAgbV9hY3RpdmVXZWFrU2V0cy5mb3JFYWNo
KHZpc2l0KTsKIH0KIAordGVtcGxhdGUgdm9pZCBNYXJrZWRTcGFjZTo6dmlzaXRXZWFrU2V0cyhB
YnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIE1hcmtlZFNwYWNlOjp2aXNpdFdl
YWtTZXRzKFNsb3RWaXNpdG9yJik7CisKIHZvaWQgTWFya2VkU3BhY2U6OnJlYXBXZWFrU2V0cygp
CiB7CiAgICAgYXV0byB2aXNpdCA9IFsmXSAoV2Vha1NldCogd2Vha1NldCkgewpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkU3BhY2UuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRTcGFjZS5oCShyZXZpc2lvbiAyNzI5MDIpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRTcGFjZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDcgKzEsNyBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMCBIYXJyaSBQ
b3J0ZW4gKHBvcnRlbkBrZGUub3JnKQogICogIENvcHlyaWdodCAoQykgMjAwMSBQZXRlciBLZWxs
eSAocG1rQHBvc3QuY29tKQotICogIENvcHlyaWdodCAoQykgMjAwMy0yMDE4IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAyMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCkBAIC0zNyw2ICsz
Nyw3IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCitjbGFzcyBBYnN0cmFjdFNsb3RWaXNpdG9yOwog
Y2xhc3MgQ29tcGxldGVTdWJzcGFjZTsKIGNsYXNzIEhlYXA7CiBjbGFzcyBIZWFwQ2VsbDsKQEAg
LTEwNSw3ICsxMDYsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgdm9pZCBwcmVwYXJlRm9yQWxsb2Nh
dGlvbigpOwogCi0gICAgdm9pZCB2aXNpdFdlYWtTZXRzKFNsb3RWaXNpdG9yJik7CisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCB2aXNpdFdlYWtTZXRzKFZpc2l0b3ImKTsKICAg
ICB2b2lkIHJlYXBXZWFrU2V0cygpOwogCiAgICAgTWFya2VkQmxvY2tTZXQmIGJsb2NrcygpIHsg
cmV0dXJuIG1fYmxvY2tzOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJr
aW5nQ29uc3RyYWludC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvTWFya2luZ0NvbnN0cmFpbnQuY3BwCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYs
NiArMjYsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIk1hcmtpbmdDb25zdHJh
aW50LmgiCiAKKyNpbmNsdWRlICJBYnN0cmFjdFNsb3RWaXNpdG9ySW5saW5lcy5oIgogI2luY2x1
ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJWaXNpdENvdW50ZXIuaCIKIApAQCAtNTMsNiAr
NTQsNyBAQCB2b2lkIE1hcmtpbmdDb25zdHJhaW50OjpyZXNldFN0YXRzKCkKIAogdm9pZCBNYXJr
aW5nQ29uc3RyYWludDo6ZXhlY3V0ZShTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKKyAgICBBU1NF
UlQoIXZpc2l0b3IuaGVhcCgpLT5pc01hcmtpbmdGb3JHQ1ZlcmlmaWVyKCkpOwogICAgIFZpc2l0
Q291bnRlciB2aXNpdENvdW50ZXIodmlzaXRvcik7CiAgICAgZXhlY3V0ZUltcGwodmlzaXRvcik7
CiAgICAgbV9sYXN0VmlzaXRDb3VudCArPSB2aXNpdENvdW50ZXIudmlzaXRDb3VudCgpOwpAQCAt
NjAsNiArNjIsMTIgQEAgdm9pZCBNYXJraW5nQ29uc3RyYWludDo6ZXhlY3V0ZShTbG90VmlzaQog
ICAgICAgICBkYXRhTG9nKCIoIiwgYWJicmV2aWF0ZWROYW1lKCksICIgdmlzaXRlZCAiLCB2aXNp
dENvdW50ZXIudmlzaXRDb3VudCgpLCAiIGluIGV4ZWN1dGUpIik7CiB9CiAKK3ZvaWQgTWFya2lu
Z0NvbnN0cmFpbnQ6OmV4ZWN1dGVTeW5jaHJvbm91c2x5KEFic3RyYWN0U2xvdFZpc2l0b3ImIHZp
c2l0b3IpCit7CisgICAgcHJlcGFyZVRvRXhlY3V0ZUltcGwoTm9Mb2NraW5nTmVjZXNzYXJ5LCB2
aXNpdG9yKTsKKyAgICBleGVjdXRlSW1wbCh2aXNpdG9yKTsKK30KKwogZG91YmxlIE1hcmtpbmdD
b25zdHJhaW50OjpxdWlja1dvcmtFc3RpbWF0ZShTbG90VmlzaXRvciYpCiB7CiAgICAgcmV0dXJu
IDA7CkBAIC03Miw2ICs4MCw3IEBAIGRvdWJsZSBNYXJraW5nQ29uc3RyYWludDo6d29ya0VzdGlt
YXRlKFMKIAogdm9pZCBNYXJraW5nQ29uc3RyYWludDo6cHJlcGFyZVRvRXhlY3V0ZShjb25zdCBB
YnN0cmFjdExvY2tlciYgY29uc3RyYWludFNvbHZpbmdMb2NrZXIsIFNsb3RWaXNpdG9yJiB2aXNp
dG9yKQogeworICAgIEFTU0VSVCghdmlzaXRvci5oZWFwKCktPmlzTWFya2luZ0ZvckdDVmVyaWZp
ZXIoKSk7CiAgICAgZGF0YUxvZ0lmKE9wdGlvbnM6OmxvZ0dDKCksIGFiYnJldmlhdGVkTmFtZSgp
KTsKICAgICBWaXNpdENvdW50ZXIgdmlzaXRDb3VudGVyKHZpc2l0b3IpOwogICAgIHByZXBhcmVU
b0V4ZWN1dGVJbXBsKGNvbnN0cmFpbnRTb2x2aW5nTG9ja2VyLCB2aXNpdG9yKTsKQEAgLTgyLDYg
KzkxLDcgQEAgdm9pZCBNYXJraW5nQ29uc3RyYWludDo6cHJlcGFyZVRvRXhlY3V0ZQogCiB2b2lk
IE1hcmtpbmdDb25zdHJhaW50Ojpkb1BhcmFsbGVsV29yayhTbG90VmlzaXRvciYgdmlzaXRvciwg
U2hhcmVkVGFzazx2b2lkKFNsb3RWaXNpdG9yJik+JiB0YXNrKQogeworICAgIEFTU0VSVCghdmlz
aXRvci5oZWFwKCktPmlzTWFya2luZ0ZvckdDVmVyaWZpZXIoKSk7CiAgICAgVmlzaXRDb3VudGVy
IHZpc2l0Q291bnRlcih2aXNpdG9yKTsKICAgICB0YXNrLnJ1bih2aXNpdG9yKTsKICAgICBpZiAo
dmVyYm9zZU1hcmtpbmdDb25zdHJhaW50ICYmIHZpc2l0Q291bnRlci52aXNpdENvdW50KCkpCkBA
IC05Miw3ICsxMDIsNyBAQCB2b2lkIE1hcmtpbmdDb25zdHJhaW50Ojpkb1BhcmFsbGVsV29yayhT
CiAgICAgfQogfQogCi12b2lkIE1hcmtpbmdDb25zdHJhaW50OjpwcmVwYXJlVG9FeGVjdXRlSW1w
bChjb25zdCBBYnN0cmFjdExvY2tlciYsIFNsb3RWaXNpdG9yJikKK3ZvaWQgTWFya2luZ0NvbnN0
cmFpbnQ6OnByZXBhcmVUb0V4ZWN1dGVJbXBsKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgQWJzdHJh
Y3RTbG90VmlzaXRvciYpCiB7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L01hcmtpbmdDb25zdHJhaW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvTWFya2luZ0NvbnN0cmFpbnQuaAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnQuaAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zOCw2
ICszOCw3IEBACiBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgTWFya2luZ0NvbnN0cmFpbnRTZXQ7
CitjbGFzcyBBYnN0cmFjdFNsb3RWaXNpdG9yOwogY2xhc3MgU2xvdFZpc2l0b3I7CiAKIGNsYXNz
IE1hcmtpbmdDb25zdHJhaW50IHsKQEAgLTYxLDEwICs2MiwxMCBAQCBwdWJsaWM6CiAgICAgc2l6
ZV90IGxhc3RWaXNpdENvdW50KCkgY29uc3QgeyByZXR1cm4gbV9sYXN0VmlzaXRDb3VudDsgfQog
ICAgIAogICAgIHZvaWQgZXhlY3V0ZShTbG90VmlzaXRvciYpOworCisgICAgSlNfRVhQT1JUX1BS
SVZBVEUgdmlydHVhbCBkb3VibGUgcXVpY2tXb3JrRXN0aW1hdGUoU2xvdFZpc2l0b3ImKTsKICAg
ICAKLSAgICBKU19FWFBPUlRfUFJJVkFURSB2aXJ0dWFsIGRvdWJsZSBxdWlja1dvcmtFc3RpbWF0
ZShTbG90VmlzaXRvciYgdmlzaXRvcik7Ci0gICAgCi0gICAgZG91YmxlIHdvcmtFc3RpbWF0ZShT
bG90VmlzaXRvciYgdmlzaXRvcik7CisgICAgZG91YmxlIHdvcmtFc3RpbWF0ZShTbG90VmlzaXRv
ciYpOwogICAgIAogICAgIHZvaWQgcHJlcGFyZVRvRXhlY3V0ZShjb25zdCBBYnN0cmFjdExvY2tl
ciYgY29uc3RyYWludFNvbHZpbmdMb2NrZXIsIFNsb3RWaXNpdG9yJik7CiAgICAgCkBAIC03Niw5
ICs3NywxMiBAQCBwdWJsaWM6CiAgICAgQ29uc3RyYWludFBhcmFsbGVsaXNtIHBhcmFsbGVsaXNt
KCkgY29uc3QgeyByZXR1cm4gbV9wYXJhbGxlbGlzbTsgfQogCiBwcm90ZWN0ZWQ6CisgICAgdmly
dHVhbCB2b2lkIGV4ZWN1dGVJbXBsKEFic3RyYWN0U2xvdFZpc2l0b3ImKSA9IDA7CiAgICAgdmly
dHVhbCB2b2lkIGV4ZWN1dGVJbXBsKFNsb3RWaXNpdG9yJikgPSAwOwotICAgIEpTX0VYUE9SVF9Q
UklWQVRFIHZpcnR1YWwgdm9pZCBwcmVwYXJlVG9FeGVjdXRlSW1wbChjb25zdCBBYnN0cmFjdExv
Y2tlciYgY29uc3RyYWludFNvbHZpbmdMb2NrZXIsIFNsb3RWaXNpdG9yJik7Ci0gICAgCisgICAg
SlNfRVhQT1JUX1BSSVZBVEUgdmlydHVhbCB2b2lkIHByZXBhcmVUb0V4ZWN1dGVJbXBsKGNvbnN0
IEFic3RyYWN0TG9ja2VyJiBjb25zdHJhaW50U29sdmluZ0xvY2tlciwgQWJzdHJhY3RTbG90Vmlz
aXRvciYpOworCisgICAgdm9pZCBleGVjdXRlU3luY2hyb25vdXNseShBYnN0cmFjdFNsb3RWaXNp
dG9yJik7CisKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIE1hcmtpbmdDb25zdHJhaW50U2V0
OyAvLyBTbyBpdCBjYW4gc2V0IG1faW5kZXguCiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludEV4ZWN1dG9yUGFpci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50RXhlY3V0b3JQYWly
LmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0Nv
bnN0cmFpbnRFeGVjdXRvclBhaXIuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU0IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvRnVuY3Rpb24uaD4KKwor
bmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEFic3RyYWN0U2xvdFZpc2l0b3I7CitjbGFzcyBTbG90
VmlzaXRvcjsKKworc3RydWN0IE1hcmtpbmdDb25zdHJhaW50RXhlY3V0b3JQYWlyIHsKKyAgICBN
YXJraW5nQ29uc3RyYWludEV4ZWN1dG9yUGFpcigKKyAgICAgICAgOjpGdW5jdGlvbjx2b2lkKEFi
c3RyYWN0U2xvdFZpc2l0b3ImKT4gYWJzdHJhY3RTbG90VmlzaXRvckZ1bmMsCisgICAgICAgIDo6
RnVuY3Rpb248dm9pZChTbG90VmlzaXRvciYpPiBzbG90VmlzaXRvckZ1bmMpCisgICAgICAgIDog
YWJzdHJhY3RTbG90VmlzaXRvckZ1bmMoV1RGTW92ZShhYnN0cmFjdFNsb3RWaXNpdG9yRnVuYykp
CisgICAgICAgICwgc2xvdFZpc2l0b3JGdW5jKFdURk1vdmUoc2xvdFZpc2l0b3JGdW5jKSkKKyAg
ICB7IH0KKyAgICBNYXJraW5nQ29uc3RyYWludEV4ZWN1dG9yUGFpcihNYXJraW5nQ29uc3RyYWlu
dEV4ZWN1dG9yUGFpciYmKSA9IGRlZmF1bHQ7CisKKyAgICB2b2lkIGV4ZWN1dGUoQWJzdHJhY3RT
bG90VmlzaXRvciYgdmlzaXRvcikgeyBhYnN0cmFjdFNsb3RWaXNpdG9yRnVuYyh2aXNpdG9yKTsg
fQorICAgIHZvaWQgZXhlY3V0ZShTbG90VmlzaXRvciYgdmlzaXRvcikgeyBzbG90VmlzaXRvckZ1
bmModmlzaXRvcik7IH0KKworICAgIDo6RnVuY3Rpb248dm9pZChBYnN0cmFjdFNsb3RWaXNpdG9y
Jik+IGFic3RyYWN0U2xvdFZpc2l0b3JGdW5jOworICAgIDo6RnVuY3Rpb248dm9pZChTbG90Vmlz
aXRvciYpPiBzbG90VmlzaXRvckZ1bmM7Cit9OworCisjZGVmaW5lIE1BS0VfTUFSS0lOR19DT05T
VFJBSU5UX0VYRUNVVE9SX1BBSVIobGFtYmRhKSBcCisgICAgTWFya2luZ0NvbnN0cmFpbnRFeGVj
dXRvclBhaXIoKGxhbWJkYSksIChsYW1iZGEpKQorCit9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50U2V0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludFNl
dC5jcHAJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01h
cmtpbmdDb25zdHJhaW50U2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02Myw5ICs2Myw5IEBAIHZvaWQg
TWFya2luZ0NvbnN0cmFpbnRTZXQ6OmRpZFN0YXJ0TWFya2kKICAgICBtX2l0ZXJhdGlvbiA9IDE7
CiB9CiAKLXZvaWQgTWFya2luZ0NvbnN0cmFpbnRTZXQ6OmFkZChDU3RyaW5nIGFiYnJldmlhdGVk
TmFtZSwgQ1N0cmluZyBuYW1lLCA6OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3ImKT4gZnVuY3Rp
b24sIENvbnN0cmFpbnRWb2xhdGlsaXR5IHZvbGF0aWxpdHksIENvbnN0cmFpbnRDb25jdXJyZW5j
eSBjb25jdXJyZW5jeSwgQ29uc3RyYWludFBhcmFsbGVsaXNtIHBhcmFsbGVsaXNtKQordm9pZCBN
YXJraW5nQ29uc3RyYWludFNldDo6YWRkKENTdHJpbmcgYWJicmV2aWF0ZWROYW1lLCBDU3RyaW5n
IG5hbWUsIE1hcmtpbmdDb25zdHJhaW50RXhlY3V0b3JQYWlyJiYgZXhlY3V0b3JzLCBDb25zdHJh
aW50Vm9sYXRpbGl0eSB2b2xhdGlsaXR5LCBDb25zdHJhaW50Q29uY3VycmVuY3kgY29uY3VycmVu
Y3ksIENvbnN0cmFpbnRQYXJhbGxlbGlzbSBwYXJhbGxlbGlzbSkKIHsKLSAgICBhZGQobWFrZVVu
aXF1ZTxTaW1wbGVNYXJraW5nQ29uc3RyYWludD4oV1RGTW92ZShhYmJyZXZpYXRlZE5hbWUpLCBX
VEZNb3ZlKG5hbWUpLCBXVEZNb3ZlKGZ1bmN0aW9uKSwgdm9sYXRpbGl0eSwgY29uY3VycmVuY3ks
IHBhcmFsbGVsaXNtKSk7CisgICAgYWRkKG1ha2VVbmlxdWU8U2ltcGxlTWFya2luZ0NvbnN0cmFp
bnQ+KFdURk1vdmUoYWJicmV2aWF0ZWROYW1lKSwgV1RGTW92ZShuYW1lKSwgV1RGTW92ZShleGVj
dXRvcnMpLCB2b2xhdGlsaXR5LCBjb25jdXJyZW5jeSwgcGFyYWxsZWxpc20pKTsKIH0KIAogdm9p
ZCBNYXJraW5nQ29uc3RyYWludFNldDo6YWRkKApAQCAtMTY2LDEwICsxNjYsMTAgQEAgYm9vbCBN
YXJraW5nQ29uc3RyYWludFNldDo6ZXhlY3V0ZUNvbnZlcgogICAgIHJldHVybiAhc29sdmVyLmRp
ZFZpc2l0U29tZXRoaW5nKCk7CiB9CiAKLXZvaWQgTWFya2luZ0NvbnN0cmFpbnRTZXQ6OmV4ZWN1
dGVBbGwoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIE1hcmtpbmdDb25zdHJhaW50U2V0Ojpl
eGVjdXRlQWxsU3luY2hyb25vdXNseShBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewog
ICAgIGZvciAoYXV0byYgY29uc3RyYWludCA6IG1fc2V0KQotICAgICAgICBjb25zdHJhaW50LT5l
eGVjdXRlKHZpc2l0b3IpOworICAgICAgICBjb25zdHJhaW50LT5leGVjdXRlU3luY2hyb25vdXNs
eSh2aXNpdG9yKTsKICAgICBkYXRhTG9nSWYoT3B0aW9uczo6bG9nR0MoKSwgIiAiKTsKIH0KIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnRTZXQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWlu
dFNldC5oCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9N
YXJraW5nQ29uc3RyYWludFNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2LDYgKzI2LDcgQEAKICNwcmFn
bWEgb25jZQogCiAjaW5jbHVkZSAiTWFya2luZ0NvbnN0cmFpbnQuaCIKKyNpbmNsdWRlICJNYXJr
aW5nQ29uc3RyYWludEV4ZWN1dG9yUGFpci5oIgogI2luY2x1ZGUgPHd0Zi9CaXRWZWN0b3IuaD4K
ICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKQEAgLTQ2LDE4ICs0NywxOCBAQCBwdWJsaWM6CiAg
ICAgdm9pZCBhZGQoCiAgICAgICAgIENTdHJpbmcgYWJicmV2aWF0ZWROYW1lLAogICAgICAgICBD
U3RyaW5nIG5hbWUsCi0gICAgICAgIDo6RnVuY3Rpb248dm9pZChTbG90VmlzaXRvciYpPiwKKyAg
ICAgICAgTWFya2luZ0NvbnN0cmFpbnRFeGVjdXRvclBhaXImJiwKICAgICAgICAgQ29uc3RyYWlu
dFZvbGF0aWxpdHksCiAgICAgICAgIENvbnN0cmFpbnRDb25jdXJyZW5jeSA9IENvbnN0cmFpbnRD
b25jdXJyZW5jeTo6Q29uY3VycmVudCwKICAgICAgICAgQ29uc3RyYWludFBhcmFsbGVsaXNtID0g
Q29uc3RyYWludFBhcmFsbGVsaXNtOjpTZXF1ZW50aWFsKTsKICAgICAKICAgICB2b2lkIGFkZCgK
ICAgICAgICAgQ1N0cmluZyBhYmJyZXZpYXRlZE5hbWUsIENTdHJpbmcgbmFtZSwKLSAgICAgICAg
OjpGdW5jdGlvbjx2b2lkKFNsb3RWaXNpdG9yJik+IGZ1bmMsCisgICAgICAgIE1hcmtpbmdDb25z
dHJhaW50RXhlY3V0b3JQYWlyJiYgZXhlY3V0b3JzLAogICAgICAgICBDb25zdHJhaW50Vm9sYXRp
bGl0eSB2b2xhdGlsaXR5LAogICAgICAgICBDb25zdHJhaW50UGFyYWxsZWxpc20gcGFyYWxsZWxp
c20pCiAgICAgewotICAgICAgICBhZGQoYWJicmV2aWF0ZWROYW1lLCBuYW1lLCBXVEZNb3ZlKGZ1
bmMpLCB2b2xhdGlsaXR5LCBDb25zdHJhaW50Q29uY3VycmVuY3k6OkNvbmN1cnJlbnQsIHBhcmFs
bGVsaXNtKTsKKyAgICAgICAgYWRkKGFiYnJldmlhdGVkTmFtZSwgbmFtZSwgV1RGTW92ZShleGVj
dXRvcnMpLCB2b2xhdGlsaXR5LCBDb25zdHJhaW50Q29uY3VycmVuY3k6OkNvbmN1cnJlbnQsIHBh
cmFsbGVsaXNtKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBhZGQoc3RkOjp1bmlxdWVfcHRyPE1h
cmtpbmdDb25zdHJhaW50Pik7CkBAIC03MCwxMyArNzEsMTMgQEAgcHVibGljOgogICAgIC8vIFJl
dHVybnMgdHJ1ZSBpZiB0aGlzIGV4ZWN1dGVkIGFsbCBjb25zdHJhaW50cyBhbmQgbm9uZSBvZiB0
aGVtIHByb2R1Y2VkIG5ldyB3b3JrLiBUaGlzCiAgICAgLy8gYXNzdW1lcyB0aGF0IHlvdSd2ZSBh
bHJhZWR5IHZpc2l0ZWQgcm9vdHMgYW5kIGRyYWluZWQgZnJvbSB0aGVyZS4KICAgICBib29sIGV4
ZWN1dGVDb252ZXJnZW5jZShTbG90VmlzaXRvciYpOwotICAgIAorCiAgICAgLy8gU2ltcGx5IHJ1
bnMgYWxsIGNvbnN0cmFpbnRzIHdpdGhvdXQgYW55IHNoZW5hbmlnYW5zLgotICAgIHZvaWQgZXhl
Y3V0ZUFsbChTbG90VmlzaXRvciYpOworICAgIHZvaWQgZXhlY3V0ZUFsbFN5bmNocm9ub3VzbHko
QWJzdHJhY3RTbG90VmlzaXRvciYpOwogICAgIAogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3Mg
TWFya2luZ0NvbnN0cmFpbnRTb2x2ZXI7Ci0gICAgCisKICAgICBib29sIGV4ZWN1dGVDb252ZXJn
ZW5jZUltcGwoU2xvdFZpc2l0b3ImKTsKICAgICAKICAgICBIZWFwJiBtX2hlYXA7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludFNvbHZlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnRT
b2x2ZXIuY3BwCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9NYXJraW5nQ29uc3RyYWludFNvbHZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXIuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludFNvbHZlci5oCShy
ZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29u
c3RyYWludFNvbHZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL1NpbXBsZU1hcmtpbmdDb25zdHJhaW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9TaW1wbGVNYXJraW5nQ29uc3RyYWludC5jcHAJKHJldmlzaW9uIDI3
MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1NpbXBsZU1hcmtpbmdDb25zdHJh
aW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0zMCwxMSArMzAsMTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAK
IFNpbXBsZU1hcmtpbmdDb25zdHJhaW50OjpTaW1wbGVNYXJraW5nQ29uc3RyYWludCgKICAgICBD
U3RyaW5nIGFiYnJldmlhdGVkTmFtZSwgQ1N0cmluZyBuYW1lLAotICAgIDo6RnVuY3Rpb248dm9p
ZChTbG90VmlzaXRvciYpPiBleGVjdXRlRnVuY3Rpb24sCisgICAgTWFya2luZ0NvbnN0cmFpbnRF
eGVjdXRvclBhaXImJiBleGVjdXRvcnMsCiAgICAgQ29uc3RyYWludFZvbGF0aWxpdHkgdm9sYXRp
bGl0eSwgQ29uc3RyYWludENvbmN1cnJlbmN5IGNvbmN1cnJlbmN5LAogICAgIENvbnN0cmFpbnRQ
YXJhbGxlbGlzbSBwYXJhbGxlbGlzbSkKICAgICA6IE1hcmtpbmdDb25zdHJhaW50KFdURk1vdmUo
YWJicmV2aWF0ZWROYW1lKSwgV1RGTW92ZShuYW1lKSwgdm9sYXRpbGl0eSwgY29uY3VycmVuY3ks
IHBhcmFsbGVsaXNtKQotICAgICwgbV9leGVjdXRlRnVuY3Rpb24oV1RGTW92ZShleGVjdXRlRnVu
Y3Rpb24pKQorICAgICwgbV9leGVjdXRvcnMoV1RGTW92ZShleGVjdXRvcnMpKQogewogfQogCkBA
IC00MiwxMCArNDIsMTQgQEAgU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQ6On5TaW1wbGVNYXJraW5n
QwogewogfQogCi12b2lkIFNpbXBsZU1hcmtpbmdDb25zdHJhaW50OjpleGVjdXRlSW1wbChTbG90
VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFNpbXBs
ZU1hcmtpbmdDb25zdHJhaW50OjpleGVjdXRlSW1wbEltcGwoVmlzaXRvciYgdmlzaXRvcikKIHsK
LSAgICBtX2V4ZWN1dGVGdW5jdGlvbih2aXNpdG9yKTsKKyAgICBtX2V4ZWN1dG9ycy5leGVjdXRl
KHZpc2l0b3IpOwogfQogCit2b2lkIFNpbXBsZU1hcmtpbmdDb25zdHJhaW50OjpleGVjdXRlSW1w
bChBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKSB7IGV4ZWN1dGVJbXBsSW1wbCh2aXNpdG9y
KTsgfQordm9pZCBTaW1wbGVNYXJraW5nQ29uc3RyYWludDo6ZXhlY3V0ZUltcGwoU2xvdFZpc2l0
b3ImIHZpc2l0b3IpIHsgZXhlY3V0ZUltcGxJbXBsKHZpc2l0b3IpOyB9CisKIH0gLy8gbmFtZXNw
YWNlIEpTQwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TaW1wbGVNYXJraW5n
Q29uc3RyYWludC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Np
bXBsZU1hcmtpbmdDb25zdHJhaW50LmgJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL1NpbXBsZU1hcmtpbmdDb25zdHJhaW50LmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MjYsNyArMjYsNyBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJNYXJraW5nQ29uc3RyYWlu
dC5oIgotI2luY2x1ZGUgPHd0Zi9GdW5jdGlvbi5oPgorI2luY2x1ZGUgIk1hcmtpbmdDb25zdHJh
aW50RXhlY3V0b3JQYWlyLmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC0zNywyNiArMzcsMjgg
QEAgY2xhc3MgU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQgZmluYWwgOiBwdQogcHVibGljOgogICAg
IEpTX0VYUE9SVF9QUklWQVRFIFNpbXBsZU1hcmtpbmdDb25zdHJhaW50KAogICAgICAgICBDU3Ry
aW5nIGFiYnJldmlhdGVkTmFtZSwgQ1N0cmluZyBuYW1lLAotICAgICAgICA6OkZ1bmN0aW9uPHZv
aWQoU2xvdFZpc2l0b3ImKT4sCisgICAgICAgIE1hcmtpbmdDb25zdHJhaW50RXhlY3V0b3JQYWly
JiYsCiAgICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5LAogICAgICAgICBDb25zdHJhaW50Q29u
Y3VycmVuY3kgPSBDb25zdHJhaW50Q29uY3VycmVuY3k6OkNvbmN1cnJlbnQsCiAgICAgICAgIENv
bnN0cmFpbnRQYXJhbGxlbGlzbSA9IENvbnN0cmFpbnRQYXJhbGxlbGlzbTo6U2VxdWVudGlhbCk7
CiAgICAgCiAgICAgU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQoCiAgICAgICAgIENTdHJpbmcgYWJi
cmV2aWF0ZWROYW1lLCBDU3RyaW5nIG5hbWUsCi0gICAgICAgIDo6RnVuY3Rpb248dm9pZChTbG90
VmlzaXRvciYpPiBmdW5jLAorICAgICAgICBNYXJraW5nQ29uc3RyYWludEV4ZWN1dG9yUGFpciYm
IGV4ZWN1dG9ycywKICAgICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHkgdm9sYXRpbGl0eSwKICAg
ICAgICAgQ29uc3RyYWludFBhcmFsbGVsaXNtIHBhcmFsbGVsaXNtKQotICAgICAgICA6IFNpbXBs
ZU1hcmtpbmdDb25zdHJhaW50KGFiYnJldmlhdGVkTmFtZSwgbmFtZSwgV1RGTW92ZShmdW5jKSwg
dm9sYXRpbGl0eSwgQ29uc3RyYWludENvbmN1cnJlbmN5OjpDb25jdXJyZW50LCBwYXJhbGxlbGlz
bSkKKyAgICAgICAgOiBTaW1wbGVNYXJraW5nQ29uc3RyYWludChhYmJyZXZpYXRlZE5hbWUsIG5h
bWUsIFdURk1vdmUoZXhlY3V0b3JzKSwgdm9sYXRpbGl0eSwgQ29uc3RyYWludENvbmN1cnJlbmN5
OjpDb25jdXJyZW50LCBwYXJhbGxlbGlzbSkKICAgICB7CiAgICAgfQogICAgIAogICAgIEpTX0VY
UE9SVF9QUklWQVRFIH5TaW1wbGVNYXJraW5nQ29uc3RyYWludCgpIGZpbmFsOwogICAgIAogcHJp
dmF0ZToKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiBBTFdBWVNfSU5MSU5FIHZvaWQg
ZXhlY3V0ZUltcGxJbXBsKFZpc2l0b3ImKTsKKyAgICB2b2lkIGV4ZWN1dGVJbXBsKEFic3RyYWN0
U2xvdFZpc2l0b3ImKSBmaW5hbDsKICAgICB2b2lkIGV4ZWN1dGVJbXBsKFNsb3RWaXNpdG9yJikg
ZmluYWw7CiAKLSAgICA6OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3ImKT4gbV9leGVjdXRlRnVu
Y3Rpb247CisgICAgTWFya2luZ0NvbnN0cmFpbnRFeGVjdXRvclBhaXIgbV9leGVjdXRvcnM7CiB9
OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L1Nsb3RWaXNpdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9TbG90VmlzaXRvci5jcHAJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTc3LDE1ICs3Nywx
MCBAQCBzdGF0aWMgdm9pZCB2YWxpZGF0ZShKU0NlbGwqIGNlbGwpCiAjZW5kaWYKIAogU2xvdFZp
c2l0b3I6OlNsb3RWaXNpdG9yKEhlYXAmIGhlYXAsIENTdHJpbmcgY29kZU5hbWUpCi0gICAgOiBt
X2J5dGVzVmlzaXRlZCgwKQotICAgICwgbV92aXNpdENvdW50KDApCi0gICAgLCBtX2lzSW5QYXJh
bGxlbE1vZGUoZmFsc2UpCisgICAgOiBCYXNlKGhlYXAsIGNvZGVOYW1lLCBoZWFwLm1fb3BhcXVl
Um9vdHMpCiAgICAgLCBtX21hcmtpbmdWZXJzaW9uKE1hcmtlZFNwYWNlOjppbml0aWFsVmVyc2lv
bikKLSAgICAsIG1faGVhcChoZWFwKQotICAgICwgbV9jb2RlTmFtZShjb2RlTmFtZSkKICNpZiBB
U1NFUlRfRU5BQkxFRAogICAgICwgbV9pc0NoZWNraW5nRm9yRGVmYXVsdE1hcmtWaW9sYXRpb24o
ZmFsc2UpCi0gICAgLCBtX2lzRHJhaW5pbmcoZmFsc2UpCiAjZW5kaWYKIHsKIH0KQEAgLTExNyw4
ICsxMTIsOCBAQCB2b2lkIFNsb3RWaXNpdG9yOjpkaWRTdGFydE1hcmtpbmcoKQogCiB2b2lkIFNs
b3RWaXNpdG9yOjpyZXNldCgpCiB7CisgICAgQWJzdHJhY3RTbG90VmlzaXRvcjo6cmVzZXQoKTsK
ICAgICBtX2J5dGVzVmlzaXRlZCA9IDA7Ci0gICAgbV92aXNpdENvdW50ID0gMDsKICAgICBtX2hl
YXBBbmFseXplciA9IG51bGxwdHI7CiAgICAgUkVMRUFTRV9BU1NFUlQoIW1fY3VycmVudENlbGwp
OwogfQpAQCAtMjMwLDcgKzIyNSw3IEBAIHZvaWQgU2xvdFZpc2l0b3I6OmFwcGVuZEpTQ2VsbE9y
QXV4aWxpYXIKIHZvaWQgU2xvdFZpc2l0b3I6OmFwcGVuZFNsb3coSlNDZWxsKiBjZWxsLCBEZXBl
bmRlbmN5IGRlcGVuZGVuY3kpCiB7CiAgICAgaWYgKFVOTElLRUxZKG1faGVhcEFuYWx5emVyKSkK
LSAgICAgICAgbV9oZWFwQW5hbHl6ZXItPmFuYWx5emVFZGdlKG1fY3VycmVudENlbGwsIGNlbGws
IG1fcm9vdE1hcmtSZWFzb24pOworICAgICAgICBtX2hlYXBBbmFseXplci0+YW5hbHl6ZUVkZ2Uo
bV9jdXJyZW50Q2VsbCwgY2VsbCwgcm9vdE1hcmtSZWFzb24oKSk7CiAKICAgICBhcHBlbmRIaWRk
ZW5TbG93SW1wbChjZWxsLCBkZXBlbmRlbmN5KTsKIH0KQEAgLTgwNywxMiArODAyLDE3IEBAIE1h
cmtTdGFja0FycmF5JiBTbG90VmlzaXRvcjo6Y29ycmVzcG9uZGkKICAgICByZXR1cm4gKm1faGVh
cC5tX3NoYXJlZE11dGF0b3JNYXJrU3RhY2s7CiB9CiAKK05PX1JFVFVSTl9EVUVfVE9fQ1JBU0gg
dm9pZCBTbG90VmlzaXRvcjo6YWRkUGFyYWxsZWxDb25zdHJhaW50VGFzayhSZWZQdHI8U2hhcmVk
VGFzazx2b2lkKEFic3RyYWN0U2xvdFZpc2l0b3ImKT4+KQoreworICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7Cit9CisKIHZvaWQgU2xvdFZpc2l0b3I6OmFkZFBhcmFsbGVsQ29uc3Ry
YWludFRhc2soUmVmUHRyPFNoYXJlZFRhc2s8dm9pZChTbG90VmlzaXRvciYpPj4gdGFzaykKIHsK
ICAgICBSRUxFQVNFX0FTU0VSVChtX2N1cnJlbnRTb2x2ZXIpOwogICAgIFJFTEVBU0VfQVNTRVJU
KG1fY3VycmVudENvbnN0cmFpbnQpOwogICAgIFJFTEVBU0VfQVNTRVJUKHRhc2spOwotICAgIAor
CiAgICAgbV9jdXJyZW50U29sdmVyLT5hZGRQYXJhbGxlbFRhc2sodGFzaywgKm1fY3VycmVudENv
bnN0cmFpbnQpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90Vmlz
aXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNp
dG9yLmgJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Ns
b3RWaXNpdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDU5ICsyNSw3NiBAQAogCiAjcHJhZ21h
IG9uY2UKIAorI2luY2x1ZGUgIkFic3RyYWN0U2xvdFZpc2l0b3IuaCIKICNpbmNsdWRlICJIYW5k
bGVUeXBlcy5oIgogI2luY2x1ZGUgIkl0ZXJhdGlvblN0YXR1cy5oIgotI2luY2x1ZGUgIk1hcmtT
dGFjay5oIgotI2luY2x1ZGUgIlJvb3RNYXJrUmVhc29uLmgiCi0jaW5jbHVkZSAiVmlzaXRSYWNl
S2V5LmgiCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3dGYvTW9ub3Rvbmlj
VGltZS5oPgotI2luY2x1ZGUgPHd0Zi9TaGFyZWRUYXNrLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQv
Q1N0cmluZy5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIAotY2xhc3MgQ29uc2VydmF0aXZlUm9vdHM7
CiBjbGFzcyBHQ1RocmVhZFNoYXJlZERhdGE7Ci1jbGFzcyBIZWFwOwogY2xhc3MgSGVhcENlbGw7
CiBjbGFzcyBIZWFwQW5hbHl6ZXI7Ci1jbGFzcyBNYXJrZWRCbG9jazsKIGNsYXNzIE1hcmtpbmdD
b25zdHJhaW50OwogY2xhc3MgTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXI7Ci10ZW1wbGF0ZTx0eXBl
bmFtZSBUPiBjbGFzcyBXZWFrOwotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVHJhaXRz
PiBjbGFzcyBXcml0ZUJhcnJpZXJCYXNlOwogCiB0eXBlZGVmIHVpbnQzMl90IEhlYXBWZXJzaW9u
OwogCi1jbGFzcyBTbG90VmlzaXRvciB7CitjbGFzcyBTbG90VmlzaXRvciBmaW5hbCA6IHB1Ymxp
YyBBYnN0cmFjdFNsb3RWaXNpdG9yIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShTbG90Vmlz
aXRvcik7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiAKKyAgICB1c2luZyBCYXNlID0g
QWJzdHJhY3RTbG90VmlzaXRvcjsKKwogICAgIGZyaWVuZCBjbGFzcyBTZXRDdXJyZW50Q2VsbFNj
b3BlOwogICAgIGZyaWVuZCBjbGFzcyBIZWFwOwogCiBwdWJsaWM6CisgICAgY2xhc3MgQ29udGV4
dCB7CisgICAgcHVibGljOgorICAgICAgICBBTFdBWVNfSU5MSU5FIENvbnRleHQoQWJzdHJhY3RT
bG90VmlzaXRvciYsIEhlYXBDZWxsKikgeyB9CisgICAgfTsKKworICAgIGNsYXNzIFN1cHByZXNz
R0NWZXJpZmllclNjb3BlIHsKKyAgICBwdWJsaWM6CisgICAgICAgIFN1cHByZXNzR0NWZXJpZmll
clNjb3BlKFNsb3RWaXNpdG9yJikgeyB9CisgICAgfTsKKworICAgIGNsYXNzIERlZmF1bHRNYXJr
aW5nVmlvbGF0aW9uQXNzZXJ0aW9uU2NvcGUgeworICAgIHB1YmxpYzoKKyNpZiBBU1NFUlRfRU5B
QkxFRAorICAgICAgICBEZWZhdWx0TWFya2luZ1Zpb2xhdGlvbkFzc2VydGlvblNjb3BlKFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQorICAgICAgICAgICAgOiBtX3Zpc2l0b3IodmlzaXRvcikKKyAgICAg
ICAgeworICAgICAgICAgICAgbV93YXNDaGVja2luZ0ZvckRlZmF1bHRNYXJrVmlvbGF0aW9uID0g
bV92aXNpdG9yLm1faXNDaGVja2luZ0ZvckRlZmF1bHRNYXJrVmlvbGF0aW9uOworICAgICAgICAg
ICAgbV92aXNpdG9yLm1faXNDaGVja2luZ0ZvckRlZmF1bHRNYXJrVmlvbGF0aW9uID0gZmFsc2U7
CisgICAgICAgIH0KKworICAgICAgICB+RGVmYXVsdE1hcmtpbmdWaW9sYXRpb25Bc3NlcnRpb25T
Y29wZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1fdmlzaXRvci5tX2lzQ2hlY2tpbmdGb3JE
ZWZhdWx0TWFya1Zpb2xhdGlvbiA9IG1fd2FzQ2hlY2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlv
bjsKKyAgICAgICAgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgU2xvdFZpc2l0b3ImIG1fdmlz
aXRvcjsKKyAgICAgICAgYm9vbCBtX3dhc0NoZWNraW5nRm9yRGVmYXVsdE1hcmtWaW9sYXRpb247
CisjZWxzZQorICAgICAgICBEZWZhdWx0TWFya2luZ1Zpb2xhdGlvbkFzc2VydGlvblNjb3BlKFNs
b3RWaXNpdG9yJikgeyB9CisjZW5kaWYKKyAgICB9OworCiAgICAgU2xvdFZpc2l0b3IoSGVhcCYs
IENTdHJpbmcgY29kZU5hbWUpOwogICAgIH5TbG90VmlzaXRvcigpOwogCi0gICAgTWFya1N0YWNr
QXJyYXkmIGNvbGxlY3Rvck1hcmtTdGFjaygpIHsgcmV0dXJuIG1fY29sbGVjdG9yU3RhY2s7IH0K
LSAgICBNYXJrU3RhY2tBcnJheSYgbXV0YXRvck1hcmtTdGFjaygpIHsgcmV0dXJuIG1fbXV0YXRv
clN0YWNrOyB9Ci0gICAgY29uc3QgTWFya1N0YWNrQXJyYXkmIGNvbGxlY3Rvck1hcmtTdGFjaygp
IGNvbnN0IHsgcmV0dXJuIG1fY29sbGVjdG9yU3RhY2s7IH0KLSAgICBjb25zdCBNYXJrU3RhY2tB
cnJheSYgbXV0YXRvck1hcmtTdGFjaygpIGNvbnN0IHsgcmV0dXJuIG1fbXV0YXRvclN0YWNrOyB9
Ci0gICAgCi0gICAgVk0mIHZtKCk7Ci0gICAgY29uc3QgVk0mIHZtKCkgY29uc3Q7Ci0gICAgSGVh
cCogaGVhcCgpIGNvbnN0OworICAgIHZvaWQgYXBwZW5kKGNvbnN0IENvbnNlcnZhdGl2ZVJvb3Rz
JikgZmluYWw7CiAKLSAgICB2b2lkIGFwcGVuZChjb25zdCBDb25zZXJ2YXRpdmVSb290cyYpOwot
ICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFRyYWl0cz4gdm9pZCBhcHBl
bmQoY29uc3QgV3JpdGVCYXJyaWVyQmFzZTxULCBUcmFpdHM+Jik7CiAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVCwgdHlwZW5hbWUgVHJhaXRzPiB2b2lkIGFwcGVuZEhpZGRlbihjb25zdCBXcml0ZUJh
cnJpZXJCYXNlPFQsIFRyYWl0cz4mKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJdGVyYXRvcj4g
dm9pZCBhcHBlbmQoSXRlcmF0b3IgYmVnaW4gLCBJdGVyYXRvciBlbmQpOwotICAgIHZvaWQgYXBw
ZW5kVmFsdWVzKGNvbnN0IFdyaXRlQmFycmllckJhc2U8VW5rbm93biwgUmF3VmFsdWVUcmFpdHM8
VW5rbm93bj4+Kiwgc2l6ZV90IGNvdW50KTsKLSAgICB2b2lkIGFwcGVuZFZhbHVlc0hpZGRlbihj
b25zdCBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24sIFJhd1ZhbHVlVHJhaXRzPFVua25vd24+Pios
IHNpemVfdCBjb3VudCk7Ci0gICAgCisgICAgQUxXQVlTX0lOTElORSB2b2lkIGFwcGVuZFZhbHVl
cyhjb25zdCBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24sIFJhd1ZhbHVlVHJhaXRzPFVua25vd24+
PiosIHNpemVfdCBjb3VudCk7CisgICAgQUxXQVlTX0lOTElORSB2b2lkIGFwcGVuZFZhbHVlc0hp
ZGRlbihjb25zdCBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24sIFJhd1ZhbHVlVHJhaXRzPFVua25v
d24+PiosIHNpemVfdCBjb3VudCk7CisKICAgICAvLyBUaGVzZSBkb24ndCByZXF1aXJlIHlvdSB0
byBwcm92ZSB0aGF0IHlvdSBoYXZlIGEgV3JpdGVCYXJyaWVyPD4uIFRoYXQgbWFrZXMgc2Vuc2UK
ICAgICAvLyBmb3I6CiAgICAgLy8KQEAgLTg3LDMyICsxMDQsMjcgQEAgcHVibGljOgogICAgIC8v
CiAgICAgLy8gSWYgeW91IGFyZSBub3QgYSByb290IGFuZCB5b3UgZG9uJ3Qga25vdyB3aGF0IGtp
bmQgb2YgYmFycmllciB5b3UgaGF2ZSwgdGhlbiB5b3UKICAgICAvLyBzaG91bGRuJ3QgY2FsbCB0
aGVzZSBtZXRob2RzLgotICAgIHZvaWQgYXBwZW5kVW5iYXJyaWVyZWQoSlNWYWx1ZSk7Ci0gICAg
dm9pZCBhcHBlbmRVbmJhcnJpZXJlZChKU1ZhbHVlKiwgc2l6ZV90KTsKLSAgICB2b2lkIGFwcGVu
ZFVuYmFycmllcmVkKEpTQ2VsbCopOworICAgIEFMV0FZU19JTkxJTkUgdm9pZCBhcHBlbmRVbmJh
cnJpZXJlZChKU1ZhbHVlKTsKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgYXBwZW5kVW5iYXJyaWVy
ZWQoSlNWYWx1ZSosIHNpemVfdCk7CisgICAgdm9pZCBhcHBlbmRVbmJhcnJpZXJlZChKU0NlbGwq
KSBmaW5hbDsKICAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogICAgIHZvaWQgYXBwZW5k
KGNvbnN0IFdlYWs8VD4mIHdlYWspOwogICAgIAotICAgIHZvaWQgYXBwZW5kSGlkZGVuVW5iYXJy
aWVyZWQoSlNWYWx1ZSk7Ci0gICAgdm9pZCBhcHBlbmRIaWRkZW5VbmJhcnJpZXJlZChKU0NlbGwq
KTsKLQotICAgIGJvb2wgYWRkT3BhcXVlUm9vdCh2b2lkKik7IC8vIFJldHVybnMgdHJ1ZSBpZiB0
aGUgcm9vdCB3YXMgbmV3LgotICAgIAotICAgIGJvb2wgY29udGFpbnNPcGFxdWVSb290KHZvaWQq
KSBjb25zdDsKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgYXBwZW5kSGlkZGVuVW5iYXJyaWVyZWQo
SlNWYWx1ZSk7CisgICAgdm9pZCBhcHBlbmRIaWRkZW5VbmJhcnJpZXJlZChKU0NlbGwqKSBmaW5h
bDsKIAotICAgIGJvb2wgaXNFbXB0eSgpIHsgcmV0dXJuIG1fY29sbGVjdG9yU3RhY2suaXNFbXB0
eSgpICYmIG1fbXV0YXRvclN0YWNrLmlzRW1wdHkoKTsgfQorICAgIGJvb2wgaXNGaXJzdFZpc2l0
KCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9pc0ZpcnN0VmlzaXQ7IH0KIAotICAgIGJvb2wgaXNG
aXJzdFZpc2l0KCkgY29uc3QgeyByZXR1cm4gbV9pc0ZpcnN0VmlzaXQ7IH0KKyAgICBib29sIGlz
TWFya2VkKGNvbnN0IHZvaWQqKSBjb25zdCBmaW5hbDsKKyAgICBib29sIGlzTWFya2VkKE1hcmtl
ZEJsb2NrJiwgSGVhcENlbGwqKSBjb25zdCBmaW5hbDsKKyAgICBib29sIGlzTWFya2VkKFByZWNp
c2VBbGxvY2F0aW9uJiwgSGVhcENlbGwqKSBjb25zdCBmaW5hbDsKIAogICAgIHZvaWQgZGlkU3Rh
cnRNYXJraW5nKCk7CiAgICAgdm9pZCByZXNldCgpOwogICAgIHZvaWQgY2xlYXJNYXJrU3RhY2tz
KCk7CiAKICAgICBzaXplX3QgYnl0ZXNWaXNpdGVkKCkgY29uc3QgeyByZXR1cm4gbV9ieXRlc1Zp
c2l0ZWQ7IH0KLSAgICBzaXplX3QgdmlzaXRDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fdmlzaXRD
b3VudDsgfQotICAgIAotICAgIHZvaWQgYWRkVG9WaXNpdENvdW50KHNpemVfdCB2YWx1ZSkgeyBt
X3Zpc2l0Q291bnQgKz0gdmFsdWU7IH0KIAogICAgIHZvaWQgZG9uYXRlKCk7CiAgICAgdm9pZCBk
cmFpbihNb25vdG9uaWNUaW1lIHRpbWVvdXQgPSBNb25vdG9uaWNUaW1lOjppbmZpbml0eSgpKTsK
QEAgLTEzNSwyNCArMTQ3LDE4IEBAIHB1YmxpYzoKICAgICAKICAgICAvLyBUaGlzIGluZm9ybXMg
dGhlIEdDIGFib3V0IGF1eGlsaWFyeSBvZiBzb21lIHNpemUgdGhhdCB3ZSBhcmUga2VlcGluZyBh
bGl2ZS4gSWYgeW91IGRvbid0IGRvCiAgICAgLy8gdGhpcyB0aGVuIHRoZSBzcGFjZSB3aWxsIGJl
IGZyZWVkIGF0IGVuZCBvZiBHQy4KLSAgICB2b2lkIG1hcmtBdXhpbGlhcnkoY29uc3Qgdm9pZCog
YmFzZSk7CisgICAgdm9pZCBtYXJrQXV4aWxpYXJ5KGNvbnN0IHZvaWQqIGJhc2UpIGZpbmFsOwog
Ci0gICAgdm9pZCByZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQoc2l6ZV90KTsKKyAgICB2b2lkIHJl
cG9ydEV4dHJhTWVtb3J5VmlzaXRlZChzaXplX3QpIGZpbmFsOwogI2lmIEVOQUJMRShSRVNPVVJD
RV9VU0FHRSkKLSAgICB2b2lkIHJlcG9ydEV4dGVybmFsTWVtb3J5VmlzaXRlZChzaXplX3QpOwor
ICAgIHZvaWQgcmVwb3J0RXh0ZXJuYWxNZW1vcnlWaXNpdGVkKHNpemVfdCkgZmluYWw7CiAjZW5k
aWYKICAgICAKLSAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKLQotICAgIGJvb2wg
aXNBbmFseXppbmdIZWFwKCkgY29uc3QgeyByZXR1cm4gISFtX2hlYXBBbmFseXplcjsgfQotICAg
IEhlYXBBbmFseXplciogaGVhcEFuYWx5emVyKCkgY29uc3QgeyByZXR1cm4gbV9oZWFwQW5hbHl6
ZXI7IH0KLSAgICAKLSAgICBSb290TWFya1JlYXNvbiByb290TWFya1JlYXNvbigpIGNvbnN0IHsg
cmV0dXJuIG1fcm9vdE1hcmtSZWFzb247IH0KLSAgICB2b2lkIHNldFJvb3RNYXJrUmVhc29uKFJv
b3RNYXJrUmVhc29uIHJlYXNvbikgeyBtX3Jvb3RNYXJrUmVhc29uID0gcmVhc29uOyB9CisgICAg
dm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3QgZmluYWw7CiAKICAgICBIZWFwVmVyc2lvbiBt
YXJraW5nVmVyc2lvbigpIGNvbnN0IHsgcmV0dXJuIG1fbWFya2luZ1ZlcnNpb247IH0KIAotICAg
IGJvb2wgbXV0YXRvcklzU3RvcHBlZCgpIGNvbnN0IHsgcmV0dXJuIG1fbXV0YXRvcklzU3RvcHBl
ZDsgfQorICAgIGJvb2wgbXV0YXRvcklzU3RvcHBlZCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1f
bXV0YXRvcklzU3RvcHBlZDsgfQogICAgIAogICAgIExvY2smIHJpZ2h0VG9SdW4oKSB7IHJldHVy
biBtX3JpZ2h0VG9SdW47IH0KICAgICAKQEAgLTE2NCwyMCArMTcwLDE3IEBAIHB1YmxpYzoKICAg
ICAKICAgICB2b2lkIG9wdGltaXplRm9yU3RvcHBlZE11dGF0b3IoKTsKICAgICAKLSAgICB2b2lk
IGRpZFJhY2UoY29uc3QgVmlzaXRSYWNlS2V5Jik7CisgICAgdm9pZCBkaWRSYWNlKGNvbnN0IFZp
c2l0UmFjZUtleSYpIGZpbmFsOwogICAgIHZvaWQgZGlkUmFjZShKU0NlbGwqIGNlbGwsIGNvbnN0
IGNoYXIqIHJlYXNvbikgeyBkaWRSYWNlKFZpc2l0UmFjZUtleShjZWxsLCByZWFzb24pKTsgfQog
ICAgIAotICAgIHZvaWQgdmlzaXRBc0NvbnN0cmFpbnQoY29uc3QgSlNDZWxsKik7CisgICAgdm9p
ZCB2aXNpdEFzQ29uc3RyYWludChjb25zdCBKU0NlbGwqKSBmaW5hbDsKICAgICAKICAgICBib29s
IGRpZFJlYWNoVGVybWluYXRpb24oKTsKICAgICAKLSAgICB2b2lkIHNldElnbm9yZU5ld09wYXF1
ZVJvb3RzKGJvb2wgdmFsdWUpIHsgbV9pZ25vcmVOZXdPcGFxdWVSb290cyA9IHZhbHVlOyB9Ci0K
ICAgICB2b2lkIGRvbmF0ZUFsbCgpOwogICAgIAotICAgIGNvbnN0IGNoYXIqIGNvZGVOYW1lKCkg
Y29uc3QgeyByZXR1cm4gbV9jb2RlTmFtZS5kYXRhKCk7IH0KLSAgICAKLSAgICBKU19FWFBPUlRf
UFJJVkFURSB2b2lkIGFkZFBhcmFsbGVsQ29uc3RyYWludFRhc2soUmVmUHRyPFNoYXJlZFRhc2s8
dm9pZChTbG90VmlzaXRvciYpPj4pOworICAgIE5PX1JFVFVSTl9EVUVfVE9fQ1JBU0ggdm9pZCBh
ZGRQYXJhbGxlbENvbnN0cmFpbnRUYXNrKFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoQWJzdHJhY3RT
bG90VmlzaXRvciYpPj4pIGZpbmFsOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgYWRkUGFy
YWxsZWxDb25zdHJhaW50VGFzayhSZWZQdHI8U2hhcmVkVGFzazx2b2lkKFNsb3RWaXNpdG9yJik+
PikgZmluYWw7CiAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIFBhcmFsbGVsTW9kZUVuYWJs
ZXI7CkBAIC0yMTYsMzkgKzIxOSwyNSBAQCBwcml2YXRlOgogCiAgICAgTWFya1N0YWNrQXJyYXkm
IGNvcnJlc3BvbmRpbmdHbG9iYWxTdGFjayhNYXJrU3RhY2tBcnJheSYpOwogCi0gICAgTWFya1N0
YWNrQXJyYXkgbV9jb2xsZWN0b3JTdGFjazsKLSAgICBNYXJrU3RhY2tBcnJheSBtX211dGF0b3JT
dGFjazsKLSAgICAKLSAgICBzaXplX3QgbV9ieXRlc1Zpc2l0ZWQ7Ci0gICAgc2l6ZV90IG1fdmlz
aXRDb3VudDsKLSAgICBzaXplX3QgbV9ub25DZWxsVmlzaXRDb3VudCB7IDAgfTsgLy8gVXNlZCBm
b3IgaW5jcmVtZW50YWwgZHJhaW5pbmcsIGlnbm9yZWQgb3RoZXJ3aXNlLgotICAgIENoZWNrZWRT
aXplIG1fZXh0cmFNZW1vcnlTaXplIHsgMCB9OwotICAgIGJvb2wgbV9pc0luUGFyYWxsZWxNb2Rl
OwotICAgIGJvb2wgbV9pZ25vcmVOZXdPcGFxdWVSb290cyB7IGZhbHNlIH07IC8vIFVzZWZ1bCBh
cyBhIGRlYnVnZ2luZyBtb2RlLgorICAgIGJvb2wgbV9pc0luUGFyYWxsZWxNb2RlIHsgZmFsc2Ug
fTsKIAogICAgIEhlYXBWZXJzaW9uIG1fbWFya2luZ1ZlcnNpb247Ci0gICAgCi0gICAgSGVhcCYg
bV9oZWFwOworCisgICAgc2l6ZV90IG1fYnl0ZXNWaXNpdGVkIHsgMCB9OworICAgIHNpemVfdCBt
X25vbkNlbGxWaXNpdENvdW50IHsgMCB9OyAvLyBVc2VkIGZvciBpbmNyZW1lbnRhbCBkcmFpbmlu
ZywgaWdub3JlZCBvdGhlcndpc2UuCisgICAgQ2hlY2tlZFNpemUgbV9leHRyYU1lbW9yeVNpemUg
eyAwIH07CiAKICAgICBIZWFwQW5hbHl6ZXIqIG1faGVhcEFuYWx5emVyIHsgbnVsbHB0ciB9Owog
ICAgIEpTQ2VsbCogbV9jdXJyZW50Q2VsbCB7IG51bGxwdHIgfTsKLSAgICBSb290TWFya1JlYXNv
biBtX3Jvb3RNYXJrUmVhc29uIHsgUm9vdE1hcmtSZWFzb246Ok5vbmUgfTsKICAgICBib29sIG1f
aXNGaXJzdFZpc2l0IHsgZmFsc2UgfTsKICAgICBib29sIG1fbXV0YXRvcklzU3RvcHBlZCB7IGZh
bHNlIH07CiAgICAgYm9vbCBtX2Nhbk9wdGltaXplRm9yU3RvcHBlZE11dGF0b3IgeyBmYWxzZSB9
OwogICAgIExvY2sgbV9yaWdodFRvUnVuOwogICAgIAotICAgIENTdHJpbmcgbV9jb2RlTmFtZTsK
LSAgICAKLSAgICBNYXJraW5nQ29uc3RyYWludCogbV9jdXJyZW50Q29uc3RyYWludCB7IG51bGxw
dHIgfTsKLSAgICBNYXJraW5nQ29uc3RyYWludFNvbHZlciogbV9jdXJyZW50U29sdmVyIHsgbnVs
bHB0ciB9OwotICAgIAogICAgIC8vIFB1dCBwYWRkaW5nIGhlcmUgdG8gbWl0aWdhdGUgZmFsc2Ug
c2hhcmluZyBiZXR3ZWVuIG11bHRpcGxlIFNsb3RWaXNpdG9ycy4KICAgICBjaGFyIHBhZGRpbmdb
NjRdOwotcHVibGljOgogI2lmIEFTU0VSVF9FTkFCTEVECi0gICAgYm9vbCBtX2lzQ2hlY2tpbmdG
b3JEZWZhdWx0TWFya1Zpb2xhdGlvbjsKLSAgICBib29sIG1faXNEcmFpbmluZzsKKyAgICBib29s
IG1faXNDaGVja2luZ0ZvckRlZmF1bHRNYXJrVmlvbGF0aW9uIHsgZmFsc2UgfTsKICNlbmRpZgog
fTsKIApAQCAtMjcxLDIzICsyNjAsNCBAQCBwcml2YXRlOgogICAgIFNsb3RWaXNpdG9yJiBtX3N0
YWNrOwogfTsKIAotY2xhc3MgU2V0Um9vdE1hcmtSZWFzb25TY29wZSB7Ci1wdWJsaWM6Ci0gICAg
U2V0Um9vdE1hcmtSZWFzb25TY29wZShTbG90VmlzaXRvciYgdmlzaXRvciwgUm9vdE1hcmtSZWFz
b24gcmVhc29uKQotICAgICAgICA6IG1fdmlzaXRvcih2aXNpdG9yKQotICAgICAgICAsIG1fcHJl
dmlvdXNSZWFzb24odmlzaXRvci5yb290TWFya1JlYXNvbigpKQotICAgIHsKLSAgICAgICAgbV92
aXNpdG9yLnNldFJvb3RNYXJrUmVhc29uKHJlYXNvbik7Ci0gICAgfQotCi0gICAgflNldFJvb3RN
YXJrUmVhc29uU2NvcGUoKQotICAgIHsKLSAgICAgICAgbV92aXNpdG9yLnNldFJvb3RNYXJrUmVh
c29uKG1fcHJldmlvdXNSZWFzb24pOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBTbG90VmlzaXRv
ciYgbV92aXNpdG9yOwotICAgIFJvb3RNYXJrUmVhc29uIG1fcHJldmlvdXNSZWFzb247Ci19Owot
CiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Ns
b3RWaXNpdG9ySW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL1Nsb3RWaXNpdG9ySW5saW5lcy5oCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvcklubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxOSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTI1LDkgKzI1LDEwIEBACiAKICNwcmFnbWEgb25jZQogCisjaW5jbHVkZSAiQWJzdHJhY3RTbG90
VmlzaXRvcklubGluZXMuaCIKKyNpbmNsdWRlICJNYXJrZWRCbG9jay5oIgorI2luY2x1ZGUgIlBy
ZWNpc2VBbGxvY2F0aW9uLmgiCiAjaW5jbHVkZSAiU2xvdFZpc2l0b3IuaCIKLSNpbmNsdWRlICJX
ZWFrLmgiCi0jaW5jbHVkZSAiV2Vha0lubGluZXMuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAg
LTEzNCwyMSArMTM1LDE5IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBTbG90VmlzaXRvcjo6YXBwZW5k
VmEKICAgICAgICAgYXBwZW5kSGlkZGVuKGJhcnJpZXJzW2ldKTsKIH0KIAotaW5saW5lIGJvb2wg
U2xvdFZpc2l0b3I6OmFkZE9wYXF1ZVJvb3Qodm9pZCogcHRyKQorQUxXQVlTX0lOTElORSBib29s
IFNsb3RWaXNpdG9yOjppc01hcmtlZChjb25zdCB2b2lkKiBwKSBjb25zdAogewotICAgIGlmICgh
cHRyKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKG1faWdub3JlTmV3T3BhcXVlUm9v
dHMpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoIWhlYXAoKS0+bV9vcGFxdWVSb290
cy5hZGQocHRyKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1fdmlzaXRDb3VudCsrOwot
ICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBoZWFwKCktPmlzTWFya2VkKHApOwogfQogCi1p
bmxpbmUgYm9vbCBTbG90VmlzaXRvcjo6Y29udGFpbnNPcGFxdWVSb290KHZvaWQqIHB0cikgY29u
c3QKK0FMV0FZU19JTkxJTkUgYm9vbCBTbG90VmlzaXRvcjo6aXNNYXJrZWQoTWFya2VkQmxvY2sm
IGNvbnRhaW5lciwgSGVhcENlbGwqIGNlbGwpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGhlYXAoKS0+
bV9vcGFxdWVSb290cy5jb250YWlucyhwdHIpOworICAgIHJldHVybiBjb250YWluZXIuaXNNYXJr
ZWQobWFya2luZ1ZlcnNpb24oKSwgY2VsbCk7Cit9CisKK0FMV0FZU19JTkxJTkUgYm9vbCBTbG90
VmlzaXRvcjo6aXNNYXJrZWQoUHJlY2lzZUFsbG9jYXRpb24mIGNvbnRhaW5lciwgSGVhcENlbGwq
IGNlbGwpIGNvbnN0Cit7CisgICAgcmV0dXJuIGNvbnRhaW5lci5pc01hcmtlZChtYXJraW5nVmVy
c2lvbigpLCBjZWxsKTsKIH0KIAogaW5saW5lIHZvaWQgU2xvdFZpc2l0b3I6OnJlcG9ydEV4dHJh
TWVtb3J5VmlzaXRlZChzaXplX3Qgc2l6ZSkKQEAgLTE2OSwyMSArMTY4LDYgQEAgaW5saW5lIHZv
aWQgU2xvdFZpc2l0b3I6OnJlcG9ydEV4dGVybmFsTQogfQogI2VuZGlmCiAKLWlubGluZSBIZWFw
KiBTbG90VmlzaXRvcjo6aGVhcCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuICZtX2hlYXA7Ci19Ci0K
LWlubGluZSBWTSYgU2xvdFZpc2l0b3I6OnZtKCkKLXsKLSAgICByZXR1cm4gbV9oZWFwLnZtKCk7
Ci19Ci0KLWlubGluZSBjb25zdCBWTSYgU2xvdFZpc2l0b3I6OnZtKCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gbV9oZWFwLnZtKCk7Ci19Ci0KIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CiBJdGVyYXRp
b25TdGF0dXMgU2xvdFZpc2l0b3I6OmZvckVhY2hNYXJrU3RhY2soY29uc3QgRnVuYyYgZnVuYykK
IHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yTWFjcm9zLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3JNYWNy
b3MuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90Vmlz
aXRvck1hY3Jvcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTIzIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKK25hbWVz
cGFjZSBKU0MgeworCitjbGFzcyBBYnN0cmFjdFNsb3RWaXNpdG9yOworY2xhc3MgSlNDZWxsOwor
Y2xhc3MgU2xvdFZpc2l0b3I7CisKKyNkZWZpbmUgVU5VU0VEX01PRElGSUVSX0FSR1VNRU5UIC8q
IHVudXNlZCAqLworCisjZGVmaW5lIERFQ0xBUkVfVU5VU0VEX1NUUlVDVF9UT19URVJNSU5BVEVf
VklTSVRfTUFDUk9fRVhQQU5ERVJfSU1QTChjb3VudGVyKSBcCisgICAgc3RydWN0IFVudXNlZFNs
b3RWaXNpdG9yTWFjcm9TdHJ1Y3RTb1dlQ2FuSGF2ZUFTZW1pY29sb24jI2NvdW50ZXIgeyB9CisK
KyNkZWZpbmUgREVDTEFSRV9VTlVTRURfU1RSVUNUX1RPX1RFUk1JTkFURV9WSVNJVF9NQUNST19F
WFBBTkRFUihjb3VudGVyKSBcCisgICAgREVDTEFSRV9VTlVTRURfU1RSVUNUX1RPX1RFUk1JTkFU
RV9WSVNJVF9NQUNST19FWFBBTkRFUl9JTVBMKGNvdW50ZXIpCisKKyNkZWZpbmUgREVDTEFSRV9V
TlVTRURfU1RSVUNUX1RPX1RFUk1JTkFURV9WSVNJVF9NQUNSTyBcCisgICAgREVDTEFSRV9VTlVT
RURfU1RSVUNUX1RPX1RFUk1JTkFURV9WSVNJVF9NQUNST19FWFBBTkRFUihfX0NPVU5URVJfXykK
KworLy8gTWFjcm9zIGZvciB2aXNpdEFnZ3JlZ2F0ZSgpLgorCisjZGVmaW5lIERFQ0xBUkVfVklT
SVRfQUdHUkVHQVRFX1dJVEhfTU9ESUZJRVIocG9zdE1vZGlmaWVyKSBcCitwcml2YXRlOiBcCisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gQUxXQVlTX0lOTElORSB2b2lkIHZpc2l0QWdn
cmVnYXRlSW1wbChWaXNpdG9yJikgcG9zdE1vZGlmaWVyOyBcCitwdWJsaWM6IFwKKyAgICB2b2lk
IHZpc2l0QWdncmVnYXRlKEFic3RyYWN0U2xvdFZpc2l0b3ImKSBwb3N0TW9kaWZpZXI7IFwKKyAg
ICB2b2lkIHZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJikgcG9zdE1vZGlmaWVyCisKKyNkZWZp
bmUgREVDTEFSRV9WSVNJVF9BR0dSRUdBVEUgXAorICAgIERFQ0xBUkVfVklTSVRfQUdHUkVHQVRF
X1dJVEhfTU9ESUZJRVIoVU5VU0VEX01PRElGSUVSX0FSR1VNRU5UKQorCisjZGVmaW5lIERFRklO
RV9WSVNJVF9BR0dSRUdBVEVfV0lUSF9NT0RJRklFUihjbGFzc05hbWUsIHBvc3RNb2RpZmllcikg
XAorICAgIHZvaWQgY2xhc3NOYW1lOjp2aXNpdEFnZ3JlZ2F0ZShBYnN0cmFjdFNsb3RWaXNpdG9y
JiB2aXNpdG9yKSBwb3N0TW9kaWZpZXIgeyB2aXNpdEFnZ3JlZ2F0ZUltcGwodmlzaXRvcik7IH0g
XAorICAgIHZvaWQgY2xhc3NOYW1lOjp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYgdmlzaXRv
cikgcG9zdE1vZGlmaWVyIHsgdmlzaXRBZ2dyZWdhdGVJbXBsKHZpc2l0b3IpOyB9IFwKKyAgICBE
RUNMQVJFX1VOVVNFRF9TVFJVQ1RfVE9fVEVSTUlOQVRFX1ZJU0lUX01BQ1JPCisKKyNkZWZpbmUg
REVGSU5FX1ZJU0lUX0FHR1JFR0FURShjbGFzc05hbWUpIFwKKyAgICBERUZJTkVfVklTSVRfQUdH
UkVHQVRFX1dJVEhfTU9ESUZJRVIoY2xhc3NOYW1lLCBVTlVTRURfTU9ESUZJRVJfQVJHVU1FTlQp
CisKKy8vIE1hY3JvcyBmb3Igc3RhdGljIHZpc2l0Q2hpbGRyZW4oKS4KKworI2RlZmluZSBERUNM
QVJFX1ZJU0lUX0NISUxEUkVOX1dJVEhfTU9ESUZJRVIocHJlTW9kaWZpZXIpIFwKK3ByaXZhdGU6
IFwKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiBBTFdBWVNfSU5MSU5FIHN0YXRpYyB2
b2lkIHZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCosIFZpc2l0b3ImKTsgXAorcHVibGljOiBcCisg
ICAgcHJlTW9kaWZpZXIgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBBYnN0cmFj
dFNsb3RWaXNpdG9yJik7IFwKKyAgICBwcmVNb2RpZmllciBzdGF0aWMgdm9pZCB2aXNpdENoaWxk
cmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJikKKworI2RlZmluZSBERUNMQVJFX1ZJU0lUX0NISUxE
UkVOIFwKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOX1dJVEhfTU9ESUZJRVIoVU5VU0VEX01P
RElGSUVSX0FSR1VNRU5UKQorCisjZGVmaW5lIERFRklORV9WSVNJVF9DSElMRFJFTl9XSVRIX01P
RElGSUVSKHByZU1vZGlmaWVyLCBjbGFzc05hbWUpIFwKKyAgICBwcmVNb2RpZmllciB2b2lkIGNs
YXNzTmFtZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIEFic3RyYWN0U2xvdFZpc2l0b3Im
IHZpc2l0b3IpIFwKKyAgICB7IFwKKyAgICAgICAgQWJzdHJhY3RTbG90VmlzaXRvcjo6Q29udGV4
dCBjb250ZXh0KHZpc2l0b3IsIGNlbGwpOyBcCisgICAgICAgIHZpc2l0Q2hpbGRyZW5JbXBsKGNl
bGwsIHZpc2l0b3IpOyBcCisgICAgfSBcCisgICAgcHJlTW9kaWZpZXIgdm9pZCBjbGFzc05hbWU6
OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikgeyB2aXNp
dENoaWxkcmVuSW1wbChjZWxsLCB2aXNpdG9yKTsgfSBcCisgICAgREVDTEFSRV9VTlVTRURfU1RS
VUNUX1RPX1RFUk1JTkFURV9WSVNJVF9NQUNSTworCisjZGVmaW5lIERFRklORV9WSVNJVF9DSElM
RFJFTihjbGFzc05hbWUpIFwKKyAgICBERUZJTkVfVklTSVRfQ0hJTERSRU5fV0lUSF9NT0RJRklF
UihVTlVTRURfTU9ESUZJRVJfQVJHVU1FTlQsIGNsYXNzTmFtZSkKKworLy8gTWFjcm9zIGZvciBz
dGF0aWMgdmlzaXRPdXRwdXRDb25zdHJhaW50cygpLgorCisjZGVmaW5lIERFQ0xBUkVfVklTSVRf
T1VUUFVUX0NPTlNUUkFJTlRTX1dJVEhfTU9ESUZJRVIocHJlTW9kaWZpZXIpIFwKK3ByaXZhdGU6
IFwKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiBBTFdBWVNfSU5MSU5FIHN0YXRpYyB2
b2lkIHZpc2l0T3V0cHV0Q29uc3RyYWludHNJbXBsKEpTQ2VsbCosIFZpc2l0b3ImKTsgXAorcHVi
bGljOiBcCisgICAgcHJlTW9kaWZpZXIgc3RhdGljIHZvaWQgdmlzaXRPdXRwdXRDb25zdHJhaW50
cyhKU0NlbGwqLCBBYnN0cmFjdFNsb3RWaXNpdG9yJik7IFwKKyAgICBwcmVNb2RpZmllciBzdGF0
aWMgdm9pZCB2aXNpdE91dHB1dENvbnN0cmFpbnRzKEpTQ2VsbCosIFNsb3RWaXNpdG9yJikKKwor
I2RlZmluZSBERUNMQVJFX1ZJU0lUX09VVFBVVF9DT05TVFJBSU5UUyBcCisgICAgREVDTEFSRV9W
SVNJVF9PVVRQVVRfQ09OU1RSQUlOVFNfV0lUSF9NT0RJRklFUihVTlVTRURfTU9ESUZJRVJfQVJH
VU1FTlQpCisKKyNkZWZpbmUgREVGSU5FX1ZJU0lUX09VVFBVVF9DT05TVFJBSU5UU19XSVRIX01P
RElGSUVSKHByZU1vZGlmaWVyLCBjbGFzc05hbWUpIFwKKyAgICBwcmVNb2RpZmllciB2b2lkIGNs
YXNzTmFtZTo6dmlzaXRPdXRwdXRDb25zdHJhaW50cyhKU0NlbGwqIGNlbGwsIEFic3RyYWN0U2xv
dFZpc2l0b3ImIHZpc2l0b3IpIFwKKyAgICB7IFwKKyAgICAgICAgQWJzdHJhY3RTbG90VmlzaXRv
cjo6Q29udGV4dCBjb250ZXh0KHZpc2l0b3IsIGNlbGwpOyBcCisgICAgICAgIHZpc2l0T3V0cHV0
Q29uc3RyYWludHNJbXBsKGNlbGwsIHZpc2l0b3IpOyBcCisgICAgfSBcCisgICAgcHJlTW9kaWZp
ZXIgdm9pZCBjbGFzc05hbWU6OnZpc2l0T3V0cHV0Q29uc3RyYWludHMoSlNDZWxsKiBjZWxsLCBT
bG90VmlzaXRvciYgdmlzaXRvcikgeyB2aXNpdE91dHB1dENvbnN0cmFpbnRzSW1wbChjZWxsLCB2
aXNpdG9yKTsgfSBcCisgICAgREVDTEFSRV9VTlVTRURfU1RSVUNUX1RPX1RFUk1JTkFURV9WSVNJ
VF9NQUNSTworCisjZGVmaW5lIERFRklORV9WSVNJVF9PVVRQVVRfQ09OU1RSQUlOVFMoY2xhc3NO
YW1lKSBcCisgICAgREVGSU5FX1ZJU0lUX09VVFBVVF9DT05TVFJBSU5UU19XSVRIX01PRElGSUVS
KFVOVVNFRF9NT0RJRklFUl9BUkdVTUVOVCwgY2xhc3NOYW1lKQorCisvLyBNYWNyb3MgZm9yIHZp
c2l0QWRkaXRpb25hbENoaWxkcmVuKCkuCisKKyNkZWZpbmUgREVGSU5FX1ZJU0lUX0FERElUSU9O
QUxfQ0hJTERSRU4oY2xhc3NOYW1lKSBcCisgICAgdGVtcGxhdGUgdm9pZCBjbGFzc05hbWU6OnZp
c2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpOyBcCisgICAg
dGVtcGxhdGUgdm9pZCBjbGFzc05hbWU6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xv
dFZpc2l0b3ImKQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwordXNpbmcgSlNDOjpBYnN0cmFjdFNs
b3RWaXNpdG9yOwordXNpbmcgSlNDOjpKU0NlbGw7Cit1c2luZyBKU0M6OlNsb3RWaXNpdG9yOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3Vic3BhY2UuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdWJzcGFjZS5oCShyZXZpc2lvbiAyNzI5MDIp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdWJzcGFjZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNy0yMDE4IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIxIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMzQsNiArMzQsNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAorY2xhc3MgQWJzdHJhY3RT
bG90VmlzaXRvcjsKIGNsYXNzIEFsaWduZWRNZW1vcnlBbGxvY2F0b3I7CiBjbGFzcyBIZWFwQ2Vs
bFR5cGU7CiAKQEAgLTg2LDggKzg3LDggQEAgcHVibGljOgogICAgIHRlbXBsYXRlPHR5cGVuYW1l
IEZ1bmM+CiAgICAgdm9pZCBmb3JFYWNoTWFya2VkQ2VsbChjb25zdCBGdW5jJik7CiAgICAgCi0g
ICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KLSAgICBSZWY8U2hhcmVkVGFzazx2b2lkKFNsb3RW
aXNpdG9yJik+PiBmb3JFYWNoTWFya2VkQ2VsbEluUGFyYWxsZWwoY29uc3QgRnVuYyYpOworICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3IsIHR5cGVuYW1lIEZ1bmM+CisgICAgUmVmPFNoYXJl
ZFRhc2s8dm9pZChWaXNpdG9yJik+PiBmb3JFYWNoTWFya2VkQ2VsbEluUGFyYWxsZWwoY29uc3Qg
RnVuYyYpOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KICAgICB2b2lkIGZvckVhY2hM
aXZlQ2VsbChjb25zdCBGdW5jJik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9T
dWJzcGFjZUlubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9TdWJzcGFjZUlubGluZXMuaAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvU3Vic3BhY2VJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC04NSwxMCAr
ODUsMTAgQEAgdm9pZCBTdWJzcGFjZTo6Zm9yRWFjaE1hcmtlZENlbGwoY29uc3QgRgogICAgICAg
ICB9KTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KLVJlZjxTaGFyZWRUYXNrPHZvaWQo
U2xvdFZpc2l0b3ImKT4+IFN1YnNwYWNlOjpmb3JFYWNoTWFya2VkQ2VsbEluUGFyYWxsZWwoY29u
c3QgRnVuYyYgZnVuYykKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3IsIHR5cGVuYW1lIEZ1bmM+
CitSZWY8U2hhcmVkVGFzazx2b2lkKFZpc2l0b3ImKT4+IFN1YnNwYWNlOjpmb3JFYWNoTWFya2Vk
Q2VsbEluUGFyYWxsZWwoY29uc3QgRnVuYyYgZnVuYykKIHsKLSAgICBjbGFzcyBUYXNrIGZpbmFs
IDogcHVibGljIFNoYXJlZFRhc2s8dm9pZChTbG90VmlzaXRvciYpPiB7CisgICAgY2xhc3MgVGFz
ayBmaW5hbCA6IHB1YmxpYyBTaGFyZWRUYXNrPHZvaWQoVmlzaXRvciYpPiB7CiAgICAgcHVibGlj
OgogICAgICAgICBUYXNrKFN1YnNwYWNlJiBzdWJzcGFjZSwgY29uc3QgRnVuYyYgZnVuYykKICAg
ICAgICAgICAgIDogbV9zdWJzcGFjZShzdWJzcGFjZSkKQEAgLTk3LDcgKzk3LDcgQEAgUmVmPFNo
YXJlZFRhc2s8dm9pZChTbG90VmlzaXRvciYpPj4gU3VicwogICAgICAgICB7CiAgICAgICAgIH0K
ICAgICAgICAgCi0gICAgICAgIHZvaWQgcnVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBmaW5hbAor
ICAgICAgICB2b2lkIHJ1bihWaXNpdG9yJiB2aXNpdG9yKSBmaW5hbAogICAgICAgICB7CiAgICAg
ICAgICAgICB3aGlsZSAoTWFya2VkQmxvY2s6OkhhbmRsZSogaGFuZGxlID0gbV9ibG9ja1NvdXJj
ZS0+cnVuKCkpIHsKICAgICAgICAgICAgICAgICBoYW5kbGUtPmZvckVhY2hNYXJrZWRDZWxsKApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVmVyaWZpZXJTbG90VmlzaXRvci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVmVyaWZpZXJTbG90Vmlz
aXRvci5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVmVy
aWZpZXJTbG90VmlzaXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzNDYgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVmVyaWZpZXJTbG90Vmlz
aXRvci5oIgorCisjaW5jbHVkZSAiQmxvY2tEaXJlY3RvcnlJbmxpbmVzLmgiCisjaW5jbHVkZSAi
Q29uc2VydmF0aXZlUm9vdHMuaCIKKyNpbmNsdWRlICJHQ1NlZ21lbnRlZEFycmF5SW5saW5lcy5o
IgorI2luY2x1ZGUgIkhlYXBDZWxsLmgiCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1
ZGUgIlZNLmgiCisjaW5jbHVkZSAiVmVyaWZpZXJTbG90VmlzaXRvcklubGluZXMuaCIKKyNpbmNs
dWRlIDx3dGYvU3RhY2tUcmFjZS5oPgorCituYW1lc3BhY2UgSlNDIHsKKwordXNpbmcgTWFya2Vy
RGF0YSA9IFZlcmlmaWVyU2xvdFZpc2l0b3I6Ok1hcmtlckRhdGE7CisKK2NvbnN0ZXhwciBpbnQg
bWF4TWFya2luZ1N0YWNrRnJhbWVzVG9DYXB0dXJlID0gMTAwOworCitNYXJrZXJEYXRhOjpNYXJr
ZXJEYXRhKEhlYXBDZWxsKiBwYXJlbnQsIHN0ZDo6dW5pcXVlX3B0cjxTdGFja1RyYWNlPiYmIHN0
YWNrKQorICAgIDogcGFyZW50KHBhcmVudCkKKyAgICAsIHN0YWNrKFdURk1vdmUoc3RhY2spKQor
eworfQorCitWZXJpZmllclNsb3RWaXNpdG9yOjpNYXJrZWRCbG9ja0RhdGE6Ok1hcmtlZEJsb2Nr
RGF0YShNYXJrZWRCbG9jayogYmxvY2spCisgICAgOiBtX2Jsb2NrKGJsb2NrKQoreworfQorCit2
b2lkIFZlcmlmaWVyU2xvdFZpc2l0b3I6Ok1hcmtlZEJsb2NrRGF0YTo6YWRkTWFya2VyRGF0YSh1
bnNpZ25lZCBhdG9tTnVtYmVyLCBNYXJrZXJEYXRhJiYgbWFya2VyKQoreworICAgIGlmIChtX21h
cmtlcnMuaXNFbXB0eSgpKQorICAgICAgICBtX21hcmtlcnMuZ3JvdyhNYXJrZWRCbG9jazo6YXRv
bXNQZXJCbG9jayk7CisgICAgbV9tYXJrZXJzW2F0b21OdW1iZXJdID0gV1RGTW92ZShtYXJrZXIp
OworfQorCitjb25zdCBNYXJrZXJEYXRhKiBWZXJpZmllclNsb3RWaXNpdG9yOjpNYXJrZWRCbG9j
a0RhdGE6Om1hcmtlckRhdGEodW5zaWduZWQgYXRvbU51bWJlcikgY29uc3QKK3sKKyAgICBhdXRv
JiBtYXJrZXIgPSBtX21hcmtlcnNbYXRvbU51bWJlcl07CisgICAgaWYgKG1hcmtlci5zdGFjaykK
KyAgICAgICAgcmV0dXJuICZtYXJrZXI7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK1Zlcmlm
aWVyU2xvdFZpc2l0b3I6OlByZWNpc2VBbGxvY2F0aW9uRGF0YTo6UHJlY2lzZUFsbG9jYXRpb25E
YXRhKFByZWNpc2VBbGxvY2F0aW9uKiBhbGxvY2F0aW9uKQorICAgIDogbV9hbGxvY2F0aW9uKGFs
bG9jYXRpb24pCit7Cit9CisKK2NvbnN0IE1hcmtlckRhdGEqIFZlcmlmaWVyU2xvdFZpc2l0b3I6
OlByZWNpc2VBbGxvY2F0aW9uRGF0YTo6bWFya2VyRGF0YSgpIGNvbnN0Cit7CisgICAgaWYgKG1f
bWFya2VyLnN0YWNrKQorICAgICAgICByZXR1cm4gJm1fbWFya2VyOworICAgIHJldHVybiBudWxs
cHRyOworfQorCit2b2lkIFZlcmlmaWVyU2xvdFZpc2l0b3I6OlByZWNpc2VBbGxvY2F0aW9uRGF0
YTo6YWRkTWFya2VyRGF0YShNYXJrZXJEYXRhJiYgbWFya2VyKQoreworICAgIG1fbWFya2VyID0g
V1RGTW92ZShtYXJrZXIpOworfQorCitWZXJpZmllclNsb3RWaXNpdG9yOjpWZXJpZmllclNsb3RW
aXNpdG9yKEhlYXAmIGhlYXApCisgICAgOiBCYXNlKGhlYXAsICJWZXJpZmllciIsIG1fb3BhcXVl
Um9vdFN0b3JhZ2UpCit7Cit9CisKK1ZlcmlmaWVyU2xvdFZpc2l0b3I6On5WZXJpZmllclNsb3RW
aXNpdG9yKCkKK3sKKyAgICBoZWFwKCktPm9iamVjdFNwYWNlKCkuZm9yRWFjaEJsb2NrKAorICAg
ICAgICBbJl0gKE1hcmtlZEJsb2NrOjpIYW5kbGUqIGhhbmRsZSkgeworICAgICAgICAgICAgaGFu
ZGxlLT5ibG9jaygpLnNldFZlcmlmaWVyTWVtbyhudWxscHRyKTsKKyAgICAgICAgfSk7Cit9CisK
K3ZvaWQgVmVyaWZpZXJTbG90VmlzaXRvcjo6YWRkUGFyYWxsZWxDb25zdHJhaW50VGFzayhSZWZQ
dHI8U2hhcmVkVGFzazx2b2lkKEFic3RyYWN0U2xvdFZpc2l0b3ImKT4+IHRhc2spCit7CisgICAg
bV9jb25zdHJhaW50VGFza3MuYXBwZW5kKFdURk1vdmUodGFzaykpOworfQorCitOT19SRVRVUk5f
RFVFX1RPX0NSQVNIIHZvaWQgVmVyaWZpZXJTbG90VmlzaXRvcjo6YWRkUGFyYWxsZWxDb25zdHJh
aW50VGFzayhSZWZQdHI8U2hhcmVkVGFzazx2b2lkKFNsb3RWaXNpdG9yJik+PikKK3sKKyAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit2b2lkIFZlcmlmaWVyU2xvdFZpc2l0
b3I6OmV4ZWN1dGVDb25zdHJhaW50VGFza3MoKQoreworICAgIHdoaWxlICghbV9jb25zdHJhaW50
VGFza3MuaXNFbXB0eSgpKQorICAgICAgICBtX2NvbnN0cmFpbnRUYXNrcy50YWtlRmlyc3QoKS0+
cnVuKCp0aGlzKTsKK30KKwordm9pZCBWZXJpZmllclNsb3RWaXNpdG9yOjphcHBlbmQoY29uc3Qg
Q29uc2VydmF0aXZlUm9vdHMmIGNvbnNlcnZhdGl2ZVJvb3RzKQoreworICAgIGF1dG8gYXBwZW5k
SlNDZWxsT3JBdXhpbGlhcnkgPSBbJl0gKEhlYXBDZWxsKiBoZWFwQ2VsbCkgeworICAgICAgICBp
ZiAoIWhlYXBDZWxsKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGlmICh0ZXN0QW5k
U2V0TWFya2VkKGhlYXBDZWxsKSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBzd2l0
Y2ggKGhlYXBDZWxsLT5jZWxsS2luZCgpKSB7CisgICAgICAgIGNhc2UgSGVhcENlbGw6OkpTQ2Vs
bDoKKyAgICAgICAgY2FzZSBIZWFwQ2VsbDo6SlNDZWxsV2l0aEluZGV4aW5nSGVhZGVyOiB7Cisg
ICAgICAgICAgICBKU0NlbGwqIGpzQ2VsbCA9IHN0YXRpY19jYXN0PEpTQ2VsbCo+KGhlYXBDZWxs
KTsKKyAgICAgICAgICAgIGFwcGVuZFRvTWFya1N0YWNrKGpzQ2VsbCk7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBjYXNlIEhlYXBDZWxsOjpBdXhpbGlhcnk6Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9OworCisgICAgSGVhcENlbGwqKiBy
b290cyA9IGNvbnNlcnZhdGl2ZVJvb3RzLnJvb3RzKCk7CisgICAgc2l6ZV90IHNpemUgPSBjb25z
ZXJ2YXRpdmVSb290cy5zaXplKCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyAr
K2kpCisgICAgICAgIGFwcGVuZEpTQ2VsbE9yQXV4aWxpYXJ5KHJvb3RzW2ldKTsKK30KKwordm9p
ZCBWZXJpZmllclNsb3RWaXNpdG9yOjphcHBlbmRUb01hcmtTdGFjayhKU0NlbGwqIGNlbGwpCit7
CisgICAgQVNTRVJUKCFjZWxsLT5pc1phcHBlZCgpKTsKKyAgICBtX2NvbGxlY3RvclN0YWNrLmFw
cGVuZChjZWxsKTsKK30KKwordm9pZCBWZXJpZmllclNsb3RWaXNpdG9yOjphcHBlbmRVbmJhcnJp
ZXJlZChKU0NlbGwqIGNlbGwpCit7CisgICAgaWYgKCFjZWxsKQorICAgICAgICByZXR1cm47CisK
KyAgICBpZiAoVU5MSUtFTFkoY2VsbC0+aXNQcmVjaXNlQWxsb2NhdGlvbigpKSkgeworICAgICAg
ICBpZiAoTElLRUxZKGlzTWFya2VkKGNlbGwtPnByZWNpc2VBbGxvY2F0aW9uKCksIGNlbGwpKSkK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICB9IGVsc2UgeworICAgICAgICBNYXJrZWRCbG9jayYg
YmxvY2sgPSBjZWxsLT5tYXJrZWRCbG9jaygpOworICAgICAgICBpZiAoTElLRUxZKGlzTWFya2Vk
KGJsb2NrLCBjZWxsKSkpCisgICAgICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgYXBwZW5k
U2xvdyhjZWxsKTsKK30KKwordm9pZCBWZXJpZmllclNsb3RWaXNpdG9yOjphcHBlbmRIaWRkZW5V
bmJhcnJpZXJlZChKU0NlbGwqIGNlbGwpCit7CisgICAgYXBwZW5kVW5iYXJyaWVyZWQoY2VsbCk7
Cit9CisKK3ZvaWQgVmVyaWZpZXJTbG90VmlzaXRvcjo6ZHJhaW4oKQoreworICAgIFJFTEVBU0Vf
QVNTRVJUKG1fbXV0YXRvclN0YWNrLmlzRW1wdHkoKSk7CisKKyAgICBNYXJrU3RhY2tBcnJheSYg
c3RhY2sgPSBtX2NvbGxlY3RvclN0YWNrOworICAgIGlmIChzdGFjay5pc0VtcHR5KCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIHN0YWNrLnJlZmlsbCgpOworICAgIHdoaWxlIChzdGFjay5jYW5S
ZW1vdmVMYXN0KCkpCisgICAgICAgIHZpc2l0Q2hpbGRyZW4oc3RhY2sucmVtb3ZlTGFzdCgpKTsK
K30KKwordm9pZCBWZXJpZmllclNsb3RWaXNpdG9yOjpkdW1wTWFya2VyRGF0YShIZWFwQ2VsbCog
Y2VsbCkKK3sKKyAgICBpZiAoY2VsbC0+aXNQcmVjaXNlQWxsb2NhdGlvbigpKQorICAgICAgICBy
ZXR1cm4gZHVtcE1hcmtlckRhdGEoY2VsbC0+cHJlY2lzZUFsbG9jYXRpb24oKSwgY2VsbCk7Cisg
ICAgcmV0dXJuIGR1bXBNYXJrZXJEYXRhKGNlbGwtPm1hcmtlZEJsb2NrKCksIGNlbGwpOworfQor
Cit2b2lkIFZlcmlmaWVyU2xvdFZpc2l0b3I6OmR1bXBNYXJrZXJEYXRhKFByZWNpc2VBbGxvY2F0
aW9uJiBhbGxvY2F0aW9uLCBIZWFwQ2VsbCogY2VsbCkKK3sKKyAgICBhdXRvIGl0ZXJhdG9yID0g
bV9wcmVjaXNlQWxsb2NhdGlvbk1hcC5maW5kKCZhbGxvY2F0aW9uKTsKKyAgICBpZiAoaXRlcmF0
b3IgIT0gbV9wcmVjaXNlQWxsb2NhdGlvbk1hcC5lbmQoKSkgeworICAgICAgICBkdW1wTWFya2Vy
RGF0YShjZWxsLCBpdGVyYXRvci0+dmFsdWUtPm1hcmtlckRhdGEoKSk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisgICAgZGF0YUxvZ0xuKCJDZWxsICIsIFJhd1BvaW50ZXIoY2VsbCksICIgbm90
IGZvdW5kIik7Cit9CisKK3ZvaWQgVmVyaWZpZXJTbG90VmlzaXRvcjo6ZHVtcE1hcmtlckRhdGEo
TWFya2VkQmxvY2smIGJsb2NrLCBIZWFwQ2VsbCogY2VsbCkKK3sKKyAgICBhdXRvIGl0ZXJhdG9y
ID0gbV9tYXJrZWRCbG9ja01hcC5maW5kKCZibG9jayk7CisgICAgaWYgKGl0ZXJhdG9yICE9IG1f
bWFya2VkQmxvY2tNYXAuZW5kKCkpIHsKKyAgICAgICAgdW5zaWduZWQgYXRvbU51bWJlciA9IGJs
b2NrLmF0b21OdW1iZXIoY2VsbCk7CisgICAgICAgIGR1bXBNYXJrZXJEYXRhKGNlbGwsIGl0ZXJh
dG9yLT52YWx1ZS0+bWFya2VyRGF0YShhdG9tTnVtYmVyKSk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgZGF0YUxvZ0xuKCJDZWxsICIsIFJhd1BvaW50ZXIoY2VsbCksICIgbm90IGZvdW5k
Iik7Cit9CisKK3ZvaWQgVmVyaWZpZXJTbG90VmlzaXRvcjo6ZHVtcE1hcmtlckRhdGEoSGVhcENl
bGwqIGNlbGwsIGNvbnN0IE1hcmtlckRhdGEqIG1hcmtlcikKK3sKKyAgICBpZiAoIW1hcmtlcikg
eworICAgICAgICBkYXRhTG9nTG4oIk1hcmtlciBkYXRhIGlzIG5vdCBhdmFpbGFibGUgZm9yIGNl
bGwgIiwgUmF3UG9pbnRlcihjZWxsKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBk
YXRhTG9nTG4oIkNlbGwgIiwgUmF3UG9pbnRlcihjZWxsKSwgIiB3YXMgcmVhY2hhYmxlIHZpYSBj
ZWxsICIsIFJhd1BvaW50ZXIobWFya2VyLT5wYXJlbnQpLCAiIGF0OiIpOworICAgIG1hcmtlci0+
c3RhY2stPmR1bXAoV1RGOjpkYXRhRmlsZSgpLCAiICAgICIpOworfQorCitib29sIFZlcmlmaWVy
U2xvdFZpc2l0b3I6OmlzRmlyc3RWaXNpdCgpIGNvbnN0Cit7CisgICAgLy8gSW4gdGhlIHJlZ3Vs
YXIgR0MsIHRoaXMgcmV0dXJuIHZhbHVlIGlzIG9ubHkgdXNlZCB0byBjb250cm9sIHdoZXRoZXIK
KyAgICAvLyBVbmxpbmtlZENvZGVCbG9ja3Mgd2lsbCBiZSBhZ2VkIChzZWUgVW5saW5rZWRDb2Rl
QmxvY2s6OnZpc2l0Q2hpbGRyZW5JbXBsKCkpLgorICAgIC8vIEZvciB0aGUgdmVyaWZpZXIgR0Mg
cGFzcywgd2Ugc2hvdWxkIGFsd2F5cyByZXR1cm4gZmFsc2UgYmVjYXVzZSB3ZSBkb24ndAorICAg
IC8vIHdhbnQgdG8gZG8gdGhlIGFnaW5nIGFjdGlvbiBhZ2Fpbi4KKyAgICByZXR1cm4gZmFsc2U7
Cit9CisKK2Jvb2wgVmVyaWZpZXJTbG90VmlzaXRvcjo6aXNNYXJrZWQoY29uc3Qgdm9pZCogcmF3
Q2VsbCkgY29uc3QKK3sKKyAgICBIZWFwQ2VsbCogY2VsbCA9IGJpdHdpc2VfY2FzdDxIZWFwQ2Vs
bCo+KHJhd0NlbGwpOworICAgIGlmIChjZWxsLT5pc1ByZWNpc2VBbGxvY2F0aW9uKCkpCisgICAg
ICAgIHJldHVybiBpc01hcmtlZChjZWxsLT5wcmVjaXNlQWxsb2NhdGlvbigpLCBjZWxsKTsKKyAg
ICByZXR1cm4gaXNNYXJrZWQoY2VsbC0+bWFya2VkQmxvY2soKSwgY2VsbCk7Cit9CisKK2Jvb2wg
VmVyaWZpZXJTbG90VmlzaXRvcjo6aXNNYXJrZWQoUHJlY2lzZUFsbG9jYXRpb24mIGFsbG9jYXRp
b24sIEhlYXBDZWxsKikgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wcmVjaXNlQWxsb2NhdGlvbk1h
cC5jb250YWlucygmYWxsb2NhdGlvbik7Cit9CisKK2Jvb2wgVmVyaWZpZXJTbG90VmlzaXRvcjo6
aXNNYXJrZWQoTWFya2VkQmxvY2smIGJsb2NrLCBIZWFwQ2VsbCogY2VsbCkgY29uc3QKK3sKKyAg
ICBhdXRvIGVudHJ5ID0gbV9tYXJrZWRCbG9ja01hcC5maW5kKCZibG9jayk7CisgICAgaWYgKGVu
dHJ5ID09IG1fbWFya2VkQmxvY2tNYXAuZW5kKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIGF1dG8mIGRhdGEgPSBlbnRyeS0+dmFsdWU7CisgICAgdW5zaWduZWQgYXRvbU51bWJlciA9
IGJsb2NrLmF0b21OdW1iZXIoY2VsbCk7CisgICAgcmV0dXJuIGRhdGEtPmlzTWFya2VkKGF0b21O
dW1iZXIpOworfQorCit2b2lkIFZlcmlmaWVyU2xvdFZpc2l0b3I6Om1hcmtBdXhpbGlhcnkoY29u
c3Qgdm9pZCogYmFzZSkKK3sKKyAgICBIZWFwQ2VsbCogY2VsbCA9IGJpdHdpc2VfY2FzdDxIZWFw
Q2VsbCo+KGJhc2UpOworCisgICAgQVNTRVJUKGNlbGwtPmhlYXAoKSA9PSBoZWFwKCkpOworICAg
IHRlc3RBbmRTZXRNYXJrZWQoY2VsbCk7Cit9CisKK2Jvb2wgVmVyaWZpZXJTbG90VmlzaXRvcjo6
bXV0YXRvcklzU3RvcHBlZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wg
VmVyaWZpZXJTbG90VmlzaXRvcjo6dGVzdEFuZFNldE1hcmtlZChjb25zdCB2b2lkKiByYXdDZWxs
KQoreworICAgIEhlYXBDZWxsKiBjZWxsID0gYml0d2lzZV9jYXN0PEhlYXBDZWxsKj4ocmF3Q2Vs
bCk7CisgICAgaWYgKGNlbGwtPmlzUHJlY2lzZUFsbG9jYXRpb24oKSkKKyAgICAgICAgcmV0dXJu
IHRlc3RBbmRTZXRNYXJrZWQoY2VsbC0+cHJlY2lzZUFsbG9jYXRpb24oKSk7CisgICAgcmV0dXJu
IHRlc3RBbmRTZXRNYXJrZWQoY2VsbC0+bWFya2VkQmxvY2soKSwgY2VsbCk7Cit9CisKK2Jvb2wg
VmVyaWZpZXJTbG90VmlzaXRvcjo6dGVzdEFuZFNldE1hcmtlZChQcmVjaXNlQWxsb2NhdGlvbiYg
YWxsb2NhdGlvbikKK3sKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8UHJlY2lzZUFsbG9jYXRpb25EYXRh
PiYgZGF0YSA9IG1fcHJlY2lzZUFsbG9jYXRpb25NYXAuYWRkKCZhbGxvY2F0aW9uLCBudWxscHRy
KS5pdGVyYXRvci0+dmFsdWU7CisgICAgaWYgKCFkYXRhKSB7CisgICAgICAgIGRhdGEgPSBtYWtl
VW5pcXVlPFByZWNpc2VBbGxvY2F0aW9uRGF0YT4oJmFsbG9jYXRpb24pOworICAgICAgICBpZiAo
VU5MSUtFTFkoT3B0aW9uczo6dmVyYm9zZVZlcmlmeUdDKCkpKQorICAgICAgICAgICAgZGF0YS0+
YWRkTWFya2VyRGF0YSh7IHBhcmVudENlbGwoKSwgU3RhY2tUcmFjZTo6Y2FwdHVyZVN0YWNrVHJh
Y2UobWF4TWFya2luZ1N0YWNrRnJhbWVzVG9DYXB0dXJlLCAyKSB9KTsKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBWZXJpZmllclNsb3RW
aXNpdG9yOjp0ZXN0QW5kU2V0TWFya2VkKE1hcmtlZEJsb2NrJiBibG9jaywgSGVhcENlbGwqIGNl
bGwpCit7CisgICAgTWFya2VkQmxvY2tEYXRhKiBkYXRhID0gYmxvY2sudmVyaWZpZXJNZW1vPE1h
cmtlZEJsb2NrRGF0YSo+KCk7CisgICAgaWYgKFVOTElLRUxZKCFkYXRhKSkgeworICAgICAgICBz
dGQ6OnVuaXF1ZV9wdHI8TWFya2VkQmxvY2tEYXRhPiYgZW50cnlEYXRhID0gbV9tYXJrZWRCbG9j
a01hcC5hZGQoJmJsb2NrLCBudWxscHRyKS5pdGVyYXRvci0+dmFsdWU7CisgICAgICAgIFJFTEVB
U0VfQVNTRVJUKCFlbnRyeURhdGEpOworICAgICAgICBlbnRyeURhdGEgPSBtYWtlVW5pcXVlPE1h
cmtlZEJsb2NrRGF0YT4oJmJsb2NrKTsKKyAgICAgICAgZGF0YSA9IGVudHJ5RGF0YS5nZXQoKTsK
KyAgICAgICAgYmxvY2suc2V0VmVyaWZpZXJNZW1vKGRhdGEpOworICAgIH0KKworICAgIHVuc2ln
bmVkIGF0b21OdW1iZXIgPSBibG9jay5hdG9tTnVtYmVyKGNlbGwpOworICAgIGJvb2wgYWxyZWFk
eVNldCA9IGRhdGEtPnRlc3RBbmRTZXRNYXJrZWQoYXRvbU51bWJlcik7CisgICAgaWYgKCFhbHJl
YWR5U2V0ICYmIFVOTElLRUxZKE9wdGlvbnM6OnZlcmJvc2VWZXJpZnlHQygpKSkKKyAgICAgICAg
ZGF0YS0+YWRkTWFya2VyRGF0YShhdG9tTnVtYmVyLCB7IHBhcmVudENlbGwoKSwgU3RhY2tUcmFj
ZTo6Y2FwdHVyZVN0YWNrVHJhY2UobWF4TWFya2luZ1N0YWNrRnJhbWVzVG9DYXB0dXJlLCAyKSB9
KTsKKyAgICByZXR1cm4gYWxyZWFkeVNldDsKK30KKwordm9pZCBWZXJpZmllclNsb3RWaXNpdG9y
OjpzZXRNYXJrZWRBbmRBcHBlbmRUb01hcmtTdGFjayhKU0NlbGwqIGNlbGwpCit7CisgICAgaWYg
KG1fc3VwcHJlc3NWZXJpZmllcikKKyAgICAgICAgcmV0dXJuOworICAgIGlmICh0ZXN0QW5kU2V0
TWFya2VkKGNlbGwpKQorICAgICAgICByZXR1cm47CisgICAgYXBwZW5kVG9NYXJrU3RhY2soY2Vs
bCk7Cit9CisKK3ZvaWQgVmVyaWZpZXJTbG90VmlzaXRvcjo6dmlzaXRBc0NvbnN0cmFpbnQoY29u
c3QgSlNDZWxsKiBjZWxsKQoreworICAgIHZpc2l0Q2hpbGRyZW4oY2VsbCk7Cit9CisKK3ZvaWQg
VmVyaWZpZXJTbG90VmlzaXRvcjo6dmlzaXRDaGlsZHJlbihjb25zdCBKU0NlbGwqIGNlbGwpCit7
CisgICAgUkVMRUFTRV9BU1NFUlQoaXNNYXJrZWQoY2VsbCkpOworICAgIHN3aXRjaCAoY2VsbC0+
dHlwZSgpKSB7CisgICAgY2FzZSBTdHJpbmdUeXBlOgorICAgICAgICBKU1N0cmluZzo6dmlzaXRD
aGlsZHJlbihjb25zdF9jYXN0PEpTQ2VsbCo+KGNlbGwpLCAqdGhpcyk7CisgICAgICAgIGJyZWFr
OworICAgICAgICAKKyAgICBjYXNlIEZpbmFsT2JqZWN0VHlwZToKKyAgICAgICAgSlNGaW5hbE9i
amVjdDo6dmlzaXRDaGlsZHJlbihjb25zdF9jYXN0PEpTQ2VsbCo+KGNlbGwpLCAqdGhpcyk7Cisg
ICAgICAgIGJyZWFrOworCisgICAgY2FzZSBBcnJheVR5cGU6CisgICAgICAgIEpTQXJyYXk6OnZp
c2l0Q2hpbGRyZW4oY29uc3RfY2FzdDxKU0NlbGwqPihjZWxsKSwgKnRoaXMpOworICAgICAgICBi
cmVhazsKKyAgICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgLy8gRklYTUU6IFRoaXMgY291
bGQgYmUgc28gbXVjaCBiZXR0ZXIuCisgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNjI0NjIKKyAgICAgICAgY2VsbC0+bWV0aG9kVGFibGUodm0oKSkt
PnZpc2l0Q2hpbGRyZW4oY29uc3RfY2FzdDxKU0NlbGwqPihjZWxsKSwgKnRoaXMpOworICAgICAg
ICBicmVhazsKKyAgICB9Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvVmVyaWZpZXJTbG90VmlzaXRvci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1ZlcmlmaWVyU2xvdFZpc2l0b3IuaAkobm9uZXhpc3Rl
bnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9WZXJpZmllclNsb3RWaXNpdG9yLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkFic3RyYWN0
U2xvdFZpc2l0b3IuaCIKKyNpbmNsdWRlICJKU0NKU1ZhbHVlLmgiCisjaW5jbHVkZSAiTWFya2Vk
QmxvY2suaCIKKyNpbmNsdWRlICJWaXNpdFJhY2VLZXkuaCIKKyNpbmNsdWRlICJXZWFrLmgiCisj
aW5jbHVkZSA8bWVtb3J5PgorI2luY2x1ZGUgPHd0Zi9CaXRtYXAuaD4KKyNpbmNsdWRlIDx3dGYv
RGVxdWUuaD4KKyNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgorI2luY2x1ZGUgPHd0Zi9IYXNo
TWFwLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9TaGFyZWRUYXNr
Lmg+CisKK25hbWVzcGFjZSBXVEYgeworCitjbGFzcyBTdGFja1RyYWNlOworCit9IC8vIG5hbWVz
cGFjZSBXVEYKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIENvbnNlcnZhdGl2ZVJvb3RzOwor
Y2xhc3MgSGVhcDsKK2NsYXNzIEhlYXBDZWxsOworY2xhc3MgUHJlY2lzZUFsbG9jYXRpb247CisK
K3VzaW5nIFdURjo6U3RhY2tUcmFjZTsKKworY2xhc3MgVmVyaWZpZXJTbG90VmlzaXRvciA6IHB1
YmxpYyBBYnN0cmFjdFNsb3RWaXNpdG9yIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShWZXJp
ZmllclNsb3RWaXNpdG9yKTsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKKyAgICB1c2lu
ZyBCYXNlID0gQWJzdHJhY3RTbG90VmlzaXRvcjsKK3B1YmxpYzoKKyAgICBzdHJ1Y3QgTWFya2Vy
RGF0YSB7CisgICAgICAgIE1hcmtlckRhdGEoKSA9IGRlZmF1bHQ7CisgICAgICAgIE1hcmtlckRh
dGEoTWFya2VyRGF0YSYmKSA9IGRlZmF1bHQ7CisgICAgICAgIE1hcmtlckRhdGEoSGVhcENlbGwq
LCBzdGQ6OnVuaXF1ZV9wdHI8U3RhY2tUcmFjZT4mJik7CisgICAgICAgIE1hcmtlckRhdGEmIG9w
ZXJhdG9yPShNYXJrZXJEYXRhJiYpID0gZGVmYXVsdDsKKworICAgICAgICBIZWFwQ2VsbCogcGFy
ZW50IHsgbnVsbHB0ciB9OworICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8U3RhY2tUcmFjZT4gc3Rh
Y2s7CisgICAgfTsKKworICAgIFZlcmlmaWVyU2xvdFZpc2l0b3IoSGVhcCYpOworICAgIH5WZXJp
ZmllclNsb3RWaXNpdG9yKCk7CisKKyAgICB2b2lkIGFwcGVuZChjb25zdCBDb25zZXJ2YXRpdmVS
b290cyYpIGZpbmFsOworICAgIHZvaWQgYXBwZW5kVW5iYXJyaWVyZWQoSlNDZWxsKikgZmluYWw7
CisgICAgdm9pZCBhcHBlbmRIaWRkZW5VbmJhcnJpZXJlZChKU0NlbGwqKSBmaW5hbDsKKworICAg
IGJvb2wgaXNGaXJzdFZpc2l0KCkgY29uc3QgZmluYWw7CisgICAgYm9vbCBpc01hcmtlZChjb25z
dCB2b2lkKikgY29uc3QgZmluYWw7CisgICAgYm9vbCBpc01hcmtlZChNYXJrZWRCbG9jayYsIEhl
YXBDZWxsKikgY29uc3QgZmluYWw7CisgICAgYm9vbCBpc01hcmtlZChQcmVjaXNlQWxsb2NhdGlv
biYsIEhlYXBDZWxsKikgY29uc3QgZmluYWw7CisKKyAgICB2b2lkIG1hcmtBdXhpbGlhcnkoY29u
c3Qgdm9pZCopIGZpbmFsOworCisgICAgdm9pZCByZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQoc2l6
ZV90KSBmaW5hbCB7IH0KKyNpZiBFTkFCTEUoUkVTT1VSQ0VfVVNBR0UpCisgICAgdm9pZCByZXBv
cnRFeHRlcm5hbE1lbW9yeVZpc2l0ZWQoc2l6ZV90KSBmaW5hbCB7IH0KKyNlbmRpZgorCisgICAg
Ym9vbCBtdXRhdG9ySXNTdG9wcGVkKCkgY29uc3QgZmluYWw7CisKKyAgICB2b2lkIGRpZFJhY2Uo
Y29uc3QgVmlzaXRSYWNlS2V5JikgZmluYWwgeyB9CisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFt
JikgY29uc3QgZmluYWwgeyB9CisKKyAgICB2b2lkIHZpc2l0QXNDb25zdHJhaW50KGNvbnN0IEpT
Q2VsbCopIGZpbmFsOworCisgICAgdm9pZCBkcmFpbigpOworCisgICAgdm9pZCBhZGRQYXJhbGxl
bENvbnN0cmFpbnRUYXNrKFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoQWJzdHJhY3RTbG90VmlzaXRv
ciYpPj4pIGZpbmFsOworICAgIE5PX1JFVFVSTl9EVUVfVE9fQ1JBU0ggdm9pZCBhZGRQYXJhbGxl
bENvbnN0cmFpbnRUYXNrKFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoU2xvdFZpc2l0b3ImKT4+KSBm
aW5hbDsKKyAgICB2b2lkIGV4ZWN1dGVDb25zdHJhaW50VGFza3MoKTsKKworICAgIHRlbXBsYXRl
PHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaExpdmVDZWxsKGNvbnN0IEZ1bmN0b3ImKTsK
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hMaXZlUHJlY2lzZUFs
bG9jYXRpb24oY29uc3QgRnVuY3RvciYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+
IHZvaWQgZm9yRWFjaExpdmVNYXJrZWRCbG9ja0NlbGwoY29uc3QgRnVuY3RvciYpOworCisgICAg
SlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBkdW1wTWFya2VyRGF0YShIZWFwQ2VsbCopOworCitwcml2
YXRlOgorICAgIGNsYXNzIE1hcmtlZEJsb2NrRGF0YSB7CisgICAgICAgIFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEOworICAgICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShNYXJrZWRCbG9ja0RhdGEp
OworICAgIHB1YmxpYzoKKyAgICAgICAgdXNpbmcgQXRvbXNCaXRtYXAgPSBCaXRtYXA8TWFya2Vk
QmxvY2s6OmF0b21zUGVyQmxvY2s+OworCisgICAgICAgIE1hcmtlZEJsb2NrRGF0YShNYXJrZWRC
bG9jayopOworCisgICAgICAgIE1hcmtlZEJsb2NrKiBibG9jaygpIGNvbnN0IHsgcmV0dXJuIG1f
YmxvY2s7IH0KKyAgICAgICAgY29uc3QgQXRvbXNCaXRtYXAmIGF0b21zKCkgY29uc3QgeyByZXR1
cm4gbV9hdG9tczsgfQorCisgICAgICAgIGJvb2wgaXNNYXJrZWQodW5zaWduZWQgYXRvbU51bWJl
cikgeyByZXR1cm4gbV9hdG9tcy5nZXQoYXRvbU51bWJlcik7IH0KKyAgICAgICAgYm9vbCB0ZXN0
QW5kU2V0TWFya2VkKHVuc2lnbmVkIGF0b21OdW1iZXIpIHsgcmV0dXJuIG1fYXRvbXMudGVzdEFu
ZFNldChhdG9tTnVtYmVyKTsgfQorCisgICAgICAgIHZvaWQgYWRkTWFya2VyRGF0YSh1bnNpZ25l
ZCBhdG9tTnVtYmVyLCBNYXJrZXJEYXRhJiYpOworICAgICAgICBjb25zdCBNYXJrZXJEYXRhKiBt
YXJrZXJEYXRhKHVuc2lnbmVkIGF0b21OdW1iZXIpIGNvbnN0OworCisgICAgcHJpdmF0ZToKKyAg
ICAgICAgTWFya2VkQmxvY2sqIG1fYmxvY2sgeyBudWxscHRyIH07CisgICAgICAgIEF0b21zQml0
bWFwIG1fYXRvbXM7CisgICAgICAgIFZlY3RvcjxNYXJrZXJEYXRhPiBtX21hcmtlcnM7CisgICAg
fTsKKworICAgIGNsYXNzIFByZWNpc2VBbGxvY2F0aW9uRGF0YSB7CisgICAgICAgIFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEOworICAgICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShQcmVjaXNlQWxs
b2NhdGlvbkRhdGEpOworICAgIHB1YmxpYzoKKyAgICAgICAgUHJlY2lzZUFsbG9jYXRpb25EYXRh
KFByZWNpc2VBbGxvY2F0aW9uKik7CisgICAgICAgIFByZWNpc2VBbGxvY2F0aW9uKiBhbGxvY2F0
aW9uKCkgY29uc3QgeyByZXR1cm4gbV9hbGxvY2F0aW9uOyB9CisKKyAgICAgICAgdm9pZCBhZGRN
YXJrZXJEYXRhKE1hcmtlckRhdGEmJik7CisgICAgICAgIGNvbnN0IE1hcmtlckRhdGEqIG1hcmtl
ckRhdGEoKSBjb25zdDsKKworICAgIHByaXZhdGU6CisgICAgICAgIFByZWNpc2VBbGxvY2F0aW9u
KiBtX2FsbG9jYXRpb24geyBudWxscHRyIH07CisgICAgICAgIE1hcmtlckRhdGEgbV9tYXJrZXI7
CisgICAgfTsKKworICAgIHVzaW5nIE1hcmtlZEJsb2NrTWFwID0gSGFzaE1hcDxNYXJrZWRCbG9j
ayosIHN0ZDo6dW5pcXVlX3B0cjxNYXJrZWRCbG9ja0RhdGE+PjsKKyAgICB1c2luZyBQcmVjaXNl
QWxsb2NhdGlvbk1hcCA9IEhhc2hNYXA8UHJlY2lzZUFsbG9jYXRpb24qLCBzdGQ6OnVuaXF1ZV9w
dHI8UHJlY2lzZUFsbG9jYXRpb25EYXRhPj47CisKKyAgICB2b2lkIGFwcGVuZFRvTWFya1N0YWNr
KEpTQ2VsbCopOworICAgIHZvaWQgYXBwZW5kU2xvdyhKU0NlbGwqIGNlbGwpIHsgc2V0TWFya2Vk
QW5kQXBwZW5kVG9NYXJrU3RhY2soY2VsbCk7IH0KKworICAgIGJvb2wgdGVzdEFuZFNldE1hcmtl
ZChjb25zdCB2b2lkKiByYXdDZWxsKTsKKyAgICBib29sIHRlc3RBbmRTZXRNYXJrZWQoUHJlY2lz
ZUFsbG9jYXRpb24mKTsKKyAgICBib29sIHRlc3RBbmRTZXRNYXJrZWQoTWFya2VkQmxvY2smLCBI
ZWFwQ2VsbCopOworCisgICAgdm9pZCBzZXRNYXJrZWRBbmRBcHBlbmRUb01hcmtTdGFjayhKU0Nl
bGwqKTsKKworICAgIHZvaWQgdmlzaXRDaGlsZHJlbihjb25zdCBKU0NlbGwqKTsKKworICAgIHZv
aWQgZHVtcE1hcmtlckRhdGEoUHJlY2lzZUFsbG9jYXRpb24mLCBIZWFwQ2VsbCopOworICAgIHZv
aWQgZHVtcE1hcmtlckRhdGEoTWFya2VkQmxvY2smLCBIZWFwQ2VsbCopOworICAgIHZvaWQgZHVt
cE1hcmtlckRhdGEoSGVhcENlbGwqLCBjb25zdCBNYXJrZXJEYXRhKik7CisKKyAgICBQcmVjaXNl
QWxsb2NhdGlvbk1hcCBtX3ByZWNpc2VBbGxvY2F0aW9uTWFwOworICAgIE1hcmtlZEJsb2NrTWFw
IG1fbWFya2VkQmxvY2tNYXA7CisgICAgQ29uY3VycmVudFB0ckhhc2hTZXQgbV9vcGFxdWVSb290
U3RvcmFnZTsKKyAgICBEZXF1ZTxSZWZQdHI8U2hhcmVkVGFzazx2b2lkKEFic3RyYWN0U2xvdFZp
c2l0b3ImKT4+LCAzMj4gbV9jb25zdHJhaW50VGFza3M7Cit9OworCit9IC8vIG5hbWVzcGFjZSBK
U0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1ZlcmlmaWVyU2xvdFZpc2l0b3JJ
bmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVmVyaWZp
ZXJTbG90VmlzaXRvcklubGluZXMuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9WZXJpZmllclNsb3RWaXNpdG9ySW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkFic3RyYWN0U2xvdFZpc2l0b3JJbmxpbmVz
LmgiCisjaW5jbHVkZSAiVmVyaWZpZXJTbG90VmlzaXRvci5oIgorCituYW1lc3BhY2UgSlNDIHsK
KwordGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KK3ZvaWQgVmVyaWZpZXJTbG90VmlzaXRvcjo6
Zm9yRWFjaExpdmVDZWxsKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCit7CisgICAgZm9yRWFjaExp
dmVQcmVjaXNlQWxsb2NhdGlvbihmdW5jdG9yKTsKKyAgICBmb3JFYWNoTGl2ZU1hcmtlZEJsb2Nr
Q2VsbChmdW5jdG9yKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KK3ZvaWQgVmVy
aWZpZXJTbG90VmlzaXRvcjo6Zm9yRWFjaExpdmVQcmVjaXNlQWxsb2NhdGlvbihjb25zdCBGdW5j
dG9yJiBmdW5jKQoreworICAgIGZvciAoYXV0byYgZW50cnkgOiBtX3ByZWNpc2VBbGxvY2F0aW9u
TWFwKSB7CisgICAgICAgIFByZWNpc2VBbGxvY2F0aW9uKiBhbGxvY2F0aW9uID0gZW50cnkudmFs
dWUtPmFsbG9jYXRpb24oKTsKKyAgICAgICAgZnVuYyhhbGxvY2F0aW9uLT5jZWxsKCkpOworICAg
IH0KK30KKwordGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KK3ZvaWQgVmVyaWZpZXJTbG90Vmlz
aXRvcjo6Zm9yRWFjaExpdmVNYXJrZWRCbG9ja0NlbGwoY29uc3QgRnVuY3RvciYgZnVuYykKK3sK
KyAgICBmb3IgKGF1dG8mIGVudHJ5IDogbV9tYXJrZWRCbG9ja01hcCkgeworICAgICAgICBhdXRv
JiBkYXRhID0gZW50cnkudmFsdWU7CisgICAgICAgIE1hcmtlZEJsb2NrKiBibG9jayA9IGRhdGEt
PmJsb2NrKCk7CisgICAgICAgIGNvbnN0IE1hcmtlZEJsb2NrRGF0YTo6QXRvbXNCaXRtYXAmIGF0
b21zID0gIGRhdGEtPmF0b21zKCk7CisgICAgICAgIGZvciAoYXV0byBhdG9tTnVtYmVyIDogYXRv
bXMpCisgICAgICAgICAgICBmdW5jKGJpdHdpc2VfY2FzdDxIZWFwQ2VsbCo+KGJsb2NrLT5oYW5k
bGUoKS5hdG9tQXQoYXRvbU51bWJlcikpKTsKKyAgICB9Cit9CisKK30gLy8gbmFtZXNwYWNlIEpT
QwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVmlzaXRDb3VudGVyLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVmlzaXRDb3VudGVyLmgJKHJldmlz
aW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Zpc2l0Q291bnRlci5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
NyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTct
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTI1LDcgKzI1LDcgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRl
ICJTbG90VmlzaXRvci5oIgorI2luY2x1ZGUgIkFic3RyYWN0U2xvdFZpc2l0b3IuaCIKIAogbmFt
ZXNwYWNlIEpTQyB7CiAKQEAgLTMzLDEzICszMywxMyBAQCBjbGFzcyBWaXNpdENvdW50ZXIgewog
cHVibGljOgogICAgIFZpc2l0Q291bnRlcigpIHsgfQogICAgIAotICAgIFZpc2l0Q291bnRlcihT
bG90VmlzaXRvciYgdmlzaXRvcikKKyAgICBWaXNpdENvdW50ZXIoQWJzdHJhY3RTbG90VmlzaXRv
ciYgdmlzaXRvcikKICAgICAgICAgOiBtX3Zpc2l0b3IoJnZpc2l0b3IpCiAgICAgICAgICwgbV9p
bml0aWFsVmlzaXRDb3VudCh2aXNpdG9yLnZpc2l0Q291bnQoKSkKICAgICB7CiAgICAgfQogICAg
IAotICAgIFNsb3RWaXNpdG9yJiB2aXNpdG9yKCkgY29uc3QgeyByZXR1cm4gKm1fdmlzaXRvcjsg
fQorICAgIEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IoKSBjb25zdCB7IHJldHVybiAqbV92
aXNpdG9yOyB9CiAgICAgCiAgICAgc2l6ZV90IHZpc2l0Q291bnQoKSBjb25zdAogICAgIHsKQEAg
LTQ3LDcgKzQ3LDcgQEAgcHVibGljOgogICAgIH0KICAgICAKIHByaXZhdGU6Ci0gICAgU2xvdFZp
c2l0b3IqIG1fdmlzaXRvciB7IG51bGxwdHIgfTsKKyAgICBBYnN0cmFjdFNsb3RWaXNpdG9yKiBt
X3Zpc2l0b3IgeyBudWxscHRyIH07CiAgICAgc2l6ZV90IG1faW5pdGlhbFZpc2l0Q291bnQgeyAw
IH07CiB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrQmxvY2suY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtCbG9jay5jcHAJ
KHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtCbG9j
ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDEyLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEyLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC05OCwxMiArOTgsMTEgQEAgdm9pZCBXZWFrQmxvY2s6
OnN3ZWVwKCkKICAgICBBU1NFUlQoIW1fc3dlZXBSZXN1bHQuaXNOdWxsKCkpOwogfQogCi10ZW1w
bGF0ZTx0eXBlbmFtZSBDb250YWluZXJUeXBlPgotdm9pZCBXZWFrQmxvY2s6OnNwZWNpYWxpemVk
VmlzaXQoQ29udGFpbmVyVHlwZSYgY29udGFpbmVyLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3Rl
bXBsYXRlPHR5cGVuYW1lIENvbnRhaW5lclR5cGUsIHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFdl
YWtCbG9jazo6c3BlY2lhbGl6ZWRWaXNpdChDb250YWluZXJUeXBlJiBjb250YWluZXIsIFZpc2l0
b3ImIHZpc2l0b3IpCiB7Ci0gICAgSGVhcFZlcnNpb24gbWFya2luZ1ZlcnNpb24gPSB2aXNpdG9y
Lm1hcmtpbmdWZXJzaW9uKCk7Ci0KICAgICBzaXplX3QgY291bnQgPSB3ZWFrSW1wbENvdW50KCk7
CisgICAgSGVhcEFuYWx5emVyKiBoZWFwQW5hbHl6ZXIgPSB2aXNpdG9yLnZtKCkuYWN0aXZlSGVh
cEFuYWx5emVyKCk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7CiAg
ICAgICAgIFdlYWtJbXBsKiB3ZWFrSW1wbCA9ICZ3ZWFrSW1wbHMoKVtpXTsKICAgICAgICAgaWYg
KHdlYWtJbXBsLT5zdGF0ZSgpICE9IFdlYWtJbXBsOjpMaXZlKQpAQCAtMTE0LDEyICsxMTMsMTIg
QEAgdm9pZCBXZWFrQmxvY2s6OnNwZWNpYWxpemVkVmlzaXQoQ29udGFpbgogICAgICAgICAgICAg
Y29udGludWU7CiAKICAgICAgICAgSlNWYWx1ZSBqc1ZhbHVlID0gd2Vha0ltcGwtPmpzVmFsdWUo
KTsKLSAgICAgICAgaWYgKGNvbnRhaW5lci5pc01hcmtlZChtYXJraW5nVmVyc2lvbiwganNWYWx1
ZS5hc0NlbGwoKSkpCisgICAgICAgIGlmICh2aXNpdG9yLmlzTWFya2VkKGNvbnRhaW5lciwganNW
YWx1ZS5hc0NlbGwoKSkpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgCiAgICAgICAg
IGNvbnN0IGNoYXIqIHJlYXNvbiA9ICIiOwogICAgICAgICBjb25zdCBjaGFyKiogcmVhc29uUHRy
ID0gbnVsbHB0cjsKLSAgICAgICAgaWYgKFVOTElLRUxZKHZpc2l0b3IuaXNBbmFseXppbmdIZWFw
KCkpKQorICAgICAgICBpZiAoVU5MSUtFTFkoaGVhcEFuYWx5emVyKSkKICAgICAgICAgICAgIHJl
YXNvblB0ciA9ICZyZWFzb247CiAKICAgICAgICAgaWYgKCF3ZWFrSGFuZGxlT3duZXItPmlzUmVh
Y2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEhhbmRsZTxVbmtub3duPjo6d3JhcFNsb3QoJmNvbnN0X2Nh
c3Q8SlNWYWx1ZSY+KGpzVmFsdWUpKSwgd2Vha0ltcGwtPmNvbnRleHQoKSwgdmlzaXRvciwgcmVh
c29uUHRyKSkKQEAgLTEyNywxNCArMTI2LDE1IEBAIHZvaWQgV2Vha0Jsb2NrOjpzcGVjaWFsaXpl
ZFZpc2l0KENvbnRhaW4KIAogICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKGpzVmFs
dWUpOwogCi0gICAgICAgIGlmIChVTkxJS0VMWSh2aXNpdG9yLmlzQW5hbHl6aW5nSGVhcCgpKSkg
eworICAgICAgICBpZiAoVU5MSUtFTFkoaGVhcEFuYWx5emVyKSkgewogICAgICAgICAgICAgaWYg
KGpzVmFsdWUuaXNDZWxsKCkpCi0gICAgICAgICAgICAgICAgdmlzaXRvci5oZWFwQW5hbHl6ZXIo
KS0+c2V0T3BhcXVlUm9vdFJlYWNoYWJpbGl0eVJlYXNvbkZvckNlbGwoanNWYWx1ZS5hc0NlbGwo
KSwgKnJlYXNvblB0cik7CisgICAgICAgICAgICAgICAgaGVhcEFuYWx5emVyLT5zZXRPcGFxdWVS
b290UmVhY2hhYmlsaXR5UmVhc29uRm9yQ2VsbChqc1ZhbHVlLmFzQ2VsbCgpLCAqcmVhc29uUHRy
KTsKICAgICAgICAgfQogICAgIH0KIH0KIAotdm9pZCBXZWFrQmxvY2s6OnZpc2l0KFNsb3RWaXNp
dG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK0FMV0FZU19JTkxJTkUg
dm9pZCBXZWFrQmxvY2s6OnZpc2l0SW1wbChWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIC8vIElm
IGEgYmxvY2sgaXMgY29tcGxldGVseSBlbXB0eSwgYSB2aXNpdCB3b24ndCBoYXZlIGFueSBlZmZl
Y3QuCiAgICAgaWYgKGlzRW1wdHkoKSkKQEAgLTE0OSw2ICsxNDksOSBAQCB2b2lkIFdlYWtCbG9j
azo6dmlzaXQoU2xvdFZpc2l0b3ImIHZpc2l0CiAgICAgICAgIHNwZWNpYWxpemVkVmlzaXQobV9j
b250YWluZXIubWFya2VkQmxvY2soKSwgdmlzaXRvcik7CiB9CiAKK3ZvaWQgV2Vha0Jsb2NrOjp2
aXNpdChBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKSB7IHZpc2l0SW1wbCh2aXNpdG9yKTsg
fQordm9pZCBXZWFrQmxvY2s6OnZpc2l0KFNsb3RWaXNpdG9yJiB2aXNpdG9yKSB7IHZpc2l0SW1w
bCh2aXNpdG9yKTsgfQorCiB2b2lkIFdlYWtCbG9jazo6cmVhcCgpCiB7CiAgICAgLy8gSWYgYSBi
bG9jayBpcyBjb21wbGV0ZWx5IGVtcHR5LCBhIHJlYXBpbmcgd29uJ3QgaGF2ZSBhbnkgZWZmZWN0
LgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha0Jsb2NrLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha0Jsb2NrLmgJKHJldmlzaW9uIDI3
MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtCbG9jay5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE5IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMzIsNiArMzIsNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAorY2xhc3MgQWJz
dHJhY3RTbG90VmlzaXRvcjsKIGNsYXNzIEhlYXA7CiBjbGFzcyBTbG90VmlzaXRvcjsKIApAQCAt
NjUsNyArNjYsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzd2VlcCgpOwogICAgIFN3ZWVwUmVzdWx0
IHRha2VTd2VlcFJlc3VsdCgpOwogCi0gICAgdm9pZCB2aXNpdChTbG90VmlzaXRvciYpOworICAg
IEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgdmlzaXQoQWJzdHJhY3RTbG90VmlzaXRvciYpOworICAg
IEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgdmlzaXQoU2xvdFZpc2l0b3ImKTsKIAogICAgIHZvaWQg
cmVhcCgpOwogCkBAIC03MywxMCArNzUsMTIgQEAgcHVibGljOgogICAgIHZvaWQgZGlzY29ubmVj
dENvbnRhaW5lcigpIHsgbV9jb250YWluZXIgPSBDZWxsQ29udGFpbmVyKCk7IH0KIAogcHJpdmF0
ZToKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIHZpc2l0SW1wbChWaXNpdG9y
Jik7CisKICAgICBzdGF0aWMgRnJlZUNlbGwqIGFzRnJlZUNlbGwoV2Vha0ltcGwqKTsKICAgICAK
LSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDb250YWluZXJUeXBlPgotICAgIHZvaWQgc3BlY2lhbGl6
ZWRWaXNpdChDb250YWluZXJUeXBlJiwgU2xvdFZpc2l0b3ImKTsKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBDb250YWluZXJUeXBlLCB0eXBlbmFtZSBWaXNpdG9yPgorICAgIHZvaWQgc3BlY2lhbGl6
ZWRWaXNpdChDb250YWluZXJUeXBlJiwgVmlzaXRvciYpOwogCiAgICAgZXhwbGljaXQgV2Vha0Js
b2NrKENlbGxDb250YWluZXIpOwogICAgIHZvaWQgZmluYWxpemUoV2Vha0ltcGwqKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtIYW5kbGVPd25lci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha0hhbmRsZU93bmVyLmNwcAkocmV2
aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha0hhbmRsZU93
bmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEyLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0zNSw3ICszNSw3IEBAIFdlYWtIYW5kbGVPd25lcjo6fldl
YWtIYW5kbGVPd25lcigpCiB7CiB9CiAKLWJvb2wgV2Vha0hhbmRsZU93bmVyOjppc1JlYWNoYWJs
ZUZyb21PcGFxdWVSb290cyhIYW5kbGU8VW5rbm93bj4sIHZvaWQqLCBTbG90VmlzaXRvciYsIGNv
bnN0IGNoYXIqKikKK2Jvb2wgV2Vha0hhbmRsZU93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVS
b290cyhIYW5kbGU8VW5rbm93bj4sIHZvaWQqLCBBYnN0cmFjdFNsb3RWaXNpdG9yJiwgY29uc3Qg
Y2hhcioqKQogewogICAgIHJldHVybiBmYWxzZTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL1dlYWtIYW5kbGVPd25lci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL1dlYWtIYW5kbGVPd25lci5oCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrSGFuZGxlT3duZXIuaAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0y
OSwxMyArMjksMTMgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLWNsYXNzIFNsb3RWaXNpdG9yOwor
Y2xhc3MgQWJzdHJhY3RTbG90VmlzaXRvcjsKIAogY2xhc3MgSlNfRVhQT1JUX1BSSVZBVEUgV2Vh
a0hhbmRsZU93bmVyIHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5XZWFrSGFuZGxlT3duZXIoKTsK
ICAgICAvLyByZWFzb24gd2lsbCBvbmx5IGJlIG5vbi1udWxsIHdoZW4gZ2VuZXJhdGluZyBhIGRl
YnVnIEdDIGhlYXAgc25hcHNob3QuCi0gICAgdmlydHVhbCBib29sIGlzUmVhY2hhYmxlRnJvbU9w
YXF1ZVJvb3RzKEhhbmRsZTxVbmtub3duPiwgdm9pZCogY29udGV4dCwgU2xvdFZpc2l0b3ImLCBj
aGFyIGNvbnN0KiogcmVhc29uID0gbnVsbHB0cik7CisgICAgdmlydHVhbCBib29sIGlzUmVhY2hh
YmxlRnJvbU9wYXF1ZVJvb3RzKEhhbmRsZTxVbmtub3duPiwgdm9pZCogY29udGV4dCwgQWJzdHJh
Y3RTbG90VmlzaXRvciYsIGNoYXIgY29uc3QqKiByZWFzb24gPSBudWxscHRyKTsKICAgICB2aXJ0
dWFsIHZvaWQgZmluYWxpemUoSGFuZGxlPFVua25vd24+LCB2b2lkKiBjb250ZXh0KTsKIH07CiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtTZXQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtTZXQuY3BwCShyZXZpc2lvbiAyNzI5
MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrU2V0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTIzLDQgKzEyMyw3IEBAIHZvaWQgV2Vha1NldDo6cmVtb3ZlQWxsb2NhdG9yKFdl
YWtCbG9jayoKICAgICBXZWFrQmxvY2s6OmRlc3Ryb3koKmhlYXAoKSwgYmxvY2spOwogfQogCit0
ZW1wbGF0ZSB2b2lkIFdlYWtTZXQ6OnZpc2l0KEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBs
YXRlIHZvaWQgV2Vha1NldDo6dmlzaXQoU2xvdFZpc2l0b3ImKTsKKwogfSAvLyBuYW1lc3BhY2Ug
SlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrU2V0LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha1NldC5oCShyZXZpc2lvbiAyNzI5
MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrU2V0LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTkgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC01MSw3ICs1MSw3IEBAIHB1YmxpYzoKICAgICBib29sIGlzRW1wdHkoKSBjb25zdDsK
ICAgICBib29sIGlzVHJpdmlhbGx5RGVzdHJ1Y3RpYmxlKCkgY29uc3Q7CiAKLSAgICB2b2lkIHZp
c2l0KFNsb3RWaXNpdG9yJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCB2
aXNpdChWaXNpdG9yJik7CiAKICAgICB2b2lkIHJlYXAoKTsKICAgICB2b2lkIHN3ZWVwKCk7CkBA
IC0xMTQsNyArMTE0LDggQEAgaW5saW5lIHZvaWQgV2Vha1NldDo6bGFzdENoYW5jZVRvRmluYWxp
egogICAgICAgICBibG9jay0+bGFzdENoYW5jZVRvRmluYWxpemUoKTsKIH0KIAotaW5saW5lIHZv
aWQgV2Vha1NldDo6dmlzaXQoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBWaXNpdG9yPgoraW5saW5lIHZvaWQgV2Vha1NldDo6dmlzaXQoVmlzaXRvciYgdmlzaXRvcikK
IHsKICAgICBmb3IgKFdlYWtCbG9jayogYmxvY2sgPSBtX2Jsb2Nrcy5oZWFkKCk7IGJsb2NrOyBi
bG9jayA9IGJsb2NrLT5uZXh0KCkpCiAgICAgICAgIGJsb2NrLT52aXNpdCh2aXNpdG9yKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TaGFkb3dDaGlja2VuLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU2hhZG93Q2hp
Y2tlbi5jcHAJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRl
cnByZXRlci9TaGFkb3dDaGlja2VuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ0MCw3ICs0NDAs
NyBAQCB2b2lkIFNoYWRvd0NoaWNrZW46OnVwZGF0ZShWTSYgdm0sIENhbGxGCiAgICAgICAgIGRh
dGFMb2coIiAgICBBZnRlciBjbGVhbi11cDogIiwgKnRoaXMsICJcbiIpOwogfQogCi12b2lkIFNo
YWRvd0NoaWNrZW46OnZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIFNo
YWRvd0NoaWNrZW46OnZpc2l0Q2hpbGRyZW4oQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikK
IHsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2xvZ0N1cnNvciAtIG1fbG9nOyBpLS07KSB7CiAg
ICAgICAgIEpTT2JqZWN0KiBjYWxsZWUgPSBtX2xvZ1tpXS5jYWxsZWU7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU2hhZG93Q2hpY2tlbi5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TaGFkb3dDaGlja2VuLmgJKHJldmlz
aW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TaGFkb3dD
aGlja2VuLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzUsMTMgKzM1LDEzIEBACiAKIG5hbWVzcGFjZSBKU0Mg
ewogCitjbGFzcyBBYnN0cmFjdFNsb3RWaXNpdG9yOwogY2xhc3MgQ2FsbEZyYW1lOwogY2xhc3Mg
Q29kZUJsb2NrOwogY2xhc3MgSlNBcnJheTsKIGNsYXNzIEpTT2JqZWN0OwogY2xhc3MgSlNTY29w
ZTsKIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKLWNsYXNzIFNsb3RWaXNpdG9yOwogY2xh
c3MgVk07CiAKIC8vIFNoYWRvd0NoaWNrZW4gaXMgYSBsb2cgdGhhdCBjYW4gYmUgdXNlZCB0byBw
cm9kdWNlIGEgc2hhZG93IHN0YWNrIG9mIENISUNLRU4tc3R5bGUgc3RhY2sgZnJhbWVzLgpAQCAt
MTk2LDcgKzE5Niw3IEBAIHB1YmxpYzoKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgog
ICAgIHZvaWQgaXRlcmF0ZShWTSYsIENhbGxGcmFtZSosIGNvbnN0IEZ1bmN0b3ImKTsKICAgICAK
LSAgICB2b2lkIHZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKKyAgICB2b2lkIHZpc2l0Q2hp
bGRyZW4oQWJzdHJhY3RTbG90VmlzaXRvciYpOwogICAgIHZvaWQgcmVzZXQoKTsKICAgICAKICAg
ICAvLyBKSVQgc3VwcG9ydC4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvR0NBd2Fy
ZUpJVFN0dWJSb3V0aW5lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0dDQXdhcmVKSVRTdHViUm91dGluZS5jcHAJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvR0NBd2FyZUpJVFN0dWJSb3V0aW5lLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxOCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTczLDEwICs3Myw2IEBAIHZvaWQgR0NBd2FyZUpJVFN0dWJSb3V0aW5lOjpkZWxl
dGVGcm9tR0MKICAgICBkZWxldGUgdGhpczsKIH0KIAotdm9pZCBHQ0F3YXJlSklUU3R1YlJvdXRp
bmU6Om1hcmtSZXF1aXJlZE9iamVjdHNJbnRlcm5hbChTbG90VmlzaXRvciYpCi17Ci19Ci0KIE1h
cmtpbmdHQ0F3YXJlSklUU3R1YlJvdXRpbmU6Ok1hcmtpbmdHQ0F3YXJlSklUU3R1YlJvdXRpbmUo
CiAgICAgY29uc3QgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiYg
Y29kZSwgVk0mIHZtLCBjb25zdCBKU0NlbGwqIG93bmVyLAogICAgIGNvbnN0IFZlY3RvcjxKU0Nl
bGwqPiYgY2VsbHMsIEJhZzxDYWxsTGlua0luZm8+JiYgY2FsbExpbmtJbmZvcykKQEAgLTkyLDEy
ICs4OCwyMSBAQCBNYXJraW5nR0NBd2FyZUpJVFN0dWJSb3V0aW5lOjp+TWFya2luZ0dDCiB7CiB9
CiAKLXZvaWQgTWFya2luZ0dDQXdhcmVKSVRTdHViUm91dGluZTo6bWFya1JlcXVpcmVkT2JqZWN0
c0ludGVybmFsKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRv
cj4KK0FMV0FZU19JTkxJTkUgdm9pZCBNYXJraW5nR0NBd2FyZUpJVFN0dWJSb3V0aW5lOjptYXJr
UmVxdWlyZWRPYmplY3RzSW50ZXJuYWxJbXBsKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgZm9y
IChhdXRvJiBlbnRyeSA6IG1fY2VsbHMpCiAgICAgICAgIHZpc2l0b3IuYXBwZW5kKGVudHJ5KTsK
IH0KIAordm9pZCBNYXJraW5nR0NBd2FyZUpJVFN0dWJSb3V0aW5lOjptYXJrUmVxdWlyZWRPYmpl
Y3RzSW50ZXJuYWwoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBtYXJrUmVx
dWlyZWRPYmplY3RzSW50ZXJuYWxJbXBsKHZpc2l0b3IpOworfQordm9pZCBNYXJraW5nR0NBd2Fy
ZUpJVFN0dWJSb3V0aW5lOjptYXJrUmVxdWlyZWRPYmplY3RzSW50ZXJuYWwoU2xvdFZpc2l0b3Im
IHZpc2l0b3IpCit7CisgICAgbWFya1JlcXVpcmVkT2JqZWN0c0ludGVybmFsSW1wbCh2aXNpdG9y
KTsKK30KIAogR0NBd2FyZUpJVFN0dWJSb3V0aW5lV2l0aEV4Y2VwdGlvbkhhbmRsZXI6OkdDQXdh
cmVKSVRTdHViUm91dGluZVdpdGhFeGNlcHRpb25IYW5kbGVyKAogICAgIGNvbnN0IE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxKSVRTdHViUm91dGluZVB0clRhZz4mIGNvZGUsIFZNJiB2bSwgIGNvbnN0
IEpTQ2VsbCogb3duZXIsIGNvbnN0IFZlY3RvcjxKU0NlbGwqPiYgY2VsbHMsIEJhZzxDYWxsTGlu
a0luZm8+JiYgY2FsbExpbmtJbmZvcywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
R0NBd2FyZUpJVFN0dWJSb3V0aW5lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9HQ0F3YXJlSklUU3R1YlJvdXRpbmUuaAkocmV2aXNpb24gMjcyOTAyKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9HQ0F3YXJlSklUU3R1YlJvdXRpbmUuaAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxOCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTYwLDggKzYwLDkgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKCpuZXcgR0NBd2FyZUpJVFN0dWJSb3V0aW5lKGNvZGUsIHZtKSk7CiAgICAgfQotICAg
IAotICAgIHZvaWQgbWFya1JlcXVpcmVkT2JqZWN0cyhTbG90VmlzaXRvciYgdmlzaXRvcikKKwor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+CisgICAgdm9pZCBtYXJrUmVxdWlyZWRPYmpl
Y3RzKFZpc2l0b3ImIHZpc2l0b3IpCiAgICAgewogICAgICAgICBtYXJrUmVxdWlyZWRPYmplY3Rz
SW50ZXJuYWwodmlzaXRvcik7CiAgICAgfQpAQCAtNzEsNyArNzIsOCBAQCBwdWJsaWM6CiBwcm90
ZWN0ZWQ6CiAgICAgdm9pZCBvYnNlcnZlWmVyb1JlZkNvdW50KCkgb3ZlcnJpZGU7CiAgICAgCi0g
ICAgdmlydHVhbCB2b2lkIG1hcmtSZXF1aXJlZE9iamVjdHNJbnRlcm5hbChTbG90VmlzaXRvciYp
OworICAgIHZpcnR1YWwgdm9pZCBtYXJrUmVxdWlyZWRPYmplY3RzSW50ZXJuYWwoQWJzdHJhY3RT
bG90VmlzaXRvciYpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBtYXJrUmVxdWlyZWRPYmplY3RzSW50
ZXJuYWwoU2xvdFZpc2l0b3ImKSB7IH0KIAogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgSklU
U3R1YlJvdXRpbmVTZXQ7CkBAIC04OSw3ICs5MSw5IEBAIHB1YmxpYzoKICAgICB+TWFya2luZ0dD
QXdhcmVKSVRTdHViUm91dGluZSgpIG92ZXJyaWRlOwogICAgIAogcHJvdGVjdGVkOgotICAgIHZv
aWQgbWFya1JlcXVpcmVkT2JqZWN0c0ludGVybmFsKFNsb3RWaXNpdG9yJikgb3ZlcnJpZGU7Cisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCBtYXJrUmVxdWlyZWRPYmplY3RzSW50
ZXJuYWxJbXBsKFZpc2l0b3ImKTsKKyAgICB2b2lkIG1hcmtSZXF1aXJlZE9iamVjdHNJbnRlcm5h
bChBYnN0cmFjdFNsb3RWaXNpdG9yJikgZmluYWw7CisgICAgdm9pZCBtYXJrUmVxdWlyZWRPYmpl
Y3RzSW50ZXJuYWwoU2xvdFZpc2l0b3ImKSBmaW5hbDsKIAogcHJpdmF0ZToKICAgICBWZWN0b3I8
V3JpdGVCYXJyaWVyPEpTQ2VsbD4+IG1fY2VsbHM7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVFdvcmtsaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVFdvcmtsaXN0LmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRXb3JrbGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L1BvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1BvbHltb3JwaGljQ2FsbFN0dWJS
b3V0aW5lLmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9Qb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTggQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMzUs
MTIgKzEzNSwyMiBAQCBib29sIFBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lOjp2aXNpdFdlCiAg
ICAgcmV0dXJuIGlzU3RpbGxMaXZlOwogfQogCi12b2lkIFBvbHltb3JwaGljQ2FsbFN0dWJSb3V0
aW5lOjptYXJrUmVxdWlyZWRPYmplY3RzSW50ZXJuYWwoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0
ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgorQUxXQVlTX0lOTElORSB2b2lkIFBvbHltb3JwaGlj
Q2FsbFN0dWJSb3V0aW5lOjptYXJrUmVxdWlyZWRPYmplY3RzSW50ZXJuYWxJbXBsKFZpc2l0b3Im
IHZpc2l0b3IpCiB7CiAgICAgZm9yIChhdXRvJiB2YXJpYW50IDogbV92YXJpYW50cykKICAgICAg
ICAgdmlzaXRvci5hcHBlbmQodmFyaWFudCk7CiB9CiAKK3ZvaWQgUG9seW1vcnBoaWNDYWxsU3R1
YlJvdXRpbmU6Om1hcmtSZXF1aXJlZE9iamVjdHNJbnRlcm5hbChBYnN0cmFjdFNsb3RWaXNpdG9y
JiB2aXNpdG9yKQoreworICAgIG1hcmtSZXF1aXJlZE9iamVjdHNJbnRlcm5hbEltcGwodmlzaXRv
cik7Cit9Cit2b2lkIFBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lOjptYXJrUmVxdWlyZWRPYmpl
Y3RzSW50ZXJuYWwoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgbWFya1JlcXVpcmVkT2Jq
ZWN0c0ludGVybmFsSW1wbCh2aXNpdG9yKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNl
bmRpZiAvLyBFTkFCTEUoSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Qb2x5
bW9ycGhpY0NhbGxTdHViUm91dGluZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUuaAkocmV2aXNpb24gMjcyOTAyKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Qb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
NS0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMTA1LDYgKzEwNSw4IEBAIHB1YmxpYzoKICAgICBib29sIHZp
c2l0V2VhayhWTSYpIGZpbmFsOwogCiBwcml2YXRlOgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZp
c2l0b3I+IHZvaWQgbWFya1JlcXVpcmVkT2JqZWN0c0ludGVybmFsSW1wbChWaXNpdG9yJik7Cisg
ICAgdm9pZCBtYXJrUmVxdWlyZWRPYmplY3RzSW50ZXJuYWwoQWJzdHJhY3RTbG90VmlzaXRvciYp
IGZpbmFsOwogICAgIHZvaWQgbWFya1JlcXVpcmVkT2JqZWN0c0ludGVybmFsKFNsb3RWaXNpdG9y
JikgZmluYWw7CiAKICAgICBWZWN0b3I8V3JpdGVCYXJyaWVyPEpTQ2VsbD4sIDI+IG1fdmFyaWFu
dHM7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BYnN0cmFjdE1vZHVsZVJl
Y29yZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQWJz
dHJhY3RNb2R1bGVSZWNvcmQuY3BwCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9BYnN0cmFjdE1vZHVsZVJlY29yZC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTkgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC02MCw3ICs2MCw4IEBAIHZvaWQgQWJzdHJhY3RNb2R1bGVSZWNvcmQ6OmZpbmlzaENyZWF0
aW8KICAgICBwdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJkZXBlbmRl
bmNpZXNNYXAiX3MpLCBtX2RlcGVuZGVuY2llc01hcC5nZXQoKSk7CiB9CiAKLXZvaWQgQWJzdHJh
Y3RNb2R1bGVSZWNvcmQ6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYg
dmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEFic3RyYWN0TW9kdWxl
UmVjb3JkOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3Ip
CiB7CiAgICAgQWJzdHJhY3RNb2R1bGVSZWNvcmQqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8QWJzdHJh
Y3RNb2R1bGVSZWNvcmQqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRo
aXNPYmplY3QsIGluZm8oKSk7CkBAIC03MCw2ICs3MSw4IEBAIHZvaWQgQWJzdHJhY3RNb2R1bGVS
ZWNvcmQ6OnZpc2l0Q2hpbGRyZW4KICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2Rl
cGVuZGVuY2llc01hcCk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihBYnN0cmFjdE1vZHVs
ZVJlY29yZCk7CisKIHZvaWQgQWJzdHJhY3RNb2R1bGVSZWNvcmQ6OmFwcGVuZFJlcXVlc3RlZE1v
ZHVsZShjb25zdCBJZGVudGlmaWVyJiBtb2R1bGVOYW1lKQogewogICAgIG1fcmVxdWVzdGVkTW9k
dWxlcy5hZGQobW9kdWxlTmFtZS5pbXBsKCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQWJzdHJhY3RNb2R1bGVSZWNvcmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9BYnN0cmFjdE1vZHVsZVJlY29yZC5oCShyZXZpc2lvbiAyNzI5
MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BYnN0cmFjdE1vZHVsZVJlY29y
ZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTUtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTEzNiw3ICsxMzYsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgQWJzdHJh
Y3RNb2R1bGVSZWNvcmQoVk0mLCBTdHJ1Y3R1cmUqLCBjb25zdCBJZGVudGlmaWVyJik7CiAgICAg
dm9pZCBmaW5pc2hDcmVhdGlvbihKU0dsb2JhbE9iamVjdCosIFZNJik7CiAKLSAgICBzdGF0aWMg
dm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9W
SVNJVF9DSElMRFJFTjsKIAogICAgIHZvaWQgc2V0TW9kdWxlRW52aXJvbm1lbnQoSlNHbG9iYWxP
YmplY3QqLCBKU01vZHVsZUVudmlyb25tZW50Kik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0FyZ0xpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0FyZ0xpc3QuY3BwCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9BcmdMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwMy0yMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC01MSw3ICs1MSw4IEBA
IHZvaWQgQXJnTGlzdDo6Z2V0U2xpY2UoaW50IHN0YXJ0SW5kZXgsIEEKICAgICByZXN1bHQubV9h
cmdDb3VudCA9ICBtX2FyZ0NvdW50IC0gc3RhcnRJbmRleDsKIH0KIAotdm9pZCBNYXJrZWRBcmd1
bWVudEJ1ZmZlcjo6bWFya0xpc3RzKFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBMaXN0U2V0JiBtYXJr
U2V0KQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgTWFya2VkQXJndW1lbnRCdWZm
ZXI6Om1hcmtMaXN0cyhWaXNpdG9yJiB2aXNpdG9yLCBMaXN0U2V0JiBtYXJrU2V0KQogewogICAg
IExpc3RTZXQ6Oml0ZXJhdG9yIGVuZCA9IG1hcmtTZXQuZW5kKCk7CiAgICAgZm9yIChMaXN0U2V0
OjppdGVyYXRvciBpdCA9IG1hcmtTZXQuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CkBAIC02
MSw2ICs2Miw5IEBAIHZvaWQgTWFya2VkQXJndW1lbnRCdWZmZXI6Om1hcmtMaXN0cyhTbG8KICAg
ICB9CiB9CiAKK3RlbXBsYXRlIHZvaWQgTWFya2VkQXJndW1lbnRCdWZmZXI6Om1hcmtMaXN0cyhB
YnN0cmFjdFNsb3RWaXNpdG9yJiwgTGlzdFNldCYpOwordGVtcGxhdGUgdm9pZCBNYXJrZWRBcmd1
bWVudEJ1ZmZlcjo6bWFya0xpc3RzKFNsb3RWaXNpdG9yJiwgTGlzdFNldCYpOworCiB2b2lkIE1h
cmtlZEFyZ3VtZW50QnVmZmVyOjpzbG93RW5zdXJlQ2FwYWNpdHkoc2l6ZV90IHJlcXVlc3RlZENh
cGFjaXR5KQogewogICAgIHNldE5lZWRzT3ZlcmZsb3dDaGVjaygpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJnTGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0FyZ0xpc3QuaAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJnTGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYg
KzEsNiBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMSBIYXJyaSBQb3J0ZW4gKHBv
cnRlbkBrZGUub3JnKQotICogIENvcHlyaWdodCAoQykgMjAwMy0yMDE3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMTE4LDcgKzEx
OCw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAgICAgICAgIAot
ICAgIHN0YXRpYyB2b2lkIG1hcmtMaXN0cyhTbG90VmlzaXRvciYsIExpc3RTZXQmKTsKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiBzdGF0aWMgdm9pZCBtYXJrTGlzdHMoVmlzaXRvciYs
IExpc3RTZXQmKTsKIAogICAgIHZvaWQgZW5zdXJlQ2FwYWNpdHkoc2l6ZV90IHJlcXVlc3RlZENh
cGFjaXR5KQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hl
YWJsZUlkZW50aWZpZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9DYWNoZWFibGVJZGVudGlmaWVyLmgJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlYWJsZUlkZW50aWZpZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIwLTIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0zOSwxMCArMzksMTAgQEAgdXNpbmcgV1RGOjpVbmlxdWVkU3RyaW5nSW1wbDsKIAogbmFtZXNw
YWNlIEpTQyB7CiAKK2NsYXNzIEFic3RyYWN0U2xvdFZpc2l0b3I7CiBjbGFzcyBDb2RlQmxvY2s7
CiBjbGFzcyBJZGVudGlmaWVyOwogY2xhc3MgSlNDZWxsOwotY2xhc3MgU2xvdFZpc2l0b3I7CiAK
IGNsYXNzIENhY2hlYWJsZUlkZW50aWZpZXIgewogcHVibGljOgpAQCAtODcsNyArODcsNyBAQCBw
dWJsaWM6CiAKICAgICB1aW50cHRyX3QgcmF3Qml0cygpIGNvbnN0IHsgcmV0dXJuIG1fYml0czsg
fQogCi0gICAgaW5saW5lIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImKSBjb25zdDsK
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiBpbmxpbmUgdm9pZCB2aXNpdEFnZ3JlZ2F0
ZShWaXNpdG9yJikgY29uc3Q7CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGR1bXAoUHJp
bnRTdHJlYW0mKSBjb25zdDsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Q2FjaGVhYmxlSWRlbnRpZmllcklubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9DYWNoZWFibGVJZGVudGlmaWVySW5saW5lcy5oCShyZXZpc2lvbiAy
NzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWFibGVJZGVudGlm
aWVySW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMjAtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEzNyw3ICsxMzcsOCBAQCBpbmxpbmUgdm9pZCBD
YWNoZWFibGVJZGVudGlmaWVyOjpzZXRVaWRCCiAgICAgbV9iaXRzID0gYml0d2lzZV9jYXN0PHVp
bnRwdHJfdD4odWlkKSB8IHNfdWlkVGFnOwogfQogCi1pbmxpbmUgdm9pZCBDYWNoZWFibGVJZGVu
dGlmaWVyOjp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYgdmlzaXRvcikgY29uc3QKK3RlbXBs
YXRlPHR5cGVuYW1lIFZpc2l0b3I+CitpbmxpbmUgdm9pZCBDYWNoZWFibGVJZGVudGlmaWVyOjp2
aXNpdEFnZ3JlZ2F0ZShWaXNpdG9yJiB2aXNpdG9yKSBjb25zdAogewogICAgIGlmIChtX2JpdHMg
JiYgaXNDZWxsKCkpCiAgICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQoY2VsbCgpKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NsYXNzSW5mby5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NsYXNzSW5mby5oCShyZXZpc2lv
biAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DbGFzc0luZm8uaAko
d29ya2luZyBjb3B5KQpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5
LTIwMDEgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKICAqICBDb3B5cmlnaHQgKEMpIDIw
MDEgUGV0ZXIgS2VsbHkgKHBta0Bwb3N0LmNvbSkKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAx
OSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDAz
LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAg
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKQEAgLTQ0LDkgKzQ0LDYgQEAgc3RydWN0IE1ldGhvZFRhYmxlIHsKICAgICB1c2luZyBEZXN0
cm95RnVuY3Rpb25QdHIgPSB2b2lkICgqKShKU0NlbGwqKTsKICAgICBEZXN0cm95RnVuY3Rpb25Q
dHIgTUVUSE9EX1RBQkxFX0VOVFJZKGRlc3Ryb3kpOwogCi0gICAgdXNpbmcgVmlzaXRDaGlsZHJl
bkZ1bmN0aW9uUHRyID0gdm9pZCAoKikoSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKLSAgICBWaXNp
dENoaWxkcmVuRnVuY3Rpb25QdHIgTUVUSE9EX1RBQkxFX0VOVFJZKHZpc2l0Q2hpbGRyZW4pOwot
CiAgICAgdXNpbmcgR2V0Q2FsbERhdGFGdW5jdGlvblB0ciA9IENhbGxEYXRhICgqKShKU0NlbGwq
KTsKICAgICBHZXRDYWxsRGF0YUZ1bmN0aW9uUHRyIE1FVEhPRF9UQUJMRV9FTlRSWShnZXRDYWxs
RGF0YSk7CiAKQEAgLTEyMCw4ICsxMTcsMjMgQEAgc3RydWN0IE1ldGhvZFRhYmxlIHsKICAgICB1
c2luZyBFc3RpbWF0ZWRTaXplRnVuY3Rpb25QdHIgPSBzaXplX3QgKCopKEpTQ2VsbCosIFZNJik7
CiAgICAgRXN0aW1hdGVkU2l6ZUZ1bmN0aW9uUHRyIE1FVEhPRF9UQUJMRV9FTlRSWShlc3RpbWF0
ZWRTaXplKTsKIAorICAgIHVzaW5nIFZpc2l0Q2hpbGRyZW5GdW5jdGlvblB0ciA9IHZvaWQgKCop
KEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgVmlzaXRDaGlsZHJlbkZ1bmN0aW9uUHRyIE1F
VEhPRF9UQUJMRV9FTlRSWSh2aXNpdENoaWxkcmVuV2l0aFNsb3RWaXNpdG9yKTsKKworICAgIHVz
aW5nIFZpc2l0Q2hpbGRyZW5XaXRoQWJzdHJhY3RTbG90VmlzaXRvclB0ciA9IHZvaWQgKCopKEpT
Q2VsbCosIEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKKyAgICBWaXNpdENoaWxkcmVuV2l0aEFic3Ry
YWN0U2xvdFZpc2l0b3JQdHIgTUVUSE9EX1RBQkxFX0VOVFJZKHZpc2l0Q2hpbGRyZW5XaXRoQWJz
dHJhY3RTbG90VmlzaXRvcik7CisKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgdmlzaXRDaGlsZHJl
bihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBjb25zdCB7IHZpc2l0Q2hpbGRy
ZW5XaXRoU2xvdFZpc2l0b3IoY2VsbCwgdmlzaXRvcik7IH0KKyAgICBBTFdBWVNfSU5MSU5FIHZv
aWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0
b3IpIGNvbnN0IHsgdmlzaXRDaGlsZHJlbldpdGhBYnN0cmFjdFNsb3RWaXNpdG9yKGNlbGwsIHZp
c2l0b3IpOyB9CisKICAgICB1c2luZyBWaXNpdE91dHB1dENvbnN0cmFpbnRzUHRyID0gdm9pZCAo
KikoSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKLSAgICBWaXNpdE91dHB1dENvbnN0cmFpbnRzUHRy
IE1FVEhPRF9UQUJMRV9FTlRSWSh2aXNpdE91dHB1dENvbnN0cmFpbnRzKTsKKyAgICBWaXNpdE91
dHB1dENvbnN0cmFpbnRzUHRyIE1FVEhPRF9UQUJMRV9FTlRSWSh2aXNpdE91dHB1dENvbnN0cmFp
bnRzV2l0aFNsb3RWaXNpdG9yKTsKKworICAgIHVzaW5nIFZpc2l0T3V0cHV0Q29uc3RyYWludHNX
aXRoQWJzdHJhY3RTbG90VmlzaXRvclB0ciA9IHZvaWQgKCopKEpTQ2VsbCosIEFic3RyYWN0U2xv
dFZpc2l0b3ImKTsKKyAgICBWaXNpdE91dHB1dENvbnN0cmFpbnRzV2l0aEFic3RyYWN0U2xvdFZp
c2l0b3JQdHIgTUVUSE9EX1RBQkxFX0VOVFJZKHZpc2l0T3V0cHV0Q29uc3RyYWludHNXaXRoQWJz
dHJhY3RTbG90VmlzaXRvcik7CisKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgdmlzaXRPdXRwdXRD
b25zdHJhaW50cyhKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBjb25zdCB7IHZp
c2l0T3V0cHV0Q29uc3RyYWludHNXaXRoU2xvdFZpc2l0b3IoY2VsbCwgdmlzaXRvcik7IH0KKyAg
ICBBTFdBWVNfSU5MSU5FIHZvaWQgdmlzaXRPdXRwdXRDb25zdHJhaW50cyhKU0NlbGwqIGNlbGws
IEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0IHsgdmlzaXRPdXRwdXRDb25zdHJh
aW50c1dpdGhBYnN0cmFjdFNsb3RWaXNpdG9yKGNlbGwsIHZpc2l0b3IpOyB9CiB9OwogCiAjZGVm
aW5lIENSRUFURV9NRU1CRVJfQ0hFQ0tFUihtZW1iZXIpIFwKQEAgLTE0Nyw3ICsxNTksNiBAQCBz
dHJ1Y3QgTWV0aG9kVGFibGUgewogICAgIEpTQ2FzdGluZ0hlbHBlcnM6OkluaGVyaXRzVHJhaXRz
PENsYXNzTmFtZT46OnR5cGVSYW5nZSwgXAogICAgIHsgXAogICAgICAgICAmQ2xhc3NOYW1lOjpk
ZXN0cm95LCBcCi0gICAgICAgICZDbGFzc05hbWU6OnZpc2l0Q2hpbGRyZW4sIFwKICAgICAgICAg
JkNsYXNzTmFtZTo6Z2V0Q2FsbERhdGEsIFwKICAgICAgICAgJkNsYXNzTmFtZTo6Z2V0Q29uc3Ry
dWN0RGF0YSwgXAogICAgICAgICAmQ2xhc3NOYW1lOjpwdXQsIFwKQEAgLTE3Myw2ICsxODQsOSBA
QCBzdHJ1Y3QgTWV0aG9kVGFibGUgewogICAgICAgICAmQ2xhc3NOYW1lOjpkdW1wVG9TdHJlYW0s
IFwKICAgICAgICAgJkNsYXNzTmFtZTo6YW5hbHl6ZUhlYXAsIFwKICAgICAgICAgJkNsYXNzTmFt
ZTo6ZXN0aW1hdGVkU2l6ZSwgXAorICAgICAgICAmQ2xhc3NOYW1lOjp2aXNpdENoaWxkcmVuLCBc
CisgICAgICAgICZDbGFzc05hbWU6OnZpc2l0Q2hpbGRyZW4sIFwKKyAgICAgICAgJkNsYXNzTmFt
ZTo6dmlzaXRPdXRwdXRDb25zdHJhaW50cywgXAogICAgICAgICAmQ2xhc3NOYW1lOjp2aXNpdE91
dHB1dENvbnN0cmFpbnRzLCBcCiAgICAgfSwgXAogICAgIENsYXNzTmFtZTo6VHlwZWRBcnJheVN0
b3JhZ2VUeXBlLCBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DbG9uZWRB
cmd1bWVudHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0Nsb25lZEFyZ3VtZW50cy5jcHAJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0Nsb25lZEFyZ3VtZW50cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0y
NjcsNyArMjY3LDggQEAgdm9pZCBDbG9uZWRBcmd1bWVudHM6Om1hdGVyaWFsaXplU3BlY2lhbAog
ICAgICAgICBtYXRlcmlhbGl6ZVNwZWNpYWxzKGdsb2JhbE9iamVjdCk7CiB9CiAKLXZvaWQgQ2xv
bmVkQXJndW1lbnRzOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZp
c2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBDbG9uZWRBcmd1bWVudHM6
OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAg
ICBDbG9uZWRBcmd1bWVudHMqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8Q2xvbmVkQXJndW1lbnRzKj4o
Y2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkp
OwpAQCAtMjc1LDUgKzI3Niw3IEBAIHZvaWQgQ2xvbmVkQXJndW1lbnRzOjp2aXNpdENoaWxkcmVu
KEpTQ2UKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2NhbGxlZSk7CiB9CiAKK0RF
RklORV9WSVNJVF9DSElMRFJFTihDbG9uZWRBcmd1bWVudHMpOworCiB9IC8vIG5hbWVzcGFjZSBK
U0MKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xvbmVkQXJndW1lbnRz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xvbmVkQXJn
dW1lbnRzLmgJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0Nsb25lZEFyZ3VtZW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjIsNyArNjIsNyBAQCBw
dWJsaWM6CiAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiwgSlNHbG9i
YWxPYmplY3QqLCBKU1ZhbHVlIHByb3RvdHlwZSk7CiAgICAgc3RhdGljIFN0cnVjdHVyZSogY3Jl
YXRlU2xvd1B1dFN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBwcm90b3R5
cGUpOwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRv
ciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBERUNMQVJFX0lORk87CiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGlyZWN0QXJndW1l
bnRzLmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvRGlyZWN0QXJndW1lbnRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTkwLDcgKzkwLDggQEAg
c2l6ZV90IERpcmVjdEFyZ3VtZW50czo6ZXN0aW1hdGVkU2l6ZShKUwogICAgIHJldHVybiBCYXNl
Ojplc3RpbWF0ZWRTaXplKGNlbGwsIHZtKSArIG1hcHBlZEFyZ3VtZW50c1NpemUgKyBtb2RpZmll
ZEFyZ3VtZW50c1NpemU7CiB9CiAKLXZvaWQgRGlyZWN0QXJndW1lbnRzOjp2aXNpdENoaWxkcmVu
KEpTQ2VsbCogdGhpc0NlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5h
bWUgVmlzaXRvcj4KK3ZvaWQgRGlyZWN0QXJndW1lbnRzOjp2aXNpdENoaWxkcmVuSW1wbChKU0Nl
bGwqIHRoaXNDZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIERpcmVjdEFyZ3VtZW50cyog
dGhpc09iamVjdCA9IHN0YXRpY19jYXN0PERpcmVjdEFyZ3VtZW50cyo+KHRoaXNDZWxsKTsKICAg
ICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC0xMDQs
NiArMTA1LDggQEAgdm9pZCBEaXJlY3RBcmd1bWVudHM6OnZpc2l0Q2hpbGRyZW4oSlNDZQogICAg
IEdlbmVyaWNBcmd1bWVudHM8RGlyZWN0QXJndW1lbnRzPjo6dmlzaXRDaGlsZHJlbih0aGlzQ2Vs
bCwgdmlzaXRvcik7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihEaXJlY3RBcmd1bWVudHMp
OworCiBTdHJ1Y3R1cmUqIERpcmVjdEFyZ3VtZW50czo6Y3JlYXRlU3RydWN0dXJlKFZNJiB2bSwg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCiB7CiAgICAg
cmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlw
ZUluZm8oRGlyZWN0QXJndW1lbnRzVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGlyZWN0QXJndW1lbnRzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGlyZWN0QXJndW1lbnRzLmgJ
KHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVj
dEFyZ3VtZW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxNS0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjUsNyArNjUsNyBAQCBwdWJsaWM6CiAg
ICAgc3RhdGljIERpcmVjdEFyZ3VtZW50cyogY3JlYXRlQnlDb3B5aW5nKEpTR2xvYmFsT2JqZWN0
KiwgQ2FsbEZyYW1lKik7CiAKICAgICBzdGF0aWMgc2l6ZV90IGVzdGltYXRlZFNpemUoSlNDZWxs
KiwgVk0mKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNp
dG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKICAgICAKICAgICB1aW50MzJfdCBp
bnRlcm5hbExlbmd0aCgpIGNvbnN0CiAgICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvRXZhbEV4ZWN1dGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0V2YWxFeGVjdXRhYmxlLmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXZhbEV4ZWN1dGFibGUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCwg
MjAxMywgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAwOS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTAsNyArNTAsOCBAQCBhdXRvIEV2YWxFeGVj
dXRhYmxlOjplbnN1cmVUZW1wbGF0ZU9iamVjCiAgICAgcmV0dXJuIGVuc3VyZVRlbXBsYXRlT2Jq
ZWN0TWFwSW1wbChtX3RlbXBsYXRlT2JqZWN0TWFwKTsKIH0KIAotdm9pZCBFdmFsRXhlY3V0YWJs
ZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVt
cGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgRXZhbEV4ZWN1dGFibGU6OnZpc2l0Q2hpbGRy
ZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBFdmFsRXhlY3V0
YWJsZSogdGhpc09iamVjdCA9IGpzQ2FzdDxFdmFsRXhlY3V0YWJsZSo+KGNlbGwpOwogICAgIEFT
U0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTY0LDQgKzY1
LDYgQEAgdm9pZCBFdmFsRXhlY3V0YWJsZTo6dmlzaXRDaGlsZHJlbihKU0NlbAogICAgIH0KIH0K
IAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEV2YWxFeGVjdXRhYmxlKTsKKwogfSAvLyBuYW1lc3Bh
Y2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FdmFsRXhlY3V0YWJs
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V2YWxFeGVj
dXRhYmxlLmgJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0V2YWxFeGVjdXRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03OSw3ICs3OSw3IEBAIHBy
b3RlY3RlZDoKICAgICB1c2luZyBCYXNlOjpmaW5pc2hDcmVhdGlvbjsKICAgICBFdmFsRXhlY3V0
YWJsZShKU0dsb2JhbE9iamVjdCosIGNvbnN0IFNvdXJjZUNvZGUmLCBib29sIGluU3RyaWN0Q29u
dGV4dCwgRGVyaXZlZENvbnRleHRUeXBlLCBib29sIGlzQXJyb3dGdW5jdGlvbkNvbnRleHQsIGJv
b2wgaXNJbnNpZGVPcmRpbmFyeUZ1bmN0aW9uLCBFdmFsQ29udGV4dFR5cGUsIE5lZWRzQ2xhc3NG
aWVsZEluaXRpYWxpemVyLCBQcml2YXRlQnJhbmRSZXF1aXJlbWVudCk7CiAKLSAgICBzdGF0aWMg
dm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9W
SVNJVF9DSElMRFJFTjsKIAogICAgIHVuc2lnbmVkIG1fbmVlZHNDbGFzc0ZpZWxkSW5pdGlhbGl6
ZXIgOiAxOwogICAgIHVuc2lnbmVkIG1fcHJpdmF0ZUJyYW5kUmVxdWlyZW1lbnQgOiAxOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9uLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGNlcHRpb24uY3BwCShyZXZpc2lv
biAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGNlcHRpb24uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
NS0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtNTMsNyArNTMsOCBAQCBTdHJ1Y3R1cmUqIEV4Y2VwdGlvbjo6
Y3JlYXRlU3RydWN0dXJlKFZNCiAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9i
YWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oQ2VsbFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwg
aW5mbygpKTsKIH0KIAotdm9pZCBFeGNlcHRpb246OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxs
LCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lk
IEV4Y2VwdGlvbjo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNp
dG9yKQogewogICAgIEV4Y2VwdGlvbiogdGhpc09iamVjdCA9IGpzQ2FzdDxFeGNlcHRpb24qPihj
ZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7
CkBAIC02NCw2ICs2NSw4IEBAIHZvaWQgRXhjZXB0aW9uOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCog
Y2UKICAgICAgICAgZnJhbWUudmlzaXRDaGlsZHJlbih2aXNpdG9yKTsKIH0KIAorREVGSU5FX1ZJ
U0lUX0NISUxEUkVOKEV4Y2VwdGlvbik7CisKIEV4Y2VwdGlvbjo6RXhjZXB0aW9uKFZNJiB2bSkK
ICAgICA6IEJhc2Uodm0sIHZtLmV4Y2VwdGlvblN0cnVjdHVyZS5nZXQoKSkKIHsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbi5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbi5oCShyZXZpc2lvbiAyNzI5MDIp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGNlcHRpb24uaAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxOSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTUxLDcgKzUxLDcgQEAgcHVibGljOgogCiAgICAgc3RhdGljIFN0cnVjdHVyZSog
Y3JlYXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlIHByb3RvdHlwZSk7
CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7
CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIERFQ0xBUkVfRVhQT1JUX0lORk87
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJs
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rp
b25FeGVjdXRhYmxlLmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvRnVuY3Rpb25FeGVjdXRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxOCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAyMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY3
LDcgKzY3LDggQEAgRnVuY3Rpb25Db2RlQmxvY2sqIEZ1bmN0aW9uRXhlY3V0YWJsZTo6YgogICAg
IHJldHVybiBzdGF0aWNfY2FzdDxGdW5jdGlvbkNvZGVCbG9jayo+KGVkZ2UtPmNvZGVCbG9jaygp
LT5iYXNlbGluZUFsdGVybmF0aXZlKCkpOwogfQogCi12b2lkIEZ1bmN0aW9uRXhlY3V0YWJsZTo6
dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxh
dGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgRnVuY3Rpb25FeGVjdXRhYmxlOjp2aXNpdENoaWxk
cmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgRnVuY3Rpb25F
eGVjdXRhYmxlKiB0aGlzT2JqZWN0ID0ganNDYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGNlbGwp
OwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAg
LTg2LDYgKzg3LDggQEAgdm9pZCBGdW5jdGlvbkV4ZWN1dGFibGU6OnZpc2l0Q2hpbGRyZW4oSgog
ICAgIH0KIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEZ1bmN0aW9uRXhlY3V0YWJsZSk7CisK
IEZ1bmN0aW9uRXhlY3V0YWJsZSogRnVuY3Rpb25FeGVjdXRhYmxlOjpmcm9tR2xvYmFsQ29kZSgK
ICAgICBjb25zdCBJZGVudGlmaWVyJiBuYW1lLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIAogICAgIEpTT2JqZWN0KiYgZXhjZXB0aW9uLCBp
bnQgb3ZlcnJpZGVMaW5lTnVtYmVyLCBPcHRpb25hbDxpbnQ+IGZ1bmN0aW9uQ29uc3RydWN0b3JQ
YXJhbWV0ZXJzRW5kUG9zaXRpb24pCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9GdW5jdGlvbkV4ZWN1dGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9GdW5jdGlvbkV4ZWN1dGFibGUuaAkocmV2aXNpb24gMjcyOTAyKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25FeGVjdXRhYmxlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTkgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0xNjYsNyArMTY2LDcgQEAgcHVibGljOgogICAgIEpTUGFyc2VyU2NyaXB0TW9k
ZSBzY3JpcHRNb2RlKCkgY29uc3QgeyByZXR1cm4gbV91bmxpbmtlZEV4ZWN1dGFibGUtPnNjcmlw
dE1vZGUoKTsgfQogICAgIFNvdXJjZUNvZGUgY2xhc3NTb3VyY2UoKSBjb25zdCB7IHJldHVybiBt
X3VubGlua2VkRXhlY3V0YWJsZS0+Y2xhc3NTb3VyY2UoKTsgfQogCi0gICAgc3RhdGljIHZvaWQg
dmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRf
Q0hJTERSRU47CiAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90bykKICAgICB7CiAgICAg
ICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90bywgVHlw
ZUluZm8oRnVuY3Rpb25FeGVjdXRhYmxlVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25SYXJlRGF0YS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25SYXJl
RGF0YS5jcHAJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0Z1bmN0aW9uUmFyZURhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTEsNyArNTEsOCBA
QCBTdHJ1Y3R1cmUqIEZ1bmN0aW9uUmFyZURhdGE6OmNyZWF0ZVN0cnVjCiAgICAgcmV0dXJuIFN0
cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oQ2Vs
bFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKIH0KIAotdm9pZCBGdW5jdGlvblJhcmVE
YXRhOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0
ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBGdW5jdGlvblJhcmVEYXRhOjp2aXNpdENo
aWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgRnVuY3Rp
b25SYXJlRGF0YSogcmFyZURhdGEgPSBqc0Nhc3Q8RnVuY3Rpb25SYXJlRGF0YSo+KGNlbGwpOwog
ICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2VsbCwgaW5mbygpKTsKQEAgLTYzLDYgKzY0
LDggQEAgdm9pZCBGdW5jdGlvblJhcmVEYXRhOjp2aXNpdENoaWxkcmVuKEpTQwogICAgIHZpc2l0
b3IuYXBwZW5kKHJhcmVEYXRhLT5tX2V4ZWN1dGFibGUpOwogfQogCitERUZJTkVfVklTSVRfQ0hJ
TERSRU4oRnVuY3Rpb25SYXJlRGF0YSk7CisKIEZ1bmN0aW9uUmFyZURhdGE6OkZ1bmN0aW9uUmFy
ZURhdGEoVk0mIHZtLCBFeGVjdXRhYmxlQmFzZSogZXhlY3V0YWJsZSkKICAgICA6IEJhc2Uodm0s
IHZtLmZ1bmN0aW9uUmFyZURhdGFTdHJ1Y3R1cmUuZ2V0KCkpCiAgICAgLCBtX29iamVjdEFsbG9j
YXRpb25Qcm9maWxlKCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0
aW9uUmFyZURhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9GdW5jdGlvblJhcmVEYXRhLmgJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uUmFyZURhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxOSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY1
LDcgKzY1LDcgQEAgcHVibGljOgogCiAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0
dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlIHByb3RvdHlwZSk7CiAKLSAgICBzdGF0
aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFS
RV9WSVNJVF9DSElMRFJFTjsKIAogICAgIERFQ0xBUkVfSU5GTzsKIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50cy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNBcmd1bWVudHMuaAkocmV2aXNpb24g
MjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxNS0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDQsNyArNDQsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgewog
ICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0
b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogICAgIHN0YXRpYyBib29sIGdldE93
blByb3BlcnR5U2xvdChKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBQ
cm9wZXJ0eVNsb3QmKTsKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4
KEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIFByb3Bl
cnR5U2xvdCYpOwogICAgIHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3Qq
LCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZUFycmF5JiwgRG9udEVudW1Qcm9wZXJ0aWVz
TW9kZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljQXJndW1l
bnRzSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0dlbmVyaWNBcmd1bWVudHNJbmxpbmVzLmgJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNBcmd1bWVudHNJbmxpbmVzLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjAgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0zMSw3ICszMSw4IEBACiBuYW1lc3BhY2UgSlNDIHsKIAogdGVtcGxhdGU8dHlw
ZW5hbWUgVHlwZT4KLXZvaWQgR2VuZXJpY0FyZ3VtZW50czxUeXBlPjo6dmlzaXRDaGlsZHJlbihK
U0NlbGwqIHRoaXNDZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1l
IFZpc2l0b3I+Cit2b2lkIEdlbmVyaWNBcmd1bWVudHM8VHlwZT46OnZpc2l0Q2hpbGRyZW5JbXBs
KEpTQ2VsbCogdGhpc0NlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgVHlwZSogdGhpc09i
amVjdCA9IHN0YXRpY19jYXN0PFR5cGUqPih0aGlzQ2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVD
VF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNDEsNiArNDIsOCBAQCB2b2lkIEdl
bmVyaWNBcmd1bWVudHM8VHlwZT46OnZpc2l0Q2hpbGRyCiAgICAgICAgIHZpc2l0b3IubWFya0F1
eGlsaWFyeSh0aGlzT2JqZWN0LT5tX21vZGlmaWVkQXJndW1lbnRzRGVzY3JpcHRvci5nZXRVbnNh
ZmUoKSk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTl9XSVRIX01PRElGSUVSKHRlbXBsYXRl
PHR5cGVuYW1lIFR5cGU+LCBHZW5lcmljQXJndW1lbnRzPFR5cGU+KTsKKwogdGVtcGxhdGU8dHlw
ZW5hbWUgVHlwZT4KIGJvb2wgR2VuZXJpY0FyZ3VtZW50czxUeXBlPjo6Z2V0T3duUHJvcGVydHlT
bG90KEpTT2JqZWN0KiBvYmplY3QsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFByb3Bl
cnR5TmFtZSBpZGVudCwgUHJvcGVydHlTbG90JiBzbG90KQogewpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvR2V0dGVyU2V0dGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9HZXR0ZXJTZXR0ZXIuY3BwCShyZXZpc2lvbiAyNzI5MDIp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZXR0ZXJTZXR0ZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAw
MiBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQogICogIENvcHlyaWdodCAoQykgMjAwMSBQ
ZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQotICogIENvcHlyaWdodCAoQykgMjAwNC0yMDE3IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDQtMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpA
QCAtMzMsNyArMzMsOCBAQCBTVEFUSUNfQVNTRVJUX0lTX1RSSVZJQUxMWV9ERVNUUlVDVElCTEUo
CiAKIGNvbnN0IENsYXNzSW5mbyBHZXR0ZXJTZXR0ZXI6OnNfaW5mbyA9IHsgIkdldHRlclNldHRl
ciIsIG51bGxwdHIsIG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoR2V0dGVy
U2V0dGVyKSB9OwogCi12b2lkIEdldHRlclNldHRlcjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNl
bGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3Zv
aWQgR2V0dGVyU2V0dGVyOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3Im
IHZpc2l0b3IpCiB7CiAgICAgR2V0dGVyU2V0dGVyKiB0aGlzT2JqZWN0ID0ganNDYXN0PEdldHRl
clNldHRlcio+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVj
dCwgaW5mbygpKTsKQEAgLTQzLDYgKzQ0LDggQEAgdm9pZCBHZXR0ZXJTZXR0ZXI6OnZpc2l0Q2hp
bGRyZW4oSlNDZWxsKgogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fc2V0dGVyKTsK
IH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEdldHRlclNldHRlcik7CisKIEpTVmFsdWUgY2Fs
bEdldHRlcihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIGJhc2UsIEpTVmFs
dWUgZ2V0dGVyU2V0dGVyKQogewogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dldHRlclNldHRlci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dldHRlclNldHRlci5oCShyZXZp
c2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZXR0ZXJTZXR0
ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChD
KSAxOTk5LTIwMDEgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKICAqICBDb3B5cmlnaHQg
KEMpIDIwMDEgUGV0ZXIgS2VsbHkgKHBta0Bwb3N0LmNvbSkKLSAqICBDb3B5cmlnaHQgKEMpIDIw
MDMtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChD
KSAyMDAzLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKQEAgLTgyLDcgKzgyLDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gY3JlYXRl
KHZtLCBnbG9iYWxPYmplY3QsIGdldHRlck9iamVjdCwgc2V0dGVyT2JqZWN0KTsKICAgICB9CiAK
LSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7Cisg
ICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIEpTT2JqZWN0KiBnZXR0ZXIoKSBjb25z
dCB7IHJldHVybiBtX2dldHRlci5nZXQoKTsgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9IYXNoTWFwSW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSGFzaE1hcEltcGwuY3BwCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9IYXNoTWFwSW1wbC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MzAsNiArMzAsOSBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAorREVGSU5FX1ZJU0lUX0NISUxEUkVO
X1dJVEhfTU9ESUZJRVIodGVtcGxhdGU8PiwgSGFzaE1hcEJ1Y2tldDxIYXNoTWFwQnVja2V0RGF0
YUtleT4pOworREVGSU5FX1ZJU0lUX0NISUxEUkVOX1dJVEhfTU9ESUZJRVIodGVtcGxhdGU8Piwg
SGFzaE1hcEJ1Y2tldDxIYXNoTWFwQnVja2V0RGF0YUtleVZhbHVlPik7CisKIHRlbXBsYXRlPD4K
IGNvbnN0IENsYXNzSW5mbyBIYXNoTWFwQnVja2V0PEhhc2hNYXBCdWNrZXREYXRhS2V5Pjo6c19p
bmZvID0KICAgICB7ICJIYXNoTWFwQnVja2V0IiwgbnVsbHB0ciwgbnVsbHB0ciwgbnVsbHB0ciwg
Q1JFQVRFX01FVEhPRF9UQUJMRShIYXNoTWFwQnVja2V0PEhhc2hNYXBCdWNrZXREYXRhS2V5Pikg
fTsKQEAgLTM4LDggKzQxLDkgQEAgdGVtcGxhdGU8PgogY29uc3QgQ2xhc3NJbmZvIEhhc2hNYXBC
dWNrZXQ8SGFzaE1hcEJ1Y2tldERhdGFLZXlWYWx1ZT46OnNfaW5mbyA9CiAgICAgeyAiSGFzaE1h
cEJ1Y2tldCIsIG51bGxwdHIsIG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUo
SGFzaE1hcEJ1Y2tldDxIYXNoTWFwQnVja2V0RGF0YUtleVZhbHVlPikgfTsKIAotdGVtcGxhdGUg
PHR5cGVuYW1lIERhdGE+Ci12b2lkIEhhc2hNYXBCdWNrZXQ8RGF0YT46OnZpc2l0Q2hpbGRyZW4o
SlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIERh
dGE+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBIYXNoTWFwQnVja2V0PERhdGE+
Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAg
ICAgSGFzaE1hcEJ1Y2tldCogdGhpc09iamVjdCA9IGpzQ2FzdDxIYXNoTWFwQnVja2V0Kj4oY2Vs
bCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpA
QCAtNTIsOCArNTYsOSBAQCB2b2lkIEhhc2hNYXBCdWNrZXQ8RGF0YT46OnZpc2l0Q2hpbGRyZW4o
CiAgICAgdmlzaXRvci5hcHBlbmRWYWx1ZXMoYml0d2lzZV9jYXN0PFdyaXRlQmFycmllcjxVbmtu
b3duPio+KCZ0aGlzT2JqZWN0LT5tX2RhdGEpLCBzaXplb2YoRGF0YSkgLyBzaXplb2YoV3JpdGVC
YXJyaWVyPFVua25vd24+KSk7CiB9CiAKLXRlbXBsYXRlIDx0eXBlbmFtZSBIYXNoTWFwQnVja2V0
Pgotdm9pZCBIYXNoTWFwSW1wbDxIYXNoTWFwQnVja2V0Pjo6dmlzaXRDaGlsZHJlbihKU0NlbGwq
IGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgSGFzaE1hcEJ1
Y2tldD4KK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEhhc2hNYXBJbXBsPEhhc2hN
YXBCdWNrZXQ+Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0
b3IpCiB7CiAgICAgSGFzaE1hcEltcGwqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SGFzaE1hcEltcGwq
PihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8o
KSk7CkBAIC02Niw2ICs3MSw4IEBAIHZvaWQgSGFzaE1hcEltcGw8SGFzaE1hcEJ1Y2tldD46OnZp
c2l0Q2gKICAgICAgICAgdmlzaXRvci5tYXJrQXV4aWxpYXJ5KGJ1ZmZlcik7CiB9CiAKK0RFRklO
RV9WSVNJVF9DSElMRFJFTl9XSVRIX01PRElGSUVSKHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hNYXBC
dWNrZXQ+LCBIYXNoTWFwSW1wbDxIYXNoTWFwQnVja2V0Pik7CisKIHRlbXBsYXRlIDx0eXBlbmFt
ZSBIYXNoTWFwQnVja2V0Pgogc2l6ZV90IEhhc2hNYXBJbXBsPEhhc2hNYXBCdWNrZXQ+Ojplc3Rp
bWF0ZWRTaXplKEpTQ2VsbCogY2VsbCwgVk0mIHZtKQogewpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSGFzaE1hcEltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9IYXNoTWFwSW1wbC5oCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9IYXNoTWFwSW1wbC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE4IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIxIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtMTQ4LDcgKzE0OCw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fZGF0YS52YWx1ZS5n
ZXQoKTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNs
b3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIEFMV0FZU19J
TkxJTkUgSGFzaE1hcEJ1Y2tldCogbmV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fbmV4dC5nZXQoKTsg
fQogICAgIEFMV0FZU19JTkxJTkUgSGFzaE1hcEJ1Y2tldCogcHJldigpIGNvbnN0IHsgcmV0dXJu
IG1fcHJldi5nZXQoKTsgfQpAQCAtMzY0LDcgKzM2NCw3IEBAIGNsYXNzIEhhc2hNYXBJbXBsIDog
cHVibGljIEpTTm9uRmluYWxPYmoKIHB1YmxpYzoKICAgICB1c2luZyBCdWNrZXRUeXBlID0gSGFz
aE1hcEJ1Y2tldFR5cGU7CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCos
IFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIHN0YXRp
YyBzaXplX3QgZXN0aW1hdGVkU2l6ZShKU0NlbGwqLCBWTSYpOwogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9JbnRlcm5hbEZ1bmN0aW9uLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRlcm5hbEZ1bmN0aW9uLmNwcAkocmV2aXNp
b24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50ZXJuYWxGdW5j
dGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSw3IEBACiAvKgogICogIENvcHlyaWdo
dCAoQykgMTk5OS0yMDAyIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCiAgKiAgQ29weXJp
Z2h0IChDKSAyMDAxIFBldGVyIEtlbGx5IChwbWtAcG9zdC5jb20pCi0gKiAgQ29weXJpZ2h0IChD
KSAyMDA0LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdo
dCAoQykgMjAwNC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiAg
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCkBAIC02NCw3ICs2NCw4IEBAIHZvaWQgSW50ZXJuYWxGdW5jdGlvbjo6Zmlu
aXNoQ3JlYXRpb24oVk0KICAgICB9CiB9CiAKLXZvaWQgSW50ZXJuYWxGdW5jdGlvbjo6dmlzaXRD
aGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlw
ZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSW50ZXJuYWxGdW5jdGlvbjo6dmlzaXRDaGlsZHJlbkltcGwo
SlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEludGVybmFsRnVuY3Rpb24q
IHRoaXNPYmplY3QgPSBqc0Nhc3Q8SW50ZXJuYWxGdW5jdGlvbio+KGNlbGwpOwogICAgIEFTU0VS
VF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTczLDYgKzc0LDgg
QEAgdm9pZCBJbnRlcm5hbEZ1bmN0aW9uOjp2aXNpdENoaWxkcmVuKEpTQwogICAgIHZpc2l0b3Iu
YXBwZW5kKHRoaXNPYmplY3QtPm1fb3JpZ2luYWxOYW1lKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NI
SUxEUkVOX1dJVEhfTU9ESUZJRVIoSlNfRVhQT1JUX1BSSVZBVEUsIEludGVybmFsRnVuY3Rpb24p
OworCiBjb25zdCBTdHJpbmcmIEludGVybmFsRnVuY3Rpb246Om5hbWUoKQogewogICAgIGNvbnN0
IFN0cmluZyYgbmFtZSA9IG1fb3JpZ2luYWxOYW1lLT50cnlHZXRWYWx1ZSgpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50ZXJuYWxGdW5jdGlvbi5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGVybmFsRnVuY3Rpb24uaAkocmV2
aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50ZXJuYWxG
dW5jdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqICBDb3B5cmln
aHQgKEMpIDE5OTktMjAwMCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQotICogIENvcHly
aWdodCAoQykgMjAwMy0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBD
b3B5cmlnaHQgKEMpIDIwMDMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KiAgQ29weXJpZ2h0IChDKSAyMDA3IENhbWVyb24gWndhcmljaCAoY3d6d2FyaWNoQHV3YXRlcmxv
by5jYSkKICAqICBDb3B5cmlnaHQgKEMpIDIwMDcgTWFrcyBPcmxvdmljaAogICoKQEAgLTQ2LDcg
KzQ2LDcgQEAgcHVibGljOgogCiAgICAgREVDTEFSRV9FWFBPUlRfSU5GTzsKIAotICAgIEpTX0VY
UE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0
b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOX1dJVEhfTU9ESUZJRVIoSlNfRVhQT1JU
X1BSSVZBVEUpOwogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgY29uc3QgU3RyaW5nJiBuYW1lKCk7
CiAgICAgY29uc3QgU3RyaW5nIGRpc3BsYXlOYW1lKFZNJik7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9JbnRsQ29sbGF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxDb2xsYXRvci5jcHAJKHJldmlzaW9uIDI3MjkwMikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxDb2xsYXRvci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNyArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDE1IEFuZHkg
VmFuV2Fnb25lciAoYW5keUB2YW53YWdvbmVyLmZhbWlseSkKICAqIENvcHlyaWdodCAoQykgMjAx
NSBTdWtvbHNhayBTYWtzaHV3b25nIChzdWtvbHNha0BnbWFpbC5jb20pCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTYtMjAyMCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY1LDcgKzY1LDggQEAgdm9pZCBJbnRsQ29sbGF0
b3I6OmZpbmlzaENyZWF0aW9uKFZNJiB2bQogICAgIEFTU0VSVChpbmhlcml0cyh2bSwgaW5mbygp
KSk7CiB9CiAKLXZvaWQgSW50bENvbGxhdG9yOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwg
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBJ
bnRsQ29sbGF0b3I6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlz
aXRvcikKIHsKICAgICBJbnRsQ29sbGF0b3IqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SW50bENvbGxh
dG9yKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBp
bmZvKCkpOwpAQCAtNzUsNiArNzYsOCBAQCB2b2lkIEludGxDb2xsYXRvcjo6dmlzaXRDaGlsZHJl
bihKU0NlbGwqCiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9ib3VuZENvbXBhcmUp
OwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSW50bENvbGxhdG9yKTsKKwogVmVjdG9yPFN0
cmluZz4gSW50bENvbGxhdG9yOjpzb3J0TG9jYWxlRGF0YShjb25zdCBTdHJpbmcmIGxvY2FsZSwg
UmVsZXZhbnRFeHRlbnNpb25LZXkga2V5KQogewogICAgIC8vIDkuMSBJbnRlcm5hbCBzbG90cyBv
ZiBTZXJ2aWNlIENvbnN0cnVjdG9ycyAmIDEwLjIuMyBJbnRlcm5hbCBzbG90cyAoRUNNQS00MDIg
Mi4wKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bENvbGxhdG9yLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bENvbGxhdG9y
LmgJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lu
dGxDb2xsYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHly
aWdodCAoQykgMjAxNSBBbmR5IFZhbldhZ29uZXIgKGFuZHlAdmFud2Fnb25lci5mYW1pbHkpCisg
KiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC04MCw3ICs4MSw3IEBAIHB1YmxpYzoKIHBy
aXZhdGU6CiAgICAgSW50bENvbGxhdG9yKFZNJiwgU3RydWN0dXJlKik7CiAgICAgdm9pZCBmaW5p
c2hDcmVhdGlvbihWTSYpOwotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwg
U2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgYm9vbCB1
cGRhdGVDYW5Eb0FTQ0lJVUNBRFVDRVRDb21wYXJpc29uKCkgY29uc3Q7CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxEYXRlVGltZUZvcm1hdC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERhdGVUaW1lRm9ybWF0LmNw
cAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50
bERhdGVUaW1lRm9ybWF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAg
KiBDb3B5cmlnaHQgKEMpIDIwMTUgQW5keSBWYW5XYWdvbmVyIChhbmR5QHZhbndhZ29uZXIuZmFt
aWx5KQotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC05MCw3ICs5MCw4
IEBAIHZvaWQgSW50bERhdGVUaW1lRm9ybWF0OjpmaW5pc2hDcmVhdGlvbigKICAgICBBU1NFUlQo
aW5oZXJpdHModm0sIGluZm8oKSkpOwogfQogCi12b2lkIEludGxEYXRlVGltZUZvcm1hdDo6dmlz
aXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8
dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSW50bERhdGVUaW1lRm9ybWF0Ojp2aXNpdENoaWxkcmVu
SW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSW50bERhdGVUaW1l
Rm9ybWF0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEludGxEYXRlVGltZUZvcm1hdCo+KGNlbGwpOwog
ICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTEw
MCw2ICsxMDEsOCBAQCB2b2lkIEludGxEYXRlVGltZUZvcm1hdDo6dmlzaXRDaGlsZHJlbihKCiAg
ICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9ib3VuZEZvcm1hdCk7CiB9CiAKK0RFRklO
RV9WSVNJVF9DSElMRFJFTihJbnRsRGF0ZVRpbWVGb3JtYXQpOworCiB2b2lkIEludGxEYXRlVGlt
ZUZvcm1hdDo6c2V0Qm91bmRGb3JtYXQoVk0mIHZtLCBKU0JvdW5kRnVuY3Rpb24qIGZvcm1hdCkK
IHsKICAgICBtX2JvdW5kRm9ybWF0LnNldCh2bSwgdGhpcywgZm9ybWF0KTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxEYXRlVGltZUZvcm1hdC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxEYXRlVGltZUZvcm1hdC5oCShy
ZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsRGF0
ZVRpbWVGb3JtYXQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5
cmlnaHQgKEMpIDIwMTUgQW5keSBWYW5XYWdvbmVyIChhbmR5QHZhbndhZ29uZXIuZmFtaWx5KQor
ICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODUsNyArODYsNyBAQCBwdWJsaWM6CiBw
cml2YXRlOgogICAgIEludGxEYXRlVGltZUZvcm1hdChWTSYsIFN0cnVjdHVyZSopOwogICAgIHZv
aWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpT
Q2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAg
IHN0YXRpYyBWZWN0b3I8U3RyaW5nPiBsb2NhbGVEYXRhKGNvbnN0IFN0cmluZyYsIFJlbGV2YW50
RXh0ZW5zaW9uS2V5KTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50
bExvY2FsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SW50bExvY2FsZS5jcHAJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0ludGxMb2NhbGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAog
LyoKICAqIENvcHlyaWdodCAoQykgMjAyMCBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQg
SW5jLgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTgsNyArNTksOCBAQCB2b2lk
IEludGxMb2NhbGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKICAgICBBU1NFUlQoaW5oZXJpdHMo
dm0sIGluZm8oKSkpOwogfQogCi12b2lkIEludGxMb2NhbGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+
Cit2b2lkIEludGxMb2NhbGU6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRv
ciYgdmlzaXRvcikKIHsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEludGxMb2NhbGUq
PihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8o
KSk7CkBAIC02Niw2ICs2OCw4IEBAIHZvaWQgSW50bExvY2FsZTo6dmlzaXRDaGlsZHJlbihKU0Nl
bGwqIGMKICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwogfQog
CitERUZJTkVfVklTSVRfQ0hJTERSRU4oSW50bExvY2FsZSk7CisKIGNsYXNzIExvY2FsZUlEQnVp
bGRlciBmaW5hbCB7CiBwdWJsaWM6CiAgICAgYm9vbCBpbml0aWFsaXplKGNvbnN0IFN0cmluZyYp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bExvY2FsZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxMb2NhbGUuaAkocmV2
aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bExvY2Fs
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykg
MjAyMCBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgorICogQ29weXJpZ2h0IChD
KSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtNzEsNyArNzIsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIElu
dGxMb2NhbGUoVk0mLCBTdHJ1Y3R1cmUqKTsKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7
Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwor
ICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBTdHJpbmcga2V5d29yZFZhbHVlKEFT
Q0lJTGl0ZXJhbCwgYm9vbCBpc0Jvb2xlYW4gPSBmYWxzZSkgY29uc3Q7CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxOdW1iZXJGb3JtYXQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxOdW1iZXJGb3JtYXQuY3BwCShy
ZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTnVt
YmVyRm9ybWF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBDb3B5
cmlnaHQgKEMpIDIwMTUgQW5keSBWYW5XYWdvbmVyIChhbmR5QHZhbndhZ29uZXIuZmFtaWx5KQog
ICogQ29weXJpZ2h0IChDKSAyMDE2IFN1a29sc2FrIFNha3NodXdvbmcgKHN1a29sc2FrQGdtYWls
LmNvbSkKLSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAyMCBTb255IEludGVyYWN0aXZlIEVudGVy
dGFpbm1lbnQgSW5jLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtNzMsNyArNzMsOCBAQCB2b2lkIElu
dGxOdW1iZXJGb3JtYXQ6OmZpbmlzaENyZWF0aW9uKFZNCiAgICAgQVNTRVJUKGluaGVyaXRzKHZt
LCBpbmZvKCkpKTsKIH0KIAotdm9pZCBJbnRsTnVtYmVyRm9ybWF0Ojp2aXNpdENoaWxkcmVuKEpT
Q2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNp
dG9yPgordm9pZCBJbnRsTnVtYmVyRm9ybWF0Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNl
bGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSW50bE51bWJlckZvcm1hdCogdGhpc09iamVj
dCA9IGpzQ2FzdDxJbnRsTnVtYmVyRm9ybWF0Kj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVD
VF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtODMsNiArODQsOCBAQCB2b2lkIElu
dGxOdW1iZXJGb3JtYXQ6OnZpc2l0Q2hpbGRyZW4oSlNDCiAgICAgdmlzaXRvci5hcHBlbmQodGhp
c09iamVjdC0+bV9ib3VuZEZvcm1hdCk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihJbnRs
TnVtYmVyRm9ybWF0KTsKKwogVmVjdG9yPFN0cmluZz4gSW50bE51bWJlckZvcm1hdDo6bG9jYWxl
RGF0YShjb25zdCBTdHJpbmcmIGxvY2FsZSwgUmVsZXZhbnRFeHRlbnNpb25LZXkga2V5KQogewog
ICAgIC8vIDkuMSBJbnRlcm5hbCBzbG90cyBvZiBTZXJ2aWNlIENvbnN0cnVjdG9ycyAmIDExLjIu
MyBJbnRlcm5hbCBzbG90cyAoRUNNQS00MDIgMi4wKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSW50bE51bWJlckZvcm1hdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0ludGxOdW1iZXJGb3JtYXQuaAkocmV2aXNpb24gMjcyOTAyKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE51bWJlckZvcm1hdC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDYgKzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxNSBBbmR5
IFZhbldhZ29uZXIgKGFuZHlAdmFud2Fnb25lci5mYW1pbHkpCiAgKiBDb3B5cmlnaHQgKEMpIDIw
MjAgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAqIENvcHlyaWdodCAoQykg
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTk2LDcgKzk3LDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBJbnRs
TnVtYmVyRm9ybWF0KFZNJiwgU3RydWN0dXJlKik7CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihW
TSYpOwotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3Im
KTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgc3RhdGljIFZlY3RvcjxTdHJp
bmc+IGxvY2FsZURhdGEoY29uc3QgU3RyaW5nJiwgUmVsZXZhbnRFeHRlbnNpb25LZXkpOwogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsUGx1cmFsUnVsZXMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxQbHVyYWxSdWxl
cy5jcHAJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0ludGxQbHVyYWxSdWxlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgog
ICogQ29weXJpZ2h0IChDKSAyMDE4IEFuZHkgVmFuV2Fnb25lciAoYW5keUB2YW53YWdvbmVyLmZh
bWlseSkKLSAqIENvcHlyaWdodCAoQykgMjAxOS0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjEsNyArNjEs
OCBAQCB2b2lkIEludGxQbHVyYWxSdWxlczo6ZmluaXNoQ3JlYXRpb24oVk0mCiAgICAgQVNTRVJU
KGluaGVyaXRzKHZtLCBpbmZvKCkpKTsKIH0KIAotdm9pZCBJbnRsUGx1cmFsUnVsZXM6OnZpc2l0
Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5
cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEludGxQbHVyYWxSdWxlczo6dmlzaXRDaGlsZHJlbkltcGwo
SlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEludGxQbHVyYWxSdWxlcyog
dGhpc09iamVjdCA9IGpzQ2FzdDxJbnRsUGx1cmFsUnVsZXMqPihjZWxsKTsKICAgICBBU1NFUlRf
R0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC02OSw2ICs3MCw4IEBA
IHZvaWQgSW50bFBsdXJhbFJ1bGVzOjp2aXNpdENoaWxkcmVuKEpTQ2UKICAgICBCYXNlOjp2aXNp
dENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERS
RU4oSW50bFBsdXJhbFJ1bGVzKTsKKwogVmVjdG9yPFN0cmluZz4gSW50bFBsdXJhbFJ1bGVzOjps
b2NhbGVEYXRhKGNvbnN0IFN0cmluZyYsIFJlbGV2YW50RXh0ZW5zaW9uS2V5KQogewogICAgIHJl
dHVybiB7IH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsUGx1cmFs
UnVsZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRs
UGx1cmFsUnVsZXMuaAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSW50bFBsdXJhbFJ1bGVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBA
CiAvKgogICogQ29weXJpZ2h0IChDKSAyMDE4IEFuZHkgVmFuV2Fnb25lciAoYW5keUB2YW53YWdv
bmVyLmZhbWlseSkKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY2LDcgKzY3LDcg
QEAgcHVibGljOgogcHJpdmF0ZToKICAgICBJbnRsUGx1cmFsUnVsZXMoVk0mLCBTdHJ1Y3R1cmUq
KTsKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRD
aGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERS
RU47CiAKICAgICBzdGF0aWMgVmVjdG9yPFN0cmluZz4gbG9jYWxlRGF0YShjb25zdCBTdHJpbmcm
LCBSZWxldmFudEV4dGVuc2lvbktleSk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0ludGxSZWxhdGl2ZVRpbWVGb3JtYXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxSZWxhdGl2ZVRpbWVGb3JtYXQuY3BwCShyZXZpc2lv
biAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsUmVsYXRpdmVU
aW1lRm9ybWF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5
cmlnaHQgKEMpIDIwMjAgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAqIENv
cHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTYyLDcgKzYzLDggQEAgdm9pZCBJbnRsUmVsYXRp
dmVUaW1lRm9ybWF0OjpmaW5pc2hDcmVhdAogICAgIEFTU0VSVChpbmhlcml0cyh2bSwgaW5mbygp
KSk7CiB9CiAKLXZvaWQgSW50bFJlbGF0aXZlVGltZUZvcm1hdDo6dmlzaXRDaGlsZHJlbihKU0Nl
bGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRv
cj4KK3ZvaWQgSW50bFJlbGF0aXZlVGltZUZvcm1hdDo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxs
KiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nh
c3Q8SW50bFJlbGF0aXZlVGltZUZvcm1hdCo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1Rf
SU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTcwLDYgKzcyLDggQEAgdm9pZCBJbnRs
UmVsYXRpdmVUaW1lRm9ybWF0Ojp2aXNpdENoaWxkcgogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4o
dGhpc09iamVjdCwgdmlzaXRvcik7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihJbnRsUmVs
YXRpdmVUaW1lRm9ybWF0KTsKKwogVmVjdG9yPFN0cmluZz4gSW50bFJlbGF0aXZlVGltZUZvcm1h
dDo6bG9jYWxlRGF0YShjb25zdCBTdHJpbmcmIGxvY2FsZSwgUmVsZXZhbnRFeHRlbnNpb25LZXkg
a2V5KQogewogICAgIEFTU0VSVF9VTlVTRUQoa2V5LCBrZXkgPT0gUmVsZXZhbnRFeHRlbnNpb25L
ZXk6Ok51KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxSZWxhdGl2
ZVRpbWVGb3JtYXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9JbnRsUmVsYXRpdmVUaW1lRm9ybWF0LmgJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxSZWxhdGl2ZVRpbWVGb3JtYXQuaAkod29ya2luZyBj
b3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMjAgU29ueSBJbnRl
cmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KLSAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAtMjAyMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTY0LDcgKzY0LDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBJbnRsUmVsYXRpdmVU
aW1lRm9ybWF0KFZNJiwgU3RydWN0dXJlKik7CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYp
OwotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsK
KyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgc3RhdGljIFZlY3RvcjxTdHJpbmc+
IGxvY2FsZURhdGEoY29uc3QgU3RyaW5nJiwgUmVsZXZhbnRFeHRlbnNpb25LZXkpOwogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsU2VnbWVudEl0ZXJhdG9yLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsU2VnbWVudEl0
ZXJhdG9yLmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSW50bFNlZ21lbnRJdGVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2
IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY0LDEzICs2NSwxNiBAQCB2
b2lkIEludGxTZWdtZW50SXRlcmF0b3I6OmZpbmlzaENyZWF0aW9uCiAgICAgbV9zdHJpbmcuc2V0
KHZtLCB0aGlzLCBzdHJpbmcpOwogfQogCi12b2lkIEludGxTZWdtZW50SXRlcmF0b3I6OnZpc2l0
Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5
cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEludGxTZWdtZW50SXRlcmF0b3I6OnZpc2l0Q2hpbGRyZW5J
bXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBhdXRvKiB0aGlzT2Jq
ZWN0ID0ganNDYXN0PEludGxTZWdtZW50SXRlcmF0b3IqPihjZWxsKTsKICAgICBCYXNlOjp2aXNp
dENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNP
YmplY3QtPm1fc3RyaW5nKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEludGxTZWdtZW50
SXRlcmF0b3IpOworCiBKU09iamVjdCogSW50bFNlZ21lbnRJdGVyYXRvcjo6bmV4dChKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0KQogewogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0o
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxTZWdtZW50SXRlcmF0
b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsU2Vn
bWVudEl0ZXJhdG9yLmgJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0ludGxTZWdtZW50SXRlcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTMsNyArNTQsNyBAQCBw
dWJsaWM6CiAKICAgICBKU09iamVjdCogbmV4dChKU0dsb2JhbE9iamVjdCopOwogCi0gICAgc3Rh
dGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xB
UkVfVklTSVRfQ0hJTERSRU47CiAKIHByaXZhdGU6CiAgICAgSW50bFNlZ21lbnRJdGVyYXRvcihW
TSYsIFN0cnVjdHVyZSosIHN0ZDo6dW5pcXVlX3B0cjxVQnJlYWtJdGVyYXRvciwgVUJyZWFrSXRl
cmF0b3JEZWxldGVyPiYmLCBCb3g8VmVjdG9yPFVDaGFyPj4mJiwgSW50bFNlZ21lbnRlcjo6R3Jh
bnVsYXJpdHkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFNlZ21l
bnRzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRs
U2VnbWVudHMuY3BwCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9JbnRsU2VnbWVudHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAog
LyoKICAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMDksMTEgKzExMCwxNCBAQCBKU09i
amVjdCogSW50bFNlZ21lbnRzOjpjcmVhdGVTZWdtZW50SXRlCiAgICAgcmV0dXJuIEludGxTZWdt
ZW50SXRlcmF0b3I6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LT5zZWdtZW50SXRlcmF0b3JTdHJ1
Y3R1cmUoKSwgV1RGTW92ZShzZWdtZW50ZXIpLCBtX2J1ZmZlciwgbV9zdHJpbmcuZ2V0KCksIG1f
Z3JhbnVsYXJpdHkpOwogfQogCi12b2lkIEludGxTZWdtZW50czo6dmlzaXRDaGlsZHJlbihKU0Nl
bGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRv
cj4KK3ZvaWQgSW50bFNlZ21lbnRzOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZp
c2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxJbnRsU2Vn
bWVudHMqPihjZWxsKTsKICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0
b3IpOwogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fc3RyaW5nKTsKIH0KIAorREVG
SU5FX1ZJU0lUX0NISUxEUkVOKEludGxTZWdtZW50cyk7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFNlZ21lbnRzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFNlZ21lbnRzLmgJKHJl
dmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxTZWdt
ZW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAo
QykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC01NCw3ICs1NSw3IEBAIHB1YmxpYzoKICAgICBKU1ZhbHVlIGNvbnRh
aW5pbmcoSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlIGluZGV4VmFsdWUpOwogICAgIEpTT2JqZWN0
KiBjcmVhdGVTZWdtZW50SXRlcmF0b3IoSlNHbG9iYWxPYmplY3QqKTsKIAotICAgIHN0YXRpYyB2
b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJ
U0lUX0NISUxEUkVOOwogCiBwcml2YXRlOgogICAgIEludGxTZWdtZW50cyhWTSYsIFN0cnVjdHVy
ZSosIHN0ZDo6dW5pcXVlX3B0cjxVQnJlYWtJdGVyYXRvciwgVUJyZWFrSXRlcmF0b3JEZWxldGVy
PiYmLCBCb3g8VmVjdG9yPFVDaGFyPj4mJiwgSW50bFNlZ21lbnRlcjo6R3JhbnVsYXJpdHkpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZm
ZXJWaWV3LmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTU1LDcgKzE1
NSw4IEBAIHZvaWQgSlNBcnJheUJ1ZmZlclZpZXc6OmZpbmlzaENyZWF0aW9uKFYKICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCi12b2lkIEpTQXJyYXlCdWZmZXJWaWV3Ojp2
aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0
ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0FycmF5QnVmZmVyVmlldzo6dmlzaXRDaGlsZHJl
bkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTQXJyYXlCdWZm
ZXJWaWV3KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQXJyYXlCdWZmZXJWaWV3Kj4oY2VsbCk7CiAg
ICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtMTY5
LDYgKzE3MCw4IEBAIHZvaWQgSlNBcnJheUJ1ZmZlclZpZXc6OnZpc2l0Q2hpbGRyZW4oSlMKICAg
ICB9CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU0FycmF5QnVmZmVyVmlldyk7CisKIGJv
b2wgSlNBcnJheUJ1ZmZlclZpZXc6OnB1dCgKICAgICBKU0NlbGwqIGNlbGwsIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFs
dWUsCiAgICAgUHV0UHJvcGVydHlTbG90JiBzbG90KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5oCShyZXZpc2lvbiAyNzI5MDIp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
My0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMTcyLDcgKzE3Miw3IEBAIHByb3RlY3RlZDoKICAgICAKICAgICBz
dGF0aWMgYm9vbCBwdXQoSlNDZWxsKiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIEpT
VmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJl
bihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAg
ICAgCiBwdWJsaWM6CiAgICAgVHlwZWRBcnJheU1vZGUgbW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1f
bW9kZTsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUl0ZXJh
dG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Fy
cmF5SXRlcmF0b3IuY3BwCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0FycmF5SXRlcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY4LDExICs2OCwx
NCBAQCB2b2lkIEpTQXJyYXlJdGVyYXRvcjo6ZmluaXNoQ3JlYXRpb24oVk0mCiAgICAgICAgIEJh
c2U6OmludGVybmFsRmllbGQoaW5kZXgpLnNldCh2bSwgdGhpcywgdmFsdWVzW2luZGV4XSk7CiB9
CiAKLXZvaWQgSlNBcnJheUl0ZXJhdG9yOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xv
dFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0Fy
cmF5SXRlcmF0b3I6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlz
aXRvcikKIHsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQXJyYXlJdGVyYXRvcio+
KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygp
KTsKICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwogfQogCitE
RUZJTkVfVklTSVRfQ0hJTERSRU4oSlNBcnJheUl0ZXJhdG9yKTsKKwogfSAvLyBuYW1lc3BhY2Ug
SlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5SXRlcmF0b3Iu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5SXRl
cmF0b3IuaAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNBcnJheUl0ZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAyMC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNzgsNyArNzgsNyBAQCBwdWJsaWM6
CiAKICAgICBERUNMQVJFX0lORk87CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpT
Q2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogcHJp
dmF0ZToKICAgICBKU0FycmF5SXRlcmF0b3IoVk0mLCBTdHJ1Y3R1cmUqKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXN5bmNHZW5lcmF0b3IuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXN5bmNHZW5lcmF0b3IuY3BwCShy
ZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FzeW5j
R2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE5LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01OSwxMSArNTksMTQgQEAgdm9pZCBKU0FzeW5j
R2VuZXJhdG9yOjpmaW5pc2hDcmVhdGlvbihWTQogICAgICAgICBpbnRlcm5hbEZpZWxkKGluZGV4
KS5zZXQodm0sIHRoaXMsIHZhbHVlc1tpbmRleF0pOwogfQogCi12b2lkIEpTQXN5bmNHZW5lcmF0
b3I6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3Rl
bXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTQXN5bmNHZW5lcmF0b3I6OnZpc2l0Q2hp
bGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBhdXRvKiB0
aGlzT2JqZWN0ID0ganNDYXN0PEpTQXN5bmNHZW5lcmF0b3IqPihjZWxsKTsKICAgICBBU1NFUlRf
R0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAgICAgQmFzZTo6dmlzaXRD
aGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVO
KEpTQXN5bmNHZW5lcmF0b3IpOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXN5bmNHZW5lcmF0b3IuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FzeW5jR2VuZXJhdG9yLmgJKHJldmlzaW9u
IDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXN5bmNHZW5lcmF0
b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE5LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC05NSw3ICs5NSw3IEBAIHB1YmxpYzoKIAogICAgIERFQ0xBUkVf
RVhQT1JUX0lORk87CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNs
b3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogcHJpdmF0ZToKICAg
ICBKU0FzeW5jR2VuZXJhdG9yKFZNJiwgU3RydWN0dXJlKik7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0JpZ0ludC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNCaWdJbnQuY3BwCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JpZ0ludC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNiArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDE3IENhaW8gTGltYSA8dGljYWlv
bGltYUBnbWFpbC5jb20+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTY3LDcgKzY3LDggQEAgSlNCaWdJbnQ6OkpTQmlnSW50KFZNJiB2bSwgU3RydWN0dXJlKiBzdAog
ICAgICwgbV9kYXRhKHZtLCB0aGlzLCBkYXRhLCBsZW5ndGgpCiB7IH0KIAotdm9pZCBKU0JpZ0lu
dDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVt
cGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNCaWdJbnQ6OnZpc2l0Q2hpbGRyZW5JbXBs
KEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBhdXRvKiB0aGlzT2JqZWN0
ID0ganNDYXN0PEpTQmlnSW50Kj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklU
Uyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNzYsNiArNzcsOCBAQCB2b2lkIEpTQmlnSW50Ojp2
aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsCiAgICAgICAgIHZpc2l0b3IubWFya0F1eGlsaWFyeShk
YXRhKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTQmlnSW50KTsKKwogdm9pZCBKU0Jp
Z0ludDo6aW5pdGlhbGl6ZShJbml0aWFsaXphdGlvblR5cGUgaW5pdFR5cGUpCiB7CiAgICAgaWYg
KGluaXRUeXBlID09IEluaXRpYWxpemF0aW9uVHlwZTo6V2l0aFplcm8pCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JpZ0ludC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQmlnSW50LmgJKHJldmlzaW9uIDI3MjkwMikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQmlnSW50LmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsNiArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDE3IENhaW8gTGltYSA8dGljYWlv
bGltYUBnbWFpbC5jb20+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTUwLDcgKzUwLDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3Ry
dWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IFN0cnVjdHVyZUlzSW1tb3J0YWwg
fCBPdmVycmlkZXNUb1RoaXM7CiAgICAgZnJpZW5kIGNsYXNzIENhY2hlZEJpZ0ludDsKIAotICAg
IHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBE
RUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUs
IFN1YnNwYWNlQWNjZXNzPgogICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0m
IHZtKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCb3VuZEZ1bmN0aW9u
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JvdW5k
RnVuY3Rpb24uY3BwCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0JvdW5kRnVuY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjQ5
LDcgKzI0OSw4IEBAIHZvaWQgSlNCb3VuZEZ1bmN0aW9uOjpmaW5pc2hDcmVhdGlvbihWTSYKICAg
ICBBU1NFUlQoaW5oZXJpdHModm0sIGluZm8oKSkpOwogfQogCi12b2lkIEpTQm91bmRGdW5jdGlv
bjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVt
cGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNCb3VuZEZ1bmN0aW9uOjp2aXNpdENoaWxk
cmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNCb3VuZEZ1
bmN0aW9uKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQm91bmRGdW5jdGlvbio+KGNlbGwpOwogICAg
IEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTI2MSw0
ICsyNjIsNiBAQCB2b2lkIEpTQm91bmRGdW5jdGlvbjo6dmlzaXRDaGlsZHJlbihKU0NlCiAgICAg
dmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9uYW1lTWF5QmVOdWxsKTsKIH0KIAorREVGSU5F
X1ZJU0lUX0NISUxEUkVOKEpTQm91bmRGdW5jdGlvbik7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCb3VuZEZ1bmN0aW9uLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCb3VuZEZ1bmN0aW9u
LmgJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
Qm91bmRGdW5jdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMS0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODQsNyArODQsNyBAQCBwcml2YXRl
OgogICAgIEpTQm91bmRGdW5jdGlvbihWTSYsIE5hdGl2ZUV4ZWN1dGFibGUqLCBKU0dsb2JhbE9i
amVjdCosIFN0cnVjdHVyZSosIEpTT2JqZWN0KiB0YXJnZXRGdW5jdGlvbiwgSlNWYWx1ZSBib3Vu
ZFRoaXMsIEpTSW1tdXRhYmxlQnV0dGVyZmx5KiBib3VuZEFyZ3MsIEpTU3RyaW5nKiBuYW1lTWF5
QmVOdWxsLCBkb3VibGUgbGVuZ3RoKTsKIAogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsK
LSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7Cisg
ICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIFdyaXRlQmFycmllcjxKU09iamVjdD4g
bV90YXJnZXRGdW5jdGlvbjsKICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4gbV9ib3VuZFRoaXM7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NhbGxlZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDYWxsZWUuY3BwCShyZXZp
c2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NhbGxlZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDE0LCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTAsNyArNTAsOCBAQCB2b2lkIEpTQ2FsbGVlOjpmaW5p
c2hDcmVhdGlvbihWTSYgdm0pCiAgICAgQVNTRVJUKGluaGVyaXRzKHZtLCBpbmZvKCkpKTsKIH0K
IAotdm9pZCBKU0NhbGxlZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9y
JiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNDYWxsZWU6OnZp
c2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBK
U0NhbGxlZSogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0NhbGxlZSo+KGNlbGwpOwogICAgIEFTU0VS
VF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTU5LDQgKzYwLDYg
QEAgdm9pZCBKU0NhbGxlZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbAogICAgIHZpc2l0b3Iu
YXBwZW5kKHRoaXNPYmplY3QtPm1fc2NvcGUpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4o
SlNDYWxsZWUpOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTQ2FsbGVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNDYWxsZWUuaAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNDYWxsZWUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMDAsNyArMTAwLDcg
QEAgcHJvdGVjdGVkOgogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKICAgICB1c2luZyBC
YXNlOjpmaW5pc2hDcmVhdGlvbjsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlND
ZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiBwcml2
YXRlOgogICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAkocmV2aXNpb24gMjcyOTAyKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NyArMSw3IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAxIEhhcnJpIFBvcnRlbiAo
cG9ydGVuQGtkZS5vcmcpCiAgKiAgQ29weXJpZ2h0IChDKSAyMDAxIFBldGVyIEtlbGx5IChwbWtA
cG9zdC5jb20pCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwMy0yMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0zMiw2ICszMiw3IEBA
CiAjaW5jbHVkZSAiSlNMb2NrLmgiCiAjaW5jbHVkZSAiSlNUeXBlSW5mby5oIgogI2luY2x1ZGUg
IlNsb3RWaXNpdG9yLmgiCisjaW5jbHVkZSAiU2xvdFZpc2l0b3JNYWNyb3MuaCIKICNpbmNsdWRl
ICJTdWJzcGFjZUFjY2Vzcy5oIgogI2luY2x1ZGUgIlR5cGVkQXJyYXlUeXBlLmgiCiAjaW5jbHVk
ZSAiV3JpdGVCYXJyaWVyLmgiCkBAIC0xNjcsOCArMTY4LDggQEAgcHVibGljOgogICAgIHNpemVf
dCBlc3RpbWF0ZWRTaXplSW5CeXRlcyhWTSYpIGNvbnN0OwogICAgIEpTX0VYUE9SVF9QUklWQVRF
IHN0YXRpYyBzaXplX3QgZXN0aW1hdGVkU2l6ZShKU0NlbGwqLCBWTSYpOwogCi0gICAgc3RhdGlj
IHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwotICAgIHN0YXRpYyB2
b2lkIHZpc2l0T3V0cHV0Q29uc3RyYWludHMoSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBE
RUNMQVJFX1ZJU0lUX0NISUxEUkVOX1dJVEhfTU9ESUZJRVIoaW5saW5lKTsKKyAgICBERUNMQVJF
X1ZJU0lUX09VVFBVVF9DT05TVFJBSU5UU19XSVRIX01PRElGSUVSKGlubGluZSk7CiAKICAgICBK
U19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBhbmFseXplSGVhcChKU0NlbGwqLCBIZWFwQW5h
bHl6ZXImKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsSW5s
aW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2Vs
bElubGluZXMuaAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNDZWxsSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjUsNiArMjUsNyBAQAog
CiAjcHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgIkFic3RyYWN0U2xvdFZpc2l0b3JJbmxpbmVzLmgi
CiAjaW5jbHVkZSAiQWxsb2NhdG9yRm9yTW9kZS5oIgogI2luY2x1ZGUgIkFsbG9jYXRvcklubGlu
ZXMuaCIKICNpbmNsdWRlICJDb21wbGV0ZVN1YnNwYWNlSW5saW5lcy5oIgpAQCAtMTQxLDE1ICsx
NDIsMjEgQEAgQUxXQVlTX0lOTElORSBTdHJ1Y3R1cmUqIEpTQ2VsbDo6c3RydWN0dQogICAgIHJl
dHVybiB2bS5nZXRTdHJ1Y3R1cmUobV9zdHJ1Y3R1cmVJRCk7CiB9CiAKLWlubGluZSB2b2lkIEpT
Q2VsbDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQor
dGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNDZWxsOjp2aXNpdENoaWxkcmVuSW1w
bChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgdmlzaXRvci5hcHBlbmRV
bmJhcnJpZXJlZChjZWxsLT5zdHJ1Y3R1cmUodmlzaXRvci52bSgpKSk7CiB9CiAKLWlubGluZSB2
b2lkIEpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50cyhKU0NlbGwqLCBTbG90VmlzaXRvciYp
CitERUZJTkVfVklTSVRfQ0hJTERSRU5fV0lUSF9NT0RJRklFUihpbmxpbmUsIEpTQ2VsbCk7CisK
K3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+CitBTFdBWVNfSU5MSU5FIHZvaWQgSlNDZWxsOjp2
aXNpdE91dHB1dENvbnN0cmFpbnRzSW1wbChKU0NlbGwqLCBWaXNpdG9yJikKIHsKIH0KIAorREVG
SU5FX1ZJU0lUX09VVFBVVF9DT05TVFJBSU5UU19XSVRIX01PRElGSUVSKGlubGluZSwgSlNDZWxs
KTsKKwogQUxXQVlTX0lOTElORSBWTSYgQ2FsbEZyYW1lOjpkZXByZWNhdGVkVk0oKSBjb25zdAog
ewogICAgIEpTQ2VsbCogY2FsbGVlID0gdGhpcy0+Y2FsbGVlKCkuYXNDZWxsKCk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ZpbmFsaXphdGlvblJlZ2lzdHJ5LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ZpbmFsaXphdGlv
blJlZ2lzdHJ5LmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNGaW5hbGl6YXRpb25SZWdpc3RyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlLCBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAtMjAyMSBBcHBsZSwgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNiw2
ICsyNiw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSlNGaW5hbGl6YXRpb25S
ZWdpc3RyeS5oIgogCisjaW5jbHVkZSAiQWJzdHJhY3RTbG90VmlzaXRvci5oIgogI2luY2x1ZGUg
IkRlZmVycmVkV29ya1RpbWVyLmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUg
IkpTSW50ZXJuYWxGaWVsZE9iamVjdEltcGxJbmxpbmVzLmgiCkBAIC02MCw3ICs2MSw4IEBAIHZv
aWQgSlNGaW5hbGl6YXRpb25SZWdpc3RyeTo6ZmluaXNoQ3JlYXQKICAgICBnbG9iYWxPYmplY3Qt
Pmdsb2JhbE9iamVjdE1ldGhvZFRhYmxlKCktPmN1cnJlbnRTY3JpcHRFeGVjdXRpb25Pd25lcihn
bG9iYWxPYmplY3QpOwogfQogCi12b2lkIEpTRmluYWxpemF0aW9uUmVnaXN0cnk6OnZpc2l0Q2hp
bGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVu
YW1lIFZpc2l0b3I+Cit2b2lkIEpTRmluYWxpemF0aW9uUmVnaXN0cnk6OnZpc2l0Q2hpbGRyZW5J
bXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBCYXNlOjp2aXNpdENo
aWxkcmVuKGNlbGwsIHZpc2l0b3IpOwogCkBAIC04MCwxMyArODIsMTUgQEAgdm9pZCBKU0ZpbmFs
aXphdGlvblJlZ2lzdHJ5Ojp2aXNpdENoaWxkcgogICAgIGZvciAoYXV0byYgaG9sZGluZ3MgOiB0
aGlzT2JqZWN0LT5tX25vVW5yZWdpc3RyYXRpb25EZWFkKQogICAgICAgICB2aXNpdG9yLmFwcGVu
ZChob2xkaW5ncyk7CiAKLSAgICBzaXplX3QgdG90YWxCdWZmZXJTaXplc0luQnl0ZXMgPSB0aGlz
T2JqZWN0LT5tX2RlYWRSZWdpc3RyYXRpb25zLmNhcGFjaXR5KCkgKiBzaXplb2YoZGVjbHR5cGUo
dGhpc09iamVjdC0+bV9kZWFkUmVnaXN0cmF0aW9ucyk6OktleVZhbHVlUGFpclR5cGUpOwotICAg
IHRvdGFsQnVmZmVyU2l6ZXNJbkJ5dGVzICs9IHRoaXNPYmplY3QtPm1fbGl2ZVJlZ2lzdHJhdGlv
bnMuY2FwYWNpdHkoKSAqIHNpemVvZihkZWNsdHlwZSh0aGlzT2JqZWN0LT5tX2RlYWRSZWdpc3Ry
YXRpb25zKTo6S2V5VmFsdWVQYWlyVHlwZSk7CisgICAgc2l6ZV90IHRvdGFsQnVmZmVyU2l6ZXNJ
bkJ5dGVzID0gdGhpc09iamVjdC0+bV9kZWFkUmVnaXN0cmF0aW9ucy5jYXBhY2l0eSgpICogc2l6
ZW9mKHR5cGVuYW1lIGRlY2x0eXBlKHRoaXNPYmplY3QtPm1fZGVhZFJlZ2lzdHJhdGlvbnMpOjpL
ZXlWYWx1ZVBhaXJUeXBlKTsKKyAgICB0b3RhbEJ1ZmZlclNpemVzSW5CeXRlcyArPSB0aGlzT2Jq
ZWN0LT5tX2xpdmVSZWdpc3RyYXRpb25zLmNhcGFjaXR5KCkgKiBzaXplb2YodHlwZW5hbWUgZGVj
bHR5cGUodGhpc09iamVjdC0+bV9kZWFkUmVnaXN0cmF0aW9ucyk6OktleVZhbHVlUGFpclR5cGUp
OwogICAgIHRvdGFsQnVmZmVyU2l6ZXNJbkJ5dGVzICs9IHRoaXNPYmplY3QtPm1fbm9VbnJlZ2lz
dHJhdGlvbkxpdmUuY2FwYWNpdHkoKSAqIHNpemVvZihkZWNsdHlwZSh0aGlzT2JqZWN0LT5tX25v
VW5yZWdpc3RyYXRpb25MaXZlLnRha2VMYXN0KCkpKTsKICAgICB0b3RhbEJ1ZmZlclNpemVzSW5C
eXRlcyArPSB0aGlzT2JqZWN0LT5tX25vVW5yZWdpc3RyYXRpb25EZWFkLmNhcGFjaXR5KCkgKiBz
aXplb2YoZGVjbHR5cGUodGhpc09iamVjdC0+bV9ub1VucmVnaXN0cmF0aW9uTGl2ZS50YWtlTGFz
dCgpKSk7CiAgICAgdmlzaXRvci52bSgpLmhlYXAucmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKHRv
dGFsQnVmZmVyU2l6ZXNJbkJ5dGVzKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTRmlu
YWxpemF0aW9uUmVnaXN0cnkpOworCiB2b2lkIEpTRmluYWxpemF0aW9uUmVnaXN0cnk6OmRlc3Ry
b3koSlNDZWxsKiB0YWJsZSkKIHsKICAgICBzdGF0aWNfY2FzdDxKU0ZpbmFsaXphdGlvblJlZ2lz
dHJ5Kj4odGFibGUpLT5+SlNGaW5hbGl6YXRpb25SZWdpc3RyeSgpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGaW5hbGl6YXRpb25SZWdpc3RyeS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRmluYWxpemF0aW9uUmVnaXN0cnku
aAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNG
aW5hbGl6YXRpb25SZWdpc3RyeS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDIwLTIwMjEgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNzAsNyArNzAsNyBAQCBwdWJs
aWM6CiAgICAgREVDTEFSRV9FWFBPUlRfSU5GTzsKIAogICAgIHZvaWQgZmluYWxpemVVbmNvbmRp
dGlvbmFsbHkoVk0mKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNs
b3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKICAgICBzdGF0aWMgdm9p
ZCBkZXN0cm95KEpTQ2VsbCopOwogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0Rlc3Ry
dWN0aW9uID0gdHJ1ZTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNG
dW5jdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNGdW5jdGlvbi5jcHAJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTRnVuY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBAQAog
LyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMiBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUu
b3JnKQogICogIENvcHlyaWdodCAoQykgMjAwMSBQZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQot
ICogIENvcHlyaWdodCAoQykgMjAwMy0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA3IENhbWVyb24gWndhcmljaCAoY3d6d2FyaWNo
QHV3YXRlcmxvby5jYSkKICAqICBDb3B5cmlnaHQgKEMpIDIwMDcgTWFrcyBPcmxvdmljaAogICog
IENvcHlyaWdodCAoQykgMjAxNSBDYW5vbiBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCkBAIC0y
NTIsNyArMjUyLDggQEAgY29uc3QgU291cmNlQ29kZSogSlNGdW5jdGlvbjo6c291cmNlQ29kZQog
ICAgIHJldHVybiAmanNFeGVjdXRhYmxlKCktPnNvdXJjZSgpOwogfQogICAgIAotdm9pZCBKU0Z1
bmN0aW9uOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3Ip
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0Z1bmN0aW9uOjp2aXNpdENoaWxk
cmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNGdW5jdGlv
biogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0Z1bmN0aW9uKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dD
X09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtMjYxLDYgKzI2Miw4IEBA
IHZvaWQgSlNGdW5jdGlvbjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGMKICAgICB2aXNpdG9yLmFw
cGVuZFVuYmFycmllcmVkKGJpdHdpc2VfY2FzdDxKU0NlbGwqPihiaXR3aXNlX2Nhc3Q8dWludHB0
cl90Pih0aGlzT2JqZWN0LT5tX2V4ZWN1dGFibGVPclJhcmVEYXRhKSAmIH5yYXJlRGF0YVRhZykp
OwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNGdW5jdGlvbik7CisKIENhbGxEYXRhIEpT
RnVuY3Rpb246OmdldENhbGxEYXRhKEpTQ2VsbCogY2VsbCkKIHsKICAgICAvLyBLZWVwIHRoaXMg
ZnVuY3Rpb24gT0sgZm9yIGludm9jYXRpb24gZnJvbSBjb25jdXJyZW50IGNvbXBpbGVycy4KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmgJKHJldmlzaW9u
IDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uaAko
d29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5
LTIwMDAgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKLSAqICBDb3B5cmlnaHQgKEMpIDIw
MDMtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChD
KSAyMDAzLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogIENvcHlyaWdo
dCAoQykgMjAwNyBDYW1lcm9uIFp3YXJpY2ggKGN3endhcmljaEB1d2F0ZXJsb28uY2EpCiAgKiAg
Q29weXJpZ2h0IChDKSAyMDA3IE1ha3MgT3Jsb3ZpY2gKICAqCkBAIC0xODAsNyArMTgwLDcgQEAg
cHJvdGVjdGVkOgogCiAgICAgc3RhdGljIGJvb2wgZGVsZXRlUHJvcGVydHkoSlNDZWxsKiwgSlNH
bG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIERlbGV0ZVByb3BlcnR5U2xvdCYpOwogCi0gICAg
c3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERF
Q0xBUkVfVklTSVRfQ0hJTERSRU47CiAKIHByaXZhdGU6CiAgICAgc3RhdGljIEpTRnVuY3Rpb24q
IGNyZWF0ZUltcGwoVk0mIHZtLCBGdW5jdGlvbkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUsIEpTU2Nv
cGUqIHNjb3BlLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTR2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0dlbmVyYXRvci5jcHAJKHJldmlzaW9uIDI3MjkwMikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE5LTIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC01OSwxMSArNTksMTQgQEAgdm9pZCBKU0dlbmVyYXRvcjo6ZmluaXNoQ3JlYXRpb24oVk0mIHZt
KQogICAgICAgICBpbnRlcm5hbEZpZWxkKGluZGV4KS5zZXQodm0sIHRoaXMsIHZhbHVlc1tpbmRl
eF0pOwogfQogCi12b2lkIEpTR2VuZXJhdG9yOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwg
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBK
U0dlbmVyYXRvcjo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNp
dG9yKQogewogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNHZW5lcmF0b3IqPihjZWxs
KTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAg
ICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKIH0KIAorREVGSU5F
X1ZJU0lUX0NISUxEUkVOKEpTR2VuZXJhdG9yKTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyYXRvci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJhdG9yLmgJKHJldmlzaW9u
IDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJhdG9yLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE5
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOS0y
MDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtOTQsNyArOTQsNyBAQCBwdWJsaWM6CiAKICAgICBERUNMQVJFX0VYUE9S
VF9JTkZPOwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90Vmlz
aXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKIHByaXZhdGU6CiAgICAgSlNH
ZW5lcmF0b3IoVk0mLCBTdHJ1Y3R1cmUqKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXcuaAkocmV2aXNpb24g
MjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRB
cnJheVZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMxMyw3ICszMTMsNyBAQCBwcml2YXRlOgog
ICAgIHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBKU0dsb2JhbE9i
amVjdCosIFByb3BlcnR5TmFtZUFycmF5JiwgRG9udEVudW1Qcm9wZXJ0aWVzTW9kZSk7CiAKICAg
ICBzdGF0aWMgc2l6ZV90IGVzdGltYXRlZFNpemUoSlNDZWxsKiwgVk0mKTsKLSAgICBzdGF0aWMg
dm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9W
SVNJVF9DSElMRFJFTjsKIAogICAgIC8vIFJldHVybnMgdHJ1ZSBpZiBzdWNjZXNzZnVsLCBhbmQg
ZmFsc2Ugb24gZXJyb3I7IGl0IHdpbGwgdGhyb3cgb24gZXJyb3IuCiAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgT3RoZXJBZGFwdG9yPgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmgJKHJl
dmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJp
Y1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTE3LDcgKzUxNyw4
IEBAIHNpemVfdCBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjoKIH0KIAogdGVtcGxh
dGU8dHlwZW5hbWUgQWRhcHRvcj4KLXZvaWQgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRv
cj46OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3Rl
bXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFk
YXB0b3I+Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3Ip
CiB7CiAgICAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNH
ZW5lcmljVHlwZWRBcnJheVZpZXcqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVS
SVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC01NTUsNCArNTU2LDYgQEAgdm9pZCBKU0dlbmVy
aWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6dgogICAgIH0KIH0KIAorREVGSU5FX1ZJU0lUX0NI
SUxEUkVOX1dJVEhfTU9ESUZJRVIodGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4sIEpTR2VuZXJp
Y1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+KTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCShy
ZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2Jh
bE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDA3LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDA3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICog
Q29weXJpZ2h0IChDKSAyMDA4IENhbWVyb24gWndhcmljaCAoY3d6d2FyaWNoQHV3YXRlcmxvby5j
YSkKICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTE4OTksNyArMTg5OSw4IEBAIHZvaWQgSlNHbG9iYWxP
YmplY3Q6OnJlc2V0UHJvdG90eXBlKFZNJiAKICAgICBzZXRHbG9iYWxUaGlzKHZtLCBKU1Byb3h5
OjpjcmVhdGUodm0sIEpTUHJveHk6OmNyZWF0ZVN0cnVjdHVyZSh2bSwgdGhpcywgcHJvdG90eXBl
LCBQdXJlRm9yd2FyZGluZ1Byb3h5VHlwZSksIHRoaXMpKTsKIH0KIAotdm9pZCBKU0dsb2JhbE9i
amVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQor
dGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNHbG9iYWxPYmplY3Q6OnZpc2l0Q2hp
bGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsgCiAgICAgSlNHbG9i
YWxPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNHbG9iYWxPYmplY3QqPihjZWxsKTsKICAg
ICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC0yMDY4
LDYgKzIwNjksOCBAQCB2b2lkIEpTR2xvYmFsT2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsCiAg
ICAgdGhpc09iamVjdC0+bV9yZWdFeHBHbG9iYWxEYXRhLnZpc2l0QWdncmVnYXRlKHZpc2l0b3Ip
OwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU5fV0lUSF9NT0RJRklFUihKU19FWFBPUlRfUFJJ
VkFURSwgSlNHbG9iYWxPYmplY3QpOworCiBDYWxsRnJhbWUqIEpTR2xvYmFsT2JqZWN0OjpkZXBy
ZWNhdGVkQ2FsbEZyYW1lRm9yRGVidWdnZXIoKQogewogICAgIHJldHVybiBDYWxsRnJhbWU6OmNy
ZWF0ZShtX2RlcHJlY2F0ZWRDYWxsRnJhbWVGb3JEZWJ1Z2dlcik7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgJKHJldmlzaW9uIDI3Mjkw
MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMjAwNyBF
cmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgotICogIENvcHlyaWdodCAoQykgMjAwNy0yMDIw
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDct
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YwpAQCAtNjE3LDcgKzYxNyw3IEBAIHB1YmxpYzoKICAgICBKU19FWFBPUlRfUFJJVkFURSB+SlNH
bG9iYWxPYmplY3QoKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBkZXN0cm95
KEpTQ2VsbCopOwogCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgdmlzaXRDaGls
ZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU5f
V0lUSF9NT0RJRklFUihKU19FWFBPUlRfUFJJVkFURSk7CiAKICAgICBKU19FWFBPUlRfUFJJVkFU
RSBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVj
dCosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUg
c3RhdGljIGJvb2wgcHV0KEpTQ2VsbCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBK
U1ZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTSW1tdXRhYmxlQnV0dGVyZmx5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0ltbXV0YWJsZUJ1dHRlcmZseS5jcHAJKHJldmlzaW9uIDI3
MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTSW1tdXRhYmxlQnV0dGVy
Zmx5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE4LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0zMiw3ICszMiw4IEBAIG5hbWVzcGFjZSBKU0MgewogCiBj
b25zdCBDbGFzc0luZm8gSlNJbW11dGFibGVCdXR0ZXJmbHk6OnNfaW5mbyA9IHsgIkltbXV0YWJs
ZSBCdXR0ZXJmbHkiLCBudWxscHRyLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RB
QkxFKEpTSW1tdXRhYmxlQnV0dGVyZmx5KSB9OwogCi12b2lkIEpTSW1tdXRhYmxlQnV0dGVyZmx5
Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1w
bGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0ltbXV0YWJsZUJ1dHRlcmZseTo6dmlzaXRD
aGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEFTU0VS
VF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2VsbCwgaW5mbygpKTsKICAgICBCYXNlOjp2aXNpdENoaWxk
cmVuKGNlbGwsIHZpc2l0b3IpOwpAQCAtNDUsNiArNDYsOCBAQCB2b2lkIEpTSW1tdXRhYmxlQnV0
dGVyZmx5Ojp2aXNpdENoaWxkcmVuCiAgICAgdmlzaXRvci5hcHBlbmRWYWx1ZXNIaWRkZW4oYnV0
dGVyZmx5LT5jb250aWd1b3VzKCkuZGF0YSgpLCBidXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpKTsK
IH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTSW1tdXRhYmxlQnV0dGVyZmx5KTsKKwogdm9p
ZCBKU0ltbXV0YWJsZUJ1dHRlcmZseTo6Y29weVRvQXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0Kiwg
SlNWYWx1ZSogZmlyc3RFbGVtZW50RGVzdCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5n
dGgpCiB7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ltbXV0YWJsZUJ1dHRlcmZseS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTSW1tdXRhYmxlQnV0
dGVyZmx5LmgJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTSW1tdXRhYmxlQnV0dGVyZmx5LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xNDUsNyArMTQ1
LDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4ganNEb3VibGVOdW1iZXIodmFsdWUpOwogICAg
IH0KIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3Im
KTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgdm9pZCBjb3B5VG9Bcmd1bWVu
dHMoSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlKiBmaXJzdEVsZW1lbnREZXN0LCB1bnNpZ25lZCBv
ZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTSW50ZXJuYWxGaWVsZE9iamVjdEltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ludGVybmFsRmllbGRPYmplY3RJbXBsLmgJKHJldmlz
aW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTSW50ZXJuYWxG
aWVsZE9iamVjdEltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE5LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02Niw3ICs2Niw3IEBAIHB1YmxpYzoKICAg
ICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mSW50ZXJuYWxGaWVsZCh1bnNpZ25lZCBpbmRleCkg
eyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTSW50ZXJuYWxGaWVsZE9iamVjdEltcGwsIG1faW50
ZXJuYWxGaWVsZHMpICsgaW5kZXggKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KTsgfQog
CiBwcm90ZWN0ZWQ6Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90
VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBKU0ludGVybmFs
RmllbGRPYmplY3RJbXBsKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiAgICAgICAgIDog
QmFzZSh2bSwgc3RydWN0dXJlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbElubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ludGVybmFsRmllbGRPYmplY3RJbXBsSW5saW5lcy5o
CShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0lu
dGVybmFsRmllbGRPYmplY3RJbXBsSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMwLDcgKzMwLDgg
QEAKIG5hbWVzcGFjZSBKU0MgewogCiB0ZW1wbGF0ZTx1bnNpZ25lZCBwYXNzZWROdW1iZXJPZklu
dGVybmFsRmllbGRzPgotdm9pZCBKU0ludGVybmFsRmllbGRPYmplY3RJbXBsPHBhc3NlZE51bWJl
ck9mSW50ZXJuYWxGaWVsZHM+Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0
b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0ludGVybmFs
RmllbGRPYmplY3RJbXBsPHBhc3NlZE51bWJlck9mSW50ZXJuYWxGaWVsZHM+Ojp2aXNpdENoaWxk
cmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0byogdGhp
c09iamVjdCA9IGpzQ2FzdDxKU0ludGVybmFsRmllbGRPYmplY3RJbXBsKj4oY2VsbCk7CiAgICAg
QVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtMzgsNCAr
MzksNiBAQCB2b2lkIEpTSW50ZXJuYWxGaWVsZE9iamVjdEltcGw8cGFzc2VkTnVtCiAgICAgdmlz
aXRvci5hcHBlbmRWYWx1ZXModGhpc09iamVjdC0+bV9pbnRlcm5hbEZpZWxkcywgbnVtYmVyT2ZJ
bnRlcm5hbEZpZWxkcyk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTl9XSVRIX01PRElGSUVS
KHRlbXBsYXRlPHVuc2lnbmVkIHBhc3NlZE51bWJlck9mSW50ZXJuYWxGaWVsZHM+LCBKU0ludGVy
bmFsRmllbGRPYmplY3RJbXBsPHBhc3NlZE51bWJlck9mSW50ZXJuYWxGaWVsZHM+KTsKKwogfSAv
LyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xl
eGljYWxFbnZpcm9ubWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNMZXhpY2FsRW52aXJvbm1lbnQuY3BwCShyZXZpc2lvbiAyNzI5MDIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xleGljYWxFbnZpcm9ubWVudC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LTIw
MTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4
LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0zNiw3ICszNiw4IEBAIG5hbWVzcGFjZSBKU0MgewogCiBjb25zdCBD
bGFzc0luZm8gSlNMZXhpY2FsRW52aXJvbm1lbnQ6OnNfaW5mbyA9IHsgIkpTTGV4aWNhbEVudmly
b25tZW50IiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9U
QUJMRShKU0xleGljYWxFbnZpcm9ubWVudCkgfTsKIAotdm9pZCBKU0xleGljYWxFbnZpcm9ubWVu
dDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVt
cGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNMZXhpY2FsRW52aXJvbm1lbnQ6OnZpc2l0
Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBhdXRv
KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTTGV4aWNhbEVudmlyb25tZW50Kj4oY2VsbCk7CiAgICAg
QVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNDQsNiAr
NDUsOCBAQCB2b2lkIEpTTGV4aWNhbEVudmlyb25tZW50Ojp2aXNpdENoaWxkcmVuCiAgICAgdmlz
aXRvci5hcHBlbmRWYWx1ZXNIaWRkZW4odGhpc09iamVjdC0+dmFyaWFibGVzKCksIHRoaXNPYmpl
Y3QtPnN5bWJvbFRhYmxlKCktPnNjb3BlU2l6ZSgpKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxE
UkVOKEpTTGV4aWNhbEVudmlyb25tZW50KTsKKwogdm9pZCBKU0xleGljYWxFbnZpcm9ubWVudDo6
YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQogewogICAg
IGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNMZXhpY2FsRW52aXJvbm1lbnQqPihjZWxsKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTGV4aWNhbEVudmlyb25tZW50
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMZXhpY2Fs
RW52aXJvbm1lbnQuaAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNMZXhpY2FsRW52aXJvbm1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEzNCw3
ICsxMzQsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBzdGF0aWMgdm9p
ZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJ
VF9DSElMRFJFTjsKICAgICBzdGF0aWMgdm9pZCBhbmFseXplSGVhcChKU0NlbGwqLCBIZWFwQW5h
bHl6ZXImKTsKIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTWFw
SXRlcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTTWFwSXRlcmF0b3IuY3BwCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU01hcEl0ZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNyBBcHBsZSwgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjEgQXBwbGUsIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTcs
MTMgKzU3LDE2IEBAIHZvaWQgSlNNYXBJdGVyYXRvcjo6ZmluaXNoQ3JlYXRpb24oVk0mIHYKICAg
ICAgICAgQmFzZTo6aW50ZXJuYWxGaWVsZChpbmRleCkuc2V0KHZtLCB0aGlzLCB2YWx1ZXNbaW5k
ZXhdKTsKIH0KIAotdm9pZCBKU01hcEl0ZXJhdG9yOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2Vs
bCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9p
ZCBKU01hcEl0ZXJhdG9yOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3Im
IHZpc2l0b3IpCiB7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU01hcEl0ZXJhdG9y
Kj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZv
KCkpOwogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CiB9CiAK
K0RFRklORV9WSVNJVF9DSElMRFJFTihKU01hcEl0ZXJhdG9yKTsKKwogSlNWYWx1ZSBKU01hcEl0
ZXJhdG9yOjpjcmVhdGVQYWlyKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUg
a2V5LCBKU1ZhbHVlIHZhbHVlKQogewogICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3M7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01hcEl0ZXJhdG9yLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNYXBJdGVyYXRvci5oCShy
ZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01hcEl0
ZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDEzLCAyMDE2IEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAyMSBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xNDIsNyArMTQyLDcgQEAgcHJpdmF0ZToK
ICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgSlNNYXAqLCBJ
dGVyYXRpb25LaW5kKTsKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7CiAgICAgSlNWYWx1
ZSBjcmVhdGVQYWlyKEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSwgSlNWYWx1ZSk7Ci0gICAgc3Rh
dGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xB
UkVfVklTSVRfQ0hJTERSRU47CiB9OwogU1RBVElDX0FTU0VSVF9JU19UUklWSUFMTFlfREVTVFJV
Q1RJQkxFKEpTTWFwSXRlcmF0b3IpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU01vZHVsZUVudmlyb25tZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU01vZHVsZUVudmlyb25tZW50LmNwcAkocmV2aXNpb24gMjcyOTAy
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVFbnZpcm9ubWVudC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDE1LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE1LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC02NSw3ICs2NSw4IEBAIHZvaWQgSlNNb2R1bGVFbnZpcm9u
bWVudDo6ZmluaXNoQ3JlYXRpb24KICAgICB0aGlzLT5tb2R1bGVSZWNvcmRTbG90KCkuc2V0KHZt
LCB0aGlzLCBtb2R1bGVSZWNvcmQpOwogfQogCi12b2lkIEpTTW9kdWxlRW52aXJvbm1lbnQ6OnZp
c2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRl
PHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTTW9kdWxlRW52aXJvbm1lbnQ6OnZpc2l0Q2hpbGRy
ZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU01vZHVsZUVu
dmlyb25tZW50KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTTW9kdWxlRW52aXJvbm1lbnQqPihjZWxs
KTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBA
IC03NCw2ICs3NSw4IEBAIHZvaWQgSlNNb2R1bGVFbnZpcm9ubWVudDo6dmlzaXRDaGlsZHJlbigK
ICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tb2R1bGVSZWNvcmRTbG90KCkpOwogfQog
CitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNNb2R1bGVFbnZpcm9ubWVudCk7CisKIGJvb2wgSlNN
b2R1bGVFbnZpcm9ubWVudDo6Z2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiBjZWxsLCBKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9w
ZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVFbnZpcm9ubWVudC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlRW52aXJv
bm1lbnQuaAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNNb2R1bGVFbnZpcm9ubWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODksNyArODksNyBA
QCBwcml2YXRlOgogICAgICAgICByZXR1cm4gKmJpdHdpc2VfY2FzdDxXcml0ZUJhcnJpZXJCYXNl
PEFic3RyYWN0TW9kdWxlUmVjb3JkPio+KGJpdHdpc2VfY2FzdDxjaGFyKj4odGhpcykgKyBvZmZz
ZXRPZk1vZHVsZVJlY29yZChzeW1ib2xUYWJsZSgpKSk7CiAgICAgfQogCi0gICAgc3RhdGljIHZv
aWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklT
SVRfQ0hJTERSRU47CiB9OwogCiBpbmxpbmUgSlNNb2R1bGVFbnZpcm9ubWVudDo6SlNNb2R1bGVF
bnZpcm9ubWVudChWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU1Njb3BlKiBjdXJyZW50
U2NvcGUsIFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTTW9kdWxlTmFtZXNwYWNlT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZU5hbWVzcGFjZU9iamVjdC5jcHAJ
KHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9k
dWxlTmFtZXNwYWNlT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTg1LDcgKzg1LDggQEAg
dm9pZCBKU01vZHVsZU5hbWVzcGFjZU9iamVjdDo6ZGVzdHJveShKUwogICAgIHRoaXNPYmplY3Qt
PkpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0Ojp+SlNNb2R1bGVOYW1lc3BhY2VPYmplY3QoKTsKIH0K
IAotdm9pZCBKU01vZHVsZU5hbWVzcGFjZU9iamVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNl
bGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3Zv
aWQgSlNNb2R1bGVOYW1lc3BhY2VPYmplY3Q6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2Vs
bCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU01vZHVsZU5hbWVzcGFjZU9iamVjdCogdGhp
c09iamVjdCA9IGpzQ2FzdDxKU01vZHVsZU5hbWVzcGFjZU9iamVjdCo+KGNlbGwpOwogICAgIEFT
U0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTk4LDYgKzk5
LDggQEAgdm9pZCBKU01vZHVsZU5hbWVzcGFjZU9iamVjdDo6dmlzaXRDaGlsZAogICAgIH0KIH0K
IAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0KTsKKwogc3Rh
dGljIEpTVmFsdWUgZ2V0VmFsdWUoSlNNb2R1bGVFbnZpcm9ubWVudCogZW52aXJvbm1lbnQsIFBy
b3BlcnR5TmFtZSBsb2NhbE5hbWUsIFNjb3BlT2Zmc2V0JiBzY29wZU9mZnNldCkKIHsKICAgICBT
eW1ib2xUYWJsZSogc3ltYm9sVGFibGUgPSBlbnZpcm9ubWVudC0+c3ltYm9sVGFibGUoKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlTmFtZXNwYWNlT2JqZWN0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVO
YW1lc3BhY2VPYmplY3QuaAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTcyLDcgKzcyLDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBKU19FWFBPUlRfUFJJVkFURSBK
U01vZHVsZU5hbWVzcGFjZU9iamVjdChWTSYsIFN0cnVjdHVyZSopOwogICAgIEpTX0VYUE9SVF9Q
UklWQVRFIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxPYmplY3QqLCBBYnN0cmFjdE1vZHVs
ZVJlY29yZCosIFZlY3RvcjxzdGQ6OnBhaXI8SWRlbnRpZmllciwgQWJzdHJhY3RNb2R1bGVSZWNv
cmQ6OlJlc29sdXRpb24+PiYmKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2Vs
bCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKICAgICBib29s
IGdldE93blByb3BlcnR5U2xvdENvbW1vbihKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSwg
UHJvcGVydHlTbG90Jik7CiAKICAgICBzdHJ1Y3QgRXhwb3J0RW50cnkgewpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVSZWNvcmQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlUmVjb3JkLmNwcAkocmV2aXNp
b24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVSZWNv
cmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxNS0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNzAsNyArNzAsOCBAQCB2b2lkIEpTTW9kdWxlUmVj
b3JkOjpmaW5pc2hDcmVhdGlvbihKU0dsCiAgICAgQVNTRVJUKGluaGVyaXRzKHZtLCBpbmZvKCkp
KTsKIH0KIAotdm9pZCBKU01vZHVsZVJlY29yZDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGws
IFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQg
SlNNb2R1bGVSZWNvcmQ6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYg
dmlzaXRvcikKIHsKICAgICBKU01vZHVsZVJlY29yZCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU01v
ZHVsZVJlY29yZCo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09i
amVjdCwgaW5mbygpKTsKQEAgLTc4LDYgKzc5LDggQEAgdm9pZCBKU01vZHVsZVJlY29yZDo6dmlz
aXRDaGlsZHJlbihKU0NlbAogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fbW9kdWxl
UHJvZ3JhbUV4ZWN1dGFibGUpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNNb2R1bGVS
ZWNvcmQpOworCiB2b2lkIEpTTW9kdWxlUmVjb3JkOjpsaW5rKEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIEpTVmFsdWUgc2NyaXB0RmV0Y2hlcikKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxP
YmplY3QtPnZtKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVs
ZVJlY29yZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
TW9kdWxlUmVjb3JkLmgJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTTW9kdWxlUmVjb3JkLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02Niw3ICs2Niw3
IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTR2xvYmFsT2JqZWN0Kiwg
Vk0mKTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0
b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgdm9pZCBpbnN0YW50aWF0
ZURlY2xhcmF0aW9ucyhKU0dsb2JhbE9iamVjdCosIE1vZHVsZVByb2dyYW1FeGVjdXRhYmxlKiwg
SlNWYWx1ZSBzY3JpcHRGZXRjaGVyKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNOYXRpdmVTdGRGdW5jdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNOYXRpdmVTdGRGdW5jdGlvbi5jcHAJKHJldmlzaW9uIDI3Mjkw
MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTmF0aXZlU3RkRnVuY3Rpb24u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDEsMTMgKzQxLDE2IEBAIEpTTmF0aXZlU3RkRnVuY3Rp
b246OkpTTmF0aXZlU3RkRnVuY3Rpb24KIHsKIH0KIAotdm9pZCBKU05hdGl2ZVN0ZEZ1bmN0aW9u
Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1w
bGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU05hdGl2ZVN0ZEZ1bmN0aW9uOjp2aXNpdENo
aWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNOYXRp
dmVTdGRGdW5jdGlvbiogdGhpc09iamVjdCA9IGpzQ2FzdDxKU05hdGl2ZVN0ZEZ1bmN0aW9uKj4o
Y2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkp
OwogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CiB9CiAKK0RF
RklORV9WSVNJVF9DSElMRFJFTihKU05hdGl2ZVN0ZEZ1bmN0aW9uKTsKKwogdm9pZCBKU05hdGl2
ZVN0ZEZ1bmN0aW9uOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIE5hdGl2ZUV4ZWN1dGFibGUqIGV4
ZWN1dGFibGUsIHVuc2lnbmVkIGxlbmd0aCwgY29uc3QgU3RyaW5nJiBuYW1lKQogewogICAgIEJh
c2U6OmZpbmlzaENyZWF0aW9uKHZtLCBleGVjdXRhYmxlLCBsZW5ndGgsIG5hbWUpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNOYXRpdmVTdGRGdW5jdGlvbi5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTmF0aXZlU3RkRnVuY3Rp
b24uaAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNOYXRpdmVTdGRGdW5jdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjUsNyArNjUsNyBAQCBw
dWJsaWM6CiBwcml2YXRlOgogICAgIEpTTmF0aXZlU3RkRnVuY3Rpb24oVk0mLCBOYXRpdmVFeGVj
dXRhYmxlKiwgSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqLCBOYXRpdmVTdGRGdW5jdGlvbiYm
KTsKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgTmF0aXZlRXhlY3V0YWJsZSosIHVuc2ln
bmVkIGxlbmd0aCwgY29uc3QgU3RyaW5nJiBuYW1lKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENo
aWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJF
TjsKIAogICAgIE5hdGl2ZVN0ZEZ1bmN0aW9uIG1fZnVuY3Rpb247CiB9OwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAkocmV2aXNpb24gMjcyOTAyKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMSBIYXJy
aSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQogICogIENvcHlyaWdodCAoQykgMjAwMSBQZXRlciBL
ZWxseSAocG1rQHBvc3QuY29tKQotICogIENvcHlyaWdodCAoQykgMjAwMy0yMDIwIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAyMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA3IEVyaWMg
U2VpZGVsIChlcmljQHdlYmtpdC5vcmcpCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTczLDcgKzczLDggQEAg
Y29uc3QgQ2xhc3NJbmZvIEpTT2JqZWN0OjpzX2luZm8gPSB7ICJPYgogCiBjb25zdCBDbGFzc0lu
Zm8gSlNGaW5hbE9iamVjdDo6c19pbmZvID0geyAiT2JqZWN0IiwgJkJhc2U6OnNfaW5mbywgbnVs
bHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU0ZpbmFsT2JqZWN0KSB9OwogCi1B
TFdBWVNfSU5MSU5FIHZvaWQgSlNPYmplY3Q6Om1hcmtBdXhpbGlhcnlBbmRWaXNpdE91dE9mTGlu
ZVByb3BlcnRpZXMoU2xvdFZpc2l0b3ImIHZpc2l0b3IsIEJ1dHRlcmZseSogYnV0dGVyZmx5LCBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgbWF4T2Zmc2V0KQordGVtcGxhdGU8
dHlwZW5hbWUgVmlzaXRvcj4KK0FMV0FZU19JTkxJTkUgdm9pZCBKU09iamVjdDo6bWFya0F1eGls
aWFyeUFuZFZpc2l0T3V0T2ZMaW5lUHJvcGVydGllcyhWaXNpdG9yJiB2aXNpdG9yLCBCdXR0ZXJm
bHkqIGJ1dHRlcmZseSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IG1heE9m
ZnNldCkKIHsKICAgICAvLyBXZSBjYWxsIHRoaXMgd2hlbiB3ZSBmb3VuZCBldmVyeXRoaW5nIHdp
dGhvdXQgcmFjZXMuCiAgICAgQVNTRVJUKHN0cnVjdHVyZSk7CkBAIC0xMDQsNyArMTA1LDggQEAg
QUxXQVlTX0lOTElORSB2b2lkIEpTT2JqZWN0OjptYXJrQXV4aWxpYQogICAgIHZpc2l0b3IuYXBw
ZW5kVmFsdWVzSGlkZGVuKGJ1dHRlcmZseS0+cHJvcGVydHlTdG9yYWdlKCkgLSBvdXRPZkxpbmVT
aXplLCBvdXRPZkxpbmVTaXplKTsKIH0KIAotQUxXQVlTX0lOTElORSBTdHJ1Y3R1cmUqIEpTT2Jq
ZWN0Ojp2aXNpdEJ1dHRlcmZseShTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVu
YW1lIFZpc2l0b3I+CitBTFdBWVNfSU5MSU5FIFN0cnVjdHVyZSogSlNPYmplY3Q6OnZpc2l0QnV0
dGVyZmx5KFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0
IHJhY2VSZWFzb24gPSAiSlNPYmplY3Q6OnZpc2l0QnV0dGVyZmx5IjsKICAgICBTdHJ1Y3R1cmUq
IHJlc3VsdCA9IHZpc2l0QnV0dGVyZmx5SW1wbCh2aXNpdG9yKTsKQEAgLTExMyw3ICsxMTUsOCBA
QCBBTFdBWVNfSU5MSU5FIFN0cnVjdHVyZSogSlNPYmplY3Q6OnZpc2l0CiAgICAgcmV0dXJuIHJl
c3VsdDsKIH0KIAotQUxXQVlTX0lOTElORSBTdHJ1Y3R1cmUqIEpTT2JqZWN0Ojp2aXNpdEJ1dHRl
cmZseUltcGwoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
PgorQUxXQVlTX0lOTElORSBTdHJ1Y3R1cmUqIEpTT2JqZWN0Ojp2aXNpdEJ1dHRlcmZseUltcGwo
VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBWTSYgdm0gPSB2aXNpdG9yLnZtKCk7CiAgICAgCkBA
IC00MTMsMjQgKzQxNiwyMCBAQCBzaXplX3QgSlNPYmplY3Q6OmVzdGltYXRlZFNpemUoSlNDZWxs
KiBjCiAgICAgcmV0dXJuIEJhc2U6OmVzdGltYXRlZFNpemUoY2VsbCwgdm0pICsgYnV0dGVyZmx5
T3V0T2ZMaW5lU2l6ZTsKIH0KIAotdm9pZCBKU09iamVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwq
IGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4K
K3ZvaWQgSlNPYmplY3Q6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYg
dmlzaXRvcikKIHsKICAgICBKU09iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU09iamVjdCo+
KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygp
KTsKLSNpZiBBU1NFUlRfRU5BQkxFRAotICAgIGJvb2wgd2FzQ2hlY2tpbmdGb3JEZWZhdWx0TWFy
a1Zpb2xhdGlvbiA9IHZpc2l0b3IubV9pc0NoZWNraW5nRm9yRGVmYXVsdE1hcmtWaW9sYXRpb247
Ci0gICAgdmlzaXRvci5tX2lzQ2hlY2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlvbiA9IGZhbHNl
OwotI2VuZGlmCi0gICAgCisgICAgdHlwZW5hbWUgVmlzaXRvcjo6RGVmYXVsdE1hcmtpbmdWaW9s
YXRpb25Bc3NlcnRpb25TY29wZSBhc3NlcnRpb25TY29wZSh2aXNpdG9yKTsKKwogICAgIEpTQ2Vs
bDo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKLSAgICAKKwogICAgIHRoaXNP
YmplY3QtPnZpc2l0QnV0dGVyZmx5KHZpc2l0b3IpOwotICAgIAotI2lmIEFTU0VSVF9FTkFCTEVE
Ci0gICAgdmlzaXRvci5tX2lzQ2hlY2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlvbiA9IHdhc0No
ZWNraW5nRm9yRGVmYXVsdE1hcmtWaW9sYXRpb247Ci0jZW5kaWYKIH0KIAorREVGSU5FX1ZJU0lU
X0NISUxEUkVOX1dJVEhfTU9ESUZJRVIoSlNfRVhQT1JUX1BSSVZBVEUsIEpTT2JqZWN0KTsKKwog
dm9pZCBKU09iamVjdDo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFu
YWx5emVyKQogewogICAgIEpTT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTT2JqZWN0Kj4o
Y2VsbCk7CkBAIC00NjksMTQgKzQ2OCwxMiBAQCB2b2lkIEpTT2JqZWN0OjphbmFseXplSGVhcChK
U0NlbGwqIGNlbGwsCiAgICAgfQogfQogCi12b2lkIEpTRmluYWxPYmplY3Q6OnZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1l
IFZpc2l0b3I+Cit2b2lkIEpTRmluYWxPYmplY3Q6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCog
Y2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU0ZpbmFsT2JqZWN0KiB0aGlzT2JqZWN0
ID0ganNDYXN0PEpTRmluYWxPYmplY3QqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lO
SEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7Ci0jaWYgQVNTRVJUX0VOQUJMRUQKLSAgICBib29s
IHdhc0NoZWNraW5nRm9yRGVmYXVsdE1hcmtWaW9sYXRpb24gPSB2aXNpdG9yLm1faXNDaGVja2lu
Z0ZvckRlZmF1bHRNYXJrVmlvbGF0aW9uOwotICAgIHZpc2l0b3IubV9pc0NoZWNraW5nRm9yRGVm
YXVsdE1hcmtWaW9sYXRpb24gPSBmYWxzZTsKLSNlbmRpZgorICAgIHR5cGVuYW1lIFZpc2l0b3I6
OkRlZmF1bHRNYXJraW5nVmlvbGF0aW9uQXNzZXJ0aW9uU2NvcGUgYXNzZXJ0aW9uU2NvcGUodmlz
aXRvcik7CiAgICAgCiAgICAgSlNDZWxsOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0
b3IpOwogICAgIApAQCAtNDg0LDEyICs0ODEsMTAgQEAgdm9pZCBKU0ZpbmFsT2JqZWN0Ojp2aXNp
dENoaWxkcmVuKEpTQ2VsbAogICAgICAgICBpZiAodW5zaWduZWQgc3RvcmFnZVNpemUgPSBzdHJ1
Y3R1cmUtPmlubGluZVNpemUoKSkKICAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kVmFsdWVzSGlk
ZGVuKHRoaXNPYmplY3QtPmlubGluZVN0b3JhZ2UoKSwgc3RvcmFnZVNpemUpOwogICAgIH0KLSAg
ICAKLSNpZiBBU1NFUlRfRU5BQkxFRAotICAgIHZpc2l0b3IubV9pc0NoZWNraW5nRm9yRGVmYXVs
dE1hcmtWaW9sYXRpb24gPSB3YXNDaGVja2luZ0ZvckRlZmF1bHRNYXJrVmlvbGF0aW9uOwotI2Vu
ZGlmCiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTl9XSVRIX01PRElGSUVSKEpTX0VYUE9SVF9Q
UklWQVRFLCBKU0ZpbmFsT2JqZWN0KTsKKwogU3RyaW5nIEpTT2JqZWN0OjpjbGFzc05hbWUoY29u
c3QgSlNPYmplY3QqIG9iamVjdCwgVk0mIHZtKQogewogICAgIGNvbnN0IENsYXNzSW5mbyogaW5m
byA9IG9iamVjdC0+Y2xhc3NJbmZvKHZtKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNPYmplY3QuaAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMSw3ICsxLDcgQEAKIC8q
CiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDEgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9y
ZykKICAqICBDb3B5cmlnaHQgKEMpIDIwMDEgUGV0ZXIgS2VsbHkgKHBta0Bwb3N0LmNvbSkKLSAq
ICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTEwOCw4ICsxMDgsOSBAQCBjbGFzcyBKU09i
amVjdCA6IHB1YmxpYyBKU0NlbGwgewogcHVibGljOgogICAgIHVzaW5nIEJhc2UgPSBKU0NlbGw7
CiAKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOX1dJVEhfTU9ESUZJRVIoSlNfRVhQT1JUX1BS
SVZBVEUpOworCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHNpemVfdCBlc3RpbWF0ZWRT
aXplKEpTQ2VsbCosIFZNJik7Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgdmlz
aXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwogICAgIEpTX0VYUE9SVF9QUklWQVRF
IHN0YXRpYyB2b2lkIGFuYWx5emVIZWFwKEpTQ2VsbCosIEhlYXBBbmFseXplciYpOwogCiAgICAg
SlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFN0cmluZyBjbGFzc05hbWUoY29uc3QgSlNPYmplY3Qq
LCBWTSYpOwpAQCAtOTgyLDExICs5ODMsMTEgQEAgcHJvdGVjdGVkOgogICAgIEpTT2JqZWN0KFZN
JiwgU3RydWN0dXJlKiwgQnV0dGVyZmx5KiA9IG51bGxwdHIpOwogICAgIAogICAgIC8vIFZpc2l0
cyB0aGUgYnV0dGVyZmx5IHVubGVzcyB0aGVyZSBpcyBhIHJhY2UuIFJldHVybnMgdGhlIHN0cnVj
dHVyZSBpZiB0aGVyZSB3YXMgbm8gcmFjZS4KLSAgICBTdHJ1Y3R1cmUqIHZpc2l0QnV0dGVyZmx5
KFNsb3RWaXNpdG9yJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gU3RydWN0dXJl
KiB2aXNpdEJ1dHRlcmZseShWaXNpdG9yJik7CiAgICAgCi0gICAgU3RydWN0dXJlKiB2aXNpdEJ1
dHRlcmZseUltcGwoU2xvdFZpc2l0b3ImKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
PiBTdHJ1Y3R1cmUqIHZpc2l0QnV0dGVyZmx5SW1wbChWaXNpdG9yJik7CiAgICAgCi0gICAgdm9p
ZCBtYXJrQXV4aWxpYXJ5QW5kVmlzaXRPdXRPZkxpbmVQcm9wZXJ0aWVzKFNsb3RWaXNpdG9yJiwg
QnV0dGVyZmx5KiwgU3RydWN0dXJlKiwgUHJvcGVydHlPZmZzZXQgbWF4T2Zmc2V0KTsKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIG1hcmtBdXhpbGlhcnlBbmRWaXNpdE91dE9m
TGluZVByb3BlcnRpZXMoVmlzaXRvciYsIEJ1dHRlcmZseSosIFN0cnVjdHVyZSosIFByb3BlcnR5
T2Zmc2V0IG1heE9mZnNldCk7CiAKICAgICAvLyBDYWxsIHRoaXMgaWYgeW91IGtub3cgdGhhdCB0
aGUgb2JqZWN0IGlzIGluIGEgbW9kZSB3aGVyZSBpdCBoYXMgYXJyYXkKICAgICAvLyBzdG9yYWdl
LiBUaGlzIHdpbGwgYXNzZXJ0IG90aGVyd2lzZS4KQEAgLTExNzQsOCArMTE3NSw2IEBAIHByb3Rl
Y3RlZDoKICAgICB9CiB9OwogCi1jbGFzcyBKU0ZpbmFsT2JqZWN0OwotCiAvLyBKU0ZpbmFsT2Jq
ZWN0IGlzIGEgdHlwZSBvZiBKU09iamVjdCB0aGF0IGNvbnRhaW5zIHN1ZmZpY2llbnQgaW50ZXJu
YWwKIC8vIHN0b3JhZ2UgdG8gZnVsbHkgbWFrZSB1c2Ugb2YgdGhlIGNvbGxlY3RvciBjZWxsIGNv
bnRhaW5pbmcgaXQuCiBjbGFzcyBKU0ZpbmFsT2JqZWN0IGZpbmFsIDogcHVibGljIEpTT2JqZWN0
IHsKQEAgLTEyMTQsMTUgKzEyMTMsMTMgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gU3RydWN0
dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCB0eXBlSW5mbygpLCBpbmZv
KCksIGRlZmF1bHRJbmRleGluZ1R5cGUsIGlubGluZUNhcGFjaXR5KTsKICAgICB9CiAKLSAgICBK
U19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RW
aXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTl9XSVRIX01PRElGSUVSKEpTX0VY
UE9SVF9QUklWQVRFKTsKIAogICAgIERFQ0xBUkVfRVhQT1JUX0lORk87CiAKIHByaXZhdGU6CiAg
ICAgZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKIAotICAgIHZvaWQgdmlzaXRD
aGlsZHJlbkNvbW1vbihTbG90VmlzaXRvciYpOwotCiAgICAgZXhwbGljaXQgSlNGaW5hbE9iamVj
dChWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBCdXR0ZXJmbHkqIGJ1dHRlcmZseSkKICAg
ICAgICAgOiBKU09iamVjdCh2bSwgc3RydWN0dXJlLCBidXR0ZXJmbHkpCiAgICAgewpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9taXNlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb21pc2UuY3BwCShyZXZpc2lvbiAy
NzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb21pc2UuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
My0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtNjcsMTMgKzY3LDE2IEBAIHZvaWQgSlNQcm9taXNlOjpmaW5pc2hD
cmVhdGlvbihWTSYgdm0pCiAgICAgICAgIEJhc2U6OmludGVybmFsRmllbGQoaW5kZXgpLnNldCh2
bSwgdGhpcywgdmFsdWVzW2luZGV4XSk7CiB9CiAKLXZvaWQgSlNQcm9taXNlOjp2aXNpdENoaWxk
cmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBWaXNpdG9yPgordm9pZCBKU1Byb21pc2U6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2Vs
bCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpT
UHJvbWlzZSo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVj
dCwgaW5mbygpKTsKICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3Ip
OwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNQcm9taXNlKTsKKwogYXV0byBKU1Byb21p
c2U6OnN0YXR1cyhWTSYpIGNvbnN0IC0+IFN0YXR1cwogewogICAgIEpTVmFsdWUgdmFsdWUgPSBp
bnRlcm5hbEZpZWxkKEZpZWxkOjpGbGFncykuZ2V0KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU1Byb21pc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU1Byb21pc2UuaAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9taXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtOTYsNyArOTYs
NyBAQCBwdWJsaWM6CiAgICAgfTsKICAgICBzdGF0aWMgRGVmZXJyZWREYXRhIGNyZWF0ZURlZmVy
cmVkRGF0YShKU0dsb2JhbE9iamVjdCosIEpTUHJvbWlzZUNvbnN0cnVjdG9yKik7CiAKLSAgICBz
dGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVD
TEFSRV9WSVNJVF9DSElMRFJFTjsKIAogcHJvdGVjdGVkOgogICAgIEpTUHJvbWlzZShWTSYsIFN0
cnVjdHVyZSopOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuY3BwCShyZXZpc2lvbiAyNzI5MDIpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3Iu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxNC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNzAsNyArNzAsOCBAQCB2b2lkIEpTUHJvcGVydHlOYW1l
RW51bWVyYXRvcjo6ZmluaXNoQ3JlCiAgICAgfQogfQogCi12b2lkIEpTUHJvcGVydHlOYW1lRW51
bWVyYXRvcjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9y
KQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7
CiAgICAgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTUHJv
cGVydHlOYW1lRW51bWVyYXRvcio+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJ
VFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTg3LDYgKzg4LDggQEAgdm9pZCBKU1Byb3BlcnR5
TmFtZUVudW1lcmF0b3I6OnZpc2l0Q2hpbAogICAgIH0KIH0KIAorREVGSU5FX1ZJU0lUX0NISUxE
UkVOKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcik7CisKIC8vIEZJWE1FOiBBc3NlcnQgdGhhdCBw
cm9wZXJ0aWVzIHJldHVybmVkIGJ5IGdldE93blByb3BlcnR5TmFtZXMoKSBhcmUgcmVwb3J0ZWQg
ZW51bWVyYWJsZSBieSBnZXRPd25Qcm9wZXJ0eVNsb3QoKS4KIC8vIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTk5MjYKIHZvaWQgZ2V0RW51bWVyYWJsZVByb3BlcnR5
TmFtZXMoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNPYmplY3QqIGJhc2UsIFByb3Bl
cnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCB1aW50MzJfdCYgaW5kZXhlZExlbmd0aCwgdWlu
dDMyX3QmIHN0cnVjdHVyZVByb3BlcnR5Q291bnQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaAkocmV2
aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDE0LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC04NCw3ICs4NCw3IEBAIHB1Ymxp
YzoKICAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU1Byb3BlcnR5TmFtZUVudW1lcmF0
b3IsIG1fcHJvcGVydHlOYW1lcyk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGls
ZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47
CiAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJveHkuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJveHkuY3BwCShyZXZpc2lvbiAy
NzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3h5LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAx
MiwgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzUsNyArMzUsOCBAQCBTVEFUSUNfQVNTRVJUX0lT
X1RSSVZJQUxMWV9ERVNUUlVDVElCTEUoCiAKIGNvbnN0IENsYXNzSW5mbyBKU1Byb3h5OjpzX2lu
Zm8gPSB7ICJKU1Byb3h5IiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRF
X01FVEhPRF9UQUJMRShKU1Byb3h5KSB9OwogCi12b2lkIEpTUHJveHk6OnZpc2l0Q2hpbGRyZW4o
SlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZp
c2l0b3I+Cit2b2lkIEpTUHJveHk6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlz
aXRvciYgdmlzaXRvcikKIHsKICAgICBKU1Byb3h5KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTUHJv
eHkqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGlu
Zm8oKSk7CkBAIC00Myw2ICs0NCw4IEBAIHZvaWQgSlNQcm94eTo6dmlzaXRDaGlsZHJlbihKU0Nl
bGwqIGNlbGwKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX3RhcmdldCk7CiB9CiAK
K0RFRklORV9WSVNJVF9DSElMRFJFTl9XSVRIX01PRElGSUVSKEpTX0VYUE9SVF9QUklWQVRFLCBK
U1Byb3h5KTsKKwogdm9pZCBKU1Byb3h5OjpzZXRUYXJnZXQoVk0mIHZtLCBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0KQogewogICAgIG1fdGFyZ2V0LnNldCh2bSwgdGhpcywgZ2xvYmFsT2Jq
ZWN0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJveHkuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3h5LmgJKHJldmlz
aW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJveHkuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEt
MjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTEtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTg1LDcgKzg1LDcgQEAgcHJvdGVjdGVkOgogICAgICAgICBtX3Rh
cmdldC5zZXQodm0sIHRoaXMsIHRhcmdldCk7CiAgICAgfQogCi0gICAgSlNfRVhQT1JUX1BSSVZB
VEUgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAg
IERFQ0xBUkVfVklTSVRfQ0hJTERSRU5fV0lUSF9NT0RJRklFUihKU19FWFBPUlRfUFJJVkFURSk7
CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgU3RyaW5nIGNsYXNzTmFtZShjb25zdCBK
U09iamVjdCosIFZNJik7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFN0cmluZyB0b1N0
cmluZ05hbWUoY29uc3QgSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCopOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTY29wZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTY29wZS5jcHAJKHJldmlzaW9uIDI3MjkwMikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2NvcGUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDIwIEFwcGxlIElu
Yy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDIxIEFwcGxl
IEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMzksNyArMzksOCBAQCBTVEFUSUNfQVNTRVJUX0lTX1RSSVZJQUxMWV9ERVNUUlVDVElC
TEUoCiAKIGNvbnN0IENsYXNzSW5mbyBKU1Njb3BlOjpzX2luZm8gPSB7ICJTY29wZSIsICZCYXNl
OjpzX2luZm8sIG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNTY29wZSkg
fTsKIAotdm9pZCBKU1Njb3BlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0
b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1Njb3BlOjp2
aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAg
SlNTY29wZSogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Njb3BlKj4oY2VsbCk7CiAgICAgQVNTRVJU
X0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNDcsNiArNDgsOCBA
QCB2b2lkIEpTU2NvcGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsCiAgICAgdmlzaXRvci5h
cHBlbmQodGhpc09iamVjdC0+bV9uZXh0KTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpT
U2NvcGUpOworCiAvLyBSZXR1cm5zIHRydWUgaWYgd2UgZm91bmQgZW5vdWdoIGluZm9ybWF0aW9u
IHRvIHRlcm1pbmF0ZSBvcHRpbWl6YXRpb24uCiBzdGF0aWMgaW5saW5lIGJvb2wgYWJzdHJhY3RB
Y2Nlc3MoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNTY29wZSogc2NvcGUsIGNvbnN0
IElkZW50aWZpZXImIGlkZW50LCBHZXRPclB1dCBnZXRPclB1dCwgc2l6ZV90IGRlcHRoLCBib29s
JiBuZWVkc1ZhckluamVjdGlvbkNoZWNrcywgUmVzb2x2ZU9wJiBvcCwgSW5pdGlhbGl6YXRpb25N
b2RlIGluaXRpYWxpemF0aW9uTW9kZSkKIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTU2NvcGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1Njb3BlLmgJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTU2NvcGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxOSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY0LDcgKzY0LDcgQEAgcHVi
bGljOgogCiAgICAgc3RhdGljIHZvaWQgY29sbGVjdENsb3N1cmVWYXJpYWJsZXNVbmRlclREWihK
U1Njb3BlKiwgVERaRW52aXJvbm1lbnQmIHJlc3VsdCwgUHJpdmF0ZU5hbWVFbnZpcm9ubWVudCYp
OwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYp
OworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBib29sIGlzVmFyU2NvcGUoKTsK
ICAgICBib29sIGlzTGV4aWNhbFNjb3BlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmNwcAko
cmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZWdt
ZW50ZWRWYXJpYWJsZU9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYyLDcgKzYyLDggQEAg
U2NvcGVPZmZzZXQgSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdDo6YQogICAgIHJldHVybiBTY29w
ZU9mZnNldChvbGRTaXplKTsKIH0KIAotdm9pZCBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0Ojp2
aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0
ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0Ojp2aXNp
dENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNT
ZWdtZW50ZWRWYXJpYWJsZU9iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1NlZ21lbnRlZFZh
cmlhYmxlT2JqZWN0Kj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlz
T2JqZWN0LCBpbmZvKCkpOwpAQCAtNzUsNiArNzYsOCBAQCB2b2lkIEpTU2VnbWVudGVkVmFyaWFi
bGVPYmplY3Q6OnZpc2l0Q2hpCiAgICAgICAgIHZpc2l0b3IuYXBwZW5kSGlkZGVuKHRoaXNPYmpl
Y3QtPm1fdmFyaWFibGVzW2ldKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOX1dJVEhfTU9E
SUZJRVIoSlNfRVhQT1JUX1BSSVZBVEUsIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3QpOworCiB2
b2lkIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3Q6OmFuYWx5emVIZWFwKEpTQ2VsbCogY2VsbCwg
SGVhcEFuYWx5emVyJiBhbmFseXplcikKIHsKICAgICBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0
KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3QqPihjZWxsKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVP
YmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Nl
Z21lbnRlZFZhcmlhYmxlT2JqZWN0LmgJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVPYmplY3QuaAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxOSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTg1LDggKzg1LDggQEAgcHVibGljOgogICAgIC8vIEFkZHMgbnVtYmVyT2ZSZWdp
c3RlcnNUb0FkZCByZWdpc3RlcnMsIGluaXRpYWxpemVzIHRoZW0gdG8gVW5kZWZpbmVkLCBhbmQg
cmV0dXJucwogICAgIC8vIHRoZSBpbmRleCBvZiB0aGUgZmlyc3Qgb25lIGFkZGVkLgogICAgIEpT
X0VYUE9SVF9QUklWQVRFIFNjb3BlT2Zmc2V0IGFkZFZhcmlhYmxlcyh1bnNpZ25lZCBudW1iZXJP
ZlZhcmlhYmxlc1RvQWRkLCBKU1ZhbHVlKTsKLSAgICAKLSAgICBKU19FWFBPUlRfUFJJVkFURSBz
dGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisKKyAgICBE
RUNMQVJFX1ZJU0lUX0NISUxEUkVOX1dJVEhfTU9ESUZJRVIoSlNfRVhQT1JUX1BSSVZBVEUpOwog
ICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGFuYWx5emVIZWFwKEpTQ2VsbCosIEhl
YXBBbmFseXplciYpOwogICAgIAogcHJvdGVjdGVkOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNTZXRJdGVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNTZXRJdGVyYXRvci5jcHAJKHJldmlzaW9uIDI3MjkwMikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2V0SXRlcmF0b3IuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE3IEFw
cGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAy
MSBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC01NywxMyArNTcsMTYgQEAgdm9pZCBKU1NldEl0ZXJhdG9yOjpmaW5pc2hD
cmVhdGlvbihWTSYgdgogICAgICAgICBCYXNlOjppbnRlcm5hbEZpZWxkKGluZGV4KS5zZXQodm0s
IHRoaXMsIHZhbHVlc1tpbmRleF0pOwogfQogCi12b2lkIEpTU2V0SXRlcmF0b3I6OnZpc2l0Q2hp
bGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVu
YW1lIFZpc2l0b3I+Cit2b2lkIEpTU2V0SXRlcmF0b3I6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2Vs
bCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganND
YXN0PEpTU2V0SXRlcmF0b3IqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRT
KHRoaXNPYmplY3QsIGluZm8oKSk7CiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0
LCB2aXNpdG9yKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTU2V0SXRlcmF0b3IpOwor
CiBKU1ZhbHVlIEpTU2V0SXRlcmF0b3I6OmNyZWF0ZVBhaXIoSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgSlNWYWx1ZSBrZXksIEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgTWFya2VkQXJndW1l
bnRCdWZmZXIgYXJnczsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2V0
SXRlcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U1NldEl0ZXJhdG9yLmgJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTU2V0SXRlcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTYgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIxIEFwcGxlLCBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEzMCw3ICsx
MzAsNyBAQCBwcml2YXRlOgogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZmluaXNoQ3JlYXRp
b24oVk0mLCBKU1NldCosIEl0ZXJhdGlvbktpbmQpOwogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24o
Vk0mKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBKU1ZhbHVlIGNyZWF0ZVBhaXIoSlNHbG9iYWxP
YmplY3QqLCBKU1ZhbHVlLCBKU1ZhbHVlKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVu
KEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIH07
CiBTVEFUSUNfQVNTRVJUX0lTX1RSSVZJQUxMWV9ERVNUUlVDVElCTEUoSlNTZXRJdGVyYXRvcik7
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5jcHAJKHJl
dmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5n
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChD
KSAxOTk5LTIwMDIgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKICAqICBDb3B5cmlnaHQg
KEMpIDIwMDEgUGV0ZXIgS2VsbHkgKHBta0Bwb3N0LmNvbSkKLSAqICBDb3B5cmlnaHQgKEMpIDIw
MDQtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChD
KSAyMDA0LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKQEAgLTEwNSw3ICsxMDUsOCBAQCBzaXplX3QgSlNTdHJpbmc6OmVzdGltYXRlZFNp
emUoSlNDZWxsKiBjCiAgICAgcmV0dXJuIEJhc2U6OmVzdGltYXRlZFNpemUoY2VsbCwgdm0pICsg
Yml0d2lzZV9jYXN0PFN0cmluZ0ltcGwqPihwb2ludGVyKS0+Y29zdER1cmluZ0dDKCk7CiB9CiAK
LXZvaWQgSlNTdHJpbmc6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYg
dmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTU3RyaW5nOjp2aXNp
dENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNT
dHJpbmcqIHRoaXNPYmplY3QgPSBhc1N0cmluZyhjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNU
X0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC0xNDMsNiArMTQ0LDggQEAgdm9pZCBK
U1N0cmluZzo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbAogICAgICAgICB2aXNpdG9yLnJlcG9y
dEV4dHJhTWVtb3J5VmlzaXRlZChpbXBsLT5jb3N0RHVyaW5nR0MoKSk7CiB9CiAKK0RFRklORV9W
SVNJVF9DSElMRFJFTihKU1N0cmluZyk7CisKIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbWF4
TGVuZ3RoRm9yT25TdGFja1Jlc29sdmUgPSAyMDQ4OwogCiB2b2lkIEpTUm9wZVN0cmluZzo6cmVz
b2x2ZVJvcGVJbnRlcm5hbDgoTENoYXIqIGJ1ZmZlcikgY29uc3QKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuaAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuaAkod29ya2luZyBjb3B5KQpAQCAtMSw3
ICsxLDcgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDEgSGFycmkgUG9ydGVuIChw
b3J0ZW5Aa2RlLm9yZykKICAqICBDb3B5cmlnaHQgKEMpIDIwMDEgUGV0ZXIgS2VsbHkgKHBta0Bw
b3N0LmNvbSkKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIxNyw3ICsyMTcsNyBA
QCBwdWJsaWM6CiAKICAgICBzdGF0aWMgdm9pZCBkdW1wVG9TdHJlYW0oY29uc3QgSlNDZWxsKiwg
UHJpbnRTdHJlYW0mKTsKICAgICBzdGF0aWMgc2l6ZV90IGVzdGltYXRlZFNpemUoSlNDZWxsKiwg
Vk0mKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9y
Jik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIEFMV0FZU19JTkxJTkUgYm9v
bCBpc1JvcGUoKSBjb25zdAogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTU3RyaW5nSXRlcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTU3RyaW5nSXRlcmF0b3IuY3BwCShyZXZpc2lvbiAyNzI5MDIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZ0l0ZXJhdG9yLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTUgWXVzdWtl
IFN1enVraSA8dXRhdGFuZS50ZWFAZ21haWwuY29tPi4KLSAqIENvcHlyaWdodCAoQykgMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTUxLDExICs1MSwxNCBAQCBKU1N0cmluZ0l0ZXJhdG9yKiBKU1N0cmluZ0l0
ZXJhdG9yOjpjbG9uCiAgICAgcmV0dXJuIGNsb25lOwogfQogCi12b2lkIEpTU3RyaW5nSXRlcmF0
b3I6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3Rl
bXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTU3RyaW5nSXRlcmF0b3I6OnZpc2l0Q2hp
bGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBhdXRvKiB0
aGlzT2JqZWN0ID0ganNDYXN0PEpTU3RyaW5nSXRlcmF0b3IqPihjZWxsKTsKICAgICBBU1NFUlRf
R0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAgICAgQmFzZTo6dmlzaXRD
aGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVO
KEpTU3RyaW5nSXRlcmF0b3IpOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nSXRlcmF0b3IuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZ0l0ZXJhdG9yLmgJKHJldmlzaW9u
IDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nSXRlcmF0
b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMp
IDIwMTUgWXVzdWtlIFN1enVraSA8dXRhdGFuZS50ZWFAZ21haWwuY29tPi4KKyAqIENvcHlyaWdo
dCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTc5LDcgKzgwLDcgQEAgcHVibGljOgogICAgIEpTVmFsdWUg
aW5kZXgoKSBjb25zdCB7IHJldHVybiBpbnRlcm5hbEZpZWxkKEZpZWxkOjpJbmRleCkuZ2V0KCk7
IH0KICAgICBKU1N0cmluZ0l0ZXJhdG9yKiBjbG9uZShKU0dsb2JhbE9iamVjdCopOwogCi0gICAg
c3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERF
Q0xBUkVfVklTSVRfQ0hJTERSRU47CiAKIHByaXZhdGU6CiAgICAgSlNTdHJpbmdJdGVyYXRvcihW
TSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVjdC5jcHAJKHJldmlzaW9uIDI3
MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3ltYm9sVGFibGVPYmpl
Y3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMi0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzYsNyArMzYsOCBAQCBuYW1lc3BhY2UgSlNDIHsK
IAogY29uc3QgQ2xhc3NJbmZvIEpTU3ltYm9sVGFibGVPYmplY3Q6OnNfaW5mbyA9IHsgIlN5bWJv
bFRhYmxlT2JqZWN0IiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01F
VEhPRF9UQUJMRShKU1N5bWJvbFRhYmxlT2JqZWN0KSB9OwogCi12b2lkIEpTU3ltYm9sVGFibGVP
YmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikK
K3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTU3ltYm9sVGFibGVPYmplY3Q6OnZp
c2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBK
U1N5bWJvbFRhYmxlT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTU3ltYm9sVGFibGVPYmpl
Y3QqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGlu
Zm8oKSk7CkBAIC00NCw2ICs0NSw4IEBAIHZvaWQgSlNTeW1ib2xUYWJsZU9iamVjdDo6dmlzaXRD
aGlsZHJlbigKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX3N5bWJvbFRhYmxlKTsK
IH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTU3ltYm9sVGFibGVPYmplY3QpOworCiBib29s
IEpTU3ltYm9sVGFibGVPYmplY3Q6OmRlbGV0ZVByb3BlcnR5KEpTQ2VsbCogY2VsbCwgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgRGVsZXRl
UHJvcGVydHlTbG90JiBzbG90KQogewogICAgIEpTU3ltYm9sVGFibGVPYmplY3QqIHRoaXNPYmpl
Y3QgPSBqc0Nhc3Q8SlNTeW1ib2xUYWJsZU9iamVjdCo+KGNlbGwpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVjdC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuaAkocmV2
aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTeW1ib2xU
YWJsZU9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMi0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNzAsNyArNzAsNyBAQCBwcm90ZWN0ZWQ6
CiAgICAgICAgIG1fc3ltYm9sVGFibGUuc2V0KHZtLCB0aGlzLCBzeW1ib2xUYWJsZSk7CiAgICAg
fQogICAgIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0
b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogICAgIAogcHJpdmF0ZToKICAgICBX
cml0ZUJhcnJpZXI8U3ltYm9sVGFibGU+IG1fc3ltYm9sVGFibGU7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU1dlYWtPYmplY3RSZWYuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTV2Vha09iamVjdFJlZi5jcHAJKHJldmlzaW9u
IDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTV2Vha09iamVjdFJl
Zi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDE5IEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTktMjAyMSBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0zOSw3ICszOSw4IEBAIHZvaWQgSlNXZWFrT2JqZWN0UmVm
OjpmaW5pc2hDcmVhdGlvbihWTSYKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CiB9CiAK
LXZvaWQgSlNXZWFrT2JqZWN0UmVmOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZp
c2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1dlYWtP
YmplY3RSZWY6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRv
cikKIHsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTV2Vha09iamVjdFJlZio+KGNl
bGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsK
QEAgLTUxLDYgKzUyLDggQEAgdm9pZCBKU1dlYWtPYmplY3RSZWY6OnZpc2l0Q2hpbGRyZW4oSlND
ZQogICAgIH0KIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTV2Vha09iamVjdFJlZik7CisK
IHZvaWQgSlNXZWFrT2JqZWN0UmVmOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxseShWTSYgdm0pCiB7
CiAgICAgaWYgKG1fdmFsdWUgJiYgIXZtLmhlYXAuaXNNYXJrZWQobV92YWx1ZS5nZXQoKSkpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1dlYWtPYmplY3RSZWYuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1dlYWtPYmplY3RSZWYu
aAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNX
ZWFrT2JqZWN0UmVmLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDE5IEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTktMjAyMSBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02NSw3ICs2NSw3IEBAIHB1YmxpYzoKICAg
ICB9CiAKICAgICB2b2lkIGZpbmFsaXplVW5jb25kaXRpb25hbGx5KFZNJik7Ci0gICAgc3RhdGlj
IHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVf
VklTSVRfQ0hJTERSRU47CiAKIHByaXZhdGU6CiAgICAgSlNXZWFrT2JqZWN0UmVmKFZNJiB2bSwg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU1dpdGhTY29wZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNXaXRoU2NvcGUuY3BwCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU1dpdGhTY29wZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDE2IEFwcGxlIEluYy4gQWxsIFJp
Z2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDIxIEFwcGxlIEluYy4gQWxs
IFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDEs
NyArNDEsOCBAQCBKU1dpdGhTY29wZSogSlNXaXRoU2NvcGU6OmNyZWF0ZSgKICAgICByZXR1cm4g
d2l0aFNjb3BlOwogfQogCi12b2lkIEpTV2l0aFNjb3BlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCog
Y2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgor
dm9pZCBKU1dpdGhTY29wZTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9y
JiB2aXNpdG9yKQogewogICAgIEpTV2l0aFNjb3BlKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTV2l0
aFNjb3BlKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0
LCBpbmZvKCkpOwpAQCAtNDksNiArNTAsOCBAQCB2b2lkIEpTV2l0aFNjb3BlOjp2aXNpdENoaWxk
cmVuKEpTQ2VsbCogCiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9vYmplY3QpOwog
fQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNXaXRoU2NvcGUpOworCiBTdHJ1Y3R1cmUqIEpT
V2l0aFNjb3BlOjpjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBKU1ZhbHVlIHByb3RvKQogewogICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2
bSwgZ2xvYmFsT2JqZWN0LCBwcm90bywgVHlwZUluZm8oV2l0aFNjb3BlVHlwZSwgU3RydWN0dXJl
RmxhZ3MpLCBpbmZvKCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNX
aXRoU2NvcGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U1dpdGhTY29wZS5oCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU1dpdGhTY29wZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxNiBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQzLDcgKzQzLDcgQEAg
cHVibGljOgogCiAgICAgSlNPYmplY3QqIG9iamVjdCgpIHsgcmV0dXJuIG1fb2JqZWN0LmdldCgp
OyB9CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9y
Jik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIHN0YXRpYyBTdHJ1Y3R1cmUq
IGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBwcm90byk7CiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTV3JhcHBlck9iamVjdC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNXcmFwcGVyT2Jq
ZWN0LmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNXcmFwcGVyT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8q
CiAgKiAgQ29weXJpZ2h0IChDKSAyMDA2IE1ha3MgT3Jsb3ZpY2gKLSAqICBDb3B5cmlnaHQgKEMp
IDIwMDYsIDIwMDksIDIwMTIgQXBwbGUsIEluYy4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAy
MSBBcHBsZSwgSW5jLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI5LDExICsyOSwxNCBAQCBu
YW1lc3BhY2UgSlNDIHsKIAogU1RBVElDX0FTU0VSVF9JU19UUklWSUFMTFlfREVTVFJVQ1RJQkxF
KEpTV3JhcHBlck9iamVjdCk7CiAKLXZvaWQgSlNXcmFwcGVyT2JqZWN0Ojp2aXNpdENoaWxkcmVu
KEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPgordm9pZCBKU1dyYXBwZXJPYmplY3Q6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCog
Y2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0
PEpTV3JhcHBlck9iamVjdCo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMo
dGhpc09iamVjdCwgaW5mbygpKTsKICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3Qs
IHZpc2l0b3IpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU5fV0lUSF9NT0RJRklFUihKU19F
WFBPUlRfUFJJVkFURSwgSlNXcmFwcGVyT2JqZWN0KTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1dyYXBwZXJPYmplY3QuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1dyYXBwZXJPYmplY3Qu
aAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNX
cmFwcGVyT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogIENv
cHlyaWdodCAoQykgMjAwNiBNYWtzIE9ybG92aWNoCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA2LCAy
MDA3LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5
cmlnaHQgKEMpIDIwMDYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYwpAQCAtNjQsNyArNjQsNyBAQCBwdWJsaWM6CiBwcm90ZWN0ZWQ6CiAg
ICAgZXhwbGljaXQgSlNXcmFwcGVyT2JqZWN0KFZNJiwgU3RydWN0dXJlKik7CiAKLSAgICBKU19F
WFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNp
dG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTl9XSVRIX01PRElGSUVSKEpTX0VYUE9S
VF9QUklWQVRFKTsKIH07CiAKIGlubGluZSBKU1dyYXBwZXJPYmplY3Q6OkpTV3JhcHBlck9iamVj
dChWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvTGF6eUNsYXNzU3RydWN0dXJlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9MYXp5Q2xhc3NTdHJ1Y3R1cmUuY3BwCShyZXZpc2lvbiAy
NzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9MYXp5Q2xhc3NTdHJ1Y3R1
cmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxNi0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNzIsMTIgKzcyLDE2IEBAIHZvaWQgTGF6eUNsYXNz
U3RydWN0dXJlOjpJbml0aWFsaXplcjo6c2UKICAgICBjbGFzc1N0cnVjdHVyZS5tX2NvbnN0cnVj
dG9yLnNldCh2bSwgZ2xvYmFsLCBjb25zdHJ1Y3Rvcik7CiB9CiAKLXZvaWQgTGF6eUNsYXNzU3Ry
dWN0dXJlOjp2aXNpdChTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZp
c2l0b3I+Cit2b2lkIExhenlDbGFzc1N0cnVjdHVyZTo6dmlzaXQoVmlzaXRvciYgdmlzaXRvcikK
IHsKICAgICBtX3N0cnVjdHVyZS52aXNpdCh2aXNpdG9yKTsKICAgICB2aXNpdG9yLmFwcGVuZCht
X2NvbnN0cnVjdG9yKTsKIH0KIAordGVtcGxhdGUgdm9pZCBMYXp5Q2xhc3NTdHJ1Y3R1cmU6OnZp
c2l0KEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgTGF6eUNsYXNzU3RydWN0
dXJlOjp2aXNpdChTbG90VmlzaXRvciYpOworCiB2b2lkIExhenlDbGFzc1N0cnVjdHVyZTo6ZHVt
cChQcmludFN0cmVhbSYgb3V0KSBjb25zdAogewogICAgIG91dC5wcmludCgiPHN0cnVjdHVyZSA9
ICIsIG1fc3RydWN0dXJlLCAiLCBjb25zdHJ1Y3RvciA9ICIsIFJhd1BvaW50ZXIobV9jb25zdHJ1
Y3Rvci5nZXQoKSksICI+Iik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9M
YXp5Q2xhc3NTdHJ1Y3R1cmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9MYXp5Q2xhc3NTdHJ1Y3R1cmUuaAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTGF6eUNsYXNzU3RydWN0dXJlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIxIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtMTE3LDcgKzExNyw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fY29uc3RydWN0b3Iu
Z2V0KCk7CiAgICAgfQogICAgIAotICAgIHZvaWQgdmlzaXQoU2xvdFZpc2l0b3ImKTsKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIHZpc2l0KFZpc2l0b3ImKTsKICAgICAKICAg
ICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvTGF6eVByb3BlcnR5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvTGF6eVByb3BlcnR5LmgJKHJldmlzaW9uIDI3MjkwMikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0xhenlQcm9wZXJ0eS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE5IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIxIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMTAzLDcgKzEwMyw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldE1heUJlTnVsbChWTSYs
IGNvbnN0IE93bmVyVHlwZSogb3duZXIsIEVsZW1lbnRUeXBlKik7CiAgICAgdm9pZCBzZXQoVk0m
LCBjb25zdCBPd25lclR5cGUqIG93bmVyLCBFbGVtZW50VHlwZSopOwogICAgIAotICAgIHZvaWQg
dmlzaXQoU2xvdFZpc2l0b3ImKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lk
IHZpc2l0KFZpc2l0b3ImKTsKICAgICAKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25z
dDsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0xhenlQcm9wZXJ0
eUlubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9M
YXp5UHJvcGVydHlJbmxpbmVzLmgJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0xhenlQcm9wZXJ0eUlubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02Niw3
ICs2Niw4IEBAIHZvaWQgTGF6eVByb3BlcnR5PE93bmVyVHlwZSwgRWxlbWVudFR5cGUKIH0KIAog
dGVtcGxhdGU8dHlwZW5hbWUgT3duZXJUeXBlLCB0eXBlbmFtZSBFbGVtZW50VHlwZT4KLXZvaWQg
TGF6eVByb3BlcnR5PE93bmVyVHlwZSwgRWxlbWVudFR5cGU+Ojp2aXNpdChTbG90VmlzaXRvciYg
dmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIExhenlQcm9wZXJ0eTxP
d25lclR5cGUsIEVsZW1lbnRUeXBlPjo6dmlzaXQoVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBp
ZiAobV9wb2ludGVyICYmICEobV9wb2ludGVyICYgbGF6eVRhZykpCiAgICAgICAgIHZpc2l0b3Iu
YXBwZW5kVW5iYXJyaWVyZWQoYml0d2lzZV9jYXN0PEVsZW1lbnRUeXBlKj4obV9wb2ludGVyKSk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Nb2R1bGVQcm9ncmFtRXhlY3V0
YWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTW9k
dWxlUHJvZ3JhbUV4ZWN1dGFibGUuY3BwCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9Nb2R1bGVQcm9ncmFtRXhlY3V0YWJsZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEwLCAy
MDEzLCAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDA5LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03OSw3ICs3OSw4IEBAIGF1dG8gTW9kdWxlUHJv
Z3JhbUV4ZWN1dGFibGU6OmVuc3VyZVRlbXAKICAgICByZXR1cm4gZW5zdXJlVGVtcGxhdGVPYmpl
Y3RNYXBJbXBsKG1fdGVtcGxhdGVPYmplY3RNYXApOwogfQogCi12b2lkIE1vZHVsZVByb2dyYW1F
eGVjdXRhYmxlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0
b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBNb2R1bGVQcm9ncmFtRXhlY3V0
YWJsZTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQog
ewogICAgIE1vZHVsZVByb2dyYW1FeGVjdXRhYmxlKiB0aGlzT2JqZWN0ID0ganNDYXN0PE1vZHVs
ZVByb2dyYW1FeGVjdXRhYmxlKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklU
Uyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtOTQsNCArOTUsNiBAQCB2b2lkIE1vZHVsZVByb2dy
YW1FeGVjdXRhYmxlOjp2aXNpdENoaWxkCiAgICAgfQogfQogCitERUZJTkVfVklTSVRfQ0hJTERS
RU4oTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUpOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01vZHVsZVByb2dyYW1FeGVjdXRhYmxlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTW9kdWxlUHJvZ3Jh
bUV4ZWN1dGFibGUuaAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxOSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAyMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTc3
LDcgKzc3LDcgQEAgcHJpdmF0ZToKIAogICAgIE1vZHVsZVByb2dyYW1FeGVjdXRhYmxlKEpTR2xv
YmFsT2JqZWN0KiwgY29uc3QgU291cmNlQ29kZSYpOwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRD
aGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERS
RU47CiAKICAgICBXcml0ZUJhcnJpZXI8VW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrPiBt
X3VubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jazsKICAgICBXcml0ZUJhcnJpZXI8U3ltYm9s
VGFibGU+IG1fbW9kdWxlRW52aXJvbm1lbnRTeW1ib2xUYWJsZTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuY3BwCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAyMCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTU1OCw2ICs1NTgsOSBAQCB2b2lkIE9wdGlvbnM6OnJlY29tcHV0ZURlcGVuZGVudE9wdGlvbnMo
CiAKICAgICBpZiAoT3B0aW9uczo6dXNlUHJpdmF0ZVN0YXRpY0NsYXNzRmllbGRzKCkpCiAgICAg
ICAgIE9wdGlvbnM6OnVzZVByaXZhdGVDbGFzc0ZpZWxkcygpID0gdHJ1ZTsKKworICAgIGlmIChP
cHRpb25zOjp2ZXJib3NlVmVyaWZ5R0MoKSkKKyAgICAgICAgT3B0aW9uczo6dmVyaWZ5R0MoKSA9
IHRydWU7CiB9CiAKIGlubGluZSB2b2lkKiBPcHRpb25zOjphZGRyZXNzT2ZPcHRpb24oT3B0aW9u
czo6SUQgaWQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zTGlz
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnNM
aXN0LmgJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L09wdGlvbnNMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTM2OSw2ICszNjksOCBAQCBKU19FWFBP
UlRfUFJJVkFURSBib29sIGNhblVzZUpJVENhZ2UoKTsKICAgICB2KEJvb2wsIGFsd2F5c0dlbmVy
YXRlUENUb0NvZGVPcmlnaW5NYXAsIGZhbHNlLCBOb3JtYWwsICJUaGlzIHdpbGwgbWFrZSBzdXJl
IHdlIGFsd2F5cyBnZW5lcmF0ZSBhIFBDVG9Db2RlT3JpZ2luTWFwIGZvciBKSVRlZCBjb2RlLiIp
IFwKICAgICBcCiAgICAgdihEb3VibGUsIHJhbmRvbUludGVncml0eUF1ZGl0UmF0ZSwgMC4wNSwg
Tm9ybWFsLCAiUHJvYmFiaWxpdHkgb2YgcmFuZG9tIGludGVncml0eSBhdWRpdHMgWzAuMCAtIDEu
MF0iKSBcCisgICAgdihCb29sLCB2ZXJpZnlHQywgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAor
ICAgIHYoQm9vbCwgdmVyYm9zZVZlcmlmeUdDLCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCiAg
ICAgdihCb29sLCB2ZXJpZnlIZWFwLCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihV
bnNpZ25lZCwgbnVtYmVyT2ZHQ0N5Y2xlc1RvUmVjb3JkRm9yVmVyaWZpY2F0aW9uLCAzLCBOb3Jt
YWwsIG51bGxwdHIpIFwKICAgICBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9Qcm9ncmFtRXhlY3V0YWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvUHJvZ3JhbUV4ZWN1dGFibGUuY3BwCShyZXZpc2lvbiAyNzI5MDIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9ncmFtRXhlY3V0YWJsZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTkg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5LTIw
MjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0yMDgsNyArMjA4LDggQEAgYXV0byBQcm9ncmFtRXhlY3V0YWJsZTo6ZW5z
dXJlVGVtcGxhdGVPYgogICAgIHJldHVybiBlbnN1cmVUZW1wbGF0ZU9iamVjdE1hcEltcGwobV90
ZW1wbGF0ZU9iamVjdE1hcCk7CiB9CiAKLXZvaWQgUHJvZ3JhbUV4ZWN1dGFibGU6OnZpc2l0Q2hp
bGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVu
YW1lIFZpc2l0b3I+Cit2b2lkIFByb2dyYW1FeGVjdXRhYmxlOjp2aXNpdENoaWxkcmVuSW1wbChK
U0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgUHJvZ3JhbUV4ZWN1dGFibGUq
IHRoaXNPYmplY3QgPSBqc0Nhc3Q8UHJvZ3JhbUV4ZWN1dGFibGUqPihjZWxsKTsKICAgICBBU1NF
UlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC0yMjIsNCArMjIz
LDYgQEAgdm9pZCBQcm9ncmFtRXhlY3V0YWJsZTo6dmlzaXRDaGlsZHJlbihKUwogICAgIH0KIH0K
IAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKFByb2dyYW1FeGVjdXRhYmxlKTsKKwogfSAvLyBuYW1l
c3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9ncmFtRXhl
Y3V0YWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1By
b2dyYW1FeGVjdXRhYmxlLmgJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1Byb2dyYW1FeGVjdXRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC04MSw3
ICs4MSw3IEBAIHByaXZhdGU6CiAKICAgICBQcm9ncmFtRXhlY3V0YWJsZShKU0dsb2JhbE9iamVj
dCosIGNvbnN0IFNvdXJjZUNvZGUmKTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4o
SlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAg
ICAgV3JpdGVCYXJyaWVyPFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jaz4gbV91bmxpbmtlZFByb2dy
YW1Db2RlQmxvY2s7CiAgICAgV3JpdGVCYXJyaWVyPEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2U+
IG1fcHJvZ3JhbUNvZGVCbG9jazsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1Byb3BlcnR5TWFwSGFzaFRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvUHJvcGVydHlNYXBIYXNoVGFibGUuaAkocmV2aXNpb24gMjcyOTAyKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlNYXBIYXNoVGFibGUuaAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA0LTIw
MTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAw
NC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICog
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCkBAIC0xMzMsNyArMTMzLDcgQEAgcHVibGljOgogCiAgICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOwogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlND
ZWxsKik7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRv
ciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBERUNMQVJFX0VYUE9SVF9J
TkZPOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eVRhYmxl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0
eVRhYmxlLmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvUHJvcGVydHlUYWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTE4LDcgKzExOCw4
IEBAIHZvaWQgUHJvcGVydHlUYWJsZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHYKICAgICB2bS5oZWFw
LnJlcG9ydEV4dHJhTWVtb3J5QWxsb2NhdGVkKGRhdGFTaXplKCkpOwogfQogCi12b2lkIFByb3Bl
cnR5VGFibGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRv
cikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFByb3BlcnR5VGFibGU6OnZpc2l0
Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBhdXRv
KiB0aGlzT2JqZWN0ID0ganNDYXN0PFByb3BlcnR5VGFibGUqPihjZWxsKTsKICAgICBBU1NFUlRf
R0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC0xMjYsNiArMTI3LDgg
QEAgdm9pZCBQcm9wZXJ0eVRhYmxlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbAogICAgIHZpc2l0b3Iu
cmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKHRoaXNPYmplY3QtPmRhdGFTaXplKCkpOwogfQogCitE
RUZJTkVfVklTSVRfQ0hJTERSRU4oUHJvcGVydHlUYWJsZSk7CisKIHZvaWQgUHJvcGVydHlUYWJs
ZTo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCiB7CiAgICAgc3RhdGljX2Nhc3Q8UHJvcGVydHlUYWJs
ZSo+KGNlbGwpLT5Qcm9wZXJ0eVRhYmxlOjp+UHJvcGVydHlUYWJsZSgpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJveHlPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3h5T2JqZWN0LmNwcAkocmV2aXNpb24gMjcy
OTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJveHlPYmplY3QuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNi0y
MDIwIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
Ni0yMDIxIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMTE3OSw3ICsxMTc5LDggQEAgYm9vbCBQcm94eU9iamVjdDo6aXNS
ZXZva2VkKCkgY29uc3QKICAgICByZXR1cm4gaGFuZGxlcigpLmlzTnVsbCgpOwogfQogCi12b2lk
IFByb3h5T2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZp
c2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBQcm94eU9iamVjdDo6dmlz
aXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFBy
b3h5T2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PFByb3h5T2JqZWN0Kj4oY2VsbCk7CiAgICAg
QVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtMTE4OSw0
ICsxMTkwLDYgQEAgdm9pZCBQcm94eU9iamVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIAogICAg
IHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1faGFuZGxlcik7CiB9CiAKK0RFRklORV9WSVNJ
VF9DSElMRFJFTihQcm94eU9iamVjdCk7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJveHlPYmplY3QuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm94eU9iamVjdC5oCShyZXZpc2lvbiAyNzI5
MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm94eU9iamVjdC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTkxLDcgKzkxLDcgQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgdm9pZCBnZXRPd25Q
cm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWVBcnJh
eSYsIERvbnRFbnVtUHJvcGVydGllc01vZGUpOwogICAgIHN0YXRpYyBib29sIHNldFByb3RvdHlw
ZShKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBwcm90b3R5cGUsIGJvb2wgc2hv
dWxkVGhyb3dJZkNhbnRTZXQpOwogICAgIHN0YXRpYyBKU1ZhbHVlIGdldFByb3RvdHlwZShKU09i
amVjdCosIEpTR2xvYmFsT2JqZWN0Kik7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihK
U0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAg
ICBib29sIGdldE93blByb3BlcnR5U2xvdENvbW1vbihKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5
TmFtZSwgUHJvcGVydHlTbG90Jik7CiAgICAgYm9vbCBwZXJmb3JtSW50ZXJuYWxNZXRob2RHZXRP
d25Qcm9wZXJ0eShKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm94eVJldm9rZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJveHlSZXZva2UuY3Bw
CShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm94
eVJldm9rZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNi0yMDIxIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjksNyArNjksOCBAQCBKU0NfREVGSU5FX0hPU1Rf
RlVOQ1RJT04ocGVyZm9ybVByb3h5UmV2CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKIH0KIAotdm9pZCBQcm94eVJldm9rZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwq
IGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4K
K3ZvaWQgUHJveHlSZXZva2U6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRv
ciYgdmlzaXRvcikKIHsKICAgICBQcm94eVJldm9rZSogdGhpc09iamVjdCA9IGpzQ2FzdDxQcm94
eVJldm9rZSo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVj
dCwgaW5mbygpKTsKQEAgLTc4LDQgKzc5LDYgQEAgdm9pZCBQcm94eVJldm9rZTo6dmlzaXRDaGls
ZHJlbihKU0NlbGwqIAogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fcHJveHkpOwog
fQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oUHJveHlSZXZva2UpOworCiB9IC8vIG5hbWVzcGFj
ZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3h5UmV2b2tlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJveHlSZXZva2Uu
aAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJv
eHlSZXZva2UuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTYtMjAxOSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTUyLDcgKzUyLDcgQEAgcHVibGljOgogICAg
IH0KIAogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBQcm94eU9iamVjdCopOwotICAgIHN0
YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNM
QVJFX1ZJU0lUX0NISUxEUkVOOwogICAgIEpTVmFsdWUgcHJveHkoKSB7IHJldHVybiBtX3Byb3h5
LmdldCgpOyB9CiAgICAgdm9pZCBzZXRQcm94eVRvTnVsbChWTSYgdm0pIHsgcmV0dXJuIG1fcHJv
eHkuc2V0KHZtLCB0aGlzLCBqc051bGwoKSk7IH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvUmVnRXhwQ2FjaGVkUmVzdWx0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBDYWNoZWRSZXN1bHQuY3BwCShyZXZpc2lvbiAy
NzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBDYWNoZWRSZXN1
bHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMiwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTItMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMxLDcgKzMxLDggQEAKIAogbmFtZXNwYWNlIEpT
QyB7CiAKLXZvaWQgUmVnRXhwQ2FjaGVkUmVzdWx0Ojp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRv
ciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFJlZ0V4cENhY2hl
ZFJlc3VsdDo6dmlzaXRBZ2dyZWdhdGVJbXBsKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgdmlz
aXRvci5hcHBlbmQobV9sYXN0SW5wdXQpOwogICAgIHZpc2l0b3IuYXBwZW5kKG1fbGFzdFJlZ0V4
cCk7CkBAIC00Myw2ICs0NCw4IEBAIHZvaWQgUmVnRXhwQ2FjaGVkUmVzdWx0Ojp2aXNpdEFnZ3Jl
Z2F0ZSgKICAgICB9CiB9CiAKK0RFRklORV9WSVNJVF9BR0dSRUdBVEUoUmVnRXhwQ2FjaGVkUmVz
dWx0KTsKKwogSlNBcnJheSogUmVnRXhwQ2FjaGVkUmVzdWx0OjpsYXN0UmVzdWx0KEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTT2JqZWN0KiBvd25lcikKIHsKICAgICBWTSYgdm0gPSBn
bG9iYWxPYmplY3QtPnZtKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9S
ZWdFeHBDYWNoZWRSZXN1bHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9SZWdFeHBDYWNoZWRSZXN1bHQuaAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwQ2FjaGVkUmVzdWx0LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtNjUsNyArNjUsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX3JlaWZpZWQg
PyBtX3JlaWZpZWRJbnB1dC5nZXQoKSA6IG1fbGFzdElucHV0LmdldCgpOwogICAgIH0KIAotICAg
IHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0FH
R1JFR0FURTsKIAogICAgIC8vIG1fbGFzdFJlZ0V4cCB3b3VsZCBiZSBudWxscHRyIHdoZW4gUmVn
RXhwQ2FjaGVkUmVzdWx0IGlzIG5vdCByZWlmaWVkLgogICAgIC8vIElmIHdlIGZpbmQgbV9sYXN0
UmVnRXhwIGlzIG51bGxwdHIsIGl0IG1lYW5zIHRoaXMgc2hvdWxkIGhvbGQgdGhlIGVtcHR5IFJl
Z0V4cC4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cEdsb2JhbERh
dGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4
cEdsb2JhbERhdGEuY3BwCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9SZWdFeHBHbG9iYWxEYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE5LTIwMjEgQXBwbGUgSW5jLiBBbGwgUmlnaHRz
IFJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMCwxMSArMzAs
MTQgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLXZvaWQgUmVnRXhwR2xvYmFsRGF0YTo6dmlzaXRB
Z2dyZWdhdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
Pgordm9pZCBSZWdFeHBHbG9iYWxEYXRhOjp2aXNpdEFnZ3JlZ2F0ZUltcGwoVmlzaXRvciYgdmlz
aXRvcikKIHsKICAgICBtX2NhY2hlZFJlc3VsdC52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKIH0K
IAorREVGSU5FX1ZJU0lUX0FHR1JFR0FURShSZWdFeHBHbG9iYWxEYXRhKTsKKwogSlNWYWx1ZSBS
ZWdFeHBHbG9iYWxEYXRhOjpnZXRCYWNrcmVmKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IHVuc2lnbmVkIGkpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwR2xvYmFsRGF0YS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cEdsb2JhbERhdGEuaAko
cmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhw
R2xvYmFsRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTktMjAyMSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQxLDcgKzQxLDcgQEAgcHVibGljOgogICAgIHZv
aWQgc2V0SW5wdXQoSlNHbG9iYWxPYmplY3QqLCBKU1N0cmluZyopOwogICAgIEpTU3RyaW5nKiBp
bnB1dCgpIHsgcmV0dXJuIG1fY2FjaGVkUmVzdWx0LmlucHV0KCk7IH0KIAotICAgIHZvaWQgdmlz
aXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0FHR1JFR0FURTsK
IAogICAgIEpTVmFsdWUgZ2V0QmFja3JlZihKU0dsb2JhbE9iamVjdCosIHVuc2lnbmVkKTsKICAg
ICBKU1ZhbHVlIGdldExhc3RQYXJlbihKU0dsb2JhbE9iamVjdCopOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBPYmplY3QuY3BwCShyZXZpc2lvbiAyNzI5
MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBPYmplY3QuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTkt
MjAwMCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQotICogIENvcHlyaWdodCAoQykgMjAw
My0yMDE5IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMp
IDIwMDMtMjAyMSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
ICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwg
UHVibGljCkBAIC00Niw3ICs0Niw4IEBAIHZvaWQgUmVnRXhwT2JqZWN0OjpmaW5pc2hDcmVhdGlv
bihWTSYgdm0KICAgICBBU1NFUlQodHlwZSgpID09IFJlZ0V4cE9iamVjdFR5cGUpOwogfQogCi12
b2lkIFJlZ0V4cE9iamVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9y
JiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgUmVnRXhwT2JqZWN0
Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAg
ICAgUmVnRXhwT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PFJlZ0V4cE9iamVjdCo+KGNlbGwp
OwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAg
LTU1LDYgKzU2LDggQEAgdm9pZCBSZWdFeHBPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKgog
ICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fbGFzdEluZGV4KTsKIH0KIAorREVGSU5F
X1ZJU0lUX0NISUxEUkVOKFJlZ0V4cE9iamVjdCk7CisKIGJvb2wgUmVnRXhwT2JqZWN0OjpnZXRP
d25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqIG9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQogewog
ICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1JlZ0V4cE9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1JlZ0V4cE9iamVjdC5oCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBPYmplY3QuaAkod29ya2luZyBjb3B5KQpA
QCAtMSw2ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDAgSGFycmkgUG9y
dGVuIChwb3J0ZW5Aa2RlLm9yZykKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAxOSBBcHBsZSBJ
bmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMjEgQXBw
bGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwpAQCAtMTMz
LDcgKzEzMyw3IEBAIHByaXZhdGU6CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgUmVnRXhwT2JqZWN0
KFZNJiwgU3RydWN0dXJlKiwgUmVnRXhwKik7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBm
aW5pc2hDcmVhdGlvbihWTSYpOwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0Nl
bGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBi
b29sIGxhc3RJbmRleElzV3JpdGFibGUoKSBjb25zdAogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1NhbXBsaW5nUHJvZmlsZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NhbXBsaW5nUHJvZmlsZXIuY3BwCShyZXZpc2lv
biAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TYW1wbGluZ1Byb2Zp
bGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjUyLDcgKzY1Miw3IEBAIHZvaWQgU2FtcGxpbmdQ
cm9maWxlcjo6cHJvY2Vzc1VudmVyaWZpZWQKICAgICBtX3VucHJvY2Vzc2VkU3RhY2tUcmFjZXMu
Y2xlYXIoKTsKIH0KIAotdm9pZCBTYW1wbGluZ1Byb2ZpbGVyOjp2aXNpdChTbG90VmlzaXRvciYg
dmlzaXRvcikKK3ZvaWQgU2FtcGxpbmdQcm9maWxlcjo6dmlzaXQoQWJzdHJhY3RTbG90VmlzaXRv
ciYgdmlzaXRvcikKIHsKICAgICBSRUxFQVNFX0FTU0VSVChtX2xvY2suaXNMb2NrZWQoKSk7CiAg
ICAgZm9yIChKU0NlbGwqIGNlbGwgOiBtX2xpdmVDZWxsUG9pbnRlcnMpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TYW1wbGluZ1Byb2ZpbGVyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5oCShyZXZpc2lv
biAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TYW1wbGluZ1Byb2Zp
bGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMTcxLDcgKzE3MSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIG5v
dGljZUpTTG9ja0FjcXVpc2l0aW9uKCk7CiAgICAgdm9pZCBub3RpY2VWTUVudHJ5KCk7CiAgICAg
dm9pZCBzaHV0ZG93bigpOwotICAgIHZvaWQgdmlzaXQoU2xvdFZpc2l0b3ImKTsKKyAgICB2b2lk
IHZpc2l0KEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKICAgICBMb2NrJiBnZXRMb2NrKCkgeyByZXR1
cm4gbV9sb2NrOyB9CiAgICAgdm9pZCBzZXRUaW1pbmdJbnRlcnZhbChTZWNvbmRzIGludGVydmFs
KSB7IG1fdGltaW5nSW50ZXJ2YWwgPSBpbnRlcnZhbDsgfQogICAgIEpTX0VYUE9SVF9QUklWQVRF
IHZvaWQgc3RhcnQoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3Bl
ZEFyZ3VtZW50cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU2NvcGVkQXJndW1lbnRzLmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVkQXJndW1lbnRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxOCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTk4LDcgKzk4LDggQEAgU2NvcGVkQXJndW1lbnRzKiBTY29wZWRBcmd1bWVudHM6OmNyZWF0ZQog
ICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQgU2NvcGVkQXJndW1lbnRzOjp2aXNpdENoaWxk
cmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBWaXNpdG9yPgordm9pZCBTY29wZWRBcmd1bWVudHM6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2Vs
bCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBTY29wZWRBcmd1bWVudHMqIHRoaXNP
YmplY3QgPSBzdGF0aWNfY2FzdDxTY29wZWRBcmd1bWVudHMqPihjZWxsKTsKICAgICBBU1NFUlRf
R0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC0xMTUsNiArMTE2LDgg
QEAgdm9pZCBTY29wZWRBcmd1bWVudHM6OnZpc2l0Q2hpbGRyZW4oSlNDZQogICAgIH0KIH0KIAor
REVGSU5FX1ZJU0lUX0NISUxEUkVOKFNjb3BlZEFyZ3VtZW50cyk7CisKIFN0cnVjdHVyZSogU2Nv
cGVkQXJndW1lbnRzOjpjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKIHsKICAgICByZXR1cm4gU3RydWN0dXJlOjpj
cmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhTY29wZWRBcmd1bWVu
dHNUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TY29wZWRBcmd1bWVudHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TY29wZWRBcmd1bWVudHMuaAkocmV2aXNpb24gMjcyOTAyKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVkQXJndW1lbnRzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTkg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIw
MjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC02Myw5ICs2Myw5IEBAIHB1YmxpYzoKICAgICAKICAgICAvLyBDcmVhdGVz
IGFuIGFyZ3VtZW50cyBvYmplY3QgYnkgY29weWluZyB0aGUgYXJndW1lbnRzIGZyb20gYSB3ZWxs
LWRlZmluZWQgc3RhY2sgbG9jYXRpb24uCiAgICAgc3RhdGljIFNjb3BlZEFyZ3VtZW50cyogY3Jl
YXRlQnlDb3B5aW5nRnJvbShWTSYsIFN0cnVjdHVyZSosIFJlZ2lzdGVyKiBhcmd1bWVudHNTdGFy
dCwgdW5zaWduZWQgdG90YWxMZW5ndGgsIEpTRnVuY3Rpb24qIGNhbGxlZSwgU2NvcGVkQXJndW1l
bnRzVGFibGUqLCBKU0xleGljYWxFbnZpcm9ubWVudCopOwotICAgIAotICAgIHN0YXRpYyB2b2lk
IHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKLSAgICAKKworICAgIERFQ0xB
UkVfVklTSVRfQ0hJTERSRU47CisKICAgICB1aW50MzJfdCBpbnRlcm5hbExlbmd0aCgpIGNvbnN0
CiAgICAgewogICAgICAgICByZXR1cm4gbV90b3RhbExlbmd0aDsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1NpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TaW1wbGVUeXBlZEFycmF5Q29u
dHJvbGxlci5jcHAJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1NpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC02Miw3ICs2Miw3IEBAIGJvb2wgU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXI6OmlzQXRvbWkK
ICAgICByZXR1cm4gbV9hbGxvd0F0b21pY3NXYWl0OwogfQogCi1ib29sIFNpbXBsZVR5cGVkQXJy
YXlDb250cm9sbGVyOjpKU0FycmF5QnVmZmVyT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJv
b3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgSlNDOjpTbG90Vmlz
aXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikKK2Jvb2wgU2ltcGxlVHlwZWRBcnJh
eUNvbnRyb2xsZXI6OkpTQXJyYXlCdWZmZXJPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9v
dHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBKU0M6OkFic3RyYWN0
U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCiB7CiAgICAgaWYgKFVO
TElLRUxZKHJlYXNvbikpCiAgICAgICAgICpyZWFzb24gPSAiSlNBcnJheUJ1ZmZlciBpcyBvcGFx
dWUgcm9vdCI7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TaW1wbGVUeXBl
ZEFycmF5Q29udHJvbGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1NpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyLmgJKHJldmlzaW9uIDI3MjkwMikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVy
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
My0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtNTgsNyArNTgsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIGNs
YXNzIEpTQXJyYXlCdWZmZXJPd25lciBmaW5hbCA6IHB1YmxpYyBXZWFrSGFuZGxlT3duZXIgewog
ICAgIHB1YmxpYzoKLSAgICAgICAgYm9vbCBpc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6
OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0LCBTbG90VmlzaXRvciYsIGNvbnN0
IGNoYXIqKiByZWFzb24pIGZpbmFsOworICAgICAgICBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1
ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIEFic3RyYWN0
U2xvdFZpc2l0b3ImLCBjb25zdCBjaGFyKiogcmVhc29uKSBmaW5hbDsKICAgICAgICAgdm9pZCBm
aW5hbGl6ZShKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0KSBmaW5hbDsK
ICAgICB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TbWFsbFN0cmlu
Z3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NtYWxs
U3RyaW5ncy5jcHAJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1NtYWxsU3RyaW5ncy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDEwIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDIxIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBS
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjYsNyArNjYsOCBA
QCB2b2lkIFNtYWxsU3RyaW5nczo6aW5pdGlhbGl6ZUNvbW1vblN0cmluCiAgICAgc2V0SXNJbml0
aWFsaXplZCh0cnVlKTsKIH0KIAotdm9pZCBTbWFsbFN0cmluZ3M6OnZpc2l0U3Ryb25nUmVmZXJl
bmNlcyhTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2
b2lkIFNtYWxsU3RyaW5nczo6dmlzaXRTdHJvbmdSZWZlcmVuY2VzKFZpc2l0b3ImIHZpc2l0b3Ip
CiB7CiAgICAgbV9uZWVkc1RvQmVWaXNpdGVkID0gZmFsc2U7CiAgICAgdmlzaXRvci5hcHBlbmRV
bmJhcnJpZXJlZChtX2VtcHR5U3RyaW5nKTsKQEAgLTg0LDYgKzg1LDkgQEAgdm9pZCBTbWFsbFN0
cmluZ3M6OnZpc2l0U3Ryb25nUmVmZXJlbmNlcwogICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVy
ZWQobV9va1N0cmluZyk7CiB9CiAKK3RlbXBsYXRlIHZvaWQgU21hbGxTdHJpbmdzOjp2aXNpdFN0
cm9uZ1JlZmVyZW5jZXMoQWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBTbWFs
bFN0cmluZ3M6OnZpc2l0U3Ryb25nUmVmZXJlbmNlcyhTbG90VmlzaXRvciYpOworCiBTbWFsbFN0
cmluZ3M6On5TbWFsbFN0cmluZ3MoKQogewogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU21hbGxTdHJpbmdzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvU21hbGxTdHJpbmdzLmgJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1NtYWxsU3RyaW5ncy5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOC0yMDE5IEFwcGxlIEluYy4gQWxs
IFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDIxIEFwcGxlIEluYy4g
QWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
NDksOSArNDksOSBAQCBjbGFzcyBTdHJpbmdJbXBsOwogCiBuYW1lc3BhY2UgSlNDIHsKIAorY2xh
c3MgQWJzdHJhY3RTbG90VmlzaXRvcjsKIGNsYXNzIFZNOwogY2xhc3MgSlNTdHJpbmc7Ci1jbGFz
cyBTbG90VmlzaXRvcjsKIAogc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBtYXhTaW5nbGVDaGFy
YWN0ZXJTdHJpbmcgPSAweEZGOwogCkBAIC03OCw3ICs3OCw3IEBAIHB1YmxpYzoKICAgICBKU1N0
cmluZyoqIHNpbmdsZUNoYXJhY3RlclN0cmluZ3MoKSB7IHJldHVybiAmbV9zaW5nbGVDaGFyYWN0
ZXJTdHJpbmdzWzBdOyB9CiAKICAgICB2b2lkIGluaXRpYWxpemVDb21tb25TdHJpbmdzKFZNJik7
Ci0gICAgdm9pZCB2aXNpdFN0cm9uZ1JlZmVyZW5jZXMoU2xvdFZpc2l0b3ImKTsKKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIHZpc2l0U3Ryb25nUmVmZXJlbmNlcyhWaXNpdG9y
Jik7CiAKICNkZWZpbmUgSlNDX0NPTU1PTl9TVFJJTkdTX0FDQ0VTU09SX0RFRklOSVRJT04obmFt
ZSkgXAogICAgIEpTU3RyaW5nKiBuYW1lIyNTdHJpbmcoKSBjb25zdCAgICAgICAgICAgICAgICAg
ICBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TcGFyc2VBcnJheVZhbHVl
TWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TcGFy
c2VBcnJheVZhbHVlTWFwLmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU3BhcnNlQXJyYXlWYWx1ZU1hcC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTcgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0yMTAsNyArMjEwLDggQEAgSlNWYWx1ZSBTcGFyc2VBcnJheUVudHJ5OjpnZXROb25TcGFyc2VN
bwogICAgIHJldHVybiBCYXNlOjpnZXQoKTsKIH0KIAotdm9pZCBTcGFyc2VBcnJheVZhbHVlTWFw
Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1w
bGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBTcGFyc2VBcnJheVZhbHVlTWFwOjp2aXNpdENo
aWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgU3BhcnNl
QXJyYXlWYWx1ZU1hcCogdGhpc09iamVjdCA9IGpzQ2FzdDxTcGFyc2VBcnJheVZhbHVlTWFwKj4o
Y2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkp
OwpAQCAtMjIzLDUgKzIyNCw3IEBAIHZvaWQgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6dmlzaXRDaGls
ZHJlbigKICAgICB2aXNpdG9yLnJlcG9ydEV4dHJhTWVtb3J5VmlzaXRlZCh0aGlzT2JqZWN0LT5t
X3JlcG9ydGVkQ2FwYWNpdHkgKiBzaXplb2YoTWFwOjpLZXlWYWx1ZVBhaXJUeXBlKSk7CiB9CiAK
K0RFRklORV9WSVNJVF9DSElMRFJFTihTcGFyc2VBcnJheVZhbHVlTWFwKTsKKwogfSAvLyBuYW1l
c3BhY2UgSlNDCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NwYXJzZUFy
cmF5VmFsdWVNYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TcGFyc2VBcnJheVZhbHVlTWFwLmgJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1NwYXJzZUFycmF5VmFsdWVNYXAuaAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxOSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAyMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTExNSw3ICsxMTUsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgc3RhdGljIFN0cnVjdHVyZSog
Y3JlYXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlIHByb3RvdHlwZSk7
CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7
CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIGJvb2wgc3BhcnNlTW9kZSgpCiAg
ICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RhY2tGcmFtZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RhY2tGcmFtZS5j
cHAJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0
YWNrRnJhbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxNi0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTQxLDEzICsxNDEsNSBAQCBTdHJpbmcg
U3RhY2tGcmFtZTo6dG9TdHJpbmcoVk0mIHZtKSBjb25zCiAgICAgcmV0dXJuIHRyYWNlQnVpbGQu
dG9TdHJpbmcoKS5pbXBsKCk7CiB9CiAKLXZvaWQgU3RhY2tGcmFtZTo6dmlzaXRDaGlsZHJlbihT
bG90VmlzaXRvciYgdmlzaXRvcikKLXsKLSAgICBpZiAobV9jYWxsZWUpCi0gICAgICAgIHZpc2l0
b3IuYXBwZW5kKG1fY2FsbGVlKTsKLSAgICBpZiAobV9jb2RlQmxvY2spCi0gICAgICAgIHZpc2l0
b3IuYXBwZW5kKG1fY29kZUJsb2NrKTsKLX0KLQogfSAvLyBuYW1lc3BhY2UgSlNDCiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0YWNrRnJhbWUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdGFja0ZyYW1lLmgJKHJldmlzaW9uIDI3
MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0YWNrRnJhbWUuaAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAx
NyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYt
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTI2LDYgKzI2LDcgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAi
SGVhcC5oIgorI2luY2x1ZGUgIlNsb3RWaXNpdG9yTWFjcm9zLmgiCiAjaW5jbHVkZSAiVk0uaCIK
ICNpbmNsdWRlICJXYXNtSW5kZXhPck5hbWUuaCIKICNpbmNsdWRlICJXcml0ZUJhcnJpZXIuaCIK
QEAgLTM1LDcgKzM2LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIENvZGVCbG9jazsKIGNs
YXNzIEpTT2JqZWN0OwotY2xhc3MgU2xvdFZpc2l0b3I7CiAKIGNsYXNzIFN0YWNrRnJhbWUgewog
cHVibGljOgpAQCAtNTcsOCArNTcsMTYgQEAgcHVibGljOgogICAgICAgICBBU1NFUlQoaGFzQnl0
ZWNvZGVJbmRleCgpKTsKICAgICAgICAgcmV0dXJuIG1fYnl0ZWNvZGVJbmRleDsKICAgICB9Ci0g
ICAgCi0gICAgdm9pZCB2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CisKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBWaXNpdG9yPgorICAgIHZvaWQgdmlzaXRDaGlsZHJlbihWaXNpdG9yJiB2aXNp
dG9yKQorICAgIHsKKyAgICAgICAgaWYgKG1fY2FsbGVlKQorICAgICAgICAgICAgdmlzaXRvci5h
cHBlbmQobV9jYWxsZWUpOworICAgICAgICBpZiAobV9jb2RlQmxvY2spCisgICAgICAgICAgICB2
aXNpdG9yLmFwcGVuZChtX2NvZGVCbG9jayk7CisgICAgfQorCiAgICAgYm9vbCBpc01hcmtlZChW
TSYgdm0pIGNvbnN0IHsgcmV0dXJuICghbV9jYWxsZWUgfHwgdm0uaGVhcC5pc01hcmtlZChtX2Nh
bGxlZS5nZXQoKSkpICYmICghbV9jb2RlQmxvY2sgfHwgdm0uaGVhcC5pc01hcmtlZChtX2NvZGVC
bG9jay5nZXQoKSkpOyB9CiAKIHByaXZhdGU6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TdHJ1Y3R1cmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDIwIEFsZXhleSBTaHZheWthIDxz
aHZhaWthbGVzaEBnbWFpbC5jb20+LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMTI2OCw3ICsxMjY4
LDggQEAgdm9pZCBTdHJ1Y3R1cmU6OmRpZFRyYW5zaXRpb25Gcm9tVGhpc1N0cgogICAgICAgICBt
X3RyYW5zaXRpb25XYXRjaHBvaW50U2V0LmZpcmVBbGwodm0oKSwgU3RydWN0dXJlRmlyZURldGFp
bCh0aGlzKSk7CiB9CiAKLXZvaWQgU3RydWN0dXJlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2Vs
bCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9p
ZCBTdHJ1Y3R1cmU6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlz
aXRvcikKIHsKICAgICBTdHJ1Y3R1cmUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8U3RydWN0dXJlKj4o
Y2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkp
OwpAQCAtMTI5MCwzMiArMTI5MSwzOCBAQCB2b2lkIFN0cnVjdHVyZTo6dmlzaXRDaGlsZHJlbihK
U0NlbGwqIGNlCiAgICAgICAgIC8vIE5PVEU6IFRoaXMgY2FuIGludGVybGVhdmUgaW4gcGluKCks
IGluIHdoaWNoIGNhc2UgaXQgbWF5IHNlZSBhIG51bGwgcHJvcGVydHkgdGFibGUuCiAgICAgICAg
IC8vIFRoYXQncyBmaW5lLCBiZWNhdXNlIHRoZW4gdGhlIGJhcnJpZXIgd2lsbCBmaXJlIGFuZCB3
ZSB3aWxsIHNjYW4gdGhpcyBhZ2Fpbi4KICAgICAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVj
dC0+bV9wcm9wZXJ0eVRhYmxlVW5zYWZlKTsKLSAgICB9IGVsc2UgaWYgKHZpc2l0b3IuaXNBbmFs
eXppbmdIZWFwKCkpCisgICAgfSBlbHNlIGlmICh2aXNpdG9yLnZtKCkuaXNBbmFseXppbmdIZWFw
KCkpCiAgICAgICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fcHJvcGVydHlUYWJsZVVu
c2FmZSk7CiAgICAgZWxzZSBpZiAodGhpc09iamVjdC0+bV9wcm9wZXJ0eVRhYmxlVW5zYWZlKQog
ICAgICAgICB0aGlzT2JqZWN0LT5tX3Byb3BlcnR5VGFibGVVbnNhZmUuY2xlYXIoKTsKIH0KIAot
Ym9vbCBTdHJ1Y3R1cmU6OmlzQ2hlYXBEdXJpbmdHQyhWTSYgdm0pCitERUZJTkVfVklTSVRfQ0hJ
TERSRU4oU3RydWN0dXJlKTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK0FMV0FZU19J
TkxJTkUgYm9vbCBTdHJ1Y3R1cmU6OmlzQ2hlYXBEdXJpbmdHQyhWaXNpdG9yJiB2aXNpdG9yKQog
ewogICAgIC8vIEZJWE1FOiBXZSBjb3VsZCBtYWtlIHRoaXMgZXZlbiBzYWZlciBieSByZXR1cm5p
bmcgZmFsc2UgaWYgdGhpcyBzdHJ1Y3R1cmUncyBwcm9wZXJ0eSB0YWJsZQogICAgIC8vIGhhcyBh
bnkgbGFyZ2UgcHJvcGVydHkgbmFtZXMuCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE1NzMzNAogICAgIAotICAgIHJldHVybiAoIW1fZ2xvYmFsT2JqZWN0
IHx8IHZtLmhlYXAuaXNNYXJrZWQobV9nbG9iYWxPYmplY3QuZ2V0KCkpKQotICAgICAgICAmJiAo
aGFzUG9seVByb3RvKCkgfHwgIXN0b3JlZFByb3RvdHlwZU9iamVjdCgpIHx8IHZtLmhlYXAuaXNN
YXJrZWQoc3RvcmVkUHJvdG90eXBlT2JqZWN0KCkpKTsKKyAgICByZXR1cm4gKCFtX2dsb2JhbE9i
amVjdCB8fCB2aXNpdG9yLmlzTWFya2VkKG1fZ2xvYmFsT2JqZWN0LmdldCgpKSkKKyAgICAgICAg
JiYgKGhhc1BvbHlQcm90bygpIHx8ICFzdG9yZWRQcm90b3R5cGVPYmplY3QoKSB8fCB2aXNpdG9y
LmlzTWFya2VkKHN0b3JlZFByb3RvdHlwZU9iamVjdCgpKSk7CiB9CiAKLWJvb2wgU3RydWN0dXJl
OjptYXJrSWZDaGVhcChTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZp
c2l0b3I+Citib29sIFN0cnVjdHVyZTo6bWFya0lmQ2hlYXAoVmlzaXRvciYgdmlzaXRvcikKIHsK
LSAgICBWTSYgdm0gPSB2aXNpdG9yLnZtKCk7Ci0gICAgaWYgKCFpc0NoZWFwRHVyaW5nR0Modm0p
KQotICAgICAgICByZXR1cm4gdm0uaGVhcC5pc01hcmtlZCh0aGlzKTsKLSAgICAKKyAgICBpZiAo
IWlzQ2hlYXBEdXJpbmdHQyh2aXNpdG9yKSkKKyAgICAgICAgcmV0dXJuIHZpc2l0b3IuaXNNYXJr
ZWQodGhpcyk7CisKICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKHRoaXMpOwogICAgIHJl
dHVybiB0cnVlOwogfQogCit0ZW1wbGF0ZSBib29sIFN0cnVjdHVyZTo6bWFya0lmQ2hlYXAoQWJz
dHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgYm9vbCBTdHJ1Y3R1cmU6Om1hcmtJZkNoZWFw
KFNsb3RWaXNpdG9yJik7CisKIFJlZjxTdHJ1Y3R1cmVTaGFwZT4gU3RydWN0dXJlOjp0b1N0cnVj
dHVyZVNoYXBlKEpTVmFsdWUgdmFsdWUsIGJvb2wmIHNhd1BvbHlQcm90b1N0cnVjdHVyZSkKIHsK
ICAgICBSZWY8U3RydWN0dXJlU2hhcGU+IGJhc2VTaGFwZSA9IFN0cnVjdHVyZVNoYXBlOjpjcmVh
dGUoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCShy
ZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1
cmUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDgtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDgtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTYwLDcgKzYwLDYgQEAgY2xhc3MgUHJvcGVydHlOYW1l
QXJyYXlEYXRhOwogY2xhc3MgUHJvcGVydHlUYWJsZTsKIGNsYXNzIFN0cnVjdHVyZUNoYWluOwog
Y2xhc3MgU3RydWN0dXJlU2hhcGU7Ci1jbGFzcyBTbG90VmlzaXRvcjsKIGNsYXNzIEpTU3RyaW5n
Owogc3RydWN0IER1bXBDb250ZXh0Owogc3RydWN0IEhhc2hUYWJsZTsKQEAgLTMxMCw3ICszMDks
NyBAQCBwdWJsaWM6CiAgICAgSlNWYWx1ZSBwcm90b3R5cGVGb3JMb29rdXAoSlNHbG9iYWxPYmpl
Y3QqLCBKU0NlbGwqIGJhc2UpIGNvbnN0OwogICAgIFN0cnVjdHVyZUNoYWluKiBwcm90b3R5cGVD
aGFpbihWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNPYmplY3QqIGJhc2UpIGNvbnN0OwogICAgIFN0
cnVjdHVyZUNoYWluKiBwcm90b3R5cGVDaGFpbihKU0dsb2JhbE9iamVjdCosIEpTT2JqZWN0KiBi
YXNlKSBjb25zdDsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RW
aXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKICAgICAKICAgICAvLyBBIFN0
cnVjdHVyZSBpcyBjaGVhcCB0byBtYXJrIGR1cmluZyBHQyBpZiBkb2luZyBzbyB3b3VsZCBvbmx5
IGFkZCBhIHNtYWxsIGFuZCBib3VuZGVkIGFtb3VudAogICAgIC8vIHRvIG91ciBoZWFwIGZvb3Rw
cmludC4gRm9yIGV4YW1wbGUsIGlmIHRoZSBzdHJ1Y3R1cmUgcmVmZXJzIHRvIGEgZ2xvYmFsIG9i
amVjdCB0aGF0IGlzIG5vdApAQCAtMzE4LDEwICszMTcsMTAgQEAgcHVibGljOgogICAgIC8vIGlu
Y3JlYXNlIGluIGZvb3RwcmludCBiZWNhdXNlIG5vIG90aGVyIG9iamVjdCByZWZlcnMgdG8gdGhh
dCBnbG9iYWwgb2JqZWN0LiBUaGlzIG1ldGhvZAogICAgIC8vIHJldHVybnMgdHJ1ZSBpZiBhbGwg
dXNlci1jb250cm9sbGVkIChhbmQgaGVuY2UgdW5ib3VuZGVkIGluIHNpemUpIG9iamVjdHMgcmVm
ZXJlbmNlZCBmcm9tIHRoZQogICAgIC8vIFN0cnVjdHVyZSBhcmUgYWxyZWFkeSBtYXJrZWQuCi0g
ICAgYm9vbCBpc0NoZWFwRHVyaW5nR0MoVk0mKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNp
dG9yPiBib29sIGlzQ2hlYXBEdXJpbmdHQyhWaXNpdG9yJik7CiAgICAgCiAgICAgLy8gUmV0dXJu
cyB0cnVlIGlmIHRoaXMgc3RydWN0dXJlIGlzIG5vdyBtYXJrZWQuCi0gICAgYm9vbCBtYXJrSWZD
aGVhcChTbG90VmlzaXRvciYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IGJvb2wg
bWFya0lmQ2hlYXAoVmlzaXRvciYpOwogICAgIAogICAgIGJvb2wgaGFzUmFyZURhdGEoKSBjb25z
dAogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUNo
YWluLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1
Y3R1cmVDaGFpbi5jcHAJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1N0cnVjdHVyZUNoYWluLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02Niw3ICs2Niw4IEBA
IHZvaWQgU3RydWN0dXJlQ2hhaW46OmZpbmlzaENyZWF0aW9uKFZNJiAKICAgICB9CiB9CiAKLXZv
aWQgU3RydWN0dXJlQ2hhaW46OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRv
ciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFN0cnVjdHVyZUNo
YWluOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7
CiAgICAgU3RydWN0dXJlQ2hhaW4qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8U3RydWN0dXJlQ2hhaW4q
PihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8o
KSk7CkBAIC04MCw0ICs4MSw2IEBAIHZvaWQgU3RydWN0dXJlQ2hhaW46OnZpc2l0Q2hpbGRyZW4o
SlNDZWwKICAgICB9CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihTdHJ1Y3R1cmVDaGFpbik7
CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU3RydWN0dXJlQ2hhaW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TdHJ1Y3R1cmVDaGFpbi5oCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVDaGFpbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOC0yMDE5IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
NTEsNyArNTEsNyBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgU3RydWN0dXJlQ2hhaW4qIGNyZWF0
ZShWTSYsIEpTT2JqZWN0Kik7CiAgICAgU3RydWN0dXJlSUQqIGhlYWQoKSB7IHJldHVybiBtX3Zl
Y3Rvci5nZXQoKTsgfQotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xv
dFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgc3RhdGljIFN0
cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCiAgICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvU3RydWN0dXJlUmFyZURhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZVJhcmVEYXRhLmNwcAkocmV2aXNpb24gMjcy
OTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlUmFyZURhdGEu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjcsNyArNjcsOCBAQCBTdHJ1Y3R1cmVSYXJlRGF0YTo6
U3RydWN0dXJlUmFyZURhdGEoVk0mCiAgICAgICAgIG1fcHJldmlvdXMuc2V0KHZtLCB0aGlzLCBw
cmV2aW91cyk7CiB9CiAKLXZvaWQgU3RydWN0dXJlUmFyZURhdGE6OnZpc2l0Q2hpbGRyZW4oSlND
ZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0
b3I+Cit2b2lkIFN0cnVjdHVyZVJhcmVEYXRhOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNl
bGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgU3RydWN0dXJlUmFyZURhdGEqIHRoaXNPYmpl
Y3QgPSBqc0Nhc3Q8U3RydWN0dXJlUmFyZURhdGEqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JK
RUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC04Niw2ICs4Nyw4IEBAIHZvaWQg
U3RydWN0dXJlUmFyZURhdGE6OnZpc2l0Q2hpbGRyZW4oSlMKICAgICB9CiB9CiAKK0RFRklORV9W
SVNJVF9DSElMRFJFTihTdHJ1Y3R1cmVSYXJlRGF0YSk7CisKIC8vIC0tLS0tLS0tLS0tIENhY2hl
ZCBzcGVjaWFsIHByb3BlcnRpZXMgaGVscGVyIHdhdGNocG9pbnQgY2xhc3NlcyAtLS0tLS0tLS0t
LQogCiBjbGFzcyBDYWNoZWRTcGVjaWFsUHJvcGVydHlBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlW
YWx1ZVdhdGNocG9pbnQgZmluYWwgOiBwdWJsaWMgQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFs
dWVXYXRjaHBvaW50QmFzZSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
dHJ1Y3R1cmVSYXJlRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1N0cnVjdHVyZVJhcmVEYXRhLmgJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZVJhcmVEYXRhLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjAgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC02OCw3ICs2OCw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVl
ZHNEZXN0cnVjdGlvbiA9IHRydWU7CiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsK
IAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsK
KyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgc3RhdGljIFN0cnVjdHVyZSogY3Jl
YXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlIHByb3RvdHlwZSk7CiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJvbFRhYmxlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TeW1ib2xUYWJsZS5jcHAJ
KHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJv
bFRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTItMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTItMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTkyLDcgKzkyLDggQEAgdm9pZCBTeW1ib2xU
YWJsZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZt
KTsKIH0KIAotdm9pZCBTeW1ib2xUYWJsZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIHRoaXNDZWxs
LCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lk
IFN5bWJvbFRhYmxlOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIHRoaXNDZWxsLCBWaXNpdG9y
JiB2aXNpdG9yKQogewogICAgIFN5bWJvbFRhYmxlKiB0aGlzU3ltYm9sVGFibGUgPSBqc0Nhc3Q8
U3ltYm9sVGFibGUqPih0aGlzQ2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0
aGlzU3ltYm9sVGFibGUsIGluZm8oKSk7CkBAIC0xMDgsNiArMTA5LDggQEAgdm9pZCBTeW1ib2xU
YWJsZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIAogICAgIHRoaXNTeW1ib2xUYWJsZS0+bV9sb2Nh
bFRvRW50cnkgPSBudWxscHRyOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oU3ltYm9sVGFi
bGUpOworCiBjb25zdCBTeW1ib2xUYWJsZTo6TG9jYWxUb0VudHJ5VmVjJiBTeW1ib2xUYWJsZTo6
bG9jYWxUb0VudHJ5KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYpCiB7CiAgICAgaWYgKFVOTElL
RUxZKCFtX2xvY2FsVG9FbnRyeSkpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1N5bWJvbFRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU3ltYm9sVGFibGUuaAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTczMyw3ICs3
MzMsNyBAQCBwdWJsaWM6CiAgICAgICAgIG1fc2luZ2xldG9uLm5vdGlmeVdyaXRlKHZtLCB0aGlz
LCBzY29wZSwgcmVhc29uKTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVu
KEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAog
ICAgIERFQ0xBUkVfRVhQT1JUX0lORk87CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1R5cGVQcm9maWxlckxvZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvVHlwZVByb2ZpbGVyTG9nLmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZVByb2ZpbGVyTG9nLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxOSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTEyNCw3ICsxMjQsNyBAQCB2b2lkIFR5cGVQcm9maWxlckxvZzo6cHJvY2Vz
c0xvZ0VudHJpZXMoCiAgICAgfQogfQogCi12b2lkIFR5cGVQcm9maWxlckxvZzo6dmlzaXQoU2xv
dFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIFR5cGVQcm9maWxlckxvZzo6dmlzaXQoQWJzdHJhY3RT
bG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBmb3IgKExvZ0VudHJ5KiBlbnRyeSA9IG1fbG9n
U3RhcnRQdHI7IGVudHJ5ICE9IG1fY3VycmVudExvZ0VudHJ5UHRyOyArK2VudHJ5KSB7CiAgICAg
ICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQoZW50cnktPnZhbHVlKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVQcm9maWxlckxvZy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVQcm9maWxlckxvZy5oCShyZXZpc2lv
biAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlUHJvZmlsZXJM
b2cuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE0LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC01OSw3ICs1OSw3IEBAIHB1YmxpYzoKICAgICBKU19FWFBPUlRf
UFJJVkFURSB2b2lkIHByb2Nlc3NMb2dFbnRyaWVzKFZNJiwgY29uc3QgU3RyaW5nJik7CiAgICAg
TG9nRW50cnkqIGxvZ0VuZFB0cigpIGNvbnN0IHsgcmV0dXJuIG1fbG9nRW5kUHRyOyB9CiAKLSAg
ICB2b2lkIHZpc2l0KFNsb3RWaXNpdG9yJik7CisgICAgdm9pZCB2aXNpdChBYnN0cmFjdFNsb3RW
aXNpdG9yJik7CiAKICAgICBzdGF0aWMgcHRyZGlmZl90IGxvZ1N0YXJ0T2Zmc2V0KCkgeyByZXR1
cm4gT0JKRUNUX09GRlNFVE9GKFR5cGVQcm9maWxlckxvZywgbV9sb2dTdGFydFB0cik7IH0KICAg
ICBzdGF0aWMgcHRyZGlmZl90IGN1cnJlbnRMb2dFbnRyeU9mZnNldCgpIHsgcmV0dXJuIE9CSkVD
VF9PRkZTRVRPRihUeXBlUHJvZmlsZXJMb2csIG1fY3VycmVudExvZ0VudHJ5UHRyKTsgfQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOC0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTIxLDYg
KzEyMSw3IEBAIGNsYXNzIEZhc3RNYWxsb2NBbGlnbmVkTWVtb3J5QWxsb2NhdG9yOwogY2xhc3Mg
R2lnYWNhZ2VBbGlnbmVkTWVtb3J5QWxsb2NhdG9yOwogY2xhc3MgSGFuZGxlU3RhY2s7CiBjbGFz
cyBIYXNPd25Qcm9wZXJ0eUNhY2hlOworY2xhc3MgSGVhcEFuYWx5emVyOwogY2xhc3MgSGVhcFBy
b2ZpbGVyOwogY2xhc3MgSWRlbnRpZmllcjsKIGNsYXNzIEludGVycHJldGVyOwpAQCAtMzA5LDYg
KzMxMCwxMCBAQCBwdWJsaWM6CiAgICAgSGVhcFByb2ZpbGVyKiBoZWFwUHJvZmlsZXIoKSBjb25z
dCB7IHJldHVybiBtX2hlYXBQcm9maWxlci5nZXQoKTsgfQogICAgIEpTX0VYUE9SVF9QUklWQVRF
IEhlYXBQcm9maWxlciYgZW5zdXJlSGVhcFByb2ZpbGVyKCk7CiAKKyAgICBib29sIGlzQW5hbHl6
aW5nSGVhcCgpIGNvbnN0IHsgcmV0dXJuIG1fYWN0aXZlSGVhcEFuYWx5emVyOyB9CisgICAgSGVh
cEFuYWx5emVyKiBhY3RpdmVIZWFwQW5hbHl6ZXIoKSBjb25zdCB7IHJldHVybiBtX2FjdGl2ZUhl
YXBBbmFseXplcjsgfQorICAgIHZvaWQgc2V0QWN0aXZlSGVhcEFuYWx5emVyKEhlYXBBbmFseXpl
ciogYW5hbHl6ZXIpIHsgbV9hY3RpdmVIZWFwQW5hbHl6ZXIgPSBhbmFseXplcjsgfQorCiAjaWYg
RU5BQkxFKFNBTVBMSU5HX1BST0ZJTEVSKQogICAgIFNhbXBsaW5nUHJvZmlsZXIqIHNhbXBsaW5n
UHJvZmlsZXIoKSB7IHJldHVybiBtX3NhbXBsaW5nUHJvZmlsZXIuZ2V0KCk7IH0KICAgICBKU19F
WFBPUlRfUFJJVkFURSBTYW1wbGluZ1Byb2ZpbGVyJiBlbnN1cmVTYW1wbGluZ1Byb2ZpbGVyKFJl
ZjxTdG9wd2F0Y2g+JiYpOwpAQCAtMTE5NCw5ICsxMTk5LDEwIEBAIHB1YmxpYzoKICAgICBib29s
IGRpZEVudGVyVk0geyBmYWxzZSB9OwogcHJpdmF0ZToKICAgICBib29sIG1fZmFpbE5leHROZXdD
b2RlQmxvY2sgeyBmYWxzZSB9OwotICAgIERlbGV0ZVByb3BlcnR5TW9kZSBtX2RlbGV0ZVByb3Bl
cnR5TW9kZSB7IERlbGV0ZVByb3BlcnR5TW9kZTo6RGVmYXVsdCB9OwogICAgIGJvb2wgbV9nbG9i
YWxDb25zdFJlZGVjbGFyYXRpb25TaG91bGRUaHJvdyB7IHRydWUgfTsKICAgICBib29sIG1fc2hv
dWxkQnVpbGRQQ1RvQ29kZU9yaWdpbk1hcHBpbmcgeyBmYWxzZSB9OworICAgIERlbGV0ZVByb3Bl
cnR5TW9kZSBtX2RlbGV0ZVByb3BlcnR5TW9kZSB7IERlbGV0ZVByb3BlcnR5TW9kZTo6RGVmYXVs
dCB9OworICAgIEhlYXBBbmFseXplciogbV9hY3RpdmVIZWFwQW5hbHl6ZXIgeyBudWxscHRyIH07
CiAgICAgc3RkOjp1bmlxdWVfcHRyPENvZGVDYWNoZT4gbV9jb2RlQ2FjaGU7CiAgICAgc3RkOjp1
bmlxdWVfcHRyPEludGxDYWNoZT4gbV9pbnRsQ2FjaGU7CiAgICAgc3RkOjp1bmlxdWVfcHRyPEJ1
aWx0aW5FeGVjdXRhYmxlcz4gbV9idWlsdGluRXhlY3V0YWJsZXM7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9XZWFrTWFwSW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha01hcEltcGwuY3BwCShyZXZpc2lvbiAyNzI5MDIp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9XZWFrTWFwSW1wbC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAxNyBZdXN1
a2UgU3V6dWtpIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+LgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAt
MzksOCArMzksOSBAQCB2b2lkIFdlYWtNYXBJbXBsPFdlYWtNYXBCdWNrZXQ+OjpkZXN0cm95CiAg
ICAgc3RhdGljX2Nhc3Q8V2Vha01hcEltcGwqPihjZWxsKS0+fldlYWtNYXBJbXBsKCk7CiB9CiAK
LXRlbXBsYXRlIDx0eXBlbmFtZSBXZWFrTWFwQnVja2V0Pgotdm9pZCBXZWFrTWFwSW1wbDxXZWFr
TWFwQnVja2V0Pjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNp
dG9yKQordGVtcGxhdGU8dHlwZW5hbWUgV2Vha01hcEJ1Y2tldD4KK3RlbXBsYXRlPHR5cGVuYW1l
IFZpc2l0b3I+Cit2b2lkIFdlYWtNYXBJbXBsPFdlYWtNYXBCdWNrZXQ+Ojp2aXNpdENoaWxkcmVu
SW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgV2Vha01hcEltcGwq
IHRoaXNPYmplY3QgPSBqc0Nhc3Q8V2Vha01hcEltcGwqPihjZWxsKTsKICAgICBBU1NFUlRfR0Nf
T0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC00OCw2ICs0OSw4IEBAIHZv
aWQgV2Vha01hcEltcGw8V2Vha01hcEJ1Y2tldD46OnZpc2l0Q2gKICAgICB2aXNpdG9yLnJlcG9y
dEV4dHJhTWVtb3J5VmlzaXRlZCh0aGlzT2JqZWN0LT5tX2NhcGFjaXR5ICogc2l6ZW9mKFdlYWtN
YXBCdWNrZXQpKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOX1dJVEhfTU9ESUZJRVIodGVt
cGxhdGU8dHlwZW5hbWUgV2Vha01hcEJ1Y2tldD4sIFdlYWtNYXBJbXBsPFdlYWtNYXBCdWNrZXQ+
KTsKKwogdGVtcGxhdGUgPHR5cGVuYW1lIFdlYWtNYXBCdWNrZXQ+CiBzaXplX3QgV2Vha01hcElt
cGw8V2Vha01hcEJ1Y2tldD46OmVzdGltYXRlZFNpemUoSlNDZWxsKiBjZWxsLCBWTSYgdm0pCiB7
CkBAIC01NiwxNSArNTksMjUgQEAgc2l6ZV90IFdlYWtNYXBJbXBsPFdlYWtNYXBCdWNrZXQ+Ojpl
c3RpbQogfQogCiB0ZW1wbGF0ZSA8Pgotdm9pZCBXZWFrTWFwSW1wbDxXZWFrTWFwQnVja2V0PFdl
YWtNYXBCdWNrZXREYXRhS2V5Pj46OnZpc2l0T3V0cHV0Q29uc3RyYWludHMoSlNDZWxsKiwgU2xv
dFZpc2l0b3ImKQordGVtcGxhdGUgPD4KK3ZvaWQgV2Vha01hcEltcGw8V2Vha01hcEJ1Y2tldDxX
ZWFrTWFwQnVja2V0RGF0YUtleT4+Ojp2aXNpdE91dHB1dENvbnN0cmFpbnRzKEpTQ2VsbCosIEFi
c3RyYWN0U2xvdFZpc2l0b3ImKQogewogICAgIC8vIE9ubHkgSlNXZWFrTWFwIG5lZWRzIHRvIGhh
cnZlc3QgdmFsdWUgcmVmZXJlbmNlcwogfQogCiB0ZW1wbGF0ZSA8Pgotdm9pZCBXZWFrTWFwSW1w
bDxXZWFrTWFwQnVja2V0PFdlYWtNYXBCdWNrZXREYXRhS2V5VmFsdWU+Pjo6dmlzaXRPdXRwdXRD
b25zdHJhaW50cyhKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGUg
PD4KK3ZvaWQgV2Vha01hcEltcGw8V2Vha01hcEJ1Y2tldDxXZWFrTWFwQnVja2V0RGF0YUtleT4+
Ojp2aXNpdE91dHB1dENvbnN0cmFpbnRzKEpTQ2VsbCosIFNsb3RWaXNpdG9yJikKIHsKLSAgICBW
TSYgdm0gPSB2aXNpdG9yLnZtKCk7CisgICAgLy8gT25seSBKU1dlYWtNYXAgbmVlZHMgdG8gaGFy
dmVzdCB2YWx1ZSByZWZlcmVuY2VzCit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEJ1Y2tldFR5cGU+
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgorQUxXQVlTX0lOTElORSB2b2lkIFdlYWtNYXBJ
bXBsPEJ1Y2tldFR5cGU+Ojp2aXNpdE91dHB1dENvbnN0cmFpbnRzKEpTQ2VsbCogY2VsbCwgVmlz
aXRvciYgdmlzaXRvcikKK3sKKyAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZTxCdWNrZXRU
eXBlLCBXZWFrTWFwQnVja2V0PFdlYWtNYXBCdWNrZXREYXRhS2V5VmFsdWU+Pjo6dmFsdWUpOwor
CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxXZWFrTWFwSW1wbCo+KGNlbGwpOwogICAg
IGF1dG8gbG9ja2VyID0gaG9sZExvY2sodGhpc09iamVjdC0+Y2VsbExvY2soKSk7CiAgICAgYXV0
byogYnVmZmVyID0gdGhpc09iamVjdC0+YnVmZmVyKCk7CkBAIC03MiwxMiArODUsMTUgQEAgdm9p
ZCBXZWFrTWFwSW1wbDxXZWFrTWFwQnVja2V0PFdlYWtNYXBCdQogICAgICAgICBhdXRvKiBidWNr
ZXQgPSBidWZmZXIgKyBpbmRleDsKICAgICAgICAgaWYgKGJ1Y2tldC0+aXNFbXB0eSgpIHx8IGJ1
Y2tldC0+aXNEZWxldGVkKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgaWYgKCF2
bS5oZWFwLmlzTWFya2VkKGJ1Y2tldC0+a2V5KCkpKQorICAgICAgICBpZiAoIXZpc2l0b3IuaXNN
YXJrZWQoYnVja2V0LT5rZXkoKSkpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgYnVj
a2V0LT52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKICAgICB9CiB9CiAKK3RlbXBsYXRlIHZvaWQg
V2Vha01hcEltcGw8V2Vha01hcEJ1Y2tldDxXZWFrTWFwQnVja2V0RGF0YUtleVZhbHVlPj46OnZp
c2l0T3V0cHV0Q29uc3RyYWludHMoSlNDZWxsKiwgQWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVt
cGxhdGUgdm9pZCBXZWFrTWFwSW1wbDxXZWFrTWFwQnVja2V0PFdlYWtNYXBCdWNrZXREYXRhS2V5
VmFsdWU+Pjo6dmlzaXRPdXRwdXRDb25zdHJhaW50cyhKU0NlbGwqLCBTbG90VmlzaXRvciYpOwor
CiB0ZW1wbGF0ZSA8dHlwZW5hbWUgV2Vha01hcEJ1Y2tldD4KIHRlbXBsYXRlPHR5cGVuYW1lIEFw
cGVuZGVyPgogdm9pZCBXZWFrTWFwSW1wbDxXZWFrTWFwQnVja2V0Pjo6dGFrZVNuYXBzaG90SW50
ZXJuYWwodW5zaWduZWQgbGltaXQsIEFwcGVuZGVyIGFwcGVuZGVyKQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha01hcEltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9XZWFrTWFwSW1wbC5oCShyZXZpc2lvbiAyNzI5MDIpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9XZWFrTWFwSW1wbC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAxNyBZdXN1
a2UgU3V6dWtpIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+LgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAt
MTQ1LDcgKzE0NSw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUg
VCA9IERhdGE+Ci0gICAgQUxXQVlTX0lOTElORSB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6
OmlzX3NhbWU8VCwgV2Vha01hcEJ1Y2tldERhdGFLZXlWYWx1ZT46OnZhbHVlPjo6dHlwZSB2aXNp
dEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYgdmlzaXRvcikKKyAgICBBTFdBWVNfSU5MSU5FIHR5cGVu
YW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTxULCBXZWFrTWFwQnVja2V0RGF0YUtleVZh
bHVlPjo6dmFsdWU+Ojp0eXBlIHZpc2l0QWdncmVnYXRlKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZp
c2l0b3IpCiAgICAgewogICAgICAgICB2aXNpdG9yLmFwcGVuZChtX2RhdGEudmFsdWUpOwogICAg
IH0KQEAgLTIwMiw3ICsyMDIsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IG5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOwogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxs
Kik7CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9y
Jik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIHN0YXRpYyBzaXplX3QgZXN0
aW1hdGVkU2l6ZShKU0NlbGwqLCBWTSYpOwogCkBAIC0zMTEsMTAgKzMxMSwxMyBAQCBwdWJsaWM6
CiAgICAgICAgIHJldHVybiB2bS53ZWFrU2V0U3BhY2U8bW9kZT4oKTsKICAgICB9CiAKLSAgICBz
dGF0aWMgdm9pZCB2aXNpdE91dHB1dENvbnN0cmFpbnRzKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gc3RhdGljIHZvaWQgdmlzaXRPdXRwdXRD
b25zdHJhaW50cyhKU0NlbGwqLCBWaXNpdG9yJik7CiAgICAgdm9pZCBmaW5hbGl6ZVVuY29uZGl0
aW9uYWxseShWTSYpOwogCiBwcml2YXRlOgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+
CisgICAgQUxXQVlTX0lOTElORSBzdGF0aWMgdm9pZCB2aXNpdE91dHB1dENvbnN0cmFpbnRzRm9y
RGF0YUtleVZhbHVlKEpTQ2VsbCosIFZpc2l0b3ImKTsKKwogICAgIEFMV0FZU19JTkxJTkUgV2Vh
a01hcEJ1Y2tldFR5cGUqIGZpbmRCdWNrZXQoSlNPYmplY3QqIGtleSkKICAgICB7CiAgICAgICAg
IHJldHVybiBmaW5kQnVja2V0KGtleSwganNXZWFrTWFwSGFzaChrZXkpKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS90b29scy9KU0RvbGxhclZNLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvSlNEb2xsYXJWTS5jcHAJKHJldmlzaW9uIDI3MjkwMikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9KU0RvbGxhclZNLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTIyNCwxNCArMjI0LDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBmaW5pc2hDcmVh
dGlvbihWTSYsIFJvb3QqKTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKLSAgICB7Ci0gICAgICAgIERvbGxhclZNQXNz
ZXJ0U2NvcGUgYXNzZXJ0U2NvcGU7Ci0gICAgICAgIEVsZW1lbnQqIHRoaXNPYmplY3QgPSBqc0Nh
c3Q8RWxlbWVudCo+KGNlbGwpOwotICAgICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRo
aXNPYmplY3QsIGluZm8oKSk7Ci0gICAgICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVj
dCwgdmlzaXRvcik7Ci0gICAgICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fcm9vdCk7
Ci0gICAgfQorICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBzdGF0aWMgRWxlbWVu
dEhhbmRsZU93bmVyKiBoYW5kbGVPd25lcigpOwogCkBAIC0yNDcsMTAgKzI0MCwyMiBAQCBwcml2
YXRlOgogICAgIFdyaXRlQmFycmllcjxSb290PiBtX3Jvb3Q7CiB9OwogCit0ZW1wbGF0ZTx0eXBl
bmFtZSBWaXNpdG9yPgordm9pZCBFbGVtZW50Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNl
bGwsIFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgRG9sbGFyVk1Bc3NlcnRTY29wZSBhc3NlcnRT
Y29wZTsKKyAgICBFbGVtZW50KiB0aGlzT2JqZWN0ID0ganNDYXN0PEVsZW1lbnQqPihjZWxsKTsK
KyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CisgICAg
QmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKKyAgICB2aXNpdG9yLmFw
cGVuZCh0aGlzT2JqZWN0LT5tX3Jvb3QpOworfQorCitERUZJTkVfVklTSVRfQ0hJTERSRU4oRWxl
bWVudCk7CisKIGNsYXNzIEVsZW1lbnRIYW5kbGVPd25lciBmaW5hbCA6IHB1YmxpYyBXZWFrSGFu
ZGxlT3duZXIgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIGJv
b2wgaXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBo
YW5kbGUsIHZvaWQqLCBTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikg
ZmluYWwKKyAgICBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpT
Qzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvciwg
Y29uc3QgY2hhcioqIHJlYXNvbikgZmluYWwKICAgICB7CiAgICAgICAgIERvbGxhclZNQXNzZXJ0
U2NvcGUgYXNzZXJ0U2NvcGU7CiAgICAgICAgIGlmIChVTkxJS0VMWShyZWFzb24pKQpAQCAtMzA0
LDE4ICszMDksMjMgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUo
dm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1
cmVGbGFncyksIGluZm8oKSk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJl
bihKU0NlbGwqIHRoaXNPYmplY3QsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQotICAgIHsKLSAgICAg
ICAgRG9sbGFyVk1Bc3NlcnRTY29wZSBhc3NlcnRTY29wZTsKLSAgICAgICAgQVNTRVJUX0dDX09C
SkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwotICAgICAgICBCYXNlOjp2aXNpdENo
aWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwotICAgICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJv
b3QodGhpc09iamVjdCk7Ci0gICAgfQorICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKIHBy
aXZhdGU6CiAgICAgV2VhazxFbGVtZW50PiBtX2VsZW1lbnQ7CiB9OwogCit0ZW1wbGF0ZTx0eXBl
bmFtZSBWaXNpdG9yPgordm9pZCBSb290Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIHRoaXNP
YmplY3QsIFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgRG9sbGFyVk1Bc3NlcnRTY29wZSBhc3Nl
cnRTY29wZTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8o
KSk7CisgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKKyAgICB2
aXNpdG9yLmFkZE9wYXF1ZVJvb3QodGhpc09iamVjdCk7Cit9CisKK0RFRklORV9WSVNJVF9DSElM
RFJFTihSb290KTsKKwogY2xhc3MgU2ltcGxlT2JqZWN0IDogcHVibGljIEpTTm9uRmluYWxPYmpl
Y3QgewogcHVibGljOgogICAgIFNpbXBsZU9iamVjdChWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0
dXJlKQpAQCAtMzQwLDE0ICszNTAsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBzaW1wbGVP
YmplY3Q7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqIGNl
bGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQotICAgIHsKLSAgICAgICAgRG9sbGFyVk1Bc3NlcnRT
Y29wZSBhc3NlcnRTY29wZTsKLSAgICAgICAgU2ltcGxlT2JqZWN0KiB0aGlzT2JqZWN0ID0ganND
YXN0PFNpbXBsZU9iamVjdCo+KGNlbGwpOwotICAgICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVS
SVRTKHRoaXNPYmplY3QsIGluZm8oKSk7Ci0gICAgICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhp
c09iamVjdCwgdmlzaXRvcik7Ci0gICAgICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1f
aGlkZGVuVmFsdWUpOwotICAgIH0KKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAg
c3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCiAgICAgewpAQCAtMzgwLDYgKzM4Mywx
OCBAQCBwcml2YXRlOgogICAgIFdyaXRlQmFycmllcjxKU0M6OlVua25vd24+IG1faGlkZGVuVmFs
dWU7CiB9OwogCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBTaW1wbGVPYmplY3Q6
OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKK3sKKyAg
ICBEb2xsYXJWTUFzc2VydFNjb3BlIGFzc2VydFNjb3BlOworICAgIFNpbXBsZU9iamVjdCogdGhp
c09iamVjdCA9IGpzQ2FzdDxTaW1wbGVPYmplY3QqPihjZWxsKTsKKyAgICBBU1NFUlRfR0NfT0JK
RUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CisgICAgQmFzZTo6dmlzaXRDaGlsZHJl
bih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKKyAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5t
X2hpZGRlblZhbHVlKTsKK30KKworREVGSU5FX1ZJU0lUX0NISUxEUkVOKFNpbXBsZU9iamVjdCk7
CisKIGNsYXNzIEltcHVyZUdldHRlciA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKIHB1Ymxp
YzoKICAgICBJbXB1cmVHZXR0ZXIoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKQEAgLTQz
NiwxNCArNDUxLDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gQmFzZTo6Z2V0T3duUHJvcGVy
dHlTbG90KG9iamVjdCwgZ2xvYmFsT2JqZWN0LCBuYW1lLCBzbG90KTsKICAgICB9CiAKLSAgICBz
dGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0
b3IpCi0gICAgewotICAgICAgICBEb2xsYXJWTUFzc2VydFNjb3BlIGFzc2VydFNjb3BlOwotICAg
ICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNlbGwsIGluZm8oKSk7Ci0gICAgICAgIEJh
c2U6OnZpc2l0Q2hpbGRyZW4oY2VsbCwgdmlzaXRvcik7Ci0gICAgICAgIEltcHVyZUdldHRlciog
dGhpc09iamVjdCA9IGpzQ2FzdDxJbXB1cmVHZXR0ZXIqPihjZWxsKTsKLSAgICAgICAgdmlzaXRv
ci5hcHBlbmQodGhpc09iamVjdC0+bV9kZWxlZ2F0ZSk7Ci0gICAgfQorICAgIERFQ0xBUkVfVklT
SVRfQ0hJTERSRU47CiAKICAgICB2b2lkIHNldERlbGVnYXRlKFZNJiB2bSwgSlNPYmplY3QqIGRl
bGVnYXRlKQogICAgIHsKQEAgLTQ1NCw2ICs0NjIsMTggQEAgcHJpdmF0ZToKICAgICBXcml0ZUJh
cnJpZXI8SlNPYmplY3Q+IG1fZGVsZWdhdGU7CiB9OwogCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNp
dG9yPgordm9pZCBJbXB1cmVHZXR0ZXI6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwg
VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBEb2xsYXJWTUFzc2VydFNjb3BlIGFzc2VydFNjb3Bl
OworICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2VsbCwgaW5mbygpKTsKKyAgICBCYXNl
Ojp2aXNpdENoaWxkcmVuKGNlbGwsIHZpc2l0b3IpOworICAgIEltcHVyZUdldHRlciogdGhpc09i
amVjdCA9IGpzQ2FzdDxJbXB1cmVHZXR0ZXIqPihjZWxsKTsKKyAgICB2aXNpdG9yLmFwcGVuZCh0
aGlzT2JqZWN0LT5tX2RlbGVnYXRlKTsKK30KKworREVGSU5FX1ZJU0lUX0NISUxEUkVOKEltcHVy
ZUdldHRlcik7CisKIHN0YXRpYyBKU0NfREVDTEFSRV9DVVNUT01fR0VUVEVSKGN1c3RvbUdldHRl
clZhbHVlR2V0dGVyKTsKIHN0YXRpYyBKU0NfREVDTEFSRV9DVVNUT01fR0VUVEVSKGN1c3RvbUdl
dHRlckFjZXNzb3JHZXR0ZXIpOwogCkBAIC0xODIyLDE0ICsxODQyLDcgQEAgcHVibGljOgogICAg
ICAgICBwdXREaXJlY3ROYXRpdmVGdW5jdGlvbih2bSwgZ2xvYmFsT2JqZWN0LCBJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKHZtLCAiYWRkQnl0ZXMiKSwgMCwgZnVuY3Rpb25XYXNtU3RyZWFtaW5nQ29t
cGlsZXJBZGRCeXRlcywgTm9JbnRyaW5zaWMsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0
eUF0dHJpYnV0ZTo6RG9udEVudW0pKTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENo
aWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCi0gICAgewotICAgICAg
ICBEb2xsYXJWTUFzc2VydFNjb3BlIGFzc2VydFNjb3BlOwotICAgICAgICBhdXRvKiB0aGlzT2Jq
ZWN0ID0ganNDYXN0PFdhc21TdHJlYW1pbmdDb21waWxlcio+KGNlbGwpOwotICAgICAgICBBU1NF
UlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7Ci0gICAgICAgIEJhc2U6
OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7Ci0gICAgICAgIHZpc2l0b3IuYXBw
ZW5kKHRoaXNPYmplY3QtPm1fcHJvbWlzZSk7Ci0gICAgfQorICAgIERFQ0xBUkVfVklTSVRfQ0hJ
TERSRU47CiAKICAgICBERUNMQVJFX0lORk87CiAKQEAgLTE4MzcsNiArMTg1MCwxOCBAQCBwdWJs
aWM6CiAgICAgUmVmPFdhc206OlN0cmVhbWluZ0NvbXBpbGVyPiBtX3N0cmVhbWluZ0NvbXBpbGVy
OwogfTsKIAordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgV2FzbVN0cmVhbWluZ0Nv
bXBpbGVyOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3Ip
Cit7CisgICAgRG9sbGFyVk1Bc3NlcnRTY29wZSBhc3NlcnRTY29wZTsKKyAgICBhdXRvKiB0aGlz
T2JqZWN0ID0ganNDYXN0PFdhc21TdHJlYW1pbmdDb21waWxlcio+KGNlbGwpOworICAgIEFTU0VS
VF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKKyAgICBCYXNlOjp2aXNp
dENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOworICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNP
YmplY3QtPm1fcHJvbWlzZSk7Cit9CisKK0RFRklORV9WSVNJVF9DSElMRFJFTihXYXNtU3RyZWFt
aW5nQ29tcGlsZXIpOworCiBjb25zdCBDbGFzc0luZm8gV2FzbVN0cmVhbWluZ0NvbXBpbGVyOjpz
X2luZm8gPSB7ICJXYXNtU3RyZWFtaW5nQ29tcGlsZXIiLCAmQmFzZTo6c19pbmZvLCBudWxscHRy
LCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKFdhc21TdHJlYW1pbmdDb21waWxlcikgfTsK
IAogSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGZ1bmN0aW9uV2FzbVN0cmVhbWluZ0NvbXBpbGVy
QWRkQnl0ZXMsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxG
cmFtZSkpCkBAIC0zNjk5LDEzICszNzI0LDE2IEBAIHZvaWQgSlNEb2xsYXJWTTo6YWRkQ29uc3Ry
dWN0aWJsZUZ1bmN0aW8KICAgICBwdXREaXJlY3Qodm0sIGlkZW50aWZpZXIsIEpTRnVuY3Rpb246
OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBhcmd1bWVudHMsIGlkZW50aWZpZXIuc3RyaW5nKCks
IGZ1bmN0aW9uLCBOb0ludHJpbnNpYywgZnVuY3Rpb24pLCBqc0RvbGxhclZNUHJvcGVydHlBdHRy
aWJ1dGVzKTsKIH0KIAotdm9pZCBKU0RvbGxhclZNOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2Vs
bCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9p
ZCBKU0RvbGxhclZNOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZp
c2l0b3IpCiB7CiAgICAgSlNEb2xsYXJWTSogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0RvbGxhclZN
Kj4oY2VsbCk7CiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsK
ICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX29iamVjdERvaW5nU2lkZUVmZmVjdFB1
dFdpdGhvdXRDb3JyZWN0U2xvdFN0YXR1c1N0cnVjdHVyZSk7CiB9CiAKK0RFRklORV9WSVNJVF9D
SElMRFJFTihKU0RvbGxhclZNKTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKIElHTk9SRV9XQVJO
SU5HU19FTkQKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9KU0RvbGxhclZNLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0pTRG9sbGFyVk0uaAko
cmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0pTRG9sbGFy
Vk0uaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTUtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTUtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTc0LDcgKzc0LDcgQEAgcHJpdmF0ZToKICAgICB2b2lk
IGFkZEZ1bmN0aW9uKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBjb25zdCBjaGFyKiBuYW1lLCBOYXRp
dmVGdW5jdGlvbiwgdW5zaWduZWQgYXJndW1lbnRzKTsKICAgICB2b2lkIGFkZENvbnN0cnVjdGli
bGVGdW5jdGlvbihWTSYsIEpTR2xvYmFsT2JqZWN0KiwgY29uc3QgY2hhciogbmFtZSwgTmF0aXZl
RnVuY3Rpb24sIHVuc2lnbmVkIGFyZ3VtZW50cyk7CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENo
aWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJF
TjsKIAogICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1fb2JqZWN0RG9pbmdTaWRlRWZmZWN0
UHV0V2l0aG91dENvcnJlY3RTbG90U3RhdHVzU3RydWN0dXJlOwogfTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21HbG9iYWwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21HbG9iYWwuY3BwCShyZXZpc2lvbiAyNzI5MDIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtR2xvYmFsLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE5LTIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0x
MDMsNyArMTAzLDggQEAgdm9pZCBHbG9iYWw6OnNldChKU0dsb2JhbE9iamVjdCogZ2xvYmFsTwog
ICAgIH0KIH0KIAotdm9pZCBHbG9iYWw6OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJiB2aXNp
dG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgR2xvYmFsOjp2aXNpdEFnZ3Jl
Z2F0ZUltcGwoVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBzd2l0Y2ggKG1fdHlwZSkgewogICAg
IGNhc2UgV2FzbTo6VHlwZTo6RXh0ZXJucmVmOgpAQCAtMTE3LDYgKzExOCw4IEBAIHZvaWQgR2xv
YmFsOjp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYKICAgICB9CiB9CiAKK0RFRklORV9WSVNJ
VF9BR0dSRUdBVEUoR2xvYmFsKTsKKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6Okdsb2JhbAogCiAj
ZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbUdsb2JhbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21HbG9iYWwuaAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbUdsb2JhbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxNy0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTcsNyArNTcsOCBAQCBw
dWJsaWM6CiAgICAgSlNWYWx1ZSBnZXQoSlNHbG9iYWxPYmplY3QqKSBjb25zdDsKICAgICB1aW50
NjRfdCBnZXRQcmltaXRpdmUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlLm1fcHJpbWl0aXZlOyB9
CiAgICAgdm9pZCBzZXQoSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlKTsKLSAgICB2b2lkIHZpc2l0
QWdncmVnYXRlKFNsb3RWaXNpdG9yJik7CisvLyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
PiB2b2lkIHZpc2l0QWdncmVnYXRlKFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0FHR1JF
R0FURTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IFQqIG93bmVyKCkgY29uc3QgeyByZXR1
cm4gcmVpbnRlcnByZXRfY2FzdDxUKj4obV9vd25lcik7IH0KICAgICB2b2lkIHNldE93bmVyKEpT
T2JqZWN0KiBvd25lcikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UYWJs
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRhYmxl
LmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bVRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTctMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE2Niw3ICsxNjYsOCBAQCBKU1ZhbHVlIFRh
YmxlOjpnZXQodWludDMyX3QgaW5kZXgpIGNvbnN0CiAgICAgcmV0dXJuIG1fanNWYWx1ZXMuZ2V0
KClbaW5kZXggJiBtX21hc2tdLmdldCgpOwogfQogCi12b2lkIFRhYmxlOjp2aXNpdEFnZ3JlZ2F0
ZShTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lk
IFRhYmxlOjp2aXNpdEFnZ3JlZ2F0ZUltcGwoVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBSRUxF
QVNFX0FTU0VSVChtX293bmVyKTsKICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fb3duZXIt
PmNlbGxMb2NrKCkpOwpAQCAtMTc0LDYgKzE3NSw4IEBAIHZvaWQgVGFibGU6OnZpc2l0QWdncmVn
YXRlKFNsb3RWaXNpdG9yJiAKICAgICAgICAgdmlzaXRvci5hcHBlbmQobV9qc1ZhbHVlcy5nZXQo
KVtpXSk7CiB9CiAKK0RFRklORV9WSVNJVF9BR0dSRUdBVEUoVGFibGUpOworCiBUeXBlIFRhYmxl
Ojp3YXNtVHlwZSgpIGNvbnN0CiB7CiAgICAgaWYgKGlzRXh0ZXJucmVmVGFibGUoKSkKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UYWJsZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UYWJsZS5oCShyZXZpc2lvbiAyNzI5MDIpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGFibGUuaAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAxOCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTgwLDcgKzgwLDcgQEAgcHVibGljOgogICAgIE9wdGlvbmFsPHVpbnQzMl90PiBncm93KHVp
bnQzMl90IGRlbHRhLCBKU1ZhbHVlIGRlZmF1bHRWYWx1ZSk7CiAgICAgdm9pZCBjb3B5KGNvbnN0
IFRhYmxlKiBzcmNUYWJsZSwgdWludDMyX3QgZHN0SW5kZXgsIHVpbnQzMl90IHNyY0luZGV4KTsK
IAotICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJ
U0lUX0FHR1JFR0FURTsKIAogcHJvdGVjdGVkOgogICAgIFRhYmxlKHVpbnQzMl90IGluaXRpYWws
IE9wdGlvbmFsPHVpbnQzMl90PiBtYXhpbXVtLCBUYWJsZUVsZW1lbnRUeXBlID0gVGFibGVFbGVt
ZW50VHlwZTo6RXh0ZXJucmVmKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L0pTVG9XYXNtSUNDYWxsZWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL0pTVG9XYXNtSUNDYWxsZWUuY3BwCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1RvV2FzbUlDQ2FsbGVlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE5LTIwMjEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC00OSw3ICs0OSw4IEBAIFN0cnVjdHVyZSogSlNUb1dhc21JQ0NhbGxlZTo6Y3JlYXRlU3Ry
dWMKICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90
eXBlLCBUeXBlSW5mbyhKU0NhbGxlZVR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKIH0K
IAotdm9pZCBKU1RvV2FzbUlDQ2FsbGVlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xv
dFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1Rv
V2FzbUlDQ2FsbGVlOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZp
c2l0b3IpCiB7CiAgICAgSlNUb1dhc21JQ0NhbGxlZSogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rv
V2FzbUlDQ2FsbGVlKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlz
T2JqZWN0LCBpbmZvKCkpOwpAQCAtNTgsNiArNTksOCBAQCB2b2lkIEpTVG9XYXNtSUNDYWxsZWU6
OnZpc2l0Q2hpbGRyZW4oSlNDCiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9mdW5j
dGlvbik7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU1RvV2FzbUlDQ2FsbGVlKTsKKwog
fSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1RvV2FzbUlDQ2FsbGVlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNUb1dhc21JQ0NhbGxlZS5o
CShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1Rv
V2FzbUlDQ2FsbGVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxOS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTYsNyArNTYsNyBAQCBwcml2YXRlOgogICAg
IEpTVG9XYXNtSUNDYWxsZWUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSkKICAgICAgICAgOiBCYXNlKHZtLCBnbG9iYWxPYmplY3QsIHN0
cnVjdHVyZSkKICAgICB7IH0KLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCos
IFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIFdyaXRl
QmFycmllcjxXZWJBc3NlbWJseUZ1bmN0aW9uPiBtX2Z1bmN0aW9uOwogfTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2Rl
QmxvY2suY3BwCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTgyLDcg
KzgyLDggQEAgdm9pZCBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrOjpjbGVhckpTQ2FsbAogICAgICAg
ICAoKml0ZXIpLT51bmxpbmsodm0pOwogfQogCi12b2lkIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6
OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBs
YXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6OnZpc2l0
Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU1dl
YkFzc2VtYmx5Q29kZUJsb2NrKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTV2ViQXNzZW1ibHlDb2Rl
QmxvY2sqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3Qs
IGluZm8oKSk7CkBAIC05MCw2ICs5MSw4IEBAIHZvaWQgSlNXZWJBc3NlbWJseUNvZGVCbG9jazo6
dmlzaXRDaGlsZHIKICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3Ip
OwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNXZWJBc3NlbWJseUNvZGVCbG9jayk7CisK
IHZvaWQgSlNXZWJBc3NlbWJseUNvZGVCbG9jazo6ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoVk0m
IHZtKQogewogICAgIGZvciAoYXV0byBpdGVyID0gbV9jYWxsTGlua0luZm9zLmJlZ2luKCk7ICEh
aXRlcjsgKytpdGVyKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJB
c3NlbWJseUNvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suaAkocmV2aXNpb24gMjcyOTAyKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9jay5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIw
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0y
MDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtODYsNyArODYsNyBAQCBwcml2YXRlOgogICAgIERFQ0xBUkVfRVhQT1JU
X0lORk87CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVl
OwogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7Ci0gICAgc3RhdGljIHZvaWQgdmlz
aXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJ
TERSRU47CiAKICAgICBSZWY8V2FzbTo6Q29kZUJsb2NrPiBtX2NvZGVCbG9jazsKICAgICBWZWN0
b3I8TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPFdhc21FbnRyeVB0clRhZz4+IG1fd2FzbVRvSlNFeGl0
U3R1YnM7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5
R2xvYmFsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9K
U1dlYkFzc2VtYmx5R2xvYmFsLmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUdsb2JhbC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOS0yMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
NzEsNyArNzEsOCBAQCB2b2lkIEpTV2ViQXNzZW1ibHlHbG9iYWw6OmRlc3Ryb3koSlNDZWxsCiAg
ICAgc3RhdGljX2Nhc3Q8SlNXZWJBc3NlbWJseUdsb2JhbCo+KGNlbGwpLT5KU1dlYkFzc2VtYmx5
R2xvYmFsOjp+SlNXZWJBc3NlbWJseUdsb2JhbCgpOwogfQogCi12b2lkIEpTV2ViQXNzZW1ibHlH
bG9iYWw6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikK
K3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTV2ViQXNzZW1ibHlHbG9iYWw6OnZp
c2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBK
U1dlYkFzc2VtYmx5R2xvYmFsKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTV2ViQXNzZW1ibHlHbG9i
YWwqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGlu
Zm8oKSk7CkBAIC04MCw2ICs4MSw4IEBAIHZvaWQgSlNXZWJBc3NlbWJseUdsb2JhbDo6dmlzaXRD
aGlsZHJlbigKICAgICB0aGlzT2JqZWN0LT5nbG9iYWwoKS0+dmlzaXRBZ2dyZWdhdGUodmlzaXRv
cik7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU1dlYkFzc2VtYmx5R2xvYmFsKTsKKwog
fSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5R2xvYmFsLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUds
b2JhbC5oCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9KU1dlYkFzc2VtYmx5R2xvYmFsLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxOS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTksNyArNTksNyBAQCBwdWJs
aWM6CiBwcml2YXRlOgogICAgIEpTV2ViQXNzZW1ibHlHbG9iYWwoVk0mLCBTdHJ1Y3R1cmUqLCBS
ZWY8V2FzbTo6R2xvYmFsPiYmKTsKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7Ci0gICAg
c3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERF
Q0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBSZWY8V2FzbTo6R2xvYmFsPiBtX2dsb2JhbDsK
IH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5z
dGFuY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pT
V2ViQXNzZW1ibHlJbnN0YW5jZS5jcHAJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTkgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC03Myw3ICs3Myw4IEBAIHZvaWQgSlNXZWJBc3NlbWJseUluc3RhbmNlOjpkZXN0cm95
KEpTQ2UKICAgICBzdGF0aWNfY2FzdDxKU1dlYkFzc2VtYmx5SW5zdGFuY2UqPihjZWxsKS0+SlNX
ZWJBc3NlbWJseUluc3RhbmNlOjp+SlNXZWJBc3NlbWJseUluc3RhbmNlKCk7CiB9CiAKLXZvaWQg
SlNXZWJBc3NlbWJseUluc3RhbmNlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZp
c2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1dlYkFz
c2VtYmx5SW5zdGFuY2U6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYg
dmlzaXRvcikKIHsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTV2ViQXNzZW1ibHlJ
bnN0YW5jZSo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVj
dCwgaW5mbygpKTsKQEAgLTEwMiw2ICsxMDMsOCBAQCB2b2lkIEpTV2ViQXNzZW1ibHlJbnN0YW5j
ZTo6dmlzaXRDaGlsZHJlCiAgICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQod3JhcHBl
ci5nZXQoKSk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU1dlYkFzc2VtYmx5SW5zdGFu
Y2UpOworCiB2b2lkIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6ZmluYWxpemVDcmVhdGlvbihWTSYg
dm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZjxXYXNtOjpDb2RlQmxvY2s+JiYg
d2FzbUNvZGVCbG9jaywgSlNPYmplY3QqIGltcG9ydE9iamVjdCwgV2FzbTo6Q3JlYXRpb25Nb2Rl
IGNyZWF0aW9uTW9kZSkKIHsKICAgICBtX2luc3RhbmNlLT5maW5hbGl6ZUNyZWF0aW9uKHRoaXMs
IHdhc21Db2RlQmxvY2suY29weVJlZigpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5oCShyZXZpc2lvbiAyNzI5
MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFu
Y2UuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTYtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEwNSw3ICsxMDUsNyBAQCBwdWJsaWM6CiBwcml2YXRl
OgogICAgIEpTV2ViQXNzZW1ibHlJbnN0YW5jZShWTSYsIFN0cnVjdHVyZSosIFJlZjxXYXNtOjpJ
bnN0YW5jZT4mJik7CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIEpTV2ViQXNzZW1ibHlN
b2R1bGUqLCBXZWJBc3NlbWJseU1vZHVsZVJlY29yZCopOwotICAgIHN0YXRpYyB2b2lkIHZpc2l0
Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxE
UkVOOwogCiAgICAgUmVmPFdhc206Okluc3RhbmNlPiBtX2luc3RhbmNlOwogICAgIFZNKiBtX3Zt
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1lbW9y
eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJB
c3NlbWJseU1lbW9yeS5jcHAJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNZW1vcnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MTU5LDcgKzE1OSw4IEBAIHZvaWQgSlNXZWJBc3NlbWJseU1lbW9yeTo6ZGVzdHJveShKU0NlbGwK
ICAgICBtZW1vcnktPkpTV2ViQXNzZW1ibHlNZW1vcnk6On5KU1dlYkFzc2VtYmx5TWVtb3J5KCk7
CiB9CiAKLXZvaWQgSlNXZWJBc3NlbWJseU1lbW9yeTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNl
bGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3Zv
aWQgSlNXZWJBc3NlbWJseU1lbW9yeTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBW
aXNpdG9yJiB2aXNpdG9yKQogewogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNXZWJB
c3NlbWJseU1lbW9yeSo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhp
c09iamVjdCwgaW5mbygpKTsKQEAgLTE2OSw2ICsxNzAsOCBAQCB2b2lkIEpTV2ViQXNzZW1ibHlN
ZW1vcnk6OnZpc2l0Q2hpbGRyZW4oCiAgICAgdmlzaXRvci5yZXBvcnRFeHRyYU1lbW9yeVZpc2l0
ZWQodGhpc09iamVjdC0+bWVtb3J5KCkuc2l6ZSgpKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxE
UkVOKEpTV2ViQXNzZW1ibHlNZW1vcnkpOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlm
IC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL0pTV2ViQXNzZW1ibHlNZW1vcnkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TWVtb3J5LmgJKHJldmlzaW9uIDI3MjkwMikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNZW1vcnkuaAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAx
OSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYt
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTYzLDcgKzYzLDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBKU1dl
YkFzc2VtYmx5TWVtb3J5KFZNJiwgU3RydWN0dXJlKik7CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlv
bihWTSYpOwotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0
b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgUmVmPFdhc206Ok1lbW9y
eT4gbV9tZW1vcnk7CiAgICAgV3JpdGVCYXJyaWVyPEpTQXJyYXlCdWZmZXI+IG1fYnVmZmVyV3Jh
cHBlcjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlN
b2R1bGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pT
V2ViQXNzZW1ibHlNb2R1bGUuY3BwCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTEyNCw3ICsxMjQsOCBAQCB2b2lkIEpTV2ViQXNzZW1ibHlNb2R1bGU6OnNldENvZGVCbG9j
ayhWCiAgICAgbV9jb2RlQmxvY2tzW3N0YXRpY19jYXN0PHNpemVfdD4obW9kZSldLnNldCh2bSwg
dGhpcywgY29kZUJsb2NrKTsKIH0KIAotdm9pZCBKU1dlYkFzc2VtYmx5TW9kdWxlOjp2aXNpdENo
aWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBl
bmFtZSBWaXNpdG9yPgordm9pZCBKU1dlYkFzc2VtYmx5TW9kdWxlOjp2aXNpdENoaWxkcmVuSW1w
bChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNXZWJBc3NlbWJseU1v
ZHVsZSogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1dlYkFzc2VtYmx5TW9kdWxlKj4oY2VsbCk7CiAg
ICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtMTM1
LDYgKzEzNiw4IEBAIHZvaWQgSlNXZWJBc3NlbWJseU1vZHVsZTo6dmlzaXRDaGlsZHJlbigKICAg
ICAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9jb2RlQmxvY2tzW2ldKTsKIH0KIAor
REVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTV2ViQXNzZW1ibHlNb2R1bGUpOworCiB9IC8vIG5hbWVz
cGFjZSBKU0MKIAogI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmgJKHJl
dmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNz
ZW1ibHlNb2R1bGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTYtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTgwLDcgKzgwLDcgQEAgcHJpdmF0ZToK
IAogICAgIEpTV2ViQXNzZW1ibHlNb2R1bGUoVk0mLCBTdHJ1Y3R1cmUqLCBSZWY8V2FzbTo6TW9k
dWxlPiYmKTsKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7Ci0gICAgc3RhdGljIHZvaWQg
dmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRf
Q0hJTERSRU47CiAKICAgICBSZWY8V2FzbTo6TW9kdWxlPiBtX21vZHVsZTsKICAgICBXcml0ZUJh
cnJpZXI8U3ltYm9sVGFibGU+IG1fZXhwb3J0U3ltYm9sVGFibGU7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5VGFibGUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlUYWJsZS5jcHAJKHJl
dmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNz
ZW1ibHlUYWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDE2LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03Miw3ICs3Miw4IEBAIHZvaWQgSlNX
ZWJBc3NlbWJseVRhYmxlOjpkZXN0cm95KEpTQ2VsbCoKICAgICBzdGF0aWNfY2FzdDxKU1dlYkFz
c2VtYmx5VGFibGUqPihjZWxsKS0+SlNXZWJBc3NlbWJseVRhYmxlOjp+SlNXZWJBc3NlbWJseVRh
YmxlKCk7CiB9CiAKLXZvaWQgSlNXZWJBc3NlbWJseVRhYmxlOjp2aXNpdENoaWxkcmVuKEpTQ2Vs
bCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
Pgordm9pZCBKU1dlYkFzc2VtYmx5VGFibGU6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2Vs
bCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU1dlYkFzc2VtYmx5VGFibGUqIHRoaXNPYmpl
Y3QgPSBqc0Nhc3Q8SlNXZWJBc3NlbWJseVRhYmxlKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09C
SkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtODEsNiArODIsOCBAQCB2b2lk
IEpTV2ViQXNzZW1ibHlUYWJsZTo6dmlzaXRDaGlsZHJlbihKCiAgICAgdGhpc09iamVjdC0+dGFi
bGUoKS0+dmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJF
TihKU1dlYkFzc2VtYmx5VGFibGUpOworCiBib29sIEpTV2ViQXNzZW1ibHlUYWJsZTo6Z3Jvdyh1
aW50MzJfdCBkZWx0YSwgSlNWYWx1ZSBkZWZhdWx0VmFsdWUpCiB7CiAgICAgaWYgKGRlbHRhID09
IDApCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5VGFi
bGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFz
c2VtYmx5VGFibGUuaAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvSlNXZWJBc3NlbWJseVRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03MCw3ICs3
MCw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgSlNXZWJBc3NlbWJseVRhYmxlKFZNJiwgU3Ry
dWN0dXJlKiwgUmVmPFdhc206OlRhYmxlPiYmKTsKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZN
Jik7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYp
OworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBSZWY8V2FzbTo6VGFibGU+IG1f
dGFibGU7CiB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1i
bHlGdW5jdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
anMvV2ViQXNzZW1ibHlGdW5jdGlvbi5jcHAJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIwIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtNDUyLDcgKzQ1Miw4IEBAIFdlYkFzc2VtYmx5RnVuY3Rpb246OldlYkFzc2VtYmx5
RnVuY3Rpb24KICAgICAsIG1faW1wb3J0YWJsZUZ1bmN0aW9uIHsgc2lnbmF0dXJlSW5kZXgsIHdh
c21Ub1dhc21FbnRyeXBvaW50TG9hZExvY2F0aW9uIH0KIHsgfQogCi12b2lkIFdlYkFzc2VtYmx5
RnVuY3Rpb246OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRv
cikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFdlYkFzc2VtYmx5RnVuY3Rpb246
OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAg
ICBXZWJBc3NlbWJseUZ1bmN0aW9uKiB0aGlzT2JqZWN0ID0ganNDYXN0PFdlYkFzc2VtYmx5RnVu
Y3Rpb24qPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3Qs
IGluZm8oKSk7CkBAIC00NjEsNiArNDYyLDggQEAgdm9pZCBXZWJBc3NlbWJseUZ1bmN0aW9uOjp2
aXNpdENoaWxkcmVuKAogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fanNUb1dhc21J
Q0NhbGxlZSk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihXZWJBc3NlbWJseUZ1bmN0aW9u
KTsKKwogdm9pZCBXZWJBc3NlbWJseUZ1bmN0aW9uOjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKIHsK
ICAgICBzdGF0aWNfY2FzdDxXZWJBc3NlbWJseUZ1bmN0aW9uKj4oY2VsbCktPldlYkFzc2VtYmx5
RnVuY3Rpb246On5XZWJBc3NlbWJseUZ1bmN0aW9uKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5oCShyZXZpc2lvbiAy
NzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0
aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDE2LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC04Niw3ICs4Niw3IEBAIHB1YmxpYzoKICAgICBXYXNt
OjpJbnN0YW5jZSogcHJldmlvdXNJbnN0YW5jZShDYWxsRnJhbWUqKTsKIAogcHJpdmF0ZToKLSAg
ICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAg
REVDTEFSRV9WSVNJVF9DSElMRFJFTjsKICAgICBXZWJBc3NlbWJseUZ1bmN0aW9uKFZNJiwgTmF0
aXZlRXhlY3V0YWJsZSosIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKiwgV2FzbTo6Q2FsbGVl
JiBqc0VudHJ5cG9pbnQsIFdhc21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rpb246OkxvYWRMb2NhdGlv
biBlbnRyeXBvaW50TG9hZExvY2F0aW9uLCBXYXNtOjpTaWduYXR1cmVJbmRleCk7CiAKICAgICBN
YWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4ganNDYWxsRW50cnlwb2ludFNsb3co
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rp
b25CYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9X
ZWJBc3NlbWJseUZ1bmN0aW9uQmFzZS5jcHAJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb25CYXNlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC00MSw3ICs0MSw4IEBAIFdlYkFzc2VtYmx5RnVuY3Rpb25CYXNlOjpXZWJBc3NlbWJs
eUZ1bmMKICAgICA6IEJhc2Uodm0sIGV4ZWN1dGFibGUsIGdsb2JhbE9iamVjdCwgc3RydWN0dXJl
KQogeyB9CiAKLXZvaWQgV2ViQXNzZW1ibHlGdW5jdGlvbkJhc2U6OnZpc2l0Q2hpbGRyZW4oSlND
ZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0
b3I+Cit2b2lkIFdlYkFzc2VtYmx5RnVuY3Rpb25CYXNlOjp2aXNpdENoaWxkcmVuSW1wbChKU0Nl
bGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgV2ViQXNzZW1ibHlGdW5jdGlvbkJh
c2UqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8V2ViQXNzZW1ibHlGdW5jdGlvbkJhc2UqPihjZWxsKTsK
ICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC00
OSw2ICs1MCw4IEBAIHZvaWQgV2ViQXNzZW1ibHlGdW5jdGlvbkJhc2U6OnZpc2l0Q2hpbGQKICAg
ICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2luc3RhbmNlKTsKIH0KIAorREVGSU5FX1ZJ
U0lUX0NISUxEUkVOKFdlYkFzc2VtYmx5RnVuY3Rpb25CYXNlKTsKKwogdm9pZCBXZWJBc3NlbWJs
eUZ1bmN0aW9uQmFzZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBOYXRpdmVFeGVjdXRhYmxlKiBl
eGVjdXRhYmxlLCB1bnNpZ25lZCBsZW5ndGgsIGNvbnN0IFN0cmluZyYgbmFtZSwgSlNXZWJBc3Nl
bWJseUluc3RhbmNlKiBpbnN0YW5jZSkKIHsKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSwg
ZXhlY3V0YWJsZSwgbGVuZ3RoLCBuYW1lKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb25CYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbkJhc2UuaAkocmV2aXNpb24g
MjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5j
dGlvbkJhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTctMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ2LDcgKzQ2LDcgQEAgcHVibGljOgogICAg
IHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZJbnN0YW5jZSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZT
RVRPRihXZWJBc3NlbWJseUZ1bmN0aW9uQmFzZSwgbV9pbnN0YW5jZSk7IH0KIAogcHJvdGVjdGVk
OgotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsK
KyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0m
LCBOYXRpdmVFeGVjdXRhYmxlKiwgdW5zaWduZWQgbGVuZ3RoLCBjb25zdCBTdHJpbmcmIG5hbWUs
IEpTV2ViQXNzZW1ibHlJbnN0YW5jZSopOwogICAgIFdlYkFzc2VtYmx5RnVuY3Rpb25CYXNlKFZN
JiwgTmF0aXZlRXhlY3V0YWJsZSosIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKik7CiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3Jk
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3Nl
bWJseU1vZHVsZVJlY29yZC5jcHAJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxOSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTc4LDcgKzc4LDggQEAgdm9pZCBXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6ZmluaXNo
Q3JlYQogICAgIH0KIH0KIAotdm9pZCBXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6dmlzaXRDaGls
ZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5h
bWUgVmlzaXRvcj4KK3ZvaWQgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OnZpc2l0Q2hpbGRyZW5J
bXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBXZWJBc3NlbWJseU1v
ZHVsZVJlY29yZCogdGhpc09iamVjdCA9IGpzQ2FzdDxXZWJBc3NlbWJseU1vZHVsZVJlY29yZCo+
KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygp
KTsKQEAgLTg4LDYgKzg5LDggQEAgdm9pZCBXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6dmlzaXRD
aGlsZAogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fZXhwb3J0c09iamVjdCk7CiB9
CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihXZWJBc3NlbWJseU1vZHVsZVJlY29yZCk7CisKIHZv
aWQgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OnByZXBhcmVMaW5rKFZNJiB2bSwgSlNXZWJBc3Nl
bWJseUluc3RhbmNlKiBpbnN0YW5jZSkKIHsKICAgICBSRUxFQVNFX0FTU0VSVCghbV9pbnN0YW5j
ZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVs
ZVJlY29yZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dl
YkFzc2VtYmx5TW9kdWxlUmVjb3JkLmgJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTkgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC02OSw3ICs2OSw3IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGZpbmlzaENyZWF0aW9u
KEpTR2xvYmFsT2JqZWN0KiwgVk0mLCBjb25zdCBXYXNtOjpNb2R1bGVJbmZvcm1hdGlvbiYpOwog
Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwor
ICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBXcml0ZUJhcnJpZXI8SlNXZWJBc3Nl
bWJseUluc3RhbmNlPiBtX2luc3RhbmNlOwogICAgIFdyaXRlQmFycmllcjxKU09iamVjdD4gbV9z
dGFydEZ1bmN0aW9uOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNz
ZW1ibHlXcmFwcGVyRnVuY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmNwcAkocmV2aXNpb24gMjcy
OTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlXcmFwcGVy
RnVuY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxNy0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjcsNyArNjcsOCBAQCBTdHJ1Y3R1cmUq
IFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uOjpjCiAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3Jl
YXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oSlNGdW5jdGlvblR5cGUs
IFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKIH0KIAotdm9pZCBXZWJBc3NlbWJseVdyYXBwZXJG
dW5jdGlvbjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9y
KQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgV2ViQXNzZW1ibHlXcmFwcGVyRnVu
Y3Rpb246OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikK
IHsKICAgICBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbiogdGhpc09iamVjdCA9IGpzQ2FzdDxX
ZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbio+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1Rf
SU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTc2LDYgKzc3LDggQEAgdm9pZCBXZWJB
c3NlbWJseVdyYXBwZXJGdW5jdGlvbjo6dmlzaXRDaAogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNP
YmplY3QtPm1fZnVuY3Rpb24pOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oV2ViQXNzZW1i
bHlXcmFwcGVyRnVuY3Rpb24pOworCiBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oY2FsbFdlYkFz
c2VtYmx5V3JhcHBlckZ1bmN0aW9uLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2Fs
bEZyYW1lKiBjYWxsRnJhbWUpKQogewogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5V3JhcHBlckZ1
bmN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2Vi
QXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uaAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAxOSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTU5LDcgKzU5LDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBXZWJBc3Nl
bWJseVdyYXBwZXJGdW5jdGlvbihWTSYsIE5hdGl2ZUV4ZWN1dGFibGUqLCBKU0dsb2JhbE9iamVj
dCosIFN0cnVjdHVyZSosIFdhc21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rpb24pOwogICAgIHZvaWQg
ZmluaXNoQ3JlYXRpb24oVk0mLCBOYXRpdmVFeGVjdXRhYmxlKiwgdW5zaWduZWQgbGVuZ3RoLCBj
b25zdCBTdHJpbmcmIG5hbWUsIEpTT2JqZWN0KiwgSlNXZWJBc3NlbWJseUluc3RhbmNlKik7Ci0g
ICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAg
IERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBXcml0ZUJhcnJpZXI8SlNPYmplY3Q+IG1f
ZnVuY3Rpb247CiAgICAgLy8gSXQncyBzYWZlIHRvIGp1c3QgaG9sZCB0aGUgcmF3IFdhc21Ub1dh
c21JbXBvcnRhYmxlRnVuY3Rpb24gYmVjYXVzZSB3ZSBoYXZlIGEgcmVmZXJlbmNlCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUu
Y3BwCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJPYmplY3RTdG9yZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNzI4LDcgKzcyOCw4IEBAIHZvaWQg
SURCT2JqZWN0U3RvcmU6OnJvbGxiYWNrRm9yVmVyc2lvbkMKICAgICB9CiB9CiAKLXZvaWQgSURC
T2JqZWN0U3RvcmU6OnZpc2l0UmVmZXJlbmNlZEluZGV4ZXMoU2xvdFZpc2l0b3ImIHZpc2l0b3Ip
IGNvbnN0Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBJREJPYmplY3RTdG9yZTo6
dmlzaXRSZWZlcmVuY2VkSW5kZXhlcyhWaXNpdG9yJiB2aXNpdG9yKSBjb25zdAogewogICAgIExv
Y2tlcjxMb2NrPiBsb2NrZXIobV9yZWZlcmVuY2VkSW5kZXhMb2NrKTsKICAgICBmb3IgKGF1dG8m
IGluZGV4IDogbV9yZWZlcmVuY2VkSW5kZXhlcy52YWx1ZXMoKSkKQEAgLTczNyw2ICs3MzgsOSBA
QCB2b2lkIElEQk9iamVjdFN0b3JlOjp2aXNpdFJlZmVyZW5jZWRJbmRlCiAgICAgICAgIHZpc2l0
b3IuYWRkT3BhcXVlUm9vdChpbmRleC5nZXQoKSk7CiB9CiAKK3RlbXBsYXRlIHZvaWQgSURCT2Jq
ZWN0U3RvcmU6OnZpc2l0UmVmZXJlbmNlZEluZGV4ZXMoQWJzdHJhY3RTbG90VmlzaXRvciYpIGNv
bnN0OwordGVtcGxhdGUgdm9pZCBJREJPYmplY3RTdG9yZTo6dmlzaXRSZWZlcmVuY2VkSW5kZXhl
cyhTbG90VmlzaXRvciYpIGNvbnN0OworCiB2b2lkIElEQk9iamVjdFN0b3JlOjpyZW5hbWVSZWZl
cmVuY2VkSW5kZXgoSURCSW5kZXgmIGluZGV4LCBjb25zdCBTdHJpbmcmIG5ld05hbWUpCiB7CiAg
ICAgTE9HKEluZGV4ZWREQiwgIklEQk9iamVjdFN0b3JlOjpyZW5hbWVSZWZlcmVuY2VkSW5kZXgi
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3Jl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2Jq
ZWN0U3RvcmUuaAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCT2JqZWN0U3RvcmUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMDksNyArMTA5LDcgQEAg
cHVibGljOgogICAgIHZvaWQgcmVmKCk7CiAgICAgdm9pZCBkZXJlZigpOwogCi0gICAgdm9pZCB2
aXNpdFJlZmVyZW5jZWRJbmRleGVzKEpTQzo6U2xvdFZpc2l0b3ImKSBjb25zdDsKKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIHZpc2l0UmVmZXJlbmNlZEluZGV4ZXMoVmlzaXRv
ciYpIGNvbnN0OwogICAgIHZvaWQgcmVuYW1lUmVmZXJlbmNlZEluZGV4KElEQkluZGV4JiwgY29u
c3QgU3RyaW5nJiBuZXdOYW1lKTsKIAogcHJpdmF0ZToKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5jcHAJKHJldmlzaW9uIDI3
MjkwMikKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9u
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTUtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE0NTUsNyArMTQ1NSw4IEBAIHZvaWQgSURCVHJhbnNh
Y3Rpb246OmNvbm5lY3Rpb25DbG9zZWRGcm8KICAgICBmaXJlT25BYm9ydCgpOwogfQogCi12b2lk
IElEQlRyYW5zYWN0aW9uOjp2aXNpdFJlZmVyZW5jZWRPYmplY3RTdG9yZXMoSlNDOjpTbG90Vmlz
aXRvciYgdmlzaXRvcikgY29uc3QKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIElE
QlRyYW5zYWN0aW9uOjp2aXNpdFJlZmVyZW5jZWRPYmplY3RTdG9yZXMoVmlzaXRvciYgdmlzaXRv
cikgY29uc3QKIHsKICAgICBMb2NrZXI8TG9jaz4gbG9ja2VyKG1fcmVmZXJlbmNlZE9iamVjdFN0
b3JlTG9jayk7CiAgICAgZm9yIChhdXRvJiBvYmplY3RTdG9yZSA6IG1fcmVmZXJlbmNlZE9iamVj
dFN0b3Jlcy52YWx1ZXMoKSkKQEAgLTE0NjQsNiArMTQ2NSw5IEBAIHZvaWQgSURCVHJhbnNhY3Rp
b246OnZpc2l0UmVmZXJlbmNlZE9iamUKICAgICAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KG9i
amVjdFN0b3JlLmdldCgpKTsKIH0KIAordGVtcGxhdGUgdm9pZCBJREJUcmFuc2FjdGlvbjo6dmlz
aXRSZWZlcmVuY2VkT2JqZWN0U3RvcmVzKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpIGNvbnN0
OwordGVtcGxhdGUgdm9pZCBJREJUcmFuc2FjdGlvbjo6dmlzaXRSZWZlcmVuY2VkT2JqZWN0U3Rv
cmVzKEpTQzo6U2xvdFZpc2l0b3ImKSBjb25zdDsKKwogdm9pZCBJREJUcmFuc2FjdGlvbjo6aGFu
ZGxlUGVuZGluZ09wZXJhdGlvbnMoKQogewogICAgIEFTU0VSVChjYW5DdXJyZW50VGhyZWFkQWNj
ZXNzVGhyZWFkTG9jYWxEYXRhKG1fZGF0YWJhc2UtPm9yaWdpblRocmVhZCgpKSk7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmgJ
KHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
QlRyYW5zYWN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTQ5LDcgKzE0OSw3IEBAIHB1YmxpYzoKIAog
ICAgIHZvaWQgY29ubmVjdGlvbkNsb3NlZEZyb21TZXJ2ZXIoY29uc3QgSURCRXJyb3ImKTsKIAot
ICAgIHZvaWQgdmlzaXRSZWZlcmVuY2VkT2JqZWN0U3RvcmVzKEpTQzo6U2xvdFZpc2l0b3ImKSBj
b25zdDsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIHZpc2l0UmVmZXJlbmNl
ZE9iamVjdFN0b3JlcyhWaXNpdG9yJikgY29uc3Q7CiAKICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0
aWMgc3RkOjphdG9taWM8dW5zaWduZWQ+IG51bWJlck9mSURCVHJhbnNhY3Rpb25zOwogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQnVmZmVyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQnVmZmVyLmNwcAko
cmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRp
b0J1ZmZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogQ29weXJp
Z2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xNTQsMTIgKzE1NCwxNiBAQCBFeGNlcHRpb25PcjxK
U0M6OkpTVmFsdWU+IEF1ZGlvQnVmZmVyOjpnCiAgICAgcmV0dXJuIGNvbnN0cnVjdEpTQXJyYXko
KTsKIH0KIAotdm9pZCBBdWRpb0J1ZmZlcjo6dmlzaXRDaGFubmVsV3JhcHBlcnMoSlNDOjpTbG90
VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEF1ZGlv
QnVmZmVyOjp2aXNpdENoYW5uZWxXcmFwcGVycyhWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGZv
ciAoYXV0byYgY2hhbm5lbFdyYXBwZXIgOiBtX2NoYW5uZWxXcmFwcGVycykKICAgICAgICAgY2hh
bm5lbFdyYXBwZXIudmlzaXQodmlzaXRvcik7CiB9CiAKK3RlbXBsYXRlIHZvaWQgQXVkaW9CdWZm
ZXI6OnZpc2l0Q2hhbm5lbFdyYXBwZXJzKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVt
cGxhdGUgdm9pZCBBdWRpb0J1ZmZlcjo6dmlzaXRDaGFubmVsV3JhcHBlcnMoSlNDOjpTbG90Vmlz
aXRvciYpOworCiBSZWZQdHI8RmxvYXQzMkFycmF5PiBBdWRpb0J1ZmZlcjo6Y2hhbm5lbERhdGEo
dW5zaWduZWQgY2hhbm5lbEluZGV4KQogewogICAgIGlmIChjaGFubmVsSW5kZXggPj0gbV9jaGFu
bmVscy5zaXplKCkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlv
QnVmZmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9B
dWRpb0J1ZmZlci5oCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmF1ZGlvL0F1ZGlvQnVmZmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAv
KgogICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03NSw3ICs3NSw3IEBAIHB1Ymxp
YzoKIAogICAgIHNpemVfdCBtZW1vcnlDb3N0KCkgY29uc3Q7CiAKLSAgICB2b2lkIHZpc2l0Q2hh
bm5lbFdyYXBwZXJzKEpTQzo6U2xvdFZpc2l0b3ImKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPiB2b2lkIHZpc2l0Q2hhbm5lbFdyYXBwZXJzKFZpc2l0b3ImKTsKICAgICAKIHByaXZh
dGU6CiAgICAgQXVkaW9CdWZmZXIodW5zaWduZWQgbnVtYmVyT2ZDaGFubmVscywgc2l6ZV90IGxl
bmd0aCwgZmxvYXQgc2FtcGxlUmF0ZSwgTGVnYWN5UHJldmVudERldGFjaGluZyA9IExlZ2FjeVBy
ZXZlbnREZXRhY2hpbmc6Ok5vKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0RP
TUdDT3V0cHV0Q29uc3RyYWludC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvRE9NR0NPdXRwdXRDb25zdHJhaW50LmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvRE9NR0NPdXRwdXRDb25zdHJhaW50LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDksNyArNDksOCBAQCBET01HQ091dHB1dENvbnN0cmFpbnQ6On5ET01H
Q091dHB1dENvbnN0CiB7CiB9CiAKLXZvaWQgRE9NR0NPdXRwdXRDb25zdHJhaW50OjpleGVjdXRl
SW1wbChTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2
b2lkIERPTUdDT3V0cHV0Q29uc3RyYWludDo6ZXhlY3V0ZUltcGxJbXBsKFZpc2l0b3ImIHZpc2l0
b3IpCiB7CiAgICAgSGVhcCYgaGVhcCA9IG1fdm0uaGVhcDsKICAgICAKQEAgLTYwLDE1ICs2MSwx
OSBAQCB2b2lkIERPTUdDT3V0cHV0Q29uc3RyYWludDo6ZXhlY3V0ZUltcGwoCiAgICAgCiAgICAg
bV9jbGllbnREYXRhLmZvckVhY2hPdXRwdXRDb25zdHJhaW50U3BhY2UoCiAgICAgICAgIFsmXSAo
U3Vic3BhY2UmIHN1YnNwYWNlKSB7Ci0gICAgICAgICAgICBhdXRvIGZ1bmMgPSBbXSAoU2xvdFZp
c2l0b3ImIHZpc2l0b3IsIEhlYXBDZWxsKiBoZWFwQ2VsbCwgSGVhcENlbGw6OktpbmQpIHsKKyAg
ICAgICAgICAgIGF1dG8gZnVuYyA9IFtdIChWaXNpdG9yJiB2aXNpdG9yLCBIZWFwQ2VsbCogaGVh
cENlbGwsIEhlYXBDZWxsOjpLaW5kKSB7CiAgICAgICAgICAgICAgICAgU2V0Um9vdE1hcmtSZWFz
b25TY29wZSByb290U2NvcGUodmlzaXRvciwgUm9vdE1hcmtSZWFzb246OkRPTUdDT3V0cHV0KTsK
ICAgICAgICAgICAgICAgICBKU0NlbGwqIGNlbGwgPSBzdGF0aWNfY2FzdDxKU0NlbGwqPihoZWFw
Q2VsbCk7CiAgICAgICAgICAgICAgICAgY2VsbC0+bWV0aG9kVGFibGUodmlzaXRvci52bSgpKS0+
dmlzaXRPdXRwdXRDb25zdHJhaW50cyhjZWxsLCB2aXNpdG9yKTsKICAgICAgICAgICAgIH07CiAg
ICAgICAgICAgICAKLSAgICAgICAgICAgIHZpc2l0b3IuYWRkUGFyYWxsZWxDb25zdHJhaW50VGFz
ayhzdWJzcGFjZS5mb3JFYWNoTWFya2VkQ2VsbEluUGFyYWxsZWwoZnVuYykpOworICAgICAgICAg
ICAgUmVmUHRyPFNoYXJlZFRhc2s8dm9pZChWaXNpdG9yJik+PiB0YXNrID0gc3Vic3BhY2UudGVt
cGxhdGUgZm9yRWFjaE1hcmtlZENlbGxJblBhcmFsbGVsPFZpc2l0b3I+KGZ1bmMpOworICAgICAg
ICAgICAgdmlzaXRvci5hZGRQYXJhbGxlbENvbnN0cmFpbnRUYXNrKHRhc2spOwogICAgICAgICB9
KTsKIH0KICAgICAgICAgCit2b2lkIERPTUdDT3V0cHV0Q29uc3RyYWludDo6ZXhlY3V0ZUltcGwo
QWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikgeyBleGVjdXRlSW1wbEltcGwodmlzaXRvcik7
IH0KK3ZvaWQgRE9NR0NPdXRwdXRDb25zdHJhaW50OjpleGVjdXRlSW1wbChTbG90VmlzaXRvciYg
dmlzaXRvcikgeyBleGVjdXRlSW1wbEltcGwodmlzaXRvcik7IH0KKwogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9ET01HQ091dHB1dENv
bnN0cmFpbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9ET01H
Q091dHB1dENvbnN0cmFpbnQuaAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvRE9NR0NPdXRwdXRDb25zdHJhaW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMTggQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00
Miw5ICs0MiwxMiBAQCBwdWJsaWM6CiAgICAgfkRPTUdDT3V0cHV0Q29uc3RyYWludCgpOwogICAg
IAogcHJvdGVjdGVkOgorICAgIHZvaWQgZXhlY3V0ZUltcGwoSlNDOjpBYnN0cmFjdFNsb3RWaXNp
dG9yJikgb3ZlcnJpZGU7CiAgICAgdm9pZCBleGVjdXRlSW1wbChKU0M6OlNsb3RWaXNpdG9yJikg
b3ZlcnJpZGU7CiAKIHByaXZhdGU6CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9p
ZCBleGVjdXRlSW1wbEltcGwoVmlzaXRvciYpOworCiAgICAgSlNDOjpWTSYgbV92bTsKICAgICBK
U1ZNQ2xpZW50RGF0YSYgbV9jbGllbnREYXRhOwogICAgIHVpbnQ2NF90IG1fbGFzdEV4ZWN1dGlv
blZlcnNpb247CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Fib3J0Q29udHJv
bGxlckN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNBYm9ydENvbnRyb2xsZXJDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Fib3J0Q29udHJvbGxlckN1c3RvbS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKiBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAqCiAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTI4LDkgKzI4LDEyIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBKU0Fib3J0Q29u
dHJvbGxlcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRv
cikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTQWJvcnRDb250cm9sbGVyOjp2
aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHZpc2l0b3Iu
YWRkT3BhcXVlUm9vdCgmd3JhcHBlZCgpLnNpZ25hbCgpKTsKIH0KIAorREVGSU5FX1ZJU0lUX0FE
RElUSU9OQUxfQ0hJTERSRU4oSlNBYm9ydENvbnRyb2xsZXIpOworCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Fib3J0U2lnbmFsQ3Vz
dG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Fib3J0
U2lnbmFsQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNBYm9ydFNpZ25hbEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorKiBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAqCiAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI4LDcgKzI4LDcgQEAK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1ib29sIEpTQWJvcnRTaWduYWxPd25lcjo6aXNSZWFj
aGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZv
aWQqLCBKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQorYm9v
bCBKU0Fib3J0U2lnbmFsT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFu
ZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9y
JiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQogewogICAgIGF1dG8mIGFib3J0U2lnbmFs
ID0gSlNDOjpqc0Nhc3Q8SlNBYm9ydFNpZ25hbCo+KGhhbmRsZS5zbG90KCktPmFzQ2VsbCgpKS0+
d3JhcHBlZCgpOwogICAgIGlmIChhYm9ydFNpZ25hbC5pc0ZpcmluZ0V2ZW50TGlzdGVuZXJzKCkp
IHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXR0ckN1c3RvbS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNBdHRyQ3VzdG9tLmNwcAko
cmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNBdHRyQ3Vz
dG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDcsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDA3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMywxMCArMzMsMTMgQEAKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIEpTQXR0cjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4o
SlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2
b2lkIEpTQXR0cjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsK
ICAgICBpZiAoRWxlbWVudCogZWxlbWVudCA9IHdyYXBwZWQoKS5vd25lckVsZW1lbnQoKSkKICAg
ICAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHJvb3QoZWxlbWVudCkpOwogfQogCitERUZJTkVf
VklTSVRfQURESVRJT05BTF9DSElMRFJFTihKU0F0dHIpOworCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0F1ZGlvQnVmZmVyQ3VzdG9t
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0F1ZGlvQnVm
ZmVyQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNBdWRpb0J1ZmZlckN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzEsMTEgKzMxLDE0
IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCi12b2lkIEpT
QXVkaW9CdWZmZXI6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9y
KQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNBdWRpb0J1ZmZlcjo6dmlzaXRB
ZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB3cmFwcGVkKCkudmlz
aXRDaGFubmVsV3JhcHBlcnModmlzaXRvcik7CiB9CiAKK0RFRklORV9WSVNJVF9BRERJVElPTkFM
X0NISUxEUkVOKEpTQXVkaW9CdWZmZXIpOworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNl
bmRpZiAvLyBFTkFCTEUoV0VCX0FVRElPKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNBdWRpb1RyYWNrQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0F1ZGlvVHJhY2tDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI5MDIpCisrKyBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0F1ZGlvVHJhY2tDdXN0b20uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAyMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTM1LDExICszNSwxNCBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogdXNpbmcgbmFtZXNw
YWNlIEpTQzsKIAotdm9pZCBKU0F1ZGlvVHJhY2s6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNB
dWRpb1RyYWNrOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewog
ICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChyb290KCZ3cmFwcGVkKCkpKTsKIH0KIAorREVGSU5F
X1ZJU0lUX0FERElUSU9OQUxfQ0hJTERSRU4oSlNBdWRpb1RyYWNrKTsKKwogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQogCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
QXVkaW9UcmFja0xpc3RDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTQXVkaW9UcmFja0xpc3RDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI5MDIpCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0F1ZGlvVHJhY2tMaXN0Q3VzdG9tLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLTIw
MjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0zNiwxMSArMzYsMTQgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5n
IG5hbWVzcGFjZSBKU0M7CiAKLXZvaWQgSlNBdWRpb1RyYWNrTGlzdDo6dmlzaXRBZGRpdGlvbmFs
Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
Pgordm9pZCBKU0F1ZGlvVHJhY2tMaXN0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9y
JiB2aXNpdG9yKQogewogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChyb290KHdyYXBwZWQoKS5l
bGVtZW50KCkpKTsKIH0KIAorREVGSU5FX1ZJU0lUX0FERElUSU9OQUxfQ0hJTERSRU4oSlNBdWRp
b1RyYWNrTGlzdCk7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0F1ZGlvV29ya2xldFByb2Nlc3NvckN1c3RvbS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNBdWRpb1dvcmts
ZXRQcm9jZXNzb3JDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0F1ZGlvV29ya2xldFByb2Nlc3NvckN1c3RvbS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMC0yMDIxIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMzEsNyArMzEsOCBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogdXNpbmcgbmFtZXNwYWNl
IEpTQzsKIAotdm9pZCBKU0F1ZGlvV29ya2xldFByb2Nlc3Nvcjo6dmlzaXRBZGRpdGlvbmFsQ2hp
bGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgor
dm9pZCBKU0F1ZGlvV29ya2xldFByb2Nlc3Nvcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlz
aXRvciYgdmlzaXRvcikKIHsKICAgICBhdXRvJiBwcm9jZXNzb3IgPSB3cmFwcGVkKCk7CiAgICAg
cHJvY2Vzc29yLmpzSW5wdXRzV3JhcHBlcigpLnZpc2l0KHZpc2l0b3IpOwpAQCAtMzksNiArNDAs
OCBAQCB2b2lkIEpTQXVkaW9Xb3JrbGV0UHJvY2Vzc29yOjp2aXNpdEFkZGl0CiAgICAgcHJvY2Vz
c29yLmpzUGFyYW1WYWx1ZXNXcmFwcGVyKCkudmlzaXQodmlzaXRvcik7CiB9CiAKK0RFRklORV9W
SVNJVF9BRERJVElPTkFMX0NISUxEUkVOKEpTQXVkaW9Xb3JrbGV0UHJvY2Vzc29yKTsKKwogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQl9BVURJTykKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ1NTUnVsZUN1c3RvbS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDU1NSdWxlQ3VzdG9tLmNwcAkocmV2
aXNpb24gMjcyOTAyKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDU1NSdWxlQ3Vz
dG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDA3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01MSwxMSArNTEsMTQgQEAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKLXZvaWQgSlNDU1NSdWxlOjp2aXNpdEFk
ZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1l
IFZpc2l0b3I+Cit2b2lkIEpTQ1NTUnVsZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRv
ciYgdmlzaXRvcikKIHsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qocm9vdCgmd3JhcHBlZCgp
KSk7CiB9CiAKK0RFRklORV9WSVNJVF9BRERJVElPTkFMX0NISUxEUkVOKEpTQ1NTUnVsZSk7CisK
IEpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0dsb2JhbE9iamVjdCosIEpTRE9NR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIFJlZjxDU1NSdWxlPiYmIHJ1bGUpCiB7CiAgICAgc3dpdGNoIChy
dWxlLT50eXBlKCkpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ1NTUnVs
ZUxpc3RDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTQ1NTUnVsZUxpc3RDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0NTU1J1bGVMaXN0Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxOSBBcHBsZSBJbmMu
IEFsbCByaWdodCByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDIxIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0zNiw3ICszNiw3IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2UgSlND
OwogCi1ib29sIEpTQ1NTUnVsZUxpc3RPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMo
SlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBTbG90VmlzaXRvciYgdmlz
aXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikKK2Jvb2wgSlNDU1NSdWxlTGlzdE93bmVyOjppc1Jl
YWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwg
dm9pZCosIEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24p
CiB7CiAgICAgSlNDU1NSdWxlTGlzdCoganNDU1NSdWxlTGlzdCA9IGpzQ2FzdDxKU0NTU1J1bGVM
aXN0Kj4oaGFuZGxlLnNsb3QoKS0+YXNDZWxsKCkpOwogICAgIGlmICghanNDU1NSdWxlTGlzdC0+
aGFzQ3VzdG9tUHJvcGVydGllcyhqc0NTU1J1bGVMaXN0LT52bSgpKSkKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ1NTU3R5bGVEZWNsYXJhdGlvbkN1c3RvbS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDU1NTdHlsZURlY2xhcmF0aW9u
Q3VzdG9tLmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNDU1NTdHlsZURlY2xhcmF0aW9uQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAyMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTUx
LDkgKzUxLDEyIEBAIHZvaWQqIHJvb3QoQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUpCiAgICAg
cmV0dXJuIHN0eWxlOwogfQogCi12b2lkIEpTQ1NTU3R5bGVEZWNsYXJhdGlvbjo6dmlzaXRBZGRp
dGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPgordm9pZCBKU0NTU1N0eWxlRGVjbGFyYXRpb246OnZpc2l0QWRkaXRpb25hbENoaWxk
cmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHJvb3Qo
JndyYXBwZWQoKSkpOwogfQogCitERUZJTkVfVklTSVRfQURESVRJT05BTF9DSElMRFJFTihKU0NT
U1N0eWxlRGVjbGFyYXRpb24pOworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NhbGxiYWNrRGF0YS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDYWxsYmFja0RhdGEuY3BwCShyZXZpc2lvbiAy
NzI5MDIpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NhbGxiYWNrRGF0YS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA3
LTIwMDksIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDA3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC05NSwxMiArOTUsMTYgQEAgSlNWYWx1ZSBKU0NhbGxi
YWNrRGF0YTo6aW52b2tlQ2FsbGJhY2soSgogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQg
SlNDYWxsYmFja0RhdGFXZWFrOjp2aXNpdEpTRnVuY3Rpb24oSlNDOjpTbG90VmlzaXRvciYgdmlz
dG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNDYWxsYmFja0RhdGFXZWFr
Ojp2aXNpdEpTRnVuY3Rpb24oVmlzaXRvciYgdmlzaXRvcikKIHsKLSAgICB2aXN0b3IuYXBwZW5k
KG1fY2FsbGJhY2spOworICAgIHZpc2l0b3IuYXBwZW5kKG1fY2FsbGJhY2spOwogfQogCi1ib29s
IEpTQ2FsbGJhY2tEYXRhV2Vhazo6V2Vha093bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290
cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0LCBTbG90VmlzaXRvciYg
dmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikKK3RlbXBsYXRlIHZvaWQgSlNDYWxsYmFja0Rh
dGFXZWFrOjp2aXNpdEpTRnVuY3Rpb24oSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1w
bGF0ZSB2b2lkIEpTQ2FsbGJhY2tEYXRhV2Vhazo6dmlzaXRKU0Z1bmN0aW9uKEpTQzo6U2xvdFZp
c2l0b3ImKTsKKworYm9vbCBKU0NhbGxiYWNrRGF0YVdlYWs6OldlYWtPd25lcjo6aXNSZWFjaGFi
bGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4
dCwgQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikKIHsK
ICAgICBpZiAoVU5MSUtFTFkocmVhc29uKSkKICAgICAgICAgKnJlYXNvbiA9ICJDb250ZXh0IGlz
IG9wYXF1ZSByb290IjsgLy8gRklYTUU6IHdoYXQgaXMgdGhlIGNvbnRleHQuCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NhbGxiYWNrRGF0YS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2FsbGJhY2tEYXRhLmgJKHJldmlzaW9uIDI3Mjkw
MikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2FsbGJhY2tEYXRhLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDks
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDA3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC0xMTMsMTEgKzExMywxMSBAQCBwdWJsaWM6CiAgICAgICAgIHJl
dHVybiBKU0NhbGxiYWNrRGF0YTo6aW52b2tlQ2FsbGJhY2soKmdsb2JhbE9iamVjdCwgY2FsbGJh
Y2soKSwgdGhpc1ZhbHVlLCBhcmdzLCBjYWxsYmFja1R5cGUsIGZ1bmN0aW9uTmFtZSwgcmV0dXJu
ZWRFeGNlcHRpb24pOwogICAgIH0KIAotICAgIHZvaWQgdmlzaXRKU0Z1bmN0aW9uKEpTQzo6U2xv
dFZpc2l0b3ImKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIHZpc2l0SlNG
dW5jdGlvbihWaXNpdG9yJik7CiAKIHByaXZhdGU6CiAgICAgY2xhc3MgV2Vha093bmVyIDogcHVi
bGljIEpTQzo6V2Vha0hhbmRsZU93bmVyIHsKLSAgICAgICAgYm9vbCBpc1JlYWNoYWJsZUZyb21P
cGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0LCBKU0M6
OlNsb3RWaXNpdG9yJiwgY29uc3QgY2hhcioqKSBvdmVycmlkZTsKKyAgICAgICAgYm9vbCBpc1Jl
YWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBj
b250ZXh0LCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImLCBjb25zdCBjaGFyKiopIG92ZXJyaWRl
OwogICAgIH07CiAgICAgV2Vha093bmVyIG1fd2Vha093bmVyOwogICAgIEpTQzo6V2VhazxKU0M6
OkpTT2JqZWN0PiBtX2NhbGxiYWNrOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQ3VzdG9tLmNw
cAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDYW52
YXNSZW5kZXJpbmdDb250ZXh0MkRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjQsNyArMjQsNyBAQAogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLWJvb2wgSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRPd25l
cjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBo
YW5kbGUsIHZvaWQqLCBKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVh
c29uKQorYm9vbCBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRE93bmVyOjppc1JlYWNoYWJsZUZy
b21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIEpT
Qzo6QWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikKIHsK
ICAgICBpZiAoVU5MSUtFTFkocmVhc29uKSkKICAgICAgICAgKnJlYXNvbiA9ICJDYW52YXMgaXMg
b3BhcXVlIHJvb3QiOwpAQCAtMzQsOSArMzQsMTIgQEAgYm9vbCBKU0NhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyRE93bmVyOjppcwogICAgIHJldHVybiB2aXNpdG9yLmNvbnRhaW5zT3BhcXVlUm9vdChy
b290KTsKIH0KIAotdm9pZCBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6dmlzaXRBZGRpdGlv
bmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1l
IFZpc2l0b3I+Cit2b2lkIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjp2aXNpdEFkZGl0aW9u
YWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9v
dChyb290KHdyYXBwZWQoKS5jYW52YXMoKSkpOwogfQogCitERUZJTkVfVklTSVRfQURESVRJT05B
TF9DSElMRFJFTihKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCk7CisKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9tRXZlbnRD
dXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3Vz
dG9tRXZlbnRDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0N1c3RvbUV2ZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxOCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQy
LDEwICs0MiwxMyBAQCBKU0M6OkpTVmFsdWUgSlNDdXN0b21FdmVudDo6ZGV0YWlsKEpTQzo6CiAg
ICAgfSk7CiB9CiAKLXZvaWQgSlNDdXN0b21FdmVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4o
SlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2
b2lkIEpTQ3VzdG9tRXZlbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0
b3IpCiB7CiAgICAgd3JhcHBlZCgpLmRldGFpbCgpLnZpc2l0KHZpc2l0b3IpOwogICAgIHdyYXBw
ZWQoKS5jYWNoZWREZXRhaWwoKS52aXNpdCh2aXNpdG9yKTsKIH0KIAorREVGSU5FX1ZJU0lUX0FE
RElUSU9OQUxfQ0hJTERSRU4oSlNDdXN0b21FdmVudCk7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQnVpbHRpbkNvbnN0cnVj
dG9yQmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNE
T01CdWlsdGluQ29uc3RydWN0b3JCYXNlLmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CdWlsdGluQ29uc3RydWN0b3JCYXNlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIw
MDEgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDQt
MjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAy
MDA0LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogIENvcHlyaWdodCAo
QykgMjAwNyBTYW11ZWwgV2VpbmlnIDxzYW1Ad2Via2l0Lm9yZz4KICAqICBDb3B5cmlnaHQgKEMp
IDIwMTMgTWljaGFlbCBQcnVldHQgPG1pY2hhZWxANjhrLm9yZz4KICAqCkBAIC00NSw3ICs0NSw4
IEBAIHZvaWQgSlNET01CdWlsdGluQ29uc3RydWN0b3JCYXNlOjpjYWxsRnUKICAgICBKU0M6OmNh
bGwoJmxleGljYWxHbG9iYWxPYmplY3QsICZmdW5jdGlvbiwgY2FsbERhdGEsICZ0aGlzT2JqZWN0
LCBhcmd1bWVudHMpOwogfQogCi12b2lkIEpTRE9NQnVpbHRpbkNvbnN0cnVjdG9yQmFzZTo6dmlz
aXRDaGlsZHJlbihKU0M6OkpTQ2VsbCogY2VsbCwgSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikK
K3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTRE9NQnVpbHRpbkNvbnN0cnVjdG9y
QmFzZTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDOjpKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0
b3IpCiB7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0RPTUJ1aWx0aW5Db25zdHJ1
Y3RvckJhc2UqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmpl
Y3QsIGluZm8oKSk7CkBAIC01Myw2ICs1NCw4IEBAIHZvaWQgSlNET01CdWlsdGluQ29uc3RydWN0
b3JCYXNlOjp2aXNpdEMKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2luaXRpYWxp
emVGdW5jdGlvbik7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU0RPTUJ1aWx0aW5Db25z
dHJ1Y3RvckJhc2UpOworCiBKU0M6Oklzb1N1YnNwYWNlKiBKU0RPTUJ1aWx0aW5Db25zdHJ1Y3Rv
ckJhc2U6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKIHsKICAgICByZXR1cm4gJnN0YXRp
Y19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSktPmRvbUJ1aWx0aW5Db25zdHJ1
Y3RvclNwYWNlKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJ1aWx0
aW5Db25zdHJ1Y3RvckJhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0RPTUJ1aWx0aW5Db25zdHJ1Y3RvckJhc2UuaAkocmV2aXNpb24gMjcyOTAyKQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CdWlsdGluQ29uc3RydWN0b3JCYXNlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMjAx
NSwgMjAxNiBDYW5vbiBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiAgQ29weXJpZ2h0IChD
KSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMp
IDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
ICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwg
UHVibGljCkBAIC00Miw3ICs0Miw3IEBAIHByb3RlY3RlZDoKICAgICB7CiAgICAgfQogCi0gICAg
c3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3Im
KTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgSlNDOjpKU0Z1bmN0aW9uKiBp
bml0aWFsaXplRnVuY3Rpb24oKTsKICAgICB2b2lkIHNldEluaXRpYWxpemVGdW5jdGlvbihKU0M6
OlZNJiwgSlNDOjpKU0Z1bmN0aW9uJik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0RPTUdsb2JhbE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNET01HbG9iYWxPYmplY3QuY3BwCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTggQXBwbGUg
SW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMjEgQXBw
bGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0yMzgsNyArMjM4LDggQEAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogSlNET01HbG9i
YWxPYmplYwogICAgIHJldHVybiBudWxscHRyOwogfQogCi12b2lkIEpTRE9NR2xvYmFsT2JqZWN0
Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1w
bGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0RPTUdsb2JhbE9iamVjdDo6dmlzaXRDaGls
ZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTRE9NR2xv
YmFsT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oY2VsbCk7
CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAt
MjYwLDYgKzI2MSw4IEBAIHZvaWQgSlNET01HbG9iYWxPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlMK
ICAgICB0aGlzT2JqZWN0LT5tX2J1aWx0aW5JbnRlcm5hbEZ1bmN0aW9ucy52aXNpdCh2aXNpdG9y
KTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTRE9NR2xvYmFsT2JqZWN0KTsKKwogdm9p
ZCBKU0RPTUdsb2JhbE9iamVjdDo6cHJvbWlzZVJlamVjdGlvblRyYWNrZXIoSlNHbG9iYWxPYmpl
Y3QqIGpzR2xvYmFsT2JqZWN0LCBKU1Byb21pc2UqIHByb21pc2UsIEpTUHJvbWlzZVJlamVjdGlv
bk9wZXJhdGlvbiBvcGVyYXRpb24pCiB7CiAgICAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdn
Lm9yZy9tdWx0aXBhZ2Uvd2ViYXBwYXBpcy5odG1sI3RoZS1ob3N0cHJvbWlzZXJlamVjdGlvbnRy
YWNrZXItaW1wbGVtZW50YXRpb24KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
RE9NR2xvYmFsT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNET01HbG9iYWxPYmplY3QuaAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNET01HbG9iYWxPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxOCBBcHBsZSBJbmMuIEFsbCBS
aWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAyMSBBcHBsZSBJbmMuIEFs
bCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY5
LDcgKzY5LDcgQEAgcHVibGljOgogICAgIC8vIE1ha2UgYmluZGluZyBjb2RlIGdlbmVyYXRpb24g
ZWFzaWVyLgogICAgIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QoKSB7IHJldHVybiB0
aGlzOyB9CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQzo6SlNDZWxsKiwgSlND
OjpTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBET01X
cmFwcGVyV29ybGQmIHdvcmxkKCkgeyByZXR1cm4gbV93b3JsZC5nZXQoKTsgfQogICAgIGJvb2wg
d29ybGRJc05vcm1hbCgpIGNvbnN0IHsgcmV0dXJuIG1fd29ybGRJc05vcm1hbDsgfQpJbmRleDog
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01HdWFyZGVkT2JqZWN0LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01HdWFyZGVkT2JqZWN0LmgJKHJl
dmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR3VhcmRl
ZE9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQwLDcgKzQwLDcgQEAgcHVibGljOgogCiAgICAgYm9v
bCBpc1N1c3BlbmRlZCgpIGNvbnN0IHsgcmV0dXJuICFtX2d1YXJkZWQgfHwgIWNhbkludm9rZUNh
bGxiYWNrKCk7IH0gLy8gVGhlIHdyYXBwZXIgd29ybGQgaGFzIGdvbmUgYXdheSBvciBhY3RpdmUg
RE9NIG9iamVjdHMgaGF2ZSBiZWVuIHN1c3BlbmRlZC4KIAotICAgIHZvaWQgdmlzaXRBZ2dyZWdh
dGUoSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikgeyB2aXNpdG9yLmFwcGVuZChtX2d1YXJkZWQp
OyB9CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCB2aXNpdEFnZ3JlZ2F0ZShW
aXNpdG9yJiB2aXNpdG9yKSB7IHZpc2l0b3IuYXBwZW5kKG1fZ3VhcmRlZCk7IH0KIAogICAgIEpT
Qzo6SlNWYWx1ZSBndWFyZGVkT2JqZWN0KCkgY29uc3QgeyByZXR1cm4gbV9ndWFyZGVkLmdldCgp
OyB9CiAgICAgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCgpIGNvbnN0IHsgcmV0dXJu
IG1fZ2xvYmFsT2JqZWN0LmdldCgpOyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0RPTVF1YWRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTRE9NUXVhZEN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NUXVhZEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzMs
NyArMzMsOCBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAot
dm9pZCBKU0RPTVF1YWQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNp
dG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNET01RdWFkOjp2aXNpdEFk
ZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHZpc2l0b3IuYWRkT3Bh
cXVlUm9vdChjb25zdF9jYXN0PERPTVBvaW50Kj4oJndyYXBwZWQoKS5wMSgpKSk7CiAgICAgdmlz
aXRvci5hZGRPcGFxdWVSb290KGNvbnN0X2Nhc3Q8RE9NUG9pbnQqPigmd3JhcHBlZCgpLnAyKCkp
KTsKQEAgLTQxLDQgKzQyLDYgQEAgdm9pZCBKU0RPTVF1YWQ6OnZpc2l0QWRkaXRpb25hbENoaWxk
cmVuKAogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChjb25zdF9jYXN0PERPTVBvaW50Kj4oJndy
YXBwZWQoKS5wNCgpKSk7CiB9CiAKLX0KK0RFRklORV9WSVNJVF9BRERJVElPTkFMX0NISUxEUkVO
KEpTRE9NUXVhZCk7CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0N1c3RvbS5jcHAJKHJldmlzaW9uIDI3
MjkwMikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93Q3VzdG9tLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDctMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQg
KEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBA
IC0xMTksNyArMTE5LDggQEAgSlNDX0RFRklORV9DVVNUT01fR0VUVEVSKGpzRE9NV2luZG93SW5z
dAogICAgIHJldHVybiBub25DYWNoaW5nU3RhdGljRnVuY3Rpb25HZXR0ZXJJbXBsPGpzRE9NV2lu
ZG93SW5zdGFuY2VGdW5jdGlvbl9wb3N0TWVzc2FnZSwgMj4oZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0
eU5hbWUpOwogfQogCi12b2lkIEpTRE9NV2luZG93Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihT
bG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpT
RE9NV2luZG93Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewog
ICAgIGlmIChGcmFtZSogZnJhbWUgPSB3cmFwcGVkKCkuZnJhbWUoKSkKICAgICAgICAgdmlzaXRv
ci5hZGRPcGFxdWVSb290KGZyYW1lKTsKQEAgLTEzMiw2ICsxMzMsOCBAQCB2b2lkIEpTRE9NV2lu
ZG93Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlCiAgICAgd3JhcHBlZCgpLnZpc2l0SlNFdmVudExp
c3RlbmVycyh2aXNpdG9yKTsKIH0KIAorREVGSU5FX1ZJU0lUX0FERElUSU9OQUxfQ0hJTERSRU4o
SlNET01XaW5kb3cpOworCiAjaWYgRU5BQkxFKFVTRVJfTUVTU0FHRV9IQU5ETEVSUykKIEpTQ19E
RUZJTkVfQ1VTVE9NX0dFVFRFUihqc0RPTVdpbmRvd193ZWJraXQsIChKU0dsb2JhbE9iamVjdCog
bGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5h
bWUpKQogewpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNEZXByZWNhdGVkQ1NT
T01WYWx1ZUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNEZXByZWNhdGVkQ1NTT01WYWx1ZUN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjkwMikKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGVwcmVjYXRlZENTU09NVmFsdWVDdXN0b20u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwNy0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAwNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzUsNyArMzUsNyBAQAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAotYm9vbCBKU0RlcHJlY2F0ZWRDU1NPTVZhbHVlT3du
ZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4g
aGFuZGxlLCB2b2lkKiwgU2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24p
Citib29sIEpTRGVwcmVjYXRlZENTU09NVmFsdWVPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVl
Um9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBBYnN0cmFjdFNs
b3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQogewogICAgIEpTRGVwcmVj
YXRlZENTU09NVmFsdWUqIGpzQ1NTVmFsdWUgPSBqc0Nhc3Q8SlNEZXByZWNhdGVkQ1NTT01WYWx1
ZSo+KGhhbmRsZS5zbG90KCktPmFzQ2VsbCgpKTsKICAgICBpZiAoIWpzQ1NTVmFsdWUtPmhhc0N1
c3RvbVByb3BlcnRpZXMoanNDU1NWYWx1ZS0+dm0oKSkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0RvY3VtZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0RvY3VtZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gMjcyOTAyKQor
KysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNEb2N1bWVudEN1c3RvbS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDks
IDIwMTEsIDIwMTYsIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDA3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCkBAIC05MSwxMSArOTEsMTQgQEAgSlNWYWx1ZSB0b0pTKEpTR2xvYmFs
T2JqZWN0KiBsZXhpY2FsR2xvYgogICAgIHJldHVybiB0b0pTTmV3bHlDcmVhdGVkKGxleGljYWxH
bG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdCwgUmVmPERvY3VtZW50Pihkb2N1bWVudCkpOwogfQog
Ci12b2lkIEpTRG9jdW1lbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNEb2N1bWVudDo6dmlz
aXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB2aXNpdG9yLmFk
ZE9wYXF1ZVJvb3Qoc3RhdGljX2Nhc3Q8U2NyaXB0RXhlY3V0aW9uQ29udGV4dCo+KCZ3cmFwcGVk
KCkpKTsKIH0KIAorREVGSU5FX1ZJU0lUX0FERElUSU9OQUxfQ0hJTERSRU4oSlNEb2N1bWVudCk7
CisKIHZvaWQgSlNEb2N1bWVudDo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6
ZXImIGFuYWx5emVyKQogewogICAgIEJhc2U6OmFuYWx5emVIZWFwKGNlbGwsIGFuYWx5emVyKTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXJyb3JFdmVudEN1c3RvbS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFcnJvckV2ZW50Q3Vz
dG9tLmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNFcnJvckV2ZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8q
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMTggWXVzdWtlIFN1enVraSA8eXVzdWtlc3V6dWtpQHNsb3dz
dGFydC5vcmc+LgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjgsOSArMjksMTIg
QEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIEpTRXJyb3JFdmVudDo6dmlzaXRBZGRp
dGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVu
YW1lIFZpc2l0b3I+Cit2b2lkIEpTRXJyb3JFdmVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4o
VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB3cmFwcGVkKCkub3JpZ2luYWxFcnJvcigpLnZpc2l0
KHZpc2l0b3IpOwogfQogCitERUZJTkVfVklTSVRfQURESVRJT05BTF9DSElMRFJFTihKU0Vycm9y
RXZlbnQpOworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0V2ZW50TGlzdGVuZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRMaXN0ZW5lci5jcHAJKHJldmlzaW9uIDI3MjkwMikKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRMaXN0ZW5lci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMjAwMSBQZXRlciBL
ZWxseSAocG1rQHBvc3QuY29tKQotICogIENvcHlyaWdodCAoQykgMjAwMy0yMDE5IEFwcGxlIElu
Yy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAyMSBBcHBs
ZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCkBAIC03OCw3
ICs3OCw4IEBAIEpTT2JqZWN0KiBKU0V2ZW50TGlzdGVuZXI6OmluaXRpYWxpemVKU0YKICAgICBy
ZXR1cm4gbnVsbHB0cjsKIH0KIAotdm9pZCBKU0V2ZW50TGlzdGVuZXI6OnZpc2l0SlNGdW5jdGlv
bihTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Citpbmxp
bmUgdm9pZCBKU0V2ZW50TGlzdGVuZXI6OnZpc2l0SlNGdW5jdGlvbkltcGwoVmlzaXRvciYgdmlz
aXRvcikKIHsKICAgICAvLyBJZiBtX3dyYXBwZXIgaXMgbnVsbCwgd2UgYXJlIG5vdCBrZWVwaW5n
IG1fanNGdW5jdGlvbiBhbGl2ZS4KICAgICBpZiAoIW1fd3JhcHBlcikKQEAgLTg3LDYgKzg4LDkg
QEAgdm9pZCBKU0V2ZW50TGlzdGVuZXI6OnZpc2l0SlNGdW5jdGlvbihTbAogICAgIHZpc2l0b3Iu
YXBwZW5kKG1fanNGdW5jdGlvbik7CiB9CiAKK3ZvaWQgSlNFdmVudExpc3RlbmVyOjp2aXNpdEpT
RnVuY3Rpb24oQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikgeyB2aXNpdEpTRnVuY3Rpb25J
bXBsKHZpc2l0b3IpOyB9Cit2b2lkIEpTRXZlbnRMaXN0ZW5lcjo6dmlzaXRKU0Z1bmN0aW9uKFNs
b3RWaXNpdG9yJiB2aXNpdG9yKSB7IHZpc2l0SlNGdW5jdGlvbkltcGwodmlzaXRvcik7IH0KKwog
c3RhdGljIHZvaWQgaGFuZGxlQmVmb3JlVW5sb2FkRXZlbnRSZXR1cm5WYWx1ZShCZWZvcmVVbmxv
YWRFdmVudCYgZXZlbnQsIGNvbnN0IFN0cmluZyYgcmV0dXJuVmFsdWUpCiB7CiAgICAgaWYgKHJl
dHVyblZhbHVlLmlzTnVsbCgpKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNF
dmVudExpc3RlbmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNFdmVudExpc3RlbmVyLmgJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTRXZlbnRMaXN0ZW5lci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBA
QAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDIwMDEgUGV0ZXIgS2VsbHkgKHBta0Bwb3N0LmNvbSkK
LSAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwpAQCAtNjIsNiArNjIsOSBAQCBwdWJsaWM6CiAK
IHByaXZhdGU6CiAgICAgdmlydHVhbCBKU0M6OkpTT2JqZWN0KiBpbml0aWFsaXplSlNGdW5jdGlv
bihTY3JpcHRFeGVjdXRpb25Db250ZXh0JikgY29uc3Q7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBWaXNpdG9yPiB2b2lkIHZpc2l0SlNGdW5jdGlvbkltcGwoVmlzaXRvciYpOworICAgIHZvaWQg
dmlzaXRKU0Z1bmN0aW9uKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpIGZpbmFsOwogICAgIHZv
aWQgdmlzaXRKU0Z1bmN0aW9uKEpTQzo6U2xvdFZpc2l0b3ImKSBmaW5hbDsKIAogcHJvdGVjdGVk
OgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudFRhcmdldEN1c3RvbS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudFRhcmdl
dEN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTRXZlbnRUYXJnZXRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOC0yMDE3IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBS
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDIxIEFwcGxlIEluYy4gQWxsIFJpZ2h0
cyBSZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNzIsOSArNzIs
MTIgQEAgc3RkOjp1bmlxdWVfcHRyPEpTRXZlbnRUYXJnZXRXcmFwcGVyPiBqcwogICAgIHJldHVy
biBudWxscHRyOwogfQogCi12b2lkIEpTRXZlbnRUYXJnZXQ6OnZpc2l0QWRkaXRpb25hbENoaWxk
cmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3Zv
aWQgSlNFdmVudFRhcmdldDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRv
cikKIHsKICAgICB3cmFwcGVkKCkudmlzaXRKU0V2ZW50TGlzdGVuZXJzKHZpc2l0b3IpOwogfQog
CitERUZJTkVfVklTSVRfQURESVRJT05BTF9DSElMRFJFTihKU0V2ZW50VGFyZ2V0KTsKKwogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNG
ZXRjaEV2ZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0ZldGNoRXZlbnRDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0ZldGNoRXZlbnRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTMwLDExICszMCwxNCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgSlNGZXRjaEV2
ZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQor
dGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNGZXRjaEV2ZW50Ojp2aXNpdEFkZGl0
aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHZpc2l0b3IuYWRkT3BhcXVl
Um9vdCgmd3JhcHBlZCgpLnJlcXVlc3QoKSk7CiB9CiAKLX0KK0RFRklORV9WSVNJVF9BRERJVElP
TkFMX0NISUxEUkVOKEpTRmV0Y2hFdmVudCk7CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAog
I2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxDYW52YXNFbGVt
ZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0hUTUxDYW52YXNFbGVtZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MQ2FudmFzRWxlbWVudEN1c3RvbS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMC0yMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMzEsOSArMzEsMTIgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIEpT
SFRNTENhbnZhc0VsZW1lbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0
b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0hUTUxDYW52
YXNFbGVtZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewog
ICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChzdGF0aWNfY2FzdDxDYW52YXNCYXNlKj4oJndyYXBw
ZWQoKSkpOwogfQogCitERUZJTkVfVklTSVRfQURESVRJT05BTF9DSElMRFJFTihKU0hUTUxDYW52
YXNFbGVtZW50KTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNIVE1MVGVtcGxhdGVFbGVtZW50Q3VzdG9tLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxUZW1wbGF0ZUVsZW1lbnRDdXN0
b20uY3BwCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0hUTUxUZW1wbGF0ZUVsZW1lbnRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKQEAgLTM3LDEwICszOCwx
MyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAotdm9pZCBK
U0hUTUxUZW1wbGF0ZUVsZW1lbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZp
c2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0hUTUxU
ZW1wbGF0ZUVsZW1lbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3Ip
CiB7CiAgICAgaWYgKGF1dG8qIGNvbnRlbnQgPSB3cmFwcGVkKCkuY29udGVudElmQXZhaWxhYmxl
KCkpCiAgICAgICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChyb290KGNvbnRlbnQpKTsKIH0KIAor
REVGSU5FX1ZJU0lUX0FERElUSU9OQUxfQ0hJTERSRU4oSlNIVE1MVGVtcGxhdGVFbGVtZW50KTsK
KwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNIaXN0b3J5Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0hpc3RvcnlDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hpc3RvcnlDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOC0yMDE4IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDIxIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtNDQsOSArNDQsMTIgQEAgSlNWYWx1ZSBKU0hpc3Rvcnk6OnN0YXRlKEpTR2xvYmFsT2JqZWN0
JgogICAgIH0pOwogfQogCi12b2lkIEpTSGlzdG9yeTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4o
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBK
U0hpc3Rvcnk6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAg
ICAgd3JhcHBlZCgpLmNhY2hlZFN0YXRlRm9yR0MoKS52aXNpdCh2aXNpdG9yKTsKIH0KIAorREVG
SU5FX1ZJU0lUX0FERElUSU9OQUxfQ0hJTERSRU4oSlNIaXN0b3J5KTsKKwogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJDdXJzb3JD
dXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURC
Q3Vyc29yQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNJREJDdXJzb3JDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTUwLDcgKzUwLDgg
QEAgSlNDOjpKU1ZhbHVlIEpTSURCQ3Vyc29yOjpwcmltYXJ5S2V5KEpTQwogICAgIH0pOwogfQog
Ci12b2lkIEpTSURCQ3Vyc29yOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYg
dmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTSURCQ3Vyc29yOjp2
aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGF1dG8mIGN1
cnNvciA9IHdyYXBwZWQoKTsKICAgICBpZiAoYXV0byogcmVxdWVzdCA9IGN1cnNvci5yZXF1ZXN0
KCkpCkBAIC01OSw2ICs2MCw4IEBAIHZvaWQgSlNJREJDdXJzb3I6OnZpc2l0QWRkaXRpb25hbENo
aWxkcmUKICAgICBjdXJzb3IucHJpbWFyeUtleVdyYXBwZXIoKS52aXNpdCh2aXNpdG9yKTsKIH0K
IAorREVGSU5FX1ZJU0lUX0FERElUSU9OQUxfQ0hJTERSRU4oSlNJREJDdXJzb3IpOworCiBKU1Zh
bHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTRE9NR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIFJlZjxJREJDdXJzb3I+JiYgY3Vyc29yKQogewogICAgIGlmIChp
czxJREJDdXJzb3JXaXRoVmFsdWU+KGN1cnNvcikpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0lEQkN1cnNvcldpdGhWYWx1ZUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJDdXJzb3JXaXRoVmFsdWVDdXN0b20uY3BwCShy
ZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQkN1cnNv
cldpdGhWYWx1ZUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDMsMTIgKzQzLDE1IEBAIEpTQzo6
SlNWYWx1ZSBKU0lEQkN1cnNvcldpdGhWYWx1ZTo6dmFsdWUKICAgICB9KTsKIH0KIAotdm9pZCBK
U0lEQkN1cnNvcldpdGhWYWx1ZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3Im
IHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0lEQkN1cnNvcldp
dGhWYWx1ZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAg
ICBKU0lEQkN1cnNvcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4odmlzaXRvcik7CiAgICAgd3Jh
cHBlZCgpLnZhbHVlV3JhcHBlcigpLnZpc2l0KHZpc2l0b3IpOwogfQogCitERUZJTkVfVklTSVRf
QURESVRJT05BTF9DSElMRFJFTihKU0lEQkN1cnNvcldpdGhWYWx1ZSk7CisKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQpJbmRleDog
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJJbmRleEN1c3RvbS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJJbmRleEN1c3RvbS5jcHAJKHJl
dmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCSW5kZXhD
dXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM0LDExICszNCwxNCBAQAogbmFtZXNwYWNlIFdlYkNv
cmUgewogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAotdm9pZCBKU0lEQkluZGV4Ojp2aXNpdEFkZGl0
aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZp
c2l0b3I+Cit2b2lkIEpTSURCSW5kZXg6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3Im
IHZpc2l0b3IpCiB7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHN0YXRpY19jYXN0PElEQklu
ZGV4Jj4od3JhcHBlZCgpKS5vYmplY3RTdG9yZUFzT3BhcXVlUm9vdCgpKTsKIH0KIAorREVGSU5F
X1ZJU0lUX0FERElUSU9OQUxfQ0hJTERSRU4oSlNJREJJbmRleCk7CisKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQpJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJPYmplY3RTdG9yZUN1c3RvbS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJPYmplY3RTdG9yZUN1c3Rv
bS5jcHAJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
SURCT2JqZWN0U3RvcmVDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAog
LyoKICAqIENvcHlyaWdodCAoQykgMjAxMiBNaWNoYWVsIFBydWV0dCA8bWljaGFlbEA2OGsub3Jn
PgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKQEAgLTM2LDExICszNywxNCBAQAog
bmFtZXNwYWNlIFdlYkNvcmUgewogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAotdm9pZCBKU0lEQk9i
amVjdFN0b3JlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikK
K3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTSURCT2JqZWN0U3RvcmU6OnZpc2l0
QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgc3RhdGljX2Nhc3Q8
SURCT2JqZWN0U3RvcmUmPih3cmFwcGVkKCkpLnZpc2l0UmVmZXJlbmNlZEluZGV4ZXModmlzaXRv
cik7CiB9CiAKLX0KK0RFRklORV9WSVNJVF9BRERJVElPTkFMX0NISUxEUkVOKEpTSURCT2JqZWN0
U3RvcmUpOworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZgpJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJSZXF1ZXN0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQlJlcXVlc3RDdXN0b20uY3BwCShyZXZp
c2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQlJlcXVlc3RD
dXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTktMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTg5LDEyICs4OSwxNiBAQCBKU0M6OkpTVmFsdWUgSlNJ
REJSZXF1ZXN0OjpyZXN1bHQoSlNDOjpKCiAgICAgfSk7CiB9CiAKLXZvaWQgSlNJREJSZXF1ZXN0
Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRl
PHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTSURCUmVxdWVzdDo6dmlzaXRBZGRpdGlvbmFsQ2hp
bGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBhdXRvJiByZXF1ZXN0ID0gd3JhcHBlZCgp
OwogICAgIHJlcXVlc3QucmVzdWx0V3JhcHBlcigpLnZpc2l0KHZpc2l0b3IpOwogICAgIHJlcXVl
c3QuY3Vyc29yV3JhcHBlcigpLnZpc2l0KHZpc2l0b3IpOwogfQogCi19CitERUZJTkVfVklTSVRf
QURESVRJT05BTF9DSElMRFJFTihKU0lEQlJlcXVlc3QpOworCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCisKICNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCVHJhbnNhY3Rpb25DdXN0b20uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCVHJhbnNhY3Rpb25DdXN0b20uY3Bw
CShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQlRy
YW5zYWN0aW9uQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNCwxMSArMzQsMTQgQEAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKLXZvaWQgSlNJREJUcmFuc2Fj
dGlvbjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1w
bGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0lEQlRyYW5zYWN0aW9uOjp2aXNpdEFkZGl0
aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHN0YXRpY19jYXN0PElEQlRy
YW5zYWN0aW9uJj4od3JhcHBlZCgpKS52aXNpdFJlZmVyZW5jZWRPYmplY3RTdG9yZXModmlzaXRv
cik7CiB9CiAKLX0KK0RFRklORV9WSVNJVF9BRERJVElPTkFMX0NISUxEUkVOKEpTSURCVHJhbnNh
Y3Rpb24pOworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZgpJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNJbnRlcnNlY3Rpb25PYnNlcnZlckN1c3RvbS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJbnRlcnNlY3Rpb25PYnNl
cnZlckN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTSW50ZXJzZWN0aW9uT2JzZXJ2ZXJDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAyMCBJZ2FsaWEgUy5MLgorICog
Q29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzAsMTAgKzMxLDEzIEBACiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotdm9pZCBKU0ludGVyc2VjdGlvbk9ic2VydmVyOjp2aXNpdEFkZGl0aW9u
YWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUg
VmlzaXRvcj4KK3ZvaWQgSlNJbnRlcnNlY3Rpb25PYnNlcnZlcjo6dmlzaXRBZGRpdGlvbmFsQ2hp
bGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBpZiAoYXV0byogY2FsbGJhY2sgPSB3cmFw
cGVkKCkuY2FsbGJhY2tDb25jdXJyZW50bHkoKSkKICAgICAgICAgY2FsbGJhY2stPnZpc2l0SlNG
dW5jdGlvbih2aXNpdG9yKTsKIH0KIAotfQorREVGSU5FX1ZJU0lUX0FERElUSU9OQUxfQ0hJTERS
RU4oSlNJbnRlcnNlY3Rpb25PYnNlcnZlcik7CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW50ZXJzZWN0aW9uT2JzZXJ2ZXJFbnRy
eUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJ
bnRlcnNlY3Rpb25PYnNlcnZlckVudHJ5Q3VzdG9tLmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJbnRlcnNlY3Rpb25PYnNlcnZlckVudHJ5Q3Vz
dG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQg
KEMpIDIwMTggR29vZ2xlIExMQy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTMwLDcgKzMxLDggQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci12b2lkIEpTSW50ZXJzZWN0aW9uT2JzZXJ2ZXJFbnRyeTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRy
ZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+
Cit2b2lkIEpTSW50ZXJzZWN0aW9uT2JzZXJ2ZXJFbnRyeTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRy
ZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qocm9vdCh3
cmFwcGVkKCkudGFyZ2V0KCkpKTsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qod3JhcHBlZCgp
LmJvdW5kaW5nQ2xpZW50UmVjdCgpKTsKQEAgLTM4LDQgKzQwLDYgQEAgdm9pZCBKU0ludGVyc2Vj
dGlvbk9ic2VydmVyRW50cnk6OnZpc2l0QQogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdCh3cmFw
cGVkKCkucm9vdEJvdW5kcygpKTsKIH0KIAotfQorREVGSU5FX1ZJU0lUX0FERElUSU9OQUxfQ0hJ
TERSRU4oSlNJbnRlcnNlY3Rpb25PYnNlcnZlckVudHJ5KTsKKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNZXNzYWdlQ2hhbm5lbEN1
c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNZXNz
YWdlQ2hhbm5lbEN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTTWVzc2FnZUNoYW5uZWxDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBBcHBsZSBJbmMu
IEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAyMSBBcHBsZSBJ
bmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTMzLDcgKzMzLDggQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIEpTTWVzc2Fn
ZUNoYW5uZWw6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0
b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU01lc3NhZ2VDaGFubmVsOjp2
aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGlmIChNZXNz
YWdlUG9ydCogcG9ydCA9IHdyYXBwZWQoKS5wb3J0MSgpKQogICAgICAgICB2aXNpdG9yLmFkZE9w
YXF1ZVJvb3QocG9ydCk7CkBAIC00Miw2ICs0Myw4IEBAIHZvaWQgSlNNZXNzYWdlQ2hhbm5lbDo6
dmlzaXRBZGRpdGlvbmFsQ2gKICAgICAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHBvcnQpOwog
fQogCitERUZJTkVfVklTSVRfQURESVRJT05BTF9DSElMRFJFTihKU01lc3NhZ2VDaGFubmVsKTsK
KwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKENIQU5ORUxfTUVT
U0FHSU5HKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNZXNzYWdlRXZlbnRD
dXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWVz
c2FnZUV2ZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNNZXNzYWdlRXZlbnRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDYgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTggQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQpA
QCAtNzAsNyArNzAsOCBAQCBKU0M6OkpTVmFsdWUgSlNNZXNzYWdlRXZlbnQ6OmRhdGEoSlNDOjpK
CiAgICAgfSk7CiB9CiAKLXZvaWQgSlNNZXNzYWdlRXZlbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxk
cmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
Pgordm9pZCBKU01lc3NhZ2VFdmVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYg
dmlzaXRvcikKIHsKICAgICBXVEY6OnN3aXRjaE9uKHdyYXBwZWQoKS5kYXRhKCksIFsmdmlzaXRv
cl0gKGNvbnN0IEpTVmFsdWVJbldyYXBwZWRPYmplY3QmIGRhdGEpIHsKICAgICAgICAgZGF0YS52
aXNpdCh2aXNpdG9yKTsKQEAgLTg0LDQgKzg1LDYgQEAgdm9pZCBKU01lc3NhZ2VFdmVudDo6dmlz
aXRBZGRpdGlvbmFsQ2hpbAogICAgIHdyYXBwZWQoKS5jYWNoZWRQb3J0cygpLnZpc2l0KHZpc2l0
b3IpOwogfQogCitERUZJTkVfVklTSVRfQURESVRJT05BTF9DSElMRFJFTihKU01lc3NhZ2VFdmVu
dCk7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTTWVzc2FnZVBvcnRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTTWVzc2FnZVBvcnRDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI5MDIp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01lc3NhZ2VQb3J0Q3VzdG9tLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgt
MjAwOSwgMjAxNiBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDgtMjAyMSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKiBDb3B5cmln
aHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKQEAgLTMxLDExICszMSwxNCBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogdXNpbmcgbmFt
ZXNwYWNlIEpTQzsKIAotdm9pZCBKU01lc3NhZ2VQb3J0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJl
bihTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lk
IEpTTWVzc2FnZVBvcnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3Ip
CiB7CiAgICAgLy8gSWYgd2UgaGF2ZSBhIGxvY2FsbHkgZW50YW5nbGVkIHBvcnQsIHdlIGNhbiBk
aXJlY3RseSBtYXJrIGl0IGFzIHJlYWNoYWJsZS4gUG9ydHMgdGhhdCBhcmUgcmVtb3RlbHkgZW50
YW5nbGVkIGFyZSBtYXJrZWQgaW4tdXNlIGJ5IG1hcmtBY3RpdmVPYmplY3RzRm9yQ29udGV4dCgp
LgogICAgIGlmIChNZXNzYWdlUG9ydCogcG9ydCA9IHdyYXBwZWQoKS5sb2NhbGx5RW50YW5nbGVk
UG9ydCgpKQogICAgICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QocG9ydCk7CiB9CiAKK0RFRklO
RV9WSVNJVF9BRERJVElPTkFMX0NISUxEUkVOKEpTTWVzc2FnZVBvcnQpOworCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU011dGF0aW9u
T2JzZXJ2ZXJDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTTXV0YXRpb25PYnNlcnZlckN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjkwMikKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTXV0YXRpb25PYnNlcnZlckN1c3RvbS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDExIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zIGFyZQpAQCAtMzksMTIgKzM5LDE1IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2lu
ZyBuYW1lc3BhY2UgSlNDOwogCi12b2lkIEpTTXV0YXRpb25PYnNlcnZlcjo6dmlzaXRBZGRpdGlv
bmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1l
IFZpc2l0b3I+Cit2b2lkIEpTTXV0YXRpb25PYnNlcnZlcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRy
ZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB3cmFwcGVkKCkuY2FsbGJhY2soKS52aXNpdEpT
RnVuY3Rpb24odmlzaXRvcik7CiB9CiAKLWJvb2wgSlNNdXRhdGlvbk9ic2VydmVyT3duZXI6Omlz
UmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxl
LCB2b2lkKiwgU2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKnJlYXNvbikKK0RFRklO
RV9WSVNJVF9BRERJVElPTkFMX0NISUxEUkVOKEpTTXV0YXRpb25PYnNlcnZlcik7CisKK2Jvb2wg
SlNNdXRhdGlvbk9ic2VydmVyT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6
SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgQWJzdHJhY3RTbG90VmlzaXRvciYg
dmlzaXRvciwgY29uc3QgY2hhcioqcmVhc29uKQogewogICAgIGZvciAoYXV0byogbm9kZSA6IGpz
Q2FzdDxKU011dGF0aW9uT2JzZXJ2ZXIqPihoYW5kbGUuc2xvdCgpLT5hc0NlbGwoKSktPndyYXBw
ZWQoKS5vYnNlcnZlZE5vZGVzKCkpIHsKICAgICAgICAgaWYgKHZpc2l0b3IuY29udGFpbnNPcGFx
dWVSb290KHJvb3Qobm9kZSkpKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U011dGF0aW9uUmVjb3JkQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU011dGF0aW9uUmVjb3JkQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcyOTAyKQor
KysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNdXRhdGlvblJlY29yZEN1c3RvbS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE4
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOC0y
MDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMzAsOSArMzAsMTIgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12
b2lkIEpTTXV0YXRpb25SZWNvcmQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZp
c2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU011dGF0
aW9uUmVjb3JkOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewog
ICAgIHdyYXBwZWQoKS52aXNpdE5vZGVzQ29uY3VycmVudGx5KHZpc2l0b3IpOwogfQotICAgIAor
CitERUZJTkVfVklTSVRfQURESVRJT05BTF9DSElMRFJFTihKU011dGF0aW9uUmVjb3JkKTsKKwog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNOYXZpZ2F0b3JDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTTmF2aWdhdG9yQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNOYXZpZ2F0b3JDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTMyLDExICszMiwxNCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgSlNOYXZpZ2F0
b3I6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0
ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU05hdmlnYXRvcjo6dmlzaXRBZGRpdGlv
bmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJv
b3Qoc3RhdGljX2Nhc3Q8TmF2aWdhdG9yQmFzZSo+KCZ3cmFwcGVkKCkpKTsKIH0KIAorREVGSU5F
X1ZJU0lUX0FERElUSU9OQUxfQ0hJTERSRU4oSlNOYXZpZ2F0b3IpOworCiAjaWYgRU5BQkxFKE1F
RElBX1NUUkVBTSkKIEpTQzo6SlNWYWx1ZSBKU05hdmlnYXRvcjo6Z2V0VXNlck1lZGlhKEpTQzo6
SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6Q2FsbEZyYW1lJiBjYWxs
RnJhbWUpCiB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVDdXN0b20u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUN1c3Rv
bS5jcHAJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
Tm9kZUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDA3LCAyMDA5LTIwMTAsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03NCw3ICs3NCw3
IEBAIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAK
LXN0YXRpYyBpbmxpbmUgYm9vbCBpc1JlYWNoYWJsZUZyb21ET00oTm9kZSogbm9kZSwgU2xvdFZp
c2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCitzdGF0aWMgaW5saW5lIGJvb2wg
aXNSZWFjaGFibGVGcm9tRE9NKE5vZGUqIG5vZGUsIEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0
b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCiB7CiAgICAgaWYgKCFub2RlLT5pc0Nvbm5lY3RlZCgp
KSB7CiAgICAgICAgIGlmIChpczxFbGVtZW50Pigqbm9kZSkpIHsKQEAgLTEyMyw3ICsxMjMsNyBA
QCBzdGF0aWMgaW5saW5lIGJvb2wgaXNSZWFjaGFibGVGcm9tRE9NKE5vCiAgICAgcmV0dXJuIHZp
c2l0b3IuY29udGFpbnNPcGFxdWVSb290KHJvb3Qobm9kZSkpOwogfQogCi1ib29sIEpTTm9kZU93
bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+
IGhhbmRsZSwgdm9pZCosIFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29u
KQorYm9vbCBKU05vZGVPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5k
bGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNp
dG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQogewogICAgIEpTTm9kZSoganNOb2RlID0ganNDYXN0
PEpTTm9kZSo+KGhhbmRsZS5zbG90KCktPmFzQ2VsbCgpKTsKICAgICByZXR1cm4gaXNSZWFjaGFi
bGVGcm9tRE9NKCZqc05vZGUtPndyYXBwZWQoKSwgdmlzaXRvciwgcmVhc29uKTsKQEAgLTEzNiwx
MSArMTM2LDE0IEBAIEpTU2NvcGUqIEpTTm9kZTo6cHVzaEV2ZW50SGFuZGxlclNjb3BlKEoKICAg
ICByZXR1cm4gbm9kZTsKIH0KIAotdm9pZCBKU05vZGU6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVu
KFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQg
SlNOb2RlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAg
IHZpc2l0b3IuYWRkT3BhcXVlUm9vdChyb290KHdyYXBwZWQoKSkpOwogfQogCitERUZJTkVfVklT
SVRfQURESVRJT05BTF9DSElMRFJFTihKU05vZGUpOworCiBzdGF0aWMgQUxXQVlTX0lOTElORSBK
U1ZhbHVlIGNyZWF0ZVdyYXBwZXJJbmxpbmUoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxP
YmplY3QsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZjxOb2RlPiYmIG5vZGUp
CiB7CiAgICAgQVNTRVJUKCFnZXRDYWNoZWRXcmFwcGVyKGdsb2JhbE9iamVjdC0+d29ybGQoKSwg
bm9kZSkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlSXRlcmF0b3JD
dXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9k
ZUl0ZXJhdG9yQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNOb2RlSXRlcmF0b3JDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwOCwgMjAwOSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI1LDEw
ICsyNSwxMyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgSlNOb2RlSXRlcmF0b3I6
OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1w
bGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU05vZGVJdGVyYXRvcjo6dmlzaXRBZGRpdGlv
bmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBpZiAoTm9kZUZpbHRlciogZmls
dGVyID0gd3JhcHBlZCgpLmZpbHRlcigpKQogICAgICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qo
ZmlsdGVyKTsKIH0KIAotfQorREVGSU5FX1ZJU0lUX0FERElUSU9OQUxfQ0hJTERSRU4oSlNOb2Rl
SXRlcmF0b3IpOworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU05vZGVMaXN0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVMaXN0Q3VzdG9tLmNwcAkocmV2aXNpb24gMjcyOTAy
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlTGlzdEN1c3RvbS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA3LTIw
MTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3
LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0zNyw3ICszNyw3IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2lu
ZyBuYW1lc3BhY2UgSlNDOwogCi1ib29sIEpTTm9kZUxpc3RPd25lcjo6aXNSZWFjaGFibGVGcm9t
T3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBTbG90
VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikKK2Jvb2wgSlNOb2RlTGlzdE93
bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+
IGhhbmRsZSwgdm9pZCosIEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIq
KiByZWFzb24pCiB7CiAgICAgSlNOb2RlTGlzdCoganNOb2RlTGlzdCA9IGpzQ2FzdDxKU05vZGVM
aXN0Kj4oaGFuZGxlLnNsb3QoKS0+YXNDZWxsKCkpOwogICAgIGlmICghanNOb2RlTGlzdC0+aGFz
Q3VzdG9tUHJvcGVydGllcyhqc05vZGVMaXN0LT52bSgpKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTT2Zmc2NyZWVuQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQ3VzdG9tLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU09mZnNjcmVlbkNh
bnZhc1JlbmRlcmluZ0NvbnRleHQyREN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjkwMikKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTT2Zmc2NyZWVuQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCkBAIC0zMSw3ICszMSw3IEBAIGlubGluZSB2b2lkKiByb290KE9mZnNjcmVl
bkNhbnZhcyogY2FudmEKICAgICByZXR1cm4gY2FudmFzOwogfQogCi1ib29sIEpTT2Zmc2NyZWVu
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJET3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3Rz
KEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgU2xvdFZpc2l0b3ImIHZp
c2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCitib29sIEpTT2Zmc2NyZWVuQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJET3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxl
PEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRv
ciwgY29uc3QgY2hhcioqIHJlYXNvbikKIHsKICAgICBpZiAoVU5MSUtFTFkocmVhc29uKSkKICAg
ICAgICAgKnJlYXNvbiA9ICJDYW52YXMgaXMgb3BhcXVlIHJvb3QiOwpAQCAtNDEsMTEgKzQxLDE0
IEBAIGJvb2wgSlNPZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQKICAgICByZXR1cm4g
dmlzaXRvci5jb250YWluc09wYXF1ZVJvb3Qocm9vdCk7CiB9CiAKLXZvaWQgSlNPZmZzY3JlZW5D
YW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNp
dG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNPZmZzY3Jl
ZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0
b3ImIHZpc2l0b3IpCiB7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHJvb3QoJndyYXBwZWQo
KS5jYW52YXMoKSkpOwogfQogCitERUZJTkVfVklTSVRfQURESVRJT05BTF9DSElMRFJFTihKU09m
ZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCk7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKIAogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1BhaW50UmVu
ZGVyaW5nQ29udGV4dDJEQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU1BhaW50UmVuZGVyaW5nQ29udGV4dDJEQ3VzdG9tLmNwcAkocmV2aXNpb24g
MjcyOTAyKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNQYWludFJlbmRlcmluZ0Nv
bnRleHQyREN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxOC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzYsNyArMzYsNyBAQCBpbmxpbmUgdm9p
ZCogcm9vdChDdXN0b21QYWludENhbnZhcyogY2FuCiAgICAgcmV0dXJuIGNhbnZhczsKIH0KIAot
Ym9vbCBKU1BhaW50UmVuZGVyaW5nQ29udGV4dDJET3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1
ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgU2xvdFZpc2l0
b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCitib29sIEpTUGFpbnRSZW5kZXJpbmdD
b250ZXh0MkRPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlND
OjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBj
b25zdCBjaGFyKiogcmVhc29uKQogewogICAgIGlmIChVTkxJS0VMWShyZWFzb24pKQogICAgICAg
ICAqcmVhc29uID0gIkNhbnZhcyBpcyBvcGFxdWUgcm9vdCI7CkBAIC00NiwxMSArNDYsMTQgQEAg
Ym9vbCBKU1BhaW50UmVuZGVyaW5nQ29udGV4dDJET3duZXI6OmlzUgogICAgIHJldHVybiB2aXNp
dG9yLmNvbnRhaW5zT3BhcXVlUm9vdChyb290KTsKIH0KIAotdm9pZCBKU1BhaW50UmVuZGVyaW5n
Q29udGV4dDJEOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikK
K3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTUGFpbnRSZW5kZXJpbmdDb250ZXh0
MkQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgdmlz
aXRvci5hZGRPcGFxdWVSb290KHJvb3QoJndyYXBwZWQoKS5jYW52YXMoKSkpOwogfQogCitERUZJ
TkVfVklTSVRfQURESVRJT05BTF9DSElMRFJFTihKU1BhaW50UmVuZGVyaW5nQ29udGV4dDJEKTsK
KwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogI2VuZGlmCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTUGFpbnRXb3JrbGV0R2xvYmFsU2NvcGVDdXN0b20uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUGFpbnRXb3JrbGV0R2xvYmFsU2Nv
cGVDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU1BhaW50V29ya2xldEdsb2JhbFNjb3BlQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0z
MSw3ICszMSw4IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2UgSlNDOwog
Ci12b2lkIEpTUGFpbnRXb3JrbGV0R2xvYmFsU2NvcGU6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVu
KEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgor
dm9pZCBKU1BhaW50V29ya2xldEdsb2JhbFNjb3BlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihW
aXNpdG9yJiB2aXNpdG9yKQogewogICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sod3JhcHBlZCgp
LnBhaW50RGVmaW5pdGlvbkxvY2soKSk7CiAgICAgZm9yIChhdXRvJiByZWdpc3RlcmVkIDogd3Jh
cHBlZCgpLnBhaW50RGVmaW5pdGlvbk1hcCgpLnZhbHVlcygpKSB7CkBAIC00MCw1ICs0MSw4IEBA
IHZvaWQgSlNQYWludFdvcmtsZXRHbG9iYWxTY29wZTo6dmlzaXRBZGQKICAgICB9CiB9CiAKLX0K
K0RFRklORV9WSVNJVF9BRERJVElPTkFMX0NISUxEUkVOKEpTUGFpbnRXb3JrbGV0R2xvYmFsU2Nv
cGUpOworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKICNlbmRpZgpJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNQYXltZW50TWV0aG9kQ2hhbmdlRXZlbnRDdXN0b20uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUGF5bWVudE1ldGhvZENo
YW5nZUV2ZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNQYXltZW50TWV0aG9kQ2hhbmdlRXZlbnRDdXN0b20uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAyMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTQxLDcgKzQxLDggQEAgSlNDOjpKU1ZhbHVlIEpTUGF5bWVudE1ldGhvZENoYW5nZUV2
ZW50OgogICAgIH0pOwogfQogCi12b2lkIEpTUGF5bWVudE1ldGhvZENoYW5nZUV2ZW50Ojp2aXNp
dEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8
dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNQYXltZW50TWV0aG9kQ2hhbmdlRXZlbnQ6OnZpc2l0
QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgV1RGOjpzd2l0Y2hP
bih3cmFwcGVkKCkubWV0aG9kRGV0YWlscygpLCBbJnZpc2l0b3JdKGNvbnN0IEpTVmFsdWVJbldy
YXBwZWRPYmplY3QmIG1ldGhvZERldGFpbHMpIHsKICAgICAgICAgbWV0aG9kRGV0YWlscy52aXNp
dCh2aXNpdG9yKTsKQEAgLTUxLDYgKzUyLDggQEAgdm9pZCBKU1BheW1lbnRNZXRob2RDaGFuZ2VF
dmVudDo6dmlzaXRBZAogICAgIHdyYXBwZWQoKS5jYWNoZWRNZXRob2REZXRhaWxzKCkudmlzaXQo
dmlzaXRvcik7CiB9CiAKK0RFRklORV9WSVNJVF9BRERJVElPTkFMX0NISUxEUkVOKEpTUGF5bWVu
dE1ldGhvZENoYW5nZUV2ZW50KTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYg
Ly8gRU5BQkxFKFBBWU1FTlRfUkVRVUVTVCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTUGF5bWVudFJlc3BvbnNlQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU1BheW1lbnRSZXNwb25zZUN1c3RvbS5jcHAJKHJldmlzaW9uIDI3
MjkwMikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUGF5bWVudFJlc3BvbnNlQ3Vz
dG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE4LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0zNywxMSArMzcsMTQgQEAgSlNDOjpKU1ZhbHVlIEpTUGF5
bWVudFJlc3BvbnNlOjpkZXRhaWxzKAogICAgIH0pOwogfQogCi12b2lkIEpTUGF5bWVudFJlc3Bv
bnNlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQor
dGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNQYXltZW50UmVzcG9uc2U6OnZpc2l0
QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgd3JhcHBlZCgpLmNh
Y2hlZERldGFpbHMoKS52aXNpdCh2aXNpdG9yKTsKIH0KIAorREVGSU5FX1ZJU0lUX0FERElUSU9O
QUxfQ0hJTERSRU4oSlNQYXltZW50UmVzcG9uc2UpOworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CiAKICNlbmRpZiAvLyBFTkFCTEUoUEFZTUVOVF9SRVFVRVNUKQpJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNQZXJmb3JtYW5jZU9ic2VydmVyQ3VzdG9tLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1BlcmZvcm1hbmNlT2JzZXJ2ZXJDdXN0
b20uY3BwCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U1BlcmZvcm1hbmNlT2JzZXJ2ZXJDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMxLDEyICszMSwx
NSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgSlNQZXJmb3JtYW5jZU9ic2VydmVy
Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVt
cGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNQZXJmb3JtYW5jZU9ic2VydmVyOjp2aXNp
dEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHdyYXBwZWQoKS5j
YWxsYmFjaygpLnZpc2l0SlNGdW5jdGlvbih2aXNpdG9yKTsKIH0KIAotYm9vbCBKU1BlcmZvcm1h
bmNlT2JzZXJ2ZXJPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8
SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBKU0M6OlNsb3RWaXNpdG9yJiwgY29uc3QgY2hh
cioqIHJlYXNvbikKK0RFRklORV9WSVNJVF9BRERJVElPTkFMX0NISUxEUkVOKEpTUGVyZm9ybWFu
Y2VPYnNlcnZlcik7CisKK2Jvb2wgSlNQZXJmb3JtYW5jZU9ic2VydmVyT3duZXI6OmlzUmVhY2hh
YmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lk
KiwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiwgY29uc3QgY2hhcioqIHJlYXNvbikKIHsKICAg
ICBpZiAoVU5MSUtFTFkocmVhc29uKSkKICAgICAgICAgKnJlYXNvbiA9ICJSZWdpc3RlcmVkIFBl
cmZvcm1hbmNlT2JzZXJ2ZXIgY2FsbGJhY2siOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNQb3BTdGF0ZUV2ZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU1BvcFN0YXRlRXZlbnRDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI5
MDIpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1BvcFN0YXRlRXZlbnRDdXN0b20u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykg
MjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucyBhcmUKQEAgLTkwLDkgKzkxLDEyIEBAIEpTVmFsdWUgSlNQb3BTdGF0ZUV2ZW50
OjpzdGF0ZShKU0dsb2JhbE8KICAgICByZXR1cm4gY2FjaGVTdGF0ZShyZXN1bHQpOwogfQogCi12
b2lkIEpTUG9wU3RhdGVFdmVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90Vmlz
aXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTUG9wU3Rh
dGVFdmVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAg
ICB3cmFwcGVkKCkuc3RhdGUoKS52aXNpdCh2aXNpdG9yKTsKIH0KIAorREVGSU5FX1ZJU0lUX0FE
RElUSU9OQUxfQ0hJTERSRU4oSlNQb3BTdGF0ZUV2ZW50KTsKKwogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNQcm9taXNlUmVqZWN0aW9u
RXZlbnRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTUHJvbWlzZVJlamVjdGlvbkV2ZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNQcm9taXNlUmVqZWN0aW9uRXZlbnRDdXN0b20u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykg
MjAxOCBZdXN1a2UgU3V6dWtpIDx5dXN1a2VzdXp1a2lAc2xvd3N0YXJ0Lm9yZz4uCisgKiBDb3B5
cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMiw5ICszMywxMiBAQAogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLXZvaWQgSlNQcm9taXNlUmVqZWN0aW9uRXZlbnQ6OnZpc2l0QWRkaXRpb25hbENo
aWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNp
dG9yPgordm9pZCBKU1Byb21pc2VSZWplY3Rpb25FdmVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRy
ZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB3cmFwcGVkKCkucmVhc29uKCkudmlzaXQodmlz
aXRvcik7CiB9CiAKK0RFRklORV9WSVNJVF9BRERJVElPTkFMX0NISUxEUkVOKEpTUHJvbWlzZVJl
amVjdGlvbkV2ZW50KTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNSZXNpemVPYnNlcnZlckN1c3RvbS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNSZXNpemVPYnNlcnZlckN1c3RvbS5jcHAJ
KHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUmVzaXpl
T2JzZXJ2ZXJDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAq
IENvcHlyaWdodCAoQykgMjAyMCBJZ2FsaWEgUy5MLgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMzAsMTEgKzMxLDE0IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBK
U1Jlc2l6ZU9ic2VydmVyOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9y
JiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNSZXNpemVPYnNl
cnZlcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBS
ZXNpemVPYnNlcnZlckNhbGxiYWNrKiBjYWxsYmFjayA9IHdyYXBwZWQoKS5jYWxsYmFja0NvbmN1
cnJlbnRseSgpOwogICAgIGlmIChjYWxsYmFjaykKICAgICAgICAgY2FsbGJhY2stPnZpc2l0SlNG
dW5jdGlvbih2aXNpdG9yKTsKIH0KIAotfQorREVGSU5FX1ZJU0lUX0FERElUSU9OQUxfQ0hJTERS
RU4oSlNSZXNpemVPYnNlcnZlcik7CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUmVzaXplT2JzZXJ2ZXJFbnRyeUN1c3RvbS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNSZXNpemVPYnNlcnZl
ckVudHJ5Q3VzdG9tLmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNSZXNpemVPYnNlcnZlckVudHJ5Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTkgSWdhbGlhIFMuTC4KKyAq
IENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMwLDEwICszMSwxMyBAQAogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLXZvaWQgSlNSZXNpemVPYnNlcnZlckVudHJ5Ojp2aXNpdEFkZGl0aW9u
YWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUg
VmlzaXRvcj4KK3ZvaWQgSlNSZXNpemVPYnNlcnZlckVudHJ5Ojp2aXNpdEFkZGl0aW9uYWxDaGls
ZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChyb290
KHdyYXBwZWQoKS50YXJnZXQoKSkpOwogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdCh3cmFwcGVk
KCkuY29udGVudFJlY3QoKSk7CiB9CiAKLX0KK0RFRklORV9WSVNJVF9BRERJVElPTkFMX0NISUxE
UkVOKEpTUmVzaXplT2JzZXJ2ZXJFbnRyeSk7CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU1ZHVmlld1NwZWNDdXN0b20uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU1ZHVmlld1NwZWNDdXN0
b20uY3BwCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U1NWR1ZpZXdTcGVjQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMCwxMCArMzAsMTMgQEAKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIEpTU1ZHVmlld1NwZWM6OnZpc2l0QWRkaXRpb25h
bENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPgordm9pZCBKU1NWR1ZpZXdTcGVjOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNp
dG9yJiB2aXNpdG9yKQogewogICAgIEFTU0VSVCh3cmFwcGVkKCkuY29udGV4dEVsZW1lbnRDb25j
dXJyZW50bHkoKS5nZXQoKSk7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHJvb3Qod3JhcHBl
ZCgpLmNvbnRleHRFbGVtZW50Q29uY3VycmVudGx5KCkuZ2V0KCkpKTsKIH0KIAotfQorREVGSU5F
X1ZJU0lUX0FERElUSU9OQUxfQ0hJTERSRU4oSlNTVkdWaWV3U3BlYyk7CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU2VydmljZVdv
cmtlckdsb2JhbFNjb3BlQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU1NlcnZpY2VXb3JrZXJHbG9iYWxTY29wZUN1c3RvbS5jcHAJKHJldmlzaW9u
IDI3MjkwMikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU2VydmljZVdvcmtlckds
b2JhbFNjb3BlQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNCwxMiArMzQsMTUgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCi12b2lkIEpTU2VydmljZVdv
cmtlckdsb2JhbFNjb3BlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlz
aXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTU2VydmljZVdvcmtlckds
b2JhbFNjb3BlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewog
ICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdCgmd3JhcHBlZCgpLmNsaWVudHMoKSk7CiAgICAgdmlz
aXRvci5hZGRPcGFxdWVSb290KCZ3cmFwcGVkKCkucmVnaXN0cmF0aW9uKCkpOwogfQogCitERUZJ
TkVfVklTSVRfQURESVRJT05BTF9DSElMRFJFTihKU1NlcnZpY2VXb3JrZXJHbG9iYWxTY29wZSk7
CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU1N0YXRpY1JhbmdlQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1N0YXRpY1JhbmdlQ3VzdG9tLmNwcAkocmV2aXNpb24g
MjcyOTAyKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNTdGF0aWNSYW5nZUN1c3Rv
bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDkgKzMwLDEyIEBACiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAotdm9pZCBKU1N0YXRpY1JhbmdlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6
OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQg
SlNTdGF0aWNSYW5nZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikK
IHsKICAgICB3cmFwcGVkKCkudmlzaXROb2Rlc0NvbmN1cnJlbnRseSh2aXNpdG9yKTsKIH0KIAor
REVGSU5FX1ZJU0lUX0FERElUSU9OQUxfQ0hJTERSRU4oSlNTdGF0aWNSYW5nZSk7CisKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU3R5
bGVTaGVldEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNTdHlsZVNoZWV0Q3VzdG9tLmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNTdHlsZVNoZWV0Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIwMDkgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0zMCwxMSArMzAsMTQgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lk
IEpTU3R5bGVTaGVldDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYg
dmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTU3R5bGVTaGVldDo6
dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB2aXNpdG9y
LmFkZE9wYXF1ZVJvb3Qocm9vdCgmd3JhcHBlZCgpKSk7CiB9CiAKK0RFRklORV9WSVNJVF9BRERJ
VElPTkFMX0NISUxEUkVOKEpTU3R5bGVTaGVldCk7CisKIEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlD
cmVhdGVkKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBSZWY8U3R5bGVTaGVldD4mJiBzdHlsZVNoZWV0KQogewogICAgIGlmIChzdHlsZVNoZWV0
LT5pc0NTU1N0eWxlU2hlZXQoKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
VGV4dFRyYWNrQ3VlQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU1RleHRUcmFja0N1ZUN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjkwMikKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVGV4dFRyYWNrQ3VlQ3VzdG9tLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0zOCw3ICszOCw3IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3Bh
Y2UgSlNDOwogCi1ib29sIEpTVGV4dFRyYWNrQ3VlT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1
ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgU2xvdFZpc2l0
b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCitib29sIEpTVGV4dFRyYWNrQ3VlT3du
ZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4g
aGFuZGxlLCB2b2lkKiwgQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioq
IHJlYXNvbikKIHsKICAgICBKU1RleHRUcmFja0N1ZSoganNUZXh0VHJhY2tDdWUgPSBqc0Nhc3Q8
SlNUZXh0VHJhY2tDdWUqPihoYW5kbGUuc2xvdCgpLT5hc0NlbGwoKSk7CiAgICAgVGV4dFRyYWNr
Q3VlJiB0ZXh0VHJhY2tDdWUgPSBqc1RleHRUcmFja0N1ZS0+d3JhcHBlZCgpOwpAQCAtODIsMTIg
KzgyLDE1IEBAIEpTVmFsdWUgdG9KUyhKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2IKICAgICBy
ZXR1cm4gd3JhcChsZXhpY2FsR2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QsIGN1ZSk7CiB9CiAK
LXZvaWQgSlNUZXh0VHJhY2tDdWU6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9y
JiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNUZXh0VHJhY2tD
dWU6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgaWYg
KFRleHRUcmFjayogdGV4dFRyYWNrID0gd3JhcHBlZCgpLnRyYWNrKCkpCiAgICAgICAgIHZpc2l0
b3IuYWRkT3BhcXVlUm9vdChyb290KHRleHRUcmFjaykpOwogfQogCitERUZJTkVfVklTSVRfQURE
SVRJT05BTF9DSElMRFJFTihKU1RleHRUcmFja0N1ZSk7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKIAogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1RleHRUcmFj
a0N1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNU
ZXh0VHJhY2tDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU1RleHRUcmFja0N1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzYsMTEgKzM2
LDE0IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCi12b2lk
IEpTVGV4dFRyYWNrOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRv
cikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTVGV4dFRyYWNrOjp2aXNpdEFk
ZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHZpc2l0b3IuYWRkT3Bh
cXVlUm9vdChyb290KCZ3cmFwcGVkKCkpKTsKIH0KIAorREVGSU5FX1ZJU0lUX0FERElUSU9OQUxf
Q0hJTERSRU4oSlNUZXh0VHJhY2spOworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRp
ZgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNUZXh0VHJhY2tMaXN0Q3VzdG9t
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1RleHRUcmFj
a0xpc3RDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU1RleHRUcmFja0xpc3RDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM2LDExICsz
NiwxNCBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAotdm9p
ZCBKU1RleHRUcmFja0xpc3Q6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0
b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1RleHRUcmFj
a0xpc3Q6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAg
dmlzaXRvci5hZGRPcGFxdWVSb290KHJvb3Qod3JhcHBlZCgpLmVsZW1lbnQoKSkpOwogfQogICAg
IAorREVGSU5FX1ZJU0lUX0FERElUSU9OQUxfQ0hJTERSRU4oSlNUZXh0VHJhY2tMaXN0KTsKKwog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTVHJlZVdhbGtlckN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNUcmVlV2Fsa2VyQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcyOTAy
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNUcmVlV2Fsa2VyQ3VzdG9tLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYs
IDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDA2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCkBAIC0yNSwxMCArMjUsMTMgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12
b2lkIEpTVHJlZVdhbGtlcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRv
ciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTVHJlZVdhbGtl
cjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBpZiAo
Tm9kZUZpbHRlciogZmlsdGVyID0gd3JhcHBlZCgpLmZpbHRlcigpKQogICAgICAgICB2aXNpdG9y
LmFkZE9wYXF1ZVJvb3QoZmlsdGVyKTsKIH0KIAotfQorREVGSU5FX1ZJU0lUX0FERElUSU9OQUxf
Q0hJTERSRU4oSlNUcmVlV2Fsa2VyKTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDog
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNVbmRvSXRlbUN1c3RvbS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNVbmRvSXRlbUN1c3RvbS5jcHAJKHJl
dmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVW5kb0l0ZW1D
dXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTktMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI5LDEzICsyOSwxNiBAQAogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLXZvaWQgSlNVbmRvSXRlbTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpT
bG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpT
VW5kb0l0ZW06OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAg
ICAgd3JhcHBlZCgpLnVuZG9IYW5kbGVyKCkudmlzaXRKU0Z1bmN0aW9uKHZpc2l0b3IpOwogICAg
IHdyYXBwZWQoKS5yZWRvSGFuZGxlcigpLnZpc2l0SlNGdW5jdGlvbih2aXNpdG9yKTsKIH0KIAot
Ym9vbCBKU1VuZG9JdGVtT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFu
ZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgSlNDOjpTbG90VmlzaXRvciYgdmlzaXRv
ciwgY29uc3QgY2hhcioqIHJlYXNvbikKK0RFRklORV9WSVNJVF9BRERJVElPTkFMX0NISUxEUkVO
KEpTVW5kb0l0ZW0pOworCitib29sIEpTVW5kb0l0ZW1Pd25lcjo6aXNSZWFjaGFibGVGcm9tT3Bh
cXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBKU0M6OkFi
c3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCiB7CiAgICAg
aWYgKFVOTElLRUxZKHJlYXNvbikpCiAgICAgICAgICpyZWFzb24gPSAiRG9jdW1lbnQgaXMgYW4g
b3BhcXVlIHJvb3QuIjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVmFsdWVJ
bldyYXBwZWRPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU1ZhbHVlSW5XcmFwcGVkT2JqZWN0LmgJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTVmFsdWVJbldyYXBwZWRPYmplY3QuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
NDAsNyArNDAsNyBAQCBwdWJsaWM6CiAgICAgb3BlcmF0b3IgSlNDOjpKU1ZhbHVlKCkgY29uc3Q7
CiAgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0OwogICAgIEpTVmFsdWVJbldyYXBw
ZWRPYmplY3QmIG9wZXJhdG9yPShjb25zdCBKU1ZhbHVlSW5XcmFwcGVkT2JqZWN0JiBvdGhlcik7
Ci0gICAgdm9pZCB2aXNpdChKU0M6OlNsb3RWaXNpdG9yJikgY29uc3Q7CisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCB2aXNpdChWaXNpdG9yJikgY29uc3Q7CiAgICAgdm9pZCBj
bGVhcigpOwogCiBwcml2YXRlOgpAQCAtOTgsNyArOTgsOCBAQCBpbmxpbmUgSlNWYWx1ZUluV3Jh
cHBlZE9iamVjdCYgSlNWYWx1ZUluCiAgICAgcmV0dXJuICp0aGlzOwogfQogCi1pbmxpbmUgdm9p
ZCBKU1ZhbHVlSW5XcmFwcGVkT2JqZWN0Ojp2aXNpdChKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9y
KSBjb25zdAordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK2lubGluZSB2b2lkIEpTVmFsdWVJ
bldyYXBwZWRPYmplY3Q6OnZpc2l0KFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0CiB7CiAgICAgcmV0
dXJuIFdURjo6c3dpdGNoT24obV92YWx1ZSwgW10gKEpTQzo6SlNWYWx1ZSkgewogICAgICAgICAv
LyBOb3RoaW5nIHRvIHZpc2l0LgpAQCAtMTA3LDYgKzEwOCw5IEBAIGlubGluZSB2b2lkIEpTVmFs
dWVJbldyYXBwZWRPYmplY3Q6OnZpc2kKICAgICB9KTsKIH0KIAordGVtcGxhdGUgdm9pZCBKU1Zh
bHVlSW5XcmFwcGVkT2JqZWN0Ojp2aXNpdChKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKSBjb25z
dDsKK3RlbXBsYXRlIHZvaWQgSlNWYWx1ZUluV3JhcHBlZE9iamVjdDo6dmlzaXQoSlNDOjpTbG90
VmlzaXRvciYpIGNvbnN0OworCiBpbmxpbmUgdm9pZCBKU1ZhbHVlSW5XcmFwcGVkT2JqZWN0Ojpj
bGVhcigpCiB7CiAgICAgV1RGOjpzd2l0Y2hPbihtX3ZhbHVlLCBbXSAoV2VhayYgdmFsdWUpIHsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVmlkZW9UcmFja0N1c3RvbS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNWaWRlb1RyYWNrQ3Vz
dG9tLmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNWaWRlb1RyYWNrQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDExLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNSwxMSArMzUsMTQgQEAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKLXZvaWQgSlNWaWRlb1Ry
YWNrOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBs
YXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTVmlkZW9UcmFjazo6dmlzaXRBZGRpdGlvbmFs
Q2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qo
cm9vdCgmd3JhcHBlZCgpKSk7CiB9CiAKK0RFRklORV9WSVNJVF9BRERJVElPTkFMX0NISUxEUkVO
KEpTVmlkZW9UcmFjayk7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1ZpZGVvVHJhY2tMaXN0Q3VzdG9tLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1ZpZGVvVHJhY2tMaXN0
Q3VzdG9tLmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNWaWRlb1RyYWNrTGlzdEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzUsMTEgKzM1LDE0
IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCi12b2lkIEpT
VmlkZW9UcmFja0xpc3Q6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNp
dG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNWaWRlb1RyYWNrTGlzdDo6
dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB2aXNpdG9y
LmFkZE9wYXF1ZVJvb3Qocm9vdCh3cmFwcGVkKCkuZWxlbWVudCgpKSk7CiB9CiAKK0RFRklORV9W
SVNJVF9BRERJVElPTkFMX0NISUxEUkVOKEpTVmlkZW9UcmFja0xpc3QpOworCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCiAKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNXZWJHTDJSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYkdMMlJlbmRlcmluZ0NvbnRleHRDdXN0b20uY3BwCShy
ZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYkdMMlJl
bmRlcmluZ0NvbnRleHRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzMsMTIgKzMzLDE1
IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCi12b2lkIEpT
V2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0
b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1dlYkdMMlJl
bmRlcmluZ0NvbnRleHQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3Ip
CiB7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KCZ3cmFwcGVkKCkpOwogICAgIHdyYXBwZWQo
KS5hZGRNZW1iZXJzVG9PcGFxdWVSb290cyh2aXNpdG9yKTsKIH0KIAorREVGSU5FX1ZJU0lUX0FE
RElUSU9OQUxfQ0hJTERSRU4oSlNXZWJHTDJSZW5kZXJpbmdDb250ZXh0KTsKKwogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQkdMKQpJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRDdXN0b20uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViR0xSZW5kZXJpbmdDb250
ZXh0Q3VzdG9tLmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMz
LDEyICszMywxNSBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogdXNpbmcgbmFtZXNwYWNlIEpTQzsK
IAotdm9pZCBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4o
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBK
U1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYg
dmlzaXRvcikKIHsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QoJndyYXBwZWQoKSk7CiAgICAg
d3JhcHBlZCgpLmFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKHZpc2l0b3IpOwogfQogCitERUZJTkVf
VklTSVRfQURESVRJT05BTF9DSElMRFJFTihKU1dlYkdMUmVuZGVyaW5nQ29udGV4dCk7CisKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShXRUJHTCkKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyR2xvYmFsU2NvcGVCYXNlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckdsb2JhbFNjb3Bl
QmFzZS5jcHAJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTV29ya2VyR2xvYmFsU2NvcGVCYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDksIDIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFs
bCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC05Miw3ICs5Miw4IEBAIHZv
aWQgSlNXb3JrZXJHbG9iYWxTY29wZUJhc2U6OmZpbmlzaENyZWEKICAgICBBU1NFUlQoaW5oZXJp
dHModm0sIGluZm8oKSkpOwogfQogCi12b2lkIEpTV29ya2VyR2xvYmFsU2NvcGVCYXNlOjp2aXNp
dENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0
eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1dvcmtlckdsb2JhbFNjb3BlQmFzZTo6dmlzaXRDaGls
ZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTV29ya2Vy
R2xvYmFsU2NvcGVCYXNlKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTV29ya2VyR2xvYmFsU2NvcGVC
YXNlKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBp
bmZvKCkpOwpAQCAtMTAwLDYgKzEwMSw4IEBAIHZvaWQgSlNXb3JrZXJHbG9iYWxTY29wZUJhc2U6
OnZpc2l0Q2hpbGQKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX3Byb3h5KTsKIH0K
IAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTV29ya2VyR2xvYmFsU2NvcGVCYXNlKTsKKwogdm9p
ZCBKU1dvcmtlckdsb2JhbFNjb3BlQmFzZTo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCiB7CiAgICAg
c3RhdGljX2Nhc3Q8SlNXb3JrZXJHbG9iYWxTY29wZUJhc2UqPihjZWxsKS0+SlNXb3JrZXJHbG9i
YWxTY29wZUJhc2U6On5KU1dvcmtlckdsb2JhbFNjb3BlQmFzZSgpOwpJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNXb3JrZXJHbG9iYWxTY29wZUJhc2UuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckdsb2JhbFNjb3BlQmFzZS5oCShy
ZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckds
b2JhbFNjb3BlQmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTc5LDcgKzc5LDcgQEAgcHJvdGVj
dGVkOgogICAgIEpTV29ya2VyR2xvYmFsU2NvcGVCYXNlKEpTQzo6Vk0mLCBKU0M6OlN0cnVjdHVy
ZSosIFJlZlB0cjxXb3JrZXJHbG9iYWxTY29wZT4mJik7CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlv
bihKU0M6OlZNJiwgSlNDOjpKU1Byb3h5Kik7CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxk
cmVuKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRf
Q0hJTERSRU47CiAKIHByaXZhdGU6CiAgICAgUmVmUHRyPFdvcmtlckdsb2JhbFNjb3BlPiBtX3dy
YXBwZWQ7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckdsb2JhbFNj
b3BlQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U1dvcmtlckdsb2JhbFNjb3BlQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrZXJHbG9iYWxTY29wZUN1c3RvbS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMDks
IDIwMTEsIDIwMTYgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDA4LTIwMjEgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMyw3ICszMyw4IEBACiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCi12b2lkIEpTV29ya2VyR2xvYmFsU2NvcGU6OnZp
c2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlw
ZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNXb3JrZXJHbG9iYWxTY29wZTo6dmlzaXRBZGRpdGlvbmFs
Q2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBpZiAoYXV0byogbG9jYXRpb24gPSB3
cmFwcGVkKCkub3B0aW9uYWxMb2NhdGlvbigpKQogICAgICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJv
b3QobG9jYXRpb24pOwpAQCAtNDgsNiArNDksOCBAQCB2b2lkIEpTV29ya2VyR2xvYmFsU2NvcGU6
OnZpc2l0QWRkaXRpb25hCiAgICAgd3JhcHBlZCgpLnZpc2l0SlNFdmVudExpc3RlbmVycyh2aXNp
dG9yKTsKIH0KIAorREVGSU5FX1ZJU0lUX0FERElUSU9OQUxfQ0hJTERSRU4oSlNXb3JrZXJHbG9i
YWxTY29wZSk7CisKIEpTVmFsdWUgSlNXb3JrZXJHbG9iYWxTY29wZTo6cXVldWVNaWNyb3Rhc2so
SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFtZSYgY2FsbEZyYW1l
KQogewogICAgIFZNJiB2bSA9IGxleGljYWxHbG9iYWxPYmplY3Qudm0oKTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyTmF2aWdhdG9yQ3VzdG9tLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlck5hdmlnYXRvckN1c3Rv
bS5jcHAJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
V29ya2VyTmF2aWdhdG9yQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOCw5ICsyOCwxMiBAQAog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgSlNXb3JrZXJOYXZpZ2F0b3I6OnZpc2l0QWRk
aXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBl
bmFtZSBWaXNpdG9yPgordm9pZCBKU1dvcmtlck5hdmlnYXRvcjo6dmlzaXRBZGRpdGlvbmFsQ2hp
bGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qoc3Rh
dGljX2Nhc3Q8TmF2aWdhdG9yQmFzZSo+KCZ3cmFwcGVkKCkpKTsKIH0KIAotfQorREVGSU5FX1ZJ
U0lUX0FERElUSU9OQUxfQ0hJTERSRU4oSlNXb3JrZXJOYXZpZ2F0b3IpOworCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtsZXRH
bG9iYWxTY29wZUJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTV29ya2xldEdsb2JhbFNjb3BlQmFzZS5jcHAJKHJldmlzaW9uIDI3MjkwMikKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2xldEdsb2JhbFNjb3BlQmFzZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE4IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOC0yMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtODIsNyArODIsOCBAQCB2b2lkIEpTV29ya2xldEdsb2JhbFNjb3BlQmFzZTo6
ZmluaXNoQ3JlCiAgICAgQVNTRVJUKGluaGVyaXRzKHZtLCBpbmZvKCkpKTsKIH0KIAotdm9pZCBK
U1dvcmtsZXRHbG9iYWxTY29wZUJhc2U6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90
VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTV29y
a2xldEdsb2JhbFNjb3BlQmFzZTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNp
dG9yJiB2aXNpdG9yKQogewogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNXb3JrbGV0
R2xvYmFsU2NvcGVCYXNlKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0
aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtOTAsNiArOTEsOCBAQCB2b2lkIEpTV29ya2xldEdsb2Jh
bFNjb3BlQmFzZTo6dmlzaXRDaGlsCiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9w
cm94eSk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU1dvcmtsZXRHbG9iYWxTY29wZUJh
c2UpOworCiB2b2lkIEpTV29ya2xldEdsb2JhbFNjb3BlQmFzZTo6ZGVzdHJveShKU0NlbGwqIGNl
bGwpCiB7CiAgICAgc3RhdGljX2Nhc3Q8SlNXb3JrbGV0R2xvYmFsU2NvcGVCYXNlKj4oY2VsbCkt
PkpTV29ya2xldEdsb2JhbFNjb3BlQmFzZTo6fkpTV29ya2xldEdsb2JhbFNjb3BlQmFzZSgpOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrbGV0R2xvYmFsU2NvcGVCYXNl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrbGV0R2xv
YmFsU2NvcGVCYXNlLmgJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTV29ya2xldEdsb2JhbFNjb3BlQmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY3LDcgKzY3
LDcgQEAgcHJvdGVjdGVkOgogICAgIEpTV29ya2xldEdsb2JhbFNjb3BlQmFzZShKU0M6OlZNJiwg
SlNDOjpTdHJ1Y3R1cmUqLCBSZWZQdHI8V29ya2xldEdsb2JhbFNjb3BlPiYmKTsKICAgICB2b2lk
IGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mLCBKU0M6OkpTUHJveHkqKTsKIAotICAgIHN0YXRpYyB2
b2lkIHZpc2l0Q2hpbGRyZW4oSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJik7CisgICAg
REVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogcHJpdmF0ZToKICAgICBSZWZQdHI8V29ya2xldEds
b2JhbFNjb3BlPiBtX3dyYXBwZWQ7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U1hNTEh0dHBSZXF1ZXN0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU1hNTEh0dHBSZXF1ZXN0Q3VzdG9tLmNwcAkocmV2aXNpb24gMjcyOTAyKQor
KysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNYTUxIdHRwUmVxdWVzdEN1c3RvbS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4
LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAwOC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtNDEsNyArNDEsOCBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewog
dXNpbmcgbmFtZXNwYWNlIEpTQzsKIAotdm9pZCBKU1hNTEh0dHBSZXF1ZXN0Ojp2aXNpdEFkZGl0
aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZp
c2l0b3I+Cit2b2lkIEpTWE1MSHR0cFJlcXVlc3Q6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZp
c2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgaWYgKGF1dG8qIHVwbG9hZCA9IHdyYXBwZWQoKS5vcHRp
b25hbFVwbG9hZCgpKQogICAgICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QodXBsb2FkKTsKQEAg
LTUwLDYgKzUxLDggQEAgdm9pZCBKU1hNTEh0dHBSZXF1ZXN0Ojp2aXNpdEFkZGl0aW9uYWxDaAog
ICAgICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QocmVzcG9uc2VEb2N1bWVudCk7CiB9CiAKK0RF
RklORV9WSVNJVF9BRERJVElPTkFMX0NISUxEUkVOKEpTWE1MSHR0cFJlcXVlc3QpOworCiBKU1Zh
bHVlIEpTWE1MSHR0cFJlcXVlc3Q6OnJlc3BvbnNlKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xv
YmFsT2JqZWN0KSBjb25zdAogewogICAgIGF1dG8gY2FjaGVSZXN1bHQgPSBbJl0gKEpTVmFsdWUg
dmFsdWUpIC0+IEpTVmFsdWUgewpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNY
UGF0aFJlc3VsdEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNYUGF0aFJlc3VsdEN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTWFBhdGhSZXN1bHRDdXN0b20uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxMSBKdWxpZW4gQ2hh
ZmZyYWl4IDxqY2hhZmZyYWl4QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0zMSw3ICszMiw4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBKU1hQ
YXRoUmVzdWx0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNp
dG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNYUGF0aFJlc3VsdDo6dmlz
aXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBhdXRvJiB2YWx1
ZSA9IHdyYXBwZWQoKS52YWx1ZSgpOwogICAgIGlmICh2YWx1ZS5pc05vZGVTZXQoKSkgewpAQCAt
NDEsNCArNDMsNiBAQCB2b2lkIEpTWFBhdGhSZXN1bHQ6OnZpc2l0QWRkaXRpb25hbENoaWxkCiAg
ICAgfQogfQogCitERUZJTkVfVklTSVRfQURESVRJT05BTF9DSElMRFJFTihKU1hQYXRoUmVzdWx0
KTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvV2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwCShy
ZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlVHlw
ZWRBcnJheUNvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU2LDcgKzU2LDcgQEAgYm9vbCBX
ZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXI6OmlzQXRvbQogICAgIHJldHVybiBtX2FsbG93QXRv
bWljc1dhaXQ7CiB9CiAKLWJvb2wgV2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyOjpKU0FycmF5
QnVmZmVyT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6
VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3Qg
Y2hhcioqIHJlYXNvbikKK2Jvb2wgV2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyOjpKU0FycmF5
QnVmZmVyT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6
VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9y
LCBjb25zdCBjaGFyKiogcmVhc29uKQogewogICAgIGlmIChVTkxJS0VMWShyZWFzb24pKQogICAg
ICAgICAqcmVhc29uID0gIkFycmF5QnVmZmVyIGlzIG9wYXF1ZSByb290IjsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dlYkNvcmVUeXBlZEFycmF5Q29u
dHJvbGxlci5oCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9XZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00OCw3ICs0OCw3
IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgY2xhc3MgSlNBcnJheUJ1ZmZlck93bmVyIDogcHVi
bGljIEpTQzo6V2Vha0hhbmRsZU93bmVyIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIGJvb2wgaXNS
ZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCog
Y29udGV4dCwgSlNDOjpTbG90VmlzaXRvciYsIGNvbnN0IGNoYXIqKikgb3ZlcnJpZGU7CisgICAg
ICAgIGJvb2wgaXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtu
b3duPiwgdm9pZCogY29udGV4dCwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiwgY29uc3QgY2hh
cioqKSBvdmVycmlkZTsKICAgICAgICAgdm9pZCBmaW5hbGl6ZShKU0M6OkhhbmRsZTxKU0M6OlVu
a25vd24+LCB2b2lkKiBjb250ZXh0KSBvdmVycmlkZTsKICAgICB9OwogCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQkocmV2
aXNpb24gMjcyOTAyKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2Vu
ZXJhdG9ySlMucG0JKHdvcmtpbmcgY29weSkKQEAgLTMsNyArMyw3IEBACiAjIENvcHlyaWdodCAo
QykgMjAwNiBBbmRlcnMgQ2FybHNzb24gPGFuZGVyc2NhQG1hYy5jb20+CiAjIENvcHlyaWdodCAo
QykgMjAwNiwgMjAwNyBTYW11ZWwgV2VpbmlnIDxzYW1Ad2Via2l0Lm9yZz4KICMgQ29weXJpZ2h0
IChDKSAyMDA2IEFsZXhleSBQcm9za3VyeWFrb3YgPGFwQHdlYmtpdC5vcmc+Ci0jIENvcHlyaWdo
dCAoQykgMjAwNi0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgQ29weXJp
Z2h0IChDKSAyMDA2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogIyBDb3B5
cmlnaHQgKEMpIDIwMDkgQ2FtZXJvbiBNY0Nvcm1hY2sgPGNhbUBtY2MuaWQuYXU+CiAjIENvcHly
aWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICMgQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMg
c3Vic2lkaWFyeSgtaWVzKQpAQCAtMzA3OCw4ICszMDc4LDggQEAgc3ViIEdlbmVyYXRlSGVhZGVy
CiAKICAgICAjIHZpc2l0IGZ1bmN0aW9uCiAgICAgaWYgKCRuZWVkc1Zpc2l0Q2hpbGRyZW4pIHsK
LSAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxk
cmVuKEpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKTtcbiIpOwotICAgICAgICBwdXNoKEBoZWFk
ZXJDb250ZW50LCAiICAgIHZvaWQgdmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90Vmlz
aXRvciYpO1xuIikgaWYgJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57SlNDdXN0b21N
YXJrRnVuY3Rpb259OworICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIERFQ0xBUkVf
VklTSVRfQ0hJTERSRU47XG4iKTsKKyAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIHZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZp
c2l0b3ImKTtcbiIpIGlmICRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+e0pTQ3VzdG9t
TWFya0Z1bmN0aW9ufTsKICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIlxuIik7CiAKICAg
ICAgICAgaWYgKCRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+e0pTQ3VzdG9tTWFya0Z1
bmN0aW9ufSkgewpAQCAtMzA5NCw3ICszMDk0LDcgQEAgc3ViIEdlbmVyYXRlSGVhZGVyCiAgICAg
ICAgICAgICAjIHRoYXQgdGhlIEdDIGNhbGxzIHRvIGFzayBhbiBvYmplY3QgaXMgaXQgd291bGQg
bGlrZSB0byBtYXJrIGFueXRoaW5nIGVsc2UgYWZ0ZXIgdGhlCiAgICAgICAgICAgICAjIHByb2dy
YW0gcmVzdW1lZCBzaW5jZSB0aGUgbGFzdCBjYWxsIHRvIHZpc2l0Q2hpbGRyZW4gb3IgdmlzaXRP
dXRwdXRDb25zdHJhaW50cy4gU2luY2UKICAgICAgICAgICAgICMgdGhpcyBqdXN0IGNhbGxzIHZp
c2l0QWRkaXRpb25hbENoaWxkcmVuLCB5b3UgdXN1YWxseSBkb24ndCBoYXZlIHRvIHdvcnJ5IGFi
b3V0IHRoaXMuCi0gICAgICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHN0YXRpYyB2
b2lkIHZpc2l0T3V0cHV0Q29uc3RyYWludHMoSlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpO1xu
Iik7CisgICAgICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFZpc2l0b3I+IHN0YXRpYyB2b2lkIHZpc2l0T3V0cHV0Q29uc3RyYWludHMoSlNDZWxsKiwg
VmlzaXRvciYpO1xuIik7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTMyMTUsNyArMzIxNSw3IEBA
IHN1YiBHZW5lcmF0ZUhlYWRlcgogICAgICAgICB9CiAgICAgICAgICRoZWFkZXJJbmNsdWRlc3si
PHd0Zi9OZXZlckRlc3Ryb3llZC5oPiJ9ID0gMTsKICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVu
dCwgInB1YmxpYzpcbiIpOwotICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIGJvb2wg
aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9p
ZCogY29udGV4dCwgSlNDOjpTbG90VmlzaXRvciYsIGNvbnN0IGNoYXIqKikgJHtvdmVycmlkZURl
Y2x9O1xuIik7CisgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgYm9vbCBpc1JlYWNo
YWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250
ZXh0LCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImLCBjb25zdCBjaGFyKiopICR7b3ZlcnJpZGVE
ZWNsfTtcbiIpOwogICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHZvaWQgZmluYWxp
emUoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCkgJHtvdmVycmlkZURl
Y2x9O1xuIik7CiAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJ9O1xuIik7CiAgICAgICAg
IHB1c2goQGhlYWRlckNvbnRlbnQsICJcbiIpOwpAQCAtNDkzOSw2ICs0OTM5LDcgQEAgc3ViIEdl
bmVyYXRlSW1wbGVtZW50YXRpb24KICAgICBBZGRUb0ltcGxJbmNsdWRlcygiRE9NSXNvU3Vic3Bh
Y2VzLmgiKTsKICAgICBBZGRUb0ltcGxJbmNsdWRlcygiV2ViQ29yZUpTQ2xpZW50RGF0YS5oIik7
CiAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIjxKYXZhU2NyaXB0Q29yZS9KU0Rlc3RydWN0aWJsZU9i
amVjdEhlYXBDZWxsVHlwZS5oPiIpOworICAgIEFkZFRvSW1wbEluY2x1ZGVzKCI8SmF2YVNjcmlw
dENvcmUvU2xvdFZpc2l0b3JNYWNyb3MuaD4iKTsKICAgICBBZGRUb0ltcGxJbmNsdWRlcygiPEph
dmFTY3JpcHRDb3JlL1N1YnNwYWNlSW5saW5lcy5oPiIpOwogICAgIHB1c2goQGltcGxDb250ZW50
LCAiSlNDOjpJc29TdWJzcGFjZSogJHtjbGFzc05hbWV9OjpzdWJzcGFjZUZvckltcGwoSlNDOjpW
TSYgdm0pXG4iKTsKICAgICBwdXNoKEBpbXBsQ29udGVudCwgIntcbiIpOwpAQCAtNDk1OCw3ICs0
OTU5LDEwIEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgcHVzaChAaW1wbENvbnRl
bnQsICIgICAgYXV0byogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvciR7aW50ZXJmYWNlTmFt
ZX0uZ2V0KCk7XG4iKTsKICAgICBwdXNoKEBpbXBsQ29udGVudCwgIklHTk9SRV9XQVJOSU5HU19C
RUdJTihcInVucmVhY2hhYmxlLWNvZGVcIilcbiIpOwogICAgIHB1c2goQGltcGxDb250ZW50LCAi
SUdOT1JFX1dBUk5JTkdTX0JFR0lOKFwidGF1dG9sb2dpY2FsLWNvbXBhcmVcIilcbiIpOwotICAg
IHB1c2goQGltcGxDb250ZW50LCAiICAgIGlmICgmJHtjbGFzc05hbWV9Ojp2aXNpdE91dHB1dENv
bnN0cmFpbnRzICE9ICZKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50cylcbiIpOwor
ICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWlu
dCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSAke2NsYXNzTmFtZX06OnZpc2l0
T3V0cHV0Q29uc3RyYWludHM7XG4iKTsKKyAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICB2b2lk
ICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZp
c2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzO1xuIik7CisgICAg
cHVzaChAaW1wbENvbnRlbnQsICIgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpz
Q2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludClcbiIpOworIyAgICBwdXNoKEBpbXBsQ29udGVudCwg
IiAgICBpZiAoJiR7Y2xhc3NOYW1lfTo6dmlzaXRPdXRwdXRDb25zdHJhaW50cyAhPSAmSlNDOjpK
U0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHMpXG4iKTsKICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIiAgICAgICAgY2xpZW50RGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNw
YWNlKTtcbiIpOwogICAgIHB1c2goQGltcGxDb250ZW50LCAiSUdOT1JFX1dBUk5JTkdTX0VORFxu
Iik7CiAgICAgcHVzaChAaW1wbENvbnRlbnQsICJJR05PUkVfV0FSTklOR1NfRU5EXG4iKTsKQEAg
LTQ5NjYsNyArNDk3MCw4IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgcHVzaChA
aW1wbENvbnRlbnQsICJ9XG5cbiIpOwogCiAgICAgaWYgKCRuZWVkc1Zpc2l0Q2hpbGRyZW4pIHsK
LSAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ2b2lkICR7Y2xhc3NOYW1lfTo6dmlzaXRDaGls
ZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKVxuIik7CisgICAgICAgIHB1
c2goQGltcGxDb250ZW50LCAidGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj5cbiIpOworICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgInZvaWQgJHtjbGFzc05hbWV9Ojp2aXNpdENoaWxkcmVuSW1w
bChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpXG4iKTsKICAgICAgICAgcHVzaChAaW1w
bENvbnRlbnQsICJ7XG4iKTsKICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgYXV0byog
dGhpc09iamVjdCA9IGpzQ2FzdDwke2NsYXNzTmFtZX0qPihjZWxsKTtcbiIpOwogICAgICAgICBw
dXNoKEBpbXBsQ29udGVudCwgIiAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmpl
Y3QsIGluZm8oKSk7XG4iKTsKQEAgLTQ5OTEsMTQgKzQ5OTYsMTkgQEAgc3ViIEdlbmVyYXRlSW1w
bGVtZW50YXRpb24KICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBwdXNoKEBpbXBs
Q29udGVudCwgIn1cblxuIik7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiREVGSU5FX1ZJ
U0lUX0NISUxEUkVOKCR7Y2xhc3NOYW1lfSk7XG5cbiIpOworCiAgICAgICAgIGlmICgkaW50ZXJm
YWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntKU0N1c3RvbU1hcmtGdW5jdGlvbn0pIHsKLSAgICAg
ICAgICAgIHB1c2goQGltcGxDb250ZW50LCAidm9pZCAke2NsYXNzTmFtZX06OnZpc2l0T3V0cHV0
Q29uc3RyYWludHMoSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcilcbiIpOworICAg
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPlxu
Iik7CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgInZvaWQgJHtjbGFzc05hbWV9Ojp2
aXNpdE91dHB1dENvbnN0cmFpbnRzKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcilcbiIp
OwogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ7XG4iKTsKICAgICAgICAgICAgIHB1
c2goQGltcGxDb250ZW50LCAiICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8JHtjbGFzc05h
bWV9Kj4oY2VsbCk7XG4iKTsKICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIEFT
U0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTtcbiIpOwogICAgICAg
ICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgQmFzZTo6dmlzaXRPdXRwdXRDb25zdHJhaW50
cyh0aGlzT2JqZWN0LCB2aXNpdG9yKTtcbiIpOwogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRl
bnQsICIgICAgdGhpc09iamVjdC0+dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4odmlzaXRvcik7XG4i
KTsKICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAifVxuXG4iKTsKKyAgICAgICAgICAg
IHB1c2goQGltcGxDb250ZW50LCAidGVtcGxhdGUgdm9pZCAke2NsYXNzTmFtZX06OnZpc2l0T3V0
cHV0Q29uc3RyYWludHMoSlNDZWxsKiwgQWJzdHJhY3RTbG90VmlzaXRvciYpO1xuIik7CisgICAg
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgInRlbXBsYXRlIHZvaWQgJHtjbGFzc05hbWV9Ojp2
aXNpdE91dHB1dENvbnN0cmFpbnRzKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7XG4iKTsKICAgICAg
ICAgfQogICAgIH0KIApAQCAtNTAzMyw3ICs1MDQzLDcgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50
YXRpb24KICAgICB9CiAKICAgICBpZiAoU2hvdWxkR2VuZXJhdGVXcmFwcGVyT3duZXJDb2RlKCRo
YXNQYXJlbnQsICRpbnRlcmZhY2UpICYmICFHZXRDdXN0b21Jc1JlYWNoYWJsZSgkaW50ZXJmYWNl
KSkgewotICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgImJvb2wgSlMke2ludGVyZmFjZU5hbWV9
T3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93
bj4gaGFuZGxlLCB2b2lkKiwgU2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFz
b24pXG4iKTsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJib29sIEpTJHtpbnRlcmZhY2VO
YW1lfU93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVu
a25vd24+IGhhbmRsZSwgdm9pZCosIEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0
IGNoYXIqKiByZWFzb24pXG4iKTsKICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ7XG4iKTsK
ICAgICAgICAgIyBBbGwgQWN0aXZlRE9NT2JqZWN0cyBpbXBsZW1lbnQgaGFzUGVuZGluZ0FjdGl2
aXR5KCksIGJ1dCBub3QgYWxsIG9mIHRoZW0KICAgICAgICAgIyBpbmNyZW1lbnQgdGhlaXIgQysr
IHJlZmVyZW5jZSBjb3VudHMgd2hlbiBoYXNQZW5kaW5nQWN0aXZpdHkoKSBiZWNvbWVzCkBAIC02
NDMyLDYgKzY0NDIsNyBAQCBzdWIgR2VuZXJhdGVDYWxsYmFja0hlYWRlckNvbnRlbnQKICAgICAg
ICAgcHVzaChAJGNvbnRlbnRSZWYsICIgICAgYm9vbCBoYXNDYWxsYmFjaygpIGNvbnN0IGZpbmFs
IHsgcmV0dXJuIG1fZGF0YSAmJiBtX2RhdGEtPmNhbGxiYWNrKCk7IH1cblxuIik7CiAgICAgfQog
CisgICAgcHVzaChAJGNvbnRlbnRSZWYsICIgICAgdm9pZCB2aXNpdEpTRnVuY3Rpb24oSlNDOjpB
YnN0cmFjdFNsb3RWaXNpdG9yJikgb3ZlcnJpZGU7XG5cbiIpIGlmICRpbnRlcmZhY2VPckNhbGxi
YWNrLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntJc1dlYWtDYWxsYmFja307CiAgICAgcHVzaChAJGNv
bnRlbnRSZWYsICIgICAgdm9pZCB2aXNpdEpTRnVuY3Rpb24oSlNDOjpTbG90VmlzaXRvciYpIG92
ZXJyaWRlO1xuXG4iKSBpZiAkaW50ZXJmYWNlT3JDYWxsYmFjay0+ZXh0ZW5kZWRBdHRyaWJ1dGVz
LT57SXNXZWFrQ2FsbGJhY2t9OwogCiAgICAgcHVzaChAJGNvbnRlbnRSZWYsICIgICAgJHtjYWxs
YmFja0RhdGFUeXBlfSogbV9kYXRhO1xuIik7CkBAIC02NjIzLDYgKzY2MzQsMTAgQEAgc3ViIEdl
bmVyYXRlQ2FsbGJhY2tJbXBsZW1lbnRhdGlvbkNvbnRlbgogICAgIH0KIAogICAgIGlmICgkaW50
ZXJmYWNlT3JDYWxsYmFjay0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57SXNXZWFrQ2FsbGJhY2t9KSB7
CisgICAgICAgIHB1c2goQCRjb250ZW50UmVmLCAidm9pZCAke2NsYXNzTmFtZX06OnZpc2l0SlNG
dW5jdGlvbihKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpXG4iKTsKKyAgICAgICAg
cHVzaChAJGNvbnRlbnRSZWYsICJ7XG4iKTsKKyAgICAgICAgcHVzaChAJGNvbnRlbnRSZWYsICIg
ICAgbV9kYXRhLT52aXNpdEpTRnVuY3Rpb24odmlzaXRvcik7XG4iKTsKKyAgICAgICAgcHVzaChA
JGNvbnRlbnRSZWYsICJ9XG5cbiIpOwogICAgICAgICBwdXNoKEAkY29udGVudFJlZiwgInZvaWQg
JHtjbGFzc05hbWV9Ojp2aXNpdEpTRnVuY3Rpb24oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcilc
biIpOwogICAgICAgICBwdXNoKEAkY29udGVudFJlZiwgIntcbiIpOwogICAgICAgICBwdXNoKEAk
Y29udGVudFJlZiwgIiAgICBtX2RhdGEtPnZpc2l0SlNGdW5jdGlvbih2aXNpdG9yKTtcbiIpOwpA
QCAtNjczNCw2ICs2NzQ5LDcgQEAgc3ViIEdlbmVyYXRlSXRlcmFibGVEZWZpbml0aW9uCiAgICAg
bXkgJHZpc2libGVJbnRlcmZhY2VOYW1lID0gJGNvZGVHZW5lcmF0b3ItPkdldFZpc2libGVJbnRl
cmZhY2VOYW1lKCRpbnRlcmZhY2UpOwogCiAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIkpTRE9NSXRl
cmF0b3IuaCIpOworICAgIEFkZFRvSW1wbEluY2x1ZGVzKCI8SmF2YVNjcmlwdENvcmUvU2xvdFZp
c2l0b3JNYWNyb3MuaD4iKTsKIAogICAgIHJldHVybiB1bmxlc3MgSXNLZXlWYWx1ZUl0ZXJhYmxl
SW50ZXJmYWNlKCRpbnRlcmZhY2UpOwogCkBAIC02Nzc3LDcgKzY3OTMsOSBAQCBwdWJsaWM6CiAg
ICAgICAgIGF1dG8qIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3Ike2l0ZXJhdG9yTmFtZX0u
Z2V0KCk7CiBJR05PUkVfV0FSTklOR1NfQkVHSU4oXCJ1bnJlYWNoYWJsZS1jb2RlXCIpCiBJR05P
UkVfV0FSTklOR1NfQkVHSU4oXCJ0YXV0b2xvZ2ljYWwtY29tcGFyZVwiKQotICAgICAgICBpZiAo
JiR7aXRlcmF0b3JOYW1lfTo6dmlzaXRPdXRwdXRDb25zdHJhaW50cyAhPSAmSlNDOjpKU0NlbGw6
OnZpc2l0T3V0cHV0Q29uc3RyYWludHMpCisgICAgICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29u
c3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSAke2l0ZXJhdG9yTmFt
ZX06OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAgICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91
dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpK
U0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAgICAgIGlmIChteVZpc2l0T3V0cHV0
Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCiAgICAgICAgICAgICBj
bGllbnREYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOwogSUdOT1JF
X1dBUk5JTkdTX0VORAogSUdOT1JFX1dBUk5JTkdTX0VORApJbmRleDogU291cmNlL1dlYkNvcmUv
ZG9tL0FjdGl2ZURPTUNhbGxiYWNrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9t
L0FjdGl2ZURPTUNhbGxiYWNrLmgJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9XZWJDb3Jl
L2RvbS9BY3RpdmVET01DYWxsYmFjay5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAog
LyoKICAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKQEAgLTMzLDYgKzM0LDcg
QEAKICNpbmNsdWRlICJDb250ZXh0RGVzdHJ1Y3Rpb25PYnNlcnZlci5oIgogCiBuYW1lc3BhY2Ug
SlNDIHsKK2NsYXNzIEFic3RyYWN0U2xvdFZpc2l0b3I7CiBjbGFzcyBTbG90VmlzaXRvcjsKIH0K
IApAQCAtNTUsNiArNTcsNyBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBhY3Rp
dmVET01PYmplY3RzQXJlU3VzcGVuZGVkKCkgY29uc3Q7CiAgICAgV0VCQ09SRV9FWFBPUlQgYm9v
bCBhY3RpdmVET01PYmplY3RBcmVTdG9wcGVkKCkgY29uc3Q7CiAgICAgCisgICAgdmlydHVhbCB2
b2lkIHZpc2l0SlNGdW5jdGlvbihKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKSB7IH0KICAgICB2
aXJ0dWFsIHZvaWQgdmlzaXRKU0Z1bmN0aW9uKEpTQzo6U2xvdFZpc2l0b3ImKSB7IH0KIH07CiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9FdmVudExpc3RlbmVyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvZG9tL0V2ZW50TGlzdGVuZXIuaAkocmV2aXNpb24gMjcyOTAyKQorKysg
U291cmNlL1dlYkNvcmUvZG9tL0V2ZW50TGlzdGVuZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDgsIDIwMDkgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMjEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yNCw2ICsy
NCw3IEBACiAjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KIAogbmFtZXNwYWNlIEpTQyB7CitjbGFz
cyBBYnN0cmFjdFNsb3RWaXNpdG9yOwogY2xhc3MgSlNPYmplY3Q7CiBjbGFzcyBTbG90VmlzaXRv
cjsKIH0KQEAgLTUyLDYgKzUzLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVF
dmVudChTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgRXZlbnQmKSA9IDA7CiAgICAgdmlydHVhbCBi
b29sIHdhc0NyZWF0ZWRGcm9tTWFya3VwKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KIAorICAg
IHZpcnR1YWwgdm9pZCB2aXNpdEpTRnVuY3Rpb24oSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJikg
eyB9CiAgICAgdmlydHVhbCB2b2lkIHZpc2l0SlNGdW5jdGlvbihKU0M6OlNsb3RWaXNpdG9yJikg
eyB9CiAKICAgICB2aXJ0dWFsIGJvb2wgaXNBdHRyaWJ1dGUoKSBjb25zdCB7IHJldHVybiBmYWxz
ZTsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50VGFyZ2V0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRUYXJnZXQuY3BwCShyZXZpc2lvbiAyNzI5MDIp
CisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRUYXJnZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yLDcgKzIsNyBAQAogICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtk
ZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtk
ZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDIwMDEgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5v
cmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQWxleGV5IFByb3NrdXJ5YWtvdiAoYXBA
d2Via2l0Lm9yZykKICAqICAgICAgICAgICAoQykgMjAwNywgMjAwOCBOaWtvbGFzIFppbW1lcm1h
bm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KICAqCkBAIC0zODQsNyArMzg0LDggQEAgdm9pZCBFdmVu
dFRhcmdldDo6cmVtb3ZlQWxsRXZlbnRMaXN0ZW5lcgogICAgIHRocmVhZERhdGEuc2V0SXNJblJl
bW92ZUFsbEV2ZW50TGlzdGVuZXJzKGZhbHNlKTsKIH0KIAotdm9pZCBFdmVudFRhcmdldDo6dmlz
aXRKU0V2ZW50TGlzdGVuZXJzKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0
eXBlbmFtZSBWaXNpdG9yPgordm9pZCBFdmVudFRhcmdldDo6dmlzaXRKU0V2ZW50TGlzdGVuZXJz
KFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgRXZlbnRUYXJnZXREYXRhKiBkYXRhID0gZXZlbnRU
YXJnZXREYXRhQ29uY3VycmVudGx5KCk7CiAgICAgaWYgKCFkYXRhKQpAQCAtMzk2LDYgKzM5Nyw5
IEBAIHZvaWQgRXZlbnRUYXJnZXQ6OnZpc2l0SlNFdmVudExpc3RlbmVycygKICAgICAgICAgbGlz
dGVuZXItPnZpc2l0SlNGdW5jdGlvbih2aXNpdG9yKTsKIH0KIAordGVtcGxhdGUgdm9pZCBFdmVu
dFRhcmdldDo6dmlzaXRKU0V2ZW50TGlzdGVuZXJzKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYp
OwordGVtcGxhdGUgdm9pZCBFdmVudFRhcmdldDo6dmlzaXRKU0V2ZW50TGlzdGVuZXJzKEpTQzo6
U2xvdFZpc2l0b3ImKTsKKwogdm9pZCBFdmVudFRhcmdldDo6aW52YWxpZGF0ZUV2ZW50TGlzdGVu
ZXJSZWdpb25zKCkKIHsKICAgICBpZiAoaXM8RWxlbWVudD4oKnRoaXMpKSB7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9kb20vRXZlbnRUYXJnZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9kb20vRXZlbnRUYXJnZXQuaAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL1dlYkNvcmUv
ZG9tL0V2ZW50VGFyZ2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTIsNyArMiw3IEBACiAgKiBDb3B5
cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKICAqICAgICAgICAgICAo
QykgMTk5OSBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKICAqICAgICAgICAgICAo
QykgMjAwMSBEaXJrIE11ZWxsZXIgKG11ZWxsZXJAa2RlLm9yZykKLSAqIENvcHlyaWdodCAoQykg
MjAwNC0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAwNC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdo
dCAoQykgMjAwNiBBbGV4ZXkgUHJvc2t1cnlha292IChhcEB3ZWJraXQub3JnKQogICogICAgICAg
ICAgIChDKSAyMDA3LCAyMDA4IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3Jn
PgogICoKQEAgLTk3LDcgKzk3LDcgQEAgcHVibGljOgogICAgIHZvaWQgZmlyZUV2ZW50TGlzdGVu
ZXJzKEV2ZW50JiwgRXZlbnRJbnZva2VQaGFzZSk7CiAgICAgYm9vbCBpc0ZpcmluZ0V2ZW50TGlz
dGVuZXJzKCkgY29uc3Q7CiAKLSAgICB2b2lkIHZpc2l0SlNFdmVudExpc3RlbmVycyhKU0M6OlNs
b3RWaXNpdG9yJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCB2aXNpdEpT
RXZlbnRMaXN0ZW5lcnMoVmlzaXRvciYpOwogICAgIHZvaWQgaW52YWxpZGF0ZUpTRXZlbnRMaXN0
ZW5lcnMoSlNDOjpKU09iamVjdCopOwogCiAgICAgY29uc3QgRXZlbnRUYXJnZXREYXRhKiBldmVu
dFRhcmdldERhdGEoKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9NdXRhdGlvblJl
Y29yZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL011dGF0aW9uUmVjb3Jk
LmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL1dlYkNvcmUvZG9tL011dGF0aW9uUmVj
b3JkLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQg
KEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMgYXJlCkBAIC00MSw3ICs0Miw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogbmFtZXNwYWNlIHsKIAotc3RhdGljIHZvaWQgdmlzaXROb2RlTGlzdChKU0M6OlNsb3RWaXNp
dG9yJiB2aXNpdG9yLCBOb2RlTGlzdCYgbm9kZUxpc3QpCitzdGF0aWMgdm9pZCB2aXNpdE5vZGVM
aXN0KEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvciwgTm9kZUxpc3QmIG5vZGVMaXN0
KQogewogICAgIEFTU0VSVCghbm9kZUxpc3QuaXNMaXZlTm9kZUxpc3QoKSk7CiAgICAgdW5zaWdu
ZWQgbGVuZ3RoID0gbm9kZUxpc3QubGVuZ3RoKCk7CkBAIC02OCw3ICs2OSw3IEBAIHByaXZhdGU6
CiAgICAgTm9kZSogcHJldmlvdXNTaWJsaW5nKCkgb3ZlcnJpZGUgeyByZXR1cm4gbV9wcmV2aW91
c1NpYmxpbmcuZ2V0KCk7IH0KICAgICBOb2RlKiBuZXh0U2libGluZygpIG92ZXJyaWRlIHsgcmV0
dXJuIG1fbmV4dFNpYmxpbmcuZ2V0KCk7IH0KIAotICAgIHZvaWQgdmlzaXROb2Rlc0NvbmN1cnJl
bnRseShKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKSBjb25zdCBmaW5hbAorICAgIHZvaWQgdmlz
aXROb2Rlc0NvbmN1cnJlbnRseShKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpIGNv
bnN0IGZpbmFsCiAgICAgewogICAgICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qocm9vdChtX3Rh
cmdldC5wdHIoKSkpOwogICAgICAgICBpZiAobV9hZGRlZE5vZGVzKQpAQCAtMTA1LDcgKzEwNiw3
IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiBub2RlTGlzdC5nZXQoKTsKICAgICB9CiAKLSAg
ICB2b2lkIHZpc2l0Tm9kZXNDb25jdXJyZW50bHkoSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikg
Y29uc3QgZmluYWwKKyAgICB2b2lkIHZpc2l0Tm9kZXNDb25jdXJyZW50bHkoSlNDOjpBYnN0cmFj
dFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBjb25zdCBmaW5hbAogICAgIHsKICAgICAgICAgdmlzaXRv
ci5hZGRPcGFxdWVSb290KHJvb3QobV90YXJnZXQucHRyKCkpKTsKICAgICB9CkBAIC0xNjQsNyAr
MTY1LDcgQEAgcHJpdmF0ZToKIAogICAgIFN0cmluZyBvbGRWYWx1ZSgpIG92ZXJyaWRlIHsgcmV0
dXJuIFN0cmluZygpOyB9CiAKLSAgICB2b2lkIHZpc2l0Tm9kZXNDb25jdXJyZW50bHkoSlNDOjpT
bG90VmlzaXRvciYgdmlzaXRvcikgY29uc3QgZmluYWwKKyAgICB2b2lkIHZpc2l0Tm9kZXNDb25j
dXJyZW50bHkoSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBjb25zdCBmaW5hbAog
ICAgIHsKICAgICAgICAgbV9yZWNvcmQtPnZpc2l0Tm9kZXNDb25jdXJyZW50bHkodmlzaXRvcik7
CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL011dGF0aW9uUmVjb3JkLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL011dGF0aW9uUmVjb3JkLmgJKHJldmlzaW9uIDI3
MjkwMikKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9NdXRhdGlvblJlY29yZC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUK
QEAgLTM2LDcgKzM3LDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLWNsYXNzIFNsb3RWaXNpdG9y
OworY2xhc3MgQWJzdHJhY3RTbG90VmlzaXRvcjsKIAogfQogCkBAIC03Miw3ICs3Myw3IEBAIHB1
YmxpYzoKIAogICAgIHZpcnR1YWwgU3RyaW5nIG9sZFZhbHVlKCkgeyByZXR1cm4gU3RyaW5nKCk7
IH0KIAotICAgIHZpcnR1YWwgdm9pZCB2aXNpdE5vZGVzQ29uY3VycmVudGx5KEpTQzo6U2xvdFZp
c2l0b3ImKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0Tm9kZXNDb25jdXJyZW50
bHkoSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJikgY29uc3QgPSAwOwogfTsKIAogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL05vZGVGaWx0ZXJDb25kaXRp
b24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZUZpbHRlckNvbmRpdGlv
bi5oCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZUZpbHRlckNv
bmRpdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3ICszOCw3IEBAIGNsYXNzIE5vZGVGaWx0
ZXJDb25kaXRpb24gOiBwdWJsaWMgUmVmQ28KIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5Ob2RlRmls
dGVyQ29uZGl0aW9uKCkgPSBkZWZhdWx0OwogICAgIHZpcnR1YWwgdW5zaWduZWQgc2hvcnQgYWNj
ZXB0Tm9kZShOb2RlJikgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgdm9pZCB2aXNpdEFnZ3JlZ2F0
ZShKU0M6OlNsb3RWaXNpdG9yJikgeyB9CisvLyAgICB2aXJ0dWFsIHZvaWQgdmlzaXRBZ2dyZWdh
dGUoSlNDOjpTbG90VmlzaXRvciYpIHsgfSAvLyBtbGFtIFVOVVNFRAogfTsKIAogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL1N0YXRpY1JhbmdlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vU3RhdGljUmFuZ2UuY3BwCShyZXZpc2lv
biAyNzI5MDIpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vU3RhdGljUmFuZ2UuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIwIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtNzYsNyArNzYsNyBAQCBFeGNlcHRpb25PcjxSZWY8U3RhdGljUmFuZ2U+PiBT
dGF0aWNSYW5nCiAgICAgcmV0dXJuIGNyZWF0ZSh7IHsgaW5pdC5zdGFydENvbnRhaW5lci5yZWxl
YXNlTm9uTnVsbCgpLCBpbml0LnN0YXJ0T2Zmc2V0IH0sIHsgaW5pdC5lbmRDb250YWluZXIucmVs
ZWFzZU5vbk51bGwoKSwgaW5pdC5lbmRPZmZzZXQgfSB9KTsKIH0KIAotdm9pZCBTdGF0aWNSYW5n
ZTo6dmlzaXROb2Rlc0NvbmN1cnJlbnRseShKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKSBjb25z
dAordm9pZCBTdGF0aWNSYW5nZTo6dmlzaXROb2Rlc0NvbmN1cnJlbnRseShKU0M6OkFic3RyYWN0
U2xvdFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0CiB7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290
KHJvb3Qoc3RhcnQuY29udGFpbmVyLmdldCgpKSk7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290
KHJvb3QoZW5kLmNvbnRhaW5lci5nZXQoKSkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL1N0
YXRpY1JhbmdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL1N0YXRpY1Jhbmdl
LmgJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9TdGF0aWNSYW5nZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
Ni0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMzAsNyArMzAsNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAot
Y2xhc3MgU2xvdFZpc2l0b3I7CitjbGFzcyBBYnN0cmFjdFNsb3RWaXNpdG9yOwogCiB9CiAKQEAg
LTU4LDcgKzU4LDcgQEAgcHVibGljOgogICAgIHVuc2lnbmVkIGVuZE9mZnNldCgpIGNvbnN0IGZp
bmFsIHsgcmV0dXJuIFNpbXBsZVJhbmdlOjplbmRPZmZzZXQoKTsgfQogICAgIGJvb2wgY29sbGFw
c2VkKCkgY29uc3QgZmluYWwgeyByZXR1cm4gU2ltcGxlUmFuZ2U6OmNvbGxhcHNlZCgpOyB9CiAK
LSAgICB2b2lkIHZpc2l0Tm9kZXNDb25jdXJyZW50bHkoSlNDOjpTbG90VmlzaXRvciYpIGNvbnN0
OworICAgIHZvaWQgdmlzaXROb2Rlc0NvbmN1cnJlbnRseShKU0M6OkFic3RyYWN0U2xvdFZpc2l0
b3ImKSBjb25zdDsKIAogcHJpdmF0ZToKICAgICBTdGF0aWNSYW5nZShTaW1wbGVSYW5nZSYmKTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMMlJlbmRlcmluZ0NvbnRleHQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMMlJlbmRl
cmluZ0NvbnRleHQuY3BwCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9XZWJHTDJSZW5kZXJpbmdDb250ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMw
NzgsNyArMzA3OCw3IEBAIGJvb2wgV2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6Y2hlY2tBbmRUcmEK
ICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBXZWJHTDJSZW5kZXJpbmdDb250ZXh0OjphZGRN
ZW1iZXJzVG9PcGFxdWVSb290cyhKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBXZWJH
TDJSZW5kZXJpbmdDb250ZXh0OjphZGRNZW1iZXJzVG9PcGFxdWVSb290cyhKU0M6OkFic3RyYWN0
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6
YWRkTWVtYmVyc1RvT3BhcXVlUm9vdHModmlzaXRvcik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL1dlYkdMMlJlbmRlcmluZ0NvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTDJSZW5kZXJpbmdDb250ZXh0LmgJKHJldmlzaW9u
IDI3MjkwMikKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMMlJlbmRlcmluZ0Nv
bnRleHQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTUtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2MSw3ICsyNjEsNyBAQCBwdWJsaWM6CiAKICAg
ICBib29sIGNoZWNrQW5kVHJhbnNsYXRlQXR0YWNobWVudHMoY29uc3QgY2hhciogZnVuY3Rpb25O
YW1lLCBHQ0dMZW51bSwgVmVjdG9yPEdDR0xlbnVtPiYpOwogCi0gICAgdm9pZCBhZGRNZW1iZXJz
VG9PcGFxdWVSb290cyhKU0M6OlNsb3RWaXNpdG9yJikgb3ZlcnJpZGU7CisgICAgdm9pZCBhZGRN
ZW1iZXJzVG9PcGFxdWVSb290cyhKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKSBvdmVycmlkZTsK
IAogcHJpdmF0ZToKICAgICBXZWJHTDJSZW5kZXJpbmdDb250ZXh0KENhbnZhc0Jhc2UmLCBHcmFw
aGljc0NvbnRleHRHTEF0dHJpYnV0ZXMpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52
YXMvV2ViR0xGcmFtZWJ1ZmZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvV2ViR0xGcmFtZWJ1ZmZlci5jcHAJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRnJhbWVidWZmZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOS0yMDE3IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDIxIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtNjMsNyArNjMsNyBAQCBuYW1lc3BhY2UgewogICAgICAgICB2b2lkIG9uRGV0YWNoZWQo
Y29uc3QgQWJzdHJhY3RMb2NrZXImLCBHcmFwaGljc0NvbnRleHRHTCopIG92ZXJyaWRlOwogICAg
ICAgICB2b2lkIGF0dGFjaChHcmFwaGljc0NvbnRleHRHTCosIEdDR0xlbnVtIHRhcmdldCwgR0NH
TGVudW0gYXR0YWNobWVudCkgb3ZlcnJpZGU7CiAgICAgICAgIHZvaWQgdW5hdHRhY2goR3JhcGhp
Y3NDb250ZXh0R0wqLCBHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIGF0dGFjaG1lbnQpIG92ZXJy
aWRlOwotICAgICAgICB2b2lkIGFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKGNvbnN0IEFic3RyYWN0
TG9ja2VyJiwgSlNDOjpTbG90VmlzaXRvciYpIG92ZXJyaWRlOworICAgICAgICB2b2lkIGFkZE1l
bWJlcnNUb09wYXF1ZVJvb3RzKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgSlNDOjpBYnN0cmFjdFNs
b3RWaXNpdG9yJikgb3ZlcnJpZGU7CiAKICAgICAgICAgV2ViR0xSZW5kZXJidWZmZXJBdHRhY2ht
ZW50KCkgeyB9OwogCkBAIC0xNDUsNyArMTQ1LDcgQEAgbmFtZXNwYWNlIHsKICAgICAgICAgICAg
IGNvbnRleHQtPmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKHRhcmdldCwgYXR0YWNobWVudCwgR3Jh
cGhpY3NDb250ZXh0R0w6OlJFTkRFUkJVRkZFUiwgMCk7CiAgICAgfQogCi0gICAgdm9pZCBXZWJH
TFJlbmRlcmJ1ZmZlckF0dGFjaG1lbnQ6OmFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKGNvbnN0IEFi
c3RyYWN0TG9ja2VyJiwgSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKKyAgICB2b2lkIFdlYkdM
UmVuZGVyYnVmZmVyQXR0YWNobWVudDo6YWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMoY29uc3QgQWJz
dHJhY3RMb2NrZXImLCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiAgICAgewog
ICAgICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QobV9yZW5kZXJidWZmZXIuZ2V0KCkpOwogICAg
IH0KQEAgLTE2OSw3ICsxNjksNyBAQCBuYW1lc3BhY2UgewogICAgICAgICB2b2lkIG9uRGV0YWNo
ZWQoY29uc3QgQWJzdHJhY3RMb2NrZXImLCBHcmFwaGljc0NvbnRleHRHTCopIG92ZXJyaWRlOwog
ICAgICAgICB2b2lkIGF0dGFjaChHcmFwaGljc0NvbnRleHRHTCosIEdDR0xlbnVtIHRhcmdldCwg
R0NHTGVudW0gYXR0YWNobWVudCkgb3ZlcnJpZGU7CiAgICAgICAgIHZvaWQgdW5hdHRhY2goR3Jh
cGhpY3NDb250ZXh0R0wqLCBHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIGF0dGFjaG1lbnQpIG92
ZXJyaWRlOwotICAgICAgICB2b2lkIGFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKGNvbnN0IEFic3Ry
YWN0TG9ja2VyJiwgSlNDOjpTbG90VmlzaXRvciYpIG92ZXJyaWRlOworICAgICAgICB2b2lkIGFk
ZE1lbWJlcnNUb09wYXF1ZVJvb3RzKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgSlNDOjpBYnN0cmFj
dFNsb3RWaXNpdG9yJikgb3ZlcnJpZGU7CiAKICAgICAgICAgV2ViR0xUZXh0dXJlQXR0YWNobWVu
dCgpIHsgfTsKIApAQCAtMjY3LDcgKzI2Nyw3IEBAIG5hbWVzcGFjZSB7CiAjZW5kaWYKICAgICB9
CiAKLSAgICB2b2lkIFdlYkdMVGV4dHVyZUF0dGFjaG1lbnQ6OmFkZE1lbWJlcnNUb09wYXF1ZVJv
b3RzKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKKyAg
ICB2b2lkIFdlYkdMVGV4dHVyZUF0dGFjaG1lbnQ6OmFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKGNv
bnN0IEFic3RyYWN0TG9ja2VyJiwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQog
ICAgIHsKICAgICAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KG1fdGV4dHVyZS5nZXQoKSk7CiAg
ICAgfQpAQCAtNzIxLDcgKzcyMSw3IEBAIEdDR0xlbnVtIFdlYkdMRnJhbWVidWZmZXI6OmdldERy
YXdCdWZmZXIKICAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0R0w6Ok5PTkU7CiB9CiAKLXZvaWQg
V2ViR0xGcmFtZWJ1ZmZlcjo6YWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMoY29uc3QgQWJzdHJhY3RM
b2NrZXImIGxvY2tlciwgSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgV2ViR0xGcmFt
ZWJ1ZmZlcjo6YWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMoY29uc3QgQWJzdHJhY3RMb2NrZXImIGxv
Y2tlciwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGZvciAoYXV0
byYgZW50cnkgOiBtX2F0dGFjaG1lbnRzKQogICAgICAgICBlbnRyeS52YWx1ZS0+YWRkTWVtYmVy
c1RvT3BhcXVlUm9vdHMobG9ja2VyLCB2aXNpdG9yKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0
bWwvY2FudmFzL1dlYkdMRnJhbWVidWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9XZWJHTEZyYW1lYnVmZmVyLmgJKHJldmlzaW9uIDI3MjkwMikKKysrIFNv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRnJhbWVidWZmZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0zNCw3ICszNCw3IEBACiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgSlND
IHsKLWNsYXNzIFNsb3RWaXNpdG9yOworY2xhc3MgQWJzdHJhY3RTbG90VmlzaXRvcjsKIH0KIAog
bmFtZXNwYWNlIFdURiB7CkBAIC02NSw3ICs2NSw3IEBAIHB1YmxpYzoKICAgICAgICAgdmlydHVh
bCB2b2lkIG9uRGV0YWNoZWQoY29uc3QgV1RGOjpBYnN0cmFjdExvY2tlciYsIEdyYXBoaWNzQ29u
dGV4dEdMKikgPSAwOwogICAgICAgICB2aXJ0dWFsIHZvaWQgYXR0YWNoKEdyYXBoaWNzQ29udGV4
dEdMKiwgR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBhdHRhY2htZW50KSA9IDA7CiAgICAgICAg
IHZpcnR1YWwgdm9pZCB1bmF0dGFjaChHcmFwaGljc0NvbnRleHRHTCosIEdDR0xlbnVtIHRhcmdl
dCwgR0NHTGVudW0gYXR0YWNobWVudCkgPSAwOwotICAgICAgICB2aXJ0dWFsIHZvaWQgYWRkTWVt
YmVyc1RvT3BhcXVlUm9vdHMoY29uc3QgV1RGOjpBYnN0cmFjdExvY2tlciYsIEpTQzo6U2xvdFZp
c2l0b3ImKSA9IDA7CisgICAgICAgIHZpcnR1YWwgdm9pZCBhZGRNZW1iZXJzVG9PcGFxdWVSb290
cyhjb25zdCBXVEY6OkFic3RyYWN0TG9ja2VyJiwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJikg
PSAwOwogCiAgICAgcHJvdGVjdGVkOgogICAgICAgICBXZWJHTEF0dGFjaG1lbnQoKTsKQEAgLTEx
NCw3ICsxMTQsNyBAQCBwdWJsaWM6CiAKICAgICBHQ0dMZW51bSBnZXREcmF3QnVmZmVyKEdDR0xl
bnVtKTsKIAotICAgIHZvaWQgYWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMoY29uc3QgV1RGOjpBYnN0
cmFjdExvY2tlciYsIEpTQzo6U2xvdFZpc2l0b3ImKTsKKyAgICB2b2lkIGFkZE1lbWJlcnNUb09w
YXF1ZVJvb3RzKGNvbnN0IFdURjo6QWJzdHJhY3RMb2NrZXImLCBKU0M6OkFic3RyYWN0U2xvdFZp
c2l0b3ImKTsKIAogcHJpdmF0ZToKICAgICBXZWJHTEZyYW1lYnVmZmVyKFdlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2UmKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUHJv
Z3JhbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xQ
cm9ncmFtLmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52
YXMvV2ViR0xQcm9ncmFtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDA5LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yMDYsNyArMjA2LDcgQEAgYm9vbCBX
ZWJHTFByb2dyYW06OmRldGFjaFNoYWRlcihjb25zdCBBYgogICAgIH0KIH0KIAotdm9pZCBXZWJH
TFByb2dyYW06OmFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwg
SlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgV2ViR0xQcm9ncmFtOjphZGRNZW1iZXJz
VG9PcGFxdWVSb290cyhjb25zdCBBYnN0cmFjdExvY2tlciYsIEpTQzo6QWJzdHJhY3RTbG90Vmlz
aXRvciYgdmlzaXRvcikKIHsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QobV92ZXJ0ZXhTaGFk
ZXIuZ2V0KCkpOwogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChtX2ZyYWdtZW50U2hhZGVyLmdl
dCgpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUHJvZ3JhbS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUHJvZ3JhbS5oCShy
ZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFByb2dy
YW0uaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDktMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDktMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM1LDcgKzM1LDcgQEAKICNpbmNsdWRlIDx3dGYvVmVj
dG9yLmg+CiAKIG5hbWVzcGFjZSBKU0MgewotY2xhc3MgU2xvdFZpc2l0b3I7CitjbGFzcyBBYnN0
cmFjdFNsb3RWaXNpdG9yOwogfQogCiBuYW1lc3BhY2UgV1RGIHsKQEAgLTg4LDcgKzg4LDcgQEAg
cHVibGljOgogICAgICAgICByZXR1cm4gbV9yZXF1aXJlZFRyYW5zZm9ybUZlZWRiYWNrQnVmZmVy
Q291bnQ7CiAgICAgfQogCi0gICAgdm9pZCBhZGRNZW1iZXJzVG9PcGFxdWVSb290cyhjb25zdCBX
VEY6OkFic3RyYWN0TG9ja2VyJiwgSlNDOjpTbG90VmlzaXRvciYpOworICAgIHZvaWQgYWRkTWVt
YmVyc1RvT3BhcXVlUm9vdHMoY29uc3QgV1RGOjpBYnN0cmFjdExvY2tlciYsIEpTQzo6QWJzdHJh
Y3RTbG90VmlzaXRvciYpOwogCiBwcml2YXRlOgogICAgIFdlYkdMUHJvZ3JhbShXZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlJik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcAkocmV2aXNpb24gMjcyOTAy
KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE1LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03OTMxLDcgKzc5MzEsNyBAQCB2b2lkIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2U6OmRpc3BhdGNoCiAgICAgcXVldWVUYXNrVG9EaXNwYXRjaEV2ZW50
KCpjYW52YXMsIFRhc2tTb3VyY2U6OldlYkdMLCBXZWJHTENvbnRleHRFdmVudDo6Y3JlYXRlKGV2
ZW50TmFtZXMoKS53ZWJnbGNvbnRleHRjaGFuZ2VkRXZlbnQsIEV2ZW50OjpDYW5CdWJibGU6Ok5v
LCBFdmVudDo6SXNDYW5jZWxhYmxlOjpZZXMsIGVtcHR5U3RyaW5nKCkpKTsKIH0KIAotdm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjphZGRNZW1iZXJzVG9PcGFxdWVSb290cyhKU0M6OlNs
b3RWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjphZGRN
ZW1iZXJzVG9PcGFxdWVSb290cyhKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7
CiAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhvYmplY3RHcmFwaExvY2soKSk7CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlLmgJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2Fu
dmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU4LDcg
KzU4LDcgQEAKICNlbmRpZgogCiBuYW1lc3BhY2UgSlNDIHsKLWNsYXNzIFNsb3RWaXNpdG9yOwor
Y2xhc3MgQWJzdHJhY3RTbG90VmlzaXRvcjsKIH0KIAogbmFtZXNwYWNlIFdURiB7CkBAIC00MTEs
NyArNDExLDcgQEAgcHVibGljOgogICAgIHZvaWQgcmVjeWNsZUNvbnRleHQoKSBvdmVycmlkZTsK
ICAgICB2b2lkIGRpc3BhdGNoQ29udGV4dENoYW5nZWROb3RpZmljYXRpb24oKSBvdmVycmlkZTsK
IAotICAgIHZpcnR1YWwgdm9pZCBhZGRNZW1iZXJzVG9PcGFxdWVSb290cyhKU0M6OlNsb3RWaXNp
dG9yJik7CisgICAgdmlydHVhbCB2b2lkIGFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKEpTQzo6QWJz
dHJhY3RTbG90VmlzaXRvciYpOwogICAgIC8vIFRoaXMgbG9jayBtdXN0IGJlIGhlbGQgYWNyb3Nz
IGFsbCBtdXRhdGlvbnMgb2YgY29udGFpbmVycyBsaWtlCiAgICAgLy8gVmVjdG9ycywgSGFzaFNl
dHMsIGV0Yy4gd2hpY2ggY29udGFpbiBSZWZQdHI8V2ViR0xPYmplY3Q+LCBhbmQKICAgICAvLyB3
aGljaCBhcmUgdHJhdmVyc2VkIGJ5IGFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKCkgb3IgYW55IG9m
IHRoZQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xUcmFuc2Zvcm1GZWVk
YmFjay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xU
cmFuc2Zvcm1GZWVkYmFjay5jcHAJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL1dlYkdMVHJhbnNmb3JtRmVlZGJhY2suY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMw
LDggKzMwLDcgQEAKIAogI2luY2x1ZGUgIldlYkdMQ29udGV4dEdyb3VwLmgiCiAjaW5jbHVkZSAi
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1Ns
b3RWaXNpdG9yLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvU2xvdFZpc2l0b3JJbmxpbmVz
Lmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvQWJzdHJhY3RTbG90VmlzaXRvcklubGluZXMu
aD4KICNpbmNsdWRlIDx3dGYvTG9jay5oPgogI2luY2x1ZGUgPHd0Zi9Mb2NrZXIuaD4KIApAQCAt
OTMsNyArOTIsNyBAQCBib29sIFdlYkdMVHJhbnNmb3JtRmVlZGJhY2s6Omhhc0Vub3VnaEJ1CiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgV2ViR0xUcmFuc2Zvcm1GZWVkYmFjazo6YWRkTWVt
YmVyc1RvT3BhcXVlUm9vdHMoY29uc3QgQWJzdHJhY3RMb2NrZXImIGxvY2tlciwgSlNDOjpTbG90
VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgV2ViR0xUcmFuc2Zvcm1GZWVkYmFjazo6YWRkTWVtYmVy
c1RvT3BhcXVlUm9vdHMoY29uc3QgQWJzdHJhY3RMb2NrZXImIGxvY2tlciwgSlNDOjpBYnN0cmFj
dFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGZvciAoYXV0byYgYnVmZmVyIDogbV9ib3Vu
ZEluZGV4ZWRUcmFuc2Zvcm1GZWVkYmFja0J1ZmZlcnMpCiAgICAgICAgIHZpc2l0b3IuYWRkT3Bh
cXVlUm9vdChidWZmZXIuZ2V0KCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
V2ViR0xUcmFuc2Zvcm1GZWVkYmFjay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0
bWwvY2FudmFzL1dlYkdMVHJhbnNmb3JtRmVlZGJhY2suaAkocmV2aXNpb24gMjcyOTAyKQorKysg
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xUcmFuc2Zvcm1GZWVkYmFjay5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0y
MDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMzEsNyArMzEsNyBAQAogI2luY2x1ZGUgIldlYkdMU2hhcmVkT2JqZWN0
LmgiCiAKIG5hbWVzcGFjZSBKU0MgewotY2xhc3MgU2xvdFZpc2l0b3I7CitjbGFzcyBBYnN0cmFj
dFNsb3RWaXNpdG9yOwogfQogCiBuYW1lc3BhY2UgV1RGIHsKQEAgLTcwLDcgKzcwLDcgQEAgcHVi
bGljOgogICAgIAogICAgIGJvb2wgaGFzRW5vdWdoQnVmZmVycyhHQ0dMdWludCBudW1SZXF1aXJl
ZCkgY29uc3Q7CiAKLSAgICB2b2lkIGFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKGNvbnN0IEFic3Ry
YWN0TG9ja2VyJiwgSlNDOjpTbG90VmlzaXRvciYpOworICAgIHZvaWQgYWRkTWVtYmVyc1RvT3Bh
cXVlUm9vdHMoY29uc3QgQWJzdHJhY3RMb2NrZXImLCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3Im
KTsKIAogcHJpdmF0ZToKICAgICBXZWJHTFRyYW5zZm9ybUZlZWRiYWNrKFdlYkdMMlJlbmRlcmlu
Z0NvbnRleHQmKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVmVydGV4
QXJyYXlPYmplY3RCYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2Nh
bnZhcy9XZWJHTFZlcnRleEFycmF5T2JqZWN0QmFzZS5jcHAJKHJldmlzaW9uIDI3MjkwMikKKysr
IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVmVydGV4QXJyYXlPYmplY3RCYXNlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTUtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTI5LDggKzI5LDcgQEAKICNpZiBFTkFCTEUoV0VCR0wpCiAK
ICNpbmNsdWRlICJXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmgiCi0jaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvU2xvdFZpc2l0b3IuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9TbG90Vmlz
aXRvcklubGluZXMuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9BYnN0cmFjdFNsb3RWaXNp
dG9ySW5saW5lcy5oPgogI2luY2x1ZGUgPHd0Zi9Mb2NrZXIuaD4KIAogbmFtZXNwYWNlIFdlYkNv
cmUgewpAQCAtMTA5LDcgKzEwOCw3IEBAIHZvaWQgV2ViR0xWZXJ0ZXhBcnJheU9iamVjdEJhc2U6
OnNldFZlcnQKICAgICBtX3ZlcnRleEF0dHJpYlN0YXRlW2luZGV4XS5kaXZpc29yID0gZGl2aXNv
cjsKIH0KIAotdm9pZCBXZWJHTFZlcnRleEFycmF5T2JqZWN0QmFzZTo6YWRkTWVtYmVyc1RvT3Bh
cXVlUm9vdHMoY29uc3QgQWJzdHJhY3RMb2NrZXImLCBKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9y
KQordm9pZCBXZWJHTFZlcnRleEFycmF5T2JqZWN0QmFzZTo6YWRkTWVtYmVyc1RvT3BhcXVlUm9v
dHMoY29uc3QgQWJzdHJhY3RMb2NrZXImLCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0
b3IpCiB7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KG1fYm91bmRFbGVtZW50QXJyYXlCdWZm
ZXIuZ2V0KCkpOwogICAgIGZvciAoYXV0byYgc3RhdGUgOiBtX3ZlcnRleEF0dHJpYlN0YXRlKQpJ
bmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xWZXJ0ZXhBcnJheU9iamVjdEJh
c2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFZlcnRl
eEFycmF5T2JqZWN0QmFzZS5oCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9XZWJHTFZlcnRleEFycmF5T2JqZWN0QmFzZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE3IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIxIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtMzIsNyArMzIsNyBAQAogI2luY2x1ZGUgIldlYkdMQ29udGV4dE9iamVjdC5oIgogCiBuYW1l
c3BhY2UgSlNDIHsKLWNsYXNzIFNsb3RWaXNpdG9yOworY2xhc3MgQWJzdHJhY3RTbG90VmlzaXRv
cjsKIH0KIAogbmFtZXNwYWNlIFdURiB7CkBAIC03Nyw3ICs3Nyw3IEBAIHB1YmxpYzoKIAogICAg
IHZvaWQgc2V0VmVydGV4QXR0cmliRGl2aXNvcihHQ0dMdWludCBpbmRleCwgR0NHTHVpbnQgZGl2
aXNvcik7CiAKLSAgICB2b2lkIGFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKGNvbnN0IFdURjo6QWJz
dHJhY3RMb2NrZXImLCBKU0M6OlNsb3RWaXNpdG9yJik7CisgICAgdm9pZCBhZGRNZW1iZXJzVG9P
cGFxdWVSb290cyhjb25zdCBXVEY6OkFic3RyYWN0TG9ja2VyJiwgSlNDOjpBYnN0cmFjdFNsb3RW
aXNpdG9yJik7CiAKIHByb3RlY3RlZDoKICAgICBXZWJHTFZlcnRleEFycmF5T2JqZWN0QmFzZShX
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlJiwgVHlwZSk7Cg==
</data>
<flag name="commit-queue"
          id="439052"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>420516</attachid>
            <date>2021-02-16 12:00:18 -0800</date>
            <delta_ts>2021-02-16 12:23:46 -0800</delta_ts>
            <desc>work in progress.</desc>
            <filename>bug-217274p3.patch</filename>
            <type>text/plain</type>
            <size>597332</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDI3MjkwMikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtNjEzLDYgKzYxMyw4IEBAIHNldChKYXZhU2NyaXB0Q29yZV9QUklWQVRFX0ZSQU1FV09SS19I
RUEKICAgICBkb21qaXQvRE9NSklUSGVhcFJhbmdlLmgKICAgICBkb21qaXQvRE9NSklUU2lnbmF0
dXJlLmgKIAorICAgIGhlYXAvQWJzdHJhY3RTbG90VmlzaXRvci5oCisgICAgaGVhcC9BYnN0cmFj
dFNsb3RWaXNpdG9ySW5saW5lcy5oCiAgICAgaGVhcC9BbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmgK
ICAgICBoZWFwL0FsbG9jYXRpb25GYWlsdXJlTW9kZS5oCiAgICAgaGVhcC9BbGxvY2F0b3IuaApA
QCAtNjc4LDYgKzY4MCw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9QUklWQVRFX0ZSQU1FV09SS19I
RUEKICAgICBoZWFwL01hcmtlZEJsb2NrU2V0LmgKICAgICBoZWFwL01hcmtlZFNwYWNlLmgKICAg
ICBoZWFwL01hcmtpbmdDb25zdHJhaW50LmgKKyAgICBoZWFwL01hcmtpbmdDb25zdHJhaW50RXhl
Y3V0b3JQYWlyLmgKICAgICBoZWFwL011dGF0b3JTdGF0ZS5oCiAgICAgaGVhcC9QYWNrZWRDZWxs
UHRyLmgKICAgICBoZWFwL1ByZWNpc2VBbGxvY2F0aW9uLmgKQEAgLTY4NywxMiArNjkwLDE0IEBA
IHNldChKYXZhU2NyaXB0Q29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUEKICAgICBoZWFwL1NpbXBs
ZU1hcmtpbmdDb25zdHJhaW50LmgKICAgICBoZWFwL1Nsb3RWaXNpdG9yLmgKICAgICBoZWFwL1Ns
b3RWaXNpdG9ySW5saW5lcy5oCisgICAgaGVhcC9TbG90VmlzaXRvck1hY3Jvcy5oCiAgICAgaGVh
cC9TdHJvbmcuaAogICAgIGhlYXAvU3Ryb25nSW5saW5lcy5oCiAgICAgaGVhcC9TdWJzcGFjZS5o
CiAgICAgaGVhcC9TdWJzcGFjZUlubGluZXMuaAogICAgIGhlYXAvU3luY2hyb25vdXNuZXNzLmgK
ICAgICBoZWFwL1RpbnlCbG9vbUZpbHRlci5oCisgICAgaGVhcC9WZXJpZmllclNsb3RWaXNpdG9y
LmgKICAgICBoZWFwL1Zpc2l0UmFjZUtleS5oCiAgICAgaGVhcC9XZWFrLmgKICAgICBoZWFwL1dl
YWtCbG9jay5oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CShyZXZpc2lvbiAyNzI5
MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQJKHdvcmtpbmcgY29weSkK
QEAgLTU2Myw2ICs1NjMsNyBAQCBoZWFwL1N0b3BJZk5lY2Vzc2FyeVRpbWVyLmNwcAogaGVhcC9T
dWJzcGFjZS5jcHAKIGhlYXAvU3luY2hyb25vdXNTdG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1bGVy
LmNwcAogaGVhcC9TeW5jaHJvbm91c25lc3MuY3BwCitoZWFwL1ZlcmlmaWVyU2xvdFZpc2l0b3Iu
Y3BwCiBoZWFwL1Zpc2l0UmFjZUtleS5jcHAKIGhlYXAvV2Vhay5jcHAKIGhlYXAvV2Vha0Jsb2Nr
LmNwcApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0FQSVdyYXBwZXJPYmplY3Qu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQVBJV3JhcHBlck9i
amVjdC5oCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pT
QVBJV3JhcHBlck9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDEsNyArNDEsNyBAQCBwdWJs
aWM6CiAgICAgc3RhdGljIHZvaWQgc3Vic3BhY2VGb3IoVk0mKSB7IFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7IH0KICAgICAKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7Ci0gICAg
c3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJik7Cisg
ICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTl9XSVRIX01PRElGSUVSKEpTX0VYUE9SVF9QUklWQVRF
KTsKICAgICAKICAgICB2b2lkKiB3cmFwcGVkT2JqZWN0KCkgeyByZXR1cm4gbV93cmFwcGVkT2Jq
ZWN0OyB9CiAgICAgdm9pZCBzZXRXcmFwcGVkT2JqZWN0KHZvaWQqKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9BUEkvSlNBUElXcmFwcGVyT2JqZWN0Lm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNBUElXcmFwcGVyT2JqZWN0Lm1tCShyZXZpc2lvbiAy
NzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQVBJV3JhcHBlck9iamVjdC5t
bQkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTM3LDcgKzM3LDcgQEAKIGNsYXNzIEpTQVBJV3JhcHBlck9i
amVjdEhhbmRsZU93bmVyIGZpbmFsIDogcHVibGljIEpTQzo6V2Vha0hhbmRsZU93bmVyIHsKIHB1
YmxpYzoKICAgICB2b2lkIGZpbmFsaXplKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQq
KSBmaW5hbDsKLSAgICBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxl
PEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6U2xvdFZpc2l0b3ImLCBjb25zdCBj
aGFyKiopIGZpbmFsOworICAgIGJvb2wgaXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpI
YW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCwgSlNDOjpBYnN0cmFjdFNsb3RWaXNp
dG9yJiwgY29uc3QgY2hhcioqKSBmaW5hbDsKIH07CiAKIHN0YXRpYyBKU0FQSVdyYXBwZXJPYmpl
Y3RIYW5kbGVPd25lcioganNBUElXcmFwcGVyT2JqZWN0SGFuZGxlT3duZXIoKQpAQCAtNTYsMTQg
KzU2LDE0IEBAIHZvaWQgSlNBUElXcmFwcGVyT2JqZWN0SGFuZGxlT3duZXI6OmZpbmEKICAgICBK
U0M6OldlYWtTZXQ6OmRlYWxsb2NhdGUoSlNDOjpXZWFrSW1wbDo6YXNXZWFrSW1wbChoYW5kbGUu
c2xvdCgpKSk7CiB9CiAKLWJvb2wgSlNBUElXcmFwcGVyT2JqZWN0SGFuZGxlT3duZXI6OmlzUmVh
Y2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2
b2lkKiwgSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqKQorYm9vbCBKU0FQ
SVdyYXBwZXJPYmplY3RIYW5kbGVPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlND
OjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBKU0M6OkFic3RyYWN0U2xvdFZp
c2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKikKIHsKICAgICBKU0M6OkpTQVBJV3JhcHBlck9i
amVjdCogd3JhcHBlck9iamVjdCA9IEpTQzo6anNDYXN0PEpTQzo6SlNBUElXcmFwcGVyT2JqZWN0
Kj4oaGFuZGxlLmdldCgpLmFzQ2VsbCgpKTsKICAgICAvLyBXZSB1c2UgdGhlIEpTR2xvYmFsT2Jq
ZWN0IHdoZW4gcHJvY2Vzc2luZyB3ZWFrIGhhbmRsZXMgdG8gcHJldmVudCB0aGUgc2l0dWF0aW9u
IHdoZXJlIHVzaW5nCiAgICAgLy8gdGhlIHNhbWUgT2JqZWN0aXZlLUMgb2JqZWN0IGluIG11bHRp
cGxlIGdsb2JhbCBvYmplY3RzIGtlZXBzIGFsbCBvZiB0aGUgZ2xvYmFsIG9iamVjdHMgYWxpdmUu
CiAgICAgaWYgKCF3cmFwcGVyT2JqZWN0LT53cmFwcGVkT2JqZWN0KCkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICByZXR1cm4gdmlzaXRvci52bSgpLmhlYXAuaXNNYXJrZWQod3JhcHBlck9i
amVjdC0+c3RydWN0dXJlKCktPmdsb2JhbE9iamVjdCgpKSAmJiB2aXNpdG9yLmNvbnRhaW5zT3Bh
cXVlUm9vdCh3cmFwcGVyT2JqZWN0LT53cmFwcGVkT2JqZWN0KCkpOworICAgIHJldHVybiB2aXNp
dG9yLmlzTWFya2VkKHdyYXBwZXJPYmplY3QtPnN0cnVjdHVyZSgpLT5nbG9iYWxPYmplY3QoKSkg
JiYgdmlzaXRvci5jb250YWluc09wYXF1ZVJvb3Qod3JhcHBlck9iamVjdC0+d3JhcHBlZE9iamVj
dCgpKTsKIH0KIAogbmFtZXNwYWNlIEpTQyB7CkBAIC03Myw2ICs3Myw4IEBAIHN0YXRpYyBKU0Nf
REVDTEFSRV9IT1NUX0ZVTkNUSU9OKGNvbnN0cnUKIHN0YXRpYyBKU0NfREVDTEFSRV9DVVNUT01f
R0VUVEVSKGNhbGxiYWNrR2V0dGVySlNBUElXcmFwcGVyT2JqZWN0Q2FsbGJhY2tPYmplY3QpOwog
c3RhdGljIEpTQ19ERUNMQVJFX0NVU1RPTV9HRVRURVIoc3RhdGljRnVuY3Rpb25HZXR0ZXJKU0FQ
SVdyYXBwZXJPYmplY3RDYWxsYmFja09iamVjdCk7CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTl9X
SVRIX01PRElGSUVSKHRlbXBsYXRlPD4sIEpTQ2FsbGJhY2tPYmplY3Q8SlNBUElXcmFwcGVyT2Jq
ZWN0Pik7CisKIHRlbXBsYXRlIDw+IGNvbnN0IENsYXNzSW5mbyBKU0NhbGxiYWNrT2JqZWN0PEpT
QVBJV3JhcHBlck9iamVjdD46OnNfaW5mbyA9IHsgIkpTQVBJV3JhcHBlck9iamVjdCIsICZCYXNl
OjpzX2luZm8sIG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNDYWxsYmFj
a09iamVjdCkgfTsKIHRlbXBsYXRlIDw+IGNvbnN0IGJvb2wgSlNDYWxsYmFja09iamVjdDxKU0FQ
SVdyYXBwZXJPYmplY3Q+OjpuZWVkc0Rlc3RydWN0aW9uID0gdHJ1ZTsKIApAQCAtMTIzLDcgKzEy
NSw4IEBAIHZvaWQgSlNBUElXcmFwcGVyT2JqZWN0OjpzZXRXcmFwcGVkT2JqZWMKICAgICBtX3dy
YXBwZWRPYmplY3QgPSBbc3RhdGljX2Nhc3Q8aWQ+KHdyYXBwZWRPYmplY3QpIHJldGFpbl07CiB9
CiAKLXZvaWQgSlNBUElXcmFwcGVyT2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwg
SlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2
b2lkIEpTQVBJV3JhcHBlck9iamVjdDo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBW
aXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTQVBJV3JhcHBlck9iamVjdCogdGhpc09iamVjdCA9
IEpTQzo6anNDYXN0PEpTQVBJV3JhcHBlck9iamVjdCo+KGNlbGwpOwogICAgIEJhc2U6OnZpc2l0
Q2hpbGRyZW4oY2VsbCwgdmlzaXRvcik7CkBAIC0xMzMsNiArMTM2LDggQEAgdm9pZCBKU0FQSVdy
YXBwZXJPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSgogICAgICAgICBzY2FuRXh0ZXJuYWxPYmplY3RH
cmFwaCh2aXNpdG9yLnZtKCksIHZpc2l0b3IsIHdyYXBwZWRPYmplY3QpOwogfQogCitERUZJTkVf
VklTSVRfQ0hJTERSRU5fV0lUSF9NT0RJRklFUihKU19FWFBPUlRfUFJJVkFURSwgSlNBUElXcmFw
cGVyT2JqZWN0KTsKKwogdGVtcGxhdGUgPD4KIElzb1N1YnNwYWNlKiBKU0NhbGxiYWNrT2JqZWN0
PEpTQVBJV3JhcHBlck9iamVjdD46OnN1YnNwYWNlRm9ySW1wbChWTSYgdm0sIFN1YnNwYWNlQWNj
ZXNzIG1vZGUpCiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tP
YmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxs
YmFja09iamVjdC5jcHAJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9BUEkvSlNDYWxsYmFja09iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMTcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwNyBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJr
aXQub3JnPgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtNDEsNiArNDEsOSBAQCBzdGF0aWMgSlNDX0RF
Q0xBUkVfQ1VTVE9NX0dFVFRFUihzdGF0aWNGCiBzdGF0aWMgSlNDX0RFQ0xBUkVfQ1VTVE9NX0dF
VFRFUihjYWxsYmFja0dldHRlckpTR2xvYmFsT2JqZWN0Q2FsbGJhY2tPYmplY3QpOwogc3RhdGlj
IEpTQ19ERUNMQVJFX0NVU1RPTV9HRVRURVIoc3RhdGljRnVuY3Rpb25HZXR0ZXJKU0dsb2JhbE9i
amVjdENhbGxiYWNrT2JqZWN0KTsKIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOX1dJVEhfTU9ESUZJ
RVIodGVtcGxhdGU8PiwgSlNDYWxsYmFja09iamVjdDxKU05vbkZpbmFsT2JqZWN0Pik7CitERUZJ
TkVfVklTSVRfQ0hJTERSRU5fV0lUSF9NT0RJRklFUih0ZW1wbGF0ZTw+LCBKU0NhbGxiYWNrT2Jq
ZWN0PEpTR2xvYmFsT2JqZWN0Pik7CisKIC8vIERlZmluZSB0aGUgdHdvIHR5cGVzIG9mIEpTQ2Fs
bGJhY2tPYmplY3RzIHdlIHN1cHBvcnQuCiB0ZW1wbGF0ZSA8PiBjb25zdCBDbGFzc0luZm8gSlND
YWxsYmFja09iamVjdDxKU05vbkZpbmFsT2JqZWN0Pjo6c19pbmZvID0geyAiQ2FsbGJhY2tPYmpl
Y3QiLCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxF
KEpTQ2FsbGJhY2tPYmplY3QpIH07CiB0ZW1wbGF0ZSA8PiBjb25zdCBDbGFzc0luZm8gSlNDYWxs
YmFja09iamVjdDxKU0dsb2JhbE9iamVjdD46OnNfaW5mbyA9IHsgIkNhbGxiYWNrR2xvYmFsT2Jq
ZWN0IiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJM
RShKU0NhbGxiYWNrT2JqZWN0KSB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9K
U0NhbGxiYWNrT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQ
SS9KU0NhbGxiYWNrT2JqZWN0LmgJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwNyBFcmljIFNlaWRlbCA8ZXJpY0B3
ZWJraXQub3JnPgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtNjksNyArNjksMTAgQEAgcHVibGljOgog
ICAgICAgICBtX3ByaXZhdGVQcm9wZXJ0aWVzLT5kZWxldGVQcml2YXRlUHJvcGVydHkocHJvcGVy
dHlOYW1lKTsKICAgICB9CiAKLSAgICB2b2lkIHZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZp
c2l0b3IpCisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKKworICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFZpc2l0b3I+CisgICAgdm9pZCB2aXNpdENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiAg
ICAgewogICAgICAgICBKU1ByaXZhdGVQcm9wZXJ0eU1hcCogcHJvcGVydGllcyA9IG1fcHJpdmF0
ZVByb3BlcnRpZXMuZ2V0KCk7CiAgICAgICAgIGlmICghcHJvcGVydGllcykKQEAgLTEwMyw3ICsx
MDYsOCBAQCBwdWJsaWM6CiAgICAgICAgICAgICBtX3Byb3BlcnR5TWFwLnJlbW92ZShwcm9wZXJ0
eU5hbWUuaW1wbCgpKTsKICAgICAgICAgfQogCi0gICAgICAgIHZvaWQgdmlzaXRDaGlsZHJlbihT
bG90VmlzaXRvciYgdmlzaXRvcikKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4K
KyAgICAgICAgdm9pZCB2aXNpdENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiAgICAgICAgIHsK
ICAgICAgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fbG9jayk7CiAgICAgICAgICAgICBmb3Ig
KGF1dG8mIHBhaXIgOiBtX3Byb3BlcnR5TWFwKSB7CkBAIC0yMTYsMTMgKzIyMCw3IEBAIHByaXZh
dGU6CiAgICAgc3RhdGljIENhbGxEYXRhIGdldENvbnN0cnVjdERhdGEoSlNDZWxsKik7CiAgICAg
c3RhdGljIENhbGxEYXRhIGdldENhbGxEYXRhKEpTQ2VsbCopOwogCi0gICAgc3RhdGljIHZvaWQg
dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQotICAgIHsK
LSAgICAgICAgSlNDYWxsYmFja09iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0NhbGxiYWNr
T2JqZWN0Kj4oY2VsbCk7Ci0gICAgICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoKHN0YXRp
Y19jYXN0PFBhcmVudCo+KHRoaXNPYmplY3QpKSwgSlNDYWxsYmFja09iamVjdDxQYXJlbnQ+Ojpp
bmZvKCkpOwotICAgICAgICBQYXJlbnQ6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRv
cik7Ci0gICAgICAgIHRoaXNPYmplY3QtPm1fY2FsbGJhY2tPYmplY3REYXRhLT52aXNpdENoaWxk
cmVuKHZpc2l0b3IpOwotICAgIH0KKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAg
dm9pZCBpbml0KEpTR2xvYmFsT2JqZWN0Kik7CiAgCkBAIC0yNDMsNiArMjQxLDE2IEBAIHByaXZh
dGU6CiAgICAgY29uc3QgQ2xhc3NJbmZvKiBtX2NsYXNzSW5mbyB7IG51bGxwdHIgfTsKIH07CiAK
K3RlbXBsYXRlIDxjbGFzcyBQYXJlbnQ+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9p
ZCBKU0NhbGxiYWNrT2JqZWN0PFBhcmVudD46OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2Vs
bCwgVmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBKU0NhbGxiYWNrT2JqZWN0KiB0aGlzT2JqZWN0
ID0ganNDYXN0PEpTQ2FsbGJhY2tPYmplY3QqPihjZWxsKTsKKyAgICBBU1NFUlRfR0NfT0JKRUNU
X0lOSEVSSVRTKChzdGF0aWNfY2FzdDxQYXJlbnQqPih0aGlzT2JqZWN0KSksIEpTQ2FsbGJhY2tP
YmplY3Q8UGFyZW50Pjo6aW5mbygpKTsKKyAgICBQYXJlbnQ6OnZpc2l0Q2hpbGRyZW4odGhpc09i
amVjdCwgdmlzaXRvcik7CisgICAgdGhpc09iamVjdC0+bV9jYWxsYmFja09iamVjdERhdGEtPnZp
c2l0Q2hpbGRyZW4odmlzaXRvcik7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAvLyBpbmNs
dWRlIHRoZSBhY3R1YWwgdGVtcGxhdGUgY2xhc3MgaW1wbGVtZW50YXRpb24KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNNYW5hZ2VkVmFsdWUubW0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU01hbmFnZWRWYWx1ZS5tbQkocmV2aXNpb24gMjcyOTAy
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU01hbmFnZWRWYWx1ZS5tbQkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC00Miw3ICs0Miw3IEBACiBjbGFzcyBKU01hbmFnZWRWYWx1ZUhhbmRsZU93
bmVyIGZpbmFsIDogcHVibGljIEpTQzo6V2Vha0hhbmRsZU93bmVyIHsKIHB1YmxpYzoKICAgICB2
b2lkIGZpbmFsaXplKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQpIGZp
bmFsOwotICAgIGJvb2wgaXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlND
OjpVbmtub3duPiwgdm9pZCogY29udGV4dCwgSlNDOjpTbG90VmlzaXRvciYsIGNvbnN0IGNoYXIq
KikgZmluYWw7CisgICAgYm9vbCBpc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRs
ZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0LCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3Im
LCBjb25zdCBjaGFyKiopIGZpbmFsOwogfTsKIAogc3RhdGljIEpTTWFuYWdlZFZhbHVlSGFuZGxl
T3duZXImIG1hbmFnZWRWYWx1ZUhhbmRsZU93bmVyKCkKQEAgLTE4MCw3ICsxODAsNyBAQCBAaW50
ZXJmYWNlIEpTTWFuYWdlZFZhbHVlIChQcml2YXRlTWV0aG9kCiAtICh2b2lkKWRpc2Nvbm5lY3RW
YWx1ZTsKIEBlbmQKIAotYm9vbCBKU01hbmFnZWRWYWx1ZUhhbmRsZU93bmVyOjppc1JlYWNoYWJs
ZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0
LCBKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQorYm9vbCBK
U01hbmFnZWRWYWx1ZUhhbmRsZU93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6
OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0LCBKU0M6OkFic3RyYWN0U2xvdFZp
c2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCiB7CiAgICAgaWYgKFVOTElLRUxZ
KHJlYXNvbikpCiAgICAgICAgICpyZWFzb24gPSAiSlNNYW5hZ2VkVmFsdWUgaXMgb3BhcXVlIHJv
b3QiOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU01hcmtpbmdDb25zdHJhaW50
UHJpdmF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU01h
cmtpbmdDb25zdHJhaW50UHJpdmF0ZS5jcHAJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9BUEkvSlNNYXJraW5nQ29uc3RyYWludFByaXZhdGUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zNiw3ICszNiw3IEBAIG5hbWVzcGFjZSB7CiBBdG9taWM8dW5zaWduZWQ+IGNv
bnN0cmFpbnRDb3VudGVyOwogCiBzdHJ1Y3QgTWFya2VyIDogSlNNYXJrZXIgewotICAgIFNsb3RW
aXNpdG9yKiB2aXNpdG9yOworICAgIEFic3RyYWN0U2xvdFZpc2l0b3IqIHZpc2l0b3I7CiB9Owog
CiBib29sIGlzTWFya2VkKEpTTWFya2VyUmVmIG1hcmtlclJlZiwgSlNPYmplY3RSZWYgb2JqZWN0
UmVmKQpAQCAtNDQsNyArNDQsNyBAQCBib29sIGlzTWFya2VkKEpTTWFya2VyUmVmIG1hcmtlclJl
ZiwgSlNPCiAgICAgaWYgKCFvYmplY3RSZWYpCiAgICAgICAgIHJldHVybiB0cnVlOyAvLyBOdWxs
IGlzIGFuIGltbW9ydGFsIG9iamVjdC4KICAgICAKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8TWFy
a2VyKj4obWFya2VyUmVmKS0+dmlzaXRvci0+dm0oKS5oZWFwLmlzTWFya2VkKHRvSlMob2JqZWN0
UmVmKSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PE1hcmtlcio+KG1hcmtlclJlZiktPnZpc2l0
b3ItPmlzTWFya2VkKHRvSlMob2JqZWN0UmVmKSk7CiB9CiAKIHZvaWQgbWFyayhKU01hcmtlclJl
ZiBtYXJrZXJSZWYsIEpTT2JqZWN0UmVmIG9iamVjdFJlZikKQEAgLTczLDE0ICs3MywxNCBAQCB2
b2lkIEpTQ29udGV4dEdyb3VwQWRkTWFya2luZ0NvbnN0cmFpbnQoCiAgICAgYXV0byBjb25zdHJh
aW50ID0gbWFrZVVuaXF1ZTxTaW1wbGVNYXJraW5nQ29uc3RyYWludD4oCiAgICAgICAgIHRvQ1N0
cmluZygiQW1jIiwgY29uc3RyYWludEluZGV4LCAiKCIsIFJhd1BvaW50ZXIoYml0d2lzZV9jYXN0
PHZvaWQqPihjb25zdHJhaW50Q2FsbGJhY2spKSwgIikiKSwKICAgICAgICAgdG9DU3RyaW5nKCJB
UEkgTWFya2luZyBDb25zdHJhaW50ICMiLCBjb25zdHJhaW50SW5kZXgsICIgKCIsIFJhd1BvaW50
ZXIoYml0d2lzZV9jYXN0PHZvaWQqPihjb25zdHJhaW50Q2FsbGJhY2spKSwgIiwgIiwgUmF3UG9p
bnRlcih1c2VyRGF0YSksICIpIiksCi0gICAgICAgIFtjb25zdHJhaW50Q2FsbGJhY2ssIHVzZXJE
YXRhXSAoU2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsKKyAgICAgICAgTUFLRV9NQVJLSU5HX0NPTlNU
UkFJTlRfRVhFQ1VUT1JfUEFJUigoW2NvbnN0cmFpbnRDYWxsYmFjaywgdXNlckRhdGFdIChBYnN0
cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKSB7CiAgICAgICAgICAgICBNYXJrZXIgbWFya2VyOwog
ICAgICAgICAgICAgbWFya2VyLklzTWFya2VkID0gaXNNYXJrZWQ7CiAgICAgICAgICAgICBtYXJr
ZXIuTWFyayA9IG1hcms7CiAgICAgICAgICAgICBtYXJrZXIudmlzaXRvciA9ICZ2aXNpdG9yOwog
ICAgICAgICAgICAgCiAgICAgICAgICAgICBjb25zdHJhaW50Q2FsbGJhY2soJm1hcmtlciwgdXNl
ckRhdGEpOwotICAgICAgICB9LAorICAgICAgICB9KSksCiAgICAgICAgIHZvbGF0aWxpdHksCiAg
ICAgICAgIENvbnN0cmFpbnRDb25jdXJyZW5jeTo6U2VxdWVudGlhbCk7CiAgICAgCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmlydHVhbE1hY2hpbmUubW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1ZpcnR1YWxNYWNoaW5lLm1tCShyZXZpc2lv
biAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmlydHVhbE1hY2hpbmUu
bW0JKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0zMTUsNyArMzE1LDcgQEAgKyAodm9pZClzZXRDcmFzaE9u
Vk1DcmVhdGlvbjooQk9PTClzaG91bAogCiBAZW5kCiAKLXN0YXRpYyB2b2lkIHNjYW5FeHRlcm5h
bE9iamVjdEdyYXBoKEpTQzo6Vk0mIHZtLCBKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yLCB2b2lk
KiByb290LCBib29sIGxvY2tBY3F1aXJlZCkKK3N0YXRpYyB2b2lkIHNjYW5FeHRlcm5hbE9iamVj
dEdyYXBoKEpTQzo6Vk0mIHZtLCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIHZv
aWQqIHJvb3QsIGJvb2wgbG9ja0FjcXVpcmVkKQogewogICAgIEBhdXRvcmVsZWFzZXBvb2wgewog
ICAgICAgICBKU1ZpcnR1YWxNYWNoaW5lICp2aXJ0dWFsTWFjaGluZSA9IFtKU1ZNV3JhcHBlckNh
Y2hlIHdyYXBwZXJGb3JKU0NvbnRleHRHcm91cFJlZjp0b1JlZigmdm0pXTsKQEAgLTM0NywxMyAr
MzQ3LDEzIEBAIHN0YXRpYyB2b2lkIHNjYW5FeHRlcm5hbE9iamVjdEdyYXBoKEpTQzoKICAgICB9
CiB9CiAKLXZvaWQgc2NhbkV4dGVybmFsT2JqZWN0R3JhcGgoSlNDOjpWTSYgdm0sIEpTQzo6U2xv
dFZpc2l0b3ImIHZpc2l0b3IsIHZvaWQqIHJvb3QpCit2b2lkIHNjYW5FeHRlcm5hbE9iamVjdEdy
YXBoKEpTQzo6Vk0mIHZtLCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIHZvaWQq
IHJvb3QpCiB7CiAgICAgYm9vbCBsb2NrQWNxdWlyZWQgPSBmYWxzZTsKICAgICBzY2FuRXh0ZXJu
YWxPYmplY3RHcmFwaCh2bSwgdmlzaXRvciwgcm9vdCwgbG9ja0FjcXVpcmVkKTsKIH0KIAotdm9p
ZCBzY2FuRXh0ZXJuYWxSZW1lbWJlcmVkU2V0KEpTQzo6Vk0mIHZtLCBKU0M6OlNsb3RWaXNpdG9y
JiB2aXNpdG9yKQordm9pZCBzY2FuRXh0ZXJuYWxSZW1lbWJlcmVkU2V0KEpTQzo6Vk0mIHZtLCBK
U0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgQGF1dG9yZWxlYXNlcG9v
bCB7CiAgICAgICAgIEpTVmlydHVhbE1hY2hpbmUgKnZpcnR1YWxNYWNoaW5lID0gW0pTVk1XcmFw
cGVyQ2FjaGUgd3JhcHBlckZvckpTQ29udGV4dEdyb3VwUmVmOnRvUmVmKCZ2bSldOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1ZpcnR1YWxNYWNoaW5lSW50ZXJuYWwuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmlydHVhbE1hY2hpbmVJbnRl
cm5hbC5oCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pT
VmlydHVhbE1hY2hpbmVJbnRlcm5hbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMyLDcgKzMyLDcg
QEAKIAogbmFtZXNwYWNlIEpTQyB7CiBjbGFzcyBWTTsKLWNsYXNzIFNsb3RWaXNpdG9yOworY2xh
c3MgQWJzdHJhY3RTbG90VmlzaXRvcjsKIH0KIAogI2lmIGRlZmluZWQoX19PQkpDX18pCkBAIC01
NCw4ICs1NCw4IEBAIEpTQ29udGV4dEdyb3VwUmVmIGdldEdyb3VwRnJvbVZpcnR1YWxNYWMKIAog
I2VuZGlmIC8vIGRlZmluZWQoX19PQkpDX18pCiAKLXZvaWQgc2NhbkV4dGVybmFsT2JqZWN0R3Jh
cGgoSlNDOjpWTSYsIEpTQzo6U2xvdFZpc2l0b3ImLCB2b2lkKiByb290KTsKLXZvaWQgc2NhbkV4
dGVybmFsUmVtZW1iZXJlZFNldChKU0M6OlZNJiwgSlNDOjpTbG90VmlzaXRvciYpOwordm9pZCBz
Y2FuRXh0ZXJuYWxPYmplY3RHcmFwaChKU0M6OlZNJiwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9y
Jiwgdm9pZCogcm9vdCk7Cit2b2lkIHNjYW5FeHRlcm5hbFJlbWVtYmVyZWRTZXQoSlNDOjpWTSYs
IEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpOwogCiAjZW5kaWYgLy8gSlNDX09CSkNfQVBJX0VO
QUJMRUQKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9NYXJrZWRKU1ZhbHVlUmVm
QXJyYXkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvTWFya2Vk
SlNWYWx1ZVJlZkFycmF5LmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL0FQSS9NYXJrZWRKU1ZhbHVlUmVmQXJyYXkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAtMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ2LDcg
KzQ2LDggQEAgTWFya2VkSlNWYWx1ZVJlZkFycmF5Ojp+TWFya2VkSlNWYWx1ZVJlZgogICAgICAg
ICByZW1vdmUoKTsKIH0KIAotdm9pZCBNYXJrZWRKU1ZhbHVlUmVmQXJyYXk6OnZpc2l0QWdncmVn
YXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3Zv
aWQgTWFya2VkSlNWYWx1ZVJlZkFycmF5Ojp2aXNpdEFnZ3JlZ2F0ZShWaXNpdG9yJiB2aXNpdG9y
KQogewogICAgIEpTVmFsdWVSZWYqIGJ1ZmZlciA9IGRhdGEoKTsKICAgICBmb3IgKHVuc2lnbmVk
IGluZGV4ID0gMDsgaW5kZXggPCBtX3NpemU7ICsraW5kZXgpIHsKQEAgLTYyLDQgKzYzLDcgQEAg
dm9pZCBNYXJrZWRKU1ZhbHVlUmVmQXJyYXk6OnZpc2l0QWdncmVnYQogICAgIH0KIH0KIAordGVt
cGxhdGUgdm9pZCBNYXJrZWRKU1ZhbHVlUmVmQXJyYXk6OnZpc2l0QWdncmVnYXRlKEFic3RyYWN0
U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgTWFya2VkSlNWYWx1ZVJlZkFycmF5Ojp2aXNp
dEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYpOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvTWFya2VkSlNWYWx1ZVJlZkFycmF5LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9NYXJrZWRKU1ZhbHVlUmVmQXJyYXkuaAko
cmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9NYXJrZWRKU1Zh
bHVlUmVmQXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDIwLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02Miw3ICs2Miw3IEBAIHB1YmxpYzoKICAgICAg
ICAgcmV0dXJuIG1faW5saW5lQnVmZmVyOwogICAgIH0KIAotICAgIHZvaWQgdmlzaXRBZ2dyZWdh
dGUoU2xvdFZpc2l0b3ImKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIHZp
c2l0QWdncmVnYXRlKFZpc2l0b3ImKTsKIAogcHJpdmF0ZToKICAgICB1bnNpZ25lZCBtX3NpemU7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNBUElXcmFwcGVyR2xvYmFs
T2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIv
SlNBUElXcmFwcGVyR2xvYmFsT2JqZWN0LmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQVBJV3JhcHBlckdsb2JhbE9iamVjdC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTU5LDYgKzU5LDggQEAgc3RhdGljIEpTQ19ERUNMQVJFX0hPU1RfRlVO
Q1RJT04oY29uc3RydQogc3RhdGljIEpTQ19ERUNMQVJFX0NVU1RPTV9HRVRURVIoY2FsbGJhY2tH
ZXR0ZXJKU0FQSVdyYXBwZXJHbG9iYWxPYmplY3RDYWxsYmFja09iamVjdCk7CiBzdGF0aWMgSlND
X0RFQ0xBUkVfQ1VTVE9NX0dFVFRFUihzdGF0aWNGdW5jdGlvbkdldHRlckpTQVBJV3JhcHBlckds
b2JhbE9iamVjdENhbGxiYWNrT2JqZWN0KTsKIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOX1dJVEhf
TU9ESUZJRVIodGVtcGxhdGU8PiwgSlNDYWxsYmFja09iamVjdDxKU0FQSVdyYXBwZXJHbG9iYWxP
YmplY3Q+KTsKKwogdGVtcGxhdGUgPD4gY29uc3QgQ2xhc3NJbmZvIEpTQ2FsbGJhY2tPYmplY3Q8
SlNBUElXcmFwcGVyR2xvYmFsT2JqZWN0Pjo6c19pbmZvID0geyAiSlNBUElXcmFwcGVyR2xvYmFs
T2JqZWN0IiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9U
QUJMRShKU0NhbGxiYWNrT2JqZWN0KSB9OwogdGVtcGxhdGU8PiBjb25zdCBib29sIEpTQ2FsbGJh
Y2tPYmplY3Q8SlNBUElXcmFwcGVyR2xvYmFsT2JqZWN0Pjo6bmVlZHNEZXN0cnVjdGlvbiA9IHRy
dWU7CiAKQEAgLTE0NCw5ICsxNDYsNCBAQCB2b2lkIEpTQVBJV3JhcHBlckdsb2JhbE9iamVjdDo6
ZmluaXNoQ3JlCiAgICAgV2Vha1NldDo6YWxsb2NhdGUodGhpcywganNBUElXcmFwcGVyR2xvYmFs
T2JqZWN0SGFuZGxlT3duZXIoKSwgMCk7IC8vIEJhbGFuY2VkIGluIEpTQVBJV3JhcHBlckdsb2Jh
bE9iamVjdEhhbmRsZU93bmVyOjpmaW5hbGl6ZS4KIH0KIAotdm9pZCBKU0FQSVdyYXBwZXJHbG9i
YWxPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBKU0M6OlNsb3RWaXNpdG9yJiB2
aXNpdG9yKQotewotICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4oY2VsbCwgdmlzaXRvcik7Ci19Ci0K
IH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGli
L0pTQVBJV3JhcHBlckdsb2JhbE9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvZ2xpYi9KU0FQSVdyYXBwZXJHbG9iYWxPYmplY3QuaAkocmV2aXNpb24gMjcy
OTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQVBJV3JhcHBlckdsb2Jh
bE9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw3ICszOSw2IEBAIHB1YmxpYzoKICAgICBz
dGF0aWMgdm9pZCBzdWJzcGFjZUZvcihWTSYpIHsgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsgfQogCiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOwotICAgIHN0YXRpYyB2b2lkIHZp
c2l0Q2hpbGRyZW4oSlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpOwogCiAgICAgSlNDR0xpYldy
YXBwZXJPYmplY3QqIHdyYXBwZWRPYmplY3QoKSBjb25zdCB7IHJldHVybiBtX3dyYXBwZWRPYmpl
Y3Q7IH0KICAgICB2b2lkIHNldFdyYXBwZWRPYmplY3QoSlNDR0xpYldyYXBwZXJPYmplY3QqIHdy
YXBwZWRPYmplY3QpIHsgbV93cmFwcGVkT2JqZWN0ID0gd3JhcHBlZE9iamVjdDsgfQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQVBJV3JhcHBlck9iamVjdEdMaWIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0FQSVdyYXBw
ZXJPYmplY3RHTGliLmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL0FQSS9nbGliL0pTQVBJV3JhcHBlck9iamVjdEdMaWIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSlNBUElXcmFw
cGVyT2JqZWN0LmgiCiAKKyNpbmNsdWRlICJBYnN0cmFjdFNsb3RWaXNpdG9yLmgiCiAjaW5jbHVk
ZSAiSlNDR0xpYldyYXBwZXJPYmplY3QuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5j
bHVkZSAiSlNDYWxsYmFja09iamVjdC5oIgpAQCAtMzYsNyArMzcsNyBAQAogY2xhc3MgSlNBUElX
cmFwcGVyT2JqZWN0SGFuZGxlT3duZXIgZmluYWwgOiBwdWJsaWMgSlNDOjpXZWFrSGFuZGxlT3du
ZXIgewogcHVibGljOgogICAgIHZvaWQgZmluYWxpemUoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3du
Piwgdm9pZCopIGZpbmFsOwotICAgIGJvb2wgaXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlND
OjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCwgSlNDOjpTbG90VmlzaXRvciYs
IGNvbnN0IGNoYXIqKikgZmluYWw7CisgICAgYm9vbCBpc1JlYWNoYWJsZUZyb21PcGFxdWVSb290
cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0LCBKU0M6OkFic3RyYWN0
U2xvdFZpc2l0b3ImLCBjb25zdCBjaGFyKiopIGZpbmFsOwogfTsKIAogc3RhdGljIEpTQVBJV3Jh
cHBlck9iamVjdEhhbmRsZU93bmVyKiBqc0FQSVdyYXBwZXJPYmplY3RIYW5kbGVPd25lcigpCkBA
IC01NSw3ICs1Niw3IEBAIHZvaWQgSlNBUElXcmFwcGVyT2JqZWN0SGFuZGxlT3duZXI6OmZpbmEK
ICAgICBKU0M6OldlYWtTZXQ6OmRlYWxsb2NhdGUoSlNDOjpXZWFrSW1wbDo6YXNXZWFrSW1wbCho
YW5kbGUuc2xvdCgpKSk7CiB9CiAKLWJvb2wgSlNBUElXcmFwcGVyT2JqZWN0SGFuZGxlT3duZXI6
OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFu
ZGxlLCB2b2lkKiwgSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqKQorYm9v
bCBKU0FQSVdyYXBwZXJPYmplY3RIYW5kbGVPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9v
dHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBKU0M6OkFic3RyYWN0
U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKikKIHsKICAgICBKU0M6OkpTQVBJV3Jh
cHBlck9iamVjdCogd3JhcHBlck9iamVjdCA9IEpTQzo6anNDYXN0PEpTQzo6SlNBUElXcmFwcGVy
T2JqZWN0Kj4oaGFuZGxlLmdldCgpLmFzQ2VsbCgpKTsKICAgICAvLyBXZSB1c2UgdGhlIEpTR2xv
YmFsT2JqZWN0IHdoZW4gcHJvY2Vzc2luZyB3ZWFrIGhhbmRsZXMgdG8gcHJldmVudCB0aGUgc2l0
dWF0aW9uIHdoZXJlIHVzaW5nCkBAIC03Miw2ICs3Myw4IEBAIHN0YXRpYyBKU0NfREVDTEFSRV9I
T1NUX0ZVTkNUSU9OKGNvbnN0cnUKIHN0YXRpYyBKU0NfREVDTEFSRV9DVVNUT01fR0VUVEVSKGNh
bGxiYWNrR2V0dGVySlNBUElXcmFwcGVyT2JqZWN0Q2FsbGJhY2tPYmplY3QpOwogc3RhdGljIEpT
Q19ERUNMQVJFX0NVU1RPTV9HRVRURVIoc3RhdGljRnVuY3Rpb25HZXR0ZXJKU0FQSVdyYXBwZXJP
YmplY3RDYWxsYmFja09iamVjdCk7CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTl9XSVRIX01PRElG
SUVSKHRlbXBsYXRlPD4sIEpTQ2FsbGJhY2tPYmplY3Q8SlNBUElXcmFwcGVyT2JqZWN0Pik7CisK
IHRlbXBsYXRlIDw+IGNvbnN0IENsYXNzSW5mbyBKU0NhbGxiYWNrT2JqZWN0PEpTQVBJV3JhcHBl
ck9iamVjdD46OnNfaW5mbyA9IHsgIkpTQVBJV3JhcHBlck9iamVjdCIsICZCYXNlOjpzX2luZm8s
IG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNDYWxsYmFja09iamVjdCkg
fTsKIHRlbXBsYXRlPD4gY29uc3QgYm9vbCBKU0NhbGxiYWNrT2JqZWN0PEpTQVBJV3JhcHBlck9i
amVjdD46Om5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOwogCkBAIC0xNTUsOSArMTU4LDEyIEBAIHZv
aWQgSlNBUElXcmFwcGVyT2JqZWN0OjpzZXRXcmFwcGVkT2JqZWMKICAgICBtX3dyYXBwZWRPYmpl
Y3QgPSB3cmFwcGVkT2JqZWN0OwogfQogCi12b2lkIEpTQVBJV3JhcHBlck9iamVjdDo6dmlzaXRD
aGlsZHJlbihKU0NlbGwqIGNlbGwsIEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0
ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0FQSVdyYXBwZXJPYmplY3Q6OnZpc2l0Q2hpbGRy
ZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBCYXNlOjp2aXNp
dENoaWxkcmVuKGNlbGwsIHZpc2l0b3IpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU5fV0lU
SF9NT0RJRklFUihKU19FWFBPUlRfUFJJVkFURSwgSlNBUElXcmFwcGVyT2JqZWN0KTsKKwogfSAv
LyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNp
b24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTExNTgsNiArMTE1OCw3IEBA
CiAJCTY1QjgzOTJFMUJBQ0FEMzYwMDQ0RTgyNCAvKiBDYWNoZWRSZWNvdmVyeS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjVCODM5MkMxQkFDQTkyQTAw
NDRFODI0IC8qIENhY2hlZFJlY292ZXJ5LmggKi87IH07CiAJCTZBMzhDRkFBMUUzMkI1QUIwMDYw
MjA2RiAvKiBBc3luY1N0YWNrVHJhY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDZBMzhDRkE4MUUzMkI1OEIwMDYwMjA2RiAvKiBBc3luY1N0YWNrVHJh
Y2UuaCAqLzsgfTsKIAkJNkFEMkNCNEQxOUI5MTQwMTAwMDY1NzE5IC8qIERlYnVnZ2VyRXZhbEVu
YWJsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZB
RDJDQjRDMTlCOTE0MDEwMDA2NTcxOSAvKiBEZWJ1Z2dlckV2YWxFbmFibGVyLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNkJDQ0VDMDQyNUQxRkEy
NzAwMEYzOTFEIC8qIFZlcmlmaWVyU2xvdFZpc2l0b3JJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2QkNDRUMwMzI1RDFGQTI3MDAwRjM5MUQg
LyogVmVyaWZpZXJTbG90VmlzaXRvcklubGluZXMuaCAqLzsgfTsKIAkJNzAxMTNENEMxQThEQjA5
MzAwMzg0OEM0IC8qIEl0ZXJhdG9yT3BlcmF0aW9ucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzAxMTNENEExQThEQjA5MzAwMzg0OEM0IC8qIEl0ZXJh
dG9yT3BlcmF0aW9ucy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTcwMTNDQThDMUI0OTFBOTQwMENBRTYxMyAvKiBKU01pY3JvdGFzay5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzAxM0NBOEExQjQ5MUE5
NDAwQ0FFNjEzIC8qIEpTTWljcm90YXNrLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzA1QjQxQUMxQTZFNTAxRTAwNzE2NzU3IC8qIFN5bWJvbC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzA1QjQxQTQx
QTZFNTAxRTAwNzE2NzU3IC8qIFN5bWJvbC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CkBAIC0xOTIwLDYgKzE5MjEsNyBAQAogCQlFM0ZGNzUzMzFEOUNF
QTE4MDBDN0UxNkQgLyogRE9NSklUR2V0dGVyU2V0dGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFM0ZGNzUyRjFEOUNFQTEyMDBDN0UxNkQgLyogRE9N
SklUR2V0dGVyU2V0dGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJRTQ5REMxNkMxMkVGMjk0RTAwMTg0QTFGIC8qIFNvdXJjZVByb3ZpZGVyQ2Fj
aGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0OURD
MTUxMTJFRjI3MjIwMDE4NEExRiAvKiBTb3VyY2VQcm92aWRlckNhY2hlLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTQ5REMxNkQxMkVGMjk1MzAw
MTg0QTFGIC8qIFNvdXJjZVByb3ZpZGVyQ2FjaGVJdGVtLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDlEQzE0OTEyRUYyNjFBMDAxODRBMUYgLyogU291
cmNlUHJvdmlkZXJDYWNoZUl0ZW0uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OworCQlGRTA0MTU1MzI1MkVDMDczMDA5MUVCNUQgLyogU2xvdFZpc2l0b3JN
YWNyb3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZF
MDQxNTUyMjUyRUMwNzMwMDkxRUI1RCAvKiBTbG90VmlzaXRvck1hY3Jvcy5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUZFMDVGQUZEMUZFNENFREEw
MDA5MzIzMCAvKiBEZXByZWNhdGVkSW5zcGVjdG9yVmFsdWVzLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk5MkQ2QTExMUZCRDQ5MUQwMDAyNDVGNCAv
KiBEZXByZWNhdGVkSW5zcGVjdG9yVmFsdWVzLmNwcCAqLzsgfTsKIAkJRkUwODZCQ0EyMTIzREVG
QjAwM0YyOTI5IC8qIEVudHJ5RnJhbWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEZFMDg2QkM5MjEyM0RFRkEwMDNGMjkyOSAvKiBFbnRyeUZyYW1lLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRkUwRDRB
MDYxQUI4REQwQTAwMkY1NEJGIC8qIEV4ZWN1dGlvblRpbWVMaW1pdFRlc3QuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUwRDRBMDQxQUI4REQwQTAw
MkY1NEJGIC8qIEV4ZWN1dGlvblRpbWVMaW1pdFRlc3QuY3BwICovOyB9OwpAQCAtMTk0Miw5ICsx
OTQ0LDExIEBACiAJCUZFMUUyQzNGMjI0MERENTgwMEY2QjcyOSAvKiBNYWNyb0Fzc2VtYmxlckFS
TTY0RS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUx
RTJDM0UyMjQwRDMwQjAwRjZCNzI5IC8qIE1hY3JvQXNzZW1ibGVyQVJNNjRFLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRkUxRTJDNDAyMjQwREQ2
MjAwRjZCNzI5IC8qIEFSTTY0RUFzc2VtYmxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRkUxRTJDM0QyMjQwRDJGNjAwRjZCNzI5IC8qIEFSTTY0RUFz
c2VtYmxlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCUZFMjBDRTlFMTVGMDRBOTUwMERGMzQzMCAvKiBMTEludENMb29wLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTIwQ0U5QzE1RjA0QTk1MDBERjM0
MzAgLyogTExJbnRDTG9vcC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CisJCUZFMjg3RDAyMjUyRkIyRTgwMEQ3MjNGOSAvKiBWZXJpZmllclNsb3RWaXNp
dG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTI4
N0QwMTI1MkZCMkU4MDBENzIzRjkgLyogVmVyaWZpZXJTbG90VmlzaXRvci5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUZFMkE4NzYwMUYwMjM4MTYw
MEVCMzFCMiAvKiBNaW5pbXVtUmVzZXJ2ZWRab25lU2l6ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUyQTg3NUYxRjAyMzgxNjAwRUIzMUIyIC8qIE1p
bmltdW1SZXNlcnZlZFpvbmVTaXplLmggKi87IH07CiAJCUZFMzAyMkQzMUUzRDczQTUwMEJBQzQ5
MyAvKiBTaWdpbGxDcmFzaEFuYWx5emVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBGRTMwMjJEMTFFM0Q3Mzk2MDBCQUM0OTMgLyogU2lnaWxsQ3Jhc2hB
bmFseXplci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCUZFMzAyMkQ3MUU0Mjg1NzMwMEJBQzQ5MyAvKiBWTUluc3BlY3Rvci5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUzMDIyRDUxRTQyODU2NzAwQkFD
NDkzIC8qIFZNSW5zcGVjdG9yLmggKi87IH07CisJCUZFMzM2QjUzMjVEQjQ5N0QwMDk4RjAzNCAv
KiBNYXJraW5nQ29uc3RyYWludEV4ZWN1dG9yUGFpci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUzMzZCNTIyNURCNDk3RDAwOThGMDM0IC8qIE1hcmtp
bmdDb25zdHJhaW50RXhlY3V0b3JQYWlyLmggKi87IH07CiAJCUZFMzQyMjEyMUQ2QjgxQzMwMDMy
QkU4OCAvKiBUaHJvd1Njb3BlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBGRTM0MjIxMTFENkI4MThDMDAzMkJFODggLyogVGhyb3dTY29wZS5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUZFMzRFRTIxMjQz
OThBQUUwMEFBMkU3QyAvKiBFbnN1cmVTdGlsbEFsaXZlSGVyZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUzNEVFMjAyNDM5OEE5QTAwQUEyRTdDIC8q
IEVuc3VyZVN0aWxsQWxpdmVIZXJlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJRkUzODQyMzMyMzI0RDUxQjAwOURENDQ1IC8qIE9wdGlvbnNMaXN0
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTM4NDIz
MTIzMjRENTFCMDA5REQ0NDUgLyogT3B0aW9uc0xpc3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMTk4MCw2ICsxOTg0LDggQEAKIAkJRkU4MEMx
OTcxRDc3NUNERDAwODUxMEMwIC8qIENhdGNoU2NvcGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFODBDMTk2MUQ3NzVCMjcwMDg1MTBDMCAvKiBDYXRj
aFNjb3BlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJRkU4REU1NEIyM0FDMURBRDAwNUM5MTQyIC8qIENhY2hlYWJsZUlkZW50aWZpZXIuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFOERFNTRBMjNBQzFE
QUQwMDVDOTE0MiAvKiBDYWNoZWFibGVJZGVudGlmaWVyLmggKi87IH07CiAJCUZFOERFNTREMjNB
QzFFODYwMDVDOTE0MiAvKiBDYWNoZWFibGVJZGVudGlmaWVySW5saW5lcy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkU4REU1NEMyM0FDMUU4NjAwNUM5
MTQyIC8qIENhY2hlYWJsZUlkZW50aWZpZXJJbmxpbmVzLmggKi87IH07CisJCUZFOTEyQjRGMjUz
MTE5MzMwMEZBQkRERiAvKiBBYnN0cmFjdFNsb3RWaXNpdG9yLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTkxMkI0RTI1MzExOTMzMDBGQUJEREYgLyog
QWJzdHJhY3RTbG90VmlzaXRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CisJCUZFOTEyQjUxMjUzMTFBRDEwMEZBQkRERiAvKiBBYnN0cmFjdFNsb3RW
aXNpdG9ySW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gRkU5MTJCNTAyNTMxMUFEMTAwRkFCRERGIC8qIEFic3RyYWN0U2xvdFZpc2l0b3JJbmxp
bmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
RkU5OUIyNDkxQzI0QzNEMzAwQzgyMTU5IC8qIEpJVE5lZ0dlbmVyYXRvci5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkU5OUIyNDgxQzI0QjZEMzAwQzgy
MTU5IC8qIEpJVE5lZ0dlbmVyYXRvci5oICovOyB9OwogCQlGRUEwODYyMDE4MkI3QTA0MDBGNkQ4
NTEgLyogQnJlYWtwb2ludC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRkVBMDg2MUUxODJCN0EwNDAwRjZEODUxIC8qIEJyZWFrcG9pbnQuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlGRUEwODYyMTE4MkI3
QTA0MDBGNkQ4NTEgLyogRGVidWdnZXJQcmltaXRpdmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRUEwODYxRjE4MkI3QTA0MDBGNkQ4NTEgLyogRGVi
dWdnZXJQcmltaXRpdmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKQEAgLTM5OTEsNiArMzk5Nyw3IEBACiAJCTZBMzhDRkE4MUUzMkI1OEIwMDYwMjA2
RiAvKiBBc3luY1N0YWNrVHJhY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
QXN5bmNTdGFja1RyYWNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZBRDJDQjRD
MTlCOTE0MDEwMDA2NTcxOSAvKiBEZWJ1Z2dlckV2YWxFbmFibGVyLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IERlYnVnZ2VyRXZhbEVuYWJsZXIuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNkJBOTNDOTU5MDQ4NEM1QkFEOTMxNkVBIC8qIEpTU2NyaXB0RmV0Y2hl
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1NjcmlwdEZldGNoZXIuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNkJDQ0VDMDMyNUQxRkEyNzAwMEYzOTFEIC8q
IFZlcmlmaWVyU2xvdFZpc2l0b3JJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFZlcmlmaWVyU2xvdFZpc2l0b3JJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTcwMTEzRDQ5MUE4REIwOTMwMDM4NDhDNCAvKiBJdGVyYXRvck9wZXJhdGlvbnMu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSXRlcmF0b3JPcGVyYXRp
b25zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzAxMTNENEExQThEQjA5MzAw
Mzg0OEM0IC8qIEl0ZXJhdG9yT3BlcmF0aW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBJdGVyYXRvck9wZXJhdGlvbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNzAxM0NBODkxQjQ5MUE5NDAwQ0FFNjEzIC8qIEpTTWljcm90YXNrLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTTWljcm90YXNrLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTUyMjcsNiArNTIzNCw3IEBACiAJCUY2OTJBODg3MDI1NTU5N0Qw
MUZGNjBGNyAvKiBKU0NKU1ZhbHVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTQ0pTVmFsdWUuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB0YWJXaWR0aCA9IDg7IH07CiAJCUY3MzkyNjkxOERDNjQzMzBBRkNERjBENyAvKiBK
U1NvdXJjZUNvZGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNT
b3VyY2VDb2RlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkUwMDI2MjIyM0Yz
QUYzMzAwM0EzNThGIC8qIFdlYkFzc2VtYmx5LmFzbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYXNtLmFzbTsgbmFtZSA9IFdlYkFz
c2VtYmx5LmFzbTsgcGF0aCA9IGxsaW50L1dlYkFzc2VtYmx5LmFzbTsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJRkUwNDE1NTIyNTJFQzA3MzAwOTFFQjVEIC8qIFNsb3RWaXNpdG9yTWFj
cm9zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNsb3RWaXNpdG9yTWFjcm9z
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFMDg2QkM5MjEyM0RFRkEwMDNGMjky
OSAvKiBFbnRyeUZyYW1lLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEVudHJ5
RnJhbWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkUwRDRBMDQxQUI4REQwQTAw
MkY1NEJGIC8qIEV4ZWN1dGlvblRpbWVMaW1pdFRlc3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBuYW1lID0gRXhlY3V0aW9uVGltZUxpbWl0VGVzdC5jcHA7IHBhdGggPSBBUEkv
dGVzdHMvRXhlY3V0aW9uVGltZUxpbWl0VGVzdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUZFMEQ0QTA1MUFCOEREMEEwMDJGNTRCRiAvKiBFeGVjdXRpb25UaW1lTGltaXRUZXN0
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEV4ZWN1dGlvblRpbWVMaW1pdFRl
c3QuaDsgcGF0aCA9IEFQSS90ZXN0cy9FeGVjdXRpb25UaW1lTGltaXRUZXN0Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01MjYxLDEyICs1MjY5LDE1IEBACiAJCUZFMUUyQzNFMjI0
MEQzMEIwMEY2QjcyOSAvKiBNYWNyb0Fzc2VtYmxlckFSTTY0RS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBNYWNyb0Fzc2VtYmxlckFSTTY0RS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlGRTIwQ0U5QjE1RjA0QTk1MDBERjM0MzAgLyogTExJbnRDTG9vcC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBMTEludENMb29wLmNwcDsgcGF0
aCA9IGxsaW50L0xMSW50Q0xvb3AuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlG
RTIwQ0U5QzE1RjA0QTk1MDBERjM0MzAgLyogTExJbnRDTG9vcC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBMTEludENMb29wLmg7IHBhdGggPSBsbGludC9MTEludENMb29wLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZFMjg3RDAxMjUyRkIyRTgwMEQ3MjNGOSAv
KiBWZXJpZmllclNsb3RWaXNpdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFZlcmlmaWVyU2xvdFZpc2l0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkUy
QTg3NUYxRjAyMzgxNjAwRUIzMUIyIC8qIE1pbmltdW1SZXNlcnZlZFpvbmVTaXplLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IE1pbmltdW1SZXNlcnZlZFpvbmVTaXplLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUZFMkJENjZFMjVDMERDODIwMDk5OUQzQiAvKiBWZXJpZmllclNsb3RWaXNpdG9y
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFZlcmlmaWVyU2xvdFZp
c2l0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTJFNkE3QTFENkVBNUZF
MDA2MEY4OTYgLyogVGhyb3dTY29wZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBUaHJvd1Njb3BlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkUz
MDIyRDAxRTNENzM5NjAwQkFDNDkzIC8qIFNpZ2lsbENyYXNoQW5hbHl6ZXIuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2lnaWxsQ3Jhc2hBbmFseXplci5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFMzAyMkQxMUUzRDczOTYwMEJBQzQ5MyAvKiBT
aWdpbGxDcmFzaEFuYWx5emVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNp
Z2lsbENyYXNoQW5hbHl6ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkUzMDIy
RDQxRTQyODU2NzAwQkFDNDkzIC8qIFZNSW5zcGVjdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFZNSW5zcGVjdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJRkUzMDIyRDUxRTQyODU2NzAwQkFDNDkzIC8qIFZNSW5zcGVjdG9yLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZNSW5zcGVjdG9yLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCUZFMzM2QjUyMjVEQjQ5N0QwMDk4RjAzNCAvKiBNYXJraW5nQ29uc3Ry
YWludEV4ZWN1dG9yUGFpci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNYXJr
aW5nQ29uc3RyYWludEV4ZWN1dG9yUGFpci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlGRTM0MjIxMTFENkI4MThDMDAzMkJFODggLyogVGhyb3dTY29wZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBUaHJvd1Njb3BlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUZFMzRFRTIwMjQzOThBOUEwMEFBMkU3QyAvKiBFbnN1cmVTdGlsbEFsaXZlSGVyZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBFbnN1cmVTdGlsbEFsaXZlSGVyZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlGRTM0RUUyMjI0Mzk4Qjg1MDBBQTJFN0MgLyogRW5zdXJlU3RpbGxBbGl2
ZUhlcmUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRW5zdXJlU3Rp
bGxBbGl2ZUhlcmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNTMzNSw2ICs1
MzQ2LDggQEAKIAkJRkU4REU1NEMyM0FDMUU4NjAwNUM5MTQyIC8qIENhY2hlYWJsZUlkZW50aWZp
ZXJJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENhY2hlYWJsZUlk
ZW50aWZpZXJJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFOERFNTRF
MjNBQzNBOEUwMDVDOTE0MiAvKiBDYWNoZWFibGVJZGVudGlmaWVyLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IENhY2hlYWJsZUlkZW50aWZpZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlGRTkwQkIzQTFCN0NGNjRFMDA2QjNGMDMgLyogVk1JbmxpbmVzLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZNSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlGRTkxMkI0RTI1MzExOTMzMDBGQUJEREYgLyogQWJzdHJhY3RTbG90VmlzaXRvci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBYnN0cmFjdFNsb3RWaXNpdG9yLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZFOTEyQjUwMjUzMTFBRDEwMEZBQkRERiAv
KiBBYnN0cmFjdFNsb3RWaXNpdG9ySW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBBYnN0cmFjdFNsb3RWaXNpdG9ySW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlGRTk4QjVCNjFCQjlBRTExMDA3M0U3QTYgLyogSklUU3ViR2VuZXJhdG9yLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpJVFN1YkdlbmVyYXRvci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTk5QjI0NzFDMjRCNkQzMDBDODIxNTkgLyogSklU
TmVnR2VuZXJhdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpJ
VE5lZ0dlbmVyYXRvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFOTlCMjQ4
MUMyNEI2RDMwMEM4MjE1OSAvKiBKSVROZWdHZW5lcmF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSklUTmVnR2VuZXJhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC02MjgyLDYgKzYyOTUsOCBAQAogCQkxNDJFMzEyQTEzNEZGMEE2MDBBRkFEQjUgLyog
aGVhcCAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJRkU5
MTJCNEUyNTMxMTkzMzAwRkFCRERGIC8qIEFic3RyYWN0U2xvdFZpc2l0b3IuaCAqLywKKwkJCQlG
RTkxMkI1MDI1MzExQUQxMDBGQUJEREYgLyogQWJzdHJhY3RTbG90VmlzaXRvcklubGluZXMuaCAq
LywKIAkJCQkwRkVDM0M1MDFGMzNBNDE2MDBGNTlCNkMgLyogQWxpZ25lZE1lbW9yeUFsbG9jYXRv
ci5jcHAgKi8sCiAJCQkJMEZFQzNDNTExRjMzQTQxNjAwRjU5QjZDIC8qIEFsaWduZWRNZW1vcnlB
bGxvY2F0b3IuaCAqLywKIAkJCQkwRkE3NjIwQTFEQjk1OUY2MDBCN0EyRkQgLyogQWxsb2NhdGlu
Z1Njb3BlLmggKi8sCkBAIC02NDEzLDYgKzY0MjgsNyBAQAogCQkJCTBGN0RGMTMwMUUyOTcwRDUw
MDk1OTUxQiAvKiBNYXJrZWRTcGFjZUlubGluZXMuaCAqLywKIAkJCQkwRjY2MEUzMzFFMDUxN0I3
MDAzMTQ2MkMgLyogTWFya2luZ0NvbnN0cmFpbnQuY3BwICovLAogCQkJCTBGNjYwRTM0MUUwNTE3
QjcwMDMxNDYyQyAvKiBNYXJraW5nQ29uc3RyYWludC5oICovLAorCQkJCUZFMzM2QjUyMjVEQjQ5
N0QwMDk4RjAzNCAvKiBNYXJraW5nQ29uc3RyYWludEV4ZWN1dG9yUGFpci5oICovLAogCQkJCTBG
NjYwRTM1MUUwNTE3QjcwMDMxNDYyQyAvKiBNYXJraW5nQ29uc3RyYWludFNldC5jcHAgKi8sCiAJ
CQkJMEY2NjBFMzYxRTA1MTdCODAwMzE0NjJDIC8qIE1hcmtpbmdDb25zdHJhaW50U2V0LmggKi8s
CiAJCQkJMEY5REFBMDYxRkQxQzNDODAwNzlDNUIyIC8qIE1hcmtpbmdDb25zdHJhaW50U29sdmVy
LmNwcCAqLywKQEAgLTY0MzksNiArNjQ1NSw3IEBACiAJCQkJQzIyNTQ5NDIxNUY3REJBQTAwNjVF
ODk4IC8qIFNsb3RWaXNpdG9yLmNwcCAqLywKIAkJCQkxNEJBNzhGMDEzQUFCODhGMDA1QjdDMkMg
LyogU2xvdFZpc2l0b3IuaCAqLywKIAkJCQkwRkNCNDA4NTE1QzBBM0MzMDA0ODkzMkIgLyogU2xv
dFZpc2l0b3JJbmxpbmVzLmggKi8sCisJCQkJRkUwNDE1NTIyNTJFQzA3MzAwOTFFQjVEIC8qIFNs
b3RWaXNpdG9yTWFjcm9zLmggKi8sCiAJCQkJMEZERTg3RkExREZFNkU1MDAwNjRDMzkwIC8qIFNw
YWNlVGltZU11dGF0b3JTY2hlZHVsZXIuY3BwICovLAogCQkJCTBGREU4N0ZCMURGRTZFNTAwMDY0
QzM5MCAvKiBTcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyLmggKi8sCiAJCQkJMEY0RjgyODkxRTMx
Qjk3MTAwNzUxODRDIC8qIFN0b2NoYXN0aWNTcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyLmNwcCAq
LywKQEAgLTY0NTYsNiArNjQ3Myw5IEBACiAJCQkJMEYxRkIzOEExRTE3M0E2MjAwQTlCRTUwIC8q
IFN5bmNocm9ub3VzU3RvcFRoZVdvcmxkTXV0YXRvclNjaGVkdWxlci5jcHAgKi8sCiAJCQkJMEYx
RkIzOEIxRTE3M0E2MjAwQTlCRTUwIC8qIFN5bmNocm9ub3VzU3RvcFRoZVdvcmxkTXV0YXRvclNj
aGVkdWxlci5oICovLAogCQkJCTE0MTQ0OENDMTNBMTc4MzcwMEY1QkExQSAvKiBUaW55Qmxvb21G
aWx0ZXIuaCAqLywKKwkJCQlGRTJCRDY2RTI1QzBEQzgyMDA5OTlEM0IgLyogVmVyaWZpZXJTbG90
VmlzaXRvci5jcHAgKi8sCisJCQkJRkUyODdEMDEyNTJGQjJFODAwRDcyM0Y5IC8qIFZlcmlmaWVy
U2xvdFZpc2l0b3IuaCAqLywKKwkJCQk2QkNDRUMwMzI1RDFGQTI3MDAwRjM5MUQgLyogVmVyaWZp
ZXJTbG90VmlzaXRvcklubGluZXMuaCAqLywKIAkJCQkwRjREOEM3MjFGQzdBOTczMDAxRDMyQUMg
LyogVmlzaXRDb3VudGVyLmggKi8sCiAJCQkJMEY5NTJBOUYxREY3ODYwNzAwRTA2RkJEIC8qIFZp
c2l0UmFjZUtleS5jcHAgKi8sCiAJCQkJMEY5NTJBQTAxREY3ODYwNzAwRTA2RkJEIC8qIFZpc2l0
UmFjZUtleS5oICovLApAQCAtOTMwMSw2ICs5MzIxLDcgQEAKIAkJCQkxNDdCODNBQzBFNkRCOEM5
MDA0Nzc1QTQgLyogQmF0Y2hlZFRyYW5zaXRpb25PcHRpbWl6ZXIuaCBpbiBIZWFkZXJzICovLAog
CQkJCUUzNUU4OUZEMjVDNTBGODcwMDcxRUUxRSAvKiBCaWdJbnQ2NEFycmF5LmggaW4gSGVhZGVy
cyAqLywKIAkJCQk4Njk3NkU1RjFGQTNFOEJDMDBFN0M0RTEgLyogQmlnSW50Q29uc3RydWN0b3Iu
aCBpbiBIZWFkZXJzICovLAorCQkJCUZFMDQxNTUzMjUyRUMwNzMwMDkxRUI1RCAvKiBTbG90Vmlz
aXRvck1hY3Jvcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODY2NzM5RDIxM0JGREU3MTAwMjNEODdD
IC8qIEJpZ0ludGVnZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2MTgxNjc3MUZCNzkyNDIwMEVD
QzRFQyAvKiBCaWdJbnRPYmplY3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2OTc2RTVFMUZBM0U4
QjYwMEU3QzRFMSAvKiBCaWdJbnRQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovLApAQCAtOTU4Miw2
ICs5NjAzLDcgQEAKIAkJCQkwRkQ4MkU1NzE0MURBRjEwMDAxNzlDOTQgLyogREZHT1NSRW50cnku
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGRDhBMzI2MTdENTFGNTcwMENBMkM0MCAvKiBERkdPU1JF
bnRyeXBvaW50Q3JlYXRpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZDMDk3NkExNDY4
QTZGNzAwQ0YyNDQyIC8qIERGR09TUkV4aXQuaCBpbiBIZWFkZXJzICovLAorCQkJCUZFOTEyQjRG
MjUzMTE5MzMwMEZBQkRERiAvKiBBYnN0cmFjdFNsb3RWaXNpdG9yLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRjIzNUJFQzE3MTc4RTczMDA2OTBDN0YgLyogREZHT1NSRXhpdEJhc2UuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGRkI5MjFDMTZEMDJGMTEwMDU1QTVEQiAvKiBERkdPU1JFeGl0Q29tcGls
YXRpb25JbmZvLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjcwMjVBQTE3MTRCMEZDMDAzODJDMEUg
LyogREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmggaW4gSGVhZGVycyAqLywKQEAgLTk4NjgsNiAr
OTg5MCw3IEBACiAJCQkJQTUxM0U1QkUxODVCRkFDQzAwN0U5NUFEIC8qIEluamVjdGVkU2NyaXB0
SG9zdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTUxM0U1Q0IxODVGOTYyNDAwN0U5NUFEIC8qIElu
amVjdGVkU2NyaXB0TWFuYWdlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTU4NDBFMjExODdCN0I4
NjAwODQzQjEwIC8qIEluamVjdGVkU2NyaXB0TW9kdWxlLmggaW4gSGVhZGVycyAqLywKKwkJCQlG
RTI4N0QwMjI1MkZCMkU4MDBENzIzRjkgLyogVmVyaWZpZXJTbG90VmlzaXRvci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQTUxM0U1QzcxODVGOTQ0NjAwN0U5NUFEIC8qIEluamVjdGVkU2NyaXB0U291
cmNlLmggaW4gSGVhZGVycyAqLywKIAkJCQk5OTU5RTkzMjFCRDE4Mjc5MDAxQUE0MTMgLyogaW5s
aW5lLWFuZC1taW5pZnktc3R5bGVzaGVldHMtYW5kLXNjcmlwdHMucHkgaW4gSGVhZGVycyAqLywK
IAkJCQk3OTA1QkI2OTFEMTIwNTBFMDAxOUZFNTcgLyogSW5saW5lQWNjZXNzLmggaW4gSGVhZGVy
cyAqLywKQEAgLTEwMDA3LDYgKzEwMDMwLDcgQEAKIAkJCQk1M0M0RjY2QjIxQjFBNDA5MDAyRkQw
MDkgLyogSlNBUElHbG9iYWxPYmplY3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTg0MDQ4MDEzMTAy
MUExRDkwMDhFN0YwMSAvKiBKU0FQSVZhbHVlV3JhcHBlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QzJDRjM5QzIxNkUxNUE4MTAwREQ2OUJFIC8qIEpTQVBJV3JhcHBlck9iamVjdC5oIGluIEhlYWRl
cnMgKi8sCisJCQkJRkUzMzZCNTMyNURCNDk3RDAwOThGMDM0IC8qIE1hcmtpbmdDb25zdHJhaW50
RXhlY3V0b3JQYWlyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQxNzBFMTZGNUNEMDBCMzQ0
NjAgLyogSlNBcnJheS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjY2RTMxN0I2QjVBQjAwQTdB
RTNGIC8qIEpTQXJyYXlCdWZmZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkI2NkU1MTdCNkI1
QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLApA
QCAtMTAwNDMsNiArMTAwNjcsNyBAQAogCQkJCUE1OEMwMjQyMThFNEE0MUEwMDAzMkJDNSAvKiBK
U0NvbnRleHRQcml2YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQxRTBFMTZGNUNEMDBC
MzQ0NjAgLyogSlNDb250ZXh0UmVmLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNUVBNzBFRTE5RjVC
NUM0MDA5OEY1RUMgLyogSlNDb250ZXh0UmVmSW5zcGVjdG9yU3VwcG9ydC5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJNkJDQ0VDMDQyNUQxRkEyNzAwMEYzOTFEIC8qIFZlcmlmaWVyU2xvdFZpc2l0b3JJ
bmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNUQyRTY2NTE5NUUxNzQwMDBBNTE4RTcgLyog
SlNDb250ZXh0UmVmSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0OENEMUQ4MTA4Q0Y5
MDIwMDgxNjNDNiAvKiBKU0NvbnRleHRSZWZQcml2YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQlG
RTc0OTdFNjIwOTAwMUIxMDAwMzU2NUIgLyogSlNDUHRyVGFnLmggaW4gSGVhZGVycyAqLywKQEAg
LTEwMTc0LDYgKzEwMTk5LDcgQEAKIAkJCQk3OTVBQzYxODIwQTIzNTVFMDA1MkM3NkMgLyogSlNW
aXJ0dWFsTWFjaGluZVByaXZhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3Q0EzQUU4MTdEQTQx
QUUwMDY1MzhBRiAvKiBKU1dlYWtNYXAuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3NDgyRTkzMTE2
QTdDQUQwMDNCMDcxMiAvKiBKU1dlYWtPYmplY3RNYXBSZWZJbnRlcm5hbC5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJRkU5MTJCNTEyNTMxMUFEMTAwRkFCRERGIC8qIEFic3RyYWN0U2xvdFZpc2l0b3JJ
bmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzQ4MkI5MzExNjcxMTQ3MDAzQjA3MTIgLyog
SlNXZWFrT2JqZWN0TWFwUmVmUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTM5QkZCQjAy
MkFEM0NEQzAwMjNGNEMwIC8qIEpTV2Vha09iamVjdFJlZi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEYwQjI4NkIxRUI4RTZDRjAwMEVCNUQyIC8qIEpTV2Vha1ByaXZhdGUuaCBpbiBIZWFkZXJzICov
LApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvd2tidWlsdGlucy9idWlsdGlu
c19nZW5lcmF0ZV9pbnRlcm5hbHNfd3JhcHBlcl9oZWFkZXIucHkKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvd2tidWlsdGlucy9idWlsdGluc19nZW5lcmF0ZV9p
bnRlcm5hbHNfd3JhcHBlcl9oZWFkZXIucHkJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9TY3JpcHRzL3drYnVpbHRpbnMvYnVpbHRpbnNfZ2VuZXJhdGVfaW50ZXJu
YWxzX3dyYXBwZXJfaGVhZGVyLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogIyEv
dXNyL2Jpbi9lbnYgcHl0aG9uCiAjCi0jIENvcHlyaWdodCAoYykgMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisjIENvcHlyaWdodCAoYykgMjAxNi0yMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICMKICMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAjIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtOTMs
NyArOTMsNyBAQCBjbGFzcyBCdWlsdGluc0ludGVybmFsc1dyYXBwZXJIZWFkZXJHZW5lCiAKICAg
ICBkZWYgZ2VuZXJhdGVfbWV0aG9kcyhzZWxmKToKICAgICAgICAgcmV0dXJuICIiIgotICAgIHZv
aWQgdmlzaXQoSlNDOjpTbG90VmlzaXRvciYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0
b3I+IHZvaWQgdmlzaXQoVmlzaXRvciYpOwogICAgIHZvaWQgaW5pdGlhbGl6ZShKU0RPTUdsb2Jh
bE9iamVjdCYpOwogIiIiCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL3dr
YnVpbHRpbnMvYnVpbHRpbnNfZ2VuZXJhdGVfaW50ZXJuYWxzX3dyYXBwZXJfaW1wbGVtZW50YXRp
b24ucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvd2tidWls
dGlucy9idWlsdGluc19nZW5lcmF0ZV9pbnRlcm5hbHNfd3JhcHBlcl9pbXBsZW1lbnRhdGlvbi5w
eQkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvd2ti
dWlsdGlucy9idWlsdGluc19nZW5lcmF0ZV9pbnRlcm5hbHNfd3JhcHBlcl9pbXBsZW1lbnRhdGlv
bi5weQkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKICMhL3Vzci9iaW4vZW52IHB5dGhv
bgogIwotIyBDb3B5cmlnaHQgKGMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorIyBDb3B5cmlnaHQgKGMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAjCiAjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEyMCwxMyArMTIwLDE2IEBAIGNs
YXNzIEJ1aWx0aW5zSW50ZXJuYWxzV3JhcHBlckltcGxlbWVudGEKICAgICAgICAgcmV0dXJuICdc
bicuam9pbihsaW5lcykKIAogICAgIGRlZiBnZW5lcmF0ZV92aXNpdF9tZXRob2Qoc2VsZik6Ci0g
ICAgICAgIGxpbmVzID0gWyJ2b2lkIEpTQnVpbHRpbkludGVybmFsRnVuY3Rpb25zOjp2aXNpdChK
U0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKSIsCisgICAgICAgIGxpbmVzID0gWyJ0ZW1wbGF0ZTx0
eXBlbmFtZSBWaXNpdG9yPiIsCisgICAgICAgICAgICAgICAgICJ2b2lkIEpTQnVpbHRpbkludGVy
bmFsRnVuY3Rpb25zOjp2aXNpdChWaXNpdG9yJiB2aXNpdG9yKSIsCiAgICAgICAgICAgICAgICAg
ICJ7Il0KICAgICAgICAgZm9yIG9iamVjdCBpbiBzZWxmLmludGVybmFsczoKICAgICAgICAgICAg
IHZpc2l0ID0gIiAgICAlcy52aXNpdCh2aXNpdG9yKTsiICUgc2VsZi5tZW1iZXJfbmFtZShvYmpl
Y3QpCiAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoQnVpbHRpbnNHZW5lcmF0b3Iud3JhcF93aXRo
X2d1YXJkKG9iamVjdC5hbm5vdGF0aW9ucy5nZXQoJ2NvbmRpdGlvbmFsJyksIHZpc2l0KSkKICAg
ICAgICAgbGluZXMuYXBwZW5kKCIgICAgVU5VU0VEX1BBUkFNKHZpc2l0b3IpOyIpCiAgICAgICAg
IGxpbmVzLmFwcGVuZCgifVxuIikKKyAgICAgICAgbGluZXMuYXBwZW5kKCJ0ZW1wbGF0ZSB2b2lk
IEpTQnVpbHRpbkludGVybmFsRnVuY3Rpb25zOjp2aXNpdChBYnN0cmFjdFNsb3RWaXNpdG9yJik7
IikKKyAgICAgICAgbGluZXMuYXBwZW5kKCJ0ZW1wbGF0ZSB2b2lkIEpTQnVpbHRpbkludGVybmFs
RnVuY3Rpb25zOjp2aXNpdChTbG90VmlzaXRvciYpO1xuIikKICAgICAgICAgcmV0dXJuICdcbicu
am9pbihsaW5lcykKIAogICAgIGRlZiBfZ2VuZXJhdGVfaW5pdGlhbGl6ZV9zdGF0aWNfZ2xvYmFs
cyhzZWxmKToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL3drYnVpbHRpbnMv
YnVpbHRpbnNfdGVtcGxhdGVzLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9TY3JpcHRzL3drYnVpbHRpbnMvYnVpbHRpbnNfdGVtcGxhdGVzLnB5CShyZXZpc2lvbiAyNzI5
MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy93a2J1aWx0aW5zL2J1aWx0aW5z
X3RlbXBsYXRlcy5weQkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKICMhL3Vzci9iaW4v
ZW52IHB5dGhvbgogIwotIyBDb3B5cmlnaHQgKGMpIDIwMTQtMjAxOSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisjIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICMgQ29weXJpZ2h0IChDKSAyMDE1IENhbm9uIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICMKICMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0xODgsNyArMTg4LDcgQEAgcHVibGlj
OgogICAgIGV4cGxpY2l0ICR7b2JqZWN0TmFtZX1CdWlsdGluRnVuY3Rpb25zKEpTQzo6Vk0mIHZt
KSA6IG1fdm0odm0pIHsgfQogCiAgICAgdm9pZCBpbml0KEpTQzo6SlNHbG9iYWxPYmplY3QmKTsK
LSAgICB2b2lkIHZpc2l0KEpTQzo6U2xvdFZpc2l0b3ImKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBWaXNpdG9yPiB2b2lkIHZpc2l0KFZpc2l0b3ImKTsKIAogcHVibGljOgogICAgIEpTQzo6Vk0m
IG1fdm07CkBAIC0yMDcsMTAgKzIwNywxNSBAQCBpbmxpbmUgdm9pZCAke29iamVjdE5hbWV9QnVp
bHRpbkZ1bmN0aW9uCiAjdW5kZWYgRVhQT1JUX0ZVTkNUSU9OCiB9CiAKLWlubGluZSB2b2lkICR7
b2JqZWN0TmFtZX1CdWlsdGluRnVuY3Rpb25zOjp2aXNpdChKU0M6OlNsb3RWaXNpdG9yJiB2aXNp
dG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK2lubGluZSB2b2lkICR7b2JqZWN0TmFt
ZX1CdWlsdGluRnVuY3Rpb25zOjp2aXNpdChWaXNpdG9yJiB2aXNpdG9yKQogewogI2RlZmluZSBW
SVNJVF9GVU5DVElPTihuYW1lKSB2aXNpdG9yLmFwcGVuZChtXyMjbmFtZSMjRnVuY3Rpb24pOwog
ICAgICR7bWFjcm9QcmVmaXh9X0ZPUkVBQ0hfJHtvYmplY3RNYWNyb31fQlVJTFRJTl9GVU5DVElP
Tl9OQU1FKFZJU0lUX0ZVTkNUSU9OKQogI3VuZGVmIFZJU0lUX0ZVTkNUSU9OCiB9CisKK3RlbXBs
YXRlIHZvaWQgJHtvYmplY3ROYW1lfUJ1aWx0aW5GdW5jdGlvbnM6OnZpc2l0KEpTQzo6QWJzdHJh
Y3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCAke29iamVjdE5hbWV9QnVpbHRpbkZ1bmN0
aW9uczo6dmlzaXQoSlNDOjpTbG90VmlzaXRvciYpOworCiAiIiIpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCShyZXZpc2lvbiAyNzI5MDIp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjAg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIw
MjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC03NTcsNyArNzU3LDggQEAgYm9vbCBBY2Nlc3NDYXNlOjp2aXNpdFdlYWso
Vk0mIHZtKSBjb25zdAogICAgIHJldHVybiBpc1ZhbGlkOwogfQogCi1ib29sIEFjY2Vzc0Nhc2U6
OnByb3BhZ2F0ZVRyYW5zaXRpb25zKFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBjb25zdAordGVtcGxh
dGU8dHlwZW5hbWUgVmlzaXRvcj4KK2Jvb2wgQWNjZXNzQ2FzZTo6cHJvcGFnYXRlVHJhbnNpdGlv
bnMoVmlzaXRvciYgdmlzaXRvcikgY29uc3QKIHsKICAgICBib29sIHJlc3VsdCA9IHRydWU7CiAK
QEAgLTc3Miw3ICs3NzMsNyBAQCBib29sIEFjY2Vzc0Nhc2U6OnByb3BhZ2F0ZVRyYW5zaXRpb25z
KFNsCiAgICAgc3dpdGNoIChtX3R5cGUpIHsKICAgICBjYXNlIFRyYW5zaXRpb246CiAgICAgY2Fz
ZSBEZWxldGU6Ci0gICAgICAgIGlmICh2aXNpdG9yLnZtKCkuaGVhcC5pc01hcmtlZChtX3N0cnVj
dHVyZS0+cHJldmlvdXNJRCgpKSkKKyAgICAgICAgaWYgKHZpc2l0b3IuaXNNYXJrZWQobV9zdHJ1
Y3R1cmUtPnByZXZpb3VzSUQoKSkpCiAgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmll
cmVkKG1fc3RydWN0dXJlLmdldCgpKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgcmVzdWx0
ID0gZmFsc2U7CkBAIC03ODQsMTEgKzc4NSwxOCBAQCBib29sIEFjY2Vzc0Nhc2U6OnByb3BhZ2F0
ZVRyYW5zaXRpb25zKFNsCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotdm9pZCBBY2Nlc3NDYXNl
Ojp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYgdmlzaXRvcikgY29uc3QKK3RlbXBsYXRlIGJv
b2wgQWNjZXNzQ2FzZTo6cHJvcGFnYXRlVHJhbnNpdGlvbnMoQWJzdHJhY3RTbG90VmlzaXRvciYp
IGNvbnN0OwordGVtcGxhdGUgYm9vbCBBY2Nlc3NDYXNlOjpwcm9wYWdhdGVUcmFuc2l0aW9ucyhT
bG90VmlzaXRvciYpIGNvbnN0OworCisKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lk
IEFjY2Vzc0Nhc2U6OnZpc2l0QWdncmVnYXRlSW1wbChWaXNpdG9yJiB2aXNpdG9yKSBjb25zdAog
ewogICAgIG1faWRlbnRpZmllci52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKIH0KIAorREVGSU5F
X1ZJU0lUX0FHR1JFR0FURV9XSVRIX01PRElGSUVSKEFjY2Vzc0Nhc2UsIGNvbnN0KTsKKwogdm9p
ZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZVdpdGhHdWFyZCgKICAgICBBY2Nlc3NHZW5lcmF0aW9uU3Rh
dGUmIHN0YXRlLCBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0JiBmYWxsVGhyb3VnaCkKIHsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuaAkocmV2aXNpb24g
MjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTct
MjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTI4MCw5ICsyODAsOSBAQCBwcml2YXRlOgogICAgIHRlbXBsYXRl
PHR5cGVuYW1lIEZ1bmN0b3I+CiAgICAgdm9pZCBmb3JFYWNoRGVwZW5kZW50Q2VsbChWTSYsIGNv
bnN0IEZ1bmN0b3ImKSBjb25zdDsKIAotICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0
b3ImKSBjb25zdDsKKyAgICBERUNMQVJFX1ZJU0lUX0FHR1JFR0FURV9XSVRIX01PRElGSUVSKGNv
bnN0KTsKICAgICBib29sIHZpc2l0V2VhayhWTSYpIGNvbnN0OwotICAgIGJvb2wgcHJvcGFnYXRl
VHJhbnNpdGlvbnMoU2xvdFZpc2l0b3ImKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPiBib29sIHByb3BhZ2F0ZVRyYW5zaXRpb25zKFZpc2l0b3ImKSBjb25zdDsKIAogICAg
IC8vIEZJWE1FOiBUaGlzIG9ubHkgZXhpc3RzIGJlY2F1c2Ugb2YgaG93IEFjY2Vzc0Nhc2UgcHV0
cyBwb3N0LWdlbmVyYXRpb24gdGhpbmdzIGludG8gaXRzZWxmLgogICAgIC8vIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTY0NTYKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9CeVZhbEluZm8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9CeVZhbEluZm8uY3BwCShyZXZpc2lvbiAyNzI5MDIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnlWYWxJbmZvLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIwLTIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0zMiwxMSArMzIsMTQgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICNpZiBFTkFCTEUoSklUKQogCi12
b2lkIEJ5VmFsSW5mbzo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1w
bGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBCeVZhbEluZm86OnZpc2l0QWdncmVnYXRlSW1w
bChWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGNhY2hlZElkLnZpc2l0QWdncmVnYXRlKHZpc2l0
b3IpOwogfQogCitERUZJTkVfVklTSVRfQUdHUkVHQVRFKEJ5VmFsSW5mbyk7CisKICNlbmRpZiAv
LyBFTkFCTEUoSklUKQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9CeVZhbEluZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQnlWYWxJbmZvLmgJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeVZhbEluZm8uaAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxOCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTI2MCw3ICsyNjAsNyBAQCBzdHJ1Y3QgQnlWYWxJbmZvIHsKICAgICAgICAgdGhpcy0+c2VlbiA9
IGZhbHNlOwogICAgIH0KIAotICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImKTsK
KyAgICBERUNMQVJFX1ZJU0lUX0FHR1JFR0FURTsKIAogICAgIENvZGVMb2NhdGlvbkp1bXA8SlNJ
bnRlcm5hbFB0clRhZz4gbm90SW5kZXhKdW1wOwogICAgIENvZGVMb2NhdGlvbkp1bXA8SlNJbnRl
cm5hbFB0clRhZz4gYmFkVHlwZUp1bXA7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQ2hlY2tQcml2YXRlQnJhbmRTdGF0dXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DaGVja1ByaXZhdGVCcmFuZFN0YXR1cy5jcHAJKHJldmlz
aW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DaGVja1ByaXZh
dGVCcmFuZFN0YXR1cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyOCwxOCArMjI4LDI1IEBAIENh
Y2hlYWJsZUlkZW50aWZpZXIgQ2hlY2tQcml2YXRlQnJhbmRTdGEKICAgICByZXR1cm4gcmVzdWx0
OwogfQogCi12b2lkIENoZWNrUHJpdmF0ZUJyYW5kU3RhdHVzOjp2aXNpdEFnZ3JlZ2F0ZShTbG90
VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIENoZWNr
UHJpdmF0ZUJyYW5kU3RhdHVzOjp2aXNpdEFnZ3JlZ2F0ZUltcGwoVmlzaXRvciYgdmlzaXRvcikK
IHsKICAgICBmb3IgKENoZWNrUHJpdmF0ZUJyYW5kVmFyaWFudCYgdmFyaWFudCA6IG1fdmFyaWFu
dHMpCiAgICAgICAgIHZhcmlhbnQudmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7CiB9CiAKLXZvaWQg
Q2hlY2tQcml2YXRlQnJhbmRTdGF0dXM6Om1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJiB2aXNpdG9y
KQorREVGSU5FX1ZJU0lUX0FHR1JFR0FURShDaGVja1ByaXZhdGVCcmFuZFN0YXR1cyk7CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIENoZWNrUHJpdmF0ZUJyYW5kU3RhdHVzOjpt
YXJrSWZDaGVhcChWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGZvciAoQ2hlY2tQcml2YXRlQnJh
bmRWYXJpYW50JiB2YXJpYW50IDogbV92YXJpYW50cykKICAgICAgICAgdmFyaWFudC5tYXJrSWZD
aGVhcCh2aXNpdG9yKTsKIH0KIAordGVtcGxhdGUgdm9pZCBDaGVja1ByaXZhdGVCcmFuZFN0YXR1
czo6bWFya0lmQ2hlYXAoQWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBDaGVj
a1ByaXZhdGVCcmFuZFN0YXR1czo6bWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImKTsKKwogYm9vbCBD
aGVja1ByaXZhdGVCcmFuZFN0YXR1czo6ZmluYWxpemUoVk0mIHZtKQogewogICAgIGZvciAoYXV0
byYgdmFyaWFudCA6IG1fdmFyaWFudHMpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9DaGVja1ByaXZhdGVCcmFuZFN0YXR1cy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DaGVja1ByaXZhdGVCcmFuZFN0YXR1cy5oCShyZXZpc2lv
biAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2hlY2tQcml2YXRl
QnJhbmRTdGF0dXMuaAkod29ya2luZyBjb3B5KQpAQCAtODIsOCArODIsOCBAQCBwdWJsaWM6CiAg
ICAgLy8gQXR0ZW1wdHMgdG8gcmVkdWNlIHRoZSBzZXQgb2YgdmFyaWFudHMgdG8gZml0IHRoZSBn
aXZlbiBzdHJ1Y3R1cmUgc2V0LiBUaGlzIG1heSBiZSBhcHByb3hpbWF0ZS4KICAgICB2b2lkIGZp
bHRlcihjb25zdCBTdHJ1Y3R1cmVTZXQmKTsKIAotICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xv
dFZpc2l0b3ImKTsKLSAgICB2b2lkIG1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJik7CisgICAgREVD
TEFSRV9WSVNJVF9BR0dSRUdBVEU7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9p
ZCBtYXJrSWZDaGVhcChWaXNpdG9yJik7CiAgICAgYm9vbCBmaW5hbGl6ZShWTSYpOwogCiAgICAg
Ym9vbCBhcHBlbmRWYXJpYW50KGNvbnN0IENoZWNrUHJpdmF0ZUJyYW5kVmFyaWFudCYpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NoZWNrUHJpdmF0ZUJyYW5kVmFyaWFu
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NoZWNr
UHJpdmF0ZUJyYW5kVmFyaWFudC5jcHAJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9DaGVja1ByaXZhdGVCcmFuZFZhcmlhbnQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC01MSwxMSArNTEsMTUgQEAgYm9vbCBDaGVja1ByaXZhdGVCcmFuZFZhcmlhbnQ6
OmF0dGVtcHRUbwogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIENoZWNrUHJpdmF0ZUJyYW5k
VmFyaWFudDo6bWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBl
bmFtZSBWaXNpdG9yPgordm9pZCBDaGVja1ByaXZhdGVCcmFuZFZhcmlhbnQ6Om1hcmtJZkNoZWFw
KFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgbV9zdHJ1Y3R1cmVTZXQubWFya0lmQ2hlYXAodmlz
aXRvcik7CiB9CiAKK3RlbXBsYXRlIHZvaWQgQ2hlY2tQcml2YXRlQnJhbmRWYXJpYW50OjptYXJr
SWZDaGVhcChBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIENoZWNrUHJpdmF0
ZUJyYW5kVmFyaWFudDo6bWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImKTsKKwogYm9vbCBDaGVja1By
aXZhdGVCcmFuZFZhcmlhbnQ6OmZpbmFsaXplKFZNJiB2bSkKIHsKICAgICBpZiAoIW1fc3RydWN0
dXJlU2V0LmlzU3RpbGxBbGl2ZSh2bSkpCkBAIC02MywxMSArNjcsMTQgQEAgYm9vbCBDaGVja1By
aXZhdGVCcmFuZFZhcmlhbnQ6OmZpbmFsaXplKAogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lk
IENoZWNrUHJpdmF0ZUJyYW5kVmFyaWFudDo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImIHZp
c2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBDaGVja1ByaXZhdGVCcmFu
ZFZhcmlhbnQ6OnZpc2l0QWdncmVnYXRlSW1wbChWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIG1f
aWRlbnRpZmllci52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKIH0KIAorREVGSU5FX1ZJU0lUX0FH
R1JFR0FURShDaGVja1ByaXZhdGVCcmFuZFZhcmlhbnQpOworCiB2b2lkIENoZWNrUHJpdmF0ZUJy
YW5kVmFyaWFudDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAogewogICAgIGR1bXBJbkNv
bnRleHQob3V0LCBudWxscHRyKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9DaGVja1ByaXZhdGVCcmFuZFZhcmlhbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ2hlY2tQcml2YXRlQnJhbmRWYXJpYW50LmgJKHJldmlzaW9uIDI3
MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DaGVja1ByaXZhdGVCcmFu
ZFZhcmlhbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAogCiBuYW1lc3BhY2Ug
SlNDIHsKIAorY2xhc3MgQWJzdHJhY3RTbG90VmlzaXRvcjsKIGNsYXNzIENoZWNrUHJpdmF0ZUJy
YW5kU3RhdHVzOwogCiBjbGFzcyBDaGVja1ByaXZhdGVCcmFuZFZhcmlhbnQgewpAQCAtNDYsOCAr
NDcsOCBAQCBwdWJsaWM6CiAKICAgICBib29sIGF0dGVtcHRUb01lcmdlKGNvbnN0IENoZWNrUHJp
dmF0ZUJyYW5kVmFyaWFudCYgb3RoZXIpOwogCi0gICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShTbG90
VmlzaXRvciYpOwotICAgIHZvaWQgbWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImKTsKKyAgICBERUNM
QVJFX1ZJU0lUX0FHR1JFR0FURTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lk
IG1hcmtJZkNoZWFwKFZpc2l0b3ImKTsKICAgICBib29sIGZpbmFsaXplKFZNJik7CiAKICAgICB2
b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTAwMSw3ICsxMDAxLDggQEAgc2l6ZV90IENvZGVCbG9jazo6ZXN0aW1hdGVkU2l6ZShKU0NlbGwq
IAogICAgIHJldHVybiBCYXNlOjplc3RpbWF0ZWRTaXplKGNlbGwsIHZtKSArIGV4dHJhTWVtb3J5
QWxsb2NhdGVkOwogfQogCi12b2lkIENvZGVCbG9jazo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNl
bGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3Zv
aWQgQ29kZUJsb2NrOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZp
c2l0b3IpCiB7CiAgICAgQ29kZUJsb2NrKiB0aGlzT2JqZWN0ID0ganNDYXN0PENvZGVCbG9jayo+
KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygp
KTsKQEAgLTEwMTAsOSArMTAxMSwxNCBAQCB2b2lkIENvZGVCbG9jazo6dmlzaXRDaGlsZHJlbihK
U0NlbGwqIGNlCiAgICAgdGhpc09iamVjdC0+dmlzaXRDaGlsZHJlbih2aXNpdG9yKTsKIH0KIAot
dm9pZCBDb2RlQmxvY2s6OnZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCitERUZJ
TkVfVklTSVRfQ0hJTERSRU4oQ29kZUJsb2NrKTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRv
cj4KK3ZvaWQgQ29kZUJsb2NrOjp2aXNpdENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAg
ICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2spOworCisgICAgbV92aXNpdENoaWxk
cmVuU2tpcHBlZER1ZVRvT2xkQWdlID0gZmFsc2U7CiAgICAgaWYgKENvZGVCbG9jayogb3RoZXJC
bG9jayA9IHNwZWNpYWxPU1JFbnRyeUJsb2NrT3JOdWxsKCkpCiAgICAgICAgIHZpc2l0b3IuYXBw
ZW5kVW5iYXJyaWVyZWQob3RoZXJCbG9jayk7CiAKQEAgLTEwMjksMTMgKzEwMzUsMjEgQEAgdm9p
ZCBDb2RlQmxvY2s6OnZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0bwogICAgIFZNOjpTcGFjZUFuZFNl
dDo6c2V0Rm9yKCpzdWJzcGFjZSgpKS5hZGQodGhpcyk7CiB9CiAKLWJvb2wgQ29kZUJsb2NrOjpz
aG91bGRWaXNpdFN0cm9uZ2x5KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYgbG9ja2VyKQorYm9v
bCBDb2RlQmxvY2s6OnNob3VsZFZpc2l0U3Ryb25nbHkoY29uc3QgQ29uY3VycmVudEpTTG9ja2Vy
JiBsb2NrZXIsIEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgaWYgKE9wdGlv
bnM6OmZvcmNlQ29kZUJsb2NrTGl2ZW5lc3MoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAg
ICBpZiAoc2hvdWxkSmV0dGlzb25EdWVUb09sZEFnZShsb2NrZXIpKQorICAgIGlmIChzaG91bGRK
ZXR0aXNvbkR1ZVRvT2xkQWdlKGxvY2tlciwgdmlzaXRvcikpIHsKKyAgICAgICAgaWYgKE9wdGlv
bnM6OnZlcmlmeUdDKCkpCisgICAgICAgICAgICBtX3Zpc2l0Q2hpbGRyZW5Ta2lwcGVkRHVlVG9P
bGRBZ2UgPSB0cnVlOwogICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKFVO
TElLRUxZKG1fdmlzaXRDaGlsZHJlblNraXBwZWREdWVUb09sZEFnZSkpIHsKKyAgICAgICAgUkVM
RUFTRV9BU1NFUlQoT3B0aW9uczo6dmVyaWZ5R0MoKSk7IC8vIG1sYW0gQVNTRVJUPworICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQogCiAgICAgLy8gSW50ZXJwcmV0ZXIgYW5kIEJhc2VsaW5l
IEpJVCBDb2RlQmxvY2tzIGRvbid0IG5lZWQgdG8gYmUgamV0dGlzb25lZCB3aGVuCiAgICAgLy8g
dGhlaXIgd2VhayByZWZlcmVuY2VzIGdvIHN0YWxlLiBTbyBpZiBhIGJhc2xpbmUgSklUIENvZGVC
bG9jayBnZXRzCkBAIC0xMDg2LDkgKzExMDAsOSBAQCBzdGF0aWMgU2Vjb25kcyB0aW1lVG9MaXZl
KEpJVFR5cGUgaml0VHlwCiAgICAgfQogfQogCi1ib29sIENvZGVCbG9jazo6c2hvdWxkSmV0dGlz
b25EdWVUb09sZEFnZShjb25zdCBDb25jdXJyZW50SlNMb2NrZXImKQorYm9vbCBDb2RlQmxvY2s6
OnNob3VsZEpldHRpc29uRHVlVG9PbGRBZ2UoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgQWJz
dHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKLSAgICBpZiAobV92bS0+aGVhcC5pc01hcmtl
ZCh0aGlzKSkKKyAgICBpZiAodmlzaXRvci5pc01hcmtlZCh0aGlzKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCiAgICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OmZvcmNlQ29kZUJsb2NrVG9KZXR0
aXNvbkR1ZVRvT2xkQWdlKCkpKQpAQCAtMTEwMSwxMiArMTExNSwxMyBAQCBib29sIENvZGVCbG9j
azo6c2hvdWxkSmV0dGlzb25EdWVUb09sZEFnCiB9CiAKICNpZiBFTkFCTEUoREZHX0pJVCkKLXN0
YXRpYyBib29sIHNob3VsZE1hcmtUcmFuc2l0aW9uKFZNJiB2bSwgREZHOjpXZWFrUmVmZXJlbmNl
VHJhbnNpdGlvbiYgdHJhbnNpdGlvbikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+CitzdGF0
aWMgaW5saW5lIGJvb2wgc2hvdWxkTWFya1RyYW5zaXRpb24oVmlzaXRvciYgdmlzaXRvciwgREZH
OjpXZWFrUmVmZXJlbmNlVHJhbnNpdGlvbiYgdHJhbnNpdGlvbikKIHsKLSAgICBpZiAodHJhbnNp
dGlvbi5tX2NvZGVPcmlnaW4gJiYgIXZtLmhlYXAuaXNNYXJrZWQodHJhbnNpdGlvbi5tX2NvZGVP
cmlnaW4uZ2V0KCkpKQorICAgIGlmICh0cmFuc2l0aW9uLm1fY29kZU9yaWdpbiAmJiAhdmlzaXRv
ci5pc01hcmtlZCh0cmFuc2l0aW9uLm1fY29kZU9yaWdpbi5nZXQoKSkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICAKLSAgICBpZiAoIXZtLmhlYXAuaXNNYXJrZWQodHJhbnNpdGlvbi5tX2Zy
b20uZ2V0KCkpKQorICAgIGlmICghdmlzaXRvci5pc01hcmtlZCh0cmFuc2l0aW9uLm1fZnJvbS5n
ZXQoKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKICAgICByZXR1cm4gdHJ1ZTsKQEAg
LTExMjIsOCArMTEzNywxMCBAQCBCeXRlY29kZUluZGV4IENvZGVCbG9jazo6Ynl0ZWNvZGVJbmRl
eEZvCiB9CiAjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCiAKLXZvaWQgQ29kZUJsb2NrOjpwcm9w
YWdhdGVUcmFuc2l0aW9ucyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBTbG90VmlzaXRvciYg
dmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIENvZGVCbG9jazo6cHJv
cGFnYXRlVHJhbnNpdGlvbnMoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgVmlzaXRvciYgdmlz
aXRvcikKIHsKKyAgICB0eXBlbmFtZSBWaXNpdG9yOjpTdXBwcmVzc0dDVmVyaWZpZXJTY29wZSBz
dXBwcmVzc1Njb3BlKHZpc2l0b3IpOwogICAgIFZNJiB2bSA9ICptX3ZtOwogCiAgICAgaWYgKGpp
dFR5cGUoKSA9PSBKSVRUeXBlOjpJbnRlcnByZXRlclRodW5rKSB7CkBAIC0xMTMzLDggKzExNTAs
OSBAQCB2b2lkIENvZGVCbG9jazo6cHJvcGFnYXRlVHJhbnNpdGlvbnMoY29uCiAgICAgICAgICAg
ICAgICAgU3RydWN0dXJlSUQgbmV3U3RydWN0dXJlSUQgPSBtZXRhZGF0YS5tX25ld1N0cnVjdHVy
ZUlEOwogICAgICAgICAgICAgICAgIGlmICghb2xkU3RydWN0dXJlSUQgfHwgIW5ld1N0cnVjdHVy
ZUlEKQogICAgICAgICAgICAgICAgICAgICByZXR1cm47CisKICAgICAgICAgICAgICAgICBTdHJ1
Y3R1cmUqIG9sZFN0cnVjdHVyZSA9IHZtLmhlYXAuc3RydWN0dXJlSURUYWJsZSgpLmdldChvbGRT
dHJ1Y3R1cmVJRCk7Ci0gICAgICAgICAgICAgICAgaWYgKHZtLmhlYXAuaXNNYXJrZWQob2xkU3Ry
dWN0dXJlKSkgeworICAgICAgICAgICAgICAgIGlmICh2aXNpdG9yLmlzTWFya2VkKG9sZFN0cnVj
dHVyZSkpIHsKICAgICAgICAgICAgICAgICAgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSB2
bS5oZWFwLnN0cnVjdHVyZUlEVGFibGUoKS5nZXQobmV3U3RydWN0dXJlSUQpOwogICAgICAgICAg
ICAgICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKG5ld1N0cnVjdHVyZSk7CiAgICAg
ICAgICAgICAgICAgfQpAQCAtMTE0OCwxMSArMTE2NiwxMSBAQCB2b2lkIENvZGVCbG9jazo6cHJv
cGFnYXRlVHJhbnNpdGlvbnMoY29uCiAKICAgICAgICAgICAgICAgICBKU0NlbGwqIHByb3BlcnR5
ID0gbWV0YWRhdGEubV9wcm9wZXJ0eS5nZXQoKTsKICAgICAgICAgICAgICAgICBBU1NFUlQocHJv
cGVydHkpOwotICAgICAgICAgICAgICAgIGlmICghdm0uaGVhcC5pc01hcmtlZChwcm9wZXJ0eSkp
CisgICAgICAgICAgICAgICAgaWYgKCF2aXNpdG9yLmlzTWFya2VkKHByb3BlcnR5KSkKICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgICAgICAgICAgU3RydWN0dXJlKiBvbGRT
dHJ1Y3R1cmUgPSB2bS5oZWFwLnN0cnVjdHVyZUlEVGFibGUoKS5nZXQob2xkU3RydWN0dXJlSUQp
OwotICAgICAgICAgICAgICAgIGlmICh2bS5oZWFwLmlzTWFya2VkKG9sZFN0cnVjdHVyZSkpIHsK
KyAgICAgICAgICAgICAgICBpZiAodmlzaXRvci5pc01hcmtlZChvbGRTdHJ1Y3R1cmUpKSB7CiAg
ICAgICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0gdm0uaGVhcC5zdHJ1
Y3R1cmVJRFRhYmxlKCkuZ2V0KG5ld1N0cnVjdHVyZUlEKTsKICAgICAgICAgICAgICAgICAgICAg
dmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZChuZXdTdHJ1Y3R1cmUpOwogICAgICAgICAgICAgICAg
IH0KQEAgLTExNzAsNyArMTE4OCw3IEBAIHZvaWQgQ29kZUJsb2NrOjpwcm9wYWdhdGVUcmFuc2l0
aW9ucyhjb24KICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgICAgICAgICAg
U3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUgPSB2bS5oZWFwLnN0cnVjdHVyZUlEVGFibGUoKS5nZXQo
b2xkU3RydWN0dXJlSUQpOwotICAgICAgICAgICAgICAgIGlmICh2bS5oZWFwLmlzTWFya2VkKG9s
ZFN0cnVjdHVyZSkpIHsKKyAgICAgICAgICAgICAgICBpZiAodmlzaXRvci5pc01hcmtlZChvbGRT
dHJ1Y3R1cmUpKSB7CiAgICAgICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJl
ID0gdm0uaGVhcC5zdHJ1Y3R1cmVJRFRhYmxlKCkuZ2V0KG5ld1N0cnVjdHVyZUlEKTsKICAgICAg
ICAgICAgICAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZChuZXdTdHJ1Y3R1cmUpOwog
ICAgICAgICAgICAgICAgIH0KQEAgLTExOTcsNyArMTIxNSw3IEBAIHZvaWQgQ29kZUJsb2NrOjpw
cm9wYWdhdGVUcmFuc2l0aW9ucyhjb24KICAgICAgICAgICAgIHZtLmdldFN0cnVjdHVyZShzdHJ1
Y3R1cmVJRCktPm1hcmtJZkNoZWFwKHZpc2l0b3IpOwogCiAgICAgICAgIGZvciAoYXV0byYgdHJh
bnNpdGlvbiA6IGRmZ0NvbW1vbi0+dHJhbnNpdGlvbnMpIHsKLSAgICAgICAgICAgIGlmIChzaG91
bGRNYXJrVHJhbnNpdGlvbih2bSwgdHJhbnNpdGlvbikpIHsKKyAgICAgICAgICAgIGlmIChzaG91
bGRNYXJrVHJhbnNpdGlvbih2aXNpdG9yLCB0cmFuc2l0aW9uKSkgewogICAgICAgICAgICAgICAg
IC8vIElmIHRoZSBmb2xsb3dpbmcgdGhyZWUgdGhpbmdzIGFyZSBsaXZlLCB0aGVuIHRoZSB0YXJn
ZXQgb2YgdGhlCiAgICAgICAgICAgICAgICAgLy8gdHJhbnNpdGlvbiBpcyBhbHNvIGxpdmU6CiAg
ICAgICAgICAgICAgICAgLy8KQEAgLTEyMjQsMTMgKzEyNDIsMTcgQEAgdm9pZCBDb2RlQmxvY2s6
OnByb3BhZ2F0ZVRyYW5zaXRpb25zKGNvbgogI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQogfQog
Ci12b2lkIENvZGVCbG9jazo6ZGV0ZXJtaW5lTGl2ZW5lc3MoY29uc3QgQ29uY3VycmVudEpTTG9j
a2VyJiwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZSB2b2lkIENvZGVCbG9jazo6cHJv
cGFnYXRlVHJhbnNpdGlvbnMoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgQWJzdHJhY3RTbG90
VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBDb2RlQmxvY2s6OnByb3BhZ2F0ZVRyYW5zaXRpb25z
KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIFNsb3RWaXNpdG9yJik7CisKK3RlbXBsYXRlPHR5
cGVuYW1lIFZpc2l0b3I+Cit2b2lkIENvZGVCbG9jazo6ZGV0ZXJtaW5lTGl2ZW5lc3MoY29uc3Qg
Q29uY3VycmVudEpTTG9ja2VyJiwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBVTlVTRURfUEFS
QU0odmlzaXRvcik7CiAgICAgCiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAgVk0mIHZtID0gKm1f
dm07Ci0gICAgaWYgKHZtLmhlYXAuaXNNYXJrZWQodGhpcykpCisgICAgaWYgKHZpc2l0b3IuaXNN
YXJrZWQodGhpcykpCiAgICAgICAgIHJldHVybjsKICAgICAKICAgICAvLyBJbiByYXJlIGFuZCB3
ZWlyZCBjYXNlcywgdGhpcyBjb3VsZCBiZSBjYWxsZWQgb24gYSBiYXNlbGluZSBDb2RlQmxvY2su
IE9uZSB0aGF0IEkgZm91bmQgd2FzCkBAIC0xMjQ3LDcgKzEyNjksNyBAQCB2b2lkIENvZGVCbG9j
azo6ZGV0ZXJtaW5lTGl2ZW5lc3MoY29uc3QgCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGRmZ0NvbW1vbi0+d2Vha1JlZmVyZW5jZXMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgSlNDZWxs
KiByZWZlcmVuY2UgPSBkZmdDb21tb24tPndlYWtSZWZlcmVuY2VzW2ldLmdldCgpOwogICAgICAg
ICBBU1NFUlQoIWpzRHluYW1pY0Nhc3Q8Q29kZUJsb2NrKj4odm0sIHJlZmVyZW5jZSkpOwotICAg
ICAgICBpZiAoIXZtLmhlYXAuaXNNYXJrZWQocmVmZXJlbmNlKSkgeworICAgICAgICBpZiAoIXZp
c2l0b3IuaXNNYXJrZWQocmVmZXJlbmNlKSkgewogICAgICAgICAgICAgYWxsQXJlTGl2ZVNvRmFy
ID0gZmFsc2U7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtMTI1NSw3ICsxMjc3
LDcgQEAgdm9pZCBDb2RlQmxvY2s6OmRldGVybWluZUxpdmVuZXNzKGNvbnN0IAogICAgIGlmIChh
bGxBcmVMaXZlU29GYXIpIHsKICAgICAgICAgZm9yIChTdHJ1Y3R1cmVJRCBzdHJ1Y3R1cmVJRCA6
IGRmZ0NvbW1vbi0+d2Vha1N0cnVjdHVyZVJlZmVyZW5jZXMpIHsKICAgICAgICAgICAgIFN0cnVj
dHVyZSogc3RydWN0dXJlID0gdm0uZ2V0U3RydWN0dXJlKHN0cnVjdHVyZUlEKTsKLSAgICAgICAg
ICAgIGlmICghdm0uaGVhcC5pc01hcmtlZChzdHJ1Y3R1cmUpKSB7CisgICAgICAgICAgICBpZiAo
IXZpc2l0b3IuaXNNYXJrZWQoc3RydWN0dXJlKSkgewogICAgICAgICAgICAgICAgIGFsbEFyZUxp
dmVTb0ZhciA9IGZhbHNlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQpA
QCAtMTI3Myw2ICsxMjk1LDkgQEAgdm9pZCBDb2RlQmxvY2s6OmRldGVybWluZUxpdmVuZXNzKGNv
bnN0IAogI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQogfQogCit0ZW1wbGF0ZSB2b2lkIENvZGVC
bG9jazo6ZGV0ZXJtaW5lTGl2ZW5lc3MoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgQWJzdHJh
Y3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBDb2RlQmxvY2s6OmRldGVybWluZUxpdmVu
ZXNzKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIFNsb3RWaXNpdG9yJik7CisKIHZvaWQgQ29k
ZUJsb2NrOjpmaW5hbGl6ZUxMSW50SW5saW5lQ2FjaGVzKCkKIHsKICAgICBWTSYgdm0gPSAqbV92
bTsKQEAgLTE2MTYsNiArMTY0MSw3IEBAIHZvaWQgQ29kZUJsb2NrOjpmaW5hbGl6ZVVuY29uZGl0
aW9uYWxseSgKICAgICB1cGRhdGVBY3Rpdml0eSgpOwogCiAgICAgVk06OlNwYWNlQW5kU2V0Ojpz
ZXRGb3IoKnN1YnNwYWNlKCkpLnJlbW92ZSh0aGlzKTsKKyAgICBtX3Zpc2l0Q2hpbGRyZW5Ta2lw
cGVkRHVlVG9PbGRBZ2UgPSBmYWxzZTsKIH0KIAogdm9pZCBDb2RlQmxvY2s6OmRlc3Ryb3koSlND
ZWxsKiBjZWxsKQpAQCAtMTgwOCw3ICsxODM0LDggQEAgdm9pZCBDb2RlQmxvY2s6OnJlc2V0SklU
RGF0YSgpCiB9CiAjZW5kaWYKIAotdm9pZCBDb2RlQmxvY2s6OnZpc2l0T1NSRXhpdFRhcmdldHMo
Y29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0
ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBDb2RlQmxvY2s6OnZpc2l0T1NSRXhpdFRhcmdldHMo
Y29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICAvLyBX
ZSBzdHJvbmdseSB2aXNpdCBPU1IgZXhpdHMgdGFyZ2V0cyBiZWNhdXNlIHdlIGRvbid0IHdhbnQg
dG8gZGVhbCB3aXRoCiAgICAgLy8gdGhlIGNvbXBsZXhpdHkgb2YgZ2VuZXJhdGluZyBhbiBleGl0
IHRhcmdldCBDb2RlQmxvY2sgb24gZGVtYW5kIGFuZApAQCAtMTgyOCw3ICsxODU1LDggQEAgdm9p
ZCBDb2RlQmxvY2s6OnZpc2l0T1NSRXhpdFRhcmdldHMoY29ucwogI2VuZGlmCiB9CiAKLXZvaWQg
Q29kZUJsb2NrOjpzdHJvbmdseVZpc2l0U3Ryb25nUmVmZXJlbmNlcyhjb25zdCBDb25jdXJyZW50
SlNMb2NrZXImIGxvY2tlciwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBWaXNpdG9yPgordm9pZCBDb2RlQmxvY2s6OnN0cm9uZ2x5VmlzaXRTdHJvbmdSZWZlcmVuY2Vz
KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYgbG9ja2VyLCBWaXNpdG9yJiB2aXNpdG9yKQogewog
ICAgIFVOVVNFRF9QQVJBTShsb2NrZXIpOwogICAgIApAQCAtMTg2NCw3ICsxODkyLDggQEAgdm9p
ZCBDb2RlQmxvY2s6OnN0cm9uZ2x5VmlzaXRTdHJvbmdSZWZlcgogI2VuZGlmCiB9CiAKLXZvaWQg
Q29kZUJsb2NrOjpzdHJvbmdseVZpc2l0V2Vha1JlZmVyZW5jZXMoY29uc3QgQ29uY3VycmVudEpT
TG9ja2VyJiwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
Pgordm9pZCBDb2RlQmxvY2s6OnN0cm9uZ2x5VmlzaXRXZWFrUmVmZXJlbmNlcyhjb25zdCBDb25j
dXJyZW50SlNMb2NrZXImLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFVOVVNFRF9QQVJBTSh2
aXNpdG9yKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9j
ay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxv
Y2suaAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAwOC0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAwOC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
IENvcHlyaWdodCAoQykgMjAwOCBDYW1lcm9uIFp3YXJpY2ggPGN3endhcmljaEB1d2F0ZXJsb28u
Y2E+CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0yMDEsMTAgKzIwMSwxMCBAQCBwdWJsaWM6CiAgICAg
Ly8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyMzY3NwogICAgIENv
ZGVCbG9jayogYmFzZWxpbmVWZXJzaW9uKCk7CiAKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVO
OworCiAgICAgc3RhdGljIHNpemVfdCBlc3RpbWF0ZWRTaXplKEpTQ2VsbCosIFZNJik7Ci0gICAg
c3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwogICAgIHN0
YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7Ci0gICAgdm9pZCB2aXNpdENoaWxkcmVuKFNsb3RW
aXNpdG9yJik7CiAgICAgdm9pZCBmaW5hbGl6ZVVuY29uZGl0aW9uYWxseShWTSYpOwogCiAgICAg
dm9pZCBub3RpZnlMZXhpY2FsQmluZGluZ1VwZGF0ZSgpOwpAQCAtOTQzLDYgKzk0Myw4IEBAIHBy
aXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIENvZGVCbG9ja1NldDsKICAgICBmcmllbmQgY2xhc3Mg
RXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZTsKIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0
b3I+IEFMV0FZU19JTkxJTkUgdm9pZCB2aXNpdENoaWxkcmVuKFZpc2l0b3ImKTsKKwogICAgIEJ5
dGVjb2RlTGl2ZW5lc3NBbmFseXNpcyYgbGl2ZW5lc3NBbmFseXNpc1Nsb3coKTsKICAgICAKICAg
ICBDb2RlQmxvY2sqIHNwZWNpYWxPU1JFbnRyeUJsb2NrT3JOdWxsKCk7CkBAIC05NjMsMTYgKzk2
NSwxNiBAQCBwcml2YXRlOgogICAgICAgICBtX2NvbnN0YW50UmVnaXN0ZXJzW3JlZy50b0NvbnN0
YW50SW5kZXgoKV0uc2V0KCptX3ZtLCB0aGlzLCB2YWx1ZSk7CiAgICAgfQogCi0gICAgYm9vbCBz
aG91bGRWaXNpdFN0cm9uZ2x5KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYpOworICAgIGJvb2wg
c2hvdWxkVmlzaXRTdHJvbmdseShjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBBYnN0cmFjdFNs
b3RWaXNpdG9yJik7CiAgICAgYm9vbCBzaG91bGRKZXR0aXNvbkR1ZVRvV2Vha1JlZmVyZW5jZShW
TSYpOwotICAgIGJvb2wgc2hvdWxkSmV0dGlzb25EdWVUb09sZEFnZShjb25zdCBDb25jdXJyZW50
SlNMb2NrZXImKTsKKyAgICBib29sIHNob3VsZEpldHRpc29uRHVlVG9PbGRBZ2UoY29uc3QgQ29u
Y3VycmVudEpTTG9ja2VyJiwgQWJzdHJhY3RTbG90VmlzaXRvciYpOwogICAgIAotICAgIHZvaWQg
cHJvcGFnYXRlVHJhbnNpdGlvbnMoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgU2xvdFZpc2l0
b3ImKTsKLSAgICB2b2lkIGRldGVybWluZUxpdmVuZXNzKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tl
ciYsIFNsb3RWaXNpdG9yJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCBw
cm9wYWdhdGVUcmFuc2l0aW9ucyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBWaXNpdG9yJik7
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCBkZXRlcm1pbmVMaXZlbmVzcyhj
b25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBWaXNpdG9yJik7CiAgICAgICAgIAotICAgIHZvaWQg
c3Ryb25nbHlWaXNpdFN0cm9uZ1JlZmVyZW5jZXMoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwg
U2xvdFZpc2l0b3ImKTsKLSAgICB2b2lkIHN0cm9uZ2x5VmlzaXRXZWFrUmVmZXJlbmNlcyhjb25z
dCBDb25jdXJyZW50SlNMb2NrZXImLCBTbG90VmlzaXRvciYpOwotICAgIHZvaWQgdmlzaXRPU1JF
eGl0VGFyZ2V0cyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBTbG90VmlzaXRvciYpOworICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgc3Ryb25nbHlWaXNpdFN0cm9uZ1JlZmVy
ZW5jZXMoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgVmlzaXRvciYpOworICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgc3Ryb25nbHlWaXNpdFdlYWtSZWZlcmVuY2VzKGNvbnN0
IENvbmN1cnJlbnRKU0xvY2tlciYsIFZpc2l0b3ImKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPiB2b2lkIHZpc2l0T1NSRXhpdFRhcmdldHMoY29uc3QgQ29uY3VycmVudEpTTG9ja2Vy
JiwgVmlzaXRvciYpOwogCiAgICAgdW5zaWduZWQgbnVtYmVyT2ZOb25Bcmd1bWVudFZhbHVlUHJv
ZmlsZXMoKSB7IHJldHVybiBtX251bWJlck9mTm9uQXJndW1lbnRWYWx1ZVByb2ZpbGVzOyB9CiAg
ICAgdW5zaWduZWQgdG90YWxOdW1iZXJPZlZhbHVlUHJvZmlsZXMoKSB7IHJldHVybiBudW1iZXJP
ZkFyZ3VtZW50VmFsdWVQcm9maWxlcygpICsgbnVtYmVyT2ZOb25Bcmd1bWVudFZhbHVlUHJvZmls
ZXMoKTsgfQpAQCAtMTAxMSw2ICsxMDEzLDcgQEAgcHJpdmF0ZToKICAgICB1bnNpZ25lZCBtX2J5
dGVjb2RlQ29zdCB7IDAgfTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgbV9zY29wZVJlZ2lzdGVyOwog
ICAgIG11dGFibGUgQ29kZUJsb2NrSGFzaCBtX2hhc2g7CisgICAgYm9vbCBtX3Zpc2l0Q2hpbGRy
ZW5Ta2lwcGVkRHVlVG9PbGRBZ2UgeyBmYWxzZSB9OwogCiAgICAgV3JpdGVCYXJyaWVyPFVubGlu
a2VkQ29kZUJsb2NrPiBtX3VubGlua2VkQ29kZTsKICAgICBXcml0ZUJhcnJpZXI8U2NyaXB0RXhl
Y3V0YWJsZT4gbV9vd25lckV4ZWN1dGFibGU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvRGVsZXRlQnlJZFZhcmlhbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9EZWxldGVCeUlkVmFyaWFudC5jcHAJKHJldmlzaW9uIDI3Mjkw
MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9EZWxldGVCeUlkVmFyaWFudC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAy
MC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtODgsMTIgKzg4LDE2IEBAIGJvb2wgRGVsZXRlQnlJZFZhcmlhbnQ6
OndyaXRlc1N0cnVjdHVyZXMKICAgICByZXR1cm4gISFuZXdTdHJ1Y3R1cmUoKTsKIH0KIAotdm9p
ZCBEZWxldGVCeUlkVmFyaWFudDo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3Ip
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBEZWxldGVCeUlkVmFyaWFudDo6dmlz
aXRBZ2dyZWdhdGVJbXBsKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgbV9pZGVudGlmaWVyLnZp
c2l0QWdncmVnYXRlKHZpc2l0b3IpOwogfQogCi12b2lkIERlbGV0ZUJ5SWRWYXJpYW50OjptYXJr
SWZDaGVhcChTbG90VmlzaXRvciYgdmlzaXRvcikKK0RFRklORV9WSVNJVF9BR0dSRUdBVEUoRGVs
ZXRlQnlJZFZhcmlhbnQpOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBEZWxl
dGVCeUlkVmFyaWFudDo6bWFya0lmQ2hlYXAoVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBpZiAo
bV9vbGRTdHJ1Y3R1cmUpCiAgICAgICAgIG1fb2xkU3RydWN0dXJlLT5tYXJrSWZDaGVhcCh2aXNp
dG9yKTsKQEAgLTEwMSw2ICsxMDUsOSBAQCB2b2lkIERlbGV0ZUJ5SWRWYXJpYW50OjptYXJrSWZD
aGVhcChTbG90CiAgICAgICAgIG1fbmV3U3RydWN0dXJlLT5tYXJrSWZDaGVhcCh2aXNpdG9yKTsK
IH0KIAordGVtcGxhdGUgdm9pZCBEZWxldGVCeUlkVmFyaWFudDo6bWFya0lmQ2hlYXAoQWJzdHJh
Y3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBEZWxldGVCeUlkVmFyaWFudDo6bWFya0lm
Q2hlYXAoU2xvdFZpc2l0b3ImKTsKKwogdm9pZCBEZWxldGVCeUlkVmFyaWFudDo6ZHVtcChQcmlu
dFN0cmVhbSYgb3V0KSBjb25zdAogewogICAgIGR1bXBJbkNvbnRleHQob3V0LCBudWxscHRyKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9EZWxldGVCeUlkVmFyaWFudC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9EZWxldGVCeUlk
VmFyaWFudC5oCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvRGVsZXRlQnlJZFZhcmlhbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDIwLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02MSw4ICs2MSw4IEBAIHB1
YmxpYzoKIAogICAgIGJvb2wgYXR0ZW1wdFRvTWVyZ2UoY29uc3QgRGVsZXRlQnlJZFZhcmlhbnQm
IG90aGVyKTsKIAotICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImKTsKLSAgICB2
b2lkIG1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9BR0dSRUdB
VEU7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCBtYXJrSWZDaGVhcChWaXNp
dG9yJik7CiAgICAgYm9vbCBmaW5hbGl6ZShWTSYpOwogCiAgICAgdm9pZCBkdW1wKFByaW50U3Ry
ZWFtJikgY29uc3Q7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRGVsZXRl
QnlTdGF0dXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9EZWxldGVCeVN0YXR1cy5jcHAJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9EZWxldGVCeVN0YXR1cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMC0yMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjU0LDE4
ICsyNTQsMjUgQEAgQ2FjaGVhYmxlSWRlbnRpZmllciBEZWxldGVCeVN0YXR1czo6c2luZwogICAg
IHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQgRGVsZXRlQnlTdGF0dXM6OnZpc2l0QWdncmVnYXRl
KFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQg
RGVsZXRlQnlTdGF0dXM6OnZpc2l0QWdncmVnYXRlSW1wbChWaXNpdG9yJiB2aXNpdG9yKQogewog
ICAgIGZvciAoRGVsZXRlQnlJZFZhcmlhbnQmIHZhcmlhbnQgOiBtX3ZhcmlhbnRzKQogICAgICAg
ICB2YXJpYW50LnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOwogfQogCi12b2lkIERlbGV0ZUJ5U3Rh
dHVzOjptYXJrSWZDaGVhcChTbG90VmlzaXRvciYgdmlzaXRvcikKK0RFRklORV9WSVNJVF9BR0dS
RUdBVEUoRGVsZXRlQnlTdGF0dXMpOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9p
ZCBEZWxldGVCeVN0YXR1czo6bWFya0lmQ2hlYXAoVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBm
b3IgKERlbGV0ZUJ5SWRWYXJpYW50JiB2YXJpYW50IDogbV92YXJpYW50cykKICAgICAgICAgdmFy
aWFudC5tYXJrSWZDaGVhcCh2aXNpdG9yKTsKIH0KIAordGVtcGxhdGUgdm9pZCBEZWxldGVCeVN0
YXR1czo6bWFya0lmQ2hlYXAoQWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBE
ZWxldGVCeVN0YXR1czo6bWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImKTsKKwogYm9vbCBEZWxldGVC
eVN0YXR1czo6ZmluYWxpemUoVk0mIHZtKQogewogICAgIGZvciAoYXV0byYgdmFyaWFudCA6IG1f
dmFyaWFudHMpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9EZWxldGVC
eVN0YXR1cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9E
ZWxldGVCeVN0YXR1cy5oCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvRGVsZXRlQnlTdGF0dXMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIwLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC04MSw4ICs4MSw4IEBA
IHB1YmxpYzoKICAgICAvLyBBdHRlbXB0cyB0byByZWR1Y2UgdGhlIHNldCBvZiB2YXJpYW50cyB0
byBmaXQgdGhlIGdpdmVuIHN0cnVjdHVyZSBzZXQuIFRoaXMgbWF5IGJlIGFwcHJveGltYXRlLgog
ICAgIHZvaWQgZmlsdGVyKGNvbnN0IFN0cnVjdHVyZVNldCYpOwogCi0gICAgdm9pZCB2aXNpdEFn
Z3JlZ2F0ZShTbG90VmlzaXRvciYpOwotICAgIHZvaWQgbWFya0lmQ2hlYXAoU2xvdFZpc2l0b3Im
KTsKKyAgICBERUNMQVJFX1ZJU0lUX0FHR1JFR0FURTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPiB2b2lkIG1hcmtJZkNoZWFwKFZpc2l0b3ImKTsKICAgICBib29sIGZpbmFsaXplKFZN
Jik7CiAKICAgICBib29sIGFwcGVuZFZhcmlhbnQoY29uc3QgRGVsZXRlQnlJZFZhcmlhbnQmKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9EaXJlY3RFdmFsQ29kZUNhY2hl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRGlyZWN0
RXZhbENvZGVDYWNoZS5jcHAJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9EaXJlY3RFdmFsQ29kZUNhY2hlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00NSw3
ICs0NSw4IEBAIHZvaWQgRGlyZWN0RXZhbENvZGVDYWNoZTo6Y2xlYXIoKQogICAgIG1fY2FjaGVN
YXAuY2xlYXIoKTsKIH0KIAotdm9pZCBEaXJlY3RFdmFsQ29kZUNhY2hlOjp2aXNpdEFnZ3JlZ2F0
ZShTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lk
IERpcmVjdEV2YWxDb2RlQ2FjaGU6OnZpc2l0QWdncmVnYXRlSW1wbChWaXNpdG9yJiB2aXNpdG9y
KQogewogICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fbG9jayk7CiAgICAgRXZhbENhY2hlTWFwOjpp
dGVyYXRvciBlbmQgPSBtX2NhY2hlTWFwLmVuZCgpOwpAQCAtNTMsNSArNTQsNiBAQCB2b2lkIERp
cmVjdEV2YWxDb2RlQ2FjaGU6OnZpc2l0QWdncmVnYXRlCiAgICAgICAgIHZpc2l0b3IuYXBwZW5k
KHB0ci0+dmFsdWUpOwogfQogCi19IC8vIG5hbWVzcGFjZSBKU0MKK0RFRklORV9WSVNJVF9BR0dS
RUdBVEUoRGlyZWN0RXZhbENvZGVDYWNoZSk7CiAKK30gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0RpcmVjdEV2YWxDb2RlQ2FjaGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRGlyZWN0RXZhbENvZGVD
YWNoZS5oCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvRGlyZWN0RXZhbENvZGVDYWNoZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAwOC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtOTcsNyArOTcsNyBA
QCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVy
biBtX2NhY2hlTWFwLmlzRW1wdHkoKTsgfQogCi0gICAgICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUo
U2xvdFZpc2l0b3ImKTsKKyAgICAgICAgREVDTEFSRV9WSVNJVF9BR0dSRUdBVEU7CiAKICAgICAg
ICAgdm9pZCBjbGVhcigpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
RXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UuY3BwCShyZXZpc2lv
biAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhlY3V0YWJsZVRv
Q29kZUJsb2NrRWRnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxOC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTMsNyArNTMsOCBAQCB2b2lkIEV4ZWN1
dGFibGVUb0NvZGVCbG9ja0VkZ2U6OmZpbmlzaENyCiAgICAgQVNTRVJUKCFpc0FjdGl2ZSgpKTsK
IH0KIAotdm9pZCBFeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlOjp2aXNpdENoaWxkcmVuKEpTQ2Vs
bCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
Pgordm9pZCBFeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlOjp2aXNpdENoaWxkcmVuSW1wbChKU0Nl
bGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgVk0mIHZtID0gdmlzaXRvci52bSgp
OwogICAgIEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UqIGVkZ2UgPSBqc0Nhc3Q8RXhlY3V0YWJs
ZVRvQ29kZUJsb2NrRWRnZSo+KGNlbGwpOwpAQCAtNjEsNyArNjIsNyBAQCB2b2lkIEV4ZWN1dGFi
bGVUb0NvZGVCbG9ja0VkZ2U6OnZpc2l0Q2hpCiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbihjZWxs
LCB2aXNpdG9yKTsKIAogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gZWRnZS0+bV9jb2RlQmxv
Y2suZ2V0KCk7Ci0gICAgCisKICAgICAvLyBJdCdzIHBvc3NpYmxlIGZvciBzb21lb25lIHRvIGhv
bGQgYSBwb2ludGVyIHRvIHRoZSBlZGdlIGFmdGVyIHRoZSBlZGdlIGhhcyBjbGVhcmVkIGl0cyB3
ZWFrCiAgICAgLy8gcmVmZXJlbmNlIHRvIHRoZSBjb2RlQmxvY2suIEluIGEgY29uc2VydmF0aXZl
IEdDIGxpa2Ugb3VycywgdGhhdCBjb3VsZCBoYXBwZW4gYXQgcmFuZG9tIGZvcgogICAgIC8vIG5v
IGdvb2QgcmVhc29uIGFuZCBpdCdzIFRvdGFsbHkgT0sgKFRNKS4gU2VlIGZpbmFsaXplVW5jb25k
aXRpb25hbGx5KCkgZm9yIHdoZXJlIHdlIGNsZWFyCkBAIC03NSwxMSArNzYsMTEgQEAgdm9pZCBF
eGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlOjp2aXNpdENoaQogICAgIH0KICAgICAKICAgICBDb25j
dXJyZW50SlNMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrKTsKLSAgICAKLSAgICBpZiAo
Y29kZUJsb2NrLT5zaG91bGRWaXNpdFN0cm9uZ2x5KGxvY2tlcikpCisKKyAgICBpZiAoY29kZUJs
b2NrLT5zaG91bGRWaXNpdFN0cm9uZ2x5KGxvY2tlciwgdmlzaXRvcikpCiAgICAgICAgIHZpc2l0
b3IuYXBwZW5kVW5iYXJyaWVyZWQoY29kZUJsb2NrKTsKICAgICAKLSAgICBpZiAoIXZtLmhlYXAu
aXNNYXJrZWQoY29kZUJsb2NrKSkKKyAgICBpZiAoIXZpc2l0b3IuaXNNYXJrZWQoY29kZUJsb2Nr
KSkKICAgICAgICAgdm0uZXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZXNXaXRoRmluYWxpemVycy5h
ZGQoZWRnZSk7CiAgICAgCiAgICAgaWYgKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChjb2RlQmxv
Y2stPmppdFR5cGUoKSkpIHsKQEAgLTExNyw3ICsxMTgsMTAgQEAgdm9pZCBFeGVjdXRhYmxlVG9D
b2RlQmxvY2tFZGdlOjp2aXNpdENoaQogICAgIGVkZ2UtPnJ1bkNvbnN0cmFpbnQobG9ja2VyLCB2
bSwgdmlzaXRvcik7CiB9CiAKLXZvaWQgRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZTo6dmlzaXRP
dXRwdXRDb25zdHJhaW50cyhKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorREVG
SU5FX1ZJU0lUX0NISUxEUkVOKEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UpOworCit0ZW1wbGF0
ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBFeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlOjp2aXNp
dE91dHB1dENvbnN0cmFpbnRzSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7
CiAgICAgVk0mIHZtID0gdmlzaXRvci52bSgpOwogICAgIEV4ZWN1dGFibGVUb0NvZGVCbG9ja0Vk
Z2UqIGVkZ2UgPSBqc0Nhc3Q8RXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZSo+KGNlbGwpOwpAQCAt
MTI1LDYgKzEyOSw4IEBAIHZvaWQgRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZTo6dmlzaXRPdXQK
ICAgICBlZGdlLT5ydW5Db25zdHJhaW50KE5vTG9ja2luZ05lY2Vzc2FyeSwgdm0sIHZpc2l0b3Ip
OwogfQogCitERUZJTkVfVklTSVRfT1VUUFVUX0NPTlNUUkFJTlRTKEV4ZWN1dGFibGVUb0NvZGVC
bG9ja0VkZ2UpOworCiB2b2lkIEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2U6OmZpbmFsaXplVW5j
b25kaXRpb25hbGx5KFZNJiB2bSkKIHsKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IG1fY29k
ZUJsb2NrLmdldCgpOwpAQCAtMTg2LDE2ICsxOTIsMjEgQEAgRXhlY3V0YWJsZVRvQ29kZUJsb2Nr
RWRnZTo6RXhlY3V0YWJsZVRvQwogewogfQogCi12b2lkIEV4ZWN1dGFibGVUb0NvZGVCbG9ja0Vk
Z2U6OnJ1bkNvbnN0cmFpbnQoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiBsb2NrZXIsIFZNJiB2
bSwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9p
ZCBFeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlOjpydW5Db25zdHJhaW50KGNvbnN0IENvbmN1cnJl
bnRKU0xvY2tlciYgbG9ja2VyLCBWTSYgdm0sIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgQ29k
ZUJsb2NrKiBjb2RlQmxvY2sgPSBtX2NvZGVCbG9jay5nZXQoKTsKICAgICAKICAgICBjb2RlQmxv
Y2stPnByb3BhZ2F0ZVRyYW5zaXRpb25zKGxvY2tlciwgdmlzaXRvcik7CiAgICAgY29kZUJsb2Nr
LT5kZXRlcm1pbmVMaXZlbmVzcyhsb2NrZXIsIHZpc2l0b3IpOwotICAgIAotICAgIGlmICh2bS5o
ZWFwLmlzTWFya2VkKGNvZGVCbG9jaykpCisKKyAgICBpZiAodmlzaXRvci5pc01hcmtlZChjb2Rl
QmxvY2spKQogICAgICAgICB2bS5leGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlc1dpdGhDb25zdHJh
aW50cy5yZW1vdmUodGhpcyk7CiB9CiAKK3RlbXBsYXRlIHZvaWQgRXhlY3V0YWJsZVRvQ29kZUJs
b2NrRWRnZTo6cnVuQ29uc3RyYWludChjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBWTSYsIEFi
c3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgRXhlY3V0YWJsZVRvQ29kZUJsb2Nr
RWRnZTo6cnVuQ29uc3RyYWludChjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBWTSYsIFNsb3RW
aXNpdG9yJik7CisKKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9FeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGFibGVUb0NvZGVCbG9ja0Vk
Z2UuaAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0V4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTUzLDkgKzUz
LDkgQEAgcHVibGljOgogICAgIERFQ0xBUkVfSU5GTzsKIAogICAgIENvZGVCbG9jayogY29kZUJs
b2NrKCkgY29uc3QgeyByZXR1cm4gbV9jb2RlQmxvY2suZ2V0KCk7IH0KLSAgICAKLSAgICBzdGF0
aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7Ci0gICAgc3RhdGlj
IHZvaWQgdmlzaXRPdXRwdXRDb25zdHJhaW50cyhKU0NlbGwqLCBTbG90VmlzaXRvciYpOworCisg
ICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKKyAgICBERUNMQVJFX1ZJU0lUX09VVFBVVF9DT05T
VFJBSU5UUzsKICAgICB2b2lkIGZpbmFsaXplVW5jb25kaXRpb25hbGx5KFZNJik7CiAgICAgCiAg
ICAgc3RhdGljIENvZGVCbG9jayogdW53cmFwKEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UqIGVk
Z2UpCkBAIC04MSw5ICs4MSw5IEBAIHByaXZhdGU6CiAgICAgdm9pZCBhY3RpdmF0ZSgpOwogICAg
IHZvaWQgZGVhY3RpdmF0ZSgpOwogICAgIGJvb2wgaXNBY3RpdmUoKSBjb25zdDsKLSAgICAKLSAg
ICB2b2lkIHJ1bkNvbnN0cmFpbnQoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgVk0mLCBTbG90
VmlzaXRvciYpOwotICAgIAorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCBy
dW5Db25zdHJhaW50KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIFZNJiwgVmlzaXRvciYpOwor
CiAgICAgV3JpdGVCYXJyaWVyPENvZGVCbG9jaz4gbV9jb2RlQmxvY2s7CiB9OwogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFZhcmlhbnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkVmFyaWFudC5jcHAJ
KHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRC
eUlkVmFyaWFudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDE0LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE0LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xNTYsMTYgKzE1NiwyMyBAQCBib29s
IEdldEJ5SWRWYXJpYW50OjphdHRlbXB0VG9NZXJnZShjb25zCiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKLXZvaWQgR2V0QnlJZFZhcmlhbnQ6OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJiB2aXNp
dG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgR2V0QnlJZFZhcmlhbnQ6OnZp
c2l0QWdncmVnYXRlSW1wbChWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIG1faWRlbnRpZmllci52
aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKIH0KIAotdm9pZCBHZXRCeUlkVmFyaWFudDo6bWFya0lm
Q2hlYXAoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCitERUZJTkVfVklTSVRfQUdHUkVHQVRFKEdldEJ5
SWRWYXJpYW50KTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgR2V0QnlJZFZh
cmlhbnQ6Om1hcmtJZkNoZWFwKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgbV9zdHJ1Y3R1cmVT
ZXQubWFya0lmQ2hlYXAodmlzaXRvcik7CiB9CiAKK3RlbXBsYXRlIHZvaWQgR2V0QnlJZFZhcmlh
bnQ6Om1hcmtJZkNoZWFwKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgR2V0
QnlJZFZhcmlhbnQ6Om1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJik7CisKIGJvb2wgR2V0QnlJZFZh
cmlhbnQ6OmZpbmFsaXplKFZNJiB2bSkKIHsKICAgICBpZiAoIW1fc3RydWN0dXJlU2V0LmlzU3Rp
bGxBbGl2ZSh2bSkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJ
ZFZhcmlhbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
R2V0QnlJZFZhcmlhbnQuaAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0dldEJ5SWRWYXJpYW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03Nyw4ICs3
Nyw4IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgYXR0ZW1wdFRvTWVyZ2UoY29uc3QgR2V0QnlJZFZh
cmlhbnQmIG90aGVyKTsKICAgICAKLSAgICB2b2lkIHZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9y
Jik7Ci0gICAgdm9pZCBtYXJrSWZDaGVhcChTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklT
SVRfQUdHUkVHQVRFOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgbWFya0lm
Q2hlYXAoVmlzaXRvciYpOwogICAgIGJvb2wgZmluYWxpemUoVk0mKTsKICAgICAKICAgICB2b2lk
IGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9HZXRCeVN0YXR1cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0dldEJ5U3RhdHVzLmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5U3RhdHVzLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTUzMCw3ICs1MzAsOCBAQCB2b2lkIEdldEJ5U3RhdHVzOjpmaWx0ZXIoY29uc3QgU3RydWN0
dXJlCiAgICAgICAgIG1fc3RhdGUgPSBOb0luZm9ybWF0aW9uOwogfQogCi12b2lkIEdldEJ5U3Rh
dHVzOjp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVu
YW1lIFZpc2l0b3I+Cit2b2lkIEdldEJ5U3RhdHVzOjp2aXNpdEFnZ3JlZ2F0ZUltcGwoVmlzaXRv
ciYgdmlzaXRvcikKIHsKICAgICBpZiAoaXNNb2R1bGVOYW1lc3BhY2UoKSkKICAgICAgICAgbV9t
b2R1bGVOYW1lc3BhY2VEYXRhLT5tX2lkZW50aWZpZXIudmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7
CkBAIC01MzgsMTIgKzUzOSwxOCBAQCB2b2lkIEdldEJ5U3RhdHVzOjp2aXNpdEFnZ3JlZ2F0ZShT
bG90VmlzCiAgICAgICAgIHZhcmlhbnQudmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7CiB9CiAKLXZv
aWQgR2V0QnlTdGF0dXM6Om1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorREVGSU5F
X1ZJU0lUX0FHR1JFR0FURShHZXRCeVN0YXR1cyk7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0
b3I+Cit2b2lkIEdldEJ5U3RhdHVzOjptYXJrSWZDaGVhcChWaXNpdG9yJiB2aXNpdG9yKQogewog
ICAgIGZvciAoR2V0QnlJZFZhcmlhbnQmIHZhcmlhbnQgOiBtX3ZhcmlhbnRzKQogICAgICAgICB2
YXJpYW50Lm1hcmtJZkNoZWFwKHZpc2l0b3IpOwogfQogCit0ZW1wbGF0ZSB2b2lkIEdldEJ5U3Rh
dHVzOjptYXJrSWZDaGVhcChBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEdl
dEJ5U3RhdHVzOjptYXJrSWZDaGVhcChTbG90VmlzaXRvciYpOworCiBib29sIEdldEJ5U3RhdHVz
OjpmaW5hbGl6ZShWTSYgdm0pCiB7CiAgICAgZm9yIChHZXRCeUlkVmFyaWFudCYgdmFyaWFudCA6
IG1fdmFyaWFudHMpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRC
eVN0YXR1cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9H
ZXRCeVN0YXR1cy5oCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvR2V0QnlTdGF0dXMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTExOCw4ICsxMTgsOCBA
QCBwdWJsaWM6CiAgICAgSlNNb2R1bGVFbnZpcm9ubWVudCogbW9kdWxlRW52aXJvbm1lbnQoKSBj
b25zdCB7IHJldHVybiBtX21vZHVsZU5hbWVzcGFjZURhdGEtPm1fbW9kdWxlRW52aXJvbm1lbnQ7
IH0KICAgICBTY29wZU9mZnNldCBzY29wZU9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fbW9kdWxl
TmFtZXNwYWNlRGF0YS0+bV9zY29wZU9mZnNldDsgfQogICAgIAotICAgIHZvaWQgdmlzaXRBZ2dy
ZWdhdGUoU2xvdFZpc2l0b3ImKTsKLSAgICB2b2lkIG1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJik7
CisgICAgREVDTEFSRV9WSVNJVF9BR0dSRUdBVEU7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlz
aXRvcj4gdm9pZCBtYXJrSWZDaGVhcChWaXNpdG9yJik7CiAgICAgYm9vbCBmaW5hbGl6ZShWTSYp
OyAvLyBSZXR1cm4gdHJ1ZSBpZiB0aGlzIGdldHMgdG8gbGl2ZS4KIAogICAgIGJvb2wgYXBwZW5k
VmFyaWFudChjb25zdCBHZXRCeUlkVmFyaWFudCYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0luQnlJZFN0YXR1cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0luQnlJZFN0YXR1cy5jcHAJKHJldmlzaW9uIDI3MjkwMikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbkJ5SWRTdGF0dXMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxOCBZdXN1a2Ug
U3V6dWtpIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+LgotICogQ29weXJpZ2h0IChDKSAyMDE4IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOC0yMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMjUxLDEyICsyNTEsMTYgQEAgdm9pZCBJbkJ5SWRTdGF0dXM6OmZpbHRlcihj
b25zdCBTdHJ1Y3R1cgogICAgICAgICBtX3N0YXRlID0gTm9JbmZvcm1hdGlvbjsKIH0KIAotdm9p
ZCBJbkJ5SWRTdGF0dXM6Om1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxh
dGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSW5CeUlkU3RhdHVzOjptYXJrSWZDaGVhcChWaXNp
dG9yJiB2aXNpdG9yKQogewogICAgIGZvciAoSW5CeUlkVmFyaWFudCYgdmFyaWFudCA6IG1fdmFy
aWFudHMpCiAgICAgICAgIHZhcmlhbnQubWFya0lmQ2hlYXAodmlzaXRvcik7CiB9CiAKK3RlbXBs
YXRlIHZvaWQgSW5CeUlkU3RhdHVzOjptYXJrSWZDaGVhcChBYnN0cmFjdFNsb3RWaXNpdG9yJik7
Cit0ZW1wbGF0ZSB2b2lkIEluQnlJZFN0YXR1czo6bWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImKTsK
KwogYm9vbCBJbkJ5SWRTdGF0dXM6OmZpbmFsaXplKFZNJiB2bSkKIHsKICAgICBmb3IgKEluQnlJ
ZFZhcmlhbnQmIHZhcmlhbnQgOiBtX3ZhcmlhbnRzKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvSW5CeUlkU3RhdHVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0luQnlJZFN0YXR1cy5oCShyZXZpc2lvbiAyNzI5MDIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5CeUlkU3RhdHVzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDE4IFl1c3VrZSBTdXp1
a2kgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4uCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0xMDYsNyArMTA2LDcgQEAgcHVibGljOgogICAgIC8vIEF0dGVtcHRzIHRvIHJlZHVj
ZSB0aGUgc2V0IG9mIHZhcmlhbnRzIHRvIGZpdCB0aGUgZ2l2ZW4gc3RydWN0dXJlIHNldC4gVGhp
cyBtYXkgYmUgYXBwcm94aW1hdGUuCiAgICAgdm9pZCBmaWx0ZXIoY29uc3QgU3RydWN0dXJlU2V0
Jik7CiAgICAgCi0gICAgdm9pZCBtYXJrSWZDaGVhcChTbG90VmlzaXRvciYpOworICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgbWFya0lmQ2hlYXAoVmlzaXRvciYpOwogICAgIGJv
b2wgZmluYWxpemUoVk0mKTsKIAogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luQnlJZFZhcmlhbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbkJ5SWRWYXJpYW50
LmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0luQnlJZFZhcmlhbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAq
IENvcHlyaWdodCAoQykgMjAxOCBZdXN1a2UgU3V6dWtpIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+
LgotICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxOC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjQsMTEgKzY0LDE1IEBAIGJv
b2wgSW5CeUlkVmFyaWFudDo6YXR0ZW1wdFRvTWVyZ2UoY29uc3QKICAgICByZXR1cm4gdHJ1ZTsK
IH0KIAotdm9pZCBJbkJ5SWRWYXJpYW50OjptYXJrSWZDaGVhcChTbG90VmlzaXRvciYgdmlzaXRv
cikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEluQnlJZFZhcmlhbnQ6Om1hcmtJ
ZkNoZWFwKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgbV9zdHJ1Y3R1cmVTZXQubWFya0lmQ2hl
YXAodmlzaXRvcik7CiB9CiAKK3RlbXBsYXRlIHZvaWQgSW5CeUlkVmFyaWFudDo6bWFya0lmQ2hl
YXAoQWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBJbkJ5SWRWYXJpYW50Ojpt
YXJrSWZDaGVhcChTbG90VmlzaXRvciYpOworCiBib29sIEluQnlJZFZhcmlhbnQ6OmZpbmFsaXpl
KFZNJiB2bSkKIHsKICAgICBpZiAoIW1fc3RydWN0dXJlU2V0LmlzU3RpbGxBbGl2ZSh2bSkpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5CeUlkVmFyaWFudC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbkJ5SWRWYXJpYW50LmgJ
KHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbkJ5
SWRWYXJpYW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogQ29weXJp
Z2h0IChDKSAyMDE4IFl1c3VrZSBTdXp1a2kgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4uCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE4LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01Nyw3ICs1Nyw3IEBAIHB1YmxpYzoKIAog
ICAgIGJvb2wgYXR0ZW1wdFRvTWVyZ2UoY29uc3QgSW5CeUlkVmFyaWFudCYgb3RoZXIpOwogICAg
IAotICAgIHZvaWQgbWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImKTsKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBWaXNpdG9yPiB2b2lkIG1hcmtJZkNoZWFwKFZpc2l0b3ImKTsKICAgICBib29sIGZpbmFs
aXplKFZNJik7CiAKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnRlcm5hbEZ1bmN0aW9uQWxsb2NhdGlvblBy
b2ZpbGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW50
ZXJuYWxGdW5jdGlvbkFsbG9jYXRpb25Qcm9maWxlLmgJKHJldmlzaW9uIDI3MjkwMikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnRlcm5hbEZ1bmN0aW9uQWxsb2NhdGlvblBy
b2ZpbGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM5LDcgKzM5LDcgQEAgcHVibGljOgogICAgIFN0
cnVjdHVyZSogY3JlYXRlQWxsb2NhdGlvblN0cnVjdHVyZUZyb21CYXNlKFZNJiwgSlNHbG9iYWxP
YmplY3QqLCBKU0NlbGwqIG93bmVyLCBKU09iamVjdCogcHJvdG90eXBlLCBTdHJ1Y3R1cmUqIGJh
c2UpOwogCiAgICAgdm9pZCBjbGVhcigpIHsgbV9zdHJ1Y3R1cmUuY2xlYXIoKTsgfQotICAgIHZv
aWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsgdmlzaXRvci5hcHBlbmQo
bV9zdHJ1Y3R1cmUpOyB9CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCB2aXNp
dEFnZ3JlZ2F0ZShWaXNpdG9yJiB2aXNpdG9yKSB7IHZpc2l0b3IuYXBwZW5kKG1fc3RydWN0dXJl
KTsgfQogCiBwcml2YXRlOgogICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1fc3RydWN0dXJl
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09iamVjdEFsbG9jYXRpb25Q
cm9maWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09i
amVjdEFsbG9jYXRpb25Qcm9maWxlLmgJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9PYmplY3RBbGxvY2F0aW9uUHJvZmlsZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE3IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtNjQsNyArNjQsOCBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIEFTU0VSVChpc051bGwo
KSk7CiAgICAgfQogCi0gICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYgdmlzaXRv
cikKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgorICAgIHZvaWQgdmlzaXRBZ2dyZWdh
dGUoVmlzaXRvciYgdmlzaXRvcikKICAgICB7CiAgICAgICAgIHZpc2l0b3IuYXBwZW5kKG1fc3Ry
dWN0dXJlKTsKICAgICB9CkBAIC0xMTAsNyArMTExLDggQEAgcHVibGljOgogICAgICAgICBBU1NF
UlQoaXNOdWxsKCkpOwogICAgIH0KIAotICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0
b3ImIHZpc2l0b3IpCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KKyAgICB2b2lkIHZp
c2l0QWdncmVnYXRlKFZpc2l0b3ImIHZpc2l0b3IpCiAgICAgewogICAgICAgICBCYXNlOjp2aXNp
dEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKICAgICAgICAgdmlzaXRvci5hcHBlbmQobV9wcm90b3R5cGUp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1v
cnBoaWNBY2Nlc3MuY3BwCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNC0yMDIwIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzU4
LDcgKzM1OCw4IEBAIGJvb2wgUG9seW1vcnBoaWNBY2Nlc3M6OnZpc2l0V2VhayhWTSYgdm0KICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBQb2x5bW9ycGhpY0FjY2Vzczo6cHJvcGFnYXRlVHJh
bnNpdGlvbnMoU2xvdFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0Cit0ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPgorYm9vbCBQb2x5bW9ycGhpY0FjY2Vzczo6cHJvcGFnYXRlVHJhbnNpdGlvbnMoVmlz
aXRvciYgdmlzaXRvcikgY29uc3QKIHsKICAgICBib29sIHJlc3VsdCA9IHRydWU7CiAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemUoKTsgKytpKQpAQCAtMzY2LDEyICszNjcsMTggQEAg
Ym9vbCBQb2x5bW9ycGhpY0FjY2Vzczo6cHJvcGFnYXRlVHJhbnNpdAogICAgIHJldHVybiByZXN1
bHQ7CiB9CiAKLXZvaWQgUG9seW1vcnBoaWNBY2Nlc3M6OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNp
dG9yJiB2aXNpdG9yKQordGVtcGxhdGUgYm9vbCBQb2x5bW9ycGhpY0FjY2Vzczo6cHJvcGFnYXRl
VHJhbnNpdGlvbnMoQWJzdHJhY3RTbG90VmlzaXRvciYpIGNvbnN0OwordGVtcGxhdGUgYm9vbCBQ
b2x5bW9ycGhpY0FjY2Vzczo6cHJvcGFnYXRlVHJhbnNpdGlvbnMoU2xvdFZpc2l0b3ImKSBjb25z
dDsKKwordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgUG9seW1vcnBoaWNBY2Nlc3M6
OnZpc2l0QWdncmVnYXRlSW1wbChWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBzaXplKCk7ICsraSkKICAgICAgICAgYXQoaSkudmlzaXRBZ2dyZWdhdGUo
dmlzaXRvcik7CiB9CiAKK0RFRklORV9WSVNJVF9BR0dSRUdBVEUoUG9seW1vcnBoaWNBY2Nlc3Mp
OworCiB2b2lkIFBvbHltb3JwaGljQWNjZXNzOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0
CiB7CiAgICAgb3V0LnByaW50KFJhd1BvaW50ZXIodGhpcyksICI6WyIpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmgJKHJl
dmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9y
cGhpY0FjY2Vzcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxNC0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTUyLDE0ICsxNTIsMTQgQEAgcHVibGlj
OgogICAgIGNvbnN0IEFjY2Vzc0Nhc2UmIGF0KHVuc2lnbmVkIGkpIGNvbnN0IHsgcmV0dXJuICpt
X2xpc3RbaV07IH0KICAgICBjb25zdCBBY2Nlc3NDYXNlJiBvcGVyYXRvcltdKHVuc2lnbmVkIGkp
IGNvbnN0IHsgcmV0dXJuICptX2xpc3RbaV07IH0KIAotICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUo
U2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0FHR1JFR0FURTsKIAogICAgIC8vIElm
IHRoaXMgcmV0dXJucyBmYWxzZSB0aGVuIHdlIGFyZSByZXF1ZXN0aW5nIGEgcmVzZXQgb2YgdGhl
IG93bmluZyBTdHJ1Y3R1cmVTdHViSW5mby4KICAgICBib29sIHZpc2l0V2VhayhWTSYpIGNvbnN0
OwogICAgIAogICAgIC8vIFRoaXMgcmV0dXJucyB0cnVlIGlmIGl0IGhhcyBtYXJrZWQgZXZlcnl0
aGluZyBpdCB3aWxsIGV2ZXIgbWFya2VkLiBUaGlzIGNhbiBiZSB1c2VkIGFzIGFuCiAgICAgLy8g
b3B0aW1pemF0aW9uIHRvIHRoZW4gYXZvaWQgY2FsbGluZyB0aGlzIG1ldGhvZCBhZ2FpbiBkdXJp
bmcgdGhlIGZpeHBvaW50LgotICAgIGJvb2wgcHJvcGFnYXRlVHJhbnNpdGlvbnMoU2xvdFZpc2l0
b3ImKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiBib29sIHByb3BhZ2F0
ZVRyYW5zaXRpb25zKFZpc2l0b3ImKSBjb25zdDsKIAogICAgIHZvaWQgYWJvdXRUb0RpZSgpOwog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0
dXMuY3BwCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvUHV0QnlJZFN0YXR1cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zOTYsMTIgKzM5NiwxNiBA
QCBQdXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OnNsb3dWZXJzaW9uCiAgICAgcmV0dXJuIFB1
dEJ5SWRTdGF0dXMobWFrZXNDYWxscygpID8gTWFrZXNDYWxscyA6IFRha2VzU2xvd1BhdGgpOwog
fQogCi12b2lkIFB1dEJ5SWRTdGF0dXM6Om1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJiB2aXNpdG9y
KQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgUHV0QnlJZFN0YXR1czo6bWFya0lm
Q2hlYXAoVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBmb3IgKFB1dEJ5SWRWYXJpYW50JiB2YXJp
YW50IDogbV92YXJpYW50cykKICAgICAgICAgdmFyaWFudC5tYXJrSWZDaGVhcCh2aXNpdG9yKTsK
IH0KIAordGVtcGxhdGUgdm9pZCBQdXRCeUlkU3RhdHVzOjptYXJrSWZDaGVhcChBYnN0cmFjdFNs
b3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIFB1dEJ5SWRTdGF0dXM6Om1hcmtJZkNoZWFwKFNs
b3RWaXNpdG9yJik7CisKIGJvb2wgUHV0QnlJZFN0YXR1czo6ZmluYWxpemUoVk0mIHZtKQogewog
ICAgIGZvciAoUHV0QnlJZFZhcmlhbnQmIHZhcmlhbnQgOiBtX3ZhcmlhbnRzKSB7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmgJKHJldmlz
aW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3Rh
dHVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDEyLTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEyLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMTcsNyArMTE3LDcgQEAgcHVibGljOgogICAgIGNv
bnN0IFB1dEJ5SWRWYXJpYW50JiBhdChzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fdmFy
aWFudHNbaW5kZXhdOyB9CiAgICAgY29uc3QgUHV0QnlJZFZhcmlhbnQmIG9wZXJhdG9yW10oc2l6
ZV90IGluZGV4KSBjb25zdCB7IHJldHVybiBhdChpbmRleCk7IH0KICAgICAKLSAgICB2b2lkIG1h
cmtJZkNoZWFwKFNsb3RWaXNpdG9yJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4g
dm9pZCBtYXJrSWZDaGVhcChWaXNpdG9yJik7CiAgICAgYm9vbCBmaW5hbGl6ZShWTSYpOwogICAg
IAogICAgIHZvaWQgbWVyZ2UoY29uc3QgUHV0QnlJZFN0YXR1cyYpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuY3BwCShyZXZpc2lv
biAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlh
bnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxNC0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYyLDEzICsyNjIsMTcgQEAgYm9vbCBQdXRCeUlk
VmFyaWFudDo6YXR0ZW1wdFRvTWVyZ2VUcmFucwogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lk
IFB1dEJ5SWRWYXJpYW50OjptYXJrSWZDaGVhcChTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBs
YXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFB1dEJ5SWRWYXJpYW50OjptYXJrSWZDaGVhcChW
aXNpdG9yJiB2aXNpdG9yKQogewogICAgIG1fb2xkU3RydWN0dXJlLm1hcmtJZkNoZWFwKHZpc2l0
b3IpOwogICAgIGlmIChtX25ld1N0cnVjdHVyZSkKICAgICAgICAgbV9uZXdTdHJ1Y3R1cmUtPm1h
cmtJZkNoZWFwKHZpc2l0b3IpOwogfQogCit0ZW1wbGF0ZSB2b2lkIFB1dEJ5SWRWYXJpYW50Ojpt
YXJrSWZDaGVhcChBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIFB1dEJ5SWRW
YXJpYW50OjptYXJrSWZDaGVhcChTbG90VmlzaXRvciYpOworCiBib29sIFB1dEJ5SWRWYXJpYW50
OjpmaW5hbGl6ZShWTSYgdm0pCiB7CiAgICAgaWYgKCFtX29sZFN0cnVjdHVyZS5pc1N0aWxsQWxp
dmUodm0pKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJp
YW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5
SWRWYXJpYW50LmgJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9QdXRCeUlkVmFyaWFudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNC0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTMyLDcgKzEzMiw3
IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgYXR0ZW1wdFRvTWVyZ2UoY29uc3QgUHV0QnlJZFZhcmlh
bnQmIG90aGVyKTsKICAgICAKLSAgICB2b2lkIG1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJik7Cisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCBtYXJrSWZDaGVhcChWaXNpdG9yJik7
CiAgICAgYm9vbCBmaW5hbGl6ZShWTSYpOwogICAgIAogICAgIHZvaWQgZHVtcChQcmludFN0cmVh
bSYpIGNvbnN0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1JlY29yZGVk
U3RhdHVzZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9SZWNvcmRlZFN0YXR1c2VzLmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1JlY29yZGVkU3RhdHVzZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMDIsNyArMTAyLDggQEAgU2V0UHJpdmF0ZUJyYW5kU3RhdHVzKiBSZWNvcmRlZFN0YXR1c2Vz
OgogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQgUmVjb3JkZWRTdGF0dXNlczo6dmlzaXRB
Z2dyZWdhdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
Pgordm9pZCBSZWNvcmRlZFN0YXR1c2VzOjp2aXNpdEFnZ3JlZ2F0ZUltcGwoVmlzaXRvciYgdmlz
aXRvcikKIHsKICAgICBmb3IgKGF1dG8mIHBhaXIgOiBnZXRzKQogICAgICAgICBwYWlyLnNlY29u
ZC0+dmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7CkBAIC0xMTQsNyArMTE1LDEwIEBAIHZvaWQgUmVj
b3JkZWRTdGF0dXNlczo6dmlzaXRBZ2dyZWdhdGUoU2wKICAgICAgICAgcGFpci5zZWNvbmQtPnZp
c2l0QWdncmVnYXRlKHZpc2l0b3IpOwogfQogCi12b2lkIFJlY29yZGVkU3RhdHVzZXM6Om1hcmtJ
ZkNoZWFwKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorREVGSU5FX1ZJU0lUX0FHR1JFR0FURShSZWNv
cmRlZFN0YXR1c2VzKTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgUmVjb3Jk
ZWRTdGF0dXNlczo6bWFya0lmQ2hlYXAoVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBmb3IgKGF1
dG8mIHBhaXIgOiBnZXRzKQogICAgICAgICBwYWlyLnNlY29uZC0+bWFya0lmQ2hlYXAodmlzaXRv
cik7CkBAIC0xMzAsNiArMTM0LDkgQEAgdm9pZCBSZWNvcmRlZFN0YXR1c2VzOjptYXJrSWZDaGVh
cChTbG90VgogICAgICAgICBwYWlyLnNlY29uZC0+bWFya0lmQ2hlYXAodmlzaXRvcik7CiB9CiAK
K3RlbXBsYXRlIHZvaWQgUmVjb3JkZWRTdGF0dXNlczo6bWFya0lmQ2hlYXAoQWJzdHJhY3RTbG90
VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBSZWNvcmRlZFN0YXR1c2VzOjptYXJrSWZDaGVhcChT
bG90VmlzaXRvciYpOworCiB2b2lkIFJlY29yZGVkU3RhdHVzZXM6OmZpbmFsaXplV2l0aG91dERl
bGV0aW5nKFZNJiB2bSkKIHsKICAgICAvLyBUaGlzIHZhcmlhbnQgb2YgZmluYWxpemUgZ2V0cyBj
YWxsZWQgZnJvbSB3aXRoaW4gZ3JhcGggc2FmZXBvaW50cyAtLSBzbyB0aGVyZSBtYXkgYmUgREZH
IElSIGluCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUmVjb3JkZWRTdGF0
dXNlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9SZWNv
cmRlZFN0YXR1c2VzLmgJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9SZWNvcmRlZFN0YXR1c2VzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01NCw4ICs1
NCw4IEBAIHN0cnVjdCBSZWNvcmRlZFN0YXR1c2VzIHsKICAgICBDaGVja1ByaXZhdGVCcmFuZFN0
YXR1cyogYWRkQ2hlY2tQcml2YXRlQnJhbmRTdGF0dXMoY29uc3QgQ29kZU9yaWdpbiYsIGNvbnN0
IENoZWNrUHJpdmF0ZUJyYW5kU3RhdHVzJik7CiAgICAgU2V0UHJpdmF0ZUJyYW5kU3RhdHVzKiBh
ZGRTZXRQcml2YXRlQnJhbmRTdGF0dXMoY29uc3QgQ29kZU9yaWdpbiYsIGNvbnN0IFNldFByaXZh
dGVCcmFuZFN0YXR1cyYpOwogICAgIAotICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0
b3ImKTsKLSAgICB2b2lkIG1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9W
SVNJVF9BR0dSRUdBVEU7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCBtYXJr
SWZDaGVhcChWaXNpdG9yJik7CiAgICAgCiAgICAgdm9pZCBmaW5hbGl6ZVdpdGhvdXREZWxldGlu
ZyhWTSYpOwogICAgIHZvaWQgZmluYWxpemUoVk0mKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9TZXRQcml2YXRlQnJhbmRTdGF0dXMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TZXRQcml2YXRlQnJhbmRTdGF0dXMuY3BwCShy
ZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU2V0UHJp
dmF0ZUJyYW5kU3RhdHVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjM1LDE4ICsyMzUsMjUgQEAg
Q2FjaGVhYmxlSWRlbnRpZmllciBTZXRQcml2YXRlQnJhbmRTdGF0dQogICAgIHJldHVybiByZXN1
bHQ7CiB9CiAKLXZvaWQgU2V0UHJpdmF0ZUJyYW5kU3RhdHVzOjp2aXNpdEFnZ3JlZ2F0ZShTbG90
VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFNldFBy
aXZhdGVCcmFuZFN0YXR1czo6dmlzaXRBZ2dyZWdhdGVJbXBsKFZpc2l0b3ImIHZpc2l0b3IpCiB7
CiAgICAgZm9yIChTZXRQcml2YXRlQnJhbmRWYXJpYW50JiB2YXJpYW50IDogbV92YXJpYW50cykK
ICAgICAgICAgdmFyaWFudC52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKIH0KIAotdm9pZCBTZXRQ
cml2YXRlQnJhbmRTdGF0dXM6Om1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorREVG
SU5FX1ZJU0lUX0FHR1JFR0FURShTZXRQcml2YXRlQnJhbmRTdGF0dXMpOworCit0ZW1wbGF0ZTx0
eXBlbmFtZSBWaXNpdG9yPgordm9pZCBTZXRQcml2YXRlQnJhbmRTdGF0dXM6Om1hcmtJZkNoZWFw
KFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgZm9yIChTZXRQcml2YXRlQnJhbmRWYXJpYW50JiB2
YXJpYW50IDogbV92YXJpYW50cykKICAgICAgICAgdmFyaWFudC5tYXJrSWZDaGVhcCh2aXNpdG9y
KTsKIH0KIAordGVtcGxhdGUgdm9pZCBTZXRQcml2YXRlQnJhbmRTdGF0dXM6Om1hcmtJZkNoZWFw
KEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgU2V0UHJpdmF0ZUJyYW5kU3Rh
dHVzOjptYXJrSWZDaGVhcChTbG90VmlzaXRvciYpOworCiBib29sIFNldFByaXZhdGVCcmFuZFN0
YXR1czo6ZmluYWxpemUoVk0mIHZtKQogewogICAgIGZvciAoYXV0byYgdmFyaWFudCA6IG1fdmFy
aWFudHMpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TZXRQcml2YXRl
QnJhbmRTdGF0dXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvU2V0UHJpdmF0ZUJyYW5kU3RhdHVzLmgJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TZXRQcml2YXRlQnJhbmRTdGF0dXMuaAkod29ya2luZyBj
b3B5KQpAQCAtODMsOCArODMsOCBAQCBwdWJsaWM6CiAgICAgLy8gQXR0ZW1wdHMgdG8gcmVkdWNl
IHRoZSBzZXQgb2YgdmFyaWFudHMgdG8gZml0IHRoZSBnaXZlbiBzdHJ1Y3R1cmUgc2V0LiBUaGlz
IG1heSBiZSBhcHByb3hpbWF0ZS4KICAgICB2b2lkIGZpbHRlcihjb25zdCBTdHJ1Y3R1cmVTZXQm
KTsKIAotICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImKTsKLSAgICB2b2lkIG1h
cmtJZkNoZWFwKFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9BR0dSRUdBVEU7Cisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCBtYXJrSWZDaGVhcChWaXNpdG9yJik7
CiAgICAgYm9vbCBmaW5hbGl6ZShWTSYpOwogCiAgICAgYm9vbCBhcHBlbmRWYXJpYW50KGNvbnN0
IFNldFByaXZhdGVCcmFuZFZhcmlhbnQmKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9TZXRQcml2YXRlQnJhbmRWYXJpYW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU2V0UHJpdmF0ZUJyYW5kVmFyaWFudC5jcHAJKHJldmlz
aW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TZXRQcml2YXRl
QnJhbmRWYXJpYW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDIwLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICog
Q29weXJpZ2h0IChDKSAyMDIxIElnYWxpYSBTLkEuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CkBAIC01NCw3ICs1NCw4IEBAIGJvb2wgU2V0UHJpdmF0ZUJyYW5kVmFyaWFu
dDo6YXR0ZW1wdFRvTWUKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBTZXRQcml2YXRlQnJh
bmRWYXJpYW50OjptYXJrSWZDaGVhcChTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5
cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFNldFByaXZhdGVCcmFuZFZhcmlhbnQ6Om1hcmtJZkNoZWFw
KFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgaWYgKG1fb2xkU3RydWN0dXJlKQogICAgICAgICBt
X29sZFN0cnVjdHVyZS0+bWFya0lmQ2hlYXAodmlzaXRvcik7CkBAIC02Miw2ICs2Myw5IEBAIHZv
aWQgU2V0UHJpdmF0ZUJyYW5kVmFyaWFudDo6bWFya0lmQ2hlYXAKICAgICAgICAgbV9uZXdTdHJ1
Y3R1cmUtPm1hcmtJZkNoZWFwKHZpc2l0b3IpOwogfQogCit0ZW1wbGF0ZSB2b2lkIFNldFByaXZh
dGVCcmFuZFZhcmlhbnQ6Om1hcmtJZkNoZWFwKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBs
YXRlIHZvaWQgU2V0UHJpdmF0ZUJyYW5kVmFyaWFudDo6bWFya0lmQ2hlYXAoU2xvdFZpc2l0b3Im
KTsKKwogYm9vbCBTZXRQcml2YXRlQnJhbmRWYXJpYW50OjpmaW5hbGl6ZShWTSYgdm0pCiB7CiAg
ICAgaWYgKCF2bS5oZWFwLmlzTWFya2VkKG1fb2xkU3RydWN0dXJlKSkKQEAgLTcxLDExICs3NSwx
NCBAQCBib29sIFNldFByaXZhdGVCcmFuZFZhcmlhbnQ6OmZpbmFsaXplKFZNCiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKLXZvaWQgU2V0UHJpdmF0ZUJyYW5kVmFyaWFudDo6dmlzaXRBZ2dyZWdhdGUo
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBT
ZXRQcml2YXRlQnJhbmRWYXJpYW50Ojp2aXNpdEFnZ3JlZ2F0ZUltcGwoVmlzaXRvciYgdmlzaXRv
cikKIHsKICAgICBtX2lkZW50aWZpZXIudmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7CiB9CiAKK0RF
RklORV9WSVNJVF9BR0dSRUdBVEUoU2V0UHJpdmF0ZUJyYW5kVmFyaWFudCk7CisKIHZvaWQgU2V0
UHJpdmF0ZUJyYW5kVmFyaWFudDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAogewogICAg
IGR1bXBJbkNvbnRleHQob3V0LCBudWxscHRyKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9TZXRQcml2YXRlQnJhbmRWYXJpYW50LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NldFByaXZhdGVCcmFuZFZhcmlhbnQuaAkocmV2aXNp
b24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NldFByaXZhdGVC
cmFuZFZhcmlhbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNDUsOCArNDUsOCBAQCBwdWJsaWM6CiAK
ICAgICBib29sIGF0dGVtcHRUb01lcmdlKGNvbnN0IFNldFByaXZhdGVCcmFuZFZhcmlhbnQmIG90
aGVyKTsKIAotICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImKTsKLSAgICB2b2lk
IG1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9BR0dSRUdBVEU7
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCBtYXJrSWZDaGVhcChWaXNpdG9y
Jik7CiAgICAgYm9vbCBmaW5hbGl6ZShWTSYpOwogCiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFt
JikgY29uc3Q7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJl
U2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3Ry
dWN0dXJlU2V0LmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1N0cnVjdHVyZVNldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMSwxMiArMzEs
MTYgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLXZvaWQgU3RydWN0dXJlU2V0OjptYXJrSWZDaGVh
cChTbG90VmlzaXRvciYgdmlzaXRvcikgY29uc3QKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+
Cit2b2lkIFN0cnVjdHVyZVNldDo6bWFya0lmQ2hlYXAoVmlzaXRvciYgdmlzaXRvcikgY29uc3QK
IHsKICAgICBmb3IgKFN0cnVjdHVyZSogc3RydWN0dXJlIDogKnRoaXMpCiAgICAgICAgIHN0cnVj
dHVyZS0+bWFya0lmQ2hlYXAodmlzaXRvcik7CiB9CiAKK3RlbXBsYXRlIHZvaWQgU3RydWN0dXJl
U2V0OjptYXJrSWZDaGVhcChBYnN0cmFjdFNsb3RWaXNpdG9yJikgY29uc3Q7Cit0ZW1wbGF0ZSB2
b2lkIFN0cnVjdHVyZVNldDo6bWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImKSBjb25zdDsKKwogYm9v
bCBTdHJ1Y3R1cmVTZXQ6OmlzU3RpbGxBbGl2ZShWTSYgdm0pIGNvbnN0CiB7CiAgICAgZm9yIChT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSA6ICp0aGlzKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvU3RydWN0dXJlU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVNldC5oCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU2V0LmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTggQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMjEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC01NCw3ICs1NCw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG9ubHlFbnRyeSgpOwog
ICAgIH0KIAotICAgIHZvaWQgbWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImKSBjb25zdDsKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIG1hcmtJZkNoZWFwKFZpc2l0b3ImKSBjb25z
dDsKICAgICBib29sIGlzU3RpbGxBbGl2ZShWTSYpIGNvbnN0OwogICAgIAogICAgIHZvaWQgZHVt
cEluQ29udGV4dChQcmludFN0cmVhbSYsIER1bXBDb250ZXh0KikgY29uc3Q7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5j
cHAJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9T
dHJ1Y3R1cmVTdHViSW5mby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOTYsNyArMjk2LDggQEAg
dm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6cmVzZXQoY29uc3QgQ29uYwogICAgIHNldENhY2hlVHlw
ZShsb2NrZXIsIENhY2hlVHlwZTo6VW5zZXQpOwogfQogCi12b2lkIFN0cnVjdHVyZVN0dWJJbmZv
Ojp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1l
IFZpc2l0b3I+Cit2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjp2aXNpdEFnZ3JlZ2F0ZUltcGwoVmlz
aXRvciYgdmlzaXRvcikKIHsKICAgICB7CiAgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2so
bV9idWZmZXJlZFN0cnVjdHVyZXNMb2NrKTsKQEAgLTMyMiw2ICszMjMsOCBAQCB2b2lkIFN0cnVj
dHVyZVN0dWJJbmZvOjp2aXNpdEFnZ3JlZ2F0ZShTCiAgICAgcmV0dXJuOwogfQogCitERUZJTkVf
VklTSVRfQUdHUkVHQVRFKFN0cnVjdHVyZVN0dWJJbmZvKTsKKwogdm9pZCBTdHJ1Y3R1cmVTdHVi
SW5mbzo6dmlzaXRXZWFrUmVmZXJlbmNlcyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXJCYXNlJiBs
b2NrZXIsIENvZGVCbG9jayogY29kZUJsb2NrKQogewogICAgIFZNJiB2bSA9IGNvZGVCbG9jay0+
dm0oKTsKQEAgLTM1Miw3ICszNTUsOCBAQCB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjp2aXNpdFdl
YWtSZWZlcmVuCiAgICAgcmVzZXRCeUdDID0gdHJ1ZTsKIH0KIAotYm9vbCBTdHJ1Y3R1cmVTdHVi
SW5mbzo6cHJvcGFnYXRlVHJhbnNpdGlvbnMoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0
ZTx0eXBlbmFtZSBWaXNpdG9yPgorYm9vbCBTdHJ1Y3R1cmVTdHViSW5mbzo6cHJvcGFnYXRlVHJh
bnNpdGlvbnMoVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBzd2l0Y2ggKG1fY2FjaGVUeXBlKSB7
CiAgICAgY2FzZSBDYWNoZVR5cGU6OlVuc2V0OgpAQCAtMzcxLDYgKzM3NSw5IEBAIGJvb2wgU3Ry
dWN0dXJlU3R1YkluZm86OnByb3BhZ2F0ZVRyYW5zaXQKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAor
dGVtcGxhdGUgYm9vbCBTdHJ1Y3R1cmVTdHViSW5mbzo6cHJvcGFnYXRlVHJhbnNpdGlvbnMoQWJz
dHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgYm9vbCBTdHJ1Y3R1cmVTdHViSW5mbzo6cHJv
cGFnYXRlVHJhbnNpdGlvbnMoU2xvdFZpc2l0b3ImKTsKKwogU3R1YkluZm9TdW1tYXJ5IFN0cnVj
dHVyZVN0dWJJbmZvOjpzdW1tYXJ5KFZNJiB2bSkgY29uc3QKIHsKICAgICBTdHViSW5mb1N1bW1h
cnkgdGFrZXNTbG93UGF0aCA9IFN0dWJJbmZvU3VtbWFyeTo6VGFrZXNTbG93UGF0aDsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5m
by5oCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
U3RydWN0dXJlU3R1YkluZm8uaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTkzLDE0ICs5MywxNCBAQCBw
dWJsaWM6CiAgICAgdm9pZCBkZXJlZigpOwogICAgIHZvaWQgYWJvdXRUb0RpZSgpOwogCi0gICAg
dm9pZCB2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQUdH
UkVHQVRFOwogCiAgICAgLy8gQ2hlY2sgaWYgdGhlIHN0dWIgaGFzIHdlYWsgcmVmZXJlbmNlcyB0
aGF0IGFyZSBkZWFkLiBJZiBpdCBkb2VzLCB0aGVuIGl0IHJlc2V0cyBpdHNlbGYsCiAgICAgLy8g
ZWl0aGVyIGVudGlyZWx5IG9yIGp1c3QgZW5vdWdoIHRvIGVuc3VyZSB0aGF0IHRob3NlIGRlYWQg
cG9pbnRlcnMgZG9uJ3QgZ2V0IHVzZWQgYW55bW9yZS4KICAgICB2b2lkIHZpc2l0V2Vha1JlZmVy
ZW5jZXMoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyQmFzZSYsIENvZGVCbG9jayopOwogICAgIAog
ICAgIC8vIFRoaXMgcmV0dXJucyB0cnVlIGlmIGl0IGhhcyBtYXJrZWQgZXZlcnl0aGluZyB0aGF0
IGl0IHdpbGwgZXZlciBtYXJrLgotICAgIGJvb2wgcHJvcGFnYXRlVHJhbnNpdGlvbnMoU2xvdFZp
c2l0b3ImKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiBib29sIHByb3BhZ2F0ZVRy
YW5zaXRpb25zKFZpc2l0b3ImKTsKICAgICAgICAgCiAgICAgU3R1YkluZm9TdW1tYXJ5IHN1bW1h
cnkoVk0mKSBjb25zdDsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9VbmxpbmtlZENvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAx
OSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIt
MjAyMSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTc1LDcgKzc1LDggQEAgVW5saW5rZWRDb2RlQmxvY2s6OlVubGlua2Vk
Q29kZUJsb2NrKFZNJgogICAgIH0KIH0KIAotdm9pZCBVbmxpbmtlZENvZGVCbG9jazo6dmlzaXRD
aGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlw
ZW5hbWUgVmlzaXRvcj4KK3ZvaWQgVW5saW5rZWRDb2RlQmxvY2s6OnZpc2l0Q2hpbGRyZW5JbXBs
KEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBVbmxpbmtlZENvZGVCbG9j
ayogdGhpc09iamVjdCA9IGpzQ2FzdDxVbmxpbmtlZENvZGVCbG9jayo+KGNlbGwpOwogICAgIEFT
U0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTk0LDYgKzk1
LDggQEAgdm9pZCBVbmxpbmtlZENvZGVCbG9jazo6dmlzaXRDaGlsZHJlbihKUwogICAgIHZpc2l0
b3IucmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKGV4dHJhTWVtb3J5KTsKIH0KIAorREVGSU5FX1ZJ
U0lUX0NISUxEUkVOKFVubGlua2VkQ29kZUJsb2NrKTsKKwogc2l6ZV90IFVubGlua2VkQ29kZUJs
b2NrOjplc3RpbWF0ZWRTaXplKEpTQ2VsbCogY2VsbCwgVk0mIHZtKQogewogICAgIFVubGlua2Vk
Q29kZUJsb2NrKiB0aGlzT2JqZWN0ID0ganNDYXN0PFVubGlua2VkQ29kZUJsb2NrKj4oY2VsbCk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2su
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRD
b2RlQmxvY2suaAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTkgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjEgQXBwbGUgSW5jLiBBbGwgUmlnaHRz
IFJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00MzEsNyArNDMx
LDcgQEAgcHJpdmF0ZToKICAgICBSZWZDb3VudGVkQXJyYXk8RXhwcmVzc2lvblJhbmdlSW5mbz4g
bV9leHByZXNzaW9uSW5mbzsKIAogcHJvdGVjdGVkOgotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hp
bGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVO
OwogICAgIHN0YXRpYyBzaXplX3QgZXN0aW1hdGVkU2l6ZShKU0NlbGwqLCBWTSYpOwogCiBwdWJs
aWM6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRGdW5jdGlv
bkV4ZWN1dGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9VbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5jcHAJKHJldmlzaW9uIDI3MjkwMikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJs
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDEyLTIwMTkgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEyLTIwMjEgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xNDYsNyArMTQ2LDggQEAgdm9pZCBVbmxpbmtlZEZ1
bmN0aW9uRXhlY3V0YWJsZTo6ZGVzdHJveQogICAgIHN0YXRpY19jYXN0PFVubGlua2VkRnVuY3Rp
b25FeGVjdXRhYmxlKj4oY2VsbCktPn5VbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSgpOwogfQog
Ci12b2lkIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCog
Y2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgor
dm9pZCBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxs
KiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFVubGlua2VkRnVuY3Rpb25FeGVjdXRh
YmxlKiB0aGlzT2JqZWN0ID0ganNDYXN0PFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKj4oY2Vs
bCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpA
QCAtMTY5LDYgKzE3MCw4IEBAIHZvaWQgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU6OnZpc2l0
Q2gKICAgICB9CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihVbmxpbmtlZEZ1bmN0aW9uRXhl
Y3V0YWJsZSk7CisKIFNvdXJjZUNvZGUgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU6Omxpbmtl
ZFNvdXJjZUNvZGUoY29uc3QgU291cmNlQ29kZSYgcGFzc2VkUGFyZW50U291cmNlKSBjb25zdAog
ewogICAgIGNvbnN0IFNvdXJjZUNvZGUmIHBhcmVudFNvdXJjZSA9ICFtX2lzQnVpbHRpbkRlZmF1
bHRDbGFzc0NvbnN0cnVjdG9yID8gcGFzc2VkUGFyZW50U291cmNlIDogQnVpbHRpbkV4ZWN1dGFi
bGVzOjpkZWZhdWx0Q29uc3RydWN0b3JTb3VyY2VDb2RlKGNvbnN0cnVjdG9yS2luZCgpKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9uRXhlY3V0
YWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Vbmxp
bmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5oCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxOSBB
cHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAy
MSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTI0Miw3ICsyNDIsNyBAQCBwcml2YXRlOgogICAgIFVubGlua2VkRnVuY3Rp
b25FeGVjdXRhYmxlKFZNJiwgU3RydWN0dXJlKiwgY29uc3QgU291cmNlQ29kZSYsIEZ1bmN0aW9u
TWV0YWRhdGFOb2RlKiwgVW5saW5rZWRGdW5jdGlvbktpbmQsIENvbnN0cnVjdEFiaWxpdHksIEpT
UGFyc2VyU2NyaXB0TW9kZSwgUmVmUHRyPFREWkVudmlyb25tZW50TGluaz4sIE9wdGlvbmFsPFBy
aXZhdGVOYW1lRW52aXJvbm1lbnQ+LCBKU0M6OkRlcml2ZWRDb250ZXh0VHlwZSwgSlNDOjpOZWVk
c0NsYXNzRmllbGRJbml0aWFsaXplciwgUHJpdmF0ZUJyYW5kUmVxdWlyZW1lbnQsIGJvb2wgaXNC
dWlsdGluRGVmYXVsdENsYXNzQ29uc3RydWN0b3IpOwogICAgIFVubGlua2VkRnVuY3Rpb25FeGVj
dXRhYmxlKERlY29kZXImLCBjb25zdCBDYWNoZWRGdW5jdGlvbkV4ZWN1dGFibGUmKTsKIAotICAg
IHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBE
RUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgdm9pZCBkZWNvZGVDYWNoZWRDb2RlQmxvY2tz
KFZNJik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlclNj
b3BlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVi
dWdnZXJTY29wZS5jcHAJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZWJ1Z2dlci9EZWJ1Z2dlclNjb3BlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU1LDcgKzU1
LDggQEAgdm9pZCBEZWJ1Z2dlclNjb3BlOjpmaW5pc2hDcmVhdGlvbihWTSYgdgogICAgIEJhc2U6
OmZpbmlzaENyZWF0aW9uKHZtKTsKIH0KIAotdm9pZCBEZWJ1Z2dlclNjb3BlOjp2aXNpdENoaWxk
cmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBWaXNpdG9yPgordm9pZCBEZWJ1Z2dlclNjb3BlOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwq
IGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgRGVidWdnZXJTY29wZSogdGhpc09iamVj
dCA9IGpzQ2FzdDxEZWJ1Z2dlclNjb3BlKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9J
TkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNjUsNiArNjYsOCBAQCB2b2lkIERlYnVn
Z2VyU2NvcGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsCiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09i
amVjdC0+bV9uZXh0KTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKERlYnVnZ2VyU2NvcGUp
OworCiBTdHJpbmcgRGVidWdnZXJTY29wZTo6Y2xhc3NOYW1lKGNvbnN0IEpTT2JqZWN0KiBvYmpl
Y3QsIFZNJiB2bSkKIHsKICAgICBjb25zdCBEZWJ1Z2dlclNjb3BlKiBzY29wZSA9IGpzQ2FzdDxj
b25zdCBEZWJ1Z2dlclNjb3BlKj4ob2JqZWN0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZWJ1Z2dlci9EZWJ1Z2dlclNjb3BlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyU2NvcGUuaAkocmV2aXNpb24gMjcyOTAyKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyU2NvcGUuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAyMCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAyMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTQ2LDcgKzQ2LDcgQEAgcHVibGljOgogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3Rh
dGljIERlYnVnZ2VyU2NvcGUqIGNyZWF0ZShWTSYgdm0sIEpTU2NvcGUqIHNjb3BlKTsKIAotICAg
IHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBE
RUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogICAgIHN0YXRpYyBTdHJpbmcgY2xhc3NOYW1lKGNvbnN0
IEpTT2JqZWN0KiwgVk0mKTsKICAgICBzdGF0aWMgU3RyaW5nIHRvU3RyaW5nTmFtZShjb25zdCBK
U09iamVjdCosIEpTR2xvYmFsT2JqZWN0Kik7CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVy
dHlTbG90KEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5
U2xvdCYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkVHJhbnNp
dGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVz
aXJlZFRyYW5zaXRpb25zLmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdEZXNpcmVkVHJhbnNpdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
NTIsNyArNTIsNyBAQCB2b2lkIERlc2lyZWRUcmFuc2l0aW9uOjpyZWFsbHlBZGQoVk0mIHZtCiAg
ICAgICAgICAgICBtX29sZFN0cnVjdHVyZSwgbV9uZXdTdHJ1Y3R1cmUpKTsKIH0KIAotdm9pZCBE
ZXNpcmVkVHJhbnNpdGlvbjo6dmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3Zv
aWQgRGVzaXJlZFRyYW5zaXRpb246OnZpc2l0Q2hpbGRyZW4oQWJzdHJhY3RTbG90VmlzaXRvciYg
dmlzaXRvcikKIHsKICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKG1fY29kZU9yaWdpbk93
bmVyKTsKICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKG1fb2xkU3RydWN0dXJlKTsKQEAg
LTc4LDcgKzc4LDcgQEAgdm9pZCBEZXNpcmVkVHJhbnNpdGlvbnM6OnJlYWxseUFkZChWTSYgdgog
ICAgICAgICBtX3RyYW5zaXRpb25zW2ldLnJlYWxseUFkZCh2bSwgY29tbW9uKTsKIH0KIAotdm9p
ZCBEZXNpcmVkVHJhbnNpdGlvbnM6OnZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3Ip
Cit2b2lkIERlc2lyZWRUcmFuc2l0aW9uczo6dmlzaXRDaGlsZHJlbihBYnN0cmFjdFNsb3RWaXNp
dG9yJiB2aXNpdG9yKQogewogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3RyYW5zaXRp
b25zLnNpemUoKTsgaSsrKQogICAgICAgICBtX3RyYW5zaXRpb25zW2ldLnZpc2l0Q2hpbGRyZW4o
dmlzaXRvcik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRUcmFu
c2l0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVz
aXJlZFRyYW5zaXRpb25zLmgJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHRGVzaXJlZFRyYW5zaXRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDYs
OCArNDYsNyBAQCBwdWJsaWM6CiAgICAgRGVzaXJlZFRyYW5zaXRpb24oQ29kZUJsb2NrKiwgQ29k
ZUJsb2NrKiBjb2RlT3JpZ2luT3duZXIsIFN0cnVjdHVyZSosIFN0cnVjdHVyZSopOwogCiAgICAg
dm9pZCByZWFsbHlBZGQoVk0mLCBDb21tb25EYXRhKik7Ci0gICAgCi0gICAgdm9pZCB2aXNpdENo
aWxkcmVuKFNsb3RWaXNpdG9yJik7CisgICAgdm9pZCB2aXNpdENoaWxkcmVuKEFic3RyYWN0U2xv
dFZpc2l0b3ImKTsKIAogcHJpdmF0ZToKICAgICBDb2RlQmxvY2sqIG1fY29kZUJsb2NrOwpAQCAt
NjMsNyArNjIsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGFkZExhemlseShDb2RlQmxvY2sqLCBD
b2RlQmxvY2sqIGNvZGVPcmlnaW5Pd25lciwgU3RydWN0dXJlKiwgU3RydWN0dXJlKik7CiAgICAg
dm9pZCByZWFsbHlBZGQoVk0mLCBDb21tb25EYXRhKik7Ci0gICAgdm9pZCB2aXNpdENoaWxkcmVu
KFNsb3RWaXNpdG9yJik7CisgICAgdm9pZCB2aXNpdENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0
b3ImKTsKIAogcHJpdmF0ZToKICAgICBWZWN0b3I8RGVzaXJlZFRyYW5zaXRpb24+IG1fdHJhbnNp
dGlvbnM7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXZWFrUmVm
ZXJlbmNlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdE
ZXNpcmVkV2Vha1JlZmVyZW5jZXMuY3BwCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXZWFrUmVmZXJlbmNlcy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC04Nyw3ICs4Nyw3IEBAIHZvaWQgRGVzaXJlZFdlYWtSZWZlcmVuY2VzOjpyZWFsbHlB
ZGQoVk0KICAgICB9CiB9CiAKLXZvaWQgRGVzaXJlZFdlYWtSZWZlcmVuY2VzOjp2aXNpdENoaWxk
cmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBEZXNpcmVkV2Vha1JlZmVyZW5jZXM6OnZp
c2l0Q2hpbGRyZW4oQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBmb3IgKEpT
Q2VsbCogdGFyZ2V0IDogbV9yZWZlcmVuY2VzKQogICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFy
cmllcmVkKHRhcmdldCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2ly
ZWRXZWFrUmVmZXJlbmNlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHRGVzaXJlZFdlYWtSZWZlcmVuY2VzLmgJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFdlYWtSZWZlcmVuY2VzLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0zMSwxMCArMzEsMTAgQEAKIAogbmFtZXNwYWNlIEpTQyB7IAogCitjbGFzcyBB
YnN0cmFjdFNsb3RWaXNpdG9yOwogY2xhc3MgQ29kZUJsb2NrOwogY2xhc3MgSlNDZWxsOwogY2xh
c3MgSlNWYWx1ZTsKLWNsYXNzIFNsb3RWaXNpdG9yOwogY2xhc3MgVk07CiAKIG5hbWVzcGFjZSBE
RkcgewpAQCAtNTIsOCArNTIsOCBAQCBwdWJsaWM6CiAgICAgYm9vbCBjb250YWlucyhKU0NlbGwq
KTsKICAgICAKICAgICB2b2lkIHJlYWxseUFkZChWTSYsIENvbW1vbkRhdGEqKTsKLSAgICAKLSAg
ICB2b2lkIHZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKKworICAgIHZvaWQgdmlzaXRDaGls
ZHJlbihBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAKIHByaXZhdGU6CiAgICAgQ29kZUJsb2NrKiBt
X2NvZGVCbG9jazsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCShy
ZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTQ0OCw3ICsxNDQ4LDcgQEAgdm9pZCBHcmFwaDo6cmVnaXN0
ZXJGcm96ZW5WYWx1ZXMoKQogICAgIG1fY29kZUJsb2NrLT5jb25zdGFudHNTb3VyY2VDb2RlUmVw
cmVzZW50YXRpb24oKS5zaHJpbmtUb0ZpdCgpOwogfQogCi12b2lkIEdyYXBoOjp2aXNpdENoaWxk
cmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBHcmFwaDo6dmlzaXRDaGlsZHJlbihBYnN0
cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGZvciAoRnJvemVuVmFsdWUqIHZhbHVl
IDogbV9mcm96ZW5WYWx1ZXMpIHsKICAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZCh2
YWx1ZS0+dmFsdWUoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBo
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCShy
ZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEx
LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDExLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC0xMDAwLDkgKzEwMDAsOSBAQCBwdWJsaWM6CiAgICAgYm9vbCBj
YW5Eb0Zhc3RTcHJlYWQoTm9kZSosIGNvbnN0IEFic3RyYWN0VmFsdWUmKTsKICAgICAKICAgICB2
b2lkIHJlZ2lzdGVyRnJvemVuVmFsdWVzKCk7Ci0gICAgCi0gICAgdm9pZCB2aXNpdENoaWxkcmVu
KFNsb3RWaXNpdG9yJikgZmluYWw7Ci0gICAgCisKKyAgICB2b2lkIHZpc2l0Q2hpbGRyZW4oQWJz
dHJhY3RTbG90VmlzaXRvciYpIGZpbmFsOworCiAgICAgdm9pZCBsb2dBc3NlcnRpb25GYWlsdXJl
KAogICAgICAgICBzdGQ6Om51bGxwdHJfdCwgY29uc3QgY2hhciogZmlsZSwgaW50IGxpbmUsIGNv
bnN0IGNoYXIqIGZ1bmN0aW9uLAogICAgICAgICBjb25zdCBjaGFyKiBhc3NlcnRpb24pOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCShyZXZpc2lvbiAyNzI5MDIpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIwIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIxIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtNjcyLDkgKzY3MiwxMCBAQCBDb21waWxhdGlvbktleSBQbGFuOjprZXkoKQogICAgIHJldHVy
biBDb21waWxhdGlvbktleShtX2NvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSwgbV9tb2RlKTsKIH0K
IAotdm9pZCBQbGFuOjpjaGVja0xpdmVuZXNzQW5kVmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYg
dmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFBsYW46OmNoZWNrTGl2
ZW5lc3NBbmRWaXNpdENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7Ci0gICAgaWYgKCFpc0tu
b3duVG9CZUxpdmVEdXJpbmdHQygpKQorICAgIGlmICghaXNLbm93blRvQmVMaXZlRHVyaW5nR0Mo
dmlzaXRvcikpCiAgICAgICAgIHJldHVybjsKIAogICAgIGNsZWFuTXVzdEhhbmRsZVZhbHVlc0lm
TmVjZXNzYXJ5KCk7CkBAIC03MDIsMTMgKzcwMywzMyBAQCB2b2lkIFBsYW46OmNoZWNrTGl2ZW5l
c3NBbmRWaXNpdENoaWxkcmVuCiAgICAgbV90cmFuc2l0aW9ucy52aXNpdENoaWxkcmVuKHZpc2l0
b3IpOwogfQogCit0ZW1wbGF0ZSB2b2lkIFBsYW46OmNoZWNrTGl2ZW5lc3NBbmRWaXNpdENoaWxk
cmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgUGxhbjo6Y2hlY2tMaXZl
bmVzc0FuZFZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKKwogdm9pZCBQbGFuOjpmaW5hbGl6
ZUluR0MoKQogewogICAgIEFTU0VSVChtX3ZtKTsKICAgICBtX3JlY29yZGVkU3RhdHVzZXMuZmlu
YWxpemVXaXRob3V0RGVsZXRpbmcoKm1fdm0pOwogfQogCi1ib29sIFBsYW46OmlzS25vd25Ub0Jl
TGl2ZUR1cmluZ0dDKCkKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Citib29sIFBsYW46Omlz
S25vd25Ub0JlTGl2ZUR1cmluZ0dDKFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgaWYgKG1fc3Rh
Z2UgPT0gQ2FuY2VsbGVkKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCF2aXNpdG9y
LmlzTWFya2VkKG1fY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICBpZiAoIXZpc2l0b3IuaXNNYXJrZWQobV9jb2RlQmxvY2stPmFsdGVybmF0
aXZlKCkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCEhbV9wcm9maWxlZERGR0Nv
ZGVCbG9jayAmJiAhdmlzaXRvci5pc01hcmtlZChtX3Byb2ZpbGVkREZHQ29kZUJsb2NrKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiB0cnVlOworfQorCit0ZW1wbGF0ZSBib29s
IFBsYW46OmlzS25vd25Ub0JlTGl2ZUR1cmluZ0dDKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3Rl
bXBsYXRlIGJvb2wgUGxhbjo6aXNLbm93blRvQmVMaXZlRHVyaW5nR0MoU2xvdFZpc2l0b3ImKTsK
KworYm9vbCBQbGFuOjppc0tub3duVG9CZUxpdmVBZnRlckdDKCkKIHsKICAgICBpZiAobV9zdGFn
ZSA9PSBDYW5jZWxsZWQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHUGxhbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHUGxhbi5oCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1BsYW4uaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQzLDggKzQzLDggQEAKIAog
bmFtZXNwYWNlIEpTQyB7CiAKK2NsYXNzIEFic3RyYWN0U2xvdFZpc2l0b3I7CiBjbGFzcyBDb2Rl
QmxvY2s7Ci1jbGFzcyBTbG90VmlzaXRvcjsKIAogbmFtZXNwYWNlIERGRyB7CiAKQEAgLTcwLDEw
ICs3MCwxMSBAQCBwdWJsaWM6CiAgICAgCiAgICAgQ29tcGlsYXRpb25LZXkga2V5KCk7CiAgICAg
Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KLSAgICB2b2lkIGl0ZXJhdGVDb2RlQmxvY2tz
Rm9yR0MoY29uc3QgRnVuYyYpOwotICAgIHZvaWQgY2hlY2tMaXZlbmVzc0FuZFZpc2l0Q2hpbGRy
ZW4oU2xvdFZpc2l0b3ImKTsKLSAgICBib29sIGlzS25vd25Ub0JlTGl2ZUR1cmluZ0dDKCk7Cisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYywgdHlwZW5hbWUgVmlzaXRvcj4KKyAgICB2b2lkIGl0
ZXJhdGVDb2RlQmxvY2tzRm9yR0MoVmlzaXRvciYsIGNvbnN0IEZ1bmMmKTsKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIGNoZWNrTGl2ZW5lc3NBbmRWaXNpdENoaWxkcmVuKFZp
c2l0b3ImKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiBib29sIGlzS25vd25Ub0Jl
TGl2ZUR1cmluZ0dDKFZpc2l0b3ImKTsKKyAgICBib29sIGlzS25vd25Ub0JlTGl2ZUFmdGVyR0Mo
KTsKICAgICB2b2lkIGZpbmFsaXplSW5HQygpOwogICAgIHZvaWQgY2FuY2VsKCk7CiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbklubGluZXMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW5JbmxpbmVzLmgJKHJldmlzaW9uIDI3
MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbklubGluZXMuaAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAx
OCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTct
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTMxLDEwICszMSwxMCBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IERGRyB7CiAKICNpZiBFTkFCTEUoREZHX0pJVCkKIAotdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4K
LXZvaWQgUGxhbjo6aXRlcmF0ZUNvZGVCbG9ja3NGb3JHQyhjb25zdCBGdW5jJiBmdW5jKQordGVt
cGxhdGU8dHlwZW5hbWUgRnVuYywgdHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgUGxhbjo6aXRlcmF0
ZUNvZGVCbG9ja3NGb3JHQyhWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBGdW5jJiBmdW5jKQogewot
ICAgIGlmICghaXNLbm93blRvQmVMaXZlRHVyaW5nR0MoKSkKKyAgICBpZiAoIWlzS25vd25Ub0Jl
TGl2ZUR1cmluZ0dDKHZpc2l0b3IpKQogICAgICAgICByZXR1cm47CiAgICAgCiAgICAgLy8gQ29t
cGlsYXRpb24gd3JpdGVzIGxvdHMgb2YgdmFsdWVzIHRvIGEgQ29kZUJsb2NrIHdpdGhvdXQgcGVy
Zm9ybWluZwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlcG9pbnQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZXBvaW50LmNw
cAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZl
cG9pbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxNC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODMsMjggKzgzLDQ2IEBAIHZvaWQgU2FmZXBv
aW50OjpiZWdpbigpCiAgICAgfQogfQogCi12b2lkIFNhZmVwb2ludDo6Y2hlY2tMaXZlbmVzc0Fu
ZFZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPgordm9pZCBTYWZlcG9pbnQ6OmNoZWNrTGl2ZW5lc3NBbmRWaXNpdENoaWxkcmVuKFZp
c2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQobV9kaWRDYWxsQmVnaW4pOwog
CiAgICAgaWYgKG1fcmVzdWx0Lm1fZGlkR2V0Q2FuY2VsbGVkKQogICAgICAgICByZXR1cm47IC8v
IFdlIHdlcmUgY2FuY2VsbGVkIGR1cmluZyBhIHByZXZpb3VzIEdDIQogICAgIAotICAgIGlmICgh
aXNLbm93blRvQmVMaXZlRHVyaW5nR0MoKSkKKyAgICBpZiAoIWlzS25vd25Ub0JlTGl2ZUR1cmlu
Z0dDKHZpc2l0b3IpKQogICAgICAgICByZXR1cm47CiAgICAgCiAgICAgZm9yICh1bnNpZ25lZCBp
ID0gbV9zY2FubmFibGVzLnNpemUoKTsgaS0tOykKICAgICAgICAgbV9zY2FubmFibGVzW2ldLT52
aXNpdENoaWxkcmVuKHZpc2l0b3IpOwogfQogCi1ib29sIFNhZmVwb2ludDo6aXNLbm93blRvQmVM
aXZlRHVyaW5nR0MoKQordGVtcGxhdGUgdm9pZCBTYWZlcG9pbnQ6OmNoZWNrTGl2ZW5lc3NBbmRW
aXNpdENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgU2FmZXBv
aW50OjpjaGVja0xpdmVuZXNzQW5kVmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYpOworCit0ZW1w
bGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgorYm9vbCBTYWZlcG9pbnQ6OmlzS25vd25Ub0JlTGl2ZUR1
cmluZ0dDKFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgUkVMRUFTRV9BU1NFUlQobV9kaWRDYWxs
QmVnaW4pOworICAgIAorICAgIGlmIChtX3Jlc3VsdC5tX2RpZEdldENhbmNlbGxlZCkKKyAgICAg
ICAgcmV0dXJuIHRydWU7IC8vIFdlIHdlcmUgY2FuY2VsbGVkIGR1cmluZyBhIHByZXZpb3VzIEdD
LCBzbyBsZXQncyBub3QgbWVzcyB3aXRoIGl0IHRoaXMgdGltZSBhcm91bmQgLSBwcmV0ZW5kIGl0
J3MgbGl2ZSBhbmQgbW92ZSBvbi4KKyAgICAKKyAgICByZXR1cm4gbV9wbGFuLmlzS25vd25Ub0Jl
TGl2ZUR1cmluZ0dDKHZpc2l0b3IpOworfQorCit0ZW1wbGF0ZSBib29sIFNhZmVwb2ludDo6aXNL
bm93blRvQmVMaXZlRHVyaW5nR0MoQWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgYm9v
bCBTYWZlcG9pbnQ6OmlzS25vd25Ub0JlTGl2ZUR1cmluZ0dDKFNsb3RWaXNpdG9yJik7CisKK2Jv
b2wgU2FmZXBvaW50Ojppc0tub3duVG9CZUxpdmVBZnRlckdDKCkKIHsKICAgICBSRUxFQVNFX0FT
U0VSVChtX2RpZENhbGxCZWdpbik7CiAgICAgCiAgICAgaWYgKG1fcmVzdWx0Lm1fZGlkR2V0Q2Fu
Y2VsbGVkKQogICAgICAgICByZXR1cm4gdHJ1ZTsgLy8gV2Ugd2VyZSBjYW5jZWxsZWQgZHVyaW5n
IGEgcHJldmlvdXMgR0MsIHNvIGxldCdzIG5vdCBtZXNzIHdpdGggaXQgdGhpcyB0aW1lIGFyb3Vu
ZCAtIHByZXRlbmQgaXQncyBsaXZlIGFuZCBtb3ZlIG9uLgogICAgIAotICAgIHJldHVybiBtX3Bs
YW4uaXNLbm93blRvQmVMaXZlRHVyaW5nR0MoKTsKKyAgICByZXR1cm4gbV9wbGFuLmlzS25vd25U
b0JlTGl2ZUFmdGVyR0MoKTsKIH0KIAogdm9pZCBTYWZlcG9pbnQ6OmNhbmNlbCgpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVwb2ludC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZXBvaW50LmgJKHJldmlzaW9uIDI3MjkwMikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZXBvaW50LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0LCAyMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMzEsNyArMzEsNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotY2xhc3MgU2xvdFZp
c2l0b3I7CitjbGFzcyBBYnN0cmFjdFNsb3RWaXNpdG9yOwogY2xhc3MgVk07CiAKIG5hbWVzcGFj
ZSBERkcgewpAQCAtNjYsOSArNjYsMTAgQEAgcHVibGljOgogICAgIHZvaWQgYWRkKFNjYW5uYWJs
ZSopOwogICAgIAogICAgIHZvaWQgYmVnaW4oKTsKLSAgICAKLSAgICB2b2lkIGNoZWNrTGl2ZW5l
c3NBbmRWaXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJik7Ci0gICAgYm9vbCBpc0tub3duVG9CZUxp
dmVEdXJpbmdHQygpOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCBjaGVj
a0xpdmVuZXNzQW5kVmlzaXRDaGlsZHJlbihWaXNpdG9yJik7CisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgVmlzaXRvcj4gYm9vbCBpc0tub3duVG9CZUxpdmVEdXJpbmdHQyhWaXNpdG9yJik7CisgICAg
Ym9vbCBpc0tub3duVG9CZUxpdmVBZnRlckdDKCk7CiAgICAgdm9pZCBjYW5jZWwoKTsKICAgICAK
ICAgICBWTSogdm0oKSBjb25zdDsgLy8gTWF5IHJldHVybiBudWxsIGlmIHdlJ3ZlIGJlZW4gY2Fu
Y2VsbGVkLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTY2FubmFibGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NjYW5uYWJsZS5oCShy
ZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NjYW5uYWJs
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTQtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTI5LDcgKzI5LDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLWNs
YXNzIFNsb3RWaXNpdG9yOworY2xhc3MgQWJzdHJhY3RTbG90VmlzaXRvcjsKIAogbmFtZXNwYWNl
IERGRyB7CiAKQEAgLTM4LDcgKzM4LDcgQEAgcHVibGljOgogICAgIFNjYW5uYWJsZSgpIHsgfQog
ICAgIHZpcnR1YWwgflNjYW5uYWJsZSgpIHsgfQogICAgIAotICAgIHZpcnR1YWwgdm9pZCB2aXNp
dENoaWxkcmVuKFNsb3RWaXNpdG9yJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdENoaWxk
cmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImKSA9IDA7CiB9OwogCiB9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0LmNwcAko
cmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlz
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNzIsNyArMzcyLDggQEAgdm9pZCBXb3JrbGlzdDo6
cmVzdW1lQWxsVGhyZWFkcygpCiAgICAgbV9zdXNwZW5zaW9uTG9jay51bmxvY2soKTsKIH0KIAot
dm9pZCBXb3JrbGlzdDo6dmlzaXRXZWFrUmVmZXJlbmNlcyhTbG90VmlzaXRvciYgdmlzaXRvcikK
K3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFdvcmtsaXN0Ojp2aXNpdFdlYWtSZWZl
cmVuY2VzKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgVk0qIHZtID0gJnZpc2l0b3IuaGVhcCgp
LT52bSgpOwogICAgIHsKQEAgLTM5Niw2ICszOTcsOSBAQCB2b2lkIFdvcmtsaXN0Ojp2aXNpdFdl
YWtSZWZlcmVuY2VzKFNsb3RWCiAgICAgfQogfQogCit0ZW1wbGF0ZSB2b2lkIFdvcmtsaXN0Ojp2
aXNpdFdlYWtSZWZlcmVuY2VzKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQg
V29ya2xpc3Q6OnZpc2l0V2Vha1JlZmVyZW5jZXMoU2xvdFZpc2l0b3ImKTsKKwogdm9pZCBXb3Jr
bGlzdDo6cmVtb3ZlRGVhZFBsYW5zKFZNJiB2bSkKIHsKICAgICB7CkBAIC00MDUsNyArNDA5LDcg
QEAgdm9pZCBXb3JrbGlzdDo6cmVtb3ZlRGVhZFBsYW5zKFZNJiB2bSkKICAgICAgICAgICAgIFBs
YW4qIHBsYW4gPSBpdGVyLT52YWx1ZS5nZXQoKTsKICAgICAgICAgICAgIGlmIChwbGFuLT52bSgp
ICE9ICZ2bSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGlmIChwbGFu
LT5pc0tub3duVG9CZUxpdmVEdXJpbmdHQygpKSB7CisgICAgICAgICAgICBpZiAocGxhbi0+aXNL
bm93blRvQmVMaXZlQWZ0ZXJHQygpKSB7CiAgICAgICAgICAgICAgICAgcGxhbi0+ZmluYWxpemVJ
bkdDKCk7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CkBAIC00NDAs
NyArNDQ0LDcgQEAgdm9pZCBXb3JrbGlzdDo6cmVtb3ZlRGVhZFBsYW5zKFZNJiB2bSkKICAgICAg
ICAgICAgIGNvbnRpbnVlOwogICAgICAgICBpZiAoc2FmZXBvaW50LT52bSgpICE9ICZ2bSkKICAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAoc2FmZXBvaW50LT5pc0tub3duVG9CZUxp
dmVEdXJpbmdHQygpKQorICAgICAgICBpZiAoc2FmZXBvaW50LT5pc0tub3duVG9CZUxpdmVBZnRl
ckdDKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgc2FmZXBvaW50LT5jYW5jZWwo
KTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5oCShy
ZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0zNSw3ICszNSw3IEBACiAKIG5hbWVzcGFjZSBKU0Mgewog
Ci1jbGFzcyBTbG90VmlzaXRvcjsKK2NsYXNzIEFic3RyYWN0U2xvdFZpc2l0b3I7CiAKIG5hbWVz
cGFjZSBERkcgewogCkBAIC01Nyw3ICs1Nyw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGNvbXBsZXRl
QWxsUGxhbnNGb3JWTShWTSYpOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KLSAgICB2
b2lkIGl0ZXJhdGVDb2RlQmxvY2tzRm9yR0MoVk0mLCBjb25zdCBGdW5jJik7CisgICAgdm9pZCBp
dGVyYXRlQ29kZUJsb2Nrc0ZvckdDKEFic3RyYWN0U2xvdFZpc2l0b3ImLCBWTSYsIGNvbnN0IEZ1
bmMmKTsKIAogICAgIHZvaWQgd2FpdFVudGlsQWxsUGxhbnNGb3JWTUFyZVJlYWR5KFZNJik7CiAg
ICAgU3RhdGUgY29tcGxldGVBbGxSZWFkeVBsYW5zRm9yVk0oVk0mLCBDb21waWxhdGlvbktleSA9
IENvbXBpbGF0aW9uS2V5KCkpOwpAQCAtNzMsNyArNzMsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBp
c0FjdGl2ZUZvclZNKFZNJikgY29uc3Q7CiAgICAgCiAgICAgLy8gT25seSBjYWxsZWQgb24gdGhl
IG1haW4gdGhyZWFkIGFmdGVyIHN1c3BlbmRpbmcgYWxsIHRocmVhZHMuCi0gICAgdm9pZCB2aXNp
dFdlYWtSZWZlcmVuY2VzKFNsb3RWaXNpdG9yJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlz
aXRvcj4gdm9pZCB2aXNpdFdlYWtSZWZlcmVuY2VzKFZpc2l0b3ImKTsKICAgICB2b2lkIHJlbW92
ZURlYWRQbGFucyhWTSYpOwogICAgIAogICAgIHZvaWQgcmVtb3ZlTm9uQ29tcGlsaW5nUGxhbnNG
b3JWTShWTSYpOwpAQCAtMTQ0LDcgKzE0NCw3IEBAIFdvcmtsaXN0JiBleGlzdGluZ1dvcmtsaXN0
Rm9ySW5kZXgodW5zaWcKIHZvaWQgY29tcGxldGVBbGxQbGFuc0ZvclZNKFZNJik7CiAKIHRlbXBs
YXRlPHR5cGVuYW1lIEZ1bmM+Ci12b2lkIGl0ZXJhdGVDb2RlQmxvY2tzRm9yR0MoVk0mLCBjb25z
dCBGdW5jJik7Cit2b2lkIGl0ZXJhdGVDb2RlQmxvY2tzRm9yR0MoQWJzdHJhY3RTbG90VmlzaXRv
ciYsIFZNJiwgY29uc3QgRnVuYyYpOwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3RJbmxpbmVzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlzdElubGluZXMuaAko
cmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlz
dElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTctMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMzLDMwICszMywzMCBAQCBuYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIERGRyB7CiAjaWYgRU5BQkxFKERGR19KSVQpCiAKIHRlbXBsYXRlPHR5
cGVuYW1lIEZ1bmM+Ci12b2lkIGl0ZXJhdGVDb2RlQmxvY2tzRm9yR0MoVk0mIHZtLCBjb25zdCBG
dW5jJiBmdW5jKQordm9pZCBpdGVyYXRlQ29kZUJsb2Nrc0ZvckdDKEFic3RyYWN0U2xvdFZpc2l0
b3ImIHZpc2l0b3IsIFZNJiB2bSwgY29uc3QgRnVuYyYgZnVuYykKIHsKICAgICBmb3IgKHVuc2ln
bmVkIGkgPSBERkc6Om51bWJlck9mV29ya2xpc3RzKCk7IGktLTspIHsKICAgICAgICAgaWYgKERG
Rzo6V29ya2xpc3QqIHdvcmtsaXN0ID0gREZHOjpleGlzdGluZ1dvcmtsaXN0Rm9ySW5kZXhPck51
bGwoaSkpCi0gICAgICAgICAgICB3b3JrbGlzdC0+aXRlcmF0ZUNvZGVCbG9ja3NGb3JHQyh2bSwg
ZnVuYyk7CisgICAgICAgICAgICB3b3JrbGlzdC0+aXRlcmF0ZUNvZGVCbG9ja3NGb3JHQyh2aXNp
dG9yLCB2bSwgZnVuYyk7CiAgICAgfQogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgotdm9p
ZCBXb3JrbGlzdDo6aXRlcmF0ZUNvZGVCbG9ja3NGb3JHQyhWTSYgdm0sIGNvbnN0IEZ1bmMmIGZ1
bmMpCit2b2lkIFdvcmtsaXN0OjppdGVyYXRlQ29kZUJsb2Nrc0ZvckdDKEFic3RyYWN0U2xvdFZp
c2l0b3ImIHZpc2l0b3IsIFZNJiB2bSwgY29uc3QgRnVuYyYgZnVuYykKIHsKICAgICBMb2NrSG9s
ZGVyIGxvY2tlcigqbV9sb2NrKTsKICAgICBmb3IgKFBsYW5NYXA6Oml0ZXJhdG9yIGl0ZXIgPSBt
X3BsYW5zLmJlZ2luKCk7IGl0ZXIgIT0gbV9wbGFucy5lbmQoKTsgKytpdGVyKSB7CiAgICAgICAg
IFBsYW4qIHBsYW4gPSBpdGVyLT52YWx1ZS5nZXQoKTsKICAgICAgICAgaWYgKHBsYW4tPnZtKCkg
IT0gJnZtKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIHBsYW4tPml0ZXJhdGVDb2Rl
QmxvY2tzRm9yR0MoZnVuYyk7CisgICAgICAgIHBsYW4tPml0ZXJhdGVDb2RlQmxvY2tzRm9yR0Mo
dmlzaXRvciwgZnVuYyk7CiAgICAgfQogfQogCiAjZWxzZSAvLyBFTkFCTEUoREZHX0pJVCkKIAog
dGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KLXZvaWQgaXRlcmF0ZUNvZGVCbG9ja3NGb3JHQyhWTSYs
IGNvbnN0IEZ1bmMmKQordm9pZCBpdGVyYXRlQ29kZUJsb2Nrc0ZvckdDKEFic3RyYWN0U2xvdFZp
c2l0b3ImLCBWTSYsIGNvbnN0IEZ1bmMmKQogewogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9BYnN0cmFjdFNsb3RWaXNpdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvQWJzdHJhY3RTbG90VmlzaXRvci5oCShub25leGlzdGVudCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Fic3RyYWN0U2xvdFZpc2l0b3IuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDIwOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiSlNDSlNWYWx1ZS5oIgor
I2luY2x1ZGUgIk1hcmtTdGFjay5oIgorI2luY2x1ZGUgIlJvb3RNYXJrUmVhc29uLmgiCisjaW5j
bHVkZSAiVmlzaXRSYWNlS2V5LmgiCisjaW5jbHVkZSA8d3RmL0NvbmN1cnJlbnRQdHJIYXNoU2V0
Lmg+CisjaW5jbHVkZSA8d3RmL1NoYXJlZFRhc2suaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3Ry
aW5nLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBDb25zZXJ2YXRpdmVSb290czsKK2Ns
YXNzIEhlYXA7CitjbGFzcyBIZWFwQ2VsbDsKK2NsYXNzIEpTQ2VsbDsKK2NsYXNzIE1hcmtlZEJs
b2NrOworY2xhc3MgTWFya2luZ0NvbnN0cmFpbnQ7CitjbGFzcyBNYXJraW5nQ29uc3RyYWludFNv
bHZlcjsKK2NsYXNzIFByZWNpc2VBbGxvY2F0aW9uOworY2xhc3MgU2xvdFZpc2l0b3I7CitjbGFz
cyBWTTsKK2NsYXNzIFZlcmlmaWVyU2xvdFZpc2l0b3I7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBj
bGFzcyBXZWFrOwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVHJhaXRzPiBjbGFzcyBX
cml0ZUJhcnJpZXJCYXNlOworCitjbGFzcyBBYnN0cmFjdFNsb3RWaXNpdG9yIHsKKyAgICBXVEZf
TUFLRV9OT05DT1BZQUJMRShBYnN0cmFjdFNsb3RWaXNpdG9yKTsKKyAgICBXVEZfTUFLRV9GQVNU
X0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBjbGFzcyBDb250ZXh0IHsKKyAgICBwdWJsaWM6Cisg
ICAgICAgIENvbnRleHQoQWJzdHJhY3RTbG90VmlzaXRvciYsIEhlYXBDZWxsKik7CisgICAgICAg
IH5Db250ZXh0KCk7CisgICAgICAgIEhlYXBDZWxsKiBjZWxsKCkgY29uc3QgeyByZXR1cm4gbV9j
ZWxsOyB9CisgICAgcHJpdmF0ZToKKyAgICAgICAgQWJzdHJhY3RTbG90VmlzaXRvciYgbV92aXNp
dG9yOworICAgICAgICBIZWFwQ2VsbCogbV9jZWxsOworICAgICAgICBDb250ZXh0KiBtX3ByZXZp
b3VzOworICAgIH07CisKKyAgICBjbGFzcyBTdXBwcmVzc0dDVmVyaWZpZXJTY29wZSB7CisgICAg
cHVibGljOgorICAgICAgICBTdXBwcmVzc0dDVmVyaWZpZXJTY29wZShBYnN0cmFjdFNsb3RWaXNp
dG9yJiB2aXNpdG9yKQorICAgICAgICAgICAgOiBtX3Zpc2l0b3IodmlzaXRvcikKKyAgICAgICAg
eworICAgICAgICAgICAgQVNTRVJUKCFtX3Zpc2l0b3IubV9zdXBwcmVzc1ZlcmlmaWVyKTsKKyAg
ICAgICAgICAgIG1fdmlzaXRvci5tX3N1cHByZXNzVmVyaWZpZXIgPSB0cnVlOworICAgICAgICB9
CisgICAgICAgIH5TdXBwcmVzc0dDVmVyaWZpZXJTY29wZSgpIHsgbV92aXNpdG9yLm1fc3VwcHJl
c3NWZXJpZmllciA9IGZhbHNlOyB9CisgICAgcHJpdmF0ZToKKyAgICAgICAgQWJzdHJhY3RTbG90
VmlzaXRvciYgbV92aXNpdG9yOworICAgIH07CisKKyAgICBjbGFzcyBEZWZhdWx0TWFya2luZ1Zp
b2xhdGlvbkFzc2VydGlvblNjb3BlIHsKKyAgICBwdWJsaWM6CisgICAgICAgIERlZmF1bHRNYXJr
aW5nVmlvbGF0aW9uQXNzZXJ0aW9uU2NvcGUoQWJzdHJhY3RTbG90VmlzaXRvciYpIHsgfQorICAg
IH07CisKKyAgICB2aXJ0dWFsIH5BYnN0cmFjdFNsb3RWaXNpdG9yKCkgPSBkZWZhdWx0OworCisg
ICAgTWFya1N0YWNrQXJyYXkmIGNvbGxlY3Rvck1hcmtTdGFjaygpIHsgcmV0dXJuIG1fY29sbGVj
dG9yU3RhY2s7IH0KKyAgICBNYXJrU3RhY2tBcnJheSYgbXV0YXRvck1hcmtTdGFjaygpIHsgcmV0
dXJuIG1fbXV0YXRvclN0YWNrOyB9CisgICAgY29uc3QgTWFya1N0YWNrQXJyYXkmIGNvbGxlY3Rv
ck1hcmtTdGFjaygpIGNvbnN0IHsgcmV0dXJuIG1fY29sbGVjdG9yU3RhY2s7IH0KKyAgICBjb25z
dCBNYXJrU3RhY2tBcnJheSYgbXV0YXRvck1hcmtTdGFjaygpIGNvbnN0IHsgcmV0dXJuIG1fbXV0
YXRvclN0YWNrOyB9CisKKyAgICBib29sIGlzRW1wdHkoKSB7IHJldHVybiBtX2NvbGxlY3RvclN0
YWNrLmlzRW1wdHkoKSAmJiBtX211dGF0b3JTdGFjay5pc0VtcHR5KCk7IH0KKworICAgIFZNJiB2
bSgpOworICAgIGNvbnN0IFZNJiB2bSgpIGNvbnN0OworICAgIEhlYXAqIGhlYXAoKSBjb25zdDsK
KworICAgIHZpcnR1YWwgdm9pZCBhcHBlbmQoY29uc3QgQ29uc2VydmF0aXZlUm9vdHMmKSA9IDA7
CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBUcmFpdHM+IHZvaWQgYXBwZW5k
KGNvbnN0IFdyaXRlQmFycmllckJhc2U8VCwgVHJhaXRzPiYpOworICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIFRyYWl0cz4gdm9pZCBhcHBlbmRIaWRkZW4oY29uc3QgV3JpdGVCYXJy
aWVyQmFzZTxULCBUcmFpdHM+Jik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSXRlcmF0b3I+IHZv
aWQgYXBwZW5kKEl0ZXJhdG9yIGJlZ2luICwgSXRlcmF0b3IgZW5kKTsKKyAgICBBTFdBWVNfSU5M
SU5FIHZvaWQgYXBwZW5kVmFsdWVzKGNvbnN0IFdyaXRlQmFycmllckJhc2U8VW5rbm93biwgUmF3
VmFsdWVUcmFpdHM8VW5rbm93bj4+Kiwgc2l6ZV90IGNvdW50KTsKKyAgICBBTFdBWVNfSU5MSU5F
IHZvaWQgYXBwZW5kVmFsdWVzSGlkZGVuKGNvbnN0IFdyaXRlQmFycmllckJhc2U8VW5rbm93biwg
UmF3VmFsdWVUcmFpdHM8VW5rbm93bj4+Kiwgc2l6ZV90IGNvdW50KTsKKworICAgIC8vIFRoZXNl
IGRvbid0IHJlcXVpcmUgeW91IHRvIHByb3ZlIHRoYXQgeW91IGhhdmUgYSBXcml0ZUJhcnJpZXI8
Pi4gVGhhdCBtYWtlcyBzZW5zZQorICAgIC8vIGZvcjoKKyAgICAvLworICAgIC8vIC0gcm9vdHMu
CisgICAgLy8gLSBzb3BoaXN0aWNhdGVkIGRhdGEgc3RydWN0dXJlcyB0aGF0IGJhcnJpZXIgdGhy
b3VnaCBvdGhlciBtZWFucyAobGlrZSBERkc6OlBsYW4gYW5kCisgICAgLy8gICBmcmllbmRzKS4K
KyAgICAvLworICAgIC8vIElmIHlvdSBhcmUgbm90IGEgcm9vdCBhbmQgeW91IGRvbid0IGtub3cg
d2hhdCBraW5kIG9mIGJhcnJpZXIgeW91IGhhdmUsIHRoZW4geW91CisgICAgLy8gc2hvdWxkbid0
IGNhbGwgdGhlc2UgbWV0aG9kcy4KKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgYXBwZW5kVW5iYXJy
aWVyZWQoSlNWYWx1ZSk7CisgICAgQUxXQVlTX0lOTElORSB2b2lkIGFwcGVuZFVuYmFycmllcmVk
KEpTVmFsdWUqLCBzaXplX3QpOworICAgIHZpcnR1YWwgdm9pZCBhcHBlbmRVbmJhcnJpZXJlZChK
U0NlbGwqKSA9IDA7CisKKyAgICBpbmxpbmUgYm9vbCBhZGRPcGFxdWVSb290KHZvaWQqKTsgLy8g
UmV0dXJucyB0cnVlIGlmIHRoZSByb290IHdhcyBuZXcuCisgICAgaW5saW5lIGJvb2wgY29udGFp
bnNPcGFxdWVSb290KHZvaWQqKSBjb25zdDsKKyAgICB2b2lkIHNldElnbm9yZU5ld09wYXF1ZVJv
b3RzKGJvb2wgdmFsdWUpIHsgbV9pZ25vcmVOZXdPcGFxdWVSb290cyA9IHZhbHVlOyB9CisKKyAg
ICB2aXJ0dWFsIGJvb2wgaXNGaXJzdFZpc2l0KCkgY29uc3QgPSAwOworCisgICAgdmlydHVhbCBi
b29sIGlzTWFya2VkKGNvbnN0IHZvaWQqKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBib29sIGlz
TWFya2VkKE1hcmtlZEJsb2NrJiwgSGVhcENlbGwqKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBi
b29sIGlzTWFya2VkKFByZWNpc2VBbGxvY2F0aW9uJiwgSGVhcENlbGwqKSBjb25zdCA9IDA7CisK
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIHZvaWQgYXBwZW5kKGNvbnN0IFdlYWs8VD4m
KTsKKworICAgIEFMV0FZU19JTkxJTkUgdm9pZCBhcHBlbmRIaWRkZW5VbmJhcnJpZXJlZChKU1Zh
bHVlKTsKKyAgICB2aXJ0dWFsIHZvaWQgYXBwZW5kSGlkZGVuVW5iYXJyaWVyZWQoSlNDZWxsKikg
PSAwOworCisgICAgc2l6ZV90IHZpc2l0Q291bnQoKSBjb25zdCB7IHJldHVybiBtX3Zpc2l0Q291
bnQ7IH0KKworICAgIHZvaWQgYWRkVG9WaXNpdENvdW50KHNpemVfdCB2YWx1ZSkgeyBtX3Zpc2l0
Q291bnQgKz0gdmFsdWU7IH0KKworICAgIHZpcnR1YWwgdm9pZCBhZGRQYXJhbGxlbENvbnN0cmFp
bnRUYXNrKFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoQWJzdHJhY3RTbG90VmlzaXRvciYpPj4pID0g
MDsKKyAgICB2aXJ0dWFsIHZvaWQgYWRkUGFyYWxsZWxDb25zdHJhaW50VGFzayhSZWZQdHI8U2hh
cmVkVGFzazx2b2lkKFNsb3RWaXNpdG9yJik+PikgPSAwOworCisgICAgdmlydHVhbCB2b2lkIG1h
cmtBdXhpbGlhcnkoY29uc3Qgdm9pZCogYmFzZSkgPSAwOworCisgICAgdmlydHVhbCB2b2lkIHJl
cG9ydEV4dHJhTWVtb3J5VmlzaXRlZChzaXplX3QpID0gMDsKKyNpZiBFTkFCTEUoUkVTT1VSQ0Vf
VVNBR0UpCisgICAgdmlydHVhbCB2b2lkIHJlcG9ydEV4dGVybmFsTWVtb3J5VmlzaXRlZChzaXpl
X3QpID0gMDsKKyNlbmRpZgorCisgICAgdmlydHVhbCB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBj
b25zdCA9IDA7CisKKyAgICBSb290TWFya1JlYXNvbiByb290TWFya1JlYXNvbigpIGNvbnN0IHsg
cmV0dXJuIG1fcm9vdE1hcmtSZWFzb247IH0KKyAgICB2b2lkIHNldFJvb3RNYXJrUmVhc29uKFJv
b3RNYXJrUmVhc29uIHJlYXNvbikgeyBtX3Jvb3RNYXJrUmVhc29uID0gcmVhc29uOyB9CisKKyAg
ICB2aXJ0dWFsIGJvb2wgbXV0YXRvcklzU3RvcHBlZCgpIGNvbnN0ID0gMDsKKworICAgIHZpcnR1
YWwgdm9pZCBkaWRSYWNlKGNvbnN0IFZpc2l0UmFjZUtleSYpID0gMDsKKyAgICB2b2lkIGRpZFJh
Y2UoSlNDZWxsKiBjZWxsLCBjb25zdCBjaGFyKiByZWFzb24pIHsgZGlkUmFjZShWaXNpdFJhY2VL
ZXkoY2VsbCwgcmVhc29uKSk7IH0KKworICAgIHZpcnR1YWwgdm9pZCB2aXNpdEFzQ29uc3RyYWlu
dChjb25zdCBKU0NlbGwqKSA9IDA7CisKKyAgICBjb25zdCBjaGFyKiBjb2RlTmFtZSgpIGNvbnN0
IHsgcmV0dXJuIG1fY29kZU5hbWUuZGF0YSgpOyB9CisKK3Byb3RlY3RlZDoKKyAgICBpbmxpbmUg
QWJzdHJhY3RTbG90VmlzaXRvcihIZWFwJiwgQ1N0cmluZyBjb2RlTmFtZSwgQ29uY3VycmVudFB0
ckhhc2hTZXQmKTsKKworICAgIEhlYXBDZWxsKiBwYXJlbnRDZWxsKCkgY29uc3Q7CisgICAgdm9p
ZCByZXNldCgpOworCisgICAgTWFya1N0YWNrQXJyYXkgbV9jb2xsZWN0b3JTdGFjazsKKyAgICBN
YXJrU3RhY2tBcnJheSBtX211dGF0b3JTdGFjazsKKworICAgIHNpemVfdCBtX3Zpc2l0Q291bnQg
eyAwIH07CisKKyAgICBIZWFwJiBtX2hlYXA7CisgICAgQ29udGV4dCogbV9jb250ZXh0IHsgbnVs
bHB0ciB9OworICAgIENTdHJpbmcgbV9jb2RlTmFtZTsKKworICAgIE1hcmtpbmdDb25zdHJhaW50
KiBtX2N1cnJlbnRDb25zdHJhaW50IHsgbnVsbHB0ciB9OworICAgIE1hcmtpbmdDb25zdHJhaW50
U29sdmVyKiBtX2N1cnJlbnRTb2x2ZXIgeyBudWxscHRyIH07CisgICAgQ29uY3VycmVudFB0ckhh
c2hTZXQmIG1fb3BhcXVlUm9vdHM7CisKKyAgICBSb290TWFya1JlYXNvbiBtX3Jvb3RNYXJrUmVh
c29uIHsgUm9vdE1hcmtSZWFzb246Ok5vbmUgfTsKKyAgICBib29sIG1fc3VwcHJlc3NWZXJpZmll
ciB7IGZhbHNlIH07CisgICAgYm9vbCBtX2lnbm9yZU5ld09wYXF1ZVJvb3RzIHsgZmFsc2UgfTsg
Ly8gVXNlZnVsIGFzIGEgZGVidWdnaW5nIG1vZGUuCisKKyAgICBmcmllbmQgY2xhc3MgTWFya2lu
Z0NvbnN0cmFpbnRTb2x2ZXI7Cit9OworCitjbGFzcyBTZXRSb290TWFya1JlYXNvblNjb3BlIHsK
K3B1YmxpYzoKKyAgICBTZXRSb290TWFya1JlYXNvblNjb3BlKEFic3RyYWN0U2xvdFZpc2l0b3Im
IHZpc2l0b3IsIFJvb3RNYXJrUmVhc29uIHJlYXNvbikKKyAgICAgICAgOiBtX3Zpc2l0b3Iodmlz
aXRvcikKKyAgICAgICAgLCBtX3ByZXZpb3VzUmVhc29uKHZpc2l0b3Iucm9vdE1hcmtSZWFzb24o
KSkKKyAgICB7CisgICAgICAgIG1fdmlzaXRvci5zZXRSb290TWFya1JlYXNvbihyZWFzb24pOwor
ICAgIH0KKworICAgIH5TZXRSb290TWFya1JlYXNvblNjb3BlKCkKKyAgICB7CisgICAgICAgIG1f
dmlzaXRvci5zZXRSb290TWFya1JlYXNvbihtX3ByZXZpb3VzUmVhc29uKTsKKyAgICB9CisKK3By
aXZhdGU6CisgICAgQWJzdHJhY3RTbG90VmlzaXRvciYgbV92aXNpdG9yOworICAgIFJvb3RNYXJr
UmVhc29uIG1fcHJldmlvdXNSZWFzb247Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Fic3RyYWN0U2xvdFZpc2l0b3JJbmxpbmVzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQWJzdHJhY3RTbG90Vmlz
aXRvcklubGluZXMuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9BYnN0cmFjdFNsb3RWaXNpdG9ySW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MTU0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3By
YWdtYSBvbmNlCisKKyNpbmNsdWRlICJBYnN0cmFjdFNsb3RWaXNpdG9yLmgiCisjaW5jbHVkZSAi
SGVhcC5oIgorI2luY2x1ZGUgIldlYWtJbmxpbmVzLmgiCisjaW5jbHVkZSAiV3JpdGVCYXJyaWVy
LmgiCisKK25hbWVzcGFjZSBKU0MgeworCitpbmxpbmUgQWJzdHJhY3RTbG90VmlzaXRvcjo6Q29u
dGV4dDo6Q29udGV4dChBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBIZWFwQ2VsbCogY2Vs
bCkKKyAgICA6IG1fdmlzaXRvcih2aXNpdG9yKQorICAgICwgbV9jZWxsKGNlbGwpCit7CisgICAg
bV9wcmV2aW91cyA9IG1fdmlzaXRvci5tX2NvbnRleHQ7CisgICAgbV92aXNpdG9yLm1fY29udGV4
dCA9IHRoaXM7Cit9CisKK2lubGluZSBBYnN0cmFjdFNsb3RWaXNpdG9yOjpDb250ZXh0Ojp+Q29u
dGV4dCgpCit7CisgICAgbV92aXNpdG9yLm1fY29udGV4dCA9IG1fcHJldmlvdXM7Cit9CisKK2lu
bGluZSBBYnN0cmFjdFNsb3RWaXNpdG9yOjpBYnN0cmFjdFNsb3RWaXNpdG9yKEhlYXAmIGhlYXAs
IENTdHJpbmcgY29kZU5hbWUsIENvbmN1cnJlbnRQdHJIYXNoU2V0JiBvcGFxdWVSb290cykKKyAg
ICA6IG1faGVhcChoZWFwKQorICAgICwgbV9jb2RlTmFtZShjb2RlTmFtZSkKKyAgICAsIG1fb3Bh
cXVlUm9vdHMob3BhcXVlUm9vdHMpCit7Cit9CisKK2lubGluZSBIZWFwKiBBYnN0cmFjdFNsb3RW
aXNpdG9yOjpoZWFwKCkgY29uc3QKK3sKKyAgICByZXR1cm4gJm1faGVhcDsKK30KKworaW5saW5l
IFZNJiBBYnN0cmFjdFNsb3RWaXNpdG9yOjp2bSgpCit7CisgICAgcmV0dXJuIG1faGVhcC52bSgp
OworfQorCitpbmxpbmUgY29uc3QgVk0mIEFic3RyYWN0U2xvdFZpc2l0b3I6OnZtKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gbV9oZWFwLnZtKCk7Cit9CisKK2lubGluZSBib29sIEFic3RyYWN0U2xv
dFZpc2l0b3I6OmFkZE9wYXF1ZVJvb3Qodm9pZCogcHRyKQoreworICAgIGlmICghcHRyKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG1faWdub3JlTmV3T3BhcXVlUm9vdHMpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIW1fb3BhcXVlUm9vdHMuYWRkKHB0cikpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICBtX3Zpc2l0Q291bnQrKzsKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKworaW5saW5lIGJvb2wgQWJzdHJhY3RTbG90VmlzaXRvcjo6Y29udGFpbnNPcGFxdWVSb290
KHZvaWQqIHB0cikgY29uc3QKK3sKKyAgICByZXR1cm4gbV9vcGFxdWVSb290cy5jb250YWlucyhw
dHIpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorQUxXQVlTX0lOTElORSB2b2lkIEFic3Ry
YWN0U2xvdFZpc2l0b3I6OmFwcGVuZChjb25zdCBXZWFrPFQ+JiB3ZWFrKQoreworICAgIGFwcGVu
ZFVuYmFycmllcmVkKHdlYWsuZ2V0KCkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBl
bmFtZSBUcmFpdHM+CitBTFdBWVNfSU5MSU5FIHZvaWQgQWJzdHJhY3RTbG90VmlzaXRvcjo6YXBw
ZW5kKGNvbnN0IFdyaXRlQmFycmllckJhc2U8VCwgVHJhaXRzPiYgc2xvdCkKK3sKKyAgICBhcHBl
bmRVbmJhcnJpZXJlZChzbG90LmdldCgpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlw
ZW5hbWUgVHJhaXRzPgorQUxXQVlTX0lOTElORSB2b2lkIEFic3RyYWN0U2xvdFZpc2l0b3I6OmFw
cGVuZEhpZGRlbihjb25zdCBXcml0ZUJhcnJpZXJCYXNlPFQsIFRyYWl0cz4mIHNsb3QpCit7Cisg
ICAgYXBwZW5kSGlkZGVuVW5iYXJyaWVyZWQoc2xvdC5nZXQoKSk7Cit9CisKK0FMV0FZU19JTkxJ
TkUgdm9pZCBBYnN0cmFjdFNsb3RWaXNpdG9yOjphcHBlbmRIaWRkZW5VbmJhcnJpZXJlZChKU1Zh
bHVlIHZhbHVlKQoreworICAgIGlmICh2YWx1ZS5pc0NlbGwoKSkKKyAgICAgICAgYXBwZW5kSGlk
ZGVuVW5iYXJyaWVyZWQodmFsdWUuYXNDZWxsKCkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBJ
dGVyYXRvcj4KK0FMV0FZU19JTkxJTkUgdm9pZCBBYnN0cmFjdFNsb3RWaXNpdG9yOjphcHBlbmQo
SXRlcmF0b3IgYmVnaW4sIEl0ZXJhdG9yIGVuZCkKK3sKKyAgICBmb3IgKGF1dG8gaXQgPSBiZWdp
bjsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICBhcHBlbmQoKml0KTsKK30KKworQUxXQVlTX0lO
TElORSB2b2lkIEFic3RyYWN0U2xvdFZpc2l0b3I6OmFwcGVuZFZhbHVlcyhjb25zdCBXcml0ZUJh
cnJpZXJCYXNlPFVua25vd24+KiBiYXJyaWVycywgc2l6ZV90IGNvdW50KQoreworICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgY291bnQ7ICsraSkKKyAgICAgICAgYXBwZW5kKGJhcnJpZXJzW2ld
KTsKK30KKworQUxXQVlTX0lOTElORSB2b2lkIEFic3RyYWN0U2xvdFZpc2l0b3I6OmFwcGVuZFZh
bHVlc0hpZGRlbihjb25zdCBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+KiBiYXJyaWVycywgc2l6
ZV90IGNvdW50KQoreworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY291bnQ7ICsraSkKKyAg
ICAgICAgYXBwZW5kSGlkZGVuKGJhcnJpZXJzW2ldKTsKK30KKworQUxXQVlTX0lOTElORSB2b2lk
IEFic3RyYWN0U2xvdFZpc2l0b3I6OmFwcGVuZFVuYmFycmllcmVkKEpTVmFsdWUgdmFsdWUpCit7
CisgICAgaWYgKHZhbHVlLmlzQ2VsbCgpKQorICAgICAgICBhcHBlbmRVbmJhcnJpZXJlZCh2YWx1
ZS5hc0NlbGwoKSk7Cit9CisKK0FMV0FZU19JTkxJTkUgdm9pZCBBYnN0cmFjdFNsb3RWaXNpdG9y
OjphcHBlbmRVbmJhcnJpZXJlZChKU1ZhbHVlKiBzbG90LCBzaXplX3QgY291bnQpCit7CisgICAg
Zm9yIChzaXplX3QgaSA9IGNvdW50OyBpLS07KQorICAgICAgICBhcHBlbmRVbmJhcnJpZXJlZChz
bG90W2ldKTsKK30KKworQUxXQVlTX0lOTElORSBIZWFwQ2VsbCogQWJzdHJhY3RTbG90VmlzaXRv
cjo6cGFyZW50Q2VsbCgpIGNvbnN0Cit7CisgICAgaWYgKCFtX2NvbnRleHQpCisgICAgICAgIHJl
dHVybiBudWxscHRyOworICAgIHJldHVybiBtX2NvbnRleHQtPmNlbGwoKTsKK30KKworQUxXQVlT
X0lOTElORSB2b2lkIEFic3RyYWN0U2xvdFZpc2l0b3I6OnJlc2V0KCkKK3sKKyAgICBtX3Zpc2l0
Q291bnQgPSAwOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0hhbmRsZVNldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvSGFuZGxlU2V0LmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvSGFuZGxlU2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU2LDcg
KzU2LDggQEAgdm9pZCBIYW5kbGVTZXQ6Omdyb3coKQogICAgIH0KIH0KIAotdm9pZCBIYW5kbGVT
ZXQ6OnZpc2l0U3Ryb25nSGFuZGxlcyhTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5
cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEhhbmRsZVNldDo6dmlzaXRTdHJvbmdIYW5kbGVzKFZpc2l0
b3ImIHZpc2l0b3IpCiB7CiAgICAgTm9kZSogZW5kID0gbV9zdHJvbmdMaXN0LmVuZCgpOwogICAg
IGZvciAoTm9kZSogbm9kZSA9IG1fc3Ryb25nTGlzdC5iZWdpbigpOyBub2RlICE9IGVuZDsgbm9k
ZSA9IG5vZGUtPm5leHQoKSkgewpAQCAtNjcsNiArNjgsOSBAQCB2b2lkIEhhbmRsZVNldDo6dmlz
aXRTdHJvbmdIYW5kbGVzKFNsb3RWCiAgICAgfQogfQogCit0ZW1wbGF0ZSB2b2lkIEhhbmRsZVNl
dDo6dmlzaXRTdHJvbmdIYW5kbGVzKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZv
aWQgSGFuZGxlU2V0Ojp2aXNpdFN0cm9uZ0hhbmRsZXMoU2xvdFZpc2l0b3ImKTsKKwogdm9pZCBI
YW5kbGVTZXQ6OndyaXRlQmFycmllcihIYW5kbGVTbG90IHNsb3QsIGNvbnN0IEpTVmFsdWUmIHZh
bHVlKQogewogICAgIGlmICghdmFsdWUgPT0gISpzbG90ICYmIHNsb3QtPmlzQ2VsbCgpID09IHZh
bHVlLmlzQ2VsbCgpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGFuZGxlU2V0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGFuZGxlU2V0LmgJ
KHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hhbmRsZVNl
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMS0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzUsMTAgKzM1LDEwIEBACiAKIG5hbWVzcGFjZSBKU0Mg
ewogCitjbGFzcyBBYnN0cmFjdFNsb3RWaXNpdG9yOwogY2xhc3MgSGFuZGxlU2V0OwogY2xhc3Mg
Vk07CiBjbGFzcyBKU1ZhbHVlOwotY2xhc3MgU2xvdFZpc2l0b3I7CiAKIGNsYXNzIEhhbmRsZU5v
ZGUgewogcHVibGljOgpAQCAtNzMsNyArNzMsNyBAQCBwdWJsaWM6CiAgICAgSGFuZGxlU2xvdCBh
bGxvY2F0ZSgpOwogICAgIHZvaWQgZGVhbGxvY2F0ZShIYW5kbGVTbG90KTsKIAotICAgIHZvaWQg
dmlzaXRTdHJvbmdIYW5kbGVzKFNsb3RWaXNpdG9yJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
VmlzaXRvcj4gdm9pZCB2aXNpdFN0cm9uZ0hhbmRsZXMoVmlzaXRvciYpOwogCiAgICAgSlNfRVhQ
T1JUX1BSSVZBVEUgdm9pZCB3cml0ZUJhcnJpZXIoSGFuZGxlU2xvdCwgY29uc3QgSlNWYWx1ZSYp
OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAkocmV2aXNpb24gMjcyOTAy
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTcyLDYgKzcyLDcgQEAKICNpbmNsdWRlICJUeXBlUHJvZmlsZXIuaCIKICNpbmNsdWRlICJU
eXBlUHJvZmlsZXJMb2cuaCIKICNpbmNsdWRlICJWTS5oIgorI2luY2x1ZGUgIlZlcmlmaWVyU2xv
dFZpc2l0b3JJbmxpbmVzLmgiCiAjaW5jbHVkZSAiV2Vha01hcEltcGxJbmxpbmVzLmgiCiAjaW5j
bHVkZSAiV2Vha1NldElubGluZXMuaCIKICNpbmNsdWRlIDxhbGdvcml0aG0+CkBAIC02NDMsMTkg
KzY0NCwxOSBAQCB2b2lkIEhlYXA6OmNvbXBsZXRlQWxsSklUUGxhbnMoKQogICAgIERGRzo6Y29t
cGxldGVBbGxQbGFuc0ZvclZNKG1fdm0pOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgot
dm9pZCBIZWFwOjppdGVyYXRlRXhlY3V0aW5nQW5kQ29tcGlsaW5nQ29kZUJsb2Nrcyhjb25zdCBG
dW5jJiBmdW5jKQordGVtcGxhdGU8dHlwZW5hbWUgRnVuYywgdHlwZW5hbWUgVmlzaXRvcj4KK3Zv
aWQgSGVhcDo6aXRlcmF0ZUV4ZWN1dGluZ0FuZENvbXBpbGluZ0NvZGVCbG9ja3MoVmlzaXRvciYg
dmlzaXRvciwgY29uc3QgRnVuYyYgZnVuYykKIHsKICAgICBtX2NvZGVCbG9ja3MtPml0ZXJhdGVD
dXJyZW50bHlFeGVjdXRpbmcoZnVuYyk7CiAgICAgaWYgKE9wdGlvbnM6OnVzZUpJVCgpKQotICAg
ICAgICBERkc6Oml0ZXJhdGVDb2RlQmxvY2tzRm9yR0MobV92bSwgZnVuYyk7CisgICAgICAgIERG
Rzo6aXRlcmF0ZUNvZGVCbG9ja3NGb3JHQyh2aXNpdG9yLCBtX3ZtLCBmdW5jKTsKIH0KIAotdGVt
cGxhdGU8dHlwZW5hbWUgRnVuYz4KLXZvaWQgSGVhcDo6aXRlcmF0ZUV4ZWN1dGluZ0FuZENvbXBp
bGluZ0NvZGVCbG9ja3NXaXRob3V0SG9sZGluZ0xvY2tzKGNvbnN0IEZ1bmMmIGZ1bmMpCit0ZW1w
bGF0ZTx0eXBlbmFtZSBGdW5jLCB0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBIZWFwOjppdGVyYXRl
RXhlY3V0aW5nQW5kQ29tcGlsaW5nQ29kZUJsb2Nrc1dpdGhvdXRIb2xkaW5nTG9ja3MoVmlzaXRv
ciYgdmlzaXRvciwgY29uc3QgRnVuYyYgZnVuYykKIHsKICAgICBWZWN0b3I8Q29kZUJsb2NrKiwg
MjU2PiBjb2RlQmxvY2tzOwotICAgIGl0ZXJhdGVFeGVjdXRpbmdBbmRDb21waWxpbmdDb2RlQmxv
Y2tzKAorICAgIGl0ZXJhdGVFeGVjdXRpbmdBbmRDb21waWxpbmdDb2RlQmxvY2tzKHZpc2l0b3Is
CiAgICAgICAgIFsmXSAoQ29kZUJsb2NrKiBjb2RlQmxvY2spIHsKICAgICAgICAgICAgIGNvZGVC
bG9ja3MuYXBwZW5kKGNvZGVCbG9jayk7CiAgICAgICAgIH0pOwpAQCAtNzMzLDE0ICs3MzQsNiBA
QCB2b2lkIEhlYXA6OnJlbW92ZURlYWRDb21waWxlcldvcmtsaXN0RW50CiAjZW5kaWYKIH0KIAot
Ym9vbCBIZWFwOjppc0FuYWx5emluZ0hlYXAoKSBjb25zdAotewotICAgIEhlYXBQcm9maWxlciog
aGVhcFByb2ZpbGVyID0gbV92bS5oZWFwUHJvZmlsZXIoKTsKLSAgICBpZiAoVU5MSUtFTFkoaGVh
cFByb2ZpbGVyKSkKLSAgICAgICAgcmV0dXJuIGhlYXBQcm9maWxlci0+YWN0aXZlSGVhcEFuYWx5
emVyKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCiBzdHJ1Y3QgR2F0aGVyRXh0cmFIZWFwRGF0
YSA6IE1hcmtlZEJsb2NrOjpDb3VudEZ1bmN0b3IgewogICAgIEdhdGhlckV4dHJhSGVhcERhdGEo
Vk0mIHZtLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQogICAgICAgICA6IG1fdm0odm0pCkBAIC0x
NDg1LDE0ICsxNDc4LDIxIEBAIE5FVkVSX0lOTElORSBib29sIEhlYXA6OnJ1bkVuZFBoYXNlKEdD
Q28KICAgICB9CiAgICAgbV9oZWxwZXJDbGllbnQuZmluaXNoKCk7CiAgICAgCi0gICAgaXRlcmF0
ZUV4ZWN1dGluZ0FuZENvbXBpbGluZ0NvZGVCbG9ja3MoCisgICAgQVNTRVJUKG1fbXV0YXRvck1h
cmtTdGFjay0+aXNFbXB0eSgpKTsKKyAgICBBU1NFUlQobV9yYWNlTWFya1N0YWNrLT5pc0VtcHR5
KCkpOworCisgICAgU2xvdFZpc2l0b3ImIHZpc2l0b3IgPSAqbV9jb2xsZWN0b3JTbG90VmlzaXRv
cjsKKyAgICBpdGVyYXRlRXhlY3V0aW5nQW5kQ29tcGlsaW5nQ29kZUJsb2Nrcyh2aXNpdG9yLAog
ICAgICAgICBbJl0gKENvZGVCbG9jayogY29kZUJsb2NrKSB7CiAgICAgICAgICAgICB3cml0ZUJh
cnJpZXIoY29kZUJsb2NrKTsKICAgICAgICAgfSk7Ci0gICAgICAgIAorCiAgICAgdXBkYXRlT2Jq
ZWN0Q291bnRzKCk7CiAgICAgZW5kTWFya2luZygpOwogCisgICAgaWYgKFVOTElLRUxZKE9wdGlv
bnM6OnZlcmlmeUdDKCkpKQorICAgICAgICB2ZXJpZnlHQygpOworCiAgICAgaWYgKFVOTElLRUxZ
KG1fdmVyaWZpZXIpKSB7CiAgICAgICAgIG1fdmVyaWZpZXItPmdhdGhlckxpdmVDZWxscyhIZWFw
VmVyaWZpZXI6OlBoYXNlOjpBZnRlck1hcmtpbmcpOwogICAgICAgICBtX3ZlcmlmaWVyLT52ZXJp
ZnkoSGVhcFZlcmlmaWVyOjpQaGFzZTo6QWZ0ZXJNYXJraW5nKTsKQEAgLTIxNzAsNiArMjE3MCwx
MiBAQCB2b2lkIEhlYXA6OnN1c3BlbmRDb21waWxlclRocmVhZHMoKQogCiB2b2lkIEhlYXA6Ondp
bGxTdGFydENvbGxlY3Rpb24oKQogeworICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjp2ZXJpZnlH
QygpKSkgeworICAgICAgICBtX3ZlcmlmaWVyU2xvdFZpc2l0b3IgPSBtYWtlVW5pcXVlPFZlcmlm
aWVyU2xvdFZpc2l0b3I+KCp0aGlzKTsKKyAgICAgICAgQVNTRVJUKCFtX2lzTWFya2luZ0ZvckdD
VmVyaWZpZXIpOworLy8gICAgICAgIFJFTEVBU0VfQVNTRVJUKCFtX2lzTWFya2luZ0ZvckdDVmVy
aWZpZXIpOyAvLyBtbGFtIFRFU1Qgb25seQorICAgIH0KKwogICAgIGRhdGFMb2dJZihPcHRpb25z
Ojpsb2dHQygpLCAiPT4gIik7CiAgICAgCiAgICAgaWYgKHNob3VsZERvRnVsbENvbGxlY3Rpb24o
KSkgewpAQCAtMjY5NywxMyArMjcwMyw0NyBAQCB2b2lkIEhlYXA6OmRpZEZyZWVCbG9jayhzaXpl
X3QgY2FwYWNpdHkpCiAjZW5kaWYKIH0KIAorLy8gVGhlIGZvbGxvd2luZyBhcmUgcHVsbGVkIG91
dCBvZiB0aGUgYm9keSBvZiBIZWFwOjphZGRDb3JlQ29uc3RyYWludHMoKSBvbmx5CisvLyBiZWNh
dXNlIHRoZSBXaW5DYWlybyBwb3J0IGlzIG5vdCBhYmxlIHRvIGhhbmRsZSAjaWYncyBpbnNpZGUg
dGhlIGJvZHkgb2YgdGhlCisvLyBsYW1iZGEgcGFzc2VkIGludG8gdGhlIE1BS0VfTUFSS0lOR19D
T05TVFJBSU5UX0VYRUNVVE9SX1BBSVIgbWFjcm8uIFRoaXMgd29ya3MKKy8vIGFyb3VuZCB0aGF0
IGlzc3VlLgorCisjaWYgSlNDX09CSkNfQVBJX0VOQUJMRUQKK2NvbnN0ZXhwciBib29sIG9iamNB
UElFbmFibGVkID0gdHJ1ZTsKKyNlbHNlCitjb25zdGV4cHIgYm9vbCBvYmpjQVBJRW5hYmxlZCA9
IGZhbHNlOworc3RhdGljIHZvaWQgc2NhbkV4dGVybmFsUmVtZW1iZXJlZFNldChWTSYsIEFic3Ry
YWN0U2xvdFZpc2l0b3ImKSB7IH0KKyNlbmRpZgorCisjaWYgRU5BQkxFKFNBTVBMSU5HX1BST0ZJ
TEVSKQorY29uc3RleHByIGJvb2wgc2FtcGxpbmdQcm9maWxlclN1cHBvcnRlZCA9IHRydWU7Citz
dGF0aWMgaW5saW5lIHZvaWQgc2VydmljZVNhbXBsaW5nUHJvZmlsZXIoVk0mIHZtLCBBYnN0cmFj
dFNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIGlmIChTYW1wbGluZ1Byb2ZpbGVyKiBzYW1w
bGluZ1Byb2ZpbGVyID0gdm0uc2FtcGxpbmdQcm9maWxlcigpKSB7CisgICAgICAgIGF1dG8gbG9j
a2VyID0gaG9sZExvY2soc2FtcGxpbmdQcm9maWxlci0+Z2V0TG9jaygpKTsKKyAgICAgICAgc2Ft
cGxpbmdQcm9maWxlci0+cHJvY2Vzc1VudmVyaWZpZWRTdGFja1RyYWNlcyhsb2NrZXIpOworICAg
ICAgICBzYW1wbGluZ1Byb2ZpbGVyLT52aXNpdCh2aXNpdG9yKTsKKyAgICAgICAgaWYgKE9wdGlv
bnM6OmxvZ0dDKCkgPT0gR0NMb2dnaW5nOjpWZXJib3NlKQorICAgICAgICAgICAgZGF0YUxvZygi
U2FtcGxpbmcgUHJvZmlsZXIgZGF0YTpcbiIsIHZpc2l0b3IpOworICAgIH0KK307CisjZWxzZQor
Y29uc3RleHByIGJvb2wgc2FtcGxpbmdQcm9maWxlclN1cHBvcnRlZCA9IGZhbHNlOworc3RhdGlj
IHZvaWQgc2VydmljZVNhbXBsaW5nUHJvZmlsZXIoVk0mLCBBYnN0cmFjdFNsb3RWaXNpdG9yJikg
eyB9OworI2VuZGlmCisKIHZvaWQgSGVhcDo6YWRkQ29yZUNvbnN0cmFpbnRzKCkKIHsKICAgICBt
X2NvbnN0cmFpbnRTZXQtPmFkZCgKICAgICAgICAgIkNzIiwgIkNvbnNlcnZhdGl2ZSBTY2FuIiwK
LSAgICAgICAgW3RoaXMsIGxhc3RWZXJzaW9uID0gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KDApXSAo
U2xvdFZpc2l0b3ImIHZpc2l0b3IpIG11dGFibGUgeworICAgICAgICBNQUtFX01BUktJTkdfQ09O
U1RSQUlOVF9FWEVDVVRPUl9QQUlSKChbdGhpcywgbGFzdFZlcnNpb24gPSBzdGF0aWNfY2FzdDx1
aW50NjRfdD4oMCldIChhdXRvJiB2aXNpdG9yKSBtdXRhYmxlIHsKICAgICAgICAgICAgIGJvb2wg
c2hvdWxkTm90UHJvZHVjZVdvcmsgPSBsYXN0VmVyc2lvbiA9PSBtX3BoYXNlVmVyc2lvbjsKLSAg
ICAgICAgICAgIGlmIChzaG91bGROb3RQcm9kdWNlV29yaykKKworICAgICAgICAgICAgLy8gRm9y
IHRoZSBHQyBWZXJmaWVyLCB3ZSB3b3VsZCBsaWtlIHRvIHVzZSB0aGUgaWRlbnRpY2FsIHNldCBv
ZiBjb25zZXJ2YXRpdmUgcm9vdHMKKyAgICAgICAgICAgIC8vIGFzIHRoZSByZWFsIEdDLiBPdGhl
cndpc2UsIHRoZSBHQyB2ZXJpZmllciBtYXkgcmVwb3J0IGZhbHNlIG5lZ2F0aXZlcyBkdWUgdG8K
KyAgICAgICAgICAgIC8vIHZhcmlhdGlvbnMgaW4gc3RhY2sgdmFsdWVzLiBGb3IgdGhpcyBzYW1l
IHJlYXNvbiwgd2Ugd2lsbCBza2lwIHRoaXMgY29uc3RyYWludAorICAgICAgICAgICAgLy8gd2hl
biB3ZSdyZSBydW5uaW5nIHRoZSBHQyB2ZXJpZmljYXRpb24gaW4gdGhlIEVuZCBwaGFzZS4KKyAg
ICAgICAgICAgIGlmIChzaG91bGROb3RQcm9kdWNlV29yayB8fCBtX2lzTWFya2luZ0ZvckdDVmVy
aWZpZXIpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgCiAgICAgICAgICAg
ICBUaW1pbmdTY29wZSBwcmVDb252ZXJnZW5jZVRpbWluZ1Njb3BlKCp0aGlzLCAiQ29uc3RyYWlu
dDogY29uc2VydmF0aXZlIHNjYW4iKTsKQEAgLTI3MjAsMjQgKzI3NjAsMjkgQEAgdm9pZCBIZWFw
OjphZGRDb3JlQ29uc3RyYWludHMoKQogCiAgICAgICAgICAgICAgICAgU2V0Um9vdE1hcmtSZWFz
b25TY29wZSByb290U2NvcGUodmlzaXRvciwgUm9vdE1hcmtSZWFzb246OkNvbnNlcnZhdGl2ZVNj
YW4pOwogICAgICAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kKGNvbnNlcnZhdGl2ZVJvb3RzKTsK
KyAgICAgICAgICAgICAgICBpZiAoVU5MSUtFTFkobV92ZXJpZmllclNsb3RWaXNpdG9yKSkKKyAg
ICAgICAgICAgICAgICAgICAgbV92ZXJpZmllclNsb3RWaXNpdG9yLT5hcHBlbmQoY29uc2VydmF0
aXZlUm9vdHMpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKE9wdGlvbnM6OnVzZUpJ
VCgpKSB7CiAgICAgICAgICAgICAgICAgLy8gSklUU3R1YlJvdXRpbmVzIG11c3QgYmUgdmlzaXRl
ZCBhZnRlciBzY2FubmluZyBDb25zZXJ2YXRpdmVSb290cyBzaW5jZSBKSVRTdHViUm91dGluZXMg
ZGVwZW5kIG9uIHRoZSBob29rIGV4ZWN1dGVkIGR1cmluZyBnYXRoZXJpbmcgQ29uc2VydmF0aXZl
Um9vdHMuCiAgICAgICAgICAgICAgICAgU2V0Um9vdE1hcmtSZWFzb25TY29wZSByb290U2NvcGUo
dmlzaXRvciwgUm9vdE1hcmtSZWFzb246OkpJVFN0dWJSb3V0aW5lcyk7CiAgICAgICAgICAgICAg
ICAgbV9qaXRTdHViUm91dGluZXMtPnRyYWNlTWFya2VkU3R1YlJvdXRpbmVzKHZpc2l0b3IpOwor
ICAgICAgICAgICAgICAgIGlmIChVTkxJS0VMWShtX3ZlcmlmaWVyU2xvdFZpc2l0b3IpKSB7Cisg
ICAgICAgICAgICAgICAgICAgIEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IgPSAqbV92ZXJp
ZmllclNsb3RWaXNpdG9yOworICAgICAgICAgICAgICAgICAgICBtX2ppdFN0dWJSb3V0aW5lcy0+
dHJhY2VNYXJrZWRTdHViUm91dGluZXModmlzaXRvcik7CisgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgICAgICBsYXN0VmVyc2lvbiA9IG1fcGhh
c2VWZXJzaW9uOwotICAgICAgICB9LAorICAgICAgICB9KSksCiAgICAgICAgIENvbnN0cmFpbnRW
b2xhdGlsaXR5OjpHcmV5ZWRCeUV4ZWN1dGlvbik7CiAgICAgCiAgICAgbV9jb25zdHJhaW50U2V0
LT5hZGQoCiAgICAgICAgICJNc3IiLCAiTWlzYyBTbWFsbCBSb290cyIsCi0gICAgICAgIFt0aGlz
XSAoU2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsKKyAgICAgICAgTUFLRV9NQVJLSU5HX0NPTlNUUkFJ
TlRfRVhFQ1VUT1JfUEFJUigoW3RoaXNdIChhdXRvJiB2aXNpdG9yKSB7CisgICAgICAgICAgICBp
ZiBjb25zdGV4cHIgKG9iamNBUElFbmFibGVkKQorICAgICAgICAgICAgICAgIHNjYW5FeHRlcm5h
bFJlbWVtYmVyZWRTZXQobV92bSwgdmlzaXRvcik7CiAKLSNpZiBKU0NfT0JKQ19BUElfRU5BQkxF
RAotICAgICAgICAgICAgc2NhbkV4dGVybmFsUmVtZW1iZXJlZFNldChtX3ZtLCB2aXNpdG9yKTsK
LSNlbmRpZgogICAgICAgICAgICAgaWYgKG1fdm0uc21hbGxTdHJpbmdzLm5lZWRzVG9CZVZpc2l0
ZWQoKm1fY29sbGVjdGlvblNjb3BlKSkgewogICAgICAgICAgICAgICAgIFNldFJvb3RNYXJrUmVh
c29uU2NvcGUgcm9vdFNjb3BlKHZpc2l0b3IsIFJvb3RNYXJrUmVhc29uOjpTdHJvbmdSZWZlcmVu
Y2VzKTsKICAgICAgICAgICAgICAgICBtX3ZtLnNtYWxsU3RyaW5ncy52aXNpdFN0cm9uZ1JlZmVy
ZW5jZXModmlzaXRvcik7CkBAIC0yNzYzLDY4ICsyODA4LDY2IEBAIHZvaWQgSGVhcDo6YWRkQ29y
ZUNvbnN0cmFpbnRzKCkKICAgICAgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVk
KG1fdm0uZXhjZXB0aW9uKCkpOwogICAgICAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJy
aWVyZWQobV92bS5sYXN0RXhjZXB0aW9uKCkpOwogICAgICAgICAgICAgfQotICAgICAgICB9LAor
ICAgICAgICB9KSksCiAgICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5OjpHcmV5ZWRCeUV4ZWN1
dGlvbik7CiAgICAgCiAgICAgbV9jb25zdHJhaW50U2V0LT5hZGQoCiAgICAgICAgICJTaCIsICJT
dHJvbmcgSGFuZGxlcyIsCi0gICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsK
KyAgICAgICAgTUFLRV9NQVJLSU5HX0NPTlNUUkFJTlRfRVhFQ1VUT1JfUEFJUigoW3RoaXNdIChh
dXRvJiB2aXNpdG9yKSB7CiAgICAgICAgICAgICBTZXRSb290TWFya1JlYXNvblNjb3BlIHJvb3RT
Y29wZSh2aXNpdG9yLCBSb290TWFya1JlYXNvbjo6U3Ryb25nSGFuZGxlcyk7CiAgICAgICAgICAg
ICBtX2hhbmRsZVNldC52aXNpdFN0cm9uZ0hhbmRsZXModmlzaXRvcik7Ci0gICAgICAgIH0sCisg
ICAgICAgIH0pKSwKICAgICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHk6OkdyZXllZEJ5RXhlY3V0
aW9uKTsKICAgICAKICAgICBtX2NvbnN0cmFpbnRTZXQtPmFkZCgKICAgICAgICAgIkQiLCAiRGVi
dWdnZXIiLAotICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiB2aXNpdG9yKSB7CisgICAgICAg
IE1BS0VfTUFSS0lOR19DT05TVFJBSU5UX0VYRUNVVE9SX1BBSVIoKFt0aGlzXSAoYXV0byYgdmlz
aXRvcikgewogICAgICAgICAgICAgU2V0Um9vdE1hcmtSZWFzb25TY29wZSByb290U2NvcGUodmlz
aXRvciwgUm9vdE1hcmtSZWFzb246OkRlYnVnZ2VyKTsKIAotI2lmIEVOQUJMRShTQU1QTElOR19Q
Uk9GSUxFUikKLSAgICAgICAgICAgIGlmIChTYW1wbGluZ1Byb2ZpbGVyKiBzYW1wbGluZ1Byb2Zp
bGVyID0gbV92bS5zYW1wbGluZ1Byb2ZpbGVyKCkpIHsKLSAgICAgICAgICAgICAgICBhdXRvIGxv
Y2tlciA9IGhvbGRMb2NrKHNhbXBsaW5nUHJvZmlsZXItPmdldExvY2soKSk7Ci0gICAgICAgICAg
ICAgICAgc2FtcGxpbmdQcm9maWxlci0+cHJvY2Vzc1VudmVyaWZpZWRTdGFja1RyYWNlcyhsb2Nr
ZXIpOwotICAgICAgICAgICAgICAgIHNhbXBsaW5nUHJvZmlsZXItPnZpc2l0KHZpc2l0b3IpOwot
ICAgICAgICAgICAgICAgIGlmIChPcHRpb25zOjpsb2dHQygpID09IEdDTG9nZ2luZzo6VmVyYm9z
ZSkKLSAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiU2FtcGxpbmcgUHJvZmlsZXIgZGF0YTpc
biIsIHZpc2l0b3IpOwotICAgICAgICAgICAgfQotI2VuZGlmIC8vIEVOQUJMRShTQU1QTElOR19Q
Uk9GSUxFUikKKyAgICAgICAgICAgIGlmIGNvbnN0ZXhwciAoc2FtcGxpbmdQcm9maWxlclN1cHBv
cnRlZCkKKyAgICAgICAgICAgICAgICBzZXJ2aWNlU2FtcGxpbmdQcm9maWxlcihtX3ZtLCB2aXNp
dG9yKTsKIAogICAgICAgICAgICAgaWYgKG1fdm0udHlwZVByb2ZpbGVyKCkpCiAgICAgICAgICAg
ICAgICAgbV92bS50eXBlUHJvZmlsZXJMb2coKS0+dmlzaXQodmlzaXRvcik7CiAgICAgICAgICAg
ICAKICAgICAgICAgICAgIGlmIChhdXRvKiBzaGFkb3dDaGlja2VuID0gbV92bS5zaGFkb3dDaGlj
a2VuKCkpCiAgICAgICAgICAgICAgICAgc2hhZG93Q2hpY2tlbi0+dmlzaXRDaGlsZHJlbih2aXNp
dG9yKTsKLSAgICAgICAgfSwKKyAgICAgICAgfSkpLAogICAgICAgICBDb25zdHJhaW50Vm9sYXRp
bGl0eTo6R3JleWVkQnlFeGVjdXRpb24pOwogICAgIAogICAgIG1fY29uc3RyYWludFNldC0+YWRk
KAogICAgICAgICAiV3MiLCAiV2VhayBTZXRzIiwKLSAgICAgICAgW3RoaXNdIChTbG90VmlzaXRv
ciYgdmlzaXRvcikgeworICAgICAgICBNQUtFX01BUktJTkdfQ09OU1RSQUlOVF9FWEVDVVRPUl9Q
QUlSKChbdGhpc10gKGF1dG8mIHZpc2l0b3IpIHsKICAgICAgICAgICAgIFNldFJvb3RNYXJrUmVh
c29uU2NvcGUgcm9vdFNjb3BlKHZpc2l0b3IsIFJvb3RNYXJrUmVhc29uOjpXZWFrU2V0cyk7CiAg
ICAgICAgICAgICBtX29iamVjdFNwYWNlLnZpc2l0V2Vha1NldHModmlzaXRvcik7Ci0gICAgICAg
IH0sCisgICAgICAgIH0pKSwKICAgICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHk6OkdyZXllZEJ5
TWFya2luZyk7CiAgICAgCiAgICAgbV9jb25zdHJhaW50U2V0LT5hZGQoCiAgICAgICAgICJPIiwg
Ik91dHB1dCIsCi0gICAgICAgIFtdIChTbG90VmlzaXRvciYgdmlzaXRvcikgeworICAgICAgICBN
QUtFX01BUktJTkdfQ09OU1RSQUlOVF9FWEVDVVRPUl9QQUlSKChbXSAoYXV0byYgdmlzaXRvcikg
eworICAgICAgICAgICAgdXNpbmcgVmlzaXRvciA9IGRlY2x0eXBlKHZpc2l0b3IpOwogICAgICAg
ICAgICAgVk0mIHZtID0gdmlzaXRvci52bSgpOwogCi0gICAgICAgICAgICBhdXRvIGNhbGxPdXRw
dXRDb25zdHJhaW50ID0gW10gKFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBIZWFwQ2VsbCogaGVhcENl
bGwsIEhlYXBDZWxsOjpLaW5kKSB7Ci0gICAgICAgICAgICAgICAgU2V0Um9vdE1hcmtSZWFzb25T
Y29wZSByb290U2NvcGUodmlzaXRvciwgUm9vdE1hcmtSZWFzb246Ok91dHB1dCk7Ci0gICAgICAg
ICAgICAgICAgVk0mIHZtID0gdmlzaXRvci52bSgpOworICAgICAgICAgICAgLy8gVGhlIGB2aXNp
dG9yMmAgYXJndW1lbnQgaXMgc3RyYW5nZWx5IG5hbWVkIGJlY2F1c2UgdGhlIFdpbkNhaXJvIHBv
cnQKKyAgICAgICAgICAgIC8vIGdldHMgY29uZnVzZWQgIGFuZCB0aGlua3Mgd2UncmUgdHJ5aW5n
IHRvIGNhcHR1cmUgdGhlIG91dGVyIHZpc2l0b3IKKyAgICAgICAgICAgIC8vIGFyZyBoZXJlLiBH
aXZpbmcgaXQgYSB1bmlxdWUgbmFtZSB3b3JrcyBhcm91bmQgdGhpcyBpc3N1ZS4KKyAgICAgICAg
ICAgIGF1dG8gY2FsbE91dHB1dENvbnN0cmFpbnQgPSBbXSAoVmlzaXRvciYgdmlzaXRvcjIsIEhl
YXBDZWxsKiBoZWFwQ2VsbCwgSGVhcENlbGw6OktpbmQpIHsKKyAgICAgICAgICAgICAgICBTZXRS
b290TWFya1JlYXNvblNjb3BlIHJvb3RTY29wZSh2aXNpdG9yMiwgUm9vdE1hcmtSZWFzb246Ok91
dHB1dCk7CisgICAgICAgICAgICAgICAgVk0mIHZtID0gdmlzaXRvcjIudm0oKTsKICAgICAgICAg
ICAgICAgICBKU0NlbGwqIGNlbGwgPSBzdGF0aWNfY2FzdDxKU0NlbGwqPihoZWFwQ2VsbCk7Ci0g
ICAgICAgICAgICAgICAgY2VsbC0+bWV0aG9kVGFibGUodm0pLT52aXNpdE91dHB1dENvbnN0cmFp
bnRzKGNlbGwsIHZpc2l0b3IpOworICAgICAgICAgICAgICAgIGNlbGwtPm1ldGhvZFRhYmxlKHZt
KS0+dmlzaXRPdXRwdXRDb25zdHJhaW50cyhjZWxsLCB2aXNpdG9yMik7CiAgICAgICAgICAgICB9
OwogICAgICAgICAgICAgCiAgICAgICAgICAgICBhdXRvIGFkZCA9IFsmXSAoYXV0byYgc2V0KSB7
Ci0gICAgICAgICAgICAgICAgdmlzaXRvci5hZGRQYXJhbGxlbENvbnN0cmFpbnRUYXNrKHNldC5m
b3JFYWNoTWFya2VkQ2VsbEluUGFyYWxsZWwoY2FsbE91dHB1dENvbnN0cmFpbnQpKTsKKyAgICAg
ICAgICAgICAgICBSZWZQdHI8U2hhcmVkVGFzazx2b2lkKFZpc2l0b3ImKT4+IHRhc2sgPSBzZXQu
dGVtcGxhdGUgZm9yRWFjaE1hcmtlZENlbGxJblBhcmFsbGVsPFZpc2l0b3I+KGNhbGxPdXRwdXRD
b25zdHJhaW50KTsKKyAgICAgICAgICAgICAgICB2aXNpdG9yLmFkZFBhcmFsbGVsQ29uc3RyYWlu
dFRhc2sodGFzayk7CiAgICAgICAgICAgICB9OwogICAgICAgICAgICAgCiAgICAgICAgICAgICBh
ZGQodm0uZXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZXNXaXRoQ29uc3RyYWludHMpOwogICAgICAg
ICAgICAgaWYgKHZtLm1fd2Vha01hcFNwYWNlKQogICAgICAgICAgICAgICAgIGFkZCgqdm0ubV93
ZWFrTWFwU3BhY2UpOwotICAgICAgICB9LAorICAgICAgICB9KSksCiAgICAgICAgIENvbnN0cmFp
bnRWb2xhdGlsaXR5OjpHcmV5ZWRCeU1hcmtpbmcsCiAgICAgICAgIENvbnN0cmFpbnRQYXJhbGxl
bGlzbTo6UGFyYWxsZWwpOwogICAgIApAQCAtMjgzMiw3ICsyODc1LDcgQEAgdm9pZCBIZWFwOjph
ZGRDb3JlQ29uc3RyYWludHMoKQogICAgIGlmIChPcHRpb25zOjp1c2VKSVQoKSkgewogICAgICAg
ICBtX2NvbnN0cmFpbnRTZXQtPmFkZCgKICAgICAgICAgICAgICJEdyIsICJERkcgV29ya2xpc3Rz
IiwKLSAgICAgICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsKKyAgICAgICAg
ICAgIE1BS0VfTUFSS0lOR19DT05TVFJBSU5UX0VYRUNVVE9SX1BBSVIoKFt0aGlzXSAoYXV0byYg
dmlzaXRvcikgewogICAgICAgICAgICAgICAgIFNldFJvb3RNYXJrUmVhc29uU2NvcGUgcm9vdFNj
b3BlKHZpc2l0b3IsIFJvb3RNYXJrUmVhc29uOjpERkdXb3JrTGlzdHMpOwogCiAgICAgICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gREZHOjpudW1iZXJPZldvcmtsaXN0cygpOyBpLS07KQpA
QCAtMjg0MCw3ICsyODgzLDcgQEAgdm9pZCBIZWFwOjphZGRDb3JlQ29uc3RyYWludHMoKQogICAg
ICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBUaGlzIGlzIGFsbW9zdCBj
ZXJ0YWlubHkgdW5uZWNlc3NhcnkuCiAgICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NjgyOQotICAgICAgICAgICAgICAgIERGRzo6aXRl
cmF0ZUNvZGVCbG9ja3NGb3JHQygKKyAgICAgICAgICAgICAgICBERkc6Oml0ZXJhdGVDb2RlQmxv
Y2tzRm9yR0ModmlzaXRvciwKICAgICAgICAgICAgICAgICAgICAgbV92bSwKICAgICAgICAgICAg
ICAgICAgICAgWyZdIChDb2RlQmxvY2sqIGNvZGVCbG9jaykgewogICAgICAgICAgICAgICAgICAg
ICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZChjb2RlQmxvY2spOwpAQCAtMjg0OCwyMyAr
Mjg5MSwyMyBAQCB2b2lkIEhlYXA6OmFkZENvcmVDb25zdHJhaW50cygpCiAgICAgICAgICAgICAg
ICAgCiAgICAgICAgICAgICAgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkgPT0gR0NMb2dnaW5nOjpW
ZXJib3NlKQogICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJERkcgV29ya2xpc3RzOlxuIiwg
dmlzaXRvcik7Ci0gICAgICAgICAgICB9LAorICAgICAgICAgICAgfSkpLAogICAgICAgICAgICAg
Q29uc3RyYWludFZvbGF0aWxpdHk6OkdyZXllZEJ5TWFya2luZyk7CiAgICAgfQogI2VuZGlmCiAg
ICAgCiAgICAgbV9jb25zdHJhaW50U2V0LT5hZGQoCiAgICAgICAgICJDYiIsICJDb2RlQmxvY2tz
IiwKLSAgICAgICAgW3RoaXNdIChTbG90VmlzaXRvciYgdmlzaXRvcikgeworICAgICAgICBNQUtF
X01BUktJTkdfQ09OU1RSQUlOVF9FWEVDVVRPUl9QQUlSKChbdGhpc10gKGF1dG8mIHZpc2l0b3Ip
IHsKICAgICAgICAgICAgIFNldFJvb3RNYXJrUmVhc29uU2NvcGUgcm9vdFNjb3BlKHZpc2l0b3Is
IFJvb3RNYXJrUmVhc29uOjpDb2RlQmxvY2tzKTsKLSAgICAgICAgICAgIGl0ZXJhdGVFeGVjdXRp
bmdBbmRDb21waWxpbmdDb2RlQmxvY2tzV2l0aG91dEhvbGRpbmdMb2NrcygKKyAgICAgICAgICAg
IGl0ZXJhdGVFeGVjdXRpbmdBbmRDb21waWxpbmdDb2RlQmxvY2tzV2l0aG91dEhvbGRpbmdMb2Nr
cyh2aXNpdG9yLAogICAgICAgICAgICAgICAgIFsmXSAoQ29kZUJsb2NrKiBjb2RlQmxvY2spIHsK
ICAgICAgICAgICAgICAgICAgICAgLy8gVmlzaXQgdGhlIENvZGVCbG9jayBhcyBhIGNvbnN0cmFp
bnQgb25seSBpZiBpdCdzIGJsYWNrLgotICAgICAgICAgICAgICAgICAgICBpZiAoaXNNYXJrZWQo
Y29kZUJsb2NrKQorICAgICAgICAgICAgICAgICAgICBpZiAodmlzaXRvci5pc01hcmtlZChjb2Rl
QmxvY2spCiAgICAgICAgICAgICAgICAgICAgICAgICAmJiBjb2RlQmxvY2stPmNlbGxTdGF0ZSgp
ID09IENlbGxTdGF0ZTo6UG9zc2libHlCbGFjaykKICAgICAgICAgICAgICAgICAgICAgICAgIHZp
c2l0b3IudmlzaXRBc0NvbnN0cmFpbnQoY29kZUJsb2NrKTsKICAgICAgICAgICAgICAgICB9KTsK
LSAgICAgICAgfSwKKyAgICAgICAgfSkpLAogICAgICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eTo6
U2VsZG9tR3JleWVkKTsKICAgICAKICAgICBtX2NvbnN0cmFpbnRTZXQtPmFkZChtYWtlVW5pcXVl
PE1hcmtTdGFja01lcmdpbmdDb25zdHJhaW50PigqdGhpcykpOwpAQCAtMzAyMyw0ICszMDY2LDMz
IEBAIHZvaWQgSGVhcDo6cnVuVGFza0luUGFyYWxsZWwoUmVmUHRyPFNoYXIKICAgICB9CiB9CiAK
K3ZvaWQgSGVhcDo6dmVyaWZ5R0MoKQoreworICAgIFJFTEVBU0VfQVNTRVJUKG1fdmVyaWZpZXJT
bG90VmlzaXRvcik7CisgICAgUkVMRUFTRV9BU1NFUlQoIW1faXNNYXJraW5nRm9yR0NWZXJpZmll
cik7CisgICAgbV9pc01hcmtpbmdGb3JHQ1ZlcmlmaWVyID0gdHJ1ZTsKKworICAgIFZlcmlmaWVy
U2xvdFZpc2l0b3ImIHZpc2l0b3IgPSAqbV92ZXJpZmllclNsb3RWaXNpdG9yOworCisgICAgZG8g
eworICAgICAgICB2aXNpdG9yLmRyYWluKCk7CisgICAgICAgIG1fY29uc3RyYWludFNldC0+ZXhl
Y3V0ZUFsbFN5bmNocm9ub3VzbHkodmlzaXRvcik7CisgICAgICAgIHZpc2l0b3IuZXhlY3V0ZUNv
bnN0cmFpbnRUYXNrcygpOworICAgIH0gd2hpbGUgKCF2aXNpdG9yLmlzRW1wdHkoKSk7CisKKyAg
ICBtX2lzTWFya2luZ0ZvckdDVmVyaWZpZXIgPSBmYWxzZTsKKworICAgIHZpc2l0b3IuZm9yRWFj
aExpdmVDZWxsKFsmXSAoSGVhcENlbGwqIGNlbGwpIHsKKyAgICAgICAgaWYgKEhlYXA6OmlzTWFy
a2VkKGNlbGwpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGRhdGFMb2dMbigiXG4i
ICJHQyBWZXJpZmllcjogRVJST1IgY2VsbCAiLCBSYXdQb2ludGVyKGNlbGwpLCAiIHdhcyBub3Qg
bWFya2VkIik7CisgICAgICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjp2ZXJib3NlVmVyaWZ5R0Mo
KSkpCisgICAgICAgICAgICB2aXNpdG9yLmR1bXBNYXJrZXJEYXRhKGNlbGwpOworICAgICAgICBS
RUxFQVNFX0FTU0VSVCh0aGlzLT5pc01hcmtlZChjZWxsKSk7CisgICAgfSk7CisKKyAgICBtX3Zl
cmlmaWVyU2xvdFZpc2l0b3IgPSBudWxscHRyOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMSw3ICsxLDcg
QEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDAgSGFycmkgUG9ydGVuIChwb3J0ZW5A
a2RlLm9yZykKICAqICBDb3B5cmlnaHQgKEMpIDIwMDEgUGV0ZXIgS2VsbHkgKHBta0Bwb3N0LmNv
bSkKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwpAQCAtODYsNiArODYsNyBAQCBjbGFzcyBT
cGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyOwogY2xhc3MgU3RvcElmTmVjZXNzYXJ5VGltZXI7CiBj
bGFzcyBTd2VlcGluZ1Njb3BlOwogY2xhc3MgVk07CitjbGFzcyBWZXJpZmllclNsb3RWaXNpdG9y
OwogY2xhc3MgV2Vha0dDTWFwQmFzZTsKIHN0cnVjdCBDdXJyZW50VGhyZWFkU3RhdGU7CiAKQEAg
LTE4NCw4ICsxODUsNiBAQCBwdWJsaWM6CiAgICAgCiAgICAgYm9vbCBpc1NodXR0aW5nRG93bigp
IGNvbnN0IHsgcmV0dXJuIG1faXNTaHV0dGluZ0Rvd247IH0KIAotICAgIEpTX0VYUE9SVF9QUklW
QVRFIGJvb2wgaXNBbmFseXppbmdIZWFwKCkgY29uc3Q7Ci0KICAgICBKU19FWFBPUlRfUFJJVkFU
RSB2b2lkIHN3ZWVwU3luY2hyb25vdXNseSgpOwogCiAgICAgYm9vbCBzaG91bGRDb2xsZWN0SGV1
cmlzdGljKCk7CkBAIC0zODUsOCArMzg0LDYgQEAgcHVibGljOgogICAgIAogICAgIEpTX0VYUE9S
VF9QUklWQVRFIHZvaWQgYWRkTWFya2luZ0NvbnN0cmFpbnQoc3RkOjp1bmlxdWVfcHRyPE1hcmtp
bmdDb25zdHJhaW50Pik7CiAgICAgCi0gICAgc2l6ZV90IG51bU9wYXF1ZVJvb3RzKCkgY29uc3Qg
eyByZXR1cm4gbV9vcGFxdWVSb290cy5zaXplKCk7IH0KLQogICAgIEhlYXBWZXJpZmllciogdmVy
aWZpZXIoKSBjb25zdCB7IHJldHVybiBtX3ZlcmlmaWVyLmdldCgpOyB9CiAgICAgCiAgICAgdm9p
ZCBhZGRIZWFwRmluYWxpemVyQ2FsbGJhY2soY29uc3QgSGVhcEZpbmFsaXplckNhbGxiYWNrJik7
CkBAIC00MDcsNiArNDA0LDggQEAgcHVibGljOgogCiAgICAgSGFzaE1hcDxKU0ltbXV0YWJsZUJ1
dHRlcmZseSosIEpTU3RyaW5nKj4gaW1tdXRhYmxlQnV0dGVyZmx5VG9TdHJpbmdDYWNoZTsKIAor
ICAgIGJvb2wgaXNNYXJraW5nRm9yR0NWZXJpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1faXNNYXJr
aW5nRm9yR0NWZXJpZmllcjsgfQorCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBBbGxvY2F0
aW5nU2NvcGU7CiAgICAgZnJpZW5kIGNsYXNzIENvZGVCbG9jazsKQEAgLTU3NSwxMSArNTc0LDEx
IEBAIHByaXZhdGU6CiAKICAgICBib29sIG92ZXJDcml0aWNhbE1lbW9yeVRocmVzaG9sZChNZW1v
cnlUaHJlc2hvbGRDYWxsVHlwZSBtZW1vcnlUaHJlc2hvbGRDYWxsVHlwZSA9IE1lbW9yeVRocmVz
aG9sZENhbGxUeXBlOjpDYWNoZWQpOwogICAgIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+
Ci0gICAgdm9pZCBpdGVyYXRlRXhlY3V0aW5nQW5kQ29tcGlsaW5nQ29kZUJsb2Nrcyhjb25zdCBG
dW5jJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYywgdHlwZW5hbWUgVmlzaXRvcj4KKyAg
ICB2b2lkIGl0ZXJhdGVFeGVjdXRpbmdBbmRDb21waWxpbmdDb2RlQmxvY2tzKFZpc2l0b3ImLCBj
b25zdCBGdW5jJik7CiAgICAgCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KLSAgICB2b2lk
IGl0ZXJhdGVFeGVjdXRpbmdBbmRDb21waWxpbmdDb2RlQmxvY2tzV2l0aG91dEhvbGRpbmdMb2Nr
cyhjb25zdCBGdW5jJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYywgdHlwZW5hbWUgVmlz
aXRvcj4KKyAgICB2b2lkIGl0ZXJhdGVFeGVjdXRpbmdBbmRDb21waWxpbmdDb2RlQmxvY2tzV2l0
aG91dEhvbGRpbmdMb2NrcyhWaXNpdG9yJiwgY29uc3QgRnVuYyYpOwogICAgIAogICAgIHZvaWQg
YXNzZXJ0TWFya1N0YWNrc0VtcHR5KCk7CiAKQEAgLTU5MCw2ICs1ODksOCBAQCBwcml2YXRlOgog
ICAgIHN0YXRpYyBib29sIHVzZUdlbmVyYXRpb25hbEdDKCk7CiAgICAgc3RhdGljIGJvb2wgc2hv
dWxkU3dlZXBTeW5jaHJvbm91c2x5KCk7CiAgICAgCisgICAgdm9pZCB2ZXJpZnlHQygpOworCiAg
ICAgY29uc3QgSGVhcFR5cGUgbV9oZWFwVHlwZTsKICAgICBNdXRhdG9yU3RhdGUgbV9tdXRhdG9y
U3RhdGUgeyBNdXRhdG9yU3RhdGU6OlJ1bm5pbmcgfTsKICAgICBjb25zdCBzaXplX3QgbV9yYW1T
aXplOwpAQCAtNjM2LDYgKzYzNyw3IEBAIHByaXZhdGU6CiAgICAgc3RkOjp1bmlxdWVfcHRyPE1h
cmtTdGFja0FycmF5PiBtX211dGF0b3JNYXJrU3RhY2s7CiAgICAgc3RkOjp1bmlxdWVfcHRyPE1h
cmtTdGFja0FycmF5PiBtX3JhY2VNYXJrU3RhY2s7CiAgICAgc3RkOjp1bmlxdWVfcHRyPE1hcmtp
bmdDb25zdHJhaW50U2V0PiBtX2NvbnN0cmFpbnRTZXQ7CisgICAgc3RkOjp1bmlxdWVfcHRyPFZl
cmlmaWVyU2xvdFZpc2l0b3I+IG1fdmVyaWZpZXJTbG90VmlzaXRvcjsKIAogICAgIC8vIFdlIHBv
b2wgdGhlIHNsb3QgdmlzaXRvcnMgdXNlZCBieSBwYXJhbGxlbCBtYXJraW5nIHRocmVhZHMuIEl0
J3MgdXNlZnVsIHRvIGJlIGFibGUgdG8KICAgICAvLyBlbnVtZXJhdGUgb3ZlciB0aGVtLCBhbmQg
aXQncyB1c2VmdWwgdG8gaGF2ZSB0aGVtIGNhY2hlIHNvbWUgc21hbGwgYW1vdW50IG9mIG1lbW9y
eSBmcm9tCkBAIC02NTQsNiArNjU2LDcgQEAgcHJpdmF0ZToKICAgICBib29sIG1faXNTYWZlVG9D
b2xsZWN0IHsgZmFsc2UgfTsKICAgICBib29sIG1faXNTaHV0dGluZ0Rvd24geyBmYWxzZSB9Owog
ICAgIGJvb2wgbV9tdXRhdG9yU2hvdWxkQmVGZW5jZWQgeyBPcHRpb25zOjpmb3JjZUZlbmNlZEJh
cnJpZXIoKSB9OworICAgIGJvb2wgbV9pc01hcmtpbmdGb3JHQ1ZlcmlmaWVyIHsgZmFsc2UgfTsK
IAogICAgIHVuc2lnbmVkIG1fYmFycmllclRocmVzaG9sZCB7IE9wdGlvbnM6OmZvcmNlRmVuY2Vk
QmFycmllcigpID8gdGF1dG9sb2dpY2FsVGhyZXNob2xkIDogYmxhY2tUaHJlc2hvbGQgfTsKIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcElubGluZXMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwSW5saW5lcy5oCShyZXZpc2lvbiAy
NzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwSW5saW5lcy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC02OSw2ICs2OSw4IEBAIGlubGluZSBib29sIEhlYXA6OndvcmxkSXNTdG9w
cGVkKCkgY29uc3QKIAogQUxXQVlTX0lOTElORSBib29sIEhlYXA6OmlzTWFya2VkKGNvbnN0IHZv
aWQqIHJhd0NlbGwpCiB7CisgICAgQVNTRVJUKCFtX2lzTWFya2luZ0ZvckdDVmVyaWZpZXIpOwor
Ly8gICAgUkVMRUFTRV9BU1NFUlQoIW1faXNNYXJraW5nRm9yR0NWZXJpZmllcik7IC8vIG1sYW0g
VEVTVCBvbmx5CiAgICAgSGVhcENlbGwqIGNlbGwgPSBiaXR3aXNlX2Nhc3Q8SGVhcENlbGwqPihy
YXdDZWxsKTsKICAgICBpZiAoY2VsbC0+aXNQcmVjaXNlQWxsb2NhdGlvbigpKQogICAgICAgICBy
ZXR1cm4gY2VsbC0+cHJlY2lzZUFsbG9jYXRpb24oKS5pc01hcmtlZCgpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcFByb2ZpbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwUHJvZmlsZXIuY3BwCShyZXZpc2lvbiAyNzI5MDIp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwUHJvZmlsZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTYwLDYgKzYwLDcgQEAgdm9pZCBIZWFwUHJvZmlsZXI6OnNldEFjdGl2ZUhlYXBBbmFs
eXplcgogewogICAgIEFTU0VSVCghIW1fYWN0aXZlQW5hbHl6ZXIgIT0gISFhbmFseXplcik7CiAg
ICAgbV9hY3RpdmVBbmFseXplciA9IGFuYWx5emVyOworICAgIG1fdm0uc2V0QWN0aXZlSGVhcEFu
YWx5emVyKGFuYWx5emVyKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9Jc29DZWxsU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvSXNvQ2VsbFNldC5oCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Jc29DZWxsU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzQsNiAr
MzQsNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAorY2xhc3MgQWJzdHJhY3RTbG90VmlzaXRvcjsK
IGNsYXNzIEhlYXBDZWxsOwogY2xhc3MgSXNvU3Vic3BhY2U7CiAKQEAgLTU4LDggKzU5LDggQEAg
cHVibGljOgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CiAgICAgdm9pZCBmb3JFYWNoTWFy
a2VkQ2VsbChjb25zdCBGdW5jJik7CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgotICAg
IFJlZjxTaGFyZWRUYXNrPHZvaWQoU2xvdFZpc2l0b3ImKT4+IGZvckVhY2hNYXJrZWRDZWxsSW5Q
YXJhbGxlbChjb25zdCBGdW5jJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvciwgdHlw
ZW5hbWUgRnVuYz4KKyAgICBSZWY8U2hhcmVkVGFzazx2b2lkKFZpc2l0b3ImKT4+IGZvckVhY2hN
YXJrZWRDZWxsSW5QYXJhbGxlbChjb25zdCBGdW5jJik7CiAgICAgCiAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgRnVuYz4KICAgICB2b2lkIGZvckVhY2hMaXZlQ2VsbChjb25zdCBGdW5jJik7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Jc29DZWxsU2V0SW5saW5lcy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0lzb0NlbGxTZXRJbmxpbmVzLmgJKHJl
dmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0lzb0NlbGxTZXRJ
bmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtOTEsMTAgKzkxLDEwIEBAIHZvaWQgSXNvQ2VsbFNldDo6
Zm9yRWFjaE1hcmtlZENlbGwoY29uc3QKICAgICAgICAgfSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVu
YW1lIEZ1bmM+Ci1SZWY8U2hhcmVkVGFzazx2b2lkKFNsb3RWaXNpdG9yJik+PiBJc29DZWxsU2V0
Ojpmb3JFYWNoTWFya2VkQ2VsbEluUGFyYWxsZWwoY29uc3QgRnVuYyYgZnVuYykKK3RlbXBsYXRl
PHR5cGVuYW1lIFZpc2l0b3IsIHR5cGVuYW1lIEZ1bmM+CitSZWY8U2hhcmVkVGFzazx2b2lkKFZp
c2l0b3ImKT4+IElzb0NlbGxTZXQ6OmZvckVhY2hNYXJrZWRDZWxsSW5QYXJhbGxlbChjb25zdCBG
dW5jJiBmdW5jKQogewotICAgIGNsYXNzIFRhc2sgZmluYWwgOiBwdWJsaWMgU2hhcmVkVGFzazx2
b2lkKFNsb3RWaXNpdG9yJik+IHsKKyAgICBjbGFzcyBUYXNrIGZpbmFsIDogcHVibGljIFNoYXJl
ZFRhc2s8dm9pZChWaXNpdG9yJik+IHsKICAgICBwdWJsaWM6CiAgICAgICAgIFRhc2soSXNvQ2Vs
bFNldCYgc2V0LCBjb25zdCBGdW5jJiBmdW5jKQogICAgICAgICAgICAgOiBtX3NldChzZXQpCkBA
IC0xMDMsNyArMTAzLDcgQEAgUmVmPFNoYXJlZFRhc2s8dm9pZChTbG90VmlzaXRvciYpPj4gSXNv
QwogICAgICAgICB7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIHZvaWQgcnVuKFNsb3RW
aXNpdG9yJiB2aXNpdG9yKSBmaW5hbAorICAgICAgICB2b2lkIHJ1bihWaXNpdG9yJiB2aXNpdG9y
KSBmaW5hbAogICAgICAgICB7CiAgICAgICAgICAgICB3aGlsZSAoTWFya2VkQmxvY2s6OkhhbmRs
ZSogaGFuZGxlID0gbV9ibG9ja1NvdXJjZS0+cnVuKCkpIHsKICAgICAgICAgICAgICAgICB1bnNp
Z25lZCBibG9ja0luZGV4ID0gaGFuZGxlLT5pbmRleCgpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvSklUU3R1YlJvdXRpbmVTZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0pJVFN0dWJSb3V0aW5lU2V0LmNwcAkocmV2aXNpb24gMjcyOTAy
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSklUU3R1YlJvdXRpbmVTZXQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTEyOCw3ICsxMjgsOCBAQCB2b2lkIEpJVFN0dWJSb3V0aW5lU2V0OjpkZWxl
dGVVbm1hcmtlZEplCiAgICAgbV9yb3V0aW5lcy5zaHJpbmsoZHN0SW5kZXgpOwogfQogCi12b2lk
IEpJVFN0dWJSb3V0aW5lU2V0Ojp0cmFjZU1hcmtlZFN0dWJSb3V0aW5lcyhTbG90VmlzaXRvciYg
dmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpJVFN0dWJSb3V0aW5l
U2V0Ojp0cmFjZU1hcmtlZFN0dWJSb3V0aW5lcyhWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGZv
ciAoYXV0byYgZW50cnkgOiBtX3JvdXRpbmVzKSB7CiAgICAgICAgIEdDQXdhcmVKSVRTdHViUm91
dGluZSogcm91dGluZSA9IGVudHJ5LnJvdXRpbmU7CkBAIC0xMzksNiArMTQwLDkgQEAgdm9pZCBK
SVRTdHViUm91dGluZVNldDo6dHJhY2VNYXJrZWRTdHViUgogICAgIH0KIH0KIAordGVtcGxhdGUg
dm9pZCBKSVRTdHViUm91dGluZVNldDo6dHJhY2VNYXJrZWRTdHViUm91dGluZXMoQWJzdHJhY3RT
bG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKSVRTdHViUm91dGluZVNldDo6dHJhY2VNYXJr
ZWRTdHViUm91dGluZXMoU2xvdFZpc2l0b3ImKTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNl
bmRpZiAvLyBFTkFCTEUoSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSklU
U3R1YlJvdXRpbmVTZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9KSVRTdHViUm91dGluZVNldC5oCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9KSVRTdHViUm91dGluZVNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE4IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzUs
OCArMzUsOCBAQCB1c2luZyBXVEY6OlJhbmdlOwogCiBuYW1lc3BhY2UgSlNDIHsKIAorY2xhc3Mg
QWJzdHJhY3RTbG90VmlzaXRvcjsKIGNsYXNzIEdDQXdhcmVKSVRTdHViUm91dGluZTsKLWNsYXNz
IFNsb3RWaXNpdG9yOwogCiAjaWYgRU5BQkxFKEpJVCkKIApAQCAtNjMsOCArNjMsOCBAQCBwdWJs
aWM6CiAgICAgdm9pZCBwcmVwYXJlRm9yQ29uc2VydmF0aXZlU2NhbigpOwogICAgIAogICAgIHZv
aWQgZGVsZXRlVW5tYXJrZWRKZXR0aXNvbmVkU3R1YlJvdXRpbmVzKCk7Ci0gICAgCi0gICAgdm9p
ZCB0cmFjZU1hcmtlZFN0dWJSb3V0aW5lcyhTbG90VmlzaXRvciYpOworCisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCB0cmFjZU1hcmtlZFN0dWJSb3V0aW5lcyhWaXNpdG9yJik7
CiAgICAgCiBwcml2YXRlOgogICAgIHZvaWQgbWFya1Nsb3codWludHB0cl90IGFkZHJlc3MpOwpA
QCAtOTIsNyArOTIsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBtYXJrKHZvaWQqKSB7IH0KICAgICB2
b2lkIHByZXBhcmVGb3JDb25zZXJ2YXRpdmVTY2FuKCkgeyB9CiAgICAgdm9pZCBkZWxldGVVbm1h
cmtlZEpldHRpc29uZWRTdHViUm91dGluZXMoKSB7IH0KLSAgICB2b2lkIHRyYWNlTWFya2VkU3R1
YlJvdXRpbmVzKFNsb3RWaXNpdG9yJikgeyB9CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRv
cj4gdm9pZCB0cmFjZU1hcmtlZFN0dWJSb3V0aW5lcyhWaXNpdG9yJikgeyB9CiB9OwogCiAjZW5k
aWYgLy8gIUVOQUJMRShKSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJr
U3RhY2tNZXJnaW5nQ29uc3RyYWludC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQuY3BwCShyZXZpc2lvbiAyNzI5
MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3RhY2tNZXJnaW5nQ29uc3Ry
YWludC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjUsNyArMjUsNiBAQAogCiAjaW5jbHVkZSAiY29uZmln
LmgiCiAjaW5jbHVkZSAiTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQuaCIKLQogI2luY2x1ZGUg
IkdDU2VnbWVudGVkQXJyYXlJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogCkBA
IC00Niw3ICs0NSw3IEBAIGRvdWJsZSBNYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludDo6cXVpY2sK
ICAgICByZXR1cm4gbV9oZWFwLm1fbXV0YXRvck1hcmtTdGFjay0+c2l6ZSgpICsgbV9oZWFwLm1f
cmFjZU1hcmtTdGFjay0+c2l6ZSgpOwogfQogCi12b2lkIE1hcmtTdGFja01lcmdpbmdDb25zdHJh
aW50OjpwcmVwYXJlVG9FeGVjdXRlSW1wbChjb25zdCBBYnN0cmFjdExvY2tlciYsIFNsb3RWaXNp
dG9yJiB2aXNpdG9yKQordm9pZCBNYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludDo6cHJlcGFyZVRv
RXhlY3V0ZUltcGwoY29uc3QgQWJzdHJhY3RMb2NrZXImLCBBYnN0cmFjdFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQogewogICAgIC8vIExvZ2dpbmcgdGhlIHdvcmsgaGVyZSBlbnN1cmVzIHRoYXQgdGhl
IGNvbnN0cmFpbnQgc29sdmVyIGtub3dzIHRoYXQgaXQgZG9lc24ndCBuZWVkIHRvIHByb2R1Y2UK
ICAgICAvLyBhbnltb3JlIHdvcmsuCkBAIC01NiwxMSArNTUsMjQgQEAgdm9pZCBNYXJrU3RhY2tN
ZXJnaW5nQ29uc3RyYWludDo6cHJlcGFyZQogICAgIGRhdGFMb2dJZihPcHRpb25zOjpsb2dHQygp
LCAiKCIsIHNpemUsICIpIik7CiB9CiAKLXZvaWQgTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQ6
OmV4ZWN1dGVJbXBsKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlz
aXRvcj4KK3ZvaWQgTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQ6OmV4ZWN1dGVJbXBsSW1wbChW
aXNpdG9yJiB2aXNpdG9yKQogeworICAgIC8vIFdlIHdhbnQgdG8gc2tpcCB0aGlzIGNvbnN0cmFp
bnQgZm9yIHRoZSBHQyB2ZXJpZmllciBiZWNhdXNlOgorICAgIC8vIDEuIFRoZXJlIHNob3VsZCBi
ZSBubyBtdXRhdG9yIG1hcmtpbmcgYWN0aW9uIGJldHdlZW4gdGhlIEVuZCBwaGFzZSBhbmQgdmVy
aWZ5R0MoKS4KKyAgICAvLyAgICBIZW5jZSwgd2UgY2FuIGlnbm9yZSB0aHNlIHN0YWNrcy4KKyAg
ICAvLyAyLiBUaGUgRW5kIHBoYXNlIGV4cGxpY3RseSBjYWxscyBpdGVyYXRlRXhlY3V0aW5nQW5k
Q29tcGlsaW5nQ29kZUJsb2NrcygpCisgICAgLy8gICAgdG8gYWRkIGV4ZWN1dGluZyBDb2RlQmxv
Y2tzIHRvIG1faGVhcC5tX211dGF0b3JNYXJrU3RhY2suIFdlIHdhbnQgdG8KKyAgICAvLyAgICBs
ZWF2ZSB0aG9zZSB1bnBlcnR1cmJlZC4KKyAgICBpZiAobV9oZWFwLm1faXNNYXJraW5nRm9yR0NW
ZXJpZmllcikKKyAgICAgICAgcmV0dXJuOworCiAgICAgbV9oZWFwLm1fbXV0YXRvck1hcmtTdGFj
ay0+dHJhbnNmZXJUbyh2aXNpdG9yLm11dGF0b3JNYXJrU3RhY2soKSk7CiAgICAgbV9oZWFwLm1f
cmFjZU1hcmtTdGFjay0+dHJhbnNmZXJUbyh2aXNpdG9yLm11dGF0b3JNYXJrU3RhY2soKSk7CiB9
CiAKK3ZvaWQgTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQ6OmV4ZWN1dGVJbXBsKEFic3RyYWN0
U2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsgZXhlY3V0ZUltcGxJbXBsKHZpc2l0b3IpOyB9Cit2b2lk
IE1hcmtTdGFja01lcmdpbmdDb25zdHJhaW50OjpleGVjdXRlSW1wbChTbG90VmlzaXRvciYgdmlz
aXRvcikgeyBleGVjdXRlSW1wbEltcGwodmlzaXRvcik7IH0KKwogfSAvLyBuYW1lc3BhY2UgSlND
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtTdGFja01lcmdpbmdDb25z
dHJhaW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya1N0
YWNrTWVyZ2luZ0NvbnN0cmFpbnQuaAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQuaAkod29ya2luZyBjb3B5
KQpAQCAtMzAsNiArMzAsNyBAQAogbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIEhlYXA7CitjbGFz
cyBBYnN0cmFjdFNsb3RWaXNpdG9yOwogY2xhc3MgU2xvdFZpc2l0b3I7CiAKIGNsYXNzIE1hcmtT
dGFja01lcmdpbmdDb25zdHJhaW50IGZpbmFsIDogcHVibGljIE1hcmtpbmdDb25zdHJhaW50IHsK
QEAgLTQwLDcgKzQxLDkgQEAgcHVibGljOgogICAgIGRvdWJsZSBxdWlja1dvcmtFc3RpbWF0ZShT
bG90VmlzaXRvciYpIGZpbmFsOwogICAgIAogcHJpdmF0ZToKLSAgICB2b2lkIHByZXBhcmVUb0V4
ZWN1dGVJbXBsKGNvbnN0IEFic3RyYWN0TG9ja2VyJiBjb25zdHJhaW50U29sdmluZ0xvY2tlciwg
U2xvdFZpc2l0b3ImKSBmaW5hbDsKKyAgICB2b2lkIHByZXBhcmVUb0V4ZWN1dGVJbXBsKGNvbnN0
IEFic3RyYWN0TG9ja2VyJiBjb25zdHJhaW50U29sdmluZ0xvY2tlciwgQWJzdHJhY3RTbG90Vmlz
aXRvciYpIGZpbmFsOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IEFMV0FZU19JTkxJ
TkUgdm9pZCBleGVjdXRlSW1wbEltcGwoVmlzaXRvciYpOworICAgIHZvaWQgZXhlY3V0ZUltcGwo
QWJzdHJhY3RTbG90VmlzaXRvciYpIGZpbmFsOwogICAgIHZvaWQgZXhlY3V0ZUltcGwoU2xvdFZp
c2l0b3ImKSBmaW5hbDsKICAgICAKICAgICBIZWFwJiBtX2hlYXA7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmgJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTIw
MCw2ICsyMDAsNyBAQCBwdWJsaWM6CiAgICAgICAgIAogICAgICAgICB2b2lkKiBzdGFydCgpIGNv
bnN0IHsgcmV0dXJuICZtX2Jsb2NrLT5hdG9tcygpWzBdOyB9CiAgICAgICAgIHZvaWQqIGVuZCgp
IGNvbnN0IHsgcmV0dXJuICZtX2Jsb2NrLT5hdG9tcygpW21fZW5kQXRvbV07IH0KKyAgICAgICAg
dm9pZCogYXRvbUF0KHNpemVfdCBpKSBjb25zdCB7IHJldHVybiAmbV9ibG9jay0+YXRvbXMoKVtp
XTsgfQogICAgICAgICBib29sIGNvbnRhaW5zKHZvaWQqIHApIGNvbnN0IHsgcmV0dXJuIHN0YXJ0
KCkgPD0gcCAmJiBwIDwgZW5kKCk7IH0KIAogICAgICAgICB2b2lkIGR1bXBTdGF0ZShQcmludFN0
cmVhbSYpOwpAQCAtMjk1LDkgKzI5NiwxMCBAQCBwdWJsaWM6CiAKICAgICAgICAgQml0bWFwPGF0
b21zUGVyQmxvY2s+IG1fbWFya3M7CiAgICAgICAgIEJpdG1hcDxhdG9tc1BlckJsb2NrPiBtX25l
d2x5QWxsb2NhdGVkOworICAgICAgICB2b2lkKiBtX3ZlcmlmaWVyTWVtbyB7IG51bGxwdHIgfTsK
ICAgICB9OwogICAgIAotcHJpdmF0ZTogICAgCitwcml2YXRlOgogICAgIEZvb3RlciYgZm9vdGVy
KCk7CiAgICAgY29uc3QgRm9vdGVyJiBmb290ZXIoKSBjb25zdDsKIApAQCAtMzg0LDcgKzM4Niwx
MSBAQCBwdWJsaWM6CiAgICAgICAgICpiaXR3aXNlX2Nhc3Q8dm9sYXRpbGUgdWludDhfdCo+KCZm
b290ZXIoKSk7CiAgICAgfQogICAgIAorICAgIHZvaWQgc2V0VmVyaWZpZXJNZW1vKHZvaWQqKTsK
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBUIHZlcmlmaWVyTWVtbygpIGNvbnN0OworCiAgICAg
c3RhdGljIGNvbnN0ZXhwciBzaXplX3Qgb2Zmc2V0T2ZGb290ZXIgPSBlbmRBdG9tICogYXRvbVNp
emU7CisgICAgc3RhdGljX2Fzc2VydChvZmZzZXRPZkZvb3RlciArIHNpemVvZihGb290ZXIpIDw9
IGJsb2NrU2l6ZSk7CiAKIHByaXZhdGU6CiAgICAgTWFya2VkQmxvY2soVk0mLCBIYW5kbGUmKTsK
QEAgLTY2MCw2ICs2NjYsMTcgQEAgaW5saW5lIHZvaWQgTWFya2VkQmxvY2s6Om5vdGVNYXJrZWQo
KQogICAgICAgICBub3RlTWFya2VkU2xvdygpOwogfQogCitpbmxpbmUgdm9pZCBNYXJrZWRCbG9j
azo6c2V0VmVyaWZpZXJNZW1vKHZvaWQqIHApCit7CisgICAgZm9vdGVyKCkubV92ZXJpZmllck1l
bW8gPSBwOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorVCBNYXJrZWRCbG9jazo6dmVyaWZp
ZXJNZW1vKCkgY29uc3QKK3sKKyAgICByZXR1cm4gYml0d2lzZV9jYXN0PFQ+KGZvb3RlcigpLm1f
dmVyaWZpZXJNZW1vKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKIG5hbWVzcGFjZSBXVEYg
ewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkU3BhY2UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZFNwYWNlLmNwcAkocmV2
aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkU3BhY2Uu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNzIsNyArMjcyLDggQEAgdm9pZCBNYXJrZWRTcGFjZTo6
ZW5hYmxlUHJlY2lzZUFsbG9jYXRpbwogICAgICAgICBtX3ByZWNpc2VBbGxvY2F0aW9uU2V0LT5h
ZGQoYWxsb2NhdGlvbi0+Y2VsbCgpKTsKIH0KIAotdm9pZCBNYXJrZWRTcGFjZTo6dmlzaXRXZWFr
U2V0cyhTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2
b2lkIE1hcmtlZFNwYWNlOjp2aXNpdFdlYWtTZXRzKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAg
YXV0byB2aXNpdCA9IFsmXSAoV2Vha1NldCogd2Vha1NldCkgewogICAgICAgICB3ZWFrU2V0LT52
aXNpdCh2aXNpdG9yKTsKQEAgLTI4NCw2ICsyODUsOSBAQCB2b2lkIE1hcmtlZFNwYWNlOjp2aXNp
dFdlYWtTZXRzKFNsb3RWaXNpCiAgICAgICAgIG1fYWN0aXZlV2Vha1NldHMuZm9yRWFjaCh2aXNp
dCk7CiB9CiAKK3RlbXBsYXRlIHZvaWQgTWFya2VkU3BhY2U6OnZpc2l0V2Vha1NldHMoQWJzdHJh
Y3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBNYXJrZWRTcGFjZTo6dmlzaXRXZWFrU2V0
cyhTbG90VmlzaXRvciYpOworCiB2b2lkIE1hcmtlZFNwYWNlOjpyZWFwV2Vha1NldHMoKQogewog
ICAgIGF1dG8gdmlzaXQgPSBbJl0gKFdlYWtTZXQqIHdlYWtTZXQpIHsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZFNwYWNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkU3BhY2UuaAkocmV2aXNpb24gMjcyOTAyKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkU3BhY2UuaAkod29ya2luZyBjb3B5KQpAQCAt
MSw3ICsxLDcgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDAgSGFycmkgUG9ydGVu
IChwb3J0ZW5Aa2RlLm9yZykKICAqICBDb3B5cmlnaHQgKEMpIDIwMDEgUGV0ZXIgS2VsbHkgKHBt
a0Bwb3N0LmNvbSkKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAxOCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwpAQCAtMzcsNiArMzcsNyBA
QAogCiBuYW1lc3BhY2UgSlNDIHsKIAorY2xhc3MgQWJzdHJhY3RTbG90VmlzaXRvcjsKIGNsYXNz
IENvbXBsZXRlU3Vic3BhY2U7CiBjbGFzcyBIZWFwOwogY2xhc3MgSGVhcENlbGw7CkBAIC0xMDUs
NyArMTA2LDcgQEAgcHVibGljOgogICAgIAogICAgIHZvaWQgcHJlcGFyZUZvckFsbG9jYXRpb24o
KTsKIAotICAgIHZvaWQgdmlzaXRXZWFrU2V0cyhTbG90VmlzaXRvciYpOworICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgdmlzaXRXZWFrU2V0cyhWaXNpdG9yJik7CiAgICAgdm9p
ZCByZWFwV2Vha1NldHMoKTsKIAogICAgIE1hcmtlZEJsb2NrU2V0JiBibG9ja3MoKSB7IHJldHVy
biBtX2Jsb2NrczsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0Nv
bnN0cmFpbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01h
cmtpbmdDb25zdHJhaW50LmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2LDYgKzI2
LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJNYXJraW5nQ29uc3RyYWludC5o
IgogCisjaW5jbHVkZSAiQWJzdHJhY3RTbG90VmlzaXRvcklubGluZXMuaCIKICNpbmNsdWRlICJK
U0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiVmlzaXRDb3VudGVyLmgiCiAKQEAgLTUzLDYgKzU0LDcg
QEAgdm9pZCBNYXJraW5nQ29uc3RyYWludDo6cmVzZXRTdGF0cygpCiAKIHZvaWQgTWFya2luZ0Nv
bnN0cmFpbnQ6OmV4ZWN1dGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CisgICAgQVNTRVJUKCF2
aXNpdG9yLmhlYXAoKS0+aXNNYXJraW5nRm9yR0NWZXJpZmllcigpKTsKICAgICBWaXNpdENvdW50
ZXIgdmlzaXRDb3VudGVyKHZpc2l0b3IpOwogICAgIGV4ZWN1dGVJbXBsKHZpc2l0b3IpOwogICAg
IG1fbGFzdFZpc2l0Q291bnQgKz0gdmlzaXRDb3VudGVyLnZpc2l0Q291bnQoKTsKQEAgLTYwLDYg
KzYyLDEyIEBAIHZvaWQgTWFya2luZ0NvbnN0cmFpbnQ6OmV4ZWN1dGUoU2xvdFZpc2kKICAgICAg
ICAgZGF0YUxvZygiKCIsIGFiYnJldmlhdGVkTmFtZSgpLCAiIHZpc2l0ZWQgIiwgdmlzaXRDb3Vu
dGVyLnZpc2l0Q291bnQoKSwgIiBpbiBleGVjdXRlKSIpOwogfQogCit2b2lkIE1hcmtpbmdDb25z
dHJhaW50OjpleGVjdXRlU3luY2hyb25vdXNseShBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9y
KQoreworICAgIHByZXBhcmVUb0V4ZWN1dGVJbXBsKE5vTG9ja2luZ05lY2Vzc2FyeSwgdmlzaXRv
cik7CisgICAgZXhlY3V0ZUltcGwodmlzaXRvcik7Cit9CisKIGRvdWJsZSBNYXJraW5nQ29uc3Ry
YWludDo6cXVpY2tXb3JrRXN0aW1hdGUoU2xvdFZpc2l0b3ImKQogewogICAgIHJldHVybiAwOwpA
QCAtNzIsNiArODAsNyBAQCBkb3VibGUgTWFya2luZ0NvbnN0cmFpbnQ6OndvcmtFc3RpbWF0ZShT
CiAKIHZvaWQgTWFya2luZ0NvbnN0cmFpbnQ6OnByZXBhcmVUb0V4ZWN1dGUoY29uc3QgQWJzdHJh
Y3RMb2NrZXImIGNvbnN0cmFpbnRTb2x2aW5nTG9ja2VyLCBTbG90VmlzaXRvciYgdmlzaXRvcikK
IHsKKyAgICBBU1NFUlQoIXZpc2l0b3IuaGVhcCgpLT5pc01hcmtpbmdGb3JHQ1ZlcmlmaWVyKCkp
OwogICAgIGRhdGFMb2dJZihPcHRpb25zOjpsb2dHQygpLCBhYmJyZXZpYXRlZE5hbWUoKSk7CiAg
ICAgVmlzaXRDb3VudGVyIHZpc2l0Q291bnRlcih2aXNpdG9yKTsKICAgICBwcmVwYXJlVG9FeGVj
dXRlSW1wbChjb25zdHJhaW50U29sdmluZ0xvY2tlciwgdmlzaXRvcik7CkBAIC04Miw2ICs5MSw3
IEBAIHZvaWQgTWFya2luZ0NvbnN0cmFpbnQ6OnByZXBhcmVUb0V4ZWN1dGUKIAogdm9pZCBNYXJr
aW5nQ29uc3RyYWludDo6ZG9QYXJhbGxlbFdvcmsoU2xvdFZpc2l0b3ImIHZpc2l0b3IsIFNoYXJl
ZFRhc2s8dm9pZChTbG90VmlzaXRvciYpPiYgdGFzaykKIHsKKyAgICBBU1NFUlQoIXZpc2l0b3Iu
aGVhcCgpLT5pc01hcmtpbmdGb3JHQ1ZlcmlmaWVyKCkpOwogICAgIFZpc2l0Q291bnRlciB2aXNp
dENvdW50ZXIodmlzaXRvcik7CiAgICAgdGFzay5ydW4odmlzaXRvcik7CiAgICAgaWYgKHZlcmJv
c2VNYXJraW5nQ29uc3RyYWludCAmJiB2aXNpdENvdW50ZXIudmlzaXRDb3VudCgpKQpAQCAtOTIs
NyArMTAyLDcgQEAgdm9pZCBNYXJraW5nQ29uc3RyYWludDo6ZG9QYXJhbGxlbFdvcmsoUwogICAg
IH0KIH0KIAotdm9pZCBNYXJraW5nQ29uc3RyYWludDo6cHJlcGFyZVRvRXhlY3V0ZUltcGwoY29u
c3QgQWJzdHJhY3RMb2NrZXImLCBTbG90VmlzaXRvciYpCit2b2lkIE1hcmtpbmdDb25zdHJhaW50
OjpwcmVwYXJlVG9FeGVjdXRlSW1wbChjb25zdCBBYnN0cmFjdExvY2tlciYsIEFic3RyYWN0U2xv
dFZpc2l0b3ImKQogewogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJr
aW5nQ29uc3RyYWludC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L01hcmtpbmdDb25zdHJhaW50LmgJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzgsNiArMzgs
NyBAQAogbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIE1hcmtpbmdDb25zdHJhaW50U2V0OworY2xh
c3MgQWJzdHJhY3RTbG90VmlzaXRvcjsKIGNsYXNzIFNsb3RWaXNpdG9yOwogCiBjbGFzcyBNYXJr
aW5nQ29uc3RyYWludCB7CkBAIC02MSwxMCArNjIsMTAgQEAgcHVibGljOgogICAgIHNpemVfdCBs
YXN0VmlzaXRDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fbGFzdFZpc2l0Q291bnQ7IH0KICAgICAK
ICAgICB2b2lkIGV4ZWN1dGUoU2xvdFZpc2l0b3ImKTsKKworICAgIEpTX0VYUE9SVF9QUklWQVRF
IHZpcnR1YWwgZG91YmxlIHF1aWNrV29ya0VzdGltYXRlKFNsb3RWaXNpdG9yJik7CiAgICAgCi0g
ICAgSlNfRVhQT1JUX1BSSVZBVEUgdmlydHVhbCBkb3VibGUgcXVpY2tXb3JrRXN0aW1hdGUoU2xv
dFZpc2l0b3ImIHZpc2l0b3IpOwotICAgIAotICAgIGRvdWJsZSB3b3JrRXN0aW1hdGUoU2xvdFZp
c2l0b3ImIHZpc2l0b3IpOworICAgIGRvdWJsZSB3b3JrRXN0aW1hdGUoU2xvdFZpc2l0b3ImKTsK
ICAgICAKICAgICB2b2lkIHByZXBhcmVUb0V4ZWN1dGUoY29uc3QgQWJzdHJhY3RMb2NrZXImIGNv
bnN0cmFpbnRTb2x2aW5nTG9ja2VyLCBTbG90VmlzaXRvciYpOwogICAgIApAQCAtNzYsOSArNzcs
MTIgQEAgcHVibGljOgogICAgIENvbnN0cmFpbnRQYXJhbGxlbGlzbSBwYXJhbGxlbGlzbSgpIGNv
bnN0IHsgcmV0dXJuIG1fcGFyYWxsZWxpc207IH0KIAogcHJvdGVjdGVkOgorICAgIHZpcnR1YWwg
dm9pZCBleGVjdXRlSW1wbChBYnN0cmFjdFNsb3RWaXNpdG9yJikgPSAwOwogICAgIHZpcnR1YWwg
dm9pZCBleGVjdXRlSW1wbChTbG90VmlzaXRvciYpID0gMDsKLSAgICBKU19FWFBPUlRfUFJJVkFU
RSB2aXJ0dWFsIHZvaWQgcHJlcGFyZVRvRXhlY3V0ZUltcGwoY29uc3QgQWJzdHJhY3RMb2NrZXIm
IGNvbnN0cmFpbnRTb2x2aW5nTG9ja2VyLCBTbG90VmlzaXRvciYpOwotICAgIAorICAgIEpTX0VY
UE9SVF9QUklWQVRFIHZpcnR1YWwgdm9pZCBwcmVwYXJlVG9FeGVjdXRlSW1wbChjb25zdCBBYnN0
cmFjdExvY2tlciYgY29uc3RyYWludFNvbHZpbmdMb2NrZXIsIEFic3RyYWN0U2xvdFZpc2l0b3Im
KTsKKworICAgIHZvaWQgZXhlY3V0ZVN5bmNocm9ub3VzbHkoQWJzdHJhY3RTbG90VmlzaXRvciYp
OworCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBNYXJraW5nQ29uc3RyYWludFNldDsgLy8g
U28gaXQgY2FuIHNldCBtX2luZGV4LgogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvTWFya2luZ0NvbnN0cmFpbnRFeGVjdXRvclBhaXIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludEV4ZWN1dG9yUGFpci5oCShu
b25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJh
aW50RXhlY3V0b3JQYWlyLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3RmL0Z1bmN0aW9uLmg+CisKK25hbWVz
cGFjZSBKU0MgeworCitjbGFzcyBBYnN0cmFjdFNsb3RWaXNpdG9yOworY2xhc3MgU2xvdFZpc2l0
b3I7CisKK3N0cnVjdCBNYXJraW5nQ29uc3RyYWludEV4ZWN1dG9yUGFpciB7CisgICAgTWFya2lu
Z0NvbnN0cmFpbnRFeGVjdXRvclBhaXIoCisgICAgICAgIDo6RnVuY3Rpb248dm9pZChBYnN0cmFj
dFNsb3RWaXNpdG9yJik+IGFic3RyYWN0U2xvdFZpc2l0b3JGdW5jLAorICAgICAgICA6OkZ1bmN0
aW9uPHZvaWQoU2xvdFZpc2l0b3ImKT4gc2xvdFZpc2l0b3JGdW5jKQorICAgICAgICA6IGFic3Ry
YWN0U2xvdFZpc2l0b3JGdW5jKFdURk1vdmUoYWJzdHJhY3RTbG90VmlzaXRvckZ1bmMpKQorICAg
ICAgICAsIHNsb3RWaXNpdG9yRnVuYyhXVEZNb3ZlKHNsb3RWaXNpdG9yRnVuYykpCisgICAgeyB9
CisgICAgTWFya2luZ0NvbnN0cmFpbnRFeGVjdXRvclBhaXIoTWFya2luZ0NvbnN0cmFpbnRFeGVj
dXRvclBhaXImJikgPSBkZWZhdWx0OworCisgICAgdm9pZCBleGVjdXRlKEFic3RyYWN0U2xvdFZp
c2l0b3ImIHZpc2l0b3IpIHsgYWJzdHJhY3RTbG90VmlzaXRvckZ1bmModmlzaXRvcik7IH0KKyAg
ICB2b2lkIGV4ZWN1dGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsgc2xvdFZpc2l0b3JGdW5jKHZp
c2l0b3IpOyB9CisKKyAgICA6OkZ1bmN0aW9uPHZvaWQoQWJzdHJhY3RTbG90VmlzaXRvciYpPiBh
YnN0cmFjdFNsb3RWaXNpdG9yRnVuYzsKKyAgICA6OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3Im
KT4gc2xvdFZpc2l0b3JGdW5jOworfTsKKworI2RlZmluZSBNQUtFX01BUktJTkdfQ09OU1RSQUlO
VF9FWEVDVVRPUl9QQUlSKGxhbWJkYSkgXAorICAgIE1hcmtpbmdDb25zdHJhaW50RXhlY3V0b3JQ
YWlyKChsYW1iZGEpLCAobGFtYmRhKSkKKworfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludFNldC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnRTZXQuY3Bw
CShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5n
Q29uc3RyYWludFNldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjMsOSArNjMsOSBAQCB2b2lkIE1hcmtp
bmdDb25zdHJhaW50U2V0OjpkaWRTdGFydE1hcmtpCiAgICAgbV9pdGVyYXRpb24gPSAxOwogfQog
Ci12b2lkIE1hcmtpbmdDb25zdHJhaW50U2V0OjphZGQoQ1N0cmluZyBhYmJyZXZpYXRlZE5hbWUs
IENTdHJpbmcgbmFtZSwgOjpGdW5jdGlvbjx2b2lkKFNsb3RWaXNpdG9yJik+IGZ1bmN0aW9uLCBD
b25zdHJhaW50Vm9sYXRpbGl0eSB2b2xhdGlsaXR5LCBDb25zdHJhaW50Q29uY3VycmVuY3kgY29u
Y3VycmVuY3ksIENvbnN0cmFpbnRQYXJhbGxlbGlzbSBwYXJhbGxlbGlzbSkKK3ZvaWQgTWFya2lu
Z0NvbnN0cmFpbnRTZXQ6OmFkZChDU3RyaW5nIGFiYnJldmlhdGVkTmFtZSwgQ1N0cmluZyBuYW1l
LCBNYXJraW5nQ29uc3RyYWludEV4ZWN1dG9yUGFpciYmIGV4ZWN1dG9ycywgQ29uc3RyYWludFZv
bGF0aWxpdHkgdm9sYXRpbGl0eSwgQ29uc3RyYWludENvbmN1cnJlbmN5IGNvbmN1cnJlbmN5LCBD
b25zdHJhaW50UGFyYWxsZWxpc20gcGFyYWxsZWxpc20pCiB7Ci0gICAgYWRkKG1ha2VVbmlxdWU8
U2ltcGxlTWFya2luZ0NvbnN0cmFpbnQ+KFdURk1vdmUoYWJicmV2aWF0ZWROYW1lKSwgV1RGTW92
ZShuYW1lKSwgV1RGTW92ZShmdW5jdGlvbiksIHZvbGF0aWxpdHksIGNvbmN1cnJlbmN5LCBwYXJh
bGxlbGlzbSkpOworICAgIGFkZChtYWtlVW5pcXVlPFNpbXBsZU1hcmtpbmdDb25zdHJhaW50PihX
VEZNb3ZlKGFiYnJldmlhdGVkTmFtZSksIFdURk1vdmUobmFtZSksIFdURk1vdmUoZXhlY3V0b3Jz
KSwgdm9sYXRpbGl0eSwgY29uY3VycmVuY3ksIHBhcmFsbGVsaXNtKSk7CiB9CiAKIHZvaWQgTWFy
a2luZ0NvbnN0cmFpbnRTZXQ6OmFkZCgKQEAgLTE2NiwxMCArMTY2LDEwIEBAIGJvb2wgTWFya2lu
Z0NvbnN0cmFpbnRTZXQ6OmV4ZWN1dGVDb252ZXIKICAgICByZXR1cm4gIXNvbHZlci5kaWRWaXNp
dFNvbWV0aGluZygpOwogfQogCi12b2lkIE1hcmtpbmdDb25zdHJhaW50U2V0OjpleGVjdXRlQWxs
KFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBNYXJraW5nQ29uc3RyYWludFNldDo6ZXhlY3V0
ZUFsbFN5bmNocm9ub3VzbHkoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBm
b3IgKGF1dG8mIGNvbnN0cmFpbnQgOiBtX3NldCkKLSAgICAgICAgY29uc3RyYWludC0+ZXhlY3V0
ZSh2aXNpdG9yKTsKKyAgICAgICAgY29uc3RyYWludC0+ZXhlY3V0ZVN5bmNocm9ub3VzbHkodmlz
aXRvcik7CiAgICAgZGF0YUxvZ0lmKE9wdGlvbnM6OmxvZ0dDKCksICIgIik7CiB9CiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50U2V0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnRTZXQu
aAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2lu
Z0NvbnN0cmFpbnRTZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNiw2ICsyNiw3IEBACiAjcHJhZ21hIG9u
Y2UKIAogI2luY2x1ZGUgIk1hcmtpbmdDb25zdHJhaW50LmgiCisjaW5jbHVkZSAiTWFya2luZ0Nv
bnN0cmFpbnRFeGVjdXRvclBhaXIuaCIKICNpbmNsdWRlIDx3dGYvQml0VmVjdG9yLmg+CiAjaW5j
bHVkZSA8d3RmL1ZlY3Rvci5oPgogCkBAIC00NiwxOCArNDcsMTggQEAgcHVibGljOgogICAgIHZv
aWQgYWRkKAogICAgICAgICBDU3RyaW5nIGFiYnJldmlhdGVkTmFtZSwKICAgICAgICAgQ1N0cmlu
ZyBuYW1lLAotICAgICAgICA6OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3ImKT4sCisgICAgICAg
IE1hcmtpbmdDb25zdHJhaW50RXhlY3V0b3JQYWlyJiYsCiAgICAgICAgIENvbnN0cmFpbnRWb2xh
dGlsaXR5LAogICAgICAgICBDb25zdHJhaW50Q29uY3VycmVuY3kgPSBDb25zdHJhaW50Q29uY3Vy
cmVuY3k6OkNvbmN1cnJlbnQsCiAgICAgICAgIENvbnN0cmFpbnRQYXJhbGxlbGlzbSA9IENvbnN0
cmFpbnRQYXJhbGxlbGlzbTo6U2VxdWVudGlhbCk7CiAgICAgCiAgICAgdm9pZCBhZGQoCiAgICAg
ICAgIENTdHJpbmcgYWJicmV2aWF0ZWROYW1lLCBDU3RyaW5nIG5hbWUsCi0gICAgICAgIDo6RnVu
Y3Rpb248dm9pZChTbG90VmlzaXRvciYpPiBmdW5jLAorICAgICAgICBNYXJraW5nQ29uc3RyYWlu
dEV4ZWN1dG9yUGFpciYmIGV4ZWN1dG9ycywKICAgICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHkg
dm9sYXRpbGl0eSwKICAgICAgICAgQ29uc3RyYWludFBhcmFsbGVsaXNtIHBhcmFsbGVsaXNtKQog
ICAgIHsKLSAgICAgICAgYWRkKGFiYnJldmlhdGVkTmFtZSwgbmFtZSwgV1RGTW92ZShmdW5jKSwg
dm9sYXRpbGl0eSwgQ29uc3RyYWludENvbmN1cnJlbmN5OjpDb25jdXJyZW50LCBwYXJhbGxlbGlz
bSk7CisgICAgICAgIGFkZChhYmJyZXZpYXRlZE5hbWUsIG5hbWUsIFdURk1vdmUoZXhlY3V0b3Jz
KSwgdm9sYXRpbGl0eSwgQ29uc3RyYWludENvbmN1cnJlbmN5OjpDb25jdXJyZW50LCBwYXJhbGxl
bGlzbSk7CiAgICAgfQogICAgIAogICAgIHZvaWQgYWRkKHN0ZDo6dW5pcXVlX3B0cjxNYXJraW5n
Q29uc3RyYWludD4pOwpAQCAtNzAsMTMgKzcxLDEzIEBAIHB1YmxpYzoKICAgICAvLyBSZXR1cm5z
IHRydWUgaWYgdGhpcyBleGVjdXRlZCBhbGwgY29uc3RyYWludHMgYW5kIG5vbmUgb2YgdGhlbSBw
cm9kdWNlZCBuZXcgd29yay4gVGhpcwogICAgIC8vIGFzc3VtZXMgdGhhdCB5b3UndmUgYWxyYWVk
eSB2aXNpdGVkIHJvb3RzIGFuZCBkcmFpbmVkIGZyb20gdGhlcmUuCiAgICAgYm9vbCBleGVjdXRl
Q29udmVyZ2VuY2UoU2xvdFZpc2l0b3ImKTsKLSAgICAKKwogICAgIC8vIFNpbXBseSBydW5zIGFs
bCBjb25zdHJhaW50cyB3aXRob3V0IGFueSBzaGVuYW5pZ2Fucy4KLSAgICB2b2lkIGV4ZWN1dGVB
bGwoU2xvdFZpc2l0b3ImKTsKKyAgICB2b2lkIGV4ZWN1dGVBbGxTeW5jaHJvbm91c2x5KEFic3Ry
YWN0U2xvdFZpc2l0b3ImKTsKICAgICAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIE1hcmtp
bmdDb25zdHJhaW50U29sdmVyOwotICAgIAorCiAgICAgYm9vbCBleGVjdXRlQ29udmVyZ2VuY2VJ
bXBsKFNsb3RWaXNpdG9yJik7CiAgICAgCiAgICAgSGVhcCYgbV9oZWFwOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50U29sdmVy
LmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFy
a2luZ0NvbnN0cmFpbnRTb2x2ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50U29sdmVyLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXIuaAkocmV2aXNp
b24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFp
bnRTb2x2ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9T
aW1wbGVNYXJraW5nQ29uc3RyYWludC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQuY3BwCShyZXZpc2lvbiAyNzI5MDIp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TaW1wbGVNYXJraW5nQ29uc3RyYWludC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
Ny0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMzAsMTEgKzMwLDExIEBAIG5hbWVzcGFjZSBKU0MgewogCiBTaW1w
bGVNYXJraW5nQ29uc3RyYWludDo6U2ltcGxlTWFya2luZ0NvbnN0cmFpbnQoCiAgICAgQ1N0cmlu
ZyBhYmJyZXZpYXRlZE5hbWUsIENTdHJpbmcgbmFtZSwKLSAgICA6OkZ1bmN0aW9uPHZvaWQoU2xv
dFZpc2l0b3ImKT4gZXhlY3V0ZUZ1bmN0aW9uLAorICAgIE1hcmtpbmdDb25zdHJhaW50RXhlY3V0
b3JQYWlyJiYgZXhlY3V0b3JzLAogICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5IHZvbGF0aWxpdHks
IENvbnN0cmFpbnRDb25jdXJyZW5jeSBjb25jdXJyZW5jeSwKICAgICBDb25zdHJhaW50UGFyYWxs
ZWxpc20gcGFyYWxsZWxpc20pCiAgICAgOiBNYXJraW5nQ29uc3RyYWludChXVEZNb3ZlKGFiYnJl
dmlhdGVkTmFtZSksIFdURk1vdmUobmFtZSksIHZvbGF0aWxpdHksIGNvbmN1cnJlbmN5LCBwYXJh
bGxlbGlzbSkKLSAgICAsIG1fZXhlY3V0ZUZ1bmN0aW9uKFdURk1vdmUoZXhlY3V0ZUZ1bmN0aW9u
KSkKKyAgICAsIG1fZXhlY3V0b3JzKFdURk1vdmUoZXhlY3V0b3JzKSkKIHsKIH0KIApAQCAtNDIs
MTAgKzQyLDE0IEBAIFNpbXBsZU1hcmtpbmdDb25zdHJhaW50Ojp+U2ltcGxlTWFya2luZ0MKIHsK
IH0KIAotdm9pZCBTaW1wbGVNYXJraW5nQ29uc3RyYWludDo6ZXhlY3V0ZUltcGwoU2xvdFZpc2l0
b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBTaW1wbGVNYXJr
aW5nQ29uc3RyYWludDo6ZXhlY3V0ZUltcGxJbXBsKFZpc2l0b3ImIHZpc2l0b3IpCiB7Ci0gICAg
bV9leGVjdXRlRnVuY3Rpb24odmlzaXRvcik7CisgICAgbV9leGVjdXRvcnMuZXhlY3V0ZSh2aXNp
dG9yKTsKIH0KIAordm9pZCBTaW1wbGVNYXJraW5nQ29uc3RyYWludDo6ZXhlY3V0ZUltcGwoQWJz
dHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikgeyBleGVjdXRlSW1wbEltcGwodmlzaXRvcik7IH0K
K3ZvaWQgU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQ6OmV4ZWN1dGVJbXBsKFNsb3RWaXNpdG9yJiB2
aXNpdG9yKSB7IGV4ZWN1dGVJbXBsSW1wbCh2aXNpdG9yKTsgfQorCiB9IC8vIG5hbWVzcGFjZSBK
U0MKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2ltcGxlTWFya2luZ0NvbnN0
cmFpbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TaW1wbGVN
YXJraW5nQ29uc3RyYWludC5oCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9TaW1wbGVNYXJraW5nQ29uc3RyYWludC5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2LDcg
KzI2LDcgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiTWFya2luZ0NvbnN0cmFpbnQuaCIK
LSNpbmNsdWRlIDx3dGYvRnVuY3Rpb24uaD4KKyNpbmNsdWRlICJNYXJraW5nQ29uc3RyYWludEV4
ZWN1dG9yUGFpci5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIApAQCAtMzcsMjYgKzM3LDI4IEBAIGNs
YXNzIFNpbXBsZU1hcmtpbmdDb25zdHJhaW50IGZpbmFsIDogcHUKIHB1YmxpYzoKICAgICBKU19F
WFBPUlRfUFJJVkFURSBTaW1wbGVNYXJraW5nQ29uc3RyYWludCgKICAgICAgICAgQ1N0cmluZyBh
YmJyZXZpYXRlZE5hbWUsIENTdHJpbmcgbmFtZSwKLSAgICAgICAgOjpGdW5jdGlvbjx2b2lkKFNs
b3RWaXNpdG9yJik+LAorICAgICAgICBNYXJraW5nQ29uc3RyYWludEV4ZWN1dG9yUGFpciYmLAog
ICAgICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eSwKICAgICAgICAgQ29uc3RyYWludENvbmN1cnJl
bmN5ID0gQ29uc3RyYWludENvbmN1cnJlbmN5OjpDb25jdXJyZW50LAogICAgICAgICBDb25zdHJh
aW50UGFyYWxsZWxpc20gPSBDb25zdHJhaW50UGFyYWxsZWxpc206OlNlcXVlbnRpYWwpOwogICAg
IAogICAgIFNpbXBsZU1hcmtpbmdDb25zdHJhaW50KAogICAgICAgICBDU3RyaW5nIGFiYnJldmlh
dGVkTmFtZSwgQ1N0cmluZyBuYW1lLAotICAgICAgICA6OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0
b3ImKT4gZnVuYywKKyAgICAgICAgTWFya2luZ0NvbnN0cmFpbnRFeGVjdXRvclBhaXImJiBleGVj
dXRvcnMsCiAgICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5IHZvbGF0aWxpdHksCiAgICAgICAg
IENvbnN0cmFpbnRQYXJhbGxlbGlzbSBwYXJhbGxlbGlzbSkKLSAgICAgICAgOiBTaW1wbGVNYXJr
aW5nQ29uc3RyYWludChhYmJyZXZpYXRlZE5hbWUsIG5hbWUsIFdURk1vdmUoZnVuYyksIHZvbGF0
aWxpdHksIENvbnN0cmFpbnRDb25jdXJyZW5jeTo6Q29uY3VycmVudCwgcGFyYWxsZWxpc20pCisg
ICAgICAgIDogU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQoYWJicmV2aWF0ZWROYW1lLCBuYW1lLCBX
VEZNb3ZlKGV4ZWN1dG9ycyksIHZvbGF0aWxpdHksIENvbnN0cmFpbnRDb25jdXJyZW5jeTo6Q29u
Y3VycmVudCwgcGFyYWxsZWxpc20pCiAgICAgewogICAgIH0KICAgICAKICAgICBKU19FWFBPUlRf
UFJJVkFURSB+U2ltcGxlTWFya2luZ0NvbnN0cmFpbnQoKSBmaW5hbDsKICAgICAKIHByaXZhdGU6
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gQUxXQVlTX0lOTElORSB2b2lkIGV4ZWN1
dGVJbXBsSW1wbChWaXNpdG9yJik7CisgICAgdm9pZCBleGVjdXRlSW1wbChBYnN0cmFjdFNsb3RW
aXNpdG9yJikgZmluYWw7CiAgICAgdm9pZCBleGVjdXRlSW1wbChTbG90VmlzaXRvciYpIGZpbmFs
OwogCi0gICAgOjpGdW5jdGlvbjx2b2lkKFNsb3RWaXNpdG9yJik+IG1fZXhlY3V0ZUZ1bmN0aW9u
OworICAgIE1hcmtpbmdDb25zdHJhaW50RXhlY3V0b3JQYWlyIG1fZXhlY3V0b3JzOwogfTsKIAog
fSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90
VmlzaXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xv
dFZpc2l0b3IuY3BwCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9TbG90VmlzaXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03NywxNSArNzcsMTAgQEAg
c3RhdGljIHZvaWQgdmFsaWRhdGUoSlNDZWxsKiBjZWxsKQogI2VuZGlmCiAKIFNsb3RWaXNpdG9y
OjpTbG90VmlzaXRvcihIZWFwJiBoZWFwLCBDU3RyaW5nIGNvZGVOYW1lKQotICAgIDogbV9ieXRl
c1Zpc2l0ZWQoMCkKLSAgICAsIG1fdmlzaXRDb3VudCgwKQotICAgICwgbV9pc0luUGFyYWxsZWxN
b2RlKGZhbHNlKQorICAgIDogQmFzZShoZWFwLCBjb2RlTmFtZSwgaGVhcC5tX29wYXF1ZVJvb3Rz
KQogICAgICwgbV9tYXJraW5nVmVyc2lvbihNYXJrZWRTcGFjZTo6aW5pdGlhbFZlcnNpb24pCi0g
ICAgLCBtX2hlYXAoaGVhcCkKLSAgICAsIG1fY29kZU5hbWUoY29kZU5hbWUpCiAjaWYgQVNTRVJU
X0VOQUJMRUQKICAgICAsIG1faXNDaGVja2luZ0ZvckRlZmF1bHRNYXJrVmlvbGF0aW9uKGZhbHNl
KQotICAgICwgbV9pc0RyYWluaW5nKGZhbHNlKQogI2VuZGlmCiB7CiB9CkBAIC0xMTcsOCArMTEy
LDggQEAgdm9pZCBTbG90VmlzaXRvcjo6ZGlkU3RhcnRNYXJraW5nKCkKIAogdm9pZCBTbG90Vmlz
aXRvcjo6cmVzZXQoKQogeworICAgIEFic3RyYWN0U2xvdFZpc2l0b3I6OnJlc2V0KCk7CiAgICAg
bV9ieXRlc1Zpc2l0ZWQgPSAwOwotICAgIG1fdmlzaXRDb3VudCA9IDA7CiAgICAgbV9oZWFwQW5h
bHl6ZXIgPSBudWxscHRyOwogICAgIFJFTEVBU0VfQVNTRVJUKCFtX2N1cnJlbnRDZWxsKTsKIH0K
QEAgLTIzMCw3ICsyMjUsNyBAQCB2b2lkIFNsb3RWaXNpdG9yOjphcHBlbmRKU0NlbGxPckF1eGls
aWFyCiB2b2lkIFNsb3RWaXNpdG9yOjphcHBlbmRTbG93KEpTQ2VsbCogY2VsbCwgRGVwZW5kZW5j
eSBkZXBlbmRlbmN5KQogewogICAgIGlmIChVTkxJS0VMWShtX2hlYXBBbmFseXplcikpCi0gICAg
ICAgIG1faGVhcEFuYWx5emVyLT5hbmFseXplRWRnZShtX2N1cnJlbnRDZWxsLCBjZWxsLCBtX3Jv
b3RNYXJrUmVhc29uKTsKKyAgICAgICAgbV9oZWFwQW5hbHl6ZXItPmFuYWx5emVFZGdlKG1fY3Vy
cmVudENlbGwsIGNlbGwsIHJvb3RNYXJrUmVhc29uKCkpOwogCiAgICAgYXBwZW5kSGlkZGVuU2xv
d0ltcGwoY2VsbCwgZGVwZW5kZW5jeSk7CiB9CkBAIC04MDcsMTIgKzgwMiwxNyBAQCBNYXJrU3Rh
Y2tBcnJheSYgU2xvdFZpc2l0b3I6OmNvcnJlc3BvbmRpCiAgICAgcmV0dXJuICptX2hlYXAubV9z
aGFyZWRNdXRhdG9yTWFya1N0YWNrOwogfQogCitOT19SRVRVUk5fRFVFX1RPX0NSQVNIIHZvaWQg
U2xvdFZpc2l0b3I6OmFkZFBhcmFsbGVsQ29uc3RyYWludFRhc2soUmVmUHRyPFNoYXJlZFRhc2s8
dm9pZChBYnN0cmFjdFNsb3RWaXNpdG9yJik+PikKK3sKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworfQorCiB2b2lkIFNsb3RWaXNpdG9yOjphZGRQYXJhbGxlbENvbnN0cmFpbnRU
YXNrKFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoU2xvdFZpc2l0b3ImKT4+IHRhc2spCiB7CiAgICAg
UkVMRUFTRV9BU1NFUlQobV9jdXJyZW50U29sdmVyKTsKICAgICBSRUxFQVNFX0FTU0VSVChtX2N1
cnJlbnRDb25zdHJhaW50KTsKICAgICBSRUxFQVNFX0FTU0VSVCh0YXNrKTsKLSAgICAKKwogICAg
IG1fY3VycmVudFNvbHZlci0+YWRkUGFyYWxsZWxUYXNrKHRhc2ssICptX2N1cnJlbnRDb25zdHJh
aW50KTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3Iu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5o
CShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90Vmlz
aXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw1OSArMjUsNzYgQEAKIAogI3ByYWdtYSBvbmNl
CiAKKyNpbmNsdWRlICJBYnN0cmFjdFNsb3RWaXNpdG9yLmgiCiAjaW5jbHVkZSAiSGFuZGxlVHlw
ZXMuaCIKICNpbmNsdWRlICJJdGVyYXRpb25TdGF0dXMuaCIKLSNpbmNsdWRlICJNYXJrU3RhY2su
aCIKLSNpbmNsdWRlICJSb290TWFya1JlYXNvbi5oIgotI2luY2x1ZGUgIlZpc2l0UmFjZUtleS5o
IgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL01vbm90b25pY1RpbWUu
aD4KLSNpbmNsdWRlIDx3dGYvU2hhcmVkVGFzay5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJp
bmcuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKLWNsYXNzIENvbnNlcnZhdGl2ZVJvb3RzOwogY2xh
c3MgR0NUaHJlYWRTaGFyZWREYXRhOwotY2xhc3MgSGVhcDsKIGNsYXNzIEhlYXBDZWxsOwogY2xh
c3MgSGVhcEFuYWx5emVyOwotY2xhc3MgTWFya2VkQmxvY2s7CiBjbGFzcyBNYXJraW5nQ29uc3Ry
YWludDsKIGNsYXNzIE1hcmtpbmdDb25zdHJhaW50U29sdmVyOwotdGVtcGxhdGU8dHlwZW5hbWUg
VD4gY2xhc3MgV2VhazsKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFRyYWl0cz4gY2xh
c3MgV3JpdGVCYXJyaWVyQmFzZTsKIAogdHlwZWRlZiB1aW50MzJfdCBIZWFwVmVyc2lvbjsKIAot
Y2xhc3MgU2xvdFZpc2l0b3IgeworY2xhc3MgU2xvdFZpc2l0b3IgZmluYWwgOiBwdWJsaWMgQWJz
dHJhY3RTbG90VmlzaXRvciB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU2xvdFZpc2l0b3Ip
OwogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogCisgICAgdXNpbmcgQmFzZSA9IEFic3Ry
YWN0U2xvdFZpc2l0b3I7CisKICAgICBmcmllbmQgY2xhc3MgU2V0Q3VycmVudENlbGxTY29wZTsK
ICAgICBmcmllbmQgY2xhc3MgSGVhcDsKIAogcHVibGljOgorICAgIGNsYXNzIENvbnRleHQgewor
ICAgIHB1YmxpYzoKKyAgICAgICAgQUxXQVlTX0lOTElORSBDb250ZXh0KEFic3RyYWN0U2xvdFZp
c2l0b3ImLCBIZWFwQ2VsbCopIHsgfQorICAgIH07CisKKyAgICBjbGFzcyBTdXBwcmVzc0dDVmVy
aWZpZXJTY29wZSB7CisgICAgcHVibGljOgorICAgICAgICBTdXBwcmVzc0dDVmVyaWZpZXJTY29w
ZShTbG90VmlzaXRvciYpIHsgfQorICAgIH07CisKKyAgICBjbGFzcyBEZWZhdWx0TWFya2luZ1Zp
b2xhdGlvbkFzc2VydGlvblNjb3BlIHsKKyAgICBwdWJsaWM6CisjaWYgQVNTRVJUX0VOQUJMRUQK
KyAgICAgICAgRGVmYXVsdE1hcmtpbmdWaW9sYXRpb25Bc3NlcnRpb25TY29wZShTbG90VmlzaXRv
ciYgdmlzaXRvcikKKyAgICAgICAgICAgIDogbV92aXNpdG9yKHZpc2l0b3IpCisgICAgICAgIHsK
KyAgICAgICAgICAgIG1fd2FzQ2hlY2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlvbiA9IG1fdmlz
aXRvci5tX2lzQ2hlY2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlvbjsKKyAgICAgICAgICAgIG1f
dmlzaXRvci5tX2lzQ2hlY2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlvbiA9IGZhbHNlOworICAg
ICAgICB9CisKKyAgICAgICAgfkRlZmF1bHRNYXJraW5nVmlvbGF0aW9uQXNzZXJ0aW9uU2NvcGUo
KQorICAgICAgICB7CisgICAgICAgICAgICBtX3Zpc2l0b3IubV9pc0NoZWNraW5nRm9yRGVmYXVs
dE1hcmtWaW9sYXRpb24gPSBtX3dhc0NoZWNraW5nRm9yRGVmYXVsdE1hcmtWaW9sYXRpb247Cisg
ICAgICAgIH0KKworICAgIHByaXZhdGU6CisgICAgICAgIFNsb3RWaXNpdG9yJiBtX3Zpc2l0b3I7
CisgICAgICAgIGJvb2wgbV93YXNDaGVja2luZ0ZvckRlZmF1bHRNYXJrVmlvbGF0aW9uOworI2Vs
c2UKKyAgICAgICAgRGVmYXVsdE1hcmtpbmdWaW9sYXRpb25Bc3NlcnRpb25TY29wZShTbG90Vmlz
aXRvciYpIHsgfQorI2VuZGlmCisgICAgfTsKKwogICAgIFNsb3RWaXNpdG9yKEhlYXAmLCBDU3Ry
aW5nIGNvZGVOYW1lKTsKICAgICB+U2xvdFZpc2l0b3IoKTsKIAotICAgIE1hcmtTdGFja0FycmF5
JiBjb2xsZWN0b3JNYXJrU3RhY2soKSB7IHJldHVybiBtX2NvbGxlY3RvclN0YWNrOyB9Ci0gICAg
TWFya1N0YWNrQXJyYXkmIG11dGF0b3JNYXJrU3RhY2soKSB7IHJldHVybiBtX211dGF0b3JTdGFj
azsgfQotICAgIGNvbnN0IE1hcmtTdGFja0FycmF5JiBjb2xsZWN0b3JNYXJrU3RhY2soKSBjb25z
dCB7IHJldHVybiBtX2NvbGxlY3RvclN0YWNrOyB9Ci0gICAgY29uc3QgTWFya1N0YWNrQXJyYXkm
IG11dGF0b3JNYXJrU3RhY2soKSBjb25zdCB7IHJldHVybiBtX211dGF0b3JTdGFjazsgfQotICAg
IAotICAgIFZNJiB2bSgpOwotICAgIGNvbnN0IFZNJiB2bSgpIGNvbnN0OwotICAgIEhlYXAqIGhl
YXAoKSBjb25zdDsKKyAgICB2b2lkIGFwcGVuZChjb25zdCBDb25zZXJ2YXRpdmVSb290cyYpIGZp
bmFsOwogCi0gICAgdm9pZCBhcHBlbmQoY29uc3QgQ29uc2VydmF0aXZlUm9vdHMmKTsKLSAgICAK
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBUcmFpdHM+IHZvaWQgYXBwZW5kKGNv
bnN0IFdyaXRlQmFycmllckJhc2U8VCwgVHJhaXRzPiYpOwogICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFQsIHR5cGVuYW1lIFRyYWl0cz4gdm9pZCBhcHBlbmRIaWRkZW4oY29uc3QgV3JpdGVCYXJyaWVy
QmFzZTxULCBUcmFpdHM+Jik7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgSXRlcmF0b3I+IHZvaWQg
YXBwZW5kKEl0ZXJhdG9yIGJlZ2luICwgSXRlcmF0b3IgZW5kKTsKLSAgICB2b2lkIGFwcGVuZFZh
bHVlcyhjb25zdCBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24sIFJhd1ZhbHVlVHJhaXRzPFVua25v
d24+PiosIHNpemVfdCBjb3VudCk7Ci0gICAgdm9pZCBhcHBlbmRWYWx1ZXNIaWRkZW4oY29uc3Qg
V3JpdGVCYXJyaWVyQmFzZTxVbmtub3duLCBSYXdWYWx1ZVRyYWl0czxVbmtub3duPj4qLCBzaXpl
X3QgY291bnQpOwotICAgIAorICAgIEFMV0FZU19JTkxJTkUgdm9pZCBhcHBlbmRWYWx1ZXMoY29u
c3QgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duLCBSYXdWYWx1ZVRyYWl0czxVbmtub3duPj4qLCBz
aXplX3QgY291bnQpOworICAgIEFMV0FZU19JTkxJTkUgdm9pZCBhcHBlbmRWYWx1ZXNIaWRkZW4o
Y29uc3QgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duLCBSYXdWYWx1ZVRyYWl0czxVbmtub3duPj4q
LCBzaXplX3QgY291bnQpOworCiAgICAgLy8gVGhlc2UgZG9uJ3QgcmVxdWlyZSB5b3UgdG8gcHJv
dmUgdGhhdCB5b3UgaGF2ZSBhIFdyaXRlQmFycmllcjw+LiBUaGF0IG1ha2VzIHNlbnNlCiAgICAg
Ly8gZm9yOgogICAgIC8vCkBAIC04NywzMiArMTA0LDI3IEBAIHB1YmxpYzoKICAgICAvLwogICAg
IC8vIElmIHlvdSBhcmUgbm90IGEgcm9vdCBhbmQgeW91IGRvbid0IGtub3cgd2hhdCBraW5kIG9m
IGJhcnJpZXIgeW91IGhhdmUsIHRoZW4geW91CiAgICAgLy8gc2hvdWxkbid0IGNhbGwgdGhlc2Ug
bWV0aG9kcy4KLSAgICB2b2lkIGFwcGVuZFVuYmFycmllcmVkKEpTVmFsdWUpOwotICAgIHZvaWQg
YXBwZW5kVW5iYXJyaWVyZWQoSlNWYWx1ZSosIHNpemVfdCk7Ci0gICAgdm9pZCBhcHBlbmRVbmJh
cnJpZXJlZChKU0NlbGwqKTsKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgYXBwZW5kVW5iYXJyaWVy
ZWQoSlNWYWx1ZSk7CisgICAgQUxXQVlTX0lOTElORSB2b2lkIGFwcGVuZFVuYmFycmllcmVkKEpT
VmFsdWUqLCBzaXplX3QpOworICAgIHZvaWQgYXBwZW5kVW5iYXJyaWVyZWQoSlNDZWxsKikgZmlu
YWw7CiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KICAgICB2b2lkIGFwcGVuZChjb25z
dCBXZWFrPFQ+JiB3ZWFrKTsKICAgICAKLSAgICB2b2lkIGFwcGVuZEhpZGRlblVuYmFycmllcmVk
KEpTVmFsdWUpOwotICAgIHZvaWQgYXBwZW5kSGlkZGVuVW5iYXJyaWVyZWQoSlNDZWxsKik7Ci0K
LSAgICBib29sIGFkZE9wYXF1ZVJvb3Qodm9pZCopOyAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIHJv
b3Qgd2FzIG5ldy4KLSAgICAKLSAgICBib29sIGNvbnRhaW5zT3BhcXVlUm9vdCh2b2lkKikgY29u
c3Q7CisgICAgQUxXQVlTX0lOTElORSB2b2lkIGFwcGVuZEhpZGRlblVuYmFycmllcmVkKEpTVmFs
dWUpOworICAgIHZvaWQgYXBwZW5kSGlkZGVuVW5iYXJyaWVyZWQoSlNDZWxsKikgZmluYWw7CiAK
LSAgICBib29sIGlzRW1wdHkoKSB7IHJldHVybiBtX2NvbGxlY3RvclN0YWNrLmlzRW1wdHkoKSAm
JiBtX211dGF0b3JTdGFjay5pc0VtcHR5KCk7IH0KKyAgICBib29sIGlzRmlyc3RWaXNpdCgpIGNv
bnN0IGZpbmFsIHsgcmV0dXJuIG1faXNGaXJzdFZpc2l0OyB9CiAKLSAgICBib29sIGlzRmlyc3RW
aXNpdCgpIGNvbnN0IHsgcmV0dXJuIG1faXNGaXJzdFZpc2l0OyB9CisgICAgYm9vbCBpc01hcmtl
ZChjb25zdCB2b2lkKikgY29uc3QgZmluYWw7CisgICAgYm9vbCBpc01hcmtlZChNYXJrZWRCbG9j
ayYsIEhlYXBDZWxsKikgY29uc3QgZmluYWw7CisgICAgYm9vbCBpc01hcmtlZChQcmVjaXNlQWxs
b2NhdGlvbiYsIEhlYXBDZWxsKikgY29uc3QgZmluYWw7CiAKICAgICB2b2lkIGRpZFN0YXJ0TWFy
a2luZygpOwogICAgIHZvaWQgcmVzZXQoKTsKICAgICB2b2lkIGNsZWFyTWFya1N0YWNrcygpOwog
CiAgICAgc2l6ZV90IGJ5dGVzVmlzaXRlZCgpIGNvbnN0IHsgcmV0dXJuIG1fYnl0ZXNWaXNpdGVk
OyB9Ci0gICAgc2l6ZV90IHZpc2l0Q291bnQoKSBjb25zdCB7IHJldHVybiBtX3Zpc2l0Q291bnQ7
IH0KLSAgICAKLSAgICB2b2lkIGFkZFRvVmlzaXRDb3VudChzaXplX3QgdmFsdWUpIHsgbV92aXNp
dENvdW50ICs9IHZhbHVlOyB9CiAKICAgICB2b2lkIGRvbmF0ZSgpOwogICAgIHZvaWQgZHJhaW4o
TW9ub3RvbmljVGltZSB0aW1lb3V0ID0gTW9ub3RvbmljVGltZTo6aW5maW5pdHkoKSk7CkBAIC0x
MzUsMjQgKzE0NywxOCBAQCBwdWJsaWM6CiAgICAgCiAgICAgLy8gVGhpcyBpbmZvcm1zIHRoZSBH
QyBhYm91dCBhdXhpbGlhcnkgb2Ygc29tZSBzaXplIHRoYXQgd2UgYXJlIGtlZXBpbmcgYWxpdmUu
IElmIHlvdSBkb24ndCBkbwogICAgIC8vIHRoaXMgdGhlbiB0aGUgc3BhY2Ugd2lsbCBiZSBmcmVl
ZCBhdCBlbmQgb2YgR0MuCi0gICAgdm9pZCBtYXJrQXV4aWxpYXJ5KGNvbnN0IHZvaWQqIGJhc2Up
OworICAgIHZvaWQgbWFya0F1eGlsaWFyeShjb25zdCB2b2lkKiBiYXNlKSBmaW5hbDsKIAotICAg
IHZvaWQgcmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKHNpemVfdCk7CisgICAgdm9pZCByZXBvcnRF
eHRyYU1lbW9yeVZpc2l0ZWQoc2l6ZV90KSBmaW5hbDsKICNpZiBFTkFCTEUoUkVTT1VSQ0VfVVNB
R0UpCi0gICAgdm9pZCByZXBvcnRFeHRlcm5hbE1lbW9yeVZpc2l0ZWQoc2l6ZV90KTsKKyAgICB2
b2lkIHJlcG9ydEV4dGVybmFsTWVtb3J5VmlzaXRlZChzaXplX3QpIGZpbmFsOwogI2VuZGlmCiAg
ICAgCi0gICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7Ci0KLSAgICBib29sIGlzQW5h
bHl6aW5nSGVhcCgpIGNvbnN0IHsgcmV0dXJuICEhbV9oZWFwQW5hbHl6ZXI7IH0KLSAgICBIZWFw
QW5hbHl6ZXIqIGhlYXBBbmFseXplcigpIGNvbnN0IHsgcmV0dXJuIG1faGVhcEFuYWx5emVyOyB9
Ci0gICAgCi0gICAgUm9vdE1hcmtSZWFzb24gcm9vdE1hcmtSZWFzb24oKSBjb25zdCB7IHJldHVy
biBtX3Jvb3RNYXJrUmVhc29uOyB9Ci0gICAgdm9pZCBzZXRSb290TWFya1JlYXNvbihSb290TWFy
a1JlYXNvbiByZWFzb24pIHsgbV9yb290TWFya1JlYXNvbiA9IHJlYXNvbjsgfQorICAgIHZvaWQg
ZHVtcChQcmludFN0cmVhbSYpIGNvbnN0IGZpbmFsOwogCiAgICAgSGVhcFZlcnNpb24gbWFya2lu
Z1ZlcnNpb24oKSBjb25zdCB7IHJldHVybiBtX21hcmtpbmdWZXJzaW9uOyB9CiAKLSAgICBib29s
IG11dGF0b3JJc1N0b3BwZWQoKSBjb25zdCB7IHJldHVybiBtX211dGF0b3JJc1N0b3BwZWQ7IH0K
KyAgICBib29sIG11dGF0b3JJc1N0b3BwZWQoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX211dGF0
b3JJc1N0b3BwZWQ7IH0KICAgICAKICAgICBMb2NrJiByaWdodFRvUnVuKCkgeyByZXR1cm4gbV9y
aWdodFRvUnVuOyB9CiAgICAgCkBAIC0xNjQsMjAgKzE3MCwxNyBAQCBwdWJsaWM6CiAgICAgCiAg
ICAgdm9pZCBvcHRpbWl6ZUZvclN0b3BwZWRNdXRhdG9yKCk7CiAgICAgCi0gICAgdm9pZCBkaWRS
YWNlKGNvbnN0IFZpc2l0UmFjZUtleSYpOworICAgIHZvaWQgZGlkUmFjZShjb25zdCBWaXNpdFJh
Y2VLZXkmKSBmaW5hbDsKICAgICB2b2lkIGRpZFJhY2UoSlNDZWxsKiBjZWxsLCBjb25zdCBjaGFy
KiByZWFzb24pIHsgZGlkUmFjZShWaXNpdFJhY2VLZXkoY2VsbCwgcmVhc29uKSk7IH0KICAgICAK
LSAgICB2b2lkIHZpc2l0QXNDb25zdHJhaW50KGNvbnN0IEpTQ2VsbCopOworICAgIHZvaWQgdmlz
aXRBc0NvbnN0cmFpbnQoY29uc3QgSlNDZWxsKikgZmluYWw7CiAgICAgCiAgICAgYm9vbCBkaWRS
ZWFjaFRlcm1pbmF0aW9uKCk7CiAgICAgCi0gICAgdm9pZCBzZXRJZ25vcmVOZXdPcGFxdWVSb290
cyhib29sIHZhbHVlKSB7IG1faWdub3JlTmV3T3BhcXVlUm9vdHMgPSB2YWx1ZTsgfQotCiAgICAg
dm9pZCBkb25hdGVBbGwoKTsKICAgICAKLSAgICBjb25zdCBjaGFyKiBjb2RlTmFtZSgpIGNvbnN0
IHsgcmV0dXJuIG1fY29kZU5hbWUuZGF0YSgpOyB9Ci0gICAgCi0gICAgSlNfRVhQT1JUX1BSSVZB
VEUgdm9pZCBhZGRQYXJhbGxlbENvbnN0cmFpbnRUYXNrKFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQo
U2xvdFZpc2l0b3ImKT4+KTsKKyAgICBOT19SRVRVUk5fRFVFX1RPX0NSQVNIIHZvaWQgYWRkUGFy
YWxsZWxDb25zdHJhaW50VGFzayhSZWZQdHI8U2hhcmVkVGFzazx2b2lkKEFic3RyYWN0U2xvdFZp
c2l0b3ImKT4+KSBmaW5hbDsKKyAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGFkZFBhcmFsbGVs
Q29uc3RyYWludFRhc2soUmVmUHRyPFNoYXJlZFRhc2s8dm9pZChTbG90VmlzaXRvciYpPj4pIGZp
bmFsOwogCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBQYXJhbGxlbE1vZGVFbmFibGVyOwpA
QCAtMjE2LDM5ICsyMTksMjUgQEAgcHJpdmF0ZToKIAogICAgIE1hcmtTdGFja0FycmF5JiBjb3Jy
ZXNwb25kaW5nR2xvYmFsU3RhY2soTWFya1N0YWNrQXJyYXkmKTsKIAotICAgIE1hcmtTdGFja0Fy
cmF5IG1fY29sbGVjdG9yU3RhY2s7Ci0gICAgTWFya1N0YWNrQXJyYXkgbV9tdXRhdG9yU3RhY2s7
Ci0gICAgCi0gICAgc2l6ZV90IG1fYnl0ZXNWaXNpdGVkOwotICAgIHNpemVfdCBtX3Zpc2l0Q291
bnQ7Ci0gICAgc2l6ZV90IG1fbm9uQ2VsbFZpc2l0Q291bnQgeyAwIH07IC8vIFVzZWQgZm9yIGlu
Y3JlbWVudGFsIGRyYWluaW5nLCBpZ25vcmVkIG90aGVyd2lzZS4KLSAgICBDaGVja2VkU2l6ZSBt
X2V4dHJhTWVtb3J5U2l6ZSB7IDAgfTsKLSAgICBib29sIG1faXNJblBhcmFsbGVsTW9kZTsKLSAg
ICBib29sIG1faWdub3JlTmV3T3BhcXVlUm9vdHMgeyBmYWxzZSB9OyAvLyBVc2VmdWwgYXMgYSBk
ZWJ1Z2dpbmcgbW9kZS4KKyAgICBib29sIG1faXNJblBhcmFsbGVsTW9kZSB7IGZhbHNlIH07CiAK
ICAgICBIZWFwVmVyc2lvbiBtX21hcmtpbmdWZXJzaW9uOwotICAgIAotICAgIEhlYXAmIG1faGVh
cDsKKworICAgIHNpemVfdCBtX2J5dGVzVmlzaXRlZCB7IDAgfTsKKyAgICBzaXplX3QgbV9ub25D
ZWxsVmlzaXRDb3VudCB7IDAgfTsgLy8gVXNlZCBmb3IgaW5jcmVtZW50YWwgZHJhaW5pbmcsIGln
bm9yZWQgb3RoZXJ3aXNlLgorICAgIENoZWNrZWRTaXplIG1fZXh0cmFNZW1vcnlTaXplIHsgMCB9
OwogCiAgICAgSGVhcEFuYWx5emVyKiBtX2hlYXBBbmFseXplciB7IG51bGxwdHIgfTsKICAgICBK
U0NlbGwqIG1fY3VycmVudENlbGwgeyBudWxscHRyIH07Ci0gICAgUm9vdE1hcmtSZWFzb24gbV9y
b290TWFya1JlYXNvbiB7IFJvb3RNYXJrUmVhc29uOjpOb25lIH07CiAgICAgYm9vbCBtX2lzRmly
c3RWaXNpdCB7IGZhbHNlIH07CiAgICAgYm9vbCBtX211dGF0b3JJc1N0b3BwZWQgeyBmYWxzZSB9
OwogICAgIGJvb2wgbV9jYW5PcHRpbWl6ZUZvclN0b3BwZWRNdXRhdG9yIHsgZmFsc2UgfTsKICAg
ICBMb2NrIG1fcmlnaHRUb1J1bjsKICAgICAKLSAgICBDU3RyaW5nIG1fY29kZU5hbWU7Ci0gICAg
Ci0gICAgTWFya2luZ0NvbnN0cmFpbnQqIG1fY3VycmVudENvbnN0cmFpbnQgeyBudWxscHRyIH07
Ci0gICAgTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXIqIG1fY3VycmVudFNvbHZlciB7IG51bGxwdHIg
fTsKLSAgICAKICAgICAvLyBQdXQgcGFkZGluZyBoZXJlIHRvIG1pdGlnYXRlIGZhbHNlIHNoYXJp
bmcgYmV0d2VlbiBtdWx0aXBsZSBTbG90VmlzaXRvcnMuCiAgICAgY2hhciBwYWRkaW5nWzY0XTsK
LXB1YmxpYzoKICNpZiBBU1NFUlRfRU5BQkxFRAotICAgIGJvb2wgbV9pc0NoZWNraW5nRm9yRGVm
YXVsdE1hcmtWaW9sYXRpb247Ci0gICAgYm9vbCBtX2lzRHJhaW5pbmc7CisgICAgYm9vbCBtX2lz
Q2hlY2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlvbiB7IGZhbHNlIH07CiAjZW5kaWYKIH07CiAK
QEAgLTI3MSwyMyArMjYwLDQgQEAgcHJpdmF0ZToKICAgICBTbG90VmlzaXRvciYgbV9zdGFjazsK
IH07CiAKLWNsYXNzIFNldFJvb3RNYXJrUmVhc29uU2NvcGUgewotcHVibGljOgotICAgIFNldFJv
b3RNYXJrUmVhc29uU2NvcGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IsIFJvb3RNYXJrUmVhc29uIHJl
YXNvbikKLSAgICAgICAgOiBtX3Zpc2l0b3IodmlzaXRvcikKLSAgICAgICAgLCBtX3ByZXZpb3Vz
UmVhc29uKHZpc2l0b3Iucm9vdE1hcmtSZWFzb24oKSkKLSAgICB7Ci0gICAgICAgIG1fdmlzaXRv
ci5zZXRSb290TWFya1JlYXNvbihyZWFzb24pOwotICAgIH0KLQotICAgIH5TZXRSb290TWFya1Jl
YXNvblNjb3BlKCkKLSAgICB7Ci0gICAgICAgIG1fdmlzaXRvci5zZXRSb290TWFya1JlYXNvbiht
X3ByZXZpb3VzUmVhc29uKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgU2xvdFZpc2l0b3ImIG1f
dmlzaXRvcjsKLSAgICBSb290TWFya1JlYXNvbiBtX3ByZXZpb3VzUmVhc29uOwotfTsKLQogfSAv
LyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90Vmlz
aXRvcklubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9T
bG90VmlzaXRvcklubGluZXMuaAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNSw5
ICsyNSwxMCBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgIkFic3RyYWN0U2xvdFZpc2l0
b3JJbmxpbmVzLmgiCisjaW5jbHVkZSAiTWFya2VkQmxvY2suaCIKKyNpbmNsdWRlICJQcmVjaXNl
QWxsb2NhdGlvbi5oIgogI2luY2x1ZGUgIlNsb3RWaXNpdG9yLmgiCi0jaW5jbHVkZSAiV2Vhay5o
IgotI2luY2x1ZGUgIldlYWtJbmxpbmVzLmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC0xMzQs
MjEgKzEzNSwxOSBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgU2xvdFZpc2l0b3I6OmFwcGVuZFZhCiAg
ICAgICAgIGFwcGVuZEhpZGRlbihiYXJyaWVyc1tpXSk7CiB9CiAKLWlubGluZSBib29sIFNsb3RW
aXNpdG9yOjphZGRPcGFxdWVSb290KHZvaWQqIHB0cikKK0FMV0FZU19JTkxJTkUgYm9vbCBTbG90
VmlzaXRvcjo6aXNNYXJrZWQoY29uc3Qgdm9pZCogcCkgY29uc3QKIHsKLSAgICBpZiAoIXB0cikK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChtX2lnbm9yZU5ld09wYXF1ZVJvb3RzKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFoZWFwKCktPm1fb3BhcXVlUm9vdHMuYWRk
KHB0cikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBtX3Zpc2l0Q291bnQrKzsKLSAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gaGVhcCgpLT5pc01hcmtlZChwKTsKIH0KIAotaW5saW5l
IGJvb2wgU2xvdFZpc2l0b3I6OmNvbnRhaW5zT3BhcXVlUm9vdCh2b2lkKiBwdHIpIGNvbnN0CitB
TFdBWVNfSU5MSU5FIGJvb2wgU2xvdFZpc2l0b3I6OmlzTWFya2VkKE1hcmtlZEJsb2NrJiBjb250
YWluZXIsIEhlYXBDZWxsKiBjZWxsKSBjb25zdAogewotICAgIHJldHVybiBoZWFwKCktPm1fb3Bh
cXVlUm9vdHMuY29udGFpbnMocHRyKTsKKyAgICByZXR1cm4gY29udGFpbmVyLmlzTWFya2VkKG1h
cmtpbmdWZXJzaW9uKCksIGNlbGwpOworfQorCitBTFdBWVNfSU5MSU5FIGJvb2wgU2xvdFZpc2l0
b3I6OmlzTWFya2VkKFByZWNpc2VBbGxvY2F0aW9uJiBjb250YWluZXIsIEhlYXBDZWxsKiBjZWxs
KSBjb25zdAoreworICAgIHJldHVybiBjb250YWluZXIuaXNNYXJrZWQobWFya2luZ1ZlcnNpb24o
KSwgY2VsbCk7CiB9CiAKIGlubGluZSB2b2lkIFNsb3RWaXNpdG9yOjpyZXBvcnRFeHRyYU1lbW9y
eVZpc2l0ZWQoc2l6ZV90IHNpemUpCkBAIC0xNjksMjEgKzE2OCw2IEBAIGlubGluZSB2b2lkIFNs
b3RWaXNpdG9yOjpyZXBvcnRFeHRlcm5hbE0KIH0KICNlbmRpZgogCi1pbmxpbmUgSGVhcCogU2xv
dFZpc2l0b3I6OmhlYXAoKSBjb25zdAotewotICAgIHJldHVybiAmbV9oZWFwOwotfQotCi1pbmxp
bmUgVk0mIFNsb3RWaXNpdG9yOjp2bSgpCi17Ci0gICAgcmV0dXJuIG1faGVhcC52bSgpOwotfQot
Ci1pbmxpbmUgY29uc3QgVk0mIFNsb3RWaXNpdG9yOjp2bSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IG1faGVhcC52bSgpOwotfQotCiB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgogSXRlcmF0aW9uU3Rh
dHVzIFNsb3RWaXNpdG9yOjpmb3JFYWNoTWFya1N0YWNrKGNvbnN0IEZ1bmMmIGZ1bmMpCiB7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvck1hY3Jvcy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yTWFjcm9zLmgJ
KG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3JN
YWNyb3MuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEyMyBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCituYW1lc3BhY2Ug
SlNDIHsKKworY2xhc3MgQWJzdHJhY3RTbG90VmlzaXRvcjsKK2NsYXNzIEpTQ2VsbDsKK2NsYXNz
IFNsb3RWaXNpdG9yOworCisjZGVmaW5lIFVOVVNFRF9NT0RJRklFUl9BUkdVTUVOVCAvKiB1bnVz
ZWQgKi8KKworI2RlZmluZSBERUNMQVJFX1VOVVNFRF9TVFJVQ1RfVE9fVEVSTUlOQVRFX1ZJU0lU
X01BQ1JPX0VYUEFOREVSX0lNUEwoY291bnRlcikgXAorICAgIHN0cnVjdCBVbnVzZWRTbG90Vmlz
aXRvck1hY3JvU3RydWN0U29XZUNhbkhhdmVBU2VtaWNvbG9uIyNjb3VudGVyIHsgfQorCisjZGVm
aW5lIERFQ0xBUkVfVU5VU0VEX1NUUlVDVF9UT19URVJNSU5BVEVfVklTSVRfTUFDUk9fRVhQQU5E
RVIoY291bnRlcikgXAorICAgIERFQ0xBUkVfVU5VU0VEX1NUUlVDVF9UT19URVJNSU5BVEVfVklT
SVRfTUFDUk9fRVhQQU5ERVJfSU1QTChjb3VudGVyKQorCisjZGVmaW5lIERFQ0xBUkVfVU5VU0VE
X1NUUlVDVF9UT19URVJNSU5BVEVfVklTSVRfTUFDUk8gXAorICAgIERFQ0xBUkVfVU5VU0VEX1NU
UlVDVF9UT19URVJNSU5BVEVfVklTSVRfTUFDUk9fRVhQQU5ERVIoX19DT1VOVEVSX18pCisKKy8v
IE1hY3JvcyBmb3IgdmlzaXRBZ2dyZWdhdGUoKS4KKworI2RlZmluZSBERUNMQVJFX1ZJU0lUX0FH
R1JFR0FURV9XSVRIX01PRElGSUVSKHBvc3RNb2RpZmllcikgXAorcHJpdmF0ZTogXAorICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IEFMV0FZU19JTkxJTkUgdm9pZCB2aXNpdEFnZ3JlZ2F0
ZUltcGwoVmlzaXRvciYpIHBvc3RNb2RpZmllcjsgXAorcHVibGljOiBcCisgICAgdm9pZCB2aXNp
dEFnZ3JlZ2F0ZShBYnN0cmFjdFNsb3RWaXNpdG9yJikgcG9zdE1vZGlmaWVyOyBcCisgICAgdm9p
ZCB2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYpIHBvc3RNb2RpZmllcgorCisjZGVmaW5lIERF
Q0xBUkVfVklTSVRfQUdHUkVHQVRFIFwKKyAgICBERUNMQVJFX1ZJU0lUX0FHR1JFR0FURV9XSVRI
X01PRElGSUVSKFVOVVNFRF9NT0RJRklFUl9BUkdVTUVOVCkKKworI2RlZmluZSBERUZJTkVfVklT
SVRfQUdHUkVHQVRFX1dJVEhfTU9ESUZJRVIoY2xhc3NOYW1lLCBwb3N0TW9kaWZpZXIpIFwKKyAg
ICB2b2lkIGNsYXNzTmFtZTo6dmlzaXRBZ2dyZWdhdGUoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlz
aXRvcikgcG9zdE1vZGlmaWVyIHsgdmlzaXRBZ2dyZWdhdGVJbXBsKHZpc2l0b3IpOyB9IFwKKyAg
ICB2b2lkIGNsYXNzTmFtZTo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpIHBv
c3RNb2RpZmllciB7IHZpc2l0QWdncmVnYXRlSW1wbCh2aXNpdG9yKTsgfSBcCisgICAgREVDTEFS
RV9VTlVTRURfU1RSVUNUX1RPX1RFUk1JTkFURV9WSVNJVF9NQUNSTworCisjZGVmaW5lIERFRklO
RV9WSVNJVF9BR0dSRUdBVEUoY2xhc3NOYW1lKSBcCisgICAgREVGSU5FX1ZJU0lUX0FHR1JFR0FU
RV9XSVRIX01PRElGSUVSKGNsYXNzTmFtZSwgVU5VU0VEX01PRElGSUVSX0FSR1VNRU5UKQorCisv
LyBNYWNyb3MgZm9yIHN0YXRpYyB2aXNpdENoaWxkcmVuKCkuCisKKyNkZWZpbmUgREVDTEFSRV9W
SVNJVF9DSElMRFJFTl9XSVRIX01PRElGSUVSKHByZU1vZGlmaWVyKSBcCitwcml2YXRlOiBcCisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gQUxXQVlTX0lOTElORSBzdGF0aWMgdm9pZCB2
aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqLCBWaXNpdG9yJik7IFwKK3B1YmxpYzogXAorICAgIHBy
ZU1vZGlmaWVyIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgQWJzdHJhY3RTbG90
VmlzaXRvciYpOyBcCisgICAgcHJlTW9kaWZpZXIgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihK
U0NlbGwqLCBTbG90VmlzaXRvciYpCisKKyNkZWZpbmUgREVDTEFSRV9WSVNJVF9DSElMRFJFTiBc
CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTl9XSVRIX01PRElGSUVSKFVOVVNFRF9NT0RJRklF
Ul9BUkdVTUVOVCkKKworI2RlZmluZSBERUZJTkVfVklTSVRfQ0hJTERSRU5fV0lUSF9NT0RJRklF
UihwcmVNb2RpZmllciwgY2xhc3NOYW1lKSBcCisgICAgcHJlTW9kaWZpZXIgdm9pZCBjbGFzc05h
bWU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNp
dG9yKSBcCisgICAgeyBcCisgICAgICAgIEFic3RyYWN0U2xvdFZpc2l0b3I6OkNvbnRleHQgY29u
dGV4dCh2aXNpdG9yLCBjZWxsKTsgXAorICAgICAgICB2aXNpdENoaWxkcmVuSW1wbChjZWxsLCB2
aXNpdG9yKTsgXAorICAgIH0gXAorICAgIHByZU1vZGlmaWVyIHZvaWQgY2xhc3NOYW1lOjp2aXNp
dENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsgdmlzaXRDaGls
ZHJlbkltcGwoY2VsbCwgdmlzaXRvcik7IH0gXAorICAgIERFQ0xBUkVfVU5VU0VEX1NUUlVDVF9U
T19URVJNSU5BVEVfVklTSVRfTUFDUk8KKworI2RlZmluZSBERUZJTkVfVklTSVRfQ0hJTERSRU4o
Y2xhc3NOYW1lKSBcCisgICAgREVGSU5FX1ZJU0lUX0NISUxEUkVOX1dJVEhfTU9ESUZJRVIoVU5V
U0VEX01PRElGSUVSX0FSR1VNRU5ULCBjbGFzc05hbWUpCisKKy8vIE1hY3JvcyBmb3Igc3RhdGlj
IHZpc2l0T3V0cHV0Q29uc3RyYWludHMoKS4KKworI2RlZmluZSBERUNMQVJFX1ZJU0lUX09VVFBV
VF9DT05TVFJBSU5UU19XSVRIX01PRElGSUVSKHByZU1vZGlmaWVyKSBcCitwcml2YXRlOiBcCisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gQUxXQVlTX0lOTElORSBzdGF0aWMgdm9pZCB2
aXNpdE91dHB1dENvbnN0cmFpbnRzSW1wbChKU0NlbGwqLCBWaXNpdG9yJik7IFwKK3B1YmxpYzog
XAorICAgIHByZU1vZGlmaWVyIHN0YXRpYyB2b2lkIHZpc2l0T3V0cHV0Q29uc3RyYWludHMoSlND
ZWxsKiwgQWJzdHJhY3RTbG90VmlzaXRvciYpOyBcCisgICAgcHJlTW9kaWZpZXIgc3RhdGljIHZv
aWQgdmlzaXRPdXRwdXRDb25zdHJhaW50cyhKU0NlbGwqLCBTbG90VmlzaXRvciYpCisKKyNkZWZp
bmUgREVDTEFSRV9WSVNJVF9PVVRQVVRfQ09OU1RSQUlOVFMgXAorICAgIERFQ0xBUkVfVklTSVRf
T1VUUFVUX0NPTlNUUkFJTlRTX1dJVEhfTU9ESUZJRVIoVU5VU0VEX01PRElGSUVSX0FSR1VNRU5U
KQorCisjZGVmaW5lIERFRklORV9WSVNJVF9PVVRQVVRfQ09OU1RSQUlOVFNfV0lUSF9NT0RJRklF
UihwcmVNb2RpZmllciwgY2xhc3NOYW1lKSBcCisgICAgcHJlTW9kaWZpZXIgdm9pZCBjbGFzc05h
bWU6OnZpc2l0T3V0cHV0Q29uc3RyYWludHMoSlNDZWxsKiBjZWxsLCBBYnN0cmFjdFNsb3RWaXNp
dG9yJiB2aXNpdG9yKSBcCisgICAgeyBcCisgICAgICAgIEFic3RyYWN0U2xvdFZpc2l0b3I6OkNv
bnRleHQgY29udGV4dCh2aXNpdG9yLCBjZWxsKTsgXAorICAgICAgICB2aXNpdE91dHB1dENvbnN0
cmFpbnRzSW1wbChjZWxsLCB2aXNpdG9yKTsgXAorICAgIH0gXAorICAgIHByZU1vZGlmaWVyIHZv
aWQgY2xhc3NOYW1lOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzKEpTQ2VsbCogY2VsbCwgU2xvdFZp
c2l0b3ImIHZpc2l0b3IpIHsgdmlzaXRPdXRwdXRDb25zdHJhaW50c0ltcGwoY2VsbCwgdmlzaXRv
cik7IH0gXAorICAgIERFQ0xBUkVfVU5VU0VEX1NUUlVDVF9UT19URVJNSU5BVEVfVklTSVRfTUFD
Uk8KKworI2RlZmluZSBERUZJTkVfVklTSVRfT1VUUFVUX0NPTlNUUkFJTlRTKGNsYXNzTmFtZSkg
XAorICAgIERFRklORV9WSVNJVF9PVVRQVVRfQ09OU1RSQUlOVFNfV0lUSF9NT0RJRklFUihVTlVT
RURfTU9ESUZJRVJfQVJHVU1FTlQsIGNsYXNzTmFtZSkKKworLy8gTWFjcm9zIGZvciB2aXNpdEFk
ZGl0aW9uYWxDaGlsZHJlbigpLgorCisjZGVmaW5lIERFRklORV9WSVNJVF9BRERJVElPTkFMX0NI
SUxEUkVOKGNsYXNzTmFtZSkgXAorICAgIHRlbXBsYXRlIHZvaWQgY2xhc3NOYW1lOjp2aXNpdEFk
ZGl0aW9uYWxDaGlsZHJlbihKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKTsgXAorICAgIHRlbXBs
YXRlIHZvaWQgY2xhc3NOYW1lOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNp
dG9yJikKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKK3VzaW5nIEpTQzo6QWJzdHJhY3RTbG90Vmlz
aXRvcjsKK3VzaW5nIEpTQzo6SlNDZWxsOwordXNpbmcgSlNDOjpTbG90VmlzaXRvcjsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N1YnNwYWNlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3Vic3BhY2UuaAkocmV2aXNpb24gMjcyOTAyKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3Vic3BhY2UuaAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAxOCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTM0LDYgKzM0LDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKK2NsYXNzIEFic3RyYWN0U2xvdFZp
c2l0b3I7CiBjbGFzcyBBbGlnbmVkTWVtb3J5QWxsb2NhdG9yOwogY2xhc3MgSGVhcENlbGxUeXBl
OwogCkBAIC04Niw4ICs4Nyw4IEBAIHB1YmxpYzoKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5j
PgogICAgIHZvaWQgZm9yRWFjaE1hcmtlZENlbGwoY29uc3QgRnVuYyYpOwogICAgIAotICAgIHRl
bXBsYXRlPHR5cGVuYW1lIEZ1bmM+Ci0gICAgUmVmPFNoYXJlZFRhc2s8dm9pZChTbG90VmlzaXRv
ciYpPj4gZm9yRWFjaE1hcmtlZENlbGxJblBhcmFsbGVsKGNvbnN0IEZ1bmMmKTsKKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBWaXNpdG9yLCB0eXBlbmFtZSBGdW5jPgorICAgIFJlZjxTaGFyZWRUYXNr
PHZvaWQoVmlzaXRvciYpPj4gZm9yRWFjaE1hcmtlZENlbGxJblBhcmFsbGVsKGNvbnN0IEZ1bmMm
KTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CiAgICAgdm9pZCBmb3JFYWNoTGl2ZUNl
bGwoY29uc3QgRnVuYyYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3Vic3Bh
Y2VJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3Vi
c3BhY2VJbmxpbmVzLmgJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL1N1YnNwYWNlSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNy0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODUsMTAgKzg1LDEw
IEBAIHZvaWQgU3Vic3BhY2U6OmZvckVhY2hNYXJrZWRDZWxsKGNvbnN0IEYKICAgICAgICAgfSk7
CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+Ci1SZWY8U2hhcmVkVGFzazx2b2lkKFNsb3RW
aXNpdG9yJik+PiBTdWJzcGFjZTo6Zm9yRWFjaE1hcmtlZENlbGxJblBhcmFsbGVsKGNvbnN0IEZ1
bmMmIGZ1bmMpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yLCB0eXBlbmFtZSBGdW5jPgorUmVm
PFNoYXJlZFRhc2s8dm9pZChWaXNpdG9yJik+PiBTdWJzcGFjZTo6Zm9yRWFjaE1hcmtlZENlbGxJ
blBhcmFsbGVsKGNvbnN0IEZ1bmMmIGZ1bmMpCiB7Ci0gICAgY2xhc3MgVGFzayBmaW5hbCA6IHB1
YmxpYyBTaGFyZWRUYXNrPHZvaWQoU2xvdFZpc2l0b3ImKT4geworICAgIGNsYXNzIFRhc2sgZmlu
YWwgOiBwdWJsaWMgU2hhcmVkVGFzazx2b2lkKFZpc2l0b3ImKT4gewogICAgIHB1YmxpYzoKICAg
ICAgICAgVGFzayhTdWJzcGFjZSYgc3Vic3BhY2UsIGNvbnN0IEZ1bmMmIGZ1bmMpCiAgICAgICAg
ICAgICA6IG1fc3Vic3BhY2Uoc3Vic3BhY2UpCkBAIC05Nyw3ICs5Nyw3IEBAIFJlZjxTaGFyZWRU
YXNrPHZvaWQoU2xvdFZpc2l0b3ImKT4+IFN1YnMKICAgICAgICAgewogICAgICAgICB9CiAgICAg
ICAgIAotICAgICAgICB2b2lkIHJ1bihTbG90VmlzaXRvciYgdmlzaXRvcikgZmluYWwKKyAgICAg
ICAgdm9pZCBydW4oVmlzaXRvciYgdmlzaXRvcikgZmluYWwKICAgICAgICAgewogICAgICAgICAg
ICAgd2hpbGUgKE1hcmtlZEJsb2NrOjpIYW5kbGUqIGhhbmRsZSA9IG1fYmxvY2tTb3VyY2UtPnJ1
bigpKSB7CiAgICAgICAgICAgICAgICAgaGFuZGxlLT5mb3JFYWNoTWFya2VkQ2VsbCgKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1ZlcmlmaWVyU2xvdFZpc2l0b3IuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1ZlcmlmaWVyU2xvdFZpc2l0b3Iu
Y3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1ZlcmlmaWVy
U2xvdFZpc2l0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzQ2IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlZlcmlmaWVyU2xvdFZpc2l0b3Iu
aCIKKworI2luY2x1ZGUgIkJsb2NrRGlyZWN0b3J5SW5saW5lcy5oIgorI2luY2x1ZGUgIkNvbnNl
cnZhdGl2ZVJvb3RzLmgiCisjaW5jbHVkZSAiR0NTZWdtZW50ZWRBcnJheUlubGluZXMuaCIKKyNp
bmNsdWRlICJIZWFwQ2VsbC5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNsdWRlICJW
TS5oIgorI2luY2x1ZGUgIlZlcmlmaWVyU2xvdFZpc2l0b3JJbmxpbmVzLmgiCisjaW5jbHVkZSA8
d3RmL1N0YWNrVHJhY2UuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK3VzaW5nIE1hcmtlckRhdGEg
PSBWZXJpZmllclNsb3RWaXNpdG9yOjpNYXJrZXJEYXRhOworCitjb25zdGV4cHIgaW50IG1heE1h
cmtpbmdTdGFja0ZyYW1lc1RvQ2FwdHVyZSA9IDEwMDsKKworTWFya2VyRGF0YTo6TWFya2VyRGF0
YShIZWFwQ2VsbCogcGFyZW50LCBzdGQ6OnVuaXF1ZV9wdHI8U3RhY2tUcmFjZT4mJiBzdGFjaykK
KyAgICA6IHBhcmVudChwYXJlbnQpCisgICAgLCBzdGFjayhXVEZNb3ZlKHN0YWNrKSkKK3sKK30K
KworVmVyaWZpZXJTbG90VmlzaXRvcjo6TWFya2VkQmxvY2tEYXRhOjpNYXJrZWRCbG9ja0RhdGEo
TWFya2VkQmxvY2sqIGJsb2NrKQorICAgIDogbV9ibG9jayhibG9jaykKK3sKK30KKwordm9pZCBW
ZXJpZmllclNsb3RWaXNpdG9yOjpNYXJrZWRCbG9ja0RhdGE6OmFkZE1hcmtlckRhdGEodW5zaWdu
ZWQgYXRvbU51bWJlciwgTWFya2VyRGF0YSYmIG1hcmtlcikKK3sKKyAgICBpZiAobV9tYXJrZXJz
LmlzRW1wdHkoKSkKKyAgICAgICAgbV9tYXJrZXJzLmdyb3coTWFya2VkQmxvY2s6OmF0b21zUGVy
QmxvY2spOworICAgIG1fbWFya2Vyc1thdG9tTnVtYmVyXSA9IFdURk1vdmUobWFya2VyKTsKK30K
KworY29uc3QgTWFya2VyRGF0YSogVmVyaWZpZXJTbG90VmlzaXRvcjo6TWFya2VkQmxvY2tEYXRh
OjptYXJrZXJEYXRhKHVuc2lnbmVkIGF0b21OdW1iZXIpIGNvbnN0Cit7CisgICAgYXV0byYgbWFy
a2VyID0gbV9tYXJrZXJzW2F0b21OdW1iZXJdOworICAgIGlmIChtYXJrZXIuc3RhY2spCisgICAg
ICAgIHJldHVybiAmbWFya2VyOworICAgIHJldHVybiBudWxscHRyOworfQorCitWZXJpZmllclNs
b3RWaXNpdG9yOjpQcmVjaXNlQWxsb2NhdGlvbkRhdGE6OlByZWNpc2VBbGxvY2F0aW9uRGF0YShQ
cmVjaXNlQWxsb2NhdGlvbiogYWxsb2NhdGlvbikKKyAgICA6IG1fYWxsb2NhdGlvbihhbGxvY2F0
aW9uKQoreworfQorCitjb25zdCBNYXJrZXJEYXRhKiBWZXJpZmllclNsb3RWaXNpdG9yOjpQcmVj
aXNlQWxsb2NhdGlvbkRhdGE6Om1hcmtlckRhdGEoKSBjb25zdAoreworICAgIGlmIChtX21hcmtl
ci5zdGFjaykKKyAgICAgICAgcmV0dXJuICZtX21hcmtlcjsKKyAgICByZXR1cm4gbnVsbHB0cjsK
K30KKwordm9pZCBWZXJpZmllclNsb3RWaXNpdG9yOjpQcmVjaXNlQWxsb2NhdGlvbkRhdGE6OmFk
ZE1hcmtlckRhdGEoTWFya2VyRGF0YSYmIG1hcmtlcikKK3sKKyAgICBtX21hcmtlciA9IFdURk1v
dmUobWFya2VyKTsKK30KKworVmVyaWZpZXJTbG90VmlzaXRvcjo6VmVyaWZpZXJTbG90VmlzaXRv
cihIZWFwJiBoZWFwKQorICAgIDogQmFzZShoZWFwLCAiVmVyaWZpZXIiLCBtX29wYXF1ZVJvb3RT
dG9yYWdlKQoreworfQorCitWZXJpZmllclNsb3RWaXNpdG9yOjp+VmVyaWZpZXJTbG90VmlzaXRv
cigpCit7CisgICAgaGVhcCgpLT5vYmplY3RTcGFjZSgpLmZvckVhY2hCbG9jaygKKyAgICAgICAg
WyZdIChNYXJrZWRCbG9jazo6SGFuZGxlKiBoYW5kbGUpIHsKKyAgICAgICAgICAgIGhhbmRsZS0+
YmxvY2soKS5zZXRWZXJpZmllck1lbW8obnVsbHB0cik7CisgICAgICAgIH0pOworfQorCit2b2lk
IFZlcmlmaWVyU2xvdFZpc2l0b3I6OmFkZFBhcmFsbGVsQ29uc3RyYWludFRhc2soUmVmUHRyPFNo
YXJlZFRhc2s8dm9pZChBYnN0cmFjdFNsb3RWaXNpdG9yJik+PiB0YXNrKQoreworICAgIG1fY29u
c3RyYWludFRhc2tzLmFwcGVuZChXVEZNb3ZlKHRhc2spKTsKK30KKworTk9fUkVUVVJOX0RVRV9U
T19DUkFTSCB2b2lkIFZlcmlmaWVyU2xvdFZpc2l0b3I6OmFkZFBhcmFsbGVsQ29uc3RyYWludFRh
c2soUmVmUHRyPFNoYXJlZFRhc2s8dm9pZChTbG90VmlzaXRvciYpPj4pCit7CisgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwordm9pZCBWZXJpZmllclNsb3RWaXNpdG9yOjpl
eGVjdXRlQ29uc3RyYWludFRhc2tzKCkKK3sKKyAgICB3aGlsZSAoIW1fY29uc3RyYWludFRhc2tz
LmlzRW1wdHkoKSkKKyAgICAgICAgbV9jb25zdHJhaW50VGFza3MudGFrZUZpcnN0KCktPnJ1bigq
dGhpcyk7Cit9CisKK3ZvaWQgVmVyaWZpZXJTbG90VmlzaXRvcjo6YXBwZW5kKGNvbnN0IENvbnNl
cnZhdGl2ZVJvb3RzJiBjb25zZXJ2YXRpdmVSb290cykKK3sKKyAgICBhdXRvIGFwcGVuZEpTQ2Vs
bE9yQXV4aWxpYXJ5ID0gWyZdIChIZWFwQ2VsbCogaGVhcENlbGwpIHsKKyAgICAgICAgaWYgKCFo
ZWFwQ2VsbCkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBpZiAodGVzdEFuZFNldE1h
cmtlZChoZWFwQ2VsbCkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgc3dpdGNoICho
ZWFwQ2VsbC0+Y2VsbEtpbmQoKSkgeworICAgICAgICBjYXNlIEhlYXBDZWxsOjpKU0NlbGw6Cisg
ICAgICAgIGNhc2UgSGVhcENlbGw6OkpTQ2VsbFdpdGhJbmRleGluZ0hlYWRlcjogeworICAgICAg
ICAgICAgSlNDZWxsKiBqc0NlbGwgPSBzdGF0aWNfY2FzdDxKU0NlbGwqPihoZWFwQ2VsbCk7Cisg
ICAgICAgICAgICBhcHBlbmRUb01hcmtTdGFjayhqc0NlbGwpOworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBIZWFwQ2VsbDo6QXV4aWxpYXJ5OgorICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfTsKKworICAgIEhlYXBDZWxsKiogcm9vdHMg
PSBjb25zZXJ2YXRpdmVSb290cy5yb290cygpOworICAgIHNpemVfdCBzaXplID0gY29uc2VydmF0
aXZlUm9vdHMuc2l6ZSgpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKQor
ICAgICAgICBhcHBlbmRKU0NlbGxPckF1eGlsaWFyeShyb290c1tpXSk7Cit9CisKK3ZvaWQgVmVy
aWZpZXJTbG90VmlzaXRvcjo6YXBwZW5kVG9NYXJrU3RhY2soSlNDZWxsKiBjZWxsKQoreworICAg
IEFTU0VSVCghY2VsbC0+aXNaYXBwZWQoKSk7CisgICAgbV9jb2xsZWN0b3JTdGFjay5hcHBlbmQo
Y2VsbCk7Cit9CisKK3ZvaWQgVmVyaWZpZXJTbG90VmlzaXRvcjo6YXBwZW5kVW5iYXJyaWVyZWQo
SlNDZWxsKiBjZWxsKQoreworICAgIGlmICghY2VsbCkKKyAgICAgICAgcmV0dXJuOworCisgICAg
aWYgKFVOTElLRUxZKGNlbGwtPmlzUHJlY2lzZUFsbG9jYXRpb24oKSkpIHsKKyAgICAgICAgaWYg
KExJS0VMWShpc01hcmtlZChjZWxsLT5wcmVjaXNlQWxsb2NhdGlvbigpLCBjZWxsKSkpCisgICAg
ICAgICAgICByZXR1cm47CisgICAgfSBlbHNlIHsKKyAgICAgICAgTWFya2VkQmxvY2smIGJsb2Nr
ID0gY2VsbC0+bWFya2VkQmxvY2soKTsKKyAgICAgICAgaWYgKExJS0VMWShpc01hcmtlZChibG9j
aywgY2VsbCkpKQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGFwcGVuZFNsb3co
Y2VsbCk7Cit9CisKK3ZvaWQgVmVyaWZpZXJTbG90VmlzaXRvcjo6YXBwZW5kSGlkZGVuVW5iYXJy
aWVyZWQoSlNDZWxsKiBjZWxsKQoreworICAgIGFwcGVuZFVuYmFycmllcmVkKGNlbGwpOworfQor
Cit2b2lkIFZlcmlmaWVyU2xvdFZpc2l0b3I6OmRyYWluKCkKK3sKKyAgICBSRUxFQVNFX0FTU0VS
VChtX211dGF0b3JTdGFjay5pc0VtcHR5KCkpOworCisgICAgTWFya1N0YWNrQXJyYXkmIHN0YWNr
ID0gbV9jb2xsZWN0b3JTdGFjazsKKyAgICBpZiAoc3RhY2suaXNFbXB0eSgpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBzdGFjay5yZWZpbGwoKTsKKyAgICB3aGlsZSAoc3RhY2suY2FuUmVtb3Zl
TGFzdCgpKQorICAgICAgICB2aXNpdENoaWxkcmVuKHN0YWNrLnJlbW92ZUxhc3QoKSk7Cit9CisK
K3ZvaWQgVmVyaWZpZXJTbG90VmlzaXRvcjo6ZHVtcE1hcmtlckRhdGEoSGVhcENlbGwqIGNlbGwp
Cit7CisgICAgaWYgKGNlbGwtPmlzUHJlY2lzZUFsbG9jYXRpb24oKSkKKyAgICAgICAgcmV0dXJu
IGR1bXBNYXJrZXJEYXRhKGNlbGwtPnByZWNpc2VBbGxvY2F0aW9uKCksIGNlbGwpOworICAgIHJl
dHVybiBkdW1wTWFya2VyRGF0YShjZWxsLT5tYXJrZWRCbG9jaygpLCBjZWxsKTsKK30KKwordm9p
ZCBWZXJpZmllclNsb3RWaXNpdG9yOjpkdW1wTWFya2VyRGF0YShQcmVjaXNlQWxsb2NhdGlvbiYg
YWxsb2NhdGlvbiwgSGVhcENlbGwqIGNlbGwpCit7CisgICAgYXV0byBpdGVyYXRvciA9IG1fcHJl
Y2lzZUFsbG9jYXRpb25NYXAuZmluZCgmYWxsb2NhdGlvbik7CisgICAgaWYgKGl0ZXJhdG9yICE9
IG1fcHJlY2lzZUFsbG9jYXRpb25NYXAuZW5kKCkpIHsKKyAgICAgICAgZHVtcE1hcmtlckRhdGEo
Y2VsbCwgaXRlcmF0b3ItPnZhbHVlLT5tYXJrZXJEYXRhKCkpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorICAgIGRhdGFMb2dMbigiQ2VsbCAiLCBSYXdQb2ludGVyKGNlbGwpLCAiIG5vdCBmb3Vu
ZCIpOworfQorCit2b2lkIFZlcmlmaWVyU2xvdFZpc2l0b3I6OmR1bXBNYXJrZXJEYXRhKE1hcmtl
ZEJsb2NrJiBibG9jaywgSGVhcENlbGwqIGNlbGwpCit7CisgICAgYXV0byBpdGVyYXRvciA9IG1f
bWFya2VkQmxvY2tNYXAuZmluZCgmYmxvY2spOworICAgIGlmIChpdGVyYXRvciAhPSBtX21hcmtl
ZEJsb2NrTWFwLmVuZCgpKSB7CisgICAgICAgIHVuc2lnbmVkIGF0b21OdW1iZXIgPSBibG9jay5h
dG9tTnVtYmVyKGNlbGwpOworICAgICAgICBkdW1wTWFya2VyRGF0YShjZWxsLCBpdGVyYXRvci0+
dmFsdWUtPm1hcmtlckRhdGEoYXRvbU51bWJlcikpOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIGRhdGFMb2dMbigiQ2VsbCAiLCBSYXdQb2ludGVyKGNlbGwpLCAiIG5vdCBmb3VuZCIpOwor
fQorCit2b2lkIFZlcmlmaWVyU2xvdFZpc2l0b3I6OmR1bXBNYXJrZXJEYXRhKEhlYXBDZWxsKiBj
ZWxsLCBjb25zdCBNYXJrZXJEYXRhKiBtYXJrZXIpCit7CisgICAgaWYgKCFtYXJrZXIpIHsKKyAg
ICAgICAgZGF0YUxvZ0xuKCJNYXJrZXIgZGF0YSBpcyBub3QgYXZhaWxhYmxlIGZvciBjZWxsICIs
IFJhd1BvaW50ZXIoY2VsbCkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgZGF0YUxv
Z0xuKCJDZWxsICIsIFJhd1BvaW50ZXIoY2VsbCksICIgd2FzIHJlYWNoYWJsZSB2aWEgY2VsbCAi
LCBSYXdQb2ludGVyKG1hcmtlci0+cGFyZW50KSwgIiBhdDoiKTsKKyAgICBtYXJrZXItPnN0YWNr
LT5kdW1wKFdURjo6ZGF0YUZpbGUoKSwgIiAgICAiKTsKK30KKworYm9vbCBWZXJpZmllclNsb3RW
aXNpdG9yOjppc0ZpcnN0VmlzaXQoKSBjb25zdAoreworICAgIC8vIEluIHRoZSByZWd1bGFyIEdD
LCB0aGlzIHJldHVybiB2YWx1ZSBpcyBvbmx5IHVzZWQgdG8gY29udHJvbCB3aGV0aGVyCisgICAg
Ly8gVW5saW5rZWRDb2RlQmxvY2tzIHdpbGwgYmUgYWdlZCAoc2VlIFVubGlua2VkQ29kZUJsb2Nr
Ojp2aXNpdENoaWxkcmVuSW1wbCgpKS4KKyAgICAvLyBGb3IgdGhlIHZlcmlmaWVyIEdDIHBhc3Ms
IHdlIHNob3VsZCBhbHdheXMgcmV0dXJuIGZhbHNlIGJlY2F1c2Ugd2UgZG9uJ3QKKyAgICAvLyB3
YW50IHRvIGRvIHRoZSBhZ2luZyBhY3Rpb24gYWdhaW4uCisgICAgcmV0dXJuIGZhbHNlOworfQor
Citib29sIFZlcmlmaWVyU2xvdFZpc2l0b3I6OmlzTWFya2VkKGNvbnN0IHZvaWQqIHJhd0NlbGwp
IGNvbnN0Cit7CisgICAgSGVhcENlbGwqIGNlbGwgPSBiaXR3aXNlX2Nhc3Q8SGVhcENlbGwqPihy
YXdDZWxsKTsKKyAgICBpZiAoY2VsbC0+aXNQcmVjaXNlQWxsb2NhdGlvbigpKQorICAgICAgICBy
ZXR1cm4gaXNNYXJrZWQoY2VsbC0+cHJlY2lzZUFsbG9jYXRpb24oKSwgY2VsbCk7CisgICAgcmV0
dXJuIGlzTWFya2VkKGNlbGwtPm1hcmtlZEJsb2NrKCksIGNlbGwpOworfQorCitib29sIFZlcmlm
aWVyU2xvdFZpc2l0b3I6OmlzTWFya2VkKFByZWNpc2VBbGxvY2F0aW9uJiBhbGxvY2F0aW9uLCBI
ZWFwQ2VsbCopIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcHJlY2lzZUFsbG9jYXRpb25NYXAuY29u
dGFpbnMoJmFsbG9jYXRpb24pOworfQorCitib29sIFZlcmlmaWVyU2xvdFZpc2l0b3I6OmlzTWFy
a2VkKE1hcmtlZEJsb2NrJiBibG9jaywgSGVhcENlbGwqIGNlbGwpIGNvbnN0Cit7CisgICAgYXV0
byBlbnRyeSA9IG1fbWFya2VkQmxvY2tNYXAuZmluZCgmYmxvY2spOworICAgIGlmIChlbnRyeSA9
PSBtX21hcmtlZEJsb2NrTWFwLmVuZCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBh
dXRvJiBkYXRhID0gZW50cnktPnZhbHVlOworICAgIHVuc2lnbmVkIGF0b21OdW1iZXIgPSBibG9j
ay5hdG9tTnVtYmVyKGNlbGwpOworICAgIHJldHVybiBkYXRhLT5pc01hcmtlZChhdG9tTnVtYmVy
KTsKK30KKwordm9pZCBWZXJpZmllclNsb3RWaXNpdG9yOjptYXJrQXV4aWxpYXJ5KGNvbnN0IHZv
aWQqIGJhc2UpCit7CisgICAgSGVhcENlbGwqIGNlbGwgPSBiaXR3aXNlX2Nhc3Q8SGVhcENlbGwq
PihiYXNlKTsKKworICAgIEFTU0VSVChjZWxsLT5oZWFwKCkgPT0gaGVhcCgpKTsKKyAgICB0ZXN0
QW5kU2V0TWFya2VkKGNlbGwpOworfQorCitib29sIFZlcmlmaWVyU2xvdFZpc2l0b3I6Om11dGF0
b3JJc1N0b3BwZWQoKSBjb25zdAoreworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFZlcmlm
aWVyU2xvdFZpc2l0b3I6OnRlc3RBbmRTZXRNYXJrZWQoY29uc3Qgdm9pZCogcmF3Q2VsbCkKK3sK
KyAgICBIZWFwQ2VsbCogY2VsbCA9IGJpdHdpc2VfY2FzdDxIZWFwQ2VsbCo+KHJhd0NlbGwpOwor
ICAgIGlmIChjZWxsLT5pc1ByZWNpc2VBbGxvY2F0aW9uKCkpCisgICAgICAgIHJldHVybiB0ZXN0
QW5kU2V0TWFya2VkKGNlbGwtPnByZWNpc2VBbGxvY2F0aW9uKCkpOworICAgIHJldHVybiB0ZXN0
QW5kU2V0TWFya2VkKGNlbGwtPm1hcmtlZEJsb2NrKCksIGNlbGwpOworfQorCitib29sIFZlcmlm
aWVyU2xvdFZpc2l0b3I6OnRlc3RBbmRTZXRNYXJrZWQoUHJlY2lzZUFsbG9jYXRpb24mIGFsbG9j
YXRpb24pCit7CisgICAgc3RkOjp1bmlxdWVfcHRyPFByZWNpc2VBbGxvY2F0aW9uRGF0YT4mIGRh
dGEgPSBtX3ByZWNpc2VBbGxvY2F0aW9uTWFwLmFkZCgmYWxsb2NhdGlvbiwgbnVsbHB0cikuaXRl
cmF0b3ItPnZhbHVlOworICAgIGlmICghZGF0YSkgeworICAgICAgICBkYXRhID0gbWFrZVVuaXF1
ZTxQcmVjaXNlQWxsb2NhdGlvbkRhdGE+KCZhbGxvY2F0aW9uKTsKKyAgICAgICAgaWYgKFVOTElL
RUxZKE9wdGlvbnM6OnZlcmJvc2VWZXJpZnlHQygpKSkKKyAgICAgICAgICAgIGRhdGEtPmFkZE1h
cmtlckRhdGEoeyBwYXJlbnRDZWxsKCksIFN0YWNrVHJhY2U6OmNhcHR1cmVTdGFja1RyYWNlKG1h
eE1hcmtpbmdTdGFja0ZyYW1lc1RvQ2FwdHVyZSwgMikgfSk7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgVmVyaWZpZXJTbG90VmlzaXRv
cjo6dGVzdEFuZFNldE1hcmtlZChNYXJrZWRCbG9jayYgYmxvY2ssIEhlYXBDZWxsKiBjZWxsKQor
eworICAgIE1hcmtlZEJsb2NrRGF0YSogZGF0YSA9IGJsb2NrLnZlcmlmaWVyTWVtbzxNYXJrZWRC
bG9ja0RhdGEqPigpOworICAgIGlmIChVTkxJS0VMWSghZGF0YSkpIHsKKyAgICAgICAgc3RkOjp1
bmlxdWVfcHRyPE1hcmtlZEJsb2NrRGF0YT4mIGVudHJ5RGF0YSA9IG1fbWFya2VkQmxvY2tNYXAu
YWRkKCZibG9jaywgbnVsbHB0cikuaXRlcmF0b3ItPnZhbHVlOworICAgICAgICBSRUxFQVNFX0FT
U0VSVCghZW50cnlEYXRhKTsKKyAgICAgICAgZW50cnlEYXRhID0gbWFrZVVuaXF1ZTxNYXJrZWRC
bG9ja0RhdGE+KCZibG9jayk7CisgICAgICAgIGRhdGEgPSBlbnRyeURhdGEuZ2V0KCk7CisgICAg
ICAgIGJsb2NrLnNldFZlcmlmaWVyTWVtbyhkYXRhKTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBh
dG9tTnVtYmVyID0gYmxvY2suYXRvbU51bWJlcihjZWxsKTsKKyAgICBib29sIGFscmVhZHlTZXQg
PSBkYXRhLT50ZXN0QW5kU2V0TWFya2VkKGF0b21OdW1iZXIpOworICAgIGlmICghYWxyZWFkeVNl
dCAmJiBVTkxJS0VMWShPcHRpb25zOjp2ZXJib3NlVmVyaWZ5R0MoKSkpCisgICAgICAgIGRhdGEt
PmFkZE1hcmtlckRhdGEoYXRvbU51bWJlciwgeyBwYXJlbnRDZWxsKCksIFN0YWNrVHJhY2U6OmNh
cHR1cmVTdGFja1RyYWNlKG1heE1hcmtpbmdTdGFja0ZyYW1lc1RvQ2FwdHVyZSwgMikgfSk7Cisg
ICAgcmV0dXJuIGFscmVhZHlTZXQ7Cit9CisKK3ZvaWQgVmVyaWZpZXJTbG90VmlzaXRvcjo6c2V0
TWFya2VkQW5kQXBwZW5kVG9NYXJrU3RhY2soSlNDZWxsKiBjZWxsKQoreworICAgIGlmIChtX3N1
cHByZXNzVmVyaWZpZXIpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAodGVzdEFuZFNldE1hcmtl
ZChjZWxsKSkKKyAgICAgICAgcmV0dXJuOworICAgIGFwcGVuZFRvTWFya1N0YWNrKGNlbGwpOwor
fQorCit2b2lkIFZlcmlmaWVyU2xvdFZpc2l0b3I6OnZpc2l0QXNDb25zdHJhaW50KGNvbnN0IEpT
Q2VsbCogY2VsbCkKK3sKKyAgICB2aXNpdENoaWxkcmVuKGNlbGwpOworfQorCit2b2lkIFZlcmlm
aWVyU2xvdFZpc2l0b3I6OnZpc2l0Q2hpbGRyZW4oY29uc3QgSlNDZWxsKiBjZWxsKQoreworICAg
IFJFTEVBU0VfQVNTRVJUKGlzTWFya2VkKGNlbGwpKTsKKyAgICBzd2l0Y2ggKGNlbGwtPnR5cGUo
KSkgeworICAgIGNhc2UgU3RyaW5nVHlwZToKKyAgICAgICAgSlNTdHJpbmc6OnZpc2l0Q2hpbGRy
ZW4oY29uc3RfY2FzdDxKU0NlbGwqPihjZWxsKSwgKnRoaXMpOworICAgICAgICBicmVhazsKKyAg
ICAgICAgCisgICAgY2FzZSBGaW5hbE9iamVjdFR5cGU6CisgICAgICAgIEpTRmluYWxPYmplY3Q6
OnZpc2l0Q2hpbGRyZW4oY29uc3RfY2FzdDxKU0NlbGwqPihjZWxsKSwgKnRoaXMpOworICAgICAg
ICBicmVhazsKKworICAgIGNhc2UgQXJyYXlUeXBlOgorICAgICAgICBKU0FycmF5Ojp2aXNpdENo
aWxkcmVuKGNvbnN0X2Nhc3Q8SlNDZWxsKj4oY2VsbCksICp0aGlzKTsKKyAgICAgICAgYnJlYWs7
CisgICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIC8vIEZJWE1FOiBUaGlzIGNvdWxkIGJl
IHNvIG11Y2ggYmV0dGVyLgorICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTYyNDYyCisgICAgICAgIGNlbGwtPm1ldGhvZFRhYmxlKHZtKCkpLT52aXNp
dENoaWxkcmVuKGNvbnN0X2Nhc3Q8SlNDZWxsKj4oY2VsbCksICp0aGlzKTsKKyAgICAgICAgYnJl
YWs7CisgICAgfQorfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL1ZlcmlmaWVyU2xvdFZpc2l0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9WZXJpZmllclNsb3RWaXNpdG9yLmgJKG5vbmV4aXN0ZW50KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVmVyaWZpZXJTbG90VmlzaXRvci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMTcyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJBYnN0cmFjdFNsb3RW
aXNpdG9yLmgiCisjaW5jbHVkZSAiSlNDSlNWYWx1ZS5oIgorI2luY2x1ZGUgIk1hcmtlZEJsb2Nr
LmgiCisjaW5jbHVkZSAiVmlzaXRSYWNlS2V5LmgiCisjaW5jbHVkZSAiV2Vhay5oIgorI2luY2x1
ZGUgPG1lbW9yeT4KKyNpbmNsdWRlIDx3dGYvQml0bWFwLmg+CisjaW5jbHVkZSA8d3RmL0RlcXVl
Lmg+CisjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5o
PgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvU2hhcmVkVGFzay5oPgor
CituYW1lc3BhY2UgV1RGIHsKKworY2xhc3MgU3RhY2tUcmFjZTsKKworfSAvLyBuYW1lc3BhY2Ug
V1RGCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBDb25zZXJ2YXRpdmVSb290czsKK2NsYXNz
IEhlYXA7CitjbGFzcyBIZWFwQ2VsbDsKK2NsYXNzIFByZWNpc2VBbGxvY2F0aW9uOworCit1c2lu
ZyBXVEY6OlN0YWNrVHJhY2U7CisKK2NsYXNzIFZlcmlmaWVyU2xvdFZpc2l0b3IgOiBwdWJsaWMg
QWJzdHJhY3RTbG90VmlzaXRvciB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoVmVyaWZpZXJT
bG90VmlzaXRvcik7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CisgICAgdXNpbmcgQmFz
ZSA9IEFic3RyYWN0U2xvdFZpc2l0b3I7CitwdWJsaWM6CisgICAgc3RydWN0IE1hcmtlckRhdGEg
eworICAgICAgICBNYXJrZXJEYXRhKCkgPSBkZWZhdWx0OworICAgICAgICBNYXJrZXJEYXRhKE1h
cmtlckRhdGEmJikgPSBkZWZhdWx0OworICAgICAgICBNYXJrZXJEYXRhKEhlYXBDZWxsKiwgc3Rk
Ojp1bmlxdWVfcHRyPFN0YWNrVHJhY2U+JiYpOworICAgICAgICBNYXJrZXJEYXRhJiBvcGVyYXRv
cj0oTWFya2VyRGF0YSYmKSA9IGRlZmF1bHQ7CisKKyAgICAgICAgSGVhcENlbGwqIHBhcmVudCB7
IG51bGxwdHIgfTsKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFN0YWNrVHJhY2U+IHN0YWNrOwor
ICAgIH07CisKKyAgICBWZXJpZmllclNsb3RWaXNpdG9yKEhlYXAmKTsKKyAgICB+VmVyaWZpZXJT
bG90VmlzaXRvcigpOworCisgICAgdm9pZCBhcHBlbmQoY29uc3QgQ29uc2VydmF0aXZlUm9vdHMm
KSBmaW5hbDsKKyAgICB2b2lkIGFwcGVuZFVuYmFycmllcmVkKEpTQ2VsbCopIGZpbmFsOworICAg
IHZvaWQgYXBwZW5kSGlkZGVuVW5iYXJyaWVyZWQoSlNDZWxsKikgZmluYWw7CisKKyAgICBib29s
IGlzRmlyc3RWaXNpdCgpIGNvbnN0IGZpbmFsOworICAgIGJvb2wgaXNNYXJrZWQoY29uc3Qgdm9p
ZCopIGNvbnN0IGZpbmFsOworICAgIGJvb2wgaXNNYXJrZWQoTWFya2VkQmxvY2smLCBIZWFwQ2Vs
bCopIGNvbnN0IGZpbmFsOworICAgIGJvb2wgaXNNYXJrZWQoUHJlY2lzZUFsbG9jYXRpb24mLCBI
ZWFwQ2VsbCopIGNvbnN0IGZpbmFsOworCisgICAgdm9pZCBtYXJrQXV4aWxpYXJ5KGNvbnN0IHZv
aWQqKSBmaW5hbDsKKworICAgIHZvaWQgcmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKHNpemVfdCkg
ZmluYWwgeyB9CisjaWYgRU5BQkxFKFJFU09VUkNFX1VTQUdFKQorICAgIHZvaWQgcmVwb3J0RXh0
ZXJuYWxNZW1vcnlWaXNpdGVkKHNpemVfdCkgZmluYWwgeyB9CisjZW5kaWYKKworICAgIGJvb2wg
bXV0YXRvcklzU3RvcHBlZCgpIGNvbnN0IGZpbmFsOworCisgICAgdm9pZCBkaWRSYWNlKGNvbnN0
IFZpc2l0UmFjZUtleSYpIGZpbmFsIHsgfQorICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNv
bnN0IGZpbmFsIHsgfQorCisgICAgdm9pZCB2aXNpdEFzQ29uc3RyYWludChjb25zdCBKU0NlbGwq
KSBmaW5hbDsKKworICAgIHZvaWQgZHJhaW4oKTsKKworICAgIHZvaWQgYWRkUGFyYWxsZWxDb25z
dHJhaW50VGFzayhSZWZQdHI8U2hhcmVkVGFzazx2b2lkKEFic3RyYWN0U2xvdFZpc2l0b3ImKT4+
KSBmaW5hbDsKKyAgICBOT19SRVRVUk5fRFVFX1RPX0NSQVNIIHZvaWQgYWRkUGFyYWxsZWxDb25z
dHJhaW50VGFzayhSZWZQdHI8U2hhcmVkVGFzazx2b2lkKFNsb3RWaXNpdG9yJik+PikgZmluYWw7
CisgICAgdm9pZCBleGVjdXRlQ29uc3RyYWludFRhc2tzKCk7CisKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hMaXZlQ2VsbChjb25zdCBGdW5jdG9yJik7CisgICAg
dGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBmb3JFYWNoTGl2ZVByZWNpc2VBbGxvY2F0
aW9uKGNvbnN0IEZ1bmN0b3ImKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiB2b2lk
IGZvckVhY2hMaXZlTWFya2VkQmxvY2tDZWxsKGNvbnN0IEZ1bmN0b3ImKTsKKworICAgIEpTX0VY
UE9SVF9QUklWQVRFIHZvaWQgZHVtcE1hcmtlckRhdGEoSGVhcENlbGwqKTsKKworcHJpdmF0ZToK
KyAgICBjbGFzcyBNYXJrZWRCbG9ja0RhdGEgeworICAgICAgICBXVEZfTUFLRV9GQVNUX0FMTE9D
QVRFRDsKKyAgICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoTWFya2VkQmxvY2tEYXRhKTsKKyAg
ICBwdWJsaWM6CisgICAgICAgIHVzaW5nIEF0b21zQml0bWFwID0gQml0bWFwPE1hcmtlZEJsb2Nr
OjphdG9tc1BlckJsb2NrPjsKKworICAgICAgICBNYXJrZWRCbG9ja0RhdGEoTWFya2VkQmxvY2sq
KTsKKworICAgICAgICBNYXJrZWRCbG9jayogYmxvY2soKSBjb25zdCB7IHJldHVybiBtX2Jsb2Nr
OyB9CisgICAgICAgIGNvbnN0IEF0b21zQml0bWFwJiBhdG9tcygpIGNvbnN0IHsgcmV0dXJuIG1f
YXRvbXM7IH0KKworICAgICAgICBib29sIGlzTWFya2VkKHVuc2lnbmVkIGF0b21OdW1iZXIpIHsg
cmV0dXJuIG1fYXRvbXMuZ2V0KGF0b21OdW1iZXIpOyB9CisgICAgICAgIGJvb2wgdGVzdEFuZFNl
dE1hcmtlZCh1bnNpZ25lZCBhdG9tTnVtYmVyKSB7IHJldHVybiBtX2F0b21zLnRlc3RBbmRTZXQo
YXRvbU51bWJlcik7IH0KKworICAgICAgICB2b2lkIGFkZE1hcmtlckRhdGEodW5zaWduZWQgYXRv
bU51bWJlciwgTWFya2VyRGF0YSYmKTsKKyAgICAgICAgY29uc3QgTWFya2VyRGF0YSogbWFya2Vy
RGF0YSh1bnNpZ25lZCBhdG9tTnVtYmVyKSBjb25zdDsKKworICAgIHByaXZhdGU6CisgICAgICAg
IE1hcmtlZEJsb2NrKiBtX2Jsb2NrIHsgbnVsbHB0ciB9OworICAgICAgICBBdG9tc0JpdG1hcCBt
X2F0b21zOworICAgICAgICBWZWN0b3I8TWFya2VyRGF0YT4gbV9tYXJrZXJzOworICAgIH07CisK
KyAgICBjbGFzcyBQcmVjaXNlQWxsb2NhdGlvbkRhdGEgeworICAgICAgICBXVEZfTUFLRV9GQVNU
X0FMTE9DQVRFRDsKKyAgICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUHJlY2lzZUFsbG9jYXRp
b25EYXRhKTsKKyAgICBwdWJsaWM6CisgICAgICAgIFByZWNpc2VBbGxvY2F0aW9uRGF0YShQcmVj
aXNlQWxsb2NhdGlvbiopOworICAgICAgICBQcmVjaXNlQWxsb2NhdGlvbiogYWxsb2NhdGlvbigp
IGNvbnN0IHsgcmV0dXJuIG1fYWxsb2NhdGlvbjsgfQorCisgICAgICAgIHZvaWQgYWRkTWFya2Vy
RGF0YShNYXJrZXJEYXRhJiYpOworICAgICAgICBjb25zdCBNYXJrZXJEYXRhKiBtYXJrZXJEYXRh
KCkgY29uc3Q7CisKKyAgICBwcml2YXRlOgorICAgICAgICBQcmVjaXNlQWxsb2NhdGlvbiogbV9h
bGxvY2F0aW9uIHsgbnVsbHB0ciB9OworICAgICAgICBNYXJrZXJEYXRhIG1fbWFya2VyOworICAg
IH07CisKKyAgICB1c2luZyBNYXJrZWRCbG9ja01hcCA9IEhhc2hNYXA8TWFya2VkQmxvY2sqLCBz
dGQ6OnVuaXF1ZV9wdHI8TWFya2VkQmxvY2tEYXRhPj47CisgICAgdXNpbmcgUHJlY2lzZUFsbG9j
YXRpb25NYXAgPSBIYXNoTWFwPFByZWNpc2VBbGxvY2F0aW9uKiwgc3RkOjp1bmlxdWVfcHRyPFBy
ZWNpc2VBbGxvY2F0aW9uRGF0YT4+OworCisgICAgdm9pZCBhcHBlbmRUb01hcmtTdGFjayhKU0Nl
bGwqKTsKKyAgICB2b2lkIGFwcGVuZFNsb3coSlNDZWxsKiBjZWxsKSB7IHNldE1hcmtlZEFuZEFw
cGVuZFRvTWFya1N0YWNrKGNlbGwpOyB9CisKKyAgICBib29sIHRlc3RBbmRTZXRNYXJrZWQoY29u
c3Qgdm9pZCogcmF3Q2VsbCk7CisgICAgYm9vbCB0ZXN0QW5kU2V0TWFya2VkKFByZWNpc2VBbGxv
Y2F0aW9uJik7CisgICAgYm9vbCB0ZXN0QW5kU2V0TWFya2VkKE1hcmtlZEJsb2NrJiwgSGVhcENl
bGwqKTsKKworICAgIHZvaWQgc2V0TWFya2VkQW5kQXBwZW5kVG9NYXJrU3RhY2soSlNDZWxsKik7
CisKKyAgICB2b2lkIHZpc2l0Q2hpbGRyZW4oY29uc3QgSlNDZWxsKik7CisKKyAgICB2b2lkIGR1
bXBNYXJrZXJEYXRhKFByZWNpc2VBbGxvY2F0aW9uJiwgSGVhcENlbGwqKTsKKyAgICB2b2lkIGR1
bXBNYXJrZXJEYXRhKE1hcmtlZEJsb2NrJiwgSGVhcENlbGwqKTsKKyAgICB2b2lkIGR1bXBNYXJr
ZXJEYXRhKEhlYXBDZWxsKiwgY29uc3QgTWFya2VyRGF0YSopOworCisgICAgUHJlY2lzZUFsbG9j
YXRpb25NYXAgbV9wcmVjaXNlQWxsb2NhdGlvbk1hcDsKKyAgICBNYXJrZWRCbG9ja01hcCBtX21h
cmtlZEJsb2NrTWFwOworICAgIENvbmN1cnJlbnRQdHJIYXNoU2V0IG1fb3BhcXVlUm9vdFN0b3Jh
Z2U7CisgICAgRGVxdWU8UmVmUHRyPFNoYXJlZFRhc2s8dm9pZChBYnN0cmFjdFNsb3RWaXNpdG9y
Jik+PiwgMzI+IG1fY29uc3RyYWludFRhc2tzOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9WZXJpZmllclNsb3RWaXNpdG9ySW5saW5l
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1ZlcmlmaWVyU2xv
dFZpc2l0b3JJbmxpbmVzLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvVmVyaWZpZXJTbG90VmlzaXRvcklubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDYxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJBYnN0cmFjdFNsb3RWaXNpdG9ySW5saW5lcy5oIgor
I2luY2x1ZGUgIlZlcmlmaWVyU2xvdFZpc2l0b3IuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+Cit2b2lkIFZlcmlmaWVyU2xvdFZpc2l0b3I6OmZvckVh
Y2hMaXZlQ2VsbChjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQoreworICAgIGZvckVhY2hMaXZlUHJl
Y2lzZUFsbG9jYXRpb24oZnVuY3Rvcik7CisgICAgZm9yRWFjaExpdmVNYXJrZWRCbG9ja0NlbGwo
ZnVuY3Rvcik7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+Cit2b2lkIFZlcmlmaWVy
U2xvdFZpc2l0b3I6OmZvckVhY2hMaXZlUHJlY2lzZUFsbG9jYXRpb24oY29uc3QgRnVuY3RvciYg
ZnVuYykKK3sKKyAgICBmb3IgKGF1dG8mIGVudHJ5IDogbV9wcmVjaXNlQWxsb2NhdGlvbk1hcCkg
eworICAgICAgICBQcmVjaXNlQWxsb2NhdGlvbiogYWxsb2NhdGlvbiA9IGVudHJ5LnZhbHVlLT5h
bGxvY2F0aW9uKCk7CisgICAgICAgIGZ1bmMoYWxsb2NhdGlvbi0+Y2VsbCgpKTsKKyAgICB9Cit9
CisKK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+Cit2b2lkIFZlcmlmaWVyU2xvdFZpc2l0b3I6
OmZvckVhY2hMaXZlTWFya2VkQmxvY2tDZWxsKGNvbnN0IEZ1bmN0b3ImIGZ1bmMpCit7CisgICAg
Zm9yIChhdXRvJiBlbnRyeSA6IG1fbWFya2VkQmxvY2tNYXApIHsKKyAgICAgICAgYXV0byYgZGF0
YSA9IGVudHJ5LnZhbHVlOworICAgICAgICBNYXJrZWRCbG9jayogYmxvY2sgPSBkYXRhLT5ibG9j
aygpOworICAgICAgICBjb25zdCBNYXJrZWRCbG9ja0RhdGE6OkF0b21zQml0bWFwJiBhdG9tcyA9
ICBkYXRhLT5hdG9tcygpOworICAgICAgICBmb3IgKGF1dG8gYXRvbU51bWJlciA6IGF0b21zKQor
ICAgICAgICAgICAgZnVuYyhiaXR3aXNlX2Nhc3Q8SGVhcENlbGwqPihibG9jay0+aGFuZGxlKCku
YXRvbUF0KGF0b21OdW1iZXIpKSk7CisgICAgfQorfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Zpc2l0Q291bnRlci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Zpc2l0Q291bnRlci5oCShyZXZpc2lvbiAy
NzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9WaXNpdENvdW50ZXIuaAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0yNSw3ICsyNSw3IEBACiAKICNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSAiU2xv
dFZpc2l0b3IuaCIKKyNpbmNsdWRlICJBYnN0cmFjdFNsb3RWaXNpdG9yLmgiCiAKIG5hbWVzcGFj
ZSBKU0MgewogCkBAIC0zMywxMyArMzMsMTMgQEAgY2xhc3MgVmlzaXRDb3VudGVyIHsKIHB1Ymxp
YzoKICAgICBWaXNpdENvdW50ZXIoKSB7IH0KICAgICAKLSAgICBWaXNpdENvdW50ZXIoU2xvdFZp
c2l0b3ImIHZpc2l0b3IpCisgICAgVmlzaXRDb3VudGVyKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZp
c2l0b3IpCiAgICAgICAgIDogbV92aXNpdG9yKCZ2aXNpdG9yKQogICAgICAgICAsIG1faW5pdGlh
bFZpc2l0Q291bnQodmlzaXRvci52aXNpdENvdW50KCkpCiAgICAgewogICAgIH0KICAgICAKLSAg
ICBTbG90VmlzaXRvciYgdmlzaXRvcigpIGNvbnN0IHsgcmV0dXJuICptX3Zpc2l0b3I7IH0KKyAg
ICBBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKCkgY29uc3QgeyByZXR1cm4gKm1fdmlzaXRv
cjsgfQogICAgIAogICAgIHNpemVfdCB2aXNpdENvdW50KCkgY29uc3QKICAgICB7CkBAIC00Nyw3
ICs0Nyw3IEBAIHB1YmxpYzoKICAgICB9CiAgICAgCiBwcml2YXRlOgotICAgIFNsb3RWaXNpdG9y
KiBtX3Zpc2l0b3IgeyBudWxscHRyIH07CisgICAgQWJzdHJhY3RTbG90VmlzaXRvciogbV92aXNp
dG9yIHsgbnVsbHB0ciB9OwogICAgIHNpemVfdCBtX2luaXRpYWxWaXNpdENvdW50IHsgMCB9Owog
fTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha0Jsb2NrLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrQmxvY2suY3BwCShyZXZp
c2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrQmxvY2suY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
Mi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtOTgsMTIgKzk4LDExIEBAIHZvaWQgV2Vha0Jsb2NrOjpzd2Vl
cCgpCiAgICAgQVNTRVJUKCFtX3N3ZWVwUmVzdWx0LmlzTnVsbCgpKTsKIH0KIAotdGVtcGxhdGU8
dHlwZW5hbWUgQ29udGFpbmVyVHlwZT4KLXZvaWQgV2Vha0Jsb2NrOjpzcGVjaWFsaXplZFZpc2l0
KENvbnRhaW5lclR5cGUmIGNvbnRhaW5lciwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0
ZTx0eXBlbmFtZSBDb250YWluZXJUeXBlLCB0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBXZWFrQmxv
Y2s6OnNwZWNpYWxpemVkVmlzaXQoQ29udGFpbmVyVHlwZSYgY29udGFpbmVyLCBWaXNpdG9yJiB2
aXNpdG9yKQogewotICAgIEhlYXBWZXJzaW9uIG1hcmtpbmdWZXJzaW9uID0gdmlzaXRvci5tYXJr
aW5nVmVyc2lvbigpOwotCiAgICAgc2l6ZV90IGNvdW50ID0gd2Vha0ltcGxDb3VudCgpOworICAg
IEhlYXBBbmFseXplciogaGVhcEFuYWx5emVyID0gdmlzaXRvci52bSgpLmFjdGl2ZUhlYXBBbmFs
eXplcigpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY291bnQ7ICsraSkgewogICAgICAg
ICBXZWFrSW1wbCogd2Vha0ltcGwgPSAmd2Vha0ltcGxzKClbaV07CiAgICAgICAgIGlmICh3ZWFr
SW1wbC0+c3RhdGUoKSAhPSBXZWFrSW1wbDo6TGl2ZSkKQEAgLTExNCwxMiArMTEzLDEyIEBAIHZv
aWQgV2Vha0Jsb2NrOjpzcGVjaWFsaXplZFZpc2l0KENvbnRhaW4KICAgICAgICAgICAgIGNvbnRp
bnVlOwogCiAgICAgICAgIEpTVmFsdWUganNWYWx1ZSA9IHdlYWtJbXBsLT5qc1ZhbHVlKCk7Ci0g
ICAgICAgIGlmIChjb250YWluZXIuaXNNYXJrZWQobWFya2luZ1ZlcnNpb24sIGpzVmFsdWUuYXND
ZWxsKCkpKQorICAgICAgICBpZiAodmlzaXRvci5pc01hcmtlZChjb250YWluZXIsIGpzVmFsdWUu
YXNDZWxsKCkpKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIAogICAgICAgICBjb25z
dCBjaGFyKiByZWFzb24gPSAiIjsKICAgICAgICAgY29uc3QgY2hhcioqIHJlYXNvblB0ciA9IG51
bGxwdHI7Ci0gICAgICAgIGlmIChVTkxJS0VMWSh2aXNpdG9yLmlzQW5hbHl6aW5nSGVhcCgpKSkK
KyAgICAgICAgaWYgKFVOTElLRUxZKGhlYXBBbmFseXplcikpCiAgICAgICAgICAgICByZWFzb25Q
dHIgPSAmcmVhc29uOwogCiAgICAgICAgIGlmICghd2Vha0hhbmRsZU93bmVyLT5pc1JlYWNoYWJs
ZUZyb21PcGFxdWVSb290cyhIYW5kbGU8VW5rbm93bj46OndyYXBTbG90KCZjb25zdF9jYXN0PEpT
VmFsdWUmPihqc1ZhbHVlKSksIHdlYWtJbXBsLT5jb250ZXh0KCksIHZpc2l0b3IsIHJlYXNvblB0
cikpCkBAIC0xMjcsMTQgKzEyNiwxNSBAQCB2b2lkIFdlYWtCbG9jazo6c3BlY2lhbGl6ZWRWaXNp
dChDb250YWluCiAKICAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZChqc1ZhbHVlKTsK
IAotICAgICAgICBpZiAoVU5MSUtFTFkodmlzaXRvci5pc0FuYWx5emluZ0hlYXAoKSkpIHsKKyAg
ICAgICAgaWYgKFVOTElLRUxZKGhlYXBBbmFseXplcikpIHsKICAgICAgICAgICAgIGlmIChqc1Zh
bHVlLmlzQ2VsbCgpKQotICAgICAgICAgICAgICAgIHZpc2l0b3IuaGVhcEFuYWx5emVyKCktPnNl
dE9wYXF1ZVJvb3RSZWFjaGFiaWxpdHlSZWFzb25Gb3JDZWxsKGpzVmFsdWUuYXNDZWxsKCksICpy
ZWFzb25QdHIpOworICAgICAgICAgICAgICAgIGhlYXBBbmFseXplci0+c2V0T3BhcXVlUm9vdFJl
YWNoYWJpbGl0eVJlYXNvbkZvckNlbGwoanNWYWx1ZS5hc0NlbGwoKSwgKnJlYXNvblB0cik7CiAg
ICAgICAgIH0KICAgICB9CiB9CiAKLXZvaWQgV2Vha0Jsb2NrOjp2aXNpdChTbG90VmlzaXRvciYg
dmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+CitBTFdBWVNfSU5MSU5FIHZvaWQg
V2Vha0Jsb2NrOjp2aXNpdEltcGwoVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICAvLyBJZiBhIGJs
b2NrIGlzIGNvbXBsZXRlbHkgZW1wdHksIGEgdmlzaXQgd29uJ3QgaGF2ZSBhbnkgZWZmZWN0Lgog
ICAgIGlmIChpc0VtcHR5KCkpCkBAIC0xNDksNiArMTQ5LDkgQEAgdm9pZCBXZWFrQmxvY2s6OnZp
c2l0KFNsb3RWaXNpdG9yJiB2aXNpdAogICAgICAgICBzcGVjaWFsaXplZFZpc2l0KG1fY29udGFp
bmVyLm1hcmtlZEJsb2NrKCksIHZpc2l0b3IpOwogfQogCit2b2lkIFdlYWtCbG9jazo6dmlzaXQo
QWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikgeyB2aXNpdEltcGwodmlzaXRvcik7IH0KK3Zv
aWQgV2Vha0Jsb2NrOjp2aXNpdChTbG90VmlzaXRvciYgdmlzaXRvcikgeyB2aXNpdEltcGwodmlz
aXRvcik7IH0KKwogdm9pZCBXZWFrQmxvY2s6OnJlYXAoKQogewogICAgIC8vIElmIGEgYmxvY2sg
aXMgY29tcGxldGVseSBlbXB0eSwgYSByZWFwaW5nIHdvbid0IGhhdmUgYW55IGVmZmVjdC4KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtCbG9jay5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtCbG9jay5oCShyZXZpc2lvbiAyNzI5MDIp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrQmxvY2suaAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxOSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTMyLDYgKzMyLDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKK2NsYXNzIEFic3RyYWN0
U2xvdFZpc2l0b3I7CiBjbGFzcyBIZWFwOwogY2xhc3MgU2xvdFZpc2l0b3I7CiAKQEAgLTY1LDcg
KzY2LDggQEAgcHVibGljOgogICAgIHZvaWQgc3dlZXAoKTsKICAgICBTd2VlcFJlc3VsdCB0YWtl
U3dlZXBSZXN1bHQoKTsKIAotICAgIHZvaWQgdmlzaXQoU2xvdFZpc2l0b3ImKTsKKyAgICBKU19F
WFBPUlRfUFJJVkFURSB2b2lkIHZpc2l0KEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKKyAgICBKU19F
WFBPUlRfUFJJVkFURSB2b2lkIHZpc2l0KFNsb3RWaXNpdG9yJik7CiAKICAgICB2b2lkIHJlYXAo
KTsKIApAQCAtNzMsMTAgKzc1LDEyIEBAIHB1YmxpYzoKICAgICB2b2lkIGRpc2Nvbm5lY3RDb250
YWluZXIoKSB7IG1fY29udGFpbmVyID0gQ2VsbENvbnRhaW5lcigpOyB9CiAKIHByaXZhdGU6Cisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCB2aXNpdEltcGwoVmlzaXRvciYpOwor
CiAgICAgc3RhdGljIEZyZWVDZWxsKiBhc0ZyZWVDZWxsKFdlYWtJbXBsKik7CiAgICAgCi0gICAg
dGVtcGxhdGU8dHlwZW5hbWUgQ29udGFpbmVyVHlwZT4KLSAgICB2b2lkIHNwZWNpYWxpemVkVmlz
aXQoQ29udGFpbmVyVHlwZSYsIFNsb3RWaXNpdG9yJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
Q29udGFpbmVyVHlwZSwgdHlwZW5hbWUgVmlzaXRvcj4KKyAgICB2b2lkIHNwZWNpYWxpemVkVmlz
aXQoQ29udGFpbmVyVHlwZSYsIFZpc2l0b3ImKTsKIAogICAgIGV4cGxpY2l0IFdlYWtCbG9jayhD
ZWxsQ29udGFpbmVyKTsKICAgICB2b2lkIGZpbmFsaXplKFdlYWtJbXBsKik7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrSGFuZGxlT3duZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtIYW5kbGVPd25lci5jcHAJKHJldmlzaW9u
IDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtIYW5kbGVPd25lci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
Mi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMzUsNyArMzUsNyBAQCBXZWFrSGFuZGxlT3duZXI6On5XZWFrSGFu
ZGxlT3duZXIoKQogewogfQogCi1ib29sIFdlYWtIYW5kbGVPd25lcjo6aXNSZWFjaGFibGVGcm9t
T3BhcXVlUm9vdHMoSGFuZGxlPFVua25vd24+LCB2b2lkKiwgU2xvdFZpc2l0b3ImLCBjb25zdCBj
aGFyKiopCitib29sIFdlYWtIYW5kbGVPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMo
SGFuZGxlPFVua25vd24+LCB2b2lkKiwgQWJzdHJhY3RTbG90VmlzaXRvciYsIGNvbnN0IGNoYXIq
KikKIHsKICAgICByZXR1cm4gZmFsc2U7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9XZWFrSGFuZGxlT3duZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9XZWFrSGFuZGxlT3duZXIuaAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvV2Vha0hhbmRsZU93bmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjksMTMg
KzI5LDEzIEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1jbGFzcyBTbG90VmlzaXRvcjsKK2NsYXNz
IEFic3RyYWN0U2xvdFZpc2l0b3I7CiAKIGNsYXNzIEpTX0VYUE9SVF9QUklWQVRFIFdlYWtIYW5k
bGVPd25lciB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+V2Vha0hhbmRsZU93bmVyKCk7CiAgICAg
Ly8gcmVhc29uIHdpbGwgb25seSBiZSBub24tbnVsbCB3aGVuIGdlbmVyYXRpbmcgYSBkZWJ1ZyBH
QyBoZWFwIHNuYXBzaG90LgotICAgIHZpcnR1YWwgYm9vbCBpc1JlYWNoYWJsZUZyb21PcGFxdWVS
b290cyhIYW5kbGU8VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIFNsb3RWaXNpdG9yJiwgY2hhciBj
b25zdCoqIHJlYXNvbiA9IG51bGxwdHIpOworICAgIHZpcnR1YWwgYm9vbCBpc1JlYWNoYWJsZUZy
b21PcGFxdWVSb290cyhIYW5kbGU8VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIEFic3RyYWN0U2xv
dFZpc2l0b3ImLCBjaGFyIGNvbnN0KiogcmVhc29uID0gbnVsbHB0cik7CiAgICAgdmlydHVhbCB2
b2lkIGZpbmFsaXplKEhhbmRsZTxVbmtub3duPiwgdm9pZCogY29udGV4dCk7CiB9OwogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrU2V0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrU2V0LmNwcAkocmV2aXNpb24gMjcyOTAyKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha1NldC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEyMyw0ICsxMjMsNyBAQCB2b2lkIFdlYWtTZXQ6OnJlbW92ZUFsbG9jYXRvcihXZWFrQmxv
Y2sqCiAgICAgV2Vha0Jsb2NrOjpkZXN0cm95KCpoZWFwKCksIGJsb2NrKTsKIH0KIAordGVtcGxh
dGUgdm9pZCBXZWFrU2V0Ojp2aXNpdChBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2
b2lkIFdlYWtTZXQ6OnZpc2l0KFNsb3RWaXNpdG9yJik7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha1NldC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtTZXQuaAkocmV2aXNpb24gMjcyOTAyKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha1NldC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE5IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDIxIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtNTEsNyArNTEsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc0VtcHR5KCkgY29uc3Q7CiAgICAg
Ym9vbCBpc1RyaXZpYWxseURlc3RydWN0aWJsZSgpIGNvbnN0OwogCi0gICAgdm9pZCB2aXNpdChT
bG90VmlzaXRvciYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgdmlzaXQo
VmlzaXRvciYpOwogCiAgICAgdm9pZCByZWFwKCk7CiAgICAgdm9pZCBzd2VlcCgpOwpAQCAtMTE0
LDcgKzExNCw4IEBAIGlubGluZSB2b2lkIFdlYWtTZXQ6Omxhc3RDaGFuY2VUb0ZpbmFsaXoKICAg
ICAgICAgYmxvY2stPmxhc3RDaGFuY2VUb0ZpbmFsaXplKCk7CiB9CiAKLWlubGluZSB2b2lkIFdl
YWtTZXQ6OnZpc2l0KFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlz
aXRvcj4KK2lubGluZSB2b2lkIFdlYWtTZXQ6OnZpc2l0KFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAg
ICAgZm9yIChXZWFrQmxvY2sqIGJsb2NrID0gbV9ibG9ja3MuaGVhZCgpOyBibG9jazsgYmxvY2sg
PSBibG9jay0+bmV4dCgpKQogICAgICAgICBibG9jay0+dmlzaXQodmlzaXRvcik7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU2hhZG93Q2hpY2tlbi5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1NoYWRvd0NoaWNrZW4u
Y3BwCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0
ZXIvU2hhZG93Q2hpY2tlbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00NDAsNyArNDQwLDcgQEAg
dm9pZCBTaGFkb3dDaGlja2VuOjp1cGRhdGUoVk0mIHZtLCBDYWxsRgogICAgICAgICBkYXRhTG9n
KCIgICAgQWZ0ZXIgY2xlYW4tdXA6ICIsICp0aGlzLCAiXG4iKTsKIH0KIAotdm9pZCBTaGFkb3dD
aGlja2VuOjp2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBTaGFkb3dD
aGlja2VuOjp2aXNpdENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAg
ICAgZm9yICh1bnNpZ25lZCBpID0gbV9sb2dDdXJzb3IgLSBtX2xvZzsgaS0tOykgewogICAgICAg
ICBKU09iamVjdCogY2FsbGVlID0gbV9sb2dbaV0uY2FsbGVlOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ludGVycHJldGVyL1NoYWRvd0NoaWNrZW4uaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU2hhZG93Q2hpY2tlbi5oCShyZXZpc2lvbiAy
NzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU2hhZG93Q2hpY2tl
bi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTM1LDEzICszNSwxMyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAor
Y2xhc3MgQWJzdHJhY3RTbG90VmlzaXRvcjsKIGNsYXNzIENhbGxGcmFtZTsKIGNsYXNzIENvZGVC
bG9jazsKIGNsYXNzIEpTQXJyYXk7CiBjbGFzcyBKU09iamVjdDsKIGNsYXNzIEpTU2NvcGU7CiBj
bGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7Ci1jbGFzcyBTbG90VmlzaXRvcjsKIGNsYXNzIFZN
OwogCiAvLyBTaGFkb3dDaGlja2VuIGlzIGEgbG9nIHRoYXQgY2FuIGJlIHVzZWQgdG8gcHJvZHVj
ZSBhIHNoYWRvdyBzdGFjayBvZiBDSElDS0VOLXN0eWxlIHN0YWNrIGZyYW1lcy4KQEAgLTE5Niw3
ICsxOTYsNyBAQCBwdWJsaWM6CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KICAgICB2
b2lkIGl0ZXJhdGUoVk0mLCBDYWxsRnJhbWUqLCBjb25zdCBGdW5jdG9yJik7CiAgICAgCi0gICAg
dm9pZCB2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CisgICAgdm9pZCB2aXNpdENoaWxkcmVu
KEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKICAgICB2b2lkIHJlc2V0KCk7CiAgICAgCiAgICAgLy8g
SklUIHN1cHBvcnQuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0dDQXdhcmVKSVRT
dHViUm91dGluZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9H
Q0F3YXJlSklUU3R1YlJvdXRpbmUuY3BwCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0dDQXdhcmVKSVRTdHViUm91dGluZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTggQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC03MywxMCArNzMsNiBAQCB2b2lkIEdDQXdhcmVKSVRTdHViUm91dGluZTo6ZGVsZXRlRnJv
bUdDCiAgICAgZGVsZXRlIHRoaXM7CiB9CiAKLXZvaWQgR0NBd2FyZUpJVFN0dWJSb3V0aW5lOjpt
YXJrUmVxdWlyZWRPYmplY3RzSW50ZXJuYWwoU2xvdFZpc2l0b3ImKQotewotfQotCiBNYXJraW5n
R0NBd2FyZUpJVFN0dWJSb3V0aW5lOjpNYXJraW5nR0NBd2FyZUpJVFN0dWJSb3V0aW5lKAogICAg
IGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRTdHViUm91dGluZVB0clRhZz4mIGNvZGUs
IFZNJiB2bSwgY29uc3QgSlNDZWxsKiBvd25lciwKICAgICBjb25zdCBWZWN0b3I8SlNDZWxsKj4m
IGNlbGxzLCBCYWc8Q2FsbExpbmtJbmZvPiYmIGNhbGxMaW5rSW5mb3MpCkBAIC05MiwxMiArODgs
MjEgQEAgTWFya2luZ0dDQXdhcmVKSVRTdHViUm91dGluZTo6fk1hcmtpbmdHQwogewogfQogCi12
b2lkIE1hcmtpbmdHQ0F3YXJlSklUU3R1YlJvdXRpbmU6Om1hcmtSZXF1aXJlZE9iamVjdHNJbnRl
cm5hbChTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+CitB
TFdBWVNfSU5MSU5FIHZvaWQgTWFya2luZ0dDQXdhcmVKSVRTdHViUm91dGluZTo6bWFya1JlcXVp
cmVkT2JqZWN0c0ludGVybmFsSW1wbChWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGZvciAoYXV0
byYgZW50cnkgOiBtX2NlbGxzKQogICAgICAgICB2aXNpdG9yLmFwcGVuZChlbnRyeSk7CiB9CiAK
K3ZvaWQgTWFya2luZ0dDQXdhcmVKSVRTdHViUm91dGluZTo6bWFya1JlcXVpcmVkT2JqZWN0c0lu
dGVybmFsKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgbWFya1JlcXVpcmVk
T2JqZWN0c0ludGVybmFsSW1wbCh2aXNpdG9yKTsKK30KK3ZvaWQgTWFya2luZ0dDQXdhcmVKSVRT
dHViUm91dGluZTo6bWFya1JlcXVpcmVkT2JqZWN0c0ludGVybmFsKFNsb3RWaXNpdG9yJiB2aXNp
dG9yKQoreworICAgIG1hcmtSZXF1aXJlZE9iamVjdHNJbnRlcm5hbEltcGwodmlzaXRvcik7Cit9
CiAKIEdDQXdhcmVKSVRTdHViUm91dGluZVdpdGhFeGNlcHRpb25IYW5kbGVyOjpHQ0F3YXJlSklU
U3R1YlJvdXRpbmVXaXRoRXhjZXB0aW9uSGFuZGxlcigKICAgICBjb25zdCBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY8SklUU3R1YlJvdXRpbmVQdHJUYWc+JiBjb2RlLCBWTSYgdm0sICBjb25zdCBKU0Nl
bGwqIG93bmVyLCBjb25zdCBWZWN0b3I8SlNDZWxsKj4mIGNlbGxzLCBCYWc8Q2FsbExpbmtJbmZv
PiYmIGNhbGxMaW5rSW5mb3MsCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0dDQXdh
cmVKSVRTdHViUm91dGluZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvR0NBd2FyZUpJVFN0dWJSb3V0aW5lLmgJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvR0NBd2FyZUpJVFN0dWJSb3V0aW5lLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTggQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC02MCw4ICs2MCw5IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IEdDQXdhcmVKSVRTdHViUm91dGluZShjb2RlLCB2bSkpOwogICAgIH0KLSAgICAKLSAg
ICB2b2lkIG1hcmtSZXF1aXJlZE9iamVjdHMoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgorICAgIHZvaWQgbWFya1JlcXVpcmVkT2JqZWN0cyhW
aXNpdG9yJiB2aXNpdG9yKQogICAgIHsKICAgICAgICAgbWFya1JlcXVpcmVkT2JqZWN0c0ludGVy
bmFsKHZpc2l0b3IpOwogICAgIH0KQEAgLTcxLDcgKzcyLDggQEAgcHVibGljOgogcHJvdGVjdGVk
OgogICAgIHZvaWQgb2JzZXJ2ZVplcm9SZWZDb3VudCgpIG92ZXJyaWRlOwogICAgIAotICAgIHZp
cnR1YWwgdm9pZCBtYXJrUmVxdWlyZWRPYmplY3RzSW50ZXJuYWwoU2xvdFZpc2l0b3ImKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgbWFya1JlcXVpcmVkT2JqZWN0c0ludGVybmFsKEFic3RyYWN0U2xvdFZp
c2l0b3ImKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgbWFya1JlcXVpcmVkT2JqZWN0c0ludGVybmFs
KFNsb3RWaXNpdG9yJikgeyB9CiAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIEpJVFN0dWJS
b3V0aW5lU2V0OwpAQCAtODksNyArOTEsOSBAQCBwdWJsaWM6CiAgICAgfk1hcmtpbmdHQ0F3YXJl
SklUU3R1YlJvdXRpbmUoKSBvdmVycmlkZTsKICAgICAKIHByb3RlY3RlZDoKLSAgICB2b2lkIG1h
cmtSZXF1aXJlZE9iamVjdHNJbnRlcm5hbChTbG90VmlzaXRvciYpIG92ZXJyaWRlOworICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgbWFya1JlcXVpcmVkT2JqZWN0c0ludGVybmFs
SW1wbChWaXNpdG9yJik7CisgICAgdm9pZCBtYXJrUmVxdWlyZWRPYmplY3RzSW50ZXJuYWwoQWJz
dHJhY3RTbG90VmlzaXRvciYpIGZpbmFsOworICAgIHZvaWQgbWFya1JlcXVpcmVkT2JqZWN0c0lu
dGVybmFsKFNsb3RWaXNpdG9yJikgZmluYWw7CiAKIHByaXZhdGU6CiAgICAgVmVjdG9yPFdyaXRl
QmFycmllcjxKU0NlbGw+PiBtX2NlbGxzOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRXb3JrbGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRXb3JrbGlzdC5jcHAJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUV29ya2xpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9Qb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Qb2x5bW9ycGhpY0NhbGxTdHViUm91dGlu
ZS5jcHAJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUG9s
eW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTM1LDEyICsx
MzUsMjIgQEAgYm9vbCBQb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZTo6dmlzaXRXZQogICAgIHJl
dHVybiBpc1N0aWxsTGl2ZTsKIH0KIAotdm9pZCBQb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZTo6
bWFya1JlcXVpcmVkT2JqZWN0c0ludGVybmFsKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxh
dGU8dHlwZW5hbWUgVmlzaXRvcj4KK0FMV0FZU19JTkxJTkUgdm9pZCBQb2x5bW9ycGhpY0NhbGxT
dHViUm91dGluZTo6bWFya1JlcXVpcmVkT2JqZWN0c0ludGVybmFsSW1wbChWaXNpdG9yJiB2aXNp
dG9yKQogewogICAgIGZvciAoYXV0byYgdmFyaWFudCA6IG1fdmFyaWFudHMpCiAgICAgICAgIHZp
c2l0b3IuYXBwZW5kKHZhcmlhbnQpOwogfQogCit2b2lkIFBvbHltb3JwaGljQ2FsbFN0dWJSb3V0
aW5lOjptYXJrUmVxdWlyZWRPYmplY3RzSW50ZXJuYWwoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlz
aXRvcikKK3sKKyAgICBtYXJrUmVxdWlyZWRPYmplY3RzSW50ZXJuYWxJbXBsKHZpc2l0b3IpOwor
fQordm9pZCBQb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZTo6bWFya1JlcXVpcmVkT2JqZWN0c0lu
dGVybmFsKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIG1hcmtSZXF1aXJlZE9iamVjdHNJ
bnRlcm5hbEltcGwodmlzaXRvcik7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYg
Ly8gRU5BQkxFKEpJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUG9seW1vcnBo
aWNDYWxsU3R1YlJvdXRpbmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L1BvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lLmgJKHJldmlzaW9uIDI3MjkwMikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUuaAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAx
OCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUt
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTEwNSw2ICsxMDUsOCBAQCBwdWJsaWM6CiAgICAgYm9vbCB2aXNpdFdl
YWsoVk0mKSBmaW5hbDsKIAogcHJpdmF0ZToKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
PiB2b2lkIG1hcmtSZXF1aXJlZE9iamVjdHNJbnRlcm5hbEltcGwoVmlzaXRvciYpOworICAgIHZv
aWQgbWFya1JlcXVpcmVkT2JqZWN0c0ludGVybmFsKEFic3RyYWN0U2xvdFZpc2l0b3ImKSBmaW5h
bDsKICAgICB2b2lkIG1hcmtSZXF1aXJlZE9iamVjdHNJbnRlcm5hbChTbG90VmlzaXRvciYpIGZp
bmFsOwogCiAgICAgVmVjdG9yPFdyaXRlQmFycmllcjxKU0NlbGw+LCAyPiBtX3ZhcmlhbnRzOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQWJzdHJhY3RNb2R1bGVSZWNvcmQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Fic3RyYWN0
TW9kdWxlUmVjb3JkLmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQWJzdHJhY3RNb2R1bGVSZWNvcmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE5IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
NjAsNyArNjAsOCBAQCB2b2lkIEFic3RyYWN0TW9kdWxlUmVjb3JkOjpmaW5pc2hDcmVhdGlvCiAg
ICAgcHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiZGVwZW5kZW5jaWVz
TWFwIl9zKSwgbV9kZXBlbmRlbmNpZXNNYXAuZ2V0KCkpOwogfQogCi12b2lkIEFic3RyYWN0TW9k
dWxlUmVjb3JkOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0
b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBBYnN0cmFjdE1vZHVsZVJlY29y
ZDo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewog
ICAgIEFic3RyYWN0TW9kdWxlUmVjb3JkKiB0aGlzT2JqZWN0ID0ganNDYXN0PEFic3RyYWN0TW9k
dWxlUmVjb3JkKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2Jq
ZWN0LCBpbmZvKCkpOwpAQCAtNzAsNiArNzEsOCBAQCB2b2lkIEFic3RyYWN0TW9kdWxlUmVjb3Jk
Ojp2aXNpdENoaWxkcmVuCiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9kZXBlbmRl
bmNpZXNNYXApOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oQWJzdHJhY3RNb2R1bGVSZWNv
cmQpOworCiB2b2lkIEFic3RyYWN0TW9kdWxlUmVjb3JkOjphcHBlbmRSZXF1ZXN0ZWRNb2R1bGUo
Y29uc3QgSWRlbnRpZmllciYgbW9kdWxlTmFtZSkKIHsKICAgICBtX3JlcXVlc3RlZE1vZHVsZXMu
YWRkKG1vZHVsZU5hbWUuaW1wbCgpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0Fic3RyYWN0TW9kdWxlUmVjb3JkLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQWJzdHJhY3RNb2R1bGVSZWNvcmQuaAkocmV2aXNpb24gMjcyOTAyKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQWJzdHJhY3RNb2R1bGVSZWNvcmQuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIw
MjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0xMzYsNyArMTM2LDcgQEAgcHJvdGVjdGVkOgogICAgIEFic3RyYWN0TW9k
dWxlUmVjb3JkKFZNJiwgU3RydWN0dXJlKiwgY29uc3QgSWRlbnRpZmllciYpOwogICAgIHZvaWQg
ZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxPYmplY3QqLCBWTSYpOwogCi0gICAgc3RhdGljIHZvaWQg
dmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRf
Q0hJTERSRU47CiAKICAgICB2b2lkIHNldE1vZHVsZUVudmlyb25tZW50KEpTR2xvYmFsT2JqZWN0
KiwgSlNNb2R1bGVFbnZpcm9ubWVudCopOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9BcmdMaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9BcmdMaXN0LmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQXJnTGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogIENvcHlyaWdodCAoQykgMjAwMy0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtNTEsNyArNTEsOCBAQCB2b2lk
IEFyZ0xpc3Q6OmdldFNsaWNlKGludCBzdGFydEluZGV4LCBBCiAgICAgcmVzdWx0Lm1fYXJnQ291
bnQgPSAgbV9hcmdDb3VudCAtIHN0YXJ0SW5kZXg7CiB9CiAKLXZvaWQgTWFya2VkQXJndW1lbnRC
dWZmZXI6Om1hcmtMaXN0cyhTbG90VmlzaXRvciYgdmlzaXRvciwgTGlzdFNldCYgbWFya1NldCkK
K3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIE1hcmtlZEFyZ3VtZW50QnVmZmVyOjpt
YXJrTGlzdHMoVmlzaXRvciYgdmlzaXRvciwgTGlzdFNldCYgbWFya1NldCkKIHsKICAgICBMaXN0
U2V0OjppdGVyYXRvciBlbmQgPSBtYXJrU2V0LmVuZCgpOwogICAgIGZvciAoTGlzdFNldDo6aXRl
cmF0b3IgaXQgPSBtYXJrU2V0LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewpAQCAtNjEsNiAr
NjIsOSBAQCB2b2lkIE1hcmtlZEFyZ3VtZW50QnVmZmVyOjptYXJrTGlzdHMoU2xvCiAgICAgfQog
fQogCit0ZW1wbGF0ZSB2b2lkIE1hcmtlZEFyZ3VtZW50QnVmZmVyOjptYXJrTGlzdHMoQWJzdHJh
Y3RTbG90VmlzaXRvciYsIExpc3RTZXQmKTsKK3RlbXBsYXRlIHZvaWQgTWFya2VkQXJndW1lbnRC
dWZmZXI6Om1hcmtMaXN0cyhTbG90VmlzaXRvciYsIExpc3RTZXQmKTsKKwogdm9pZCBNYXJrZWRB
cmd1bWVudEJ1ZmZlcjo6c2xvd0Vuc3VyZUNhcGFjaXR5KHNpemVfdCByZXF1ZXN0ZWRDYXBhY2l0
eSkKIHsKICAgICBzZXROZWVkc092ZXJmbG93Q2hlY2soKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0FyZ0xpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9BcmdMaXN0LmgJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0FyZ0xpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYg
QEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDEgSGFycmkgUG9ydGVuIChwb3J0ZW5A
a2RlLm9yZykKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTExOCw3ICsxMTgsNyBA
QCBwdWJsaWM6CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogICAgICAgICAKLSAgICBz
dGF0aWMgdm9pZCBtYXJrTGlzdHMoU2xvdFZpc2l0b3ImLCBMaXN0U2V0Jik7CisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgVmlzaXRvcj4gc3RhdGljIHZvaWQgbWFya0xpc3RzKFZpc2l0b3ImLCBMaXN0
U2V0Jik7CiAKICAgICB2b2lkIGVuc3VyZUNhcGFjaXR5KHNpemVfdCByZXF1ZXN0ZWRDYXBhY2l0
eSkKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWFibGVJ
ZGVudGlmaWVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Q2FjaGVhYmxlSWRlbnRpZmllci5oCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9DYWNoZWFibGVJZGVudGlmaWVyLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMC0yMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzks
MTAgKzM5LDEwIEBAIHVzaW5nIFdURjo6VW5pcXVlZFN0cmluZ0ltcGw7CiAKIG5hbWVzcGFjZSBK
U0MgewogCitjbGFzcyBBYnN0cmFjdFNsb3RWaXNpdG9yOwogY2xhc3MgQ29kZUJsb2NrOwogY2xh
c3MgSWRlbnRpZmllcjsKIGNsYXNzIEpTQ2VsbDsKLWNsYXNzIFNsb3RWaXNpdG9yOwogCiBjbGFz
cyBDYWNoZWFibGVJZGVudGlmaWVyIHsKIHB1YmxpYzoKQEAgLTg3LDcgKzg3LDcgQEAgcHVibGlj
OgogCiAgICAgdWludHB0cl90IHJhd0JpdHMoKSBjb25zdCB7IHJldHVybiBtX2JpdHM7IH0KIAot
ICAgIGlubGluZSB2b2lkIHZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJikgY29uc3Q7CisgICAg
dGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gaW5saW5lIHZvaWQgdmlzaXRBZ2dyZWdhdGUoVmlz
aXRvciYpIGNvbnN0OwogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBkdW1wKFByaW50U3Ry
ZWFtJikgY29uc3Q7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hl
YWJsZUlkZW50aWZpZXJJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQ2FjaGVhYmxlSWRlbnRpZmllcklubGluZXMuaAkocmV2aXNpb24gMjcyOTAy
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVhYmxlSWRlbnRpZmllcklu
bGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDIwLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0xMzcsNyArMTM3LDggQEAgaW5saW5lIHZvaWQgQ2FjaGVh
YmxlSWRlbnRpZmllcjo6c2V0VWlkQgogICAgIG1fYml0cyA9IGJpdHdpc2VfY2FzdDx1aW50cHRy
X3Q+KHVpZCkgfCBzX3VpZFRhZzsKIH0KIAotaW5saW5lIHZvaWQgQ2FjaGVhYmxlSWRlbnRpZmll
cjo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0Cit0ZW1wbGF0ZTx0
eXBlbmFtZSBWaXNpdG9yPgoraW5saW5lIHZvaWQgQ2FjaGVhYmxlSWRlbnRpZmllcjo6dmlzaXRB
Z2dyZWdhdGUoVmlzaXRvciYgdmlzaXRvcikgY29uc3QKIHsKICAgICBpZiAobV9iaXRzICYmIGlz
Q2VsbCgpKQogICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKGNlbGwoKSk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DbGFzc0luZm8uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DbGFzc0luZm8uaAkocmV2aXNpb24gMjcy
OTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xhc3NJbmZvLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNyArMSw3IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAx
IEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCiAgKiAgQ29weXJpZ2h0IChDKSAyMDAxIFBl
dGVyIEtlbGx5IChwbWtAcG9zdC5jb20pCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMTkgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwMy0yMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBA
IC00NCw5ICs0NCw2IEBAIHN0cnVjdCBNZXRob2RUYWJsZSB7CiAgICAgdXNpbmcgRGVzdHJveUZ1
bmN0aW9uUHRyID0gdm9pZCAoKikoSlNDZWxsKik7CiAgICAgRGVzdHJveUZ1bmN0aW9uUHRyIE1F
VEhPRF9UQUJMRV9FTlRSWShkZXN0cm95KTsKIAotICAgIHVzaW5nIFZpc2l0Q2hpbGRyZW5GdW5j
dGlvblB0ciA9IHZvaWQgKCopKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7Ci0gICAgVmlzaXRDaGls
ZHJlbkZ1bmN0aW9uUHRyIE1FVEhPRF9UQUJMRV9FTlRSWSh2aXNpdENoaWxkcmVuKTsKLQogICAg
IHVzaW5nIEdldENhbGxEYXRhRnVuY3Rpb25QdHIgPSBDYWxsRGF0YSAoKikoSlNDZWxsKik7CiAg
ICAgR2V0Q2FsbERhdGFGdW5jdGlvblB0ciBNRVRIT0RfVEFCTEVfRU5UUlkoZ2V0Q2FsbERhdGEp
OwogCkBAIC0xMjAsOCArMTE3LDIzIEBAIHN0cnVjdCBNZXRob2RUYWJsZSB7CiAgICAgdXNpbmcg
RXN0aW1hdGVkU2l6ZUZ1bmN0aW9uUHRyID0gc2l6ZV90ICgqKShKU0NlbGwqLCBWTSYpOwogICAg
IEVzdGltYXRlZFNpemVGdW5jdGlvblB0ciBNRVRIT0RfVEFCTEVfRU5UUlkoZXN0aW1hdGVkU2l6
ZSk7CiAKKyAgICB1c2luZyBWaXNpdENoaWxkcmVuRnVuY3Rpb25QdHIgPSB2b2lkICgqKShKU0Nl
bGwqLCBTbG90VmlzaXRvciYpOworICAgIFZpc2l0Q2hpbGRyZW5GdW5jdGlvblB0ciBNRVRIT0Rf
VEFCTEVfRU5UUlkodmlzaXRDaGlsZHJlbldpdGhTbG90VmlzaXRvcik7CisKKyAgICB1c2luZyBW
aXNpdENoaWxkcmVuV2l0aEFic3RyYWN0U2xvdFZpc2l0b3JQdHIgPSB2b2lkICgqKShKU0NlbGwq
LCBBYnN0cmFjdFNsb3RWaXNpdG9yJik7CisgICAgVmlzaXRDaGlsZHJlbldpdGhBYnN0cmFjdFNs
b3RWaXNpdG9yUHRyIE1FVEhPRF9UQUJMRV9FTlRSWSh2aXNpdENoaWxkcmVuV2l0aEFic3RyYWN0
U2xvdFZpc2l0b3IpOworCisgICAgQUxXQVlTX0lOTElORSB2b2lkIHZpc2l0Q2hpbGRyZW4oSlND
ZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikgY29uc3QgeyB2aXNpdENoaWxkcmVuV2l0
aFNsb3RWaXNpdG9yKGNlbGwsIHZpc2l0b3IpOyB9CisgICAgQUxXQVlTX0lOTElORSB2b2lkIHZp
c2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBj
b25zdCB7IHZpc2l0Q2hpbGRyZW5XaXRoQWJzdHJhY3RTbG90VmlzaXRvcihjZWxsLCB2aXNpdG9y
KTsgfQorCiAgICAgdXNpbmcgVmlzaXRPdXRwdXRDb25zdHJhaW50c1B0ciA9IHZvaWQgKCopKEpT
Q2VsbCosIFNsb3RWaXNpdG9yJik7Ci0gICAgVmlzaXRPdXRwdXRDb25zdHJhaW50c1B0ciBNRVRI
T0RfVEFCTEVfRU5UUlkodmlzaXRPdXRwdXRDb25zdHJhaW50cyk7CisgICAgVmlzaXRPdXRwdXRD
b25zdHJhaW50c1B0ciBNRVRIT0RfVEFCTEVfRU5UUlkodmlzaXRPdXRwdXRDb25zdHJhaW50c1dp
dGhTbG90VmlzaXRvcik7CisKKyAgICB1c2luZyBWaXNpdE91dHB1dENvbnN0cmFpbnRzV2l0aEFi
c3RyYWN0U2xvdFZpc2l0b3JQdHIgPSB2b2lkICgqKShKU0NlbGwqLCBBYnN0cmFjdFNsb3RWaXNp
dG9yJik7CisgICAgVmlzaXRPdXRwdXRDb25zdHJhaW50c1dpdGhBYnN0cmFjdFNsb3RWaXNpdG9y
UHRyIE1FVEhPRF9UQUJMRV9FTlRSWSh2aXNpdE91dHB1dENvbnN0cmFpbnRzV2l0aEFic3RyYWN0
U2xvdFZpc2l0b3IpOworCisgICAgQUxXQVlTX0lOTElORSB2b2lkIHZpc2l0T3V0cHV0Q29uc3Ry
YWludHMoSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikgY29uc3QgeyB2aXNpdE91
dHB1dENvbnN0cmFpbnRzV2l0aFNsb3RWaXNpdG9yKGNlbGwsIHZpc2l0b3IpOyB9CisgICAgQUxX
QVlTX0lOTElORSB2b2lkIHZpc2l0T3V0cHV0Q29uc3RyYWludHMoSlNDZWxsKiBjZWxsLCBBYnN0
cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBjb25zdCB7IHZpc2l0T3V0cHV0Q29uc3RyYWludHNX
aXRoQWJzdHJhY3RTbG90VmlzaXRvcihjZWxsLCB2aXNpdG9yKTsgfQogfTsKIAogI2RlZmluZSBD
UkVBVEVfTUVNQkVSX0NIRUNLRVIobWVtYmVyKSBcCkBAIC0xNDcsNyArMTU5LDYgQEAgc3RydWN0
IE1ldGhvZFRhYmxlIHsKICAgICBKU0Nhc3RpbmdIZWxwZXJzOjpJbmhlcml0c1RyYWl0czxDbGFz
c05hbWU+Ojp0eXBlUmFuZ2UsIFwKICAgICB7IFwKICAgICAgICAgJkNsYXNzTmFtZTo6ZGVzdHJv
eSwgXAotICAgICAgICAmQ2xhc3NOYW1lOjp2aXNpdENoaWxkcmVuLCBcCiAgICAgICAgICZDbGFz
c05hbWU6OmdldENhbGxEYXRhLCBcCiAgICAgICAgICZDbGFzc05hbWU6OmdldENvbnN0cnVjdERh
dGEsIFwKICAgICAgICAgJkNsYXNzTmFtZTo6cHV0LCBcCkBAIC0xNzMsNiArMTg0LDkgQEAgc3Ry
dWN0IE1ldGhvZFRhYmxlIHsKICAgICAgICAgJkNsYXNzTmFtZTo6ZHVtcFRvU3RyZWFtLCBcCiAg
ICAgICAgICZDbGFzc05hbWU6OmFuYWx5emVIZWFwLCBcCiAgICAgICAgICZDbGFzc05hbWU6OmVz
dGltYXRlZFNpemUsIFwKKyAgICAgICAgJkNsYXNzTmFtZTo6dmlzaXRDaGlsZHJlbiwgXAorICAg
ICAgICAmQ2xhc3NOYW1lOjp2aXNpdENoaWxkcmVuLCBcCisgICAgICAgICZDbGFzc05hbWU6OnZp
c2l0T3V0cHV0Q29uc3RyYWludHMsIFwKICAgICAgICAgJkNsYXNzTmFtZTo6dmlzaXRPdXRwdXRD
b25zdHJhaW50cywgXAogICAgIH0sIFwKICAgICBDbGFzc05hbWU6OlR5cGVkQXJyYXlTdG9yYWdl
VHlwZSwgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xvbmVkQXJndW1l
bnRzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DbG9u
ZWRBcmd1bWVudHMuY3BwCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9DbG9uZWRBcmd1bWVudHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjY3LDcg
KzI2Nyw4IEBAIHZvaWQgQ2xvbmVkQXJndW1lbnRzOjptYXRlcmlhbGl6ZVNwZWNpYWwKICAgICAg
ICAgbWF0ZXJpYWxpemVTcGVjaWFscyhnbG9iYWxPYmplY3QpOwogfQogCi12b2lkIENsb25lZEFy
Z3VtZW50czo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9y
KQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgQ2xvbmVkQXJndW1lbnRzOjp2aXNp
dENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgQ2xv
bmVkQXJndW1lbnRzKiB0aGlzT2JqZWN0ID0ganNDYXN0PENsb25lZEFyZ3VtZW50cyo+KGNlbGwp
OwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAg
LTI3NSw1ICsyNzYsNyBAQCB2b2lkIENsb25lZEFyZ3VtZW50czo6dmlzaXRDaGlsZHJlbihKU0Nl
CiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9jYWxsZWUpOwogfQogCitERUZJTkVf
VklTSVRfQ0hJTERSRU4oQ2xvbmVkQXJndW1lbnRzKTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Nsb25lZEFyZ3VtZW50cy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Nsb25lZEFyZ3VtZW50
cy5oCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9D
bG9uZWRBcmd1bWVudHMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTUtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTYyLDcgKzYyLDcgQEAgcHVibGlj
OgogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2Jq
ZWN0KiwgSlNWYWx1ZSBwcm90b3R5cGUpOwogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVNs
b3dQdXRTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUgcHJvdG90eXBlKTsK
IAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsK
KyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgREVDTEFSRV9JTkZPOwogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EaXJlY3RBcmd1bWVudHMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5j
cHAJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Rp
cmVjdEFyZ3VtZW50cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDE1LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC05MCw3ICs5MCw4IEBAIHNpemVf
dCBEaXJlY3RBcmd1bWVudHM6OmVzdGltYXRlZFNpemUoSlMKICAgICByZXR1cm4gQmFzZTo6ZXN0
aW1hdGVkU2l6ZShjZWxsLCB2bSkgKyBtYXBwZWRBcmd1bWVudHNTaXplICsgbW9kaWZpZWRBcmd1
bWVudHNTaXplOwogfQogCi12b2lkIERpcmVjdEFyZ3VtZW50czo6dmlzaXRDaGlsZHJlbihKU0Nl
bGwqIHRoaXNDZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZp
c2l0b3I+Cit2b2lkIERpcmVjdEFyZ3VtZW50czo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiB0
aGlzQ2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBEaXJlY3RBcmd1bWVudHMqIHRoaXNP
YmplY3QgPSBzdGF0aWNfY2FzdDxEaXJlY3RBcmd1bWVudHMqPih0aGlzQ2VsbCk7CiAgICAgQVNT
RVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtMTA0LDYgKzEw
NSw4IEBAIHZvaWQgRGlyZWN0QXJndW1lbnRzOjp2aXNpdENoaWxkcmVuKEpTQ2UKICAgICBHZW5l
cmljQXJndW1lbnRzPERpcmVjdEFyZ3VtZW50cz46OnZpc2l0Q2hpbGRyZW4odGhpc0NlbGwsIHZp
c2l0b3IpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oRGlyZWN0QXJndW1lbnRzKTsKKwog
U3RydWN0dXJlKiBEaXJlY3RBcmd1bWVudHM6OmNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQogewogICAgIHJldHVy
biBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZv
KERpcmVjdEFyZ3VtZW50c1R5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5oCShyZXZp
c2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EaXJlY3RBcmd1
bWVudHMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTUtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTUtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY1LDcgKzY1LDcgQEAgcHVibGljOgogICAgIHN0
YXRpYyBEaXJlY3RBcmd1bWVudHMqIGNyZWF0ZUJ5Q29weWluZyhKU0dsb2JhbE9iamVjdCosIENh
bGxGcmFtZSopOwogCiAgICAgc3RhdGljIHNpemVfdCBlc3RpbWF0ZWRTaXplKEpTQ2VsbCosIFZN
Jik7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYp
OworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAgICAgCiAgICAgdWludDMyX3QgaW50ZXJu
YWxMZW5ndGgoKSBjb25zdAogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0V2YWxFeGVjdXRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9FdmFsRXhlY3V0YWJsZS5jcHAJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V2YWxFeGVjdXRhYmxlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAsIDIwMTMs
IDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDktMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTUwLDcgKzUwLDggQEAgYXV0byBFdmFsRXhlY3V0YWJs
ZTo6ZW5zdXJlVGVtcGxhdGVPYmplYwogICAgIHJldHVybiBlbnN1cmVUZW1wbGF0ZU9iamVjdE1h
cEltcGwobV90ZW1wbGF0ZU9iamVjdE1hcCk7CiB9CiAKLXZvaWQgRXZhbEV4ZWN1dGFibGU6OnZp
c2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRl
PHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEV2YWxFeGVjdXRhYmxlOjp2aXNpdENoaWxkcmVuSW1w
bChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgRXZhbEV4ZWN1dGFibGUq
IHRoaXNPYmplY3QgPSBqc0Nhc3Q8RXZhbEV4ZWN1dGFibGUqPihjZWxsKTsKICAgICBBU1NFUlRf
R0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC02NCw0ICs2NSw2IEBA
IHZvaWQgRXZhbEV4ZWN1dGFibGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWwKICAgICB9CiB9CiAKK0RF
RklORV9WSVNJVF9DSElMRFJFTihFdmFsRXhlY3V0YWJsZSk7CisKIH0gLy8gbmFtZXNwYWNlIEpT
QwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXZhbEV4ZWN1dGFibGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FdmFsRXhlY3V0YWJs
ZS5oCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9F
dmFsRXhlY3V0YWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAwOS0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAwOS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNzksNyArNzksNyBAQCBwcm90ZWN0
ZWQ6CiAgICAgdXNpbmcgQmFzZTo6ZmluaXNoQ3JlYXRpb247CiAgICAgRXZhbEV4ZWN1dGFibGUo
SlNHbG9iYWxPYmplY3QqLCBjb25zdCBTb3VyY2VDb2RlJiwgYm9vbCBpblN0cmljdENvbnRleHQs
IERlcml2ZWRDb250ZXh0VHlwZSwgYm9vbCBpc0Fycm93RnVuY3Rpb25Db250ZXh0LCBib29sIGlz
SW5zaWRlT3JkaW5hcnlGdW5jdGlvbiwgRXZhbENvbnRleHRUeXBlLCBOZWVkc0NsYXNzRmllbGRJ
bml0aWFsaXplciwgUHJpdmF0ZUJyYW5kUmVxdWlyZW1lbnQpOwogCi0gICAgc3RhdGljIHZvaWQg
dmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRf
Q0hJTERSRU47CiAKICAgICB1bnNpZ25lZCBtX25lZWRzQ2xhc3NGaWVsZEluaXRpYWxpemVyIDog
MTsKICAgICB1bnNpZ25lZCBtX3ByaXZhdGVCcmFuZFJlcXVpcmVtZW50IDogMTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbi5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9uLmNwcAkocmV2aXNpb24gMjcy
OTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9uLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAx
OSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUt
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTUzLDcgKzUzLDggQEAgU3RydWN0dXJlKiBFeGNlcHRpb246OmNyZWF0
ZVN0cnVjdHVyZShWTQogICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2Jq
ZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKENlbGxUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8o
KSk7CiB9CiAKLXZvaWQgRXhjZXB0aW9uOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xv
dFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBFeGNl
cHRpb246OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikK
IHsKICAgICBFeGNlcHRpb24qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8RXhjZXB0aW9uKj4oY2VsbCk7
CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAt
NjQsNiArNjUsOCBAQCB2b2lkIEV4Y2VwdGlvbjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlCiAg
ICAgICAgIGZyYW1lLnZpc2l0Q2hpbGRyZW4odmlzaXRvcik7CiB9CiAKK0RFRklORV9WSVNJVF9D
SElMRFJFTihFeGNlcHRpb24pOworCiBFeGNlcHRpb246OkV4Y2VwdGlvbihWTSYgdm0pCiAgICAg
OiBCYXNlKHZtLCB2bS5leGNlcHRpb25TdHJ1Y3R1cmUuZ2V0KCkpCiB7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGNlcHRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGNlcHRpb24uaAkocmV2aXNpb24gMjcyOTAyKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9uLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTkgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC01MSw3ICs1MSw3IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0
ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBwcm90b3R5cGUpOwogCi0g
ICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAg
IERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBERUNMQVJFX0VYUE9SVF9JTkZPOwogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvbkV4ZWN1dGFibGUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uRXhl
Y3V0YWJsZS5jcHAJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02Nyw3ICs2
Nyw4IEBAIEZ1bmN0aW9uQ29kZUJsb2NrKiBGdW5jdGlvbkV4ZWN1dGFibGU6OmIKICAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8RnVuY3Rpb25Db2RlQmxvY2sqPihlZGdlLT5jb2RlQmxvY2soKS0+YmFz
ZWxpbmVBbHRlcm5hdGl2ZSgpKTsKIH0KIAotdm9pZCBGdW5jdGlvbkV4ZWN1dGFibGU6OnZpc2l0
Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5
cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEZ1bmN0aW9uRXhlY3V0YWJsZTo6dmlzaXRDaGlsZHJlbklt
cGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEZ1bmN0aW9uRXhlY3V0
YWJsZSogdGhpc09iamVjdCA9IGpzQ2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihjZWxsKTsKICAg
ICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC04Niw2
ICs4Nyw4IEBAIHZvaWQgRnVuY3Rpb25FeGVjdXRhYmxlOjp2aXNpdENoaWxkcmVuKEoKICAgICB9
CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihGdW5jdGlvbkV4ZWN1dGFibGUpOworCiBGdW5j
dGlvbkV4ZWN1dGFibGUqIEZ1bmN0aW9uRXhlY3V0YWJsZTo6ZnJvbUdsb2JhbENvZGUoCiAgICAg
Y29uc3QgSWRlbnRpZmllciYgbmFtZSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29u
c3QgU291cmNlQ29kZSYgc291cmNlLCAKICAgICBKU09iamVjdComIGV4Y2VwdGlvbiwgaW50IG92
ZXJyaWRlTGluZU51bWJlciwgT3B0aW9uYWw8aW50PiBmdW5jdGlvbkNvbnN0cnVjdG9yUGFyYW1l
dGVyc0VuZFBvc2l0aW9uKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVu
Y3Rpb25FeGVjdXRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvRnVuY3Rpb25FeGVjdXRhYmxlLmgJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOS0yMDE5IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDIxIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMTY2LDcgKzE2Niw3IEBAIHB1YmxpYzoKICAgICBKU1BhcnNlclNjcmlwdE1vZGUgc2Ny
aXB0TW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fdW5saW5rZWRFeGVjdXRhYmxlLT5zY3JpcHRNb2Rl
KCk7IH0KICAgICBTb3VyY2VDb2RlIGNsYXNzU291cmNlKCkgY29uc3QgeyByZXR1cm4gbV91bmxp
bmtlZEV4ZWN1dGFibGUtPmNsYXNzU291cmNlKCk7IH0KIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0
Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxE
UkVOOwogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG8pCiAgICAgewogICAgICAgICBy
ZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG8sIFR5cGVJbmZv
KEZ1bmN0aW9uRXhlY3V0YWJsZVR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uUmFyZURhdGEuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uUmFyZURhdGEu
Y3BwCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9G
dW5jdGlvblJhcmVEYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTUxLDcgKzUxLDggQEAgU3Ry
dWN0dXJlKiBGdW5jdGlvblJhcmVEYXRhOjpjcmVhdGVTdHJ1YwogICAgIHJldHVybiBTdHJ1Y3R1
cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKENlbGxUeXBl
LCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CiB9CiAKLXZvaWQgRnVuY3Rpb25SYXJlRGF0YTo6
dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxh
dGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgRnVuY3Rpb25SYXJlRGF0YTo6dmlzaXRDaGlsZHJl
bkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEZ1bmN0aW9uUmFy
ZURhdGEqIHJhcmVEYXRhID0ganNDYXN0PEZ1bmN0aW9uUmFyZURhdGEqPihjZWxsKTsKICAgICBB
U1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNlbGwsIGluZm8oKSk7CkBAIC02Myw2ICs2NCw4IEBA
IHZvaWQgRnVuY3Rpb25SYXJlRGF0YTo6dmlzaXRDaGlsZHJlbihKU0MKICAgICB2aXNpdG9yLmFw
cGVuZChyYXJlRGF0YS0+bV9leGVjdXRhYmxlKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVO
KEZ1bmN0aW9uUmFyZURhdGEpOworCiBGdW5jdGlvblJhcmVEYXRhOjpGdW5jdGlvblJhcmVEYXRh
KFZNJiB2bSwgRXhlY3V0YWJsZUJhc2UqIGV4ZWN1dGFibGUpCiAgICAgOiBCYXNlKHZtLCB2bS5m
dW5jdGlvblJhcmVEYXRhU3RydWN0dXJlLmdldCgpKQogICAgICwgbV9vYmplY3RBbGxvY2F0aW9u
UHJvZmlsZSgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvblJh
cmVEYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVu
Y3Rpb25SYXJlRGF0YS5oCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9GdW5jdGlvblJhcmVEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02NSw3ICs2
NSw3IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShW
TSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBwcm90b3R5cGUpOwogCi0gICAgc3RhdGljIHZv
aWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklT
SVRfQ0hJTERSRU47CiAKICAgICBERUNMQVJFX0lORk87CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0dlbmVyaWNBcmd1bWVudHMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljQXJndW1lbnRzLmgJKHJldmlzaW9uIDI3Mjkw
MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNBcmd1bWVudHMuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUt
MjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTUtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTQ0LDcgKzQ0LDcgQEAgcHJvdGVjdGVkOgogICAgIHsKICAgICB9
CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7
CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9w
ZXJ0eVNsb3QoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSwgUHJvcGVy
dHlTbG90Jik7CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU09i
amVjdCosIEpTR2xvYmFsT2JqZWN0KiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNs
b3QmKTsKICAgICBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgSlNH
bG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIERvbnRFbnVtUHJvcGVydGllc01vZGUp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50c0lu
bGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5l
cmljQXJndW1lbnRzSW5saW5lcy5oCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9HZW5lcmljQXJndW1lbnRzSW5saW5lcy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIwIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIxIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMzEsNyArMzEsOCBAQAogbmFtZXNwYWNlIEpTQyB7CiAKIHRlbXBsYXRlPHR5cGVuYW1l
IFR5cGU+Ci12b2lkIEdlbmVyaWNBcmd1bWVudHM8VHlwZT46OnZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiB0aGlzQ2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNp
dG9yPgordm9pZCBHZW5lcmljQXJndW1lbnRzPFR5cGU+Ojp2aXNpdENoaWxkcmVuSW1wbChKU0Nl
bGwqIHRoaXNDZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFR5cGUqIHRoaXNPYmplY3Qg
PSBzdGF0aWNfY2FzdDxUeXBlKj4odGhpc0NlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5I
RVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTQxLDYgKzQyLDggQEAgdm9pZCBHZW5lcmlj
QXJndW1lbnRzPFR5cGU+Ojp2aXNpdENoaWxkcgogICAgICAgICB2aXNpdG9yLm1hcmtBdXhpbGlh
cnkodGhpc09iamVjdC0+bV9tb2RpZmllZEFyZ3VtZW50c0Rlc2NyaXB0b3IuZ2V0VW5zYWZlKCkp
OwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU5fV0lUSF9NT0RJRklFUih0ZW1wbGF0ZTx0eXBl
bmFtZSBUeXBlPiwgR2VuZXJpY0FyZ3VtZW50czxUeXBlPik7CisKIHRlbXBsYXRlPHR5cGVuYW1l
IFR5cGU+CiBib29sIEdlbmVyaWNBcmd1bWVudHM8VHlwZT46OmdldE93blByb3BlcnR5U2xvdChK
U09iamVjdCogb2JqZWN0LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5h
bWUgaWRlbnQsIFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0dldHRlclNldHRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvR2V0dGVyU2V0dGVyLmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2V0dGVyU2V0dGVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDIgSGFy
cmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKICAqICBDb3B5cmlnaHQgKEMpIDIwMDEgUGV0ZXIg
S2VsbHkgKHBta0Bwb3N0LmNvbSkKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxNyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDA0LTIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTMz
LDcgKzMzLDggQEAgU1RBVElDX0FTU0VSVF9JU19UUklWSUFMTFlfREVTVFJVQ1RJQkxFKAogCiBj
b25zdCBDbGFzc0luZm8gR2V0dGVyU2V0dGVyOjpzX2luZm8gPSB7ICJHZXR0ZXJTZXR0ZXIiLCBu
dWxscHRyLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEdldHRlclNldHRl
cikgfTsKIAotdm9pZCBHZXR0ZXJTZXR0ZXI6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBT
bG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEdl
dHRlclNldHRlcjo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNp
dG9yKQogewogICAgIEdldHRlclNldHRlciogdGhpc09iamVjdCA9IGpzQ2FzdDxHZXR0ZXJTZXR0
ZXIqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGlu
Zm8oKSk7CkBAIC00Myw2ICs0NCw4IEBAIHZvaWQgR2V0dGVyU2V0dGVyOjp2aXNpdENoaWxkcmVu
KEpTQ2VsbCoKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX3NldHRlcik7CiB9CiAK
K0RFRklORV9WSVNJVF9DSElMRFJFTihHZXR0ZXJTZXR0ZXIpOworCiBKU1ZhbHVlIGNhbGxHZXR0
ZXIoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBiYXNlLCBKU1ZhbHVlIGdl
dHRlclNldHRlcikKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZXR0ZXJTZXR0ZXIuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZXR0ZXJTZXR0ZXIuaAkocmV2aXNpb24g
MjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2V0dGVyU2V0dGVyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSw3IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMTk5
OS0yMDAxIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCiAgKiAgQ29weXJpZ2h0IChDKSAy
MDAxIFBldGVyIEtlbGx5IChwbWtAcG9zdC5jb20pCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIw
MTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAw
My0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICog
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCkBAIC04Miw3ICs4Miw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGNyZWF0ZSh2bSwg
Z2xvYmFsT2JqZWN0LCBnZXR0ZXJPYmplY3QsIHNldHRlck9iamVjdCk7CiAgICAgfQogCi0gICAg
c3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERF
Q0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBKU09iamVjdCogZ2V0dGVyKCkgY29uc3QgeyBy
ZXR1cm4gbV9nZXR0ZXIuZ2V0KCk7IH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSGFzaE1hcEltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0hhc2hNYXBJbXBsLmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSGFzaE1hcEltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMwLDYg
KzMwLDkgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTl9XSVRI
X01PRElGSUVSKHRlbXBsYXRlPD4sIEhhc2hNYXBCdWNrZXQ8SGFzaE1hcEJ1Y2tldERhdGFLZXk+
KTsKK0RFRklORV9WSVNJVF9DSElMRFJFTl9XSVRIX01PRElGSUVSKHRlbXBsYXRlPD4sIEhhc2hN
YXBCdWNrZXQ8SGFzaE1hcEJ1Y2tldERhdGFLZXlWYWx1ZT4pOworCiB0ZW1wbGF0ZTw+CiBjb25z
dCBDbGFzc0luZm8gSGFzaE1hcEJ1Y2tldDxIYXNoTWFwQnVja2V0RGF0YUtleT46OnNfaW5mbyA9
CiAgICAgeyAiSGFzaE1hcEJ1Y2tldCIsIG51bGxwdHIsIG51bGxwdHIsIG51bGxwdHIsIENSRUFU
RV9NRVRIT0RfVEFCTEUoSGFzaE1hcEJ1Y2tldDxIYXNoTWFwQnVja2V0RGF0YUtleT4pIH07CkBA
IC0zOCw4ICs0MSw5IEBAIHRlbXBsYXRlPD4KIGNvbnN0IENsYXNzSW5mbyBIYXNoTWFwQnVja2V0
PEhhc2hNYXBCdWNrZXREYXRhS2V5VmFsdWU+OjpzX2luZm8gPQogICAgIHsgIkhhc2hNYXBCdWNr
ZXQiLCBudWxscHRyLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEhhc2hN
YXBCdWNrZXQ8SGFzaE1hcEJ1Y2tldERhdGFLZXlWYWx1ZT4pIH07CiAKLXRlbXBsYXRlIDx0eXBl
bmFtZSBEYXRhPgotdm9pZCBIYXNoTWFwQnVja2V0PERhdGE+Ojp2aXNpdENoaWxkcmVuKEpTQ2Vs
bCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBEYXRhPgor
dGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSGFzaE1hcEJ1Y2tldDxEYXRhPjo6dmlz
aXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEhh
c2hNYXBCdWNrZXQqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SGFzaE1hcEJ1Y2tldCo+KGNlbGwpOwog
ICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTUy
LDggKzU2LDkgQEAgdm9pZCBIYXNoTWFwQnVja2V0PERhdGE+Ojp2aXNpdENoaWxkcmVuKAogICAg
IHZpc2l0b3IuYXBwZW5kVmFsdWVzKGJpdHdpc2VfY2FzdDxXcml0ZUJhcnJpZXI8VW5rbm93bj4q
PigmdGhpc09iamVjdC0+bV9kYXRhKSwgc2l6ZW9mKERhdGEpIC8gc2l6ZW9mKFdyaXRlQmFycmll
cjxVbmtub3duPikpOwogfQogCi10ZW1wbGF0ZSA8dHlwZW5hbWUgSGFzaE1hcEJ1Y2tldD4KLXZv
aWQgSGFzaE1hcEltcGw8SGFzaE1hcEJ1Y2tldD46OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxs
LCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIEhhc2hNYXBCdWNrZXQ+
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBIYXNoTWFwSW1wbDxIYXNoTWFwQnVj
a2V0Pjo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQog
ewogICAgIEhhc2hNYXBJbXBsKiB0aGlzT2JqZWN0ID0ganNDYXN0PEhhc2hNYXBJbXBsKj4oY2Vs
bCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpA
QCAtNjYsNiArNzEsOCBAQCB2b2lkIEhhc2hNYXBJbXBsPEhhc2hNYXBCdWNrZXQ+Ojp2aXNpdENo
CiAgICAgICAgIHZpc2l0b3IubWFya0F1eGlsaWFyeShidWZmZXIpOwogfQogCitERUZJTkVfVklT
SVRfQ0hJTERSRU5fV0lUSF9NT0RJRklFUih0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoTWFwQnVja2V0
PiwgSGFzaE1hcEltcGw8SGFzaE1hcEJ1Y2tldD4pOworCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgSGFz
aE1hcEJ1Y2tldD4KIHNpemVfdCBIYXNoTWFwSW1wbDxIYXNoTWFwQnVja2V0Pjo6ZXN0aW1hdGVk
U2l6ZShKU0NlbGwqIGNlbGwsIFZNJiB2bSkKIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0hhc2hNYXBJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSGFzaE1hcEltcGwuaAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSGFzaE1hcEltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxOCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE0
OCw3ICsxNDgsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX2RhdGEudmFsdWUuZ2V0KCk7
CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90Vmlz
aXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBBTFdBWVNfSU5MSU5F
IEhhc2hNYXBCdWNrZXQqIG5leHQoKSBjb25zdCB7IHJldHVybiBtX25leHQuZ2V0KCk7IH0KICAg
ICBBTFdBWVNfSU5MSU5FIEhhc2hNYXBCdWNrZXQqIHByZXYoKSBjb25zdCB7IHJldHVybiBtX3By
ZXYuZ2V0KCk7IH0KQEAgLTM2NCw3ICszNjQsNyBAQCBjbGFzcyBIYXNoTWFwSW1wbCA6IHB1Ymxp
YyBKU05vbkZpbmFsT2JqCiBwdWJsaWM6CiAgICAgdXNpbmcgQnVja2V0VHlwZSA9IEhhc2hNYXBC
dWNrZXRUeXBlOwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90
VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBzdGF0aWMgc2l6
ZV90IGVzdGltYXRlZFNpemUoSlNDZWxsKiwgVk0mKTsKIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSW50ZXJuYWxGdW5jdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50ZXJuYWxGdW5jdGlvbi5jcHAJKHJldmlzaW9uIDI3
MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGVybmFsRnVuY3Rpb24u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMp
IDE5OTktMjAwMiBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQogICogIENvcHlyaWdodCAo
QykgMjAwMSBQZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQotICogIENvcHlyaWdodCAoQykgMjAw
NC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMp
IDIwMDQtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
ICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYwpAQCAtNjQsNyArNjQsOCBAQCB2b2lkIEludGVybmFsRnVuY3Rpb246OmZpbmlzaENy
ZWF0aW9uKFZNCiAgICAgfQogfQogCi12b2lkIEludGVybmFsRnVuY3Rpb246OnZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1l
IFZpc2l0b3I+Cit2b2lkIEludGVybmFsRnVuY3Rpb246OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2Vs
bCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBJbnRlcm5hbEZ1bmN0aW9uKiB0aGlz
T2JqZWN0ID0ganNDYXN0PEludGVybmFsRnVuY3Rpb24qPihjZWxsKTsKICAgICBBU1NFUlRfR0Nf
T0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC03Myw2ICs3NCw4IEBAIHZv
aWQgSW50ZXJuYWxGdW5jdGlvbjo6dmlzaXRDaGlsZHJlbihKU0MKICAgICB2aXNpdG9yLmFwcGVu
ZCh0aGlzT2JqZWN0LT5tX29yaWdpbmFsTmFtZSk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJF
Tl9XSVRIX01PRElGSUVSKEpTX0VYUE9SVF9QUklWQVRFLCBJbnRlcm5hbEZ1bmN0aW9uKTsKKwog
Y29uc3QgU3RyaW5nJiBJbnRlcm5hbEZ1bmN0aW9uOjpuYW1lKCkKIHsKICAgICBjb25zdCBTdHJp
bmcmIG5hbWUgPSBtX29yaWdpbmFsTmFtZS0+dHJ5R2V0VmFsdWUoKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGVybmFsRnVuY3Rpb24uaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRlcm5hbEZ1bmN0aW9uLmgJKHJldmlzaW9u
IDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGVybmFsRnVuY3Rp
b24uaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChD
KSAxOTk5LTIwMDAgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKLSAqICBDb3B5cmlnaHQg
KEMpIDIwMDMtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJp
Z2h0IChDKSAyMDAzLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogIENv
cHlyaWdodCAoQykgMjAwNyBDYW1lcm9uIFp3YXJpY2ggKGN3endhcmljaEB1d2F0ZXJsb28uY2Ep
CiAgKiAgQ29weXJpZ2h0IChDKSAyMDA3IE1ha3MgT3Jsb3ZpY2gKICAqCkBAIC00Niw3ICs0Niw3
IEBAIHB1YmxpYzoKIAogICAgIERFQ0xBUkVfRVhQT1JUX0lORk87CiAKLSAgICBKU19FWFBPUlRf
UFJJVkFURSBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7
CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTl9XSVRIX01PRElGSUVSKEpTX0VYUE9SVF9QUklW
QVRFKTsKIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIGNvbnN0IFN0cmluZyYgbmFtZSgpOwogICAg
IGNvbnN0IFN0cmluZyBkaXNwbGF5TmFtZShWTSYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSW50bENvbGxhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9JbnRsQ29sbGF0b3IuY3BwCShyZXZpc2lvbiAyNzI5MDIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsQ29sbGF0b3IuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxNSBBbmR5IFZhbldh
Z29uZXIgKGFuZHlAdmFud2Fnb25lci5mYW1pbHkpCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTUgU3Vr
b2xzYWsgU2Frc2h1d29uZyAoc3Vrb2xzYWtAZ21haWwuY29tKQotICogQ29weXJpZ2h0IChDKSAy
MDE2LTIwMjAgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC02NSw3ICs2NSw4IEBAIHZvaWQgSW50bENvbGxhdG9yOjpm
aW5pc2hDcmVhdGlvbihWTSYgdm0KICAgICBBU1NFUlQoaW5oZXJpdHModm0sIGluZm8oKSkpOwog
fQogCi12b2lkIEludGxDb2xsYXRvcjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSW50bENv
bGxhdG9yOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3Ip
CiB7CiAgICAgSW50bENvbGxhdG9yKiB0aGlzT2JqZWN0ID0ganNDYXN0PEludGxDb2xsYXRvcio+
KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygp
KTsKQEAgLTc1LDYgKzc2LDggQEAgdm9pZCBJbnRsQ29sbGF0b3I6OnZpc2l0Q2hpbGRyZW4oSlND
ZWxsKgogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fYm91bmRDb21wYXJlKTsKIH0K
IAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEludGxDb2xsYXRvcik7CisKIFZlY3RvcjxTdHJpbmc+
IEludGxDb2xsYXRvcjo6c29ydExvY2FsZURhdGEoY29uc3QgU3RyaW5nJiBsb2NhbGUsIFJlbGV2
YW50RXh0ZW5zaW9uS2V5IGtleSkKIHsKICAgICAvLyA5LjEgSW50ZXJuYWwgc2xvdHMgb2YgU2Vy
dmljZSBDb25zdHJ1Y3RvcnMgJiAxMC4yLjMgSW50ZXJuYWwgc2xvdHMgKEVDTUEtNDAyIDIuMCkK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxDb2xsYXRvci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxDb2xsYXRvci5oCShy
ZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsQ29s
bGF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQg
KEMpIDIwMTUgQW5keSBWYW5XYWdvbmVyIChhbmR5QHZhbndhZ29uZXIuZmFtaWx5KQorICogQ29w
eXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODAsNyArODEsNyBAQCBwdWJsaWM6CiBwcml2YXRl
OgogICAgIEludGxDb2xsYXRvcihWTSYsIFN0cnVjdHVyZSopOwogICAgIHZvaWQgZmluaXNoQ3Jl
YXRpb24oVk0mKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RW
aXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIGJvb2wgdXBkYXRl
Q2FuRG9BU0NJSVVDQURVQ0VUQ29tcGFyaXNvbigpIGNvbnN0OwogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9JbnRsRGF0ZVRpbWVGb3JtYXQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxEYXRlVGltZUZvcm1hdC5jcHAJKHJl
dmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxEYXRl
VGltZUZvcm1hdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogQ29w
eXJpZ2h0IChDKSAyMDE1IEFuZHkgVmFuV2Fnb25lciAoYW5keUB2YW53YWdvbmVyLmZhbWlseSkK
LSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtOTAsNyArOTAsOCBAQCB2
b2lkIEludGxEYXRlVGltZUZvcm1hdDo6ZmluaXNoQ3JlYXRpb24oCiAgICAgQVNTRVJUKGluaGVy
aXRzKHZtLCBpbmZvKCkpKTsKIH0KIAotdm9pZCBJbnRsRGF0ZVRpbWVGb3JtYXQ6OnZpc2l0Q2hp
bGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVu
YW1lIFZpc2l0b3I+Cit2b2lkIEludGxEYXRlVGltZUZvcm1hdDo6dmlzaXRDaGlsZHJlbkltcGwo
SlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEludGxEYXRlVGltZUZvcm1h
dCogdGhpc09iamVjdCA9IGpzQ2FzdDxJbnRsRGF0ZVRpbWVGb3JtYXQqPihjZWxsKTsKICAgICBB
U1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC0xMDAsNiAr
MTAxLDggQEAgdm9pZCBJbnRsRGF0ZVRpbWVGb3JtYXQ6OnZpc2l0Q2hpbGRyZW4oSgogICAgIHZp
c2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fYm91bmRGb3JtYXQpOwogfQogCitERUZJTkVfVklT
SVRfQ0hJTERSRU4oSW50bERhdGVUaW1lRm9ybWF0KTsKKwogdm9pZCBJbnRsRGF0ZVRpbWVGb3Jt
YXQ6OnNldEJvdW5kRm9ybWF0KFZNJiB2bSwgSlNCb3VuZEZ1bmN0aW9uKiBmb3JtYXQpCiB7CiAg
ICAgbV9ib3VuZEZvcm1hdC5zZXQodm0sIHRoaXMsIGZvcm1hdCk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9JbnRsRGF0ZVRpbWVGb3JtYXQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsRGF0ZVRpbWVGb3JtYXQuaAkocmV2aXNp
b24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERhdGVUaW1l
Rm9ybWF0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0
IChDKSAyMDE1IEFuZHkgVmFuV2Fnb25lciAoYW5keUB2YW53YWdvbmVyLmZhbWlseSkKKyAqIENv
cHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTg1LDcgKzg2LDcgQEAgcHVibGljOgogcHJpdmF0
ZToKICAgICBJbnRsRGF0ZVRpbWVGb3JtYXQoVk0mLCBTdHJ1Y3R1cmUqKTsKICAgICB2b2lkIGZp
bmlzaENyZWF0aW9uKFZNJik7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwq
LCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBzdGF0
aWMgVmVjdG9yPFN0cmluZz4gbG9jYWxlRGF0YShjb25zdCBTdHJpbmcmLCBSZWxldmFudEV4dGVu
c2lvbktleSk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxMb2Nh
bGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxM
b2NhbGUuY3BwCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9JbnRsTG9jYWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAg
KiBDb3B5cmlnaHQgKEMpIDIwMjAgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4K
KyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU4LDcgKzU5LDggQEAgdm9pZCBJbnRs
TG9jYWxlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCiAgICAgQVNTRVJUKGluaGVyaXRzKHZtLCBp
bmZvKCkpKTsKIH0KIAotdm9pZCBJbnRsTG9jYWxlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2Vs
bCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9p
ZCBJbnRsTG9jYWxlOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZp
c2l0b3IpCiB7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxJbnRsTG9jYWxlKj4oY2Vs
bCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpA
QCAtNjYsNiArNjgsOCBAQCB2b2lkIEludGxMb2NhbGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBj
CiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKIH0KIAorREVG
SU5FX1ZJU0lUX0NISUxEUkVOKEludGxMb2NhbGUpOworCiBjbGFzcyBMb2NhbGVJREJ1aWxkZXIg
ZmluYWwgewogcHVibGljOgogICAgIGJvb2wgaW5pdGlhbGl6ZShjb25zdCBTdHJpbmcmKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxMb2NhbGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTG9jYWxlLmgJKHJldmlzaW9u
IDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxMb2NhbGUuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMjAg
U29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTcxLDcgKzcyLDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBJbnRsTG9j
YWxlKFZNJiwgU3RydWN0dXJlKik7CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOwotICAg
IHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBE
RUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgU3RyaW5nIGtleXdvcmRWYWx1ZShBU0NJSUxp
dGVyYWwsIGJvb2wgaXNCb29sZWFuID0gZmFsc2UpIGNvbnN0OwogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTnVtYmVyRm9ybWF0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTnVtYmVyRm9ybWF0LmNwcAkocmV2aXNp
b24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE51bWJlckZv
cm1hdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSw3IEBACiAvKgogICogQ29weXJpZ2h0
IChDKSAyMDE1IEFuZHkgVmFuV2Fnb25lciAoYW5keUB2YW53YWdvbmVyLmZhbWlseSkKICAqIENv
cHlyaWdodCAoQykgMjAxNiBTdWtvbHNhayBTYWtzaHV3b25nIChzdWtvbHNha0BnbWFpbC5jb20p
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMjAgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5t
ZW50IEluYy4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTczLDcgKzczLDggQEAgdm9pZCBJbnRsTnVt
YmVyRm9ybWF0OjpmaW5pc2hDcmVhdGlvbihWTQogICAgIEFTU0VSVChpbmhlcml0cyh2bSwgaW5m
bygpKSk7CiB9CiAKLXZvaWQgSW50bE51bWJlckZvcm1hdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwq
IGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4K
K3ZvaWQgSW50bE51bWJlckZvcm1hdDo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBW
aXNpdG9yJiB2aXNpdG9yKQogewogICAgIEludGxOdW1iZXJGb3JtYXQqIHRoaXNPYmplY3QgPSBq
c0Nhc3Q8SW50bE51bWJlckZvcm1hdCo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5I
RVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTgzLDYgKzg0LDggQEAgdm9pZCBJbnRsTnVt
YmVyRm9ybWF0Ojp2aXNpdENoaWxkcmVuKEpTQwogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmpl
Y3QtPm1fYm91bmRGb3JtYXQpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSW50bE51bWJl
ckZvcm1hdCk7CisKIFZlY3RvcjxTdHJpbmc+IEludGxOdW1iZXJGb3JtYXQ6OmxvY2FsZURhdGEo
Y29uc3QgU3RyaW5nJiBsb2NhbGUsIFJlbGV2YW50RXh0ZW5zaW9uS2V5IGtleSkKIHsKICAgICAv
LyA5LjEgSW50ZXJuYWwgc2xvdHMgb2YgU2VydmljZSBDb25zdHJ1Y3RvcnMgJiAxMS4yLjMgSW50
ZXJuYWwgc2xvdHMgKEVDTUEtNDAyIDIuMCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0ludGxOdW1iZXJGb3JtYXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9JbnRsTnVtYmVyRm9ybWF0LmgJKHJldmlzaW9uIDI3MjkwMikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxOdW1iZXJGb3JtYXQuaAkod29ya2luZyBj
b3B5KQpAQCAtMSw2ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQW5keSBWYW5X
YWdvbmVyIChhbmR5QHZhbndhZ29uZXIuZmFtaWx5KQogICogQ29weXJpZ2h0IChDKSAyMDIwIFNv
bnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC05Niw3ICs5Nyw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgSW50bE51bWJl
ckZvcm1hdChWTSYsIFN0cnVjdHVyZSopOwogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsK
LSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7Cisg
ICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIHN0YXRpYyBWZWN0b3I8U3RyaW5nPiBs
b2NhbGVEYXRhKGNvbnN0IFN0cmluZyYsIFJlbGV2YW50RXh0ZW5zaW9uS2V5KTsKIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFBsdXJhbFJ1bGVzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsUGx1cmFsUnVsZXMuY3Bw
CShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRs
UGx1cmFsUnVsZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENv
cHlyaWdodCAoQykgMjAxOCBBbmR5IFZhbldhZ29uZXIgKGFuZHlAdmFud2Fnb25lci5mYW1pbHkp
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTYxLDcgKzYxLDggQEAg
dm9pZCBJbnRsUGx1cmFsUnVsZXM6OmZpbmlzaENyZWF0aW9uKFZNJgogICAgIEFTU0VSVChpbmhl
cml0cyh2bSwgaW5mbygpKSk7CiB9CiAKLXZvaWQgSW50bFBsdXJhbFJ1bGVzOjp2aXNpdENoaWxk
cmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBWaXNpdG9yPgordm9pZCBJbnRsUGx1cmFsUnVsZXM6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2Vs
bCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBJbnRsUGx1cmFsUnVsZXMqIHRoaXNP
YmplY3QgPSBqc0Nhc3Q8SW50bFBsdXJhbFJ1bGVzKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09C
SkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNjksNiArNzAsOCBAQCB2b2lk
IEludGxQbHVyYWxSdWxlczo6dmlzaXRDaGlsZHJlbihKU0NlCiAgICAgQmFzZTo6dmlzaXRDaGls
ZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKElu
dGxQbHVyYWxSdWxlcyk7CisKIFZlY3RvcjxTdHJpbmc+IEludGxQbHVyYWxSdWxlczo6bG9jYWxl
RGF0YShjb25zdCBTdHJpbmcmLCBSZWxldmFudEV4dGVuc2lvbktleSkKIHsKICAgICByZXR1cm4g
eyB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFBsdXJhbFJ1bGVz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFBsdXJh
bFJ1bGVzLmgJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0ludGxQbHVyYWxSdWxlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoK
ICAqIENvcHlyaWdodCAoQykgMjAxOCBBbmR5IFZhbldhZ29uZXIgKGFuZHlAdmFud2Fnb25lci5m
YW1pbHkpCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02Niw3ICs2Nyw3IEBAIHB1
YmxpYzoKIHByaXZhdGU6CiAgICAgSW50bFBsdXJhbFJ1bGVzKFZNJiwgU3RydWN0dXJlKik7CiAg
ICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOwotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwog
CiAgICAgc3RhdGljIFZlY3RvcjxTdHJpbmc+IGxvY2FsZURhdGEoY29uc3QgU3RyaW5nJiwgUmVs
ZXZhbnRFeHRlbnNpb25LZXkpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9JbnRsUmVsYXRpdmVUaW1lRm9ybWF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9JbnRsUmVsYXRpdmVUaW1lRm9ybWF0LmNwcAkocmV2aXNpb24gMjcy
OTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFJlbGF0aXZlVGltZUZv
cm1hdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0
IChDKSAyMDIwIFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisgKiBDb3B5cmln
aHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC02Miw3ICs2Myw4IEBAIHZvaWQgSW50bFJlbGF0aXZlVGlt
ZUZvcm1hdDo6ZmluaXNoQ3JlYXQKICAgICBBU1NFUlQoaW5oZXJpdHModm0sIGluZm8oKSkpOwog
fQogCi12b2lkIEludGxSZWxhdGl2ZVRpbWVGb3JtYXQ6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBj
ZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2
b2lkIEludGxSZWxhdGl2ZVRpbWVGb3JtYXQ6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2Vs
bCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PElu
dGxSZWxhdGl2ZVRpbWVGb3JtYXQqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVS
SVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC03MCw2ICs3Miw4IEBAIHZvaWQgSW50bFJlbGF0
aXZlVGltZUZvcm1hdDo6dmlzaXRDaGlsZHIKICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNP
YmplY3QsIHZpc2l0b3IpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSW50bFJlbGF0aXZl
VGltZUZvcm1hdCk7CisKIFZlY3RvcjxTdHJpbmc+IEludGxSZWxhdGl2ZVRpbWVGb3JtYXQ6Omxv
Y2FsZURhdGEoY29uc3QgU3RyaW5nJiBsb2NhbGUsIFJlbGV2YW50RXh0ZW5zaW9uS2V5IGtleSkK
IHsKICAgICBBU1NFUlRfVU5VU0VEKGtleSwga2V5ID09IFJlbGV2YW50RXh0ZW5zaW9uS2V5OjpO
dSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsUmVsYXRpdmVUaW1l
Rm9ybWF0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50
bFJlbGF0aXZlVGltZUZvcm1hdC5oCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9JbnRsUmVsYXRpdmVUaW1lRm9ybWF0LmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNiArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDIwIFNvbnkgSW50ZXJhY3Rp
dmUgRW50ZXJ0YWlubWVudCBJbmMuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIwLTIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC02NCw3ICs2NCw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgSW50bFJlbGF0aXZlVGltZUZv
cm1hdChWTSYsIFN0cnVjdHVyZSopOwogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKLSAg
ICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAg
REVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIHN0YXRpYyBWZWN0b3I8U3RyaW5nPiBsb2Nh
bGVEYXRhKGNvbnN0IFN0cmluZyYsIFJlbGV2YW50RXh0ZW5zaW9uS2V5KTsKIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFNlZ21lbnRJdGVyYXRvci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFNlZ21lbnRJdGVyYXRv
ci5jcHAJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0ludGxTZWdtZW50SXRlcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAog
LyoKICAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02NCwxMyArNjUsMTYgQEAgdm9pZCBJ
bnRsU2VnbWVudEl0ZXJhdG9yOjpmaW5pc2hDcmVhdGlvbgogICAgIG1fc3RyaW5nLnNldCh2bSwg
dGhpcywgc3RyaW5nKTsKIH0KIAotdm9pZCBJbnRsU2VnbWVudEl0ZXJhdG9yOjp2aXNpdENoaWxk
cmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBWaXNpdG9yPgordm9pZCBJbnRsU2VnbWVudEl0ZXJhdG9yOjp2aXNpdENoaWxkcmVuSW1wbChK
U0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0byogdGhpc09iamVjdCA9
IGpzQ2FzdDxJbnRsU2VnbWVudEl0ZXJhdG9yKj4oY2VsbCk7CiAgICAgQmFzZTo6dmlzaXRDaGls
ZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0
LT5tX3N0cmluZyk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihJbnRsU2VnbWVudEl0ZXJh
dG9yKTsKKwogSlNPYmplY3QqIEludGxTZWdtZW50SXRlcmF0b3I6Om5leHQoSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCkKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsU2VnbWVudEl0ZXJhdG9yLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFNlZ21lbnRJ
dGVyYXRvci5oCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9JbnRsU2VnbWVudEl0ZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBA
CiAvKgogICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTUzLDcgKzU0LDcgQEAgcHVibGlj
OgogCiAgICAgSlNPYmplY3QqIG5leHQoSlNHbG9iYWxPYmplY3QqKTsKIAotICAgIHN0YXRpYyB2
b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJ
U0lUX0NISUxEUkVOOwogCiBwcml2YXRlOgogICAgIEludGxTZWdtZW50SXRlcmF0b3IoVk0mLCBT
dHJ1Y3R1cmUqLCBzdGQ6OnVuaXF1ZV9wdHI8VUJyZWFrSXRlcmF0b3IsIFVCcmVha0l0ZXJhdG9y
RGVsZXRlcj4mJiwgQm94PFZlY3RvcjxVQ2hhcj4+JiYsIEludGxTZWdtZW50ZXI6OkdyYW51bGFy
aXR5KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxTZWdtZW50cy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFNlZ21l
bnRzLmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSW50bFNlZ21lbnRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAg
KiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTA5LDExICsxMTAsMTQgQEAgSlNPYmplY3Qq
IEludGxTZWdtZW50czo6Y3JlYXRlU2VnbWVudEl0ZQogICAgIHJldHVybiBJbnRsU2VnbWVudEl0
ZXJhdG9yOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdC0+c2VnbWVudEl0ZXJhdG9yU3RydWN0dXJl
KCksIFdURk1vdmUoc2VnbWVudGVyKSwgbV9idWZmZXIsIG1fc3RyaW5nLmdldCgpLCBtX2dyYW51
bGFyaXR5KTsKIH0KIAotdm9pZCBJbnRsU2VnbWVudHM6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBj
ZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2
b2lkIEludGxTZWdtZW50czo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9y
JiB2aXNpdG9yKQogewogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SW50bFNlZ21lbnRz
Kj4oY2VsbCk7CiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsK
ICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX3N0cmluZyk7CiB9CiAKK0RFRklORV9W
SVNJVF9DSElMRFJFTihJbnRsU2VnbWVudHMpOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxTZWdtZW50cy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxTZWdtZW50cy5oCShyZXZpc2lv
biAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsU2VnbWVudHMu
aAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIw
MjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtNTQsNyArNTUsNyBAQCBwdWJsaWM6CiAgICAgSlNWYWx1ZSBjb250YWluaW5n
KEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBpbmRleFZhbHVlKTsKICAgICBKU09iamVjdCogY3Jl
YXRlU2VnbWVudEl0ZXJhdG9yKEpTR2xvYmFsT2JqZWN0Kik7CiAKLSAgICBzdGF0aWMgdm9pZCB2
aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9D
SElMRFJFTjsKIAogcHJpdmF0ZToKICAgICBJbnRsU2VnbWVudHMoVk0mLCBTdHJ1Y3R1cmUqLCBz
dGQ6OnVuaXF1ZV9wdHI8VUJyZWFrSXRlcmF0b3IsIFVCcmVha0l0ZXJhdG9yRGVsZXRlcj4mJiwg
Qm94PFZlY3RvcjxVQ2hhcj4+JiYsIEludGxTZWdtZW50ZXI6OkdyYW51bGFyaXR5KTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyVmll
dy5jcHAJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTQXJyYXlCdWZmZXJWaWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE1NSw3ICsxNTUsOCBA
QCB2b2lkIEpTQXJyYXlCdWZmZXJWaWV3OjpmaW5pc2hDcmVhdGlvbihWCiAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAotdm9pZCBKU0FycmF5QnVmZmVyVmlldzo6dmlzaXRD
aGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlw
ZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNBcnJheUJ1ZmZlclZpZXc6OnZpc2l0Q2hpbGRyZW5JbXBs
KEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU0FycmF5QnVmZmVyVmll
dyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0FycmF5QnVmZmVyVmlldyo+KGNlbGwpOwogICAgIEFT
U0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTE2OSw2ICsx
NzAsOCBAQCB2b2lkIEpTQXJyYXlCdWZmZXJWaWV3Ojp2aXNpdENoaWxkcmVuKEpTCiAgICAgfQog
fQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNBcnJheUJ1ZmZlclZpZXcpOworCiBib29sIEpT
QXJyYXlCdWZmZXJWaWV3OjpwdXQoCiAgICAgSlNDZWxsKiBjZWxsLCBKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLAog
ICAgIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuaAkocmV2aXNpb24gMjcyOTAyKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTE3Miw3ICsxNzIsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgCiAgICAgc3RhdGlj
IGJvb2wgcHV0KEpTQ2VsbCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVl
LCBQdXRQcm9wZXJ0eVNsb3QmKTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlND
ZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogICAgIAog
cHVibGljOgogICAgIFR5cGVkQXJyYXlNb2RlIG1vZGUoKSBjb25zdCB7IHJldHVybiBtX21vZGU7
IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlJdGVyYXRvci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUl0
ZXJhdG9yLmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNBcnJheUl0ZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDIwLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02OCwxMSArNjgsMTQgQEAg
dm9pZCBKU0FycmF5SXRlcmF0b3I6OmZpbmlzaENyZWF0aW9uKFZNJgogICAgICAgICBCYXNlOjpp
bnRlcm5hbEZpZWxkKGluZGV4KS5zZXQodm0sIHRoaXMsIHZhbHVlc1tpbmRleF0pOwogfQogCi12
b2lkIEpTQXJyYXlJdGVyYXRvcjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNp
dG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNBcnJheUl0
ZXJhdG9yOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3Ip
CiB7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0FycmF5SXRlcmF0b3IqPihjZWxs
KTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAg
ICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKIH0KIAorREVGSU5F
X1ZJU0lUX0NISUxEUkVOKEpTQXJyYXlJdGVyYXRvcik7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUl0ZXJhdG9yLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUl0ZXJhdG9y
LmgJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
QXJyYXlJdGVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMjAtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTc4LDcgKzc4LDcgQEAgcHVibGljOgogCiAg
ICAgREVDTEFSRV9JTkZPOwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwq
LCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKIHByaXZhdGU6
CiAgICAgSlNBcnJheUl0ZXJhdG9yKFZNJiwgU3RydWN0dXJlKik7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0FzeW5jR2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FzeW5jR2VuZXJhdG9yLmNwcAkocmV2aXNp
b24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBc3luY0dlbmVy
YXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxOS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTksMTEgKzU5LDE0IEBAIHZvaWQgSlNBc3luY0dlbmVy
YXRvcjo6ZmluaXNoQ3JlYXRpb24oVk0KICAgICAgICAgaW50ZXJuYWxGaWVsZChpbmRleCkuc2V0
KHZtLCB0aGlzLCB2YWx1ZXNbaW5kZXhdKTsKIH0KIAotdm9pZCBKU0FzeW5jR2VuZXJhdG9yOjp2
aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0
ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0FzeW5jR2VuZXJhdG9yOjp2aXNpdENoaWxkcmVu
SW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0byogdGhpc09i
amVjdCA9IGpzQ2FzdDxKU0FzeW5jR2VuZXJhdG9yKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09C
SkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwogICAgIEJhc2U6OnZpc2l0Q2hpbGRy
ZW4odGhpc09iamVjdCwgdmlzaXRvcik7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU0Fz
eW5jR2VuZXJhdG9yKTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0FzeW5jR2VuZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBc3luY0dlbmVyYXRvci5oCShyZXZpc2lvbiAyNzI5
MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FzeW5jR2VuZXJhdG9yLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE5
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOS0y
MDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtOTUsNyArOTUsNyBAQCBwdWJsaWM6CiAKICAgICBERUNMQVJFX0VYUE9S
VF9JTkZPOwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90Vmlz
aXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKIHByaXZhdGU6CiAgICAgSlNB
c3luY0dlbmVyYXRvcihWTSYsIFN0cnVjdHVyZSopOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNCaWdJbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTQmlnSW50LmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCaWdJbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYg
KzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxNyBDYWlvIExpbWEgPHRpY2Fpb2xpbWFA
Z21haWwuY29tPgotICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02Nyw3
ICs2Nyw4IEBAIEpTQmlnSW50OjpKU0JpZ0ludChWTSYgdm0sIFN0cnVjdHVyZSogc3QKICAgICAs
IG1fZGF0YSh2bSwgdGhpcywgZGF0YSwgbGVuZ3RoKQogeyB9CiAKLXZvaWQgSlNCaWdJbnQ6OnZp
c2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRl
PHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTQmlnSW50Ojp2aXNpdENoaWxkcmVuSW1wbChKU0Nl
bGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpz
Q2FzdDxKU0JpZ0ludCo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhp
c09iamVjdCwgaW5mbygpKTsKQEAgLTc2LDYgKzc3LDggQEAgdm9pZCBKU0JpZ0ludDo6dmlzaXRD
aGlsZHJlbihKU0NlbGwqIGNlbAogICAgICAgICB2aXNpdG9yLm1hcmtBdXhpbGlhcnkoZGF0YSk7
CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU0JpZ0ludCk7CisKIHZvaWQgSlNCaWdJbnQ6
OmluaXRpYWxpemUoSW5pdGlhbGl6YXRpb25UeXBlIGluaXRUeXBlKQogewogICAgIGlmIChpbml0
VHlwZSA9PSBJbml0aWFsaXphdGlvblR5cGU6OldpdGhaZXJvKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNCaWdJbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0JpZ0ludC5oCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JpZ0ludC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYg
KzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxNyBDYWlvIExpbWEgPHRpY2Fpb2xpbWFA
Z21haWwuY29tPgotICogQ29weXJpZ2h0IChDKSAyMDE5LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE5LTIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01MCw3
ICs1MCw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVy
ZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBTdHJ1Y3R1cmVJc0ltbW9ydGFsIHwgT3Zl
cnJpZGVzVG9UaGlzOwogICAgIGZyaWVuZCBjbGFzcyBDYWNoZWRCaWdJbnQ7CiAKLSAgICBzdGF0
aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFS
RV9WSVNJVF9DSElMRFJFTjsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJz
cGFjZUFjY2Vzcz4KICAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQm91bmRGdW5jdGlvbi5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCb3VuZEZ1bmN0
aW9uLmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNCb3VuZEZ1bmN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI0OSw3ICsy
NDksOCBAQCB2b2lkIEpTQm91bmRGdW5jdGlvbjo6ZmluaXNoQ3JlYXRpb24oVk0mCiAgICAgQVNT
RVJUKGluaGVyaXRzKHZtLCBpbmZvKCkpKTsKIH0KIAotdm9pZCBKU0JvdW5kRnVuY3Rpb246OnZp
c2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRl
PHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTQm91bmRGdW5jdGlvbjo6dmlzaXRDaGlsZHJlbklt
cGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTQm91bmRGdW5jdGlv
biogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0JvdW5kRnVuY3Rpb24qPihjZWxsKTsKICAgICBBU1NF
UlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC0yNjEsNCArMjYy
LDYgQEAgdm9pZCBKU0JvdW5kRnVuY3Rpb246OnZpc2l0Q2hpbGRyZW4oSlNDZQogICAgIHZpc2l0
b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fbmFtZU1heUJlTnVsbCk7CiB9CiAKK0RFRklORV9WSVNJ
VF9DSElMRFJFTihKU0JvdW5kRnVuY3Rpb24pOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQm91bmRGdW5jdGlvbi5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQm91bmRGdW5jdGlvbi5oCShy
ZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JvdW5k
RnVuY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTEtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTEtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTg0LDcgKzg0LDcgQEAgcHJpdmF0ZToKICAg
ICBKU0JvdW5kRnVuY3Rpb24oVk0mLCBOYXRpdmVFeGVjdXRhYmxlKiwgSlNHbG9iYWxPYmplY3Qq
LCBTdHJ1Y3R1cmUqLCBKU09iamVjdCogdGFyZ2V0RnVuY3Rpb24sIEpTVmFsdWUgYm91bmRUaGlz
LCBKU0ltbXV0YWJsZUJ1dHRlcmZseSogYm91bmRBcmdzLCBKU1N0cmluZyogbmFtZU1heUJlTnVs
bCwgZG91YmxlIGxlbmd0aCk7CiAKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7Ci0gICAg
c3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERF
Q0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBXcml0ZUJhcnJpZXI8SlNPYmplY3Q+IG1fdGFy
Z2V0RnVuY3Rpb247CiAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+IG1fYm91bmRUaGlzOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDYWxsZWUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2FsbGVlLmNwcAkocmV2aXNpb24g
MjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDYWxsZWUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCwg
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTQtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTUwLDcgKzUwLDggQEAgdm9pZCBKU0NhbGxlZTo6ZmluaXNoQ3Jl
YXRpb24oVk0mIHZtKQogICAgIEFTU0VSVChpbmhlcml0cyh2bSwgaW5mbygpKSk7CiB9CiAKLXZv
aWQgSlNDYWxsZWU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlz
aXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTQ2FsbGVlOjp2aXNpdENo
aWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNDYWxs
ZWUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNDYWxsZWUqPihjZWxsKTsKICAgICBBU1NFUlRfR0Nf
T0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC01OSw0ICs2MCw2IEBAIHZv
aWQgSlNDYWxsZWU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWwKICAgICB2aXNpdG9yLmFwcGVu
ZCh0aGlzT2JqZWN0LT5tX3Njb3BlKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTQ2Fs
bGVlKTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0NhbGxlZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTQ2FsbGVlLmgJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTQ2FsbGVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTAwLDcgKzEwMCw3IEBAIHBy
b3RlY3RlZDoKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7CiAgICAgdXNpbmcgQmFzZTo6
ZmluaXNoQ3JlYXRpb247CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCos
IFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogcHJpdmF0ZToK
ICAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEs
NyBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMSBIYXJyaSBQb3J0ZW4gKHBvcnRl
bkBrZGUub3JnKQogICogIENvcHlyaWdodCAoQykgMjAwMSBQZXRlciBLZWxseSAocG1rQHBvc3Qu
Y29tKQotICogIENvcHlyaWdodCAoQykgMjAwMy0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMzIsNiArMzIsNyBAQAogI2lu
Y2x1ZGUgIkpTTG9jay5oIgogI2luY2x1ZGUgIkpTVHlwZUluZm8uaCIKICNpbmNsdWRlICJTbG90
VmlzaXRvci5oIgorI2luY2x1ZGUgIlNsb3RWaXNpdG9yTWFjcm9zLmgiCiAjaW5jbHVkZSAiU3Vi
c3BhY2VBY2Nlc3MuaCIKICNpbmNsdWRlICJUeXBlZEFycmF5VHlwZS5oIgogI2luY2x1ZGUgIldy
aXRlQmFycmllci5oIgpAQCAtMTY3LDggKzE2OCw4IEBAIHB1YmxpYzoKICAgICBzaXplX3QgZXN0
aW1hdGVkU2l6ZUluQnl0ZXMoVk0mKSBjb25zdDsKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0
aWMgc2l6ZV90IGVzdGltYXRlZFNpemUoSlNDZWxsKiwgVk0mKTsKIAotICAgIHN0YXRpYyB2b2lk
IHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKLSAgICBzdGF0aWMgdm9pZCB2
aXNpdE91dHB1dENvbnN0cmFpbnRzKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFS
RV9WSVNJVF9DSElMRFJFTl9XSVRIX01PRElGSUVSKGlubGluZSk7CisgICAgREVDTEFSRV9WSVNJ
VF9PVVRQVVRfQ09OU1RSQUlOVFNfV0lUSF9NT0RJRklFUihpbmxpbmUpOwogCiAgICAgSlNfRVhQ
T1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgYW5hbHl6ZUhlYXAoSlNDZWxsKiwgSGVhcEFuYWx5emVy
Jik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbElubGluZXMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGxJbmxp
bmVzLmgJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTQ2VsbElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTItMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI1LDYgKzI1LDcgQEAKIAogI3By
YWdtYSBvbmNlCiAKKyNpbmNsdWRlICJBYnN0cmFjdFNsb3RWaXNpdG9ySW5saW5lcy5oIgogI2lu
Y2x1ZGUgIkFsbG9jYXRvckZvck1vZGUuaCIKICNpbmNsdWRlICJBbGxvY2F0b3JJbmxpbmVzLmgi
CiAjaW5jbHVkZSAiQ29tcGxldGVTdWJzcGFjZUlubGluZXMuaCIKQEAgLTE0MSwxNSArMTQyLDIx
IEBAIEFMV0FZU19JTkxJTkUgU3RydWN0dXJlKiBKU0NlbGw6OnN0cnVjdHUKICAgICByZXR1cm4g
dm0uZ2V0U3RydWN0dXJlKG1fc3RydWN0dXJlSUQpOwogfQogCi1pbmxpbmUgdm9pZCBKU0NlbGw6
OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBs
YXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTQ2VsbDo6dmlzaXRDaGlsZHJlbkltcGwoSlND
ZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJy
aWVyZWQoY2VsbC0+c3RydWN0dXJlKHZpc2l0b3Iudm0oKSkpOwogfQogCi1pbmxpbmUgdm9pZCBK
U0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHMoSlNDZWxsKiwgU2xvdFZpc2l0b3ImKQorREVG
SU5FX1ZJU0lUX0NISUxEUkVOX1dJVEhfTU9ESUZJRVIoaW5saW5lLCBKU0NlbGwpOworCit0ZW1w
bGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgorQUxXQVlTX0lOTElORSB2b2lkIEpTQ2VsbDo6dmlzaXRP
dXRwdXRDb25zdHJhaW50c0ltcGwoSlNDZWxsKiwgVmlzaXRvciYpCiB7CiB9CiAKK0RFRklORV9W
SVNJVF9PVVRQVVRfQ09OU1RSQUlOVFNfV0lUSF9NT0RJRklFUihpbmxpbmUsIEpTQ2VsbCk7CisK
IEFMV0FZU19JTkxJTkUgVk0mIENhbGxGcmFtZTo6ZGVwcmVjYXRlZFZNKCkgY29uc3QKIHsKICAg
ICBKU0NlbGwqIGNhbGxlZSA9IHRoaXMtPmNhbGxlZSgpLmFzQ2VsbCgpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGaW5hbGl6YXRpb25SZWdpc3RyeS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGaW5hbGl6YXRpb25SZWdp
c3RyeS5jcHAJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTRmluYWxpemF0aW9uUmVnaXN0cnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIwLTIwMjEgQXBwbGUsIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYsNiArMjYs
NyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkpTRmluYWxpemF0aW9uUmVnaXN0
cnkuaCIKIAorI2luY2x1ZGUgIkFic3RyYWN0U2xvdFZpc2l0b3IuaCIKICNpbmNsdWRlICJEZWZl
cnJlZFdvcmtUaW1lci5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJKU0lu
dGVybmFsRmllbGRPYmplY3RJbXBsSW5saW5lcy5oIgpAQCAtNjAsNyArNjEsOCBAQCB2b2lkIEpT
RmluYWxpemF0aW9uUmVnaXN0cnk6OmZpbmlzaENyZWF0CiAgICAgZ2xvYmFsT2JqZWN0LT5nbG9i
YWxPYmplY3RNZXRob2RUYWJsZSgpLT5jdXJyZW50U2NyaXB0RXhlY3V0aW9uT3duZXIoZ2xvYmFs
T2JqZWN0KTsKIH0KIAotdm9pZCBKU0ZpbmFsaXphdGlvblJlZ2lzdHJ5Ojp2aXNpdENoaWxkcmVu
KEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPgordm9pZCBKU0ZpbmFsaXphdGlvblJlZ2lzdHJ5Ojp2aXNpdENoaWxkcmVuSW1wbChK
U0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgQmFzZTo6dmlzaXRDaGlsZHJl
bihjZWxsLCB2aXNpdG9yKTsKIApAQCAtODAsMTMgKzgyLDE1IEBAIHZvaWQgSlNGaW5hbGl6YXRp
b25SZWdpc3RyeTo6dmlzaXRDaGlsZHIKICAgICBmb3IgKGF1dG8mIGhvbGRpbmdzIDogdGhpc09i
amVjdC0+bV9ub1VucmVnaXN0cmF0aW9uRGVhZCkKICAgICAgICAgdmlzaXRvci5hcHBlbmQoaG9s
ZGluZ3MpOwogCi0gICAgc2l6ZV90IHRvdGFsQnVmZmVyU2l6ZXNJbkJ5dGVzID0gdGhpc09iamVj
dC0+bV9kZWFkUmVnaXN0cmF0aW9ucy5jYXBhY2l0eSgpICogc2l6ZW9mKGRlY2x0eXBlKHRoaXNP
YmplY3QtPm1fZGVhZFJlZ2lzdHJhdGlvbnMpOjpLZXlWYWx1ZVBhaXJUeXBlKTsKLSAgICB0b3Rh
bEJ1ZmZlclNpemVzSW5CeXRlcyArPSB0aGlzT2JqZWN0LT5tX2xpdmVSZWdpc3RyYXRpb25zLmNh
cGFjaXR5KCkgKiBzaXplb2YoZGVjbHR5cGUodGhpc09iamVjdC0+bV9kZWFkUmVnaXN0cmF0aW9u
cyk6OktleVZhbHVlUGFpclR5cGUpOworICAgIHNpemVfdCB0b3RhbEJ1ZmZlclNpemVzSW5CeXRl
cyA9IHRoaXNPYmplY3QtPm1fZGVhZFJlZ2lzdHJhdGlvbnMuY2FwYWNpdHkoKSAqIHNpemVvZih0
eXBlbmFtZSBkZWNsdHlwZSh0aGlzT2JqZWN0LT5tX2RlYWRSZWdpc3RyYXRpb25zKTo6S2V5VmFs
dWVQYWlyVHlwZSk7CisgICAgdG90YWxCdWZmZXJTaXplc0luQnl0ZXMgKz0gdGhpc09iamVjdC0+
bV9saXZlUmVnaXN0cmF0aW9ucy5jYXBhY2l0eSgpICogc2l6ZW9mKHR5cGVuYW1lIGRlY2x0eXBl
KHRoaXNPYmplY3QtPm1fZGVhZFJlZ2lzdHJhdGlvbnMpOjpLZXlWYWx1ZVBhaXJUeXBlKTsKICAg
ICB0b3RhbEJ1ZmZlclNpemVzSW5CeXRlcyArPSB0aGlzT2JqZWN0LT5tX25vVW5yZWdpc3RyYXRp
b25MaXZlLmNhcGFjaXR5KCkgKiBzaXplb2YoZGVjbHR5cGUodGhpc09iamVjdC0+bV9ub1VucmVn
aXN0cmF0aW9uTGl2ZS50YWtlTGFzdCgpKSk7CiAgICAgdG90YWxCdWZmZXJTaXplc0luQnl0ZXMg
Kz0gdGhpc09iamVjdC0+bV9ub1VucmVnaXN0cmF0aW9uRGVhZC5jYXBhY2l0eSgpICogc2l6ZW9m
KGRlY2x0eXBlKHRoaXNPYmplY3QtPm1fbm9VbnJlZ2lzdHJhdGlvbkxpdmUudGFrZUxhc3QoKSkp
OwogICAgIHZpc2l0b3Iudm0oKS5oZWFwLnJlcG9ydEV4dHJhTWVtb3J5VmlzaXRlZCh0b3RhbEJ1
ZmZlclNpemVzSW5CeXRlcyk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU0ZpbmFsaXph
dGlvblJlZ2lzdHJ5KTsKKwogdm9pZCBKU0ZpbmFsaXphdGlvblJlZ2lzdHJ5OjpkZXN0cm95KEpT
Q2VsbCogdGFibGUpCiB7CiAgICAgc3RhdGljX2Nhc3Q8SlNGaW5hbGl6YXRpb25SZWdpc3RyeSo+
KHRhYmxlKS0+fkpTRmluYWxpemF0aW9uUmVnaXN0cnkoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTRmluYWxpemF0aW9uUmVnaXN0cnkuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ZpbmFsaXphdGlvblJlZ2lzdHJ5LmgJKHJl
dmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRmluYWxp
emF0aW9uUmVnaXN0cnkuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAyMC0yMDIxIEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTcwLDcgKzcwLDcgQEAgcHVibGljOgog
ICAgIERFQ0xBUkVfRVhQT1JUX0lORk87CiAKICAgICB2b2lkIGZpbmFsaXplVW5jb25kaXRpb25h
bGx5KFZNJik7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90Vmlz
aXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAgICAgc3RhdGljIHZvaWQgZGVz
dHJveShKU0NlbGwqKTsKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNEZXN0cnVjdGlv
biA9IHRydWU7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rp
b24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVu
Y3Rpb24uY3BwCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0Z1bmN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw3ICsxLDcgQEAKIC8qCiAg
KiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDIgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykK
ICAqICBDb3B5cmlnaHQgKEMpIDIwMDEgUGV0ZXIgS2VsbHkgKHBta0Bwb3N0LmNvbSkKLSAqICBD
b3B5cmlnaHQgKEMpIDIwMDMtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICogIENvcHlyaWdodCAoQykgMjAwNyBDYW1lcm9uIFp3YXJpY2ggKGN3endhcmljaEB1d2F0
ZXJsb28uY2EpCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA3IE1ha3MgT3Jsb3ZpY2gKICAqICBDb3B5
cmlnaHQgKEMpIDIwMTUgQ2Fub24gSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgpAQCAtMjUyLDcg
KzI1Miw4IEBAIGNvbnN0IFNvdXJjZUNvZGUqIEpTRnVuY3Rpb246OnNvdXJjZUNvZGUKICAgICBy
ZXR1cm4gJmpzRXhlY3V0YWJsZSgpLT5zb3VyY2UoKTsKIH0KICAgICAKLXZvaWQgSlNGdW5jdGlv
bjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVt
cGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNGdW5jdGlvbjo6dmlzaXRDaGlsZHJlbklt
cGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTRnVuY3Rpb24qIHRo
aXNPYmplY3QgPSBqc0Nhc3Q8SlNGdW5jdGlvbio+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpF
Q1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTI2MSw2ICsyNjIsOCBAQCB2b2lk
IEpTRnVuY3Rpb246OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjCiAgICAgdmlzaXRvci5hcHBlbmRV
bmJhcnJpZXJlZChiaXR3aXNlX2Nhc3Q8SlNDZWxsKj4oYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4o
dGhpc09iamVjdC0+bV9leGVjdXRhYmxlT3JSYXJlRGF0YSkgJiB+cmFyZURhdGFUYWcpKTsKIH0K
IAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTRnVuY3Rpb24pOworCiBDYWxsRGF0YSBKU0Z1bmN0
aW9uOjpnZXRDYWxsRGF0YShKU0NlbGwqIGNlbGwpCiB7CiAgICAgLy8gS2VlcCB0aGlzIGZ1bmN0
aW9uIE9LIGZvciBpbnZvY2F0aW9uIGZyb20gY29uY3VycmVudCBjb21waWxlcnMuCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5oCShyZXZpc2lvbiAyNzI5
MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAw
IEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIw
MjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAw
My0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqICBDb3B5cmlnaHQgKEMp
IDIwMDcgQ2FtZXJvbiBad2FyaWNoIChjd3p3YXJpY2hAdXdhdGVybG9vLmNhKQogICogIENvcHly
aWdodCAoQykgMjAwNyBNYWtzIE9ybG92aWNoCiAgKgpAQCAtMTgwLDcgKzE4MCw3IEBAIHByb3Rl
Y3RlZDoKIAogICAgIHN0YXRpYyBib29sIGRlbGV0ZVByb3BlcnR5KEpTQ2VsbCosIEpTR2xvYmFs
T2JqZWN0KiwgUHJvcGVydHlOYW1lLCBEZWxldGVQcm9wZXJ0eVNsb3QmKTsKIAotICAgIHN0YXRp
YyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJF
X1ZJU0lUX0NISUxEUkVOOwogCiBwcml2YXRlOgogICAgIHN0YXRpYyBKU0Z1bmN0aW9uKiBjcmVh
dGVJbXBsKFZNJiB2bSwgRnVuY3Rpb25FeGVjdXRhYmxlKiBleGVjdXRhYmxlLCBKU1Njb3BlKiBz
Y29wZSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0dlbmVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOS0yMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTks
MTEgKzU5LDE0IEBAIHZvaWQgSlNHZW5lcmF0b3I6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKICAg
ICAgICAgaW50ZXJuYWxGaWVsZChpbmRleCkuc2V0KHZtLCB0aGlzLCB2YWx1ZXNbaW5kZXhdKTsK
IH0KIAotdm9pZCBKU0dlbmVyYXRvcjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNHZW5l
cmF0b3I6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikK
IHsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTR2VuZXJhdG9yKj4oY2VsbCk7CiAg
ICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwogICAgIEJh
c2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CiB9CiAKK0RFRklORV9WSVNJ
VF9DSElMRFJFTihKU0dlbmVyYXRvcik7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmF0b3IuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyYXRvci5oCShyZXZpc2lvbiAyNzI5
MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyYXRvci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTk0LDcgKzk0LDcgQEAgcHVibGljOgogCiAgICAgREVDTEFSRV9FWFBPUlRfSU5G
TzsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3Im
KTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiBwcml2YXRlOgogICAgIEpTR2VuZXJh
dG9yKFZNJiwgU3RydWN0dXJlKik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmgJKHJldmlzaW9uIDI3Mjkw
MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlW
aWV3LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMTMsNyArMzEzLDcgQEAgcHJpdmF0ZToKICAgICBz
dGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3Qq
LCBQcm9wZXJ0eU5hbWVBcnJheSYsIERvbnRFbnVtUHJvcGVydGllc01vZGUpOwogCiAgICAgc3Rh
dGljIHNpemVfdCBlc3RpbWF0ZWRTaXplKEpTQ2VsbCosIFZNJik7Ci0gICAgc3RhdGljIHZvaWQg
dmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRf
Q0hJTERSRU47CiAKICAgICAvLyBSZXR1cm5zIHRydWUgaWYgc3VjY2Vzc2Z1bCwgYW5kIGZhbHNl
IG9uIGVycm9yOyBpdCB3aWxsIHRocm93IG9uIGVycm9yLgogICAgIHRlbXBsYXRlPHR5cGVuYW1l
IE90aGVyQWRhcHRvcj4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oCShyZXZpc2lv
biAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBl
ZEFycmF5Vmlld0lubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTUxNyw3ICs1MTcsOCBAQCBz
aXplX3QgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46CiB9CiAKIHRlbXBsYXRlPHR5
cGVuYW1lIEFkYXB0b3I+Ci12b2lkIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+Ojp2
aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0
ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9y
Pjo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewog
ICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTR2VuZXJp
Y1R5cGVkQXJyYXlWaWV3Kj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0
aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNTU1LDQgKzU1Niw2IEBAIHZvaWQgSlNHZW5lcmljVHlw
ZWRBcnJheVZpZXc8QWRhcHRvcj46OnYKICAgICB9CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJF
Tl9XSVRIX01PRElGSUVSKHRlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+LCBKU0dlbmVyaWNUeXBl
ZEFycmF5VmlldzxBZGFwdG9yPik7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAkocmV2aXNp
b24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmpl
Y3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAwNy0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAwNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHly
aWdodCAoQykgMjAwOCBDYW1lcm9uIFp3YXJpY2ggKGN3endhcmljaEB1d2F0ZXJsb28uY2EpCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CkBAIC0xODk5LDcgKzE4OTksOCBAQCB2b2lkIEpTR2xvYmFsT2JqZWN0
OjpyZXNldFByb3RvdHlwZShWTSYgCiAgICAgc2V0R2xvYmFsVGhpcyh2bSwgSlNQcm94eTo6Y3Jl
YXRlKHZtLCBKU1Byb3h5OjpjcmVhdGVTdHJ1Y3R1cmUodm0sIHRoaXMsIHByb3RvdHlwZSwgUHVy
ZUZvcndhcmRpbmdQcm94eVR5cGUpLCB0aGlzKSk7CiB9CiAKLXZvaWQgSlNHbG9iYWxPYmplY3Q6
OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBs
YXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTR2xvYmFsT2JqZWN0Ojp2aXNpdENoaWxkcmVu
SW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7IAogICAgIEpTR2xvYmFsT2Jq
ZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTR2xvYmFsT2JqZWN0Kj4oY2VsbCk7CiAgICAgQVNT
RVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtMjA2OCw2ICsy
MDY5LDggQEAgdm9pZCBKU0dsb2JhbE9iamVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbAogICAgIHRo
aXNPYmplY3QtPm1fcmVnRXhwR2xvYmFsRGF0YS52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKIH0K
IAorREVGSU5FX1ZJU0lUX0NISUxEUkVOX1dJVEhfTU9ESUZJRVIoSlNfRVhQT1JUX1BSSVZBVEUs
IEpTR2xvYmFsT2JqZWN0KTsKKwogQ2FsbEZyYW1lKiBKU0dsb2JhbE9iamVjdDo6ZGVwcmVjYXRl
ZENhbGxGcmFtZUZvckRlYnVnZ2VyKCkKIHsKICAgICByZXR1cm4gQ2FsbEZyYW1lOjpjcmVhdGUo
bV9kZXByZWNhdGVkQ2FsbEZyYW1lRm9yRGVidWdnZXIpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCShyZXZpc2lvbiAyNzI5MDIpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDIwMDcgRXJpYyBT
ZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KLSAqICBDb3B5cmlnaHQgKEMpIDIwMDctMjAyMCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDA3LTIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAg
LTYxNyw3ICs2MTcsNyBAQCBwdWJsaWM6CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgfkpTR2xvYmFs
T2JqZWN0KCk7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgZGVzdHJveShKU0Nl
bGwqKTsKIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4o
SlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOX1dJVEhf
TU9ESUZJRVIoSlNfRVhQT1JUX1BSSVZBVEUpOwogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3Rh
dGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQ
cm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRp
YyBib29sIHB1dChKU0NlbGwqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSwgSlNWYWx1
ZSwgUHV0UHJvcGVydHlTbG90Jik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0ltbXV0YWJsZUJ1dHRlcmZseS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNJbW11dGFibGVCdXR0ZXJmbHkuY3BwCShyZXZpc2lvbiAyNzI5MDIp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ltbXV0YWJsZUJ1dHRlcmZseS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
OC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMzIsNyArMzIsOCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogY29uc3Qg
Q2xhc3NJbmZvIEpTSW1tdXRhYmxlQnV0dGVyZmx5OjpzX2luZm8gPSB7ICJJbW11dGFibGUgQnV0
dGVyZmx5IiwgbnVsbHB0ciwgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShK
U0ltbXV0YWJsZUJ1dHRlcmZseSkgfTsKIAotdm9pZCBKU0ltbXV0YWJsZUJ1dHRlcmZseTo6dmlz
aXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8
dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNJbW11dGFibGVCdXR0ZXJmbHk6OnZpc2l0Q2hpbGRy
ZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBBU1NFUlRfR0Nf
T0JKRUNUX0lOSEVSSVRTKGNlbGwsIGluZm8oKSk7CiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbihj
ZWxsLCB2aXNpdG9yKTsKQEAgLTQ1LDYgKzQ2LDggQEAgdm9pZCBKU0ltbXV0YWJsZUJ1dHRlcmZs
eTo6dmlzaXRDaGlsZHJlbgogICAgIHZpc2l0b3IuYXBwZW5kVmFsdWVzSGlkZGVuKGJ1dHRlcmZs
eS0+Y29udGlndW91cygpLmRhdGEoKSwgYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKSk7CiB9CiAK
K0RFRklORV9WSVNJVF9DSElMRFJFTihKU0ltbXV0YWJsZUJ1dHRlcmZseSk7CisKIHZvaWQgSlNJ
bW11dGFibGVCdXR0ZXJmbHk6OmNvcHlUb0FyZ3VtZW50cyhKU0dsb2JhbE9iamVjdCosIEpTVmFs
dWUqIGZpcnN0RWxlbWVudERlc3QsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQog
ewogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbW11dGFibGVCdXR0ZXJmbHkuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ltbXV0YWJsZUJ1dHRlcmZs
eS5oCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0ltbXV0YWJsZUJ1dHRlcmZseS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxOC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTQ1LDcgKzE0NSw3IEBA
IHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGpzRG91YmxlTnVtYmVyKHZhbHVlKTsKICAgICB9CiAK
LSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7Cisg
ICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIHZvaWQgY29weVRvQXJndW1lbnRzKEpT
R2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSogZmlyc3RFbGVtZW50RGVzdCwgdW5zaWduZWQgb2Zmc2V0
LCB1bnNpZ25lZCBsZW5ndGgpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0ludGVybmFsRmllbGRPYmplY3RJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbC5oCShyZXZpc2lvbiAy
NzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ludGVybmFsRmllbGRP
YmplY3RJbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxOS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjYsNyArNjYsNyBAQCBwdWJsaWM6CiAgICAgc3Rh
dGljIHB0cmRpZmZfdCBvZmZzZXRPZkludGVybmFsRmllbGQodW5zaWduZWQgaW5kZXgpIHsgcmV0
dXJuIE9CSkVDVF9PRkZTRVRPRihKU0ludGVybmFsRmllbGRPYmplY3RJbXBsLCBtX2ludGVybmFs
RmllbGRzKSArIGluZGV4ICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPik7IH0KIAogcHJv
dGVjdGVkOgotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0
b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgSlNJbnRlcm5hbEZpZWxk
T2JqZWN0SW1wbChWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQogICAgICAgICA6IEJhc2Uo
dm0sIHN0cnVjdHVyZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTSW50
ZXJuYWxGaWVsZE9iamVjdEltcGxJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbElubGluZXMuaAkocmV2
aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbnRlcm5h
bEZpZWxkT2JqZWN0SW1wbElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE5LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMCw3ICszMCw4IEBACiBu
YW1lc3BhY2UgSlNDIHsKIAogdGVtcGxhdGU8dW5zaWduZWQgcGFzc2VkTnVtYmVyT2ZJbnRlcm5h
bEZpZWxkcz4KLXZvaWQgSlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbDxwYXNzZWROdW1iZXJPZklu
dGVybmFsRmllbGRzPjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNJbnRlcm5hbEZpZWxk
T2JqZWN0SW1wbDxwYXNzZWROdW1iZXJPZkludGVybmFsRmllbGRzPjo6dmlzaXRDaGlsZHJlbklt
cGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGF1dG8qIHRoaXNPYmpl
Y3QgPSBqc0Nhc3Q8SlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbCo+KGNlbGwpOwogICAgIEFTU0VS
VF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTM4LDQgKzM5LDYg
QEAgdm9pZCBKU0ludGVybmFsRmllbGRPYmplY3RJbXBsPHBhc3NlZE51bQogICAgIHZpc2l0b3Iu
YXBwZW5kVmFsdWVzKHRoaXNPYmplY3QtPm1faW50ZXJuYWxGaWVsZHMsIG51bWJlck9mSW50ZXJu
YWxGaWVsZHMpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU5fV0lUSF9NT0RJRklFUih0ZW1w
bGF0ZTx1bnNpZ25lZCBwYXNzZWROdW1iZXJPZkludGVybmFsRmllbGRzPiwgSlNJbnRlcm5hbEZp
ZWxkT2JqZWN0SW1wbDxwYXNzZWROdW1iZXJPZkludGVybmFsRmllbGRzPik7CisKIH0gLy8gbmFt
ZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMZXhpY2Fs
RW52aXJvbm1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTTGV4aWNhbEVudmlyb25tZW50LmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMZXhpY2FsRW52aXJvbm1lbnQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOC0yMDE5IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMzYsNyArMzYsOCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogY29uc3QgQ2xhc3NJ
bmZvIEpTTGV4aWNhbEVudmlyb25tZW50OjpzX2luZm8gPSB7ICJKU0xleGljYWxFbnZpcm9ubWVu
dCIsICZCYXNlOjpzX2luZm8sIG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUo
SlNMZXhpY2FsRW52aXJvbm1lbnQpIH07CiAKLXZvaWQgSlNMZXhpY2FsRW52aXJvbm1lbnQ6OnZp
c2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRl
PHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTTGV4aWNhbEVudmlyb25tZW50Ojp2aXNpdENoaWxk
cmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0byogdGhp
c09iamVjdCA9IGpzQ2FzdDxKU0xleGljYWxFbnZpcm9ubWVudCo+KGNlbGwpOwogICAgIEFTU0VS
VF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTQ0LDYgKzQ1LDgg
QEAgdm9pZCBKU0xleGljYWxFbnZpcm9ubWVudDo6dmlzaXRDaGlsZHJlbgogICAgIHZpc2l0b3Iu
YXBwZW5kVmFsdWVzSGlkZGVuKHRoaXNPYmplY3QtPnZhcmlhYmxlcygpLCB0aGlzT2JqZWN0LT5z
eW1ib2xUYWJsZSgpLT5zY29wZVNpemUoKSk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihK
U0xleGljYWxFbnZpcm9ubWVudCk7CisKIHZvaWQgSlNMZXhpY2FsRW52aXJvbm1lbnQ6OmFuYWx5
emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFuYWx5emVyJiBhbmFseXplcikKIHsKICAgICBhdXRv
KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTTGV4aWNhbEVudmlyb25tZW50Kj4oY2VsbCk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xleGljYWxFbnZpcm9ubWVudC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTGV4aWNhbEVudmly
b25tZW50LmgJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTTGV4aWNhbEVudmlyb25tZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMzQsNyArMTM0
LDcgQEAgcHJvdGVjdGVkOgogICAgICAgICB9CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgdmlz
aXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJ
TERSRU47CiAgICAgc3RhdGljIHZvaWQgYW5hbHl6ZUhlYXAoSlNDZWxsKiwgSGVhcEFuYWx5emVy
Jik7CiB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01hcEl0ZXJh
dG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01h
cEl0ZXJhdG9yLmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNNYXBJdGVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTcgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIxIEFwcGxlLCBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU3LDEzICs1
NywxNiBAQCB2b2lkIEpTTWFwSXRlcmF0b3I6OmZpbmlzaENyZWF0aW9uKFZNJiB2CiAgICAgICAg
IEJhc2U6OmludGVybmFsRmllbGQoaW5kZXgpLnNldCh2bSwgdGhpcywgdmFsdWVzW2luZGV4XSk7
CiB9CiAKLXZvaWQgSlNNYXBJdGVyYXRvcjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNN
YXBJdGVyYXRvcjo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNp
dG9yKQogewogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNNYXBJdGVyYXRvcio+KGNl
bGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsK
ICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwogfQogCitERUZJ
TkVfVklTSVRfQ0hJTERSRU4oSlNNYXBJdGVyYXRvcik7CisKIEpTVmFsdWUgSlNNYXBJdGVyYXRv
cjo6Y3JlYXRlUGFpcihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIGtleSwg
SlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdzOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNYXBJdGVyYXRvci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTWFwSXRlcmF0b3IuaAkocmV2aXNp
b24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNYXBJdGVyYXRv
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMywgMjAxNiBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMjEgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTQyLDcgKzE0Miw3IEBAIHByaXZhdGU6CiAgICAg
SlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIEpTTWFwKiwgSXRlcmF0
aW9uS2luZCk7CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOwogICAgIEpTVmFsdWUgY3Jl
YXRlUGFpcihKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUsIEpTVmFsdWUpOwotICAgIHN0YXRpYyB2
b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJ
U0lUX0NISUxEUkVOOwogfTsKIFNUQVRJQ19BU1NFUlRfSVNfVFJJVklBTExZX0RFU1RSVUNUSUJM
RShKU01hcEl0ZXJhdG9yKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNNb2R1bGVFbnZpcm9ubWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNNb2R1bGVFbnZpcm9ubWVudC5jcHAJKHJldmlzaW9uIDI3MjkwMikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlRW52aXJvbm1lbnQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0y
MDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
NS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtNjUsNyArNjUsOCBAQCB2b2lkIEpTTW9kdWxlRW52aXJvbm1lbnQ6
OmZpbmlzaENyZWF0aW9uCiAgICAgdGhpcy0+bW9kdWxlUmVjb3JkU2xvdCgpLnNldCh2bSwgdGhp
cywgbW9kdWxlUmVjb3JkKTsKIH0KIAotdm9pZCBKU01vZHVsZUVudmlyb25tZW50Ojp2aXNpdENo
aWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBl
bmFtZSBWaXNpdG9yPgordm9pZCBKU01vZHVsZUVudmlyb25tZW50Ojp2aXNpdENoaWxkcmVuSW1w
bChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNNb2R1bGVFbnZpcm9u
bWVudCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU01vZHVsZUVudmlyb25tZW50Kj4oY2VsbCk7CiAg
ICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNzQs
NiArNzUsOCBAQCB2b2lkIEpTTW9kdWxlRW52aXJvbm1lbnQ6OnZpc2l0Q2hpbGRyZW4oCiAgICAg
dmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bW9kdWxlUmVjb3JkU2xvdCgpKTsKIH0KIAorREVG
SU5FX1ZJU0lUX0NISUxEUkVOKEpTTW9kdWxlRW52aXJvbm1lbnQpOworCiBib29sIEpTTW9kdWxl
RW52aXJvbm1lbnQ6OmdldE93blByb3BlcnR5U2xvdChKU09iamVjdCogY2VsbCwgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlT
bG90JiBzbG90KQogewogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlRW52aXJvbm1lbnQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZUVudmlyb25tZW50
LmgJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
TW9kdWxlRW52aXJvbm1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTg5LDcgKzg5LDcgQEAgcHJp
dmF0ZToKICAgICAgICAgcmV0dXJuICpiaXR3aXNlX2Nhc3Q8V3JpdGVCYXJyaWVyQmFzZTxBYnN0
cmFjdE1vZHVsZVJlY29yZD4qPihiaXR3aXNlX2Nhc3Q8Y2hhcio+KHRoaXMpICsgb2Zmc2V0T2ZN
b2R1bGVSZWNvcmQoc3ltYm9sVGFibGUoKSkpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIHZp
c2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NI
SUxEUkVOOwogfTsKIAogaW5saW5lIEpTTW9kdWxlRW52aXJvbm1lbnQ6OkpTTW9kdWxlRW52aXJv
bm1lbnQoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNTY29wZSogY3VycmVudFNjb3Bl
LCBTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU01vZHVsZU5hbWVzcGFjZU9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QuY3BwCShyZXZp
c2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZU5h
bWVzcGFjZU9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDE1LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC04NSw3ICs4NSw4IEBAIHZvaWQg
SlNNb2R1bGVOYW1lc3BhY2VPYmplY3Q6OmRlc3Ryb3koSlMKICAgICB0aGlzT2JqZWN0LT5KU01v
ZHVsZU5hbWVzcGFjZU9iamVjdDo6fkpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0KCk7CiB9CiAKLXZv
aWQgSlNNb2R1bGVOYW1lc3BhY2VPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBT
bG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpT
TW9kdWxlTmFtZXNwYWNlT2JqZWN0Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZp
c2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QqIHRoaXNPYmpl
Y3QgPSBqc0Nhc3Q8SlNNb2R1bGVOYW1lc3BhY2VPYmplY3QqPihjZWxsKTsKICAgICBBU1NFUlRf
R0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC05OCw2ICs5OSw4IEBA
IHZvaWQgSlNNb2R1bGVOYW1lc3BhY2VPYmplY3Q6OnZpc2l0Q2hpbGQKICAgICB9CiB9CiAKK0RF
RklORV9WSVNJVF9DSElMRFJFTihKU01vZHVsZU5hbWVzcGFjZU9iamVjdCk7CisKIHN0YXRpYyBK
U1ZhbHVlIGdldFZhbHVlKEpTTW9kdWxlRW52aXJvbm1lbnQqIGVudmlyb25tZW50LCBQcm9wZXJ0
eU5hbWUgbG9jYWxOYW1lLCBTY29wZU9mZnNldCYgc2NvcGVPZmZzZXQpCiB7CiAgICAgU3ltYm9s
VGFibGUqIHN5bWJvbFRhYmxlID0gZW52aXJvbm1lbnQtPnN5bWJvbFRhYmxlKCk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZU5hbWVzcGFjZU9iamVjdC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlTmFtZXNw
YWNlT2JqZWN0LmgJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTTW9kdWxlTmFtZXNwYWNlT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03Miw3
ICs3Miw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgSlNNb2R1
bGVOYW1lc3BhY2VPYmplY3QoVk0mLCBTdHJ1Y3R1cmUqKTsKICAgICBKU19FWFBPUlRfUFJJVkFU
RSB2b2lkIGZpbmlzaENyZWF0aW9uKEpTR2xvYmFsT2JqZWN0KiwgQWJzdHJhY3RNb2R1bGVSZWNv
cmQqLCBWZWN0b3I8c3RkOjpwYWlyPElkZW50aWZpZXIsIEFic3RyYWN0TW9kdWxlUmVjb3JkOjpS
ZXNvbHV0aW9uPj4mJik7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBT
bG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAgICAgYm9vbCBnZXRP
d25Qcm9wZXJ0eVNsb3RDb21tb24oSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIFByb3Bl
cnR5U2xvdCYpOwogCiAgICAgc3RydWN0IEV4cG9ydEVudHJ5IHsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlUmVjb3JkLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZVJlY29yZC5jcHAJKHJldmlzaW9uIDI3
MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlUmVjb3JkLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTUtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTUtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTcwLDcgKzcwLDggQEAgdm9pZCBKU01vZHVsZVJlY29yZDo6
ZmluaXNoQ3JlYXRpb24oSlNHbAogICAgIEFTU0VSVChpbmhlcml0cyh2bSwgaW5mbygpKSk7CiB9
CiAKLXZvaWQgSlNNb2R1bGVSZWNvcmQ6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90
VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTTW9k
dWxlUmVjb3JkOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0
b3IpCiB7CiAgICAgSlNNb2R1bGVSZWNvcmQqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNNb2R1bGVS
ZWNvcmQqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3Qs
IGluZm8oKSk7CkBAIC03OCw2ICs3OSw4IEBAIHZvaWQgSlNNb2R1bGVSZWNvcmQ6OnZpc2l0Q2hp
bGRyZW4oSlNDZWwKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX21vZHVsZVByb2dy
YW1FeGVjdXRhYmxlKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTTW9kdWxlUmVjb3Jk
KTsKKwogdm9pZCBKU01vZHVsZVJlY29yZDo6bGluayhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBKU1ZhbHVlIHNjcmlwdEZldGNoZXIpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0
LT52bSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVSZWNv
cmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVs
ZVJlY29yZC5oCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU01vZHVsZVJlY29yZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjYsNyArNjYsNyBAQCBw
cml2YXRlOgogCiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0dsb2JhbE9iamVjdCosIFZNJik7
CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7
CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIHZvaWQgaW5zdGFudGlhdGVEZWNs
YXJhdGlvbnMoSlNHbG9iYWxPYmplY3QqLCBNb2R1bGVQcm9ncmFtRXhlY3V0YWJsZSosIEpTVmFs
dWUgc2NyaXB0RmV0Y2hlcik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTTmF0aXZlU3RkRnVuY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTTmF0aXZlU3RkRnVuY3Rpb24uY3BwCShyZXZpc2lvbiAyNzI5MDIpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU05hdGl2ZVN0ZEZ1bmN0aW9uLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTUtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTQxLDEzICs0MSwxNiBAQCBKU05hdGl2ZVN0ZEZ1bmN0aW9uOjpK
U05hdGl2ZVN0ZEZ1bmN0aW9uCiB7CiB9CiAKLXZvaWQgSlNOYXRpdmVTdGRGdW5jdGlvbjo6dmlz
aXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8
dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNOYXRpdmVTdGRGdW5jdGlvbjo6dmlzaXRDaGlsZHJl
bkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTTmF0aXZlU3Rk
RnVuY3Rpb24qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNOYXRpdmVTdGRGdW5jdGlvbio+KGNlbGwp
OwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKICAg
ICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwogfQogCitERUZJTkVf
VklTSVRfQ0hJTERSRU4oSlNOYXRpdmVTdGRGdW5jdGlvbik7CisKIHZvaWQgSlNOYXRpdmVTdGRG
dW5jdGlvbjo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBOYXRpdmVFeGVjdXRhYmxlKiBleGVjdXRh
YmxlLCB1bnNpZ25lZCBsZW5ndGgsIGNvbnN0IFN0cmluZyYgbmFtZSkKIHsKICAgICBCYXNlOjpm
aW5pc2hDcmVhdGlvbih2bSwgZXhlY3V0YWJsZSwgbGVuZ3RoLCBuYW1lKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTmF0aXZlU3RkRnVuY3Rpb24uaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU05hdGl2ZVN0ZEZ1bmN0aW9uLmgJ
KHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTmF0
aXZlU3RkRnVuY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTUtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY1LDcgKzY1LDcgQEAgcHVibGlj
OgogcHJpdmF0ZToKICAgICBKU05hdGl2ZVN0ZEZ1bmN0aW9uKFZNJiwgTmF0aXZlRXhlY3V0YWJs
ZSosIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKiwgTmF0aXZlU3RkRnVuY3Rpb24mJik7CiAg
ICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIE5hdGl2ZUV4ZWN1dGFibGUqLCB1bnNpZ25lZCBs
ZW5ndGgsIGNvbnN0IFN0cmluZyYgbmFtZSk7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJl
bihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAK
ICAgICBOYXRpdmVTdGRGdW5jdGlvbiBtX2Z1bmN0aW9uOwogfTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAJKHJldmlzaW9uIDI3MjkwMikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw3ICsxLDcgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDEgSGFycmkgUG9y
dGVuIChwb3J0ZW5Aa2RlLm9yZykKICAqICBDb3B5cmlnaHQgKEMpIDIwMDEgUGV0ZXIgS2VsbHkg
KHBta0Bwb3N0LmNvbSkKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAyMCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogIENvcHlyaWdodCAoQykgMjAwNyBFcmljIFNlaWRl
bCAoZXJpY0B3ZWJraXQub3JnKQogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBAIC03Myw3ICs3Myw4IEBAIGNvbnN0
IENsYXNzSW5mbyBKU09iamVjdDo6c19pbmZvID0geyAiT2IKIAogY29uc3QgQ2xhc3NJbmZvIEpT
RmluYWxPYmplY3Q6OnNfaW5mbyA9IHsgIk9iamVjdCIsICZCYXNlOjpzX2luZm8sIG51bGxwdHIs
IG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNGaW5hbE9iamVjdCkgfTsKIAotQUxXQVlT
X0lOTElORSB2b2lkIEpTT2JqZWN0OjptYXJrQXV4aWxpYXJ5QW5kVmlzaXRPdXRPZkxpbmVQcm9w
ZXJ0aWVzKFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBCdXR0ZXJmbHkqIGJ1dHRlcmZseSwgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IG1heE9mZnNldCkKK3RlbXBsYXRlPHR5cGVu
YW1lIFZpc2l0b3I+CitBTFdBWVNfSU5MSU5FIHZvaWQgSlNPYmplY3Q6Om1hcmtBdXhpbGlhcnlB
bmRWaXNpdE91dE9mTGluZVByb3BlcnRpZXMoVmlzaXRvciYgdmlzaXRvciwgQnV0dGVyZmx5KiBi
dXR0ZXJmbHksIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBtYXhPZmZzZXQp
CiB7CiAgICAgLy8gV2UgY2FsbCB0aGlzIHdoZW4gd2UgZm91bmQgZXZlcnl0aGluZyB3aXRob3V0
IHJhY2VzLgogICAgIEFTU0VSVChzdHJ1Y3R1cmUpOwpAQCAtMTA0LDcgKzEwNSw4IEBAIEFMV0FZ
U19JTkxJTkUgdm9pZCBKU09iamVjdDo6bWFya0F1eGlsaWEKICAgICB2aXNpdG9yLmFwcGVuZFZh
bHVlc0hpZGRlbihidXR0ZXJmbHktPnByb3BlcnR5U3RvcmFnZSgpIC0gb3V0T2ZMaW5lU2l6ZSwg
b3V0T2ZMaW5lU2l6ZSk7CiB9CiAKLUFMV0FZU19JTkxJTkUgU3RydWN0dXJlKiBKU09iamVjdDo6
dmlzaXRCdXR0ZXJmbHkoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPgorQUxXQVlTX0lOTElORSBTdHJ1Y3R1cmUqIEpTT2JqZWN0Ojp2aXNpdEJ1dHRlcmZs
eShWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCByYWNl
UmVhc29uID0gIkpTT2JqZWN0Ojp2aXNpdEJ1dHRlcmZseSI7CiAgICAgU3RydWN0dXJlKiByZXN1
bHQgPSB2aXNpdEJ1dHRlcmZseUltcGwodmlzaXRvcik7CkBAIC0xMTMsNyArMTE1LDggQEAgQUxX
QVlTX0lOTElORSBTdHJ1Y3R1cmUqIEpTT2JqZWN0Ojp2aXNpdAogICAgIHJldHVybiByZXN1bHQ7
CiB9CiAKLUFMV0FZU19JTkxJTkUgU3RydWN0dXJlKiBKU09iamVjdDo6dmlzaXRCdXR0ZXJmbHlJ
bXBsKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK0FM
V0FZU19JTkxJTkUgU3RydWN0dXJlKiBKU09iamVjdDo6dmlzaXRCdXR0ZXJmbHlJbXBsKFZpc2l0
b3ImIHZpc2l0b3IpCiB7CiAgICAgVk0mIHZtID0gdmlzaXRvci52bSgpOwogICAgIApAQCAtNDEz
LDI0ICs0MTYsMjAgQEAgc2l6ZV90IEpTT2JqZWN0Ojplc3RpbWF0ZWRTaXplKEpTQ2VsbCogYwog
ICAgIHJldHVybiBCYXNlOjplc3RpbWF0ZWRTaXplKGNlbGwsIHZtKSArIGJ1dHRlcmZseU91dE9m
TGluZVNpemU7CiB9CiAKLXZvaWQgSlNPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxs
LCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lk
IEpTT2JqZWN0Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0
b3IpCiB7CiAgICAgSlNPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNPYmplY3QqPihjZWxs
KTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7Ci0j
aWYgQVNTRVJUX0VOQUJMRUQKLSAgICBib29sIHdhc0NoZWNraW5nRm9yRGVmYXVsdE1hcmtWaW9s
YXRpb24gPSB2aXNpdG9yLm1faXNDaGVja2luZ0ZvckRlZmF1bHRNYXJrVmlvbGF0aW9uOwotICAg
IHZpc2l0b3IubV9pc0NoZWNraW5nRm9yRGVmYXVsdE1hcmtWaW9sYXRpb24gPSBmYWxzZTsKLSNl
bmRpZgotICAgIAorICAgIHR5cGVuYW1lIFZpc2l0b3I6OkRlZmF1bHRNYXJraW5nVmlvbGF0aW9u
QXNzZXJ0aW9uU2NvcGUgYXNzZXJ0aW9uU2NvcGUodmlzaXRvcik7CisKICAgICBKU0NlbGw6OnZp
c2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7Ci0gICAgCisKICAgICB0aGlzT2JqZWN0
LT52aXNpdEJ1dHRlcmZseSh2aXNpdG9yKTsKLSAgICAKLSNpZiBBU1NFUlRfRU5BQkxFRAotICAg
IHZpc2l0b3IubV9pc0NoZWNraW5nRm9yRGVmYXVsdE1hcmtWaW9sYXRpb24gPSB3YXNDaGVja2lu
Z0ZvckRlZmF1bHRNYXJrVmlvbGF0aW9uOwotI2VuZGlmCiB9CiAKK0RFRklORV9WSVNJVF9DSElM
RFJFTl9XSVRIX01PRElGSUVSKEpTX0VYUE9SVF9QUklWQVRFLCBKU09iamVjdCk7CisKIHZvaWQg
SlNPYmplY3Q6OmFuYWx5emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFuYWx5emVyJiBhbmFseXpl
cikKIHsKICAgICBKU09iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU09iamVjdCo+KGNlbGwp
OwpAQCAtNDY5LDE0ICs0NjgsMTIgQEAgdm9pZCBKU09iamVjdDo6YW5hbHl6ZUhlYXAoSlNDZWxs
KiBjZWxsLAogICAgIH0KIH0KIAotdm9pZCBKU0ZpbmFsT2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpT
Q2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNp
dG9yPgordm9pZCBKU0ZpbmFsT2JqZWN0Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGws
IFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNGaW5hbE9iamVjdCogdGhpc09iamVjdCA9IGpz
Q2FzdDxKU0ZpbmFsT2JqZWN0Kj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklU
Uyh0aGlzT2JqZWN0LCBpbmZvKCkpOwotI2lmIEFTU0VSVF9FTkFCTEVECi0gICAgYm9vbCB3YXND
aGVja2luZ0ZvckRlZmF1bHRNYXJrVmlvbGF0aW9uID0gdmlzaXRvci5tX2lzQ2hlY2tpbmdGb3JE
ZWZhdWx0TWFya1Zpb2xhdGlvbjsKLSAgICB2aXNpdG9yLm1faXNDaGVja2luZ0ZvckRlZmF1bHRN
YXJrVmlvbGF0aW9uID0gZmFsc2U7Ci0jZW5kaWYKKyAgICB0eXBlbmFtZSBWaXNpdG9yOjpEZWZh
dWx0TWFya2luZ1Zpb2xhdGlvbkFzc2VydGlvblNjb3BlIGFzc2VydGlvblNjb3BlKHZpc2l0b3Ip
OwogICAgIAogICAgIEpTQ2VsbDo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsK
ICAgICAKQEAgLTQ4NCwxMiArNDgxLDEwIEBAIHZvaWQgSlNGaW5hbE9iamVjdDo6dmlzaXRDaGls
ZHJlbihKU0NlbGwKICAgICAgICAgaWYgKHVuc2lnbmVkIHN0b3JhZ2VTaXplID0gc3RydWN0dXJl
LT5pbmxpbmVTaXplKCkpCiAgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZFZhbHVlc0hpZGRlbih0
aGlzT2JqZWN0LT5pbmxpbmVTdG9yYWdlKCksIHN0b3JhZ2VTaXplKTsKICAgICB9Ci0gICAgCi0j
aWYgQVNTRVJUX0VOQUJMRUQKLSAgICB2aXNpdG9yLm1faXNDaGVja2luZ0ZvckRlZmF1bHRNYXJr
VmlvbGF0aW9uID0gd2FzQ2hlY2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlvbjsKLSNlbmRpZgog
fQogCitERUZJTkVfVklTSVRfQ0hJTERSRU5fV0lUSF9NT0RJRklFUihKU19FWFBPUlRfUFJJVkFU
RSwgSlNGaW5hbE9iamVjdCk7CisKIFN0cmluZyBKU09iamVjdDo6Y2xhc3NOYW1lKGNvbnN0IEpT
T2JqZWN0KiBvYmplY3QsIFZNJiB2bSkKIHsKICAgICBjb25zdCBDbGFzc0luZm8qIGluZm8gPSBv
YmplY3QtPmNsYXNzSW5mbyh2bSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU09iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTT2JqZWN0LmgJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSw3IEBACiAvKgogICog
IENvcHlyaWdodCAoQykgMTk5OS0yMDAxIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCiAg
KiAgQ29weXJpZ2h0IChDKSAyMDAxIFBldGVyIEtlbGx5IChwbWtAcG9zdC5jb20pCi0gKiAgQ29w
eXJpZ2h0IChDKSAyMDAzLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
IENvcHlyaWdodCAoQykgMjAwMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0xMDgsOCArMTA4LDkgQEAgY2xhc3MgSlNPYmplY3Qg
OiBwdWJsaWMgSlNDZWxsIHsKIHB1YmxpYzoKICAgICB1c2luZyBCYXNlID0gSlNDZWxsOwogCisg
ICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTl9XSVRIX01PRElGSUVSKEpTX0VYUE9SVF9QUklWQVRF
KTsKKwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBzaXplX3QgZXN0aW1hdGVkU2l6ZShK
U0NlbGwqLCBWTSYpOwotICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIHZpc2l0Q2hp
bGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0
aWMgdm9pZCBhbmFseXplSGVhcChKU0NlbGwqLCBIZWFwQW5hbHl6ZXImKTsKIAogICAgIEpTX0VY
UE9SVF9QUklWQVRFIHN0YXRpYyBTdHJpbmcgY2xhc3NOYW1lKGNvbnN0IEpTT2JqZWN0KiwgVk0m
KTsKQEAgLTk4MiwxMSArOTgzLDExIEBAIHByb3RlY3RlZDoKICAgICBKU09iamVjdChWTSYsIFN0
cnVjdHVyZSosIEJ1dHRlcmZseSogPSBudWxscHRyKTsKICAgICAKICAgICAvLyBWaXNpdHMgdGhl
IGJ1dHRlcmZseSB1bmxlc3MgdGhlcmUgaXMgYSByYWNlLiBSZXR1cm5zIHRoZSBzdHJ1Y3R1cmUg
aWYgdGhlcmUgd2FzIG5vIHJhY2UuCi0gICAgU3RydWN0dXJlKiB2aXNpdEJ1dHRlcmZseShTbG90
VmlzaXRvciYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IFN0cnVjdHVyZSogdmlz
aXRCdXR0ZXJmbHkoVmlzaXRvciYpOwogICAgIAotICAgIFN0cnVjdHVyZSogdmlzaXRCdXR0ZXJm
bHlJbXBsKFNsb3RWaXNpdG9yJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gU3Ry
dWN0dXJlKiB2aXNpdEJ1dHRlcmZseUltcGwoVmlzaXRvciYpOwogICAgIAotICAgIHZvaWQgbWFy
a0F1eGlsaWFyeUFuZFZpc2l0T3V0T2ZMaW5lUHJvcGVydGllcyhTbG90VmlzaXRvciYsIEJ1dHRl
cmZseSosIFN0cnVjdHVyZSosIFByb3BlcnR5T2Zmc2V0IG1heE9mZnNldCk7CisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCBtYXJrQXV4aWxpYXJ5QW5kVmlzaXRPdXRPZkxpbmVQ
cm9wZXJ0aWVzKFZpc2l0b3ImLCBCdXR0ZXJmbHkqLCBTdHJ1Y3R1cmUqLCBQcm9wZXJ0eU9mZnNl
dCBtYXhPZmZzZXQpOwogCiAgICAgLy8gQ2FsbCB0aGlzIGlmIHlvdSBrbm93IHRoYXQgdGhlIG9i
amVjdCBpcyBpbiBhIG1vZGUgd2hlcmUgaXQgaGFzIGFycmF5CiAgICAgLy8gc3RvcmFnZS4gVGhp
cyB3aWxsIGFzc2VydCBvdGhlcndpc2UuCkBAIC0xMTc0LDggKzExNzUsNiBAQCBwcm90ZWN0ZWQ6
CiAgICAgfQogfTsKIAotY2xhc3MgSlNGaW5hbE9iamVjdDsKLQogLy8gSlNGaW5hbE9iamVjdCBp
cyBhIHR5cGUgb2YgSlNPYmplY3QgdGhhdCBjb250YWlucyBzdWZmaWNpZW50IGludGVybmFsCiAv
LyBzdG9yYWdlIHRvIGZ1bGx5IG1ha2UgdXNlIG9mIHRoZSBjb2xsZWN0b3IgY2VsbCBjb250YWlu
aW5nIGl0LgogY2xhc3MgSlNGaW5hbE9iamVjdCBmaW5hbCA6IHB1YmxpYyBKU09iamVjdCB7CkBA
IC0xMjE0LDE1ICsxMjEzLDEzIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6
Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgdHlwZUluZm8oKSwgaW5mbygpLCBk
ZWZhdWx0SW5kZXhpbmdUeXBlLCBpbmxpbmVDYXBhY2l0eSk7CiAgICAgfQogCi0gICAgSlNfRVhQ
T1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRv
ciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU5fV0lUSF9NT0RJRklFUihKU19FWFBPUlRf
UFJJVkFURSk7CiAKICAgICBERUNMQVJFX0VYUE9SVF9JTkZPOwogCiBwcml2YXRlOgogICAgIGZy
aWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CiAKLSAgICB2b2lkIHZpc2l0Q2hpbGRy
ZW5Db21tb24oU2xvdFZpc2l0b3ImKTsKLQogICAgIGV4cGxpY2l0IEpTRmluYWxPYmplY3QoVk0m
IHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgQnV0dGVyZmx5KiBidXR0ZXJmbHkpCiAgICAgICAg
IDogSlNPYmplY3Qodm0sIHN0cnVjdHVyZSwgYnV0dGVyZmx5KQogICAgIHsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvbWlzZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9taXNlLmNwcAkocmV2aXNpb24gMjcyOTAy
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9taXNlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTY3LDEzICs2NywxNiBAQCB2b2lkIEpTUHJvbWlzZTo6ZmluaXNoQ3JlYXRp
b24oVk0mIHZtKQogICAgICAgICBCYXNlOjppbnRlcm5hbEZpZWxkKGluZGV4KS5zZXQodm0sIHRo
aXMsIHZhbHVlc1tpbmRleF0pOwogfQogCi12b2lkIEpTUHJvbWlzZTo6dmlzaXRDaGlsZHJlbihK
U0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlz
aXRvcj4KK3ZvaWQgSlNQcm9taXNlOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZp
c2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Byb21p
c2UqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGlu
Zm8oKSk7CiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKIH0K
IAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTUHJvbWlzZSk7CisKIGF1dG8gSlNQcm9taXNlOjpz
dGF0dXMoVk0mKSBjb25zdCAtPiBTdGF0dXMKIHsKICAgICBKU1ZhbHVlIHZhbHVlID0gaW50ZXJu
YWxGaWVsZChGaWVsZDo6RmxhZ3MpLmdldCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNQcm9taXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNQcm9taXNlLmgJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTUHJvbWlzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTk2LDcgKzk2LDcgQEAg
cHVibGljOgogICAgIH07CiAgICAgc3RhdGljIERlZmVycmVkRGF0YSBjcmVhdGVEZWZlcnJlZERh
dGEoSlNHbG9iYWxPYmplY3QqLCBKU1Byb21pc2VDb25zdHJ1Y3RvciopOwogCi0gICAgc3RhdGlj
IHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVf
VklTSVRfQ0hJTERSRU47CiAKIHByb3RlY3RlZDoKICAgICBKU1Byb21pc2UoVk0mLCBTdHJ1Y3R1
cmUqKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVydHlOYW1l
RW51bWVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQt
MjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTQtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTcwLDcgKzcwLDggQEAgdm9pZCBKU1Byb3BlcnR5TmFtZUVudW1l
cmF0b3I6OmZpbmlzaENyZQogICAgIH0KIH0KIAotdm9pZCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0
b3I6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3Rl
bXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6
dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAg
IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvciogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Byb3BlcnR5
TmFtZUVudW1lcmF0b3IqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRo
aXNPYmplY3QsIGluZm8oKSk7CkBAIC04Nyw2ICs4OCw4IEBAIHZvaWQgSlNQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yOjp2aXNpdENoaWwKICAgICB9CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihK
U1Byb3BlcnR5TmFtZUVudW1lcmF0b3IpOworCiAvLyBGSVhNRTogQXNzZXJ0IHRoYXQgcHJvcGVy
dGllcyByZXR1cm5lZCBieSBnZXRPd25Qcm9wZXJ0eU5hbWVzKCkgYXJlIHJlcG9ydGVkIGVudW1l
cmFibGUgYnkgZ2V0T3duUHJvcGVydHlTbG90KCkuCiAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjE5OTI2CiB2b2lkIGdldEVudW1lcmFibGVQcm9wZXJ0eU5hbWVz
KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTT2JqZWN0KiBiYXNlLCBQcm9wZXJ0eU5h
bWVBcnJheSYgcHJvcGVydHlOYW1lcywgdWludDMyX3QmIGluZGV4ZWRMZW5ndGgsIHVpbnQzMl90
JiBzdHJ1Y3R1cmVQcm9wZXJ0eUNvdW50KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmgJKHJldmlzaW9u
IDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVydHlOYW1l
RW51bWVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxNC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODQsNyArODQsNyBAQCBwdWJsaWM6CiAg
ICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLCBt
X3Byb3BlcnR5TmFtZXMpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4o
SlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiBw
cml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3h5LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3h5LmNwcAkocmV2aXNpb24gMjcyOTAy
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm94eS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTIsIDIw
MTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTEtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTM1LDcgKzM1LDggQEAgU1RBVElDX0FTU0VSVF9JU19UUklW
SUFMTFlfREVTVFJVQ1RJQkxFKAogCiBjb25zdCBDbGFzc0luZm8gSlNQcm94eTo6c19pbmZvID0g
eyAiSlNQcm94eSIsICZCYXNlOjpzX2luZm8sIG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRI
T0RfVEFCTEUoSlNQcm94eSkgfTsKIAotdm9pZCBKU1Byb3h5Ojp2aXNpdENoaWxkcmVuKEpTQ2Vs
bCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
Pgordm9pZCBKU1Byb3h5Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3Im
IHZpc2l0b3IpCiB7CiAgICAgSlNQcm94eSogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Byb3h5Kj4o
Y2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkp
OwpAQCAtNDMsNiArNDQsOCBAQCB2b2lkIEpTUHJveHk6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBj
ZWxsCiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV90YXJnZXQpOwogfQogCitERUZJ
TkVfVklTSVRfQ0hJTERSRU5fV0lUSF9NT0RJRklFUihKU19FWFBPUlRfUFJJVkFURSwgSlNQcm94
eSk7CisKIHZvaWQgSlNQcm94eTo6c2V0VGFyZ2V0KFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCkKIHsKICAgICBtX3RhcmdldC5zZXQodm0sIHRoaXMsIGdsb2JhbE9iamVjdCk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3h5LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm94eS5oCShyZXZpc2lvbiAy
NzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3h5LmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLTIwMjAg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLTIw
MjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC04NSw3ICs4NSw3IEBAIHByb3RlY3RlZDoKICAgICAgICAgbV90YXJnZXQu
c2V0KHZtLCB0aGlzLCB0YXJnZXQpOwogICAgIH0KIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0
YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNM
QVJFX1ZJU0lUX0NISUxEUkVOX1dJVEhfTU9ESUZJRVIoSlNfRVhQT1JUX1BSSVZBVEUpOwogCiAg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFN0cmluZyBjbGFzc05hbWUoY29uc3QgSlNPYmpl
Y3QqLCBWTSYpOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBTdHJpbmcgdG9TdHJpbmdO
YW1lKGNvbnN0IEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTU2NvcGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTU2NvcGUuY3BwCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Njb3BlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMCBBcHBsZSBJbmMuIEFs
bCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMSBBcHBsZSBJbmMu
IEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTM5LDcgKzM5LDggQEAgU1RBVElDX0FTU0VSVF9JU19UUklWSUFMTFlfREVTVFJVQ1RJQkxFKAog
CiBjb25zdCBDbGFzc0luZm8gSlNTY29wZTo6c19pbmZvID0geyAiU2NvcGUiLCAmQmFzZTo6c19p
bmZvLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTU2NvcGUpIH07CiAK
LXZvaWQgSlNTY29wZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNTY29wZTo6dmlzaXRD
aGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTU2Nv
cGUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNTY29wZSo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19P
QkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTQ3LDYgKzQ4LDggQEAgdm9p
ZCBKU1Njb3BlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbAogICAgIHZpc2l0b3IuYXBwZW5k
KHRoaXNPYmplY3QtPm1fbmV4dCk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU1Njb3Bl
KTsKKwogLy8gUmV0dXJucyB0cnVlIGlmIHdlIGZvdW5kIGVub3VnaCBpbmZvcm1hdGlvbiB0byB0
ZXJtaW5hdGUgb3B0aW1pemF0aW9uLgogc3RhdGljIGlubGluZSBib29sIGFic3RyYWN0QWNjZXNz
KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTU2NvcGUqIHNjb3BlLCBjb25zdCBJZGVu
dGlmaWVyJiBpZGVudCwgR2V0T3JQdXQgZ2V0T3JQdXQsIHNpemVfdCBkZXB0aCwgYm9vbCYgbmVl
ZHNWYXJJbmplY3Rpb25DaGVja3MsIFJlc29sdmVPcCYgb3AsIEluaXRpYWxpemF0aW9uTW9kZSBp
bml0aWFsaXphdGlvbk1vZGUpCiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU1Njb3BlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNTY29wZS5oCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1Njb3BlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDEyLTIwMTkgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEyLTIwMjEgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02NCw3ICs2NCw3IEBAIHB1YmxpYzoK
IAogICAgIHN0YXRpYyB2b2lkIGNvbGxlY3RDbG9zdXJlVmFyaWFibGVzVW5kZXJURFooSlNTY29w
ZSosIFREWkVudmlyb25tZW50JiByZXN1bHQsIFByaXZhdGVOYW1lRW52aXJvbm1lbnQmKTsKIAot
ICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAg
ICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgYm9vbCBpc1ZhclNjb3BlKCk7CiAgICAg
Ym9vbCBpc0xleGljYWxTY29wZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdC5jcHAJKHJldmlz
aW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2VnbWVudGVk
VmFyaWFibGVPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Miw3ICs2Miw4IEBAIFNjb3Bl
T2Zmc2V0IEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3Q6OmEKICAgICByZXR1cm4gU2NvcGVPZmZz
ZXQob2xkU2l6ZSk7CiB9CiAKLXZvaWQgSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdDo6dmlzaXRD
aGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlw
ZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdDo6dmlzaXRDaGls
ZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTU2VnbWVu
dGVkVmFyaWFibGVPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNTZWdtZW50ZWRWYXJpYWJs
ZU9iamVjdCo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVj
dCwgaW5mbygpKTsKQEAgLTc1LDYgKzc2LDggQEAgdm9pZCBKU1NlZ21lbnRlZFZhcmlhYmxlT2Jq
ZWN0Ojp2aXNpdENoaQogICAgICAgICB2aXNpdG9yLmFwcGVuZEhpZGRlbih0aGlzT2JqZWN0LT5t
X3ZhcmlhYmxlc1tpXSk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTl9XSVRIX01PRElGSUVS
KEpTX0VYUE9SVF9QUklWQVRFLCBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0KTsKKwogdm9pZCBK
U1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0OjphbmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhlYXBB
bmFseXplciYgYW5hbHl6ZXIpCiB7CiAgICAgSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdCogdGhp
c09iamVjdCA9IGpzQ2FzdDxKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0Kj4oY2VsbCk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZWdtZW50
ZWRWYXJpYWJsZU9iamVjdC5oCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTkgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC04NSw4ICs4NSw4IEBAIHB1YmxpYzoKICAgICAvLyBBZGRzIG51bWJlck9mUmVnaXN0ZXJz
VG9BZGQgcmVnaXN0ZXJzLCBpbml0aWFsaXplcyB0aGVtIHRvIFVuZGVmaW5lZCwgYW5kIHJldHVy
bnMKICAgICAvLyB0aGUgaW5kZXggb2YgdGhlIGZpcnN0IG9uZSBhZGRlZC4KICAgICBKU19FWFBP
UlRfUFJJVkFURSBTY29wZU9mZnNldCBhZGRWYXJpYWJsZXModW5zaWduZWQgbnVtYmVyT2ZWYXJp
YWJsZXNUb0FkZCwgSlNWYWx1ZSk7Ci0gICAgCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGlj
IHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworCisgICAgREVDTEFS
RV9WSVNJVF9DSElMRFJFTl9XSVRIX01PRElGSUVSKEpTX0VYUE9SVF9QUklWQVRFKTsKICAgICBK
U19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBhbmFseXplSGVhcChKU0NlbGwqLCBIZWFwQW5h
bHl6ZXImKTsKICAgICAKIHByb3RlY3RlZDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTU2V0SXRlcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTU2V0SXRlcmF0b3IuY3BwCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NldEl0ZXJhdG9yLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNyBBcHBsZSwg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjEgQXBw
bGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtNTcsMTMgKzU3LDE2IEBAIHZvaWQgSlNTZXRJdGVyYXRvcjo6ZmluaXNoQ3JlYXRp
b24oVk0mIHYKICAgICAgICAgQmFzZTo6aW50ZXJuYWxGaWVsZChpbmRleCkuc2V0KHZtLCB0aGlz
LCB2YWx1ZXNbaW5kZXhdKTsKIH0KIAotdm9pZCBKU1NldEl0ZXJhdG9yOjp2aXNpdENoaWxkcmVu
KEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPgordm9pZCBKU1NldEl0ZXJhdG9yOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNl
bGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxK
U1NldEl0ZXJhdG9yKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlz
T2JqZWN0LCBpbmZvKCkpOwogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlz
aXRvcik7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU1NldEl0ZXJhdG9yKTsKKwogSlNW
YWx1ZSBKU1NldEl0ZXJhdG9yOjpjcmVhdGVQYWlyKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEpTVmFsdWUga2V5LCBKU1ZhbHVlIHZhbHVlKQogewogICAgIE1hcmtlZEFyZ3VtZW50QnVm
ZmVyIGFyZ3M7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NldEl0ZXJh
dG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZXRJ
dGVyYXRvci5oCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1NldEl0ZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE2IEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMSBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMzAsNyArMTMwLDcg
QEAgcHJpdmF0ZToKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGZpbmlzaENyZWF0aW9uKFZN
JiwgSlNTZXQqLCBJdGVyYXRpb25LaW5kKTsKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7
CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgSlNWYWx1ZSBjcmVhdGVQYWlyKEpTR2xvYmFsT2JqZWN0
KiwgSlNWYWx1ZSwgSlNWYWx1ZSk7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0Nl
bGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiB9OwogU1RB
VElDX0FTU0VSVF9JU19UUklWSUFMTFlfREVTVFJVQ1RJQkxFKEpTU2V0SXRlcmF0b3IpOwogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuY3BwCShyZXZpc2lv
biAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSw3IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMTk5
OS0yMDAyIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCiAgKiAgQ29weXJpZ2h0IChDKSAy
MDAxIFBldGVyIEtlbGx5IChwbWtAcG9zdC5jb20pCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA0LTIw
MTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAw
NC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICog
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCkBAIC0xMDUsNyArMTA1LDggQEAgc2l6ZV90IEpTU3RyaW5nOjplc3RpbWF0ZWRTaXplKEpT
Q2VsbCogYwogICAgIHJldHVybiBCYXNlOjplc3RpbWF0ZWRTaXplKGNlbGwsIHZtKSArIGJpdHdp
c2VfY2FzdDxTdHJpbmdJbXBsKj4ocG9pbnRlciktPmNvc3REdXJpbmdHQygpOwogfQogCi12b2lk
IEpTU3RyaW5nOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0
b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1N0cmluZzo6dmlzaXRDaGls
ZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTU3RyaW5n
KiB0aGlzT2JqZWN0ID0gYXNTdHJpbmcoY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhF
UklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtMTQzLDYgKzE0NCw4IEBAIHZvaWQgSlNTdHJp
bmc6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWwKICAgICAgICAgdmlzaXRvci5yZXBvcnRFeHRy
YU1lbW9yeVZpc2l0ZWQoaW1wbC0+Y29zdER1cmluZ0dDKCkpOwogfQogCitERUZJTkVfVklTSVRf
Q0hJTERSRU4oSlNTdHJpbmcpOworCiBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG1heExlbmd0
aEZvck9uU3RhY2tSZXNvbHZlID0gMjA0ODsKIAogdm9pZCBKU1JvcGVTdHJpbmc6OnJlc29sdmVS
b3BlSW50ZXJuYWw4KExDaGFyKiBidWZmZXIpIGNvbnN0CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU1N0cmluZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTU3RyaW5nLmgJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSw3
IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAxIEhhcnJpIFBvcnRlbiAocG9ydGVu
QGtkZS5vcmcpCiAgKiAgQ29weXJpZ2h0IChDKSAyMDAxIFBldGVyIEtlbGx5IChwbWtAcG9zdC5j
b20pCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yMTcsNyArMjE3LDcgQEAgcHVi
bGljOgogCiAgICAgc3RhdGljIHZvaWQgZHVtcFRvU3RyZWFtKGNvbnN0IEpTQ2VsbCosIFByaW50
U3RyZWFtJik7CiAgICAgc3RhdGljIHNpemVfdCBlc3RpbWF0ZWRTaXplKEpTQ2VsbCosIFZNJik7
Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwor
ICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaXNS
b3BlKCkgY29uc3QKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U1N0cmluZ0l0ZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU1N0cmluZ0l0ZXJhdG9yLmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmdJdGVyYXRvci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDE1IFl1c3VrZSBTdXp1
a2kgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4uCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC01MSwxMSArNTEsMTQgQEAgSlNTdHJpbmdJdGVyYXRvciogSlNTdHJpbmdJdGVyYXRv
cjo6Y2xvbgogICAgIHJldHVybiBjbG9uZTsKIH0KIAotdm9pZCBKU1N0cmluZ0l0ZXJhdG9yOjp2
aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0
ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1N0cmluZ0l0ZXJhdG9yOjp2aXNpdENoaWxkcmVu
SW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0byogdGhpc09i
amVjdCA9IGpzQ2FzdDxKU1N0cmluZ0l0ZXJhdG9yKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09C
SkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwogICAgIEJhc2U6OnZpc2l0Q2hpbGRy
ZW4odGhpc09iamVjdCwgdmlzaXRvcik7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU1N0
cmluZ0l0ZXJhdG9yKTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU1N0cmluZ0l0ZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmdJdGVyYXRvci5oCShyZXZpc2lvbiAyNzI5
MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZ0l0ZXJhdG9yLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDE1
IFl1c3VrZSBTdXp1a2kgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4uCisgKiBDb3B5cmlnaHQgKEMp
IDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC03OSw3ICs4MCw3IEBAIHB1YmxpYzoKICAgICBKU1ZhbHVlIGluZGV4
KCkgY29uc3QgeyByZXR1cm4gaW50ZXJuYWxGaWVsZChGaWVsZDo6SW5kZXgpLmdldCgpOyB9CiAg
ICAgSlNTdHJpbmdJdGVyYXRvciogY2xvbmUoSlNHbG9iYWxPYmplY3QqKTsKIAotICAgIHN0YXRp
YyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJF
X1ZJU0lUX0NISUxEUkVOOwogCiBwcml2YXRlOgogICAgIEpTU3RyaW5nSXRlcmF0b3IoVk0mIHZt
LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuY3BwCShyZXZpc2lvbiAyNzI5MDIp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTItMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTItMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTM2LDcgKzM2LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAKIGNv
bnN0IENsYXNzSW5mbyBKU1N5bWJvbFRhYmxlT2JqZWN0OjpzX2luZm8gPSB7ICJTeW1ib2xUYWJs
ZU9iamVjdCIsICZCYXNlOjpzX2luZm8sIG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0Rf
VEFCTEUoSlNTeW1ib2xUYWJsZU9iamVjdCkgfTsKIAotdm9pZCBKU1N5bWJvbFRhYmxlT2JqZWN0
Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1w
bGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1N5bWJvbFRhYmxlT2JqZWN0Ojp2aXNpdENo
aWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNTeW1i
b2xUYWJsZU9iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1N5bWJvbFRhYmxlT2JqZWN0Kj4o
Y2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkp
OwpAQCAtNDQsNiArNDUsOCBAQCB2b2lkIEpTU3ltYm9sVGFibGVPYmplY3Q6OnZpc2l0Q2hpbGRy
ZW4oCiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9zeW1ib2xUYWJsZSk7CiB9CiAK
K0RFRklORV9WSVNJVF9DSElMRFJFTihKU1N5bWJvbFRhYmxlT2JqZWN0KTsKKwogYm9vbCBKU1N5
bWJvbFRhYmxlT2JqZWN0OjpkZWxldGVQcm9wZXJ0eShKU0NlbGwqIGNlbGwsIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIERlbGV0ZVByb3Bl
cnR5U2xvdCYgc2xvdCkKIHsKICAgICBKU1N5bWJvbFRhYmxlT2JqZWN0KiB0aGlzT2JqZWN0ID0g
anNDYXN0PEpTU3ltYm9sVGFibGVPYmplY3QqPihjZWxsKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0LmgJKHJldmlzaW9u
IDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3ltYm9sVGFibGVP
YmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTItMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTItMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTcwLDcgKzcwLDcgQEAgcHJvdGVjdGVkOgogICAg
ICAgICBtX3N5bWJvbFRhYmxlLnNldCh2bSwgdGhpcywgc3ltYm9sVGFibGUpOwogICAgIH0KICAg
ICAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7
CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKICAgICAKIHByaXZhdGU6CiAgICAgV3JpdGVC
YXJyaWVyPFN5bWJvbFRhYmxlPiBtX3N5bWJvbFRhYmxlOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNXZWFrT2JqZWN0UmVmLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1dlYWtPYmplY3RSZWYuY3BwCShyZXZpc2lvbiAyNzI5
MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1dlYWtPYmplY3RSZWYuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
OSBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE5
LTIwMjEgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMzksNyArMzksOCBAQCB2b2lkIEpTV2Vha09iamVjdFJlZjo6Zmlu
aXNoQ3JlYXRpb24oVk0mCiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwogfQogCi12b2lk
IEpTV2Vha09iamVjdFJlZjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9y
JiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNXZWFrT2JqZWN0
UmVmOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7
CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1dlYWtPYmplY3RSZWYqPihjZWxsKTsK
ICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC01
MSw2ICs1Miw4IEBAIHZvaWQgSlNXZWFrT2JqZWN0UmVmOjp2aXNpdENoaWxkcmVuKEpTQ2UKICAg
ICB9CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU1dlYWtPYmplY3RSZWYpOworCiB2b2lk
IEpTV2Vha09iamVjdFJlZjo6ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoVk0mIHZtKQogewogICAg
IGlmIChtX3ZhbHVlICYmICF2bS5oZWFwLmlzTWFya2VkKG1fdmFsdWUuZ2V0KCkpKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNXZWFrT2JqZWN0UmVmLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNXZWFrT2JqZWN0UmVmLmgJKHJl
dmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTV2Vha09i
amVjdFJlZi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxOSBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE5LTIwMjEgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjUsNyArNjUsNyBAQCBwdWJsaWM6CiAgICAgfQog
CiAgICAgdm9pZCBmaW5hbGl6ZVVuY29uZGl0aW9uYWxseShWTSYpOwotICAgIHN0YXRpYyB2b2lk
IHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lU
X0NISUxEUkVOOwogCiBwcml2YXRlOgogICAgIEpTV2Vha09iamVjdFJlZihWTSYgdm0sIFN0cnVj
dHVyZSogc3RydWN0dXJlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNX
aXRoU2NvcGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTV2l0aFNjb3BlLmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNXaXRoU2NvcGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxNiBBcHBsZSBJbmMuIEFsbCBSaWdodHMg
UmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMSBBcHBsZSBJbmMuIEFsbCBSaWdo
dHMgUmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQxLDcgKzQx
LDggQEAgSlNXaXRoU2NvcGUqIEpTV2l0aFNjb3BlOjpjcmVhdGUoCiAgICAgcmV0dXJuIHdpdGhT
Y29wZTsKIH0KIAotdm9pZCBKU1dpdGhTY29wZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGws
IFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQg
SlNXaXRoU2NvcGU6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlz
aXRvcikKIHsKICAgICBKU1dpdGhTY29wZSogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1dpdGhTY29w
ZSo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5m
bygpKTsKQEAgLTQ5LDYgKzUwLDggQEAgdm9pZCBKU1dpdGhTY29wZTo6dmlzaXRDaGlsZHJlbihK
U0NlbGwqIAogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fb2JqZWN0KTsKIH0KIAor
REVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTV2l0aFNjb3BlKTsKKwogU3RydWN0dXJlKiBKU1dpdGhT
Y29wZTo6Y3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgSlNWYWx1ZSBwcm90bykKIHsKICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGds
b2JhbE9iamVjdCwgcHJvdG8sIFR5cGVJbmZvKFdpdGhTY29wZVR5cGUsIFN0cnVjdHVyZUZsYWdz
KSwgaW5mbygpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTV2l0aFNj
b3BlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNXaXRo
U2NvcGUuaAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNXaXRoU2NvcGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTIsIDIwMTYgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjEgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00Myw3ICs0Myw3IEBAIHB1Ymxp
YzoKIAogICAgIEpTT2JqZWN0KiBvYmplY3QoKSB7IHJldHVybiBtX29iamVjdC5nZXQoKTsgfQog
Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwor
ICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVh
dGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUgcHJvdG8pOwogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1dyYXBwZXJPYmplY3QuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTV3JhcHBlck9iamVjdC5j
cHAJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
V3JhcHBlck9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICog
IENvcHlyaWdodCAoQykgMjAwNiBNYWtzIE9ybG92aWNoCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA2
LCAyMDA5LCAyMDEyIEFwcGxlLCBJbmMuCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMjEgQXBw
bGUsIEluYy4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yOSwxMSArMjksMTQgQEAgbmFtZXNw
YWNlIEpTQyB7CiAKIFNUQVRJQ19BU1NFUlRfSVNfVFJJVklBTExZX0RFU1RSVUNUSUJMRShKU1dy
YXBwZXJPYmplY3QpOwogCi12b2lkIEpTV3JhcHBlck9iamVjdDo6dmlzaXRDaGlsZHJlbihKU0Nl
bGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRv
cj4KK3ZvaWQgSlNXcmFwcGVyT2JqZWN0Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGws
IFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1dy
YXBwZXJPYmplY3QqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNP
YmplY3QsIGluZm8oKSk7CiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNp
dG9yKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOX1dJVEhfTU9ESUZJRVIoSlNfRVhQT1JU
X1BSSVZBVEUsIEpTV3JhcHBlck9iamVjdCk7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNXcmFwcGVyT2JqZWN0LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNXcmFwcGVyT2JqZWN0LmgJKHJl
dmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTV3JhcHBl
ck9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqICBDb3B5cmln
aHQgKEMpIDIwMDYgTWFrcyBPcmxvdmljaAotICogIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywg
MjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0
IChDKSAyMDA2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKQEAgLTY0LDcgKzY0LDcgQEAgcHVibGljOgogcHJvdGVjdGVkOgogICAgIGV4
cGxpY2l0IEpTV3JhcHBlck9iamVjdChWTSYsIFN0cnVjdHVyZSopOwogCi0gICAgSlNfRVhQT1JU
X1BSSVZBVEUgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYp
OworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU5fV0lUSF9NT0RJRklFUihKU19FWFBPUlRfUFJJ
VkFURSk7CiB9OwogCiBpbmxpbmUgSlNXcmFwcGVyT2JqZWN0OjpKU1dyYXBwZXJPYmplY3QoVk0m
IHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0xhenlDbGFzc1N0cnVjdHVyZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvTGF6eUNsYXNzU3RydWN0dXJlLmNwcAkocmV2aXNpb24gMjcyOTAy
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTGF6eUNsYXNzU3RydWN0dXJlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTYtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTcyLDEyICs3MiwxNiBAQCB2b2lkIExhenlDbGFzc1N0cnVj
dHVyZTo6SW5pdGlhbGl6ZXI6OnNlCiAgICAgY2xhc3NTdHJ1Y3R1cmUubV9jb25zdHJ1Y3Rvci5z
ZXQodm0sIGdsb2JhbCwgY29uc3RydWN0b3IpOwogfQogCi12b2lkIExhenlDbGFzc1N0cnVjdHVy
ZTo6dmlzaXQoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
Pgordm9pZCBMYXp5Q2xhc3NTdHJ1Y3R1cmU6OnZpc2l0KFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAg
ICAgbV9zdHJ1Y3R1cmUudmlzaXQodmlzaXRvcik7CiAgICAgdmlzaXRvci5hcHBlbmQobV9jb25z
dHJ1Y3Rvcik7CiB9CiAKK3RlbXBsYXRlIHZvaWQgTGF6eUNsYXNzU3RydWN0dXJlOjp2aXNpdChB
YnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIExhenlDbGFzc1N0cnVjdHVyZTo6
dmlzaXQoU2xvdFZpc2l0b3ImKTsKKwogdm9pZCBMYXp5Q2xhc3NTdHJ1Y3R1cmU6OmR1bXAoUHJp
bnRTdHJlYW0mIG91dCkgY29uc3QKIHsKICAgICBvdXQucHJpbnQoIjxzdHJ1Y3R1cmUgPSAiLCBt
X3N0cnVjdHVyZSwgIiwgY29uc3RydWN0b3IgPSAiLCBSYXdQb2ludGVyKG1fY29uc3RydWN0b3Iu
Z2V0KCkpLCAiPiIpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTGF6eUNs
YXNzU3RydWN0dXJlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvTGF6eUNsYXNzU3RydWN0dXJlLmgJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0xhenlDbGFzc1N0cnVjdHVyZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEx
Nyw3ICsxMTcsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX2NvbnN0cnVjdG9yLmdldCgp
OwogICAgIH0KICAgICAKLSAgICB2b2lkIHZpc2l0KFNsb3RWaXNpdG9yJik7CisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCB2aXNpdChWaXNpdG9yJik7CiAgICAgCiAgICAgdm9p
ZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0xhenlQcm9wZXJ0eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0xhenlQcm9wZXJ0eS5oCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9MYXp5UHJvcGVydHkuaAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxOSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTEwMyw3ICsxMDMsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRNYXlCZU51bGwoVk0mLCBjb25z
dCBPd25lclR5cGUqIG93bmVyLCBFbGVtZW50VHlwZSopOwogICAgIHZvaWQgc2V0KFZNJiwgY29u
c3QgT3duZXJUeXBlKiBvd25lciwgRWxlbWVudFR5cGUqKTsKICAgICAKLSAgICB2b2lkIHZpc2l0
KFNsb3RWaXNpdG9yJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCB2aXNp
dChWaXNpdG9yJik7CiAgICAgCiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CiAg
ICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9MYXp5UHJvcGVydHlJbmxp
bmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTGF6eVBy
b3BlcnR5SW5saW5lcy5oCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9MYXp5UHJvcGVydHlJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjYsNyArNjYs
OCBAQCB2b2lkIExhenlQcm9wZXJ0eTxPd25lclR5cGUsIEVsZW1lbnRUeXBlCiB9CiAKIHRlbXBs
YXRlPHR5cGVuYW1lIE93bmVyVHlwZSwgdHlwZW5hbWUgRWxlbWVudFR5cGU+Ci12b2lkIExhenlQ
cm9wZXJ0eTxPd25lclR5cGUsIEVsZW1lbnRUeXBlPjo6dmlzaXQoU2xvdFZpc2l0b3ImIHZpc2l0
b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBMYXp5UHJvcGVydHk8T3duZXJU
eXBlLCBFbGVtZW50VHlwZT46OnZpc2l0KFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgaWYgKG1f
cG9pbnRlciAmJiAhKG1fcG9pbnRlciAmIGxhenlUYWcpKQogICAgICAgICB2aXNpdG9yLmFwcGVu
ZFVuYmFycmllcmVkKGJpdHdpc2VfY2FzdDxFbGVtZW50VHlwZSo+KG1fcG9pbnRlcikpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01vZHVsZVBy
b2dyYW1FeGVjdXRhYmxlLmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCwgMjAxMywg
MjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAwOS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNzksNyArNzksOCBAQCBhdXRvIE1vZHVsZVByb2dyYW1F
eGVjdXRhYmxlOjplbnN1cmVUZW1wCiAgICAgcmV0dXJuIGVuc3VyZVRlbXBsYXRlT2JqZWN0TWFw
SW1wbChtX3RlbXBsYXRlT2JqZWN0TWFwKTsKIH0KIAotdm9pZCBNb2R1bGVQcm9ncmFtRXhlY3V0
YWJsZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQor
dGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGU6
OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAg
ICBNb2R1bGVQcm9ncmFtRXhlY3V0YWJsZSogdGhpc09iamVjdCA9IGpzQ2FzdDxNb2R1bGVQcm9n
cmFtRXhlY3V0YWJsZSo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhp
c09iamVjdCwgaW5mbygpKTsKQEAgLTk0LDQgKzk1LDYgQEAgdm9pZCBNb2R1bGVQcm9ncmFtRXhl
Y3V0YWJsZTo6dmlzaXRDaGlsZAogICAgIH0KIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKE1v
ZHVsZVByb2dyYW1FeGVjdXRhYmxlKTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Nb2R1bGVQcm9ncmFtRXhlY3V0YWJsZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01vZHVsZVByb2dyYW1FeGVj
dXRhYmxlLmgJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL01vZHVsZVByb2dyYW1FeGVjdXRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03Nyw3ICs3
Nyw3IEBAIHByaXZhdGU6CiAKICAgICBNb2R1bGVQcm9ncmFtRXhlY3V0YWJsZShKU0dsb2JhbE9i
amVjdCosIGNvbnN0IFNvdXJjZUNvZGUmKTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwog
CiAgICAgV3JpdGVCYXJyaWVyPFVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jaz4gbV91bmxp
bmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2s7CiAgICAgV3JpdGVCYXJyaWVyPFN5bWJvbFRhYmxl
PiBtX21vZHVsZUVudmlyb25tZW50U3ltYm9sVGFibGU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9PcHRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9PcHRpb25zLmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLTIwMjAgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01NTgs
NiArNTU4LDkgQEAgdm9pZCBPcHRpb25zOjpyZWNvbXB1dGVEZXBlbmRlbnRPcHRpb25zKAogCiAg
ICAgaWYgKE9wdGlvbnM6OnVzZVByaXZhdGVTdGF0aWNDbGFzc0ZpZWxkcygpKQogICAgICAgICBP
cHRpb25zOjp1c2VQcml2YXRlQ2xhc3NGaWVsZHMoKSA9IHRydWU7CisKKyAgICBpZiAoT3B0aW9u
czo6dmVyYm9zZVZlcmlmeUdDKCkpCisgICAgICAgIE9wdGlvbnM6OnZlcmlmeUdDKCkgPSB0cnVl
OwogfQogCiBpbmxpbmUgdm9pZCogT3B0aW9uczo6YWRkcmVzc09mT3B0aW9uKE9wdGlvbnM6OklE
IGlkKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zTGlzdC5o
CShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRp
b25zTGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNjksNiArMzY5LDggQEAgSlNfRVhQT1JUX1BS
SVZBVEUgYm9vbCBjYW5Vc2VKSVRDYWdlKCk7CiAgICAgdihCb29sLCBhbHdheXNHZW5lcmF0ZVBD
VG9Db2RlT3JpZ2luTWFwLCBmYWxzZSwgTm9ybWFsLCAiVGhpcyB3aWxsIG1ha2Ugc3VyZSB3ZSBh
bHdheXMgZ2VuZXJhdGUgYSBQQ1RvQ29kZU9yaWdpbk1hcCBmb3IgSklUZWQgY29kZS4iKSBcCiAg
ICAgXAogICAgIHYoRG91YmxlLCByYW5kb21JbnRlZ3JpdHlBdWRpdFJhdGUsIDAuMDUsIE5vcm1h
bCwgIlByb2JhYmlsaXR5IG9mIHJhbmRvbSBpbnRlZ3JpdHkgYXVkaXRzIFswLjAgLSAxLjBdIikg
XAorICAgIHYoQm9vbCwgdmVyaWZ5R0MsIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpIFwKKyAgICB2
KEJvb2wsIHZlcmJvc2VWZXJpZnlHQywgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYo
Qm9vbCwgdmVyaWZ5SGVhcCwgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoVW5zaWdu
ZWQsIG51bWJlck9mR0NDeWNsZXNUb1JlY29yZEZvclZlcmlmaWNhdGlvbiwgMywgTm9ybWFsLCBu
dWxscHRyKSBcCiAgICAgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJv
Z3JhbUV4ZWN1dGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1Byb2dyYW1FeGVjdXRhYmxlLmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvZ3JhbUV4ZWN1dGFibGUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOS0yMDE5IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMjA4LDcgKzIwOCw4IEBAIGF1dG8gUHJvZ3JhbUV4ZWN1dGFibGU6OmVuc3VyZVRl
bXBsYXRlT2IKICAgICByZXR1cm4gZW5zdXJlVGVtcGxhdGVPYmplY3RNYXBJbXBsKG1fdGVtcGxh
dGVPYmplY3RNYXApOwogfQogCi12b2lkIFByb2dyYW1FeGVjdXRhYmxlOjp2aXNpdENoaWxkcmVu
KEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPgordm9pZCBQcm9ncmFtRXhlY3V0YWJsZTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxs
KiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFByb2dyYW1FeGVjdXRhYmxlKiB0aGlz
T2JqZWN0ID0ganNDYXN0PFByb2dyYW1FeGVjdXRhYmxlKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dD
X09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtMjIyLDQgKzIyMyw2IEBA
IHZvaWQgUHJvZ3JhbUV4ZWN1dGFibGU6OnZpc2l0Q2hpbGRyZW4oSlMKICAgICB9CiB9CiAKK0RF
RklORV9WSVNJVF9DSElMRFJFTihQcm9ncmFtRXhlY3V0YWJsZSk7CisKIH0gLy8gbmFtZXNwYWNl
IEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvZ3JhbUV4ZWN1dGFi
bGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9ncmFt
RXhlY3V0YWJsZS5oCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9Qcm9ncmFtRXhlY3V0YWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOS0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODEsNyArODEs
NyBAQCBwcml2YXRlOgogCiAgICAgUHJvZ3JhbUV4ZWN1dGFibGUoSlNHbG9iYWxPYmplY3QqLCBj
b25zdCBTb3VyY2VDb2RlJik7CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2Vs
bCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIFdy
aXRlQmFycmllcjxVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2s+IG1fdW5saW5rZWRQcm9ncmFtQ29k
ZUJsb2NrOwogICAgIFdyaXRlQmFycmllcjxFeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlPiBtX3By
b2dyYW1Db2RlQmxvY2s7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9w
ZXJ0eU1hcEhhc2hUYWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1Byb3BlcnR5TWFwSGFzaFRhYmxlLmgJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5TWFwSGFzaFRhYmxlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogIENvcHlyaWdodCAoQykgMjAwNC0yMDE5IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDQtMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpA
QCAtMTMzLDcgKzEzMyw3IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBu
ZWVkc0Rlc3RydWN0aW9uID0gdHJ1ZTsKICAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCop
OwotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsK
KyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgREVDTEFSRV9FWFBPUlRfSU5GTzsK
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlUYWJsZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlUYWJs
ZS5jcHAJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1Byb3BlcnR5VGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTExOCw3ICsxMTgsOCBAQCB2
b2lkIFByb3BlcnR5VGFibGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2CiAgICAgdm0uaGVhcC5yZXBv
cnRFeHRyYU1lbW9yeUFsbG9jYXRlZChkYXRhU2l6ZSgpKTsKIH0KIAotdm9pZCBQcm9wZXJ0eVRh
YmxlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0
ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBQcm9wZXJ0eVRhYmxlOjp2aXNpdENoaWxk
cmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0byogdGhp
c09iamVjdCA9IGpzQ2FzdDxQcm9wZXJ0eVRhYmxlKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09C
SkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtMTI2LDYgKzEyNyw4IEBAIHZv
aWQgUHJvcGVydHlUYWJsZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwKICAgICB2aXNpdG9yLnJlcG9y
dEV4dHJhTWVtb3J5VmlzaXRlZCh0aGlzT2JqZWN0LT5kYXRhU2l6ZSgpKTsKIH0KIAorREVGSU5F
X1ZJU0lUX0NISUxEUkVOKFByb3BlcnR5VGFibGUpOworCiB2b2lkIFByb3BlcnR5VGFibGU6OmRl
c3Ryb3koSlNDZWxsKiBjZWxsKQogewogICAgIHN0YXRpY19jYXN0PFByb3BlcnR5VGFibGUqPihj
ZWxsKS0+UHJvcGVydHlUYWJsZTo6flByb3BlcnR5VGFibGUoKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1Byb3h5T2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm94eU9iamVjdC5jcHAJKHJldmlzaW9uIDI3MjkwMikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3h5T2JqZWN0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMCBB
cHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAy
MSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTExNzksNyArMTE3OSw4IEBAIGJvb2wgUHJveHlPYmplY3Q6OmlzUmV2b2tl
ZCgpIGNvbnN0CiAgICAgcmV0dXJuIGhhbmRsZXIoKS5pc051bGwoKTsKIH0KIAotdm9pZCBQcm94
eU9iamVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9y
KQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgUHJveHlPYmplY3Q6OnZpc2l0Q2hp
bGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBQcm94eU9i
amVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxQcm94eU9iamVjdCo+KGNlbGwpOwogICAgIEFTU0VS
VF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTExODksNCArMTE5
MCw2IEBAIHZvaWQgUHJveHlPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiAKICAgICB2aXNp
dG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2hhbmRsZXIpOwogfQogCitERUZJTkVfVklTSVRfQ0hJ
TERSRU4oUHJveHlPYmplY3QpOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3h5T2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJveHlPYmplY3QuaAkocmV2aXNpb24gMjcyOTAyKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJveHlPYmplY3QuaAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC05MSw3ICs5MSw3IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVy
dHlOYW1lcyhKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lQXJyYXkmLCBE
b250RW51bVByb3BlcnRpZXNNb2RlKTsKICAgICBzdGF0aWMgYm9vbCBzZXRQcm90b3R5cGUoSlNP
YmplY3QqLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUgcHJvdG90eXBlLCBib29sIHNob3VsZFRo
cm93SWZDYW50U2V0KTsKICAgICBzdGF0aWMgSlNWYWx1ZSBnZXRQcm90b3R5cGUoSlNPYmplY3Qq
LCBKU0dsb2JhbE9iamVjdCopOwotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgYm9v
bCBnZXRPd25Qcm9wZXJ0eVNsb3RDb21tb24oSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUs
IFByb3BlcnR5U2xvdCYpOwogICAgIGJvb2wgcGVyZm9ybUludGVybmFsTWV0aG9kR2V0T3duUHJv
cGVydHkoSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJveHlSZXZva2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3h5UmV2b2tlLmNwcAkocmV2
aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJveHlSZXZv
a2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxNiBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTY5LDcgKzY5LDggQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNU
SU9OKHBlcmZvcm1Qcm94eVJldgogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSk7CiB9CiAKLXZvaWQgUHJveHlSZXZva2U6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxs
LCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lk
IFByb3h5UmV2b2tlOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZp
c2l0b3IpCiB7CiAgICAgUHJveHlSZXZva2UqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8UHJveHlSZXZv
a2UqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGlu
Zm8oKSk7CkBAIC03OCw0ICs3OSw2IEBAIHZvaWQgUHJveHlSZXZva2U6OnZpc2l0Q2hpbGRyZW4o
SlNDZWxsKiAKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX3Byb3h5KTsKIH0KIAor
REVGSU5FX1ZJU0lUX0NISUxEUkVOKFByb3h5UmV2b2tlKTsKKwogfSAvLyBuYW1lc3BhY2UgSlND
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm94eVJldm9rZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3h5UmV2b2tlLmgJKHJl
dmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3h5UmV2
b2tlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDE2LTIwMTkgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01Miw3ICs1Miw3IEBAIHB1YmxpYzoKICAgICB9CiAK
ICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgUHJveHlPYmplY3QqKTsKLSAgICBzdGF0aWMg
dm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9W
SVNJVF9DSElMRFJFTjsKICAgICBKU1ZhbHVlIHByb3h5KCkgeyByZXR1cm4gbV9wcm94eS5nZXQo
KTsgfQogICAgIHZvaWQgc2V0UHJveHlUb051bGwoVk0mIHZtKSB7IHJldHVybiBtX3Byb3h5LnNl
dCh2bSwgdGhpcywganNOdWxsKCkpOyB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1JlZ0V4cENhY2hlZFJlc3VsdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwQ2FjaGVkUmVzdWx0LmNwcAkocmV2aXNpb24gMjcyOTAy
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwQ2FjaGVkUmVzdWx0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTIsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEyLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0zMSw3ICszMSw4IEBACiAKIG5hbWVzcGFjZSBKU0Mgewog
Ci12b2lkIFJlZ0V4cENhY2hlZFJlc3VsdDo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImIHZp
c2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBSZWdFeHBDYWNoZWRSZXN1
bHQ6OnZpc2l0QWdncmVnYXRlSW1wbChWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHZpc2l0b3Iu
YXBwZW5kKG1fbGFzdElucHV0KTsKICAgICB2aXNpdG9yLmFwcGVuZChtX2xhc3RSZWdFeHApOwpA
QCAtNDMsNiArNDQsOCBAQCB2b2lkIFJlZ0V4cENhY2hlZFJlc3VsdDo6dmlzaXRBZ2dyZWdhdGUo
CiAgICAgfQogfQogCitERUZJTkVfVklTSVRfQUdHUkVHQVRFKFJlZ0V4cENhY2hlZFJlc3VsdCk7
CisKIEpTQXJyYXkqIFJlZ0V4cENhY2hlZFJlc3VsdDo6bGFzdFJlc3VsdChKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBKU09iamVjdCogb3duZXIpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFs
T2JqZWN0LT52bSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhw
Q2FjaGVkUmVzdWx0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvUmVnRXhwQ2FjaGVkUmVzdWx0LmgJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENhY2hlZFJlc3VsdC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTY1LDcgKzY1LDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9yZWlmaWVkID8gbV9y
ZWlmaWVkSW5wdXQuZ2V0KCkgOiBtX2xhc3RJbnB1dC5nZXQoKTsKICAgICB9CiAKLSAgICB2b2lk
IHZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9BR0dSRUdB
VEU7CiAKICAgICAvLyBtX2xhc3RSZWdFeHAgd291bGQgYmUgbnVsbHB0ciB3aGVuIFJlZ0V4cENh
Y2hlZFJlc3VsdCBpcyBub3QgcmVpZmllZC4KICAgICAvLyBJZiB3ZSBmaW5kIG1fbGFzdFJlZ0V4
cCBpcyBudWxscHRyLCBpdCBtZWFucyB0aGlzIHNob3VsZCBob2xkIHRoZSBlbXB0eSBSZWdFeHAu
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBHbG9iYWxEYXRhLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBHbG9i
YWxEYXRhLmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvUmVnRXhwR2xvYmFsRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOS0yMDIxIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzAsMTEgKzMwLDE0IEBA
CiAKIG5hbWVzcGFjZSBKU0MgewogCi12b2lkIFJlZ0V4cEdsb2JhbERhdGE6OnZpc2l0QWdncmVn
YXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3Zv
aWQgUmVnRXhwR2xvYmFsRGF0YTo6dmlzaXRBZ2dyZWdhdGVJbXBsKFZpc2l0b3ImIHZpc2l0b3Ip
CiB7CiAgICAgbV9jYWNoZWRSZXN1bHQudmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7CiB9CiAKK0RF
RklORV9WSVNJVF9BR0dSRUdBVEUoUmVnRXhwR2xvYmFsRGF0YSk7CisKIEpTVmFsdWUgUmVnRXhw
R2xvYmFsRGF0YTo6Z2V0QmFja3JlZihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCB1bnNp
Z25lZCBpKQogewogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cEdsb2JhbERhdGEuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBHbG9iYWxEYXRhLmgJKHJldmlz
aW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cEdsb2Jh
bERhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE5LTIwMjEgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC00MSw3ICs0MSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNl
dElucHV0KEpTR2xvYmFsT2JqZWN0KiwgSlNTdHJpbmcqKTsKICAgICBKU1N0cmluZyogaW5wdXQo
KSB7IHJldHVybiBtX2NhY2hlZFJlc3VsdC5pbnB1dCgpOyB9CiAKLSAgICB2b2lkIHZpc2l0QWdn
cmVnYXRlKFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9BR0dSRUdBVEU7CiAKICAg
ICBKU1ZhbHVlIGdldEJhY2tyZWYoSlNHbG9iYWxPYmplY3QqLCB1bnNpZ25lZCk7CiAgICAgSlNW
YWx1ZSBnZXRMYXN0UGFyZW4oSlNHbG9iYWxPYmplY3QqKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1JlZ0V4cE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0LmNwcAkocmV2aXNpb24gMjcyOTAyKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDAg
SGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAx
OSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDAz
LTIwMjEgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAg
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1Ymxp
YwpAQCAtNDYsNyArNDYsOCBAQCB2b2lkIFJlZ0V4cE9iamVjdDo6ZmluaXNoQ3JlYXRpb24oVk0m
IHZtCiAgICAgQVNTRVJUKHR5cGUoKSA9PSBSZWdFeHBPYmplY3RUeXBlKTsKIH0KIAotdm9pZCBS
ZWdFeHBPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlz
aXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFJlZ0V4cE9iamVjdDo6dmlz
aXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFJl
Z0V4cE9iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxSZWdFeHBPYmplY3QqPihjZWxsKTsKICAg
ICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC01NSw2
ICs1Niw4IEBAIHZvaWQgUmVnRXhwT2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCoKICAgICB2
aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2xhc3RJbmRleCk7CiB9CiAKK0RFRklORV9WSVNJ
VF9DSElMRFJFTihSZWdFeHBPYmplY3QpOworCiBib29sIFJlZ0V4cE9iamVjdDo6Z2V0T3duUHJv
cGVydHlTbG90KEpTT2JqZWN0KiBvYmplY3QsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBW
TSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9SZWdFeHBPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9SZWdFeHBPYmplY3QuaAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NiArMSw2IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAwIEhhcnJpIFBvcnRlbiAo
cG9ydGVuQGtkZS5vcmcpCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMTkgQXBwbGUgSW5jLiBB
bGwgUmlnaHRzIFJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwMy0yMDIxIEFwcGxlIElu
Yy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKQEAgLTEzMyw3ICsx
MzMsNyBAQCBwcml2YXRlOgogICAgIEpTX0VYUE9SVF9QUklWQVRFIFJlZ0V4cE9iamVjdChWTSYs
IFN0cnVjdHVyZSosIFJlZ0V4cCopOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZmluaXNo
Q3JlYXRpb24oVk0mKTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwg
U2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgYm9vbCBs
YXN0SW5kZXhJc1dyaXRhYmxlKCkgY29uc3QKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TYW1wbGluZ1Byb2ZpbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TYW1wbGluZ1Byb2ZpbGVyLmNwcAkocmV2aXNpb24gMjcy
OTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTY1Miw3ICs2NTIsNyBAQCB2b2lkIFNhbXBsaW5nUHJvZmls
ZXI6OnByb2Nlc3NVbnZlcmlmaWVkCiAgICAgbV91bnByb2Nlc3NlZFN0YWNrVHJhY2VzLmNsZWFy
KCk7CiB9CiAKLXZvaWQgU2FtcGxpbmdQcm9maWxlcjo6dmlzaXQoU2xvdFZpc2l0b3ImIHZpc2l0
b3IpCit2b2lkIFNhbXBsaW5nUHJvZmlsZXI6OnZpc2l0KEFic3RyYWN0U2xvdFZpc2l0b3ImIHZp
c2l0b3IpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQobV9sb2NrLmlzTG9ja2VkKCkpOwogICAgIGZv
ciAoSlNDZWxsKiBjZWxsIDogbV9saXZlQ2VsbFBvaW50ZXJzKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NhbXBsaW5nUHJvZmlsZXIuaAkocmV2aXNpb24gMjcy
OTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYt
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTE3MSw3ICsxNzEsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBub3RpY2VK
U0xvY2tBY3F1aXNpdGlvbigpOwogICAgIHZvaWQgbm90aWNlVk1FbnRyeSgpOwogICAgIHZvaWQg
c2h1dGRvd24oKTsKLSAgICB2b2lkIHZpc2l0KFNsb3RWaXNpdG9yJik7CisgICAgdm9pZCB2aXNp
dChBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAgICAgTG9jayYgZ2V0TG9jaygpIHsgcmV0dXJuIG1f
bG9jazsgfQogICAgIHZvaWQgc2V0VGltaW5nSW50ZXJ2YWwoU2Vjb25kcyBpbnRlcnZhbCkgeyBt
X3RpbWluZ0ludGVydmFsID0gaW50ZXJ2YWw7IH0KICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lk
IHN0YXJ0KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29wZWRBcmd1
bWVudHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Nj
b3BlZEFyZ3VtZW50cy5jcHAJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1Njb3BlZEFyZ3VtZW50cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTggQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC05OCw3
ICs5OCw4IEBAIFNjb3BlZEFyZ3VtZW50cyogU2NvcGVkQXJndW1lbnRzOjpjcmVhdGUKICAgICBy
ZXR1cm4gcmVzdWx0OwogfQogCi12b2lkIFNjb3BlZEFyZ3VtZW50czo6dmlzaXRDaGlsZHJlbihK
U0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlz
aXRvcj4KK3ZvaWQgU2NvcGVkQXJndW1lbnRzOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNl
bGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgU2NvcGVkQXJndW1lbnRzKiB0aGlzT2JqZWN0
ID0gc3RhdGljX2Nhc3Q8U2NvcGVkQXJndW1lbnRzKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09C
SkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtMTE1LDYgKzExNiw4IEBAIHZv
aWQgU2NvcGVkQXJndW1lbnRzOjp2aXNpdENoaWxkcmVuKEpTQ2UKICAgICB9CiB9CiAKK0RFRklO
RV9WSVNJVF9DSElMRFJFTihTY29wZWRBcmd1bWVudHMpOworCiBTdHJ1Y3R1cmUqIFNjb3BlZEFy
Z3VtZW50czo6Y3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCiB7CiAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRl
KHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oU2NvcGVkQXJndW1lbnRzVHlw
ZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU2NvcGVkQXJndW1lbnRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU2NvcGVkQXJndW1lbnRzLmgJKHJldmlzaW9uIDI3MjkwMikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlZEFyZ3VtZW50cy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE5IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtNjMsOSArNjMsOSBAQCBwdWJsaWM6CiAgICAgCiAgICAgLy8gQ3JlYXRlcyBhbiBh
cmd1bWVudHMgb2JqZWN0IGJ5IGNvcHlpbmcgdGhlIGFyZ3VtZW50cyBmcm9tIGEgd2VsbC1kZWZp
bmVkIHN0YWNrIGxvY2F0aW9uLgogICAgIHN0YXRpYyBTY29wZWRBcmd1bWVudHMqIGNyZWF0ZUJ5
Q29weWluZ0Zyb20oVk0mLCBTdHJ1Y3R1cmUqLCBSZWdpc3RlciogYXJndW1lbnRzU3RhcnQsIHVu
c2lnbmVkIHRvdGFsTGVuZ3RoLCBKU0Z1bmN0aW9uKiBjYWxsZWUsIFNjb3BlZEFyZ3VtZW50c1Rh
YmxlKiwgSlNMZXhpY2FsRW52aXJvbm1lbnQqKTsKLSAgICAKLSAgICBzdGF0aWMgdm9pZCB2aXNp
dENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7Ci0gICAgCisKKyAgICBERUNMQVJFX1ZJ
U0lUX0NISUxEUkVOOworCiAgICAgdWludDMyX3QgaW50ZXJuYWxMZW5ndGgoKSBjb25zdAogICAg
IHsKICAgICAgICAgcmV0dXJuIG1fdG90YWxMZW5ndGg7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xs
ZXIuY3BwCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjIs
NyArNjIsNyBAQCBib29sIFNpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyOjppc0F0b21pCiAgICAg
cmV0dXJuIG1fYWxsb3dBdG9taWNzV2FpdDsKIH0KIAotYm9vbCBTaW1wbGVUeXBlZEFycmF5Q29u
dHJvbGxlcjo6SlNBcnJheUJ1ZmZlck93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhK
U0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIEpTQzo6U2xvdFZpc2l0b3Im
IHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCitib29sIFNpbXBsZVR5cGVkQXJyYXlDb250
cm9sbGVyOjpKU0FycmF5QnVmZmVyT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpT
Qzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgSlNDOjpBYnN0cmFjdFNsb3RW
aXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQogewogICAgIGlmIChVTkxJS0VM
WShyZWFzb24pKQogICAgICAgICAqcmVhc29uID0gIkpTQXJyYXlCdWZmZXIgaXMgb3BhcXVlIHJv
b3QiOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2ltcGxlVHlwZWRBcnJh
eUNvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlci5oCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlci5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTU4LDcgKzU4LDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBjbGFzcyBK
U0FycmF5QnVmZmVyT3duZXIgZmluYWwgOiBwdWJsaWMgV2Vha0hhbmRsZU93bmVyIHsKICAgICBw
dWJsaWM6Ci0gICAgICAgIGJvb2wgaXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5k
bGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCwgU2xvdFZpc2l0b3ImLCBjb25zdCBjaGFy
KiogcmVhc29uKSBmaW5hbDsKKyAgICAgICAgYm9vbCBpc1JlYWNoYWJsZUZyb21PcGFxdWVSb290
cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0LCBBYnN0cmFjdFNsb3RW
aXNpdG9yJiwgY29uc3QgY2hhcioqIHJlYXNvbikgZmluYWw7CiAgICAgICAgIHZvaWQgZmluYWxp
emUoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCkgZmluYWw7CiAgICAg
fTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU21hbGxTdHJpbmdzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TbWFsbFN0cmlu
Z3MuY3BwCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TbWFsbFN0cmluZ3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAwOCwgMjAxMCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAyMSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY2LDcgKzY2LDggQEAgdm9p
ZCBTbWFsbFN0cmluZ3M6OmluaXRpYWxpemVDb21tb25TdHJpbgogICAgIHNldElzSW5pdGlhbGl6
ZWQodHJ1ZSk7CiB9CiAKLXZvaWQgU21hbGxTdHJpbmdzOjp2aXNpdFN0cm9uZ1JlZmVyZW5jZXMo
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBT
bWFsbFN0cmluZ3M6OnZpc2l0U3Ryb25nUmVmZXJlbmNlcyhWaXNpdG9yJiB2aXNpdG9yKQogewog
ICAgIG1fbmVlZHNUb0JlVmlzaXRlZCA9IGZhbHNlOwogICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJy
aWVyZWQobV9lbXB0eVN0cmluZyk7CkBAIC04NCw2ICs4NSw5IEBAIHZvaWQgU21hbGxTdHJpbmdz
Ojp2aXNpdFN0cm9uZ1JlZmVyZW5jZXMKICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKG1f
b2tTdHJpbmcpOwogfQogCit0ZW1wbGF0ZSB2b2lkIFNtYWxsU3RyaW5nczo6dmlzaXRTdHJvbmdS
ZWZlcmVuY2VzKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgU21hbGxTdHJp
bmdzOjp2aXNpdFN0cm9uZ1JlZmVyZW5jZXMoU2xvdFZpc2l0b3ImKTsKKwogU21hbGxTdHJpbmdz
Ojp+U21hbGxTdHJpbmdzKCkKIHsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1NtYWxsU3RyaW5ncy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1NtYWxsU3RyaW5ncy5oCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TbWFsbFN0cmluZ3MuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxOSBBcHBsZSBJbmMuIEFsbCBSaWdo
dHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAyMSBBcHBsZSBJbmMuIEFsbCBS
aWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ5LDkg
KzQ5LDkgQEAgY2xhc3MgU3RyaW5nSW1wbDsKIAogbmFtZXNwYWNlIEpTQyB7CiAKK2NsYXNzIEFi
c3RyYWN0U2xvdFZpc2l0b3I7CiBjbGFzcyBWTTsKIGNsYXNzIEpTU3RyaW5nOwotY2xhc3MgU2xv
dFZpc2l0b3I7CiAKIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbWF4U2luZ2xlQ2hhcmFjdGVy
U3RyaW5nID0gMHhGRjsKIApAQCAtNzgsNyArNzgsNyBAQCBwdWJsaWM6CiAgICAgSlNTdHJpbmcq
KiBzaW5nbGVDaGFyYWN0ZXJTdHJpbmdzKCkgeyByZXR1cm4gJm1fc2luZ2xlQ2hhcmFjdGVyU3Ry
aW5nc1swXTsgfQogCiAgICAgdm9pZCBpbml0aWFsaXplQ29tbW9uU3RyaW5ncyhWTSYpOwotICAg
IHZvaWQgdmlzaXRTdHJvbmdSZWZlcmVuY2VzKFNsb3RWaXNpdG9yJik7CisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCB2aXNpdFN0cm9uZ1JlZmVyZW5jZXMoVmlzaXRvciYpOwog
CiAjZGVmaW5lIEpTQ19DT01NT05fU1RSSU5HU19BQ0NFU1NPUl9ERUZJTklUSU9OKG5hbWUpIFwK
ICAgICBKU1N0cmluZyogbmFtZSMjU3RyaW5nKCkgY29uc3QgICAgICAgICAgICAgICAgICAgXApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3BhcnNlQXJyYXlWYWx1ZU1hcC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3BhcnNlQXJy
YXlWYWx1ZU1hcC5jcHAJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1NwYXJzZUFycmF5VmFsdWVNYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMS0yMDE3IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjEw
LDcgKzIxMCw4IEBAIEpTVmFsdWUgU3BhcnNlQXJyYXlFbnRyeTo6Z2V0Tm9uU3BhcnNlTW8KICAg
ICByZXR1cm4gQmFzZTo6Z2V0KCk7CiB9CiAKLXZvaWQgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6dmlz
aXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8
dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6dmlzaXRDaGlsZHJl
bkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFNwYXJzZUFycmF5
VmFsdWVNYXAqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8U3BhcnNlQXJyYXlWYWx1ZU1hcCo+KGNlbGwp
OwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAg
LTIyMyw1ICsyMjQsNyBAQCB2b2lkIFNwYXJzZUFycmF5VmFsdWVNYXA6OnZpc2l0Q2hpbGRyZW4o
CiAgICAgdmlzaXRvci5yZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQodGhpc09iamVjdC0+bV9yZXBv
cnRlZENhcGFjaXR5ICogc2l6ZW9mKE1hcDo6S2V5VmFsdWVQYWlyVHlwZSkpOwogfQogCitERUZJ
TkVfVklTSVRfQ0hJTERSRU4oU3BhcnNlQXJyYXlWYWx1ZU1hcCk7CisKIH0gLy8gbmFtZXNwYWNl
IEpTQwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TcGFyc2VBcnJheVZh
bHVlTWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3Bh
cnNlQXJyYXlWYWx1ZU1hcC5oCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TcGFyc2VBcnJheVZhbHVlTWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTkgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0x
MTUsNyArMTE1LDcgQEAgcHVibGljOgogICAgIAogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0
ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBwcm90b3R5cGUpOwogCi0g
ICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAg
IERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBib29sIHNwYXJzZU1vZGUoKQogICAgIHsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0YWNrRnJhbWUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0YWNrRnJhbWUuY3BwCShy
ZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdGFja0Zy
YW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTYtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE0MSwxMyArMTQxLDUgQEAgU3RyaW5nIFN0YWNr
RnJhbWU6OnRvU3RyaW5nKFZNJiB2bSkgY29ucwogICAgIHJldHVybiB0cmFjZUJ1aWxkLnRvU3Ry
aW5nKCkuaW1wbCgpOwogfQogCi12b2lkIFN0YWNrRnJhbWU6OnZpc2l0Q2hpbGRyZW4oU2xvdFZp
c2l0b3ImIHZpc2l0b3IpCi17Ci0gICAgaWYgKG1fY2FsbGVlKQotICAgICAgICB2aXNpdG9yLmFw
cGVuZChtX2NhbGxlZSk7Ci0gICAgaWYgKG1fY29kZUJsb2NrKQotICAgICAgICB2aXNpdG9yLmFw
cGVuZChtX2NvZGVCbG9jayk7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIEpTQwogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdGFja0ZyYW1lLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RhY2tGcmFtZS5oCShyZXZpc2lvbiAyNzI5MDIp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdGFja0ZyYW1lLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0yNiw2ICsyNiw3IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkhlYXAu
aCIKKyNpbmNsdWRlICJTbG90VmlzaXRvck1hY3Jvcy5oIgogI2luY2x1ZGUgIlZNLmgiCiAjaW5j
bHVkZSAiV2FzbUluZGV4T3JOYW1lLmgiCiAjaW5jbHVkZSAiV3JpdGVCYXJyaWVyLmgiCkBAIC0z
NSw3ICszNiw2IEBAIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBDb2RlQmxvY2s7CiBjbGFzcyBK
U09iamVjdDsKLWNsYXNzIFNsb3RWaXNpdG9yOwogCiBjbGFzcyBTdGFja0ZyYW1lIHsKIHB1Ymxp
YzoKQEAgLTU3LDggKzU3LDE2IEBAIHB1YmxpYzoKICAgICAgICAgQVNTRVJUKGhhc0J5dGVjb2Rl
SW5kZXgoKSk7CiAgICAgICAgIHJldHVybiBtX2J5dGVjb2RlSW5kZXg7CiAgICAgfQotICAgIAot
ICAgIHZvaWQgdmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYpOworCisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVmlzaXRvcj4KKyAgICB2b2lkIHZpc2l0Q2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikK
KyAgICB7CisgICAgICAgIGlmIChtX2NhbGxlZSkKKyAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5k
KG1fY2FsbGVlKTsKKyAgICAgICAgaWYgKG1fY29kZUJsb2NrKQorICAgICAgICAgICAgdmlzaXRv
ci5hcHBlbmQobV9jb2RlQmxvY2spOworICAgIH0KKwogICAgIGJvb2wgaXNNYXJrZWQoVk0mIHZt
KSBjb25zdCB7IHJldHVybiAoIW1fY2FsbGVlIHx8IHZtLmhlYXAuaXNNYXJrZWQobV9jYWxsZWUu
Z2V0KCkpKSAmJiAoIW1fY29kZUJsb2NrIHx8IHZtLmhlYXAuaXNNYXJrZWQobV9jb2RlQmxvY2su
Z2V0KCkpKTsgfQogCiBwcml2YXRlOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU3RydWN0dXJlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TdHJ1Y3R1cmUuY3BwCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAyMCBBbGV4ZXkgU2h2YXlrYSA8c2h2YWlr
YWxlc2hAZ21haWwuY29tPi4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTEyNjgsNyArMTI2OCw4IEBA
IHZvaWQgU3RydWN0dXJlOjpkaWRUcmFuc2l0aW9uRnJvbVRoaXNTdHIKICAgICAgICAgbV90cmFu
c2l0aW9uV2F0Y2hwb2ludFNldC5maXJlQWxsKHZtKCksIFN0cnVjdHVyZUZpcmVEZXRhaWwodGhp
cykpOwogfQogCi12b2lkIFN0cnVjdHVyZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgU3Ry
dWN0dXJlOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3Ip
CiB7CiAgICAgU3RydWN0dXJlKiB0aGlzT2JqZWN0ID0ganNDYXN0PFN0cnVjdHVyZSo+KGNlbGwp
OwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAg
LTEyOTAsMzIgKzEyOTEsMzggQEAgdm9pZCBTdHJ1Y3R1cmU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiBjZQogICAgICAgICAvLyBOT1RFOiBUaGlzIGNhbiBpbnRlcmxlYXZlIGluIHBpbigpLCBpbiB3
aGljaCBjYXNlIGl0IG1heSBzZWUgYSBudWxsIHByb3BlcnR5IHRhYmxlLgogICAgICAgICAvLyBU
aGF0J3MgZmluZSwgYmVjYXVzZSB0aGVuIHRoZSBiYXJyaWVyIHdpbGwgZmlyZSBhbmQgd2Ugd2ls
bCBzY2FuIHRoaXMgYWdhaW4uCiAgICAgICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1f
cHJvcGVydHlUYWJsZVVuc2FmZSk7Ci0gICAgfSBlbHNlIGlmICh2aXNpdG9yLmlzQW5hbHl6aW5n
SGVhcCgpKQorICAgIH0gZWxzZSBpZiAodmlzaXRvci52bSgpLmlzQW5hbHl6aW5nSGVhcCgpKQog
ICAgICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX3Byb3BlcnR5VGFibGVVbnNhZmUp
OwogICAgIGVsc2UgaWYgKHRoaXNPYmplY3QtPm1fcHJvcGVydHlUYWJsZVVuc2FmZSkKICAgICAg
ICAgdGhpc09iamVjdC0+bV9wcm9wZXJ0eVRhYmxlVW5zYWZlLmNsZWFyKCk7CiB9CiAKLWJvb2wg
U3RydWN0dXJlOjppc0NoZWFwRHVyaW5nR0MoVk0mIHZtKQorREVGSU5FX1ZJU0lUX0NISUxEUkVO
KFN0cnVjdHVyZSk7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+CitBTFdBWVNfSU5MSU5F
IGJvb2wgU3RydWN0dXJlOjppc0NoZWFwRHVyaW5nR0MoVmlzaXRvciYgdmlzaXRvcikKIHsKICAg
ICAvLyBGSVhNRTogV2UgY291bGQgbWFrZSB0aGlzIGV2ZW4gc2FmZXIgYnkgcmV0dXJuaW5nIGZh
bHNlIGlmIHRoaXMgc3RydWN0dXJlJ3MgcHJvcGVydHkgdGFibGUKICAgICAvLyBoYXMgYW55IGxh
cmdlIHByb3BlcnR5IG5hbWVzLgogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNTczMzQKICAgICAKLSAgICByZXR1cm4gKCFtX2dsb2JhbE9iamVjdCB8fCB2
bS5oZWFwLmlzTWFya2VkKG1fZ2xvYmFsT2JqZWN0LmdldCgpKSkKLSAgICAgICAgJiYgKGhhc1Bv
bHlQcm90bygpIHx8ICFzdG9yZWRQcm90b3R5cGVPYmplY3QoKSB8fCB2bS5oZWFwLmlzTWFya2Vk
KHN0b3JlZFByb3RvdHlwZU9iamVjdCgpKSk7CisgICAgcmV0dXJuICghbV9nbG9iYWxPYmplY3Qg
fHwgdmlzaXRvci5pc01hcmtlZChtX2dsb2JhbE9iamVjdC5nZXQoKSkpCisgICAgICAgICYmICho
YXNQb2x5UHJvdG8oKSB8fCAhc3RvcmVkUHJvdG90eXBlT2JqZWN0KCkgfHwgdmlzaXRvci5pc01h
cmtlZChzdG9yZWRQcm90b3R5cGVPYmplY3QoKSkpOwogfQogCi1ib29sIFN0cnVjdHVyZTo6bWFy
a0lmQ2hlYXAoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
PgorYm9vbCBTdHJ1Y3R1cmU6Om1hcmtJZkNoZWFwKFZpc2l0b3ImIHZpc2l0b3IpCiB7Ci0gICAg
Vk0mIHZtID0gdmlzaXRvci52bSgpOwotICAgIGlmICghaXNDaGVhcER1cmluZ0dDKHZtKSkKLSAg
ICAgICAgcmV0dXJuIHZtLmhlYXAuaXNNYXJrZWQodGhpcyk7Ci0gICAgCisgICAgaWYgKCFpc0No
ZWFwRHVyaW5nR0ModmlzaXRvcikpCisgICAgICAgIHJldHVybiB2aXNpdG9yLmlzTWFya2VkKHRo
aXMpOworCiAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZCh0aGlzKTsKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIAordGVtcGxhdGUgYm9vbCBTdHJ1Y3R1cmU6Om1hcmtJZkNoZWFwKEFic3RyYWN0
U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIGJvb2wgU3RydWN0dXJlOjptYXJrSWZDaGVhcChTbG90
VmlzaXRvciYpOworCiBSZWY8U3RydWN0dXJlU2hhcGU+IFN0cnVjdHVyZTo6dG9TdHJ1Y3R1cmVT
aGFwZShKU1ZhbHVlIHZhbHVlLCBib29sJiBzYXdQb2x5UHJvdG9TdHJ1Y3R1cmUpCiB7CiAgICAg
UmVmPFN0cnVjdHVyZVNoYXBlPiBiYXNlU2hhcGUgPSBTdHJ1Y3R1cmVTaGFwZTo6Y3JlYXRlKCk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAkocmV2aXNp
b24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4
LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDA4LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC02MCw3ICs2MCw2IEBAIGNsYXNzIFByb3BlcnR5TmFtZUFycmF5
RGF0YTsKIGNsYXNzIFByb3BlcnR5VGFibGU7CiBjbGFzcyBTdHJ1Y3R1cmVDaGFpbjsKIGNsYXNz
IFN0cnVjdHVyZVNoYXBlOwotY2xhc3MgU2xvdFZpc2l0b3I7CiBjbGFzcyBKU1N0cmluZzsKIHN0
cnVjdCBEdW1wQ29udGV4dDsKIHN0cnVjdCBIYXNoVGFibGU7CkBAIC0zMTAsNyArMzA5LDcgQEAg
cHVibGljOgogICAgIEpTVmFsdWUgcHJvdG90eXBlRm9yTG9va3VwKEpTR2xvYmFsT2JqZWN0Kiwg
SlNDZWxsKiBiYXNlKSBjb25zdDsKICAgICBTdHJ1Y3R1cmVDaGFpbiogcHJvdG90eXBlQ2hhaW4o
Vk0mLCBKU0dsb2JhbE9iamVjdCosIEpTT2JqZWN0KiBiYXNlKSBjb25zdDsKICAgICBTdHJ1Y3R1
cmVDaGFpbiogcHJvdG90eXBlQ2hhaW4oSlNHbG9iYWxPYmplY3QqLCBKU09iamVjdCogYmFzZSkg
Y29uc3Q7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRv
ciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAgICAgCiAgICAgLy8gQSBTdHJ1Y3R1
cmUgaXMgY2hlYXAgdG8gbWFyayBkdXJpbmcgR0MgaWYgZG9pbmcgc28gd291bGQgb25seSBhZGQg
YSBzbWFsbCBhbmQgYm91bmRlZCBhbW91bnQKICAgICAvLyB0byBvdXIgaGVhcCBmb290cHJpbnQu
IEZvciBleGFtcGxlLCBpZiB0aGUgc3RydWN0dXJlIHJlZmVycyB0byBhIGdsb2JhbCBvYmplY3Qg
dGhhdCBpcyBub3QKQEAgLTMxOCwxMCArMzE3LDEwIEBAIHB1YmxpYzoKICAgICAvLyBpbmNyZWFz
ZSBpbiBmb290cHJpbnQgYmVjYXVzZSBubyBvdGhlciBvYmplY3QgcmVmZXJzIHRvIHRoYXQgZ2xv
YmFsIG9iamVjdC4gVGhpcyBtZXRob2QKICAgICAvLyByZXR1cm5zIHRydWUgaWYgYWxsIHVzZXIt
Y29udHJvbGxlZCAoYW5kIGhlbmNlIHVuYm91bmRlZCBpbiBzaXplKSBvYmplY3RzIHJlZmVyZW5j
ZWQgZnJvbSB0aGUKICAgICAvLyBTdHJ1Y3R1cmUgYXJlIGFscmVhZHkgbWFya2VkLgotICAgIGJv
b2wgaXNDaGVhcER1cmluZ0dDKFZNJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4g
Ym9vbCBpc0NoZWFwRHVyaW5nR0MoVmlzaXRvciYpOwogICAgIAogICAgIC8vIFJldHVybnMgdHJ1
ZSBpZiB0aGlzIHN0cnVjdHVyZSBpcyBub3cgbWFya2VkLgotICAgIGJvb2wgbWFya0lmQ2hlYXAo
U2xvdFZpc2l0b3ImKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiBib29sIG1hcmtJ
ZkNoZWFwKFZpc2l0b3ImKTsKICAgICAKICAgICBib29sIGhhc1JhcmVEYXRhKCkgY29uc3QKICAg
ICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVDaGFpbi5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJl
Q2hhaW4uY3BwCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TdHJ1Y3R1cmVDaGFpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjYsNyArNjYsOCBAQCB2b2lk
IFN0cnVjdHVyZUNoYWluOjpmaW5pc2hDcmVhdGlvbihWTSYgCiAgICAgfQogfQogCi12b2lkIFN0
cnVjdHVyZUNoYWluOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZp
c2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBTdHJ1Y3R1cmVDaGFpbjo6
dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAg
IFN0cnVjdHVyZUNoYWluKiB0aGlzT2JqZWN0ID0ganNDYXN0PFN0cnVjdHVyZUNoYWluKj4oY2Vs
bCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpA
QCAtODAsNCArODEsNiBAQCB2b2lkIFN0cnVjdHVyZUNoYWluOjp2aXNpdENoaWxkcmVuKEpTQ2Vs
CiAgICAgfQogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oU3RydWN0dXJlQ2hhaW4pOworCiB9
IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0
cnVjdHVyZUNoYWluLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU3RydWN0dXJlQ2hhaW4uaAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlQ2hhaW4uaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTUxLDcg
KzUxLDcgQEAgcHVibGljOgogCiAgICAgc3RhdGljIFN0cnVjdHVyZUNoYWluKiBjcmVhdGUoVk0m
LCBKU09iamVjdCopOwogICAgIFN0cnVjdHVyZUlEKiBoZWFkKCkgeyByZXR1cm4gbV92ZWN0b3Iu
Z2V0KCk7IH0KLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNp
dG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIHN0YXRpYyBTdHJ1Y3R1
cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEpTVmFsdWUgcHJvdG90eXBlKQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1N0cnVjdHVyZVJhcmVEYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVSYXJlRGF0YS5jcHAJKHJldmlzaW9uIDI3MjkwMikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZVJhcmVEYXRhLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTY3LDcgKzY3LDggQEAgU3RydWN0dXJlUmFyZURhdGE6OlN0cnVj
dHVyZVJhcmVEYXRhKFZNJgogICAgICAgICBtX3ByZXZpb3VzLnNldCh2bSwgdGhpcywgcHJldmlv
dXMpOwogfQogCi12b2lkIFN0cnVjdHVyZVJhcmVEYXRhOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCog
Y2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgor
dm9pZCBTdHJ1Y3R1cmVSYXJlRGF0YTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBW
aXNpdG9yJiB2aXNpdG9yKQogewogICAgIFN0cnVjdHVyZVJhcmVEYXRhKiB0aGlzT2JqZWN0ID0g
anNDYXN0PFN0cnVjdHVyZVJhcmVEYXRhKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9J
TkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtODYsNiArODcsOCBAQCB2b2lkIFN0cnVj
dHVyZVJhcmVEYXRhOjp2aXNpdENoaWxkcmVuKEpTCiAgICAgfQogfQogCitERUZJTkVfVklTSVRf
Q0hJTERSRU4oU3RydWN0dXJlUmFyZURhdGEpOworCiAvLyAtLS0tLS0tLS0tLSBDYWNoZWQgc3Bl
Y2lhbCBwcm9wZXJ0aWVzIGhlbHBlciB3YXRjaHBvaW50IGNsYXNzZXMgLS0tLS0tLS0tLS0KIAog
Y2xhc3MgQ2FjaGVkU3BlY2lhbFByb3BlcnR5QWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVX
YXRjaHBvaW50IGZpbmFsIDogcHVibGljIEFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0
Y2hwb2ludEJhc2UgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0
dXJlUmFyZURhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TdHJ1Y3R1cmVSYXJlRGF0YS5oCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVSYXJlRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIwIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
NjgsNyArNjgsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzRGVz
dHJ1Y3Rpb24gPSB0cnVlOwogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CiAKLSAg
ICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAg
REVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0
cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBwcm90b3R5cGUpOwogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TeW1ib2xUYWJsZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFibGUuY3BwCShyZXZp
c2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TeW1ib2xUYWJs
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDEyLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEyLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC05Miw3ICs5Miw4IEBAIHZvaWQgU3ltYm9sVGFibGU6
OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CiB9
CiAKLXZvaWQgU3ltYm9sVGFibGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiB0aGlzQ2VsbCwgU2xv
dFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBTeW1i
b2xUYWJsZTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiB0aGlzQ2VsbCwgVmlzaXRvciYgdmlz
aXRvcikKIHsKICAgICBTeW1ib2xUYWJsZSogdGhpc1N5bWJvbFRhYmxlID0ganNDYXN0PFN5bWJv
bFRhYmxlKj4odGhpc0NlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc1N5
bWJvbFRhYmxlLCBpbmZvKCkpOwpAQCAtMTA4LDYgKzEwOSw4IEBAIHZvaWQgU3ltYm9sVGFibGU6
OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiAKICAgICB0aGlzU3ltYm9sVGFibGUtPm1fbG9jYWxUb0Vu
dHJ5ID0gbnVsbHB0cjsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKFN5bWJvbFRhYmxlKTsK
KwogY29uc3QgU3ltYm9sVGFibGU6OkxvY2FsVG9FbnRyeVZlYyYgU3ltYm9sVGFibGU6OmxvY2Fs
VG9FbnRyeShjb25zdCBDb25jdXJyZW50SlNMb2NrZXImKQogewogICAgIGlmIChVTkxJS0VMWSgh
bV9sb2NhbFRvRW50cnkpKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
eW1ib2xUYWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1N5bWJvbFRhYmxlLmgJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1N5bWJvbFRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03MzMsNyArNzMzLDcg
QEAgcHVibGljOgogICAgICAgICBtX3NpbmdsZXRvbi5ub3RpZnlXcml0ZSh2bSwgdGhpcywgc2Nv
cGUsIHJlYXNvbik7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0Nl
bGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBE
RUNMQVJFX0VYUE9SVF9JTkZPOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9UeXBlUHJvZmlsZXJMb2cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1R5cGVQcm9maWxlckxvZy5jcHAJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVQcm9maWxlckxvZy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTkgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0xMjQsNyArMTI0LDcgQEAgdm9pZCBUeXBlUHJvZmlsZXJMb2c6OnByb2Nlc3NMb2dF
bnRyaWVzKAogICAgIH0KIH0KIAotdm9pZCBUeXBlUHJvZmlsZXJMb2c6OnZpc2l0KFNsb3RWaXNp
dG9yJiB2aXNpdG9yKQordm9pZCBUeXBlUHJvZmlsZXJMb2c6OnZpc2l0KEFic3RyYWN0U2xvdFZp
c2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgZm9yIChMb2dFbnRyeSogZW50cnkgPSBtX2xvZ1N0YXJ0
UHRyOyBlbnRyeSAhPSBtX2N1cnJlbnRMb2dFbnRyeVB0cjsgKytlbnRyeSkgewogICAgICAgICB2
aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKGVudHJ5LT52YWx1ZSk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9UeXBlUHJvZmlsZXJMb2cuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlUHJvZmlsZXJMb2cuaAkocmV2aXNpb24gMjcy
OTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZVByb2ZpbGVyTG9nLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNC0y
MDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtNTksNyArNTksNyBAQCBwdWJsaWM6CiAgICAgSlNfRVhQT1JUX1BSSVZB
VEUgdm9pZCBwcm9jZXNzTG9nRW50cmllcyhWTSYsIGNvbnN0IFN0cmluZyYpOwogICAgIExvZ0Vu
dHJ5KiBsb2dFbmRQdHIoKSBjb25zdCB7IHJldHVybiBtX2xvZ0VuZFB0cjsgfQogCi0gICAgdm9p
ZCB2aXNpdChTbG90VmlzaXRvciYpOworICAgIHZvaWQgdmlzaXQoQWJzdHJhY3RTbG90VmlzaXRv
ciYpOwogCiAgICAgc3RhdGljIHB0cmRpZmZfdCBsb2dTdGFydE9mZnNldCgpIHsgcmV0dXJuIE9C
SkVDVF9PRkZTRVRPRihUeXBlUHJvZmlsZXJMb2csIG1fbG9nU3RhcnRQdHIpOyB9CiAgICAgc3Rh
dGljIHB0cmRpZmZfdCBjdXJyZW50TG9nRW50cnlPZmZzZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZG
U0VUT0YoVHlwZVByb2ZpbGVyTG9nLCBtX2N1cnJlbnRMb2dFbnRyeVB0cik7IH0KSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEyMSw2ICsxMjEs
NyBAQCBjbGFzcyBGYXN0TWFsbG9jQWxpZ25lZE1lbW9yeUFsbG9jYXRvcjsKIGNsYXNzIEdpZ2Fj
YWdlQWxpZ25lZE1lbW9yeUFsbG9jYXRvcjsKIGNsYXNzIEhhbmRsZVN0YWNrOwogY2xhc3MgSGFz
T3duUHJvcGVydHlDYWNoZTsKK2NsYXNzIEhlYXBBbmFseXplcjsKIGNsYXNzIEhlYXBQcm9maWxl
cjsKIGNsYXNzIElkZW50aWZpZXI7CiBjbGFzcyBJbnRlcnByZXRlcjsKQEAgLTMwOSw2ICszMTAs
MTAgQEAgcHVibGljOgogICAgIEhlYXBQcm9maWxlciogaGVhcFByb2ZpbGVyKCkgY29uc3QgeyBy
ZXR1cm4gbV9oZWFwUHJvZmlsZXIuZ2V0KCk7IH0KICAgICBKU19FWFBPUlRfUFJJVkFURSBIZWFw
UHJvZmlsZXImIGVuc3VyZUhlYXBQcm9maWxlcigpOwogCisgICAgYm9vbCBpc0FuYWx5emluZ0hl
YXAoKSBjb25zdCB7IHJldHVybiBtX2FjdGl2ZUhlYXBBbmFseXplcjsgfQorICAgIEhlYXBBbmFs
eXplciogYWN0aXZlSGVhcEFuYWx5emVyKCkgY29uc3QgeyByZXR1cm4gbV9hY3RpdmVIZWFwQW5h
bHl6ZXI7IH0KKyAgICB2b2lkIHNldEFjdGl2ZUhlYXBBbmFseXplcihIZWFwQW5hbHl6ZXIqIGFu
YWx5emVyKSB7IG1fYWN0aXZlSGVhcEFuYWx5emVyID0gYW5hbHl6ZXI7IH0KKwogI2lmIEVOQUJM
RShTQU1QTElOR19QUk9GSUxFUikKICAgICBTYW1wbGluZ1Byb2ZpbGVyKiBzYW1wbGluZ1Byb2Zp
bGVyKCkgeyByZXR1cm4gbV9zYW1wbGluZ1Byb2ZpbGVyLmdldCgpOyB9CiAgICAgSlNfRVhQT1JU
X1BSSVZBVEUgU2FtcGxpbmdQcm9maWxlciYgZW5zdXJlU2FtcGxpbmdQcm9maWxlcihSZWY8U3Rv
cHdhdGNoPiYmKTsKQEAgLTExOTQsOSArMTE5OSwxMCBAQCBwdWJsaWM6CiAgICAgYm9vbCBkaWRF
bnRlclZNIHsgZmFsc2UgfTsKIHByaXZhdGU6CiAgICAgYm9vbCBtX2ZhaWxOZXh0TmV3Q29kZUJs
b2NrIHsgZmFsc2UgfTsKLSAgICBEZWxldGVQcm9wZXJ0eU1vZGUgbV9kZWxldGVQcm9wZXJ0eU1v
ZGUgeyBEZWxldGVQcm9wZXJ0eU1vZGU6OkRlZmF1bHQgfTsKICAgICBib29sIG1fZ2xvYmFsQ29u
c3RSZWRlY2xhcmF0aW9uU2hvdWxkVGhyb3cgeyB0cnVlIH07CiAgICAgYm9vbCBtX3Nob3VsZEJ1
aWxkUENUb0NvZGVPcmlnaW5NYXBwaW5nIHsgZmFsc2UgfTsKKyAgICBEZWxldGVQcm9wZXJ0eU1v
ZGUgbV9kZWxldGVQcm9wZXJ0eU1vZGUgeyBEZWxldGVQcm9wZXJ0eU1vZGU6OkRlZmF1bHQgfTsK
KyAgICBIZWFwQW5hbHl6ZXIqIG1fYWN0aXZlSGVhcEFuYWx5emVyIHsgbnVsbHB0ciB9OwogICAg
IHN0ZDo6dW5pcXVlX3B0cjxDb2RlQ2FjaGU+IG1fY29kZUNhY2hlOwogICAgIHN0ZDo6dW5pcXVl
X3B0cjxJbnRsQ2FjaGU+IG1faW50bENhY2hlOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxCdWlsdGlu
RXhlY3V0YWJsZXM+IG1fYnVpbHRpbkV4ZWN1dGFibGVzOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvV2Vha01hcEltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1dlYWtNYXBJbXBsLmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha01hcEltcGwuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTcgWXVzdWtlIFN1
enVraSA8dXRhdGFuZS50ZWFAZ21haWwuY29tPi4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTM5LDgg
KzM5LDkgQEAgdm9pZCBXZWFrTWFwSW1wbDxXZWFrTWFwQnVja2V0Pjo6ZGVzdHJveQogICAgIHN0
YXRpY19jYXN0PFdlYWtNYXBJbXBsKj4oY2VsbCktPn5XZWFrTWFwSW1wbCgpOwogfQogCi10ZW1w
bGF0ZSA8dHlwZW5hbWUgV2Vha01hcEJ1Y2tldD4KLXZvaWQgV2Vha01hcEltcGw8V2Vha01hcEJ1
Y2tldD46OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikK
K3RlbXBsYXRlPHR5cGVuYW1lIFdlYWtNYXBCdWNrZXQ+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNp
dG9yPgordm9pZCBXZWFrTWFwSW1wbDxXZWFrTWFwQnVja2V0Pjo6dmlzaXRDaGlsZHJlbkltcGwo
SlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFdlYWtNYXBJbXBsKiB0aGlz
T2JqZWN0ID0ganNDYXN0PFdlYWtNYXBJbXBsKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVD
VF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNDgsNiArNDksOCBAQCB2b2lkIFdl
YWtNYXBJbXBsPFdlYWtNYXBCdWNrZXQ+Ojp2aXNpdENoCiAgICAgdmlzaXRvci5yZXBvcnRFeHRy
YU1lbW9yeVZpc2l0ZWQodGhpc09iamVjdC0+bV9jYXBhY2l0eSAqIHNpemVvZihXZWFrTWFwQnVj
a2V0KSk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTl9XSVRIX01PRElGSUVSKHRlbXBsYXRl
PHR5cGVuYW1lIFdlYWtNYXBCdWNrZXQ+LCBXZWFrTWFwSW1wbDxXZWFrTWFwQnVja2V0Pik7CisK
IHRlbXBsYXRlIDx0eXBlbmFtZSBXZWFrTWFwQnVja2V0Pgogc2l6ZV90IFdlYWtNYXBJbXBsPFdl
YWtNYXBCdWNrZXQ+Ojplc3RpbWF0ZWRTaXplKEpTQ2VsbCogY2VsbCwgVk0mIHZtKQogewpAQCAt
NTYsMTUgKzU5LDI1IEBAIHNpemVfdCBXZWFrTWFwSW1wbDxXZWFrTWFwQnVja2V0Pjo6ZXN0aW0K
IH0KIAogdGVtcGxhdGUgPD4KLXZvaWQgV2Vha01hcEltcGw8V2Vha01hcEJ1Y2tldDxXZWFrTWFw
QnVja2V0RGF0YUtleT4+Ojp2aXNpdE91dHB1dENvbnN0cmFpbnRzKEpTQ2VsbCosIFNsb3RWaXNp
dG9yJikKK3RlbXBsYXRlIDw+Cit2b2lkIFdlYWtNYXBJbXBsPFdlYWtNYXBCdWNrZXQ8V2Vha01h
cEJ1Y2tldERhdGFLZXk+Pjo6dmlzaXRPdXRwdXRDb25zdHJhaW50cyhKU0NlbGwqLCBBYnN0cmFj
dFNsb3RWaXNpdG9yJikKIHsKICAgICAvLyBPbmx5IEpTV2Vha01hcCBuZWVkcyB0byBoYXJ2ZXN0
IHZhbHVlIHJlZmVyZW5jZXMKIH0KIAogdGVtcGxhdGUgPD4KLXZvaWQgV2Vha01hcEltcGw8V2Vh
a01hcEJ1Y2tldDxXZWFrTWFwQnVja2V0RGF0YUtleVZhbHVlPj46OnZpc2l0T3V0cHV0Q29uc3Ry
YWludHMoSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlIDw+Cit2
b2lkIFdlYWtNYXBJbXBsPFdlYWtNYXBCdWNrZXQ8V2Vha01hcEJ1Y2tldERhdGFLZXk+Pjo6dmlz
aXRPdXRwdXRDb25zdHJhaW50cyhKU0NlbGwqLCBTbG90VmlzaXRvciYpCiB7Ci0gICAgVk0mIHZt
ID0gdmlzaXRvci52bSgpOworICAgIC8vIE9ubHkgSlNXZWFrTWFwIG5lZWRzIHRvIGhhcnZlc3Qg
dmFsdWUgcmVmZXJlbmNlcworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBCdWNrZXRUeXBlPgordGVt
cGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK0FMV0FZU19JTkxJTkUgdm9pZCBXZWFrTWFwSW1wbDxC
dWNrZXRUeXBlPjo6dmlzaXRPdXRwdXRDb25zdHJhaW50cyhKU0NlbGwqIGNlbGwsIFZpc2l0b3Im
IHZpc2l0b3IpCit7CisgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3NhbWU8QnVja2V0VHlwZSwg
V2Vha01hcEJ1Y2tldDxXZWFrTWFwQnVja2V0RGF0YUtleVZhbHVlPj46OnZhbHVlKTsKKwogICAg
IGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8V2Vha01hcEltcGwqPihjZWxsKTsKICAgICBhdXRv
IGxvY2tlciA9IGhvbGRMb2NrKHRoaXNPYmplY3QtPmNlbGxMb2NrKCkpOwogICAgIGF1dG8qIGJ1
ZmZlciA9IHRoaXNPYmplY3QtPmJ1ZmZlcigpOwpAQCAtNzIsMTIgKzg1LDE1IEBAIHZvaWQgV2Vh
a01hcEltcGw8V2Vha01hcEJ1Y2tldDxXZWFrTWFwQnUKICAgICAgICAgYXV0byogYnVja2V0ID0g
YnVmZmVyICsgaW5kZXg7CiAgICAgICAgIGlmIChidWNrZXQtPmlzRW1wdHkoKSB8fCBidWNrZXQt
PmlzRGVsZXRlZCgpKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlmICghdm0uaGVh
cC5pc01hcmtlZChidWNrZXQtPmtleSgpKSkKKyAgICAgICAgaWYgKCF2aXNpdG9yLmlzTWFya2Vk
KGJ1Y2tldC0+a2V5KCkpKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIGJ1Y2tldC0+
dmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7CiAgICAgfQogfQogCit0ZW1wbGF0ZSB2b2lkIFdlYWtN
YXBJbXBsPFdlYWtNYXBCdWNrZXQ8V2Vha01hcEJ1Y2tldERhdGFLZXlWYWx1ZT4+Ojp2aXNpdE91
dHB1dENvbnN0cmFpbnRzKEpTQ2VsbCosIEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRl
IHZvaWQgV2Vha01hcEltcGw8V2Vha01hcEJ1Y2tldDxXZWFrTWFwQnVja2V0RGF0YUtleVZhbHVl
Pj46OnZpc2l0T3V0cHV0Q29uc3RyYWludHMoSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKwogdGVt
cGxhdGUgPHR5cGVuYW1lIFdlYWtNYXBCdWNrZXQ+CiB0ZW1wbGF0ZTx0eXBlbmFtZSBBcHBlbmRl
cj4KIHZvaWQgV2Vha01hcEltcGw8V2Vha01hcEJ1Y2tldD46OnRha2VTbmFwc2hvdEludGVybmFs
KHVuc2lnbmVkIGxpbWl0LCBBcHBlbmRlciBhcHBlbmRlcikKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1dlYWtNYXBJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvV2Vha01hcEltcGwuaAkocmV2aXNpb24gMjcyOTAyKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha01hcEltcGwuaAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTcgWXVzdWtlIFN1
enVraSA8dXRhdGFuZS50ZWFAZ21haWwuY29tPi4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTE0NSw3
ICsxNDUsNyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQgPSBE
YXRhPgotICAgIEFMV0FZU19JTkxJTkUgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19z
YW1lPFQsIFdlYWtNYXBCdWNrZXREYXRhS2V5VmFsdWU+Ojp2YWx1ZT46OnR5cGUgdmlzaXRBZ2dy
ZWdhdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisgICAgQUxXQVlTX0lOTElORSB0eXBlbmFtZSBz
dGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8VCwgV2Vha01hcEJ1Y2tldERhdGFLZXlWYWx1ZT46
OnZhbHVlPjo6dHlwZSB2aXNpdEFnZ3JlZ2F0ZShBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9y
KQogICAgIHsKICAgICAgICAgdmlzaXRvci5hcHBlbmQobV9kYXRhLnZhbHVlKTsKICAgICB9CkBA
IC0yMDIsNyArMjAyLDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVk
c0Rlc3RydWN0aW9uID0gdHJ1ZTsKICAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwog
Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwor
ICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBzdGF0aWMgc2l6ZV90IGVzdGltYXRl
ZFNpemUoSlNDZWxsKiwgVk0mKTsKIApAQCAtMzExLDEwICszMTEsMTMgQEAgcHVibGljOgogICAg
ICAgICByZXR1cm4gdm0ud2Vha1NldFNwYWNlPG1vZGU+KCk7CiAgICAgfQogCi0gICAgc3RhdGlj
IHZvaWQgdmlzaXRPdXRwdXRDb25zdHJhaW50cyhKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHN0YXRpYyB2b2lkIHZpc2l0T3V0cHV0Q29uc3Ry
YWludHMoSlNDZWxsKiwgVmlzaXRvciYpOwogICAgIHZvaWQgZmluYWxpemVVbmNvbmRpdGlvbmFs
bHkoVk0mKTsKIAogcHJpdmF0ZToKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgorICAg
IEFMV0FZU19JTkxJTkUgc3RhdGljIHZvaWQgdmlzaXRPdXRwdXRDb25zdHJhaW50c0ZvckRhdGFL
ZXlWYWx1ZShKU0NlbGwqLCBWaXNpdG9yJik7CisKICAgICBBTFdBWVNfSU5MSU5FIFdlYWtNYXBC
dWNrZXRUeXBlKiBmaW5kQnVja2V0KEpTT2JqZWN0KiBrZXkpCiAgICAgewogICAgICAgICByZXR1
cm4gZmluZEJ1Y2tldChrZXksIGpzV2Vha01hcEhhc2goa2V5KSk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvdG9vbHMvSlNEb2xsYXJWTS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3Rvb2xzL0pTRG9sbGFyVk0uY3BwCShyZXZpc2lvbiAyNzI5MDIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvSlNEb2xsYXJWTS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjAgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC0yMjQsMTQgKzIyNCw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24o
Vk0mLCBSb290Kik7CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2Vs
bCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCi0gICAgewotICAgICAgICBEb2xsYXJWTUFzc2VydFNj
b3BlIGFzc2VydFNjb3BlOwotICAgICAgICBFbGVtZW50KiB0aGlzT2JqZWN0ID0ganNDYXN0PEVs
ZW1lbnQqPihjZWxsKTsKLSAgICAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2Jq
ZWN0LCBpbmZvKCkpOwotICAgICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZp
c2l0b3IpOwotICAgICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX3Jvb3QpOwotICAg
IH0KKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgc3RhdGljIEVsZW1lbnRIYW5k
bGVPd25lciogaGFuZGxlT3duZXIoKTsKIApAQCAtMjQ3LDEwICsyNDAsMjIgQEAgcHJpdmF0ZToK
ICAgICBXcml0ZUJhcnJpZXI8Um9vdD4gbV9yb290OwogfTsKIAordGVtcGxhdGU8dHlwZW5hbWUg
VmlzaXRvcj4KK3ZvaWQgRWxlbWVudDo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBW
aXNpdG9yJiB2aXNpdG9yKQoreworICAgIERvbGxhclZNQXNzZXJ0U2NvcGUgYXNzZXJ0U2NvcGU7
CisgICAgRWxlbWVudCogdGhpc09iamVjdCA9IGpzQ2FzdDxFbGVtZW50Kj4oY2VsbCk7CisgICAg
QVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOworICAgIEJhc2U6
OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CisgICAgdmlzaXRvci5hcHBlbmQo
dGhpc09iamVjdC0+bV9yb290KTsKK30KKworREVGSU5FX1ZJU0lUX0NISUxEUkVOKEVsZW1lbnQp
OworCiBjbGFzcyBFbGVtZW50SGFuZGxlT3duZXIgZmluYWwgOiBwdWJsaWMgV2Vha0hhbmRsZU93
bmVyIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBib29sIGlz
UmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxl
LCB2b2lkKiwgU2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pIGZpbmFs
CisgICAgYm9vbCBpc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVu
a25vd24+IGhhbmRsZSwgdm9pZCosIEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0
IGNoYXIqKiByZWFzb24pIGZpbmFsCiAgICAgewogICAgICAgICBEb2xsYXJWTUFzc2VydFNjb3Bl
IGFzc2VydFNjb3BlOwogICAgICAgICBpZiAoVU5MSUtFTFkocmVhc29uKSkKQEAgLTMwNCwxOCAr
MzA5LDIzIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBn
bG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxh
Z3MpLCBpbmZvKCkpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlND
ZWxsKiB0aGlzT2JqZWN0LCBTbG90VmlzaXRvciYgdmlzaXRvcikKLSAgICB7Ci0gICAgICAgIERv
bGxhclZNQXNzZXJ0U2NvcGUgYXNzZXJ0U2NvcGU7Ci0gICAgICAgIEFTU0VSVF9HQ19PQkpFQ1Rf
SU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKLSAgICAgICAgQmFzZTo6dmlzaXRDaGlsZHJl
bih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKLSAgICAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHRo
aXNPYmplY3QpOwotICAgIH0KKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiBwcml2YXRl
OgogICAgIFdlYWs8RWxlbWVudD4gbV9lbGVtZW50OwogfTsKIAordGVtcGxhdGU8dHlwZW5hbWUg
VmlzaXRvcj4KK3ZvaWQgUm9vdDo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiB0aGlzT2JqZWN0
LCBWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIERvbGxhclZNQXNzZXJ0U2NvcGUgYXNzZXJ0U2Nv
cGU7CisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwor
ICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CisgICAgdmlzaXRv
ci5hZGRPcGFxdWVSb290KHRoaXNPYmplY3QpOworfQorCitERUZJTkVfVklTSVRfQ0hJTERSRU4o
Um9vdCk7CisKIGNsYXNzIFNpbXBsZU9iamVjdCA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsK
IHB1YmxpYzoKICAgICBTaW1wbGVPYmplY3QoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkK
QEAgLTM0MCwxNCArMzUwLDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gc2ltcGxlT2JqZWN0
OwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBT
bG90VmlzaXRvciYgdmlzaXRvcikKLSAgICB7Ci0gICAgICAgIERvbGxhclZNQXNzZXJ0U2NvcGUg
YXNzZXJ0U2NvcGU7Ci0gICAgICAgIFNpbXBsZU9iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxT
aW1wbGVPYmplY3QqPihjZWxsKTsKLSAgICAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0
aGlzT2JqZWN0LCBpbmZvKCkpOwotICAgICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmpl
Y3QsIHZpc2l0b3IpOwotICAgICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2hpZGRl
blZhbHVlKTsKLSAgICB9CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIHN0YXRp
YyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQogICAgIHsKQEAgLTM4MCw2ICszODMsMTggQEAg
cHJpdmF0ZToKICAgICBXcml0ZUJhcnJpZXI8SlNDOjpVbmtub3duPiBtX2hpZGRlblZhbHVlOwog
fTsKIAordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgU2ltcGxlT2JqZWN0Ojp2aXNp
dENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgRG9s
bGFyVk1Bc3NlcnRTY29wZSBhc3NlcnRTY29wZTsKKyAgICBTaW1wbGVPYmplY3QqIHRoaXNPYmpl
Y3QgPSBqc0Nhc3Q8U2ltcGxlT2JqZWN0Kj4oY2VsbCk7CisgICAgQVNTRVJUX0dDX09CSkVDVF9J
TkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOworICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhp
c09iamVjdCwgdmlzaXRvcik7CisgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9oaWRk
ZW5WYWx1ZSk7Cit9CisKK0RFRklORV9WSVNJVF9DSElMRFJFTihTaW1wbGVPYmplY3QpOworCiBj
bGFzcyBJbXB1cmVHZXR0ZXIgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7CiBwdWJsaWM6CiAg
ICAgSW1wdXJlR2V0dGVyKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCkBAIC00MzYsMTQg
KzQ1MSw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIEJhc2U6OmdldE93blByb3BlcnR5U2xv
dChvYmplY3QsIGdsb2JhbE9iamVjdCwgbmFtZSwgc2xvdCk7CiAgICAgfQogCi0gICAgc3RhdGlj
IHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQot
ICAgIHsKLSAgICAgICAgRG9sbGFyVk1Bc3NlcnRTY29wZSBhc3NlcnRTY29wZTsKLSAgICAgICAg
QVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjZWxsLCBpbmZvKCkpOwotICAgICAgICBCYXNlOjp2
aXNpdENoaWxkcmVuKGNlbGwsIHZpc2l0b3IpOwotICAgICAgICBJbXB1cmVHZXR0ZXIqIHRoaXNP
YmplY3QgPSBqc0Nhc3Q8SW1wdXJlR2V0dGVyKj4oY2VsbCk7Ci0gICAgICAgIHZpc2l0b3IuYXBw
ZW5kKHRoaXNPYmplY3QtPm1fZGVsZWdhdGUpOwotICAgIH0KKyAgICBERUNMQVJFX1ZJU0lUX0NI
SUxEUkVOOwogCiAgICAgdm9pZCBzZXREZWxlZ2F0ZShWTSYgdm0sIEpTT2JqZWN0KiBkZWxlZ2F0
ZSkKICAgICB7CkBAIC00NTQsNiArNDYyLDE4IEBAIHByaXZhdGU6CiAgICAgV3JpdGVCYXJyaWVy
PEpTT2JqZWN0PiBtX2RlbGVnYXRlOwogfTsKIAordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4K
K3ZvaWQgSW1wdXJlR2V0dGVyOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0
b3ImIHZpc2l0b3IpCit7CisgICAgRG9sbGFyVk1Bc3NlcnRTY29wZSBhc3NlcnRTY29wZTsKKyAg
ICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNlbGwsIGluZm8oKSk7CisgICAgQmFzZTo6dmlz
aXRDaGlsZHJlbihjZWxsLCB2aXNpdG9yKTsKKyAgICBJbXB1cmVHZXR0ZXIqIHRoaXNPYmplY3Qg
PSBqc0Nhc3Q8SW1wdXJlR2V0dGVyKj4oY2VsbCk7CisgICAgdmlzaXRvci5hcHBlbmQodGhpc09i
amVjdC0+bV9kZWxlZ2F0ZSk7Cit9CisKK0RFRklORV9WSVNJVF9DSElMRFJFTihJbXB1cmVHZXR0
ZXIpOworCiBzdGF0aWMgSlNDX0RFQ0xBUkVfQ1VTVE9NX0dFVFRFUihjdXN0b21HZXR0ZXJWYWx1
ZUdldHRlcik7CiBzdGF0aWMgSlNDX0RFQ0xBUkVfQ1VTVE9NX0dFVFRFUihjdXN0b21HZXR0ZXJB
Y2Vzc29yR2V0dGVyKTsKIApAQCAtMTgyMiwxNCArMTg0Miw3IEBAIHB1YmxpYzoKICAgICAgICAg
cHV0RGlyZWN0TmF0aXZlRnVuY3Rpb24odm0sIGdsb2JhbE9iamVjdCwgSWRlbnRpZmllcjo6ZnJv
bVN0cmluZyh2bSwgImFkZEJ5dGVzIiksIDAsIGZ1bmN0aW9uV2FzbVN0cmVhbWluZ0NvbXBpbGVy
QWRkQnl0ZXMsIE5vSW50cmluc2ljLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRy
aWJ1dGU6OkRvbnRFbnVtKSk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJl
bihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQotICAgIHsKLSAgICAgICAgRG9s
bGFyVk1Bc3NlcnRTY29wZSBhc3NlcnRTY29wZTsKLSAgICAgICAgYXV0byogdGhpc09iamVjdCA9
IGpzQ2FzdDxXYXNtU3RyZWFtaW5nQ29tcGlsZXIqPihjZWxsKTsKLSAgICAgICAgQVNTRVJUX0dD
X09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwotICAgICAgICBCYXNlOjp2aXNp
dENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwotICAgICAgICB2aXNpdG9yLmFwcGVuZCh0
aGlzT2JqZWN0LT5tX3Byb21pc2UpOwotICAgIH0KKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVO
OwogCiAgICAgREVDTEFSRV9JTkZPOwogCkBAIC0xODM3LDYgKzE4NTAsMTggQEAgcHVibGljOgog
ICAgIFJlZjxXYXNtOjpTdHJlYW1pbmdDb21waWxlcj4gbV9zdHJlYW1pbmdDb21waWxlcjsKIH07
CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFdhc21TdHJlYW1pbmdDb21waWxl
cjo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQorewor
ICAgIERvbGxhclZNQXNzZXJ0U2NvcGUgYXNzZXJ0U2NvcGU7CisgICAgYXV0byogdGhpc09iamVj
dCA9IGpzQ2FzdDxXYXNtU3RyZWFtaW5nQ29tcGlsZXIqPihjZWxsKTsKKyAgICBBU1NFUlRfR0Nf
T0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CisgICAgQmFzZTo6dmlzaXRDaGls
ZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKKyAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0
LT5tX3Byb21pc2UpOworfQorCitERUZJTkVfVklTSVRfQ0hJTERSRU4oV2FzbVN0cmVhbWluZ0Nv
bXBpbGVyKTsKKwogY29uc3QgQ2xhc3NJbmZvIFdhc21TdHJlYW1pbmdDb21waWxlcjo6c19pbmZv
ID0geyAiV2FzbVN0cmVhbWluZ0NvbXBpbGVyIiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVs
bHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShXYXNtU3RyZWFtaW5nQ29tcGlsZXIpIH07CiAKIEpT
Q19ERUZJTkVfSE9TVF9GVU5DVElPTihmdW5jdGlvbldhc21TdHJlYW1pbmdDb21waWxlckFkZEJ5
dGVzLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUp
KQpAQCAtMzY5OSwxMyArMzcyNCwxNiBAQCB2b2lkIEpTRG9sbGFyVk06OmFkZENvbnN0cnVjdGli
bGVGdW5jdGlvCiAgICAgcHV0RGlyZWN0KHZtLCBpZGVudGlmaWVyLCBKU0Z1bmN0aW9uOjpjcmVh
dGUodm0sIGdsb2JhbE9iamVjdCwgYXJndW1lbnRzLCBpZGVudGlmaWVyLnN0cmluZygpLCBmdW5j
dGlvbiwgTm9JbnRyaW5zaWMsIGZ1bmN0aW9uKSwganNEb2xsYXJWTVByb3BlcnR5QXR0cmlidXRl
cyk7CiB9CiAKLXZvaWQgSlNEb2xsYXJWTTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNE
b2xsYXJWTTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9y
KQogewogICAgIEpTRG9sbGFyVk0qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNEb2xsYXJWTSo+KGNl
bGwpOwogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CiAgICAg
dmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9vYmplY3REb2luZ1NpZGVFZmZlY3RQdXRXaXRo
b3V0Q29ycmVjdFNsb3RTdGF0dXNTdHJ1Y3R1cmUpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERS
RU4oSlNEb2xsYXJWTSk7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiBJR05PUkVfV0FSTklOR1Nf
RU5ECkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvSlNEb2xsYXJWTS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9KU0RvbGxhclZNLmgJKHJldmlz
aW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9KU0RvbGxhclZNLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1
LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE1LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC03NCw3ICs3NCw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBhZGRG
dW5jdGlvbihWTSYsIEpTR2xvYmFsT2JqZWN0KiwgY29uc3QgY2hhciogbmFtZSwgTmF0aXZlRnVu
Y3Rpb24sIHVuc2lnbmVkIGFyZ3VtZW50cyk7CiAgICAgdm9pZCBhZGRDb25zdHJ1Y3RpYmxlRnVu
Y3Rpb24oVk0mLCBKU0dsb2JhbE9iamVjdCosIGNvbnN0IGNoYXIqIG5hbWUsIE5hdGl2ZUZ1bmN0
aW9uLCB1bnNpZ25lZCBhcmd1bWVudHMpOwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJl
bihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAK
ICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX29iamVjdERvaW5nU2lkZUVmZmVjdFB1dFdp
dGhvdXRDb3JyZWN0U2xvdFN0YXR1c1N0cnVjdHVyZTsKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtR2xvYmFsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtR2xvYmFsLmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUdsb2JhbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOS0yMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTAzLDcg
KzEwMyw4IEBAIHZvaWQgR2xvYmFsOjpzZXQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE8KICAgICB9
CiB9CiAKLXZvaWQgR2xvYmFsOjp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYgdmlzaXRvcikK
K3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEdsb2JhbDo6dmlzaXRBZ2dyZWdhdGVJ
bXBsKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgc3dpdGNoIChtX3R5cGUpIHsKICAgICBjYXNl
IFdhc206OlR5cGU6OkV4dGVybnJlZjoKQEAgLTExNyw2ICsxMTgsOCBAQCB2b2lkIEdsb2JhbDo6
dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImCiAgICAgfQogfQogCitERUZJTkVfVklTSVRfQUdH
UkVHQVRFKEdsb2JhbCk7CisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpHbG9iYWwKIAogI2VuZGlm
IC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21HbG9iYWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtR2xvYmFsLmgJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21HbG9iYWwuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTctMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU3LDcgKzU3LDggQEAgcHVibGlj
OgogICAgIEpTVmFsdWUgZ2V0KEpTR2xvYmFsT2JqZWN0KikgY29uc3Q7CiAgICAgdWludDY0X3Qg
Z2V0UHJpbWl0aXZlKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZS5tX3ByaW1pdGl2ZTsgfQogICAg
IHZvaWQgc2V0KEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSk7Ci0gICAgdm9pZCB2aXNpdEFnZ3Jl
Z2F0ZShTbG90VmlzaXRvciYpOworLy8gICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9p
ZCB2aXNpdEFnZ3JlZ2F0ZShWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9BR0dSRUdBVEU7
CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBUKiBvd25lcigpIGNvbnN0IHsgcmV0dXJuIHJl
aW50ZXJwcmV0X2Nhc3Q8VCo+KG1fb3duZXIpOyB9CiAgICAgdm9pZCBzZXRPd25lcihKU09iamVj
dCogb3duZXIpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGFibGUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UYWJsZS5jcHAJ
KHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UYWJs
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDE3LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xNjYsNyArMTY2LDggQEAgSlNWYWx1ZSBUYWJsZTo6
Z2V0KHVpbnQzMl90IGluZGV4KSBjb25zdAogICAgIHJldHVybiBtX2pzVmFsdWVzLmdldCgpW2lu
ZGV4ICYgbV9tYXNrXS5nZXQoKTsKIH0KIAotdm9pZCBUYWJsZTo6dmlzaXRBZ2dyZWdhdGUoU2xv
dFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBUYWJs
ZTo6dmlzaXRBZ2dyZWdhdGVJbXBsKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgUkVMRUFTRV9B
U1NFUlQobV9vd25lcik7CiAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX293bmVyLT5jZWxs
TG9jaygpKTsKQEAgLTE3NCw2ICsxNzUsOCBAQCB2b2lkIFRhYmxlOjp2aXNpdEFnZ3JlZ2F0ZShT
bG90VmlzaXRvciYgCiAgICAgICAgIHZpc2l0b3IuYXBwZW5kKG1fanNWYWx1ZXMuZ2V0KClbaV0p
OwogfQogCitERUZJTkVfVklTSVRfQUdHUkVHQVRFKFRhYmxlKTsKKwogVHlwZSBUYWJsZTo6d2Fz
bVR5cGUoKSBjb25zdAogewogICAgIGlmIChpc0V4dGVybnJlZlRhYmxlKCkpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGFibGUuaAkocmV2aXNpb24gMjcyOTAyKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMTggQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC04
MCw3ICs4MCw3IEBAIHB1YmxpYzoKICAgICBPcHRpb25hbDx1aW50MzJfdD4gZ3Jvdyh1aW50MzJf
dCBkZWx0YSwgSlNWYWx1ZSBkZWZhdWx0VmFsdWUpOwogICAgIHZvaWQgY29weShjb25zdCBUYWJs
ZSogc3JjVGFibGUsIHVpbnQzMl90IGRzdEluZGV4LCB1aW50MzJfdCBzcmNJbmRleCk7CiAKLSAg
ICB2b2lkIHZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9B
R0dSRUdBVEU7CiAKIHByb3RlY3RlZDoKICAgICBUYWJsZSh1aW50MzJfdCBpbml0aWFsLCBPcHRp
b25hbDx1aW50MzJfdD4gbWF4aW11bSwgVGFibGVFbGVtZW50VHlwZSA9IFRhYmxlRWxlbWVudFR5
cGU6OkV4dGVybnJlZik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1Rv
V2FzbUlDQ2FsbGVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9KU1RvV2FzbUlDQ2FsbGVlLmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvSlNUb1dhc21JQ0NhbGxlZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOS0yMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
NDksNyArNDksOCBAQCBTdHJ1Y3R1cmUqIEpTVG9XYXNtSUNDYWxsZWU6OmNyZWF0ZVN0cnVjCiAg
ICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwg
VHlwZUluZm8oSlNDYWxsZWVUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CiB9CiAKLXZv
aWQgSlNUb1dhc21JQ0NhbGxlZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNp
dG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNUb1dhc21J
Q0NhbGxlZTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9y
KQogewogICAgIEpTVG9XYXNtSUNDYWxsZWUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUb1dhc21J
Q0NhbGxlZSo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVj
dCwgaW5mbygpKTsKQEAgLTU4LDYgKzU5LDggQEAgdm9pZCBKU1RvV2FzbUlDQ2FsbGVlOjp2aXNp
dENoaWxkcmVuKEpTQwogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fZnVuY3Rpb24p
OwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNUb1dhc21JQ0NhbGxlZSk7CisKIH0gLy8g
bmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNUb1dhc21JQ0NhbGxlZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTVG9XYXNtSUNDYWxsZWUuaAkocmV2
aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNUb1dhc21J
Q0NhbGxlZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTktMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU2LDcgKzU2LDcgQEAgcHJpdmF0ZToKICAgICBKU1Rv
V2FzbUlDQ2FsbGVlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUpCiAgICAgICAgIDogQmFzZSh2bSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1
cmUpCiAgICAgeyB9Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90
VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBXcml0ZUJhcnJp
ZXI8V2ViQXNzZW1ibHlGdW5jdGlvbj4gbV9mdW5jdGlvbjsKIH07CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2Nr
LmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
SlNXZWJBc3NlbWJseUNvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC04Miw3ICs4Miw4
IEBAIHZvaWQgSlNXZWJBc3NlbWJseUNvZGVCbG9jazo6Y2xlYXJKU0NhbGwKICAgICAgICAgKCpp
dGVyKS0+dW5saW5rKHZtKTsKIH0KIAotdm9pZCBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrOjp2aXNp
dENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0
eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrOjp2aXNpdENoaWxk
cmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNXZWJBc3Nl
bWJseUNvZGVCbG9jayogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1dlYkFzc2VtYmx5Q29kZUJsb2Nr
Kj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZv
KCkpOwpAQCAtOTAsNiArOTEsOCBAQCB2b2lkIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6OnZpc2l0
Q2hpbGRyCiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKIH0K
IAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTV2ViQXNzZW1ibHlDb2RlQmxvY2spOworCiB2b2lk
IEpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6OmZpbmFsaXplVW5jb25kaXRpb25hbGx5KFZNJiB2bSkK
IHsKICAgICBmb3IgKGF1dG8gaXRlciA9IG1fY2FsbExpbmtJbmZvcy5iZWdpbigpOyAhIWl0ZXI7
ICsraXRlcikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1i
bHlDb2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmgJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suaAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTg2LDcgKzg2LDcgQEAgcHJpdmF0ZToKICAgICBERUNMQVJFX0VYUE9SVF9JTkZP
OwogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0Rlc3RydWN0aW9uID0gdHJ1ZTsKICAg
ICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hp
bGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVO
OwogCiAgICAgUmVmPFdhc206OkNvZGVCbG9jaz4gbV9jb2RlQmxvY2s7CiAgICAgVmVjdG9yPE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxXYXNtRW50cnlQdHJUYWc+PiBtX3dhc21Ub0pTRXhpdFN0dWJz
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUdsb2Jh
bC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJB
c3NlbWJseUdsb2JhbC5jcHAJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlHbG9iYWwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTcxLDcg
KzcxLDggQEAgdm9pZCBKU1dlYkFzc2VtYmx5R2xvYmFsOjpkZXN0cm95KEpTQ2VsbAogICAgIHN0
YXRpY19jYXN0PEpTV2ViQXNzZW1ibHlHbG9iYWwqPihjZWxsKS0+SlNXZWJBc3NlbWJseUdsb2Jh
bDo6fkpTV2ViQXNzZW1ibHlHbG9iYWwoKTsKIH0KIAotdm9pZCBKU1dlYkFzc2VtYmx5R2xvYmFs
Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1w
bGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1dlYkFzc2VtYmx5R2xvYmFsOjp2aXNpdENo
aWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNXZWJB
c3NlbWJseUdsb2JhbCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1dlYkFzc2VtYmx5R2xvYmFsKj4o
Y2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkp
OwpAQCAtODAsNiArODEsOCBAQCB2b2lkIEpTV2ViQXNzZW1ibHlHbG9iYWw6OnZpc2l0Q2hpbGRy
ZW4oCiAgICAgdGhpc09iamVjdC0+Z2xvYmFsKCktPnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOwog
fQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNXZWJBc3NlbWJseUdsb2JhbCk7CisKIH0gLy8g
bmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUdsb2JhbC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlHbG9iYWwu
aAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNX
ZWJBc3NlbWJseUdsb2JhbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTktMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU5LDcgKzU5LDcgQEAgcHVibGljOgog
cHJpdmF0ZToKICAgICBKU1dlYkFzc2VtYmx5R2xvYmFsKFZNJiwgU3RydWN0dXJlKiwgUmVmPFdh
c206Okdsb2JhbD4mJik7CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOwotICAgIHN0YXRp
YyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJF
X1ZJU0lUX0NISUxEUkVOOwogCiAgICAgUmVmPFdhc206Okdsb2JhbD4gbV9nbG9iYWw7CiB9OwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFz
c2VtYmx5SW5zdGFuY2UuY3BwCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE5IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIxIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtNzMsNyArNzMsOCBAQCB2b2lkIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6ZGVzdHJveShKU0Nl
CiAgICAgc3RhdGljX2Nhc3Q8SlNXZWJBc3NlbWJseUluc3RhbmNlKj4oY2VsbCktPkpTV2ViQXNz
ZW1ibHlJbnN0YW5jZTo6fkpTV2ViQXNzZW1ibHlJbnN0YW5jZSgpOwogfQogCi12b2lkIEpTV2Vi
QXNzZW1ibHlJbnN0YW5jZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9y
JiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNXZWJBc3NlbWJs
eUluc3RhbmNlOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0
b3IpCiB7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1dlYkFzc2VtYmx5SW5zdGFu
Y2UqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGlu
Zm8oKSk7CkBAIC0xMDIsNiArMTAzLDggQEAgdm9pZCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OnZp
c2l0Q2hpbGRyZQogICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKHdyYXBwZXIuZ2V0
KCkpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNXZWJBc3NlbWJseUluc3RhbmNlKTsK
Kwogdm9pZCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OmZpbmFsaXplQ3JlYXRpb24oVk0mIHZtLCBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWY8V2FzbTo6Q29kZUJsb2NrPiYmIHdhc21D
b2RlQmxvY2ssIEpTT2JqZWN0KiBpbXBvcnRPYmplY3QsIFdhc206OkNyZWF0aW9uTW9kZSBjcmVh
dGlvbk1vZGUpCiB7CiAgICAgbV9pbnN0YW5jZS0+ZmluYWxpemVDcmVhdGlvbih0aGlzLCB3YXNt
Q29kZUJsb2NrLmNvcHlSZWYoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuaAkocmV2aXNpb24gMjcyOTAyKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2
LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC0xMDUsNyArMTA1LDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAg
ICBKU1dlYkFzc2VtYmx5SW5zdGFuY2UoVk0mLCBTdHJ1Y3R1cmUqLCBSZWY8V2FzbTo6SW5zdGFu
Y2U+JiYpOwogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBKU1dlYkFzc2VtYmx5TW9kdWxl
KiwgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQqKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxk
cmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsK
IAogICAgIFJlZjxXYXNtOjpJbnN0YW5jZT4gbV9pbnN0YW5jZTsKICAgICBWTSogbV92bTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNZW1vcnkuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1i
bHlNZW1vcnkuY3BwCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9qcy9KU1dlYkFzc2VtYmx5TWVtb3J5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE1OSw3
ICsxNTksOCBAQCB2b2lkIEpTV2ViQXNzZW1ibHlNZW1vcnk6OmRlc3Ryb3koSlNDZWxsCiAgICAg
bWVtb3J5LT5KU1dlYkFzc2VtYmx5TWVtb3J5Ojp+SlNXZWJBc3NlbWJseU1lbW9yeSgpOwogfQog
Ci12b2lkIEpTV2ViQXNzZW1ibHlNZW1vcnk6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBT
bG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpT
V2ViQXNzZW1ibHlNZW1vcnk6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRv
ciYgdmlzaXRvcikKIHsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTV2ViQXNzZW1i
bHlNZW1vcnkqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmpl
Y3QsIGluZm8oKSk7CkBAIC0xNjksNiArMTcwLDggQEAgdm9pZCBKU1dlYkFzc2VtYmx5TWVtb3J5
Ojp2aXNpdENoaWxkcmVuKAogICAgIHZpc2l0b3IucmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKHRo
aXNPYmplY3QtPm1lbW9yeSgpLnNpemUoKSk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihK
U1dlYkFzc2VtYmx5TWVtb3J5KTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBF
TkFCTEUoV0VCQVNTRU1CTFkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9K
U1dlYkFzc2VtYmx5TWVtb3J5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvSlNXZWJBc3NlbWJseU1lbW9yeS5oCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TWVtb3J5LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTkgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC02Myw3ICs2Myw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgSlNXZWJBc3Nl
bWJseU1lbW9yeShWTSYsIFN0cnVjdHVyZSopOwogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0m
KTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7
CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIFJlZjxXYXNtOjpNZW1vcnk+IG1f
bWVtb3J5OwogICAgIFdyaXRlQmFycmllcjxKU0FycmF5QnVmZmVyPiBtX2J1ZmZlcldyYXBwZXI7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFz
c2VtYmx5TW9kdWxlLmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0x
MjQsNyArMTI0LDggQEAgdm9pZCBKU1dlYkFzc2VtYmx5TW9kdWxlOjpzZXRDb2RlQmxvY2soVgog
ICAgIG1fY29kZUJsb2Nrc1tzdGF0aWNfY2FzdDxzaXplX3Q+KG1vZGUpXS5zZXQodm0sIHRoaXMs
IGNvZGVCbG9jayk7CiB9CiAKLXZvaWQgSlNXZWJBc3NlbWJseU1vZHVsZTo6dmlzaXRDaGlsZHJl
bihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUg
VmlzaXRvcj4KK3ZvaWQgSlNXZWJBc3NlbWJseU1vZHVsZTo6dmlzaXRDaGlsZHJlbkltcGwoSlND
ZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTV2ViQXNzZW1ibHlNb2R1bGUq
IHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNXZWJBc3NlbWJseU1vZHVsZSo+KGNlbGwpOwogICAgIEFT
U0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTEzNSw2ICsx
MzYsOCBAQCB2b2lkIEpTV2ViQXNzZW1ibHlNb2R1bGU6OnZpc2l0Q2hpbGRyZW4oCiAgICAgICAg
IHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fY29kZUJsb2Nrc1tpXSk7CiB9CiAKK0RFRklO
RV9WSVNJVF9DSElMRFJFTihKU1dlYkFzc2VtYmx5TW9kdWxlKTsKKwogfSAvLyBuYW1lc3BhY2Ug
SlNDCiAKICNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5oCShyZXZpc2lv
biAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5
TW9kdWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDE2LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC04MCw3ICs4MCw3IEBAIHByaXZhdGU6CiAKICAg
ICBKU1dlYkFzc2VtYmx5TW9kdWxlKFZNJiwgU3RydWN0dXJlKiwgUmVmPFdhc206Ok1vZHVsZT4m
Jik7CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOwotICAgIHN0YXRpYyB2b2lkIHZpc2l0
Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxE
UkVOOwogCiAgICAgUmVmPFdhc206Ok1vZHVsZT4gbV9tb2R1bGU7CiAgICAgV3JpdGVCYXJyaWVy
PFN5bWJvbFRhYmxlPiBtX2V4cG9ydFN5bWJvbFRhYmxlOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseVRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5VGFibGUuY3BwCShyZXZpc2lv
biAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5
VGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxNi0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNzIsNyArNzIsOCBAQCB2b2lkIEpTV2ViQXNz
ZW1ibHlUYWJsZTo6ZGVzdHJveShKU0NlbGwqCiAgICAgc3RhdGljX2Nhc3Q8SlNXZWJBc3NlbWJs
eVRhYmxlKj4oY2VsbCktPkpTV2ViQXNzZW1ibHlUYWJsZTo6fkpTV2ViQXNzZW1ibHlUYWJsZSgp
OwogfQogCi12b2lkIEpTV2ViQXNzZW1ibHlUYWJsZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNl
bGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3Zv
aWQgSlNXZWJBc3NlbWJseVRhYmxlOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZp
c2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNXZWJBc3NlbWJseVRhYmxlKiB0aGlzT2JqZWN0ID0g
anNDYXN0PEpTV2ViQXNzZW1ibHlUYWJsZSo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1Rf
SU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTgxLDYgKzgyLDggQEAgdm9pZCBKU1dl
YkFzc2VtYmx5VGFibGU6OnZpc2l0Q2hpbGRyZW4oSgogICAgIHRoaXNPYmplY3QtPnRhYmxlKCkt
PnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNX
ZWJBc3NlbWJseVRhYmxlKTsKKwogYm9vbCBKU1dlYkFzc2VtYmx5VGFibGU6Omdyb3codWludDMy
X3QgZGVsdGEsIEpTVmFsdWUgZGVmYXVsdFZhbHVlKQogewogICAgIGlmIChkZWx0YSA9PSAwKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseVRhYmxlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJs
eVRhYmxlLmgJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL0pTV2ViQXNzZW1ibHlUYWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNzAsNyArNzAsNyBA
QCBwdWJsaWM6CiBwcml2YXRlOgogICAgIEpTV2ViQXNzZW1ibHlUYWJsZShWTSYsIFN0cnVjdHVy
ZSosIFJlZjxXYXNtOjpUYWJsZT4mJik7CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOwot
ICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAg
ICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgUmVmPFdhc206OlRhYmxlPiBtX3RhYmxl
OwogfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVu
Y3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dl
YkFzc2VtYmx5RnVuY3Rpb24uY3BwCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTQ1Miw3ICs0NTIsOCBAQCBXZWJBc3NlbWJseUZ1bmN0aW9uOjpXZWJBc3NlbWJseUZ1bmN0
aW9uCiAgICAgLCBtX2ltcG9ydGFibGVGdW5jdGlvbiB7IHNpZ25hdHVyZUluZGV4LCB3YXNtVG9X
YXNtRW50cnlwb2ludExvYWRMb2NhdGlvbiB9CiB7IH0KIAotdm9pZCBXZWJBc3NlbWJseUZ1bmN0
aW9uOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0
ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBXZWJBc3NlbWJseUZ1bmN0aW9uOjp2aXNp
dENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgV2Vi
QXNzZW1ibHlGdW5jdGlvbiogdGhpc09iamVjdCA9IGpzQ2FzdDxXZWJBc3NlbWJseUZ1bmN0aW9u
Kj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZv
KCkpOwpAQCAtNDYxLDYgKzQ2Miw4IEBAIHZvaWQgV2ViQXNzZW1ibHlGdW5jdGlvbjo6dmlzaXRD
aGlsZHJlbigKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2pzVG9XYXNtSUNDYWxs
ZWUpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oV2ViQXNzZW1ibHlGdW5jdGlvbik7CisK
IHZvaWQgV2ViQXNzZW1ibHlGdW5jdGlvbjo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCiB7CiAgICAg
c3RhdGljX2Nhc3Q8V2ViQXNzZW1ibHlGdW5jdGlvbio+KGNlbGwpLT5XZWJBc3NlbWJseUZ1bmN0
aW9uOjp+V2ViQXNzZW1ibHlGdW5jdGlvbigpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uaAkocmV2aXNpb24gMjcyOTAy
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
Ni0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtODYsNyArODYsNyBAQCBwdWJsaWM6CiAgICAgV2FzbTo6SW5z
dGFuY2UqIHByZXZpb3VzSW5zdGFuY2UoQ2FsbEZyYW1lKik7CiAKIHByaXZhdGU6Ci0gICAgc3Rh
dGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xB
UkVfVklTSVRfQ0hJTERSRU47CiAgICAgV2ViQXNzZW1ibHlGdW5jdGlvbihWTSYsIE5hdGl2ZUV4
ZWN1dGFibGUqLCBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSosIFdhc206OkNhbGxlZSYganNF
bnRyeXBvaW50LCBXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9uOjpMb2FkTG9jYXRpb24gZW50
cnlwb2ludExvYWRMb2NhdGlvbiwgV2FzbTo6U2lnbmF0dXJlSW5kZXgpOwogCiAgICAgTWFjcm9B
c3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGpzQ2FsbEVudHJ5cG9pbnRTbG93KCk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uQmFz
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNz
ZW1ibHlGdW5jdGlvbkJhc2UuY3BwCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uQmFzZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIxIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtNDEsNyArNDEsOCBAQCBXZWJBc3NlbWJseUZ1bmN0aW9uQmFzZTo6V2ViQXNzZW1ibHlGdW5j
CiAgICAgOiBCYXNlKHZtLCBleGVjdXRhYmxlLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSkKIHsg
fQogCi12b2lkIFdlYkFzc2VtYmx5RnVuY3Rpb25CYXNlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCog
Y2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgor
dm9pZCBXZWJBc3NlbWJseUZ1bmN0aW9uQmFzZTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBj
ZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFdlYkFzc2VtYmx5RnVuY3Rpb25CYXNlKiB0
aGlzT2JqZWN0ID0ganNDYXN0PFdlYkFzc2VtYmx5RnVuY3Rpb25CYXNlKj4oY2VsbCk7CiAgICAg
QVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNDksNiAr
NTAsOCBAQCB2b2lkIFdlYkFzc2VtYmx5RnVuY3Rpb25CYXNlOjp2aXNpdENoaWxkCiAgICAgdmlz
aXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9pbnN0YW5jZSk7CiB9CiAKK0RFRklORV9WSVNJVF9D
SElMRFJFTihXZWJBc3NlbWJseUZ1bmN0aW9uQmFzZSk7CisKIHZvaWQgV2ViQXNzZW1ibHlGdW5j
dGlvbkJhc2U6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgTmF0aXZlRXhlY3V0YWJsZSogZXhlY3V0
YWJsZSwgdW5zaWduZWQgbGVuZ3RoLCBjb25zdCBTdHJpbmcmIG5hbWUsIEpTV2ViQXNzZW1ibHlJ
bnN0YW5jZSogaW5zdGFuY2UpCiB7CiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0sIGV4ZWN1
dGFibGUsIGxlbmd0aCwgbmFtZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9XZWJBc3NlbWJseUZ1bmN0aW9uQmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb25CYXNlLmgJKHJldmlzaW9uIDI3Mjkw
MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb25C
YXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDE3LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00Niw3ICs0Niw3IEBAIHB1YmxpYzoKICAgICBzdGF0
aWMgcHRyZGlmZl90IG9mZnNldE9mSW5zdGFuY2UoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0Yo
V2ViQXNzZW1ibHlGdW5jdGlvbkJhc2UsIG1faW5zdGFuY2UpOyB9CiAKIHByb3RlY3RlZDoKLSAg
ICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAg
REVDTEFSRV9WSVNJVF9DSElMRFJFTjsKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgTmF0
aXZlRXhlY3V0YWJsZSosIHVuc2lnbmVkIGxlbmd0aCwgY29uc3QgU3RyaW5nJiBuYW1lLCBKU1dl
YkFzc2VtYmx5SW5zdGFuY2UqKTsKICAgICBXZWJBc3NlbWJseUZ1bmN0aW9uQmFzZShWTSYsIE5h
dGl2ZUV4ZWN1dGFibGUqLCBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSopOwogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZVJlY29yZC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlN
b2R1bGVSZWNvcmQuY3BwCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZVJlY29yZC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTkgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC03OCw3ICs3OCw4IEBAIHZvaWQgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmZpbmlzaENyZWEK
ICAgICB9CiB9CiAKLXZvaWQgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OnZpc2l0Q2hpbGRyZW4o
SlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZp
c2l0b3I+Cit2b2lkIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjp2aXNpdENoaWxkcmVuSW1wbChK
U0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgV2ViQXNzZW1ibHlNb2R1bGVS
ZWNvcmQqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8V2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQqPihjZWxs
KTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBA
IC04OCw2ICs4OSw4IEBAIHZvaWQgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OnZpc2l0Q2hpbGQK
ICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2V4cG9ydHNPYmplY3QpOwogfQogCitE
RUZJTkVfVklTSVRfQ0hJTERSRU4oV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQpOworCiB2b2lkIFdl
YkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpwcmVwYXJlTGluayhWTSYgdm0sIEpTV2ViQXNzZW1ibHlJ
bnN0YW5jZSogaW5zdGFuY2UpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoIW1faW5zdGFuY2UpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNv
cmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3Nl
bWJseU1vZHVsZVJlY29yZC5oCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZVJlY29yZC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE5IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIxIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtNjksNyArNjksNyBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0ds
b2JhbE9iamVjdCosIFZNJiwgY29uc3QgV2FzbTo6TW9kdWxlSW5mb3JtYXRpb24mKTsKIAotICAg
IHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBE
RUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgV3JpdGVCYXJyaWVyPEpTV2ViQXNzZW1ibHlJ
bnN0YW5jZT4gbV9pbnN0YW5jZTsKICAgICBXcml0ZUJhcnJpZXI8SlNPYmplY3Q+IG1fc3RhcnRG
dW5jdGlvbjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5
V3JhcHBlckZ1bmN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9qcy9XZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5jcHAJKHJldmlzaW9uIDI3MjkwMikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5V3JhcHBlckZ1bmN0
aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTctMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY3LDcgKzY3LDggQEAgU3RydWN0dXJlKiBXZWJB
c3NlbWJseVdyYXBwZXJGdW5jdGlvbjo6YwogICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2
bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKEpTRnVuY3Rpb25UeXBlLCBTdHJ1
Y3R1cmVGbGFncyksIGluZm8oKSk7CiB9CiAKLXZvaWQgV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rp
b246OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3Rl
bXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9u
Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAg
ICAgV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8V2ViQXNz
ZW1ibHlXcmFwcGVyRnVuY3Rpb24qPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVS
SVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC03Niw2ICs3Nyw4IEBAIHZvaWQgV2ViQXNzZW1i
bHlXcmFwcGVyRnVuY3Rpb246OnZpc2l0Q2gKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0
LT5tX2Z1bmN0aW9uKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKFdlYkFzc2VtYmx5V3Jh
cHBlckZ1bmN0aW9uKTsKKwogSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGNhbGxXZWJBc3NlbWJs
eVdyYXBwZXJGdW5jdGlvbiwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFt
ZSogY2FsbEZyYW1lKSkKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlv
bi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2Vt
Ymx5V3JhcHBlckZ1bmN0aW9uLmgJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMTkgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC01OSw3ICs1OSw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgV2ViQXNzZW1ibHlX
cmFwcGVyRnVuY3Rpb24oVk0mLCBOYXRpdmVFeGVjdXRhYmxlKiwgSlNHbG9iYWxPYmplY3QqLCBT
dHJ1Y3R1cmUqLCBXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9uKTsKICAgICB2b2lkIGZpbmlz
aENyZWF0aW9uKFZNJiwgTmF0aXZlRXhlY3V0YWJsZSosIHVuc2lnbmVkIGxlbmd0aCwgY29uc3Qg
U3RyaW5nJiBuYW1lLCBKU09iamVjdCosIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSopOwotICAgIHN0
YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNM
QVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgV3JpdGVCYXJyaWVyPEpTT2JqZWN0PiBtX2Z1bmN0
aW9uOwogICAgIC8vIEl0J3Mgc2FmZSB0byBqdXN0IGhvbGQgdGhlIHJhdyBXYXNtVG9XYXNtSW1w
b3J0YWJsZUZ1bmN0aW9uIGJlY2F1c2Ugd2UgaGF2ZSBhIHJlZmVyZW5jZQpJbmRleDogU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmNwcAko
cmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
T2JqZWN0U3RvcmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTUtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTcyOCw3ICs3MjgsOCBAQCB2b2lkIElEQk9i
amVjdFN0b3JlOjpyb2xsYmFja0ZvclZlcnNpb25DCiAgICAgfQogfQogCi12b2lkIElEQk9iamVj
dFN0b3JlOjp2aXNpdFJlZmVyZW5jZWRJbmRleGVzKFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBjb25z
dAordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSURCT2JqZWN0U3RvcmU6OnZpc2l0
UmVmZXJlbmNlZEluZGV4ZXMoVmlzaXRvciYgdmlzaXRvcikgY29uc3QKIHsKICAgICBMb2NrZXI8
TG9jaz4gbG9ja2VyKG1fcmVmZXJlbmNlZEluZGV4TG9jayk7CiAgICAgZm9yIChhdXRvJiBpbmRl
eCA6IG1fcmVmZXJlbmNlZEluZGV4ZXMudmFsdWVzKCkpCkBAIC03MzcsNiArNzM4LDkgQEAgdm9p
ZCBJREJPYmplY3RTdG9yZTo6dmlzaXRSZWZlcmVuY2VkSW5kZQogICAgICAgICB2aXNpdG9yLmFk
ZE9wYXF1ZVJvb3QoaW5kZXguZ2V0KCkpOwogfQogCit0ZW1wbGF0ZSB2b2lkIElEQk9iamVjdFN0
b3JlOjp2aXNpdFJlZmVyZW5jZWRJbmRleGVzKEFic3RyYWN0U2xvdFZpc2l0b3ImKSBjb25zdDsK
K3RlbXBsYXRlIHZvaWQgSURCT2JqZWN0U3RvcmU6OnZpc2l0UmVmZXJlbmNlZEluZGV4ZXMoU2xv
dFZpc2l0b3ImKSBjb25zdDsKKwogdm9pZCBJREJPYmplY3RTdG9yZTo6cmVuYW1lUmVmZXJlbmNl
ZEluZGV4KElEQkluZGV4JiBpbmRleCwgY29uc3QgU3RyaW5nJiBuZXdOYW1lKQogewogICAgIExP
RyhJbmRleGVkREIsICJJREJPYmplY3RTdG9yZTo6cmVuYW1lUmVmZXJlbmNlZEluZGV4Iik7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0
b3JlLmgJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQk9iamVjdFN0b3JlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTA5LDcgKzEwOSw3IEBAIHB1Ymxp
YzoKICAgICB2b2lkIHJlZigpOwogICAgIHZvaWQgZGVyZWYoKTsKIAotICAgIHZvaWQgdmlzaXRS
ZWZlcmVuY2VkSW5kZXhlcyhKU0M6OlNsb3RWaXNpdG9yJikgY29uc3Q7CisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCB2aXNpdFJlZmVyZW5jZWRJbmRleGVzKFZpc2l0b3ImKSBj
b25zdDsKICAgICB2b2lkIHJlbmFtZVJlZmVyZW5jZWRJbmRleChJREJJbmRleCYsIGNvbnN0IFN0
cmluZyYgbmV3TmFtZSk7CiAKIHByaXZhdGU6CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb24uY3BwCShyZXZpc2lvbiAyNzI5MDIp
CisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1
LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE1LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC0xNDU1LDcgKzE0NTUsOCBAQCB2b2lkIElEQlRyYW5zYWN0aW9u
Ojpjb25uZWN0aW9uQ2xvc2VkRnJvCiAgICAgZmlyZU9uQWJvcnQoKTsKIH0KIAotdm9pZCBJREJU
cmFuc2FjdGlvbjo6dmlzaXRSZWZlcmVuY2VkT2JqZWN0U3RvcmVzKEpTQzo6U2xvdFZpc2l0b3Im
IHZpc2l0b3IpIGNvbnN0Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBJREJUcmFu
c2FjdGlvbjo6dmlzaXRSZWZlcmVuY2VkT2JqZWN0U3RvcmVzKFZpc2l0b3ImIHZpc2l0b3IpIGNv
bnN0CiB7CiAgICAgTG9ja2VyPExvY2s+IGxvY2tlcihtX3JlZmVyZW5jZWRPYmplY3RTdG9yZUxv
Y2spOwogICAgIGZvciAoYXV0byYgb2JqZWN0U3RvcmUgOiBtX3JlZmVyZW5jZWRPYmplY3RTdG9y
ZXMudmFsdWVzKCkpCkBAIC0xNDY0LDYgKzE0NjUsOSBAQCB2b2lkIElEQlRyYW5zYWN0aW9uOjp2
aXNpdFJlZmVyZW5jZWRPYmplCiAgICAgICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChvYmplY3RT
dG9yZS5nZXQoKSk7CiB9CiAKK3RlbXBsYXRlIHZvaWQgSURCVHJhbnNhY3Rpb246OnZpc2l0UmVm
ZXJlbmNlZE9iamVjdFN0b3JlcyhKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKSBjb25zdDsKK3Rl
bXBsYXRlIHZvaWQgSURCVHJhbnNhY3Rpb246OnZpc2l0UmVmZXJlbmNlZE9iamVjdFN0b3JlcyhK
U0M6OlNsb3RWaXNpdG9yJikgY29uc3Q7CisKIHZvaWQgSURCVHJhbnNhY3Rpb246OmhhbmRsZVBl
bmRpbmdPcGVyYXRpb25zKCkKIHsKICAgICBBU1NFUlQoY2FuQ3VycmVudFRocmVhZEFjY2Vzc1Ro
cmVhZExvY2FsRGF0YShtX2RhdGFiYXNlLT5vcmlnaW5UaHJlYWQoKSkpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb24uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5oCShyZXZp
c2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFu
c2FjdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTUtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE0OSw3ICsxNDksNyBAQCBwdWJsaWM6CiAKICAgICB2
b2lkIGNvbm5lY3Rpb25DbG9zZWRGcm9tU2VydmVyKGNvbnN0IElEQkVycm9yJik7CiAKLSAgICB2
b2lkIHZpc2l0UmVmZXJlbmNlZE9iamVjdFN0b3JlcyhKU0M6OlNsb3RWaXNpdG9yJikgY29uc3Q7
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCB2aXNpdFJlZmVyZW5jZWRPYmpl
Y3RTdG9yZXMoVmlzaXRvciYpIGNvbnN0OwogCiAgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIHN0
ZDo6YXRvbWljPHVuc2lnbmVkPiBudW1iZXJPZklEQlRyYW5zYWN0aW9uczsKIApJbmRleDogU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0J1ZmZlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0J1ZmZlci5jcHAJKHJldmlz
aW9uIDI3MjkwMikKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9CdWZm
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAo
QykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMTU0LDEyICsxNTQsMTYgQEAgRXhjZXB0aW9uT3I8SlNDOjpK
U1ZhbHVlPiBBdWRpb0J1ZmZlcjo6ZwogICAgIHJldHVybiBjb25zdHJ1Y3RKU0FycmF5KCk7CiB9
CiAKLXZvaWQgQXVkaW9CdWZmZXI6OnZpc2l0Q2hhbm5lbFdyYXBwZXJzKEpTQzo6U2xvdFZpc2l0
b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBBdWRpb0J1ZmZl
cjo6dmlzaXRDaGFubmVsV3JhcHBlcnMoVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBmb3IgKGF1
dG8mIGNoYW5uZWxXcmFwcGVyIDogbV9jaGFubmVsV3JhcHBlcnMpCiAgICAgICAgIGNoYW5uZWxX
cmFwcGVyLnZpc2l0KHZpc2l0b3IpOwogfQogCit0ZW1wbGF0ZSB2b2lkIEF1ZGlvQnVmZmVyOjp2
aXNpdENoYW5uZWxXcmFwcGVycyhKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRl
IHZvaWQgQXVkaW9CdWZmZXI6OnZpc2l0Q2hhbm5lbFdyYXBwZXJzKEpTQzo6U2xvdFZpc2l0b3Im
KTsKKwogUmVmUHRyPEZsb2F0MzJBcnJheT4gQXVkaW9CdWZmZXI6OmNoYW5uZWxEYXRhKHVuc2ln
bmVkIGNoYW5uZWxJbmRleCkKIHsKICAgICBpZiAoY2hhbm5lbEluZGV4ID49IG1fY2hhbm5lbHMu
c2l6ZSgpKQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0J1ZmZl
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9C
dWZmZXIuaAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJh
dWRpby9BdWRpb0J1ZmZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAq
IENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNzUsNyArNzUsNyBAQCBwdWJsaWM6CiAK
ICAgICBzaXplX3QgbWVtb3J5Q29zdCgpIGNvbnN0OwogCi0gICAgdm9pZCB2aXNpdENoYW5uZWxX
cmFwcGVycyhKU0M6OlNsb3RWaXNpdG9yJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRv
cj4gdm9pZCB2aXNpdENoYW5uZWxXcmFwcGVycyhWaXNpdG9yJik7CiAgICAgCiBwcml2YXRlOgog
ICAgIEF1ZGlvQnVmZmVyKHVuc2lnbmVkIG51bWJlck9mQ2hhbm5lbHMsIHNpemVfdCBsZW5ndGgs
IGZsb2F0IHNhbXBsZVJhdGUsIExlZ2FjeVByZXZlbnREZXRhY2hpbmcgPSBMZWdhY3lQcmV2ZW50
RGV0YWNoaW5nOjpObyk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9ET01HQ091
dHB1dENvbnN0cmFpbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0RPTUdDT3V0cHV0Q29uc3RyYWludC5jcHAJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0RPTUdDT3V0cHV0Q29uc3RyYWludC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQ5LDcgKzQ5LDggQEAgRE9NR0NPdXRwdXRDb25zdHJhaW50Ojp+RE9NR0NPdXRw
dXRDb25zdAogewogfQogCi12b2lkIERPTUdDT3V0cHV0Q29uc3RyYWludDo6ZXhlY3V0ZUltcGwo
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBE
T01HQ091dHB1dENvbnN0cmFpbnQ6OmV4ZWN1dGVJbXBsSW1wbChWaXNpdG9yJiB2aXNpdG9yKQog
ewogICAgIEhlYXAmIGhlYXAgPSBtX3ZtLmhlYXA7CiAgICAgCkBAIC02MCwxNSArNjEsMTkgQEAg
dm9pZCBET01HQ091dHB1dENvbnN0cmFpbnQ6OmV4ZWN1dGVJbXBsKAogICAgIAogICAgIG1fY2xp
ZW50RGF0YS5mb3JFYWNoT3V0cHV0Q29uc3RyYWludFNwYWNlKAogICAgICAgICBbJl0gKFN1YnNw
YWNlJiBzdWJzcGFjZSkgewotICAgICAgICAgICAgYXV0byBmdW5jID0gW10gKFNsb3RWaXNpdG9y
JiB2aXNpdG9yLCBIZWFwQ2VsbCogaGVhcENlbGwsIEhlYXBDZWxsOjpLaW5kKSB7CisgICAgICAg
ICAgICBhdXRvIGZ1bmMgPSBbXSAoVmlzaXRvciYgdmlzaXRvciwgSGVhcENlbGwqIGhlYXBDZWxs
LCBIZWFwQ2VsbDo6S2luZCkgewogICAgICAgICAgICAgICAgIFNldFJvb3RNYXJrUmVhc29uU2Nv
cGUgcm9vdFNjb3BlKHZpc2l0b3IsIFJvb3RNYXJrUmVhc29uOjpET01HQ091dHB1dCk7CiAgICAg
ICAgICAgICAgICAgSlNDZWxsKiBjZWxsID0gc3RhdGljX2Nhc3Q8SlNDZWxsKj4oaGVhcENlbGwp
OwogICAgICAgICAgICAgICAgIGNlbGwtPm1ldGhvZFRhYmxlKHZpc2l0b3Iudm0oKSktPnZpc2l0
T3V0cHV0Q29uc3RyYWludHMoY2VsbCwgdmlzaXRvcik7CiAgICAgICAgICAgICB9OwogICAgICAg
ICAgICAgCi0gICAgICAgICAgICB2aXNpdG9yLmFkZFBhcmFsbGVsQ29uc3RyYWludFRhc2soc3Vi
c3BhY2UuZm9yRWFjaE1hcmtlZENlbGxJblBhcmFsbGVsKGZ1bmMpKTsKKyAgICAgICAgICAgIFJl
ZlB0cjxTaGFyZWRUYXNrPHZvaWQoVmlzaXRvciYpPj4gdGFzayA9IHN1YnNwYWNlLnRlbXBsYXRl
IGZvckVhY2hNYXJrZWRDZWxsSW5QYXJhbGxlbDxWaXNpdG9yPihmdW5jKTsKKyAgICAgICAgICAg
IHZpc2l0b3IuYWRkUGFyYWxsZWxDb25zdHJhaW50VGFzayh0YXNrKTsKICAgICAgICAgfSk7CiB9
CiAgICAgICAgIAordm9pZCBET01HQ091dHB1dENvbnN0cmFpbnQ6OmV4ZWN1dGVJbXBsKEFic3Ry
YWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsgZXhlY3V0ZUltcGxJbXBsKHZpc2l0b3IpOyB9Cit2
b2lkIERPTUdDT3V0cHV0Q29uc3RyYWludDo6ZXhlY3V0ZUltcGwoU2xvdFZpc2l0b3ImIHZpc2l0
b3IpIHsgZXhlY3V0ZUltcGxJbXBsKHZpc2l0b3IpOyB9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvRE9NR0NPdXRwdXRDb25zdHJh
aW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvRE9NR0NPdXRw
dXRDb25zdHJhaW50LmgJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0RPTUdDT3V0cHV0Q29uc3RyYWludC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNy0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDIsOSAr
NDIsMTIgQEAgcHVibGljOgogICAgIH5ET01HQ091dHB1dENvbnN0cmFpbnQoKTsKICAgICAKIHBy
b3RlY3RlZDoKKyAgICB2b2lkIGV4ZWN1dGVJbXBsKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYp
IG92ZXJyaWRlOwogICAgIHZvaWQgZXhlY3V0ZUltcGwoSlNDOjpTbG90VmlzaXRvciYpIG92ZXJy
aWRlOwogCiBwcml2YXRlOgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgZXhl
Y3V0ZUltcGxJbXBsKFZpc2l0b3ImKTsKKwogICAgIEpTQzo6Vk0mIG1fdm07CiAgICAgSlNWTUNs
aWVudERhdGEmIG1fY2xpZW50RGF0YTsKICAgICB1aW50NjRfdCBtX2xhc3RFeGVjdXRpb25WZXJz
aW9uOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNBYm9ydENvbnRyb2xsZXJD
dXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQWJv
cnRDb250cm9sbGVyQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNBYm9ydENvbnRyb2xsZXJDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyogQ29weXJpZ2h0IChDKSAyMDE5LTIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogKgogKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOCw5
ICsyOCwxMiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgSlNBYm9ydENvbnRyb2xs
ZXI6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0
ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0Fib3J0Q29udHJvbGxlcjo6dmlzaXRB
ZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB2aXNpdG9yLmFkZE9w
YXF1ZVJvb3QoJndyYXBwZWQoKS5zaWduYWwoKSk7CiB9CiAKK0RFRklORV9WSVNJVF9BRERJVElP
TkFMX0NISUxEUkVOKEpTQWJvcnRDb250cm9sbGVyKTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNBYm9ydFNpZ25hbEN1c3RvbS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNBYm9ydFNpZ25h
bEN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTQWJvcnRTaWduYWxDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyogQ29weXJpZ2h0IChDKSAyMDE5LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogKgogKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOCw3ICsyOCw3IEBACiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotYm9vbCBKU0Fib3J0U2lnbmFsT3duZXI6OmlzUmVhY2hhYmxl
RnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwg
SlNDOjpTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikKK2Jvb2wgSlNB
Ym9ydFNpZ25hbE93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxK
U0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYgdmlz
aXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikKIHsKICAgICBhdXRvJiBhYm9ydFNpZ25hbCA9IEpT
Qzo6anNDYXN0PEpTQWJvcnRTaWduYWwqPihoYW5kbGUuc2xvdCgpLT5hc0NlbGwoKSktPndyYXBw
ZWQoKTsKICAgICBpZiAoYWJvcnRTaWduYWwuaXNGaXJpbmdFdmVudExpc3RlbmVycygpKSB7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0F0dHJDdXN0b20uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXR0ckN1c3RvbS5jcHAJKHJldmlz
aW9uIDI3MjkwMikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXR0ckN1c3RvbS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDA3LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAwNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzMsMTAgKzMzLDEzIEBACiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotdm9pZCBKU0F0dHI6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBK
U0F0dHI6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAg
aWYgKEVsZW1lbnQqIGVsZW1lbnQgPSB3cmFwcGVkKCkub3duZXJFbGVtZW50KCkpCiAgICAgICAg
IHZpc2l0b3IuYWRkT3BhcXVlUm9vdChyb290KGVsZW1lbnQpKTsKIH0KIAorREVGSU5FX1ZJU0lU
X0FERElUSU9OQUxfQ0hJTERSRU4oSlNBdHRyKTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNBdWRpb0J1ZmZlckN1c3RvbS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNBdWRpb0J1ZmZlckN1
c3RvbS5jcHAJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTQXVkaW9CdWZmZXJDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMjAtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMxLDExICszMSwxNCBAQAog
bmFtZXNwYWNlIFdlYkNvcmUgewogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAotdm9pZCBKU0F1ZGlv
QnVmZmVyOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3Rl
bXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTQXVkaW9CdWZmZXI6OnZpc2l0QWRkaXRp
b25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgd3JhcHBlZCgpLnZpc2l0Q2hh
bm5lbFdyYXBwZXJzKHZpc2l0b3IpOwogfQogCitERUZJTkVfVklTSVRfQURESVRJT05BTF9DSElM
RFJFTihKU0F1ZGlvQnVmZmVyKTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYg
Ly8gRU5BQkxFKFdFQl9BVURJTykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
QXVkaW9UcmFja0N1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNBdWRpb1RyYWNrQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNBdWRpb1RyYWNrQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0zNSwxMSArMzUsMTQgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBK
U0M7CiAKLXZvaWQgSlNBdWRpb1RyYWNrOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90Vmlz
aXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTQXVkaW9U
cmFjazo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB2
aXNpdG9yLmFkZE9wYXF1ZVJvb3Qocm9vdCgmd3JhcHBlZCgpKSk7CiB9CiAKK0RFRklORV9WSVNJ
VF9BRERJVElPTkFMX0NISUxEUkVOKEpTQXVkaW9UcmFjayk7CisKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKIAogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0F1ZGlv
VHJhY2tMaXN0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0F1ZGlvVHJhY2tMaXN0Q3VzdG9tLmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNBdWRpb1RyYWNrTGlzdEN1c3RvbS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMzYsMTEgKzM2LDE0IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1l
c3BhY2UgSlNDOwogCi12b2lkIEpTQXVkaW9UcmFja0xpc3Q6OnZpc2l0QWRkaXRpb25hbENoaWxk
cmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3Zv
aWQgSlNBdWRpb1RyYWNrTGlzdDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlz
aXRvcikKIHsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qocm9vdCh3cmFwcGVkKCkuZWxlbWVu
dCgpKSk7CiB9CiAKK0RFRklORV9WSVNJVF9BRERJVElPTkFMX0NISUxEUkVOKEpTQXVkaW9UcmFj
a0xpc3QpOworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZgpJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNBdWRpb1dvcmtsZXRQcm9jZXNzb3JDdXN0b20uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXVkaW9Xb3JrbGV0UHJv
Y2Vzc29yQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNBdWRpb1dvcmtsZXRQcm9jZXNzb3JDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAtMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTMxLDcgKzMxLDggQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBKU0M7
CiAKLXZvaWQgSlNBdWRpb1dvcmtsZXRQcm9jZXNzb3I6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVu
KFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQg
SlNBdWRpb1dvcmtsZXRQcm9jZXNzb3I6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3Im
IHZpc2l0b3IpCiB7CiAgICAgYXV0byYgcHJvY2Vzc29yID0gd3JhcHBlZCgpOwogICAgIHByb2Nl
c3Nvci5qc0lucHV0c1dyYXBwZXIoKS52aXNpdCh2aXNpdG9yKTsKQEAgLTM5LDYgKzQwLDggQEAg
dm9pZCBKU0F1ZGlvV29ya2xldFByb2Nlc3Nvcjo6dmlzaXRBZGRpdAogICAgIHByb2Nlc3Nvci5q
c1BhcmFtVmFsdWVzV3JhcHBlcigpLnZpc2l0KHZpc2l0b3IpOwogfQogCitERUZJTkVfVklTSVRf
QURESVRJT05BTF9DSElMRFJFTihKU0F1ZGlvV29ya2xldFByb2Nlc3Nvcik7CisKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShXRUJfQVVESU8pCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NTU1J1bGVDdXN0b20uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ1NTUnVsZUN1c3RvbS5jcHAJKHJldmlzaW9u
IDI3MjkwMikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ1NTUnVsZUN1c3RvbS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAwNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTEsMTEgKzUxLDE0IEBACiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCi12b2lkIEpTQ1NTUnVsZTo6dmlzaXRBZGRpdGlv
bmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNp
dG9yPgordm9pZCBKU0NTU1J1bGU6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZp
c2l0b3IpCiB7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHJvb3QoJndyYXBwZWQoKSkpOwog
fQogCitERUZJTkVfVklTSVRfQURESVRJT05BTF9DSElMRFJFTihKU0NTU1J1bGUpOworCiBKU1Zh
bHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNHbG9iYWxPYmplY3QqLCBKU0RPTUdsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBSZWY8Q1NTUnVsZT4mJiBydWxlKQogewogICAgIHN3aXRjaCAocnVsZS0+
dHlwZSgpKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NTU1J1bGVMaXN0
Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NT
U1J1bGVMaXN0Q3VzdG9tLmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNDU1NSdWxlTGlzdEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTkgQXBwbGUgSW5jLiBBbGwg
cmlnaHQgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAyMSBBcHBsZSBJbmMuIEFs
bCByaWdodCByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzYs
NyArMzYsNyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAot
Ym9vbCBKU0NTU1J1bGVMaXN0T3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6
SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgU2xvdFZpc2l0b3ImIHZpc2l0b3Is
IGNvbnN0IGNoYXIqKiByZWFzb24pCitib29sIEpTQ1NTUnVsZUxpc3RPd25lcjo6aXNSZWFjaGFi
bGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQq
LCBBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQogewog
ICAgIEpTQ1NTUnVsZUxpc3QqIGpzQ1NTUnVsZUxpc3QgPSBqc0Nhc3Q8SlNDU1NSdWxlTGlzdCo+
KGhhbmRsZS5zbG90KCktPmFzQ2VsbCgpKTsKICAgICBpZiAoIWpzQ1NTUnVsZUxpc3QtPmhhc0N1
c3RvbVByb3BlcnRpZXMoanNDU1NSdWxlTGlzdC0+dm0oKSkpCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0NTU1N0eWxlRGVjbGFyYXRpb25DdXN0b20uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ1NTU3R5bGVEZWNsYXJhdGlvbkN1c3Rv
bS5jcHAJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
Q1NTU3R5bGVEZWNsYXJhdGlvbkN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01MSw5ICs1
MSwxMiBAQCB2b2lkKiByb290KENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlKQogICAgIHJldHVy
biBzdHlsZTsKIH0KIAotdm9pZCBKU0NTU1N0eWxlRGVjbGFyYXRpb246OnZpc2l0QWRkaXRpb25h
bENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRv
cj4KK3ZvaWQgSlNDU1NTdHlsZURlY2xhcmF0aW9uOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihW
aXNpdG9yJiB2aXNpdG9yKQogewogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChyb290KCZ3cmFw
cGVkKCkpKTsKIH0KIAorREVGSU5FX1ZJU0lUX0FERElUSU9OQUxfQ0hJTERSRU4oSlNDU1NTdHls
ZURlY2xhcmF0aW9uKTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNDYWxsYmFja0RhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2FsbGJhY2tEYXRhLmNwcAkocmV2aXNpb24gMjcyOTAy
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDYWxsYmFja0RhdGEuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA5
LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAwNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtOTUsMTIgKzk1LDE2IEBAIEpTVmFsdWUgSlNDYWxsYmFja0Rh
dGE6Omludm9rZUNhbGxiYWNrKEoKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi12b2lkIEpTQ2Fs
bGJhY2tEYXRhV2Vhazo6dmlzaXRKU0Z1bmN0aW9uKEpTQzo6U2xvdFZpc2l0b3ImIHZpc3RvcikK
K3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTQ2FsbGJhY2tEYXRhV2Vhazo6dmlz
aXRKU0Z1bmN0aW9uKFZpc2l0b3ImIHZpc2l0b3IpCiB7Ci0gICAgdmlzdG9yLmFwcGVuZChtX2Nh
bGxiYWNrKTsKKyAgICB2aXNpdG9yLmFwcGVuZChtX2NhbGxiYWNrKTsKIH0KIAotYm9vbCBKU0Nh
bGxiYWNrRGF0YVdlYWs6OldlYWtPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlND
OjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCwgU2xvdFZpc2l0b3ImIHZpc2l0
b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCit0ZW1wbGF0ZSB2b2lkIEpTQ2FsbGJhY2tEYXRhV2Vh
azo6dmlzaXRKU0Z1bmN0aW9uKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUg
dm9pZCBKU0NhbGxiYWNrRGF0YVdlYWs6OnZpc2l0SlNGdW5jdGlvbihKU0M6OlNsb3RWaXNpdG9y
Jik7CisKK2Jvb2wgSlNDYWxsYmFja0RhdGFXZWFrOjpXZWFrT3duZXI6OmlzUmVhY2hhYmxlRnJv
bU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIEFi
c3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCiB7CiAgICAg
aWYgKFVOTElLRUxZKHJlYXNvbikpCiAgICAgICAgICpyZWFzb24gPSAiQ29udGV4dCBpcyBvcGFx
dWUgcm9vdCI7IC8vIEZJWE1FOiB3aGF0IGlzIHRoZSBjb250ZXh0LgpJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNDYWxsYmFja0RhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NhbGxiYWNrRGF0YS5oCShyZXZpc2lvbiAyNzI5MDIpCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NhbGxiYWNrRGF0YS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA5LCAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNy0y
MDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMTEzLDExICsxMTMsMTEgQEAgcHVibGljOgogICAgICAgICByZXR1cm4g
SlNDYWxsYmFja0RhdGE6Omludm9rZUNhbGxiYWNrKCpnbG9iYWxPYmplY3QsIGNhbGxiYWNrKCks
IHRoaXNWYWx1ZSwgYXJncywgY2FsbGJhY2tUeXBlLCBmdW5jdGlvbk5hbWUsIHJldHVybmVkRXhj
ZXB0aW9uKTsKICAgICB9CiAKLSAgICB2b2lkIHZpc2l0SlNGdW5jdGlvbihKU0M6OlNsb3RWaXNp
dG9yJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCB2aXNpdEpTRnVuY3Rp
b24oVmlzaXRvciYpOwogCiBwcml2YXRlOgogICAgIGNsYXNzIFdlYWtPd25lciA6IHB1YmxpYyBK
U0M6OldlYWtIYW5kbGVPd25lciB7Ci0gICAgICAgIGJvb2wgaXNSZWFjaGFibGVGcm9tT3BhcXVl
Um9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCwgSlNDOjpTbG90
VmlzaXRvciYsIGNvbnN0IGNoYXIqKikgb3ZlcnJpZGU7CisgICAgICAgIGJvb2wgaXNSZWFjaGFi
bGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4
dCwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiwgY29uc3QgY2hhcioqKSBvdmVycmlkZTsKICAg
ICB9OwogICAgIFdlYWtPd25lciBtX3dlYWtPd25lcjsKICAgICBKU0M6OldlYWs8SlNDOjpKU09i
amVjdD4gbV9jYWxsYmFjazsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREN1c3RvbS5jcHAJKHJl
dmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI0LDcgKzI0LDcgQEAKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi1ib29sIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJET3duZXI6Omlz
UmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxl
LCB2b2lkKiwgSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikK
K2Jvb2wgSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRPd25lcjo6aXNSZWFjaGFibGVGcm9tT3Bh
cXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBKU0M6OkFi
c3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCiB7CiAgICAg
aWYgKFVOTElLRUxZKHJlYXNvbikpCiAgICAgICAgICpyZWFzb24gPSAiQ2FudmFzIGlzIG9wYXF1
ZSByb290IjsKQEAgLTM0LDkgKzM0LDEyIEBAIGJvb2wgSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0
MkRPd25lcjo6aXMKICAgICByZXR1cm4gdmlzaXRvci5jb250YWluc09wYXF1ZVJvb3Qocm9vdCk7
CiB9CiAKLXZvaWQgSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnZpc2l0QWRkaXRpb25hbENo
aWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNp
dG9yPgordm9pZCBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6dmlzaXRBZGRpdGlvbmFsQ2hp
bGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qocm9v
dCh3cmFwcGVkKCkuY2FudmFzKCkpKTsKIH0KIAorREVGSU5FX1ZJU0lUX0FERElUSU9OQUxfQ0hJ
TERSRU4oSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQpOworCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0N1c3RvbUV2ZW50Q3VzdG9t
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0N1c3RvbUV2
ZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNDdXN0b21FdmVudEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00MiwxMCAr
NDIsMTMgQEAgSlNDOjpKU1ZhbHVlIEpTQ3VzdG9tRXZlbnQ6OmRldGFpbChKU0M6OgogICAgIH0p
OwogfQogCi12b2lkIEpTQ3VzdG9tRXZlbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBK
U0N1c3RvbUV2ZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQog
ewogICAgIHdyYXBwZWQoKS5kZXRhaWwoKS52aXNpdCh2aXNpdG9yKTsKICAgICB3cmFwcGVkKCku
Y2FjaGVkRGV0YWlsKCkudmlzaXQodmlzaXRvcik7CiB9CiAKK0RFRklORV9WSVNJVF9BRERJVElP
TkFMX0NISUxEUkVOKEpTQ3VzdG9tRXZlbnQpOworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJ1aWx0aW5Db25zdHJ1Y3RvckJh
c2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQnVp
bHRpbkNvbnN0cnVjdG9yQmFzZS5jcHAJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTRE9NQnVpbHRpbkNvbnN0cnVjdG9yQmFzZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAxIEhh
cnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA0LTIwMTcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwNC0y
MDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqICBDb3B5cmlnaHQgKEMpIDIw
MDcgU2FtdWVsIFdlaW5pZyA8c2FtQHdlYmtpdC5vcmc+CiAgKiAgQ29weXJpZ2h0IChDKSAyMDEz
IE1pY2hhZWwgUHJ1ZXR0IDxtaWNoYWVsQDY4ay5vcmc+CiAgKgpAQCAtNDUsNyArNDUsOCBAQCB2
b2lkIEpTRE9NQnVpbHRpbkNvbnN0cnVjdG9yQmFzZTo6Y2FsbEZ1CiAgICAgSlNDOjpjYWxsKCZs
ZXhpY2FsR2xvYmFsT2JqZWN0LCAmZnVuY3Rpb24sIGNhbGxEYXRhLCAmdGhpc09iamVjdCwgYXJn
dW1lbnRzKTsKIH0KIAotdm9pZCBKU0RPTUJ1aWx0aW5Db25zdHJ1Y3RvckJhc2U6OnZpc2l0Q2hp
bGRyZW4oSlNDOjpKU0NlbGwqIGNlbGwsIEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1w
bGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0RPTUJ1aWx0aW5Db25zdHJ1Y3RvckJhc2U6
OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQzo6SlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQog
ewogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNET01CdWlsdGluQ29uc3RydWN0b3JC
YXNlKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBp
bmZvKCkpOwpAQCAtNTMsNiArNTQsOCBAQCB2b2lkIEpTRE9NQnVpbHRpbkNvbnN0cnVjdG9yQmFz
ZTo6dmlzaXRDCiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9pbml0aWFsaXplRnVu
Y3Rpb24pOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNET01CdWlsdGluQ29uc3RydWN0
b3JCYXNlKTsKKwogSlNDOjpJc29TdWJzcGFjZSogSlNET01CdWlsdGluQ29uc3RydWN0b3JCYXNl
OjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCiB7CiAgICAgcmV0dXJuICZzdGF0aWNfY2Fz
dDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpLT5kb21CdWlsdGluQ29uc3RydWN0b3JT
cGFjZSgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CdWlsdGluQ29u
c3RydWN0b3JCYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNET01CdWlsdGluQ29uc3RydWN0b3JCYXNlLmgJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQnVpbHRpbkNvbnN0cnVjdG9yQmFzZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDIwMTUsIDIw
MTYgQ2Fub24gSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogIENvcHlyaWdodCAoQykgMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDE2
LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAg
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1Ymxp
YwpAQCAtNDIsNyArNDIsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgewogICAgIH0KIAotICAgIHN0YXRp
YyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJik7Cisg
ICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIEpTQzo6SlNGdW5jdGlvbiogaW5pdGlh
bGl6ZUZ1bmN0aW9uKCk7CiAgICAgdm9pZCBzZXRJbml0aWFsaXplRnVuY3Rpb24oSlNDOjpWTSYs
IEpTQzo6SlNGdW5jdGlvbiYpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNE
T01HbG9iYWxPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTRE9NR2xvYmFsT2JqZWN0LmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNET01HbG9iYWxPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOC0yMDE4IEFwcGxlIEluYy4g
QWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDIxIEFwcGxlIElu
Yy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtMjM4LDcgKzIzOCw4IEBAIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIEpTRE9NR2xvYmFsT2Jq
ZWMKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotdm9pZCBKU0RPTUdsb2JhbE9iamVjdDo6dmlz
aXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8
dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNET01HbG9iYWxPYmplY3Q6OnZpc2l0Q2hpbGRyZW5J
bXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU0RPTUdsb2JhbE9i
amVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGNlbGwpOwogICAg
IEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTI2MCw2
ICsyNjEsOCBAQCB2b2lkIEpTRE9NR2xvYmFsT2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTCiAgICAg
dGhpc09iamVjdC0+bV9idWlsdGluSW50ZXJuYWxGdW5jdGlvbnMudmlzaXQodmlzaXRvcik7CiB9
CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU0RPTUdsb2JhbE9iamVjdCk7CisKIHZvaWQgSlNE
T01HbG9iYWxPYmplY3Q6OnByb21pc2VSZWplY3Rpb25UcmFja2VyKEpTR2xvYmFsT2JqZWN0KiBq
c0dsb2JhbE9iamVjdCwgSlNQcm9taXNlKiBwcm9taXNlLCBKU1Byb21pc2VSZWplY3Rpb25PcGVy
YXRpb24gb3BlcmF0aW9uKQogewogICAgIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcv
bXVsdGlwYWdlL3dlYmFwcGFwaXMuaHRtbCN0aGUtaG9zdHByb21pc2VyZWplY3Rpb250cmFja2Vy
LWltcGxlbWVudGF0aW9uCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUds
b2JhbE9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
RE9NR2xvYmFsT2JqZWN0LmgJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTggQXBwbGUgSW5jLiBBbGwgUmlnaHRz
IFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMjEgQXBwbGUgSW5jLiBBbGwgUmln
aHRzIFJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02OSw3ICs2
OSw3IEBAIHB1YmxpYzoKICAgICAvLyBNYWtlIGJpbmRpbmcgY29kZSBnZW5lcmF0aW9uIGVhc2ll
ci4KICAgICBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KCkgeyByZXR1cm4gdGhpczsg
fQogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0M6OkpTQ2VsbCosIEpTQzo6U2xv
dFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgRE9NV3JhcHBl
cldvcmxkJiB3b3JsZCgpIHsgcmV0dXJuIG1fd29ybGQuZ2V0KCk7IH0KICAgICBib29sIHdvcmxk
SXNOb3JtYWwoKSBjb25zdCB7IHJldHVybiBtX3dvcmxkSXNOb3JtYWw7IH0KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR3VhcmRlZE9iamVjdC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR3VhcmRlZE9iamVjdC5oCShyZXZpc2lv
biAyNzI5MDIpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUd1YXJkZWRPYmpl
Y3QuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC00MCw3ICs0MCw3IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaXNT
dXNwZW5kZWQoKSBjb25zdCB7IHJldHVybiAhbV9ndWFyZGVkIHx8ICFjYW5JbnZva2VDYWxsYmFj
aygpOyB9IC8vIFRoZSB3cmFwcGVyIHdvcmxkIGhhcyBnb25lIGF3YXkgb3IgYWN0aXZlIERPTSBv
YmplY3RzIGhhdmUgYmVlbiBzdXNwZW5kZWQuCiAKLSAgICB2b2lkIHZpc2l0QWdncmVnYXRlKEpT
Qzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsgdmlzaXRvci5hcHBlbmQobV9ndWFyZGVkKTsgfQor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgdmlzaXRBZ2dyZWdhdGUoVmlzaXRv
ciYgdmlzaXRvcikgeyB2aXNpdG9yLmFwcGVuZChtX2d1YXJkZWQpOyB9CiAKICAgICBKU0M6OkpT
VmFsdWUgZ3VhcmRlZE9iamVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fZ3VhcmRlZC5nZXQoKTsgfQog
ICAgIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QoKSBjb25zdCB7IHJldHVybiBtX2ds
b2JhbE9iamVjdC5nZXQoKTsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNE
T01RdWFkQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0RPTVF1YWRDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0RPTVF1YWRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMzLDcgKzMz
LDggQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKLXZvaWQg
SlNET01RdWFkOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikK
K3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTRE9NUXVhZDo6dmlzaXRBZGRpdGlv
bmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJv
b3QoY29uc3RfY2FzdDxET01Qb2ludCo+KCZ3cmFwcGVkKCkucDEoKSkpOwogICAgIHZpc2l0b3Iu
YWRkT3BhcXVlUm9vdChjb25zdF9jYXN0PERPTVBvaW50Kj4oJndyYXBwZWQoKS5wMigpKSk7CkBA
IC00MSw0ICs0Miw2IEBAIHZvaWQgSlNET01RdWFkOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbigK
ICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QoY29uc3RfY2FzdDxET01Qb2ludCo+KCZ3cmFwcGVk
KCkucDQoKSkpOwogfQogCi19CitERUZJTkVfVklTSVRfQURESVRJT05BTF9DSElMRFJFTihKU0RP
TVF1YWQpOworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0RPTVdpbmRvd0N1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI5MDIp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0N1c3RvbS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA3LTIw
MjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3
LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAy
MDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAtMTE5
LDcgKzExOSw4IEBAIEpTQ19ERUZJTkVfQ1VTVE9NX0dFVFRFUihqc0RPTVdpbmRvd0luc3QKICAg
ICByZXR1cm4gbm9uQ2FjaGluZ1N0YXRpY0Z1bmN0aW9uR2V0dGVySW1wbDxqc0RPTVdpbmRvd0lu
c3RhbmNlRnVuY3Rpb25fcG9zdE1lc3NhZ2UsIDI+KGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1l
KTsKIH0KIAotdm9pZCBKU0RPTVdpbmRvdzo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZp
c2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0RPTVdp
bmRvdzo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBp
ZiAoRnJhbWUqIGZyYW1lID0gd3JhcHBlZCgpLmZyYW1lKCkpCiAgICAgICAgIHZpc2l0b3IuYWRk
T3BhcXVlUm9vdChmcmFtZSk7CkBAIC0xMzIsNiArMTMzLDggQEAgdm9pZCBKU0RPTVdpbmRvdzo6
dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZQogICAgIHdyYXBwZWQoKS52aXNpdEpTRXZlbnRMaXN0ZW5l
cnModmlzaXRvcik7CiB9CiAKK0RFRklORV9WSVNJVF9BRERJVElPTkFMX0NISUxEUkVOKEpTRE9N
V2luZG93KTsKKwogI2lmIEVOQUJMRShVU0VSX01FU1NBR0VfSEFORExFUlMpCiBKU0NfREVGSU5F
X0NVU1RPTV9HRVRURVIoanNET01XaW5kb3dfd2Via2l0LCAoSlNHbG9iYWxPYmplY3QqIGxleGlj
YWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKSkK
IHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGVwcmVjYXRlZENTU09NVmFs
dWVDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
RGVwcmVjYXRlZENTU09NVmFsdWVDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RlcHJlY2F0ZWRDU1NPTVZhbHVlQ3VzdG9tLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDct
MjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTM1LDcgKzM1LDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVz
aW5nIG5hbWVzcGFjZSBKU0M7CiAKLWJvb2wgSlNEZXByZWNhdGVkQ1NTT01WYWx1ZU93bmVyOjpp
c1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRs
ZSwgdm9pZCosIFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQorYm9v
bCBKU0RlcHJlY2F0ZWRDU1NPTVZhbHVlT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3Rz
KEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgQWJzdHJhY3RTbG90Vmlz
aXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikKIHsKICAgICBKU0RlcHJlY2F0ZWRD
U1NPTVZhbHVlKiBqc0NTU1ZhbHVlID0ganNDYXN0PEpTRGVwcmVjYXRlZENTU09NVmFsdWUqPiho
YW5kbGUuc2xvdCgpLT5hc0NlbGwoKSk7CiAgICAgaWYgKCFqc0NTU1ZhbHVlLT5oYXNDdXN0b21Q
cm9wZXJ0aWVzKGpzQ1NTVmFsdWUtPnZtKCkpKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNEb2N1bWVudEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNEb2N1bWVudEN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjkwMikKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRG9jdW1lbnRDdXN0b20uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA5LCAyMDEx
LCAyMDE2LCAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAwNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYwpAQCAtOTEsMTEgKzkxLDE0IEBAIEpTVmFsdWUgdG9KUyhKU0dsb2JhbE9iamVj
dCogbGV4aWNhbEdsb2IKICAgICByZXR1cm4gdG9KU05ld2x5Q3JlYXRlZChsZXhpY2FsR2xvYmFs
T2JqZWN0LCBnbG9iYWxPYmplY3QsIFJlZjxEb2N1bWVudD4oZG9jdW1lbnQpKTsKIH0KIAotdm9p
ZCBKU0RvY3VtZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRv
cikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTRG9jdW1lbnQ6OnZpc2l0QWRk
aXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgdmlzaXRvci5hZGRPcGFx
dWVSb290KHN0YXRpY19jYXN0PFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqPigmd3JhcHBlZCgpKSk7
CiB9CiAKK0RFRklORV9WSVNJVF9BRERJVElPTkFMX0NISUxEUkVOKEpTRG9jdW1lbnQpOworCiB2
b2lkIEpTRG9jdW1lbnQ6OmFuYWx5emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFuYWx5emVyJiBh
bmFseXplcikKIHsKICAgICBCYXNlOjphbmFseXplSGVhcChjZWxsLCBhbmFseXplcik7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Vycm9yRXZlbnRDdXN0b20uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXJyb3JFdmVudEN1c3RvbS5j
cHAJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXJy
b3JFdmVudEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKgogICog
Q29weXJpZ2h0IChDKSAyMDE4IFl1c3VrZSBTdXp1a2kgPHl1c3VrZXN1enVraUBzbG93c3RhcnQu
b3JnPi4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI4LDkgKzI5LDEyIEBACiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBKU0Vycm9yRXZlbnQ6OnZpc2l0QWRkaXRpb25h
bENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPgordm9pZCBKU0Vycm9yRXZlbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0
b3ImIHZpc2l0b3IpCiB7CiAgICAgd3JhcHBlZCgpLm9yaWdpbmFsRXJyb3IoKS52aXNpdCh2aXNp
dG9yKTsKIH0KIAorREVGSU5FX1ZJU0lUX0FERElUSU9OQUxfQ0hJTERSRU4oSlNFcnJvckV2ZW50
KTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNFdmVudExpc3RlbmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0V2ZW50TGlzdGVuZXIuY3BwCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50TGlzdGVuZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDYgKzEsNiBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDIwMDEgUGV0ZXIgS2VsbHkg
KHBta0Bwb3N0LmNvbSkKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAxOSBBcHBsZSBJbmMuIEFs
bCBSaWdodHMgUmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMjEgQXBwbGUgSW5j
LiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwpAQCAtNzgsNyArNzgs
OCBAQCBKU09iamVjdCogSlNFdmVudExpc3RlbmVyOjppbml0aWFsaXplSlNGCiAgICAgcmV0dXJu
IG51bGxwdHI7CiB9CiAKLXZvaWQgSlNFdmVudExpc3RlbmVyOjp2aXNpdEpTRnVuY3Rpb24oU2xv
dFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgoraW5saW5lIHZv
aWQgSlNFdmVudExpc3RlbmVyOjp2aXNpdEpTRnVuY3Rpb25JbXBsKFZpc2l0b3ImIHZpc2l0b3Ip
CiB7CiAgICAgLy8gSWYgbV93cmFwcGVyIGlzIG51bGwsIHdlIGFyZSBub3Qga2VlcGluZyBtX2pz
RnVuY3Rpb24gYWxpdmUuCiAgICAgaWYgKCFtX3dyYXBwZXIpCkBAIC04Nyw2ICs4OCw5IEBAIHZv
aWQgSlNFdmVudExpc3RlbmVyOjp2aXNpdEpTRnVuY3Rpb24oU2wKICAgICB2aXNpdG9yLmFwcGVu
ZChtX2pzRnVuY3Rpb24pOwogfQogCit2b2lkIEpTRXZlbnRMaXN0ZW5lcjo6dmlzaXRKU0Z1bmN0
aW9uKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsgdmlzaXRKU0Z1bmN0aW9uSW1wbCh2
aXNpdG9yKTsgfQordm9pZCBKU0V2ZW50TGlzdGVuZXI6OnZpc2l0SlNGdW5jdGlvbihTbG90Vmlz
aXRvciYgdmlzaXRvcikgeyB2aXNpdEpTRnVuY3Rpb25JbXBsKHZpc2l0b3IpOyB9CisKIHN0YXRp
YyB2b2lkIGhhbmRsZUJlZm9yZVVubG9hZEV2ZW50UmV0dXJuVmFsdWUoQmVmb3JlVW5sb2FkRXZl
bnQmIGV2ZW50LCBjb25zdCBTdHJpbmcmIHJldHVyblZhbHVlKQogewogICAgIGlmIChyZXR1cm5W
YWx1ZS5pc051bGwoKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRM
aXN0ZW5lci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZl
bnRMaXN0ZW5lci5oCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0V2ZW50TGlzdGVuZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8q
CiAgKiAgQ29weXJpZ2h0IChDKSAyMDAxIFBldGVyIEtlbGx5IChwbWtAcG9zdC5jb20pCi0gKiAg
Q29weXJpZ2h0IChDKSAyMDAzLTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogIENvcHlyaWdodCAoQykgMjAwMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKQEAgLTYyLDYgKzYyLDkgQEAgcHVibGljOgogCiBwcml2
YXRlOgogICAgIHZpcnR1YWwgSlNDOjpKU09iamVjdCogaW5pdGlhbGl6ZUpTRnVuY3Rpb24oU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCYpIGNvbnN0OworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlz
aXRvcj4gdm9pZCB2aXNpdEpTRnVuY3Rpb25JbXBsKFZpc2l0b3ImKTsKKyAgICB2b2lkIHZpc2l0
SlNGdW5jdGlvbihKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKSBmaW5hbDsKICAgICB2b2lkIHZp
c2l0SlNGdW5jdGlvbihKU0M6OlNsb3RWaXNpdG9yJikgZmluYWw7CiAKIHByb3RlY3RlZDoKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRUYXJnZXRDdXN0b20uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRUYXJnZXRDdXN0
b20uY3BwCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0V2ZW50VGFyZ2V0Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxNyBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAyMSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTcyLDkgKzcyLDEyIEBA
IHN0ZDo6dW5pcXVlX3B0cjxKU0V2ZW50VGFyZ2V0V3JhcHBlcj4ganMKICAgICByZXR1cm4gbnVs
bHB0cjsKIH0KIAotdm9pZCBKU0V2ZW50VGFyZ2V0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihT
bG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpT
RXZlbnRUYXJnZXQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7
CiAgICAgd3JhcHBlZCgpLnZpc2l0SlNFdmVudExpc3RlbmVycyh2aXNpdG9yKTsKIH0KIAorREVG
SU5FX1ZJU0lUX0FERElUSU9OQUxfQ0hJTERSRU4oSlNFdmVudFRhcmdldCk7CisKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRmV0Y2hF
dmVudEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNGZXRjaEV2ZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNGZXRjaEV2ZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMCwx
MSArMzAsMTQgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIEpTRmV0Y2hFdmVudDo6
dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBs
YXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTRmV0Y2hFdmVudDo6dmlzaXRBZGRpdGlvbmFs
Q2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qo
JndyYXBwZWQoKS5yZXF1ZXN0KCkpOwogfQogCi19CitERUZJTkVfVklTSVRfQURESVRJT05BTF9D
SElMRFJFTihKU0ZldGNoRXZlbnQpOworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRp
ZgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MQ2FudmFzRWxlbWVudEN1
c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1M
Q2FudmFzRWxlbWVudEN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTSFRNTENhbnZhc0VsZW1lbnRDdXN0b20uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAtMjAyMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTMxLDkgKzMxLDEyIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBKU0hUTUxD
YW52YXNFbGVtZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2
aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNIVE1MQ2FudmFzRWxl
bWVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB2
aXNpdG9yLmFkZE9wYXF1ZVJvb3Qoc3RhdGljX2Nhc3Q8Q2FudmFzQmFzZSo+KCZ3cmFwcGVkKCkp
KTsKIH0KIAorREVGSU5FX1ZJU0lUX0FERElUSU9OQUxfQ0hJTERSRU4oSlNIVE1MQ2FudmFzRWxl
bWVudCk7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTSFRNTFRlbXBsYXRlRWxlbWVudEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MVGVtcGxhdGVFbGVtZW50Q3VzdG9tLmNw
cAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1M
VGVtcGxhdGVFbGVtZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAK
IC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCkBAIC0zNywxMCArMzgsMTMgQEAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKLXZvaWQgSlNIVE1M
VGVtcGxhdGVFbGVtZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9y
JiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNIVE1MVGVtcGxh
dGVFbGVtZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewog
ICAgIGlmIChhdXRvKiBjb250ZW50ID0gd3JhcHBlZCgpLmNvbnRlbnRJZkF2YWlsYWJsZSgpKQog
ICAgICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qocm9vdChjb250ZW50KSk7CiB9CiAKK0RFRklO
RV9WSVNJVF9BRERJVElPTkFMX0NISUxEUkVOKEpTSFRNTFRlbXBsYXRlRWxlbWVudCk7CisKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
SGlzdG9yeUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNIaXN0b3J5Q3VzdG9tLmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNIaXN0b3J5Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxOCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAyMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ0
LDkgKzQ0LDEyIEBAIEpTVmFsdWUgSlNIaXN0b3J5OjpzdGF0ZShKU0dsb2JhbE9iamVjdCYKICAg
ICB9KTsKIH0KIAotdm9pZCBKU0hpc3Rvcnk6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNIaXN0
b3J5Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHdy
YXBwZWQoKS5jYWNoZWRTdGF0ZUZvckdDKCkudmlzaXQodmlzaXRvcik7CiB9CiAKK0RFRklORV9W
SVNJVF9BRERJVElPTkFMX0NISUxEUkVOKEpTSGlzdG9yeSk7CisKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCQ3Vyc29yQ3VzdG9t
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQkN1cnNv
ckN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTSURCQ3Vyc29yQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01MCw3ICs1MCw4IEBAIEpT
Qzo6SlNWYWx1ZSBKU0lEQkN1cnNvcjo6cHJpbWFyeUtleShKU0MKICAgICB9KTsKIH0KIAotdm9p
ZCBKU0lEQkN1cnNvcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0
b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0lEQkN1cnNvcjo6dmlzaXRB
ZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBhdXRvJiBjdXJzb3Ig
PSB3cmFwcGVkKCk7CiAgICAgaWYgKGF1dG8qIHJlcXVlc3QgPSBjdXJzb3IucmVxdWVzdCgpKQpA
QCAtNTksNiArNjAsOCBAQCB2b2lkIEpTSURCQ3Vyc29yOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJl
CiAgICAgY3Vyc29yLnByaW1hcnlLZXlXcmFwcGVyKCkudmlzaXQodmlzaXRvcik7CiB9CiAKK0RF
RklORV9WSVNJVF9BRERJVElPTkFMX0NISUxEUkVOKEpTSURCQ3Vyc29yKTsKKwogSlNWYWx1ZSB0
b0pTTmV3bHlDcmVhdGVkKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0RPTUdsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBSZWY8SURCQ3Vyc29yPiYmIGN1cnNvcikKIHsKICAgICBpZiAoaXM8SURC
Q3Vyc29yV2l0aFZhbHVlPihjdXJzb3IpKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNJREJDdXJzb3JXaXRoVmFsdWVDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCQ3Vyc29yV2l0aFZhbHVlQ3VzdG9tLmNwcAkocmV2aXNp
b24gMjcyOTAyKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJDdXJzb3JXaXRo
VmFsdWVDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQzLDEyICs0MywxNSBAQCBKU0M6OkpTVmFs
dWUgSlNJREJDdXJzb3JXaXRoVmFsdWU6OnZhbHVlCiAgICAgfSk7CiB9CiAKLXZvaWQgSlNJREJD
dXJzb3JXaXRoVmFsdWU6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNp
dG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNJREJDdXJzb3JXaXRoVmFs
dWU6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNJ
REJDdXJzb3I6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKHZpc2l0b3IpOwogICAgIHdyYXBwZWQo
KS52YWx1ZVdyYXBwZXIoKS52aXNpdCh2aXNpdG9yKTsKIH0KIAorREVGSU5FX1ZJU0lUX0FERElU
SU9OQUxfQ0hJTERSRU4oSlNJREJDdXJzb3JXaXRoVmFsdWUpOworCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCSW5kZXhDdXN0b20uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCSW5kZXhDdXN0b20uY3BwCShyZXZpc2lv
biAyNzI5MDIpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQkluZGV4Q3VzdG9t
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC0zNCwxMSArMzQsMTQgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKLXZvaWQgSlNJREJJbmRleDo6dmlzaXRBZGRpdGlvbmFs
Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
Pgordm9pZCBKU0lEQkluZGV4Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNp
dG9yKQogewogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChzdGF0aWNfY2FzdDxJREJJbmRleCY+
KHdyYXBwZWQoKSkub2JqZWN0U3RvcmVBc09wYXF1ZVJvb3QoKSk7CiB9CiAKK0RFRklORV9WSVNJ
VF9BRERJVElPTkFMX0NISUxEUkVOKEpTSURCSW5kZXgpOworCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCT2JqZWN0U3RvcmVDdXN0b20uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCT2JqZWN0U3RvcmVDdXN0b20uY3Bw
CShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQk9i
amVjdFN0b3JlQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAg
KiBDb3B5cmlnaHQgKEMpIDIwMTIgTWljaGFlbCBQcnVldHQgPG1pY2hhZWxANjhrLm9yZz4KKyAq
IENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCkBAIC0zNiwxMSArMzcsMTQgQEAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKLXZvaWQgSlNJREJPYmplY3RT
dG9yZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1w
bGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0lEQk9iamVjdFN0b3JlOjp2aXNpdEFkZGl0
aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHN0YXRpY19jYXN0PElEQk9i
amVjdFN0b3JlJj4od3JhcHBlZCgpKS52aXNpdFJlZmVyZW5jZWRJbmRleGVzKHZpc2l0b3IpOwog
fQogCi19CitERUZJTkVfVklTSVRfQURESVRJT05BTF9DSElMRFJFTihKU0lEQk9iamVjdFN0b3Jl
KTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTSURCUmVxdWVzdEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJSZXF1ZXN0Q3VzdG9tLmNwcAkocmV2aXNpb24g
MjcyOTAyKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJSZXF1ZXN0Q3VzdG9t
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE5LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC04OSwxMiArODksMTYgQEAgSlNDOjpKU1ZhbHVlIEpTSURCUmVx
dWVzdDo6cmVzdWx0KEpTQzo6SgogICAgIH0pOwogfQogCi12b2lkIEpTSURCUmVxdWVzdDo6dmlz
aXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBl
bmFtZSBWaXNpdG9yPgordm9pZCBKU0lEQlJlcXVlc3Q6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVu
KFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0byYgcmVxdWVzdCA9IHdyYXBwZWQoKTsKICAg
ICByZXF1ZXN0LnJlc3VsdFdyYXBwZXIoKS52aXNpdCh2aXNpdG9yKTsKICAgICByZXF1ZXN0LmN1
cnNvcldyYXBwZXIoKS52aXNpdCh2aXNpdG9yKTsKIH0KIAotfQorREVGSU5FX1ZJU0lUX0FERElU
SU9OQUxfQ0hJTERSRU4oSlNJREJSZXF1ZXN0KTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
CiAjZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0lEQlRyYW5zYWN0aW9uQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQlRyYW5zYWN0aW9uQ3VzdG9tLmNwcAkocmV2
aXNpb24gMjcyOTAyKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJUcmFuc2Fj
dGlvbkN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzQsMTEgKzM0LDE0IEBACiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCi12b2lkIEpTSURCVHJhbnNhY3Rpb246
OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8
dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNJREJUcmFuc2FjdGlvbjo6dmlzaXRBZGRpdGlvbmFs
Q2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBzdGF0aWNfY2FzdDxJREJUcmFuc2Fj
dGlvbiY+KHdyYXBwZWQoKSkudmlzaXRSZWZlcmVuY2VkT2JqZWN0U3RvcmVzKHZpc2l0b3IpOwog
fQogCi19CitERUZJTkVfVklTSVRfQURESVRJT05BTF9DSElMRFJFTihKU0lEQlRyYW5zYWN0aW9u
KTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTSW50ZXJzZWN0aW9uT2JzZXJ2ZXJDdXN0b20uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW50ZXJzZWN0aW9uT2JzZXJ2ZXJD
dXN0b20uY3BwCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0ludGVyc2VjdGlvbk9ic2VydmVyQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMjAgSWdhbGlhIFMuTC4KKyAqIENvcHly
aWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMwLDEwICszMSwxMyBAQAogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLXZvaWQgSlNJbnRlcnNlY3Rpb25PYnNlcnZlcjo6dmlzaXRBZGRpdGlvbmFsQ2hp
bGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0
b3I+Cit2b2lkIEpTSW50ZXJzZWN0aW9uT2JzZXJ2ZXI6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVu
KFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgaWYgKGF1dG8qIGNhbGxiYWNrID0gd3JhcHBlZCgp
LmNhbGxiYWNrQ29uY3VycmVudGx5KCkpCiAgICAgICAgIGNhbGxiYWNrLT52aXNpdEpTRnVuY3Rp
b24odmlzaXRvcik7CiB9CiAKLX0KK0RFRklORV9WSVNJVF9BRERJVElPTkFMX0NISUxEUkVOKEpT
SW50ZXJzZWN0aW9uT2JzZXJ2ZXIpOworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0ludGVyc2VjdGlvbk9ic2VydmVyRW50cnlDdXN0
b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW50ZXJz
ZWN0aW9uT2JzZXJ2ZXJFbnRyeUN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW50ZXJzZWN0aW9uT2JzZXJ2ZXJFbnRyeUN1c3RvbS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAy
MDE4IEdvb2dsZSBMTEMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0zMCw3ICszMSw4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9p
ZCBKU0ludGVyc2VjdGlvbk9ic2VydmVyRW50cnk6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpT
Qzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9p
ZCBKU0ludGVyc2VjdGlvbk9ic2VydmVyRW50cnk6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZp
c2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHJvb3Qod3JhcHBl
ZCgpLnRhcmdldCgpKSk7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHdyYXBwZWQoKS5ib3Vu
ZGluZ0NsaWVudFJlY3QoKSk7CkBAIC0zOCw0ICs0MCw2IEBAIHZvaWQgSlNJbnRlcnNlY3Rpb25P
YnNlcnZlckVudHJ5Ojp2aXNpdEEKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qod3JhcHBlZCgp
LnJvb3RCb3VuZHMoKSk7CiB9CiAKLX0KK0RFRklORV9WSVNJVF9BRERJVElPTkFMX0NISUxEUkVO
KEpTSW50ZXJzZWN0aW9uT2JzZXJ2ZXJFbnRyeSk7CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWVzc2FnZUNoYW5uZWxDdXN0b20u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWVzc2FnZUNo
YW5uZWxDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU01lc3NhZ2VDaGFubmVsQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwg
UmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMjEgQXBwbGUgSW5jLiBB
bGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0z
Myw3ICszMyw4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBKU01lc3NhZ2VDaGFu
bmVsOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQor
dGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNNZXNzYWdlQ2hhbm5lbDo6dmlzaXRB
ZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBpZiAoTWVzc2FnZVBv
cnQqIHBvcnQgPSB3cmFwcGVkKCkucG9ydDEoKSkKICAgICAgICAgdmlzaXRvci5hZGRPcGFxdWVS
b290KHBvcnQpOwpAQCAtNDIsNiArNDMsOCBAQCB2b2lkIEpTTWVzc2FnZUNoYW5uZWw6OnZpc2l0
QWRkaXRpb25hbENoCiAgICAgICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChwb3J0KTsKIH0KIAor
REVGSU5FX1ZJU0lUX0FERElUSU9OQUxfQ0hJTERSRU4oSlNNZXNzYWdlQ2hhbm5lbCk7CisKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShDSEFOTkVMX01FU1NBR0lO
RykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWVzc2FnZUV2ZW50Q3VzdG9t
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01lc3NhZ2VF
dmVudEN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTTWVzc2FnZUV2ZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsx
LDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOS0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKQEAgLTcw
LDcgKzcwLDggQEAgSlNDOjpKU1ZhbHVlIEpTTWVzc2FnZUV2ZW50OjpkYXRhKEpTQzo6SgogICAg
IH0pOwogfQogCi12b2lkIEpTTWVzc2FnZUV2ZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihK
U0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3Zv
aWQgSlNNZXNzYWdlRXZlbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0
b3IpCiB7CiAgICAgV1RGOjpzd2l0Y2hPbih3cmFwcGVkKCkuZGF0YSgpLCBbJnZpc2l0b3JdIChj
b25zdCBKU1ZhbHVlSW5XcmFwcGVkT2JqZWN0JiBkYXRhKSB7CiAgICAgICAgIGRhdGEudmlzaXQo
dmlzaXRvcik7CkBAIC04NCw0ICs4NSw2IEBAIHZvaWQgSlNNZXNzYWdlRXZlbnQ6OnZpc2l0QWRk
aXRpb25hbENoaWwKICAgICB3cmFwcGVkKCkuY2FjaGVkUG9ydHMoKS52aXNpdCh2aXNpdG9yKTsK
IH0KIAorREVGSU5FX1ZJU0lUX0FERElUSU9OQUxfQ0hJTERSRU4oSlNNZXNzYWdlRXZlbnQpOwor
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU01lc3NhZ2VQb3J0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU01lc3NhZ2VQb3J0Q3VzdG9tLmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNZXNzYWdlUG9ydEN1c3RvbS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMDks
IDIwMTYgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDA4LTIwMjEgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICogQ29weXJpZ2h0IChD
KSAyMDExIEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CkBAIC0zMSwxMSArMzEsMTQgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFj
ZSBKU0M7CiAKLXZvaWQgSlNNZXNzYWdlUG9ydDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xv
dFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU01l
c3NhZ2VQb3J0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewog
ICAgIC8vIElmIHdlIGhhdmUgYSBsb2NhbGx5IGVudGFuZ2xlZCBwb3J0LCB3ZSBjYW4gZGlyZWN0
bHkgbWFyayBpdCBhcyByZWFjaGFibGUuIFBvcnRzIHRoYXQgYXJlIHJlbW90ZWx5IGVudGFuZ2xl
ZCBhcmUgbWFya2VkIGluLXVzZSBieSBtYXJrQWN0aXZlT2JqZWN0c0ZvckNvbnRleHQoKS4KICAg
ICBpZiAoTWVzc2FnZVBvcnQqIHBvcnQgPSB3cmFwcGVkKCkubG9jYWxseUVudGFuZ2xlZFBvcnQo
KSkKICAgICAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHBvcnQpOwogfQogCitERUZJTkVfVklT
SVRfQURESVRJT05BTF9DSElMRFJFTihKU01lc3NhZ2VQb3J0KTsKKwogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNdXRhdGlvbk9ic2Vy
dmVyQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U011dGF0aW9uT2JzZXJ2ZXJDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU011dGF0aW9uT2JzZXJ2ZXJDdXN0b20uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIxIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKQEAgLTM5LDEyICszOSwxNSBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogdXNpbmcgbmFt
ZXNwYWNlIEpTQzsKIAotdm9pZCBKU011dGF0aW9uT2JzZXJ2ZXI6OnZpc2l0QWRkaXRpb25hbENo
aWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNp
dG9yPgordm9pZCBKU011dGF0aW9uT2JzZXJ2ZXI6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZp
c2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgd3JhcHBlZCgpLmNhbGxiYWNrKCkudmlzaXRKU0Z1bmN0
aW9uKHZpc2l0b3IpOwogfQogCi1ib29sIEpTTXV0YXRpb25PYnNlcnZlck93bmVyOjppc1JlYWNo
YWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9p
ZCosIFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKipyZWFzb24pCitERUZJTkVfVklT
SVRfQURESVRJT05BTF9DSElMRFJFTihKU011dGF0aW9uT2JzZXJ2ZXIpOworCitib29sIEpTTXV0
YXRpb25PYnNlcnZlck93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRs
ZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0
b3IsIGNvbnN0IGNoYXIqKnJlYXNvbikKIHsKICAgICBmb3IgKGF1dG8qIG5vZGUgOiBqc0Nhc3Q8
SlNNdXRhdGlvbk9ic2VydmVyKj4oaGFuZGxlLnNsb3QoKS0+YXNDZWxsKCkpLT53cmFwcGVkKCku
b2JzZXJ2ZWROb2RlcygpKSB7CiAgICAgICAgIGlmICh2aXNpdG9yLmNvbnRhaW5zT3BhcXVlUm9v
dChyb290KG5vZGUpKSkgewpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNdXRh
dGlvblJlY29yZEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNNdXRhdGlvblJlY29yZEN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjkwMikKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTXV0YXRpb25SZWNvcmRDdXN0b20uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTMwLDkgKzMwLDEyIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBK
U011dGF0aW9uUmVjb3JkOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9y
JiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNNdXRhdGlvblJl
Y29yZDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB3
cmFwcGVkKCkudmlzaXROb2Rlc0NvbmN1cnJlbnRseSh2aXNpdG9yKTsKIH0KLSAgICAKKworREVG
SU5FX1ZJU0lUX0FERElUSU9OQUxfQ0hJTERSRU4oSlNNdXRhdGlvblJlY29yZCk7CisKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTmF2
aWdhdG9yQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU05hdmlnYXRvckN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTTmF2aWdhdG9yQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMiwx
MSArMzIsMTQgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIEpTTmF2aWdhdG9yOjp2
aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxh
dGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNOYXZpZ2F0b3I6OnZpc2l0QWRkaXRpb25hbENo
aWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHN0
YXRpY19jYXN0PE5hdmlnYXRvckJhc2UqPigmd3JhcHBlZCgpKSk7CiB9CiAKK0RFRklORV9WSVNJ
VF9BRERJVElPTkFMX0NISUxEUkVOKEpTTmF2aWdhdG9yKTsKKwogI2lmIEVOQUJMRShNRURJQV9T
VFJFQU0pCiBKU0M6OkpTVmFsdWUgSlNOYXZpZ2F0b3I6OmdldFVzZXJNZWRpYShKU0M6OkpTR2xv
YmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OkNhbGxGcmFtZSYgY2FsbEZyYW1l
KQogewpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlQ3VzdG9tLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVDdXN0b20uY3Bw
CShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVD
dXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAwNywgMjAwOS0yMDEwLCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNzQsNyArNzQsNyBAQCB1
c2luZyBuYW1lc3BhY2UgSlNDOwogCiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCi1zdGF0
aWMgaW5saW5lIGJvb2wgaXNSZWFjaGFibGVGcm9tRE9NKE5vZGUqIG5vZGUsIFNsb3RWaXNpdG9y
JiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQorc3RhdGljIGlubGluZSBib29sIGlzUmVh
Y2hhYmxlRnJvbURPTShOb2RlKiBub2RlLCBBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBj
b25zdCBjaGFyKiogcmVhc29uKQogewogICAgIGlmICghbm9kZS0+aXNDb25uZWN0ZWQoKSkgewog
ICAgICAgICBpZiAoaXM8RWxlbWVudD4oKm5vZGUpKSB7CkBAIC0xMjMsNyArMTIzLDcgQEAgc3Rh
dGljIGlubGluZSBib29sIGlzUmVhY2hhYmxlRnJvbURPTShObwogICAgIHJldHVybiB2aXNpdG9y
LmNvbnRhaW5zT3BhcXVlUm9vdChyb290KG5vZGUpKTsKIH0KIAotYm9vbCBKU05vZGVPd25lcjo6
aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5k
bGUsIHZvaWQqLCBTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikKK2Jv
b2wgSlNOb2RlT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpT
Qzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvciwg
Y29uc3QgY2hhcioqIHJlYXNvbikKIHsKICAgICBKU05vZGUqIGpzTm9kZSA9IGpzQ2FzdDxKU05v
ZGUqPihoYW5kbGUuc2xvdCgpLT5hc0NlbGwoKSk7CiAgICAgcmV0dXJuIGlzUmVhY2hhYmxlRnJv
bURPTSgmanNOb2RlLT53cmFwcGVkKCksIHZpc2l0b3IsIHJlYXNvbik7CkBAIC0xMzYsMTEgKzEz
NiwxNCBAQCBKU1Njb3BlKiBKU05vZGU6OnB1c2hFdmVudEhhbmRsZXJTY29wZShKCiAgICAgcmV0
dXJuIG5vZGU7CiB9CiAKLXZvaWQgSlNOb2RlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90
VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTTm9k
ZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB2aXNp
dG9yLmFkZE9wYXF1ZVJvb3Qocm9vdCh3cmFwcGVkKCkpKTsKIH0KIAorREVGSU5FX1ZJU0lUX0FE
RElUSU9OQUxfQ0hJTERSRU4oSlNOb2RlKTsKKwogc3RhdGljIEFMV0FZU19JTkxJTkUgSlNWYWx1
ZSBjcmVhdGVXcmFwcGVySW5saW5lKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0
LCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWY8Tm9kZT4mJiBub2RlKQogewog
ICAgIEFTU0VSVCghZ2V0Q2FjaGVkV3JhcHBlcihnbG9iYWxPYmplY3QtPndvcmxkKCksIG5vZGUp
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUl0ZXJhdG9yQ3VzdG9t
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVJdGVy
YXRvckN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTTm9kZUl0ZXJhdG9yQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yNSwxMCArMjUs
MTMgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIEpTTm9kZUl0ZXJhdG9yOjp2aXNp
dEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8
dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNOb2RlSXRlcmF0b3I6OnZpc2l0QWRkaXRpb25hbENo
aWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgaWYgKE5vZGVGaWx0ZXIqIGZpbHRlciA9
IHdyYXBwZWQoKS5maWx0ZXIoKSkKICAgICAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KGZpbHRl
cik7CiB9CiAKLX0KK0RFRklORV9WSVNJVF9BRERJVElPTkFMX0NISUxEUkVOKEpTTm9kZUl0ZXJh
dG9yKTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNOb2RlTGlzdEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNOb2RlTGlzdEN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjkwMikKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUxpc3RDdXN0b20uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNy0yMDE5IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMzcsNyArMzcsNyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogdXNpbmcgbmFt
ZXNwYWNlIEpTQzsKIAotYm9vbCBKU05vZGVMaXN0T3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1
ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgU2xvdFZpc2l0
b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCitib29sIEpTTm9kZUxpc3RPd25lcjo6
aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5k
bGUsIHZvaWQqLCBBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVh
c29uKQogewogICAgIEpTTm9kZUxpc3QqIGpzTm9kZUxpc3QgPSBqc0Nhc3Q8SlNOb2RlTGlzdCo+
KGhhbmRsZS5zbG90KCktPmFzQ2VsbCgpKTsKICAgICBpZiAoIWpzTm9kZUxpc3QtPmhhc0N1c3Rv
bVByb3BlcnRpZXMoanNOb2RlTGlzdC0+dm0oKSkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU09mZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyREN1c3RvbS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNPZmZzY3JlZW5DYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkRDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU09mZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyREN1
c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYwpAQCAtMzEsNyArMzEsNyBAQCBpbmxpbmUgdm9pZCogcm9vdChPZmZzY3JlZW5DYW52
YXMqIGNhbnZhCiAgICAgcmV0dXJuIGNhbnZhczsKIH0KIAotYm9vbCBKU09mZnNjcmVlbkNhbnZh
c1JlbmRlcmluZ0NvbnRleHQyRE93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6
OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIFNsb3RWaXNpdG9yJiB2aXNpdG9y
LCBjb25zdCBjaGFyKiogcmVhc29uKQorYm9vbCBKU09mZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyRE93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6
OlVua25vd24+IGhhbmRsZSwgdm9pZCosIEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNv
bnN0IGNoYXIqKiByZWFzb24pCiB7CiAgICAgaWYgKFVOTElLRUxZKHJlYXNvbikpCiAgICAgICAg
ICpyZWFzb24gPSAiQ2FudmFzIGlzIG9wYXF1ZSByb290IjsKQEAgLTQxLDExICs0MSwxNCBAQCBi
b29sIEpTT2Zmc2NyZWVuQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJECiAgICAgcmV0dXJuIHZpc2l0
b3IuY29udGFpbnNPcGFxdWVSb290KHJvb3QpOwogfQogCi12b2lkIEpTT2Zmc2NyZWVuQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYg
dmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTT2Zmc2NyZWVuQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2
aXNpdG9yKQogewogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChyb290KCZ3cmFwcGVkKCkuY2Fu
dmFzKCkpKTsKIH0KIAorREVGSU5FX1ZJU0lUX0FERElUSU9OQUxfQ0hJTERSRU4oSlNPZmZzY3Jl
ZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQpOworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAK
ICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNQYWludFJlbmRlcmlu
Z0NvbnRleHQyREN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNQYWludFJlbmRlcmluZ0NvbnRleHQyREN1c3RvbS5jcHAJKHJldmlzaW9uIDI3Mjkw
MikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUGFpbnRSZW5kZXJpbmdDb250ZXh0
MkRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTgtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM2LDcgKzM2LDcgQEAgaW5saW5lIHZvaWQqIHJv
b3QoQ3VzdG9tUGFpbnRDYW52YXMqIGNhbgogICAgIHJldHVybiBjYW52YXM7CiB9CiAKLWJvb2wg
SlNQYWludFJlbmRlcmluZ0NvbnRleHQyRE93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290
cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIFNsb3RWaXNpdG9yJiB2
aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQorYm9vbCBKU1BhaW50UmVuZGVyaW5nQ29udGV4
dDJET3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5r
bm93bj4gaGFuZGxlLCB2b2lkKiwgQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3Qg
Y2hhcioqIHJlYXNvbikKIHsKICAgICBpZiAoVU5MSUtFTFkocmVhc29uKSkKICAgICAgICAgKnJl
YXNvbiA9ICJDYW52YXMgaXMgb3BhcXVlIHJvb3QiOwpAQCAtNDYsMTEgKzQ2LDE0IEBAIGJvb2wg
SlNQYWludFJlbmRlcmluZ0NvbnRleHQyRE93bmVyOjppc1IKICAgICByZXR1cm4gdmlzaXRvci5j
b250YWluc09wYXF1ZVJvb3Qocm9vdCk7CiB9CiAKLXZvaWQgSlNQYWludFJlbmRlcmluZ0NvbnRl
eHQyRDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1w
bGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1BhaW50UmVuZGVyaW5nQ29udGV4dDJEOjp2
aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHZpc2l0b3Iu
YWRkT3BhcXVlUm9vdChyb290KCZ3cmFwcGVkKCkuY2FudmFzKCkpKTsKIH0KIAorREVGSU5FX1ZJ
U0lUX0FERElUSU9OQUxfQ0hJTERSRU4oSlNQYWludFJlbmRlcmluZ0NvbnRleHQyRCk7CisKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKICNlbmRpZgogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU1BhaW50V29ya2xldEdsb2JhbFNjb3BlQ3VzdG9tLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1BhaW50V29ya2xldEdsb2JhbFNjb3BlQ3Vz
dG9tLmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNQYWludFdvcmtsZXRHbG9iYWxTY29wZUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOC0yMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzEsNyAr
MzEsOCBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAotdm9p
ZCBKU1BhaW50V29ya2xldEdsb2JhbFNjb3BlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6
OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQg
SlNQYWludFdvcmtsZXRHbG9iYWxTY29wZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRv
ciYgdmlzaXRvcikKIHsKICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKHdyYXBwZWQoKS5wYWlu
dERlZmluaXRpb25Mb2NrKCkpOwogICAgIGZvciAoYXV0byYgcmVnaXN0ZXJlZCA6IHdyYXBwZWQo
KS5wYWludERlZmluaXRpb25NYXAoKS52YWx1ZXMoKSkgewpAQCAtNDAsNSArNDEsOCBAQCB2b2lk
IEpTUGFpbnRXb3JrbGV0R2xvYmFsU2NvcGU6OnZpc2l0QWRkCiAgICAgfQogfQogCi19CitERUZJ
TkVfVklTSVRfQURESVRJT05BTF9DSElMRFJFTihKU1BhaW50V29ya2xldEdsb2JhbFNjb3BlKTsK
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTUGF5bWVudE1ldGhvZENoYW5nZUV2ZW50Q3VzdG9tLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1BheW1lbnRNZXRob2RDaGFuZ2VF
dmVudEN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTUGF5bWVudE1ldGhvZENoYW5nZUV2ZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC00MSw3ICs0MSw4IEBAIEpTQzo6SlNWYWx1ZSBKU1BheW1lbnRNZXRob2RDaGFuZ2VFdmVudDoK
ICAgICB9KTsKIH0KIAotdm9pZCBKU1BheW1lbnRNZXRob2RDaGFuZ2VFdmVudDo6dmlzaXRBZGRp
dGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVu
YW1lIFZpc2l0b3I+Cit2b2lkIEpTUGF5bWVudE1ldGhvZENoYW5nZUV2ZW50Ojp2aXNpdEFkZGl0
aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFdURjo6c3dpdGNoT24od3Jh
cHBlZCgpLm1ldGhvZERldGFpbHMoKSwgWyZ2aXNpdG9yXShjb25zdCBKU1ZhbHVlSW5XcmFwcGVk
T2JqZWN0JiBtZXRob2REZXRhaWxzKSB7CiAgICAgICAgIG1ldGhvZERldGFpbHMudmlzaXQodmlz
aXRvcik7CkBAIC01MSw2ICs1Miw4IEBAIHZvaWQgSlNQYXltZW50TWV0aG9kQ2hhbmdlRXZlbnQ6
OnZpc2l0QWQKICAgICB3cmFwcGVkKCkuY2FjaGVkTWV0aG9kRGV0YWlscygpLnZpc2l0KHZpc2l0
b3IpOwogfQogCitERUZJTkVfVklTSVRfQURESVRJT05BTF9DSElMRFJFTihKU1BheW1lbnRNZXRo
b2RDaGFuZ2VFdmVudCk7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVO
QUJMRShQQVlNRU5UX1JFUVVFU1QpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U1BheW1lbnRSZXNwb25zZUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNQYXltZW50UmVzcG9uc2VDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI5MDIp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1BheW1lbnRSZXNwb25zZUN1c3RvbS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
OC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMzcsMTEgKzM3LDE0IEBAIEpTQzo6SlNWYWx1ZSBKU1BheW1lbnRS
ZXNwb25zZTo6ZGV0YWlscygKICAgICB9KTsKIH0KIAotdm9pZCBKU1BheW1lbnRSZXNwb25zZTo6
dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBs
YXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTUGF5bWVudFJlc3BvbnNlOjp2aXNpdEFkZGl0
aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHdyYXBwZWQoKS5jYWNoZWRE
ZXRhaWxzKCkudmlzaXQodmlzaXRvcik7CiB9CiAKK0RFRklORV9WSVNJVF9BRERJVElPTkFMX0NI
SUxEUkVOKEpTUGF5bWVudFJlc3BvbnNlKTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAj
ZW5kaWYgLy8gRU5BQkxFKFBBWU1FTlRfUkVRVUVTVCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTUGVyZm9ybWFuY2VPYnNlcnZlckN1c3RvbS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNQZXJmb3JtYW5jZU9ic2VydmVyQ3VzdG9tLmNw
cAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNQZXJm
b3JtYW5jZU9ic2VydmVyQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMSwxMiArMzEsMTUgQEAK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIEpTUGVyZm9ybWFuY2VPYnNlcnZlcjo6dmlz
aXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRl
PHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTUGVyZm9ybWFuY2VPYnNlcnZlcjo6dmlzaXRBZGRp
dGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB3cmFwcGVkKCkuY2FsbGJh
Y2soKS52aXNpdEpTRnVuY3Rpb24odmlzaXRvcik7CiB9CiAKLWJvb2wgSlNQZXJmb3JtYW5jZU9i
c2VydmVyT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6
VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgSlNDOjpTbG90VmlzaXRvciYsIGNvbnN0IGNoYXIqKiBy
ZWFzb24pCitERUZJTkVfVklTSVRfQURESVRJT05BTF9DSElMRFJFTihKU1BlcmZvcm1hbmNlT2Jz
ZXJ2ZXIpOworCitib29sIEpTUGVyZm9ybWFuY2VPYnNlcnZlck93bmVyOjppc1JlYWNoYWJsZUZy
b21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIEpT
Qzo6QWJzdHJhY3RTbG90VmlzaXRvciYsIGNvbnN0IGNoYXIqKiByZWFzb24pCiB7CiAgICAgaWYg
KFVOTElLRUxZKHJlYXNvbikpCiAgICAgICAgICpyZWFzb24gPSAiUmVnaXN0ZXJlZCBQZXJmb3Jt
YW5jZU9ic2VydmVyIGNhbGxiYWNrIjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTUG9wU3RhdGVFdmVudEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNQb3BTdGF0ZUV2ZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gMjcyOTAyKQor
KysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNQb3BTdGF0ZUV2ZW50Q3VzdG9tLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTEg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMgYXJlCkBAIC05MCw5ICs5MSwxMiBAQCBKU1ZhbHVlIEpTUG9wU3RhdGVFdmVudDo6c3Rh
dGUoSlNHbG9iYWxPCiAgICAgcmV0dXJuIGNhY2hlU3RhdGUocmVzdWx0KTsKIH0KIAotdm9pZCBK
U1BvcFN0YXRlRXZlbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3Im
IHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1BvcFN0YXRlRXZl
bnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgd3Jh
cHBlZCgpLnN0YXRlKCkudmlzaXQodmlzaXRvcik7CiB9CiAKK0RFRklORV9WSVNJVF9BRERJVElP
TkFMX0NISUxEUkVOKEpTUG9wU3RhdGVFdmVudCk7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUHJvbWlzZVJlamVjdGlvbkV2ZW50
Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1By
b21pc2VSZWplY3Rpb25FdmVudEN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUHJvbWlzZVJlamVjdGlvbkV2ZW50Q3VzdG9tLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTgg
WXVzdWtlIFN1enVraSA8eXVzdWtlc3V6dWtpQHNsb3dzdGFydC5vcmc+LgorICogQ29weXJpZ2h0
IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMzIsOSArMzMsMTIgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCi12b2lkIEpTUHJvbWlzZVJlamVjdGlvbkV2ZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJl
bihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4K
K3ZvaWQgSlNQcm9taXNlUmVqZWN0aW9uRXZlbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZp
c2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgd3JhcHBlZCgpLnJlYXNvbigpLnZpc2l0KHZpc2l0b3Ip
OwogfQogCitERUZJTkVfVklTSVRfQURESVRJT05BTF9DSElMRFJFTihKU1Byb21pc2VSZWplY3Rp
b25FdmVudCk7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTUmVzaXplT2JzZXJ2ZXJDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUmVzaXplT2JzZXJ2ZXJDdXN0b20uY3BwCShyZXZp
c2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1Jlc2l6ZU9ic2Vy
dmVyQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5
cmlnaHQgKEMpIDIwMjAgSWdhbGlhIFMuTC4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTMwLDExICszMSwxNCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgSlNSZXNp
emVPYnNlcnZlcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlz
aXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTUmVzaXplT2JzZXJ2ZXI6
OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgUmVzaXpl
T2JzZXJ2ZXJDYWxsYmFjayogY2FsbGJhY2sgPSB3cmFwcGVkKCkuY2FsbGJhY2tDb25jdXJyZW50
bHkoKTsKICAgICBpZiAoY2FsbGJhY2spCiAgICAgICAgIGNhbGxiYWNrLT52aXNpdEpTRnVuY3Rp
b24odmlzaXRvcik7CiB9CiAKLX0KK0RFRklORV9WSVNJVF9BRERJVElPTkFMX0NISUxEUkVOKEpT
UmVzaXplT2JzZXJ2ZXIpOworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU1Jlc2l6ZU9ic2VydmVyRW50cnlDdXN0b20uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUmVzaXplT2JzZXJ2ZXJFbnRy
eUN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTUmVzaXplT2JzZXJ2ZXJFbnRyeUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDE5IElnYWxpYSBTLkwuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMCwxMCArMzEsMTMgQEAKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi12b2lkIEpTUmVzaXplT2JzZXJ2ZXJFbnRyeTo6dmlzaXRBZGRpdGlvbmFsQ2hp
bGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0
b3I+Cit2b2lkIEpTUmVzaXplT2JzZXJ2ZXJFbnRyeTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4o
VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qocm9vdCh3cmFw
cGVkKCkudGFyZ2V0KCkpKTsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qod3JhcHBlZCgpLmNv
bnRlbnRSZWN0KCkpOwogfQogCi19CitERUZJTkVfVklTSVRfQURESVRJT05BTF9DSElMRFJFTihK
U1Jlc2l6ZU9ic2VydmVyRW50cnkpOworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NWR1ZpZXdTcGVjQ3VzdG9tLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NWR1ZpZXdTcGVjQ3VzdG9tLmNw
cAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNTVkdW
aWV3U3BlY0N1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxOC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzAsMTAgKzMwLDEzIEBACiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotdm9pZCBKU1NWR1ZpZXdTcGVjOjp2aXNpdEFkZGl0aW9uYWxDaGls
ZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRv
cj4KK3ZvaWQgSlNTVkdWaWV3U3BlYzo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYg
dmlzaXRvcikKIHsKICAgICBBU1NFUlQod3JhcHBlZCgpLmNvbnRleHRFbGVtZW50Q29uY3VycmVu
dGx5KCkuZ2V0KCkpOwogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChyb290KHdyYXBwZWQoKS5j
b250ZXh0RWxlbWVudENvbmN1cnJlbnRseSgpLmdldCgpKSk7CiB9CiAKLX0KK0RFRklORV9WSVNJ
VF9BRERJVElPTkFMX0NISUxEUkVOKEpTU1ZHVmlld1NwZWMpOworCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NlcnZpY2VXb3JrZXJH
bG9iYWxTY29wZUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNTZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGVDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI5
MDIpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NlcnZpY2VXb3JrZXJHbG9iYWxT
Y29wZUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzQsMTIgKzM0LDE1IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAotdm9pZCBKU1NlcnZpY2VXb3JrZXJH
bG9iYWxTY29wZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3Ip
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1NlcnZpY2VXb3JrZXJHbG9iYWxT
Y29wZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB2
aXNpdG9yLmFkZE9wYXF1ZVJvb3QoJndyYXBwZWQoKS5jbGllbnRzKCkpOwogICAgIHZpc2l0b3Iu
YWRkT3BhcXVlUm9vdCgmd3JhcHBlZCgpLnJlZ2lzdHJhdGlvbigpKTsKIH0KIAorREVGSU5FX1ZJ
U0lUX0FERElUSU9OQUxfQ0hJTERSRU4oSlNTZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGUpOworCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNTdGF0aWNSYW5nZUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNTdGF0aWNSYW5nZUN1c3RvbS5jcHAJKHJldmlzaW9uIDI3Mjkw
MikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU3RhdGljUmFuZ2VDdXN0b20uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zMCw5ICszMCwxMiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLXZvaWQgSlNTdGF0aWNSYW5nZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90
VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTU3Rh
dGljUmFuZ2U6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAg
ICAgd3JhcHBlZCgpLnZpc2l0Tm9kZXNDb25jdXJyZW50bHkodmlzaXRvcik7CiB9CiAKK0RFRklO
RV9WSVNJVF9BRERJVElPTkFMX0NISUxEUkVOKEpTU3RhdGljUmFuZ2UpOworCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1N0eWxlU2hl
ZXRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
U3R5bGVTaGVldEN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTU3R5bGVTaGVldEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4LCAyMDA5IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDIxIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMzAsMTEgKzMwLDE0IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBKU1N0
eWxlU2hlZXQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0
b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1N0eWxlU2hlZXQ6OnZpc2l0
QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgdmlzaXRvci5hZGRP
cGFxdWVSb290KHJvb3QoJndyYXBwZWQoKSkpOwogfQogCitERUZJTkVfVklTSVRfQURESVRJT05B
TF9DSElMRFJFTihKU1N0eWxlU2hlZXQpOworCiBKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRl
ZChKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
UmVmPFN0eWxlU2hlZXQ+JiYgc3R5bGVTaGVldCkKIHsKICAgICBpZiAoc3R5bGVTaGVldC0+aXND
U1NTdHlsZVNoZWV0KCkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1RleHRU
cmFja0N1ZUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNUZXh0VHJhY2tDdWVDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU1RleHRUcmFja0N1ZUN1c3RvbS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDIxIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtMzgsNyArMzgsNyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogdXNpbmcgbmFtZXNwYWNlIEpT
QzsKIAotYm9vbCBKU1RleHRUcmFja0N1ZU93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290
cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIFNsb3RWaXNpdG9yJiB2
aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQorYm9vbCBKU1RleHRUcmFja0N1ZU93bmVyOjpp
c1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRs
ZSwgdm9pZCosIEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFz
b24pCiB7CiAgICAgSlNUZXh0VHJhY2tDdWUqIGpzVGV4dFRyYWNrQ3VlID0ganNDYXN0PEpTVGV4
dFRyYWNrQ3VlKj4oaGFuZGxlLnNsb3QoKS0+YXNDZWxsKCkpOwogICAgIFRleHRUcmFja0N1ZSYg
dGV4dFRyYWNrQ3VlID0ganNUZXh0VHJhY2tDdWUtPndyYXBwZWQoKTsKQEAgLTgyLDEyICs4Miwx
NSBAQCBKU1ZhbHVlIHRvSlMoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iCiAgICAgcmV0dXJu
IHdyYXAobGV4aWNhbEdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LCBjdWUpOwogfQogCi12b2lk
IEpTVGV4dFRyYWNrQ3VlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlz
aXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTVGV4dFRyYWNrQ3VlOjp2
aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGlmIChUZXh0
VHJhY2sqIHRleHRUcmFjayA9IHdyYXBwZWQoKS50cmFjaygpKQogICAgICAgICB2aXNpdG9yLmFk
ZE9wYXF1ZVJvb3Qocm9vdCh0ZXh0VHJhY2spKTsKIH0KIAorREVGSU5FX1ZJU0lUX0FERElUSU9O
QUxfQ0hJTERSRU4oSlNUZXh0VHJhY2tDdWUpOworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAK
ICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNUZXh0VHJhY2tDdXN0
b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVGV4dFRy
YWNrQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNUZXh0VHJhY2tDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM2LDExICszNiwxNCBA
QAogbmFtZXNwYWNlIFdlYkNvcmUgewogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAotdm9pZCBKU1Rl
eHRUcmFjazo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0
ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1RleHRUcmFjazo6dmlzaXRBZGRpdGlv
bmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJv
b3Qocm9vdCgmd3JhcHBlZCgpKSk7CiB9CiAKK0RFRklORV9WSVNJVF9BRERJVElPTkFMX0NISUxE
UkVOKEpTVGV4dFRyYWNrKTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVGV4dFRyYWNrTGlzdEN1c3RvbS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNUZXh0VHJhY2tMaXN0
Q3VzdG9tLmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNUZXh0VHJhY2tMaXN0Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNiwxMSArMzYsMTQg
QEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKLXZvaWQgSlNU
ZXh0VHJhY2tMaXN0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2
aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNUZXh0VHJhY2tMaXN0
Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHZpc2l0
b3IuYWRkT3BhcXVlUm9vdChyb290KHdyYXBwZWQoKS5lbGVtZW50KCkpKTsKIH0KICAgICAKK0RF
RklORV9WSVNJVF9BRERJVElPTkFMX0NISUxEUkVOKEpTVGV4dFRyYWNrTGlzdCk7CisKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU1RyZWVXYWxrZXJDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTVHJlZVdhbGtlckN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjkwMikKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVHJlZVdhbGtlckN1c3RvbS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA4
LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAwNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAg
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYwpAQCAtMjUsMTAgKzI1LDEzIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBK
U1RyZWVXYWxrZXI6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZp
c2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1RyZWVXYWxrZXI6OnZp
c2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgaWYgKE5vZGVG
aWx0ZXIqIGZpbHRlciA9IHdyYXBwZWQoKS5maWx0ZXIoKSkKICAgICAgICAgdmlzaXRvci5hZGRP
cGFxdWVSb290KGZpbHRlcik7CiB9CiAKLX0KK0RFRklORV9WSVNJVF9BRERJVElPTkFMX0NISUxE
UkVOKEpTVHJlZVdhbGtlcik7CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVW5kb0l0ZW1DdXN0b20uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVW5kb0l0ZW1DdXN0b20uY3BwCShyZXZpc2lv
biAyNzI5MDIpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1VuZG9JdGVtQ3VzdG9t
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE5LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC0yOSwxMyArMjksMTYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCi12b2lkIEpTVW5kb0l0ZW06OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZp
c2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1VuZG9J
dGVtOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHdy
YXBwZWQoKS51bmRvSGFuZGxlcigpLnZpc2l0SlNGdW5jdGlvbih2aXNpdG9yKTsKICAgICB3cmFw
cGVkKCkucmVkb0hhbmRsZXIoKS52aXNpdEpTRnVuY3Rpb24odmlzaXRvcik7CiB9CiAKLWJvb2wg
SlNVbmRvSXRlbU93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxK
U0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNv
bnN0IGNoYXIqKiByZWFzb24pCitERUZJTkVfVklTSVRfQURESVRJT05BTF9DSElMRFJFTihKU1Vu
ZG9JdGVtKTsKKworYm9vbCBKU1VuZG9JdGVtT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJv
b3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgSlNDOjpBYnN0cmFj
dFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQogewogICAgIGlmIChV
TkxJS0VMWShyZWFzb24pKQogICAgICAgICAqcmVhc29uID0gIkRvY3VtZW50IGlzIGFuIG9wYXF1
ZSByb290LiI7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1ZhbHVlSW5XcmFw
cGVkT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNW
YWx1ZUluV3JhcHBlZE9iamVjdC5oCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU1ZhbHVlSW5XcmFwcGVkT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOC0yMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KIAogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQwLDcg
KzQwLDcgQEAgcHVibGljOgogICAgIG9wZXJhdG9yIEpTQzo6SlNWYWx1ZSgpIGNvbnN0OwogICAg
IGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdDsKICAgICBKU1ZhbHVlSW5XcmFwcGVkT2Jq
ZWN0JiBvcGVyYXRvcj0oY29uc3QgSlNWYWx1ZUluV3JhcHBlZE9iamVjdCYgb3RoZXIpOwotICAg
IHZvaWQgdmlzaXQoSlNDOjpTbG90VmlzaXRvciYpIGNvbnN0OworICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFZpc2l0b3I+IHZvaWQgdmlzaXQoVmlzaXRvciYpIGNvbnN0OwogICAgIHZvaWQgY2xlYXIo
KTsKIAogcHJpdmF0ZToKQEAgLTk4LDcgKzk4LDggQEAgaW5saW5lIEpTVmFsdWVJbldyYXBwZWRP
YmplY3QmIEpTVmFsdWVJbgogICAgIHJldHVybiAqdGhpczsKIH0KIAotaW5saW5lIHZvaWQgSlNW
YWx1ZUluV3JhcHBlZE9iamVjdDo6dmlzaXQoSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikgY29u
c3QKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+CitpbmxpbmUgdm9pZCBKU1ZhbHVlSW5XcmFw
cGVkT2JqZWN0Ojp2aXNpdChWaXNpdG9yJiB2aXNpdG9yKSBjb25zdAogewogICAgIHJldHVybiBX
VEY6OnN3aXRjaE9uKG1fdmFsdWUsIFtdIChKU0M6OkpTVmFsdWUpIHsKICAgICAgICAgLy8gTm90
aGluZyB0byB2aXNpdC4KQEAgLTEwNyw2ICsxMDgsOSBAQCBpbmxpbmUgdm9pZCBKU1ZhbHVlSW5X
cmFwcGVkT2JqZWN0Ojp2aXNpCiAgICAgfSk7CiB9CiAKK3RlbXBsYXRlIHZvaWQgSlNWYWx1ZUlu
V3JhcHBlZE9iamVjdDo6dmlzaXQoSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJikgY29uc3Q7Cit0
ZW1wbGF0ZSB2b2lkIEpTVmFsdWVJbldyYXBwZWRPYmplY3Q6OnZpc2l0KEpTQzo6U2xvdFZpc2l0
b3ImKSBjb25zdDsKKwogaW5saW5lIHZvaWQgSlNWYWx1ZUluV3JhcHBlZE9iamVjdDo6Y2xlYXIo
KQogewogICAgIFdURjo6c3dpdGNoT24obV92YWx1ZSwgW10gKFdlYWsmIHZhbHVlKSB7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1ZpZGVvVHJhY2tDdXN0b20uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVmlkZW9UcmFja0N1c3RvbS5j
cHAJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVmlk
ZW9UcmFja0N1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzUsMTEgKzM1LDE0IEBACiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCi12b2lkIEpTVmlkZW9UcmFjazo6
dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0
eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1ZpZGVvVHJhY2s6OnZpc2l0QWRkaXRpb25hbENoaWxk
cmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHJvb3Qo
JndyYXBwZWQoKSkpOwogfQogCitERUZJTkVfVklTSVRfQURESVRJT05BTF9DSElMRFJFTihKU1Zp
ZGVvVHJhY2spOworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZgpJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNWaWRlb1RyYWNrTGlzdEN1c3RvbS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNWaWRlb1RyYWNrTGlzdEN1c3Rv
bS5jcHAJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
VmlkZW9UcmFja0xpc3RDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM1LDExICszNSwxNCBAQAog
bmFtZXNwYWNlIFdlYkNvcmUgewogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAotdm9pZCBKU1ZpZGVv
VHJhY2tMaXN0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikK
K3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTVmlkZW9UcmFja0xpc3Q6OnZpc2l0
QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgdmlzaXRvci5hZGRP
cGFxdWVSb290KHJvb3Qod3JhcHBlZCgpLmVsZW1lbnQoKSkpOwogfQogCitERUZJTkVfVklTSVRf
QURESVRJT05BTF9DSElMRFJFTihKU1ZpZGVvVHJhY2tMaXN0KTsKKwogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQogCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2Vi
R0wyUmVuZGVyaW5nQ29udGV4dEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNXZWJHTDJSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcAkocmV2aXNp
b24gMjcyOTAyKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJHTDJSZW5kZXJp
bmdDb250ZXh0Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMzLDEyICszMywxNSBAQAog
bmFtZXNwYWNlIFdlYkNvcmUgewogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAotdm9pZCBKU1dlYkdM
MlJlbmRlcmluZ0NvbnRleHQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNXZWJHTDJSZW5kZXJp
bmdDb250ZXh0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewog
ICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdCgmd3JhcHBlZCgpKTsKICAgICB3cmFwcGVkKCkuYWRk
TWVtYmVyc1RvT3BhcXVlUm9vdHModmlzaXRvcik7CiB9CiAKK0RFRklORV9WSVNJVF9BRERJVElP
TkFMX0NISUxEUkVOKEpTV2ViR0wyUmVuZGVyaW5nQ29udGV4dCk7CisKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShXRUJHTCkKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTV2ViR0xSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYkdMUmVuZGVyaW5nQ29udGV4dEN1
c3RvbS5jcHAJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTV2ViR0xSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMywxMiAr
MzMsMTUgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKLXZv
aWQgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0
b3IpCiB7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KCZ3cmFwcGVkKCkpOwogICAgIHdyYXBw
ZWQoKS5hZGRNZW1iZXJzVG9PcGFxdWVSb290cyh2aXNpdG9yKTsKIH0KIAorREVGSU5FX1ZJU0lU
X0FERElUSU9OQUxfQ0hJTERSRU4oSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQpOworCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoV0VCR0wpCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckdsb2JhbFNjb3BlQmFzZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrZXJHbG9iYWxTY29wZUJhc2Uu
Y3BwCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dv
cmtlckdsb2JhbFNjb3BlQmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5LCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgUmln
aHRzIFJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtOTIsNyArOTIsOCBAQCB2b2lkIEpT
V29ya2VyR2xvYmFsU2NvcGVCYXNlOjpmaW5pc2hDcmVhCiAgICAgQVNTRVJUKGluaGVyaXRzKHZt
LCBpbmZvKCkpKTsKIH0KIAotdm9pZCBKU1dvcmtlckdsb2JhbFNjb3BlQmFzZTo6dmlzaXRDaGls
ZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5h
bWUgVmlzaXRvcj4KK3ZvaWQgSlNXb3JrZXJHbG9iYWxTY29wZUJhc2U6OnZpc2l0Q2hpbGRyZW5J
bXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU1dvcmtlckdsb2Jh
bFNjb3BlQmFzZSogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1dvcmtlckdsb2JhbFNjb3BlQmFzZSo+
KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygp
KTsKQEAgLTEwMCw2ICsxMDEsOCBAQCB2b2lkIEpTV29ya2VyR2xvYmFsU2NvcGVCYXNlOjp2aXNp
dENoaWxkCiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9wcm94eSk7CiB9CiAKK0RF
RklORV9WSVNJVF9DSElMRFJFTihKU1dvcmtlckdsb2JhbFNjb3BlQmFzZSk7CisKIHZvaWQgSlNX
b3JrZXJHbG9iYWxTY29wZUJhc2U6OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQogewogICAgIHN0YXRp
Y19jYXN0PEpTV29ya2VyR2xvYmFsU2NvcGVCYXNlKj4oY2VsbCktPkpTV29ya2VyR2xvYmFsU2Nv
cGVCYXNlOjp+SlNXb3JrZXJHbG9iYWxTY29wZUJhc2UoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTV29ya2VyR2xvYmFsU2NvcGVCYXNlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrZXJHbG9iYWxTY29wZUJhc2UuaAkocmV2aXNp
b24gMjcyOTAyKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrZXJHbG9iYWxT
Y29wZUJhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDA4LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03OSw3ICs3OSw3IEBAIHByb3RlY3RlZDoK
ICAgICBKU1dvcmtlckdsb2JhbFNjb3BlQmFzZShKU0M6OlZNJiwgSlNDOjpTdHJ1Y3R1cmUqLCBS
ZWZQdHI8V29ya2VyR2xvYmFsU2NvcGU+JiYpOwogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlND
OjpWTSYsIEpTQzo6SlNQcm94eSopOwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihK
U0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxE
UkVOOwogCiBwcml2YXRlOgogICAgIFJlZlB0cjxXb3JrZXJHbG9iYWxTY29wZT4gbV93cmFwcGVk
OwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrZXJHbG9iYWxTY29wZUN1
c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXb3Jr
ZXJHbG9iYWxTY29wZUN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyR2xvYmFsU2NvcGVDdXN0b20uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOC0yMDA5LCAyMDEx
LCAyMDE2IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAwOC0yMDIxIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMzMsNyArMzMsOCBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewog
dXNpbmcgbmFtZXNwYWNlIEpTQzsKIAotdm9pZCBKU1dvcmtlckdsb2JhbFNjb3BlOjp2aXNpdEFk
ZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1l
IFZpc2l0b3I+Cit2b2lkIEpTV29ya2VyR2xvYmFsU2NvcGU6OnZpc2l0QWRkaXRpb25hbENoaWxk
cmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgaWYgKGF1dG8qIGxvY2F0aW9uID0gd3JhcHBl
ZCgpLm9wdGlvbmFsTG9jYXRpb24oKSkKICAgICAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KGxv
Y2F0aW9uKTsKQEAgLTQ4LDYgKzQ5LDggQEAgdm9pZCBKU1dvcmtlckdsb2JhbFNjb3BlOjp2aXNp
dEFkZGl0aW9uYQogICAgIHdyYXBwZWQoKS52aXNpdEpTRXZlbnRMaXN0ZW5lcnModmlzaXRvcik7
CiB9CiAKK0RFRklORV9WSVNJVF9BRERJVElPTkFMX0NISUxEUkVOKEpTV29ya2VyR2xvYmFsU2Nv
cGUpOworCiBKU1ZhbHVlIEpTV29ya2VyR2xvYmFsU2NvcGU6OnF1ZXVlTWljcm90YXNrKEpTR2xv
YmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUmIGNhbGxGcmFtZSkKIHsK
ICAgICBWTSYgdm0gPSBsZXhpY2FsR2xvYmFsT2JqZWN0LnZtKCk7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlck5hdmlnYXRvckN1c3RvbS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrZXJOYXZpZ2F0b3JDdXN0b20uY3Bw
CShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtl
ck5hdmlnYXRvckN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjgsOSArMjgsMTIgQEAKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIEpTV29ya2VyTmF2aWdhdG9yOjp2aXNpdEFkZGl0aW9u
YWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUg
VmlzaXRvcj4KK3ZvaWQgSlNXb3JrZXJOYXZpZ2F0b3I6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVu
KFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHN0YXRpY19j
YXN0PE5hdmlnYXRvckJhc2UqPigmd3JhcHBlZCgpKSk7CiB9CiAKLX0KK0RFRklORV9WSVNJVF9B
RERJVElPTkFMX0NISUxEUkVOKEpTV29ya2VyTmF2aWdhdG9yKTsKKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrbGV0R2xvYmFs
U2NvcGVCYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U1dvcmtsZXRHbG9iYWxTY29wZUJhc2UuY3BwCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtsZXRHbG9iYWxTY29wZUJhc2UuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAyMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTgyLDcgKzgyLDggQEAgdm9pZCBKU1dvcmtsZXRHbG9iYWxTY29wZUJhc2U6OmZpbmlz
aENyZQogICAgIEFTU0VSVChpbmhlcml0cyh2bSwgaW5mbygpKSk7CiB9CiAKLXZvaWQgSlNXb3Jr
bGV0R2xvYmFsU2NvcGVCYXNlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0
b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1dvcmtsZXRH
bG9iYWxTY29wZUJhc2U6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYg
dmlzaXRvcikKIHsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTV29ya2xldEdsb2Jh
bFNjb3BlQmFzZSo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09i
amVjdCwgaW5mbygpKTsKQEAgLTkwLDYgKzkxLDggQEAgdm9pZCBKU1dvcmtsZXRHbG9iYWxTY29w
ZUJhc2U6OnZpc2l0Q2hpbAogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fcHJveHkp
OwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNXb3JrbGV0R2xvYmFsU2NvcGVCYXNlKTsK
Kwogdm9pZCBKU1dvcmtsZXRHbG9iYWxTY29wZUJhc2U6OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQog
ewogICAgIHN0YXRpY19jYXN0PEpTV29ya2xldEdsb2JhbFNjb3BlQmFzZSo+KGNlbGwpLT5KU1dv
cmtsZXRHbG9iYWxTY29wZUJhc2U6On5KU1dvcmtsZXRHbG9iYWxTY29wZUJhc2UoKTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2xldEdsb2JhbFNjb3BlQmFzZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2xldEdsb2JhbFNj
b3BlQmFzZS5oCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU1dvcmtsZXRHbG9iYWxTY29wZUJhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02Nyw3ICs2Nyw3IEBA
IHByb3RlY3RlZDoKICAgICBKU1dvcmtsZXRHbG9iYWxTY29wZUJhc2UoSlNDOjpWTSYsIEpTQzo6
U3RydWN0dXJlKiwgUmVmUHRyPFdvcmtsZXRHbG9iYWxTY29wZT4mJik7CiAgICAgdm9pZCBmaW5p
c2hDcmVhdGlvbihKU0M6OlZNJiwgSlNDOjpKU1Byb3h5Kik7CiAKLSAgICBzdGF0aWMgdm9pZCB2
aXNpdENoaWxkcmVuKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpOworICAgIERFQ0xB
UkVfVklTSVRfQ0hJTERSRU47CiAKIHByaXZhdGU6CiAgICAgUmVmUHRyPFdvcmtsZXRHbG9iYWxT
Y29wZT4gbV93cmFwcGVkOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNYTUxI
dHRwUmVxdWVzdEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNYTUxIdHRwUmVxdWVzdEN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjkwMikKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTWE1MSHR0cFJlcXVlc3RDdXN0b20uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAw
OSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgt
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTQxLDcgKzQxLDggQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5n
IG5hbWVzcGFjZSBKU0M7CiAKLXZvaWQgSlNYTUxIdHRwUmVxdWVzdDo6dmlzaXRBZGRpdGlvbmFs
Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
Pgordm9pZCBKU1hNTEh0dHBSZXF1ZXN0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9y
JiB2aXNpdG9yKQogewogICAgIGlmIChhdXRvKiB1cGxvYWQgPSB3cmFwcGVkKCkub3B0aW9uYWxV
cGxvYWQoKSkKICAgICAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHVwbG9hZCk7CkBAIC01MCw2
ICs1MSw4IEBAIHZvaWQgSlNYTUxIdHRwUmVxdWVzdDo6dmlzaXRBZGRpdGlvbmFsQ2gKICAgICAg
ICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHJlc3BvbnNlRG9jdW1lbnQpOwogfQogCitERUZJTkVf
VklTSVRfQURESVRJT05BTF9DSElMRFJFTihKU1hNTEh0dHBSZXF1ZXN0KTsKKwogSlNWYWx1ZSBK
U1hNTEh0dHBSZXF1ZXN0OjpyZXNwb25zZShKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9i
amVjdCkgY29uc3QKIHsKICAgICBhdXRvIGNhY2hlUmVzdWx0ID0gWyZdIChKU1ZhbHVlIHZhbHVl
KSAtPiBKU1ZhbHVlIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTWFBhdGhS
ZXN1bHRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTWFBhdGhSZXN1bHRDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU1hQYXRoUmVzdWx0Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTEgSnVsaWVuIENoYWZmcmFp
eCA8amNoYWZmcmFpeEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtMzEsNyArMzIsOCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgSlNYUGF0aFJl
c3VsdDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikK
K3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTWFBhdGhSZXN1bHQ6OnZpc2l0QWRk
aXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0byYgdmFsdWUgPSB3
cmFwcGVkKCkudmFsdWUoKTsKICAgICBpZiAodmFsdWUuaXNOb2RlU2V0KCkpIHsKQEAgLTQxLDQg
KzQzLDYgQEAgdm9pZCBKU1hQYXRoUmVzdWx0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZAogICAgIH0K
IH0KIAorREVGSU5FX1ZJU0lUX0FERElUSU9OQUxfQ0hJTERSRU4oSlNYUGF0aFJlc3VsdCk7CisK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L1dlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvV2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyLmNwcAkocmV2aXNp
b24gMjcyOTAyKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV2ViQ29yZVR5cGVkQXJy
YXlDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01Niw3ICs1Niw3IEBAIGJvb2wgV2ViQ29y
ZVR5cGVkQXJyYXlDb250cm9sbGVyOjppc0F0b20KICAgICByZXR1cm4gbV9hbGxvd0F0b21pY3NX
YWl0OwogfQogCi1ib29sIFdlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlcjo6SlNBcnJheUJ1ZmZl
ck93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25v
d24+IGhhbmRsZSwgdm9pZCosIEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIq
KiByZWFzb24pCitib29sIFdlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlcjo6SlNBcnJheUJ1ZmZl
ck93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25v
d24+IGhhbmRsZSwgdm9pZCosIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvciwgY29u
c3QgY2hhcioqIHJlYXNvbikKIHsKICAgICBpZiAoVU5MSUtFTFkocmVhc29uKSkKICAgICAgICAg
KnJlYXNvbiA9ICJBcnJheUJ1ZmZlciBpcyBvcGFxdWUgcm9vdCI7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xs
ZXIuaAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV2Vi
Q29yZVR5cGVkQXJyYXlDb250cm9sbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDgsNyArNDgsNyBAQCBw
dWJsaWM6CiBwcml2YXRlOgogICAgIGNsYXNzIEpTQXJyYXlCdWZmZXJPd25lciA6IHB1YmxpYyBK
U0M6OldlYWtIYW5kbGVPd25lciB7CiAgICAgcHVibGljOgotICAgICAgICBib29sIGlzUmVhY2hh
YmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRl
eHQsIEpTQzo6U2xvdFZpc2l0b3ImLCBjb25zdCBjaGFyKiopIG92ZXJyaWRlOworICAgICAgICBi
b29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4s
IHZvaWQqIGNvbnRleHQsIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYsIGNvbnN0IGNoYXIqKikg
b3ZlcnJpZGU7CiAgICAgICAgIHZvaWQgZmluYWxpemUoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3du
Piwgdm9pZCogY29udGV4dCkgb3ZlcnJpZGU7CiAgICAgfTsKIApJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0JKHJldmlzaW9u
IDI3MjkwMikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRv
ckpTLnBtCSh3b3JraW5nIGNvcHkpCkBAIC0zLDcgKzMsNyBAQAogIyBDb3B5cmlnaHQgKEMpIDIw
MDYgQW5kZXJzIENhcmxzc29uIDxhbmRlcnNjYUBtYWMuY29tPgogIyBDb3B5cmlnaHQgKEMpIDIw
MDYsIDIwMDcgU2FtdWVsIFdlaW5pZyA8c2FtQHdlYmtpdC5vcmc+CiAjIENvcHlyaWdodCAoQykg
MjAwNiBBbGV4ZXkgUHJvc2t1cnlha292IDxhcEB3ZWJraXQub3JnPgotIyBDb3B5cmlnaHQgKEMp
IDIwMDYtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjIENvcHlyaWdodCAo
QykgMjAwNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICMgQ29weXJpZ2h0
IChDKSAyMDA5IENhbWVyb24gTWNDb3JtYWNrIDxjYW1AbWNjLmlkLmF1PgogIyBDb3B5cmlnaHQg
KEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAjIENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNp
ZGlhcnkoLWllcykKQEAgLTMwNzgsOCArMzA3OCw4IEBAIHN1YiBHZW5lcmF0ZUhlYWRlcgogCiAg
ICAgIyB2aXNpdCBmdW5jdGlvbgogICAgIGlmICgkbmVlZHNWaXNpdENoaWxkcmVuKSB7Ci0gICAg
ICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihK
U0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJik7XG4iKTsKLSAgICAgICAgcHVzaChAaGVhZGVyQ29u
dGVudCwgIiAgICB2b2lkIHZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3Im
KTtcbiIpIGlmICRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+e0pTQ3VzdG9tTWFya0Z1
bmN0aW9ufTsKKyAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICBERUNMQVJFX1ZJU0lU
X0NISUxEUkVOO1xuIik7CisgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgdGVtcGxh
dGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCB2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9y
Jik7XG4iKSBpZiAkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntKU0N1c3RvbU1hcmtG
dW5jdGlvbn07CiAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJcbiIpOwogCiAgICAgICAg
IGlmICgkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntKU0N1c3RvbU1hcmtGdW5jdGlv
bn0pIHsKQEAgLTMwOTQsNyArMzA5NCw3IEBAIHN1YiBHZW5lcmF0ZUhlYWRlcgogICAgICAgICAg
ICAgIyB0aGF0IHRoZSBHQyBjYWxscyB0byBhc2sgYW4gb2JqZWN0IGlzIGl0IHdvdWxkIGxpa2Ug
dG8gbWFyayBhbnl0aGluZyBlbHNlIGFmdGVyIHRoZQogICAgICAgICAgICAgIyBwcm9ncmFtIHJl
c3VtZWQgc2luY2UgdGhlIGxhc3QgY2FsbCB0byB2aXNpdENoaWxkcmVuIG9yIHZpc2l0T3V0cHV0
Q29uc3RyYWludHMuIFNpbmNlCiAgICAgICAgICAgICAjIHRoaXMganVzdCBjYWxscyB2aXNpdEFk
ZGl0aW9uYWxDaGlsZHJlbiwgeW91IHVzdWFsbHkgZG9uJ3QgaGF2ZSB0byB3b3JyeSBhYm91dCB0
aGlzLgotICAgICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICBzdGF0aWMgdm9pZCB2
aXNpdE91dHB1dENvbnN0cmFpbnRzKEpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKTtcbiIpOwor
ICAgICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPiBzdGF0aWMgdm9pZCB2aXNpdE91dHB1dENvbnN0cmFpbnRzKEpTQ2VsbCosIFZpc2l0
b3ImKTtcbiIpOwogICAgICAgICB9CiAgICAgfQogCkBAIC0zMjE1LDcgKzMyMTUsNyBAQCBzdWIg
R2VuZXJhdGVIZWFkZXIKICAgICAgICAgfQogICAgICAgICAkaGVhZGVySW5jbHVkZXN7Ijx3dGYv
TmV2ZXJEZXN0cm95ZWQuaD4ifSA9IDE7CiAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJw
dWJsaWM6XG4iKTsKLSAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICBib29sIGlzUmVh
Y2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNv
bnRleHQsIEpTQzo6U2xvdFZpc2l0b3ImLCBjb25zdCBjaGFyKiopICR7b3ZlcnJpZGVEZWNsfTtc
biIpOworICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIGJvb2wgaXNSZWFjaGFibGVG
cm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCwg
SlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiwgY29uc3QgY2hhcioqKSAke292ZXJyaWRlRGVjbH07
XG4iKTsKICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICB2b2lkIGZpbmFsaXplKEpT
Qzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQpICR7b3ZlcnJpZGVEZWNsfTtc
biIpOwogICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAifTtcbiIpOwogICAgICAgICBwdXNo
KEBoZWFkZXJDb250ZW50LCAiXG4iKTsKQEAgLTQ5MzksNiArNDkzOSw3IEBAIHN1YiBHZW5lcmF0
ZUltcGxlbWVudGF0aW9uCiAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIkRPTUlzb1N1YnNwYWNlcy5o
Iik7CiAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIldlYkNvcmVKU0NsaWVudERhdGEuaCIpOwogICAg
IEFkZFRvSW1wbEluY2x1ZGVzKCI8SmF2YVNjcmlwdENvcmUvSlNEZXN0cnVjdGlibGVPYmplY3RI
ZWFwQ2VsbFR5cGUuaD4iKTsKKyAgICBBZGRUb0ltcGxJbmNsdWRlcygiPEphdmFTY3JpcHRDb3Jl
L1Nsb3RWaXNpdG9yTWFjcm9zLmg+Iik7CiAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIjxKYXZhU2Ny
aXB0Q29yZS9TdWJzcGFjZUlubGluZXMuaD4iKTsKICAgICBwdXNoKEBpbXBsQ29udGVudCwgIkpT
Qzo6SXNvU3Vic3BhY2UqICR7Y2xhc3NOYW1lfTo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZt
KVxuIik7CiAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ7XG4iKTsKQEAgLTQ5NTgsNyArNDk1OSwx
MCBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgIHB1c2goQGltcGxDb250ZW50LCAi
ICAgIGF1dG8qIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3Ike2ludGVyZmFjZU5hbWV9Lmdl
dCgpO1xuIik7CiAgICAgcHVzaChAaW1wbENvbnRlbnQsICJJR05PUkVfV0FSTklOR1NfQkVHSU4o
XCJ1bnJlYWNoYWJsZS1jb2RlXCIpXG4iKTsKICAgICBwdXNoKEBpbXBsQ29udGVudCwgIklHTk9S
RV9XQVJOSU5HU19CRUdJTihcInRhdXRvbG9naWNhbC1jb21wYXJlXCIpXG4iKTsKLSAgICBwdXNo
KEBpbXBsQ29udGVudCwgIiAgICBpZiAoJiR7Y2xhc3NOYW1lfTo6dmlzaXRPdXRwdXRDb25zdHJh
aW50cyAhPSAmSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHMpXG4iKTsKKyAgICBw
dXNoKEBpbXBsQ29udGVudCwgIiAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpT
Qzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gJHtjbGFzc05hbWV9Ojp2aXNpdE91dHB1
dENvbnN0cmFpbnRzO1xuIik7CisgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgdm9pZCAoKmpz
Q2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9y
JikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50cztcbiIpOworICAgIHB1c2go
QGltcGxDb250ZW50LCAiICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxW
aXNpdE91dHB1dENvbnN0cmFpbnQpXG4iKTsKKyMgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAg
aWYgKCYke2NsYXNzTmFtZX06OnZpc2l0T3V0cHV0Q29uc3RyYWludHMgIT0gJkpTQzo6SlNDZWxs
Ojp2aXNpdE91dHB1dENvbnN0cmFpbnRzKVxuIik7CiAgICAgcHVzaChAaW1wbENvbnRlbnQsICIg
ICAgICAgIGNsaWVudERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7
XG4iKTsKICAgICBwdXNoKEBpbXBsQ29udGVudCwgIklHTk9SRV9XQVJOSU5HU19FTkRcbiIpOwog
ICAgIHB1c2goQGltcGxDb250ZW50LCAiSUdOT1JFX1dBUk5JTkdTX0VORFxuIik7CkBAIC00OTY2
LDcgKzQ5NzAsOCBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgIHB1c2goQGltcGxD
b250ZW50LCAifVxuXG4iKTsKIAogICAgIGlmICgkbmVlZHNWaXNpdENoaWxkcmVuKSB7Ci0gICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAidm9pZCAke2NsYXNzTmFtZX06OnZpc2l0Q2hpbGRyZW4o
SlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcilcbiIpOworICAgICAgICBwdXNoKEBp
bXBsQ29udGVudCwgInRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+XG4iKTsKKyAgICAgICAgcHVz
aChAaW1wbENvbnRlbnQsICJ2b2lkICR7Y2xhc3NOYW1lfTo6dmlzaXRDaGlsZHJlbkltcGwoSlND
ZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKVxuIik7CiAgICAgICAgIHB1c2goQGltcGxDb250
ZW50LCAie1xuIik7CiAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGF1dG8qIHRoaXNP
YmplY3QgPSBqc0Nhc3Q8JHtjbGFzc05hbWV9Kj4oY2VsbCk7XG4iKTsKICAgICAgICAgcHVzaChA
aW1wbENvbnRlbnQsICIgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBp
bmZvKCkpO1xuIik7CkBAIC00OTkxLDE0ICs0OTk2LDE5IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVu
dGF0aW9uCiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgcHVzaChAaW1wbENvbnRl
bnQsICJ9XG5cbiIpOworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIkRFRklORV9WSVNJVF9D
SElMRFJFTigke2NsYXNzTmFtZX0pO1xuXG4iKTsKKwogICAgICAgICBpZiAoJGludGVyZmFjZS0+
ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57SlNDdXN0b21NYXJrRnVuY3Rpb259KSB7Ci0gICAgICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgInZvaWQgJHtjbGFzc05hbWV9Ojp2aXNpdE91dHB1dENvbnN0
cmFpbnRzKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpXG4iKTsKKyAgICAgICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAidGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj5cbiIpOwor
ICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ2b2lkICR7Y2xhc3NOYW1lfTo6dmlzaXRP
dXRwdXRDb25zdHJhaW50cyhKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpXG4iKTsKICAg
ICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAie1xuIik7CiAgICAgICAgICAgICBwdXNoKEBp
bXBsQ29udGVudCwgIiAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PCR7Y2xhc3NOYW1lfSo+
KGNlbGwpO1xuIik7CiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBBU1NFUlRf
R0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7XG4iKTsKICAgICAgICAgICAg
IHB1c2goQGltcGxDb250ZW50LCAiICAgIEJhc2U6OnZpc2l0T3V0cHV0Q29uc3RyYWludHModGhp
c09iamVjdCwgdmlzaXRvcik7XG4iKTsKICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
ICAgIHRoaXNPYmplY3QtPnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKHZpc2l0b3IpO1xuIik7CiAg
ICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIn1cblxuIik7CisgICAgICAgICAgICBwdXNo
KEBpbXBsQ29udGVudCwgInRlbXBsYXRlIHZvaWQgJHtjbGFzc05hbWV9Ojp2aXNpdE91dHB1dENv
bnN0cmFpbnRzKEpTQ2VsbCosIEFic3RyYWN0U2xvdFZpc2l0b3ImKTtcbiIpOworICAgICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICJ0ZW1wbGF0ZSB2b2lkICR7Y2xhc3NOYW1lfTo6dmlzaXRP
dXRwdXRDb25zdHJhaW50cyhKU0NlbGwqLCBTbG90VmlzaXRvciYpO1xuIik7CiAgICAgICAgIH0K
ICAgICB9CiAKQEAgLTUwMzMsNyArNTA0Myw3IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9u
CiAgICAgfQogCiAgICAgaWYgKFNob3VsZEdlbmVyYXRlV3JhcHBlck93bmVyQ29kZSgkaGFzUGFy
ZW50LCAkaW50ZXJmYWNlKSAmJiAhR2V0Q3VzdG9tSXNSZWFjaGFibGUoJGludGVyZmFjZSkpIHsK
LSAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJib29sIEpTJHtpbnRlcmZhY2VOYW1lfU93bmVy
Ojppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhh
bmRsZSwgdm9pZCosIFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKVxu
Iik7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiYm9vbCBKUyR7aW50ZXJmYWNlTmFtZX1P
d25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3du
PiBoYW5kbGUsIHZvaWQqLCBBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFy
KiogcmVhc29uKVxuIik7CiAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAie1xuIik7CiAgICAg
ICAgICMgQWxsIEFjdGl2ZURPTU9iamVjdHMgaW1wbGVtZW50IGhhc1BlbmRpbmdBY3Rpdml0eSgp
LCBidXQgbm90IGFsbCBvZiB0aGVtCiAgICAgICAgICMgaW5jcmVtZW50IHRoZWlyIEMrKyByZWZl
cmVuY2UgY291bnRzIHdoZW4gaGFzUGVuZGluZ0FjdGl2aXR5KCkgYmVjb21lcwpAQCAtNjQzMiw2
ICs2NDQyLDcgQEAgc3ViIEdlbmVyYXRlQ2FsbGJhY2tIZWFkZXJDb250ZW50CiAgICAgICAgIHB1
c2goQCRjb250ZW50UmVmLCAiICAgIGJvb2wgaGFzQ2FsbGJhY2soKSBjb25zdCBmaW5hbCB7IHJl
dHVybiBtX2RhdGEgJiYgbV9kYXRhLT5jYWxsYmFjaygpOyB9XG5cbiIpOwogICAgIH0KIAorICAg
IHB1c2goQCRjb250ZW50UmVmLCAiICAgIHZvaWQgdmlzaXRKU0Z1bmN0aW9uKEpTQzo6QWJzdHJh
Y3RTbG90VmlzaXRvciYpIG92ZXJyaWRlO1xuXG4iKSBpZiAkaW50ZXJmYWNlT3JDYWxsYmFjay0+
ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57SXNXZWFrQ2FsbGJhY2t9OwogICAgIHB1c2goQCRjb250ZW50
UmVmLCAiICAgIHZvaWQgdmlzaXRKU0Z1bmN0aW9uKEpTQzo6U2xvdFZpc2l0b3ImKSBvdmVycmlk
ZTtcblxuIikgaWYgJGludGVyZmFjZU9yQ2FsbGJhY2stPmV4dGVuZGVkQXR0cmlidXRlcy0+e0lz
V2Vha0NhbGxiYWNrfTsKIAogICAgIHB1c2goQCRjb250ZW50UmVmLCAiICAgICR7Y2FsbGJhY2tE
YXRhVHlwZX0qIG1fZGF0YTtcbiIpOwpAQCAtNjYyMyw2ICs2NjM0LDEwIEBAIHN1YiBHZW5lcmF0
ZUNhbGxiYWNrSW1wbGVtZW50YXRpb25Db250ZW4KICAgICB9CiAKICAgICBpZiAoJGludGVyZmFj
ZU9yQ2FsbGJhY2stPmV4dGVuZGVkQXR0cmlidXRlcy0+e0lzV2Vha0NhbGxiYWNrfSkgeworICAg
ICAgICBwdXNoKEAkY29udGVudFJlZiwgInZvaWQgJHtjbGFzc05hbWV9Ojp2aXNpdEpTRnVuY3Rp
b24oSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKVxuIik7CisgICAgICAgIHB1c2go
QCRjb250ZW50UmVmLCAie1xuIik7CisgICAgICAgIHB1c2goQCRjb250ZW50UmVmLCAiICAgIG1f
ZGF0YS0+dmlzaXRKU0Z1bmN0aW9uKHZpc2l0b3IpO1xuIik7CisgICAgICAgIHB1c2goQCRjb250
ZW50UmVmLCAifVxuXG4iKTsKICAgICAgICAgcHVzaChAJGNvbnRlbnRSZWYsICJ2b2lkICR7Y2xh
c3NOYW1lfTo6dmlzaXRKU0Z1bmN0aW9uKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpXG4iKTsK
ICAgICAgICAgcHVzaChAJGNvbnRlbnRSZWYsICJ7XG4iKTsKICAgICAgICAgcHVzaChAJGNvbnRl
bnRSZWYsICIgICAgbV9kYXRhLT52aXNpdEpTRnVuY3Rpb24odmlzaXRvcik7XG4iKTsKQEAgLTY3
MzQsNiArNjc0OSw3IEBAIHN1YiBHZW5lcmF0ZUl0ZXJhYmxlRGVmaW5pdGlvbgogICAgIG15ICR2
aXNpYmxlSW50ZXJmYWNlTmFtZSA9ICRjb2RlR2VuZXJhdG9yLT5HZXRWaXNpYmxlSW50ZXJmYWNl
TmFtZSgkaW50ZXJmYWNlKTsKIAogICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJKU0RPTUl0ZXJhdG9y
LmgiKTsKKyAgICBBZGRUb0ltcGxJbmNsdWRlcygiPEphdmFTY3JpcHRDb3JlL1Nsb3RWaXNpdG9y
TWFjcm9zLmg+Iik7CiAKICAgICByZXR1cm4gdW5sZXNzIElzS2V5VmFsdWVJdGVyYWJsZUludGVy
ZmFjZSgkaW50ZXJmYWNlKTsKIApAQCAtNjc3Nyw3ICs2NzkzLDkgQEAgcHVibGljOgogICAgICAg
ICBhdXRvKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yJHtpdGVyYXRvck5hbWV9LmdldCgp
OwogSUdOT1JFX1dBUk5JTkdTX0JFR0lOKFwidW5yZWFjaGFibGUtY29kZVwiKQogSUdOT1JFX1dB
Uk5JTkdTX0JFR0lOKFwidGF1dG9sb2dpY2FsLWNvbXBhcmVcIikKLSAgICAgICAgaWYgKCYke2l0
ZXJhdG9yTmFtZX06OnZpc2l0T3V0cHV0Q29uc3RyYWludHMgIT0gJkpTQzo6SlNDZWxsOjp2aXNp
dE91dHB1dENvbnN0cmFpbnRzKQorICAgICAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFp
bnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gJHtpdGVyYXRvck5hbWV9Ojp2
aXNpdE91dHB1dENvbnN0cmFpbnRzOworICAgICAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRD
b25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxs
Ojp2aXNpdE91dHB1dENvbnN0cmFpbnRzOworICAgICAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0
cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQogICAgICAgICAgICAgY2xpZW50
RGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKIElHTk9SRV9XQVJO
SU5HU19FTkQKIElHTk9SRV9XQVJOSU5HU19FTkQKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9B
Y3RpdmVET01DYWxsYmFjay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9BY3Rp
dmVET01DYWxsYmFjay5oCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20v
QWN0aXZlRE9NQ2FsbGJhY2suaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAg
KiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCkBAIC0zMyw2ICszNCw3IEBACiAj
aW5jbHVkZSAiQ29udGV4dERlc3RydWN0aW9uT2JzZXJ2ZXIuaCIKIAogbmFtZXNwYWNlIEpTQyB7
CitjbGFzcyBBYnN0cmFjdFNsb3RWaXNpdG9yOwogY2xhc3MgU2xvdFZpc2l0b3I7CiB9CiAKQEAg
LTU1LDYgKzU3LDcgQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgYWN0aXZlRE9N
T2JqZWN0c0FyZVN1c3BlbmRlZCgpIGNvbnN0OwogICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgYWN0
aXZlRE9NT2JqZWN0QXJlU3RvcHBlZCgpIGNvbnN0OwogICAgIAorICAgIHZpcnR1YWwgdm9pZCB2
aXNpdEpTRnVuY3Rpb24oSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJikgeyB9CiAgICAgdmlydHVh
bCB2b2lkIHZpc2l0SlNGdW5jdGlvbihKU0M6OlNsb3RWaXNpdG9yJikgeyB9CiB9OwogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRMaXN0ZW5lci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2RvbS9FdmVudExpc3RlbmVyLmgJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJj
ZS9XZWJDb3JlL2RvbS9FdmVudExpc3RlbmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjQsNiArMjQsNyBA
QAogI2luY2x1ZGUgPHd0Zi9XZWFrUHRyLmg+CiAKIG5hbWVzcGFjZSBKU0MgeworY2xhc3MgQWJz
dHJhY3RTbG90VmlzaXRvcjsKIGNsYXNzIEpTT2JqZWN0OwogY2xhc3MgU2xvdFZpc2l0b3I7CiB9
CkBAIC01Miw2ICs1Myw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlRXZlbnQo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIEV2ZW50JikgPSAwOwogICAgIHZpcnR1YWwgYm9vbCB3
YXNDcmVhdGVkRnJvbU1hcmt1cCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAKKyAgICB2aXJ0
dWFsIHZvaWQgdmlzaXRKU0Z1bmN0aW9uKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpIHsgfQog
ICAgIHZpcnR1YWwgdm9pZCB2aXNpdEpTRnVuY3Rpb24oSlNDOjpTbG90VmlzaXRvciYpIHsgfQog
CiAgICAgdmlydHVhbCBib29sIGlzQXR0cmlidXRlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9FdmVudFRhcmdldC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvZG9tL0V2ZW50VGFyZ2V0LmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysg
U291cmNlL1dlYkNvcmUvZG9tL0V2ZW50VGFyZ2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMiw3
ICsyLDcgQEAKICAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3Jn
KQogICogICAgICAgICAgIChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3Jn
KQogICogICAgICAgICAgIChDKSAyMDAxIERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUub3JnKQot
ICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA2IEFsZXhleSBQcm9za3VyeWFrb3YgKGFwQHdlYmtp
dC5vcmcpCiAgKiAgICAgICAgICAgKEMpIDIwMDcsIDIwMDggTmlrb2xhcyBaaW1tZXJtYW5uIDx6
aW1tZXJtYW5uQGtkZS5vcmc+CiAgKgpAQCAtMzg0LDcgKzM4NCw4IEBAIHZvaWQgRXZlbnRUYXJn
ZXQ6OnJlbW92ZUFsbEV2ZW50TGlzdGVuZXIKICAgICB0aHJlYWREYXRhLnNldElzSW5SZW1vdmVB
bGxFdmVudExpc3RlbmVycyhmYWxzZSk7CiB9CiAKLXZvaWQgRXZlbnRUYXJnZXQ6OnZpc2l0SlNF
dmVudExpc3RlbmVycyhKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5h
bWUgVmlzaXRvcj4KK3ZvaWQgRXZlbnRUYXJnZXQ6OnZpc2l0SlNFdmVudExpc3RlbmVycyhWaXNp
dG9yJiB2aXNpdG9yKQogewogICAgIEV2ZW50VGFyZ2V0RGF0YSogZGF0YSA9IGV2ZW50VGFyZ2V0
RGF0YUNvbmN1cnJlbnRseSgpOwogICAgIGlmICghZGF0YSkKQEAgLTM5Niw2ICszOTcsOSBAQCB2
b2lkIEV2ZW50VGFyZ2V0Ojp2aXNpdEpTRXZlbnRMaXN0ZW5lcnMoCiAgICAgICAgIGxpc3RlbmVy
LT52aXNpdEpTRnVuY3Rpb24odmlzaXRvcik7CiB9CiAKK3RlbXBsYXRlIHZvaWQgRXZlbnRUYXJn
ZXQ6OnZpc2l0SlNFdmVudExpc3RlbmVycyhKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3Rl
bXBsYXRlIHZvaWQgRXZlbnRUYXJnZXQ6OnZpc2l0SlNFdmVudExpc3RlbmVycyhKU0M6OlNsb3RW
aXNpdG9yJik7CisKIHZvaWQgRXZlbnRUYXJnZXQ6OmludmFsaWRhdGVFdmVudExpc3RlbmVyUmVn
aW9ucygpCiB7CiAgICAgaWYgKGlzPEVsZW1lbnQ+KCp0aGlzKSkgewpJbmRleDogU291cmNlL1dl
YkNvcmUvZG9tL0V2ZW50VGFyZ2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9t
L0V2ZW50VGFyZ2V0LmgJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9F
dmVudFRhcmdldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yLDcgKzIsNyBAQAogICogQ29weXJpZ2h0
IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDE5
OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDIw
MDEgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQt
MjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDQtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMp
IDIwMDYgQWxleGV5IFByb3NrdXJ5YWtvdiAoYXBAd2Via2l0Lm9yZykKICAqICAgICAgICAgICAo
QykgMjAwNywgMjAwOCBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KICAq
CkBAIC05Nyw3ICs5Nyw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGZpcmVFdmVudExpc3RlbmVycyhF
dmVudCYsIEV2ZW50SW52b2tlUGhhc2UpOwogICAgIGJvb2wgaXNGaXJpbmdFdmVudExpc3RlbmVy
cygpIGNvbnN0OwogCi0gICAgdm9pZCB2aXNpdEpTRXZlbnRMaXN0ZW5lcnMoSlNDOjpTbG90Vmlz
aXRvciYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgdmlzaXRKU0V2ZW50
TGlzdGVuZXJzKFZpc2l0b3ImKTsKICAgICB2b2lkIGludmFsaWRhdGVKU0V2ZW50TGlzdGVuZXJz
KEpTQzo6SlNPYmplY3QqKTsKIAogICAgIGNvbnN0IEV2ZW50VGFyZ2V0RGF0YSogZXZlbnRUYXJn
ZXREYXRhKCkgY29uc3Q7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vTXV0YXRpb25SZWNvcmQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9NdXRhdGlvblJlY29yZC5jcHAJ
KHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9NdXRhdGlvblJlY29yZC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAy
MDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zIGFyZQpAQCAtNDEsNyArNDIsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIG5h
bWVzcGFjZSB7CiAKLXN0YXRpYyB2b2lkIHZpc2l0Tm9kZUxpc3QoSlNDOjpTbG90VmlzaXRvciYg
dmlzaXRvciwgTm9kZUxpc3QmIG5vZGVMaXN0KQorc3RhdGljIHZvaWQgdmlzaXROb2RlTGlzdChK
U0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIE5vZGVMaXN0JiBub2RlTGlzdCkKIHsK
ICAgICBBU1NFUlQoIW5vZGVMaXN0LmlzTGl2ZU5vZGVMaXN0KCkpOwogICAgIHVuc2lnbmVkIGxl
bmd0aCA9IG5vZGVMaXN0Lmxlbmd0aCgpOwpAQCAtNjgsNyArNjksNyBAQCBwcml2YXRlOgogICAg
IE5vZGUqIHByZXZpb3VzU2libGluZygpIG92ZXJyaWRlIHsgcmV0dXJuIG1fcHJldmlvdXNTaWJs
aW5nLmdldCgpOyB9CiAgICAgTm9kZSogbmV4dFNpYmxpbmcoKSBvdmVycmlkZSB7IHJldHVybiBt
X25leHRTaWJsaW5nLmdldCgpOyB9CiAKLSAgICB2b2lkIHZpc2l0Tm9kZXNDb25jdXJyZW50bHko
SlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikgY29uc3QgZmluYWwKKyAgICB2b2lkIHZpc2l0Tm9k
ZXNDb25jdXJyZW50bHkoSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBjb25zdCBm
aW5hbAogICAgIHsKICAgICAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHJvb3QobV90YXJnZXQu
cHRyKCkpKTsKICAgICAgICAgaWYgKG1fYWRkZWROb2RlcykKQEAgLTEwNSw3ICsxMDYsNyBAQCBw
cml2YXRlOgogICAgICAgICByZXR1cm4gbm9kZUxpc3QuZ2V0KCk7CiAgICAgfQogCi0gICAgdm9p
ZCB2aXNpdE5vZGVzQ29uY3VycmVudGx5KEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0
IGZpbmFsCisgICAgdm9pZCB2aXNpdE5vZGVzQ29uY3VycmVudGx5KEpTQzo6QWJzdHJhY3RTbG90
VmlzaXRvciYgdmlzaXRvcikgY29uc3QgZmluYWwKICAgICB7CiAgICAgICAgIHZpc2l0b3IuYWRk
T3BhcXVlUm9vdChyb290KG1fdGFyZ2V0LnB0cigpKSk7CiAgICAgfQpAQCAtMTY0LDcgKzE2NSw3
IEBAIHByaXZhdGU6CiAKICAgICBTdHJpbmcgb2xkVmFsdWUoKSBvdmVycmlkZSB7IHJldHVybiBT
dHJpbmcoKTsgfQogCi0gICAgdm9pZCB2aXNpdE5vZGVzQ29uY3VycmVudGx5KEpTQzo6U2xvdFZp
c2l0b3ImIHZpc2l0b3IpIGNvbnN0IGZpbmFsCisgICAgdm9pZCB2aXNpdE5vZGVzQ29uY3VycmVu
dGx5KEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikgY29uc3QgZmluYWwKICAgICB7
CiAgICAgICAgIG1fcmVjb3JkLT52aXNpdE5vZGVzQ29uY3VycmVudGx5KHZpc2l0b3IpOwogICAg
IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9NdXRhdGlvblJlY29yZC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9NdXRhdGlvblJlY29yZC5oCShyZXZpc2lvbiAyNzI5MDIp
CisrKyBTb3VyY2UvV2ViQ29yZS9kb20vTXV0YXRpb25SZWNvcmQuaAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCkBAIC0z
Niw3ICszNyw3IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1jbGFzcyBTbG90VmlzaXRvcjsKK2Ns
YXNzIEFic3RyYWN0U2xvdFZpc2l0b3I7CiAKIH0KIApAQCAtNzIsNyArNzMsNyBAQCBwdWJsaWM6
CiAKICAgICB2aXJ0dWFsIFN0cmluZyBvbGRWYWx1ZSgpIHsgcmV0dXJuIFN0cmluZygpOyB9CiAK
LSAgICB2aXJ0dWFsIHZvaWQgdmlzaXROb2Rlc0NvbmN1cnJlbnRseShKU0M6OlNsb3RWaXNpdG9y
JikgY29uc3QgPSAwOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdE5vZGVzQ29uY3VycmVudGx5KEpT
Qzo6QWJzdHJhY3RTbG90VmlzaXRvciYpIGNvbnN0ID0gMDsKIH07CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlRmlsdGVyQ29uZGl0aW9uLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL05vZGVGaWx0ZXJDb25kaXRpb24uaAko
cmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL1dlYkNvcmUvZG9tL05vZGVGaWx0ZXJDb25kaXRp
b24uaAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyArMzgsNyBAQCBjbGFzcyBOb2RlRmlsdGVyQ29u
ZGl0aW9uIDogcHVibGljIFJlZkNvCiBwdWJsaWM6CiAgICAgdmlydHVhbCB+Tm9kZUZpbHRlckNv
bmRpdGlvbigpID0gZGVmYXVsdDsKICAgICB2aXJ0dWFsIHVuc2lnbmVkIHNob3J0IGFjY2VwdE5v
ZGUoTm9kZSYpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXRBZ2dyZWdhdGUoSlND
OjpTbG90VmlzaXRvciYpIHsgfQorLy8gICAgdmlydHVhbCB2b2lkIHZpc2l0QWdncmVnYXRlKEpT
Qzo6U2xvdFZpc2l0b3ImKSB7IH0gLy8gbWxhbSBVTlVTRUQKIH07CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9TdGF0aWNSYW5nZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL1N0YXRpY1JhbmdlLmNwcAkocmV2aXNpb24gMjcy
OTAyKQorKysgU291cmNlL1dlYkNvcmUvZG9tL1N0YXRpY1JhbmdlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTc2LDcgKzc2LDcgQEAgRXhjZXB0aW9uT3I8UmVmPFN0YXRpY1JhbmdlPj4gU3RhdGlj
UmFuZwogICAgIHJldHVybiBjcmVhdGUoeyB7IGluaXQuc3RhcnRDb250YWluZXIucmVsZWFzZU5v
bk51bGwoKSwgaW5pdC5zdGFydE9mZnNldCB9LCB7IGluaXQuZW5kQ29udGFpbmVyLnJlbGVhc2VO
b25OdWxsKCksIGluaXQuZW5kT2Zmc2V0IH0gfSk7CiB9CiAKLXZvaWQgU3RhdGljUmFuZ2U6OnZp
c2l0Tm9kZXNDb25jdXJyZW50bHkoSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikgY29uc3QKK3Zv
aWQgU3RhdGljUmFuZ2U6OnZpc2l0Tm9kZXNDb25jdXJyZW50bHkoSlNDOjpBYnN0cmFjdFNsb3RW
aXNpdG9yJiB2aXNpdG9yKSBjb25zdAogewogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChyb290
KHN0YXJ0LmNvbnRhaW5lci5nZXQoKSkpOwogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChyb290
KGVuZC5jb250YWluZXIuZ2V0KCkpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9TdGF0aWNS
YW5nZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9TdGF0aWNSYW5nZS5oCShy
ZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vU3RhdGljUmFuZ2UuaAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAy
MCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYt
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTMwLDcgKzMwLDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLWNsYXNz
IFNsb3RWaXNpdG9yOworY2xhc3MgQWJzdHJhY3RTbG90VmlzaXRvcjsKIAogfQogCkBAIC01OCw3
ICs1OCw3IEBAIHB1YmxpYzoKICAgICB1bnNpZ25lZCBlbmRPZmZzZXQoKSBjb25zdCBmaW5hbCB7
IHJldHVybiBTaW1wbGVSYW5nZTo6ZW5kT2Zmc2V0KCk7IH0KICAgICBib29sIGNvbGxhcHNlZCgp
IGNvbnN0IGZpbmFsIHsgcmV0dXJuIFNpbXBsZVJhbmdlOjpjb2xsYXBzZWQoKTsgfQogCi0gICAg
dm9pZCB2aXNpdE5vZGVzQ29uY3VycmVudGx5KEpTQzo6U2xvdFZpc2l0b3ImKSBjb25zdDsKKyAg
ICB2b2lkIHZpc2l0Tm9kZXNDb25jdXJyZW50bHkoSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJikg
Y29uc3Q7CiAKIHByaXZhdGU6CiAgICAgU3RhdGljUmFuZ2UoU2ltcGxlUmFuZ2UmJik7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTDJSZW5kZXJpbmdDb250ZXh0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTDJSZW5kZXJpbmdD
b250ZXh0LmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52
YXMvV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMDc4LDcg
KzMwNzgsNyBAQCBib29sIFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OmNoZWNrQW5kVHJhCiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgV2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6YWRkTWVtYmVy
c1RvT3BhcXVlUm9vdHMoSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgV2ViR0wyUmVu
ZGVyaW5nQ29udGV4dDo6YWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMoSlNDOjpBYnN0cmFjdFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQogewogICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmFkZE1l
bWJlcnNUb09wYXF1ZVJvb3RzKHZpc2l0b3IpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9XZWJHTDJSZW5kZXJpbmdDb250ZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvaHRtbC9jYW52YXMvV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5oCShyZXZpc2lvbiAyNzI5
MDIpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTDJSZW5kZXJpbmdDb250ZXh0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE1LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0yNjEsNyArMjYxLDcgQEAgcHVibGljOgogCiAgICAgYm9v
bCBjaGVja0FuZFRyYW5zbGF0ZUF0dGFjaG1lbnRzKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwg
R0NHTGVudW0sIFZlY3RvcjxHQ0dMZW51bT4mKTsKIAotICAgIHZvaWQgYWRkTWVtYmVyc1RvT3Bh
cXVlUm9vdHMoSlNDOjpTbG90VmlzaXRvciYpIG92ZXJyaWRlOworICAgIHZvaWQgYWRkTWVtYmVy
c1RvT3BhcXVlUm9vdHMoSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJikgb3ZlcnJpZGU7CiAKIHBy
aXZhdGU6CiAgICAgV2ViR0wyUmVuZGVyaW5nQ29udGV4dChDYW52YXNCYXNlJiwgR3JhcGhpY3ND
b250ZXh0R0xBdHRyaWJ1dGVzKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dl
YkdMRnJhbWVidWZmZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2Fu
dmFzL1dlYkdMRnJhbWVidWZmZXIuY3BwCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvV2Vi
Q29yZS9odG1sL2NhbnZhcy9XZWJHTEZyYW1lYnVmZmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxNyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTYzLDcgKzYzLDcgQEAgbmFtZXNwYWNlIHsKICAgICAgICAgdm9pZCBvbkRldGFjaGVkKGNvbnN0
IEFic3RyYWN0TG9ja2VyJiwgR3JhcGhpY3NDb250ZXh0R0wqKSBvdmVycmlkZTsKICAgICAgICAg
dm9pZCBhdHRhY2goR3JhcGhpY3NDb250ZXh0R0wqLCBHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVt
IGF0dGFjaG1lbnQpIG92ZXJyaWRlOwogICAgICAgICB2b2lkIHVuYXR0YWNoKEdyYXBoaWNzQ29u
dGV4dEdMKiwgR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBhdHRhY2htZW50KSBvdmVycmlkZTsK
LSAgICAgICAgdm9pZCBhZGRNZW1iZXJzVG9PcGFxdWVSb290cyhjb25zdCBBYnN0cmFjdExvY2tl
ciYsIEpTQzo6U2xvdFZpc2l0b3ImKSBvdmVycmlkZTsKKyAgICAgICAgdm9pZCBhZGRNZW1iZXJz
VG9PcGFxdWVSb290cyhjb25zdCBBYnN0cmFjdExvY2tlciYsIEpTQzo6QWJzdHJhY3RTbG90Vmlz
aXRvciYpIG92ZXJyaWRlOwogCiAgICAgICAgIFdlYkdMUmVuZGVyYnVmZmVyQXR0YWNobWVudCgp
IHsgfTsKIApAQCAtMTQ1LDcgKzE0NSw3IEBAIG5hbWVzcGFjZSB7CiAgICAgICAgICAgICBjb250
ZXh0LT5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcih0YXJnZXQsIGF0dGFjaG1lbnQsIEdyYXBoaWNz
Q29udGV4dEdMOjpSRU5ERVJCVUZGRVIsIDApOwogICAgIH0KIAotICAgIHZvaWQgV2ViR0xSZW5k
ZXJidWZmZXJBdHRhY2htZW50OjphZGRNZW1iZXJzVG9PcGFxdWVSb290cyhjb25zdCBBYnN0cmFj
dExvY2tlciYsIEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCisgICAgdm9pZCBXZWJHTFJlbmRl
cmJ1ZmZlckF0dGFjaG1lbnQ6OmFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKGNvbnN0IEFic3RyYWN0
TG9ja2VyJiwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogICAgIHsKICAgICAg
ICAgdmlzaXRvci5hZGRPcGFxdWVSb290KG1fcmVuZGVyYnVmZmVyLmdldCgpKTsKICAgICB9CkBA
IC0xNjksNyArMTY5LDcgQEAgbmFtZXNwYWNlIHsKICAgICAgICAgdm9pZCBvbkRldGFjaGVkKGNv
bnN0IEFic3RyYWN0TG9ja2VyJiwgR3JhcGhpY3NDb250ZXh0R0wqKSBvdmVycmlkZTsKICAgICAg
ICAgdm9pZCBhdHRhY2goR3JhcGhpY3NDb250ZXh0R0wqLCBHQ0dMZW51bSB0YXJnZXQsIEdDR0xl
bnVtIGF0dGFjaG1lbnQpIG92ZXJyaWRlOwogICAgICAgICB2b2lkIHVuYXR0YWNoKEdyYXBoaWNz
Q29udGV4dEdMKiwgR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBhdHRhY2htZW50KSBvdmVycmlk
ZTsKLSAgICAgICAgdm9pZCBhZGRNZW1iZXJzVG9PcGFxdWVSb290cyhjb25zdCBBYnN0cmFjdExv
Y2tlciYsIEpTQzo6U2xvdFZpc2l0b3ImKSBvdmVycmlkZTsKKyAgICAgICAgdm9pZCBhZGRNZW1i
ZXJzVG9PcGFxdWVSb290cyhjb25zdCBBYnN0cmFjdExvY2tlciYsIEpTQzo6QWJzdHJhY3RTbG90
VmlzaXRvciYpIG92ZXJyaWRlOwogCiAgICAgICAgIFdlYkdMVGV4dHVyZUF0dGFjaG1lbnQoKSB7
IH07CiAKQEAgLTI2Nyw3ICsyNjcsNyBAQCBuYW1lc3BhY2UgewogI2VuZGlmCiAgICAgfQogCi0g
ICAgdm9pZCBXZWJHTFRleHR1cmVBdHRhY2htZW50OjphZGRNZW1iZXJzVG9PcGFxdWVSb290cyhj
b25zdCBBYnN0cmFjdExvY2tlciYsIEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCisgICAgdm9p
ZCBXZWJHTFRleHR1cmVBdHRhY2htZW50OjphZGRNZW1iZXJzVG9PcGFxdWVSb290cyhjb25zdCBB
YnN0cmFjdExvY2tlciYsIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKICAgICB7
CiAgICAgICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChtX3RleHR1cmUuZ2V0KCkpOwogICAgIH0K
QEAgLTcyMSw3ICs3MjEsNyBAQCBHQ0dMZW51bSBXZWJHTEZyYW1lYnVmZmVyOjpnZXREcmF3QnVm
ZmVyCiAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dEdMOjpOT05FOwogfQogCi12b2lkIFdlYkdM
RnJhbWVidWZmZXI6OmFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKGNvbnN0IEFic3RyYWN0TG9ja2Vy
JiBsb2NrZXIsIEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIFdlYkdMRnJhbWVidWZm
ZXI6OmFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKGNvbnN0IEFic3RyYWN0TG9ja2VyJiBsb2NrZXIs
IEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBmb3IgKGF1dG8mIGVu
dHJ5IDogbV9hdHRhY2htZW50cykKICAgICAgICAgZW50cnkudmFsdWUtPmFkZE1lbWJlcnNUb09w
YXF1ZVJvb3RzKGxvY2tlciwgdmlzaXRvcik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2Nh
bnZhcy9XZWJHTEZyYW1lYnVmZmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvV2ViR0xGcmFtZWJ1ZmZlci5oCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEZyYW1lYnVmZmVyLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzQs
NyArMzQsNyBAQAogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIEpTQyB7Ci1j
bGFzcyBTbG90VmlzaXRvcjsKK2NsYXNzIEFic3RyYWN0U2xvdFZpc2l0b3I7CiB9CiAKIG5hbWVz
cGFjZSBXVEYgewpAQCAtNjUsNyArNjUsNyBAQCBwdWJsaWM6CiAgICAgICAgIHZpcnR1YWwgdm9p
ZCBvbkRldGFjaGVkKGNvbnN0IFdURjo6QWJzdHJhY3RMb2NrZXImLCBHcmFwaGljc0NvbnRleHRH
TCopID0gMDsKICAgICAgICAgdmlydHVhbCB2b2lkIGF0dGFjaChHcmFwaGljc0NvbnRleHRHTCos
IEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gYXR0YWNobWVudCkgPSAwOwogICAgICAgICB2aXJ0
dWFsIHZvaWQgdW5hdHRhY2goR3JhcGhpY3NDb250ZXh0R0wqLCBHQ0dMZW51bSB0YXJnZXQsIEdD
R0xlbnVtIGF0dGFjaG1lbnQpID0gMDsKLSAgICAgICAgdmlydHVhbCB2b2lkIGFkZE1lbWJlcnNU
b09wYXF1ZVJvb3RzKGNvbnN0IFdURjo6QWJzdHJhY3RMb2NrZXImLCBKU0M6OlNsb3RWaXNpdG9y
JikgPSAwOworICAgICAgICB2aXJ0dWFsIHZvaWQgYWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMoY29u
c3QgV1RGOjpBYnN0cmFjdExvY2tlciYsIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpID0gMDsK
IAogICAgIHByb3RlY3RlZDoKICAgICAgICAgV2ViR0xBdHRhY2htZW50KCk7CkBAIC0xMTQsNyAr
MTE0LDcgQEAgcHVibGljOgogCiAgICAgR0NHTGVudW0gZ2V0RHJhd0J1ZmZlcihHQ0dMZW51bSk7
CiAKLSAgICB2b2lkIGFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKGNvbnN0IFdURjo6QWJzdHJhY3RM
b2NrZXImLCBKU0M6OlNsb3RWaXNpdG9yJik7CisgICAgdm9pZCBhZGRNZW1iZXJzVG9PcGFxdWVS
b290cyhjb25zdCBXVEY6OkFic3RyYWN0TG9ja2VyJiwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9y
Jik7CiAKIHByaXZhdGU6CiAgICAgV2ViR0xGcmFtZWJ1ZmZlcihXZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlJik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFByb2dyYW0u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUHJvZ3Jh
bS5jcHAJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dl
YkdMUHJvZ3JhbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAwOS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjA2LDcgKzIwNiw3IEBAIGJvb2wgV2ViR0xQ
cm9ncmFtOjpkZXRhY2hTaGFkZXIoY29uc3QgQWIKICAgICB9CiB9CiAKLXZvaWQgV2ViR0xQcm9n
cmFtOjphZGRNZW1iZXJzVG9PcGFxdWVSb290cyhjb25zdCBBYnN0cmFjdExvY2tlciYsIEpTQzo6
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIFdlYkdMUHJvZ3JhbTo6YWRkTWVtYmVyc1RvT3Bh
cXVlUm9vdHMoY29uc3QgQWJzdHJhY3RMb2NrZXImLCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3Im
IHZpc2l0b3IpCiB7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KG1fdmVydGV4U2hhZGVyLmdl
dCgpKTsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QobV9mcmFnbWVudFNoYWRlci5nZXQoKSk7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFByb2dyYW0uaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFByb2dyYW0uaAkocmV2aXNp
b24gMjcyOTAyKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xQcm9ncmFtLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5
LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDA5LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC0zNSw3ICszNSw3IEBACiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5o
PgogCiBuYW1lc3BhY2UgSlNDIHsKLWNsYXNzIFNsb3RWaXNpdG9yOworY2xhc3MgQWJzdHJhY3RT
bG90VmlzaXRvcjsKIH0KIAogbmFtZXNwYWNlIFdURiB7CkBAIC04OCw3ICs4OCw3IEBAIHB1Ymxp
YzoKICAgICAgICAgcmV0dXJuIG1fcmVxdWlyZWRUcmFuc2Zvcm1GZWVkYmFja0J1ZmZlckNvdW50
OwogICAgIH0KIAotICAgIHZvaWQgYWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMoY29uc3QgV1RGOjpB
YnN0cmFjdExvY2tlciYsIEpTQzo6U2xvdFZpc2l0b3ImKTsKKyAgICB2b2lkIGFkZE1lbWJlcnNU
b09wYXF1ZVJvb3RzKGNvbnN0IFdURjo6QWJzdHJhY3RMb2NrZXImLCBKU0M6OkFic3RyYWN0U2xv
dFZpc2l0b3ImKTsKIAogcHJpdmF0ZToKICAgICBXZWJHTFByb2dyYW0oV2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZSYpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9j
YW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHAJKHJldmlzaW9uIDI3MjkwMikKKysr
IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
NS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtNzkzMSw3ICs3OTMxLDcgQEAgdm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlOjpkaXNwYXRjaAogICAgIHF1ZXVlVGFza1RvRGlzcGF0Y2hFdmVudCgqY2Fu
dmFzLCBUYXNrU291cmNlOjpXZWJHTCwgV2ViR0xDb250ZXh0RXZlbnQ6OmNyZWF0ZShldmVudE5h
bWVzKCkud2ViZ2xjb250ZXh0Y2hhbmdlZEV2ZW50LCBFdmVudDo6Q2FuQnViYmxlOjpObywgRXZl
bnQ6OklzQ2FuY2VsYWJsZTo6WWVzLCBlbXB0eVN0cmluZygpKSk7CiB9CiAKLXZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZTo6YWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMoSlNDOjpTbG90Vmlz
aXRvciYgdmlzaXRvcikKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6YWRkTWVtYmVy
c1RvT3BhcXVlUm9vdHMoSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAg
IGF1dG8gbG9ja2VyID0gaG9sZExvY2sob2JqZWN0R3JhcGhMb2NrKCkpOwogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0
QmFzZS5oCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9X
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01OCw3ICs1OCw3
IEBACiAjZW5kaWYKIAogbmFtZXNwYWNlIEpTQyB7Ci1jbGFzcyBTbG90VmlzaXRvcjsKK2NsYXNz
IEFic3RyYWN0U2xvdFZpc2l0b3I7CiB9CiAKIG5hbWVzcGFjZSBXVEYgewpAQCAtNDExLDcgKzQx
MSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHJlY3ljbGVDb250ZXh0KCkgb3ZlcnJpZGU7CiAgICAg
dm9pZCBkaXNwYXRjaENvbnRleHRDaGFuZ2VkTm90aWZpY2F0aW9uKCkgb3ZlcnJpZGU7CiAKLSAg
ICB2aXJ0dWFsIHZvaWQgYWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMoSlNDOjpTbG90VmlzaXRvciYp
OworICAgIHZpcnR1YWwgdm9pZCBhZGRNZW1iZXJzVG9PcGFxdWVSb290cyhKU0M6OkFic3RyYWN0
U2xvdFZpc2l0b3ImKTsKICAgICAvLyBUaGlzIGxvY2sgbXVzdCBiZSBoZWxkIGFjcm9zcyBhbGwg
bXV0YXRpb25zIG9mIGNvbnRhaW5lcnMgbGlrZQogICAgIC8vIFZlY3RvcnMsIEhhc2hTZXRzLCBl
dGMuIHdoaWNoIGNvbnRhaW4gUmVmUHRyPFdlYkdMT2JqZWN0PiwgYW5kCiAgICAgLy8gd2hpY2gg
YXJlIHRyYXZlcnNlZCBieSBhZGRNZW1iZXJzVG9PcGFxdWVSb290cygpIG9yIGFueSBvZiB0aGUK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVHJhbnNmb3JtRmVlZGJhY2su
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVHJhbnNm
b3JtRmVlZGJhY2suY3BwCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9XZWJHTFRyYW5zZm9ybUZlZWRiYWNrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMCw4ICsz
MCw3IEBACiAKICNpbmNsdWRlICJXZWJHTENvbnRleHRHcm91cC5oIgogI2luY2x1ZGUgIldlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2UuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9TbG90Vmlz
aXRvci5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1Nsb3RWaXNpdG9ySW5saW5lcy5oPgor
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0Fic3RyYWN0U2xvdFZpc2l0b3JJbmxpbmVzLmg+CiAj
aW5jbHVkZSA8d3RmL0xvY2suaD4KICNpbmNsdWRlIDx3dGYvTG9ja2VyLmg+CiAKQEAgLTkzLDcg
KzkyLDcgQEAgYm9vbCBXZWJHTFRyYW5zZm9ybUZlZWRiYWNrOjpoYXNFbm91Z2hCdQogICAgIHJl
dHVybiB0cnVlOwogfQogCi12b2lkIFdlYkdMVHJhbnNmb3JtRmVlZGJhY2s6OmFkZE1lbWJlcnNU
b09wYXF1ZVJvb3RzKGNvbnN0IEFic3RyYWN0TG9ja2VyJiBsb2NrZXIsIEpTQzo6U2xvdFZpc2l0
b3ImIHZpc2l0b3IpCit2b2lkIFdlYkdMVHJhbnNmb3JtRmVlZGJhY2s6OmFkZE1lbWJlcnNUb09w
YXF1ZVJvb3RzKGNvbnN0IEFic3RyYWN0TG9ja2VyJiBsb2NrZXIsIEpTQzo6QWJzdHJhY3RTbG90
VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBmb3IgKGF1dG8mIGJ1ZmZlciA6IG1fYm91bmRJbmRl
eGVkVHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJzKQogICAgICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJv
b3QoYnVmZmVyLmdldCgpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdM
VHJhbnNmb3JtRmVlZGJhY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2Nh
bnZhcy9XZWJHTFRyYW5zZm9ybUZlZWRiYWNrLmgJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVHJhbnNmb3JtRmVlZGJhY2suaAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTMxLDcgKzMxLDcgQEAKICNpbmNsdWRlICJXZWJHTFNoYXJlZE9iamVjdC5oIgog
CiBuYW1lc3BhY2UgSlNDIHsKLWNsYXNzIFNsb3RWaXNpdG9yOworY2xhc3MgQWJzdHJhY3RTbG90
VmlzaXRvcjsKIH0KIAogbmFtZXNwYWNlIFdURiB7CkBAIC03MCw3ICs3MCw3IEBAIHB1YmxpYzoK
ICAgICAKICAgICBib29sIGhhc0Vub3VnaEJ1ZmZlcnMoR0NHTHVpbnQgbnVtUmVxdWlyZWQpIGNv
bnN0OwogCi0gICAgdm9pZCBhZGRNZW1iZXJzVG9PcGFxdWVSb290cyhjb25zdCBBYnN0cmFjdExv
Y2tlciYsIEpTQzo6U2xvdFZpc2l0b3ImKTsKKyAgICB2b2lkIGFkZE1lbWJlcnNUb09wYXF1ZVJv
b3RzKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAK
IHByaXZhdGU6CiAgICAgV2ViR0xUcmFuc2Zvcm1GZWVkYmFjayhXZWJHTDJSZW5kZXJpbmdDb250
ZXh0Jik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFZlcnRleEFycmF5
T2JqZWN0QmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
V2ViR0xWZXJ0ZXhBcnJheU9iamVjdEJhc2UuY3BwCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFZlcnRleEFycmF5T2JqZWN0QmFzZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIw
MTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1
LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0yOSw4ICsyOSw3IEBACiAjaWYgRU5BQkxFKFdFQkdMKQogCiAjaW5j
bHVkZSAiV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL1Nsb3RWaXNpdG9yLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvU2xvdFZpc2l0b3JJ
bmxpbmVzLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvQWJzdHJhY3RTbG90VmlzaXRvcklu
bGluZXMuaD4KICNpbmNsdWRlIDx3dGYvTG9ja2VyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
QEAgLTEwOSw3ICsxMDgsNyBAQCB2b2lkIFdlYkdMVmVydGV4QXJyYXlPYmplY3RCYXNlOjpzZXRW
ZXJ0CiAgICAgbV92ZXJ0ZXhBdHRyaWJTdGF0ZVtpbmRleF0uZGl2aXNvciA9IGRpdmlzb3I7CiB9
CiAKLXZvaWQgV2ViR0xWZXJ0ZXhBcnJheU9iamVjdEJhc2U6OmFkZE1lbWJlcnNUb09wYXF1ZVJv
b3RzKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3Zv
aWQgV2ViR0xWZXJ0ZXhBcnJheU9iamVjdEJhc2U6OmFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKGNv
bnN0IEFic3RyYWN0TG9ja2VyJiwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQog
ewogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChtX2JvdW5kRWxlbWVudEFycmF5QnVmZmVyLmdl
dCgpKTsKICAgICBmb3IgKGF1dG8mIHN0YXRlIDogbV92ZXJ0ZXhBdHRyaWJTdGF0ZSkKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVmVydGV4QXJyYXlPYmplY3RCYXNlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xWZXJ0ZXhBcnJh
eU9iamVjdEJhc2UuaAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9j
YW52YXMvV2ViR0xWZXJ0ZXhBcnJheU9iamVjdEJhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMy
LDcgKzMyLDcgQEAKICNpbmNsdWRlICJXZWJHTENvbnRleHRPYmplY3QuaCIKIAogbmFtZXNwYWNl
IEpTQyB7Ci1jbGFzcyBTbG90VmlzaXRvcjsKK2NsYXNzIEFic3RyYWN0U2xvdFZpc2l0b3I7CiB9
CiAKIG5hbWVzcGFjZSBXVEYgewpAQCAtNzcsNyArNzcsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lk
IHNldFZlcnRleEF0dHJpYkRpdmlzb3IoR0NHTHVpbnQgaW5kZXgsIEdDR0x1aW50IGRpdmlzb3Ip
OwogCi0gICAgdm9pZCBhZGRNZW1iZXJzVG9PcGFxdWVSb290cyhjb25zdCBXVEY6OkFic3RyYWN0
TG9ja2VyJiwgSlNDOjpTbG90VmlzaXRvciYpOworICAgIHZvaWQgYWRkTWVtYmVyc1RvT3BhcXVl
Um9vdHMoY29uc3QgV1RGOjpBYnN0cmFjdExvY2tlciYsIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRv
ciYpOwogCiBwcm90ZWN0ZWQ6CiAgICAgV2ViR0xWZXJ0ZXhBcnJheU9iamVjdEJhc2UoV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZSYsIFR5cGUpOwo=
</data>
<flag name="commit-queue"
          id="439058"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>420519</attachid>
            <date>2021-02-16 12:23:46 -0800</date>
            <delta_ts>2021-02-17 11:11:11 -0800</delta_ts>
            <desc>work in progress.</desc>
            <filename>bug-217274p3.patch</filename>
            <type>text/plain</type>
            <size>597348</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDI3MjkwMikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtNjEzLDYgKzYxMyw4IEBAIHNldChKYXZhU2NyaXB0Q29yZV9QUklWQVRFX0ZSQU1FV09SS19I
RUEKICAgICBkb21qaXQvRE9NSklUSGVhcFJhbmdlLmgKICAgICBkb21qaXQvRE9NSklUU2lnbmF0
dXJlLmgKIAorICAgIGhlYXAvQWJzdHJhY3RTbG90VmlzaXRvci5oCisgICAgaGVhcC9BYnN0cmFj
dFNsb3RWaXNpdG9ySW5saW5lcy5oCiAgICAgaGVhcC9BbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmgK
ICAgICBoZWFwL0FsbG9jYXRpb25GYWlsdXJlTW9kZS5oCiAgICAgaGVhcC9BbGxvY2F0b3IuaApA
QCAtNjc4LDYgKzY4MCw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9QUklWQVRFX0ZSQU1FV09SS19I
RUEKICAgICBoZWFwL01hcmtlZEJsb2NrU2V0LmgKICAgICBoZWFwL01hcmtlZFNwYWNlLmgKICAg
ICBoZWFwL01hcmtpbmdDb25zdHJhaW50LmgKKyAgICBoZWFwL01hcmtpbmdDb25zdHJhaW50RXhl
Y3V0b3JQYWlyLmgKICAgICBoZWFwL011dGF0b3JTdGF0ZS5oCiAgICAgaGVhcC9QYWNrZWRDZWxs
UHRyLmgKICAgICBoZWFwL1ByZWNpc2VBbGxvY2F0aW9uLmgKQEAgLTY4NywxMiArNjkwLDE0IEBA
IHNldChKYXZhU2NyaXB0Q29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUEKICAgICBoZWFwL1NpbXBs
ZU1hcmtpbmdDb25zdHJhaW50LmgKICAgICBoZWFwL1Nsb3RWaXNpdG9yLmgKICAgICBoZWFwL1Ns
b3RWaXNpdG9ySW5saW5lcy5oCisgICAgaGVhcC9TbG90VmlzaXRvck1hY3Jvcy5oCiAgICAgaGVh
cC9TdHJvbmcuaAogICAgIGhlYXAvU3Ryb25nSW5saW5lcy5oCiAgICAgaGVhcC9TdWJzcGFjZS5o
CiAgICAgaGVhcC9TdWJzcGFjZUlubGluZXMuaAogICAgIGhlYXAvU3luY2hyb25vdXNuZXNzLmgK
ICAgICBoZWFwL1RpbnlCbG9vbUZpbHRlci5oCisgICAgaGVhcC9WZXJpZmllclNsb3RWaXNpdG9y
LmgKICAgICBoZWFwL1Zpc2l0UmFjZUtleS5oCiAgICAgaGVhcC9XZWFrLmgKICAgICBoZWFwL1dl
YWtCbG9jay5oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CShyZXZpc2lvbiAyNzI5
MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQJKHdvcmtpbmcgY29weSkK
QEAgLTU2Myw2ICs1NjMsNyBAQCBoZWFwL1N0b3BJZk5lY2Vzc2FyeVRpbWVyLmNwcAogaGVhcC9T
dWJzcGFjZS5jcHAKIGhlYXAvU3luY2hyb25vdXNTdG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1bGVy
LmNwcAogaGVhcC9TeW5jaHJvbm91c25lc3MuY3BwCitoZWFwL1ZlcmlmaWVyU2xvdFZpc2l0b3Iu
Y3BwCiBoZWFwL1Zpc2l0UmFjZUtleS5jcHAKIGhlYXAvV2Vhay5jcHAKIGhlYXAvV2Vha0Jsb2Nr
LmNwcApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0FQSVdyYXBwZXJPYmplY3Qu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQVBJV3JhcHBlck9i
amVjdC5oCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pT
QVBJV3JhcHBlck9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDEsNyArNDEsNyBAQCBwdWJs
aWM6CiAgICAgc3RhdGljIHZvaWQgc3Vic3BhY2VGb3IoVk0mKSB7IFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7IH0KICAgICAKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7Ci0gICAg
c3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJik7Cisg
ICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTl9XSVRIX01PRElGSUVSKEpTX0VYUE9SVF9QUklWQVRF
KTsKICAgICAKICAgICB2b2lkKiB3cmFwcGVkT2JqZWN0KCkgeyByZXR1cm4gbV93cmFwcGVkT2Jq
ZWN0OyB9CiAgICAgdm9pZCBzZXRXcmFwcGVkT2JqZWN0KHZvaWQqKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9BUEkvSlNBUElXcmFwcGVyT2JqZWN0Lm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNBUElXcmFwcGVyT2JqZWN0Lm1tCShyZXZpc2lvbiAy
NzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQVBJV3JhcHBlck9iamVjdC5t
bQkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTM3LDcgKzM3LDcgQEAKIGNsYXNzIEpTQVBJV3JhcHBlck9i
amVjdEhhbmRsZU93bmVyIGZpbmFsIDogcHVibGljIEpTQzo6V2Vha0hhbmRsZU93bmVyIHsKIHB1
YmxpYzoKICAgICB2b2lkIGZpbmFsaXplKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQq
KSBmaW5hbDsKLSAgICBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxl
PEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6U2xvdFZpc2l0b3ImLCBjb25zdCBj
aGFyKiopIGZpbmFsOworICAgIGJvb2wgaXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpI
YW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCwgSlNDOjpBYnN0cmFjdFNsb3RWaXNp
dG9yJiwgY29uc3QgY2hhcioqKSBmaW5hbDsKIH07CiAKIHN0YXRpYyBKU0FQSVdyYXBwZXJPYmpl
Y3RIYW5kbGVPd25lcioganNBUElXcmFwcGVyT2JqZWN0SGFuZGxlT3duZXIoKQpAQCAtNTYsMTQg
KzU2LDE0IEBAIHZvaWQgSlNBUElXcmFwcGVyT2JqZWN0SGFuZGxlT3duZXI6OmZpbmEKICAgICBK
U0M6OldlYWtTZXQ6OmRlYWxsb2NhdGUoSlNDOjpXZWFrSW1wbDo6YXNXZWFrSW1wbChoYW5kbGUu
c2xvdCgpKSk7CiB9CiAKLWJvb2wgSlNBUElXcmFwcGVyT2JqZWN0SGFuZGxlT3duZXI6OmlzUmVh
Y2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2
b2lkKiwgSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqKQorYm9vbCBKU0FQ
SVdyYXBwZXJPYmplY3RIYW5kbGVPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlND
OjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBKU0M6OkFic3RyYWN0U2xvdFZp
c2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKikKIHsKICAgICBKU0M6OkpTQVBJV3JhcHBlck9i
amVjdCogd3JhcHBlck9iamVjdCA9IEpTQzo6anNDYXN0PEpTQzo6SlNBUElXcmFwcGVyT2JqZWN0
Kj4oaGFuZGxlLmdldCgpLmFzQ2VsbCgpKTsKICAgICAvLyBXZSB1c2UgdGhlIEpTR2xvYmFsT2Jq
ZWN0IHdoZW4gcHJvY2Vzc2luZyB3ZWFrIGhhbmRsZXMgdG8gcHJldmVudCB0aGUgc2l0dWF0aW9u
IHdoZXJlIHVzaW5nCiAgICAgLy8gdGhlIHNhbWUgT2JqZWN0aXZlLUMgb2JqZWN0IGluIG11bHRp
cGxlIGdsb2JhbCBvYmplY3RzIGtlZXBzIGFsbCBvZiB0aGUgZ2xvYmFsIG9iamVjdHMgYWxpdmUu
CiAgICAgaWYgKCF3cmFwcGVyT2JqZWN0LT53cmFwcGVkT2JqZWN0KCkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICByZXR1cm4gdmlzaXRvci52bSgpLmhlYXAuaXNNYXJrZWQod3JhcHBlck9i
amVjdC0+c3RydWN0dXJlKCktPmdsb2JhbE9iamVjdCgpKSAmJiB2aXNpdG9yLmNvbnRhaW5zT3Bh
cXVlUm9vdCh3cmFwcGVyT2JqZWN0LT53cmFwcGVkT2JqZWN0KCkpOworICAgIHJldHVybiB2aXNp
dG9yLmlzTWFya2VkKHdyYXBwZXJPYmplY3QtPnN0cnVjdHVyZSgpLT5nbG9iYWxPYmplY3QoKSkg
JiYgdmlzaXRvci5jb250YWluc09wYXF1ZVJvb3Qod3JhcHBlck9iamVjdC0+d3JhcHBlZE9iamVj
dCgpKTsKIH0KIAogbmFtZXNwYWNlIEpTQyB7CkBAIC03Myw2ICs3Myw4IEBAIHN0YXRpYyBKU0Nf
REVDTEFSRV9IT1NUX0ZVTkNUSU9OKGNvbnN0cnUKIHN0YXRpYyBKU0NfREVDTEFSRV9DVVNUT01f
R0VUVEVSKGNhbGxiYWNrR2V0dGVySlNBUElXcmFwcGVyT2JqZWN0Q2FsbGJhY2tPYmplY3QpOwog
c3RhdGljIEpTQ19ERUNMQVJFX0NVU1RPTV9HRVRURVIoc3RhdGljRnVuY3Rpb25HZXR0ZXJKU0FQ
SVdyYXBwZXJPYmplY3RDYWxsYmFja09iamVjdCk7CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTl9X
SVRIX01PRElGSUVSKHRlbXBsYXRlPD4sIEpTQ2FsbGJhY2tPYmplY3Q8SlNBUElXcmFwcGVyT2Jq
ZWN0Pik7CisKIHRlbXBsYXRlIDw+IGNvbnN0IENsYXNzSW5mbyBKU0NhbGxiYWNrT2JqZWN0PEpT
QVBJV3JhcHBlck9iamVjdD46OnNfaW5mbyA9IHsgIkpTQVBJV3JhcHBlck9iamVjdCIsICZCYXNl
OjpzX2luZm8sIG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNDYWxsYmFj
a09iamVjdCkgfTsKIHRlbXBsYXRlIDw+IGNvbnN0IGJvb2wgSlNDYWxsYmFja09iamVjdDxKU0FQ
SVdyYXBwZXJPYmplY3Q+OjpuZWVkc0Rlc3RydWN0aW9uID0gdHJ1ZTsKIApAQCAtMTIzLDcgKzEy
NSw4IEBAIHZvaWQgSlNBUElXcmFwcGVyT2JqZWN0OjpzZXRXcmFwcGVkT2JqZWMKICAgICBtX3dy
YXBwZWRPYmplY3QgPSBbc3RhdGljX2Nhc3Q8aWQ+KHdyYXBwZWRPYmplY3QpIHJldGFpbl07CiB9
CiAKLXZvaWQgSlNBUElXcmFwcGVyT2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwg
SlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2
b2lkIEpTQVBJV3JhcHBlck9iamVjdDo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBW
aXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTQVBJV3JhcHBlck9iamVjdCogdGhpc09iamVjdCA9
IEpTQzo6anNDYXN0PEpTQVBJV3JhcHBlck9iamVjdCo+KGNlbGwpOwogICAgIEJhc2U6OnZpc2l0
Q2hpbGRyZW4oY2VsbCwgdmlzaXRvcik7CkBAIC0xMzMsNiArMTM2LDggQEAgdm9pZCBKU0FQSVdy
YXBwZXJPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSgogICAgICAgICBzY2FuRXh0ZXJuYWxPYmplY3RH
cmFwaCh2aXNpdG9yLnZtKCksIHZpc2l0b3IsIHdyYXBwZWRPYmplY3QpOwogfQogCitERUZJTkVf
VklTSVRfQ0hJTERSRU5fV0lUSF9NT0RJRklFUihKU19FWFBPUlRfUFJJVkFURSwgSlNBUElXcmFw
cGVyT2JqZWN0KTsKKwogdGVtcGxhdGUgPD4KIElzb1N1YnNwYWNlKiBKU0NhbGxiYWNrT2JqZWN0
PEpTQVBJV3JhcHBlck9iamVjdD46OnN1YnNwYWNlRm9ySW1wbChWTSYgdm0sIFN1YnNwYWNlQWNj
ZXNzIG1vZGUpCiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tP
YmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxs
YmFja09iamVjdC5jcHAJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9BUEkvSlNDYWxsYmFja09iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMTcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwNyBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJr
aXQub3JnPgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtNDEsNiArNDEsOSBAQCBzdGF0aWMgSlNDX0RF
Q0xBUkVfQ1VTVE9NX0dFVFRFUihzdGF0aWNGCiBzdGF0aWMgSlNDX0RFQ0xBUkVfQ1VTVE9NX0dF
VFRFUihjYWxsYmFja0dldHRlckpTR2xvYmFsT2JqZWN0Q2FsbGJhY2tPYmplY3QpOwogc3RhdGlj
IEpTQ19ERUNMQVJFX0NVU1RPTV9HRVRURVIoc3RhdGljRnVuY3Rpb25HZXR0ZXJKU0dsb2JhbE9i
amVjdENhbGxiYWNrT2JqZWN0KTsKIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOX1dJVEhfTU9ESUZJ
RVIodGVtcGxhdGU8PiwgSlNDYWxsYmFja09iamVjdDxKU05vbkZpbmFsT2JqZWN0Pik7CitERUZJ
TkVfVklTSVRfQ0hJTERSRU5fV0lUSF9NT0RJRklFUih0ZW1wbGF0ZTw+LCBKU0NhbGxiYWNrT2Jq
ZWN0PEpTR2xvYmFsT2JqZWN0Pik7CisKIC8vIERlZmluZSB0aGUgdHdvIHR5cGVzIG9mIEpTQ2Fs
bGJhY2tPYmplY3RzIHdlIHN1cHBvcnQuCiB0ZW1wbGF0ZSA8PiBjb25zdCBDbGFzc0luZm8gSlND
YWxsYmFja09iamVjdDxKU05vbkZpbmFsT2JqZWN0Pjo6c19pbmZvID0geyAiQ2FsbGJhY2tPYmpl
Y3QiLCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxF
KEpTQ2FsbGJhY2tPYmplY3QpIH07CiB0ZW1wbGF0ZSA8PiBjb25zdCBDbGFzc0luZm8gSlNDYWxs
YmFja09iamVjdDxKU0dsb2JhbE9iamVjdD46OnNfaW5mbyA9IHsgIkNhbGxiYWNrR2xvYmFsT2Jq
ZWN0IiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJM
RShKU0NhbGxiYWNrT2JqZWN0KSB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9K
U0NhbGxiYWNrT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQ
SS9KU0NhbGxiYWNrT2JqZWN0LmgJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwNyBFcmljIFNlaWRlbCA8ZXJpY0B3
ZWJraXQub3JnPgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtNjksNyArNjksMTAgQEAgcHVibGljOgog
ICAgICAgICBtX3ByaXZhdGVQcm9wZXJ0aWVzLT5kZWxldGVQcml2YXRlUHJvcGVydHkocHJvcGVy
dHlOYW1lKTsKICAgICB9CiAKLSAgICB2b2lkIHZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZp
c2l0b3IpCisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKKworICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFZpc2l0b3I+CisgICAgdm9pZCB2aXNpdENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiAg
ICAgewogICAgICAgICBKU1ByaXZhdGVQcm9wZXJ0eU1hcCogcHJvcGVydGllcyA9IG1fcHJpdmF0
ZVByb3BlcnRpZXMuZ2V0KCk7CiAgICAgICAgIGlmICghcHJvcGVydGllcykKQEAgLTEwMyw3ICsx
MDYsOCBAQCBwdWJsaWM6CiAgICAgICAgICAgICBtX3Byb3BlcnR5TWFwLnJlbW92ZShwcm9wZXJ0
eU5hbWUuaW1wbCgpKTsKICAgICAgICAgfQogCi0gICAgICAgIHZvaWQgdmlzaXRDaGlsZHJlbihT
bG90VmlzaXRvciYgdmlzaXRvcikKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4K
KyAgICAgICAgdm9pZCB2aXNpdENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiAgICAgICAgIHsK
ICAgICAgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fbG9jayk7CiAgICAgICAgICAgICBmb3Ig
KGF1dG8mIHBhaXIgOiBtX3Byb3BlcnR5TWFwKSB7CkBAIC0yMTYsMTMgKzIyMCw3IEBAIHByaXZh
dGU6CiAgICAgc3RhdGljIENhbGxEYXRhIGdldENvbnN0cnVjdERhdGEoSlNDZWxsKik7CiAgICAg
c3RhdGljIENhbGxEYXRhIGdldENhbGxEYXRhKEpTQ2VsbCopOwogCi0gICAgc3RhdGljIHZvaWQg
dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQotICAgIHsK
LSAgICAgICAgSlNDYWxsYmFja09iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0NhbGxiYWNr
T2JqZWN0Kj4oY2VsbCk7Ci0gICAgICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoKHN0YXRp
Y19jYXN0PFBhcmVudCo+KHRoaXNPYmplY3QpKSwgSlNDYWxsYmFja09iamVjdDxQYXJlbnQ+Ojpp
bmZvKCkpOwotICAgICAgICBQYXJlbnQ6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRv
cik7Ci0gICAgICAgIHRoaXNPYmplY3QtPm1fY2FsbGJhY2tPYmplY3REYXRhLT52aXNpdENoaWxk
cmVuKHZpc2l0b3IpOwotICAgIH0KKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAg
dm9pZCBpbml0KEpTR2xvYmFsT2JqZWN0Kik7CiAgCkBAIC0yNDMsNiArMjQxLDE2IEBAIHByaXZh
dGU6CiAgICAgY29uc3QgQ2xhc3NJbmZvKiBtX2NsYXNzSW5mbyB7IG51bGxwdHIgfTsKIH07CiAK
K3RlbXBsYXRlIDxjbGFzcyBQYXJlbnQ+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9p
ZCBKU0NhbGxiYWNrT2JqZWN0PFBhcmVudD46OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2Vs
bCwgVmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBKU0NhbGxiYWNrT2JqZWN0KiB0aGlzT2JqZWN0
ID0ganNDYXN0PEpTQ2FsbGJhY2tPYmplY3QqPihjZWxsKTsKKyAgICBBU1NFUlRfR0NfT0JKRUNU
X0lOSEVSSVRTKChzdGF0aWNfY2FzdDxQYXJlbnQqPih0aGlzT2JqZWN0KSksIEpTQ2FsbGJhY2tP
YmplY3Q8UGFyZW50Pjo6aW5mbygpKTsKKyAgICBQYXJlbnQ6OnZpc2l0Q2hpbGRyZW4odGhpc09i
amVjdCwgdmlzaXRvcik7CisgICAgdGhpc09iamVjdC0+bV9jYWxsYmFja09iamVjdERhdGEtPnZp
c2l0Q2hpbGRyZW4odmlzaXRvcik7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAvLyBpbmNs
dWRlIHRoZSBhY3R1YWwgdGVtcGxhdGUgY2xhc3MgaW1wbGVtZW50YXRpb24KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNNYW5hZ2VkVmFsdWUubW0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU01hbmFnZWRWYWx1ZS5tbQkocmV2aXNpb24gMjcyOTAy
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU01hbmFnZWRWYWx1ZS5tbQkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC00Miw3ICs0Miw3IEBACiBjbGFzcyBKU01hbmFnZWRWYWx1ZUhhbmRsZU93
bmVyIGZpbmFsIDogcHVibGljIEpTQzo6V2Vha0hhbmRsZU93bmVyIHsKIHB1YmxpYzoKICAgICB2
b2lkIGZpbmFsaXplKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQpIGZp
bmFsOwotICAgIGJvb2wgaXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlND
OjpVbmtub3duPiwgdm9pZCogY29udGV4dCwgSlNDOjpTbG90VmlzaXRvciYsIGNvbnN0IGNoYXIq
KikgZmluYWw7CisgICAgYm9vbCBpc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRs
ZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0LCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3Im
LCBjb25zdCBjaGFyKiopIGZpbmFsOwogfTsKIAogc3RhdGljIEpTTWFuYWdlZFZhbHVlSGFuZGxl
T3duZXImIG1hbmFnZWRWYWx1ZUhhbmRsZU93bmVyKCkKQEAgLTE4MCw3ICsxODAsNyBAQCBAaW50
ZXJmYWNlIEpTTWFuYWdlZFZhbHVlIChQcml2YXRlTWV0aG9kCiAtICh2b2lkKWRpc2Nvbm5lY3RW
YWx1ZTsKIEBlbmQKIAotYm9vbCBKU01hbmFnZWRWYWx1ZUhhbmRsZU93bmVyOjppc1JlYWNoYWJs
ZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0
LCBKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQorYm9vbCBK
U01hbmFnZWRWYWx1ZUhhbmRsZU93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6
OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0LCBKU0M6OkFic3RyYWN0U2xvdFZp
c2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCiB7CiAgICAgaWYgKFVOTElLRUxZ
KHJlYXNvbikpCiAgICAgICAgICpyZWFzb24gPSAiSlNNYW5hZ2VkVmFsdWUgaXMgb3BhcXVlIHJv
b3QiOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU01hcmtpbmdDb25zdHJhaW50
UHJpdmF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU01h
cmtpbmdDb25zdHJhaW50UHJpdmF0ZS5jcHAJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9BUEkvSlNNYXJraW5nQ29uc3RyYWludFByaXZhdGUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zNiw3ICszNiw3IEBAIG5hbWVzcGFjZSB7CiBBdG9taWM8dW5zaWduZWQ+IGNv
bnN0cmFpbnRDb3VudGVyOwogCiBzdHJ1Y3QgTWFya2VyIDogSlNNYXJrZXIgewotICAgIFNsb3RW
aXNpdG9yKiB2aXNpdG9yOworICAgIEFic3RyYWN0U2xvdFZpc2l0b3IqIHZpc2l0b3I7CiB9Owog
CiBib29sIGlzTWFya2VkKEpTTWFya2VyUmVmIG1hcmtlclJlZiwgSlNPYmplY3RSZWYgb2JqZWN0
UmVmKQpAQCAtNDQsNyArNDQsNyBAQCBib29sIGlzTWFya2VkKEpTTWFya2VyUmVmIG1hcmtlclJl
ZiwgSlNPCiAgICAgaWYgKCFvYmplY3RSZWYpCiAgICAgICAgIHJldHVybiB0cnVlOyAvLyBOdWxs
IGlzIGFuIGltbW9ydGFsIG9iamVjdC4KICAgICAKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8TWFy
a2VyKj4obWFya2VyUmVmKS0+dmlzaXRvci0+dm0oKS5oZWFwLmlzTWFya2VkKHRvSlMob2JqZWN0
UmVmKSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PE1hcmtlcio+KG1hcmtlclJlZiktPnZpc2l0
b3ItPmlzTWFya2VkKHRvSlMob2JqZWN0UmVmKSk7CiB9CiAKIHZvaWQgbWFyayhKU01hcmtlclJl
ZiBtYXJrZXJSZWYsIEpTT2JqZWN0UmVmIG9iamVjdFJlZikKQEAgLTczLDE0ICs3MywxNCBAQCB2
b2lkIEpTQ29udGV4dEdyb3VwQWRkTWFya2luZ0NvbnN0cmFpbnQoCiAgICAgYXV0byBjb25zdHJh
aW50ID0gbWFrZVVuaXF1ZTxTaW1wbGVNYXJraW5nQ29uc3RyYWludD4oCiAgICAgICAgIHRvQ1N0
cmluZygiQW1jIiwgY29uc3RyYWludEluZGV4LCAiKCIsIFJhd1BvaW50ZXIoYml0d2lzZV9jYXN0
PHZvaWQqPihjb25zdHJhaW50Q2FsbGJhY2spKSwgIikiKSwKICAgICAgICAgdG9DU3RyaW5nKCJB
UEkgTWFya2luZyBDb25zdHJhaW50ICMiLCBjb25zdHJhaW50SW5kZXgsICIgKCIsIFJhd1BvaW50
ZXIoYml0d2lzZV9jYXN0PHZvaWQqPihjb25zdHJhaW50Q2FsbGJhY2spKSwgIiwgIiwgUmF3UG9p
bnRlcih1c2VyRGF0YSksICIpIiksCi0gICAgICAgIFtjb25zdHJhaW50Q2FsbGJhY2ssIHVzZXJE
YXRhXSAoU2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsKKyAgICAgICAgTUFLRV9NQVJLSU5HX0NPTlNU
UkFJTlRfRVhFQ1VUT1JfUEFJUigoW2NvbnN0cmFpbnRDYWxsYmFjaywgdXNlckRhdGFdIChBYnN0
cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKSB7CiAgICAgICAgICAgICBNYXJrZXIgbWFya2VyOwog
ICAgICAgICAgICAgbWFya2VyLklzTWFya2VkID0gaXNNYXJrZWQ7CiAgICAgICAgICAgICBtYXJr
ZXIuTWFyayA9IG1hcms7CiAgICAgICAgICAgICBtYXJrZXIudmlzaXRvciA9ICZ2aXNpdG9yOwog
ICAgICAgICAgICAgCiAgICAgICAgICAgICBjb25zdHJhaW50Q2FsbGJhY2soJm1hcmtlciwgdXNl
ckRhdGEpOwotICAgICAgICB9LAorICAgICAgICB9KSksCiAgICAgICAgIHZvbGF0aWxpdHksCiAg
ICAgICAgIENvbnN0cmFpbnRDb25jdXJyZW5jeTo6U2VxdWVudGlhbCk7CiAgICAgCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmlydHVhbE1hY2hpbmUubW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1ZpcnR1YWxNYWNoaW5lLm1tCShyZXZpc2lv
biAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmlydHVhbE1hY2hpbmUu
bW0JKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0zMTUsNyArMzE1LDcgQEAgKyAodm9pZClzZXRDcmFzaE9u
Vk1DcmVhdGlvbjooQk9PTClzaG91bAogCiBAZW5kCiAKLXN0YXRpYyB2b2lkIHNjYW5FeHRlcm5h
bE9iamVjdEdyYXBoKEpTQzo6Vk0mIHZtLCBKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yLCB2b2lk
KiByb290LCBib29sIGxvY2tBY3F1aXJlZCkKK3N0YXRpYyB2b2lkIHNjYW5FeHRlcm5hbE9iamVj
dEdyYXBoKEpTQzo6Vk0mIHZtLCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIHZv
aWQqIHJvb3QsIGJvb2wgbG9ja0FjcXVpcmVkKQogewogICAgIEBhdXRvcmVsZWFzZXBvb2wgewog
ICAgICAgICBKU1ZpcnR1YWxNYWNoaW5lICp2aXJ0dWFsTWFjaGluZSA9IFtKU1ZNV3JhcHBlckNh
Y2hlIHdyYXBwZXJGb3JKU0NvbnRleHRHcm91cFJlZjp0b1JlZigmdm0pXTsKQEAgLTM0NywxMyAr
MzQ3LDEzIEBAIHN0YXRpYyB2b2lkIHNjYW5FeHRlcm5hbE9iamVjdEdyYXBoKEpTQzoKICAgICB9
CiB9CiAKLXZvaWQgc2NhbkV4dGVybmFsT2JqZWN0R3JhcGgoSlNDOjpWTSYgdm0sIEpTQzo6U2xv
dFZpc2l0b3ImIHZpc2l0b3IsIHZvaWQqIHJvb3QpCit2b2lkIHNjYW5FeHRlcm5hbE9iamVjdEdy
YXBoKEpTQzo6Vk0mIHZtLCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIHZvaWQq
IHJvb3QpCiB7CiAgICAgYm9vbCBsb2NrQWNxdWlyZWQgPSBmYWxzZTsKICAgICBzY2FuRXh0ZXJu
YWxPYmplY3RHcmFwaCh2bSwgdmlzaXRvciwgcm9vdCwgbG9ja0FjcXVpcmVkKTsKIH0KIAotdm9p
ZCBzY2FuRXh0ZXJuYWxSZW1lbWJlcmVkU2V0KEpTQzo6Vk0mIHZtLCBKU0M6OlNsb3RWaXNpdG9y
JiB2aXNpdG9yKQordm9pZCBzY2FuRXh0ZXJuYWxSZW1lbWJlcmVkU2V0KEpTQzo6Vk0mIHZtLCBK
U0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgQGF1dG9yZWxlYXNlcG9v
bCB7CiAgICAgICAgIEpTVmlydHVhbE1hY2hpbmUgKnZpcnR1YWxNYWNoaW5lID0gW0pTVk1XcmFw
cGVyQ2FjaGUgd3JhcHBlckZvckpTQ29udGV4dEdyb3VwUmVmOnRvUmVmKCZ2bSldOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1ZpcnR1YWxNYWNoaW5lSW50ZXJuYWwuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmlydHVhbE1hY2hpbmVJbnRl
cm5hbC5oCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pT
VmlydHVhbE1hY2hpbmVJbnRlcm5hbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMyLDcgKzMyLDcg
QEAKIAogbmFtZXNwYWNlIEpTQyB7CiBjbGFzcyBWTTsKLWNsYXNzIFNsb3RWaXNpdG9yOworY2xh
c3MgQWJzdHJhY3RTbG90VmlzaXRvcjsKIH0KIAogI2lmIGRlZmluZWQoX19PQkpDX18pCkBAIC01
NCw4ICs1NCw4IEBAIEpTQ29udGV4dEdyb3VwUmVmIGdldEdyb3VwRnJvbVZpcnR1YWxNYWMKIAog
I2VuZGlmIC8vIGRlZmluZWQoX19PQkpDX18pCiAKLXZvaWQgc2NhbkV4dGVybmFsT2JqZWN0R3Jh
cGgoSlNDOjpWTSYsIEpTQzo6U2xvdFZpc2l0b3ImLCB2b2lkKiByb290KTsKLXZvaWQgc2NhbkV4
dGVybmFsUmVtZW1iZXJlZFNldChKU0M6OlZNJiwgSlNDOjpTbG90VmlzaXRvciYpOwordm9pZCBz
Y2FuRXh0ZXJuYWxPYmplY3RHcmFwaChKU0M6OlZNJiwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9y
Jiwgdm9pZCogcm9vdCk7Cit2b2lkIHNjYW5FeHRlcm5hbFJlbWVtYmVyZWRTZXQoSlNDOjpWTSYs
IEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpOwogCiAjZW5kaWYgLy8gSlNDX09CSkNfQVBJX0VO
QUJMRUQKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9NYXJrZWRKU1ZhbHVlUmVm
QXJyYXkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvTWFya2Vk
SlNWYWx1ZVJlZkFycmF5LmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL0FQSS9NYXJrZWRKU1ZhbHVlUmVmQXJyYXkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAtMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ2LDcg
KzQ2LDggQEAgTWFya2VkSlNWYWx1ZVJlZkFycmF5Ojp+TWFya2VkSlNWYWx1ZVJlZgogICAgICAg
ICByZW1vdmUoKTsKIH0KIAotdm9pZCBNYXJrZWRKU1ZhbHVlUmVmQXJyYXk6OnZpc2l0QWdncmVn
YXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3Zv
aWQgTWFya2VkSlNWYWx1ZVJlZkFycmF5Ojp2aXNpdEFnZ3JlZ2F0ZShWaXNpdG9yJiB2aXNpdG9y
KQogewogICAgIEpTVmFsdWVSZWYqIGJ1ZmZlciA9IGRhdGEoKTsKICAgICBmb3IgKHVuc2lnbmVk
IGluZGV4ID0gMDsgaW5kZXggPCBtX3NpemU7ICsraW5kZXgpIHsKQEAgLTYyLDQgKzYzLDcgQEAg
dm9pZCBNYXJrZWRKU1ZhbHVlUmVmQXJyYXk6OnZpc2l0QWdncmVnYQogICAgIH0KIH0KIAordGVt
cGxhdGUgdm9pZCBNYXJrZWRKU1ZhbHVlUmVmQXJyYXk6OnZpc2l0QWdncmVnYXRlKEFic3RyYWN0
U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgTWFya2VkSlNWYWx1ZVJlZkFycmF5Ojp2aXNp
dEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYpOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvTWFya2VkSlNWYWx1ZVJlZkFycmF5LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9NYXJrZWRKU1ZhbHVlUmVmQXJyYXkuaAko
cmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9NYXJrZWRKU1Zh
bHVlUmVmQXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDIwLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02Miw3ICs2Miw3IEBAIHB1YmxpYzoKICAgICAg
ICAgcmV0dXJuIG1faW5saW5lQnVmZmVyOwogICAgIH0KIAotICAgIHZvaWQgdmlzaXRBZ2dyZWdh
dGUoU2xvdFZpc2l0b3ImKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIHZp
c2l0QWdncmVnYXRlKFZpc2l0b3ImKTsKIAogcHJpdmF0ZToKICAgICB1bnNpZ25lZCBtX3NpemU7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNBUElXcmFwcGVyR2xvYmFs
T2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIv
SlNBUElXcmFwcGVyR2xvYmFsT2JqZWN0LmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQVBJV3JhcHBlckdsb2JhbE9iamVjdC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTU5LDYgKzU5LDggQEAgc3RhdGljIEpTQ19ERUNMQVJFX0hPU1RfRlVO
Q1RJT04oY29uc3RydQogc3RhdGljIEpTQ19ERUNMQVJFX0NVU1RPTV9HRVRURVIoY2FsbGJhY2tH
ZXR0ZXJKU0FQSVdyYXBwZXJHbG9iYWxPYmplY3RDYWxsYmFja09iamVjdCk7CiBzdGF0aWMgSlND
X0RFQ0xBUkVfQ1VTVE9NX0dFVFRFUihzdGF0aWNGdW5jdGlvbkdldHRlckpTQVBJV3JhcHBlckds
b2JhbE9iamVjdENhbGxiYWNrT2JqZWN0KTsKIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOX1dJVEhf
TU9ESUZJRVIodGVtcGxhdGU8PiwgSlNDYWxsYmFja09iamVjdDxKU0FQSVdyYXBwZXJHbG9iYWxP
YmplY3Q+KTsKKwogdGVtcGxhdGUgPD4gY29uc3QgQ2xhc3NJbmZvIEpTQ2FsbGJhY2tPYmplY3Q8
SlNBUElXcmFwcGVyR2xvYmFsT2JqZWN0Pjo6c19pbmZvID0geyAiSlNBUElXcmFwcGVyR2xvYmFs
T2JqZWN0IiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9U
QUJMRShKU0NhbGxiYWNrT2JqZWN0KSB9OwogdGVtcGxhdGU8PiBjb25zdCBib29sIEpTQ2FsbGJh
Y2tPYmplY3Q8SlNBUElXcmFwcGVyR2xvYmFsT2JqZWN0Pjo6bmVlZHNEZXN0cnVjdGlvbiA9IHRy
dWU7CiAKQEAgLTE0NCw5ICsxNDYsNCBAQCB2b2lkIEpTQVBJV3JhcHBlckdsb2JhbE9iamVjdDo6
ZmluaXNoQ3JlCiAgICAgV2Vha1NldDo6YWxsb2NhdGUodGhpcywganNBUElXcmFwcGVyR2xvYmFs
T2JqZWN0SGFuZGxlT3duZXIoKSwgMCk7IC8vIEJhbGFuY2VkIGluIEpTQVBJV3JhcHBlckdsb2Jh
bE9iamVjdEhhbmRsZU93bmVyOjpmaW5hbGl6ZS4KIH0KIAotdm9pZCBKU0FQSVdyYXBwZXJHbG9i
YWxPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBKU0M6OlNsb3RWaXNpdG9yJiB2
aXNpdG9yKQotewotICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4oY2VsbCwgdmlzaXRvcik7Ci19Ci0K
IH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGli
L0pTQVBJV3JhcHBlckdsb2JhbE9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvZ2xpYi9KU0FQSVdyYXBwZXJHbG9iYWxPYmplY3QuaAkocmV2aXNpb24gMjcy
OTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQVBJV3JhcHBlckdsb2Jh
bE9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw3ICszOSw2IEBAIHB1YmxpYzoKICAgICBz
dGF0aWMgdm9pZCBzdWJzcGFjZUZvcihWTSYpIHsgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsgfQogCiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOwotICAgIHN0YXRpYyB2b2lkIHZp
c2l0Q2hpbGRyZW4oSlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpOwogCiAgICAgSlNDR0xpYldy
YXBwZXJPYmplY3QqIHdyYXBwZWRPYmplY3QoKSBjb25zdCB7IHJldHVybiBtX3dyYXBwZWRPYmpl
Y3Q7IH0KICAgICB2b2lkIHNldFdyYXBwZWRPYmplY3QoSlNDR0xpYldyYXBwZXJPYmplY3QqIHdy
YXBwZWRPYmplY3QpIHsgbV93cmFwcGVkT2JqZWN0ID0gd3JhcHBlZE9iamVjdDsgfQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQVBJV3JhcHBlck9iamVjdEdMaWIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0FQSVdyYXBw
ZXJPYmplY3RHTGliLmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL0FQSS9nbGliL0pTQVBJV3JhcHBlck9iamVjdEdMaWIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSlNBUElXcmFw
cGVyT2JqZWN0LmgiCiAKKyNpbmNsdWRlICJBYnN0cmFjdFNsb3RWaXNpdG9yLmgiCiAjaW5jbHVk
ZSAiSlNDR0xpYldyYXBwZXJPYmplY3QuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5j
bHVkZSAiSlNDYWxsYmFja09iamVjdC5oIgpAQCAtMzYsNyArMzcsNyBAQAogY2xhc3MgSlNBUElX
cmFwcGVyT2JqZWN0SGFuZGxlT3duZXIgZmluYWwgOiBwdWJsaWMgSlNDOjpXZWFrSGFuZGxlT3du
ZXIgewogcHVibGljOgogICAgIHZvaWQgZmluYWxpemUoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3du
Piwgdm9pZCopIGZpbmFsOwotICAgIGJvb2wgaXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlND
OjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCwgSlNDOjpTbG90VmlzaXRvciYs
IGNvbnN0IGNoYXIqKikgZmluYWw7CisgICAgYm9vbCBpc1JlYWNoYWJsZUZyb21PcGFxdWVSb290
cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0LCBKU0M6OkFic3RyYWN0
U2xvdFZpc2l0b3ImLCBjb25zdCBjaGFyKiopIGZpbmFsOwogfTsKIAogc3RhdGljIEpTQVBJV3Jh
cHBlck9iamVjdEhhbmRsZU93bmVyKiBqc0FQSVdyYXBwZXJPYmplY3RIYW5kbGVPd25lcigpCkBA
IC01NSw3ICs1Niw3IEBAIHZvaWQgSlNBUElXcmFwcGVyT2JqZWN0SGFuZGxlT3duZXI6OmZpbmEK
ICAgICBKU0M6OldlYWtTZXQ6OmRlYWxsb2NhdGUoSlNDOjpXZWFrSW1wbDo6YXNXZWFrSW1wbCho
YW5kbGUuc2xvdCgpKSk7CiB9CiAKLWJvb2wgSlNBUElXcmFwcGVyT2JqZWN0SGFuZGxlT3duZXI6
OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFu
ZGxlLCB2b2lkKiwgSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqKQorYm9v
bCBKU0FQSVdyYXBwZXJPYmplY3RIYW5kbGVPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9v
dHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBKU0M6OkFic3RyYWN0
U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKikKIHsKICAgICBKU0M6OkpTQVBJV3Jh
cHBlck9iamVjdCogd3JhcHBlck9iamVjdCA9IEpTQzo6anNDYXN0PEpTQzo6SlNBUElXcmFwcGVy
T2JqZWN0Kj4oaGFuZGxlLmdldCgpLmFzQ2VsbCgpKTsKICAgICAvLyBXZSB1c2UgdGhlIEpTR2xv
YmFsT2JqZWN0IHdoZW4gcHJvY2Vzc2luZyB3ZWFrIGhhbmRsZXMgdG8gcHJldmVudCB0aGUgc2l0
dWF0aW9uIHdoZXJlIHVzaW5nCkBAIC03Miw2ICs3Myw4IEBAIHN0YXRpYyBKU0NfREVDTEFSRV9I
T1NUX0ZVTkNUSU9OKGNvbnN0cnUKIHN0YXRpYyBKU0NfREVDTEFSRV9DVVNUT01fR0VUVEVSKGNh
bGxiYWNrR2V0dGVySlNBUElXcmFwcGVyT2JqZWN0Q2FsbGJhY2tPYmplY3QpOwogc3RhdGljIEpT
Q19ERUNMQVJFX0NVU1RPTV9HRVRURVIoc3RhdGljRnVuY3Rpb25HZXR0ZXJKU0FQSVdyYXBwZXJP
YmplY3RDYWxsYmFja09iamVjdCk7CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTl9XSVRIX01PRElG
SUVSKHRlbXBsYXRlPD4sIEpTQ2FsbGJhY2tPYmplY3Q8SlNBUElXcmFwcGVyT2JqZWN0Pik7CisK
IHRlbXBsYXRlIDw+IGNvbnN0IENsYXNzSW5mbyBKU0NhbGxiYWNrT2JqZWN0PEpTQVBJV3JhcHBl
ck9iamVjdD46OnNfaW5mbyA9IHsgIkpTQVBJV3JhcHBlck9iamVjdCIsICZCYXNlOjpzX2luZm8s
IG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNDYWxsYmFja09iamVjdCkg
fTsKIHRlbXBsYXRlPD4gY29uc3QgYm9vbCBKU0NhbGxiYWNrT2JqZWN0PEpTQVBJV3JhcHBlck9i
amVjdD46Om5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOwogCkBAIC0xNTUsOSArMTU4LDEyIEBAIHZv
aWQgSlNBUElXcmFwcGVyT2JqZWN0OjpzZXRXcmFwcGVkT2JqZWMKICAgICBtX3dyYXBwZWRPYmpl
Y3QgPSB3cmFwcGVkT2JqZWN0OwogfQogCi12b2lkIEpTQVBJV3JhcHBlck9iamVjdDo6dmlzaXRD
aGlsZHJlbihKU0NlbGwqIGNlbGwsIEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0
ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0FQSVdyYXBwZXJPYmplY3Q6OnZpc2l0Q2hpbGRy
ZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBCYXNlOjp2aXNp
dENoaWxkcmVuKGNlbGwsIHZpc2l0b3IpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU5fV0lU
SF9NT0RJRklFUihKU19FWFBPUlRfUFJJVkFURSwgSlNBUElXcmFwcGVyT2JqZWN0KTsKKwogfSAv
LyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNp
b24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTExNTgsNiArMTE1OCw3IEBA
CiAJCTY1QjgzOTJFMUJBQ0FEMzYwMDQ0RTgyNCAvKiBDYWNoZWRSZWNvdmVyeS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjVCODM5MkMxQkFDQTkyQTAw
NDRFODI0IC8qIENhY2hlZFJlY292ZXJ5LmggKi87IH07CiAJCTZBMzhDRkFBMUUzMkI1QUIwMDYw
MjA2RiAvKiBBc3luY1N0YWNrVHJhY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDZBMzhDRkE4MUUzMkI1OEIwMDYwMjA2RiAvKiBBc3luY1N0YWNrVHJh
Y2UuaCAqLzsgfTsKIAkJNkFEMkNCNEQxOUI5MTQwMTAwMDY1NzE5IC8qIERlYnVnZ2VyRXZhbEVu
YWJsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZB
RDJDQjRDMTlCOTE0MDEwMDA2NTcxOSAvKiBEZWJ1Z2dlckV2YWxFbmFibGVyLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNkJDQ0VDMDQyNUQxRkEy
NzAwMEYzOTFEIC8qIFZlcmlmaWVyU2xvdFZpc2l0b3JJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2QkNDRUMwMzI1RDFGQTI3MDAwRjM5MUQg
LyogVmVyaWZpZXJTbG90VmlzaXRvcklubGluZXMuaCAqLzsgfTsKIAkJNzAxMTNENEMxQThEQjA5
MzAwMzg0OEM0IC8qIEl0ZXJhdG9yT3BlcmF0aW9ucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzAxMTNENEExQThEQjA5MzAwMzg0OEM0IC8qIEl0ZXJh
dG9yT3BlcmF0aW9ucy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTcwMTNDQThDMUI0OTFBOTQwMENBRTYxMyAvKiBKU01pY3JvdGFzay5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzAxM0NBOEExQjQ5MUE5
NDAwQ0FFNjEzIC8qIEpTTWljcm90YXNrLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzA1QjQxQUMxQTZFNTAxRTAwNzE2NzU3IC8qIFN5bWJvbC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzA1QjQxQTQx
QTZFNTAxRTAwNzE2NzU3IC8qIFN5bWJvbC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CkBAIC0xOTIwLDYgKzE5MjEsNyBAQAogCQlFM0ZGNzUzMzFEOUNF
QTE4MDBDN0UxNkQgLyogRE9NSklUR2V0dGVyU2V0dGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFM0ZGNzUyRjFEOUNFQTEyMDBDN0UxNkQgLyogRE9N
SklUR2V0dGVyU2V0dGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJRTQ5REMxNkMxMkVGMjk0RTAwMTg0QTFGIC8qIFNvdXJjZVByb3ZpZGVyQ2Fj
aGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0OURD
MTUxMTJFRjI3MjIwMDE4NEExRiAvKiBTb3VyY2VQcm92aWRlckNhY2hlLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTQ5REMxNkQxMkVGMjk1MzAw
MTg0QTFGIC8qIFNvdXJjZVByb3ZpZGVyQ2FjaGVJdGVtLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDlEQzE0OTEyRUYyNjFBMDAxODRBMUYgLyogU291
cmNlUHJvdmlkZXJDYWNoZUl0ZW0uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OworCQlGRTA0MTU1MzI1MkVDMDczMDA5MUVCNUQgLyogU2xvdFZpc2l0b3JN
YWNyb3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZF
MDQxNTUyMjUyRUMwNzMwMDkxRUI1RCAvKiBTbG90VmlzaXRvck1hY3Jvcy5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUZFMDVGQUZEMUZFNENFREEw
MDA5MzIzMCAvKiBEZXByZWNhdGVkSW5zcGVjdG9yVmFsdWVzLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk5MkQ2QTExMUZCRDQ5MUQwMDAyNDVGNCAv
KiBEZXByZWNhdGVkSW5zcGVjdG9yVmFsdWVzLmNwcCAqLzsgfTsKIAkJRkUwODZCQ0EyMTIzREVG
QjAwM0YyOTI5IC8qIEVudHJ5RnJhbWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEZFMDg2QkM5MjEyM0RFRkEwMDNGMjkyOSAvKiBFbnRyeUZyYW1lLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRkUwRDRB
MDYxQUI4REQwQTAwMkY1NEJGIC8qIEV4ZWN1dGlvblRpbWVMaW1pdFRlc3QuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUwRDRBMDQxQUI4REQwQTAw
MkY1NEJGIC8qIEV4ZWN1dGlvblRpbWVMaW1pdFRlc3QuY3BwICovOyB9OwpAQCAtMTk0Miw5ICsx
OTQ0LDExIEBACiAJCUZFMUUyQzNGMjI0MERENTgwMEY2QjcyOSAvKiBNYWNyb0Fzc2VtYmxlckFS
TTY0RS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUx
RTJDM0UyMjQwRDMwQjAwRjZCNzI5IC8qIE1hY3JvQXNzZW1ibGVyQVJNNjRFLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRkUxRTJDNDAyMjQwREQ2
MjAwRjZCNzI5IC8qIEFSTTY0RUFzc2VtYmxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRkUxRTJDM0QyMjQwRDJGNjAwRjZCNzI5IC8qIEFSTTY0RUFz
c2VtYmxlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCUZFMjBDRTlFMTVGMDRBOTUwMERGMzQzMCAvKiBMTEludENMb29wLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTIwQ0U5QzE1RjA0QTk1MDBERjM0
MzAgLyogTExJbnRDTG9vcC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CisJCUZFMjg3RDAyMjUyRkIyRTgwMEQ3MjNGOSAvKiBWZXJpZmllclNsb3RWaXNp
dG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTI4
N0QwMTI1MkZCMkU4MDBENzIzRjkgLyogVmVyaWZpZXJTbG90VmlzaXRvci5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUZFMkE4NzYwMUYwMjM4MTYw
MEVCMzFCMiAvKiBNaW5pbXVtUmVzZXJ2ZWRab25lU2l6ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUyQTg3NUYxRjAyMzgxNjAwRUIzMUIyIC8qIE1p
bmltdW1SZXNlcnZlZFpvbmVTaXplLmggKi87IH07CiAJCUZFMzAyMkQzMUUzRDczQTUwMEJBQzQ5
MyAvKiBTaWdpbGxDcmFzaEFuYWx5emVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBGRTMwMjJEMTFFM0Q3Mzk2MDBCQUM0OTMgLyogU2lnaWxsQ3Jhc2hB
bmFseXplci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCUZFMzAyMkQ3MUU0Mjg1NzMwMEJBQzQ5MyAvKiBWTUluc3BlY3Rvci5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUzMDIyRDUxRTQyODU2NzAwQkFD
NDkzIC8qIFZNSW5zcGVjdG9yLmggKi87IH07CisJCUZFMzM2QjUzMjVEQjQ5N0QwMDk4RjAzNCAv
KiBNYXJraW5nQ29uc3RyYWludEV4ZWN1dG9yUGFpci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUzMzZCNTIyNURCNDk3RDAwOThGMDM0IC8qIE1hcmtp
bmdDb25zdHJhaW50RXhlY3V0b3JQYWlyLmggKi87IH07CiAJCUZFMzQyMjEyMUQ2QjgxQzMwMDMy
QkU4OCAvKiBUaHJvd1Njb3BlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBGRTM0MjIxMTFENkI4MThDMDAzMkJFODggLyogVGhyb3dTY29wZS5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUZFMzRFRTIxMjQz
OThBQUUwMEFBMkU3QyAvKiBFbnN1cmVTdGlsbEFsaXZlSGVyZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUzNEVFMjAyNDM5OEE5QTAwQUEyRTdDIC8q
IEVuc3VyZVN0aWxsQWxpdmVIZXJlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJRkUzODQyMzMyMzI0RDUxQjAwOURENDQ1IC8qIE9wdGlvbnNMaXN0
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTM4NDIz
MTIzMjRENTFCMDA5REQ0NDUgLyogT3B0aW9uc0xpc3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMTk4MCw2ICsxOTg0LDggQEAKIAkJRkU4MEMx
OTcxRDc3NUNERDAwODUxMEMwIC8qIENhdGNoU2NvcGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFODBDMTk2MUQ3NzVCMjcwMDg1MTBDMCAvKiBDYXRj
aFNjb3BlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJRkU4REU1NEIyM0FDMURBRDAwNUM5MTQyIC8qIENhY2hlYWJsZUlkZW50aWZpZXIuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFOERFNTRBMjNBQzFE
QUQwMDVDOTE0MiAvKiBDYWNoZWFibGVJZGVudGlmaWVyLmggKi87IH07CiAJCUZFOERFNTREMjNB
QzFFODYwMDVDOTE0MiAvKiBDYWNoZWFibGVJZGVudGlmaWVySW5saW5lcy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkU4REU1NEMyM0FDMUU4NjAwNUM5
MTQyIC8qIENhY2hlYWJsZUlkZW50aWZpZXJJbmxpbmVzLmggKi87IH07CisJCUZFOTEyQjRGMjUz
MTE5MzMwMEZBQkRERiAvKiBBYnN0cmFjdFNsb3RWaXNpdG9yLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTkxMkI0RTI1MzExOTMzMDBGQUJEREYgLyog
QWJzdHJhY3RTbG90VmlzaXRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CisJCUZFOTEyQjUxMjUzMTFBRDEwMEZBQkRERiAvKiBBYnN0cmFjdFNsb3RW
aXNpdG9ySW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gRkU5MTJCNTAyNTMxMUFEMTAwRkFCRERGIC8qIEFic3RyYWN0U2xvdFZpc2l0b3JJbmxp
bmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
RkU5OUIyNDkxQzI0QzNEMzAwQzgyMTU5IC8qIEpJVE5lZ0dlbmVyYXRvci5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkU5OUIyNDgxQzI0QjZEMzAwQzgy
MTU5IC8qIEpJVE5lZ0dlbmVyYXRvci5oICovOyB9OwogCQlGRUEwODYyMDE4MkI3QTA0MDBGNkQ4
NTEgLyogQnJlYWtwb2ludC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRkVBMDg2MUUxODJCN0EwNDAwRjZEODUxIC8qIEJyZWFrcG9pbnQuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlGRUEwODYyMTE4MkI3
QTA0MDBGNkQ4NTEgLyogRGVidWdnZXJQcmltaXRpdmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRUEwODYxRjE4MkI3QTA0MDBGNkQ4NTEgLyogRGVi
dWdnZXJQcmltaXRpdmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKQEAgLTM5OTEsNiArMzk5Nyw3IEBACiAJCTZBMzhDRkE4MUUzMkI1OEIwMDYwMjA2
RiAvKiBBc3luY1N0YWNrVHJhY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
QXN5bmNTdGFja1RyYWNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZBRDJDQjRD
MTlCOTE0MDEwMDA2NTcxOSAvKiBEZWJ1Z2dlckV2YWxFbmFibGVyLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IERlYnVnZ2VyRXZhbEVuYWJsZXIuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNkJBOTNDOTU5MDQ4NEM1QkFEOTMxNkVBIC8qIEpTU2NyaXB0RmV0Y2hl
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1NjcmlwdEZldGNoZXIuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNkJDQ0VDMDMyNUQxRkEyNzAwMEYzOTFEIC8q
IFZlcmlmaWVyU2xvdFZpc2l0b3JJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFZlcmlmaWVyU2xvdFZpc2l0b3JJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTcwMTEzRDQ5MUE4REIwOTMwMDM4NDhDNCAvKiBJdGVyYXRvck9wZXJhdGlvbnMu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSXRlcmF0b3JPcGVyYXRp
b25zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzAxMTNENEExQThEQjA5MzAw
Mzg0OEM0IC8qIEl0ZXJhdG9yT3BlcmF0aW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBJdGVyYXRvck9wZXJhdGlvbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNzAxM0NBODkxQjQ5MUE5NDAwQ0FFNjEzIC8qIEpTTWljcm90YXNrLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTTWljcm90YXNrLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTUyMjcsNiArNTIzNCw3IEBACiAJCUY2OTJBODg3MDI1NTU5N0Qw
MUZGNjBGNyAvKiBKU0NKU1ZhbHVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTQ0pTVmFsdWUuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB0YWJXaWR0aCA9IDg7IH07CiAJCUY3MzkyNjkxOERDNjQzMzBBRkNERjBENyAvKiBK
U1NvdXJjZUNvZGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNT
b3VyY2VDb2RlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkUwMDI2MjIyM0Yz
QUYzMzAwM0EzNThGIC8qIFdlYkFzc2VtYmx5LmFzbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYXNtLmFzbTsgbmFtZSA9IFdlYkFz
c2VtYmx5LmFzbTsgcGF0aCA9IGxsaW50L1dlYkFzc2VtYmx5LmFzbTsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJRkUwNDE1NTIyNTJFQzA3MzAwOTFFQjVEIC8qIFNsb3RWaXNpdG9yTWFj
cm9zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNsb3RWaXNpdG9yTWFjcm9z
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFMDg2QkM5MjEyM0RFRkEwMDNGMjky
OSAvKiBFbnRyeUZyYW1lLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEVudHJ5
RnJhbWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkUwRDRBMDQxQUI4REQwQTAw
MkY1NEJGIC8qIEV4ZWN1dGlvblRpbWVMaW1pdFRlc3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBuYW1lID0gRXhlY3V0aW9uVGltZUxpbWl0VGVzdC5jcHA7IHBhdGggPSBBUEkv
dGVzdHMvRXhlY3V0aW9uVGltZUxpbWl0VGVzdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUZFMEQ0QTA1MUFCOEREMEEwMDJGNTRCRiAvKiBFeGVjdXRpb25UaW1lTGltaXRUZXN0
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEV4ZWN1dGlvblRpbWVMaW1pdFRl
c3QuaDsgcGF0aCA9IEFQSS90ZXN0cy9FeGVjdXRpb25UaW1lTGltaXRUZXN0Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01MjYxLDEyICs1MjY5LDE1IEBACiAJCUZFMUUyQzNFMjI0
MEQzMEIwMEY2QjcyOSAvKiBNYWNyb0Fzc2VtYmxlckFSTTY0RS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBNYWNyb0Fzc2VtYmxlckFSTTY0RS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlGRTIwQ0U5QjE1RjA0QTk1MDBERjM0MzAgLyogTExJbnRDTG9vcC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBMTEludENMb29wLmNwcDsgcGF0
aCA9IGxsaW50L0xMSW50Q0xvb3AuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlG
RTIwQ0U5QzE1RjA0QTk1MDBERjM0MzAgLyogTExJbnRDTG9vcC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBMTEludENMb29wLmg7IHBhdGggPSBsbGludC9MTEludENMb29wLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZFMjg3RDAxMjUyRkIyRTgwMEQ3MjNGOSAv
KiBWZXJpZmllclNsb3RWaXNpdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFZlcmlmaWVyU2xvdFZpc2l0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkUy
QTg3NUYxRjAyMzgxNjAwRUIzMUIyIC8qIE1pbmltdW1SZXNlcnZlZFpvbmVTaXplLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IE1pbmltdW1SZXNlcnZlZFpvbmVTaXplLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUZFMkJENjZFMjVDMERDODIwMDk5OUQzQiAvKiBWZXJpZmllclNsb3RWaXNpdG9y
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFZlcmlmaWVyU2xvdFZp
c2l0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTJFNkE3QTFENkVBNUZF
MDA2MEY4OTYgLyogVGhyb3dTY29wZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBUaHJvd1Njb3BlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkUz
MDIyRDAxRTNENzM5NjAwQkFDNDkzIC8qIFNpZ2lsbENyYXNoQW5hbHl6ZXIuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2lnaWxsQ3Jhc2hBbmFseXplci5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFMzAyMkQxMUUzRDczOTYwMEJBQzQ5MyAvKiBT
aWdpbGxDcmFzaEFuYWx5emVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNp
Z2lsbENyYXNoQW5hbHl6ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkUzMDIy
RDQxRTQyODU2NzAwQkFDNDkzIC8qIFZNSW5zcGVjdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFZNSW5zcGVjdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJRkUzMDIyRDUxRTQyODU2NzAwQkFDNDkzIC8qIFZNSW5zcGVjdG9yLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZNSW5zcGVjdG9yLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCUZFMzM2QjUyMjVEQjQ5N0QwMDk4RjAzNCAvKiBNYXJraW5nQ29uc3Ry
YWludEV4ZWN1dG9yUGFpci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNYXJr
aW5nQ29uc3RyYWludEV4ZWN1dG9yUGFpci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlGRTM0MjIxMTFENkI4MThDMDAzMkJFODggLyogVGhyb3dTY29wZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBUaHJvd1Njb3BlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUZFMzRFRTIwMjQzOThBOUEwMEFBMkU3QyAvKiBFbnN1cmVTdGlsbEFsaXZlSGVyZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBFbnN1cmVTdGlsbEFsaXZlSGVyZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlGRTM0RUUyMjI0Mzk4Qjg1MDBBQTJFN0MgLyogRW5zdXJlU3RpbGxBbGl2
ZUhlcmUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRW5zdXJlU3Rp
bGxBbGl2ZUhlcmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNTMzNSw2ICs1
MzQ2LDggQEAKIAkJRkU4REU1NEMyM0FDMUU4NjAwNUM5MTQyIC8qIENhY2hlYWJsZUlkZW50aWZp
ZXJJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENhY2hlYWJsZUlk
ZW50aWZpZXJJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFOERFNTRF
MjNBQzNBOEUwMDVDOTE0MiAvKiBDYWNoZWFibGVJZGVudGlmaWVyLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IENhY2hlYWJsZUlkZW50aWZpZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlGRTkwQkIzQTFCN0NGNjRFMDA2QjNGMDMgLyogVk1JbmxpbmVzLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZNSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlGRTkxMkI0RTI1MzExOTMzMDBGQUJEREYgLyogQWJzdHJhY3RTbG90VmlzaXRvci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBYnN0cmFjdFNsb3RWaXNpdG9yLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZFOTEyQjUwMjUzMTFBRDEwMEZBQkRERiAv
KiBBYnN0cmFjdFNsb3RWaXNpdG9ySW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBBYnN0cmFjdFNsb3RWaXNpdG9ySW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlGRTk4QjVCNjFCQjlBRTExMDA3M0U3QTYgLyogSklUU3ViR2VuZXJhdG9yLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpJVFN1YkdlbmVyYXRvci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTk5QjI0NzFDMjRCNkQzMDBDODIxNTkgLyogSklU
TmVnR2VuZXJhdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpJ
VE5lZ0dlbmVyYXRvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFOTlCMjQ4
MUMyNEI2RDMwMEM4MjE1OSAvKiBKSVROZWdHZW5lcmF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSklUTmVnR2VuZXJhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC02MjgyLDYgKzYyOTUsOCBAQAogCQkxNDJFMzEyQTEzNEZGMEE2MDBBRkFEQjUgLyog
aGVhcCAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJRkU5
MTJCNEUyNTMxMTkzMzAwRkFCRERGIC8qIEFic3RyYWN0U2xvdFZpc2l0b3IuaCAqLywKKwkJCQlG
RTkxMkI1MDI1MzExQUQxMDBGQUJEREYgLyogQWJzdHJhY3RTbG90VmlzaXRvcklubGluZXMuaCAq
LywKIAkJCQkwRkVDM0M1MDFGMzNBNDE2MDBGNTlCNkMgLyogQWxpZ25lZE1lbW9yeUFsbG9jYXRv
ci5jcHAgKi8sCiAJCQkJMEZFQzNDNTExRjMzQTQxNjAwRjU5QjZDIC8qIEFsaWduZWRNZW1vcnlB
bGxvY2F0b3IuaCAqLywKIAkJCQkwRkE3NjIwQTFEQjk1OUY2MDBCN0EyRkQgLyogQWxsb2NhdGlu
Z1Njb3BlLmggKi8sCkBAIC02NDEzLDYgKzY0MjgsNyBAQAogCQkJCTBGN0RGMTMwMUUyOTcwRDUw
MDk1OTUxQiAvKiBNYXJrZWRTcGFjZUlubGluZXMuaCAqLywKIAkJCQkwRjY2MEUzMzFFMDUxN0I3
MDAzMTQ2MkMgLyogTWFya2luZ0NvbnN0cmFpbnQuY3BwICovLAogCQkJCTBGNjYwRTM0MUUwNTE3
QjcwMDMxNDYyQyAvKiBNYXJraW5nQ29uc3RyYWludC5oICovLAorCQkJCUZFMzM2QjUyMjVEQjQ5
N0QwMDk4RjAzNCAvKiBNYXJraW5nQ29uc3RyYWludEV4ZWN1dG9yUGFpci5oICovLAogCQkJCTBG
NjYwRTM1MUUwNTE3QjcwMDMxNDYyQyAvKiBNYXJraW5nQ29uc3RyYWludFNldC5jcHAgKi8sCiAJ
CQkJMEY2NjBFMzYxRTA1MTdCODAwMzE0NjJDIC8qIE1hcmtpbmdDb25zdHJhaW50U2V0LmggKi8s
CiAJCQkJMEY5REFBMDYxRkQxQzNDODAwNzlDNUIyIC8qIE1hcmtpbmdDb25zdHJhaW50U29sdmVy
LmNwcCAqLywKQEAgLTY0MzksNiArNjQ1NSw3IEBACiAJCQkJQzIyNTQ5NDIxNUY3REJBQTAwNjVF
ODk4IC8qIFNsb3RWaXNpdG9yLmNwcCAqLywKIAkJCQkxNEJBNzhGMDEzQUFCODhGMDA1QjdDMkMg
LyogU2xvdFZpc2l0b3IuaCAqLywKIAkJCQkwRkNCNDA4NTE1QzBBM0MzMDA0ODkzMkIgLyogU2xv
dFZpc2l0b3JJbmxpbmVzLmggKi8sCisJCQkJRkUwNDE1NTIyNTJFQzA3MzAwOTFFQjVEIC8qIFNs
b3RWaXNpdG9yTWFjcm9zLmggKi8sCiAJCQkJMEZERTg3RkExREZFNkU1MDAwNjRDMzkwIC8qIFNw
YWNlVGltZU11dGF0b3JTY2hlZHVsZXIuY3BwICovLAogCQkJCTBGREU4N0ZCMURGRTZFNTAwMDY0
QzM5MCAvKiBTcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyLmggKi8sCiAJCQkJMEY0RjgyODkxRTMx
Qjk3MTAwNzUxODRDIC8qIFN0b2NoYXN0aWNTcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyLmNwcCAq
LywKQEAgLTY0NTYsNiArNjQ3Myw5IEBACiAJCQkJMEYxRkIzOEExRTE3M0E2MjAwQTlCRTUwIC8q
IFN5bmNocm9ub3VzU3RvcFRoZVdvcmxkTXV0YXRvclNjaGVkdWxlci5jcHAgKi8sCiAJCQkJMEYx
RkIzOEIxRTE3M0E2MjAwQTlCRTUwIC8qIFN5bmNocm9ub3VzU3RvcFRoZVdvcmxkTXV0YXRvclNj
aGVkdWxlci5oICovLAogCQkJCTE0MTQ0OENDMTNBMTc4MzcwMEY1QkExQSAvKiBUaW55Qmxvb21G
aWx0ZXIuaCAqLywKKwkJCQlGRTJCRDY2RTI1QzBEQzgyMDA5OTlEM0IgLyogVmVyaWZpZXJTbG90
VmlzaXRvci5jcHAgKi8sCisJCQkJRkUyODdEMDEyNTJGQjJFODAwRDcyM0Y5IC8qIFZlcmlmaWVy
U2xvdFZpc2l0b3IuaCAqLywKKwkJCQk2QkNDRUMwMzI1RDFGQTI3MDAwRjM5MUQgLyogVmVyaWZp
ZXJTbG90VmlzaXRvcklubGluZXMuaCAqLywKIAkJCQkwRjREOEM3MjFGQzdBOTczMDAxRDMyQUMg
LyogVmlzaXRDb3VudGVyLmggKi8sCiAJCQkJMEY5NTJBOUYxREY3ODYwNzAwRTA2RkJEIC8qIFZp
c2l0UmFjZUtleS5jcHAgKi8sCiAJCQkJMEY5NTJBQTAxREY3ODYwNzAwRTA2RkJEIC8qIFZpc2l0
UmFjZUtleS5oICovLApAQCAtOTMwMSw2ICs5MzIxLDcgQEAKIAkJCQkxNDdCODNBQzBFNkRCOEM5
MDA0Nzc1QTQgLyogQmF0Y2hlZFRyYW5zaXRpb25PcHRpbWl6ZXIuaCBpbiBIZWFkZXJzICovLAog
CQkJCUUzNUU4OUZEMjVDNTBGODcwMDcxRUUxRSAvKiBCaWdJbnQ2NEFycmF5LmggaW4gSGVhZGVy
cyAqLywKIAkJCQk4Njk3NkU1RjFGQTNFOEJDMDBFN0M0RTEgLyogQmlnSW50Q29uc3RydWN0b3Iu
aCBpbiBIZWFkZXJzICovLAorCQkJCUZFMDQxNTUzMjUyRUMwNzMwMDkxRUI1RCAvKiBTbG90Vmlz
aXRvck1hY3Jvcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODY2NzM5RDIxM0JGREU3MTAwMjNEODdD
IC8qIEJpZ0ludGVnZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2MTgxNjc3MUZCNzkyNDIwMEVD
QzRFQyAvKiBCaWdJbnRPYmplY3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2OTc2RTVFMUZBM0U4
QjYwMEU3QzRFMSAvKiBCaWdJbnRQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovLApAQCAtOTU4Miw2
ICs5NjAzLDcgQEAKIAkJCQkwRkQ4MkU1NzE0MURBRjEwMDAxNzlDOTQgLyogREZHT1NSRW50cnku
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGRDhBMzI2MTdENTFGNTcwMENBMkM0MCAvKiBERkdPU1JF
bnRyeXBvaW50Q3JlYXRpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZDMDk3NkExNDY4
QTZGNzAwQ0YyNDQyIC8qIERGR09TUkV4aXQuaCBpbiBIZWFkZXJzICovLAorCQkJCUZFOTEyQjRG
MjUzMTE5MzMwMEZBQkRERiAvKiBBYnN0cmFjdFNsb3RWaXNpdG9yLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRjIzNUJFQzE3MTc4RTczMDA2OTBDN0YgLyogREZHT1NSRXhpdEJhc2UuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGRkI5MjFDMTZEMDJGMTEwMDU1QTVEQiAvKiBERkdPU1JFeGl0Q29tcGls
YXRpb25JbmZvLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjcwMjVBQTE3MTRCMEZDMDAzODJDMEUg
LyogREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmggaW4gSGVhZGVycyAqLywKQEAgLTk4NjgsNiAr
OTg5MCw3IEBACiAJCQkJQTUxM0U1QkUxODVCRkFDQzAwN0U5NUFEIC8qIEluamVjdGVkU2NyaXB0
SG9zdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTUxM0U1Q0IxODVGOTYyNDAwN0U5NUFEIC8qIElu
amVjdGVkU2NyaXB0TWFuYWdlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTU4NDBFMjExODdCN0I4
NjAwODQzQjEwIC8qIEluamVjdGVkU2NyaXB0TW9kdWxlLmggaW4gSGVhZGVycyAqLywKKwkJCQlG
RTI4N0QwMjI1MkZCMkU4MDBENzIzRjkgLyogVmVyaWZpZXJTbG90VmlzaXRvci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQTUxM0U1QzcxODVGOTQ0NjAwN0U5NUFEIC8qIEluamVjdGVkU2NyaXB0U291
cmNlLmggaW4gSGVhZGVycyAqLywKIAkJCQk5OTU5RTkzMjFCRDE4Mjc5MDAxQUE0MTMgLyogaW5s
aW5lLWFuZC1taW5pZnktc3R5bGVzaGVldHMtYW5kLXNjcmlwdHMucHkgaW4gSGVhZGVycyAqLywK
IAkJCQk3OTA1QkI2OTFEMTIwNTBFMDAxOUZFNTcgLyogSW5saW5lQWNjZXNzLmggaW4gSGVhZGVy
cyAqLywKQEAgLTEwMDA3LDYgKzEwMDMwLDcgQEAKIAkJCQk1M0M0RjY2QjIxQjFBNDA5MDAyRkQw
MDkgLyogSlNBUElHbG9iYWxPYmplY3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTg0MDQ4MDEzMTAy
MUExRDkwMDhFN0YwMSAvKiBKU0FQSVZhbHVlV3JhcHBlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QzJDRjM5QzIxNkUxNUE4MTAwREQ2OUJFIC8qIEpTQVBJV3JhcHBlck9iamVjdC5oIGluIEhlYWRl
cnMgKi8sCisJCQkJRkUzMzZCNTMyNURCNDk3RDAwOThGMDM0IC8qIE1hcmtpbmdDb25zdHJhaW50
RXhlY3V0b3JQYWlyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQxNzBFMTZGNUNEMDBCMzQ0
NjAgLyogSlNBcnJheS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjY2RTMxN0I2QjVBQjAwQTdB
RTNGIC8qIEpTQXJyYXlCdWZmZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkI2NkU1MTdCNkI1
QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLApA
QCAtMTAwNDMsNiArMTAwNjcsNyBAQAogCQkJCUE1OEMwMjQyMThFNEE0MUEwMDAzMkJDNSAvKiBK
U0NvbnRleHRQcml2YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQxRTBFMTZGNUNEMDBC
MzQ0NjAgLyogSlNDb250ZXh0UmVmLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNUVBNzBFRTE5RjVC
NUM0MDA5OEY1RUMgLyogSlNDb250ZXh0UmVmSW5zcGVjdG9yU3VwcG9ydC5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJNkJDQ0VDMDQyNUQxRkEyNzAwMEYzOTFEIC8qIFZlcmlmaWVyU2xvdFZpc2l0b3JJ
bmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNUQyRTY2NTE5NUUxNzQwMDBBNTE4RTcgLyog
SlNDb250ZXh0UmVmSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0OENEMUQ4MTA4Q0Y5
MDIwMDgxNjNDNiAvKiBKU0NvbnRleHRSZWZQcml2YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQlG
RTc0OTdFNjIwOTAwMUIxMDAwMzU2NUIgLyogSlNDUHRyVGFnLmggaW4gSGVhZGVycyAqLywKQEAg
LTEwMTc0LDYgKzEwMTk5LDcgQEAKIAkJCQk3OTVBQzYxODIwQTIzNTVFMDA1MkM3NkMgLyogSlNW
aXJ0dWFsTWFjaGluZVByaXZhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3Q0EzQUU4MTdEQTQx
QUUwMDY1MzhBRiAvKiBKU1dlYWtNYXAuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3NDgyRTkzMTE2
QTdDQUQwMDNCMDcxMiAvKiBKU1dlYWtPYmplY3RNYXBSZWZJbnRlcm5hbC5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJRkU5MTJCNTEyNTMxMUFEMTAwRkFCRERGIC8qIEFic3RyYWN0U2xvdFZpc2l0b3JJ
bmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzQ4MkI5MzExNjcxMTQ3MDAzQjA3MTIgLyog
SlNXZWFrT2JqZWN0TWFwUmVmUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTM5QkZCQjAy
MkFEM0NEQzAwMjNGNEMwIC8qIEpTV2Vha09iamVjdFJlZi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEYwQjI4NkIxRUI4RTZDRjAwMEVCNUQyIC8qIEpTV2Vha1ByaXZhdGUuaCBpbiBIZWFkZXJzICov
LApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvd2tidWlsdGlucy9idWlsdGlu
c19nZW5lcmF0ZV9pbnRlcm5hbHNfd3JhcHBlcl9oZWFkZXIucHkKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvd2tidWlsdGlucy9idWlsdGluc19nZW5lcmF0ZV9p
bnRlcm5hbHNfd3JhcHBlcl9oZWFkZXIucHkJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9TY3JpcHRzL3drYnVpbHRpbnMvYnVpbHRpbnNfZ2VuZXJhdGVfaW50ZXJu
YWxzX3dyYXBwZXJfaGVhZGVyLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogIyEv
dXNyL2Jpbi9lbnYgcHl0aG9uCiAjCi0jIENvcHlyaWdodCAoYykgMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisjIENvcHlyaWdodCAoYykgMjAxNi0yMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICMKICMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAjIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtOTMs
NyArOTMsNyBAQCBjbGFzcyBCdWlsdGluc0ludGVybmFsc1dyYXBwZXJIZWFkZXJHZW5lCiAKICAg
ICBkZWYgZ2VuZXJhdGVfbWV0aG9kcyhzZWxmKToKICAgICAgICAgcmV0dXJuICIiIgotICAgIHZv
aWQgdmlzaXQoSlNDOjpTbG90VmlzaXRvciYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0
b3I+IHZvaWQgdmlzaXQoVmlzaXRvciYpOwogICAgIHZvaWQgaW5pdGlhbGl6ZShKU0RPTUdsb2Jh
bE9iamVjdCYpOwogIiIiCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL3dr
YnVpbHRpbnMvYnVpbHRpbnNfZ2VuZXJhdGVfaW50ZXJuYWxzX3dyYXBwZXJfaW1wbGVtZW50YXRp
b24ucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvd2tidWls
dGlucy9idWlsdGluc19nZW5lcmF0ZV9pbnRlcm5hbHNfd3JhcHBlcl9pbXBsZW1lbnRhdGlvbi5w
eQkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvd2ti
dWlsdGlucy9idWlsdGluc19nZW5lcmF0ZV9pbnRlcm5hbHNfd3JhcHBlcl9pbXBsZW1lbnRhdGlv
bi5weQkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKICMhL3Vzci9iaW4vZW52IHB5dGhv
bgogIwotIyBDb3B5cmlnaHQgKGMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorIyBDb3B5cmlnaHQgKGMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAjCiAjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEyMCwxMyArMTIwLDE2IEBAIGNs
YXNzIEJ1aWx0aW5zSW50ZXJuYWxzV3JhcHBlckltcGxlbWVudGEKICAgICAgICAgcmV0dXJuICdc
bicuam9pbihsaW5lcykKIAogICAgIGRlZiBnZW5lcmF0ZV92aXNpdF9tZXRob2Qoc2VsZik6Ci0g
ICAgICAgIGxpbmVzID0gWyJ2b2lkIEpTQnVpbHRpbkludGVybmFsRnVuY3Rpb25zOjp2aXNpdChK
U0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKSIsCisgICAgICAgIGxpbmVzID0gWyJ0ZW1wbGF0ZTx0
eXBlbmFtZSBWaXNpdG9yPiIsCisgICAgICAgICAgICAgICAgICJ2b2lkIEpTQnVpbHRpbkludGVy
bmFsRnVuY3Rpb25zOjp2aXNpdChWaXNpdG9yJiB2aXNpdG9yKSIsCiAgICAgICAgICAgICAgICAg
ICJ7Il0KICAgICAgICAgZm9yIG9iamVjdCBpbiBzZWxmLmludGVybmFsczoKICAgICAgICAgICAg
IHZpc2l0ID0gIiAgICAlcy52aXNpdCh2aXNpdG9yKTsiICUgc2VsZi5tZW1iZXJfbmFtZShvYmpl
Y3QpCiAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoQnVpbHRpbnNHZW5lcmF0b3Iud3JhcF93aXRo
X2d1YXJkKG9iamVjdC5hbm5vdGF0aW9ucy5nZXQoJ2NvbmRpdGlvbmFsJyksIHZpc2l0KSkKICAg
ICAgICAgbGluZXMuYXBwZW5kKCIgICAgVU5VU0VEX1BBUkFNKHZpc2l0b3IpOyIpCiAgICAgICAg
IGxpbmVzLmFwcGVuZCgifVxuIikKKyAgICAgICAgbGluZXMuYXBwZW5kKCJ0ZW1wbGF0ZSB2b2lk
IEpTQnVpbHRpbkludGVybmFsRnVuY3Rpb25zOjp2aXNpdChBYnN0cmFjdFNsb3RWaXNpdG9yJik7
IikKKyAgICAgICAgbGluZXMuYXBwZW5kKCJ0ZW1wbGF0ZSB2b2lkIEpTQnVpbHRpbkludGVybmFs
RnVuY3Rpb25zOjp2aXNpdChTbG90VmlzaXRvciYpO1xuIikKICAgICAgICAgcmV0dXJuICdcbicu
am9pbihsaW5lcykKIAogICAgIGRlZiBfZ2VuZXJhdGVfaW5pdGlhbGl6ZV9zdGF0aWNfZ2xvYmFs
cyhzZWxmKToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL3drYnVpbHRpbnMv
YnVpbHRpbnNfdGVtcGxhdGVzLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9TY3JpcHRzL3drYnVpbHRpbnMvYnVpbHRpbnNfdGVtcGxhdGVzLnB5CShyZXZpc2lvbiAyNzI5
MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy93a2J1aWx0aW5zL2J1aWx0aW5z
X3RlbXBsYXRlcy5weQkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKICMhL3Vzci9iaW4v
ZW52IHB5dGhvbgogIwotIyBDb3B5cmlnaHQgKGMpIDIwMTQtMjAxOSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisjIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICMgQ29weXJpZ2h0IChDKSAyMDE1IENhbm9uIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICMKICMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0xODgsNyArMTg4LDcgQEAgcHVibGlj
OgogICAgIGV4cGxpY2l0ICR7b2JqZWN0TmFtZX1CdWlsdGluRnVuY3Rpb25zKEpTQzo6Vk0mIHZt
KSA6IG1fdm0odm0pIHsgfQogCiAgICAgdm9pZCBpbml0KEpTQzo6SlNHbG9iYWxPYmplY3QmKTsK
LSAgICB2b2lkIHZpc2l0KEpTQzo6U2xvdFZpc2l0b3ImKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBWaXNpdG9yPiB2b2lkIHZpc2l0KFZpc2l0b3ImKTsKIAogcHVibGljOgogICAgIEpTQzo6Vk0m
IG1fdm07CkBAIC0yMDcsMTAgKzIwNywxNSBAQCBpbmxpbmUgdm9pZCAke29iamVjdE5hbWV9QnVp
bHRpbkZ1bmN0aW9uCiAjdW5kZWYgRVhQT1JUX0ZVTkNUSU9OCiB9CiAKLWlubGluZSB2b2lkICR7
b2JqZWN0TmFtZX1CdWlsdGluRnVuY3Rpb25zOjp2aXNpdChKU0M6OlNsb3RWaXNpdG9yJiB2aXNp
dG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK2lubGluZSB2b2lkICR7b2JqZWN0TmFt
ZX1CdWlsdGluRnVuY3Rpb25zOjp2aXNpdChWaXNpdG9yJiB2aXNpdG9yKQogewogI2RlZmluZSBW
SVNJVF9GVU5DVElPTihuYW1lKSB2aXNpdG9yLmFwcGVuZChtXyMjbmFtZSMjRnVuY3Rpb24pOwog
ICAgICR7bWFjcm9QcmVmaXh9X0ZPUkVBQ0hfJHtvYmplY3RNYWNyb31fQlVJTFRJTl9GVU5DVElP
Tl9OQU1FKFZJU0lUX0ZVTkNUSU9OKQogI3VuZGVmIFZJU0lUX0ZVTkNUSU9OCiB9CisKK3RlbXBs
YXRlIHZvaWQgJHtvYmplY3ROYW1lfUJ1aWx0aW5GdW5jdGlvbnM6OnZpc2l0KEpTQzo6QWJzdHJh
Y3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCAke29iamVjdE5hbWV9QnVpbHRpbkZ1bmN0
aW9uczo6dmlzaXQoSlNDOjpTbG90VmlzaXRvciYpOworCiAiIiIpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCShyZXZpc2lvbiAyNzI5MDIp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjAg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIw
MjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC03NTcsNyArNzU3LDggQEAgYm9vbCBBY2Nlc3NDYXNlOjp2aXNpdFdlYWso
Vk0mIHZtKSBjb25zdAogICAgIHJldHVybiBpc1ZhbGlkOwogfQogCi1ib29sIEFjY2Vzc0Nhc2U6
OnByb3BhZ2F0ZVRyYW5zaXRpb25zKFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBjb25zdAordGVtcGxh
dGU8dHlwZW5hbWUgVmlzaXRvcj4KK2Jvb2wgQWNjZXNzQ2FzZTo6cHJvcGFnYXRlVHJhbnNpdGlv
bnMoVmlzaXRvciYgdmlzaXRvcikgY29uc3QKIHsKICAgICBib29sIHJlc3VsdCA9IHRydWU7CiAK
QEAgLTc3Miw3ICs3NzMsNyBAQCBib29sIEFjY2Vzc0Nhc2U6OnByb3BhZ2F0ZVRyYW5zaXRpb25z
KFNsCiAgICAgc3dpdGNoIChtX3R5cGUpIHsKICAgICBjYXNlIFRyYW5zaXRpb246CiAgICAgY2Fz
ZSBEZWxldGU6Ci0gICAgICAgIGlmICh2aXNpdG9yLnZtKCkuaGVhcC5pc01hcmtlZChtX3N0cnVj
dHVyZS0+cHJldmlvdXNJRCgpKSkKKyAgICAgICAgaWYgKHZpc2l0b3IuaXNNYXJrZWQobV9zdHJ1
Y3R1cmUtPnByZXZpb3VzSUQoKSkpCiAgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmll
cmVkKG1fc3RydWN0dXJlLmdldCgpKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgcmVzdWx0
ID0gZmFsc2U7CkBAIC03ODQsMTEgKzc4NSwxOCBAQCBib29sIEFjY2Vzc0Nhc2U6OnByb3BhZ2F0
ZVRyYW5zaXRpb25zKFNsCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotdm9pZCBBY2Nlc3NDYXNl
Ojp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYgdmlzaXRvcikgY29uc3QKK3RlbXBsYXRlIGJv
b2wgQWNjZXNzQ2FzZTo6cHJvcGFnYXRlVHJhbnNpdGlvbnMoQWJzdHJhY3RTbG90VmlzaXRvciYp
IGNvbnN0OwordGVtcGxhdGUgYm9vbCBBY2Nlc3NDYXNlOjpwcm9wYWdhdGVUcmFuc2l0aW9ucyhT
bG90VmlzaXRvciYpIGNvbnN0OworCisKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lk
IEFjY2Vzc0Nhc2U6OnZpc2l0QWdncmVnYXRlSW1wbChWaXNpdG9yJiB2aXNpdG9yKSBjb25zdAog
ewogICAgIG1faWRlbnRpZmllci52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKIH0KIAorREVGSU5F
X1ZJU0lUX0FHR1JFR0FURV9XSVRIX01PRElGSUVSKEFjY2Vzc0Nhc2UsIGNvbnN0KTsKKwogdm9p
ZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZVdpdGhHdWFyZCgKICAgICBBY2Nlc3NHZW5lcmF0aW9uU3Rh
dGUmIHN0YXRlLCBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0JiBmYWxsVGhyb3VnaCkKIHsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuaAkocmV2aXNpb24g
MjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTct
MjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTI4MCw5ICsyODAsOSBAQCBwcml2YXRlOgogICAgIHRlbXBsYXRl
PHR5cGVuYW1lIEZ1bmN0b3I+CiAgICAgdm9pZCBmb3JFYWNoRGVwZW5kZW50Q2VsbChWTSYsIGNv
bnN0IEZ1bmN0b3ImKSBjb25zdDsKIAotICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0
b3ImKSBjb25zdDsKKyAgICBERUNMQVJFX1ZJU0lUX0FHR1JFR0FURV9XSVRIX01PRElGSUVSKGNv
bnN0KTsKICAgICBib29sIHZpc2l0V2VhayhWTSYpIGNvbnN0OwotICAgIGJvb2wgcHJvcGFnYXRl
VHJhbnNpdGlvbnMoU2xvdFZpc2l0b3ImKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPiBib29sIHByb3BhZ2F0ZVRyYW5zaXRpb25zKFZpc2l0b3ImKSBjb25zdDsKIAogICAg
IC8vIEZJWE1FOiBUaGlzIG9ubHkgZXhpc3RzIGJlY2F1c2Ugb2YgaG93IEFjY2Vzc0Nhc2UgcHV0
cyBwb3N0LWdlbmVyYXRpb24gdGhpbmdzIGludG8gaXRzZWxmLgogICAgIC8vIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTY0NTYKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9CeVZhbEluZm8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9CeVZhbEluZm8uY3BwCShyZXZpc2lvbiAyNzI5MDIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnlWYWxJbmZvLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIwLTIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0zMiwxMSArMzIsMTQgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICNpZiBFTkFCTEUoSklUKQogCi12
b2lkIEJ5VmFsSW5mbzo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1w
bGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBCeVZhbEluZm86OnZpc2l0QWdncmVnYXRlSW1w
bChWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGNhY2hlZElkLnZpc2l0QWdncmVnYXRlKHZpc2l0
b3IpOwogfQogCitERUZJTkVfVklTSVRfQUdHUkVHQVRFKEJ5VmFsSW5mbyk7CisKICNlbmRpZiAv
LyBFTkFCTEUoSklUKQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9CeVZhbEluZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQnlWYWxJbmZvLmgJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeVZhbEluZm8uaAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxOCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTI2MCw3ICsyNjAsNyBAQCBzdHJ1Y3QgQnlWYWxJbmZvIHsKICAgICAgICAgdGhpcy0+c2VlbiA9
IGZhbHNlOwogICAgIH0KIAotICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImKTsK
KyAgICBERUNMQVJFX1ZJU0lUX0FHR1JFR0FURTsKIAogICAgIENvZGVMb2NhdGlvbkp1bXA8SlNJ
bnRlcm5hbFB0clRhZz4gbm90SW5kZXhKdW1wOwogICAgIENvZGVMb2NhdGlvbkp1bXA8SlNJbnRl
cm5hbFB0clRhZz4gYmFkVHlwZUp1bXA7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQ2hlY2tQcml2YXRlQnJhbmRTdGF0dXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DaGVja1ByaXZhdGVCcmFuZFN0YXR1cy5jcHAJKHJldmlz
aW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DaGVja1ByaXZh
dGVCcmFuZFN0YXR1cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyOCwxOCArMjI4LDI1IEBAIENh
Y2hlYWJsZUlkZW50aWZpZXIgQ2hlY2tQcml2YXRlQnJhbmRTdGEKICAgICByZXR1cm4gcmVzdWx0
OwogfQogCi12b2lkIENoZWNrUHJpdmF0ZUJyYW5kU3RhdHVzOjp2aXNpdEFnZ3JlZ2F0ZShTbG90
VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIENoZWNr
UHJpdmF0ZUJyYW5kU3RhdHVzOjp2aXNpdEFnZ3JlZ2F0ZUltcGwoVmlzaXRvciYgdmlzaXRvcikK
IHsKICAgICBmb3IgKENoZWNrUHJpdmF0ZUJyYW5kVmFyaWFudCYgdmFyaWFudCA6IG1fdmFyaWFu
dHMpCiAgICAgICAgIHZhcmlhbnQudmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7CiB9CiAKLXZvaWQg
Q2hlY2tQcml2YXRlQnJhbmRTdGF0dXM6Om1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJiB2aXNpdG9y
KQorREVGSU5FX1ZJU0lUX0FHR1JFR0FURShDaGVja1ByaXZhdGVCcmFuZFN0YXR1cyk7CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIENoZWNrUHJpdmF0ZUJyYW5kU3RhdHVzOjpt
YXJrSWZDaGVhcChWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGZvciAoQ2hlY2tQcml2YXRlQnJh
bmRWYXJpYW50JiB2YXJpYW50IDogbV92YXJpYW50cykKICAgICAgICAgdmFyaWFudC5tYXJrSWZD
aGVhcCh2aXNpdG9yKTsKIH0KIAordGVtcGxhdGUgdm9pZCBDaGVja1ByaXZhdGVCcmFuZFN0YXR1
czo6bWFya0lmQ2hlYXAoQWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBDaGVj
a1ByaXZhdGVCcmFuZFN0YXR1czo6bWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImKTsKKwogYm9vbCBD
aGVja1ByaXZhdGVCcmFuZFN0YXR1czo6ZmluYWxpemUoVk0mIHZtKQogewogICAgIGZvciAoYXV0
byYgdmFyaWFudCA6IG1fdmFyaWFudHMpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9DaGVja1ByaXZhdGVCcmFuZFN0YXR1cy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DaGVja1ByaXZhdGVCcmFuZFN0YXR1cy5oCShyZXZpc2lv
biAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2hlY2tQcml2YXRl
QnJhbmRTdGF0dXMuaAkod29ya2luZyBjb3B5KQpAQCAtODIsOCArODIsOCBAQCBwdWJsaWM6CiAg
ICAgLy8gQXR0ZW1wdHMgdG8gcmVkdWNlIHRoZSBzZXQgb2YgdmFyaWFudHMgdG8gZml0IHRoZSBn
aXZlbiBzdHJ1Y3R1cmUgc2V0LiBUaGlzIG1heSBiZSBhcHByb3hpbWF0ZS4KICAgICB2b2lkIGZp
bHRlcihjb25zdCBTdHJ1Y3R1cmVTZXQmKTsKIAotICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xv
dFZpc2l0b3ImKTsKLSAgICB2b2lkIG1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJik7CisgICAgREVD
TEFSRV9WSVNJVF9BR0dSRUdBVEU7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9p
ZCBtYXJrSWZDaGVhcChWaXNpdG9yJik7CiAgICAgYm9vbCBmaW5hbGl6ZShWTSYpOwogCiAgICAg
Ym9vbCBhcHBlbmRWYXJpYW50KGNvbnN0IENoZWNrUHJpdmF0ZUJyYW5kVmFyaWFudCYpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NoZWNrUHJpdmF0ZUJyYW5kVmFyaWFu
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NoZWNr
UHJpdmF0ZUJyYW5kVmFyaWFudC5jcHAJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9DaGVja1ByaXZhdGVCcmFuZFZhcmlhbnQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC01MSwxMSArNTEsMTUgQEAgYm9vbCBDaGVja1ByaXZhdGVCcmFuZFZhcmlhbnQ6
OmF0dGVtcHRUbwogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIENoZWNrUHJpdmF0ZUJyYW5k
VmFyaWFudDo6bWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBl
bmFtZSBWaXNpdG9yPgordm9pZCBDaGVja1ByaXZhdGVCcmFuZFZhcmlhbnQ6Om1hcmtJZkNoZWFw
KFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgbV9zdHJ1Y3R1cmVTZXQubWFya0lmQ2hlYXAodmlz
aXRvcik7CiB9CiAKK3RlbXBsYXRlIHZvaWQgQ2hlY2tQcml2YXRlQnJhbmRWYXJpYW50OjptYXJr
SWZDaGVhcChBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIENoZWNrUHJpdmF0
ZUJyYW5kVmFyaWFudDo6bWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImKTsKKwogYm9vbCBDaGVja1By
aXZhdGVCcmFuZFZhcmlhbnQ6OmZpbmFsaXplKFZNJiB2bSkKIHsKICAgICBpZiAoIW1fc3RydWN0
dXJlU2V0LmlzU3RpbGxBbGl2ZSh2bSkpCkBAIC02MywxMSArNjcsMTQgQEAgYm9vbCBDaGVja1By
aXZhdGVCcmFuZFZhcmlhbnQ6OmZpbmFsaXplKAogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lk
IENoZWNrUHJpdmF0ZUJyYW5kVmFyaWFudDo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImIHZp
c2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBDaGVja1ByaXZhdGVCcmFu
ZFZhcmlhbnQ6OnZpc2l0QWdncmVnYXRlSW1wbChWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIG1f
aWRlbnRpZmllci52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKIH0KIAorREVGSU5FX1ZJU0lUX0FH
R1JFR0FURShDaGVja1ByaXZhdGVCcmFuZFZhcmlhbnQpOworCiB2b2lkIENoZWNrUHJpdmF0ZUJy
YW5kVmFyaWFudDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAogewogICAgIGR1bXBJbkNv
bnRleHQob3V0LCBudWxscHRyKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9DaGVja1ByaXZhdGVCcmFuZFZhcmlhbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ2hlY2tQcml2YXRlQnJhbmRWYXJpYW50LmgJKHJldmlzaW9uIDI3
MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DaGVja1ByaXZhdGVCcmFu
ZFZhcmlhbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAogCiBuYW1lc3BhY2Ug
SlNDIHsKIAorY2xhc3MgQWJzdHJhY3RTbG90VmlzaXRvcjsKIGNsYXNzIENoZWNrUHJpdmF0ZUJy
YW5kU3RhdHVzOwogCiBjbGFzcyBDaGVja1ByaXZhdGVCcmFuZFZhcmlhbnQgewpAQCAtNDYsOCAr
NDcsOCBAQCBwdWJsaWM6CiAKICAgICBib29sIGF0dGVtcHRUb01lcmdlKGNvbnN0IENoZWNrUHJp
dmF0ZUJyYW5kVmFyaWFudCYgb3RoZXIpOwogCi0gICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShTbG90
VmlzaXRvciYpOwotICAgIHZvaWQgbWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImKTsKKyAgICBERUNM
QVJFX1ZJU0lUX0FHR1JFR0FURTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lk
IG1hcmtJZkNoZWFwKFZpc2l0b3ImKTsKICAgICBib29sIGZpbmFsaXplKFZNJik7CiAKICAgICB2
b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTAwMSw3ICsxMDAxLDggQEAgc2l6ZV90IENvZGVCbG9jazo6ZXN0aW1hdGVkU2l6ZShKU0NlbGwq
IAogICAgIHJldHVybiBCYXNlOjplc3RpbWF0ZWRTaXplKGNlbGwsIHZtKSArIGV4dHJhTWVtb3J5
QWxsb2NhdGVkOwogfQogCi12b2lkIENvZGVCbG9jazo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNl
bGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3Zv
aWQgQ29kZUJsb2NrOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZp
c2l0b3IpCiB7CiAgICAgQ29kZUJsb2NrKiB0aGlzT2JqZWN0ID0ganNDYXN0PENvZGVCbG9jayo+
KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygp
KTsKQEAgLTEwMTAsOSArMTAxMSwxNCBAQCB2b2lkIENvZGVCbG9jazo6dmlzaXRDaGlsZHJlbihK
U0NlbGwqIGNlCiAgICAgdGhpc09iamVjdC0+dmlzaXRDaGlsZHJlbih2aXNpdG9yKTsKIH0KIAot
dm9pZCBDb2RlQmxvY2s6OnZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCitERUZJ
TkVfVklTSVRfQ0hJTERSRU4oQ29kZUJsb2NrKTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRv
cj4KK3ZvaWQgQ29kZUJsb2NrOjp2aXNpdENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAg
ICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2spOworCisgICAgbV92aXNpdENoaWxk
cmVuU2tpcHBlZER1ZVRvT2xkQWdlID0gZmFsc2U7CiAgICAgaWYgKENvZGVCbG9jayogb3RoZXJC
bG9jayA9IHNwZWNpYWxPU1JFbnRyeUJsb2NrT3JOdWxsKCkpCiAgICAgICAgIHZpc2l0b3IuYXBw
ZW5kVW5iYXJyaWVyZWQob3RoZXJCbG9jayk7CiAKQEAgLTEwMjksMTMgKzEwMzUsMjEgQEAgdm9p
ZCBDb2RlQmxvY2s6OnZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0bwogICAgIFZNOjpTcGFjZUFuZFNl
dDo6c2V0Rm9yKCpzdWJzcGFjZSgpKS5hZGQodGhpcyk7CiB9CiAKLWJvb2wgQ29kZUJsb2NrOjpz
aG91bGRWaXNpdFN0cm9uZ2x5KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYgbG9ja2VyKQorYm9v
bCBDb2RlQmxvY2s6OnNob3VsZFZpc2l0U3Ryb25nbHkoY29uc3QgQ29uY3VycmVudEpTTG9ja2Vy
JiBsb2NrZXIsIEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgaWYgKE9wdGlv
bnM6OmZvcmNlQ29kZUJsb2NrTGl2ZW5lc3MoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAg
ICBpZiAoc2hvdWxkSmV0dGlzb25EdWVUb09sZEFnZShsb2NrZXIpKQorICAgIGlmIChzaG91bGRK
ZXR0aXNvbkR1ZVRvT2xkQWdlKGxvY2tlciwgdmlzaXRvcikpIHsKKyAgICAgICAgaWYgKE9wdGlv
bnM6OnZlcmlmeUdDKCkpCisgICAgICAgICAgICBtX3Zpc2l0Q2hpbGRyZW5Ta2lwcGVkRHVlVG9P
bGRBZ2UgPSB0cnVlOwogICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKFVO
TElLRUxZKG1fdmlzaXRDaGlsZHJlblNraXBwZWREdWVUb09sZEFnZSkpIHsKKyAgICAgICAgUkVM
RUFTRV9BU1NFUlQoT3B0aW9uczo6dmVyaWZ5R0MoKSk7IC8vIG1sYW0gQVNTRVJUPworICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQogCiAgICAgLy8gSW50ZXJwcmV0ZXIgYW5kIEJhc2VsaW5l
IEpJVCBDb2RlQmxvY2tzIGRvbid0IG5lZWQgdG8gYmUgamV0dGlzb25lZCB3aGVuCiAgICAgLy8g
dGhlaXIgd2VhayByZWZlcmVuY2VzIGdvIHN0YWxlLiBTbyBpZiBhIGJhc2xpbmUgSklUIENvZGVC
bG9jayBnZXRzCkBAIC0xMDg2LDkgKzExMDAsOSBAQCBzdGF0aWMgU2Vjb25kcyB0aW1lVG9MaXZl
KEpJVFR5cGUgaml0VHlwCiAgICAgfQogfQogCi1ib29sIENvZGVCbG9jazo6c2hvdWxkSmV0dGlz
b25EdWVUb09sZEFnZShjb25zdCBDb25jdXJyZW50SlNMb2NrZXImKQorYm9vbCBDb2RlQmxvY2s6
OnNob3VsZEpldHRpc29uRHVlVG9PbGRBZ2UoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgQWJz
dHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKLSAgICBpZiAobV92bS0+aGVhcC5pc01hcmtl
ZCh0aGlzKSkKKyAgICBpZiAodmlzaXRvci5pc01hcmtlZCh0aGlzKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCiAgICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OmZvcmNlQ29kZUJsb2NrVG9KZXR0
aXNvbkR1ZVRvT2xkQWdlKCkpKQpAQCAtMTEwMSwxMiArMTExNSwxMyBAQCBib29sIENvZGVCbG9j
azo6c2hvdWxkSmV0dGlzb25EdWVUb09sZEFnCiB9CiAKICNpZiBFTkFCTEUoREZHX0pJVCkKLXN0
YXRpYyBib29sIHNob3VsZE1hcmtUcmFuc2l0aW9uKFZNJiB2bSwgREZHOjpXZWFrUmVmZXJlbmNl
VHJhbnNpdGlvbiYgdHJhbnNpdGlvbikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+CitzdGF0
aWMgaW5saW5lIGJvb2wgc2hvdWxkTWFya1RyYW5zaXRpb24oVmlzaXRvciYgdmlzaXRvciwgREZH
OjpXZWFrUmVmZXJlbmNlVHJhbnNpdGlvbiYgdHJhbnNpdGlvbikKIHsKLSAgICBpZiAodHJhbnNp
dGlvbi5tX2NvZGVPcmlnaW4gJiYgIXZtLmhlYXAuaXNNYXJrZWQodHJhbnNpdGlvbi5tX2NvZGVP
cmlnaW4uZ2V0KCkpKQorICAgIGlmICh0cmFuc2l0aW9uLm1fY29kZU9yaWdpbiAmJiAhdmlzaXRv
ci5pc01hcmtlZCh0cmFuc2l0aW9uLm1fY29kZU9yaWdpbi5nZXQoKSkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICAKLSAgICBpZiAoIXZtLmhlYXAuaXNNYXJrZWQodHJhbnNpdGlvbi5tX2Zy
b20uZ2V0KCkpKQorICAgIGlmICghdmlzaXRvci5pc01hcmtlZCh0cmFuc2l0aW9uLm1fZnJvbS5n
ZXQoKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKICAgICByZXR1cm4gdHJ1ZTsKQEAg
LTExMjIsOCArMTEzNywxMCBAQCBCeXRlY29kZUluZGV4IENvZGVCbG9jazo6Ynl0ZWNvZGVJbmRl
eEZvCiB9CiAjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCiAKLXZvaWQgQ29kZUJsb2NrOjpwcm9w
YWdhdGVUcmFuc2l0aW9ucyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBTbG90VmlzaXRvciYg
dmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIENvZGVCbG9jazo6cHJv
cGFnYXRlVHJhbnNpdGlvbnMoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgVmlzaXRvciYgdmlz
aXRvcikKIHsKKyAgICB0eXBlbmFtZSBWaXNpdG9yOjpTdXBwcmVzc0dDVmVyaWZpZXJTY29wZSBz
dXBwcmVzc1Njb3BlKHZpc2l0b3IpOwogICAgIFZNJiB2bSA9ICptX3ZtOwogCiAgICAgaWYgKGpp
dFR5cGUoKSA9PSBKSVRUeXBlOjpJbnRlcnByZXRlclRodW5rKSB7CkBAIC0xMTMzLDggKzExNTAs
OSBAQCB2b2lkIENvZGVCbG9jazo6cHJvcGFnYXRlVHJhbnNpdGlvbnMoY29uCiAgICAgICAgICAg
ICAgICAgU3RydWN0dXJlSUQgbmV3U3RydWN0dXJlSUQgPSBtZXRhZGF0YS5tX25ld1N0cnVjdHVy
ZUlEOwogICAgICAgICAgICAgICAgIGlmICghb2xkU3RydWN0dXJlSUQgfHwgIW5ld1N0cnVjdHVy
ZUlEKQogICAgICAgICAgICAgICAgICAgICByZXR1cm47CisKICAgICAgICAgICAgICAgICBTdHJ1
Y3R1cmUqIG9sZFN0cnVjdHVyZSA9IHZtLmhlYXAuc3RydWN0dXJlSURUYWJsZSgpLmdldChvbGRT
dHJ1Y3R1cmVJRCk7Ci0gICAgICAgICAgICAgICAgaWYgKHZtLmhlYXAuaXNNYXJrZWQob2xkU3Ry
dWN0dXJlKSkgeworICAgICAgICAgICAgICAgIGlmICh2aXNpdG9yLmlzTWFya2VkKG9sZFN0cnVj
dHVyZSkpIHsKICAgICAgICAgICAgICAgICAgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSB2
bS5oZWFwLnN0cnVjdHVyZUlEVGFibGUoKS5nZXQobmV3U3RydWN0dXJlSUQpOwogICAgICAgICAg
ICAgICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKG5ld1N0cnVjdHVyZSk7CiAgICAg
ICAgICAgICAgICAgfQpAQCAtMTE0OCwxMSArMTE2NiwxMSBAQCB2b2lkIENvZGVCbG9jazo6cHJv
cGFnYXRlVHJhbnNpdGlvbnMoY29uCiAKICAgICAgICAgICAgICAgICBKU0NlbGwqIHByb3BlcnR5
ID0gbWV0YWRhdGEubV9wcm9wZXJ0eS5nZXQoKTsKICAgICAgICAgICAgICAgICBBU1NFUlQocHJv
cGVydHkpOwotICAgICAgICAgICAgICAgIGlmICghdm0uaGVhcC5pc01hcmtlZChwcm9wZXJ0eSkp
CisgICAgICAgICAgICAgICAgaWYgKCF2aXNpdG9yLmlzTWFya2VkKHByb3BlcnR5KSkKICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgICAgICAgICAgU3RydWN0dXJlKiBvbGRT
dHJ1Y3R1cmUgPSB2bS5oZWFwLnN0cnVjdHVyZUlEVGFibGUoKS5nZXQob2xkU3RydWN0dXJlSUQp
OwotICAgICAgICAgICAgICAgIGlmICh2bS5oZWFwLmlzTWFya2VkKG9sZFN0cnVjdHVyZSkpIHsK
KyAgICAgICAgICAgICAgICBpZiAodmlzaXRvci5pc01hcmtlZChvbGRTdHJ1Y3R1cmUpKSB7CiAg
ICAgICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0gdm0uaGVhcC5zdHJ1
Y3R1cmVJRFRhYmxlKCkuZ2V0KG5ld1N0cnVjdHVyZUlEKTsKICAgICAgICAgICAgICAgICAgICAg
dmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZChuZXdTdHJ1Y3R1cmUpOwogICAgICAgICAgICAgICAg
IH0KQEAgLTExNzAsNyArMTE4OCw3IEBAIHZvaWQgQ29kZUJsb2NrOjpwcm9wYWdhdGVUcmFuc2l0
aW9ucyhjb24KICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgICAgICAgICAg
U3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUgPSB2bS5oZWFwLnN0cnVjdHVyZUlEVGFibGUoKS5nZXQo
b2xkU3RydWN0dXJlSUQpOwotICAgICAgICAgICAgICAgIGlmICh2bS5oZWFwLmlzTWFya2VkKG9s
ZFN0cnVjdHVyZSkpIHsKKyAgICAgICAgICAgICAgICBpZiAodmlzaXRvci5pc01hcmtlZChvbGRT
dHJ1Y3R1cmUpKSB7CiAgICAgICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJl
ID0gdm0uaGVhcC5zdHJ1Y3R1cmVJRFRhYmxlKCkuZ2V0KG5ld1N0cnVjdHVyZUlEKTsKICAgICAg
ICAgICAgICAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZChuZXdTdHJ1Y3R1cmUpOwog
ICAgICAgICAgICAgICAgIH0KQEAgLTExOTcsNyArMTIxNSw3IEBAIHZvaWQgQ29kZUJsb2NrOjpw
cm9wYWdhdGVUcmFuc2l0aW9ucyhjb24KICAgICAgICAgICAgIHZtLmdldFN0cnVjdHVyZShzdHJ1
Y3R1cmVJRCktPm1hcmtJZkNoZWFwKHZpc2l0b3IpOwogCiAgICAgICAgIGZvciAoYXV0byYgdHJh
bnNpdGlvbiA6IGRmZ0NvbW1vbi0+dHJhbnNpdGlvbnMpIHsKLSAgICAgICAgICAgIGlmIChzaG91
bGRNYXJrVHJhbnNpdGlvbih2bSwgdHJhbnNpdGlvbikpIHsKKyAgICAgICAgICAgIGlmIChzaG91
bGRNYXJrVHJhbnNpdGlvbih2aXNpdG9yLCB0cmFuc2l0aW9uKSkgewogICAgICAgICAgICAgICAg
IC8vIElmIHRoZSBmb2xsb3dpbmcgdGhyZWUgdGhpbmdzIGFyZSBsaXZlLCB0aGVuIHRoZSB0YXJn
ZXQgb2YgdGhlCiAgICAgICAgICAgICAgICAgLy8gdHJhbnNpdGlvbiBpcyBhbHNvIGxpdmU6CiAg
ICAgICAgICAgICAgICAgLy8KQEAgLTEyMjQsMTMgKzEyNDIsMTcgQEAgdm9pZCBDb2RlQmxvY2s6
OnByb3BhZ2F0ZVRyYW5zaXRpb25zKGNvbgogI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQogfQog
Ci12b2lkIENvZGVCbG9jazo6ZGV0ZXJtaW5lTGl2ZW5lc3MoY29uc3QgQ29uY3VycmVudEpTTG9j
a2VyJiwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZSB2b2lkIENvZGVCbG9jazo6cHJv
cGFnYXRlVHJhbnNpdGlvbnMoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgQWJzdHJhY3RTbG90
VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBDb2RlQmxvY2s6OnByb3BhZ2F0ZVRyYW5zaXRpb25z
KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIFNsb3RWaXNpdG9yJik7CisKK3RlbXBsYXRlPHR5
cGVuYW1lIFZpc2l0b3I+Cit2b2lkIENvZGVCbG9jazo6ZGV0ZXJtaW5lTGl2ZW5lc3MoY29uc3Qg
Q29uY3VycmVudEpTTG9ja2VyJiwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBVTlVTRURfUEFS
QU0odmlzaXRvcik7CiAgICAgCiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAgVk0mIHZtID0gKm1f
dm07Ci0gICAgaWYgKHZtLmhlYXAuaXNNYXJrZWQodGhpcykpCisgICAgaWYgKHZpc2l0b3IuaXNN
YXJrZWQodGhpcykpCiAgICAgICAgIHJldHVybjsKICAgICAKICAgICAvLyBJbiByYXJlIGFuZCB3
ZWlyZCBjYXNlcywgdGhpcyBjb3VsZCBiZSBjYWxsZWQgb24gYSBiYXNlbGluZSBDb2RlQmxvY2su
IE9uZSB0aGF0IEkgZm91bmQgd2FzCkBAIC0xMjQ3LDcgKzEyNjksNyBAQCB2b2lkIENvZGVCbG9j
azo6ZGV0ZXJtaW5lTGl2ZW5lc3MoY29uc3QgCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGRmZ0NvbW1vbi0+d2Vha1JlZmVyZW5jZXMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgSlNDZWxs
KiByZWZlcmVuY2UgPSBkZmdDb21tb24tPndlYWtSZWZlcmVuY2VzW2ldLmdldCgpOwogICAgICAg
ICBBU1NFUlQoIWpzRHluYW1pY0Nhc3Q8Q29kZUJsb2NrKj4odm0sIHJlZmVyZW5jZSkpOwotICAg
ICAgICBpZiAoIXZtLmhlYXAuaXNNYXJrZWQocmVmZXJlbmNlKSkgeworICAgICAgICBpZiAoIXZp
c2l0b3IuaXNNYXJrZWQocmVmZXJlbmNlKSkgewogICAgICAgICAgICAgYWxsQXJlTGl2ZVNvRmFy
ID0gZmFsc2U7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtMTI1NSw3ICsxMjc3
LDcgQEAgdm9pZCBDb2RlQmxvY2s6OmRldGVybWluZUxpdmVuZXNzKGNvbnN0IAogICAgIGlmIChh
bGxBcmVMaXZlU29GYXIpIHsKICAgICAgICAgZm9yIChTdHJ1Y3R1cmVJRCBzdHJ1Y3R1cmVJRCA6
IGRmZ0NvbW1vbi0+d2Vha1N0cnVjdHVyZVJlZmVyZW5jZXMpIHsKICAgICAgICAgICAgIFN0cnVj
dHVyZSogc3RydWN0dXJlID0gdm0uZ2V0U3RydWN0dXJlKHN0cnVjdHVyZUlEKTsKLSAgICAgICAg
ICAgIGlmICghdm0uaGVhcC5pc01hcmtlZChzdHJ1Y3R1cmUpKSB7CisgICAgICAgICAgICBpZiAo
IXZpc2l0b3IuaXNNYXJrZWQoc3RydWN0dXJlKSkgewogICAgICAgICAgICAgICAgIGFsbEFyZUxp
dmVTb0ZhciA9IGZhbHNlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQpA
QCAtMTI3Myw2ICsxMjk1LDkgQEAgdm9pZCBDb2RlQmxvY2s6OmRldGVybWluZUxpdmVuZXNzKGNv
bnN0IAogI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQogfQogCit0ZW1wbGF0ZSB2b2lkIENvZGVC
bG9jazo6ZGV0ZXJtaW5lTGl2ZW5lc3MoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgQWJzdHJh
Y3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBDb2RlQmxvY2s6OmRldGVybWluZUxpdmVu
ZXNzKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIFNsb3RWaXNpdG9yJik7CisKIHZvaWQgQ29k
ZUJsb2NrOjpmaW5hbGl6ZUxMSW50SW5saW5lQ2FjaGVzKCkKIHsKICAgICBWTSYgdm0gPSAqbV92
bTsKQEAgLTE2MTYsNiArMTY0MSw3IEBAIHZvaWQgQ29kZUJsb2NrOjpmaW5hbGl6ZVVuY29uZGl0
aW9uYWxseSgKICAgICB1cGRhdGVBY3Rpdml0eSgpOwogCiAgICAgVk06OlNwYWNlQW5kU2V0Ojpz
ZXRGb3IoKnN1YnNwYWNlKCkpLnJlbW92ZSh0aGlzKTsKKyAgICBtX3Zpc2l0Q2hpbGRyZW5Ta2lw
cGVkRHVlVG9PbGRBZ2UgPSBmYWxzZTsKIH0KIAogdm9pZCBDb2RlQmxvY2s6OmRlc3Ryb3koSlND
ZWxsKiBjZWxsKQpAQCAtMTgwOCw3ICsxODM0LDggQEAgdm9pZCBDb2RlQmxvY2s6OnJlc2V0SklU
RGF0YSgpCiB9CiAjZW5kaWYKIAotdm9pZCBDb2RlQmxvY2s6OnZpc2l0T1NSRXhpdFRhcmdldHMo
Y29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0
ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBDb2RlQmxvY2s6OnZpc2l0T1NSRXhpdFRhcmdldHMo
Y29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICAvLyBX
ZSBzdHJvbmdseSB2aXNpdCBPU1IgZXhpdHMgdGFyZ2V0cyBiZWNhdXNlIHdlIGRvbid0IHdhbnQg
dG8gZGVhbCB3aXRoCiAgICAgLy8gdGhlIGNvbXBsZXhpdHkgb2YgZ2VuZXJhdGluZyBhbiBleGl0
IHRhcmdldCBDb2RlQmxvY2sgb24gZGVtYW5kIGFuZApAQCAtMTgyOCw3ICsxODU1LDggQEAgdm9p
ZCBDb2RlQmxvY2s6OnZpc2l0T1NSRXhpdFRhcmdldHMoY29ucwogI2VuZGlmCiB9CiAKLXZvaWQg
Q29kZUJsb2NrOjpzdHJvbmdseVZpc2l0U3Ryb25nUmVmZXJlbmNlcyhjb25zdCBDb25jdXJyZW50
SlNMb2NrZXImIGxvY2tlciwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBWaXNpdG9yPgordm9pZCBDb2RlQmxvY2s6OnN0cm9uZ2x5VmlzaXRTdHJvbmdSZWZlcmVuY2Vz
KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYgbG9ja2VyLCBWaXNpdG9yJiB2aXNpdG9yKQogewog
ICAgIFVOVVNFRF9QQVJBTShsb2NrZXIpOwogICAgIApAQCAtMTg2NCw3ICsxODkyLDggQEAgdm9p
ZCBDb2RlQmxvY2s6OnN0cm9uZ2x5VmlzaXRTdHJvbmdSZWZlcgogI2VuZGlmCiB9CiAKLXZvaWQg
Q29kZUJsb2NrOjpzdHJvbmdseVZpc2l0V2Vha1JlZmVyZW5jZXMoY29uc3QgQ29uY3VycmVudEpT
TG9ja2VyJiwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
Pgordm9pZCBDb2RlQmxvY2s6OnN0cm9uZ2x5VmlzaXRXZWFrUmVmZXJlbmNlcyhjb25zdCBDb25j
dXJyZW50SlNMb2NrZXImLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFVOVVNFRF9QQVJBTSh2
aXNpdG9yKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9j
ay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxv
Y2suaAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAwOC0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAwOC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
IENvcHlyaWdodCAoQykgMjAwOCBDYW1lcm9uIFp3YXJpY2ggPGN3endhcmljaEB1d2F0ZXJsb28u
Y2E+CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0yMDEsMTAgKzIwMSwxMCBAQCBwdWJsaWM6CiAgICAg
Ly8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyMzY3NwogICAgIENv
ZGVCbG9jayogYmFzZWxpbmVWZXJzaW9uKCk7CiAKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVO
OworCiAgICAgc3RhdGljIHNpemVfdCBlc3RpbWF0ZWRTaXplKEpTQ2VsbCosIFZNJik7Ci0gICAg
c3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwogICAgIHN0
YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7Ci0gICAgdm9pZCB2aXNpdENoaWxkcmVuKFNsb3RW
aXNpdG9yJik7CiAgICAgdm9pZCBmaW5hbGl6ZVVuY29uZGl0aW9uYWxseShWTSYpOwogCiAgICAg
dm9pZCBub3RpZnlMZXhpY2FsQmluZGluZ1VwZGF0ZSgpOwpAQCAtOTQzLDYgKzk0Myw4IEBAIHBy
aXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIENvZGVCbG9ja1NldDsKICAgICBmcmllbmQgY2xhc3Mg
RXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZTsKIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0
b3I+IEFMV0FZU19JTkxJTkUgdm9pZCB2aXNpdENoaWxkcmVuKFZpc2l0b3ImKTsKKwogICAgIEJ5
dGVjb2RlTGl2ZW5lc3NBbmFseXNpcyYgbGl2ZW5lc3NBbmFseXNpc1Nsb3coKTsKICAgICAKICAg
ICBDb2RlQmxvY2sqIHNwZWNpYWxPU1JFbnRyeUJsb2NrT3JOdWxsKCk7CkBAIC05NjMsMTYgKzk2
NSwxNiBAQCBwcml2YXRlOgogICAgICAgICBtX2NvbnN0YW50UmVnaXN0ZXJzW3JlZy50b0NvbnN0
YW50SW5kZXgoKV0uc2V0KCptX3ZtLCB0aGlzLCB2YWx1ZSk7CiAgICAgfQogCi0gICAgYm9vbCBz
aG91bGRWaXNpdFN0cm9uZ2x5KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYpOworICAgIGJvb2wg
c2hvdWxkVmlzaXRTdHJvbmdseShjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBBYnN0cmFjdFNs
b3RWaXNpdG9yJik7CiAgICAgYm9vbCBzaG91bGRKZXR0aXNvbkR1ZVRvV2Vha1JlZmVyZW5jZShW
TSYpOwotICAgIGJvb2wgc2hvdWxkSmV0dGlzb25EdWVUb09sZEFnZShjb25zdCBDb25jdXJyZW50
SlNMb2NrZXImKTsKKyAgICBib29sIHNob3VsZEpldHRpc29uRHVlVG9PbGRBZ2UoY29uc3QgQ29u
Y3VycmVudEpTTG9ja2VyJiwgQWJzdHJhY3RTbG90VmlzaXRvciYpOwogICAgIAotICAgIHZvaWQg
cHJvcGFnYXRlVHJhbnNpdGlvbnMoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgU2xvdFZpc2l0
b3ImKTsKLSAgICB2b2lkIGRldGVybWluZUxpdmVuZXNzKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tl
ciYsIFNsb3RWaXNpdG9yJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCBw
cm9wYWdhdGVUcmFuc2l0aW9ucyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBWaXNpdG9yJik7
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCBkZXRlcm1pbmVMaXZlbmVzcyhj
b25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBWaXNpdG9yJik7CiAgICAgICAgIAotICAgIHZvaWQg
c3Ryb25nbHlWaXNpdFN0cm9uZ1JlZmVyZW5jZXMoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwg
U2xvdFZpc2l0b3ImKTsKLSAgICB2b2lkIHN0cm9uZ2x5VmlzaXRXZWFrUmVmZXJlbmNlcyhjb25z
dCBDb25jdXJyZW50SlNMb2NrZXImLCBTbG90VmlzaXRvciYpOwotICAgIHZvaWQgdmlzaXRPU1JF
eGl0VGFyZ2V0cyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBTbG90VmlzaXRvciYpOworICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgc3Ryb25nbHlWaXNpdFN0cm9uZ1JlZmVy
ZW5jZXMoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgVmlzaXRvciYpOworICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgc3Ryb25nbHlWaXNpdFdlYWtSZWZlcmVuY2VzKGNvbnN0
IENvbmN1cnJlbnRKU0xvY2tlciYsIFZpc2l0b3ImKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPiB2b2lkIHZpc2l0T1NSRXhpdFRhcmdldHMoY29uc3QgQ29uY3VycmVudEpTTG9ja2Vy
JiwgVmlzaXRvciYpOwogCiAgICAgdW5zaWduZWQgbnVtYmVyT2ZOb25Bcmd1bWVudFZhbHVlUHJv
ZmlsZXMoKSB7IHJldHVybiBtX251bWJlck9mTm9uQXJndW1lbnRWYWx1ZVByb2ZpbGVzOyB9CiAg
ICAgdW5zaWduZWQgdG90YWxOdW1iZXJPZlZhbHVlUHJvZmlsZXMoKSB7IHJldHVybiBudW1iZXJP
ZkFyZ3VtZW50VmFsdWVQcm9maWxlcygpICsgbnVtYmVyT2ZOb25Bcmd1bWVudFZhbHVlUHJvZmls
ZXMoKTsgfQpAQCAtMTAxMSw2ICsxMDEzLDcgQEAgcHJpdmF0ZToKICAgICB1bnNpZ25lZCBtX2J5
dGVjb2RlQ29zdCB7IDAgfTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgbV9zY29wZVJlZ2lzdGVyOwog
ICAgIG11dGFibGUgQ29kZUJsb2NrSGFzaCBtX2hhc2g7CisgICAgYm9vbCBtX3Zpc2l0Q2hpbGRy
ZW5Ta2lwcGVkRHVlVG9PbGRBZ2UgeyBmYWxzZSB9OwogCiAgICAgV3JpdGVCYXJyaWVyPFVubGlu
a2VkQ29kZUJsb2NrPiBtX3VubGlua2VkQ29kZTsKICAgICBXcml0ZUJhcnJpZXI8U2NyaXB0RXhl
Y3V0YWJsZT4gbV9vd25lckV4ZWN1dGFibGU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvRGVsZXRlQnlJZFZhcmlhbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9EZWxldGVCeUlkVmFyaWFudC5jcHAJKHJldmlzaW9uIDI3Mjkw
MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9EZWxldGVCeUlkVmFyaWFudC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAy
MC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtODgsMTIgKzg4LDE2IEBAIGJvb2wgRGVsZXRlQnlJZFZhcmlhbnQ6
OndyaXRlc1N0cnVjdHVyZXMKICAgICByZXR1cm4gISFuZXdTdHJ1Y3R1cmUoKTsKIH0KIAotdm9p
ZCBEZWxldGVCeUlkVmFyaWFudDo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3Ip
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBEZWxldGVCeUlkVmFyaWFudDo6dmlz
aXRBZ2dyZWdhdGVJbXBsKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgbV9pZGVudGlmaWVyLnZp
c2l0QWdncmVnYXRlKHZpc2l0b3IpOwogfQogCi12b2lkIERlbGV0ZUJ5SWRWYXJpYW50OjptYXJr
SWZDaGVhcChTbG90VmlzaXRvciYgdmlzaXRvcikKK0RFRklORV9WSVNJVF9BR0dSRUdBVEUoRGVs
ZXRlQnlJZFZhcmlhbnQpOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBEZWxl
dGVCeUlkVmFyaWFudDo6bWFya0lmQ2hlYXAoVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBpZiAo
bV9vbGRTdHJ1Y3R1cmUpCiAgICAgICAgIG1fb2xkU3RydWN0dXJlLT5tYXJrSWZDaGVhcCh2aXNp
dG9yKTsKQEAgLTEwMSw2ICsxMDUsOSBAQCB2b2lkIERlbGV0ZUJ5SWRWYXJpYW50OjptYXJrSWZD
aGVhcChTbG90CiAgICAgICAgIG1fbmV3U3RydWN0dXJlLT5tYXJrSWZDaGVhcCh2aXNpdG9yKTsK
IH0KIAordGVtcGxhdGUgdm9pZCBEZWxldGVCeUlkVmFyaWFudDo6bWFya0lmQ2hlYXAoQWJzdHJh
Y3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBEZWxldGVCeUlkVmFyaWFudDo6bWFya0lm
Q2hlYXAoU2xvdFZpc2l0b3ImKTsKKwogdm9pZCBEZWxldGVCeUlkVmFyaWFudDo6ZHVtcChQcmlu
dFN0cmVhbSYgb3V0KSBjb25zdAogewogICAgIGR1bXBJbkNvbnRleHQob3V0LCBudWxscHRyKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9EZWxldGVCeUlkVmFyaWFudC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9EZWxldGVCeUlk
VmFyaWFudC5oCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvRGVsZXRlQnlJZFZhcmlhbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDIwLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02MSw4ICs2MSw4IEBAIHB1
YmxpYzoKIAogICAgIGJvb2wgYXR0ZW1wdFRvTWVyZ2UoY29uc3QgRGVsZXRlQnlJZFZhcmlhbnQm
IG90aGVyKTsKIAotICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImKTsKLSAgICB2
b2lkIG1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9BR0dSRUdB
VEU7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCBtYXJrSWZDaGVhcChWaXNp
dG9yJik7CiAgICAgYm9vbCBmaW5hbGl6ZShWTSYpOwogCiAgICAgdm9pZCBkdW1wKFByaW50U3Ry
ZWFtJikgY29uc3Q7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRGVsZXRl
QnlTdGF0dXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9EZWxldGVCeVN0YXR1cy5jcHAJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9EZWxldGVCeVN0YXR1cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMC0yMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjU0LDE4
ICsyNTQsMjUgQEAgQ2FjaGVhYmxlSWRlbnRpZmllciBEZWxldGVCeVN0YXR1czo6c2luZwogICAg
IHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQgRGVsZXRlQnlTdGF0dXM6OnZpc2l0QWdncmVnYXRl
KFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQg
RGVsZXRlQnlTdGF0dXM6OnZpc2l0QWdncmVnYXRlSW1wbChWaXNpdG9yJiB2aXNpdG9yKQogewog
ICAgIGZvciAoRGVsZXRlQnlJZFZhcmlhbnQmIHZhcmlhbnQgOiBtX3ZhcmlhbnRzKQogICAgICAg
ICB2YXJpYW50LnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOwogfQogCi12b2lkIERlbGV0ZUJ5U3Rh
dHVzOjptYXJrSWZDaGVhcChTbG90VmlzaXRvciYgdmlzaXRvcikKK0RFRklORV9WSVNJVF9BR0dS
RUdBVEUoRGVsZXRlQnlTdGF0dXMpOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9p
ZCBEZWxldGVCeVN0YXR1czo6bWFya0lmQ2hlYXAoVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBm
b3IgKERlbGV0ZUJ5SWRWYXJpYW50JiB2YXJpYW50IDogbV92YXJpYW50cykKICAgICAgICAgdmFy
aWFudC5tYXJrSWZDaGVhcCh2aXNpdG9yKTsKIH0KIAordGVtcGxhdGUgdm9pZCBEZWxldGVCeVN0
YXR1czo6bWFya0lmQ2hlYXAoQWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBE
ZWxldGVCeVN0YXR1czo6bWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImKTsKKwogYm9vbCBEZWxldGVC
eVN0YXR1czo6ZmluYWxpemUoVk0mIHZtKQogewogICAgIGZvciAoYXV0byYgdmFyaWFudCA6IG1f
dmFyaWFudHMpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9EZWxldGVC
eVN0YXR1cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9E
ZWxldGVCeVN0YXR1cy5oCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvRGVsZXRlQnlTdGF0dXMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIwLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC04MSw4ICs4MSw4IEBA
IHB1YmxpYzoKICAgICAvLyBBdHRlbXB0cyB0byByZWR1Y2UgdGhlIHNldCBvZiB2YXJpYW50cyB0
byBmaXQgdGhlIGdpdmVuIHN0cnVjdHVyZSBzZXQuIFRoaXMgbWF5IGJlIGFwcHJveGltYXRlLgog
ICAgIHZvaWQgZmlsdGVyKGNvbnN0IFN0cnVjdHVyZVNldCYpOwogCi0gICAgdm9pZCB2aXNpdEFn
Z3JlZ2F0ZShTbG90VmlzaXRvciYpOwotICAgIHZvaWQgbWFya0lmQ2hlYXAoU2xvdFZpc2l0b3Im
KTsKKyAgICBERUNMQVJFX1ZJU0lUX0FHR1JFR0FURTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPiB2b2lkIG1hcmtJZkNoZWFwKFZpc2l0b3ImKTsKICAgICBib29sIGZpbmFsaXplKFZN
Jik7CiAKICAgICBib29sIGFwcGVuZFZhcmlhbnQoY29uc3QgRGVsZXRlQnlJZFZhcmlhbnQmKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9EaXJlY3RFdmFsQ29kZUNhY2hl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRGlyZWN0
RXZhbENvZGVDYWNoZS5jcHAJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9EaXJlY3RFdmFsQ29kZUNhY2hlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00NSw3
ICs0NSw4IEBAIHZvaWQgRGlyZWN0RXZhbENvZGVDYWNoZTo6Y2xlYXIoKQogICAgIG1fY2FjaGVN
YXAuY2xlYXIoKTsKIH0KIAotdm9pZCBEaXJlY3RFdmFsQ29kZUNhY2hlOjp2aXNpdEFnZ3JlZ2F0
ZShTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lk
IERpcmVjdEV2YWxDb2RlQ2FjaGU6OnZpc2l0QWdncmVnYXRlSW1wbChWaXNpdG9yJiB2aXNpdG9y
KQogewogICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fbG9jayk7CiAgICAgRXZhbENhY2hlTWFwOjpp
dGVyYXRvciBlbmQgPSBtX2NhY2hlTWFwLmVuZCgpOwpAQCAtNTMsNSArNTQsNiBAQCB2b2lkIERp
cmVjdEV2YWxDb2RlQ2FjaGU6OnZpc2l0QWdncmVnYXRlCiAgICAgICAgIHZpc2l0b3IuYXBwZW5k
KHB0ci0+dmFsdWUpOwogfQogCi19IC8vIG5hbWVzcGFjZSBKU0MKK0RFRklORV9WSVNJVF9BR0dS
RUdBVEUoRGlyZWN0RXZhbENvZGVDYWNoZSk7CiAKK30gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0RpcmVjdEV2YWxDb2RlQ2FjaGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRGlyZWN0RXZhbENvZGVD
YWNoZS5oCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvRGlyZWN0RXZhbENvZGVDYWNoZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAwOC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtOTcsNyArOTcsNyBA
QCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVy
biBtX2NhY2hlTWFwLmlzRW1wdHkoKTsgfQogCi0gICAgICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUo
U2xvdFZpc2l0b3ImKTsKKyAgICAgICAgREVDTEFSRV9WSVNJVF9BR0dSRUdBVEU7CiAKICAgICAg
ICAgdm9pZCBjbGVhcigpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
RXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UuY3BwCShyZXZpc2lv
biAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhlY3V0YWJsZVRv
Q29kZUJsb2NrRWRnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxOC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTMsNyArNTMsOCBAQCB2b2lkIEV4ZWN1
dGFibGVUb0NvZGVCbG9ja0VkZ2U6OmZpbmlzaENyCiAgICAgQVNTRVJUKCFpc0FjdGl2ZSgpKTsK
IH0KIAotdm9pZCBFeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlOjp2aXNpdENoaWxkcmVuKEpTQ2Vs
bCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
Pgordm9pZCBFeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlOjp2aXNpdENoaWxkcmVuSW1wbChKU0Nl
bGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgVk0mIHZtID0gdmlzaXRvci52bSgp
OwogICAgIEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UqIGVkZ2UgPSBqc0Nhc3Q8RXhlY3V0YWJs
ZVRvQ29kZUJsb2NrRWRnZSo+KGNlbGwpOwpAQCAtNjEsNyArNjIsNyBAQCB2b2lkIEV4ZWN1dGFi
bGVUb0NvZGVCbG9ja0VkZ2U6OnZpc2l0Q2hpCiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbihjZWxs
LCB2aXNpdG9yKTsKIAogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gZWRnZS0+bV9jb2RlQmxv
Y2suZ2V0KCk7Ci0gICAgCisKICAgICAvLyBJdCdzIHBvc3NpYmxlIGZvciBzb21lb25lIHRvIGhv
bGQgYSBwb2ludGVyIHRvIHRoZSBlZGdlIGFmdGVyIHRoZSBlZGdlIGhhcyBjbGVhcmVkIGl0cyB3
ZWFrCiAgICAgLy8gcmVmZXJlbmNlIHRvIHRoZSBjb2RlQmxvY2suIEluIGEgY29uc2VydmF0aXZl
IEdDIGxpa2Ugb3VycywgdGhhdCBjb3VsZCBoYXBwZW4gYXQgcmFuZG9tIGZvcgogICAgIC8vIG5v
IGdvb2QgcmVhc29uIGFuZCBpdCdzIFRvdGFsbHkgT0sgKFRNKS4gU2VlIGZpbmFsaXplVW5jb25k
aXRpb25hbGx5KCkgZm9yIHdoZXJlIHdlIGNsZWFyCkBAIC03NSwxMSArNzYsMTEgQEAgdm9pZCBF
eGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlOjp2aXNpdENoaQogICAgIH0KICAgICAKICAgICBDb25j
dXJyZW50SlNMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrKTsKLSAgICAKLSAgICBpZiAo
Y29kZUJsb2NrLT5zaG91bGRWaXNpdFN0cm9uZ2x5KGxvY2tlcikpCisKKyAgICBpZiAoY29kZUJs
b2NrLT5zaG91bGRWaXNpdFN0cm9uZ2x5KGxvY2tlciwgdmlzaXRvcikpCiAgICAgICAgIHZpc2l0
b3IuYXBwZW5kVW5iYXJyaWVyZWQoY29kZUJsb2NrKTsKICAgICAKLSAgICBpZiAoIXZtLmhlYXAu
aXNNYXJrZWQoY29kZUJsb2NrKSkKKyAgICBpZiAoIXZpc2l0b3IuaXNNYXJrZWQoY29kZUJsb2Nr
KSkKICAgICAgICAgdm0uZXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZXNXaXRoRmluYWxpemVycy5h
ZGQoZWRnZSk7CiAgICAgCiAgICAgaWYgKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChjb2RlQmxv
Y2stPmppdFR5cGUoKSkpIHsKQEAgLTExNyw3ICsxMTgsMTAgQEAgdm9pZCBFeGVjdXRhYmxlVG9D
b2RlQmxvY2tFZGdlOjp2aXNpdENoaQogICAgIGVkZ2UtPnJ1bkNvbnN0cmFpbnQobG9ja2VyLCB2
bSwgdmlzaXRvcik7CiB9CiAKLXZvaWQgRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZTo6dmlzaXRP
dXRwdXRDb25zdHJhaW50cyhKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorREVG
SU5FX1ZJU0lUX0NISUxEUkVOKEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UpOworCit0ZW1wbGF0
ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBFeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlOjp2aXNp
dE91dHB1dENvbnN0cmFpbnRzSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7
CiAgICAgVk0mIHZtID0gdmlzaXRvci52bSgpOwogICAgIEV4ZWN1dGFibGVUb0NvZGVCbG9ja0Vk
Z2UqIGVkZ2UgPSBqc0Nhc3Q8RXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZSo+KGNlbGwpOwpAQCAt
MTI1LDYgKzEyOSw4IEBAIHZvaWQgRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZTo6dmlzaXRPdXQK
ICAgICBlZGdlLT5ydW5Db25zdHJhaW50KE5vTG9ja2luZ05lY2Vzc2FyeSwgdm0sIHZpc2l0b3Ip
OwogfQogCitERUZJTkVfVklTSVRfT1VUUFVUX0NPTlNUUkFJTlRTKEV4ZWN1dGFibGVUb0NvZGVC
bG9ja0VkZ2UpOworCiB2b2lkIEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2U6OmZpbmFsaXplVW5j
b25kaXRpb25hbGx5KFZNJiB2bSkKIHsKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IG1fY29k
ZUJsb2NrLmdldCgpOwpAQCAtMTg2LDE2ICsxOTIsMjEgQEAgRXhlY3V0YWJsZVRvQ29kZUJsb2Nr
RWRnZTo6RXhlY3V0YWJsZVRvQwogewogfQogCi12b2lkIEV4ZWN1dGFibGVUb0NvZGVCbG9ja0Vk
Z2U6OnJ1bkNvbnN0cmFpbnQoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiBsb2NrZXIsIFZNJiB2
bSwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9p
ZCBFeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlOjpydW5Db25zdHJhaW50KGNvbnN0IENvbmN1cnJl
bnRKU0xvY2tlciYgbG9ja2VyLCBWTSYgdm0sIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgQ29k
ZUJsb2NrKiBjb2RlQmxvY2sgPSBtX2NvZGVCbG9jay5nZXQoKTsKICAgICAKICAgICBjb2RlQmxv
Y2stPnByb3BhZ2F0ZVRyYW5zaXRpb25zKGxvY2tlciwgdmlzaXRvcik7CiAgICAgY29kZUJsb2Nr
LT5kZXRlcm1pbmVMaXZlbmVzcyhsb2NrZXIsIHZpc2l0b3IpOwotICAgIAotICAgIGlmICh2bS5o
ZWFwLmlzTWFya2VkKGNvZGVCbG9jaykpCisKKyAgICBpZiAodmlzaXRvci5pc01hcmtlZChjb2Rl
QmxvY2spKQogICAgICAgICB2bS5leGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlc1dpdGhDb25zdHJh
aW50cy5yZW1vdmUodGhpcyk7CiB9CiAKK3RlbXBsYXRlIHZvaWQgRXhlY3V0YWJsZVRvQ29kZUJs
b2NrRWRnZTo6cnVuQ29uc3RyYWludChjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBWTSYsIEFi
c3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgRXhlY3V0YWJsZVRvQ29kZUJsb2Nr
RWRnZTo6cnVuQ29uc3RyYWludChjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBWTSYsIFNsb3RW
aXNpdG9yJik7CisKKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9FeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGFibGVUb0NvZGVCbG9ja0Vk
Z2UuaAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0V4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTUzLDkgKzUz
LDkgQEAgcHVibGljOgogICAgIERFQ0xBUkVfSU5GTzsKIAogICAgIENvZGVCbG9jayogY29kZUJs
b2NrKCkgY29uc3QgeyByZXR1cm4gbV9jb2RlQmxvY2suZ2V0KCk7IH0KLSAgICAKLSAgICBzdGF0
aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7Ci0gICAgc3RhdGlj
IHZvaWQgdmlzaXRPdXRwdXRDb25zdHJhaW50cyhKU0NlbGwqLCBTbG90VmlzaXRvciYpOworCisg
ICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKKyAgICBERUNMQVJFX1ZJU0lUX09VVFBVVF9DT05T
VFJBSU5UUzsKICAgICB2b2lkIGZpbmFsaXplVW5jb25kaXRpb25hbGx5KFZNJik7CiAgICAgCiAg
ICAgc3RhdGljIENvZGVCbG9jayogdW53cmFwKEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UqIGVk
Z2UpCkBAIC04MSw5ICs4MSw5IEBAIHByaXZhdGU6CiAgICAgdm9pZCBhY3RpdmF0ZSgpOwogICAg
IHZvaWQgZGVhY3RpdmF0ZSgpOwogICAgIGJvb2wgaXNBY3RpdmUoKSBjb25zdDsKLSAgICAKLSAg
ICB2b2lkIHJ1bkNvbnN0cmFpbnQoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgVk0mLCBTbG90
VmlzaXRvciYpOwotICAgIAorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCBy
dW5Db25zdHJhaW50KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIFZNJiwgVmlzaXRvciYpOwor
CiAgICAgV3JpdGVCYXJyaWVyPENvZGVCbG9jaz4gbV9jb2RlQmxvY2s7CiB9OwogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFZhcmlhbnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkVmFyaWFudC5jcHAJ
KHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRC
eUlkVmFyaWFudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDE0LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE0LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xNTYsMTYgKzE1NiwyMyBAQCBib29s
IEdldEJ5SWRWYXJpYW50OjphdHRlbXB0VG9NZXJnZShjb25zCiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKLXZvaWQgR2V0QnlJZFZhcmlhbnQ6OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJiB2aXNp
dG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgR2V0QnlJZFZhcmlhbnQ6OnZp
c2l0QWdncmVnYXRlSW1wbChWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIG1faWRlbnRpZmllci52
aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKIH0KIAotdm9pZCBHZXRCeUlkVmFyaWFudDo6bWFya0lm
Q2hlYXAoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCitERUZJTkVfVklTSVRfQUdHUkVHQVRFKEdldEJ5
SWRWYXJpYW50KTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgR2V0QnlJZFZh
cmlhbnQ6Om1hcmtJZkNoZWFwKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgbV9zdHJ1Y3R1cmVT
ZXQubWFya0lmQ2hlYXAodmlzaXRvcik7CiB9CiAKK3RlbXBsYXRlIHZvaWQgR2V0QnlJZFZhcmlh
bnQ6Om1hcmtJZkNoZWFwKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgR2V0
QnlJZFZhcmlhbnQ6Om1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJik7CisKIGJvb2wgR2V0QnlJZFZh
cmlhbnQ6OmZpbmFsaXplKFZNJiB2bSkKIHsKICAgICBpZiAoIW1fc3RydWN0dXJlU2V0LmlzU3Rp
bGxBbGl2ZSh2bSkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJ
ZFZhcmlhbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
R2V0QnlJZFZhcmlhbnQuaAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0dldEJ5SWRWYXJpYW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03Nyw4ICs3
Nyw4IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgYXR0ZW1wdFRvTWVyZ2UoY29uc3QgR2V0QnlJZFZh
cmlhbnQmIG90aGVyKTsKICAgICAKLSAgICB2b2lkIHZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9y
Jik7Ci0gICAgdm9pZCBtYXJrSWZDaGVhcChTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklT
SVRfQUdHUkVHQVRFOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgbWFya0lm
Q2hlYXAoVmlzaXRvciYpOwogICAgIGJvb2wgZmluYWxpemUoVk0mKTsKICAgICAKICAgICB2b2lk
IGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9HZXRCeVN0YXR1cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0dldEJ5U3RhdHVzLmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5U3RhdHVzLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTUzMCw3ICs1MzAsOCBAQCB2b2lkIEdldEJ5U3RhdHVzOjpmaWx0ZXIoY29uc3QgU3RydWN0
dXJlCiAgICAgICAgIG1fc3RhdGUgPSBOb0luZm9ybWF0aW9uOwogfQogCi12b2lkIEdldEJ5U3Rh
dHVzOjp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVu
YW1lIFZpc2l0b3I+Cit2b2lkIEdldEJ5U3RhdHVzOjp2aXNpdEFnZ3JlZ2F0ZUltcGwoVmlzaXRv
ciYgdmlzaXRvcikKIHsKICAgICBpZiAoaXNNb2R1bGVOYW1lc3BhY2UoKSkKICAgICAgICAgbV9t
b2R1bGVOYW1lc3BhY2VEYXRhLT5tX2lkZW50aWZpZXIudmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7
CkBAIC01MzgsMTIgKzUzOSwxOCBAQCB2b2lkIEdldEJ5U3RhdHVzOjp2aXNpdEFnZ3JlZ2F0ZShT
bG90VmlzCiAgICAgICAgIHZhcmlhbnQudmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7CiB9CiAKLXZv
aWQgR2V0QnlTdGF0dXM6Om1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorREVGSU5F
X1ZJU0lUX0FHR1JFR0FURShHZXRCeVN0YXR1cyk7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0
b3I+Cit2b2lkIEdldEJ5U3RhdHVzOjptYXJrSWZDaGVhcChWaXNpdG9yJiB2aXNpdG9yKQogewog
ICAgIGZvciAoR2V0QnlJZFZhcmlhbnQmIHZhcmlhbnQgOiBtX3ZhcmlhbnRzKQogICAgICAgICB2
YXJpYW50Lm1hcmtJZkNoZWFwKHZpc2l0b3IpOwogfQogCit0ZW1wbGF0ZSB2b2lkIEdldEJ5U3Rh
dHVzOjptYXJrSWZDaGVhcChBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEdl
dEJ5U3RhdHVzOjptYXJrSWZDaGVhcChTbG90VmlzaXRvciYpOworCiBib29sIEdldEJ5U3RhdHVz
OjpmaW5hbGl6ZShWTSYgdm0pCiB7CiAgICAgZm9yIChHZXRCeUlkVmFyaWFudCYgdmFyaWFudCA6
IG1fdmFyaWFudHMpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRC
eVN0YXR1cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9H
ZXRCeVN0YXR1cy5oCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvR2V0QnlTdGF0dXMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTExOCw4ICsxMTgsOCBA
QCBwdWJsaWM6CiAgICAgSlNNb2R1bGVFbnZpcm9ubWVudCogbW9kdWxlRW52aXJvbm1lbnQoKSBj
b25zdCB7IHJldHVybiBtX21vZHVsZU5hbWVzcGFjZURhdGEtPm1fbW9kdWxlRW52aXJvbm1lbnQ7
IH0KICAgICBTY29wZU9mZnNldCBzY29wZU9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fbW9kdWxl
TmFtZXNwYWNlRGF0YS0+bV9zY29wZU9mZnNldDsgfQogICAgIAotICAgIHZvaWQgdmlzaXRBZ2dy
ZWdhdGUoU2xvdFZpc2l0b3ImKTsKLSAgICB2b2lkIG1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJik7
CisgICAgREVDTEFSRV9WSVNJVF9BR0dSRUdBVEU7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlz
aXRvcj4gdm9pZCBtYXJrSWZDaGVhcChWaXNpdG9yJik7CiAgICAgYm9vbCBmaW5hbGl6ZShWTSYp
OyAvLyBSZXR1cm4gdHJ1ZSBpZiB0aGlzIGdldHMgdG8gbGl2ZS4KIAogICAgIGJvb2wgYXBwZW5k
VmFyaWFudChjb25zdCBHZXRCeUlkVmFyaWFudCYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0luQnlJZFN0YXR1cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0luQnlJZFN0YXR1cy5jcHAJKHJldmlzaW9uIDI3MjkwMikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbkJ5SWRTdGF0dXMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxOCBZdXN1a2Ug
U3V6dWtpIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+LgotICogQ29weXJpZ2h0IChDKSAyMDE4IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOC0yMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMjUxLDEyICsyNTEsMTYgQEAgdm9pZCBJbkJ5SWRTdGF0dXM6OmZpbHRlcihj
b25zdCBTdHJ1Y3R1cgogICAgICAgICBtX3N0YXRlID0gTm9JbmZvcm1hdGlvbjsKIH0KIAotdm9p
ZCBJbkJ5SWRTdGF0dXM6Om1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxh
dGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSW5CeUlkU3RhdHVzOjptYXJrSWZDaGVhcChWaXNp
dG9yJiB2aXNpdG9yKQogewogICAgIGZvciAoSW5CeUlkVmFyaWFudCYgdmFyaWFudCA6IG1fdmFy
aWFudHMpCiAgICAgICAgIHZhcmlhbnQubWFya0lmQ2hlYXAodmlzaXRvcik7CiB9CiAKK3RlbXBs
YXRlIHZvaWQgSW5CeUlkU3RhdHVzOjptYXJrSWZDaGVhcChBYnN0cmFjdFNsb3RWaXNpdG9yJik7
Cit0ZW1wbGF0ZSB2b2lkIEluQnlJZFN0YXR1czo6bWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImKTsK
KwogYm9vbCBJbkJ5SWRTdGF0dXM6OmZpbmFsaXplKFZNJiB2bSkKIHsKICAgICBmb3IgKEluQnlJ
ZFZhcmlhbnQmIHZhcmlhbnQgOiBtX3ZhcmlhbnRzKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvSW5CeUlkU3RhdHVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0luQnlJZFN0YXR1cy5oCShyZXZpc2lvbiAyNzI5MDIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5CeUlkU3RhdHVzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDE4IFl1c3VrZSBTdXp1
a2kgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4uCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0xMDYsNyArMTA2LDcgQEAgcHVibGljOgogICAgIC8vIEF0dGVtcHRzIHRvIHJlZHVj
ZSB0aGUgc2V0IG9mIHZhcmlhbnRzIHRvIGZpdCB0aGUgZ2l2ZW4gc3RydWN0dXJlIHNldC4gVGhp
cyBtYXkgYmUgYXBwcm94aW1hdGUuCiAgICAgdm9pZCBmaWx0ZXIoY29uc3QgU3RydWN0dXJlU2V0
Jik7CiAgICAgCi0gICAgdm9pZCBtYXJrSWZDaGVhcChTbG90VmlzaXRvciYpOworICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgbWFya0lmQ2hlYXAoVmlzaXRvciYpOwogICAgIGJv
b2wgZmluYWxpemUoVk0mKTsKIAogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luQnlJZFZhcmlhbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbkJ5SWRWYXJpYW50
LmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0luQnlJZFZhcmlhbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAq
IENvcHlyaWdodCAoQykgMjAxOCBZdXN1a2UgU3V6dWtpIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+
LgotICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxOC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjQsMTEgKzY0LDE1IEBAIGJv
b2wgSW5CeUlkVmFyaWFudDo6YXR0ZW1wdFRvTWVyZ2UoY29uc3QKICAgICByZXR1cm4gdHJ1ZTsK
IH0KIAotdm9pZCBJbkJ5SWRWYXJpYW50OjptYXJrSWZDaGVhcChTbG90VmlzaXRvciYgdmlzaXRv
cikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEluQnlJZFZhcmlhbnQ6Om1hcmtJ
ZkNoZWFwKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgbV9zdHJ1Y3R1cmVTZXQubWFya0lmQ2hl
YXAodmlzaXRvcik7CiB9CiAKK3RlbXBsYXRlIHZvaWQgSW5CeUlkVmFyaWFudDo6bWFya0lmQ2hl
YXAoQWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBJbkJ5SWRWYXJpYW50Ojpt
YXJrSWZDaGVhcChTbG90VmlzaXRvciYpOworCiBib29sIEluQnlJZFZhcmlhbnQ6OmZpbmFsaXpl
KFZNJiB2bSkKIHsKICAgICBpZiAoIW1fc3RydWN0dXJlU2V0LmlzU3RpbGxBbGl2ZSh2bSkpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5CeUlkVmFyaWFudC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbkJ5SWRWYXJpYW50LmgJ
KHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbkJ5
SWRWYXJpYW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogQ29weXJp
Z2h0IChDKSAyMDE4IFl1c3VrZSBTdXp1a2kgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4uCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE4LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01Nyw3ICs1Nyw3IEBAIHB1YmxpYzoKIAog
ICAgIGJvb2wgYXR0ZW1wdFRvTWVyZ2UoY29uc3QgSW5CeUlkVmFyaWFudCYgb3RoZXIpOwogICAg
IAotICAgIHZvaWQgbWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImKTsKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBWaXNpdG9yPiB2b2lkIG1hcmtJZkNoZWFwKFZpc2l0b3ImKTsKICAgICBib29sIGZpbmFs
aXplKFZNJik7CiAKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnRlcm5hbEZ1bmN0aW9uQWxsb2NhdGlvblBy
b2ZpbGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW50
ZXJuYWxGdW5jdGlvbkFsbG9jYXRpb25Qcm9maWxlLmgJKHJldmlzaW9uIDI3MjkwMikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnRlcm5hbEZ1bmN0aW9uQWxsb2NhdGlvblBy
b2ZpbGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM5LDcgKzM5LDcgQEAgcHVibGljOgogICAgIFN0
cnVjdHVyZSogY3JlYXRlQWxsb2NhdGlvblN0cnVjdHVyZUZyb21CYXNlKFZNJiwgSlNHbG9iYWxP
YmplY3QqLCBKU0NlbGwqIG93bmVyLCBKU09iamVjdCogcHJvdG90eXBlLCBTdHJ1Y3R1cmUqIGJh
c2UpOwogCiAgICAgdm9pZCBjbGVhcigpIHsgbV9zdHJ1Y3R1cmUuY2xlYXIoKTsgfQotICAgIHZv
aWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsgdmlzaXRvci5hcHBlbmQo
bV9zdHJ1Y3R1cmUpOyB9CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCB2aXNp
dEFnZ3JlZ2F0ZShWaXNpdG9yJiB2aXNpdG9yKSB7IHZpc2l0b3IuYXBwZW5kKG1fc3RydWN0dXJl
KTsgfQogCiBwcml2YXRlOgogICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1fc3RydWN0dXJl
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09iamVjdEFsbG9jYXRpb25Q
cm9maWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09i
amVjdEFsbG9jYXRpb25Qcm9maWxlLmgJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9PYmplY3RBbGxvY2F0aW9uUHJvZmlsZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE3IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtNjQsNyArNjQsOCBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIEFTU0VSVChpc051bGwo
KSk7CiAgICAgfQogCi0gICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYgdmlzaXRv
cikKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgorICAgIHZvaWQgdmlzaXRBZ2dyZWdh
dGUoVmlzaXRvciYgdmlzaXRvcikKICAgICB7CiAgICAgICAgIHZpc2l0b3IuYXBwZW5kKG1fc3Ry
dWN0dXJlKTsKICAgICB9CkBAIC0xMTAsNyArMTExLDggQEAgcHVibGljOgogICAgICAgICBBU1NF
UlQoaXNOdWxsKCkpOwogICAgIH0KIAotICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0
b3ImIHZpc2l0b3IpCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KKyAgICB2b2lkIHZp
c2l0QWdncmVnYXRlKFZpc2l0b3ImIHZpc2l0b3IpCiAgICAgewogICAgICAgICBCYXNlOjp2aXNp
dEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKICAgICAgICAgdmlzaXRvci5hcHBlbmQobV9wcm90b3R5cGUp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1v
cnBoaWNBY2Nlc3MuY3BwCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNC0yMDIwIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzU4
LDcgKzM1OCw4IEBAIGJvb2wgUG9seW1vcnBoaWNBY2Nlc3M6OnZpc2l0V2VhayhWTSYgdm0KICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBQb2x5bW9ycGhpY0FjY2Vzczo6cHJvcGFnYXRlVHJh
bnNpdGlvbnMoU2xvdFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0Cit0ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPgorYm9vbCBQb2x5bW9ycGhpY0FjY2Vzczo6cHJvcGFnYXRlVHJhbnNpdGlvbnMoVmlz
aXRvciYgdmlzaXRvcikgY29uc3QKIHsKICAgICBib29sIHJlc3VsdCA9IHRydWU7CiAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemUoKTsgKytpKQpAQCAtMzY2LDEyICszNjcsMTggQEAg
Ym9vbCBQb2x5bW9ycGhpY0FjY2Vzczo6cHJvcGFnYXRlVHJhbnNpdAogICAgIHJldHVybiByZXN1
bHQ7CiB9CiAKLXZvaWQgUG9seW1vcnBoaWNBY2Nlc3M6OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNp
dG9yJiB2aXNpdG9yKQordGVtcGxhdGUgYm9vbCBQb2x5bW9ycGhpY0FjY2Vzczo6cHJvcGFnYXRl
VHJhbnNpdGlvbnMoQWJzdHJhY3RTbG90VmlzaXRvciYpIGNvbnN0OwordGVtcGxhdGUgYm9vbCBQ
b2x5bW9ycGhpY0FjY2Vzczo6cHJvcGFnYXRlVHJhbnNpdGlvbnMoU2xvdFZpc2l0b3ImKSBjb25z
dDsKKwordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgUG9seW1vcnBoaWNBY2Nlc3M6
OnZpc2l0QWdncmVnYXRlSW1wbChWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBzaXplKCk7ICsraSkKICAgICAgICAgYXQoaSkudmlzaXRBZ2dyZWdhdGUo
dmlzaXRvcik7CiB9CiAKK0RFRklORV9WSVNJVF9BR0dSRUdBVEUoUG9seW1vcnBoaWNBY2Nlc3Mp
OworCiB2b2lkIFBvbHltb3JwaGljQWNjZXNzOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0
CiB7CiAgICAgb3V0LnByaW50KFJhd1BvaW50ZXIodGhpcyksICI6WyIpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmgJKHJl
dmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9y
cGhpY0FjY2Vzcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxNC0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTUyLDE0ICsxNTIsMTQgQEAgcHVibGlj
OgogICAgIGNvbnN0IEFjY2Vzc0Nhc2UmIGF0KHVuc2lnbmVkIGkpIGNvbnN0IHsgcmV0dXJuICpt
X2xpc3RbaV07IH0KICAgICBjb25zdCBBY2Nlc3NDYXNlJiBvcGVyYXRvcltdKHVuc2lnbmVkIGkp
IGNvbnN0IHsgcmV0dXJuICptX2xpc3RbaV07IH0KIAotICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUo
U2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0FHR1JFR0FURTsKIAogICAgIC8vIElm
IHRoaXMgcmV0dXJucyBmYWxzZSB0aGVuIHdlIGFyZSByZXF1ZXN0aW5nIGEgcmVzZXQgb2YgdGhl
IG93bmluZyBTdHJ1Y3R1cmVTdHViSW5mby4KICAgICBib29sIHZpc2l0V2VhayhWTSYpIGNvbnN0
OwogICAgIAogICAgIC8vIFRoaXMgcmV0dXJucyB0cnVlIGlmIGl0IGhhcyBtYXJrZWQgZXZlcnl0
aGluZyBpdCB3aWxsIGV2ZXIgbWFya2VkLiBUaGlzIGNhbiBiZSB1c2VkIGFzIGFuCiAgICAgLy8g
b3B0aW1pemF0aW9uIHRvIHRoZW4gYXZvaWQgY2FsbGluZyB0aGlzIG1ldGhvZCBhZ2FpbiBkdXJp
bmcgdGhlIGZpeHBvaW50LgotICAgIGJvb2wgcHJvcGFnYXRlVHJhbnNpdGlvbnMoU2xvdFZpc2l0
b3ImKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiBib29sIHByb3BhZ2F0
ZVRyYW5zaXRpb25zKFZpc2l0b3ImKSBjb25zdDsKIAogICAgIHZvaWQgYWJvdXRUb0RpZSgpOwog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0
dXMuY3BwCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvUHV0QnlJZFN0YXR1cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zOTYsMTIgKzM5NiwxNiBA
QCBQdXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OnNsb3dWZXJzaW9uCiAgICAgcmV0dXJuIFB1
dEJ5SWRTdGF0dXMobWFrZXNDYWxscygpID8gTWFrZXNDYWxscyA6IFRha2VzU2xvd1BhdGgpOwog
fQogCi12b2lkIFB1dEJ5SWRTdGF0dXM6Om1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJiB2aXNpdG9y
KQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgUHV0QnlJZFN0YXR1czo6bWFya0lm
Q2hlYXAoVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBmb3IgKFB1dEJ5SWRWYXJpYW50JiB2YXJp
YW50IDogbV92YXJpYW50cykKICAgICAgICAgdmFyaWFudC5tYXJrSWZDaGVhcCh2aXNpdG9yKTsK
IH0KIAordGVtcGxhdGUgdm9pZCBQdXRCeUlkU3RhdHVzOjptYXJrSWZDaGVhcChBYnN0cmFjdFNs
b3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIFB1dEJ5SWRTdGF0dXM6Om1hcmtJZkNoZWFwKFNs
b3RWaXNpdG9yJik7CisKIGJvb2wgUHV0QnlJZFN0YXR1czo6ZmluYWxpemUoVk0mIHZtKQogewog
ICAgIGZvciAoUHV0QnlJZFZhcmlhbnQmIHZhcmlhbnQgOiBtX3ZhcmlhbnRzKSB7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmgJKHJldmlz
aW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3Rh
dHVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDEyLTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEyLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMTcsNyArMTE3LDcgQEAgcHVibGljOgogICAgIGNv
bnN0IFB1dEJ5SWRWYXJpYW50JiBhdChzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fdmFy
aWFudHNbaW5kZXhdOyB9CiAgICAgY29uc3QgUHV0QnlJZFZhcmlhbnQmIG9wZXJhdG9yW10oc2l6
ZV90IGluZGV4KSBjb25zdCB7IHJldHVybiBhdChpbmRleCk7IH0KICAgICAKLSAgICB2b2lkIG1h
cmtJZkNoZWFwKFNsb3RWaXNpdG9yJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4g
dm9pZCBtYXJrSWZDaGVhcChWaXNpdG9yJik7CiAgICAgYm9vbCBmaW5hbGl6ZShWTSYpOwogICAg
IAogICAgIHZvaWQgbWVyZ2UoY29uc3QgUHV0QnlJZFN0YXR1cyYpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuY3BwCShyZXZpc2lv
biAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlh
bnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxNC0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYyLDEzICsyNjIsMTcgQEAgYm9vbCBQdXRCeUlk
VmFyaWFudDo6YXR0ZW1wdFRvTWVyZ2VUcmFucwogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lk
IFB1dEJ5SWRWYXJpYW50OjptYXJrSWZDaGVhcChTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBs
YXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFB1dEJ5SWRWYXJpYW50OjptYXJrSWZDaGVhcChW
aXNpdG9yJiB2aXNpdG9yKQogewogICAgIG1fb2xkU3RydWN0dXJlLm1hcmtJZkNoZWFwKHZpc2l0
b3IpOwogICAgIGlmIChtX25ld1N0cnVjdHVyZSkKICAgICAgICAgbV9uZXdTdHJ1Y3R1cmUtPm1h
cmtJZkNoZWFwKHZpc2l0b3IpOwogfQogCit0ZW1wbGF0ZSB2b2lkIFB1dEJ5SWRWYXJpYW50Ojpt
YXJrSWZDaGVhcChBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIFB1dEJ5SWRW
YXJpYW50OjptYXJrSWZDaGVhcChTbG90VmlzaXRvciYpOworCiBib29sIFB1dEJ5SWRWYXJpYW50
OjpmaW5hbGl6ZShWTSYgdm0pCiB7CiAgICAgaWYgKCFtX29sZFN0cnVjdHVyZS5pc1N0aWxsQWxp
dmUodm0pKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJp
YW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5
SWRWYXJpYW50LmgJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9QdXRCeUlkVmFyaWFudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNC0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTMyLDcgKzEzMiw3
IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgYXR0ZW1wdFRvTWVyZ2UoY29uc3QgUHV0QnlJZFZhcmlh
bnQmIG90aGVyKTsKICAgICAKLSAgICB2b2lkIG1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJik7Cisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCBtYXJrSWZDaGVhcChWaXNpdG9yJik7
CiAgICAgYm9vbCBmaW5hbGl6ZShWTSYpOwogICAgIAogICAgIHZvaWQgZHVtcChQcmludFN0cmVh
bSYpIGNvbnN0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1JlY29yZGVk
U3RhdHVzZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9SZWNvcmRlZFN0YXR1c2VzLmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1JlY29yZGVkU3RhdHVzZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMDIsNyArMTAyLDggQEAgU2V0UHJpdmF0ZUJyYW5kU3RhdHVzKiBSZWNvcmRlZFN0YXR1c2Vz
OgogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQgUmVjb3JkZWRTdGF0dXNlczo6dmlzaXRB
Z2dyZWdhdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
Pgordm9pZCBSZWNvcmRlZFN0YXR1c2VzOjp2aXNpdEFnZ3JlZ2F0ZUltcGwoVmlzaXRvciYgdmlz
aXRvcikKIHsKICAgICBmb3IgKGF1dG8mIHBhaXIgOiBnZXRzKQogICAgICAgICBwYWlyLnNlY29u
ZC0+dmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7CkBAIC0xMTQsNyArMTE1LDEwIEBAIHZvaWQgUmVj
b3JkZWRTdGF0dXNlczo6dmlzaXRBZ2dyZWdhdGUoU2wKICAgICAgICAgcGFpci5zZWNvbmQtPnZp
c2l0QWdncmVnYXRlKHZpc2l0b3IpOwogfQogCi12b2lkIFJlY29yZGVkU3RhdHVzZXM6Om1hcmtJ
ZkNoZWFwKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorREVGSU5FX1ZJU0lUX0FHR1JFR0FURShSZWNv
cmRlZFN0YXR1c2VzKTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgUmVjb3Jk
ZWRTdGF0dXNlczo6bWFya0lmQ2hlYXAoVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBmb3IgKGF1
dG8mIHBhaXIgOiBnZXRzKQogICAgICAgICBwYWlyLnNlY29uZC0+bWFya0lmQ2hlYXAodmlzaXRv
cik7CkBAIC0xMzAsNiArMTM0LDkgQEAgdm9pZCBSZWNvcmRlZFN0YXR1c2VzOjptYXJrSWZDaGVh
cChTbG90VgogICAgICAgICBwYWlyLnNlY29uZC0+bWFya0lmQ2hlYXAodmlzaXRvcik7CiB9CiAK
K3RlbXBsYXRlIHZvaWQgUmVjb3JkZWRTdGF0dXNlczo6bWFya0lmQ2hlYXAoQWJzdHJhY3RTbG90
VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBSZWNvcmRlZFN0YXR1c2VzOjptYXJrSWZDaGVhcChT
bG90VmlzaXRvciYpOworCiB2b2lkIFJlY29yZGVkU3RhdHVzZXM6OmZpbmFsaXplV2l0aG91dERl
bGV0aW5nKFZNJiB2bSkKIHsKICAgICAvLyBUaGlzIHZhcmlhbnQgb2YgZmluYWxpemUgZ2V0cyBj
YWxsZWQgZnJvbSB3aXRoaW4gZ3JhcGggc2FmZXBvaW50cyAtLSBzbyB0aGVyZSBtYXkgYmUgREZH
IElSIGluCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUmVjb3JkZWRTdGF0
dXNlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9SZWNv
cmRlZFN0YXR1c2VzLmgJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9SZWNvcmRlZFN0YXR1c2VzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01NCw4ICs1
NCw4IEBAIHN0cnVjdCBSZWNvcmRlZFN0YXR1c2VzIHsKICAgICBDaGVja1ByaXZhdGVCcmFuZFN0
YXR1cyogYWRkQ2hlY2tQcml2YXRlQnJhbmRTdGF0dXMoY29uc3QgQ29kZU9yaWdpbiYsIGNvbnN0
IENoZWNrUHJpdmF0ZUJyYW5kU3RhdHVzJik7CiAgICAgU2V0UHJpdmF0ZUJyYW5kU3RhdHVzKiBh
ZGRTZXRQcml2YXRlQnJhbmRTdGF0dXMoY29uc3QgQ29kZU9yaWdpbiYsIGNvbnN0IFNldFByaXZh
dGVCcmFuZFN0YXR1cyYpOwogICAgIAotICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0
b3ImKTsKLSAgICB2b2lkIG1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9W
SVNJVF9BR0dSRUdBVEU7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCBtYXJr
SWZDaGVhcChWaXNpdG9yJik7CiAgICAgCiAgICAgdm9pZCBmaW5hbGl6ZVdpdGhvdXREZWxldGlu
ZyhWTSYpOwogICAgIHZvaWQgZmluYWxpemUoVk0mKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9TZXRQcml2YXRlQnJhbmRTdGF0dXMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TZXRQcml2YXRlQnJhbmRTdGF0dXMuY3BwCShy
ZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU2V0UHJp
dmF0ZUJyYW5kU3RhdHVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjM1LDE4ICsyMzUsMjUgQEAg
Q2FjaGVhYmxlSWRlbnRpZmllciBTZXRQcml2YXRlQnJhbmRTdGF0dQogICAgIHJldHVybiByZXN1
bHQ7CiB9CiAKLXZvaWQgU2V0UHJpdmF0ZUJyYW5kU3RhdHVzOjp2aXNpdEFnZ3JlZ2F0ZShTbG90
VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFNldFBy
aXZhdGVCcmFuZFN0YXR1czo6dmlzaXRBZ2dyZWdhdGVJbXBsKFZpc2l0b3ImIHZpc2l0b3IpCiB7
CiAgICAgZm9yIChTZXRQcml2YXRlQnJhbmRWYXJpYW50JiB2YXJpYW50IDogbV92YXJpYW50cykK
ICAgICAgICAgdmFyaWFudC52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKIH0KIAotdm9pZCBTZXRQ
cml2YXRlQnJhbmRTdGF0dXM6Om1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorREVG
SU5FX1ZJU0lUX0FHR1JFR0FURShTZXRQcml2YXRlQnJhbmRTdGF0dXMpOworCit0ZW1wbGF0ZTx0
eXBlbmFtZSBWaXNpdG9yPgordm9pZCBTZXRQcml2YXRlQnJhbmRTdGF0dXM6Om1hcmtJZkNoZWFw
KFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgZm9yIChTZXRQcml2YXRlQnJhbmRWYXJpYW50JiB2
YXJpYW50IDogbV92YXJpYW50cykKICAgICAgICAgdmFyaWFudC5tYXJrSWZDaGVhcCh2aXNpdG9y
KTsKIH0KIAordGVtcGxhdGUgdm9pZCBTZXRQcml2YXRlQnJhbmRTdGF0dXM6Om1hcmtJZkNoZWFw
KEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgU2V0UHJpdmF0ZUJyYW5kU3Rh
dHVzOjptYXJrSWZDaGVhcChTbG90VmlzaXRvciYpOworCiBib29sIFNldFByaXZhdGVCcmFuZFN0
YXR1czo6ZmluYWxpemUoVk0mIHZtKQogewogICAgIGZvciAoYXV0byYgdmFyaWFudCA6IG1fdmFy
aWFudHMpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TZXRQcml2YXRl
QnJhbmRTdGF0dXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvU2V0UHJpdmF0ZUJyYW5kU3RhdHVzLmgJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TZXRQcml2YXRlQnJhbmRTdGF0dXMuaAkod29ya2luZyBj
b3B5KQpAQCAtODMsOCArODMsOCBAQCBwdWJsaWM6CiAgICAgLy8gQXR0ZW1wdHMgdG8gcmVkdWNl
IHRoZSBzZXQgb2YgdmFyaWFudHMgdG8gZml0IHRoZSBnaXZlbiBzdHJ1Y3R1cmUgc2V0LiBUaGlz
IG1heSBiZSBhcHByb3hpbWF0ZS4KICAgICB2b2lkIGZpbHRlcihjb25zdCBTdHJ1Y3R1cmVTZXQm
KTsKIAotICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImKTsKLSAgICB2b2lkIG1h
cmtJZkNoZWFwKFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9BR0dSRUdBVEU7Cisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCBtYXJrSWZDaGVhcChWaXNpdG9yJik7
CiAgICAgYm9vbCBmaW5hbGl6ZShWTSYpOwogCiAgICAgYm9vbCBhcHBlbmRWYXJpYW50KGNvbnN0
IFNldFByaXZhdGVCcmFuZFZhcmlhbnQmKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9TZXRQcml2YXRlQnJhbmRWYXJpYW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU2V0UHJpdmF0ZUJyYW5kVmFyaWFudC5jcHAJKHJldmlz
aW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TZXRQcml2YXRl
QnJhbmRWYXJpYW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDIwLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICog
Q29weXJpZ2h0IChDKSAyMDIxIElnYWxpYSBTLkEuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CkBAIC01NCw3ICs1NCw4IEBAIGJvb2wgU2V0UHJpdmF0ZUJyYW5kVmFyaWFu
dDo6YXR0ZW1wdFRvTWUKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBTZXRQcml2YXRlQnJh
bmRWYXJpYW50OjptYXJrSWZDaGVhcChTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5
cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFNldFByaXZhdGVCcmFuZFZhcmlhbnQ6Om1hcmtJZkNoZWFw
KFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgaWYgKG1fb2xkU3RydWN0dXJlKQogICAgICAgICBt
X29sZFN0cnVjdHVyZS0+bWFya0lmQ2hlYXAodmlzaXRvcik7CkBAIC02Miw2ICs2Myw5IEBAIHZv
aWQgU2V0UHJpdmF0ZUJyYW5kVmFyaWFudDo6bWFya0lmQ2hlYXAKICAgICAgICAgbV9uZXdTdHJ1
Y3R1cmUtPm1hcmtJZkNoZWFwKHZpc2l0b3IpOwogfQogCit0ZW1wbGF0ZSB2b2lkIFNldFByaXZh
dGVCcmFuZFZhcmlhbnQ6Om1hcmtJZkNoZWFwKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBs
YXRlIHZvaWQgU2V0UHJpdmF0ZUJyYW5kVmFyaWFudDo6bWFya0lmQ2hlYXAoU2xvdFZpc2l0b3Im
KTsKKwogYm9vbCBTZXRQcml2YXRlQnJhbmRWYXJpYW50OjpmaW5hbGl6ZShWTSYgdm0pCiB7CiAg
ICAgaWYgKCF2bS5oZWFwLmlzTWFya2VkKG1fb2xkU3RydWN0dXJlKSkKQEAgLTcxLDExICs3NSwx
NCBAQCBib29sIFNldFByaXZhdGVCcmFuZFZhcmlhbnQ6OmZpbmFsaXplKFZNCiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKLXZvaWQgU2V0UHJpdmF0ZUJyYW5kVmFyaWFudDo6dmlzaXRBZ2dyZWdhdGUo
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBT
ZXRQcml2YXRlQnJhbmRWYXJpYW50Ojp2aXNpdEFnZ3JlZ2F0ZUltcGwoVmlzaXRvciYgdmlzaXRv
cikKIHsKICAgICBtX2lkZW50aWZpZXIudmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7CiB9CiAKK0RF
RklORV9WSVNJVF9BR0dSRUdBVEUoU2V0UHJpdmF0ZUJyYW5kVmFyaWFudCk7CisKIHZvaWQgU2V0
UHJpdmF0ZUJyYW5kVmFyaWFudDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAogewogICAg
IGR1bXBJbkNvbnRleHQob3V0LCBudWxscHRyKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9TZXRQcml2YXRlQnJhbmRWYXJpYW50LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NldFByaXZhdGVCcmFuZFZhcmlhbnQuaAkocmV2aXNp
b24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NldFByaXZhdGVC
cmFuZFZhcmlhbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNDUsOCArNDUsOCBAQCBwdWJsaWM6CiAK
ICAgICBib29sIGF0dGVtcHRUb01lcmdlKGNvbnN0IFNldFByaXZhdGVCcmFuZFZhcmlhbnQmIG90
aGVyKTsKIAotICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImKTsKLSAgICB2b2lk
IG1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9BR0dSRUdBVEU7
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCBtYXJrSWZDaGVhcChWaXNpdG9y
Jik7CiAgICAgYm9vbCBmaW5hbGl6ZShWTSYpOwogCiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFt
JikgY29uc3Q7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJl
U2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3Ry
dWN0dXJlU2V0LmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1N0cnVjdHVyZVNldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMSwxMiArMzEs
MTYgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLXZvaWQgU3RydWN0dXJlU2V0OjptYXJrSWZDaGVh
cChTbG90VmlzaXRvciYgdmlzaXRvcikgY29uc3QKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+
Cit2b2lkIFN0cnVjdHVyZVNldDo6bWFya0lmQ2hlYXAoVmlzaXRvciYgdmlzaXRvcikgY29uc3QK
IHsKICAgICBmb3IgKFN0cnVjdHVyZSogc3RydWN0dXJlIDogKnRoaXMpCiAgICAgICAgIHN0cnVj
dHVyZS0+bWFya0lmQ2hlYXAodmlzaXRvcik7CiB9CiAKK3RlbXBsYXRlIHZvaWQgU3RydWN0dXJl
U2V0OjptYXJrSWZDaGVhcChBYnN0cmFjdFNsb3RWaXNpdG9yJikgY29uc3Q7Cit0ZW1wbGF0ZSB2
b2lkIFN0cnVjdHVyZVNldDo6bWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImKSBjb25zdDsKKwogYm9v
bCBTdHJ1Y3R1cmVTZXQ6OmlzU3RpbGxBbGl2ZShWTSYgdm0pIGNvbnN0CiB7CiAgICAgZm9yIChT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSA6ICp0aGlzKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvU3RydWN0dXJlU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVNldC5oCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU2V0LmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTggQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMjEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC01NCw3ICs1NCw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG9ubHlFbnRyeSgpOwog
ICAgIH0KIAotICAgIHZvaWQgbWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImKSBjb25zdDsKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIG1hcmtJZkNoZWFwKFZpc2l0b3ImKSBjb25z
dDsKICAgICBib29sIGlzU3RpbGxBbGl2ZShWTSYpIGNvbnN0OwogICAgIAogICAgIHZvaWQgZHVt
cEluQ29udGV4dChQcmludFN0cmVhbSYsIER1bXBDb250ZXh0KikgY29uc3Q7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5j
cHAJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9T
dHJ1Y3R1cmVTdHViSW5mby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOTYsNyArMjk2LDggQEAg
dm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6cmVzZXQoY29uc3QgQ29uYwogICAgIHNldENhY2hlVHlw
ZShsb2NrZXIsIENhY2hlVHlwZTo6VW5zZXQpOwogfQogCi12b2lkIFN0cnVjdHVyZVN0dWJJbmZv
Ojp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1l
IFZpc2l0b3I+Cit2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjp2aXNpdEFnZ3JlZ2F0ZUltcGwoVmlz
aXRvciYgdmlzaXRvcikKIHsKICAgICB7CiAgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2so
bV9idWZmZXJlZFN0cnVjdHVyZXNMb2NrKTsKQEAgLTMyMiw2ICszMjMsOCBAQCB2b2lkIFN0cnVj
dHVyZVN0dWJJbmZvOjp2aXNpdEFnZ3JlZ2F0ZShTCiAgICAgcmV0dXJuOwogfQogCitERUZJTkVf
VklTSVRfQUdHUkVHQVRFKFN0cnVjdHVyZVN0dWJJbmZvKTsKKwogdm9pZCBTdHJ1Y3R1cmVTdHVi
SW5mbzo6dmlzaXRXZWFrUmVmZXJlbmNlcyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXJCYXNlJiBs
b2NrZXIsIENvZGVCbG9jayogY29kZUJsb2NrKQogewogICAgIFZNJiB2bSA9IGNvZGVCbG9jay0+
dm0oKTsKQEAgLTM1Miw3ICszNTUsOCBAQCB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjp2aXNpdFdl
YWtSZWZlcmVuCiAgICAgcmVzZXRCeUdDID0gdHJ1ZTsKIH0KIAotYm9vbCBTdHJ1Y3R1cmVTdHVi
SW5mbzo6cHJvcGFnYXRlVHJhbnNpdGlvbnMoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0
ZTx0eXBlbmFtZSBWaXNpdG9yPgorYm9vbCBTdHJ1Y3R1cmVTdHViSW5mbzo6cHJvcGFnYXRlVHJh
bnNpdGlvbnMoVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBzd2l0Y2ggKG1fY2FjaGVUeXBlKSB7
CiAgICAgY2FzZSBDYWNoZVR5cGU6OlVuc2V0OgpAQCAtMzcxLDYgKzM3NSw5IEBAIGJvb2wgU3Ry
dWN0dXJlU3R1YkluZm86OnByb3BhZ2F0ZVRyYW5zaXQKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAor
dGVtcGxhdGUgYm9vbCBTdHJ1Y3R1cmVTdHViSW5mbzo6cHJvcGFnYXRlVHJhbnNpdGlvbnMoQWJz
dHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgYm9vbCBTdHJ1Y3R1cmVTdHViSW5mbzo6cHJv
cGFnYXRlVHJhbnNpdGlvbnMoU2xvdFZpc2l0b3ImKTsKKwogU3R1YkluZm9TdW1tYXJ5IFN0cnVj
dHVyZVN0dWJJbmZvOjpzdW1tYXJ5KFZNJiB2bSkgY29uc3QKIHsKICAgICBTdHViSW5mb1N1bW1h
cnkgdGFrZXNTbG93UGF0aCA9IFN0dWJJbmZvU3VtbWFyeTo6VGFrZXNTbG93UGF0aDsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5m
by5oCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
U3RydWN0dXJlU3R1YkluZm8uaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTkzLDE0ICs5MywxNCBAQCBw
dWJsaWM6CiAgICAgdm9pZCBkZXJlZigpOwogICAgIHZvaWQgYWJvdXRUb0RpZSgpOwogCi0gICAg
dm9pZCB2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQUdH
UkVHQVRFOwogCiAgICAgLy8gQ2hlY2sgaWYgdGhlIHN0dWIgaGFzIHdlYWsgcmVmZXJlbmNlcyB0
aGF0IGFyZSBkZWFkLiBJZiBpdCBkb2VzLCB0aGVuIGl0IHJlc2V0cyBpdHNlbGYsCiAgICAgLy8g
ZWl0aGVyIGVudGlyZWx5IG9yIGp1c3QgZW5vdWdoIHRvIGVuc3VyZSB0aGF0IHRob3NlIGRlYWQg
cG9pbnRlcnMgZG9uJ3QgZ2V0IHVzZWQgYW55bW9yZS4KICAgICB2b2lkIHZpc2l0V2Vha1JlZmVy
ZW5jZXMoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyQmFzZSYsIENvZGVCbG9jayopOwogICAgIAog
ICAgIC8vIFRoaXMgcmV0dXJucyB0cnVlIGlmIGl0IGhhcyBtYXJrZWQgZXZlcnl0aGluZyB0aGF0
IGl0IHdpbGwgZXZlciBtYXJrLgotICAgIGJvb2wgcHJvcGFnYXRlVHJhbnNpdGlvbnMoU2xvdFZp
c2l0b3ImKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiBib29sIHByb3BhZ2F0ZVRy
YW5zaXRpb25zKFZpc2l0b3ImKTsKICAgICAgICAgCiAgICAgU3R1YkluZm9TdW1tYXJ5IHN1bW1h
cnkoVk0mKSBjb25zdDsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9VbmxpbmtlZENvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAx
OSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIt
MjAyMSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTc1LDcgKzc1LDggQEAgVW5saW5rZWRDb2RlQmxvY2s6OlVubGlua2Vk
Q29kZUJsb2NrKFZNJgogICAgIH0KIH0KIAotdm9pZCBVbmxpbmtlZENvZGVCbG9jazo6dmlzaXRD
aGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlw
ZW5hbWUgVmlzaXRvcj4KK3ZvaWQgVW5saW5rZWRDb2RlQmxvY2s6OnZpc2l0Q2hpbGRyZW5JbXBs
KEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBVbmxpbmtlZENvZGVCbG9j
ayogdGhpc09iamVjdCA9IGpzQ2FzdDxVbmxpbmtlZENvZGVCbG9jayo+KGNlbGwpOwogICAgIEFT
U0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTk0LDYgKzk1
LDggQEAgdm9pZCBVbmxpbmtlZENvZGVCbG9jazo6dmlzaXRDaGlsZHJlbihKUwogICAgIHZpc2l0
b3IucmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKGV4dHJhTWVtb3J5KTsKIH0KIAorREVGSU5FX1ZJ
U0lUX0NISUxEUkVOKFVubGlua2VkQ29kZUJsb2NrKTsKKwogc2l6ZV90IFVubGlua2VkQ29kZUJs
b2NrOjplc3RpbWF0ZWRTaXplKEpTQ2VsbCogY2VsbCwgVk0mIHZtKQogewogICAgIFVubGlua2Vk
Q29kZUJsb2NrKiB0aGlzT2JqZWN0ID0ganNDYXN0PFVubGlua2VkQ29kZUJsb2NrKj4oY2VsbCk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2su
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRD
b2RlQmxvY2suaAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTkgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjEgQXBwbGUgSW5jLiBBbGwgUmlnaHRz
IFJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00MzEsNyArNDMx
LDcgQEAgcHJpdmF0ZToKICAgICBSZWZDb3VudGVkQXJyYXk8RXhwcmVzc2lvblJhbmdlSW5mbz4g
bV9leHByZXNzaW9uSW5mbzsKIAogcHJvdGVjdGVkOgotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hp
bGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVO
OwogICAgIHN0YXRpYyBzaXplX3QgZXN0aW1hdGVkU2l6ZShKU0NlbGwqLCBWTSYpOwogCiBwdWJs
aWM6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRGdW5jdGlv
bkV4ZWN1dGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9VbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5jcHAJKHJldmlzaW9uIDI3MjkwMikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJs
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDEyLTIwMTkgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEyLTIwMjEgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xNDYsNyArMTQ2LDggQEAgdm9pZCBVbmxpbmtlZEZ1
bmN0aW9uRXhlY3V0YWJsZTo6ZGVzdHJveQogICAgIHN0YXRpY19jYXN0PFVubGlua2VkRnVuY3Rp
b25FeGVjdXRhYmxlKj4oY2VsbCktPn5VbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSgpOwogfQog
Ci12b2lkIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCog
Y2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgor
dm9pZCBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxs
KiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFVubGlua2VkRnVuY3Rpb25FeGVjdXRh
YmxlKiB0aGlzT2JqZWN0ID0ganNDYXN0PFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKj4oY2Vs
bCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpA
QCAtMTY5LDYgKzE3MCw4IEBAIHZvaWQgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU6OnZpc2l0
Q2gKICAgICB9CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihVbmxpbmtlZEZ1bmN0aW9uRXhl
Y3V0YWJsZSk7CisKIFNvdXJjZUNvZGUgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU6Omxpbmtl
ZFNvdXJjZUNvZGUoY29uc3QgU291cmNlQ29kZSYgcGFzc2VkUGFyZW50U291cmNlKSBjb25zdAog
ewogICAgIGNvbnN0IFNvdXJjZUNvZGUmIHBhcmVudFNvdXJjZSA9ICFtX2lzQnVpbHRpbkRlZmF1
bHRDbGFzc0NvbnN0cnVjdG9yID8gcGFzc2VkUGFyZW50U291cmNlIDogQnVpbHRpbkV4ZWN1dGFi
bGVzOjpkZWZhdWx0Q29uc3RydWN0b3JTb3VyY2VDb2RlKGNvbnN0cnVjdG9yS2luZCgpKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9uRXhlY3V0
YWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Vbmxp
bmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5oCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxOSBB
cHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAy
MSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTI0Miw3ICsyNDIsNyBAQCBwcml2YXRlOgogICAgIFVubGlua2VkRnVuY3Rp
b25FeGVjdXRhYmxlKFZNJiwgU3RydWN0dXJlKiwgY29uc3QgU291cmNlQ29kZSYsIEZ1bmN0aW9u
TWV0YWRhdGFOb2RlKiwgVW5saW5rZWRGdW5jdGlvbktpbmQsIENvbnN0cnVjdEFiaWxpdHksIEpT
UGFyc2VyU2NyaXB0TW9kZSwgUmVmUHRyPFREWkVudmlyb25tZW50TGluaz4sIE9wdGlvbmFsPFBy
aXZhdGVOYW1lRW52aXJvbm1lbnQ+LCBKU0M6OkRlcml2ZWRDb250ZXh0VHlwZSwgSlNDOjpOZWVk
c0NsYXNzRmllbGRJbml0aWFsaXplciwgUHJpdmF0ZUJyYW5kUmVxdWlyZW1lbnQsIGJvb2wgaXNC
dWlsdGluRGVmYXVsdENsYXNzQ29uc3RydWN0b3IpOwogICAgIFVubGlua2VkRnVuY3Rpb25FeGVj
dXRhYmxlKERlY29kZXImLCBjb25zdCBDYWNoZWRGdW5jdGlvbkV4ZWN1dGFibGUmKTsKIAotICAg
IHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBE
RUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgdm9pZCBkZWNvZGVDYWNoZWRDb2RlQmxvY2tz
KFZNJik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlclNj
b3BlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVi
dWdnZXJTY29wZS5jcHAJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZWJ1Z2dlci9EZWJ1Z2dlclNjb3BlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU1LDcgKzU1
LDggQEAgdm9pZCBEZWJ1Z2dlclNjb3BlOjpmaW5pc2hDcmVhdGlvbihWTSYgdgogICAgIEJhc2U6
OmZpbmlzaENyZWF0aW9uKHZtKTsKIH0KIAotdm9pZCBEZWJ1Z2dlclNjb3BlOjp2aXNpdENoaWxk
cmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBWaXNpdG9yPgordm9pZCBEZWJ1Z2dlclNjb3BlOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwq
IGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgRGVidWdnZXJTY29wZSogdGhpc09iamVj
dCA9IGpzQ2FzdDxEZWJ1Z2dlclNjb3BlKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9J
TkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNjUsNiArNjYsOCBAQCB2b2lkIERlYnVn
Z2VyU2NvcGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsCiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09i
amVjdC0+bV9uZXh0KTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKERlYnVnZ2VyU2NvcGUp
OworCiBTdHJpbmcgRGVidWdnZXJTY29wZTo6Y2xhc3NOYW1lKGNvbnN0IEpTT2JqZWN0KiBvYmpl
Y3QsIFZNJiB2bSkKIHsKICAgICBjb25zdCBEZWJ1Z2dlclNjb3BlKiBzY29wZSA9IGpzQ2FzdDxj
b25zdCBEZWJ1Z2dlclNjb3BlKj4ob2JqZWN0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZWJ1Z2dlci9EZWJ1Z2dlclNjb3BlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyU2NvcGUuaAkocmV2aXNpb24gMjcyOTAyKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyU2NvcGUuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAyMCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAyMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTQ2LDcgKzQ2LDcgQEAgcHVibGljOgogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3Rh
dGljIERlYnVnZ2VyU2NvcGUqIGNyZWF0ZShWTSYgdm0sIEpTU2NvcGUqIHNjb3BlKTsKIAotICAg
IHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBE
RUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogICAgIHN0YXRpYyBTdHJpbmcgY2xhc3NOYW1lKGNvbnN0
IEpTT2JqZWN0KiwgVk0mKTsKICAgICBzdGF0aWMgU3RyaW5nIHRvU3RyaW5nTmFtZShjb25zdCBK
U09iamVjdCosIEpTR2xvYmFsT2JqZWN0Kik7CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVy
dHlTbG90KEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5
U2xvdCYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkVHJhbnNp
dGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVz
aXJlZFRyYW5zaXRpb25zLmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdEZXNpcmVkVHJhbnNpdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
NTIsNyArNTIsNyBAQCB2b2lkIERlc2lyZWRUcmFuc2l0aW9uOjpyZWFsbHlBZGQoVk0mIHZtCiAg
ICAgICAgICAgICBtX29sZFN0cnVjdHVyZSwgbV9uZXdTdHJ1Y3R1cmUpKTsKIH0KIAotdm9pZCBE
ZXNpcmVkVHJhbnNpdGlvbjo6dmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3Zv
aWQgRGVzaXJlZFRyYW5zaXRpb246OnZpc2l0Q2hpbGRyZW4oQWJzdHJhY3RTbG90VmlzaXRvciYg
dmlzaXRvcikKIHsKICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKG1fY29kZU9yaWdpbk93
bmVyKTsKICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKG1fb2xkU3RydWN0dXJlKTsKQEAg
LTc4LDcgKzc4LDcgQEAgdm9pZCBEZXNpcmVkVHJhbnNpdGlvbnM6OnJlYWxseUFkZChWTSYgdgog
ICAgICAgICBtX3RyYW5zaXRpb25zW2ldLnJlYWxseUFkZCh2bSwgY29tbW9uKTsKIH0KIAotdm9p
ZCBEZXNpcmVkVHJhbnNpdGlvbnM6OnZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3Ip
Cit2b2lkIERlc2lyZWRUcmFuc2l0aW9uczo6dmlzaXRDaGlsZHJlbihBYnN0cmFjdFNsb3RWaXNp
dG9yJiB2aXNpdG9yKQogewogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3RyYW5zaXRp
b25zLnNpemUoKTsgaSsrKQogICAgICAgICBtX3RyYW5zaXRpb25zW2ldLnZpc2l0Q2hpbGRyZW4o
dmlzaXRvcik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRUcmFu
c2l0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVz
aXJlZFRyYW5zaXRpb25zLmgJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHRGVzaXJlZFRyYW5zaXRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDYs
OCArNDYsNyBAQCBwdWJsaWM6CiAgICAgRGVzaXJlZFRyYW5zaXRpb24oQ29kZUJsb2NrKiwgQ29k
ZUJsb2NrKiBjb2RlT3JpZ2luT3duZXIsIFN0cnVjdHVyZSosIFN0cnVjdHVyZSopOwogCiAgICAg
dm9pZCByZWFsbHlBZGQoVk0mLCBDb21tb25EYXRhKik7Ci0gICAgCi0gICAgdm9pZCB2aXNpdENo
aWxkcmVuKFNsb3RWaXNpdG9yJik7CisgICAgdm9pZCB2aXNpdENoaWxkcmVuKEFic3RyYWN0U2xv
dFZpc2l0b3ImKTsKIAogcHJpdmF0ZToKICAgICBDb2RlQmxvY2sqIG1fY29kZUJsb2NrOwpAQCAt
NjMsNyArNjIsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGFkZExhemlseShDb2RlQmxvY2sqLCBD
b2RlQmxvY2sqIGNvZGVPcmlnaW5Pd25lciwgU3RydWN0dXJlKiwgU3RydWN0dXJlKik7CiAgICAg
dm9pZCByZWFsbHlBZGQoVk0mLCBDb21tb25EYXRhKik7Ci0gICAgdm9pZCB2aXNpdENoaWxkcmVu
KFNsb3RWaXNpdG9yJik7CisgICAgdm9pZCB2aXNpdENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0
b3ImKTsKIAogcHJpdmF0ZToKICAgICBWZWN0b3I8RGVzaXJlZFRyYW5zaXRpb24+IG1fdHJhbnNp
dGlvbnM7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXZWFrUmVm
ZXJlbmNlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdE
ZXNpcmVkV2Vha1JlZmVyZW5jZXMuY3BwCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXZWFrUmVmZXJlbmNlcy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC04Nyw3ICs4Nyw3IEBAIHZvaWQgRGVzaXJlZFdlYWtSZWZlcmVuY2VzOjpyZWFsbHlB
ZGQoVk0KICAgICB9CiB9CiAKLXZvaWQgRGVzaXJlZFdlYWtSZWZlcmVuY2VzOjp2aXNpdENoaWxk
cmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBEZXNpcmVkV2Vha1JlZmVyZW5jZXM6OnZp
c2l0Q2hpbGRyZW4oQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBmb3IgKEpT
Q2VsbCogdGFyZ2V0IDogbV9yZWZlcmVuY2VzKQogICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFy
cmllcmVkKHRhcmdldCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2ly
ZWRXZWFrUmVmZXJlbmNlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHRGVzaXJlZFdlYWtSZWZlcmVuY2VzLmgJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFdlYWtSZWZlcmVuY2VzLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0zMSwxMCArMzEsMTAgQEAKIAogbmFtZXNwYWNlIEpTQyB7IAogCitjbGFzcyBB
YnN0cmFjdFNsb3RWaXNpdG9yOwogY2xhc3MgQ29kZUJsb2NrOwogY2xhc3MgSlNDZWxsOwogY2xh
c3MgSlNWYWx1ZTsKLWNsYXNzIFNsb3RWaXNpdG9yOwogY2xhc3MgVk07CiAKIG5hbWVzcGFjZSBE
RkcgewpAQCAtNTIsOCArNTIsOCBAQCBwdWJsaWM6CiAgICAgYm9vbCBjb250YWlucyhKU0NlbGwq
KTsKICAgICAKICAgICB2b2lkIHJlYWxseUFkZChWTSYsIENvbW1vbkRhdGEqKTsKLSAgICAKLSAg
ICB2b2lkIHZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKKworICAgIHZvaWQgdmlzaXRDaGls
ZHJlbihBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAKIHByaXZhdGU6CiAgICAgQ29kZUJsb2NrKiBt
X2NvZGVCbG9jazsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCShy
ZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTQ0OCw3ICsxNDQ4LDcgQEAgdm9pZCBHcmFwaDo6cmVnaXN0
ZXJGcm96ZW5WYWx1ZXMoKQogICAgIG1fY29kZUJsb2NrLT5jb25zdGFudHNTb3VyY2VDb2RlUmVw
cmVzZW50YXRpb24oKS5zaHJpbmtUb0ZpdCgpOwogfQogCi12b2lkIEdyYXBoOjp2aXNpdENoaWxk
cmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBHcmFwaDo6dmlzaXRDaGlsZHJlbihBYnN0
cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGZvciAoRnJvemVuVmFsdWUqIHZhbHVl
IDogbV9mcm96ZW5WYWx1ZXMpIHsKICAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZCh2
YWx1ZS0+dmFsdWUoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBo
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCShy
ZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEx
LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDExLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC0xMDAwLDkgKzEwMDAsOSBAQCBwdWJsaWM6CiAgICAgYm9vbCBj
YW5Eb0Zhc3RTcHJlYWQoTm9kZSosIGNvbnN0IEFic3RyYWN0VmFsdWUmKTsKICAgICAKICAgICB2
b2lkIHJlZ2lzdGVyRnJvemVuVmFsdWVzKCk7Ci0gICAgCi0gICAgdm9pZCB2aXNpdENoaWxkcmVu
KFNsb3RWaXNpdG9yJikgZmluYWw7Ci0gICAgCisKKyAgICB2b2lkIHZpc2l0Q2hpbGRyZW4oQWJz
dHJhY3RTbG90VmlzaXRvciYpIGZpbmFsOworCiAgICAgdm9pZCBsb2dBc3NlcnRpb25GYWlsdXJl
KAogICAgICAgICBzdGQ6Om51bGxwdHJfdCwgY29uc3QgY2hhciogZmlsZSwgaW50IGxpbmUsIGNv
bnN0IGNoYXIqIGZ1bmN0aW9uLAogICAgICAgICBjb25zdCBjaGFyKiBhc3NlcnRpb24pOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCShyZXZpc2lvbiAyNzI5MDIpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIwIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIxIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtNjcyLDkgKzY3MiwxMCBAQCBDb21waWxhdGlvbktleSBQbGFuOjprZXkoKQogICAgIHJldHVy
biBDb21waWxhdGlvbktleShtX2NvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSwgbV9tb2RlKTsKIH0K
IAotdm9pZCBQbGFuOjpjaGVja0xpdmVuZXNzQW5kVmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYg
dmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFBsYW46OmNoZWNrTGl2
ZW5lc3NBbmRWaXNpdENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7Ci0gICAgaWYgKCFpc0tu
b3duVG9CZUxpdmVEdXJpbmdHQygpKQorICAgIGlmICghaXNLbm93blRvQmVMaXZlRHVyaW5nR0Mo
dmlzaXRvcikpCiAgICAgICAgIHJldHVybjsKIAogICAgIGNsZWFuTXVzdEhhbmRsZVZhbHVlc0lm
TmVjZXNzYXJ5KCk7CkBAIC03MDIsMTMgKzcwMywzMyBAQCB2b2lkIFBsYW46OmNoZWNrTGl2ZW5l
c3NBbmRWaXNpdENoaWxkcmVuCiAgICAgbV90cmFuc2l0aW9ucy52aXNpdENoaWxkcmVuKHZpc2l0
b3IpOwogfQogCit0ZW1wbGF0ZSB2b2lkIFBsYW46OmNoZWNrTGl2ZW5lc3NBbmRWaXNpdENoaWxk
cmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgUGxhbjo6Y2hlY2tMaXZl
bmVzc0FuZFZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKKwogdm9pZCBQbGFuOjpmaW5hbGl6
ZUluR0MoKQogewogICAgIEFTU0VSVChtX3ZtKTsKICAgICBtX3JlY29yZGVkU3RhdHVzZXMuZmlu
YWxpemVXaXRob3V0RGVsZXRpbmcoKm1fdm0pOwogfQogCi1ib29sIFBsYW46OmlzS25vd25Ub0Jl
TGl2ZUR1cmluZ0dDKCkKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Citib29sIFBsYW46Omlz
S25vd25Ub0JlTGl2ZUR1cmluZ0dDKFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgaWYgKG1fc3Rh
Z2UgPT0gQ2FuY2VsbGVkKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCF2aXNpdG9y
LmlzTWFya2VkKG1fY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICBpZiAoIXZpc2l0b3IuaXNNYXJrZWQobV9jb2RlQmxvY2stPmFsdGVybmF0
aXZlKCkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCEhbV9wcm9maWxlZERGR0Nv
ZGVCbG9jayAmJiAhdmlzaXRvci5pc01hcmtlZChtX3Byb2ZpbGVkREZHQ29kZUJsb2NrKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiB0cnVlOworfQorCit0ZW1wbGF0ZSBib29s
IFBsYW46OmlzS25vd25Ub0JlTGl2ZUR1cmluZ0dDKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3Rl
bXBsYXRlIGJvb2wgUGxhbjo6aXNLbm93blRvQmVMaXZlRHVyaW5nR0MoU2xvdFZpc2l0b3ImKTsK
KworYm9vbCBQbGFuOjppc0tub3duVG9CZUxpdmVBZnRlckdDKCkKIHsKICAgICBpZiAobV9zdGFn
ZSA9PSBDYW5jZWxsZWQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHUGxhbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHUGxhbi5oCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1BsYW4uaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQzLDggKzQzLDggQEAKIAog
bmFtZXNwYWNlIEpTQyB7CiAKK2NsYXNzIEFic3RyYWN0U2xvdFZpc2l0b3I7CiBjbGFzcyBDb2Rl
QmxvY2s7Ci1jbGFzcyBTbG90VmlzaXRvcjsKIAogbmFtZXNwYWNlIERGRyB7CiAKQEAgLTcwLDEw
ICs3MCwxMSBAQCBwdWJsaWM6CiAgICAgCiAgICAgQ29tcGlsYXRpb25LZXkga2V5KCk7CiAgICAg
Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KLSAgICB2b2lkIGl0ZXJhdGVDb2RlQmxvY2tz
Rm9yR0MoY29uc3QgRnVuYyYpOwotICAgIHZvaWQgY2hlY2tMaXZlbmVzc0FuZFZpc2l0Q2hpbGRy
ZW4oU2xvdFZpc2l0b3ImKTsKLSAgICBib29sIGlzS25vd25Ub0JlTGl2ZUR1cmluZ0dDKCk7Cisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYywgdHlwZW5hbWUgVmlzaXRvcj4KKyAgICB2b2lkIGl0
ZXJhdGVDb2RlQmxvY2tzRm9yR0MoVmlzaXRvciYsIGNvbnN0IEZ1bmMmKTsKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIGNoZWNrTGl2ZW5lc3NBbmRWaXNpdENoaWxkcmVuKFZp
c2l0b3ImKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiBib29sIGlzS25vd25Ub0Jl
TGl2ZUR1cmluZ0dDKFZpc2l0b3ImKTsKKyAgICBib29sIGlzS25vd25Ub0JlTGl2ZUFmdGVyR0Mo
KTsKICAgICB2b2lkIGZpbmFsaXplSW5HQygpOwogICAgIHZvaWQgY2FuY2VsKCk7CiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbklubGluZXMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW5JbmxpbmVzLmgJKHJldmlzaW9uIDI3
MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbklubGluZXMuaAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAx
OCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTct
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTMxLDEwICszMSwxMCBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IERGRyB7CiAKICNpZiBFTkFCTEUoREZHX0pJVCkKIAotdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4K
LXZvaWQgUGxhbjo6aXRlcmF0ZUNvZGVCbG9ja3NGb3JHQyhjb25zdCBGdW5jJiBmdW5jKQordGVt
cGxhdGU8dHlwZW5hbWUgRnVuYywgdHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgUGxhbjo6aXRlcmF0
ZUNvZGVCbG9ja3NGb3JHQyhWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBGdW5jJiBmdW5jKQogewot
ICAgIGlmICghaXNLbm93blRvQmVMaXZlRHVyaW5nR0MoKSkKKyAgICBpZiAoIWlzS25vd25Ub0Jl
TGl2ZUR1cmluZ0dDKHZpc2l0b3IpKQogICAgICAgICByZXR1cm47CiAgICAgCiAgICAgLy8gQ29t
cGlsYXRpb24gd3JpdGVzIGxvdHMgb2YgdmFsdWVzIHRvIGEgQ29kZUJsb2NrIHdpdGhvdXQgcGVy
Zm9ybWluZwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlcG9pbnQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZXBvaW50LmNw
cAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZl
cG9pbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxNC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODMsMjggKzgzLDQ2IEBAIHZvaWQgU2FmZXBv
aW50OjpiZWdpbigpCiAgICAgfQogfQogCi12b2lkIFNhZmVwb2ludDo6Y2hlY2tMaXZlbmVzc0Fu
ZFZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPgordm9pZCBTYWZlcG9pbnQ6OmNoZWNrTGl2ZW5lc3NBbmRWaXNpdENoaWxkcmVuKFZp
c2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQobV9kaWRDYWxsQmVnaW4pOwog
CiAgICAgaWYgKG1fcmVzdWx0Lm1fZGlkR2V0Q2FuY2VsbGVkKQogICAgICAgICByZXR1cm47IC8v
IFdlIHdlcmUgY2FuY2VsbGVkIGR1cmluZyBhIHByZXZpb3VzIEdDIQogICAgIAotICAgIGlmICgh
aXNLbm93blRvQmVMaXZlRHVyaW5nR0MoKSkKKyAgICBpZiAoIWlzS25vd25Ub0JlTGl2ZUR1cmlu
Z0dDKHZpc2l0b3IpKQogICAgICAgICByZXR1cm47CiAgICAgCiAgICAgZm9yICh1bnNpZ25lZCBp
ID0gbV9zY2FubmFibGVzLnNpemUoKTsgaS0tOykKICAgICAgICAgbV9zY2FubmFibGVzW2ldLT52
aXNpdENoaWxkcmVuKHZpc2l0b3IpOwogfQogCi1ib29sIFNhZmVwb2ludDo6aXNLbm93blRvQmVM
aXZlRHVyaW5nR0MoKQordGVtcGxhdGUgdm9pZCBTYWZlcG9pbnQ6OmNoZWNrTGl2ZW5lc3NBbmRW
aXNpdENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgU2FmZXBv
aW50OjpjaGVja0xpdmVuZXNzQW5kVmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYpOworCit0ZW1w
bGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgorYm9vbCBTYWZlcG9pbnQ6OmlzS25vd25Ub0JlTGl2ZUR1
cmluZ0dDKFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgUkVMRUFTRV9BU1NFUlQobV9kaWRDYWxs
QmVnaW4pOworICAgIAorICAgIGlmIChtX3Jlc3VsdC5tX2RpZEdldENhbmNlbGxlZCkKKyAgICAg
ICAgcmV0dXJuIHRydWU7IC8vIFdlIHdlcmUgY2FuY2VsbGVkIGR1cmluZyBhIHByZXZpb3VzIEdD
LCBzbyBsZXQncyBub3QgbWVzcyB3aXRoIGl0IHRoaXMgdGltZSBhcm91bmQgLSBwcmV0ZW5kIGl0
J3MgbGl2ZSBhbmQgbW92ZSBvbi4KKyAgICAKKyAgICByZXR1cm4gbV9wbGFuLmlzS25vd25Ub0Jl
TGl2ZUR1cmluZ0dDKHZpc2l0b3IpOworfQorCit0ZW1wbGF0ZSBib29sIFNhZmVwb2ludDo6aXNL
bm93blRvQmVMaXZlRHVyaW5nR0MoQWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgYm9v
bCBTYWZlcG9pbnQ6OmlzS25vd25Ub0JlTGl2ZUR1cmluZ0dDKFNsb3RWaXNpdG9yJik7CisKK2Jv
b2wgU2FmZXBvaW50Ojppc0tub3duVG9CZUxpdmVBZnRlckdDKCkKIHsKICAgICBSRUxFQVNFX0FT
U0VSVChtX2RpZENhbGxCZWdpbik7CiAgICAgCiAgICAgaWYgKG1fcmVzdWx0Lm1fZGlkR2V0Q2Fu
Y2VsbGVkKQogICAgICAgICByZXR1cm4gdHJ1ZTsgLy8gV2Ugd2VyZSBjYW5jZWxsZWQgZHVyaW5n
IGEgcHJldmlvdXMgR0MsIHNvIGxldCdzIG5vdCBtZXNzIHdpdGggaXQgdGhpcyB0aW1lIGFyb3Vu
ZCAtIHByZXRlbmQgaXQncyBsaXZlIGFuZCBtb3ZlIG9uLgogICAgIAotICAgIHJldHVybiBtX3Bs
YW4uaXNLbm93blRvQmVMaXZlRHVyaW5nR0MoKTsKKyAgICByZXR1cm4gbV9wbGFuLmlzS25vd25U
b0JlTGl2ZUFmdGVyR0MoKTsKIH0KIAogdm9pZCBTYWZlcG9pbnQ6OmNhbmNlbCgpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVwb2ludC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZXBvaW50LmgJKHJldmlzaW9uIDI3MjkwMikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZXBvaW50LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0LCAyMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMzEsNyArMzEsNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotY2xhc3MgU2xvdFZp
c2l0b3I7CitjbGFzcyBBYnN0cmFjdFNsb3RWaXNpdG9yOwogY2xhc3MgVk07CiAKIG5hbWVzcGFj
ZSBERkcgewpAQCAtNjYsOSArNjYsMTAgQEAgcHVibGljOgogICAgIHZvaWQgYWRkKFNjYW5uYWJs
ZSopOwogICAgIAogICAgIHZvaWQgYmVnaW4oKTsKLSAgICAKLSAgICB2b2lkIGNoZWNrTGl2ZW5l
c3NBbmRWaXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJik7Ci0gICAgYm9vbCBpc0tub3duVG9CZUxp
dmVEdXJpbmdHQygpOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCBjaGVj
a0xpdmVuZXNzQW5kVmlzaXRDaGlsZHJlbihWaXNpdG9yJik7CisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgVmlzaXRvcj4gYm9vbCBpc0tub3duVG9CZUxpdmVEdXJpbmdHQyhWaXNpdG9yJik7CisgICAg
Ym9vbCBpc0tub3duVG9CZUxpdmVBZnRlckdDKCk7CiAgICAgdm9pZCBjYW5jZWwoKTsKICAgICAK
ICAgICBWTSogdm0oKSBjb25zdDsgLy8gTWF5IHJldHVybiBudWxsIGlmIHdlJ3ZlIGJlZW4gY2Fu
Y2VsbGVkLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTY2FubmFibGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NjYW5uYWJsZS5oCShy
ZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NjYW5uYWJs
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTQtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTI5LDcgKzI5LDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLWNs
YXNzIFNsb3RWaXNpdG9yOworY2xhc3MgQWJzdHJhY3RTbG90VmlzaXRvcjsKIAogbmFtZXNwYWNl
IERGRyB7CiAKQEAgLTM4LDcgKzM4LDcgQEAgcHVibGljOgogICAgIFNjYW5uYWJsZSgpIHsgfQog
ICAgIHZpcnR1YWwgflNjYW5uYWJsZSgpIHsgfQogICAgIAotICAgIHZpcnR1YWwgdm9pZCB2aXNp
dENoaWxkcmVuKFNsb3RWaXNpdG9yJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdENoaWxk
cmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImKSA9IDA7CiB9OwogCiB9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0LmNwcAko
cmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlz
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNzIsNyArMzcyLDggQEAgdm9pZCBXb3JrbGlzdDo6
cmVzdW1lQWxsVGhyZWFkcygpCiAgICAgbV9zdXNwZW5zaW9uTG9jay51bmxvY2soKTsKIH0KIAot
dm9pZCBXb3JrbGlzdDo6dmlzaXRXZWFrUmVmZXJlbmNlcyhTbG90VmlzaXRvciYgdmlzaXRvcikK
K3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFdvcmtsaXN0Ojp2aXNpdFdlYWtSZWZl
cmVuY2VzKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgVk0qIHZtID0gJnZpc2l0b3IuaGVhcCgp
LT52bSgpOwogICAgIHsKQEAgLTM5Niw2ICszOTcsOSBAQCB2b2lkIFdvcmtsaXN0Ojp2aXNpdFdl
YWtSZWZlcmVuY2VzKFNsb3RWCiAgICAgfQogfQogCit0ZW1wbGF0ZSB2b2lkIFdvcmtsaXN0Ojp2
aXNpdFdlYWtSZWZlcmVuY2VzKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQg
V29ya2xpc3Q6OnZpc2l0V2Vha1JlZmVyZW5jZXMoU2xvdFZpc2l0b3ImKTsKKwogdm9pZCBXb3Jr
bGlzdDo6cmVtb3ZlRGVhZFBsYW5zKFZNJiB2bSkKIHsKICAgICB7CkBAIC00MDUsNyArNDA5LDcg
QEAgdm9pZCBXb3JrbGlzdDo6cmVtb3ZlRGVhZFBsYW5zKFZNJiB2bSkKICAgICAgICAgICAgIFBs
YW4qIHBsYW4gPSBpdGVyLT52YWx1ZS5nZXQoKTsKICAgICAgICAgICAgIGlmIChwbGFuLT52bSgp
ICE9ICZ2bSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGlmIChwbGFu
LT5pc0tub3duVG9CZUxpdmVEdXJpbmdHQygpKSB7CisgICAgICAgICAgICBpZiAocGxhbi0+aXNL
bm93blRvQmVMaXZlQWZ0ZXJHQygpKSB7CiAgICAgICAgICAgICAgICAgcGxhbi0+ZmluYWxpemVJ
bkdDKCk7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CkBAIC00NDAs
NyArNDQ0LDcgQEAgdm9pZCBXb3JrbGlzdDo6cmVtb3ZlRGVhZFBsYW5zKFZNJiB2bSkKICAgICAg
ICAgICAgIGNvbnRpbnVlOwogICAgICAgICBpZiAoc2FmZXBvaW50LT52bSgpICE9ICZ2bSkKICAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAoc2FmZXBvaW50LT5pc0tub3duVG9CZUxp
dmVEdXJpbmdHQygpKQorICAgICAgICBpZiAoc2FmZXBvaW50LT5pc0tub3duVG9CZUxpdmVBZnRl
ckdDKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgc2FmZXBvaW50LT5jYW5jZWwo
KTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5oCShy
ZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0zNSw3ICszNSw3IEBACiAKIG5hbWVzcGFjZSBKU0Mgewog
Ci1jbGFzcyBTbG90VmlzaXRvcjsKK2NsYXNzIEFic3RyYWN0U2xvdFZpc2l0b3I7CiAKIG5hbWVz
cGFjZSBERkcgewogCkBAIC01Nyw3ICs1Nyw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGNvbXBsZXRl
QWxsUGxhbnNGb3JWTShWTSYpOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KLSAgICB2
b2lkIGl0ZXJhdGVDb2RlQmxvY2tzRm9yR0MoVk0mLCBjb25zdCBGdW5jJik7CisgICAgdm9pZCBp
dGVyYXRlQ29kZUJsb2Nrc0ZvckdDKEFic3RyYWN0U2xvdFZpc2l0b3ImLCBWTSYsIGNvbnN0IEZ1
bmMmKTsKIAogICAgIHZvaWQgd2FpdFVudGlsQWxsUGxhbnNGb3JWTUFyZVJlYWR5KFZNJik7CiAg
ICAgU3RhdGUgY29tcGxldGVBbGxSZWFkeVBsYW5zRm9yVk0oVk0mLCBDb21waWxhdGlvbktleSA9
IENvbXBpbGF0aW9uS2V5KCkpOwpAQCAtNzMsNyArNzMsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBp
c0FjdGl2ZUZvclZNKFZNJikgY29uc3Q7CiAgICAgCiAgICAgLy8gT25seSBjYWxsZWQgb24gdGhl
IG1haW4gdGhyZWFkIGFmdGVyIHN1c3BlbmRpbmcgYWxsIHRocmVhZHMuCi0gICAgdm9pZCB2aXNp
dFdlYWtSZWZlcmVuY2VzKFNsb3RWaXNpdG9yJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlz
aXRvcj4gdm9pZCB2aXNpdFdlYWtSZWZlcmVuY2VzKFZpc2l0b3ImKTsKICAgICB2b2lkIHJlbW92
ZURlYWRQbGFucyhWTSYpOwogICAgIAogICAgIHZvaWQgcmVtb3ZlTm9uQ29tcGlsaW5nUGxhbnNG
b3JWTShWTSYpOwpAQCAtMTQ0LDcgKzE0NCw3IEBAIFdvcmtsaXN0JiBleGlzdGluZ1dvcmtsaXN0
Rm9ySW5kZXgodW5zaWcKIHZvaWQgY29tcGxldGVBbGxQbGFuc0ZvclZNKFZNJik7CiAKIHRlbXBs
YXRlPHR5cGVuYW1lIEZ1bmM+Ci12b2lkIGl0ZXJhdGVDb2RlQmxvY2tzRm9yR0MoVk0mLCBjb25z
dCBGdW5jJik7Cit2b2lkIGl0ZXJhdGVDb2RlQmxvY2tzRm9yR0MoQWJzdHJhY3RTbG90VmlzaXRv
ciYsIFZNJiwgY29uc3QgRnVuYyYpOwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3RJbmxpbmVzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlzdElubGluZXMuaAko
cmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlz
dElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTctMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMzLDMwICszMywzMCBAQCBuYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIERGRyB7CiAjaWYgRU5BQkxFKERGR19KSVQpCiAKIHRlbXBsYXRlPHR5
cGVuYW1lIEZ1bmM+Ci12b2lkIGl0ZXJhdGVDb2RlQmxvY2tzRm9yR0MoVk0mIHZtLCBjb25zdCBG
dW5jJiBmdW5jKQordm9pZCBpdGVyYXRlQ29kZUJsb2Nrc0ZvckdDKEFic3RyYWN0U2xvdFZpc2l0
b3ImIHZpc2l0b3IsIFZNJiB2bSwgY29uc3QgRnVuYyYgZnVuYykKIHsKICAgICBmb3IgKHVuc2ln
bmVkIGkgPSBERkc6Om51bWJlck9mV29ya2xpc3RzKCk7IGktLTspIHsKICAgICAgICAgaWYgKERG
Rzo6V29ya2xpc3QqIHdvcmtsaXN0ID0gREZHOjpleGlzdGluZ1dvcmtsaXN0Rm9ySW5kZXhPck51
bGwoaSkpCi0gICAgICAgICAgICB3b3JrbGlzdC0+aXRlcmF0ZUNvZGVCbG9ja3NGb3JHQyh2bSwg
ZnVuYyk7CisgICAgICAgICAgICB3b3JrbGlzdC0+aXRlcmF0ZUNvZGVCbG9ja3NGb3JHQyh2aXNp
dG9yLCB2bSwgZnVuYyk7CiAgICAgfQogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgotdm9p
ZCBXb3JrbGlzdDo6aXRlcmF0ZUNvZGVCbG9ja3NGb3JHQyhWTSYgdm0sIGNvbnN0IEZ1bmMmIGZ1
bmMpCit2b2lkIFdvcmtsaXN0OjppdGVyYXRlQ29kZUJsb2Nrc0ZvckdDKEFic3RyYWN0U2xvdFZp
c2l0b3ImIHZpc2l0b3IsIFZNJiB2bSwgY29uc3QgRnVuYyYgZnVuYykKIHsKICAgICBMb2NrSG9s
ZGVyIGxvY2tlcigqbV9sb2NrKTsKICAgICBmb3IgKFBsYW5NYXA6Oml0ZXJhdG9yIGl0ZXIgPSBt
X3BsYW5zLmJlZ2luKCk7IGl0ZXIgIT0gbV9wbGFucy5lbmQoKTsgKytpdGVyKSB7CiAgICAgICAg
IFBsYW4qIHBsYW4gPSBpdGVyLT52YWx1ZS5nZXQoKTsKICAgICAgICAgaWYgKHBsYW4tPnZtKCkg
IT0gJnZtKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIHBsYW4tPml0ZXJhdGVDb2Rl
QmxvY2tzRm9yR0MoZnVuYyk7CisgICAgICAgIHBsYW4tPml0ZXJhdGVDb2RlQmxvY2tzRm9yR0Mo
dmlzaXRvciwgZnVuYyk7CiAgICAgfQogfQogCiAjZWxzZSAvLyBFTkFCTEUoREZHX0pJVCkKIAog
dGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KLXZvaWQgaXRlcmF0ZUNvZGVCbG9ja3NGb3JHQyhWTSYs
IGNvbnN0IEZ1bmMmKQordm9pZCBpdGVyYXRlQ29kZUJsb2Nrc0ZvckdDKEFic3RyYWN0U2xvdFZp
c2l0b3ImLCBWTSYsIGNvbnN0IEZ1bmMmKQogewogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9BYnN0cmFjdFNsb3RWaXNpdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvQWJzdHJhY3RTbG90VmlzaXRvci5oCShub25leGlzdGVudCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Fic3RyYWN0U2xvdFZpc2l0b3IuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDIwOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiSlNDSlNWYWx1ZS5oIgor
I2luY2x1ZGUgIk1hcmtTdGFjay5oIgorI2luY2x1ZGUgIlJvb3RNYXJrUmVhc29uLmgiCisjaW5j
bHVkZSAiVmlzaXRSYWNlS2V5LmgiCisjaW5jbHVkZSA8d3RmL0NvbmN1cnJlbnRQdHJIYXNoU2V0
Lmg+CisjaW5jbHVkZSA8d3RmL1NoYXJlZFRhc2suaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3Ry
aW5nLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBDb25zZXJ2YXRpdmVSb290czsKK2Ns
YXNzIEhlYXA7CitjbGFzcyBIZWFwQ2VsbDsKK2NsYXNzIEpTQ2VsbDsKK2NsYXNzIE1hcmtlZEJs
b2NrOworY2xhc3MgTWFya2luZ0NvbnN0cmFpbnQ7CitjbGFzcyBNYXJraW5nQ29uc3RyYWludFNv
bHZlcjsKK2NsYXNzIFByZWNpc2VBbGxvY2F0aW9uOworY2xhc3MgU2xvdFZpc2l0b3I7CitjbGFz
cyBWTTsKK2NsYXNzIFZlcmlmaWVyU2xvdFZpc2l0b3I7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBj
bGFzcyBXZWFrOwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVHJhaXRzPiBjbGFzcyBX
cml0ZUJhcnJpZXJCYXNlOworCitjbGFzcyBBYnN0cmFjdFNsb3RWaXNpdG9yIHsKKyAgICBXVEZf
TUFLRV9OT05DT1BZQUJMRShBYnN0cmFjdFNsb3RWaXNpdG9yKTsKKyAgICBXVEZfTUFLRV9GQVNU
X0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBjbGFzcyBDb250ZXh0IHsKKyAgICBwdWJsaWM6Cisg
ICAgICAgIENvbnRleHQoQWJzdHJhY3RTbG90VmlzaXRvciYsIEhlYXBDZWxsKik7CisgICAgICAg
IH5Db250ZXh0KCk7CisgICAgICAgIEhlYXBDZWxsKiBjZWxsKCkgY29uc3QgeyByZXR1cm4gbV9j
ZWxsOyB9CisgICAgcHJpdmF0ZToKKyAgICAgICAgQWJzdHJhY3RTbG90VmlzaXRvciYgbV92aXNp
dG9yOworICAgICAgICBIZWFwQ2VsbCogbV9jZWxsOworICAgICAgICBDb250ZXh0KiBtX3ByZXZp
b3VzOworICAgIH07CisKKyAgICBjbGFzcyBTdXBwcmVzc0dDVmVyaWZpZXJTY29wZSB7CisgICAg
cHVibGljOgorICAgICAgICBTdXBwcmVzc0dDVmVyaWZpZXJTY29wZShBYnN0cmFjdFNsb3RWaXNp
dG9yJiB2aXNpdG9yKQorICAgICAgICAgICAgOiBtX3Zpc2l0b3IodmlzaXRvcikKKyAgICAgICAg
eworICAgICAgICAgICAgQVNTRVJUKCFtX3Zpc2l0b3IubV9zdXBwcmVzc1ZlcmlmaWVyKTsKKyAg
ICAgICAgICAgIG1fdmlzaXRvci5tX3N1cHByZXNzVmVyaWZpZXIgPSB0cnVlOworICAgICAgICB9
CisgICAgICAgIH5TdXBwcmVzc0dDVmVyaWZpZXJTY29wZSgpIHsgbV92aXNpdG9yLm1fc3VwcHJl
c3NWZXJpZmllciA9IGZhbHNlOyB9CisgICAgcHJpdmF0ZToKKyAgICAgICAgQWJzdHJhY3RTbG90
VmlzaXRvciYgbV92aXNpdG9yOworICAgIH07CisKKyAgICBjbGFzcyBEZWZhdWx0TWFya2luZ1Zp
b2xhdGlvbkFzc2VydGlvblNjb3BlIHsKKyAgICBwdWJsaWM6CisgICAgICAgIERlZmF1bHRNYXJr
aW5nVmlvbGF0aW9uQXNzZXJ0aW9uU2NvcGUoQWJzdHJhY3RTbG90VmlzaXRvciYpIHsgfQorICAg
IH07CisKKyAgICB2aXJ0dWFsIH5BYnN0cmFjdFNsb3RWaXNpdG9yKCkgPSBkZWZhdWx0OworCisg
ICAgTWFya1N0YWNrQXJyYXkmIGNvbGxlY3Rvck1hcmtTdGFjaygpIHsgcmV0dXJuIG1fY29sbGVj
dG9yU3RhY2s7IH0KKyAgICBNYXJrU3RhY2tBcnJheSYgbXV0YXRvck1hcmtTdGFjaygpIHsgcmV0
dXJuIG1fbXV0YXRvclN0YWNrOyB9CisgICAgY29uc3QgTWFya1N0YWNrQXJyYXkmIGNvbGxlY3Rv
ck1hcmtTdGFjaygpIGNvbnN0IHsgcmV0dXJuIG1fY29sbGVjdG9yU3RhY2s7IH0KKyAgICBjb25z
dCBNYXJrU3RhY2tBcnJheSYgbXV0YXRvck1hcmtTdGFjaygpIGNvbnN0IHsgcmV0dXJuIG1fbXV0
YXRvclN0YWNrOyB9CisKKyAgICBib29sIGlzRW1wdHkoKSB7IHJldHVybiBtX2NvbGxlY3RvclN0
YWNrLmlzRW1wdHkoKSAmJiBtX211dGF0b3JTdGFjay5pc0VtcHR5KCk7IH0KKworICAgIFZNJiB2
bSgpOworICAgIGNvbnN0IFZNJiB2bSgpIGNvbnN0OworICAgIEhlYXAqIGhlYXAoKSBjb25zdDsK
KworICAgIHZpcnR1YWwgdm9pZCBhcHBlbmQoY29uc3QgQ29uc2VydmF0aXZlUm9vdHMmKSA9IDA7
CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBUcmFpdHM+IHZvaWQgYXBwZW5k
KGNvbnN0IFdyaXRlQmFycmllckJhc2U8VCwgVHJhaXRzPiYpOworICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIFRyYWl0cz4gdm9pZCBhcHBlbmRIaWRkZW4oY29uc3QgV3JpdGVCYXJy
aWVyQmFzZTxULCBUcmFpdHM+Jik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSXRlcmF0b3I+IHZv
aWQgYXBwZW5kKEl0ZXJhdG9yIGJlZ2luICwgSXRlcmF0b3IgZW5kKTsKKyAgICBBTFdBWVNfSU5M
SU5FIHZvaWQgYXBwZW5kVmFsdWVzKGNvbnN0IFdyaXRlQmFycmllckJhc2U8VW5rbm93biwgUmF3
VmFsdWVUcmFpdHM8VW5rbm93bj4+Kiwgc2l6ZV90IGNvdW50KTsKKyAgICBBTFdBWVNfSU5MSU5F
IHZvaWQgYXBwZW5kVmFsdWVzSGlkZGVuKGNvbnN0IFdyaXRlQmFycmllckJhc2U8VW5rbm93biwg
UmF3VmFsdWVUcmFpdHM8VW5rbm93bj4+Kiwgc2l6ZV90IGNvdW50KTsKKworICAgIC8vIFRoZXNl
IGRvbid0IHJlcXVpcmUgeW91IHRvIHByb3ZlIHRoYXQgeW91IGhhdmUgYSBXcml0ZUJhcnJpZXI8
Pi4gVGhhdCBtYWtlcyBzZW5zZQorICAgIC8vIGZvcjoKKyAgICAvLworICAgIC8vIC0gcm9vdHMu
CisgICAgLy8gLSBzb3BoaXN0aWNhdGVkIGRhdGEgc3RydWN0dXJlcyB0aGF0IGJhcnJpZXIgdGhy
b3VnaCBvdGhlciBtZWFucyAobGlrZSBERkc6OlBsYW4gYW5kCisgICAgLy8gICBmcmllbmRzKS4K
KyAgICAvLworICAgIC8vIElmIHlvdSBhcmUgbm90IGEgcm9vdCBhbmQgeW91IGRvbid0IGtub3cg
d2hhdCBraW5kIG9mIGJhcnJpZXIgeW91IGhhdmUsIHRoZW4geW91CisgICAgLy8gc2hvdWxkbid0
IGNhbGwgdGhlc2UgbWV0aG9kcy4KKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgYXBwZW5kVW5iYXJy
aWVyZWQoSlNWYWx1ZSk7CisgICAgQUxXQVlTX0lOTElORSB2b2lkIGFwcGVuZFVuYmFycmllcmVk
KEpTVmFsdWUqLCBzaXplX3QpOworICAgIHZpcnR1YWwgdm9pZCBhcHBlbmRVbmJhcnJpZXJlZChK
U0NlbGwqKSA9IDA7CisKKyAgICBpbmxpbmUgYm9vbCBhZGRPcGFxdWVSb290KHZvaWQqKTsgLy8g
UmV0dXJucyB0cnVlIGlmIHRoZSByb290IHdhcyBuZXcuCisgICAgaW5saW5lIGJvb2wgY29udGFp
bnNPcGFxdWVSb290KHZvaWQqKSBjb25zdDsKKyAgICB2b2lkIHNldElnbm9yZU5ld09wYXF1ZVJv
b3RzKGJvb2wgdmFsdWUpIHsgbV9pZ25vcmVOZXdPcGFxdWVSb290cyA9IHZhbHVlOyB9CisKKyAg
ICB2aXJ0dWFsIGJvb2wgaXNGaXJzdFZpc2l0KCkgY29uc3QgPSAwOworCisgICAgdmlydHVhbCBi
b29sIGlzTWFya2VkKGNvbnN0IHZvaWQqKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBib29sIGlz
TWFya2VkKE1hcmtlZEJsb2NrJiwgSGVhcENlbGwqKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBi
b29sIGlzTWFya2VkKFByZWNpc2VBbGxvY2F0aW9uJiwgSGVhcENlbGwqKSBjb25zdCA9IDA7CisK
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIHZvaWQgYXBwZW5kKGNvbnN0IFdlYWs8VD4m
KTsKKworICAgIEFMV0FZU19JTkxJTkUgdm9pZCBhcHBlbmRIaWRkZW5VbmJhcnJpZXJlZChKU1Zh
bHVlKTsKKyAgICB2aXJ0dWFsIHZvaWQgYXBwZW5kSGlkZGVuVW5iYXJyaWVyZWQoSlNDZWxsKikg
PSAwOworCisgICAgc2l6ZV90IHZpc2l0Q291bnQoKSBjb25zdCB7IHJldHVybiBtX3Zpc2l0Q291
bnQ7IH0KKworICAgIHZvaWQgYWRkVG9WaXNpdENvdW50KHNpemVfdCB2YWx1ZSkgeyBtX3Zpc2l0
Q291bnQgKz0gdmFsdWU7IH0KKworICAgIHZpcnR1YWwgdm9pZCBhZGRQYXJhbGxlbENvbnN0cmFp
bnRUYXNrKFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoQWJzdHJhY3RTbG90VmlzaXRvciYpPj4pID0g
MDsKKyAgICB2aXJ0dWFsIHZvaWQgYWRkUGFyYWxsZWxDb25zdHJhaW50VGFzayhSZWZQdHI8U2hh
cmVkVGFzazx2b2lkKFNsb3RWaXNpdG9yJik+PikgPSAwOworCisgICAgdmlydHVhbCB2b2lkIG1h
cmtBdXhpbGlhcnkoY29uc3Qgdm9pZCogYmFzZSkgPSAwOworCisgICAgdmlydHVhbCB2b2lkIHJl
cG9ydEV4dHJhTWVtb3J5VmlzaXRlZChzaXplX3QpID0gMDsKKyNpZiBFTkFCTEUoUkVTT1VSQ0Vf
VVNBR0UpCisgICAgdmlydHVhbCB2b2lkIHJlcG9ydEV4dGVybmFsTWVtb3J5VmlzaXRlZChzaXpl
X3QpID0gMDsKKyNlbmRpZgorCisgICAgdmlydHVhbCB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBj
b25zdCA9IDA7CisKKyAgICBSb290TWFya1JlYXNvbiByb290TWFya1JlYXNvbigpIGNvbnN0IHsg
cmV0dXJuIG1fcm9vdE1hcmtSZWFzb247IH0KKyAgICB2b2lkIHNldFJvb3RNYXJrUmVhc29uKFJv
b3RNYXJrUmVhc29uIHJlYXNvbikgeyBtX3Jvb3RNYXJrUmVhc29uID0gcmVhc29uOyB9CisKKyAg
ICB2aXJ0dWFsIGJvb2wgbXV0YXRvcklzU3RvcHBlZCgpIGNvbnN0ID0gMDsKKworICAgIHZpcnR1
YWwgdm9pZCBkaWRSYWNlKGNvbnN0IFZpc2l0UmFjZUtleSYpID0gMDsKKyAgICB2b2lkIGRpZFJh
Y2UoSlNDZWxsKiBjZWxsLCBjb25zdCBjaGFyKiByZWFzb24pIHsgZGlkUmFjZShWaXNpdFJhY2VL
ZXkoY2VsbCwgcmVhc29uKSk7IH0KKworICAgIHZpcnR1YWwgdm9pZCB2aXNpdEFzQ29uc3RyYWlu
dChjb25zdCBKU0NlbGwqKSA9IDA7CisKKyAgICBjb25zdCBjaGFyKiBjb2RlTmFtZSgpIGNvbnN0
IHsgcmV0dXJuIG1fY29kZU5hbWUuZGF0YSgpOyB9CisKK3Byb3RlY3RlZDoKKyAgICBpbmxpbmUg
QWJzdHJhY3RTbG90VmlzaXRvcihIZWFwJiwgQ1N0cmluZyBjb2RlTmFtZSwgQ29uY3VycmVudFB0
ckhhc2hTZXQmKTsKKworICAgIEhlYXBDZWxsKiBwYXJlbnRDZWxsKCkgY29uc3Q7CisgICAgdm9p
ZCByZXNldCgpOworCisgICAgTWFya1N0YWNrQXJyYXkgbV9jb2xsZWN0b3JTdGFjazsKKyAgICBN
YXJrU3RhY2tBcnJheSBtX211dGF0b3JTdGFjazsKKworICAgIHNpemVfdCBtX3Zpc2l0Q291bnQg
eyAwIH07CisKKyAgICBIZWFwJiBtX2hlYXA7CisgICAgQ29udGV4dCogbV9jb250ZXh0IHsgbnVs
bHB0ciB9OworICAgIENTdHJpbmcgbV9jb2RlTmFtZTsKKworICAgIE1hcmtpbmdDb25zdHJhaW50
KiBtX2N1cnJlbnRDb25zdHJhaW50IHsgbnVsbHB0ciB9OworICAgIE1hcmtpbmdDb25zdHJhaW50
U29sdmVyKiBtX2N1cnJlbnRTb2x2ZXIgeyBudWxscHRyIH07CisgICAgQ29uY3VycmVudFB0ckhh
c2hTZXQmIG1fb3BhcXVlUm9vdHM7CisKKyAgICBSb290TWFya1JlYXNvbiBtX3Jvb3RNYXJrUmVh
c29uIHsgUm9vdE1hcmtSZWFzb246Ok5vbmUgfTsKKyAgICBib29sIG1fc3VwcHJlc3NWZXJpZmll
ciB7IGZhbHNlIH07CisgICAgYm9vbCBtX2lnbm9yZU5ld09wYXF1ZVJvb3RzIHsgZmFsc2UgfTsg
Ly8gVXNlZnVsIGFzIGEgZGVidWdnaW5nIG1vZGUuCisKKyAgICBmcmllbmQgY2xhc3MgTWFya2lu
Z0NvbnN0cmFpbnRTb2x2ZXI7Cit9OworCitjbGFzcyBTZXRSb290TWFya1JlYXNvblNjb3BlIHsK
K3B1YmxpYzoKKyAgICBTZXRSb290TWFya1JlYXNvblNjb3BlKEFic3RyYWN0U2xvdFZpc2l0b3Im
IHZpc2l0b3IsIFJvb3RNYXJrUmVhc29uIHJlYXNvbikKKyAgICAgICAgOiBtX3Zpc2l0b3Iodmlz
aXRvcikKKyAgICAgICAgLCBtX3ByZXZpb3VzUmVhc29uKHZpc2l0b3Iucm9vdE1hcmtSZWFzb24o
KSkKKyAgICB7CisgICAgICAgIG1fdmlzaXRvci5zZXRSb290TWFya1JlYXNvbihyZWFzb24pOwor
ICAgIH0KKworICAgIH5TZXRSb290TWFya1JlYXNvblNjb3BlKCkKKyAgICB7CisgICAgICAgIG1f
dmlzaXRvci5zZXRSb290TWFya1JlYXNvbihtX3ByZXZpb3VzUmVhc29uKTsKKyAgICB9CisKK3By
aXZhdGU6CisgICAgQWJzdHJhY3RTbG90VmlzaXRvciYgbV92aXNpdG9yOworICAgIFJvb3RNYXJr
UmVhc29uIG1fcHJldmlvdXNSZWFzb247Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Fic3RyYWN0U2xvdFZpc2l0b3JJbmxpbmVzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQWJzdHJhY3RTbG90Vmlz
aXRvcklubGluZXMuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9BYnN0cmFjdFNsb3RWaXNpdG9ySW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MTU0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3By
YWdtYSBvbmNlCisKKyNpbmNsdWRlICJBYnN0cmFjdFNsb3RWaXNpdG9yLmgiCisjaW5jbHVkZSAi
SGVhcC5oIgorI2luY2x1ZGUgIldlYWtJbmxpbmVzLmgiCisjaW5jbHVkZSAiV3JpdGVCYXJyaWVy
LmgiCisKK25hbWVzcGFjZSBKU0MgeworCitpbmxpbmUgQWJzdHJhY3RTbG90VmlzaXRvcjo6Q29u
dGV4dDo6Q29udGV4dChBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBIZWFwQ2VsbCogY2Vs
bCkKKyAgICA6IG1fdmlzaXRvcih2aXNpdG9yKQorICAgICwgbV9jZWxsKGNlbGwpCit7CisgICAg
bV9wcmV2aW91cyA9IG1fdmlzaXRvci5tX2NvbnRleHQ7CisgICAgbV92aXNpdG9yLm1fY29udGV4
dCA9IHRoaXM7Cit9CisKK2lubGluZSBBYnN0cmFjdFNsb3RWaXNpdG9yOjpDb250ZXh0Ojp+Q29u
dGV4dCgpCit7CisgICAgbV92aXNpdG9yLm1fY29udGV4dCA9IG1fcHJldmlvdXM7Cit9CisKK2lu
bGluZSBBYnN0cmFjdFNsb3RWaXNpdG9yOjpBYnN0cmFjdFNsb3RWaXNpdG9yKEhlYXAmIGhlYXAs
IENTdHJpbmcgY29kZU5hbWUsIENvbmN1cnJlbnRQdHJIYXNoU2V0JiBvcGFxdWVSb290cykKKyAg
ICA6IG1faGVhcChoZWFwKQorICAgICwgbV9jb2RlTmFtZShjb2RlTmFtZSkKKyAgICAsIG1fb3Bh
cXVlUm9vdHMob3BhcXVlUm9vdHMpCit7Cit9CisKK2lubGluZSBIZWFwKiBBYnN0cmFjdFNsb3RW
aXNpdG9yOjpoZWFwKCkgY29uc3QKK3sKKyAgICByZXR1cm4gJm1faGVhcDsKK30KKworaW5saW5l
IFZNJiBBYnN0cmFjdFNsb3RWaXNpdG9yOjp2bSgpCit7CisgICAgcmV0dXJuIG1faGVhcC52bSgp
OworfQorCitpbmxpbmUgY29uc3QgVk0mIEFic3RyYWN0U2xvdFZpc2l0b3I6OnZtKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gbV9oZWFwLnZtKCk7Cit9CisKK2lubGluZSBib29sIEFic3RyYWN0U2xv
dFZpc2l0b3I6OmFkZE9wYXF1ZVJvb3Qodm9pZCogcHRyKQoreworICAgIGlmICghcHRyKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG1faWdub3JlTmV3T3BhcXVlUm9vdHMpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIW1fb3BhcXVlUm9vdHMuYWRkKHB0cikpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICBtX3Zpc2l0Q291bnQrKzsKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKworaW5saW5lIGJvb2wgQWJzdHJhY3RTbG90VmlzaXRvcjo6Y29udGFpbnNPcGFxdWVSb290
KHZvaWQqIHB0cikgY29uc3QKK3sKKyAgICByZXR1cm4gbV9vcGFxdWVSb290cy5jb250YWlucyhw
dHIpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorQUxXQVlTX0lOTElORSB2b2lkIEFic3Ry
YWN0U2xvdFZpc2l0b3I6OmFwcGVuZChjb25zdCBXZWFrPFQ+JiB3ZWFrKQoreworICAgIGFwcGVu
ZFVuYmFycmllcmVkKHdlYWsuZ2V0KCkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBl
bmFtZSBUcmFpdHM+CitBTFdBWVNfSU5MSU5FIHZvaWQgQWJzdHJhY3RTbG90VmlzaXRvcjo6YXBw
ZW5kKGNvbnN0IFdyaXRlQmFycmllckJhc2U8VCwgVHJhaXRzPiYgc2xvdCkKK3sKKyAgICBhcHBl
bmRVbmJhcnJpZXJlZChzbG90LmdldCgpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlw
ZW5hbWUgVHJhaXRzPgorQUxXQVlTX0lOTElORSB2b2lkIEFic3RyYWN0U2xvdFZpc2l0b3I6OmFw
cGVuZEhpZGRlbihjb25zdCBXcml0ZUJhcnJpZXJCYXNlPFQsIFRyYWl0cz4mIHNsb3QpCit7Cisg
ICAgYXBwZW5kSGlkZGVuVW5iYXJyaWVyZWQoc2xvdC5nZXQoKSk7Cit9CisKK0FMV0FZU19JTkxJ
TkUgdm9pZCBBYnN0cmFjdFNsb3RWaXNpdG9yOjphcHBlbmRIaWRkZW5VbmJhcnJpZXJlZChKU1Zh
bHVlIHZhbHVlKQoreworICAgIGlmICh2YWx1ZS5pc0NlbGwoKSkKKyAgICAgICAgYXBwZW5kSGlk
ZGVuVW5iYXJyaWVyZWQodmFsdWUuYXNDZWxsKCkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBJ
dGVyYXRvcj4KK0FMV0FZU19JTkxJTkUgdm9pZCBBYnN0cmFjdFNsb3RWaXNpdG9yOjphcHBlbmQo
SXRlcmF0b3IgYmVnaW4sIEl0ZXJhdG9yIGVuZCkKK3sKKyAgICBmb3IgKGF1dG8gaXQgPSBiZWdp
bjsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICBhcHBlbmQoKml0KTsKK30KKworQUxXQVlTX0lO
TElORSB2b2lkIEFic3RyYWN0U2xvdFZpc2l0b3I6OmFwcGVuZFZhbHVlcyhjb25zdCBXcml0ZUJh
cnJpZXJCYXNlPFVua25vd24+KiBiYXJyaWVycywgc2l6ZV90IGNvdW50KQoreworICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgY291bnQ7ICsraSkKKyAgICAgICAgYXBwZW5kKGJhcnJpZXJzW2ld
KTsKK30KKworQUxXQVlTX0lOTElORSB2b2lkIEFic3RyYWN0U2xvdFZpc2l0b3I6OmFwcGVuZFZh
bHVlc0hpZGRlbihjb25zdCBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+KiBiYXJyaWVycywgc2l6
ZV90IGNvdW50KQoreworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY291bnQ7ICsraSkKKyAg
ICAgICAgYXBwZW5kSGlkZGVuKGJhcnJpZXJzW2ldKTsKK30KKworQUxXQVlTX0lOTElORSB2b2lk
IEFic3RyYWN0U2xvdFZpc2l0b3I6OmFwcGVuZFVuYmFycmllcmVkKEpTVmFsdWUgdmFsdWUpCit7
CisgICAgaWYgKHZhbHVlLmlzQ2VsbCgpKQorICAgICAgICBhcHBlbmRVbmJhcnJpZXJlZCh2YWx1
ZS5hc0NlbGwoKSk7Cit9CisKK0FMV0FZU19JTkxJTkUgdm9pZCBBYnN0cmFjdFNsb3RWaXNpdG9y
OjphcHBlbmRVbmJhcnJpZXJlZChKU1ZhbHVlKiBzbG90LCBzaXplX3QgY291bnQpCit7CisgICAg
Zm9yIChzaXplX3QgaSA9IGNvdW50OyBpLS07KQorICAgICAgICBhcHBlbmRVbmJhcnJpZXJlZChz
bG90W2ldKTsKK30KKworQUxXQVlTX0lOTElORSBIZWFwQ2VsbCogQWJzdHJhY3RTbG90VmlzaXRv
cjo6cGFyZW50Q2VsbCgpIGNvbnN0Cit7CisgICAgaWYgKCFtX2NvbnRleHQpCisgICAgICAgIHJl
dHVybiBudWxscHRyOworICAgIHJldHVybiBtX2NvbnRleHQtPmNlbGwoKTsKK30KKworQUxXQVlT
X0lOTElORSB2b2lkIEFic3RyYWN0U2xvdFZpc2l0b3I6OnJlc2V0KCkKK3sKKyAgICBtX3Zpc2l0
Q291bnQgPSAwOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0hhbmRsZVNldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvSGFuZGxlU2V0LmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvSGFuZGxlU2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU2LDcg
KzU2LDggQEAgdm9pZCBIYW5kbGVTZXQ6Omdyb3coKQogICAgIH0KIH0KIAotdm9pZCBIYW5kbGVT
ZXQ6OnZpc2l0U3Ryb25nSGFuZGxlcyhTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5
cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEhhbmRsZVNldDo6dmlzaXRTdHJvbmdIYW5kbGVzKFZpc2l0
b3ImIHZpc2l0b3IpCiB7CiAgICAgTm9kZSogZW5kID0gbV9zdHJvbmdMaXN0LmVuZCgpOwogICAg
IGZvciAoTm9kZSogbm9kZSA9IG1fc3Ryb25nTGlzdC5iZWdpbigpOyBub2RlICE9IGVuZDsgbm9k
ZSA9IG5vZGUtPm5leHQoKSkgewpAQCAtNjcsNiArNjgsOSBAQCB2b2lkIEhhbmRsZVNldDo6dmlz
aXRTdHJvbmdIYW5kbGVzKFNsb3RWCiAgICAgfQogfQogCit0ZW1wbGF0ZSB2b2lkIEhhbmRsZVNl
dDo6dmlzaXRTdHJvbmdIYW5kbGVzKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZv
aWQgSGFuZGxlU2V0Ojp2aXNpdFN0cm9uZ0hhbmRsZXMoU2xvdFZpc2l0b3ImKTsKKwogdm9pZCBI
YW5kbGVTZXQ6OndyaXRlQmFycmllcihIYW5kbGVTbG90IHNsb3QsIGNvbnN0IEpTVmFsdWUmIHZh
bHVlKQogewogICAgIGlmICghdmFsdWUgPT0gISpzbG90ICYmIHNsb3QtPmlzQ2VsbCgpID09IHZh
bHVlLmlzQ2VsbCgpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGFuZGxlU2V0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGFuZGxlU2V0LmgJ
KHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hhbmRsZVNl
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMS0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzUsMTAgKzM1LDEwIEBACiAKIG5hbWVzcGFjZSBKU0Mg
ewogCitjbGFzcyBBYnN0cmFjdFNsb3RWaXNpdG9yOwogY2xhc3MgSGFuZGxlU2V0OwogY2xhc3Mg
Vk07CiBjbGFzcyBKU1ZhbHVlOwotY2xhc3MgU2xvdFZpc2l0b3I7CiAKIGNsYXNzIEhhbmRsZU5v
ZGUgewogcHVibGljOgpAQCAtNzMsNyArNzMsNyBAQCBwdWJsaWM6CiAgICAgSGFuZGxlU2xvdCBh
bGxvY2F0ZSgpOwogICAgIHZvaWQgZGVhbGxvY2F0ZShIYW5kbGVTbG90KTsKIAotICAgIHZvaWQg
dmlzaXRTdHJvbmdIYW5kbGVzKFNsb3RWaXNpdG9yJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
VmlzaXRvcj4gdm9pZCB2aXNpdFN0cm9uZ0hhbmRsZXMoVmlzaXRvciYpOwogCiAgICAgSlNfRVhQ
T1JUX1BSSVZBVEUgdm9pZCB3cml0ZUJhcnJpZXIoSGFuZGxlU2xvdCwgY29uc3QgSlNWYWx1ZSYp
OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAkocmV2aXNpb24gMjcyOTAy
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTcyLDYgKzcyLDcgQEAKICNpbmNsdWRlICJUeXBlUHJvZmlsZXIuaCIKICNpbmNsdWRlICJU
eXBlUHJvZmlsZXJMb2cuaCIKICNpbmNsdWRlICJWTS5oIgorI2luY2x1ZGUgIlZlcmlmaWVyU2xv
dFZpc2l0b3JJbmxpbmVzLmgiCiAjaW5jbHVkZSAiV2Vha01hcEltcGxJbmxpbmVzLmgiCiAjaW5j
bHVkZSAiV2Vha1NldElubGluZXMuaCIKICNpbmNsdWRlIDxhbGdvcml0aG0+CkBAIC02NDMsMTkg
KzY0NCwxOSBAQCB2b2lkIEhlYXA6OmNvbXBsZXRlQWxsSklUUGxhbnMoKQogICAgIERGRzo6Y29t
cGxldGVBbGxQbGFuc0ZvclZNKG1fdm0pOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgot
dm9pZCBIZWFwOjppdGVyYXRlRXhlY3V0aW5nQW5kQ29tcGlsaW5nQ29kZUJsb2Nrcyhjb25zdCBG
dW5jJiBmdW5jKQordGVtcGxhdGU8dHlwZW5hbWUgRnVuYywgdHlwZW5hbWUgVmlzaXRvcj4KK3Zv
aWQgSGVhcDo6aXRlcmF0ZUV4ZWN1dGluZ0FuZENvbXBpbGluZ0NvZGVCbG9ja3MoVmlzaXRvciYg
dmlzaXRvciwgY29uc3QgRnVuYyYgZnVuYykKIHsKICAgICBtX2NvZGVCbG9ja3MtPml0ZXJhdGVD
dXJyZW50bHlFeGVjdXRpbmcoZnVuYyk7CiAgICAgaWYgKE9wdGlvbnM6OnVzZUpJVCgpKQotICAg
ICAgICBERkc6Oml0ZXJhdGVDb2RlQmxvY2tzRm9yR0MobV92bSwgZnVuYyk7CisgICAgICAgIERG
Rzo6aXRlcmF0ZUNvZGVCbG9ja3NGb3JHQyh2aXNpdG9yLCBtX3ZtLCBmdW5jKTsKIH0KIAotdGVt
cGxhdGU8dHlwZW5hbWUgRnVuYz4KLXZvaWQgSGVhcDo6aXRlcmF0ZUV4ZWN1dGluZ0FuZENvbXBp
bGluZ0NvZGVCbG9ja3NXaXRob3V0SG9sZGluZ0xvY2tzKGNvbnN0IEZ1bmMmIGZ1bmMpCit0ZW1w
bGF0ZTx0eXBlbmFtZSBGdW5jLCB0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBIZWFwOjppdGVyYXRl
RXhlY3V0aW5nQW5kQ29tcGlsaW5nQ29kZUJsb2Nrc1dpdGhvdXRIb2xkaW5nTG9ja3MoVmlzaXRv
ciYgdmlzaXRvciwgY29uc3QgRnVuYyYgZnVuYykKIHsKICAgICBWZWN0b3I8Q29kZUJsb2NrKiwg
MjU2PiBjb2RlQmxvY2tzOwotICAgIGl0ZXJhdGVFeGVjdXRpbmdBbmRDb21waWxpbmdDb2RlQmxv
Y2tzKAorICAgIGl0ZXJhdGVFeGVjdXRpbmdBbmRDb21waWxpbmdDb2RlQmxvY2tzKHZpc2l0b3Is
CiAgICAgICAgIFsmXSAoQ29kZUJsb2NrKiBjb2RlQmxvY2spIHsKICAgICAgICAgICAgIGNvZGVC
bG9ja3MuYXBwZW5kKGNvZGVCbG9jayk7CiAgICAgICAgIH0pOwpAQCAtNzMzLDE0ICs3MzQsNiBA
QCB2b2lkIEhlYXA6OnJlbW92ZURlYWRDb21waWxlcldvcmtsaXN0RW50CiAjZW5kaWYKIH0KIAot
Ym9vbCBIZWFwOjppc0FuYWx5emluZ0hlYXAoKSBjb25zdAotewotICAgIEhlYXBQcm9maWxlciog
aGVhcFByb2ZpbGVyID0gbV92bS5oZWFwUHJvZmlsZXIoKTsKLSAgICBpZiAoVU5MSUtFTFkoaGVh
cFByb2ZpbGVyKSkKLSAgICAgICAgcmV0dXJuIGhlYXBQcm9maWxlci0+YWN0aXZlSGVhcEFuYWx5
emVyKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCiBzdHJ1Y3QgR2F0aGVyRXh0cmFIZWFwRGF0
YSA6IE1hcmtlZEJsb2NrOjpDb3VudEZ1bmN0b3IgewogICAgIEdhdGhlckV4dHJhSGVhcERhdGEo
Vk0mIHZtLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQogICAgICAgICA6IG1fdm0odm0pCkBAIC0x
NDg1LDE0ICsxNDc4LDIxIEBAIE5FVkVSX0lOTElORSBib29sIEhlYXA6OnJ1bkVuZFBoYXNlKEdD
Q28KICAgICB9CiAgICAgbV9oZWxwZXJDbGllbnQuZmluaXNoKCk7CiAgICAgCi0gICAgaXRlcmF0
ZUV4ZWN1dGluZ0FuZENvbXBpbGluZ0NvZGVCbG9ja3MoCisgICAgQVNTRVJUKG1fbXV0YXRvck1h
cmtTdGFjay0+aXNFbXB0eSgpKTsKKyAgICBBU1NFUlQobV9yYWNlTWFya1N0YWNrLT5pc0VtcHR5
KCkpOworCisgICAgU2xvdFZpc2l0b3ImIHZpc2l0b3IgPSAqbV9jb2xsZWN0b3JTbG90VmlzaXRv
cjsKKyAgICBpdGVyYXRlRXhlY3V0aW5nQW5kQ29tcGlsaW5nQ29kZUJsb2Nrcyh2aXNpdG9yLAog
ICAgICAgICBbJl0gKENvZGVCbG9jayogY29kZUJsb2NrKSB7CiAgICAgICAgICAgICB3cml0ZUJh
cnJpZXIoY29kZUJsb2NrKTsKICAgICAgICAgfSk7Ci0gICAgICAgIAorCiAgICAgdXBkYXRlT2Jq
ZWN0Q291bnRzKCk7CiAgICAgZW5kTWFya2luZygpOwogCisgICAgaWYgKFVOTElLRUxZKE9wdGlv
bnM6OnZlcmlmeUdDKCkpKQorICAgICAgICB2ZXJpZnlHQygpOworCiAgICAgaWYgKFVOTElLRUxZ
KG1fdmVyaWZpZXIpKSB7CiAgICAgICAgIG1fdmVyaWZpZXItPmdhdGhlckxpdmVDZWxscyhIZWFw
VmVyaWZpZXI6OlBoYXNlOjpBZnRlck1hcmtpbmcpOwogICAgICAgICBtX3ZlcmlmaWVyLT52ZXJp
ZnkoSGVhcFZlcmlmaWVyOjpQaGFzZTo6QWZ0ZXJNYXJraW5nKTsKQEAgLTIxNzAsNiArMjE3MCwx
MiBAQCB2b2lkIEhlYXA6OnN1c3BlbmRDb21waWxlclRocmVhZHMoKQogCiB2b2lkIEhlYXA6Ondp
bGxTdGFydENvbGxlY3Rpb24oKQogeworICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjp2ZXJpZnlH
QygpKSkgeworICAgICAgICBtX3ZlcmlmaWVyU2xvdFZpc2l0b3IgPSBtYWtlVW5pcXVlPFZlcmlm
aWVyU2xvdFZpc2l0b3I+KCp0aGlzKTsKKyAgICAgICAgQVNTRVJUKCFtX2lzTWFya2luZ0ZvckdD
VmVyaWZpZXIpOworLy8gICAgICAgIFJFTEVBU0VfQVNTRVJUKCFtX2lzTWFya2luZ0ZvckdDVmVy
aWZpZXIpOyAvLyBtbGFtIFRFU1Qgb25seQorICAgIH0KKwogICAgIGRhdGFMb2dJZihPcHRpb25z
Ojpsb2dHQygpLCAiPT4gIik7CiAgICAgCiAgICAgaWYgKHNob3VsZERvRnVsbENvbGxlY3Rpb24o
KSkgewpAQCAtMjY5NywxMyArMjcwMyw0NyBAQCB2b2lkIEhlYXA6OmRpZEZyZWVCbG9jayhzaXpl
X3QgY2FwYWNpdHkpCiAjZW5kaWYKIH0KIAorLy8gVGhlIGZvbGxvd2luZyBhcmUgcHVsbGVkIG91
dCBvZiB0aGUgYm9keSBvZiBIZWFwOjphZGRDb3JlQ29uc3RyYWludHMoKSBvbmx5CisvLyBiZWNh
dXNlIHRoZSBXaW5DYWlybyBwb3J0IGlzIG5vdCBhYmxlIHRvIGhhbmRsZSAjaWYncyBpbnNpZGUg
dGhlIGJvZHkgb2YgdGhlCisvLyBsYW1iZGEgcGFzc2VkIGludG8gdGhlIE1BS0VfTUFSS0lOR19D
T05TVFJBSU5UX0VYRUNVVE9SX1BBSVIgbWFjcm8uIFRoaXMgd29ya3MKKy8vIGFyb3VuZCB0aGF0
IGlzc3VlLgorCisjaWYgSlNDX09CSkNfQVBJX0VOQUJMRUQKK2NvbnN0ZXhwciBib29sIG9iamNB
UElFbmFibGVkID0gdHJ1ZTsKKyNlbHNlCitjb25zdGV4cHIgYm9vbCBvYmpjQVBJRW5hYmxlZCA9
IGZhbHNlOworc3RhdGljIHZvaWQgc2NhbkV4dGVybmFsUmVtZW1iZXJlZFNldChWTSYsIEFic3Ry
YWN0U2xvdFZpc2l0b3ImKSB7IH0KKyNlbmRpZgorCisjaWYgRU5BQkxFKFNBTVBMSU5HX1BST0ZJ
TEVSKQorY29uc3RleHByIGJvb2wgc2FtcGxpbmdQcm9maWxlclN1cHBvcnRlZCA9IHRydWU7Citz
dGF0aWMgaW5saW5lIHZvaWQgc2VydmljZVNhbXBsaW5nUHJvZmlsZXIoVk0mIHZtLCBBYnN0cmFj
dFNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIGlmIChTYW1wbGluZ1Byb2ZpbGVyKiBzYW1w
bGluZ1Byb2ZpbGVyID0gdm0uc2FtcGxpbmdQcm9maWxlcigpKSB7CisgICAgICAgIGF1dG8gbG9j
a2VyID0gaG9sZExvY2soc2FtcGxpbmdQcm9maWxlci0+Z2V0TG9jaygpKTsKKyAgICAgICAgc2Ft
cGxpbmdQcm9maWxlci0+cHJvY2Vzc1VudmVyaWZpZWRTdGFja1RyYWNlcyhsb2NrZXIpOworICAg
ICAgICBzYW1wbGluZ1Byb2ZpbGVyLT52aXNpdCh2aXNpdG9yKTsKKyAgICAgICAgaWYgKE9wdGlv
bnM6OmxvZ0dDKCkgPT0gR0NMb2dnaW5nOjpWZXJib3NlKQorICAgICAgICAgICAgZGF0YUxvZygi
U2FtcGxpbmcgUHJvZmlsZXIgZGF0YTpcbiIsIHZpc2l0b3IpOworICAgIH0KK307CisjZWxzZQor
Y29uc3RleHByIGJvb2wgc2FtcGxpbmdQcm9maWxlclN1cHBvcnRlZCA9IGZhbHNlOworc3RhdGlj
IFVOVVNFRF9GVU5DVElPTiB2b2lkIHNlcnZpY2VTYW1wbGluZ1Byb2ZpbGVyKFZNJiwgQWJzdHJh
Y3RTbG90VmlzaXRvciYpIHsgfTsKKyNlbmRpZgorCiB2b2lkIEhlYXA6OmFkZENvcmVDb25zdHJh
aW50cygpCiB7CiAgICAgbV9jb25zdHJhaW50U2V0LT5hZGQoCiAgICAgICAgICJDcyIsICJDb25z
ZXJ2YXRpdmUgU2NhbiIsCi0gICAgICAgIFt0aGlzLCBsYXN0VmVyc2lvbiA9IHN0YXRpY19jYXN0
PHVpbnQ2NF90PigwKV0gKFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBtdXRhYmxlIHsKKyAgICAgICAg
TUFLRV9NQVJLSU5HX0NPTlNUUkFJTlRfRVhFQ1VUT1JfUEFJUigoW3RoaXMsIGxhc3RWZXJzaW9u
ID0gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KDApXSAoYXV0byYgdmlzaXRvcikgbXV0YWJsZSB7CiAg
ICAgICAgICAgICBib29sIHNob3VsZE5vdFByb2R1Y2VXb3JrID0gbGFzdFZlcnNpb24gPT0gbV9w
aGFzZVZlcnNpb247Ci0gICAgICAgICAgICBpZiAoc2hvdWxkTm90UHJvZHVjZVdvcmspCisKKyAg
ICAgICAgICAgIC8vIEZvciB0aGUgR0MgVmVyZmllciwgd2Ugd291bGQgbGlrZSB0byB1c2UgdGhl
IGlkZW50aWNhbCBzZXQgb2YgY29uc2VydmF0aXZlIHJvb3RzCisgICAgICAgICAgICAvLyBhcyB0
aGUgcmVhbCBHQy4gT3RoZXJ3aXNlLCB0aGUgR0MgdmVyaWZpZXIgbWF5IHJlcG9ydCBmYWxzZSBu
ZWdhdGl2ZXMgZHVlIHRvCisgICAgICAgICAgICAvLyB2YXJpYXRpb25zIGluIHN0YWNrIHZhbHVl
cy4gRm9yIHRoaXMgc2FtZSByZWFzb24sIHdlIHdpbGwgc2tpcCB0aGlzIGNvbnN0cmFpbnQKKyAg
ICAgICAgICAgIC8vIHdoZW4gd2UncmUgcnVubmluZyB0aGUgR0MgdmVyaWZpY2F0aW9uIGluIHRo
ZSBFbmQgcGhhc2UuCisgICAgICAgICAgICBpZiAoc2hvdWxkTm90UHJvZHVjZVdvcmsgfHwgbV9p
c01hcmtpbmdGb3JHQ1ZlcmlmaWVyKQogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
ICAgIAogICAgICAgICAgICAgVGltaW5nU2NvcGUgcHJlQ29udmVyZ2VuY2VUaW1pbmdTY29wZSgq
dGhpcywgIkNvbnN0cmFpbnQ6IGNvbnNlcnZhdGl2ZSBzY2FuIik7CkBAIC0yNzIwLDI0ICsyNzYw
LDI5IEBAIHZvaWQgSGVhcDo6YWRkQ29yZUNvbnN0cmFpbnRzKCkKIAogICAgICAgICAgICAgICAg
IFNldFJvb3RNYXJrUmVhc29uU2NvcGUgcm9vdFNjb3BlKHZpc2l0b3IsIFJvb3RNYXJrUmVhc29u
OjpDb25zZXJ2YXRpdmVTY2FuKTsKICAgICAgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZChjb25z
ZXJ2YXRpdmVSb290cyk7CisgICAgICAgICAgICAgICAgaWYgKFVOTElLRUxZKG1fdmVyaWZpZXJT
bG90VmlzaXRvcikpCisgICAgICAgICAgICAgICAgICAgIG1fdmVyaWZpZXJTbG90VmlzaXRvci0+
YXBwZW5kKGNvbnNlcnZhdGl2ZVJvb3RzKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlm
IChPcHRpb25zOjp1c2VKSVQoKSkgewogICAgICAgICAgICAgICAgIC8vIEpJVFN0dWJSb3V0aW5l
cyBtdXN0IGJlIHZpc2l0ZWQgYWZ0ZXIgc2Nhbm5pbmcgQ29uc2VydmF0aXZlUm9vdHMgc2luY2Ug
SklUU3R1YlJvdXRpbmVzIGRlcGVuZCBvbiB0aGUgaG9vayBleGVjdXRlZCBkdXJpbmcgZ2F0aGVy
aW5nIENvbnNlcnZhdGl2ZVJvb3RzLgogICAgICAgICAgICAgICAgIFNldFJvb3RNYXJrUmVhc29u
U2NvcGUgcm9vdFNjb3BlKHZpc2l0b3IsIFJvb3RNYXJrUmVhc29uOjpKSVRTdHViUm91dGluZXMp
OwogICAgICAgICAgICAgICAgIG1faml0U3R1YlJvdXRpbmVzLT50cmFjZU1hcmtlZFN0dWJSb3V0
aW5lcyh2aXNpdG9yKTsKKyAgICAgICAgICAgICAgICBpZiAoVU5MSUtFTFkobV92ZXJpZmllclNs
b3RWaXNpdG9yKSkgeworICAgICAgICAgICAgICAgICAgICBBYnN0cmFjdFNsb3RWaXNpdG9yJiB2
aXNpdG9yID0gKm1fdmVyaWZpZXJTbG90VmlzaXRvcjsKKyAgICAgICAgICAgICAgICAgICAgbV9q
aXRTdHViUm91dGluZXMtPnRyYWNlTWFya2VkU3R1YlJvdXRpbmVzKHZpc2l0b3IpOworICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICAgICAgbGFz
dFZlcnNpb24gPSBtX3BoYXNlVmVyc2lvbjsKLSAgICAgICAgfSwKKyAgICAgICAgfSkpLAogICAg
ICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eTo6R3JleWVkQnlFeGVjdXRpb24pOwogICAgIAogICAg
IG1fY29uc3RyYWludFNldC0+YWRkKAogICAgICAgICAiTXNyIiwgIk1pc2MgU21hbGwgUm9vdHMi
LAotICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiB2aXNpdG9yKSB7CisgICAgICAgIE1BS0Vf
TUFSS0lOR19DT05TVFJBSU5UX0VYRUNVVE9SX1BBSVIoKFt0aGlzXSAoYXV0byYgdmlzaXRvcikg
eworICAgICAgICAgICAgaWYgY29uc3RleHByIChvYmpjQVBJRW5hYmxlZCkKKyAgICAgICAgICAg
ICAgICBzY2FuRXh0ZXJuYWxSZW1lbWJlcmVkU2V0KG1fdm0sIHZpc2l0b3IpOwogCi0jaWYgSlND
X09CSkNfQVBJX0VOQUJMRUQKLSAgICAgICAgICAgIHNjYW5FeHRlcm5hbFJlbWVtYmVyZWRTZXQo
bV92bSwgdmlzaXRvcik7Ci0jZW5kaWYKICAgICAgICAgICAgIGlmIChtX3ZtLnNtYWxsU3RyaW5n
cy5uZWVkc1RvQmVWaXNpdGVkKCptX2NvbGxlY3Rpb25TY29wZSkpIHsKICAgICAgICAgICAgICAg
ICBTZXRSb290TWFya1JlYXNvblNjb3BlIHJvb3RTY29wZSh2aXNpdG9yLCBSb290TWFya1JlYXNv
bjo6U3Ryb25nUmVmZXJlbmNlcyk7CiAgICAgICAgICAgICAgICAgbV92bS5zbWFsbFN0cmluZ3Mu
dmlzaXRTdHJvbmdSZWZlcmVuY2VzKHZpc2l0b3IpOwpAQCAtMjc2Myw2OCArMjgwOCw2NiBAQCB2
b2lkIEhlYXA6OmFkZENvcmVDb25zdHJhaW50cygpCiAgICAgICAgICAgICAgICAgdmlzaXRvci5h
cHBlbmRVbmJhcnJpZXJlZChtX3ZtLmV4Y2VwdGlvbigpKTsKICAgICAgICAgICAgICAgICB2aXNp
dG9yLmFwcGVuZFVuYmFycmllcmVkKG1fdm0ubGFzdEV4Y2VwdGlvbigpKTsKICAgICAgICAgICAg
IH0KLSAgICAgICAgfSwKKyAgICAgICAgfSkpLAogICAgICAgICBDb25zdHJhaW50Vm9sYXRpbGl0
eTo6R3JleWVkQnlFeGVjdXRpb24pOwogICAgIAogICAgIG1fY29uc3RyYWludFNldC0+YWRkKAog
ICAgICAgICAiU2giLCAiU3Ryb25nIEhhbmRsZXMiLAotICAgICAgICBbdGhpc10gKFNsb3RWaXNp
dG9yJiB2aXNpdG9yKSB7CisgICAgICAgIE1BS0VfTUFSS0lOR19DT05TVFJBSU5UX0VYRUNVVE9S
X1BBSVIoKFt0aGlzXSAoYXV0byYgdmlzaXRvcikgewogICAgICAgICAgICAgU2V0Um9vdE1hcmtS
ZWFzb25TY29wZSByb290U2NvcGUodmlzaXRvciwgUm9vdE1hcmtSZWFzb246OlN0cm9uZ0hhbmRs
ZXMpOwogICAgICAgICAgICAgbV9oYW5kbGVTZXQudmlzaXRTdHJvbmdIYW5kbGVzKHZpc2l0b3Ip
OwotICAgICAgICB9LAorICAgICAgICB9KSksCiAgICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5
OjpHcmV5ZWRCeUV4ZWN1dGlvbik7CiAgICAgCiAgICAgbV9jb25zdHJhaW50U2V0LT5hZGQoCiAg
ICAgICAgICJEIiwgIkRlYnVnZ2VyIiwKLSAgICAgICAgW3RoaXNdIChTbG90VmlzaXRvciYgdmlz
aXRvcikgeworICAgICAgICBNQUtFX01BUktJTkdfQ09OU1RSQUlOVF9FWEVDVVRPUl9QQUlSKChb
dGhpc10gKGF1dG8mIHZpc2l0b3IpIHsKICAgICAgICAgICAgIFNldFJvb3RNYXJrUmVhc29uU2Nv
cGUgcm9vdFNjb3BlKHZpc2l0b3IsIFJvb3RNYXJrUmVhc29uOjpEZWJ1Z2dlcik7CiAKLSNpZiBF
TkFCTEUoU0FNUExJTkdfUFJPRklMRVIpCi0gICAgICAgICAgICBpZiAoU2FtcGxpbmdQcm9maWxl
ciogc2FtcGxpbmdQcm9maWxlciA9IG1fdm0uc2FtcGxpbmdQcm9maWxlcigpKSB7Ci0gICAgICAg
ICAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhzYW1wbGluZ1Byb2ZpbGVyLT5nZXRMb2Nr
KCkpOwotICAgICAgICAgICAgICAgIHNhbXBsaW5nUHJvZmlsZXItPnByb2Nlc3NVbnZlcmlmaWVk
U3RhY2tUcmFjZXMobG9ja2VyKTsKLSAgICAgICAgICAgICAgICBzYW1wbGluZ1Byb2ZpbGVyLT52
aXNpdCh2aXNpdG9yKTsKLSAgICAgICAgICAgICAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSA9PSBH
Q0xvZ2dpbmc6OlZlcmJvc2UpCi0gICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIlNhbXBsaW5n
IFByb2ZpbGVyIGRhdGE6XG4iLCB2aXNpdG9yKTsKLSAgICAgICAgICAgIH0KLSNlbmRpZiAvLyBF
TkFCTEUoU0FNUExJTkdfUFJPRklMRVIpCisgICAgICAgICAgICBpZiBjb25zdGV4cHIgKHNhbXBs
aW5nUHJvZmlsZXJTdXBwb3J0ZWQpCisgICAgICAgICAgICAgICAgc2VydmljZVNhbXBsaW5nUHJv
ZmlsZXIobV92bSwgdmlzaXRvcik7CiAKICAgICAgICAgICAgIGlmIChtX3ZtLnR5cGVQcm9maWxl
cigpKQogICAgICAgICAgICAgICAgIG1fdm0udHlwZVByb2ZpbGVyTG9nKCktPnZpc2l0KHZpc2l0
b3IpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAoYXV0byogc2hhZG93Q2hpY2tlbiA9
IG1fdm0uc2hhZG93Q2hpY2tlbigpKQogICAgICAgICAgICAgICAgIHNoYWRvd0NoaWNrZW4tPnZp
c2l0Q2hpbGRyZW4odmlzaXRvcik7Ci0gICAgICAgIH0sCisgICAgICAgIH0pKSwKICAgICAgICAg
Q29uc3RyYWludFZvbGF0aWxpdHk6OkdyZXllZEJ5RXhlY3V0aW9uKTsKICAgICAKICAgICBtX2Nv
bnN0cmFpbnRTZXQtPmFkZCgKICAgICAgICAgIldzIiwgIldlYWsgU2V0cyIsCi0gICAgICAgIFt0
aGlzXSAoU2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsKKyAgICAgICAgTUFLRV9NQVJLSU5HX0NPTlNU
UkFJTlRfRVhFQ1VUT1JfUEFJUigoW3RoaXNdIChhdXRvJiB2aXNpdG9yKSB7CiAgICAgICAgICAg
ICBTZXRSb290TWFya1JlYXNvblNjb3BlIHJvb3RTY29wZSh2aXNpdG9yLCBSb290TWFya1JlYXNv
bjo6V2Vha1NldHMpOwogICAgICAgICAgICAgbV9vYmplY3RTcGFjZS52aXNpdFdlYWtTZXRzKHZp
c2l0b3IpOwotICAgICAgICB9LAorICAgICAgICB9KSksCiAgICAgICAgIENvbnN0cmFpbnRWb2xh
dGlsaXR5OjpHcmV5ZWRCeU1hcmtpbmcpOwogICAgIAogICAgIG1fY29uc3RyYWludFNldC0+YWRk
KAogICAgICAgICAiTyIsICJPdXRwdXQiLAotICAgICAgICBbXSAoU2xvdFZpc2l0b3ImIHZpc2l0
b3IpIHsKKyAgICAgICAgTUFLRV9NQVJLSU5HX0NPTlNUUkFJTlRfRVhFQ1VUT1JfUEFJUigoW10g
KGF1dG8mIHZpc2l0b3IpIHsKKyAgICAgICAgICAgIHVzaW5nIFZpc2l0b3IgPSBkZWNsdHlwZSh2
aXNpdG9yKTsKICAgICAgICAgICAgIFZNJiB2bSA9IHZpc2l0b3Iudm0oKTsKIAotICAgICAgICAg
ICAgYXV0byBjYWxsT3V0cHV0Q29uc3RyYWludCA9IFtdIChTbG90VmlzaXRvciYgdmlzaXRvciwg
SGVhcENlbGwqIGhlYXBDZWxsLCBIZWFwQ2VsbDo6S2luZCkgewotICAgICAgICAgICAgICAgIFNl
dFJvb3RNYXJrUmVhc29uU2NvcGUgcm9vdFNjb3BlKHZpc2l0b3IsIFJvb3RNYXJrUmVhc29uOjpP
dXRwdXQpOwotICAgICAgICAgICAgICAgIFZNJiB2bSA9IHZpc2l0b3Iudm0oKTsKKyAgICAgICAg
ICAgIC8vIFRoZSBgdmlzaXRvcjJgIGFyZ3VtZW50IGlzIHN0cmFuZ2VseSBuYW1lZCBiZWNhdXNl
IHRoZSBXaW5DYWlybyBwb3J0CisgICAgICAgICAgICAvLyBnZXRzIGNvbmZ1c2VkICBhbmQgdGhp
bmtzIHdlJ3JlIHRyeWluZyB0byBjYXB0dXJlIHRoZSBvdXRlciB2aXNpdG9yCisgICAgICAgICAg
ICAvLyBhcmcgaGVyZS4gR2l2aW5nIGl0IGEgdW5pcXVlIG5hbWUgd29ya3MgYXJvdW5kIHRoaXMg
aXNzdWUuCisgICAgICAgICAgICBhdXRvIGNhbGxPdXRwdXRDb25zdHJhaW50ID0gW10gKFZpc2l0
b3ImIHZpc2l0b3IyLCBIZWFwQ2VsbCogaGVhcENlbGwsIEhlYXBDZWxsOjpLaW5kKSB7CisgICAg
ICAgICAgICAgICAgU2V0Um9vdE1hcmtSZWFzb25TY29wZSByb290U2NvcGUodmlzaXRvcjIsIFJv
b3RNYXJrUmVhc29uOjpPdXRwdXQpOworICAgICAgICAgICAgICAgIFZNJiB2bSA9IHZpc2l0b3Iy
LnZtKCk7CiAgICAgICAgICAgICAgICAgSlNDZWxsKiBjZWxsID0gc3RhdGljX2Nhc3Q8SlNDZWxs
Kj4oaGVhcENlbGwpOwotICAgICAgICAgICAgICAgIGNlbGwtPm1ldGhvZFRhYmxlKHZtKS0+dmlz
aXRPdXRwdXRDb25zdHJhaW50cyhjZWxsLCB2aXNpdG9yKTsKKyAgICAgICAgICAgICAgICBjZWxs
LT5tZXRob2RUYWJsZSh2bSktPnZpc2l0T3V0cHV0Q29uc3RyYWludHMoY2VsbCwgdmlzaXRvcjIp
OwogICAgICAgICAgICAgfTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgYXV0byBhZGQgPSBb
Jl0gKGF1dG8mIHNldCkgewotICAgICAgICAgICAgICAgIHZpc2l0b3IuYWRkUGFyYWxsZWxDb25z
dHJhaW50VGFzayhzZXQuZm9yRWFjaE1hcmtlZENlbGxJblBhcmFsbGVsKGNhbGxPdXRwdXRDb25z
dHJhaW50KSk7CisgICAgICAgICAgICAgICAgUmVmUHRyPFNoYXJlZFRhc2s8dm9pZChWaXNpdG9y
Jik+PiB0YXNrID0gc2V0LnRlbXBsYXRlIGZvckVhY2hNYXJrZWRDZWxsSW5QYXJhbGxlbDxWaXNp
dG9yPihjYWxsT3V0cHV0Q29uc3RyYWludCk7CisgICAgICAgICAgICAgICAgdmlzaXRvci5hZGRQ
YXJhbGxlbENvbnN0cmFpbnRUYXNrKHRhc2spOwogICAgICAgICAgICAgfTsKICAgICAgICAgICAg
IAogICAgICAgICAgICAgYWRkKHZtLmV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2VzV2l0aENvbnN0
cmFpbnRzKTsKICAgICAgICAgICAgIGlmICh2bS5tX3dlYWtNYXBTcGFjZSkKICAgICAgICAgICAg
ICAgICBhZGQoKnZtLm1fd2Vha01hcFNwYWNlKTsKLSAgICAgICAgfSwKKyAgICAgICAgfSkpLAog
ICAgICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eTo6R3JleWVkQnlNYXJraW5nLAogICAgICAgICBD
b25zdHJhaW50UGFyYWxsZWxpc206OlBhcmFsbGVsKTsKICAgICAKQEAgLTI4MzIsNyArMjg3NSw3
IEBAIHZvaWQgSGVhcDo6YWRkQ29yZUNvbnN0cmFpbnRzKCkKICAgICBpZiAoT3B0aW9uczo6dXNl
SklUKCkpIHsKICAgICAgICAgbV9jb25zdHJhaW50U2V0LT5hZGQoCiAgICAgICAgICAgICAiRHci
LCAiREZHIFdvcmtsaXN0cyIsCi0gICAgICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiB2aXNp
dG9yKSB7CisgICAgICAgICAgICBNQUtFX01BUktJTkdfQ09OU1RSQUlOVF9FWEVDVVRPUl9QQUlS
KChbdGhpc10gKGF1dG8mIHZpc2l0b3IpIHsKICAgICAgICAgICAgICAgICBTZXRSb290TWFya1Jl
YXNvblNjb3BlIHJvb3RTY29wZSh2aXNpdG9yLCBSb290TWFya1JlYXNvbjo6REZHV29ya0xpc3Rz
KTsKIAogICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IERGRzo6bnVtYmVyT2ZXb3Jr
bGlzdHMoKTsgaS0tOykKQEAgLTI4NDAsNyArMjg4Myw3IEBAIHZvaWQgSGVhcDo6YWRkQ29yZUNv
bnN0cmFpbnRzKCkKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAvLyBGSVhNRTog
VGhpcyBpcyBhbG1vc3QgY2VydGFpbmx5IHVubmVjZXNzYXJ5LgogICAgICAgICAgICAgICAgIC8v
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjY4MjkKLSAgICAgICAg
ICAgICAgICBERkc6Oml0ZXJhdGVDb2RlQmxvY2tzRm9yR0MoCisgICAgICAgICAgICAgICAgREZH
OjppdGVyYXRlQ29kZUJsb2Nrc0ZvckdDKHZpc2l0b3IsCiAgICAgICAgICAgICAgICAgICAgIG1f
dm0sCiAgICAgICAgICAgICAgICAgICAgIFsmXSAoQ29kZUJsb2NrKiBjb2RlQmxvY2spIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQoY29kZUJsb2Nr
KTsKQEAgLTI4NDgsMjMgKzI4OTEsMjMgQEAgdm9pZCBIZWFwOjphZGRDb3JlQ29uc3RyYWludHMo
KQogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGlmIChPcHRpb25zOjpsb2dHQygp
ID09IEdDTG9nZ2luZzo6VmVyYm9zZSkKICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiREZH
IFdvcmtsaXN0czpcbiIsIHZpc2l0b3IpOwotICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIH0p
KSwKICAgICAgICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5OjpHcmV5ZWRCeU1hcmtpbmcpOwog
ICAgIH0KICNlbmRpZgogICAgIAogICAgIG1fY29uc3RyYWludFNldC0+YWRkKAogICAgICAgICAi
Q2IiLCAiQ29kZUJsb2NrcyIsCi0gICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHZpc2l0b3Ip
IHsKKyAgICAgICAgTUFLRV9NQVJLSU5HX0NPTlNUUkFJTlRfRVhFQ1VUT1JfUEFJUigoW3RoaXNd
IChhdXRvJiB2aXNpdG9yKSB7CiAgICAgICAgICAgICBTZXRSb290TWFya1JlYXNvblNjb3BlIHJv
b3RTY29wZSh2aXNpdG9yLCBSb290TWFya1JlYXNvbjo6Q29kZUJsb2Nrcyk7Ci0gICAgICAgICAg
ICBpdGVyYXRlRXhlY3V0aW5nQW5kQ29tcGlsaW5nQ29kZUJsb2Nrc1dpdGhvdXRIb2xkaW5nTG9j
a3MoCisgICAgICAgICAgICBpdGVyYXRlRXhlY3V0aW5nQW5kQ29tcGlsaW5nQ29kZUJsb2Nrc1dp
dGhvdXRIb2xkaW5nTG9ja3ModmlzaXRvciwKICAgICAgICAgICAgICAgICBbJl0gKENvZGVCbG9j
ayogY29kZUJsb2NrKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIFZpc2l0IHRoZSBDb2RlQmxv
Y2sgYXMgYSBjb25zdHJhaW50IG9ubHkgaWYgaXQncyBibGFjay4KLSAgICAgICAgICAgICAgICAg
ICAgaWYgKGlzTWFya2VkKGNvZGVCbG9jaykKKyAgICAgICAgICAgICAgICAgICAgaWYgKHZpc2l0
b3IuaXNNYXJrZWQoY29kZUJsb2NrKQogICAgICAgICAgICAgICAgICAgICAgICAgJiYgY29kZUJs
b2NrLT5jZWxsU3RhdGUoKSA9PSBDZWxsU3RhdGU6OlBvc3NpYmx5QmxhY2spCiAgICAgICAgICAg
ICAgICAgICAgICAgICB2aXNpdG9yLnZpc2l0QXNDb25zdHJhaW50KGNvZGVCbG9jayk7CiAgICAg
ICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0sCisgICAgICAgIH0pKSwKICAgICAgICAgQ29uc3Ry
YWludFZvbGF0aWxpdHk6OlNlbGRvbUdyZXllZCk7CiAgICAgCiAgICAgbV9jb25zdHJhaW50U2V0
LT5hZGQobWFrZVVuaXF1ZTxNYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludD4oKnRoaXMpKTsKQEAg
LTMwMjMsNCArMzA2NiwzMyBAQCB2b2lkIEhlYXA6OnJ1blRhc2tJblBhcmFsbGVsKFJlZlB0cjxT
aGFyCiAgICAgfQogfQogCit2b2lkIEhlYXA6OnZlcmlmeUdDKCkKK3sKKyAgICBSRUxFQVNFX0FT
U0VSVChtX3ZlcmlmaWVyU2xvdFZpc2l0b3IpOworICAgIFJFTEVBU0VfQVNTRVJUKCFtX2lzTWFy
a2luZ0ZvckdDVmVyaWZpZXIpOworICAgIG1faXNNYXJraW5nRm9yR0NWZXJpZmllciA9IHRydWU7
CisKKyAgICBWZXJpZmllclNsb3RWaXNpdG9yJiB2aXNpdG9yID0gKm1fdmVyaWZpZXJTbG90Vmlz
aXRvcjsKKworICAgIGRvIHsKKyAgICAgICAgdmlzaXRvci5kcmFpbigpOworICAgICAgICBtX2Nv
bnN0cmFpbnRTZXQtPmV4ZWN1dGVBbGxTeW5jaHJvbm91c2x5KHZpc2l0b3IpOworICAgICAgICB2
aXNpdG9yLmV4ZWN1dGVDb25zdHJhaW50VGFza3MoKTsKKyAgICB9IHdoaWxlICghdmlzaXRvci5p
c0VtcHR5KCkpOworCisgICAgbV9pc01hcmtpbmdGb3JHQ1ZlcmlmaWVyID0gZmFsc2U7CisKKyAg
ICB2aXNpdG9yLmZvckVhY2hMaXZlQ2VsbChbJl0gKEhlYXBDZWxsKiBjZWxsKSB7CisgICAgICAg
IGlmIChIZWFwOjppc01hcmtlZChjZWxsKSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAg
ICBkYXRhTG9nTG4oIlxuIiAiR0MgVmVyaWZpZXI6IEVSUk9SIGNlbGwgIiwgUmF3UG9pbnRlcihj
ZWxsKSwgIiB3YXMgbm90IG1hcmtlZCIpOworICAgICAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6
dmVyYm9zZVZlcmlmeUdDKCkpKQorICAgICAgICAgICAgdmlzaXRvci5kdW1wTWFya2VyRGF0YShj
ZWxsKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQodGhpcy0+aXNNYXJrZWQoY2VsbCkpOworICAg
IH0pOworCisgICAgbV92ZXJpZmllclNsb3RWaXNpdG9yID0gbnVsbHB0cjsKK30KKwogfSAvLyBu
YW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCShyZXZpc2lvbiAy
NzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNyArMSw3IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAwIEhhcnJp
IFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCiAgKiAgQ29weXJpZ2h0IChDKSAyMDAxIFBldGVyIEtl
bGx5IChwbWtAcG9zdC5jb20pCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMjAgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwMy0yMDIxIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKQEAgLTg2LDYg
Kzg2LDcgQEAgY2xhc3MgU3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlcjsKIGNsYXNzIFN0b3BJZk5l
Y2Vzc2FyeVRpbWVyOwogY2xhc3MgU3dlZXBpbmdTY29wZTsKIGNsYXNzIFZNOworY2xhc3MgVmVy
aWZpZXJTbG90VmlzaXRvcjsKIGNsYXNzIFdlYWtHQ01hcEJhc2U7CiBzdHJ1Y3QgQ3VycmVudFRo
cmVhZFN0YXRlOwogCkBAIC0xODQsOCArMTg1LDYgQEAgcHVibGljOgogICAgIAogICAgIGJvb2wg
aXNTaHV0dGluZ0Rvd24oKSBjb25zdCB7IHJldHVybiBtX2lzU2h1dHRpbmdEb3duOyB9CiAKLSAg
ICBKU19FWFBPUlRfUFJJVkFURSBib29sIGlzQW5hbHl6aW5nSGVhcCgpIGNvbnN0OwotCiAgICAg
SlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBzd2VlcFN5bmNocm9ub3VzbHkoKTsKIAogICAgIGJvb2wg
c2hvdWxkQ29sbGVjdEhldXJpc3RpYygpOwpAQCAtMzg1LDggKzM4NCw2IEBAIHB1YmxpYzoKICAg
ICAKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGFkZE1hcmtpbmdDb25zdHJhaW50KHN0ZDo6
dW5pcXVlX3B0cjxNYXJraW5nQ29uc3RyYWludD4pOwogICAgIAotICAgIHNpemVfdCBudW1PcGFx
dWVSb290cygpIGNvbnN0IHsgcmV0dXJuIG1fb3BhcXVlUm9vdHMuc2l6ZSgpOyB9Ci0KICAgICBI
ZWFwVmVyaWZpZXIqIHZlcmlmaWVyKCkgY29uc3QgeyByZXR1cm4gbV92ZXJpZmllci5nZXQoKTsg
fQogICAgIAogICAgIHZvaWQgYWRkSGVhcEZpbmFsaXplckNhbGxiYWNrKGNvbnN0IEhlYXBGaW5h
bGl6ZXJDYWxsYmFjayYpOwpAQCAtNDA3LDYgKzQwNCw4IEBAIHB1YmxpYzoKIAogICAgIEhhc2hN
YXA8SlNJbW11dGFibGVCdXR0ZXJmbHkqLCBKU1N0cmluZyo+IGltbXV0YWJsZUJ1dHRlcmZseVRv
U3RyaW5nQ2FjaGU7CiAKKyAgICBib29sIGlzTWFya2luZ0ZvckdDVmVyaWZpZXIoKSBjb25zdCB7
IHJldHVybiBtX2lzTWFya2luZ0ZvckdDVmVyaWZpZXI7IH0KKwogcHJpdmF0ZToKICAgICBmcmll
bmQgY2xhc3MgQWxsb2NhdGluZ1Njb3BlOwogICAgIGZyaWVuZCBjbGFzcyBDb2RlQmxvY2s7CkBA
IC01NzUsMTEgKzU3NCwxMSBAQCBwcml2YXRlOgogCiAgICAgYm9vbCBvdmVyQ3JpdGljYWxNZW1v
cnlUaHJlc2hvbGQoTWVtb3J5VGhyZXNob2xkQ2FsbFR5cGUgbWVtb3J5VGhyZXNob2xkQ2FsbFR5
cGUgPSBNZW1vcnlUaHJlc2hvbGRDYWxsVHlwZTo6Q2FjaGVkKTsKICAgICAKLSAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBGdW5jPgotICAgIHZvaWQgaXRlcmF0ZUV4ZWN1dGluZ0FuZENvbXBpbGluZ0Nv
ZGVCbG9ja3MoY29uc3QgRnVuYyYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmMsIHR5cGVu
YW1lIFZpc2l0b3I+CisgICAgdm9pZCBpdGVyYXRlRXhlY3V0aW5nQW5kQ29tcGlsaW5nQ29kZUJs
b2NrcyhWaXNpdG9yJiwgY29uc3QgRnVuYyYpOwogICAgIAotICAgIHRlbXBsYXRlPHR5cGVuYW1l
IEZ1bmM+Ci0gICAgdm9pZCBpdGVyYXRlRXhlY3V0aW5nQW5kQ29tcGlsaW5nQ29kZUJsb2Nrc1dp
dGhvdXRIb2xkaW5nTG9ja3MoY29uc3QgRnVuYyYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1
bmMsIHR5cGVuYW1lIFZpc2l0b3I+CisgICAgdm9pZCBpdGVyYXRlRXhlY3V0aW5nQW5kQ29tcGls
aW5nQ29kZUJsb2Nrc1dpdGhvdXRIb2xkaW5nTG9ja3MoVmlzaXRvciYsIGNvbnN0IEZ1bmMmKTsK
ICAgICAKICAgICB2b2lkIGFzc2VydE1hcmtTdGFja3NFbXB0eSgpOwogCkBAIC01OTAsNiArNTg5
LDggQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgYm9vbCB1c2VHZW5lcmF0aW9uYWxHQygpOwogICAg
IHN0YXRpYyBib29sIHNob3VsZFN3ZWVwU3luY2hyb25vdXNseSgpOwogICAgIAorICAgIHZvaWQg
dmVyaWZ5R0MoKTsKKwogICAgIGNvbnN0IEhlYXBUeXBlIG1faGVhcFR5cGU7CiAgICAgTXV0YXRv
clN0YXRlIG1fbXV0YXRvclN0YXRlIHsgTXV0YXRvclN0YXRlOjpSdW5uaW5nIH07CiAgICAgY29u
c3Qgc2l6ZV90IG1fcmFtU2l6ZTsKQEAgLTYzNiw2ICs2MzcsNyBAQCBwcml2YXRlOgogICAgIHN0
ZDo6dW5pcXVlX3B0cjxNYXJrU3RhY2tBcnJheT4gbV9tdXRhdG9yTWFya1N0YWNrOwogICAgIHN0
ZDo6dW5pcXVlX3B0cjxNYXJrU3RhY2tBcnJheT4gbV9yYWNlTWFya1N0YWNrOwogICAgIHN0ZDo6
dW5pcXVlX3B0cjxNYXJraW5nQ29uc3RyYWludFNldD4gbV9jb25zdHJhaW50U2V0OworICAgIHN0
ZDo6dW5pcXVlX3B0cjxWZXJpZmllclNsb3RWaXNpdG9yPiBtX3ZlcmlmaWVyU2xvdFZpc2l0b3I7
CiAKICAgICAvLyBXZSBwb29sIHRoZSBzbG90IHZpc2l0b3JzIHVzZWQgYnkgcGFyYWxsZWwgbWFy
a2luZyB0aHJlYWRzLiBJdCdzIHVzZWZ1bCB0byBiZSBhYmxlIHRvCiAgICAgLy8gZW51bWVyYXRl
IG92ZXIgdGhlbSwgYW5kIGl0J3MgdXNlZnVsIHRvIGhhdmUgdGhlbSBjYWNoZSBzb21lIHNtYWxs
IGFtb3VudCBvZiBtZW1vcnkgZnJvbQpAQCAtNjU0LDYgKzY1Niw3IEBAIHByaXZhdGU6CiAgICAg
Ym9vbCBtX2lzU2FmZVRvQ29sbGVjdCB7IGZhbHNlIH07CiAgICAgYm9vbCBtX2lzU2h1dHRpbmdE
b3duIHsgZmFsc2UgfTsKICAgICBib29sIG1fbXV0YXRvclNob3VsZEJlRmVuY2VkIHsgT3B0aW9u
czo6Zm9yY2VGZW5jZWRCYXJyaWVyKCkgfTsKKyAgICBib29sIG1faXNNYXJraW5nRm9yR0NWZXJp
ZmllciB7IGZhbHNlIH07CiAKICAgICB1bnNpZ25lZCBtX2JhcnJpZXJUaHJlc2hvbGQgeyBPcHRp
b25zOjpmb3JjZUZlbmNlZEJhcnJpZXIoKSA/IHRhdXRvbG9naWNhbFRocmVzaG9sZCA6IGJsYWNr
VGhyZXNob2xkIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBJbmxp
bmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcElubGlu
ZXMuaAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVh
cElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNjksNiArNjksOCBAQCBpbmxpbmUgYm9vbCBI
ZWFwOjp3b3JsZElzU3RvcHBlZCgpIGNvbnN0CiAKIEFMV0FZU19JTkxJTkUgYm9vbCBIZWFwOjpp
c01hcmtlZChjb25zdCB2b2lkKiByYXdDZWxsKQogeworICAgIEFTU0VSVCghbV9pc01hcmtpbmdG
b3JHQ1ZlcmlmaWVyKTsKKy8vICAgIFJFTEVBU0VfQVNTRVJUKCFtX2lzTWFya2luZ0ZvckdDVmVy
aWZpZXIpOyAvLyBtbGFtIFRFU1Qgb25seQogICAgIEhlYXBDZWxsKiBjZWxsID0gYml0d2lzZV9j
YXN0PEhlYXBDZWxsKj4ocmF3Q2VsbCk7CiAgICAgaWYgKGNlbGwtPmlzUHJlY2lzZUFsbG9jYXRp
b24oKSkKICAgICAgICAgcmV0dXJuIGNlbGwtPnByZWNpc2VBbGxvY2F0aW9uKCkuaXNNYXJrZWQo
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBQcm9maWxlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcFByb2ZpbGVyLmNwcAko
cmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcFByb2Zp
bGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC02MCw2ICs2MCw3IEBAIHZvaWQgSGVhcFByb2ZpbGVyOjpz
ZXRBY3RpdmVIZWFwQW5hbHl6ZXIKIHsKICAgICBBU1NFUlQoISFtX2FjdGl2ZUFuYWx5emVyICE9
ICEhYW5hbHl6ZXIpOwogICAgIG1fYWN0aXZlQW5hbHl6ZXIgPSBhbmFseXplcjsKKyAgICBtX3Zt
LnNldEFjdGl2ZUhlYXBBbmFseXplcihhbmFseXplcik7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpT
QwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvQ2VsbFNldC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0lzb0NlbGxTZXQuaAkocmV2aXNpb24g
MjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvQ2VsbFNldC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTM0LDYgKzM0LDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKK2NsYXNzIEFic3Ry
YWN0U2xvdFZpc2l0b3I7CiBjbGFzcyBIZWFwQ2VsbDsKIGNsYXNzIElzb1N1YnNwYWNlOwogCkBA
IC01OCw4ICs1OSw4IEBAIHB1YmxpYzoKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgogICAg
IHZvaWQgZm9yRWFjaE1hcmtlZENlbGwoY29uc3QgRnVuYyYpOwogCi0gICAgdGVtcGxhdGU8dHlw
ZW5hbWUgRnVuYz4KLSAgICBSZWY8U2hhcmVkVGFzazx2b2lkKFNsb3RWaXNpdG9yJik+PiBmb3JF
YWNoTWFya2VkQ2VsbEluUGFyYWxsZWwoY29uc3QgRnVuYyYpOworICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFZpc2l0b3IsIHR5cGVuYW1lIEZ1bmM+CisgICAgUmVmPFNoYXJlZFRhc2s8dm9pZChWaXNp
dG9yJik+PiBmb3JFYWNoTWFya2VkQ2VsbEluUGFyYWxsZWwoY29uc3QgRnVuYyYpOwogICAgIAog
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CiAgICAgdm9pZCBmb3JFYWNoTGl2ZUNlbGwoY29u
c3QgRnVuYyYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvQ2VsbFNldElu
bGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Jc29DZWxs
U2V0SW5saW5lcy5oCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9Jc29DZWxsU2V0SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTkxLDEwICs5MSwxMCBAQCB2
b2lkIElzb0NlbGxTZXQ6OmZvckVhY2hNYXJrZWRDZWxsKGNvbnN0CiAgICAgICAgIH0pOwogfQog
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgotUmVmPFNoYXJlZFRhc2s8dm9pZChTbG90VmlzaXRv
ciYpPj4gSXNvQ2VsbFNldDo6Zm9yRWFjaE1hcmtlZENlbGxJblBhcmFsbGVsKGNvbnN0IEZ1bmMm
IGZ1bmMpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yLCB0eXBlbmFtZSBGdW5jPgorUmVmPFNo
YXJlZFRhc2s8dm9pZChWaXNpdG9yJik+PiBJc29DZWxsU2V0Ojpmb3JFYWNoTWFya2VkQ2VsbElu
UGFyYWxsZWwoY29uc3QgRnVuYyYgZnVuYykKIHsKLSAgICBjbGFzcyBUYXNrIGZpbmFsIDogcHVi
bGljIFNoYXJlZFRhc2s8dm9pZChTbG90VmlzaXRvciYpPiB7CisgICAgY2xhc3MgVGFzayBmaW5h
bCA6IHB1YmxpYyBTaGFyZWRUYXNrPHZvaWQoVmlzaXRvciYpPiB7CiAgICAgcHVibGljOgogICAg
ICAgICBUYXNrKElzb0NlbGxTZXQmIHNldCwgY29uc3QgRnVuYyYgZnVuYykKICAgICAgICAgICAg
IDogbV9zZXQoc2V0KQpAQCAtMTAzLDcgKzEwMyw3IEBAIFJlZjxTaGFyZWRUYXNrPHZvaWQoU2xv
dFZpc2l0b3ImKT4+IElzb0MKICAgICAgICAgewogICAgICAgICB9CiAgICAgICAgIAotICAgICAg
ICB2b2lkIHJ1bihTbG90VmlzaXRvciYgdmlzaXRvcikgZmluYWwKKyAgICAgICAgdm9pZCBydW4o
VmlzaXRvciYgdmlzaXRvcikgZmluYWwKICAgICAgICAgewogICAgICAgICAgICAgd2hpbGUgKE1h
cmtlZEJsb2NrOjpIYW5kbGUqIGhhbmRsZSA9IG1fYmxvY2tTb3VyY2UtPnJ1bigpKSB7CiAgICAg
ICAgICAgICAgICAgdW5zaWduZWQgYmxvY2tJbmRleCA9IGhhbmRsZS0+aW5kZXgoKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0pJVFN0dWJSb3V0aW5lU2V0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9KSVRTdHViUm91dGluZVNldC5jcHAJ
KHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0pJVFN0dWJS
b3V0aW5lU2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEyLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMjgsNyArMTI4LDggQEAgdm9pZCBKSVRTdHVi
Um91dGluZVNldDo6ZGVsZXRlVW5tYXJrZWRKZQogICAgIG1fcm91dGluZXMuc2hyaW5rKGRzdElu
ZGV4KTsKIH0KIAotdm9pZCBKSVRTdHViUm91dGluZVNldDo6dHJhY2VNYXJrZWRTdHViUm91dGlu
ZXMoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9p
ZCBKSVRTdHViUm91dGluZVNldDo6dHJhY2VNYXJrZWRTdHViUm91dGluZXMoVmlzaXRvciYgdmlz
aXRvcikKIHsKICAgICBmb3IgKGF1dG8mIGVudHJ5IDogbV9yb3V0aW5lcykgewogICAgICAgICBH
Q0F3YXJlSklUU3R1YlJvdXRpbmUqIHJvdXRpbmUgPSBlbnRyeS5yb3V0aW5lOwpAQCAtMTM5LDYg
KzE0MCw5IEBAIHZvaWQgSklUU3R1YlJvdXRpbmVTZXQ6OnRyYWNlTWFya2VkU3R1YlIKICAgICB9
CiB9CiAKK3RlbXBsYXRlIHZvaWQgSklUU3R1YlJvdXRpbmVTZXQ6OnRyYWNlTWFya2VkU3R1YlJv
dXRpbmVzKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSklUU3R1YlJvdXRp
bmVTZXQ6OnRyYWNlTWFya2VkU3R1YlJvdXRpbmVzKFNsb3RWaXNpdG9yJik7CisKIH0gLy8gbmFt
ZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0pJVFN0dWJSb3V0aW5lU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvSklUU3R1YlJvdXRpbmVTZXQuaAkocmV2aXNpb24gMjcyOTAyKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSklUU3R1YlJvdXRpbmVTZXQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxOCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTM1LDggKzM1LDggQEAgdXNpbmcgV1RGOjpSYW5nZTsKIAogbmFtZXNwYWNl
IEpTQyB7CiAKK2NsYXNzIEFic3RyYWN0U2xvdFZpc2l0b3I7CiBjbGFzcyBHQ0F3YXJlSklUU3R1
YlJvdXRpbmU7Ci1jbGFzcyBTbG90VmlzaXRvcjsKIAogI2lmIEVOQUJMRShKSVQpCiAKQEAgLTYz
LDggKzYzLDggQEAgcHVibGljOgogICAgIHZvaWQgcHJlcGFyZUZvckNvbnNlcnZhdGl2ZVNjYW4o
KTsKICAgICAKICAgICB2b2lkIGRlbGV0ZVVubWFya2VkSmV0dGlzb25lZFN0dWJSb3V0aW5lcygp
OwotICAgIAotICAgIHZvaWQgdHJhY2VNYXJrZWRTdHViUm91dGluZXMoU2xvdFZpc2l0b3ImKTsK
KworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgdHJhY2VNYXJrZWRTdHViUm91
dGluZXMoVmlzaXRvciYpOwogICAgIAogcHJpdmF0ZToKICAgICB2b2lkIG1hcmtTbG93KHVpbnRw
dHJfdCBhZGRyZXNzKTsKQEAgLTkyLDcgKzkyLDcgQEAgcHVibGljOgogICAgIHZvaWQgbWFyayh2
b2lkKikgeyB9CiAgICAgdm9pZCBwcmVwYXJlRm9yQ29uc2VydmF0aXZlU2NhbigpIHsgfQogICAg
IHZvaWQgZGVsZXRlVW5tYXJrZWRKZXR0aXNvbmVkU3R1YlJvdXRpbmVzKCkgeyB9Ci0gICAgdm9p
ZCB0cmFjZU1hcmtlZFN0dWJSb3V0aW5lcyhTbG90VmlzaXRvciYpIHsgfQorICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgdHJhY2VNYXJrZWRTdHViUm91dGluZXMoVmlzaXRvciYp
IHsgfQogfTsKIAogI2VuZGlmIC8vICFFTkFCTEUoSklUKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtTdGFja01lcmdpbmdDb25zdHJhaW50LmNw
cAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya1N0
YWNrTWVyZ2luZ0NvbnN0cmFpbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI1LDcgKzI1LDYgQEAKIAog
I2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIk1hcmtTdGFja01lcmdpbmdDb25zdHJhaW50
LmgiCi0KICNpbmNsdWRlICJHQ1NlZ21lbnRlZEFycmF5SW5saW5lcy5oIgogI2luY2x1ZGUgIkpT
Q0lubGluZXMuaCIKIApAQCAtNDYsNyArNDUsNyBAQCBkb3VibGUgTWFya1N0YWNrTWVyZ2luZ0Nv
bnN0cmFpbnQ6OnF1aWNrCiAgICAgcmV0dXJuIG1faGVhcC5tX211dGF0b3JNYXJrU3RhY2stPnNp
emUoKSArIG1faGVhcC5tX3JhY2VNYXJrU3RhY2stPnNpemUoKTsKIH0KIAotdm9pZCBNYXJrU3Rh
Y2tNZXJnaW5nQ29uc3RyYWludDo6cHJlcGFyZVRvRXhlY3V0ZUltcGwoY29uc3QgQWJzdHJhY3RM
b2NrZXImLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgTWFya1N0YWNrTWVyZ2luZ0NvbnN0
cmFpbnQ6OnByZXBhcmVUb0V4ZWN1dGVJbXBsKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgQWJzdHJh
Y3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICAvLyBMb2dnaW5nIHRoZSB3b3JrIGhlcmUg
ZW5zdXJlcyB0aGF0IHRoZSBjb25zdHJhaW50IHNvbHZlciBrbm93cyB0aGF0IGl0IGRvZXNuJ3Qg
bmVlZCB0byBwcm9kdWNlCiAgICAgLy8gYW55bW9yZSB3b3JrLgpAQCAtNTYsMTEgKzU1LDI0IEBA
IHZvaWQgTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQ6OnByZXBhcmUKICAgICBkYXRhTG9nSWYo
T3B0aW9uczo6bG9nR0MoKSwgIigiLCBzaXplLCAiKSIpOwogfQogCi12b2lkIE1hcmtTdGFja01l
cmdpbmdDb25zdHJhaW50OjpleGVjdXRlSW1wbChTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBs
YXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIE1hcmtTdGFja01lcmdpbmdDb25zdHJhaW50Ojpl
eGVjdXRlSW1wbEltcGwoVmlzaXRvciYgdmlzaXRvcikKIHsKKyAgICAvLyBXZSB3YW50IHRvIHNr
aXAgdGhpcyBjb25zdHJhaW50IGZvciB0aGUgR0MgdmVyaWZpZXIgYmVjYXVzZToKKyAgICAvLyAx
LiBUaGVyZSBzaG91bGQgYmUgbm8gbXV0YXRvciBtYXJraW5nIGFjdGlvbiBiZXR3ZWVuIHRoZSBF
bmQgcGhhc2UgYW5kIHZlcmlmeUdDKCkuCisgICAgLy8gICAgSGVuY2UsIHdlIGNhbiBpZ25vcmUg
dGhzZSBzdGFja3MuCisgICAgLy8gMi4gVGhlIEVuZCBwaGFzZSBleHBsaWN0bHkgY2FsbHMgaXRl
cmF0ZUV4ZWN1dGluZ0FuZENvbXBpbGluZ0NvZGVCbG9ja3MoKQorICAgIC8vICAgIHRvIGFkZCBl
eGVjdXRpbmcgQ29kZUJsb2NrcyB0byBtX2hlYXAubV9tdXRhdG9yTWFya1N0YWNrLiBXZSB3YW50
IHRvCisgICAgLy8gICAgbGVhdmUgdGhvc2UgdW5wZXJ0dXJiZWQuCisgICAgaWYgKG1faGVhcC5t
X2lzTWFya2luZ0ZvckdDVmVyaWZpZXIpCisgICAgICAgIHJldHVybjsKKwogICAgIG1faGVhcC5t
X211dGF0b3JNYXJrU3RhY2stPnRyYW5zZmVyVG8odmlzaXRvci5tdXRhdG9yTWFya1N0YWNrKCkp
OwogICAgIG1faGVhcC5tX3JhY2VNYXJrU3RhY2stPnRyYW5zZmVyVG8odmlzaXRvci5tdXRhdG9y
TWFya1N0YWNrKCkpOwogfQogCit2b2lkIE1hcmtTdGFja01lcmdpbmdDb25zdHJhaW50OjpleGVj
dXRlSW1wbChBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKSB7IGV4ZWN1dGVJbXBsSW1wbCh2
aXNpdG9yKTsgfQordm9pZCBNYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludDo6ZXhlY3V0ZUltcGwo
U2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsgZXhlY3V0ZUltcGxJbXBsKHZpc2l0b3IpOyB9CisKIH0g
Ly8gbmFtZXNwYWNlIEpTQwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJr
U3RhY2tNZXJnaW5nQ29uc3RyYWludC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL01hcmtTdGFja01lcmdpbmdDb25zdHJhaW50LmgJKHJldmlzaW9uIDI3MjkwMikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtTdGFja01lcmdpbmdDb25zdHJhaW50
LmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKIG5hbWVzcGFjZSBKU0MgewogCiBj
bGFzcyBIZWFwOworY2xhc3MgQWJzdHJhY3RTbG90VmlzaXRvcjsKIGNsYXNzIFNsb3RWaXNpdG9y
OwogCiBjbGFzcyBNYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludCBmaW5hbCA6IHB1YmxpYyBNYXJr
aW5nQ29uc3RyYWludCB7CkBAIC00MCw3ICs0MSw5IEBAIHB1YmxpYzoKICAgICBkb3VibGUgcXVp
Y2tXb3JrRXN0aW1hdGUoU2xvdFZpc2l0b3ImKSBmaW5hbDsKICAgICAKIHByaXZhdGU6Ci0gICAg
dm9pZCBwcmVwYXJlVG9FeGVjdXRlSW1wbChjb25zdCBBYnN0cmFjdExvY2tlciYgY29uc3RyYWlu
dFNvbHZpbmdMb2NrZXIsIFNsb3RWaXNpdG9yJikgZmluYWw7CisgICAgdm9pZCBwcmVwYXJlVG9F
eGVjdXRlSW1wbChjb25zdCBBYnN0cmFjdExvY2tlciYgY29uc3RyYWludFNvbHZpbmdMb2NrZXIs
IEFic3RyYWN0U2xvdFZpc2l0b3ImKSBmaW5hbDsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNp
dG9yPiBBTFdBWVNfSU5MSU5FIHZvaWQgZXhlY3V0ZUltcGxJbXBsKFZpc2l0b3ImKTsKKyAgICB2
b2lkIGV4ZWN1dGVJbXBsKEFic3RyYWN0U2xvdFZpc2l0b3ImKSBmaW5hbDsKICAgICB2b2lkIGV4
ZWN1dGVJbXBsKFNsb3RWaXNpdG9yJikgZmluYWw7CiAgICAgCiAgICAgSGVhcCYgbV9oZWFwOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5oCShyZXZpc2lvbiAy
NzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMDAsNiArMjAwLDcgQEAgcHVibGljOgogICAgICAgICAKICAgICAgICAg
dm9pZCogc3RhcnQoKSBjb25zdCB7IHJldHVybiAmbV9ibG9jay0+YXRvbXMoKVswXTsgfQogICAg
ICAgICB2b2lkKiBlbmQoKSBjb25zdCB7IHJldHVybiAmbV9ibG9jay0+YXRvbXMoKVttX2VuZEF0
b21dOyB9CisgICAgICAgIHZvaWQqIGF0b21BdChzaXplX3QgaSkgY29uc3QgeyByZXR1cm4gJm1f
YmxvY2stPmF0b21zKClbaV07IH0KICAgICAgICAgYm9vbCBjb250YWlucyh2b2lkKiBwKSBjb25z
dCB7IHJldHVybiBzdGFydCgpIDw9IHAgJiYgcCA8IGVuZCgpOyB9CiAKICAgICAgICAgdm9pZCBk
dW1wU3RhdGUoUHJpbnRTdHJlYW0mKTsKQEAgLTI5NSw5ICsyOTYsMTAgQEAgcHVibGljOgogCiAg
ICAgICAgIEJpdG1hcDxhdG9tc1BlckJsb2NrPiBtX21hcmtzOwogICAgICAgICBCaXRtYXA8YXRv
bXNQZXJCbG9jaz4gbV9uZXdseUFsbG9jYXRlZDsKKyAgICAgICAgdm9pZCogbV92ZXJpZmllck1l
bW8geyBudWxscHRyIH07CiAgICAgfTsKICAgICAKLXByaXZhdGU6ICAgIAorcHJpdmF0ZToKICAg
ICBGb290ZXImIGZvb3RlcigpOwogICAgIGNvbnN0IEZvb3RlciYgZm9vdGVyKCkgY29uc3Q7CiAK
QEAgLTM4NCw3ICszODYsMTEgQEAgcHVibGljOgogICAgICAgICAqYml0d2lzZV9jYXN0PHZvbGF0
aWxlIHVpbnQ4X3QqPigmZm9vdGVyKCkpOwogICAgIH0KICAgICAKKyAgICB2b2lkIHNldFZlcmlm
aWVyTWVtbyh2b2lkKik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gVCB2ZXJpZmllck1lbW8o
KSBjb25zdDsKKwogICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IG9mZnNldE9mRm9vdGVyID0g
ZW5kQXRvbSAqIGF0b21TaXplOworICAgIHN0YXRpY19hc3NlcnQob2Zmc2V0T2ZGb290ZXIgKyBz
aXplb2YoRm9vdGVyKSA8PSBibG9ja1NpemUpOwogCiBwcml2YXRlOgogICAgIE1hcmtlZEJsb2Nr
KFZNJiwgSGFuZGxlJik7CkBAIC02NjAsNiArNjY2LDE3IEBAIGlubGluZSB2b2lkIE1hcmtlZEJs
b2NrOjpub3RlTWFya2VkKCkKICAgICAgICAgbm90ZU1hcmtlZFNsb3coKTsKIH0KIAoraW5saW5l
IHZvaWQgTWFya2VkQmxvY2s6OnNldFZlcmlmaWVyTWVtbyh2b2lkKiBwKQoreworICAgIGZvb3Rl
cigpLm1fdmVyaWZpZXJNZW1vID0gcDsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK1QgTWFy
a2VkQmxvY2s6OnZlcmlmaWVyTWVtbygpIGNvbnN0Cit7CisgICAgcmV0dXJuIGJpdHdpc2VfY2Fz
dDxUPihmb290ZXIoKS5tX3ZlcmlmaWVyTWVtbyk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwog
CiBuYW1lc3BhY2UgV1RGIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtl
ZFNwYWNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJr
ZWRTcGFjZS5jcHAJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL01hcmtlZFNwYWNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcyLDcgKzI3Miw4IEBAIHZv
aWQgTWFya2VkU3BhY2U6OmVuYWJsZVByZWNpc2VBbGxvY2F0aW8KICAgICAgICAgbV9wcmVjaXNl
QWxsb2NhdGlvblNldC0+YWRkKGFsbG9jYXRpb24tPmNlbGwoKSk7CiB9CiAKLXZvaWQgTWFya2Vk
U3BhY2U6OnZpc2l0V2Vha1NldHMoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBl
bmFtZSBWaXNpdG9yPgordm9pZCBNYXJrZWRTcGFjZTo6dmlzaXRXZWFrU2V0cyhWaXNpdG9yJiB2
aXNpdG9yKQogewogICAgIGF1dG8gdmlzaXQgPSBbJl0gKFdlYWtTZXQqIHdlYWtTZXQpIHsKICAg
ICAgICAgd2Vha1NldC0+dmlzaXQodmlzaXRvcik7CkBAIC0yODQsNiArMjg1LDkgQEAgdm9pZCBN
YXJrZWRTcGFjZTo6dmlzaXRXZWFrU2V0cyhTbG90VmlzaQogICAgICAgICBtX2FjdGl2ZVdlYWtT
ZXRzLmZvckVhY2godmlzaXQpOwogfQogCit0ZW1wbGF0ZSB2b2lkIE1hcmtlZFNwYWNlOjp2aXNp
dFdlYWtTZXRzKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgTWFya2VkU3Bh
Y2U6OnZpc2l0V2Vha1NldHMoU2xvdFZpc2l0b3ImKTsKKwogdm9pZCBNYXJrZWRTcGFjZTo6cmVh
cFdlYWtTZXRzKCkKIHsKICAgICBhdXRvIHZpc2l0ID0gWyZdIChXZWFrU2V0KiB3ZWFrU2V0KSB7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRTcGFjZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZFNwYWNlLmgJKHJldmlzaW9u
IDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZFNwYWNlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNyArMSw3IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMTk5OS0y
MDAwIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCiAgKiAgQ29weXJpZ2h0IChDKSAyMDAx
IFBldGVyIEtlbGx5IChwbWtAcG9zdC5jb20pCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMTgg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwMy0y
MDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMK
QEAgLTM3LDYgKzM3LDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKK2NsYXNzIEFic3RyYWN0U2xv
dFZpc2l0b3I7CiBjbGFzcyBDb21wbGV0ZVN1YnNwYWNlOwogY2xhc3MgSGVhcDsKIGNsYXNzIEhl
YXBDZWxsOwpAQCAtMTA1LDcgKzEwNiw3IEBAIHB1YmxpYzoKICAgICAKICAgICB2b2lkIHByZXBh
cmVGb3JBbGxvY2F0aW9uKCk7CiAKLSAgICB2b2lkIHZpc2l0V2Vha1NldHMoU2xvdFZpc2l0b3Im
KTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIHZpc2l0V2Vha1NldHMoVmlz
aXRvciYpOwogICAgIHZvaWQgcmVhcFdlYWtTZXRzKCk7CiAKICAgICBNYXJrZWRCbG9ja1NldCYg
YmxvY2tzKCkgeyByZXR1cm4gbV9ibG9ja3M7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL01hcmtpbmdDb25zdHJhaW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludC5jcHAJKHJldmlzaW9uIDI3MjkwMikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiTWFy
a2luZ0NvbnN0cmFpbnQuaCIKIAorI2luY2x1ZGUgIkFic3RyYWN0U2xvdFZpc2l0b3JJbmxpbmVz
LmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIlZpc2l0Q291bnRlci5oIgog
CkBAIC01Myw2ICs1NCw3IEBAIHZvaWQgTWFya2luZ0NvbnN0cmFpbnQ6OnJlc2V0U3RhdHMoKQog
CiB2b2lkIE1hcmtpbmdDb25zdHJhaW50OjpleGVjdXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQog
eworICAgIEFTU0VSVCghdmlzaXRvci5oZWFwKCktPmlzTWFya2luZ0ZvckdDVmVyaWZpZXIoKSk7
CiAgICAgVmlzaXRDb3VudGVyIHZpc2l0Q291bnRlcih2aXNpdG9yKTsKICAgICBleGVjdXRlSW1w
bCh2aXNpdG9yKTsKICAgICBtX2xhc3RWaXNpdENvdW50ICs9IHZpc2l0Q291bnRlci52aXNpdENv
dW50KCk7CkBAIC02MCw2ICs2MiwxMiBAQCB2b2lkIE1hcmtpbmdDb25zdHJhaW50OjpleGVjdXRl
KFNsb3RWaXNpCiAgICAgICAgIGRhdGFMb2coIigiLCBhYmJyZXZpYXRlZE5hbWUoKSwgIiB2aXNp
dGVkICIsIHZpc2l0Q291bnRlci52aXNpdENvdW50KCksICIgaW4gZXhlY3V0ZSkiKTsKIH0KIAor
dm9pZCBNYXJraW5nQ29uc3RyYWludDo6ZXhlY3V0ZVN5bmNocm9ub3VzbHkoQWJzdHJhY3RTbG90
VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBwcmVwYXJlVG9FeGVjdXRlSW1wbChOb0xvY2tpbmdO
ZWNlc3NhcnksIHZpc2l0b3IpOworICAgIGV4ZWN1dGVJbXBsKHZpc2l0b3IpOworfQorCiBkb3Vi
bGUgTWFya2luZ0NvbnN0cmFpbnQ6OnF1aWNrV29ya0VzdGltYXRlKFNsb3RWaXNpdG9yJikKIHsK
ICAgICByZXR1cm4gMDsKQEAgLTcyLDYgKzgwLDcgQEAgZG91YmxlIE1hcmtpbmdDb25zdHJhaW50
Ojp3b3JrRXN0aW1hdGUoUwogCiB2b2lkIE1hcmtpbmdDb25zdHJhaW50OjpwcmVwYXJlVG9FeGVj
dXRlKGNvbnN0IEFic3RyYWN0TG9ja2VyJiBjb25zdHJhaW50U29sdmluZ0xvY2tlciwgU2xvdFZp
c2l0b3ImIHZpc2l0b3IpCiB7CisgICAgQVNTRVJUKCF2aXNpdG9yLmhlYXAoKS0+aXNNYXJraW5n
Rm9yR0NWZXJpZmllcigpKTsKICAgICBkYXRhTG9nSWYoT3B0aW9uczo6bG9nR0MoKSwgYWJicmV2
aWF0ZWROYW1lKCkpOwogICAgIFZpc2l0Q291bnRlciB2aXNpdENvdW50ZXIodmlzaXRvcik7CiAg
ICAgcHJlcGFyZVRvRXhlY3V0ZUltcGwoY29uc3RyYWludFNvbHZpbmdMb2NrZXIsIHZpc2l0b3Ip
OwpAQCAtODIsNiArOTEsNyBAQCB2b2lkIE1hcmtpbmdDb25zdHJhaW50OjpwcmVwYXJlVG9FeGVj
dXRlCiAKIHZvaWQgTWFya2luZ0NvbnN0cmFpbnQ6OmRvUGFyYWxsZWxXb3JrKFNsb3RWaXNpdG9y
JiB2aXNpdG9yLCBTaGFyZWRUYXNrPHZvaWQoU2xvdFZpc2l0b3ImKT4mIHRhc2spCiB7CisgICAg
QVNTRVJUKCF2aXNpdG9yLmhlYXAoKS0+aXNNYXJraW5nRm9yR0NWZXJpZmllcigpKTsKICAgICBW
aXNpdENvdW50ZXIgdmlzaXRDb3VudGVyKHZpc2l0b3IpOwogICAgIHRhc2sucnVuKHZpc2l0b3Ip
OwogICAgIGlmICh2ZXJib3NlTWFya2luZ0NvbnN0cmFpbnQgJiYgdmlzaXRDb3VudGVyLnZpc2l0
Q291bnQoKSkKQEAgLTkyLDcgKzEwMiw3IEBAIHZvaWQgTWFya2luZ0NvbnN0cmFpbnQ6OmRvUGFy
YWxsZWxXb3JrKFMKICAgICB9CiB9CiAKLXZvaWQgTWFya2luZ0NvbnN0cmFpbnQ6OnByZXBhcmVU
b0V4ZWN1dGVJbXBsKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgU2xvdFZpc2l0b3ImKQordm9pZCBN
YXJraW5nQ29uc3RyYWludDo6cHJlcGFyZVRvRXhlY3V0ZUltcGwoY29uc3QgQWJzdHJhY3RMb2Nr
ZXImLCBBYnN0cmFjdFNsb3RWaXNpdG9yJikKIHsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludC5oCShyZXZpc2lvbiAyNzI5MDIpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTM4LDYgKzM4LDcgQEAKIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBNYXJraW5nQ29u
c3RyYWludFNldDsKK2NsYXNzIEFic3RyYWN0U2xvdFZpc2l0b3I7CiBjbGFzcyBTbG90VmlzaXRv
cjsKIAogY2xhc3MgTWFya2luZ0NvbnN0cmFpbnQgewpAQCAtNjEsMTAgKzYyLDEwIEBAIHB1Ymxp
YzoKICAgICBzaXplX3QgbGFzdFZpc2l0Q291bnQoKSBjb25zdCB7IHJldHVybiBtX2xhc3RWaXNp
dENvdW50OyB9CiAgICAgCiAgICAgdm9pZCBleGVjdXRlKFNsb3RWaXNpdG9yJik7CisKKyAgICBK
U19FWFBPUlRfUFJJVkFURSB2aXJ0dWFsIGRvdWJsZSBxdWlja1dvcmtFc3RpbWF0ZShTbG90Vmlz
aXRvciYpOwogICAgIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIHZpcnR1YWwgZG91YmxlIHF1aWNr
V29ya0VzdGltYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKTsKLSAgICAKLSAgICBkb3VibGUgd29y
a0VzdGltYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKTsKKyAgICBkb3VibGUgd29ya0VzdGltYXRl
KFNsb3RWaXNpdG9yJik7CiAgICAgCiAgICAgdm9pZCBwcmVwYXJlVG9FeGVjdXRlKGNvbnN0IEFi
c3RyYWN0TG9ja2VyJiBjb25zdHJhaW50U29sdmluZ0xvY2tlciwgU2xvdFZpc2l0b3ImKTsKICAg
ICAKQEAgLTc2LDkgKzc3LDEyIEBAIHB1YmxpYzoKICAgICBDb25zdHJhaW50UGFyYWxsZWxpc20g
cGFyYWxsZWxpc20oKSBjb25zdCB7IHJldHVybiBtX3BhcmFsbGVsaXNtOyB9CiAKIHByb3RlY3Rl
ZDoKKyAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZUltcGwoQWJzdHJhY3RTbG90VmlzaXRvciYpID0g
MDsKICAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZUltcGwoU2xvdFZpc2l0b3ImKSA9IDA7Ci0gICAg
SlNfRVhQT1JUX1BSSVZBVEUgdmlydHVhbCB2b2lkIHByZXBhcmVUb0V4ZWN1dGVJbXBsKGNvbnN0
IEFic3RyYWN0TG9ja2VyJiBjb25zdHJhaW50U29sdmluZ0xvY2tlciwgU2xvdFZpc2l0b3ImKTsK
LSAgICAKKyAgICBKU19FWFBPUlRfUFJJVkFURSB2aXJ0dWFsIHZvaWQgcHJlcGFyZVRvRXhlY3V0
ZUltcGwoY29uc3QgQWJzdHJhY3RMb2NrZXImIGNvbnN0cmFpbnRTb2x2aW5nTG9ja2VyLCBBYnN0
cmFjdFNsb3RWaXNpdG9yJik7CisKKyAgICB2b2lkIGV4ZWN1dGVTeW5jaHJvbm91c2x5KEFic3Ry
YWN0U2xvdFZpc2l0b3ImKTsKKwogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgTWFya2luZ0Nv
bnN0cmFpbnRTZXQ7IC8vIFNvIGl0IGNhbiBzZXQgbV9pbmRleC4KICAgICAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50RXhlY3V0b3JQYWlyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnRF
eGVjdXRvclBhaXIuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9NYXJraW5nQ29uc3RyYWludEV4ZWN1dG9yUGFpci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsNTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHd0Zi9GdW5j
dGlvbi5oPgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgQWJzdHJhY3RTbG90VmlzaXRvcjsK
K2NsYXNzIFNsb3RWaXNpdG9yOworCitzdHJ1Y3QgTWFya2luZ0NvbnN0cmFpbnRFeGVjdXRvclBh
aXIgeworICAgIE1hcmtpbmdDb25zdHJhaW50RXhlY3V0b3JQYWlyKAorICAgICAgICA6OkZ1bmN0
aW9uPHZvaWQoQWJzdHJhY3RTbG90VmlzaXRvciYpPiBhYnN0cmFjdFNsb3RWaXNpdG9yRnVuYywK
KyAgICAgICAgOjpGdW5jdGlvbjx2b2lkKFNsb3RWaXNpdG9yJik+IHNsb3RWaXNpdG9yRnVuYykK
KyAgICAgICAgOiBhYnN0cmFjdFNsb3RWaXNpdG9yRnVuYyhXVEZNb3ZlKGFic3RyYWN0U2xvdFZp
c2l0b3JGdW5jKSkKKyAgICAgICAgLCBzbG90VmlzaXRvckZ1bmMoV1RGTW92ZShzbG90VmlzaXRv
ckZ1bmMpKQorICAgIHsgfQorICAgIE1hcmtpbmdDb25zdHJhaW50RXhlY3V0b3JQYWlyKE1hcmtp
bmdDb25zdHJhaW50RXhlY3V0b3JQYWlyJiYpID0gZGVmYXVsdDsKKworICAgIHZvaWQgZXhlY3V0
ZShBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKSB7IGFic3RyYWN0U2xvdFZpc2l0b3JGdW5j
KHZpc2l0b3IpOyB9CisgICAgdm9pZCBleGVjdXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKSB7IHNs
b3RWaXNpdG9yRnVuYyh2aXNpdG9yKTsgfQorCisgICAgOjpGdW5jdGlvbjx2b2lkKEFic3RyYWN0
U2xvdFZpc2l0b3ImKT4gYWJzdHJhY3RTbG90VmlzaXRvckZ1bmM7CisgICAgOjpGdW5jdGlvbjx2
b2lkKFNsb3RWaXNpdG9yJik+IHNsb3RWaXNpdG9yRnVuYzsKK307CisKKyNkZWZpbmUgTUFLRV9N
QVJLSU5HX0NPTlNUUkFJTlRfRVhFQ1VUT1JfUEFJUihsYW1iZGEpIFwKKyAgICBNYXJraW5nQ29u
c3RyYWludEV4ZWN1dG9yUGFpcigobGFtYmRhKSwgKGxhbWJkYSkpCisKK30gLy8gbmFtZXNwYWNl
IEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnRT
ZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdD
b25zdHJhaW50U2V0LmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnRTZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTYzLDkgKzYz
LDkgQEAgdm9pZCBNYXJraW5nQ29uc3RyYWludFNldDo6ZGlkU3RhcnRNYXJraQogICAgIG1faXRl
cmF0aW9uID0gMTsKIH0KIAotdm9pZCBNYXJraW5nQ29uc3RyYWludFNldDo6YWRkKENTdHJpbmcg
YWJicmV2aWF0ZWROYW1lLCBDU3RyaW5nIG5hbWUsIDo6RnVuY3Rpb248dm9pZChTbG90VmlzaXRv
ciYpPiBmdW5jdGlvbiwgQ29uc3RyYWludFZvbGF0aWxpdHkgdm9sYXRpbGl0eSwgQ29uc3RyYWlu
dENvbmN1cnJlbmN5IGNvbmN1cnJlbmN5LCBDb25zdHJhaW50UGFyYWxsZWxpc20gcGFyYWxsZWxp
c20pCit2b2lkIE1hcmtpbmdDb25zdHJhaW50U2V0OjphZGQoQ1N0cmluZyBhYmJyZXZpYXRlZE5h
bWUsIENTdHJpbmcgbmFtZSwgTWFya2luZ0NvbnN0cmFpbnRFeGVjdXRvclBhaXImJiBleGVjdXRv
cnMsIENvbnN0cmFpbnRWb2xhdGlsaXR5IHZvbGF0aWxpdHksIENvbnN0cmFpbnRDb25jdXJyZW5j
eSBjb25jdXJyZW5jeSwgQ29uc3RyYWludFBhcmFsbGVsaXNtIHBhcmFsbGVsaXNtKQogewotICAg
IGFkZChtYWtlVW5pcXVlPFNpbXBsZU1hcmtpbmdDb25zdHJhaW50PihXVEZNb3ZlKGFiYnJldmlh
dGVkTmFtZSksIFdURk1vdmUobmFtZSksIFdURk1vdmUoZnVuY3Rpb24pLCB2b2xhdGlsaXR5LCBj
b25jdXJyZW5jeSwgcGFyYWxsZWxpc20pKTsKKyAgICBhZGQobWFrZVVuaXF1ZTxTaW1wbGVNYXJr
aW5nQ29uc3RyYWludD4oV1RGTW92ZShhYmJyZXZpYXRlZE5hbWUpLCBXVEZNb3ZlKG5hbWUpLCBX
VEZNb3ZlKGV4ZWN1dG9ycyksIHZvbGF0aWxpdHksIGNvbmN1cnJlbmN5LCBwYXJhbGxlbGlzbSkp
OwogfQogCiB2b2lkIE1hcmtpbmdDb25zdHJhaW50U2V0OjphZGQoCkBAIC0xNjYsMTAgKzE2Niwx
MCBAQCBib29sIE1hcmtpbmdDb25zdHJhaW50U2V0OjpleGVjdXRlQ29udmVyCiAgICAgcmV0dXJu
ICFzb2x2ZXIuZGlkVmlzaXRTb21ldGhpbmcoKTsKIH0KIAotdm9pZCBNYXJraW5nQ29uc3RyYWlu
dFNldDo6ZXhlY3V0ZUFsbChTbG90VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgTWFya2luZ0NvbnN0
cmFpbnRTZXQ6OmV4ZWN1dGVBbGxTeW5jaHJvbm91c2x5KEFic3RyYWN0U2xvdFZpc2l0b3ImIHZp
c2l0b3IpCiB7CiAgICAgZm9yIChhdXRvJiBjb25zdHJhaW50IDogbV9zZXQpCi0gICAgICAgIGNv
bnN0cmFpbnQtPmV4ZWN1dGUodmlzaXRvcik7CisgICAgICAgIGNvbnN0cmFpbnQtPmV4ZWN1dGVT
eW5jaHJvbm91c2x5KHZpc2l0b3IpOwogICAgIGRhdGFMb2dJZihPcHRpb25zOjpsb2dHQygpLCAi
ICIpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3Ry
YWludFNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtp
bmdDb25zdHJhaW50U2V0LmgJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50U2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYsNiArMjYs
NyBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJNYXJraW5nQ29uc3RyYWludC5oIgorI2lu
Y2x1ZGUgIk1hcmtpbmdDb25zdHJhaW50RXhlY3V0b3JQYWlyLmgiCiAjaW5jbHVkZSA8d3RmL0Jp
dFZlY3Rvci5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIApAQCAtNDYsMTggKzQ3LDE4IEBA
IHB1YmxpYzoKICAgICB2b2lkIGFkZCgKICAgICAgICAgQ1N0cmluZyBhYmJyZXZpYXRlZE5hbWUs
CiAgICAgICAgIENTdHJpbmcgbmFtZSwKLSAgICAgICAgOjpGdW5jdGlvbjx2b2lkKFNsb3RWaXNp
dG9yJik+LAorICAgICAgICBNYXJraW5nQ29uc3RyYWludEV4ZWN1dG9yUGFpciYmLAogICAgICAg
ICBDb25zdHJhaW50Vm9sYXRpbGl0eSwKICAgICAgICAgQ29uc3RyYWludENvbmN1cnJlbmN5ID0g
Q29uc3RyYWludENvbmN1cnJlbmN5OjpDb25jdXJyZW50LAogICAgICAgICBDb25zdHJhaW50UGFy
YWxsZWxpc20gPSBDb25zdHJhaW50UGFyYWxsZWxpc206OlNlcXVlbnRpYWwpOwogICAgIAogICAg
IHZvaWQgYWRkKAogICAgICAgICBDU3RyaW5nIGFiYnJldmlhdGVkTmFtZSwgQ1N0cmluZyBuYW1l
LAotICAgICAgICA6OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3ImKT4gZnVuYywKKyAgICAgICAg
TWFya2luZ0NvbnN0cmFpbnRFeGVjdXRvclBhaXImJiBleGVjdXRvcnMsCiAgICAgICAgIENvbnN0
cmFpbnRWb2xhdGlsaXR5IHZvbGF0aWxpdHksCiAgICAgICAgIENvbnN0cmFpbnRQYXJhbGxlbGlz
bSBwYXJhbGxlbGlzbSkKICAgICB7Ci0gICAgICAgIGFkZChhYmJyZXZpYXRlZE5hbWUsIG5hbWUs
IFdURk1vdmUoZnVuYyksIHZvbGF0aWxpdHksIENvbnN0cmFpbnRDb25jdXJyZW5jeTo6Q29uY3Vy
cmVudCwgcGFyYWxsZWxpc20pOworICAgICAgICBhZGQoYWJicmV2aWF0ZWROYW1lLCBuYW1lLCBX
VEZNb3ZlKGV4ZWN1dG9ycyksIHZvbGF0aWxpdHksIENvbnN0cmFpbnRDb25jdXJyZW5jeTo6Q29u
Y3VycmVudCwgcGFyYWxsZWxpc20pOwogICAgIH0KICAgICAKICAgICB2b2lkIGFkZChzdGQ6OnVu
aXF1ZV9wdHI8TWFya2luZ0NvbnN0cmFpbnQ+KTsKQEAgLTcwLDEzICs3MSwxMyBAQCBwdWJsaWM6
CiAgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoaXMgZXhlY3V0ZWQgYWxsIGNvbnN0cmFpbnRzIGFu
ZCBub25lIG9mIHRoZW0gcHJvZHVjZWQgbmV3IHdvcmsuIFRoaXMKICAgICAvLyBhc3N1bWVzIHRo
YXQgeW91J3ZlIGFscmFlZHkgdmlzaXRlZCByb290cyBhbmQgZHJhaW5lZCBmcm9tIHRoZXJlLgog
ICAgIGJvb2wgZXhlY3V0ZUNvbnZlcmdlbmNlKFNsb3RWaXNpdG9yJik7Ci0gICAgCisKICAgICAv
LyBTaW1wbHkgcnVucyBhbGwgY29uc3RyYWludHMgd2l0aG91dCBhbnkgc2hlbmFuaWdhbnMuCi0g
ICAgdm9pZCBleGVjdXRlQWxsKFNsb3RWaXNpdG9yJik7CisgICAgdm9pZCBleGVjdXRlQWxsU3lu
Y2hyb25vdXNseShBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAgICAgCiBwcml2YXRlOgogICAgIGZy
aWVuZCBjbGFzcyBNYXJraW5nQ29uc3RyYWludFNvbHZlcjsKLSAgICAKKwogICAgIGJvb2wgZXhl
Y3V0ZUNvbnZlcmdlbmNlSW1wbChTbG90VmlzaXRvciYpOwogICAgIAogICAgIEhlYXAmIG1faGVh
cDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50U29s
dmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5n
Q29uc3RyYWludFNvbHZlci5jcHAJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50U29sdmVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludFNvbHZlci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50
U29sdmVyLmgJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L01hcmtpbmdDb25zdHJhaW50U29sdmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1NpbXBsZU1hcmtpbmdDb25zdHJhaW50LmNwcAko
cmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2ltcGxlTWFy
a2luZ0NvbnN0cmFpbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMwLDExICszMCwxMSBAQCBuYW1lc3Bh
Y2UgSlNDIHsKIAogU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQ6OlNpbXBsZU1hcmtpbmdDb25zdHJh
aW50KAogICAgIENTdHJpbmcgYWJicmV2aWF0ZWROYW1lLCBDU3RyaW5nIG5hbWUsCi0gICAgOjpG
dW5jdGlvbjx2b2lkKFNsb3RWaXNpdG9yJik+IGV4ZWN1dGVGdW5jdGlvbiwKKyAgICBNYXJraW5n
Q29uc3RyYWludEV4ZWN1dG9yUGFpciYmIGV4ZWN1dG9ycywKICAgICBDb25zdHJhaW50Vm9sYXRp
bGl0eSB2b2xhdGlsaXR5LCBDb25zdHJhaW50Q29uY3VycmVuY3kgY29uY3VycmVuY3ksCiAgICAg
Q29uc3RyYWludFBhcmFsbGVsaXNtIHBhcmFsbGVsaXNtKQogICAgIDogTWFya2luZ0NvbnN0cmFp
bnQoV1RGTW92ZShhYmJyZXZpYXRlZE5hbWUpLCBXVEZNb3ZlKG5hbWUpLCB2b2xhdGlsaXR5LCBj
b25jdXJyZW5jeSwgcGFyYWxsZWxpc20pCi0gICAgLCBtX2V4ZWN1dGVGdW5jdGlvbihXVEZNb3Zl
KGV4ZWN1dGVGdW5jdGlvbikpCisgICAgLCBtX2V4ZWN1dG9ycyhXVEZNb3ZlKGV4ZWN1dG9ycykp
CiB7CiB9CiAKQEAgLTQyLDEwICs0MiwxNCBAQCBTaW1wbGVNYXJraW5nQ29uc3RyYWludDo6flNp
bXBsZU1hcmtpbmdDCiB7CiB9CiAKLXZvaWQgU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQ6OmV4ZWN1
dGVJbXBsKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4K
K3ZvaWQgU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQ6OmV4ZWN1dGVJbXBsSW1wbChWaXNpdG9yJiB2
aXNpdG9yKQogewotICAgIG1fZXhlY3V0ZUZ1bmN0aW9uKHZpc2l0b3IpOworICAgIG1fZXhlY3V0
b3JzLmV4ZWN1dGUodmlzaXRvcik7CiB9CiAKK3ZvaWQgU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQ6
OmV4ZWN1dGVJbXBsKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsgZXhlY3V0ZUltcGxJ
bXBsKHZpc2l0b3IpOyB9Cit2b2lkIFNpbXBsZU1hcmtpbmdDb25zdHJhaW50OjpleGVjdXRlSW1w
bChTbG90VmlzaXRvciYgdmlzaXRvcikgeyBleGVjdXRlSW1wbEltcGwodmlzaXRvcik7IH0KKwog
fSAvLyBuYW1lc3BhY2UgSlNDCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Np
bXBsZU1hcmtpbmdDb25zdHJhaW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQuaAkocmV2aXNpb24gMjcyOTAyKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQuaAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0yNiw3ICsyNiw3IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIk1hcmtp
bmdDb25zdHJhaW50LmgiCi0jaW5jbHVkZSA8d3RmL0Z1bmN0aW9uLmg+CisjaW5jbHVkZSAiTWFy
a2luZ0NvbnN0cmFpbnRFeGVjdXRvclBhaXIuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAgLTM3
LDI2ICszNywyOCBAQCBjbGFzcyBTaW1wbGVNYXJraW5nQ29uc3RyYWludCBmaW5hbCA6IHB1CiBw
dWJsaWM6CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQoCiAg
ICAgICAgIENTdHJpbmcgYWJicmV2aWF0ZWROYW1lLCBDU3RyaW5nIG5hbWUsCi0gICAgICAgIDo6
RnVuY3Rpb248dm9pZChTbG90VmlzaXRvciYpPiwKKyAgICAgICAgTWFya2luZ0NvbnN0cmFpbnRF
eGVjdXRvclBhaXImJiwKICAgICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHksCiAgICAgICAgIENv
bnN0cmFpbnRDb25jdXJyZW5jeSA9IENvbnN0cmFpbnRDb25jdXJyZW5jeTo6Q29uY3VycmVudCwK
ICAgICAgICAgQ29uc3RyYWludFBhcmFsbGVsaXNtID0gQ29uc3RyYWludFBhcmFsbGVsaXNtOjpT
ZXF1ZW50aWFsKTsKICAgICAKICAgICBTaW1wbGVNYXJraW5nQ29uc3RyYWludCgKICAgICAgICAg
Q1N0cmluZyBhYmJyZXZpYXRlZE5hbWUsIENTdHJpbmcgbmFtZSwKLSAgICAgICAgOjpGdW5jdGlv
bjx2b2lkKFNsb3RWaXNpdG9yJik+IGZ1bmMsCisgICAgICAgIE1hcmtpbmdDb25zdHJhaW50RXhl
Y3V0b3JQYWlyJiYgZXhlY3V0b3JzLAogICAgICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eSB2b2xh
dGlsaXR5LAogICAgICAgICBDb25zdHJhaW50UGFyYWxsZWxpc20gcGFyYWxsZWxpc20pCi0gICAg
ICAgIDogU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQoYWJicmV2aWF0ZWROYW1lLCBuYW1lLCBXVEZN
b3ZlKGZ1bmMpLCB2b2xhdGlsaXR5LCBDb25zdHJhaW50Q29uY3VycmVuY3k6OkNvbmN1cnJlbnQs
IHBhcmFsbGVsaXNtKQorICAgICAgICA6IFNpbXBsZU1hcmtpbmdDb25zdHJhaW50KGFiYnJldmlh
dGVkTmFtZSwgbmFtZSwgV1RGTW92ZShleGVjdXRvcnMpLCB2b2xhdGlsaXR5LCBDb25zdHJhaW50
Q29uY3VycmVuY3k6OkNvbmN1cnJlbnQsIHBhcmFsbGVsaXNtKQogICAgIHsKICAgICB9CiAgICAg
CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgflNpbXBsZU1hcmtpbmdDb25zdHJhaW50KCkgZmluYWw7
CiAgICAgCiBwcml2YXRlOgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IEFMV0FZU19J
TkxJTkUgdm9pZCBleGVjdXRlSW1wbEltcGwoVmlzaXRvciYpOworICAgIHZvaWQgZXhlY3V0ZUlt
cGwoQWJzdHJhY3RTbG90VmlzaXRvciYpIGZpbmFsOwogICAgIHZvaWQgZXhlY3V0ZUltcGwoU2xv
dFZpc2l0b3ImKSBmaW5hbDsKIAotICAgIDo6RnVuY3Rpb248dm9pZChTbG90VmlzaXRvciYpPiBt
X2V4ZWN1dGVGdW5jdGlvbjsKKyAgICBNYXJraW5nQ29uc3RyYWludEV4ZWN1dG9yUGFpciBtX2V4
ZWN1dG9yczsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDIwIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
NzcsMTUgKzc3LDEwIEBAIHN0YXRpYyB2b2lkIHZhbGlkYXRlKEpTQ2VsbCogY2VsbCkKICNlbmRp
ZgogCiBTbG90VmlzaXRvcjo6U2xvdFZpc2l0b3IoSGVhcCYgaGVhcCwgQ1N0cmluZyBjb2RlTmFt
ZSkKLSAgICA6IG1fYnl0ZXNWaXNpdGVkKDApCi0gICAgLCBtX3Zpc2l0Q291bnQoMCkKLSAgICAs
IG1faXNJblBhcmFsbGVsTW9kZShmYWxzZSkKKyAgICA6IEJhc2UoaGVhcCwgY29kZU5hbWUsIGhl
YXAubV9vcGFxdWVSb290cykKICAgICAsIG1fbWFya2luZ1ZlcnNpb24oTWFya2VkU3BhY2U6Omlu
aXRpYWxWZXJzaW9uKQotICAgICwgbV9oZWFwKGhlYXApCi0gICAgLCBtX2NvZGVOYW1lKGNvZGVO
YW1lKQogI2lmIEFTU0VSVF9FTkFCTEVECiAgICAgLCBtX2lzQ2hlY2tpbmdGb3JEZWZhdWx0TWFy
a1Zpb2xhdGlvbihmYWxzZSkKLSAgICAsIG1faXNEcmFpbmluZyhmYWxzZSkKICNlbmRpZgogewog
fQpAQCAtMTE3LDggKzExMiw4IEBAIHZvaWQgU2xvdFZpc2l0b3I6OmRpZFN0YXJ0TWFya2luZygp
CiAKIHZvaWQgU2xvdFZpc2l0b3I6OnJlc2V0KCkKIHsKKyAgICBBYnN0cmFjdFNsb3RWaXNpdG9y
OjpyZXNldCgpOwogICAgIG1fYnl0ZXNWaXNpdGVkID0gMDsKLSAgICBtX3Zpc2l0Q291bnQgPSAw
OwogICAgIG1faGVhcEFuYWx5emVyID0gbnVsbHB0cjsKICAgICBSRUxFQVNFX0FTU0VSVCghbV9j
dXJyZW50Q2VsbCk7CiB9CkBAIC0yMzAsNyArMjI1LDcgQEAgdm9pZCBTbG90VmlzaXRvcjo6YXBw
ZW5kSlNDZWxsT3JBdXhpbGlhcgogdm9pZCBTbG90VmlzaXRvcjo6YXBwZW5kU2xvdyhKU0NlbGwq
IGNlbGwsIERlcGVuZGVuY3kgZGVwZW5kZW5jeSkKIHsKICAgICBpZiAoVU5MSUtFTFkobV9oZWFw
QW5hbHl6ZXIpKQotICAgICAgICBtX2hlYXBBbmFseXplci0+YW5hbHl6ZUVkZ2UobV9jdXJyZW50
Q2VsbCwgY2VsbCwgbV9yb290TWFya1JlYXNvbik7CisgICAgICAgIG1faGVhcEFuYWx5emVyLT5h
bmFseXplRWRnZShtX2N1cnJlbnRDZWxsLCBjZWxsLCByb290TWFya1JlYXNvbigpKTsKIAogICAg
IGFwcGVuZEhpZGRlblNsb3dJbXBsKGNlbGwsIGRlcGVuZGVuY3kpOwogfQpAQCAtODA3LDEyICs4
MDIsMTcgQEAgTWFya1N0YWNrQXJyYXkmIFNsb3RWaXNpdG9yOjpjb3JyZXNwb25kaQogICAgIHJl
dHVybiAqbV9oZWFwLm1fc2hhcmVkTXV0YXRvck1hcmtTdGFjazsKIH0KIAorTk9fUkVUVVJOX0RV
RV9UT19DUkFTSCB2b2lkIFNsb3RWaXNpdG9yOjphZGRQYXJhbGxlbENvbnN0cmFpbnRUYXNrKFJl
ZlB0cjxTaGFyZWRUYXNrPHZvaWQoQWJzdHJhY3RTbG90VmlzaXRvciYpPj4pCit7CisgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwogdm9pZCBTbG90VmlzaXRvcjo6YWRkUGFy
YWxsZWxDb25zdHJhaW50VGFzayhSZWZQdHI8U2hhcmVkVGFzazx2b2lkKFNsb3RWaXNpdG9yJik+
PiB0YXNrKQogewogICAgIFJFTEVBU0VfQVNTRVJUKG1fY3VycmVudFNvbHZlcik7CiAgICAgUkVM
RUFTRV9BU1NFUlQobV9jdXJyZW50Q29uc3RyYWludCk7CiAgICAgUkVMRUFTRV9BU1NFUlQodGFz
ayk7Ci0gICAgCisKICAgICBtX2N1cnJlbnRTb2x2ZXItPmFkZFBhcmFsbGVsVGFzayh0YXNrLCAq
bV9jdXJyZW50Q29uc3RyYWludCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL1Nsb3RWaXNpdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvU2xvdFZpc2l0b3IuaAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvU2xvdFZpc2l0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMjUsNTkgKzI1LDc2IEBA
CiAKICNwcmFnbWEgb25jZQogCisjaW5jbHVkZSAiQWJzdHJhY3RTbG90VmlzaXRvci5oIgogI2lu
Y2x1ZGUgIkhhbmRsZVR5cGVzLmgiCiAjaW5jbHVkZSAiSXRlcmF0aW9uU3RhdHVzLmgiCi0jaW5j
bHVkZSAiTWFya1N0YWNrLmgiCi0jaW5jbHVkZSAiUm9vdE1hcmtSZWFzb24uaCIKLSNpbmNsdWRl
ICJWaXNpdFJhY2VLZXkuaCIKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0
Zi9Nb25vdG9uaWNUaW1lLmg+Ci0jaW5jbHVkZSA8d3RmL1NoYXJlZFRhc2suaD4KLSNpbmNsdWRl
IDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCi1jbGFzcyBDb25zZXJ2
YXRpdmVSb290czsKIGNsYXNzIEdDVGhyZWFkU2hhcmVkRGF0YTsKLWNsYXNzIEhlYXA7CiBjbGFz
cyBIZWFwQ2VsbDsKIGNsYXNzIEhlYXBBbmFseXplcjsKLWNsYXNzIE1hcmtlZEJsb2NrOwogY2xh
c3MgTWFya2luZ0NvbnN0cmFpbnQ7CiBjbGFzcyBNYXJraW5nQ29uc3RyYWludFNvbHZlcjsKLXRl
bXBsYXRlPHR5cGVuYW1lIFQ+IGNsYXNzIFdlYWs7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBl
bmFtZSBUcmFpdHM+IGNsYXNzIFdyaXRlQmFycmllckJhc2U7CiAKIHR5cGVkZWYgdWludDMyX3Qg
SGVhcFZlcnNpb247CiAKLWNsYXNzIFNsb3RWaXNpdG9yIHsKK2NsYXNzIFNsb3RWaXNpdG9yIGZp
bmFsIDogcHVibGljIEFic3RyYWN0U2xvdFZpc2l0b3IgewogICAgIFdURl9NQUtFX05PTkNPUFlB
QkxFKFNsb3RWaXNpdG9yKTsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIAorICAgIHVz
aW5nIEJhc2UgPSBBYnN0cmFjdFNsb3RWaXNpdG9yOworCiAgICAgZnJpZW5kIGNsYXNzIFNldEN1
cnJlbnRDZWxsU2NvcGU7CiAgICAgZnJpZW5kIGNsYXNzIEhlYXA7CiAKIHB1YmxpYzoKKyAgICBj
bGFzcyBDb250ZXh0IHsKKyAgICBwdWJsaWM6CisgICAgICAgIEFMV0FZU19JTkxJTkUgQ29udGV4
dChBYnN0cmFjdFNsb3RWaXNpdG9yJiwgSGVhcENlbGwqKSB7IH0KKyAgICB9OworCisgICAgY2xh
c3MgU3VwcHJlc3NHQ1ZlcmlmaWVyU2NvcGUgeworICAgIHB1YmxpYzoKKyAgICAgICAgU3VwcHJl
c3NHQ1ZlcmlmaWVyU2NvcGUoU2xvdFZpc2l0b3ImKSB7IH0KKyAgICB9OworCisgICAgY2xhc3Mg
RGVmYXVsdE1hcmtpbmdWaW9sYXRpb25Bc3NlcnRpb25TY29wZSB7CisgICAgcHVibGljOgorI2lm
IEFTU0VSVF9FTkFCTEVECisgICAgICAgIERlZmF1bHRNYXJraW5nVmlvbGF0aW9uQXNzZXJ0aW9u
U2NvcGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisgICAgICAgICAgICA6IG1fdmlzaXRvcih2aXNp
dG9yKQorICAgICAgICB7CisgICAgICAgICAgICBtX3dhc0NoZWNraW5nRm9yRGVmYXVsdE1hcmtW
aW9sYXRpb24gPSBtX3Zpc2l0b3IubV9pc0NoZWNraW5nRm9yRGVmYXVsdE1hcmtWaW9sYXRpb247
CisgICAgICAgICAgICBtX3Zpc2l0b3IubV9pc0NoZWNraW5nRm9yRGVmYXVsdE1hcmtWaW9sYXRp
b24gPSBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIH5EZWZhdWx0TWFya2luZ1Zpb2xhdGlv
bkFzc2VydGlvblNjb3BlKCkKKyAgICAgICAgeworICAgICAgICAgICAgbV92aXNpdG9yLm1faXND
aGVja2luZ0ZvckRlZmF1bHRNYXJrVmlvbGF0aW9uID0gbV93YXNDaGVja2luZ0ZvckRlZmF1bHRN
YXJrVmlvbGF0aW9uOworICAgICAgICB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBTbG90Vmlz
aXRvciYgbV92aXNpdG9yOworICAgICAgICBib29sIG1fd2FzQ2hlY2tpbmdGb3JEZWZhdWx0TWFy
a1Zpb2xhdGlvbjsKKyNlbHNlCisgICAgICAgIERlZmF1bHRNYXJraW5nVmlvbGF0aW9uQXNzZXJ0
aW9uU2NvcGUoU2xvdFZpc2l0b3ImKSB7IH0KKyNlbmRpZgorICAgIH07CisKICAgICBTbG90Vmlz
aXRvcihIZWFwJiwgQ1N0cmluZyBjb2RlTmFtZSk7CiAgICAgflNsb3RWaXNpdG9yKCk7CiAKLSAg
ICBNYXJrU3RhY2tBcnJheSYgY29sbGVjdG9yTWFya1N0YWNrKCkgeyByZXR1cm4gbV9jb2xsZWN0
b3JTdGFjazsgfQotICAgIE1hcmtTdGFja0FycmF5JiBtdXRhdG9yTWFya1N0YWNrKCkgeyByZXR1
cm4gbV9tdXRhdG9yU3RhY2s7IH0KLSAgICBjb25zdCBNYXJrU3RhY2tBcnJheSYgY29sbGVjdG9y
TWFya1N0YWNrKCkgY29uc3QgeyByZXR1cm4gbV9jb2xsZWN0b3JTdGFjazsgfQotICAgIGNvbnN0
IE1hcmtTdGFja0FycmF5JiBtdXRhdG9yTWFya1N0YWNrKCkgY29uc3QgeyByZXR1cm4gbV9tdXRh
dG9yU3RhY2s7IH0KLSAgICAKLSAgICBWTSYgdm0oKTsKLSAgICBjb25zdCBWTSYgdm0oKSBjb25z
dDsKLSAgICBIZWFwKiBoZWFwKCkgY29uc3Q7CisgICAgdm9pZCBhcHBlbmQoY29uc3QgQ29uc2Vy
dmF0aXZlUm9vdHMmKSBmaW5hbDsKIAotICAgIHZvaWQgYXBwZW5kKGNvbnN0IENvbnNlcnZhdGl2
ZVJvb3RzJik7Ci0gICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVHJhaXRz
PiB2b2lkIGFwcGVuZChjb25zdCBXcml0ZUJhcnJpZXJCYXNlPFQsIFRyYWl0cz4mKTsKICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBUcmFpdHM+IHZvaWQgYXBwZW5kSGlkZGVuKGNv
bnN0IFdyaXRlQmFycmllckJhc2U8VCwgVHJhaXRzPiYpOwogICAgIHRlbXBsYXRlPHR5cGVuYW1l
IEl0ZXJhdG9yPiB2b2lkIGFwcGVuZChJdGVyYXRvciBiZWdpbiAsIEl0ZXJhdG9yIGVuZCk7Ci0g
ICAgdm9pZCBhcHBlbmRWYWx1ZXMoY29uc3QgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duLCBSYXdW
YWx1ZVRyYWl0czxVbmtub3duPj4qLCBzaXplX3QgY291bnQpOwotICAgIHZvaWQgYXBwZW5kVmFs
dWVzSGlkZGVuKGNvbnN0IFdyaXRlQmFycmllckJhc2U8VW5rbm93biwgUmF3VmFsdWVUcmFpdHM8
VW5rbm93bj4+Kiwgc2l6ZV90IGNvdW50KTsKLSAgICAKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQg
YXBwZW5kVmFsdWVzKGNvbnN0IFdyaXRlQmFycmllckJhc2U8VW5rbm93biwgUmF3VmFsdWVUcmFp
dHM8VW5rbm93bj4+Kiwgc2l6ZV90IGNvdW50KTsKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgYXBw
ZW5kVmFsdWVzSGlkZGVuKGNvbnN0IFdyaXRlQmFycmllckJhc2U8VW5rbm93biwgUmF3VmFsdWVU
cmFpdHM8VW5rbm93bj4+Kiwgc2l6ZV90IGNvdW50KTsKKwogICAgIC8vIFRoZXNlIGRvbid0IHJl
cXVpcmUgeW91IHRvIHByb3ZlIHRoYXQgeW91IGhhdmUgYSBXcml0ZUJhcnJpZXI8Pi4gVGhhdCBt
YWtlcyBzZW5zZQogICAgIC8vIGZvcjoKICAgICAvLwpAQCAtODcsMzIgKzEwNCwyNyBAQCBwdWJs
aWM6CiAgICAgLy8KICAgICAvLyBJZiB5b3UgYXJlIG5vdCBhIHJvb3QgYW5kIHlvdSBkb24ndCBr
bm93IHdoYXQga2luZCBvZiBiYXJyaWVyIHlvdSBoYXZlLCB0aGVuIHlvdQogICAgIC8vIHNob3Vs
ZG4ndCBjYWxsIHRoZXNlIG1ldGhvZHMuCi0gICAgdm9pZCBhcHBlbmRVbmJhcnJpZXJlZChKU1Zh
bHVlKTsKLSAgICB2b2lkIGFwcGVuZFVuYmFycmllcmVkKEpTVmFsdWUqLCBzaXplX3QpOwotICAg
IHZvaWQgYXBwZW5kVW5iYXJyaWVyZWQoSlNDZWxsKik7CisgICAgQUxXQVlTX0lOTElORSB2b2lk
IGFwcGVuZFVuYmFycmllcmVkKEpTVmFsdWUpOworICAgIEFMV0FZU19JTkxJTkUgdm9pZCBhcHBl
bmRVbmJhcnJpZXJlZChKU1ZhbHVlKiwgc2l6ZV90KTsKKyAgICB2b2lkIGFwcGVuZFVuYmFycmll
cmVkKEpTQ2VsbCopIGZpbmFsOwogICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiAgICAg
dm9pZCBhcHBlbmQoY29uc3QgV2VhazxUPiYgd2Vhayk7CiAgICAgCi0gICAgdm9pZCBhcHBlbmRI
aWRkZW5VbmJhcnJpZXJlZChKU1ZhbHVlKTsKLSAgICB2b2lkIGFwcGVuZEhpZGRlblVuYmFycmll
cmVkKEpTQ2VsbCopOwotCi0gICAgYm9vbCBhZGRPcGFxdWVSb290KHZvaWQqKTsgLy8gUmV0dXJu
cyB0cnVlIGlmIHRoZSByb290IHdhcyBuZXcuCi0gICAgCi0gICAgYm9vbCBjb250YWluc09wYXF1
ZVJvb3Qodm9pZCopIGNvbnN0OworICAgIEFMV0FZU19JTkxJTkUgdm9pZCBhcHBlbmRIaWRkZW5V
bmJhcnJpZXJlZChKU1ZhbHVlKTsKKyAgICB2b2lkIGFwcGVuZEhpZGRlblVuYmFycmllcmVkKEpT
Q2VsbCopIGZpbmFsOwogCi0gICAgYm9vbCBpc0VtcHR5KCkgeyByZXR1cm4gbV9jb2xsZWN0b3JT
dGFjay5pc0VtcHR5KCkgJiYgbV9tdXRhdG9yU3RhY2suaXNFbXB0eSgpOyB9CisgICAgYm9vbCBp
c0ZpcnN0VmlzaXQoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2lzRmlyc3RWaXNpdDsgfQogCi0g
ICAgYm9vbCBpc0ZpcnN0VmlzaXQoKSBjb25zdCB7IHJldHVybiBtX2lzRmlyc3RWaXNpdDsgfQor
ICAgIGJvb2wgaXNNYXJrZWQoY29uc3Qgdm9pZCopIGNvbnN0IGZpbmFsOworICAgIGJvb2wgaXNN
YXJrZWQoTWFya2VkQmxvY2smLCBIZWFwQ2VsbCopIGNvbnN0IGZpbmFsOworICAgIGJvb2wgaXNN
YXJrZWQoUHJlY2lzZUFsbG9jYXRpb24mLCBIZWFwQ2VsbCopIGNvbnN0IGZpbmFsOwogCiAgICAg
dm9pZCBkaWRTdGFydE1hcmtpbmcoKTsKICAgICB2b2lkIHJlc2V0KCk7CiAgICAgdm9pZCBjbGVh
ck1hcmtTdGFja3MoKTsKIAogICAgIHNpemVfdCBieXRlc1Zpc2l0ZWQoKSBjb25zdCB7IHJldHVy
biBtX2J5dGVzVmlzaXRlZDsgfQotICAgIHNpemVfdCB2aXNpdENvdW50KCkgY29uc3QgeyByZXR1
cm4gbV92aXNpdENvdW50OyB9Ci0gICAgCi0gICAgdm9pZCBhZGRUb1Zpc2l0Q291bnQoc2l6ZV90
IHZhbHVlKSB7IG1fdmlzaXRDb3VudCArPSB2YWx1ZTsgfQogCiAgICAgdm9pZCBkb25hdGUoKTsK
ICAgICB2b2lkIGRyYWluKE1vbm90b25pY1RpbWUgdGltZW91dCA9IE1vbm90b25pY1RpbWU6Omlu
ZmluaXR5KCkpOwpAQCAtMTM1LDI0ICsxNDcsMTggQEAgcHVibGljOgogICAgIAogICAgIC8vIFRo
aXMgaW5mb3JtcyB0aGUgR0MgYWJvdXQgYXV4aWxpYXJ5IG9mIHNvbWUgc2l6ZSB0aGF0IHdlIGFy
ZSBrZWVwaW5nIGFsaXZlLiBJZiB5b3UgZG9uJ3QgZG8KICAgICAvLyB0aGlzIHRoZW4gdGhlIHNw
YWNlIHdpbGwgYmUgZnJlZWQgYXQgZW5kIG9mIEdDLgotICAgIHZvaWQgbWFya0F1eGlsaWFyeShj
b25zdCB2b2lkKiBiYXNlKTsKKyAgICB2b2lkIG1hcmtBdXhpbGlhcnkoY29uc3Qgdm9pZCogYmFz
ZSkgZmluYWw7CiAKLSAgICB2b2lkIHJlcG9ydEV4dHJhTWVtb3J5VmlzaXRlZChzaXplX3QpOwor
ICAgIHZvaWQgcmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKHNpemVfdCkgZmluYWw7CiAjaWYgRU5B
QkxFKFJFU09VUkNFX1VTQUdFKQotICAgIHZvaWQgcmVwb3J0RXh0ZXJuYWxNZW1vcnlWaXNpdGVk
KHNpemVfdCk7CisgICAgdm9pZCByZXBvcnRFeHRlcm5hbE1lbW9yeVZpc2l0ZWQoc2l6ZV90KSBm
aW5hbDsKICNlbmRpZgogICAgIAotICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0Owot
Ci0gICAgYm9vbCBpc0FuYWx5emluZ0hlYXAoKSBjb25zdCB7IHJldHVybiAhIW1faGVhcEFuYWx5
emVyOyB9Ci0gICAgSGVhcEFuYWx5emVyKiBoZWFwQW5hbHl6ZXIoKSBjb25zdCB7IHJldHVybiBt
X2hlYXBBbmFseXplcjsgfQotICAgIAotICAgIFJvb3RNYXJrUmVhc29uIHJvb3RNYXJrUmVhc29u
KCkgY29uc3QgeyByZXR1cm4gbV9yb290TWFya1JlYXNvbjsgfQotICAgIHZvaWQgc2V0Um9vdE1h
cmtSZWFzb24oUm9vdE1hcmtSZWFzb24gcmVhc29uKSB7IG1fcm9vdE1hcmtSZWFzb24gPSByZWFz
b247IH0KKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdCBmaW5hbDsKIAogICAgIEhl
YXBWZXJzaW9uIG1hcmtpbmdWZXJzaW9uKCkgY29uc3QgeyByZXR1cm4gbV9tYXJraW5nVmVyc2lv
bjsgfQogCi0gICAgYm9vbCBtdXRhdG9ySXNTdG9wcGVkKCkgY29uc3QgeyByZXR1cm4gbV9tdXRh
dG9ySXNTdG9wcGVkOyB9CisgICAgYm9vbCBtdXRhdG9ySXNTdG9wcGVkKCkgY29uc3QgZmluYWwg
eyByZXR1cm4gbV9tdXRhdG9ySXNTdG9wcGVkOyB9CiAgICAgCiAgICAgTG9jayYgcmlnaHRUb1J1
bigpIHsgcmV0dXJuIG1fcmlnaHRUb1J1bjsgfQogICAgIApAQCAtMTY0LDIwICsxNzAsMTcgQEAg
cHVibGljOgogICAgIAogICAgIHZvaWQgb3B0aW1pemVGb3JTdG9wcGVkTXV0YXRvcigpOwogICAg
IAotICAgIHZvaWQgZGlkUmFjZShjb25zdCBWaXNpdFJhY2VLZXkmKTsKKyAgICB2b2lkIGRpZFJh
Y2UoY29uc3QgVmlzaXRSYWNlS2V5JikgZmluYWw7CiAgICAgdm9pZCBkaWRSYWNlKEpTQ2VsbCog
Y2VsbCwgY29uc3QgY2hhciogcmVhc29uKSB7IGRpZFJhY2UoVmlzaXRSYWNlS2V5KGNlbGwsIHJl
YXNvbikpOyB9CiAgICAgCi0gICAgdm9pZCB2aXNpdEFzQ29uc3RyYWludChjb25zdCBKU0NlbGwq
KTsKKyAgICB2b2lkIHZpc2l0QXNDb25zdHJhaW50KGNvbnN0IEpTQ2VsbCopIGZpbmFsOwogICAg
IAogICAgIGJvb2wgZGlkUmVhY2hUZXJtaW5hdGlvbigpOwogICAgIAotICAgIHZvaWQgc2V0SWdu
b3JlTmV3T3BhcXVlUm9vdHMoYm9vbCB2YWx1ZSkgeyBtX2lnbm9yZU5ld09wYXF1ZVJvb3RzID0g
dmFsdWU7IH0KLQogICAgIHZvaWQgZG9uYXRlQWxsKCk7CiAgICAgCi0gICAgY29uc3QgY2hhciog
Y29kZU5hbWUoKSBjb25zdCB7IHJldHVybiBtX2NvZGVOYW1lLmRhdGEoKTsgfQotICAgIAotICAg
IEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgYWRkUGFyYWxsZWxDb25zdHJhaW50VGFzayhSZWZQdHI8
U2hhcmVkVGFzazx2b2lkKFNsb3RWaXNpdG9yJik+Pik7CisgICAgTk9fUkVUVVJOX0RVRV9UT19D
UkFTSCB2b2lkIGFkZFBhcmFsbGVsQ29uc3RyYWludFRhc2soUmVmUHRyPFNoYXJlZFRhc2s8dm9p
ZChBYnN0cmFjdFNsb3RWaXNpdG9yJik+PikgZmluYWw7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUg
dm9pZCBhZGRQYXJhbGxlbENvbnN0cmFpbnRUYXNrKFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoU2xv
dFZpc2l0b3ImKT4+KSBmaW5hbDsKIAogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgUGFyYWxs
ZWxNb2RlRW5hYmxlcjsKQEAgLTIxNiwzOSArMjE5LDI1IEBAIHByaXZhdGU6CiAKICAgICBNYXJr
U3RhY2tBcnJheSYgY29ycmVzcG9uZGluZ0dsb2JhbFN0YWNrKE1hcmtTdGFja0FycmF5Jik7CiAK
LSAgICBNYXJrU3RhY2tBcnJheSBtX2NvbGxlY3RvclN0YWNrOwotICAgIE1hcmtTdGFja0FycmF5
IG1fbXV0YXRvclN0YWNrOwotICAgIAotICAgIHNpemVfdCBtX2J5dGVzVmlzaXRlZDsKLSAgICBz
aXplX3QgbV92aXNpdENvdW50OwotICAgIHNpemVfdCBtX25vbkNlbGxWaXNpdENvdW50IHsgMCB9
OyAvLyBVc2VkIGZvciBpbmNyZW1lbnRhbCBkcmFpbmluZywgaWdub3JlZCBvdGhlcndpc2UuCi0g
ICAgQ2hlY2tlZFNpemUgbV9leHRyYU1lbW9yeVNpemUgeyAwIH07Ci0gICAgYm9vbCBtX2lzSW5Q
YXJhbGxlbE1vZGU7Ci0gICAgYm9vbCBtX2lnbm9yZU5ld09wYXF1ZVJvb3RzIHsgZmFsc2UgfTsg
Ly8gVXNlZnVsIGFzIGEgZGVidWdnaW5nIG1vZGUuCisgICAgYm9vbCBtX2lzSW5QYXJhbGxlbE1v
ZGUgeyBmYWxzZSB9OwogCiAgICAgSGVhcFZlcnNpb24gbV9tYXJraW5nVmVyc2lvbjsKLSAgICAK
LSAgICBIZWFwJiBtX2hlYXA7CisKKyAgICBzaXplX3QgbV9ieXRlc1Zpc2l0ZWQgeyAwIH07Cisg
ICAgc2l6ZV90IG1fbm9uQ2VsbFZpc2l0Q291bnQgeyAwIH07IC8vIFVzZWQgZm9yIGluY3JlbWVu
dGFsIGRyYWluaW5nLCBpZ25vcmVkIG90aGVyd2lzZS4KKyAgICBDaGVja2VkU2l6ZSBtX2V4dHJh
TWVtb3J5U2l6ZSB7IDAgfTsKIAogICAgIEhlYXBBbmFseXplciogbV9oZWFwQW5hbHl6ZXIgeyBu
dWxscHRyIH07CiAgICAgSlNDZWxsKiBtX2N1cnJlbnRDZWxsIHsgbnVsbHB0ciB9OwotICAgIFJv
b3RNYXJrUmVhc29uIG1fcm9vdE1hcmtSZWFzb24geyBSb290TWFya1JlYXNvbjo6Tm9uZSB9Owog
ICAgIGJvb2wgbV9pc0ZpcnN0VmlzaXQgeyBmYWxzZSB9OwogICAgIGJvb2wgbV9tdXRhdG9ySXNT
dG9wcGVkIHsgZmFsc2UgfTsKICAgICBib29sIG1fY2FuT3B0aW1pemVGb3JTdG9wcGVkTXV0YXRv
ciB7IGZhbHNlIH07CiAgICAgTG9jayBtX3JpZ2h0VG9SdW47CiAgICAgCi0gICAgQ1N0cmluZyBt
X2NvZGVOYW1lOwotICAgIAotICAgIE1hcmtpbmdDb25zdHJhaW50KiBtX2N1cnJlbnRDb25zdHJh
aW50IHsgbnVsbHB0ciB9OwotICAgIE1hcmtpbmdDb25zdHJhaW50U29sdmVyKiBtX2N1cnJlbnRT
b2x2ZXIgeyBudWxscHRyIH07Ci0gICAgCiAgICAgLy8gUHV0IHBhZGRpbmcgaGVyZSB0byBtaXRp
Z2F0ZSBmYWxzZSBzaGFyaW5nIGJldHdlZW4gbXVsdGlwbGUgU2xvdFZpc2l0b3JzLgogICAgIGNo
YXIgcGFkZGluZ1s2NF07Ci1wdWJsaWM6CiAjaWYgQVNTRVJUX0VOQUJMRUQKLSAgICBib29sIG1f
aXNDaGVja2luZ0ZvckRlZmF1bHRNYXJrVmlvbGF0aW9uOwotICAgIGJvb2wgbV9pc0RyYWluaW5n
OworICAgIGJvb2wgbV9pc0NoZWNraW5nRm9yRGVmYXVsdE1hcmtWaW9sYXRpb24geyBmYWxzZSB9
OwogI2VuZGlmCiB9OwogCkBAIC0yNzEsMjMgKzI2MCw0IEBAIHByaXZhdGU6CiAgICAgU2xvdFZp
c2l0b3ImIG1fc3RhY2s7CiB9OwogCi1jbGFzcyBTZXRSb290TWFya1JlYXNvblNjb3BlIHsKLXB1
YmxpYzoKLSAgICBTZXRSb290TWFya1JlYXNvblNjb3BlKFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBS
b290TWFya1JlYXNvbiByZWFzb24pCi0gICAgICAgIDogbV92aXNpdG9yKHZpc2l0b3IpCi0gICAg
ICAgICwgbV9wcmV2aW91c1JlYXNvbih2aXNpdG9yLnJvb3RNYXJrUmVhc29uKCkpCi0gICAgewot
ICAgICAgICBtX3Zpc2l0b3Iuc2V0Um9vdE1hcmtSZWFzb24ocmVhc29uKTsKLSAgICB9Ci0KLSAg
ICB+U2V0Um9vdE1hcmtSZWFzb25TY29wZSgpCi0gICAgewotICAgICAgICBtX3Zpc2l0b3Iuc2V0
Um9vdE1hcmtSZWFzb24obV9wcmV2aW91c1JlYXNvbik7Ci0gICAgfQotCi1wcml2YXRlOgotICAg
IFNsb3RWaXNpdG9yJiBtX3Zpc2l0b3I7Ci0gICAgUm9vdE1hcmtSZWFzb24gbV9wcmV2aW91c1Jl
YXNvbjsKLX07Ci0KIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmgJKHJldmlzaW9uIDI3MjkwMikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9ySW5saW5lcy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE5IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMjUsOSArMjUsMTAgQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRlICJB
YnN0cmFjdFNsb3RWaXNpdG9ySW5saW5lcy5oIgorI2luY2x1ZGUgIk1hcmtlZEJsb2NrLmgiCisj
aW5jbHVkZSAiUHJlY2lzZUFsbG9jYXRpb24uaCIKICNpbmNsdWRlICJTbG90VmlzaXRvci5oIgot
I2luY2x1ZGUgIldlYWsuaCIKLSNpbmNsdWRlICJXZWFrSW5saW5lcy5oIgogCiBuYW1lc3BhY2Ug
SlNDIHsKIApAQCAtMTM0LDIxICsxMzUsMTkgQEAgQUxXQVlTX0lOTElORSB2b2lkIFNsb3RWaXNp
dG9yOjphcHBlbmRWYQogICAgICAgICBhcHBlbmRIaWRkZW4oYmFycmllcnNbaV0pOwogfQogCi1p
bmxpbmUgYm9vbCBTbG90VmlzaXRvcjo6YWRkT3BhcXVlUm9vdCh2b2lkKiBwdHIpCitBTFdBWVNf
SU5MSU5FIGJvb2wgU2xvdFZpc2l0b3I6OmlzTWFya2VkKGNvbnN0IHZvaWQqIHApIGNvbnN0CiB7
Ci0gICAgaWYgKCFwdHIpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAobV9pZ25vcmVO
ZXdPcGFxdWVSb290cykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghaGVhcCgpLT5t
X29wYXF1ZVJvb3RzLmFkZChwdHIpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV92aXNp
dENvdW50Kys7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIGhlYXAoKS0+aXNNYXJrZWQo
cCk7CiB9CiAKLWlubGluZSBib29sIFNsb3RWaXNpdG9yOjpjb250YWluc09wYXF1ZVJvb3Qodm9p
ZCogcHRyKSBjb25zdAorQUxXQVlTX0lOTElORSBib29sIFNsb3RWaXNpdG9yOjppc01hcmtlZChN
YXJrZWRCbG9jayYgY29udGFpbmVyLCBIZWFwQ2VsbCogY2VsbCkgY29uc3QKIHsKLSAgICByZXR1
cm4gaGVhcCgpLT5tX29wYXF1ZVJvb3RzLmNvbnRhaW5zKHB0cik7CisgICAgcmV0dXJuIGNvbnRh
aW5lci5pc01hcmtlZChtYXJraW5nVmVyc2lvbigpLCBjZWxsKTsKK30KKworQUxXQVlTX0lOTElO
RSBib29sIFNsb3RWaXNpdG9yOjppc01hcmtlZChQcmVjaXNlQWxsb2NhdGlvbiYgY29udGFpbmVy
LCBIZWFwQ2VsbCogY2VsbCkgY29uc3QKK3sKKyAgICByZXR1cm4gY29udGFpbmVyLmlzTWFya2Vk
KG1hcmtpbmdWZXJzaW9uKCksIGNlbGwpOwogfQogCiBpbmxpbmUgdm9pZCBTbG90VmlzaXRvcjo6
cmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKHNpemVfdCBzaXplKQpAQCAtMTY5LDIxICsxNjgsNiBA
QCBpbmxpbmUgdm9pZCBTbG90VmlzaXRvcjo6cmVwb3J0RXh0ZXJuYWxNCiB9CiAjZW5kaWYKIAot
aW5saW5lIEhlYXAqIFNsb3RWaXNpdG9yOjpoZWFwKCkgY29uc3QKLXsKLSAgICByZXR1cm4gJm1f
aGVhcDsKLX0KLQotaW5saW5lIFZNJiBTbG90VmlzaXRvcjo6dm0oKQotewotICAgIHJldHVybiBt
X2hlYXAudm0oKTsKLX0KLQotaW5saW5lIGNvbnN0IFZNJiBTbG90VmlzaXRvcjo6dm0oKSBjb25z
dAotewotICAgIHJldHVybiBtX2hlYXAudm0oKTsKLX0KLQogdGVtcGxhdGU8dHlwZW5hbWUgRnVu
Yz4KIEl0ZXJhdGlvblN0YXR1cyBTbG90VmlzaXRvcjo6Zm9yRWFjaE1hcmtTdGFjayhjb25zdCBG
dW5jJiBmdW5jKQogewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0
b3JNYWNyb3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90
VmlzaXRvck1hY3Jvcy5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL1Nsb3RWaXNpdG9yTWFjcm9zLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMjMgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9u
Y2UKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEFic3RyYWN0U2xvdFZpc2l0b3I7CitjbGFz
cyBKU0NlbGw7CitjbGFzcyBTbG90VmlzaXRvcjsKKworI2RlZmluZSBVTlVTRURfTU9ESUZJRVJf
QVJHVU1FTlQgLyogdW51c2VkICovCisKKyNkZWZpbmUgREVDTEFSRV9VTlVTRURfU1RSVUNUX1RP
X1RFUk1JTkFURV9WSVNJVF9NQUNST19FWFBBTkRFUl9JTVBMKGNvdW50ZXIpIFwKKyAgICBzdHJ1
Y3QgVW51c2VkU2xvdFZpc2l0b3JNYWNyb1N0cnVjdFNvV2VDYW5IYXZlQVNlbWljb2xvbiMjY291
bnRlciB7IH0KKworI2RlZmluZSBERUNMQVJFX1VOVVNFRF9TVFJVQ1RfVE9fVEVSTUlOQVRFX1ZJ
U0lUX01BQ1JPX0VYUEFOREVSKGNvdW50ZXIpIFwKKyAgICBERUNMQVJFX1VOVVNFRF9TVFJVQ1Rf
VE9fVEVSTUlOQVRFX1ZJU0lUX01BQ1JPX0VYUEFOREVSX0lNUEwoY291bnRlcikKKworI2RlZmlu
ZSBERUNMQVJFX1VOVVNFRF9TVFJVQ1RfVE9fVEVSTUlOQVRFX1ZJU0lUX01BQ1JPIFwKKyAgICBE
RUNMQVJFX1VOVVNFRF9TVFJVQ1RfVE9fVEVSTUlOQVRFX1ZJU0lUX01BQ1JPX0VYUEFOREVSKF9f
Q09VTlRFUl9fKQorCisvLyBNYWNyb3MgZm9yIHZpc2l0QWdncmVnYXRlKCkuCisKKyNkZWZpbmUg
REVDTEFSRV9WSVNJVF9BR0dSRUdBVEVfV0lUSF9NT0RJRklFUihwb3N0TW9kaWZpZXIpIFwKK3By
aXZhdGU6IFwKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiBBTFdBWVNfSU5MSU5FIHZv
aWQgdmlzaXRBZ2dyZWdhdGVJbXBsKFZpc2l0b3ImKSBwb3N0TW9kaWZpZXI7IFwKK3B1YmxpYzog
XAorICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoQWJzdHJhY3RTbG90VmlzaXRvciYpIHBvc3RNb2Rp
ZmllcjsgXAorICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImKSBwb3N0TW9kaWZp
ZXIKKworI2RlZmluZSBERUNMQVJFX1ZJU0lUX0FHR1JFR0FURSBcCisgICAgREVDTEFSRV9WSVNJ
VF9BR0dSRUdBVEVfV0lUSF9NT0RJRklFUihVTlVTRURfTU9ESUZJRVJfQVJHVU1FTlQpCisKKyNk
ZWZpbmUgREVGSU5FX1ZJU0lUX0FHR1JFR0FURV9XSVRIX01PRElGSUVSKGNsYXNzTmFtZSwgcG9z
dE1vZGlmaWVyKSBcCisgICAgdm9pZCBjbGFzc05hbWU6OnZpc2l0QWdncmVnYXRlKEFic3RyYWN0
U2xvdFZpc2l0b3ImIHZpc2l0b3IpIHBvc3RNb2RpZmllciB7IHZpc2l0QWdncmVnYXRlSW1wbCh2
aXNpdG9yKTsgfSBcCisgICAgdm9pZCBjbGFzc05hbWU6OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNp
dG9yJiB2aXNpdG9yKSBwb3N0TW9kaWZpZXIgeyB2aXNpdEFnZ3JlZ2F0ZUltcGwodmlzaXRvcik7
IH0gXAorICAgIERFQ0xBUkVfVU5VU0VEX1NUUlVDVF9UT19URVJNSU5BVEVfVklTSVRfTUFDUk8K
KworI2RlZmluZSBERUZJTkVfVklTSVRfQUdHUkVHQVRFKGNsYXNzTmFtZSkgXAorICAgIERFRklO
RV9WSVNJVF9BR0dSRUdBVEVfV0lUSF9NT0RJRklFUihjbGFzc05hbWUsIFVOVVNFRF9NT0RJRklF
Ul9BUkdVTUVOVCkKKworLy8gTWFjcm9zIGZvciBzdGF0aWMgdmlzaXRDaGlsZHJlbigpLgorCisj
ZGVmaW5lIERFQ0xBUkVfVklTSVRfQ0hJTERSRU5fV0lUSF9NT0RJRklFUihwcmVNb2RpZmllcikg
XAorcHJpdmF0ZTogXAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IEFMV0FZU19JTkxJ
TkUgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiwgVmlzaXRvciYpOyBcCitw
dWJsaWM6IFwKKyAgICBwcmVNb2RpZmllciBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2Vs
bCosIEFic3RyYWN0U2xvdFZpc2l0b3ImKTsgXAorICAgIHByZU1vZGlmaWVyIHN0YXRpYyB2b2lk
IHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKQorCisjZGVmaW5lIERFQ0xBUkVf
VklTSVRfQ0hJTERSRU4gXAorICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU5fV0lUSF9NT0RJRklF
UihVTlVTRURfTU9ESUZJRVJfQVJHVU1FTlQpCisKKyNkZWZpbmUgREVGSU5FX1ZJU0lUX0NISUxE
UkVOX1dJVEhfTU9ESUZJRVIocHJlTW9kaWZpZXIsIGNsYXNzTmFtZSkgXAorICAgIHByZU1vZGlm
aWVyIHZvaWQgY2xhc3NOYW1lOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgQWJzdHJhY3RT
bG90VmlzaXRvciYgdmlzaXRvcikgXAorICAgIHsgXAorICAgICAgICBBYnN0cmFjdFNsb3RWaXNp
dG9yOjpDb250ZXh0IGNvbnRleHQodmlzaXRvciwgY2VsbCk7IFwKKyAgICAgICAgdmlzaXRDaGls
ZHJlbkltcGwoY2VsbCwgdmlzaXRvcik7IFwKKyAgICB9IFwKKyAgICBwcmVNb2RpZmllciB2b2lk
IGNsYXNzTmFtZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNp
dG9yKSB7IHZpc2l0Q2hpbGRyZW5JbXBsKGNlbGwsIHZpc2l0b3IpOyB9IFwKKyAgICBERUNMQVJF
X1VOVVNFRF9TVFJVQ1RfVE9fVEVSTUlOQVRFX1ZJU0lUX01BQ1JPCisKKyNkZWZpbmUgREVGSU5F
X1ZJU0lUX0NISUxEUkVOKGNsYXNzTmFtZSkgXAorICAgIERFRklORV9WSVNJVF9DSElMRFJFTl9X
SVRIX01PRElGSUVSKFVOVVNFRF9NT0RJRklFUl9BUkdVTUVOVCwgY2xhc3NOYW1lKQorCisvLyBN
YWNyb3MgZm9yIHN0YXRpYyB2aXNpdE91dHB1dENvbnN0cmFpbnRzKCkuCisKKyNkZWZpbmUgREVD
TEFSRV9WSVNJVF9PVVRQVVRfQ09OU1RSQUlOVFNfV0lUSF9NT0RJRklFUihwcmVNb2RpZmllcikg
XAorcHJpdmF0ZTogXAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IEFMV0FZU19JTkxJ
TkUgc3RhdGljIHZvaWQgdmlzaXRPdXRwdXRDb25zdHJhaW50c0ltcGwoSlNDZWxsKiwgVmlzaXRv
ciYpOyBcCitwdWJsaWM6IFwKKyAgICBwcmVNb2RpZmllciBzdGF0aWMgdm9pZCB2aXNpdE91dHB1
dENvbnN0cmFpbnRzKEpTQ2VsbCosIEFic3RyYWN0U2xvdFZpc2l0b3ImKTsgXAorICAgIHByZU1v
ZGlmaWVyIHN0YXRpYyB2b2lkIHZpc2l0T3V0cHV0Q29uc3RyYWludHMoSlNDZWxsKiwgU2xvdFZp
c2l0b3ImKQorCisjZGVmaW5lIERFQ0xBUkVfVklTSVRfT1VUUFVUX0NPTlNUUkFJTlRTIFwKKyAg
ICBERUNMQVJFX1ZJU0lUX09VVFBVVF9DT05TVFJBSU5UU19XSVRIX01PRElGSUVSKFVOVVNFRF9N
T0RJRklFUl9BUkdVTUVOVCkKKworI2RlZmluZSBERUZJTkVfVklTSVRfT1VUUFVUX0NPTlNUUkFJ
TlRTX1dJVEhfTU9ESUZJRVIocHJlTW9kaWZpZXIsIGNsYXNzTmFtZSkgXAorICAgIHByZU1vZGlm
aWVyIHZvaWQgY2xhc3NOYW1lOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzKEpTQ2VsbCogY2VsbCwg
QWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikgXAorICAgIHsgXAorICAgICAgICBBYnN0cmFj
dFNsb3RWaXNpdG9yOjpDb250ZXh0IGNvbnRleHQodmlzaXRvciwgY2VsbCk7IFwKKyAgICAgICAg
dmlzaXRPdXRwdXRDb25zdHJhaW50c0ltcGwoY2VsbCwgdmlzaXRvcik7IFwKKyAgICB9IFwKKyAg
ICBwcmVNb2RpZmllciB2b2lkIGNsYXNzTmFtZTo6dmlzaXRPdXRwdXRDb25zdHJhaW50cyhKU0Nl
bGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKSB7IHZpc2l0T3V0cHV0Q29uc3RyYWludHNJ
bXBsKGNlbGwsIHZpc2l0b3IpOyB9IFwKKyAgICBERUNMQVJFX1VOVVNFRF9TVFJVQ1RfVE9fVEVS
TUlOQVRFX1ZJU0lUX01BQ1JPCisKKyNkZWZpbmUgREVGSU5FX1ZJU0lUX09VVFBVVF9DT05TVFJB
SU5UUyhjbGFzc05hbWUpIFwKKyAgICBERUZJTkVfVklTSVRfT1VUUFVUX0NPTlNUUkFJTlRTX1dJ
VEhfTU9ESUZJRVIoVU5VU0VEX01PRElGSUVSX0FSR1VNRU5ULCBjbGFzc05hbWUpCisKKy8vIE1h
Y3JvcyBmb3IgdmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oKS4KKworI2RlZmluZSBERUZJTkVfVklT
SVRfQURESVRJT05BTF9DSElMRFJFTihjbGFzc05hbWUpIFwKKyAgICB0ZW1wbGF0ZSB2b2lkIGNs
YXNzTmFtZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9y
Jik7IFwKKyAgICB0ZW1wbGF0ZSB2b2lkIGNsYXNzTmFtZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRy
ZW4oSlNDOjpTbG90VmlzaXRvciYpCisKK30gLy8gbmFtZXNwYWNlIEpTQworCit1c2luZyBKU0M6
OkFic3RyYWN0U2xvdFZpc2l0b3I7Cit1c2luZyBKU0M6OkpTQ2VsbDsKK3VzaW5nIEpTQzo6U2xv
dFZpc2l0b3I7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdWJzcGFjZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N1YnNwYWNlLmgJKHJldmlz
aW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N1YnNwYWNlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3LTIw
MTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3
LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0zNCw2ICszNCw3IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCitjbGFz
cyBBYnN0cmFjdFNsb3RWaXNpdG9yOwogY2xhc3MgQWxpZ25lZE1lbW9yeUFsbG9jYXRvcjsKIGNs
YXNzIEhlYXBDZWxsVHlwZTsKIApAQCAtODYsOCArODcsOCBAQCBwdWJsaWM6CiAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgRnVuYz4KICAgICB2b2lkIGZvckVhY2hNYXJrZWRDZWxsKGNvbnN0IEZ1bmMm
KTsKICAgICAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgotICAgIFJlZjxTaGFyZWRUYXNr
PHZvaWQoU2xvdFZpc2l0b3ImKT4+IGZvckVhY2hNYXJrZWRDZWxsSW5QYXJhbGxlbChjb25zdCBG
dW5jJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvciwgdHlwZW5hbWUgRnVuYz4KKyAg
ICBSZWY8U2hhcmVkVGFzazx2b2lkKFZpc2l0b3ImKT4+IGZvckVhY2hNYXJrZWRDZWxsSW5QYXJh
bGxlbChjb25zdCBGdW5jJik7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgogICAgIHZv
aWQgZm9yRWFjaExpdmVDZWxsKGNvbnN0IEZ1bmMmKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL1N1YnNwYWNlSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL1N1YnNwYWNlSW5saW5lcy5oCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdWJzcGFjZUlubGluZXMuaAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAxOCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTg1LDEwICs4NSwxMCBAQCB2b2lkIFN1YnNwYWNlOjpmb3JFYWNoTWFya2VkQ2VsbChjb25z
dCBGCiAgICAgICAgIH0pOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgotUmVmPFNoYXJl
ZFRhc2s8dm9pZChTbG90VmlzaXRvciYpPj4gU3Vic3BhY2U6OmZvckVhY2hNYXJrZWRDZWxsSW5Q
YXJhbGxlbChjb25zdCBGdW5jJiBmdW5jKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvciwgdHlw
ZW5hbWUgRnVuYz4KK1JlZjxTaGFyZWRUYXNrPHZvaWQoVmlzaXRvciYpPj4gU3Vic3BhY2U6OmZv
ckVhY2hNYXJrZWRDZWxsSW5QYXJhbGxlbChjb25zdCBGdW5jJiBmdW5jKQogewotICAgIGNsYXNz
IFRhc2sgZmluYWwgOiBwdWJsaWMgU2hhcmVkVGFzazx2b2lkKFNsb3RWaXNpdG9yJik+IHsKKyAg
ICBjbGFzcyBUYXNrIGZpbmFsIDogcHVibGljIFNoYXJlZFRhc2s8dm9pZChWaXNpdG9yJik+IHsK
ICAgICBwdWJsaWM6CiAgICAgICAgIFRhc2soU3Vic3BhY2UmIHN1YnNwYWNlLCBjb25zdCBGdW5j
JiBmdW5jKQogICAgICAgICAgICAgOiBtX3N1YnNwYWNlKHN1YnNwYWNlKQpAQCAtOTcsNyArOTcs
NyBAQCBSZWY8U2hhcmVkVGFzazx2b2lkKFNsb3RWaXNpdG9yJik+PiBTdWJzCiAgICAgICAgIHsK
ICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgdm9pZCBydW4oU2xvdFZpc2l0b3ImIHZpc2l0
b3IpIGZpbmFsCisgICAgICAgIHZvaWQgcnVuKFZpc2l0b3ImIHZpc2l0b3IpIGZpbmFsCiAgICAg
ICAgIHsKICAgICAgICAgICAgIHdoaWxlIChNYXJrZWRCbG9jazo6SGFuZGxlKiBoYW5kbGUgPSBt
X2Jsb2NrU291cmNlLT5ydW4oKSkgewogICAgICAgICAgICAgICAgIGhhbmRsZS0+Zm9yRWFjaE1h
cmtlZENlbGwoCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9WZXJpZmllclNsb3RW
aXNpdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9WZXJp
ZmllclNsb3RWaXNpdG9yLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9WZXJpZmllclNsb3RWaXNpdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDM0NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJWZXJp
ZmllclNsb3RWaXNpdG9yLmgiCisKKyNpbmNsdWRlICJCbG9ja0RpcmVjdG9yeUlubGluZXMuaCIK
KyNpbmNsdWRlICJDb25zZXJ2YXRpdmVSb290cy5oIgorI2luY2x1ZGUgIkdDU2VnbWVudGVkQXJy
YXlJbmxpbmVzLmgiCisjaW5jbHVkZSAiSGVhcENlbGwuaCIKKyNpbmNsdWRlICJKU0NJbmxpbmVz
LmgiCisjaW5jbHVkZSAiVk0uaCIKKyNpbmNsdWRlICJWZXJpZmllclNsb3RWaXNpdG9ySW5saW5l
cy5oIgorI2luY2x1ZGUgPHd0Zi9TdGFja1RyYWNlLmg+CisKK25hbWVzcGFjZSBKU0MgeworCit1
c2luZyBNYXJrZXJEYXRhID0gVmVyaWZpZXJTbG90VmlzaXRvcjo6TWFya2VyRGF0YTsKKworY29u
c3RleHByIGludCBtYXhNYXJraW5nU3RhY2tGcmFtZXNUb0NhcHR1cmUgPSAxMDA7CisKK01hcmtl
ckRhdGE6Ok1hcmtlckRhdGEoSGVhcENlbGwqIHBhcmVudCwgc3RkOjp1bmlxdWVfcHRyPFN0YWNr
VHJhY2U+JiYgc3RhY2spCisgICAgOiBwYXJlbnQocGFyZW50KQorICAgICwgc3RhY2soV1RGTW92
ZShzdGFjaykpCit7Cit9CisKK1ZlcmlmaWVyU2xvdFZpc2l0b3I6Ok1hcmtlZEJsb2NrRGF0YTo6
TWFya2VkQmxvY2tEYXRhKE1hcmtlZEJsb2NrKiBibG9jaykKKyAgICA6IG1fYmxvY2soYmxvY2sp
Cit7Cit9CisKK3ZvaWQgVmVyaWZpZXJTbG90VmlzaXRvcjo6TWFya2VkQmxvY2tEYXRhOjphZGRN
YXJrZXJEYXRhKHVuc2lnbmVkIGF0b21OdW1iZXIsIE1hcmtlckRhdGEmJiBtYXJrZXIpCit7Cisg
ICAgaWYgKG1fbWFya2Vycy5pc0VtcHR5KCkpCisgICAgICAgIG1fbWFya2Vycy5ncm93KE1hcmtl
ZEJsb2NrOjphdG9tc1BlckJsb2NrKTsKKyAgICBtX21hcmtlcnNbYXRvbU51bWJlcl0gPSBXVEZN
b3ZlKG1hcmtlcik7Cit9CisKK2NvbnN0IE1hcmtlckRhdGEqIFZlcmlmaWVyU2xvdFZpc2l0b3I6
Ok1hcmtlZEJsb2NrRGF0YTo6bWFya2VyRGF0YSh1bnNpZ25lZCBhdG9tTnVtYmVyKSBjb25zdAor
eworICAgIGF1dG8mIG1hcmtlciA9IG1fbWFya2Vyc1thdG9tTnVtYmVyXTsKKyAgICBpZiAobWFy
a2VyLnN0YWNrKQorICAgICAgICByZXR1cm4gJm1hcmtlcjsKKyAgICByZXR1cm4gbnVsbHB0cjsK
K30KKworVmVyaWZpZXJTbG90VmlzaXRvcjo6UHJlY2lzZUFsbG9jYXRpb25EYXRhOjpQcmVjaXNl
QWxsb2NhdGlvbkRhdGEoUHJlY2lzZUFsbG9jYXRpb24qIGFsbG9jYXRpb24pCisgICAgOiBtX2Fs
bG9jYXRpb24oYWxsb2NhdGlvbikKK3sKK30KKworY29uc3QgTWFya2VyRGF0YSogVmVyaWZpZXJT
bG90VmlzaXRvcjo6UHJlY2lzZUFsbG9jYXRpb25EYXRhOjptYXJrZXJEYXRhKCkgY29uc3QKK3sK
KyAgICBpZiAobV9tYXJrZXIuc3RhY2spCisgICAgICAgIHJldHVybiAmbV9tYXJrZXI7CisgICAg
cmV0dXJuIG51bGxwdHI7Cit9CisKK3ZvaWQgVmVyaWZpZXJTbG90VmlzaXRvcjo6UHJlY2lzZUFs
bG9jYXRpb25EYXRhOjphZGRNYXJrZXJEYXRhKE1hcmtlckRhdGEmJiBtYXJrZXIpCit7CisgICAg
bV9tYXJrZXIgPSBXVEZNb3ZlKG1hcmtlcik7Cit9CisKK1ZlcmlmaWVyU2xvdFZpc2l0b3I6OlZl
cmlmaWVyU2xvdFZpc2l0b3IoSGVhcCYgaGVhcCkKKyAgICA6IEJhc2UoaGVhcCwgIlZlcmlmaWVy
IiwgbV9vcGFxdWVSb290U3RvcmFnZSkKK3sKK30KKworVmVyaWZpZXJTbG90VmlzaXRvcjo6flZl
cmlmaWVyU2xvdFZpc2l0b3IoKQoreworICAgIGhlYXAoKS0+b2JqZWN0U3BhY2UoKS5mb3JFYWNo
QmxvY2soCisgICAgICAgIFsmXSAoTWFya2VkQmxvY2s6OkhhbmRsZSogaGFuZGxlKSB7CisgICAg
ICAgICAgICBoYW5kbGUtPmJsb2NrKCkuc2V0VmVyaWZpZXJNZW1vKG51bGxwdHIpOworICAgICAg
ICB9KTsKK30KKwordm9pZCBWZXJpZmllclNsb3RWaXNpdG9yOjphZGRQYXJhbGxlbENvbnN0cmFp
bnRUYXNrKFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoQWJzdHJhY3RTbG90VmlzaXRvciYpPj4gdGFz
aykKK3sKKyAgICBtX2NvbnN0cmFpbnRUYXNrcy5hcHBlbmQoV1RGTW92ZSh0YXNrKSk7Cit9CisK
K05PX1JFVFVSTl9EVUVfVE9fQ1JBU0ggdm9pZCBWZXJpZmllclNsb3RWaXNpdG9yOjphZGRQYXJh
bGxlbENvbnN0cmFpbnRUYXNrKFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoU2xvdFZpc2l0b3ImKT4+
KQoreworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK3ZvaWQgVmVyaWZp
ZXJTbG90VmlzaXRvcjo6ZXhlY3V0ZUNvbnN0cmFpbnRUYXNrcygpCit7CisgICAgd2hpbGUgKCFt
X2NvbnN0cmFpbnRUYXNrcy5pc0VtcHR5KCkpCisgICAgICAgIG1fY29uc3RyYWludFRhc2tzLnRh
a2VGaXJzdCgpLT5ydW4oKnRoaXMpOworfQorCit2b2lkIFZlcmlmaWVyU2xvdFZpc2l0b3I6OmFw
cGVuZChjb25zdCBDb25zZXJ2YXRpdmVSb290cyYgY29uc2VydmF0aXZlUm9vdHMpCit7CisgICAg
YXV0byBhcHBlbmRKU0NlbGxPckF1eGlsaWFyeSA9IFsmXSAoSGVhcENlbGwqIGhlYXBDZWxsKSB7
CisgICAgICAgIGlmICghaGVhcENlbGwpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAg
aWYgKHRlc3RBbmRTZXRNYXJrZWQoaGVhcENlbGwpKQorICAgICAgICAgICAgcmV0dXJuOworCisg
ICAgICAgIHN3aXRjaCAoaGVhcENlbGwtPmNlbGxLaW5kKCkpIHsKKyAgICAgICAgY2FzZSBIZWFw
Q2VsbDo6SlNDZWxsOgorICAgICAgICBjYXNlIEhlYXBDZWxsOjpKU0NlbGxXaXRoSW5kZXhpbmdI
ZWFkZXI6IHsKKyAgICAgICAgICAgIEpTQ2VsbCoganNDZWxsID0gc3RhdGljX2Nhc3Q8SlNDZWxs
Kj4oaGVhcENlbGwpOworICAgICAgICAgICAgYXBwZW5kVG9NYXJrU3RhY2soanNDZWxsKTsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgSGVhcENlbGw6OkF1
eGlsaWFyeToKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH07CisKKyAgICBI
ZWFwQ2VsbCoqIHJvb3RzID0gY29uc2VydmF0aXZlUm9vdHMucm9vdHMoKTsKKyAgICBzaXplX3Qg
c2l6ZSA9IGNvbnNlcnZhdGl2ZVJvb3RzLnNpemUoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IHNpemU7ICsraSkKKyAgICAgICAgYXBwZW5kSlNDZWxsT3JBdXhpbGlhcnkocm9vdHNbaV0p
OworfQorCit2b2lkIFZlcmlmaWVyU2xvdFZpc2l0b3I6OmFwcGVuZFRvTWFya1N0YWNrKEpTQ2Vs
bCogY2VsbCkKK3sKKyAgICBBU1NFUlQoIWNlbGwtPmlzWmFwcGVkKCkpOworICAgIG1fY29sbGVj
dG9yU3RhY2suYXBwZW5kKGNlbGwpOworfQorCit2b2lkIFZlcmlmaWVyU2xvdFZpc2l0b3I6OmFw
cGVuZFVuYmFycmllcmVkKEpTQ2VsbCogY2VsbCkKK3sKKyAgICBpZiAoIWNlbGwpCisgICAgICAg
IHJldHVybjsKKworICAgIGlmIChVTkxJS0VMWShjZWxsLT5pc1ByZWNpc2VBbGxvY2F0aW9uKCkp
KSB7CisgICAgICAgIGlmIChMSUtFTFkoaXNNYXJrZWQoY2VsbC0+cHJlY2lzZUFsbG9jYXRpb24o
KSwgY2VsbCkpKQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0gZWxzZSB7CisgICAgICAgIE1h
cmtlZEJsb2NrJiBibG9jayA9IGNlbGwtPm1hcmtlZEJsb2NrKCk7CisgICAgICAgIGlmIChMSUtF
TFkoaXNNYXJrZWQoYmxvY2ssIGNlbGwpKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBhcHBlbmRTbG93KGNlbGwpOworfQorCit2b2lkIFZlcmlmaWVyU2xvdFZpc2l0b3I6OmFw
cGVuZEhpZGRlblVuYmFycmllcmVkKEpTQ2VsbCogY2VsbCkKK3sKKyAgICBhcHBlbmRVbmJhcnJp
ZXJlZChjZWxsKTsKK30KKwordm9pZCBWZXJpZmllclNsb3RWaXNpdG9yOjpkcmFpbigpCit7Cisg
ICAgUkVMRUFTRV9BU1NFUlQobV9tdXRhdG9yU3RhY2suaXNFbXB0eSgpKTsKKworICAgIE1hcmtT
dGFja0FycmF5JiBzdGFjayA9IG1fY29sbGVjdG9yU3RhY2s7CisgICAgaWYgKHN0YWNrLmlzRW1w
dHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgc3RhY2sucmVmaWxsKCk7CisgICAgd2hpbGUg
KHN0YWNrLmNhblJlbW92ZUxhc3QoKSkKKyAgICAgICAgdmlzaXRDaGlsZHJlbihzdGFjay5yZW1v
dmVMYXN0KCkpOworfQorCit2b2lkIFZlcmlmaWVyU2xvdFZpc2l0b3I6OmR1bXBNYXJrZXJEYXRh
KEhlYXBDZWxsKiBjZWxsKQoreworICAgIGlmIChjZWxsLT5pc1ByZWNpc2VBbGxvY2F0aW9uKCkp
CisgICAgICAgIHJldHVybiBkdW1wTWFya2VyRGF0YShjZWxsLT5wcmVjaXNlQWxsb2NhdGlvbigp
LCBjZWxsKTsKKyAgICByZXR1cm4gZHVtcE1hcmtlckRhdGEoY2VsbC0+bWFya2VkQmxvY2soKSwg
Y2VsbCk7Cit9CisKK3ZvaWQgVmVyaWZpZXJTbG90VmlzaXRvcjo6ZHVtcE1hcmtlckRhdGEoUHJl
Y2lzZUFsbG9jYXRpb24mIGFsbG9jYXRpb24sIEhlYXBDZWxsKiBjZWxsKQoreworICAgIGF1dG8g
aXRlcmF0b3IgPSBtX3ByZWNpc2VBbGxvY2F0aW9uTWFwLmZpbmQoJmFsbG9jYXRpb24pOworICAg
IGlmIChpdGVyYXRvciAhPSBtX3ByZWNpc2VBbGxvY2F0aW9uTWFwLmVuZCgpKSB7CisgICAgICAg
IGR1bXBNYXJrZXJEYXRhKGNlbGwsIGl0ZXJhdG9yLT52YWx1ZS0+bWFya2VyRGF0YSgpKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICBkYXRhTG9nTG4oIkNlbGwgIiwgUmF3UG9pbnRlcihj
ZWxsKSwgIiBub3QgZm91bmQiKTsKK30KKwordm9pZCBWZXJpZmllclNsb3RWaXNpdG9yOjpkdW1w
TWFya2VyRGF0YShNYXJrZWRCbG9jayYgYmxvY2ssIEhlYXBDZWxsKiBjZWxsKQoreworICAgIGF1
dG8gaXRlcmF0b3IgPSBtX21hcmtlZEJsb2NrTWFwLmZpbmQoJmJsb2NrKTsKKyAgICBpZiAoaXRl
cmF0b3IgIT0gbV9tYXJrZWRCbG9ja01hcC5lbmQoKSkgeworICAgICAgICB1bnNpZ25lZCBhdG9t
TnVtYmVyID0gYmxvY2suYXRvbU51bWJlcihjZWxsKTsKKyAgICAgICAgZHVtcE1hcmtlckRhdGEo
Y2VsbCwgaXRlcmF0b3ItPnZhbHVlLT5tYXJrZXJEYXRhKGF0b21OdW1iZXIpKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICBkYXRhTG9nTG4oIkNlbGwgIiwgUmF3UG9pbnRlcihjZWxsKSwg
IiBub3QgZm91bmQiKTsKK30KKwordm9pZCBWZXJpZmllclNsb3RWaXNpdG9yOjpkdW1wTWFya2Vy
RGF0YShIZWFwQ2VsbCogY2VsbCwgY29uc3QgTWFya2VyRGF0YSogbWFya2VyKQoreworICAgIGlm
ICghbWFya2VyKSB7CisgICAgICAgIGRhdGFMb2dMbigiTWFya2VyIGRhdGEgaXMgbm90IGF2YWls
YWJsZSBmb3IgY2VsbCAiLCBSYXdQb2ludGVyKGNlbGwpKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIGRhdGFMb2dMbigiQ2VsbCAiLCBSYXdQb2ludGVyKGNlbGwpLCAiIHdhcyByZWFj
aGFibGUgdmlhIGNlbGwgIiwgUmF3UG9pbnRlcihtYXJrZXItPnBhcmVudCksICIgYXQ6Iik7Cisg
ICAgbWFya2VyLT5zdGFjay0+ZHVtcChXVEY6OmRhdGFGaWxlKCksICIgICAgIik7Cit9CisKK2Jv
b2wgVmVyaWZpZXJTbG90VmlzaXRvcjo6aXNGaXJzdFZpc2l0KCkgY29uc3QKK3sKKyAgICAvLyBJ
biB0aGUgcmVndWxhciBHQywgdGhpcyByZXR1cm4gdmFsdWUgaXMgb25seSB1c2VkIHRvIGNvbnRy
b2wgd2hldGhlcgorICAgIC8vIFVubGlua2VkQ29kZUJsb2NrcyB3aWxsIGJlIGFnZWQgKHNlZSBV
bmxpbmtlZENvZGVCbG9jazo6dmlzaXRDaGlsZHJlbkltcGwoKSkuCisgICAgLy8gRm9yIHRoZSB2
ZXJpZmllciBHQyBwYXNzLCB3ZSBzaG91bGQgYWx3YXlzIHJldHVybiBmYWxzZSBiZWNhdXNlIHdl
IGRvbid0CisgICAgLy8gd2FudCB0byBkbyB0aGUgYWdpbmcgYWN0aW9uIGFnYWluLgorICAgIHJl
dHVybiBmYWxzZTsKK30KKworYm9vbCBWZXJpZmllclNsb3RWaXNpdG9yOjppc01hcmtlZChjb25z
dCB2b2lkKiByYXdDZWxsKSBjb25zdAoreworICAgIEhlYXBDZWxsKiBjZWxsID0gYml0d2lzZV9j
YXN0PEhlYXBDZWxsKj4ocmF3Q2VsbCk7CisgICAgaWYgKGNlbGwtPmlzUHJlY2lzZUFsbG9jYXRp
b24oKSkKKyAgICAgICAgcmV0dXJuIGlzTWFya2VkKGNlbGwtPnByZWNpc2VBbGxvY2F0aW9uKCks
IGNlbGwpOworICAgIHJldHVybiBpc01hcmtlZChjZWxsLT5tYXJrZWRCbG9jaygpLCBjZWxsKTsK
K30KKworYm9vbCBWZXJpZmllclNsb3RWaXNpdG9yOjppc01hcmtlZChQcmVjaXNlQWxsb2NhdGlv
biYgYWxsb2NhdGlvbiwgSGVhcENlbGwqKSBjb25zdAoreworICAgIHJldHVybiBtX3ByZWNpc2VB
bGxvY2F0aW9uTWFwLmNvbnRhaW5zKCZhbGxvY2F0aW9uKTsKK30KKworYm9vbCBWZXJpZmllclNs
b3RWaXNpdG9yOjppc01hcmtlZChNYXJrZWRCbG9jayYgYmxvY2ssIEhlYXBDZWxsKiBjZWxsKSBj
b25zdAoreworICAgIGF1dG8gZW50cnkgPSBtX21hcmtlZEJsb2NrTWFwLmZpbmQoJmJsb2NrKTsK
KyAgICBpZiAoZW50cnkgPT0gbV9tYXJrZWRCbG9ja01hcC5lbmQoKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgYXV0byYgZGF0YSA9IGVudHJ5LT52YWx1ZTsKKyAgICB1bnNpZ25lZCBh
dG9tTnVtYmVyID0gYmxvY2suYXRvbU51bWJlcihjZWxsKTsKKyAgICByZXR1cm4gZGF0YS0+aXNN
YXJrZWQoYXRvbU51bWJlcik7Cit9CisKK3ZvaWQgVmVyaWZpZXJTbG90VmlzaXRvcjo6bWFya0F1
eGlsaWFyeShjb25zdCB2b2lkKiBiYXNlKQoreworICAgIEhlYXBDZWxsKiBjZWxsID0gYml0d2lz
ZV9jYXN0PEhlYXBDZWxsKj4oYmFzZSk7CisKKyAgICBBU1NFUlQoY2VsbC0+aGVhcCgpID09IGhl
YXAoKSk7CisgICAgdGVzdEFuZFNldE1hcmtlZChjZWxsKTsKK30KKworYm9vbCBWZXJpZmllclNs
b3RWaXNpdG9yOjptdXRhdG9ySXNTdG9wcGVkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKworYm9vbCBWZXJpZmllclNsb3RWaXNpdG9yOjp0ZXN0QW5kU2V0TWFya2VkKGNvbnN0IHZv
aWQqIHJhd0NlbGwpCit7CisgICAgSGVhcENlbGwqIGNlbGwgPSBiaXR3aXNlX2Nhc3Q8SGVhcENl
bGwqPihyYXdDZWxsKTsKKyAgICBpZiAoY2VsbC0+aXNQcmVjaXNlQWxsb2NhdGlvbigpKQorICAg
ICAgICByZXR1cm4gdGVzdEFuZFNldE1hcmtlZChjZWxsLT5wcmVjaXNlQWxsb2NhdGlvbigpKTsK
KyAgICByZXR1cm4gdGVzdEFuZFNldE1hcmtlZChjZWxsLT5tYXJrZWRCbG9jaygpLCBjZWxsKTsK
K30KKworYm9vbCBWZXJpZmllclNsb3RWaXNpdG9yOjp0ZXN0QW5kU2V0TWFya2VkKFByZWNpc2VB
bGxvY2F0aW9uJiBhbGxvY2F0aW9uKQoreworICAgIHN0ZDo6dW5pcXVlX3B0cjxQcmVjaXNlQWxs
b2NhdGlvbkRhdGE+JiBkYXRhID0gbV9wcmVjaXNlQWxsb2NhdGlvbk1hcC5hZGQoJmFsbG9jYXRp
b24sIG51bGxwdHIpLml0ZXJhdG9yLT52YWx1ZTsKKyAgICBpZiAoIWRhdGEpIHsKKyAgICAgICAg
ZGF0YSA9IG1ha2VVbmlxdWU8UHJlY2lzZUFsbG9jYXRpb25EYXRhPigmYWxsb2NhdGlvbik7Cisg
ICAgICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjp2ZXJib3NlVmVyaWZ5R0MoKSkpCisgICAgICAg
ICAgICBkYXRhLT5hZGRNYXJrZXJEYXRhKHsgcGFyZW50Q2VsbCgpLCBTdGFja1RyYWNlOjpjYXB0
dXJlU3RhY2tUcmFjZShtYXhNYXJraW5nU3RhY2tGcmFtZXNUb0NhcHR1cmUsIDIpIH0pOworICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCitib29sIFZl
cmlmaWVyU2xvdFZpc2l0b3I6OnRlc3RBbmRTZXRNYXJrZWQoTWFya2VkQmxvY2smIGJsb2NrLCBI
ZWFwQ2VsbCogY2VsbCkKK3sKKyAgICBNYXJrZWRCbG9ja0RhdGEqIGRhdGEgPSBibG9jay52ZXJp
Zmllck1lbW88TWFya2VkQmxvY2tEYXRhKj4oKTsKKyAgICBpZiAoVU5MSUtFTFkoIWRhdGEpKSB7
CisgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxNYXJrZWRCbG9ja0RhdGE+JiBlbnRyeURhdGEgPSBt
X21hcmtlZEJsb2NrTWFwLmFkZCgmYmxvY2ssIG51bGxwdHIpLml0ZXJhdG9yLT52YWx1ZTsKKyAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoIWVudHJ5RGF0YSk7CisgICAgICAgIGVudHJ5RGF0YSA9IG1h
a2VVbmlxdWU8TWFya2VkQmxvY2tEYXRhPigmYmxvY2spOworICAgICAgICBkYXRhID0gZW50cnlE
YXRhLmdldCgpOworICAgICAgICBibG9jay5zZXRWZXJpZmllck1lbW8oZGF0YSk7CisgICAgfQor
CisgICAgdW5zaWduZWQgYXRvbU51bWJlciA9IGJsb2NrLmF0b21OdW1iZXIoY2VsbCk7CisgICAg
Ym9vbCBhbHJlYWR5U2V0ID0gZGF0YS0+dGVzdEFuZFNldE1hcmtlZChhdG9tTnVtYmVyKTsKKyAg
ICBpZiAoIWFscmVhZHlTZXQgJiYgVU5MSUtFTFkoT3B0aW9uczo6dmVyYm9zZVZlcmlmeUdDKCkp
KQorICAgICAgICBkYXRhLT5hZGRNYXJrZXJEYXRhKGF0b21OdW1iZXIsIHsgcGFyZW50Q2VsbCgp
LCBTdGFja1RyYWNlOjpjYXB0dXJlU3RhY2tUcmFjZShtYXhNYXJraW5nU3RhY2tGcmFtZXNUb0Nh
cHR1cmUsIDIpIH0pOworICAgIHJldHVybiBhbHJlYWR5U2V0OworfQorCit2b2lkIFZlcmlmaWVy
U2xvdFZpc2l0b3I6OnNldE1hcmtlZEFuZEFwcGVuZFRvTWFya1N0YWNrKEpTQ2VsbCogY2VsbCkK
K3sKKyAgICBpZiAobV9zdXBwcmVzc1ZlcmlmaWVyKQorICAgICAgICByZXR1cm47CisgICAgaWYg
KHRlc3RBbmRTZXRNYXJrZWQoY2VsbCkpCisgICAgICAgIHJldHVybjsKKyAgICBhcHBlbmRUb01h
cmtTdGFjayhjZWxsKTsKK30KKwordm9pZCBWZXJpZmllclNsb3RWaXNpdG9yOjp2aXNpdEFzQ29u
c3RyYWludChjb25zdCBKU0NlbGwqIGNlbGwpCit7CisgICAgdmlzaXRDaGlsZHJlbihjZWxsKTsK
K30KKwordm9pZCBWZXJpZmllclNsb3RWaXNpdG9yOjp2aXNpdENoaWxkcmVuKGNvbnN0IEpTQ2Vs
bCogY2VsbCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChpc01hcmtlZChjZWxsKSk7CisgICAgc3dp
dGNoIChjZWxsLT50eXBlKCkpIHsKKyAgICBjYXNlIFN0cmluZ1R5cGU6CisgICAgICAgIEpTU3Ry
aW5nOjp2aXNpdENoaWxkcmVuKGNvbnN0X2Nhc3Q8SlNDZWxsKj4oY2VsbCksICp0aGlzKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgICAgIAorICAgIGNhc2UgRmluYWxPYmplY3RUeXBlOgorICAgICAg
ICBKU0ZpbmFsT2JqZWN0Ojp2aXNpdENoaWxkcmVuKGNvbnN0X2Nhc3Q8SlNDZWxsKj4oY2VsbCks
ICp0aGlzKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEFycmF5VHlwZToKKyAgICAgICAg
SlNBcnJheTo6dmlzaXRDaGlsZHJlbihjb25zdF9jYXN0PEpTQ2VsbCo+KGNlbGwpLCAqdGhpcyk7
CisgICAgICAgIGJyZWFrOworICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICAvLyBGSVhN
RTogVGhpcyBjb3VsZCBiZSBzbyBtdWNoIGJldHRlci4KKyAgICAgICAgLy8gaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MjQ2MgorICAgICAgICBjZWxsLT5tZXRob2RU
YWJsZSh2bSgpKS0+dmlzaXRDaGlsZHJlbihjb25zdF9jYXN0PEpTQ2VsbCo+KGNlbGwpLCAqdGhp
cyk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9WZXJpZmllclNsb3RWaXNpdG9yLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVmVyaWZpZXJTbG90VmlzaXRvci5o
CShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1ZlcmlmaWVyU2xv
dFZpc2l0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE3MiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVk
ZSAiQWJzdHJhY3RTbG90VmlzaXRvci5oIgorI2luY2x1ZGUgIkpTQ0pTVmFsdWUuaCIKKyNpbmNs
dWRlICJNYXJrZWRCbG9jay5oIgorI2luY2x1ZGUgIlZpc2l0UmFjZUtleS5oIgorI2luY2x1ZGUg
IldlYWsuaCIKKyNpbmNsdWRlIDxtZW1vcnk+CisjaW5jbHVkZSA8d3RmL0JpdG1hcC5oPgorI2lu
Y2x1ZGUgPHd0Zi9EZXF1ZS5oPgorI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CisjaW5jbHVk
ZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3Rm
L1NoYXJlZFRhc2suaD4KKworbmFtZXNwYWNlIFdURiB7CisKK2NsYXNzIFN0YWNrVHJhY2U7CisK
K30gLy8gbmFtZXNwYWNlIFdURgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgQ29uc2VydmF0
aXZlUm9vdHM7CitjbGFzcyBIZWFwOworY2xhc3MgSGVhcENlbGw7CitjbGFzcyBQcmVjaXNlQWxs
b2NhdGlvbjsKKwordXNpbmcgV1RGOjpTdGFja1RyYWNlOworCitjbGFzcyBWZXJpZmllclNsb3RW
aXNpdG9yIDogcHVibGljIEFic3RyYWN0U2xvdFZpc2l0b3IgeworICAgIFdURl9NQUtFX05PTkNP
UFlBQkxFKFZlcmlmaWVyU2xvdFZpc2l0b3IpOworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OworICAgIHVzaW5nIEJhc2UgPSBBYnN0cmFjdFNsb3RWaXNpdG9yOworcHVibGljOgorICAgIHN0
cnVjdCBNYXJrZXJEYXRhIHsKKyAgICAgICAgTWFya2VyRGF0YSgpID0gZGVmYXVsdDsKKyAgICAg
ICAgTWFya2VyRGF0YShNYXJrZXJEYXRhJiYpID0gZGVmYXVsdDsKKyAgICAgICAgTWFya2VyRGF0
YShIZWFwQ2VsbCosIHN0ZDo6dW5pcXVlX3B0cjxTdGFja1RyYWNlPiYmKTsKKyAgICAgICAgTWFy
a2VyRGF0YSYgb3BlcmF0b3I9KE1hcmtlckRhdGEmJikgPSBkZWZhdWx0OworCisgICAgICAgIEhl
YXBDZWxsKiBwYXJlbnQgeyBudWxscHRyIH07CisgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxTdGFj
a1RyYWNlPiBzdGFjazsKKyAgICB9OworCisgICAgVmVyaWZpZXJTbG90VmlzaXRvcihIZWFwJik7
CisgICAgflZlcmlmaWVyU2xvdFZpc2l0b3IoKTsKKworICAgIHZvaWQgYXBwZW5kKGNvbnN0IENv
bnNlcnZhdGl2ZVJvb3RzJikgZmluYWw7CisgICAgdm9pZCBhcHBlbmRVbmJhcnJpZXJlZChKU0Nl
bGwqKSBmaW5hbDsKKyAgICB2b2lkIGFwcGVuZEhpZGRlblVuYmFycmllcmVkKEpTQ2VsbCopIGZp
bmFsOworCisgICAgYm9vbCBpc0ZpcnN0VmlzaXQoKSBjb25zdCBmaW5hbDsKKyAgICBib29sIGlz
TWFya2VkKGNvbnN0IHZvaWQqKSBjb25zdCBmaW5hbDsKKyAgICBib29sIGlzTWFya2VkKE1hcmtl
ZEJsb2NrJiwgSGVhcENlbGwqKSBjb25zdCBmaW5hbDsKKyAgICBib29sIGlzTWFya2VkKFByZWNp
c2VBbGxvY2F0aW9uJiwgSGVhcENlbGwqKSBjb25zdCBmaW5hbDsKKworICAgIHZvaWQgbWFya0F1
eGlsaWFyeShjb25zdCB2b2lkKikgZmluYWw7CisKKyAgICB2b2lkIHJlcG9ydEV4dHJhTWVtb3J5
VmlzaXRlZChzaXplX3QpIGZpbmFsIHsgfQorI2lmIEVOQUJMRShSRVNPVVJDRV9VU0FHRSkKKyAg
ICB2b2lkIHJlcG9ydEV4dGVybmFsTWVtb3J5VmlzaXRlZChzaXplX3QpIGZpbmFsIHsgfQorI2Vu
ZGlmCisKKyAgICBib29sIG11dGF0b3JJc1N0b3BwZWQoKSBjb25zdCBmaW5hbDsKKworICAgIHZv
aWQgZGlkUmFjZShjb25zdCBWaXNpdFJhY2VLZXkmKSBmaW5hbCB7IH0KKyAgICB2b2lkIGR1bXAo
UHJpbnRTdHJlYW0mKSBjb25zdCBmaW5hbCB7IH0KKworICAgIHZvaWQgdmlzaXRBc0NvbnN0cmFp
bnQoY29uc3QgSlNDZWxsKikgZmluYWw7CisKKyAgICB2b2lkIGRyYWluKCk7CisKKyAgICB2b2lk
IGFkZFBhcmFsbGVsQ29uc3RyYWludFRhc2soUmVmUHRyPFNoYXJlZFRhc2s8dm9pZChBYnN0cmFj
dFNsb3RWaXNpdG9yJik+PikgZmluYWw7CisgICAgTk9fUkVUVVJOX0RVRV9UT19DUkFTSCB2b2lk
IGFkZFBhcmFsbGVsQ29uc3RyYWludFRhc2soUmVmUHRyPFNoYXJlZFRhc2s8dm9pZChTbG90Vmlz
aXRvciYpPj4pIGZpbmFsOworICAgIHZvaWQgZXhlY3V0ZUNvbnN0cmFpbnRUYXNrcygpOworCisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBmb3JFYWNoTGl2ZUNlbGwoY29uc3Qg
RnVuY3RvciYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaExp
dmVQcmVjaXNlQWxsb2NhdGlvbihjb25zdCBGdW5jdG9yJik7CisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgRnVuY3Rvcj4gdm9pZCBmb3JFYWNoTGl2ZU1hcmtlZEJsb2NrQ2VsbChjb25zdCBGdW5jdG9y
Jik7CisKKyAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGR1bXBNYXJrZXJEYXRhKEhlYXBDZWxs
Kik7CisKK3ByaXZhdGU6CisgICAgY2xhc3MgTWFya2VkQmxvY2tEYXRhIHsKKyAgICAgICAgV1RG
X01BS0VfRkFTVF9BTExPQ0FURUQ7CisgICAgICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKE1hcmtl
ZEJsb2NrRGF0YSk7CisgICAgcHVibGljOgorICAgICAgICB1c2luZyBBdG9tc0JpdG1hcCA9IEJp
dG1hcDxNYXJrZWRCbG9jazo6YXRvbXNQZXJCbG9jaz47CisKKyAgICAgICAgTWFya2VkQmxvY2tE
YXRhKE1hcmtlZEJsb2NrKik7CisKKyAgICAgICAgTWFya2VkQmxvY2sqIGJsb2NrKCkgY29uc3Qg
eyByZXR1cm4gbV9ibG9jazsgfQorICAgICAgICBjb25zdCBBdG9tc0JpdG1hcCYgYXRvbXMoKSBj
b25zdCB7IHJldHVybiBtX2F0b21zOyB9CisKKyAgICAgICAgYm9vbCBpc01hcmtlZCh1bnNpZ25l
ZCBhdG9tTnVtYmVyKSB7IHJldHVybiBtX2F0b21zLmdldChhdG9tTnVtYmVyKTsgfQorICAgICAg
ICBib29sIHRlc3RBbmRTZXRNYXJrZWQodW5zaWduZWQgYXRvbU51bWJlcikgeyByZXR1cm4gbV9h
dG9tcy50ZXN0QW5kU2V0KGF0b21OdW1iZXIpOyB9CisKKyAgICAgICAgdm9pZCBhZGRNYXJrZXJE
YXRhKHVuc2lnbmVkIGF0b21OdW1iZXIsIE1hcmtlckRhdGEmJik7CisgICAgICAgIGNvbnN0IE1h
cmtlckRhdGEqIG1hcmtlckRhdGEodW5zaWduZWQgYXRvbU51bWJlcikgY29uc3Q7CisKKyAgICBw
cml2YXRlOgorICAgICAgICBNYXJrZWRCbG9jayogbV9ibG9jayB7IG51bGxwdHIgfTsKKyAgICAg
ICAgQXRvbXNCaXRtYXAgbV9hdG9tczsKKyAgICAgICAgVmVjdG9yPE1hcmtlckRhdGE+IG1fbWFy
a2VyczsKKyAgICB9OworCisgICAgY2xhc3MgUHJlY2lzZUFsbG9jYXRpb25EYXRhIHsKKyAgICAg
ICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CisgICAgICAgIFdURl9NQUtFX05PTkNPUFlBQkxF
KFByZWNpc2VBbGxvY2F0aW9uRGF0YSk7CisgICAgcHVibGljOgorICAgICAgICBQcmVjaXNlQWxs
b2NhdGlvbkRhdGEoUHJlY2lzZUFsbG9jYXRpb24qKTsKKyAgICAgICAgUHJlY2lzZUFsbG9jYXRp
b24qIGFsbG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBtX2FsbG9jYXRpb247IH0KKworICAgICAg
ICB2b2lkIGFkZE1hcmtlckRhdGEoTWFya2VyRGF0YSYmKTsKKyAgICAgICAgY29uc3QgTWFya2Vy
RGF0YSogbWFya2VyRGF0YSgpIGNvbnN0OworCisgICAgcHJpdmF0ZToKKyAgICAgICAgUHJlY2lz
ZUFsbG9jYXRpb24qIG1fYWxsb2NhdGlvbiB7IG51bGxwdHIgfTsKKyAgICAgICAgTWFya2VyRGF0
YSBtX21hcmtlcjsKKyAgICB9OworCisgICAgdXNpbmcgTWFya2VkQmxvY2tNYXAgPSBIYXNoTWFw
PE1hcmtlZEJsb2NrKiwgc3RkOjp1bmlxdWVfcHRyPE1hcmtlZEJsb2NrRGF0YT4+OworICAgIHVz
aW5nIFByZWNpc2VBbGxvY2F0aW9uTWFwID0gSGFzaE1hcDxQcmVjaXNlQWxsb2NhdGlvbiosIHN0
ZDo6dW5pcXVlX3B0cjxQcmVjaXNlQWxsb2NhdGlvbkRhdGE+PjsKKworICAgIHZvaWQgYXBwZW5k
VG9NYXJrU3RhY2soSlNDZWxsKik7CisgICAgdm9pZCBhcHBlbmRTbG93KEpTQ2VsbCogY2VsbCkg
eyBzZXRNYXJrZWRBbmRBcHBlbmRUb01hcmtTdGFjayhjZWxsKTsgfQorCisgICAgYm9vbCB0ZXN0
QW5kU2V0TWFya2VkKGNvbnN0IHZvaWQqIHJhd0NlbGwpOworICAgIGJvb2wgdGVzdEFuZFNldE1h
cmtlZChQcmVjaXNlQWxsb2NhdGlvbiYpOworICAgIGJvb2wgdGVzdEFuZFNldE1hcmtlZChNYXJr
ZWRCbG9jayYsIEhlYXBDZWxsKik7CisKKyAgICB2b2lkIHNldE1hcmtlZEFuZEFwcGVuZFRvTWFy
a1N0YWNrKEpTQ2VsbCopOworCisgICAgdm9pZCB2aXNpdENoaWxkcmVuKGNvbnN0IEpTQ2VsbCop
OworCisgICAgdm9pZCBkdW1wTWFya2VyRGF0YShQcmVjaXNlQWxsb2NhdGlvbiYsIEhlYXBDZWxs
Kik7CisgICAgdm9pZCBkdW1wTWFya2VyRGF0YShNYXJrZWRCbG9jayYsIEhlYXBDZWxsKik7Cisg
ICAgdm9pZCBkdW1wTWFya2VyRGF0YShIZWFwQ2VsbCosIGNvbnN0IE1hcmtlckRhdGEqKTsKKwor
ICAgIFByZWNpc2VBbGxvY2F0aW9uTWFwIG1fcHJlY2lzZUFsbG9jYXRpb25NYXA7CisgICAgTWFy
a2VkQmxvY2tNYXAgbV9tYXJrZWRCbG9ja01hcDsKKyAgICBDb25jdXJyZW50UHRySGFzaFNldCBt
X29wYXF1ZVJvb3RTdG9yYWdlOworICAgIERlcXVlPFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoQWJz
dHJhY3RTbG90VmlzaXRvciYpPj4sIDMyPiBtX2NvbnN0cmFpbnRUYXNrczsKK307CisKK30gLy8g
bmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVmVyaWZpZXJT
bG90VmlzaXRvcklubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9WZXJpZmllclNsb3RWaXNpdG9ySW5saW5lcy5oCShub25leGlzdGVudCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1ZlcmlmaWVyU2xvdFZpc2l0b3JJbmxpbmVzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQWJzdHJhY3RTbG90Vmlz
aXRvcklubGluZXMuaCIKKyNpbmNsdWRlICJWZXJpZmllclNsb3RWaXNpdG9yLmgiCisKK25hbWVz
cGFjZSBKU0MgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgordm9pZCBWZXJpZmllclNs
b3RWaXNpdG9yOjpmb3JFYWNoTGl2ZUNlbGwoY29uc3QgRnVuY3RvciYgZnVuY3RvcikKK3sKKyAg
ICBmb3JFYWNoTGl2ZVByZWNpc2VBbGxvY2F0aW9uKGZ1bmN0b3IpOworICAgIGZvckVhY2hMaXZl
TWFya2VkQmxvY2tDZWxsKGZ1bmN0b3IpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9y
Pgordm9pZCBWZXJpZmllclNsb3RWaXNpdG9yOjpmb3JFYWNoTGl2ZVByZWNpc2VBbGxvY2F0aW9u
KGNvbnN0IEZ1bmN0b3ImIGZ1bmMpCit7CisgICAgZm9yIChhdXRvJiBlbnRyeSA6IG1fcHJlY2lz
ZUFsbG9jYXRpb25NYXApIHsKKyAgICAgICAgUHJlY2lzZUFsbG9jYXRpb24qIGFsbG9jYXRpb24g
PSBlbnRyeS52YWx1ZS0+YWxsb2NhdGlvbigpOworICAgICAgICBmdW5jKGFsbG9jYXRpb24tPmNl
bGwoKSk7CisgICAgfQorfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgordm9pZCBWZXJp
ZmllclNsb3RWaXNpdG9yOjpmb3JFYWNoTGl2ZU1hcmtlZEJsb2NrQ2VsbChjb25zdCBGdW5jdG9y
JiBmdW5jKQoreworICAgIGZvciAoYXV0byYgZW50cnkgOiBtX21hcmtlZEJsb2NrTWFwKSB7Cisg
ICAgICAgIGF1dG8mIGRhdGEgPSBlbnRyeS52YWx1ZTsKKyAgICAgICAgTWFya2VkQmxvY2sqIGJs
b2NrID0gZGF0YS0+YmxvY2soKTsKKyAgICAgICAgY29uc3QgTWFya2VkQmxvY2tEYXRhOjpBdG9t
c0JpdG1hcCYgYXRvbXMgPSAgZGF0YS0+YXRvbXMoKTsKKyAgICAgICAgZm9yIChhdXRvIGF0b21O
dW1iZXIgOiBhdG9tcykKKyAgICAgICAgICAgIGZ1bmMoYml0d2lzZV9jYXN0PEhlYXBDZWxsKj4o
YmxvY2stPmhhbmRsZSgpLmF0b21BdChhdG9tTnVtYmVyKSkpOworICAgIH0KK30KKworfSAvLyBu
YW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9WaXNpdENvdW50
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9WaXNpdENvdW50
ZXIuaAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVmlz
aXRDb3VudGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjUsNyArMjUsNyBAQAogCiAjcHJhZ21hIG9uY2UK
IAotI2luY2x1ZGUgIlNsb3RWaXNpdG9yLmgiCisjaW5jbHVkZSAiQWJzdHJhY3RTbG90VmlzaXRv
ci5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIApAQCAtMzMsMTMgKzMzLDEzIEBAIGNsYXNzIFZpc2l0
Q291bnRlciB7CiBwdWJsaWM6CiAgICAgVmlzaXRDb3VudGVyKCkgeyB9CiAgICAgCi0gICAgVmlz
aXRDb3VudGVyKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorICAgIFZpc2l0Q291bnRlcihBYnN0cmFj
dFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogICAgICAgICA6IG1fdmlzaXRvcigmdmlzaXRvcikKICAg
ICAgICAgLCBtX2luaXRpYWxWaXNpdENvdW50KHZpc2l0b3IudmlzaXRDb3VudCgpKQogICAgIHsK
ICAgICB9CiAgICAgCi0gICAgU2xvdFZpc2l0b3ImIHZpc2l0b3IoKSBjb25zdCB7IHJldHVybiAq
bV92aXNpdG9yOyB9CisgICAgQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcigpIGNvbnN0IHsg
cmV0dXJuICptX3Zpc2l0b3I7IH0KICAgICAKICAgICBzaXplX3QgdmlzaXRDb3VudCgpIGNvbnN0
CiAgICAgewpAQCAtNDcsNyArNDcsNyBAQCBwdWJsaWM6CiAgICAgfQogICAgIAogcHJpdmF0ZToK
LSAgICBTbG90VmlzaXRvciogbV92aXNpdG9yIHsgbnVsbHB0ciB9OworICAgIEFic3RyYWN0U2xv
dFZpc2l0b3IqIG1fdmlzaXRvciB7IG51bGxwdHIgfTsKICAgICBzaXplX3QgbV9pbml0aWFsVmlz
aXRDb3VudCB7IDAgfTsKIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dl
YWtCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vh
a0Jsb2NrLmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvV2Vha0Jsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTItMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTk4LDEyICs5OCwxMSBAQCB2b2lk
IFdlYWtCbG9jazo6c3dlZXAoKQogICAgIEFTU0VSVCghbV9zd2VlcFJlc3VsdC5pc051bGwoKSk7
CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIENvbnRhaW5lclR5cGU+Ci12b2lkIFdlYWtCbG9jazo6
c3BlY2lhbGl6ZWRWaXNpdChDb250YWluZXJUeXBlJiBjb250YWluZXIsIFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgQ29udGFpbmVyVHlwZSwgdHlwZW5hbWUgVmlzaXRv
cj4KK3ZvaWQgV2Vha0Jsb2NrOjpzcGVjaWFsaXplZFZpc2l0KENvbnRhaW5lclR5cGUmIGNvbnRh
aW5lciwgVmlzaXRvciYgdmlzaXRvcikKIHsKLSAgICBIZWFwVmVyc2lvbiBtYXJraW5nVmVyc2lv
biA9IHZpc2l0b3IubWFya2luZ1ZlcnNpb24oKTsKLQogICAgIHNpemVfdCBjb3VudCA9IHdlYWtJ
bXBsQ291bnQoKTsKKyAgICBIZWFwQW5hbHl6ZXIqIGhlYXBBbmFseXplciA9IHZpc2l0b3Iudm0o
KS5hY3RpdmVIZWFwQW5hbHl6ZXIoKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50
OyArK2kpIHsKICAgICAgICAgV2Vha0ltcGwqIHdlYWtJbXBsID0gJndlYWtJbXBscygpW2ldOwog
ICAgICAgICBpZiAod2Vha0ltcGwtPnN0YXRlKCkgIT0gV2Vha0ltcGw6OkxpdmUpCkBAIC0xMTQs
MTIgKzExMywxMiBAQCB2b2lkIFdlYWtCbG9jazo6c3BlY2lhbGl6ZWRWaXNpdChDb250YWluCiAg
ICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICBKU1ZhbHVlIGpzVmFsdWUgPSB3ZWFrSW1w
bC0+anNWYWx1ZSgpOwotICAgICAgICBpZiAoY29udGFpbmVyLmlzTWFya2VkKG1hcmtpbmdWZXJz
aW9uLCBqc1ZhbHVlLmFzQ2VsbCgpKSkKKyAgICAgICAgaWYgKHZpc2l0b3IuaXNNYXJrZWQoY29u
dGFpbmVyLCBqc1ZhbHVlLmFzQ2VsbCgpKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAg
ICAKICAgICAgICAgY29uc3QgY2hhciogcmVhc29uID0gIiI7CiAgICAgICAgIGNvbnN0IGNoYXIq
KiByZWFzb25QdHIgPSBudWxscHRyOwotICAgICAgICBpZiAoVU5MSUtFTFkodmlzaXRvci5pc0Fu
YWx5emluZ0hlYXAoKSkpCisgICAgICAgIGlmIChVTkxJS0VMWShoZWFwQW5hbHl6ZXIpKQogICAg
ICAgICAgICAgcmVhc29uUHRyID0gJnJlYXNvbjsKIAogICAgICAgICBpZiAoIXdlYWtIYW5kbGVP
d25lci0+aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSGFuZGxlPFVua25vd24+Ojp3cmFwU2xv
dCgmY29uc3RfY2FzdDxKU1ZhbHVlJj4oanNWYWx1ZSkpLCB3ZWFrSW1wbC0+Y29udGV4dCgpLCB2
aXNpdG9yLCByZWFzb25QdHIpKQpAQCAtMTI3LDE0ICsxMjYsMTUgQEAgdm9pZCBXZWFrQmxvY2s6
OnNwZWNpYWxpemVkVmlzaXQoQ29udGFpbgogCiAgICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJy
aWVyZWQoanNWYWx1ZSk7CiAKLSAgICAgICAgaWYgKFVOTElLRUxZKHZpc2l0b3IuaXNBbmFseXpp
bmdIZWFwKCkpKSB7CisgICAgICAgIGlmIChVTkxJS0VMWShoZWFwQW5hbHl6ZXIpKSB7CiAgICAg
ICAgICAgICBpZiAoanNWYWx1ZS5pc0NlbGwoKSkKLSAgICAgICAgICAgICAgICB2aXNpdG9yLmhl
YXBBbmFseXplcigpLT5zZXRPcGFxdWVSb290UmVhY2hhYmlsaXR5UmVhc29uRm9yQ2VsbChqc1Zh
bHVlLmFzQ2VsbCgpLCAqcmVhc29uUHRyKTsKKyAgICAgICAgICAgICAgICBoZWFwQW5hbHl6ZXIt
PnNldE9wYXF1ZVJvb3RSZWFjaGFiaWxpdHlSZWFzb25Gb3JDZWxsKGpzVmFsdWUuYXNDZWxsKCks
ICpyZWFzb25QdHIpOwogICAgICAgICB9CiAgICAgfQogfQogCi12b2lkIFdlYWtCbG9jazo6dmlz
aXQoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgorQUxX
QVlTX0lOTElORSB2b2lkIFdlYWtCbG9jazo6dmlzaXRJbXBsKFZpc2l0b3ImIHZpc2l0b3IpCiB7
CiAgICAgLy8gSWYgYSBibG9jayBpcyBjb21wbGV0ZWx5IGVtcHR5LCBhIHZpc2l0IHdvbid0IGhh
dmUgYW55IGVmZmVjdC4KICAgICBpZiAoaXNFbXB0eSgpKQpAQCAtMTQ5LDYgKzE0OSw5IEBAIHZv
aWQgV2Vha0Jsb2NrOjp2aXNpdChTbG90VmlzaXRvciYgdmlzaXQKICAgICAgICAgc3BlY2lhbGl6
ZWRWaXNpdChtX2NvbnRhaW5lci5tYXJrZWRCbG9jaygpLCB2aXNpdG9yKTsKIH0KIAordm9pZCBX
ZWFrQmxvY2s6OnZpc2l0KEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsgdmlzaXRJbXBs
KHZpc2l0b3IpOyB9Cit2b2lkIFdlYWtCbG9jazo6dmlzaXQoU2xvdFZpc2l0b3ImIHZpc2l0b3Ip
IHsgdmlzaXRJbXBsKHZpc2l0b3IpOyB9CisKIHZvaWQgV2Vha0Jsb2NrOjpyZWFwKCkKIHsKICAg
ICAvLyBJZiBhIGJsb2NrIGlzIGNvbXBsZXRlbHkgZW1wdHksIGEgcmVhcGluZyB3b24ndCBoYXZl
IGFueSBlZmZlY3QuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrQmxvY2su
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrQmxvY2suaAko
cmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha0Jsb2Nr
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDEyLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEyLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0zMiw2ICszMiw3IEBACiAKIG5hbWVzcGFjZSBKU0Mgewog
CitjbGFzcyBBYnN0cmFjdFNsb3RWaXNpdG9yOwogY2xhc3MgSGVhcDsKIGNsYXNzIFNsb3RWaXNp
dG9yOwogCkBAIC02NSw3ICs2Niw4IEBAIHB1YmxpYzoKICAgICB2b2lkIHN3ZWVwKCk7CiAgICAg
U3dlZXBSZXN1bHQgdGFrZVN3ZWVwUmVzdWx0KCk7CiAKLSAgICB2b2lkIHZpc2l0KFNsb3RWaXNp
dG9yJik7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCB2aXNpdChBYnN0cmFjdFNsb3RWaXNp
dG9yJik7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCB2aXNpdChTbG90VmlzaXRvciYpOwog
CiAgICAgdm9pZCByZWFwKCk7CiAKQEAgLTczLDEwICs3NSwxMiBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBkaXNjb25uZWN0Q29udGFpbmVyKCkgeyBtX2NvbnRhaW5lciA9IENlbGxDb250YWluZXIoKTsg
fQogCiBwcml2YXRlOgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgdmlzaXRJ
bXBsKFZpc2l0b3ImKTsKKwogICAgIHN0YXRpYyBGcmVlQ2VsbCogYXNGcmVlQ2VsbChXZWFrSW1w
bCopOwogICAgIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIENvbnRhaW5lclR5cGU+Ci0gICAgdm9p
ZCBzcGVjaWFsaXplZFZpc2l0KENvbnRhaW5lclR5cGUmLCBTbG90VmlzaXRvciYpOworICAgIHRl
bXBsYXRlPHR5cGVuYW1lIENvbnRhaW5lclR5cGUsIHR5cGVuYW1lIFZpc2l0b3I+CisgICAgdm9p
ZCBzcGVjaWFsaXplZFZpc2l0KENvbnRhaW5lclR5cGUmLCBWaXNpdG9yJik7CiAKICAgICBleHBs
aWNpdCBXZWFrQmxvY2soQ2VsbENvbnRhaW5lcik7CiAgICAgdm9pZCBmaW5hbGl6ZShXZWFrSW1w
bCopOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha0hhbmRsZU93bmVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrSGFuZGxlT3du
ZXIuY3BwCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9X
ZWFrSGFuZGxlT3duZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTItMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM1LDcgKzM1LDcgQEAgV2Vha0hhbmRs
ZU93bmVyOjp+V2Vha0hhbmRsZU93bmVyKCkKIHsKIH0KIAotYm9vbCBXZWFrSGFuZGxlT3duZXI6
OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEhhbmRsZTxVbmtub3duPiwgdm9pZCosIFNsb3RW
aXNpdG9yJiwgY29uc3QgY2hhcioqKQorYm9vbCBXZWFrSGFuZGxlT3duZXI6OmlzUmVhY2hhYmxl
RnJvbU9wYXF1ZVJvb3RzKEhhbmRsZTxVbmtub3duPiwgdm9pZCosIEFic3RyYWN0U2xvdFZpc2l0
b3ImLCBjb25zdCBjaGFyKiopCiB7CiAgICAgcmV0dXJuIGZhbHNlOwogfQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha0hhbmRsZU93bmVyLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha0hhbmRsZU93bmVyLmgJKHJldmlzaW9uIDI3Mjkw
MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtIYW5kbGVPd25lci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTI5LDEzICsyOSwxMyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotY2xhc3MgU2xv
dFZpc2l0b3I7CitjbGFzcyBBYnN0cmFjdFNsb3RWaXNpdG9yOwogCiBjbGFzcyBKU19FWFBPUlRf
UFJJVkFURSBXZWFrSGFuZGxlT3duZXIgewogcHVibGljOgogICAgIHZpcnR1YWwgfldlYWtIYW5k
bGVPd25lcigpOwogICAgIC8vIHJlYXNvbiB3aWxsIG9ubHkgYmUgbm9uLW51bGwgd2hlbiBnZW5l
cmF0aW5nIGEgZGVidWcgR0MgaGVhcCBzbmFwc2hvdC4KLSAgICB2aXJ0dWFsIGJvb2wgaXNSZWFj
aGFibGVGcm9tT3BhcXVlUm9vdHMoSGFuZGxlPFVua25vd24+LCB2b2lkKiBjb250ZXh0LCBTbG90
VmlzaXRvciYsIGNoYXIgY29uc3QqKiByZWFzb24gPSBudWxscHRyKTsKKyAgICB2aXJ0dWFsIGJv
b2wgaXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSGFuZGxlPFVua25vd24+LCB2b2lkKiBjb250
ZXh0LCBBYnN0cmFjdFNsb3RWaXNpdG9yJiwgY2hhciBjb25zdCoqIHJlYXNvbiA9IG51bGxwdHIp
OwogICAgIHZpcnR1YWwgdm9pZCBmaW5hbGl6ZShIYW5kbGU8VW5rbm93bj4sIHZvaWQqIGNvbnRl
eHQpOwogfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha1NldC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha1NldC5jcHAJKHJl
dmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtTZXQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMjMsNCArMTIzLDcgQEAgdm9pZCBXZWFrU2V0OjpyZW1vdmVB
bGxvY2F0b3IoV2Vha0Jsb2NrKgogICAgIFdlYWtCbG9jazo6ZGVzdHJveSgqaGVhcCgpLCBibG9j
ayk7CiB9CiAKK3RlbXBsYXRlIHZvaWQgV2Vha1NldDo6dmlzaXQoQWJzdHJhY3RTbG90VmlzaXRv
ciYpOwordGVtcGxhdGUgdm9pZCBXZWFrU2V0Ojp2aXNpdChTbG90VmlzaXRvciYpOworCiB9IC8v
IG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtTZXQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrU2V0LmgJKHJl
dmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtTZXQuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIt
MjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTItMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTUxLDcgKzUxLDcgQEAgcHVibGljOgogICAgIGJvb2wgaXNFbXB0
eSgpIGNvbnN0OwogICAgIGJvb2wgaXNUcml2aWFsbHlEZXN0cnVjdGlibGUoKSBjb25zdDsKIAot
ICAgIHZvaWQgdmlzaXQoU2xvdFZpc2l0b3ImKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNp
dG9yPiB2b2lkIHZpc2l0KFZpc2l0b3ImKTsKIAogICAgIHZvaWQgcmVhcCgpOwogICAgIHZvaWQg
c3dlZXAoKTsKQEAgLTExNCw3ICsxMTQsOCBAQCBpbmxpbmUgdm9pZCBXZWFrU2V0OjpsYXN0Q2hh
bmNlVG9GaW5hbGl6CiAgICAgICAgIGJsb2NrLT5sYXN0Q2hhbmNlVG9GaW5hbGl6ZSgpOwogfQog
Ci1pbmxpbmUgdm9pZCBXZWFrU2V0Ojp2aXNpdChTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBs
YXRlPHR5cGVuYW1lIFZpc2l0b3I+CitpbmxpbmUgdm9pZCBXZWFrU2V0Ojp2aXNpdChWaXNpdG9y
JiB2aXNpdG9yKQogewogICAgIGZvciAoV2Vha0Jsb2NrKiBibG9jayA9IG1fYmxvY2tzLmhlYWQo
KTsgYmxvY2s7IGJsb2NrID0gYmxvY2stPm5leHQoKSkKICAgICAgICAgYmxvY2stPnZpc2l0KHZp
c2l0b3IpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1NoYWRvd0No
aWNrZW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRl
ci9TaGFkb3dDaGlja2VuLmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ludGVycHJldGVyL1NoYWRvd0NoaWNrZW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE5IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
NDQwLDcgKzQ0MCw3IEBAIHZvaWQgU2hhZG93Q2hpY2tlbjo6dXBkYXRlKFZNJiB2bSwgQ2FsbEYK
ICAgICAgICAgZGF0YUxvZygiICAgIEFmdGVyIGNsZWFuLXVwOiAiLCAqdGhpcywgIlxuIik7CiB9
CiAKLXZvaWQgU2hhZG93Q2hpY2tlbjo6dmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRv
cikKK3ZvaWQgU2hhZG93Q2hpY2tlbjo6dmlzaXRDaGlsZHJlbihBYnN0cmFjdFNsb3RWaXNpdG9y
JiB2aXNpdG9yKQogewogICAgIGZvciAodW5zaWduZWQgaSA9IG1fbG9nQ3Vyc29yIC0gbV9sb2c7
IGktLTspIHsKICAgICAgICAgSlNPYmplY3QqIGNhbGxlZSA9IG1fbG9nW2ldLmNhbGxlZTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TaGFkb3dDaGlja2VuLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1NoYWRvd0NoaWNr
ZW4uaAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJl
dGVyL1NoYWRvd0NoaWNrZW4uaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNSwxMyArMzUsMTMgQEAKIAogbmFt
ZXNwYWNlIEpTQyB7CiAKK2NsYXNzIEFic3RyYWN0U2xvdFZpc2l0b3I7CiBjbGFzcyBDYWxsRnJh
bWU7CiBjbGFzcyBDb2RlQmxvY2s7CiBjbGFzcyBKU0FycmF5OwogY2xhc3MgSlNPYmplY3Q7CiBj
bGFzcyBKU1Njb3BlOwogY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwotY2xhc3MgU2xvdFZp
c2l0b3I7CiBjbGFzcyBWTTsKIAogLy8gU2hhZG93Q2hpY2tlbiBpcyBhIGxvZyB0aGF0IGNhbiBi
ZSB1c2VkIHRvIHByb2R1Y2UgYSBzaGFkb3cgc3RhY2sgb2YgQ0hJQ0tFTi1zdHlsZSBzdGFjayBm
cmFtZXMuCkBAIC0xOTYsNyArMTk2LDcgQEAgcHVibGljOgogICAgIHRlbXBsYXRlPHR5cGVuYW1l
IEZ1bmN0b3I+CiAgICAgdm9pZCBpdGVyYXRlKFZNJiwgQ2FsbEZyYW1lKiwgY29uc3QgRnVuY3Rv
ciYpOwogICAgIAotICAgIHZvaWQgdmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYpOworICAgIHZv
aWQgdmlzaXRDaGlsZHJlbihBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAgICAgdm9pZCByZXNldCgp
OwogICAgIAogICAgIC8vIEpJVCBzdXBwb3J0LgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9HQ0F3YXJlSklUU3R1YlJvdXRpbmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvR0NBd2FyZUpJVFN0dWJSb3V0aW5lLmNwcAkocmV2aXNpb24gMjcyOTAy
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9HQ0F3YXJlSklUU3R1YlJvdXRpbmUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
Mi0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtNzMsMTAgKzczLDYgQEAgdm9pZCBHQ0F3YXJlSklUU3R1YlJv
dXRpbmU6OmRlbGV0ZUZyb21HQwogICAgIGRlbGV0ZSB0aGlzOwogfQogCi12b2lkIEdDQXdhcmVK
SVRTdHViUm91dGluZTo6bWFya1JlcXVpcmVkT2JqZWN0c0ludGVybmFsKFNsb3RWaXNpdG9yJikK
LXsKLX0KLQogTWFya2luZ0dDQXdhcmVKSVRTdHViUm91dGluZTo6TWFya2luZ0dDQXdhcmVKSVRT
dHViUm91dGluZSgKICAgICBjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUU3R1YlJvdXRp
bmVQdHJUYWc+JiBjb2RlLCBWTSYgdm0sIGNvbnN0IEpTQ2VsbCogb3duZXIsCiAgICAgY29uc3Qg
VmVjdG9yPEpTQ2VsbCo+JiBjZWxscywgQmFnPENhbGxMaW5rSW5mbz4mJiBjYWxsTGlua0luZm9z
KQpAQCAtOTIsMTIgKzg4LDIxIEBAIE1hcmtpbmdHQ0F3YXJlSklUU3R1YlJvdXRpbmU6On5NYXJr
aW5nR0MKIHsKIH0KIAotdm9pZCBNYXJraW5nR0NBd2FyZUpJVFN0dWJSb3V0aW5lOjptYXJrUmVx
dWlyZWRPYmplY3RzSW50ZXJuYWwoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBl
bmFtZSBWaXNpdG9yPgorQUxXQVlTX0lOTElORSB2b2lkIE1hcmtpbmdHQ0F3YXJlSklUU3R1YlJv
dXRpbmU6Om1hcmtSZXF1aXJlZE9iamVjdHNJbnRlcm5hbEltcGwoVmlzaXRvciYgdmlzaXRvcikK
IHsKICAgICBmb3IgKGF1dG8mIGVudHJ5IDogbV9jZWxscykKICAgICAgICAgdmlzaXRvci5hcHBl
bmQoZW50cnkpOwogfQogCit2b2lkIE1hcmtpbmdHQ0F3YXJlSklUU3R1YlJvdXRpbmU6Om1hcmtS
ZXF1aXJlZE9iamVjdHNJbnRlcm5hbChBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorewor
ICAgIG1hcmtSZXF1aXJlZE9iamVjdHNJbnRlcm5hbEltcGwodmlzaXRvcik7Cit9Cit2b2lkIE1h
cmtpbmdHQ0F3YXJlSklUU3R1YlJvdXRpbmU6Om1hcmtSZXF1aXJlZE9iamVjdHNJbnRlcm5hbChT
bG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBtYXJrUmVxdWlyZWRPYmplY3RzSW50ZXJuYWxJ
bXBsKHZpc2l0b3IpOworfQogCiBHQ0F3YXJlSklUU3R1YlJvdXRpbmVXaXRoRXhjZXB0aW9uSGFu
ZGxlcjo6R0NBd2FyZUpJVFN0dWJSb3V0aW5lV2l0aEV4Y2VwdGlvbkhhbmRsZXIoCiAgICAgY29u
c3QgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiYgY29kZSwgVk0m
IHZtLCAgY29uc3QgSlNDZWxsKiBvd25lciwgY29uc3QgVmVjdG9yPEpTQ2VsbCo+JiBjZWxscywg
QmFnPENhbGxMaW5rSW5mbz4mJiBjYWxsTGlua0luZm9zLApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9HQ0F3YXJlSklUU3R1YlJvdXRpbmUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0dDQXdhcmVKSVRTdHViUm91dGluZS5oCShyZXZpc2lvbiAyNzI5
MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0dDQXdhcmVKSVRTdHViUm91dGluZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
Mi0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtNjAsOCArNjAsOSBAQCBwdWJsaWM6CiAgICAgewogICAgICAg
ICByZXR1cm4gYWRvcHRSZWYoKm5ldyBHQ0F3YXJlSklUU3R1YlJvdXRpbmUoY29kZSwgdm0pKTsK
ICAgICB9Ci0gICAgCi0gICAgdm9pZCBtYXJrUmVxdWlyZWRPYmplY3RzKFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KKyAgICB2b2lkIG1hcmtS
ZXF1aXJlZE9iamVjdHMoVmlzaXRvciYgdmlzaXRvcikKICAgICB7CiAgICAgICAgIG1hcmtSZXF1
aXJlZE9iamVjdHNJbnRlcm5hbCh2aXNpdG9yKTsKICAgICB9CkBAIC03MSw3ICs3Miw4IEBAIHB1
YmxpYzoKIHByb3RlY3RlZDoKICAgICB2b2lkIG9ic2VydmVaZXJvUmVmQ291bnQoKSBvdmVycmlk
ZTsKICAgICAKLSAgICB2aXJ0dWFsIHZvaWQgbWFya1JlcXVpcmVkT2JqZWN0c0ludGVybmFsKFNs
b3RWaXNpdG9yJik7CisgICAgdmlydHVhbCB2b2lkIG1hcmtSZXF1aXJlZE9iamVjdHNJbnRlcm5h
bChBYnN0cmFjdFNsb3RWaXNpdG9yJikgeyB9CisgICAgdmlydHVhbCB2b2lkIG1hcmtSZXF1aXJl
ZE9iamVjdHNJbnRlcm5hbChTbG90VmlzaXRvciYpIHsgfQogCiBwcml2YXRlOgogICAgIGZyaWVu
ZCBjbGFzcyBKSVRTdHViUm91dGluZVNldDsKQEAgLTg5LDcgKzkxLDkgQEAgcHVibGljOgogICAg
IH5NYXJraW5nR0NBd2FyZUpJVFN0dWJSb3V0aW5lKCkgb3ZlcnJpZGU7CiAgICAgCiBwcm90ZWN0
ZWQ6Ci0gICAgdm9pZCBtYXJrUmVxdWlyZWRPYmplY3RzSW50ZXJuYWwoU2xvdFZpc2l0b3ImKSBv
dmVycmlkZTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIG1hcmtSZXF1aXJl
ZE9iamVjdHNJbnRlcm5hbEltcGwoVmlzaXRvciYpOworICAgIHZvaWQgbWFya1JlcXVpcmVkT2Jq
ZWN0c0ludGVybmFsKEFic3RyYWN0U2xvdFZpc2l0b3ImKSBmaW5hbDsKKyAgICB2b2lkIG1hcmtS
ZXF1aXJlZE9iamVjdHNJbnRlcm5hbChTbG90VmlzaXRvciYpIGZpbmFsOwogCiBwcml2YXRlOgog
ICAgIFZlY3RvcjxXcml0ZUJhcnJpZXI8SlNDZWxsPj4gbV9jZWxsczsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUV29ya2xpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUV29ya2xpc3QuY3BwCShyZXZpc2lvbiAyNzI5MDIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFdvcmtsaXN0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxOSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRp
bmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUG9seW1vcnBo
aWNDYWxsU3R1YlJvdXRpbmUuY3BwCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L1BvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxOCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTEzNSwxMiArMTM1LDIyIEBAIGJvb2wgUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmU6
OnZpc2l0V2UKICAgICByZXR1cm4gaXNTdGlsbExpdmU7CiB9CiAKLXZvaWQgUG9seW1vcnBoaWND
YWxsU3R1YlJvdXRpbmU6Om1hcmtSZXF1aXJlZE9iamVjdHNJbnRlcm5hbChTbG90VmlzaXRvciYg
dmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+CitBTFdBWVNfSU5MSU5FIHZvaWQg
UG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmU6Om1hcmtSZXF1aXJlZE9iamVjdHNJbnRlcm5hbElt
cGwoVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBmb3IgKGF1dG8mIHZhcmlhbnQgOiBtX3Zhcmlh
bnRzKQogICAgICAgICB2aXNpdG9yLmFwcGVuZCh2YXJpYW50KTsKIH0KIAordm9pZCBQb2x5bW9y
cGhpY0NhbGxTdHViUm91dGluZTo6bWFya1JlcXVpcmVkT2JqZWN0c0ludGVybmFsKEFic3RyYWN0
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgbWFya1JlcXVpcmVkT2JqZWN0c0ludGVybmFs
SW1wbCh2aXNpdG9yKTsKK30KK3ZvaWQgUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmU6Om1hcmtS
ZXF1aXJlZE9iamVjdHNJbnRlcm5hbChTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBtYXJr
UmVxdWlyZWRPYmplY3RzSW50ZXJuYWxJbXBsKHZpc2l0b3IpOworfQorCiB9IC8vIG5hbWVzcGFj
ZSBKU0MKIAogI2VuZGlmIC8vIEVOQUJMRShKSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L1BvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9Qb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZS5oCShyZXZpc2lv
biAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1BvbHltb3JwaGljQ2FsbFN0
dWJSb3V0aW5lLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDE1LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE1LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMDUsNiArMTA1LDggQEAgcHVibGljOgog
ICAgIGJvb2wgdmlzaXRXZWFrKFZNJikgZmluYWw7CiAKIHByaXZhdGU6CisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCBtYXJrUmVxdWlyZWRPYmplY3RzSW50ZXJuYWxJbXBsKFZp
c2l0b3ImKTsKKyAgICB2b2lkIG1hcmtSZXF1aXJlZE9iamVjdHNJbnRlcm5hbChBYnN0cmFjdFNs
b3RWaXNpdG9yJikgZmluYWw7CiAgICAgdm9pZCBtYXJrUmVxdWlyZWRPYmplY3RzSW50ZXJuYWwo
U2xvdFZpc2l0b3ImKSBmaW5hbDsKIAogICAgIFZlY3RvcjxXcml0ZUJhcnJpZXI8SlNDZWxsPiwg
Mj4gbV92YXJpYW50czsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Fic3Ry
YWN0TW9kdWxlUmVjb3JkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9BYnN0cmFjdE1vZHVsZVJlY29yZC5jcHAJKHJldmlzaW9uIDI3MjkwMikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Fic3RyYWN0TW9kdWxlUmVjb3JkLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAx
OSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUt
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTYwLDcgKzYwLDggQEAgdm9pZCBBYnN0cmFjdE1vZHVsZVJlY29yZDo6
ZmluaXNoQ3JlYXRpbwogICAgIHB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2
bSwgImRlcGVuZGVuY2llc01hcCJfcyksIG1fZGVwZW5kZW5jaWVzTWFwLmdldCgpKTsKIH0KIAot
dm9pZCBBYnN0cmFjdE1vZHVsZVJlY29yZDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgQWJz
dHJhY3RNb2R1bGVSZWNvcmQ6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRv
ciYgdmlzaXRvcikKIHsKICAgICBBYnN0cmFjdE1vZHVsZVJlY29yZCogdGhpc09iamVjdCA9IGpz
Q2FzdDxBYnN0cmFjdE1vZHVsZVJlY29yZCo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1Rf
SU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTcwLDYgKzcxLDggQEAgdm9pZCBBYnN0
cmFjdE1vZHVsZVJlY29yZDo6dmlzaXRDaGlsZHJlbgogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNP
YmplY3QtPm1fZGVwZW5kZW5jaWVzTWFwKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEFi
c3RyYWN0TW9kdWxlUmVjb3JkKTsKKwogdm9pZCBBYnN0cmFjdE1vZHVsZVJlY29yZDo6YXBwZW5k
UmVxdWVzdGVkTW9kdWxlKGNvbnN0IElkZW50aWZpZXImIG1vZHVsZU5hbWUpCiB7CiAgICAgbV9y
ZXF1ZXN0ZWRNb2R1bGVzLmFkZChtb2R1bGVOYW1lLmltcGwoKSk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9BYnN0cmFjdE1vZHVsZVJlY29yZC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Fic3RyYWN0TW9kdWxlUmVjb3JkLmgJKHJl
dmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Fic3RyYWN0
TW9kdWxlUmVjb3JkLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTM2LDcgKzEzNiw3IEBAIHByb3RlY3RlZDoK
ICAgICBBYnN0cmFjdE1vZHVsZVJlY29yZChWTSYsIFN0cnVjdHVyZSosIGNvbnN0IElkZW50aWZp
ZXImKTsKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTR2xvYmFsT2JqZWN0KiwgVk0mKTsKIAot
ICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAg
ICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgdm9pZCBzZXRNb2R1bGVFbnZpcm9ubWVu
dChKU0dsb2JhbE9iamVjdCosIEpTTW9kdWxlRW52aXJvbm1lbnQqKTsKIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJnTGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJnTGlzdC5jcHAJKHJldmlzaW9uIDI3MjkwMikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FyZ0xpc3QuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAxNyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTUx
LDcgKzUxLDggQEAgdm9pZCBBcmdMaXN0OjpnZXRTbGljZShpbnQgc3RhcnRJbmRleCwgQQogICAg
IHJlc3VsdC5tX2FyZ0NvdW50ID0gIG1fYXJnQ291bnQgLSBzdGFydEluZGV4OwogfQogCi12b2lk
IE1hcmtlZEFyZ3VtZW50QnVmZmVyOjptYXJrTGlzdHMoU2xvdFZpc2l0b3ImIHZpc2l0b3IsIExp
c3RTZXQmIG1hcmtTZXQpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBNYXJrZWRB
cmd1bWVudEJ1ZmZlcjo6bWFya0xpc3RzKFZpc2l0b3ImIHZpc2l0b3IsIExpc3RTZXQmIG1hcmtT
ZXQpCiB7CiAgICAgTGlzdFNldDo6aXRlcmF0b3IgZW5kID0gbWFya1NldC5lbmQoKTsKICAgICBm
b3IgKExpc3RTZXQ6Oml0ZXJhdG9yIGl0ID0gbWFya1NldC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsr
aXQpIHsKQEAgLTYxLDYgKzYyLDkgQEAgdm9pZCBNYXJrZWRBcmd1bWVudEJ1ZmZlcjo6bWFya0xp
c3RzKFNsbwogICAgIH0KIH0KIAordGVtcGxhdGUgdm9pZCBNYXJrZWRBcmd1bWVudEJ1ZmZlcjo6
bWFya0xpc3RzKEFic3RyYWN0U2xvdFZpc2l0b3ImLCBMaXN0U2V0Jik7Cit0ZW1wbGF0ZSB2b2lk
IE1hcmtlZEFyZ3VtZW50QnVmZmVyOjptYXJrTGlzdHMoU2xvdFZpc2l0b3ImLCBMaXN0U2V0Jik7
CisKIHZvaWQgTWFya2VkQXJndW1lbnRCdWZmZXI6OnNsb3dFbnN1cmVDYXBhY2l0eShzaXplX3Qg
cmVxdWVzdGVkQ2FwYWNpdHkpCiB7CiAgICAgc2V0TmVlZHNPdmVyZmxvd0NoZWNrKCk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcmdMaXN0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJnTGlzdC5oCShyZXZpc2lvbiAyNzI5MDIp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcmdMaXN0LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAxIEhhcnJp
IFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMTcgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwMy0yMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBA
IC0xMTgsNyArMTE4LDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0K
ICAgICAgICAgCi0gICAgc3RhdGljIHZvaWQgbWFya0xpc3RzKFNsb3RWaXNpdG9yJiwgTGlzdFNl
dCYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHN0YXRpYyB2b2lkIG1hcmtMaXN0
cyhWaXNpdG9yJiwgTGlzdFNldCYpOwogCiAgICAgdm9pZCBlbnN1cmVDYXBhY2l0eShzaXplX3Qg
cmVxdWVzdGVkQ2FwYWNpdHkpCiAgICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQ2FjaGVhYmxlSWRlbnRpZmllci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0NhY2hlYWJsZUlkZW50aWZpZXIuaAkocmV2aXNpb24gMjcyOTAyKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVhYmxlSWRlbnRpZmllci5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAyMCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAtMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTM5LDEwICszOSwxMCBAQCB1c2luZyBXVEY6OlVuaXF1ZWRTdHJpbmdJbXBs
OwogCiBuYW1lc3BhY2UgSlNDIHsKIAorY2xhc3MgQWJzdHJhY3RTbG90VmlzaXRvcjsKIGNsYXNz
IENvZGVCbG9jazsKIGNsYXNzIElkZW50aWZpZXI7CiBjbGFzcyBKU0NlbGw7Ci1jbGFzcyBTbG90
VmlzaXRvcjsKIAogY2xhc3MgQ2FjaGVhYmxlSWRlbnRpZmllciB7CiBwdWJsaWM6CkBAIC04Nyw3
ICs4Nyw3IEBAIHB1YmxpYzoKIAogICAgIHVpbnRwdHJfdCByYXdCaXRzKCkgY29uc3QgeyByZXR1
cm4gbV9iaXRzOyB9CiAKLSAgICBpbmxpbmUgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRv
ciYpIGNvbnN0OworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IGlubGluZSB2b2lkIHZp
c2l0QWdncmVnYXRlKFZpc2l0b3ImKSBjb25zdDsKIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZv
aWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9DYWNoZWFibGVJZGVudGlmaWVySW5saW5lcy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlYWJsZUlkZW50aWZpZXJJbmxpbmVzLmgJ
KHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hl
YWJsZUlkZW50aWZpZXJJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAyMC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTM3LDcgKzEzNyw4IEBAIGlu
bGluZSB2b2lkIENhY2hlYWJsZUlkZW50aWZpZXI6OnNldFVpZEIKICAgICBtX2JpdHMgPSBiaXR3
aXNlX2Nhc3Q8dWludHB0cl90Pih1aWQpIHwgc191aWRUYWc7CiB9CiAKLWlubGluZSB2b2lkIENh
Y2hlYWJsZUlkZW50aWZpZXI6OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBj
b25zdAordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK2lubGluZSB2b2lkIENhY2hlYWJsZUlk
ZW50aWZpZXI6OnZpc2l0QWdncmVnYXRlKFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0CiB7CiAgICAg
aWYgKG1fYml0cyAmJiBpc0NlbGwoKSkKICAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJl
ZChjZWxsKCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xhc3NJbmZv
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xhc3NJbmZv
LmgJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Ns
YXNzSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqICBDb3B5cmln
aHQgKEMpIDE5OTktMjAwMSBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQogICogIENvcHly
aWdodCAoQykgMjAwMSBQZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQotICogIENvcHlyaWdodCAo
QykgMjAwMy0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmln
aHQgKEMpIDIwMDMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYwpAQCAtNDQsOSArNDQsNiBAQCBzdHJ1Y3QgTWV0aG9kVGFibGUgewogICAg
IHVzaW5nIERlc3Ryb3lGdW5jdGlvblB0ciA9IHZvaWQgKCopKEpTQ2VsbCopOwogICAgIERlc3Ry
b3lGdW5jdGlvblB0ciBNRVRIT0RfVEFCTEVfRU5UUlkoZGVzdHJveSk7CiAKLSAgICB1c2luZyBW
aXNpdENoaWxkcmVuRnVuY3Rpb25QdHIgPSB2b2lkICgqKShKU0NlbGwqLCBTbG90VmlzaXRvciYp
OwotICAgIFZpc2l0Q2hpbGRyZW5GdW5jdGlvblB0ciBNRVRIT0RfVEFCTEVfRU5UUlkodmlzaXRD
aGlsZHJlbik7Ci0KICAgICB1c2luZyBHZXRDYWxsRGF0YUZ1bmN0aW9uUHRyID0gQ2FsbERhdGEg
KCopKEpTQ2VsbCopOwogICAgIEdldENhbGxEYXRhRnVuY3Rpb25QdHIgTUVUSE9EX1RBQkxFX0VO
VFJZKGdldENhbGxEYXRhKTsKIApAQCAtMTIwLDggKzExNywyMyBAQCBzdHJ1Y3QgTWV0aG9kVGFi
bGUgewogICAgIHVzaW5nIEVzdGltYXRlZFNpemVGdW5jdGlvblB0ciA9IHNpemVfdCAoKikoSlND
ZWxsKiwgVk0mKTsKICAgICBFc3RpbWF0ZWRTaXplRnVuY3Rpb25QdHIgTUVUSE9EX1RBQkxFX0VO
VFJZKGVzdGltYXRlZFNpemUpOwogCisgICAgdXNpbmcgVmlzaXRDaGlsZHJlbkZ1bmN0aW9uUHRy
ID0gdm9pZCAoKikoSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBWaXNpdENoaWxkcmVuRnVu
Y3Rpb25QdHIgTUVUSE9EX1RBQkxFX0VOVFJZKHZpc2l0Q2hpbGRyZW5XaXRoU2xvdFZpc2l0b3Ip
OworCisgICAgdXNpbmcgVmlzaXRDaGlsZHJlbldpdGhBYnN0cmFjdFNsb3RWaXNpdG9yUHRyID0g
dm9pZCAoKikoSlNDZWxsKiwgQWJzdHJhY3RTbG90VmlzaXRvciYpOworICAgIFZpc2l0Q2hpbGRy
ZW5XaXRoQWJzdHJhY3RTbG90VmlzaXRvclB0ciBNRVRIT0RfVEFCTEVfRU5UUlkodmlzaXRDaGls
ZHJlbldpdGhBYnN0cmFjdFNsb3RWaXNpdG9yKTsKKworICAgIEFMV0FZU19JTkxJTkUgdm9pZCB2
aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0IHsg
dmlzaXRDaGlsZHJlbldpdGhTbG90VmlzaXRvcihjZWxsLCB2aXNpdG9yKTsgfQorICAgIEFMV0FZ
U19JTkxJTkUgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgQWJzdHJhY3RTbG90Vmlz
aXRvciYgdmlzaXRvcikgY29uc3QgeyB2aXNpdENoaWxkcmVuV2l0aEFic3RyYWN0U2xvdFZpc2l0
b3IoY2VsbCwgdmlzaXRvcik7IH0KKwogICAgIHVzaW5nIFZpc2l0T3V0cHV0Q29uc3RyYWludHNQ
dHIgPSB2b2lkICgqKShKU0NlbGwqLCBTbG90VmlzaXRvciYpOwotICAgIFZpc2l0T3V0cHV0Q29u
c3RyYWludHNQdHIgTUVUSE9EX1RBQkxFX0VOVFJZKHZpc2l0T3V0cHV0Q29uc3RyYWludHMpOwor
ICAgIFZpc2l0T3V0cHV0Q29uc3RyYWludHNQdHIgTUVUSE9EX1RBQkxFX0VOVFJZKHZpc2l0T3V0
cHV0Q29uc3RyYWludHNXaXRoU2xvdFZpc2l0b3IpOworCisgICAgdXNpbmcgVmlzaXRPdXRwdXRD
b25zdHJhaW50c1dpdGhBYnN0cmFjdFNsb3RWaXNpdG9yUHRyID0gdm9pZCAoKikoSlNDZWxsKiwg
QWJzdHJhY3RTbG90VmlzaXRvciYpOworICAgIFZpc2l0T3V0cHV0Q29uc3RyYWludHNXaXRoQWJz
dHJhY3RTbG90VmlzaXRvclB0ciBNRVRIT0RfVEFCTEVfRU5UUlkodmlzaXRPdXRwdXRDb25zdHJh
aW50c1dpdGhBYnN0cmFjdFNsb3RWaXNpdG9yKTsKKworICAgIEFMV0FZU19JTkxJTkUgdm9pZCB2
aXNpdE91dHB1dENvbnN0cmFpbnRzKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3Ip
IGNvbnN0IHsgdmlzaXRPdXRwdXRDb25zdHJhaW50c1dpdGhTbG90VmlzaXRvcihjZWxsLCB2aXNp
dG9yKTsgfQorICAgIEFMV0FZU19JTkxJTkUgdm9pZCB2aXNpdE91dHB1dENvbnN0cmFpbnRzKEpT
Q2VsbCogY2VsbCwgQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikgY29uc3QgeyB2aXNpdE91
dHB1dENvbnN0cmFpbnRzV2l0aEFic3RyYWN0U2xvdFZpc2l0b3IoY2VsbCwgdmlzaXRvcik7IH0K
IH07CiAKICNkZWZpbmUgQ1JFQVRFX01FTUJFUl9DSEVDS0VSKG1lbWJlcikgXApAQCAtMTQ3LDcg
KzE1OSw2IEBAIHN0cnVjdCBNZXRob2RUYWJsZSB7CiAgICAgSlNDYXN0aW5nSGVscGVyczo6SW5o
ZXJpdHNUcmFpdHM8Q2xhc3NOYW1lPjo6dHlwZVJhbmdlLCBcCiAgICAgeyBcCiAgICAgICAgICZD
bGFzc05hbWU6OmRlc3Ryb3ksIFwKLSAgICAgICAgJkNsYXNzTmFtZTo6dmlzaXRDaGlsZHJlbiwg
XAogICAgICAgICAmQ2xhc3NOYW1lOjpnZXRDYWxsRGF0YSwgXAogICAgICAgICAmQ2xhc3NOYW1l
OjpnZXRDb25zdHJ1Y3REYXRhLCBcCiAgICAgICAgICZDbGFzc05hbWU6OnB1dCwgXApAQCAtMTcz
LDYgKzE4NCw5IEBAIHN0cnVjdCBNZXRob2RUYWJsZSB7CiAgICAgICAgICZDbGFzc05hbWU6OmR1
bXBUb1N0cmVhbSwgXAogICAgICAgICAmQ2xhc3NOYW1lOjphbmFseXplSGVhcCwgXAogICAgICAg
ICAmQ2xhc3NOYW1lOjplc3RpbWF0ZWRTaXplLCBcCisgICAgICAgICZDbGFzc05hbWU6OnZpc2l0
Q2hpbGRyZW4sIFwKKyAgICAgICAgJkNsYXNzTmFtZTo6dmlzaXRDaGlsZHJlbiwgXAorICAgICAg
ICAmQ2xhc3NOYW1lOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzLCBcCiAgICAgICAgICZDbGFzc05h
bWU6OnZpc2l0T3V0cHV0Q29uc3RyYWludHMsIFwKICAgICB9LCBcCiAgICAgQ2xhc3NOYW1lOjpU
eXBlZEFycmF5U3RvcmFnZVR5cGUsIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0Nsb25lZEFyZ3VtZW50cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQ2xvbmVkQXJndW1lbnRzLmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xvbmVkQXJndW1lbnRzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTI2Nyw3ICsyNjcsOCBAQCB2b2lkIENsb25lZEFyZ3VtZW50czo6bWF0ZXJpYWxp
emVTcGVjaWFsCiAgICAgICAgIG1hdGVyaWFsaXplU3BlY2lhbHMoZ2xvYmFsT2JqZWN0KTsKIH0K
IAotdm9pZCBDbG9uZWRBcmd1bWVudHM6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90
VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIENsb25l
ZEFyZ3VtZW50czo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNp
dG9yKQogewogICAgIENsb25lZEFyZ3VtZW50cyogdGhpc09iamVjdCA9IGpzQ2FzdDxDbG9uZWRB
cmd1bWVudHMqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmpl
Y3QsIGluZm8oKSk7CkBAIC0yNzUsNSArMjc2LDcgQEAgdm9pZCBDbG9uZWRBcmd1bWVudHM6OnZp
c2l0Q2hpbGRyZW4oSlNDZQogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fY2FsbGVl
KTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKENsb25lZEFyZ3VtZW50cyk7CisKIH0gLy8g
bmFtZXNwYWNlIEpTQwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DbG9u
ZWRBcmd1bWVudHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9DbG9uZWRBcmd1bWVudHMuaAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQ2xvbmVkQXJndW1lbnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02Miw3
ICs2Miw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUo
Vk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUgcHJvdG90eXBlKTsKICAgICBzdGF0aWMgU3Ry
dWN0dXJlKiBjcmVhdGVTbG93UHV0U3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1Zh
bHVlIHByb3RvdHlwZSk7CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCos
IFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIERFQ0xB
UkVfSU5GTzsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGlyZWN0QXJn
dW1lbnRzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9E
aXJlY3RBcmd1bWVudHMuY3BwCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9EaXJlY3RBcmd1bWVudHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE4IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtOTAs
NyArOTAsOCBAQCBzaXplX3QgRGlyZWN0QXJndW1lbnRzOjplc3RpbWF0ZWRTaXplKEpTCiAgICAg
cmV0dXJuIEJhc2U6OmVzdGltYXRlZFNpemUoY2VsbCwgdm0pICsgbWFwcGVkQXJndW1lbnRzU2l6
ZSArIG1vZGlmaWVkQXJndW1lbnRzU2l6ZTsKIH0KIAotdm9pZCBEaXJlY3RBcmd1bWVudHM6OnZp
c2l0Q2hpbGRyZW4oSlNDZWxsKiB0aGlzQ2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1w
bGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBEaXJlY3RBcmd1bWVudHM6OnZpc2l0Q2hpbGRy
ZW5JbXBsKEpTQ2VsbCogdGhpc0NlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgRGlyZWN0
QXJndW1lbnRzKiB0aGlzT2JqZWN0ID0gc3RhdGljX2Nhc3Q8RGlyZWN0QXJndW1lbnRzKj4odGhp
c0NlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygp
KTsKQEAgLTEwNCw2ICsxMDUsOCBAQCB2b2lkIERpcmVjdEFyZ3VtZW50czo6dmlzaXRDaGlsZHJl
bihKU0NlCiAgICAgR2VuZXJpY0FyZ3VtZW50czxEaXJlY3RBcmd1bWVudHM+Ojp2aXNpdENoaWxk
cmVuKHRoaXNDZWxsLCB2aXNpdG9yKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKERpcmVj
dEFyZ3VtZW50cyk7CisKIFN0cnVjdHVyZSogRGlyZWN0QXJndW1lbnRzOjpjcmVhdGVTdHJ1Y3R1
cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlw
ZSkKIHsKICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJv
dG90eXBlLCBUeXBlSW5mbyhEaXJlY3RBcmd1bWVudHNUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGlu
Zm8oKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EaXJlY3RBcmd1bWVu
dHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EaXJlY3RB
cmd1bWVudHMuaAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvRGlyZWN0QXJndW1lbnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02NSw3ICs2NSw3IEBA
IHB1YmxpYzoKICAgICBzdGF0aWMgRGlyZWN0QXJndW1lbnRzKiBjcmVhdGVCeUNvcHlpbmcoSlNH
bG9iYWxPYmplY3QqLCBDYWxsRnJhbWUqKTsKIAogICAgIHN0YXRpYyBzaXplX3QgZXN0aW1hdGVk
U2l6ZShKU0NlbGwqLCBWTSYpOwotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogICAgIAogICAg
IHVpbnQzMl90IGludGVybmFsTGVuZ3RoKCkgY29uc3QKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9FdmFsRXhlY3V0YWJsZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXZhbEV4ZWN1dGFibGUuY3BwCShyZXZpc2lvbiAy
NzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FdmFsRXhlY3V0YWJsZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDA5LCAyMDEwLCAyMDEzLCAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01MCw3ICs1MCw4IEBAIGF1
dG8gRXZhbEV4ZWN1dGFibGU6OmVuc3VyZVRlbXBsYXRlT2JqZWMKICAgICByZXR1cm4gZW5zdXJl
VGVtcGxhdGVPYmplY3RNYXBJbXBsKG1fdGVtcGxhdGVPYmplY3RNYXApOwogfQogCi12b2lkIEV2
YWxFeGVjdXRhYmxlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZp
c2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBFdmFsRXhlY3V0YWJsZTo6
dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAg
IEV2YWxFeGVjdXRhYmxlKiB0aGlzT2JqZWN0ID0ganNDYXN0PEV2YWxFeGVjdXRhYmxlKj4oY2Vs
bCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpA
QCAtNjQsNCArNjUsNiBAQCB2b2lkIEV2YWxFeGVjdXRhYmxlOjp2aXNpdENoaWxkcmVuKEpTQ2Vs
CiAgICAgfQogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oRXZhbEV4ZWN1dGFibGUpOworCiB9
IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V2
YWxFeGVjdXRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvRXZhbEV4ZWN1dGFibGUuaAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvRXZhbEV4ZWN1dGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTc5LDcg
Kzc5LDcgQEAgcHJvdGVjdGVkOgogICAgIHVzaW5nIEJhc2U6OmZpbmlzaENyZWF0aW9uOwogICAg
IEV2YWxFeGVjdXRhYmxlKEpTR2xvYmFsT2JqZWN0KiwgY29uc3QgU291cmNlQ29kZSYsIGJvb2wg
aW5TdHJpY3RDb250ZXh0LCBEZXJpdmVkQ29udGV4dFR5cGUsIGJvb2wgaXNBcnJvd0Z1bmN0aW9u
Q29udGV4dCwgYm9vbCBpc0luc2lkZU9yZGluYXJ5RnVuY3Rpb24sIEV2YWxDb250ZXh0VHlwZSwg
TmVlZHNDbGFzc0ZpZWxkSW5pdGlhbGl6ZXIsIFByaXZhdGVCcmFuZFJlcXVpcmVtZW50KTsKIAot
ICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAg
ICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgdW5zaWduZWQgbV9uZWVkc0NsYXNzRmll
bGRJbml0aWFsaXplciA6IDE7CiAgICAgdW5zaWduZWQgbV9wcml2YXRlQnJhbmRSZXF1aXJlbWVu
dCA6IDE7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGNlcHRpb24uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbi5j
cHAJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4
Y2VwdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDE1LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE1LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01Myw3ICs1Myw4IEBAIFN0cnVjdHVyZSog
RXhjZXB0aW9uOjpjcmVhdGVTdHJ1Y3R1cmUoVk0KICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVh
dGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhDZWxsVHlwZSwgU3RydWN0
dXJlRmxhZ3MpLCBpbmZvKCkpOwogfQogCi12b2lkIEV4Y2VwdGlvbjo6dmlzaXRDaGlsZHJlbihK
U0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlz
aXRvcj4KK3ZvaWQgRXhjZXB0aW9uOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZp
c2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgRXhjZXB0aW9uKiB0aGlzT2JqZWN0ID0ganNDYXN0PEV4
Y2VwdGlvbio+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVj
dCwgaW5mbygpKTsKQEAgLTY0LDYgKzY1LDggQEAgdm9pZCBFeGNlcHRpb246OnZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKiBjZQogICAgICAgICBmcmFtZS52aXNpdENoaWxkcmVuKHZpc2l0b3IpOwogfQog
CitERUZJTkVfVklTSVRfQ0hJTERSRU4oRXhjZXB0aW9uKTsKKwogRXhjZXB0aW9uOjpFeGNlcHRp
b24oVk0mIHZtKQogICAgIDogQmFzZSh2bSwgdm0uZXhjZXB0aW9uU3RydWN0dXJlLmdldCgpKQog
ewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9uLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9uLmgJKHJldmlz
aW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbi5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
NS0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtNTEsNyArNTEsNyBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMg
U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUg
cHJvdG90eXBlKTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xv
dFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgREVDTEFSRV9F
WFBPUlRfSU5GTzsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rp
b25FeGVjdXRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9GdW5jdGlvbkV4ZWN1dGFibGUuY3BwCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvbkV4ZWN1dGFibGUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOS0yMDE4IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtNjcsNyArNjcsOCBAQCBGdW5jdGlvbkNvZGVCbG9jayogRnVuY3Rpb25FeGVjdXRh
YmxlOjpiCiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEZ1bmN0aW9uQ29kZUJsb2NrKj4oZWRnZS0+
Y29kZUJsb2NrKCktPmJhc2VsaW5lQWx0ZXJuYXRpdmUoKSk7CiB9CiAKLXZvaWQgRnVuY3Rpb25F
eGVjdXRhYmxlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0
b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBGdW5jdGlvbkV4ZWN1dGFibGU6
OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAg
ICBGdW5jdGlvbkV4ZWN1dGFibGUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8RnVuY3Rpb25FeGVjdXRh
YmxlKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBp
bmZvKCkpOwpAQCAtODYsNiArODcsOCBAQCB2b2lkIEZ1bmN0aW9uRXhlY3V0YWJsZTo6dmlzaXRD
aGlsZHJlbihKCiAgICAgfQogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oRnVuY3Rpb25FeGVj
dXRhYmxlKTsKKwogRnVuY3Rpb25FeGVjdXRhYmxlKiBGdW5jdGlvbkV4ZWN1dGFibGU6OmZyb21H
bG9iYWxDb2RlKAogICAgIGNvbnN0IElkZW50aWZpZXImIG5hbWUsIEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgCiAgICAgSlNPYmplY3QqJiBl
eGNlcHRpb24sIGludCBvdmVycmlkZUxpbmVOdW1iZXIsIE9wdGlvbmFsPGludD4gZnVuY3Rpb25D
b25zdHJ1Y3RvclBhcmFtZXRlcnNFbmRQb3NpdGlvbikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZS5oCShyZXZpc2lvbiAyNzI5
MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvbkV4ZWN1dGFibGUu
aAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDktMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDktMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTE2Niw3ICsxNjYsNyBAQCBwdWJsaWM6CiAgICAgSlNQYXJz
ZXJTY3JpcHRNb2RlIHNjcmlwdE1vZGUoKSBjb25zdCB7IHJldHVybiBtX3VubGlua2VkRXhlY3V0
YWJsZS0+c2NyaXB0TW9kZSgpOyB9CiAgICAgU291cmNlQ29kZSBjbGFzc1NvdXJjZSgpIGNvbnN0
IHsgcmV0dXJuIG1fdW5saW5rZWRFeGVjdXRhYmxlLT5jbGFzc1NvdXJjZSgpOyB9CiAKLSAgICBz
dGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVD
TEFSRV9WSVNJVF9DSElMRFJFTjsKICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1
cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvKQog
ICAgIHsKICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3Qs
IHByb3RvLCBUeXBlSW5mbyhGdW5jdGlvbkV4ZWN1dGFibGVUeXBlLCBTdHJ1Y3R1cmVGbGFncyks
IGluZm8oKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvblJh
cmVEYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9G
dW5jdGlvblJhcmVEYXRhLmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25SYXJlRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTkgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01
MSw3ICs1MSw4IEBAIFN0cnVjdHVyZSogRnVuY3Rpb25SYXJlRGF0YTo6Y3JlYXRlU3RydWMKICAg
ICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBU
eXBlSW5mbyhDZWxsVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwogfQogCi12b2lkIEZ1
bmN0aW9uUmFyZURhdGE6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYg
dmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEZ1bmN0aW9uUmFyZURh
dGE6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsK
ICAgICBGdW5jdGlvblJhcmVEYXRhKiByYXJlRGF0YSA9IGpzQ2FzdDxGdW5jdGlvblJhcmVEYXRh
Kj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjZWxsLCBpbmZvKCkpOwpA
QCAtNjMsNiArNjQsOCBAQCB2b2lkIEZ1bmN0aW9uUmFyZURhdGE6OnZpc2l0Q2hpbGRyZW4oSlND
CiAgICAgdmlzaXRvci5hcHBlbmQocmFyZURhdGEtPm1fZXhlY3V0YWJsZSk7CiB9CiAKK0RFRklO
RV9WSVNJVF9DSElMRFJFTihGdW5jdGlvblJhcmVEYXRhKTsKKwogRnVuY3Rpb25SYXJlRGF0YTo6
RnVuY3Rpb25SYXJlRGF0YShWTSYgdm0sIEV4ZWN1dGFibGVCYXNlKiBleGVjdXRhYmxlKQogICAg
IDogQmFzZSh2bSwgdm0uZnVuY3Rpb25SYXJlRGF0YVN0cnVjdHVyZS5nZXQoKSkKICAgICAsIG1f
b2JqZWN0QWxsb2NhdGlvblByb2ZpbGUoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvRnVuY3Rpb25SYXJlRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0Z1bmN0aW9uUmFyZURhdGEuaAkocmV2aXNpb24gMjcyOTAyKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25SYXJlRGF0YS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE5IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtNjUsNyArNjUsNyBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgU3RydWN0dXJlKiBj
cmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUgcHJvdG90eXBlKTsK
IAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsK
KyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgREVDTEFSRV9JTkZPOwogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljQXJndW1lbnRzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50cy5o
CShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5l
cmljQXJndW1lbnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDE1LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE1LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00NCw3ICs0NCw3IEBAIHByb3RlY3Rl
ZDoKICAgICB7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwq
LCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAgICAgc3RhdGlj
IGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9w
ZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwogICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5
U2xvdEJ5SW5kZXgoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIHVuc2lnbmVkIHByb3BlcnR5
TmFtZSwgUHJvcGVydHlTbG90Jik7CiAgICAgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1l
cyhKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lQXJyYXkmLCBEb250RW51
bVByb3BlcnRpZXNNb2RlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dl
bmVyaWNBcmd1bWVudHNJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50c0lubGluZXMuaAkocmV2aXNpb24gMjcyOTAyKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50c0lubGluZXMu
aAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTUtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTUtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTMxLDcgKzMxLDggQEAKIG5hbWVzcGFjZSBKU0MgewogCiB0
ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlPgotdm9pZCBHZW5lcmljQXJndW1lbnRzPFR5cGU+Ojp2aXNp
dENoaWxkcmVuKEpTQ2VsbCogdGhpc0NlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxh
dGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgR2VuZXJpY0FyZ3VtZW50czxUeXBlPjo6dmlzaXRD
aGlsZHJlbkltcGwoSlNDZWxsKiB0aGlzQ2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBU
eXBlKiB0aGlzT2JqZWN0ID0gc3RhdGljX2Nhc3Q8VHlwZSo+KHRoaXNDZWxsKTsKICAgICBBU1NF
UlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC00MSw2ICs0Miw4
IEBAIHZvaWQgR2VuZXJpY0FyZ3VtZW50czxUeXBlPjo6dmlzaXRDaGlsZHIKICAgICAgICAgdmlz
aXRvci5tYXJrQXV4aWxpYXJ5KHRoaXNPYmplY3QtPm1fbW9kaWZpZWRBcmd1bWVudHNEZXNjcmlw
dG9yLmdldFVuc2FmZSgpKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOX1dJVEhfTU9ESUZJ
RVIodGVtcGxhdGU8dHlwZW5hbWUgVHlwZT4sIEdlbmVyaWNBcmd1bWVudHM8VHlwZT4pOworCiB0
ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlPgogYm9vbCBHZW5lcmljQXJndW1lbnRzPFR5cGU+OjpnZXRP
d25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqIG9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgUHJvcGVydHlOYW1lIGlkZW50LCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZXR0ZXJTZXR0ZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dldHRlclNldHRlci5jcHAJKHJldmlz
aW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dldHRlclNldHRl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSw3IEBACiAvKgogICogIENvcHlyaWdodCAo
QykgMTk5OS0yMDAyIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCiAgKiAgQ29weXJpZ2h0
IChDKSAyMDAxIFBldGVyIEtlbGx5IChwbWtAcG9zdC5jb20pCi0gKiAgQ29weXJpZ2h0IChDKSAy
MDA0LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAo
QykgMjAwNC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiAgVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCkBAIC0zMyw3ICszMyw4IEBAIFNUQVRJQ19BU1NFUlRfSVNfVFJJVklBTExZX0RF
U1RSVUNUSUJMRSgKIAogY29uc3QgQ2xhc3NJbmZvIEdldHRlclNldHRlcjo6c19pbmZvID0geyAi
R2V0dGVyU2V0dGVyIiwgbnVsbHB0ciwgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9U
QUJMRShHZXR0ZXJTZXR0ZXIpIH07CiAKLXZvaWQgR2V0dGVyU2V0dGVyOjp2aXNpdENoaWxkcmVu
KEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPgordm9pZCBHZXR0ZXJTZXR0ZXI6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2Vs
bCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBHZXR0ZXJTZXR0ZXIqIHRoaXNPYmplY3QgPSBq
c0Nhc3Q8R2V0dGVyU2V0dGVyKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklU
Uyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNDMsNiArNDQsOCBAQCB2b2lkIEdldHRlclNldHRl
cjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqCiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+
bV9zZXR0ZXIpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oR2V0dGVyU2V0dGVyKTsKKwog
SlNWYWx1ZSBjYWxsR2V0dGVyKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUg
YmFzZSwgSlNWYWx1ZSBnZXR0ZXJTZXR0ZXIpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0
LT52bSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2V0dGVyU2V0dGVy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2V0dGVyU2V0
dGVyLmgJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0dldHRlclNldHRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqICBD
b3B5cmlnaHQgKEMpIDE5OTktMjAwMSBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQogICog
IENvcHlyaWdodCAoQykgMjAwMSBQZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQotICogIENvcHly
aWdodCAoQykgMjAwMy0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBD
b3B5cmlnaHQgKEMpIDIwMDMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtODIsNyArODIsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJl
dHVybiBjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgZ2V0dGVyT2JqZWN0LCBzZXR0ZXJPYmplY3Qp
OwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZp
c2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgSlNPYmplY3QqIGdl
dHRlcigpIGNvbnN0IHsgcmV0dXJuIG1fZ2V0dGVyLmdldCgpOyB9CiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0hhc2hNYXBJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9IYXNoTWFwSW1wbC5jcHAJKHJldmlzaW9uIDI3Mjkw
MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0hhc2hNYXBJbXBsLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0zMCw2ICszMCw5IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCitERUZJTkVfVklT
SVRfQ0hJTERSRU5fV0lUSF9NT0RJRklFUih0ZW1wbGF0ZTw+LCBIYXNoTWFwQnVja2V0PEhhc2hN
YXBCdWNrZXREYXRhS2V5Pik7CitERUZJTkVfVklTSVRfQ0hJTERSRU5fV0lUSF9NT0RJRklFUih0
ZW1wbGF0ZTw+LCBIYXNoTWFwQnVja2V0PEhhc2hNYXBCdWNrZXREYXRhS2V5VmFsdWU+KTsKKwog
dGVtcGxhdGU8PgogY29uc3QgQ2xhc3NJbmZvIEhhc2hNYXBCdWNrZXQ8SGFzaE1hcEJ1Y2tldERh
dGFLZXk+OjpzX2luZm8gPQogICAgIHsgIkhhc2hNYXBCdWNrZXQiLCBudWxscHRyLCBudWxscHRy
LCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEhhc2hNYXBCdWNrZXQ8SGFzaE1hcEJ1Y2tl
dERhdGFLZXk+KSB9OwpAQCAtMzgsOCArNDEsOSBAQCB0ZW1wbGF0ZTw+CiBjb25zdCBDbGFzc0lu
Zm8gSGFzaE1hcEJ1Y2tldDxIYXNoTWFwQnVja2V0RGF0YUtleVZhbHVlPjo6c19pbmZvID0KICAg
ICB7ICJIYXNoTWFwQnVja2V0IiwgbnVsbHB0ciwgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01F
VEhPRF9UQUJMRShIYXNoTWFwQnVja2V0PEhhc2hNYXBCdWNrZXREYXRhS2V5VmFsdWU+KSB9Owog
Ci10ZW1wbGF0ZSA8dHlwZW5hbWUgRGF0YT4KLXZvaWQgSGFzaE1hcEJ1Y2tldDxEYXRhPjo6dmlz
aXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8
dHlwZW5hbWUgRGF0YT4KK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEhhc2hNYXBC
dWNrZXQ8RGF0YT46OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlz
aXRvcikKIHsKICAgICBIYXNoTWFwQnVja2V0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEhhc2hNYXBC
dWNrZXQqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3Qs
IGluZm8oKSk7CkBAIC01Miw4ICs1Niw5IEBAIHZvaWQgSGFzaE1hcEJ1Y2tldDxEYXRhPjo6dmlz
aXRDaGlsZHJlbigKICAgICB2aXNpdG9yLmFwcGVuZFZhbHVlcyhiaXR3aXNlX2Nhc3Q8V3JpdGVC
YXJyaWVyPFVua25vd24+Kj4oJnRoaXNPYmplY3QtPm1fZGF0YSksIHNpemVvZihEYXRhKSAvIHNp
emVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKTsKIH0KIAotdGVtcGxhdGUgPHR5cGVuYW1lIEhh
c2hNYXBCdWNrZXQ+Ci12b2lkIEhhc2hNYXBJbXBsPEhhc2hNYXBCdWNrZXQ+Ojp2aXNpdENoaWxk
cmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBIYXNoTWFwQnVja2V0PgordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSGFzaE1h
cEltcGw8SGFzaE1hcEJ1Y2tldD46OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlz
aXRvciYgdmlzaXRvcikKIHsKICAgICBIYXNoTWFwSW1wbCogdGhpc09iamVjdCA9IGpzQ2FzdDxI
YXNoTWFwSW1wbCo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09i
amVjdCwgaW5mbygpKTsKQEAgLTY2LDYgKzcxLDggQEAgdm9pZCBIYXNoTWFwSW1wbDxIYXNoTWFw
QnVja2V0Pjo6dmlzaXRDaAogICAgICAgICB2aXNpdG9yLm1hcmtBdXhpbGlhcnkoYnVmZmVyKTsK
IH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOX1dJVEhfTU9ESUZJRVIodGVtcGxhdGU8dHlwZW5h
bWUgSGFzaE1hcEJ1Y2tldD4sIEhhc2hNYXBJbXBsPEhhc2hNYXBCdWNrZXQ+KTsKKwogdGVtcGxh
dGUgPHR5cGVuYW1lIEhhc2hNYXBCdWNrZXQ+CiBzaXplX3QgSGFzaE1hcEltcGw8SGFzaE1hcEJ1
Y2tldD46OmVzdGltYXRlZFNpemUoSlNDZWxsKiBjZWxsLCBWTSYgdm0pCiB7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9IYXNoTWFwSW1wbC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0hhc2hNYXBJbXBsLmgJKHJldmlzaW9uIDI3Mjkw
MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0hhc2hNYXBJbXBsLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTgg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIw
MjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0xNDgsNyArMTQ4LDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9k
YXRhLnZhbHVlLmdldCgpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4o
SlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAg
ICAgQUxXQVlTX0lOTElORSBIYXNoTWFwQnVja2V0KiBuZXh0KCkgY29uc3QgeyByZXR1cm4gbV9u
ZXh0LmdldCgpOyB9CiAgICAgQUxXQVlTX0lOTElORSBIYXNoTWFwQnVja2V0KiBwcmV2KCkgY29u
c3QgeyByZXR1cm4gbV9wcmV2LmdldCgpOyB9CkBAIC0zNjQsNyArMzY0LDcgQEAgY2xhc3MgSGFz
aE1hcEltcGwgOiBwdWJsaWMgSlNOb25GaW5hbE9iagogcHVibGljOgogICAgIHVzaW5nIEJ1Y2tl
dFR5cGUgPSBIYXNoTWFwQnVja2V0VHlwZTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwog
CiAgICAgc3RhdGljIHNpemVfdCBlc3RpbWF0ZWRTaXplKEpTQ2VsbCosIFZNJik7CiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGVybmFsRnVuY3Rpb24uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGVybmFsRnVuY3Rpb24u
Y3BwCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9J
bnRlcm5hbEZ1bmN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw3ICsxLDcgQEAKIC8qCiAg
KiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDIgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykK
ICAqICBDb3B5cmlnaHQgKEMpIDIwMDEgUGV0ZXIgS2VsbHkgKHBta0Bwb3N0LmNvbSkKLSAqICBD
b3B5cmlnaHQgKEMpIDIwMDQtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiAgQ29weXJpZ2h0IChDKSAyMDA0LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTY0LDcgKzY0LDggQEAgdm9pZCBJbnRlcm5hbEZ1
bmN0aW9uOjpmaW5pc2hDcmVhdGlvbihWTQogICAgIH0KIH0KIAotdm9pZCBJbnRlcm5hbEZ1bmN0
aW9uOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0
ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBJbnRlcm5hbEZ1bmN0aW9uOjp2aXNpdENo
aWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSW50ZXJu
YWxGdW5jdGlvbiogdGhpc09iamVjdCA9IGpzQ2FzdDxJbnRlcm5hbEZ1bmN0aW9uKj4oY2VsbCk7
CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAt
NzMsNiArNzQsOCBAQCB2b2lkIEludGVybmFsRnVuY3Rpb246OnZpc2l0Q2hpbGRyZW4oSlNDCiAg
ICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9vcmlnaW5hbE5hbWUpOwogfQogCitERUZJ
TkVfVklTSVRfQ0hJTERSRU5fV0lUSF9NT0RJRklFUihKU19FWFBPUlRfUFJJVkFURSwgSW50ZXJu
YWxGdW5jdGlvbik7CisKIGNvbnN0IFN0cmluZyYgSW50ZXJuYWxGdW5jdGlvbjo6bmFtZSgpCiB7
CiAgICAgY29uc3QgU3RyaW5nJiBuYW1lID0gbV9vcmlnaW5hbE5hbWUtPnRyeUdldFZhbHVlKCk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRlcm5hbEZ1bmN0aW9uLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50ZXJuYWxGdW5j
dGlvbi5oCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9JbnRlcm5hbEZ1bmN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgog
ICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAwIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcp
Ci0gKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogIENvcHlyaWdodCAoQykgMjAwMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqICBDb3B5cmlnaHQgKEMpIDIwMDcgQ2FtZXJvbiBad2FyaWNoIChjd3p3YXJp
Y2hAdXdhdGVybG9vLmNhKQogICogIENvcHlyaWdodCAoQykgMjAwNyBNYWtzIE9ybG92aWNoCiAg
KgpAQCAtNDYsNyArNDYsNyBAQCBwdWJsaWM6CiAKICAgICBERUNMQVJFX0VYUE9SVF9JTkZPOwog
Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwq
LCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU5fV0lUSF9NT0RJRklF
UihKU19FWFBPUlRfUFJJVkFURSk7CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSBjb25zdCBTdHJp
bmcmIG5hbWUoKTsKICAgICBjb25zdCBTdHJpbmcgZGlzcGxheU5hbWUoVk0mKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxDb2xsYXRvci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bENvbGxhdG9yLmNwcAkocmV2aXNp
b24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bENvbGxhdG9y
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMp
IDIwMTUgQW5keSBWYW5XYWdvbmVyIChhbmR5QHZhbndhZ29uZXIuZmFtaWx5KQogICogQ29weXJp
Z2h0IChDKSAyMDE1IFN1a29sc2FrIFNha3NodXdvbmcgKHN1a29sc2FrQGdtYWlsLmNvbSkKLSAq
IENvcHlyaWdodCAoQykgMjAxNi0yMDIwIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIxIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjUsNyArNjUsOCBAQCB2b2lk
IEludGxDb2xsYXRvcjo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtCiAgICAgQVNTRVJUKGluaGVyaXRz
KHZtLCBpbmZvKCkpKTsKIH0KIAotdm9pZCBJbnRsQ29sbGF0b3I6OnZpc2l0Q2hpbGRyZW4oSlND
ZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0
b3I+Cit2b2lkIEludGxDb2xsYXRvcjo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBW
aXNpdG9yJiB2aXNpdG9yKQogewogICAgIEludGxDb2xsYXRvciogdGhpc09iamVjdCA9IGpzQ2Fz
dDxJbnRsQ29sbGF0b3IqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRo
aXNPYmplY3QsIGluZm8oKSk7CkBAIC03NSw2ICs3Niw4IEBAIHZvaWQgSW50bENvbGxhdG9yOjp2
aXNpdENoaWxkcmVuKEpTQ2VsbCoKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2Jv
dW5kQ29tcGFyZSk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihJbnRsQ29sbGF0b3IpOwor
CiBWZWN0b3I8U3RyaW5nPiBJbnRsQ29sbGF0b3I6OnNvcnRMb2NhbGVEYXRhKGNvbnN0IFN0cmlu
ZyYgbG9jYWxlLCBSZWxldmFudEV4dGVuc2lvbktleSBrZXkpCiB7CiAgICAgLy8gOS4xIEludGVy
bmFsIHNsb3RzIG9mIFNlcnZpY2UgQ29uc3RydWN0b3JzICYgMTAuMi4zIEludGVybmFsIHNsb3Rz
IChFQ01BLTQwMiAyLjApCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRs
Q29sbGF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9J
bnRsQ29sbGF0b3IuaAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSW50bENvbGxhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAv
KgogICogQ29weXJpZ2h0IChDKSAyMDE1IEFuZHkgVmFuV2Fnb25lciAoYW5keUB2YW53YWdvbmVy
LmZhbWlseSkKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTgwLDcgKzgxLDcgQEAg
cHVibGljOgogcHJpdmF0ZToKICAgICBJbnRsQ29sbGF0b3IoVk0mLCBTdHJ1Y3R1cmUqKTsKICAg
ICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJl
bihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAK
ICAgICBib29sIHVwZGF0ZUNhbkRvQVNDSUlVQ0FEVUNFVENvbXBhcmlzb24oKSBjb25zdDsKIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERhdGVUaW1lRm9ybWF0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsRGF0ZVRp
bWVGb3JtYXQuY3BwCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9JbnRsRGF0ZVRpbWVGb3JtYXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEs
NiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxNSBBbmR5IFZhbldhZ29uZXIgKGFuZHlAdmFu
d2Fnb25lci5mYW1pbHkpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTkwLDcgKzkwLDggQEAgdm9pZCBJbnRsRGF0ZVRpbWVGb3JtYXQ6OmZpbmlzaENyZWF0aW9uKAog
ICAgIEFTU0VSVChpbmhlcml0cyh2bSwgaW5mbygpKSk7CiB9CiAKLXZvaWQgSW50bERhdGVUaW1l
Rm9ybWF0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3Ip
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBJbnRsRGF0ZVRpbWVGb3JtYXQ6OnZp
c2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBJ
bnRsRGF0ZVRpbWVGb3JtYXQqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SW50bERhdGVUaW1lRm9ybWF0
Kj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZv
KCkpOwpAQCAtMTAwLDYgKzEwMSw4IEBAIHZvaWQgSW50bERhdGVUaW1lRm9ybWF0Ojp2aXNpdENo
aWxkcmVuKEoKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2JvdW5kRm9ybWF0KTsK
IH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEludGxEYXRlVGltZUZvcm1hdCk7CisKIHZvaWQg
SW50bERhdGVUaW1lRm9ybWF0OjpzZXRCb3VuZEZvcm1hdChWTSYgdm0sIEpTQm91bmRGdW5jdGlv
biogZm9ybWF0KQogewogICAgIG1fYm91bmRGb3JtYXQuc2V0KHZtLCB0aGlzLCBmb3JtYXQpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERhdGVUaW1lRm9ybWF0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERhdGVUaW1l
Rm9ybWF0LmgJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0ludGxEYXRlVGltZUZvcm1hdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAog
LyoKICAqIENvcHlyaWdodCAoQykgMjAxNSBBbmR5IFZhbldhZ29uZXIgKGFuZHlAdmFud2Fnb25l
ci5mYW1pbHkpCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC04NSw3ICs4Niw3IEBA
IHB1YmxpYzoKIHByaXZhdGU6CiAgICAgSW50bERhdGVUaW1lRm9ybWF0KFZNJiwgU3RydWN0dXJl
Kik7CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOwotICAgIHN0YXRpYyB2b2lkIHZpc2l0
Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxE
UkVOOwogCiAgICAgc3RhdGljIFZlY3RvcjxTdHJpbmc+IGxvY2FsZURhdGEoY29uc3QgU3RyaW5n
JiwgUmVsZXZhbnRFeHRlbnNpb25LZXkpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9JbnRsTG9jYWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9JbnRsTG9jYWxlLmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bExvY2FsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDIwIFNvbnkgSW50ZXJhY3RpdmUgRW50
ZXJ0YWlubWVudCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01OCw3ICs1
OSw4IEBAIHZvaWQgSW50bExvY2FsZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQogICAgIEFTU0VS
VChpbmhlcml0cyh2bSwgaW5mbygpKSk7CiB9CiAKLXZvaWQgSW50bExvY2FsZTo6dmlzaXRDaGls
ZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5h
bWUgVmlzaXRvcj4KK3ZvaWQgSW50bExvY2FsZTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBj
ZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8
SW50bExvY2FsZSo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09i
amVjdCwgaW5mbygpKTsKQEAgLTY2LDYgKzY4LDggQEAgdm9pZCBJbnRsTG9jYWxlOjp2aXNpdENo
aWxkcmVuKEpTQ2VsbCogYwogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlz
aXRvcik7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihJbnRsTG9jYWxlKTsKKwogY2xhc3Mg
TG9jYWxlSURCdWlsZGVyIGZpbmFsIHsKIHB1YmxpYzoKICAgICBib29sIGluaXRpYWxpemUoY29u
c3QgU3RyaW5nJik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTG9j
YWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bExv
Y2FsZS5oCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9JbnRsTG9jYWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29w
eXJpZ2h0IChDKSAyMDIwIFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03MSw3ICs3Miw3IEBAIHB1YmxpYzoKIHByaXZh
dGU6CiAgICAgSW50bExvY2FsZShWTSYsIFN0cnVjdHVyZSopOwogICAgIHZvaWQgZmluaXNoQ3Jl
YXRpb24oVk0mKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RW
aXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIFN0cmluZyBrZXl3
b3JkVmFsdWUoQVNDSUlMaXRlcmFsLCBib29sIGlzQm9vbGVhbiA9IGZhbHNlKSBjb25zdDsKIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE51bWJlckZvcm1hdC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE51bWJlckZv
cm1hdC5jcHAJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0ludGxOdW1iZXJGb3JtYXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBAQAog
LyoKICAqIENvcHlyaWdodCAoQykgMjAxNSBBbmR5IFZhbldhZ29uZXIgKGFuZHlAdmFud2Fnb25l
ci5mYW1pbHkpCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTYgU3Vrb2xzYWsgU2Frc2h1d29uZyAoc3Vr
b2xzYWtAZ21haWwuY29tKQotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjAgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDIwIFNvbnkgSW50ZXJh
Y3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC03Myw3ICs3Myw4
IEBAIHZvaWQgSW50bE51bWJlckZvcm1hdDo6ZmluaXNoQ3JlYXRpb24oVk0KICAgICBBU1NFUlQo
aW5oZXJpdHModm0sIGluZm8oKSkpOwogfQogCi12b2lkIEludGxOdW1iZXJGb3JtYXQ6OnZpc2l0
Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5
cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEludGxOdW1iZXJGb3JtYXQ6OnZpc2l0Q2hpbGRyZW5JbXBs
KEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBJbnRsTnVtYmVyRm9ybWF0
KiB0aGlzT2JqZWN0ID0ganNDYXN0PEludGxOdW1iZXJGb3JtYXQqPihjZWxsKTsKICAgICBBU1NF
UlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC04Myw2ICs4NCw4
IEBAIHZvaWQgSW50bE51bWJlckZvcm1hdDo6dmlzaXRDaGlsZHJlbihKU0MKICAgICB2aXNpdG9y
LmFwcGVuZCh0aGlzT2JqZWN0LT5tX2JvdW5kRm9ybWF0KTsKIH0KIAorREVGSU5FX1ZJU0lUX0NI
SUxEUkVOKEludGxOdW1iZXJGb3JtYXQpOworCiBWZWN0b3I8U3RyaW5nPiBJbnRsTnVtYmVyRm9y
bWF0Ojpsb2NhbGVEYXRhKGNvbnN0IFN0cmluZyYgbG9jYWxlLCBSZWxldmFudEV4dGVuc2lvbktl
eSBrZXkpCiB7CiAgICAgLy8gOS4xIEludGVybmFsIHNsb3RzIG9mIFNlcnZpY2UgQ29uc3RydWN0
b3JzICYgMTEuMi4zIEludGVybmFsIHNsb3RzIChFQ01BLTQwMiAyLjApCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTnVtYmVyRm9ybWF0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE51bWJlckZvcm1hdC5oCShyZXZpc2lv
biAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTnVtYmVyRm9y
bWF0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChD
KSAyMDE1IEFuZHkgVmFuV2Fnb25lciAoYW5keUB2YW53YWdvbmVyLmZhbWlseSkKICAqIENvcHly
aWdodCAoQykgMjAyMCBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgorICogQ29w
eXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtOTYsNyArOTcsNyBAQCBwdWJsaWM6CiBwcml2YXRl
OgogICAgIEludGxOdW1iZXJGb3JtYXQoVk0mLCBTdHJ1Y3R1cmUqKTsKICAgICB2b2lkIGZpbmlz
aENyZWF0aW9uKFZNJik7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBT
bG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBzdGF0aWMg
VmVjdG9yPFN0cmluZz4gbG9jYWxlRGF0YShjb25zdCBTdHJpbmcmLCBSZWxldmFudEV4dGVuc2lv
bktleSk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxQbHVyYWxS
dWxlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50
bFBsdXJhbFJ1bGVzLmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSW50bFBsdXJhbFJ1bGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsx
LDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTggQW5keSBWYW5XYWdvbmVyIChhbmR5QHZh
bndhZ29uZXIuZmFtaWx5KQotICogQ29weXJpZ2h0IChDKSAyMDE5LTIwMjAgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE5LTIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC02MSw3ICs2MSw4IEBAIHZvaWQgSW50bFBsdXJhbFJ1bGVzOjpmaW5pc2hDcmVhdGlvbihWTSYK
ICAgICBBU1NFUlQoaW5oZXJpdHModm0sIGluZm8oKSkpOwogfQogCi12b2lkIEludGxQbHVyYWxS
dWxlczo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQor
dGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSW50bFBsdXJhbFJ1bGVzOjp2aXNpdENo
aWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSW50bFBs
dXJhbFJ1bGVzKiB0aGlzT2JqZWN0ID0ganNDYXN0PEludGxQbHVyYWxSdWxlcyo+KGNlbGwpOwog
ICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTY5
LDYgKzcwLDggQEAgdm9pZCBJbnRsUGx1cmFsUnVsZXM6OnZpc2l0Q2hpbGRyZW4oSlNDZQogICAg
IEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CiB9CiAKK0RFRklORV9W
SVNJVF9DSElMRFJFTihJbnRsUGx1cmFsUnVsZXMpOworCiBWZWN0b3I8U3RyaW5nPiBJbnRsUGx1
cmFsUnVsZXM6OmxvY2FsZURhdGEoY29uc3QgU3RyaW5nJiwgUmVsZXZhbnRFeHRlbnNpb25LZXkp
CiB7CiAgICAgcmV0dXJuIHsgfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0ludGxQbHVyYWxSdWxlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0ludGxQbHVyYWxSdWxlcy5oCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9JbnRsUGx1cmFsUnVsZXMuaAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTggQW5keSBWYW5XYWdvbmVyIChh
bmR5QHZhbndhZ29uZXIuZmFtaWx5KQorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
NjYsNyArNjcsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIEludGxQbHVyYWxSdWxlcyhWTSYs
IFN0cnVjdHVyZSopOwogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKLSAgICBzdGF0aWMg
dm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9W
SVNJVF9DSElMRFJFTjsKIAogICAgIHN0YXRpYyBWZWN0b3I8U3RyaW5nPiBsb2NhbGVEYXRhKGNv
bnN0IFN0cmluZyYsIFJlbGV2YW50RXh0ZW5zaW9uS2V5KTsKIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSW50bFJlbGF0aXZlVGltZUZvcm1hdC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFJlbGF0aXZlVGltZUZvcm1hdC5j
cHAJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lu
dGxSZWxhdGl2ZVRpbWVGb3JtYXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAog
LyoKICAqIENvcHlyaWdodCAoQykgMjAyMCBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQg
SW5jLgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjIsNyArNjMsOCBAQCB2b2lk
IEludGxSZWxhdGl2ZVRpbWVGb3JtYXQ6OmZpbmlzaENyZWF0CiAgICAgQVNTRVJUKGluaGVyaXRz
KHZtLCBpbmZvKCkpKTsKIH0KIAotdm9pZCBJbnRsUmVsYXRpdmVUaW1lRm9ybWF0Ojp2aXNpdENo
aWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBl
bmFtZSBWaXNpdG9yPgordm9pZCBJbnRsUmVsYXRpdmVUaW1lRm9ybWF0Ojp2aXNpdENoaWxkcmVu
SW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0byogdGhpc09i
amVjdCA9IGpzQ2FzdDxJbnRsUmVsYXRpdmVUaW1lRm9ybWF0Kj4oY2VsbCk7CiAgICAgQVNTRVJU
X0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNzAsNiArNzIsOCBA
QCB2b2lkIEludGxSZWxhdGl2ZVRpbWVGb3JtYXQ6OnZpc2l0Q2hpbGRyCiAgICAgQmFzZTo6dmlz
aXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxE
UkVOKEludGxSZWxhdGl2ZVRpbWVGb3JtYXQpOworCiBWZWN0b3I8U3RyaW5nPiBJbnRsUmVsYXRp
dmVUaW1lRm9ybWF0Ojpsb2NhbGVEYXRhKGNvbnN0IFN0cmluZyYgbG9jYWxlLCBSZWxldmFudEV4
dGVuc2lvbktleSBrZXkpCiB7CiAgICAgQVNTRVJUX1VOVVNFRChrZXksIGtleSA9PSBSZWxldmFu
dEV4dGVuc2lvbktleTo6TnUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SW50bFJlbGF0aXZlVGltZUZvcm1hdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0ludGxSZWxhdGl2ZVRpbWVGb3JtYXQuaAkocmV2aXNpb24gMjcyOTAyKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFJlbGF0aXZlVGltZUZvcm1hdC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAy
MCBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgotICogQ29weXJpZ2h0IChDKSAy
MDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAy
MC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtNjQsNyArNjQsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIElu
dGxSZWxhdGl2ZVRpbWVGb3JtYXQoVk0mLCBTdHJ1Y3R1cmUqKTsKICAgICB2b2lkIGZpbmlzaENy
ZWF0aW9uKFZNJik7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90
VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBzdGF0aWMgVmVj
dG9yPFN0cmluZz4gbG9jYWxlRGF0YShjb25zdCBTdHJpbmcmLCBSZWxldmFudEV4dGVuc2lvbktl
eSk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxTZWdtZW50SXRl
cmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lu
dGxTZWdtZW50SXRlcmF0b3IuY3BwCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9JbnRsU2VnbWVudEl0ZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjQsMTMg
KzY1LDE2IEBAIHZvaWQgSW50bFNlZ21lbnRJdGVyYXRvcjo6ZmluaXNoQ3JlYXRpb24KICAgICBt
X3N0cmluZy5zZXQodm0sIHRoaXMsIHN0cmluZyk7CiB9CiAKLXZvaWQgSW50bFNlZ21lbnRJdGVy
YXRvcjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQor
dGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSW50bFNlZ21lbnRJdGVyYXRvcjo6dmlz
aXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGF1
dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SW50bFNlZ21lbnRJdGVyYXRvcio+KGNlbGwpOwogICAg
IEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CiAgICAgdmlzaXRvci5h
cHBlbmQodGhpc09iamVjdC0+bV9zdHJpbmcpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4o
SW50bFNlZ21lbnRJdGVyYXRvcik7CisKIEpTT2JqZWN0KiBJbnRsU2VnbWVudEl0ZXJhdG9yOjpu
ZXh0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFs
T2JqZWN0LT52bSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFNl
Z21lbnRJdGVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0ludGxTZWdtZW50SXRlcmF0b3IuaAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFNlZ21lbnRJdGVyYXRvci5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01Myw3
ICs1NCw3IEBAIHB1YmxpYzoKIAogICAgIEpTT2JqZWN0KiBuZXh0KEpTR2xvYmFsT2JqZWN0Kik7
CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7
CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogcHJpdmF0ZToKICAgICBJbnRsU2VnbWVu
dEl0ZXJhdG9yKFZNJiwgU3RydWN0dXJlKiwgc3RkOjp1bmlxdWVfcHRyPFVCcmVha0l0ZXJhdG9y
LCBVQnJlYWtJdGVyYXRvckRlbGV0ZXI+JiYsIEJveDxWZWN0b3I8VUNoYXI+PiYmLCBJbnRsU2Vn
bWVudGVyOjpHcmFudWxhcml0eSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9JbnRsU2VnbWVudHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0ludGxTZWdtZW50cy5jcHAJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0ludGxTZWdtZW50cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEwOSwxMSArMTEw
LDE0IEBAIEpTT2JqZWN0KiBJbnRsU2VnbWVudHM6OmNyZWF0ZVNlZ21lbnRJdGUKICAgICByZXR1
cm4gSW50bFNlZ21lbnRJdGVyYXRvcjo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QtPnNlZ21lbnRJ
dGVyYXRvclN0cnVjdHVyZSgpLCBXVEZNb3ZlKHNlZ21lbnRlciksIG1fYnVmZmVyLCBtX3N0cmlu
Zy5nZXQoKSwgbV9ncmFudWxhcml0eSk7CiB9CiAKLXZvaWQgSW50bFNlZ21lbnRzOjp2aXNpdENo
aWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBl
bmFtZSBWaXNpdG9yPgordm9pZCBJbnRsU2VnbWVudHM6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2Vs
bCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganND
YXN0PEludGxTZWdtZW50cyo+KGNlbGwpOwogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09i
amVjdCwgdmlzaXRvcik7CiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9zdHJpbmcp
OwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSW50bFNlZ21lbnRzKTsKKwogfSAvLyBuYW1l
c3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsU2VnbWVu
dHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsU2Vn
bWVudHMuaAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSW50bFNlZ21lbnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKgogICog
Q29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU0LDcgKzU1LDcgQEAgcHVibGljOgogICAgIEpT
VmFsdWUgY29udGFpbmluZyhKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUgaW5kZXhWYWx1ZSk7CiAg
ICAgSlNPYmplY3QqIGNyZWF0ZVNlZ21lbnRJdGVyYXRvcihKU0dsb2JhbE9iamVjdCopOwogCi0g
ICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAg
IERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKIHByaXZhdGU6CiAgICAgSW50bFNlZ21lbnRzKFZN
JiwgU3RydWN0dXJlKiwgc3RkOjp1bmlxdWVfcHRyPFVCcmVha0l0ZXJhdG9yLCBVQnJlYWtJdGVy
YXRvckRlbGV0ZXI+JiYsIEJveDxWZWN0b3I8VUNoYXI+PiYmLCBJbnRsU2VnbWVudGVyOjpHcmFu
dWxhcml0eSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVm
ZmVyVmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNBcnJheUJ1ZmZlclZpZXcuY3BwCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjAgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0xNTUsNyArMTU1LDggQEAgdm9pZCBKU0FycmF5QnVmZmVyVmlldzo6ZmluaXNoQ3JlYXRpb24o
VgogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKLXZvaWQgSlNBcnJheUJ1
ZmZlclZpZXc6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRv
cikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTQXJyYXlCdWZmZXJWaWV3Ojp2
aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAg
SlNBcnJheUJ1ZmZlclZpZXcqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNBcnJheUJ1ZmZlclZpZXcq
PihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8o
KSk7CkBAIC0xNjksNiArMTcwLDggQEAgdm9pZCBKU0FycmF5QnVmZmVyVmlldzo6dmlzaXRDaGls
ZHJlbihKUwogICAgIH0KIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTQXJyYXlCdWZmZXJW
aWV3KTsKKwogYm9vbCBKU0FycmF5QnVmZmVyVmlldzo6cHV0KAogICAgIEpTQ2VsbCogY2VsbCwg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwg
SlNWYWx1ZSB2YWx1ZSwKICAgICBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3LmgJKHJldmlz
aW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZm
ZXJWaWV3LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xNzIsNyArMTcyLDcgQEAgcHJvdGVjdGVkOgog
ICAgIAogICAgIHN0YXRpYyBib29sIHB1dChKU0NlbGwqLCBKU0dsb2JhbE9iamVjdCosIFByb3Bl
cnR5TmFtZSwgSlNWYWx1ZSwgUHV0UHJvcGVydHlTbG90Jik7CiAKLSAgICBzdGF0aWMgdm9pZCB2
aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9D
SElMRFJFTjsKICAgICAKIHB1YmxpYzoKICAgICBUeXBlZEFycmF5TW9kZSBtb2RlKCkgY29uc3Qg
eyByZXR1cm4gbV9tb2RlOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0FycmF5SXRlcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTQXJyYXlJdGVyYXRvci5jcHAJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlJdGVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMC0yMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
NjgsMTEgKzY4LDE0IEBAIHZvaWQgSlNBcnJheUl0ZXJhdG9yOjpmaW5pc2hDcmVhdGlvbihWTSYK
ICAgICAgICAgQmFzZTo6aW50ZXJuYWxGaWVsZChpbmRleCkuc2V0KHZtLCB0aGlzLCB2YWx1ZXNb
aW5kZXhdKTsKIH0KIAotdm9pZCBKU0FycmF5SXRlcmF0b3I6OnZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+
Cit2b2lkIEpTQXJyYXlJdGVyYXRvcjo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBW
aXNpdG9yJiB2aXNpdG9yKQogewogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNBcnJh
eUl0ZXJhdG9yKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2Jq
ZWN0LCBpbmZvKCkpOwogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRv
cik7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU0FycmF5SXRlcmF0b3IpOworCiB9IC8v
IG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJy
YXlJdGVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTQXJyYXlJdGVyYXRvci5oCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0FycmF5SXRlcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIwLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03OCw3ICs3OCw3
IEBAIHB1YmxpYzoKIAogICAgIERFQ0xBUkVfSU5GTzsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0
Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxE
UkVOOwogCiBwcml2YXRlOgogICAgIEpTQXJyYXlJdGVyYXRvcihWTSYsIFN0cnVjdHVyZSopOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBc3luY0dlbmVyYXRvci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBc3luY0dlbmVy
YXRvci5jcHAJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTQXN5bmNHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU5LDExICs1OSwxNCBAQCB2
b2lkIEpTQXN5bmNHZW5lcmF0b3I6OmZpbmlzaENyZWF0aW9uKFZNCiAgICAgICAgIGludGVybmFs
RmllbGQoaW5kZXgpLnNldCh2bSwgdGhpcywgdmFsdWVzW2luZGV4XSk7CiB9CiAKLXZvaWQgSlNB
c3luY0dlbmVyYXRvcjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNBc3luY0dlbmVyYXRv
cjo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewog
ICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNBc3luY0dlbmVyYXRvcio+KGNlbGwpOwog
ICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKICAgICBC
YXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwogfQogCitERUZJTkVfVklT
SVRfQ0hJTERSRU4oSlNBc3luY0dlbmVyYXRvcik7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBc3luY0dlbmVyYXRvci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXN5bmNHZW5lcmF0b3Iu
aAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNB
c3luY0dlbmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTktMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTk1LDcgKzk1LDcgQEAgcHVibGljOgogCiAg
ICAgREVDTEFSRV9FWFBPUlRfSU5GTzsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4o
SlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiBw
cml2YXRlOgogICAgIEpTQXN5bmNHZW5lcmF0b3IoVk0mLCBTdHJ1Y3R1cmUqKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQmlnSW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JpZ0ludC5jcHAJKHJldmlzaW9uIDI3Mjkw
MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQmlnSW50LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQ2FpbyBM
aW1hIDx0aWNhaW9saW1hQGdtYWlsLmNvbT4KLSAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIwIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtNjcsNyArNjcsOCBAQCBKU0JpZ0ludDo6SlNCaWdJbnQoVk0mIHZtLCBTdHJ1
Y3R1cmUqIHN0CiAgICAgLCBtX2RhdGEodm0sIHRoaXMsIGRhdGEsIGxlbmd0aCkKIHsgfQogCi12
b2lkIEpTQmlnSW50Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZp
c2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0JpZ0ludDo6dmlzaXRD
aGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGF1dG8q
IHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNCaWdJbnQqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JK
RUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC03Niw2ICs3Nyw4IEBAIHZvaWQg
SlNCaWdJbnQ6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWwKICAgICAgICAgdmlzaXRvci5tYXJr
QXV4aWxpYXJ5KGRhdGEpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNCaWdJbnQpOwor
CiB2b2lkIEpTQmlnSW50Ojppbml0aWFsaXplKEluaXRpYWxpemF0aW9uVHlwZSBpbml0VHlwZSkK
IHsKICAgICBpZiAoaW5pdFR5cGUgPT0gSW5pdGlhbGl6YXRpb25UeXBlOjpXaXRoWmVybykKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQmlnSW50LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCaWdJbnQuaAkocmV2aXNpb24gMjcy
OTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCaWdJbnQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQ2FpbyBM
aW1hIDx0aWNhaW9saW1hQGdtYWlsLmNvbT4KLSAqIENvcHlyaWdodCAoQykgMjAxOS0yMDIwIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOS0yMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtNTAsNyArNTAsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1
bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgU3RydWN0dXJl
SXNJbW1vcnRhbCB8IE92ZXJyaWRlc1RvVGhpczsKICAgICBmcmllbmQgY2xhc3MgQ2FjaGVkQmln
SW50OwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRv
ciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3M+CiAgICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJz
cGFjZUZvcihWTSYgdm0pCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Jv
dW5kRnVuY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTQm91bmRGdW5jdGlvbi5jcHAJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTQm91bmRGdW5jdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDE2LTIwMTcgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0yNDksNyArMjQ5LDggQEAgdm9pZCBKU0JvdW5kRnVuY3Rpb246OmZpbmlzaENyZWF0
aW9uKFZNJgogICAgIEFTU0VSVChpbmhlcml0cyh2bSwgaW5mbygpKSk7CiB9CiAKLXZvaWQgSlNC
b3VuZEZ1bmN0aW9uOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZp
c2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0JvdW5kRnVuY3Rpb246
OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAg
ICBKU0JvdW5kRnVuY3Rpb24qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNCb3VuZEZ1bmN0aW9uKj4o
Y2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkp
OwpAQCAtMjYxLDQgKzI2Miw2IEBAIHZvaWQgSlNCb3VuZEZ1bmN0aW9uOjp2aXNpdENoaWxkcmVu
KEpTQ2UKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX25hbWVNYXlCZU51bGwpOwog
fQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNCb3VuZEZ1bmN0aW9uKTsKKwogfSAvLyBuYW1l
c3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JvdW5kRnVu
Y3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Jv
dW5kRnVuY3Rpb24uaAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNCb3VuZEZ1bmN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC04NCw3ICs4NCw3
IEBAIHByaXZhdGU6CiAgICAgSlNCb3VuZEZ1bmN0aW9uKFZNJiwgTmF0aXZlRXhlY3V0YWJsZSos
IEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKiwgSlNPYmplY3QqIHRhcmdldEZ1bmN0aW9uLCBK
U1ZhbHVlIGJvdW5kVGhpcywgSlNJbW11dGFibGVCdXR0ZXJmbHkqIGJvdW5kQXJncywgSlNTdHJp
bmcqIG5hbWVNYXlCZU51bGwsIGRvdWJsZSBsZW5ndGgpOwogCiAgICAgdm9pZCBmaW5pc2hDcmVh
dGlvbihWTSYpOwotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZp
c2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgV3JpdGVCYXJyaWVy
PEpTT2JqZWN0PiBtX3RhcmdldEZ1bmN0aW9uOwogICAgIFdyaXRlQmFycmllcjxVbmtub3duPiBt
X2JvdW5kVGhpczsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2FsbGVl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NhbGxl
ZS5jcHAJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTQ2FsbGVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTQsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE0LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01MCw3ICs1MCw4IEBAIHZvaWQgSlND
YWxsZWU6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKICAgICBBU1NFUlQoaW5oZXJpdHModm0sIGlu
Zm8oKSkpOwogfQogCi12b2lkIEpTQ2FsbGVlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwg
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBK
U0NhbGxlZTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9y
KQogewogICAgIEpTQ2FsbGVlKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQ2FsbGVlKj4oY2VsbCk7
CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAt
NTksNCArNjAsNiBAQCB2b2lkIEpTQ2FsbGVlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsCiAg
ICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9zY29wZSk7CiB9CiAKK0RFRklORV9WSVNJ
VF9DSElMRFJFTihKU0NhbGxlZSk7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDYWxsZWUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NhbGxlZS5oCShyZXZpc2lvbiAyNzI5MDIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NhbGxlZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAyMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEw
MCw3ICsxMDAsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOwog
ICAgIHVzaW5nIEJhc2U6OmZpbmlzaENyZWF0aW9uOwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRD
aGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERS
RU47CiAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCShyZXZpc2lvbiAyNzI5
MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAkod29ya2luZyBj
b3B5KQpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDEgSGFy
cmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKICAqICBDb3B5cmlnaHQgKEMpIDIwMDEgUGV0ZXIg
S2VsbHkgKHBta0Bwb3N0LmNvbSkKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAxOSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTMy
LDYgKzMyLDcgQEAKICNpbmNsdWRlICJKU0xvY2suaCIKICNpbmNsdWRlICJKU1R5cGVJbmZvLmgi
CiAjaW5jbHVkZSAiU2xvdFZpc2l0b3IuaCIKKyNpbmNsdWRlICJTbG90VmlzaXRvck1hY3Jvcy5o
IgogI2luY2x1ZGUgIlN1YnNwYWNlQWNjZXNzLmgiCiAjaW5jbHVkZSAiVHlwZWRBcnJheVR5cGUu
aCIKICNpbmNsdWRlICJXcml0ZUJhcnJpZXIuaCIKQEAgLTE2Nyw4ICsxNjgsOCBAQCBwdWJsaWM6
CiAgICAgc2l6ZV90IGVzdGltYXRlZFNpemVJbkJ5dGVzKFZNJikgY29uc3Q7CiAgICAgSlNfRVhQ
T1JUX1BSSVZBVEUgc3RhdGljIHNpemVfdCBlc3RpbWF0ZWRTaXplKEpTQ2VsbCosIFZNJik7CiAK
LSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7Ci0g
ICAgc3RhdGljIHZvaWQgdmlzaXRPdXRwdXRDb25zdHJhaW50cyhKU0NlbGwqLCBTbG90VmlzaXRv
ciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU5fV0lUSF9NT0RJRklFUihpbmxpbmUpOwor
ICAgIERFQ0xBUkVfVklTSVRfT1VUUFVUX0NPTlNUUkFJTlRTX1dJVEhfTU9ESUZJRVIoaW5saW5l
KTsKIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGFuYWx5emVIZWFwKEpTQ2Vs
bCosIEhlYXBBbmFseXplciYpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0NlbGxJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNDZWxsSW5saW5lcy5oCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0NlbGxJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjAgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNSw2
ICsyNSw3IEBACiAKICNwcmFnbWEgb25jZQogCisjaW5jbHVkZSAiQWJzdHJhY3RTbG90VmlzaXRv
cklubGluZXMuaCIKICNpbmNsdWRlICJBbGxvY2F0b3JGb3JNb2RlLmgiCiAjaW5jbHVkZSAiQWxs
b2NhdG9ySW5saW5lcy5oIgogI2luY2x1ZGUgIkNvbXBsZXRlU3Vic3BhY2VJbmxpbmVzLmgiCkBA
IC0xNDEsMTUgKzE0MiwyMSBAQCBBTFdBWVNfSU5MSU5FIFN0cnVjdHVyZSogSlNDZWxsOjpzdHJ1
Y3R1CiAgICAgcmV0dXJuIHZtLmdldFN0cnVjdHVyZShtX3N0cnVjdHVyZUlEKTsKIH0KIAotaW5s
aW5lIHZvaWQgSlNDZWxsOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3Im
IHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0NlbGw6OnZpc2l0
Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB2aXNp
dG9yLmFwcGVuZFVuYmFycmllcmVkKGNlbGwtPnN0cnVjdHVyZSh2aXNpdG9yLnZtKCkpKTsKIH0K
IAotaW5saW5lIHZvaWQgSlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzKEpTQ2VsbCosIFNs
b3RWaXNpdG9yJikKK0RFRklORV9WSVNJVF9DSElMRFJFTl9XSVRIX01PRElGSUVSKGlubGluZSwg
SlNDZWxsKTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK0FMV0FZU19JTkxJTkUgdm9p
ZCBKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHNJbXBsKEpTQ2VsbCosIFZpc2l0b3ImKQog
ewogfQogCitERUZJTkVfVklTSVRfT1VUUFVUX0NPTlNUUkFJTlRTX1dJVEhfTU9ESUZJRVIoaW5s
aW5lLCBKU0NlbGwpOworCiBBTFdBWVNfSU5MSU5FIFZNJiBDYWxsRnJhbWU6OmRlcHJlY2F0ZWRW
TSgpIGNvbnN0CiB7CiAgICAgSlNDZWxsKiBjYWxsZWUgPSB0aGlzLT5jYWxsZWUoKS5hc0NlbGwo
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRmluYWxpemF0aW9uUmVn
aXN0cnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
RmluYWxpemF0aW9uUmVnaXN0cnkuY3BwCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0ZpbmFsaXphdGlvblJlZ2lzdHJ5LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUsIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMC0yMDIxIEFwcGxl
LCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJKU0Zp
bmFsaXphdGlvblJlZ2lzdHJ5LmgiCiAKKyNpbmNsdWRlICJBYnN0cmFjdFNsb3RWaXNpdG9yLmgi
CiAjaW5jbHVkZSAiRGVmZXJyZWRXb3JrVGltZXIuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgi
CiAjaW5jbHVkZSAiSlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbElubGluZXMuaCIKQEAgLTYwLDcg
KzYxLDggQEAgdm9pZCBKU0ZpbmFsaXphdGlvblJlZ2lzdHJ5OjpmaW5pc2hDcmVhdAogICAgIGds
b2JhbE9iamVjdC0+Z2xvYmFsT2JqZWN0TWV0aG9kVGFibGUoKS0+Y3VycmVudFNjcmlwdEV4ZWN1
dGlvbk93bmVyKGdsb2JhbE9iamVjdCk7CiB9CiAKLXZvaWQgSlNGaW5hbGl6YXRpb25SZWdpc3Ry
eTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVt
cGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNGaW5hbGl6YXRpb25SZWdpc3RyeTo6dmlz
aXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEJh
c2U6OnZpc2l0Q2hpbGRyZW4oY2VsbCwgdmlzaXRvcik7CiAKQEAgLTgwLDEzICs4MiwxNSBAQCB2
b2lkIEpTRmluYWxpemF0aW9uUmVnaXN0cnk6OnZpc2l0Q2hpbGRyCiAgICAgZm9yIChhdXRvJiBo
b2xkaW5ncyA6IHRoaXNPYmplY3QtPm1fbm9VbnJlZ2lzdHJhdGlvbkRlYWQpCiAgICAgICAgIHZp
c2l0b3IuYXBwZW5kKGhvbGRpbmdzKTsKIAotICAgIHNpemVfdCB0b3RhbEJ1ZmZlclNpemVzSW5C
eXRlcyA9IHRoaXNPYmplY3QtPm1fZGVhZFJlZ2lzdHJhdGlvbnMuY2FwYWNpdHkoKSAqIHNpemVv
ZihkZWNsdHlwZSh0aGlzT2JqZWN0LT5tX2RlYWRSZWdpc3RyYXRpb25zKTo6S2V5VmFsdWVQYWly
VHlwZSk7Ci0gICAgdG90YWxCdWZmZXJTaXplc0luQnl0ZXMgKz0gdGhpc09iamVjdC0+bV9saXZl
UmVnaXN0cmF0aW9ucy5jYXBhY2l0eSgpICogc2l6ZW9mKGRlY2x0eXBlKHRoaXNPYmplY3QtPm1f
ZGVhZFJlZ2lzdHJhdGlvbnMpOjpLZXlWYWx1ZVBhaXJUeXBlKTsKKyAgICBzaXplX3QgdG90YWxC
dWZmZXJTaXplc0luQnl0ZXMgPSB0aGlzT2JqZWN0LT5tX2RlYWRSZWdpc3RyYXRpb25zLmNhcGFj
aXR5KCkgKiBzaXplb2YodHlwZW5hbWUgZGVjbHR5cGUodGhpc09iamVjdC0+bV9kZWFkUmVnaXN0
cmF0aW9ucyk6OktleVZhbHVlUGFpclR5cGUpOworICAgIHRvdGFsQnVmZmVyU2l6ZXNJbkJ5dGVz
ICs9IHRoaXNPYmplY3QtPm1fbGl2ZVJlZ2lzdHJhdGlvbnMuY2FwYWNpdHkoKSAqIHNpemVvZih0
eXBlbmFtZSBkZWNsdHlwZSh0aGlzT2JqZWN0LT5tX2RlYWRSZWdpc3RyYXRpb25zKTo6S2V5VmFs
dWVQYWlyVHlwZSk7CiAgICAgdG90YWxCdWZmZXJTaXplc0luQnl0ZXMgKz0gdGhpc09iamVjdC0+
bV9ub1VucmVnaXN0cmF0aW9uTGl2ZS5jYXBhY2l0eSgpICogc2l6ZW9mKGRlY2x0eXBlKHRoaXNP
YmplY3QtPm1fbm9VbnJlZ2lzdHJhdGlvbkxpdmUudGFrZUxhc3QoKSkpOwogICAgIHRvdGFsQnVm
ZmVyU2l6ZXNJbkJ5dGVzICs9IHRoaXNPYmplY3QtPm1fbm9VbnJlZ2lzdHJhdGlvbkRlYWQuY2Fw
YWNpdHkoKSAqIHNpemVvZihkZWNsdHlwZSh0aGlzT2JqZWN0LT5tX25vVW5yZWdpc3RyYXRpb25M
aXZlLnRha2VMYXN0KCkpKTsKICAgICB2aXNpdG9yLnZtKCkuaGVhcC5yZXBvcnRFeHRyYU1lbW9y
eVZpc2l0ZWQodG90YWxCdWZmZXJTaXplc0luQnl0ZXMpOwogfQogCitERUZJTkVfVklTSVRfQ0hJ
TERSRU4oSlNGaW5hbGl6YXRpb25SZWdpc3RyeSk7CisKIHZvaWQgSlNGaW5hbGl6YXRpb25SZWdp
c3RyeTo6ZGVzdHJveShKU0NlbGwqIHRhYmxlKQogewogICAgIHN0YXRpY19jYXN0PEpTRmluYWxp
emF0aW9uUmVnaXN0cnkqPih0YWJsZSktPn5KU0ZpbmFsaXphdGlvblJlZ2lzdHJ5KCk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ZpbmFsaXphdGlvblJlZ2lzdHJ5LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGaW5hbGl6YXRp
b25SZWdpc3RyeS5oCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0ZpbmFsaXphdGlvblJlZ2lzdHJ5LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlLCBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAtMjAyMSBBcHBsZSwgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03MCw3ICs3
MCw3IEBAIHB1YmxpYzoKICAgICBERUNMQVJFX0VYUE9SVF9JTkZPOwogCiAgICAgdm9pZCBmaW5h
bGl6ZVVuY29uZGl0aW9uYWxseShWTSYpOwotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4o
SlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogICAg
IHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IG5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0Z1bmN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0Z1bmN0aW9uLmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
NyArMSw3IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAyIEhhcnJpIFBvcnRlbiAo
cG9ydGVuQGtkZS5vcmcpCiAgKiAgQ29weXJpZ2h0IChDKSAyMDAxIFBldGVyIEtlbGx5IChwbWtA
cG9zdC5jb20pCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMjAgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwMy0yMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqICBDb3B5cmlnaHQgKEMpIDIwMDcgQ2FtZXJvbiBad2FyaWNo
IChjd3p3YXJpY2hAdXdhdGVybG9vLmNhKQogICogIENvcHlyaWdodCAoQykgMjAwNyBNYWtzIE9y
bG92aWNoCiAgKiAgQ29weXJpZ2h0IChDKSAyMDE1IENhbm9uIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KQEAgLTI1Miw3ICsyNTIsOCBAQCBjb25zdCBTb3VyY2VDb2RlKiBKU0Z1bmN0aW9uOjpz
b3VyY2VDb2RlCiAgICAgcmV0dXJuICZqc0V4ZWN1dGFibGUoKS0+c291cmNlKCk7CiB9CiAgICAg
Ci12b2lkIEpTRnVuY3Rpb246OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRv
ciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTRnVuY3Rpb246
OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAg
ICBKU0Z1bmN0aW9uKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTRnVuY3Rpb24qPihjZWxsKTsKICAg
ICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC0yNjEs
NiArMjYyLDggQEAgdm9pZCBKU0Z1bmN0aW9uOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogYwogICAg
IHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQoYml0d2lzZV9jYXN0PEpTQ2VsbCo+KGJpdHdpc2Vf
Y2FzdDx1aW50cHRyX3Q+KHRoaXNPYmplY3QtPm1fZXhlY3V0YWJsZU9yUmFyZURhdGEpICYgfnJh
cmVEYXRhVGFnKSk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU0Z1bmN0aW9uKTsKKwog
Q2FsbERhdGEgSlNGdW5jdGlvbjo6Z2V0Q2FsbERhdGEoSlNDZWxsKiBjZWxsKQogewogICAgIC8v
IEtlZXAgdGhpcyBmdW5jdGlvbiBPSyBmb3IgaW52b2NhdGlvbiBmcm9tIGNvbmN1cnJlbnQgY29t
cGlsZXJzLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24u
aAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNG
dW5jdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqICBDb3B5cmln
aHQgKEMpIDE5OTktMjAwMCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQotICogIENvcHly
aWdodCAoQykgMjAwMy0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBD
b3B5cmlnaHQgKEMpIDIwMDMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KiAgQ29weXJpZ2h0IChDKSAyMDA3IENhbWVyb24gWndhcmljaCAoY3d6d2FyaWNoQHV3YXRlcmxv
by5jYSkKICAqICBDb3B5cmlnaHQgKEMpIDIwMDcgTWFrcyBPcmxvdmljaAogICoKQEAgLTE4MCw3
ICsxODAsNyBAQCBwcm90ZWN0ZWQ6CiAKICAgICBzdGF0aWMgYm9vbCBkZWxldGVQcm9wZXJ0eShK
U0NlbGwqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSwgRGVsZXRlUHJvcGVydHlTbG90
Jik7CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9y
Jik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogcHJpdmF0ZToKICAgICBzdGF0aWMg
SlNGdW5jdGlvbiogY3JlYXRlSW1wbChWTSYgdm0sIEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0
YWJsZSwgSlNTY29wZSogc2NvcGUsIFN0cnVjdHVyZSogc3RydWN0dXJlKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJhdG9yLmNwcAkocmV2aXNpb24gMjcy
OTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmF0b3IuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTktMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTU5LDExICs1OSwxNCBAQCB2b2lkIEpTR2VuZXJhdG9yOjpmaW5pc2hDcmVh
dGlvbihWTSYgdm0pCiAgICAgICAgIGludGVybmFsRmllbGQoaW5kZXgpLnNldCh2bSwgdGhpcywg
dmFsdWVzW2luZGV4XSk7CiB9CiAKLXZvaWQgSlNHZW5lcmF0b3I6OnZpc2l0Q2hpbGRyZW4oSlND
ZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0
b3I+Cit2b2lkIEpTR2VuZXJhdG9yOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZp
c2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0dlbmVy
YXRvcio+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwg
aW5mbygpKTsKICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwog
fQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNHZW5lcmF0b3IpOworCiB9IC8vIG5hbWVzcGFj
ZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJhdG9yLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmF0b3Iu
aAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNH
ZW5lcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE5LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC05NCw3ICs5NCw3IEBAIHB1YmxpYzoKIAogICAgIERF
Q0xBUkVfRVhQT1JUX0lORk87CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2Vs
bCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogcHJpdmF0
ZToKICAgICBKU0dlbmVyYXRvcihWTSYsIFN0cnVjdHVyZSopOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXcuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlldy5o
CShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dl
bmVyaWNUeXBlZEFycmF5Vmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzEzLDcgKzMxMyw3IEBA
IHByaXZhdGU6CiAgICAgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCos
IEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lQXJyYXkmLCBEb250RW51bVByb3BlcnRpZXNN
b2RlKTsKIAogICAgIHN0YXRpYyBzaXplX3QgZXN0aW1hdGVkU2l6ZShKU0NlbGwqLCBWTSYpOwot
ICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAg
ICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgLy8gUmV0dXJucyB0cnVlIGlmIHN1Y2Nl
c3NmdWwsIGFuZCBmYWxzZSBvbiBlcnJvcjsgaXQgd2lsbCB0aHJvdyBvbiBlcnJvci4KICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBPdGhlckFkYXB0b3I+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld0lu
bGluZXMuaAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTkgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01
MTcsNyArNTE3LDggQEAgc2l6ZV90IEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+Ogog
fQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgotdm9pZCBKU0dlbmVyaWNUeXBlZEFycmF5
VmlldzxBZGFwdG9yPjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNHZW5lcmljVHlwZWRB
cnJheVZpZXc8QWRhcHRvcj46OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRv
ciYgdmlzaXRvcikKIHsKICAgICBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyogdGhpc09iamVjdCA9
IGpzQ2FzdDxKU0dlbmVyaWNUeXBlZEFycmF5Vmlldyo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19P
QkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTU1NSw0ICs1NTYsNiBAQCB2
b2lkIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+Ojp2CiAgICAgfQogfQogCitERUZJ
TkVfVklTSVRfQ0hJTERSRU5fV0lUSF9NT0RJRklFUih0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9y
PiwgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj4pOworCiB9IC8vIG5hbWVzcGFjZSBK
U0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9i
amVjdC5jcHAJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDggQ2FtZXJvbiBad2FyaWNoIChjd3p3YXJpY2hA
dXdhdGVybG9vLmNhKQogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMTg5OSw3ICsxODk5LDggQEAgdm9p
ZCBKU0dsb2JhbE9iamVjdDo6cmVzZXRQcm90b3R5cGUoVk0mIAogICAgIHNldEdsb2JhbFRoaXMo
dm0sIEpTUHJveHk6OmNyZWF0ZSh2bSwgSlNQcm94eTo6Y3JlYXRlU3RydWN0dXJlKHZtLCB0aGlz
LCBwcm90b3R5cGUsIFB1cmVGb3J3YXJkaW5nUHJveHlUeXBlKSwgdGhpcykpOwogfQogCi12b2lk
IEpTR2xvYmFsT2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3Im
IHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0dsb2JhbE9iamVj
dDo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogeyAK
ICAgICBKU0dsb2JhbE9iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0dsb2JhbE9iamVjdCo+
KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygp
KTsKQEAgLTIwNjgsNiArMjA2OSw4IEBAIHZvaWQgSlNHbG9iYWxPYmplY3Q6OnZpc2l0Q2hpbGRy
ZW4oSlNDZWwKICAgICB0aGlzT2JqZWN0LT5tX3JlZ0V4cEdsb2JhbERhdGEudmlzaXRBZ2dyZWdh
dGUodmlzaXRvcik7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTl9XSVRIX01PRElGSUVSKEpT
X0VYUE9SVF9QUklWQVRFLCBKU0dsb2JhbE9iamVjdCk7CisKIENhbGxGcmFtZSogSlNHbG9iYWxP
YmplY3Q6OmRlcHJlY2F0ZWRDYWxsRnJhbWVGb3JEZWJ1Z2dlcigpCiB7CiAgICAgcmV0dXJuIENh
bGxGcmFtZTo6Y3JlYXRlKG1fZGVwcmVjYXRlZENhbGxGcmFtZUZvckRlYnVnZ2VyKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAkocmV2
aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxP
YmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJpZ2h0
IChDKSAyMDA3IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+Ci0gKiAgQ29weXJpZ2h0IChD
KSAyMDA3LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdo
dCAoQykgMjAwNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiAg
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCkBAIC02MTcsNyArNjE3LDcgQEAgcHVibGljOgogICAgIEpTX0VYUE9SVF9Q
UklWQVRFIH5KU0dsb2JhbE9iamVjdCgpOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2
b2lkIGRlc3Ryb3koSlNDZWxsKik7CiAKLSAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9p
ZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJ
VF9DSElMRFJFTl9XSVRIX01PRElGSUVSKEpTX0VYUE9SVF9QUklWQVRFKTsKIAogICAgIEpTX0VY
UE9SVF9QUklWQVRFIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU09iamVjdCosIEpT
R2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKICAgICBKU19FWFBP
UlRfUFJJVkFURSBzdGF0aWMgYm9vbCBwdXQoSlNDZWxsKiwgSlNHbG9iYWxPYmplY3QqLCBQcm9w
ZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNJbW11dGFibGVCdXR0ZXJmbHkuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTSW1tdXRhYmxlQnV0dGVyZmx5LmNwcAko
cmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbW11
dGFibGVCdXR0ZXJmbHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTgtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMyLDcgKzMyLDggQEAgbmFtZXNwYWNl
IEpTQyB7CiAKIGNvbnN0IENsYXNzSW5mbyBKU0ltbXV0YWJsZUJ1dHRlcmZseTo6c19pbmZvID0g
eyAiSW1tdXRhYmxlIEJ1dHRlcmZseSIsIG51bGxwdHIsIG51bGxwdHIsIG51bGxwdHIsIENSRUFU
RV9NRVRIT0RfVEFCTEUoSlNJbW11dGFibGVCdXR0ZXJmbHkpIH07CiAKLXZvaWQgSlNJbW11dGFi
bGVCdXR0ZXJmbHk6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlz
aXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTSW1tdXRhYmxlQnV0dGVy
Zmx5Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7
CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjZWxsLCBpbmZvKCkpOwogICAgIEJhc2U6
OnZpc2l0Q2hpbGRyZW4oY2VsbCwgdmlzaXRvcik7CkBAIC00NSw2ICs0Niw4IEBAIHZvaWQgSlNJ
bW11dGFibGVCdXR0ZXJmbHk6OnZpc2l0Q2hpbGRyZW4KICAgICB2aXNpdG9yLmFwcGVuZFZhbHVl
c0hpZGRlbihidXR0ZXJmbHktPmNvbnRpZ3VvdXMoKS5kYXRhKCksIGJ1dHRlcmZseS0+cHVibGlj
TGVuZ3RoKCkpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNJbW11dGFibGVCdXR0ZXJm
bHkpOworCiB2b2lkIEpTSW1tdXRhYmxlQnV0dGVyZmx5Ojpjb3B5VG9Bcmd1bWVudHMoSlNHbG9i
YWxPYmplY3QqLCBKU1ZhbHVlKiBmaXJzdEVsZW1lbnREZXN0LCB1bnNpZ25lZCBvZmZzZXQsIHVu
c2lnbmVkIGxlbmd0aCkKIHsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyAr
K2kpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTSW1tdXRhYmxlQnV0
dGVyZmx5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJ
bW11dGFibGVCdXR0ZXJmbHkuaAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNJbW11dGFibGVCdXR0ZXJmbHkuaAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAxOSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTE0NSw3ICsxNDUsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBqc0RvdWJsZU51bWJlcih2
YWx1ZSk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBT
bG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICB2b2lkIGNv
cHlUb0FyZ3VtZW50cyhKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUqIGZpcnN0RWxlbWVudERlc3Qs
IHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTSW50ZXJuYWxGaWVsZE9iamVjdElt
cGwuaAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY2LDcgKzY2LDcgQEAg
cHVibGljOgogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZJbnRlcm5hbEZpZWxkKHVuc2ln
bmVkIGluZGV4KSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNJbnRlcm5hbEZpZWxkT2JqZWN0
SW1wbCwgbV9pbnRlcm5hbEZpZWxkcykgKyBpbmRleCAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5r
bm93bj4pOyB9CiAKIHByb3RlY3RlZDoKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpT
Q2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAg
IEpTSW50ZXJuYWxGaWVsZE9iamVjdEltcGwoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkK
ICAgICAgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0ludGVybmFsRmllbGRPYmplY3RJbXBsSW5saW5lcy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTSW50ZXJuYWxGaWVsZE9iamVjdElt
cGxJbmxpbmVzLmgJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTSW50ZXJuYWxGaWVsZE9iamVjdEltcGxJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOS0yMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MzAsNyArMzAsOCBAQAogbmFtZXNwYWNlIEpTQyB7CiAKIHRlbXBsYXRlPHVuc2lnbmVkIHBhc3Nl
ZE51bWJlck9mSW50ZXJuYWxGaWVsZHM+Ci12b2lkIEpTSW50ZXJuYWxGaWVsZE9iamVjdEltcGw8
cGFzc2VkTnVtYmVyT2ZJbnRlcm5hbEZpZWxkcz46OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxs
LCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lk
IEpTSW50ZXJuYWxGaWVsZE9iamVjdEltcGw8cGFzc2VkTnVtYmVyT2ZJbnRlcm5hbEZpZWxkcz46
OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAg
ICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTSW50ZXJuYWxGaWVsZE9iamVjdEltcGwqPihj
ZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7
CkBAIC0zOCw0ICszOSw2IEBAIHZvaWQgSlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbDxwYXNzZWRO
dW0KICAgICB2aXNpdG9yLmFwcGVuZFZhbHVlcyh0aGlzT2JqZWN0LT5tX2ludGVybmFsRmllbGRz
LCBudW1iZXJPZkludGVybmFsRmllbGRzKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOX1dJ
VEhfTU9ESUZJRVIodGVtcGxhdGU8dW5zaWduZWQgcGFzc2VkTnVtYmVyT2ZJbnRlcm5hbEZpZWxk
cz4sIEpTSW50ZXJuYWxGaWVsZE9iamVjdEltcGw8cGFzc2VkTnVtYmVyT2ZJbnRlcm5hbEZpZWxk
cz4pOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTTGV4aWNhbEVudmlyb25tZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0xleGljYWxFbnZpcm9ubWVudC5jcHAJKHJldmlzaW9uIDI3
MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTGV4aWNhbEVudmlyb25t
ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDgtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMDgtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM2LDcgKzM2LDggQEAgbmFtZXNwYWNlIEpTQyB7
CiAKIGNvbnN0IENsYXNzSW5mbyBKU0xleGljYWxFbnZpcm9ubWVudDo6c19pbmZvID0geyAiSlNM
ZXhpY2FsRW52aXJvbm1lbnQiLCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBudWxscHRyLCBDUkVB
VEVfTUVUSE9EX1RBQkxFKEpTTGV4aWNhbEVudmlyb25tZW50KSB9OwogCi12b2lkIEpTTGV4aWNh
bEVudmlyb25tZW50Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZp
c2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0xleGljYWxFbnZpcm9u
bWVudDo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQog
ewogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNMZXhpY2FsRW52aXJvbm1lbnQqPihj
ZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7
CkBAIC00NCw2ICs0NSw4IEBAIHZvaWQgSlNMZXhpY2FsRW52aXJvbm1lbnQ6OnZpc2l0Q2hpbGRy
ZW4KICAgICB2aXNpdG9yLmFwcGVuZFZhbHVlc0hpZGRlbih0aGlzT2JqZWN0LT52YXJpYWJsZXMo
KSwgdGhpc09iamVjdC0+c3ltYm9sVGFibGUoKS0+c2NvcGVTaXplKCkpOwogfQogCitERUZJTkVf
VklTSVRfQ0hJTERSRU4oSlNMZXhpY2FsRW52aXJvbm1lbnQpOworCiB2b2lkIEpTTGV4aWNhbEVu
dmlyb25tZW50OjphbmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5hbHl6
ZXIpCiB7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0xleGljYWxFbnZpcm9ubWVu
dCo+KGNlbGwpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMZXhpY2Fs
RW52aXJvbm1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0xleGljYWxFbnZpcm9ubWVudC5oCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0xleGljYWxFbnZpcm9ubWVudC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOC0yMDIwIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDIxIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMTM0LDcgKzEzNCw3IEBAIHByb3RlY3RlZDoKICAgICAgICAgfQogICAgIH0KIAotICAg
IHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBE
RUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogICAgIHN0YXRpYyB2b2lkIGFuYWx5emVIZWFwKEpTQ2Vs
bCosIEhlYXBBbmFseXplciYpOwogfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNNYXBJdGVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNNYXBJdGVyYXRvci5jcHAJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTWFwSXRlcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE3IEFwcGxlLCBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMSBBcHBs
ZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC01NywxMyArNTcsMTYgQEAgdm9pZCBKU01hcEl0ZXJhdG9yOjpmaW5pc2hDcmVhdGlv
bihWTSYgdgogICAgICAgICBCYXNlOjppbnRlcm5hbEZpZWxkKGluZGV4KS5zZXQodm0sIHRoaXMs
IHZhbHVlc1tpbmRleF0pOwogfQogCi12b2lkIEpTTWFwSXRlcmF0b3I6OnZpc2l0Q2hpbGRyZW4o
SlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZp
c2l0b3I+Cit2b2lkIEpTTWFwSXRlcmF0b3I6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2Vs
bCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpT
TWFwSXRlcmF0b3IqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNP
YmplY3QsIGluZm8oKSk7CiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNp
dG9yKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTTWFwSXRlcmF0b3IpOworCiBKU1Zh
bHVlIEpTTWFwSXRlcmF0b3I6OmNyZWF0ZVBhaXIoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgSlNWYWx1ZSBrZXksIEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgTWFya2VkQXJndW1lbnRCdWZm
ZXIgYXJnczsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTWFwSXRlcmF0
b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01hcEl0
ZXJhdG9yLmgJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTTWFwSXRlcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTYgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIxIEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE0Miw3ICsxNDIsNyBA
QCBwcml2YXRlOgogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0m
LCBKU01hcCosIEl0ZXJhdGlvbktpbmQpOwogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsK
ICAgICBKU1ZhbHVlIGNyZWF0ZVBhaXIoSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlLCBKU1ZhbHVl
KTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7
CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIH07CiBTVEFUSUNfQVNTRVJUX0lTX1RSSVZJ
QUxMWV9ERVNUUlVDVElCTEUoSlNNYXBJdGVyYXRvcik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlRW52aXJvbm1lbnQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlRW52aXJvbm1lbnQuY3BwCShyZXZp
c2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZUVu
dmlyb25tZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTUtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY1LDcgKzY1LDggQEAgdm9pZCBKU01v
ZHVsZUVudmlyb25tZW50OjpmaW5pc2hDcmVhdGlvbgogICAgIHRoaXMtPm1vZHVsZVJlY29yZFNs
b3QoKS5zZXQodm0sIHRoaXMsIG1vZHVsZVJlY29yZCk7CiB9CiAKLXZvaWQgSlNNb2R1bGVFbnZp
cm9ubWVudDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9y
KQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNNb2R1bGVFbnZpcm9ubWVudDo6
dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAg
IEpTTW9kdWxlRW52aXJvbm1lbnQqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNNb2R1bGVFbnZpcm9u
bWVudCo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwg
aW5mbygpKTsKQEAgLTc0LDYgKzc1LDggQEAgdm9pZCBKU01vZHVsZUVudmlyb25tZW50Ojp2aXNp
dENoaWxkcmVuKAogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1vZHVsZVJlY29yZFNs
b3QoKSk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU01vZHVsZUVudmlyb25tZW50KTsK
KwogYm9vbCBKU01vZHVsZUVudmlyb25tZW50OjpnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3Qq
IGNlbGwsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0
eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3Qt
PnZtKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZUVudmly
b25tZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNN
b2R1bGVFbnZpcm9ubWVudC5oCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU01vZHVsZUVudmlyb25tZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjAgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC04
OSw3ICs4OSw3IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiAqYml0d2lzZV9jYXN0PFdyaXRl
QmFycmllckJhc2U8QWJzdHJhY3RNb2R1bGVSZWNvcmQ+Kj4oYml0d2lzZV9jYXN0PGNoYXIqPih0
aGlzKSArIG9mZnNldE9mTW9kdWxlUmVjb3JkKHN5bWJvbFRhYmxlKCkpKTsKICAgICB9CiAKLSAg
ICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAg
REVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIH07CiAKIGlubGluZSBKU01vZHVsZUVudmlyb25tZW50
OjpKU01vZHVsZUVudmlyb25tZW50KFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTU2Nv
cGUqIGN1cnJlbnRTY29wZSwgU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlTmFtZXNwYWNl
T2JqZWN0LmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIwIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODUs
NyArODUsOCBAQCB2b2lkIEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0OjpkZXN0cm95KEpTCiAgICAg
dGhpc09iamVjdC0+SlNNb2R1bGVOYW1lc3BhY2VPYmplY3Q6On5KU01vZHVsZU5hbWVzcGFjZU9i
amVjdCgpOwogfQogCi12b2lkIEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0Ojp2aXNpdENoaWxkcmVu
KEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPgordm9pZCBKU01vZHVsZU5hbWVzcGFjZU9iamVjdDo6dmlzaXRDaGlsZHJlbkltcGwo
SlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTTW9kdWxlTmFtZXNwYWNl
T2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0Kj4oY2Vs
bCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpA
QCAtOTgsNiArOTksOCBAQCB2b2lkIEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0Ojp2aXNpdENoaWxk
CiAgICAgfQogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNNb2R1bGVOYW1lc3BhY2VPYmpl
Y3QpOworCiBzdGF0aWMgSlNWYWx1ZSBnZXRWYWx1ZShKU01vZHVsZUVudmlyb25tZW50KiBlbnZp
cm9ubWVudCwgUHJvcGVydHlOYW1lIGxvY2FsTmFtZSwgU2NvcGVPZmZzZXQmIHNjb3BlT2Zmc2V0
KQogewogICAgIFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSA9IGVudmlyb25tZW50LT5zeW1ib2xU
YWJsZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVOYW1l
c3BhY2VPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU01vZHVsZU5hbWVzcGFjZU9iamVjdC5oCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZU5hbWVzcGFjZU9iamVjdC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIwIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtNzIsNyArNzIsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIEpTX0VYUE9S
VF9QUklWQVRFIEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0KFZNJiwgU3RydWN0dXJlKik7CiAgICAg
SlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0dsb2JhbE9iamVjdCosIEFi
c3RyYWN0TW9kdWxlUmVjb3JkKiwgVmVjdG9yPHN0ZDo6cGFpcjxJZGVudGlmaWVyLCBBYnN0cmFj
dE1vZHVsZVJlY29yZDo6UmVzb2x1dGlvbj4+JiYpOwotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hp
bGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVO
OwogICAgIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90Q29tbW9uKEpTR2xvYmFsT2JqZWN0KiwgUHJv
cGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKIAogICAgIHN0cnVjdCBFeHBvcnRFbnRyeSB7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZVJlY29yZC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVSZWNvcmQu
Y3BwCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U01vZHVsZVJlY29yZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDE1LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03MCw3ICs3MCw4IEBAIHZvaWQg
SlNNb2R1bGVSZWNvcmQ6OmZpbmlzaENyZWF0aW9uKEpTR2wKICAgICBBU1NFUlQoaW5oZXJpdHMo
dm0sIGluZm8oKSkpOwogfQogCi12b2lkIEpTTW9kdWxlUmVjb3JkOjp2aXNpdENoaWxkcmVuKEpT
Q2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNp
dG9yPgordm9pZCBKU01vZHVsZVJlY29yZDo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxs
LCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTTW9kdWxlUmVjb3JkKiB0aGlzT2JqZWN0ID0g
anNDYXN0PEpTTW9kdWxlUmVjb3JkKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhF
UklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNzgsNiArNzksOCBAQCB2b2lkIEpTTW9kdWxl
UmVjb3JkOjp2aXNpdENoaWxkcmVuKEpTQ2VsCiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVj
dC0+bV9tb2R1bGVQcm9ncmFtRXhlY3V0YWJsZSk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJF
TihKU01vZHVsZVJlY29yZCk7CisKIHZvaWQgSlNNb2R1bGVSZWNvcmQ6OmxpbmsoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBzY3JpcHRGZXRjaGVyKQogewogICAgIFZNJiB2
bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTTW9kdWxlUmVjb3JkLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNNb2R1bGVSZWNvcmQuaAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVSZWNvcmQuaAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTY2LDcgKzY2LDcgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNHbG9i
YWxPYmplY3QqLCBWTSYpOwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwq
LCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICB2b2lk
IGluc3RhbnRpYXRlRGVjbGFyYXRpb25zKEpTR2xvYmFsT2JqZWN0KiwgTW9kdWxlUHJvZ3JhbUV4
ZWN1dGFibGUqLCBKU1ZhbHVlIHNjcmlwdEZldGNoZXIpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU05hdGl2ZVN0ZEZ1bmN0aW9uLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU05hdGl2ZVN0ZEZ1bmN0aW9uLmNwcAkocmV2
aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNOYXRpdmVT
dGRGdW5jdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE1LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00MSwxMyArNDEsMTYgQEAgSlNOYXRp
dmVTdGRGdW5jdGlvbjo6SlNOYXRpdmVTdGRGdW5jdGlvbgogewogfQogCi12b2lkIEpTTmF0aXZl
U3RkRnVuY3Rpb246OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlz
aXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTTmF0aXZlU3RkRnVuY3Rp
b246OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsK
ICAgICBKU05hdGl2ZVN0ZEZ1bmN0aW9uKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTTmF0aXZlU3Rk
RnVuY3Rpb24qPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmpl
Y3QsIGluZm8oKSk7CiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9y
KTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTTmF0aXZlU3RkRnVuY3Rpb24pOworCiB2
b2lkIEpTTmF0aXZlU3RkRnVuY3Rpb246OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgTmF0aXZlRXhl
Y3V0YWJsZSogZXhlY3V0YWJsZSwgdW5zaWduZWQgbGVuZ3RoLCBjb25zdCBTdHJpbmcmIG5hbWUp
CiB7CiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0sIGV4ZWN1dGFibGUsIGxlbmd0aCwgbmFt
ZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU05hdGl2ZVN0ZEZ1bmN0
aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNOYXRp
dmVTdGRGdW5jdGlvbi5oCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU05hdGl2ZVN0ZEZ1bmN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTggQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02NSw3
ICs2NSw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgSlNOYXRpdmVTdGRGdW5jdGlvbihWTSYs
IE5hdGl2ZUV4ZWN1dGFibGUqLCBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSosIE5hdGl2ZVN0
ZEZ1bmN0aW9uJiYpOwogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBOYXRpdmVFeGVjdXRh
YmxlKiwgdW5zaWduZWQgbGVuZ3RoLCBjb25zdCBTdHJpbmcmIG5hbWUpOwotICAgIHN0YXRpYyB2
b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJ
U0lUX0NISUxEUkVOOwogCiAgICAgTmF0aXZlU3RkRnVuY3Rpb24gbV9mdW5jdGlvbjsKIH07Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCShyZXZpc2lv
biAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSw3IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMTk5
OS0yMDAxIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCiAgKiAgQ29weXJpZ2h0IChDKSAy
MDAxIFBldGVyIEtlbGx5IChwbWtAcG9zdC5jb20pCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIw
MjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAw
My0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqICBDb3B5cmlnaHQgKEMp
IDIwMDcgRXJpYyBTZWlkZWwgKGVyaWNAd2Via2l0Lm9yZykKICAqCiAgKiAgVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAtNzMs
NyArNzMsOCBAQCBjb25zdCBDbGFzc0luZm8gSlNPYmplY3Q6OnNfaW5mbyA9IHsgIk9iCiAKIGNv
bnN0IENsYXNzSW5mbyBKU0ZpbmFsT2JqZWN0OjpzX2luZm8gPSB7ICJPYmplY3QiLCAmQmFzZTo6
c19pbmZvLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTRmluYWxPYmpl
Y3QpIH07CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKU09iamVjdDo6bWFya0F1eGlsaWFyeUFuZFZp
c2l0T3V0T2ZMaW5lUHJvcGVydGllcyhTbG90VmlzaXRvciYgdmlzaXRvciwgQnV0dGVyZmx5KiBi
dXR0ZXJmbHksIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBtYXhPZmZzZXQp
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgorQUxXQVlTX0lOTElORSB2b2lkIEpTT2JqZWN0
OjptYXJrQXV4aWxpYXJ5QW5kVmlzaXRPdXRPZkxpbmVQcm9wZXJ0aWVzKFZpc2l0b3ImIHZpc2l0
b3IsIEJ1dHRlcmZseSogYnV0dGVyZmx5LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUHJvcGVydHlP
ZmZzZXQgbWF4T2Zmc2V0KQogewogICAgIC8vIFdlIGNhbGwgdGhpcyB3aGVuIHdlIGZvdW5kIGV2
ZXJ5dGhpbmcgd2l0aG91dCByYWNlcy4KICAgICBBU1NFUlQoc3RydWN0dXJlKTsKQEAgLTEwNCw3
ICsxMDUsOCBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSlNPYmplY3Q6Om1hcmtBdXhpbGlhCiAgICAg
dmlzaXRvci5hcHBlbmRWYWx1ZXNIaWRkZW4oYnV0dGVyZmx5LT5wcm9wZXJ0eVN0b3JhZ2UoKSAt
IG91dE9mTGluZVNpemUsIG91dE9mTGluZVNpemUpOwogfQogCi1BTFdBWVNfSU5MSU5FIFN0cnVj
dHVyZSogSlNPYmplY3Q6OnZpc2l0QnV0dGVyZmx5KFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVt
cGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK0FMV0FZU19JTkxJTkUgU3RydWN0dXJlKiBKU09iamVj
dDo6dmlzaXRCdXR0ZXJmbHkoVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBzdGF0aWMgY29uc3Qg
Y2hhciogY29uc3QgcmFjZVJlYXNvbiA9ICJKU09iamVjdDo6dmlzaXRCdXR0ZXJmbHkiOwogICAg
IFN0cnVjdHVyZSogcmVzdWx0ID0gdmlzaXRCdXR0ZXJmbHlJbXBsKHZpc2l0b3IpOwpAQCAtMTEz
LDcgKzExNSw4IEBAIEFMV0FZU19JTkxJTkUgU3RydWN0dXJlKiBKU09iamVjdDo6dmlzaXQKICAg
ICByZXR1cm4gcmVzdWx0OwogfQogCi1BTFdBWVNfSU5MSU5FIFN0cnVjdHVyZSogSlNPYmplY3Q6
OnZpc2l0QnV0dGVyZmx5SW1wbChTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVu
YW1lIFZpc2l0b3I+CitBTFdBWVNfSU5MSU5FIFN0cnVjdHVyZSogSlNPYmplY3Q6OnZpc2l0QnV0
dGVyZmx5SW1wbChWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFZNJiB2bSA9IHZpc2l0b3Iudm0o
KTsKICAgICAKQEAgLTQxMywyNCArNDE2LDIwIEBAIHNpemVfdCBKU09iamVjdDo6ZXN0aW1hdGVk
U2l6ZShKU0NlbGwqIGMKICAgICByZXR1cm4gQmFzZTo6ZXN0aW1hdGVkU2l6ZShjZWxsLCB2bSkg
KyBidXR0ZXJmbHlPdXRPZkxpbmVTaXplOwogfQogCi12b2lkIEpTT2JqZWN0Ojp2aXNpdENoaWxk
cmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBWaXNpdG9yPgordm9pZCBKU09iamVjdDo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxs
LCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0
PEpTT2JqZWN0Kj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2Jq
ZWN0LCBpbmZvKCkpOwotI2lmIEFTU0VSVF9FTkFCTEVECi0gICAgYm9vbCB3YXNDaGVja2luZ0Zv
ckRlZmF1bHRNYXJrVmlvbGF0aW9uID0gdmlzaXRvci5tX2lzQ2hlY2tpbmdGb3JEZWZhdWx0TWFy
a1Zpb2xhdGlvbjsKLSAgICB2aXNpdG9yLm1faXNDaGVja2luZ0ZvckRlZmF1bHRNYXJrVmlvbGF0
aW9uID0gZmFsc2U7Ci0jZW5kaWYKLSAgICAKKyAgICB0eXBlbmFtZSBWaXNpdG9yOjpEZWZhdWx0
TWFya2luZ1Zpb2xhdGlvbkFzc2VydGlvblNjb3BlIGFzc2VydGlvblNjb3BlKHZpc2l0b3IpOwor
CiAgICAgSlNDZWxsOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwotICAgIAor
CiAgICAgdGhpc09iamVjdC0+dmlzaXRCdXR0ZXJmbHkodmlzaXRvcik7Ci0gICAgCi0jaWYgQVNT
RVJUX0VOQUJMRUQKLSAgICB2aXNpdG9yLm1faXNDaGVja2luZ0ZvckRlZmF1bHRNYXJrVmlvbGF0
aW9uID0gd2FzQ2hlY2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlvbjsKLSNlbmRpZgogfQogCitE
RUZJTkVfVklTSVRfQ0hJTERSRU5fV0lUSF9NT0RJRklFUihKU19FWFBPUlRfUFJJVkFURSwgSlNP
YmplY3QpOworCiB2b2lkIEpTT2JqZWN0OjphbmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhlYXBB
bmFseXplciYgYW5hbHl6ZXIpCiB7CiAgICAgSlNPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8
SlNPYmplY3QqPihjZWxsKTsKQEAgLTQ2OSwxNCArNDY4LDEyIEBAIHZvaWQgSlNPYmplY3Q6OmFu
YWx5emVIZWFwKEpTQ2VsbCogY2VsbCwKICAgICB9CiB9CiAKLXZvaWQgSlNGaW5hbE9iamVjdDo6
dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxh
dGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNGaW5hbE9iamVjdDo6dmlzaXRDaGlsZHJlbklt
cGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTRmluYWxPYmplY3Qq
IHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNGaW5hbE9iamVjdCo+KGNlbGwpOwogICAgIEFTU0VSVF9H
Q19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKLSNpZiBBU1NFUlRfRU5BQkxF
RAotICAgIGJvb2wgd2FzQ2hlY2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlvbiA9IHZpc2l0b3Iu
bV9pc0NoZWNraW5nRm9yRGVmYXVsdE1hcmtWaW9sYXRpb247Ci0gICAgdmlzaXRvci5tX2lzQ2hl
Y2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlvbiA9IGZhbHNlOwotI2VuZGlmCisgICAgdHlwZW5h
bWUgVmlzaXRvcjo6RGVmYXVsdE1hcmtpbmdWaW9sYXRpb25Bc3NlcnRpb25TY29wZSBhc3NlcnRp
b25TY29wZSh2aXNpdG9yKTsKICAgICAKICAgICBKU0NlbGw6OnZpc2l0Q2hpbGRyZW4odGhpc09i
amVjdCwgdmlzaXRvcik7CiAgICAgCkBAIC00ODQsMTIgKzQ4MSwxMCBAQCB2b2lkIEpTRmluYWxP
YmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsCiAgICAgICAgIGlmICh1bnNpZ25lZCBzdG9yYWdl
U2l6ZSA9IHN0cnVjdHVyZS0+aW5saW5lU2l6ZSgpKQogICAgICAgICAgICAgdmlzaXRvci5hcHBl
bmRWYWx1ZXNIaWRkZW4odGhpc09iamVjdC0+aW5saW5lU3RvcmFnZSgpLCBzdG9yYWdlU2l6ZSk7
CiAgICAgfQotICAgIAotI2lmIEFTU0VSVF9FTkFCTEVECi0gICAgdmlzaXRvci5tX2lzQ2hlY2tp
bmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlvbiA9IHdhc0NoZWNraW5nRm9yRGVmYXVsdE1hcmtWaW9s
YXRpb247Ci0jZW5kaWYKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOX1dJVEhfTU9ESUZJRVIo
SlNfRVhQT1JUX1BSSVZBVEUsIEpTRmluYWxPYmplY3QpOworCiBTdHJpbmcgSlNPYmplY3Q6OmNs
YXNzTmFtZShjb25zdCBKU09iamVjdCogb2JqZWN0LCBWTSYgdm0pCiB7CiAgICAgY29uc3QgQ2xh
c3NJbmZvKiBpbmZvID0gb2JqZWN0LT5jbGFzc0luZm8odm0pOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcg
KzEsNyBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMSBIYXJyaSBQb3J0ZW4gKHBv
cnRlbkBrZGUub3JnKQogICogIENvcHlyaWdodCAoQykgMjAwMSBQZXRlciBLZWxseSAocG1rQHBv
c3QuY29tKQotICogIENvcHlyaWdodCAoQykgMjAwMy0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMTA4LDggKzEwOCw5IEBA
IGNsYXNzIEpTT2JqZWN0IDogcHVibGljIEpTQ2VsbCB7CiBwdWJsaWM6CiAgICAgdXNpbmcgQmFz
ZSA9IEpTQ2VsbDsKIAorICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU5fV0lUSF9NT0RJRklFUihK
U19FWFBPUlRfUFJJVkFURSk7CisKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgc2l6ZV90
IGVzdGltYXRlZFNpemUoSlNDZWxsKiwgVk0mKTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0
aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CiAgICAgSlNfRVhQ
T1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgYW5hbHl6ZUhlYXAoSlNDZWxsKiwgSGVhcEFuYWx5emVy
Jik7CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgU3RyaW5nIGNsYXNzTmFtZShjb25z
dCBKU09iamVjdCosIFZNJik7CkBAIC05ODIsMTEgKzk4MywxMSBAQCBwcm90ZWN0ZWQ6CiAgICAg
SlNPYmplY3QoVk0mLCBTdHJ1Y3R1cmUqLCBCdXR0ZXJmbHkqID0gbnVsbHB0cik7CiAgICAgCiAg
ICAgLy8gVmlzaXRzIHRoZSBidXR0ZXJmbHkgdW5sZXNzIHRoZXJlIGlzIGEgcmFjZS4gUmV0dXJu
cyB0aGUgc3RydWN0dXJlIGlmIHRoZXJlIHdhcyBubyByYWNlLgotICAgIFN0cnVjdHVyZSogdmlz
aXRCdXR0ZXJmbHkoU2xvdFZpc2l0b3ImKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
PiBTdHJ1Y3R1cmUqIHZpc2l0QnV0dGVyZmx5KFZpc2l0b3ImKTsKICAgICAKLSAgICBTdHJ1Y3R1
cmUqIHZpc2l0QnV0dGVyZmx5SW1wbChTbG90VmlzaXRvciYpOworICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFZpc2l0b3I+IFN0cnVjdHVyZSogdmlzaXRCdXR0ZXJmbHlJbXBsKFZpc2l0b3ImKTsKICAg
ICAKLSAgICB2b2lkIG1hcmtBdXhpbGlhcnlBbmRWaXNpdE91dE9mTGluZVByb3BlcnRpZXMoU2xv
dFZpc2l0b3ImLCBCdXR0ZXJmbHkqLCBTdHJ1Y3R1cmUqLCBQcm9wZXJ0eU9mZnNldCBtYXhPZmZz
ZXQpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgbWFya0F1eGlsaWFyeUFu
ZFZpc2l0T3V0T2ZMaW5lUHJvcGVydGllcyhWaXNpdG9yJiwgQnV0dGVyZmx5KiwgU3RydWN0dXJl
KiwgUHJvcGVydHlPZmZzZXQgbWF4T2Zmc2V0KTsKIAogICAgIC8vIENhbGwgdGhpcyBpZiB5b3Ug
a25vdyB0aGF0IHRoZSBvYmplY3QgaXMgaW4gYSBtb2RlIHdoZXJlIGl0IGhhcyBhcnJheQogICAg
IC8vIHN0b3JhZ2UuIFRoaXMgd2lsbCBhc3NlcnQgb3RoZXJ3aXNlLgpAQCAtMTE3NCw4ICsxMTc1
LDYgQEAgcHJvdGVjdGVkOgogICAgIH0KIH07CiAKLWNsYXNzIEpTRmluYWxPYmplY3Q7Ci0KIC8v
IEpTRmluYWxPYmplY3QgaXMgYSB0eXBlIG9mIEpTT2JqZWN0IHRoYXQgY29udGFpbnMgc3VmZmlj
aWVudCBpbnRlcm5hbAogLy8gc3RvcmFnZSB0byBmdWxseSBtYWtlIHVzZSBvZiB0aGUgY29sbGVj
dG9yIGNlbGwgY29udGFpbmluZyBpdC4KIGNsYXNzIEpTRmluYWxPYmplY3QgZmluYWwgOiBwdWJs
aWMgSlNPYmplY3QgewpAQCAtMTIxNCwxNSArMTIxMywxMyBAQCBwdWJsaWM6CiAgICAgICAgIHJl
dHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIHR5cGVJ
bmZvKCksIGluZm8oKSwgZGVmYXVsdEluZGV4aW5nVHlwZSwgaW5saW5lQ2FwYWNpdHkpOwogICAg
IH0KIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlND
ZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOX1dJVEhfTU9E
SUZJRVIoSlNfRVhQT1JUX1BSSVZBVEUpOwogCiAgICAgREVDTEFSRV9FWFBPUlRfSU5GTzsKIAog
cHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwogCi0gICAg
dm9pZCB2aXNpdENoaWxkcmVuQ29tbW9uKFNsb3RWaXNpdG9yJik7Ci0KICAgICBleHBsaWNpdCBK
U0ZpbmFsT2JqZWN0KFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEJ1dHRlcmZseSogYnV0
dGVyZmx5KQogICAgICAgICA6IEpTT2JqZWN0KHZtLCBzdHJ1Y3R1cmUsIGJ1dHRlcmZseSkKICAg
ICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb21pc2UuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvbWlzZS5jcHAJ
KHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJv
bWlzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02NywxMyArNjcsMTYgQEAgdm9pZCBKU1Byb21p
c2U6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKICAgICAgICAgQmFzZTo6aW50ZXJuYWxGaWVsZChp
bmRleCkuc2V0KHZtLCB0aGlzLCB2YWx1ZXNbaW5kZXhdKTsKIH0KIAotdm9pZCBKU1Byb21pc2U6
OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBs
YXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTUHJvbWlzZTo6dmlzaXRDaGlsZHJlbkltcGwo
SlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGF1dG8qIHRoaXNPYmplY3Qg
PSBqc0Nhc3Q8SlNQcm9taXNlKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklU
Uyh0aGlzT2JqZWN0LCBpbmZvKCkpOwogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVj
dCwgdmlzaXRvcik7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU1Byb21pc2UpOworCiBh
dXRvIEpTUHJvbWlzZTo6c3RhdHVzKFZNJikgY29uc3QgLT4gU3RhdHVzCiB7CiAgICAgSlNWYWx1
ZSB2YWx1ZSA9IGludGVybmFsRmllbGQoRmllbGQ6OkZsYWdzKS5nZXQoKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvbWlzZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvbWlzZS5oCShyZXZpc2lvbiAyNzI5MDIpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb21pc2UuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC05Niw3ICs5Niw3IEBAIHB1YmxpYzoKICAgICB9OwogICAgIHN0YXRpYyBEZWZlcnJlZERhdGEg
Y3JlYXRlRGVmZXJyZWREYXRhKEpTR2xvYmFsT2JqZWN0KiwgSlNQcm9taXNlQ29uc3RydWN0b3Iq
KTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3Im
KTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiBwcm90ZWN0ZWQ6CiAgICAgSlNQcm9t
aXNlKFZNJiwgU3RydWN0dXJlKik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVydHlOYW1lRW51bWVyYXRvci5jcHAJKHJldmlzaW9u
IDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVydHlOYW1l
RW51bWVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDE0LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE0LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03MCw3ICs3MCw4IEBAIHZvaWQgSlNQ
cm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpmaW5pc2hDcmUKICAgICB9CiB9CiAKLXZvaWQgSlNQcm9w
ZXJ0eU5hbWVFbnVtZXJhdG9yOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0
b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1Byb3BlcnR5
TmFtZUVudW1lcmF0b3I6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYg
dmlzaXRvcikKIHsKICAgICBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqIHRoaXNPYmplY3QgPSBq
c0Nhc3Q8SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09C
SkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtODcsNiArODgsOCBAQCB2b2lk
IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6dmlzaXRDaGlsCiAgICAgfQogfQogCitERUZJTkVf
VklTSVRfQ0hJTERSRU4oSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKTsKKwogLy8gRklYTUU6IEFz
c2VydCB0aGF0IHByb3BlcnRpZXMgcmV0dXJuZWQgYnkgZ2V0T3duUHJvcGVydHlOYW1lcygpIGFy
ZSByZXBvcnRlZCBlbnVtZXJhYmxlIGJ5IGdldE93blByb3BlcnR5U2xvdCgpLgogLy8gaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxOTkyNgogdm9pZCBnZXRFbnVtZXJh
YmxlUHJvcGVydHlOYW1lcyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU09iamVjdCog
YmFzZSwgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIHVpbnQzMl90JiBpbmRleGVk
TGVuZ3RoLCB1aW50MzJfdCYgc3RydWN0dXJlUHJvcGVydHlDb3VudCkKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVydHlOYW1lRW51bWVyYXRvci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVydHlOYW1lRW51bWVy
YXRvci5oCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTg0LDcgKzg0
LDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTUHJvcGVydHlO
YW1lRW51bWVyYXRvciwgbV9wcm9wZXJ0eU5hbWVzKTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9p
ZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJ
VF9DSElMRFJFTjsKIAogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0
cmFjdG9yOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm94eS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm94eS5jcHAJ
KHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJv
eHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMS0yMDEyLCAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDExLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNSw3ICszNSw4IEBAIFNUQVRJ
Q19BU1NFUlRfSVNfVFJJVklBTExZX0RFU1RSVUNUSUJMRSgKIAogY29uc3QgQ2xhc3NJbmZvIEpT
UHJveHk6OnNfaW5mbyA9IHsgIkpTUHJveHkiLCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBudWxs
cHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTUHJveHkpIH07CiAKLXZvaWQgSlNQcm94eTo6dmlz
aXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8
dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNQcm94eTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxs
KiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTUHJveHkqIHRoaXNPYmplY3QgPSBq
c0Nhc3Q8SlNQcm94eSo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhp
c09iamVjdCwgaW5mbygpKTsKQEAgLTQzLDYgKzQ0LDggQEAgdm9pZCBKU1Byb3h5Ojp2aXNpdENo
aWxkcmVuKEpTQ2VsbCogY2VsbAogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fdGFy
Z2V0KTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOX1dJVEhfTU9ESUZJRVIoSlNfRVhQT1JU
X1BSSVZBVEUsIEpTUHJveHkpOworCiB2b2lkIEpTUHJveHk6OnNldFRhcmdldChWTSYgdm0sIEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCiB7CiAgICAgbV90YXJnZXQuc2V0KHZtLCB0aGlz
LCBnbG9iYWxPYmplY3QpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQ
cm94eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJv
eHkuaAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNQcm94eS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMS0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODUsNyArODUsNyBAQCBwcm90ZWN0ZWQ6CiAg
ICAgICAgIG1fdGFyZ2V0LnNldCh2bSwgdGhpcywgdGFyZ2V0KTsKICAgICB9CiAKLSAgICBKU19F
WFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNp
dG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTl9XSVRIX01PRElGSUVSKEpTX0VYUE9S
VF9QUklWQVRFKTsKIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBTdHJpbmcgY2xhc3NO
YW1lKGNvbnN0IEpTT2JqZWN0KiwgVk0mKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMg
U3RyaW5nIHRvU3RyaW5nTmFtZShjb25zdCBKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0Kik7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Njb3BlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Njb3BlLmNwcAkocmV2aXNpb24g
MjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTY29wZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIw
MjAgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEy
LTIwMjEgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0zOSw3ICszOSw4IEBAIFNUQVRJQ19BU1NFUlRfSVNfVFJJVklBTExZ
X0RFU1RSVUNUSUJMRSgKIAogY29uc3QgQ2xhc3NJbmZvIEpTU2NvcGU6OnNfaW5mbyA9IHsgIlNj
b3BlIiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJM
RShKU1Njb3BlKSB9OwogCi12b2lkIEpTU2NvcGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxs
LCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lk
IEpTU2NvcGU6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRv
cikKIHsKICAgICBKU1Njb3BlKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTU2NvcGUqPihjZWxsKTsK
ICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC00
Nyw2ICs0OCw4IEBAIHZvaWQgSlNTY29wZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwKICAg
ICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX25leHQpOwogfQogCitERUZJTkVfVklTSVRf
Q0hJTERSRU4oSlNTY29wZSk7CisKIC8vIFJldHVybnMgdHJ1ZSBpZiB3ZSBmb3VuZCBlbm91Z2gg
aW5mb3JtYXRpb24gdG8gdGVybWluYXRlIG9wdGltaXphdGlvbi4KIHN0YXRpYyBpbmxpbmUgYm9v
bCBhYnN0cmFjdEFjY2VzcyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1Njb3BlKiBz
Y29wZSwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIEdldE9yUHV0IGdldE9yUHV0LCBzaXplX3Qg
ZGVwdGgsIGJvb2wmIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCBSZXNvbHZlT3AmIG9wLCBJbml0
aWFsaXphdGlvbk1vZGUgaW5pdGlhbGl6YXRpb25Nb2RlKQogewpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNTY29wZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTU2NvcGUuaAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTY29wZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE5IEFwcGxlIEluYy4gQWxsIFJpZ2h0
cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDIxIEFwcGxlIEluYy4gQWxsIFJp
Z2h0cyBSZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjQsNyAr
NjQsNyBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgdm9pZCBjb2xsZWN0Q2xvc3VyZVZhcmlhYmxl
c1VuZGVyVERaKEpTU2NvcGUqLCBURFpFbnZpcm9ubWVudCYgcmVzdWx0LCBQcml2YXRlTmFtZUVu
dmlyb25tZW50Jik7CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNs
b3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIGJvb2wgaXNW
YXJTY29wZSgpOwogICAgIGJvb2wgaXNMZXhpY2FsU2NvcGUoKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVPYmplY3QuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVP
YmplY3QuY3BwCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjIs
NyArNjIsOCBAQCBTY29wZU9mZnNldCBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0OjphCiAgICAg
cmV0dXJuIFNjb3BlT2Zmc2V0KG9sZFNpemUpOwogfQogCi12b2lkIEpTU2VnbWVudGVkVmFyaWFi
bGVPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRv
cikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTU2VnbWVudGVkVmFyaWFibGVP
YmplY3Q6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikK
IHsKICAgICBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpT
U2VnbWVudGVkVmFyaWFibGVPYmplY3QqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lO
SEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC03NSw2ICs3Niw4IEBAIHZvaWQgSlNTZWdt
ZW50ZWRWYXJpYWJsZU9iamVjdDo6dmlzaXRDaGkKICAgICAgICAgdmlzaXRvci5hcHBlbmRIaWRk
ZW4odGhpc09iamVjdC0+bV92YXJpYWJsZXNbaV0pOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERS
RU5fV0lUSF9NT0RJRklFUihKU19FWFBPUlRfUFJJVkFURSwgSlNTZWdtZW50ZWRWYXJpYWJsZU9i
amVjdCk7CisKIHZvaWQgSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdDo6YW5hbHl6ZUhlYXAoSlND
ZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQogewogICAgIEpTU2VnbWVudGVkVmFy
aWFibGVPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNTZWdtZW50ZWRWYXJpYWJsZU9iamVj
dCo+KGNlbGwpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZWdtZW50
ZWRWYXJpYWJsZU9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVPYmplY3QuaAkocmV2aXNpb24gMjcyOTAyKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
Mi0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtODUsOCArODUsOCBAQCBwdWJsaWM6CiAgICAgLy8gQWRkcyBu
dW1iZXJPZlJlZ2lzdGVyc1RvQWRkIHJlZ2lzdGVycywgaW5pdGlhbGl6ZXMgdGhlbSB0byBVbmRl
ZmluZWQsIGFuZCByZXR1cm5zCiAgICAgLy8gdGhlIGluZGV4IG9mIHRoZSBmaXJzdCBvbmUgYWRk
ZWQuCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgU2NvcGVPZmZzZXQgYWRkVmFyaWFibGVzKHVuc2ln
bmVkIG51bWJlck9mVmFyaWFibGVzVG9BZGQsIEpTVmFsdWUpOwotICAgIAotICAgIEpTX0VYUE9S
VF9QUklWQVRFIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3Im
KTsKKworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU5fV0lUSF9NT0RJRklFUihKU19FWFBPUlRf
UFJJVkFURSk7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgYW5hbHl6ZUhlYXAo
SlNDZWxsKiwgSGVhcEFuYWx5emVyJik7CiAgICAgCiBwcm90ZWN0ZWQ6CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NldEl0ZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NldEl0ZXJhdG9yLmNwcAkocmV2aXNpb24g
MjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZXRJdGVyYXRvci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTcgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDIxIEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU3LDEzICs1NywxNiBAQCB2b2lkIEpTU2V0SXRlcmF0
b3I6OmZpbmlzaENyZWF0aW9uKFZNJiB2CiAgICAgICAgIEJhc2U6OmludGVybmFsRmllbGQoaW5k
ZXgpLnNldCh2bSwgdGhpcywgdmFsdWVzW2luZGV4XSk7CiB9CiAKLXZvaWQgSlNTZXRJdGVyYXRv
cjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVt
cGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNTZXRJdGVyYXRvcjo6dmlzaXRDaGlsZHJl
bkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGF1dG8qIHRoaXNP
YmplY3QgPSBqc0Nhc3Q8SlNTZXRJdGVyYXRvcio+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpF
Q1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKICAgICBCYXNlOjp2aXNpdENoaWxkcmVu
KHRoaXNPYmplY3QsIHZpc2l0b3IpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNTZXRJ
dGVyYXRvcik7CisKIEpTVmFsdWUgSlNTZXRJdGVyYXRvcjo6Y3JlYXRlUGFpcihKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIGtleSwgSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBN
YXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdzOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNTZXRJdGVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTU2V0SXRlcmF0b3IuaAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZXRJdGVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNiBBcHBsZSwgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjEgQXBwbGUsIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtMTMwLDcgKzEzMCw3IEBAIHByaXZhdGU6CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBm
aW5pc2hDcmVhdGlvbihWTSYsIEpTU2V0KiwgSXRlcmF0aW9uS2luZCk7CiAgICAgdm9pZCBmaW5p
c2hDcmVhdGlvbihWTSYpOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIEpTVmFsdWUgY3JlYXRlUGFp
cihKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUsIEpTVmFsdWUpOwotICAgIHN0YXRpYyB2b2lkIHZp
c2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NI
SUxEUkVOOwogfTsKIFNUQVRJQ19BU1NFUlRfSVNfVFJJVklBTExZX0RFU1RSVUNUSUJMRShKU1Nl
dEl0ZXJhdG9yKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJp
bmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3Ry
aW5nLmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNTdHJpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqICBD
b3B5cmlnaHQgKEMpIDE5OTktMjAwMiBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQogICog
IENvcHlyaWdodCAoQykgMjAwMSBQZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQotICogIENvcHly
aWdodCAoQykgMjAwNC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBD
b3B5cmlnaHQgKEMpIDIwMDQtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMTA1LDcgKzEwNSw4IEBAIHNpemVfdCBKU1N0cmluZzo6
ZXN0aW1hdGVkU2l6ZShKU0NlbGwqIGMKICAgICByZXR1cm4gQmFzZTo6ZXN0aW1hdGVkU2l6ZShj
ZWxsLCB2bSkgKyBiaXR3aXNlX2Nhc3Q8U3RyaW5nSW1wbCo+KHBvaW50ZXIpLT5jb3N0RHVyaW5n
R0MoKTsKIH0KIAotdm9pZCBKU1N0cmluZzo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNT
dHJpbmc6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikK
IHsKICAgICBKU1N0cmluZyogdGhpc09iamVjdCA9IGFzU3RyaW5nKGNlbGwpOwogICAgIEFTU0VS
VF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTE0Myw2ICsxNDQs
OCBAQCB2b2lkIEpTU3RyaW5nOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsCiAgICAgICAgIHZp
c2l0b3IucmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKGltcGwtPmNvc3REdXJpbmdHQygpKTsKIH0K
IAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTU3RyaW5nKTsKKwogc3RhdGljIGNvbnN0ZXhwciB1
bnNpZ25lZCBtYXhMZW5ndGhGb3JPblN0YWNrUmVzb2x2ZSA9IDIwNDg7CiAKIHZvaWQgSlNSb3Bl
U3RyaW5nOjpyZXNvbHZlUm9wZUludGVybmFsOChMQ2hhciogYnVmZmVyKSBjb25zdApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5oCShyZXZpc2lvbiAyNzI5MDIp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMSBIYXJy
aSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQogICogIENvcHlyaWdodCAoQykgMjAwMSBQZXRlciBL
ZWxseSAocG1rQHBvc3QuY29tKQotICogIENvcHlyaWdodCAoQykgMjAwMy0yMDIwIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAyMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjE3
LDcgKzIxNyw3IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyB2b2lkIGR1bXBUb1N0cmVhbShjb25z
dCBKU0NlbGwqLCBQcmludFN0cmVhbSYpOwogICAgIHN0YXRpYyBzaXplX3QgZXN0aW1hdGVkU2l6
ZShKU0NlbGwqLCBWTSYpOwotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwg
U2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgQUxXQVlT
X0lOTElORSBib29sIGlzUm9wZSgpIGNvbnN0CiAgICAgewpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNTdHJpbmdJdGVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmdJdGVyYXRvci5jcHAJKHJldmlzaW9uIDI3
MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nSXRlcmF0b3Iu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykg
MjAxNSBZdXN1a2UgU3V6dWtpIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+LgotICogQ29weXJpZ2h0
IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTEsMTEgKzUxLDE0IEBAIEpTU3RyaW5nSXRlcmF0b3Iq
IEpTU3RyaW5nSXRlcmF0b3I6OmNsb24KICAgICByZXR1cm4gY2xvbmU7CiB9CiAKLXZvaWQgSlNT
dHJpbmdJdGVyYXRvcjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNTdHJpbmdJdGVyYXRv
cjo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewog
ICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNTdHJpbmdJdGVyYXRvcio+KGNlbGwpOwog
ICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKICAgICBC
YXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwogfQogCitERUZJTkVfVklT
SVRfQ0hJTERSRU4oSlNTdHJpbmdJdGVyYXRvcik7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmdJdGVyYXRvci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nSXRlcmF0b3Iu
aAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNT
dHJpbmdJdGVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENv
cHlyaWdodCAoQykgMjAxNSBZdXN1a2UgU3V6dWtpIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+Lgor
ICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNzksNyArODAsNyBAQCBwdWJsaWM6CiAg
ICAgSlNWYWx1ZSBpbmRleCgpIGNvbnN0IHsgcmV0dXJuIGludGVybmFsRmllbGQoRmllbGQ6Oklu
ZGV4KS5nZXQoKTsgfQogICAgIEpTU3RyaW5nSXRlcmF0b3IqIGNsb25lKEpTR2xvYmFsT2JqZWN0
Kik7CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9y
Jik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogcHJpdmF0ZToKICAgICBKU1N0cmlu
Z0l0ZXJhdG9yKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0LmNwcAko
cmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTeW1i
b2xUYWJsZU9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDEyLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNiw3ICszNiw4IEBAIG5hbWVz
cGFjZSBKU0MgewogCiBjb25zdCBDbGFzc0luZm8gSlNTeW1ib2xUYWJsZU9iamVjdDo6c19pbmZv
ID0geyAiU3ltYm9sVGFibGVPYmplY3QiLCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBudWxscHRy
LCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTU3ltYm9sVGFibGVPYmplY3QpIH07CiAKLXZvaWQgSlNT
eW1ib2xUYWJsZU9iamVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9y
JiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNTeW1ib2xUYWJs
ZU9iamVjdDo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9y
KQogewogICAgIEpTU3ltYm9sVGFibGVPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNTeW1i
b2xUYWJsZU9iamVjdCo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhp
c09iamVjdCwgaW5mbygpKTsKQEAgLTQ0LDYgKzQ1LDggQEAgdm9pZCBKU1N5bWJvbFRhYmxlT2Jq
ZWN0Ojp2aXNpdENoaWxkcmVuKAogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fc3lt
Ym9sVGFibGUpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNTeW1ib2xUYWJsZU9iamVj
dCk7CisKIGJvb2wgSlNTeW1ib2xUYWJsZU9iamVjdDo6ZGVsZXRlUHJvcGVydHkoSlNDZWxsKiBj
ZWxsLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlO
YW1lLCBEZWxldGVQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgSlNTeW1ib2xUYWJsZU9iamVj
dCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1N5bWJvbFRhYmxlT2JqZWN0Kj4oY2VsbCk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTeW1ib2xUYWJsZU9i
amVjdC5oCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU1N5bWJvbFRhYmxlT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03MCw3ICs3MCw3IEBA
IHByb3RlY3RlZDoKICAgICAgICAgbV9zeW1ib2xUYWJsZS5zZXQodm0sIHRoaXMsIHN5bWJvbFRh
YmxlKTsKICAgICB9CiAgICAgCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwq
LCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAgICAgCiBwcml2
YXRlOgogICAgIFdyaXRlQmFycmllcjxTeW1ib2xUYWJsZT4gbV9zeW1ib2xUYWJsZTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTV2Vha09iamVjdFJlZi5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNXZWFrT2JqZWN0UmVmLmNw
cAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNX
ZWFrT2JqZWN0UmVmLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxOS0yMDIxIEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM5LDcgKzM5LDggQEAgdm9pZCBKU1dl
YWtPYmplY3RSZWY6OmZpbmlzaENyZWF0aW9uKFZNJgogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9u
KHZtKTsKIH0KIAotdm9pZCBKU1dlYWtPYmplY3RSZWY6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBj
ZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2
b2lkIEpTV2Vha09iamVjdFJlZjo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNp
dG9yJiB2aXNpdG9yKQogewogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNXZWFrT2Jq
ZWN0UmVmKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0
LCBpbmZvKCkpOwpAQCAtNTEsNiArNTIsOCBAQCB2b2lkIEpTV2Vha09iamVjdFJlZjo6dmlzaXRD
aGlsZHJlbihKU0NlCiAgICAgfQogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNXZWFrT2Jq
ZWN0UmVmKTsKKwogdm9pZCBKU1dlYWtPYmplY3RSZWY6OmZpbmFsaXplVW5jb25kaXRpb25hbGx5
KFZNJiB2bSkKIHsKICAgICBpZiAobV92YWx1ZSAmJiAhdm0uaGVhcC5pc01hcmtlZChtX3ZhbHVl
LmdldCgpKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTV2Vha09iamVj
dFJlZi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTV2Vh
a09iamVjdFJlZi5oCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU1dlYWtPYmplY3RSZWYuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOS0yMDIxIEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY1LDcgKzY1LDcgQEAg
cHVibGljOgogICAgIH0KIAogICAgIHZvaWQgZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoVk0mKTsK
LSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7Cisg
ICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogcHJpdmF0ZToKICAgICBKU1dlYWtPYmplY3RS
ZWYoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTV2l0aFNjb3BlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU1dpdGhTY29wZS5jcHAJKHJldmlzaW9uIDI3MjkwMikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTV2l0aFNjb3BlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTYgQXBwbGUg
SW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjEgQXBw
bGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC00MSw3ICs0MSw4IEBAIEpTV2l0aFNjb3BlKiBKU1dpdGhTY29wZTo6Y3JlYXRlKAog
ICAgIHJldHVybiB3aXRoU2NvcGU7CiB9CiAKLXZvaWQgSlNXaXRoU2NvcGU6OnZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1l
IFZpc2l0b3I+Cit2b2lkIEpTV2l0aFNjb3BlOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNl
bGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNXaXRoU2NvcGUqIHRoaXNPYmplY3QgPSBq
c0Nhc3Q8SlNXaXRoU2NvcGUqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRT
KHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC00OSw2ICs1MCw4IEBAIHZvaWQgSlNXaXRoU2NvcGU6
OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiAKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5t
X29iamVjdCk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU1dpdGhTY29wZSk7CisKIFN0
cnVjdHVyZSogSlNXaXRoU2NvcGU6OmNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG8pCiB7CiAgICAgcmV0dXJuIFN0cnVjdHVy
ZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvLCBUeXBlSW5mbyhXaXRoU2NvcGVUeXBl
LCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU1dpdGhTY29wZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTV2l0aFNjb3BlLmgJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTV2l0aFNjb3BlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDE2IEFwcGxlIEluYy4gQWxsIFJp
Z2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDIxIEFwcGxlIEluYy4gQWxs
IFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDMs
NyArNDMsNyBAQCBwdWJsaWM6CiAKICAgICBKU09iamVjdCogb2JqZWN0KCkgeyByZXR1cm4gbV9v
YmplY3QuZ2V0KCk7IH0KIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwg
U2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgc3RhdGlj
IFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVl
IHByb3RvKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNXcmFwcGVy
T2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U1dyYXBwZXJPYmplY3QuY3BwCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU1dyYXBwZXJPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYg
KzEsNiBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDIwMDYgTWFrcyBPcmxvdmljaAotICogIENv
cHlyaWdodCAoQykgMjAwNiwgMjAwOSwgMjAxMiBBcHBsZSwgSW5jLgorICogIENvcHlyaWdodCAo
QykgMjAwNi0yMDIxIEFwcGxlLCBJbmMuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjksMTEg
KzI5LDE0IEBAIG5hbWVzcGFjZSBKU0MgewogCiBTVEFUSUNfQVNTRVJUX0lTX1RSSVZJQUxMWV9E
RVNUUlVDVElCTEUoSlNXcmFwcGVyT2JqZWN0KTsKIAotdm9pZCBKU1dyYXBwZXJPYmplY3Q6OnZp
c2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRl
PHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTV3JhcHBlck9iamVjdDo6dmlzaXRDaGlsZHJlbklt
cGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGF1dG8qIHRoaXNPYmpl
Y3QgPSBqc0Nhc3Q8SlNXcmFwcGVyT2JqZWN0Kj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVD
VF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4o
dGhpc09iamVjdCwgdmlzaXRvcik7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTl9XSVRIX01P
RElGSUVSKEpTX0VYUE9SVF9QUklWQVRFLCBKU1dyYXBwZXJPYmplY3QpOworCiB9IC8vIG5hbWVz
cGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTV3JhcHBlck9i
amVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTV3Jh
cHBlck9iamVjdC5oCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU1dyYXBwZXJPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAK
IC8qCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA2IE1ha3MgT3Jsb3ZpY2gKLSAqICBDb3B5cmlnaHQg
KEMpIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogIENvcHlyaWdodCAoQykgMjAwNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC02NCw3ICs2NCw3IEBAIHB1YmxpYzoKIHBy
b3RlY3RlZDoKICAgICBleHBsaWNpdCBKU1dyYXBwZXJPYmplY3QoVk0mLCBTdHJ1Y3R1cmUqKTsK
IAotICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOX1dJVEhfTU9ESUZJ
RVIoSlNfRVhQT1JUX1BSSVZBVEUpOwogfTsKIAogaW5saW5lIEpTV3JhcHBlck9iamVjdDo6SlNX
cmFwcGVyT2JqZWN0KFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9MYXp5Q2xhc3NTdHJ1Y3R1cmUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0xhenlDbGFzc1N0cnVjdHVyZS5jcHAJ
KHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0xhenlD
bGFzc1N0cnVjdHVyZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDE2LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03MiwxMiArNzIsMTYgQEAgdm9p
ZCBMYXp5Q2xhc3NTdHJ1Y3R1cmU6OkluaXRpYWxpemVyOjpzZQogICAgIGNsYXNzU3RydWN0dXJl
Lm1fY29uc3RydWN0b3Iuc2V0KHZtLCBnbG9iYWwsIGNvbnN0cnVjdG9yKTsKIH0KIAotdm9pZCBM
YXp5Q2xhc3NTdHJ1Y3R1cmU6OnZpc2l0KFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8
dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgTGF6eUNsYXNzU3RydWN0dXJlOjp2aXNpdChWaXNpdG9y
JiB2aXNpdG9yKQogewogICAgIG1fc3RydWN0dXJlLnZpc2l0KHZpc2l0b3IpOwogICAgIHZpc2l0
b3IuYXBwZW5kKG1fY29uc3RydWN0b3IpOwogfQogCit0ZW1wbGF0ZSB2b2lkIExhenlDbGFzc1N0
cnVjdHVyZTo6dmlzaXQoQWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBMYXp5
Q2xhc3NTdHJ1Y3R1cmU6OnZpc2l0KFNsb3RWaXNpdG9yJik7CisKIHZvaWQgTGF6eUNsYXNzU3Ry
dWN0dXJlOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiB7CiAgICAgb3V0LnByaW50KCI8
c3RydWN0dXJlID0gIiwgbV9zdHJ1Y3R1cmUsICIsIGNvbnN0cnVjdG9yID0gIiwgUmF3UG9pbnRl
cihtX2NvbnN0cnVjdG9yLmdldCgpKSwgIj4iKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0xhenlDbGFzc1N0cnVjdHVyZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0xhenlDbGFzc1N0cnVjdHVyZS5oCShyZXZpc2lvbiAyNzI5MDIp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9MYXp5Q2xhc3NTdHJ1Y3R1cmUuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIw
MjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0xMTcsNyArMTE3LDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9j
b25zdHJ1Y3Rvci5nZXQoKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCB2aXNpdChTbG90VmlzaXRv
ciYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgdmlzaXQoVmlzaXRvciYp
OwogICAgIAogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9MYXp5UHJvcGVydHkuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9MYXp5UHJvcGVydHkuaAkocmV2aXNpb24gMjcy
OTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTGF6eVByb3BlcnR5LmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIw
MTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2
LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0xMDMsNyArMTAzLDcgQEAgcHVibGljOgogICAgIHZvaWQgc2V0TWF5
QmVOdWxsKFZNJiwgY29uc3QgT3duZXJUeXBlKiBvd25lciwgRWxlbWVudFR5cGUqKTsKICAgICB2
b2lkIHNldChWTSYsIGNvbnN0IE93bmVyVHlwZSogb3duZXIsIEVsZW1lbnRUeXBlKik7CiAgICAg
Ci0gICAgdm9pZCB2aXNpdChTbG90VmlzaXRvciYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZp
c2l0b3I+IHZvaWQgdmlzaXQoVmlzaXRvciYpOwogICAgIAogICAgIHZvaWQgZHVtcChQcmludFN0
cmVhbSYpIGNvbnN0OwogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
TGF6eVByb3BlcnR5SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0xhenlQcm9wZXJ0eUlubGluZXMuaAkocmV2aXNpb24gMjcyOTAyKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTGF6eVByb3BlcnR5SW5saW5lcy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTY2LDcgKzY2LDggQEAgdm9pZCBMYXp5UHJvcGVydHk8T3duZXJUeXBlLCBFbGVtZW50
VHlwZQogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPd25lclR5cGUsIHR5cGVuYW1lIEVsZW1lbnRU
eXBlPgotdm9pZCBMYXp5UHJvcGVydHk8T3duZXJUeXBlLCBFbGVtZW50VHlwZT46OnZpc2l0KFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgTGF6
eVByb3BlcnR5PE93bmVyVHlwZSwgRWxlbWVudFR5cGU+Ojp2aXNpdChWaXNpdG9yJiB2aXNpdG9y
KQogewogICAgIGlmIChtX3BvaW50ZXIgJiYgIShtX3BvaW50ZXIgJiBsYXp5VGFnKSkKICAgICAg
ICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZChiaXR3aXNlX2Nhc3Q8RWxlbWVudFR5cGUqPiht
X3BvaW50ZXIpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01vZHVsZVBy
b2dyYW1FeGVjdXRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9Nb2R1bGVQcm9ncmFtRXhlY3V0YWJsZS5jcHAJKHJldmlzaW9uIDI3MjkwMikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01vZHVsZVByb2dyYW1FeGVjdXRhYmxlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDksIDIwMTAsIDIwMTMsIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTc5LDcgKzc5LDggQEAgYXV0
byBNb2R1bGVQcm9ncmFtRXhlY3V0YWJsZTo6ZW5zdXJlVGVtcAogICAgIHJldHVybiBlbnN1cmVU
ZW1wbGF0ZU9iamVjdE1hcEltcGwobV90ZW1wbGF0ZU9iamVjdE1hcCk7CiB9CiAKLXZvaWQgTW9k
dWxlUHJvZ3JhbUV4ZWN1dGFibGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90Vmlz
aXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIE1vZHVsZVBy
b2dyYW1FeGVjdXRhYmxlOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3Im
IHZpc2l0b3IpCiB7CiAgICAgTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUqIHRoaXNPYmplY3QgPSBq
c0Nhc3Q8TW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JK
RUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC05NCw0ICs5NSw2IEBAIHZvaWQg
TW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGU6OnZpc2l0Q2hpbGQKICAgICB9CiB9CiAKK0RFRklORV9W
SVNJVF9DSElMRFJFTihNb2R1bGVQcm9ncmFtRXhlY3V0YWJsZSk7CisKIH0gLy8gbmFtZXNwYWNl
IEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTW9kdWxlUHJvZ3JhbUV4
ZWN1dGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9N
b2R1bGVQcm9ncmFtRXhlY3V0YWJsZS5oCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9Nb2R1bGVQcm9ncmFtRXhlY3V0YWJsZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOS0yMDE5IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtNzcsNyArNzcsNyBAQCBwcml2YXRlOgogCiAgICAgTW9kdWxlUHJvZ3JhbUV4ZWN1
dGFibGUoSlNHbG9iYWxPYmplY3QqLCBjb25zdCBTb3VyY2VDb2RlJik7CiAKLSAgICBzdGF0aWMg
dm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9W
SVNJVF9DSElMRFJFTjsKIAogICAgIFdyaXRlQmFycmllcjxVbmxpbmtlZE1vZHVsZVByb2dyYW1D
b2RlQmxvY2s+IG1fdW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrOwogICAgIFdyaXRlQmFy
cmllcjxTeW1ib2xUYWJsZT4gbV9tb2R1bGVFbnZpcm9ubWVudFN5bWJvbFRhYmxlOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAJKHJldmlzaW9uIDI3Mjkw
MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMS0yMDIwIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtNTU4LDYgKzU1OCw5IEBAIHZvaWQgT3B0aW9uczo6cmVjb21wdXRlRGVwZW5k
ZW50T3B0aW9ucygKIAogICAgIGlmIChPcHRpb25zOjp1c2VQcml2YXRlU3RhdGljQ2xhc3NGaWVs
ZHMoKSkKICAgICAgICAgT3B0aW9uczo6dXNlUHJpdmF0ZUNsYXNzRmllbGRzKCkgPSB0cnVlOwor
CisgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VWZXJpZnlHQygpKQorICAgICAgICBPcHRpb25zOjp2
ZXJpZnlHQygpID0gdHJ1ZTsKIH0KIAogaW5saW5lIHZvaWQqIE9wdGlvbnM6OmFkZHJlc3NPZk9w
dGlvbihPcHRpb25zOjpJRCBpZCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L09wdGlvbnNMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvT3B0aW9uc0xpc3QuaAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMzY5LDYgKzM2OSw4
IEBAIEpTX0VYUE9SVF9QUklWQVRFIGJvb2wgY2FuVXNlSklUQ2FnZSgpOwogICAgIHYoQm9vbCwg
YWx3YXlzR2VuZXJhdGVQQ1RvQ29kZU9yaWdpbk1hcCwgZmFsc2UsIE5vcm1hbCwgIlRoaXMgd2ls
bCBtYWtlIHN1cmUgd2UgYWx3YXlzIGdlbmVyYXRlIGEgUENUb0NvZGVPcmlnaW5NYXAgZm9yIEpJ
VGVkIGNvZGUuIikgXAogICAgIFwKICAgICB2KERvdWJsZSwgcmFuZG9tSW50ZWdyaXR5QXVkaXRS
YXRlLCAwLjA1LCBOb3JtYWwsICJQcm9iYWJpbGl0eSBvZiByYW5kb20gaW50ZWdyaXR5IGF1ZGl0
cyBbMC4wIC0gMS4wXSIpIFwKKyAgICB2KEJvb2wsIHZlcmlmeUdDLCBmYWxzZSwgTm9ybWFsLCBu
dWxscHRyKSBcCisgICAgdihCb29sLCB2ZXJib3NlVmVyaWZ5R0MsIGZhbHNlLCBOb3JtYWwsIG51
bGxwdHIpIFwKICAgICB2KEJvb2wsIHZlcmlmeUhlYXAsIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIp
IFwKICAgICB2KFVuc2lnbmVkLCBudW1iZXJPZkdDQ3ljbGVzVG9SZWNvcmRGb3JWZXJpZmljYXRp
b24sIDMsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1Byb2dyYW1FeGVjdXRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9ncmFtRXhlY3V0YWJsZS5jcHAJKHJldmlzaW9uIDI3
MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb2dyYW1FeGVjdXRhYmxl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDktMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDktMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTIwOCw3ICsyMDgsOCBAQCBhdXRvIFByb2dyYW1FeGVj
dXRhYmxlOjplbnN1cmVUZW1wbGF0ZU9iCiAgICAgcmV0dXJuIGVuc3VyZVRlbXBsYXRlT2JqZWN0
TWFwSW1wbChtX3RlbXBsYXRlT2JqZWN0TWFwKTsKIH0KIAotdm9pZCBQcm9ncmFtRXhlY3V0YWJs
ZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVt
cGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgUHJvZ3JhbUV4ZWN1dGFibGU6OnZpc2l0Q2hp
bGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBQcm9ncmFt
RXhlY3V0YWJsZSogdGhpc09iamVjdCA9IGpzQ2FzdDxQcm9ncmFtRXhlY3V0YWJsZSo+KGNlbGwp
OwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAg
LTIyMiw0ICsyMjMsNiBAQCB2b2lkIFByb2dyYW1FeGVjdXRhYmxlOjp2aXNpdENoaWxkcmVuKEpT
CiAgICAgfQogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oUHJvZ3JhbUV4ZWN1dGFibGUpOwor
CiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1Byb2dyYW1FeGVjdXRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvUHJvZ3JhbUV4ZWN1dGFibGUuaAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvZ3JhbUV4ZWN1dGFibGUuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxOSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAyMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTgxLDcgKzgxLDcgQEAgcHJpdmF0ZToKIAogICAgIFByb2dyYW1FeGVjdXRhYmxlKEpT
R2xvYmFsT2JqZWN0KiwgY29uc3QgU291cmNlQ29kZSYpOwogCi0gICAgc3RhdGljIHZvaWQgdmlz
aXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJ
TERSRU47CiAKICAgICBXcml0ZUJhcnJpZXI8VW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrPiBtX3Vu
bGlua2VkUHJvZ3JhbUNvZGVCbG9jazsKICAgICBXcml0ZUJhcnJpZXI8RXhlY3V0YWJsZVRvQ29k
ZUJsb2NrRWRnZT4gbV9wcm9ncmFtQ29kZUJsb2NrOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvUHJvcGVydHlNYXBIYXNoVGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eU1hcEhhc2hUYWJsZS5oCShyZXZpc2lvbiAy
NzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eU1hcEhhc2hU
YWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqICBDb3B5cmlnaHQg
KEMpIDIwMDQtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJp
Z2h0IChDKSAyMDA0LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
ICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKQEAgLTEzMyw3ICsxMzMsNyBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgbmVlZHNEZXN0cnVjdGlvbiA9IHRydWU7CiAgICAgc3RhdGljIHZvaWQg
ZGVzdHJveShKU0NlbGwqKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCos
IFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIERFQ0xB
UkVfRVhQT1JUX0lORk87CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1By
b3BlcnR5VGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1Byb3BlcnR5VGFibGUuY3BwCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eVRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0x
MTgsNyArMTE4LDggQEAgdm9pZCBQcm9wZXJ0eVRhYmxlOjpmaW5pc2hDcmVhdGlvbihWTSYgdgog
ICAgIHZtLmhlYXAucmVwb3J0RXh0cmFNZW1vcnlBbGxvY2F0ZWQoZGF0YVNpemUoKSk7CiB9CiAK
LXZvaWQgUHJvcGVydHlUYWJsZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNp
dG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgUHJvcGVydHlU
YWJsZTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQog
ewogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8UHJvcGVydHlUYWJsZSo+KGNlbGwpOwog
ICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTEy
Niw2ICsxMjcsOCBAQCB2b2lkIFByb3BlcnR5VGFibGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsCiAg
ICAgdmlzaXRvci5yZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQodGhpc09iamVjdC0+ZGF0YVNpemUo
KSk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihQcm9wZXJ0eVRhYmxlKTsKKwogdm9pZCBQ
cm9wZXJ0eVRhYmxlOjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKIHsKICAgICBzdGF0aWNfY2FzdDxQ
cm9wZXJ0eVRhYmxlKj4oY2VsbCktPlByb3BlcnR5VGFibGU6On5Qcm9wZXJ0eVRhYmxlKCk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm94eU9iamVjdC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJveHlPYmplY3QuY3BwCShy
ZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm94eU9i
amVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDE2LTIwMjAgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMTc5LDcgKzExNzksOCBAQCBib29sIFByb3h5
T2JqZWN0Ojppc1Jldm9rZWQoKSBjb25zdAogICAgIHJldHVybiBoYW5kbGVyKCkuaXNOdWxsKCk7
CiB9CiAKLXZvaWQgUHJveHlPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90
VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFByb3h5
T2JqZWN0Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3Ip
CiB7CiAgICAgUHJveHlPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8UHJveHlPYmplY3QqPihj
ZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7
CkBAIC0xMTg5LDQgKzExOTAsNiBAQCB2b2lkIFByb3h5T2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpT
Q2VsbCogCiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9oYW5kbGVyKTsKIH0KIAor
REVGSU5FX1ZJU0lUX0NISUxEUkVOKFByb3h5T2JqZWN0KTsKKwogfSAvLyBuYW1lc3BhY2UgSlND
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm94eU9iamVjdC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3h5T2JqZWN0LmgJKHJl
dmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3h5T2Jq
ZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtOTEsNyArOTEsNyBAQCBwcml2YXRlOgogICAgIHN0YXRpYyB2
b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIFByb3Bl
cnR5TmFtZUFycmF5JiwgRG9udEVudW1Qcm9wZXJ0aWVzTW9kZSk7CiAgICAgc3RhdGljIGJvb2wg
c2V0UHJvdG90eXBlKEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlIHByb3RvdHlw
ZSwgYm9vbCBzaG91bGRUaHJvd0lmQ2FudFNldCk7CiAgICAgc3RhdGljIEpTVmFsdWUgZ2V0UHJv
dG90eXBlKEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNp
dENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElM
RFJFTjsKIAogICAgIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90Q29tbW9uKEpTR2xvYmFsT2JqZWN0
KiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKICAgICBib29sIHBlcmZvcm1JbnRlcm5h
bE1ldGhvZEdldE93blByb3BlcnR5KEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBQcm9w
ZXJ0eVNsb3QmKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3h5UmV2
b2tlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm94
eVJldm9rZS5jcHAJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1Byb3h5UmV2b2tlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02OSw3ICs2OSw4IEBAIEpTQ19E
RUZJTkVfSE9TVF9GVU5DVElPTihwZXJmb3JtUHJveHlSZXYKICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCi12b2lkIFByb3h5UmV2b2tlOjp2aXNpdENoaWxk
cmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBWaXNpdG9yPgordm9pZCBQcm94eVJldm9rZTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBj
ZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFByb3h5UmV2b2tlKiB0aGlzT2JqZWN0ID0g
anNDYXN0PFByb3h5UmV2b2tlKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklU
Uyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNzgsNCArNzksNiBAQCB2b2lkIFByb3h5UmV2b2tl
Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogCiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+
bV9wcm94eSk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihQcm94eVJldm9rZSk7CisKIH0g
Ly8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJv
eHlSZXZva2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Q
cm94eVJldm9rZS5oCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9Qcm94eVJldm9rZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE5IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIxIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTIsNyArNTIsNyBAQCBw
dWJsaWM6CiAgICAgfQogCiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIFByb3h5T2JqZWN0
Kik7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYp
OworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAgICAgSlNWYWx1ZSBwcm94eSgpIHsgcmV0
dXJuIG1fcHJveHkuZ2V0KCk7IH0KICAgICB2b2lkIHNldFByb3h5VG9OdWxsKFZNJiB2bSkgeyBy
ZXR1cm4gbV9wcm94eS5zZXQodm0sIHRoaXMsIGpzTnVsbCgpKTsgfQogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBDYWNoZWRSZXN1bHQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENhY2hlZFJlc3VsdC5jcHAJ
KHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4
cENhY2hlZFJlc3VsdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDEyLCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzEsNyArMzEsOCBAQAogCiBu
YW1lc3BhY2UgSlNDIHsKIAotdm9pZCBSZWdFeHBDYWNoZWRSZXN1bHQ6OnZpc2l0QWdncmVnYXRl
KFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQg
UmVnRXhwQ2FjaGVkUmVzdWx0Ojp2aXNpdEFnZ3JlZ2F0ZUltcGwoVmlzaXRvciYgdmlzaXRvcikK
IHsKICAgICB2aXNpdG9yLmFwcGVuZChtX2xhc3RJbnB1dCk7CiAgICAgdmlzaXRvci5hcHBlbmQo
bV9sYXN0UmVnRXhwKTsKQEAgLTQzLDYgKzQ0LDggQEAgdm9pZCBSZWdFeHBDYWNoZWRSZXN1bHQ6
OnZpc2l0QWdncmVnYXRlKAogICAgIH0KIH0KIAorREVGSU5FX1ZJU0lUX0FHR1JFR0FURShSZWdF
eHBDYWNoZWRSZXN1bHQpOworCiBKU0FycmF5KiBSZWdFeHBDYWNoZWRSZXN1bHQ6Omxhc3RSZXN1
bHQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNPYmplY3QqIG93bmVyKQogewogICAg
IFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1JlZ0V4cENhY2hlZFJlc3VsdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENhY2hlZFJlc3VsdC5oCShyZXZpc2lvbiAyNzI5MDIp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBDYWNoZWRSZXN1bHQuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIs
IDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEyLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC02NSw3ICs2NSw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJu
IG1fcmVpZmllZCA/IG1fcmVpZmllZElucHV0LmdldCgpIDogbV9sYXN0SW5wdXQuZ2V0KCk7CiAg
ICAgfQogCi0gICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYpOworICAgIERFQ0xB
UkVfVklTSVRfQUdHUkVHQVRFOwogCiAgICAgLy8gbV9sYXN0UmVnRXhwIHdvdWxkIGJlIG51bGxw
dHIgd2hlbiBSZWdFeHBDYWNoZWRSZXN1bHQgaXMgbm90IHJlaWZpZWQuCiAgICAgLy8gSWYgd2Ug
ZmluZCBtX2xhc3RSZWdFeHAgaXMgbnVsbHB0ciwgaXQgbWVhbnMgdGhpcyBzaG91bGQgaG9sZCB0
aGUgZW1wdHkgUmVnRXhwLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVn
RXhwR2xvYmFsRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvUmVnRXhwR2xvYmFsRGF0YS5jcHAJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cEdsb2JhbERhdGEuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFs
bCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMSBBcHBsZSBJbmMu
IEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTMwLDExICszMCwxNCBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotdm9pZCBSZWdFeHBHbG9iYWxE
YXRhOjp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVu
YW1lIFZpc2l0b3I+Cit2b2lkIFJlZ0V4cEdsb2JhbERhdGE6OnZpc2l0QWdncmVnYXRlSW1wbChW
aXNpdG9yJiB2aXNpdG9yKQogewogICAgIG1fY2FjaGVkUmVzdWx0LnZpc2l0QWdncmVnYXRlKHZp
c2l0b3IpOwogfQogCitERUZJTkVfVklTSVRfQUdHUkVHQVRFKFJlZ0V4cEdsb2JhbERhdGEpOwor
CiBKU1ZhbHVlIFJlZ0V4cEdsb2JhbERhdGE6OmdldEJhY2tyZWYoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgdW5zaWduZWQgaSkKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZt
KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBHbG9iYWxEYXRh
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwR2xv
YmFsRGF0YS5oCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9SZWdFeHBHbG9iYWxEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxOS0yMDIxIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDEsNyArNDEsNyBAQCBwdWJs
aWM6CiAgICAgdm9pZCBzZXRJbnB1dChKU0dsb2JhbE9iamVjdCosIEpTU3RyaW5nKik7CiAgICAg
SlNTdHJpbmcqIGlucHV0KCkgeyByZXR1cm4gbV9jYWNoZWRSZXN1bHQuaW5wdXQoKTsgfQogCi0g
ICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRf
QUdHUkVHQVRFOwogCiAgICAgSlNWYWx1ZSBnZXRCYWNrcmVmKEpTR2xvYmFsT2JqZWN0KiwgdW5z
aWduZWQpOwogICAgIEpTVmFsdWUgZ2V0TGFzdFBhcmVuKEpTR2xvYmFsT2JqZWN0Kik7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBPYmplY3QuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE9iamVjdC5jcHAJKHJl
dmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE9i
amVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogIENvcHlyaWdo
dCAoQykgMTk5OS0yMDAwIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCi0gKiAgQ29weXJp
Z2h0IChDKSAyMDAzLTIwMTkgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogIENv
cHlyaWdodCAoQykgMjAwMy0yMDIxIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAq
CiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNz
ZXIgR2VuZXJhbCBQdWJsaWMKQEAgLTQ2LDcgKzQ2LDggQEAgdm9pZCBSZWdFeHBPYmplY3Q6OmZp
bmlzaENyZWF0aW9uKFZNJiB2bQogICAgIEFTU0VSVCh0eXBlKCkgPT0gUmVnRXhwT2JqZWN0VHlw
ZSk7CiB9CiAKLXZvaWQgUmVnRXhwT2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwg
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBS
ZWdFeHBPYmplY3Q6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlz
aXRvcikKIHsKICAgICBSZWdFeHBPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8UmVnRXhwT2Jq
ZWN0Kj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBp
bmZvKCkpOwpAQCAtNTUsNiArNTYsOCBAQCB2b2lkIFJlZ0V4cE9iamVjdDo6dmlzaXRDaGlsZHJl
bihKU0NlbGwqCiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9sYXN0SW5kZXgpOwog
fQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oUmVnRXhwT2JqZWN0KTsKKwogYm9vbCBSZWdFeHBP
YmplY3Q6OmdldE93blByb3BlcnR5U2xvdChKU09iamVjdCogb2JqZWN0LCBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3Qm
IHNsb3QpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0LmgJKHJldmlzaW9uIDI3Mjkw
MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE9iamVjdC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAw
MCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQotICogIENvcHlyaWdodCAoQykgMjAwMy0y
MDE5IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIw
MDMtMjAyMSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAq
ICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVi
bGljCkBAIC0xMzMsNyArMTMzLDcgQEAgcHJpdmF0ZToKICAgICBKU19FWFBPUlRfUFJJVkFURSBS
ZWdFeHBPYmplY3QoVk0mLCBTdHJ1Y3R1cmUqLCBSZWdFeHAqKTsKICAgICBKU19FWFBPUlRfUFJJ
VkFURSB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENo
aWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJF
TjsKIAogICAgIGJvb2wgbGFzdEluZGV4SXNXcml0YWJsZSgpIGNvbnN0CiAgICAgewpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5j
cHAJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Nh
bXBsaW5nUHJvZmlsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NTIsNyArNjUyLDcgQEAgdm9p
ZCBTYW1wbGluZ1Byb2ZpbGVyOjpwcm9jZXNzVW52ZXJpZmllZAogICAgIG1fdW5wcm9jZXNzZWRT
dGFja1RyYWNlcy5jbGVhcigpOwogfQogCi12b2lkIFNhbXBsaW5nUHJvZmlsZXI6OnZpc2l0KFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBTYW1wbGluZ1Byb2ZpbGVyOjp2aXNpdChBYnN0cmFj
dFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFJFTEVBU0VfQVNTRVJUKG1fbG9jay5pc0xv
Y2tlZCgpKTsKICAgICBmb3IgKEpTQ2VsbCogY2VsbCA6IG1fbGl2ZUNlbGxQb2ludGVycykKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NhbXBsaW5nUHJvZmlsZXIuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TYW1wbGluZ1Byb2ZpbGVy
LmgJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Nh
bXBsaW5nUHJvZmlsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xNzEsNyArMTcxLDcgQEAgcHVibGljOgog
ICAgIHZvaWQgbm90aWNlSlNMb2NrQWNxdWlzaXRpb24oKTsKICAgICB2b2lkIG5vdGljZVZNRW50
cnkoKTsKICAgICB2b2lkIHNodXRkb3duKCk7Ci0gICAgdm9pZCB2aXNpdChTbG90VmlzaXRvciYp
OworICAgIHZvaWQgdmlzaXQoQWJzdHJhY3RTbG90VmlzaXRvciYpOwogICAgIExvY2smIGdldExv
Y2soKSB7IHJldHVybiBtX2xvY2s7IH0KICAgICB2b2lkIHNldFRpbWluZ0ludGVydmFsKFNlY29u
ZHMgaW50ZXJ2YWwpIHsgbV90aW1pbmdJbnRlcnZhbCA9IGludGVydmFsOyB9CiAgICAgSlNfRVhQ
T1JUX1BSSVZBVEUgdm9pZCBzdGFydCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU2NvcGVkQXJndW1lbnRzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TY29wZWRBcmd1bWVudHMuY3BwCShyZXZpc2lvbiAyNzI5MDIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29wZWRBcmd1bWVudHMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE4IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtOTgsNyArOTgsOCBAQCBTY29wZWRBcmd1bWVudHMqIFNjb3BlZEFyZ3VtZW50
czo6Y3JlYXRlCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotdm9pZCBTY29wZWRBcmd1bWVudHM6
OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBs
YXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFNjb3BlZEFyZ3VtZW50czo6dmlzaXRDaGlsZHJl
bkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFNjb3BlZEFyZ3Vt
ZW50cyogdGhpc09iamVjdCA9IHN0YXRpY19jYXN0PFNjb3BlZEFyZ3VtZW50cyo+KGNlbGwpOwog
ICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTEx
NSw2ICsxMTYsOCBAQCB2b2lkIFNjb3BlZEFyZ3VtZW50czo6dmlzaXRDaGlsZHJlbihKU0NlCiAg
ICAgfQogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oU2NvcGVkQXJndW1lbnRzKTsKKwogU3Ry
dWN0dXJlKiBTY29wZWRBcmd1bWVudHM6OmNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQogewogICAgIHJldHVybiBT
dHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKFNj
b3BlZEFyZ3VtZW50c1R5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlZEFyZ3VtZW50cy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlZEFyZ3VtZW50cy5oCShyZXZpc2lv
biAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29wZWRBcmd1bWVu
dHMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTUtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTUtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTYzLDkgKzYzLDkgQEAgcHVibGljOgogICAgIAogICAg
IC8vIENyZWF0ZXMgYW4gYXJndW1lbnRzIG9iamVjdCBieSBjb3B5aW5nIHRoZSBhcmd1bWVudHMg
ZnJvbSBhIHdlbGwtZGVmaW5lZCBzdGFjayBsb2NhdGlvbi4KICAgICBzdGF0aWMgU2NvcGVkQXJn
dW1lbnRzKiBjcmVhdGVCeUNvcHlpbmdGcm9tKFZNJiwgU3RydWN0dXJlKiwgUmVnaXN0ZXIqIGFy
Z3VtZW50c1N0YXJ0LCB1bnNpZ25lZCB0b3RhbExlbmd0aCwgSlNGdW5jdGlvbiogY2FsbGVlLCBT
Y29wZWRBcmd1bWVudHNUYWJsZSosIEpTTGV4aWNhbEVudmlyb25tZW50Kik7Ci0gICAgCi0gICAg
c3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwotICAgIAor
CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKKwogICAgIHVpbnQzMl90IGludGVybmFsTGVu
Z3RoKCkgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiBtX3RvdGFsTGVuZ3RoOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NpbXBsZVR5
cGVkQXJyYXlDb250cm9sbGVyLmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTYyLDcgKzYyLDcgQEAgYm9vbCBTaW1wbGVUeXBlZEFycmF5Q29udHJvbGxl
cjo6aXNBdG9taQogICAgIHJldHVybiBtX2FsbG93QXRvbWljc1dhaXQ7CiB9CiAKLWJvb2wgU2lt
cGxlVHlwZWRBcnJheUNvbnRyb2xsZXI6OkpTQXJyYXlCdWZmZXJPd25lcjo6aXNSZWFjaGFibGVG
cm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBK
U0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQorYm9vbCBTaW1w
bGVUeXBlZEFycmF5Q29udHJvbGxlcjo6SlNBcnJheUJ1ZmZlck93bmVyOjppc1JlYWNoYWJsZUZy
b21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIEpT
Qzo6QWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikKIHsK
ICAgICBpZiAoVU5MSUtFTFkocmVhc29uKSkKICAgICAgICAgKnJlYXNvbiA9ICJKU0FycmF5QnVm
ZmVyIGlzIG9wYXF1ZSByb290IjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1NpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXIuaAkocmV2aXNpb24g
MjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2ltcGxlVHlwZWRBcnJh
eUNvbnRyb2xsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01OCw3ICs1OCw3IEBAIHB1YmxpYzoKIHByaXZh
dGU6CiAgICAgY2xhc3MgSlNBcnJheUJ1ZmZlck93bmVyIGZpbmFsIDogcHVibGljIFdlYWtIYW5k
bGVPd25lciB7CiAgICAgcHVibGljOgotICAgICAgICBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1
ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIFNsb3RWaXNp
dG9yJiwgY29uc3QgY2hhcioqIHJlYXNvbikgZmluYWw7CisgICAgICAgIGJvb2wgaXNSZWFjaGFi
bGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4
dCwgQWJzdHJhY3RTbG90VmlzaXRvciYsIGNvbnN0IGNoYXIqKiByZWFzb24pIGZpbmFsOwogICAg
ICAgICB2b2lkIGZpbmFsaXplKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRl
eHQpIGZpbmFsOwogICAgIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1NtYWxsU3RyaW5ncy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU21hbGxTdHJpbmdzLmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU21hbGxTdHJpbmdzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMTAgQXBwbGUgSW5jLiBBbGwg
UmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMjEgQXBwbGUgSW5jLiBB
bGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02
Niw3ICs2Niw4IEBAIHZvaWQgU21hbGxTdHJpbmdzOjppbml0aWFsaXplQ29tbW9uU3RyaW4KICAg
ICBzZXRJc0luaXRpYWxpemVkKHRydWUpOwogfQogCi12b2lkIFNtYWxsU3RyaW5nczo6dmlzaXRT
dHJvbmdSZWZlcmVuY2VzKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUg
VmlzaXRvcj4KK3ZvaWQgU21hbGxTdHJpbmdzOjp2aXNpdFN0cm9uZ1JlZmVyZW5jZXMoVmlzaXRv
ciYgdmlzaXRvcikKIHsKICAgICBtX25lZWRzVG9CZVZpc2l0ZWQgPSBmYWxzZTsKICAgICB2aXNp
dG9yLmFwcGVuZFVuYmFycmllcmVkKG1fZW1wdHlTdHJpbmcpOwpAQCAtODQsNiArODUsOSBAQCB2
b2lkIFNtYWxsU3RyaW5nczo6dmlzaXRTdHJvbmdSZWZlcmVuY2VzCiAgICAgdmlzaXRvci5hcHBl
bmRVbmJhcnJpZXJlZChtX29rU3RyaW5nKTsKIH0KIAordGVtcGxhdGUgdm9pZCBTbWFsbFN0cmlu
Z3M6OnZpc2l0U3Ryb25nUmVmZXJlbmNlcyhBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0
ZSB2b2lkIFNtYWxsU3RyaW5nczo6dmlzaXRTdHJvbmdSZWZlcmVuY2VzKFNsb3RWaXNpdG9yJik7
CisKIFNtYWxsU3RyaW5nczo6flNtYWxsU3RyaW5ncygpCiB7CiB9CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TbWFsbFN0cmluZ3MuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TbWFsbFN0cmluZ3MuaAkocmV2aXNpb24gMjcyOTAyKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU21hbGxTdHJpbmdzLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTkgQXBw
bGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMjEg
QXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC00OSw5ICs0OSw5IEBAIGNsYXNzIFN0cmluZ0ltcGw7CiAKIG5hbWVzcGFjZSBK
U0MgewogCitjbGFzcyBBYnN0cmFjdFNsb3RWaXNpdG9yOwogY2xhc3MgVk07CiBjbGFzcyBKU1N0
cmluZzsKLWNsYXNzIFNsb3RWaXNpdG9yOwogCiBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG1h
eFNpbmdsZUNoYXJhY3RlclN0cmluZyA9IDB4RkY7CiAKQEAgLTc4LDcgKzc4LDcgQEAgcHVibGlj
OgogICAgIEpTU3RyaW5nKiogc2luZ2xlQ2hhcmFjdGVyU3RyaW5ncygpIHsgcmV0dXJuICZtX3Np
bmdsZUNoYXJhY3RlclN0cmluZ3NbMF07IH0KIAogICAgIHZvaWQgaW5pdGlhbGl6ZUNvbW1vblN0
cmluZ3MoVk0mKTsKLSAgICB2b2lkIHZpc2l0U3Ryb25nUmVmZXJlbmNlcyhTbG90VmlzaXRvciYp
OworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgdmlzaXRTdHJvbmdSZWZlcmVu
Y2VzKFZpc2l0b3ImKTsKIAogI2RlZmluZSBKU0NfQ09NTU9OX1NUUklOR1NfQUNDRVNTT1JfREVG
SU5JVElPTihuYW1lKSBcCiAgICAgSlNTdHJpbmcqIG5hbWUjI1N0cmluZygpIGNvbnN0ICAgICAg
ICAgICAgICAgICAgIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NwYXJz
ZUFycmF5VmFsdWVNYXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1NwYXJzZUFycmF5VmFsdWVNYXAuY3BwCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TcGFyc2VBcnJheVZhbHVlTWFwLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxNyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTIxMCw3ICsyMTAsOCBAQCBKU1ZhbHVlIFNwYXJzZUFycmF5RW50cnk6Omdl
dE5vblNwYXJzZU1vCiAgICAgcmV0dXJuIEJhc2U6OmdldCgpOwogfQogCi12b2lkIFNwYXJzZUFy
cmF5VmFsdWVNYXA6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlz
aXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFNwYXJzZUFycmF5VmFsdWVN
YXA6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsK
ICAgICBTcGFyc2VBcnJheVZhbHVlTWFwKiB0aGlzT2JqZWN0ID0ganNDYXN0PFNwYXJzZUFycmF5
VmFsdWVNYXAqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmpl
Y3QsIGluZm8oKSk7CkBAIC0yMjMsNSArMjI0LDcgQEAgdm9pZCBTcGFyc2VBcnJheVZhbHVlTWFw
Ojp2aXNpdENoaWxkcmVuKAogICAgIHZpc2l0b3IucmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKHRo
aXNPYmplY3QtPm1fcmVwb3J0ZWRDYXBhY2l0eSAqIHNpemVvZihNYXA6OktleVZhbHVlUGFpclR5
cGUpKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKFNwYXJzZUFycmF5VmFsdWVNYXApOwor
CiB9IC8vIG5hbWVzcGFjZSBKU0MKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU3BhcnNlQXJyYXlWYWx1ZU1hcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1NwYXJzZUFycmF5VmFsdWVNYXAuaAkocmV2aXNpb24gMjcyOTAyKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3BhcnNlQXJyYXlWYWx1ZU1hcC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMS0yMDE5
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMS0y
MDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMTE1LDcgKzExNSw3IEBAIHB1YmxpYzoKICAgICAKICAgICBzdGF0aWMg
U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUg
cHJvdG90eXBlKTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xv
dFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgYm9vbCBzcGFy
c2VNb2RlKCkKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdGFj
a0ZyYW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
dGFja0ZyYW1lLmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU3RhY2tGcmFtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xNDEsMTMgKzE0MSw1
IEBAIFN0cmluZyBTdGFja0ZyYW1lOjp0b1N0cmluZyhWTSYgdm0pIGNvbnMKICAgICByZXR1cm4g
dHJhY2VCdWlsZC50b1N0cmluZygpLmltcGwoKTsKIH0KIAotdm9pZCBTdGFja0ZyYW1lOjp2aXNp
dENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQotewotICAgIGlmIChtX2NhbGxlZSkKLSAg
ICAgICAgdmlzaXRvci5hcHBlbmQobV9jYWxsZWUpOwotICAgIGlmIChtX2NvZGVCbG9jaykKLSAg
ICAgICAgdmlzaXRvci5hcHBlbmQobV9jb2RlQmxvY2spOwotfQotCiB9IC8vIG5hbWVzcGFjZSBK
U0MKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RhY2tGcmFtZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0YWNrRnJhbWUuaAko
cmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RhY2tG
cmFtZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYsNiArMjYsNyBAQAogI3ByYWdtYSBvbmNlCiAK
ICNpbmNsdWRlICJIZWFwLmgiCisjaW5jbHVkZSAiU2xvdFZpc2l0b3JNYWNyb3MuaCIKICNpbmNs
dWRlICJWTS5oIgogI2luY2x1ZGUgIldhc21JbmRleE9yTmFtZS5oIgogI2luY2x1ZGUgIldyaXRl
QmFycmllci5oIgpAQCAtMzUsNyArMzYsNiBAQCBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgQ29k
ZUJsb2NrOwogY2xhc3MgSlNPYmplY3Q7Ci1jbGFzcyBTbG90VmlzaXRvcjsKIAogY2xhc3MgU3Rh
Y2tGcmFtZSB7CiBwdWJsaWM6CkBAIC01Nyw4ICs1NywxNiBAQCBwdWJsaWM6CiAgICAgICAgIEFT
U0VSVChoYXNCeXRlY29kZUluZGV4KCkpOwogICAgICAgICByZXR1cm4gbV9ieXRlY29kZUluZGV4
OwogICAgIH0KLSAgICAKLSAgICB2b2lkIHZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKKwor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+CisgICAgdm9pZCB2aXNpdENoaWxkcmVuKFZp
c2l0b3ImIHZpc2l0b3IpCisgICAgeworICAgICAgICBpZiAobV9jYWxsZWUpCisgICAgICAgICAg
ICB2aXNpdG9yLmFwcGVuZChtX2NhbGxlZSk7CisgICAgICAgIGlmIChtX2NvZGVCbG9jaykKKyAg
ICAgICAgICAgIHZpc2l0b3IuYXBwZW5kKG1fY29kZUJsb2NrKTsKKyAgICB9CisKICAgICBib29s
IGlzTWFya2VkKFZNJiB2bSkgY29uc3QgeyByZXR1cm4gKCFtX2NhbGxlZSB8fCB2bS5oZWFwLmlz
TWFya2VkKG1fY2FsbGVlLmdldCgpKSkgJiYgKCFtX2NvZGVCbG9jayB8fCB2bS5oZWFwLmlzTWFy
a2VkKG1fY29kZUJsb2NrLmdldCgpKSk7IH0KIAogcHJpdmF0ZToKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxOSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAyMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQWxleGV5
IFNodmF5a2EgPHNodmFpa2FsZXNoQGdtYWlsLmNvbT4uCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0x
MjY4LDcgKzEyNjgsOCBAQCB2b2lkIFN0cnVjdHVyZTo6ZGlkVHJhbnNpdGlvbkZyb21UaGlzU3Ry
CiAgICAgICAgIG1fdHJhbnNpdGlvbldhdGNocG9pbnRTZXQuZmlyZUFsbCh2bSgpLCBTdHJ1Y3R1
cmVGaXJlRGV0YWlsKHRoaXMpKTsKIH0KIAotdm9pZCBTdHJ1Y3R1cmU6OnZpc2l0Q2hpbGRyZW4o
SlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZp
c2l0b3I+Cit2b2lkIFN0cnVjdHVyZTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBW
aXNpdG9yJiB2aXNpdG9yKQogewogICAgIFN0cnVjdHVyZSogdGhpc09iamVjdCA9IGpzQ2FzdDxT
dHJ1Y3R1cmUqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmpl
Y3QsIGluZm8oKSk7CkBAIC0xMjkwLDMyICsxMjkxLDM4IEBAIHZvaWQgU3RydWN0dXJlOjp2aXNp
dENoaWxkcmVuKEpTQ2VsbCogY2UKICAgICAgICAgLy8gTk9URTogVGhpcyBjYW4gaW50ZXJsZWF2
ZSBpbiBwaW4oKSwgaW4gd2hpY2ggY2FzZSBpdCBtYXkgc2VlIGEgbnVsbCBwcm9wZXJ0eSB0YWJs
ZS4KICAgICAgICAgLy8gVGhhdCdzIGZpbmUsIGJlY2F1c2UgdGhlbiB0aGUgYmFycmllciB3aWxs
IGZpcmUgYW5kIHdlIHdpbGwgc2NhbiB0aGlzIGFnYWluLgogICAgICAgICB2aXNpdG9yLmFwcGVu
ZCh0aGlzT2JqZWN0LT5tX3Byb3BlcnR5VGFibGVVbnNhZmUpOwotICAgIH0gZWxzZSBpZiAodmlz
aXRvci5pc0FuYWx5emluZ0hlYXAoKSkKKyAgICB9IGVsc2UgaWYgKHZpc2l0b3Iudm0oKS5pc0Fu
YWx5emluZ0hlYXAoKSkKICAgICAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9wcm9w
ZXJ0eVRhYmxlVW5zYWZlKTsKICAgICBlbHNlIGlmICh0aGlzT2JqZWN0LT5tX3Byb3BlcnR5VGFi
bGVVbnNhZmUpCiAgICAgICAgIHRoaXNPYmplY3QtPm1fcHJvcGVydHlUYWJsZVVuc2FmZS5jbGVh
cigpOwogfQogCi1ib29sIFN0cnVjdHVyZTo6aXNDaGVhcER1cmluZ0dDKFZNJiB2bSkKK0RFRklO
RV9WSVNJVF9DSElMRFJFTihTdHJ1Y3R1cmUpOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
PgorQUxXQVlTX0lOTElORSBib29sIFN0cnVjdHVyZTo6aXNDaGVhcER1cmluZ0dDKFZpc2l0b3Im
IHZpc2l0b3IpCiB7CiAgICAgLy8gRklYTUU6IFdlIGNvdWxkIG1ha2UgdGhpcyBldmVuIHNhZmVy
IGJ5IHJldHVybmluZyBmYWxzZSBpZiB0aGlzIHN0cnVjdHVyZSdzIHByb3BlcnR5IHRhYmxlCiAg
ICAgLy8gaGFzIGFueSBsYXJnZSBwcm9wZXJ0eSBuYW1lcy4KICAgICAvLyBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU3MzM0CiAgICAgCi0gICAgcmV0dXJuICghbV9n
bG9iYWxPYmplY3QgfHwgdm0uaGVhcC5pc01hcmtlZChtX2dsb2JhbE9iamVjdC5nZXQoKSkpCi0g
ICAgICAgICYmIChoYXNQb2x5UHJvdG8oKSB8fCAhc3RvcmVkUHJvdG90eXBlT2JqZWN0KCkgfHwg
dm0uaGVhcC5pc01hcmtlZChzdG9yZWRQcm90b3R5cGVPYmplY3QoKSkpOworICAgIHJldHVybiAo
IW1fZ2xvYmFsT2JqZWN0IHx8IHZpc2l0b3IuaXNNYXJrZWQobV9nbG9iYWxPYmplY3QuZ2V0KCkp
KQorICAgICAgICAmJiAoaGFzUG9seVByb3RvKCkgfHwgIXN0b3JlZFByb3RvdHlwZU9iamVjdCgp
IHx8IHZpc2l0b3IuaXNNYXJrZWQoc3RvcmVkUHJvdG90eXBlT2JqZWN0KCkpKTsKIH0KIAotYm9v
bCBTdHJ1Y3R1cmU6Om1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8
dHlwZW5hbWUgVmlzaXRvcj4KK2Jvb2wgU3RydWN0dXJlOjptYXJrSWZDaGVhcChWaXNpdG9yJiB2
aXNpdG9yKQogewotICAgIFZNJiB2bSA9IHZpc2l0b3Iudm0oKTsKLSAgICBpZiAoIWlzQ2hlYXBE
dXJpbmdHQyh2bSkpCi0gICAgICAgIHJldHVybiB2bS5oZWFwLmlzTWFya2VkKHRoaXMpOwotICAg
IAorICAgIGlmICghaXNDaGVhcER1cmluZ0dDKHZpc2l0b3IpKQorICAgICAgICByZXR1cm4gdmlz
aXRvci5pc01hcmtlZCh0aGlzKTsKKwogICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQodGhp
cyk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK3RlbXBsYXRlIGJvb2wgU3RydWN0dXJlOjptYXJr
SWZDaGVhcChBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSBib29sIFN0cnVjdHVyZTo6
bWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImKTsKKwogUmVmPFN0cnVjdHVyZVNoYXBlPiBTdHJ1Y3R1
cmU6OnRvU3RydWN0dXJlU2hhcGUoSlNWYWx1ZSB2YWx1ZSwgYm9vbCYgc2F3UG9seVByb3RvU3Ry
dWN0dXJlKQogewogICAgIFJlZjxTdHJ1Y3R1cmVTaGFwZT4gYmFzZVNoYXBlID0gU3RydWN0dXJl
U2hhcGU6OmNyZWF0ZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3Ry
dWN0dXJlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3Ry
dWN0dXJlLmgJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1N0cnVjdHVyZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAwOC0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAwOC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjAsNyArNjAsNiBAQCBjbGFzcyBQ
cm9wZXJ0eU5hbWVBcnJheURhdGE7CiBjbGFzcyBQcm9wZXJ0eVRhYmxlOwogY2xhc3MgU3RydWN0
dXJlQ2hhaW47CiBjbGFzcyBTdHJ1Y3R1cmVTaGFwZTsKLWNsYXNzIFNsb3RWaXNpdG9yOwogY2xh
c3MgSlNTdHJpbmc7CiBzdHJ1Y3QgRHVtcENvbnRleHQ7CiBzdHJ1Y3QgSGFzaFRhYmxlOwpAQCAt
MzEwLDcgKzMwOSw3IEBAIHB1YmxpYzoKICAgICBKU1ZhbHVlIHByb3RvdHlwZUZvckxvb2t1cChK
U0dsb2JhbE9iamVjdCosIEpTQ2VsbCogYmFzZSkgY29uc3Q7CiAgICAgU3RydWN0dXJlQ2hhaW4q
IHByb3RvdHlwZUNoYWluKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU09iamVjdCogYmFzZSkgY29u
c3Q7CiAgICAgU3RydWN0dXJlQ2hhaW4qIHByb3RvdHlwZUNoYWluKEpTR2xvYmFsT2JqZWN0Kiwg
SlNPYmplY3QqIGJhc2UpIGNvbnN0OwotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlND
ZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogICAgIAog
ICAgIC8vIEEgU3RydWN0dXJlIGlzIGNoZWFwIHRvIG1hcmsgZHVyaW5nIEdDIGlmIGRvaW5nIHNv
IHdvdWxkIG9ubHkgYWRkIGEgc21hbGwgYW5kIGJvdW5kZWQgYW1vdW50CiAgICAgLy8gdG8gb3Vy
IGhlYXAgZm9vdHByaW50LiBGb3IgZXhhbXBsZSwgaWYgdGhlIHN0cnVjdHVyZSByZWZlcnMgdG8g
YSBnbG9iYWwgb2JqZWN0IHRoYXQgaXMgbm90CkBAIC0zMTgsMTAgKzMxNywxMCBAQCBwdWJsaWM6
CiAgICAgLy8gaW5jcmVhc2UgaW4gZm9vdHByaW50IGJlY2F1c2Ugbm8gb3RoZXIgb2JqZWN0IHJl
ZmVycyB0byB0aGF0IGdsb2JhbCBvYmplY3QuIFRoaXMgbWV0aG9kCiAgICAgLy8gcmV0dXJucyB0
cnVlIGlmIGFsbCB1c2VyLWNvbnRyb2xsZWQgKGFuZCBoZW5jZSB1bmJvdW5kZWQgaW4gc2l6ZSkg
b2JqZWN0cyByZWZlcmVuY2VkIGZyb20gdGhlCiAgICAgLy8gU3RydWN0dXJlIGFyZSBhbHJlYWR5
IG1hcmtlZC4KLSAgICBib29sIGlzQ2hlYXBEdXJpbmdHQyhWTSYpOworICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFZpc2l0b3I+IGJvb2wgaXNDaGVhcER1cmluZ0dDKFZpc2l0b3ImKTsKICAgICAKICAg
ICAvLyBSZXR1cm5zIHRydWUgaWYgdGhpcyBzdHJ1Y3R1cmUgaXMgbm93IG1hcmtlZC4KLSAgICBi
b29sIG1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlz
aXRvcj4gYm9vbCBtYXJrSWZDaGVhcChWaXNpdG9yJik7CiAgICAgCiAgICAgYm9vbCBoYXNSYXJl
RGF0YSgpIGNvbnN0CiAgICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U3RydWN0dXJlQ2hhaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1N0cnVjdHVyZUNoYWluLmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlQ2hhaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAyMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY2
LDcgKzY2LDggQEAgdm9pZCBTdHJ1Y3R1cmVDaGFpbjo6ZmluaXNoQ3JlYXRpb24oVk0mIAogICAg
IH0KIH0KIAotdm9pZCBTdHJ1Y3R1cmVDaGFpbjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGws
IFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQg
U3RydWN0dXJlQ2hhaW46OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYg
dmlzaXRvcikKIHsKICAgICBTdHJ1Y3R1cmVDaGFpbiogdGhpc09iamVjdCA9IGpzQ2FzdDxTdHJ1
Y3R1cmVDaGFpbio+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09i
amVjdCwgaW5mbygpKTsKQEAgLTgwLDQgKzgxLDYgQEAgdm9pZCBTdHJ1Y3R1cmVDaGFpbjo6dmlz
aXRDaGlsZHJlbihKU0NlbAogICAgIH0KIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKFN0cnVj
dHVyZUNoYWluKTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TdHJ1Y3R1cmVDaGFpbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUNoYWluLmgJKHJldmlzaW9uIDI3MjkwMikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUNoYWluLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTkgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC01MSw3ICs1MSw3IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBTdHJ1Y3R1cmVD
aGFpbiogY3JlYXRlKFZNJiwgSlNPYmplY3QqKTsKICAgICBTdHJ1Y3R1cmVJRCogaGVhZCgpIHsg
cmV0dXJuIG1fdmVjdG9yLmdldCgpOyB9Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihK
U0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAg
ICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKICAgICB7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVSYXJlRGF0YS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlUmFyZURhdGEuY3BwCShy
ZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1
cmVSYXJlRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02Nyw3ICs2Nyw4IEBAIFN0cnVjdHVy
ZVJhcmVEYXRhOjpTdHJ1Y3R1cmVSYXJlRGF0YShWTSYKICAgICAgICAgbV9wcmV2aW91cy5zZXQo
dm0sIHRoaXMsIHByZXZpb3VzKTsKIH0KIAotdm9pZCBTdHJ1Y3R1cmVSYXJlRGF0YTo6dmlzaXRD
aGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlw
ZW5hbWUgVmlzaXRvcj4KK3ZvaWQgU3RydWN0dXJlUmFyZURhdGE6OnZpc2l0Q2hpbGRyZW5JbXBs
KEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBTdHJ1Y3R1cmVSYXJlRGF0
YSogdGhpc09iamVjdCA9IGpzQ2FzdDxTdHJ1Y3R1cmVSYXJlRGF0YSo+KGNlbGwpOwogICAgIEFT
U0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTg2LDYgKzg3
LDggQEAgdm9pZCBTdHJ1Y3R1cmVSYXJlRGF0YTo6dmlzaXRDaGlsZHJlbihKUwogICAgIH0KIH0K
IAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKFN0cnVjdHVyZVJhcmVEYXRhKTsKKwogLy8gLS0tLS0t
LS0tLS0gQ2FjaGVkIHNwZWNpYWwgcHJvcGVydGllcyBoZWxwZXIgd2F0Y2hwb2ludCBjbGFzc2Vz
IC0tLS0tLS0tLS0tCiAKIGNsYXNzIENhY2hlZFNwZWNpYWxQcm9wZXJ0eUFkYXB0aXZlSW5mZXJy
ZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludCBmaW5hbCA6IHB1YmxpYyBBZGFwdGl2ZUluZmVycmVk
UHJvcGVydHlWYWx1ZVdhdGNocG9pbnRCYXNlIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1N0cnVjdHVyZVJhcmVEYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlUmFyZURhdGEuaAkocmV2aXNpb24gMjcyOTAyKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlUmFyZURhdGEuaAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAy
MCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTY4LDcgKzY4LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBuZWVkc0Rlc3RydWN0aW9uID0gdHJ1ZTsKICAgICBzdGF0aWMgdm9pZCBkZXN0cm95
KEpTQ2VsbCopOwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90
VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBzdGF0aWMgU3Ry
dWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUgcHJv
dG90eXBlKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFi
bGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJv
bFRhYmxlLmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU3ltYm9sVGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtOTIsNyArOTIsOCBAQCB2
b2lkIFN5bWJvbFRhYmxlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCiAgICAgQmFzZTo6ZmluaXNo
Q3JlYXRpb24odm0pOwogfQogCi12b2lkIFN5bWJvbFRhYmxlOjp2aXNpdENoaWxkcmVuKEpTQ2Vs
bCogdGhpc0NlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlz
aXRvcj4KK3ZvaWQgU3ltYm9sVGFibGU6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogdGhpc0Nl
bGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgU3ltYm9sVGFibGUqIHRoaXNTeW1ib2xUYWJs
ZSA9IGpzQ2FzdDxTeW1ib2xUYWJsZSo+KHRoaXNDZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNU
X0lOSEVSSVRTKHRoaXNTeW1ib2xUYWJsZSwgaW5mbygpKTsKQEAgLTEwOCw2ICsxMDksOCBAQCB2
b2lkIFN5bWJvbFRhYmxlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogCiAgICAgdGhpc1N5bWJvbFRh
YmxlLT5tX2xvY2FsVG9FbnRyeSA9IG51bGxwdHI7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJF
TihTeW1ib2xUYWJsZSk7CisKIGNvbnN0IFN5bWJvbFRhYmxlOjpMb2NhbFRvRW50cnlWZWMmIFN5
bWJvbFRhYmxlOjpsb2NhbFRvRW50cnkoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJikKIHsKICAg
ICBpZiAoVU5MSUtFTFkoIW1fbG9jYWxUb0VudHJ5KSkgewpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TeW1ib2xUYWJsZS5oCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TeW1ib2xUYWJsZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNy0yMDIwIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDIxIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtNzMzLDcgKzczMyw3IEBAIHB1YmxpYzoKICAgICAgICAgbV9zaW5nbGV0b24ubm90aWZ5V3Jp
dGUodm0sIHRoaXMsIHNjb3BlLCByZWFzb24pOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIHZp
c2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NI
SUxEUkVOOwogCiAgICAgREVDTEFSRV9FWFBPUlRfSU5GTzsKIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvVHlwZVByb2ZpbGVyTG9nLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlUHJvZmlsZXJMb2cuY3BwCShyZXZpc2lvbiAy
NzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlUHJvZmlsZXJMb2cu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxNC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTI0LDcgKzEyNCw3IEBAIHZvaWQgVHlwZVByb2ZpbGVy
TG9nOjpwcm9jZXNzTG9nRW50cmllcygKICAgICB9CiB9CiAKLXZvaWQgVHlwZVByb2ZpbGVyTG9n
Ojp2aXNpdChTbG90VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgVHlwZVByb2ZpbGVyTG9nOjp2aXNp
dChBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGZvciAoTG9nRW50cnkqIGVu
dHJ5ID0gbV9sb2dTdGFydFB0cjsgZW50cnkgIT0gbV9jdXJyZW50TG9nRW50cnlQdHI7ICsrZW50
cnkpIHsKICAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZChlbnRyeS0+dmFsdWUpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZVByb2ZpbGVyTG9nLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZVByb2ZpbGVyTG9n
LmgJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5
cGVQcm9maWxlckxvZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTQtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU5LDcgKzU5LDcgQEAgcHVibGljOgogICAg
IEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgcHJvY2Vzc0xvZ0VudHJpZXMoVk0mLCBjb25zdCBTdHJp
bmcmKTsKICAgICBMb2dFbnRyeSogbG9nRW5kUHRyKCkgY29uc3QgeyByZXR1cm4gbV9sb2dFbmRQ
dHI7IH0KIAotICAgIHZvaWQgdmlzaXQoU2xvdFZpc2l0b3ImKTsKKyAgICB2b2lkIHZpc2l0KEFi
c3RyYWN0U2xvdFZpc2l0b3ImKTsKIAogICAgIHN0YXRpYyBwdHJkaWZmX3QgbG9nU3RhcnRPZmZz
ZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoVHlwZVByb2ZpbGVyTG9nLCBtX2xvZ1N0YXJ0
UHRyKTsgfQogICAgIHN0YXRpYyBwdHJkaWZmX3QgY3VycmVudExvZ0VudHJ5T2Zmc2V0KCkgeyBy
ZXR1cm4gT0JKRUNUX09GRlNFVE9GKFR5cGVQcm9maWxlckxvZywgbV9jdXJyZW50TG9nRW50cnlQ
dHIpOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHJldmlzaW9uIDI3Mjkw
MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMjAgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMjEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC0xMjEsNiArMTIxLDcgQEAgY2xhc3MgRmFzdE1hbGxvY0FsaWduZWRNZW1vcnlBbGxvY2F0
b3I7CiBjbGFzcyBHaWdhY2FnZUFsaWduZWRNZW1vcnlBbGxvY2F0b3I7CiBjbGFzcyBIYW5kbGVT
dGFjazsKIGNsYXNzIEhhc093blByb3BlcnR5Q2FjaGU7CitjbGFzcyBIZWFwQW5hbHl6ZXI7CiBj
bGFzcyBIZWFwUHJvZmlsZXI7CiBjbGFzcyBJZGVudGlmaWVyOwogY2xhc3MgSW50ZXJwcmV0ZXI7
CkBAIC0zMDksNiArMzEwLDEwIEBAIHB1YmxpYzoKICAgICBIZWFwUHJvZmlsZXIqIGhlYXBQcm9m
aWxlcigpIGNvbnN0IHsgcmV0dXJuIG1faGVhcFByb2ZpbGVyLmdldCgpOyB9CiAgICAgSlNfRVhQ
T1JUX1BSSVZBVEUgSGVhcFByb2ZpbGVyJiBlbnN1cmVIZWFwUHJvZmlsZXIoKTsKIAorICAgIGJv
b2wgaXNBbmFseXppbmdIZWFwKCkgY29uc3QgeyByZXR1cm4gbV9hY3RpdmVIZWFwQW5hbHl6ZXI7
IH0KKyAgICBIZWFwQW5hbHl6ZXIqIGFjdGl2ZUhlYXBBbmFseXplcigpIGNvbnN0IHsgcmV0dXJu
IG1fYWN0aXZlSGVhcEFuYWx5emVyOyB9CisgICAgdm9pZCBzZXRBY3RpdmVIZWFwQW5hbHl6ZXIo
SGVhcEFuYWx5emVyKiBhbmFseXplcikgeyBtX2FjdGl2ZUhlYXBBbmFseXplciA9IGFuYWx5emVy
OyB9CisKICNpZiBFTkFCTEUoU0FNUExJTkdfUFJPRklMRVIpCiAgICAgU2FtcGxpbmdQcm9maWxl
ciogc2FtcGxpbmdQcm9maWxlcigpIHsgcmV0dXJuIG1fc2FtcGxpbmdQcm9maWxlci5nZXQoKTsg
fQogICAgIEpTX0VYUE9SVF9QUklWQVRFIFNhbXBsaW5nUHJvZmlsZXImIGVuc3VyZVNhbXBsaW5n
UHJvZmlsZXIoUmVmPFN0b3B3YXRjaD4mJik7CkBAIC0xMTk0LDkgKzExOTksMTAgQEAgcHVibGlj
OgogICAgIGJvb2wgZGlkRW50ZXJWTSB7IGZhbHNlIH07CiBwcml2YXRlOgogICAgIGJvb2wgbV9m
YWlsTmV4dE5ld0NvZGVCbG9jayB7IGZhbHNlIH07Ci0gICAgRGVsZXRlUHJvcGVydHlNb2RlIG1f
ZGVsZXRlUHJvcGVydHlNb2RlIHsgRGVsZXRlUHJvcGVydHlNb2RlOjpEZWZhdWx0IH07CiAgICAg
Ym9vbCBtX2dsb2JhbENvbnN0UmVkZWNsYXJhdGlvblNob3VsZFRocm93IHsgdHJ1ZSB9OwogICAg
IGJvb2wgbV9zaG91bGRCdWlsZFBDVG9Db2RlT3JpZ2luTWFwcGluZyB7IGZhbHNlIH07CisgICAg
RGVsZXRlUHJvcGVydHlNb2RlIG1fZGVsZXRlUHJvcGVydHlNb2RlIHsgRGVsZXRlUHJvcGVydHlN
b2RlOjpEZWZhdWx0IH07CisgICAgSGVhcEFuYWx5emVyKiBtX2FjdGl2ZUhlYXBBbmFseXplciB7
IG51bGxwdHIgfTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q29kZUNhY2hlPiBtX2NvZGVDYWNoZTsK
ICAgICBzdGQ6OnVuaXF1ZV9wdHI8SW50bENhY2hlPiBtX2ludGxDYWNoZTsKICAgICBzdGQ6OnVu
aXF1ZV9wdHI8QnVpbHRpbkV4ZWN1dGFibGVzPiBtX2J1aWx0aW5FeGVjdXRhYmxlczsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtNYXBJbXBsLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9XZWFrTWFwSW1wbC5jcHAJKHJldmlz
aW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtNYXBJbXBs
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChD
KSAyMDE3IFl1c3VrZSBTdXp1a2kgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4uCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CkBAIC0zOSw4ICszOSw5IEBAIHZvaWQgV2Vha01hcEltcGw8V2Vha01hcEJ1Y2tldD46
OmRlc3Ryb3kKICAgICBzdGF0aWNfY2FzdDxXZWFrTWFwSW1wbCo+KGNlbGwpLT5+V2Vha01hcElt
cGwoKTsKIH0KIAotdGVtcGxhdGUgPHR5cGVuYW1lIFdlYWtNYXBCdWNrZXQ+Ci12b2lkIFdlYWtN
YXBJbXBsPFdlYWtNYXBCdWNrZXQ+Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZp
c2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBXZWFrTWFwQnVja2V0PgordGVtcGxh
dGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgV2Vha01hcEltcGw8V2Vha01hcEJ1Y2tldD46OnZp
c2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBX
ZWFrTWFwSW1wbCogdGhpc09iamVjdCA9IGpzQ2FzdDxXZWFrTWFwSW1wbCo+KGNlbGwpOwogICAg
IEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTQ4LDYg
KzQ5LDggQEAgdm9pZCBXZWFrTWFwSW1wbDxXZWFrTWFwQnVja2V0Pjo6dmlzaXRDaAogICAgIHZp
c2l0b3IucmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKHRoaXNPYmplY3QtPm1fY2FwYWNpdHkgKiBz
aXplb2YoV2Vha01hcEJ1Y2tldCkpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU5fV0lUSF9N
T0RJRklFUih0ZW1wbGF0ZTx0eXBlbmFtZSBXZWFrTWFwQnVja2V0PiwgV2Vha01hcEltcGw8V2Vh
a01hcEJ1Y2tldD4pOworCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgV2Vha01hcEJ1Y2tldD4KIHNpemVf
dCBXZWFrTWFwSW1wbDxXZWFrTWFwQnVja2V0Pjo6ZXN0aW1hdGVkU2l6ZShKU0NlbGwqIGNlbGws
IFZNJiB2bSkKIHsKQEAgLTU2LDE1ICs1OSwyNSBAQCBzaXplX3QgV2Vha01hcEltcGw8V2Vha01h
cEJ1Y2tldD46OmVzdGltCiB9CiAKIHRlbXBsYXRlIDw+Ci12b2lkIFdlYWtNYXBJbXBsPFdlYWtN
YXBCdWNrZXQ8V2Vha01hcEJ1Y2tldERhdGFLZXk+Pjo6dmlzaXRPdXRwdXRDb25zdHJhaW50cyhK
U0NlbGwqLCBTbG90VmlzaXRvciYpCit0ZW1wbGF0ZSA8Pgordm9pZCBXZWFrTWFwSW1wbDxXZWFr
TWFwQnVja2V0PFdlYWtNYXBCdWNrZXREYXRhS2V5Pj46OnZpc2l0T3V0cHV0Q29uc3RyYWludHMo
SlNDZWxsKiwgQWJzdHJhY3RTbG90VmlzaXRvciYpCiB7CiAgICAgLy8gT25seSBKU1dlYWtNYXAg
bmVlZHMgdG8gaGFydmVzdCB2YWx1ZSByZWZlcmVuY2VzCiB9CiAKIHRlbXBsYXRlIDw+Ci12b2lk
IFdlYWtNYXBJbXBsPFdlYWtNYXBCdWNrZXQ8V2Vha01hcEJ1Y2tldERhdGFLZXlWYWx1ZT4+Ojp2
aXNpdE91dHB1dENvbnN0cmFpbnRzKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3Ip
Cit0ZW1wbGF0ZSA8Pgordm9pZCBXZWFrTWFwSW1wbDxXZWFrTWFwQnVja2V0PFdlYWtNYXBCdWNr
ZXREYXRhS2V5Pj46OnZpc2l0T3V0cHV0Q29uc3RyYWludHMoSlNDZWxsKiwgU2xvdFZpc2l0b3Im
KQogewotICAgIFZNJiB2bSA9IHZpc2l0b3Iudm0oKTsKKyAgICAvLyBPbmx5IEpTV2Vha01hcCBu
ZWVkcyB0byBoYXJ2ZXN0IHZhbHVlIHJlZmVyZW5jZXMKK30KKwordGVtcGxhdGU8dHlwZW5hbWUg
QnVja2V0VHlwZT4KK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+CitBTFdBWVNfSU5MSU5FIHZv
aWQgV2Vha01hcEltcGw8QnVja2V0VHlwZT46OnZpc2l0T3V0cHV0Q29uc3RyYWludHMoSlNDZWxs
KiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19z
YW1lPEJ1Y2tldFR5cGUsIFdlYWtNYXBCdWNrZXQ8V2Vha01hcEJ1Y2tldERhdGFLZXlWYWx1ZT4+
Ojp2YWx1ZSk7CisKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PFdlYWtNYXBJbXBsKj4o
Y2VsbCk7CiAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayh0aGlzT2JqZWN0LT5jZWxsTG9jaygp
KTsKICAgICBhdXRvKiBidWZmZXIgPSB0aGlzT2JqZWN0LT5idWZmZXIoKTsKQEAgLTcyLDEyICs4
NSwxNSBAQCB2b2lkIFdlYWtNYXBJbXBsPFdlYWtNYXBCdWNrZXQ8V2Vha01hcEJ1CiAgICAgICAg
IGF1dG8qIGJ1Y2tldCA9IGJ1ZmZlciArIGluZGV4OwogICAgICAgICBpZiAoYnVja2V0LT5pc0Vt
cHR5KCkgfHwgYnVja2V0LT5pc0RlbGV0ZWQoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICBpZiAoIXZtLmhlYXAuaXNNYXJrZWQoYnVja2V0LT5rZXkoKSkpCisgICAgICAgIGlmICgh
dmlzaXRvci5pc01hcmtlZChidWNrZXQtPmtleSgpKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwog
ICAgICAgICBidWNrZXQtPnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOwogICAgIH0KIH0KIAordGVt
cGxhdGUgdm9pZCBXZWFrTWFwSW1wbDxXZWFrTWFwQnVja2V0PFdlYWtNYXBCdWNrZXREYXRhS2V5
VmFsdWU+Pjo6dmlzaXRPdXRwdXRDb25zdHJhaW50cyhKU0NlbGwqLCBBYnN0cmFjdFNsb3RWaXNp
dG9yJik7Cit0ZW1wbGF0ZSB2b2lkIFdlYWtNYXBJbXBsPFdlYWtNYXBCdWNrZXQ8V2Vha01hcEJ1
Y2tldERhdGFLZXlWYWx1ZT4+Ojp2aXNpdE91dHB1dENvbnN0cmFpbnRzKEpTQ2VsbCosIFNsb3RW
aXNpdG9yJik7CisKIHRlbXBsYXRlIDx0eXBlbmFtZSBXZWFrTWFwQnVja2V0PgogdGVtcGxhdGU8
dHlwZW5hbWUgQXBwZW5kZXI+CiB2b2lkIFdlYWtNYXBJbXBsPFdlYWtNYXBCdWNrZXQ+Ojp0YWtl
U25hcHNob3RJbnRlcm5hbCh1bnNpZ25lZCBsaW1pdCwgQXBwZW5kZXIgYXBwZW5kZXIpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9XZWFrTWFwSW1wbC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtNYXBJbXBsLmgJKHJldmlzaW9u
IDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtNYXBJbXBsLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2
LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChD
KSAyMDE3IFl1c3VrZSBTdXp1a2kgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4uCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CkBAIC0xNDUsNyArMTQ1LDcgQEAgcHVibGljOgogICAgIH0KIAogICAgIHRlbXBsYXRl
IDx0eXBlbmFtZSBUID0gRGF0YT4KLSAgICBBTFdBWVNfSU5MSU5FIHR5cGVuYW1lIHN0ZDo6ZW5h
YmxlX2lmPHN0ZDo6aXNfc2FtZTxULCBXZWFrTWFwQnVja2V0RGF0YUtleVZhbHVlPjo6dmFsdWU+
Ojp0eXBlIHZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorICAgIEFMV0FZU19J
TkxJTkUgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19zYW1lPFQsIFdlYWtNYXBCdWNr
ZXREYXRhS2V5VmFsdWU+Ojp2YWx1ZT46OnR5cGUgdmlzaXRBZ2dyZWdhdGUoQWJzdHJhY3RTbG90
VmlzaXRvciYgdmlzaXRvcikKICAgICB7CiAgICAgICAgIHZpc2l0b3IuYXBwZW5kKG1fZGF0YS52
YWx1ZSk7CiAgICAgfQpAQCAtMjAyLDcgKzIwMiw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgbmVlZHNEZXN0cnVjdGlvbiA9IHRydWU7CiAgICAgc3RhdGljIHZvaWQgZGVz
dHJveShKU0NlbGwqKTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwg
U2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgc3RhdGlj
IHNpemVfdCBlc3RpbWF0ZWRTaXplKEpTQ2VsbCosIFZNJik7CiAKQEAgLTMxMSwxMCArMzExLDEz
IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHZtLndlYWtTZXRTcGFjZTxtb2RlPigpOwogICAg
IH0KIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0T3V0cHV0Q29uc3RyYWludHMoSlNDZWxsKiwgU2xv
dFZpc2l0b3ImKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiBzdGF0aWMgdm9pZCB2
aXNpdE91dHB1dENvbnN0cmFpbnRzKEpTQ2VsbCosIFZpc2l0b3ImKTsKICAgICB2b2lkIGZpbmFs
aXplVW5jb25kaXRpb25hbGx5KFZNJik7CiAKIHByaXZhdGU6CisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgVmlzaXRvcj4KKyAgICBBTFdBWVNfSU5MSU5FIHN0YXRpYyB2b2lkIHZpc2l0T3V0cHV0Q29u
c3RyYWludHNGb3JEYXRhS2V5VmFsdWUoSlNDZWxsKiwgVmlzaXRvciYpOworCiAgICAgQUxXQVlT
X0lOTElORSBXZWFrTWFwQnVja2V0VHlwZSogZmluZEJ1Y2tldChKU09iamVjdCoga2V5KQogICAg
IHsKICAgICAgICAgcmV0dXJuIGZpbmRCdWNrZXQoa2V5LCBqc1dlYWtNYXBIYXNoKGtleSkpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0pTRG9sbGFyVk0uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9KU0RvbGxhclZNLmNwcAkocmV2aXNp
b24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0pTRG9sbGFyVk0uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
NS0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMjI0LDE0ICsyMjQsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lk
IGZpbmlzaENyZWF0aW9uKFZNJiwgUm9vdCopOwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGls
ZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQotICAgIHsKLSAgICAgICAg
RG9sbGFyVk1Bc3NlcnRTY29wZSBhc3NlcnRTY29wZTsKLSAgICAgICAgRWxlbWVudCogdGhpc09i
amVjdCA9IGpzQ2FzdDxFbGVtZW50Kj4oY2VsbCk7Ci0gICAgICAgIEFTU0VSVF9HQ19PQkpFQ1Rf
SU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKLSAgICAgICAgQmFzZTo6dmlzaXRDaGlsZHJl
bih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKLSAgICAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVj
dC0+bV9yb290KTsKLSAgICB9CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIHN0
YXRpYyBFbGVtZW50SGFuZGxlT3duZXIqIGhhbmRsZU93bmVyKCk7CiAKQEAgLTI0NywxMCArMjQw
LDIyIEBAIHByaXZhdGU6CiAgICAgV3JpdGVCYXJyaWVyPFJvb3Q+IG1fcm9vdDsKIH07CiAKK3Rl
bXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEVsZW1lbnQ6OnZpc2l0Q2hpbGRyZW5JbXBs
KEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBEb2xsYXJWTUFzc2VydFNj
b3BlIGFzc2VydFNjb3BlOworICAgIEVsZW1lbnQqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8RWxlbWVu
dCo+KGNlbGwpOworICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5m
bygpKTsKKyAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOworICAg
IHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fcm9vdCk7Cit9CisKK0RFRklORV9WSVNJVF9D
SElMRFJFTihFbGVtZW50KTsKKwogY2xhc3MgRWxlbWVudEhhbmRsZU93bmVyIGZpbmFsIDogcHVi
bGljIFdlYWtIYW5kbGVPd25lciB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJs
aWM6Ci0gICAgYm9vbCBpc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6
OlVua25vd24+IGhhbmRsZSwgdm9pZCosIFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFy
KiogcmVhc29uKSBmaW5hbAorICAgIGJvb2wgaXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlND
OjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBBYnN0cmFjdFNsb3RWaXNpdG9y
JiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKSBmaW5hbAogICAgIHsKICAgICAgICAgRG9s
bGFyVk1Bc3NlcnRTY29wZSBhc3NlcnRTY29wZTsKICAgICAgICAgaWYgKFVOTElLRUxZKHJlYXNv
bikpCkBAIC0zMDQsMTggKzMwOSwyMyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBTdHJ1Y3R1
cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5
cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCB2
aXNpdENoaWxkcmVuKEpTQ2VsbCogdGhpc09iamVjdCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCi0g
ICAgewotICAgICAgICBEb2xsYXJWTUFzc2VydFNjb3BlIGFzc2VydFNjb3BlOwotICAgICAgICBB
U1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7Ci0gICAgICAgIEJh
c2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7Ci0gICAgICAgIHZpc2l0b3Iu
YWRkT3BhcXVlUm9vdCh0aGlzT2JqZWN0KTsKLSAgICB9CisgICAgREVDTEFSRV9WSVNJVF9DSElM
RFJFTjsKIAogcHJpdmF0ZToKICAgICBXZWFrPEVsZW1lbnQ+IG1fZWxlbWVudDsKIH07CiAKK3Rl
bXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFJvb3Q6OnZpc2l0Q2hpbGRyZW5JbXBsKEpT
Q2VsbCogdGhpc09iamVjdCwgVmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBEb2xsYXJWTUFzc2Vy
dFNjb3BlIGFzc2VydFNjb3BlOworICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09i
amVjdCwgaW5mbygpKTsKKyAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0
b3IpOworICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdCh0aGlzT2JqZWN0KTsKK30KKworREVGSU5F
X1ZJU0lUX0NISUxEUkVOKFJvb3QpOworCiBjbGFzcyBTaW1wbGVPYmplY3QgOiBwdWJsaWMgSlNO
b25GaW5hbE9iamVjdCB7CiBwdWJsaWM6CiAgICAgU2ltcGxlT2JqZWN0KFZNJiB2bSwgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUpCkBAIC0zNDAsMTQgKzM1MCw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0
dXJuIHNpbXBsZU9iamVjdDsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVu
KEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCi0gICAgewotICAgICAgICBEb2xs
YXJWTUFzc2VydFNjb3BlIGFzc2VydFNjb3BlOwotICAgICAgICBTaW1wbGVPYmplY3QqIHRoaXNP
YmplY3QgPSBqc0Nhc3Q8U2ltcGxlT2JqZWN0Kj4oY2VsbCk7Ci0gICAgICAgIEFTU0VSVF9HQ19P
QkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKLSAgICAgICAgQmFzZTo6dmlzaXRD
aGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKLSAgICAgICAgdmlzaXRvci5hcHBlbmQodGhp
c09iamVjdC0+bV9oaWRkZW5WYWx1ZSk7Ci0gICAgfQorICAgIERFQ0xBUkVfVklTSVRfQ0hJTERS
RU47CiAKICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKICAgICB7CkBAIC0z
ODAsNiArMzgzLDE4IEBAIHByaXZhdGU6CiAgICAgV3JpdGVCYXJyaWVyPEpTQzo6VW5rbm93bj4g
bV9oaWRkZW5WYWx1ZTsKIH07CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFNp
bXBsZU9iamVjdDo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNp
dG9yKQoreworICAgIERvbGxhclZNQXNzZXJ0U2NvcGUgYXNzZXJ0U2NvcGU7CisgICAgU2ltcGxl
T2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PFNpbXBsZU9iamVjdCo+KGNlbGwpOworICAgIEFT
U0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKKyAgICBCYXNlOjp2
aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOworICAgIHZpc2l0b3IuYXBwZW5kKHRo
aXNPYmplY3QtPm1faGlkZGVuVmFsdWUpOworfQorCitERUZJTkVfVklTSVRfQ0hJTERSRU4oU2lt
cGxlT2JqZWN0KTsKKwogY2xhc3MgSW1wdXJlR2V0dGVyIDogcHVibGljIEpTTm9uRmluYWxPYmpl
Y3QgewogcHVibGljOgogICAgIEltcHVyZUdldHRlcihWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0
dXJlKQpAQCAtNDM2LDE0ICs0NTEsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBCYXNlOjpn
ZXRPd25Qcm9wZXJ0eVNsb3Qob2JqZWN0LCBnbG9iYWxPYmplY3QsIG5hbWUsIHNsb3QpOwogICAg
IH0KIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90Vmlz
aXRvciYgdmlzaXRvcikKLSAgICB7Ci0gICAgICAgIERvbGxhclZNQXNzZXJ0U2NvcGUgYXNzZXJ0
U2NvcGU7Ci0gICAgICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2VsbCwgaW5mbygpKTsK
LSAgICAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbihjZWxsLCB2aXNpdG9yKTsKLSAgICAgICAgSW1w
dXJlR2V0dGVyKiB0aGlzT2JqZWN0ID0ganNDYXN0PEltcHVyZUdldHRlcio+KGNlbGwpOwotICAg
ICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2RlbGVnYXRlKTsKLSAgICB9CisgICAg
REVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIHZvaWQgc2V0RGVsZWdhdGUoVk0mIHZtLCBK
U09iamVjdCogZGVsZWdhdGUpCiAgICAgewpAQCAtNDU0LDYgKzQ2MiwxOCBAQCBwcml2YXRlOgog
ICAgIFdyaXRlQmFycmllcjxKU09iamVjdD4gbV9kZWxlZ2F0ZTsKIH07CiAKK3RlbXBsYXRlPHR5
cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEltcHVyZUdldHRlcjo6dmlzaXRDaGlsZHJlbkltcGwoSlND
ZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIERvbGxhclZNQXNzZXJ0U2NvcGUg
YXNzZXJ0U2NvcGU7CisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjZWxsLCBpbmZvKCkp
OworICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4oY2VsbCwgdmlzaXRvcik7CisgICAgSW1wdXJlR2V0
dGVyKiB0aGlzT2JqZWN0ID0ganNDYXN0PEltcHVyZUdldHRlcio+KGNlbGwpOworICAgIHZpc2l0
b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fZGVsZWdhdGUpOworfQorCitERUZJTkVfVklTSVRfQ0hJ
TERSRU4oSW1wdXJlR2V0dGVyKTsKKwogc3RhdGljIEpTQ19ERUNMQVJFX0NVU1RPTV9HRVRURVIo
Y3VzdG9tR2V0dGVyVmFsdWVHZXR0ZXIpOwogc3RhdGljIEpTQ19ERUNMQVJFX0NVU1RPTV9HRVRU
RVIoY3VzdG9tR2V0dGVyQWNlc3NvckdldHRlcik7CiAKQEAgLTE4MjIsMTQgKzE4NDIsNyBAQCBw
dWJsaWM6CiAgICAgICAgIHB1dERpcmVjdE5hdGl2ZUZ1bmN0aW9uKHZtLCBnbG9iYWxPYmplY3Qs
IElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJhZGRCeXRlcyIpLCAwLCBmdW5jdGlvbldhc21T
dHJlYW1pbmdDb21waWxlckFkZEJ5dGVzLCBOb0ludHJpbnNpYywgc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSkpOwogICAgIH0KIAotICAgIHN0YXRpYyB2
b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKLSAg
ICB7Ci0gICAgICAgIERvbGxhclZNQXNzZXJ0U2NvcGUgYXNzZXJ0U2NvcGU7Ci0gICAgICAgIGF1
dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8V2FzbVN0cmVhbWluZ0NvbXBpbGVyKj4oY2VsbCk7Ci0g
ICAgICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKLSAg
ICAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKLSAgICAgICAg
dmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9wcm9taXNlKTsKLSAgICB9CisgICAgREVDTEFS
RV9WSVNJVF9DSElMRFJFTjsKIAogICAgIERFQ0xBUkVfSU5GTzsKIApAQCAtMTgzNyw2ICsxODUw
LDE4IEBAIHB1YmxpYzoKICAgICBSZWY8V2FzbTo6U3RyZWFtaW5nQ29tcGlsZXI+IG1fc3RyZWFt
aW5nQ29tcGlsZXI7CiB9OwogCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBXYXNt
U3RyZWFtaW5nQ29tcGlsZXI6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRv
ciYgdmlzaXRvcikKK3sKKyAgICBEb2xsYXJWTUFzc2VydFNjb3BlIGFzc2VydFNjb3BlOworICAg
IGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8V2FzbVN0cmVhbWluZ0NvbXBpbGVyKj4oY2VsbCk7
CisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOworICAg
IEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CisgICAgdmlzaXRvci5h
cHBlbmQodGhpc09iamVjdC0+bV9wcm9taXNlKTsKK30KKworREVGSU5FX1ZJU0lUX0NISUxEUkVO
KFdhc21TdHJlYW1pbmdDb21waWxlcik7CisKIGNvbnN0IENsYXNzSW5mbyBXYXNtU3RyZWFtaW5n
Q29tcGlsZXI6OnNfaW5mbyA9IHsgIldhc21TdHJlYW1pbmdDb21waWxlciIsICZCYXNlOjpzX2lu
Zm8sIG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoV2FzbVN0cmVhbWluZ0Nv
bXBpbGVyKSB9OwogCiBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oZnVuY3Rpb25XYXNtU3RyZWFt
aW5nQ29tcGlsZXJBZGRCeXRlcywgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxG
cmFtZSogY2FsbEZyYW1lKSkKQEAgLTM2OTksMTMgKzM3MjQsMTYgQEAgdm9pZCBKU0RvbGxhclZN
OjphZGRDb25zdHJ1Y3RpYmxlRnVuY3RpbwogICAgIHB1dERpcmVjdCh2bSwgaWRlbnRpZmllciwg
SlNGdW5jdGlvbjo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIGFyZ3VtZW50cywgaWRlbnRpZmll
ci5zdHJpbmcoKSwgZnVuY3Rpb24sIE5vSW50cmluc2ljLCBmdW5jdGlvbiksIGpzRG9sbGFyVk1Q
cm9wZXJ0eUF0dHJpYnV0ZXMpOwogfQogCi12b2lkIEpTRG9sbGFyVk06OnZpc2l0Q2hpbGRyZW4o
SlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZp
c2l0b3I+Cit2b2lkIEpTRG9sbGFyVk06OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwg
VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU0RvbGxhclZNKiB0aGlzT2JqZWN0ID0ganNDYXN0
PEpTRG9sbGFyVk0qPihjZWxsKTsKICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3Qs
IHZpc2l0b3IpOwogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fb2JqZWN0RG9pbmdT
aWRlRWZmZWN0UHV0V2l0aG91dENvcnJlY3RTbG90U3RhdHVzU3RydWN0dXJlKTsKIH0KIAorREVG
SU5FX1ZJU0lUX0NISUxEUkVOKEpTRG9sbGFyVk0pOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAog
SUdOT1JFX1dBUk5JTkdTX0VORApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0pT
RG9sbGFyVk0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvSlNE
b2xsYXJWTS5oCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9v
bHMvSlNEb2xsYXJWTS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxNS0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNzQsNyArNzQsNyBAQCBwcml2YXRl
OgogICAgIHZvaWQgYWRkRnVuY3Rpb24oVk0mLCBKU0dsb2JhbE9iamVjdCosIGNvbnN0IGNoYXIq
IG5hbWUsIE5hdGl2ZUZ1bmN0aW9uLCB1bnNpZ25lZCBhcmd1bWVudHMpOwogICAgIHZvaWQgYWRk
Q29uc3RydWN0aWJsZUZ1bmN0aW9uKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBjb25zdCBjaGFyKiBu
YW1lLCBOYXRpdmVGdW5jdGlvbiwgdW5zaWduZWQgYXJndW1lbnRzKTsKIAotICAgIHN0YXRpYyB2
b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJ
U0lUX0NISUxEUkVOOwogCiAgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gbV9vYmplY3REb2lu
Z1NpZGVFZmZlY3RQdXRXaXRob3V0Q29ycmVjdFNsb3RTdGF0dXNTdHJ1Y3R1cmU7CiB9OwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUdsb2JhbC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUdsb2JhbC5jcHAJKHJldmlzaW9uIDI3
MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21HbG9iYWwuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTEwMyw3ICsxMDMsOCBAQCB2b2lkIEdsb2JhbDo6c2V0KEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPCiAgICAgfQogfQogCi12b2lkIEdsb2JhbDo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZp
c2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBHbG9iYWw6
OnZpc2l0QWdncmVnYXRlSW1wbChWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHN3aXRjaCAobV90
eXBlKSB7CiAgICAgY2FzZSBXYXNtOjpUeXBlOjpFeHRlcm5yZWY6CkBAIC0xMTcsNiArMTE4LDgg
QEAgdm9pZCBHbG9iYWw6OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJgogICAgIH0KIH0KIAor
REVGSU5FX1ZJU0lUX0FHR1JFR0FURShHbG9iYWwpOworCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
R2xvYmFsCiAKICNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtR2xvYmFsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbUdsb2JhbC5oCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtR2xvYmFsLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMTggQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01Nyw3
ICs1Nyw4IEBAIHB1YmxpYzoKICAgICBKU1ZhbHVlIGdldChKU0dsb2JhbE9iamVjdCopIGNvbnN0
OwogICAgIHVpbnQ2NF90IGdldFByaW1pdGl2ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWUubV9w
cmltaXRpdmU7IH0KICAgICB2b2lkIHNldChKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUpOwotICAg
IHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImKTsKKy8vICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFZpc2l0b3I+IHZvaWQgdmlzaXRBZ2dyZWdhdGUoVmlzaXRvciYpOworICAgIERFQ0xBUkVf
VklTSVRfQUdHUkVHQVRFOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gVCogb3duZXIoKSBj
b25zdCB7IHJldHVybiByZWludGVycHJldF9jYXN0PFQqPihtX293bmVyKTsgfQogICAgIHZvaWQg
c2V0T3duZXIoSlNPYmplY3QqIG93bmVyKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbVRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtVGFibGUuY3BwCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtVGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxNy0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTY2LDcgKzE2Niw4IEBA
IEpTVmFsdWUgVGFibGU6OmdldCh1aW50MzJfdCBpbmRleCkgY29uc3QKICAgICByZXR1cm4gbV9q
c1ZhbHVlcy5nZXQoKVtpbmRleCAmIG1fbWFza10uZ2V0KCk7CiB9CiAKLXZvaWQgVGFibGU6OnZp
c2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlz
aXRvcj4KK3ZvaWQgVGFibGU6OnZpc2l0QWdncmVnYXRlSW1wbChWaXNpdG9yJiB2aXNpdG9yKQog
ewogICAgIFJFTEVBU0VfQVNTRVJUKG1fb3duZXIpOwogICAgIGF1dG8gbG9ja2VyID0gaG9sZExv
Y2sobV9vd25lci0+Y2VsbExvY2soKSk7CkBAIC0xNzQsNiArMTc1LDggQEAgdm9pZCBUYWJsZTo6
dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImIAogICAgICAgICB2aXNpdG9yLmFwcGVuZChtX2pz
VmFsdWVzLmdldCgpW2ldKTsKIH0KIAorREVGSU5FX1ZJU0lUX0FHR1JFR0FURShUYWJsZSk7CisK
IFR5cGUgVGFibGU6Ondhc21UeXBlKCkgY29uc3QKIHsKICAgICBpZiAoaXNFeHRlcm5yZWZUYWJs
ZSgpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRhYmxlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRhYmxlLmgJKHJldmlzaW9u
IDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UYWJsZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNy0yMDE4
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0y
MDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtODAsNyArODAsNyBAQCBwdWJsaWM6CiAgICAgT3B0aW9uYWw8dWludDMy
X3Q+IGdyb3codWludDMyX3QgZGVsdGEsIEpTVmFsdWUgZGVmYXVsdFZhbHVlKTsKICAgICB2b2lk
IGNvcHkoY29uc3QgVGFibGUqIHNyY1RhYmxlLCB1aW50MzJfdCBkc3RJbmRleCwgdWludDMyX3Qg
c3JjSW5kZXgpOwogCi0gICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYpOworICAg
IERFQ0xBUkVfVklTSVRfQUdHUkVHQVRFOwogCiBwcm90ZWN0ZWQ6CiAgICAgVGFibGUodWludDMy
X3QgaW5pdGlhbCwgT3B0aW9uYWw8dWludDMyX3Q+IG1heGltdW0sIFRhYmxlRWxlbWVudFR5cGUg
PSBUYWJsZUVsZW1lbnRUeXBlOjpFeHRlcm5yZWYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvSlNUb1dhc21JQ0NhbGxlZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvSlNUb1dhc21JQ0NhbGxlZS5jcHAJKHJldmlzaW9uIDI3Mjkw
MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTVG9XYXNtSUNDYWxsZWUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
OSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkt
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTQ5LDcgKzQ5LDggQEAgU3RydWN0dXJlKiBKU1RvV2FzbUlDQ2FsbGVl
OjpjcmVhdGVTdHJ1YwogICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2Jq
ZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKEpTQ2FsbGVlVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBp
bmZvKCkpOwogfQogCi12b2lkIEpTVG9XYXNtSUNDYWxsZWU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+
Cit2b2lkIEpTVG9XYXNtSUNDYWxsZWU6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwg
VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU1RvV2FzbUlDQ2FsbGVlKiB0aGlzT2JqZWN0ID0g
anNDYXN0PEpTVG9XYXNtSUNDYWxsZWUqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lO
SEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC01OCw2ICs1OSw4IEBAIHZvaWQgSlNUb1dh
c21JQ0NhbGxlZTo6dmlzaXRDaGlsZHJlbihKU0MKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2Jq
ZWN0LT5tX2Z1bmN0aW9uKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTVG9XYXNtSUND
YWxsZWUpOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NF
TUJMWSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTVG9XYXNtSUNDYWxs
ZWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1RvV2Fz
bUlDQ2FsbGVlLmgJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL2pzL0pTVG9XYXNtSUNDYWxsZWUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE5LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01Niw3ICs1Niw3IEBAIHBy
aXZhdGU6CiAgICAgSlNUb1dhc21JQ0NhbGxlZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlKQogICAgICAgICA6IEJhc2Uodm0sIGdsb2Jh
bE9iamVjdCwgc3RydWN0dXJlKQogICAgIHsgfQotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwog
CiAgICAgV3JpdGVCYXJyaWVyPFdlYkFzc2VtYmx5RnVuY3Rpb24+IG1fZnVuY3Rpb247CiB9OwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9j
ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJB
c3NlbWJseUNvZGVCbG9jay5jcHAJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNy0yMDE4IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIxIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtODIsNyArODIsOCBAQCB2b2lkIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6OmNsZWFySlND
YWxsCiAgICAgICAgICgqaXRlciktPnVubGluayh2bSk7CiB9CiAKLXZvaWQgSlNXZWJBc3NlbWJs
eUNvZGVCbG9jazo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNp
dG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNXZWJBc3NlbWJseUNvZGVC
bG9jazo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQog
ewogICAgIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2sqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNXZWJB
c3NlbWJseUNvZGVCbG9jayo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMo
dGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTkwLDYgKzkxLDggQEAgdm9pZCBKU1dlYkFzc2VtYmx5
Q29kZUJsb2NrOjp2aXNpdENoaWxkcgogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVj
dCwgdmlzaXRvcik7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU1dlYkFzc2VtYmx5Q29k
ZUJsb2NrKTsKKwogdm9pZCBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrOjpmaW5hbGl6ZVVuY29uZGl0
aW9uYWxseShWTSYgdm0pCiB7CiAgICAgZm9yIChhdXRvIGl0ZXIgPSBtX2NhbGxMaW5rSW5mb3Mu
YmVnaW4oKTsgISFpdGVyOyArK2l0ZXIpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9jay5oCShyZXZpc2lvbiAyNzI5
MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJs
b2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDE3LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC04Niw3ICs4Niw3IEBAIHByaXZhdGU6CiAgICAgREVD
TEFSRV9FWFBPUlRfSU5GTzsKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNEZXN0cnVj
dGlvbiA9IHRydWU7CiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKLSAgICBzdGF0
aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFS
RV9WSVNJVF9DSElMRFJFTjsKIAogICAgIFJlZjxXYXNtOjpDb2RlQmxvY2s+IG1fY29kZUJsb2Nr
OwogICAgIFZlY3RvcjxNYWNyb0Fzc2VtYmxlckNvZGVSZWY8V2FzbUVudHJ5UHRyVGFnPj4gbV93
YXNtVG9KU0V4aXRTdHViczsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pT
V2ViQXNzZW1ibHlHbG9iYWwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlHbG9iYWwuY3BwCShyZXZpc2lvbiAyNzI5MDIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5R2xvYmFsLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE5LTIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC03MSw3ICs3MSw4IEBAIHZvaWQgSlNXZWJBc3NlbWJseUdsb2JhbDo6ZGVzdHJv
eShKU0NlbGwKICAgICBzdGF0aWNfY2FzdDxKU1dlYkFzc2VtYmx5R2xvYmFsKj4oY2VsbCktPkpT
V2ViQXNzZW1ibHlHbG9iYWw6On5KU1dlYkFzc2VtYmx5R2xvYmFsKCk7CiB9CiAKLXZvaWQgSlNX
ZWJBc3NlbWJseUdsb2JhbDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9y
JiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNXZWJBc3NlbWJs
eUdsb2JhbDo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9y
KQogewogICAgIEpTV2ViQXNzZW1ibHlHbG9iYWwqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNXZWJB
c3NlbWJseUdsb2JhbCo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhp
c09iamVjdCwgaW5mbygpKTsKQEAgLTgwLDYgKzgxLDggQEAgdm9pZCBKU1dlYkFzc2VtYmx5R2xv
YmFsOjp2aXNpdENoaWxkcmVuKAogICAgIHRoaXNPYmplY3QtPmdsb2JhbCgpLT52aXNpdEFnZ3Jl
Z2F0ZSh2aXNpdG9yKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTV2ViQXNzZW1ibHlH
bG9iYWwpOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NF
TUJMWSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlH
bG9iYWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dl
YkFzc2VtYmx5R2xvYmFsLmgJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlHbG9iYWwuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE5LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01OSw3ICs1
OSw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgSlNXZWJBc3NlbWJseUdsb2JhbChWTSYsIFN0
cnVjdHVyZSosIFJlZjxXYXNtOjpHbG9iYWw+JiYpOwogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24o
Vk0mKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9y
Jik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIFJlZjxXYXNtOjpHbG9iYWw+
IG1fZ2xvYmFsOwogfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2Vi
QXNzZW1ibHlJbnN0YW5jZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYt
MjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTczLDcgKzczLDggQEAgdm9pZCBKU1dlYkFzc2VtYmx5SW5zdGFu
Y2U6OmRlc3Ryb3koSlNDZQogICAgIHN0YXRpY19jYXN0PEpTV2ViQXNzZW1ibHlJbnN0YW5jZSo+
KGNlbGwpLT5KU1dlYkFzc2VtYmx5SW5zdGFuY2U6On5KU1dlYkFzc2VtYmx5SW5zdGFuY2UoKTsK
IH0KIAotdm9pZCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBj
ZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2
b2lkIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxs
LCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNX
ZWJBc3NlbWJseUluc3RhbmNlKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklU
Uyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtMTAyLDYgKzEwMyw4IEBAIHZvaWQgSlNXZWJBc3Nl
bWJseUluc3RhbmNlOjp2aXNpdENoaWxkcmUKICAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJp
ZXJlZCh3cmFwcGVyLmdldCgpKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTV2ViQXNz
ZW1ibHlJbnN0YW5jZSk7CisKIHZvaWQgSlNXZWJBc3NlbWJseUluc3RhbmNlOjpmaW5hbGl6ZUNy
ZWF0aW9uKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmPFdhc206OkNv
ZGVCbG9jaz4mJiB3YXNtQ29kZUJsb2NrLCBKU09iamVjdCogaW1wb3J0T2JqZWN0LCBXYXNtOjpD
cmVhdGlvbk1vZGUgY3JlYXRpb25Nb2RlKQogewogICAgIG1faW5zdGFuY2UtPmZpbmFsaXplQ3Jl
YXRpb24odGhpcywgd2FzbUNvZGVCbG9jay5jb3B5UmVmKCkpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmgJKHJl
dmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNz
ZW1ibHlJbnN0YW5jZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxNi0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTA1LDcgKzEwNSw3IEBAIHB1Ymxp
YzoKIHByaXZhdGU6CiAgICAgSlNXZWJBc3NlbWJseUluc3RhbmNlKFZNJiwgU3RydWN0dXJlKiwg
UmVmPFdhc206Okluc3RhbmNlPiYmKTsKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgSlNX
ZWJBc3NlbWJseU1vZHVsZSosIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkKik7Ci0gICAgc3RhdGlj
IHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVf
VklTSVRfQ0hJTERSRU47CiAKICAgICBSZWY8V2FzbTo6SW5zdGFuY2U+IG1faW5zdGFuY2U7CiAg
ICAgVk0qIG1fdm07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFz
c2VtYmx5TWVtb3J5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9KU1dlYkFzc2VtYmx5TWVtb3J5LmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1lbW9yeS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0xNTksNyArMTU5LDggQEAgdm9pZCBKU1dlYkFzc2VtYmx5TWVtb3J5OjpkZXN0
cm95KEpTQ2VsbAogICAgIG1lbW9yeS0+SlNXZWJBc3NlbWJseU1lbW9yeTo6fkpTV2ViQXNzZW1i
bHlNZW1vcnkoKTsKIH0KIAotdm9pZCBKU1dlYkFzc2VtYmx5TWVtb3J5Ojp2aXNpdENoaWxkcmVu
KEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPgordm9pZCBKU1dlYkFzc2VtYmx5TWVtb3J5Ojp2aXNpdENoaWxkcmVuSW1wbChKU0Nl
bGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpz
Q2FzdDxKU1dlYkFzc2VtYmx5TWVtb3J5Kj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9J
TkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtMTY5LDYgKzE3MCw4IEBAIHZvaWQgSlNX
ZWJBc3NlbWJseU1lbW9yeTo6dmlzaXRDaGlsZHJlbigKICAgICB2aXNpdG9yLnJlcG9ydEV4dHJh
TWVtb3J5VmlzaXRlZCh0aGlzT2JqZWN0LT5tZW1vcnkoKS5zaXplKCkpOwogfQogCitERUZJTkVf
VklTSVRfQ0hJTERSRU4oSlNXZWJBc3NlbWJseU1lbW9yeSk7CisKIH0gLy8gbmFtZXNwYWNlIEpT
QwogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1lbW9yeS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNZW1vcnkuaAkocmV2aXNpb24g
MjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1l
bW9yeS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxNi0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjMsNyArNjMsNyBAQCBwdWJsaWM6CiBwcml2YXRl
OgogICAgIEpTV2ViQXNzZW1ibHlNZW1vcnkoVk0mLCBTdHJ1Y3R1cmUqKTsKICAgICB2b2lkIGZp
bmlzaENyZWF0aW9uKFZNJik7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwq
LCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBSZWY8
V2FzbTo6TWVtb3J5PiBtX21lbW9yeTsKICAgICBXcml0ZUJhcnJpZXI8SlNBcnJheUJ1ZmZlcj4g
bV9idWZmZXJXcmFwcGVyOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNX
ZWJBc3NlbWJseU1vZHVsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5jcHAJKHJldmlzaW9uIDI3MjkwMikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0y
MDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMTI0LDcgKzEyNCw4IEBAIHZvaWQgSlNXZWJBc3NlbWJseU1vZHVsZTo6
c2V0Q29kZUJsb2NrKFYKICAgICBtX2NvZGVCbG9ja3Nbc3RhdGljX2Nhc3Q8c2l6ZV90Pihtb2Rl
KV0uc2V0KHZtLCB0aGlzLCBjb2RlQmxvY2spOwogfQogCi12b2lkIEpTV2ViQXNzZW1ibHlNb2R1
bGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3Rl
bXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTV2ViQXNzZW1ibHlNb2R1bGU6OnZpc2l0
Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU1dl
YkFzc2VtYmx5TW9kdWxlKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTV2ViQXNzZW1ibHlNb2R1bGUq
PihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8o
KSk7CkBAIC0xMzUsNiArMTM2LDggQEAgdm9pZCBKU1dlYkFzc2VtYmx5TW9kdWxlOjp2aXNpdENo
aWxkcmVuKAogICAgICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2NvZGVCbG9ja3Nb
aV0pOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNXZWJBc3NlbWJseU1vZHVsZSk7CisK
IH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlN
b2R1bGUuaAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
anMvSlNXZWJBc3NlbWJseU1vZHVsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODAsNyArODAsNyBA
QCBwcml2YXRlOgogCiAgICAgSlNXZWJBc3NlbWJseU1vZHVsZShWTSYsIFN0cnVjdHVyZSosIFJl
ZjxXYXNtOjpNb2R1bGU+JiYpOwogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKLSAgICBz
dGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVD
TEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIFJlZjxXYXNtOjpNb2R1bGU+IG1fbW9kdWxlOwog
ICAgIFdyaXRlQmFycmllcjxTeW1ib2xUYWJsZT4gbV9leHBvcnRTeW1ib2xUYWJsZTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlUYWJsZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseVRh
YmxlLmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
anMvSlNXZWJBc3NlbWJseVRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTcyLDcgKzcyLDgg
QEAgdm9pZCBKU1dlYkFzc2VtYmx5VGFibGU6OmRlc3Ryb3koSlNDZWxsKgogICAgIHN0YXRpY19j
YXN0PEpTV2ViQXNzZW1ibHlUYWJsZSo+KGNlbGwpLT5KU1dlYkFzc2VtYmx5VGFibGU6On5KU1dl
YkFzc2VtYmx5VGFibGUoKTsKIH0KIAotdm9pZCBKU1dlYkFzc2VtYmx5VGFibGU6OnZpc2l0Q2hp
bGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVu
YW1lIFZpc2l0b3I+Cit2b2lkIEpTV2ViQXNzZW1ibHlUYWJsZTo6dmlzaXRDaGlsZHJlbkltcGwo
SlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTV2ViQXNzZW1ibHlUYWJs
ZSogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1dlYkFzc2VtYmx5VGFibGUqPihjZWxsKTsKICAgICBB
U1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC04MSw2ICs4
Miw4IEBAIHZvaWQgSlNXZWJBc3NlbWJseVRhYmxlOjp2aXNpdENoaWxkcmVuKEoKICAgICB0aGlz
T2JqZWN0LT50YWJsZSgpLT52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKIH0KIAorREVGSU5FX1ZJ
U0lUX0NISUxEUkVOKEpTV2ViQXNzZW1ibHlUYWJsZSk7CisKIGJvb2wgSlNXZWJBc3NlbWJseVRh
YmxlOjpncm93KHVpbnQzMl90IGRlbHRhLCBKU1ZhbHVlIGRlZmF1bHRWYWx1ZSkKIHsKICAgICBp
ZiAoZGVsdGEgPT0gMCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2Vi
QXNzZW1ibHlUYWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL0pTV2ViQXNzZW1ibHlUYWJsZS5oCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5VGFibGUuaAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxOSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTcwLDcgKzcwLDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBKU1dlYkFzc2VtYmx5VGFi
bGUoVk0mLCBTdHJ1Y3R1cmUqLCBSZWY8V2FzbTo6VGFibGU+JiYpOwogICAgIHZvaWQgZmluaXNo
Q3JlYXRpb24oVk0mKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNs
b3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIFJlZjxXYXNt
OjpUYWJsZT4gbV90YWJsZTsKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9XZWJBc3NlbWJseUZ1bmN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmNwcAkocmV2aXNpb24gMjcyOTAyKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2
LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC00NTIsNyArNDUyLDggQEAgV2ViQXNzZW1ibHlGdW5jdGlvbjo6
V2ViQXNzZW1ibHlGdW5jdGlvbgogICAgICwgbV9pbXBvcnRhYmxlRnVuY3Rpb24geyBzaWduYXR1
cmVJbmRleCwgd2FzbVRvV2FzbUVudHJ5cG9pbnRMb2FkTG9jYXRpb24gfQogeyB9CiAKLXZvaWQg
V2ViQXNzZW1ibHlGdW5jdGlvbjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNp
dG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgV2ViQXNzZW1i
bHlGdW5jdGlvbjo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNp
dG9yKQogewogICAgIFdlYkFzc2VtYmx5RnVuY3Rpb24qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8V2Vi
QXNzZW1ibHlGdW5jdGlvbio+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMo
dGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTQ2MSw2ICs0NjIsOCBAQCB2b2lkIFdlYkFzc2VtYmx5
RnVuY3Rpb246OnZpc2l0Q2hpbGRyZW4oCiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+
bV9qc1RvV2FzbUlDQ2FsbGVlKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKFdlYkFzc2Vt
Ymx5RnVuY3Rpb24pOworCiB2b2lkIFdlYkFzc2VtYmx5RnVuY3Rpb246OmRlc3Ryb3koSlNDZWxs
KiBjZWxsKQogewogICAgIHN0YXRpY19jYXN0PFdlYkFzc2VtYmx5RnVuY3Rpb24qPihjZWxsKS0+
V2ViQXNzZW1ibHlGdW5jdGlvbjo6fldlYkFzc2VtYmx5RnVuY3Rpb24oKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmgJ
KHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFz
c2VtYmx5RnVuY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTYtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTg2LDcgKzg2LDcgQEAgcHVibGlj
OgogICAgIFdhc206Okluc3RhbmNlKiBwcmV2aW91c0luc3RhbmNlKENhbGxGcmFtZSopOwogCiBw
cml2YXRlOgotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0
b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogICAgIFdlYkFzc2VtYmx5RnVuY3Rp
b24oVk0mLCBOYXRpdmVFeGVjdXRhYmxlKiwgSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqLCBX
YXNtOjpDYWxsZWUmIGpzRW50cnlwb2ludCwgV2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbjo6
TG9hZExvY2F0aW9uIGVudHJ5cG9pbnRMb2FkTG9jYXRpb24sIFdhc206OlNpZ25hdHVyZUluZGV4
KTsKIAogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBqc0NhbGxFbnRy
eXBvaW50U2xvdygpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNz
ZW1ibHlGdW5jdGlvbkJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb25CYXNlLmNwcAkocmV2aXNpb24gMjcyOTAyKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbkJhc2Uu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTQxLDcgKzQxLDggQEAgV2ViQXNzZW1ibHlGdW5jdGlvbkJhc2U6
OldlYkFzc2VtYmx5RnVuYwogICAgIDogQmFzZSh2bSwgZXhlY3V0YWJsZSwgZ2xvYmFsT2JqZWN0
LCBzdHJ1Y3R1cmUpCiB7IH0KIAotdm9pZCBXZWJBc3NlbWJseUZ1bmN0aW9uQmFzZTo6dmlzaXRD
aGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlw
ZW5hbWUgVmlzaXRvcj4KK3ZvaWQgV2ViQXNzZW1ibHlGdW5jdGlvbkJhc2U6OnZpc2l0Q2hpbGRy
ZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBXZWJBc3NlbWJs
eUZ1bmN0aW9uQmFzZSogdGhpc09iamVjdCA9IGpzQ2FzdDxXZWJBc3NlbWJseUZ1bmN0aW9uQmFz
ZSo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5m
bygpKTsKQEAgLTQ5LDYgKzUwLDggQEAgdm9pZCBXZWJBc3NlbWJseUZ1bmN0aW9uQmFzZTo6dmlz
aXRDaGlsZAogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1faW5zdGFuY2UpOwogfQog
CitERUZJTkVfVklTSVRfQ0hJTERSRU4oV2ViQXNzZW1ibHlGdW5jdGlvbkJhc2UpOworCiB2b2lk
IFdlYkFzc2VtYmx5RnVuY3Rpb25CYXNlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIE5hdGl2ZUV4
ZWN1dGFibGUqIGV4ZWN1dGFibGUsIHVuc2lnbmVkIGxlbmd0aCwgY29uc3QgU3RyaW5nJiBuYW1l
LCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGluc3RhbmNlKQogewogICAgIEJhc2U6OmZpbmlzaENy
ZWF0aW9uKHZtLCBleGVjdXRhYmxlLCBsZW5ndGgsIG5hbWUpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbkJhc2UuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uQmFzZS5o
CShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJB
c3NlbWJseUZ1bmN0aW9uQmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxNy0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDYsNyArNDYsNyBAQCBw
dWJsaWM6CiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkluc3RhbmNlKCkgeyByZXR1cm4g
T0JKRUNUX09GRlNFVE9GKFdlYkFzc2VtYmx5RnVuY3Rpb25CYXNlLCBtX2luc3RhbmNlKTsgfQog
CiBwcm90ZWN0ZWQ6Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90
VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAgICAgdm9pZCBmaW5pc2hD
cmVhdGlvbihWTSYsIE5hdGl2ZUV4ZWN1dGFibGUqLCB1bnNpZ25lZCBsZW5ndGgsIGNvbnN0IFN0
cmluZyYgbmFtZSwgSlNXZWJBc3NlbWJseUluc3RhbmNlKik7CiAgICAgV2ViQXNzZW1ibHlGdW5j
dGlvbkJhc2UoVk0mLCBOYXRpdmVFeGVjdXRhYmxlKiwgSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1
cmUqKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlN
b2R1bGVSZWNvcmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNi0y
MDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
Ni0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtNzgsNyArNzgsOCBAQCB2b2lkIFdlYkFzc2VtYmx5TW9kdWxlUmVj
b3JkOjpmaW5pc2hDcmVhCiAgICAgfQogfQogCi12b2lkIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3Jk
Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1w
bGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6dmlz
aXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFdl
YkFzc2VtYmx5TW9kdWxlUmVjb3JkKiB0aGlzT2JqZWN0ID0ganNDYXN0PFdlYkFzc2VtYmx5TW9k
dWxlUmVjb3JkKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2Jq
ZWN0LCBpbmZvKCkpOwpAQCAtODgsNiArODksOCBAQCB2b2lkIFdlYkFzc2VtYmx5TW9kdWxlUmVj
b3JkOjp2aXNpdENoaWxkCiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9leHBvcnRz
T2JqZWN0KTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKFdlYkFzc2VtYmx5TW9kdWxlUmVj
b3JkKTsKKwogdm9pZCBXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6cHJlcGFyZUxpbmsoVk0mIHZt
LCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGluc3RhbmNlKQogewogICAgIFJFTEVBU0VfQVNTRVJU
KCFtX2luc3RhbmNlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFz
c2VtYmx5TW9kdWxlUmVjb3JkLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuaAkocmV2aXNpb24gMjcyOTAyKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYt
MjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTY5LDcgKzY5LDcgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgZmlu
aXNoQ3JlYXRpb24oSlNHbG9iYWxPYmplY3QqLCBWTSYsIGNvbnN0IFdhc206Ok1vZHVsZUluZm9y
bWF0aW9uJik7CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RW
aXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIFdyaXRlQmFycmll
cjxKU1dlYkFzc2VtYmx5SW5zdGFuY2U+IG1faW5zdGFuY2U7CiAgICAgV3JpdGVCYXJyaWVyPEpT
T2JqZWN0PiBtX3N0YXJ0RnVuY3Rpb247CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9XZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uY3BwCShy
ZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3Nl
bWJseVdyYXBwZXJGdW5jdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02Nyw3ICs2Nyw4IEBA
IFN0cnVjdHVyZSogV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb246OmMKICAgICByZXR1cm4gU3Ry
dWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhKU0Z1
bmN0aW9uVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwogfQogCi12b2lkIFdlYkFzc2Vt
Ymx5V3JhcHBlckZ1bmN0aW9uOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0
b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBXZWJBc3NlbWJs
eVdyYXBwZXJGdW5jdGlvbjo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9y
JiB2aXNpdG9yKQogewogICAgIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uKiB0aGlzT2JqZWN0
ID0ganNDYXN0PFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uKj4oY2VsbCk7CiAgICAgQVNTRVJU
X0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNzYsNiArNzcsOCBA
QCB2b2lkIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uOjp2aXNpdENoCiAgICAgdmlzaXRvci5h
cHBlbmQodGhpc09iamVjdC0+bV9mdW5jdGlvbik7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJF
TihXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbik7CisKIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElP
TihjYWxsV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24sIChKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2Jq
ZWN0LT52bSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1i
bHlXcmFwcGVyRnVuY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9qcy9XZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5oCShyZXZpc2lvbiAyNzI5MDIpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlv
bi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxNy0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTksNyArNTksNyBAQCBwdWJsaWM6CiBwcml2YXRlOgog
ICAgIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uKFZNJiwgTmF0aXZlRXhlY3V0YWJsZSosIEpT
R2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKiwgV2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbik7
CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIE5hdGl2ZUV4ZWN1dGFibGUqLCB1bnNpZ25l
ZCBsZW5ndGgsIGNvbnN0IFN0cmluZyYgbmFtZSwgSlNPYmplY3QqLCBKU1dlYkFzc2VtYmx5SW5z
dGFuY2UqKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNp
dG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIFdyaXRlQmFycmllcjxK
U09iamVjdD4gbV9mdW5jdGlvbjsKICAgICAvLyBJdCdzIHNhZmUgdG8ganVzdCBob2xkIHRoZSBy
YXcgV2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbiBiZWNhdXNlIHdlIGhhdmUgYSByZWZlcmVu
Y2UKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3Jl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJP
YmplY3RTdG9yZS5jcHAJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03MjgsNyArNzI4
LDggQEAgdm9pZCBJREJPYmplY3RTdG9yZTo6cm9sbGJhY2tGb3JWZXJzaW9uQwogICAgIH0KIH0K
IAotdm9pZCBJREJPYmplY3RTdG9yZTo6dmlzaXRSZWZlcmVuY2VkSW5kZXhlcyhTbG90VmlzaXRv
ciYgdmlzaXRvcikgY29uc3QKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIElEQk9i
amVjdFN0b3JlOjp2aXNpdFJlZmVyZW5jZWRJbmRleGVzKFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0
CiB7CiAgICAgTG9ja2VyPExvY2s+IGxvY2tlcihtX3JlZmVyZW5jZWRJbmRleExvY2spOwogICAg
IGZvciAoYXV0byYgaW5kZXggOiBtX3JlZmVyZW5jZWRJbmRleGVzLnZhbHVlcygpKQpAQCAtNzM3
LDYgKzczOCw5IEBAIHZvaWQgSURCT2JqZWN0U3RvcmU6OnZpc2l0UmVmZXJlbmNlZEluZGUKICAg
ICAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KGluZGV4LmdldCgpKTsKIH0KIAordGVtcGxhdGUg
dm9pZCBJREJPYmplY3RTdG9yZTo6dmlzaXRSZWZlcmVuY2VkSW5kZXhlcyhBYnN0cmFjdFNsb3RW
aXNpdG9yJikgY29uc3Q7Cit0ZW1wbGF0ZSB2b2lkIElEQk9iamVjdFN0b3JlOjp2aXNpdFJlZmVy
ZW5jZWRJbmRleGVzKFNsb3RWaXNpdG9yJikgY29uc3Q7CisKIHZvaWQgSURCT2JqZWN0U3RvcmU6
OnJlbmFtZVJlZmVyZW5jZWRJbmRleChJREJJbmRleCYgaW5kZXgsIGNvbnN0IFN0cmluZyYgbmV3
TmFtZSkKIHsKICAgICBMT0coSW5kZXhlZERCLCAiSURCT2JqZWN0U3RvcmU6OnJlbmFtZVJlZmVy
ZW5jZWRJbmRleCIpOwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
T2JqZWN0U3RvcmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJPYmplY3RTdG9yZS5oCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEwOSw3
ICsxMDksNyBAQCBwdWJsaWM6CiAgICAgdm9pZCByZWYoKTsKICAgICB2b2lkIGRlcmVmKCk7CiAK
LSAgICB2b2lkIHZpc2l0UmVmZXJlbmNlZEluZGV4ZXMoSlNDOjpTbG90VmlzaXRvciYpIGNvbnN0
OworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgdmlzaXRSZWZlcmVuY2VkSW5k
ZXhlcyhWaXNpdG9yJikgY29uc3Q7CiAgICAgdm9pZCByZW5hbWVSZWZlcmVuY2VkSW5kZXgoSURC
SW5kZXgmLCBjb25zdCBTdHJpbmcmIG5ld05hbWUpOwogCiBwcml2YXRlOgpJbmRleDogU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb24uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmNwcAko
cmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
VHJhbnNhY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxNS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTQ1NSw3ICsxNDU1LDggQEAgdm9p
ZCBJREJUcmFuc2FjdGlvbjo6Y29ubmVjdGlvbkNsb3NlZEZybwogICAgIGZpcmVPbkFib3J0KCk7
CiB9CiAKLXZvaWQgSURCVHJhbnNhY3Rpb246OnZpc2l0UmVmZXJlbmNlZE9iamVjdFN0b3JlcyhK
U0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKSBjb25zdAordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRv
cj4KK3ZvaWQgSURCVHJhbnNhY3Rpb246OnZpc2l0UmVmZXJlbmNlZE9iamVjdFN0b3JlcyhWaXNp
dG9yJiB2aXNpdG9yKSBjb25zdAogewogICAgIExvY2tlcjxMb2NrPiBsb2NrZXIobV9yZWZlcmVu
Y2VkT2JqZWN0U3RvcmVMb2NrKTsKICAgICBmb3IgKGF1dG8mIG9iamVjdFN0b3JlIDogbV9yZWZl
cmVuY2VkT2JqZWN0U3RvcmVzLnZhbHVlcygpKQpAQCAtMTQ2NCw2ICsxNDY1LDkgQEAgdm9pZCBJ
REJUcmFuc2FjdGlvbjo6dmlzaXRSZWZlcmVuY2VkT2JqZQogICAgICAgICB2aXNpdG9yLmFkZE9w
YXF1ZVJvb3Qob2JqZWN0U3RvcmUuZ2V0KCkpOwogfQogCit0ZW1wbGF0ZSB2b2lkIElEQlRyYW5z
YWN0aW9uOjp2aXNpdFJlZmVyZW5jZWRPYmplY3RTdG9yZXMoSlNDOjpBYnN0cmFjdFNsb3RWaXNp
dG9yJikgY29uc3Q7Cit0ZW1wbGF0ZSB2b2lkIElEQlRyYW5zYWN0aW9uOjp2aXNpdFJlZmVyZW5j
ZWRPYmplY3RTdG9yZXMoSlNDOjpTbG90VmlzaXRvciYpIGNvbnN0OworCiB2b2lkIElEQlRyYW5z
YWN0aW9uOjpoYW5kbGVQZW5kaW5nT3BlcmF0aW9ucygpCiB7CiAgICAgQVNTRVJUKGNhbkN1cnJl
bnRUaHJlYWRBY2Nlc3NUaHJlYWRMb2NhbERhdGEobV9kYXRhYmFzZS0+b3JpZ2luVGhyZWFkKCkp
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9u
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJh
bnNhY3Rpb24uaAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCVHJhbnNhY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xNDksNyArMTQ5LDcgQEAg
cHVibGljOgogCiAgICAgdm9pZCBjb25uZWN0aW9uQ2xvc2VkRnJvbVNlcnZlcihjb25zdCBJREJF
cnJvciYpOwogCi0gICAgdm9pZCB2aXNpdFJlZmVyZW5jZWRPYmplY3RTdG9yZXMoSlNDOjpTbG90
VmlzaXRvciYpIGNvbnN0OworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgdmlz
aXRSZWZlcmVuY2VkT2JqZWN0U3RvcmVzKFZpc2l0b3ImKSBjb25zdDsKIAogICAgIFdFQkNPUkVf
RVhQT1JUIHN0YXRpYyBzdGQ6OmF0b21pYzx1bnNpZ25lZD4gbnVtYmVyT2ZJREJUcmFuc2FjdGlv
bnM7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9CdWZmZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9C
dWZmZXIuY3BwCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmF1ZGlvL0F1ZGlvQnVmZmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8q
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE1NCwxMiArMTU0LDE2IEBAIEV4
Y2VwdGlvbk9yPEpTQzo6SlNWYWx1ZT4gQXVkaW9CdWZmZXI6OmcKICAgICByZXR1cm4gY29uc3Ry
dWN0SlNBcnJheSgpOwogfQogCi12b2lkIEF1ZGlvQnVmZmVyOjp2aXNpdENoYW5uZWxXcmFwcGVy
cyhKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4K
K3ZvaWQgQXVkaW9CdWZmZXI6OnZpc2l0Q2hhbm5lbFdyYXBwZXJzKFZpc2l0b3ImIHZpc2l0b3Ip
CiB7CiAgICAgZm9yIChhdXRvJiBjaGFubmVsV3JhcHBlciA6IG1fY2hhbm5lbFdyYXBwZXJzKQog
ICAgICAgICBjaGFubmVsV3JhcHBlci52aXNpdCh2aXNpdG9yKTsKIH0KIAordGVtcGxhdGUgdm9p
ZCBBdWRpb0J1ZmZlcjo6dmlzaXRDaGFubmVsV3JhcHBlcnMoSlNDOjpBYnN0cmFjdFNsb3RWaXNp
dG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEF1ZGlvQnVmZmVyOjp2aXNpdENoYW5uZWxXcmFwcGVycyhK
U0M6OlNsb3RWaXNpdG9yJik7CisKIFJlZlB0cjxGbG9hdDMyQXJyYXk+IEF1ZGlvQnVmZmVyOjpj
aGFubmVsRGF0YSh1bnNpZ25lZCBjaGFubmVsSW5kZXgpCiB7CiAgICAgaWYgKGNoYW5uZWxJbmRl
eCA+PSBtX2NoYW5uZWxzLnNpemUoKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
YXVkaW8vQXVkaW9CdWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmF1ZGlvL0F1ZGlvQnVmZmVyLmgJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9CdWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2
ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTc1LDcgKzc1
LDcgQEAgcHVibGljOgogCiAgICAgc2l6ZV90IG1lbW9yeUNvc3QoKSBjb25zdDsKIAotICAgIHZv
aWQgdmlzaXRDaGFubmVsV3JhcHBlcnMoSlNDOjpTbG90VmlzaXRvciYpOworICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgdmlzaXRDaGFubmVsV3JhcHBlcnMoVmlzaXRvciYpOwog
ICAgIAogcHJpdmF0ZToKICAgICBBdWRpb0J1ZmZlcih1bnNpZ25lZCBudW1iZXJPZkNoYW5uZWxz
LCBzaXplX3QgbGVuZ3RoLCBmbG9hdCBzYW1wbGVSYXRlLCBMZWdhY3lQcmV2ZW50RGV0YWNoaW5n
ID0gTGVnYWN5UHJldmVudERldGFjaGluZzo6Tm8pOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvRE9NR0NPdXRwdXRDb25zdHJhaW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9ET01HQ091dHB1dENvbnN0cmFpbnQuY3BwCShyZXZpc2lvbiAy
NzI5MDIpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9ET01HQ091dHB1dENvbnN0cmFp
bnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OSw3ICs0OSw4IEBAIERPTUdDT3V0cHV0Q29uc3Ry
YWludDo6fkRPTUdDT3V0cHV0Q29uc3QKIHsKIH0KIAotdm9pZCBET01HQ091dHB1dENvbnN0cmFp
bnQ6OmV4ZWN1dGVJbXBsKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUg
VmlzaXRvcj4KK3ZvaWQgRE9NR0NPdXRwdXRDb25zdHJhaW50OjpleGVjdXRlSW1wbEltcGwoVmlz
aXRvciYgdmlzaXRvcikKIHsKICAgICBIZWFwJiBoZWFwID0gbV92bS5oZWFwOwogICAgIApAQCAt
NjAsMTUgKzYxLDE5IEBAIHZvaWQgRE9NR0NPdXRwdXRDb25zdHJhaW50OjpleGVjdXRlSW1wbCgK
ICAgICAKICAgICBtX2NsaWVudERhdGEuZm9yRWFjaE91dHB1dENvbnN0cmFpbnRTcGFjZSgKICAg
ICAgICAgWyZdIChTdWJzcGFjZSYgc3Vic3BhY2UpIHsKLSAgICAgICAgICAgIGF1dG8gZnVuYyA9
IFtdIChTbG90VmlzaXRvciYgdmlzaXRvciwgSGVhcENlbGwqIGhlYXBDZWxsLCBIZWFwQ2VsbDo6
S2luZCkgeworICAgICAgICAgICAgYXV0byBmdW5jID0gW10gKFZpc2l0b3ImIHZpc2l0b3IsIEhl
YXBDZWxsKiBoZWFwQ2VsbCwgSGVhcENlbGw6OktpbmQpIHsKICAgICAgICAgICAgICAgICBTZXRS
b290TWFya1JlYXNvblNjb3BlIHJvb3RTY29wZSh2aXNpdG9yLCBSb290TWFya1JlYXNvbjo6RE9N
R0NPdXRwdXQpOwogICAgICAgICAgICAgICAgIEpTQ2VsbCogY2VsbCA9IHN0YXRpY19jYXN0PEpT
Q2VsbCo+KGhlYXBDZWxsKTsKICAgICAgICAgICAgICAgICBjZWxsLT5tZXRob2RUYWJsZSh2aXNp
dG9yLnZtKCkpLT52aXNpdE91dHB1dENvbnN0cmFpbnRzKGNlbGwsIHZpc2l0b3IpOwogICAgICAg
ICAgICAgfTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgdmlzaXRvci5hZGRQYXJhbGxlbENv
bnN0cmFpbnRUYXNrKHN1YnNwYWNlLmZvckVhY2hNYXJrZWRDZWxsSW5QYXJhbGxlbChmdW5jKSk7
CisgICAgICAgICAgICBSZWZQdHI8U2hhcmVkVGFzazx2b2lkKFZpc2l0b3ImKT4+IHRhc2sgPSBz
dWJzcGFjZS50ZW1wbGF0ZSBmb3JFYWNoTWFya2VkQ2VsbEluUGFyYWxsZWw8VmlzaXRvcj4oZnVu
Yyk7CisgICAgICAgICAgICB2aXNpdG9yLmFkZFBhcmFsbGVsQ29uc3RyYWludFRhc2sodGFzayk7
CiAgICAgICAgIH0pOwogfQogICAgICAgICAKK3ZvaWQgRE9NR0NPdXRwdXRDb25zdHJhaW50Ojpl
eGVjdXRlSW1wbChBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKSB7IGV4ZWN1dGVJbXBsSW1w
bCh2aXNpdG9yKTsgfQordm9pZCBET01HQ091dHB1dENvbnN0cmFpbnQ6OmV4ZWN1dGVJbXBsKFNs
b3RWaXNpdG9yJiB2aXNpdG9yKSB7IGV4ZWN1dGVJbXBsSW1wbCh2aXNpdG9yKTsgfQorCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0RP
TUdDT3V0cHV0Q29uc3RyYWludC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0RPTUdDT3V0cHV0Q29uc3RyYWludC5oCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9ET01HQ091dHB1dENvbnN0cmFpbnQuaAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAxOCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTQyLDkgKzQyLDEyIEBAIHB1YmxpYzoKICAgICB+RE9NR0NPdXRwdXRDb25zdHJh
aW50KCk7CiAgICAgCiBwcm90ZWN0ZWQ6CisgICAgdm9pZCBleGVjdXRlSW1wbChKU0M6OkFic3Ry
YWN0U2xvdFZpc2l0b3ImKSBvdmVycmlkZTsKICAgICB2b2lkIGV4ZWN1dGVJbXBsKEpTQzo6U2xv
dFZpc2l0b3ImKSBvdmVycmlkZTsKIAogcHJpdmF0ZToKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPiB2b2lkIGV4ZWN1dGVJbXBsSW1wbChWaXNpdG9yJik7CisKICAgICBKU0M6OlZNJiBt
X3ZtOwogICAgIEpTVk1DbGllbnREYXRhJiBtX2NsaWVudERhdGE7CiAgICAgdWludDY0X3QgbV9s
YXN0RXhlY3V0aW9uVmVyc2lvbjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
QWJvcnRDb250cm9sbGVyQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0Fib3J0Q29udHJvbGxlckN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjkwMikK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQWJvcnRDb250cm9sbGVyQ3VzdG9tLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0qIENvcHlyaWdodCAoQykgMjAx
OSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqIENvcHlyaWdodCAoQykgMjAxOS0y
MDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICoKICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMjgsOSArMjgsMTIgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lk
IEpTQWJvcnRDb250cm9sbGVyOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNp
dG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNBYm9ydENv
bnRyb2xsZXI6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAg
ICAgdmlzaXRvci5hZGRPcGFxdWVSb290KCZ3cmFwcGVkKCkuc2lnbmFsKCkpOwogfQogCitERUZJ
TkVfVklTSVRfQURESVRJT05BTF9DSElMRFJFTihKU0Fib3J0Q29udHJvbGxlcik7CisKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQWJv
cnRTaWduYWxDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTQWJvcnRTaWduYWxDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Fib3J0U2lnbmFsQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0qIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisqIENvcHlyaWdodCAoQykgMjAxOS0yMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICoKICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjgs
NyArMjgsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWJvb2wgSlNBYm9ydFNpZ25hbE93
bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+
IGhhbmRsZSwgdm9pZCosIEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiBy
ZWFzb24pCitib29sIEpTQWJvcnRTaWduYWxPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9v
dHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBKU0M6OkFic3RyYWN0
U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCiB7CiAgICAgYXV0byYg
YWJvcnRTaWduYWwgPSBKU0M6OmpzQ2FzdDxKU0Fib3J0U2lnbmFsKj4oaGFuZGxlLnNsb3QoKS0+
YXNDZWxsKCkpLT53cmFwcGVkKCk7CiAgICAgaWYgKGFib3J0U2lnbmFsLmlzRmlyaW5nRXZlbnRM
aXN0ZW5lcnMoKSkgewpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNBdHRyQ3Vz
dG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0F0dHJD
dXN0b20uY3BwCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0F0dHJDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAwNywgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMzLDEwICszMywx
MyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgSlNBdHRyOjp2aXNpdEFkZGl0aW9u
YWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUg
VmlzaXRvcj4KK3ZvaWQgSlNBdHRyOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2
aXNpdG9yKQogewogICAgIGlmIChFbGVtZW50KiBlbGVtZW50ID0gd3JhcHBlZCgpLm93bmVyRWxl
bWVudCgpKQogICAgICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qocm9vdChlbGVtZW50KSk7CiB9
CiAKK0RFRklORV9WSVNJVF9BRERJVElPTkFMX0NISUxEUkVOKEpTQXR0cik7CisKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXVkaW9C
dWZmZXJDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTQXVkaW9CdWZmZXJDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0F1ZGlvQnVmZmVyQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIwLTIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0z
MSwxMSArMzEsMTQgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBKU0M7
CiAKLXZvaWQgSlNBdWRpb0J1ZmZlcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0
b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0F1ZGlvQnVm
ZmVyOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHdy
YXBwZWQoKS52aXNpdENoYW5uZWxXcmFwcGVycyh2aXNpdG9yKTsKIH0KIAorREVGSU5FX1ZJU0lU
X0FERElUSU9OQUxfQ0hJTERSRU4oSlNBdWRpb0J1ZmZlcik7CisKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShXRUJfQVVESU8pCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0F1ZGlvVHJhY2tDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXVkaW9UcmFja0N1c3RvbS5jcHAJKHJldmlzaW9uIDI3
MjkwMikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXVkaW9UcmFja0N1c3RvbS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
MS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMzUsMTEgKzM1LDE0IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1
c2luZyBuYW1lc3BhY2UgSlNDOwogCi12b2lkIEpTQXVkaW9UcmFjazo6dmlzaXRBZGRpdGlvbmFs
Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
Pgordm9pZCBKU0F1ZGlvVHJhY2s6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZp
c2l0b3IpCiB7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHJvb3QoJndyYXBwZWQoKSkpOwog
fQogCitERUZJTkVfVklTSVRfQURESVRJT05BTF9DSElMRFJFTihKU0F1ZGlvVHJhY2spOworCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNBdWRpb1RyYWNrTGlzdEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNBdWRpb1RyYWNrTGlzdEN1c3RvbS5jcHAJKHJldmlzaW9u
IDI3MjkwMikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXVkaW9UcmFja0xpc3RD
dXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTEtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM2LDExICszNiwxNCBAQAogbmFtZXNwYWNlIFdlYkNv
cmUgewogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAotdm9pZCBKU0F1ZGlvVHJhY2tMaXN0Ojp2aXNp
dEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVu
YW1lIFZpc2l0b3I+Cit2b2lkIEpTQXVkaW9UcmFja0xpc3Q6OnZpc2l0QWRkaXRpb25hbENoaWxk
cmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHJvb3Qo
d3JhcHBlZCgpLmVsZW1lbnQoKSkpOwogfQogCitERUZJTkVfVklTSVRfQURESVRJT05BTF9DSElM
RFJFTihKU0F1ZGlvVHJhY2tMaXN0KTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5k
aWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXVkaW9Xb3JrbGV0UHJvY2Vz
c29yQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0F1ZGlvV29ya2xldFByb2Nlc3NvckN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjkwMikKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXVkaW9Xb3JrbGV0UHJvY2Vzc29yQ3VzdG9tLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIw
LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0zMSw3ICszMSw4IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2lu
ZyBuYW1lc3BhY2UgSlNDOwogCi12b2lkIEpTQXVkaW9Xb3JrbGV0UHJvY2Vzc29yOjp2aXNpdEFk
ZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1l
IFZpc2l0b3I+Cit2b2lkIEpTQXVkaW9Xb3JrbGV0UHJvY2Vzc29yOjp2aXNpdEFkZGl0aW9uYWxD
aGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGF1dG8mIHByb2Nlc3NvciA9IHdyYXBw
ZWQoKTsKICAgICBwcm9jZXNzb3IuanNJbnB1dHNXcmFwcGVyKCkudmlzaXQodmlzaXRvcik7CkBA
IC0zOSw2ICs0MCw4IEBAIHZvaWQgSlNBdWRpb1dvcmtsZXRQcm9jZXNzb3I6OnZpc2l0QWRkaXQK
ICAgICBwcm9jZXNzb3IuanNQYXJhbVZhbHVlc1dyYXBwZXIoKS52aXNpdCh2aXNpdG9yKTsKIH0K
IAorREVGSU5FX1ZJU0lUX0FERElUSU9OQUxfQ0hJTERSRU4oSlNBdWRpb1dvcmtsZXRQcm9jZXNz
b3IpOworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoV0VCX0FV
RElPKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDU1NSdWxlQ3VzdG9tLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NTU1J1bGVDdXN0
b20uY3BwCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0NTU1J1bGVDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTUxLDExICs1MSwxNCBAQAog
bmFtZXNwYWNlIFdlYkNvcmUgewogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAotdm9pZCBKU0NTU1J1
bGU6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxh
dGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNDU1NSdWxlOjp2aXNpdEFkZGl0aW9uYWxDaGls
ZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChyb290
KCZ3cmFwcGVkKCkpKTsKIH0KIAorREVGSU5FX1ZJU0lUX0FERElUSU9OQUxfQ0hJTERSRU4oSlND
U1NSdWxlKTsKKwogSlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTR2xvYmFsT2JqZWN0KiwgSlNE
T01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmPENTU1J1bGU+JiYgcnVsZSkKIHsKICAg
ICBzd2l0Y2ggKHJ1bGUtPnR5cGUoKSkgewpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNDU1NSdWxlTGlzdEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNDU1NSdWxlTGlzdEN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjkwMikKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ1NTUnVsZUxpc3RDdXN0b20uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOS0yMDE5
IEFwcGxlIEluYy4gQWxsIHJpZ2h0IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5LTIw
MjEgQXBwbGUgSW5jLiBBbGwgcmlnaHQgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTM2LDcgKzM2LDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5h
bWVzcGFjZSBKU0M7CiAKLWJvb2wgSlNDU1NSdWxlTGlzdE93bmVyOjppc1JlYWNoYWJsZUZyb21P
cGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIFNsb3RW
aXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQorYm9vbCBKU0NTU1J1bGVMaXN0
T3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93
bj4gaGFuZGxlLCB2b2lkKiwgQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hh
cioqIHJlYXNvbikKIHsKICAgICBKU0NTU1J1bGVMaXN0KiBqc0NTU1J1bGVMaXN0ID0ganNDYXN0
PEpTQ1NTUnVsZUxpc3QqPihoYW5kbGUuc2xvdCgpLT5hc0NlbGwoKSk7CiAgICAgaWYgKCFqc0NT
U1J1bGVMaXN0LT5oYXNDdXN0b21Qcm9wZXJ0aWVzKGpzQ1NTUnVsZUxpc3QtPnZtKCkpKQpJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDU1NTdHlsZURlY2xhcmF0aW9uQ3VzdG9t
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NTU1N0eWxl
RGVjbGFyYXRpb25DdXN0b20uY3BwCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0NTU1N0eWxlRGVjbGFyYXRpb25DdXN0b20uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNy0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtNTEsOSArNTEsMTIgQEAgdm9pZCogcm9vdChDU1NTdHlsZURlY2xhcmF0aW9uKiBz
dHlsZSkKICAgICByZXR1cm4gc3R5bGU7CiB9CiAKLXZvaWQgSlNDU1NTdHlsZURlY2xhcmF0aW9u
Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRl
PHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTQ1NTU3R5bGVEZWNsYXJhdGlvbjo6dmlzaXRBZGRp
dGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB2aXNpdG9yLmFkZE9wYXF1
ZVJvb3Qocm9vdCgmd3JhcHBlZCgpKSk7CiB9CiAKK0RFRklORV9WSVNJVF9BRERJVElPTkFMX0NI
SUxEUkVOKEpTQ1NTU3R5bGVEZWNsYXJhdGlvbik7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2FsbGJhY2tEYXRhLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NhbGxiYWNrRGF0YS5jcHAJ
KHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2FsbGJh
Y2tEYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDctMjAwOSwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTk1LDEyICs5NSwxNiBAQCBKU1Zh
bHVlIEpTQ2FsbGJhY2tEYXRhOjppbnZva2VDYWxsYmFjayhKCiAgICAgcmV0dXJuIHJlc3VsdDsK
IH0KIAotdm9pZCBKU0NhbGxiYWNrRGF0YVdlYWs6OnZpc2l0SlNGdW5jdGlvbihKU0M6OlNsb3RW
aXNpdG9yJiB2aXN0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0NhbGxi
YWNrRGF0YVdlYWs6OnZpc2l0SlNGdW5jdGlvbihWaXNpdG9yJiB2aXNpdG9yKQogewotICAgIHZp
c3Rvci5hcHBlbmQobV9jYWxsYmFjayk7CisgICAgdmlzaXRvci5hcHBlbmQobV9jYWxsYmFjayk7
CiB9CiAKLWJvb2wgSlNDYWxsYmFja0RhdGFXZWFrOjpXZWFrT3duZXI6OmlzUmVhY2hhYmxlRnJv
bU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIFNs
b3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQordGVtcGxhdGUgdm9pZCBK
U0NhbGxiYWNrRGF0YVdlYWs6OnZpc2l0SlNGdW5jdGlvbihKU0M6OkFic3RyYWN0U2xvdFZpc2l0
b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNDYWxsYmFja0RhdGFXZWFrOjp2aXNpdEpTRnVuY3Rpb24o
SlNDOjpTbG90VmlzaXRvciYpOworCitib29sIEpTQ2FsbGJhY2tEYXRhV2Vhazo6V2Vha093bmVy
Ojppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2
b2lkKiBjb250ZXh0LCBBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiog
cmVhc29uKQogewogICAgIGlmIChVTkxJS0VMWShyZWFzb24pKQogICAgICAgICAqcmVhc29uID0g
IkNvbnRleHQgaXMgb3BhcXVlIHJvb3QiOyAvLyBGSVhNRTogd2hhdCBpcyB0aGUgY29udGV4dC4K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2FsbGJhY2tEYXRhLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDYWxsYmFja0RhdGEuaAkocmV2
aXNpb24gMjcyOTAyKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDYWxsYmFja0Rh
dGEuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDctMjAwOSwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTExMywxMSArMTEzLDExIEBAIHB1YmxpYzoK
ICAgICAgICAgcmV0dXJuIEpTQ2FsbGJhY2tEYXRhOjppbnZva2VDYWxsYmFjaygqZ2xvYmFsT2Jq
ZWN0LCBjYWxsYmFjaygpLCB0aGlzVmFsdWUsIGFyZ3MsIGNhbGxiYWNrVHlwZSwgZnVuY3Rpb25O
YW1lLCByZXR1cm5lZEV4Y2VwdGlvbik7CiAgICAgfQogCi0gICAgdm9pZCB2aXNpdEpTRnVuY3Rp
b24oSlNDOjpTbG90VmlzaXRvciYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZv
aWQgdmlzaXRKU0Z1bmN0aW9uKFZpc2l0b3ImKTsKIAogcHJpdmF0ZToKICAgICBjbGFzcyBXZWFr
T3duZXIgOiBwdWJsaWMgSlNDOjpXZWFrSGFuZGxlT3duZXIgewotICAgICAgICBib29sIGlzUmVh
Y2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNv
bnRleHQsIEpTQzo6U2xvdFZpc2l0b3ImLCBjb25zdCBjaGFyKiopIG92ZXJyaWRlOworICAgICAg
ICBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93
bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYsIGNvbnN0IGNoYXIq
Kikgb3ZlcnJpZGU7CiAgICAgfTsKICAgICBXZWFrT3duZXIgbV93ZWFrT3duZXI7CiAgICAgSlND
OjpXZWFrPEpTQzo6SlNPYmplY3Q+IG1fY2FsbGJhY2s7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREN1c3RvbS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0
MkRDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMTcgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMjEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yNCw3ICsy
NCw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotYm9vbCBKU0NhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyRE93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6
OlVua25vd24+IGhhbmRsZSwgdm9pZCosIEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0
IGNoYXIqKiByZWFzb24pCitib29sIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJET3duZXI6Omlz
UmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxl
LCB2b2lkKiwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiog
cmVhc29uKQogewogICAgIGlmIChVTkxJS0VMWShyZWFzb24pKQogICAgICAgICAqcmVhc29uID0g
IkNhbnZhcyBpcyBvcGFxdWUgcm9vdCI7CkBAIC0zNCw5ICszNCwxMiBAQCBib29sIEpTQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJET3duZXI6OmlzCiAgICAgcmV0dXJuIHZpc2l0b3IuY29udGFpbnNP
cGFxdWVSb290KHJvb3QpOwogfQogCi12b2lkIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjp2
aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxh
dGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnZp
c2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgdmlzaXRvci5h
ZGRPcGFxdWVSb290KHJvb3Qod3JhcHBlZCgpLmNhbnZhcygpKSk7CiB9CiAKK0RFRklORV9WSVNJ
VF9BRERJVElPTkFMX0NISUxEUkVOKEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKTsKKwogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlND
dXN0b21FdmVudEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNDdXN0b21FdmVudEN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9tRXZlbnRDdXN0b20uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE4IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtNDIsMTAgKzQyLDEzIEBAIEpTQzo6SlNWYWx1ZSBKU0N1c3RvbUV2ZW50OjpkZXRh
aWwoSlNDOjoKICAgICB9KTsKIH0KIAotdm9pZCBKU0N1c3RvbUV2ZW50Ojp2aXNpdEFkZGl0aW9u
YWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUg
VmlzaXRvcj4KK3ZvaWQgSlNDdXN0b21FdmVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlz
aXRvciYgdmlzaXRvcikKIHsKICAgICB3cmFwcGVkKCkuZGV0YWlsKCkudmlzaXQodmlzaXRvcik7
CiAgICAgd3JhcHBlZCgpLmNhY2hlZERldGFpbCgpLnZpc2l0KHZpc2l0b3IpOwogfQogCitERUZJ
TkVfVklTSVRfQURESVRJT05BTF9DSElMRFJFTihKU0N1c3RvbUV2ZW50KTsKKwogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CdWls
dGluQ29uc3RydWN0b3JCYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0RPTUJ1aWx0aW5Db25zdHJ1Y3RvckJhc2UuY3BwCShyZXZpc2lvbiAyNzI5MDIp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJ1aWx0aW5Db25zdHJ1Y3RvckJh
c2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqICBDb3B5cmlnaHQg
KEMpIDE5OTktMjAwMSBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQotICogIENvcHlyaWdo
dCAoQykgMjAwNC0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5
cmlnaHQgKEMpIDIwMDQtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiAg
Q29weXJpZ2h0IChDKSAyMDA3IFNhbXVlbCBXZWluaWcgPHNhbUB3ZWJraXQub3JnPgogICogIENv
cHlyaWdodCAoQykgMjAxMyBNaWNoYWVsIFBydWV0dCA8bWljaGFlbEA2OGsub3JnPgogICoKQEAg
LTQ1LDcgKzQ1LDggQEAgdm9pZCBKU0RPTUJ1aWx0aW5Db25zdHJ1Y3RvckJhc2U6OmNhbGxGdQog
ICAgIEpTQzo6Y2FsbCgmbGV4aWNhbEdsb2JhbE9iamVjdCwgJmZ1bmN0aW9uLCBjYWxsRGF0YSwg
JnRoaXNPYmplY3QsIGFyZ3VtZW50cyk7CiB9CiAKLXZvaWQgSlNET01CdWlsdGluQ29uc3RydWN0
b3JCYXNlOjp2aXNpdENoaWxkcmVuKEpTQzo6SlNDZWxsKiBjZWxsLCBKU0M6OlNsb3RWaXNpdG9y
JiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNET01CdWlsdGlu
Q29uc3RydWN0b3JCYXNlOjp2aXNpdENoaWxkcmVuSW1wbChKU0M6OkpTQ2VsbCogY2VsbCwgVmlz
aXRvciYgdmlzaXRvcikKIHsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTRE9NQnVp
bHRpbkNvbnN0cnVjdG9yQmFzZSo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJ
VFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTUzLDYgKzU0LDggQEAgdm9pZCBKU0RPTUJ1aWx0
aW5Db25zdHJ1Y3RvckJhc2U6OnZpc2l0QwogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3Qt
Pm1faW5pdGlhbGl6ZUZ1bmN0aW9uKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTRE9N
QnVpbHRpbkNvbnN0cnVjdG9yQmFzZSk7CisKIEpTQzo6SXNvU3Vic3BhY2UqIEpTRE9NQnVpbHRp
bkNvbnN0cnVjdG9yQmFzZTo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQogewogICAgIHJl
dHVybiAmc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKS0+ZG9tQnVp
bHRpbkNvbnN0cnVjdG9yU3BhY2UoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTRE9NQnVpbHRpbkNvbnN0cnVjdG9yQmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTRE9NQnVpbHRpbkNvbnN0cnVjdG9yQmFzZS5oCShyZXZpc2lvbiAy
NzI5MDIpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJ1aWx0aW5Db25zdHJ1
Y3RvckJhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJp
Z2h0IChDKSAyMDE1LCAyMDE2IENhbm9uIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqICBD
b3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENv
cHlyaWdodCAoQykgMjAxNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNz
ZXIgR2VuZXJhbCBQdWJsaWMKQEAgLTQyLDcgKzQyLDcgQEAgcHJvdGVjdGVkOgogICAgIHsKICAg
ICB9CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQzo6SlNDZWxsKiwgSlNDOjpT
bG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBKU0M6OkpT
RnVuY3Rpb24qIGluaXRpYWxpemVGdW5jdGlvbigpOwogICAgIHZvaWQgc2V0SW5pdGlhbGl6ZUZ1
bmN0aW9uKEpTQzo6Vk0mLCBKU0M6OkpTRnVuY3Rpb24mKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5jcHAJKHJldmlzaW9uIDI3Mjkw
MikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgt
MjAxOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDgtMjAyMSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTIzOCw3ICsyMzgsOCBAQCBTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiBKU0RPTUdsb2JhbE9iamVjCiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLXZvaWQgSlNET01H
bG9iYWxPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlz
aXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTRE9NR2xvYmFsT2JqZWN0
Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAg
ICAgSlNET01HbG9iYWxPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmpl
Y3QqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGlu
Zm8oKSk7CkBAIC0yNjAsNiArMjYxLDggQEAgdm9pZCBKU0RPTUdsb2JhbE9iamVjdDo6dmlzaXRD
aGlsZHJlbihKUwogICAgIHRoaXNPYmplY3QtPm1fYnVpbHRpbkludGVybmFsRnVuY3Rpb25zLnZp
c2l0KHZpc2l0b3IpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNET01HbG9iYWxPYmpl
Y3QpOworCiB2b2lkIEpTRE9NR2xvYmFsT2JqZWN0Ojpwcm9taXNlUmVqZWN0aW9uVHJhY2tlcihK
U0dsb2JhbE9iamVjdCoganNHbG9iYWxPYmplY3QsIEpTUHJvbWlzZSogcHJvbWlzZSwgSlNQcm9t
aXNlUmVqZWN0aW9uT3BlcmF0aW9uIG9wZXJhdGlvbikKIHsKICAgICAvLyBodHRwczovL2h0bWwu
c3BlYy53aGF0d2cub3JnL211bHRpcGFnZS93ZWJhcHBhcGlzLmh0bWwjdGhlLWhvc3Rwcm9taXNl
cmVqZWN0aW9udHJhY2tlci1pbXBsZW1lbnRhdGlvbgpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNET01HbG9iYWxPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5oCShyZXZpc2lvbiAyNzI5MDIpCisrKyBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOC0yMDE4IEFwcGxl
IEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDIxIEFw
cGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtNjksNyArNjksNyBAQCBwdWJsaWM6CiAgICAgLy8gTWFrZSBiaW5kaW5nIGNvZGUg
Z2VuZXJhdGlvbiBlYXNpZXIuCiAgICAgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCgp
IHsgcmV0dXJuIHRoaXM7IH0KIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDOjpK
U0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsK
IAogICAgIERPTVdyYXBwZXJXb3JsZCYgd29ybGQoKSB7IHJldHVybiBtX3dvcmxkLmdldCgpOyB9
CiAgICAgYm9vbCB3b3JsZElzTm9ybWFsKCkgY29uc3QgeyByZXR1cm4gbV93b3JsZElzTm9ybWFs
OyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUd1YXJkZWRPYmplY3Qu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUd1YXJkZWRP
YmplY3QuaAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNET01HdWFyZGVkT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDAsNyArNDAsNyBAQCBwdWJsaWM6
CiAKICAgICBib29sIGlzU3VzcGVuZGVkKCkgY29uc3QgeyByZXR1cm4gIW1fZ3VhcmRlZCB8fCAh
Y2FuSW52b2tlQ2FsbGJhY2soKTsgfSAvLyBUaGUgd3JhcHBlciB3b3JsZCBoYXMgZ29uZSBhd2F5
IG9yIGFjdGl2ZSBET00gb2JqZWN0cyBoYXZlIGJlZW4gc3VzcGVuZGVkLgogCi0gICAgdm9pZCB2
aXNpdEFnZ3JlZ2F0ZShKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKSB7IHZpc2l0b3IuYXBwZW5k
KG1fZ3VhcmRlZCk7IH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIHZpc2l0
QWdncmVnYXRlKFZpc2l0b3ImIHZpc2l0b3IpIHsgdmlzaXRvci5hcHBlbmQobV9ndWFyZGVkKTsg
fQogCiAgICAgSlNDOjpKU1ZhbHVlIGd1YXJkZWRPYmplY3QoKSBjb25zdCB7IHJldHVybiBtX2d1
YXJkZWQuZ2V0KCk7IH0KICAgICBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KCkgY29u
c3QgeyByZXR1cm4gbV9nbG9iYWxPYmplY3QuZ2V0KCk7IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTRE9NUXVhZEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNET01RdWFkQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcyOTAyKQor
KysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01RdWFkQ3VzdG9tLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0zMyw3ICszMyw4IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3Bh
Y2UgSlNDOwogCi12b2lkIEpTRE9NUXVhZDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZp
c2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0RPTVF1
YWQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgdmlz
aXRvci5hZGRPcGFxdWVSb290KGNvbnN0X2Nhc3Q8RE9NUG9pbnQqPigmd3JhcHBlZCgpLnAxKCkp
KTsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QoY29uc3RfY2FzdDxET01Qb2ludCo+KCZ3cmFw
cGVkKCkucDIoKSkpOwpAQCAtNDEsNCArNDIsNiBAQCB2b2lkIEpTRE9NUXVhZDo6dmlzaXRBZGRp
dGlvbmFsQ2hpbGRyZW4oCiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KGNvbnN0X2Nhc3Q8RE9N
UG9pbnQqPigmd3JhcHBlZCgpLnA0KCkpKTsKIH0KIAotfQorREVGSU5FX1ZJU0lUX0FERElUSU9O
QUxfQ0hJTERSRU4oSlNET01RdWFkKTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDog
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dDdXN0b20uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93Q3VzdG9tLmNwcAko
cmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5k
b3dDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAwNy0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAwNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
IENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKQEAgLTExOSw3ICsxMTksOCBAQCBKU0NfREVGSU5FX0NVU1RPTV9HRVRURVIoanNE
T01XaW5kb3dJbnN0CiAgICAgcmV0dXJuIG5vbkNhY2hpbmdTdGF0aWNGdW5jdGlvbkdldHRlcklt
cGw8anNET01XaW5kb3dJbnN0YW5jZUZ1bmN0aW9uX3Bvc3RNZXNzYWdlLCAyPihnbG9iYWxPYmpl
Y3QsIHByb3BlcnR5TmFtZSk7CiB9CiAKLXZvaWQgSlNET01XaW5kb3c6OnZpc2l0QWRkaXRpb25h
bENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRv
cj4KK3ZvaWQgSlNET01XaW5kb3c6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZp
c2l0b3IpCiB7CiAgICAgaWYgKEZyYW1lKiBmcmFtZSA9IHdyYXBwZWQoKS5mcmFtZSgpKQogICAg
ICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QoZnJhbWUpOwpAQCAtMTMyLDYgKzEzMyw4IEBAIHZv
aWQgSlNET01XaW5kb3c6OnZpc2l0QWRkaXRpb25hbENoaWxkcmUKICAgICB3cmFwcGVkKCkudmlz
aXRKU0V2ZW50TGlzdGVuZXJzKHZpc2l0b3IpOwogfQogCitERUZJTkVfVklTSVRfQURESVRJT05B
TF9DSElMRFJFTihKU0RPTVdpbmRvdyk7CisKICNpZiBFTkFCTEUoVVNFUl9NRVNTQUdFX0hBTkRM
RVJTKQogSlNDX0RFRklORV9DVVNUT01fR0VUVEVSKGpzRE9NV2luZG93X3dlYmtpdCwgKEpTR2xv
YmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUs
IFByb3BlcnR5TmFtZSkpCiB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Rl
cHJlY2F0ZWRDU1NPTVZhbHVlQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0RlcHJlY2F0ZWRDU1NPTVZhbHVlQ3VzdG9tLmNwcAkocmV2aXNpb24g
MjcyOTAyKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNEZXByZWNhdGVkQ1NTT01W
YWx1ZUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDA3LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDA3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNSw3ICszNSw3IEBACiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCi1ib29sIEpTRGVwcmVjYXRlZENT
U09NVmFsdWVPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlND
OjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hh
cioqIHJlYXNvbikKK2Jvb2wgSlNEZXByZWNhdGVkQ1NTT01WYWx1ZU93bmVyOjppc1JlYWNoYWJs
ZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCos
IEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCiB7CiAg
ICAgSlNEZXByZWNhdGVkQ1NTT01WYWx1ZSoganNDU1NWYWx1ZSA9IGpzQ2FzdDxKU0RlcHJlY2F0
ZWRDU1NPTVZhbHVlKj4oaGFuZGxlLnNsb3QoKS0+YXNDZWxsKCkpOwogICAgIGlmICghanNDU1NW
YWx1ZS0+aGFzQ3VzdG9tUHJvcGVydGllcyhqc0NTU1ZhbHVlLT52bSgpKSkKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRG9jdW1lbnRDdXN0b20uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRG9jdW1lbnRDdXN0b20uY3BwCShyZXZpc2lv
biAyNzI5MDIpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RvY3VtZW50Q3VzdG9t
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDctMjAwOSwgMjAxMSwgMjAxNiwgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTkxLDExICs5MSwxNCBAQCBKU1ZhbHVlIHRv
SlMoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iCiAgICAgcmV0dXJuIHRvSlNOZXdseUNyZWF0
ZWQobGV4aWNhbEdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LCBSZWY8RG9jdW1lbnQ+KGRvY3Vt
ZW50KSk7CiB9CiAKLXZvaWQgSlNEb2N1bWVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xv
dFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0Rv
Y3VtZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAg
IHZpc2l0b3IuYWRkT3BhcXVlUm9vdChzdGF0aWNfY2FzdDxTY3JpcHRFeGVjdXRpb25Db250ZXh0
Kj4oJndyYXBwZWQoKSkpOwogfQogCitERUZJTkVfVklTSVRfQURESVRJT05BTF9DSElMRFJFTihK
U0RvY3VtZW50KTsKKwogdm9pZCBKU0RvY3VtZW50OjphbmFseXplSGVhcChKU0NlbGwqIGNlbGws
IEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCiB7CiAgICAgQmFzZTo6YW5hbHl6ZUhlYXAoY2VsbCwg
YW5hbHl6ZXIpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFcnJvckV2ZW50
Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Vy
cm9yRXZlbnRDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0Vycm9yRXZlbnRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxOCBZdXN1a2UgU3V6dWtpIDx5dXN1a2Vz
dXp1a2lAc2xvd3N0YXJ0Lm9yZz4uCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0y
OCw5ICsyOSwxMiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgSlNFcnJvckV2ZW50
Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVt
cGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNFcnJvckV2ZW50Ojp2aXNpdEFkZGl0aW9u
YWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHdyYXBwZWQoKS5vcmlnaW5hbEVy
cm9yKCkudmlzaXQodmlzaXRvcik7CiB9CiAKK0RFRklORV9WSVNJVF9BRERJVElPTkFMX0NISUxE
UkVOKEpTRXJyb3JFdmVudCk7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRMaXN0ZW5lci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudExpc3RlbmVyLmNwcAkocmV2aXNpb24g
MjcyOTAyKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudExpc3RlbmVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAy
MDAxIFBldGVyIEtlbGx5IChwbWtAcG9zdC5jb20pCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIw
MTkgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAw
My0yMDIxIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICog
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJs
aWMKQEAgLTc4LDcgKzc4LDggQEAgSlNPYmplY3QqIEpTRXZlbnRMaXN0ZW5lcjo6aW5pdGlhbGl6
ZUpTRgogICAgIHJldHVybiBudWxscHRyOwogfQogCi12b2lkIEpTRXZlbnRMaXN0ZW5lcjo6dmlz
aXRKU0Z1bmN0aW9uKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlz
aXRvcj4KK2lubGluZSB2b2lkIEpTRXZlbnRMaXN0ZW5lcjo6dmlzaXRKU0Z1bmN0aW9uSW1wbChW
aXNpdG9yJiB2aXNpdG9yKQogewogICAgIC8vIElmIG1fd3JhcHBlciBpcyBudWxsLCB3ZSBhcmUg
bm90IGtlZXBpbmcgbV9qc0Z1bmN0aW9uIGFsaXZlLgogICAgIGlmICghbV93cmFwcGVyKQpAQCAt
ODcsNiArODgsOSBAQCB2b2lkIEpTRXZlbnRMaXN0ZW5lcjo6dmlzaXRKU0Z1bmN0aW9uKFNsCiAg
ICAgdmlzaXRvci5hcHBlbmQobV9qc0Z1bmN0aW9uKTsKIH0KIAordm9pZCBKU0V2ZW50TGlzdGVu
ZXI6OnZpc2l0SlNGdW5jdGlvbihBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKSB7IHZpc2l0
SlNGdW5jdGlvbkltcGwodmlzaXRvcik7IH0KK3ZvaWQgSlNFdmVudExpc3RlbmVyOjp2aXNpdEpT
RnVuY3Rpb24oU2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsgdmlzaXRKU0Z1bmN0aW9uSW1wbCh2aXNp
dG9yKTsgfQorCiBzdGF0aWMgdm9pZCBoYW5kbGVCZWZvcmVVbmxvYWRFdmVudFJldHVyblZhbHVl
KEJlZm9yZVVubG9hZEV2ZW50JiBldmVudCwgY29uc3QgU3RyaW5nJiByZXR1cm5WYWx1ZSkKIHsK
ICAgICBpZiAocmV0dXJuVmFsdWUuaXNOdWxsKCkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0V2ZW50TGlzdGVuZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0V2ZW50TGlzdGVuZXIuaAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudExpc3RlbmVyLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsNiArMSw2IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMjAwMSBQZXRlciBLZWxseSAocG1r
QHBvc3QuY29tKQotICogIENvcHlyaWdodCAoQykgMjAwMy0yMDE4IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAyMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCkBAIC02Miw2ICs2Miw5IEBA
IHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICB2aXJ0dWFsIEpTQzo6SlNPYmplY3QqIGluaXRpYWxp
emVKU0Z1bmN0aW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmKSBjb25zdDsKKworICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgdmlzaXRKU0Z1bmN0aW9uSW1wbChWaXNpdG9yJik7
CisgICAgdm9pZCB2aXNpdEpTRnVuY3Rpb24oSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJikgZmlu
YWw7CiAgICAgdm9pZCB2aXNpdEpTRnVuY3Rpb24oSlNDOjpTbG90VmlzaXRvciYpIGZpbmFsOwog
CiBwcm90ZWN0ZWQ6CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50VGFy
Z2V0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0V2ZW50VGFyZ2V0Q3VzdG9tLmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNFdmVudFRhcmdldEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTcgQXBwbGUgSW5jLiBB
bGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMjEgQXBwbGUgSW5j
LiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC03Miw5ICs3MiwxMiBAQCBzdGQ6OnVuaXF1ZV9wdHI8SlNFdmVudFRhcmdldFdyYXBwZXI+IGpz
CiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLXZvaWQgSlNFdmVudFRhcmdldDo6dmlzaXRBZGRp
dGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPgordm9pZCBKU0V2ZW50VGFyZ2V0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNp
dG9yJiB2aXNpdG9yKQogewogICAgIHdyYXBwZWQoKS52aXNpdEpTRXZlbnRMaXN0ZW5lcnModmlz
aXRvcik7CiB9CiAKK0RFRklORV9WSVNJVF9BRERJVElPTkFMX0NISUxEUkVOKEpTRXZlbnRUYXJn
ZXQpOworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0ZldGNoRXZlbnRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTRmV0Y2hFdmVudEN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjkwMikK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRmV0Y2hFdmVudEN1c3RvbS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMzAsMTEgKzMwLDE0IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9p
ZCBKU0ZldGNoRXZlbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3Im
IHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0ZldGNoRXZlbnQ6
OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgdmlzaXRv
ci5hZGRPcGFxdWVSb290KCZ3cmFwcGVkKCkucmVxdWVzdCgpKTsKIH0KIAotfQorREVGSU5FX1ZJ
U0lUX0FERElUSU9OQUxfQ0hJTERSRU4oSlNGZXRjaEV2ZW50KTsKKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQogCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRN
TENhbnZhc0VsZW1lbnRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTSFRNTENhbnZhc0VsZW1lbnRDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI5MDIp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxDYW52YXNFbGVtZW50Q3VzdG9t
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDIwLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC0zMSw5ICszMSwxMiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLXZvaWQgSlNIVE1MQ2FudmFzRWxlbWVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlND
OjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lk
IEpTSFRNTENhbnZhc0VsZW1lbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZp
c2l0b3IpCiB7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHN0YXRpY19jYXN0PENhbnZhc0Jh
c2UqPigmd3JhcHBlZCgpKSk7CiB9CiAKK0RFRklORV9WSVNJVF9BRERJVElPTkFMX0NISUxEUkVO
KEpTSFRNTENhbnZhc0VsZW1lbnQpOworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxUZW1wbGF0ZUVsZW1lbnRDdXN0b20uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTFRlbXBsYXRl
RWxlbWVudEN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTSFRNTFRlbXBsYXRlRWxlbWVudEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQpAQCAt
MzcsMTAgKzM4LDEzIEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2UgSlND
OwogCi12b2lkIEpTSFRNTFRlbXBsYXRlRWxlbWVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4o
SlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2
b2lkIEpTSFRNTFRlbXBsYXRlRWxlbWVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRv
ciYgdmlzaXRvcikKIHsKICAgICBpZiAoYXV0byogY29udGVudCA9IHdyYXBwZWQoKS5jb250ZW50
SWZBdmFpbGFibGUoKSkKICAgICAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHJvb3QoY29udGVu
dCkpOwogfQogCitERUZJTkVfVklTSVRfQURESVRJT05BTF9DSElMRFJFTihKU0hUTUxUZW1wbGF0
ZUVsZW1lbnQpOworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0hpc3RvcnlDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTSGlzdG9yeUN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjkwMikK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSGlzdG9yeUN1c3RvbS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTgg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIw
MjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC00NCw5ICs0NCwxMiBAQCBKU1ZhbHVlIEpTSGlzdG9yeTo6c3RhdGUoSlNH
bG9iYWxPYmplY3QmCiAgICAgfSk7CiB9CiAKLXZvaWQgSlNIaXN0b3J5Ojp2aXNpdEFkZGl0aW9u
YWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0
b3I+Cit2b2lkIEpTSGlzdG9yeTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlz
aXRvcikKIHsKICAgICB3cmFwcGVkKCkuY2FjaGVkU3RhdGVGb3JHQygpLnZpc2l0KHZpc2l0b3Ip
OwogfQogCitERUZJTkVfVklTSVRfQURESVRJT05BTF9DSElMRFJFTihKU0hpc3RvcnkpOworCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0lEQkN1cnNvckN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNJREJDdXJzb3JDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQkN1cnNvckN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
NTAsNyArNTAsOCBAQCBKU0M6OkpTVmFsdWUgSlNJREJDdXJzb3I6OnByaW1hcnlLZXkoSlNDCiAg
ICAgfSk7CiB9CiAKLXZvaWQgSlNJREJDdXJzb3I6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNJ
REJDdXJzb3I6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAg
ICAgYXV0byYgY3Vyc29yID0gd3JhcHBlZCgpOwogICAgIGlmIChhdXRvKiByZXF1ZXN0ID0gY3Vy
c29yLnJlcXVlc3QoKSkKQEAgLTU5LDYgKzYwLDggQEAgdm9pZCBKU0lEQkN1cnNvcjo6dmlzaXRB
ZGRpdGlvbmFsQ2hpbGRyZQogICAgIGN1cnNvci5wcmltYXJ5S2V5V3JhcHBlcigpLnZpc2l0KHZp
c2l0b3IpOwogfQogCitERUZJTkVfVklTSVRfQURESVRJT05BTF9DSElMRFJFTihKU0lEQkN1cnNv
cik7CisKIEpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNE
T01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmPElEQkN1cnNvcj4mJiBjdXJzb3IpCiB7
CiAgICAgaWYgKGlzPElEQkN1cnNvcldpdGhWYWx1ZT4oY3Vyc29yKSkKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCQ3Vyc29yV2l0aFZhbHVlQ3VzdG9tLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQkN1cnNvcldpdGhWYWx1ZUN1
c3RvbS5jcHAJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTSURCQ3Vyc29yV2l0aFZhbHVlQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00MywxMiArNDMs
MTUgQEAgSlNDOjpKU1ZhbHVlIEpTSURCQ3Vyc29yV2l0aFZhbHVlOjp2YWx1ZQogICAgIH0pOwog
fQogCi12b2lkIEpTSURCQ3Vyc29yV2l0aFZhbHVlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihT
bG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpT
SURCQ3Vyc29yV2l0aFZhbHVlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNp
dG9yKQogewogICAgIEpTSURCQ3Vyc29yOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbih2aXNpdG9y
KTsKICAgICB3cmFwcGVkKCkudmFsdWVXcmFwcGVyKCkudmlzaXQodmlzaXRvcik7CiB9CiAKK0RF
RklORV9WSVNJVF9BRERJVElPTkFMX0NISUxEUkVOKEpTSURCQ3Vyc29yV2l0aFZhbHVlKTsKKwog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJB
U0UpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQkluZGV4Q3VzdG9tLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQkluZGV4Q3Vz
dG9tLmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNJREJJbmRleEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzQsMTEgKzM0LDE0IEBACiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCi12b2lkIEpTSURCSW5kZXg6
OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8
dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNJREJJbmRleDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRy
ZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qoc3RhdGlj
X2Nhc3Q8SURCSW5kZXgmPih3cmFwcGVkKCkpLm9iamVjdFN0b3JlQXNPcGFxdWVSb290KCkpOwog
fQogCitERUZJTkVfVklTSVRfQURESVRJT05BTF9DSElMRFJFTihKU0lEQkluZGV4KTsKKwogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0Up
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQk9iamVjdFN0b3JlQ3VzdG9t
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQk9iamVj
dFN0b3JlQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNJREJPYmplY3RTdG9yZUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDEyIE1pY2hhZWwgUHJ1ZXR0IDxtaWNo
YWVsQDY4ay5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQpAQCAtMzYsMTEg
KzM3LDE0IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCi12
b2lkIEpTSURCT2JqZWN0U3RvcmU6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9y
JiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNJREJPYmplY3RT
dG9yZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBz
dGF0aWNfY2FzdDxJREJPYmplY3RTdG9yZSY+KHdyYXBwZWQoKSkudmlzaXRSZWZlcmVuY2VkSW5k
ZXhlcyh2aXNpdG9yKTsKIH0KIAotfQorREVGSU5FX1ZJU0lUX0FERElUSU9OQUxfQ0hJTERSRU4o
SlNJREJPYmplY3RTdG9yZSk7CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQlJlcXVlc3RDdXN0b20uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCUmVxdWVzdEN1c3Rv
bS5jcHAJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
SURCUmVxdWVzdEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxOS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODksMTIgKzg5LDE2IEBAIEpTQzo6
SlNWYWx1ZSBKU0lEQlJlcXVlc3Q6OnJlc3VsdChKU0M6OkoKICAgICB9KTsKIH0KIAotdm9pZCBK
U0lEQlJlcXVlc3Q6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9y
KQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNJREJSZXF1ZXN0Ojp2aXNpdEFk
ZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGF1dG8mIHJlcXVlc3Qg
PSB3cmFwcGVkKCk7CiAgICAgcmVxdWVzdC5yZXN1bHRXcmFwcGVyKCkudmlzaXQodmlzaXRvcik7
CiAgICAgcmVxdWVzdC5jdXJzb3JXcmFwcGVyKCkudmlzaXQodmlzaXRvcik7CiB9CiAKLX0KK0RF
RklORV9WSVNJVF9BRERJVElPTkFMX0NISUxEUkVOKEpTSURCUmVxdWVzdCk7CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKwogI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQpJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJUcmFuc2FjdGlvbkN1c3RvbS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJUcmFuc2FjdGlv
bkN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTSURCVHJhbnNhY3Rpb25DdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM0LDExICszNCwx
NCBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAotdm9pZCBK
U0lEQlRyYW5zYWN0aW9uOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlz
aXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTSURCVHJhbnNhY3Rpb246
OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgc3RhdGlj
X2Nhc3Q8SURCVHJhbnNhY3Rpb24mPih3cmFwcGVkKCkpLnZpc2l0UmVmZXJlbmNlZE9iamVjdFN0
b3Jlcyh2aXNpdG9yKTsKIH0KIAotfQorREVGSU5FX1ZJU0lUX0FERElUSU9OQUxfQ0hJTERSRU4o
SlNJREJUcmFuc2FjdGlvbik7CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0ludGVyc2VjdGlvbk9ic2VydmVyQ3Vz
dG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0ludGVy
c2VjdGlvbk9ic2VydmVyQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNJbnRlcnNlY3Rpb25PYnNlcnZlckN1c3RvbS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDIwIElnYWxp
YSBTLkwuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMCwxMCArMzEsMTMgQEAK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIEpTSW50ZXJzZWN0aW9uT2JzZXJ2ZXI6OnZp
c2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0
ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0ludGVyc2VjdGlvbk9ic2VydmVyOjp2aXNpdEFk
ZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGlmIChhdXRvKiBjYWxs
YmFjayA9IHdyYXBwZWQoKS5jYWxsYmFja0NvbmN1cnJlbnRseSgpKQogICAgICAgICBjYWxsYmFj
ay0+dmlzaXRKU0Z1bmN0aW9uKHZpc2l0b3IpOwogfQogCi19CitERUZJTkVfVklTSVRfQURESVRJ
T05BTF9DSElMRFJFTihKU0ludGVyc2VjdGlvbk9ic2VydmVyKTsKKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJbnRlcnNlY3Rpb25P
YnNlcnZlckVudHJ5Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0ludGVyc2VjdGlvbk9ic2VydmVyRW50cnlDdXN0b20uY3BwCShyZXZpc2lvbiAy
NzI5MDIpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0ludGVyc2VjdGlvbk9ic2Vy
dmVyRW50cnlDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAq
IENvcHlyaWdodCAoQykgMjAxOCBHb29nbGUgTExDLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzAsNyArMzEsOCBAQAogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLXZvaWQgSlNJbnRlcnNlY3Rpb25PYnNlcnZlckVudHJ5Ojp2aXNpdEFkZGl0
aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5h
bWUgVmlzaXRvcj4KK3ZvaWQgSlNJbnRlcnNlY3Rpb25PYnNlcnZlckVudHJ5Ojp2aXNpdEFkZGl0
aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHZpc2l0b3IuYWRkT3BhcXVl
Um9vdChyb290KHdyYXBwZWQoKS50YXJnZXQoKSkpOwogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9v
dCh3cmFwcGVkKCkuYm91bmRpbmdDbGllbnRSZWN0KCkpOwpAQCAtMzgsNCArNDAsNiBAQCB2b2lk
IEpTSW50ZXJzZWN0aW9uT2JzZXJ2ZXJFbnRyeTo6dmlzaXRBCiAgICAgdmlzaXRvci5hZGRPcGFx
dWVSb290KHdyYXBwZWQoKS5yb290Qm91bmRzKCkpOwogfQogCi19CitERUZJTkVfVklTSVRfQURE
SVRJT05BTF9DSElMRFJFTihKU0ludGVyc2VjdGlvbk9ic2VydmVyRW50cnkpOworCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01lc3Nh
Z2VDaGFubmVsQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU01lc3NhZ2VDaGFubmVsQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNZXNzYWdlQ2hhbm5lbEN1c3RvbS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5
IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0y
MDIxIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMzMsNyArMzMsOCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZv
aWQgSlNNZXNzYWdlQ2hhbm5lbDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90Vmlz
aXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTTWVzc2Fn
ZUNoYW5uZWw6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAg
ICAgaWYgKE1lc3NhZ2VQb3J0KiBwb3J0ID0gd3JhcHBlZCgpLnBvcnQxKCkpCiAgICAgICAgIHZp
c2l0b3IuYWRkT3BhcXVlUm9vdChwb3J0KTsKQEAgLTQyLDYgKzQzLDggQEAgdm9pZCBKU01lc3Nh
Z2VDaGFubmVsOjp2aXNpdEFkZGl0aW9uYWxDaAogICAgICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJv
b3QocG9ydCk7CiB9CiAKK0RFRklORV9WSVNJVF9BRERJVElPTkFMX0NISUxEUkVOKEpTTWVzc2Fn
ZUNoYW5uZWwpOworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUo
Q0hBTk5FTF9NRVNTQUdJTkcpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01l
c3NhZ2VFdmVudEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNNZXNzYWdlRXZlbnRDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01lc3NhZ2VFdmVudEN1c3RvbS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxOCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMgYXJlCkBAIC03MCw3ICs3MCw4IEBAIEpTQzo6SlNWYWx1ZSBKU01lc3NhZ2VFdmVudDo6
ZGF0YShKU0M6OkoKICAgICB9KTsKIH0KIAotdm9pZCBKU01lc3NhZ2VFdmVudDo6dmlzaXRBZGRp
dGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVu
YW1lIFZpc2l0b3I+Cit2b2lkIEpTTWVzc2FnZUV2ZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJl
bihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFdURjo6c3dpdGNoT24od3JhcHBlZCgpLmRhdGEo
KSwgWyZ2aXNpdG9yXSAoY29uc3QgSlNWYWx1ZUluV3JhcHBlZE9iamVjdCYgZGF0YSkgewogICAg
ICAgICBkYXRhLnZpc2l0KHZpc2l0b3IpOwpAQCAtODQsNCArODUsNiBAQCB2b2lkIEpTTWVzc2Fn
ZUV2ZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsCiAgICAgd3JhcHBlZCgpLmNhY2hlZFBvcnRzKCku
dmlzaXQodmlzaXRvcik7CiB9CiAKK0RFRklORV9WSVNJVF9BRERJVElPTkFMX0NISUxEUkVOKEpT
TWVzc2FnZUV2ZW50KTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNNZXNzYWdlUG9ydEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNZXNzYWdlUG9ydEN1c3RvbS5jcHAJKHJldmlz
aW9uIDI3MjkwMikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWVzc2FnZVBvcnRD
dXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAwOC0yMDA5LCAyMDE2IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAwOC0yMDIxIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4K
ICAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dApAQCAtMzEsMTEgKzMxLDE0IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCi12b2lkIEpTTWVzc2FnZVBvcnQ6OnZpc2l0QWRkaXRp
b25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlz
aXRvcj4KK3ZvaWQgSlNNZXNzYWdlUG9ydDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRv
ciYgdmlzaXRvcikKIHsKICAgICAvLyBJZiB3ZSBoYXZlIGEgbG9jYWxseSBlbnRhbmdsZWQgcG9y
dCwgd2UgY2FuIGRpcmVjdGx5IG1hcmsgaXQgYXMgcmVhY2hhYmxlLiBQb3J0cyB0aGF0IGFyZSBy
ZW1vdGVseSBlbnRhbmdsZWQgYXJlIG1hcmtlZCBpbi11c2UgYnkgbWFya0FjdGl2ZU9iamVjdHNG
b3JDb250ZXh0KCkuCiAgICAgaWYgKE1lc3NhZ2VQb3J0KiBwb3J0ID0gd3JhcHBlZCgpLmxvY2Fs
bHlFbnRhbmdsZWRQb3J0KCkpCiAgICAgICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChwb3J0KTsK
IH0KIAorREVGSU5FX1ZJU0lUX0FERElUSU9OQUxfQ0hJTERSRU4oSlNNZXNzYWdlUG9ydCk7CisK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTTXV0YXRpb25PYnNlcnZlckN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNNdXRhdGlvbk9ic2VydmVyQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcy
OTAyKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNdXRhdGlvbk9ic2VydmVyQ3Vz
dG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQg
KEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlCkBAIC0zOSwxMiArMzksMTUgQEAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKLXZvaWQgSlNNdXRhdGlvbk9ic2VydmVyOjp2
aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxh
dGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNNdXRhdGlvbk9ic2VydmVyOjp2aXNpdEFkZGl0
aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHdyYXBwZWQoKS5jYWxsYmFj
aygpLnZpc2l0SlNGdW5jdGlvbih2aXNpdG9yKTsKIH0KIAotYm9vbCBKU011dGF0aW9uT2JzZXJ2
ZXJPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtu
b3duPiBoYW5kbGUsIHZvaWQqLCBTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqcmVh
c29uKQorREVGSU5FX1ZJU0lUX0FERElUSU9OQUxfQ0hJTERSRU4oSlNNdXRhdGlvbk9ic2VydmVy
KTsKKworYm9vbCBKU011dGF0aW9uT2JzZXJ2ZXJPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVl
Um9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBBYnN0cmFjdFNs
b3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKipyZWFzb24pCiB7CiAgICAgZm9yIChhdXRv
KiBub2RlIDoganNDYXN0PEpTTXV0YXRpb25PYnNlcnZlcio+KGhhbmRsZS5zbG90KCktPmFzQ2Vs
bCgpKS0+d3JhcHBlZCgpLm9ic2VydmVkTm9kZXMoKSkgewogICAgICAgICBpZiAodmlzaXRvci5j
b250YWluc09wYXF1ZVJvb3Qocm9vdChub2RlKSkpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTTXV0YXRpb25SZWNvcmRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTXV0YXRpb25SZWNvcmRDdXN0b20uY3BwCShyZXZpc2lv
biAyNzI5MDIpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU011dGF0aW9uUmVjb3Jk
Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE4LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMCw5ICszMCwxMiBAQAogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLXZvaWQgSlNNdXRhdGlvblJlY29yZDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4o
SlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2
b2lkIEpTTXV0YXRpb25SZWNvcmQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZp
c2l0b3IpCiB7CiAgICAgd3JhcHBlZCgpLnZpc2l0Tm9kZXNDb25jdXJyZW50bHkodmlzaXRvcik7
CiB9Ci0gICAgCisKK0RFRklORV9WSVNJVF9BRERJVElPTkFMX0NISUxEUkVOKEpTTXV0YXRpb25S
ZWNvcmQpOworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU05hdmlnYXRvckN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNOYXZpZ2F0b3JDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI5MDIp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05hdmlnYXRvckN1c3RvbS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMzIsMTEgKzMyLDE0IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9p
ZCBKU05hdmlnYXRvcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYg
dmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTTmF2aWdhdG9yOjp2
aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHZpc2l0b3Iu
YWRkT3BhcXVlUm9vdChzdGF0aWNfY2FzdDxOYXZpZ2F0b3JCYXNlKj4oJndyYXBwZWQoKSkpOwog
fQogCitERUZJTkVfVklTSVRfQURESVRJT05BTF9DSElMRFJFTihKU05hdmlnYXRvcik7CisKICNp
ZiBFTkFCTEUoTUVESUFfU1RSRUFNKQogSlNDOjpKU1ZhbHVlIEpTTmF2aWdhdG9yOjpnZXRVc2Vy
TWVkaWEoSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpDYWxs
RnJhbWUmIGNhbGxGcmFtZSkKIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
Tm9kZUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNOb2RlQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNOb2RlQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDktMjAxMCwgMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTc0LDcgKzc0LDcgQEAgdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAogdXNpbmcgbmFtZXNwYWNlIEhU
TUxOYW1lczsKIAotc3RhdGljIGlubGluZSBib29sIGlzUmVhY2hhYmxlRnJvbURPTShOb2RlKiBu
b2RlLCBTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikKK3N0YXRpYyBp
bmxpbmUgYm9vbCBpc1JlYWNoYWJsZUZyb21ET00oTm9kZSogbm9kZSwgQWJzdHJhY3RTbG90Vmlz
aXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikKIHsKICAgICBpZiAoIW5vZGUtPmlz
Q29ubmVjdGVkKCkpIHsKICAgICAgICAgaWYgKGlzPEVsZW1lbnQ+KCpub2RlKSkgewpAQCAtMTIz
LDcgKzEyMyw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpc1JlYWNoYWJsZUZyb21ET00oTm8KICAg
ICByZXR1cm4gdmlzaXRvci5jb250YWluc09wYXF1ZVJvb3Qocm9vdChub2RlKSk7CiB9CiAKLWJv
b2wgSlNOb2RlT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpT
Qzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgU2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNo
YXIqKiByZWFzb24pCitib29sIEpTTm9kZU93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290
cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIEFic3RyYWN0U2xvdFZp
c2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCiB7CiAgICAgSlNOb2RlKiBqc05v
ZGUgPSBqc0Nhc3Q8SlNOb2RlKj4oaGFuZGxlLnNsb3QoKS0+YXNDZWxsKCkpOwogICAgIHJldHVy
biBpc1JlYWNoYWJsZUZyb21ET00oJmpzTm9kZS0+d3JhcHBlZCgpLCB2aXNpdG9yLCByZWFzb24p
OwpAQCAtMTM2LDExICsxMzYsMTQgQEAgSlNTY29wZSogSlNOb2RlOjpwdXNoRXZlbnRIYW5kbGVy
U2NvcGUoSgogICAgIHJldHVybiBub2RlOwogfQogCi12b2lkIEpTTm9kZTo6dmlzaXRBZGRpdGlv
bmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNp
dG9yPgordm9pZCBKU05vZGU6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0
b3IpCiB7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHJvb3Qod3JhcHBlZCgpKSk7CiB9CiAK
K0RFRklORV9WSVNJVF9BRERJVElPTkFMX0NISUxEUkVOKEpTTm9kZSk7CisKIHN0YXRpYyBBTFdB
WVNfSU5MSU5FIEpTVmFsdWUgY3JlYXRlV3JhcHBlcklubGluZShKU0dsb2JhbE9iamVjdCogbGV4
aWNhbEdsb2JhbE9iamVjdCwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmPE5v
ZGU+JiYgbm9kZSkKIHsKICAgICBBU1NFUlQoIWdldENhY2hlZFdyYXBwZXIoZ2xvYmFsT2JqZWN0
LT53b3JsZCgpLCBub2RlKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05v
ZGVJdGVyYXRvckN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNOb2RlSXRlcmF0b3JDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVJdGVyYXRvckN1c3RvbS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA4LCAy
MDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAw
Ni0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YwpAQCAtMjUsMTAgKzI1LDEzIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBKU05v
ZGVJdGVyYXRvcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlz
aXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTTm9kZUl0ZXJhdG9yOjp2
aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGlmIChOb2Rl
RmlsdGVyKiBmaWx0ZXIgPSB3cmFwcGVkKCkuZmlsdGVyKCkpCiAgICAgICAgIHZpc2l0b3IuYWRk
T3BhcXVlUm9vdChmaWx0ZXIpOwogfQogCi19CitERUZJTkVfVklTSVRfQURESVRJT05BTF9DSElM
RFJFTihKU05vZGVJdGVyYXRvcik7CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUxpc3RDdXN0b20uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUxpc3RDdXN0b20uY3BwCShyZXZp
c2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVMaXN0Q3Vz
dG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDctMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMDctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM3LDcgKzM3LDcgQEAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKLWJvb2wgSlNOb2RlTGlzdE93bmVyOjppc1Jl
YWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwg
dm9pZCosIFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQorYm9vbCBK
U05vZGVMaXN0T3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpT
Qzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvciwg
Y29uc3QgY2hhcioqIHJlYXNvbikKIHsKICAgICBKU05vZGVMaXN0KiBqc05vZGVMaXN0ID0ganND
YXN0PEpTTm9kZUxpc3QqPihoYW5kbGUuc2xvdCgpLT5hc0NlbGwoKSk7CiAgICAgaWYgKCFqc05v
ZGVMaXN0LT5oYXNDdXN0b21Qcm9wZXJ0aWVzKGpzTm9kZUxpc3QtPnZtKCkpKQpJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNPZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0
MkRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
T2Zmc2NyZWVuQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcy
OTAyKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNPZmZzY3JlZW5DYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTMxLDcgKzMxLDcgQEAgaW5saW5lIHZvaWQqIHJv
b3QoT2Zmc2NyZWVuQ2FudmFzKiBjYW52YQogICAgIHJldHVybiBjYW52YXM7CiB9CiAKLWJvb2wg
SlNPZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRPd25lcjo6aXNSZWFjaGFibGVGcm9t
T3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBTbG90
VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikKK2Jvb2wgSlNPZmZzY3JlZW5D
YW52YXNSZW5kZXJpbmdDb250ZXh0MkRPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMo
SlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBBYnN0cmFjdFNsb3RWaXNp
dG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQogewogICAgIGlmIChVTkxJS0VMWShy
ZWFzb24pKQogICAgICAgICAqcmVhc29uID0gIkNhbnZhcyBpcyBvcGFxdWUgcm9vdCI7CkBAIC00
MSwxMSArNDEsMTQgQEAgYm9vbCBKU09mZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRAog
ICAgIHJldHVybiB2aXNpdG9yLmNvbnRhaW5zT3BhcXVlUm9vdChyb290KTsKIH0KIAotdm9pZCBK
U09mZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRy
ZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9p
ZCBKU09mZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6dmlzaXRBZGRpdGlvbmFsQ2hp
bGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qocm9v
dCgmd3JhcHBlZCgpLmNhbnZhcygpKSk7CiB9CiAKK0RFRklORV9WSVNJVF9BRERJVElPTkFMX0NI
SUxEUkVOKEpTT2Zmc2NyZWVuQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKTsKKwogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQogCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTUGFpbnRSZW5kZXJpbmdDb250ZXh0MkRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUGFpbnRSZW5kZXJpbmdDb250ZXh0MkRDdXN0b20uY3Bw
CShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1BhaW50
UmVuZGVyaW5nQ29udGV4dDJEQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNiw3ICszNiw3IEBA
IGlubGluZSB2b2lkKiByb290KEN1c3RvbVBhaW50Q2FudmFzKiBjYW4KICAgICByZXR1cm4gY2Fu
dmFzOwogfQogCi1ib29sIEpTUGFpbnRSZW5kZXJpbmdDb250ZXh0MkRPd25lcjo6aXNSZWFjaGFi
bGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQq
LCBTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikKK2Jvb2wgSlNQYWlu
dFJlbmRlcmluZ0NvbnRleHQyRE93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6
OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIEFic3RyYWN0U2xvdFZpc2l0b3Im
IHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCiB7CiAgICAgaWYgKFVOTElLRUxZKHJlYXNv
bikpCiAgICAgICAgICpyZWFzb24gPSAiQ2FudmFzIGlzIG9wYXF1ZSByb290IjsKQEAgLTQ2LDEx
ICs0NiwxNCBAQCBib29sIEpTUGFpbnRSZW5kZXJpbmdDb250ZXh0MkRPd25lcjo6aXNSCiAgICAg
cmV0dXJuIHZpc2l0b3IuY29udGFpbnNPcGFxdWVSb290KHJvb3QpOwogfQogCi12b2lkIEpTUGFp
bnRSZW5kZXJpbmdDb250ZXh0MkQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9y
JiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNQYWludFJlbmRl
cmluZ0NvbnRleHQyRDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikK
IHsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qocm9vdCgmd3JhcHBlZCgpLmNhbnZhcygpKSk7
CiB9CiAKK0RFRklORV9WSVNJVF9BRERJVElPTkFMX0NISUxEUkVOKEpTUGFpbnRSZW5kZXJpbmdD
b250ZXh0MkQpOworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAjZW5kaWYKIApJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNQYWludFdvcmtsZXRHbG9iYWxTY29wZUN1c3RvbS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNQYWludFdvcmts
ZXRHbG9iYWxTY29wZUN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTUGFpbnRXb3JrbGV0R2xvYmFsU2NvcGVDdXN0b20uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTMxLDcgKzMxLDggQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVz
cGFjZSBKU0M7CiAKLXZvaWQgSlNQYWludFdvcmtsZXRHbG9iYWxTY29wZTo6dmlzaXRBZGRpdGlv
bmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1l
IFZpc2l0b3I+Cit2b2lkIEpTUGFpbnRXb3JrbGV0R2xvYmFsU2NvcGU6OnZpc2l0QWRkaXRpb25h
bENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9j
ayh3cmFwcGVkKCkucGFpbnREZWZpbml0aW9uTG9jaygpKTsKICAgICBmb3IgKGF1dG8mIHJlZ2lz
dGVyZWQgOiB3cmFwcGVkKCkucGFpbnREZWZpbml0aW9uTWFwKCkudmFsdWVzKCkpIHsKQEAgLTQw
LDUgKzQxLDggQEAgdm9pZCBKU1BhaW50V29ya2xldEdsb2JhbFNjb3BlOjp2aXNpdEFkZAogICAg
IH0KIH0KIAotfQorREVGSU5FX1ZJU0lUX0FERElUSU9OQUxfQ0hJTERSRU4oSlNQYWludFdvcmts
ZXRHbG9iYWxTY29wZSk7CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwogI2VuZGlmCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1BheW1lbnRNZXRob2RDaGFuZ2VFdmVudEN1
c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNQYXlt
ZW50TWV0aG9kQ2hhbmdlRXZlbnRDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1BheW1lbnRNZXRob2RDaGFuZ2VFdmVudEN1c3RvbS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
OC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtNDEsNyArNDEsOCBAQCBKU0M6OkpTVmFsdWUgSlNQYXltZW50TWV0
aG9kQ2hhbmdlRXZlbnQ6CiAgICAgfSk7CiB9CiAKLXZvaWQgSlNQYXltZW50TWV0aG9kQ2hhbmdl
RXZlbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3Ip
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1BheW1lbnRNZXRob2RDaGFuZ2VF
dmVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBX
VEY6OnN3aXRjaE9uKHdyYXBwZWQoKS5tZXRob2REZXRhaWxzKCksIFsmdmlzaXRvcl0oY29uc3Qg
SlNWYWx1ZUluV3JhcHBlZE9iamVjdCYgbWV0aG9kRGV0YWlscykgewogICAgICAgICBtZXRob2RE
ZXRhaWxzLnZpc2l0KHZpc2l0b3IpOwpAQCAtNTEsNiArNTIsOCBAQCB2b2lkIEpTUGF5bWVudE1l
dGhvZENoYW5nZUV2ZW50Ojp2aXNpdEFkCiAgICAgd3JhcHBlZCgpLmNhY2hlZE1ldGhvZERldGFp
bHMoKS52aXNpdCh2aXNpdG9yKTsKIH0KIAorREVGSU5FX1ZJU0lUX0FERElUSU9OQUxfQ0hJTERS
RU4oSlNQYXltZW50TWV0aG9kQ2hhbmdlRXZlbnQpOworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CiAKICNlbmRpZiAvLyBFTkFCTEUoUEFZTUVOVF9SRVFVRVNUKQpJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNQYXltZW50UmVzcG9uc2VDdXN0b20uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUGF5bWVudFJlc3BvbnNlQ3VzdG9tLmNwcAko
cmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNQYXltZW50
UmVzcG9uc2VDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTgtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM3LDExICszNywxNCBAQCBKU0M6OkpT
VmFsdWUgSlNQYXltZW50UmVzcG9uc2U6OmRldGFpbHMoCiAgICAgfSk7CiB9CiAKLXZvaWQgSlNQ
YXltZW50UmVzcG9uc2U6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3Im
IHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1BheW1lbnRSZXNw
b25zZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB3
cmFwcGVkKCkuY2FjaGVkRGV0YWlscygpLnZpc2l0KHZpc2l0b3IpOwogfQogCitERUZJTkVfVklT
SVRfQURESVRJT05BTF9DSElMRFJFTihKU1BheW1lbnRSZXNwb25zZSk7CisKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShQQVlNRU5UX1JFUVVFU1QpCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1BlcmZvcm1hbmNlT2JzZXJ2ZXJDdXN0b20uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUGVyZm9ybWFuY2VP
YnNlcnZlckN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTUGVyZm9ybWFuY2VPYnNlcnZlckN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOC0yMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MzEsMTIgKzMxLDE1IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBKU1BlcmZvcm1h
bmNlT2JzZXJ2ZXI6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZp
c2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1BlcmZvcm1hbmNlT2Jz
ZXJ2ZXI6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAg
d3JhcHBlZCgpLmNhbGxiYWNrKCkudmlzaXRKU0Z1bmN0aW9uKHZpc2l0b3IpOwogfQogCi1ib29s
IEpTUGVyZm9ybWFuY2VPYnNlcnZlck93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhK
U0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIEpTQzo6U2xvdFZpc2l0b3Im
LCBjb25zdCBjaGFyKiogcmVhc29uKQorREVGSU5FX1ZJU0lUX0FERElUSU9OQUxfQ0hJTERSRU4o
SlNQZXJmb3JtYW5jZU9ic2VydmVyKTsKKworYm9vbCBKU1BlcmZvcm1hbmNlT2JzZXJ2ZXJPd25l
cjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBo
YW5kbGUsIHZvaWQqLCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImLCBjb25zdCBjaGFyKiogcmVh
c29uKQogewogICAgIGlmIChVTkxJS0VMWShyZWFzb24pKQogICAgICAgICAqcmVhc29uID0gIlJl
Z2lzdGVyZWQgUGVyZm9ybWFuY2VPYnNlcnZlciBjYWxsYmFjayI7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU1BvcFN0YXRlRXZlbnRDdXN0b20uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUG9wU3RhdGVFdmVudEN1c3RvbS5jcHAJKHJl
dmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUG9wU3RhdGVF
dmVudEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29w
eXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQpAQCAtOTAsOSArOTEsMTIgQEAgSlNWYWx1ZSBKU1Bv
cFN0YXRlRXZlbnQ6OnN0YXRlKEpTR2xvYmFsTwogICAgIHJldHVybiBjYWNoZVN0YXRlKHJlc3Vs
dCk7CiB9CiAKLXZvaWQgSlNQb3BTdGF0ZUV2ZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihK
U0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3Zv
aWQgSlNQb3BTdGF0ZUV2ZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNp
dG9yKQogewogICAgIHdyYXBwZWQoKS5zdGF0ZSgpLnZpc2l0KHZpc2l0b3IpOwogfQogCitERUZJ
TkVfVklTSVRfQURESVRJT05BTF9DSElMRFJFTihKU1BvcFN0YXRlRXZlbnQpOworCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1Byb21p
c2VSZWplY3Rpb25FdmVudEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNQcm9taXNlUmVqZWN0aW9uRXZlbnRDdXN0b20uY3BwCShyZXZpc2lvbiAy
NzI5MDIpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1Byb21pc2VSZWplY3Rpb25F
dmVudEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29w
eXJpZ2h0IChDKSAyMDE4IFl1c3VrZSBTdXp1a2kgPHl1c3VrZXN1enVraUBzbG93c3RhcnQub3Jn
Pi4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMyLDkgKzMzLDEyIEBACiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBKU1Byb21pc2VSZWplY3Rpb25FdmVudDo6dmlzaXRB
ZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5
cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTUHJvbWlzZVJlamVjdGlvbkV2ZW50Ojp2aXNpdEFkZGl0
aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHdyYXBwZWQoKS5yZWFzb24o
KS52aXNpdCh2aXNpdG9yKTsKIH0KIAorREVGSU5FX1ZJU0lUX0FERElUSU9OQUxfQ0hJTERSRU4o
SlNQcm9taXNlUmVqZWN0aW9uRXZlbnQpOworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1Jlc2l6ZU9ic2VydmVyQ3VzdG9tLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1Jlc2l6ZU9ic2VydmVy
Q3VzdG9tLmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNSZXNpemVPYnNlcnZlckN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2
IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDIwIElnYWxpYSBTLkwuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC0zMCwxMSArMzEsMTQgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCi12b2lkIEpTUmVzaXplT2JzZXJ2ZXI6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBK
U1Jlc2l6ZU9ic2VydmVyOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9y
KQogewogICAgIFJlc2l6ZU9ic2VydmVyQ2FsbGJhY2sqIGNhbGxiYWNrID0gd3JhcHBlZCgpLmNh
bGxiYWNrQ29uY3VycmVudGx5KCk7CiAgICAgaWYgKGNhbGxiYWNrKQogICAgICAgICBjYWxsYmFj
ay0+dmlzaXRKU0Z1bmN0aW9uKHZpc2l0b3IpOwogfQogCi19CitERUZJTkVfVklTSVRfQURESVRJ
T05BTF9DSElMRFJFTihKU1Jlc2l6ZU9ic2VydmVyKTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNSZXNpemVPYnNlcnZlckVudHJ5
Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1Jl
c2l6ZU9ic2VydmVyRW50cnlDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU1Jlc2l6ZU9ic2VydmVyRW50cnlDdXN0b20uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxOSBJZ2Fs
aWEgUy5MLgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzAsMTAgKzMxLDEzIEBA
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBKU1Jlc2l6ZU9ic2VydmVyRW50cnk6OnZp
c2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0
ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1Jlc2l6ZU9ic2VydmVyRW50cnk6OnZpc2l0QWRk
aXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgdmlzaXRvci5hZGRPcGFx
dWVSb290KHJvb3Qod3JhcHBlZCgpLnRhcmdldCgpKSk7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVS
b290KHdyYXBwZWQoKS5jb250ZW50UmVjdCgpKTsKIH0KIAotfQorREVGSU5FX1ZJU0lUX0FERElU
SU9OQUxfQ0hJTERSRU4oSlNSZXNpemVPYnNlcnZlckVudHJ5KTsKKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNTVkdWaWV3U3BlY0N1
c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNTVkdW
aWV3U3BlY0N1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTU1ZHVmlld1NwZWNDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMwLDEwICsz
MCwxMyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgSlNTVkdWaWV3U3BlYzo6dmlz
aXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRl
PHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTU1ZHVmlld1NwZWM6OnZpc2l0QWRkaXRpb25hbENo
aWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgQVNTRVJUKHdyYXBwZWQoKS5jb250ZXh0
RWxlbWVudENvbmN1cnJlbnRseSgpLmdldCgpKTsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qo
cm9vdCh3cmFwcGVkKCkuY29udGV4dEVsZW1lbnRDb25jdXJyZW50bHkoKS5nZXQoKSkpOwogfQog
Ci19CitERUZJTkVfVklTSVRfQURESVRJT05BTF9DSElMRFJFTihKU1NWR1ZpZXdTcGVjKTsKKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNTZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGVDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU2VydmljZVdvcmtlckdsb2JhbFNjb3BlQ3VzdG9tLmNw
cAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNTZXJ2
aWNlV29ya2VyR2xvYmFsU2NvcGVDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM0LDEyICszNCwx
NSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKLXZvaWQg
SlNTZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGU6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNTZXJ2
aWNlV29ya2VyR2xvYmFsU2NvcGU6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZp
c2l0b3IpCiB7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KCZ3cmFwcGVkKCkuY2xpZW50cygp
KTsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QoJndyYXBwZWQoKS5yZWdpc3RyYXRpb24oKSk7
CiB9CiAKK0RFRklORV9WSVNJVF9BRERJVElPTkFMX0NISUxEUkVOKEpTU2VydmljZVdvcmtlckds
b2JhbFNjb3BlKTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU3RhdGljUmFuZ2VDdXN0b20uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU3RhdGljUmFuZ2VDdXN0b20uY3Bw
CShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1N0YXRp
Y1JhbmdlQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsOSArMzAsMTIgQEAKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIEpTU3RhdGljUmFuZ2U6OnZpc2l0QWRkaXRpb25hbENo
aWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNp
dG9yPgordm9pZCBKU1N0YXRpY1JhbmdlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9y
JiB2aXNpdG9yKQogewogICAgIHdyYXBwZWQoKS52aXNpdE5vZGVzQ29uY3VycmVudGx5KHZpc2l0
b3IpOwogfQogCitERUZJTkVfVklTSVRfQURESVRJT05BTF9DSElMRFJFTihKU1N0YXRpY1Jhbmdl
KTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNTdHlsZVNoZWV0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU1N0eWxlU2hlZXRDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI5MDIpCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1N0eWxlU2hlZXRDdXN0b20uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNywgMjAw
OCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTMwLDExICszMCwxNCBAQAogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLXZvaWQgSlNTdHlsZVNoZWV0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNs
b3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNT
dHlsZVNoZWV0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewog
ICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChyb290KCZ3cmFwcGVkKCkpKTsKIH0KIAorREVGSU5F
X1ZJU0lUX0FERElUSU9OQUxfQ0hJTERSRU4oSlNTdHlsZVNoZWV0KTsKKwogSlNDOjpKU1ZhbHVl
IHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTRE9NR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIFJlZjxTdHlsZVNoZWV0PiYmIHN0eWxlU2hlZXQpCiB7CiAgICAgaWYg
KHN0eWxlU2hlZXQtPmlzQ1NTU3R5bGVTaGVldCgpKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNUZXh0VHJhY2tDdWVDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTVGV4dFRyYWNrQ3VlQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcy
OTAyKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNUZXh0VHJhY2tDdWVDdXN0b20u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTEtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTM4LDcgKzM4LDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVz
aW5nIG5hbWVzcGFjZSBKU0M7CiAKLWJvb2wgSlNUZXh0VHJhY2tDdWVPd25lcjo6aXNSZWFjaGFi
bGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQq
LCBTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikKK2Jvb2wgSlNUZXh0
VHJhY2tDdWVPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlND
OjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBj
b25zdCBjaGFyKiogcmVhc29uKQogewogICAgIEpTVGV4dFRyYWNrQ3VlKiBqc1RleHRUcmFja0N1
ZSA9IGpzQ2FzdDxKU1RleHRUcmFja0N1ZSo+KGhhbmRsZS5zbG90KCktPmFzQ2VsbCgpKTsKICAg
ICBUZXh0VHJhY2tDdWUmIHRleHRUcmFja0N1ZSA9IGpzVGV4dFRyYWNrQ3VlLT53cmFwcGVkKCk7
CkBAIC04MiwxMiArODIsMTUgQEAgSlNWYWx1ZSB0b0pTKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2Fs
R2xvYgogICAgIHJldHVybiB3cmFwKGxleGljYWxHbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdCwg
Y3VlKTsKIH0KIAotdm9pZCBKU1RleHRUcmFja0N1ZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4o
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBK
U1RleHRUcmFja0N1ZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikK
IHsKICAgICBpZiAoVGV4dFRyYWNrKiB0ZXh0VHJhY2sgPSB3cmFwcGVkKCkudHJhY2soKSkKICAg
ICAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHJvb3QodGV4dFRyYWNrKSk7CiB9CiAKK0RFRklO
RV9WSVNJVF9BRERJVElPTkFMX0NISUxEUkVOKEpTVGV4dFRyYWNrQ3VlKTsKKwogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQogCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTVGV4dFRyYWNrQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU1RleHRUcmFja0N1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVGV4dFRyYWNrQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0zNiwxMSArMzYsMTQgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBK
U0M7CiAKLXZvaWQgSlNUZXh0VHJhY2s6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNp
dG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNUZXh0VHJh
Y2s6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgdmlz
aXRvci5hZGRPcGFxdWVSb290KHJvb3QoJndyYXBwZWQoKSkpOwogfQogCitERUZJTkVfVklTSVRf
QURESVRJT05BTF9DSElMRFJFTihKU1RleHRUcmFjayk7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKIAogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1RleHRUcmFj
a0xpc3RDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTVGV4dFRyYWNrTGlzdEN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTVGV4dFRyYWNrTGlzdEN1c3RvbS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDIxIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtMzYsMTEgKzM2LDE0IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2Ug
SlNDOwogCi12b2lkIEpTVGV4dFRyYWNrTGlzdDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlND
OjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lk
IEpTVGV4dFRyYWNrTGlzdDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRv
cikKIHsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qocm9vdCh3cmFwcGVkKCkuZWxlbWVudCgp
KSk7CiB9CiAgICAgCitERUZJTkVfVklTSVRfQURESVRJT05BTF9DSElMRFJFTihKU1RleHRUcmFj
a0xpc3QpOworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZgpJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNUcmVlV2Fsa2VyQ3VzdG9tLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1RyZWVXYWxrZXJDdXN0b20uY3BwCShyZXZp
c2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1RyZWVXYWxrZXJD
dXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAwNiwgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI1LDEwICsyNSwxMyBAQAogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLXZvaWQgSlNUcmVlV2Fsa2VyOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6
OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQg
SlNUcmVlV2Fsa2VyOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQog
ewogICAgIGlmIChOb2RlRmlsdGVyKiBmaWx0ZXIgPSB3cmFwcGVkKCkuZmlsdGVyKCkpCiAgICAg
ICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChmaWx0ZXIpOwogfQogCi19CitERUZJTkVfVklTSVRf
QURESVRJT05BTF9DSElMRFJFTihKU1RyZWVXYWxrZXIpOworCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1VuZG9JdGVtQ3VzdG9tLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1VuZG9JdGVtQ3Vz
dG9tLmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNVbmRvSXRlbUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxOS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjksMTMgKzI5LDE2IEBACiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBKU1VuZG9JdGVtOjp2aXNpdEFkZGl0aW9uYWxDaGls
ZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRv
cj4KK3ZvaWQgSlNVbmRvSXRlbTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlz
aXRvcikKIHsKICAgICB3cmFwcGVkKCkudW5kb0hhbmRsZXIoKS52aXNpdEpTRnVuY3Rpb24odmlz
aXRvcik7CiAgICAgd3JhcHBlZCgpLnJlZG9IYW5kbGVyKCkudmlzaXRKU0Z1bmN0aW9uKHZpc2l0
b3IpOwogfQogCi1ib29sIEpTVW5kb0l0ZW1Pd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9v
dHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBKU0M6OlNsb3RWaXNp
dG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQorREVGSU5FX1ZJU0lUX0FERElUSU9O
QUxfQ0hJTERSRU4oSlNVbmRvSXRlbSk7CisKK2Jvb2wgSlNVbmRvSXRlbU93bmVyOjppc1JlYWNo
YWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9p
ZCosIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNv
bikKIHsKICAgICBpZiAoVU5MSUtFTFkocmVhc29uKSkKICAgICAgICAgKnJlYXNvbiA9ICJEb2N1
bWVudCBpcyBhbiBvcGFxdWUgcm9vdC4iOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNWYWx1ZUluV3JhcHBlZE9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTVmFsdWVJbldyYXBwZWRPYmplY3QuaAkocmV2aXNpb24gMjcyOTAyKQor
KysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNWYWx1ZUluV3JhcHBlZE9iamVjdC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC00MCw3ICs0MCw3IEBAIHB1YmxpYzoKICAgICBvcGVyYXRvciBKU0M6OkpTVmFs
dWUoKSBjb25zdDsKICAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3Q7CiAgICAgSlNW
YWx1ZUluV3JhcHBlZE9iamVjdCYgb3BlcmF0b3I9KGNvbnN0IEpTVmFsdWVJbldyYXBwZWRPYmpl
Y3QmIG90aGVyKTsKLSAgICB2b2lkIHZpc2l0KEpTQzo6U2xvdFZpc2l0b3ImKSBjb25zdDsKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIHZpc2l0KFZpc2l0b3ImKSBjb25zdDsK
ICAgICB2b2lkIGNsZWFyKCk7CiAKIHByaXZhdGU6CkBAIC05OCw3ICs5OCw4IEBAIGlubGluZSBK
U1ZhbHVlSW5XcmFwcGVkT2JqZWN0JiBKU1ZhbHVlSW4KICAgICByZXR1cm4gKnRoaXM7CiB9CiAK
LWlubGluZSB2b2lkIEpTVmFsdWVJbldyYXBwZWRPYmplY3Q6OnZpc2l0KEpTQzo6U2xvdFZpc2l0
b3ImIHZpc2l0b3IpIGNvbnN0Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgoraW5saW5lIHZv
aWQgSlNWYWx1ZUluV3JhcHBlZE9iamVjdDo6dmlzaXQoVmlzaXRvciYgdmlzaXRvcikgY29uc3QK
IHsKICAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbihtX3ZhbHVlLCBbXSAoSlNDOjpKU1ZhbHVlKSB7
CiAgICAgICAgIC8vIE5vdGhpbmcgdG8gdmlzaXQuCkBAIC0xMDcsNiArMTA4LDkgQEAgaW5saW5l
IHZvaWQgSlNWYWx1ZUluV3JhcHBlZE9iamVjdDo6dmlzaQogICAgIH0pOwogfQogCit0ZW1wbGF0
ZSB2b2lkIEpTVmFsdWVJbldyYXBwZWRPYmplY3Q6OnZpc2l0KEpTQzo6QWJzdHJhY3RTbG90Vmlz
aXRvciYpIGNvbnN0OwordGVtcGxhdGUgdm9pZCBKU1ZhbHVlSW5XcmFwcGVkT2JqZWN0Ojp2aXNp
dChKU0M6OlNsb3RWaXNpdG9yJikgY29uc3Q7CisKIGlubGluZSB2b2lkIEpTVmFsdWVJbldyYXBw
ZWRPYmplY3Q6OmNsZWFyKCkKIHsKICAgICBXVEY6OnN3aXRjaE9uKG1fdmFsdWUsIFtdIChXZWFr
JiB2YWx1ZSkgewpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNWaWRlb1RyYWNr
Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1Zp
ZGVvVHJhY2tDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU1ZpZGVvVHJhY2tDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM1LDExICsz
NSwxNCBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAotdm9p
ZCBKU1ZpZGVvVHJhY2s6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNp
dG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNWaWRlb1RyYWNrOjp2aXNp
dEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHZpc2l0b3IuYWRk
T3BhcXVlUm9vdChyb290KCZ3cmFwcGVkKCkpKTsKIH0KIAorREVGSU5FX1ZJU0lUX0FERElUSU9O
QUxfQ0hJTERSRU4oSlNWaWRlb1RyYWNrKTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAj
ZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVmlkZW9UcmFja0xpc3RD
dXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVmlk
ZW9UcmFja0xpc3RDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU1ZpZGVvVHJhY2tMaXN0Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0z
NSwxMSArMzUsMTQgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBKU0M7
CiAKLXZvaWQgSlNWaWRlb1RyYWNrTGlzdDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZp
c2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1ZpZGVv
VHJhY2tMaXN0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewog
ICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChyb290KHdyYXBwZWQoKS5lbGVtZW50KCkpKTsKIH0K
IAorREVGSU5FX1ZJU0lUX0FERElUSU9OQUxfQ0hJTERSRU4oSlNWaWRlb1RyYWNrTGlzdCk7CisK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU1dlYkdMMlJlbmRlcmluZ0NvbnRleHRDdXN0b20uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViR0wyUmVuZGVyaW5nQ29udGV4dEN1
c3RvbS5jcHAJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTV2ViR0wyUmVuZGVyaW5nQ29udGV4dEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0z
MywxMiArMzMsMTUgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBKU0M7
CiAKLXZvaWQgSlNXZWJHTDJSZW5kZXJpbmdDb250ZXh0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJl
bihTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lk
IEpTV2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRv
ciYgdmlzaXRvcikKIHsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QoJndyYXBwZWQoKSk7CiAg
ICAgd3JhcHBlZCgpLmFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKHZpc2l0b3IpOwogfQogCitERUZJ
TkVfVklTSVRfQURESVRJT05BTF9DSElMRFJFTihKU1dlYkdMMlJlbmRlcmluZ0NvbnRleHQpOwor
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoV0VCR0wpCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYkdMUmVuZGVyaW5nQ29udGV4dEN1c3Rv
bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJHTFJl
bmRlcmluZ0NvbnRleHRDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU1dlYkdMUmVuZGVyaW5nQ29udGV4dEN1c3RvbS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMzMsMTIgKzMzLDE1IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1l
c3BhY2UgSlNDOwogCi12b2lkIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2aXNpdEFkZGl0aW9u
YWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0
b3I+Cit2b2lkIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJl
bihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdCgmd3JhcHBl
ZCgpKTsKICAgICB3cmFwcGVkKCkuYWRkTWVtYmVyc1RvT3BhcXVlUm9vdHModmlzaXRvcik7CiB9
CiAKK0RFRklORV9WSVNJVF9BRERJVElPTkFMX0NISUxEUkVOKEpTV2ViR0xSZW5kZXJpbmdDb250
ZXh0KTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQkdM
KQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrZXJHbG9iYWxTY29wZUJh
c2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2Vy
R2xvYmFsU2NvcGVCYXNlLmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNXb3JrZXJHbG9iYWxTY29wZUJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSwgMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29v
Z2xlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTkyLDcg
KzkyLDggQEAgdm9pZCBKU1dvcmtlckdsb2JhbFNjb3BlQmFzZTo6ZmluaXNoQ3JlYQogICAgIEFT
U0VSVChpbmhlcml0cyh2bSwgaW5mbygpKSk7CiB9CiAKLXZvaWQgSlNXb3JrZXJHbG9iYWxTY29w
ZUJhc2U6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikK
K3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTV29ya2VyR2xvYmFsU2NvcGVCYXNl
Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAg
ICAgSlNXb3JrZXJHbG9iYWxTY29wZUJhc2UqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNXb3JrZXJH
bG9iYWxTY29wZUJhc2UqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRo
aXNPYmplY3QsIGluZm8oKSk7CkBAIC0xMDAsNiArMTAxLDggQEAgdm9pZCBKU1dvcmtlckdsb2Jh
bFNjb3BlQmFzZTo6dmlzaXRDaGlsZAogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1f
cHJveHkpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNXb3JrZXJHbG9iYWxTY29wZUJh
c2UpOworCiB2b2lkIEpTV29ya2VyR2xvYmFsU2NvcGVCYXNlOjpkZXN0cm95KEpTQ2VsbCogY2Vs
bCkKIHsKICAgICBzdGF0aWNfY2FzdDxKU1dvcmtlckdsb2JhbFNjb3BlQmFzZSo+KGNlbGwpLT5K
U1dvcmtlckdsb2JhbFNjb3BlQmFzZTo6fkpTV29ya2VyR2xvYmFsU2NvcGVCYXNlKCk7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckdsb2JhbFNjb3BlQmFzZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyR2xvYmFsU2Nv
cGVCYXNlLmgJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTV29ya2VyR2xvYmFsU2NvcGVCYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNzksNyArNzks
NyBAQCBwcm90ZWN0ZWQ6CiAgICAgSlNXb3JrZXJHbG9iYWxTY29wZUJhc2UoSlNDOjpWTSYsIEpT
Qzo6U3RydWN0dXJlKiwgUmVmUHRyPFdvcmtlckdsb2JhbFNjb3BlPiYmKTsKICAgICB2b2lkIGZp
bmlzaENyZWF0aW9uKEpTQzo6Vk0mLCBKU0M6OkpTUHJveHkqKTsKIAotICAgIHN0YXRpYyB2b2lk
IHZpc2l0Q2hpbGRyZW4oSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJik7CisgICAgREVD
TEFSRV9WSVNJVF9DSElMRFJFTjsKIAogcHJpdmF0ZToKICAgICBSZWZQdHI8V29ya2VyR2xvYmFs
U2NvcGU+IG1fd3JhcHBlZDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29y
a2VyR2xvYmFsU2NvcGVDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTV29ya2VyR2xvYmFsU2NvcGVDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI5MDIp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckdsb2JhbFNjb3BlQ3VzdG9t
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDgtMjAwOSwgMjAxMSwgMjAxNiBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAyMSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMzLDcgKzMzLDggQEAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKLXZvaWQgSlNXb3JrZXJHbG9i
YWxTY29wZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0
ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1dvcmtlckdsb2JhbFNjb3BlOjp2aXNp
dEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGlmIChhdXRvKiBs
b2NhdGlvbiA9IHdyYXBwZWQoKS5vcHRpb25hbExvY2F0aW9uKCkpCiAgICAgICAgIHZpc2l0b3Iu
YWRkT3BhcXVlUm9vdChsb2NhdGlvbik7CkBAIC00OCw2ICs0OSw4IEBAIHZvaWQgSlNXb3JrZXJH
bG9iYWxTY29wZTo6dmlzaXRBZGRpdGlvbmEKICAgICB3cmFwcGVkKCkudmlzaXRKU0V2ZW50TGlz
dGVuZXJzKHZpc2l0b3IpOwogfQogCitERUZJTkVfVklTSVRfQURESVRJT05BTF9DSElMRFJFTihK
U1dvcmtlckdsb2JhbFNjb3BlKTsKKwogSlNWYWx1ZSBKU1dvcmtlckdsb2JhbFNjb3BlOjpxdWV1
ZU1pY3JvdGFzayhKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZyYW1l
JiBjYWxsRnJhbWUpCiB7CiAgICAgVk0mIHZtID0gbGV4aWNhbEdsb2JhbE9iamVjdC52bSgpOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrZXJOYXZpZ2F0b3JDdXN0b20u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyTmF2
aWdhdG9yQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNXb3JrZXJOYXZpZ2F0b3JDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI4LDkg
KzI4LDEyIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBKU1dvcmtlck5hdmlnYXRv
cjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3Rl
bXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTV29ya2VyTmF2aWdhdG9yOjp2aXNpdEFk
ZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHZpc2l0b3IuYWRkT3Bh
cXVlUm9vdChzdGF0aWNfY2FzdDxOYXZpZ2F0b3JCYXNlKj4oJndyYXBwZWQoKSkpOwogfQogCi19
CitERUZJTkVfVklTSVRfQURESVRJT05BTF9DSElMRFJFTihKU1dvcmtlck5hdmlnYXRvcik7CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTV29ya2xldEdsb2JhbFNjb3BlQmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNXb3JrbGV0R2xvYmFsU2NvcGVCYXNlLmNwcAkocmV2aXNpb24gMjcy
OTAyKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrbGV0R2xvYmFsU2NvcGVC
YXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE4LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC04Miw3ICs4Miw4IEBAIHZvaWQgSlNXb3JrbGV0R2xvYmFs
U2NvcGVCYXNlOjpmaW5pc2hDcmUKICAgICBBU1NFUlQoaW5oZXJpdHModm0sIGluZm8oKSkpOwog
fQogCi12b2lkIEpTV29ya2xldEdsb2JhbFNjb3BlQmFzZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwq
IGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4K
K3ZvaWQgSlNXb3JrbGV0R2xvYmFsU2NvcGVCYXNlOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwq
IGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2Fz
dDxKU1dvcmtsZXRHbG9iYWxTY29wZUJhc2UqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNU
X0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC05MCw2ICs5MSw4IEBAIHZvaWQgSlNX
b3JrbGV0R2xvYmFsU2NvcGVCYXNlOjp2aXNpdENoaWwKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlz
T2JqZWN0LT5tX3Byb3h5KTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTV29ya2xldEds
b2JhbFNjb3BlQmFzZSk7CisKIHZvaWQgSlNXb3JrbGV0R2xvYmFsU2NvcGVCYXNlOjpkZXN0cm95
KEpTQ2VsbCogY2VsbCkKIHsKICAgICBzdGF0aWNfY2FzdDxKU1dvcmtsZXRHbG9iYWxTY29wZUJh
c2UqPihjZWxsKS0+SlNXb3JrbGV0R2xvYmFsU2NvcGVCYXNlOjp+SlNXb3JrbGV0R2xvYmFsU2Nv
cGVCYXNlKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtsZXRHbG9i
YWxTY29wZUJhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U1dvcmtsZXRHbG9iYWxTY29wZUJhc2UuaAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNXb3JrbGV0R2xvYmFsU2NvcGVCYXNlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOC0yMDIxIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtNjcsNyArNjcsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgSlNXb3JrbGV0R2xvYmFsU2NvcGVCYXNl
KEpTQzo6Vk0mLCBKU0M6OlN0cnVjdHVyZSosIFJlZlB0cjxXb3JrbGV0R2xvYmFsU2NvcGU+JiYp
OwogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYsIEpTQzo6SlNQcm94eSopOwogCi0g
ICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0
b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiBwcml2YXRlOgogICAgIFJlZlB0
cjxXb3JrbGV0R2xvYmFsU2NvcGU+IG1fd3JhcHBlZDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTWE1MSHR0cFJlcXVlc3RDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTWE1MSHR0cFJlcXVlc3RDdXN0b20uY3BwCShyZXZpc2lv
biAyNzI5MDIpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1hNTEh0dHBSZXF1ZXN0
Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDA4LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00MSw3ICs0MSw4IEBACiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCi12b2lkIEpTWE1MSHR0cFJlcXVlc3Q6
OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8
dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNYTUxIdHRwUmVxdWVzdDo6dmlzaXRBZGRpdGlvbmFs
Q2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBpZiAoYXV0byogdXBsb2FkID0gd3Jh
cHBlZCgpLm9wdGlvbmFsVXBsb2FkKCkpCiAgICAgICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdCh1
cGxvYWQpOwpAQCAtNTAsNiArNTEsOCBAQCB2b2lkIEpTWE1MSHR0cFJlcXVlc3Q6OnZpc2l0QWRk
aXRpb25hbENoCiAgICAgICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChyZXNwb25zZURvY3VtZW50
KTsKIH0KIAorREVGSU5FX1ZJU0lUX0FERElUSU9OQUxfQ0hJTERSRU4oSlNYTUxIdHRwUmVxdWVz
dCk7CisKIEpTVmFsdWUgSlNYTUxIdHRwUmVxdWVzdDo6cmVzcG9uc2UoSlNHbG9iYWxPYmplY3Qm
IGxleGljYWxHbG9iYWxPYmplY3QpIGNvbnN0CiB7CiAgICAgYXV0byBjYWNoZVJlc3VsdCA9IFsm
XSAoSlNWYWx1ZSB2YWx1ZSkgLT4gSlNWYWx1ZSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU1hQYXRoUmVzdWx0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU1hQYXRoUmVzdWx0Q3VzdG9tLmNwcAkocmV2aXNpb24gMjcyOTAy
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNYUGF0aFJlc3VsdEN1c3RvbS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDEx
IEp1bGllbiBDaGFmZnJhaXggPGpjaGFmZnJhaXhAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAo
QykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTMxLDcgKzMyLDggQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci12b2lkIEpTWFBhdGhSZXN1bHQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZp
c2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1hQYXRo
UmVzdWx0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAg
IGF1dG8mIHZhbHVlID0gd3JhcHBlZCgpLnZhbHVlKCk7CiAgICAgaWYgKHZhbHVlLmlzTm9kZVNl
dCgpKSB7CkBAIC00MSw0ICs0Myw2IEBAIHZvaWQgSlNYUGF0aFJlc3VsdDo6dmlzaXRBZGRpdGlv
bmFsQ2hpbGQKICAgICB9CiB9CiAKK0RFRklORV9WSVNJVF9BRERJVElPTkFMX0NISUxEUkVOKEpT
WFBhdGhSZXN1bHQpOworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dlYkNvcmVUeXBlZEFycmF5Q29udHJv
bGxlci5jcHAJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L1dlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTYsNyArNTYs
NyBAQCBib29sIFdlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlcjo6aXNBdG9tCiAgICAgcmV0dXJu
IG1fYWxsb3dBdG9taWNzV2FpdDsKIH0KIAotYm9vbCBXZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xs
ZXI6OkpTQXJyYXlCdWZmZXJPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpI
YW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBKU0M6OlNsb3RWaXNpdG9yJiB2aXNp
dG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQorYm9vbCBXZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xs
ZXI6OkpTQXJyYXlCdWZmZXJPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpI
YW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0
b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCiB7CiAgICAgaWYgKFVOTElLRUxZKHJl
YXNvbikpCiAgICAgICAgICpyZWFzb24gPSAiQXJyYXlCdWZmZXIgaXMgb3BhcXVlIHJvb3QiOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV2ViQ29yZVR5cGVkQXJyYXlDb250cm9s
bGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV2ViQ29yZVR5
cGVkQXJyYXlDb250cm9sbGVyLmgJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL1dlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlci5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTQ4LDcgKzQ4LDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBjbGFzcyBKU0FycmF5QnVmZmVy
T3duZXIgOiBwdWJsaWMgSlNDOjpXZWFrSGFuZGxlT3duZXIgewogICAgIHB1YmxpYzoKLSAgICAg
ICAgYm9vbCBpc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25v
d24+LCB2b2lkKiBjb250ZXh0LCBKU0M6OlNsb3RWaXNpdG9yJiwgY29uc3QgY2hhcioqKSBvdmVy
cmlkZTsKKyAgICAgICAgYm9vbCBpc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRs
ZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0LCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3Im
LCBjb25zdCBjaGFyKiopIG92ZXJyaWRlOwogICAgICAgICB2b2lkIGZpbmFsaXplKEpTQzo6SGFu
ZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQpIG92ZXJyaWRlOwogICAgIH07CiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRv
ckpTLnBtCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL0NvZGVHZW5lcmF0b3JKUy5wbQkod29ya2luZyBjb3B5KQpAQCAtMyw3ICszLDcgQEAKICMg
Q29weXJpZ2h0IChDKSAyMDA2IEFuZGVycyBDYXJsc3NvbiA8YW5kZXJzY2FAbWFjLmNvbT4KICMg
Q29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IFNhbXVlbCBXZWluaWcgPHNhbUB3ZWJraXQub3JnPgog
IyBDb3B5cmlnaHQgKEMpIDIwMDYgQWxleGV5IFByb3NrdXJ5YWtvdiA8YXBAd2Via2l0Lm9yZz4K
LSMgQ29weXJpZ2h0IChDKSAyMDA2LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorIyBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAjIENvcHlyaWdodCAoQykgMjAwOSBDYW1lcm9uIE1jQ29ybWFjayA8Y2FtQG1jYy5pZC5h
dT4KICMgQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogIyBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24g
YW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCkBAIC0zMDc4LDggKzMwNzgsOCBAQCBzdWIgR2Vu
ZXJhdGVIZWFkZXIKIAogICAgICMgdmlzaXQgZnVuY3Rpb24KICAgICBpZiAoJG5lZWRzVmlzaXRD
aGlsZHJlbikgewotICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHN0YXRpYyB2b2lk
IHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpO1xuIik7Ci0gICAgICAg
IHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgdm9pZCB2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihK
U0M6OlNsb3RWaXNpdG9yJik7XG4iKSBpZiAkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMt
PntKU0N1c3RvbU1hcmtGdW5jdGlvbn07CisgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIg
ICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjtcbiIpOworICAgICAgICBwdXNoKEBoZWFkZXJDb250
ZW50LCAiICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgdmlzaXRBZGRpdGlvbmFs
Q2hpbGRyZW4oVmlzaXRvciYpO1xuIikgaWYgJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVz
LT57SlNDdXN0b21NYXJrRnVuY3Rpb259OwogICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAi
XG4iKTsKIAogICAgICAgICBpZiAoJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57SlND
dXN0b21NYXJrRnVuY3Rpb259KSB7CkBAIC0zMDk0LDcgKzMwOTQsNyBAQCBzdWIgR2VuZXJhdGVI
ZWFkZXIKICAgICAgICAgICAgICMgdGhhdCB0aGUgR0MgY2FsbHMgdG8gYXNrIGFuIG9iamVjdCBp
cyBpdCB3b3VsZCBsaWtlIHRvIG1hcmsgYW55dGhpbmcgZWxzZSBhZnRlciB0aGUKICAgICAgICAg
ICAgICMgcHJvZ3JhbSByZXN1bWVkIHNpbmNlIHRoZSBsYXN0IGNhbGwgdG8gdmlzaXRDaGlsZHJl
biBvciB2aXNpdE91dHB1dENvbnN0cmFpbnRzLiBTaW5jZQogICAgICAgICAgICAgIyB0aGlzIGp1
c3QgY2FsbHMgdmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4sIHlvdSB1c3VhbGx5IGRvbid0IGhhdmUg
dG8gd29ycnkgYWJvdXQgdGhpcy4KLSAgICAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIg
ICAgc3RhdGljIHZvaWQgdmlzaXRPdXRwdXRDb25zdHJhaW50cyhKU0NlbGwqLCBKU0M6OlNsb3RW
aXNpdG9yJik7XG4iKTsKKyAgICAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgdGVt
cGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gc3RhdGljIHZvaWQgdmlzaXRPdXRwdXRDb25zdHJhaW50
cyhKU0NlbGwqLCBWaXNpdG9yJik7XG4iKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMzIxNSw3
ICszMjE1LDcgQEAgc3ViIEdlbmVyYXRlSGVhZGVyCiAgICAgICAgIH0KICAgICAgICAgJGhlYWRl
ckluY2x1ZGVzeyI8d3RmL05ldmVyRGVzdHJveWVkLmg+In0gPSAxOwogICAgICAgICBwdXNoKEBo
ZWFkZXJDb250ZW50LCAicHVibGljOlxuIik7Ci0gICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQs
ICIgICAgYm9vbCBpc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVu
a25vd24+LCB2b2lkKiBjb250ZXh0LCBKU0M6OlNsb3RWaXNpdG9yJiwgY29uc3QgY2hhcioqKSAk
e292ZXJyaWRlRGVjbH07XG4iKTsKKyAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICBi
b29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4s
IHZvaWQqIGNvbnRleHQsIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYsIGNvbnN0IGNoYXIqKikg
JHtvdmVycmlkZURlY2x9O1xuIik7CiAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAg
dm9pZCBmaW5hbGl6ZShKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0KSAk
e292ZXJyaWRlRGVjbH07XG4iKTsKICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIn07XG4i
KTsKICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIlxuIik7CkBAIC00OTM5LDYgKzQ5Mzks
NyBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJE
T01Jc29TdWJzcGFjZXMuaCIpOwogICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJXZWJDb3JlSlNDbGll
bnREYXRhLmgiKTsKICAgICBBZGRUb0ltcGxJbmNsdWRlcygiPEphdmFTY3JpcHRDb3JlL0pTRGVz
dHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLmg+Iik7CisgICAgQWRkVG9JbXBsSW5jbHVkZXMo
IjxKYXZhU2NyaXB0Q29yZS9TbG90VmlzaXRvck1hY3Jvcy5oPiIpOwogICAgIEFkZFRvSW1wbElu
Y2x1ZGVzKCI8SmF2YVNjcmlwdENvcmUvU3Vic3BhY2VJbmxpbmVzLmg+Iik7CiAgICAgcHVzaChA
aW1wbENvbnRlbnQsICJKU0M6Oklzb1N1YnNwYWNlKiAke2NsYXNzTmFtZX06OnN1YnNwYWNlRm9y
SW1wbChKU0M6OlZNJiB2bSlcbiIpOwogICAgIHB1c2goQGltcGxDb250ZW50LCAie1xuIik7CkBA
IC00OTU4LDcgKzQ5NTksMTAgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICBwdXNo
KEBpbXBsQ29udGVudCwgIiAgICBhdXRvKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yJHtp
bnRlcmZhY2VOYW1lfS5nZXQoKTtcbiIpOwogICAgIHB1c2goQGltcGxDb250ZW50LCAiSUdOT1JF
X1dBUk5JTkdTX0JFR0lOKFwidW5yZWFjaGFibGUtY29kZVwiKVxuIik7CiAgICAgcHVzaChAaW1w
bENvbnRlbnQsICJJR05PUkVfV0FSTklOR1NfQkVHSU4oXCJ0YXV0b2xvZ2ljYWwtY29tcGFyZVwi
KVxuIik7Ci0gICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgaWYgKCYke2NsYXNzTmFtZX06OnZp
c2l0T3V0cHV0Q29uc3RyYWludHMgIT0gJkpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFp
bnRzKVxuIik7CisgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgdm9pZCAoKm15VmlzaXRPdXRw
dXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9ICR7Y2xhc3NO
YW1lfTo6dmlzaXRPdXRwdXRDb25zdHJhaW50cztcbiIpOworICAgIHB1c2goQGltcGxDb250ZW50
LCAiICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwg
SlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7
XG4iKTsKKyAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0
cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KVxuIik7CisjICAgIHB1c2goQGlt
cGxDb250ZW50LCAiICAgIGlmICgmJHtjbGFzc05hbWV9Ojp2aXNpdE91dHB1dENvbnN0cmFpbnRz
ICE9ICZKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50cylcbiIpOwogICAgIHB1c2go
QGltcGxDb250ZW50LCAiICAgICAgICBjbGllbnREYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMo
KS5hcHBlbmQoc3BhY2UpO1xuIik7CiAgICAgcHVzaChAaW1wbENvbnRlbnQsICJJR05PUkVfV0FS
TklOR1NfRU5EXG4iKTsKICAgICBwdXNoKEBpbXBsQ29udGVudCwgIklHTk9SRV9XQVJOSU5HU19F
TkRcbiIpOwpAQCAtNDk2Niw3ICs0OTcwLDggQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24K
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgIn1cblxuIik7CiAKICAgICBpZiAoJG5lZWRzVmlzaXRD
aGlsZHJlbikgewotICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgInZvaWQgJHtjbGFzc05hbWV9
Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpXG4iKTsK
KyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPlxu
Iik7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAidm9pZCAke2NsYXNzTmFtZX06OnZpc2l0
Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcilcbiIpOwogICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgIntcbiIpOwogICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwg
IiAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PCR7Y2xhc3NOYW1lfSo+KGNlbGwpO1xuIik7
CiAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJ
VFModGhpc09iamVjdCwgaW5mbygpKTtcbiIpOwpAQCAtNDk5MSwxNCArNDk5NiwxOSBAQCBzdWIg
R2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAg
IHB1c2goQGltcGxDb250ZW50LCAifVxuXG4iKTsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICJERUZJTkVfVklTSVRfQ0hJTERSRU4oJHtjbGFzc05hbWV9KTtcblxuIik7CisKICAgICAgICAg
aWYgKCRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+e0pTQ3VzdG9tTWFya0Z1bmN0aW9u
fSkgewotICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ2b2lkICR7Y2xhc3NOYW1lfTo6
dmlzaXRPdXRwdXRDb25zdHJhaW50cyhKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9y
KVxuIik7CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgInRlbXBsYXRlPHR5cGVuYW1l
IFZpc2l0b3I+XG4iKTsKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAidm9pZCAke2Ns
YXNzTmFtZX06OnZpc2l0T3V0cHV0Q29uc3RyYWludHMoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2
aXNpdG9yKVxuIik7CiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIntcbiIpOwogICAg
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2Fz
dDwke2NsYXNzTmFtZX0qPihjZWxsKTtcbiIpOwogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRl
bnQsICIgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpO1xu
Iik7CiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBCYXNlOjp2aXNpdE91dHB1
dENvbnN0cmFpbnRzKHRoaXNPYmplY3QsIHZpc2l0b3IpO1xuIik7CiAgICAgICAgICAgICBwdXNo
KEBpbXBsQ29udGVudCwgIiAgICB0aGlzT2JqZWN0LT52aXNpdEFkZGl0aW9uYWxDaGlsZHJlbih2
aXNpdG9yKTtcbiIpOwogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ9XG5cbiIpOwor
ICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ0ZW1wbGF0ZSB2b2lkICR7Y2xhc3NOYW1l
fTo6dmlzaXRPdXRwdXRDb25zdHJhaW50cyhKU0NlbGwqLCBBYnN0cmFjdFNsb3RWaXNpdG9yJik7
XG4iKTsKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAidGVtcGxhdGUgdm9pZCAke2Ns
YXNzTmFtZX06OnZpc2l0T3V0cHV0Q29uc3RyYWludHMoSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTtc
biIpOwogICAgICAgICB9CiAgICAgfQogCkBAIC01MDMzLDcgKzUwNDMsNyBAQCBzdWIgR2VuZXJh
dGVJbXBsZW1lbnRhdGlvbgogICAgIH0KIAogICAgIGlmIChTaG91bGRHZW5lcmF0ZVdyYXBwZXJP
d25lckNvZGUoJGhhc1BhcmVudCwgJGludGVyZmFjZSkgJiYgIUdldEN1c3RvbUlzUmVhY2hhYmxl
KCRpbnRlcmZhY2UpKSB7Ci0gICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiYm9vbCBKUyR7aW50
ZXJmYWNlTmFtZX1Pd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8
SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3Qg
Y2hhcioqIHJlYXNvbilcbiIpOworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgImJvb2wgSlMk
e2ludGVyZmFjZU5hbWV9T3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFu
ZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgQWJzdHJhY3RTbG90VmlzaXRvciYgdmlz
aXRvciwgY29uc3QgY2hhcioqIHJlYXNvbilcbiIpOwogICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIntcbiIpOwogICAgICAgICAjIEFsbCBBY3RpdmVET01PYmplY3RzIGltcGxlbWVudCBoYXNQ
ZW5kaW5nQWN0aXZpdHkoKSwgYnV0IG5vdCBhbGwgb2YgdGhlbQogICAgICAgICAjIGluY3JlbWVu
dCB0aGVpciBDKysgcmVmZXJlbmNlIGNvdW50cyB3aGVuIGhhc1BlbmRpbmdBY3Rpdml0eSgpIGJl
Y29tZXMKQEAgLTY0MzIsNiArNjQ0Miw3IEBAIHN1YiBHZW5lcmF0ZUNhbGxiYWNrSGVhZGVyQ29u
dGVudAogICAgICAgICBwdXNoKEAkY29udGVudFJlZiwgIiAgICBib29sIGhhc0NhbGxiYWNrKCkg
Y29uc3QgZmluYWwgeyByZXR1cm4gbV9kYXRhICYmIG1fZGF0YS0+Y2FsbGJhY2soKTsgfVxuXG4i
KTsKICAgICB9CiAKKyAgICBwdXNoKEAkY29udGVudFJlZiwgIiAgICB2b2lkIHZpc2l0SlNGdW5j
dGlvbihKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKSBvdmVycmlkZTtcblxuIikgaWYgJGludGVy
ZmFjZU9yQ2FsbGJhY2stPmV4dGVuZGVkQXR0cmlidXRlcy0+e0lzV2Vha0NhbGxiYWNrfTsKICAg
ICBwdXNoKEAkY29udGVudFJlZiwgIiAgICB2b2lkIHZpc2l0SlNGdW5jdGlvbihKU0M6OlNsb3RW
aXNpdG9yJikgb3ZlcnJpZGU7XG5cbiIpIGlmICRpbnRlcmZhY2VPckNhbGxiYWNrLT5leHRlbmRl
ZEF0dHJpYnV0ZXMtPntJc1dlYWtDYWxsYmFja307CiAKICAgICBwdXNoKEAkY29udGVudFJlZiwg
IiAgICAke2NhbGxiYWNrRGF0YVR5cGV9KiBtX2RhdGE7XG4iKTsKQEAgLTY2MjMsNiArNjYzNCwx
MCBAQCBzdWIgR2VuZXJhdGVDYWxsYmFja0ltcGxlbWVudGF0aW9uQ29udGVuCiAgICAgfQogCiAg
ICAgaWYgKCRpbnRlcmZhY2VPckNhbGxiYWNrLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntJc1dlYWtD
YWxsYmFja30pIHsKKyAgICAgICAgcHVzaChAJGNvbnRlbnRSZWYsICJ2b2lkICR7Y2xhc3NOYW1l
fTo6dmlzaXRKU0Z1bmN0aW9uKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcilcbiIp
OworICAgICAgICBwdXNoKEAkY29udGVudFJlZiwgIntcbiIpOworICAgICAgICBwdXNoKEAkY29u
dGVudFJlZiwgIiAgICBtX2RhdGEtPnZpc2l0SlNGdW5jdGlvbih2aXNpdG9yKTtcbiIpOworICAg
ICAgICBwdXNoKEAkY29udGVudFJlZiwgIn1cblxuIik7CiAgICAgICAgIHB1c2goQCRjb250ZW50
UmVmLCAidm9pZCAke2NsYXNzTmFtZX06OnZpc2l0SlNGdW5jdGlvbihKU0M6OlNsb3RWaXNpdG9y
JiB2aXNpdG9yKVxuIik7CiAgICAgICAgIHB1c2goQCRjb250ZW50UmVmLCAie1xuIik7CiAgICAg
ICAgIHB1c2goQCRjb250ZW50UmVmLCAiICAgIG1fZGF0YS0+dmlzaXRKU0Z1bmN0aW9uKHZpc2l0
b3IpO1xuIik7CkBAIC02NzM0LDYgKzY3NDksNyBAQCBzdWIgR2VuZXJhdGVJdGVyYWJsZURlZmlu
aXRpb24KICAgICBteSAkdmlzaWJsZUludGVyZmFjZU5hbWUgPSAkY29kZUdlbmVyYXRvci0+R2V0
VmlzaWJsZUludGVyZmFjZU5hbWUoJGludGVyZmFjZSk7CiAKICAgICBBZGRUb0ltcGxJbmNsdWRl
cygiSlNET01JdGVyYXRvci5oIik7CisgICAgQWRkVG9JbXBsSW5jbHVkZXMoIjxKYXZhU2NyaXB0
Q29yZS9TbG90VmlzaXRvck1hY3Jvcy5oPiIpOwogCiAgICAgcmV0dXJuIHVubGVzcyBJc0tleVZh
bHVlSXRlcmFibGVJbnRlcmZhY2UoJGludGVyZmFjZSk7CiAKQEAgLTY3NzcsNyArNjc5Myw5IEBA
IHB1YmxpYzoKICAgICAgICAgYXV0byogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvciR7aXRl
cmF0b3JOYW1lfS5nZXQoKTsKIElHTk9SRV9XQVJOSU5HU19CRUdJTihcInVucmVhY2hhYmxlLWNv
ZGVcIikKIElHTk9SRV9XQVJOSU5HU19CRUdJTihcInRhdXRvbG9naWNhbC1jb21wYXJlXCIpCi0g
ICAgICAgIGlmICgmJHtpdGVyYXRvck5hbWV9Ojp2aXNpdE91dHB1dENvbnN0cmFpbnRzICE9ICZK
U0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50cykKKyAgICAgICAgdm9pZCAoKm15Vmlz
aXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9ICR7
aXRlcmF0b3JOYW1lfTo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKKyAgICAgICAgdm9pZCAoKmpz
Q2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9y
JikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKKyAgICAgICAgaWYgKG15
VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKICAg
ICAgICAgICAgIGNsaWVudERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFj
ZSk7CiBJR05PUkVfV0FSTklOR1NfRU5ECiBJR05PUkVfV0FSTklOR1NfRU5ECkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9kb20vQWN0aXZlRE9NQ2FsbGJhY2suaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9kb20vQWN0aXZlRE9NQ2FsbGJhY2suaAkocmV2aXNpb24gMjcyOTAyKQorKysgU291
cmNlL1dlYkNvcmUvZG9tL0FjdGl2ZURPTUNhbGxiYWNrLmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDEyIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQpAQCAt
MzMsNiArMzQsNyBAQAogI2luY2x1ZGUgIkNvbnRleHREZXN0cnVjdGlvbk9ic2VydmVyLmgiCiAK
IG5hbWVzcGFjZSBKU0MgeworY2xhc3MgQWJzdHJhY3RTbG90VmlzaXRvcjsKIGNsYXNzIFNsb3RW
aXNpdG9yOwogfQogCkBAIC01NSw2ICs1Nyw3IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9S
VCBib29sIGFjdGl2ZURPTU9iamVjdHNBcmVTdXNwZW5kZWQoKSBjb25zdDsKICAgICBXRUJDT1JF
X0VYUE9SVCBib29sIGFjdGl2ZURPTU9iamVjdEFyZVN0b3BwZWQoKSBjb25zdDsKICAgICAKKyAg
ICB2aXJ0dWFsIHZvaWQgdmlzaXRKU0Z1bmN0aW9uKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYp
IHsgfQogICAgIHZpcnR1YWwgdm9pZCB2aXNpdEpTRnVuY3Rpb24oSlNDOjpTbG90VmlzaXRvciYp
IHsgfQogfTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50TGlzdGVuZXIuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRMaXN0ZW5lci5oCShyZXZpc2lvbiAy
NzI5MDIpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRMaXN0ZW5lci5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwOCwgMjAw
OSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYt
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
QEAgLTI0LDYgKzI0LDcgQEAKICNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgogCiBuYW1lc3BhY2Ug
SlNDIHsKK2NsYXNzIEFic3RyYWN0U2xvdFZpc2l0b3I7CiBjbGFzcyBKU09iamVjdDsKIGNsYXNz
IFNsb3RWaXNpdG9yOwogfQpAQCAtNTIsNiArNTMsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2
b2lkIGhhbmRsZUV2ZW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBFdmVudCYpID0gMDsKICAg
ICB2aXJ0dWFsIGJvb2wgd2FzQ3JlYXRlZEZyb21NYXJrdXAoKSBjb25zdCB7IHJldHVybiBmYWxz
ZTsgfQogCisgICAgdmlydHVhbCB2b2lkIHZpc2l0SlNGdW5jdGlvbihKU0M6OkFic3RyYWN0U2xv
dFZpc2l0b3ImKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgdmlzaXRKU0Z1bmN0aW9uKEpTQzo6U2xv
dFZpc2l0b3ImKSB7IH0KIAogICAgIHZpcnR1YWwgYm9vbCBpc0F0dHJpYnV0ZSgpIGNvbnN0IHsg
cmV0dXJuIGZhbHNlOyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRUYXJnZXQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9FdmVudFRhcmdldC5jcHAJKHJldmlz
aW9uIDI3MjkwMikKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9FdmVudFRhcmdldC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTIsNyArMiw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9s
bCAoa25vbGxAa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0byAo
a29pdmlzdG9Aa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMjAwMSBEaXJrIE11ZWxsZXIgKG11
ZWxsZXJAa2RlLm9yZykKLSAqIENvcHlyaWdodCAoQykgMjAwNC0yMDE3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwNiBBbGV4ZXkgUHJvc2t1
cnlha292IChhcEB3ZWJraXQub3JnKQogICogICAgICAgICAgIChDKSAyMDA3LCAyMDA4IE5pa29s
YXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgogICoKQEAgLTM4NCw3ICszODQsOCBA
QCB2b2lkIEV2ZW50VGFyZ2V0OjpyZW1vdmVBbGxFdmVudExpc3RlbmVyCiAgICAgdGhyZWFkRGF0
YS5zZXRJc0luUmVtb3ZlQWxsRXZlbnRMaXN0ZW5lcnMoZmFsc2UpOwogfQogCi12b2lkIEV2ZW50
VGFyZ2V0Ojp2aXNpdEpTRXZlbnRMaXN0ZW5lcnMoSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikK
K3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEV2ZW50VGFyZ2V0Ojp2aXNpdEpTRXZl
bnRMaXN0ZW5lcnMoVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBFdmVudFRhcmdldERhdGEqIGRh
dGEgPSBldmVudFRhcmdldERhdGFDb25jdXJyZW50bHkoKTsKICAgICBpZiAoIWRhdGEpCkBAIC0z
OTYsNiArMzk3LDkgQEAgdm9pZCBFdmVudFRhcmdldDo6dmlzaXRKU0V2ZW50TGlzdGVuZXJzKAog
ICAgICAgICBsaXN0ZW5lci0+dmlzaXRKU0Z1bmN0aW9uKHZpc2l0b3IpOwogfQogCit0ZW1wbGF0
ZSB2b2lkIEV2ZW50VGFyZ2V0Ojp2aXNpdEpTRXZlbnRMaXN0ZW5lcnMoSlNDOjpBYnN0cmFjdFNs
b3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEV2ZW50VGFyZ2V0Ojp2aXNpdEpTRXZlbnRMaXN0
ZW5lcnMoSlNDOjpTbG90VmlzaXRvciYpOworCiB2b2lkIEV2ZW50VGFyZ2V0OjppbnZhbGlkYXRl
RXZlbnRMaXN0ZW5lclJlZ2lvbnMoKQogewogICAgIGlmIChpczxFbGVtZW50PigqdGhpcykpIHsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9FdmVudFRhcmdldC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2RvbS9FdmVudFRhcmdldC5oCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9kb20vRXZlbnRUYXJnZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMiw3ICsyLDcg
QEAKICAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQogICog
ICAgICAgICAgIChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQogICog
ICAgICAgICAgIChDKSAyMDAxIERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUub3JnKQotICogQ29w
eXJpZ2h0IChDKSAyMDA0LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDA0LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICogQ29weXJpZ2h0IChDKSAyMDA2IEFsZXhleSBQcm9za3VyeWFrb3YgKGFwQHdlYmtpdC5vcmcp
CiAgKiAgICAgICAgICAgKEMpIDIwMDcsIDIwMDggTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJt
YW5uQGtkZS5vcmc+CiAgKgpAQCAtOTcsNyArOTcsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBmaXJl
RXZlbnRMaXN0ZW5lcnMoRXZlbnQmLCBFdmVudEludm9rZVBoYXNlKTsKICAgICBib29sIGlzRmly
aW5nRXZlbnRMaXN0ZW5lcnMoKSBjb25zdDsKIAotICAgIHZvaWQgdmlzaXRKU0V2ZW50TGlzdGVu
ZXJzKEpTQzo6U2xvdFZpc2l0b3ImKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2
b2lkIHZpc2l0SlNFdmVudExpc3RlbmVycyhWaXNpdG9yJik7CiAgICAgdm9pZCBpbnZhbGlkYXRl
SlNFdmVudExpc3RlbmVycyhKU0M6OkpTT2JqZWN0Kik7CiAKICAgICBjb25zdCBFdmVudFRhcmdl
dERhdGEqIGV2ZW50VGFyZ2V0RGF0YSgpIGNvbnN0OwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9t
L011dGF0aW9uUmVjb3JkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vTXV0
YXRpb25SZWNvcmQuY3BwCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20v
TXV0YXRpb25SZWNvcmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAq
IENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKQEAgLTQxLDcgKzQyLDcgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogCiBuYW1lc3BhY2UgewogCi1zdGF0aWMgdm9pZCB2aXNpdE5vZGVMaXN0KEpT
Qzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IsIE5vZGVMaXN0JiBub2RlTGlzdCkKK3N0YXRpYyB2b2lk
IHZpc2l0Tm9kZUxpc3QoSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBOb2RlTGlz
dCYgbm9kZUxpc3QpCiB7CiAgICAgQVNTRVJUKCFub2RlTGlzdC5pc0xpdmVOb2RlTGlzdCgpKTsK
ICAgICB1bnNpZ25lZCBsZW5ndGggPSBub2RlTGlzdC5sZW5ndGgoKTsKQEAgLTY4LDcgKzY5LDcg
QEAgcHJpdmF0ZToKICAgICBOb2RlKiBwcmV2aW91c1NpYmxpbmcoKSBvdmVycmlkZSB7IHJldHVy
biBtX3ByZXZpb3VzU2libGluZy5nZXQoKTsgfQogICAgIE5vZGUqIG5leHRTaWJsaW5nKCkgb3Zl
cnJpZGUgeyByZXR1cm4gbV9uZXh0U2libGluZy5nZXQoKTsgfQogCi0gICAgdm9pZCB2aXNpdE5v
ZGVzQ29uY3VycmVudGx5KEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0IGZpbmFsCisg
ICAgdm9pZCB2aXNpdE5vZGVzQ29uY3VycmVudGx5KEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYg
dmlzaXRvcikgY29uc3QgZmluYWwKICAgICB7CiAgICAgICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9v
dChyb290KG1fdGFyZ2V0LnB0cigpKSk7CiAgICAgICAgIGlmIChtX2FkZGVkTm9kZXMpCkBAIC0x
MDUsNyArMTA2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIG5vZGVMaXN0LmdldCgpOwog
ICAgIH0KIAotICAgIHZvaWQgdmlzaXROb2Rlc0NvbmN1cnJlbnRseShKU0M6OlNsb3RWaXNpdG9y
JiB2aXNpdG9yKSBjb25zdCBmaW5hbAorICAgIHZvaWQgdmlzaXROb2Rlc0NvbmN1cnJlbnRseShK
U0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0IGZpbmFsCiAgICAgewogICAg
ICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qocm9vdChtX3RhcmdldC5wdHIoKSkpOwogICAgIH0K
QEAgLTE2NCw3ICsxNjUsNyBAQCBwcml2YXRlOgogCiAgICAgU3RyaW5nIG9sZFZhbHVlKCkgb3Zl
cnJpZGUgeyByZXR1cm4gU3RyaW5nKCk7IH0KIAotICAgIHZvaWQgdmlzaXROb2Rlc0NvbmN1cnJl
bnRseShKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKSBjb25zdCBmaW5hbAorICAgIHZvaWQgdmlz
aXROb2Rlc0NvbmN1cnJlbnRseShKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpIGNv
bnN0IGZpbmFsCiAgICAgewogICAgICAgICBtX3JlY29yZC0+dmlzaXROb2Rlc0NvbmN1cnJlbnRs
eSh2aXNpdG9yKTsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vTXV0YXRpb25SZWNv
cmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vTXV0YXRpb25SZWNvcmQuaAko
cmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL1dlYkNvcmUvZG9tL011dGF0aW9uUmVjb3JkLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDEx
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zIGFyZQpAQCAtMzYsNyArMzcsNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotY2xhc3Mg
U2xvdFZpc2l0b3I7CitjbGFzcyBBYnN0cmFjdFNsb3RWaXNpdG9yOwogCiB9CiAKQEAgLTcyLDcg
KzczLDcgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBTdHJpbmcgb2xkVmFsdWUoKSB7IHJldHVy
biBTdHJpbmcoKTsgfQogCi0gICAgdmlydHVhbCB2b2lkIHZpc2l0Tm9kZXNDb25jdXJyZW50bHko
SlNDOjpTbG90VmlzaXRvciYpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXROb2Rl
c0NvbmN1cnJlbnRseShKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKSBjb25zdCA9IDA7CiB9Owog
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZUZp
bHRlckNvbmRpdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlRmls
dGVyQ29uZGl0aW9uLmgJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9O
b2RlRmlsdGVyQ29uZGl0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDcgQEAgY2xh
c3MgTm9kZUZpbHRlckNvbmRpdGlvbiA6IHB1YmxpYyBSZWZDbwogcHVibGljOgogICAgIHZpcnR1
YWwgfk5vZGVGaWx0ZXJDb25kaXRpb24oKSA9IGRlZmF1bHQ7CiAgICAgdmlydHVhbCB1bnNpZ25l
ZCBzaG9ydCBhY2NlcHROb2RlKE5vZGUmKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHZp
c2l0QWdncmVnYXRlKEpTQzo6U2xvdFZpc2l0b3ImKSB7IH0KKy8vICAgIHZpcnR1YWwgdm9pZCB2
aXNpdEFnZ3JlZ2F0ZShKU0M6OlNsb3RWaXNpdG9yJikgeyB9IC8vIG1sYW0gVU5VU0VECiB9Owog
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vU3RhdGlj
UmFuZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9TdGF0aWNSYW5nZS5j
cHAJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9TdGF0aWNSYW5nZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDE2LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC03Niw3ICs3Niw3IEBAIEV4Y2VwdGlvbk9yPFJlZjxTdGF0
aWNSYW5nZT4+IFN0YXRpY1JhbmcKICAgICByZXR1cm4gY3JlYXRlKHsgeyBpbml0LnN0YXJ0Q29u
dGFpbmVyLnJlbGVhc2VOb25OdWxsKCksIGluaXQuc3RhcnRPZmZzZXQgfSwgeyBpbml0LmVuZENv
bnRhaW5lci5yZWxlYXNlTm9uTnVsbCgpLCBpbml0LmVuZE9mZnNldCB9IH0pOwogfQogCi12b2lk
IFN0YXRpY1JhbmdlOjp2aXNpdE5vZGVzQ29uY3VycmVudGx5KEpTQzo6U2xvdFZpc2l0b3ImIHZp
c2l0b3IpIGNvbnN0Cit2b2lkIFN0YXRpY1JhbmdlOjp2aXNpdE5vZGVzQ29uY3VycmVudGx5KEpT
Qzo6QWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikgY29uc3QKIHsKICAgICB2aXNpdG9yLmFk
ZE9wYXF1ZVJvb3Qocm9vdChzdGFydC5jb250YWluZXIuZ2V0KCkpKTsKICAgICB2aXNpdG9yLmFk
ZE9wYXF1ZVJvb3Qocm9vdChlbmQuY29udGFpbmVyLmdldCgpKSk7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9kb20vU3RhdGljUmFuZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20v
U3RhdGljUmFuZ2UuaAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL1dlYkNvcmUvZG9tL1N0
YXRpY1JhbmdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDE2LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMCw3ICszMCw3IEBACiAKIG5hbWVzcGFj
ZSBKU0MgewogCi1jbGFzcyBTbG90VmlzaXRvcjsKK2NsYXNzIEFic3RyYWN0U2xvdFZpc2l0b3I7
CiAKIH0KIApAQCAtNTgsNyArNTgsNyBAQCBwdWJsaWM6CiAgICAgdW5zaWduZWQgZW5kT2Zmc2V0
KCkgY29uc3QgZmluYWwgeyByZXR1cm4gU2ltcGxlUmFuZ2U6OmVuZE9mZnNldCgpOyB9CiAgICAg
Ym9vbCBjb2xsYXBzZWQoKSBjb25zdCBmaW5hbCB7IHJldHVybiBTaW1wbGVSYW5nZTo6Y29sbGFw
c2VkKCk7IH0KIAotICAgIHZvaWQgdmlzaXROb2Rlc0NvbmN1cnJlbnRseShKU0M6OlNsb3RWaXNp
dG9yJikgY29uc3Q7CisgICAgdm9pZCB2aXNpdE5vZGVzQ29uY3VycmVudGx5KEpTQzo6QWJzdHJh
Y3RTbG90VmlzaXRvciYpIGNvbnN0OwogCiBwcml2YXRlOgogICAgIFN0YXRpY1JhbmdlKFNpbXBs
ZVJhbmdlJiYpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0wyUmVuZGVy
aW5nQ29udGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
V2ViR0wyUmVuZGVyaW5nQ29udGV4dC5jcHAJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMMlJlbmRlcmluZ0NvbnRleHQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIwIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMzA3OCw3ICszMDc4LDcgQEAgYm9vbCBXZWJHTDJSZW5kZXJpbmdDb250ZXh0Ojpj
aGVja0FuZFRyYQogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIFdlYkdMMlJlbmRlcmluZ0Nv
bnRleHQ6OmFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3Ip
Cit2b2lkIFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OmFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKEpT
Qzo6QWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBXZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlOjphZGRNZW1iZXJzVG9PcGFxdWVSb290cyh2aXNpdG9yKTsKIApJbmRleDogU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMMlJlbmRlcmluZ0NvbnRleHQu
aAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0wy
UmVuZGVyaW5nQ29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxNS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYxLDcgKzI2MSw3IEBAIHB1
YmxpYzoKIAogICAgIGJvb2wgY2hlY2tBbmRUcmFuc2xhdGVBdHRhY2htZW50cyhjb25zdCBjaGFy
KiBmdW5jdGlvbk5hbWUsIEdDR0xlbnVtLCBWZWN0b3I8R0NHTGVudW0+Jik7CiAKLSAgICB2b2lk
IGFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKEpTQzo6U2xvdFZpc2l0b3ImKSBvdmVycmlkZTsKKyAg
ICB2b2lkIGFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYp
IG92ZXJyaWRlOwogCiBwcml2YXRlOgogICAgIFdlYkdMMlJlbmRlcmluZ0NvbnRleHQoQ2FudmFz
QmFzZSYsIEdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcyk7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9XZWJHTEZyYW1lYnVmZmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEZyYW1lYnVmZmVyLmNwcAkocmV2aXNpb24gMjcyOTAy
KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xGcmFtZWJ1ZmZlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5LTIw
MTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5
LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC02Myw3ICs2Myw3IEBAIG5hbWVzcGFjZSB7CiAgICAgICAgIHZvaWQg
b25EZXRhY2hlZChjb25zdCBBYnN0cmFjdExvY2tlciYsIEdyYXBoaWNzQ29udGV4dEdMKikgb3Zl
cnJpZGU7CiAgICAgICAgIHZvaWQgYXR0YWNoKEdyYXBoaWNzQ29udGV4dEdMKiwgR0NHTGVudW0g
dGFyZ2V0LCBHQ0dMZW51bSBhdHRhY2htZW50KSBvdmVycmlkZTsKICAgICAgICAgdm9pZCB1bmF0
dGFjaChHcmFwaGljc0NvbnRleHRHTCosIEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gYXR0YWNo
bWVudCkgb3ZlcnJpZGU7Ci0gICAgICAgIHZvaWQgYWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMoY29u
c3QgQWJzdHJhY3RMb2NrZXImLCBKU0M6OlNsb3RWaXNpdG9yJikgb3ZlcnJpZGU7CisgICAgICAg
IHZvaWQgYWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMoY29uc3QgQWJzdHJhY3RMb2NrZXImLCBKU0M6
OkFic3RyYWN0U2xvdFZpc2l0b3ImKSBvdmVycmlkZTsKIAogICAgICAgICBXZWJHTFJlbmRlcmJ1
ZmZlckF0dGFjaG1lbnQoKSB7IH07CiAKQEAgLTE0NSw3ICsxNDUsNyBAQCBuYW1lc3BhY2Ugewog
ICAgICAgICAgICAgY29udGV4dC0+ZnJhbWVidWZmZXJSZW5kZXJidWZmZXIodGFyZ2V0LCBhdHRh
Y2htZW50LCBHcmFwaGljc0NvbnRleHRHTDo6UkVOREVSQlVGRkVSLCAwKTsKICAgICB9CiAKLSAg
ICB2b2lkIFdlYkdMUmVuZGVyYnVmZmVyQXR0YWNobWVudDo6YWRkTWVtYmVyc1RvT3BhcXVlUm9v
dHMoY29uc3QgQWJzdHJhY3RMb2NrZXImLCBKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQorICAg
IHZvaWQgV2ViR0xSZW5kZXJidWZmZXJBdHRhY2htZW50OjphZGRNZW1iZXJzVG9PcGFxdWVSb290
cyhjb25zdCBBYnN0cmFjdExvY2tlciYsIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRv
cikKICAgICB7CiAgICAgICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChtX3JlbmRlcmJ1ZmZlci5n
ZXQoKSk7CiAgICAgfQpAQCAtMTY5LDcgKzE2OSw3IEBAIG5hbWVzcGFjZSB7CiAgICAgICAgIHZv
aWQgb25EZXRhY2hlZChjb25zdCBBYnN0cmFjdExvY2tlciYsIEdyYXBoaWNzQ29udGV4dEdMKikg
b3ZlcnJpZGU7CiAgICAgICAgIHZvaWQgYXR0YWNoKEdyYXBoaWNzQ29udGV4dEdMKiwgR0NHTGVu
dW0gdGFyZ2V0LCBHQ0dMZW51bSBhdHRhY2htZW50KSBvdmVycmlkZTsKICAgICAgICAgdm9pZCB1
bmF0dGFjaChHcmFwaGljc0NvbnRleHRHTCosIEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gYXR0
YWNobWVudCkgb3ZlcnJpZGU7Ci0gICAgICAgIHZvaWQgYWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMo
Y29uc3QgQWJzdHJhY3RMb2NrZXImLCBKU0M6OlNsb3RWaXNpdG9yJikgb3ZlcnJpZGU7CisgICAg
ICAgIHZvaWQgYWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMoY29uc3QgQWJzdHJhY3RMb2NrZXImLCBK
U0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKSBvdmVycmlkZTsKIAogICAgICAgICBXZWJHTFRleHR1
cmVBdHRhY2htZW50KCkgeyB9OwogCkBAIC0yNjcsNyArMjY3LDcgQEAgbmFtZXNwYWNlIHsKICNl
bmRpZgogICAgIH0KIAotICAgIHZvaWQgV2ViR0xUZXh0dXJlQXR0YWNobWVudDo6YWRkTWVtYmVy
c1RvT3BhcXVlUm9vdHMoY29uc3QgQWJzdHJhY3RMb2NrZXImLCBKU0M6OlNsb3RWaXNpdG9yJiB2
aXNpdG9yKQorICAgIHZvaWQgV2ViR0xUZXh0dXJlQXR0YWNobWVudDo6YWRkTWVtYmVyc1RvT3Bh
cXVlUm9vdHMoY29uc3QgQWJzdHJhY3RMb2NrZXImLCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3Im
IHZpc2l0b3IpCiAgICAgewogICAgICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QobV90ZXh0dXJl
LmdldCgpKTsKICAgICB9CkBAIC03MjEsNyArNzIxLDcgQEAgR0NHTGVudW0gV2ViR0xGcmFtZWJ1
ZmZlcjo6Z2V0RHJhd0J1ZmZlcgogICAgIHJldHVybiBHcmFwaGljc0NvbnRleHRHTDo6Tk9ORTsK
IH0KIAotdm9pZCBXZWJHTEZyYW1lYnVmZmVyOjphZGRNZW1iZXJzVG9PcGFxdWVSb290cyhjb25z
dCBBYnN0cmFjdExvY2tlciYgbG9ja2VyLCBKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordm9p
ZCBXZWJHTEZyYW1lYnVmZmVyOjphZGRNZW1iZXJzVG9PcGFxdWVSb290cyhjb25zdCBBYnN0cmFj
dExvY2tlciYgbG9ja2VyLCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAg
ICAgZm9yIChhdXRvJiBlbnRyeSA6IG1fYXR0YWNobWVudHMpCiAgICAgICAgIGVudHJ5LnZhbHVl
LT5hZGRNZW1iZXJzVG9PcGFxdWVSb290cyhsb2NrZXIsIHZpc2l0b3IpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xGcmFtZWJ1ZmZlci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRnJhbWVidWZmZXIuaAkocmV2aXNpb24gMjcy
OTAyKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xGcmFtZWJ1ZmZlci5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTM0LDcgKzM0LDcgQEAKICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5h
bWVzcGFjZSBKU0MgewotY2xhc3MgU2xvdFZpc2l0b3I7CitjbGFzcyBBYnN0cmFjdFNsb3RWaXNp
dG9yOwogfQogCiBuYW1lc3BhY2UgV1RGIHsKQEAgLTY1LDcgKzY1LDcgQEAgcHVibGljOgogICAg
ICAgICB2aXJ0dWFsIHZvaWQgb25EZXRhY2hlZChjb25zdCBXVEY6OkFic3RyYWN0TG9ja2VyJiwg
R3JhcGhpY3NDb250ZXh0R0wqKSA9IDA7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBhdHRhY2goR3Jh
cGhpY3NDb250ZXh0R0wqLCBHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIGF0dGFjaG1lbnQpID0g
MDsKICAgICAgICAgdmlydHVhbCB2b2lkIHVuYXR0YWNoKEdyYXBoaWNzQ29udGV4dEdMKiwgR0NH
TGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBhdHRhY2htZW50KSA9IDA7Ci0gICAgICAgIHZpcnR1YWwg
dm9pZCBhZGRNZW1iZXJzVG9PcGFxdWVSb290cyhjb25zdCBXVEY6OkFic3RyYWN0TG9ja2VyJiwg
SlNDOjpTbG90VmlzaXRvciYpID0gMDsKKyAgICAgICAgdmlydHVhbCB2b2lkIGFkZE1lbWJlcnNU
b09wYXF1ZVJvb3RzKGNvbnN0IFdURjo6QWJzdHJhY3RMb2NrZXImLCBKU0M6OkFic3RyYWN0U2xv
dFZpc2l0b3ImKSA9IDA7CiAKICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIFdlYkdMQXR0YWNobWVu
dCgpOwpAQCAtMTE0LDcgKzExNCw3IEBAIHB1YmxpYzoKIAogICAgIEdDR0xlbnVtIGdldERyYXdC
dWZmZXIoR0NHTGVudW0pOwogCi0gICAgdm9pZCBhZGRNZW1iZXJzVG9PcGFxdWVSb290cyhjb25z
dCBXVEY6OkFic3RyYWN0TG9ja2VyJiwgSlNDOjpTbG90VmlzaXRvciYpOworICAgIHZvaWQgYWRk
TWVtYmVyc1RvT3BhcXVlUm9vdHMoY29uc3QgV1RGOjpBYnN0cmFjdExvY2tlciYsIEpTQzo6QWJz
dHJhY3RTbG90VmlzaXRvciYpOwogCiBwcml2YXRlOgogICAgIFdlYkdMRnJhbWVidWZmZXIoV2Vi
R0xSZW5kZXJpbmdDb250ZXh0QmFzZSYpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52
YXMvV2ViR0xQcm9ncmFtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2Nh
bnZhcy9XZWJHTFByb2dyYW0uY3BwCShyZXZpc2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9XZWJHTFByb2dyYW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTIwNiw3ICsyMDYs
NyBAQCBib29sIFdlYkdMUHJvZ3JhbTo6ZGV0YWNoU2hhZGVyKGNvbnN0IEFiCiAgICAgfQogfQog
Ci12b2lkIFdlYkdMUHJvZ3JhbTo6YWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMoY29uc3QgQWJzdHJh
Y3RMb2NrZXImLCBKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBXZWJHTFByb2dyYW06
OmFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgSlNDOjpBYnN0
cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdCht
X3ZlcnRleFNoYWRlci5nZXQoKSk7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KG1fZnJhZ21l
bnRTaGFkZXIuZ2V0KCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xQ
cm9ncmFtLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xQ
cm9ncmFtLmgJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L1dlYkdMUHJvZ3JhbS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAwOS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAwOS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzUsNyArMzUsNyBAQAogI2luY2x1
ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIEpTQyB7Ci1jbGFzcyBTbG90VmlzaXRvcjsK
K2NsYXNzIEFic3RyYWN0U2xvdFZpc2l0b3I7CiB9CiAKIG5hbWVzcGFjZSBXVEYgewpAQCAtODgs
NyArODgsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX3JlcXVpcmVkVHJhbnNmb3JtRmVl
ZGJhY2tCdWZmZXJDb3VudDsKICAgICB9CiAKLSAgICB2b2lkIGFkZE1lbWJlcnNUb09wYXF1ZVJv
b3RzKGNvbnN0IFdURjo6QWJzdHJhY3RMb2NrZXImLCBKU0M6OlNsb3RWaXNpdG9yJik7CisgICAg
dm9pZCBhZGRNZW1iZXJzVG9PcGFxdWVSb290cyhjb25zdCBXVEY6OkFic3RyYWN0TG9ja2VyJiwg
SlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAKIHByaXZhdGU6CiAgICAgV2ViR0xQcm9ncmFt
KFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UmKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuY3BwCShyZXZp
c2lvbiAyNzI5MDIpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTc5MzEsNyArNzkzMSw3IEBAIHZv
aWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6ZGlzcGF0Y2gKICAgICBxdWV1ZVRhc2tUb0Rp
c3BhdGNoRXZlbnQoKmNhbnZhcywgVGFza1NvdXJjZTo6V2ViR0wsIFdlYkdMQ29udGV4dEV2ZW50
OjpjcmVhdGUoZXZlbnROYW1lcygpLndlYmdsY29udGV4dGNoYW5nZWRFdmVudCwgRXZlbnQ6OkNh
bkJ1YmJsZTo6Tm8sIEV2ZW50OjpJc0NhbmNlbGFibGU6OlllcywgZW1wdHlTdHJpbmcoKSkpOwog
fQogCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmFkZE1lbWJlcnNUb09wYXF1ZVJv
b3RzKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2U6OmFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYg
dmlzaXRvcikKIHsKICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG9iamVjdEdyYXBoTG9jaygp
KTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2UuaAkocmV2aXNpb24gMjcyOTAyKQorKysgU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE3IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIxIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtNTgsNyArNTgsNyBAQAogI2VuZGlmCiAKIG5hbWVzcGFjZSBKU0MgewotY2xhc3MgU2xv
dFZpc2l0b3I7CitjbGFzcyBBYnN0cmFjdFNsb3RWaXNpdG9yOwogfQogCiBuYW1lc3BhY2UgV1RG
IHsKQEAgLTQxMSw3ICs0MTEsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCByZWN5Y2xlQ29udGV4dCgp
IG92ZXJyaWRlOwogICAgIHZvaWQgZGlzcGF0Y2hDb250ZXh0Q2hhbmdlZE5vdGlmaWNhdGlvbigp
IG92ZXJyaWRlOwogCi0gICAgdmlydHVhbCB2b2lkIGFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKEpT
Qzo6U2xvdFZpc2l0b3ImKTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRkTWVtYmVyc1RvT3BhcXVlUm9v
dHMoSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAgICAgLy8gVGhpcyBsb2NrIG11c3QgYmUg
aGVsZCBhY3Jvc3MgYWxsIG11dGF0aW9ucyBvZiBjb250YWluZXJzIGxpa2UKICAgICAvLyBWZWN0
b3JzLCBIYXNoU2V0cywgZXRjLiB3aGljaCBjb250YWluIFJlZlB0cjxXZWJHTE9iamVjdD4sIGFu
ZAogICAgIC8vIHdoaWNoIGFyZSB0cmF2ZXJzZWQgYnkgYWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMo
KSBvciBhbnkgb2YgdGhlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFRy
YW5zZm9ybUZlZWRiYWNrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2Nh
bnZhcy9XZWJHTFRyYW5zZm9ybUZlZWRiYWNrLmNwcAkocmV2aXNpb24gMjcyOTAyKQorKysgU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xUcmFuc2Zvcm1GZWVkYmFjay5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMzAsOCArMzAsNyBAQAogCiAjaW5jbHVkZSAiV2ViR0xDb250ZXh0R3JvdXAuaCIK
ICNpbmNsdWRlICJXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmgiCi0jaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvU2xvdFZpc2l0b3IuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9TbG90Vmlz
aXRvcklubGluZXMuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9BYnN0cmFjdFNsb3RWaXNp
dG9ySW5saW5lcy5oPgogI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CiAjaW5jbHVkZSA8d3RmL0xvY2tl
ci5oPgogCkBAIC05Myw3ICs5Miw3IEBAIGJvb2wgV2ViR0xUcmFuc2Zvcm1GZWVkYmFjazo6aGFz
RW5vdWdoQnUKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBXZWJHTFRyYW5zZm9ybUZlZWRi
YWNrOjphZGRNZW1iZXJzVG9PcGFxdWVSb290cyhjb25zdCBBYnN0cmFjdExvY2tlciYgbG9ja2Vy
LCBKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBXZWJHTFRyYW5zZm9ybUZlZWRiYWNr
OjphZGRNZW1iZXJzVG9PcGFxdWVSb290cyhjb25zdCBBYnN0cmFjdExvY2tlciYgbG9ja2VyLCBK
U0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgZm9yIChhdXRvJiBidWZm
ZXIgOiBtX2JvdW5kSW5kZXhlZFRyYW5zZm9ybUZlZWRiYWNrQnVmZmVycykKICAgICAgICAgdmlz
aXRvci5hZGRPcGFxdWVSb290KGJ1ZmZlci5nZXQoKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9XZWJHTFRyYW5zZm9ybUZlZWRiYWNrLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xUcmFuc2Zvcm1GZWVkYmFjay5oCShyZXZpc2lvbiAy
NzI5MDIpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFRyYW5zZm9ybUZlZWRi
YWNrLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE1LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMSw3ICszMSw3IEBACiAjaW5jbHVkZSAiV2ViR0xT
aGFyZWRPYmplY3QuaCIKIAogbmFtZXNwYWNlIEpTQyB7Ci1jbGFzcyBTbG90VmlzaXRvcjsKK2Ns
YXNzIEFic3RyYWN0U2xvdFZpc2l0b3I7CiB9CiAKIG5hbWVzcGFjZSBXVEYgewpAQCAtNzAsNyAr
NzAsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgYm9vbCBoYXNFbm91Z2hCdWZmZXJzKEdDR0x1aW50
IG51bVJlcXVpcmVkKSBjb25zdDsKIAotICAgIHZvaWQgYWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMo
Y29uc3QgQWJzdHJhY3RMb2NrZXImLCBKU0M6OlNsb3RWaXNpdG9yJik7CisgICAgdm9pZCBhZGRN
ZW1iZXJzVG9PcGFxdWVSb290cyhjb25zdCBBYnN0cmFjdExvY2tlciYsIEpTQzo6QWJzdHJhY3RT
bG90VmlzaXRvciYpOwogCiBwcml2YXRlOgogICAgIFdlYkdMVHJhbnNmb3JtRmVlZGJhY2soV2Vi
R0wyUmVuZGVyaW5nQ29udGV4dCYpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
V2ViR0xWZXJ0ZXhBcnJheU9iamVjdEJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2h0bWwvY2FudmFzL1dlYkdMVmVydGV4QXJyYXlPYmplY3RCYXNlLmNwcAkocmV2aXNpb24g
MjcyOTAyKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xWZXJ0ZXhBcnJheU9i
amVjdEJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxNS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjksOCArMjksNyBAQAogI2lmIEVOQUJM
RShXRUJHTCkKIAogI2luY2x1ZGUgIldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuaCIKLSNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9TbG90VmlzaXRvci5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL1Nsb3RWaXNpdG9ySW5saW5lcy5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0Fic3Ry
YWN0U2xvdFZpc2l0b3JJbmxpbmVzLmg+CiAjaW5jbHVkZSA8d3RmL0xvY2tlci5oPgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CkBAIC0xMDksNyArMTA4LDcgQEAgdm9pZCBXZWJHTFZlcnRleEFycmF5
T2JqZWN0QmFzZTo6c2V0VmVydAogICAgIG1fdmVydGV4QXR0cmliU3RhdGVbaW5kZXhdLmRpdmlz
b3IgPSBkaXZpc29yOwogfQogCi12b2lkIFdlYkdMVmVydGV4QXJyYXlPYmplY3RCYXNlOjphZGRN
ZW1iZXJzVG9PcGFxdWVSb290cyhjb25zdCBBYnN0cmFjdExvY2tlciYsIEpTQzo6U2xvdFZpc2l0
b3ImIHZpc2l0b3IpCit2b2lkIFdlYkdMVmVydGV4QXJyYXlPYmplY3RCYXNlOjphZGRNZW1iZXJz
VG9PcGFxdWVSb290cyhjb25zdCBBYnN0cmFjdExvY2tlciYsIEpTQzo6QWJzdHJhY3RTbG90Vmlz
aXRvciYgdmlzaXRvcikKIHsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QobV9ib3VuZEVsZW1l
bnRBcnJheUJ1ZmZlci5nZXQoKSk7CiAgICAgZm9yIChhdXRvJiBzdGF0ZSA6IG1fdmVydGV4QXR0
cmliU3RhdGUpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFZlcnRleEFy
cmF5T2JqZWN0QmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L1dlYkdMVmVydGV4QXJyYXlPYmplY3RCYXNlLmgJKHJldmlzaW9uIDI3MjkwMikKKysrIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVmVydGV4QXJyYXlPYmplY3RCYXNlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIw
MjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0zMiw3ICszMiw3IEBACiAjaW5jbHVkZSAiV2ViR0xDb250ZXh0T2JqZWN0
LmgiCiAKIG5hbWVzcGFjZSBKU0MgewotY2xhc3MgU2xvdFZpc2l0b3I7CitjbGFzcyBBYnN0cmFj
dFNsb3RWaXNpdG9yOwogfQogCiBuYW1lc3BhY2UgV1RGIHsKQEAgLTc3LDcgKzc3LDcgQEAgcHVi
bGljOgogCiAgICAgdm9pZCBzZXRWZXJ0ZXhBdHRyaWJEaXZpc29yKEdDR0x1aW50IGluZGV4LCBH
Q0dMdWludCBkaXZpc29yKTsKIAotICAgIHZvaWQgYWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMoY29u
c3QgV1RGOjpBYnN0cmFjdExvY2tlciYsIEpTQzo6U2xvdFZpc2l0b3ImKTsKKyAgICB2b2lkIGFk
ZE1lbWJlcnNUb09wYXF1ZVJvb3RzKGNvbnN0IFdURjo6QWJzdHJhY3RMb2NrZXImLCBKU0M6OkFi
c3RyYWN0U2xvdFZpc2l0b3ImKTsKIAogcHJvdGVjdGVkOgogICAgIFdlYkdMVmVydGV4QXJyYXlP
YmplY3RCYXNlKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UmLCBUeXBlKTsK
</data>
<flag name="commit-queue"
          id="439176"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>420675</attachid>
            <date>2021-02-17 11:11:11 -0800</date>
            <delta_ts>2021-02-17 11:13:46 -0800</delta_ts>
            <desc>work in progress.</desc>
            <filename>bug-217274q.patch</filename>
            <type>text/plain</type>
            <size>603504</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDI3MjgzMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtNjEzLDYgKzYxMyw4IEBAIHNldChKYXZhU2NyaXB0Q29yZV9QUklWQVRFX0ZSQU1FV09SS19I
RUEKICAgICBkb21qaXQvRE9NSklUSGVhcFJhbmdlLmgKICAgICBkb21qaXQvRE9NSklUU2lnbmF0
dXJlLmgKIAorICAgIGhlYXAvQWJzdHJhY3RTbG90VmlzaXRvci5oCisgICAgaGVhcC9BYnN0cmFj
dFNsb3RWaXNpdG9ySW5saW5lcy5oCiAgICAgaGVhcC9BbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmgK
ICAgICBoZWFwL0FsbG9jYXRpb25GYWlsdXJlTW9kZS5oCiAgICAgaGVhcC9BbGxvY2F0b3IuaApA
QCAtNjc4LDYgKzY4MCw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9QUklWQVRFX0ZSQU1FV09SS19I
RUEKICAgICBoZWFwL01hcmtlZEJsb2NrU2V0LmgKICAgICBoZWFwL01hcmtlZFNwYWNlLmgKICAg
ICBoZWFwL01hcmtpbmdDb25zdHJhaW50LmgKKyAgICBoZWFwL01hcmtpbmdDb25zdHJhaW50RXhl
Y3V0b3JQYWlyLmgKICAgICBoZWFwL011dGF0b3JTdGF0ZS5oCiAgICAgaGVhcC9QYWNrZWRDZWxs
UHRyLmgKICAgICBoZWFwL1ByZWNpc2VBbGxvY2F0aW9uLmgKQEAgLTY4NywxMiArNjkwLDE0IEBA
IHNldChKYXZhU2NyaXB0Q29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUEKICAgICBoZWFwL1NpbXBs
ZU1hcmtpbmdDb25zdHJhaW50LmgKICAgICBoZWFwL1Nsb3RWaXNpdG9yLmgKICAgICBoZWFwL1Ns
b3RWaXNpdG9ySW5saW5lcy5oCisgICAgaGVhcC9TbG90VmlzaXRvck1hY3Jvcy5oCiAgICAgaGVh
cC9TdHJvbmcuaAogICAgIGhlYXAvU3Ryb25nSW5saW5lcy5oCiAgICAgaGVhcC9TdWJzcGFjZS5o
CiAgICAgaGVhcC9TdWJzcGFjZUlubGluZXMuaAogICAgIGhlYXAvU3luY2hyb25vdXNuZXNzLmgK
ICAgICBoZWFwL1RpbnlCbG9vbUZpbHRlci5oCisgICAgaGVhcC9WZXJpZmllclNsb3RWaXNpdG9y
LmgKICAgICBoZWFwL1Zpc2l0UmFjZUtleS5oCiAgICAgaGVhcC9XZWFrLmgKICAgICBoZWFwL1dl
YWtCbG9jay5oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CShyZXZpc2lvbiAyNzI4
MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQJKHdvcmtpbmcgY29weSkK
QEAgLTU2Myw2ICs1NjMsNyBAQCBoZWFwL1N0b3BJZk5lY2Vzc2FyeVRpbWVyLmNwcAogaGVhcC9T
dWJzcGFjZS5jcHAKIGhlYXAvU3luY2hyb25vdXNTdG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1bGVy
LmNwcAogaGVhcC9TeW5jaHJvbm91c25lc3MuY3BwCitoZWFwL1ZlcmlmaWVyU2xvdFZpc2l0b3Iu
Y3BwCiBoZWFwL1Zpc2l0UmFjZUtleS5jcHAKIGhlYXAvV2Vhay5jcHAKIGhlYXAvV2Vha0Jsb2Nr
LmNwcApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0FQSVdyYXBwZXJPYmplY3Qu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQVBJV3JhcHBlck9i
amVjdC5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pT
QVBJV3JhcHBlck9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDEsNyArNDEsNyBAQCBwdWJs
aWM6CiAgICAgc3RhdGljIHZvaWQgc3Vic3BhY2VGb3IoVk0mKSB7IFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7IH0KICAgICAKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7Ci0gICAg
c3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJik7Cisg
ICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTl9XSVRIX01PRElGSUVSKEpTX0VYUE9SVF9QUklWQVRF
KTsKICAgICAKICAgICB2b2lkKiB3cmFwcGVkT2JqZWN0KCkgeyByZXR1cm4gbV93cmFwcGVkT2Jq
ZWN0OyB9CiAgICAgdm9pZCBzZXRXcmFwcGVkT2JqZWN0KHZvaWQqKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9BUEkvSlNBUElXcmFwcGVyT2JqZWN0Lm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNBUElXcmFwcGVyT2JqZWN0Lm1tCShyZXZpc2lvbiAy
NzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQVBJV3JhcHBlck9iamVjdC5t
bQkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTM3LDcgKzM3LDcgQEAKIGNsYXNzIEpTQVBJV3JhcHBlck9i
amVjdEhhbmRsZU93bmVyIGZpbmFsIDogcHVibGljIEpTQzo6V2Vha0hhbmRsZU93bmVyIHsKIHB1
YmxpYzoKICAgICB2b2lkIGZpbmFsaXplKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQq
KSBmaW5hbDsKLSAgICBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxl
PEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6U2xvdFZpc2l0b3ImLCBjb25zdCBj
aGFyKiopIGZpbmFsOworICAgIGJvb2wgaXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpI
YW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCwgSlNDOjpBYnN0cmFjdFNsb3RWaXNp
dG9yJiwgY29uc3QgY2hhcioqKSBmaW5hbDsKIH07CiAKIHN0YXRpYyBKU0FQSVdyYXBwZXJPYmpl
Y3RIYW5kbGVPd25lcioganNBUElXcmFwcGVyT2JqZWN0SGFuZGxlT3duZXIoKQpAQCAtNTYsMTQg
KzU2LDE0IEBAIHZvaWQgSlNBUElXcmFwcGVyT2JqZWN0SGFuZGxlT3duZXI6OmZpbmEKICAgICBK
U0M6OldlYWtTZXQ6OmRlYWxsb2NhdGUoSlNDOjpXZWFrSW1wbDo6YXNXZWFrSW1wbChoYW5kbGUu
c2xvdCgpKSk7CiB9CiAKLWJvb2wgSlNBUElXcmFwcGVyT2JqZWN0SGFuZGxlT3duZXI6OmlzUmVh
Y2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2
b2lkKiwgSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqKQorYm9vbCBKU0FQ
SVdyYXBwZXJPYmplY3RIYW5kbGVPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlND
OjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBKU0M6OkFic3RyYWN0U2xvdFZp
c2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKikKIHsKICAgICBKU0M6OkpTQVBJV3JhcHBlck9i
amVjdCogd3JhcHBlck9iamVjdCA9IEpTQzo6anNDYXN0PEpTQzo6SlNBUElXcmFwcGVyT2JqZWN0
Kj4oaGFuZGxlLmdldCgpLmFzQ2VsbCgpKTsKICAgICAvLyBXZSB1c2UgdGhlIEpTR2xvYmFsT2Jq
ZWN0IHdoZW4gcHJvY2Vzc2luZyB3ZWFrIGhhbmRsZXMgdG8gcHJldmVudCB0aGUgc2l0dWF0aW9u
IHdoZXJlIHVzaW5nCiAgICAgLy8gdGhlIHNhbWUgT2JqZWN0aXZlLUMgb2JqZWN0IGluIG11bHRp
cGxlIGdsb2JhbCBvYmplY3RzIGtlZXBzIGFsbCBvZiB0aGUgZ2xvYmFsIG9iamVjdHMgYWxpdmUu
CiAgICAgaWYgKCF3cmFwcGVyT2JqZWN0LT53cmFwcGVkT2JqZWN0KCkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICByZXR1cm4gdmlzaXRvci52bSgpLmhlYXAuaXNNYXJrZWQod3JhcHBlck9i
amVjdC0+c3RydWN0dXJlKCktPmdsb2JhbE9iamVjdCgpKSAmJiB2aXNpdG9yLmNvbnRhaW5zT3Bh
cXVlUm9vdCh3cmFwcGVyT2JqZWN0LT53cmFwcGVkT2JqZWN0KCkpOworICAgIHJldHVybiB2aXNp
dG9yLmlzTWFya2VkKHdyYXBwZXJPYmplY3QtPnN0cnVjdHVyZSgpLT5nbG9iYWxPYmplY3QoKSkg
JiYgdmlzaXRvci5jb250YWluc09wYXF1ZVJvb3Qod3JhcHBlck9iamVjdC0+d3JhcHBlZE9iamVj
dCgpKTsKIH0KIAogbmFtZXNwYWNlIEpTQyB7CkBAIC03Myw2ICs3Myw4IEBAIHN0YXRpYyBKU0Nf
REVDTEFSRV9IT1NUX0ZVTkNUSU9OKGNvbnN0cnUKIHN0YXRpYyBKU0NfREVDTEFSRV9DVVNUT01f
R0VUVEVSKGNhbGxiYWNrR2V0dGVySlNBUElXcmFwcGVyT2JqZWN0Q2FsbGJhY2tPYmplY3QpOwog
c3RhdGljIEpTQ19ERUNMQVJFX0NVU1RPTV9HRVRURVIoc3RhdGljRnVuY3Rpb25HZXR0ZXJKU0FQ
SVdyYXBwZXJPYmplY3RDYWxsYmFja09iamVjdCk7CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTl9X
SVRIX01PRElGSUVSKHRlbXBsYXRlPD4sIEpTQ2FsbGJhY2tPYmplY3Q8SlNBUElXcmFwcGVyT2Jq
ZWN0Pik7CisKIHRlbXBsYXRlIDw+IGNvbnN0IENsYXNzSW5mbyBKU0NhbGxiYWNrT2JqZWN0PEpT
QVBJV3JhcHBlck9iamVjdD46OnNfaW5mbyA9IHsgIkpTQVBJV3JhcHBlck9iamVjdCIsICZCYXNl
OjpzX2luZm8sIG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNDYWxsYmFj
a09iamVjdCkgfTsKIHRlbXBsYXRlIDw+IGNvbnN0IGJvb2wgSlNDYWxsYmFja09iamVjdDxKU0FQ
SVdyYXBwZXJPYmplY3Q+OjpuZWVkc0Rlc3RydWN0aW9uID0gdHJ1ZTsKIApAQCAtMTIzLDcgKzEy
NSw4IEBAIHZvaWQgSlNBUElXcmFwcGVyT2JqZWN0OjpzZXRXcmFwcGVkT2JqZWMKICAgICBtX3dy
YXBwZWRPYmplY3QgPSBbc3RhdGljX2Nhc3Q8aWQ+KHdyYXBwZWRPYmplY3QpIHJldGFpbl07CiB9
CiAKLXZvaWQgSlNBUElXcmFwcGVyT2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwg
SlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2
b2lkIEpTQVBJV3JhcHBlck9iamVjdDo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBW
aXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTQVBJV3JhcHBlck9iamVjdCogdGhpc09iamVjdCA9
IEpTQzo6anNDYXN0PEpTQVBJV3JhcHBlck9iamVjdCo+KGNlbGwpOwogICAgIEJhc2U6OnZpc2l0
Q2hpbGRyZW4oY2VsbCwgdmlzaXRvcik7CkBAIC0xMzMsNiArMTM2LDggQEAgdm9pZCBKU0FQSVdy
YXBwZXJPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSgogICAgICAgICBzY2FuRXh0ZXJuYWxPYmplY3RH
cmFwaCh2aXNpdG9yLnZtKCksIHZpc2l0b3IsIHdyYXBwZWRPYmplY3QpOwogfQogCitERUZJTkVf
VklTSVRfQ0hJTERSRU5fV0lUSF9NT0RJRklFUihKU19FWFBPUlRfUFJJVkFURSwgSlNBUElXcmFw
cGVyT2JqZWN0KTsKKwogdGVtcGxhdGUgPD4KIElzb1N1YnNwYWNlKiBKU0NhbGxiYWNrT2JqZWN0
PEpTQVBJV3JhcHBlck9iamVjdD46OnN1YnNwYWNlRm9ySW1wbChWTSYgdm0sIFN1YnNwYWNlQWNj
ZXNzIG1vZGUpCiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tP
YmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxs
YmFja09iamVjdC5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9BUEkvSlNDYWxsYmFja09iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMTcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwNyBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJr
aXQub3JnPgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtNDEsNiArNDEsOSBAQCBzdGF0aWMgSlNDX0RF
Q0xBUkVfQ1VTVE9NX0dFVFRFUihzdGF0aWNGCiBzdGF0aWMgSlNDX0RFQ0xBUkVfQ1VTVE9NX0dF
VFRFUihjYWxsYmFja0dldHRlckpTR2xvYmFsT2JqZWN0Q2FsbGJhY2tPYmplY3QpOwogc3RhdGlj
IEpTQ19ERUNMQVJFX0NVU1RPTV9HRVRURVIoc3RhdGljRnVuY3Rpb25HZXR0ZXJKU0dsb2JhbE9i
amVjdENhbGxiYWNrT2JqZWN0KTsKIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOX1dJVEhfTU9ESUZJ
RVIodGVtcGxhdGU8PiwgSlNDYWxsYmFja09iamVjdDxKU05vbkZpbmFsT2JqZWN0Pik7CitERUZJ
TkVfVklTSVRfQ0hJTERSRU5fV0lUSF9NT0RJRklFUih0ZW1wbGF0ZTw+LCBKU0NhbGxiYWNrT2Jq
ZWN0PEpTR2xvYmFsT2JqZWN0Pik7CisKIC8vIERlZmluZSB0aGUgdHdvIHR5cGVzIG9mIEpTQ2Fs
bGJhY2tPYmplY3RzIHdlIHN1cHBvcnQuCiB0ZW1wbGF0ZSA8PiBjb25zdCBDbGFzc0luZm8gSlND
YWxsYmFja09iamVjdDxKU05vbkZpbmFsT2JqZWN0Pjo6c19pbmZvID0geyAiQ2FsbGJhY2tPYmpl
Y3QiLCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxF
KEpTQ2FsbGJhY2tPYmplY3QpIH07CiB0ZW1wbGF0ZSA8PiBjb25zdCBDbGFzc0luZm8gSlNDYWxs
YmFja09iamVjdDxKU0dsb2JhbE9iamVjdD46OnNfaW5mbyA9IHsgIkNhbGxiYWNrR2xvYmFsT2Jq
ZWN0IiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJM
RShKU0NhbGxiYWNrT2JqZWN0KSB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9K
U0NhbGxiYWNrT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQ
SS9KU0NhbGxiYWNrT2JqZWN0LmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwNyBFcmljIFNlaWRlbCA8ZXJpY0B3
ZWJraXQub3JnPgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtNjksNyArNjksMTAgQEAgcHVibGljOgog
ICAgICAgICBtX3ByaXZhdGVQcm9wZXJ0aWVzLT5kZWxldGVQcml2YXRlUHJvcGVydHkocHJvcGVy
dHlOYW1lKTsKICAgICB9CiAKLSAgICB2b2lkIHZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZp
c2l0b3IpCisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKKworICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFZpc2l0b3I+CisgICAgdm9pZCB2aXNpdENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiAg
ICAgewogICAgICAgICBKU1ByaXZhdGVQcm9wZXJ0eU1hcCogcHJvcGVydGllcyA9IG1fcHJpdmF0
ZVByb3BlcnRpZXMuZ2V0KCk7CiAgICAgICAgIGlmICghcHJvcGVydGllcykKQEAgLTEwMyw3ICsx
MDYsOCBAQCBwdWJsaWM6CiAgICAgICAgICAgICBtX3Byb3BlcnR5TWFwLnJlbW92ZShwcm9wZXJ0
eU5hbWUuaW1wbCgpKTsKICAgICAgICAgfQogCi0gICAgICAgIHZvaWQgdmlzaXRDaGlsZHJlbihT
bG90VmlzaXRvciYgdmlzaXRvcikKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4K
KyAgICAgICAgdm9pZCB2aXNpdENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiAgICAgICAgIHsK
ICAgICAgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fbG9jayk7CiAgICAgICAgICAgICBmb3Ig
KGF1dG8mIHBhaXIgOiBtX3Byb3BlcnR5TWFwKSB7CkBAIC0yMTYsMTMgKzIyMCw3IEBAIHByaXZh
dGU6CiAgICAgc3RhdGljIENhbGxEYXRhIGdldENvbnN0cnVjdERhdGEoSlNDZWxsKik7CiAgICAg
c3RhdGljIENhbGxEYXRhIGdldENhbGxEYXRhKEpTQ2VsbCopOwogCi0gICAgc3RhdGljIHZvaWQg
dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQotICAgIHsK
LSAgICAgICAgSlNDYWxsYmFja09iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0NhbGxiYWNr
T2JqZWN0Kj4oY2VsbCk7Ci0gICAgICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoKHN0YXRp
Y19jYXN0PFBhcmVudCo+KHRoaXNPYmplY3QpKSwgSlNDYWxsYmFja09iamVjdDxQYXJlbnQ+Ojpp
bmZvKCkpOwotICAgICAgICBQYXJlbnQ6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRv
cik7Ci0gICAgICAgIHRoaXNPYmplY3QtPm1fY2FsbGJhY2tPYmplY3REYXRhLT52aXNpdENoaWxk
cmVuKHZpc2l0b3IpOwotICAgIH0KKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAg
dm9pZCBpbml0KEpTR2xvYmFsT2JqZWN0Kik7CiAgCkBAIC0yNDUsNiArMjQzLDE2IEBAIHByaXZh
dGU6CiAgICAgY29uc3QgQ2xhc3NJbmZvKiBtX2NsYXNzSW5mbyB7IG51bGxwdHIgfTsKIH07CiAK
K3RlbXBsYXRlIDxjbGFzcyBQYXJlbnQ+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9p
ZCBKU0NhbGxiYWNrT2JqZWN0PFBhcmVudD46OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2Vs
bCwgVmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBKU0NhbGxiYWNrT2JqZWN0KiB0aGlzT2JqZWN0
ID0ganNDYXN0PEpTQ2FsbGJhY2tPYmplY3QqPihjZWxsKTsKKyAgICBBU1NFUlRfR0NfT0JKRUNU
X0lOSEVSSVRTKChzdGF0aWNfY2FzdDxQYXJlbnQqPih0aGlzT2JqZWN0KSksIEpTQ2FsbGJhY2tP
YmplY3Q8UGFyZW50Pjo6aW5mbygpKTsKKyAgICBQYXJlbnQ6OnZpc2l0Q2hpbGRyZW4odGhpc09i
amVjdCwgdmlzaXRvcik7CisgICAgdGhpc09iamVjdC0+bV9jYWxsYmFja09iamVjdERhdGEtPnZp
c2l0Q2hpbGRyZW4odmlzaXRvcik7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAvLyBpbmNs
dWRlIHRoZSBhY3R1YWwgdGVtcGxhdGUgY2xhc3MgaW1wbGVtZW50YXRpb24KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNNYW5hZ2VkVmFsdWUubW0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU01hbmFnZWRWYWx1ZS5tbQkocmV2aXNpb24gMjcyODMw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU01hbmFnZWRWYWx1ZS5tbQkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC00Miw3ICs0Miw3IEBACiBjbGFzcyBKU01hbmFnZWRWYWx1ZUhhbmRsZU93
bmVyIGZpbmFsIDogcHVibGljIEpTQzo6V2Vha0hhbmRsZU93bmVyIHsKIHB1YmxpYzoKICAgICB2
b2lkIGZpbmFsaXplKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQpIGZp
bmFsOwotICAgIGJvb2wgaXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlND
OjpVbmtub3duPiwgdm9pZCogY29udGV4dCwgSlNDOjpTbG90VmlzaXRvciYsIGNvbnN0IGNoYXIq
KikgZmluYWw7CisgICAgYm9vbCBpc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRs
ZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0LCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3Im
LCBjb25zdCBjaGFyKiopIGZpbmFsOwogfTsKIAogc3RhdGljIEpTTWFuYWdlZFZhbHVlSGFuZGxl
T3duZXImIG1hbmFnZWRWYWx1ZUhhbmRsZU93bmVyKCkKQEAgLTE4MCw3ICsxODAsNyBAQCBAaW50
ZXJmYWNlIEpTTWFuYWdlZFZhbHVlIChQcml2YXRlTWV0aG9kCiAtICh2b2lkKWRpc2Nvbm5lY3RW
YWx1ZTsKIEBlbmQKIAotYm9vbCBKU01hbmFnZWRWYWx1ZUhhbmRsZU93bmVyOjppc1JlYWNoYWJs
ZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0
LCBKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQorYm9vbCBK
U01hbmFnZWRWYWx1ZUhhbmRsZU93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6
OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0LCBKU0M6OkFic3RyYWN0U2xvdFZp
c2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCiB7CiAgICAgaWYgKFVOTElLRUxZ
KHJlYXNvbikpCiAgICAgICAgICpyZWFzb24gPSAiSlNNYW5hZ2VkVmFsdWUgaXMgb3BhcXVlIHJv
b3QiOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU01hcmtpbmdDb25zdHJhaW50
UHJpdmF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU01h
cmtpbmdDb25zdHJhaW50UHJpdmF0ZS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9BUEkvSlNNYXJraW5nQ29uc3RyYWludFByaXZhdGUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zNiw3ICszNiw3IEBAIG5hbWVzcGFjZSB7CiBBdG9taWM8dW5zaWduZWQ+IGNv
bnN0cmFpbnRDb3VudGVyOwogCiBzdHJ1Y3QgTWFya2VyIDogSlNNYXJrZXIgewotICAgIFNsb3RW
aXNpdG9yKiB2aXNpdG9yOworICAgIEFic3RyYWN0U2xvdFZpc2l0b3IqIHZpc2l0b3I7CiB9Owog
CiBib29sIGlzTWFya2VkKEpTTWFya2VyUmVmIG1hcmtlclJlZiwgSlNPYmplY3RSZWYgb2JqZWN0
UmVmKQpAQCAtNDQsNyArNDQsNyBAQCBib29sIGlzTWFya2VkKEpTTWFya2VyUmVmIG1hcmtlclJl
ZiwgSlNPCiAgICAgaWYgKCFvYmplY3RSZWYpCiAgICAgICAgIHJldHVybiB0cnVlOyAvLyBOdWxs
IGlzIGFuIGltbW9ydGFsIG9iamVjdC4KICAgICAKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8TWFy
a2VyKj4obWFya2VyUmVmKS0+dmlzaXRvci0+dm0oKS5oZWFwLmlzTWFya2VkKHRvSlMob2JqZWN0
UmVmKSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PE1hcmtlcio+KG1hcmtlclJlZiktPnZpc2l0
b3ItPmlzTWFya2VkKHRvSlMob2JqZWN0UmVmKSk7CiB9CiAKIHZvaWQgbWFyayhKU01hcmtlclJl
ZiBtYXJrZXJSZWYsIEpTT2JqZWN0UmVmIG9iamVjdFJlZikKQEAgLTczLDE0ICs3MywxNCBAQCB2
b2lkIEpTQ29udGV4dEdyb3VwQWRkTWFya2luZ0NvbnN0cmFpbnQoCiAgICAgYXV0byBjb25zdHJh
aW50ID0gbWFrZVVuaXF1ZTxTaW1wbGVNYXJraW5nQ29uc3RyYWludD4oCiAgICAgICAgIHRvQ1N0
cmluZygiQW1jIiwgY29uc3RyYWludEluZGV4LCAiKCIsIFJhd1BvaW50ZXIoYml0d2lzZV9jYXN0
PHZvaWQqPihjb25zdHJhaW50Q2FsbGJhY2spKSwgIikiKSwKICAgICAgICAgdG9DU3RyaW5nKCJB
UEkgTWFya2luZyBDb25zdHJhaW50ICMiLCBjb25zdHJhaW50SW5kZXgsICIgKCIsIFJhd1BvaW50
ZXIoYml0d2lzZV9jYXN0PHZvaWQqPihjb25zdHJhaW50Q2FsbGJhY2spKSwgIiwgIiwgUmF3UG9p
bnRlcih1c2VyRGF0YSksICIpIiksCi0gICAgICAgIFtjb25zdHJhaW50Q2FsbGJhY2ssIHVzZXJE
YXRhXSAoU2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsKKyAgICAgICAgTUFLRV9NQVJLSU5HX0NPTlNU
UkFJTlRfRVhFQ1VUT1JfUEFJUigoW2NvbnN0cmFpbnRDYWxsYmFjaywgdXNlckRhdGFdIChBYnN0
cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKSB7CiAgICAgICAgICAgICBNYXJrZXIgbWFya2VyOwog
ICAgICAgICAgICAgbWFya2VyLklzTWFya2VkID0gaXNNYXJrZWQ7CiAgICAgICAgICAgICBtYXJr
ZXIuTWFyayA9IG1hcms7CiAgICAgICAgICAgICBtYXJrZXIudmlzaXRvciA9ICZ2aXNpdG9yOwog
ICAgICAgICAgICAgCiAgICAgICAgICAgICBjb25zdHJhaW50Q2FsbGJhY2soJm1hcmtlciwgdXNl
ckRhdGEpOwotICAgICAgICB9LAorICAgICAgICB9KSksCiAgICAgICAgIHZvbGF0aWxpdHksCiAg
ICAgICAgIENvbnN0cmFpbnRDb25jdXJyZW5jeTo6U2VxdWVudGlhbCk7CiAgICAgCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmlydHVhbE1hY2hpbmUubW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1ZpcnR1YWxNYWNoaW5lLm1tCShyZXZpc2lv
biAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmlydHVhbE1hY2hpbmUu
bW0JKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0zMTUsNyArMzE1LDcgQEAgKyAodm9pZClzZXRDcmFzaE9u
Vk1DcmVhdGlvbjooQk9PTClzaG91bAogCiBAZW5kCiAKLXN0YXRpYyB2b2lkIHNjYW5FeHRlcm5h
bE9iamVjdEdyYXBoKEpTQzo6Vk0mIHZtLCBKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yLCB2b2lk
KiByb290LCBib29sIGxvY2tBY3F1aXJlZCkKK3N0YXRpYyB2b2lkIHNjYW5FeHRlcm5hbE9iamVj
dEdyYXBoKEpTQzo6Vk0mIHZtLCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIHZv
aWQqIHJvb3QsIGJvb2wgbG9ja0FjcXVpcmVkKQogewogICAgIEBhdXRvcmVsZWFzZXBvb2wgewog
ICAgICAgICBKU1ZpcnR1YWxNYWNoaW5lICp2aXJ0dWFsTWFjaGluZSA9IFtKU1ZNV3JhcHBlckNh
Y2hlIHdyYXBwZXJGb3JKU0NvbnRleHRHcm91cFJlZjp0b1JlZigmdm0pXTsKQEAgLTM0NywxMyAr
MzQ3LDEzIEBAIHN0YXRpYyB2b2lkIHNjYW5FeHRlcm5hbE9iamVjdEdyYXBoKEpTQzoKICAgICB9
CiB9CiAKLXZvaWQgc2NhbkV4dGVybmFsT2JqZWN0R3JhcGgoSlNDOjpWTSYgdm0sIEpTQzo6U2xv
dFZpc2l0b3ImIHZpc2l0b3IsIHZvaWQqIHJvb3QpCit2b2lkIHNjYW5FeHRlcm5hbE9iamVjdEdy
YXBoKEpTQzo6Vk0mIHZtLCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIHZvaWQq
IHJvb3QpCiB7CiAgICAgYm9vbCBsb2NrQWNxdWlyZWQgPSBmYWxzZTsKICAgICBzY2FuRXh0ZXJu
YWxPYmplY3RHcmFwaCh2bSwgdmlzaXRvciwgcm9vdCwgbG9ja0FjcXVpcmVkKTsKIH0KIAotdm9p
ZCBzY2FuRXh0ZXJuYWxSZW1lbWJlcmVkU2V0KEpTQzo6Vk0mIHZtLCBKU0M6OlNsb3RWaXNpdG9y
JiB2aXNpdG9yKQordm9pZCBzY2FuRXh0ZXJuYWxSZW1lbWJlcmVkU2V0KEpTQzo6Vk0mIHZtLCBK
U0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgQGF1dG9yZWxlYXNlcG9v
bCB7CiAgICAgICAgIEpTVmlydHVhbE1hY2hpbmUgKnZpcnR1YWxNYWNoaW5lID0gW0pTVk1XcmFw
cGVyQ2FjaGUgd3JhcHBlckZvckpTQ29udGV4dEdyb3VwUmVmOnRvUmVmKCZ2bSldOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1ZpcnR1YWxNYWNoaW5lSW50ZXJuYWwuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmlydHVhbE1hY2hpbmVJbnRl
cm5hbC5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pT
VmlydHVhbE1hY2hpbmVJbnRlcm5hbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMyLDcgKzMyLDcg
QEAKIAogbmFtZXNwYWNlIEpTQyB7CiBjbGFzcyBWTTsKLWNsYXNzIFNsb3RWaXNpdG9yOworY2xh
c3MgQWJzdHJhY3RTbG90VmlzaXRvcjsKIH0KIAogI2lmIGRlZmluZWQoX19PQkpDX18pCkBAIC01
NCw4ICs1NCw4IEBAIEpTQ29udGV4dEdyb3VwUmVmIGdldEdyb3VwRnJvbVZpcnR1YWxNYWMKIAog
I2VuZGlmIC8vIGRlZmluZWQoX19PQkpDX18pCiAKLXZvaWQgc2NhbkV4dGVybmFsT2JqZWN0R3Jh
cGgoSlNDOjpWTSYsIEpTQzo6U2xvdFZpc2l0b3ImLCB2b2lkKiByb290KTsKLXZvaWQgc2NhbkV4
dGVybmFsUmVtZW1iZXJlZFNldChKU0M6OlZNJiwgSlNDOjpTbG90VmlzaXRvciYpOwordm9pZCBz
Y2FuRXh0ZXJuYWxPYmplY3RHcmFwaChKU0M6OlZNJiwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9y
Jiwgdm9pZCogcm9vdCk7Cit2b2lkIHNjYW5FeHRlcm5hbFJlbWVtYmVyZWRTZXQoSlNDOjpWTSYs
IEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpOwogCiAjZW5kaWYgLy8gSlNDX09CSkNfQVBJX0VO
QUJMRUQKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9NYXJrZWRKU1ZhbHVlUmVm
QXJyYXkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvTWFya2Vk
SlNWYWx1ZVJlZkFycmF5LmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL0FQSS9NYXJrZWRKU1ZhbHVlUmVmQXJyYXkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAtMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ2LDcg
KzQ2LDggQEAgTWFya2VkSlNWYWx1ZVJlZkFycmF5Ojp+TWFya2VkSlNWYWx1ZVJlZgogICAgICAg
ICByZW1vdmUoKTsKIH0KIAotdm9pZCBNYXJrZWRKU1ZhbHVlUmVmQXJyYXk6OnZpc2l0QWdncmVn
YXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3Zv
aWQgTWFya2VkSlNWYWx1ZVJlZkFycmF5Ojp2aXNpdEFnZ3JlZ2F0ZShWaXNpdG9yJiB2aXNpdG9y
KQogewogICAgIEpTVmFsdWVSZWYqIGJ1ZmZlciA9IGRhdGEoKTsKICAgICBmb3IgKHVuc2lnbmVk
IGluZGV4ID0gMDsgaW5kZXggPCBtX3NpemU7ICsraW5kZXgpIHsKQEAgLTYyLDQgKzYzLDcgQEAg
dm9pZCBNYXJrZWRKU1ZhbHVlUmVmQXJyYXk6OnZpc2l0QWdncmVnYQogICAgIH0KIH0KIAordGVt
cGxhdGUgdm9pZCBNYXJrZWRKU1ZhbHVlUmVmQXJyYXk6OnZpc2l0QWdncmVnYXRlKEFic3RyYWN0
U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgTWFya2VkSlNWYWx1ZVJlZkFycmF5Ojp2aXNp
dEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYpOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvTWFya2VkSlNWYWx1ZVJlZkFycmF5LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9NYXJrZWRKU1ZhbHVlUmVmQXJyYXkuaAko
cmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9NYXJrZWRKU1Zh
bHVlUmVmQXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDIwLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02Miw3ICs2Miw3IEBAIHB1YmxpYzoKICAgICAg
ICAgcmV0dXJuIG1faW5saW5lQnVmZmVyOwogICAgIH0KIAotICAgIHZvaWQgdmlzaXRBZ2dyZWdh
dGUoU2xvdFZpc2l0b3ImKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIHZp
c2l0QWdncmVnYXRlKFZpc2l0b3ImKTsKIAogcHJpdmF0ZToKICAgICB1bnNpZ25lZCBtX3NpemU7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNBUElXcmFwcGVyR2xvYmFs
T2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIv
SlNBUElXcmFwcGVyR2xvYmFsT2JqZWN0LmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQVBJV3JhcHBlckdsb2JhbE9iamVjdC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTU5LDYgKzU5LDggQEAgc3RhdGljIEpTQ19ERUNMQVJFX0hPU1RfRlVO
Q1RJT04oY29uc3RydQogc3RhdGljIEpTQ19ERUNMQVJFX0NVU1RPTV9HRVRURVIoY2FsbGJhY2tH
ZXR0ZXJKU0FQSVdyYXBwZXJHbG9iYWxPYmplY3RDYWxsYmFja09iamVjdCk7CiBzdGF0aWMgSlND
X0RFQ0xBUkVfQ1VTVE9NX0dFVFRFUihzdGF0aWNGdW5jdGlvbkdldHRlckpTQVBJV3JhcHBlckds
b2JhbE9iamVjdENhbGxiYWNrT2JqZWN0KTsKIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOX1dJVEhf
TU9ESUZJRVIodGVtcGxhdGU8PiwgSlNDYWxsYmFja09iamVjdDxKU0FQSVdyYXBwZXJHbG9iYWxP
YmplY3Q+KTsKKwogdGVtcGxhdGUgPD4gY29uc3QgQ2xhc3NJbmZvIEpTQ2FsbGJhY2tPYmplY3Q8
SlNBUElXcmFwcGVyR2xvYmFsT2JqZWN0Pjo6c19pbmZvID0geyAiSlNBUElXcmFwcGVyR2xvYmFs
T2JqZWN0IiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9U
QUJMRShKU0NhbGxiYWNrT2JqZWN0KSB9OwogdGVtcGxhdGU8PiBjb25zdCBib29sIEpTQ2FsbGJh
Y2tPYmplY3Q8SlNBUElXcmFwcGVyR2xvYmFsT2JqZWN0Pjo6bmVlZHNEZXN0cnVjdGlvbiA9IHRy
dWU7CiAKQEAgLTE0NCw5ICsxNDYsNCBAQCB2b2lkIEpTQVBJV3JhcHBlckdsb2JhbE9iamVjdDo6
ZmluaXNoQ3JlCiAgICAgV2Vha1NldDo6YWxsb2NhdGUodGhpcywganNBUElXcmFwcGVyR2xvYmFs
T2JqZWN0SGFuZGxlT3duZXIoKSwgMCk7IC8vIEJhbGFuY2VkIGluIEpTQVBJV3JhcHBlckdsb2Jh
bE9iamVjdEhhbmRsZU93bmVyOjpmaW5hbGl6ZS4KIH0KIAotdm9pZCBKU0FQSVdyYXBwZXJHbG9i
YWxPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBKU0M6OlNsb3RWaXNpdG9yJiB2
aXNpdG9yKQotewotICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4oY2VsbCwgdmlzaXRvcik7Ci19Ci0K
IH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGli
L0pTQVBJV3JhcHBlckdsb2JhbE9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvZ2xpYi9KU0FQSVdyYXBwZXJHbG9iYWxPYmplY3QuaAkocmV2aXNpb24gMjcy
ODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQVBJV3JhcHBlckdsb2Jh
bE9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw3ICszOSw2IEBAIHB1YmxpYzoKICAgICBz
dGF0aWMgdm9pZCBzdWJzcGFjZUZvcihWTSYpIHsgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsgfQogCiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOwotICAgIHN0YXRpYyB2b2lkIHZp
c2l0Q2hpbGRyZW4oSlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpOwogCiAgICAgSlNDR0xpYldy
YXBwZXJPYmplY3QqIHdyYXBwZWRPYmplY3QoKSBjb25zdCB7IHJldHVybiBtX3dyYXBwZWRPYmpl
Y3Q7IH0KICAgICB2b2lkIHNldFdyYXBwZWRPYmplY3QoSlNDR0xpYldyYXBwZXJPYmplY3QqIHdy
YXBwZWRPYmplY3QpIHsgbV93cmFwcGVkT2JqZWN0ID0gd3JhcHBlZE9iamVjdDsgfQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQVBJV3JhcHBlck9iamVjdEdMaWIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0FQSVdyYXBw
ZXJPYmplY3RHTGliLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL0FQSS9nbGliL0pTQVBJV3JhcHBlck9iamVjdEdMaWIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSlNBUElXcmFw
cGVyT2JqZWN0LmgiCiAKKyNpbmNsdWRlICJBYnN0cmFjdFNsb3RWaXNpdG9yLmgiCiAjaW5jbHVk
ZSAiSlNDR0xpYldyYXBwZXJPYmplY3QuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5j
bHVkZSAiSlNDYWxsYmFja09iamVjdC5oIgpAQCAtMzYsNyArMzcsNyBAQAogY2xhc3MgSlNBUElX
cmFwcGVyT2JqZWN0SGFuZGxlT3duZXIgZmluYWwgOiBwdWJsaWMgSlNDOjpXZWFrSGFuZGxlT3du
ZXIgewogcHVibGljOgogICAgIHZvaWQgZmluYWxpemUoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3du
Piwgdm9pZCopIGZpbmFsOwotICAgIGJvb2wgaXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlND
OjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCwgSlNDOjpTbG90VmlzaXRvciYs
IGNvbnN0IGNoYXIqKikgZmluYWw7CisgICAgYm9vbCBpc1JlYWNoYWJsZUZyb21PcGFxdWVSb290
cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0LCBKU0M6OkFic3RyYWN0
U2xvdFZpc2l0b3ImLCBjb25zdCBjaGFyKiopIGZpbmFsOwogfTsKIAogc3RhdGljIEpTQVBJV3Jh
cHBlck9iamVjdEhhbmRsZU93bmVyKiBqc0FQSVdyYXBwZXJPYmplY3RIYW5kbGVPd25lcigpCkBA
IC01NSw3ICs1Niw3IEBAIHZvaWQgSlNBUElXcmFwcGVyT2JqZWN0SGFuZGxlT3duZXI6OmZpbmEK
ICAgICBKU0M6OldlYWtTZXQ6OmRlYWxsb2NhdGUoSlNDOjpXZWFrSW1wbDo6YXNXZWFrSW1wbCho
YW5kbGUuc2xvdCgpKSk7CiB9CiAKLWJvb2wgSlNBUElXcmFwcGVyT2JqZWN0SGFuZGxlT3duZXI6
OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFu
ZGxlLCB2b2lkKiwgSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqKQorYm9v
bCBKU0FQSVdyYXBwZXJPYmplY3RIYW5kbGVPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9v
dHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBKU0M6OkFic3RyYWN0
U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKikKIHsKICAgICBKU0M6OkpTQVBJV3Jh
cHBlck9iamVjdCogd3JhcHBlck9iamVjdCA9IEpTQzo6anNDYXN0PEpTQzo6SlNBUElXcmFwcGVy
T2JqZWN0Kj4oaGFuZGxlLmdldCgpLmFzQ2VsbCgpKTsKICAgICAvLyBXZSB1c2UgdGhlIEpTR2xv
YmFsT2JqZWN0IHdoZW4gcHJvY2Vzc2luZyB3ZWFrIGhhbmRsZXMgdG8gcHJldmVudCB0aGUgc2l0
dWF0aW9uIHdoZXJlIHVzaW5nCkBAIC03Miw2ICs3Myw4IEBAIHN0YXRpYyBKU0NfREVDTEFSRV9I
T1NUX0ZVTkNUSU9OKGNvbnN0cnUKIHN0YXRpYyBKU0NfREVDTEFSRV9DVVNUT01fR0VUVEVSKGNh
bGxiYWNrR2V0dGVySlNBUElXcmFwcGVyT2JqZWN0Q2FsbGJhY2tPYmplY3QpOwogc3RhdGljIEpT
Q19ERUNMQVJFX0NVU1RPTV9HRVRURVIoc3RhdGljRnVuY3Rpb25HZXR0ZXJKU0FQSVdyYXBwZXJP
YmplY3RDYWxsYmFja09iamVjdCk7CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTl9XSVRIX01PRElG
SUVSKHRlbXBsYXRlPD4sIEpTQ2FsbGJhY2tPYmplY3Q8SlNBUElXcmFwcGVyT2JqZWN0Pik7CisK
IHRlbXBsYXRlIDw+IGNvbnN0IENsYXNzSW5mbyBKU0NhbGxiYWNrT2JqZWN0PEpTQVBJV3JhcHBl
ck9iamVjdD46OnNfaW5mbyA9IHsgIkpTQVBJV3JhcHBlck9iamVjdCIsICZCYXNlOjpzX2luZm8s
IG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNDYWxsYmFja09iamVjdCkg
fTsKIHRlbXBsYXRlPD4gY29uc3QgYm9vbCBKU0NhbGxiYWNrT2JqZWN0PEpTQVBJV3JhcHBlck9i
amVjdD46Om5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOwogCkBAIC0xNTUsOSArMTU4LDEyIEBAIHZv
aWQgSlNBUElXcmFwcGVyT2JqZWN0OjpzZXRXcmFwcGVkT2JqZWMKICAgICBtX3dyYXBwZWRPYmpl
Y3QgPSB3cmFwcGVkT2JqZWN0OwogfQogCi12b2lkIEpTQVBJV3JhcHBlck9iamVjdDo6dmlzaXRD
aGlsZHJlbihKU0NlbGwqIGNlbGwsIEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0
ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0FQSVdyYXBwZXJPYmplY3Q6OnZpc2l0Q2hpbGRy
ZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBCYXNlOjp2aXNp
dENoaWxkcmVuKGNlbGwsIHZpc2l0b3IpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU5fV0lU
SF9NT0RJRklFUihKU19FWFBPUlRfUFJJVkFURSwgSlNBUElXcmFwcGVyT2JqZWN0KTsKKwogfSAv
LyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNp
b24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTExNTgsNiArMTE1OCw3IEBA
CiAJCTY1QjgzOTJFMUJBQ0FEMzYwMDQ0RTgyNCAvKiBDYWNoZWRSZWNvdmVyeS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjVCODM5MkMxQkFDQTkyQTAw
NDRFODI0IC8qIENhY2hlZFJlY292ZXJ5LmggKi87IH07CiAJCTZBMzhDRkFBMUUzMkI1QUIwMDYw
MjA2RiAvKiBBc3luY1N0YWNrVHJhY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDZBMzhDRkE4MUUzMkI1OEIwMDYwMjA2RiAvKiBBc3luY1N0YWNrVHJh
Y2UuaCAqLzsgfTsKIAkJNkFEMkNCNEQxOUI5MTQwMTAwMDY1NzE5IC8qIERlYnVnZ2VyRXZhbEVu
YWJsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZB
RDJDQjRDMTlCOTE0MDEwMDA2NTcxOSAvKiBEZWJ1Z2dlckV2YWxFbmFibGVyLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNkJDQ0VDMDQyNUQxRkEy
NzAwMEYzOTFEIC8qIFZlcmlmaWVyU2xvdFZpc2l0b3JJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2QkNDRUMwMzI1RDFGQTI3MDAwRjM5MUQg
LyogVmVyaWZpZXJTbG90VmlzaXRvcklubGluZXMuaCAqLzsgfTsKIAkJNzAxMTNENEMxQThEQjA5
MzAwMzg0OEM0IC8qIEl0ZXJhdG9yT3BlcmF0aW9ucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzAxMTNENEExQThEQjA5MzAwMzg0OEM0IC8qIEl0ZXJh
dG9yT3BlcmF0aW9ucy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTcwMTNDQThDMUI0OTFBOTQwMENBRTYxMyAvKiBKU01pY3JvdGFzay5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzAxM0NBOEExQjQ5MUE5
NDAwQ0FFNjEzIC8qIEpTTWljcm90YXNrLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzA1QjQxQUMxQTZFNTAxRTAwNzE2NzU3IC8qIFN5bWJvbC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzA1QjQxQTQx
QTZFNTAxRTAwNzE2NzU3IC8qIFN5bWJvbC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CkBAIC0xOTE2LDYgKzE5MTcsNyBAQAogCQlFM0ZGNzUzMzFEOUNF
QTE4MDBDN0UxNkQgLyogRE9NSklUR2V0dGVyU2V0dGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFM0ZGNzUyRjFEOUNFQTEyMDBDN0UxNkQgLyogRE9N
SklUR2V0dGVyU2V0dGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJRTQ5REMxNkMxMkVGMjk0RTAwMTg0QTFGIC8qIFNvdXJjZVByb3ZpZGVyQ2Fj
aGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0OURD
MTUxMTJFRjI3MjIwMDE4NEExRiAvKiBTb3VyY2VQcm92aWRlckNhY2hlLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTQ5REMxNkQxMkVGMjk1MzAw
MTg0QTFGIC8qIFNvdXJjZVByb3ZpZGVyQ2FjaGVJdGVtLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDlEQzE0OTEyRUYyNjFBMDAxODRBMUYgLyogU291
cmNlUHJvdmlkZXJDYWNoZUl0ZW0uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OworCQlGRTA0MTU1MzI1MkVDMDczMDA5MUVCNUQgLyogU2xvdFZpc2l0b3JN
YWNyb3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZF
MDQxNTUyMjUyRUMwNzMwMDkxRUI1RCAvKiBTbG90VmlzaXRvck1hY3Jvcy5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUZFMDVGQUZEMUZFNENFREEw
MDA5MzIzMCAvKiBEZXByZWNhdGVkSW5zcGVjdG9yVmFsdWVzLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk5MkQ2QTExMUZCRDQ5MUQwMDAyNDVGNCAv
KiBEZXByZWNhdGVkSW5zcGVjdG9yVmFsdWVzLmNwcCAqLzsgfTsKIAkJRkUwODZCQ0EyMTIzREVG
QjAwM0YyOTI5IC8qIEVudHJ5RnJhbWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEZFMDg2QkM5MjEyM0RFRkEwMDNGMjkyOSAvKiBFbnRyeUZyYW1lLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRkUwRDRB
MDYxQUI4REQwQTAwMkY1NEJGIC8qIEV4ZWN1dGlvblRpbWVMaW1pdFRlc3QuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUwRDRBMDQxQUI4REQwQTAw
MkY1NEJGIC8qIEV4ZWN1dGlvblRpbWVMaW1pdFRlc3QuY3BwICovOyB9OwpAQCAtMTkzOCw5ICsx
OTQwLDExIEBACiAJCUZFMUUyQzNGMjI0MERENTgwMEY2QjcyOSAvKiBNYWNyb0Fzc2VtYmxlckFS
TTY0RS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUx
RTJDM0UyMjQwRDMwQjAwRjZCNzI5IC8qIE1hY3JvQXNzZW1ibGVyQVJNNjRFLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRkUxRTJDNDAyMjQwREQ2
MjAwRjZCNzI5IC8qIEFSTTY0RUFzc2VtYmxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRkUxRTJDM0QyMjQwRDJGNjAwRjZCNzI5IC8qIEFSTTY0RUFz
c2VtYmxlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCUZFMjBDRTlFMTVGMDRBOTUwMERGMzQzMCAvKiBMTEludENMb29wLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTIwQ0U5QzE1RjA0QTk1MDBERjM0
MzAgLyogTExJbnRDTG9vcC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CisJCUZFMjg3RDAyMjUyRkIyRTgwMEQ3MjNGOSAvKiBWZXJpZmllclNsb3RWaXNp
dG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTI4
N0QwMTI1MkZCMkU4MDBENzIzRjkgLyogVmVyaWZpZXJTbG90VmlzaXRvci5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUZFMkE4NzYwMUYwMjM4MTYw
MEVCMzFCMiAvKiBNaW5pbXVtUmVzZXJ2ZWRab25lU2l6ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUyQTg3NUYxRjAyMzgxNjAwRUIzMUIyIC8qIE1p
bmltdW1SZXNlcnZlZFpvbmVTaXplLmggKi87IH07CiAJCUZFMzAyMkQzMUUzRDczQTUwMEJBQzQ5
MyAvKiBTaWdpbGxDcmFzaEFuYWx5emVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBGRTMwMjJEMTFFM0Q3Mzk2MDBCQUM0OTMgLyogU2lnaWxsQ3Jhc2hB
bmFseXplci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCUZFMzAyMkQ3MUU0Mjg1NzMwMEJBQzQ5MyAvKiBWTUluc3BlY3Rvci5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUzMDIyRDUxRTQyODU2NzAwQkFD
NDkzIC8qIFZNSW5zcGVjdG9yLmggKi87IH07CisJCUZFMzM2QjUzMjVEQjQ5N0QwMDk4RjAzNCAv
KiBNYXJraW5nQ29uc3RyYWludEV4ZWN1dG9yUGFpci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUzMzZCNTIyNURCNDk3RDAwOThGMDM0IC8qIE1hcmtp
bmdDb25zdHJhaW50RXhlY3V0b3JQYWlyLmggKi87IH07CiAJCUZFMzQyMjEyMUQ2QjgxQzMwMDMy
QkU4OCAvKiBUaHJvd1Njb3BlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBGRTM0MjIxMTFENkI4MThDMDAzMkJFODggLyogVGhyb3dTY29wZS5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUZFMzRFRTIxMjQz
OThBQUUwMEFBMkU3QyAvKiBFbnN1cmVTdGlsbEFsaXZlSGVyZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUzNEVFMjAyNDM5OEE5QTAwQUEyRTdDIC8q
IEVuc3VyZVN0aWxsQWxpdmVIZXJlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJRkUzODQyMzMyMzI0RDUxQjAwOURENDQ1IC8qIE9wdGlvbnNMaXN0
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTM4NDIz
MTIzMjRENTFCMDA5REQ0NDUgLyogT3B0aW9uc0xpc3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMTk3Niw2ICsxOTgwLDggQEAKIAkJRkU4MEMx
OTcxRDc3NUNERDAwODUxMEMwIC8qIENhdGNoU2NvcGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFODBDMTk2MUQ3NzVCMjcwMDg1MTBDMCAvKiBDYXRj
aFNjb3BlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJRkU4REU1NEIyM0FDMURBRDAwNUM5MTQyIC8qIENhY2hlYWJsZUlkZW50aWZpZXIuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFOERFNTRBMjNBQzFE
QUQwMDVDOTE0MiAvKiBDYWNoZWFibGVJZGVudGlmaWVyLmggKi87IH07CiAJCUZFOERFNTREMjNB
QzFFODYwMDVDOTE0MiAvKiBDYWNoZWFibGVJZGVudGlmaWVySW5saW5lcy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkU4REU1NEMyM0FDMUU4NjAwNUM5
MTQyIC8qIENhY2hlYWJsZUlkZW50aWZpZXJJbmxpbmVzLmggKi87IH07CisJCUZFOTEyQjRGMjUz
MTE5MzMwMEZBQkRERiAvKiBBYnN0cmFjdFNsb3RWaXNpdG9yLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTkxMkI0RTI1MzExOTMzMDBGQUJEREYgLyog
QWJzdHJhY3RTbG90VmlzaXRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CisJCUZFOTEyQjUxMjUzMTFBRDEwMEZBQkRERiAvKiBBYnN0cmFjdFNsb3RW
aXNpdG9ySW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gRkU5MTJCNTAyNTMxMUFEMTAwRkFCRERGIC8qIEFic3RyYWN0U2xvdFZpc2l0b3JJbmxp
bmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
RkU5OUIyNDkxQzI0QzNEMzAwQzgyMTU5IC8qIEpJVE5lZ0dlbmVyYXRvci5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkU5OUIyNDgxQzI0QjZEMzAwQzgy
MTU5IC8qIEpJVE5lZ0dlbmVyYXRvci5oICovOyB9OwogCQlGRUEwODYyMDE4MkI3QTA0MDBGNkQ4
NTEgLyogQnJlYWtwb2ludC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRkVBMDg2MUUxODJCN0EwNDAwRjZEODUxIC8qIEJyZWFrcG9pbnQuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlGRUEwODYyMTE4MkI3
QTA0MDBGNkQ4NTEgLyogRGVidWdnZXJQcmltaXRpdmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRUEwODYxRjE4MkI3QTA0MDBGNkQ4NTEgLyogRGVi
dWdnZXJQcmltaXRpdmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKQEAgLTM5ODgsNiArMzk5NCw3IEBACiAJCTZBMzhDRkE4MUUzMkI1OEIwMDYwMjA2
RiAvKiBBc3luY1N0YWNrVHJhY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
QXN5bmNTdGFja1RyYWNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZBRDJDQjRD
MTlCOTE0MDEwMDA2NTcxOSAvKiBEZWJ1Z2dlckV2YWxFbmFibGVyLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IERlYnVnZ2VyRXZhbEVuYWJsZXIuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNkJBOTNDOTU5MDQ4NEM1QkFEOTMxNkVBIC8qIEpTU2NyaXB0RmV0Y2hl
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1NjcmlwdEZldGNoZXIuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNkJDQ0VDMDMyNUQxRkEyNzAwMEYzOTFEIC8q
IFZlcmlmaWVyU2xvdFZpc2l0b3JJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFZlcmlmaWVyU2xvdFZpc2l0b3JJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTcwMTEzRDQ5MUE4REIwOTMwMDM4NDhDNCAvKiBJdGVyYXRvck9wZXJhdGlvbnMu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSXRlcmF0b3JPcGVyYXRp
b25zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzAxMTNENEExQThEQjA5MzAw
Mzg0OEM0IC8qIEl0ZXJhdG9yT3BlcmF0aW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBJdGVyYXRvck9wZXJhdGlvbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNzAxM0NBODkxQjQ5MUE5NDAwQ0FFNjEzIC8qIEpTTWljcm90YXNrLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTTWljcm90YXNrLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTUyMjEsNiArNTIyOCw3IEBACiAJCUY2OTJBODg3MDI1NTU5N0Qw
MUZGNjBGNyAvKiBKU0NKU1ZhbHVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTQ0pTVmFsdWUuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB0YWJXaWR0aCA9IDg7IH07CiAJCUY3MzkyNjkxOERDNjQzMzBBRkNERjBENyAvKiBK
U1NvdXJjZUNvZGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNT
b3VyY2VDb2RlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkUwMDI2MjIyM0Yz
QUYzMzAwM0EzNThGIC8qIFdlYkFzc2VtYmx5LmFzbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYXNtLmFzbTsgbmFtZSA9IFdlYkFz
c2VtYmx5LmFzbTsgcGF0aCA9IGxsaW50L1dlYkFzc2VtYmx5LmFzbTsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJRkUwNDE1NTIyNTJFQzA3MzAwOTFFQjVEIC8qIFNsb3RWaXNpdG9yTWFj
cm9zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNsb3RWaXNpdG9yTWFjcm9z
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFMDg2QkM5MjEyM0RFRkEwMDNGMjky
OSAvKiBFbnRyeUZyYW1lLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEVudHJ5
RnJhbWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkUwRDRBMDQxQUI4REQwQTAw
MkY1NEJGIC8qIEV4ZWN1dGlvblRpbWVMaW1pdFRlc3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBuYW1lID0gRXhlY3V0aW9uVGltZUxpbWl0VGVzdC5jcHA7IHBhdGggPSBBUEkv
dGVzdHMvRXhlY3V0aW9uVGltZUxpbWl0VGVzdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUZFMEQ0QTA1MUFCOEREMEEwMDJGNTRCRiAvKiBFeGVjdXRpb25UaW1lTGltaXRUZXN0
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEV4ZWN1dGlvblRpbWVMaW1pdFRl
c3QuaDsgcGF0aCA9IEFQSS90ZXN0cy9FeGVjdXRpb25UaW1lTGltaXRUZXN0Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01MjU1LDEyICs1MjYzLDE1IEBACiAJCUZFMUUyQzNFMjI0
MEQzMEIwMEY2QjcyOSAvKiBNYWNyb0Fzc2VtYmxlckFSTTY0RS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBNYWNyb0Fzc2VtYmxlckFSTTY0RS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlGRTIwQ0U5QjE1RjA0QTk1MDBERjM0MzAgLyogTExJbnRDTG9vcC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBMTEludENMb29wLmNwcDsgcGF0
aCA9IGxsaW50L0xMSW50Q0xvb3AuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlG
RTIwQ0U5QzE1RjA0QTk1MDBERjM0MzAgLyogTExJbnRDTG9vcC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBMTEludENMb29wLmg7IHBhdGggPSBsbGludC9MTEludENMb29wLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZFMjg3RDAxMjUyRkIyRTgwMEQ3MjNGOSAv
KiBWZXJpZmllclNsb3RWaXNpdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFZlcmlmaWVyU2xvdFZpc2l0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkUy
QTg3NUYxRjAyMzgxNjAwRUIzMUIyIC8qIE1pbmltdW1SZXNlcnZlZFpvbmVTaXplLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IE1pbmltdW1SZXNlcnZlZFpvbmVTaXplLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUZFMkJENjZFMjVDMERDODIwMDk5OUQzQiAvKiBWZXJpZmllclNsb3RWaXNpdG9y
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFZlcmlmaWVyU2xvdFZp
c2l0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTJFNkE3QTFENkVBNUZF
MDA2MEY4OTYgLyogVGhyb3dTY29wZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBUaHJvd1Njb3BlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkUz
MDIyRDAxRTNENzM5NjAwQkFDNDkzIC8qIFNpZ2lsbENyYXNoQW5hbHl6ZXIuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2lnaWxsQ3Jhc2hBbmFseXplci5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFMzAyMkQxMUUzRDczOTYwMEJBQzQ5MyAvKiBT
aWdpbGxDcmFzaEFuYWx5emVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNp
Z2lsbENyYXNoQW5hbHl6ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkUzMDIy
RDQxRTQyODU2NzAwQkFDNDkzIC8qIFZNSW5zcGVjdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFZNSW5zcGVjdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJRkUzMDIyRDUxRTQyODU2NzAwQkFDNDkzIC8qIFZNSW5zcGVjdG9yLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZNSW5zcGVjdG9yLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCUZFMzM2QjUyMjVEQjQ5N0QwMDk4RjAzNCAvKiBNYXJraW5nQ29uc3Ry
YWludEV4ZWN1dG9yUGFpci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNYXJr
aW5nQ29uc3RyYWludEV4ZWN1dG9yUGFpci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlGRTM0MjIxMTFENkI4MThDMDAzMkJFODggLyogVGhyb3dTY29wZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBUaHJvd1Njb3BlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUZFMzRFRTIwMjQzOThBOUEwMEFBMkU3QyAvKiBFbnN1cmVTdGlsbEFsaXZlSGVyZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBFbnN1cmVTdGlsbEFsaXZlSGVyZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlGRTM0RUUyMjI0Mzk4Qjg1MDBBQTJFN0MgLyogRW5zdXJlU3RpbGxBbGl2
ZUhlcmUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRW5zdXJlU3Rp
bGxBbGl2ZUhlcmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNTMyOSw2ICs1
MzQwLDggQEAKIAkJRkU4REU1NEMyM0FDMUU4NjAwNUM5MTQyIC8qIENhY2hlYWJsZUlkZW50aWZp
ZXJJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENhY2hlYWJsZUlk
ZW50aWZpZXJJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFOERFNTRF
MjNBQzNBOEUwMDVDOTE0MiAvKiBDYWNoZWFibGVJZGVudGlmaWVyLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IENhY2hlYWJsZUlkZW50aWZpZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlGRTkwQkIzQTFCN0NGNjRFMDA2QjNGMDMgLyogVk1JbmxpbmVzLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZNSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlGRTkxMkI0RTI1MzExOTMzMDBGQUJEREYgLyogQWJzdHJhY3RTbG90VmlzaXRvci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBYnN0cmFjdFNsb3RWaXNpdG9yLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZFOTEyQjUwMjUzMTFBRDEwMEZBQkRERiAv
KiBBYnN0cmFjdFNsb3RWaXNpdG9ySW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBBYnN0cmFjdFNsb3RWaXNpdG9ySW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlGRTk4QjVCNjFCQjlBRTExMDA3M0U3QTYgLyogSklUU3ViR2VuZXJhdG9yLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpJVFN1YkdlbmVyYXRvci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTk5QjI0NzFDMjRCNkQzMDBDODIxNTkgLyogSklU
TmVnR2VuZXJhdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpJ
VE5lZ0dlbmVyYXRvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFOTlCMjQ4
MUMyNEI2RDMwMEM4MjE1OSAvKiBKSVROZWdHZW5lcmF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSklUTmVnR2VuZXJhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC02Mjc4LDYgKzYyOTEsOCBAQAogCQkxNDJFMzEyQTEzNEZGMEE2MDBBRkFEQjUgLyog
aGVhcCAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJRkU5
MTJCNEUyNTMxMTkzMzAwRkFCRERGIC8qIEFic3RyYWN0U2xvdFZpc2l0b3IuaCAqLywKKwkJCQlG
RTkxMkI1MDI1MzExQUQxMDBGQUJEREYgLyogQWJzdHJhY3RTbG90VmlzaXRvcklubGluZXMuaCAq
LywKIAkJCQkwRkVDM0M1MDFGMzNBNDE2MDBGNTlCNkMgLyogQWxpZ25lZE1lbW9yeUFsbG9jYXRv
ci5jcHAgKi8sCiAJCQkJMEZFQzNDNTExRjMzQTQxNjAwRjU5QjZDIC8qIEFsaWduZWRNZW1vcnlB
bGxvY2F0b3IuaCAqLywKIAkJCQkwRkE3NjIwQTFEQjk1OUY2MDBCN0EyRkQgLyogQWxsb2NhdGlu
Z1Njb3BlLmggKi8sCkBAIC02NDA5LDYgKzY0MjQsNyBAQAogCQkJCTBGN0RGMTMwMUUyOTcwRDUw
MDk1OTUxQiAvKiBNYXJrZWRTcGFjZUlubGluZXMuaCAqLywKIAkJCQkwRjY2MEUzMzFFMDUxN0I3
MDAzMTQ2MkMgLyogTWFya2luZ0NvbnN0cmFpbnQuY3BwICovLAogCQkJCTBGNjYwRTM0MUUwNTE3
QjcwMDMxNDYyQyAvKiBNYXJraW5nQ29uc3RyYWludC5oICovLAorCQkJCUZFMzM2QjUyMjVEQjQ5
N0QwMDk4RjAzNCAvKiBNYXJraW5nQ29uc3RyYWludEV4ZWN1dG9yUGFpci5oICovLAogCQkJCTBG
NjYwRTM1MUUwNTE3QjcwMDMxNDYyQyAvKiBNYXJraW5nQ29uc3RyYWludFNldC5jcHAgKi8sCiAJ
CQkJMEY2NjBFMzYxRTA1MTdCODAwMzE0NjJDIC8qIE1hcmtpbmdDb25zdHJhaW50U2V0LmggKi8s
CiAJCQkJMEY5REFBMDYxRkQxQzNDODAwNzlDNUIyIC8qIE1hcmtpbmdDb25zdHJhaW50U29sdmVy
LmNwcCAqLywKQEAgLTY0MzUsNiArNjQ1MSw3IEBACiAJCQkJQzIyNTQ5NDIxNUY3REJBQTAwNjVF
ODk4IC8qIFNsb3RWaXNpdG9yLmNwcCAqLywKIAkJCQkxNEJBNzhGMDEzQUFCODhGMDA1QjdDMkMg
LyogU2xvdFZpc2l0b3IuaCAqLywKIAkJCQkwRkNCNDA4NTE1QzBBM0MzMDA0ODkzMkIgLyogU2xv
dFZpc2l0b3JJbmxpbmVzLmggKi8sCisJCQkJRkUwNDE1NTIyNTJFQzA3MzAwOTFFQjVEIC8qIFNs
b3RWaXNpdG9yTWFjcm9zLmggKi8sCiAJCQkJMEZERTg3RkExREZFNkU1MDAwNjRDMzkwIC8qIFNw
YWNlVGltZU11dGF0b3JTY2hlZHVsZXIuY3BwICovLAogCQkJCTBGREU4N0ZCMURGRTZFNTAwMDY0
QzM5MCAvKiBTcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyLmggKi8sCiAJCQkJMEY0RjgyODkxRTMx
Qjk3MTAwNzUxODRDIC8qIFN0b2NoYXN0aWNTcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyLmNwcCAq
LywKQEAgLTY0NTIsNiArNjQ2OSw5IEBACiAJCQkJMEYxRkIzOEExRTE3M0E2MjAwQTlCRTUwIC8q
IFN5bmNocm9ub3VzU3RvcFRoZVdvcmxkTXV0YXRvclNjaGVkdWxlci5jcHAgKi8sCiAJCQkJMEYx
RkIzOEIxRTE3M0E2MjAwQTlCRTUwIC8qIFN5bmNocm9ub3VzU3RvcFRoZVdvcmxkTXV0YXRvclNj
aGVkdWxlci5oICovLAogCQkJCTE0MTQ0OENDMTNBMTc4MzcwMEY1QkExQSAvKiBUaW55Qmxvb21G
aWx0ZXIuaCAqLywKKwkJCQlGRTJCRDY2RTI1QzBEQzgyMDA5OTlEM0IgLyogVmVyaWZpZXJTbG90
VmlzaXRvci5jcHAgKi8sCisJCQkJRkUyODdEMDEyNTJGQjJFODAwRDcyM0Y5IC8qIFZlcmlmaWVy
U2xvdFZpc2l0b3IuaCAqLywKKwkJCQk2QkNDRUMwMzI1RDFGQTI3MDAwRjM5MUQgLyogVmVyaWZp
ZXJTbG90VmlzaXRvcklubGluZXMuaCAqLywKIAkJCQkwRjREOEM3MjFGQzdBOTczMDAxRDMyQUMg
LyogVmlzaXRDb3VudGVyLmggKi8sCiAJCQkJMEY5NTJBOUYxREY3ODYwNzAwRTA2RkJEIC8qIFZp
c2l0UmFjZUtleS5jcHAgKi8sCiAJCQkJMEY5NTJBQTAxREY3ODYwNzAwRTA2RkJEIC8qIFZpc2l0
UmFjZUtleS5oICovLApAQCAtOTI5Myw2ICs5MzEzLDcgQEAKIAkJCQkxNDdCODNBQzBFNkRCOEM5
MDA0Nzc1QTQgLyogQmF0Y2hlZFRyYW5zaXRpb25PcHRpbWl6ZXIuaCBpbiBIZWFkZXJzICovLAog
CQkJCUUzNUU4OUZEMjVDNTBGODcwMDcxRUUxRSAvKiBCaWdJbnQ2NEFycmF5LmggaW4gSGVhZGVy
cyAqLywKIAkJCQk4Njk3NkU1RjFGQTNFOEJDMDBFN0M0RTEgLyogQmlnSW50Q29uc3RydWN0b3Iu
aCBpbiBIZWFkZXJzICovLAorCQkJCUZFMDQxNTUzMjUyRUMwNzMwMDkxRUI1RCAvKiBTbG90Vmlz
aXRvck1hY3Jvcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODY2NzM5RDIxM0JGREU3MTAwMjNEODdD
IC8qIEJpZ0ludGVnZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2MTgxNjc3MUZCNzkyNDIwMEVD
QzRFQyAvKiBCaWdJbnRPYmplY3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2OTc2RTVFMUZBM0U4
QjYwMEU3QzRFMSAvKiBCaWdJbnRQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovLApAQCAtOTU3NCw2
ICs5NTk1LDcgQEAKIAkJCQkwRkQ4MkU1NzE0MURBRjEwMDAxNzlDOTQgLyogREZHT1NSRW50cnku
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGRDhBMzI2MTdENTFGNTcwMENBMkM0MCAvKiBERkdPU1JF
bnRyeXBvaW50Q3JlYXRpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZDMDk3NkExNDY4
QTZGNzAwQ0YyNDQyIC8qIERGR09TUkV4aXQuaCBpbiBIZWFkZXJzICovLAorCQkJCUZFOTEyQjRG
MjUzMTE5MzMwMEZBQkRERiAvKiBBYnN0cmFjdFNsb3RWaXNpdG9yLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRjIzNUJFQzE3MTc4RTczMDA2OTBDN0YgLyogREZHT1NSRXhpdEJhc2UuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGRkI5MjFDMTZEMDJGMTEwMDU1QTVEQiAvKiBERkdPU1JFeGl0Q29tcGls
YXRpb25JbmZvLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjcwMjVBQTE3MTRCMEZDMDAzODJDMEUg
LyogREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmggaW4gSGVhZGVycyAqLywKQEAgLTk4NTksNiAr
OTg4MSw3IEBACiAJCQkJQTUxM0U1QkUxODVCRkFDQzAwN0U5NUFEIC8qIEluamVjdGVkU2NyaXB0
SG9zdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTUxM0U1Q0IxODVGOTYyNDAwN0U5NUFEIC8qIElu
amVjdGVkU2NyaXB0TWFuYWdlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTU4NDBFMjExODdCN0I4
NjAwODQzQjEwIC8qIEluamVjdGVkU2NyaXB0TW9kdWxlLmggaW4gSGVhZGVycyAqLywKKwkJCQlG
RTI4N0QwMjI1MkZCMkU4MDBENzIzRjkgLyogVmVyaWZpZXJTbG90VmlzaXRvci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQTUxM0U1QzcxODVGOTQ0NjAwN0U5NUFEIC8qIEluamVjdGVkU2NyaXB0U291
cmNlLmggaW4gSGVhZGVycyAqLywKIAkJCQk5OTU5RTkzMjFCRDE4Mjc5MDAxQUE0MTMgLyogaW5s
aW5lLWFuZC1taW5pZnktc3R5bGVzaGVldHMtYW5kLXNjcmlwdHMucHkgaW4gSGVhZGVycyAqLywK
IAkJCQk3OTA1QkI2OTFEMTIwNTBFMDAxOUZFNTcgLyogSW5saW5lQWNjZXNzLmggaW4gSGVhZGVy
cyAqLywKQEAgLTk5OTgsNiArMTAwMjEsNyBAQAogCQkJCTUzQzRGNjZCMjFCMUE0MDkwMDJGRDAw
OSAvKiBKU0FQSUdsb2JhbE9iamVjdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODQwNDgwMTMxMDIx
QTFEOTAwOEU3RjAxIC8qIEpTQVBJVmFsdWVXcmFwcGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlD
MkNGMzlDMjE2RTE1QTgxMDBERDY5QkUgLyogSlNBUElXcmFwcGVyT2JqZWN0LmggaW4gSGVhZGVy
cyAqLywKKwkJCQlGRTMzNkI1MzI1REI0OTdEMDA5OEYwMzQgLyogTWFya2luZ0NvbnN0cmFpbnRF
eGVjdXRvclBhaXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDE3MEUxNkY1Q0QwMEIzNDQ2
MCAvKiBKU0FycmF5LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCNjZFMzE3QjZCNUFCMDBBN0FF
M0YgLyogSlNBcnJheUJ1ZmZlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjY2RTUxN0I2QjVB
QjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCkBA
IC0xMDAzNCw2ICsxMDA1OCw3IEBACiAJCQkJQTU4QzAyNDIxOEU0QTQxQTAwMDMyQkM1IC8qIEpT
Q29udGV4dFByaXZhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDFFMEUxNkY1Q0QwMEIz
NDQ2MCAvKiBKU0NvbnRleHRSZWYuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1RUE3MEVFMTlGNUI1
QzQwMDk4RjVFQyAvKiBKU0NvbnRleHRSZWZJbnNwZWN0b3JTdXBwb3J0LmggaW4gSGVhZGVycyAq
LywKKwkJCQk2QkNDRUMwNDI1RDFGQTI3MDAwRjM5MUQgLyogVmVyaWZpZXJTbG90VmlzaXRvcklu
bGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1RDJFNjY1MTk1RTE3NDAwMEE1MThFNyAvKiBK
U0NvbnRleHRSZWZJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQ4Q0QxRDgxMDhDRjkw
MjAwODE2M0M2IC8qIEpTQ29udGV4dFJlZlByaXZhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUZF
NzQ5N0U2MjA5MDAxQjEwMDAzNTY1QiAvKiBKU0NQdHJUYWcuaCBpbiBIZWFkZXJzICovLApAQCAt
MTAxNjQsNiArMTAxODksNyBAQAogCQkJCTc5NUFDNjE4MjBBMjM1NUUwMDUyQzc2QyAvKiBKU1Zp
cnR1YWxNYWNoaW5lUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdDQTNBRTgxN0RBNDFB
RTAwNjUzOEFGIC8qIEpTV2Vha01hcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc0ODJFOTMxMTZB
N0NBRDAwM0IwNzEyIC8qIEpTV2Vha09iamVjdE1hcFJlZkludGVybmFsLmggaW4gSGVhZGVycyAq
LywKKwkJCQlGRTkxMkI1MTI1MzExQUQxMDBGQUJEREYgLyogQWJzdHJhY3RTbG90VmlzaXRvcklu
bGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3NDgyQjkzMTE2NzExNDcwMDNCMDcxMiAvKiBK
U1dlYWtPYmplY3RNYXBSZWZQcml2YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MzlCRkJCMDIy
QUQzQ0RDMDAyM0Y0QzAgLyogSlNXZWFrT2JqZWN0UmVmLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RjBCMjg2QjFFQjhFNkNGMDAwRUI1RDIgLyogSlNXZWFrUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8s
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy93a2J1aWx0aW5zL2J1aWx0aW5z
X2dlbmVyYXRlX2ludGVybmFsc193cmFwcGVyX2hlYWRlci5weQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy93a2J1aWx0aW5zL2J1aWx0aW5zX2dlbmVyYXRlX2lu
dGVybmFsc193cmFwcGVyX2hlYWRlci5weQkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL1NjcmlwdHMvd2tidWlsdGlucy9idWlsdGluc19nZW5lcmF0ZV9pbnRlcm5h
bHNfd3JhcHBlcl9oZWFkZXIucHkJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAjIS91
c3IvYmluL2VudiBweXRob24KICMKLSMgQ29weXJpZ2h0IChjKSAyMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyMgQ29weXJpZ2h0IChjKSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogIwogIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICMgbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC05Myw3
ICs5Myw3IEBAIGNsYXNzIEJ1aWx0aW5zSW50ZXJuYWxzV3JhcHBlckhlYWRlckdlbmUKIAogICAg
IGRlZiBnZW5lcmF0ZV9tZXRob2RzKHNlbGYpOgogICAgICAgICByZXR1cm4gIiIiCi0gICAgdm9p
ZCB2aXNpdChKU0M6OlNsb3RWaXNpdG9yJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRv
cj4gdm9pZCB2aXNpdChWaXNpdG9yJik7CiAgICAgdm9pZCBpbml0aWFsaXplKEpTRE9NR2xvYmFs
T2JqZWN0Jik7CiAiIiIKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvd2ti
dWlsdGlucy9idWlsdGluc19nZW5lcmF0ZV9pbnRlcm5hbHNfd3JhcHBlcl9pbXBsZW1lbnRhdGlv
bi5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy93a2J1aWx0
aW5zL2J1aWx0aW5zX2dlbmVyYXRlX2ludGVybmFsc193cmFwcGVyX2ltcGxlbWVudGF0aW9uLnB5
CShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy93a2J1
aWx0aW5zL2J1aWx0aW5zX2dlbmVyYXRlX2ludGVybmFsc193cmFwcGVyX2ltcGxlbWVudGF0aW9u
LnB5CSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogIyEvdXNyL2Jpbi9lbnYgcHl0aG9u
CiAjCi0jIENvcHlyaWdodCAoYykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisjIENvcHlyaWdodCAoYykgMjAxNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICMKICMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTIwLDEzICsxMjAsMTYgQEAgY2xh
c3MgQnVpbHRpbnNJbnRlcm5hbHNXcmFwcGVySW1wbGVtZW50YQogICAgICAgICByZXR1cm4gJ1xu
Jy5qb2luKGxpbmVzKQogCiAgICAgZGVmIGdlbmVyYXRlX3Zpc2l0X21ldGhvZChzZWxmKToKLSAg
ICAgICAgbGluZXMgPSBbInZvaWQgSlNCdWlsdGluSW50ZXJuYWxGdW5jdGlvbnM6OnZpc2l0KEpT
Qzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpIiwKKyAgICAgICAgbGluZXMgPSBbInRlbXBsYXRlPHR5
cGVuYW1lIFZpc2l0b3I+IiwKKyAgICAgICAgICAgICAgICAgInZvaWQgSlNCdWlsdGluSW50ZXJu
YWxGdW5jdGlvbnM6OnZpc2l0KFZpc2l0b3ImIHZpc2l0b3IpIiwKICAgICAgICAgICAgICAgICAg
InsiXQogICAgICAgICBmb3Igb2JqZWN0IGluIHNlbGYuaW50ZXJuYWxzOgogICAgICAgICAgICAg
dmlzaXQgPSAiICAgICVzLnZpc2l0KHZpc2l0b3IpOyIgJSBzZWxmLm1lbWJlcl9uYW1lKG9iamVj
dCkKICAgICAgICAgICAgIGxpbmVzLmFwcGVuZChCdWlsdGluc0dlbmVyYXRvci53cmFwX3dpdGhf
Z3VhcmQob2JqZWN0LmFubm90YXRpb25zLmdldCgnY29uZGl0aW9uYWwnKSwgdmlzaXQpKQogICAg
ICAgICBsaW5lcy5hcHBlbmQoIiAgICBVTlVTRURfUEFSQU0odmlzaXRvcik7IikKICAgICAgICAg
bGluZXMuYXBwZW5kKCJ9XG4iKQorICAgICAgICBsaW5lcy5hcHBlbmQoInRlbXBsYXRlIHZvaWQg
SlNCdWlsdGluSW50ZXJuYWxGdW5jdGlvbnM6OnZpc2l0KEFic3RyYWN0U2xvdFZpc2l0b3ImKTsi
KQorICAgICAgICBsaW5lcy5hcHBlbmQoInRlbXBsYXRlIHZvaWQgSlNCdWlsdGluSW50ZXJuYWxG
dW5jdGlvbnM6OnZpc2l0KFNsb3RWaXNpdG9yJik7XG4iKQogICAgICAgICByZXR1cm4gJ1xuJy5q
b2luKGxpbmVzKQogCiAgICAgZGVmIF9nZW5lcmF0ZV9pbml0aWFsaXplX3N0YXRpY19nbG9iYWxz
KHNlbGYpOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvd2tidWlsdGlucy9i
dWlsdGluc190ZW1wbGF0ZXMucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L1NjcmlwdHMvd2tidWlsdGlucy9idWlsdGluc190ZW1wbGF0ZXMucHkJKHJldmlzaW9uIDI3Mjgz
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL3drYnVpbHRpbnMvYnVpbHRpbnNf
dGVtcGxhdGVzLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogIyEvdXNyL2Jpbi9l
bnYgcHl0aG9uCiAjCi0jIENvcHlyaWdodCAoYykgMjAxNC0yMDE5IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyMgQ29weXJpZ2h0IChjKSAyMDE0LTIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogIyBDb3B5cmlnaHQgKEMpIDIwMTUgQ2Fub24gSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogIwogIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTE4OCw3ICsxODgsNyBAQCBwdWJsaWM6
CiAgICAgZXhwbGljaXQgJHtvYmplY3ROYW1lfUJ1aWx0aW5GdW5jdGlvbnMoSlNDOjpWTSYgdm0p
IDogbV92bSh2bSkgeyB9CiAKICAgICB2b2lkIGluaXQoSlNDOjpKU0dsb2JhbE9iamVjdCYpOwot
ICAgIHZvaWQgdmlzaXQoSlNDOjpTbG90VmlzaXRvciYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFZpc2l0b3I+IHZvaWQgdmlzaXQoVmlzaXRvciYpOwogCiBwdWJsaWM6CiAgICAgSlNDOjpWTSYg
bV92bTsKQEAgLTIwNywxMCArMjA3LDE1IEBAIGlubGluZSB2b2lkICR7b2JqZWN0TmFtZX1CdWls
dGluRnVuY3Rpb24KICN1bmRlZiBFWFBPUlRfRlVOQ1RJT04KIH0KIAotaW5saW5lIHZvaWQgJHtv
YmplY3ROYW1lfUJ1aWx0aW5GdW5jdGlvbnM6OnZpc2l0KEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0
b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgoraW5saW5lIHZvaWQgJHtvYmplY3ROYW1l
fUJ1aWx0aW5GdW5jdGlvbnM6OnZpc2l0KFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAjZGVmaW5lIFZJ
U0lUX0ZVTkNUSU9OKG5hbWUpIHZpc2l0b3IuYXBwZW5kKG1fIyNuYW1lIyNGdW5jdGlvbik7CiAg
ICAgJHttYWNyb1ByZWZpeH1fRk9SRUFDSF8ke29iamVjdE1hY3JvfV9CVUlMVElOX0ZVTkNUSU9O
X05BTUUoVklTSVRfRlVOQ1RJT04pCiAjdW5kZWYgVklTSVRfRlVOQ1RJT04KIH0KKwordGVtcGxh
dGUgdm9pZCAke29iamVjdE5hbWV9QnVpbHRpbkZ1bmN0aW9uczo6dmlzaXQoSlNDOjpBYnN0cmFj
dFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkICR7b2JqZWN0TmFtZX1CdWlsdGluRnVuY3Rp
b25zOjp2aXNpdChKU0M6OlNsb3RWaXNpdG9yJik7CisKICIiIikKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAJKHJldmlzaW9uIDI3MjgzMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTc1Nyw3ICs3NTcsOCBAQCBib29sIEFjY2Vzc0Nhc2U6OnZpc2l0V2VhayhW
TSYgdm0pIGNvbnN0CiAgICAgcmV0dXJuIGlzVmFsaWQ7CiB9CiAKLWJvb2wgQWNjZXNzQ2FzZTo6
cHJvcGFnYXRlVHJhbnNpdGlvbnMoU2xvdFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0Cit0ZW1wbGF0
ZTx0eXBlbmFtZSBWaXNpdG9yPgorYm9vbCBBY2Nlc3NDYXNlOjpwcm9wYWdhdGVUcmFuc2l0aW9u
cyhWaXNpdG9yJiB2aXNpdG9yKSBjb25zdAogewogICAgIGJvb2wgcmVzdWx0ID0gdHJ1ZTsKIApA
QCAtNzcyLDcgKzc3Myw3IEBAIGJvb2wgQWNjZXNzQ2FzZTo6cHJvcGFnYXRlVHJhbnNpdGlvbnMo
U2wKICAgICBzd2l0Y2ggKG1fdHlwZSkgewogICAgIGNhc2UgVHJhbnNpdGlvbjoKICAgICBjYXNl
IERlbGV0ZToKLSAgICAgICAgaWYgKHZpc2l0b3Iudm0oKS5oZWFwLmlzTWFya2VkKG1fc3RydWN0
dXJlLT5wcmV2aW91c0lEKCkpKQorICAgICAgICBpZiAodmlzaXRvci5pc01hcmtlZChtX3N0cnVj
dHVyZS0+cHJldmlvdXNJRCgpKSkKICAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVy
ZWQobV9zdHJ1Y3R1cmUuZ2V0KCkpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICByZXN1bHQg
PSBmYWxzZTsKQEAgLTc4NCwxMSArNzg1LDE4IEBAIGJvb2wgQWNjZXNzQ2FzZTo6cHJvcGFnYXRl
VHJhbnNpdGlvbnMoU2wKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi12b2lkIEFjY2Vzc0Nhc2U6
OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBjb25zdAordGVtcGxhdGUgYm9v
bCBBY2Nlc3NDYXNlOjpwcm9wYWdhdGVUcmFuc2l0aW9ucyhBYnN0cmFjdFNsb3RWaXNpdG9yJikg
Y29uc3Q7Cit0ZW1wbGF0ZSBib29sIEFjY2Vzc0Nhc2U6OnByb3BhZ2F0ZVRyYW5zaXRpb25zKFNs
b3RWaXNpdG9yJikgY29uc3Q7CisKKwordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQg
QWNjZXNzQ2FzZTo6dmlzaXRBZ2dyZWdhdGVJbXBsKFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0CiB7
CiAgICAgbV9pZGVudGlmaWVyLnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOwogfQogCitERUZJTkVf
VklTSVRfQUdHUkVHQVRFX1dJVEhfTU9ESUZJRVIoQWNjZXNzQ2FzZSwgY29uc3QpOworCiB2b2lk
IEFjY2Vzc0Nhc2U6OmdlbmVyYXRlV2l0aEd1YXJkKAogICAgIEFjY2Vzc0dlbmVyYXRpb25TdGF0
ZSYgc3RhdGUsIENDYWxsSGVscGVyczo6SnVtcExpc3QmIGZhbGxUaHJvdWdoKQogewpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5oCShyZXZpc2lvbiAy
NzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNy0y
MDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
Ny0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMjgwLDkgKzI4MCw5IEBAIHByaXZhdGU6CiAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgRnVuY3Rvcj4KICAgICB2b2lkIGZvckVhY2hEZXBlbmRlbnRDZWxsKFZNJiwgY29u
c3QgRnVuY3RvciYpIGNvbnN0OwogCi0gICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRv
ciYpIGNvbnN0OworICAgIERFQ0xBUkVfVklTSVRfQUdHUkVHQVRFX1dJVEhfTU9ESUZJRVIoY29u
c3QpOwogICAgIGJvb2wgdmlzaXRXZWFrKFZNJikgY29uc3Q7Ci0gICAgYm9vbCBwcm9wYWdhdGVU
cmFuc2l0aW9ucyhTbG90VmlzaXRvciYpIGNvbnN0OworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZp
c2l0b3I+IGJvb2wgcHJvcGFnYXRlVHJhbnNpdGlvbnMoVmlzaXRvciYpIGNvbnN0OwogCiAgICAg
Ly8gRklYTUU6IFRoaXMgb25seSBleGlzdHMgYmVjYXVzZSBvZiBob3cgQWNjZXNzQ2FzZSBwdXRz
IHBvc3QtZ2VuZXJhdGlvbiB0aGluZ3MgaW50byBpdHNlbGYuCiAgICAgLy8gaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NjQ1NgpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0J5VmFsSW5mby5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0J5VmFsSW5mby5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeVZhbEluZm8uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAtMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTMyLDExICszMiwxNCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogI2lmIEVOQUJMRShKSVQpCiAKLXZv
aWQgQnlWYWxJbmZvOjp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBs
YXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEJ5VmFsSW5mbzo6dmlzaXRBZ2dyZWdhdGVJbXBs
KFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgY2FjaGVkSWQudmlzaXRBZ2dyZWdhdGUodmlzaXRv
cik7CiB9CiAKK0RFRklORV9WSVNJVF9BR0dSRUdBVEUoQnlWYWxJbmZvKTsKKwogI2VuZGlmIC8v
IEVOQUJMRShKSVQpCiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0J5VmFsSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9CeVZhbEluZm8uaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5VmFsSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE4IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MjYwLDcgKzI2MCw3IEBAIHN0cnVjdCBCeVZhbEluZm8gewogICAgICAgICB0aGlzLT5zZWVuID0g
ZmFsc2U7CiAgICAgfQogCi0gICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYpOwor
ICAgIERFQ0xBUkVfVklTSVRfQUdHUkVHQVRFOwogCiAgICAgQ29kZUxvY2F0aW9uSnVtcDxKU0lu
dGVybmFsUHRyVGFnPiBub3RJbmRleEp1bXA7CiAgICAgQ29kZUxvY2F0aW9uSnVtcDxKU0ludGVy
bmFsUHRyVGFnPiBiYWRUeXBlSnVtcDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9DaGVja1ByaXZhdGVCcmFuZFN0YXR1cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NoZWNrUHJpdmF0ZUJyYW5kU3RhdHVzLmNwcAkocmV2aXNp
b24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NoZWNrUHJpdmF0
ZUJyYW5kU3RhdHVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjI4LDE4ICsyMjgsMjUgQEAgQ2Fj
aGVhYmxlSWRlbnRpZmllciBDaGVja1ByaXZhdGVCcmFuZFN0YQogICAgIHJldHVybiByZXN1bHQ7
CiB9CiAKLXZvaWQgQ2hlY2tQcml2YXRlQnJhbmRTdGF0dXM6OnZpc2l0QWdncmVnYXRlKFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgQ2hlY2tQ
cml2YXRlQnJhbmRTdGF0dXM6OnZpc2l0QWdncmVnYXRlSW1wbChWaXNpdG9yJiB2aXNpdG9yKQog
ewogICAgIGZvciAoQ2hlY2tQcml2YXRlQnJhbmRWYXJpYW50JiB2YXJpYW50IDogbV92YXJpYW50
cykKICAgICAgICAgdmFyaWFudC52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKIH0KIAotdm9pZCBD
aGVja1ByaXZhdGVCcmFuZFN0YXR1czo6bWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImIHZpc2l0b3Ip
CitERUZJTkVfVklTSVRfQUdHUkVHQVRFKENoZWNrUHJpdmF0ZUJyYW5kU3RhdHVzKTsKKwordGVt
cGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgQ2hlY2tQcml2YXRlQnJhbmRTdGF0dXM6Om1h
cmtJZkNoZWFwKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgZm9yIChDaGVja1ByaXZhdGVCcmFu
ZFZhcmlhbnQmIHZhcmlhbnQgOiBtX3ZhcmlhbnRzKQogICAgICAgICB2YXJpYW50Lm1hcmtJZkNo
ZWFwKHZpc2l0b3IpOwogfQogCit0ZW1wbGF0ZSB2b2lkIENoZWNrUHJpdmF0ZUJyYW5kU3RhdHVz
OjptYXJrSWZDaGVhcChBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIENoZWNr
UHJpdmF0ZUJyYW5kU3RhdHVzOjptYXJrSWZDaGVhcChTbG90VmlzaXRvciYpOworCiBib29sIENo
ZWNrUHJpdmF0ZUJyYW5kU3RhdHVzOjpmaW5hbGl6ZShWTSYgdm0pCiB7CiAgICAgZm9yIChhdXRv
JiB2YXJpYW50IDogbV92YXJpYW50cykgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0NoZWNrUHJpdmF0ZUJyYW5kU3RhdHVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NoZWNrUHJpdmF0ZUJyYW5kU3RhdHVzLmgJKHJldmlzaW9u
IDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DaGVja1ByaXZhdGVC
cmFuZFN0YXR1cy5oCSh3b3JraW5nIGNvcHkpCkBAIC04Miw4ICs4Miw4IEBAIHB1YmxpYzoKICAg
ICAvLyBBdHRlbXB0cyB0byByZWR1Y2UgdGhlIHNldCBvZiB2YXJpYW50cyB0byBmaXQgdGhlIGdp
dmVuIHN0cnVjdHVyZSBzZXQuIFRoaXMgbWF5IGJlIGFwcHJveGltYXRlLgogICAgIHZvaWQgZmls
dGVyKGNvbnN0IFN0cnVjdHVyZVNldCYpOwogCi0gICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShTbG90
VmlzaXRvciYpOwotICAgIHZvaWQgbWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImKTsKKyAgICBERUNM
QVJFX1ZJU0lUX0FHR1JFR0FURTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lk
IG1hcmtJZkNoZWFwKFZpc2l0b3ImKTsKICAgICBib29sIGZpbmFsaXplKFZNJik7CiAKICAgICBi
b29sIGFwcGVuZFZhcmlhbnQoY29uc3QgQ2hlY2tQcml2YXRlQnJhbmRWYXJpYW50Jik7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2hlY2tQcml2YXRlQnJhbmRWYXJpYW50
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2hlY2tQ
cml2YXRlQnJhbmRWYXJpYW50LmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NoZWNrUHJpdmF0ZUJyYW5kVmFyaWFudC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTUxLDExICs1MSwxNSBAQCBib29sIENoZWNrUHJpdmF0ZUJyYW5kVmFyaWFudDo6
YXR0ZW1wdFRvCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgQ2hlY2tQcml2YXRlQnJhbmRW
YXJpYW50OjptYXJrSWZDaGVhcChTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVu
YW1lIFZpc2l0b3I+Cit2b2lkIENoZWNrUHJpdmF0ZUJyYW5kVmFyaWFudDo6bWFya0lmQ2hlYXAo
VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBtX3N0cnVjdHVyZVNldC5tYXJrSWZDaGVhcCh2aXNp
dG9yKTsKIH0KIAordGVtcGxhdGUgdm9pZCBDaGVja1ByaXZhdGVCcmFuZFZhcmlhbnQ6Om1hcmtJ
ZkNoZWFwKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgQ2hlY2tQcml2YXRl
QnJhbmRWYXJpYW50OjptYXJrSWZDaGVhcChTbG90VmlzaXRvciYpOworCiBib29sIENoZWNrUHJp
dmF0ZUJyYW5kVmFyaWFudDo6ZmluYWxpemUoVk0mIHZtKQogewogICAgIGlmICghbV9zdHJ1Y3R1
cmVTZXQuaXNTdGlsbEFsaXZlKHZtKSkKQEAgLTYzLDExICs2NywxNCBAQCBib29sIENoZWNrUHJp
dmF0ZUJyYW5kVmFyaWFudDo6ZmluYWxpemUoCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQg
Q2hlY2tQcml2YXRlQnJhbmRWYXJpYW50Ojp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYgdmlz
aXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIENoZWNrUHJpdmF0ZUJyYW5k
VmFyaWFudDo6dmlzaXRBZ2dyZWdhdGVJbXBsKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgbV9p
ZGVudGlmaWVyLnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOwogfQogCitERUZJTkVfVklTSVRfQUdH
UkVHQVRFKENoZWNrUHJpdmF0ZUJyYW5kVmFyaWFudCk7CisKIHZvaWQgQ2hlY2tQcml2YXRlQnJh
bmRWYXJpYW50OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiB7CiAgICAgZHVtcEluQ29u
dGV4dChvdXQsIG51bGxwdHIpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NoZWNrUHJpdmF0ZUJyYW5kVmFyaWFudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9DaGVja1ByaXZhdGVCcmFuZFZhcmlhbnQuaAkocmV2aXNpb24gMjcy
ODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NoZWNrUHJpdmF0ZUJyYW5k
VmFyaWFudC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Niw4ICs0Niw4IEBAIHB1YmxpYzoKIAogICAg
IGJvb2wgYXR0ZW1wdFRvTWVyZ2UoY29uc3QgQ2hlY2tQcml2YXRlQnJhbmRWYXJpYW50JiBvdGhl
cik7CiAKLSAgICB2b2lkIHZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJik7Ci0gICAgdm9pZCBt
YXJrSWZDaGVhcChTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQUdHUkVHQVRFOwor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgbWFya0lmQ2hlYXAoVmlzaXRvciYp
OwogICAgIGJvb2wgZmluYWxpemUoVk0mKTsKIAogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYp
IGNvbnN0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9j
ay5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDAxLDcgKzEwMDEsOCBAQCBzaXpl
X3QgQ29kZUJsb2NrOjplc3RpbWF0ZWRTaXplKEpTQ2VsbCogCiAgICAgcmV0dXJuIEJhc2U6OmVz
dGltYXRlZFNpemUoY2VsbCwgdm0pICsgZXh0cmFNZW1vcnlBbGxvY2F0ZWQ7CiB9CiAKLXZvaWQg
Q29kZUJsb2NrOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0
b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBDb2RlQmxvY2s6OnZpc2l0Q2hp
bGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBDb2RlQmxv
Y2sqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8Q29kZUJsb2NrKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dD
X09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtMTAxMCw5ICsxMDExLDE0
IEBAIHZvaWQgQ29kZUJsb2NrOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2UKICAgICB0aGlzT2Jq
ZWN0LT52aXNpdENoaWxkcmVuKHZpc2l0b3IpOwogfQogCi12b2lkIENvZGVCbG9jazo6dmlzaXRD
aGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK0RFRklORV9WSVNJVF9DSElMRFJFTihDb2Rl
QmxvY2spOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBDb2RlQmxvY2s6OnZp
c2l0Q2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBDb25jdXJyZW50SlNMb2NrZXIg
bG9ja2VyKG1fbG9jayk7CisKKyAgICBtX3Zpc2l0Q2hpbGRyZW5Ta2lwcGVkRHVlVG9PbGRBZ2Ug
PSBmYWxzZTsKICAgICBpZiAoQ29kZUJsb2NrKiBvdGhlckJsb2NrID0gc3BlY2lhbE9TUkVudHJ5
QmxvY2tPck51bGwoKSkKICAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZChvdGhlckJs
b2NrKTsKIApAQCAtMTAyOSwxMyArMTAzNSwyMiBAQCB2b2lkIENvZGVCbG9jazo6dmlzaXRDaGls
ZHJlbihTbG90VmlzaXRvCiAgICAgVk06OlNwYWNlQW5kU2V0OjpzZXRGb3IoKnN1YnNwYWNlKCkp
LmFkZCh0aGlzKTsKIH0KIAotYm9vbCBDb2RlQmxvY2s6OnNob3VsZFZpc2l0U3Ryb25nbHkoY29u
c3QgQ29uY3VycmVudEpTTG9ja2VyJiBsb2NrZXIpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
PgorYm9vbCBDb2RlQmxvY2s6OnNob3VsZFZpc2l0U3Ryb25nbHkoY29uc3QgQ29uY3VycmVudEpT
TG9ja2VyJiBsb2NrZXIsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgaWYgKE9wdGlvbnM6OmZv
cmNlQ29kZUJsb2NrTGl2ZW5lc3MoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBpZiAo
c2hvdWxkSmV0dGlzb25EdWVUb09sZEFnZShsb2NrZXIpKQorICAgIGlmIChzaG91bGRKZXR0aXNv
bkR1ZVRvT2xkQWdlKGxvY2tlciwgdmlzaXRvcikpIHsKKyAgICAgICAgaWYgKE9wdGlvbnM6OnZl
cmlmeUdDKCkpCisgICAgICAgICAgICBtX3Zpc2l0Q2hpbGRyZW5Ta2lwcGVkRHVlVG9PbGRBZ2Ug
PSB0cnVlOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKFVOTElLRUxZ
KG1fdmlzaXRDaGlsZHJlblNraXBwZWREdWVUb09sZEFnZSkpIHsKKyAgICAgICAgUkVMRUFTRV9B
U1NFUlQoT3B0aW9uczo6dmVyaWZ5R0MoKSk7IC8vIG1sYW0gQVNTRVJUPwogICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQogCiAgICAgLy8gSW50ZXJwcmV0ZXIgYW5kIEJhc2VsaW5lIEpJVCBD
b2RlQmxvY2tzIGRvbid0IG5lZWQgdG8gYmUgamV0dGlzb25lZCB3aGVuCiAgICAgLy8gdGhlaXIg
d2VhayByZWZlcmVuY2VzIGdvIHN0YWxlLiBTbyBpZiBhIGJhc2xpbmUgSklUIENvZGVCbG9jayBn
ZXRzCkBAIC0xMDQ2LDYgKzEwNjEsOSBAQCBib29sIENvZGVCbG9jazo6c2hvdWxkVmlzaXRTdHJv
bmdseShjb25zCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCit0ZW1wbGF0ZSBib29sIENvZGVCbG9j
azo6c2hvdWxkVmlzaXRTdHJvbmdseShjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBBYnN0cmFj
dFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSBib29sIENvZGVCbG9jazo6c2hvdWxkVmlzaXRTdHJv
bmdseShjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBTbG90VmlzaXRvciYpOworCiBib29sIENv
ZGVCbG9jazo6c2hvdWxkSmV0dGlzb25EdWVUb1dlYWtSZWZlcmVuY2UoVk0mIHZtKQogewogICAg
IGlmICghSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGppdFR5cGUoKSkpCkBAIC0xMDg2LDkgKzEx
MDQsMTAgQEAgc3RhdGljIFNlY29uZHMgdGltZVRvTGl2ZShKSVRUeXBlIGppdFR5cAogICAgIH0K
IH0KIAotYm9vbCBDb2RlQmxvY2s6OnNob3VsZEpldHRpc29uRHVlVG9PbGRBZ2UoY29uc3QgQ29u
Y3VycmVudEpTTG9ja2VyJikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Citib29sIENvZGVC
bG9jazo6c2hvdWxkSmV0dGlzb25EdWVUb09sZEFnZShjb25zdCBDb25jdXJyZW50SlNMb2NrZXIm
LCBWaXNpdG9yJiB2aXNpdG9yKQogewotICAgIGlmIChtX3ZtLT5oZWFwLmlzTWFya2VkKHRoaXMp
KQorICAgIGlmICh2aXNpdG9yLmlzTWFya2VkKHRoaXMpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKICAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6Zm9yY2VDb2RlQmxvY2tUb0pldHRpc29uRHVl
VG9PbGRBZ2UoKSkpCkBAIC0xMTAxLDEyICsxMTIwLDEzIEBAIGJvb2wgQ29kZUJsb2NrOjpzaG91
bGRKZXR0aXNvbkR1ZVRvT2xkQWcKIH0KIAogI2lmIEVOQUJMRShERkdfSklUKQotc3RhdGljIGJv
b2wgc2hvdWxkTWFya1RyYW5zaXRpb24oVk0mIHZtLCBERkc6OldlYWtSZWZlcmVuY2VUcmFuc2l0
aW9uJiB0cmFuc2l0aW9uKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3N0YXRpYyBpbmxp
bmUgYm9vbCBzaG91bGRNYXJrVHJhbnNpdGlvbihWaXNpdG9yJiB2aXNpdG9yLCBERkc6OldlYWtS
ZWZlcmVuY2VUcmFuc2l0aW9uJiB0cmFuc2l0aW9uKQogewotICAgIGlmICh0cmFuc2l0aW9uLm1f
Y29kZU9yaWdpbiAmJiAhdm0uaGVhcC5pc01hcmtlZCh0cmFuc2l0aW9uLm1fY29kZU9yaWdpbi5n
ZXQoKSkpCisgICAgaWYgKHRyYW5zaXRpb24ubV9jb2RlT3JpZ2luICYmICF2aXNpdG9yLmlzTWFy
a2VkKHRyYW5zaXRpb24ubV9jb2RlT3JpZ2luLmdldCgpKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIAotICAgIGlmICghdm0uaGVhcC5pc01hcmtlZCh0cmFuc2l0aW9uLm1fZnJvbS5nZXQo
KSkpCisgICAgaWYgKCF2aXNpdG9yLmlzTWFya2VkKHRyYW5zaXRpb24ubV9mcm9tLmdldCgpKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAogICAgIHJldHVybiB0cnVlOwpAQCAtMTEyMiw4
ICsxMTQyLDEwIEBAIEJ5dGVjb2RlSW5kZXggQ29kZUJsb2NrOjpieXRlY29kZUluZGV4Rm8KIH0K
ICNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKIAotdm9pZCBDb2RlQmxvY2s6OnByb3BhZ2F0ZVRy
YW5zaXRpb25zKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIFNsb3RWaXNpdG9yJiB2aXNpdG9y
KQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgQ29kZUJsb2NrOjpwcm9wYWdhdGVU
cmFuc2l0aW9ucyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBWaXNpdG9yJiB2aXNpdG9yKQog
eworICAgIHR5cGVuYW1lIFZpc2l0b3I6OlN1cHByZXNzR0NWZXJpZmllclNjb3BlIHN1cHByZXNz
U2NvcGUodmlzaXRvcik7CiAgICAgVk0mIHZtID0gKm1fdm07CiAKICAgICBpZiAoaml0VHlwZSgp
ID09IEpJVFR5cGU6OkludGVycHJldGVyVGh1bmspIHsKQEAgLTExMzMsOCArMTE1NSw5IEBAIHZv
aWQgQ29kZUJsb2NrOjpwcm9wYWdhdGVUcmFuc2l0aW9ucyhjb24KICAgICAgICAgICAgICAgICBT
dHJ1Y3R1cmVJRCBuZXdTdHJ1Y3R1cmVJRCA9IG1ldGFkYXRhLm1fbmV3U3RydWN0dXJlSUQ7CiAg
ICAgICAgICAgICAgICAgaWYgKCFvbGRTdHJ1Y3R1cmVJRCB8fCAhbmV3U3RydWN0dXJlSUQpCiAg
ICAgICAgICAgICAgICAgICAgIHJldHVybjsKKwogICAgICAgICAgICAgICAgIFN0cnVjdHVyZSog
b2xkU3RydWN0dXJlID0gdm0uaGVhcC5zdHJ1Y3R1cmVJRFRhYmxlKCkuZ2V0KG9sZFN0cnVjdHVy
ZUlEKTsKLSAgICAgICAgICAgICAgICBpZiAodm0uaGVhcC5pc01hcmtlZChvbGRTdHJ1Y3R1cmUp
KSB7CisgICAgICAgICAgICAgICAgaWYgKHZpc2l0b3IuaXNNYXJrZWQob2xkU3RydWN0dXJlKSkg
ewogICAgICAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IHZtLmhlYXAu
c3RydWN0dXJlSURUYWJsZSgpLmdldChuZXdTdHJ1Y3R1cmVJRCk7CiAgICAgICAgICAgICAgICAg
ICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQobmV3U3RydWN0dXJlKTsKICAgICAgICAgICAg
ICAgICB9CkBAIC0xMTQ4LDExICsxMTcxLDExIEBAIHZvaWQgQ29kZUJsb2NrOjpwcm9wYWdhdGVU
cmFuc2l0aW9ucyhjb24KIAogICAgICAgICAgICAgICAgIEpTQ2VsbCogcHJvcGVydHkgPSBtZXRh
ZGF0YS5tX3Byb3BlcnR5LmdldCgpOwogICAgICAgICAgICAgICAgIEFTU0VSVChwcm9wZXJ0eSk7
Ci0gICAgICAgICAgICAgICAgaWYgKCF2bS5oZWFwLmlzTWFya2VkKHByb3BlcnR5KSkKKyAgICAg
ICAgICAgICAgICBpZiAoIXZpc2l0b3IuaXNNYXJrZWQocHJvcGVydHkpKQogICAgICAgICAgICAg
ICAgICAgICByZXR1cm47CiAKICAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVy
ZSA9IHZtLmhlYXAuc3RydWN0dXJlSURUYWJsZSgpLmdldChvbGRTdHJ1Y3R1cmVJRCk7Ci0gICAg
ICAgICAgICAgICAgaWYgKHZtLmhlYXAuaXNNYXJrZWQob2xkU3RydWN0dXJlKSkgeworICAgICAg
ICAgICAgICAgIGlmICh2aXNpdG9yLmlzTWFya2VkKG9sZFN0cnVjdHVyZSkpIHsKICAgICAgICAg
ICAgICAgICAgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSB2bS5oZWFwLnN0cnVjdHVyZUlE
VGFibGUoKS5nZXQobmV3U3RydWN0dXJlSUQpOwogICAgICAgICAgICAgICAgICAgICB2aXNpdG9y
LmFwcGVuZFVuYmFycmllcmVkKG5ld1N0cnVjdHVyZSk7CiAgICAgICAgICAgICAgICAgfQpAQCAt
MTE2NiwxMSArMTE4OSwxMSBAQCB2b2lkIENvZGVCbG9jazo6cHJvcGFnYXRlVHJhbnNpdGlvbnMo
Y29uCiAKICAgICAgICAgICAgICAgICBKU0NlbGwqIGJyYW5kID0gbWV0YWRhdGEubV9icmFuZC5n
ZXQoKTsKICAgICAgICAgICAgICAgICBBU1NFUlQoYnJhbmQpOwotICAgICAgICAgICAgICAgIGlm
ICghdm0uaGVhcC5pc01hcmtlZChicmFuZCkpCisgICAgICAgICAgICAgICAgaWYgKCF2aXNpdG9y
LmlzTWFya2VkKGJyYW5kKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAg
ICAgICAgICAgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUgPSB2bS5oZWFwLnN0cnVjdHVyZUlEVGFi
bGUoKS5nZXQob2xkU3RydWN0dXJlSUQpOwotICAgICAgICAgICAgICAgIGlmICh2bS5oZWFwLmlz
TWFya2VkKG9sZFN0cnVjdHVyZSkpIHsKKyAgICAgICAgICAgICAgICBpZiAodmlzaXRvci5pc01h
cmtlZChvbGRTdHJ1Y3R1cmUpKSB7CiAgICAgICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogbmV3
U3RydWN0dXJlID0gdm0uaGVhcC5zdHJ1Y3R1cmVJRFRhYmxlKCkuZ2V0KG5ld1N0cnVjdHVyZUlE
KTsKICAgICAgICAgICAgICAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZChuZXdTdHJ1
Y3R1cmUpOwogICAgICAgICAgICAgICAgIH0KQEAgLTExOTcsNyArMTIyMCw3IEBAIHZvaWQgQ29k
ZUJsb2NrOjpwcm9wYWdhdGVUcmFuc2l0aW9ucyhjb24KICAgICAgICAgICAgIHZtLmdldFN0cnVj
dHVyZShzdHJ1Y3R1cmVJRCktPm1hcmtJZkNoZWFwKHZpc2l0b3IpOwogCiAgICAgICAgIGZvciAo
YXV0byYgdHJhbnNpdGlvbiA6IGRmZ0NvbW1vbi0+dHJhbnNpdGlvbnMpIHsKLSAgICAgICAgICAg
IGlmIChzaG91bGRNYXJrVHJhbnNpdGlvbih2bSwgdHJhbnNpdGlvbikpIHsKKyAgICAgICAgICAg
IGlmIChzaG91bGRNYXJrVHJhbnNpdGlvbih2aXNpdG9yLCB0cmFuc2l0aW9uKSkgewogICAgICAg
ICAgICAgICAgIC8vIElmIHRoZSBmb2xsb3dpbmcgdGhyZWUgdGhpbmdzIGFyZSBsaXZlLCB0aGVu
IHRoZSB0YXJnZXQgb2YgdGhlCiAgICAgICAgICAgICAgICAgLy8gdHJhbnNpdGlvbiBpcyBhbHNv
IGxpdmU6CiAgICAgICAgICAgICAgICAgLy8KQEAgLTEyMjQsMTMgKzEyNDcsMTcgQEAgdm9pZCBD
b2RlQmxvY2s6OnByb3BhZ2F0ZVRyYW5zaXRpb25zKGNvbgogI2VuZGlmIC8vIEVOQUJMRShERkdf
SklUKQogfQogCi12b2lkIENvZGVCbG9jazo6ZGV0ZXJtaW5lTGl2ZW5lc3MoY29uc3QgQ29uY3Vy
cmVudEpTTG9ja2VyJiwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZSB2b2lkIENvZGVC
bG9jazo6cHJvcGFnYXRlVHJhbnNpdGlvbnMoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgQWJz
dHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBDb2RlQmxvY2s6OnByb3BhZ2F0ZVRy
YW5zaXRpb25zKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIFNsb3RWaXNpdG9yJik7CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIENvZGVCbG9jazo6ZGV0ZXJtaW5lTGl2ZW5l
c3MoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBV
TlVTRURfUEFSQU0odmlzaXRvcik7CiAgICAgCiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAgVk0m
IHZtID0gKm1fdm07Ci0gICAgaWYgKHZtLmhlYXAuaXNNYXJrZWQodGhpcykpCisgICAgaWYgKHZp
c2l0b3IuaXNNYXJrZWQodGhpcykpCiAgICAgICAgIHJldHVybjsKICAgICAKICAgICAvLyBJbiBy
YXJlIGFuZCB3ZWlyZCBjYXNlcywgdGhpcyBjb3VsZCBiZSBjYWxsZWQgb24gYSBiYXNlbGluZSBD
b2RlQmxvY2suIE9uZSB0aGF0IEkgZm91bmQgd2FzCkBAIC0xMjQ3LDcgKzEyNzQsNyBAQCB2b2lk
IENvZGVCbG9jazo6ZGV0ZXJtaW5lTGl2ZW5lc3MoY29uc3QgCiAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGRmZ0NvbW1vbi0+d2Vha1JlZmVyZW5jZXMuc2l6ZSgpOyArK2kpIHsKICAgICAg
ICAgSlNDZWxsKiByZWZlcmVuY2UgPSBkZmdDb21tb24tPndlYWtSZWZlcmVuY2VzW2ldLmdldCgp
OwogICAgICAgICBBU1NFUlQoIWpzRHluYW1pY0Nhc3Q8Q29kZUJsb2NrKj4odm0sIHJlZmVyZW5j
ZSkpOwotICAgICAgICBpZiAoIXZtLmhlYXAuaXNNYXJrZWQocmVmZXJlbmNlKSkgeworICAgICAg
ICBpZiAoIXZpc2l0b3IuaXNNYXJrZWQocmVmZXJlbmNlKSkgewogICAgICAgICAgICAgYWxsQXJl
TGl2ZVNvRmFyID0gZmFsc2U7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtMTI1
NSw3ICsxMjgyLDcgQEAgdm9pZCBDb2RlQmxvY2s6OmRldGVybWluZUxpdmVuZXNzKGNvbnN0IAog
ICAgIGlmIChhbGxBcmVMaXZlU29GYXIpIHsKICAgICAgICAgZm9yIChTdHJ1Y3R1cmVJRCBzdHJ1
Y3R1cmVJRCA6IGRmZ0NvbW1vbi0+d2Vha1N0cnVjdHVyZVJlZmVyZW5jZXMpIHsKICAgICAgICAg
ICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gdm0uZ2V0U3RydWN0dXJlKHN0cnVjdHVyZUlEKTsK
LSAgICAgICAgICAgIGlmICghdm0uaGVhcC5pc01hcmtlZChzdHJ1Y3R1cmUpKSB7CisgICAgICAg
ICAgICBpZiAoIXZpc2l0b3IuaXNNYXJrZWQoc3RydWN0dXJlKSkgewogICAgICAgICAgICAgICAg
IGFsbEFyZUxpdmVTb0ZhciA9IGZhbHNlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgfQpAQCAtMTI3Myw2ICsxMzAwLDkgQEAgdm9pZCBDb2RlQmxvY2s6OmRldGVybWluZUxp
dmVuZXNzKGNvbnN0IAogI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQogfQogCit0ZW1wbGF0ZSB2
b2lkIENvZGVCbG9jazo6ZGV0ZXJtaW5lTGl2ZW5lc3MoY29uc3QgQ29uY3VycmVudEpTTG9ja2Vy
JiwgQWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBDb2RlQmxvY2s6OmRldGVy
bWluZUxpdmVuZXNzKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIFNsb3RWaXNpdG9yJik7CisK
IHZvaWQgQ29kZUJsb2NrOjpmaW5hbGl6ZUxMSW50SW5saW5lQ2FjaGVzKCkKIHsKICAgICBWTSYg
dm0gPSAqbV92bTsKQEAgLTE2MTYsNiArMTY0Niw3IEBAIHZvaWQgQ29kZUJsb2NrOjpmaW5hbGl6
ZVVuY29uZGl0aW9uYWxseSgKICAgICB1cGRhdGVBY3Rpdml0eSgpOwogCiAgICAgVk06OlNwYWNl
QW5kU2V0OjpzZXRGb3IoKnN1YnNwYWNlKCkpLnJlbW92ZSh0aGlzKTsKKyAgICBtX3Zpc2l0Q2hp
bGRyZW5Ta2lwcGVkRHVlVG9PbGRBZ2UgPSBmYWxzZTsKIH0KIAogdm9pZCBDb2RlQmxvY2s6OmRl
c3Ryb3koSlNDZWxsKiBjZWxsKQpAQCAtMTgwOCw3ICsxODM5LDggQEAgdm9pZCBDb2RlQmxvY2s6
OnJlc2V0SklURGF0YSgpCiB9CiAjZW5kaWYKIAotdm9pZCBDb2RlQmxvY2s6OnZpc2l0T1NSRXhp
dFRhcmdldHMoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgU2xvdFZpc2l0b3ImIHZpc2l0b3Ip
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBDb2RlQmxvY2s6OnZpc2l0T1NSRXhp
dFRhcmdldHMoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgVmlzaXRvciYgdmlzaXRvcikKIHsK
ICAgICAvLyBXZSBzdHJvbmdseSB2aXNpdCBPU1IgZXhpdHMgdGFyZ2V0cyBiZWNhdXNlIHdlIGRv
bid0IHdhbnQgdG8gZGVhbCB3aXRoCiAgICAgLy8gdGhlIGNvbXBsZXhpdHkgb2YgZ2VuZXJhdGlu
ZyBhbiBleGl0IHRhcmdldCBDb2RlQmxvY2sgb24gZGVtYW5kIGFuZApAQCAtMTgyOCw3ICsxODYw
LDggQEAgdm9pZCBDb2RlQmxvY2s6OnZpc2l0T1NSRXhpdFRhcmdldHMoY29ucwogI2VuZGlmCiB9
CiAKLXZvaWQgQ29kZUJsb2NrOjpzdHJvbmdseVZpc2l0U3Ryb25nUmVmZXJlbmNlcyhjb25zdCBD
b25jdXJyZW50SlNMb2NrZXImIGxvY2tlciwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0
ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBDb2RlQmxvY2s6OnN0cm9uZ2x5VmlzaXRTdHJvbmdS
ZWZlcmVuY2VzKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYgbG9ja2VyLCBWaXNpdG9yJiB2aXNp
dG9yKQogewogICAgIFVOVVNFRF9QQVJBTShsb2NrZXIpOwogICAgIApAQCAtMTg2NCw3ICsxODk3
LDggQEAgdm9pZCBDb2RlQmxvY2s6OnN0cm9uZ2x5VmlzaXRTdHJvbmdSZWZlcgogI2VuZGlmCiB9
CiAKLXZvaWQgQ29kZUJsb2NrOjpzdHJvbmdseVZpc2l0V2Vha1JlZmVyZW5jZXMoY29uc3QgQ29u
Y3VycmVudEpTTG9ja2VyJiwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBWaXNpdG9yPgordm9pZCBDb2RlQmxvY2s6OnN0cm9uZ2x5VmlzaXRXZWFrUmVmZXJlbmNlcyhj
b25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFVOVVNF
RF9QQVJBTSh2aXNpdG9yKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Db2RlQmxvY2suaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0NvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAwOC0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwOCBDYW1lcm9uIFp3YXJpY2ggPGN3endhcmljaEB1
d2F0ZXJsb28uY2E+CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0yMDEsMTAgKzIwMSwxMCBAQCBwdWJs
aWM6CiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyMzY3
NwogICAgIENvZGVCbG9jayogYmFzZWxpbmVWZXJzaW9uKCk7CiAKKyAgICBERUNMQVJFX1ZJU0lU
X0NISUxEUkVOOworCiAgICAgc3RhdGljIHNpemVfdCBlc3RpbWF0ZWRTaXplKEpTQ2VsbCosIFZN
Jik7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYp
OwogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7Ci0gICAgdm9pZCB2aXNpdENoaWxk
cmVuKFNsb3RWaXNpdG9yJik7CiAgICAgdm9pZCBmaW5hbGl6ZVVuY29uZGl0aW9uYWxseShWTSYp
OwogCiAgICAgdm9pZCBub3RpZnlMZXhpY2FsQmluZGluZ1VwZGF0ZSgpOwpAQCAtOTQzLDYgKzk0
Myw4IEBAIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIENvZGVCbG9ja1NldDsKICAgICBmcmll
bmQgY2xhc3MgRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZTsKIAorICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFZpc2l0b3I+IEFMV0FZU19JTkxJTkUgdm9pZCB2aXNpdENoaWxkcmVuKFZpc2l0b3ImKTsK
KwogICAgIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcyYgbGl2ZW5lc3NBbmFseXNpc1Nsb3coKTsK
ICAgICAKICAgICBDb2RlQmxvY2sqIHNwZWNpYWxPU1JFbnRyeUJsb2NrT3JOdWxsKCk7CkBAIC05
NjMsMTYgKzk2NSwxNiBAQCBwcml2YXRlOgogICAgICAgICBtX2NvbnN0YW50UmVnaXN0ZXJzW3Jl
Zy50b0NvbnN0YW50SW5kZXgoKV0uc2V0KCptX3ZtLCB0aGlzLCB2YWx1ZSk7CiAgICAgfQogCi0g
ICAgYm9vbCBzaG91bGRWaXNpdFN0cm9uZ2x5KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYpOwor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IGJvb2wgc2hvdWxkVmlzaXRTdHJvbmdseShj
b25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBWaXNpdG9yJik7CiAgICAgYm9vbCBzaG91bGRKZXR0
aXNvbkR1ZVRvV2Vha1JlZmVyZW5jZShWTSYpOwotICAgIGJvb2wgc2hvdWxkSmV0dGlzb25EdWVU
b09sZEFnZShjb25zdCBDb25jdXJyZW50SlNMb2NrZXImKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBWaXNpdG9yPiBib29sIHNob3VsZEpldHRpc29uRHVlVG9PbGRBZ2UoY29uc3QgQ29uY3VycmVu
dEpTTG9ja2VyJiwgVmlzaXRvciYpOwogICAgIAotICAgIHZvaWQgcHJvcGFnYXRlVHJhbnNpdGlv
bnMoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgU2xvdFZpc2l0b3ImKTsKLSAgICB2b2lkIGRl
dGVybWluZUxpdmVuZXNzKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIFNsb3RWaXNpdG9yJik7
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCBwcm9wYWdhdGVUcmFuc2l0aW9u
cyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBWaXNpdG9yJik7CisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVmlzaXRvcj4gdm9pZCBkZXRlcm1pbmVMaXZlbmVzcyhjb25zdCBDb25jdXJyZW50SlNM
b2NrZXImLCBWaXNpdG9yJik7CiAgICAgICAgIAotICAgIHZvaWQgc3Ryb25nbHlWaXNpdFN0cm9u
Z1JlZmVyZW5jZXMoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgU2xvdFZpc2l0b3ImKTsKLSAg
ICB2b2lkIHN0cm9uZ2x5VmlzaXRXZWFrUmVmZXJlbmNlcyhjb25zdCBDb25jdXJyZW50SlNMb2Nr
ZXImLCBTbG90VmlzaXRvciYpOwotICAgIHZvaWQgdmlzaXRPU1JFeGl0VGFyZ2V0cyhjb25zdCBD
b25jdXJyZW50SlNMb2NrZXImLCBTbG90VmlzaXRvciYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFZpc2l0b3I+IHZvaWQgc3Ryb25nbHlWaXNpdFN0cm9uZ1JlZmVyZW5jZXMoY29uc3QgQ29uY3Vy
cmVudEpTTG9ja2VyJiwgVmlzaXRvciYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+
IHZvaWQgc3Ryb25nbHlWaXNpdFdlYWtSZWZlcmVuY2VzKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tl
ciYsIFZpc2l0b3ImKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIHZpc2l0
T1NSRXhpdFRhcmdldHMoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgVmlzaXRvciYpOwogCiAg
ICAgdW5zaWduZWQgbnVtYmVyT2ZOb25Bcmd1bWVudFZhbHVlUHJvZmlsZXMoKSB7IHJldHVybiBt
X251bWJlck9mTm9uQXJndW1lbnRWYWx1ZVByb2ZpbGVzOyB9CiAgICAgdW5zaWduZWQgdG90YWxO
dW1iZXJPZlZhbHVlUHJvZmlsZXMoKSB7IHJldHVybiBudW1iZXJPZkFyZ3VtZW50VmFsdWVQcm9m
aWxlcygpICsgbnVtYmVyT2ZOb25Bcmd1bWVudFZhbHVlUHJvZmlsZXMoKTsgfQpAQCAtMTAxMSw2
ICsxMDEzLDcgQEAgcHJpdmF0ZToKICAgICB1bnNpZ25lZCBtX2J5dGVjb2RlQ29zdCB7IDAgfTsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgbV9zY29wZVJlZ2lzdGVyOwogICAgIG11dGFibGUgQ29kZUJs
b2NrSGFzaCBtX2hhc2g7CisgICAgYm9vbCBtX3Zpc2l0Q2hpbGRyZW5Ta2lwcGVkRHVlVG9PbGRB
Z2UgeyBmYWxzZSB9OwogCiAgICAgV3JpdGVCYXJyaWVyPFVubGlua2VkQ29kZUJsb2NrPiBtX3Vu
bGlua2VkQ29kZTsKICAgICBXcml0ZUJhcnJpZXI8U2NyaXB0RXhlY3V0YWJsZT4gbV9vd25lckV4
ZWN1dGFibGU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRGVsZXRlQnlJ
ZFZhcmlhbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9EZWxldGVCeUlkVmFyaWFudC5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9EZWxldGVCeUlkVmFyaWFudC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMC0yMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
ODgsMTIgKzg4LDE2IEBAIGJvb2wgRGVsZXRlQnlJZFZhcmlhbnQ6OndyaXRlc1N0cnVjdHVyZXMK
ICAgICByZXR1cm4gISFuZXdTdHJ1Y3R1cmUoKTsKIH0KIAotdm9pZCBEZWxldGVCeUlkVmFyaWFu
dDo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBWaXNpdG9yPgordm9pZCBEZWxldGVCeUlkVmFyaWFudDo6dmlzaXRBZ2dyZWdhdGVJbXBsKFZp
c2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgbV9pZGVudGlmaWVyLnZpc2l0QWdncmVnYXRlKHZpc2l0
b3IpOwogfQogCi12b2lkIERlbGV0ZUJ5SWRWYXJpYW50OjptYXJrSWZDaGVhcChTbG90VmlzaXRv
ciYgdmlzaXRvcikKK0RFRklORV9WSVNJVF9BR0dSRUdBVEUoRGVsZXRlQnlJZFZhcmlhbnQpOwor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBEZWxldGVCeUlkVmFyaWFudDo6bWFy
a0lmQ2hlYXAoVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBpZiAobV9vbGRTdHJ1Y3R1cmUpCiAg
ICAgICAgIG1fb2xkU3RydWN0dXJlLT5tYXJrSWZDaGVhcCh2aXNpdG9yKTsKQEAgLTEwMSw2ICsx
MDUsOSBAQCB2b2lkIERlbGV0ZUJ5SWRWYXJpYW50OjptYXJrSWZDaGVhcChTbG90CiAgICAgICAg
IG1fbmV3U3RydWN0dXJlLT5tYXJrSWZDaGVhcCh2aXNpdG9yKTsKIH0KIAordGVtcGxhdGUgdm9p
ZCBEZWxldGVCeUlkVmFyaWFudDo6bWFya0lmQ2hlYXAoQWJzdHJhY3RTbG90VmlzaXRvciYpOwor
dGVtcGxhdGUgdm9pZCBEZWxldGVCeUlkVmFyaWFudDo6bWFya0lmQ2hlYXAoU2xvdFZpc2l0b3Im
KTsKKwogdm9pZCBEZWxldGVCeUlkVmFyaWFudDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25z
dAogewogICAgIGR1bXBJbkNvbnRleHQob3V0LCBudWxscHRyKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9EZWxldGVCeUlkVmFyaWFudC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9EZWxldGVCeUlkVmFyaWFudC5oCShyZXZpc2lv
biAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRGVsZXRlQnlJZFZh
cmlhbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDIwLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC02MSw4ICs2MSw4IEBAIHB1YmxpYzoKIAogICAgIGJvb2wg
YXR0ZW1wdFRvTWVyZ2UoY29uc3QgRGVsZXRlQnlJZFZhcmlhbnQmIG90aGVyKTsKIAotICAgIHZv
aWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImKTsKLSAgICB2b2lkIG1hcmtJZkNoZWFwKFNs
b3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9BR0dSRUdBVEU7CisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCBtYXJrSWZDaGVhcChWaXNpdG9yJik7CiAgICAgYm9vbCBm
aW5hbGl6ZShWTSYpOwogCiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRGVsZXRlQnlTdGF0dXMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9EZWxldGVCeVN0YXR1cy5j
cHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9E
ZWxldGVCeVN0YXR1cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAyMC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjU0LDE4ICsyNTQsMjUgQEAgQ2FjaGVh
YmxlSWRlbnRpZmllciBEZWxldGVCeVN0YXR1czo6c2luZwogICAgIHJldHVybiByZXN1bHQ7CiB9
CiAKLXZvaWQgRGVsZXRlQnlTdGF0dXM6OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJiB2aXNp
dG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgRGVsZXRlQnlTdGF0dXM6OnZp
c2l0QWdncmVnYXRlSW1wbChWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGZvciAoRGVsZXRlQnlJ
ZFZhcmlhbnQmIHZhcmlhbnQgOiBtX3ZhcmlhbnRzKQogICAgICAgICB2YXJpYW50LnZpc2l0QWdn
cmVnYXRlKHZpc2l0b3IpOwogfQogCi12b2lkIERlbGV0ZUJ5U3RhdHVzOjptYXJrSWZDaGVhcChT
bG90VmlzaXRvciYgdmlzaXRvcikKK0RFRklORV9WSVNJVF9BR0dSRUdBVEUoRGVsZXRlQnlTdGF0
dXMpOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBEZWxldGVCeVN0YXR1czo6
bWFya0lmQ2hlYXAoVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBmb3IgKERlbGV0ZUJ5SWRWYXJp
YW50JiB2YXJpYW50IDogbV92YXJpYW50cykKICAgICAgICAgdmFyaWFudC5tYXJrSWZDaGVhcCh2
aXNpdG9yKTsKIH0KIAordGVtcGxhdGUgdm9pZCBEZWxldGVCeVN0YXR1czo6bWFya0lmQ2hlYXAo
QWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBEZWxldGVCeVN0YXR1czo6bWFy
a0lmQ2hlYXAoU2xvdFZpc2l0b3ImKTsKKwogYm9vbCBEZWxldGVCeVN0YXR1czo6ZmluYWxpemUo
Vk0mIHZtKQogewogICAgIGZvciAoYXV0byYgdmFyaWFudCA6IG1fdmFyaWFudHMpIHsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9EZWxldGVCeVN0YXR1cy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9EZWxldGVCeVN0YXR1cy5oCShy
ZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRGVsZXRl
QnlTdGF0dXMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDIwLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC04MSw4ICs4MSw4IEBAIHB1YmxpYzoKICAgICAvLyBB
dHRlbXB0cyB0byByZWR1Y2UgdGhlIHNldCBvZiB2YXJpYW50cyB0byBmaXQgdGhlIGdpdmVuIHN0
cnVjdHVyZSBzZXQuIFRoaXMgbWF5IGJlIGFwcHJveGltYXRlLgogICAgIHZvaWQgZmlsdGVyKGNv
bnN0IFN0cnVjdHVyZVNldCYpOwogCi0gICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRv
ciYpOwotICAgIHZvaWQgbWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJ
U0lUX0FHR1JFR0FURTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIG1hcmtJ
ZkNoZWFwKFZpc2l0b3ImKTsKICAgICBib29sIGZpbmFsaXplKFZNJik7CiAKICAgICBib29sIGFw
cGVuZFZhcmlhbnQoY29uc3QgRGVsZXRlQnlJZFZhcmlhbnQmKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9EaXJlY3RFdmFsQ29kZUNhY2hlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRGlyZWN0RXZhbENvZGVDYWNoZS5jcHAJ
KHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9EaXJl
Y3RFdmFsQ29kZUNhY2hlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00NSw3ICs0NSw4IEBAIHZvaWQgRGly
ZWN0RXZhbENvZGVDYWNoZTo6Y2xlYXIoKQogICAgIG1fY2FjaGVNYXAuY2xlYXIoKTsKIH0KIAot
dm9pZCBEaXJlY3RFdmFsQ29kZUNhY2hlOjp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYgdmlz
aXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIERpcmVjdEV2YWxDb2RlQ2Fj
aGU6OnZpc2l0QWdncmVnYXRlSW1wbChWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIExvY2tIb2xk
ZXIgbG9ja2VyKG1fbG9jayk7CiAgICAgRXZhbENhY2hlTWFwOjppdGVyYXRvciBlbmQgPSBtX2Nh
Y2hlTWFwLmVuZCgpOwpAQCAtNTMsNSArNTQsNiBAQCB2b2lkIERpcmVjdEV2YWxDb2RlQ2FjaGU6
OnZpc2l0QWdncmVnYXRlCiAgICAgICAgIHZpc2l0b3IuYXBwZW5kKHB0ci0+dmFsdWUpOwogfQog
Ci19IC8vIG5hbWVzcGFjZSBKU0MKK0RFRklORV9WSVNJVF9BR0dSRUdBVEUoRGlyZWN0RXZhbENv
ZGVDYWNoZSk7CiAKK30gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0RpcmVjdEV2YWxDb2RlQ2FjaGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRGlyZWN0RXZhbENvZGVDYWNoZS5oCShyZXZpc2lvbiAy
NzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRGlyZWN0RXZhbENvZGVD
YWNoZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAwOC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAwOC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtOTcsNyArOTcsNyBAQCBuYW1lc3BhY2UgSlNDIHsK
IAogICAgICAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBtX2NhY2hlTWFwLmlzRW1w
dHkoKTsgfQogCi0gICAgICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImKTsKKyAg
ICAgICAgREVDTEFSRV9WSVNJVF9BR0dSRUdBVEU7CiAKICAgICAgICAgdm9pZCBjbGVhcigpOwog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhlY3V0YWJsZVRvQ29kZUJs
b2NrRWRnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0V4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE4
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOC0y
MDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtNTMsNyArNTMsOCBAQCB2b2lkIEV4ZWN1dGFibGVUb0NvZGVCbG9ja0Vk
Z2U6OmZpbmlzaENyCiAgICAgQVNTRVJUKCFpc0FjdGl2ZSgpKTsKIH0KIAotdm9pZCBFeGVjdXRh
YmxlVG9Db2RlQmxvY2tFZGdlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0
b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBFeGVjdXRhYmxl
VG9Db2RlQmxvY2tFZGdlOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3Im
IHZpc2l0b3IpCiB7CiAgICAgVk0mIHZtID0gdmlzaXRvci52bSgpOwogICAgIEV4ZWN1dGFibGVU
b0NvZGVCbG9ja0VkZ2UqIGVkZ2UgPSBqc0Nhc3Q8RXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZSo+
KGNlbGwpOwpAQCAtNjEsNyArNjIsNyBAQCB2b2lkIEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2U6
OnZpc2l0Q2hpCiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbihjZWxsLCB2aXNpdG9yKTsKIAogICAg
IENvZGVCbG9jayogY29kZUJsb2NrID0gZWRnZS0+bV9jb2RlQmxvY2suZ2V0KCk7Ci0gICAgCisK
ICAgICAvLyBJdCdzIHBvc3NpYmxlIGZvciBzb21lb25lIHRvIGhvbGQgYSBwb2ludGVyIHRvIHRo
ZSBlZGdlIGFmdGVyIHRoZSBlZGdlIGhhcyBjbGVhcmVkIGl0cyB3ZWFrCiAgICAgLy8gcmVmZXJl
bmNlIHRvIHRoZSBjb2RlQmxvY2suIEluIGEgY29uc2VydmF0aXZlIEdDIGxpa2Ugb3VycywgdGhh
dCBjb3VsZCBoYXBwZW4gYXQgcmFuZG9tIGZvcgogICAgIC8vIG5vIGdvb2QgcmVhc29uIGFuZCBp
dCdzIFRvdGFsbHkgT0sgKFRNKS4gU2VlIGZpbmFsaXplVW5jb25kaXRpb25hbGx5KCkgZm9yIHdo
ZXJlIHdlIGNsZWFyCkBAIC03NSwxMSArNzYsMTEgQEAgdm9pZCBFeGVjdXRhYmxlVG9Db2RlQmxv
Y2tFZGdlOjp2aXNpdENoaQogICAgIH0KICAgICAKICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9j
a2VyKGNvZGVCbG9jay0+bV9sb2NrKTsKLSAgICAKLSAgICBpZiAoY29kZUJsb2NrLT5zaG91bGRW
aXNpdFN0cm9uZ2x5KGxvY2tlcikpCisKKyAgICBpZiAoY29kZUJsb2NrLT5zaG91bGRWaXNpdFN0
cm9uZ2x5KGxvY2tlciwgdmlzaXRvcikpCiAgICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVy
ZWQoY29kZUJsb2NrKTsKICAgICAKLSAgICBpZiAoIXZtLmhlYXAuaXNNYXJrZWQoY29kZUJsb2Nr
KSkKKyAgICBpZiAoIXZpc2l0b3IuaXNNYXJrZWQoY29kZUJsb2NrKSkKICAgICAgICAgdm0uZXhl
Y3V0YWJsZVRvQ29kZUJsb2NrRWRnZXNXaXRoRmluYWxpemVycy5hZGQoZWRnZSk7CiAgICAgCiAg
ICAgaWYgKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChjb2RlQmxvY2stPmppdFR5cGUoKSkpIHsK
QEAgLTExNyw3ICsxMTgsMTAgQEAgdm9pZCBFeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlOjp2aXNp
dENoaQogICAgIGVkZ2UtPnJ1bkNvbnN0cmFpbnQobG9ja2VyLCB2bSwgdmlzaXRvcik7CiB9CiAK
LXZvaWQgRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZTo6dmlzaXRPdXRwdXRDb25zdHJhaW50cyhK
U0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorREVGSU5FX1ZJU0lUX0NISUxEUkVO
KEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UpOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
Pgordm9pZCBFeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlOjp2aXNpdE91dHB1dENvbnN0cmFpbnRz
SW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgVk0mIHZtID0gdmlz
aXRvci52bSgpOwogICAgIEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UqIGVkZ2UgPSBqc0Nhc3Q8
RXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZSo+KGNlbGwpOwpAQCAtMTI1LDYgKzEyOSw4IEBAIHZv
aWQgRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZTo6dmlzaXRPdXQKICAgICBlZGdlLT5ydW5Db25z
dHJhaW50KE5vTG9ja2luZ05lY2Vzc2FyeSwgdm0sIHZpc2l0b3IpOwogfQogCitERUZJTkVfVklT
SVRfT1VUUFVUX0NPTlNUUkFJTlRTKEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UpOworCiB2b2lk
IEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2U6OmZpbmFsaXplVW5jb25kaXRpb25hbGx5KFZNJiB2
bSkKIHsKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IG1fY29kZUJsb2NrLmdldCgpOwpAQCAt
MTg2LDE2ICsxOTIsMjEgQEAgRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZTo6RXhlY3V0YWJsZVRv
QwogewogfQogCi12b2lkIEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2U6OnJ1bkNvbnN0cmFpbnQo
Y29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiBsb2NrZXIsIFZNJiB2bSwgU2xvdFZpc2l0b3ImIHZp
c2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBFeGVjdXRhYmxlVG9Db2Rl
QmxvY2tFZGdlOjpydW5Db25zdHJhaW50KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYgbG9ja2Vy
LCBWTSYgdm0sIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sg
PSBtX2NvZGVCbG9jay5nZXQoKTsKICAgICAKICAgICBjb2RlQmxvY2stPnByb3BhZ2F0ZVRyYW5z
aXRpb25zKGxvY2tlciwgdmlzaXRvcik7CiAgICAgY29kZUJsb2NrLT5kZXRlcm1pbmVMaXZlbmVz
cyhsb2NrZXIsIHZpc2l0b3IpOwotICAgIAotICAgIGlmICh2bS5oZWFwLmlzTWFya2VkKGNvZGVC
bG9jaykpCisKKyAgICBpZiAodmlzaXRvci5pc01hcmtlZChjb2RlQmxvY2spKQogICAgICAgICB2
bS5leGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlc1dpdGhDb25zdHJhaW50cy5yZW1vdmUodGhpcyk7
CiB9CiAKK3RlbXBsYXRlIHZvaWQgRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZTo6cnVuQ29uc3Ry
YWludChjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBWTSYsIEFic3RyYWN0U2xvdFZpc2l0b3Im
KTsKK3RlbXBsYXRlIHZvaWQgRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZTo6cnVuQ29uc3RyYWlu
dChjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBWTSYsIFNsb3RWaXNpdG9yJik7CisKKwogfSAv
LyBuYW1lc3BhY2UgSlNDCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9F
eGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UuaAkocmV2aXNpb24gMjcy
ODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGFibGVUb0NvZGVC
bG9ja0VkZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTgtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTgtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTUzLDkgKzUzLDkgQEAgcHVibGljOgogICAg
IERFQ0xBUkVfSU5GTzsKIAogICAgIENvZGVCbG9jayogY29kZUJsb2NrKCkgY29uc3QgeyByZXR1
cm4gbV9jb2RlQmxvY2suZ2V0KCk7IH0KLSAgICAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxk
cmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRPdXRwdXRD
b25zdHJhaW50cyhKU0NlbGwqLCBTbG90VmlzaXRvciYpOworCisgICAgREVDTEFSRV9WSVNJVF9D
SElMRFJFTjsKKyAgICBERUNMQVJFX1ZJU0lUX09VVFBVVF9DT05TVFJBSU5UUzsKICAgICB2b2lk
IGZpbmFsaXplVW5jb25kaXRpb25hbGx5KFZNJik7CiAgICAgCiAgICAgc3RhdGljIENvZGVCbG9j
ayogdW53cmFwKEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UqIGVkZ2UpCkBAIC04MSw5ICs4MSw5
IEBAIHByaXZhdGU6CiAgICAgdm9pZCBhY3RpdmF0ZSgpOwogICAgIHZvaWQgZGVhY3RpdmF0ZSgp
OwogICAgIGJvb2wgaXNBY3RpdmUoKSBjb25zdDsKLSAgICAKLSAgICB2b2lkIHJ1bkNvbnN0cmFp
bnQoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgVk0mLCBTbG90VmlzaXRvciYpOwotICAgIAor
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCBydW5Db25zdHJhaW50KGNvbnN0
IENvbmN1cnJlbnRKU0xvY2tlciYsIFZNJiwgVmlzaXRvciYpOworCiAgICAgV3JpdGVCYXJyaWVy
PENvZGVCbG9jaz4gbV9jb2RlQmxvY2s7CiB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvR2V0QnlJZFZhcmlhbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkVmFyaWFudC5jcHAJKHJldmlzaW9uIDI3MjgzMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkVmFyaWFudC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0LTIw
MjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0
LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0xNTYsMTYgKzE1NiwyMyBAQCBib29sIEdldEJ5SWRWYXJpYW50Ojph
dHRlbXB0VG9NZXJnZShjb25zCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgR2V0QnlJZFZh
cmlhbnQ6OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlw
ZW5hbWUgVmlzaXRvcj4KK3ZvaWQgR2V0QnlJZFZhcmlhbnQ6OnZpc2l0QWdncmVnYXRlSW1wbChW
aXNpdG9yJiB2aXNpdG9yKQogewogICAgIG1faWRlbnRpZmllci52aXNpdEFnZ3JlZ2F0ZSh2aXNp
dG9yKTsKIH0KIAotdm9pZCBHZXRCeUlkVmFyaWFudDo6bWFya0lmQ2hlYXAoU2xvdFZpc2l0b3Im
IHZpc2l0b3IpCitERUZJTkVfVklTSVRfQUdHUkVHQVRFKEdldEJ5SWRWYXJpYW50KTsKKwordGVt
cGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgR2V0QnlJZFZhcmlhbnQ6Om1hcmtJZkNoZWFw
KFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgbV9zdHJ1Y3R1cmVTZXQubWFya0lmQ2hlYXAodmlz
aXRvcik7CiB9CiAKK3RlbXBsYXRlIHZvaWQgR2V0QnlJZFZhcmlhbnQ6Om1hcmtJZkNoZWFwKEFi
c3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgR2V0QnlJZFZhcmlhbnQ6Om1hcmtJ
ZkNoZWFwKFNsb3RWaXNpdG9yJik7CisKIGJvb2wgR2V0QnlJZFZhcmlhbnQ6OmZpbmFsaXplKFZN
JiB2bSkKIHsKICAgICBpZiAoIW1fc3RydWN0dXJlU2V0LmlzU3RpbGxBbGl2ZSh2bSkpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFZhcmlhbnQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFZhcmlhbnQuaAko
cmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5
SWRWYXJpYW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDE0LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE0LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03Nyw4ICs3Nyw4IEBAIHB1YmxpYzoKIAog
ICAgIGJvb2wgYXR0ZW1wdFRvTWVyZ2UoY29uc3QgR2V0QnlJZFZhcmlhbnQmIG90aGVyKTsKICAg
ICAKLSAgICB2b2lkIHZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJik7Ci0gICAgdm9pZCBtYXJr
SWZDaGVhcChTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQUdHUkVHQVRFOworICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgbWFya0lmQ2hlYXAoVmlzaXRvciYpOwog
ICAgIGJvb2wgZmluYWxpemUoVk0mKTsKICAgICAKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0m
KSBjb25zdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeVN0YXR1
cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5
U3RhdHVzLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0dldEJ5U3RhdHVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTUzMCw3ICs1MzAsOCBA
QCB2b2lkIEdldEJ5U3RhdHVzOjpmaWx0ZXIoY29uc3QgU3RydWN0dXJlCiAgICAgICAgIG1fc3Rh
dGUgPSBOb0luZm9ybWF0aW9uOwogfQogCi12b2lkIEdldEJ5U3RhdHVzOjp2aXNpdEFnZ3JlZ2F0
ZShTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lk
IEdldEJ5U3RhdHVzOjp2aXNpdEFnZ3JlZ2F0ZUltcGwoVmlzaXRvciYgdmlzaXRvcikKIHsKICAg
ICBpZiAoaXNNb2R1bGVOYW1lc3BhY2UoKSkKICAgICAgICAgbV9tb2R1bGVOYW1lc3BhY2VEYXRh
LT5tX2lkZW50aWZpZXIudmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7CkBAIC01MzgsMTIgKzUzOSwx
OCBAQCB2b2lkIEdldEJ5U3RhdHVzOjp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzCiAgICAgICAgIHZh
cmlhbnQudmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7CiB9CiAKLXZvaWQgR2V0QnlTdGF0dXM6Om1h
cmtJZkNoZWFwKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorREVGSU5FX1ZJU0lUX0FHR1JFR0FURShH
ZXRCeVN0YXR1cyk7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEdldEJ5U3Rh
dHVzOjptYXJrSWZDaGVhcChWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGZvciAoR2V0QnlJZFZh
cmlhbnQmIHZhcmlhbnQgOiBtX3ZhcmlhbnRzKQogICAgICAgICB2YXJpYW50Lm1hcmtJZkNoZWFw
KHZpc2l0b3IpOwogfQogCit0ZW1wbGF0ZSB2b2lkIEdldEJ5U3RhdHVzOjptYXJrSWZDaGVhcChB
YnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEdldEJ5U3RhdHVzOjptYXJrSWZD
aGVhcChTbG90VmlzaXRvciYpOworCiBib29sIEdldEJ5U3RhdHVzOjpmaW5hbGl6ZShWTSYgdm0p
CiB7CiAgICAgZm9yIChHZXRCeUlkVmFyaWFudCYgdmFyaWFudCA6IG1fdmFyaWFudHMpIHsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeVN0YXR1cy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeVN0YXR1cy5oCShyZXZp
c2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlTdGF0
dXMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTItMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTItMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTExOCw4ICsxMTgsOCBAQCBwdWJsaWM6CiAgICAgSlNN
b2R1bGVFbnZpcm9ubWVudCogbW9kdWxlRW52aXJvbm1lbnQoKSBjb25zdCB7IHJldHVybiBtX21v
ZHVsZU5hbWVzcGFjZURhdGEtPm1fbW9kdWxlRW52aXJvbm1lbnQ7IH0KICAgICBTY29wZU9mZnNl
dCBzY29wZU9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fbW9kdWxlTmFtZXNwYWNlRGF0YS0+bV9z
Y29wZU9mZnNldDsgfQogICAgIAotICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3Im
KTsKLSAgICB2b2lkIG1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJ
VF9BR0dSRUdBVEU7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCBtYXJrSWZD
aGVhcChWaXNpdG9yJik7CiAgICAgYm9vbCBmaW5hbGl6ZShWTSYpOyAvLyBSZXR1cm4gdHJ1ZSBp
ZiB0aGlzIGdldHMgdG8gbGl2ZS4KIAogICAgIGJvb2wgYXBwZW5kVmFyaWFudChjb25zdCBHZXRC
eUlkVmFyaWFudCYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luQnlJ
ZFN0YXR1cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0luQnlJZFN0YXR1cy5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9JbkJ5SWRTdGF0dXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEs
NiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxOCBZdXN1a2UgU3V6dWtpIDx1dGF0YW5lLnRl
YUBnbWFpbC5jb20+LgotICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOC0yMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjUxLDEy
ICsyNTEsMTYgQEAgdm9pZCBJbkJ5SWRTdGF0dXM6OmZpbHRlcihjb25zdCBTdHJ1Y3R1cgogICAg
ICAgICBtX3N0YXRlID0gTm9JbmZvcm1hdGlvbjsKIH0KIAotdm9pZCBJbkJ5SWRTdGF0dXM6Om1h
cmtJZkNoZWFwKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRv
cj4KK3ZvaWQgSW5CeUlkU3RhdHVzOjptYXJrSWZDaGVhcChWaXNpdG9yJiB2aXNpdG9yKQogewog
ICAgIGZvciAoSW5CeUlkVmFyaWFudCYgdmFyaWFudCA6IG1fdmFyaWFudHMpCiAgICAgICAgIHZh
cmlhbnQubWFya0lmQ2hlYXAodmlzaXRvcik7CiB9CiAKK3RlbXBsYXRlIHZvaWQgSW5CeUlkU3Rh
dHVzOjptYXJrSWZDaGVhcChBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIElu
QnlJZFN0YXR1czo6bWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImKTsKKwogYm9vbCBJbkJ5SWRTdGF0
dXM6OmZpbmFsaXplKFZNJiB2bSkKIHsKICAgICBmb3IgKEluQnlJZFZhcmlhbnQmIHZhcmlhbnQg
OiBtX3ZhcmlhbnRzKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5C
eUlkU3RhdHVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0luQnlJZFN0YXR1cy5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvSW5CeUlkU3RhdHVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBA
CiAvKgogICogQ29weXJpZ2h0IChDKSAyMDE4IFl1c3VrZSBTdXp1a2kgPHV0YXRhbmUudGVhQGdt
YWlsLmNvbT4uCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMDYsNyArMTA2
LDcgQEAgcHVibGljOgogICAgIC8vIEF0dGVtcHRzIHRvIHJlZHVjZSB0aGUgc2V0IG9mIHZhcmlh
bnRzIHRvIGZpdCB0aGUgZ2l2ZW4gc3RydWN0dXJlIHNldC4gVGhpcyBtYXkgYmUgYXBwcm94aW1h
dGUuCiAgICAgdm9pZCBmaWx0ZXIoY29uc3QgU3RydWN0dXJlU2V0Jik7CiAgICAgCi0gICAgdm9p
ZCBtYXJrSWZDaGVhcChTbG90VmlzaXRvciYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0
b3I+IHZvaWQgbWFya0lmQ2hlYXAoVmlzaXRvciYpOwogICAgIGJvb2wgZmluYWxpemUoVk0mKTsK
IAogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0luQnlJZFZhcmlhbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbkJ5SWRWYXJpYW50LmNwcAkocmV2aXNpb24gMjcy
ODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luQnlJZFZhcmlhbnQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAx
OCBZdXN1a2UgU3V6dWtpIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+LgotICogQ29weXJpZ2h0IChD
KSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxOC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtNjQsMTEgKzY0LDE1IEBAIGJvb2wgSW5CeUlkVmFyaWFudDo6
YXR0ZW1wdFRvTWVyZ2UoY29uc3QKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBJbkJ5SWRW
YXJpYW50OjptYXJrSWZDaGVhcChTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVu
YW1lIFZpc2l0b3I+Cit2b2lkIEluQnlJZFZhcmlhbnQ6Om1hcmtJZkNoZWFwKFZpc2l0b3ImIHZp
c2l0b3IpCiB7CiAgICAgbV9zdHJ1Y3R1cmVTZXQubWFya0lmQ2hlYXAodmlzaXRvcik7CiB9CiAK
K3RlbXBsYXRlIHZvaWQgSW5CeUlkVmFyaWFudDo6bWFya0lmQ2hlYXAoQWJzdHJhY3RTbG90Vmlz
aXRvciYpOwordGVtcGxhdGUgdm9pZCBJbkJ5SWRWYXJpYW50OjptYXJrSWZDaGVhcChTbG90Vmlz
aXRvciYpOworCiBib29sIEluQnlJZFZhcmlhbnQ6OmZpbmFsaXplKFZNJiB2bSkKIHsKICAgICBp
ZiAoIW1fc3RydWN0dXJlU2V0LmlzU3RpbGxBbGl2ZSh2bSkpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvSW5CeUlkVmFyaWFudC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbkJ5SWRWYXJpYW50LmgJKHJldmlzaW9uIDI3MjgzMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbkJ5SWRWYXJpYW50LmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDE4IFl1c3Vr
ZSBTdXp1a2kgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4uCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTgg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE4LTIw
MjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC01Nyw3ICs1Nyw3IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgYXR0ZW1wdFRv
TWVyZ2UoY29uc3QgSW5CeUlkVmFyaWFudCYgb3RoZXIpOwogICAgIAotICAgIHZvaWQgbWFya0lm
Q2hlYXAoU2xvdFZpc2l0b3ImKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lk
IG1hcmtJZkNoZWFwKFZpc2l0b3ImKTsKICAgICBib29sIGZpbmFsaXplKFZNJik7CiAKICAgICB2
b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9JbnRlcm5hbEZ1bmN0aW9uQWxsb2NhdGlvblByb2ZpbGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW50ZXJuYWxGdW5jdGlvbkFsbG9j
YXRpb25Qcm9maWxlLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9JbnRlcm5hbEZ1bmN0aW9uQWxsb2NhdGlvblByb2ZpbGUuaAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTM5LDcgKzM5LDcgQEAgcHVibGljOgogICAgIFN0cnVjdHVyZSogY3JlYXRlQWxs
b2NhdGlvblN0cnVjdHVyZUZyb21CYXNlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU0NlbGwqIG93
bmVyLCBKU09iamVjdCogcHJvdG90eXBlLCBTdHJ1Y3R1cmUqIGJhc2UpOwogCiAgICAgdm9pZCBj
bGVhcigpIHsgbV9zdHJ1Y3R1cmUuY2xlYXIoKTsgfQotICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUo
U2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsgdmlzaXRvci5hcHBlbmQobV9zdHJ1Y3R1cmUpOyB9Cisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCB2aXNpdEFnZ3JlZ2F0ZShWaXNpdG9y
JiB2aXNpdG9yKSB7IHZpc2l0b3IuYXBwZW5kKG1fc3RydWN0dXJlKTsgfQogCiBwcml2YXRlOgog
ICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1fc3RydWN0dXJlOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL09iamVjdEFsbG9jYXRpb25Qcm9maWxlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09iamVjdEFsbG9jYXRpb25Qcm9m
aWxlLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9PYmplY3RBbGxvY2F0aW9uUHJvZmlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjQsNyArNjQs
OCBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIEFTU0VSVChpc051bGwoKSk7CiAgICAgfQogCi0gICAg
dm9pZCB2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYgdmlzaXRvcikKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBWaXNpdG9yPgorICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoVmlzaXRvciYgdmlzaXRv
cikKICAgICB7CiAgICAgICAgIHZpc2l0b3IuYXBwZW5kKG1fc3RydWN0dXJlKTsKICAgICB9CkBA
IC0xMTAsNyArMTExLDggQEAgcHVibGljOgogICAgICAgICBBU1NFUlQoaXNOdWxsKCkpOwogICAg
IH0KIAotICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisgICAg
dGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KKyAgICB2b2lkIHZpc2l0QWdncmVnYXRlKFZpc2l0
b3ImIHZpc2l0b3IpCiAgICAgewogICAgICAgICBCYXNlOjp2aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9y
KTsKICAgICAgICAgdmlzaXRvci5hcHBlbmQobV9wcm90b3R5cGUpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwCShy
ZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1v
cnBoaWNBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxNC0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzU4LDcgKzM1OCw4IEBAIGJvb2wg
UG9seW1vcnBoaWNBY2Nlc3M6OnZpc2l0V2VhayhWTSYgdm0KICAgICByZXR1cm4gdHJ1ZTsKIH0K
IAotYm9vbCBQb2x5bW9ycGhpY0FjY2Vzczo6cHJvcGFnYXRlVHJhbnNpdGlvbnMoU2xvdFZpc2l0
b3ImIHZpc2l0b3IpIGNvbnN0Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgorYm9vbCBQb2x5
bW9ycGhpY0FjY2Vzczo6cHJvcGFnYXRlVHJhbnNpdGlvbnMoVmlzaXRvciYgdmlzaXRvcikgY29u
c3QKIHsKICAgICBib29sIHJlc3VsdCA9IHRydWU7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IHNpemUoKTsgKytpKQpAQCAtMzY2LDEyICszNjcsMTggQEAgYm9vbCBQb2x5bW9ycGhpY0Fj
Y2Vzczo6cHJvcGFnYXRlVHJhbnNpdAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQgUG9s
eW1vcnBoaWNBY2Nlc3M6OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVt
cGxhdGUgYm9vbCBQb2x5bW9ycGhpY0FjY2Vzczo6cHJvcGFnYXRlVHJhbnNpdGlvbnMoQWJzdHJh
Y3RTbG90VmlzaXRvciYpIGNvbnN0OwordGVtcGxhdGUgYm9vbCBQb2x5bW9ycGhpY0FjY2Vzczo6
cHJvcGFnYXRlVHJhbnNpdGlvbnMoU2xvdFZpc2l0b3ImKSBjb25zdDsKKwordGVtcGxhdGU8dHlw
ZW5hbWUgVmlzaXRvcj4KK3ZvaWQgUG9seW1vcnBoaWNBY2Nlc3M6OnZpc2l0QWdncmVnYXRlSW1w
bChWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXpl
KCk7ICsraSkKICAgICAgICAgYXQoaSkudmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7CiB9CiAKK0RF
RklORV9WSVNJVF9BR0dSRUdBVEUoUG9seW1vcnBoaWNBY2Nlc3MpOworCiB2b2lkIFBvbHltb3Jw
aGljQWNjZXNzOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiB7CiAgICAgb3V0LnByaW50
KFJhd1BvaW50ZXIodGhpcyksICI6WyIpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmgJKHJldmlzaW9uIDI3MjgzMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNC0yMDIw
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNC0y
MDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMTUyLDE0ICsxNTIsMTQgQEAgcHVibGljOgogICAgIGNvbnN0IEFjY2Vz
c0Nhc2UmIGF0KHVuc2lnbmVkIGkpIGNvbnN0IHsgcmV0dXJuICptX2xpc3RbaV07IH0KICAgICBj
b25zdCBBY2Nlc3NDYXNlJiBvcGVyYXRvcltdKHVuc2lnbmVkIGkpIGNvbnN0IHsgcmV0dXJuICpt
X2xpc3RbaV07IH0KIAotICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImKTsKKyAg
ICBERUNMQVJFX1ZJU0lUX0FHR1JFR0FURTsKIAogICAgIC8vIElmIHRoaXMgcmV0dXJucyBmYWxz
ZSB0aGVuIHdlIGFyZSByZXF1ZXN0aW5nIGEgcmVzZXQgb2YgdGhlIG93bmluZyBTdHJ1Y3R1cmVT
dHViSW5mby4KICAgICBib29sIHZpc2l0V2VhayhWTSYpIGNvbnN0OwogICAgIAogICAgIC8vIFRo
aXMgcmV0dXJucyB0cnVlIGlmIGl0IGhhcyBtYXJrZWQgZXZlcnl0aGluZyBpdCB3aWxsIGV2ZXIg
bWFya2VkLiBUaGlzIGNhbiBiZSB1c2VkIGFzIGFuCiAgICAgLy8gb3B0aW1pemF0aW9uIHRvIHRo
ZW4gYXZvaWQgY2FsbGluZyB0aGlzIG1ldGhvZCBhZ2FpbiBkdXJpbmcgdGhlIGZpeHBvaW50Lgot
ICAgIGJvb2wgcHJvcGFnYXRlVHJhbnNpdGlvbnMoU2xvdFZpc2l0b3ImKSBjb25zdDsKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiBib29sIHByb3BhZ2F0ZVRyYW5zaXRpb25zKFZpc2l0
b3ImKSBjb25zdDsKIAogICAgIHZvaWQgYWJvdXRUb0RpZSgpOwogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuY3BwCShyZXZpc2lvbiAy
NzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDEyLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEyLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0zOTYsMTIgKzM5NiwxNiBAQCBQdXRCeUlkU3RhdHVzIFB1
dEJ5SWRTdGF0dXM6OnNsb3dWZXJzaW9uCiAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMobWFrZXND
YWxscygpID8gTWFrZXNDYWxscyA6IFRha2VzU2xvd1BhdGgpOwogfQogCi12b2lkIFB1dEJ5SWRT
dGF0dXM6Om1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5h
bWUgVmlzaXRvcj4KK3ZvaWQgUHV0QnlJZFN0YXR1czo6bWFya0lmQ2hlYXAoVmlzaXRvciYgdmlz
aXRvcikKIHsKICAgICBmb3IgKFB1dEJ5SWRWYXJpYW50JiB2YXJpYW50IDogbV92YXJpYW50cykK
ICAgICAgICAgdmFyaWFudC5tYXJrSWZDaGVhcCh2aXNpdG9yKTsKIH0KIAordGVtcGxhdGUgdm9p
ZCBQdXRCeUlkU3RhdHVzOjptYXJrSWZDaGVhcChBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1w
bGF0ZSB2b2lkIFB1dEJ5SWRTdGF0dXM6Om1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJik7CisKIGJv
b2wgUHV0QnlJZFN0YXR1czo6ZmluYWxpemUoVk0mIHZtKQogewogICAgIGZvciAoUHV0QnlJZFZh
cmlhbnQmIHZhcmlhbnQgOiBtX3ZhcmlhbnRzKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTggQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0xMTcsNyArMTE3LDcgQEAgcHVibGljOgogICAgIGNvbnN0IFB1dEJ5SWRWYXJpYW50
JiBhdChzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fdmFyaWFudHNbaW5kZXhdOyB9CiAg
ICAgY29uc3QgUHV0QnlJZFZhcmlhbnQmIG9wZXJhdG9yW10oc2l6ZV90IGluZGV4KSBjb25zdCB7
IHJldHVybiBhdChpbmRleCk7IH0KICAgICAKLSAgICB2b2lkIG1hcmtJZkNoZWFwKFNsb3RWaXNp
dG9yJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCBtYXJrSWZDaGVhcChW
aXNpdG9yJik7CiAgICAgYm9vbCBmaW5hbGl6ZShWTSYpOwogICAgIAogICAgIHZvaWQgbWVyZ2Uo
Y29uc3QgUHV0QnlJZFN0YXR1cyYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1B1dEJ5SWRWYXJpYW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNC0yMDE4IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMjYyLDEzICsyNjIsMTcgQEAgYm9vbCBQdXRCeUlkVmFyaWFudDo6YXR0ZW1wdFRv
TWVyZ2VUcmFucwogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIFB1dEJ5SWRWYXJpYW50Ojpt
YXJrSWZDaGVhcChTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0
b3I+Cit2b2lkIFB1dEJ5SWRWYXJpYW50OjptYXJrSWZDaGVhcChWaXNpdG9yJiB2aXNpdG9yKQog
ewogICAgIG1fb2xkU3RydWN0dXJlLm1hcmtJZkNoZWFwKHZpc2l0b3IpOwogICAgIGlmIChtX25l
d1N0cnVjdHVyZSkKICAgICAgICAgbV9uZXdTdHJ1Y3R1cmUtPm1hcmtJZkNoZWFwKHZpc2l0b3Ip
OwogfQogCit0ZW1wbGF0ZSB2b2lkIFB1dEJ5SWRWYXJpYW50OjptYXJrSWZDaGVhcChBYnN0cmFj
dFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIFB1dEJ5SWRWYXJpYW50OjptYXJrSWZDaGVh
cChTbG90VmlzaXRvciYpOworCiBib29sIFB1dEJ5SWRWYXJpYW50OjpmaW5hbGl6ZShWTSYgdm0p
CiB7CiAgICAgaWYgKCFtX29sZFN0cnVjdHVyZS5pc1N0aWxsQWxpdmUodm0pKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmgJKHJldmlz
aW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkVmFy
aWFudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxNC0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTMyLDcgKzEzMiw3IEBAIHB1YmxpYzoKIAogICAg
IGJvb2wgYXR0ZW1wdFRvTWVyZ2UoY29uc3QgUHV0QnlJZFZhcmlhbnQmIG90aGVyKTsKICAgICAK
LSAgICB2b2lkIG1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJik7CisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgVmlzaXRvcj4gdm9pZCBtYXJrSWZDaGVhcChWaXNpdG9yJik7CiAgICAgYm9vbCBmaW5hbGl6
ZShWTSYpOwogICAgIAogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1JlY29yZGVkU3RhdHVzZXMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9SZWNvcmRlZFN0YXR1c2Vz
LmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1JlY29yZGVkU3RhdHVzZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDIsNyArMTAyLDggQEAg
U2V0UHJpdmF0ZUJyYW5kU3RhdHVzKiBSZWNvcmRlZFN0YXR1c2VzOgogICAgIHJldHVybiByZXN1
bHQ7CiB9CiAKLXZvaWQgUmVjb3JkZWRTdGF0dXNlczo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0
b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBSZWNvcmRlZFN0
YXR1c2VzOjp2aXNpdEFnZ3JlZ2F0ZUltcGwoVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBmb3Ig
KGF1dG8mIHBhaXIgOiBnZXRzKQogICAgICAgICBwYWlyLnNlY29uZC0+dmlzaXRBZ2dyZWdhdGUo
dmlzaXRvcik7CkBAIC0xMTQsNyArMTE1LDEwIEBAIHZvaWQgUmVjb3JkZWRTdGF0dXNlczo6dmlz
aXRBZ2dyZWdhdGUoU2wKICAgICAgICAgcGFpci5zZWNvbmQtPnZpc2l0QWdncmVnYXRlKHZpc2l0
b3IpOwogfQogCi12b2lkIFJlY29yZGVkU3RhdHVzZXM6Om1hcmtJZkNoZWFwKFNsb3RWaXNpdG9y
JiB2aXNpdG9yKQorREVGSU5FX1ZJU0lUX0FHR1JFR0FURShSZWNvcmRlZFN0YXR1c2VzKTsKKwor
dGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgUmVjb3JkZWRTdGF0dXNlczo6bWFya0lm
Q2hlYXAoVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBmb3IgKGF1dG8mIHBhaXIgOiBnZXRzKQog
ICAgICAgICBwYWlyLnNlY29uZC0+bWFya0lmQ2hlYXAodmlzaXRvcik7CkBAIC0xMzAsNiArMTM0
LDkgQEAgdm9pZCBSZWNvcmRlZFN0YXR1c2VzOjptYXJrSWZDaGVhcChTbG90VgogICAgICAgICBw
YWlyLnNlY29uZC0+bWFya0lmQ2hlYXAodmlzaXRvcik7CiB9CiAKK3RlbXBsYXRlIHZvaWQgUmVj
b3JkZWRTdGF0dXNlczo6bWFya0lmQ2hlYXAoQWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxh
dGUgdm9pZCBSZWNvcmRlZFN0YXR1c2VzOjptYXJrSWZDaGVhcChTbG90VmlzaXRvciYpOworCiB2
b2lkIFJlY29yZGVkU3RhdHVzZXM6OmZpbmFsaXplV2l0aG91dERlbGV0aW5nKFZNJiB2bSkKIHsK
ICAgICAvLyBUaGlzIHZhcmlhbnQgb2YgZmluYWxpemUgZ2V0cyBjYWxsZWQgZnJvbSB3aXRoaW4g
Z3JhcGggc2FmZXBvaW50cyAtLSBzbyB0aGVyZSBtYXkgYmUgREZHIElSIGluCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUmVjb3JkZWRTdGF0dXNlcy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9SZWNvcmRlZFN0YXR1c2VzLmgJKHJl
dmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9SZWNvcmRl
ZFN0YXR1c2VzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDE4LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE4LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01NCw4ICs1NCw4IEBAIHN0cnVjdCBSZWNv
cmRlZFN0YXR1c2VzIHsKICAgICBDaGVja1ByaXZhdGVCcmFuZFN0YXR1cyogYWRkQ2hlY2tQcml2
YXRlQnJhbmRTdGF0dXMoY29uc3QgQ29kZU9yaWdpbiYsIGNvbnN0IENoZWNrUHJpdmF0ZUJyYW5k
U3RhdHVzJik7CiAgICAgU2V0UHJpdmF0ZUJyYW5kU3RhdHVzKiBhZGRTZXRQcml2YXRlQnJhbmRT
dGF0dXMoY29uc3QgQ29kZU9yaWdpbiYsIGNvbnN0IFNldFByaXZhdGVCcmFuZFN0YXR1cyYpOwog
ICAgIAotICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImKTsKLSAgICB2b2lkIG1h
cmtJZkNoZWFwKFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9BR0dSRUdBVEU7Cisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCBtYXJrSWZDaGVhcChWaXNpdG9yJik7
CiAgICAgCiAgICAgdm9pZCBmaW5hbGl6ZVdpdGhvdXREZWxldGluZyhWTSYpOwogICAgIHZvaWQg
ZmluYWxpemUoVk0mKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TZXRQ
cml2YXRlQnJhbmRTdGF0dXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9TZXRQcml2YXRlQnJhbmRTdGF0dXMuY3BwCShyZXZpc2lvbiAyNzI4MzApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU2V0UHJpdmF0ZUJyYW5kU3RhdHVzLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjM1LDE4ICsyMzUsMjUgQEAgQ2FjaGVhYmxlSWRlbnRpZmll
ciBTZXRQcml2YXRlQnJhbmRTdGF0dQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQgU2V0
UHJpdmF0ZUJyYW5kU3RhdHVzOjp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYgdmlzaXRvcikK
K3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFNldFByaXZhdGVCcmFuZFN0YXR1czo6
dmlzaXRBZ2dyZWdhdGVJbXBsKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgZm9yIChTZXRQcml2
YXRlQnJhbmRWYXJpYW50JiB2YXJpYW50IDogbV92YXJpYW50cykKICAgICAgICAgdmFyaWFudC52
aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKIH0KIAotdm9pZCBTZXRQcml2YXRlQnJhbmRTdGF0dXM6
Om1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorREVGSU5FX1ZJU0lUX0FHR1JFR0FU
RShTZXRQcml2YXRlQnJhbmRTdGF0dXMpOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgor
dm9pZCBTZXRQcml2YXRlQnJhbmRTdGF0dXM6Om1hcmtJZkNoZWFwKFZpc2l0b3ImIHZpc2l0b3Ip
CiB7CiAgICAgZm9yIChTZXRQcml2YXRlQnJhbmRWYXJpYW50JiB2YXJpYW50IDogbV92YXJpYW50
cykKICAgICAgICAgdmFyaWFudC5tYXJrSWZDaGVhcCh2aXNpdG9yKTsKIH0KIAordGVtcGxhdGUg
dm9pZCBTZXRQcml2YXRlQnJhbmRTdGF0dXM6Om1hcmtJZkNoZWFwKEFic3RyYWN0U2xvdFZpc2l0
b3ImKTsKK3RlbXBsYXRlIHZvaWQgU2V0UHJpdmF0ZUJyYW5kU3RhdHVzOjptYXJrSWZDaGVhcChT
bG90VmlzaXRvciYpOworCiBib29sIFNldFByaXZhdGVCcmFuZFN0YXR1czo6ZmluYWxpemUoVk0m
IHZtKQogewogICAgIGZvciAoYXV0byYgdmFyaWFudCA6IG1fdmFyaWFudHMpIHsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TZXRQcml2YXRlQnJhbmRTdGF0dXMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU2V0UHJpdmF0ZUJyYW5k
U3RhdHVzLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9TZXRQcml2YXRlQnJhbmRTdGF0dXMuaAkod29ya2luZyBjb3B5KQpAQCAtODMsOCArODMs
OCBAQCBwdWJsaWM6CiAgICAgLy8gQXR0ZW1wdHMgdG8gcmVkdWNlIHRoZSBzZXQgb2YgdmFyaWFu
dHMgdG8gZml0IHRoZSBnaXZlbiBzdHJ1Y3R1cmUgc2V0LiBUaGlzIG1heSBiZSBhcHByb3hpbWF0
ZS4KICAgICB2b2lkIGZpbHRlcihjb25zdCBTdHJ1Y3R1cmVTZXQmKTsKIAotICAgIHZvaWQgdmlz
aXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImKTsKLSAgICB2b2lkIG1hcmtJZkNoZWFwKFNsb3RWaXNp
dG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9BR0dSRUdBVEU7CisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgVmlzaXRvcj4gdm9pZCBtYXJrSWZDaGVhcChWaXNpdG9yJik7CiAgICAgYm9vbCBmaW5hbGl6
ZShWTSYpOwogCiAgICAgYm9vbCBhcHBlbmRWYXJpYW50KGNvbnN0IFNldFByaXZhdGVCcmFuZFZh
cmlhbnQmKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TZXRQcml2YXRl
QnJhbmRWYXJpYW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvU2V0UHJpdmF0ZUJyYW5kVmFyaWFudC5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TZXRQcml2YXRlQnJhbmRWYXJpYW50LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjAg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIwLTIw
MjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDIx
IElnYWxpYSBTLkEuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC01
NCw3ICs1NCw4IEBAIGJvb2wgU2V0UHJpdmF0ZUJyYW5kVmFyaWFudDo6YXR0ZW1wdFRvTWUKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBTZXRQcml2YXRlQnJhbmRWYXJpYW50OjptYXJrSWZD
aGVhcChTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2
b2lkIFNldFByaXZhdGVCcmFuZFZhcmlhbnQ6Om1hcmtJZkNoZWFwKFZpc2l0b3ImIHZpc2l0b3Ip
CiB7CiAgICAgaWYgKG1fb2xkU3RydWN0dXJlKQogICAgICAgICBtX29sZFN0cnVjdHVyZS0+bWFy
a0lmQ2hlYXAodmlzaXRvcik7CkBAIC02Miw2ICs2Myw5IEBAIHZvaWQgU2V0UHJpdmF0ZUJyYW5k
VmFyaWFudDo6bWFya0lmQ2hlYXAKICAgICAgICAgbV9uZXdTdHJ1Y3R1cmUtPm1hcmtJZkNoZWFw
KHZpc2l0b3IpOwogfQogCit0ZW1wbGF0ZSB2b2lkIFNldFByaXZhdGVCcmFuZFZhcmlhbnQ6Om1h
cmtJZkNoZWFwKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgU2V0UHJpdmF0
ZUJyYW5kVmFyaWFudDo6bWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImKTsKKwogYm9vbCBTZXRQcml2
YXRlQnJhbmRWYXJpYW50OjpmaW5hbGl6ZShWTSYgdm0pCiB7CiAgICAgaWYgKCF2bS5oZWFwLmlz
TWFya2VkKG1fb2xkU3RydWN0dXJlKSkKQEAgLTcxLDExICs3NSwxNCBAQCBib29sIFNldFByaXZh
dGVCcmFuZFZhcmlhbnQ6OmZpbmFsaXplKFZNCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQg
U2V0UHJpdmF0ZUJyYW5kVmFyaWFudDo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImIHZpc2l0
b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBTZXRQcml2YXRlQnJhbmRWYXJp
YW50Ojp2aXNpdEFnZ3JlZ2F0ZUltcGwoVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBtX2lkZW50
aWZpZXIudmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7CiB9CiAKK0RFRklORV9WSVNJVF9BR0dSRUdB
VEUoU2V0UHJpdmF0ZUJyYW5kVmFyaWFudCk7CisKIHZvaWQgU2V0UHJpdmF0ZUJyYW5kVmFyaWFu
dDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAogewogICAgIGR1bXBJbkNvbnRleHQob3V0
LCBudWxscHRyKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TZXRQcml2
YXRlQnJhbmRWYXJpYW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1NldFByaXZhdGVCcmFuZFZhcmlhbnQuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NldFByaXZhdGVCcmFuZFZhcmlhbnQuaAkod29y
a2luZyBjb3B5KQpAQCAtNDUsOCArNDUsOCBAQCBwdWJsaWM6CiAKICAgICBib29sIGF0dGVtcHRU
b01lcmdlKGNvbnN0IFNldFByaXZhdGVCcmFuZFZhcmlhbnQmIG90aGVyKTsKIAotICAgIHZvaWQg
dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImKTsKLSAgICB2b2lkIG1hcmtJZkNoZWFwKFNsb3RW
aXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9BR0dSRUdBVEU7CisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVmlzaXRvcj4gdm9pZCBtYXJrSWZDaGVhcChWaXNpdG9yJik7CiAgICAgYm9vbCBmaW5h
bGl6ZShWTSYpOwogCiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU2V0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU2V0LmNwcAkocmV2
aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVy
ZVNldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDE0LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE0LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMSwxMiArMzEsMTYgQEAKIAogbmFtZXNwYWNl
IEpTQyB7CiAKLXZvaWQgU3RydWN0dXJlU2V0OjptYXJrSWZDaGVhcChTbG90VmlzaXRvciYgdmlz
aXRvcikgY29uc3QKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFN0cnVjdHVyZVNl
dDo6bWFya0lmQ2hlYXAoVmlzaXRvciYgdmlzaXRvcikgY29uc3QKIHsKICAgICBmb3IgKFN0cnVj
dHVyZSogc3RydWN0dXJlIDogKnRoaXMpCiAgICAgICAgIHN0cnVjdHVyZS0+bWFya0lmQ2hlYXAo
dmlzaXRvcik7CiB9CiAKK3RlbXBsYXRlIHZvaWQgU3RydWN0dXJlU2V0OjptYXJrSWZDaGVhcChB
YnN0cmFjdFNsb3RWaXNpdG9yJikgY29uc3Q7Cit0ZW1wbGF0ZSB2b2lkIFN0cnVjdHVyZVNldDo6
bWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImKSBjb25zdDsKKwogYm9vbCBTdHJ1Y3R1cmVTZXQ6Omlz
U3RpbGxBbGl2ZShWTSYgdm0pIGNvbnN0CiB7CiAgICAgZm9yIChTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSA6ICp0aGlzKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0
dXJlU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0
cnVjdHVyZVNldC5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvU3RydWN0dXJlU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01NCw3ICs1NCw3IEBA
IHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG9ubHlFbnRyeSgpOwogICAgIH0KIAotICAgIHZvaWQg
bWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPiB2b2lkIG1hcmtJZkNoZWFwKFZpc2l0b3ImKSBjb25zdDsKICAgICBib29sIGlzU3Rp
bGxBbGl2ZShWTSYpIGNvbnN0OwogICAgIAogICAgIHZvaWQgZHVtcEluQ29udGV4dChQcmludFN0
cmVhbSYsIER1bXBDb250ZXh0KikgY29uc3Q7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAJKHJldmlzaW9uIDI3Mjgz
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDA4LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDA4LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0yOTYsNyArMjk2LDggQEAgdm9pZCBTdHJ1Y3R1cmVTdHVi
SW5mbzo6cmVzZXQoY29uc3QgQ29uYwogICAgIHNldENhY2hlVHlwZShsb2NrZXIsIENhY2hlVHlw
ZTo6VW5zZXQpOwogfQogCi12b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjp2aXNpdEFnZ3JlZ2F0ZShT
bG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFN0
cnVjdHVyZVN0dWJJbmZvOjp2aXNpdEFnZ3JlZ2F0ZUltcGwoVmlzaXRvciYgdmlzaXRvcikKIHsK
ICAgICB7CiAgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9idWZmZXJlZFN0cnVjdHVy
ZXNMb2NrKTsKQEAgLTMyMiw2ICszMjMsOCBAQCB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjp2aXNp
dEFnZ3JlZ2F0ZShTCiAgICAgcmV0dXJuOwogfQogCitERUZJTkVfVklTSVRfQUdHUkVHQVRFKFN0
cnVjdHVyZVN0dWJJbmZvKTsKKwogdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6dmlzaXRXZWFrUmVm
ZXJlbmNlcyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXJCYXNlJiBsb2NrZXIsIENvZGVCbG9jayog
Y29kZUJsb2NrKQogewogICAgIFZNJiB2bSA9IGNvZGVCbG9jay0+dm0oKTsKQEAgLTM1Miw3ICsz
NTUsOCBAQCB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjp2aXNpdFdlYWtSZWZlcmVuCiAgICAgcmVz
ZXRCeUdDID0gdHJ1ZTsKIH0KIAotYm9vbCBTdHJ1Y3R1cmVTdHViSW5mbzo6cHJvcGFnYXRlVHJh
bnNpdGlvbnMoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
PgorYm9vbCBTdHJ1Y3R1cmVTdHViSW5mbzo6cHJvcGFnYXRlVHJhbnNpdGlvbnMoVmlzaXRvciYg
dmlzaXRvcikKIHsKICAgICBzd2l0Y2ggKG1fY2FjaGVUeXBlKSB7CiAgICAgY2FzZSBDYWNoZVR5
cGU6OlVuc2V0OgpAQCAtMzcxLDYgKzM3NSw5IEBAIGJvb2wgU3RydWN0dXJlU3R1YkluZm86OnBy
b3BhZ2F0ZVRyYW5zaXQKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAordGVtcGxhdGUgYm9vbCBTdHJ1
Y3R1cmVTdHViSW5mbzo6cHJvcGFnYXRlVHJhbnNpdGlvbnMoQWJzdHJhY3RTbG90VmlzaXRvciYp
OwordGVtcGxhdGUgYm9vbCBTdHJ1Y3R1cmVTdHViSW5mbzo6cHJvcGFnYXRlVHJhbnNpdGlvbnMo
U2xvdFZpc2l0b3ImKTsKKwogU3R1YkluZm9TdW1tYXJ5IFN0cnVjdHVyZVN0dWJJbmZvOjpzdW1t
YXJ5KFZNJiB2bSkgY29uc3QKIHsKICAgICBTdHViSW5mb1N1bW1hcnkgdGFrZXNTbG93UGF0aCA9
IFN0dWJJbmZvU3VtbWFyeTo6VGFrZXNTbG93UGF0aDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCShyZXZpc2lvbiAyNzI4
MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8u
aAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDgtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDgtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTkzLDE0ICs5MywxNCBAQCBwdWJsaWM6CiAgICAgdm9pZCBk
ZXJlZigpOwogICAgIHZvaWQgYWJvdXRUb0RpZSgpOwogCi0gICAgdm9pZCB2aXNpdEFnZ3JlZ2F0
ZShTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQUdHUkVHQVRFOwogCiAgICAgLy8g
Q2hlY2sgaWYgdGhlIHN0dWIgaGFzIHdlYWsgcmVmZXJlbmNlcyB0aGF0IGFyZSBkZWFkLiBJZiBp
dCBkb2VzLCB0aGVuIGl0IHJlc2V0cyBpdHNlbGYsCiAgICAgLy8gZWl0aGVyIGVudGlyZWx5IG9y
IGp1c3QgZW5vdWdoIHRvIGVuc3VyZSB0aGF0IHRob3NlIGRlYWQgcG9pbnRlcnMgZG9uJ3QgZ2V0
IHVzZWQgYW55bW9yZS4KICAgICB2b2lkIHZpc2l0V2Vha1JlZmVyZW5jZXMoY29uc3QgQ29uY3Vy
cmVudEpTTG9ja2VyQmFzZSYsIENvZGVCbG9jayopOwogICAgIAogICAgIC8vIFRoaXMgcmV0dXJu
cyB0cnVlIGlmIGl0IGhhcyBtYXJrZWQgZXZlcnl0aGluZyB0aGF0IGl0IHdpbGwgZXZlciBtYXJr
LgotICAgIGJvb2wgcHJvcGFnYXRlVHJhbnNpdGlvbnMoU2xvdFZpc2l0b3ImKTsKKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiBib29sIHByb3BhZ2F0ZVRyYW5zaXRpb25zKFZpc2l0b3Im
KTsKICAgICAgICAgCiAgICAgU3R1YkluZm9TdW1tYXJ5IHN1bW1hcnkoVk0mKSBjb25zdDsKICAg
ICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9j
ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlu
a2VkQ29kZUJsb2NrLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxOSBBcHBsZSBJbmMuIEFsbCBS
aWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMSBBcHBsZSBJbmMuIEFs
bCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTc1
LDcgKzc1LDggQEAgVW5saW5rZWRDb2RlQmxvY2s6OlVubGlua2VkQ29kZUJsb2NrKFZNJgogICAg
IH0KIH0KIAotdm9pZCBVbmxpbmtlZENvZGVCbG9jazo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNl
bGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3Zv
aWQgVW5saW5rZWRDb2RlQmxvY2s6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlz
aXRvciYgdmlzaXRvcikKIHsKICAgICBVbmxpbmtlZENvZGVCbG9jayogdGhpc09iamVjdCA9IGpz
Q2FzdDxVbmxpbmtlZENvZGVCbG9jayo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5I
RVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTk0LDYgKzk1LDggQEAgdm9pZCBVbmxpbmtl
ZENvZGVCbG9jazo6dmlzaXRDaGlsZHJlbihKUwogICAgIHZpc2l0b3IucmVwb3J0RXh0cmFNZW1v
cnlWaXNpdGVkKGV4dHJhTWVtb3J5KTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKFVubGlu
a2VkQ29kZUJsb2NrKTsKKwogc2l6ZV90IFVubGlua2VkQ29kZUJsb2NrOjplc3RpbWF0ZWRTaXpl
KEpTQ2VsbCogY2VsbCwgVk0mIHZtKQogewogICAgIFVubGlua2VkQ29kZUJsb2NrKiB0aGlzT2Jq
ZWN0ID0ganNDYXN0PFVubGlua2VkQ29kZUJsb2NrKj4oY2VsbCk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaAkocmV2aXNp
b24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29k
ZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDEyLTIwMTkgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEyLTIwMjEgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00MzEsNyArNDMxLDcgQEAgcHJpdmF0ZToKICAg
ICBSZWZDb3VudGVkQXJyYXk8RXhwcmVzc2lvblJhbmdlSW5mbz4gbV9leHByZXNzaW9uSW5mbzsK
IAogcHJvdGVjdGVkOgotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xv
dFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogICAgIHN0YXRpYyBzaXpl
X3QgZXN0aW1hdGVkU2l6ZShKU0NlbGwqLCBWTSYpOwogCiBwdWJsaWM6CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZEZ1bmN0
aW9uRXhlY3V0YWJsZS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTkgQXBwbGUg
SW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjEgQXBw
bGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0xNDYsNyArMTQ2LDggQEAgdm9pZCBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6
ZGVzdHJveQogICAgIHN0YXRpY19jYXN0PFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKj4oY2Vs
bCktPn5VbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSgpOwogfQogCi12b2lkIFVubGlua2VkRnVu
Y3Rpb25FeGVjdXRhYmxlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3Im
IHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBVbmxpbmtlZEZ1bmN0
aW9uRXhlY3V0YWJsZTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2
aXNpdG9yKQogewogICAgIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiB0aGlzT2JqZWN0ID0g
anNDYXN0PFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dD
X09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtMTY5LDYgKzE3MCw4IEBA
IHZvaWQgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU6OnZpc2l0Q2gKICAgICB9CiB9CiAKK0RF
RklORV9WSVNJVF9DSElMRFJFTihVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSk7CisKIFNvdXJj
ZUNvZGUgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU6OmxpbmtlZFNvdXJjZUNvZGUoY29uc3Qg
U291cmNlQ29kZSYgcGFzc2VkUGFyZW50U291cmNlKSBjb25zdAogewogICAgIGNvbnN0IFNvdXJj
ZUNvZGUmIHBhcmVudFNvdXJjZSA9ICFtX2lzQnVpbHRpbkRlZmF1bHRDbGFzc0NvbnN0cnVjdG9y
ID8gcGFzc2VkUGFyZW50U291cmNlIDogQnVpbHRpbkV4ZWN1dGFibGVzOjpkZWZhdWx0Q29uc3Ry
dWN0b3JTb3VyY2VDb2RlKGNvbnN0cnVjdG9yS2luZCgpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9uRXhlY3V0
YWJsZS5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxOSBBcHBsZSBJbmMuIEFsbCBSaWdo
dHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMSBBcHBsZSBJbmMuIEFsbCBS
aWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI0Miw3
ICsyNDIsNyBAQCBwcml2YXRlOgogICAgIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKFZNJiwg
U3RydWN0dXJlKiwgY29uc3QgU291cmNlQ29kZSYsIEZ1bmN0aW9uTWV0YWRhdGFOb2RlKiwgVW5s
aW5rZWRGdW5jdGlvbktpbmQsIENvbnN0cnVjdEFiaWxpdHksIEpTUGFyc2VyU2NyaXB0TW9kZSwg
UmVmUHRyPFREWkVudmlyb25tZW50TGluaz4sIE9wdGlvbmFsPFByaXZhdGVOYW1lRW52aXJvbm1l
bnQ+LCBKU0M6OkRlcml2ZWRDb250ZXh0VHlwZSwgSlNDOjpOZWVkc0NsYXNzRmllbGRJbml0aWFs
aXplciwgUHJpdmF0ZUJyYW5kUmVxdWlyZW1lbnQsIGJvb2wgaXNCdWlsdGluRGVmYXVsdENsYXNz
Q29uc3RydWN0b3IpOwogICAgIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKERlY29kZXImLCBj
b25zdCBDYWNoZWRGdW5jdGlvbkV4ZWN1dGFibGUmKTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0
Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxE
UkVOOwogCiAgICAgdm9pZCBkZWNvZGVDYWNoZWRDb2RlQmxvY2tzKFZNJik7CiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlclNjb3BlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXJTY29wZS5jcHAJKHJl
dmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dl
clNjb3BlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDgtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDgtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU1LDcgKzU1LDggQEAgdm9pZCBEZWJ1Z2dl
clNjb3BlOjpmaW5pc2hDcmVhdGlvbihWTSYgdgogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZt
KTsKIH0KIAotdm9pZCBEZWJ1Z2dlclNjb3BlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwg
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBE
ZWJ1Z2dlclNjb3BlOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZp
c2l0b3IpCiB7CiAgICAgRGVidWdnZXJTY29wZSogdGhpc09iamVjdCA9IGpzQ2FzdDxEZWJ1Z2dl
clNjb3BlKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0
LCBpbmZvKCkpOwpAQCAtNjUsNiArNjYsOCBAQCB2b2lkIERlYnVnZ2VyU2NvcGU6OnZpc2l0Q2hp
bGRyZW4oSlNDZWxsCiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9uZXh0KTsKIH0K
IAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKERlYnVnZ2VyU2NvcGUpOworCiBTdHJpbmcgRGVidWdn
ZXJTY29wZTo6Y2xhc3NOYW1lKGNvbnN0IEpTT2JqZWN0KiBvYmplY3QsIFZNJiB2bSkKIHsKICAg
ICBjb25zdCBEZWJ1Z2dlclNjb3BlKiBzY29wZSA9IGpzQ2FzdDxjb25zdCBEZWJ1Z2dlclNjb3Bl
Kj4ob2JqZWN0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dl
clNjb3BlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0Rl
YnVnZ2VyU2NvcGUuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RlYnVnZ2VyL0RlYnVnZ2VyU2NvcGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ2LDcgKzQ2LDcg
QEAgcHVibGljOgogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIERlYnVnZ2VyU2NvcGUq
IGNyZWF0ZShWTSYgdm0sIEpTU2NvcGUqIHNjb3BlKTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0
Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxE
UkVOOwogICAgIHN0YXRpYyBTdHJpbmcgY2xhc3NOYW1lKGNvbnN0IEpTT2JqZWN0KiwgVk0mKTsK
ICAgICBzdGF0aWMgU3RyaW5nIHRvU3RyaW5nTmFtZShjb25zdCBKU09iamVjdCosIEpTR2xvYmFs
T2JqZWN0Kik7CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0Kiwg
SlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkVHJhbnNpdGlvbnMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFRyYW5zaXRpb25zLmNw
cAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNp
cmVkVHJhbnNpdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzEsNiArMzEsNyBAQAogI2lu
Y2x1ZGUgIkNvZGVCbG9jay5oIgogI2luY2x1ZGUgIkRGR0NvbW1vbkRhdGEuaCIKICNpbmNsdWRl
ICJKU0NlbGxJbmxpbmVzLmgiCisjaW5jbHVkZSAiU2xvdFZpc2l0b3JJbmxpbmVzLmgiCiAKIG5h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIApAQCAtNTIsMTMgKzUzLDE3IEBAIHZvaWQg
RGVzaXJlZFRyYW5zaXRpb246OnJlYWxseUFkZChWTSYgdm0KICAgICAgICAgICAgIG1fb2xkU3Ry
dWN0dXJlLCBtX25ld1N0cnVjdHVyZSkpOwogfQogCi12b2lkIERlc2lyZWRUcmFuc2l0aW9uOjp2
aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlz
aXRvcj4KK3ZvaWQgRGVzaXJlZFRyYW5zaXRpb246OnZpc2l0Q2hpbGRyZW4oVmlzaXRvciYgdmlz
aXRvcikKIHsKICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKG1fY29kZU9yaWdpbk93bmVy
KTsKICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKG1fb2xkU3RydWN0dXJlKTsKICAgICB2
aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKG1fbmV3U3RydWN0dXJlKTsKIH0KIAordGVtcGxhdGUg
dm9pZCBEZXNpcmVkVHJhbnNpdGlvbjo6dmlzaXRDaGlsZHJlbihBYnN0cmFjdFNsb3RWaXNpdG9y
Jik7Cit0ZW1wbGF0ZSB2b2lkIERlc2lyZWRUcmFuc2l0aW9uOjp2aXNpdENoaWxkcmVuKFNsb3RW
aXNpdG9yJik7CisKIERlc2lyZWRUcmFuc2l0aW9uczo6RGVzaXJlZFRyYW5zaXRpb25zKCkKIHsK
IH0KQEAgLTc4LDEyICs4MywxNiBAQCB2b2lkIERlc2lyZWRUcmFuc2l0aW9uczo6cmVhbGx5QWRk
KFZNJiB2CiAgICAgICAgIG1fdHJhbnNpdGlvbnNbaV0ucmVhbGx5QWRkKHZtLCBjb21tb24pOwog
fQogCi12b2lkIERlc2lyZWRUcmFuc2l0aW9uczo6dmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYg
dmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIERlc2lyZWRUcmFuc2l0
aW9uczo6dmlzaXRDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBtX3RyYW5zaXRpb25zLnNpemUoKTsgaSsrKQogICAgICAgICBtX3RyYW5z
aXRpb25zW2ldLnZpc2l0Q2hpbGRyZW4odmlzaXRvcik7CiB9CiAKK3RlbXBsYXRlIHZvaWQgRGVz
aXJlZFRyYW5zaXRpb25zOjp2aXNpdENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3Rl
bXBsYXRlIHZvaWQgRGVzaXJlZFRyYW5zaXRpb25zOjp2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9y
Jik7CisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIAogI2VuZGlmIC8vIEVOQUJMRShERkdf
SklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkVHJhbnNpdGlv
bnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRU
cmFuc2l0aW9ucy5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Rlc2lyZWRUcmFuc2l0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMzLDcgKzMz
LDYgQEAgbmFtZXNwYWNlIEpTQyB7IAogCiBjbGFzcyBDb2RlQmxvY2s7CiBjbGFzcyBTY3JpcHRF
eGVjdXRhYmxlOwotY2xhc3MgU2xvdFZpc2l0b3I7CiBjbGFzcyBTdHJ1Y3R1cmU7CiBjbGFzcyBW
TTsKIApAQCAtNDYsOCArNDUsNyBAQCBwdWJsaWM6CiAgICAgRGVzaXJlZFRyYW5zaXRpb24oQ29k
ZUJsb2NrKiwgQ29kZUJsb2NrKiBjb2RlT3JpZ2luT3duZXIsIFN0cnVjdHVyZSosIFN0cnVjdHVy
ZSopOwogCiAgICAgdm9pZCByZWFsbHlBZGQoVk0mLCBDb21tb25EYXRhKik7Ci0gICAgCi0gICAg
dm9pZCB2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
VmlzaXRvcj4gdm9pZCB2aXNpdENoaWxkcmVuKFZpc2l0b3ImKTsKIAogcHJpdmF0ZToKICAgICBD
b2RlQmxvY2sqIG1fY29kZUJsb2NrOwpAQCAtNjMsNyArNjEsNyBAQCBwdWJsaWM6CiAKICAgICB2
b2lkIGFkZExhemlseShDb2RlQmxvY2sqLCBDb2RlQmxvY2sqIGNvZGVPcmlnaW5Pd25lciwgU3Ry
dWN0dXJlKiwgU3RydWN0dXJlKik7CiAgICAgdm9pZCByZWFsbHlBZGQoVk0mLCBDb21tb25EYXRh
Kik7Ci0gICAgdm9pZCB2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCB2aXNpdENoaWxkcmVuKFZpc2l0b3ImKTsKIAogcHJpdmF0
ZToKICAgICBWZWN0b3I8RGVzaXJlZFRyYW5zaXRpb24+IG1fdHJhbnNpdGlvbnM7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXZWFrUmVmZXJlbmNlcy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2Vha1JlZmVy
ZW5jZXMuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0Rlc2lyZWRXZWFrUmVmZXJlbmNlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC04NywxMiAr
ODcsMTYgQEAgdm9pZCBEZXNpcmVkV2Vha1JlZmVyZW5jZXM6OnJlYWxseUFkZChWTQogICAgIH0K
IH0KIAotdm9pZCBEZXNpcmVkV2Vha1JlZmVyZW5jZXM6OnZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0
b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBEZXNpcmVkV2Vh
a1JlZmVyZW5jZXM6OnZpc2l0Q2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBmb3Ig
KEpTQ2VsbCogdGFyZ2V0IDogbV9yZWZlcmVuY2VzKQogICAgICAgICB2aXNpdG9yLmFwcGVuZFVu
YmFycmllcmVkKHRhcmdldCk7CiB9CiAKK3RlbXBsYXRlIHZvaWQgRGVzaXJlZFdlYWtSZWZlcmVu
Y2VzOjp2aXNpdENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQg
RGVzaXJlZFdlYWtSZWZlcmVuY2VzOjp2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CisKIH0g
fSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIAogI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2Vha1JlZmVyZW5jZXMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXZWFrUmVm
ZXJlbmNlcy5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0Rlc2lyZWRXZWFrUmVmZXJlbmNlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzQsNyArMzQs
NiBAQCBuYW1lc3BhY2UgSlNDIHsgCiBjbGFzcyBDb2RlQmxvY2s7CiBjbGFzcyBKU0NlbGw7CiBj
bGFzcyBKU1ZhbHVlOwotY2xhc3MgU2xvdFZpc2l0b3I7CiBjbGFzcyBWTTsKIAogbmFtZXNwYWNl
IERGRyB7CkBAIC01Miw4ICs1MSw4IEBAIHB1YmxpYzoKICAgICBib29sIGNvbnRhaW5zKEpTQ2Vs
bCopOwogICAgIAogICAgIHZvaWQgcmVhbGx5QWRkKFZNJiwgQ29tbW9uRGF0YSopOwotICAgIAot
ICAgIHZvaWQgdmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYpOworCisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVmlzaXRvcj4gdm9pZCB2aXNpdENoaWxkcmVuKFZpc2l0b3ImKTsKIAogcHJpdmF0ZToK
ICAgICBDb2RlQmxvY2sqIG1fY29kZUJsb2NrOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdHcmFwaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdHcmFwaC5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHR3JhcGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MSw2ICs1MSw3IEBACiAjaW5j
bHVkZSAiSlNMZXhpY2FsRW52aXJvbm1lbnQuaCIKICNpbmNsdWRlICJNYXhGcmFtZUV4dGVudEZv
clNsb3dQYXRoQ2FsbC5oIgogI2luY2x1ZGUgIk9wZXJhbmRzSW5saW5lcy5oIgorI2luY2x1ZGUg
IlNsb3RWaXNpdG9ySW5saW5lcy5oIgogI2luY2x1ZGUgIlNuaXBwZXQuaCIKICNpbmNsdWRlICJT
dGFja0FsaWdubWVudC5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZUlubGluZXMuaCIKQEAgLTE0NDgs
NyArMTQ0OSw4IEBAIHZvaWQgR3JhcGg6OnJlZ2lzdGVyRnJvemVuVmFsdWVzKCkKICAgICBtX2Nv
ZGVCbG9jay0+Y29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uKCkuc2hyaW5rVG9GaXQo
KTsKIH0KIAotdm9pZCBHcmFwaDo6dmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikK
K3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+CitBTFdBWVNfSU5MSU5FIHZvaWQgR3JhcGg6OnZp
c2l0Q2hpbGRyZW5JbXBsKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgZm9yIChGcm96ZW5WYWx1
ZSogdmFsdWUgOiBtX2Zyb3plblZhbHVlcykgewogICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFy
cmllcmVkKHZhbHVlLT52YWx1ZSgpKTsKQEAgLTE0NTYsNiArMTQ1OCw5IEBAIHZvaWQgR3JhcGg6
OnZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHYKICAgICB9CiB9CiAKK3ZvaWQgR3JhcGg6OnZp
c2l0Q2hpbGRyZW4oQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikgeyB2aXNpdENoaWxkcmVu
SW1wbCh2aXNpdG9yKTsgfQordm9pZCBHcmFwaDo6dmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYg
dmlzaXRvcikgeyB2aXNpdENoaWxkcmVuSW1wbCh2aXNpdG9yKTsgfQorCiBGcm96ZW5WYWx1ZSog
R3JhcGg6OmZyZWV6ZShKU1ZhbHVlIHZhbHVlKQogewogICAgIGlmIChVTkxJS0VMWSghdmFsdWUp
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkocmV2aXNpb24gMjcyODMw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMS0yMDIwIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDIxIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMTAwMCw5ICsxMDAwLDEwIEBAIHB1YmxpYzoKICAgICBib29sIGNhbkRvRmFzdFNwcmVh
ZChOb2RlKiwgY29uc3QgQWJzdHJhY3RWYWx1ZSYpOwogICAgIAogICAgIHZvaWQgcmVnaXN0ZXJG
cm96ZW5WYWx1ZXMoKTsKLSAgICAKKworICAgIHZvaWQgdmlzaXRDaGlsZHJlbihBYnN0cmFjdFNs
b3RWaXNpdG9yJikgZmluYWw7CiAgICAgdm9pZCB2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJikg
ZmluYWw7Ci0gICAgCisKICAgICB2b2lkIGxvZ0Fzc2VydGlvbkZhaWx1cmUoCiAgICAgICAgIHN0
ZDo6bnVsbHB0cl90LCBjb25zdCBjaGFyKiBmaWxlLCBpbnQgbGluZSwgY29uc3QgY2hhciogZnVu
Y3Rpb24sCiAgICAgICAgIGNvbnN0IGNoYXIqIGFzc2VydGlvbik7CkBAIC0xMTg0LDYgKzExODUs
OCBAQCBwdWJsaWM6CiAgICAgSGFzaFNldDxOb2RlKj4gbV9zbG93R2V0QnlWYWw7CiAKIHByaXZh
dGU6CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCB2aXNpdENoaWxkcmVuSW1w
bChWaXNpdG9yJik7CisKICAgICBib29sIGlzU3RyaW5nUHJvdG90eXBlTWV0aG9kU2FuZShKU0ds
b2JhbE9iamVjdCosIFVuaXF1ZWRTdHJpbmdJbXBsKik7CiAKICAgICB2b2lkIGhhbmRsZVN1Y2Nl
c3NvcihWZWN0b3I8QmFzaWNCbG9jayosIDE2PiYgd29ya2xpc3QsIEJhc2ljQmxvY2sqLCBCYXNp
Y0Jsb2NrKiBzdWNjZXNzb3IpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQ
bGFuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4u
Y3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Bs
YW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjcyLDkgKzY3MiwxMCBAQCBDb21waWxhdGlvbktl
eSBQbGFuOjprZXkoKQogICAgIHJldHVybiBDb21waWxhdGlvbktleShtX2NvZGVCbG9jay0+YWx0
ZXJuYXRpdmUoKSwgbV9tb2RlKTsKIH0KIAotdm9pZCBQbGFuOjpjaGVja0xpdmVuZXNzQW5kVmlz
aXRDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0
b3I+Cit2b2lkIFBsYW46OmNoZWNrTGl2ZW5lc3NBbmRWaXNpdENoaWxkcmVuKFZpc2l0b3ImIHZp
c2l0b3IpCiB7Ci0gICAgaWYgKCFpc0tub3duVG9CZUxpdmVEdXJpbmdHQygpKQorICAgIGlmICgh
aXNLbm93blRvQmVMaXZlRHVyaW5nR0ModmlzaXRvcikpCiAgICAgICAgIHJldHVybjsKIAogICAg
IGNsZWFuTXVzdEhhbmRsZVZhbHVlc0lmTmVjZXNzYXJ5KCk7CkBAIC03MDIsMTMgKzcwMywzMyBA
QCB2b2lkIFBsYW46OmNoZWNrTGl2ZW5lc3NBbmRWaXNpdENoaWxkcmVuCiAgICAgbV90cmFuc2l0
aW9ucy52aXNpdENoaWxkcmVuKHZpc2l0b3IpOwogfQogCit0ZW1wbGF0ZSB2b2lkIFBsYW46OmNo
ZWNrTGl2ZW5lc3NBbmRWaXNpdENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBs
YXRlIHZvaWQgUGxhbjo6Y2hlY2tMaXZlbmVzc0FuZFZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3Im
KTsKKwogdm9pZCBQbGFuOjpmaW5hbGl6ZUluR0MoKQogewogICAgIEFTU0VSVChtX3ZtKTsKICAg
ICBtX3JlY29yZGVkU3RhdHVzZXMuZmluYWxpemVXaXRob3V0RGVsZXRpbmcoKm1fdm0pOwogfQog
Ci1ib29sIFBsYW46OmlzS25vd25Ub0JlTGl2ZUR1cmluZ0dDKCkKK3RlbXBsYXRlPHR5cGVuYW1l
IFZpc2l0b3I+Citib29sIFBsYW46OmlzS25vd25Ub0JlTGl2ZUR1cmluZ0dDKFZpc2l0b3ImIHZp
c2l0b3IpCit7CisgICAgaWYgKG1fc3RhZ2UgPT0gQ2FuY2VsbGVkKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgaWYgKCF2aXNpdG9yLmlzTWFya2VkKG1fY29kZUJsb2NrLT5vd25lckV4ZWN1
dGFibGUoKSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIXZpc2l0b3IuaXNNYXJr
ZWQobV9jb2RlQmxvY2stPmFsdGVybmF0aXZlKCkpKQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgaWYgKCEhbV9wcm9maWxlZERGR0NvZGVCbG9jayAmJiAhdmlzaXRvci5pc01hcmtlZChtX3By
b2ZpbGVkREZHQ29kZUJsb2NrKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiB0
cnVlOworfQorCit0ZW1wbGF0ZSBib29sIFBsYW46OmlzS25vd25Ub0JlTGl2ZUR1cmluZ0dDKEFi
c3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIGJvb2wgUGxhbjo6aXNLbm93blRvQmVMaXZl
RHVyaW5nR0MoU2xvdFZpc2l0b3ImKTsKKworYm9vbCBQbGFuOjppc0tub3duVG9CZUxpdmVBZnRl
ckdDKCkKIHsKICAgICBpZiAobV9zdGFnZSA9PSBDYW5jZWxsZWQpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5oCShyZXZpc2lvbiAyNzI4
MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uaAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTQ0LDcgKzQ0LDYgQEAKIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBDb2RlQmxvY2s7
Ci1jbGFzcyBTbG90VmlzaXRvcjsKIAogbmFtZXNwYWNlIERGRyB7CiAKQEAgLTcwLDEwICs2OSwx
MSBAQCBwdWJsaWM6CiAgICAgCiAgICAgQ29tcGlsYXRpb25LZXkga2V5KCk7CiAgICAgCi0gICAg
dGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KLSAgICB2b2lkIGl0ZXJhdGVDb2RlQmxvY2tzRm9yR0Mo
Y29uc3QgRnVuYyYpOwotICAgIHZvaWQgY2hlY2tMaXZlbmVzc0FuZFZpc2l0Q2hpbGRyZW4oU2xv
dFZpc2l0b3ImKTsKLSAgICBib29sIGlzS25vd25Ub0JlTGl2ZUR1cmluZ0dDKCk7CisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgRnVuYywgdHlwZW5hbWUgVmlzaXRvcj4KKyAgICB2b2lkIGl0ZXJhdGVD
b2RlQmxvY2tzRm9yR0MoVmlzaXRvciYsIGNvbnN0IEZ1bmMmKTsKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBWaXNpdG9yPiB2b2lkIGNoZWNrTGl2ZW5lc3NBbmRWaXNpdENoaWxkcmVuKFZpc2l0b3Im
KTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiBib29sIGlzS25vd25Ub0JlTGl2ZUR1
cmluZ0dDKFZpc2l0b3ImKTsKKyAgICBib29sIGlzS25vd25Ub0JlTGl2ZUFmdGVyR0MoKTsKICAg
ICB2b2lkIGZpbmFsaXplSW5HQygpOwogICAgIHZvaWQgY2FuY2VsKCk7CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbklubGluZXMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW5JbmxpbmVzLmgJKHJldmlzaW9uIDI3MjgzMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbklubGluZXMuaAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAxOCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTMxLDEwICszMSwxMCBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7
CiAKICNpZiBFTkFCTEUoREZHX0pJVCkKIAotdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KLXZvaWQg
UGxhbjo6aXRlcmF0ZUNvZGVCbG9ja3NGb3JHQyhjb25zdCBGdW5jJiBmdW5jKQordGVtcGxhdGU8
dHlwZW5hbWUgRnVuYywgdHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgUGxhbjo6aXRlcmF0ZUNvZGVC
bG9ja3NGb3JHQyhWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBGdW5jJiBmdW5jKQogewotICAgIGlm
ICghaXNLbm93blRvQmVMaXZlRHVyaW5nR0MoKSkKKyAgICBpZiAoIWlzS25vd25Ub0JlTGl2ZUR1
cmluZ0dDKHZpc2l0b3IpKQogICAgICAgICByZXR1cm47CiAgICAgCiAgICAgLy8gQ29tcGlsYXRp
b24gd3JpdGVzIGxvdHMgb2YgdmFsdWVzIHRvIGEgQ29kZUJsb2NrIHdpdGhvdXQgcGVyZm9ybWlu
ZwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlcG9pbnQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZXBvaW50LmNwcAkocmV2
aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlcG9pbnQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxNC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODMsMjggKzgzLDQ2IEBAIHZvaWQgU2FmZXBvaW50Ojpi
ZWdpbigpCiAgICAgfQogfQogCi12b2lkIFNhZmVwb2ludDo6Y2hlY2tMaXZlbmVzc0FuZFZpc2l0
Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
Pgordm9pZCBTYWZlcG9pbnQ6OmNoZWNrTGl2ZW5lc3NBbmRWaXNpdENoaWxkcmVuKFZpc2l0b3Im
IHZpc2l0b3IpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQobV9kaWRDYWxsQmVnaW4pOwogCiAgICAg
aWYgKG1fcmVzdWx0Lm1fZGlkR2V0Q2FuY2VsbGVkKQogICAgICAgICByZXR1cm47IC8vIFdlIHdl
cmUgY2FuY2VsbGVkIGR1cmluZyBhIHByZXZpb3VzIEdDIQogICAgIAotICAgIGlmICghaXNLbm93
blRvQmVMaXZlRHVyaW5nR0MoKSkKKyAgICBpZiAoIWlzS25vd25Ub0JlTGl2ZUR1cmluZ0dDKHZp
c2l0b3IpKQogICAgICAgICByZXR1cm47CiAgICAgCiAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9z
Y2FubmFibGVzLnNpemUoKTsgaS0tOykKICAgICAgICAgbV9zY2FubmFibGVzW2ldLT52aXNpdENo
aWxkcmVuKHZpc2l0b3IpOwogfQogCi1ib29sIFNhZmVwb2ludDo6aXNLbm93blRvQmVMaXZlRHVy
aW5nR0MoKQordGVtcGxhdGUgdm9pZCBTYWZlcG9pbnQ6OmNoZWNrTGl2ZW5lc3NBbmRWaXNpdENo
aWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgU2FmZXBvaW50Ojpj
aGVja0xpdmVuZXNzQW5kVmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYpOworCit0ZW1wbGF0ZTx0
eXBlbmFtZSBWaXNpdG9yPgorYm9vbCBTYWZlcG9pbnQ6OmlzS25vd25Ub0JlTGl2ZUR1cmluZ0dD
KFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgUkVMRUFTRV9BU1NFUlQobV9kaWRDYWxsQmVnaW4p
OworICAgIAorICAgIGlmIChtX3Jlc3VsdC5tX2RpZEdldENhbmNlbGxlZCkKKyAgICAgICAgcmV0
dXJuIHRydWU7IC8vIFdlIHdlcmUgY2FuY2VsbGVkIGR1cmluZyBhIHByZXZpb3VzIEdDLCBzbyBs
ZXQncyBub3QgbWVzcyB3aXRoIGl0IHRoaXMgdGltZSBhcm91bmQgLSBwcmV0ZW5kIGl0J3MgbGl2
ZSBhbmQgbW92ZSBvbi4KKyAgICAKKyAgICByZXR1cm4gbV9wbGFuLmlzS25vd25Ub0JlTGl2ZUR1
cmluZ0dDKHZpc2l0b3IpOworfQorCit0ZW1wbGF0ZSBib29sIFNhZmVwb2ludDo6aXNLbm93blRv
QmVMaXZlRHVyaW5nR0MoQWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgYm9vbCBTYWZl
cG9pbnQ6OmlzS25vd25Ub0JlTGl2ZUR1cmluZ0dDKFNsb3RWaXNpdG9yJik7CisKK2Jvb2wgU2Fm
ZXBvaW50Ojppc0tub3duVG9CZUxpdmVBZnRlckdDKCkKIHsKICAgICBSRUxFQVNFX0FTU0VSVCht
X2RpZENhbGxCZWdpbik7CiAgICAgCiAgICAgaWYgKG1fcmVzdWx0Lm1fZGlkR2V0Q2FuY2VsbGVk
KQogICAgICAgICByZXR1cm4gdHJ1ZTsgLy8gV2Ugd2VyZSBjYW5jZWxsZWQgZHVyaW5nIGEgcHJl
dmlvdXMgR0MsIHNvIGxldCdzIG5vdCBtZXNzIHdpdGggaXQgdGhpcyB0aW1lIGFyb3VuZCAtIHBy
ZXRlbmQgaXQncyBsaXZlIGFuZCBtb3ZlIG9uLgogICAgIAotICAgIHJldHVybiBtX3BsYW4uaXNL
bm93blRvQmVMaXZlRHVyaW5nR0MoKTsKKyAgICByZXR1cm4gbV9wbGFuLmlzS25vd25Ub0JlTGl2
ZUFmdGVyR0MoKTsKIH0KIAogdm9pZCBTYWZlcG9pbnQ6OmNhbmNlbCgpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVwb2ludC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZXBvaW50LmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZXBvaW50LmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0LCAyMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDIxIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtMzEsNyArMzEsNiBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotY2xhc3MgU2xvdFZpc2l0b3I7
CiBjbGFzcyBWTTsKIAogbmFtZXNwYWNlIERGRyB7CkBAIC02Niw5ICs2NSwxMCBAQCBwdWJsaWM6
CiAgICAgdm9pZCBhZGQoU2Nhbm5hYmxlKik7CiAgICAgCiAgICAgdm9pZCBiZWdpbigpOwotICAg
IAotICAgIHZvaWQgY2hlY2tMaXZlbmVzc0FuZFZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsK
LSAgICBib29sIGlzS25vd25Ub0JlTGl2ZUR1cmluZ0dDKCk7CisKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBWaXNpdG9yPiB2b2lkIGNoZWNrTGl2ZW5lc3NBbmRWaXNpdENoaWxkcmVuKFZpc2l0b3Im
KTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiBib29sIGlzS25vd25Ub0JlTGl2ZUR1
cmluZ0dDKFZpc2l0b3ImKTsKKyAgICBib29sIGlzS25vd25Ub0JlTGl2ZUFmdGVyR0MoKTsKICAg
ICB2b2lkIGNhbmNlbCgpOwogICAgIAogICAgIFZNKiB2bSgpIGNvbnN0OyAvLyBNYXkgcmV0dXJu
IG51bGwgaWYgd2UndmUgYmVlbiBjYW5jZWxsZWQuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NjYW5uYWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU2Nhbm5hYmxlLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU2Nhbm5hYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjksNiArMjksNyBAQAog
CiBuYW1lc3BhY2UgSlNDIHsKIAorY2xhc3MgQWJzdHJhY3RTbG90VmlzaXRvcjsKIGNsYXNzIFNs
b3RWaXNpdG9yOwogCiBuYW1lc3BhY2UgREZHIHsKQEAgLTM3LDcgKzM4LDggQEAgY2xhc3MgU2Nh
bm5hYmxlIHsKIHB1YmxpYzoKICAgICBTY2FubmFibGUoKSB7IH0KICAgICB2aXJ0dWFsIH5TY2Fu
bmFibGUoKSB7IH0KLSAgICAKKworICAgIHZpcnR1YWwgdm9pZCB2aXNpdENoaWxkcmVuKEFic3Ry
YWN0U2xvdFZpc2l0b3ImKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHZpc2l0Q2hpbGRyZW4oU2xv
dFZpc2l0b3ImKSA9IDA7CiB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1dvcmtsaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1dvcmtsaXN0LmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdXb3JrbGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNzIsNyArMzcyLDggQEAg
dm9pZCBXb3JrbGlzdDo6cmVzdW1lQWxsVGhyZWFkcygpCiAgICAgbV9zdXNwZW5zaW9uTG9jay51
bmxvY2soKTsKIH0KIAotdm9pZCBXb3JrbGlzdDo6dmlzaXRXZWFrUmVmZXJlbmNlcyhTbG90Vmlz
aXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFdvcmtsaXN0
Ojp2aXNpdFdlYWtSZWZlcmVuY2VzKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgVk0qIHZtID0g
JnZpc2l0b3IuaGVhcCgpLT52bSgpOwogICAgIHsKQEAgLTM5Niw2ICszOTcsOSBAQCB2b2lkIFdv
cmtsaXN0Ojp2aXNpdFdlYWtSZWZlcmVuY2VzKFNsb3RWCiAgICAgfQogfQogCit0ZW1wbGF0ZSB2
b2lkIFdvcmtsaXN0Ojp2aXNpdFdlYWtSZWZlcmVuY2VzKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsK
K3RlbXBsYXRlIHZvaWQgV29ya2xpc3Q6OnZpc2l0V2Vha1JlZmVyZW5jZXMoU2xvdFZpc2l0b3Im
KTsKKwogdm9pZCBXb3JrbGlzdDo6cmVtb3ZlRGVhZFBsYW5zKFZNJiB2bSkKIHsKICAgICB7CkBA
IC00MDUsNyArNDA5LDcgQEAgdm9pZCBXb3JrbGlzdDo6cmVtb3ZlRGVhZFBsYW5zKFZNJiB2bSkK
ICAgICAgICAgICAgIFBsYW4qIHBsYW4gPSBpdGVyLT52YWx1ZS5nZXQoKTsKICAgICAgICAgICAg
IGlmIChwbGFuLT52bSgpICE9ICZ2bSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAg
ICAgICAgIGlmIChwbGFuLT5pc0tub3duVG9CZUxpdmVEdXJpbmdHQygpKSB7CisgICAgICAgICAg
ICBpZiAocGxhbi0+aXNLbm93blRvQmVMaXZlQWZ0ZXJHQygpKSB7CiAgICAgICAgICAgICAgICAg
cGxhbi0+ZmluYWxpemVJbkdDKCk7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAg
ICAgICB9CkBAIC00NDAsNyArNDQ0LDcgQEAgdm9pZCBXb3JrbGlzdDo6cmVtb3ZlRGVhZFBsYW5z
KFZNJiB2bSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBpZiAoc2FmZXBvaW50LT52
bSgpICE9ICZ2bSkKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAoc2FmZXBvaW50
LT5pc0tub3duVG9CZUxpdmVEdXJpbmdHQygpKQorICAgICAgICBpZiAoc2FmZXBvaW50LT5pc0tu
b3duVG9CZUxpdmVBZnRlckdDKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgc2Fm
ZXBvaW50LT5jYW5jZWwoKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1dvcmtsaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdXb3JrbGlzdC5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1dvcmtsaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMywxMSArMzMsNyBAQAogI2lu
Y2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL0xvY2suaD4KIAotbmFtZXNwYWNl
IEpTQyB7Ci0KLWNsYXNzIFNsb3RWaXNpdG9yOwotCi1uYW1lc3BhY2UgREZHIHsKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAogI2lmIEVOQUJMRShERkdfSklUKQogCkBAIC01Niw4
ICs1Miw4IEBAIHB1YmxpYzoKICAgICAvLyB3b3JrbGlzdC0+Y29tcGxldGVBbGxSZWFkeVBsYW5z
Rm9yVk0odm0pOwogICAgIHZvaWQgY29tcGxldGVBbGxQbGFuc0ZvclZNKFZNJik7CiAKLSAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgotICAgIHZvaWQgaXRlcmF0ZUNvZGVCbG9ja3NGb3JHQyhW
TSYsIGNvbnN0IEZ1bmMmKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jLCB0eXBlbmFtZSBW
aXNpdG9yPgorICAgIHZvaWQgaXRlcmF0ZUNvZGVCbG9ja3NGb3JHQyhWaXNpdG9yJiwgVk0mLCBj
b25zdCBGdW5jJik7CiAKICAgICB2b2lkIHdhaXRVbnRpbEFsbFBsYW5zRm9yVk1BcmVSZWFkeShW
TSYpOwogICAgIFN0YXRlIGNvbXBsZXRlQWxsUmVhZHlQbGFuc0ZvclZNKFZNJiwgQ29tcGlsYXRp
b25LZXkgPSBDb21waWxhdGlvbktleSgpKTsKQEAgLTczLDcgKzY5LDcgQEAgcHVibGljOgogICAg
IGJvb2wgaXNBY3RpdmVGb3JWTShWTSYpIGNvbnN0OwogICAgIAogICAgIC8vIE9ubHkgY2FsbGVk
IG9uIHRoZSBtYWluIHRocmVhZCBhZnRlciBzdXNwZW5kaW5nIGFsbCB0aHJlYWRzLgotICAgIHZv
aWQgdmlzaXRXZWFrUmVmZXJlbmNlcyhTbG90VmlzaXRvciYpOworICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFZpc2l0b3I+IHZvaWQgdmlzaXRXZWFrUmVmZXJlbmNlcyhWaXNpdG9yJik7CiAgICAgdm9p
ZCByZW1vdmVEZWFkUGxhbnMoVk0mKTsKICAgICAKICAgICB2b2lkIHJlbW92ZU5vbkNvbXBpbGlu
Z1BsYW5zRm9yVk0oVk0mKTsKQEAgLTE0Myw4ICsxMzksOCBAQCBXb3JrbGlzdCYgZXhpc3RpbmdX
b3JrbGlzdEZvckluZGV4KHVuc2lnCiAKIHZvaWQgY29tcGxldGVBbGxQbGFuc0ZvclZNKFZNJik7
CiAKLXRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+Ci12b2lkIGl0ZXJhdGVDb2RlQmxvY2tzRm9yR0Mo
Vk0mLCBjb25zdCBGdW5jJik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jLCB0eXBlbmFtZSBWaXNp
dG9yPgordm9pZCBpdGVyYXRlQ29kZUJsb2Nrc0ZvckdDKFZpc2l0b3ImLCBWTSYsIGNvbnN0IEZ1
bmMmKTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3RJbmxpbmVzLmgJKHJldmlzaW9uIDI3MjgzMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3RJbmxpbmVzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMTgg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIw
MjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0zMiwzMSArMzIsMzEgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBE
RkcgewogCiAjaWYgRU5BQkxFKERGR19KSVQpCiAKLXRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+Ci12
b2lkIGl0ZXJhdGVDb2RlQmxvY2tzRm9yR0MoVk0mIHZtLCBjb25zdCBGdW5jJiBmdW5jKQordGVt
cGxhdGU8dHlwZW5hbWUgRnVuYywgdHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgaXRlcmF0ZUNvZGVC
bG9ja3NGb3JHQyhWaXNpdG9yJiB2aXNpdG9yLCBWTSYgdm0sIGNvbnN0IEZ1bmMmIGZ1bmMpCiB7
CiAgICAgZm9yICh1bnNpZ25lZCBpID0gREZHOjpudW1iZXJPZldvcmtsaXN0cygpOyBpLS07KSB7
CiAgICAgICAgIGlmIChERkc6OldvcmtsaXN0KiB3b3JrbGlzdCA9IERGRzo6ZXhpc3RpbmdXb3Jr
bGlzdEZvckluZGV4T3JOdWxsKGkpKQotICAgICAgICAgICAgd29ya2xpc3QtPml0ZXJhdGVDb2Rl
QmxvY2tzRm9yR0Modm0sIGZ1bmMpOworICAgICAgICAgICAgd29ya2xpc3QtPml0ZXJhdGVDb2Rl
QmxvY2tzRm9yR0ModmlzaXRvciwgdm0sIGZ1bmMpOwogICAgIH0KIH0KIAotdGVtcGxhdGU8dHlw
ZW5hbWUgRnVuYz4KLXZvaWQgV29ya2xpc3Q6Oml0ZXJhdGVDb2RlQmxvY2tzRm9yR0MoVk0mIHZt
LCBjb25zdCBGdW5jJiBmdW5jKQordGVtcGxhdGU8dHlwZW5hbWUgRnVuYywgdHlwZW5hbWUgVmlz
aXRvcj4KK3ZvaWQgV29ya2xpc3Q6Oml0ZXJhdGVDb2RlQmxvY2tzRm9yR0MoVmlzaXRvciYgdmlz
aXRvciwgVk0mIHZtLCBjb25zdCBGdW5jJiBmdW5jKQogewogICAgIExvY2tIb2xkZXIgbG9ja2Vy
KCptX2xvY2spOwogICAgIGZvciAoUGxhbk1hcDo6aXRlcmF0b3IgaXRlciA9IG1fcGxhbnMuYmVn
aW4oKTsgaXRlciAhPSBtX3BsYW5zLmVuZCgpOyArK2l0ZXIpIHsKICAgICAgICAgUGxhbiogcGxh
biA9IGl0ZXItPnZhbHVlLmdldCgpOwogICAgICAgICBpZiAocGxhbi0+dm0oKSAhPSAmdm0pCiAg
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgcGxhbi0+aXRlcmF0ZUNvZGVCbG9ja3NGb3JH
QyhmdW5jKTsKKyAgICAgICAgcGxhbi0+aXRlcmF0ZUNvZGVCbG9ja3NGb3JHQyh2aXNpdG9yLCBm
dW5jKTsKICAgICB9CiB9CiAKICNlbHNlIC8vIEVOQUJMRShERkdfSklUKQogCi10ZW1wbGF0ZTx0
eXBlbmFtZSBGdW5jPgotdm9pZCBpdGVyYXRlQ29kZUJsb2Nrc0ZvckdDKFZNJiwgY29uc3QgRnVu
YyYpCit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jLCB0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBpdGVy
YXRlQ29kZUJsb2Nrc0ZvckdDKFZpc2l0b3ImLCBWTSYsIGNvbnN0IEZ1bmMmKQogewogfQogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9BYnN0cmFjdFNsb3RWaXNpdG9yLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQWJzdHJhY3RTbG90VmlzaXRv
ci5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Fic3RyYWN0
U2xvdFZpc2l0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIwOCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5j
bHVkZSAiSlNDSlNWYWx1ZS5oIgorI2luY2x1ZGUgIk1hcmtTdGFjay5oIgorI2luY2x1ZGUgIlJv
b3RNYXJrUmVhc29uLmgiCisjaW5jbHVkZSAiVmlzaXRSYWNlS2V5LmgiCisjaW5jbHVkZSA8d3Rm
L0NvbmN1cnJlbnRQdHJIYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL1NoYXJlZFRhc2suaD4KKyNp
bmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBD
b25zZXJ2YXRpdmVSb290czsKK2NsYXNzIEhlYXA7CitjbGFzcyBIZWFwQ2VsbDsKK2NsYXNzIEpT
Q2VsbDsKK2NsYXNzIE1hcmtlZEJsb2NrOworY2xhc3MgTWFya2luZ0NvbnN0cmFpbnQ7CitjbGFz
cyBNYXJraW5nQ29uc3RyYWludFNvbHZlcjsKK2NsYXNzIFByZWNpc2VBbGxvY2F0aW9uOworY2xh
c3MgU2xvdFZpc2l0b3I7CitjbGFzcyBWTTsKK2NsYXNzIFZlcmlmaWVyU2xvdFZpc2l0b3I7Cit0
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjbGFzcyBXZWFrOwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlw
ZW5hbWUgVHJhaXRzPiBjbGFzcyBXcml0ZUJhcnJpZXJCYXNlOworCitjbGFzcyBBYnN0cmFjdFNs
b3RWaXNpdG9yIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShBYnN0cmFjdFNsb3RWaXNpdG9y
KTsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBjbGFzcyBDb250
ZXh0IHsKKyAgICBwdWJsaWM6CisgICAgICAgIENvbnRleHQoQWJzdHJhY3RTbG90VmlzaXRvciYs
IEhlYXBDZWxsKik7CisgICAgICAgIH5Db250ZXh0KCk7CisgICAgICAgIEhlYXBDZWxsKiBjZWxs
KCkgY29uc3QgeyByZXR1cm4gbV9jZWxsOyB9CisgICAgcHJpdmF0ZToKKyAgICAgICAgQWJzdHJh
Y3RTbG90VmlzaXRvciYgbV92aXNpdG9yOworICAgICAgICBIZWFwQ2VsbCogbV9jZWxsOworICAg
ICAgICBDb250ZXh0KiBtX3ByZXZpb3VzOworICAgIH07CisKKyAgICBjbGFzcyBTdXBwcmVzc0dD
VmVyaWZpZXJTY29wZSB7CisgICAgcHVibGljOgorICAgICAgICBTdXBwcmVzc0dDVmVyaWZpZXJT
Y29wZShBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorICAgICAgICAgICAgOiBtX3Zpc2l0
b3IodmlzaXRvcikKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKCFtX3Zpc2l0b3IubV9z
dXBwcmVzc1ZlcmlmaWVyKTsKKyAgICAgICAgICAgIG1fdmlzaXRvci5tX3N1cHByZXNzVmVyaWZp
ZXIgPSB0cnVlOworICAgICAgICB9CisgICAgICAgIH5TdXBwcmVzc0dDVmVyaWZpZXJTY29wZSgp
IHsgbV92aXNpdG9yLm1fc3VwcHJlc3NWZXJpZmllciA9IGZhbHNlOyB9CisgICAgcHJpdmF0ZToK
KyAgICAgICAgQWJzdHJhY3RTbG90VmlzaXRvciYgbV92aXNpdG9yOworICAgIH07CisKKyAgICBj
bGFzcyBEZWZhdWx0TWFya2luZ1Zpb2xhdGlvbkFzc2VydGlvblNjb3BlIHsKKyAgICBwdWJsaWM6
CisgICAgICAgIERlZmF1bHRNYXJraW5nVmlvbGF0aW9uQXNzZXJ0aW9uU2NvcGUoQWJzdHJhY3RT
bG90VmlzaXRvciYpIHsgfQorICAgIH07CisKKyAgICB2aXJ0dWFsIH5BYnN0cmFjdFNsb3RWaXNp
dG9yKCkgPSBkZWZhdWx0OworCisgICAgTWFya1N0YWNrQXJyYXkmIGNvbGxlY3Rvck1hcmtTdGFj
aygpIHsgcmV0dXJuIG1fY29sbGVjdG9yU3RhY2s7IH0KKyAgICBNYXJrU3RhY2tBcnJheSYgbXV0
YXRvck1hcmtTdGFjaygpIHsgcmV0dXJuIG1fbXV0YXRvclN0YWNrOyB9CisgICAgY29uc3QgTWFy
a1N0YWNrQXJyYXkmIGNvbGxlY3Rvck1hcmtTdGFjaygpIGNvbnN0IHsgcmV0dXJuIG1fY29sbGVj
dG9yU3RhY2s7IH0KKyAgICBjb25zdCBNYXJrU3RhY2tBcnJheSYgbXV0YXRvck1hcmtTdGFjaygp
IGNvbnN0IHsgcmV0dXJuIG1fbXV0YXRvclN0YWNrOyB9CisKKyAgICBib29sIGlzRW1wdHkoKSB7
IHJldHVybiBtX2NvbGxlY3RvclN0YWNrLmlzRW1wdHkoKSAmJiBtX211dGF0b3JTdGFjay5pc0Vt
cHR5KCk7IH0KKworICAgIFZNJiB2bSgpOworICAgIGNvbnN0IFZNJiB2bSgpIGNvbnN0OworICAg
IEhlYXAqIGhlYXAoKSBjb25zdDsKKworICAgIHZpcnR1YWwgdm9pZCBhcHBlbmQoY29uc3QgQ29u
c2VydmF0aXZlUm9vdHMmKSA9IDA7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFt
ZSBUcmFpdHM+IHZvaWQgYXBwZW5kKGNvbnN0IFdyaXRlQmFycmllckJhc2U8VCwgVHJhaXRzPiYp
OworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFRyYWl0cz4gdm9pZCBhcHBlbmRI
aWRkZW4oY29uc3QgV3JpdGVCYXJyaWVyQmFzZTxULCBUcmFpdHM+Jik7CisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgSXRlcmF0b3I+IHZvaWQgYXBwZW5kKEl0ZXJhdG9yIGJlZ2luICwgSXRlcmF0b3Ig
ZW5kKTsKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgYXBwZW5kVmFsdWVzKGNvbnN0IFdyaXRlQmFy
cmllckJhc2U8VW5rbm93biwgUmF3VmFsdWVUcmFpdHM8VW5rbm93bj4+Kiwgc2l6ZV90IGNvdW50
KTsKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgYXBwZW5kVmFsdWVzSGlkZGVuKGNvbnN0IFdyaXRl
QmFycmllckJhc2U8VW5rbm93biwgUmF3VmFsdWVUcmFpdHM8VW5rbm93bj4+Kiwgc2l6ZV90IGNv
dW50KTsKKworICAgIC8vIFRoZXNlIGRvbid0IHJlcXVpcmUgeW91IHRvIHByb3ZlIHRoYXQgeW91
IGhhdmUgYSBXcml0ZUJhcnJpZXI8Pi4gVGhhdCBtYWtlcyBzZW5zZQorICAgIC8vIGZvcjoKKyAg
ICAvLworICAgIC8vIC0gcm9vdHMuCisgICAgLy8gLSBzb3BoaXN0aWNhdGVkIGRhdGEgc3RydWN0
dXJlcyB0aGF0IGJhcnJpZXIgdGhyb3VnaCBvdGhlciBtZWFucyAobGlrZSBERkc6OlBsYW4gYW5k
CisgICAgLy8gICBmcmllbmRzKS4KKyAgICAvLworICAgIC8vIElmIHlvdSBhcmUgbm90IGEgcm9v
dCBhbmQgeW91IGRvbid0IGtub3cgd2hhdCBraW5kIG9mIGJhcnJpZXIgeW91IGhhdmUsIHRoZW4g
eW91CisgICAgLy8gc2hvdWxkbid0IGNhbGwgdGhlc2UgbWV0aG9kcy4KKyAgICBBTFdBWVNfSU5M
SU5FIHZvaWQgYXBwZW5kVW5iYXJyaWVyZWQoSlNWYWx1ZSk7CisgICAgQUxXQVlTX0lOTElORSB2
b2lkIGFwcGVuZFVuYmFycmllcmVkKEpTVmFsdWUqLCBzaXplX3QpOworICAgIHZpcnR1YWwgdm9p
ZCBhcHBlbmRVbmJhcnJpZXJlZChKU0NlbGwqKSA9IDA7CisKKyAgICBpbmxpbmUgYm9vbCBhZGRP
cGFxdWVSb290KHZvaWQqKTsgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSByb290IHdhcyBuZXcuCisg
ICAgaW5saW5lIGJvb2wgY29udGFpbnNPcGFxdWVSb290KHZvaWQqKSBjb25zdDsKKyAgICB2b2lk
IHNldElnbm9yZU5ld09wYXF1ZVJvb3RzKGJvb2wgdmFsdWUpIHsgbV9pZ25vcmVOZXdPcGFxdWVS
b290cyA9IHZhbHVlOyB9CisKKyAgICB2aXJ0dWFsIGJvb2wgaXNGaXJzdFZpc2l0KCkgY29uc3Qg
PSAwOworCisgICAgdmlydHVhbCBib29sIGlzTWFya2VkKGNvbnN0IHZvaWQqKSBjb25zdCA9IDA7
CisgICAgdmlydHVhbCBib29sIGlzTWFya2VkKE1hcmtlZEJsb2NrJiwgSGVhcENlbGwqKSBjb25z
dCA9IDA7CisgICAgdmlydHVhbCBib29sIGlzTWFya2VkKFByZWNpc2VBbGxvY2F0aW9uJiwgSGVh
cENlbGwqKSBjb25zdCA9IDA7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIHZvaWQg
YXBwZW5kKGNvbnN0IFdlYWs8VD4mKTsKKworICAgIEFMV0FZU19JTkxJTkUgdm9pZCBhcHBlbmRI
aWRkZW5VbmJhcnJpZXJlZChKU1ZhbHVlKTsKKyAgICB2aXJ0dWFsIHZvaWQgYXBwZW5kSGlkZGVu
VW5iYXJyaWVyZWQoSlNDZWxsKikgPSAwOworCisgICAgc2l6ZV90IHZpc2l0Q291bnQoKSBjb25z
dCB7IHJldHVybiBtX3Zpc2l0Q291bnQ7IH0KKworICAgIHZvaWQgYWRkVG9WaXNpdENvdW50KHNp
emVfdCB2YWx1ZSkgeyBtX3Zpc2l0Q291bnQgKz0gdmFsdWU7IH0KKworICAgIHZpcnR1YWwgdm9p
ZCBhZGRQYXJhbGxlbENvbnN0cmFpbnRUYXNrKFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoQWJzdHJh
Y3RTbG90VmlzaXRvciYpPj4pID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgYWRkUGFyYWxsZWxDb25z
dHJhaW50VGFzayhSZWZQdHI8U2hhcmVkVGFzazx2b2lkKFNsb3RWaXNpdG9yJik+PikgPSAwOwor
CisgICAgdmlydHVhbCB2b2lkIG1hcmtBdXhpbGlhcnkoY29uc3Qgdm9pZCogYmFzZSkgPSAwOwor
CisgICAgdmlydHVhbCB2b2lkIHJlcG9ydEV4dHJhTWVtb3J5VmlzaXRlZChzaXplX3QpID0gMDsK
KyNpZiBFTkFCTEUoUkVTT1VSQ0VfVVNBR0UpCisgICAgdmlydHVhbCB2b2lkIHJlcG9ydEV4dGVy
bmFsTWVtb3J5VmlzaXRlZChzaXplX3QpID0gMDsKKyNlbmRpZgorCisgICAgdmlydHVhbCB2b2lk
IGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdCA9IDA7CisKKyAgICBSb290TWFya1JlYXNvbiByb290
TWFya1JlYXNvbigpIGNvbnN0IHsgcmV0dXJuIG1fcm9vdE1hcmtSZWFzb247IH0KKyAgICB2b2lk
IHNldFJvb3RNYXJrUmVhc29uKFJvb3RNYXJrUmVhc29uIHJlYXNvbikgeyBtX3Jvb3RNYXJrUmVh
c29uID0gcmVhc29uOyB9CisKKyAgICB2aXJ0dWFsIGJvb2wgbXV0YXRvcklzU3RvcHBlZCgpIGNv
bnN0ID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBkaWRSYWNlKGNvbnN0IFZpc2l0UmFjZUtleSYp
ID0gMDsKKyAgICB2b2lkIGRpZFJhY2UoSlNDZWxsKiBjZWxsLCBjb25zdCBjaGFyKiByZWFzb24p
IHsgZGlkUmFjZShWaXNpdFJhY2VLZXkoY2VsbCwgcmVhc29uKSk7IH0KKworICAgIHZpcnR1YWwg
dm9pZCB2aXNpdEFzQ29uc3RyYWludChjb25zdCBKU0NlbGwqKSA9IDA7CisKKyAgICBjb25zdCBj
aGFyKiBjb2RlTmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29kZU5hbWUuZGF0YSgpOyB9CisKK3By
b3RlY3RlZDoKKyAgICBpbmxpbmUgQWJzdHJhY3RTbG90VmlzaXRvcihIZWFwJiwgQ1N0cmluZyBj
b2RlTmFtZSwgQ29uY3VycmVudFB0ckhhc2hTZXQmKTsKKworICAgIEhlYXBDZWxsKiBwYXJlbnRD
ZWxsKCkgY29uc3Q7CisgICAgdm9pZCByZXNldCgpOworCisgICAgTWFya1N0YWNrQXJyYXkgbV9j
b2xsZWN0b3JTdGFjazsKKyAgICBNYXJrU3RhY2tBcnJheSBtX211dGF0b3JTdGFjazsKKworICAg
IHNpemVfdCBtX3Zpc2l0Q291bnQgeyAwIH07CisKKyAgICBIZWFwJiBtX2hlYXA7CisgICAgQ29u
dGV4dCogbV9jb250ZXh0IHsgbnVsbHB0ciB9OworICAgIENTdHJpbmcgbV9jb2RlTmFtZTsKKwor
ICAgIE1hcmtpbmdDb25zdHJhaW50KiBtX2N1cnJlbnRDb25zdHJhaW50IHsgbnVsbHB0ciB9Owor
ICAgIE1hcmtpbmdDb25zdHJhaW50U29sdmVyKiBtX2N1cnJlbnRTb2x2ZXIgeyBudWxscHRyIH07
CisgICAgQ29uY3VycmVudFB0ckhhc2hTZXQmIG1fb3BhcXVlUm9vdHM7CisKKyAgICBSb290TWFy
a1JlYXNvbiBtX3Jvb3RNYXJrUmVhc29uIHsgUm9vdE1hcmtSZWFzb246Ok5vbmUgfTsKKyAgICBi
b29sIG1fc3VwcHJlc3NWZXJpZmllciB7IGZhbHNlIH07CisgICAgYm9vbCBtX2lnbm9yZU5ld09w
YXF1ZVJvb3RzIHsgZmFsc2UgfTsgLy8gVXNlZnVsIGFzIGEgZGVidWdnaW5nIG1vZGUuCisKKyAg
ICBmcmllbmQgY2xhc3MgTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXI7Cit9OworCitjbGFzcyBTZXRS
b290TWFya1JlYXNvblNjb3BlIHsKK3B1YmxpYzoKKyAgICBTZXRSb290TWFya1JlYXNvblNjb3Bl
KEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIFJvb3RNYXJrUmVhc29uIHJlYXNvbikKKyAg
ICAgICAgOiBtX3Zpc2l0b3IodmlzaXRvcikKKyAgICAgICAgLCBtX3ByZXZpb3VzUmVhc29uKHZp
c2l0b3Iucm9vdE1hcmtSZWFzb24oKSkKKyAgICB7CisgICAgICAgIG1fdmlzaXRvci5zZXRSb290
TWFya1JlYXNvbihyZWFzb24pOworICAgIH0KKworICAgIH5TZXRSb290TWFya1JlYXNvblNjb3Bl
KCkKKyAgICB7CisgICAgICAgIG1fdmlzaXRvci5zZXRSb290TWFya1JlYXNvbihtX3ByZXZpb3Vz
UmVhc29uKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgQWJzdHJhY3RTbG90VmlzaXRvciYgbV92
aXNpdG9yOworICAgIFJvb3RNYXJrUmVhc29uIG1fcHJldmlvdXNSZWFzb247Cit9OworCit9IC8v
IG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Fic3RyYWN0
U2xvdFZpc2l0b3JJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvQWJzdHJhY3RTbG90VmlzaXRvcklubGluZXMuaAkobm9uZXhpc3RlbnQpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9BYnN0cmFjdFNsb3RWaXNpdG9ySW5saW5lcy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMTU0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJBYnN0cmFjdFNsb3RW
aXNpdG9yLmgiCisjaW5jbHVkZSAiSGVhcC5oIgorI2luY2x1ZGUgIldlYWtJbmxpbmVzLmgiCisj
aW5jbHVkZSAiV3JpdGVCYXJyaWVyLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitpbmxpbmUgQWJz
dHJhY3RTbG90VmlzaXRvcjo6Q29udGV4dDo6Q29udGV4dChBYnN0cmFjdFNsb3RWaXNpdG9yJiB2
aXNpdG9yLCBIZWFwQ2VsbCogY2VsbCkKKyAgICA6IG1fdmlzaXRvcih2aXNpdG9yKQorICAgICwg
bV9jZWxsKGNlbGwpCit7CisgICAgbV9wcmV2aW91cyA9IG1fdmlzaXRvci5tX2NvbnRleHQ7Cisg
ICAgbV92aXNpdG9yLm1fY29udGV4dCA9IHRoaXM7Cit9CisKK2lubGluZSBBYnN0cmFjdFNsb3RW
aXNpdG9yOjpDb250ZXh0Ojp+Q29udGV4dCgpCit7CisgICAgbV92aXNpdG9yLm1fY29udGV4dCA9
IG1fcHJldmlvdXM7Cit9CisKK2lubGluZSBBYnN0cmFjdFNsb3RWaXNpdG9yOjpBYnN0cmFjdFNs
b3RWaXNpdG9yKEhlYXAmIGhlYXAsIENTdHJpbmcgY29kZU5hbWUsIENvbmN1cnJlbnRQdHJIYXNo
U2V0JiBvcGFxdWVSb290cykKKyAgICA6IG1faGVhcChoZWFwKQorICAgICwgbV9jb2RlTmFtZShj
b2RlTmFtZSkKKyAgICAsIG1fb3BhcXVlUm9vdHMob3BhcXVlUm9vdHMpCit7Cit9CisKK2lubGlu
ZSBIZWFwKiBBYnN0cmFjdFNsb3RWaXNpdG9yOjpoZWFwKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
Jm1faGVhcDsKK30KKworaW5saW5lIFZNJiBBYnN0cmFjdFNsb3RWaXNpdG9yOjp2bSgpCit7Cisg
ICAgcmV0dXJuIG1faGVhcC52bSgpOworfQorCitpbmxpbmUgY29uc3QgVk0mIEFic3RyYWN0U2xv
dFZpc2l0b3I6OnZtKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9oZWFwLnZtKCk7Cit9CisKK2lu
bGluZSBib29sIEFic3RyYWN0U2xvdFZpc2l0b3I6OmFkZE9wYXF1ZVJvb3Qodm9pZCogcHRyKQor
eworICAgIGlmICghcHRyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG1faWdub3Jl
TmV3T3BhcXVlUm9vdHMpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIW1fb3BhcXVl
Um9vdHMuYWRkKHB0cikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBtX3Zpc2l0Q291bnQr
KzsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworaW5saW5lIGJvb2wgQWJzdHJhY3RTbG90VmlzaXRv
cjo6Y29udGFpbnNPcGFxdWVSb290KHZvaWQqIHB0cikgY29uc3QKK3sKKyAgICByZXR1cm4gbV9v
cGFxdWVSb290cy5jb250YWlucyhwdHIpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorQUxX
QVlTX0lOTElORSB2b2lkIEFic3RyYWN0U2xvdFZpc2l0b3I6OmFwcGVuZChjb25zdCBXZWFrPFQ+
JiB3ZWFrKQoreworICAgIGFwcGVuZFVuYmFycmllcmVkKHdlYWsuZ2V0KCkpOworfQorCit0ZW1w
bGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBUcmFpdHM+CitBTFdBWVNfSU5MSU5FIHZvaWQgQWJz
dHJhY3RTbG90VmlzaXRvcjo6YXBwZW5kKGNvbnN0IFdyaXRlQmFycmllckJhc2U8VCwgVHJhaXRz
PiYgc2xvdCkKK3sKKyAgICBhcHBlbmRVbmJhcnJpZXJlZChzbG90LmdldCgpKTsKK30KKwordGVt
cGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVHJhaXRzPgorQUxXQVlTX0lOTElORSB2b2lkIEFi
c3RyYWN0U2xvdFZpc2l0b3I6OmFwcGVuZEhpZGRlbihjb25zdCBXcml0ZUJhcnJpZXJCYXNlPFQs
IFRyYWl0cz4mIHNsb3QpCit7CisgICAgYXBwZW5kSGlkZGVuVW5iYXJyaWVyZWQoc2xvdC5nZXQo
KSk7Cit9CisKK0FMV0FZU19JTkxJTkUgdm9pZCBBYnN0cmFjdFNsb3RWaXNpdG9yOjphcHBlbmRI
aWRkZW5VbmJhcnJpZXJlZChKU1ZhbHVlIHZhbHVlKQoreworICAgIGlmICh2YWx1ZS5pc0NlbGwo
KSkKKyAgICAgICAgYXBwZW5kSGlkZGVuVW5iYXJyaWVyZWQodmFsdWUuYXNDZWxsKCkpOworfQor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBJdGVyYXRvcj4KK0FMV0FZU19JTkxJTkUgdm9pZCBBYnN0cmFj
dFNsb3RWaXNpdG9yOjphcHBlbmQoSXRlcmF0b3IgYmVnaW4sIEl0ZXJhdG9yIGVuZCkKK3sKKyAg
ICBmb3IgKGF1dG8gaXQgPSBiZWdpbjsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICBhcHBlbmQo
Kml0KTsKK30KKworQUxXQVlTX0lOTElORSB2b2lkIEFic3RyYWN0U2xvdFZpc2l0b3I6OmFwcGVu
ZFZhbHVlcyhjb25zdCBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+KiBiYXJyaWVycywgc2l6ZV90
IGNvdW50KQoreworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY291bnQ7ICsraSkKKyAgICAg
ICAgYXBwZW5kKGJhcnJpZXJzW2ldKTsKK30KKworQUxXQVlTX0lOTElORSB2b2lkIEFic3RyYWN0
U2xvdFZpc2l0b3I6OmFwcGVuZFZhbHVlc0hpZGRlbihjb25zdCBXcml0ZUJhcnJpZXJCYXNlPFVu
a25vd24+KiBiYXJyaWVycywgc2l6ZV90IGNvdW50KQoreworICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgY291bnQ7ICsraSkKKyAgICAgICAgYXBwZW5kSGlkZGVuKGJhcnJpZXJzW2ldKTsKK30K
KworQUxXQVlTX0lOTElORSB2b2lkIEFic3RyYWN0U2xvdFZpc2l0b3I6OmFwcGVuZFVuYmFycmll
cmVkKEpTVmFsdWUgdmFsdWUpCit7CisgICAgaWYgKHZhbHVlLmlzQ2VsbCgpKQorICAgICAgICBh
cHBlbmRVbmJhcnJpZXJlZCh2YWx1ZS5hc0NlbGwoKSk7Cit9CisKK0FMV0FZU19JTkxJTkUgdm9p
ZCBBYnN0cmFjdFNsb3RWaXNpdG9yOjphcHBlbmRVbmJhcnJpZXJlZChKU1ZhbHVlKiBzbG90LCBz
aXplX3QgY291bnQpCit7CisgICAgZm9yIChzaXplX3QgaSA9IGNvdW50OyBpLS07KQorICAgICAg
ICBhcHBlbmRVbmJhcnJpZXJlZChzbG90W2ldKTsKK30KKworQUxXQVlTX0lOTElORSBIZWFwQ2Vs
bCogQWJzdHJhY3RTbG90VmlzaXRvcjo6cGFyZW50Q2VsbCgpIGNvbnN0Cit7CisgICAgaWYgKCFt
X2NvbnRleHQpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiBtX2NvbnRleHQt
PmNlbGwoKTsKK30KKworQUxXQVlTX0lOTElORSB2b2lkIEFic3RyYWN0U2xvdFZpc2l0b3I6OnJl
c2V0KCkKK3sKKyAgICBtX3Zpc2l0Q291bnQgPSAwOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hhbmRsZVNldC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGFuZGxlU2V0LmNwcAkocmV2aXNpb24g
MjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGFuZGxlU2V0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAx
OSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEt
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTU2LDcgKzU2LDggQEAgdm9pZCBIYW5kbGVTZXQ6Omdyb3coKQogICAg
IH0KIH0KIAotdm9pZCBIYW5kbGVTZXQ6OnZpc2l0U3Ryb25nSGFuZGxlcyhTbG90VmlzaXRvciYg
dmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEhhbmRsZVNldDo6dmlz
aXRTdHJvbmdIYW5kbGVzKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgTm9kZSogZW5kID0gbV9z
dHJvbmdMaXN0LmVuZCgpOwogICAgIGZvciAoTm9kZSogbm9kZSA9IG1fc3Ryb25nTGlzdC5iZWdp
bigpOyBub2RlICE9IGVuZDsgbm9kZSA9IG5vZGUtPm5leHQoKSkgewpAQCAtNjcsNiArNjgsOSBA
QCB2b2lkIEhhbmRsZVNldDo6dmlzaXRTdHJvbmdIYW5kbGVzKFNsb3RWCiAgICAgfQogfQogCit0
ZW1wbGF0ZSB2b2lkIEhhbmRsZVNldDo6dmlzaXRTdHJvbmdIYW5kbGVzKEFic3RyYWN0U2xvdFZp
c2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSGFuZGxlU2V0Ojp2aXNpdFN0cm9uZ0hhbmRsZXMoU2xv
dFZpc2l0b3ImKTsKKwogdm9pZCBIYW5kbGVTZXQ6OndyaXRlQmFycmllcihIYW5kbGVTbG90IHNs
b3QsIGNvbnN0IEpTVmFsdWUmIHZhbHVlKQogewogICAgIGlmICghdmFsdWUgPT0gISpzbG90ICYm
IHNsb3QtPmlzQ2VsbCgpID09IHZhbHVlLmlzQ2VsbCgpKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvSGFuZGxlU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvSGFuZGxlU2V0LmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0hhbmRsZVNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMS0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzgsNyArMzgsNiBA
QCBuYW1lc3BhY2UgSlNDIHsKIGNsYXNzIEhhbmRsZVNldDsKIGNsYXNzIFZNOwogY2xhc3MgSlNW
YWx1ZTsKLWNsYXNzIFNsb3RWaXNpdG9yOwogCiBjbGFzcyBIYW5kbGVOb2RlIHsKIHB1YmxpYzoK
QEAgLTczLDcgKzcyLDcgQEAgcHVibGljOgogICAgIEhhbmRsZVNsb3QgYWxsb2NhdGUoKTsKICAg
ICB2b2lkIGRlYWxsb2NhdGUoSGFuZGxlU2xvdCk7CiAKLSAgICB2b2lkIHZpc2l0U3Ryb25nSGFu
ZGxlcyhTbG90VmlzaXRvciYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQg
dmlzaXRTdHJvbmdIYW5kbGVzKFZpc2l0b3ImKTsKIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZv
aWQgd3JpdGVCYXJyaWVyKEhhbmRsZVNsb3QsIGNvbnN0IEpTVmFsdWUmKTsKIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Miw2ICs3Miw3
IEBACiAjaW5jbHVkZSAiVHlwZVByb2ZpbGVyLmgiCiAjaW5jbHVkZSAiVHlwZVByb2ZpbGVyTG9n
LmgiCiAjaW5jbHVkZSAiVk0uaCIKKyNpbmNsdWRlICJWZXJpZmllclNsb3RWaXNpdG9ySW5saW5l
cy5oIgogI2luY2x1ZGUgIldlYWtNYXBJbXBsSW5saW5lcy5oIgogI2luY2x1ZGUgIldlYWtTZXRJ
bmxpbmVzLmgiCiAjaW5jbHVkZSA8YWxnb3JpdGhtPgpAQCAtNjQzLDE5ICs2NDQsMTkgQEAgdm9p
ZCBIZWFwOjpjb21wbGV0ZUFsbEpJVFBsYW5zKCkKICAgICBERkc6OmNvbXBsZXRlQWxsUGxhbnNG
b3JWTShtX3ZtKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KLXZvaWQgSGVhcDo6aXRl
cmF0ZUV4ZWN1dGluZ0FuZENvbXBpbGluZ0NvZGVCbG9ja3MoY29uc3QgRnVuYyYgZnVuYykKK3Rl
bXBsYXRlPHR5cGVuYW1lIEZ1bmMsIHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEhlYXA6Oml0ZXJh
dGVFeGVjdXRpbmdBbmRDb21waWxpbmdDb2RlQmxvY2tzKFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0
IEZ1bmMmIGZ1bmMpCiB7CiAgICAgbV9jb2RlQmxvY2tzLT5pdGVyYXRlQ3VycmVudGx5RXhlY3V0
aW5nKGZ1bmMpOwogICAgIGlmIChPcHRpb25zOjp1c2VKSVQoKSkKLSAgICAgICAgREZHOjppdGVy
YXRlQ29kZUJsb2Nrc0ZvckdDKG1fdm0sIGZ1bmMpOworICAgICAgICBERkc6Oml0ZXJhdGVDb2Rl
QmxvY2tzRm9yR0ModmlzaXRvciwgbV92bSwgZnVuYyk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1l
IEZ1bmM+Ci12b2lkIEhlYXA6Oml0ZXJhdGVFeGVjdXRpbmdBbmRDb21waWxpbmdDb2RlQmxvY2tz
V2l0aG91dEhvbGRpbmdMb2Nrcyhjb25zdCBGdW5jJiBmdW5jKQordGVtcGxhdGU8dHlwZW5hbWUg
RnVuYywgdHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSGVhcDo6aXRlcmF0ZUV4ZWN1dGluZ0FuZENv
bXBpbGluZ0NvZGVCbG9ja3NXaXRob3V0SG9sZGluZ0xvY2tzKFZpc2l0b3ImIHZpc2l0b3IsIGNv
bnN0IEZ1bmMmIGZ1bmMpCiB7CiAgICAgVmVjdG9yPENvZGVCbG9jayosIDI1Nj4gY29kZUJsb2Nr
czsKLSAgICBpdGVyYXRlRXhlY3V0aW5nQW5kQ29tcGlsaW5nQ29kZUJsb2NrcygKKyAgICBpdGVy
YXRlRXhlY3V0aW5nQW5kQ29tcGlsaW5nQ29kZUJsb2Nrcyh2aXNpdG9yLAogICAgICAgICBbJl0g
KENvZGVCbG9jayogY29kZUJsb2NrKSB7CiAgICAgICAgICAgICBjb2RlQmxvY2tzLmFwcGVuZChj
b2RlQmxvY2spOwogICAgICAgICB9KTsKQEAgLTczMywxNCArNzM0LDYgQEAgdm9pZCBIZWFwOjpy
ZW1vdmVEZWFkQ29tcGlsZXJXb3JrbGlzdEVudAogI2VuZGlmCiB9CiAKLWJvb2wgSGVhcDo6aXNB
bmFseXppbmdIZWFwKCkgY29uc3QKLXsKLSAgICBIZWFwUHJvZmlsZXIqIGhlYXBQcm9maWxlciA9
IG1fdm0uaGVhcFByb2ZpbGVyKCk7Ci0gICAgaWYgKFVOTElLRUxZKGhlYXBQcm9maWxlcikpCi0g
ICAgICAgIHJldHVybiBoZWFwUHJvZmlsZXItPmFjdGl2ZUhlYXBBbmFseXplcigpOwotICAgIHJl
dHVybiBmYWxzZTsKLX0KLQogc3RydWN0IEdhdGhlckV4dHJhSGVhcERhdGEgOiBNYXJrZWRCbG9j
azo6Q291bnRGdW5jdG9yIHsKICAgICBHYXRoZXJFeHRyYUhlYXBEYXRhKFZNJiB2bSwgSGVhcEFu
YWx5emVyJiBhbmFseXplcikKICAgICAgICAgOiBtX3ZtKHZtKQpAQCAtMTQ4NSwxNCArMTQ3OCwy
MSBAQCBORVZFUl9JTkxJTkUgYm9vbCBIZWFwOjpydW5FbmRQaGFzZShHQ0NvCiAgICAgfQogICAg
IG1faGVscGVyQ2xpZW50LmZpbmlzaCgpOwogICAgIAotICAgIGl0ZXJhdGVFeGVjdXRpbmdBbmRD
b21waWxpbmdDb2RlQmxvY2tzKAorICAgIEFTU0VSVChtX211dGF0b3JNYXJrU3RhY2stPmlzRW1w
dHkoKSk7CisgICAgQVNTRVJUKG1fcmFjZU1hcmtTdGFjay0+aXNFbXB0eSgpKTsKKworICAgIFNs
b3RWaXNpdG9yJiB2aXNpdG9yID0gKm1fY29sbGVjdG9yU2xvdFZpc2l0b3I7CisgICAgaXRlcmF0
ZUV4ZWN1dGluZ0FuZENvbXBpbGluZ0NvZGVCbG9ja3ModmlzaXRvciwKICAgICAgICAgWyZdIChD
b2RlQmxvY2sqIGNvZGVCbG9jaykgewogICAgICAgICAgICAgd3JpdGVCYXJyaWVyKGNvZGVCbG9j
ayk7CiAgICAgICAgIH0pOwotICAgICAgICAKKwogICAgIHVwZGF0ZU9iamVjdENvdW50cygpOwog
ICAgIGVuZE1hcmtpbmcoKTsKIAorICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjp2ZXJpZnlHQygp
KSkKKyAgICAgICAgdmVyaWZ5R0MoKTsKKwogICAgIGlmIChVTkxJS0VMWShtX3ZlcmlmaWVyKSkg
ewogICAgICAgICBtX3ZlcmlmaWVyLT5nYXRoZXJMaXZlQ2VsbHMoSGVhcFZlcmlmaWVyOjpQaGFz
ZTo6QWZ0ZXJNYXJraW5nKTsKICAgICAgICAgbV92ZXJpZmllci0+dmVyaWZ5KEhlYXBWZXJpZmll
cjo6UGhhc2U6OkFmdGVyTWFya2luZyk7CkBAIC0yMTcwLDYgKzIxNzAsMTIgQEAgdm9pZCBIZWFw
OjpzdXNwZW5kQ29tcGlsZXJUaHJlYWRzKCkKIAogdm9pZCBIZWFwOjp3aWxsU3RhcnRDb2xsZWN0
aW9uKCkKIHsKKyAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6dmVyaWZ5R0MoKSkpIHsKKyAgICAg
ICAgbV92ZXJpZmllclNsb3RWaXNpdG9yID0gbWFrZVVuaXF1ZTxWZXJpZmllclNsb3RWaXNpdG9y
PigqdGhpcyk7CisgICAgICAgIEFTU0VSVCghbV9pc01hcmtpbmdGb3JHQ1ZlcmlmaWVyKTsKKy8v
ICAgICAgICBSRUxFQVNFX0FTU0VSVCghbV9pc01hcmtpbmdGb3JHQ1ZlcmlmaWVyKTsgLy8gbWxh
bSBURVNUIG9ubHkKKyAgICB9CisKICAgICBkYXRhTG9nSWYoT3B0aW9uczo6bG9nR0MoKSwgIj0+
ICIpOwogICAgIAogICAgIGlmIChzaG91bGREb0Z1bGxDb2xsZWN0aW9uKCkpIHsKQEAgLTI2OTcs
MTMgKzI3MDMsNDggQEAgdm9pZCBIZWFwOjpkaWRGcmVlQmxvY2soc2l6ZV90IGNhcGFjaXR5KQog
I2VuZGlmCiB9CiAKKy8vIFRoZSBmb2xsb3dpbmcgYXJlIHB1bGxlZCBvdXQgb2YgdGhlIGJvZHkg
b2YgSGVhcDo6YWRkQ29yZUNvbnN0cmFpbnRzKCkgb25seQorLy8gYmVjYXVzZSB0aGUgV2luQ2Fp
cm8gcG9ydCBpcyBub3QgYWJsZSB0byBoYW5kbGUgI2lmJ3MgaW5zaWRlIHRoZSBib2R5IG9mIHRo
ZQorLy8gbGFtYmRhIHBhc3NlZCBpbnRvIHRoZSBNQUtFX01BUktJTkdfQ09OU1RSQUlOVF9FWEVD
VVRPUl9QQUlSIG1hY3JvLiBUaGlzIHdvcmtzCisvLyBhcm91bmQgdGhhdCBpc3N1ZS4KKworI2lm
IEpTQ19PQkpDX0FQSV9FTkFCTEVECitjb25zdGV4cHIgYm9vbCBvYmpjQVBJRW5hYmxlZCA9IHRy
dWU7CisjZWxzZQorY29uc3RleHByIGJvb2wgb2JqY0FQSUVuYWJsZWQgPSBmYWxzZTsKK3N0YXRp
YyBVTlVTRURfRlVOQ1RJT04gdm9pZCBzY2FuRXh0ZXJuYWxSZW1lbWJlcmVkU2V0KFZNJiwgQWJz
dHJhY3RTbG90VmlzaXRvciYpIHsgfQorI2VuZGlmCisKKyNpZiBFTkFCTEUoU0FNUExJTkdfUFJP
RklMRVIpCitjb25zdGV4cHIgYm9vbCBzYW1wbGluZ1Byb2ZpbGVyU3VwcG9ydGVkID0gdHJ1ZTsK
K3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+CitzdGF0aWMgaW5saW5lIHZvaWQgc2VydmljZVNh
bXBsaW5nUHJvZmlsZXIoVk0mIHZtLCBWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIGlmIChTYW1w
bGluZ1Byb2ZpbGVyKiBzYW1wbGluZ1Byb2ZpbGVyID0gdm0uc2FtcGxpbmdQcm9maWxlcigpKSB7
CisgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2soc2FtcGxpbmdQcm9maWxlci0+Z2V0TG9j
aygpKTsKKyAgICAgICAgc2FtcGxpbmdQcm9maWxlci0+cHJvY2Vzc1VudmVyaWZpZWRTdGFja1Ry
YWNlcyhsb2NrZXIpOworICAgICAgICBzYW1wbGluZ1Byb2ZpbGVyLT52aXNpdCh2aXNpdG9yKTsK
KyAgICAgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkgPT0gR0NMb2dnaW5nOjpWZXJib3NlKQorICAg
ICAgICAgICAgZGF0YUxvZygiU2FtcGxpbmcgUHJvZmlsZXIgZGF0YTpcbiIsIHZpc2l0b3IpOwor
ICAgIH0KK307CisjZWxzZQorY29uc3RleHByIGJvb2wgc2FtcGxpbmdQcm9maWxlclN1cHBvcnRl
ZCA9IGZhbHNlOworc3RhdGljIFVOVVNFRF9GVU5DVElPTiB2b2lkIHNlcnZpY2VTYW1wbGluZ1By
b2ZpbGVyKFZNJiwgQWJzdHJhY3RTbG90VmlzaXRvciYpIHsgfTsKKyNlbmRpZgorCiB2b2lkIEhl
YXA6OmFkZENvcmVDb25zdHJhaW50cygpCiB7CiAgICAgbV9jb25zdHJhaW50U2V0LT5hZGQoCiAg
ICAgICAgICJDcyIsICJDb25zZXJ2YXRpdmUgU2NhbiIsCi0gICAgICAgIFt0aGlzLCBsYXN0VmVy
c2lvbiA9IHN0YXRpY19jYXN0PHVpbnQ2NF90PigwKV0gKFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBt
dXRhYmxlIHsKKyAgICAgICAgTUFLRV9NQVJLSU5HX0NPTlNUUkFJTlRfRVhFQ1VUT1JfUEFJUigo
W3RoaXMsIGxhc3RWZXJzaW9uID0gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KDApXSAoYXV0byYgdmlz
aXRvcikgbXV0YWJsZSB7CiAgICAgICAgICAgICBib29sIHNob3VsZE5vdFByb2R1Y2VXb3JrID0g
bGFzdFZlcnNpb24gPT0gbV9waGFzZVZlcnNpb247Ci0gICAgICAgICAgICBpZiAoc2hvdWxkTm90
UHJvZHVjZVdvcmspCisKKyAgICAgICAgICAgIC8vIEZvciB0aGUgR0MgVmVyZmllciwgd2Ugd291
bGQgbGlrZSB0byB1c2UgdGhlIGlkZW50aWNhbCBzZXQgb2YgY29uc2VydmF0aXZlIHJvb3RzCisg
ICAgICAgICAgICAvLyBhcyB0aGUgcmVhbCBHQy4gT3RoZXJ3aXNlLCB0aGUgR0MgdmVyaWZpZXIg
bWF5IHJlcG9ydCBmYWxzZSBuZWdhdGl2ZXMgZHVlIHRvCisgICAgICAgICAgICAvLyB2YXJpYXRp
b25zIGluIHN0YWNrIHZhbHVlcy4gRm9yIHRoaXMgc2FtZSByZWFzb24sIHdlIHdpbGwgc2tpcCB0
aGlzIGNvbnN0cmFpbnQKKyAgICAgICAgICAgIC8vIHdoZW4gd2UncmUgcnVubmluZyB0aGUgR0Mg
dmVyaWZpY2F0aW9uIGluIHRoZSBFbmQgcGhhc2UuCisgICAgICAgICAgICBpZiAoc2hvdWxkTm90
UHJvZHVjZVdvcmsgfHwgbV9pc01hcmtpbmdGb3JHQ1ZlcmlmaWVyKQogICAgICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgICAgIAogICAgICAgICAgICAgVGltaW5nU2NvcGUgcHJlQ29udmVy
Z2VuY2VUaW1pbmdTY29wZSgqdGhpcywgIkNvbnN0cmFpbnQ6IGNvbnNlcnZhdGl2ZSBzY2FuIik7
CkBAIC0yNzIwLDI0ICsyNzYxLDMxIEBAIHZvaWQgSGVhcDo6YWRkQ29yZUNvbnN0cmFpbnRzKCkK
IAogICAgICAgICAgICAgICAgIFNldFJvb3RNYXJrUmVhc29uU2NvcGUgcm9vdFNjb3BlKHZpc2l0
b3IsIFJvb3RNYXJrUmVhc29uOjpDb25zZXJ2YXRpdmVTY2FuKTsKICAgICAgICAgICAgICAgICB2
aXNpdG9yLmFwcGVuZChjb25zZXJ2YXRpdmVSb290cyk7CisgICAgICAgICAgICAgICAgaWYgKFVO
TElLRUxZKG1fdmVyaWZpZXJTbG90VmlzaXRvcikpCisgICAgICAgICAgICAgICAgICAgIG1fdmVy
aWZpZXJTbG90VmlzaXRvci0+YXBwZW5kKGNvbnNlcnZhdGl2ZVJvb3RzKTsKICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIGlmIChPcHRpb25zOjp1c2VKSVQoKSkgewogICAgICAgICAgICAgICAg
IC8vIEpJVFN0dWJSb3V0aW5lcyBtdXN0IGJlIHZpc2l0ZWQgYWZ0ZXIgc2Nhbm5pbmcgQ29uc2Vy
dmF0aXZlUm9vdHMgc2luY2UgSklUU3R1YlJvdXRpbmVzIGRlcGVuZCBvbiB0aGUgaG9vayBleGVj
dXRlZCBkdXJpbmcgZ2F0aGVyaW5nIENvbnNlcnZhdGl2ZVJvb3RzLgogICAgICAgICAgICAgICAg
IFNldFJvb3RNYXJrUmVhc29uU2NvcGUgcm9vdFNjb3BlKHZpc2l0b3IsIFJvb3RNYXJrUmVhc29u
OjpKSVRTdHViUm91dGluZXMpOwogICAgICAgICAgICAgICAgIG1faml0U3R1YlJvdXRpbmVzLT50
cmFjZU1hcmtlZFN0dWJSb3V0aW5lcyh2aXNpdG9yKTsKKyAgICAgICAgICAgICAgICBpZiAoVU5M
SUtFTFkobV92ZXJpZmllclNsb3RWaXNpdG9yKSkgeworICAgICAgICAgICAgICAgICAgICAvLyBJ
dCdzIGltcG9ydGFudCB0byBjYXN0IG1fdmVyaWZpZXJTbG90VmlzaXRvciB0byBhbiBBYnN0cmFj
dFNsb3RWaXNpdG9yIGhlcmUKKyAgICAgICAgICAgICAgICAgICAgLy8gc28gdGhhdCB3ZSdsbCBj
YWxsIHRoZSBBYnN0cmFjdFNsb3RWaXNpdG9yIHZlcnNpb24gb2YgdHJhY2VNYXJrZWRTdHViUm91
dGluZXMoKS4KKyAgICAgICAgICAgICAgICAgICAgQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRv
ciA9ICptX3ZlcmlmaWVyU2xvdFZpc2l0b3I7CisgICAgICAgICAgICAgICAgICAgIG1faml0U3R1
YlJvdXRpbmVzLT50cmFjZU1hcmtlZFN0dWJSb3V0aW5lcyh2aXNpdG9yKTsKKyAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGxhc3RWZXJz
aW9uID0gbV9waGFzZVZlcnNpb247Ci0gICAgICAgIH0sCisgICAgICAgIH0pKSwKICAgICAgICAg
Q29uc3RyYWludFZvbGF0aWxpdHk6OkdyZXllZEJ5RXhlY3V0aW9uKTsKICAgICAKICAgICBtX2Nv
bnN0cmFpbnRTZXQtPmFkZCgKICAgICAgICAgIk1zciIsICJNaXNjIFNtYWxsIFJvb3RzIiwKLSAg
ICAgICAgW3RoaXNdIChTbG90VmlzaXRvciYgdmlzaXRvcikgeworICAgICAgICBNQUtFX01BUktJ
TkdfQ09OU1RSQUlOVF9FWEVDVVRPUl9QQUlSKChbdGhpc10gKGF1dG8mIHZpc2l0b3IpIHsKKyAg
ICAgICAgICAgIGlmIGNvbnN0ZXhwciAob2JqY0FQSUVuYWJsZWQpCisgICAgICAgICAgICAgICAg
c2NhbkV4dGVybmFsUmVtZW1iZXJlZFNldChtX3ZtLCB2aXNpdG9yKTsKIAotI2lmIEpTQ19PQkpD
X0FQSV9FTkFCTEVECi0gICAgICAgICAgICBzY2FuRXh0ZXJuYWxSZW1lbWJlcmVkU2V0KG1fdm0s
IHZpc2l0b3IpOwotI2VuZGlmCiAgICAgICAgICAgICBpZiAobV92bS5zbWFsbFN0cmluZ3MubmVl
ZHNUb0JlVmlzaXRlZCgqbV9jb2xsZWN0aW9uU2NvcGUpKSB7CiAgICAgICAgICAgICAgICAgU2V0
Um9vdE1hcmtSZWFzb25TY29wZSByb290U2NvcGUodmlzaXRvciwgUm9vdE1hcmtSZWFzb246OlN0
cm9uZ1JlZmVyZW5jZXMpOwogICAgICAgICAgICAgICAgIG1fdm0uc21hbGxTdHJpbmdzLnZpc2l0
U3Ryb25nUmVmZXJlbmNlcyh2aXNpdG9yKTsKQEAgLTI3NjMsNjggKzI4MTEsNjYgQEAgdm9pZCBI
ZWFwOjphZGRDb3JlQ29uc3RyYWludHMoKQogICAgICAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5k
VW5iYXJyaWVyZWQobV92bS5leGNlcHRpb24oKSk7CiAgICAgICAgICAgICAgICAgdmlzaXRvci5h
cHBlbmRVbmJhcnJpZXJlZChtX3ZtLmxhc3RFeGNlcHRpb24oKSk7CiAgICAgICAgICAgICB9Ci0g
ICAgICAgIH0sCisgICAgICAgIH0pKSwKICAgICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHk6Okdy
ZXllZEJ5RXhlY3V0aW9uKTsKICAgICAKICAgICBtX2NvbnN0cmFpbnRTZXQtPmFkZCgKICAgICAg
ICAgIlNoIiwgIlN0cm9uZyBIYW5kbGVzIiwKLSAgICAgICAgW3RoaXNdIChTbG90VmlzaXRvciYg
dmlzaXRvcikgeworICAgICAgICBNQUtFX01BUktJTkdfQ09OU1RSQUlOVF9FWEVDVVRPUl9QQUlS
KChbdGhpc10gKGF1dG8mIHZpc2l0b3IpIHsKICAgICAgICAgICAgIFNldFJvb3RNYXJrUmVhc29u
U2NvcGUgcm9vdFNjb3BlKHZpc2l0b3IsIFJvb3RNYXJrUmVhc29uOjpTdHJvbmdIYW5kbGVzKTsK
ICAgICAgICAgICAgIG1faGFuZGxlU2V0LnZpc2l0U3Ryb25nSGFuZGxlcyh2aXNpdG9yKTsKLSAg
ICAgICAgfSwKKyAgICAgICAgfSkpLAogICAgICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eTo6R3Jl
eWVkQnlFeGVjdXRpb24pOwogICAgIAogICAgIG1fY29uc3RyYWludFNldC0+YWRkKAogICAgICAg
ICAiRCIsICJEZWJ1Z2dlciIsCi0gICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHZpc2l0b3Ip
IHsKKyAgICAgICAgTUFLRV9NQVJLSU5HX0NPTlNUUkFJTlRfRVhFQ1VUT1JfUEFJUigoW3RoaXNd
IChhdXRvJiB2aXNpdG9yKSB7CiAgICAgICAgICAgICBTZXRSb290TWFya1JlYXNvblNjb3BlIHJv
b3RTY29wZSh2aXNpdG9yLCBSb290TWFya1JlYXNvbjo6RGVidWdnZXIpOwogCi0jaWYgRU5BQkxF
KFNBTVBMSU5HX1BST0ZJTEVSKQotICAgICAgICAgICAgaWYgKFNhbXBsaW5nUHJvZmlsZXIqIHNh
bXBsaW5nUHJvZmlsZXIgPSBtX3ZtLnNhbXBsaW5nUHJvZmlsZXIoKSkgewotICAgICAgICAgICAg
ICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2soc2FtcGxpbmdQcm9maWxlci0+Z2V0TG9jaygpKTsK
LSAgICAgICAgICAgICAgICBzYW1wbGluZ1Byb2ZpbGVyLT5wcm9jZXNzVW52ZXJpZmllZFN0YWNr
VHJhY2VzKGxvY2tlcik7Ci0gICAgICAgICAgICAgICAgc2FtcGxpbmdQcm9maWxlci0+dmlzaXQo
dmlzaXRvcik7Ci0gICAgICAgICAgICAgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkgPT0gR0NMb2dn
aW5nOjpWZXJib3NlKQotICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJTYW1wbGluZyBQcm9m
aWxlciBkYXRhOlxuIiwgdmlzaXRvcik7Ci0gICAgICAgICAgICB9Ci0jZW5kaWYgLy8gRU5BQkxF
KFNBTVBMSU5HX1BST0ZJTEVSKQorICAgICAgICAgICAgaWYgY29uc3RleHByIChzYW1wbGluZ1By
b2ZpbGVyU3VwcG9ydGVkKQorICAgICAgICAgICAgICAgIHNlcnZpY2VTYW1wbGluZ1Byb2ZpbGVy
KG1fdm0sIHZpc2l0b3IpOwogCiAgICAgICAgICAgICBpZiAobV92bS50eXBlUHJvZmlsZXIoKSkK
ICAgICAgICAgICAgICAgICBtX3ZtLnR5cGVQcm9maWxlckxvZygpLT52aXNpdCh2aXNpdG9yKTsK
ICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKGF1dG8qIHNoYWRvd0NoaWNrZW4gPSBtX3Zt
LnNoYWRvd0NoaWNrZW4oKSkKICAgICAgICAgICAgICAgICBzaGFkb3dDaGlja2VuLT52aXNpdENo
aWxkcmVuKHZpc2l0b3IpOwotICAgICAgICB9LAorICAgICAgICB9KSksCiAgICAgICAgIENvbnN0
cmFpbnRWb2xhdGlsaXR5OjpHcmV5ZWRCeUV4ZWN1dGlvbik7CiAgICAgCiAgICAgbV9jb25zdHJh
aW50U2V0LT5hZGQoCiAgICAgICAgICJXcyIsICJXZWFrIFNldHMiLAotICAgICAgICBbdGhpc10g
KFNsb3RWaXNpdG9yJiB2aXNpdG9yKSB7CisgICAgICAgIE1BS0VfTUFSS0lOR19DT05TVFJBSU5U
X0VYRUNVVE9SX1BBSVIoKFt0aGlzXSAoYXV0byYgdmlzaXRvcikgewogICAgICAgICAgICAgU2V0
Um9vdE1hcmtSZWFzb25TY29wZSByb290U2NvcGUodmlzaXRvciwgUm9vdE1hcmtSZWFzb246Oldl
YWtTZXRzKTsKICAgICAgICAgICAgIG1fb2JqZWN0U3BhY2UudmlzaXRXZWFrU2V0cyh2aXNpdG9y
KTsKLSAgICAgICAgfSwKKyAgICAgICAgfSkpLAogICAgICAgICBDb25zdHJhaW50Vm9sYXRpbGl0
eTo6R3JleWVkQnlNYXJraW5nKTsKICAgICAKICAgICBtX2NvbnN0cmFpbnRTZXQtPmFkZCgKICAg
ICAgICAgIk8iLCAiT3V0cHV0IiwKLSAgICAgICAgW10gKFNsb3RWaXNpdG9yJiB2aXNpdG9yKSB7
CisgICAgICAgIE1BS0VfTUFSS0lOR19DT05TVFJBSU5UX0VYRUNVVE9SX1BBSVIoKFtdIChhdXRv
JiB2aXNpdG9yKSB7CisgICAgICAgICAgICB1c2luZyBWaXNpdG9yID0gZGVjbHR5cGUodmlzaXRv
cik7CiAgICAgICAgICAgICBWTSYgdm0gPSB2aXNpdG9yLnZtKCk7CiAKLSAgICAgICAgICAgIGF1
dG8gY2FsbE91dHB1dENvbnN0cmFpbnQgPSBbXSAoU2xvdFZpc2l0b3ImIHZpc2l0b3IsIEhlYXBD
ZWxsKiBoZWFwQ2VsbCwgSGVhcENlbGw6OktpbmQpIHsKLSAgICAgICAgICAgICAgICBTZXRSb290
TWFya1JlYXNvblNjb3BlIHJvb3RTY29wZSh2aXNpdG9yLCBSb290TWFya1JlYXNvbjo6T3V0cHV0
KTsKLSAgICAgICAgICAgICAgICBWTSYgdm0gPSB2aXNpdG9yLnZtKCk7CisgICAgICAgICAgICAv
LyBUaGUgYHZpc2l0b3IyYCBhcmd1bWVudCBpcyBzdHJhbmdlbHkgbmFtZWQgYmVjYXVzZSB0aGUg
V2luQ2Fpcm8gcG9ydAorICAgICAgICAgICAgLy8gZ2V0cyBjb25mdXNlZCAgYW5kIHRoaW5rcyB3
ZSdyZSB0cnlpbmcgdG8gY2FwdHVyZSB0aGUgb3V0ZXIgdmlzaXRvcgorICAgICAgICAgICAgLy8g
YXJnIGhlcmUuIEdpdmluZyBpdCBhIHVuaXF1ZSBuYW1lIHdvcmtzIGFyb3VuZCB0aGlzIGlzc3Vl
LgorICAgICAgICAgICAgYXV0byBjYWxsT3V0cHV0Q29uc3RyYWludCA9IFtdIChWaXNpdG9yJiB2
aXNpdG9yMiwgSGVhcENlbGwqIGhlYXBDZWxsLCBIZWFwQ2VsbDo6S2luZCkgeworICAgICAgICAg
ICAgICAgIFNldFJvb3RNYXJrUmVhc29uU2NvcGUgcm9vdFNjb3BlKHZpc2l0b3IyLCBSb290TWFy
a1JlYXNvbjo6T3V0cHV0KTsKKyAgICAgICAgICAgICAgICBWTSYgdm0gPSB2aXNpdG9yMi52bSgp
OwogICAgICAgICAgICAgICAgIEpTQ2VsbCogY2VsbCA9IHN0YXRpY19jYXN0PEpTQ2VsbCo+KGhl
YXBDZWxsKTsKLSAgICAgICAgICAgICAgICBjZWxsLT5tZXRob2RUYWJsZSh2bSktPnZpc2l0T3V0
cHV0Q29uc3RyYWludHMoY2VsbCwgdmlzaXRvcik7CisgICAgICAgICAgICAgICAgY2VsbC0+bWV0
aG9kVGFibGUodm0pLT52aXNpdE91dHB1dENvbnN0cmFpbnRzKGNlbGwsIHZpc2l0b3IyKTsKICAg
ICAgICAgICAgIH07CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGF1dG8gYWRkID0gWyZdIChh
dXRvJiBzZXQpIHsKLSAgICAgICAgICAgICAgICB2aXNpdG9yLmFkZFBhcmFsbGVsQ29uc3RyYWlu
dFRhc2soc2V0LmZvckVhY2hNYXJrZWRDZWxsSW5QYXJhbGxlbChjYWxsT3V0cHV0Q29uc3RyYWlu
dCkpOworICAgICAgICAgICAgICAgIFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoVmlzaXRvciYpPj4g
dGFzayA9IHNldC50ZW1wbGF0ZSBmb3JFYWNoTWFya2VkQ2VsbEluUGFyYWxsZWw8VmlzaXRvcj4o
Y2FsbE91dHB1dENvbnN0cmFpbnQpOworICAgICAgICAgICAgICAgIHZpc2l0b3IuYWRkUGFyYWxs
ZWxDb25zdHJhaW50VGFzayh0YXNrKTsKICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAKICAg
ICAgICAgICAgIGFkZCh2bS5leGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlc1dpdGhDb25zdHJhaW50
cyk7CiAgICAgICAgICAgICBpZiAodm0ubV93ZWFrTWFwU3BhY2UpCiAgICAgICAgICAgICAgICAg
YWRkKCp2bS5tX3dlYWtNYXBTcGFjZSk7Ci0gICAgICAgIH0sCisgICAgICAgIH0pKSwKICAgICAg
ICAgQ29uc3RyYWludFZvbGF0aWxpdHk6OkdyZXllZEJ5TWFya2luZywKICAgICAgICAgQ29uc3Ry
YWludFBhcmFsbGVsaXNtOjpQYXJhbGxlbCk7CiAgICAgCkBAIC0yODMyLDcgKzI4NzgsNyBAQCB2
b2lkIEhlYXA6OmFkZENvcmVDb25zdHJhaW50cygpCiAgICAgaWYgKE9wdGlvbnM6OnVzZUpJVCgp
KSB7CiAgICAgICAgIG1fY29uc3RyYWludFNldC0+YWRkKAogICAgICAgICAgICAgIkR3IiwgIkRG
RyBXb3JrbGlzdHMiLAotICAgICAgICAgICAgW3RoaXNdIChTbG90VmlzaXRvciYgdmlzaXRvcikg
eworICAgICAgICAgICAgTUFLRV9NQVJLSU5HX0NPTlNUUkFJTlRfRVhFQ1VUT1JfUEFJUigoW3Ro
aXNdIChhdXRvJiB2aXNpdG9yKSB7CiAgICAgICAgICAgICAgICAgU2V0Um9vdE1hcmtSZWFzb25T
Y29wZSByb290U2NvcGUodmlzaXRvciwgUm9vdE1hcmtSZWFzb246OkRGR1dvcmtMaXN0cyk7CiAK
ICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBERkc6Om51bWJlck9mV29ya2xpc3Rz
KCk7IGktLTspCkBAIC0yODQwLDcgKzI4ODYsNyBAQCB2b2lkIEhlYXA6OmFkZENvcmVDb25zdHJh
aW50cygpCiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMg
aXMgYWxtb3N0IGNlcnRhaW5seSB1bm5lY2Vzc2FyeS4KICAgICAgICAgICAgICAgICAvLyBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY2ODI5Ci0gICAgICAgICAgICAg
ICAgREZHOjppdGVyYXRlQ29kZUJsb2Nrc0ZvckdDKAorICAgICAgICAgICAgICAgIERGRzo6aXRl
cmF0ZUNvZGVCbG9ja3NGb3JHQyh2aXNpdG9yLAogICAgICAgICAgICAgICAgICAgICBtX3ZtLAog
ICAgICAgICAgICAgICAgICAgICBbJl0gKENvZGVCbG9jayogY29kZUJsb2NrKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKGNvZGVCbG9jayk7CkBA
IC0yODQ4LDIzICsyODk0LDIzIEBAIHZvaWQgSGVhcDo6YWRkQ29yZUNvbnN0cmFpbnRzKCkKICAg
ICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSA9PSBH
Q0xvZ2dpbmc6OlZlcmJvc2UpCiAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIkRGRyBXb3Jr
bGlzdHM6XG4iLCB2aXNpdG9yKTsKLSAgICAgICAgICAgIH0sCisgICAgICAgICAgICB9KSksCiAg
ICAgICAgICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eTo6R3JleWVkQnlNYXJraW5nKTsKICAgICB9
CiAjZW5kaWYKICAgICAKICAgICBtX2NvbnN0cmFpbnRTZXQtPmFkZCgKICAgICAgICAgIkNiIiwg
IkNvZGVCbG9ja3MiLAotICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiB2aXNpdG9yKSB7Cisg
ICAgICAgIE1BS0VfTUFSS0lOR19DT05TVFJBSU5UX0VYRUNVVE9SX1BBSVIoKFt0aGlzXSAoYXV0
byYgdmlzaXRvcikgewogICAgICAgICAgICAgU2V0Um9vdE1hcmtSZWFzb25TY29wZSByb290U2Nv
cGUodmlzaXRvciwgUm9vdE1hcmtSZWFzb246OkNvZGVCbG9ja3MpOwotICAgICAgICAgICAgaXRl
cmF0ZUV4ZWN1dGluZ0FuZENvbXBpbGluZ0NvZGVCbG9ja3NXaXRob3V0SG9sZGluZ0xvY2tzKAor
ICAgICAgICAgICAgaXRlcmF0ZUV4ZWN1dGluZ0FuZENvbXBpbGluZ0NvZGVCbG9ja3NXaXRob3V0
SG9sZGluZ0xvY2tzKHZpc2l0b3IsCiAgICAgICAgICAgICAgICAgWyZdIChDb2RlQmxvY2sqIGNv
ZGVCbG9jaykgewogICAgICAgICAgICAgICAgICAgICAvLyBWaXNpdCB0aGUgQ29kZUJsb2NrIGFz
IGEgY29uc3RyYWludCBvbmx5IGlmIGl0J3MgYmxhY2suCi0gICAgICAgICAgICAgICAgICAgIGlm
IChpc01hcmtlZChjb2RlQmxvY2spCisgICAgICAgICAgICAgICAgICAgIGlmICh2aXNpdG9yLmlz
TWFya2VkKGNvZGVCbG9jaykKICAgICAgICAgICAgICAgICAgICAgICAgICYmIGNvZGVCbG9jay0+
Y2VsbFN0YXRlKCkgPT0gQ2VsbFN0YXRlOjpQb3NzaWJseUJsYWNrKQogICAgICAgICAgICAgICAg
ICAgICAgICAgdmlzaXRvci52aXNpdEFzQ29uc3RyYWludChjb2RlQmxvY2spOwogICAgICAgICAg
ICAgICAgIH0pOwotICAgICAgICB9LAorICAgICAgICB9KSksCiAgICAgICAgIENvbnN0cmFpbnRW
b2xhdGlsaXR5OjpTZWxkb21HcmV5ZWQpOwogICAgIAogICAgIG1fY29uc3RyYWludFNldC0+YWRk
KG1ha2VVbmlxdWU8TWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQ+KCp0aGlzKSk7CkBAIC0zMDIz
LDQgKzMwNjksMzQgQEAgdm9pZCBIZWFwOjpydW5UYXNrSW5QYXJhbGxlbChSZWZQdHI8U2hhcgog
ICAgIH0KIH0KIAordm9pZCBIZWFwOjp2ZXJpZnlHQygpCit7CisgICAgUkVMRUFTRV9BU1NFUlQo
bV92ZXJpZmllclNsb3RWaXNpdG9yKTsKKyAgICBSRUxFQVNFX0FTU0VSVCghbV9pc01hcmtpbmdG
b3JHQ1ZlcmlmaWVyKTsKKyAgICBtX2lzTWFya2luZ0ZvckdDVmVyaWZpZXIgPSB0cnVlOworCisg
ICAgVmVyaWZpZXJTbG90VmlzaXRvciYgdmlzaXRvciA9ICptX3ZlcmlmaWVyU2xvdFZpc2l0b3I7
CisKKyAgICBkbyB7CisgICAgICAgIHdoaWxlICghdmlzaXRvci5pc0VtcHR5KCkpCisgICAgICAg
ICAgICB2aXNpdG9yLmRyYWluKCk7CisgICAgICAgIG1fY29uc3RyYWludFNldC0+ZXhlY3V0ZUFs
bFN5bmNocm9ub3VzbHkodmlzaXRvcik7CisgICAgICAgIHZpc2l0b3IuZXhlY3V0ZUNvbnN0cmFp
bnRUYXNrcygpOworICAgIH0gd2hpbGUgKCF2aXNpdG9yLmlzRW1wdHkoKSk7CisKKyAgICBtX2lz
TWFya2luZ0ZvckdDVmVyaWZpZXIgPSBmYWxzZTsKKworICAgIHZpc2l0b3IuZm9yRWFjaExpdmVD
ZWxsKFsmXSAoSGVhcENlbGwqIGNlbGwpIHsKKyAgICAgICAgaWYgKEhlYXA6OmlzTWFya2VkKGNl
bGwpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGRhdGFMb2dMbigiXG4iICJHQyBW
ZXJpZmllcjogRVJST1IgY2VsbCAiLCBSYXdQb2ludGVyKGNlbGwpLCAiIHdhcyBub3QgbWFya2Vk
Iik7CisgICAgICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjp2ZXJib3NlVmVyaWZ5R0MoKSkpCisg
ICAgICAgICAgICB2aXNpdG9yLmR1bXBNYXJrZXJEYXRhKGNlbGwpOworICAgICAgICBSRUxFQVNF
X0FTU0VSVCh0aGlzLT5pc01hcmtlZChjZWxsKSk7CisgICAgfSk7CisKKyAgICBtX3ZlcmlmaWVy
U2xvdFZpc2l0b3IgPSBudWxscHRyOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMSw3ICsxLDcgQEAKIC8q
CiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDAgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9y
ZykKICAqICBDb3B5cmlnaHQgKEMpIDIwMDEgUGV0ZXIgS2VsbHkgKHBta0Bwb3N0LmNvbSkKLSAq
ICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwpAQCAtODYsNiArODYsNyBAQCBjbGFzcyBTcGFjZVRp
bWVNdXRhdG9yU2NoZWR1bGVyOwogY2xhc3MgU3RvcElmTmVjZXNzYXJ5VGltZXI7CiBjbGFzcyBT
d2VlcGluZ1Njb3BlOwogY2xhc3MgVk07CitjbGFzcyBWZXJpZmllclNsb3RWaXNpdG9yOwogY2xh
c3MgV2Vha0dDTWFwQmFzZTsKIHN0cnVjdCBDdXJyZW50VGhyZWFkU3RhdGU7CiAKQEAgLTE4NCw4
ICsxODUsNiBAQCBwdWJsaWM6CiAgICAgCiAgICAgYm9vbCBpc1NodXR0aW5nRG93bigpIGNvbnN0
IHsgcmV0dXJuIG1faXNTaHV0dGluZ0Rvd247IH0KIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIGJv
b2wgaXNBbmFseXppbmdIZWFwKCkgY29uc3Q7Ci0KICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lk
IHN3ZWVwU3luY2hyb25vdXNseSgpOwogCiAgICAgYm9vbCBzaG91bGRDb2xsZWN0SGV1cmlzdGlj
KCk7CkBAIC0zODUsOCArMzg0LDYgQEAgcHVibGljOgogICAgIAogICAgIEpTX0VYUE9SVF9QUklW
QVRFIHZvaWQgYWRkTWFya2luZ0NvbnN0cmFpbnQoc3RkOjp1bmlxdWVfcHRyPE1hcmtpbmdDb25z
dHJhaW50Pik7CiAgICAgCi0gICAgc2l6ZV90IG51bU9wYXF1ZVJvb3RzKCkgY29uc3QgeyByZXR1
cm4gbV9vcGFxdWVSb290cy5zaXplKCk7IH0KLQogICAgIEhlYXBWZXJpZmllciogdmVyaWZpZXIo
KSBjb25zdCB7IHJldHVybiBtX3ZlcmlmaWVyLmdldCgpOyB9CiAgICAgCiAgICAgdm9pZCBhZGRI
ZWFwRmluYWxpemVyQ2FsbGJhY2soY29uc3QgSGVhcEZpbmFsaXplckNhbGxiYWNrJik7CkBAIC00
MDcsNiArNDA0LDggQEAgcHVibGljOgogCiAgICAgSGFzaE1hcDxKU0ltbXV0YWJsZUJ1dHRlcmZs
eSosIEpTU3RyaW5nKj4gaW1tdXRhYmxlQnV0dGVyZmx5VG9TdHJpbmdDYWNoZTsKIAorICAgIGJv
b2wgaXNNYXJraW5nRm9yR0NWZXJpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1faXNNYXJraW5nRm9y
R0NWZXJpZmllcjsgfQorCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBBbGxvY2F0aW5nU2Nv
cGU7CiAgICAgZnJpZW5kIGNsYXNzIENvZGVCbG9jazsKQEAgLTU3NSwxMSArNTc0LDExIEBAIHBy
aXZhdGU6CiAKICAgICBib29sIG92ZXJDcml0aWNhbE1lbW9yeVRocmVzaG9sZChNZW1vcnlUaHJl
c2hvbGRDYWxsVHlwZSBtZW1vcnlUaHJlc2hvbGRDYWxsVHlwZSA9IE1lbW9yeVRocmVzaG9sZENh
bGxUeXBlOjpDYWNoZWQpOwogICAgIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+Ci0gICAg
dm9pZCBpdGVyYXRlRXhlY3V0aW5nQW5kQ29tcGlsaW5nQ29kZUJsb2Nrcyhjb25zdCBGdW5jJik7
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYywgdHlwZW5hbWUgVmlzaXRvcj4KKyAgICB2b2lk
IGl0ZXJhdGVFeGVjdXRpbmdBbmRDb21waWxpbmdDb2RlQmxvY2tzKFZpc2l0b3ImLCBjb25zdCBG
dW5jJik7CiAgICAgCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KLSAgICB2b2lkIGl0ZXJh
dGVFeGVjdXRpbmdBbmRDb21waWxpbmdDb2RlQmxvY2tzV2l0aG91dEhvbGRpbmdMb2Nrcyhjb25z
dCBGdW5jJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYywgdHlwZW5hbWUgVmlzaXRvcj4K
KyAgICB2b2lkIGl0ZXJhdGVFeGVjdXRpbmdBbmRDb21waWxpbmdDb2RlQmxvY2tzV2l0aG91dEhv
bGRpbmdMb2NrcyhWaXNpdG9yJiwgY29uc3QgRnVuYyYpOwogICAgIAogICAgIHZvaWQgYXNzZXJ0
TWFya1N0YWNrc0VtcHR5KCk7CiAKQEAgLTU5MCw2ICs1ODksOCBAQCBwcml2YXRlOgogICAgIHN0
YXRpYyBib29sIHVzZUdlbmVyYXRpb25hbEdDKCk7CiAgICAgc3RhdGljIGJvb2wgc2hvdWxkU3dl
ZXBTeW5jaHJvbm91c2x5KCk7CiAgICAgCisgICAgdm9pZCB2ZXJpZnlHQygpOworCiAgICAgY29u
c3QgSGVhcFR5cGUgbV9oZWFwVHlwZTsKICAgICBNdXRhdG9yU3RhdGUgbV9tdXRhdG9yU3RhdGUg
eyBNdXRhdG9yU3RhdGU6OlJ1bm5pbmcgfTsKICAgICBjb25zdCBzaXplX3QgbV9yYW1TaXplOwpA
QCAtNjM2LDYgKzYzNyw3IEBAIHByaXZhdGU6CiAgICAgc3RkOjp1bmlxdWVfcHRyPE1hcmtTdGFj
a0FycmF5PiBtX211dGF0b3JNYXJrU3RhY2s7CiAgICAgc3RkOjp1bmlxdWVfcHRyPE1hcmtTdGFj
a0FycmF5PiBtX3JhY2VNYXJrU3RhY2s7CiAgICAgc3RkOjp1bmlxdWVfcHRyPE1hcmtpbmdDb25z
dHJhaW50U2V0PiBtX2NvbnN0cmFpbnRTZXQ7CisgICAgc3RkOjp1bmlxdWVfcHRyPFZlcmlmaWVy
U2xvdFZpc2l0b3I+IG1fdmVyaWZpZXJTbG90VmlzaXRvcjsKIAogICAgIC8vIFdlIHBvb2wgdGhl
IHNsb3QgdmlzaXRvcnMgdXNlZCBieSBwYXJhbGxlbCBtYXJraW5nIHRocmVhZHMuIEl0J3MgdXNl
ZnVsIHRvIGJlIGFibGUgdG8KICAgICAvLyBlbnVtZXJhdGUgb3ZlciB0aGVtLCBhbmQgaXQncyB1
c2VmdWwgdG8gaGF2ZSB0aGVtIGNhY2hlIHNvbWUgc21hbGwgYW1vdW50IG9mIG1lbW9yeSBmcm9t
CkBAIC02NTQsNiArNjU2LDcgQEAgcHJpdmF0ZToKICAgICBib29sIG1faXNTYWZlVG9Db2xsZWN0
IHsgZmFsc2UgfTsKICAgICBib29sIG1faXNTaHV0dGluZ0Rvd24geyBmYWxzZSB9OwogICAgIGJv
b2wgbV9tdXRhdG9yU2hvdWxkQmVGZW5jZWQgeyBPcHRpb25zOjpmb3JjZUZlbmNlZEJhcnJpZXIo
KSB9OworICAgIGJvb2wgbV9pc01hcmtpbmdGb3JHQ1ZlcmlmaWVyIHsgZmFsc2UgfTsKIAogICAg
IHVuc2lnbmVkIG1fYmFycmllclRocmVzaG9sZCB7IE9wdGlvbnM6OmZvcmNlRmVuY2VkQmFycmll
cigpID8gdGF1dG9sb2dpY2FsVGhyZXNob2xkIDogYmxhY2tUaHJlc2hvbGQgfTsKIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcElubGluZXMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwSW5saW5lcy5oCShyZXZpc2lvbiAyNzI4MzAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwSW5saW5lcy5oCSh3b3JraW5nIGNv
cHkpCkBAIC02OSw2ICs2OSw4IEBAIGlubGluZSBib29sIEhlYXA6OndvcmxkSXNTdG9wcGVkKCkg
Y29uc3QKIAogQUxXQVlTX0lOTElORSBib29sIEhlYXA6OmlzTWFya2VkKGNvbnN0IHZvaWQqIHJh
d0NlbGwpCiB7CisgICAgQVNTRVJUKCFtX2lzTWFya2luZ0ZvckdDVmVyaWZpZXIpOworLy8gICAg
UkVMRUFTRV9BU1NFUlQoIW1faXNNYXJraW5nRm9yR0NWZXJpZmllcik7IC8vIG1sYW0gVEVTVCBv
bmx5CiAgICAgSGVhcENlbGwqIGNlbGwgPSBiaXR3aXNlX2Nhc3Q8SGVhcENlbGwqPihyYXdDZWxs
KTsKICAgICBpZiAoY2VsbC0+aXNQcmVjaXNlQWxsb2NhdGlvbigpKQogICAgICAgICByZXR1cm4g
Y2VsbC0+cHJlY2lzZUFsbG9jYXRpb24oKS5pc01hcmtlZCgpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvSGVhcFByb2ZpbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9IZWFwUHJvZmlsZXIuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwUHJvZmlsZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTYwLDYgKzYwLDcgQEAgdm9pZCBIZWFwUHJvZmlsZXI6OnNldEFjdGl2ZUhlYXBBbmFseXplcgog
ewogICAgIEFTU0VSVCghIW1fYWN0aXZlQW5hbHl6ZXIgIT0gISFhbmFseXplcik7CiAgICAgbV9h
Y3RpdmVBbmFseXplciA9IGFuYWx5emVyOworICAgIG1fdm0uc2V0QWN0aXZlSGVhcEFuYWx5emVy
KGFuYWx5emVyKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9Jc29DZWxsU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvSXNvQ2VsbFNldC5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9Jc29DZWxsU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTgsOCArNTgsOCBA
QCBwdWJsaWM6CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KICAgICB2b2lkIGZvckVhY2hN
YXJrZWRDZWxsKGNvbnN0IEZ1bmMmKTsKIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+Ci0g
ICAgUmVmPFNoYXJlZFRhc2s8dm9pZChTbG90VmlzaXRvciYpPj4gZm9yRWFjaE1hcmtlZENlbGxJ
blBhcmFsbGVsKGNvbnN0IEZ1bmMmKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yLCB0
eXBlbmFtZSBGdW5jPgorICAgIFJlZjxTaGFyZWRUYXNrPHZvaWQoVmlzaXRvciYpPj4gZm9yRWFj
aE1hcmtlZENlbGxJblBhcmFsbGVsKGNvbnN0IEZ1bmMmKTsKICAgICAKICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBGdW5jPgogICAgIHZvaWQgZm9yRWFjaExpdmVDZWxsKGNvbnN0IEZ1bmMmKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0lzb0NlbGxTZXRJbmxpbmVzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvQ2VsbFNldElubGluZXMuaAko
cmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvQ2VsbFNl
dElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC05MSwxMCArOTEsMTAgQEAgdm9pZCBJc29DZWxsU2V0
Ojpmb3JFYWNoTWFya2VkQ2VsbChjb25zdAogICAgICAgICB9KTsKIH0KIAotdGVtcGxhdGU8dHlw
ZW5hbWUgRnVuYz4KLVJlZjxTaGFyZWRUYXNrPHZvaWQoU2xvdFZpc2l0b3ImKT4+IElzb0NlbGxT
ZXQ6OmZvckVhY2hNYXJrZWRDZWxsSW5QYXJhbGxlbChjb25zdCBGdW5jJiBmdW5jKQordGVtcGxh
dGU8dHlwZW5hbWUgVmlzaXRvciwgdHlwZW5hbWUgRnVuYz4KK1JlZjxTaGFyZWRUYXNrPHZvaWQo
VmlzaXRvciYpPj4gSXNvQ2VsbFNldDo6Zm9yRWFjaE1hcmtlZENlbGxJblBhcmFsbGVsKGNvbnN0
IEZ1bmMmIGZ1bmMpCiB7Ci0gICAgY2xhc3MgVGFzayBmaW5hbCA6IHB1YmxpYyBTaGFyZWRUYXNr
PHZvaWQoU2xvdFZpc2l0b3ImKT4geworICAgIGNsYXNzIFRhc2sgZmluYWwgOiBwdWJsaWMgU2hh
cmVkVGFzazx2b2lkKFZpc2l0b3ImKT4gewogICAgIHB1YmxpYzoKICAgICAgICAgVGFzayhJc29D
ZWxsU2V0JiBzZXQsIGNvbnN0IEZ1bmMmIGZ1bmMpCiAgICAgICAgICAgICA6IG1fc2V0KHNldCkK
QEAgLTEwMyw3ICsxMDMsNyBAQCBSZWY8U2hhcmVkVGFzazx2b2lkKFNsb3RWaXNpdG9yJik+PiBJ
c29DCiAgICAgICAgIHsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgdm9pZCBydW4oU2xv
dFZpc2l0b3ImIHZpc2l0b3IpIGZpbmFsCisgICAgICAgIHZvaWQgcnVuKFZpc2l0b3ImIHZpc2l0
b3IpIGZpbmFsCiAgICAgICAgIHsKICAgICAgICAgICAgIHdoaWxlIChNYXJrZWRCbG9jazo6SGFu
ZGxlKiBoYW5kbGUgPSBtX2Jsb2NrU291cmNlLT5ydW4oKSkgewogICAgICAgICAgICAgICAgIHVu
c2lnbmVkIGJsb2NrSW5kZXggPSBoYW5kbGUtPmluZGV4KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9KSVRTdHViUm91dGluZVNldC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvSklUU3R1YlJvdXRpbmVTZXQuY3BwCShyZXZpc2lvbiAyNzI4
MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9KSVRTdHViUm91dGluZVNldC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEy
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0y
MDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMTI4LDcgKzEyOCw4IEBAIHZvaWQgSklUU3R1YlJvdXRpbmVTZXQ6OmRl
bGV0ZVVubWFya2VkSmUKICAgICBtX3JvdXRpbmVzLnNocmluayhkc3RJbmRleCk7CiB9CiAKLXZv
aWQgSklUU3R1YlJvdXRpbmVTZXQ6OnRyYWNlTWFya2VkU3R1YlJvdXRpbmVzKFNsb3RWaXNpdG9y
JiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSklUU3R1YlJvdXRp
bmVTZXQ6OnRyYWNlTWFya2VkU3R1YlJvdXRpbmVzKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAg
Zm9yIChhdXRvJiBlbnRyeSA6IG1fcm91dGluZXMpIHsKICAgICAgICAgR0NBd2FyZUpJVFN0dWJS
b3V0aW5lKiByb3V0aW5lID0gZW50cnkucm91dGluZTsKQEAgLTEzOSw2ICsxNDAsOSBAQCB2b2lk
IEpJVFN0dWJSb3V0aW5lU2V0Ojp0cmFjZU1hcmtlZFN0dWJSCiAgICAgfQogfQogCit0ZW1wbGF0
ZSB2b2lkIEpJVFN0dWJSb3V0aW5lU2V0Ojp0cmFjZU1hcmtlZFN0dWJSb3V0aW5lcyhBYnN0cmFj
dFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpJVFN0dWJSb3V0aW5lU2V0Ojp0cmFjZU1h
cmtlZFN0dWJSb3V0aW5lcyhTbG90VmlzaXRvciYpOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAog
I2VuZGlmIC8vIEVOQUJMRShKSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9K
SVRTdHViUm91dGluZVNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0pJVFN0dWJSb3V0aW5lU2V0LmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0pJVFN0dWJSb3V0aW5lU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTggQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0z
Niw3ICszNiw2IEBAIHVzaW5nIFdURjo6UmFuZ2U7CiBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3Mg
R0NBd2FyZUpJVFN0dWJSb3V0aW5lOwotY2xhc3MgU2xvdFZpc2l0b3I7CiAKICNpZiBFTkFCTEUo
SklUKQogCkBAIC02Myw4ICs2Miw4IEBAIHB1YmxpYzoKICAgICB2b2lkIHByZXBhcmVGb3JDb25z
ZXJ2YXRpdmVTY2FuKCk7CiAgICAgCiAgICAgdm9pZCBkZWxldGVVbm1hcmtlZEpldHRpc29uZWRT
dHViUm91dGluZXMoKTsKLSAgICAKLSAgICB2b2lkIHRyYWNlTWFya2VkU3R1YlJvdXRpbmVzKFNs
b3RWaXNpdG9yJik7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIHRyYWNl
TWFya2VkU3R1YlJvdXRpbmVzKFZpc2l0b3ImKTsKICAgICAKIHByaXZhdGU6CiAgICAgdm9pZCBt
YXJrU2xvdyh1aW50cHRyX3QgYWRkcmVzcyk7CkBAIC05Miw3ICs5MSw3IEBAIHB1YmxpYzoKICAg
ICB2b2lkIG1hcmsodm9pZCopIHsgfQogICAgIHZvaWQgcHJlcGFyZUZvckNvbnNlcnZhdGl2ZVNj
YW4oKSB7IH0KICAgICB2b2lkIGRlbGV0ZVVubWFya2VkSmV0dGlzb25lZFN0dWJSb3V0aW5lcygp
IHsgfQotICAgIHZvaWQgdHJhY2VNYXJrZWRTdHViUm91dGluZXMoU2xvdFZpc2l0b3ImKSB7IH0K
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIHRyYWNlTWFya2VkU3R1YlJvdXRp
bmVzKFZpc2l0b3ImKSB7IH0KIH07CiAKICNlbmRpZiAvLyAhRU5BQkxFKEpJVCkKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtTdGFja01lcmdpbmdDb25zdHJhaW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3RhY2tNZXJnaW5n
Q29uc3RyYWludC5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL01hcmtTdGFja01lcmdpbmdDb25zdHJhaW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNSw3
ICsyNSw2IEBACiAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJNYXJrU3RhY2tNZXJn
aW5nQ29uc3RyYWludC5oIgotCiAjaW5jbHVkZSAiR0NTZWdtZW50ZWRBcnJheUlubGluZXMuaCIK
ICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAKQEAgLTQ2LDcgKzQ1LDcgQEAgZG91YmxlIE1hcmtT
dGFja01lcmdpbmdDb25zdHJhaW50OjpxdWljawogICAgIHJldHVybiBtX2hlYXAubV9tdXRhdG9y
TWFya1N0YWNrLT5zaXplKCkgKyBtX2hlYXAubV9yYWNlTWFya1N0YWNrLT5zaXplKCk7CiB9CiAK
LXZvaWQgTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQ6OnByZXBhcmVUb0V4ZWN1dGVJbXBsKGNv
bnN0IEFic3RyYWN0TG9ja2VyJiwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIE1hcmtTdGFj
a01lcmdpbmdDb25zdHJhaW50OjpwcmVwYXJlVG9FeGVjdXRlSW1wbChjb25zdCBBYnN0cmFjdExv
Y2tlciYsIEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgLy8gTG9nZ2luZyB0
aGUgd29yayBoZXJlIGVuc3VyZXMgdGhhdCB0aGUgY29uc3RyYWludCBzb2x2ZXIga25vd3MgdGhh
dCBpdCBkb2Vzbid0IG5lZWQgdG8gcHJvZHVjZQogICAgIC8vIGFueW1vcmUgd29yay4KQEAgLTU2
LDExICs1NSwyNCBAQCB2b2lkIE1hcmtTdGFja01lcmdpbmdDb25zdHJhaW50OjpwcmVwYXJlCiAg
ICAgZGF0YUxvZ0lmKE9wdGlvbnM6OmxvZ0dDKCksICIoIiwgc2l6ZSwgIikiKTsKIH0KIAotdm9p
ZCBNYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludDo6ZXhlY3V0ZUltcGwoU2xvdFZpc2l0b3ImIHZp
c2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBNYXJrU3RhY2tNZXJnaW5n
Q29uc3RyYWludDo6ZXhlY3V0ZUltcGxJbXBsKFZpc2l0b3ImIHZpc2l0b3IpCiB7CisgICAgLy8g
V2Ugd2FudCB0byBza2lwIHRoaXMgY29uc3RyYWludCBmb3IgdGhlIEdDIHZlcmlmaWVyIGJlY2F1
c2U6CisgICAgLy8gMS4gVGhlcmUgc2hvdWxkIGJlIG5vIG11dGF0b3IgbWFya2luZyBhY3Rpb24g
YmV0d2VlbiB0aGUgRW5kIHBoYXNlIGFuZCB2ZXJpZnlHQygpLgorICAgIC8vICAgIEhlbmNlLCB3
ZSBjYW4gaWdub3JlIHRoc2Ugc3RhY2tzLgorICAgIC8vIDIuIFRoZSBFbmQgcGhhc2UgZXhwbGlj
dGx5IGNhbGxzIGl0ZXJhdGVFeGVjdXRpbmdBbmRDb21waWxpbmdDb2RlQmxvY2tzKCkKKyAgICAv
LyAgICB0byBhZGQgZXhlY3V0aW5nIENvZGVCbG9ja3MgdG8gbV9oZWFwLm1fbXV0YXRvck1hcmtT
dGFjay4gV2Ugd2FudCB0bworICAgIC8vICAgIGxlYXZlIHRob3NlIHVucGVydHVyYmVkLgorICAg
IGlmIChtX2hlYXAubV9pc01hcmtpbmdGb3JHQ1ZlcmlmaWVyKQorICAgICAgICByZXR1cm47CisK
ICAgICBtX2hlYXAubV9tdXRhdG9yTWFya1N0YWNrLT50cmFuc2ZlclRvKHZpc2l0b3IubXV0YXRv
ck1hcmtTdGFjaygpKTsKICAgICBtX2hlYXAubV9yYWNlTWFya1N0YWNrLT50cmFuc2ZlclRvKHZp
c2l0b3IubXV0YXRvck1hcmtTdGFjaygpKTsKIH0KIAordm9pZCBNYXJrU3RhY2tNZXJnaW5nQ29u
c3RyYWludDo6ZXhlY3V0ZUltcGwoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikgeyBleGVj
dXRlSW1wbEltcGwodmlzaXRvcik7IH0KK3ZvaWQgTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQ6
OmV4ZWN1dGVJbXBsKFNsb3RWaXNpdG9yJiB2aXNpdG9yKSB7IGV4ZWN1dGVJbXBsSW1wbCh2aXNp
dG9yKTsgfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludC5oCShyZXZp
c2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3RhY2tNZXJn
aW5nQ29uc3RyYWludC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiBuYW1lc3Bh
Y2UgSlNDIHsKIAogY2xhc3MgSGVhcDsKK2NsYXNzIEFic3RyYWN0U2xvdFZpc2l0b3I7CiBjbGFz
cyBTbG90VmlzaXRvcjsKIAogY2xhc3MgTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQgZmluYWwg
OiBwdWJsaWMgTWFya2luZ0NvbnN0cmFpbnQgewpAQCAtNDAsNyArNDEsOSBAQCBwdWJsaWM6CiAg
ICAgZG91YmxlIHF1aWNrV29ya0VzdGltYXRlKFNsb3RWaXNpdG9yJikgZmluYWw7CiAgICAgCiBw
cml2YXRlOgotICAgIHZvaWQgcHJlcGFyZVRvRXhlY3V0ZUltcGwoY29uc3QgQWJzdHJhY3RMb2Nr
ZXImIGNvbnN0cmFpbnRTb2x2aW5nTG9ja2VyLCBTbG90VmlzaXRvciYpIGZpbmFsOworICAgIHZv
aWQgcHJlcGFyZVRvRXhlY3V0ZUltcGwoY29uc3QgQWJzdHJhY3RMb2NrZXImIGNvbnN0cmFpbnRT
b2x2aW5nTG9ja2VyLCBBYnN0cmFjdFNsb3RWaXNpdG9yJikgZmluYWw7CisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgVmlzaXRvcj4gQUxXQVlTX0lOTElORSB2b2lkIGV4ZWN1dGVJbXBsSW1wbChWaXNp
dG9yJik7CisgICAgdm9pZCBleGVjdXRlSW1wbChBYnN0cmFjdFNsb3RWaXNpdG9yJikgZmluYWw7
CiAgICAgdm9pZCBleGVjdXRlSW1wbChTbG90VmlzaXRvciYpIGZpbmFsOwogICAgIAogICAgIEhl
YXAmIG1faGVhcDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2Nr
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2su
aAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2Vk
QmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMjAwLDYgKzIwMCw3IEBAIHB1YmxpYzoKICAgICAg
ICAgCiAgICAgICAgIHZvaWQqIHN0YXJ0KCkgY29uc3QgeyByZXR1cm4gJm1fYmxvY2stPmF0b21z
KClbMF07IH0KICAgICAgICAgdm9pZCogZW5kKCkgY29uc3QgeyByZXR1cm4gJm1fYmxvY2stPmF0
b21zKClbbV9lbmRBdG9tXTsgfQorICAgICAgICB2b2lkKiBhdG9tQXQoc2l6ZV90IGkpIGNvbnN0
IHsgcmV0dXJuICZtX2Jsb2NrLT5hdG9tcygpW2ldOyB9CiAgICAgICAgIGJvb2wgY29udGFpbnMo
dm9pZCogcCkgY29uc3QgeyByZXR1cm4gc3RhcnQoKSA8PSBwICYmIHAgPCBlbmQoKTsgfQogCiAg
ICAgICAgIHZvaWQgZHVtcFN0YXRlKFByaW50U3RyZWFtJik7CkBAIC0yOTUsOSArMjk2LDEwIEBA
IHB1YmxpYzoKIAogICAgICAgICBCaXRtYXA8YXRvbXNQZXJCbG9jaz4gbV9tYXJrczsKICAgICAg
ICAgQml0bWFwPGF0b21zUGVyQmxvY2s+IG1fbmV3bHlBbGxvY2F0ZWQ7CisgICAgICAgIHZvaWQq
IG1fdmVyaWZpZXJNZW1vIHsgbnVsbHB0ciB9OwogICAgIH07CiAgICAgCi1wcml2YXRlOiAgICAK
K3ByaXZhdGU6CiAgICAgRm9vdGVyJiBmb290ZXIoKTsKICAgICBjb25zdCBGb290ZXImIGZvb3Rl
cigpIGNvbnN0OwogCkBAIC0zODQsNyArMzg2LDExIEBAIHB1YmxpYzoKICAgICAgICAgKmJpdHdp
c2VfY2FzdDx2b2xhdGlsZSB1aW50OF90Kj4oJmZvb3RlcigpKTsKICAgICB9CiAgICAgCisgICAg
dm9pZCBzZXRWZXJpZmllck1lbW8odm9pZCopOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IFQg
dmVyaWZpZXJNZW1vKCkgY29uc3Q7CisKICAgICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBvZmZz
ZXRPZkZvb3RlciA9IGVuZEF0b20gKiBhdG9tU2l6ZTsKKyAgICBzdGF0aWNfYXNzZXJ0KG9mZnNl
dE9mRm9vdGVyICsgc2l6ZW9mKEZvb3RlcikgPD0gYmxvY2tTaXplKTsKIAogcHJpdmF0ZToKICAg
ICBNYXJrZWRCbG9jayhWTSYsIEhhbmRsZSYpOwpAQCAtNjYwLDYgKzY2NiwxNyBAQCBpbmxpbmUg
dm9pZCBNYXJrZWRCbG9jazo6bm90ZU1hcmtlZCgpCiAgICAgICAgIG5vdGVNYXJrZWRTbG93KCk7
CiB9CiAKK2lubGluZSB2b2lkIE1hcmtlZEJsb2NrOjpzZXRWZXJpZmllck1lbW8odm9pZCogcCkK
K3sKKyAgICBmb290ZXIoKS5tX3ZlcmlmaWVyTWVtbyA9IHA7Cit9CisKK3RlbXBsYXRlPHR5cGVu
YW1lIFQ+CitUIE1hcmtlZEJsb2NrOjp2ZXJpZmllck1lbW8oKSBjb25zdAoreworICAgIHJldHVy
biBiaXR3aXNlX2Nhc3Q8VD4oZm9vdGVyKCkubV92ZXJpZmllck1lbW8pOworfQorCiB9IC8vIG5h
bWVzcGFjZSBKU0MKIAogbmFtZXNwYWNlIFdURiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9NYXJrZWRTcGFjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvTWFya2VkU3BhY2UuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRTcGFjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3Miw3
ICsyNzIsOCBAQCB2b2lkIE1hcmtlZFNwYWNlOjplbmFibGVQcmVjaXNlQWxsb2NhdGlvCiAgICAg
ICAgIG1fcHJlY2lzZUFsbG9jYXRpb25TZXQtPmFkZChhbGxvY2F0aW9uLT5jZWxsKCkpOwogfQog
Ci12b2lkIE1hcmtlZFNwYWNlOjp2aXNpdFdlYWtTZXRzKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQor
dGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgTWFya2VkU3BhY2U6OnZpc2l0V2Vha1Nl
dHMoVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBhdXRvIHZpc2l0ID0gWyZdIChXZWFrU2V0KiB3
ZWFrU2V0KSB7CiAgICAgICAgIHdlYWtTZXQtPnZpc2l0KHZpc2l0b3IpOwpAQCAtMjg0LDYgKzI4
NSw5IEBAIHZvaWQgTWFya2VkU3BhY2U6OnZpc2l0V2Vha1NldHMoU2xvdFZpc2kKICAgICAgICAg
bV9hY3RpdmVXZWFrU2V0cy5mb3JFYWNoKHZpc2l0KTsKIH0KIAordGVtcGxhdGUgdm9pZCBNYXJr
ZWRTcGFjZTo6dmlzaXRXZWFrU2V0cyhBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2
b2lkIE1hcmtlZFNwYWNlOjp2aXNpdFdlYWtTZXRzKFNsb3RWaXNpdG9yJik7CisKIHZvaWQgTWFy
a2VkU3BhY2U6OnJlYXBXZWFrU2V0cygpCiB7CiAgICAgYXV0byB2aXNpdCA9IFsmXSAoV2Vha1Nl
dCogd2Vha1NldCkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkU3Bh
Y2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRTcGFj
ZS5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJr
ZWRTcGFjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqICBDb3B5cmln
aHQgKEMpIDE5OTktMjAwMCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQogICogIENvcHly
aWdodCAoQykgMjAwMSBQZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQotICogIENvcHlyaWdodCAo
QykgMjAwMy0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmln
aHQgKEMpIDIwMDMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdl
bmVyYWwgUHVibGljCkBAIC0xMDUsNyArMTA1LDcgQEAgcHVibGljOgogICAgIAogICAgIHZvaWQg
cHJlcGFyZUZvckFsbG9jYXRpb24oKTsKIAotICAgIHZvaWQgdmlzaXRXZWFrU2V0cyhTbG90Vmlz
aXRvciYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgdmlzaXRXZWFrU2V0
cyhWaXNpdG9yJik7CiAgICAgdm9pZCByZWFwV2Vha1NldHMoKTsKIAogICAgIE1hcmtlZEJsb2Nr
U2V0JiBibG9ja3MoKSB7IHJldHVybiBtX2Jsb2NrczsgfQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50LmNwcAkocmV2aXNpb24gMjcyODMw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTUzLDYgKzUzLDcgQEAgdm9pZCBNYXJraW5nQ29uc3RyYWludDo6cmVzZXRT
dGF0cygpCiAKIHZvaWQgTWFya2luZ0NvbnN0cmFpbnQ6OmV4ZWN1dGUoU2xvdFZpc2l0b3ImIHZp
c2l0b3IpCiB7CisgICAgQVNTRVJUKCF2aXNpdG9yLmhlYXAoKS0+aXNNYXJraW5nRm9yR0NWZXJp
ZmllcigpKTsKICAgICBWaXNpdENvdW50ZXIgdmlzaXRDb3VudGVyKHZpc2l0b3IpOwogICAgIGV4
ZWN1dGVJbXBsKHZpc2l0b3IpOwogICAgIG1fbGFzdFZpc2l0Q291bnQgKz0gdmlzaXRDb3VudGVy
LnZpc2l0Q291bnQoKTsKQEAgLTYwLDYgKzYxLDEyIEBAIHZvaWQgTWFya2luZ0NvbnN0cmFpbnQ6
OmV4ZWN1dGUoU2xvdFZpc2kKICAgICAgICAgZGF0YUxvZygiKCIsIGFiYnJldmlhdGVkTmFtZSgp
LCAiIHZpc2l0ZWQgIiwgdmlzaXRDb3VudGVyLnZpc2l0Q291bnQoKSwgIiBpbiBleGVjdXRlKSIp
OwogfQogCit2b2lkIE1hcmtpbmdDb25zdHJhaW50OjpleGVjdXRlU3luY2hyb25vdXNseShBYnN0
cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIHByZXBhcmVUb0V4ZWN1dGVJbXBsKE5v
TG9ja2luZ05lY2Vzc2FyeSwgdmlzaXRvcik7CisgICAgZXhlY3V0ZUltcGwodmlzaXRvcik7Cit9
CisKIGRvdWJsZSBNYXJraW5nQ29uc3RyYWludDo6cXVpY2tXb3JrRXN0aW1hdGUoU2xvdFZpc2l0
b3ImKQogewogICAgIHJldHVybiAwOwpAQCAtNzIsNiArNzksNyBAQCBkb3VibGUgTWFya2luZ0Nv
bnN0cmFpbnQ6OndvcmtFc3RpbWF0ZShTCiAKIHZvaWQgTWFya2luZ0NvbnN0cmFpbnQ6OnByZXBh
cmVUb0V4ZWN1dGUoY29uc3QgQWJzdHJhY3RMb2NrZXImIGNvbnN0cmFpbnRTb2x2aW5nTG9ja2Vy
LCBTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKKyAgICBBU1NFUlQoIXZpc2l0b3IuaGVhcCgpLT5p
c01hcmtpbmdGb3JHQ1ZlcmlmaWVyKCkpOwogICAgIGRhdGFMb2dJZihPcHRpb25zOjpsb2dHQygp
LCBhYmJyZXZpYXRlZE5hbWUoKSk7CiAgICAgVmlzaXRDb3VudGVyIHZpc2l0Q291bnRlcih2aXNp
dG9yKTsKICAgICBwcmVwYXJlVG9FeGVjdXRlSW1wbChjb25zdHJhaW50U29sdmluZ0xvY2tlciwg
dmlzaXRvcik7CkBAIC04Miw2ICs5MCw3IEBAIHZvaWQgTWFya2luZ0NvbnN0cmFpbnQ6OnByZXBh
cmVUb0V4ZWN1dGUKIAogdm9pZCBNYXJraW5nQ29uc3RyYWludDo6ZG9QYXJhbGxlbFdvcmsoU2xv
dFZpc2l0b3ImIHZpc2l0b3IsIFNoYXJlZFRhc2s8dm9pZChTbG90VmlzaXRvciYpPiYgdGFzaykK
IHsKKyAgICBBU1NFUlQoIXZpc2l0b3IuaGVhcCgpLT5pc01hcmtpbmdGb3JHQ1ZlcmlmaWVyKCkp
OwogICAgIFZpc2l0Q291bnRlciB2aXNpdENvdW50ZXIodmlzaXRvcik7CiAgICAgdGFzay5ydW4o
dmlzaXRvcik7CiAgICAgaWYgKHZlcmJvc2VNYXJraW5nQ29uc3RyYWludCAmJiB2aXNpdENvdW50
ZXIudmlzaXRDb3VudCgpKQpAQCAtOTIsNyArMTAxLDcgQEAgdm9pZCBNYXJraW5nQ29uc3RyYWlu
dDo6ZG9QYXJhbGxlbFdvcmsoUwogICAgIH0KIH0KIAotdm9pZCBNYXJraW5nQ29uc3RyYWludDo6
cHJlcGFyZVRvRXhlY3V0ZUltcGwoY29uc3QgQWJzdHJhY3RMb2NrZXImLCBTbG90VmlzaXRvciYp
Cit2b2lkIE1hcmtpbmdDb25zdHJhaW50OjpwcmVwYXJlVG9FeGVjdXRlSW1wbChjb25zdCBBYnN0
cmFjdExvY2tlciYsIEFic3RyYWN0U2xvdFZpc2l0b3ImKQogewogfQogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50LmgJKHJldmlzaW9uIDI3
MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0y
MDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMzgsNiArMzgsNyBAQAogbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIE1h
cmtpbmdDb25zdHJhaW50U2V0OworY2xhc3MgQWJzdHJhY3RTbG90VmlzaXRvcjsKIGNsYXNzIFNs
b3RWaXNpdG9yOwogCiBjbGFzcyBNYXJraW5nQ29uc3RyYWludCB7CkBAIC02MCwxMSArNjEsMTMg
QEAgcHVibGljOgogICAgIAogICAgIHNpemVfdCBsYXN0VmlzaXRDb3VudCgpIGNvbnN0IHsgcmV0
dXJuIG1fbGFzdFZpc2l0Q291bnQ7IH0KICAgICAKKyAgICAvLyBUaGUgZm9sbG93aW5nIGZ1bmN0
aW9ucyBhcmUgb25seSB1c2VkIGJ5IHRoZSByZWFsIEdDIHZpYSB0aGUgTWFya2luZ0NvbnN0cmFp
bnRTb2x2ZXIuCisgICAgLy8gSGVuY2UsIHdlIG9ubHkgbmVlZCB0aGUgU2xvdFZpc2l0b3IgdmVy
c2lvbi4KICAgICB2b2lkIGV4ZWN1dGUoU2xvdFZpc2l0b3ImKTsKKworICAgIEpTX0VYUE9SVF9Q
UklWQVRFIHZpcnR1YWwgZG91YmxlIHF1aWNrV29ya0VzdGltYXRlKFNsb3RWaXNpdG9yJik7CiAg
ICAgCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgdmlydHVhbCBkb3VibGUgcXVpY2tXb3JrRXN0aW1h
dGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpOwotICAgIAotICAgIGRvdWJsZSB3b3JrRXN0aW1hdGUo
U2xvdFZpc2l0b3ImIHZpc2l0b3IpOworICAgIGRvdWJsZSB3b3JrRXN0aW1hdGUoU2xvdFZpc2l0
b3ImKTsKICAgICAKICAgICB2b2lkIHByZXBhcmVUb0V4ZWN1dGUoY29uc3QgQWJzdHJhY3RMb2Nr
ZXImIGNvbnN0cmFpbnRTb2x2aW5nTG9ja2VyLCBTbG90VmlzaXRvciYpOwogICAgIApAQCAtNzYs
OSArNzksMTQgQEAgcHVibGljOgogICAgIENvbnN0cmFpbnRQYXJhbGxlbGlzbSBwYXJhbGxlbGlz
bSgpIGNvbnN0IHsgcmV0dXJuIG1fcGFyYWxsZWxpc207IH0KIAogcHJvdGVjdGVkOgorICAgIHZp
cnR1YWwgdm9pZCBleGVjdXRlSW1wbChBYnN0cmFjdFNsb3RWaXNpdG9yJikgPSAwOwogICAgIHZp
cnR1YWwgdm9pZCBleGVjdXRlSW1wbChTbG90VmlzaXRvciYpID0gMDsKLSAgICBKU19FWFBPUlRf
UFJJVkFURSB2aXJ0dWFsIHZvaWQgcHJlcGFyZVRvRXhlY3V0ZUltcGwoY29uc3QgQWJzdHJhY3RM
b2NrZXImIGNvbnN0cmFpbnRTb2x2aW5nTG9ja2VyLCBTbG90VmlzaXRvciYpOwotICAgIAorICAg
IEpTX0VYUE9SVF9QUklWQVRFIHZpcnR1YWwgdm9pZCBwcmVwYXJlVG9FeGVjdXRlSW1wbChjb25z
dCBBYnN0cmFjdExvY2tlciYgY29uc3RyYWludFNvbHZpbmdMb2NrZXIsIEFic3RyYWN0U2xvdFZp
c2l0b3ImKTsKKworICAgIC8vIFRoaXMgZnVuY3Rpb24gaXMgb25seSB1c2VkIGJ5IHRoZSB2ZXJp
ZmllciBHQyB2aWEgSGVhcDo6dmVyaWZ5R0MoKS4KKyAgICAvLyBIZW5jZSwgd2Ugb25seSBuZWVk
IHRoZSBBYnN0cmFjdFNsb3RWaXNpdG9yIHZlcnNpb24uCisgICAgdm9pZCBleGVjdXRlU3luY2hy
b25vdXNseShBYnN0cmFjdFNsb3RWaXNpdG9yJik7CisKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNs
YXNzIE1hcmtpbmdDb25zdHJhaW50U2V0OyAvLyBTbyBpdCBjYW4gc2V0IG1faW5kZXguCiAgICAg
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludEV4ZWN1
dG9yUGFpci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtp
bmdDb25zdHJhaW50RXhlY3V0b3JQYWlyLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnRFeGVjdXRvclBhaXIuaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDU0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNs
dWRlIDx3dGYvRnVuY3Rpb24uaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEFic3RyYWN0
U2xvdFZpc2l0b3I7CitjbGFzcyBTbG90VmlzaXRvcjsKKworc3RydWN0IE1hcmtpbmdDb25zdHJh
aW50RXhlY3V0b3JQYWlyIHsKKyAgICBNYXJraW5nQ29uc3RyYWludEV4ZWN1dG9yUGFpcigKKyAg
ICAgICAgOjpGdW5jdGlvbjx2b2lkKEFic3RyYWN0U2xvdFZpc2l0b3ImKT4gYWJzdHJhY3RTbG90
VmlzaXRvckZ1bmMsCisgICAgICAgIDo6RnVuY3Rpb248dm9pZChTbG90VmlzaXRvciYpPiBzbG90
VmlzaXRvckZ1bmMpCisgICAgICAgIDogYWJzdHJhY3RTbG90VmlzaXRvckZ1bmMoV1RGTW92ZShh
YnN0cmFjdFNsb3RWaXNpdG9yRnVuYykpCisgICAgICAgICwgc2xvdFZpc2l0b3JGdW5jKFdURk1v
dmUoc2xvdFZpc2l0b3JGdW5jKSkKKyAgICB7IH0KKyAgICBNYXJraW5nQ29uc3RyYWludEV4ZWN1
dG9yUGFpcihNYXJraW5nQ29uc3RyYWludEV4ZWN1dG9yUGFpciYmKSA9IGRlZmF1bHQ7CisKKyAg
ICB2b2lkIGV4ZWN1dGUoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikgeyBhYnN0cmFjdFNs
b3RWaXNpdG9yRnVuYyh2aXNpdG9yKTsgfQorICAgIHZvaWQgZXhlY3V0ZShTbG90VmlzaXRvciYg
dmlzaXRvcikgeyBzbG90VmlzaXRvckZ1bmModmlzaXRvcik7IH0KKworICAgIDo6RnVuY3Rpb248
dm9pZChBYnN0cmFjdFNsb3RWaXNpdG9yJik+IGFic3RyYWN0U2xvdFZpc2l0b3JGdW5jOworICAg
IDo6RnVuY3Rpb248dm9pZChTbG90VmlzaXRvciYpPiBzbG90VmlzaXRvckZ1bmM7Cit9OworCisj
ZGVmaW5lIE1BS0VfTUFSS0lOR19DT05TVFJBSU5UX0VYRUNVVE9SX1BBSVIobGFtYmRhKSBcCisg
ICAgTWFya2luZ0NvbnN0cmFpbnRFeGVjdXRvclBhaXIoKGxhbWJkYSksIChsYW1iZGEpKQorCit9
IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtp
bmdDb25zdHJhaW50U2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9NYXJraW5nQ29uc3RyYWludFNldC5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50U2V0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC02Myw5ICs2Myw5IEBAIHZvaWQgTWFya2luZ0NvbnN0cmFpbnRTZXQ6OmRpZFN0YXJ0TWFy
a2kKICAgICBtX2l0ZXJhdGlvbiA9IDE7CiB9CiAKLXZvaWQgTWFya2luZ0NvbnN0cmFpbnRTZXQ6
OmFkZChDU3RyaW5nIGFiYnJldmlhdGVkTmFtZSwgQ1N0cmluZyBuYW1lLCA6OkZ1bmN0aW9uPHZv
aWQoU2xvdFZpc2l0b3ImKT4gZnVuY3Rpb24sIENvbnN0cmFpbnRWb2xhdGlsaXR5IHZvbGF0aWxp
dHksIENvbnN0cmFpbnRDb25jdXJyZW5jeSBjb25jdXJyZW5jeSwgQ29uc3RyYWludFBhcmFsbGVs
aXNtIHBhcmFsbGVsaXNtKQordm9pZCBNYXJraW5nQ29uc3RyYWludFNldDo6YWRkKENTdHJpbmcg
YWJicmV2aWF0ZWROYW1lLCBDU3RyaW5nIG5hbWUsIE1hcmtpbmdDb25zdHJhaW50RXhlY3V0b3JQ
YWlyJiYgZXhlY3V0b3JzLCBDb25zdHJhaW50Vm9sYXRpbGl0eSB2b2xhdGlsaXR5LCBDb25zdHJh
aW50Q29uY3VycmVuY3kgY29uY3VycmVuY3ksIENvbnN0cmFpbnRQYXJhbGxlbGlzbSBwYXJhbGxl
bGlzbSkKIHsKLSAgICBhZGQobWFrZVVuaXF1ZTxTaW1wbGVNYXJraW5nQ29uc3RyYWludD4oV1RG
TW92ZShhYmJyZXZpYXRlZE5hbWUpLCBXVEZNb3ZlKG5hbWUpLCBXVEZNb3ZlKGZ1bmN0aW9uKSwg
dm9sYXRpbGl0eSwgY29uY3VycmVuY3ksIHBhcmFsbGVsaXNtKSk7CisgICAgYWRkKG1ha2VVbmlx
dWU8U2ltcGxlTWFya2luZ0NvbnN0cmFpbnQ+KFdURk1vdmUoYWJicmV2aWF0ZWROYW1lKSwgV1RG
TW92ZShuYW1lKSwgV1RGTW92ZShleGVjdXRvcnMpLCB2b2xhdGlsaXR5LCBjb25jdXJyZW5jeSwg
cGFyYWxsZWxpc20pKTsKIH0KIAogdm9pZCBNYXJraW5nQ29uc3RyYWludFNldDo6YWRkKApAQCAt
MTY2LDEwICsxNjYsMTAgQEAgYm9vbCBNYXJraW5nQ29uc3RyYWludFNldDo6ZXhlY3V0ZUNvbnZl
cgogICAgIHJldHVybiAhc29sdmVyLmRpZFZpc2l0U29tZXRoaW5nKCk7CiB9CiAKLXZvaWQgTWFy
a2luZ0NvbnN0cmFpbnRTZXQ6OmV4ZWN1dGVBbGwoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2b2lk
IE1hcmtpbmdDb25zdHJhaW50U2V0OjpleGVjdXRlQWxsU3luY2hyb25vdXNseShBYnN0cmFjdFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGZvciAoYXV0byYgY29uc3RyYWludCA6IG1fc2V0
KQotICAgICAgICBjb25zdHJhaW50LT5leGVjdXRlKHZpc2l0b3IpOworICAgICAgICBjb25zdHJh
aW50LT5leGVjdXRlU3luY2hyb25vdXNseSh2aXNpdG9yKTsKICAgICBkYXRhTG9nSWYoT3B0aW9u
czo6bG9nR0MoKSwgIiAiKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
TWFya2luZ0NvbnN0cmFpbnRTZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9NYXJraW5nQ29uc3RyYWludFNldC5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludFNldC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTI2LDYgKzI2LDcgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiTWFya2luZ0NvbnN0
cmFpbnQuaCIKKyNpbmNsdWRlICJNYXJraW5nQ29uc3RyYWludEV4ZWN1dG9yUGFpci5oIgogI2lu
Y2x1ZGUgPHd0Zi9CaXRWZWN0b3IuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKQEAgLTQ2
LDIyICs0NywyNSBAQCBwdWJsaWM6CiAgICAgdm9pZCBhZGQoCiAgICAgICAgIENTdHJpbmcgYWJi
cmV2aWF0ZWROYW1lLAogICAgICAgICBDU3RyaW5nIG5hbWUsCi0gICAgICAgIDo6RnVuY3Rpb248
dm9pZChTbG90VmlzaXRvciYpPiwKKyAgICAgICAgTWFya2luZ0NvbnN0cmFpbnRFeGVjdXRvclBh
aXImJiwKICAgICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHksCiAgICAgICAgIENvbnN0cmFpbnRD
b25jdXJyZW5jeSA9IENvbnN0cmFpbnRDb25jdXJyZW5jeTo6Q29uY3VycmVudCwKICAgICAgICAg
Q29uc3RyYWludFBhcmFsbGVsaXNtID0gQ29uc3RyYWludFBhcmFsbGVsaXNtOjpTZXF1ZW50aWFs
KTsKICAgICAKICAgICB2b2lkIGFkZCgKICAgICAgICAgQ1N0cmluZyBhYmJyZXZpYXRlZE5hbWUs
IENTdHJpbmcgbmFtZSwKLSAgICAgICAgOjpGdW5jdGlvbjx2b2lkKFNsb3RWaXNpdG9yJik+IGZ1
bmMsCisgICAgICAgIE1hcmtpbmdDb25zdHJhaW50RXhlY3V0b3JQYWlyJiYgZXhlY3V0b3JzLAog
ICAgICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eSB2b2xhdGlsaXR5LAogICAgICAgICBDb25zdHJh
aW50UGFyYWxsZWxpc20gcGFyYWxsZWxpc20pCiAgICAgewotICAgICAgICBhZGQoYWJicmV2aWF0
ZWROYW1lLCBuYW1lLCBXVEZNb3ZlKGZ1bmMpLCB2b2xhdGlsaXR5LCBDb25zdHJhaW50Q29uY3Vy
cmVuY3k6OkNvbmN1cnJlbnQsIHBhcmFsbGVsaXNtKTsKKyAgICAgICAgYWRkKGFiYnJldmlhdGVk
TmFtZSwgbmFtZSwgV1RGTW92ZShleGVjdXRvcnMpLCB2b2xhdGlsaXR5LCBDb25zdHJhaW50Q29u
Y3VycmVuY3k6OkNvbmN1cnJlbnQsIHBhcmFsbGVsaXNtKTsKICAgICB9CiAgICAgCiAgICAgdm9p
ZCBhZGQoc3RkOjp1bmlxdWVfcHRyPE1hcmtpbmdDb25zdHJhaW50Pik7Ci0gICAgCisKKyAgICAv
LyBUaGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBhcmUgb25seSB1c2VkIGJ5IHRoZSByZWFsIEdDIHZp
YSB0aGUgTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXIuCisgICAgLy8gSGVuY2UsIHdlIG9ubHkgbmVl
ZCB0aGUgU2xvdFZpc2l0b3IgdmVyc2lvbi4KKwogICAgIC8vIEFzc3VtaW5nIHRoYXQgdGhlIG1h
cmsgc3RhY2tzIGFyZSBhbGwgZW1wdHksIHRoaXMgd2lsbCBnaXZlIHlvdSBhIGd1ZXNzIGFzIHRv
IHdoZXRoZXIgb3IKICAgICAvLyBub3QgdGhlIHdhdmVmcm9udCBpcyBhZHZhbmNpbmcuCiAgICAg
Ym9vbCBpc1dhdmVmcm9udEFkdmFuY2luZyhTbG90VmlzaXRvciYpOwpAQCAtNzAsMTMgKzc0LDE2
IEBAIHB1YmxpYzoKICAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhpcyBleGVjdXRlZCBhbGwgY29u
c3RyYWludHMgYW5kIG5vbmUgb2YgdGhlbSBwcm9kdWNlZCBuZXcgd29yay4gVGhpcwogICAgIC8v
IGFzc3VtZXMgdGhhdCB5b3UndmUgYWxyYWVkeSB2aXNpdGVkIHJvb3RzIGFuZCBkcmFpbmVkIGZy
b20gdGhlcmUuCiAgICAgYm9vbCBleGVjdXRlQ29udmVyZ2VuY2UoU2xvdFZpc2l0b3ImKTsKLSAg
ICAKKworICAgIC8vIFRoaXMgZnVuY3Rpb24gaXMgb25seSB1c2VkIGJ5IHRoZSB2ZXJpZmllciBH
QyB2aWEgSGVhcDo6dmVyaWZ5R0MoKS4KKyAgICAvLyBIZW5jZSwgd2Ugb25seSBuZWVkIHRoZSBB
YnN0cmFjdFNsb3RWaXNpdG9yIHZlcnNpb24uCisKICAgICAvLyBTaW1wbHkgcnVucyBhbGwgY29u
c3RyYWludHMgd2l0aG91dCBhbnkgc2hlbmFuaWdhbnMuCi0gICAgdm9pZCBleGVjdXRlQWxsKFNs
b3RWaXNpdG9yJik7Ci0gICAgCisgICAgdm9pZCBleGVjdXRlQWxsU3luY2hyb25vdXNseShBYnN0
cmFjdFNsb3RWaXNpdG9yJik7CisKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIE1hcmtpbmdD
b25zdHJhaW50U29sdmVyOwotICAgIAorCiAgICAgYm9vbCBleGVjdXRlQ29udmVyZ2VuY2VJbXBs
KFNsb3RWaXNpdG9yJik7CiAgICAgCiAgICAgSGVhcCYgbV9oZWFwOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50U29sdmVyLmNw
cAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2lu
Z0NvbnN0cmFpbnRTb2x2ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50U29sdmVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXIuaAkocmV2aXNpb24g
MjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnRT
b2x2ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TaW1w
bGVNYXJraW5nQ29uc3RyYWludC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQuY3BwCShyZXZpc2lvbiAyNzI4MzApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TaW1wbGVNYXJraW5nQ29uc3RyYWludC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0y
MDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMzAsMTEgKzMwLDExIEBAIG5hbWVzcGFjZSBKU0MgewogCiBTaW1wbGVN
YXJraW5nQ29uc3RyYWludDo6U2ltcGxlTWFya2luZ0NvbnN0cmFpbnQoCiAgICAgQ1N0cmluZyBh
YmJyZXZpYXRlZE5hbWUsIENTdHJpbmcgbmFtZSwKLSAgICA6OkZ1bmN0aW9uPHZvaWQoU2xvdFZp
c2l0b3ImKT4gZXhlY3V0ZUZ1bmN0aW9uLAorICAgIE1hcmtpbmdDb25zdHJhaW50RXhlY3V0b3JQ
YWlyJiYgZXhlY3V0b3JzLAogICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5IHZvbGF0aWxpdHksIENv
bnN0cmFpbnRDb25jdXJyZW5jeSBjb25jdXJyZW5jeSwKICAgICBDb25zdHJhaW50UGFyYWxsZWxp
c20gcGFyYWxsZWxpc20pCiAgICAgOiBNYXJraW5nQ29uc3RyYWludChXVEZNb3ZlKGFiYnJldmlh
dGVkTmFtZSksIFdURk1vdmUobmFtZSksIHZvbGF0aWxpdHksIGNvbmN1cnJlbmN5LCBwYXJhbGxl
bGlzbSkKLSAgICAsIG1fZXhlY3V0ZUZ1bmN0aW9uKFdURk1vdmUoZXhlY3V0ZUZ1bmN0aW9uKSkK
KyAgICAsIG1fZXhlY3V0b3JzKFdURk1vdmUoZXhlY3V0b3JzKSkKIHsKIH0KIApAQCAtNDIsMTAg
KzQyLDE0IEBAIFNpbXBsZU1hcmtpbmdDb25zdHJhaW50Ojp+U2ltcGxlTWFya2luZ0MKIHsKIH0K
IAotdm9pZCBTaW1wbGVNYXJraW5nQ29uc3RyYWludDo6ZXhlY3V0ZUltcGwoU2xvdFZpc2l0b3Im
IHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBTaW1wbGVNYXJraW5n
Q29uc3RyYWludDo6ZXhlY3V0ZUltcGxJbXBsKFZpc2l0b3ImIHZpc2l0b3IpCiB7Ci0gICAgbV9l
eGVjdXRlRnVuY3Rpb24odmlzaXRvcik7CisgICAgbV9leGVjdXRvcnMuZXhlY3V0ZSh2aXNpdG9y
KTsKIH0KIAordm9pZCBTaW1wbGVNYXJraW5nQ29uc3RyYWludDo6ZXhlY3V0ZUltcGwoQWJzdHJh
Y3RTbG90VmlzaXRvciYgdmlzaXRvcikgeyBleGVjdXRlSW1wbEltcGwodmlzaXRvcik7IH0KK3Zv
aWQgU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQ6OmV4ZWN1dGVJbXBsKFNsb3RWaXNpdG9yJiB2aXNp
dG9yKSB7IGV4ZWN1dGVJbXBsSW1wbCh2aXNpdG9yKTsgfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MK
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2ltcGxlTWFya2luZ0NvbnN0cmFp
bnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TaW1wbGVNYXJr
aW5nQ29uc3RyYWludC5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9TaW1wbGVNYXJraW5nQ29uc3RyYWludC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2LDcgKzI2
LDcgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiTWFya2luZ0NvbnN0cmFpbnQuaCIKLSNp
bmNsdWRlIDx3dGYvRnVuY3Rpb24uaD4KKyNpbmNsdWRlICJNYXJraW5nQ29uc3RyYWludEV4ZWN1
dG9yUGFpci5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIApAQCAtMzcsMjYgKzM3LDI4IEBAIGNsYXNz
IFNpbXBsZU1hcmtpbmdDb25zdHJhaW50IGZpbmFsIDogcHUKIHB1YmxpYzoKICAgICBKU19FWFBP
UlRfUFJJVkFURSBTaW1wbGVNYXJraW5nQ29uc3RyYWludCgKICAgICAgICAgQ1N0cmluZyBhYmJy
ZXZpYXRlZE5hbWUsIENTdHJpbmcgbmFtZSwKLSAgICAgICAgOjpGdW5jdGlvbjx2b2lkKFNsb3RW
aXNpdG9yJik+LAorICAgICAgICBNYXJraW5nQ29uc3RyYWludEV4ZWN1dG9yUGFpciYmLAogICAg
ICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eSwKICAgICAgICAgQ29uc3RyYWludENvbmN1cnJlbmN5
ID0gQ29uc3RyYWludENvbmN1cnJlbmN5OjpDb25jdXJyZW50LAogICAgICAgICBDb25zdHJhaW50
UGFyYWxsZWxpc20gPSBDb25zdHJhaW50UGFyYWxsZWxpc206OlNlcXVlbnRpYWwpOwogICAgIAog
ICAgIFNpbXBsZU1hcmtpbmdDb25zdHJhaW50KAogICAgICAgICBDU3RyaW5nIGFiYnJldmlhdGVk
TmFtZSwgQ1N0cmluZyBuYW1lLAotICAgICAgICA6OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3Im
KT4gZnVuYywKKyAgICAgICAgTWFya2luZ0NvbnN0cmFpbnRFeGVjdXRvclBhaXImJiBleGVjdXRv
cnMsCiAgICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5IHZvbGF0aWxpdHksCiAgICAgICAgIENv
bnN0cmFpbnRQYXJhbGxlbGlzbSBwYXJhbGxlbGlzbSkKLSAgICAgICAgOiBTaW1wbGVNYXJraW5n
Q29uc3RyYWludChhYmJyZXZpYXRlZE5hbWUsIG5hbWUsIFdURk1vdmUoZnVuYyksIHZvbGF0aWxp
dHksIENvbnN0cmFpbnRDb25jdXJyZW5jeTo6Q29uY3VycmVudCwgcGFyYWxsZWxpc20pCisgICAg
ICAgIDogU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQoYWJicmV2aWF0ZWROYW1lLCBuYW1lLCBXVEZN
b3ZlKGV4ZWN1dG9ycyksIHZvbGF0aWxpdHksIENvbnN0cmFpbnRDb25jdXJyZW5jeTo6Q29uY3Vy
cmVudCwgcGFyYWxsZWxpc20pCiAgICAgewogICAgIH0KICAgICAKICAgICBKU19FWFBPUlRfUFJJ
VkFURSB+U2ltcGxlTWFya2luZ0NvbnN0cmFpbnQoKSBmaW5hbDsKICAgICAKIHByaXZhdGU6Cisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gQUxXQVlTX0lOTElORSB2b2lkIGV4ZWN1dGVJ
bXBsSW1wbChWaXNpdG9yJik7CisgICAgdm9pZCBleGVjdXRlSW1wbChBYnN0cmFjdFNsb3RWaXNp
dG9yJikgZmluYWw7CiAgICAgdm9pZCBleGVjdXRlSW1wbChTbG90VmlzaXRvciYpIGZpbmFsOwog
Ci0gICAgOjpGdW5jdGlvbjx2b2lkKFNsb3RWaXNpdG9yJik+IG1fZXhlY3V0ZUZ1bmN0aW9uOwor
ICAgIE1hcmtpbmdDb25zdHJhaW50RXhlY3V0b3JQYWlyIG1fZXhlY3V0b3JzOwogfTsKIAogfSAv
LyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90Vmlz
aXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZp
c2l0b3IuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9TbG90VmlzaXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDEyLTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03NywxNSArNzcsMTAgQEAgc3Rh
dGljIHZvaWQgdmFsaWRhdGUoSlNDZWxsKiBjZWxsKQogI2VuZGlmCiAKIFNsb3RWaXNpdG9yOjpT
bG90VmlzaXRvcihIZWFwJiBoZWFwLCBDU3RyaW5nIGNvZGVOYW1lKQotICAgIDogbV9ieXRlc1Zp
c2l0ZWQoMCkKLSAgICAsIG1fdmlzaXRDb3VudCgwKQotICAgICwgbV9pc0luUGFyYWxsZWxNb2Rl
KGZhbHNlKQorICAgIDogQmFzZShoZWFwLCBjb2RlTmFtZSwgaGVhcC5tX29wYXF1ZVJvb3RzKQog
ICAgICwgbV9tYXJraW5nVmVyc2lvbihNYXJrZWRTcGFjZTo6aW5pdGlhbFZlcnNpb24pCi0gICAg
LCBtX2hlYXAoaGVhcCkKLSAgICAsIG1fY29kZU5hbWUoY29kZU5hbWUpCiAjaWYgQVNTRVJUX0VO
QUJMRUQKICAgICAsIG1faXNDaGVja2luZ0ZvckRlZmF1bHRNYXJrVmlvbGF0aW9uKGZhbHNlKQot
ICAgICwgbV9pc0RyYWluaW5nKGZhbHNlKQogI2VuZGlmCiB7CiB9CkBAIC0xMTcsOCArMTEyLDgg
QEAgdm9pZCBTbG90VmlzaXRvcjo6ZGlkU3RhcnRNYXJraW5nKCkKIAogdm9pZCBTbG90VmlzaXRv
cjo6cmVzZXQoKQogeworICAgIEFic3RyYWN0U2xvdFZpc2l0b3I6OnJlc2V0KCk7CiAgICAgbV9i
eXRlc1Zpc2l0ZWQgPSAwOwotICAgIG1fdmlzaXRDb3VudCA9IDA7CiAgICAgbV9oZWFwQW5hbHl6
ZXIgPSBudWxscHRyOwogICAgIFJFTEVBU0VfQVNTRVJUKCFtX2N1cnJlbnRDZWxsKTsKIH0KQEAg
LTIzMCw3ICsyMjUsNyBAQCB2b2lkIFNsb3RWaXNpdG9yOjphcHBlbmRKU0NlbGxPckF1eGlsaWFy
CiB2b2lkIFNsb3RWaXNpdG9yOjphcHBlbmRTbG93KEpTQ2VsbCogY2VsbCwgRGVwZW5kZW5jeSBk
ZXBlbmRlbmN5KQogewogICAgIGlmIChVTkxJS0VMWShtX2hlYXBBbmFseXplcikpCi0gICAgICAg
IG1faGVhcEFuYWx5emVyLT5hbmFseXplRWRnZShtX2N1cnJlbnRDZWxsLCBjZWxsLCBtX3Jvb3RN
YXJrUmVhc29uKTsKKyAgICAgICAgbV9oZWFwQW5hbHl6ZXItPmFuYWx5emVFZGdlKG1fY3VycmVu
dENlbGwsIGNlbGwsIHJvb3RNYXJrUmVhc29uKCkpOwogCiAgICAgYXBwZW5kSGlkZGVuU2xvd0lt
cGwoY2VsbCwgZGVwZW5kZW5jeSk7CiB9CkBAIC04MDcsMTIgKzgwMiwxNyBAQCBNYXJrU3RhY2tB
cnJheSYgU2xvdFZpc2l0b3I6OmNvcnJlc3BvbmRpCiAgICAgcmV0dXJuICptX2hlYXAubV9zaGFy
ZWRNdXRhdG9yTWFya1N0YWNrOwogfQogCitOT19SRVRVUk5fRFVFX1RPX0NSQVNIIHZvaWQgU2xv
dFZpc2l0b3I6OmFkZFBhcmFsbGVsQ29uc3RyYWludFRhc2soUmVmUHRyPFNoYXJlZFRhc2s8dm9p
ZChBYnN0cmFjdFNsb3RWaXNpdG9yJik+PikKK3sKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOworfQorCiB2b2lkIFNsb3RWaXNpdG9yOjphZGRQYXJhbGxlbENvbnN0cmFpbnRUYXNr
KFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoU2xvdFZpc2l0b3ImKT4+IHRhc2spCiB7CiAgICAgUkVM
RUFTRV9BU1NFUlQobV9jdXJyZW50U29sdmVyKTsKICAgICBSRUxFQVNFX0FTU0VSVChtX2N1cnJl
bnRDb25zdHJhaW50KTsKICAgICBSRUxFQVNFX0FTU0VSVCh0YXNrKTsKLSAgICAKKwogICAgIG1f
Y3VycmVudFNvbHZlci0+YWRkUGFyYWxsZWxUYXNrKHRhc2ssICptX2N1cnJlbnRDb25zdHJhaW50
KTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5oCShy
ZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRv
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw1OSArMjUsNzYgQEAKIAogI3ByYWdtYSBvbmNlCiAK
KyNpbmNsdWRlICJBYnN0cmFjdFNsb3RWaXNpdG9yLmgiCiAjaW5jbHVkZSAiSGFuZGxlVHlwZXMu
aCIKICNpbmNsdWRlICJJdGVyYXRpb25TdGF0dXMuaCIKLSNpbmNsdWRlICJNYXJrU3RhY2suaCIK
LSNpbmNsdWRlICJSb290TWFya1JlYXNvbi5oIgotI2luY2x1ZGUgIlZpc2l0UmFjZUtleS5oIgog
I2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL01vbm90b25pY1RpbWUuaD4K
LSNpbmNsdWRlIDx3dGYvU2hhcmVkVGFzay5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcu
aD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKLWNsYXNzIENvbnNlcnZhdGl2ZVJvb3RzOwogY2xhc3Mg
R0NUaHJlYWRTaGFyZWREYXRhOwotY2xhc3MgSGVhcDsKIGNsYXNzIEhlYXBDZWxsOwogY2xhc3Mg
SGVhcEFuYWx5emVyOwotY2xhc3MgTWFya2VkQmxvY2s7CiBjbGFzcyBNYXJraW5nQ29uc3RyYWlu
dDsKIGNsYXNzIE1hcmtpbmdDb25zdHJhaW50U29sdmVyOwotdGVtcGxhdGU8dHlwZW5hbWUgVD4g
Y2xhc3MgV2VhazsKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFRyYWl0cz4gY2xhc3Mg
V3JpdGVCYXJyaWVyQmFzZTsKIAogdHlwZWRlZiB1aW50MzJfdCBIZWFwVmVyc2lvbjsKIAotY2xh
c3MgU2xvdFZpc2l0b3IgeworY2xhc3MgU2xvdFZpc2l0b3IgZmluYWwgOiBwdWJsaWMgQWJzdHJh
Y3RTbG90VmlzaXRvciB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU2xvdFZpc2l0b3IpOwog
ICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogCisgICAgdXNpbmcgQmFzZSA9IEFic3RyYWN0
U2xvdFZpc2l0b3I7CisKICAgICBmcmllbmQgY2xhc3MgU2V0Q3VycmVudENlbGxTY29wZTsKICAg
ICBmcmllbmQgY2xhc3MgSGVhcDsKIAogcHVibGljOgorICAgIGNsYXNzIENvbnRleHQgeworICAg
IHB1YmxpYzoKKyAgICAgICAgQUxXQVlTX0lOTElORSBDb250ZXh0KEFic3RyYWN0U2xvdFZpc2l0
b3ImLCBIZWFwQ2VsbCopIHsgfQorICAgIH07CisKKyAgICBjbGFzcyBTdXBwcmVzc0dDVmVyaWZp
ZXJTY29wZSB7CisgICAgcHVibGljOgorICAgICAgICBTdXBwcmVzc0dDVmVyaWZpZXJTY29wZShT
bG90VmlzaXRvciYpIHsgfQorICAgIH07CisKKyAgICBjbGFzcyBEZWZhdWx0TWFya2luZ1Zpb2xh
dGlvbkFzc2VydGlvblNjb3BlIHsKKyAgICBwdWJsaWM6CisjaWYgQVNTRVJUX0VOQUJMRUQKKyAg
ICAgICAgRGVmYXVsdE1hcmtpbmdWaW9sYXRpb25Bc3NlcnRpb25TY29wZShTbG90VmlzaXRvciYg
dmlzaXRvcikKKyAgICAgICAgICAgIDogbV92aXNpdG9yKHZpc2l0b3IpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIG1fd2FzQ2hlY2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlvbiA9IG1fdmlzaXRv
ci5tX2lzQ2hlY2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlvbjsKKyAgICAgICAgICAgIG1fdmlz
aXRvci5tX2lzQ2hlY2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlvbiA9IGZhbHNlOworICAgICAg
ICB9CisKKyAgICAgICAgfkRlZmF1bHRNYXJraW5nVmlvbGF0aW9uQXNzZXJ0aW9uU2NvcGUoKQor
ICAgICAgICB7CisgICAgICAgICAgICBtX3Zpc2l0b3IubV9pc0NoZWNraW5nRm9yRGVmYXVsdE1h
cmtWaW9sYXRpb24gPSBtX3dhc0NoZWNraW5nRm9yRGVmYXVsdE1hcmtWaW9sYXRpb247CisgICAg
ICAgIH0KKworICAgIHByaXZhdGU6CisgICAgICAgIFNsb3RWaXNpdG9yJiBtX3Zpc2l0b3I7Cisg
ICAgICAgIGJvb2wgbV93YXNDaGVja2luZ0ZvckRlZmF1bHRNYXJrVmlvbGF0aW9uOworI2Vsc2UK
KyAgICAgICAgRGVmYXVsdE1hcmtpbmdWaW9sYXRpb25Bc3NlcnRpb25TY29wZShTbG90VmlzaXRv
ciYpIHsgfQorI2VuZGlmCisgICAgfTsKKwogICAgIFNsb3RWaXNpdG9yKEhlYXAmLCBDU3RyaW5n
IGNvZGVOYW1lKTsKICAgICB+U2xvdFZpc2l0b3IoKTsKIAotICAgIE1hcmtTdGFja0FycmF5JiBj
b2xsZWN0b3JNYXJrU3RhY2soKSB7IHJldHVybiBtX2NvbGxlY3RvclN0YWNrOyB9Ci0gICAgTWFy
a1N0YWNrQXJyYXkmIG11dGF0b3JNYXJrU3RhY2soKSB7IHJldHVybiBtX211dGF0b3JTdGFjazsg
fQotICAgIGNvbnN0IE1hcmtTdGFja0FycmF5JiBjb2xsZWN0b3JNYXJrU3RhY2soKSBjb25zdCB7
IHJldHVybiBtX2NvbGxlY3RvclN0YWNrOyB9Ci0gICAgY29uc3QgTWFya1N0YWNrQXJyYXkmIG11
dGF0b3JNYXJrU3RhY2soKSBjb25zdCB7IHJldHVybiBtX211dGF0b3JTdGFjazsgfQotICAgIAot
ICAgIFZNJiB2bSgpOwotICAgIGNvbnN0IFZNJiB2bSgpIGNvbnN0OwotICAgIEhlYXAqIGhlYXAo
KSBjb25zdDsKKyAgICB2b2lkIGFwcGVuZChjb25zdCBDb25zZXJ2YXRpdmVSb290cyYpIGZpbmFs
OwogCi0gICAgdm9pZCBhcHBlbmQoY29uc3QgQ29uc2VydmF0aXZlUm9vdHMmKTsKLSAgICAKICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBUcmFpdHM+IHZvaWQgYXBwZW5kKGNvbnN0
IFdyaXRlQmFycmllckJhc2U8VCwgVHJhaXRzPiYpOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQs
IHR5cGVuYW1lIFRyYWl0cz4gdm9pZCBhcHBlbmRIaWRkZW4oY29uc3QgV3JpdGVCYXJyaWVyQmFz
ZTxULCBUcmFpdHM+Jik7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgSXRlcmF0b3I+IHZvaWQgYXBw
ZW5kKEl0ZXJhdG9yIGJlZ2luICwgSXRlcmF0b3IgZW5kKTsKLSAgICB2b2lkIGFwcGVuZFZhbHVl
cyhjb25zdCBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24sIFJhd1ZhbHVlVHJhaXRzPFVua25vd24+
PiosIHNpemVfdCBjb3VudCk7Ci0gICAgdm9pZCBhcHBlbmRWYWx1ZXNIaWRkZW4oY29uc3QgV3Jp
dGVCYXJyaWVyQmFzZTxVbmtub3duLCBSYXdWYWx1ZVRyYWl0czxVbmtub3duPj4qLCBzaXplX3Qg
Y291bnQpOwotICAgIAorICAgIEFMV0FZU19JTkxJTkUgdm9pZCBhcHBlbmRWYWx1ZXMoY29uc3Qg
V3JpdGVCYXJyaWVyQmFzZTxVbmtub3duLCBSYXdWYWx1ZVRyYWl0czxVbmtub3duPj4qLCBzaXpl
X3QgY291bnQpOworICAgIEFMV0FZU19JTkxJTkUgdm9pZCBhcHBlbmRWYWx1ZXNIaWRkZW4oY29u
c3QgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duLCBSYXdWYWx1ZVRyYWl0czxVbmtub3duPj4qLCBz
aXplX3QgY291bnQpOworCiAgICAgLy8gVGhlc2UgZG9uJ3QgcmVxdWlyZSB5b3UgdG8gcHJvdmUg
dGhhdCB5b3UgaGF2ZSBhIFdyaXRlQmFycmllcjw+LiBUaGF0IG1ha2VzIHNlbnNlCiAgICAgLy8g
Zm9yOgogICAgIC8vCkBAIC04NywzMiArMTA0LDI3IEBAIHB1YmxpYzoKICAgICAvLwogICAgIC8v
IElmIHlvdSBhcmUgbm90IGEgcm9vdCBhbmQgeW91IGRvbid0IGtub3cgd2hhdCBraW5kIG9mIGJh
cnJpZXIgeW91IGhhdmUsIHRoZW4geW91CiAgICAgLy8gc2hvdWxkbid0IGNhbGwgdGhlc2UgbWV0
aG9kcy4KLSAgICB2b2lkIGFwcGVuZFVuYmFycmllcmVkKEpTVmFsdWUpOwotICAgIHZvaWQgYXBw
ZW5kVW5iYXJyaWVyZWQoSlNWYWx1ZSosIHNpemVfdCk7Ci0gICAgdm9pZCBhcHBlbmRVbmJhcnJp
ZXJlZChKU0NlbGwqKTsKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgYXBwZW5kVW5iYXJyaWVyZWQo
SlNWYWx1ZSk7CisgICAgQUxXQVlTX0lOTElORSB2b2lkIGFwcGVuZFVuYmFycmllcmVkKEpTVmFs
dWUqLCBzaXplX3QpOworICAgIHZvaWQgYXBwZW5kVW5iYXJyaWVyZWQoSlNDZWxsKikgZmluYWw7
CiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KICAgICB2b2lkIGFwcGVuZChjb25zdCBX
ZWFrPFQ+JiB3ZWFrKTsKICAgICAKLSAgICB2b2lkIGFwcGVuZEhpZGRlblVuYmFycmllcmVkKEpT
VmFsdWUpOwotICAgIHZvaWQgYXBwZW5kSGlkZGVuVW5iYXJyaWVyZWQoSlNDZWxsKik7Ci0KLSAg
ICBib29sIGFkZE9wYXF1ZVJvb3Qodm9pZCopOyAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIHJvb3Qg
d2FzIG5ldy4KLSAgICAKLSAgICBib29sIGNvbnRhaW5zT3BhcXVlUm9vdCh2b2lkKikgY29uc3Q7
CisgICAgQUxXQVlTX0lOTElORSB2b2lkIGFwcGVuZEhpZGRlblVuYmFycmllcmVkKEpTVmFsdWUp
OworICAgIHZvaWQgYXBwZW5kSGlkZGVuVW5iYXJyaWVyZWQoSlNDZWxsKikgZmluYWw7CiAKLSAg
ICBib29sIGlzRW1wdHkoKSB7IHJldHVybiBtX2NvbGxlY3RvclN0YWNrLmlzRW1wdHkoKSAmJiBt
X211dGF0b3JTdGFjay5pc0VtcHR5KCk7IH0KKyAgICBib29sIGlzRmlyc3RWaXNpdCgpIGNvbnN0
IGZpbmFsIHsgcmV0dXJuIG1faXNGaXJzdFZpc2l0OyB9CiAKLSAgICBib29sIGlzRmlyc3RWaXNp
dCgpIGNvbnN0IHsgcmV0dXJuIG1faXNGaXJzdFZpc2l0OyB9CisgICAgYm9vbCBpc01hcmtlZChj
b25zdCB2b2lkKikgY29uc3QgZmluYWw7CisgICAgYm9vbCBpc01hcmtlZChNYXJrZWRCbG9jayYs
IEhlYXBDZWxsKikgY29uc3QgZmluYWw7CisgICAgYm9vbCBpc01hcmtlZChQcmVjaXNlQWxsb2Nh
dGlvbiYsIEhlYXBDZWxsKikgY29uc3QgZmluYWw7CiAKICAgICB2b2lkIGRpZFN0YXJ0TWFya2lu
ZygpOwogICAgIHZvaWQgcmVzZXQoKTsKICAgICB2b2lkIGNsZWFyTWFya1N0YWNrcygpOwogCiAg
ICAgc2l6ZV90IGJ5dGVzVmlzaXRlZCgpIGNvbnN0IHsgcmV0dXJuIG1fYnl0ZXNWaXNpdGVkOyB9
Ci0gICAgc2l6ZV90IHZpc2l0Q291bnQoKSBjb25zdCB7IHJldHVybiBtX3Zpc2l0Q291bnQ7IH0K
LSAgICAKLSAgICB2b2lkIGFkZFRvVmlzaXRDb3VudChzaXplX3QgdmFsdWUpIHsgbV92aXNpdENv
dW50ICs9IHZhbHVlOyB9CiAKICAgICB2b2lkIGRvbmF0ZSgpOwogICAgIHZvaWQgZHJhaW4oTW9u
b3RvbmljVGltZSB0aW1lb3V0ID0gTW9ub3RvbmljVGltZTo6aW5maW5pdHkoKSk7CkBAIC0xMzUs
MjQgKzE0NywxOCBAQCBwdWJsaWM6CiAgICAgCiAgICAgLy8gVGhpcyBpbmZvcm1zIHRoZSBHQyBh
Ym91dCBhdXhpbGlhcnkgb2Ygc29tZSBzaXplIHRoYXQgd2UgYXJlIGtlZXBpbmcgYWxpdmUuIElm
IHlvdSBkb24ndCBkbwogICAgIC8vIHRoaXMgdGhlbiB0aGUgc3BhY2Ugd2lsbCBiZSBmcmVlZCBh
dCBlbmQgb2YgR0MuCi0gICAgdm9pZCBtYXJrQXV4aWxpYXJ5KGNvbnN0IHZvaWQqIGJhc2UpOwor
ICAgIHZvaWQgbWFya0F1eGlsaWFyeShjb25zdCB2b2lkKiBiYXNlKSBmaW5hbDsKIAotICAgIHZv
aWQgcmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKHNpemVfdCk7CisgICAgdm9pZCByZXBvcnRFeHRy
YU1lbW9yeVZpc2l0ZWQoc2l6ZV90KSBmaW5hbDsKICNpZiBFTkFCTEUoUkVTT1VSQ0VfVVNBR0Up
Ci0gICAgdm9pZCByZXBvcnRFeHRlcm5hbE1lbW9yeVZpc2l0ZWQoc2l6ZV90KTsKKyAgICB2b2lk
IHJlcG9ydEV4dGVybmFsTWVtb3J5VmlzaXRlZChzaXplX3QpIGZpbmFsOwogI2VuZGlmCiAgICAg
Ci0gICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7Ci0KLSAgICBib29sIGlzQW5hbHl6
aW5nSGVhcCgpIGNvbnN0IHsgcmV0dXJuICEhbV9oZWFwQW5hbHl6ZXI7IH0KLSAgICBIZWFwQW5h
bHl6ZXIqIGhlYXBBbmFseXplcigpIGNvbnN0IHsgcmV0dXJuIG1faGVhcEFuYWx5emVyOyB9Ci0g
ICAgCi0gICAgUm9vdE1hcmtSZWFzb24gcm9vdE1hcmtSZWFzb24oKSBjb25zdCB7IHJldHVybiBt
X3Jvb3RNYXJrUmVhc29uOyB9Ci0gICAgdm9pZCBzZXRSb290TWFya1JlYXNvbihSb290TWFya1Jl
YXNvbiByZWFzb24pIHsgbV9yb290TWFya1JlYXNvbiA9IHJlYXNvbjsgfQorICAgIHZvaWQgZHVt
cChQcmludFN0cmVhbSYpIGNvbnN0IGZpbmFsOwogCiAgICAgSGVhcFZlcnNpb24gbWFya2luZ1Zl
cnNpb24oKSBjb25zdCB7IHJldHVybiBtX21hcmtpbmdWZXJzaW9uOyB9CiAKLSAgICBib29sIG11
dGF0b3JJc1N0b3BwZWQoKSBjb25zdCB7IHJldHVybiBtX211dGF0b3JJc1N0b3BwZWQ7IH0KKyAg
ICBib29sIG11dGF0b3JJc1N0b3BwZWQoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX211dGF0b3JJ
c1N0b3BwZWQ7IH0KICAgICAKICAgICBMb2NrJiByaWdodFRvUnVuKCkgeyByZXR1cm4gbV9yaWdo
dFRvUnVuOyB9CiAgICAgCkBAIC0xNjQsMjAgKzE3MCwxNyBAQCBwdWJsaWM6CiAgICAgCiAgICAg
dm9pZCBvcHRpbWl6ZUZvclN0b3BwZWRNdXRhdG9yKCk7CiAgICAgCi0gICAgdm9pZCBkaWRSYWNl
KGNvbnN0IFZpc2l0UmFjZUtleSYpOworICAgIHZvaWQgZGlkUmFjZShjb25zdCBWaXNpdFJhY2VL
ZXkmKSBmaW5hbDsKICAgICB2b2lkIGRpZFJhY2UoSlNDZWxsKiBjZWxsLCBjb25zdCBjaGFyKiBy
ZWFzb24pIHsgZGlkUmFjZShWaXNpdFJhY2VLZXkoY2VsbCwgcmVhc29uKSk7IH0KICAgICAKLSAg
ICB2b2lkIHZpc2l0QXNDb25zdHJhaW50KGNvbnN0IEpTQ2VsbCopOworICAgIHZvaWQgdmlzaXRB
c0NvbnN0cmFpbnQoY29uc3QgSlNDZWxsKikgZmluYWw7CiAgICAgCiAgICAgYm9vbCBkaWRSZWFj
aFRlcm1pbmF0aW9uKCk7CiAgICAgCi0gICAgdm9pZCBzZXRJZ25vcmVOZXdPcGFxdWVSb290cyhi
b29sIHZhbHVlKSB7IG1faWdub3JlTmV3T3BhcXVlUm9vdHMgPSB2YWx1ZTsgfQotCiAgICAgdm9p
ZCBkb25hdGVBbGwoKTsKLSAgICAKLSAgICBjb25zdCBjaGFyKiBjb2RlTmFtZSgpIGNvbnN0IHsg
cmV0dXJuIG1fY29kZU5hbWUuZGF0YSgpOyB9Ci0gICAgCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUg
dm9pZCBhZGRQYXJhbGxlbENvbnN0cmFpbnRUYXNrKFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoU2xv
dFZpc2l0b3ImKT4+KTsKKworICAgIE5PX1JFVFVSTl9EVUVfVE9fQ1JBU0ggdm9pZCBhZGRQYXJh
bGxlbENvbnN0cmFpbnRUYXNrKFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoQWJzdHJhY3RTbG90Vmlz
aXRvciYpPj4pIGZpbmFsOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgYWRkUGFyYWxsZWxD
b25zdHJhaW50VGFzayhSZWZQdHI8U2hhcmVkVGFzazx2b2lkKFNsb3RWaXNpdG9yJik+PikgZmlu
YWw7CiAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIFBhcmFsbGVsTW9kZUVuYWJsZXI7CkBA
IC0yMTYsMzkgKzIxOSwyNSBAQCBwcml2YXRlOgogCiAgICAgTWFya1N0YWNrQXJyYXkmIGNvcnJl
c3BvbmRpbmdHbG9iYWxTdGFjayhNYXJrU3RhY2tBcnJheSYpOwogCi0gICAgTWFya1N0YWNrQXJy
YXkgbV9jb2xsZWN0b3JTdGFjazsKLSAgICBNYXJrU3RhY2tBcnJheSBtX211dGF0b3JTdGFjazsK
LSAgICAKLSAgICBzaXplX3QgbV9ieXRlc1Zpc2l0ZWQ7Ci0gICAgc2l6ZV90IG1fdmlzaXRDb3Vu
dDsKLSAgICBzaXplX3QgbV9ub25DZWxsVmlzaXRDb3VudCB7IDAgfTsgLy8gVXNlZCBmb3IgaW5j
cmVtZW50YWwgZHJhaW5pbmcsIGlnbm9yZWQgb3RoZXJ3aXNlLgotICAgIENoZWNrZWRTaXplIG1f
ZXh0cmFNZW1vcnlTaXplIHsgMCB9OwotICAgIGJvb2wgbV9pc0luUGFyYWxsZWxNb2RlOwotICAg
IGJvb2wgbV9pZ25vcmVOZXdPcGFxdWVSb290cyB7IGZhbHNlIH07IC8vIFVzZWZ1bCBhcyBhIGRl
YnVnZ2luZyBtb2RlLgorICAgIGJvb2wgbV9pc0luUGFyYWxsZWxNb2RlIHsgZmFsc2UgfTsKIAog
ICAgIEhlYXBWZXJzaW9uIG1fbWFya2luZ1ZlcnNpb247Ci0gICAgCi0gICAgSGVhcCYgbV9oZWFw
OworCisgICAgc2l6ZV90IG1fYnl0ZXNWaXNpdGVkIHsgMCB9OworICAgIHNpemVfdCBtX25vbkNl
bGxWaXNpdENvdW50IHsgMCB9OyAvLyBVc2VkIGZvciBpbmNyZW1lbnRhbCBkcmFpbmluZywgaWdu
b3JlZCBvdGhlcndpc2UuCisgICAgQ2hlY2tlZFNpemUgbV9leHRyYU1lbW9yeVNpemUgeyAwIH07
CiAKICAgICBIZWFwQW5hbHl6ZXIqIG1faGVhcEFuYWx5emVyIHsgbnVsbHB0ciB9OwogICAgIEpT
Q2VsbCogbV9jdXJyZW50Q2VsbCB7IG51bGxwdHIgfTsKLSAgICBSb290TWFya1JlYXNvbiBtX3Jv
b3RNYXJrUmVhc29uIHsgUm9vdE1hcmtSZWFzb246Ok5vbmUgfTsKICAgICBib29sIG1faXNGaXJz
dFZpc2l0IHsgZmFsc2UgfTsKICAgICBib29sIG1fbXV0YXRvcklzU3RvcHBlZCB7IGZhbHNlIH07
CiAgICAgYm9vbCBtX2Nhbk9wdGltaXplRm9yU3RvcHBlZE11dGF0b3IgeyBmYWxzZSB9OwogICAg
IExvY2sgbV9yaWdodFRvUnVuOwogICAgIAotICAgIENTdHJpbmcgbV9jb2RlTmFtZTsKLSAgICAK
LSAgICBNYXJraW5nQ29uc3RyYWludCogbV9jdXJyZW50Q29uc3RyYWludCB7IG51bGxwdHIgfTsK
LSAgICBNYXJraW5nQ29uc3RyYWludFNvbHZlciogbV9jdXJyZW50U29sdmVyIHsgbnVsbHB0ciB9
OwotICAgIAogICAgIC8vIFB1dCBwYWRkaW5nIGhlcmUgdG8gbWl0aWdhdGUgZmFsc2Ugc2hhcmlu
ZyBiZXR3ZWVuIG11bHRpcGxlIFNsb3RWaXNpdG9ycy4KICAgICBjaGFyIHBhZGRpbmdbNjRdOwot
cHVibGljOgogI2lmIEFTU0VSVF9FTkFCTEVECi0gICAgYm9vbCBtX2lzQ2hlY2tpbmdGb3JEZWZh
dWx0TWFya1Zpb2xhdGlvbjsKLSAgICBib29sIG1faXNEcmFpbmluZzsKKyAgICBib29sIG1faXND
aGVja2luZ0ZvckRlZmF1bHRNYXJrVmlvbGF0aW9uIHsgZmFsc2UgfTsKICNlbmRpZgogfTsKIApA
QCAtMjcxLDIzICsyNjAsNCBAQCBwcml2YXRlOgogICAgIFNsb3RWaXNpdG9yJiBtX3N0YWNrOwog
fTsKIAotY2xhc3MgU2V0Um9vdE1hcmtSZWFzb25TY29wZSB7Ci1wdWJsaWM6Ci0gICAgU2V0Um9v
dE1hcmtSZWFzb25TY29wZShTbG90VmlzaXRvciYgdmlzaXRvciwgUm9vdE1hcmtSZWFzb24gcmVh
c29uKQotICAgICAgICA6IG1fdmlzaXRvcih2aXNpdG9yKQotICAgICAgICAsIG1fcHJldmlvdXNS
ZWFzb24odmlzaXRvci5yb290TWFya1JlYXNvbigpKQotICAgIHsKLSAgICAgICAgbV92aXNpdG9y
LnNldFJvb3RNYXJrUmVhc29uKHJlYXNvbik7Ci0gICAgfQotCi0gICAgflNldFJvb3RNYXJrUmVh
c29uU2NvcGUoKQotICAgIHsKLSAgICAgICAgbV92aXNpdG9yLnNldFJvb3RNYXJrUmVhc29uKG1f
cHJldmlvdXNSZWFzb24pOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBTbG90VmlzaXRvciYgbV92
aXNpdG9yOwotICAgIFJvb3RNYXJrUmVhc29uIG1fcHJldmlvdXNSZWFzb247Ci19OwotCiB9IC8v
IG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNp
dG9ySW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Ns
b3RWaXNpdG9ySW5saW5lcy5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9TbG90VmlzaXRvcklubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI1LDkg
KzI1LDEwIEBACiAKICNwcmFnbWEgb25jZQogCisjaW5jbHVkZSAiQWJzdHJhY3RTbG90VmlzaXRv
cklubGluZXMuaCIKKyNpbmNsdWRlICJNYXJrZWRCbG9jay5oIgorI2luY2x1ZGUgIlByZWNpc2VB
bGxvY2F0aW9uLmgiCiAjaW5jbHVkZSAiU2xvdFZpc2l0b3IuaCIKLSNpbmNsdWRlICJXZWFrLmgi
Ci0jaW5jbHVkZSAiV2Vha0lubGluZXMuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAgLTEzNCwy
MSArMTM1LDE5IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBTbG90VmlzaXRvcjo6YXBwZW5kVmEKICAg
ICAgICAgYXBwZW5kSGlkZGVuKGJhcnJpZXJzW2ldKTsKIH0KIAotaW5saW5lIGJvb2wgU2xvdFZp
c2l0b3I6OmFkZE9wYXF1ZVJvb3Qodm9pZCogcHRyKQorQUxXQVlTX0lOTElORSBib29sIFNsb3RW
aXNpdG9yOjppc01hcmtlZChjb25zdCB2b2lkKiBwKSBjb25zdAogewotICAgIGlmICghcHRyKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKG1faWdub3JlTmV3T3BhcXVlUm9vdHMpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoIWhlYXAoKS0+bV9vcGFxdWVSb290cy5hZGQo
cHRyKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1fdmlzaXRDb3VudCsrOwotICAgIHJl
dHVybiB0cnVlOworICAgIHJldHVybiBoZWFwKCktPmlzTWFya2VkKHApOwogfQogCi1pbmxpbmUg
Ym9vbCBTbG90VmlzaXRvcjo6Y29udGFpbnNPcGFxdWVSb290KHZvaWQqIHB0cikgY29uc3QKK0FM
V0FZU19JTkxJTkUgYm9vbCBTbG90VmlzaXRvcjo6aXNNYXJrZWQoTWFya2VkQmxvY2smIGNvbnRh
aW5lciwgSGVhcENlbGwqIGNlbGwpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGhlYXAoKS0+bV9vcGFx
dWVSb290cy5jb250YWlucyhwdHIpOworICAgIHJldHVybiBjb250YWluZXIuaXNNYXJrZWQobWFy
a2luZ1ZlcnNpb24oKSwgY2VsbCk7Cit9CisKK0FMV0FZU19JTkxJTkUgYm9vbCBTbG90VmlzaXRv
cjo6aXNNYXJrZWQoUHJlY2lzZUFsbG9jYXRpb24mIGNvbnRhaW5lciwgSGVhcENlbGwqIGNlbGwp
IGNvbnN0Cit7CisgICAgcmV0dXJuIGNvbnRhaW5lci5pc01hcmtlZChtYXJraW5nVmVyc2lvbigp
LCBjZWxsKTsKIH0KIAogaW5saW5lIHZvaWQgU2xvdFZpc2l0b3I6OnJlcG9ydEV4dHJhTWVtb3J5
VmlzaXRlZChzaXplX3Qgc2l6ZSkKQEAgLTE2OSwyMSArMTY4LDYgQEAgaW5saW5lIHZvaWQgU2xv
dFZpc2l0b3I6OnJlcG9ydEV4dGVybmFsTQogfQogI2VuZGlmCiAKLWlubGluZSBIZWFwKiBTbG90
VmlzaXRvcjo6aGVhcCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuICZtX2hlYXA7Ci19Ci0KLWlubGlu
ZSBWTSYgU2xvdFZpc2l0b3I6OnZtKCkKLXsKLSAgICByZXR1cm4gbV9oZWFwLnZtKCk7Ci19Ci0K
LWlubGluZSBjb25zdCBWTSYgU2xvdFZpc2l0b3I6OnZtKCkgY29uc3QKLXsKLSAgICByZXR1cm4g
bV9oZWFwLnZtKCk7Ci19Ci0KIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CiBJdGVyYXRpb25TdGF0
dXMgU2xvdFZpc2l0b3I6OmZvckVhY2hNYXJrU3RhY2soY29uc3QgRnVuYyYgZnVuYykKIHsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yTWFjcm9zLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3JNYWNyb3MuaAko
bm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvck1h
Y3Jvcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTIzIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKK25hbWVzcGFjZSBK
U0MgeworCitjbGFzcyBBYnN0cmFjdFNsb3RWaXNpdG9yOworY2xhc3MgSlNDZWxsOworY2xhc3Mg
U2xvdFZpc2l0b3I7CisKKyNkZWZpbmUgVU5VU0VEX01PRElGSUVSX0FSR1VNRU5UIC8qIHVudXNl
ZCAqLworCisjZGVmaW5lIERFQ0xBUkVfVU5VU0VEX1NUUlVDVF9UT19URVJNSU5BVEVfVklTSVRf
TUFDUk9fRVhQQU5ERVJfSU1QTChjb3VudGVyKSBcCisgICAgc3RydWN0IFVudXNlZFNsb3RWaXNp
dG9yTWFjcm9TdHJ1Y3RTb1dlQ2FuSGF2ZUFTZW1pY29sb24jI2NvdW50ZXIgeyB9CisKKyNkZWZp
bmUgREVDTEFSRV9VTlVTRURfU1RSVUNUX1RPX1RFUk1JTkFURV9WSVNJVF9NQUNST19FWFBBTkRF
Uihjb3VudGVyKSBcCisgICAgREVDTEFSRV9VTlVTRURfU1RSVUNUX1RPX1RFUk1JTkFURV9WSVNJ
VF9NQUNST19FWFBBTkRFUl9JTVBMKGNvdW50ZXIpCisKKyNkZWZpbmUgREVDTEFSRV9VTlVTRURf
U1RSVUNUX1RPX1RFUk1JTkFURV9WSVNJVF9NQUNSTyBcCisgICAgREVDTEFSRV9VTlVTRURfU1RS
VUNUX1RPX1RFUk1JTkFURV9WSVNJVF9NQUNST19FWFBBTkRFUihfX0NPVU5URVJfXykKKworLy8g
TWFjcm9zIGZvciB2aXNpdEFnZ3JlZ2F0ZSgpLgorCisjZGVmaW5lIERFQ0xBUkVfVklTSVRfQUdH
UkVHQVRFX1dJVEhfTU9ESUZJRVIocG9zdE1vZGlmaWVyKSBcCitwcml2YXRlOiBcCisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gQUxXQVlTX0lOTElORSB2b2lkIHZpc2l0QWdncmVnYXRl
SW1wbChWaXNpdG9yJikgcG9zdE1vZGlmaWVyOyBcCitwdWJsaWM6IFwKKyAgICB2b2lkIHZpc2l0
QWdncmVnYXRlKEFic3RyYWN0U2xvdFZpc2l0b3ImKSBwb3N0TW9kaWZpZXI7IFwKKyAgICB2b2lk
IHZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJikgcG9zdE1vZGlmaWVyCisKKyNkZWZpbmUgREVD
TEFSRV9WSVNJVF9BR0dSRUdBVEUgXAorICAgIERFQ0xBUkVfVklTSVRfQUdHUkVHQVRFX1dJVEhf
TU9ESUZJRVIoVU5VU0VEX01PRElGSUVSX0FSR1VNRU5UKQorCisjZGVmaW5lIERFRklORV9WSVNJ
VF9BR0dSRUdBVEVfV0lUSF9NT0RJRklFUihjbGFzc05hbWUsIHBvc3RNb2RpZmllcikgXAorICAg
IHZvaWQgY2xhc3NOYW1lOjp2aXNpdEFnZ3JlZ2F0ZShBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNp
dG9yKSBwb3N0TW9kaWZpZXIgeyB2aXNpdEFnZ3JlZ2F0ZUltcGwodmlzaXRvcik7IH0gXAorICAg
IHZvaWQgY2xhc3NOYW1lOjp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYgdmlzaXRvcikgcG9z
dE1vZGlmaWVyIHsgdmlzaXRBZ2dyZWdhdGVJbXBsKHZpc2l0b3IpOyB9IFwKKyAgICBERUNMQVJF
X1VOVVNFRF9TVFJVQ1RfVE9fVEVSTUlOQVRFX1ZJU0lUX01BQ1JPCisKKyNkZWZpbmUgREVGSU5F
X1ZJU0lUX0FHR1JFR0FURShjbGFzc05hbWUpIFwKKyAgICBERUZJTkVfVklTSVRfQUdHUkVHQVRF
X1dJVEhfTU9ESUZJRVIoY2xhc3NOYW1lLCBVTlVTRURfTU9ESUZJRVJfQVJHVU1FTlQpCisKKy8v
IE1hY3JvcyBmb3Igc3RhdGljIHZpc2l0Q2hpbGRyZW4oKS4KKworI2RlZmluZSBERUNMQVJFX1ZJ
U0lUX0NISUxEUkVOX1dJVEhfTU9ESUZJRVIocHJlTW9kaWZpZXIpIFwKK3ByaXZhdGU6IFwKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiBBTFdBWVNfSU5MSU5FIHN0YXRpYyB2b2lkIHZp
c2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCosIFZpc2l0b3ImKTsgXAorcHVibGljOiBcCisgICAgcHJl
TW9kaWZpZXIgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBBYnN0cmFjdFNsb3RW
aXNpdG9yJik7IFwKKyAgICBwcmVNb2RpZmllciBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpT
Q2VsbCosIFNsb3RWaXNpdG9yJikKKworI2RlZmluZSBERUNMQVJFX1ZJU0lUX0NISUxEUkVOIFwK
KyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOX1dJVEhfTU9ESUZJRVIoVU5VU0VEX01PRElGSUVS
X0FSR1VNRU5UKQorCisjZGVmaW5lIERFRklORV9WSVNJVF9DSElMRFJFTl9XSVRIX01PRElGSUVS
KHByZU1vZGlmaWVyLCBjbGFzc05hbWUpIFwKKyAgICBwcmVNb2RpZmllciB2b2lkIGNsYXNzTmFt
ZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0
b3IpIFwKKyAgICB7IFwKKyAgICAgICAgQWJzdHJhY3RTbG90VmlzaXRvcjo6Q29udGV4dCBjb250
ZXh0KHZpc2l0b3IsIGNlbGwpOyBcCisgICAgICAgIHZpc2l0Q2hpbGRyZW5JbXBsKGNlbGwsIHZp
c2l0b3IpOyBcCisgICAgfSBcCisgICAgcHJlTW9kaWZpZXIgdm9pZCBjbGFzc05hbWU6OnZpc2l0
Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikgeyB2aXNpdENoaWxk
cmVuSW1wbChjZWxsLCB2aXNpdG9yKTsgfSBcCisgICAgREVDTEFSRV9VTlVTRURfU1RSVUNUX1RP
X1RFUk1JTkFURV9WSVNJVF9NQUNSTworCisjZGVmaW5lIERFRklORV9WSVNJVF9DSElMRFJFTihj
bGFzc05hbWUpIFwKKyAgICBERUZJTkVfVklTSVRfQ0hJTERSRU5fV0lUSF9NT0RJRklFUihVTlVT
RURfTU9ESUZJRVJfQVJHVU1FTlQsIGNsYXNzTmFtZSkKKworLy8gTWFjcm9zIGZvciBzdGF0aWMg
dmlzaXRPdXRwdXRDb25zdHJhaW50cygpLgorCisjZGVmaW5lIERFQ0xBUkVfVklTSVRfT1VUUFVU
X0NPTlNUUkFJTlRTX1dJVEhfTU9ESUZJRVIocHJlTW9kaWZpZXIpIFwKK3ByaXZhdGU6IFwKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiBBTFdBWVNfSU5MSU5FIHN0YXRpYyB2b2lkIHZp
c2l0T3V0cHV0Q29uc3RyYWludHNJbXBsKEpTQ2VsbCosIFZpc2l0b3ImKTsgXAorcHVibGljOiBc
CisgICAgcHJlTW9kaWZpZXIgc3RhdGljIHZvaWQgdmlzaXRPdXRwdXRDb25zdHJhaW50cyhKU0Nl
bGwqLCBBYnN0cmFjdFNsb3RWaXNpdG9yJik7IFwKKyAgICBwcmVNb2RpZmllciBzdGF0aWMgdm9p
ZCB2aXNpdE91dHB1dENvbnN0cmFpbnRzKEpTQ2VsbCosIFNsb3RWaXNpdG9yJikKKworI2RlZmlu
ZSBERUNMQVJFX1ZJU0lUX09VVFBVVF9DT05TVFJBSU5UUyBcCisgICAgREVDTEFSRV9WSVNJVF9P
VVRQVVRfQ09OU1RSQUlOVFNfV0lUSF9NT0RJRklFUihVTlVTRURfTU9ESUZJRVJfQVJHVU1FTlQp
CisKKyNkZWZpbmUgREVGSU5FX1ZJU0lUX09VVFBVVF9DT05TVFJBSU5UU19XSVRIX01PRElGSUVS
KHByZU1vZGlmaWVyLCBjbGFzc05hbWUpIFwKKyAgICBwcmVNb2RpZmllciB2b2lkIGNsYXNzTmFt
ZTo6dmlzaXRPdXRwdXRDb25zdHJhaW50cyhKU0NlbGwqIGNlbGwsIEFic3RyYWN0U2xvdFZpc2l0
b3ImIHZpc2l0b3IpIFwKKyAgICB7IFwKKyAgICAgICAgQWJzdHJhY3RTbG90VmlzaXRvcjo6Q29u
dGV4dCBjb250ZXh0KHZpc2l0b3IsIGNlbGwpOyBcCisgICAgICAgIHZpc2l0T3V0cHV0Q29uc3Ry
YWludHNJbXBsKGNlbGwsIHZpc2l0b3IpOyBcCisgICAgfSBcCisgICAgcHJlTW9kaWZpZXIgdm9p
ZCBjbGFzc05hbWU6OnZpc2l0T3V0cHV0Q29uc3RyYWludHMoSlNDZWxsKiBjZWxsLCBTbG90Vmlz
aXRvciYgdmlzaXRvcikgeyB2aXNpdE91dHB1dENvbnN0cmFpbnRzSW1wbChjZWxsLCB2aXNpdG9y
KTsgfSBcCisgICAgREVDTEFSRV9VTlVTRURfU1RSVUNUX1RPX1RFUk1JTkFURV9WSVNJVF9NQUNS
TworCisjZGVmaW5lIERFRklORV9WSVNJVF9PVVRQVVRfQ09OU1RSQUlOVFMoY2xhc3NOYW1lKSBc
CisgICAgREVGSU5FX1ZJU0lUX09VVFBVVF9DT05TVFJBSU5UU19XSVRIX01PRElGSUVSKFVOVVNF
RF9NT0RJRklFUl9BUkdVTUVOVCwgY2xhc3NOYW1lKQorCisvLyBNYWNyb3MgZm9yIHZpc2l0QWRk
aXRpb25hbENoaWxkcmVuKCkuCisKKyNkZWZpbmUgREVGSU5FX1ZJU0lUX0FERElUSU9OQUxfQ0hJ
TERSRU4oY2xhc3NOYW1lKSBcCisgICAgdGVtcGxhdGUgdm9pZCBjbGFzc05hbWU6OnZpc2l0QWRk
aXRpb25hbENoaWxkcmVuKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpOyBcCisgICAgdGVtcGxh
dGUgdm9pZCBjbGFzc05hbWU6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0
b3ImKQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwordXNpbmcgSlNDOjpBYnN0cmFjdFNsb3RWaXNp
dG9yOwordXNpbmcgSlNDOjpKU0NlbGw7Cit1c2luZyBKU0M6OlNsb3RWaXNpdG9yOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3Vic3BhY2UuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdWJzcGFjZS5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdWJzcGFjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNy0yMDE4IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
ODYsOCArODYsOCBAQCBwdWJsaWM6CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KICAgICB2
b2lkIGZvckVhY2hNYXJrZWRDZWxsKGNvbnN0IEZ1bmMmKTsKICAgICAKLSAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBGdW5jPgotICAgIFJlZjxTaGFyZWRUYXNrPHZvaWQoU2xvdFZpc2l0b3ImKT4+IGZv
ckVhY2hNYXJrZWRDZWxsSW5QYXJhbGxlbChjb25zdCBGdW5jJik7CisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVmlzaXRvciwgdHlwZW5hbWUgRnVuYz4KKyAgICBSZWY8U2hhcmVkVGFzazx2b2lkKFZp
c2l0b3ImKT4+IGZvckVhY2hNYXJrZWRDZWxsSW5QYXJhbGxlbChjb25zdCBGdW5jJik7CiAKICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgogICAgIHZvaWQgZm9yRWFjaExpdmVDZWxsKGNvbnN0
IEZ1bmMmKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N1YnNwYWNlSW5saW5l
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N1YnNwYWNlSW5s
aW5lcy5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9T
dWJzcGFjZUlubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTctMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTg1LDEwICs4NSwxMCBAQCB2b2lk
IFN1YnNwYWNlOjpmb3JFYWNoTWFya2VkQ2VsbChjb25zdCBGCiAgICAgICAgIH0pOwogfQogCi10
ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgotUmVmPFNoYXJlZFRhc2s8dm9pZChTbG90VmlzaXRvciYp
Pj4gU3Vic3BhY2U6OmZvckVhY2hNYXJrZWRDZWxsSW5QYXJhbGxlbChjb25zdCBGdW5jJiBmdW5j
KQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvciwgdHlwZW5hbWUgRnVuYz4KK1JlZjxTaGFyZWRU
YXNrPHZvaWQoVmlzaXRvciYpPj4gU3Vic3BhY2U6OmZvckVhY2hNYXJrZWRDZWxsSW5QYXJhbGxl
bChjb25zdCBGdW5jJiBmdW5jKQogewotICAgIGNsYXNzIFRhc2sgZmluYWwgOiBwdWJsaWMgU2hh
cmVkVGFzazx2b2lkKFNsb3RWaXNpdG9yJik+IHsKKyAgICBjbGFzcyBUYXNrIGZpbmFsIDogcHVi
bGljIFNoYXJlZFRhc2s8dm9pZChWaXNpdG9yJik+IHsKICAgICBwdWJsaWM6CiAgICAgICAgIFRh
c2soU3Vic3BhY2UmIHN1YnNwYWNlLCBjb25zdCBGdW5jJiBmdW5jKQogICAgICAgICAgICAgOiBt
X3N1YnNwYWNlKHN1YnNwYWNlKQpAQCAtOTcsNyArOTcsNyBAQCBSZWY8U2hhcmVkVGFzazx2b2lk
KFNsb3RWaXNpdG9yJik+PiBTdWJzCiAgICAgICAgIHsKICAgICAgICAgfQogICAgICAgICAKLSAg
ICAgICAgdm9pZCBydW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpIGZpbmFsCisgICAgICAgIHZvaWQg
cnVuKFZpc2l0b3ImIHZpc2l0b3IpIGZpbmFsCiAgICAgICAgIHsKICAgICAgICAgICAgIHdoaWxl
IChNYXJrZWRCbG9jazo6SGFuZGxlKiBoYW5kbGUgPSBtX2Jsb2NrU291cmNlLT5ydW4oKSkgewog
ICAgICAgICAgICAgICAgIGhhbmRsZS0+Zm9yRWFjaE1hcmtlZENlbGwoCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9WZXJpZmllclNsb3RWaXNpdG9yLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9WZXJpZmllclNsb3RWaXNpdG9yLmNwcAkobm9u
ZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9WZXJpZmllclNsb3RWaXNp
dG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM0NiBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJWZXJpZmllclNsb3RWaXNpdG9yLmgiCisKKyNp
bmNsdWRlICJCbG9ja0RpcmVjdG9yeUlubGluZXMuaCIKKyNpbmNsdWRlICJDb25zZXJ2YXRpdmVS
b290cy5oIgorI2luY2x1ZGUgIkdDU2VnbWVudGVkQXJyYXlJbmxpbmVzLmgiCisjaW5jbHVkZSAi
SGVhcENlbGwuaCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAiVk0uaCIKKyNp
bmNsdWRlICJWZXJpZmllclNsb3RWaXNpdG9ySW5saW5lcy5oIgorI2luY2x1ZGUgPHd0Zi9TdGFj
a1RyYWNlLmg+CisKK25hbWVzcGFjZSBKU0MgeworCit1c2luZyBNYXJrZXJEYXRhID0gVmVyaWZp
ZXJTbG90VmlzaXRvcjo6TWFya2VyRGF0YTsKKworY29uc3RleHByIGludCBtYXhNYXJraW5nU3Rh
Y2tGcmFtZXNUb0NhcHR1cmUgPSAxMDA7CisKK01hcmtlckRhdGE6Ok1hcmtlckRhdGEoSGVhcENl
bGwqIHBhcmVudCwgc3RkOjp1bmlxdWVfcHRyPFN0YWNrVHJhY2U+JiYgc3RhY2spCisgICAgOiBw
YXJlbnQocGFyZW50KQorICAgICwgc3RhY2soV1RGTW92ZShzdGFjaykpCit7Cit9CisKK1Zlcmlm
aWVyU2xvdFZpc2l0b3I6Ok1hcmtlZEJsb2NrRGF0YTo6TWFya2VkQmxvY2tEYXRhKE1hcmtlZEJs
b2NrKiBibG9jaykKKyAgICA6IG1fYmxvY2soYmxvY2spCit7Cit9CisKK3ZvaWQgVmVyaWZpZXJT
bG90VmlzaXRvcjo6TWFya2VkQmxvY2tEYXRhOjphZGRNYXJrZXJEYXRhKHVuc2lnbmVkIGF0b21O
dW1iZXIsIE1hcmtlckRhdGEmJiBtYXJrZXIpCit7CisgICAgaWYgKG1fbWFya2Vycy5pc0VtcHR5
KCkpCisgICAgICAgIG1fbWFya2Vycy5ncm93KE1hcmtlZEJsb2NrOjphdG9tc1BlckJsb2NrKTsK
KyAgICBtX21hcmtlcnNbYXRvbU51bWJlcl0gPSBXVEZNb3ZlKG1hcmtlcik7Cit9CisKK2NvbnN0
IE1hcmtlckRhdGEqIFZlcmlmaWVyU2xvdFZpc2l0b3I6Ok1hcmtlZEJsb2NrRGF0YTo6bWFya2Vy
RGF0YSh1bnNpZ25lZCBhdG9tTnVtYmVyKSBjb25zdAoreworICAgIGF1dG8mIG1hcmtlciA9IG1f
bWFya2Vyc1thdG9tTnVtYmVyXTsKKyAgICBpZiAobWFya2VyLnN0YWNrKQorICAgICAgICByZXR1
cm4gJm1hcmtlcjsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworVmVyaWZpZXJTbG90VmlzaXRv
cjo6UHJlY2lzZUFsbG9jYXRpb25EYXRhOjpQcmVjaXNlQWxsb2NhdGlvbkRhdGEoUHJlY2lzZUFs
bG9jYXRpb24qIGFsbG9jYXRpb24pCisgICAgOiBtX2FsbG9jYXRpb24oYWxsb2NhdGlvbikKK3sK
K30KKworY29uc3QgTWFya2VyRGF0YSogVmVyaWZpZXJTbG90VmlzaXRvcjo6UHJlY2lzZUFsbG9j
YXRpb25EYXRhOjptYXJrZXJEYXRhKCkgY29uc3QKK3sKKyAgICBpZiAobV9tYXJrZXIuc3RhY2sp
CisgICAgICAgIHJldHVybiAmbV9tYXJrZXI7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK3Zv
aWQgVmVyaWZpZXJTbG90VmlzaXRvcjo6UHJlY2lzZUFsbG9jYXRpb25EYXRhOjphZGRNYXJrZXJE
YXRhKE1hcmtlckRhdGEmJiBtYXJrZXIpCit7CisgICAgbV9tYXJrZXIgPSBXVEZNb3ZlKG1hcmtl
cik7Cit9CisKK1ZlcmlmaWVyU2xvdFZpc2l0b3I6OlZlcmlmaWVyU2xvdFZpc2l0b3IoSGVhcCYg
aGVhcCkKKyAgICA6IEJhc2UoaGVhcCwgIlZlcmlmaWVyIiwgbV9vcGFxdWVSb290U3RvcmFnZSkK
K3sKK30KKworVmVyaWZpZXJTbG90VmlzaXRvcjo6flZlcmlmaWVyU2xvdFZpc2l0b3IoKQorewor
ICAgIGhlYXAoKS0+b2JqZWN0U3BhY2UoKS5mb3JFYWNoQmxvY2soCisgICAgICAgIFsmXSAoTWFy
a2VkQmxvY2s6OkhhbmRsZSogaGFuZGxlKSB7CisgICAgICAgICAgICBoYW5kbGUtPmJsb2NrKCku
c2V0VmVyaWZpZXJNZW1vKG51bGxwdHIpOworICAgICAgICB9KTsKK30KKwordm9pZCBWZXJpZmll
clNsb3RWaXNpdG9yOjphZGRQYXJhbGxlbENvbnN0cmFpbnRUYXNrKFJlZlB0cjxTaGFyZWRUYXNr
PHZvaWQoQWJzdHJhY3RTbG90VmlzaXRvciYpPj4gdGFzaykKK3sKKyAgICBtX2NvbnN0cmFpbnRU
YXNrcy5hcHBlbmQoV1RGTW92ZSh0YXNrKSk7Cit9CisKK05PX1JFVFVSTl9EVUVfVE9fQ1JBU0gg
dm9pZCBWZXJpZmllclNsb3RWaXNpdG9yOjphZGRQYXJhbGxlbENvbnN0cmFpbnRUYXNrKFJlZlB0
cjxTaGFyZWRUYXNrPHZvaWQoU2xvdFZpc2l0b3ImKT4+KQoreworICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7Cit9CisKK3ZvaWQgVmVyaWZpZXJTbG90VmlzaXRvcjo6ZXhlY3V0ZUNv
bnN0cmFpbnRUYXNrcygpCit7CisgICAgd2hpbGUgKCFtX2NvbnN0cmFpbnRUYXNrcy5pc0VtcHR5
KCkpCisgICAgICAgIG1fY29uc3RyYWludFRhc2tzLnRha2VGaXJzdCgpLT5ydW4oKnRoaXMpOwor
fQorCit2b2lkIFZlcmlmaWVyU2xvdFZpc2l0b3I6OmFwcGVuZChjb25zdCBDb25zZXJ2YXRpdmVS
b290cyYgY29uc2VydmF0aXZlUm9vdHMpCit7CisgICAgYXV0byBhcHBlbmRKU0NlbGxPckF1eGls
aWFyeSA9IFsmXSAoSGVhcENlbGwqIGhlYXBDZWxsKSB7CisgICAgICAgIGlmICghaGVhcENlbGwp
CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgaWYgKHRlc3RBbmRTZXRNYXJrZWQoaGVh
cENlbGwpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHN3aXRjaCAoaGVhcENlbGwt
PmNlbGxLaW5kKCkpIHsKKyAgICAgICAgY2FzZSBIZWFwQ2VsbDo6SlNDZWxsOgorICAgICAgICBj
YXNlIEhlYXBDZWxsOjpKU0NlbGxXaXRoSW5kZXhpbmdIZWFkZXI6IHsKKyAgICAgICAgICAgIEpT
Q2VsbCoganNDZWxsID0gc3RhdGljX2Nhc3Q8SlNDZWxsKj4oaGVhcENlbGwpOworICAgICAgICAg
ICAgYXBwZW5kVG9NYXJrU3RhY2soanNDZWxsKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorCisgICAgICAgIGNhc2UgSGVhcENlbGw6OkF1eGlsaWFyeToKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorICAgIH07CisKKyAgICBIZWFwQ2VsbCoqIHJvb3RzID0gY29uc2Vy
dmF0aXZlUm9vdHMucm9vdHMoKTsKKyAgICBzaXplX3Qgc2l6ZSA9IGNvbnNlcnZhdGl2ZVJvb3Rz
LnNpemUoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkKKyAgICAgICAg
YXBwZW5kSlNDZWxsT3JBdXhpbGlhcnkocm9vdHNbaV0pOworfQorCit2b2lkIFZlcmlmaWVyU2xv
dFZpc2l0b3I6OmFwcGVuZFRvTWFya1N0YWNrKEpTQ2VsbCogY2VsbCkKK3sKKyAgICBBU1NFUlQo
IWNlbGwtPmlzWmFwcGVkKCkpOworICAgIG1fY29sbGVjdG9yU3RhY2suYXBwZW5kKGNlbGwpOwor
fQorCit2b2lkIFZlcmlmaWVyU2xvdFZpc2l0b3I6OmFwcGVuZFVuYmFycmllcmVkKEpTQ2VsbCog
Y2VsbCkKK3sKKyAgICBpZiAoIWNlbGwpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChVTkxJ
S0VMWShjZWxsLT5pc1ByZWNpc2VBbGxvY2F0aW9uKCkpKSB7CisgICAgICAgIGlmIChMSUtFTFko
aXNNYXJrZWQoY2VsbC0+cHJlY2lzZUFsbG9jYXRpb24oKSwgY2VsbCkpKQorICAgICAgICAgICAg
cmV0dXJuOworICAgIH0gZWxzZSB7CisgICAgICAgIE1hcmtlZEJsb2NrJiBibG9jayA9IGNlbGwt
Pm1hcmtlZEJsb2NrKCk7CisgICAgICAgIGlmIChMSUtFTFkoaXNNYXJrZWQoYmxvY2ssIGNlbGwp
KSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBhcHBlbmRTbG93KGNlbGwpOwor
fQorCit2b2lkIFZlcmlmaWVyU2xvdFZpc2l0b3I6OmFwcGVuZEhpZGRlblVuYmFycmllcmVkKEpT
Q2VsbCogY2VsbCkKK3sKKyAgICBhcHBlbmRVbmJhcnJpZXJlZChjZWxsKTsKK30KKwordm9pZCBW
ZXJpZmllclNsb3RWaXNpdG9yOjpkcmFpbigpCit7CisgICAgUkVMRUFTRV9BU1NFUlQobV9tdXRh
dG9yU3RhY2suaXNFbXB0eSgpKTsKKworICAgIE1hcmtTdGFja0FycmF5JiBzdGFjayA9IG1fY29s
bGVjdG9yU3RhY2s7CisgICAgaWYgKHN0YWNrLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgc3RhY2sucmVmaWxsKCk7CisgICAgd2hpbGUgKHN0YWNrLmNhblJlbW92ZUxhc3QoKSkK
KyAgICAgICAgdmlzaXRDaGlsZHJlbihzdGFjay5yZW1vdmVMYXN0KCkpOworfQorCit2b2lkIFZl
cmlmaWVyU2xvdFZpc2l0b3I6OmR1bXBNYXJrZXJEYXRhKEhlYXBDZWxsKiBjZWxsKQoreworICAg
IGlmIChjZWxsLT5pc1ByZWNpc2VBbGxvY2F0aW9uKCkpCisgICAgICAgIHJldHVybiBkdW1wTWFy
a2VyRGF0YShjZWxsLT5wcmVjaXNlQWxsb2NhdGlvbigpLCBjZWxsKTsKKyAgICByZXR1cm4gZHVt
cE1hcmtlckRhdGEoY2VsbC0+bWFya2VkQmxvY2soKSwgY2VsbCk7Cit9CisKK3ZvaWQgVmVyaWZp
ZXJTbG90VmlzaXRvcjo6ZHVtcE1hcmtlckRhdGEoUHJlY2lzZUFsbG9jYXRpb24mIGFsbG9jYXRp
b24sIEhlYXBDZWxsKiBjZWxsKQoreworICAgIGF1dG8gaXRlcmF0b3IgPSBtX3ByZWNpc2VBbGxv
Y2F0aW9uTWFwLmZpbmQoJmFsbG9jYXRpb24pOworICAgIGlmIChpdGVyYXRvciAhPSBtX3ByZWNp
c2VBbGxvY2F0aW9uTWFwLmVuZCgpKSB7CisgICAgICAgIGR1bXBNYXJrZXJEYXRhKGNlbGwsIGl0
ZXJhdG9yLT52YWx1ZS0+bWFya2VyRGF0YSgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICBkYXRhTG9nTG4oIkNlbGwgIiwgUmF3UG9pbnRlcihjZWxsKSwgIiBub3QgZm91bmQiKTsKK30K
Kwordm9pZCBWZXJpZmllclNsb3RWaXNpdG9yOjpkdW1wTWFya2VyRGF0YShNYXJrZWRCbG9jayYg
YmxvY2ssIEhlYXBDZWxsKiBjZWxsKQoreworICAgIGF1dG8gaXRlcmF0b3IgPSBtX21hcmtlZEJs
b2NrTWFwLmZpbmQoJmJsb2NrKTsKKyAgICBpZiAoaXRlcmF0b3IgIT0gbV9tYXJrZWRCbG9ja01h
cC5lbmQoKSkgeworICAgICAgICB1bnNpZ25lZCBhdG9tTnVtYmVyID0gYmxvY2suYXRvbU51bWJl
cihjZWxsKTsKKyAgICAgICAgZHVtcE1hcmtlckRhdGEoY2VsbCwgaXRlcmF0b3ItPnZhbHVlLT5t
YXJrZXJEYXRhKGF0b21OdW1iZXIpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBkYXRh
TG9nTG4oIkNlbGwgIiwgUmF3UG9pbnRlcihjZWxsKSwgIiBub3QgZm91bmQiKTsKK30KKwordm9p
ZCBWZXJpZmllclNsb3RWaXNpdG9yOjpkdW1wTWFya2VyRGF0YShIZWFwQ2VsbCogY2VsbCwgY29u
c3QgTWFya2VyRGF0YSogbWFya2VyKQoreworICAgIGlmICghbWFya2VyKSB7CisgICAgICAgIGRh
dGFMb2dMbigiTWFya2VyIGRhdGEgaXMgbm90IGF2YWlsYWJsZSBmb3IgY2VsbCAiLCBSYXdQb2lu
dGVyKGNlbGwpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGRhdGFMb2dMbigiQ2Vs
bCAiLCBSYXdQb2ludGVyKGNlbGwpLCAiIHdhcyByZWFjaGFibGUgdmlhIGNlbGwgIiwgUmF3UG9p
bnRlcihtYXJrZXItPnBhcmVudCksICIgYXQ6Iik7CisgICAgbWFya2VyLT5zdGFjay0+ZHVtcChX
VEY6OmRhdGFGaWxlKCksICIgICAgIik7Cit9CisKK2Jvb2wgVmVyaWZpZXJTbG90VmlzaXRvcjo6
aXNGaXJzdFZpc2l0KCkgY29uc3QKK3sKKyAgICAvLyBJbiB0aGUgcmVndWxhciBHQywgdGhpcyBy
ZXR1cm4gdmFsdWUgaXMgb25seSB1c2VkIHRvIGNvbnRyb2wgd2hldGhlcgorICAgIC8vIFVubGlu
a2VkQ29kZUJsb2NrcyB3aWxsIGJlIGFnZWQgKHNlZSBVbmxpbmtlZENvZGVCbG9jazo6dmlzaXRD
aGlsZHJlbkltcGwoKSkuCisgICAgLy8gRm9yIHRoZSB2ZXJpZmllciBHQyBwYXNzLCB3ZSBzaG91
bGQgYWx3YXlzIHJldHVybiBmYWxzZSBiZWNhdXNlIHdlIGRvbid0CisgICAgLy8gd2FudCB0byBk
byB0aGUgYWdpbmcgYWN0aW9uIGFnYWluLgorICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBW
ZXJpZmllclNsb3RWaXNpdG9yOjppc01hcmtlZChjb25zdCB2b2lkKiByYXdDZWxsKSBjb25zdAor
eworICAgIEhlYXBDZWxsKiBjZWxsID0gYml0d2lzZV9jYXN0PEhlYXBDZWxsKj4ocmF3Q2VsbCk7
CisgICAgaWYgKGNlbGwtPmlzUHJlY2lzZUFsbG9jYXRpb24oKSkKKyAgICAgICAgcmV0dXJuIGlz
TWFya2VkKGNlbGwtPnByZWNpc2VBbGxvY2F0aW9uKCksIGNlbGwpOworICAgIHJldHVybiBpc01h
cmtlZChjZWxsLT5tYXJrZWRCbG9jaygpLCBjZWxsKTsKK30KKworYm9vbCBWZXJpZmllclNsb3RW
aXNpdG9yOjppc01hcmtlZChQcmVjaXNlQWxsb2NhdGlvbiYgYWxsb2NhdGlvbiwgSGVhcENlbGwq
KSBjb25zdAoreworICAgIHJldHVybiBtX3ByZWNpc2VBbGxvY2F0aW9uTWFwLmNvbnRhaW5zKCZh
bGxvY2F0aW9uKTsKK30KKworYm9vbCBWZXJpZmllclNsb3RWaXNpdG9yOjppc01hcmtlZChNYXJr
ZWRCbG9jayYgYmxvY2ssIEhlYXBDZWxsKiBjZWxsKSBjb25zdAoreworICAgIGF1dG8gZW50cnkg
PSBtX21hcmtlZEJsb2NrTWFwLmZpbmQoJmJsb2NrKTsKKyAgICBpZiAoZW50cnkgPT0gbV9tYXJr
ZWRCbG9ja01hcC5lbmQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYXV0byYgZGF0
YSA9IGVudHJ5LT52YWx1ZTsKKyAgICB1bnNpZ25lZCBhdG9tTnVtYmVyID0gYmxvY2suYXRvbU51
bWJlcihjZWxsKTsKKyAgICByZXR1cm4gZGF0YS0+aXNNYXJrZWQoYXRvbU51bWJlcik7Cit9CisK
K3ZvaWQgVmVyaWZpZXJTbG90VmlzaXRvcjo6bWFya0F1eGlsaWFyeShjb25zdCB2b2lkKiBiYXNl
KQoreworICAgIEhlYXBDZWxsKiBjZWxsID0gYml0d2lzZV9jYXN0PEhlYXBDZWxsKj4oYmFzZSk7
CisKKyAgICBBU1NFUlQoY2VsbC0+aGVhcCgpID09IGhlYXAoKSk7CisgICAgdGVzdEFuZFNldE1h
cmtlZChjZWxsKTsKK30KKworYm9vbCBWZXJpZmllclNsb3RWaXNpdG9yOjptdXRhdG9ySXNTdG9w
cGVkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBWZXJpZmllclNsb3RW
aXNpdG9yOjp0ZXN0QW5kU2V0TWFya2VkKGNvbnN0IHZvaWQqIHJhd0NlbGwpCit7CisgICAgSGVh
cENlbGwqIGNlbGwgPSBiaXR3aXNlX2Nhc3Q8SGVhcENlbGwqPihyYXdDZWxsKTsKKyAgICBpZiAo
Y2VsbC0+aXNQcmVjaXNlQWxsb2NhdGlvbigpKQorICAgICAgICByZXR1cm4gdGVzdEFuZFNldE1h
cmtlZChjZWxsLT5wcmVjaXNlQWxsb2NhdGlvbigpKTsKKyAgICByZXR1cm4gdGVzdEFuZFNldE1h
cmtlZChjZWxsLT5tYXJrZWRCbG9jaygpLCBjZWxsKTsKK30KKworYm9vbCBWZXJpZmllclNsb3RW
aXNpdG9yOjp0ZXN0QW5kU2V0TWFya2VkKFByZWNpc2VBbGxvY2F0aW9uJiBhbGxvY2F0aW9uKQor
eworICAgIHN0ZDo6dW5pcXVlX3B0cjxQcmVjaXNlQWxsb2NhdGlvbkRhdGE+JiBkYXRhID0gbV9w
cmVjaXNlQWxsb2NhdGlvbk1hcC5hZGQoJmFsbG9jYXRpb24sIG51bGxwdHIpLml0ZXJhdG9yLT52
YWx1ZTsKKyAgICBpZiAoIWRhdGEpIHsKKyAgICAgICAgZGF0YSA9IG1ha2VVbmlxdWU8UHJlY2lz
ZUFsbG9jYXRpb25EYXRhPigmYWxsb2NhdGlvbik7CisgICAgICAgIGlmIChVTkxJS0VMWShPcHRp
b25zOjp2ZXJib3NlVmVyaWZ5R0MoKSkpCisgICAgICAgICAgICBkYXRhLT5hZGRNYXJrZXJEYXRh
KHsgcGFyZW50Q2VsbCgpLCBTdGFja1RyYWNlOjpjYXB0dXJlU3RhY2tUcmFjZShtYXhNYXJraW5n
U3RhY2tGcmFtZXNUb0NhcHR1cmUsIDIpIH0pOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorICAgIHJldHVybiB0cnVlOworfQorCitib29sIFZlcmlmaWVyU2xvdFZpc2l0b3I6OnRlc3RB
bmRTZXRNYXJrZWQoTWFya2VkQmxvY2smIGJsb2NrLCBIZWFwQ2VsbCogY2VsbCkKK3sKKyAgICBN
YXJrZWRCbG9ja0RhdGEqIGRhdGEgPSBibG9jay52ZXJpZmllck1lbW88TWFya2VkQmxvY2tEYXRh
Kj4oKTsKKyAgICBpZiAoVU5MSUtFTFkoIWRhdGEpKSB7CisgICAgICAgIHN0ZDo6dW5pcXVlX3B0
cjxNYXJrZWRCbG9ja0RhdGE+JiBlbnRyeURhdGEgPSBtX21hcmtlZEJsb2NrTWFwLmFkZCgmYmxv
Y2ssIG51bGxwdHIpLml0ZXJhdG9yLT52YWx1ZTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWVu
dHJ5RGF0YSk7CisgICAgICAgIGVudHJ5RGF0YSA9IG1ha2VVbmlxdWU8TWFya2VkQmxvY2tEYXRh
PigmYmxvY2spOworICAgICAgICBkYXRhID0gZW50cnlEYXRhLmdldCgpOworICAgICAgICBibG9j
ay5zZXRWZXJpZmllck1lbW8oZGF0YSk7CisgICAgfQorCisgICAgdW5zaWduZWQgYXRvbU51bWJl
ciA9IGJsb2NrLmF0b21OdW1iZXIoY2VsbCk7CisgICAgYm9vbCBhbHJlYWR5U2V0ID0gZGF0YS0+
dGVzdEFuZFNldE1hcmtlZChhdG9tTnVtYmVyKTsKKyAgICBpZiAoIWFscmVhZHlTZXQgJiYgVU5M
SUtFTFkoT3B0aW9uczo6dmVyYm9zZVZlcmlmeUdDKCkpKQorICAgICAgICBkYXRhLT5hZGRNYXJr
ZXJEYXRhKGF0b21OdW1iZXIsIHsgcGFyZW50Q2VsbCgpLCBTdGFja1RyYWNlOjpjYXB0dXJlU3Rh
Y2tUcmFjZShtYXhNYXJraW5nU3RhY2tGcmFtZXNUb0NhcHR1cmUsIDIpIH0pOworICAgIHJldHVy
biBhbHJlYWR5U2V0OworfQorCit2b2lkIFZlcmlmaWVyU2xvdFZpc2l0b3I6OnNldE1hcmtlZEFu
ZEFwcGVuZFRvTWFya1N0YWNrKEpTQ2VsbCogY2VsbCkKK3sKKyAgICBpZiAobV9zdXBwcmVzc1Zl
cmlmaWVyKQorICAgICAgICByZXR1cm47CisgICAgaWYgKHRlc3RBbmRTZXRNYXJrZWQoY2VsbCkp
CisgICAgICAgIHJldHVybjsKKyAgICBhcHBlbmRUb01hcmtTdGFjayhjZWxsKTsKK30KKwordm9p
ZCBWZXJpZmllclNsb3RWaXNpdG9yOjp2aXNpdEFzQ29uc3RyYWludChjb25zdCBKU0NlbGwqIGNl
bGwpCit7CisgICAgdmlzaXRDaGlsZHJlbihjZWxsKTsKK30KKwordm9pZCBWZXJpZmllclNsb3RW
aXNpdG9yOjp2aXNpdENoaWxkcmVuKGNvbnN0IEpTQ2VsbCogY2VsbCkKK3sKKyAgICBSRUxFQVNF
X0FTU0VSVChpc01hcmtlZChjZWxsKSk7CisgICAgc3dpdGNoIChjZWxsLT50eXBlKCkpIHsKKyAg
ICBjYXNlIFN0cmluZ1R5cGU6CisgICAgICAgIEpTU3RyaW5nOjp2aXNpdENoaWxkcmVuKGNvbnN0
X2Nhc3Q8SlNDZWxsKj4oY2VsbCksICp0aGlzKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgIAor
ICAgIGNhc2UgRmluYWxPYmplY3RUeXBlOgorICAgICAgICBKU0ZpbmFsT2JqZWN0Ojp2aXNpdENo
aWxkcmVuKGNvbnN0X2Nhc3Q8SlNDZWxsKj4oY2VsbCksICp0aGlzKTsKKyAgICAgICAgYnJlYWs7
CisKKyAgICBjYXNlIEFycmF5VHlwZToKKyAgICAgICAgSlNBcnJheTo6dmlzaXRDaGlsZHJlbihj
b25zdF9jYXN0PEpTQ2VsbCo+KGNlbGwpLCAqdGhpcyk7CisgICAgICAgIGJyZWFrOworICAgICAg
ICAKKyAgICBkZWZhdWx0OgorICAgICAgICAvLyBGSVhNRTogVGhpcyBjb3VsZCBiZSBzbyBtdWNo
IGJldHRlci4KKyAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE2MjQ2MgorICAgICAgICBjZWxsLT5tZXRob2RUYWJsZSh2bSgpKS0+dmlzaXRDaGlsZHJl
bihjb25zdF9jYXN0PEpTQ2VsbCo+KGNlbGwpLCAqdGhpcyk7CisgICAgICAgIGJyZWFrOworICAg
IH0KK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9WZXJpZmllclNsb3RWaXNpdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvVmVyaWZpZXJTbG90VmlzaXRvci5oCShub25leGlzdGVudCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1ZlcmlmaWVyU2xvdFZpc2l0b3IuaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDE3MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQWJzdHJhY3RTbG90VmlzaXRvci5o
IgorI2luY2x1ZGUgIkpTQ0pTVmFsdWUuaCIKKyNpbmNsdWRlICJNYXJrZWRCbG9jay5oIgorI2lu
Y2x1ZGUgIlZpc2l0UmFjZUtleS5oIgorI2luY2x1ZGUgIldlYWsuaCIKKyNpbmNsdWRlIDxtZW1v
cnk+CisjaW5jbHVkZSA8d3RmL0JpdG1hcC5oPgorI2luY2x1ZGUgPHd0Zi9EZXF1ZS5oPgorI2lu
Y2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNs
dWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1NoYXJlZFRhc2suaD4KKworbmFtZXNw
YWNlIFdURiB7CisKK2NsYXNzIFN0YWNrVHJhY2U7CisKK30gLy8gbmFtZXNwYWNlIFdURgorCitu
YW1lc3BhY2UgSlNDIHsKKworY2xhc3MgQ29uc2VydmF0aXZlUm9vdHM7CitjbGFzcyBIZWFwOwor
Y2xhc3MgSGVhcENlbGw7CitjbGFzcyBQcmVjaXNlQWxsb2NhdGlvbjsKKwordXNpbmcgV1RGOjpT
dGFja1RyYWNlOworCitjbGFzcyBWZXJpZmllclNsb3RWaXNpdG9yIDogcHVibGljIEFic3RyYWN0
U2xvdFZpc2l0b3IgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFZlcmlmaWVyU2xvdFZpc2l0
b3IpOworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworICAgIHVzaW5nIEJhc2UgPSBBYnN0
cmFjdFNsb3RWaXNpdG9yOworcHVibGljOgorICAgIHN0cnVjdCBNYXJrZXJEYXRhIHsKKyAgICAg
ICAgTWFya2VyRGF0YSgpID0gZGVmYXVsdDsKKyAgICAgICAgTWFya2VyRGF0YShNYXJrZXJEYXRh
JiYpID0gZGVmYXVsdDsKKyAgICAgICAgTWFya2VyRGF0YShIZWFwQ2VsbCosIHN0ZDo6dW5pcXVl
X3B0cjxTdGFja1RyYWNlPiYmKTsKKyAgICAgICAgTWFya2VyRGF0YSYgb3BlcmF0b3I9KE1hcmtl
ckRhdGEmJikgPSBkZWZhdWx0OworCisgICAgICAgIEhlYXBDZWxsKiBwYXJlbnQgeyBudWxscHRy
IH07CisgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxTdGFja1RyYWNlPiBzdGFjazsKKyAgICB9Owor
CisgICAgVmVyaWZpZXJTbG90VmlzaXRvcihIZWFwJik7CisgICAgflZlcmlmaWVyU2xvdFZpc2l0
b3IoKTsKKworICAgIHZvaWQgYXBwZW5kKGNvbnN0IENvbnNlcnZhdGl2ZVJvb3RzJikgZmluYWw7
CisgICAgdm9pZCBhcHBlbmRVbmJhcnJpZXJlZChKU0NlbGwqKSBmaW5hbDsKKyAgICB2b2lkIGFw
cGVuZEhpZGRlblVuYmFycmllcmVkKEpTQ2VsbCopIGZpbmFsOworCisgICAgYm9vbCBpc0ZpcnN0
VmlzaXQoKSBjb25zdCBmaW5hbDsKKyAgICBib29sIGlzTWFya2VkKGNvbnN0IHZvaWQqKSBjb25z
dCBmaW5hbDsKKyAgICBib29sIGlzTWFya2VkKE1hcmtlZEJsb2NrJiwgSGVhcENlbGwqKSBjb25z
dCBmaW5hbDsKKyAgICBib29sIGlzTWFya2VkKFByZWNpc2VBbGxvY2F0aW9uJiwgSGVhcENlbGwq
KSBjb25zdCBmaW5hbDsKKworICAgIHZvaWQgbWFya0F1eGlsaWFyeShjb25zdCB2b2lkKikgZmlu
YWw7CisKKyAgICB2b2lkIHJlcG9ydEV4dHJhTWVtb3J5VmlzaXRlZChzaXplX3QpIGZpbmFsIHsg
fQorI2lmIEVOQUJMRShSRVNPVVJDRV9VU0FHRSkKKyAgICB2b2lkIHJlcG9ydEV4dGVybmFsTWVt
b3J5VmlzaXRlZChzaXplX3QpIGZpbmFsIHsgfQorI2VuZGlmCisKKyAgICBib29sIG11dGF0b3JJ
c1N0b3BwZWQoKSBjb25zdCBmaW5hbDsKKworICAgIHZvaWQgZGlkUmFjZShjb25zdCBWaXNpdFJh
Y2VLZXkmKSBmaW5hbCB7IH0KKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdCBmaW5h
bCB7IH0KKworICAgIHZvaWQgdmlzaXRBc0NvbnN0cmFpbnQoY29uc3QgSlNDZWxsKikgZmluYWw7
CisKKyAgICB2b2lkIGRyYWluKCk7CisKKyAgICB2b2lkIGFkZFBhcmFsbGVsQ29uc3RyYWludFRh
c2soUmVmUHRyPFNoYXJlZFRhc2s8dm9pZChBYnN0cmFjdFNsb3RWaXNpdG9yJik+PikgZmluYWw7
CisgICAgTk9fUkVUVVJOX0RVRV9UT19DUkFTSCB2b2lkIGFkZFBhcmFsbGVsQ29uc3RyYWludFRh
c2soUmVmUHRyPFNoYXJlZFRhc2s8dm9pZChTbG90VmlzaXRvciYpPj4pIGZpbmFsOworICAgIHZv
aWQgZXhlY3V0ZUNvbnN0cmFpbnRUYXNrcygpOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVu
Y3Rvcj4gdm9pZCBmb3JFYWNoTGl2ZUNlbGwoY29uc3QgRnVuY3RvciYpOworICAgIHRlbXBsYXRl
PHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaExpdmVQcmVjaXNlQWxsb2NhdGlvbihjb25z
dCBGdW5jdG9yJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBmb3JFYWNo
TGl2ZU1hcmtlZEJsb2NrQ2VsbChjb25zdCBGdW5jdG9yJik7CisKKyAgICBKU19FWFBPUlRfUFJJ
VkFURSB2b2lkIGR1bXBNYXJrZXJEYXRhKEhlYXBDZWxsKik7CisKK3ByaXZhdGU6CisgICAgY2xh
c3MgTWFya2VkQmxvY2tEYXRhIHsKKyAgICAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Cisg
ICAgICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKE1hcmtlZEJsb2NrRGF0YSk7CisgICAgcHVibGlj
OgorICAgICAgICB1c2luZyBBdG9tc0JpdG1hcCA9IEJpdG1hcDxNYXJrZWRCbG9jazo6YXRvbXNQ
ZXJCbG9jaz47CisKKyAgICAgICAgTWFya2VkQmxvY2tEYXRhKE1hcmtlZEJsb2NrKik7CisKKyAg
ICAgICAgTWFya2VkQmxvY2sqIGJsb2NrKCkgY29uc3QgeyByZXR1cm4gbV9ibG9jazsgfQorICAg
ICAgICBjb25zdCBBdG9tc0JpdG1hcCYgYXRvbXMoKSBjb25zdCB7IHJldHVybiBtX2F0b21zOyB9
CisKKyAgICAgICAgYm9vbCBpc01hcmtlZCh1bnNpZ25lZCBhdG9tTnVtYmVyKSB7IHJldHVybiBt
X2F0b21zLmdldChhdG9tTnVtYmVyKTsgfQorICAgICAgICBib29sIHRlc3RBbmRTZXRNYXJrZWQo
dW5zaWduZWQgYXRvbU51bWJlcikgeyByZXR1cm4gbV9hdG9tcy50ZXN0QW5kU2V0KGF0b21OdW1i
ZXIpOyB9CisKKyAgICAgICAgdm9pZCBhZGRNYXJrZXJEYXRhKHVuc2lnbmVkIGF0b21OdW1iZXIs
IE1hcmtlckRhdGEmJik7CisgICAgICAgIGNvbnN0IE1hcmtlckRhdGEqIG1hcmtlckRhdGEodW5z
aWduZWQgYXRvbU51bWJlcikgY29uc3Q7CisKKyAgICBwcml2YXRlOgorICAgICAgICBNYXJrZWRC
bG9jayogbV9ibG9jayB7IG51bGxwdHIgfTsKKyAgICAgICAgQXRvbXNCaXRtYXAgbV9hdG9tczsK
KyAgICAgICAgVmVjdG9yPE1hcmtlckRhdGE+IG1fbWFya2VyczsKKyAgICB9OworCisgICAgY2xh
c3MgUHJlY2lzZUFsbG9jYXRpb25EYXRhIHsKKyAgICAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FU
RUQ7CisgICAgICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFByZWNpc2VBbGxvY2F0aW9uRGF0YSk7
CisgICAgcHVibGljOgorICAgICAgICBQcmVjaXNlQWxsb2NhdGlvbkRhdGEoUHJlY2lzZUFsbG9j
YXRpb24qKTsKKyAgICAgICAgUHJlY2lzZUFsbG9jYXRpb24qIGFsbG9jYXRpb24oKSBjb25zdCB7
IHJldHVybiBtX2FsbG9jYXRpb247IH0KKworICAgICAgICB2b2lkIGFkZE1hcmtlckRhdGEoTWFy
a2VyRGF0YSYmKTsKKyAgICAgICAgY29uc3QgTWFya2VyRGF0YSogbWFya2VyRGF0YSgpIGNvbnN0
OworCisgICAgcHJpdmF0ZToKKyAgICAgICAgUHJlY2lzZUFsbG9jYXRpb24qIG1fYWxsb2NhdGlv
biB7IG51bGxwdHIgfTsKKyAgICAgICAgTWFya2VyRGF0YSBtX21hcmtlcjsKKyAgICB9OworCisg
ICAgdXNpbmcgTWFya2VkQmxvY2tNYXAgPSBIYXNoTWFwPE1hcmtlZEJsb2NrKiwgc3RkOjp1bmlx
dWVfcHRyPE1hcmtlZEJsb2NrRGF0YT4+OworICAgIHVzaW5nIFByZWNpc2VBbGxvY2F0aW9uTWFw
ID0gSGFzaE1hcDxQcmVjaXNlQWxsb2NhdGlvbiosIHN0ZDo6dW5pcXVlX3B0cjxQcmVjaXNlQWxs
b2NhdGlvbkRhdGE+PjsKKworICAgIHZvaWQgYXBwZW5kVG9NYXJrU3RhY2soSlNDZWxsKik7Cisg
ICAgdm9pZCBhcHBlbmRTbG93KEpTQ2VsbCogY2VsbCkgeyBzZXRNYXJrZWRBbmRBcHBlbmRUb01h
cmtTdGFjayhjZWxsKTsgfQorCisgICAgYm9vbCB0ZXN0QW5kU2V0TWFya2VkKGNvbnN0IHZvaWQq
IHJhd0NlbGwpOworICAgIGJvb2wgdGVzdEFuZFNldE1hcmtlZChQcmVjaXNlQWxsb2NhdGlvbiYp
OworICAgIGJvb2wgdGVzdEFuZFNldE1hcmtlZChNYXJrZWRCbG9jayYsIEhlYXBDZWxsKik7CisK
KyAgICB2b2lkIHNldE1hcmtlZEFuZEFwcGVuZFRvTWFya1N0YWNrKEpTQ2VsbCopOworCisgICAg
dm9pZCB2aXNpdENoaWxkcmVuKGNvbnN0IEpTQ2VsbCopOworCisgICAgdm9pZCBkdW1wTWFya2Vy
RGF0YShQcmVjaXNlQWxsb2NhdGlvbiYsIEhlYXBDZWxsKik7CisgICAgdm9pZCBkdW1wTWFya2Vy
RGF0YShNYXJrZWRCbG9jayYsIEhlYXBDZWxsKik7CisgICAgdm9pZCBkdW1wTWFya2VyRGF0YShI
ZWFwQ2VsbCosIGNvbnN0IE1hcmtlckRhdGEqKTsKKworICAgIFByZWNpc2VBbGxvY2F0aW9uTWFw
IG1fcHJlY2lzZUFsbG9jYXRpb25NYXA7CisgICAgTWFya2VkQmxvY2tNYXAgbV9tYXJrZWRCbG9j
a01hcDsKKyAgICBDb25jdXJyZW50UHRySGFzaFNldCBtX29wYXF1ZVJvb3RTdG9yYWdlOworICAg
IERlcXVlPFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoQWJzdHJhY3RTbG90VmlzaXRvciYpPj4sIDMy
PiBtX2NvbnN0cmFpbnRUYXNrczsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVmVyaWZpZXJTbG90VmlzaXRvcklubGluZXMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9WZXJpZmllclNsb3RWaXNpdG9y
SW5saW5lcy5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Zl
cmlmaWVyU2xvdFZpc2l0b3JJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEg
b25jZQorCisjaW5jbHVkZSAiQWJzdHJhY3RTbG90VmlzaXRvcklubGluZXMuaCIKKyNpbmNsdWRl
ICJWZXJpZmllclNsb3RWaXNpdG9yLmgiCisKK25hbWVzcGFjZSBKU0MgeworCit0ZW1wbGF0ZTx0
eXBlbmFtZSBGdW5jdG9yPgordm9pZCBWZXJpZmllclNsb3RWaXNpdG9yOjpmb3JFYWNoTGl2ZUNl
bGwoY29uc3QgRnVuY3RvciYgZnVuY3RvcikKK3sKKyAgICBmb3JFYWNoTGl2ZVByZWNpc2VBbGxv
Y2F0aW9uKGZ1bmN0b3IpOworICAgIGZvckVhY2hMaXZlTWFya2VkQmxvY2tDZWxsKGZ1bmN0b3Ip
OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgordm9pZCBWZXJpZmllclNsb3RWaXNp
dG9yOjpmb3JFYWNoTGl2ZVByZWNpc2VBbGxvY2F0aW9uKGNvbnN0IEZ1bmN0b3ImIGZ1bmMpCit7
CisgICAgZm9yIChhdXRvJiBlbnRyeSA6IG1fcHJlY2lzZUFsbG9jYXRpb25NYXApIHsKKyAgICAg
ICAgUHJlY2lzZUFsbG9jYXRpb24qIGFsbG9jYXRpb24gPSBlbnRyeS52YWx1ZS0+YWxsb2NhdGlv
bigpOworICAgICAgICBmdW5jKGFsbG9jYXRpb24tPmNlbGwoKSk7CisgICAgfQorfQorCit0ZW1w
bGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgordm9pZCBWZXJpZmllclNsb3RWaXNpdG9yOjpmb3JFYWNo
TGl2ZU1hcmtlZEJsb2NrQ2VsbChjb25zdCBGdW5jdG9yJiBmdW5jKQoreworICAgIGZvciAoYXV0
byYgZW50cnkgOiBtX21hcmtlZEJsb2NrTWFwKSB7CisgICAgICAgIGF1dG8mIGRhdGEgPSBlbnRy
eS52YWx1ZTsKKyAgICAgICAgTWFya2VkQmxvY2sqIGJsb2NrID0gZGF0YS0+YmxvY2soKTsKKyAg
ICAgICAgY29uc3QgTWFya2VkQmxvY2tEYXRhOjpBdG9tc0JpdG1hcCYgYXRvbXMgPSAgZGF0YS0+
YXRvbXMoKTsKKyAgICAgICAgZm9yIChhdXRvIGF0b21OdW1iZXIgOiBhdG9tcykKKyAgICAgICAg
ICAgIGZ1bmMoYml0d2lzZV9jYXN0PEhlYXBDZWxsKj4oYmxvY2stPmhhbmRsZSgpLmF0b21BdChh
dG9tTnVtYmVyKSkpOworICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9WaXNpdENvdW50ZXIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9WaXNpdENvdW50ZXIuaAkocmV2aXNpb24gMjcyODMwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVmlzaXRDb3VudGVyLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIxIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtMjUsNyArMjUsNyBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgIlNsb3RWaXNpdG9y
LmgiCisjaW5jbHVkZSAiQWJzdHJhY3RTbG90VmlzaXRvci5oIgogCiBuYW1lc3BhY2UgSlNDIHsK
IApAQCAtMzMsMTMgKzMzLDEzIEBAIGNsYXNzIFZpc2l0Q291bnRlciB7CiBwdWJsaWM6CiAgICAg
VmlzaXRDb3VudGVyKCkgeyB9CiAgICAgCi0gICAgVmlzaXRDb3VudGVyKFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQorICAgIFZpc2l0Q291bnRlcihBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQog
ICAgICAgICA6IG1fdmlzaXRvcigmdmlzaXRvcikKICAgICAgICAgLCBtX2luaXRpYWxWaXNpdENv
dW50KHZpc2l0b3IudmlzaXRDb3VudCgpKQogICAgIHsKICAgICB9CiAgICAgCi0gICAgU2xvdFZp
c2l0b3ImIHZpc2l0b3IoKSBjb25zdCB7IHJldHVybiAqbV92aXNpdG9yOyB9CisgICAgQWJzdHJh
Y3RTbG90VmlzaXRvciYgdmlzaXRvcigpIGNvbnN0IHsgcmV0dXJuICptX3Zpc2l0b3I7IH0KICAg
ICAKICAgICBzaXplX3QgdmlzaXRDb3VudCgpIGNvbnN0CiAgICAgewpAQCAtNDcsNyArNDcsNyBA
QCBwdWJsaWM6CiAgICAgfQogICAgIAogcHJpdmF0ZToKLSAgICBTbG90VmlzaXRvciogbV92aXNp
dG9yIHsgbnVsbHB0ciB9OworICAgIEFic3RyYWN0U2xvdFZpc2l0b3IqIG1fdmlzaXRvciB7IG51
bGxwdHIgfTsKICAgICBzaXplX3QgbV9pbml0aWFsVmlzaXRDb3VudCB7IDAgfTsKIH07CiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtCbG9jay5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha0Jsb2NrLmNwcAkocmV2aXNpb24gMjcy
ODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha0Jsb2NrLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxNyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTk4LDEyICs5OCwxMSBAQCB2b2lkIFdlYWtCbG9jazo6c3dlZXAoKQogICAg
IEFTU0VSVCghbV9zd2VlcFJlc3VsdC5pc051bGwoKSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1l
IENvbnRhaW5lclR5cGU+Ci12b2lkIFdlYWtCbG9jazo6c3BlY2lhbGl6ZWRWaXNpdChDb250YWlu
ZXJUeXBlJiBjb250YWluZXIsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5h
bWUgQ29udGFpbmVyVHlwZSwgdHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgV2Vha0Jsb2NrOjpzcGVj
aWFsaXplZFZpc2l0KENvbnRhaW5lclR5cGUmIGNvbnRhaW5lciwgVmlzaXRvciYgdmlzaXRvcikK
IHsKLSAgICBIZWFwVmVyc2lvbiBtYXJraW5nVmVyc2lvbiA9IHZpc2l0b3IubWFya2luZ1ZlcnNp
b24oKTsKLQogICAgIHNpemVfdCBjb3VudCA9IHdlYWtJbXBsQ291bnQoKTsKKyAgICBIZWFwQW5h
bHl6ZXIqIGhlYXBBbmFseXplciA9IHZpc2l0b3Iudm0oKS5hY3RpdmVIZWFwQW5hbHl6ZXIoKTsK
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKICAgICAgICAgV2Vha0lt
cGwqIHdlYWtJbXBsID0gJndlYWtJbXBscygpW2ldOwogICAgICAgICBpZiAod2Vha0ltcGwtPnN0
YXRlKCkgIT0gV2Vha0ltcGw6OkxpdmUpCkBAIC0xMTQsMTIgKzExMywxMiBAQCB2b2lkIFdlYWtC
bG9jazo6c3BlY2lhbGl6ZWRWaXNpdChDb250YWluCiAgICAgICAgICAgICBjb250aW51ZTsKIAog
ICAgICAgICBKU1ZhbHVlIGpzVmFsdWUgPSB3ZWFrSW1wbC0+anNWYWx1ZSgpOwotICAgICAgICBp
ZiAoY29udGFpbmVyLmlzTWFya2VkKG1hcmtpbmdWZXJzaW9uLCBqc1ZhbHVlLmFzQ2VsbCgpKSkK
KyAgICAgICAgaWYgKHZpc2l0b3IuaXNNYXJrZWQoY29udGFpbmVyLCBqc1ZhbHVlLmFzQ2VsbCgp
KSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAKICAgICAgICAgY29uc3QgY2hhciog
cmVhc29uID0gIiI7CiAgICAgICAgIGNvbnN0IGNoYXIqKiByZWFzb25QdHIgPSBudWxscHRyOwot
ICAgICAgICBpZiAoVU5MSUtFTFkodmlzaXRvci5pc0FuYWx5emluZ0hlYXAoKSkpCisgICAgICAg
IGlmIChVTkxJS0VMWShoZWFwQW5hbHl6ZXIpKQogICAgICAgICAgICAgcmVhc29uUHRyID0gJnJl
YXNvbjsKIAogICAgICAgICBpZiAoIXdlYWtIYW5kbGVPd25lci0+aXNSZWFjaGFibGVGcm9tT3Bh
cXVlUm9vdHMoSGFuZGxlPFVua25vd24+Ojp3cmFwU2xvdCgmY29uc3RfY2FzdDxKU1ZhbHVlJj4o
anNWYWx1ZSkpLCB3ZWFrSW1wbC0+Y29udGV4dCgpLCB2aXNpdG9yLCByZWFzb25QdHIpKQpAQCAt
MTI3LDE0ICsxMjYsMTUgQEAgdm9pZCBXZWFrQmxvY2s6OnNwZWNpYWxpemVkVmlzaXQoQ29udGFp
bgogCiAgICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQoanNWYWx1ZSk7CiAKLSAgICAg
ICAgaWYgKFVOTElLRUxZKHZpc2l0b3IuaXNBbmFseXppbmdIZWFwKCkpKSB7CisgICAgICAgIGlm
IChVTkxJS0VMWShoZWFwQW5hbHl6ZXIpKSB7CiAgICAgICAgICAgICBpZiAoanNWYWx1ZS5pc0Nl
bGwoKSkKLSAgICAgICAgICAgICAgICB2aXNpdG9yLmhlYXBBbmFseXplcigpLT5zZXRPcGFxdWVS
b290UmVhY2hhYmlsaXR5UmVhc29uRm9yQ2VsbChqc1ZhbHVlLmFzQ2VsbCgpLCAqcmVhc29uUHRy
KTsKKyAgICAgICAgICAgICAgICBoZWFwQW5hbHl6ZXItPnNldE9wYXF1ZVJvb3RSZWFjaGFiaWxp
dHlSZWFzb25Gb3JDZWxsKGpzVmFsdWUuYXNDZWxsKCksICpyZWFzb25QdHIpOwogICAgICAgICB9
CiAgICAgfQogfQogCi12b2lkIFdlYWtCbG9jazo6dmlzaXQoU2xvdFZpc2l0b3ImIHZpc2l0b3Ip
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgorQUxXQVlTX0lOTElORSB2b2lkIFdlYWtCbG9j
azo6dmlzaXRJbXBsKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgLy8gSWYgYSBibG9jayBpcyBj
b21wbGV0ZWx5IGVtcHR5LCBhIHZpc2l0IHdvbid0IGhhdmUgYW55IGVmZmVjdC4KICAgICBpZiAo
aXNFbXB0eSgpKQpAQCAtMTQ5LDYgKzE0OSw5IEBAIHZvaWQgV2Vha0Jsb2NrOjp2aXNpdChTbG90
VmlzaXRvciYgdmlzaXQKICAgICAgICAgc3BlY2lhbGl6ZWRWaXNpdChtX2NvbnRhaW5lci5tYXJr
ZWRCbG9jaygpLCB2aXNpdG9yKTsKIH0KIAordm9pZCBXZWFrQmxvY2s6OnZpc2l0KEFic3RyYWN0
U2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsgdmlzaXRJbXBsKHZpc2l0b3IpOyB9Cit2b2lkIFdlYWtC
bG9jazo6dmlzaXQoU2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsgdmlzaXRJbXBsKHZpc2l0b3IpOyB9
CisKIHZvaWQgV2Vha0Jsb2NrOjpyZWFwKCkKIHsKICAgICAvLyBJZiBhIGJsb2NrIGlzIGNvbXBs
ZXRlbHkgZW1wdHksIGEgcmVhcGluZyB3b24ndCBoYXZlIGFueSBlZmZlY3QuCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrQmxvY2suaAkocmV2aXNpb24gMjcyODMwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha0Jsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTkgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0z
Miw2ICszMiw3IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCitjbGFzcyBBYnN0cmFjdFNsb3RWaXNp
dG9yOwogY2xhc3MgSGVhcDsKIGNsYXNzIFNsb3RWaXNpdG9yOwogCkBAIC02NSw3ICs2Niw4IEBA
IHB1YmxpYzoKICAgICB2b2lkIHN3ZWVwKCk7CiAgICAgU3dlZXBSZXN1bHQgdGFrZVN3ZWVwUmVz
dWx0KCk7CiAKLSAgICB2b2lkIHZpc2l0KFNsb3RWaXNpdG9yJik7CisgICAgSlNfRVhQT1JUX1BS
SVZBVEUgdm9pZCB2aXNpdChBYnN0cmFjdFNsb3RWaXNpdG9yJik7CisgICAgSlNfRVhQT1JUX1BS
SVZBVEUgdm9pZCB2aXNpdChTbG90VmlzaXRvciYpOwogCiAgICAgdm9pZCByZWFwKCk7CiAKQEAg
LTczLDEwICs3NSwxMiBAQCBwdWJsaWM6CiAgICAgdm9pZCBkaXNjb25uZWN0Q29udGFpbmVyKCkg
eyBtX2NvbnRhaW5lciA9IENlbGxDb250YWluZXIoKTsgfQogCiBwcml2YXRlOgorICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgdmlzaXRJbXBsKFZpc2l0b3ImKTsKKwogICAgIHN0
YXRpYyBGcmVlQ2VsbCogYXNGcmVlQ2VsbChXZWFrSW1wbCopOwogICAgIAotICAgIHRlbXBsYXRl
PHR5cGVuYW1lIENvbnRhaW5lclR5cGU+Ci0gICAgdm9pZCBzcGVjaWFsaXplZFZpc2l0KENvbnRh
aW5lclR5cGUmLCBTbG90VmlzaXRvciYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIENvbnRhaW5l
clR5cGUsIHR5cGVuYW1lIFZpc2l0b3I+CisgICAgdm9pZCBzcGVjaWFsaXplZFZpc2l0KENvbnRh
aW5lclR5cGUmLCBWaXNpdG9yJik7CiAKICAgICBleHBsaWNpdCBXZWFrQmxvY2soQ2VsbENvbnRh
aW5lcik7CiAgICAgdm9pZCBmaW5hbGl6ZShXZWFrSW1wbCopOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvV2Vha0hhbmRsZU93bmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrSGFuZGxlT3duZXIuY3BwCShyZXZpc2lvbiAyNzI4MzAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrSGFuZGxlT3duZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTM1LDcgKzM1LDcgQEAgV2Vha0hhbmRsZU93bmVyOjp+V2Vha0hhbmRsZU93bmVy
KCkKIHsKIH0KIAotYm9vbCBXZWFrSGFuZGxlT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJv
b3RzKEhhbmRsZTxVbmtub3duPiwgdm9pZCosIFNsb3RWaXNpdG9yJiwgY29uc3QgY2hhcioqKQor
Ym9vbCBXZWFrSGFuZGxlT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEhhbmRsZTxV
bmtub3duPiwgdm9pZCosIEFic3RyYWN0U2xvdFZpc2l0b3ImLCBjb25zdCBjaGFyKiopCiB7CiAg
ICAgcmV0dXJuIGZhbHNlOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vh
a0hhbmRsZU93bmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
V2Vha0hhbmRsZU93bmVyLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL1dlYWtIYW5kbGVPd25lci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI5LDEzICsyOSwxMyBA
QAogCiBuYW1lc3BhY2UgSlNDIHsKIAotY2xhc3MgU2xvdFZpc2l0b3I7CitjbGFzcyBBYnN0cmFj
dFNsb3RWaXNpdG9yOwogCiBjbGFzcyBKU19FWFBPUlRfUFJJVkFURSBXZWFrSGFuZGxlT3duZXIg
ewogcHVibGljOgogICAgIHZpcnR1YWwgfldlYWtIYW5kbGVPd25lcigpOwogICAgIC8vIHJlYXNv
biB3aWxsIG9ubHkgYmUgbm9uLW51bGwgd2hlbiBnZW5lcmF0aW5nIGEgZGVidWcgR0MgaGVhcCBz
bmFwc2hvdC4KLSAgICB2aXJ0dWFsIGJvb2wgaXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSGFu
ZGxlPFVua25vd24+LCB2b2lkKiBjb250ZXh0LCBTbG90VmlzaXRvciYsIGNoYXIgY29uc3QqKiBy
ZWFzb24gPSBudWxscHRyKTsKKyAgICB2aXJ0dWFsIGJvb2wgaXNSZWFjaGFibGVGcm9tT3BhcXVl
Um9vdHMoSGFuZGxlPFVua25vd24+LCB2b2lkKiBjb250ZXh0LCBBYnN0cmFjdFNsb3RWaXNpdG9y
JiwgY2hhciBjb25zdCoqIHJlYXNvbiA9IG51bGxwdHIpOwogICAgIHZpcnR1YWwgdm9pZCBmaW5h
bGl6ZShIYW5kbGU8VW5rbm93bj4sIHZvaWQqIGNvbnRleHQpOwogfTsKIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha1NldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvV2Vha1NldC5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtTZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjMs
NCArMTIzLDcgQEAgdm9pZCBXZWFrU2V0OjpyZW1vdmVBbGxvY2F0b3IoV2Vha0Jsb2NrKgogICAg
IFdlYWtCbG9jazo6ZGVzdHJveSgqaGVhcCgpLCBibG9jayk7CiB9CiAKK3RlbXBsYXRlIHZvaWQg
V2Vha1NldDo6dmlzaXQoQWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBXZWFr
U2V0Ojp2aXNpdChTbG90VmlzaXRvciYpOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtTZXQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrU2V0LmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtTZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTUxLDcg
KzUxLDcgQEAgcHVibGljOgogICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0OwogICAgIGJvb2wgaXNU
cml2aWFsbHlEZXN0cnVjdGlibGUoKSBjb25zdDsKIAotICAgIHZvaWQgdmlzaXQoU2xvdFZpc2l0
b3ImKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIHZpc2l0KFZpc2l0b3Im
KTsKIAogICAgIHZvaWQgcmVhcCgpOwogICAgIHZvaWQgc3dlZXAoKTsKQEAgLTExNCw3ICsxMTQs
OCBAQCBpbmxpbmUgdm9pZCBXZWFrU2V0OjpsYXN0Q2hhbmNlVG9GaW5hbGl6CiAgICAgICAgIGJs
b2NrLT5sYXN0Q2hhbmNlVG9GaW5hbGl6ZSgpOwogfQogCi1pbmxpbmUgdm9pZCBXZWFrU2V0Ojp2
aXNpdChTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Citp
bmxpbmUgdm9pZCBXZWFrU2V0Ojp2aXNpdChWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGZvciAo
V2Vha0Jsb2NrKiBibG9jayA9IG1fYmxvY2tzLmhlYWQoKTsgYmxvY2s7IGJsb2NrID0gYmxvY2st
Pm5leHQoKSkKICAgICAgICAgYmxvY2stPnZpc2l0KHZpc2l0b3IpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1NoYWRvd0NoaWNrZW4uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TaGFkb3dDaGlja2VuLmNwcAkocmV2
aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1NoYWRv
d0NoaWNrZW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxNi0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDQwLDcgKzQ0MCw5IEBAIHZvaWQgU2hh
ZG93Q2hpY2tlbjo6dXBkYXRlKFZNJiB2bSwgQ2FsbEYKICAgICAgICAgZGF0YUxvZygiICAgIEFm
dGVyIGNsZWFuLXVwOiAiLCAqdGhpcywgIlxuIik7CiB9CiAKLXZvaWQgU2hhZG93Q2hpY2tlbjo6
dmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vIFdlIGRvbid0IG5lZWQgYSBT
bG90VmlzaXRvciB2ZXJzaW9uIG9mIHRoaXMgYmVjYXVzZSBTaGFkb3dDaGlja2VuIGlzIG9ubHkg
dXNlZCBieSB0aGUKKy8vIERlYnVnZ2VyLCBhbmQgaXMgdGhlcmVmb3JlIG5vdCBvbiB0aGUgY3Jp
dGljYWwgcGF0aCBmb3IgcGVyZm9ybWFuY2UuCit2b2lkIFNoYWRvd0NoaWNrZW46OnZpc2l0Q2hp
bGRyZW4oQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBmb3IgKHVuc2lnbmVk
IGkgPSBtX2xvZ0N1cnNvciAtIG1fbG9nOyBpLS07KSB7CiAgICAgICAgIEpTT2JqZWN0KiBjYWxs
ZWUgPSBtX2xvZ1tpXS5jYWxsZWU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJw
cmV0ZXIvU2hhZG93Q2hpY2tlbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnRlcnByZXRlci9TaGFkb3dDaGlja2VuLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TaGFkb3dDaGlja2VuLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIxIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtMzUsMTMgKzM1LDEzIEBACiAKIG5hbWVzcGFjZSBKU0MgewogCitjbGFzcyBBYnN0cmFjdFNs
b3RWaXNpdG9yOwogY2xhc3MgQ2FsbEZyYW1lOwogY2xhc3MgQ29kZUJsb2NrOwogY2xhc3MgSlNB
cnJheTsKIGNsYXNzIEpTT2JqZWN0OwogY2xhc3MgSlNTY29wZTsKIGNsYXNzIExMSW50T2Zmc2V0
c0V4dHJhY3RvcjsKLWNsYXNzIFNsb3RWaXNpdG9yOwogY2xhc3MgVk07CiAKIC8vIFNoYWRvd0No
aWNrZW4gaXMgYSBsb2cgdGhhdCBjYW4gYmUgdXNlZCB0byBwcm9kdWNlIGEgc2hhZG93IHN0YWNr
IG9mIENISUNLRU4tc3R5bGUgc3RhY2sgZnJhbWVzLgpAQCAtMTk2LDcgKzE5Niw3IEBAIHB1Ymxp
YzoKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgogICAgIHZvaWQgaXRlcmF0ZShWTSYs
IENhbGxGcmFtZSosIGNvbnN0IEZ1bmN0b3ImKTsKICAgICAKLSAgICB2b2lkIHZpc2l0Q2hpbGRy
ZW4oU2xvdFZpc2l0b3ImKTsKKyAgICB2b2lkIHZpc2l0Q2hpbGRyZW4oQWJzdHJhY3RTbG90Vmlz
aXRvciYpOwogICAgIHZvaWQgcmVzZXQoKTsKICAgICAKICAgICAvLyBKSVQgc3VwcG9ydC4KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvR0NBd2FyZUpJVFN0dWJSb3V0aW5lLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0dDQXdhcmVKSVRTdHViUm91
dGluZS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
R0NBd2FyZUpJVFN0dWJSb3V0aW5lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTczLDEwICs3Myw2
IEBAIHZvaWQgR0NBd2FyZUpJVFN0dWJSb3V0aW5lOjpkZWxldGVGcm9tR0MKICAgICBkZWxldGUg
dGhpczsKIH0KIAotdm9pZCBHQ0F3YXJlSklUU3R1YlJvdXRpbmU6Om1hcmtSZXF1aXJlZE9iamVj
dHNJbnRlcm5hbChTbG90VmlzaXRvciYpCi17Ci19Ci0KIE1hcmtpbmdHQ0F3YXJlSklUU3R1YlJv
dXRpbmU6Ok1hcmtpbmdHQ0F3YXJlSklUU3R1YlJvdXRpbmUoCiAgICAgY29uc3QgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiYgY29kZSwgVk0mIHZtLCBjb25zdCBK
U0NlbGwqIG93bmVyLAogICAgIGNvbnN0IFZlY3RvcjxKU0NlbGwqPiYgY2VsbHMsIEJhZzxDYWxs
TGlua0luZm8+JiYgY2FsbExpbmtJbmZvcykKQEAgLTkyLDEyICs4OCwyMSBAQCBNYXJraW5nR0NB
d2FyZUpJVFN0dWJSb3V0aW5lOjp+TWFya2luZ0dDCiB7CiB9CiAKLXZvaWQgTWFya2luZ0dDQXdh
cmVKSVRTdHViUm91dGluZTo6bWFya1JlcXVpcmVkT2JqZWN0c0ludGVybmFsKFNsb3RWaXNpdG9y
JiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK0FMV0FZU19JTkxJTkUgdm9p
ZCBNYXJraW5nR0NBd2FyZUpJVFN0dWJSb3V0aW5lOjptYXJrUmVxdWlyZWRPYmplY3RzSW50ZXJu
YWxJbXBsKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgZm9yIChhdXRvJiBlbnRyeSA6IG1fY2Vs
bHMpCiAgICAgICAgIHZpc2l0b3IuYXBwZW5kKGVudHJ5KTsKIH0KIAordm9pZCBNYXJraW5nR0NB
d2FyZUpJVFN0dWJSb3V0aW5lOjptYXJrUmVxdWlyZWRPYmplY3RzSW50ZXJuYWwoQWJzdHJhY3RT
bG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBtYXJrUmVxdWlyZWRPYmplY3RzSW50ZXJuYWxJ
bXBsKHZpc2l0b3IpOworfQordm9pZCBNYXJraW5nR0NBd2FyZUpJVFN0dWJSb3V0aW5lOjptYXJr
UmVxdWlyZWRPYmplY3RzSW50ZXJuYWwoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgbWFy
a1JlcXVpcmVkT2JqZWN0c0ludGVybmFsSW1wbCh2aXNpdG9yKTsKK30KIAogR0NBd2FyZUpJVFN0
dWJSb3V0aW5lV2l0aEV4Y2VwdGlvbkhhbmRsZXI6OkdDQXdhcmVKSVRTdHViUm91dGluZVdpdGhF
eGNlcHRpb25IYW5kbGVyKAogICAgIGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRTdHVi
Um91dGluZVB0clRhZz4mIGNvZGUsIFZNJiB2bSwgIGNvbnN0IEpTQ2VsbCogb3duZXIsIGNvbnN0
IFZlY3RvcjxKU0NlbGwqPiYgY2VsbHMsIEJhZzxDYWxsTGlua0luZm8+JiYgY2FsbExpbmtJbmZv
cywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvR0NBd2FyZUpJVFN0dWJSb3V0aW5l
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9HQ0F3YXJlSklUU3R1
YlJvdXRpbmUuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9HQ0F3YXJlSklUU3R1YlJvdXRpbmUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTYwLDggKzYwLDkg
QEAgcHVibGljOgogICAgIHsKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgR0NBd2FyZUpJ
VFN0dWJSb3V0aW5lKGNvZGUsIHZtKSk7CiAgICAgfQotICAgIAotICAgIHZvaWQgbWFya1JlcXVp
cmVkT2JqZWN0cyhTbG90VmlzaXRvciYgdmlzaXRvcikKKworICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFZpc2l0b3I+CisgICAgdm9pZCBtYXJrUmVxdWlyZWRPYmplY3RzKFZpc2l0b3ImIHZpc2l0b3Ip
CiAgICAgewogICAgICAgICBtYXJrUmVxdWlyZWRPYmplY3RzSW50ZXJuYWwodmlzaXRvcik7CiAg
ICAgfQpAQCAtNzEsNyArNzIsOCBAQCBwdWJsaWM6CiBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBvYnNl
cnZlWmVyb1JlZkNvdW50KCkgb3ZlcnJpZGU7CiAgICAgCi0gICAgdmlydHVhbCB2b2lkIG1hcmtS
ZXF1aXJlZE9iamVjdHNJbnRlcm5hbChTbG90VmlzaXRvciYpOworICAgIHZpcnR1YWwgdm9pZCBt
YXJrUmVxdWlyZWRPYmplY3RzSW50ZXJuYWwoQWJzdHJhY3RTbG90VmlzaXRvciYpIHsgfQorICAg
IHZpcnR1YWwgdm9pZCBtYXJrUmVxdWlyZWRPYmplY3RzSW50ZXJuYWwoU2xvdFZpc2l0b3ImKSB7
IH0KIAogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgSklUU3R1YlJvdXRpbmVTZXQ7CkBAIC04
OSw3ICs5MSw5IEBAIHB1YmxpYzoKICAgICB+TWFya2luZ0dDQXdhcmVKSVRTdHViUm91dGluZSgp
IG92ZXJyaWRlOwogICAgIAogcHJvdGVjdGVkOgotICAgIHZvaWQgbWFya1JlcXVpcmVkT2JqZWN0
c0ludGVybmFsKFNsb3RWaXNpdG9yJikgb3ZlcnJpZGU7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
VmlzaXRvcj4gdm9pZCBtYXJrUmVxdWlyZWRPYmplY3RzSW50ZXJuYWxJbXBsKFZpc2l0b3ImKTsK
KyAgICB2b2lkIG1hcmtSZXF1aXJlZE9iamVjdHNJbnRlcm5hbChBYnN0cmFjdFNsb3RWaXNpdG9y
JikgZmluYWw7CisgICAgdm9pZCBtYXJrUmVxdWlyZWRPYmplY3RzSW50ZXJuYWwoU2xvdFZpc2l0
b3ImKSBmaW5hbDsKIAogcHJpdmF0ZToKICAgICBWZWN0b3I8V3JpdGVCYXJyaWVyPEpTQ2VsbD4+
IG1fY2VsbHM7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFdvcmtsaXN0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFdvcmtsaXN0LmNw
cAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRXb3Jr
bGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDE2LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE2LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L1BvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L1BvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lLmNwcAkocmV2aXNpb24g
MjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Qb2x5bW9ycGhpY0NhbGxTdHVi
Um91dGluZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDE1LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE1LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMzUsMTIgKzEzNSwyMiBAQCBib29sIFBv
bHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lOjp2aXNpdFdlCiAgICAgcmV0dXJuIGlzU3RpbGxMaXZl
OwogfQogCi12b2lkIFBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lOjptYXJrUmVxdWlyZWRPYmpl
Y3RzSW50ZXJuYWwoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNp
dG9yPgorQUxXQVlTX0lOTElORSB2b2lkIFBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lOjptYXJr
UmVxdWlyZWRPYmplY3RzSW50ZXJuYWxJbXBsKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgZm9y
IChhdXRvJiB2YXJpYW50IDogbV92YXJpYW50cykKICAgICAgICAgdmlzaXRvci5hcHBlbmQodmFy
aWFudCk7CiB9CiAKK3ZvaWQgUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmU6Om1hcmtSZXF1aXJl
ZE9iamVjdHNJbnRlcm5hbChBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIG1h
cmtSZXF1aXJlZE9iamVjdHNJbnRlcm5hbEltcGwodmlzaXRvcik7Cit9Cit2b2lkIFBvbHltb3Jw
aGljQ2FsbFN0dWJSb3V0aW5lOjptYXJrUmVxdWlyZWRPYmplY3RzSW50ZXJuYWwoU2xvdFZpc2l0
b3ImIHZpc2l0b3IpCit7CisgICAgbWFya1JlcXVpcmVkT2JqZWN0c0ludGVybmFsSW1wbCh2aXNp
dG9yKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBFTkFCTEUoSklUKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Qb2x5bW9ycGhpY0NhbGxTdHViUm91dGlu
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUG9seW1vcnBoaWND
YWxsU3R1YlJvdXRpbmUuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9Qb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE4IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MTA1LDYgKzEwNSw4IEBAIHB1YmxpYzoKICAgICBib29sIHZpc2l0V2VhayhWTSYpIGZpbmFsOwog
CiBwcml2YXRlOgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgbWFya1JlcXVp
cmVkT2JqZWN0c0ludGVybmFsSW1wbChWaXNpdG9yJik7CisgICAgdm9pZCBtYXJrUmVxdWlyZWRP
YmplY3RzSW50ZXJuYWwoQWJzdHJhY3RTbG90VmlzaXRvciYpIGZpbmFsOwogICAgIHZvaWQgbWFy
a1JlcXVpcmVkT2JqZWN0c0ludGVybmFsKFNsb3RWaXNpdG9yJikgZmluYWw7CiAKICAgICBWZWN0
b3I8V3JpdGVCYXJyaWVyPEpTQ2VsbD4sIDI+IG1fdmFyaWFudHM7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9BYnN0cmFjdE1vZHVsZVJlY29yZC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQWJzdHJhY3RNb2R1bGVSZWNvcmQuY3Bw
CShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BYnN0
cmFjdE1vZHVsZVJlY29yZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02MCw3ICs2MCw4IEBAIHZv
aWQgQWJzdHJhY3RNb2R1bGVSZWNvcmQ6OmZpbmlzaENyZWF0aW8KICAgICBwdXREaXJlY3Qodm0s
IElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJkZXBlbmRlbmNpZXNNYXAiX3MpLCBtX2RlcGVu
ZGVuY2llc01hcC5nZXQoKSk7CiB9CiAKLXZvaWQgQWJzdHJhY3RNb2R1bGVSZWNvcmQ6OnZpc2l0
Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5
cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEFic3RyYWN0TW9kdWxlUmVjb3JkOjp2aXNpdENoaWxkcmVu
SW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgQWJzdHJhY3RNb2R1
bGVSZWNvcmQqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8QWJzdHJhY3RNb2R1bGVSZWNvcmQqPihjZWxs
KTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBA
IC03MCw2ICs3MSw4IEBAIHZvaWQgQWJzdHJhY3RNb2R1bGVSZWNvcmQ6OnZpc2l0Q2hpbGRyZW4K
ICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2RlcGVuZGVuY2llc01hcCk7CiB9CiAK
K0RFRklORV9WSVNJVF9DSElMRFJFTihBYnN0cmFjdE1vZHVsZVJlY29yZCk7CisKIHZvaWQgQWJz
dHJhY3RNb2R1bGVSZWNvcmQ6OmFwcGVuZFJlcXVlc3RlZE1vZHVsZShjb25zdCBJZGVudGlmaWVy
JiBtb2R1bGVOYW1lKQogewogICAgIG1fcmVxdWVzdGVkTW9kdWxlcy5hZGQobW9kdWxlTmFtZS5p
bXBsKCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQWJzdHJhY3RNb2R1
bGVSZWNvcmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9B
YnN0cmFjdE1vZHVsZVJlY29yZC5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9BYnN0cmFjdE1vZHVsZVJlY29yZC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEz
Niw3ICsxMzYsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgQWJzdHJhY3RNb2R1bGVSZWNvcmQoVk0mLCBT
dHJ1Y3R1cmUqLCBjb25zdCBJZGVudGlmaWVyJik7CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihK
U0dsb2JhbE9iamVjdCosIFZNJik7CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpT
Q2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAg
IHZvaWQgc2V0TW9kdWxlRW52aXJvbm1lbnQoSlNHbG9iYWxPYmplY3QqLCBKU01vZHVsZUVudmly
b25tZW50Kik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FyZ0xpc3Qu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FyZ0xpc3Qu
Y3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9B
cmdMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiAgQ29weXJp
Z2h0IChDKSAyMDAzLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENv
cHlyaWdodCAoQykgMjAwMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCkBAIC01MSw3ICs1MSw4IEBAIHZvaWQgQXJnTGlzdDo6Z2V0U2xp
Y2UoaW50IHN0YXJ0SW5kZXgsIEEKICAgICByZXN1bHQubV9hcmdDb3VudCA9ICBtX2FyZ0NvdW50
IC0gc3RhcnRJbmRleDsKIH0KIAotdm9pZCBNYXJrZWRBcmd1bWVudEJ1ZmZlcjo6bWFya0xpc3Rz
KFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBMaXN0U2V0JiBtYXJrU2V0KQordGVtcGxhdGU8dHlwZW5h
bWUgVmlzaXRvcj4KK3ZvaWQgTWFya2VkQXJndW1lbnRCdWZmZXI6Om1hcmtMaXN0cyhWaXNpdG9y
JiB2aXNpdG9yLCBMaXN0U2V0JiBtYXJrU2V0KQogewogICAgIExpc3RTZXQ6Oml0ZXJhdG9yIGVu
ZCA9IG1hcmtTZXQuZW5kKCk7CiAgICAgZm9yIChMaXN0U2V0OjppdGVyYXRvciBpdCA9IG1hcmtT
ZXQuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CkBAIC02MSw2ICs2Miw5IEBAIHZvaWQgTWFy
a2VkQXJndW1lbnRCdWZmZXI6Om1hcmtMaXN0cyhTbG8KICAgICB9CiB9CiAKK3RlbXBsYXRlIHZv
aWQgTWFya2VkQXJndW1lbnRCdWZmZXI6Om1hcmtMaXN0cyhBYnN0cmFjdFNsb3RWaXNpdG9yJiwg
TGlzdFNldCYpOwordGVtcGxhdGUgdm9pZCBNYXJrZWRBcmd1bWVudEJ1ZmZlcjo6bWFya0xpc3Rz
KFNsb3RWaXNpdG9yJiwgTGlzdFNldCYpOworCiB2b2lkIE1hcmtlZEFyZ3VtZW50QnVmZmVyOjpz
bG93RW5zdXJlQ2FwYWNpdHkoc2l6ZV90IHJlcXVlc3RlZENhcGFjaXR5KQogewogICAgIHNldE5l
ZWRzT3ZlcmZsb3dDaGVjaygpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
QXJnTGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Fy
Z0xpc3QuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvQXJnTGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqICBDb3B5
cmlnaHQgKEMpIDE5OTktMjAwMSBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQotICogIENv
cHlyaWdodCAoQykgMjAwMy0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
ICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMTE4LDcgKzExOCw3IEBAIHB1YmxpYzoKICAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAgICAgICAgIAotICAgIHN0YXRpYyB2b2lkIG1hcmtM
aXN0cyhTbG90VmlzaXRvciYsIExpc3RTZXQmKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNp
dG9yPiBzdGF0aWMgdm9pZCBtYXJrTGlzdHMoVmlzaXRvciYsIExpc3RTZXQmKTsKIAogICAgIHZv
aWQgZW5zdXJlQ2FwYWNpdHkoc2l6ZV90IHJlcXVlc3RlZENhcGFjaXR5KQogICAgIHsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlYWJsZUlkZW50aWZpZXIuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWFibGVJZGVudGlm
aWVyLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0NhY2hlYWJsZUlkZW50aWZpZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDIwLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00Miw3ICs0Miw2IEBAIG5hbWVz
cGFjZSBKU0MgewogY2xhc3MgQ29kZUJsb2NrOwogY2xhc3MgSWRlbnRpZmllcjsKIGNsYXNzIEpT
Q2VsbDsKLWNsYXNzIFNsb3RWaXNpdG9yOwogCiBjbGFzcyBDYWNoZWFibGVJZGVudGlmaWVyIHsK
IHB1YmxpYzoKQEAgLTg3LDcgKzg2LDcgQEAgcHVibGljOgogCiAgICAgdWludHB0cl90IHJhd0Jp
dHMoKSBjb25zdCB7IHJldHVybiBtX2JpdHM7IH0KIAotICAgIGlubGluZSB2b2lkIHZpc2l0QWdn
cmVnYXRlKFNsb3RWaXNpdG9yJikgY29uc3Q7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRv
cj4gaW5saW5lIHZvaWQgdmlzaXRBZ2dyZWdhdGUoVmlzaXRvciYpIGNvbnN0OwogCiAgICAgSlNf
RVhQT1JUX1BSSVZBVEUgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlYWJsZUlkZW50aWZpZXJJbmxpbmVzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVhYmxlSWRl
bnRpZmllcklubGluZXMuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQ2FjaGVhYmxlSWRlbnRpZmllcklubGluZXMuaAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIwLTIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0x
MzcsNyArMTM3LDggQEAgaW5saW5lIHZvaWQgQ2FjaGVhYmxlSWRlbnRpZmllcjo6c2V0VWlkQgog
ICAgIG1fYml0cyA9IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KHVpZCkgfCBzX3VpZFRhZzsKIH0K
IAotaW5saW5lIHZvaWQgQ2FjaGVhYmxlSWRlbnRpZmllcjo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZp
c2l0b3ImIHZpc2l0b3IpIGNvbnN0Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgoraW5saW5l
IHZvaWQgQ2FjaGVhYmxlSWRlbnRpZmllcjo6dmlzaXRBZ2dyZWdhdGUoVmlzaXRvciYgdmlzaXRv
cikgY29uc3QKIHsKICAgICBpZiAobV9iaXRzICYmIGlzQ2VsbCgpKQogICAgICAgICB2aXNpdG9y
LmFwcGVuZFVuYmFycmllcmVkKGNlbGwoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9DbGFzc0luZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9DbGFzc0luZm8uaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQ2xhc3NJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSw3IEBA
CiAvKgogICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAxIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtk
ZS5vcmcpCiAgKiAgQ29weXJpZ2h0IChDKSAyMDAxIFBldGVyIEtlbGx5IChwbWtAcG9zdC5jb20p
Ci0gKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogIENvcHlyaWdodCAoQykgMjAwMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC00NCw5ICs0NCw2IEBAIHN0cnVjdCBN
ZXRob2RUYWJsZSB7CiAgICAgdXNpbmcgRGVzdHJveUZ1bmN0aW9uUHRyID0gdm9pZCAoKikoSlND
ZWxsKik7CiAgICAgRGVzdHJveUZ1bmN0aW9uUHRyIE1FVEhPRF9UQUJMRV9FTlRSWShkZXN0cm95
KTsKIAotICAgIHVzaW5nIFZpc2l0Q2hpbGRyZW5GdW5jdGlvblB0ciA9IHZvaWQgKCopKEpTQ2Vs
bCosIFNsb3RWaXNpdG9yJik7Ci0gICAgVmlzaXRDaGlsZHJlbkZ1bmN0aW9uUHRyIE1FVEhPRF9U
QUJMRV9FTlRSWSh2aXNpdENoaWxkcmVuKTsKLQogICAgIHVzaW5nIEdldENhbGxEYXRhRnVuY3Rp
b25QdHIgPSBDYWxsRGF0YSAoKikoSlNDZWxsKik7CiAgICAgR2V0Q2FsbERhdGFGdW5jdGlvblB0
ciBNRVRIT0RfVEFCTEVfRU5UUlkoZ2V0Q2FsbERhdGEpOwogCkBAIC0xMjAsOCArMTE3LDIzIEBA
IHN0cnVjdCBNZXRob2RUYWJsZSB7CiAgICAgdXNpbmcgRXN0aW1hdGVkU2l6ZUZ1bmN0aW9uUHRy
ID0gc2l6ZV90ICgqKShKU0NlbGwqLCBWTSYpOwogICAgIEVzdGltYXRlZFNpemVGdW5jdGlvblB0
ciBNRVRIT0RfVEFCTEVfRU5UUlkoZXN0aW1hdGVkU2l6ZSk7CiAKKyAgICB1c2luZyBWaXNpdENo
aWxkcmVuRnVuY3Rpb25QdHIgPSB2b2lkICgqKShKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAg
IFZpc2l0Q2hpbGRyZW5GdW5jdGlvblB0ciBNRVRIT0RfVEFCTEVfRU5UUlkodmlzaXRDaGlsZHJl
bldpdGhTbG90VmlzaXRvcik7CisKKyAgICB1c2luZyBWaXNpdENoaWxkcmVuV2l0aEFic3RyYWN0
U2xvdFZpc2l0b3JQdHIgPSB2b2lkICgqKShKU0NlbGwqLCBBYnN0cmFjdFNsb3RWaXNpdG9yJik7
CisgICAgVmlzaXRDaGlsZHJlbldpdGhBYnN0cmFjdFNsb3RWaXNpdG9yUHRyIE1FVEhPRF9UQUJM
RV9FTlRSWSh2aXNpdENoaWxkcmVuV2l0aEFic3RyYWN0U2xvdFZpc2l0b3IpOworCisgICAgQUxX
QVlTX0lOTElORSB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYg
dmlzaXRvcikgY29uc3QgeyB2aXNpdENoaWxkcmVuV2l0aFNsb3RWaXNpdG9yKGNlbGwsIHZpc2l0
b3IpOyB9CisgICAgQUxXQVlTX0lOTElORSB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxs
LCBBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBjb25zdCB7IHZpc2l0Q2hpbGRyZW5XaXRo
QWJzdHJhY3RTbG90VmlzaXRvcihjZWxsLCB2aXNpdG9yKTsgfQorCiAgICAgdXNpbmcgVmlzaXRP
dXRwdXRDb25zdHJhaW50c1B0ciA9IHZvaWQgKCopKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7Ci0g
ICAgVmlzaXRPdXRwdXRDb25zdHJhaW50c1B0ciBNRVRIT0RfVEFCTEVfRU5UUlkodmlzaXRPdXRw
dXRDb25zdHJhaW50cyk7CisgICAgVmlzaXRPdXRwdXRDb25zdHJhaW50c1B0ciBNRVRIT0RfVEFC
TEVfRU5UUlkodmlzaXRPdXRwdXRDb25zdHJhaW50c1dpdGhTbG90VmlzaXRvcik7CisKKyAgICB1
c2luZyBWaXNpdE91dHB1dENvbnN0cmFpbnRzV2l0aEFic3RyYWN0U2xvdFZpc2l0b3JQdHIgPSB2
b2lkICgqKShKU0NlbGwqLCBBYnN0cmFjdFNsb3RWaXNpdG9yJik7CisgICAgVmlzaXRPdXRwdXRD
b25zdHJhaW50c1dpdGhBYnN0cmFjdFNsb3RWaXNpdG9yUHRyIE1FVEhPRF9UQUJMRV9FTlRSWSh2
aXNpdE91dHB1dENvbnN0cmFpbnRzV2l0aEFic3RyYWN0U2xvdFZpc2l0b3IpOworCisgICAgQUxX
QVlTX0lOTElORSB2b2lkIHZpc2l0T3V0cHV0Q29uc3RyYWludHMoSlNDZWxsKiBjZWxsLCBTbG90
VmlzaXRvciYgdmlzaXRvcikgY29uc3QgeyB2aXNpdE91dHB1dENvbnN0cmFpbnRzV2l0aFNsb3RW
aXNpdG9yKGNlbGwsIHZpc2l0b3IpOyB9CisgICAgQUxXQVlTX0lOTElORSB2b2lkIHZpc2l0T3V0
cHV0Q29uc3RyYWludHMoSlNDZWxsKiBjZWxsLCBBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9y
KSBjb25zdCB7IHZpc2l0T3V0cHV0Q29uc3RyYWludHNXaXRoQWJzdHJhY3RTbG90VmlzaXRvcihj
ZWxsLCB2aXNpdG9yKTsgfQogfTsKIAogI2RlZmluZSBDUkVBVEVfTUVNQkVSX0NIRUNLRVIobWVt
YmVyKSBcCkBAIC0xNDcsNyArMTU5LDYgQEAgc3RydWN0IE1ldGhvZFRhYmxlIHsKICAgICBKU0Nh
c3RpbmdIZWxwZXJzOjpJbmhlcml0c1RyYWl0czxDbGFzc05hbWU+Ojp0eXBlUmFuZ2UsIFwKICAg
ICB7IFwKICAgICAgICAgJkNsYXNzTmFtZTo6ZGVzdHJveSwgXAotICAgICAgICAmQ2xhc3NOYW1l
Ojp2aXNpdENoaWxkcmVuLCBcCiAgICAgICAgICZDbGFzc05hbWU6OmdldENhbGxEYXRhLCBcCiAg
ICAgICAgICZDbGFzc05hbWU6OmdldENvbnN0cnVjdERhdGEsIFwKICAgICAgICAgJkNsYXNzTmFt
ZTo6cHV0LCBcCkBAIC0xNzMsNiArMTg0LDkgQEAgc3RydWN0IE1ldGhvZFRhYmxlIHsKICAgICAg
ICAgJkNsYXNzTmFtZTo6ZHVtcFRvU3RyZWFtLCBcCiAgICAgICAgICZDbGFzc05hbWU6OmFuYWx5
emVIZWFwLCBcCiAgICAgICAgICZDbGFzc05hbWU6OmVzdGltYXRlZFNpemUsIFwKKyAgICAgICAg
JkNsYXNzTmFtZTo6dmlzaXRDaGlsZHJlbiwgXAorICAgICAgICAmQ2xhc3NOYW1lOjp2aXNpdENo
aWxkcmVuLCBcCisgICAgICAgICZDbGFzc05hbWU6OnZpc2l0T3V0cHV0Q29uc3RyYWludHMsIFwK
ICAgICAgICAgJkNsYXNzTmFtZTo6dmlzaXRPdXRwdXRDb25zdHJhaW50cywgXAogICAgIH0sIFwK
ICAgICBDbGFzc05hbWU6OlR5cGVkQXJyYXlTdG9yYWdlVHlwZSwgXApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xvbmVkQXJndW1lbnRzLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DbG9uZWRBcmd1bWVudHMuY3BwCShyZXZpc2lv
biAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DbG9uZWRBcmd1bWVu
dHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxNS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjY3LDcgKzI2Nyw4IEBAIHZvaWQgQ2xvbmVkQXJn
dW1lbnRzOjptYXRlcmlhbGl6ZVNwZWNpYWwKICAgICAgICAgbWF0ZXJpYWxpemVTcGVjaWFscyhn
bG9iYWxPYmplY3QpOwogfQogCi12b2lkIENsb25lZEFyZ3VtZW50czo6dmlzaXRDaGlsZHJlbihK
U0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlz
aXRvcj4KK3ZvaWQgQ2xvbmVkQXJndW1lbnRzOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNl
bGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgQ2xvbmVkQXJndW1lbnRzKiB0aGlzT2JqZWN0
ID0ganNDYXN0PENsb25lZEFyZ3VtZW50cyo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1Rf
SU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTI3NSw1ICsyNzYsNyBAQCB2b2lkIENs
b25lZEFyZ3VtZW50czo6dmlzaXRDaGlsZHJlbihKU0NlCiAgICAgdmlzaXRvci5hcHBlbmQodGhp
c09iamVjdC0+bV9jYWxsZWUpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oQ2xvbmVkQXJn
dW1lbnRzKTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0Nsb25lZEFyZ3VtZW50cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0Nsb25lZEFyZ3VtZW50cy5oCShyZXZpc2lvbiAyNzI4MzApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DbG9uZWRBcmd1bWVudHMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTYyLDcgKzYyLDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBTdHJ1Y3R1cmUq
IGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBwcm90b3R5cGUp
OwogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVNsb3dQdXRTdHJ1Y3R1cmUoVk0mLCBKU0ds
b2JhbE9iamVjdCosIEpTVmFsdWUgcHJvdG90eXBlKTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0
Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxE
UkVOOwogCiAgICAgREVDTEFSRV9JTkZPOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9EaXJlY3RBcmd1bWVudHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTgg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIw
MjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC05MCw3ICs5MCw4IEBAIHNpemVfdCBEaXJlY3RBcmd1bWVudHM6OmVzdGlt
YXRlZFNpemUoSlMKICAgICByZXR1cm4gQmFzZTo6ZXN0aW1hdGVkU2l6ZShjZWxsLCB2bSkgKyBt
YXBwZWRBcmd1bWVudHNTaXplICsgbW9kaWZpZWRBcmd1bWVudHNTaXplOwogfQogCi12b2lkIERp
cmVjdEFyZ3VtZW50czo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIHRoaXNDZWxsLCBTbG90VmlzaXRv
ciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIERpcmVjdEFyZ3Vt
ZW50czo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiB0aGlzQ2VsbCwgVmlzaXRvciYgdmlzaXRv
cikKIHsKICAgICBEaXJlY3RBcmd1bWVudHMqIHRoaXNPYmplY3QgPSBzdGF0aWNfY2FzdDxEaXJl
Y3RBcmd1bWVudHMqPih0aGlzQ2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0
aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtMTA0LDYgKzEwNSw4IEBAIHZvaWQgRGlyZWN0QXJndW1l
bnRzOjp2aXNpdENoaWxkcmVuKEpTQ2UKICAgICBHZW5lcmljQXJndW1lbnRzPERpcmVjdEFyZ3Vt
ZW50cz46OnZpc2l0Q2hpbGRyZW4odGhpc0NlbGwsIHZpc2l0b3IpOwogfQogCitERUZJTkVfVklT
SVRfQ0hJTERSRU4oRGlyZWN0QXJndW1lbnRzKTsKKwogU3RydWN0dXJlKiBEaXJlY3RBcmd1bWVu
dHM6OmNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEpTVmFsdWUgcHJvdG90eXBlKQogewogICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwg
Z2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKERpcmVjdEFyZ3VtZW50c1R5cGUsIFN0
cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0RpcmVjdEFyZ3VtZW50cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9EaXJlY3RBcmd1bWVudHMuaAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxOSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTY1LDcgKzY1LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBEaXJlY3RBcmd1bWVudHMqIGNy
ZWF0ZUJ5Q29weWluZyhKU0dsb2JhbE9iamVjdCosIENhbGxGcmFtZSopOwogCiAgICAgc3RhdGlj
IHNpemVfdCBlc3RpbWF0ZWRTaXplKEpTQ2VsbCosIFZNJik7Ci0gICAgc3RhdGljIHZvaWQgdmlz
aXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJ
TERSRU47CiAgICAgCiAgICAgdWludDMyX3QgaW50ZXJuYWxMZW5ndGgoKSBjb25zdAogICAgIHsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V2YWxFeGVjdXRhYmxlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FdmFsRXhlY3V0YWJs
ZS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0V2YWxFeGVjdXRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAsIDIwMTMsIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTUwLDcgKzUwLDggQEAgYXV0byBFdmFsRXhlY3V0YWJsZTo6ZW5zdXJlVGVtcGxhdGVPYmplYwog
ICAgIHJldHVybiBlbnN1cmVUZW1wbGF0ZU9iamVjdE1hcEltcGwobV90ZW1wbGF0ZU9iamVjdE1h
cCk7CiB9CiAKLXZvaWQgRXZhbEV4ZWN1dGFibGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxs
LCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lk
IEV2YWxFeGVjdXRhYmxlOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3Im
IHZpc2l0b3IpCiB7CiAgICAgRXZhbEV4ZWN1dGFibGUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8RXZh
bEV4ZWN1dGFibGUqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNP
YmplY3QsIGluZm8oKSk7CkBAIC02NCw0ICs2NSw2IEBAIHZvaWQgRXZhbEV4ZWN1dGFibGU6OnZp
c2l0Q2hpbGRyZW4oSlNDZWwKICAgICB9CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihFdmFs
RXhlY3V0YWJsZSk7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvRXZhbEV4ZWN1dGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9FdmFsRXhlY3V0YWJsZS5oCShyZXZpc2lvbiAyNzI4MzApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FdmFsRXhlY3V0YWJsZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOS0yMDE5IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtNzksNyArNzksNyBAQCBwcm90ZWN0ZWQ6CiAgICAgdXNpbmcgQmFzZTo6Zmlu
aXNoQ3JlYXRpb247CiAgICAgRXZhbEV4ZWN1dGFibGUoSlNHbG9iYWxPYmplY3QqLCBjb25zdCBT
b3VyY2VDb2RlJiwgYm9vbCBpblN0cmljdENvbnRleHQsIERlcml2ZWRDb250ZXh0VHlwZSwgYm9v
bCBpc0Fycm93RnVuY3Rpb25Db250ZXh0LCBib29sIGlzSW5zaWRlT3JkaW5hcnlGdW5jdGlvbiwg
RXZhbENvbnRleHRUeXBlLCBOZWVkc0NsYXNzRmllbGRJbml0aWFsaXplciwgUHJpdmF0ZUJyYW5k
UmVxdWlyZW1lbnQpOwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBT
bG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICB1bnNpZ25l
ZCBtX25lZWRzQ2xhc3NGaWVsZEluaXRpYWxpemVyIDogMTsKICAgICB1bnNpZ25lZCBtX3ByaXZh
dGVCcmFuZFJlcXVpcmVtZW50IDogMTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0V4Y2VwdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvRXhjZXB0aW9uLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTUzLDcgKzUz
LDggQEAgU3RydWN0dXJlKiBFeGNlcHRpb246OmNyZWF0ZVN0cnVjdHVyZShWTQogICAgIHJldHVy
biBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZv
KENlbGxUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CiB9CiAKLXZvaWQgRXhjZXB0aW9u
Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1w
bGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBFeGNlcHRpb246OnZpc2l0Q2hpbGRyZW5JbXBs
KEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBFeGNlcHRpb24qIHRoaXNP
YmplY3QgPSBqc0Nhc3Q8RXhjZXB0aW9uKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9J
TkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNjQsNiArNjUsOCBAQCB2b2lkIEV4Y2Vw
dGlvbjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlCiAgICAgICAgIGZyYW1lLnZpc2l0Q2hpbGRy
ZW4odmlzaXRvcik7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihFeGNlcHRpb24pOworCiBF
eGNlcHRpb246OkV4Y2VwdGlvbihWTSYgdm0pCiAgICAgOiBCYXNlKHZtLCB2bS5leGNlcHRpb25T
dHJ1Y3R1cmUuZ2V0KCkpCiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9F
eGNlcHRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9F
eGNlcHRpb24uaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvRXhjZXB0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDE1LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01MSw3ICs1MSw3IEBAIHB1Ymxp
YzoKIAogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFs
T2JqZWN0KiwgSlNWYWx1ZSBwcm90b3R5cGUpOwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGls
ZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47
CiAKICAgICBERUNMQVJFX0VYUE9SVF9JTkZPOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9GdW5jdGlvbkV4ZWN1dGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZS5jcHAJKHJldmlzaW9uIDI3
MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJs
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDA5LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDA5LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02Nyw3ICs2Nyw4IEBAIEZ1bmN0aW9uQ29kZUJsb2Nr
KiBGdW5jdGlvbkV4ZWN1dGFibGU6OmIKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RnVuY3Rpb25D
b2RlQmxvY2sqPihlZGdlLT5jb2RlQmxvY2soKS0+YmFzZWxpbmVBbHRlcm5hdGl2ZSgpKTsKIH0K
IAotdm9pZCBGdW5jdGlvbkV4ZWN1dGFibGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBT
bG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEZ1
bmN0aW9uRXhlY3V0YWJsZTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9y
JiB2aXNpdG9yKQogewogICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogdGhpc09iamVjdCA9IGpzQ2Fz
dDxGdW5jdGlvbkV4ZWN1dGFibGUqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVS
SVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC04Niw2ICs4Nyw4IEBAIHZvaWQgRnVuY3Rpb25F
eGVjdXRhYmxlOjp2aXNpdENoaWxkcmVuKEoKICAgICB9CiB9CiAKK0RFRklORV9WSVNJVF9DSElM
RFJFTihGdW5jdGlvbkV4ZWN1dGFibGUpOworCiBGdW5jdGlvbkV4ZWN1dGFibGUqIEZ1bmN0aW9u
RXhlY3V0YWJsZTo6ZnJvbUdsb2JhbENvZGUoCiAgICAgY29uc3QgSWRlbnRpZmllciYgbmFtZSwg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCAK
ICAgICBKU09iamVjdComIGV4Y2VwdGlvbiwgaW50IG92ZXJyaWRlTGluZU51bWJlciwgT3B0aW9u
YWw8aW50PiBmdW5jdGlvbkNvbnN0cnVjdG9yUGFyYW1ldGVyc0VuZFBvc2l0aW9uKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25FeGVjdXRhYmxlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25FeGVjdXRhYmxl
LmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1
bmN0aW9uRXhlY3V0YWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAwOS0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTY2LDcgKzE2Niw3IEBAIHB1
YmxpYzoKICAgICBKU1BhcnNlclNjcmlwdE1vZGUgc2NyaXB0TW9kZSgpIGNvbnN0IHsgcmV0dXJu
IG1fdW5saW5rZWRFeGVjdXRhYmxlLT5zY3JpcHRNb2RlKCk7IH0KICAgICBTb3VyY2VDb2RlIGNs
YXNzU291cmNlKCkgY29uc3QgeyByZXR1cm4gbV91bmxpbmtlZEV4ZWN1dGFibGUtPmNsYXNzU291
cmNlKCk7IH0KIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZp
c2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogICAgIHN0YXRpYyBTdHJ1Y3R1
cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEpTVmFsdWUgcHJvdG8pCiAgICAgewogICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUo
dm0sIGdsb2JhbE9iamVjdCwgcHJvdG8sIFR5cGVJbmZvKEZ1bmN0aW9uRXhlY3V0YWJsZVR5cGUs
IFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0Z1bmN0aW9uUmFyZURhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uUmFyZURhdGEuY3BwCShyZXZpc2lvbiAyNzI4MzApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvblJhcmVEYXRhLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAx
OSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUt
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTUxLDcgKzUxLDggQEAgU3RydWN0dXJlKiBGdW5jdGlvblJhcmVEYXRh
OjpjcmVhdGVTdHJ1YwogICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2Jq
ZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKENlbGxUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8o
KSk7CiB9CiAKLXZvaWQgRnVuY3Rpb25SYXJlRGF0YTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNl
bGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3Zv
aWQgRnVuY3Rpb25SYXJlRGF0YTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNp
dG9yJiB2aXNpdG9yKQogewogICAgIEZ1bmN0aW9uUmFyZURhdGEqIHJhcmVEYXRhID0ganNDYXN0
PEZ1bmN0aW9uUmFyZURhdGEqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRT
KGNlbGwsIGluZm8oKSk7CkBAIC02Myw2ICs2NCw4IEBAIHZvaWQgRnVuY3Rpb25SYXJlRGF0YTo6
dmlzaXRDaGlsZHJlbihKU0MKICAgICB2aXNpdG9yLmFwcGVuZChyYXJlRGF0YS0+bV9leGVjdXRh
YmxlKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEZ1bmN0aW9uUmFyZURhdGEpOworCiBG
dW5jdGlvblJhcmVEYXRhOjpGdW5jdGlvblJhcmVEYXRhKFZNJiB2bSwgRXhlY3V0YWJsZUJhc2Uq
IGV4ZWN1dGFibGUpCiAgICAgOiBCYXNlKHZtLCB2bS5mdW5jdGlvblJhcmVEYXRhU3RydWN0dXJl
LmdldCgpKQogICAgICwgbV9vYmplY3RBbGxvY2F0aW9uUHJvZmlsZSgpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvblJhcmVEYXRhLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25SYXJlRGF0YS5oCShyZXZpc2lv
biAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvblJhcmVE
YXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDE1LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE1LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02NSw3ICs2NSw3IEBAIHB1YmxpYzoKIAogICAgIHN0
YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNW
YWx1ZSBwcm90b3R5cGUpOwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwq
LCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBERUNM
QVJFX0lORk87CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNB
cmd1bWVudHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9H
ZW5lcmljQXJndW1lbnRzLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0dlbmVyaWNBcmd1bWVudHMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ0LDcg
KzQ0LDcgQEAgcHJvdGVjdGVkOgogICAgIHsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNp
dENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElM
RFJFTjsKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqLCBKU0ds
b2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CiAgICAgc3RhdGljIGJv
b2wgZ2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0Kiwg
dW5zaWduZWQgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKICAgICBzdGF0aWMgdm9pZCBn
ZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5h
bWVBcnJheSYsIERvbnRFbnVtUHJvcGVydGllc01vZGUpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50c0lubGluZXMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljQXJndW1lbnRzSW5saW5lcy5oCShy
ZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmlj
QXJndW1lbnRzSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxNS0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzEsNyArMzEsOCBAQAogbmFt
ZXNwYWNlIEpTQyB7CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFR5cGU+Ci12b2lkIEdlbmVyaWNBcmd1
bWVudHM8VHlwZT46OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiB0aGlzQ2VsbCwgU2xvdFZpc2l0b3Im
IHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBHZW5lcmljQXJndW1l
bnRzPFR5cGU+Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIHRoaXNDZWxsLCBWaXNpdG9yJiB2
aXNpdG9yKQogewogICAgIFR5cGUqIHRoaXNPYmplY3QgPSBzdGF0aWNfY2FzdDxUeXBlKj4odGhp
c0NlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygp
KTsKQEAgLTQxLDYgKzQyLDggQEAgdm9pZCBHZW5lcmljQXJndW1lbnRzPFR5cGU+Ojp2aXNpdENo
aWxkcgogICAgICAgICB2aXNpdG9yLm1hcmtBdXhpbGlhcnkodGhpc09iamVjdC0+bV9tb2RpZmll
ZEFyZ3VtZW50c0Rlc2NyaXB0b3IuZ2V0VW5zYWZlKCkpOwogfQogCitERUZJTkVfVklTSVRfQ0hJ
TERSRU5fV0lUSF9NT0RJRklFUih0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlPiwgR2VuZXJpY0FyZ3Vt
ZW50czxUeXBlPik7CisKIHRlbXBsYXRlPHR5cGVuYW1lIFR5cGU+CiBib29sIEdlbmVyaWNBcmd1
bWVudHM8VHlwZT46OmdldE93blByb3BlcnR5U2xvdChKU09iamVjdCogb2JqZWN0LCBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWUgaWRlbnQsIFByb3BlcnR5U2xvdCYg
c2xvdCkKIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dldHRlclNldHRl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2V0dGVy
U2V0dGVyLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvR2V0dGVyU2V0dGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw3ICsxLDcgQEAKIC8q
CiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDIgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9y
ZykKICAqICBDb3B5cmlnaHQgKEMpIDIwMDEgUGV0ZXIgS2VsbHkgKHBta0Bwb3N0LmNvbSkKLSAq
ICBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiAgQ29weXJpZ2h0IChDKSAyMDA0LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTMzLDcgKzMzLDggQEAgU1RBVElDX0FTU0VS
VF9JU19UUklWSUFMTFlfREVTVFJVQ1RJQkxFKAogCiBjb25zdCBDbGFzc0luZm8gR2V0dGVyU2V0
dGVyOjpzX2luZm8gPSB7ICJHZXR0ZXJTZXR0ZXIiLCBudWxscHRyLCBudWxscHRyLCBudWxscHRy
LCBDUkVBVEVfTUVUSE9EX1RBQkxFKEdldHRlclNldHRlcikgfTsKIAotdm9pZCBHZXR0ZXJTZXR0
ZXI6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3Rl
bXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEdldHRlclNldHRlcjo6dmlzaXRDaGlsZHJl
bkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEdldHRlclNldHRl
ciogdGhpc09iamVjdCA9IGpzQ2FzdDxHZXR0ZXJTZXR0ZXIqPihjZWxsKTsKICAgICBBU1NFUlRf
R0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC00Myw2ICs0NCw4IEBA
IHZvaWQgR2V0dGVyU2V0dGVyOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCoKICAgICB2aXNpdG9yLmFw
cGVuZCh0aGlzT2JqZWN0LT5tX3NldHRlcik7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihH
ZXR0ZXJTZXR0ZXIpOworCiBKU1ZhbHVlIGNhbGxHZXR0ZXIoSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgSlNWYWx1ZSBiYXNlLCBKU1ZhbHVlIGdldHRlclNldHRlcikKIHsKICAgICBWTSYg
dm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9HZXR0ZXJTZXR0ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9HZXR0ZXJTZXR0ZXIuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvR2V0dGVyU2V0dGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNyAr
MSw3IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAxIEhhcnJpIFBvcnRlbiAocG9y
dGVuQGtkZS5vcmcpCiAgKiAgQ29weXJpZ2h0IChDKSAyMDAxIFBldGVyIEtlbGx5IChwbWtAcG9z
dC5jb20pCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC04Miw3ICs4Miw3IEBAIHB1
YmxpYzoKICAgICAgICAgcmV0dXJuIGNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBnZXR0ZXJPYmpl
Y3QsIHNldHRlck9iamVjdCk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJl
bihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAK
ICAgICBKU09iamVjdCogZ2V0dGVyKCkgY29uc3QgeyByZXR1cm4gbV9nZXR0ZXIuZ2V0KCk7IH0K
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSGFzaE1hcEltcGwuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0hhc2hNYXBJbXBsLmNw
cAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSGFz
aE1hcEltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMwLDYgKzMwLDkgQEAKIAogbmFtZXNwYWNlIEpT
QyB7CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTl9XSVRIX01PRElGSUVSKHRlbXBsYXRlPD4sIEhh
c2hNYXBCdWNrZXQ8SGFzaE1hcEJ1Y2tldERhdGFLZXk+KTsKK0RFRklORV9WSVNJVF9DSElMRFJF
Tl9XSVRIX01PRElGSUVSKHRlbXBsYXRlPD4sIEhhc2hNYXBCdWNrZXQ8SGFzaE1hcEJ1Y2tldERh
dGFLZXlWYWx1ZT4pOworCiB0ZW1wbGF0ZTw+CiBjb25zdCBDbGFzc0luZm8gSGFzaE1hcEJ1Y2tl
dDxIYXNoTWFwQnVja2V0RGF0YUtleT46OnNfaW5mbyA9CiAgICAgeyAiSGFzaE1hcEJ1Y2tldCIs
IG51bGxwdHIsIG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSGFzaE1hcEJ1
Y2tldDxIYXNoTWFwQnVja2V0RGF0YUtleT4pIH07CkBAIC0zOCw4ICs0MSw5IEBAIHRlbXBsYXRl
PD4KIGNvbnN0IENsYXNzSW5mbyBIYXNoTWFwQnVja2V0PEhhc2hNYXBCdWNrZXREYXRhS2V5VmFs
dWU+OjpzX2luZm8gPQogICAgIHsgIkhhc2hNYXBCdWNrZXQiLCBudWxscHRyLCBudWxscHRyLCBu
dWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEhhc2hNYXBCdWNrZXQ8SGFzaE1hcEJ1Y2tldERh
dGFLZXlWYWx1ZT4pIH07CiAKLXRlbXBsYXRlIDx0eXBlbmFtZSBEYXRhPgotdm9pZCBIYXNoTWFw
QnVja2V0PERhdGE+Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZp
c2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBEYXRhPgordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRv
cj4KK3ZvaWQgSGFzaE1hcEJ1Y2tldDxEYXRhPjo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBj
ZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEhhc2hNYXBCdWNrZXQqIHRoaXNPYmplY3Qg
PSBqc0Nhc3Q8SGFzaE1hcEJ1Y2tldCo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5I
RVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTUyLDggKzU2LDkgQEAgdm9pZCBIYXNoTWFw
QnVja2V0PERhdGE+Ojp2aXNpdENoaWxkcmVuKAogICAgIHZpc2l0b3IuYXBwZW5kVmFsdWVzKGJp
dHdpc2VfY2FzdDxXcml0ZUJhcnJpZXI8VW5rbm93bj4qPigmdGhpc09iamVjdC0+bV9kYXRhKSwg
c2l6ZW9mKERhdGEpIC8gc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpOwogfQogCi10ZW1w
bGF0ZSA8dHlwZW5hbWUgSGFzaE1hcEJ1Y2tldD4KLXZvaWQgSGFzaE1hcEltcGw8SGFzaE1hcEJ1
Y2tldD46OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikK
K3RlbXBsYXRlPHR5cGVuYW1lIEhhc2hNYXBCdWNrZXQ+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNp
dG9yPgordm9pZCBIYXNoTWFwSW1wbDxIYXNoTWFwQnVja2V0Pjo6dmlzaXRDaGlsZHJlbkltcGwo
SlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEhhc2hNYXBJbXBsKiB0aGlz
T2JqZWN0ID0ganNDYXN0PEhhc2hNYXBJbXBsKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVD
VF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNjYsNiArNzEsOCBAQCB2b2lkIEhh
c2hNYXBJbXBsPEhhc2hNYXBCdWNrZXQ+Ojp2aXNpdENoCiAgICAgICAgIHZpc2l0b3IubWFya0F1
eGlsaWFyeShidWZmZXIpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU5fV0lUSF9NT0RJRklF
Uih0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoTWFwQnVja2V0PiwgSGFzaE1hcEltcGw8SGFzaE1hcEJ1
Y2tldD4pOworCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgSGFzaE1hcEJ1Y2tldD4KIHNpemVfdCBIYXNo
TWFwSW1wbDxIYXNoTWFwQnVja2V0Pjo6ZXN0aW1hdGVkU2l6ZShKU0NlbGwqIGNlbGwsIFZNJiB2
bSkKIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0hhc2hNYXBJbXBsLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSGFzaE1hcEltcGwu
aAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSGFz
aE1hcEltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTYtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE0OCw3ICsxNDgsNyBAQCBwdWJsaWM6CiAg
ICAgICAgIHJldHVybiBtX2RhdGEudmFsdWUuZ2V0KCk7CiAgICAgfQogCi0gICAgc3RhdGljIHZv
aWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklT
SVRfQ0hJTERSRU47CiAKICAgICBBTFdBWVNfSU5MSU5FIEhhc2hNYXBCdWNrZXQqIG5leHQoKSBj
b25zdCB7IHJldHVybiBtX25leHQuZ2V0KCk7IH0KICAgICBBTFdBWVNfSU5MSU5FIEhhc2hNYXBC
dWNrZXQqIHByZXYoKSBjb25zdCB7IHJldHVybiBtX3ByZXYuZ2V0KCk7IH0KQEAgLTM2NCw3ICsz
NjQsNyBAQCBjbGFzcyBIYXNoTWFwSW1wbCA6IHB1YmxpYyBKU05vbkZpbmFsT2JqCiBwdWJsaWM6
CiAgICAgdXNpbmcgQnVja2V0VHlwZSA9IEhhc2hNYXBCdWNrZXRUeXBlOwogCi0gICAgc3RhdGlj
IHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVf
VklTSVRfQ0hJTERSRU47CiAKICAgICBzdGF0aWMgc2l6ZV90IGVzdGltYXRlZFNpemUoSlNDZWxs
KiwgVk0mKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50ZXJuYWxG
dW5jdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SW50ZXJuYWxGdW5jdGlvbi5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0ludGVybmFsRnVuY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDcgKzEsNyBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMiBIYXJyaSBQb3J0ZW4g
KHBvcnRlbkBrZGUub3JnKQogICogIENvcHlyaWdodCAoQykgMjAwMSBQZXRlciBLZWxseSAocG1r
QHBvc3QuY29tKQotICogIENvcHlyaWdodCAoQykgMjAwNC0yMDE5IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDQtMjAyMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtNjQsNyArNjQsOCBA
QCB2b2lkIEludGVybmFsRnVuY3Rpb246OmZpbmlzaENyZWF0aW9uKFZNCiAgICAgfQogfQogCi12
b2lkIEludGVybmFsRnVuY3Rpb246OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90Vmlz
aXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEludGVybmFs
RnVuY3Rpb246OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRv
cikKIHsKICAgICBJbnRlcm5hbEZ1bmN0aW9uKiB0aGlzT2JqZWN0ID0ganNDYXN0PEludGVybmFs
RnVuY3Rpb24qPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmpl
Y3QsIGluZm8oKSk7CkBAIC03Myw2ICs3NCw4IEBAIHZvaWQgSW50ZXJuYWxGdW5jdGlvbjo6dmlz
aXRDaGlsZHJlbihKU0MKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX29yaWdpbmFs
TmFtZSk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTl9XSVRIX01PRElGSUVSKEpTX0VYUE9S
VF9QUklWQVRFLCBJbnRlcm5hbEZ1bmN0aW9uKTsKKwogY29uc3QgU3RyaW5nJiBJbnRlcm5hbEZ1
bmN0aW9uOjpuYW1lKCkKIHsKICAgICBjb25zdCBTdHJpbmcmIG5hbWUgPSBtX29yaWdpbmFsTmFt
ZS0+dHJ5R2V0VmFsdWUoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lu
dGVybmFsRnVuY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9JbnRlcm5hbEZ1bmN0aW9uLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0ludGVybmFsRnVuY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAt
MSw2ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDAgSGFycmkgUG9ydGVu
IChwb3J0ZW5Aa2RlLm9yZykKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAxOSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMjEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogIENvcHlyaWdodCAoQykgMjAwNyBDYW1lcm9u
IFp3YXJpY2ggKGN3endhcmljaEB1d2F0ZXJsb28uY2EpCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA3
IE1ha3MgT3Jsb3ZpY2gKICAqCkBAIC00Niw3ICs0Niw3IEBAIHB1YmxpYzoKIAogICAgIERFQ0xB
UkVfRVhQT1JUX0lORk87CiAKLSAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCB2aXNp
dENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElM
RFJFTl9XSVRIX01PRElGSUVSKEpTX0VYUE9SVF9QUklWQVRFKTsKIAogICAgIEpTX0VYUE9SVF9Q
UklWQVRFIGNvbnN0IFN0cmluZyYgbmFtZSgpOwogICAgIGNvbnN0IFN0cmluZyBkaXNwbGF5TmFt
ZShWTSYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bENvbGxhdG9y
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsQ29s
bGF0b3IuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9JbnRsQ29sbGF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBAQAogLyoK
ICAqIENvcHlyaWdodCAoQykgMjAxNSBBbmR5IFZhbldhZ29uZXIgKGFuZHlAdmFud2Fnb25lci5m
YW1pbHkpCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTUgU3Vrb2xzYWsgU2Frc2h1d29uZyAoc3Vrb2xz
YWtAZ21haWwuY29tKQotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjAgQXBwbGUgSW5jLiBBbGwg
UmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBB
bGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02
NSw3ICs2NSw4IEBAIHZvaWQgSW50bENvbGxhdG9yOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0KICAg
ICBBU1NFUlQoaW5oZXJpdHModm0sIGluZm8oKSkpOwogfQogCi12b2lkIEludGxDb2xsYXRvcjo6
dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxh
dGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSW50bENvbGxhdG9yOjp2aXNpdENoaWxkcmVuSW1w
bChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSW50bENvbGxhdG9yKiB0
aGlzT2JqZWN0ID0ganNDYXN0PEludGxDb2xsYXRvcio+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19P
QkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTc1LDYgKzc2LDggQEAgdm9p
ZCBJbnRsQ29sbGF0b3I6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKgogICAgIHZpc2l0b3IuYXBwZW5k
KHRoaXNPYmplY3QtPm1fYm91bmRDb21wYXJlKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVO
KEludGxDb2xsYXRvcik7CisKIFZlY3RvcjxTdHJpbmc+IEludGxDb2xsYXRvcjo6c29ydExvY2Fs
ZURhdGEoY29uc3QgU3RyaW5nJiBsb2NhbGUsIFJlbGV2YW50RXh0ZW5zaW9uS2V5IGtleSkKIHsK
ICAgICAvLyA5LjEgSW50ZXJuYWwgc2xvdHMgb2YgU2VydmljZSBDb25zdHJ1Y3RvcnMgJiAxMC4y
LjMgSW50ZXJuYWwgc2xvdHMgKEVDTUEtNDAyIDIuMCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0ludGxDb2xsYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0ludGxDb2xsYXRvci5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsQ29sbGF0b3IuaAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQW5keSBWYW5XYWdvbmVy
IChhbmR5QHZhbndhZ29uZXIuZmFtaWx5KQorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIElu
Yy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtODAsNyArODEsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIEludGxDb2xsYXRvcihWTSYs
IFN0cnVjdHVyZSopOwogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKLSAgICBzdGF0aWMg
dm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9W
SVNJVF9DSElMRFJFTjsKIAogICAgIGJvb2wgdXBkYXRlQ2FuRG9BU0NJSVVDQURVQ0VUQ29tcGFy
aXNvbigpIGNvbnN0OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRs
RGF0ZVRpbWVGb3JtYXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0ludGxEYXRlVGltZUZvcm1hdC5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxEYXRlVGltZUZvcm1hdC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDE1IEFuZHkgVmFu
V2Fnb25lciAoYW5keUB2YW53YWdvbmVyLmZhbWlseSkKLSAqIENvcHlyaWdodCAoQykgMjAxNi0y
MDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
Ni0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtOTAsNyArOTAsOCBAQCB2b2lkIEludGxEYXRlVGltZUZvcm1hdDo6
ZmluaXNoQ3JlYXRpb24oCiAgICAgQVNTRVJUKGluaGVyaXRzKHZtLCBpbmZvKCkpKTsKIH0KIAot
dm9pZCBJbnRsRGF0ZVRpbWVGb3JtYXQ6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90
VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEludGxE
YXRlVGltZUZvcm1hdDo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2
aXNpdG9yKQogewogICAgIEludGxEYXRlVGltZUZvcm1hdCogdGhpc09iamVjdCA9IGpzQ2FzdDxJ
bnRsRGF0ZVRpbWVGb3JtYXQqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRT
KHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC0xMDAsNiArMTAxLDggQEAgdm9pZCBJbnRsRGF0ZVRp
bWVGb3JtYXQ6OnZpc2l0Q2hpbGRyZW4oSgogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3Qt
Pm1fYm91bmRGb3JtYXQpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSW50bERhdGVUaW1l
Rm9ybWF0KTsKKwogdm9pZCBJbnRsRGF0ZVRpbWVGb3JtYXQ6OnNldEJvdW5kRm9ybWF0KFZNJiB2
bSwgSlNCb3VuZEZ1bmN0aW9uKiBmb3JtYXQpCiB7CiAgICAgbV9ib3VuZEZvcm1hdC5zZXQodm0s
IHRoaXMsIGZvcm1hdCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRs
RGF0ZVRpbWVGb3JtYXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9JbnRsRGF0ZVRpbWVGb3JtYXQuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERhdGVUaW1lRm9ybWF0LmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDE1IEFuZHkgVmFuV2Fnb25l
ciAoYW5keUB2YW53YWdvbmVyLmZhbWlseSkKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTg1LDcgKzg2LDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBJbnRsRGF0ZVRpbWVGb3Jt
YXQoVk0mLCBTdHJ1Y3R1cmUqKTsKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7Ci0gICAg
c3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERF
Q0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBzdGF0aWMgVmVjdG9yPFN0cmluZz4gbG9jYWxl
RGF0YShjb25zdCBTdHJpbmcmLCBSZWxldmFudEV4dGVuc2lvbktleSk7CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxMb2NhbGUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxMb2NhbGUuY3BwCShyZXZpc2lvbiAyNzI4
MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTG9jYWxlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMjAgU29u
eSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTU4LDcgKzU5LDggQEAgdm9pZCBJbnRsTG9jYWxlOjpmaW5pc2hDcmVhdGlvbihW
TSYgdm0pCiAgICAgQVNTRVJUKGluaGVyaXRzKHZtLCBpbmZvKCkpKTsKIH0KIAotdm9pZCBJbnRs
TG9jYWxlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3Ip
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBJbnRsTG9jYWxlOjp2aXNpdENoaWxk
cmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0byogdGhp
c09iamVjdCA9IGpzQ2FzdDxJbnRsTG9jYWxlKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVD
VF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNjYsNiArNjgsOCBAQCB2b2lkIElu
dGxMb2NhbGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjCiAgICAgQmFzZTo6dmlzaXRDaGlsZHJl
bih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEludGxM
b2NhbGUpOworCiBjbGFzcyBMb2NhbGVJREJ1aWxkZXIgZmluYWwgewogcHVibGljOgogICAgIGJv
b2wgaW5pdGlhbGl6ZShjb25zdCBTdHJpbmcmKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0ludGxMb2NhbGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9JbnRsTG9jYWxlLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0ludGxMb2NhbGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMjAgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRh
aW5tZW50IEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTcxLDcgKzcyLDcg
QEAgcHVibGljOgogcHJpdmF0ZToKICAgICBJbnRsTG9jYWxlKFZNJiwgU3RydWN0dXJlKik7CiAg
ICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOwotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwog
CiAgICAgU3RyaW5nIGtleXdvcmRWYWx1ZShBU0NJSUxpdGVyYWwsIGJvb2wgaXNCb29sZWFuID0g
ZmFsc2UpIGNvbnN0OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRs
TnVtYmVyRm9ybWF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9JbnRsTnVtYmVyRm9ybWF0LmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE51bWJlckZvcm1hdC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsNyArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDE1IEFuZHkgVmFuV2Fnb25l
ciAoYW5keUB2YW53YWdvbmVyLmZhbWlseSkKICAqIENvcHlyaWdodCAoQykgMjAxNiBTdWtvbHNh
ayBTYWtzaHV3b25nIChzdWtvbHNha0BnbWFpbC5jb20pCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYt
MjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMp
IDIwMjAgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKQEAgLTczLDcgKzczLDggQEAgdm9pZCBJbnRsTnVtYmVyRm9ybWF0OjpmaW5pc2hDcmVhdGlv
bihWTQogICAgIEFTU0VSVChpbmhlcml0cyh2bSwgaW5mbygpKSk7CiB9CiAKLXZvaWQgSW50bE51
bWJlckZvcm1hdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNp
dG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSW50bE51bWJlckZvcm1hdDo6
dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAg
IEludGxOdW1iZXJGb3JtYXQqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SW50bE51bWJlckZvcm1hdCo+
KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygp
KTsKQEAgLTgzLDYgKzg0LDggQEAgdm9pZCBJbnRsTnVtYmVyRm9ybWF0Ojp2aXNpdENoaWxkcmVu
KEpTQwogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fYm91bmRGb3JtYXQpOwogfQog
CitERUZJTkVfVklTSVRfQ0hJTERSRU4oSW50bE51bWJlckZvcm1hdCk7CisKIFZlY3RvcjxTdHJp
bmc+IEludGxOdW1iZXJGb3JtYXQ6OmxvY2FsZURhdGEoY29uc3QgU3RyaW5nJiBsb2NhbGUsIFJl
bGV2YW50RXh0ZW5zaW9uS2V5IGtleSkKIHsKICAgICAvLyA5LjEgSW50ZXJuYWwgc2xvdHMgb2Yg
U2VydmljZSBDb25zdHJ1Y3RvcnMgJiAxMS4yLjMgSW50ZXJuYWwgc2xvdHMgKEVDTUEtNDAyIDIu
MCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxOdW1iZXJGb3JtYXQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTnVtYmVy
Rm9ybWF0LmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0ludGxOdW1iZXJGb3JtYXQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDcgQEAKIC8q
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQW5keSBWYW5XYWdvbmVyIChhbmR5QHZhbndhZ29uZXIu
ZmFtaWx5KQogICogQ29weXJpZ2h0IChDKSAyMDIwIFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlu
bWVudCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC05Niw3ICs5Nyw3IEBA
IHB1YmxpYzoKIHByaXZhdGU6CiAgICAgSW50bE51bWJlckZvcm1hdChWTSYsIFN0cnVjdHVyZSop
OwogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENo
aWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJF
TjsKIAogICAgIHN0YXRpYyBWZWN0b3I8U3RyaW5nPiBsb2NhbGVEYXRhKGNvbnN0IFN0cmluZyYs
IFJlbGV2YW50RXh0ZW5zaW9uS2V5KTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSW50bFBsdXJhbFJ1bGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9JbnRsUGx1cmFsUnVsZXMuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsUGx1cmFsUnVsZXMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxOCBBbmR5IFZh
bldhZ29uZXIgKGFuZHlAdmFud2Fnb25lci5mYW1pbHkpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTkt
MjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTktMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTYxLDcgKzYxLDggQEAgdm9pZCBJbnRsUGx1cmFsUnVsZXM6OmZp
bmlzaENyZWF0aW9uKFZNJgogICAgIEFTU0VSVChpbmhlcml0cyh2bSwgaW5mbygpKSk7CiB9CiAK
LXZvaWQgSW50bFBsdXJhbFJ1bGVzOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZp
c2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBJbnRsUGx1
cmFsUnVsZXM6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRv
cikKIHsKICAgICBJbnRsUGx1cmFsUnVsZXMqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SW50bFBsdXJh
bFJ1bGVzKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0
LCBpbmZvKCkpOwpAQCAtNjksNiArNzAsOCBAQCB2b2lkIEludGxQbHVyYWxSdWxlczo6dmlzaXRD
aGlsZHJlbihKU0NlCiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9y
KTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEludGxQbHVyYWxSdWxlcyk7CisKIFZlY3Rv
cjxTdHJpbmc+IEludGxQbHVyYWxSdWxlczo6bG9jYWxlRGF0YShjb25zdCBTdHJpbmcmLCBSZWxl
dmFudEV4dGVuc2lvbktleSkKIHsKICAgICByZXR1cm4geyB9OwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSW50bFBsdXJhbFJ1bGVzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFBsdXJhbFJ1bGVzLmgJKHJldmlzaW9uIDI3Mjgz
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxQbHVyYWxSdWxlcy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxOCBB
bmR5IFZhbldhZ29uZXIgKGFuZHlAdmFud2Fnb25lci5mYW1pbHkpCisgKiBDb3B5cmlnaHQgKEMp
IDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC02Niw3ICs2Nyw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgSW50
bFBsdXJhbFJ1bGVzKFZNJiwgU3RydWN0dXJlKik7CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihW
TSYpOwotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3Im
KTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgc3RhdGljIFZlY3RvcjxTdHJp
bmc+IGxvY2FsZURhdGEoY29uc3QgU3RyaW5nJiwgUmVsZXZhbnRFeHRlbnNpb25LZXkpOwogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsUmVsYXRpdmVUaW1lRm9ybWF0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsUmVs
YXRpdmVUaW1lRm9ybWF0LmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSW50bFJlbGF0aXZlVGltZUZvcm1hdC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDIwIFNvbnkgSW50ZXJhY3Rp
dmUgRW50ZXJ0YWlubWVudCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02
Miw3ICs2Myw4IEBAIHZvaWQgSW50bFJlbGF0aXZlVGltZUZvcm1hdDo6ZmluaXNoQ3JlYXQKICAg
ICBBU1NFUlQoaW5oZXJpdHModm0sIGluZm8oKSkpOwogfQogCi12b2lkIEludGxSZWxhdGl2ZVRp
bWVGb3JtYXQ6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRv
cikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEludGxSZWxhdGl2ZVRpbWVGb3Jt
YXQ6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsK
ICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEludGxSZWxhdGl2ZVRpbWVGb3JtYXQqPihj
ZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7
CkBAIC03MCw2ICs3Miw4IEBAIHZvaWQgSW50bFJlbGF0aXZlVGltZUZvcm1hdDo6dmlzaXRDaGls
ZHIKICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwogfQogCitE
RUZJTkVfVklTSVRfQ0hJTERSRU4oSW50bFJlbGF0aXZlVGltZUZvcm1hdCk7CisKIFZlY3RvcjxT
dHJpbmc+IEludGxSZWxhdGl2ZVRpbWVGb3JtYXQ6OmxvY2FsZURhdGEoY29uc3QgU3RyaW5nJiBs
b2NhbGUsIFJlbGV2YW50RXh0ZW5zaW9uS2V5IGtleSkKIHsKICAgICBBU1NFUlRfVU5VU0VEKGtl
eSwga2V5ID09IFJlbGV2YW50RXh0ZW5zaW9uS2V5OjpOdSk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9JbnRsUmVsYXRpdmVUaW1lRm9ybWF0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFJlbGF0aXZlVGltZUZvcm1hdC5oCShy
ZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsUmVs
YXRpdmVUaW1lRm9ybWF0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICog
Q29weXJpZ2h0IChDKSAyMDIwIFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDIwLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02NCw3ICs2NCw3IEBAIHB1YmxpYzoK
IHByaXZhdGU6CiAgICAgSW50bFJlbGF0aXZlVGltZUZvcm1hdChWTSYsIFN0cnVjdHVyZSopOwog
ICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxk
cmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsK
IAogICAgIHN0YXRpYyBWZWN0b3I8U3RyaW5nPiBsb2NhbGVEYXRhKGNvbnN0IFN0cmluZyYsIFJl
bGV2YW50RXh0ZW5zaW9uS2V5KTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSW50bFNlZ21lbnRJdGVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSW50bFNlZ21lbnRJdGVyYXRvci5jcHAJKHJldmlzaW9uIDI3MjgzMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxTZWdtZW50SXRlcmF0b3IuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAy
MCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC02NCwxMyArNjUsMTYgQEAgdm9pZCBJbnRsU2VnbWVudEl0ZXJhdG9yOjpmaW5p
c2hDcmVhdGlvbgogICAgIG1fc3RyaW5nLnNldCh2bSwgdGhpcywgc3RyaW5nKTsKIH0KIAotdm9p
ZCBJbnRsU2VnbWVudEl0ZXJhdG9yOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZp
c2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBJbnRsU2Vn
bWVudEl0ZXJhdG9yOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZp
c2l0b3IpCiB7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxJbnRsU2VnbWVudEl0ZXJh
dG9yKj4oY2VsbCk7CiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9y
KTsKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX3N0cmluZyk7CiB9CiAKK0RFRklO
RV9WSVNJVF9DSElMRFJFTihJbnRsU2VnbWVudEl0ZXJhdG9yKTsKKwogSlNPYmplY3QqIEludGxT
ZWdtZW50SXRlcmF0b3I6Om5leHQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKIHsKICAg
ICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9JbnRsU2VnbWVudEl0ZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFNlZ21lbnRJdGVyYXRvci5oCShyZXZpc2lvbiAyNzI4
MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsU2VnbWVudEl0ZXJhdG9y
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAy
MDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTUzLDcgKzU0LDcgQEAgcHVibGljOgogCiAgICAgSlNPYmplY3QqIG5leHQo
SlNHbG9iYWxPYmplY3QqKTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiBwcml2YXRl
OgogICAgIEludGxTZWdtZW50SXRlcmF0b3IoVk0mLCBTdHJ1Y3R1cmUqLCBzdGQ6OnVuaXF1ZV9w
dHI8VUJyZWFrSXRlcmF0b3IsIFVCcmVha0l0ZXJhdG9yRGVsZXRlcj4mJiwgQm94PFZlY3RvcjxV
Q2hhcj4+JiYsIEludGxTZWdtZW50ZXI6OkdyYW51bGFyaXR5KTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0ludGxTZWdtZW50cy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFNlZ21lbnRzLmNwcAkocmV2aXNpb24gMjcyODMw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFNlZ21lbnRzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMTA5LDExICsxMTAsMTQgQEAgSlNPYmplY3QqIEludGxTZWdtZW50czo6Y3JlYXRlU2Vn
bWVudEl0ZQogICAgIHJldHVybiBJbnRsU2VnbWVudEl0ZXJhdG9yOjpjcmVhdGUodm0sIGdsb2Jh
bE9iamVjdC0+c2VnbWVudEl0ZXJhdG9yU3RydWN0dXJlKCksIFdURk1vdmUoc2VnbWVudGVyKSwg
bV9idWZmZXIsIG1fc3RyaW5nLmdldCgpLCBtX2dyYW51bGFyaXR5KTsKIH0KIAotdm9pZCBJbnRs
U2VnbWVudHM6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRv
cikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEludGxTZWdtZW50czo6dmlzaXRD
aGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGF1dG8q
IHRoaXNPYmplY3QgPSBqc0Nhc3Q8SW50bFNlZ21lbnRzKj4oY2VsbCk7CiAgICAgQmFzZTo6dmlz
aXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlz
T2JqZWN0LT5tX3N0cmluZyk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihJbnRsU2VnbWVu
dHMpOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0ludGxTZWdtZW50cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0ludGxTZWdtZW50cy5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9JbnRsU2VnbWVudHMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTQsNyArNTUsNyBA
QCBwdWJsaWM6CiAgICAgSlNWYWx1ZSBjb250YWluaW5nKEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1
ZSBpbmRleFZhbHVlKTsKICAgICBKU09iamVjdCogY3JlYXRlU2VnbWVudEl0ZXJhdG9yKEpTR2xv
YmFsT2JqZWN0Kik7CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNs
b3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogcHJpdmF0ZToKICAg
ICBJbnRsU2VnbWVudHMoVk0mLCBTdHJ1Y3R1cmUqLCBzdGQ6OnVuaXF1ZV9wdHI8VUJyZWFrSXRl
cmF0b3IsIFVCcmVha0l0ZXJhdG9yRGVsZXRlcj4mJiwgQm94PFZlY3RvcjxVQ2hhcj4+JiYsIElu
dGxTZWdtZW50ZXI6OkdyYW51bGFyaXR5KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5jcHAJKHJldmlzaW9uIDI3MjgzMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTE1NSw3ICsxNTUsOCBAQCB2b2lkIEpTQXJyYXlCdWZmZXJWaWV3
OjpmaW5pc2hDcmVhdGlvbihWCiAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0K
IAotdm9pZCBKU0FycmF5QnVmZmVyVmlldzo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNB
cnJheUJ1ZmZlclZpZXc6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYg
dmlzaXRvcikKIHsKICAgICBKU0FycmF5QnVmZmVyVmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxK
U0FycmF5QnVmZmVyVmlldyo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMo
dGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTE2OSw2ICsxNzAsOCBAQCB2b2lkIEpTQXJyYXlCdWZm
ZXJWaWV3Ojp2aXNpdENoaWxkcmVuKEpTCiAgICAgfQogfQogCitERUZJTkVfVklTSVRfQ0hJTERS
RU4oSlNBcnJheUJ1ZmZlclZpZXcpOworCiBib29sIEpTQXJyYXlCdWZmZXJWaWV3OjpwdXQoCiAg
ICAgSlNDZWxsKiBjZWxsLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5h
bWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLAogICAgIFB1dFByb3BlcnR5U2xvdCYgc2xv
dCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1
ZmZlclZpZXcuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE3Miw3ICsxNzIs
NyBAQCBwcm90ZWN0ZWQ6CiAgICAgCiAgICAgc3RhdGljIGJvb2wgcHV0KEpTQ2VsbCosIEpTR2xv
YmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmKTsKIAot
ICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAg
ICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogICAgIAogcHVibGljOgogICAgIFR5cGVkQXJyYXlN
b2RlIG1vZGUoKSBjb25zdCB7IHJldHVybiBtX21vZGU7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTQXJyYXlJdGVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUl0ZXJhdG9yLmNwcAkocmV2aXNpb24gMjcy
ODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUl0ZXJhdG9yLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIw
LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC02OCwxMSArNjgsMTQgQEAgdm9pZCBKU0FycmF5SXRlcmF0b3I6OmZp
bmlzaENyZWF0aW9uKFZNJgogICAgICAgICBCYXNlOjppbnRlcm5hbEZpZWxkKGluZGV4KS5zZXQo
dm0sIHRoaXMsIHZhbHVlc1tpbmRleF0pOwogfQogCi12b2lkIEpTQXJyYXlJdGVyYXRvcjo6dmlz
aXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8
dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNBcnJheUl0ZXJhdG9yOjp2aXNpdENoaWxkcmVuSW1w
bChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0byogdGhpc09iamVj
dCA9IGpzQ2FzdDxKU0FycmF5SXRlcmF0b3IqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNU
X0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0
aGlzT2JqZWN0LCB2aXNpdG9yKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTQXJyYXlJ
dGVyYXRvcik7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNBcnJheUl0ZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUl0ZXJhdG9yLmgJKHJldmlzaW9uIDI3MjgzMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlJdGVyYXRvci5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAtMjAyMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTc4LDcgKzc4LDcgQEAgcHVibGljOgogCiAgICAgREVDTEFSRV9JTkZPOwogCi0gICAg
c3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERF
Q0xBUkVfVklTSVRfQ0hJTERSRU47CiAKIHByaXZhdGU6CiAgICAgSlNBcnJheUl0ZXJhdG9yKFZN
JiwgU3RydWN0dXJlKik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Fz
eW5jR2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0FzeW5jR2VuZXJhdG9yLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBc3luY0dlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOS0yMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
NTksMTEgKzU5LDE0IEBAIHZvaWQgSlNBc3luY0dlbmVyYXRvcjo6ZmluaXNoQ3JlYXRpb24oVk0K
ICAgICAgICAgaW50ZXJuYWxGaWVsZChpbmRleCkuc2V0KHZtLCB0aGlzLCB2YWx1ZXNbaW5kZXhd
KTsKIH0KIAotdm9pZCBKU0FzeW5jR2VuZXJhdG9yOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2Vs
bCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9p
ZCBKU0FzeW5jR2VuZXJhdG9yOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0
b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0FzeW5jR2Vu
ZXJhdG9yKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0
LCBpbmZvKCkpOwogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7
CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU0FzeW5jR2VuZXJhdG9yKTsKKwogfSAvLyBu
YW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FzeW5j
R2VuZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNBc3luY0dlbmVyYXRvci5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0FzeW5jR2VuZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtOTUsNyArOTUs
NyBAQCBwdWJsaWM6CiAKICAgICBERUNMQVJFX0VYUE9SVF9JTkZPOwogCi0gICAgc3RhdGljIHZv
aWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklT
SVRfQ0hJTERSRU47CiAKIHByaXZhdGU6CiAgICAgSlNBc3luY0dlbmVyYXRvcihWTSYsIFN0cnVj
dHVyZSopOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCaWdJbnQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQmlnSW50LmNw
cAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNC
aWdJbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENvcHlyaWdo
dCAoQykgMjAxNyBDYWlvIExpbWEgPHRpY2Fpb2xpbWFAZ21haWwuY29tPgotICogQ29weXJpZ2h0
IChDKSAyMDE3LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02Nyw3ICs2Nyw4IEBAIEpTQmlnSW50OjpKU0Jp
Z0ludChWTSYgdm0sIFN0cnVjdHVyZSogc3QKICAgICAsIG1fZGF0YSh2bSwgdGhpcywgZGF0YSwg
bGVuZ3RoKQogeyB9CiAKLXZvaWQgSlNCaWdJbnQ6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxs
LCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lk
IEpTQmlnSW50Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0
b3IpCiB7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0JpZ0ludCo+KGNlbGwpOwog
ICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTc2
LDYgKzc3LDggQEAgdm9pZCBKU0JpZ0ludDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbAogICAg
ICAgICB2aXNpdG9yLm1hcmtBdXhpbGlhcnkoZGF0YSk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElM
RFJFTihKU0JpZ0ludCk7CisKIHZvaWQgSlNCaWdJbnQ6OmluaXRpYWxpemUoSW5pdGlhbGl6YXRp
b25UeXBlIGluaXRUeXBlKQogewogICAgIGlmIChpbml0VHlwZSA9PSBJbml0aWFsaXphdGlvblR5
cGU6OldpdGhaZXJvKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCaWdJ
bnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JpZ0lu
dC5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0JpZ0ludC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENvcHlyaWdo
dCAoQykgMjAxNyBDYWlvIExpbWEgPHRpY2Fpb2xpbWFAZ21haWwuY29tPgotICogQ29weXJpZ2h0
IChDKSAyMDE5LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE5LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01MCw3ICs1MCw3IEBAIHB1YmxpYzoKICAgICBz
dGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJl
RmxhZ3MgfCBTdHJ1Y3R1cmVJc0ltbW9ydGFsIHwgT3ZlcnJpZGVzVG9UaGlzOwogICAgIGZyaWVu
ZCBjbGFzcyBDYWNoZWRCaWdJbnQ7CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpT
Q2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAg
IHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2Vzcz4KICAgICBzdGF0aWMg
SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTQm91bmRGdW5jdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCb3VuZEZ1bmN0aW9uLmNwcAkocmV2aXNpb24gMjcyODMw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCb3VuZEZ1bmN0aW9uLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEs
IDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTEtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI0OSw3ICsyNDksOCBAQCB2b2lkIEpTQm91bmRGdW5j
dGlvbjo6ZmluaXNoQ3JlYXRpb24oVk0mCiAgICAgQVNTRVJUKGluaGVyaXRzKHZtLCBpbmZvKCkp
KTsKIH0KIAotdm9pZCBKU0JvdW5kRnVuY3Rpb246OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxs
LCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lk
IEpTQm91bmRGdW5jdGlvbjo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9y
JiB2aXNpdG9yKQogewogICAgIEpTQm91bmRGdW5jdGlvbiogdGhpc09iamVjdCA9IGpzQ2FzdDxK
U0JvdW5kRnVuY3Rpb24qPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRo
aXNPYmplY3QsIGluZm8oKSk7CkBAIC0yNjEsNCArMjYyLDYgQEAgdm9pZCBKU0JvdW5kRnVuY3Rp
b246OnZpc2l0Q2hpbGRyZW4oSlNDZQogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1f
bmFtZU1heUJlTnVsbCk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU0JvdW5kRnVuY3Rp
b24pOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTQm91bmRGdW5jdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTQm91bmRGdW5jdGlvbi5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JvdW5kRnVuY3Rpb24uaAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxOCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAyMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTg0LDcgKzg0LDcgQEAgcHJpdmF0ZToKICAgICBKU0JvdW5kRnVuY3Rpb24oVk0mLCBO
YXRpdmVFeGVjdXRhYmxlKiwgSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqLCBKU09iamVjdCog
dGFyZ2V0RnVuY3Rpb24sIEpTVmFsdWUgYm91bmRUaGlzLCBKU0ltbXV0YWJsZUJ1dHRlcmZseSog
Ym91bmRBcmdzLCBKU1N0cmluZyogbmFtZU1heUJlTnVsbCwgZG91YmxlIGxlbmd0aCk7CiAKICAg
ICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJl
bihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAK
ICAgICBXcml0ZUJhcnJpZXI8SlNPYmplY3Q+IG1fdGFyZ2V0RnVuY3Rpb247CiAgICAgV3JpdGVC
YXJyaWVyPFVua25vd24+IG1fYm91bmRUaGlzOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNDYWxsZWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQ2FsbGVlLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNDYWxsZWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTUwLDcg
KzUwLDggQEAgdm9pZCBKU0NhbGxlZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQogICAgIEFTU0VS
VChpbmhlcml0cyh2bSwgaW5mbygpKSk7CiB9CiAKLXZvaWQgSlNDYWxsZWU6OnZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1l
IFZpc2l0b3I+Cit2b2lkIEpTQ2FsbGVlOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGws
IFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNDYWxsZWUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8
SlNDYWxsZWUqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmpl
Y3QsIGluZm8oKSk7CkBAIC01OSw0ICs2MCw2IEBAIHZvaWQgSlNDYWxsZWU6OnZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKiBjZWwKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX3Njb3BlKTsK
IH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTQ2FsbGVlKTsKKwogfSAvLyBuYW1lc3BhY2Ug
SlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NhbGxlZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2FsbGVlLmgJKHJldmlz
aW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2FsbGVlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNC0y
MDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMTAwLDcgKzEwMCw3IEBAIHByb3RlY3RlZDoKICAgICB2b2lkIGZpbmlz
aENyZWF0aW9uKFZNJik7CiAgICAgdXNpbmcgQmFzZTo6ZmluaXNoQ3JlYXRpb247CiAKLSAgICBz
dGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVD
TEFSRV9WSVNJVF9DSElMRFJFTjsKIAogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgTExJbnRP
ZmZzZXRzRXh0cmFjdG9yOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlND
ZWxsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxs
LmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
Q2VsbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqICBDb3B5cmlnaHQg
KEMpIDE5OTktMjAwMSBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQogICogIENvcHlyaWdo
dCAoQykgMjAwMSBQZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQotICogIENvcHlyaWdodCAoQykg
MjAwMy0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQg
KEMpIDIwMDMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYwpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIkpTTG9jay5oIgogI2luY2x1
ZGUgIkpTVHlwZUluZm8uaCIKICNpbmNsdWRlICJTbG90VmlzaXRvci5oIgorI2luY2x1ZGUgIlNs
b3RWaXNpdG9yTWFjcm9zLmgiCiAjaW5jbHVkZSAiU3Vic3BhY2VBY2Nlc3MuaCIKICNpbmNsdWRl
ICJUeXBlZEFycmF5VHlwZS5oIgogI2luY2x1ZGUgIldyaXRlQmFycmllci5oIgpAQCAtMTY3LDgg
KzE2OCw4IEBAIHB1YmxpYzoKICAgICBzaXplX3QgZXN0aW1hdGVkU2l6ZUluQnl0ZXMoVk0mKSBj
b25zdDsKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgc2l6ZV90IGVzdGltYXRlZFNpemUo
SlNDZWxsKiwgVk0mKTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwg
U2xvdFZpc2l0b3ImKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdE91dHB1dENvbnN0cmFpbnRzKEpT
Q2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTl9XSVRIX01P
RElGSUVSKGlubGluZSk7CisgICAgREVDTEFSRV9WSVNJVF9PVVRQVVRfQ09OU1RSQUlOVFNfV0lU
SF9NT0RJRklFUihpbmxpbmUpOwogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQg
YW5hbHl6ZUhlYXAoSlNDZWxsKiwgSGVhcEFuYWx5emVyJik7CiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbElubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGxJbmxpbmVzLmgJKHJldmlzaW9uIDI3MjgzMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbElubGluZXMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTE0MSwxNSArMTQxLDIxIEBAIEFMV0FZU19JTkxJTkUgU3RydWN0dXJlKiBK
U0NlbGw6OnN0cnVjdHUKICAgICByZXR1cm4gdm0uZ2V0U3RydWN0dXJlKG1fc3RydWN0dXJlSUQp
OwogfQogCi1pbmxpbmUgdm9pZCBKU0NlbGw6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBT
bG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpT
Q2VsbDo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQog
ewogICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQoY2VsbC0+c3RydWN0dXJlKHZpc2l0b3Iu
dm0oKSkpOwogfQogCi1pbmxpbmUgdm9pZCBKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHMo
SlNDZWxsKiwgU2xvdFZpc2l0b3ImKQorREVGSU5FX1ZJU0lUX0NISUxEUkVOX1dJVEhfTU9ESUZJ
RVIoaW5saW5lLCBKU0NlbGwpOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgorQUxXQVlT
X0lOTElORSB2b2lkIEpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50c0ltcGwoSlNDZWxsKiwg
VmlzaXRvciYpCiB7CiB9CiAKK0RFRklORV9WSVNJVF9PVVRQVVRfQ09OU1RSQUlOVFNfV0lUSF9N
T0RJRklFUihpbmxpbmUsIEpTQ2VsbCk7CisKIEFMV0FZU19JTkxJTkUgVk0mIENhbGxGcmFtZTo6
ZGVwcmVjYXRlZFZNKCkgY29uc3QKIHsKICAgICBKU0NlbGwqIGNhbGxlZSA9IHRoaXMtPmNhbGxl
ZSgpLmFzQ2VsbCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDdXN0
b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNDdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbi5jcHAJKHJldmlzaW9u
IDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ3VzdG9tR2V0dGVy
U2V0dGVyRnVuY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxNSwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTg1LDcgKzg1LDggQEAgSlND
dXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbiogSlNDdXN0b21HZQogICAgIHJldHVybiBmdW5jdGlv
bjsKIH0KIAotdm9pZCBKU0N1c3RvbUdldHRlclNldHRlckZ1bmN0aW9uOjp2aXNpdENoaWxkcmVu
KEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPgordm9pZCBKU0N1c3RvbUdldHRlclNldHRlckZ1bmN0aW9uOjp2aXNpdENoaWxkcmVu
SW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNDdXN0b21HZXR0
ZXJTZXR0ZXJGdW5jdGlvbiogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0N1c3RvbUdldHRlclNldHRl
ckZ1bmN0aW9uKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2Jq
ZWN0LCBpbmZvKCkpOwpAQCAtOTQsNiArOTUsOCBAQCB2b2lkIEpTQ3VzdG9tR2V0dGVyU2V0dGVy
RnVuY3Rpb246OnZpc2l0CiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9nZXR0ZXJT
ZXR0ZXIpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNDdXN0b21HZXR0ZXJTZXR0ZXJG
dW5jdGlvbik7CisKIHZvaWQgSlNDdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbjo6ZmluaXNoQ3Jl
YXRpb24oVk0mIHZtLCBOYXRpdmVFeGVjdXRhYmxlKiBleGVjdXRhYmxlLCBDdXN0b21HZXR0ZXJT
ZXR0ZXIqIGdldHRlclNldHRlciwgY29uc3QgU3RyaW5nJiBuYW1lKQogewogICAgIEJhc2U6OmZp
bmlzaENyZWF0aW9uKHZtLCBleGVjdXRhYmxlLCBpc1NldHRlcigpLCBuYW1lKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ3VzdG9tR2V0dGVyU2V0dGVyRnVuY3Rpb24u
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0N1c3RvbUdl
dHRlclNldHRlckZ1bmN0aW9uLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTQ3VzdG9tR2V0dGVyU2V0dGVyRnVuY3Rpb24uaAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxOSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTYzLDcgKzYzLDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBKU0N1c3RvbUdl
dHRlclNldHRlckZ1bmN0aW9uKFZNJiwgTmF0aXZlRXhlY3V0YWJsZSosIEpTR2xvYmFsT2JqZWN0
KiwgU3RydWN0dXJlKiwgVHlwZSwgY29uc3QgUHJvcGVydHlOYW1lJik7CiAgICAgdm9pZCBmaW5p
c2hDcmVhdGlvbihWTSYsIE5hdGl2ZUV4ZWN1dGFibGUqLCBDdXN0b21HZXR0ZXJTZXR0ZXIqLCBj
b25zdCBTdHJpbmcmKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNs
b3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIFdyaXRlQmFy
cmllcjxDdXN0b21HZXR0ZXJTZXR0ZXI+IG1fZ2V0dGVyU2V0dGVyOwogICAgIFR5cGUgbV90eXBl
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGaW5hbGl6YXRpb25SZWdp
c3RyeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNG
aW5hbGl6YXRpb25SZWdpc3RyeS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTRmluYWxpemF0aW9uUmVnaXN0cnkuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSwgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIwLTIwMjEgQXBwbGUs
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkpTRmlu
YWxpemF0aW9uUmVnaXN0cnkuaCIKIAorI2luY2x1ZGUgIkFic3RyYWN0U2xvdFZpc2l0b3IuaCIK
ICNpbmNsdWRlICJEZWZlcnJlZFdvcmtUaW1lci5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIK
ICNpbmNsdWRlICJKU0ludGVybmFsRmllbGRPYmplY3RJbXBsSW5saW5lcy5oIgpAQCAtNjAsNyAr
NjEsOCBAQCB2b2lkIEpTRmluYWxpemF0aW9uUmVnaXN0cnk6OmZpbmlzaENyZWF0CiAgICAgZ2xv
YmFsT2JqZWN0LT5nbG9iYWxPYmplY3RNZXRob2RUYWJsZSgpLT5jdXJyZW50U2NyaXB0RXhlY3V0
aW9uT3duZXIoZ2xvYmFsT2JqZWN0KTsKIH0KIAotdm9pZCBKU0ZpbmFsaXphdGlvblJlZ2lzdHJ5
Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1w
bGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0ZpbmFsaXphdGlvblJlZ2lzdHJ5Ojp2aXNp
dENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgQmFz
ZTo6dmlzaXRDaGlsZHJlbihjZWxsLCB2aXNpdG9yKTsKIApAQCAtODAsMTMgKzgyLDE1IEBAIHZv
aWQgSlNGaW5hbGl6YXRpb25SZWdpc3RyeTo6dmlzaXRDaGlsZHIKICAgICBmb3IgKGF1dG8mIGhv
bGRpbmdzIDogdGhpc09iamVjdC0+bV9ub1VucmVnaXN0cmF0aW9uRGVhZCkKICAgICAgICAgdmlz
aXRvci5hcHBlbmQoaG9sZGluZ3MpOwogCi0gICAgc2l6ZV90IHRvdGFsQnVmZmVyU2l6ZXNJbkJ5
dGVzID0gdGhpc09iamVjdC0+bV9kZWFkUmVnaXN0cmF0aW9ucy5jYXBhY2l0eSgpICogc2l6ZW9m
KGRlY2x0eXBlKHRoaXNPYmplY3QtPm1fZGVhZFJlZ2lzdHJhdGlvbnMpOjpLZXlWYWx1ZVBhaXJU
eXBlKTsKLSAgICB0b3RhbEJ1ZmZlclNpemVzSW5CeXRlcyArPSB0aGlzT2JqZWN0LT5tX2xpdmVS
ZWdpc3RyYXRpb25zLmNhcGFjaXR5KCkgKiBzaXplb2YoZGVjbHR5cGUodGhpc09iamVjdC0+bV9k
ZWFkUmVnaXN0cmF0aW9ucyk6OktleVZhbHVlUGFpclR5cGUpOworICAgIHNpemVfdCB0b3RhbEJ1
ZmZlclNpemVzSW5CeXRlcyA9IHRoaXNPYmplY3QtPm1fZGVhZFJlZ2lzdHJhdGlvbnMuY2FwYWNp
dHkoKSAqIHNpemVvZih0eXBlbmFtZSBkZWNsdHlwZSh0aGlzT2JqZWN0LT5tX2RlYWRSZWdpc3Ry
YXRpb25zKTo6S2V5VmFsdWVQYWlyVHlwZSk7CisgICAgdG90YWxCdWZmZXJTaXplc0luQnl0ZXMg
Kz0gdGhpc09iamVjdC0+bV9saXZlUmVnaXN0cmF0aW9ucy5jYXBhY2l0eSgpICogc2l6ZW9mKHR5
cGVuYW1lIGRlY2x0eXBlKHRoaXNPYmplY3QtPm1fZGVhZFJlZ2lzdHJhdGlvbnMpOjpLZXlWYWx1
ZVBhaXJUeXBlKTsKICAgICB0b3RhbEJ1ZmZlclNpemVzSW5CeXRlcyArPSB0aGlzT2JqZWN0LT5t
X25vVW5yZWdpc3RyYXRpb25MaXZlLmNhcGFjaXR5KCkgKiBzaXplb2YoZGVjbHR5cGUodGhpc09i
amVjdC0+bV9ub1VucmVnaXN0cmF0aW9uTGl2ZS50YWtlTGFzdCgpKSk7CiAgICAgdG90YWxCdWZm
ZXJTaXplc0luQnl0ZXMgKz0gdGhpc09iamVjdC0+bV9ub1VucmVnaXN0cmF0aW9uRGVhZC5jYXBh
Y2l0eSgpICogc2l6ZW9mKGRlY2x0eXBlKHRoaXNPYmplY3QtPm1fbm9VbnJlZ2lzdHJhdGlvbkxp
dmUudGFrZUxhc3QoKSkpOwogICAgIHZpc2l0b3Iudm0oKS5oZWFwLnJlcG9ydEV4dHJhTWVtb3J5
VmlzaXRlZCh0b3RhbEJ1ZmZlclNpemVzSW5CeXRlcyk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElM
RFJFTihKU0ZpbmFsaXphdGlvblJlZ2lzdHJ5KTsKKwogdm9pZCBKU0ZpbmFsaXphdGlvblJlZ2lz
dHJ5OjpkZXN0cm95KEpTQ2VsbCogdGFibGUpCiB7CiAgICAgc3RhdGljX2Nhc3Q8SlNGaW5hbGl6
YXRpb25SZWdpc3RyeSo+KHRhYmxlKS0+fkpTRmluYWxpemF0aW9uUmVnaXN0cnkoKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRmluYWxpemF0aW9uUmVnaXN0cnkuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ZpbmFsaXphdGlv
blJlZ2lzdHJ5LmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTRmluYWxpemF0aW9uUmVnaXN0cnkuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMC0yMDIxIEFwcGxlLCBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTcwLDcgKzcw
LDcgQEAgcHVibGljOgogICAgIERFQ0xBUkVfRVhQT1JUX0lORk87CiAKICAgICB2b2lkIGZpbmFs
aXplVW5jb25kaXRpb25hbGx5KFZNJik7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihK
U0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAgICAg
c3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
bmVlZHNEZXN0cnVjdGlvbiA9IHRydWU7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTRnVuY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTRnVuY3Rpb24uY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw3
ICsxLDcgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDIgSGFycmkgUG9ydGVuIChw
b3J0ZW5Aa2RlLm9yZykKICAqICBDb3B5cmlnaHQgKEMpIDIwMDEgUGV0ZXIgS2VsbHkgKHBta0Bw
b3N0LmNvbSkKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICogIENvcHlyaWdodCAoQykgMjAwNyBDYW1lcm9uIFp3YXJpY2gg
KGN3endhcmljaEB1d2F0ZXJsb28uY2EpCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA3IE1ha3MgT3Js
b3ZpY2gKICAqICBDb3B5cmlnaHQgKEMpIDIwMTUgQ2Fub24gSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgpAQCAtMjUyLDcgKzI1Miw4IEBAIGNvbnN0IFNvdXJjZUNvZGUqIEpTRnVuY3Rpb246OnNv
dXJjZUNvZGUKICAgICByZXR1cm4gJmpzRXhlY3V0YWJsZSgpLT5zb3VyY2UoKTsKIH0KICAgICAK
LXZvaWQgSlNGdW5jdGlvbjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9y
JiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNGdW5jdGlvbjo6
dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAg
IEpTRnVuY3Rpb24qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNGdW5jdGlvbio+KGNlbGwpOwogICAg
IEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTI2MSw2
ICsyNjIsOCBAQCB2b2lkIEpTRnVuY3Rpb246OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjCiAgICAg
dmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZChiaXR3aXNlX2Nhc3Q8SlNDZWxsKj4oYml0d2lzZV9j
YXN0PHVpbnRwdHJfdD4odGhpc09iamVjdC0+bV9leGVjdXRhYmxlT3JSYXJlRGF0YSkgJiB+cmFy
ZURhdGFUYWcpKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTRnVuY3Rpb24pOworCiBD
YWxsRGF0YSBKU0Z1bmN0aW9uOjpnZXRDYWxsRGF0YShKU0NlbGwqIGNlbGwpCiB7CiAgICAgLy8g
S2VlcCB0aGlzIGZ1bmN0aW9uIE9LIGZvciBpbnZvY2F0aW9uIGZyb20gY29uY3VycmVudCBjb21w
aWxlcnMuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5o
CShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1
bmN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogIENvcHlyaWdo
dCAoQykgMTk5OS0yMDAwIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCi0gKiAgQ29weXJp
Z2h0IChDKSAyMDAzLTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENv
cHlyaWdodCAoQykgMjAwMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
ICBDb3B5cmlnaHQgKEMpIDIwMDcgQ2FtZXJvbiBad2FyaWNoIChjd3p3YXJpY2hAdXdhdGVybG9v
LmNhKQogICogIENvcHlyaWdodCAoQykgMjAwNyBNYWtzIE9ybG92aWNoCiAgKgpAQCAtMTgwLDcg
KzE4MCw3IEBAIHByb3RlY3RlZDoKIAogICAgIHN0YXRpYyBib29sIGRlbGV0ZVByb3BlcnR5KEpT
Q2VsbCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBEZWxldGVQcm9wZXJ0eVNsb3Qm
KTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3Im
KTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiBwcml2YXRlOgogICAgIHN0YXRpYyBK
U0Z1bmN0aW9uKiBjcmVhdGVJbXBsKFZNJiB2bSwgRnVuY3Rpb25FeGVjdXRhYmxlKiBleGVjdXRh
YmxlLCBKU1Njb3BlKiBzY29wZSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiAyNzI4
MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyYXRvci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE5IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOS0yMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtNTksMTEgKzU5LDE0IEBAIHZvaWQgSlNHZW5lcmF0b3I6OmZpbmlzaENyZWF0
aW9uKFZNJiB2bSkKICAgICAgICAgaW50ZXJuYWxGaWVsZChpbmRleCkuc2V0KHZtLCB0aGlzLCB2
YWx1ZXNbaW5kZXhdKTsKIH0KIAotdm9pZCBKU0dlbmVyYXRvcjo6dmlzaXRDaGlsZHJlbihKU0Nl
bGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRv
cj4KK3ZvaWQgSlNHZW5lcmF0b3I6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlz
aXRvciYgdmlzaXRvcikKIHsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTR2VuZXJh
dG9yKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBp
bmZvKCkpOwogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CiB9
CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU0dlbmVyYXRvcik7CisKIH0gLy8gbmFtZXNwYWNl
IEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmF0b3IuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyYXRvci5o
CShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dl
bmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTktMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTk0LDcgKzk0LDcgQEAgcHVibGljOgogCiAgICAgREVD
TEFSRV9FWFBPUlRfSU5GTzsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiBwcml2YXRl
OgogICAgIEpTR2VuZXJhdG9yKFZNJiwgU3RydWN0dXJlKik7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlldy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmgJ
KHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMTMsNyArMzEzLDcgQEAg
cHJpdmF0ZToKICAgICBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0Kiwg
SlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIERvbnRFbnVtUHJvcGVydGllc01v
ZGUpOwogCiAgICAgc3RhdGljIHNpemVfdCBlc3RpbWF0ZWRTaXplKEpTQ2VsbCosIFZNJik7Ci0g
ICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAg
IERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICAvLyBSZXR1cm5zIHRydWUgaWYgc3VjY2Vz
c2Z1bCwgYW5kIGZhbHNlIG9uIGVycm9yOyBpdCB3aWxsIHRocm93IG9uIGVycm9yLgogICAgIHRl
bXBsYXRlPHR5cGVuYW1lIE90aGVyQWRhcHRvcj4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5s
aW5lcy5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxOSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTUx
Nyw3ICs1MTcsOCBAQCBzaXplX3QgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46CiB9
CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+Ci12b2lkIEpTR2VuZXJpY1R5cGVkQXJyYXlW
aWV3PEFkYXB0b3I+Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZp
c2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0dlbmVyaWNUeXBlZEFy
cmF5VmlldzxBZGFwdG9yPjo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9y
JiB2aXNpdG9yKQogewogICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiB0aGlzT2JqZWN0ID0g
anNDYXN0PEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Kj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09C
SkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNTU1LDQgKzU1Niw2IEBAIHZv
aWQgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OnYKICAgICB9CiB9CiAKK0RFRklO
RV9WSVNJVF9DSElMRFJFTl9XSVRIX01PRElGSUVSKHRlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+
LCBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPik7CisKIH0gLy8gbmFtZXNwYWNlIEpT
QwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2Jq
ZWN0LmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNHbG9iYWxPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAwNy0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwOCBDYW1lcm9uIFp3YXJpY2ggKGN3endhcmljaEB1
d2F0ZXJsb28uY2EpCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0xODkyLDcgKzE4OTIsOCBAQCB2b2lk
IEpTR2xvYmFsT2JqZWN0OjpyZXNldFByb3RvdHlwZShWTSYgCiAgICAgc2V0R2xvYmFsVGhpcyh2
bSwgSlNQcm94eTo6Y3JlYXRlKHZtLCBKU1Byb3h5OjpjcmVhdGVTdHJ1Y3R1cmUodm0sIHRoaXMs
IHByb3RvdHlwZSwgUHVyZUZvcndhcmRpbmdQcm94eVR5cGUpLCB0aGlzKSk7CiB9CiAKLXZvaWQg
SlNHbG9iYWxPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYg
dmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTR2xvYmFsT2JqZWN0
Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7IAog
ICAgIEpTR2xvYmFsT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTR2xvYmFsT2JqZWN0Kj4o
Y2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkp
OwpAQCAtMjA2MCw2ICsyMDYxLDggQEAgdm9pZCBKU0dsb2JhbE9iamVjdDo6dmlzaXRDaGlsZHJl
bihKU0NlbAogICAgIHRoaXNPYmplY3QtPm1fcmVnRXhwR2xvYmFsRGF0YS52aXNpdEFnZ3JlZ2F0
ZSh2aXNpdG9yKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOX1dJVEhfTU9ESUZJRVIoSlNf
RVhQT1JUX1BSSVZBVEUsIEpTR2xvYmFsT2JqZWN0KTsKKwogQ2FsbEZyYW1lKiBKU0dsb2JhbE9i
amVjdDo6ZGVwcmVjYXRlZENhbGxGcmFtZUZvckRlYnVnZ2VyKCkKIHsKICAgICByZXR1cm4gQ2Fs
bEZyYW1lOjpjcmVhdGUobV9kZXByZWNhdGVkQ2FsbEZyYW1lRm9yRGVidWdnZXIpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCShyZXZp
c2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9i
amVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqICBDb3B5cmlnaHQg
KEMpIDIwMDcgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KLSAqICBDb3B5cmlnaHQgKEMp
IDIwMDctMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0
IChDKSAyMDA3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKQEAgLTYwOSw3ICs2MDksNyBAQCBwdWJsaWM6CiAgICAgSlNfRVhQT1JUX1BS
SVZBVEUgfkpTR2xvYmFsT2JqZWN0KCk7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZv
aWQgZGVzdHJveShKU0NlbGwqKTsKIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lk
IHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lU
X0NISUxEUkVOX1dJVEhfTU9ESUZJRVIoSlNfRVhQT1JUX1BSSVZBVEUpOwogCiAgICAgSlNfRVhQ
T1JUX1BSSVZBVEUgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiwgSlNH
bG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwogICAgIEpTX0VYUE9S
VF9QUklWQVRFIHN0YXRpYyBib29sIHB1dChKU0NlbGwqLCBKU0dsb2JhbE9iamVjdCosIFByb3Bl
cnR5TmFtZSwgSlNWYWx1ZSwgUHV0UHJvcGVydHlTbG90Jik7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0ltbXV0YWJsZUJ1dHRlcmZseS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbW11dGFibGVCdXR0ZXJmbHkuY3BwCShy
ZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ltbXV0
YWJsZUJ1dHRlcmZseS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxOC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzIsNyArMzIsOCBAQCBuYW1lc3BhY2Ug
SlNDIHsKIAogY29uc3QgQ2xhc3NJbmZvIEpTSW1tdXRhYmxlQnV0dGVyZmx5OjpzX2luZm8gPSB7
ICJJbW11dGFibGUgQnV0dGVyZmx5IiwgbnVsbHB0ciwgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRF
X01FVEhPRF9UQUJMRShKU0ltbXV0YWJsZUJ1dHRlcmZseSkgfTsKIAotdm9pZCBKU0ltbXV0YWJs
ZUJ1dHRlcmZseTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNp
dG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNJbW11dGFibGVCdXR0ZXJm
bHk6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsK
ICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNlbGwsIGluZm8oKSk7CiAgICAgQmFzZTo6
dmlzaXRDaGlsZHJlbihjZWxsLCB2aXNpdG9yKTsKQEAgLTQ1LDYgKzQ2LDggQEAgdm9pZCBKU0lt
bXV0YWJsZUJ1dHRlcmZseTo6dmlzaXRDaGlsZHJlbgogICAgIHZpc2l0b3IuYXBwZW5kVmFsdWVz
SGlkZGVuKGJ1dHRlcmZseS0+Y29udGlndW91cygpLmRhdGEoKSwgYnV0dGVyZmx5LT5wdWJsaWNM
ZW5ndGgoKSk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU0ltbXV0YWJsZUJ1dHRlcmZs
eSk7CisKIHZvaWQgSlNJbW11dGFibGVCdXR0ZXJmbHk6OmNvcHlUb0FyZ3VtZW50cyhKU0dsb2Jh
bE9iamVjdCosIEpTVmFsdWUqIGZpcnN0RWxlbWVudERlc3QsIHVuc2lnbmVkIG9mZnNldCwgdW5z
aWduZWQgbGVuZ3RoKQogewogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsr
aSkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbW11dGFibGVCdXR0
ZXJmbHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0lt
bXV0YWJsZUJ1dHRlcmZseS5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0ltbXV0YWJsZUJ1dHRlcmZseS5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOC0yMDE5IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOC0yMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MTQ1LDcgKzE0NSw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGpzRG91YmxlTnVtYmVyKHZh
bHVlKTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNs
b3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIHZvaWQgY29w
eVRvQXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSogZmlyc3RFbGVtZW50RGVzdCwg
dW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0ludGVybmFsRmllbGRPYmplY3RJbXBsLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1w
bC5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0ludGVybmFsRmllbGRPYmplY3RJbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjYsNyArNjYsNyBAQCBw
dWJsaWM6CiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkludGVybmFsRmllbGQodW5zaWdu
ZWQgaW5kZXgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU0ludGVybmFsRmllbGRPYmplY3RJ
bXBsLCBtX2ludGVybmFsRmllbGRzKSArIGluZGV4ICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtu
b3duPik7IH0KIAogcHJvdGVjdGVkOgotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlND
ZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAg
SlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbChWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQog
ICAgICAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTSW50ZXJuYWxGaWVsZE9iamVjdEltcGxJbmxpbmVzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1w
bElubGluZXMuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbElubGluZXMuaAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE5LTIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0z
MCw3ICszMCw4IEBACiBuYW1lc3BhY2UgSlNDIHsKIAogdGVtcGxhdGU8dW5zaWduZWQgcGFzc2Vk
TnVtYmVyT2ZJbnRlcm5hbEZpZWxkcz4KLXZvaWQgSlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbDxw
YXNzZWROdW1iZXJPZkludGVybmFsRmllbGRzPjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGws
IFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQg
SlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbDxwYXNzZWROdW1iZXJPZkludGVybmFsRmllbGRzPjo6
dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAg
IGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbCo+KGNl
bGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsK
QEAgLTM4LDQgKzM5LDYgQEAgdm9pZCBKU0ludGVybmFsRmllbGRPYmplY3RJbXBsPHBhc3NlZE51
bQogICAgIHZpc2l0b3IuYXBwZW5kVmFsdWVzKHRoaXNPYmplY3QtPm1faW50ZXJuYWxGaWVsZHMs
IG51bWJlck9mSW50ZXJuYWxGaWVsZHMpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU5fV0lU
SF9NT0RJRklFUih0ZW1wbGF0ZTx1bnNpZ25lZCBwYXNzZWROdW1iZXJPZkludGVybmFsRmllbGRz
PiwgSlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbDxwYXNzZWROdW1iZXJPZkludGVybmFsRmllbGRz
Pik7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNMZXhpY2FsRW52aXJvbm1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTTGV4aWNhbEVudmlyb25tZW50LmNwcAkocmV2aXNpb24gMjcy
ODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMZXhpY2FsRW52aXJvbm1l
bnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAwOC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAwOC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzYsNyArMzYsOCBAQCBuYW1lc3BhY2UgSlNDIHsK
IAogY29uc3QgQ2xhc3NJbmZvIEpTTGV4aWNhbEVudmlyb25tZW50OjpzX2luZm8gPSB7ICJKU0xl
eGljYWxFbnZpcm9ubWVudCIsICZCYXNlOjpzX2luZm8sIG51bGxwdHIsIG51bGxwdHIsIENSRUFU
RV9NRVRIT0RfVEFCTEUoSlNMZXhpY2FsRW52aXJvbm1lbnQpIH07CiAKLXZvaWQgSlNMZXhpY2Fs
RW52aXJvbm1lbnQ6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlz
aXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTTGV4aWNhbEVudmlyb25t
ZW50Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7
CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0xleGljYWxFbnZpcm9ubWVudCo+KGNl
bGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsK
QEAgLTQ0LDYgKzQ1LDggQEAgdm9pZCBKU0xleGljYWxFbnZpcm9ubWVudDo6dmlzaXRDaGlsZHJl
bgogICAgIHZpc2l0b3IuYXBwZW5kVmFsdWVzSGlkZGVuKHRoaXNPYmplY3QtPnZhcmlhYmxlcygp
LCB0aGlzT2JqZWN0LT5zeW1ib2xUYWJsZSgpLT5zY29wZVNpemUoKSk7CiB9CiAKK0RFRklORV9W
SVNJVF9DSElMRFJFTihKU0xleGljYWxFbnZpcm9ubWVudCk7CisKIHZvaWQgSlNMZXhpY2FsRW52
aXJvbm1lbnQ6OmFuYWx5emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFuYWx5emVyJiBhbmFseXpl
cikKIHsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTTGV4aWNhbEVudmlyb25tZW50
Kj4oY2VsbCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xleGljYWxF
bnZpcm9ubWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTTGV4aWNhbEVudmlyb25tZW50LmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTTGV4aWNhbEVudmlyb25tZW50LmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMjAgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMjEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC0xMzQsNyArMTM0LDcgQEAgcHJvdGVjdGVkOgogICAgICAgICB9CiAgICAgfQogCi0gICAg
c3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERF
Q0xBUkVfVklTSVRfQ0hJTERSRU47CiAgICAgc3RhdGljIHZvaWQgYW5hbHl6ZUhlYXAoSlNDZWxs
KiwgSGVhcEFuYWx5emVyJik7CiB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU01hcEl0ZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU01hcEl0ZXJhdG9yLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNYXBJdGVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTcgQXBwbGUsIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIxIEFwcGxl
LCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTU3LDEzICs1NywxNiBAQCB2b2lkIEpTTWFwSXRlcmF0b3I6OmZpbmlzaENyZWF0aW9u
KFZNJiB2CiAgICAgICAgIEJhc2U6OmludGVybmFsRmllbGQoaW5kZXgpLnNldCh2bSwgdGhpcywg
dmFsdWVzW2luZGV4XSk7CiB9CiAKLXZvaWQgSlNNYXBJdGVyYXRvcjo6dmlzaXRDaGlsZHJlbihK
U0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlz
aXRvcj4KK3ZvaWQgSlNNYXBJdGVyYXRvcjo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxs
LCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNN
YXBJdGVyYXRvcio+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09i
amVjdCwgaW5mbygpKTsKICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0
b3IpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNNYXBJdGVyYXRvcik7CisKIEpTVmFs
dWUgSlNNYXBJdGVyYXRvcjo6Y3JlYXRlUGFpcihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBKU1ZhbHVlIGtleSwgSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZl
ciBhcmdzOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNYXBJdGVyYXRv
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTWFwSXRl
cmF0b3IuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNNYXBJdGVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMywgMjAxNiBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjEgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTQyLDcgKzE0Miw3IEBA
IHByaXZhdGU6CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYs
IEpTTWFwKiwgSXRlcmF0aW9uS2luZCk7CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOwog
ICAgIEpTVmFsdWUgY3JlYXRlUGFpcihKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUsIEpTVmFsdWUp
OwotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsK
KyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogfTsKIFNUQVRJQ19BU1NFUlRfSVNfVFJJVklB
TExZX0RFU1RSVUNUSUJMRShKU01hcEl0ZXJhdG9yKTsKIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVFbnZpcm9ubWVudC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVFbnZpcm9ubWVudC5jcHAJKHJldmlz
aW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlRW52
aXJvbm1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxNS0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjUsNyArNjUsOCBAQCB2b2lkIEpTTW9k
dWxlRW52aXJvbm1lbnQ6OmZpbmlzaENyZWF0aW9uCiAgICAgdGhpcy0+bW9kdWxlUmVjb3JkU2xv
dCgpLnNldCh2bSwgdGhpcywgbW9kdWxlUmVjb3JkKTsKIH0KIAotdm9pZCBKU01vZHVsZUVudmly
b25tZW50Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3Ip
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU01vZHVsZUVudmlyb25tZW50Ojp2
aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAg
SlNNb2R1bGVFbnZpcm9ubWVudCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU01vZHVsZUVudmlyb25t
ZW50Kj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBp
bmZvKCkpOwpAQCAtNzQsNiArNzUsOCBAQCB2b2lkIEpTTW9kdWxlRW52aXJvbm1lbnQ6OnZpc2l0
Q2hpbGRyZW4oCiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bW9kdWxlUmVjb3JkU2xv
dCgpKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTTW9kdWxlRW52aXJvbm1lbnQpOwor
CiBib29sIEpTTW9kdWxlRW52aXJvbm1lbnQ6OmdldE93blByb3BlcnR5U2xvdChKU09iamVjdCog
Y2VsbCwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5
TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQogewogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+
dm0oKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlRW52aXJv
bm1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01v
ZHVsZUVudmlyb25tZW50LmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTTW9kdWxlRW52aXJvbm1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTg5
LDcgKzg5LDcgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuICpiaXR3aXNlX2Nhc3Q8V3JpdGVC
YXJyaWVyQmFzZTxBYnN0cmFjdE1vZHVsZVJlY29yZD4qPihiaXR3aXNlX2Nhc3Q8Y2hhcio+KHRo
aXMpICsgb2Zmc2V0T2ZNb2R1bGVSZWNvcmQoc3ltYm9sVGFibGUoKSkpOwogICAgIH0KIAotICAg
IHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBE
RUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogfTsKIAogaW5saW5lIEpTTW9kdWxlRW52aXJvbm1lbnQ6
OkpTTW9kdWxlRW52aXJvbm1lbnQoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNTY29w
ZSogY3VycmVudFNjb3BlLCBTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZU5hbWVzcGFjZU9iamVjdC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVOYW1lc3BhY2VP
YmplY3QuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU01vZHVsZU5hbWVzcGFjZU9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC04NSw3
ICs4NSw4IEBAIHZvaWQgSlNNb2R1bGVOYW1lc3BhY2VPYmplY3Q6OmRlc3Ryb3koSlMKICAgICB0
aGlzT2JqZWN0LT5KU01vZHVsZU5hbWVzcGFjZU9iamVjdDo6fkpTTW9kdWxlTmFtZXNwYWNlT2Jq
ZWN0KCk7CiB9CiAKLXZvaWQgSlNNb2R1bGVOYW1lc3BhY2VPYmplY3Q6OnZpc2l0Q2hpbGRyZW4o
SlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZp
c2l0b3I+Cit2b2lkIEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0Ojp2aXNpdENoaWxkcmVuSW1wbChK
U0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNNb2R1bGVOYW1lc3BhY2VP
YmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNNb2R1bGVOYW1lc3BhY2VPYmplY3QqPihjZWxs
KTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBA
IC05OCw2ICs5OSw4IEBAIHZvaWQgSlNNb2R1bGVOYW1lc3BhY2VPYmplY3Q6OnZpc2l0Q2hpbGQK
ICAgICB9CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU01vZHVsZU5hbWVzcGFjZU9iamVj
dCk7CisKIHN0YXRpYyBKU1ZhbHVlIGdldFZhbHVlKEpTTW9kdWxlRW52aXJvbm1lbnQqIGVudmly
b25tZW50LCBQcm9wZXJ0eU5hbWUgbG9jYWxOYW1lLCBTY29wZU9mZnNldCYgc2NvcGVPZmZzZXQp
CiB7CiAgICAgU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlID0gZW52aXJvbm1lbnQtPnN5bWJvbFRh
YmxlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZU5hbWVz
cGFjZU9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTTW9kdWxlTmFtZXNwYWNlT2JqZWN0LmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlTmFtZXNwYWNlT2JqZWN0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjAgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC03Miw3ICs3Miw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgSlNfRVhQT1JU
X1BSSVZBVEUgSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QoVk0mLCBTdHJ1Y3R1cmUqKTsKICAgICBK
U19FWFBPUlRfUFJJVkFURSB2b2lkIGZpbmlzaENyZWF0aW9uKEpTR2xvYmFsT2JqZWN0KiwgQWJz
dHJhY3RNb2R1bGVSZWNvcmQqLCBWZWN0b3I8c3RkOjpwYWlyPElkZW50aWZpZXIsIEFic3RyYWN0
TW9kdWxlUmVjb3JkOjpSZXNvbHV0aW9uPj4mJik7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGls
ZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47
CiAgICAgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3RDb21tb24oSlNHbG9iYWxPYmplY3QqLCBQcm9w
ZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwogCiAgICAgc3RydWN0IEV4cG9ydEVudHJ5IHsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlUmVjb3JkLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZVJlY29yZC5j
cHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
TW9kdWxlUmVjb3JkLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTUtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTcwLDcgKzcwLDggQEAgdm9pZCBK
U01vZHVsZVJlY29yZDo6ZmluaXNoQ3JlYXRpb24oSlNHbAogICAgIEFTU0VSVChpbmhlcml0cyh2
bSwgaW5mbygpKSk7CiB9CiAKLXZvaWQgSlNNb2R1bGVSZWNvcmQ6OnZpc2l0Q2hpbGRyZW4oSlND
ZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0
b3I+Cit2b2lkIEpTTW9kdWxlUmVjb3JkOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGws
IFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNNb2R1bGVSZWNvcmQqIHRoaXNPYmplY3QgPSBq
c0Nhc3Q8SlNNb2R1bGVSZWNvcmQqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVS
SVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC03OCw2ICs3OSw4IEBAIHZvaWQgSlNNb2R1bGVS
ZWNvcmQ6OnZpc2l0Q2hpbGRyZW4oSlNDZWwKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0
LT5tX21vZHVsZVByb2dyYW1FeGVjdXRhYmxlKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVO
KEpTTW9kdWxlUmVjb3JkKTsKKwogdm9pZCBKU01vZHVsZVJlY29yZDo6bGluayhKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHNjcmlwdEZldGNoZXIpCiB7CiAgICAgVk0mIHZt
ID0gZ2xvYmFsT2JqZWN0LT52bSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNNb2R1bGVSZWNvcmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU01vZHVsZVJlY29yZC5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZVJlY29yZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
NjYsNyArNjYsNyBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0dsb2Jh
bE9iamVjdCosIFZNJik7CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCos
IFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIHZvaWQg
aW5zdGFudGlhdGVEZWNsYXJhdGlvbnMoSlNHbG9iYWxPYmplY3QqLCBNb2R1bGVQcm9ncmFtRXhl
Y3V0YWJsZSosIEpTVmFsdWUgc2NyaXB0RmV0Y2hlcik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTTmF0aXZlU3RkRnVuY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTmF0aXZlU3RkRnVuY3Rpb24uY3BwCShyZXZp
c2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU05hdGl2ZVN0
ZEZ1bmN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQxLDEzICs0MSwxNiBAQCBKU05hdGl2
ZVN0ZEZ1bmN0aW9uOjpKU05hdGl2ZVN0ZEZ1bmN0aW9uCiB7CiB9CiAKLXZvaWQgSlNOYXRpdmVT
dGRGdW5jdGlvbjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNp
dG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNOYXRpdmVTdGRGdW5jdGlv
bjo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewog
ICAgIEpTTmF0aXZlU3RkRnVuY3Rpb24qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNOYXRpdmVTdGRG
dW5jdGlvbio+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVj
dCwgaW5mbygpKTsKICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3Ip
OwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNOYXRpdmVTdGRGdW5jdGlvbik7CisKIHZv
aWQgSlNOYXRpdmVTdGRGdW5jdGlvbjo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBOYXRpdmVFeGVj
dXRhYmxlKiBleGVjdXRhYmxlLCB1bnNpZ25lZCBsZW5ndGgsIGNvbnN0IFN0cmluZyYgbmFtZSkK
IHsKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSwgZXhlY3V0YWJsZSwgbGVuZ3RoLCBuYW1l
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTmF0aXZlU3RkRnVuY3Rp
b24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU05hdGl2
ZVN0ZEZ1bmN0aW9uLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTTmF0aXZlU3RkRnVuY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY1LDcg
KzY1LDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBKU05hdGl2ZVN0ZEZ1bmN0aW9uKFZNJiwg
TmF0aXZlRXhlY3V0YWJsZSosIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKiwgTmF0aXZlU3Rk
RnVuY3Rpb24mJik7CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIE5hdGl2ZUV4ZWN1dGFi
bGUqLCB1bnNpZ25lZCBsZW5ndGgsIGNvbnN0IFN0cmluZyYgbmFtZSk7Ci0gICAgc3RhdGljIHZv
aWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklT
SVRfQ0hJTERSRU47CiAKICAgICBOYXRpdmVTdGRGdW5jdGlvbiBtX2Z1bmN0aW9uOwogfTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAJKHJldmlzaW9u
IDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5
LTIwMDEgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKICAqICBDb3B5cmlnaHQgKEMpIDIw
MDEgUGV0ZXIgS2VsbHkgKHBta0Bwb3N0LmNvbSkKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAy
MCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDAz
LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogIENvcHlyaWdodCAoQykg
MjAwNyBFcmljIFNlaWRlbCAoZXJpY0B3ZWJraXQub3JnKQogICoKICAqICBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBAIC03Miw3
ICs3Miw4IEBAIGNvbnN0IENsYXNzSW5mbyBKU09iamVjdDo6c19pbmZvID0geyAiT2IKIAogY29u
c3QgQ2xhc3NJbmZvIEpTRmluYWxPYmplY3Q6OnNfaW5mbyA9IHsgIk9iamVjdCIsICZCYXNlOjpz
X2luZm8sIG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNGaW5hbE9iamVj
dCkgfTsKIAotQUxXQVlTX0lOTElORSB2b2lkIEpTT2JqZWN0OjptYXJrQXV4aWxpYXJ5QW5kVmlz
aXRPdXRPZkxpbmVQcm9wZXJ0aWVzKFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBCdXR0ZXJmbHkqIGJ1
dHRlcmZseSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IG1heE9mZnNldCkK
K3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+CitBTFdBWVNfSU5MSU5FIHZvaWQgSlNPYmplY3Q6
Om1hcmtBdXhpbGlhcnlBbmRWaXNpdE91dE9mTGluZVByb3BlcnRpZXMoVmlzaXRvciYgdmlzaXRv
ciwgQnV0dGVyZmx5KiBidXR0ZXJmbHksIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQcm9wZXJ0eU9m
ZnNldCBtYXhPZmZzZXQpCiB7CiAgICAgLy8gV2UgY2FsbCB0aGlzIHdoZW4gd2UgZm91bmQgZXZl
cnl0aGluZyB3aXRob3V0IHJhY2VzLgogICAgIEFTU0VSVChzdHJ1Y3R1cmUpOwpAQCAtMTAzLDcg
KzEwNCw4IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKU09iamVjdDo6bWFya0F1eGlsaWEKICAgICB2
aXNpdG9yLmFwcGVuZFZhbHVlc0hpZGRlbihidXR0ZXJmbHktPnByb3BlcnR5U3RvcmFnZSgpIC0g
b3V0T2ZMaW5lU2l6ZSwgb3V0T2ZMaW5lU2l6ZSk7CiB9CiAKLUFMV0FZU19JTkxJTkUgU3RydWN0
dXJlKiBKU09iamVjdDo6dmlzaXRCdXR0ZXJmbHkoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1w
bGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgorQUxXQVlTX0lOTElORSBTdHJ1Y3R1cmUqIEpTT2JqZWN0
Ojp2aXNpdEJ1dHRlcmZseShWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHN0YXRpYyBjb25zdCBj
aGFyKiBjb25zdCByYWNlUmVhc29uID0gIkpTT2JqZWN0Ojp2aXNpdEJ1dHRlcmZseSI7CiAgICAg
U3RydWN0dXJlKiByZXN1bHQgPSB2aXNpdEJ1dHRlcmZseUltcGwodmlzaXRvcik7CkBAIC0xMTIs
NyArMTE0LDggQEAgQUxXQVlTX0lOTElORSBTdHJ1Y3R1cmUqIEpTT2JqZWN0Ojp2aXNpdAogICAg
IHJldHVybiByZXN1bHQ7CiB9CiAKLUFMV0FZU19JTkxJTkUgU3RydWN0dXJlKiBKU09iamVjdDo6
dmlzaXRCdXR0ZXJmbHlJbXBsKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5h
bWUgVmlzaXRvcj4KK0FMV0FZU19JTkxJTkUgU3RydWN0dXJlKiBKU09iamVjdDo6dmlzaXRCdXR0
ZXJmbHlJbXBsKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgVk0mIHZtID0gdmlzaXRvci52bSgp
OwogICAgIApAQCAtNDEyLDI0ICs0MTUsMjAgQEAgc2l6ZV90IEpTT2JqZWN0Ojplc3RpbWF0ZWRT
aXplKEpTQ2VsbCogYwogICAgIHJldHVybiBCYXNlOjplc3RpbWF0ZWRTaXplKGNlbGwsIHZtKSAr
IGJ1dHRlcmZseU91dE9mTGluZVNpemU7CiB9CiAKLXZvaWQgSlNPYmplY3Q6OnZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1l
IFZpc2l0b3I+Cit2b2lkIEpTT2JqZWN0Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGws
IFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8
SlNPYmplY3QqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmpl
Y3QsIGluZm8oKSk7Ci0jaWYgQVNTRVJUX0VOQUJMRUQKLSAgICBib29sIHdhc0NoZWNraW5nRm9y
RGVmYXVsdE1hcmtWaW9sYXRpb24gPSB2aXNpdG9yLm1faXNDaGVja2luZ0ZvckRlZmF1bHRNYXJr
VmlvbGF0aW9uOwotICAgIHZpc2l0b3IubV9pc0NoZWNraW5nRm9yRGVmYXVsdE1hcmtWaW9sYXRp
b24gPSBmYWxzZTsKLSNlbmRpZgotICAgIAorICAgIHR5cGVuYW1lIFZpc2l0b3I6OkRlZmF1bHRN
YXJraW5nVmlvbGF0aW9uQXNzZXJ0aW9uU2NvcGUgYXNzZXJ0aW9uU2NvcGUodmlzaXRvcik7CisK
ICAgICBKU0NlbGw6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7Ci0gICAgCisK
ICAgICB0aGlzT2JqZWN0LT52aXNpdEJ1dHRlcmZseSh2aXNpdG9yKTsKLSAgICAKLSNpZiBBU1NF
UlRfRU5BQkxFRAotICAgIHZpc2l0b3IubV9pc0NoZWNraW5nRm9yRGVmYXVsdE1hcmtWaW9sYXRp
b24gPSB3YXNDaGVja2luZ0ZvckRlZmF1bHRNYXJrVmlvbGF0aW9uOwotI2VuZGlmCiB9CiAKK0RF
RklORV9WSVNJVF9DSElMRFJFTl9XSVRIX01PRElGSUVSKEpTX0VYUE9SVF9QUklWQVRFLCBKU09i
amVjdCk7CisKIHZvaWQgSlNPYmplY3Q6OmFuYWx5emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFu
YWx5emVyJiBhbmFseXplcikKIHsKICAgICBKU09iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxK
U09iamVjdCo+KGNlbGwpOwpAQCAtNDY4LDE0ICs0NjcsMTIgQEAgdm9pZCBKU09iamVjdDo6YW5h
bHl6ZUhlYXAoSlNDZWxsKiBjZWxsLAogICAgIH0KIH0KIAotdm9pZCBKU0ZpbmFsT2JqZWN0Ojp2
aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0
ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0ZpbmFsT2JqZWN0Ojp2aXNpdENoaWxkcmVuSW1w
bChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNGaW5hbE9iamVjdCog
dGhpc09iamVjdCA9IGpzQ2FzdDxKU0ZpbmFsT2JqZWN0Kj4oY2VsbCk7CiAgICAgQVNTRVJUX0dD
X09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwotI2lmIEFTU0VSVF9FTkFCTEVE
Ci0gICAgYm9vbCB3YXNDaGVja2luZ0ZvckRlZmF1bHRNYXJrVmlvbGF0aW9uID0gdmlzaXRvci5t
X2lzQ2hlY2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlvbjsKLSAgICB2aXNpdG9yLm1faXNDaGVj
a2luZ0ZvckRlZmF1bHRNYXJrVmlvbGF0aW9uID0gZmFsc2U7Ci0jZW5kaWYKKyAgICB0eXBlbmFt
ZSBWaXNpdG9yOjpEZWZhdWx0TWFya2luZ1Zpb2xhdGlvbkFzc2VydGlvblNjb3BlIGFzc2VydGlv
blNjb3BlKHZpc2l0b3IpOwogICAgIAogICAgIEpTQ2VsbDo6dmlzaXRDaGlsZHJlbih0aGlzT2Jq
ZWN0LCB2aXNpdG9yKTsKICAgICAKQEAgLTQ4MywxMiArNDgwLDEwIEBAIHZvaWQgSlNGaW5hbE9i
amVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwKICAgICAgICAgaWYgKHVuc2lnbmVkIHN0b3JhZ2VT
aXplID0gc3RydWN0dXJlLT5pbmxpbmVTaXplKCkpCiAgICAgICAgICAgICB2aXNpdG9yLmFwcGVu
ZFZhbHVlc0hpZGRlbih0aGlzT2JqZWN0LT5pbmxpbmVTdG9yYWdlKCksIHN0b3JhZ2VTaXplKTsK
ICAgICB9Ci0gICAgCi0jaWYgQVNTRVJUX0VOQUJMRUQKLSAgICB2aXNpdG9yLm1faXNDaGVja2lu
Z0ZvckRlZmF1bHRNYXJrVmlvbGF0aW9uID0gd2FzQ2hlY2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xh
dGlvbjsKLSNlbmRpZgogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU5fV0lUSF9NT0RJRklFUihK
U19FWFBPUlRfUFJJVkFURSwgSlNGaW5hbE9iamVjdCk7CisKIFN0cmluZyBKU09iamVjdDo6Y2xh
c3NOYW1lKGNvbnN0IEpTT2JqZWN0KiBvYmplY3QsIFZNJiB2bSkKIHsKICAgICBjb25zdCBDbGFz
c0luZm8qIGluZm8gPSBvYmplY3QtPmNsYXNzSW5mbyh2bSk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNyAr
MSw3IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAxIEhhcnJpIFBvcnRlbiAocG9y
dGVuQGtkZS5vcmcpCiAgKiAgQ29weXJpZ2h0IChDKSAyMDAxIFBldGVyIEtlbGx5IChwbWtAcG9z
dC5jb20pCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0xMDgsOCArMTA4LDkgQEAg
Y2xhc3MgSlNPYmplY3QgOiBwdWJsaWMgSlNDZWxsIHsKIHB1YmxpYzoKICAgICB1c2luZyBCYXNl
ID0gSlNDZWxsOwogCisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTl9XSVRIX01PRElGSUVSKEpT
X0VYUE9SVF9QUklWQVRFKTsKKwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBzaXplX3Qg
ZXN0aW1hdGVkU2l6ZShKU0NlbGwqLCBWTSYpOwotICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRp
YyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKICAgICBKU19FWFBP
UlRfUFJJVkFURSBzdGF0aWMgdm9pZCBhbmFseXplSGVhcChKU0NlbGwqLCBIZWFwQW5hbHl6ZXIm
KTsKIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBTdHJpbmcgY2xhc3NOYW1lKGNvbnN0
IEpTT2JqZWN0KiwgVk0mKTsKQEAgLTk4MiwxMSArOTgzLDExIEBAIHByb3RlY3RlZDoKICAgICBK
U09iamVjdChWTSYsIFN0cnVjdHVyZSosIEJ1dHRlcmZseSogPSBudWxscHRyKTsKICAgICAKICAg
ICAvLyBWaXNpdHMgdGhlIGJ1dHRlcmZseSB1bmxlc3MgdGhlcmUgaXMgYSByYWNlLiBSZXR1cm5z
IHRoZSBzdHJ1Y3R1cmUgaWYgdGhlcmUgd2FzIG5vIHJhY2UuCi0gICAgU3RydWN0dXJlKiB2aXNp
dEJ1dHRlcmZseShTbG90VmlzaXRvciYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+
IFN0cnVjdHVyZSogdmlzaXRCdXR0ZXJmbHkoVmlzaXRvciYpOwogICAgIAotICAgIFN0cnVjdHVy
ZSogdmlzaXRCdXR0ZXJmbHlJbXBsKFNsb3RWaXNpdG9yJik7CisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgVmlzaXRvcj4gU3RydWN0dXJlKiB2aXNpdEJ1dHRlcmZseUltcGwoVmlzaXRvciYpOwogICAg
IAotICAgIHZvaWQgbWFya0F1eGlsaWFyeUFuZFZpc2l0T3V0T2ZMaW5lUHJvcGVydGllcyhTbG90
VmlzaXRvciYsIEJ1dHRlcmZseSosIFN0cnVjdHVyZSosIFByb3BlcnR5T2Zmc2V0IG1heE9mZnNl
dCk7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCBtYXJrQXV4aWxpYXJ5QW5k
VmlzaXRPdXRPZkxpbmVQcm9wZXJ0aWVzKFZpc2l0b3ImLCBCdXR0ZXJmbHkqLCBTdHJ1Y3R1cmUq
LCBQcm9wZXJ0eU9mZnNldCBtYXhPZmZzZXQpOwogCiAgICAgLy8gQ2FsbCB0aGlzIGlmIHlvdSBr
bm93IHRoYXQgdGhlIG9iamVjdCBpcyBpbiBhIG1vZGUgd2hlcmUgaXQgaGFzIGFycmF5CiAgICAg
Ly8gc3RvcmFnZS4gVGhpcyB3aWxsIGFzc2VydCBvdGhlcndpc2UuCkBAIC0xMTc0LDggKzExNzUs
NiBAQCBwcm90ZWN0ZWQ6CiAgICAgfQogfTsKIAotY2xhc3MgSlNGaW5hbE9iamVjdDsKLQogLy8g
SlNGaW5hbE9iamVjdCBpcyBhIHR5cGUgb2YgSlNPYmplY3QgdGhhdCBjb250YWlucyBzdWZmaWNp
ZW50IGludGVybmFsCiAvLyBzdG9yYWdlIHRvIGZ1bGx5IG1ha2UgdXNlIG9mIHRoZSBjb2xsZWN0
b3IgY2VsbCBjb250YWluaW5nIGl0LgogY2xhc3MgSlNGaW5hbE9iamVjdCBmaW5hbCA6IHB1Ymxp
YyBKU09iamVjdCB7CkBAIC0xMjE0LDE1ICsxMjEzLDEzIEBAIHB1YmxpYzoKICAgICAgICAgcmV0
dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgdHlwZUlu
Zm8oKSwgaW5mbygpLCBkZWZhdWx0SW5kZXhpbmdUeXBlLCBpbmxpbmVDYXBhY2l0eSk7CiAgICAg
fQogCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0Nl
bGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU5fV0lUSF9NT0RJ
RklFUihKU19FWFBPUlRfUFJJVkFURSk7CiAKICAgICBERUNMQVJFX0VYUE9SVF9JTkZPOwogCiBw
cml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CiAKLSAgICB2
b2lkIHZpc2l0Q2hpbGRyZW5Db21tb24oU2xvdFZpc2l0b3ImKTsKLQogICAgIGV4cGxpY2l0IEpT
RmluYWxPYmplY3QoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgQnV0dGVyZmx5KiBidXR0
ZXJmbHkpCiAgICAgICAgIDogSlNPYmplY3Qodm0sIHN0cnVjdHVyZSwgYnV0dGVyZmx5KQogICAg
IHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvbWlzZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9taXNlLmNwcAko
cmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9t
aXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY3LDEzICs2NywxNiBAQCB2b2lkIEpTUHJvbWlz
ZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQogICAgICAgICBCYXNlOjppbnRlcm5hbEZpZWxkKGlu
ZGV4KS5zZXQodm0sIHRoaXMsIHZhbHVlc1tpbmRleF0pOwogfQogCi12b2lkIEpTUHJvbWlzZTo6
dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxh
dGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNQcm9taXNlOjp2aXNpdENoaWxkcmVuSW1wbChK
U0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0byogdGhpc09iamVjdCA9
IGpzQ2FzdDxKU1Byb21pc2UqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRT
KHRoaXNPYmplY3QsIGluZm8oKSk7CiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0
LCB2aXNpdG9yKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTUHJvbWlzZSk7CisKIGF1
dG8gSlNQcm9taXNlOjpzdGF0dXMoVk0mKSBjb25zdCAtPiBTdGF0dXMKIHsKICAgICBKU1ZhbHVl
IHZhbHVlID0gaW50ZXJuYWxGaWVsZChGaWVsZDo6RmxhZ3MpLmdldCgpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9taXNlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9taXNlLmgJKHJldmlzaW9uIDI3MjgzMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvbWlzZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTk2LDcgKzk2LDcgQEAgcHVibGljOgogICAgIH07CiAgICAgc3RhdGljIERlZmVycmVkRGF0YSBj
cmVhdGVEZWZlcnJlZERhdGEoSlNHbG9iYWxPYmplY3QqLCBKU1Byb21pc2VDb25zdHJ1Y3Rvciop
OwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYp
OworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKIHByb3RlY3RlZDoKICAgICBKU1Byb21p
c2UoVk0mLCBTdHJ1Y3R1cmUqKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTUHJvcGVydHlOYW1lRW51bWVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmNwcAkocmV2aXNpb24g
MjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTQtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTQtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTcwLDcgKzcwLDggQEAgdm9pZCBKU1By
b3BlcnR5TmFtZUVudW1lcmF0b3I6OmZpbmlzaENyZQogICAgIH0KIH0KIAotdm9pZCBKU1Byb3Bl
cnR5TmFtZUVudW1lcmF0b3I6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRv
ciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTUHJvcGVydHlO
YW1lRW51bWVyYXRvcjo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2
aXNpdG9yKQogewogICAgIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvciogdGhpc09iamVjdCA9IGpz
Q2FzdDxKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JK
RUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC04Nyw2ICs4OCw4IEBAIHZvaWQg
SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjp2aXNpdENoaWwKICAgICB9CiB9CiAKK0RFRklORV9W
SVNJVF9DSElMRFJFTihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IpOworCiAvLyBGSVhNRTogQXNz
ZXJ0IHRoYXQgcHJvcGVydGllcyByZXR1cm5lZCBieSBnZXRPd25Qcm9wZXJ0eU5hbWVzKCkgYXJl
IHJlcG9ydGVkIGVudW1lcmFibGUgYnkgZ2V0T3duUHJvcGVydHlTbG90KCkuCiAvLyBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE5OTI2CiB2b2lkIGdldEVudW1lcmFi
bGVQcm9wZXJ0eU5hbWVzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTT2JqZWN0KiBi
YXNlLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgdWludDMyX3QmIGluZGV4ZWRM
ZW5ndGgsIHVpbnQzMl90JiBzdHJ1Y3R1cmVQcm9wZXJ0eUNvdW50KQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTUHJvcGVydHlOYW1lRW51bWVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODQsNyArODQs
NyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNQcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yLCBtX3Byb3BlcnR5TmFtZXMpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lk
IHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lU
X0NISUxEUkVOOwogCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRy
YWN0b3I7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3h5LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3h5LmNwcAko
cmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm94
eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDExLTIwMTIsIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM1LDcgKzM1LDggQEAgU1RBVElD
X0FTU0VSVF9JU19UUklWSUFMTFlfREVTVFJVQ1RJQkxFKAogCiBjb25zdCBDbGFzc0luZm8gSlNQ
cm94eTo6c19pbmZvID0geyAiSlNQcm94eSIsICZCYXNlOjpzX2luZm8sIG51bGxwdHIsIG51bGxw
dHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNQcm94eSkgfTsKIAotdm9pZCBKU1Byb3h5Ojp2aXNp
dENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0
eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1Byb3h5Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwq
IGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNQcm94eSogdGhpc09iamVjdCA9IGpz
Q2FzdDxKU1Byb3h5Kj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlz
T2JqZWN0LCBpbmZvKCkpOwpAQCAtNDMsNiArNDQsOCBAQCB2b2lkIEpTUHJveHk6OnZpc2l0Q2hp
bGRyZW4oSlNDZWxsKiBjZWxsCiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV90YXJn
ZXQpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU5fV0lUSF9NT0RJRklFUihKU19FWFBPUlRf
UFJJVkFURSwgSlNQcm94eSk7CisKIHZvaWQgSlNQcm94eTo6c2V0VGFyZ2V0KFZNJiB2bSwgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKIHsKICAgICBtX3RhcmdldC5zZXQodm0sIHRoaXMs
IGdsb2JhbE9iamVjdCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1By
b3h5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm94
eS5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U1Byb3h5LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDExLTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDExLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC04NSw3ICs4NSw3IEBAIHByb3RlY3RlZDoKICAg
ICAgICAgbV90YXJnZXQuc2V0KHZtLCB0aGlzLCB0YXJnZXQpOwogICAgIH0KIAotICAgIEpTX0VY
UE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0
b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOX1dJVEhfTU9ESUZJRVIoSlNfRVhQT1JU
X1BSSVZBVEUpOwogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFN0cmluZyBjbGFzc05h
bWUoY29uc3QgSlNPYmplY3QqLCBWTSYpOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBT
dHJpbmcgdG9TdHJpbmdOYW1lKGNvbnN0IEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2NvcGUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2NvcGUuY3BwCShyZXZpc2lvbiAy
NzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Njb3BlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAy
MCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIt
MjAyMSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTM5LDcgKzM5LDggQEAgU1RBVElDX0FTU0VSVF9JU19UUklWSUFMTFlf
REVTVFJVQ1RJQkxFKAogCiBjb25zdCBDbGFzc0luZm8gSlNTY29wZTo6c19pbmZvID0geyAiU2Nv
cGUiLCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxF
KEpTU2NvcGUpIH07CiAKLXZvaWQgSlNTY29wZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGws
IFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQg
SlNTY29wZTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9y
KQogewogICAgIEpTU2NvcGUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNTY29wZSo+KGNlbGwpOwog
ICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTQ3
LDYgKzQ4LDggQEAgdm9pZCBKU1Njb3BlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbAogICAg
IHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fbmV4dCk7CiB9CiAKK0RFRklORV9WSVNJVF9D
SElMRFJFTihKU1Njb3BlKTsKKwogLy8gUmV0dXJucyB0cnVlIGlmIHdlIGZvdW5kIGVub3VnaCBp
bmZvcm1hdGlvbiB0byB0ZXJtaW5hdGUgb3B0aW1pemF0aW9uLgogc3RhdGljIGlubGluZSBib29s
IGFic3RyYWN0QWNjZXNzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTU2NvcGUqIHNj
b3BlLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgR2V0T3JQdXQgZ2V0T3JQdXQsIHNpemVfdCBk
ZXB0aCwgYm9vbCYgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MsIFJlc29sdmVPcCYgb3AsIEluaXRp
YWxpemF0aW9uTW9kZSBpbml0aWFsaXphdGlvbk1vZGUpCiB7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU1Njb3BlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNTY29wZS5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU1Njb3BlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTkgQXBwbGUgSW5jLiBBbGwgUmlnaHRz
IFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjEgQXBwbGUgSW5jLiBBbGwgUmln
aHRzIFJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02NCw3ICs2
NCw3IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyB2b2lkIGNvbGxlY3RDbG9zdXJlVmFyaWFibGVz
VW5kZXJURFooSlNTY29wZSosIFREWkVudmlyb25tZW50JiByZXN1bHQsIFByaXZhdGVOYW1lRW52
aXJvbm1lbnQmKTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xv
dFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgYm9vbCBpc1Zh
clNjb3BlKCk7CiAgICAgYm9vbCBpc0xleGljYWxTY29wZSgpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9i
amVjdC5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTU2VnbWVudGVkVmFyaWFibGVPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Miw3
ICs2Miw4IEBAIFNjb3BlT2Zmc2V0IEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3Q6OmEKICAgICBy
ZXR1cm4gU2NvcGVPZmZzZXQob2xkU2l6ZSk7CiB9CiAKLXZvaWQgSlNTZWdtZW50ZWRWYXJpYWJs
ZU9iamVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9y
KQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNTZWdtZW50ZWRWYXJpYWJsZU9i
amVjdDo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQog
ewogICAgIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNT
ZWdtZW50ZWRWYXJpYWJsZU9iamVjdCo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5I
RVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTc1LDYgKzc2LDggQEAgdm9pZCBKU1NlZ21l
bnRlZFZhcmlhYmxlT2JqZWN0Ojp2aXNpdENoaQogICAgICAgICB2aXNpdG9yLmFwcGVuZEhpZGRl
bih0aGlzT2JqZWN0LT5tX3ZhcmlhYmxlc1tpXSk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJF
Tl9XSVRIX01PRElGSUVSKEpTX0VYUE9SVF9QUklWQVRFLCBKU1NlZ21lbnRlZFZhcmlhYmxlT2Jq
ZWN0KTsKKwogdm9pZCBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0OjphbmFseXplSGVhcChKU0Nl
bGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCiB7CiAgICAgSlNTZWdtZW50ZWRWYXJp
YWJsZU9iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0
Kj4oY2VsbCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NlZ21lbnRl
ZFZhcmlhYmxlT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdC5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEy
LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEyLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC04NSw4ICs4NSw4IEBAIHB1YmxpYzoKICAgICAvLyBBZGRzIG51
bWJlck9mUmVnaXN0ZXJzVG9BZGQgcmVnaXN0ZXJzLCBpbml0aWFsaXplcyB0aGVtIHRvIFVuZGVm
aW5lZCwgYW5kIHJldHVybnMKICAgICAvLyB0aGUgaW5kZXggb2YgdGhlIGZpcnN0IG9uZSBhZGRl
ZC4KICAgICBKU19FWFBPUlRfUFJJVkFURSBTY29wZU9mZnNldCBhZGRWYXJpYWJsZXModW5zaWdu
ZWQgbnVtYmVyT2ZWYXJpYWJsZXNUb0FkZCwgSlNWYWx1ZSk7Ci0gICAgCi0gICAgSlNfRVhQT1JU
X1BSSVZBVEUgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYp
OworCisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTl9XSVRIX01PRElGSUVSKEpTX0VYUE9SVF9Q
UklWQVRFKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBhbmFseXplSGVhcChK
U0NlbGwqLCBIZWFwQW5hbHl6ZXImKTsKICAgICAKIHByb3RlY3RlZDoKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2V0SXRlcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2V0SXRlcmF0b3IuY3BwCShyZXZpc2lvbiAy
NzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NldEl0ZXJhdG9yLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNyBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMjEgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTcsMTMgKzU3LDE2IEBAIHZvaWQgSlNTZXRJdGVyYXRv
cjo6ZmluaXNoQ3JlYXRpb24oVk0mIHYKICAgICAgICAgQmFzZTo6aW50ZXJuYWxGaWVsZChpbmRl
eCkuc2V0KHZtLCB0aGlzLCB2YWx1ZXNbaW5kZXhdKTsKIH0KIAotdm9pZCBKU1NldEl0ZXJhdG9y
Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1w
bGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1NldEl0ZXJhdG9yOjp2aXNpdENoaWxkcmVu
SW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0byogdGhpc09i
amVjdCA9IGpzQ2FzdDxKU1NldEl0ZXJhdG9yKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVD
VF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4o
dGhpc09iamVjdCwgdmlzaXRvcik7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU1NldEl0
ZXJhdG9yKTsKKwogSlNWYWx1ZSBKU1NldEl0ZXJhdG9yOjpjcmVhdGVQYWlyKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUga2V5LCBKU1ZhbHVlIHZhbHVlKQogewogICAgIE1h
cmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3M7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1NldEl0ZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNTZXRJdGVyYXRvci5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU1NldEl0ZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE2IEFwcGxlLCBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMSBBcHBsZSwgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0xMzAsNyArMTMwLDcgQEAgcHJpdmF0ZToKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGZp
bmlzaENyZWF0aW9uKFZNJiwgSlNTZXQqLCBJdGVyYXRpb25LaW5kKTsKICAgICB2b2lkIGZpbmlz
aENyZWF0aW9uKFZNJik7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgSlNWYWx1ZSBjcmVhdGVQYWly
KEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSwgSlNWYWx1ZSk7Ci0gICAgc3RhdGljIHZvaWQgdmlz
aXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJ
TERSRU47CiB9OwogU1RBVElDX0FTU0VSVF9JU19UUklWSUFMTFlfREVTVFJVQ1RJQkxFKEpTU2V0
SXRlcmF0b3IpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmlu
Zy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJp
bmcuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU1N0cmluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSw3IEBACiAvKgogICogIENv
cHlyaWdodCAoQykgMTk5OS0yMDAyIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCiAgKiAg
Q29weXJpZ2h0IChDKSAyMDAxIFBldGVyIEtlbGx5IChwbWtAcG9zdC5jb20pCi0gKiAgQ29weXJp
Z2h0IChDKSAyMDA0LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENv
cHlyaWdodCAoQykgMjAwNC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCkBAIC0xMDUsNyArMTA1LDggQEAgc2l6ZV90IEpTU3RyaW5nOjpl
c3RpbWF0ZWRTaXplKEpTQ2VsbCogYwogICAgIHJldHVybiBCYXNlOjplc3RpbWF0ZWRTaXplKGNl
bGwsIHZtKSArIGJpdHdpc2VfY2FzdDxTdHJpbmdJbXBsKj4ocG9pbnRlciktPmNvc3REdXJpbmdH
QygpOwogfQogCi12b2lkIEpTU3RyaW5nOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xv
dFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1N0
cmluZzo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQog
ewogICAgIEpTU3RyaW5nKiB0aGlzT2JqZWN0ID0gYXNTdHJpbmcoY2VsbCk7CiAgICAgQVNTRVJU
X0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtMTQzLDYgKzE0NCw4
IEBAIHZvaWQgSlNTdHJpbmc6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWwKICAgICAgICAgdmlz
aXRvci5yZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQoaW1wbC0+Y29zdER1cmluZ0dDKCkpOwogfQog
CitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNTdHJpbmcpOworCiBzdGF0aWMgY29uc3RleHByIHVu
c2lnbmVkIG1heExlbmd0aEZvck9uU3RhY2tSZXNvbHZlID0gMjA0ODsKIAogdm9pZCBKU1JvcGVT
dHJpbmc6OnJlc29sdmVSb3BlSW50ZXJuYWw4KExDaGFyKiBidWZmZXIpIGNvbnN0CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmgJKHJldmlzaW9uIDI3MjgzMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNyArMSw3IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAxIEhhcnJp
IFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCiAgKiAgQ29weXJpZ2h0IChDKSAyMDAxIFBldGVyIEtl
bGx5IChwbWtAcG9zdC5jb20pCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMjAgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwMy0yMDIxIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yMTcs
NyArMjE3LDcgQEAgcHVibGljOgogCiAgICAgc3RhdGljIHZvaWQgZHVtcFRvU3RyZWFtKGNvbnN0
IEpTQ2VsbCosIFByaW50U3RyZWFtJik7CiAgICAgc3RhdGljIHNpemVfdCBlc3RpbWF0ZWRTaXpl
KEpTQ2VsbCosIFZNJik7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBT
bG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBBTFdBWVNf
SU5MSU5FIGJvb2wgaXNSb3BlKCkgY29uc3QKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU1N0cmluZ0l0ZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZ0l0ZXJhdG9yLmNwcAkocmV2aXNpb24gMjcy
ODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmdJdGVyYXRvci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAy
MDE1IFl1c3VrZSBTdXp1a2kgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4uCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC01MSwxMSArNTEsMTQgQEAgSlNTdHJpbmdJdGVyYXRvciog
SlNTdHJpbmdJdGVyYXRvcjo6Y2xvbgogICAgIHJldHVybiBjbG9uZTsKIH0KIAotdm9pZCBKU1N0
cmluZ0l0ZXJhdG9yOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZp
c2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1N0cmluZ0l0ZXJhdG9y
Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAg
ICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1N0cmluZ0l0ZXJhdG9yKj4oY2VsbCk7CiAg
ICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwogICAgIEJh
c2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CiB9CiAKK0RFRklORV9WSVNJ
VF9DSElMRFJFTihKU1N0cmluZ0l0ZXJhdG9yKTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZ0l0ZXJhdG9yLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmdJdGVyYXRvci5o
CShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0
cmluZ0l0ZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29w
eXJpZ2h0IChDKSAyMDE1IFl1c3VrZSBTdXp1a2kgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4uCisg
KiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03OSw3ICs4MCw3IEBAIHB1YmxpYzoKICAg
ICBKU1ZhbHVlIGluZGV4KCkgY29uc3QgeyByZXR1cm4gaW50ZXJuYWxGaWVsZChGaWVsZDo6SW5k
ZXgpLmdldCgpOyB9CiAgICAgSlNTdHJpbmdJdGVyYXRvciogY2xvbmUoSlNHbG9iYWxPYmplY3Qq
KTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3Im
KTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiBwcml2YXRlOgogICAgIEpTU3RyaW5n
SXRlcmF0b3IoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuY3BwCShy
ZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N5bWJv
bFRhYmxlT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTItMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM2LDcgKzM2LDggQEAgbmFtZXNw
YWNlIEpTQyB7CiAKIGNvbnN0IENsYXNzSW5mbyBKU1N5bWJvbFRhYmxlT2JqZWN0OjpzX2luZm8g
PSB7ICJTeW1ib2xUYWJsZU9iamVjdCIsICZCYXNlOjpzX2luZm8sIG51bGxwdHIsIG51bGxwdHIs
IENSRUFURV9NRVRIT0RfVEFCTEUoSlNTeW1ib2xUYWJsZU9iamVjdCkgfTsKIAotdm9pZCBKU1N5
bWJvbFRhYmxlT2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3Im
IHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1N5bWJvbFRhYmxl
T2JqZWN0Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3Ip
CiB7CiAgICAgSlNTeW1ib2xUYWJsZU9iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1N5bWJv
bFRhYmxlT2JqZWN0Kj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlz
T2JqZWN0LCBpbmZvKCkpOwpAQCAtNDQsNiArNDUsOCBAQCB2b2lkIEpTU3ltYm9sVGFibGVPYmpl
Y3Q6OnZpc2l0Q2hpbGRyZW4oCiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9zeW1i
b2xUYWJsZSk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU1N5bWJvbFRhYmxlT2JqZWN0
KTsKKwogYm9vbCBKU1N5bWJvbFRhYmxlT2JqZWN0OjpkZWxldGVQcm9wZXJ0eShKU0NlbGwqIGNl
bGwsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5h
bWUsIERlbGV0ZVByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBKU1N5bWJvbFRhYmxlT2JqZWN0
KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTU3ltYm9sVGFibGVPYmplY3QqPihjZWxsKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N5bWJvbFRhYmxlT2Jq
ZWN0LmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTU3ltYm9sVGFibGVPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTcwLDcgKzcwLDcgQEAg
cHJvdGVjdGVkOgogICAgICAgICBtX3N5bWJvbFRhYmxlLnNldCh2bSwgdGhpcywgc3ltYm9sVGFi
bGUpOwogICAgIH0KICAgICAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCos
IFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKICAgICAKIHByaXZh
dGU6CiAgICAgV3JpdGVCYXJyaWVyPFN5bWJvbFRhYmxlPiBtX3N5bWJvbFRhYmxlOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNXZWFrT2JqZWN0UmVmLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1dlYWtPYmplY3RSZWYuY3Bw
CShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1dl
YWtPYmplY3RSZWYuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxOSBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE5LTIwMjEgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzksNyArMzksOCBAQCB2b2lkIEpTV2Vh
a09iamVjdFJlZjo6ZmluaXNoQ3JlYXRpb24oVk0mCiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24o
dm0pOwogfQogCi12b2lkIEpTV2Vha09iamVjdFJlZjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNl
bGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3Zv
aWQgSlNXZWFrT2JqZWN0UmVmOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0
b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1dlYWtPYmpl
Y3RSZWYqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3Qs
IGluZm8oKSk7CkBAIC01MSw2ICs1Miw4IEBAIHZvaWQgSlNXZWFrT2JqZWN0UmVmOjp2aXNpdENo
aWxkcmVuKEpTQ2UKICAgICB9CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU1dlYWtPYmpl
Y3RSZWYpOworCiB2b2lkIEpTV2Vha09iamVjdFJlZjo6ZmluYWxpemVVbmNvbmRpdGlvbmFsbHko
Vk0mIHZtKQogewogICAgIGlmIChtX3ZhbHVlICYmICF2bS5oZWFwLmlzTWFya2VkKG1fdmFsdWUu
Z2V0KCkpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNXZWFrT2JqZWN0
UmVmLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNXZWFr
T2JqZWN0UmVmLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTV2Vha09iamVjdFJlZi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE5LTIwMjEgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjUsNyArNjUsNyBAQCBw
dWJsaWM6CiAgICAgfQogCiAgICAgdm9pZCBmaW5hbGl6ZVVuY29uZGl0aW9uYWxseShWTSYpOwot
ICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAg
ICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiBwcml2YXRlOgogICAgIEpTV2Vha09iamVjdFJl
ZihWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNXaXRoU2NvcGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTV2l0aFNjb3BlLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNXaXRoU2NvcGUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxNiBBcHBsZSBJ
bmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMSBBcHBs
ZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTQxLDcgKzQxLDggQEAgSlNXaXRoU2NvcGUqIEpTV2l0aFNjb3BlOjpjcmVhdGUoCiAg
ICAgcmV0dXJuIHdpdGhTY29wZTsKIH0KIAotdm9pZCBKU1dpdGhTY29wZTo6dmlzaXRDaGlsZHJl
bihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUg
VmlzaXRvcj4KK3ZvaWQgSlNXaXRoU2NvcGU6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2Vs
bCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU1dpdGhTY29wZSogdGhpc09iamVjdCA9IGpz
Q2FzdDxKU1dpdGhTY29wZSo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMo
dGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTQ5LDYgKzUwLDggQEAgdm9pZCBKU1dpdGhTY29wZTo6
dmlzaXRDaGlsZHJlbihKU0NlbGwqIAogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1f
b2JqZWN0KTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTV2l0aFNjb3BlKTsKKwogU3Ry
dWN0dXJlKiBKU1dpdGhTY29wZTo6Y3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90bykKIHsKICAgICByZXR1cm4gU3RydWN0dXJl
OjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG8sIFR5cGVJbmZvKFdpdGhTY29wZVR5cGUs
IFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTV2l0aFNjb3BlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNXaXRoU2NvcGUuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNXaXRoU2NvcGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTYgQXBwbGUgSW5jLiBBbGwgUmln
aHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjEgQXBwbGUgSW5jLiBBbGwg
UmlnaHRzIFJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00Myw3
ICs0Myw3IEBAIHB1YmxpYzoKIAogICAgIEpTT2JqZWN0KiBvYmplY3QoKSB7IHJldHVybiBtX29i
amVjdC5nZXQoKTsgfQogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBT
bG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBzdGF0aWMg
U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUg
cHJvdG8pOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1dyYXBwZXJP
YmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
V3JhcHBlck9iamVjdC5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTV3JhcHBlck9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiAr
MSw2IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMjAwNiBNYWtzIE9ybG92aWNoCi0gKiAgQ29w
eXJpZ2h0IChDKSAyMDA2LCAyMDA5LCAyMDEyIEFwcGxlLCBJbmMuCisgKiAgQ29weXJpZ2h0IChD
KSAyMDA2LTIwMjEgQXBwbGUsIEluYy4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yOSwxMSAr
MjksMTQgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIFNUQVRJQ19BU1NFUlRfSVNfVFJJVklBTExZX0RF
U1RSVUNUSUJMRShKU1dyYXBwZXJPYmplY3QpOwogCi12b2lkIEpTV3JhcHBlck9iamVjdDo6dmlz
aXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8
dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNXcmFwcGVyT2JqZWN0Ojp2aXNpdENoaWxkcmVuSW1w
bChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0byogdGhpc09iamVj
dCA9IGpzQ2FzdDxKU1dyYXBwZXJPYmplY3QqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNU
X0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0
aGlzT2JqZWN0LCB2aXNpdG9yKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOX1dJVEhfTU9E
SUZJRVIoSlNfRVhQT1JUX1BSSVZBVEUsIEpTV3JhcHBlck9iamVjdCk7CisKIH0gLy8gbmFtZXNw
YWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNXcmFwcGVyT2Jq
ZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNXcmFw
cGVyT2JqZWN0LmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTV3JhcHBlck9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAog
LyoKICAqICBDb3B5cmlnaHQgKEMpIDIwMDYgTWFrcyBPcmxvdmljaAotICogIENvcHlyaWdodCAo
QykgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTY0LDcgKzY0LDcgQEAgcHVibGljOgogcHJv
dGVjdGVkOgogICAgIGV4cGxpY2l0IEpTV3JhcHBlck9iamVjdChWTSYsIFN0cnVjdHVyZSopOwog
Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwq
LCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU5fV0lUSF9NT0RJRklF
UihKU19FWFBPUlRfUFJJVkFURSk7CiB9OwogCiBpbmxpbmUgSlNXcmFwcGVyT2JqZWN0OjpKU1dy
YXBwZXJPYmplY3QoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0xhenlDbGFzc1N0cnVjdHVyZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTGF6eUNsYXNzU3RydWN0dXJlLmNwcAko
cmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTGF6eUNs
YXNzU3RydWN0dXJlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTYtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTcyLDEyICs3MiwxNiBAQCB2b2lk
IExhenlDbGFzc1N0cnVjdHVyZTo6SW5pdGlhbGl6ZXI6OnNlCiAgICAgY2xhc3NTdHJ1Y3R1cmUu
bV9jb25zdHJ1Y3Rvci5zZXQodm0sIGdsb2JhbCwgY29uc3RydWN0b3IpOwogfQogCi12b2lkIExh
enlDbGFzc1N0cnVjdHVyZTo6dmlzaXQoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0
eXBlbmFtZSBWaXNpdG9yPgordm9pZCBMYXp5Q2xhc3NTdHJ1Y3R1cmU6OnZpc2l0KFZpc2l0b3Im
IHZpc2l0b3IpCiB7CiAgICAgbV9zdHJ1Y3R1cmUudmlzaXQodmlzaXRvcik7CiAgICAgdmlzaXRv
ci5hcHBlbmQobV9jb25zdHJ1Y3Rvcik7CiB9CiAKK3RlbXBsYXRlIHZvaWQgTGF6eUNsYXNzU3Ry
dWN0dXJlOjp2aXNpdChBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIExhenlD
bGFzc1N0cnVjdHVyZTo6dmlzaXQoU2xvdFZpc2l0b3ImKTsKKwogdm9pZCBMYXp5Q2xhc3NTdHJ1
Y3R1cmU6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKIHsKICAgICBvdXQucHJpbnQoIjxz
dHJ1Y3R1cmUgPSAiLCBtX3N0cnVjdHVyZSwgIiwgY29uc3RydWN0b3IgPSAiLCBSYXdQb2ludGVy
KG1fY29uc3RydWN0b3IuZ2V0KCkpLCAiPiIpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvTGF6eUNsYXNzU3RydWN0dXJlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvTGF6eUNsYXNzU3RydWN0dXJlLmgJKHJldmlzaW9uIDI3MjgzMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0xhenlDbGFzc1N0cnVjdHVyZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTExNyw3ICsxMTcsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX2Nv
bnN0cnVjdG9yLmdldCgpOwogICAgIH0KICAgICAKLSAgICB2b2lkIHZpc2l0KFNsb3RWaXNpdG9y
Jik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCB2aXNpdChWaXNpdG9yJik7
CiAgICAgCiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0xhenlQcm9wZXJ0eS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0xhenlQcm9wZXJ0eS5oCShyZXZpc2lvbiAyNzI4
MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9MYXp5UHJvcGVydHkuaAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAx
OSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYt
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTEwMyw3ICsxMDMsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRNYXlC
ZU51bGwoVk0mLCBjb25zdCBPd25lclR5cGUqIG93bmVyLCBFbGVtZW50VHlwZSopOwogICAgIHZv
aWQgc2V0KFZNJiwgY29uc3QgT3duZXJUeXBlKiBvd25lciwgRWxlbWVudFR5cGUqKTsKICAgICAK
LSAgICB2b2lkIHZpc2l0KFNsb3RWaXNpdG9yJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlz
aXRvcj4gdm9pZCB2aXNpdChWaXNpdG9yJik7CiAgICAgCiAgICAgdm9pZCBkdW1wKFByaW50U3Ry
ZWFtJikgY29uc3Q7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9M
YXp5UHJvcGVydHlJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvTGF6eVByb3BlcnR5SW5saW5lcy5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9MYXp5UHJvcGVydHlJbmxpbmVzLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIxIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtNjYsNyArNjYsOCBAQCB2b2lkIExhenlQcm9wZXJ0eTxPd25lclR5cGUsIEVsZW1lbnRU
eXBlCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE93bmVyVHlwZSwgdHlwZW5hbWUgRWxlbWVudFR5
cGU+Ci12b2lkIExhenlQcm9wZXJ0eTxPd25lclR5cGUsIEVsZW1lbnRUeXBlPjo6dmlzaXQoU2xv
dFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBMYXp5
UHJvcGVydHk8T3duZXJUeXBlLCBFbGVtZW50VHlwZT46OnZpc2l0KFZpc2l0b3ImIHZpc2l0b3Ip
CiB7CiAgICAgaWYgKG1fcG9pbnRlciAmJiAhKG1fcG9pbnRlciAmIGxhenlUYWcpKQogICAgICAg
ICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKGJpdHdpc2VfY2FzdDxFbGVtZW50VHlwZSo+KG1f
cG9pbnRlcikpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTW9kdWxlUHJv
Z3JhbUV4ZWN1dGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL01vZHVsZVByb2dyYW1FeGVjdXRhYmxlLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAw
OSwgMjAxMCwgMjAxMywgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNzksNyArNzksOCBAQCBhdXRv
IE1vZHVsZVByb2dyYW1FeGVjdXRhYmxlOjplbnN1cmVUZW1wCiAgICAgcmV0dXJuIGVuc3VyZVRl
bXBsYXRlT2JqZWN0TWFwSW1wbChtX3RlbXBsYXRlT2JqZWN0TWFwKTsKIH0KIAotdm9pZCBNb2R1
bGVQcm9ncmFtRXhlY3V0YWJsZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNp
dG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgTW9kdWxlUHJv
Z3JhbUV4ZWN1dGFibGU6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYg
dmlzaXRvcikKIHsKICAgICBNb2R1bGVQcm9ncmFtRXhlY3V0YWJsZSogdGhpc09iamVjdCA9IGpz
Q2FzdDxNb2R1bGVQcm9ncmFtRXhlY3V0YWJsZSo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpF
Q1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTk0LDQgKzk1LDYgQEAgdm9pZCBN
b2R1bGVQcm9ncmFtRXhlY3V0YWJsZTo6dmlzaXRDaGlsZAogICAgIH0KIH0KIAorREVGSU5FX1ZJ
U0lUX0NISUxEUkVOKE1vZHVsZVByb2dyYW1FeGVjdXRhYmxlKTsKKwogfSAvLyBuYW1lc3BhY2Ug
SlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Nb2R1bGVQcm9ncmFtRXhl
Y3V0YWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01v
ZHVsZVByb2dyYW1FeGVjdXRhYmxlLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL01vZHVsZVByb2dyYW1FeGVjdXRhYmxlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTkgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC03Nyw3ICs3Nyw3IEBAIHByaXZhdGU6CiAKICAgICBNb2R1bGVQcm9ncmFtRXhlY3V0
YWJsZShKU0dsb2JhbE9iamVjdCosIGNvbnN0IFNvdXJjZUNvZGUmKTsKIAotICAgIHN0YXRpYyB2
b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJ
U0lUX0NISUxEUkVOOwogCiAgICAgV3JpdGVCYXJyaWVyPFVubGlua2VkTW9kdWxlUHJvZ3JhbUNv
ZGVCbG9jaz4gbV91bmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2s7CiAgICAgV3JpdGVCYXJy
aWVyPFN5bWJvbFRhYmxlPiBtX21vZHVsZUVudmlyb25tZW50U3ltYm9sVGFibGU7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcAkocmV2aXNpb24gMjcyODMw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLTIwMjAgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC01NTgsNiArNTU4LDkgQEAgdm9pZCBPcHRpb25zOjpyZWNvbXB1dGVEZXBlbmRl
bnRPcHRpb25zKAogCiAgICAgaWYgKE9wdGlvbnM6OnVzZVByaXZhdGVTdGF0aWNDbGFzc0ZpZWxk
cygpKQogICAgICAgICBPcHRpb25zOjp1c2VQcml2YXRlQ2xhc3NGaWVsZHMoKSA9IHRydWU7CisK
KyAgICBpZiAoT3B0aW9uczo6dmVyYm9zZVZlcmlmeUdDKCkpCisgICAgICAgIE9wdGlvbnM6OnZl
cmlmeUdDKCkgPSB0cnVlOwogfQogCiBpbmxpbmUgdm9pZCogT3B0aW9uczo6YWRkcmVzc09mT3B0
aW9uKE9wdGlvbnM6OklEIGlkKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
T3B0aW9uc0xpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9PcHRpb25zTGlzdC5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9PcHRpb25zTGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNjksNiArMzY5LDgg
QEAgSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBjYW5Vc2VKSVRDYWdlKCk7CiAgICAgdihCb29sLCBh
bHdheXNHZW5lcmF0ZVBDVG9Db2RlT3JpZ2luTWFwLCBmYWxzZSwgTm9ybWFsLCAiVGhpcyB3aWxs
IG1ha2Ugc3VyZSB3ZSBhbHdheXMgZ2VuZXJhdGUgYSBQQ1RvQ29kZU9yaWdpbk1hcCBmb3IgSklU
ZWQgY29kZS4iKSBcCiAgICAgXAogICAgIHYoRG91YmxlLCByYW5kb21JbnRlZ3JpdHlBdWRpdFJh
dGUsIDAuMDUsIE5vcm1hbCwgIlByb2JhYmlsaXR5IG9mIHJhbmRvbSBpbnRlZ3JpdHkgYXVkaXRz
IFswLjAgLSAxLjBdIikgXAorICAgIHYoQm9vbCwgdmVyaWZ5R0MsIGZhbHNlLCBOb3JtYWwsIG51
bGxwdHIpIFwKKyAgICB2KEJvb2wsIHZlcmJvc2VWZXJpZnlHQywgZmFsc2UsIE5vcm1hbCwgbnVs
bHB0cikgXAogICAgIHYoQm9vbCwgdmVyaWZ5SGVhcCwgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikg
XAogICAgIHYoVW5zaWduZWQsIG51bWJlck9mR0NDeWNsZXNUb1JlY29yZEZvclZlcmlmaWNhdGlv
biwgMywgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvUHJvZ3JhbUV4ZWN1dGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb2dyYW1FeGVjdXRhYmxlLmNwcAkocmV2aXNpb24gMjcy
ODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvZ3JhbUV4ZWN1dGFibGUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwOS0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAwOS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjA4LDcgKzIwOCw4IEBAIGF1dG8gUHJvZ3JhbUV4ZWN1
dGFibGU6OmVuc3VyZVRlbXBsYXRlT2IKICAgICByZXR1cm4gZW5zdXJlVGVtcGxhdGVPYmplY3RN
YXBJbXBsKG1fdGVtcGxhdGVPYmplY3RNYXApOwogfQogCi12b2lkIFByb2dyYW1FeGVjdXRhYmxl
Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1w
bGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBQcm9ncmFtRXhlY3V0YWJsZTo6dmlzaXRDaGls
ZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFByb2dyYW1F
eGVjdXRhYmxlKiB0aGlzT2JqZWN0ID0ganNDYXN0PFByb2dyYW1FeGVjdXRhYmxlKj4oY2VsbCk7
CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAt
MjIyLDQgKzIyMyw2IEBAIHZvaWQgUHJvZ3JhbUV4ZWN1dGFibGU6OnZpc2l0Q2hpbGRyZW4oSlMK
ICAgICB9CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihQcm9ncmFtRXhlY3V0YWJsZSk7CisK
IH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
UHJvZ3JhbUV4ZWN1dGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9Qcm9ncmFtRXhlY3V0YWJsZS5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9ncmFtRXhlY3V0YWJsZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOS0yMDE5IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDIxIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtODEsNyArODEsNyBAQCBwcml2YXRlOgogCiAgICAgUHJvZ3JhbUV4ZWN1dGFibGUoSlNH
bG9iYWxPYmplY3QqLCBjb25zdCBTb3VyY2VDb2RlJik7CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNp
dENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElM
RFJFTjsKIAogICAgIFdyaXRlQmFycmllcjxVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2s+IG1fdW5s
aW5rZWRQcm9ncmFtQ29kZUJsb2NrOwogICAgIFdyaXRlQmFycmllcjxFeGVjdXRhYmxlVG9Db2Rl
QmxvY2tFZGdlPiBtX3Byb2dyYW1Db2RlQmxvY2s7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9Qcm9wZXJ0eU1hcEhhc2hUYWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5TWFwSGFzaFRhYmxlLmgJKHJldmlzaW9uIDI3
MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5TWFwSGFzaFRh
YmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogIENvcHlyaWdodCAo
QykgMjAwNC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmln
aHQgKEMpIDIwMDQtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYwpAQCAtMTMzLDcgKzEzMyw3IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBuZWVkc0Rlc3RydWN0aW9uID0gdHJ1ZTsKICAgICBzdGF0aWMgdm9pZCBk
ZXN0cm95KEpTQ2VsbCopOwotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwg
U2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgREVDTEFS
RV9FWFBPUlRfSU5GTzsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJv
cGVydHlUYWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvUHJvcGVydHlUYWJsZS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5VGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEx
OCw3ICsxMTgsOCBAQCB2b2lkIFByb3BlcnR5VGFibGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2CiAg
ICAgdm0uaGVhcC5yZXBvcnRFeHRyYU1lbW9yeUFsbG9jYXRlZChkYXRhU2l6ZSgpKTsKIH0KIAot
dm9pZCBQcm9wZXJ0eVRhYmxlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0
b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBQcm9wZXJ0eVRh
YmxlOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7
CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxQcm9wZXJ0eVRhYmxlKj4oY2VsbCk7CiAg
ICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtMTI2
LDYgKzEyNyw4IEBAIHZvaWQgUHJvcGVydHlUYWJsZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwKICAg
ICB2aXNpdG9yLnJlcG9ydEV4dHJhTWVtb3J5VmlzaXRlZCh0aGlzT2JqZWN0LT5kYXRhU2l6ZSgp
KTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKFByb3BlcnR5VGFibGUpOworCiB2b2lkIFBy
b3BlcnR5VGFibGU6OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQogewogICAgIHN0YXRpY19jYXN0PFBy
b3BlcnR5VGFibGUqPihjZWxsKS0+UHJvcGVydHlUYWJsZTo6flByb3BlcnR5VGFibGUoKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3h5T2JqZWN0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm94eU9iamVjdC5jcHAJKHJl
dmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3h5T2Jq
ZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTYtMjAyMCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTExNTgsNyArMTE1OCw4IEBAIGJvb2wgUHJveHlP
YmplY3Q6OmlzUmV2b2tlZCgpIGNvbnN0CiAgICAgcmV0dXJuIGhhbmRsZXIoKS5pc051bGwoKTsK
IH0KIAotdm9pZCBQcm94eU9iamVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgUHJveHlP
YmplY3Q6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikK
IHsKICAgICBQcm94eU9iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxQcm94eU9iamVjdCo+KGNl
bGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsK
QEAgLTExNjgsNCArMTE2OSw2IEBAIHZvaWQgUHJveHlPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlND
ZWxsKiAKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2hhbmRsZXIpOwogfQogCitE
RUZJTkVfVklTSVRfQ0hJTERSRU4oUHJveHlPYmplY3QpOworCiB9IC8vIG5hbWVzcGFjZSBKU0MK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3h5T2JqZWN0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJveHlPYmplY3QuaAkocmV2
aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJveHlPYmpl
Y3QuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC05MSw3ICs5MSw3IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIHZv
aWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVy
dHlOYW1lQXJyYXkmLCBEb250RW51bVByb3BlcnRpZXNNb2RlKTsKICAgICBzdGF0aWMgYm9vbCBz
ZXRQcm90b3R5cGUoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUgcHJvdG90eXBl
LCBib29sIHNob3VsZFRocm93SWZDYW50U2V0KTsKICAgICBzdGF0aWMgSlNWYWx1ZSBnZXRQcm90
b3R5cGUoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCopOwotICAgIHN0YXRpYyB2b2lkIHZpc2l0
Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxE
UkVOOwogCiAgICAgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3RDb21tb24oSlNHbG9iYWxPYmplY3Qq
LCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwogICAgIGJvb2wgcGVyZm9ybUludGVybmFs
TWV0aG9kR2V0T3duUHJvcGVydHkoSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIFByb3Bl
cnR5U2xvdCYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJveHlSZXZv
a2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3h5
UmV2b2tlLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvUHJveHlSZXZva2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY5LDcgKzY5LDggQEAgSlNDX0RF
RklORV9IT1NUX0ZVTkNUSU9OKHBlcmZvcm1Qcm94eVJldgogICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CiAKLXZvaWQgUHJveHlSZXZva2U6OnZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1l
IFZpc2l0b3I+Cit2b2lkIFByb3h5UmV2b2tlOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNl
bGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgUHJveHlSZXZva2UqIHRoaXNPYmplY3QgPSBq
c0Nhc3Q8UHJveHlSZXZva2UqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRT
KHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC03OCw0ICs3OSw2IEBAIHZvaWQgUHJveHlSZXZva2U6
OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiAKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5t
X3Byb3h5KTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKFByb3h5UmV2b2tlKTsKKwogfSAv
LyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm94
eVJldm9rZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1By
b3h5UmV2b2tlLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1Byb3h5UmV2b2tlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTkgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01Miw3ICs1Miw3IEBAIHB1
YmxpYzoKICAgICB9CiAKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgUHJveHlPYmplY3Qq
KTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7
CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKICAgICBKU1ZhbHVlIHByb3h5KCkgeyByZXR1
cm4gbV9wcm94eS5nZXQoKTsgfQogICAgIHZvaWQgc2V0UHJveHlUb051bGwoVk0mIHZtKSB7IHJl
dHVybiBtX3Byb3h5LnNldCh2bSwgdGhpcywganNOdWxsKCkpOyB9CiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENhY2hlZFJlc3VsdC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwQ2FjaGVkUmVzdWx0LmNwcAko
cmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhw
Q2FjaGVkUmVzdWx0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTIsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMSw3ICszMSw4IEBACiAKIG5h
bWVzcGFjZSBKU0MgewogCi12b2lkIFJlZ0V4cENhY2hlZFJlc3VsdDo6dmlzaXRBZ2dyZWdhdGUo
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBS
ZWdFeHBDYWNoZWRSZXN1bHQ6OnZpc2l0QWdncmVnYXRlSW1wbChWaXNpdG9yJiB2aXNpdG9yKQog
ewogICAgIHZpc2l0b3IuYXBwZW5kKG1fbGFzdElucHV0KTsKICAgICB2aXNpdG9yLmFwcGVuZCht
X2xhc3RSZWdFeHApOwpAQCAtNDMsNiArNDQsOCBAQCB2b2lkIFJlZ0V4cENhY2hlZFJlc3VsdDo6
dmlzaXRBZ2dyZWdhdGUoCiAgICAgfQogfQogCitERUZJTkVfVklTSVRfQUdHUkVHQVRFKFJlZ0V4
cENhY2hlZFJlc3VsdCk7CisKIEpTQXJyYXkqIFJlZ0V4cENhY2hlZFJlc3VsdDo6bGFzdFJlc3Vs
dChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU09iamVjdCogb3duZXIpCiB7CiAgICAg
Vk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvUmVnRXhwQ2FjaGVkUmVzdWx0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwQ2FjaGVkUmVzdWx0LmgJKHJldmlzaW9uIDI3MjgzMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENhY2hlZFJlc3VsdC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiwg
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTItMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTY1LDcgKzY1LDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4g
bV9yZWlmaWVkID8gbV9yZWlmaWVkSW5wdXQuZ2V0KCkgOiBtX2xhc3RJbnB1dC5nZXQoKTsKICAg
ICB9CiAKLSAgICB2b2lkIHZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFS
RV9WSVNJVF9BR0dSRUdBVEU7CiAKICAgICAvLyBtX2xhc3RSZWdFeHAgd291bGQgYmUgbnVsbHB0
ciB3aGVuIFJlZ0V4cENhY2hlZFJlc3VsdCBpcyBub3QgcmVpZmllZC4KICAgICAvLyBJZiB3ZSBm
aW5kIG1fbGFzdFJlZ0V4cCBpcyBudWxscHRyLCBpdCBtZWFucyB0aGlzIHNob3VsZCBob2xkIHRo
ZSBlbXB0eSBSZWdFeHAuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdF
eHBHbG9iYWxEYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9SZWdFeHBHbG9iYWxEYXRhLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwR2xvYmFsRGF0YS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxs
IFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOS0yMDIxIEFwcGxlIEluYy4g
QWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MzAsMTEgKzMwLDE0IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi12b2lkIFJlZ0V4cEdsb2JhbERh
dGE6OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5h
bWUgVmlzaXRvcj4KK3ZvaWQgUmVnRXhwR2xvYmFsRGF0YTo6dmlzaXRBZ2dyZWdhdGVJbXBsKFZp
c2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgbV9jYWNoZWRSZXN1bHQudmlzaXRBZ2dyZWdhdGUodmlz
aXRvcik7CiB9CiAKK0RFRklORV9WSVNJVF9BR0dSRUdBVEUoUmVnRXhwR2xvYmFsRGF0YSk7CisK
IEpTVmFsdWUgUmVnRXhwR2xvYmFsRGF0YTo6Z2V0QmFja3JlZihKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCB1bnNpZ25lZCBpKQogewogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0o
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cEdsb2JhbERhdGEu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBHbG9i
YWxEYXRhLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1JlZ0V4cEdsb2JhbERhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE5LTIwMjEgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00MSw3ICs0MSw3IEBAIHB1Ymxp
YzoKICAgICB2b2lkIHNldElucHV0KEpTR2xvYmFsT2JqZWN0KiwgSlNTdHJpbmcqKTsKICAgICBK
U1N0cmluZyogaW5wdXQoKSB7IHJldHVybiBtX2NhY2hlZFJlc3VsdC5pbnB1dCgpOyB9CiAKLSAg
ICB2b2lkIHZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9B
R0dSRUdBVEU7CiAKICAgICBKU1ZhbHVlIGdldEJhY2tyZWYoSlNHbG9iYWxPYmplY3QqLCB1bnNp
Z25lZCk7CiAgICAgSlNWYWx1ZSBnZXRMYXN0UGFyZW4oSlNHbG9iYWxPYmplY3QqKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE9iamVjdC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0LmNwcAkocmV2
aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwT2Jq
ZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJpZ2h0
IChDKSAxOTk5LTIwMDAgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKLSAqICBDb3B5cmln
aHQgKEMpIDIwMDMtMjAxOSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiAgQ29w
eXJpZ2h0IChDKSAyMDAzLTIwMjEgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoK
ICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3Nl
ciBHZW5lcmFsIFB1YmxpYwpAQCAtNDYsNyArNDYsOCBAQCB2b2lkIFJlZ0V4cE9iamVjdDo6Zmlu
aXNoQ3JlYXRpb24oVk0mIHZtCiAgICAgQVNTRVJUKHR5cGUoKSA9PSBSZWdFeHBPYmplY3RUeXBl
KTsKIH0KIAotdm9pZCBSZWdFeHBPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBT
bG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFJl
Z0V4cE9iamVjdDo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNp
dG9yKQogewogICAgIFJlZ0V4cE9iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxSZWdFeHBPYmpl
Y3QqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGlu
Zm8oKSk7CkBAIC01NSw2ICs1Niw4IEBAIHZvaWQgUmVnRXhwT2JqZWN0Ojp2aXNpdENoaWxkcmVu
KEpTQ2VsbCoKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2xhc3RJbmRleCk7CiB9
CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihSZWdFeHBPYmplY3QpOworCiBib29sIFJlZ0V4cE9i
amVjdDo6Z2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiBvYmplY3QsIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYg
c2xvdCkKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBPYmplY3QuaAkocmV2aXNpb24gMjcyODMw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAw
IEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIw
MTkgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAw
My0yMDIxIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICog
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJs
aWMKQEAgLTEzMyw3ICsxMzMsNyBAQCBwcml2YXRlOgogICAgIEpTX0VYUE9SVF9QUklWQVRFIFJl
Z0V4cE9iamVjdChWTSYsIFN0cnVjdHVyZSosIFJlZ0V4cCopOwogICAgIEpTX0VYUE9SVF9QUklW
QVRFIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hp
bGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVO
OwogCiAgICAgYm9vbCBsYXN0SW5kZXhJc1dyaXRhYmxlKCkgY29uc3QKICAgICB7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TYW1wbGluZ1Byb2ZpbGVyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TYW1wbGluZ1Byb2ZpbGVyLmNw
cAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2Ft
cGxpbmdQcm9maWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY1MiwxMyArNjUyLDE3IEBAIHZv
aWQgU2FtcGxpbmdQcm9maWxlcjo6cHJvY2Vzc1VudmVyaWZpZWQKICAgICBtX3VucHJvY2Vzc2Vk
U3RhY2tUcmFjZXMuY2xlYXIoKTsKIH0KIAotdm9pZCBTYW1wbGluZ1Byb2ZpbGVyOjp2aXNpdChT
bG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFNh
bXBsaW5nUHJvZmlsZXI6OnZpc2l0KFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgUkVMRUFTRV9B
U1NFUlQobV9sb2NrLmlzTG9ja2VkKCkpOwogICAgIGZvciAoSlNDZWxsKiBjZWxsIDogbV9saXZl
Q2VsbFBvaW50ZXJzKQogICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKGNlbGwpOwog
fQogCit0ZW1wbGF0ZSB2b2lkIFNhbXBsaW5nUHJvZmlsZXI6OnZpc2l0KEFic3RyYWN0U2xvdFZp
c2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgU2FtcGxpbmdQcm9maWxlcjo6dmlzaXQoU2xvdFZpc2l0
b3ImKTsKKwogdm9pZCBTYW1wbGluZ1Byb2ZpbGVyOjpzaHV0ZG93bigpCiB7CiAgICAgTG9ja0hv
bGRlciBsb2NrZXIobV9sb2NrKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1NhbXBsaW5nUHJvZmlsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TYW1wbGluZ1Byb2ZpbGVyLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1NhbXBsaW5nUHJvZmlsZXIuaAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0x
NzEsNyArMTcxLDcgQEAgcHVibGljOgogICAgIHZvaWQgbm90aWNlSlNMb2NrQWNxdWlzaXRpb24o
KTsKICAgICB2b2lkIG5vdGljZVZNRW50cnkoKTsKICAgICB2b2lkIHNodXRkb3duKCk7Ci0gICAg
dm9pZCB2aXNpdChTbG90VmlzaXRvciYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+
IHZvaWQgdmlzaXQoVmlzaXRvciYpOwogICAgIExvY2smIGdldExvY2soKSB7IHJldHVybiBtX2xv
Y2s7IH0KICAgICB2b2lkIHNldFRpbWluZ0ludGVydmFsKFNlY29uZHMgaW50ZXJ2YWwpIHsgbV90
aW1pbmdJbnRlcnZhbCA9IGludGVydmFsOyB9CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBz
dGFydCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVkQXJndW1l
bnRzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29w
ZWRBcmd1bWVudHMuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TY29wZWRBcmd1bWVudHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtOTgsNyAr
OTgsOCBAQCBTY29wZWRBcmd1bWVudHMqIFNjb3BlZEFyZ3VtZW50czo6Y3JlYXRlCiAgICAgcmV0
dXJuIHJlc3VsdDsKIH0KIAotdm9pZCBTY29wZWRBcmd1bWVudHM6OnZpc2l0Q2hpbGRyZW4oSlND
ZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0
b3I+Cit2b2lkIFNjb3BlZEFyZ3VtZW50czo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxs
LCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFNjb3BlZEFyZ3VtZW50cyogdGhpc09iamVjdCA9
IHN0YXRpY19jYXN0PFNjb3BlZEFyZ3VtZW50cyo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpF
Q1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTExNSw2ICsxMTYsOCBAQCB2b2lk
IFNjb3BlZEFyZ3VtZW50czo6dmlzaXRDaGlsZHJlbihKU0NlCiAgICAgfQogfQogCitERUZJTkVf
VklTSVRfQ0hJTERSRU4oU2NvcGVkQXJndW1lbnRzKTsKKwogU3RydWN0dXJlKiBTY29wZWRBcmd1
bWVudHM6OmNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEpTVmFsdWUgcHJvdG90eXBlKQogewogICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2
bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKFNjb3BlZEFyZ3VtZW50c1R5cGUs
IFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1Njb3BlZEFyZ3VtZW50cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1Njb3BlZEFyZ3VtZW50cy5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29wZWRBcmd1bWVudHMuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxOSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTYzLDkgKzYzLDkgQEAgcHVibGljOgogICAgIAogICAgIC8vIENyZWF0ZXMgYW4gYXJn
dW1lbnRzIG9iamVjdCBieSBjb3B5aW5nIHRoZSBhcmd1bWVudHMgZnJvbSBhIHdlbGwtZGVmaW5l
ZCBzdGFjayBsb2NhdGlvbi4KICAgICBzdGF0aWMgU2NvcGVkQXJndW1lbnRzKiBjcmVhdGVCeUNv
cHlpbmdGcm9tKFZNJiwgU3RydWN0dXJlKiwgUmVnaXN0ZXIqIGFyZ3VtZW50c1N0YXJ0LCB1bnNp
Z25lZCB0b3RhbExlbmd0aCwgSlNGdW5jdGlvbiogY2FsbGVlLCBTY29wZWRBcmd1bWVudHNUYWJs
ZSosIEpTTGV4aWNhbEVudmlyb25tZW50Kik7Ci0gICAgCi0gICAgc3RhdGljIHZvaWQgdmlzaXRD
aGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwotICAgIAorCisgICAgREVDTEFSRV9WSVNJ
VF9DSElMRFJFTjsKKwogICAgIHVpbnQzMl90IGludGVybmFsTGVuZ3RoKCkgY29uc3QKICAgICB7
CiAgICAgICAgIHJldHVybiBtX3RvdGFsTGVuZ3RoOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVy
LmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTYyLDcg
KzYyLDcgQEAgYm9vbCBTaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlcjo6aXNBdG9taQogICAgIHJl
dHVybiBtX2FsbG93QXRvbWljc1dhaXQ7CiB9CiAKLWJvb2wgU2ltcGxlVHlwZWRBcnJheUNvbnRy
b2xsZXI6OkpTQXJyYXlCdWZmZXJPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlND
OjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBKU0M6OlNsb3RWaXNpdG9yJiB2
aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQorYm9vbCBTaW1wbGVUeXBlZEFycmF5Q29udHJv
bGxlcjo6SlNBcnJheUJ1ZmZlck93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6
OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIEpTQzo6QWJzdHJhY3RTbG90Vmlz
aXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikKIHsKICAgICBpZiAoVU5MSUtFTFko
cmVhc29uKSkKICAgICAgICAgKnJlYXNvbiA9ICJKU0FycmF5QnVmZmVyIGlzIG9wYXF1ZSByb290
IjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NpbXBsZVR5cGVkQXJyYXlD
b250cm9sbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXIuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXIuaAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC01OCw3ICs1OCw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgY2xhc3MgSlNB
cnJheUJ1ZmZlck93bmVyIGZpbmFsIDogcHVibGljIFdlYWtIYW5kbGVPd25lciB7CiAgICAgcHVi
bGljOgotICAgICAgICBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxl
PEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIFNsb3RWaXNpdG9yJiwgY29uc3QgY2hhcioq
IHJlYXNvbikgZmluYWw7CisgICAgICAgIGJvb2wgaXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMo
SlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCwgQWJzdHJhY3RTbG90Vmlz
aXRvciYsIGNvbnN0IGNoYXIqKiByZWFzb24pIGZpbmFsOwogICAgICAgICB2b2lkIGZpbmFsaXpl
KEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQpIGZpbmFsOwogICAgIH07
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NtYWxsU3RyaW5ncy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU21hbGxTdHJpbmdz
LmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U21hbGxTdHJpbmdzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDgsIDIwMTAgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMjEgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02Niw3ICs2Niw4IEBAIHZvaWQg
U21hbGxTdHJpbmdzOjppbml0aWFsaXplQ29tbW9uU3RyaW4KICAgICBzZXRJc0luaXRpYWxpemVk
KHRydWUpOwogfQogCi12b2lkIFNtYWxsU3RyaW5nczo6dmlzaXRTdHJvbmdSZWZlcmVuY2VzKFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgU21h
bGxTdHJpbmdzOjp2aXNpdFN0cm9uZ1JlZmVyZW5jZXMoVmlzaXRvciYgdmlzaXRvcikKIHsKICAg
ICBtX25lZWRzVG9CZVZpc2l0ZWQgPSBmYWxzZTsKICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmll
cmVkKG1fZW1wdHlTdHJpbmcpOwpAQCAtODQsNiArODUsOSBAQCB2b2lkIFNtYWxsU3RyaW5nczo6
dmlzaXRTdHJvbmdSZWZlcmVuY2VzCiAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZChtX29r
U3RyaW5nKTsKIH0KIAordGVtcGxhdGUgdm9pZCBTbWFsbFN0cmluZ3M6OnZpc2l0U3Ryb25nUmVm
ZXJlbmNlcyhBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIFNtYWxsU3RyaW5n
czo6dmlzaXRTdHJvbmdSZWZlcmVuY2VzKFNsb3RWaXNpdG9yJik7CisKIFNtYWxsU3RyaW5nczo6
flNtYWxsU3RyaW5ncygpCiB7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TbWFsbFN0cmluZ3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TbWFsbFN0cmluZ3MuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU21hbGxTdHJpbmdzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTkgQXBwbGUgSW5jLiBBbGwgUmlnaHRz
IFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMjEgQXBwbGUgSW5jLiBBbGwgUmln
aHRzIFJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01MSw3ICs1
MSw2IEBAIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBWTTsKIGNsYXNzIEpTU3RyaW5nOwotY2xh
c3MgU2xvdFZpc2l0b3I7CiAKIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbWF4U2luZ2xlQ2hh
cmFjdGVyU3RyaW5nID0gMHhGRjsKIApAQCAtNzgsNyArNzcsNyBAQCBwdWJsaWM6CiAgICAgSlNT
dHJpbmcqKiBzaW5nbGVDaGFyYWN0ZXJTdHJpbmdzKCkgeyByZXR1cm4gJm1fc2luZ2xlQ2hhcmFj
dGVyU3RyaW5nc1swXTsgfQogCiAgICAgdm9pZCBpbml0aWFsaXplQ29tbW9uU3RyaW5ncyhWTSYp
OwotICAgIHZvaWQgdmlzaXRTdHJvbmdSZWZlcmVuY2VzKFNsb3RWaXNpdG9yJik7CisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCB2aXNpdFN0cm9uZ1JlZmVyZW5jZXMoVmlzaXRv
ciYpOwogCiAjZGVmaW5lIEpTQ19DT01NT05fU1RSSU5HU19BQ0NFU1NPUl9ERUZJTklUSU9OKG5h
bWUpIFwKICAgICBKU1N0cmluZyogbmFtZSMjU3RyaW5nKCkgY29uc3QgICAgICAgICAgICAgICAg
ICAgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3BhcnNlQXJyYXlWYWx1
ZU1hcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3Bh
cnNlQXJyYXlWYWx1ZU1hcC5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1NwYXJzZUFycmF5VmFsdWVNYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMS0yMDE3IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDIxIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtMjEwLDcgKzIxMCw4IEBAIEpTVmFsdWUgU3BhcnNlQXJyYXlFbnRyeTo6Z2V0Tm9uU3BhcnNl
TW8KICAgICByZXR1cm4gQmFzZTo6Z2V0KCk7CiB9CiAKLXZvaWQgU3BhcnNlQXJyYXlWYWx1ZU1h
cDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVt
cGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6dmlzaXRD
aGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFNwYXJz
ZUFycmF5VmFsdWVNYXAqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8U3BhcnNlQXJyYXlWYWx1ZU1hcCo+
KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygp
KTsKQEAgLTIyMyw1ICsyMjQsNyBAQCB2b2lkIFNwYXJzZUFycmF5VmFsdWVNYXA6OnZpc2l0Q2hp
bGRyZW4oCiAgICAgdmlzaXRvci5yZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQodGhpc09iamVjdC0+
bV9yZXBvcnRlZENhcGFjaXR5ICogc2l6ZW9mKE1hcDo6S2V5VmFsdWVQYWlyVHlwZSkpOwogfQog
CitERUZJTkVfVklTSVRfQ0hJTERSRU4oU3BhcnNlQXJyYXlWYWx1ZU1hcCk7CisKIH0gLy8gbmFt
ZXNwYWNlIEpTQwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TcGFyc2VB
cnJheVZhbHVlTWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU3BhcnNlQXJyYXlWYWx1ZU1hcC5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TcGFyc2VBcnJheVZhbHVlTWFwLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTkgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMjEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC0xMTUsNyArMTE1LDcgQEAgcHVibGljOgogICAgIAogICAgIHN0YXRpYyBTdHJ1Y3R1cmUq
IGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBwcm90b3R5cGUp
OwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYp
OworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBib29sIHNwYXJzZU1vZGUoKQog
ICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0YWNrRnJhbWUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0YWNrRnJhbWUu
Y3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
dGFja0ZyYW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTYtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE0MSwxMyArMTQxLDUgQEAgU3RyaW5n
IFN0YWNrRnJhbWU6OnRvU3RyaW5nKFZNJiB2bSkgY29ucwogICAgIHJldHVybiB0cmFjZUJ1aWxk
LnRvU3RyaW5nKCkuaW1wbCgpOwogfQogCi12b2lkIFN0YWNrRnJhbWU6OnZpc2l0Q2hpbGRyZW4o
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCi17Ci0gICAgaWYgKG1fY2FsbGVlKQotICAgICAgICB2aXNp
dG9yLmFwcGVuZChtX2NhbGxlZSk7Ci0gICAgaWYgKG1fY29kZUJsb2NrKQotICAgICAgICB2aXNp
dG9yLmFwcGVuZChtX2NvZGVCbG9jayk7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIEpTQwogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdGFja0ZyYW1lLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RhY2tGcmFtZS5oCShyZXZpc2lvbiAy
NzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdGFja0ZyYW1lLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIw
MTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2
LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0yNiw2ICsyNiw3IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUg
IkhlYXAuaCIKKyNpbmNsdWRlICJTbG90VmlzaXRvck1hY3Jvcy5oIgogI2luY2x1ZGUgIlZNLmgi
CiAjaW5jbHVkZSAiV2FzbUluZGV4T3JOYW1lLmgiCiAjaW5jbHVkZSAiV3JpdGVCYXJyaWVyLmgi
CkBAIC0zNSw3ICszNiw2IEBAIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBDb2RlQmxvY2s7CiBj
bGFzcyBKU09iamVjdDsKLWNsYXNzIFNsb3RWaXNpdG9yOwogCiBjbGFzcyBTdGFja0ZyYW1lIHsK
IHB1YmxpYzoKQEAgLTU3LDggKzU3LDE2IEBAIHB1YmxpYzoKICAgICAgICAgQVNTRVJUKGhhc0J5
dGVjb2RlSW5kZXgoKSk7CiAgICAgICAgIHJldHVybiBtX2J5dGVjb2RlSW5kZXg7CiAgICAgfQot
ICAgIAotICAgIHZvaWQgdmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYpOworCisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgVmlzaXRvcj4KKyAgICB2b2lkIHZpc2l0Q2hpbGRyZW4oVmlzaXRvciYgdmlz
aXRvcikKKyAgICB7CisgICAgICAgIGlmIChtX2NhbGxlZSkKKyAgICAgICAgICAgIHZpc2l0b3Iu
YXBwZW5kKG1fY2FsbGVlKTsKKyAgICAgICAgaWYgKG1fY29kZUJsb2NrKQorICAgICAgICAgICAg
dmlzaXRvci5hcHBlbmQobV9jb2RlQmxvY2spOworICAgIH0KKwogICAgIGJvb2wgaXNNYXJrZWQo
Vk0mIHZtKSBjb25zdCB7IHJldHVybiAoIW1fY2FsbGVlIHx8IHZtLmhlYXAuaXNNYXJrZWQobV9j
YWxsZWUuZ2V0KCkpKSAmJiAoIW1fY29kZUJsb2NrIHx8IHZtLmhlYXAuaXNNYXJrZWQobV9jb2Rl
QmxvY2suZ2V0KCkpKTsgfQogCiBwcml2YXRlOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU3RydWN0dXJlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOC0yMDE5IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAyMCBBbGV4ZXkgU2h2YXlrYSA8
c2h2YWlrYWxlc2hAZ21haWwuY29tPi4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTEyNjgsNyArMTI2
OCw4IEBAIHZvaWQgU3RydWN0dXJlOjpkaWRUcmFuc2l0aW9uRnJvbVRoaXNTdHIKICAgICAgICAg
bV90cmFuc2l0aW9uV2F0Y2hwb2ludFNldC5maXJlQWxsKHZtKCksIFN0cnVjdHVyZUZpcmVEZXRh
aWwodGhpcykpOwogfQogCi12b2lkIFN0cnVjdHVyZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNl
bGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3Zv
aWQgU3RydWN0dXJlOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZp
c2l0b3IpCiB7CiAgICAgU3RydWN0dXJlKiB0aGlzT2JqZWN0ID0ganNDYXN0PFN0cnVjdHVyZSo+
KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygp
KTsKQEAgLTEyOTAsMzIgKzEyOTEsMzggQEAgdm9pZCBTdHJ1Y3R1cmU6OnZpc2l0Q2hpbGRyZW4o
SlNDZWxsKiBjZQogICAgICAgICAvLyBOT1RFOiBUaGlzIGNhbiBpbnRlcmxlYXZlIGluIHBpbigp
LCBpbiB3aGljaCBjYXNlIGl0IG1heSBzZWUgYSBudWxsIHByb3BlcnR5IHRhYmxlLgogICAgICAg
ICAvLyBUaGF0J3MgZmluZSwgYmVjYXVzZSB0aGVuIHRoZSBiYXJyaWVyIHdpbGwgZmlyZSBhbmQg
d2Ugd2lsbCBzY2FuIHRoaXMgYWdhaW4uCiAgICAgICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmpl
Y3QtPm1fcHJvcGVydHlUYWJsZVVuc2FmZSk7Ci0gICAgfSBlbHNlIGlmICh2aXNpdG9yLmlzQW5h
bHl6aW5nSGVhcCgpKQorICAgIH0gZWxzZSBpZiAodmlzaXRvci52bSgpLmlzQW5hbHl6aW5nSGVh
cCgpKQogICAgICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX3Byb3BlcnR5VGFibGVV
bnNhZmUpOwogICAgIGVsc2UgaWYgKHRoaXNPYmplY3QtPm1fcHJvcGVydHlUYWJsZVVuc2FmZSkK
ICAgICAgICAgdGhpc09iamVjdC0+bV9wcm9wZXJ0eVRhYmxlVW5zYWZlLmNsZWFyKCk7CiB9CiAK
LWJvb2wgU3RydWN0dXJlOjppc0NoZWFwRHVyaW5nR0MoVk0mIHZtKQorREVGSU5FX1ZJU0lUX0NI
SUxEUkVOKFN0cnVjdHVyZSk7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+CitBTFdBWVNf
SU5MSU5FIGJvb2wgU3RydWN0dXJlOjppc0NoZWFwRHVyaW5nR0MoVmlzaXRvciYgdmlzaXRvcikK
IHsKICAgICAvLyBGSVhNRTogV2UgY291bGQgbWFrZSB0aGlzIGV2ZW4gc2FmZXIgYnkgcmV0dXJu
aW5nIGZhbHNlIGlmIHRoaXMgc3RydWN0dXJlJ3MgcHJvcGVydHkgdGFibGUKICAgICAvLyBoYXMg
YW55IGxhcmdlIHByb3BlcnR5IG5hbWVzLgogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNTczMzQKICAgICAKLSAgICByZXR1cm4gKCFtX2dsb2JhbE9iamVj
dCB8fCB2bS5oZWFwLmlzTWFya2VkKG1fZ2xvYmFsT2JqZWN0LmdldCgpKSkKLSAgICAgICAgJiYg
KGhhc1BvbHlQcm90bygpIHx8ICFzdG9yZWRQcm90b3R5cGVPYmplY3QoKSB8fCB2bS5oZWFwLmlz
TWFya2VkKHN0b3JlZFByb3RvdHlwZU9iamVjdCgpKSk7CisgICAgcmV0dXJuICghbV9nbG9iYWxP
YmplY3QgfHwgdmlzaXRvci5pc01hcmtlZChtX2dsb2JhbE9iamVjdC5nZXQoKSkpCisgICAgICAg
ICYmIChoYXNQb2x5UHJvdG8oKSB8fCAhc3RvcmVkUHJvdG90eXBlT2JqZWN0KCkgfHwgdmlzaXRv
ci5pc01hcmtlZChzdG9yZWRQcm90b3R5cGVPYmplY3QoKSkpOwogfQogCi1ib29sIFN0cnVjdHVy
ZTo6bWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPgorYm9vbCBTdHJ1Y3R1cmU6Om1hcmtJZkNoZWFwKFZpc2l0b3ImIHZpc2l0b3IpCiB7
Ci0gICAgVk0mIHZtID0gdmlzaXRvci52bSgpOwotICAgIGlmICghaXNDaGVhcER1cmluZ0dDKHZt
KSkKLSAgICAgICAgcmV0dXJuIHZtLmhlYXAuaXNNYXJrZWQodGhpcyk7Ci0gICAgCisgICAgaWYg
KCFpc0NoZWFwRHVyaW5nR0ModmlzaXRvcikpCisgICAgICAgIHJldHVybiB2aXNpdG9yLmlzTWFy
a2VkKHRoaXMpOworCiAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZCh0aGlzKTsKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIAordGVtcGxhdGUgYm9vbCBTdHJ1Y3R1cmU6Om1hcmtJZkNoZWFwKEFi
c3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIGJvb2wgU3RydWN0dXJlOjptYXJrSWZDaGVh
cChTbG90VmlzaXRvciYpOworCiBSZWY8U3RydWN0dXJlU2hhcGU+IFN0cnVjdHVyZTo6dG9TdHJ1
Y3R1cmVTaGFwZShKU1ZhbHVlIHZhbHVlLCBib29sJiBzYXdQb2x5UHJvdG9TdHJ1Y3R1cmUpCiB7
CiAgICAgUmVmPFN0cnVjdHVyZVNoYXBlPiBiYXNlU2hhcGUgPSBTdHJ1Y3R1cmVTaGFwZTo6Y3Jl
YXRlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAko
cmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0
dXJlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDA4LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDA4LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02MCw3ICs2MCw2IEBAIGNsYXNzIFByb3BlcnR5TmFt
ZUFycmF5RGF0YTsKIGNsYXNzIFByb3BlcnR5VGFibGU7CiBjbGFzcyBTdHJ1Y3R1cmVDaGFpbjsK
IGNsYXNzIFN0cnVjdHVyZVNoYXBlOwotY2xhc3MgU2xvdFZpc2l0b3I7CiBjbGFzcyBKU1N0cmlu
ZzsKIHN0cnVjdCBEdW1wQ29udGV4dDsKIHN0cnVjdCBIYXNoVGFibGU7CkBAIC0zMTAsNyArMzA5
LDcgQEAgcHVibGljOgogICAgIEpTVmFsdWUgcHJvdG90eXBlRm9yTG9va3VwKEpTR2xvYmFsT2Jq
ZWN0KiwgSlNDZWxsKiBiYXNlKSBjb25zdDsKICAgICBTdHJ1Y3R1cmVDaGFpbiogcHJvdG90eXBl
Q2hhaW4oVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTT2JqZWN0KiBiYXNlKSBjb25zdDsKICAgICBT
dHJ1Y3R1cmVDaGFpbiogcHJvdG90eXBlQ2hhaW4oSlNHbG9iYWxPYmplY3QqLCBKU09iamVjdCog
YmFzZSkgY29uc3Q7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90
VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAgICAgCiAgICAgLy8gQSBT
dHJ1Y3R1cmUgaXMgY2hlYXAgdG8gbWFyayBkdXJpbmcgR0MgaWYgZG9pbmcgc28gd291bGQgb25s
eSBhZGQgYSBzbWFsbCBhbmQgYm91bmRlZCBhbW91bnQKICAgICAvLyB0byBvdXIgaGVhcCBmb290
cHJpbnQuIEZvciBleGFtcGxlLCBpZiB0aGUgc3RydWN0dXJlIHJlZmVycyB0byBhIGdsb2JhbCBv
YmplY3QgdGhhdCBpcyBub3QKQEAgLTMxOCwxMCArMzE3LDEwIEBAIHB1YmxpYzoKICAgICAvLyBp
bmNyZWFzZSBpbiBmb290cHJpbnQgYmVjYXVzZSBubyBvdGhlciBvYmplY3QgcmVmZXJzIHRvIHRo
YXQgZ2xvYmFsIG9iamVjdC4gVGhpcyBtZXRob2QKICAgICAvLyByZXR1cm5zIHRydWUgaWYgYWxs
IHVzZXItY29udHJvbGxlZCAoYW5kIGhlbmNlIHVuYm91bmRlZCBpbiBzaXplKSBvYmplY3RzIHJl
ZmVyZW5jZWQgZnJvbSB0aGUKICAgICAvLyBTdHJ1Y3R1cmUgYXJlIGFscmVhZHkgbWFya2VkLgot
ICAgIGJvb2wgaXNDaGVhcER1cmluZ0dDKFZNJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlz
aXRvcj4gYm9vbCBpc0NoZWFwRHVyaW5nR0MoVmlzaXRvciYpOwogICAgIAogICAgIC8vIFJldHVy
bnMgdHJ1ZSBpZiB0aGlzIHN0cnVjdHVyZSBpcyBub3cgbWFya2VkLgotICAgIGJvb2wgbWFya0lm
Q2hlYXAoU2xvdFZpc2l0b3ImKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiBib29s
IG1hcmtJZkNoZWFwKFZpc2l0b3ImKTsKICAgICAKICAgICBib29sIGhhc1JhcmVEYXRhKCkgY29u
c3QKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVD
aGFpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3Ry
dWN0dXJlQ2hhaW4uY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TdHJ1Y3R1cmVDaGFpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjYsNyArNjYsOCBA
QCB2b2lkIFN0cnVjdHVyZUNoYWluOjpmaW5pc2hDcmVhdGlvbihWTSYgCiAgICAgfQogfQogCi12
b2lkIFN0cnVjdHVyZUNoYWluOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0
b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBTdHJ1Y3R1cmVD
aGFpbjo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQog
ewogICAgIFN0cnVjdHVyZUNoYWluKiB0aGlzT2JqZWN0ID0ganNDYXN0PFN0cnVjdHVyZUNoYWlu
Kj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZv
KCkpOwpAQCAtODAsNCArODEsNiBAQCB2b2lkIFN0cnVjdHVyZUNoYWluOjp2aXNpdENoaWxkcmVu
KEpTQ2VsCiAgICAgfQogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oU3RydWN0dXJlQ2hhaW4p
OworCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1N0cnVjdHVyZUNoYWluLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU3RydWN0dXJlQ2hhaW4uaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlQ2hhaW4uaAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxOSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTUxLDcgKzUxLDcgQEAgcHVibGljOgogCiAgICAgc3RhdGljIFN0cnVjdHVyZUNoYWluKiBjcmVh
dGUoVk0mLCBKU09iamVjdCopOwogICAgIFN0cnVjdHVyZUlEKiBoZWFkKCkgeyByZXR1cm4gbV92
ZWN0b3IuZ2V0KCk7IH0KLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNs
b3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIHN0YXRpYyBT
dHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1N0cnVjdHVyZVJhcmVEYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVSYXJlRGF0YS5jcHAJKHJldmlzaW9uIDI3
MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZVJhcmVEYXRh
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY3LDcgKzY3LDggQEAgU3RydWN0dXJlUmFyZURhdGE6
OlN0cnVjdHVyZVJhcmVEYXRhKFZNJgogICAgICAgICBtX3ByZXZpb3VzLnNldCh2bSwgdGhpcywg
cHJldmlvdXMpOwogfQogCi12b2lkIFN0cnVjdHVyZVJhcmVEYXRhOjp2aXNpdENoaWxkcmVuKEpT
Q2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNp
dG9yPgordm9pZCBTdHJ1Y3R1cmVSYXJlRGF0YTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBj
ZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFN0cnVjdHVyZVJhcmVEYXRhKiB0aGlzT2Jq
ZWN0ID0ganNDYXN0PFN0cnVjdHVyZVJhcmVEYXRhKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09C
SkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtODYsNiArODcsOCBAQCB2b2lk
IFN0cnVjdHVyZVJhcmVEYXRhOjp2aXNpdENoaWxkcmVuKEpTCiAgICAgfQogfQogCitERUZJTkVf
VklTSVRfQ0hJTERSRU4oU3RydWN0dXJlUmFyZURhdGEpOworCiAvLyAtLS0tLS0tLS0tLSBDYWNo
ZWQgc3BlY2lhbCBwcm9wZXJ0aWVzIGhlbHBlciB3YXRjaHBvaW50IGNsYXNzZXMgLS0tLS0tLS0t
LS0KIAogY2xhc3MgQ2FjaGVkU3BlY2lhbFByb3BlcnR5QWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5
VmFsdWVXYXRjaHBvaW50IGZpbmFsIDogcHVibGljIEFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZh
bHVlV2F0Y2hwb2ludEJhc2UgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U3RydWN0dXJlUmFyZURhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TdHJ1Y3R1cmVSYXJlRGF0YS5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVSYXJlRGF0YS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIwIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIxIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtNjgsNyArNjgsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5l
ZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOwogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7
CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7
CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNy
ZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBwcm90b3R5cGUpOwog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TeW1ib2xUYWJsZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFibGUuY3Bw
CShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TeW1i
b2xUYWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDEyLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDEyLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC05Miw3ICs5Miw4IEBAIHZvaWQgU3ltYm9s
VGFibGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2
bSk7CiB9CiAKLXZvaWQgU3ltYm9sVGFibGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiB0aGlzQ2Vs
bCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9p
ZCBTeW1ib2xUYWJsZTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiB0aGlzQ2VsbCwgVmlzaXRv
ciYgdmlzaXRvcikKIHsKICAgICBTeW1ib2xUYWJsZSogdGhpc1N5bWJvbFRhYmxlID0ganNDYXN0
PFN5bWJvbFRhYmxlKj4odGhpc0NlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMo
dGhpc1N5bWJvbFRhYmxlLCBpbmZvKCkpOwpAQCAtMTA4LDYgKzEwOSw4IEBAIHZvaWQgU3ltYm9s
VGFibGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiAKICAgICB0aGlzU3ltYm9sVGFibGUtPm1fbG9j
YWxUb0VudHJ5ID0gbnVsbHB0cjsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKFN5bWJvbFRh
YmxlKTsKKwogY29uc3QgU3ltYm9sVGFibGU6OkxvY2FsVG9FbnRyeVZlYyYgU3ltYm9sVGFibGU6
OmxvY2FsVG9FbnRyeShjb25zdCBDb25jdXJyZW50SlNMb2NrZXImKQogewogICAgIGlmIChVTkxJ
S0VMWSghbV9sb2NhbFRvRW50cnkpKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TeW1ib2xUYWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1N5bWJvbFRhYmxlLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1N5bWJvbFRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03MzMsNyAr
NzMzLDcgQEAgcHVibGljOgogICAgICAgICBtX3NpbmdsZXRvbi5ub3RpZnlXcml0ZSh2bSwgdGhp
cywgc2NvcGUsIHJlYXNvbik7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJl
bihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAK
ICAgICBERUNMQVJFX0VYUE9SVF9JTkZPOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9UeXBlUHJvZmlsZXJMb2cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1R5cGVQcm9maWxlckxvZy5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVQcm9maWxlckxvZy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTkg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIw
MjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0xMjQsNyArMTI0LDkgQEAgdm9pZCBUeXBlUHJvZmlsZXJMb2c6OnByb2Nl
c3NMb2dFbnRyaWVzKAogICAgIH0KIH0KIAotdm9pZCBUeXBlUHJvZmlsZXJMb2c6OnZpc2l0KFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQorLy8gV2UgZG9uJ3QgbmVlZCBhIFNsb3RWaXNpdG9yIHZlcnNp
b24gb2YgdGhpcyBiZWNhdXNlIFR5cGVQcm9maWxlckxvZyBpcyBvbmx5IHVzZWQgYnkKKy8vIGRl
diB0b29scywgYW5kIGlzIHRoZXJlZm9yZSBub3Qgb24gdGhlIGNyaXRpY2FsIHBhdGggZm9yIHBl
cmZvcm1hbmNlLgordm9pZCBUeXBlUHJvZmlsZXJMb2c6OnZpc2l0KEFic3RyYWN0U2xvdFZpc2l0
b3ImIHZpc2l0b3IpCiB7CiAgICAgZm9yIChMb2dFbnRyeSogZW50cnkgPSBtX2xvZ1N0YXJ0UHRy
OyBlbnRyeSAhPSBtX2N1cnJlbnRMb2dFbnRyeVB0cjsgKytlbnRyeSkgewogICAgICAgICB2aXNp
dG9yLmFwcGVuZFVuYmFycmllcmVkKGVudHJ5LT52YWx1ZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9UeXBlUHJvZmlsZXJMb2cuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlUHJvZmlsZXJMb2cuaAkocmV2aXNpb24gMjcyODMw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZVByb2ZpbGVyTG9nLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMzMsNiArMzMsNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAorY2xhc3MgQWJz
dHJhY3RTbG90VmlzaXRvcjsKIGNsYXNzIFR5cGVMb2NhdGlvbjsKIAogY2xhc3MgVHlwZVByb2Zp
bGVyTG9nIHsKQEAgLTU5LDcgKzYwLDcgQEAgcHVibGljOgogICAgIEpTX0VYUE9SVF9QUklWQVRF
IHZvaWQgcHJvY2Vzc0xvZ0VudHJpZXMoVk0mLCBjb25zdCBTdHJpbmcmKTsKICAgICBMb2dFbnRy
eSogbG9nRW5kUHRyKCkgY29uc3QgeyByZXR1cm4gbV9sb2dFbmRQdHI7IH0KIAotICAgIHZvaWQg
dmlzaXQoU2xvdFZpc2l0b3ImKTsKKyAgICB2b2lkIHZpc2l0KEFic3RyYWN0U2xvdFZpc2l0b3Im
KTsKIAogICAgIHN0YXRpYyBwdHJkaWZmX3QgbG9nU3RhcnRPZmZzZXQoKSB7IHJldHVybiBPQkpF
Q1RfT0ZGU0VUT0YoVHlwZVByb2ZpbGVyTG9nLCBtX2xvZ1N0YXJ0UHRyKTsgfQogICAgIHN0YXRp
YyBwdHJkaWZmX3QgY3VycmVudExvZ0VudHJ5T2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNF
VE9GKFR5cGVQcm9maWxlckxvZywgbV9jdXJyZW50TG9nRW50cnlQdHIpOyB9CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMjEsNiArMTIxLDcg
QEAgY2xhc3MgRmFzdE1hbGxvY0FsaWduZWRNZW1vcnlBbGxvY2F0b3I7CiBjbGFzcyBHaWdhY2Fn
ZUFsaWduZWRNZW1vcnlBbGxvY2F0b3I7CiBjbGFzcyBIYW5kbGVTdGFjazsKIGNsYXNzIEhhc093
blByb3BlcnR5Q2FjaGU7CitjbGFzcyBIZWFwQW5hbHl6ZXI7CiBjbGFzcyBIZWFwUHJvZmlsZXI7
CiBjbGFzcyBJZGVudGlmaWVyOwogY2xhc3MgSW50ZXJwcmV0ZXI7CkBAIC0zMTAsNiArMzExLDEw
IEBAIHB1YmxpYzoKICAgICBIZWFwUHJvZmlsZXIqIGhlYXBQcm9maWxlcigpIGNvbnN0IHsgcmV0
dXJuIG1faGVhcFByb2ZpbGVyLmdldCgpOyB9CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgSGVhcFBy
b2ZpbGVyJiBlbnN1cmVIZWFwUHJvZmlsZXIoKTsKIAorICAgIGJvb2wgaXNBbmFseXppbmdIZWFw
KCkgY29uc3QgeyByZXR1cm4gbV9hY3RpdmVIZWFwQW5hbHl6ZXI7IH0KKyAgICBIZWFwQW5hbHl6
ZXIqIGFjdGl2ZUhlYXBBbmFseXplcigpIGNvbnN0IHsgcmV0dXJuIG1fYWN0aXZlSGVhcEFuYWx5
emVyOyB9CisgICAgdm9pZCBzZXRBY3RpdmVIZWFwQW5hbHl6ZXIoSGVhcEFuYWx5emVyKiBhbmFs
eXplcikgeyBtX2FjdGl2ZUhlYXBBbmFseXplciA9IGFuYWx5emVyOyB9CisKICNpZiBFTkFCTEUo
U0FNUExJTkdfUFJPRklMRVIpCiAgICAgU2FtcGxpbmdQcm9maWxlciogc2FtcGxpbmdQcm9maWxl
cigpIHsgcmV0dXJuIG1fc2FtcGxpbmdQcm9maWxlci5nZXQoKTsgfQogICAgIEpTX0VYUE9SVF9Q
UklWQVRFIFNhbXBsaW5nUHJvZmlsZXImIGVuc3VyZVNhbXBsaW5nUHJvZmlsZXIoUmVmPFN0b3B3
YXRjaD4mJik7CkBAIC0xMTk1LDkgKzEyMDAsMTAgQEAgcHVibGljOgogICAgIGJvb2wgZGlkRW50
ZXJWTSB7IGZhbHNlIH07CiBwcml2YXRlOgogICAgIGJvb2wgbV9mYWlsTmV4dE5ld0NvZGVCbG9j
ayB7IGZhbHNlIH07Ci0gICAgRGVsZXRlUHJvcGVydHlNb2RlIG1fZGVsZXRlUHJvcGVydHlNb2Rl
IHsgRGVsZXRlUHJvcGVydHlNb2RlOjpEZWZhdWx0IH07CiAgICAgYm9vbCBtX2dsb2JhbENvbnN0
UmVkZWNsYXJhdGlvblNob3VsZFRocm93IHsgdHJ1ZSB9OwogICAgIGJvb2wgbV9zaG91bGRCdWls
ZFBDVG9Db2RlT3JpZ2luTWFwcGluZyB7IGZhbHNlIH07CisgICAgRGVsZXRlUHJvcGVydHlNb2Rl
IG1fZGVsZXRlUHJvcGVydHlNb2RlIHsgRGVsZXRlUHJvcGVydHlNb2RlOjpEZWZhdWx0IH07Cisg
ICAgSGVhcEFuYWx5emVyKiBtX2FjdGl2ZUhlYXBBbmFseXplciB7IG51bGxwdHIgfTsKICAgICBz
dGQ6OnVuaXF1ZV9wdHI8Q29kZUNhY2hlPiBtX2NvZGVDYWNoZTsKICAgICBzdGQ6OnVuaXF1ZV9w
dHI8SW50bENhY2hlPiBtX2ludGxDYWNoZTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8QnVpbHRpbkV4
ZWN1dGFibGVzPiBtX2J1aWx0aW5FeGVjdXRhYmxlczsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1dlYWtNYXBJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9XZWFrTWFwSW1wbC5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtNYXBJbXBsLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDE3IFl1c3VrZSBTdXp1
a2kgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4uCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0yOCw2ICsy
OCw3IEBACiAjaW5jbHVkZSAiV2Vha01hcEltcGwuaCIKIAogI2luY2x1ZGUgIkF1eGlsaWFyeUJh
cnJpZXJJbmxpbmVzLmgiCisjaW5jbHVkZSAiU2xvdFZpc2l0b3JJbmxpbmVzLmgiCiAjaW5jbHVk
ZSAiU3RydWN0dXJlSW5saW5lcy5oIgogI2luY2x1ZGUgIldlYWtNYXBJbXBsSW5saW5lcy5oIgog
CkBAIC0zOSw4ICs0MCw5IEBAIHZvaWQgV2Vha01hcEltcGw8V2Vha01hcEJ1Y2tldD46OmRlc3Ry
b3kKICAgICBzdGF0aWNfY2FzdDxXZWFrTWFwSW1wbCo+KGNlbGwpLT5+V2Vha01hcEltcGwoKTsK
IH0KIAotdGVtcGxhdGUgPHR5cGVuYW1lIFdlYWtNYXBCdWNrZXQ+Ci12b2lkIFdlYWtNYXBJbXBs
PFdlYWtNYXBCdWNrZXQ+Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3Im
IHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBXZWFrTWFwQnVja2V0PgordGVtcGxhdGU8dHlw
ZW5hbWUgVmlzaXRvcj4KK3ZvaWQgV2Vha01hcEltcGw8V2Vha01hcEJ1Y2tldD46OnZpc2l0Q2hp
bGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBXZWFrTWFw
SW1wbCogdGhpc09iamVjdCA9IGpzQ2FzdDxXZWFrTWFwSW1wbCo+KGNlbGwpOwogICAgIEFTU0VS
VF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTQ4LDYgKzUwLDgg
QEAgdm9pZCBXZWFrTWFwSW1wbDxXZWFrTWFwQnVja2V0Pjo6dmlzaXRDaAogICAgIHZpc2l0b3Iu
cmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKHRoaXNPYmplY3QtPm1fY2FwYWNpdHkgKiBzaXplb2Yo
V2Vha01hcEJ1Y2tldCkpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU5fV0lUSF9NT0RJRklF
Uih0ZW1wbGF0ZTx0eXBlbmFtZSBXZWFrTWFwQnVja2V0PiwgV2Vha01hcEltcGw8V2Vha01hcEJ1
Y2tldD4pOworCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgV2Vha01hcEJ1Y2tldD4KIHNpemVfdCBXZWFr
TWFwSW1wbDxXZWFrTWFwQnVja2V0Pjo6ZXN0aW1hdGVkU2l6ZShKU0NlbGwqIGNlbGwsIFZNJiB2
bSkKIHsKQEAgLTU2LDE1ICs2MCwyNSBAQCBzaXplX3QgV2Vha01hcEltcGw8V2Vha01hcEJ1Y2tl
dD46OmVzdGltCiB9CiAKIHRlbXBsYXRlIDw+Ci12b2lkIFdlYWtNYXBJbXBsPFdlYWtNYXBCdWNr
ZXQ8V2Vha01hcEJ1Y2tldERhdGFLZXk+Pjo6dmlzaXRPdXRwdXRDb25zdHJhaW50cyhKU0NlbGwq
LCBTbG90VmlzaXRvciYpCit0ZW1wbGF0ZSA8Pgordm9pZCBXZWFrTWFwSW1wbDxXZWFrTWFwQnVj
a2V0PFdlYWtNYXBCdWNrZXREYXRhS2V5Pj46OnZpc2l0T3V0cHV0Q29uc3RyYWludHMoSlNDZWxs
KiwgQWJzdHJhY3RTbG90VmlzaXRvciYpCiB7CiAgICAgLy8gT25seSBKU1dlYWtNYXAgbmVlZHMg
dG8gaGFydmVzdCB2YWx1ZSByZWZlcmVuY2VzCiB9CiAKIHRlbXBsYXRlIDw+Ci12b2lkIFdlYWtN
YXBJbXBsPFdlYWtNYXBCdWNrZXQ8V2Vha01hcEJ1Y2tldERhdGFLZXlWYWx1ZT4+Ojp2aXNpdE91
dHB1dENvbnN0cmFpbnRzKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1w
bGF0ZSA8Pgordm9pZCBXZWFrTWFwSW1wbDxXZWFrTWFwQnVja2V0PFdlYWtNYXBCdWNrZXREYXRh
S2V5Pj46OnZpc2l0T3V0cHV0Q29uc3RyYWludHMoSlNDZWxsKiwgU2xvdFZpc2l0b3ImKQogewot
ICAgIFZNJiB2bSA9IHZpc2l0b3Iudm0oKTsKKyAgICAvLyBPbmx5IEpTV2Vha01hcCBuZWVkcyB0
byBoYXJ2ZXN0IHZhbHVlIHJlZmVyZW5jZXMKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQnVja2V0
VHlwZT4KK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+CitBTFdBWVNfSU5MSU5FIHZvaWQgV2Vh
a01hcEltcGw8QnVja2V0VHlwZT46OnZpc2l0T3V0cHV0Q29uc3RyYWludHMoSlNDZWxsKiBjZWxs
LCBWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19zYW1lPEJ1
Y2tldFR5cGUsIFdlYWtNYXBCdWNrZXQ8V2Vha01hcEJ1Y2tldERhdGFLZXlWYWx1ZT4+Ojp2YWx1
ZSk7CisKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PFdlYWtNYXBJbXBsKj4oY2VsbCk7
CiAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayh0aGlzT2JqZWN0LT5jZWxsTG9jaygpKTsKICAg
ICBhdXRvKiBidWZmZXIgPSB0aGlzT2JqZWN0LT5idWZmZXIoKTsKQEAgLTcyLDEyICs4NiwxNSBA
QCB2b2lkIFdlYWtNYXBJbXBsPFdlYWtNYXBCdWNrZXQ8V2Vha01hcEJ1CiAgICAgICAgIGF1dG8q
IGJ1Y2tldCA9IGJ1ZmZlciArIGluZGV4OwogICAgICAgICBpZiAoYnVja2V0LT5pc0VtcHR5KCkg
fHwgYnVja2V0LT5pc0RlbGV0ZWQoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBp
ZiAoIXZtLmhlYXAuaXNNYXJrZWQoYnVja2V0LT5rZXkoKSkpCisgICAgICAgIGlmICghdmlzaXRv
ci5pc01hcmtlZChidWNrZXQtPmtleSgpKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAg
ICBidWNrZXQtPnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOwogICAgIH0KIH0KIAordGVtcGxhdGUg
dm9pZCBXZWFrTWFwSW1wbDxXZWFrTWFwQnVja2V0PFdlYWtNYXBCdWNrZXREYXRhS2V5VmFsdWU+
Pjo6dmlzaXRPdXRwdXRDb25zdHJhaW50cyhKU0NlbGwqLCBBYnN0cmFjdFNsb3RWaXNpdG9yJik7
Cit0ZW1wbGF0ZSB2b2lkIFdlYWtNYXBJbXBsPFdlYWtNYXBCdWNrZXQ8V2Vha01hcEJ1Y2tldERh
dGFLZXlWYWx1ZT4+Ojp2aXNpdE91dHB1dENvbnN0cmFpbnRzKEpTQ2VsbCosIFNsb3RWaXNpdG9y
Jik7CisKIHRlbXBsYXRlIDx0eXBlbmFtZSBXZWFrTWFwQnVja2V0PgogdGVtcGxhdGU8dHlwZW5h
bWUgQXBwZW5kZXI+CiB2b2lkIFdlYWtNYXBJbXBsPFdlYWtNYXBCdWNrZXQ+Ojp0YWtlU25hcHNo
b3RJbnRlcm5hbCh1bnNpZ25lZCBsaW1pdCwgQXBwZW5kZXIgYXBwZW5kZXIpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9XZWFrTWFwSW1wbC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtNYXBJbXBsLmgJKHJldmlzaW9uIDI3Mjgz
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtNYXBJbXBsLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIw
MjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDE3
IFl1c3VrZSBTdXp1a2kgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4uCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CkBAIC0xNDQsOCArMTQ0LDggQEAgcHVibGljOgogICAgICAgICBjbGVhclZhbHVlKCk7CiAgICAg
fQogCi0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQgPSBEYXRhPgotICAgIEFMV0FZU19JTkxJTkUg
dHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19zYW1lPFQsIFdlYWtNYXBCdWNrZXREYXRh
S2V5VmFsdWU+Ojp2YWx1ZT46OnR5cGUgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImIHZpc2l0
b3IpCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQgPSBEYXRhLCB0eXBlbmFtZSBWaXNpdG9yPgor
ICAgIEFMV0FZU19JTkxJTkUgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19zYW1lPFQs
IFdlYWtNYXBCdWNrZXREYXRhS2V5VmFsdWU+Ojp2YWx1ZT46OnR5cGUgdmlzaXRBZ2dyZWdhdGUo
VmlzaXRvciYgdmlzaXRvcikKICAgICB7CiAgICAgICAgIHZpc2l0b3IuYXBwZW5kKG1fZGF0YS52
YWx1ZSk7CiAgICAgfQpAQCAtMjAyLDcgKzIwMiw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgbmVlZHNEZXN0cnVjdGlvbiA9IHRydWU7CiAgICAgc3RhdGljIHZvaWQgZGVz
dHJveShKU0NlbGwqKTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwg
U2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgc3RhdGlj
IHNpemVfdCBlc3RpbWF0ZWRTaXplKEpTQ2VsbCosIFZNJik7CiAKQEAgLTMxMSwxMCArMzExLDEz
IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHZtLndlYWtTZXRTcGFjZTxtb2RlPigpOwogICAg
IH0KIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0T3V0cHV0Q29uc3RyYWludHMoSlNDZWxsKiwgU2xv
dFZpc2l0b3ImKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiBzdGF0aWMgdm9pZCB2
aXNpdE91dHB1dENvbnN0cmFpbnRzKEpTQ2VsbCosIFZpc2l0b3ImKTsKICAgICB2b2lkIGZpbmFs
aXplVW5jb25kaXRpb25hbGx5KFZNJik7CiAKIHByaXZhdGU6CisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgVmlzaXRvcj4KKyAgICBBTFdBWVNfSU5MSU5FIHN0YXRpYyB2b2lkIHZpc2l0T3V0cHV0Q29u
c3RyYWludHNGb3JEYXRhS2V5VmFsdWUoSlNDZWxsKiwgVmlzaXRvciYpOworCiAgICAgQUxXQVlT
X0lOTElORSBXZWFrTWFwQnVja2V0VHlwZSogZmluZEJ1Y2tldChKU09iamVjdCoga2V5KQogICAg
IHsKICAgICAgICAgcmV0dXJuIGZpbmRCdWNrZXQoa2V5LCBqc1dlYWtNYXBIYXNoKGtleSkpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0pTRG9sbGFyVk0uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9KU0RvbGxhclZNLmNwcAkocmV2aXNp
b24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0pTRG9sbGFyVk0uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
NS0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMjI0LDE0ICsyMjQsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lk
IGZpbmlzaENyZWF0aW9uKFZNJiwgUm9vdCopOwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGls
ZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQotICAgIHsKLSAgICAgICAg
RG9sbGFyVk1Bc3NlcnRTY29wZSBhc3NlcnRTY29wZTsKLSAgICAgICAgRWxlbWVudCogdGhpc09i
amVjdCA9IGpzQ2FzdDxFbGVtZW50Kj4oY2VsbCk7Ci0gICAgICAgIEFTU0VSVF9HQ19PQkpFQ1Rf
SU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKLSAgICAgICAgQmFzZTo6dmlzaXRDaGlsZHJl
bih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKLSAgICAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVj
dC0+bV9yb290KTsKLSAgICB9CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIHN0
YXRpYyBFbGVtZW50SGFuZGxlT3duZXIqIGhhbmRsZU93bmVyKCk7CiAKQEAgLTI0NywxMCArMjQw
LDIyIEBAIHByaXZhdGU6CiAgICAgV3JpdGVCYXJyaWVyPFJvb3Q+IG1fcm9vdDsKIH07CiAKK3Rl
bXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEVsZW1lbnQ6OnZpc2l0Q2hpbGRyZW5JbXBs
KEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBEb2xsYXJWTUFzc2VydFNj
b3BlIGFzc2VydFNjb3BlOworICAgIEVsZW1lbnQqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8RWxlbWVu
dCo+KGNlbGwpOworICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5m
bygpKTsKKyAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOworICAg
IHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fcm9vdCk7Cit9CisKK0RFRklORV9WSVNJVF9D
SElMRFJFTihFbGVtZW50KTsKKwogY2xhc3MgRWxlbWVudEhhbmRsZU93bmVyIGZpbmFsIDogcHVi
bGljIFdlYWtIYW5kbGVPd25lciB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJs
aWM6Ci0gICAgYm9vbCBpc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6
OlVua25vd24+IGhhbmRsZSwgdm9pZCosIFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFy
KiogcmVhc29uKSBmaW5hbAorICAgIGJvb2wgaXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlND
OjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBBYnN0cmFjdFNsb3RWaXNpdG9y
JiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKSBmaW5hbAogICAgIHsKICAgICAgICAgRG9s
bGFyVk1Bc3NlcnRTY29wZSBhc3NlcnRTY29wZTsKICAgICAgICAgaWYgKFVOTElLRUxZKHJlYXNv
bikpCkBAIC0zMDQsMTggKzMwOSwyMyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBTdHJ1Y3R1
cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5
cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCB2
aXNpdENoaWxkcmVuKEpTQ2VsbCogdGhpc09iamVjdCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCi0g
ICAgewotICAgICAgICBEb2xsYXJWTUFzc2VydFNjb3BlIGFzc2VydFNjb3BlOwotICAgICAgICBB
U1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7Ci0gICAgICAgIEJh
c2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7Ci0gICAgICAgIHZpc2l0b3Iu
YWRkT3BhcXVlUm9vdCh0aGlzT2JqZWN0KTsKLSAgICB9CisgICAgREVDTEFSRV9WSVNJVF9DSElM
RFJFTjsKIAogcHJpdmF0ZToKICAgICBXZWFrPEVsZW1lbnQ+IG1fZWxlbWVudDsKIH07CiAKK3Rl
bXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFJvb3Q6OnZpc2l0Q2hpbGRyZW5JbXBsKEpT
Q2VsbCogdGhpc09iamVjdCwgVmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBEb2xsYXJWTUFzc2Vy
dFNjb3BlIGFzc2VydFNjb3BlOworICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09i
amVjdCwgaW5mbygpKTsKKyAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0
b3IpOworICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdCh0aGlzT2JqZWN0KTsKK30KKworREVGSU5F
X1ZJU0lUX0NISUxEUkVOKFJvb3QpOworCiBjbGFzcyBTaW1wbGVPYmplY3QgOiBwdWJsaWMgSlNO
b25GaW5hbE9iamVjdCB7CiBwdWJsaWM6CiAgICAgU2ltcGxlT2JqZWN0KFZNJiB2bSwgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUpCkBAIC0zNDAsMTQgKzM1MCw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0
dXJuIHNpbXBsZU9iamVjdDsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVu
KEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCi0gICAgewotICAgICAgICBEb2xs
YXJWTUFzc2VydFNjb3BlIGFzc2VydFNjb3BlOwotICAgICAgICBTaW1wbGVPYmplY3QqIHRoaXNP
YmplY3QgPSBqc0Nhc3Q8U2ltcGxlT2JqZWN0Kj4oY2VsbCk7Ci0gICAgICAgIEFTU0VSVF9HQ19P
QkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKLSAgICAgICAgQmFzZTo6dmlzaXRD
aGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKLSAgICAgICAgdmlzaXRvci5hcHBlbmQodGhp
c09iamVjdC0+bV9oaWRkZW5WYWx1ZSk7Ci0gICAgfQorICAgIERFQ0xBUkVfVklTSVRfQ0hJTERS
RU47CiAKICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKICAgICB7CkBAIC0z
ODAsNiArMzgzLDE4IEBAIHByaXZhdGU6CiAgICAgV3JpdGVCYXJyaWVyPEpTQzo6VW5rbm93bj4g
bV9oaWRkZW5WYWx1ZTsKIH07CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFNp
bXBsZU9iamVjdDo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNp
dG9yKQoreworICAgIERvbGxhclZNQXNzZXJ0U2NvcGUgYXNzZXJ0U2NvcGU7CisgICAgU2ltcGxl
T2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PFNpbXBsZU9iamVjdCo+KGNlbGwpOworICAgIEFT
U0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKKyAgICBCYXNlOjp2
aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOworICAgIHZpc2l0b3IuYXBwZW5kKHRo
aXNPYmplY3QtPm1faGlkZGVuVmFsdWUpOworfQorCitERUZJTkVfVklTSVRfQ0hJTERSRU4oU2lt
cGxlT2JqZWN0KTsKKwogY2xhc3MgSW1wdXJlR2V0dGVyIDogcHVibGljIEpTTm9uRmluYWxPYmpl
Y3QgewogcHVibGljOgogICAgIEltcHVyZUdldHRlcihWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0
dXJlKQpAQCAtNDM2LDE0ICs0NTEsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBCYXNlOjpn
ZXRPd25Qcm9wZXJ0eVNsb3Qob2JqZWN0LCBnbG9iYWxPYmplY3QsIG5hbWUsIHNsb3QpOwogICAg
IH0KIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90Vmlz
aXRvciYgdmlzaXRvcikKLSAgICB7Ci0gICAgICAgIERvbGxhclZNQXNzZXJ0U2NvcGUgYXNzZXJ0
U2NvcGU7Ci0gICAgICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2VsbCwgaW5mbygpKTsK
LSAgICAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbihjZWxsLCB2aXNpdG9yKTsKLSAgICAgICAgSW1w
dXJlR2V0dGVyKiB0aGlzT2JqZWN0ID0ganNDYXN0PEltcHVyZUdldHRlcio+KGNlbGwpOwotICAg
ICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2RlbGVnYXRlKTsKLSAgICB9CisgICAg
REVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIHZvaWQgc2V0RGVsZWdhdGUoVk0mIHZtLCBK
U09iamVjdCogZGVsZWdhdGUpCiAgICAgewpAQCAtNDU0LDYgKzQ2MiwxOCBAQCBwcml2YXRlOgog
ICAgIFdyaXRlQmFycmllcjxKU09iamVjdD4gbV9kZWxlZ2F0ZTsKIH07CiAKK3RlbXBsYXRlPHR5
cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEltcHVyZUdldHRlcjo6dmlzaXRDaGlsZHJlbkltcGwoSlND
ZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIERvbGxhclZNQXNzZXJ0U2NvcGUg
YXNzZXJ0U2NvcGU7CisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjZWxsLCBpbmZvKCkp
OworICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4oY2VsbCwgdmlzaXRvcik7CisgICAgSW1wdXJlR2V0
dGVyKiB0aGlzT2JqZWN0ID0ganNDYXN0PEltcHVyZUdldHRlcio+KGNlbGwpOworICAgIHZpc2l0
b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fZGVsZWdhdGUpOworfQorCitERUZJTkVfVklTSVRfQ0hJ
TERSRU4oSW1wdXJlR2V0dGVyKTsKKwogc3RhdGljIEpTQ19ERUNMQVJFX0NVU1RPTV9HRVRURVIo
Y3VzdG9tR2V0dGVyVmFsdWVHZXR0ZXIpOwogc3RhdGljIEpTQ19ERUNMQVJFX0NVU1RPTV9HRVRU
RVIoY3VzdG9tR2V0dGVyQWNlc3NvckdldHRlcik7CiAKQEAgLTE4MjIsMTQgKzE4NDIsNyBAQCBw
dWJsaWM6CiAgICAgICAgIHB1dERpcmVjdE5hdGl2ZUZ1bmN0aW9uKHZtLCBnbG9iYWxPYmplY3Qs
IElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJhZGRCeXRlcyIpLCAwLCBmdW5jdGlvbldhc21T
dHJlYW1pbmdDb21waWxlckFkZEJ5dGVzLCBOb0ludHJpbnNpYywgc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSkpOwogICAgIH0KIAotICAgIHN0YXRpYyB2
b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKLSAg
ICB7Ci0gICAgICAgIERvbGxhclZNQXNzZXJ0U2NvcGUgYXNzZXJ0U2NvcGU7Ci0gICAgICAgIGF1
dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8V2FzbVN0cmVhbWluZ0NvbXBpbGVyKj4oY2VsbCk7Ci0g
ICAgICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKLSAg
ICAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKLSAgICAgICAg
dmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9wcm9taXNlKTsKLSAgICB9CisgICAgREVDTEFS
RV9WSVNJVF9DSElMRFJFTjsKIAogICAgIERFQ0xBUkVfSU5GTzsKIApAQCAtMTgzNyw2ICsxODUw
LDE4IEBAIHB1YmxpYzoKICAgICBSZWY8V2FzbTo6U3RyZWFtaW5nQ29tcGlsZXI+IG1fc3RyZWFt
aW5nQ29tcGlsZXI7CiB9OwogCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBXYXNt
U3RyZWFtaW5nQ29tcGlsZXI6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRv
ciYgdmlzaXRvcikKK3sKKyAgICBEb2xsYXJWTUFzc2VydFNjb3BlIGFzc2VydFNjb3BlOworICAg
IGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8V2FzbVN0cmVhbWluZ0NvbXBpbGVyKj4oY2VsbCk7
CisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOworICAg
IEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CisgICAgdmlzaXRvci5h
cHBlbmQodGhpc09iamVjdC0+bV9wcm9taXNlKTsKK30KKworREVGSU5FX1ZJU0lUX0NISUxEUkVO
KFdhc21TdHJlYW1pbmdDb21waWxlcik7CisKIGNvbnN0IENsYXNzSW5mbyBXYXNtU3RyZWFtaW5n
Q29tcGlsZXI6OnNfaW5mbyA9IHsgIldhc21TdHJlYW1pbmdDb21waWxlciIsICZCYXNlOjpzX2lu
Zm8sIG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoV2FzbVN0cmVhbWluZ0Nv
bXBpbGVyKSB9OwogCiBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oZnVuY3Rpb25XYXNtU3RyZWFt
aW5nQ29tcGlsZXJBZGRCeXRlcywgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxG
cmFtZSogY2FsbEZyYW1lKSkKQEAgLTM2OTksMTMgKzM3MjQsMTYgQEAgdm9pZCBKU0RvbGxhclZN
OjphZGRDb25zdHJ1Y3RpYmxlRnVuY3RpbwogICAgIHB1dERpcmVjdCh2bSwgaWRlbnRpZmllciwg
SlNGdW5jdGlvbjo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIGFyZ3VtZW50cywgaWRlbnRpZmll
ci5zdHJpbmcoKSwgZnVuY3Rpb24sIE5vSW50cmluc2ljLCBmdW5jdGlvbiksIGpzRG9sbGFyVk1Q
cm9wZXJ0eUF0dHJpYnV0ZXMpOwogfQogCi12b2lkIEpTRG9sbGFyVk06OnZpc2l0Q2hpbGRyZW4o
SlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZp
c2l0b3I+Cit2b2lkIEpTRG9sbGFyVk06OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwg
VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU0RvbGxhclZNKiB0aGlzT2JqZWN0ID0ganNDYXN0
PEpTRG9sbGFyVk0qPihjZWxsKTsKICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3Qs
IHZpc2l0b3IpOwogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fb2JqZWN0RG9pbmdT
aWRlRWZmZWN0UHV0V2l0aG91dENvcnJlY3RTbG90U3RhdHVzU3RydWN0dXJlKTsKIH0KIAorREVG
SU5FX1ZJU0lUX0NISUxEUkVOKEpTRG9sbGFyVk0pOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAog
SUdOT1JFX1dBUk5JTkdTX0VORApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0pT
RG9sbGFyVk0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvSlNE
b2xsYXJWTS5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9v
bHMvSlNEb2xsYXJWTS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxNS0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNzQsNyArNzQsNyBAQCBwcml2YXRl
OgogICAgIHZvaWQgYWRkRnVuY3Rpb24oVk0mLCBKU0dsb2JhbE9iamVjdCosIGNvbnN0IGNoYXIq
IG5hbWUsIE5hdGl2ZUZ1bmN0aW9uLCB1bnNpZ25lZCBhcmd1bWVudHMpOwogICAgIHZvaWQgYWRk
Q29uc3RydWN0aWJsZUZ1bmN0aW9uKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBjb25zdCBjaGFyKiBu
YW1lLCBOYXRpdmVGdW5jdGlvbiwgdW5zaWduZWQgYXJndW1lbnRzKTsKIAotICAgIHN0YXRpYyB2
b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJ
U0lUX0NISUxEUkVOOwogCiAgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gbV9vYmplY3REb2lu
Z1NpZGVFZmZlY3RQdXRXaXRob3V0Q29ycmVjdFNsb3RTdGF0dXNTdHJ1Y3R1cmU7CiB9OwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUdsb2JhbC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUdsb2JhbC5jcHAJKHJldmlzaW9uIDI3
MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21HbG9iYWwuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTEwMyw3ICsxMDMsOCBAQCB2b2lkIEdsb2JhbDo6c2V0KEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPCiAgICAgfQogfQogCi12b2lkIEdsb2JhbDo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZp
c2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBHbG9iYWw6
OnZpc2l0QWdncmVnYXRlSW1wbChWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHN3aXRjaCAobV90
eXBlKSB7CiAgICAgY2FzZSBXYXNtOjpUeXBlOjpFeHRlcm5yZWY6CkBAIC0xMTcsNiArMTE4LDgg
QEAgdm9pZCBHbG9iYWw6OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJgogICAgIH0KIH0KIAor
REVGSU5FX1ZJU0lUX0FHR1JFR0FURShHbG9iYWwpOworCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
R2xvYmFsCiAKICNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtR2xvYmFsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbUdsb2JhbC5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtR2xvYmFsLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMTggQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01Nyw3
ICs1Nyw4IEBAIHB1YmxpYzoKICAgICBKU1ZhbHVlIGdldChKU0dsb2JhbE9iamVjdCopIGNvbnN0
OwogICAgIHVpbnQ2NF90IGdldFByaW1pdGl2ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWUubV9w
cmltaXRpdmU7IH0KICAgICB2b2lkIHNldChKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUpOwotICAg
IHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImKTsKKy8vICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFZpc2l0b3I+IHZvaWQgdmlzaXRBZ2dyZWdhdGUoVmlzaXRvciYpOworICAgIERFQ0xBUkVf
VklTSVRfQUdHUkVHQVRFOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gVCogb3duZXIoKSBj
b25zdCB7IHJldHVybiByZWludGVycHJldF9jYXN0PFQqPihtX293bmVyKTsgfQogICAgIHZvaWQg
c2V0T3duZXIoSlNPYmplY3QqIG93bmVyKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbVRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtVGFibGUuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtVGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxNy0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTY2LDcgKzE2Niw4IEBA
IEpTVmFsdWUgVGFibGU6OmdldCh1aW50MzJfdCBpbmRleCkgY29uc3QKICAgICByZXR1cm4gbV9q
c1ZhbHVlcy5nZXQoKVtpbmRleCAmIG1fbWFza10uZ2V0KCk7CiB9CiAKLXZvaWQgVGFibGU6OnZp
c2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlz
aXRvcj4KK3ZvaWQgVGFibGU6OnZpc2l0QWdncmVnYXRlSW1wbChWaXNpdG9yJiB2aXNpdG9yKQog
ewogICAgIFJFTEVBU0VfQVNTRVJUKG1fb3duZXIpOwogICAgIGF1dG8gbG9ja2VyID0gaG9sZExv
Y2sobV9vd25lci0+Y2VsbExvY2soKSk7CkBAIC0xNzQsNiArMTc1LDggQEAgdm9pZCBUYWJsZTo6
dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImIAogICAgICAgICB2aXNpdG9yLmFwcGVuZChtX2pz
VmFsdWVzLmdldCgpW2ldKTsKIH0KIAorREVGSU5FX1ZJU0lUX0FHR1JFR0FURShUYWJsZSk7CisK
IFR5cGUgVGFibGU6Ondhc21UeXBlKCkgY29uc3QKIHsKICAgICBpZiAoaXNFeHRlcm5yZWZUYWJs
ZSgpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRhYmxlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRhYmxlLmgJKHJldmlzaW9u
IDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UYWJsZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNy0yMDE4
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0y
MDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtODAsNyArODAsNyBAQCBwdWJsaWM6CiAgICAgT3B0aW9uYWw8dWludDMy
X3Q+IGdyb3codWludDMyX3QgZGVsdGEsIEpTVmFsdWUgZGVmYXVsdFZhbHVlKTsKICAgICB2b2lk
IGNvcHkoY29uc3QgVGFibGUqIHNyY1RhYmxlLCB1aW50MzJfdCBkc3RJbmRleCwgdWludDMyX3Qg
c3JjSW5kZXgpOwogCi0gICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYpOworICAg
IERFQ0xBUkVfVklTSVRfQUdHUkVHQVRFOwogCiBwcm90ZWN0ZWQ6CiAgICAgVGFibGUodWludDMy
X3QgaW5pdGlhbCwgT3B0aW9uYWw8dWludDMyX3Q+IG1heGltdW0sIFRhYmxlRWxlbWVudFR5cGUg
PSBUYWJsZUVsZW1lbnRUeXBlOjpFeHRlcm5yZWYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvSlNUb1dhc21JQ0NhbGxlZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvSlNUb1dhc21JQ0NhbGxlZS5jcHAJKHJldmlzaW9uIDI3Mjgz
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTVG9XYXNtSUNDYWxsZWUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
OSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkt
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTQ5LDcgKzQ5LDggQEAgU3RydWN0dXJlKiBKU1RvV2FzbUlDQ2FsbGVl
OjpjcmVhdGVTdHJ1YwogICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2Jq
ZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKEpTQ2FsbGVlVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBp
bmZvKCkpOwogfQogCi12b2lkIEpTVG9XYXNtSUNDYWxsZWU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+
Cit2b2lkIEpTVG9XYXNtSUNDYWxsZWU6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwg
VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU1RvV2FzbUlDQ2FsbGVlKiB0aGlzT2JqZWN0ID0g
anNDYXN0PEpTVG9XYXNtSUNDYWxsZWUqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lO
SEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC01OCw2ICs1OSw4IEBAIHZvaWQgSlNUb1dh
c21JQ0NhbGxlZTo6dmlzaXRDaGlsZHJlbihKU0MKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2Jq
ZWN0LT5tX2Z1bmN0aW9uKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTVG9XYXNtSUND
YWxsZWUpOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NF
TUJMWSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTVG9XYXNtSUNDYWxs
ZWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1RvV2Fz
bUlDQ2FsbGVlLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL2pzL0pTVG9XYXNtSUNDYWxsZWUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE5LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01Niw3ICs1Niw3IEBAIHBy
aXZhdGU6CiAgICAgSlNUb1dhc21JQ0NhbGxlZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlKQogICAgICAgICA6IEJhc2Uodm0sIGdsb2Jh
bE9iamVjdCwgc3RydWN0dXJlKQogICAgIHsgfQotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwog
CiAgICAgV3JpdGVCYXJyaWVyPFdlYkFzc2VtYmx5RnVuY3Rpb24+IG1fZnVuY3Rpb247CiB9OwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9j
ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJB
c3NlbWJseUNvZGVCbG9jay5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNy0yMDE4IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIxIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtODIsNyArODIsOCBAQCB2b2lkIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6OmNsZWFySlND
YWxsCiAgICAgICAgICgqaXRlciktPnVubGluayh2bSk7CiB9CiAKLXZvaWQgSlNXZWJBc3NlbWJs
eUNvZGVCbG9jazo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNp
dG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNXZWJBc3NlbWJseUNvZGVC
bG9jazo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQog
ewogICAgIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2sqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNXZWJB
c3NlbWJseUNvZGVCbG9jayo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMo
dGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTkwLDYgKzkxLDggQEAgdm9pZCBKU1dlYkFzc2VtYmx5
Q29kZUJsb2NrOjp2aXNpdENoaWxkcgogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVj
dCwgdmlzaXRvcik7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU1dlYkFzc2VtYmx5Q29k
ZUJsb2NrKTsKKwogdm9pZCBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrOjpmaW5hbGl6ZVVuY29uZGl0
aW9uYWxseShWTSYgdm0pCiB7CiAgICAgZm9yIChhdXRvIGl0ZXIgPSBtX2NhbGxMaW5rSW5mb3Mu
YmVnaW4oKTsgISFpdGVyOyArK2l0ZXIpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9jay5oCShyZXZpc2lvbiAyNzI4
MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJs
b2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDE3LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC04Niw3ICs4Niw3IEBAIHByaXZhdGU6CiAgICAgREVD
TEFSRV9FWFBPUlRfSU5GTzsKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNEZXN0cnVj
dGlvbiA9IHRydWU7CiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKLSAgICBzdGF0
aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFS
RV9WSVNJVF9DSElMRFJFTjsKIAogICAgIFJlZjxXYXNtOjpDb2RlQmxvY2s+IG1fY29kZUJsb2Nr
OwogICAgIFZlY3RvcjxNYWNyb0Fzc2VtYmxlckNvZGVSZWY8V2FzbUVudHJ5UHRyVGFnPj4gbV93
YXNtVG9KU0V4aXRTdHViczsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pT
V2ViQXNzZW1ibHlHbG9iYWwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlHbG9iYWwuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5R2xvYmFsLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE5LTIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC03MSw3ICs3MSw4IEBAIHZvaWQgSlNXZWJBc3NlbWJseUdsb2JhbDo6ZGVzdHJv
eShKU0NlbGwKICAgICBzdGF0aWNfY2FzdDxKU1dlYkFzc2VtYmx5R2xvYmFsKj4oY2VsbCktPkpT
V2ViQXNzZW1ibHlHbG9iYWw6On5KU1dlYkFzc2VtYmx5R2xvYmFsKCk7CiB9CiAKLXZvaWQgSlNX
ZWJBc3NlbWJseUdsb2JhbDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9y
JiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNXZWJBc3NlbWJs
eUdsb2JhbDo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9y
KQogewogICAgIEpTV2ViQXNzZW1ibHlHbG9iYWwqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNXZWJB
c3NlbWJseUdsb2JhbCo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhp
c09iamVjdCwgaW5mbygpKTsKQEAgLTgwLDYgKzgxLDggQEAgdm9pZCBKU1dlYkFzc2VtYmx5R2xv
YmFsOjp2aXNpdENoaWxkcmVuKAogICAgIHRoaXNPYmplY3QtPmdsb2JhbCgpLT52aXNpdEFnZ3Jl
Z2F0ZSh2aXNpdG9yKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTV2ViQXNzZW1ibHlH
bG9iYWwpOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NF
TUJMWSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlH
bG9iYWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dl
YkFzc2VtYmx5R2xvYmFsLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlHbG9iYWwuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE5LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01OSw3ICs1
OSw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgSlNXZWJBc3NlbWJseUdsb2JhbChWTSYsIFN0
cnVjdHVyZSosIFJlZjxXYXNtOjpHbG9iYWw+JiYpOwogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24o
Vk0mKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9y
Jik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIFJlZjxXYXNtOjpHbG9iYWw+
IG1fZ2xvYmFsOwogfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2Vi
QXNzZW1ibHlJbnN0YW5jZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYt
MjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTczLDcgKzczLDggQEAgdm9pZCBKU1dlYkFzc2VtYmx5SW5zdGFu
Y2U6OmRlc3Ryb3koSlNDZQogICAgIHN0YXRpY19jYXN0PEpTV2ViQXNzZW1ibHlJbnN0YW5jZSo+
KGNlbGwpLT5KU1dlYkFzc2VtYmx5SW5zdGFuY2U6On5KU1dlYkFzc2VtYmx5SW5zdGFuY2UoKTsK
IH0KIAotdm9pZCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBj
ZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2
b2lkIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxs
LCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNX
ZWJBc3NlbWJseUluc3RhbmNlKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklU
Uyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtMTAyLDYgKzEwMyw4IEBAIHZvaWQgSlNXZWJBc3Nl
bWJseUluc3RhbmNlOjp2aXNpdENoaWxkcmUKICAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJp
ZXJlZCh3cmFwcGVyLmdldCgpKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTV2ViQXNz
ZW1ibHlJbnN0YW5jZSk7CisKIHZvaWQgSlNXZWJBc3NlbWJseUluc3RhbmNlOjpmaW5hbGl6ZUNy
ZWF0aW9uKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmPFdhc206OkNv
ZGVCbG9jaz4mJiB3YXNtQ29kZUJsb2NrLCBKU09iamVjdCogaW1wb3J0T2JqZWN0LCBXYXNtOjpD
cmVhdGlvbk1vZGUgY3JlYXRpb25Nb2RlKQogewogICAgIG1faW5zdGFuY2UtPmZpbmFsaXplQ3Jl
YXRpb24odGhpcywgd2FzbUNvZGVCbG9jay5jb3B5UmVmKCkpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmgJKHJl
dmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNz
ZW1ibHlJbnN0YW5jZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxNi0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTA1LDcgKzEwNSw3IEBAIHB1Ymxp
YzoKIHByaXZhdGU6CiAgICAgSlNXZWJBc3NlbWJseUluc3RhbmNlKFZNJiwgU3RydWN0dXJlKiwg
UmVmPFdhc206Okluc3RhbmNlPiYmKTsKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgSlNX
ZWJBc3NlbWJseU1vZHVsZSosIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkKik7Ci0gICAgc3RhdGlj
IHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVf
VklTSVRfQ0hJTERSRU47CiAKICAgICBSZWY8V2FzbTo6SW5zdGFuY2U+IG1faW5zdGFuY2U7CiAg
ICAgVk0qIG1fdm07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFz
c2VtYmx5TWVtb3J5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9KU1dlYkFzc2VtYmx5TWVtb3J5LmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1lbW9yeS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0xNTksNyArMTU5LDggQEAgdm9pZCBKU1dlYkFzc2VtYmx5TWVtb3J5OjpkZXN0
cm95KEpTQ2VsbAogICAgIG1lbW9yeS0+SlNXZWJBc3NlbWJseU1lbW9yeTo6fkpTV2ViQXNzZW1i
bHlNZW1vcnkoKTsKIH0KIAotdm9pZCBKU1dlYkFzc2VtYmx5TWVtb3J5Ojp2aXNpdENoaWxkcmVu
KEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPgordm9pZCBKU1dlYkFzc2VtYmx5TWVtb3J5Ojp2aXNpdENoaWxkcmVuSW1wbChKU0Nl
bGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpz
Q2FzdDxKU1dlYkFzc2VtYmx5TWVtb3J5Kj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9J
TkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtMTY5LDYgKzE3MCw4IEBAIHZvaWQgSlNX
ZWJBc3NlbWJseU1lbW9yeTo6dmlzaXRDaGlsZHJlbigKICAgICB2aXNpdG9yLnJlcG9ydEV4dHJh
TWVtb3J5VmlzaXRlZCh0aGlzT2JqZWN0LT5tZW1vcnkoKS5zaXplKCkpOwogfQogCitERUZJTkVf
VklTSVRfQ0hJTERSRU4oSlNXZWJBc3NlbWJseU1lbW9yeSk7CisKIH0gLy8gbmFtZXNwYWNlIEpT
QwogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1lbW9yeS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNZW1vcnkuaAkocmV2aXNpb24g
MjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1l
bW9yeS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxNi0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjMsNyArNjMsNyBAQCBwdWJsaWM6CiBwcml2YXRl
OgogICAgIEpTV2ViQXNzZW1ibHlNZW1vcnkoVk0mLCBTdHJ1Y3R1cmUqKTsKICAgICB2b2lkIGZp
bmlzaENyZWF0aW9uKFZNJik7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwq
LCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBSZWY8
V2FzbTo6TWVtb3J5PiBtX21lbW9yeTsKICAgICBXcml0ZUJhcnJpZXI8SlNBcnJheUJ1ZmZlcj4g
bV9idWZmZXJXcmFwcGVyOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNX
ZWJBc3NlbWJseU1vZHVsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0y
MDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMTI0LDcgKzEyNCw4IEBAIHZvaWQgSlNXZWJBc3NlbWJseU1vZHVsZTo6
c2V0Q29kZUJsb2NrKFYKICAgICBtX2NvZGVCbG9ja3Nbc3RhdGljX2Nhc3Q8c2l6ZV90Pihtb2Rl
KV0uc2V0KHZtLCB0aGlzLCBjb2RlQmxvY2spOwogfQogCi12b2lkIEpTV2ViQXNzZW1ibHlNb2R1
bGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3Rl
bXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTV2ViQXNzZW1ibHlNb2R1bGU6OnZpc2l0
Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU1dl
YkFzc2VtYmx5TW9kdWxlKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTV2ViQXNzZW1ibHlNb2R1bGUq
PihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8o
KSk7CkBAIC0xMzUsNiArMTM2LDggQEAgdm9pZCBKU1dlYkFzc2VtYmx5TW9kdWxlOjp2aXNpdENo
aWxkcmVuKAogICAgICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2NvZGVCbG9ja3Nb
aV0pOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNXZWJBc3NlbWJseU1vZHVsZSk7CisK
IH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlN
b2R1bGUuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
anMvSlNXZWJBc3NlbWJseU1vZHVsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODAsNyArODAsNyBA
QCBwcml2YXRlOgogCiAgICAgSlNXZWJBc3NlbWJseU1vZHVsZShWTSYsIFN0cnVjdHVyZSosIFJl
ZjxXYXNtOjpNb2R1bGU+JiYpOwogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKLSAgICBz
dGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVD
TEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIFJlZjxXYXNtOjpNb2R1bGU+IG1fbW9kdWxlOwog
ICAgIFdyaXRlQmFycmllcjxTeW1ib2xUYWJsZT4gbV9leHBvcnRTeW1ib2xUYWJsZTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlUYWJsZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseVRh
YmxlLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
anMvSlNXZWJBc3NlbWJseVRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTcyLDcgKzcyLDgg
QEAgdm9pZCBKU1dlYkFzc2VtYmx5VGFibGU6OmRlc3Ryb3koSlNDZWxsKgogICAgIHN0YXRpY19j
YXN0PEpTV2ViQXNzZW1ibHlUYWJsZSo+KGNlbGwpLT5KU1dlYkFzc2VtYmx5VGFibGU6On5KU1dl
YkFzc2VtYmx5VGFibGUoKTsKIH0KIAotdm9pZCBKU1dlYkFzc2VtYmx5VGFibGU6OnZpc2l0Q2hp
bGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVu
YW1lIFZpc2l0b3I+Cit2b2lkIEpTV2ViQXNzZW1ibHlUYWJsZTo6dmlzaXRDaGlsZHJlbkltcGwo
SlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTV2ViQXNzZW1ibHlUYWJs
ZSogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1dlYkFzc2VtYmx5VGFibGUqPihjZWxsKTsKICAgICBB
U1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC04MSw2ICs4
Miw4IEBAIHZvaWQgSlNXZWJBc3NlbWJseVRhYmxlOjp2aXNpdENoaWxkcmVuKEoKICAgICB0aGlz
T2JqZWN0LT50YWJsZSgpLT52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKIH0KIAorREVGSU5FX1ZJ
U0lUX0NISUxEUkVOKEpTV2ViQXNzZW1ibHlUYWJsZSk7CisKIGJvb2wgSlNXZWJBc3NlbWJseVRh
YmxlOjpncm93KHVpbnQzMl90IGRlbHRhLCBKU1ZhbHVlIGRlZmF1bHRWYWx1ZSkKIHsKICAgICBp
ZiAoZGVsdGEgPT0gMCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2Vi
QXNzZW1ibHlUYWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL0pTV2ViQXNzZW1ibHlUYWJsZS5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5VGFibGUuaAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxOSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTcwLDcgKzcwLDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBKU1dlYkFzc2VtYmx5VGFi
bGUoVk0mLCBTdHJ1Y3R1cmUqLCBSZWY8V2FzbTo6VGFibGU+JiYpOwogICAgIHZvaWQgZmluaXNo
Q3JlYXRpb24oVk0mKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNs
b3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIFJlZjxXYXNt
OjpUYWJsZT4gbV90YWJsZTsKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9XZWJBc3NlbWJseUZ1bmN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmNwcAkocmV2aXNpb24gMjcyODMwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2
LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC00NTIsNyArNDUyLDggQEAgV2ViQXNzZW1ibHlGdW5jdGlvbjo6
V2ViQXNzZW1ibHlGdW5jdGlvbgogICAgICwgbV9pbXBvcnRhYmxlRnVuY3Rpb24geyBzaWduYXR1
cmVJbmRleCwgd2FzbVRvV2FzbUVudHJ5cG9pbnRMb2FkTG9jYXRpb24gfQogeyB9CiAKLXZvaWQg
V2ViQXNzZW1ibHlGdW5jdGlvbjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNp
dG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgV2ViQXNzZW1i
bHlGdW5jdGlvbjo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNp
dG9yKQogewogICAgIFdlYkFzc2VtYmx5RnVuY3Rpb24qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8V2Vi
QXNzZW1ibHlGdW5jdGlvbio+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMo
dGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTQ2MSw2ICs0NjIsOCBAQCB2b2lkIFdlYkFzc2VtYmx5
RnVuY3Rpb246OnZpc2l0Q2hpbGRyZW4oCiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+
bV9qc1RvV2FzbUlDQ2FsbGVlKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKFdlYkFzc2Vt
Ymx5RnVuY3Rpb24pOworCiB2b2lkIFdlYkFzc2VtYmx5RnVuY3Rpb246OmRlc3Ryb3koSlNDZWxs
KiBjZWxsKQogewogICAgIHN0YXRpY19jYXN0PFdlYkFzc2VtYmx5RnVuY3Rpb24qPihjZWxsKS0+
V2ViQXNzZW1ibHlGdW5jdGlvbjo6fldlYkFzc2VtYmx5RnVuY3Rpb24oKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmgJ
KHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFz
c2VtYmx5RnVuY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTYtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTg2LDcgKzg2LDcgQEAgcHVibGlj
OgogICAgIFdhc206Okluc3RhbmNlKiBwcmV2aW91c0luc3RhbmNlKENhbGxGcmFtZSopOwogCiBw
cml2YXRlOgotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0
b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogICAgIFdlYkFzc2VtYmx5RnVuY3Rp
b24oVk0mLCBOYXRpdmVFeGVjdXRhYmxlKiwgSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqLCBX
YXNtOjpDYWxsZWUmIGpzRW50cnlwb2ludCwgV2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbjo6
TG9hZExvY2F0aW9uIGVudHJ5cG9pbnRMb2FkTG9jYXRpb24sIFdhc206OlNpZ25hdHVyZUluZGV4
KTsKIAogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBqc0NhbGxFbnRy
eXBvaW50U2xvdygpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNz
ZW1ibHlGdW5jdGlvbkJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb25CYXNlLmNwcAkocmV2aXNpb24gMjcyODMwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbkJhc2Uu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTQxLDcgKzQxLDggQEAgV2ViQXNzZW1ibHlGdW5jdGlvbkJhc2U6
OldlYkFzc2VtYmx5RnVuYwogICAgIDogQmFzZSh2bSwgZXhlY3V0YWJsZSwgZ2xvYmFsT2JqZWN0
LCBzdHJ1Y3R1cmUpCiB7IH0KIAotdm9pZCBXZWJBc3NlbWJseUZ1bmN0aW9uQmFzZTo6dmlzaXRD
aGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlw
ZW5hbWUgVmlzaXRvcj4KK3ZvaWQgV2ViQXNzZW1ibHlGdW5jdGlvbkJhc2U6OnZpc2l0Q2hpbGRy
ZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBXZWJBc3NlbWJs
eUZ1bmN0aW9uQmFzZSogdGhpc09iamVjdCA9IGpzQ2FzdDxXZWJBc3NlbWJseUZ1bmN0aW9uQmFz
ZSo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5m
bygpKTsKQEAgLTQ5LDYgKzUwLDggQEAgdm9pZCBXZWJBc3NlbWJseUZ1bmN0aW9uQmFzZTo6dmlz
aXRDaGlsZAogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1faW5zdGFuY2UpOwogfQog
CitERUZJTkVfVklTSVRfQ0hJTERSRU4oV2ViQXNzZW1ibHlGdW5jdGlvbkJhc2UpOworCiB2b2lk
IFdlYkFzc2VtYmx5RnVuY3Rpb25CYXNlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIE5hdGl2ZUV4
ZWN1dGFibGUqIGV4ZWN1dGFibGUsIHVuc2lnbmVkIGxlbmd0aCwgY29uc3QgU3RyaW5nJiBuYW1l
LCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGluc3RhbmNlKQogewogICAgIEJhc2U6OmZpbmlzaENy
ZWF0aW9uKHZtLCBleGVjdXRhYmxlLCBsZW5ndGgsIG5hbWUpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbkJhc2UuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uQmFzZS5o
CShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJB
c3NlbWJseUZ1bmN0aW9uQmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxNy0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDYsNyArNDYsNyBAQCBw
dWJsaWM6CiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkluc3RhbmNlKCkgeyByZXR1cm4g
T0JKRUNUX09GRlNFVE9GKFdlYkFzc2VtYmx5RnVuY3Rpb25CYXNlLCBtX2luc3RhbmNlKTsgfQog
CiBwcm90ZWN0ZWQ6Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90
VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAgICAgdm9pZCBmaW5pc2hD
cmVhdGlvbihWTSYsIE5hdGl2ZUV4ZWN1dGFibGUqLCB1bnNpZ25lZCBsZW5ndGgsIGNvbnN0IFN0
cmluZyYgbmFtZSwgSlNXZWJBc3NlbWJseUluc3RhbmNlKik7CiAgICAgV2ViQXNzZW1ibHlGdW5j
dGlvbkJhc2UoVk0mLCBOYXRpdmVFeGVjdXRhYmxlKiwgSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1
cmUqKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlN
b2R1bGVSZWNvcmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNi0y
MDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
Ni0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtNzgsNyArNzgsOCBAQCB2b2lkIFdlYkFzc2VtYmx5TW9kdWxlUmVj
b3JkOjpmaW5pc2hDcmVhCiAgICAgfQogfQogCi12b2lkIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3Jk
Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1w
bGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6dmlz
aXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFdl
YkFzc2VtYmx5TW9kdWxlUmVjb3JkKiB0aGlzT2JqZWN0ID0ganNDYXN0PFdlYkFzc2VtYmx5TW9k
dWxlUmVjb3JkKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2Jq
ZWN0LCBpbmZvKCkpOwpAQCAtODgsNiArODksOCBAQCB2b2lkIFdlYkFzc2VtYmx5TW9kdWxlUmVj
b3JkOjp2aXNpdENoaWxkCiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9leHBvcnRz
T2JqZWN0KTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKFdlYkFzc2VtYmx5TW9kdWxlUmVj
b3JkKTsKKwogdm9pZCBXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6cHJlcGFyZUxpbmsoVk0mIHZt
LCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGluc3RhbmNlKQogewogICAgIFJFTEVBU0VfQVNTRVJU
KCFtX2luc3RhbmNlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFz
c2VtYmx5TW9kdWxlUmVjb3JkLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuaAkocmV2aXNpb24gMjcyODMwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYt
MjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTY5LDcgKzY5LDcgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgZmlu
aXNoQ3JlYXRpb24oSlNHbG9iYWxPYmplY3QqLCBWTSYsIGNvbnN0IFdhc206Ok1vZHVsZUluZm9y
bWF0aW9uJik7CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RW
aXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIFdyaXRlQmFycmll
cjxKU1dlYkFzc2VtYmx5SW5zdGFuY2U+IG1faW5zdGFuY2U7CiAgICAgV3JpdGVCYXJyaWVyPEpT
T2JqZWN0PiBtX3N0YXJ0RnVuY3Rpb247CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9XZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uY3BwCShy
ZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3Nl
bWJseVdyYXBwZXJGdW5jdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02Nyw3ICs2Nyw4IEBA
IFN0cnVjdHVyZSogV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb246OmMKICAgICByZXR1cm4gU3Ry
dWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhKU0Z1
bmN0aW9uVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwogfQogCi12b2lkIFdlYkFzc2Vt
Ymx5V3JhcHBlckZ1bmN0aW9uOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0
b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBXZWJBc3NlbWJs
eVdyYXBwZXJGdW5jdGlvbjo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9y
JiB2aXNpdG9yKQogewogICAgIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uKiB0aGlzT2JqZWN0
ID0ganNDYXN0PFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uKj4oY2VsbCk7CiAgICAgQVNTRVJU
X0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNzYsNiArNzcsOCBA
QCB2b2lkIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uOjp2aXNpdENoCiAgICAgdmlzaXRvci5h
cHBlbmQodGhpc09iamVjdC0+bV9mdW5jdGlvbik7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJF
TihXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbik7CisKIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElP
TihjYWxsV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24sIChKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2Jq
ZWN0LT52bSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1i
bHlXcmFwcGVyRnVuY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9qcy9XZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5oCShyZXZpc2lvbiAyNzI4MzApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlv
bi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxNy0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTksNyArNTksNyBAQCBwdWJsaWM6CiBwcml2YXRlOgog
ICAgIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uKFZNJiwgTmF0aXZlRXhlY3V0YWJsZSosIEpT
R2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKiwgV2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbik7
CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIE5hdGl2ZUV4ZWN1dGFibGUqLCB1bnNpZ25l
ZCBsZW5ndGgsIGNvbnN0IFN0cmluZyYgbmFtZSwgSlNPYmplY3QqLCBKU1dlYkFzc2VtYmx5SW5z
dGFuY2UqKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNp
dG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIFdyaXRlQmFycmllcjxK
U09iamVjdD4gbV9mdW5jdGlvbjsKICAgICAvLyBJdCdzIHNhZmUgdG8ganVzdCBob2xkIHRoZSBy
YXcgV2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbiBiZWNhdXNlIHdlIGhhdmUgYSByZWZlcmVu
Y2UKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3Jl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJP
YmplY3RTdG9yZS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03MjgsNyArNzI4
LDggQEAgdm9pZCBJREJPYmplY3RTdG9yZTo6cm9sbGJhY2tGb3JWZXJzaW9uQwogICAgIH0KIH0K
IAotdm9pZCBJREJPYmplY3RTdG9yZTo6dmlzaXRSZWZlcmVuY2VkSW5kZXhlcyhTbG90VmlzaXRv
ciYgdmlzaXRvcikgY29uc3QKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIElEQk9i
amVjdFN0b3JlOjp2aXNpdFJlZmVyZW5jZWRJbmRleGVzKFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0
CiB7CiAgICAgTG9ja2VyPExvY2s+IGxvY2tlcihtX3JlZmVyZW5jZWRJbmRleExvY2spOwogICAg
IGZvciAoYXV0byYgaW5kZXggOiBtX3JlZmVyZW5jZWRJbmRleGVzLnZhbHVlcygpKQpAQCAtNzM3
LDYgKzczOCw5IEBAIHZvaWQgSURCT2JqZWN0U3RvcmU6OnZpc2l0UmVmZXJlbmNlZEluZGUKICAg
ICAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KGluZGV4LmdldCgpKTsKIH0KIAordGVtcGxhdGUg
dm9pZCBJREJPYmplY3RTdG9yZTo6dmlzaXRSZWZlcmVuY2VkSW5kZXhlcyhBYnN0cmFjdFNsb3RW
aXNpdG9yJikgY29uc3Q7Cit0ZW1wbGF0ZSB2b2lkIElEQk9iamVjdFN0b3JlOjp2aXNpdFJlZmVy
ZW5jZWRJbmRleGVzKFNsb3RWaXNpdG9yJikgY29uc3Q7CisKIHZvaWQgSURCT2JqZWN0U3RvcmU6
OnJlbmFtZVJlZmVyZW5jZWRJbmRleChJREJJbmRleCYgaW5kZXgsIGNvbnN0IFN0cmluZyYgbmV3
TmFtZSkKIHsKICAgICBMT0coSW5kZXhlZERCLCAiSURCT2JqZWN0U3RvcmU6OnJlbmFtZVJlZmVy
ZW5jZWRJbmRleCIpOwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
T2JqZWN0U3RvcmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJPYmplY3RTdG9yZS5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEwOSw3
ICsxMDksNyBAQCBwdWJsaWM6CiAgICAgdm9pZCByZWYoKTsKICAgICB2b2lkIGRlcmVmKCk7CiAK
LSAgICB2b2lkIHZpc2l0UmVmZXJlbmNlZEluZGV4ZXMoSlNDOjpTbG90VmlzaXRvciYpIGNvbnN0
OworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgdmlzaXRSZWZlcmVuY2VkSW5k
ZXhlcyhWaXNpdG9yJikgY29uc3Q7CiAgICAgdm9pZCByZW5hbWVSZWZlcmVuY2VkSW5kZXgoSURC
SW5kZXgmLCBjb25zdCBTdHJpbmcmIG5ld05hbWUpOwogCiBwcml2YXRlOgpJbmRleDogU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb24uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmNwcAko
cmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
VHJhbnNhY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxNS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTQ1NSw3ICsxNDU1LDggQEAgdm9p
ZCBJREJUcmFuc2FjdGlvbjo6Y29ubmVjdGlvbkNsb3NlZEZybwogICAgIGZpcmVPbkFib3J0KCk7
CiB9CiAKLXZvaWQgSURCVHJhbnNhY3Rpb246OnZpc2l0UmVmZXJlbmNlZE9iamVjdFN0b3JlcyhK
U0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKSBjb25zdAordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRv
cj4KK3ZvaWQgSURCVHJhbnNhY3Rpb246OnZpc2l0UmVmZXJlbmNlZE9iamVjdFN0b3JlcyhWaXNp
dG9yJiB2aXNpdG9yKSBjb25zdAogewogICAgIExvY2tlcjxMb2NrPiBsb2NrZXIobV9yZWZlcmVu
Y2VkT2JqZWN0U3RvcmVMb2NrKTsKICAgICBmb3IgKGF1dG8mIG9iamVjdFN0b3JlIDogbV9yZWZl
cmVuY2VkT2JqZWN0U3RvcmVzLnZhbHVlcygpKQpAQCAtMTQ2NCw2ICsxNDY1LDkgQEAgdm9pZCBJ
REJUcmFuc2FjdGlvbjo6dmlzaXRSZWZlcmVuY2VkT2JqZQogICAgICAgICB2aXNpdG9yLmFkZE9w
YXF1ZVJvb3Qob2JqZWN0U3RvcmUuZ2V0KCkpOwogfQogCit0ZW1wbGF0ZSB2b2lkIElEQlRyYW5z
YWN0aW9uOjp2aXNpdFJlZmVyZW5jZWRPYmplY3RTdG9yZXMoSlNDOjpBYnN0cmFjdFNsb3RWaXNp
dG9yJikgY29uc3Q7Cit0ZW1wbGF0ZSB2b2lkIElEQlRyYW5zYWN0aW9uOjp2aXNpdFJlZmVyZW5j
ZWRPYmplY3RTdG9yZXMoSlNDOjpTbG90VmlzaXRvciYpIGNvbnN0OworCiB2b2lkIElEQlRyYW5z
YWN0aW9uOjpoYW5kbGVQZW5kaW5nT3BlcmF0aW9ucygpCiB7CiAgICAgQVNTRVJUKGNhbkN1cnJl
bnRUaHJlYWRBY2Nlc3NUaHJlYWRMb2NhbERhdGEobV9kYXRhYmFzZS0+b3JpZ2luVGhyZWFkKCkp
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9u
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJh
bnNhY3Rpb24uaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCVHJhbnNhY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xNDksNyArMTQ5LDcgQEAg
cHVibGljOgogCiAgICAgdm9pZCBjb25uZWN0aW9uQ2xvc2VkRnJvbVNlcnZlcihjb25zdCBJREJF
cnJvciYpOwogCi0gICAgdm9pZCB2aXNpdFJlZmVyZW5jZWRPYmplY3RTdG9yZXMoSlNDOjpTbG90
VmlzaXRvciYpIGNvbnN0OworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgdmlz
aXRSZWZlcmVuY2VkT2JqZWN0U3RvcmVzKFZpc2l0b3ImKSBjb25zdDsKIAogICAgIFdFQkNPUkVf
RVhQT1JUIHN0YXRpYyBzdGQ6OmF0b21pYzx1bnNpZ25lZD4gbnVtYmVyT2ZJREJUcmFuc2FjdGlv
bnM7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9CdWZmZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9C
dWZmZXIuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmF1ZGlvL0F1ZGlvQnVmZmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8q
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE1NCwxMiArMTU0LDE2IEBAIEV4
Y2VwdGlvbk9yPEpTQzo6SlNWYWx1ZT4gQXVkaW9CdWZmZXI6OmcKICAgICByZXR1cm4gY29uc3Ry
dWN0SlNBcnJheSgpOwogfQogCi12b2lkIEF1ZGlvQnVmZmVyOjp2aXNpdENoYW5uZWxXcmFwcGVy
cyhKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4K
K3ZvaWQgQXVkaW9CdWZmZXI6OnZpc2l0Q2hhbm5lbFdyYXBwZXJzKFZpc2l0b3ImIHZpc2l0b3Ip
CiB7CiAgICAgZm9yIChhdXRvJiBjaGFubmVsV3JhcHBlciA6IG1fY2hhbm5lbFdyYXBwZXJzKQog
ICAgICAgICBjaGFubmVsV3JhcHBlci52aXNpdCh2aXNpdG9yKTsKIH0KIAordGVtcGxhdGUgdm9p
ZCBBdWRpb0J1ZmZlcjo6dmlzaXRDaGFubmVsV3JhcHBlcnMoSlNDOjpBYnN0cmFjdFNsb3RWaXNp
dG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEF1ZGlvQnVmZmVyOjp2aXNpdENoYW5uZWxXcmFwcGVycyhK
U0M6OlNsb3RWaXNpdG9yJik7CisKIFJlZlB0cjxGbG9hdDMyQXJyYXk+IEF1ZGlvQnVmZmVyOjpj
aGFubmVsRGF0YSh1bnNpZ25lZCBjaGFubmVsSW5kZXgpCiB7CiAgICAgaWYgKGNoYW5uZWxJbmRl
eCA+PSBtX2NoYW5uZWxzLnNpemUoKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
YXVkaW8vQXVkaW9CdWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmF1ZGlvL0F1ZGlvQnVmZmVyLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9CdWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2
ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTc1LDcgKzc1
LDcgQEAgcHVibGljOgogCiAgICAgc2l6ZV90IG1lbW9yeUNvc3QoKSBjb25zdDsKIAotICAgIHZv
aWQgdmlzaXRDaGFubmVsV3JhcHBlcnMoSlNDOjpTbG90VmlzaXRvciYpOworICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgdmlzaXRDaGFubmVsV3JhcHBlcnMoVmlzaXRvciYpOwog
ICAgIAogcHJpdmF0ZToKICAgICBBdWRpb0J1ZmZlcih1bnNpZ25lZCBudW1iZXJPZkNoYW5uZWxz
LCBzaXplX3QgbGVuZ3RoLCBmbG9hdCBzYW1wbGVSYXRlLCBMZWdhY3lQcmV2ZW50RGV0YWNoaW5n
ID0gTGVnYWN5UHJldmVudERldGFjaGluZzo6Tm8pOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvRE9NR0NPdXRwdXRDb25zdHJhaW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9ET01HQ091dHB1dENvbnN0cmFpbnQuY3BwCShyZXZpc2lvbiAy
NzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9ET01HQ091dHB1dENvbnN0cmFp
bnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OSw3ICs0OSw4IEBAIERPTUdDT3V0cHV0Q29uc3Ry
YWludDo6fkRPTUdDT3V0cHV0Q29uc3QKIHsKIH0KIAotdm9pZCBET01HQ091dHB1dENvbnN0cmFp
bnQ6OmV4ZWN1dGVJbXBsKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUg
VmlzaXRvcj4KK3ZvaWQgRE9NR0NPdXRwdXRDb25zdHJhaW50OjpleGVjdXRlSW1wbEltcGwoVmlz
aXRvciYgdmlzaXRvcikKIHsKICAgICBIZWFwJiBoZWFwID0gbV92bS5oZWFwOwogICAgIApAQCAt
NjAsMTUgKzYxLDE5IEBAIHZvaWQgRE9NR0NPdXRwdXRDb25zdHJhaW50OjpleGVjdXRlSW1wbCgK
ICAgICAKICAgICBtX2NsaWVudERhdGEuZm9yRWFjaE91dHB1dENvbnN0cmFpbnRTcGFjZSgKICAg
ICAgICAgWyZdIChTdWJzcGFjZSYgc3Vic3BhY2UpIHsKLSAgICAgICAgICAgIGF1dG8gZnVuYyA9
IFtdIChTbG90VmlzaXRvciYgdmlzaXRvciwgSGVhcENlbGwqIGhlYXBDZWxsLCBIZWFwQ2VsbDo6
S2luZCkgeworICAgICAgICAgICAgYXV0byBmdW5jID0gW10gKFZpc2l0b3ImIHZpc2l0b3IsIEhl
YXBDZWxsKiBoZWFwQ2VsbCwgSGVhcENlbGw6OktpbmQpIHsKICAgICAgICAgICAgICAgICBTZXRS
b290TWFya1JlYXNvblNjb3BlIHJvb3RTY29wZSh2aXNpdG9yLCBSb290TWFya1JlYXNvbjo6RE9N
R0NPdXRwdXQpOwogICAgICAgICAgICAgICAgIEpTQ2VsbCogY2VsbCA9IHN0YXRpY19jYXN0PEpT
Q2VsbCo+KGhlYXBDZWxsKTsKICAgICAgICAgICAgICAgICBjZWxsLT5tZXRob2RUYWJsZSh2aXNp
dG9yLnZtKCkpLT52aXNpdE91dHB1dENvbnN0cmFpbnRzKGNlbGwsIHZpc2l0b3IpOwogICAgICAg
ICAgICAgfTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgdmlzaXRvci5hZGRQYXJhbGxlbENv
bnN0cmFpbnRUYXNrKHN1YnNwYWNlLmZvckVhY2hNYXJrZWRDZWxsSW5QYXJhbGxlbChmdW5jKSk7
CisgICAgICAgICAgICBSZWZQdHI8U2hhcmVkVGFzazx2b2lkKFZpc2l0b3ImKT4+IHRhc2sgPSBz
dWJzcGFjZS50ZW1wbGF0ZSBmb3JFYWNoTWFya2VkQ2VsbEluUGFyYWxsZWw8VmlzaXRvcj4oZnVu
Yyk7CisgICAgICAgICAgICB2aXNpdG9yLmFkZFBhcmFsbGVsQ29uc3RyYWludFRhc2sodGFzayk7
CiAgICAgICAgIH0pOwogfQogICAgICAgICAKK3ZvaWQgRE9NR0NPdXRwdXRDb25zdHJhaW50Ojpl
eGVjdXRlSW1wbChBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKSB7IGV4ZWN1dGVJbXBsSW1w
bCh2aXNpdG9yKTsgfQordm9pZCBET01HQ091dHB1dENvbnN0cmFpbnQ6OmV4ZWN1dGVJbXBsKFNs
b3RWaXNpdG9yJiB2aXNpdG9yKSB7IGV4ZWN1dGVJbXBsSW1wbCh2aXNpdG9yKTsgfQorCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0RP
TUdDT3V0cHV0Q29uc3RyYWludC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0RPTUdDT3V0cHV0Q29uc3RyYWludC5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9ET01HQ091dHB1dENvbnN0cmFpbnQuaAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAxOCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTQyLDkgKzQyLDEyIEBAIHB1YmxpYzoKICAgICB+RE9NR0NPdXRwdXRDb25zdHJh
aW50KCk7CiAgICAgCiBwcm90ZWN0ZWQ6CisgICAgdm9pZCBleGVjdXRlSW1wbChKU0M6OkFic3Ry
YWN0U2xvdFZpc2l0b3ImKSBvdmVycmlkZTsKICAgICB2b2lkIGV4ZWN1dGVJbXBsKEpTQzo6U2xv
dFZpc2l0b3ImKSBvdmVycmlkZTsKIAogcHJpdmF0ZToKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPiB2b2lkIGV4ZWN1dGVJbXBsSW1wbChWaXNpdG9yJik7CisKICAgICBKU0M6OlZNJiBt
X3ZtOwogICAgIEpTVk1DbGllbnREYXRhJiBtX2NsaWVudERhdGE7CiAgICAgdWludDY0X3QgbV9s
YXN0RXhlY3V0aW9uVmVyc2lvbjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
QWJvcnRDb250cm9sbGVyQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0Fib3J0Q29udHJvbGxlckN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjgzMCkK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQWJvcnRDb250cm9sbGVyQ3VzdG9tLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0qIENvcHlyaWdodCAoQykgMjAx
OSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqIENvcHlyaWdodCAoQykgMjAxOS0y
MDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICoKICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMjgsOSArMjgsMTIgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lk
IEpTQWJvcnRDb250cm9sbGVyOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNp
dG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNBYm9ydENv
bnRyb2xsZXI6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAg
ICAgdmlzaXRvci5hZGRPcGFxdWVSb290KCZ3cmFwcGVkKCkuc2lnbmFsKCkpOwogfQogCitERUZJ
TkVfVklTSVRfQURESVRJT05BTF9DSElMRFJFTihKU0Fib3J0Q29udHJvbGxlcik7CisKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQWJv
cnRTaWduYWxDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTQWJvcnRTaWduYWxDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Fib3J0U2lnbmFsQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0qIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisqIENvcHlyaWdodCAoQykgMjAxOS0yMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICoKICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjgs
NyArMjgsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWJvb2wgSlNBYm9ydFNpZ25hbE93
bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+
IGhhbmRsZSwgdm9pZCosIEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiBy
ZWFzb24pCitib29sIEpTQWJvcnRTaWduYWxPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9v
dHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBKU0M6OkFic3RyYWN0
U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCiB7CiAgICAgYXV0byYg
YWJvcnRTaWduYWwgPSBKU0M6OmpzQ2FzdDxKU0Fib3J0U2lnbmFsKj4oaGFuZGxlLnNsb3QoKS0+
YXNDZWxsKCkpLT53cmFwcGVkKCk7CiAgICAgaWYgKGFib3J0U2lnbmFsLmlzRmlyaW5nRXZlbnRM
aXN0ZW5lcnMoKSkgewpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNBdHRyQ3Vz
dG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0F0dHJD
dXN0b20uY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0F0dHJDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAwNywgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMzLDEwICszMywx
MyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgSlNBdHRyOjp2aXNpdEFkZGl0aW9u
YWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUg
VmlzaXRvcj4KK3ZvaWQgSlNBdHRyOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2
aXNpdG9yKQogewogICAgIGlmIChFbGVtZW50KiBlbGVtZW50ID0gd3JhcHBlZCgpLm93bmVyRWxl
bWVudCgpKQogICAgICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qocm9vdChlbGVtZW50KSk7CiB9
CiAKK0RFRklORV9WSVNJVF9BRERJVElPTkFMX0NISUxEUkVOKEpTQXR0cik7CisKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXVkaW9C
dWZmZXJDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTQXVkaW9CdWZmZXJDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0F1ZGlvQnVmZmVyQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIwLTIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0z
MSwxMSArMzEsMTQgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBKU0M7
CiAKLXZvaWQgSlNBdWRpb0J1ZmZlcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0
b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0F1ZGlvQnVm
ZmVyOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHdy
YXBwZWQoKS52aXNpdENoYW5uZWxXcmFwcGVycyh2aXNpdG9yKTsKIH0KIAorREVGSU5FX1ZJU0lU
X0FERElUSU9OQUxfQ0hJTERSRU4oSlNBdWRpb0J1ZmZlcik7CisKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShXRUJfQVVESU8pCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0F1ZGlvVHJhY2tDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXVkaW9UcmFja0N1c3RvbS5jcHAJKHJldmlzaW9uIDI3
MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXVkaW9UcmFja0N1c3RvbS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
MS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMzUsMTEgKzM1LDE0IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1
c2luZyBuYW1lc3BhY2UgSlNDOwogCi12b2lkIEpTQXVkaW9UcmFjazo6dmlzaXRBZGRpdGlvbmFs
Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
Pgordm9pZCBKU0F1ZGlvVHJhY2s6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZp
c2l0b3IpCiB7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHJvb3QoJndyYXBwZWQoKSkpOwog
fQogCitERUZJTkVfVklTSVRfQURESVRJT05BTF9DSElMRFJFTihKU0F1ZGlvVHJhY2spOworCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNBdWRpb1RyYWNrTGlzdEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNBdWRpb1RyYWNrTGlzdEN1c3RvbS5jcHAJKHJldmlzaW9u
IDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXVkaW9UcmFja0xpc3RD
dXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTEtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM2LDExICszNiwxNCBAQAogbmFtZXNwYWNlIFdlYkNv
cmUgewogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAotdm9pZCBKU0F1ZGlvVHJhY2tMaXN0Ojp2aXNp
dEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVu
YW1lIFZpc2l0b3I+Cit2b2lkIEpTQXVkaW9UcmFja0xpc3Q6OnZpc2l0QWRkaXRpb25hbENoaWxk
cmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHJvb3Qo
d3JhcHBlZCgpLmVsZW1lbnQoKSkpOwogfQogCitERUZJTkVfVklTSVRfQURESVRJT05BTF9DSElM
RFJFTihKU0F1ZGlvVHJhY2tMaXN0KTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5k
aWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXVkaW9Xb3JrbGV0UHJvY2Vz
c29yQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0F1ZGlvV29ya2xldFByb2Nlc3NvckN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXVkaW9Xb3JrbGV0UHJvY2Vzc29yQ3VzdG9tLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIw
LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0zMSw3ICszMSw4IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2lu
ZyBuYW1lc3BhY2UgSlNDOwogCi12b2lkIEpTQXVkaW9Xb3JrbGV0UHJvY2Vzc29yOjp2aXNpdEFk
ZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1l
IFZpc2l0b3I+Cit2b2lkIEpTQXVkaW9Xb3JrbGV0UHJvY2Vzc29yOjp2aXNpdEFkZGl0aW9uYWxD
aGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGF1dG8mIHByb2Nlc3NvciA9IHdyYXBw
ZWQoKTsKICAgICBwcm9jZXNzb3IuanNJbnB1dHNXcmFwcGVyKCkudmlzaXQodmlzaXRvcik7CkBA
IC0zOSw2ICs0MCw4IEBAIHZvaWQgSlNBdWRpb1dvcmtsZXRQcm9jZXNzb3I6OnZpc2l0QWRkaXQK
ICAgICBwcm9jZXNzb3IuanNQYXJhbVZhbHVlc1dyYXBwZXIoKS52aXNpdCh2aXNpdG9yKTsKIH0K
IAorREVGSU5FX1ZJU0lUX0FERElUSU9OQUxfQ0hJTERSRU4oSlNBdWRpb1dvcmtsZXRQcm9jZXNz
b3IpOworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoV0VCX0FV
RElPKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDU1NSdWxlQ3VzdG9tLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NTU1J1bGVDdXN0
b20uY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0NTU1J1bGVDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTUxLDExICs1MSwxNCBAQAog
bmFtZXNwYWNlIFdlYkNvcmUgewogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAotdm9pZCBKU0NTU1J1
bGU6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxh
dGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNDU1NSdWxlOjp2aXNpdEFkZGl0aW9uYWxDaGls
ZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChyb290
KCZ3cmFwcGVkKCkpKTsKIH0KIAorREVGSU5FX1ZJU0lUX0FERElUSU9OQUxfQ0hJTERSRU4oSlND
U1NSdWxlKTsKKwogSlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTR2xvYmFsT2JqZWN0KiwgSlNE
T01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmPENTU1J1bGU+JiYgcnVsZSkKIHsKICAg
ICBzd2l0Y2ggKHJ1bGUtPnR5cGUoKSkgewpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNDU1NSdWxlTGlzdEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNDU1NSdWxlTGlzdEN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ1NTUnVsZUxpc3RDdXN0b20uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOS0yMDE5
IEFwcGxlIEluYy4gQWxsIHJpZ2h0IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5LTIw
MjEgQXBwbGUgSW5jLiBBbGwgcmlnaHQgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTM2LDcgKzM2LDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5h
bWVzcGFjZSBKU0M7CiAKLWJvb2wgSlNDU1NSdWxlTGlzdE93bmVyOjppc1JlYWNoYWJsZUZyb21P
cGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIFNsb3RW
aXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQorYm9vbCBKU0NTU1J1bGVMaXN0
T3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93
bj4gaGFuZGxlLCB2b2lkKiwgQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hh
cioqIHJlYXNvbikKIHsKICAgICBKU0NTU1J1bGVMaXN0KiBqc0NTU1J1bGVMaXN0ID0ganNDYXN0
PEpTQ1NTUnVsZUxpc3QqPihoYW5kbGUuc2xvdCgpLT5hc0NlbGwoKSk7CiAgICAgaWYgKCFqc0NT
U1J1bGVMaXN0LT5oYXNDdXN0b21Qcm9wZXJ0aWVzKGpzQ1NTUnVsZUxpc3QtPnZtKCkpKQpJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDU1NTdHlsZURlY2xhcmF0aW9uQ3VzdG9t
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NTU1N0eWxl
RGVjbGFyYXRpb25DdXN0b20uY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0NTU1N0eWxlRGVjbGFyYXRpb25DdXN0b20uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNy0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtNTEsOSArNTEsMTIgQEAgdm9pZCogcm9vdChDU1NTdHlsZURlY2xhcmF0aW9uKiBz
dHlsZSkKICAgICByZXR1cm4gc3R5bGU7CiB9CiAKLXZvaWQgSlNDU1NTdHlsZURlY2xhcmF0aW9u
Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRl
PHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTQ1NTU3R5bGVEZWNsYXJhdGlvbjo6dmlzaXRBZGRp
dGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB2aXNpdG9yLmFkZE9wYXF1
ZVJvb3Qocm9vdCgmd3JhcHBlZCgpKSk7CiB9CiAKK0RFRklORV9WSVNJVF9BRERJVElPTkFMX0NI
SUxEUkVOKEpTQ1NTU3R5bGVEZWNsYXJhdGlvbik7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2FsbGJhY2tEYXRhLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NhbGxiYWNrRGF0YS5jcHAJ
KHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2FsbGJh
Y2tEYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDctMjAwOSwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTk1LDEyICs5NSwxNiBAQCBKU1Zh
bHVlIEpTQ2FsbGJhY2tEYXRhOjppbnZva2VDYWxsYmFjayhKCiAgICAgcmV0dXJuIHJlc3VsdDsK
IH0KIAotdm9pZCBKU0NhbGxiYWNrRGF0YVdlYWs6OnZpc2l0SlNGdW5jdGlvbihKU0M6OlNsb3RW
aXNpdG9yJiB2aXN0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0NhbGxi
YWNrRGF0YVdlYWs6OnZpc2l0SlNGdW5jdGlvbihWaXNpdG9yJiB2aXNpdG9yKQogewotICAgIHZp
c3Rvci5hcHBlbmQobV9jYWxsYmFjayk7CisgICAgdmlzaXRvci5hcHBlbmQobV9jYWxsYmFjayk7
CiB9CiAKLWJvb2wgSlNDYWxsYmFja0RhdGFXZWFrOjpXZWFrT3duZXI6OmlzUmVhY2hhYmxlRnJv
bU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIFNs
b3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQordGVtcGxhdGUgdm9pZCBK
U0NhbGxiYWNrRGF0YVdlYWs6OnZpc2l0SlNGdW5jdGlvbihKU0M6OkFic3RyYWN0U2xvdFZpc2l0
b3ImKTsKK3RlbXBsYXRlIHZvaWQgSlNDYWxsYmFja0RhdGFXZWFrOjp2aXNpdEpTRnVuY3Rpb24o
SlNDOjpTbG90VmlzaXRvciYpOworCitib29sIEpTQ2FsbGJhY2tEYXRhV2Vhazo6V2Vha093bmVy
Ojppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2
b2lkKiBjb250ZXh0LCBBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiog
cmVhc29uKQogewogICAgIGlmIChVTkxJS0VMWShyZWFzb24pKQogICAgICAgICAqcmVhc29uID0g
IkNvbnRleHQgaXMgb3BhcXVlIHJvb3QiOyAvLyBGSVhNRTogd2hhdCBpcyB0aGUgY29udGV4dC4K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2FsbGJhY2tEYXRhLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDYWxsYmFja0RhdGEuaAkocmV2
aXNpb24gMjcyODMwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDYWxsYmFja0Rh
dGEuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDctMjAwOSwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTExMywxMSArMTEzLDExIEBAIHB1YmxpYzoK
ICAgICAgICAgcmV0dXJuIEpTQ2FsbGJhY2tEYXRhOjppbnZva2VDYWxsYmFjaygqZ2xvYmFsT2Jq
ZWN0LCBjYWxsYmFjaygpLCB0aGlzVmFsdWUsIGFyZ3MsIGNhbGxiYWNrVHlwZSwgZnVuY3Rpb25O
YW1lLCByZXR1cm5lZEV4Y2VwdGlvbik7CiAgICAgfQogCi0gICAgdm9pZCB2aXNpdEpTRnVuY3Rp
b24oSlNDOjpTbG90VmlzaXRvciYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZv
aWQgdmlzaXRKU0Z1bmN0aW9uKFZpc2l0b3ImKTsKIAogcHJpdmF0ZToKICAgICBjbGFzcyBXZWFr
T3duZXIgOiBwdWJsaWMgSlNDOjpXZWFrSGFuZGxlT3duZXIgewotICAgICAgICBib29sIGlzUmVh
Y2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNv
bnRleHQsIEpTQzo6U2xvdFZpc2l0b3ImLCBjb25zdCBjaGFyKiopIG92ZXJyaWRlOworICAgICAg
ICBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93
bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYsIGNvbnN0IGNoYXIq
Kikgb3ZlcnJpZGU7CiAgICAgfTsKICAgICBXZWFrT3duZXIgbV93ZWFrT3duZXI7CiAgICAgSlND
OjpXZWFrPEpTQzo6SlNPYmplY3Q+IG1fY2FsbGJhY2s7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREN1c3RvbS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0
MkRDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMTcgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMjEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yNCw3ICsy
NCw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotYm9vbCBKU0NhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyRE93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6
OlVua25vd24+IGhhbmRsZSwgdm9pZCosIEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0
IGNoYXIqKiByZWFzb24pCitib29sIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJET3duZXI6Omlz
UmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxl
LCB2b2lkKiwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiog
cmVhc29uKQogewogICAgIGlmIChVTkxJS0VMWShyZWFzb24pKQogICAgICAgICAqcmVhc29uID0g
IkNhbnZhcyBpcyBvcGFxdWUgcm9vdCI7CkBAIC0zNCw5ICszNCwxMiBAQCBib29sIEpTQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJET3duZXI6OmlzCiAgICAgcmV0dXJuIHZpc2l0b3IuY29udGFpbnNP
cGFxdWVSb290KHJvb3QpOwogfQogCi12b2lkIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjp2
aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxh
dGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnZp
c2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgdmlzaXRvci5h
ZGRPcGFxdWVSb290KHJvb3Qod3JhcHBlZCgpLmNhbnZhcygpKSk7CiB9CiAKK0RFRklORV9WSVNJ
VF9BRERJVElPTkFMX0NISUxEUkVOKEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKTsKKwogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlND
dXN0b21FdmVudEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNDdXN0b21FdmVudEN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9tRXZlbnRDdXN0b20uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE4IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtNDIsMTAgKzQyLDEzIEBAIEpTQzo6SlNWYWx1ZSBKU0N1c3RvbUV2ZW50OjpkZXRh
aWwoSlNDOjoKICAgICB9KTsKIH0KIAotdm9pZCBKU0N1c3RvbUV2ZW50Ojp2aXNpdEFkZGl0aW9u
YWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUg
VmlzaXRvcj4KK3ZvaWQgSlNDdXN0b21FdmVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlz
aXRvciYgdmlzaXRvcikKIHsKICAgICB3cmFwcGVkKCkuZGV0YWlsKCkudmlzaXQodmlzaXRvcik7
CiAgICAgd3JhcHBlZCgpLmNhY2hlZERldGFpbCgpLnZpc2l0KHZpc2l0b3IpOwogfQogCitERUZJ
TkVfVklTSVRfQURESVRJT05BTF9DSElMRFJFTihKU0N1c3RvbUV2ZW50KTsKKwogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CdWls
dGluQ29uc3RydWN0b3JCYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0RPTUJ1aWx0aW5Db25zdHJ1Y3RvckJhc2UuY3BwCShyZXZpc2lvbiAyNzI4MzAp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJ1aWx0aW5Db25zdHJ1Y3RvckJh
c2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqICBDb3B5cmlnaHQg
KEMpIDE5OTktMjAwMSBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQotICogIENvcHlyaWdo
dCAoQykgMjAwNC0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5
cmlnaHQgKEMpIDIwMDQtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiAg
Q29weXJpZ2h0IChDKSAyMDA3IFNhbXVlbCBXZWluaWcgPHNhbUB3ZWJraXQub3JnPgogICogIENv
cHlyaWdodCAoQykgMjAxMyBNaWNoYWVsIFBydWV0dCA8bWljaGFlbEA2OGsub3JnPgogICoKQEAg
LTQ1LDcgKzQ1LDggQEAgdm9pZCBKU0RPTUJ1aWx0aW5Db25zdHJ1Y3RvckJhc2U6OmNhbGxGdQog
ICAgIEpTQzo6Y2FsbCgmbGV4aWNhbEdsb2JhbE9iamVjdCwgJmZ1bmN0aW9uLCBjYWxsRGF0YSwg
JnRoaXNPYmplY3QsIGFyZ3VtZW50cyk7CiB9CiAKLXZvaWQgSlNET01CdWlsdGluQ29uc3RydWN0
b3JCYXNlOjp2aXNpdENoaWxkcmVuKEpTQzo6SlNDZWxsKiBjZWxsLCBKU0M6OlNsb3RWaXNpdG9y
JiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNET01CdWlsdGlu
Q29uc3RydWN0b3JCYXNlOjp2aXNpdENoaWxkcmVuSW1wbChKU0M6OkpTQ2VsbCogY2VsbCwgVmlz
aXRvciYgdmlzaXRvcikKIHsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTRE9NQnVp
bHRpbkNvbnN0cnVjdG9yQmFzZSo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJ
VFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTUzLDYgKzU0LDggQEAgdm9pZCBKU0RPTUJ1aWx0
aW5Db25zdHJ1Y3RvckJhc2U6OnZpc2l0QwogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3Qt
Pm1faW5pdGlhbGl6ZUZ1bmN0aW9uKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTRE9N
QnVpbHRpbkNvbnN0cnVjdG9yQmFzZSk7CisKIEpTQzo6SXNvU3Vic3BhY2UqIEpTRE9NQnVpbHRp
bkNvbnN0cnVjdG9yQmFzZTo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQogewogICAgIHJl
dHVybiAmc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKS0+ZG9tQnVp
bHRpbkNvbnN0cnVjdG9yU3BhY2UoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTRE9NQnVpbHRpbkNvbnN0cnVjdG9yQmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTRE9NQnVpbHRpbkNvbnN0cnVjdG9yQmFzZS5oCShyZXZpc2lvbiAy
NzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJ1aWx0aW5Db25zdHJ1
Y3RvckJhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJp
Z2h0IChDKSAyMDE1LCAyMDE2IENhbm9uIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqICBD
b3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENv
cHlyaWdodCAoQykgMjAxNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNz
ZXIgR2VuZXJhbCBQdWJsaWMKQEAgLTQyLDcgKzQyLDcgQEAgcHJvdGVjdGVkOgogICAgIHsKICAg
ICB9CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQzo6SlNDZWxsKiwgSlNDOjpT
bG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBKU0M6OkpT
RnVuY3Rpb24qIGluaXRpYWxpemVGdW5jdGlvbigpOwogICAgIHZvaWQgc2V0SW5pdGlhbGl6ZUZ1
bmN0aW9uKEpTQzo6Vk0mLCBKU0M6OkpTRnVuY3Rpb24mKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5jcHAJKHJldmlzaW9uIDI3Mjgz
MCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgt
MjAxOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDgtMjAyMSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTIzOCw3ICsyMzgsOCBAQCBTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiBKU0RPTUdsb2JhbE9iamVjCiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLXZvaWQgSlNET01H
bG9iYWxPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlz
aXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTRE9NR2xvYmFsT2JqZWN0
Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAg
ICAgSlNET01HbG9iYWxPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmpl
Y3QqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGlu
Zm8oKSk7CkBAIC0yNjAsNiArMjYxLDggQEAgdm9pZCBKU0RPTUdsb2JhbE9iamVjdDo6dmlzaXRD
aGlsZHJlbihKUwogICAgIHRoaXNPYmplY3QtPm1fYnVpbHRpbkludGVybmFsRnVuY3Rpb25zLnZp
c2l0KHZpc2l0b3IpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNET01HbG9iYWxPYmpl
Y3QpOworCiB2b2lkIEpTRE9NR2xvYmFsT2JqZWN0Ojpwcm9taXNlUmVqZWN0aW9uVHJhY2tlcihK
U0dsb2JhbE9iamVjdCoganNHbG9iYWxPYmplY3QsIEpTUHJvbWlzZSogcHJvbWlzZSwgSlNQcm9t
aXNlUmVqZWN0aW9uT3BlcmF0aW9uIG9wZXJhdGlvbikKIHsKICAgICAvLyBodHRwczovL2h0bWwu
c3BlYy53aGF0d2cub3JnL211bHRpcGFnZS93ZWJhcHBhcGlzLmh0bWwjdGhlLWhvc3Rwcm9taXNl
cmVqZWN0aW9udHJhY2tlci1pbXBsZW1lbnRhdGlvbgpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNET01HbG9iYWxPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOC0yMDE4IEFwcGxl
IEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDIxIEFw
cGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtNjksNyArNjksNyBAQCBwdWJsaWM6CiAgICAgLy8gTWFrZSBiaW5kaW5nIGNvZGUg
Z2VuZXJhdGlvbiBlYXNpZXIuCiAgICAgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCgp
IHsgcmV0dXJuIHRoaXM7IH0KIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDOjpK
U0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsK
IAogICAgIERPTVdyYXBwZXJXb3JsZCYgd29ybGQoKSB7IHJldHVybiBtX3dvcmxkLmdldCgpOyB9
CiAgICAgYm9vbCB3b3JsZElzTm9ybWFsKCkgY29uc3QgeyByZXR1cm4gbV93b3JsZElzTm9ybWFs
OyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUd1YXJkZWRPYmplY3Qu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUd1YXJkZWRP
YmplY3QuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNET01HdWFyZGVkT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDAsNyArNDAsNyBAQCBwdWJsaWM6
CiAKICAgICBib29sIGlzU3VzcGVuZGVkKCkgY29uc3QgeyByZXR1cm4gIW1fZ3VhcmRlZCB8fCAh
Y2FuSW52b2tlQ2FsbGJhY2soKTsgfSAvLyBUaGUgd3JhcHBlciB3b3JsZCBoYXMgZ29uZSBhd2F5
IG9yIGFjdGl2ZSBET00gb2JqZWN0cyBoYXZlIGJlZW4gc3VzcGVuZGVkLgogCi0gICAgdm9pZCB2
aXNpdEFnZ3JlZ2F0ZShKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKSB7IHZpc2l0b3IuYXBwZW5k
KG1fZ3VhcmRlZCk7IH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIHZpc2l0
QWdncmVnYXRlKFZpc2l0b3ImIHZpc2l0b3IpIHsgdmlzaXRvci5hcHBlbmQobV9ndWFyZGVkKTsg
fQogCiAgICAgSlNDOjpKU1ZhbHVlIGd1YXJkZWRPYmplY3QoKSBjb25zdCB7IHJldHVybiBtX2d1
YXJkZWQuZ2V0KCk7IH0KICAgICBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KCkgY29u
c3QgeyByZXR1cm4gbV9nbG9iYWxPYmplY3QuZ2V0KCk7IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTRE9NUXVhZEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNET01RdWFkQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcyODMwKQor
KysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01RdWFkQ3VzdG9tLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0zMyw3ICszMyw4IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3Bh
Y2UgSlNDOwogCi12b2lkIEpTRE9NUXVhZDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZp
c2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0RPTVF1
YWQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgdmlz
aXRvci5hZGRPcGFxdWVSb290KGNvbnN0X2Nhc3Q8RE9NUG9pbnQqPigmd3JhcHBlZCgpLnAxKCkp
KTsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QoY29uc3RfY2FzdDxET01Qb2ludCo+KCZ3cmFw
cGVkKCkucDIoKSkpOwpAQCAtNDEsNCArNDIsNiBAQCB2b2lkIEpTRE9NUXVhZDo6dmlzaXRBZGRp
dGlvbmFsQ2hpbGRyZW4oCiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KGNvbnN0X2Nhc3Q8RE9N
UG9pbnQqPigmd3JhcHBlZCgpLnA0KCkpKTsKIH0KIAotfQorREVGSU5FX1ZJU0lUX0FERElUSU9O
QUxfQ0hJTERSRU4oSlNET01RdWFkKTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDog
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dDdXN0b20uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93Q3VzdG9tLmNwcAko
cmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5k
b3dDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAwNy0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAwNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
IENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKQEAgLTExNiw3ICsxMTYsOCBAQCBKU0NfREVGSU5FX0NVU1RPTV9HRVRURVIoanNE
T01XaW5kb3dJbnN0CiAgICAgcmV0dXJuIG5vbkNhY2hpbmdTdGF0aWNGdW5jdGlvbkdldHRlcklt
cGw8anNET01XaW5kb3dJbnN0YW5jZUZ1bmN0aW9uX3Bvc3RNZXNzYWdlLCAyPihnbG9iYWxPYmpl
Y3QsIHByb3BlcnR5TmFtZSk7CiB9CiAKLXZvaWQgSlNET01XaW5kb3c6OnZpc2l0QWRkaXRpb25h
bENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRv
cj4KK3ZvaWQgSlNET01XaW5kb3c6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZp
c2l0b3IpCiB7CiAgICAgaWYgKEZyYW1lKiBmcmFtZSA9IHdyYXBwZWQoKS5mcmFtZSgpKQogICAg
ICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QoZnJhbWUpOwpAQCAtMTI5LDYgKzEzMCw4IEBAIHZv
aWQgSlNET01XaW5kb3c6OnZpc2l0QWRkaXRpb25hbENoaWxkcmUKICAgICB3cmFwcGVkKCkudmlz
aXRKU0V2ZW50TGlzdGVuZXJzKHZpc2l0b3IpOwogfQogCitERUZJTkVfVklTSVRfQURESVRJT05B
TF9DSElMRFJFTihKU0RPTVdpbmRvdyk7CisKICNpZiBFTkFCTEUoVVNFUl9NRVNTQUdFX0hBTkRM
RVJTKQogSlNDX0RFRklORV9DVVNUT01fR0VUVEVSKGpzRE9NV2luZG93X3dlYmtpdCwgKEpTR2xv
YmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUs
IFByb3BlcnR5TmFtZSkpCiB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Rl
cHJlY2F0ZWRDU1NPTVZhbHVlQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0RlcHJlY2F0ZWRDU1NPTVZhbHVlQ3VzdG9tLmNwcAkocmV2aXNpb24g
MjcyODMwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNEZXByZWNhdGVkQ1NTT01W
YWx1ZUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDA3LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDA3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNSw3ICszNSw3IEBACiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCi1ib29sIEpTRGVwcmVjYXRlZENT
U09NVmFsdWVPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlND
OjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hh
cioqIHJlYXNvbikKK2Jvb2wgSlNEZXByZWNhdGVkQ1NTT01WYWx1ZU93bmVyOjppc1JlYWNoYWJs
ZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCos
IEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCiB7CiAg
ICAgSlNEZXByZWNhdGVkQ1NTT01WYWx1ZSoganNDU1NWYWx1ZSA9IGpzQ2FzdDxKU0RlcHJlY2F0
ZWRDU1NPTVZhbHVlKj4oaGFuZGxlLnNsb3QoKS0+YXNDZWxsKCkpOwogICAgIGlmICghanNDU1NW
YWx1ZS0+aGFzQ3VzdG9tUHJvcGVydGllcyhqc0NTU1ZhbHVlLT52bSgpKSkKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRG9jdW1lbnRDdXN0b20uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRG9jdW1lbnRDdXN0b20uY3BwCShyZXZpc2lv
biAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RvY3VtZW50Q3VzdG9t
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDctMjAwOSwgMjAxMSwgMjAxNiwgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTkxLDExICs5MSwxNCBAQCBKU1ZhbHVlIHRv
SlMoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iCiAgICAgcmV0dXJuIHRvSlNOZXdseUNyZWF0
ZWQobGV4aWNhbEdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LCBSZWY8RG9jdW1lbnQ+KGRvY3Vt
ZW50KSk7CiB9CiAKLXZvaWQgSlNEb2N1bWVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xv
dFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0Rv
Y3VtZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAg
IHZpc2l0b3IuYWRkT3BhcXVlUm9vdChzdGF0aWNfY2FzdDxTY3JpcHRFeGVjdXRpb25Db250ZXh0
Kj4oJndyYXBwZWQoKSkpOwogfQogCitERUZJTkVfVklTSVRfQURESVRJT05BTF9DSElMRFJFTihK
U0RvY3VtZW50KTsKKwogdm9pZCBKU0RvY3VtZW50OjphbmFseXplSGVhcChKU0NlbGwqIGNlbGws
IEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCiB7CiAgICAgQmFzZTo6YW5hbHl6ZUhlYXAoY2VsbCwg
YW5hbHl6ZXIpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFcnJvckV2ZW50
Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Vy
cm9yRXZlbnRDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0Vycm9yRXZlbnRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxOCBZdXN1a2UgU3V6dWtpIDx5dXN1a2Vz
dXp1a2lAc2xvd3N0YXJ0Lm9yZz4uCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0y
OCw5ICsyOSwxMiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgSlNFcnJvckV2ZW50
Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVt
cGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNFcnJvckV2ZW50Ojp2aXNpdEFkZGl0aW9u
YWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHdyYXBwZWQoKS5vcmlnaW5hbEVy
cm9yKCkudmlzaXQodmlzaXRvcik7CiB9CiAKK0RFRklORV9WSVNJVF9BRERJVElPTkFMX0NISUxE
UkVOKEpTRXJyb3JFdmVudCk7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRMaXN0ZW5lci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudExpc3RlbmVyLmNwcAkocmV2aXNpb24g
MjcyODMwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudExpc3RlbmVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAy
MDAxIFBldGVyIEtlbGx5IChwbWtAcG9zdC5jb20pCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIw
MTkgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAw
My0yMDIxIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICog
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJs
aWMKQEAgLTc4LDcgKzc4LDggQEAgSlNPYmplY3QqIEpTRXZlbnRMaXN0ZW5lcjo6aW5pdGlhbGl6
ZUpTRgogICAgIHJldHVybiBudWxscHRyOwogfQogCi12b2lkIEpTRXZlbnRMaXN0ZW5lcjo6dmlz
aXRKU0Z1bmN0aW9uKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlz
aXRvcj4KK2lubGluZSB2b2lkIEpTRXZlbnRMaXN0ZW5lcjo6dmlzaXRKU0Z1bmN0aW9uSW1wbChW
aXNpdG9yJiB2aXNpdG9yKQogewogICAgIC8vIElmIG1fd3JhcHBlciBpcyBudWxsLCB3ZSBhcmUg
bm90IGtlZXBpbmcgbV9qc0Z1bmN0aW9uIGFsaXZlLgogICAgIGlmICghbV93cmFwcGVyKQpAQCAt
ODcsNiArODgsOSBAQCB2b2lkIEpTRXZlbnRMaXN0ZW5lcjo6dmlzaXRKU0Z1bmN0aW9uKFNsCiAg
ICAgdmlzaXRvci5hcHBlbmQobV9qc0Z1bmN0aW9uKTsKIH0KIAordm9pZCBKU0V2ZW50TGlzdGVu
ZXI6OnZpc2l0SlNGdW5jdGlvbihBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKSB7IHZpc2l0
SlNGdW5jdGlvbkltcGwodmlzaXRvcik7IH0KK3ZvaWQgSlNFdmVudExpc3RlbmVyOjp2aXNpdEpT
RnVuY3Rpb24oU2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsgdmlzaXRKU0Z1bmN0aW9uSW1wbCh2aXNp
dG9yKTsgfQorCiBzdGF0aWMgdm9pZCBoYW5kbGVCZWZvcmVVbmxvYWRFdmVudFJldHVyblZhbHVl
KEJlZm9yZVVubG9hZEV2ZW50JiBldmVudCwgY29uc3QgU3RyaW5nJiByZXR1cm5WYWx1ZSkKIHsK
ICAgICBpZiAocmV0dXJuVmFsdWUuaXNOdWxsKCkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0V2ZW50TGlzdGVuZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0V2ZW50TGlzdGVuZXIuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudExpc3RlbmVyLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsNiArMSw2IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMjAwMSBQZXRlciBLZWxseSAocG1r
QHBvc3QuY29tKQotICogIENvcHlyaWdodCAoQykgMjAwMy0yMDE4IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAyMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCkBAIC02Miw2ICs2Miw5IEBA
IHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICB2aXJ0dWFsIEpTQzo6SlNPYmplY3QqIGluaXRpYWxp
emVKU0Z1bmN0aW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmKSBjb25zdDsKKworICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgdmlzaXRKU0Z1bmN0aW9uSW1wbChWaXNpdG9yJik7
CisgICAgdm9pZCB2aXNpdEpTRnVuY3Rpb24oSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJikgZmlu
YWw7CiAgICAgdm9pZCB2aXNpdEpTRnVuY3Rpb24oSlNDOjpTbG90VmlzaXRvciYpIGZpbmFsOwog
CiBwcm90ZWN0ZWQ6CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50VGFy
Z2V0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0V2ZW50VGFyZ2V0Q3VzdG9tLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNFdmVudFRhcmdldEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTcgQXBwbGUgSW5jLiBB
bGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMjEgQXBwbGUgSW5j
LiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC03Miw5ICs3MiwxMiBAQCBzdGQ6OnVuaXF1ZV9wdHI8SlNFdmVudFRhcmdldFdyYXBwZXI+IGpz
CiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLXZvaWQgSlNFdmVudFRhcmdldDo6dmlzaXRBZGRp
dGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPgordm9pZCBKU0V2ZW50VGFyZ2V0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNp
dG9yJiB2aXNpdG9yKQogewogICAgIHdyYXBwZWQoKS52aXNpdEpTRXZlbnRMaXN0ZW5lcnModmlz
aXRvcik7CiB9CiAKK0RFRklORV9WSVNJVF9BRERJVElPTkFMX0NISUxEUkVOKEpTRXZlbnRUYXJn
ZXQpOworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0ZldGNoRXZlbnRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTRmV0Y2hFdmVudEN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjgzMCkK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRmV0Y2hFdmVudEN1c3RvbS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMzAsMTEgKzMwLDE0IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9p
ZCBKU0ZldGNoRXZlbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3Im
IHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0ZldGNoRXZlbnQ6
OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgdmlzaXRv
ci5hZGRPcGFxdWVSb290KCZ3cmFwcGVkKCkucmVxdWVzdCgpKTsKIH0KIAotfQorREVGSU5FX1ZJ
U0lUX0FERElUSU9OQUxfQ0hJTERSRU4oSlNGZXRjaEV2ZW50KTsKKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQogCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRN
TENhbnZhc0VsZW1lbnRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTSFRNTENhbnZhc0VsZW1lbnRDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI4MzAp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxDYW52YXNFbGVtZW50Q3VzdG9t
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDIwLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC0zMSw5ICszMSwxMiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLXZvaWQgSlNIVE1MQ2FudmFzRWxlbWVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlND
OjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lk
IEpTSFRNTENhbnZhc0VsZW1lbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZp
c2l0b3IpCiB7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHN0YXRpY19jYXN0PENhbnZhc0Jh
c2UqPigmd3JhcHBlZCgpKSk7CiB9CiAKK0RFRklORV9WSVNJVF9BRERJVElPTkFMX0NISUxEUkVO
KEpTSFRNTENhbnZhc0VsZW1lbnQpOworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxUZW1wbGF0ZUVsZW1lbnRDdXN0b20uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTFRlbXBsYXRl
RWxlbWVudEN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTSFRNTFRlbXBsYXRlRWxlbWVudEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQpAQCAt
MzcsMTAgKzM4LDEzIEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2UgSlND
OwogCi12b2lkIEpTSFRNTFRlbXBsYXRlRWxlbWVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4o
SlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2
b2lkIEpTSFRNTFRlbXBsYXRlRWxlbWVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRv
ciYgdmlzaXRvcikKIHsKICAgICBpZiAoYXV0byogY29udGVudCA9IHdyYXBwZWQoKS5jb250ZW50
SWZBdmFpbGFibGUoKSkKICAgICAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHJvb3QoY29udGVu
dCkpOwogfQogCitERUZJTkVfVklTSVRfQURESVRJT05BTF9DSElMRFJFTihKU0hUTUxUZW1wbGF0
ZUVsZW1lbnQpOworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0hpc3RvcnlDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTSGlzdG9yeUN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjgzMCkK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSGlzdG9yeUN1c3RvbS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTgg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIw
MjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC00NCw5ICs0NCwxMiBAQCBKU1ZhbHVlIEpTSGlzdG9yeTo6c3RhdGUoSlNH
bG9iYWxPYmplY3QmCiAgICAgfSk7CiB9CiAKLXZvaWQgSlNIaXN0b3J5Ojp2aXNpdEFkZGl0aW9u
YWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0
b3I+Cit2b2lkIEpTSGlzdG9yeTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlz
aXRvcikKIHsKICAgICB3cmFwcGVkKCkuY2FjaGVkU3RhdGVGb3JHQygpLnZpc2l0KHZpc2l0b3Ip
OwogfQogCitERUZJTkVfVklTSVRfQURESVRJT05BTF9DSElMRFJFTihKU0hpc3RvcnkpOworCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0lEQkN1cnNvckN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNJREJDdXJzb3JDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQkN1cnNvckN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
NTAsNyArNTAsOCBAQCBKU0M6OkpTVmFsdWUgSlNJREJDdXJzb3I6OnByaW1hcnlLZXkoSlNDCiAg
ICAgfSk7CiB9CiAKLXZvaWQgSlNJREJDdXJzb3I6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNJ
REJDdXJzb3I6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAg
ICAgYXV0byYgY3Vyc29yID0gd3JhcHBlZCgpOwogICAgIGlmIChhdXRvKiByZXF1ZXN0ID0gY3Vy
c29yLnJlcXVlc3QoKSkKQEAgLTU5LDYgKzYwLDggQEAgdm9pZCBKU0lEQkN1cnNvcjo6dmlzaXRB
ZGRpdGlvbmFsQ2hpbGRyZQogICAgIGN1cnNvci5wcmltYXJ5S2V5V3JhcHBlcigpLnZpc2l0KHZp
c2l0b3IpOwogfQogCitERUZJTkVfVklTSVRfQURESVRJT05BTF9DSElMRFJFTihKU0lEQkN1cnNv
cik7CisKIEpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNE
T01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmPElEQkN1cnNvcj4mJiBjdXJzb3IpCiB7
CiAgICAgaWYgKGlzPElEQkN1cnNvcldpdGhWYWx1ZT4oY3Vyc29yKSkKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCQ3Vyc29yV2l0aFZhbHVlQ3VzdG9tLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQkN1cnNvcldpdGhWYWx1ZUN1
c3RvbS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTSURCQ3Vyc29yV2l0aFZhbHVlQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00MywxMiArNDMs
MTUgQEAgSlNDOjpKU1ZhbHVlIEpTSURCQ3Vyc29yV2l0aFZhbHVlOjp2YWx1ZQogICAgIH0pOwog
fQogCi12b2lkIEpTSURCQ3Vyc29yV2l0aFZhbHVlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihT
bG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpT
SURCQ3Vyc29yV2l0aFZhbHVlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNp
dG9yKQogewogICAgIEpTSURCQ3Vyc29yOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbih2aXNpdG9y
KTsKICAgICB3cmFwcGVkKCkudmFsdWVXcmFwcGVyKCkudmlzaXQodmlzaXRvcik7CiB9CiAKK0RF
RklORV9WSVNJVF9BRERJVElPTkFMX0NISUxEUkVOKEpTSURCQ3Vyc29yV2l0aFZhbHVlKTsKKwog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJB
U0UpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQkluZGV4Q3VzdG9tLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQkluZGV4Q3Vz
dG9tLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNJREJJbmRleEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzQsMTEgKzM0LDE0IEBACiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCi12b2lkIEpTSURCSW5kZXg6
OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8
dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNJREJJbmRleDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRy
ZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qoc3RhdGlj
X2Nhc3Q8SURCSW5kZXgmPih3cmFwcGVkKCkpLm9iamVjdFN0b3JlQXNPcGFxdWVSb290KCkpOwog
fQogCitERUZJTkVfVklTSVRfQURESVRJT05BTF9DSElMRFJFTihKU0lEQkluZGV4KTsKKwogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0Up
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQk9iamVjdFN0b3JlQ3VzdG9t
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQk9iamVj
dFN0b3JlQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNJREJPYmplY3RTdG9yZUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDEyIE1pY2hhZWwgUHJ1ZXR0IDxtaWNo
YWVsQDY4ay5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQpAQCAtMzYsMTEg
KzM3LDE0IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCi12
b2lkIEpTSURCT2JqZWN0U3RvcmU6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9y
JiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNJREJPYmplY3RT
dG9yZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBz
dGF0aWNfY2FzdDxJREJPYmplY3RTdG9yZSY+KHdyYXBwZWQoKSkudmlzaXRSZWZlcmVuY2VkSW5k
ZXhlcyh2aXNpdG9yKTsKIH0KIAotfQorREVGSU5FX1ZJU0lUX0FERElUSU9OQUxfQ0hJTERSRU4o
SlNJREJPYmplY3RTdG9yZSk7CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQlJlcXVlc3RDdXN0b20uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCUmVxdWVzdEN1c3Rv
bS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
SURCUmVxdWVzdEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxOS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODksMTIgKzg5LDE2IEBAIEpTQzo6
SlNWYWx1ZSBKU0lEQlJlcXVlc3Q6OnJlc3VsdChKU0M6OkoKICAgICB9KTsKIH0KIAotdm9pZCBK
U0lEQlJlcXVlc3Q6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9y
KQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNJREJSZXF1ZXN0Ojp2aXNpdEFk
ZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGF1dG8mIHJlcXVlc3Qg
PSB3cmFwcGVkKCk7CiAgICAgcmVxdWVzdC5yZXN1bHRXcmFwcGVyKCkudmlzaXQodmlzaXRvcik7
CiAgICAgcmVxdWVzdC5jdXJzb3JXcmFwcGVyKCkudmlzaXQodmlzaXRvcik7CiB9CiAKLX0KK0RF
RklORV9WSVNJVF9BRERJVElPTkFMX0NISUxEUkVOKEpTSURCUmVxdWVzdCk7CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKwogI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQpJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJUcmFuc2FjdGlvbkN1c3RvbS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJUcmFuc2FjdGlv
bkN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTSURCVHJhbnNhY3Rpb25DdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM0LDExICszNCwx
NCBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAotdm9pZCBK
U0lEQlRyYW5zYWN0aW9uOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlz
aXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTSURCVHJhbnNhY3Rpb246
OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgc3RhdGlj
X2Nhc3Q8SURCVHJhbnNhY3Rpb24mPih3cmFwcGVkKCkpLnZpc2l0UmVmZXJlbmNlZE9iamVjdFN0
b3Jlcyh2aXNpdG9yKTsKIH0KIAotfQorREVGSU5FX1ZJU0lUX0FERElUSU9OQUxfQ0hJTERSRU4o
SlNJREJUcmFuc2FjdGlvbik7CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0ludGVyc2VjdGlvbk9ic2VydmVyQ3Vz
dG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0ludGVy
c2VjdGlvbk9ic2VydmVyQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNJbnRlcnNlY3Rpb25PYnNlcnZlckN1c3RvbS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDIwIElnYWxp
YSBTLkwuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMCwxMCArMzEsMTMgQEAK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIEpTSW50ZXJzZWN0aW9uT2JzZXJ2ZXI6OnZp
c2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0
ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0ludGVyc2VjdGlvbk9ic2VydmVyOjp2aXNpdEFk
ZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGlmIChhdXRvKiBjYWxs
YmFjayA9IHdyYXBwZWQoKS5jYWxsYmFja0NvbmN1cnJlbnRseSgpKQogICAgICAgICBjYWxsYmFj
ay0+dmlzaXRKU0Z1bmN0aW9uKHZpc2l0b3IpOwogfQogCi19CitERUZJTkVfVklTSVRfQURESVRJ
T05BTF9DSElMRFJFTihKU0ludGVyc2VjdGlvbk9ic2VydmVyKTsKKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJbnRlcnNlY3Rpb25P
YnNlcnZlckVudHJ5Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0ludGVyc2VjdGlvbk9ic2VydmVyRW50cnlDdXN0b20uY3BwCShyZXZpc2lvbiAy
NzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0ludGVyc2VjdGlvbk9ic2Vy
dmVyRW50cnlDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAq
IENvcHlyaWdodCAoQykgMjAxOCBHb29nbGUgTExDLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzAsNyArMzEsOCBAQAogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLXZvaWQgSlNJbnRlcnNlY3Rpb25PYnNlcnZlckVudHJ5Ojp2aXNpdEFkZGl0
aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5h
bWUgVmlzaXRvcj4KK3ZvaWQgSlNJbnRlcnNlY3Rpb25PYnNlcnZlckVudHJ5Ojp2aXNpdEFkZGl0
aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHZpc2l0b3IuYWRkT3BhcXVl
Um9vdChyb290KHdyYXBwZWQoKS50YXJnZXQoKSkpOwogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9v
dCh3cmFwcGVkKCkuYm91bmRpbmdDbGllbnRSZWN0KCkpOwpAQCAtMzgsNCArNDAsNiBAQCB2b2lk
IEpTSW50ZXJzZWN0aW9uT2JzZXJ2ZXJFbnRyeTo6dmlzaXRBCiAgICAgdmlzaXRvci5hZGRPcGFx
dWVSb290KHdyYXBwZWQoKS5yb290Qm91bmRzKCkpOwogfQogCi19CitERUZJTkVfVklTSVRfQURE
SVRJT05BTF9DSElMRFJFTihKU0ludGVyc2VjdGlvbk9ic2VydmVyRW50cnkpOworCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01lc3Nh
Z2VDaGFubmVsQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU01lc3NhZ2VDaGFubmVsQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNZXNzYWdlQ2hhbm5lbEN1c3RvbS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5
IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0y
MDIxIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMzMsNyArMzMsOCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZv
aWQgSlNNZXNzYWdlQ2hhbm5lbDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90Vmlz
aXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTTWVzc2Fn
ZUNoYW5uZWw6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAg
ICAgaWYgKE1lc3NhZ2VQb3J0KiBwb3J0ID0gd3JhcHBlZCgpLnBvcnQxKCkpCiAgICAgICAgIHZp
c2l0b3IuYWRkT3BhcXVlUm9vdChwb3J0KTsKQEAgLTQyLDYgKzQzLDggQEAgdm9pZCBKU01lc3Nh
Z2VDaGFubmVsOjp2aXNpdEFkZGl0aW9uYWxDaAogICAgICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJv
b3QocG9ydCk7CiB9CiAKK0RFRklORV9WSVNJVF9BRERJVElPTkFMX0NISUxEUkVOKEpTTWVzc2Fn
ZUNoYW5uZWwpOworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUo
Q0hBTk5FTF9NRVNTQUdJTkcpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01l
c3NhZ2VFdmVudEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNNZXNzYWdlRXZlbnRDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01lc3NhZ2VFdmVudEN1c3RvbS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxOCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMgYXJlCkBAIC03MCw3ICs3MCw4IEBAIEpTQzo6SlNWYWx1ZSBKU01lc3NhZ2VFdmVudDo6
ZGF0YShKU0M6OkoKICAgICB9KTsKIH0KIAotdm9pZCBKU01lc3NhZ2VFdmVudDo6dmlzaXRBZGRp
dGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVu
YW1lIFZpc2l0b3I+Cit2b2lkIEpTTWVzc2FnZUV2ZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJl
bihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFdURjo6c3dpdGNoT24od3JhcHBlZCgpLmRhdGEo
KSwgWyZ2aXNpdG9yXSAoY29uc3QgSlNWYWx1ZUluV3JhcHBlZE9iamVjdCYgZGF0YSkgewogICAg
ICAgICBkYXRhLnZpc2l0KHZpc2l0b3IpOwpAQCAtODQsNCArODUsNiBAQCB2b2lkIEpTTWVzc2Fn
ZUV2ZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsCiAgICAgd3JhcHBlZCgpLmNhY2hlZFBvcnRzKCku
dmlzaXQodmlzaXRvcik7CiB9CiAKK0RFRklORV9WSVNJVF9BRERJVElPTkFMX0NISUxEUkVOKEpT
TWVzc2FnZUV2ZW50KTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNNZXNzYWdlUG9ydEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNZXNzYWdlUG9ydEN1c3RvbS5jcHAJKHJldmlz
aW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWVzc2FnZVBvcnRD
dXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAwOC0yMDA5LCAyMDE2IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAwOC0yMDIxIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4K
ICAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dApAQCAtMzEsMTEgKzMxLDE0IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCi12b2lkIEpTTWVzc2FnZVBvcnQ6OnZpc2l0QWRkaXRp
b25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlz
aXRvcj4KK3ZvaWQgSlNNZXNzYWdlUG9ydDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRv
ciYgdmlzaXRvcikKIHsKICAgICAvLyBJZiB3ZSBoYXZlIGEgbG9jYWxseSBlbnRhbmdsZWQgcG9y
dCwgd2UgY2FuIGRpcmVjdGx5IG1hcmsgaXQgYXMgcmVhY2hhYmxlLiBQb3J0cyB0aGF0IGFyZSBy
ZW1vdGVseSBlbnRhbmdsZWQgYXJlIG1hcmtlZCBpbi11c2UgYnkgbWFya0FjdGl2ZU9iamVjdHNG
b3JDb250ZXh0KCkuCiAgICAgaWYgKE1lc3NhZ2VQb3J0KiBwb3J0ID0gd3JhcHBlZCgpLmxvY2Fs
bHlFbnRhbmdsZWRQb3J0KCkpCiAgICAgICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChwb3J0KTsK
IH0KIAorREVGSU5FX1ZJU0lUX0FERElUSU9OQUxfQ0hJTERSRU4oSlNNZXNzYWdlUG9ydCk7CisK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTTXV0YXRpb25PYnNlcnZlckN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNNdXRhdGlvbk9ic2VydmVyQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcy
ODMwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNdXRhdGlvbk9ic2VydmVyQ3Vz
dG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQg
KEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlCkBAIC0zOSwxMiArMzksMTUgQEAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKLXZvaWQgSlNNdXRhdGlvbk9ic2VydmVyOjp2
aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxh
dGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNNdXRhdGlvbk9ic2VydmVyOjp2aXNpdEFkZGl0
aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHdyYXBwZWQoKS5jYWxsYmFj
aygpLnZpc2l0SlNGdW5jdGlvbih2aXNpdG9yKTsKIH0KIAotYm9vbCBKU011dGF0aW9uT2JzZXJ2
ZXJPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtu
b3duPiBoYW5kbGUsIHZvaWQqLCBTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqcmVh
c29uKQorREVGSU5FX1ZJU0lUX0FERElUSU9OQUxfQ0hJTERSRU4oSlNNdXRhdGlvbk9ic2VydmVy
KTsKKworYm9vbCBKU011dGF0aW9uT2JzZXJ2ZXJPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVl
Um9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBBYnN0cmFjdFNs
b3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKipyZWFzb24pCiB7CiAgICAgZm9yIChhdXRv
KiBub2RlIDoganNDYXN0PEpTTXV0YXRpb25PYnNlcnZlcio+KGhhbmRsZS5zbG90KCktPmFzQ2Vs
bCgpKS0+d3JhcHBlZCgpLm9ic2VydmVkTm9kZXMoKSkgewogICAgICAgICBpZiAodmlzaXRvci5j
b250YWluc09wYXF1ZVJvb3Qocm9vdChub2RlKSkpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTTXV0YXRpb25SZWNvcmRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTXV0YXRpb25SZWNvcmRDdXN0b20uY3BwCShyZXZpc2lv
biAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU011dGF0aW9uUmVjb3Jk
Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE4LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMCw5ICszMCwxMiBAQAogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLXZvaWQgSlNNdXRhdGlvblJlY29yZDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4o
SlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2
b2lkIEpTTXV0YXRpb25SZWNvcmQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZp
c2l0b3IpCiB7CiAgICAgd3JhcHBlZCgpLnZpc2l0Tm9kZXNDb25jdXJyZW50bHkodmlzaXRvcik7
CiB9Ci0gICAgCisKK0RFRklORV9WSVNJVF9BRERJVElPTkFMX0NISUxEUkVOKEpTTXV0YXRpb25S
ZWNvcmQpOworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU05hdmlnYXRvckN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNOYXZpZ2F0b3JDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI4MzAp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05hdmlnYXRvckN1c3RvbS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMzIsMTEgKzMyLDE0IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9p
ZCBKU05hdmlnYXRvcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYg
dmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTTmF2aWdhdG9yOjp2
aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHZpc2l0b3Iu
YWRkT3BhcXVlUm9vdChzdGF0aWNfY2FzdDxOYXZpZ2F0b3JCYXNlKj4oJndyYXBwZWQoKSkpOwog
fQogCitERUZJTkVfVklTSVRfQURESVRJT05BTF9DSElMRFJFTihKU05hdmlnYXRvcik7CisKICNp
ZiBFTkFCTEUoTUVESUFfU1RSRUFNKQogSlNDOjpKU1ZhbHVlIEpTTmF2aWdhdG9yOjpnZXRVc2Vy
TWVkaWEoSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpDYWxs
RnJhbWUmIGNhbGxGcmFtZSkKIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
Tm9kZUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNOb2RlQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNOb2RlQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDktMjAxMCwgMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTc0LDcgKzc0LDcgQEAgdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAogdXNpbmcgbmFtZXNwYWNlIEhU
TUxOYW1lczsKIAotc3RhdGljIGlubGluZSBib29sIGlzUmVhY2hhYmxlRnJvbURPTShOb2RlKiBu
b2RlLCBTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikKK3N0YXRpYyBp
bmxpbmUgYm9vbCBpc1JlYWNoYWJsZUZyb21ET00oTm9kZSogbm9kZSwgQWJzdHJhY3RTbG90Vmlz
aXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikKIHsKICAgICBpZiAoIW5vZGUtPmlz
Q29ubmVjdGVkKCkpIHsKICAgICAgICAgaWYgKGlzPEVsZW1lbnQ+KCpub2RlKSkgewpAQCAtMTIz
LDcgKzEyMyw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpc1JlYWNoYWJsZUZyb21ET00oTm8KICAg
ICByZXR1cm4gdmlzaXRvci5jb250YWluc09wYXF1ZVJvb3Qocm9vdChub2RlKSk7CiB9CiAKLWJv
b2wgSlNOb2RlT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpT
Qzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgU2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNo
YXIqKiByZWFzb24pCitib29sIEpTTm9kZU93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290
cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIEFic3RyYWN0U2xvdFZp
c2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCiB7CiAgICAgSlNOb2RlKiBqc05v
ZGUgPSBqc0Nhc3Q8SlNOb2RlKj4oaGFuZGxlLnNsb3QoKS0+YXNDZWxsKCkpOwogICAgIHJldHVy
biBpc1JlYWNoYWJsZUZyb21ET00oJmpzTm9kZS0+d3JhcHBlZCgpLCB2aXNpdG9yLCByZWFzb24p
OwpAQCAtMTM2LDExICsxMzYsMTQgQEAgSlNTY29wZSogSlNOb2RlOjpwdXNoRXZlbnRIYW5kbGVy
U2NvcGUoSgogICAgIHJldHVybiBub2RlOwogfQogCi12b2lkIEpTTm9kZTo6dmlzaXRBZGRpdGlv
bmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNp
dG9yPgordm9pZCBKU05vZGU6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0
b3IpCiB7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHJvb3Qod3JhcHBlZCgpKSk7CiB9CiAK
K0RFRklORV9WSVNJVF9BRERJVElPTkFMX0NISUxEUkVOKEpTTm9kZSk7CisKIHN0YXRpYyBBTFdB
WVNfSU5MSU5FIEpTVmFsdWUgY3JlYXRlV3JhcHBlcklubGluZShKU0dsb2JhbE9iamVjdCogbGV4
aWNhbEdsb2JhbE9iamVjdCwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmPE5v
ZGU+JiYgbm9kZSkKIHsKICAgICBBU1NFUlQoIWdldENhY2hlZFdyYXBwZXIoZ2xvYmFsT2JqZWN0
LT53b3JsZCgpLCBub2RlKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05v
ZGVJdGVyYXRvckN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNOb2RlSXRlcmF0b3JDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVJdGVyYXRvckN1c3RvbS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA4LCAy
MDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAw
Ni0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YwpAQCAtMjUsMTAgKzI1LDEzIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBKU05v
ZGVJdGVyYXRvcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlz
aXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTTm9kZUl0ZXJhdG9yOjp2
aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGlmIChOb2Rl
RmlsdGVyKiBmaWx0ZXIgPSB3cmFwcGVkKCkuZmlsdGVyKCkpCiAgICAgICAgIHZpc2l0b3IuYWRk
T3BhcXVlUm9vdChmaWx0ZXIpOwogfQogCi19CitERUZJTkVfVklTSVRfQURESVRJT05BTF9DSElM
RFJFTihKU05vZGVJdGVyYXRvcik7CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUxpc3RDdXN0b20uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUxpc3RDdXN0b20uY3BwCShyZXZp
c2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVMaXN0Q3Vz
dG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDctMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMDctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM3LDcgKzM3LDcgQEAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKLWJvb2wgSlNOb2RlTGlzdE93bmVyOjppc1Jl
YWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwg
dm9pZCosIFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQorYm9vbCBK
U05vZGVMaXN0T3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpT
Qzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvciwg
Y29uc3QgY2hhcioqIHJlYXNvbikKIHsKICAgICBKU05vZGVMaXN0KiBqc05vZGVMaXN0ID0ganND
YXN0PEpTTm9kZUxpc3QqPihoYW5kbGUuc2xvdCgpLT5hc0NlbGwoKSk7CiAgICAgaWYgKCFqc05v
ZGVMaXN0LT5oYXNDdXN0b21Qcm9wZXJ0aWVzKGpzTm9kZUxpc3QtPnZtKCkpKQpJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNPZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0
MkRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
T2Zmc2NyZWVuQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcy
ODMwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNPZmZzY3JlZW5DYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTMxLDcgKzMxLDcgQEAgaW5saW5lIHZvaWQqIHJv
b3QoT2Zmc2NyZWVuQ2FudmFzKiBjYW52YQogICAgIHJldHVybiBjYW52YXM7CiB9CiAKLWJvb2wg
SlNPZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRPd25lcjo6aXNSZWFjaGFibGVGcm9t
T3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBTbG90
VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikKK2Jvb2wgSlNPZmZzY3JlZW5D
YW52YXNSZW5kZXJpbmdDb250ZXh0MkRPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMo
SlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBBYnN0cmFjdFNsb3RWaXNp
dG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQogewogICAgIGlmIChVTkxJS0VMWShy
ZWFzb24pKQogICAgICAgICAqcmVhc29uID0gIkNhbnZhcyBpcyBvcGFxdWUgcm9vdCI7CkBAIC00
MSwxMSArNDEsMTQgQEAgYm9vbCBKU09mZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRAog
ICAgIHJldHVybiB2aXNpdG9yLmNvbnRhaW5zT3BhcXVlUm9vdChyb290KTsKIH0KIAotdm9pZCBK
U09mZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRy
ZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9p
ZCBKU09mZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6dmlzaXRBZGRpdGlvbmFsQ2hp
bGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qocm9v
dCgmd3JhcHBlZCgpLmNhbnZhcygpKSk7CiB9CiAKK0RFRklORV9WSVNJVF9BRERJVElPTkFMX0NI
SUxEUkVOKEpTT2Zmc2NyZWVuQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKTsKKwogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQogCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTUGFpbnRSZW5kZXJpbmdDb250ZXh0MkRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUGFpbnRSZW5kZXJpbmdDb250ZXh0MkRDdXN0b20uY3Bw
CShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1BhaW50
UmVuZGVyaW5nQ29udGV4dDJEQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNiw3ICszNiw3IEBA
IGlubGluZSB2b2lkKiByb290KEN1c3RvbVBhaW50Q2FudmFzKiBjYW4KICAgICByZXR1cm4gY2Fu
dmFzOwogfQogCi1ib29sIEpTUGFpbnRSZW5kZXJpbmdDb250ZXh0MkRPd25lcjo6aXNSZWFjaGFi
bGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQq
LCBTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikKK2Jvb2wgSlNQYWlu
dFJlbmRlcmluZ0NvbnRleHQyRE93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6
OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIEFic3RyYWN0U2xvdFZpc2l0b3Im
IHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCiB7CiAgICAgaWYgKFVOTElLRUxZKHJlYXNv
bikpCiAgICAgICAgICpyZWFzb24gPSAiQ2FudmFzIGlzIG9wYXF1ZSByb290IjsKQEAgLTQ2LDEx
ICs0NiwxNCBAQCBib29sIEpTUGFpbnRSZW5kZXJpbmdDb250ZXh0MkRPd25lcjo6aXNSCiAgICAg
cmV0dXJuIHZpc2l0b3IuY29udGFpbnNPcGFxdWVSb290KHJvb3QpOwogfQogCi12b2lkIEpTUGFp
bnRSZW5kZXJpbmdDb250ZXh0MkQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9y
JiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNQYWludFJlbmRl
cmluZ0NvbnRleHQyRDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikK
IHsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qocm9vdCgmd3JhcHBlZCgpLmNhbnZhcygpKSk7
CiB9CiAKK0RFRklORV9WSVNJVF9BRERJVElPTkFMX0NISUxEUkVOKEpTUGFpbnRSZW5kZXJpbmdD
b250ZXh0MkQpOworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAjZW5kaWYKIApJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNQYWludFdvcmtsZXRHbG9iYWxTY29wZUN1c3RvbS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNQYWludFdvcmts
ZXRHbG9iYWxTY29wZUN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTUGFpbnRXb3JrbGV0R2xvYmFsU2NvcGVDdXN0b20uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTMxLDcgKzMxLDggQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVz
cGFjZSBKU0M7CiAKLXZvaWQgSlNQYWludFdvcmtsZXRHbG9iYWxTY29wZTo6dmlzaXRBZGRpdGlv
bmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1l
IFZpc2l0b3I+Cit2b2lkIEpTUGFpbnRXb3JrbGV0R2xvYmFsU2NvcGU6OnZpc2l0QWRkaXRpb25h
bENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9j
ayh3cmFwcGVkKCkucGFpbnREZWZpbml0aW9uTG9jaygpKTsKICAgICBmb3IgKGF1dG8mIHJlZ2lz
dGVyZWQgOiB3cmFwcGVkKCkucGFpbnREZWZpbml0aW9uTWFwKCkudmFsdWVzKCkpIHsKQEAgLTQw
LDUgKzQxLDggQEAgdm9pZCBKU1BhaW50V29ya2xldEdsb2JhbFNjb3BlOjp2aXNpdEFkZAogICAg
IH0KIH0KIAotfQorREVGSU5FX1ZJU0lUX0FERElUSU9OQUxfQ0hJTERSRU4oSlNQYWludFdvcmts
ZXRHbG9iYWxTY29wZSk7CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwogI2VuZGlmCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1BheW1lbnRNZXRob2RDaGFuZ2VFdmVudEN1
c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNQYXlt
ZW50TWV0aG9kQ2hhbmdlRXZlbnRDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1BheW1lbnRNZXRob2RDaGFuZ2VFdmVudEN1c3RvbS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
OC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtNDEsNyArNDEsOCBAQCBKU0M6OkpTVmFsdWUgSlNQYXltZW50TWV0
aG9kQ2hhbmdlRXZlbnQ6CiAgICAgfSk7CiB9CiAKLXZvaWQgSlNQYXltZW50TWV0aG9kQ2hhbmdl
RXZlbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3Ip
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1BheW1lbnRNZXRob2RDaGFuZ2VF
dmVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBX
VEY6OnN3aXRjaE9uKHdyYXBwZWQoKS5tZXRob2REZXRhaWxzKCksIFsmdmlzaXRvcl0oY29uc3Qg
SlNWYWx1ZUluV3JhcHBlZE9iamVjdCYgbWV0aG9kRGV0YWlscykgewogICAgICAgICBtZXRob2RE
ZXRhaWxzLnZpc2l0KHZpc2l0b3IpOwpAQCAtNTEsNiArNTIsOCBAQCB2b2lkIEpTUGF5bWVudE1l
dGhvZENoYW5nZUV2ZW50Ojp2aXNpdEFkCiAgICAgd3JhcHBlZCgpLmNhY2hlZE1ldGhvZERldGFp
bHMoKS52aXNpdCh2aXNpdG9yKTsKIH0KIAorREVGSU5FX1ZJU0lUX0FERElUSU9OQUxfQ0hJTERS
RU4oSlNQYXltZW50TWV0aG9kQ2hhbmdlRXZlbnQpOworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CiAKICNlbmRpZiAvLyBFTkFCTEUoUEFZTUVOVF9SRVFVRVNUKQpJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNQYXltZW50UmVzcG9uc2VDdXN0b20uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUGF5bWVudFJlc3BvbnNlQ3VzdG9tLmNwcAko
cmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNQYXltZW50
UmVzcG9uc2VDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTgtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM3LDExICszNywxNCBAQCBKU0M6OkpT
VmFsdWUgSlNQYXltZW50UmVzcG9uc2U6OmRldGFpbHMoCiAgICAgfSk7CiB9CiAKLXZvaWQgSlNQ
YXltZW50UmVzcG9uc2U6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3Im
IHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1BheW1lbnRSZXNw
b25zZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB3
cmFwcGVkKCkuY2FjaGVkRGV0YWlscygpLnZpc2l0KHZpc2l0b3IpOwogfQogCitERUZJTkVfVklT
SVRfQURESVRJT05BTF9DSElMRFJFTihKU1BheW1lbnRSZXNwb25zZSk7CisKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShQQVlNRU5UX1JFUVVFU1QpCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1BlcmZvcm1hbmNlT2JzZXJ2ZXJDdXN0b20uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUGVyZm9ybWFuY2VP
YnNlcnZlckN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTUGVyZm9ybWFuY2VPYnNlcnZlckN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOC0yMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MzEsMTIgKzMxLDE1IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBKU1BlcmZvcm1h
bmNlT2JzZXJ2ZXI6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZp
c2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1BlcmZvcm1hbmNlT2Jz
ZXJ2ZXI6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAg
d3JhcHBlZCgpLmNhbGxiYWNrKCkudmlzaXRKU0Z1bmN0aW9uKHZpc2l0b3IpOwogfQogCi1ib29s
IEpTUGVyZm9ybWFuY2VPYnNlcnZlck93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhK
U0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIEpTQzo6U2xvdFZpc2l0b3Im
LCBjb25zdCBjaGFyKiogcmVhc29uKQorREVGSU5FX1ZJU0lUX0FERElUSU9OQUxfQ0hJTERSRU4o
SlNQZXJmb3JtYW5jZU9ic2VydmVyKTsKKworYm9vbCBKU1BlcmZvcm1hbmNlT2JzZXJ2ZXJPd25l
cjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBo
YW5kbGUsIHZvaWQqLCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImLCBjb25zdCBjaGFyKiogcmVh
c29uKQogewogICAgIGlmIChVTkxJS0VMWShyZWFzb24pKQogICAgICAgICAqcmVhc29uID0gIlJl
Z2lzdGVyZWQgUGVyZm9ybWFuY2VPYnNlcnZlciBjYWxsYmFjayI7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU1BvcFN0YXRlRXZlbnRDdXN0b20uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUG9wU3RhdGVFdmVudEN1c3RvbS5jcHAJKHJl
dmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUG9wU3RhdGVF
dmVudEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29w
eXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQpAQCAtOTAsOSArOTEsMTIgQEAgSlNWYWx1ZSBKU1Bv
cFN0YXRlRXZlbnQ6OnN0YXRlKEpTR2xvYmFsTwogICAgIHJldHVybiBjYWNoZVN0YXRlKHJlc3Vs
dCk7CiB9CiAKLXZvaWQgSlNQb3BTdGF0ZUV2ZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihK
U0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3Zv
aWQgSlNQb3BTdGF0ZUV2ZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNp
dG9yKQogewogICAgIHdyYXBwZWQoKS5zdGF0ZSgpLnZpc2l0KHZpc2l0b3IpOwogfQogCitERUZJ
TkVfVklTSVRfQURESVRJT05BTF9DSElMRFJFTihKU1BvcFN0YXRlRXZlbnQpOworCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1Byb21p
c2VSZWplY3Rpb25FdmVudEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNQcm9taXNlUmVqZWN0aW9uRXZlbnRDdXN0b20uY3BwCShyZXZpc2lvbiAy
NzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1Byb21pc2VSZWplY3Rpb25F
dmVudEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29w
eXJpZ2h0IChDKSAyMDE4IFl1c3VrZSBTdXp1a2kgPHl1c3VrZXN1enVraUBzbG93c3RhcnQub3Jn
Pi4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMyLDkgKzMzLDEyIEBACiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBKU1Byb21pc2VSZWplY3Rpb25FdmVudDo6dmlzaXRB
ZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5
cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTUHJvbWlzZVJlamVjdGlvbkV2ZW50Ojp2aXNpdEFkZGl0
aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHdyYXBwZWQoKS5yZWFzb24o
KS52aXNpdCh2aXNpdG9yKTsKIH0KIAorREVGSU5FX1ZJU0lUX0FERElUSU9OQUxfQ0hJTERSRU4o
SlNQcm9taXNlUmVqZWN0aW9uRXZlbnQpOworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1Jlc2l6ZU9ic2VydmVyQ3VzdG9tLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1Jlc2l6ZU9ic2VydmVy
Q3VzdG9tLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNSZXNpemVPYnNlcnZlckN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2
IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDIwIElnYWxpYSBTLkwuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC0zMCwxMSArMzEsMTQgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCi12b2lkIEpTUmVzaXplT2JzZXJ2ZXI6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBK
U1Jlc2l6ZU9ic2VydmVyOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9y
KQogewogICAgIFJlc2l6ZU9ic2VydmVyQ2FsbGJhY2sqIGNhbGxiYWNrID0gd3JhcHBlZCgpLmNh
bGxiYWNrQ29uY3VycmVudGx5KCk7CiAgICAgaWYgKGNhbGxiYWNrKQogICAgICAgICBjYWxsYmFj
ay0+dmlzaXRKU0Z1bmN0aW9uKHZpc2l0b3IpOwogfQogCi19CitERUZJTkVfVklTSVRfQURESVRJ
T05BTF9DSElMRFJFTihKU1Jlc2l6ZU9ic2VydmVyKTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNSZXNpemVPYnNlcnZlckVudHJ5
Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1Jl
c2l6ZU9ic2VydmVyRW50cnlDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU1Jlc2l6ZU9ic2VydmVyRW50cnlDdXN0b20uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxOSBJZ2Fs
aWEgUy5MLgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzAsMTAgKzMxLDEzIEBA
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBKU1Jlc2l6ZU9ic2VydmVyRW50cnk6OnZp
c2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0
ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1Jlc2l6ZU9ic2VydmVyRW50cnk6OnZpc2l0QWRk
aXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgdmlzaXRvci5hZGRPcGFx
dWVSb290KHJvb3Qod3JhcHBlZCgpLnRhcmdldCgpKSk7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVS
b290KHdyYXBwZWQoKS5jb250ZW50UmVjdCgpKTsKIH0KIAotfQorREVGSU5FX1ZJU0lUX0FERElU
SU9OQUxfQ0hJTERSRU4oSlNSZXNpemVPYnNlcnZlckVudHJ5KTsKKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNTVkdWaWV3U3BlY0N1
c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNTVkdW
aWV3U3BlY0N1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTU1ZHVmlld1NwZWNDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMwLDEwICsz
MCwxMyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgSlNTVkdWaWV3U3BlYzo6dmlz
aXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRl
PHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTU1ZHVmlld1NwZWM6OnZpc2l0QWRkaXRpb25hbENo
aWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgQVNTRVJUKHdyYXBwZWQoKS5jb250ZXh0
RWxlbWVudENvbmN1cnJlbnRseSgpLmdldCgpKTsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qo
cm9vdCh3cmFwcGVkKCkuY29udGV4dEVsZW1lbnRDb25jdXJyZW50bHkoKS5nZXQoKSkpOwogfQog
Ci19CitERUZJTkVfVklTSVRfQURESVRJT05BTF9DSElMRFJFTihKU1NWR1ZpZXdTcGVjKTsKKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNTZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGVDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU2VydmljZVdvcmtlckdsb2JhbFNjb3BlQ3VzdG9tLmNw
cAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNTZXJ2
aWNlV29ya2VyR2xvYmFsU2NvcGVDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM0LDEyICszNCwx
NSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKLXZvaWQg
SlNTZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGU6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNTZXJ2
aWNlV29ya2VyR2xvYmFsU2NvcGU6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZp
c2l0b3IpCiB7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KCZ3cmFwcGVkKCkuY2xpZW50cygp
KTsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QoJndyYXBwZWQoKS5yZWdpc3RyYXRpb24oKSk7
CiB9CiAKK0RFRklORV9WSVNJVF9BRERJVElPTkFMX0NISUxEUkVOKEpTU2VydmljZVdvcmtlckds
b2JhbFNjb3BlKTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU3RhdGljUmFuZ2VDdXN0b20uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU3RhdGljUmFuZ2VDdXN0b20uY3Bw
CShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1N0YXRp
Y1JhbmdlQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsOSArMzAsMTIgQEAKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIEpTU3RhdGljUmFuZ2U6OnZpc2l0QWRkaXRpb25hbENo
aWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNp
dG9yPgordm9pZCBKU1N0YXRpY1JhbmdlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9y
JiB2aXNpdG9yKQogewogICAgIHdyYXBwZWQoKS52aXNpdE5vZGVzQ29uY3VycmVudGx5KHZpc2l0
b3IpOwogfQogCitERUZJTkVfVklTSVRfQURESVRJT05BTF9DSElMRFJFTihKU1N0YXRpY1Jhbmdl
KTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNTdHlsZVNoZWV0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU1N0eWxlU2hlZXRDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI4MzApCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1N0eWxlU2hlZXRDdXN0b20uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNywgMjAw
OCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTMwLDExICszMCwxNCBAQAogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLXZvaWQgSlNTdHlsZVNoZWV0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNs
b3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNT
dHlsZVNoZWV0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewog
ICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChyb290KCZ3cmFwcGVkKCkpKTsKIH0KIAorREVGSU5F
X1ZJU0lUX0FERElUSU9OQUxfQ0hJTERSRU4oSlNTdHlsZVNoZWV0KTsKKwogSlNDOjpKU1ZhbHVl
IHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTRE9NR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIFJlZjxTdHlsZVNoZWV0PiYmIHN0eWxlU2hlZXQpCiB7CiAgICAgaWYg
KHN0eWxlU2hlZXQtPmlzQ1NTU3R5bGVTaGVldCgpKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNUZXh0VHJhY2tDdWVDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTVGV4dFRyYWNrQ3VlQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcy
ODMwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNUZXh0VHJhY2tDdWVDdXN0b20u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTEtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTM4LDcgKzM4LDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVz
aW5nIG5hbWVzcGFjZSBKU0M7CiAKLWJvb2wgSlNUZXh0VHJhY2tDdWVPd25lcjo6aXNSZWFjaGFi
bGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQq
LCBTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikKK2Jvb2wgSlNUZXh0
VHJhY2tDdWVPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlND
OjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBj
b25zdCBjaGFyKiogcmVhc29uKQogewogICAgIEpTVGV4dFRyYWNrQ3VlKiBqc1RleHRUcmFja0N1
ZSA9IGpzQ2FzdDxKU1RleHRUcmFja0N1ZSo+KGhhbmRsZS5zbG90KCktPmFzQ2VsbCgpKTsKICAg
ICBUZXh0VHJhY2tDdWUmIHRleHRUcmFja0N1ZSA9IGpzVGV4dFRyYWNrQ3VlLT53cmFwcGVkKCk7
CkBAIC04MiwxMiArODIsMTUgQEAgSlNWYWx1ZSB0b0pTKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2Fs
R2xvYgogICAgIHJldHVybiB3cmFwKGxleGljYWxHbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdCwg
Y3VlKTsKIH0KIAotdm9pZCBKU1RleHRUcmFja0N1ZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4o
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBK
U1RleHRUcmFja0N1ZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikK
IHsKICAgICBpZiAoVGV4dFRyYWNrKiB0ZXh0VHJhY2sgPSB3cmFwcGVkKCkudHJhY2soKSkKICAg
ICAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHJvb3QodGV4dFRyYWNrKSk7CiB9CiAKK0RFRklO
RV9WSVNJVF9BRERJVElPTkFMX0NISUxEUkVOKEpTVGV4dFRyYWNrQ3VlKTsKKwogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQogCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTVGV4dFRyYWNrQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU1RleHRUcmFja0N1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVGV4dFRyYWNrQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0zNiwxMSArMzYsMTQgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBK
U0M7CiAKLXZvaWQgSlNUZXh0VHJhY2s6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNp
dG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNUZXh0VHJh
Y2s6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgdmlz
aXRvci5hZGRPcGFxdWVSb290KHJvb3QoJndyYXBwZWQoKSkpOwogfQogCitERUZJTkVfVklTSVRf
QURESVRJT05BTF9DSElMRFJFTihKU1RleHRUcmFjayk7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKIAogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1RleHRUcmFj
a0xpc3RDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTVGV4dFRyYWNrTGlzdEN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTVGV4dFRyYWNrTGlzdEN1c3RvbS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDIxIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtMzYsMTEgKzM2LDE0IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2Ug
SlNDOwogCi12b2lkIEpTVGV4dFRyYWNrTGlzdDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlND
OjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lk
IEpTVGV4dFRyYWNrTGlzdDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRv
cikKIHsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qocm9vdCh3cmFwcGVkKCkuZWxlbWVudCgp
KSk7CiB9CiAgICAgCitERUZJTkVfVklTSVRfQURESVRJT05BTF9DSElMRFJFTihKU1RleHRUcmFj
a0xpc3QpOworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZgpJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNUcmVlV2Fsa2VyQ3VzdG9tLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1RyZWVXYWxrZXJDdXN0b20uY3BwCShyZXZp
c2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1RyZWVXYWxrZXJD
dXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAwNiwgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI1LDEwICsyNSwxMyBAQAogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLXZvaWQgSlNUcmVlV2Fsa2VyOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6
OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQg
SlNUcmVlV2Fsa2VyOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQog
ewogICAgIGlmIChOb2RlRmlsdGVyKiBmaWx0ZXIgPSB3cmFwcGVkKCkuZmlsdGVyKCkpCiAgICAg
ICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChmaWx0ZXIpOwogfQogCi19CitERUZJTkVfVklTSVRf
QURESVRJT05BTF9DSElMRFJFTihKU1RyZWVXYWxrZXIpOworCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1VuZG9JdGVtQ3VzdG9tLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1VuZG9JdGVtQ3Vz
dG9tLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNVbmRvSXRlbUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxOS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjksMTMgKzI5LDE2IEBACiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBKU1VuZG9JdGVtOjp2aXNpdEFkZGl0aW9uYWxDaGls
ZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRv
cj4KK3ZvaWQgSlNVbmRvSXRlbTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlz
aXRvcikKIHsKICAgICB3cmFwcGVkKCkudW5kb0hhbmRsZXIoKS52aXNpdEpTRnVuY3Rpb24odmlz
aXRvcik7CiAgICAgd3JhcHBlZCgpLnJlZG9IYW5kbGVyKCkudmlzaXRKU0Z1bmN0aW9uKHZpc2l0
b3IpOwogfQogCi1ib29sIEpTVW5kb0l0ZW1Pd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9v
dHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBKU0M6OlNsb3RWaXNp
dG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQorREVGSU5FX1ZJU0lUX0FERElUSU9O
QUxfQ0hJTERSRU4oSlNVbmRvSXRlbSk7CisKK2Jvb2wgSlNVbmRvSXRlbU93bmVyOjppc1JlYWNo
YWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9p
ZCosIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNv
bikKIHsKICAgICBpZiAoVU5MSUtFTFkocmVhc29uKSkKICAgICAgICAgKnJlYXNvbiA9ICJEb2N1
bWVudCBpcyBhbiBvcGFxdWUgcm9vdC4iOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNWYWx1ZUluV3JhcHBlZE9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTVmFsdWVJbldyYXBwZWRPYmplY3QuaAkocmV2aXNpb24gMjcyODMwKQor
KysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNWYWx1ZUluV3JhcHBlZE9iamVjdC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC00MCw3ICs0MCw3IEBAIHB1YmxpYzoKICAgICBvcGVyYXRvciBKU0M6OkpTVmFs
dWUoKSBjb25zdDsKICAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3Q7CiAgICAgSlNW
YWx1ZUluV3JhcHBlZE9iamVjdCYgb3BlcmF0b3I9KGNvbnN0IEpTVmFsdWVJbldyYXBwZWRPYmpl
Y3QmIG90aGVyKTsKLSAgICB2b2lkIHZpc2l0KEpTQzo6U2xvdFZpc2l0b3ImKSBjb25zdDsKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIHZpc2l0KFZpc2l0b3ImKSBjb25zdDsK
ICAgICB2b2lkIGNsZWFyKCk7CiAKIHByaXZhdGU6CkBAIC05OCw3ICs5OCw4IEBAIGlubGluZSBK
U1ZhbHVlSW5XcmFwcGVkT2JqZWN0JiBKU1ZhbHVlSW4KICAgICByZXR1cm4gKnRoaXM7CiB9CiAK
LWlubGluZSB2b2lkIEpTVmFsdWVJbldyYXBwZWRPYmplY3Q6OnZpc2l0KEpTQzo6U2xvdFZpc2l0
b3ImIHZpc2l0b3IpIGNvbnN0Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgoraW5saW5lIHZv
aWQgSlNWYWx1ZUluV3JhcHBlZE9iamVjdDo6dmlzaXQoVmlzaXRvciYgdmlzaXRvcikgY29uc3QK
IHsKICAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbihtX3ZhbHVlLCBbXSAoSlNDOjpKU1ZhbHVlKSB7
CiAgICAgICAgIC8vIE5vdGhpbmcgdG8gdmlzaXQuCkBAIC0xMDcsNiArMTA4LDkgQEAgaW5saW5l
IHZvaWQgSlNWYWx1ZUluV3JhcHBlZE9iamVjdDo6dmlzaQogICAgIH0pOwogfQogCit0ZW1wbGF0
ZSB2b2lkIEpTVmFsdWVJbldyYXBwZWRPYmplY3Q6OnZpc2l0KEpTQzo6QWJzdHJhY3RTbG90Vmlz
aXRvciYpIGNvbnN0OwordGVtcGxhdGUgdm9pZCBKU1ZhbHVlSW5XcmFwcGVkT2JqZWN0Ojp2aXNp
dChKU0M6OlNsb3RWaXNpdG9yJikgY29uc3Q7CisKIGlubGluZSB2b2lkIEpTVmFsdWVJbldyYXBw
ZWRPYmplY3Q6OmNsZWFyKCkKIHsKICAgICBXVEY6OnN3aXRjaE9uKG1fdmFsdWUsIFtdIChXZWFr
JiB2YWx1ZSkgewpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNWaWRlb1RyYWNr
Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1Zp
ZGVvVHJhY2tDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU1ZpZGVvVHJhY2tDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM1LDExICsz
NSwxNCBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAotdm9p
ZCBKU1ZpZGVvVHJhY2s6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNp
dG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNWaWRlb1RyYWNrOjp2aXNp
dEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHZpc2l0b3IuYWRk
T3BhcXVlUm9vdChyb290KCZ3cmFwcGVkKCkpKTsKIH0KIAorREVGSU5FX1ZJU0lUX0FERElUSU9O
QUxfQ0hJTERSRU4oSlNWaWRlb1RyYWNrKTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAj
ZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVmlkZW9UcmFja0xpc3RD
dXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVmlk
ZW9UcmFja0xpc3RDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU1ZpZGVvVHJhY2tMaXN0Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0z
NSwxMSArMzUsMTQgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBKU0M7
CiAKLXZvaWQgSlNWaWRlb1RyYWNrTGlzdDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZp
c2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1ZpZGVv
VHJhY2tMaXN0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewog
ICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChyb290KHdyYXBwZWQoKS5lbGVtZW50KCkpKTsKIH0K
IAorREVGSU5FX1ZJU0lUX0FERElUSU9OQUxfQ0hJTERSRU4oSlNWaWRlb1RyYWNrTGlzdCk7CisK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU1dlYkdMMlJlbmRlcmluZ0NvbnRleHRDdXN0b20uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViR0wyUmVuZGVyaW5nQ29udGV4dEN1
c3RvbS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTV2ViR0wyUmVuZGVyaW5nQ29udGV4dEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0z
MywxMiArMzMsMTUgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBKU0M7
CiAKLXZvaWQgSlNXZWJHTDJSZW5kZXJpbmdDb250ZXh0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJl
bihTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lk
IEpTV2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRv
ciYgdmlzaXRvcikKIHsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QoJndyYXBwZWQoKSk7CiAg
ICAgd3JhcHBlZCgpLmFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKHZpc2l0b3IpOwogfQogCitERUZJ
TkVfVklTSVRfQURESVRJT05BTF9DSElMRFJFTihKU1dlYkdMMlJlbmRlcmluZ0NvbnRleHQpOwor
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoV0VCR0wpCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYkdMUmVuZGVyaW5nQ29udGV4dEN1c3Rv
bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJHTFJl
bmRlcmluZ0NvbnRleHRDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU1dlYkdMUmVuZGVyaW5nQ29udGV4dEN1c3RvbS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMzMsMTIgKzMzLDE1IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1l
c3BhY2UgSlNDOwogCi12b2lkIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2aXNpdEFkZGl0aW9u
YWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0
b3I+Cit2b2lkIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJl
bihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdCgmd3JhcHBl
ZCgpKTsKICAgICB3cmFwcGVkKCkuYWRkTWVtYmVyc1RvT3BhcXVlUm9vdHModmlzaXRvcik7CiB9
CiAKK0RFRklORV9WSVNJVF9BRERJVElPTkFMX0NISUxEUkVOKEpTV2ViR0xSZW5kZXJpbmdDb250
ZXh0KTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQkdM
KQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrZXJHbG9iYWxTY29wZUJh
c2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2Vy
R2xvYmFsU2NvcGVCYXNlLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNXb3JrZXJHbG9iYWxTY29wZUJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSwgMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29v
Z2xlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTkyLDcg
KzkyLDggQEAgdm9pZCBKU1dvcmtlckdsb2JhbFNjb3BlQmFzZTo6ZmluaXNoQ3JlYQogICAgIEFT
U0VSVChpbmhlcml0cyh2bSwgaW5mbygpKSk7CiB9CiAKLXZvaWQgSlNXb3JrZXJHbG9iYWxTY29w
ZUJhc2U6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikK
K3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTV29ya2VyR2xvYmFsU2NvcGVCYXNl
Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAg
ICAgSlNXb3JrZXJHbG9iYWxTY29wZUJhc2UqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNXb3JrZXJH
bG9iYWxTY29wZUJhc2UqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRo
aXNPYmplY3QsIGluZm8oKSk7CkBAIC0xMDAsNiArMTAxLDggQEAgdm9pZCBKU1dvcmtlckdsb2Jh
bFNjb3BlQmFzZTo6dmlzaXRDaGlsZAogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1f
cHJveHkpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNXb3JrZXJHbG9iYWxTY29wZUJh
c2UpOworCiB2b2lkIEpTV29ya2VyR2xvYmFsU2NvcGVCYXNlOjpkZXN0cm95KEpTQ2VsbCogY2Vs
bCkKIHsKICAgICBzdGF0aWNfY2FzdDxKU1dvcmtlckdsb2JhbFNjb3BlQmFzZSo+KGNlbGwpLT5K
U1dvcmtlckdsb2JhbFNjb3BlQmFzZTo6fkpTV29ya2VyR2xvYmFsU2NvcGVCYXNlKCk7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckdsb2JhbFNjb3BlQmFzZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyR2xvYmFsU2Nv
cGVCYXNlLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTV29ya2VyR2xvYmFsU2NvcGVCYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNzksNyArNzks
NyBAQCBwcm90ZWN0ZWQ6CiAgICAgSlNXb3JrZXJHbG9iYWxTY29wZUJhc2UoSlNDOjpWTSYsIEpT
Qzo6U3RydWN0dXJlKiwgUmVmUHRyPFdvcmtlckdsb2JhbFNjb3BlPiYmKTsKICAgICB2b2lkIGZp
bmlzaENyZWF0aW9uKEpTQzo6Vk0mLCBKU0M6OkpTUHJveHkqKTsKIAotICAgIHN0YXRpYyB2b2lk
IHZpc2l0Q2hpbGRyZW4oSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJik7CisgICAgREVD
TEFSRV9WSVNJVF9DSElMRFJFTjsKIAogcHJpdmF0ZToKICAgICBSZWZQdHI8V29ya2VyR2xvYmFs
U2NvcGU+IG1fd3JhcHBlZDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29y
a2VyR2xvYmFsU2NvcGVDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTV29ya2VyR2xvYmFsU2NvcGVDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI4MzAp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckdsb2JhbFNjb3BlQ3VzdG9t
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDgtMjAwOSwgMjAxMSwgMjAxNiBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAyMSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMzLDcgKzMzLDggQEAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKLXZvaWQgSlNXb3JrZXJHbG9i
YWxTY29wZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0
ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1dvcmtlckdsb2JhbFNjb3BlOjp2aXNp
dEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGlmIChhdXRvKiBs
b2NhdGlvbiA9IHdyYXBwZWQoKS5vcHRpb25hbExvY2F0aW9uKCkpCiAgICAgICAgIHZpc2l0b3Iu
YWRkT3BhcXVlUm9vdChsb2NhdGlvbik7CkBAIC00OCw2ICs0OSw4IEBAIHZvaWQgSlNXb3JrZXJH
bG9iYWxTY29wZTo6dmlzaXRBZGRpdGlvbmEKICAgICB3cmFwcGVkKCkudmlzaXRKU0V2ZW50TGlz
dGVuZXJzKHZpc2l0b3IpOwogfQogCitERUZJTkVfVklTSVRfQURESVRJT05BTF9DSElMRFJFTihK
U1dvcmtlckdsb2JhbFNjb3BlKTsKKwogSlNWYWx1ZSBKU1dvcmtlckdsb2JhbFNjb3BlOjpxdWV1
ZU1pY3JvdGFzayhKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZyYW1l
JiBjYWxsRnJhbWUpCiB7CiAgICAgVk0mIHZtID0gbGV4aWNhbEdsb2JhbE9iamVjdC52bSgpOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrZXJOYXZpZ2F0b3JDdXN0b20u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyTmF2
aWdhdG9yQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNXb3JrZXJOYXZpZ2F0b3JDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI4LDkg
KzI4LDEyIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBKU1dvcmtlck5hdmlnYXRv
cjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3Rl
bXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTV29ya2VyTmF2aWdhdG9yOjp2aXNpdEFk
ZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHZpc2l0b3IuYWRkT3Bh
cXVlUm9vdChzdGF0aWNfY2FzdDxOYXZpZ2F0b3JCYXNlKj4oJndyYXBwZWQoKSkpOwogfQogCi19
CitERUZJTkVfVklTSVRfQURESVRJT05BTF9DSElMRFJFTihKU1dvcmtlck5hdmlnYXRvcik7CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTV29ya2xldEdsb2JhbFNjb3BlQmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNXb3JrbGV0R2xvYmFsU2NvcGVCYXNlLmNwcAkocmV2aXNpb24gMjcy
ODMwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrbGV0R2xvYmFsU2NvcGVC
YXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE4LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC04Miw3ICs4Miw4IEBAIHZvaWQgSlNXb3JrbGV0R2xvYmFs
U2NvcGVCYXNlOjpmaW5pc2hDcmUKICAgICBBU1NFUlQoaW5oZXJpdHModm0sIGluZm8oKSkpOwog
fQogCi12b2lkIEpTV29ya2xldEdsb2JhbFNjb3BlQmFzZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwq
IGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4K
K3ZvaWQgSlNXb3JrbGV0R2xvYmFsU2NvcGVCYXNlOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwq
IGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2Fz
dDxKU1dvcmtsZXRHbG9iYWxTY29wZUJhc2UqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNU
X0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC05MCw2ICs5MSw4IEBAIHZvaWQgSlNX
b3JrbGV0R2xvYmFsU2NvcGVCYXNlOjp2aXNpdENoaWwKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlz
T2JqZWN0LT5tX3Byb3h5KTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTV29ya2xldEds
b2JhbFNjb3BlQmFzZSk7CisKIHZvaWQgSlNXb3JrbGV0R2xvYmFsU2NvcGVCYXNlOjpkZXN0cm95
KEpTQ2VsbCogY2VsbCkKIHsKICAgICBzdGF0aWNfY2FzdDxKU1dvcmtsZXRHbG9iYWxTY29wZUJh
c2UqPihjZWxsKS0+SlNXb3JrbGV0R2xvYmFsU2NvcGVCYXNlOjp+SlNXb3JrbGV0R2xvYmFsU2Nv
cGVCYXNlKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtsZXRHbG9i
YWxTY29wZUJhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U1dvcmtsZXRHbG9iYWxTY29wZUJhc2UuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNXb3JrbGV0R2xvYmFsU2NvcGVCYXNlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOC0yMDIxIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtNjcsNyArNjcsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgSlNXb3JrbGV0R2xvYmFsU2NvcGVCYXNl
KEpTQzo6Vk0mLCBKU0M6OlN0cnVjdHVyZSosIFJlZlB0cjxXb3JrbGV0R2xvYmFsU2NvcGU+JiYp
OwogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYsIEpTQzo6SlNQcm94eSopOwogCi0g
ICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0
b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiBwcml2YXRlOgogICAgIFJlZlB0
cjxXb3JrbGV0R2xvYmFsU2NvcGU+IG1fd3JhcHBlZDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTWE1MSHR0cFJlcXVlc3RDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTWE1MSHR0cFJlcXVlc3RDdXN0b20uY3BwCShyZXZpc2lv
biAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1hNTEh0dHBSZXF1ZXN0
Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDA4LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00MSw3ICs0MSw4IEBACiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCi12b2lkIEpTWE1MSHR0cFJlcXVlc3Q6
OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8
dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNYTUxIdHRwUmVxdWVzdDo6dmlzaXRBZGRpdGlvbmFs
Q2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBpZiAoYXV0byogdXBsb2FkID0gd3Jh
cHBlZCgpLm9wdGlvbmFsVXBsb2FkKCkpCiAgICAgICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdCh1
cGxvYWQpOwpAQCAtNTAsNiArNTEsOCBAQCB2b2lkIEpTWE1MSHR0cFJlcXVlc3Q6OnZpc2l0QWRk
aXRpb25hbENoCiAgICAgICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChyZXNwb25zZURvY3VtZW50
KTsKIH0KIAorREVGSU5FX1ZJU0lUX0FERElUSU9OQUxfQ0hJTERSRU4oSlNYTUxIdHRwUmVxdWVz
dCk7CisKIEpTVmFsdWUgSlNYTUxIdHRwUmVxdWVzdDo6cmVzcG9uc2UoSlNHbG9iYWxPYmplY3Qm
IGxleGljYWxHbG9iYWxPYmplY3QpIGNvbnN0CiB7CiAgICAgYXV0byBjYWNoZVJlc3VsdCA9IFsm
XSAoSlNWYWx1ZSB2YWx1ZSkgLT4gSlNWYWx1ZSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU1hQYXRoUmVzdWx0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU1hQYXRoUmVzdWx0Q3VzdG9tLmNwcAkocmV2aXNpb24gMjcyODMw
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNYUGF0aFJlc3VsdEN1c3RvbS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDEx
IEp1bGllbiBDaGFmZnJhaXggPGpjaGFmZnJhaXhAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAo
QykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTMxLDcgKzMyLDggQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci12b2lkIEpTWFBhdGhSZXN1bHQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZp
c2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1hQYXRo
UmVzdWx0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAg
IGF1dG8mIHZhbHVlID0gd3JhcHBlZCgpLnZhbHVlKCk7CiAgICAgaWYgKHZhbHVlLmlzTm9kZVNl
dCgpKSB7CkBAIC00MSw0ICs0Myw2IEBAIHZvaWQgSlNYUGF0aFJlc3VsdDo6dmlzaXRBZGRpdGlv
bmFsQ2hpbGQKICAgICB9CiB9CiAKK0RFRklORV9WSVNJVF9BRERJVElPTkFMX0NISUxEUkVOKEpT
WFBhdGhSZXN1bHQpOworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dlYkNvcmVUeXBlZEFycmF5Q29udHJv
bGxlci5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L1dlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTYsNyArNTYs
NyBAQCBib29sIFdlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlcjo6aXNBdG9tCiAgICAgcmV0dXJu
IG1fYWxsb3dBdG9taWNzV2FpdDsKIH0KIAotYm9vbCBXZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xs
ZXI6OkpTQXJyYXlCdWZmZXJPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpI
YW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBKU0M6OlNsb3RWaXNpdG9yJiB2aXNp
dG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQorYm9vbCBXZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xs
ZXI6OkpTQXJyYXlCdWZmZXJPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpI
YW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0
b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCiB7CiAgICAgaWYgKFVOTElLRUxZKHJl
YXNvbikpCiAgICAgICAgICpyZWFzb24gPSAiQXJyYXlCdWZmZXIgaXMgb3BhcXVlIHJvb3QiOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV2ViQ29yZVR5cGVkQXJyYXlDb250cm9s
bGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV2ViQ29yZVR5
cGVkQXJyYXlDb250cm9sbGVyLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL1dlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlci5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTQ4LDcgKzQ4LDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBjbGFzcyBKU0FycmF5QnVmZmVy
T3duZXIgOiBwdWJsaWMgSlNDOjpXZWFrSGFuZGxlT3duZXIgewogICAgIHB1YmxpYzoKLSAgICAg
ICAgYm9vbCBpc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25v
d24+LCB2b2lkKiBjb250ZXh0LCBKU0M6OlNsb3RWaXNpdG9yJiwgY29uc3QgY2hhcioqKSBvdmVy
cmlkZTsKKyAgICAgICAgYm9vbCBpc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRs
ZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0LCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3Im
LCBjb25zdCBjaGFyKiopIG92ZXJyaWRlOwogICAgICAgICB2b2lkIGZpbmFsaXplKEpTQzo6SGFu
ZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQpIG92ZXJyaWRlOwogICAgIH07CiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRv
ckpTLnBtCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL0NvZGVHZW5lcmF0b3JKUy5wbQkod29ya2luZyBjb3B5KQpAQCAtMyw3ICszLDcgQEAKICMg
Q29weXJpZ2h0IChDKSAyMDA2IEFuZGVycyBDYXJsc3NvbiA8YW5kZXJzY2FAbWFjLmNvbT4KICMg
Q29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IFNhbXVlbCBXZWluaWcgPHNhbUB3ZWJraXQub3JnPgog
IyBDb3B5cmlnaHQgKEMpIDIwMDYgQWxleGV5IFByb3NrdXJ5YWtvdiA8YXBAd2Via2l0Lm9yZz4K
LSMgQ29weXJpZ2h0IChDKSAyMDA2LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorIyBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAjIENvcHlyaWdodCAoQykgMjAwOSBDYW1lcm9uIE1jQ29ybWFjayA8Y2FtQG1jYy5pZC5h
dT4KICMgQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogIyBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24g
YW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCkBAIC0zMDc4LDggKzMwNzgsOCBAQCBzdWIgR2Vu
ZXJhdGVIZWFkZXIKIAogICAgICMgdmlzaXQgZnVuY3Rpb24KICAgICBpZiAoJG5lZWRzVmlzaXRD
aGlsZHJlbikgewotICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHN0YXRpYyB2b2lk
IHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpO1xuIik7Ci0gICAgICAg
IHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgdm9pZCB2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihK
U0M6OlNsb3RWaXNpdG9yJik7XG4iKSBpZiAkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMt
PntKU0N1c3RvbU1hcmtGdW5jdGlvbn07CisgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIg
ICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjtcbiIpOworICAgICAgICBwdXNoKEBoZWFkZXJDb250
ZW50LCAiICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgdmlzaXRBZGRpdGlvbmFs
Q2hpbGRyZW4oVmlzaXRvciYpO1xuIikgaWYgJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVz
LT57SlNDdXN0b21NYXJrRnVuY3Rpb259OwogICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAi
XG4iKTsKIAogICAgICAgICBpZiAoJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57SlND
dXN0b21NYXJrRnVuY3Rpb259KSB7CkBAIC0zMDk0LDcgKzMwOTQsNyBAQCBzdWIgR2VuZXJhdGVI
ZWFkZXIKICAgICAgICAgICAgICMgdGhhdCB0aGUgR0MgY2FsbHMgdG8gYXNrIGFuIG9iamVjdCBp
cyBpdCB3b3VsZCBsaWtlIHRvIG1hcmsgYW55dGhpbmcgZWxzZSBhZnRlciB0aGUKICAgICAgICAg
ICAgICMgcHJvZ3JhbSByZXN1bWVkIHNpbmNlIHRoZSBsYXN0IGNhbGwgdG8gdmlzaXRDaGlsZHJl
biBvciB2aXNpdE91dHB1dENvbnN0cmFpbnRzLiBTaW5jZQogICAgICAgICAgICAgIyB0aGlzIGp1
c3QgY2FsbHMgdmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4sIHlvdSB1c3VhbGx5IGRvbid0IGhhdmUg
dG8gd29ycnkgYWJvdXQgdGhpcy4KLSAgICAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIg
ICAgc3RhdGljIHZvaWQgdmlzaXRPdXRwdXRDb25zdHJhaW50cyhKU0NlbGwqLCBKU0M6OlNsb3RW
aXNpdG9yJik7XG4iKTsKKyAgICAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgdGVt
cGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gc3RhdGljIHZvaWQgdmlzaXRPdXRwdXRDb25zdHJhaW50
cyhKU0NlbGwqLCBWaXNpdG9yJik7XG4iKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMzIxNSw3
ICszMjE1LDcgQEAgc3ViIEdlbmVyYXRlSGVhZGVyCiAgICAgICAgIH0KICAgICAgICAgJGhlYWRl
ckluY2x1ZGVzeyI8d3RmL05ldmVyRGVzdHJveWVkLmg+In0gPSAxOwogICAgICAgICBwdXNoKEBo
ZWFkZXJDb250ZW50LCAicHVibGljOlxuIik7Ci0gICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQs
ICIgICAgYm9vbCBpc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVu
a25vd24+LCB2b2lkKiBjb250ZXh0LCBKU0M6OlNsb3RWaXNpdG9yJiwgY29uc3QgY2hhcioqKSAk
e292ZXJyaWRlRGVjbH07XG4iKTsKKyAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICBi
b29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4s
IHZvaWQqIGNvbnRleHQsIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYsIGNvbnN0IGNoYXIqKikg
JHtvdmVycmlkZURlY2x9O1xuIik7CiAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAg
dm9pZCBmaW5hbGl6ZShKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0KSAk
e292ZXJyaWRlRGVjbH07XG4iKTsKICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIn07XG4i
KTsKICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIlxuIik7CkBAIC00OTM5LDYgKzQ5Mzks
NyBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJE
T01Jc29TdWJzcGFjZXMuaCIpOwogICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJXZWJDb3JlSlNDbGll
bnREYXRhLmgiKTsKICAgICBBZGRUb0ltcGxJbmNsdWRlcygiPEphdmFTY3JpcHRDb3JlL0pTRGVz
dHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLmg+Iik7CisgICAgQWRkVG9JbXBsSW5jbHVkZXMo
IjxKYXZhU2NyaXB0Q29yZS9TbG90VmlzaXRvck1hY3Jvcy5oPiIpOwogICAgIEFkZFRvSW1wbElu
Y2x1ZGVzKCI8SmF2YVNjcmlwdENvcmUvU3Vic3BhY2VJbmxpbmVzLmg+Iik7CiAgICAgcHVzaChA
aW1wbENvbnRlbnQsICJKU0M6Oklzb1N1YnNwYWNlKiAke2NsYXNzTmFtZX06OnN1YnNwYWNlRm9y
SW1wbChKU0M6OlZNJiB2bSlcbiIpOwogICAgIHB1c2goQGltcGxDb250ZW50LCAie1xuIik7CkBA
IC00OTU4LDcgKzQ5NTksMTAgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICBwdXNo
KEBpbXBsQ29udGVudCwgIiAgICBhdXRvKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yJHtp
bnRlcmZhY2VOYW1lfS5nZXQoKTtcbiIpOwogICAgIHB1c2goQGltcGxDb250ZW50LCAiSUdOT1JF
X1dBUk5JTkdTX0JFR0lOKFwidW5yZWFjaGFibGUtY29kZVwiKVxuIik7CiAgICAgcHVzaChAaW1w
bENvbnRlbnQsICJJR05PUkVfV0FSTklOR1NfQkVHSU4oXCJ0YXV0b2xvZ2ljYWwtY29tcGFyZVwi
KVxuIik7Ci0gICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgaWYgKCYke2NsYXNzTmFtZX06OnZp
c2l0T3V0cHV0Q29uc3RyYWludHMgIT0gJkpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFp
bnRzKVxuIik7CisgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgdm9pZCAoKm15VmlzaXRPdXRw
dXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9ICR7Y2xhc3NO
YW1lfTo6dmlzaXRPdXRwdXRDb25zdHJhaW50cztcbiIpOworICAgIHB1c2goQGltcGxDb250ZW50
LCAiICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwg
SlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7
XG4iKTsKKyAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0
cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KVxuIik7CisjICAgIHB1c2goQGlt
cGxDb250ZW50LCAiICAgIGlmICgmJHtjbGFzc05hbWV9Ojp2aXNpdE91dHB1dENvbnN0cmFpbnRz
ICE9ICZKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50cylcbiIpOwogICAgIHB1c2go
QGltcGxDb250ZW50LCAiICAgICAgICBjbGllbnREYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMo
KS5hcHBlbmQoc3BhY2UpO1xuIik7CiAgICAgcHVzaChAaW1wbENvbnRlbnQsICJJR05PUkVfV0FS
TklOR1NfRU5EXG4iKTsKICAgICBwdXNoKEBpbXBsQ29udGVudCwgIklHTk9SRV9XQVJOSU5HU19F
TkRcbiIpOwpAQCAtNDk2Niw3ICs0OTcwLDggQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24K
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgIn1cblxuIik7CiAKICAgICBpZiAoJG5lZWRzVmlzaXRD
aGlsZHJlbikgewotICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgInZvaWQgJHtjbGFzc05hbWV9
Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpXG4iKTsK
KyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPlxu
Iik7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAidm9pZCAke2NsYXNzTmFtZX06OnZpc2l0
Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcilcbiIpOwogICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgIntcbiIpOwogICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwg
IiAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PCR7Y2xhc3NOYW1lfSo+KGNlbGwpO1xuIik7
CiAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJ
VFModGhpc09iamVjdCwgaW5mbygpKTtcbiIpOwpAQCAtNDk5MSwxNCArNDk5NiwxOSBAQCBzdWIg
R2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAg
IHB1c2goQGltcGxDb250ZW50LCAifVxuXG4iKTsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICJERUZJTkVfVklTSVRfQ0hJTERSRU4oJHtjbGFzc05hbWV9KTtcblxuIik7CisKICAgICAgICAg
aWYgKCRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+e0pTQ3VzdG9tTWFya0Z1bmN0aW9u
fSkgewotICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ2b2lkICR7Y2xhc3NOYW1lfTo6
dmlzaXRPdXRwdXRDb25zdHJhaW50cyhKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9y
KVxuIik7CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgInRlbXBsYXRlPHR5cGVuYW1l
IFZpc2l0b3I+XG4iKTsKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAidm9pZCAke2Ns
YXNzTmFtZX06OnZpc2l0T3V0cHV0Q29uc3RyYWludHMoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2
aXNpdG9yKVxuIik7CiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIntcbiIpOwogICAg
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2Fz
dDwke2NsYXNzTmFtZX0qPihjZWxsKTtcbiIpOwogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRl
bnQsICIgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpO1xu
Iik7CiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBCYXNlOjp2aXNpdE91dHB1
dENvbnN0cmFpbnRzKHRoaXNPYmplY3QsIHZpc2l0b3IpO1xuIik7CiAgICAgICAgICAgICBwdXNo
KEBpbXBsQ29udGVudCwgIiAgICB0aGlzT2JqZWN0LT52aXNpdEFkZGl0aW9uYWxDaGlsZHJlbih2
aXNpdG9yKTtcbiIpOwogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ9XG5cbiIpOwor
ICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ0ZW1wbGF0ZSB2b2lkICR7Y2xhc3NOYW1l
fTo6dmlzaXRPdXRwdXRDb25zdHJhaW50cyhKU0NlbGwqLCBBYnN0cmFjdFNsb3RWaXNpdG9yJik7
XG4iKTsKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAidGVtcGxhdGUgdm9pZCAke2Ns
YXNzTmFtZX06OnZpc2l0T3V0cHV0Q29uc3RyYWludHMoSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTtc
biIpOwogICAgICAgICB9CiAgICAgfQogCkBAIC01MDMzLDcgKzUwNDMsNyBAQCBzdWIgR2VuZXJh
dGVJbXBsZW1lbnRhdGlvbgogICAgIH0KIAogICAgIGlmIChTaG91bGRHZW5lcmF0ZVdyYXBwZXJP
d25lckNvZGUoJGhhc1BhcmVudCwgJGludGVyZmFjZSkgJiYgIUdldEN1c3RvbUlzUmVhY2hhYmxl
KCRpbnRlcmZhY2UpKSB7Ci0gICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiYm9vbCBKUyR7aW50
ZXJmYWNlTmFtZX1Pd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8
SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3Qg
Y2hhcioqIHJlYXNvbilcbiIpOworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgImJvb2wgSlMk
e2ludGVyZmFjZU5hbWV9T3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFu
ZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgQWJzdHJhY3RTbG90VmlzaXRvciYgdmlz
aXRvciwgY29uc3QgY2hhcioqIHJlYXNvbilcbiIpOwogICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIntcbiIpOwogICAgICAgICAjIEFsbCBBY3RpdmVET01PYmplY3RzIGltcGxlbWVudCBoYXNQ
ZW5kaW5nQWN0aXZpdHkoKSwgYnV0IG5vdCBhbGwgb2YgdGhlbQogICAgICAgICAjIGluY3JlbWVu
dCB0aGVpciBDKysgcmVmZXJlbmNlIGNvdW50cyB3aGVuIGhhc1BlbmRpbmdBY3Rpdml0eSgpIGJl
Y29tZXMKQEAgLTY0MzIsNiArNjQ0Miw3IEBAIHN1YiBHZW5lcmF0ZUNhbGxiYWNrSGVhZGVyQ29u
dGVudAogICAgICAgICBwdXNoKEAkY29udGVudFJlZiwgIiAgICBib29sIGhhc0NhbGxiYWNrKCkg
Y29uc3QgZmluYWwgeyByZXR1cm4gbV9kYXRhICYmIG1fZGF0YS0+Y2FsbGJhY2soKTsgfVxuXG4i
KTsKICAgICB9CiAKKyAgICBwdXNoKEAkY29udGVudFJlZiwgIiAgICB2b2lkIHZpc2l0SlNGdW5j
dGlvbihKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKSBvdmVycmlkZTtcblxuIikgaWYgJGludGVy
ZmFjZU9yQ2FsbGJhY2stPmV4dGVuZGVkQXR0cmlidXRlcy0+e0lzV2Vha0NhbGxiYWNrfTsKICAg
ICBwdXNoKEAkY29udGVudFJlZiwgIiAgICB2b2lkIHZpc2l0SlNGdW5jdGlvbihKU0M6OlNsb3RW
aXNpdG9yJikgb3ZlcnJpZGU7XG5cbiIpIGlmICRpbnRlcmZhY2VPckNhbGxiYWNrLT5leHRlbmRl
ZEF0dHJpYnV0ZXMtPntJc1dlYWtDYWxsYmFja307CiAKICAgICBwdXNoKEAkY29udGVudFJlZiwg
IiAgICAke2NhbGxiYWNrRGF0YVR5cGV9KiBtX2RhdGE7XG4iKTsKQEAgLTY2MjMsNiArNjYzNCwx
MCBAQCBzdWIgR2VuZXJhdGVDYWxsYmFja0ltcGxlbWVudGF0aW9uQ29udGVuCiAgICAgfQogCiAg
ICAgaWYgKCRpbnRlcmZhY2VPckNhbGxiYWNrLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntJc1dlYWtD
YWxsYmFja30pIHsKKyAgICAgICAgcHVzaChAJGNvbnRlbnRSZWYsICJ2b2lkICR7Y2xhc3NOYW1l
fTo6dmlzaXRKU0Z1bmN0aW9uKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcilcbiIp
OworICAgICAgICBwdXNoKEAkY29udGVudFJlZiwgIntcbiIpOworICAgICAgICBwdXNoKEAkY29u
dGVudFJlZiwgIiAgICBtX2RhdGEtPnZpc2l0SlNGdW5jdGlvbih2aXNpdG9yKTtcbiIpOworICAg
ICAgICBwdXNoKEAkY29udGVudFJlZiwgIn1cblxuIik7CiAgICAgICAgIHB1c2goQCRjb250ZW50
UmVmLCAidm9pZCAke2NsYXNzTmFtZX06OnZpc2l0SlNGdW5jdGlvbihKU0M6OlNsb3RWaXNpdG9y
JiB2aXNpdG9yKVxuIik7CiAgICAgICAgIHB1c2goQCRjb250ZW50UmVmLCAie1xuIik7CiAgICAg
ICAgIHB1c2goQCRjb250ZW50UmVmLCAiICAgIG1fZGF0YS0+dmlzaXRKU0Z1bmN0aW9uKHZpc2l0
b3IpO1xuIik7CkBAIC02NzM0LDYgKzY3NDksNyBAQCBzdWIgR2VuZXJhdGVJdGVyYWJsZURlZmlu
aXRpb24KICAgICBteSAkdmlzaWJsZUludGVyZmFjZU5hbWUgPSAkY29kZUdlbmVyYXRvci0+R2V0
VmlzaWJsZUludGVyZmFjZU5hbWUoJGludGVyZmFjZSk7CiAKICAgICBBZGRUb0ltcGxJbmNsdWRl
cygiSlNET01JdGVyYXRvci5oIik7CisgICAgQWRkVG9JbXBsSW5jbHVkZXMoIjxKYXZhU2NyaXB0
Q29yZS9TbG90VmlzaXRvck1hY3Jvcy5oPiIpOwogCiAgICAgcmV0dXJuIHVubGVzcyBJc0tleVZh
bHVlSXRlcmFibGVJbnRlcmZhY2UoJGludGVyZmFjZSk7CiAKQEAgLTY3NzcsNyArNjc5Myw5IEBA
IHB1YmxpYzoKICAgICAgICAgYXV0byogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvciR7aXRl
cmF0b3JOYW1lfS5nZXQoKTsKIElHTk9SRV9XQVJOSU5HU19CRUdJTihcInVucmVhY2hhYmxlLWNv
ZGVcIikKIElHTk9SRV9XQVJOSU5HU19CRUdJTihcInRhdXRvbG9naWNhbC1jb21wYXJlXCIpCi0g
ICAgICAgIGlmICgmJHtpdGVyYXRvck5hbWV9Ojp2aXNpdE91dHB1dENvbnN0cmFpbnRzICE9ICZK
U0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50cykKKyAgICAgICAgdm9pZCAoKm15Vmlz
aXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9ICR7
aXRlcmF0b3JOYW1lfTo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKKyAgICAgICAgdm9pZCAoKmpz
Q2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9y
JikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKKyAgICAgICAgaWYgKG15
VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKICAg
ICAgICAgICAgIGNsaWVudERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFj
ZSk7CiBJR05PUkVfV0FSTklOR1NfRU5ECiBJR05PUkVfV0FSTklOR1NfRU5ECkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9kb20vQWN0aXZlRE9NQ2FsbGJhY2suaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9kb20vQWN0aXZlRE9NQ2FsbGJhY2suaAkocmV2aXNpb24gMjcyODMwKQorKysgU291
cmNlL1dlYkNvcmUvZG9tL0FjdGl2ZURPTUNhbGxiYWNrLmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDEyIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQpAQCAt
MzMsNiArMzQsNyBAQAogI2luY2x1ZGUgIkNvbnRleHREZXN0cnVjdGlvbk9ic2VydmVyLmgiCiAK
IG5hbWVzcGFjZSBKU0MgeworY2xhc3MgQWJzdHJhY3RTbG90VmlzaXRvcjsKIGNsYXNzIFNsb3RW
aXNpdG9yOwogfQogCkBAIC01NSw2ICs1Nyw3IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9S
VCBib29sIGFjdGl2ZURPTU9iamVjdHNBcmVTdXNwZW5kZWQoKSBjb25zdDsKICAgICBXRUJDT1JF
X0VYUE9SVCBib29sIGFjdGl2ZURPTU9iamVjdEFyZVN0b3BwZWQoKSBjb25zdDsKICAgICAKKyAg
ICB2aXJ0dWFsIHZvaWQgdmlzaXRKU0Z1bmN0aW9uKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYp
IHsgfQogICAgIHZpcnR1YWwgdm9pZCB2aXNpdEpTRnVuY3Rpb24oSlNDOjpTbG90VmlzaXRvciYp
IHsgfQogfTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50TGlzdGVuZXIuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRMaXN0ZW5lci5oCShyZXZpc2lvbiAy
NzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRMaXN0ZW5lci5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwOCwgMjAw
OSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYt
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
QEAgLTI0LDYgKzI0LDcgQEAKICNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgogCiBuYW1lc3BhY2Ug
SlNDIHsKK2NsYXNzIEFic3RyYWN0U2xvdFZpc2l0b3I7CiBjbGFzcyBKU09iamVjdDsKIGNsYXNz
IFNsb3RWaXNpdG9yOwogfQpAQCAtNTIsNiArNTMsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2
b2lkIGhhbmRsZUV2ZW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBFdmVudCYpID0gMDsKICAg
ICB2aXJ0dWFsIGJvb2wgd2FzQ3JlYXRlZEZyb21NYXJrdXAoKSBjb25zdCB7IHJldHVybiBmYWxz
ZTsgfQogCisgICAgdmlydHVhbCB2b2lkIHZpc2l0SlNGdW5jdGlvbihKU0M6OkFic3RyYWN0U2xv
dFZpc2l0b3ImKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgdmlzaXRKU0Z1bmN0aW9uKEpTQzo6U2xv
dFZpc2l0b3ImKSB7IH0KIAogICAgIHZpcnR1YWwgYm9vbCBpc0F0dHJpYnV0ZSgpIGNvbnN0IHsg
cmV0dXJuIGZhbHNlOyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRUYXJnZXQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9FdmVudFRhcmdldC5jcHAJKHJldmlz
aW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9FdmVudFRhcmdldC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTIsNyArMiw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9s
bCAoa25vbGxAa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0byAo
a29pdmlzdG9Aa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMjAwMSBEaXJrIE11ZWxsZXIgKG11
ZWxsZXJAa2RlLm9yZykKLSAqIENvcHlyaWdodCAoQykgMjAwNC0yMDE3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwNiBBbGV4ZXkgUHJvc2t1
cnlha292IChhcEB3ZWJraXQub3JnKQogICogICAgICAgICAgIChDKSAyMDA3LCAyMDA4IE5pa29s
YXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgogICoKQEAgLTM4NCw3ICszODQsOCBA
QCB2b2lkIEV2ZW50VGFyZ2V0OjpyZW1vdmVBbGxFdmVudExpc3RlbmVyCiAgICAgdGhyZWFkRGF0
YS5zZXRJc0luUmVtb3ZlQWxsRXZlbnRMaXN0ZW5lcnMoZmFsc2UpOwogfQogCi12b2lkIEV2ZW50
VGFyZ2V0Ojp2aXNpdEpTRXZlbnRMaXN0ZW5lcnMoSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikK
K3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEV2ZW50VGFyZ2V0Ojp2aXNpdEpTRXZl
bnRMaXN0ZW5lcnMoVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBFdmVudFRhcmdldERhdGEqIGRh
dGEgPSBldmVudFRhcmdldERhdGFDb25jdXJyZW50bHkoKTsKICAgICBpZiAoIWRhdGEpCkBAIC0z
OTYsNiArMzk3LDkgQEAgdm9pZCBFdmVudFRhcmdldDo6dmlzaXRKU0V2ZW50TGlzdGVuZXJzKAog
ICAgICAgICBsaXN0ZW5lci0+dmlzaXRKU0Z1bmN0aW9uKHZpc2l0b3IpOwogfQogCit0ZW1wbGF0
ZSB2b2lkIEV2ZW50VGFyZ2V0Ojp2aXNpdEpTRXZlbnRMaXN0ZW5lcnMoSlNDOjpBYnN0cmFjdFNs
b3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEV2ZW50VGFyZ2V0Ojp2aXNpdEpTRXZlbnRMaXN0
ZW5lcnMoSlNDOjpTbG90VmlzaXRvciYpOworCiB2b2lkIEV2ZW50VGFyZ2V0OjppbnZhbGlkYXRl
RXZlbnRMaXN0ZW5lclJlZ2lvbnMoKQogewogICAgIGlmIChpczxFbGVtZW50PigqdGhpcykpIHsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9FdmVudFRhcmdldC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2RvbS9FdmVudFRhcmdldC5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3Vy
Y2UvV2ViQ29yZS9kb20vRXZlbnRUYXJnZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMiw3ICsyLDcg
QEAKICAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQogICog
ICAgICAgICAgIChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQogICog
ICAgICAgICAgIChDKSAyMDAxIERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUub3JnKQotICogQ29w
eXJpZ2h0IChDKSAyMDA0LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDA0LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICogQ29weXJpZ2h0IChDKSAyMDA2IEFsZXhleSBQcm9za3VyeWFrb3YgKGFwQHdlYmtpdC5vcmcp
CiAgKiAgICAgICAgICAgKEMpIDIwMDcsIDIwMDggTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJt
YW5uQGtkZS5vcmc+CiAgKgpAQCAtOTcsNyArOTcsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBmaXJl
RXZlbnRMaXN0ZW5lcnMoRXZlbnQmLCBFdmVudEludm9rZVBoYXNlKTsKICAgICBib29sIGlzRmly
aW5nRXZlbnRMaXN0ZW5lcnMoKSBjb25zdDsKIAotICAgIHZvaWQgdmlzaXRKU0V2ZW50TGlzdGVu
ZXJzKEpTQzo6U2xvdFZpc2l0b3ImKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2
b2lkIHZpc2l0SlNFdmVudExpc3RlbmVycyhWaXNpdG9yJik7CiAgICAgdm9pZCBpbnZhbGlkYXRl
SlNFdmVudExpc3RlbmVycyhKU0M6OkpTT2JqZWN0Kik7CiAKICAgICBjb25zdCBFdmVudFRhcmdl
dERhdGEqIGV2ZW50VGFyZ2V0RGF0YSgpIGNvbnN0OwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9t
L011dGF0aW9uUmVjb3JkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vTXV0
YXRpb25SZWNvcmQuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9kb20v
TXV0YXRpb25SZWNvcmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAq
IENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKQEAgLTQxLDcgKzQyLDcgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogCiBuYW1lc3BhY2UgewogCi1zdGF0aWMgdm9pZCB2aXNpdE5vZGVMaXN0KEpT
Qzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IsIE5vZGVMaXN0JiBub2RlTGlzdCkKK3N0YXRpYyB2b2lk
IHZpc2l0Tm9kZUxpc3QoSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBOb2RlTGlz
dCYgbm9kZUxpc3QpCiB7CiAgICAgQVNTRVJUKCFub2RlTGlzdC5pc0xpdmVOb2RlTGlzdCgpKTsK
ICAgICB1bnNpZ25lZCBsZW5ndGggPSBub2RlTGlzdC5sZW5ndGgoKTsKQEAgLTY4LDcgKzY5LDcg
QEAgcHJpdmF0ZToKICAgICBOb2RlKiBwcmV2aW91c1NpYmxpbmcoKSBvdmVycmlkZSB7IHJldHVy
biBtX3ByZXZpb3VzU2libGluZy5nZXQoKTsgfQogICAgIE5vZGUqIG5leHRTaWJsaW5nKCkgb3Zl
cnJpZGUgeyByZXR1cm4gbV9uZXh0U2libGluZy5nZXQoKTsgfQogCi0gICAgdm9pZCB2aXNpdE5v
ZGVzQ29uY3VycmVudGx5KEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0IGZpbmFsCisg
ICAgdm9pZCB2aXNpdE5vZGVzQ29uY3VycmVudGx5KEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYg
dmlzaXRvcikgY29uc3QgZmluYWwKICAgICB7CiAgICAgICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9v
dChyb290KG1fdGFyZ2V0LnB0cigpKSk7CiAgICAgICAgIGlmIChtX2FkZGVkTm9kZXMpCkBAIC0x
MDUsNyArMTA2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIG5vZGVMaXN0LmdldCgpOwog
ICAgIH0KIAotICAgIHZvaWQgdmlzaXROb2Rlc0NvbmN1cnJlbnRseShKU0M6OlNsb3RWaXNpdG9y
JiB2aXNpdG9yKSBjb25zdCBmaW5hbAorICAgIHZvaWQgdmlzaXROb2Rlc0NvbmN1cnJlbnRseShK
U0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0IGZpbmFsCiAgICAgewogICAg
ICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qocm9vdChtX3RhcmdldC5wdHIoKSkpOwogICAgIH0K
QEAgLTE2NCw3ICsxNjUsNyBAQCBwcml2YXRlOgogCiAgICAgU3RyaW5nIG9sZFZhbHVlKCkgb3Zl
cnJpZGUgeyByZXR1cm4gU3RyaW5nKCk7IH0KIAotICAgIHZvaWQgdmlzaXROb2Rlc0NvbmN1cnJl
bnRseShKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKSBjb25zdCBmaW5hbAorICAgIHZvaWQgdmlz
aXROb2Rlc0NvbmN1cnJlbnRseShKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpIGNv
bnN0IGZpbmFsCiAgICAgewogICAgICAgICBtX3JlY29yZC0+dmlzaXROb2Rlc0NvbmN1cnJlbnRs
eSh2aXNpdG9yKTsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vTXV0YXRpb25SZWNv
cmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vTXV0YXRpb25SZWNvcmQuaAko
cmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL1dlYkNvcmUvZG9tL011dGF0aW9uUmVjb3JkLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDEx
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zIGFyZQpAQCAtMzYsNyArMzcsNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotY2xhc3Mg
U2xvdFZpc2l0b3I7CitjbGFzcyBBYnN0cmFjdFNsb3RWaXNpdG9yOwogCiB9CiAKQEAgLTcyLDcg
KzczLDcgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBTdHJpbmcgb2xkVmFsdWUoKSB7IHJldHVy
biBTdHJpbmcoKTsgfQogCi0gICAgdmlydHVhbCB2b2lkIHZpc2l0Tm9kZXNDb25jdXJyZW50bHko
SlNDOjpTbG90VmlzaXRvciYpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXROb2Rl
c0NvbmN1cnJlbnRseShKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKSBjb25zdCA9IDA7CiB9Owog
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZUZp
bHRlckNvbmRpdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlRmls
dGVyQ29uZGl0aW9uLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9O
b2RlRmlsdGVyQ29uZGl0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDcgQEAgY2xh
c3MgTm9kZUZpbHRlckNvbmRpdGlvbiA6IHB1YmxpYyBSZWZDbwogcHVibGljOgogICAgIHZpcnR1
YWwgfk5vZGVGaWx0ZXJDb25kaXRpb24oKSA9IGRlZmF1bHQ7CiAgICAgdmlydHVhbCB1bnNpZ25l
ZCBzaG9ydCBhY2NlcHROb2RlKE5vZGUmKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHZp
c2l0QWdncmVnYXRlKEpTQzo6U2xvdFZpc2l0b3ImKSB7IH0KKy8vICAgIHZpcnR1YWwgdm9pZCB2
aXNpdEFnZ3JlZ2F0ZShKU0M6OlNsb3RWaXNpdG9yJikgeyB9IC8vIG1sYW0gVU5VU0VECiB9Owog
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vU3RhdGlj
UmFuZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9TdGF0aWNSYW5nZS5j
cHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9TdGF0aWNSYW5nZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDE2LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC03Niw3ICs3Niw3IEBAIEV4Y2VwdGlvbk9yPFJlZjxTdGF0
aWNSYW5nZT4+IFN0YXRpY1JhbmcKICAgICByZXR1cm4gY3JlYXRlKHsgeyBpbml0LnN0YXJ0Q29u
dGFpbmVyLnJlbGVhc2VOb25OdWxsKCksIGluaXQuc3RhcnRPZmZzZXQgfSwgeyBpbml0LmVuZENv
bnRhaW5lci5yZWxlYXNlTm9uTnVsbCgpLCBpbml0LmVuZE9mZnNldCB9IH0pOwogfQogCi12b2lk
IFN0YXRpY1JhbmdlOjp2aXNpdE5vZGVzQ29uY3VycmVudGx5KEpTQzo6U2xvdFZpc2l0b3ImIHZp
c2l0b3IpIGNvbnN0Cit2b2lkIFN0YXRpY1JhbmdlOjp2aXNpdE5vZGVzQ29uY3VycmVudGx5KEpT
Qzo6QWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikgY29uc3QKIHsKICAgICB2aXNpdG9yLmFk
ZE9wYXF1ZVJvb3Qocm9vdChzdGFydC5jb250YWluZXIuZ2V0KCkpKTsKICAgICB2aXNpdG9yLmFk
ZE9wYXF1ZVJvb3Qocm9vdChlbmQuY29udGFpbmVyLmdldCgpKSk7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9kb20vU3RhdGljUmFuZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20v
U3RhdGljUmFuZ2UuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL1dlYkNvcmUvZG9tL1N0
YXRpY1JhbmdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDE2LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMCw3ICszMCw3IEBACiAKIG5hbWVzcGFj
ZSBKU0MgewogCi1jbGFzcyBTbG90VmlzaXRvcjsKK2NsYXNzIEFic3RyYWN0U2xvdFZpc2l0b3I7
CiAKIH0KIApAQCAtNTgsNyArNTgsNyBAQCBwdWJsaWM6CiAgICAgdW5zaWduZWQgZW5kT2Zmc2V0
KCkgY29uc3QgZmluYWwgeyByZXR1cm4gU2ltcGxlUmFuZ2U6OmVuZE9mZnNldCgpOyB9CiAgICAg
Ym9vbCBjb2xsYXBzZWQoKSBjb25zdCBmaW5hbCB7IHJldHVybiBTaW1wbGVSYW5nZTo6Y29sbGFw
c2VkKCk7IH0KIAotICAgIHZvaWQgdmlzaXROb2Rlc0NvbmN1cnJlbnRseShKU0M6OlNsb3RWaXNp
dG9yJikgY29uc3Q7CisgICAgdm9pZCB2aXNpdE5vZGVzQ29uY3VycmVudGx5KEpTQzo6QWJzdHJh
Y3RTbG90VmlzaXRvciYpIGNvbnN0OwogCiBwcml2YXRlOgogICAgIFN0YXRpY1JhbmdlKFNpbXBs
ZVJhbmdlJiYpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0wyUmVuZGVy
aW5nQ29udGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
V2ViR0wyUmVuZGVyaW5nQ29udGV4dC5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMMlJlbmRlcmluZ0NvbnRleHQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIwIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMzA3OCw3ICszMDc4LDcgQEAgYm9vbCBXZWJHTDJSZW5kZXJpbmdDb250ZXh0Ojpj
aGVja0FuZFRyYQogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIFdlYkdMMlJlbmRlcmluZ0Nv
bnRleHQ6OmFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3Ip
Cit2b2lkIFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OmFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKEpT
Qzo6QWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBXZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlOjphZGRNZW1iZXJzVG9PcGFxdWVSb290cyh2aXNpdG9yKTsKIApJbmRleDogU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMMlJlbmRlcmluZ0NvbnRleHQu
aAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0wy
UmVuZGVyaW5nQ29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxNS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYxLDcgKzI2MSw3IEBAIHB1
YmxpYzoKIAogICAgIGJvb2wgY2hlY2tBbmRUcmFuc2xhdGVBdHRhY2htZW50cyhjb25zdCBjaGFy
KiBmdW5jdGlvbk5hbWUsIEdDR0xlbnVtLCBWZWN0b3I8R0NHTGVudW0+Jik7CiAKLSAgICB2b2lk
IGFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKEpTQzo6U2xvdFZpc2l0b3ImKSBvdmVycmlkZTsKKyAg
ICB2b2lkIGFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYp
IG92ZXJyaWRlOwogCiBwcml2YXRlOgogICAgIFdlYkdMMlJlbmRlcmluZ0NvbnRleHQoQ2FudmFz
QmFzZSYsIEdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcyk7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9XZWJHTEZyYW1lYnVmZmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEZyYW1lYnVmZmVyLmNwcAkocmV2aXNpb24gMjcyODMw
KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xGcmFtZWJ1ZmZlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5LTIw
MTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5
LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC02Myw3ICs2Myw3IEBAIG5hbWVzcGFjZSB7CiAgICAgICAgIHZvaWQg
b25EZXRhY2hlZChjb25zdCBBYnN0cmFjdExvY2tlciYsIEdyYXBoaWNzQ29udGV4dEdMKikgb3Zl
cnJpZGU7CiAgICAgICAgIHZvaWQgYXR0YWNoKEdyYXBoaWNzQ29udGV4dEdMKiwgR0NHTGVudW0g
dGFyZ2V0LCBHQ0dMZW51bSBhdHRhY2htZW50KSBvdmVycmlkZTsKICAgICAgICAgdm9pZCB1bmF0
dGFjaChHcmFwaGljc0NvbnRleHRHTCosIEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gYXR0YWNo
bWVudCkgb3ZlcnJpZGU7Ci0gICAgICAgIHZvaWQgYWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMoY29u
c3QgQWJzdHJhY3RMb2NrZXImLCBKU0M6OlNsb3RWaXNpdG9yJikgb3ZlcnJpZGU7CisgICAgICAg
IHZvaWQgYWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMoY29uc3QgQWJzdHJhY3RMb2NrZXImLCBKU0M6
OkFic3RyYWN0U2xvdFZpc2l0b3ImKSBvdmVycmlkZTsKIAogICAgICAgICBXZWJHTFJlbmRlcmJ1
ZmZlckF0dGFjaG1lbnQoKSB7IH07CiAKQEAgLTE0NSw3ICsxNDUsNyBAQCBuYW1lc3BhY2Ugewog
ICAgICAgICAgICAgY29udGV4dC0+ZnJhbWVidWZmZXJSZW5kZXJidWZmZXIodGFyZ2V0LCBhdHRh
Y2htZW50LCBHcmFwaGljc0NvbnRleHRHTDo6UkVOREVSQlVGRkVSLCAwKTsKICAgICB9CiAKLSAg
ICB2b2lkIFdlYkdMUmVuZGVyYnVmZmVyQXR0YWNobWVudDo6YWRkTWVtYmVyc1RvT3BhcXVlUm9v
dHMoY29uc3QgQWJzdHJhY3RMb2NrZXImLCBKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQorICAg
IHZvaWQgV2ViR0xSZW5kZXJidWZmZXJBdHRhY2htZW50OjphZGRNZW1iZXJzVG9PcGFxdWVSb290
cyhjb25zdCBBYnN0cmFjdExvY2tlciYsIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRv
cikKICAgICB7CiAgICAgICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChtX3JlbmRlcmJ1ZmZlci5n
ZXQoKSk7CiAgICAgfQpAQCAtMTY5LDcgKzE2OSw3IEBAIG5hbWVzcGFjZSB7CiAgICAgICAgIHZv
aWQgb25EZXRhY2hlZChjb25zdCBBYnN0cmFjdExvY2tlciYsIEdyYXBoaWNzQ29udGV4dEdMKikg
b3ZlcnJpZGU7CiAgICAgICAgIHZvaWQgYXR0YWNoKEdyYXBoaWNzQ29udGV4dEdMKiwgR0NHTGVu
dW0gdGFyZ2V0LCBHQ0dMZW51bSBhdHRhY2htZW50KSBvdmVycmlkZTsKICAgICAgICAgdm9pZCB1
bmF0dGFjaChHcmFwaGljc0NvbnRleHRHTCosIEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gYXR0
YWNobWVudCkgb3ZlcnJpZGU7Ci0gICAgICAgIHZvaWQgYWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMo
Y29uc3QgQWJzdHJhY3RMb2NrZXImLCBKU0M6OlNsb3RWaXNpdG9yJikgb3ZlcnJpZGU7CisgICAg
ICAgIHZvaWQgYWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMoY29uc3QgQWJzdHJhY3RMb2NrZXImLCBK
U0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKSBvdmVycmlkZTsKIAogICAgICAgICBXZWJHTFRleHR1
cmVBdHRhY2htZW50KCkgeyB9OwogCkBAIC0yNjcsNyArMjY3LDcgQEAgbmFtZXNwYWNlIHsKICNl
bmRpZgogICAgIH0KIAotICAgIHZvaWQgV2ViR0xUZXh0dXJlQXR0YWNobWVudDo6YWRkTWVtYmVy
c1RvT3BhcXVlUm9vdHMoY29uc3QgQWJzdHJhY3RMb2NrZXImLCBKU0M6OlNsb3RWaXNpdG9yJiB2
aXNpdG9yKQorICAgIHZvaWQgV2ViR0xUZXh0dXJlQXR0YWNobWVudDo6YWRkTWVtYmVyc1RvT3Bh
cXVlUm9vdHMoY29uc3QgQWJzdHJhY3RMb2NrZXImLCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3Im
IHZpc2l0b3IpCiAgICAgewogICAgICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QobV90ZXh0dXJl
LmdldCgpKTsKICAgICB9CkBAIC03MjEsNyArNzIxLDcgQEAgR0NHTGVudW0gV2ViR0xGcmFtZWJ1
ZmZlcjo6Z2V0RHJhd0J1ZmZlcgogICAgIHJldHVybiBHcmFwaGljc0NvbnRleHRHTDo6Tk9ORTsK
IH0KIAotdm9pZCBXZWJHTEZyYW1lYnVmZmVyOjphZGRNZW1iZXJzVG9PcGFxdWVSb290cyhjb25z
dCBBYnN0cmFjdExvY2tlciYgbG9ja2VyLCBKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordm9p
ZCBXZWJHTEZyYW1lYnVmZmVyOjphZGRNZW1iZXJzVG9PcGFxdWVSb290cyhjb25zdCBBYnN0cmFj
dExvY2tlciYgbG9ja2VyLCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAg
ICAgZm9yIChhdXRvJiBlbnRyeSA6IG1fYXR0YWNobWVudHMpCiAgICAgICAgIGVudHJ5LnZhbHVl
LT5hZGRNZW1iZXJzVG9PcGFxdWVSb290cyhsb2NrZXIsIHZpc2l0b3IpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xGcmFtZWJ1ZmZlci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRnJhbWVidWZmZXIuaAkocmV2aXNpb24gMjcy
ODMwKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xGcmFtZWJ1ZmZlci5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTM0LDcgKzM0LDcgQEAKICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5h
bWVzcGFjZSBKU0MgewotY2xhc3MgU2xvdFZpc2l0b3I7CitjbGFzcyBBYnN0cmFjdFNsb3RWaXNp
dG9yOwogfQogCiBuYW1lc3BhY2UgV1RGIHsKQEAgLTY1LDcgKzY1LDcgQEAgcHVibGljOgogICAg
ICAgICB2aXJ0dWFsIHZvaWQgb25EZXRhY2hlZChjb25zdCBXVEY6OkFic3RyYWN0TG9ja2VyJiwg
R3JhcGhpY3NDb250ZXh0R0wqKSA9IDA7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBhdHRhY2goR3Jh
cGhpY3NDb250ZXh0R0wqLCBHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIGF0dGFjaG1lbnQpID0g
MDsKICAgICAgICAgdmlydHVhbCB2b2lkIHVuYXR0YWNoKEdyYXBoaWNzQ29udGV4dEdMKiwgR0NH
TGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBhdHRhY2htZW50KSA9IDA7Ci0gICAgICAgIHZpcnR1YWwg
dm9pZCBhZGRNZW1iZXJzVG9PcGFxdWVSb290cyhjb25zdCBXVEY6OkFic3RyYWN0TG9ja2VyJiwg
SlNDOjpTbG90VmlzaXRvciYpID0gMDsKKyAgICAgICAgdmlydHVhbCB2b2lkIGFkZE1lbWJlcnNU
b09wYXF1ZVJvb3RzKGNvbnN0IFdURjo6QWJzdHJhY3RMb2NrZXImLCBKU0M6OkFic3RyYWN0U2xv
dFZpc2l0b3ImKSA9IDA7CiAKICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIFdlYkdMQXR0YWNobWVu
dCgpOwpAQCAtMTE0LDcgKzExNCw3IEBAIHB1YmxpYzoKIAogICAgIEdDR0xlbnVtIGdldERyYXdC
dWZmZXIoR0NHTGVudW0pOwogCi0gICAgdm9pZCBhZGRNZW1iZXJzVG9PcGFxdWVSb290cyhjb25z
dCBXVEY6OkFic3RyYWN0TG9ja2VyJiwgSlNDOjpTbG90VmlzaXRvciYpOworICAgIHZvaWQgYWRk
TWVtYmVyc1RvT3BhcXVlUm9vdHMoY29uc3QgV1RGOjpBYnN0cmFjdExvY2tlciYsIEpTQzo6QWJz
dHJhY3RTbG90VmlzaXRvciYpOwogCiBwcml2YXRlOgogICAgIFdlYkdMRnJhbWVidWZmZXIoV2Vi
R0xSZW5kZXJpbmdDb250ZXh0QmFzZSYpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52
YXMvV2ViR0xQcm9ncmFtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2Nh
bnZhcy9XZWJHTFByb2dyYW0uY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9XZWJHTFByb2dyYW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTIwNiw3ICsyMDYs
NyBAQCBib29sIFdlYkdMUHJvZ3JhbTo6ZGV0YWNoU2hhZGVyKGNvbnN0IEFiCiAgICAgfQogfQog
Ci12b2lkIFdlYkdMUHJvZ3JhbTo6YWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMoY29uc3QgQWJzdHJh
Y3RMb2NrZXImLCBKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBXZWJHTFByb2dyYW06
OmFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgSlNDOjpBYnN0
cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdCht
X3ZlcnRleFNoYWRlci5nZXQoKSk7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KG1fZnJhZ21l
bnRTaGFkZXIuZ2V0KCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xQ
cm9ncmFtLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xQ
cm9ncmFtLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L1dlYkdMUHJvZ3JhbS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAwOS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAwOS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzUsNyArMzUsNyBAQAogI2luY2x1
ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIEpTQyB7Ci1jbGFzcyBTbG90VmlzaXRvcjsK
K2NsYXNzIEFic3RyYWN0U2xvdFZpc2l0b3I7CiB9CiAKIG5hbWVzcGFjZSBXVEYgewpAQCAtODgs
NyArODgsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX3JlcXVpcmVkVHJhbnNmb3JtRmVl
ZGJhY2tCdWZmZXJDb3VudDsKICAgICB9CiAKLSAgICB2b2lkIGFkZE1lbWJlcnNUb09wYXF1ZVJv
b3RzKGNvbnN0IFdURjo6QWJzdHJhY3RMb2NrZXImLCBKU0M6OlNsb3RWaXNpdG9yJik7CisgICAg
dm9pZCBhZGRNZW1iZXJzVG9PcGFxdWVSb290cyhjb25zdCBXVEY6OkFic3RyYWN0TG9ja2VyJiwg
SlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAKIHByaXZhdGU6CiAgICAgV2ViR0xQcm9ncmFt
KFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UmKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuY3BwCShyZXZp
c2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTc5MzEsNyArNzkzMSw3IEBAIHZv
aWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6ZGlzcGF0Y2gKICAgICBxdWV1ZVRhc2tUb0Rp
c3BhdGNoRXZlbnQoKmNhbnZhcywgVGFza1NvdXJjZTo6V2ViR0wsIFdlYkdMQ29udGV4dEV2ZW50
OjpjcmVhdGUoZXZlbnROYW1lcygpLndlYmdsY29udGV4dGNoYW5nZWRFdmVudCwgRXZlbnQ6OkNh
bkJ1YmJsZTo6Tm8sIEV2ZW50OjpJc0NhbmNlbGFibGU6OlllcywgZW1wdHlTdHJpbmcoKSkpOwog
fQogCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmFkZE1lbWJlcnNUb09wYXF1ZVJv
b3RzKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2U6OmFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYg
dmlzaXRvcikKIHsKICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG9iamVjdEdyYXBoTG9jaygp
KTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2UuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE3IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIxIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtNTgsNyArNTgsNyBAQAogI2VuZGlmCiAKIG5hbWVzcGFjZSBKU0MgewotY2xhc3MgU2xv
dFZpc2l0b3I7CitjbGFzcyBBYnN0cmFjdFNsb3RWaXNpdG9yOwogfQogCiBuYW1lc3BhY2UgV1RG
IHsKQEAgLTQxMSw3ICs0MTEsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCByZWN5Y2xlQ29udGV4dCgp
IG92ZXJyaWRlOwogICAgIHZvaWQgZGlzcGF0Y2hDb250ZXh0Q2hhbmdlZE5vdGlmaWNhdGlvbigp
IG92ZXJyaWRlOwogCi0gICAgdmlydHVhbCB2b2lkIGFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKEpT
Qzo6U2xvdFZpc2l0b3ImKTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRkTWVtYmVyc1RvT3BhcXVlUm9v
dHMoSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAgICAgLy8gVGhpcyBsb2NrIG11c3QgYmUg
aGVsZCBhY3Jvc3MgYWxsIG11dGF0aW9ucyBvZiBjb250YWluZXJzIGxpa2UKICAgICAvLyBWZWN0
b3JzLCBIYXNoU2V0cywgZXRjLiB3aGljaCBjb250YWluIFJlZlB0cjxXZWJHTE9iamVjdD4sIGFu
ZAogICAgIC8vIHdoaWNoIGFyZSB0cmF2ZXJzZWQgYnkgYWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMo
KSBvciBhbnkgb2YgdGhlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFRy
YW5zZm9ybUZlZWRiYWNrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2Nh
bnZhcy9XZWJHTFRyYW5zZm9ybUZlZWRiYWNrLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xUcmFuc2Zvcm1GZWVkYmFjay5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMzAsOCArMzAsNyBAQAogCiAjaW5jbHVkZSAiV2ViR0xDb250ZXh0R3JvdXAuaCIK
ICNpbmNsdWRlICJXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmgiCi0jaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvU2xvdFZpc2l0b3IuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9TbG90Vmlz
aXRvcklubGluZXMuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9BYnN0cmFjdFNsb3RWaXNp
dG9ySW5saW5lcy5oPgogI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CiAjaW5jbHVkZSA8d3RmL0xvY2tl
ci5oPgogCkBAIC05Myw3ICs5Miw3IEBAIGJvb2wgV2ViR0xUcmFuc2Zvcm1GZWVkYmFjazo6aGFz
RW5vdWdoQnUKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBXZWJHTFRyYW5zZm9ybUZlZWRi
YWNrOjphZGRNZW1iZXJzVG9PcGFxdWVSb290cyhjb25zdCBBYnN0cmFjdExvY2tlciYgbG9ja2Vy
LCBKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBXZWJHTFRyYW5zZm9ybUZlZWRiYWNr
OjphZGRNZW1iZXJzVG9PcGFxdWVSb290cyhjb25zdCBBYnN0cmFjdExvY2tlciYgbG9ja2VyLCBK
U0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgZm9yIChhdXRvJiBidWZm
ZXIgOiBtX2JvdW5kSW5kZXhlZFRyYW5zZm9ybUZlZWRiYWNrQnVmZmVycykKICAgICAgICAgdmlz
aXRvci5hZGRPcGFxdWVSb290KGJ1ZmZlci5nZXQoKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9XZWJHTFRyYW5zZm9ybUZlZWRiYWNrLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xUcmFuc2Zvcm1GZWVkYmFjay5oCShyZXZpc2lvbiAy
NzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFRyYW5zZm9ybUZlZWRi
YWNrLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE1LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMSw3ICszMSw3IEBACiAjaW5jbHVkZSAiV2ViR0xT
aGFyZWRPYmplY3QuaCIKIAogbmFtZXNwYWNlIEpTQyB7Ci1jbGFzcyBTbG90VmlzaXRvcjsKK2Ns
YXNzIEFic3RyYWN0U2xvdFZpc2l0b3I7CiB9CiAKIG5hbWVzcGFjZSBXVEYgewpAQCAtNzAsNyAr
NzAsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgYm9vbCBoYXNFbm91Z2hCdWZmZXJzKEdDR0x1aW50
IG51bVJlcXVpcmVkKSBjb25zdDsKIAotICAgIHZvaWQgYWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMo
Y29uc3QgQWJzdHJhY3RMb2NrZXImLCBKU0M6OlNsb3RWaXNpdG9yJik7CisgICAgdm9pZCBhZGRN
ZW1iZXJzVG9PcGFxdWVSb290cyhjb25zdCBBYnN0cmFjdExvY2tlciYsIEpTQzo6QWJzdHJhY3RT
bG90VmlzaXRvciYpOwogCiBwcml2YXRlOgogICAgIFdlYkdMVHJhbnNmb3JtRmVlZGJhY2soV2Vi
R0wyUmVuZGVyaW5nQ29udGV4dCYpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
V2ViR0xWZXJ0ZXhBcnJheU9iamVjdEJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2h0bWwvY2FudmFzL1dlYkdMVmVydGV4QXJyYXlPYmplY3RCYXNlLmNwcAkocmV2aXNpb24g
MjcyODMwKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xWZXJ0ZXhBcnJheU9i
amVjdEJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxNS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjksOCArMjksNyBAQAogI2lmIEVOQUJM
RShXRUJHTCkKIAogI2luY2x1ZGUgIldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuaCIKLSNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9TbG90VmlzaXRvci5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL1Nsb3RWaXNpdG9ySW5saW5lcy5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0Fic3Ry
YWN0U2xvdFZpc2l0b3JJbmxpbmVzLmg+CiAjaW5jbHVkZSA8d3RmL0xvY2tlci5oPgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CkBAIC0xMDksNyArMTA4LDcgQEAgdm9pZCBXZWJHTFZlcnRleEFycmF5
T2JqZWN0QmFzZTo6c2V0VmVydAogICAgIG1fdmVydGV4QXR0cmliU3RhdGVbaW5kZXhdLmRpdmlz
b3IgPSBkaXZpc29yOwogfQogCi12b2lkIFdlYkdMVmVydGV4QXJyYXlPYmplY3RCYXNlOjphZGRN
ZW1iZXJzVG9PcGFxdWVSb290cyhjb25zdCBBYnN0cmFjdExvY2tlciYsIEpTQzo6U2xvdFZpc2l0
b3ImIHZpc2l0b3IpCit2b2lkIFdlYkdMVmVydGV4QXJyYXlPYmplY3RCYXNlOjphZGRNZW1iZXJz
VG9PcGFxdWVSb290cyhjb25zdCBBYnN0cmFjdExvY2tlciYsIEpTQzo6QWJzdHJhY3RTbG90Vmlz
aXRvciYgdmlzaXRvcikKIHsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QobV9ib3VuZEVsZW1l
bnRBcnJheUJ1ZmZlci5nZXQoKSk7CiAgICAgZm9yIChhdXRvJiBzdGF0ZSA6IG1fdmVydGV4QXR0
cmliU3RhdGUpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFZlcnRleEFy
cmF5T2JqZWN0QmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L1dlYkdMVmVydGV4QXJyYXlPYmplY3RCYXNlLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVmVydGV4QXJyYXlPYmplY3RCYXNlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIw
MjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0zMiw3ICszMiw3IEBACiAjaW5jbHVkZSAiV2ViR0xDb250ZXh0T2JqZWN0
LmgiCiAKIG5hbWVzcGFjZSBKU0MgewotY2xhc3MgU2xvdFZpc2l0b3I7CitjbGFzcyBBYnN0cmFj
dFNsb3RWaXNpdG9yOwogfQogCiBuYW1lc3BhY2UgV1RGIHsKQEAgLTc3LDcgKzc3LDcgQEAgcHVi
bGljOgogCiAgICAgdm9pZCBzZXRWZXJ0ZXhBdHRyaWJEaXZpc29yKEdDR0x1aW50IGluZGV4LCBH
Q0dMdWludCBkaXZpc29yKTsKIAotICAgIHZvaWQgYWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMoY29u
c3QgV1RGOjpBYnN0cmFjdExvY2tlciYsIEpTQzo6U2xvdFZpc2l0b3ImKTsKKyAgICB2b2lkIGFk
ZE1lbWJlcnNUb09wYXF1ZVJvb3RzKGNvbnN0IFdURjo6QWJzdHJhY3RMb2NrZXImLCBKU0M6OkFi
c3RyYWN0U2xvdFZpc2l0b3ImKTsKIAogcHJvdGVjdGVkOgogICAgIFdlYkdMVmVydGV4QXJyYXlP
YmplY3RCYXNlKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UmLCBUeXBlKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>420680</attachid>
            <date>2021-02-17 11:18:52 -0800</date>
            <delta_ts>2021-02-18 18:44:44 -0800</delta_ts>
            <desc>test with verifyGC ON.</desc>
            <filename>bug-217274q-EWS-verifyGC-ON.patch</filename>
            <type>text/plain</type>
            <size>601121</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDI3MjgzMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtNjEzLDYgKzYxMyw4IEBAIHNldChKYXZhU2NyaXB0Q29yZV9QUklWQVRFX0ZSQU1FV09SS19I
RUEKICAgICBkb21qaXQvRE9NSklUSGVhcFJhbmdlLmgKICAgICBkb21qaXQvRE9NSklUU2lnbmF0
dXJlLmgKIAorICAgIGhlYXAvQWJzdHJhY3RTbG90VmlzaXRvci5oCisgICAgaGVhcC9BYnN0cmFj
dFNsb3RWaXNpdG9ySW5saW5lcy5oCiAgICAgaGVhcC9BbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmgK
ICAgICBoZWFwL0FsbG9jYXRpb25GYWlsdXJlTW9kZS5oCiAgICAgaGVhcC9BbGxvY2F0b3IuaApA
QCAtNjc4LDYgKzY4MCw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9QUklWQVRFX0ZSQU1FV09SS19I
RUEKICAgICBoZWFwL01hcmtlZEJsb2NrU2V0LmgKICAgICBoZWFwL01hcmtlZFNwYWNlLmgKICAg
ICBoZWFwL01hcmtpbmdDb25zdHJhaW50LmgKKyAgICBoZWFwL01hcmtpbmdDb25zdHJhaW50RXhl
Y3V0b3JQYWlyLmgKICAgICBoZWFwL011dGF0b3JTdGF0ZS5oCiAgICAgaGVhcC9QYWNrZWRDZWxs
UHRyLmgKICAgICBoZWFwL1ByZWNpc2VBbGxvY2F0aW9uLmgKQEAgLTY4NywxMiArNjkwLDE0IEBA
IHNldChKYXZhU2NyaXB0Q29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUEKICAgICBoZWFwL1NpbXBs
ZU1hcmtpbmdDb25zdHJhaW50LmgKICAgICBoZWFwL1Nsb3RWaXNpdG9yLmgKICAgICBoZWFwL1Ns
b3RWaXNpdG9ySW5saW5lcy5oCisgICAgaGVhcC9TbG90VmlzaXRvck1hY3Jvcy5oCiAgICAgaGVh
cC9TdHJvbmcuaAogICAgIGhlYXAvU3Ryb25nSW5saW5lcy5oCiAgICAgaGVhcC9TdWJzcGFjZS5o
CiAgICAgaGVhcC9TdWJzcGFjZUlubGluZXMuaAogICAgIGhlYXAvU3luY2hyb25vdXNuZXNzLmgK
ICAgICBoZWFwL1RpbnlCbG9vbUZpbHRlci5oCisgICAgaGVhcC9WZXJpZmllclNsb3RWaXNpdG9y
LmgKICAgICBoZWFwL1Zpc2l0UmFjZUtleS5oCiAgICAgaGVhcC9XZWFrLmgKICAgICBoZWFwL1dl
YWtCbG9jay5oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CShyZXZpc2lvbiAyNzI4
MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQJKHdvcmtpbmcgY29weSkK
QEAgLTU2Myw2ICs1NjMsNyBAQCBoZWFwL1N0b3BJZk5lY2Vzc2FyeVRpbWVyLmNwcAogaGVhcC9T
dWJzcGFjZS5jcHAKIGhlYXAvU3luY2hyb25vdXNTdG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1bGVy
LmNwcAogaGVhcC9TeW5jaHJvbm91c25lc3MuY3BwCitoZWFwL1ZlcmlmaWVyU2xvdFZpc2l0b3Iu
Y3BwCiBoZWFwL1Zpc2l0UmFjZUtleS5jcHAKIGhlYXAvV2Vhay5jcHAKIGhlYXAvV2Vha0Jsb2Nr
LmNwcApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0FQSVdyYXBwZXJPYmplY3Qu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQVBJV3JhcHBlck9i
amVjdC5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pT
QVBJV3JhcHBlck9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDEsNyArNDEsNyBAQCBwdWJs
aWM6CiAgICAgc3RhdGljIHZvaWQgc3Vic3BhY2VGb3IoVk0mKSB7IFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7IH0KICAgICAKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7Ci0gICAg
c3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJik7Cisg
ICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTl9XSVRIX01PRElGSUVSKEpTX0VYUE9SVF9QUklWQVRF
KTsKICAgICAKICAgICB2b2lkKiB3cmFwcGVkT2JqZWN0KCkgeyByZXR1cm4gbV93cmFwcGVkT2Jq
ZWN0OyB9CiAgICAgdm9pZCBzZXRXcmFwcGVkT2JqZWN0KHZvaWQqKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9BUEkvSlNBUElXcmFwcGVyT2JqZWN0Lm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNBUElXcmFwcGVyT2JqZWN0Lm1tCShyZXZpc2lvbiAy
NzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQVBJV3JhcHBlck9iamVjdC5t
bQkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTM3LDcgKzM3LDcgQEAKIGNsYXNzIEpTQVBJV3JhcHBlck9i
amVjdEhhbmRsZU93bmVyIGZpbmFsIDogcHVibGljIEpTQzo6V2Vha0hhbmRsZU93bmVyIHsKIHB1
YmxpYzoKICAgICB2b2lkIGZpbmFsaXplKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQq
KSBmaW5hbDsKLSAgICBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxl
PEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6U2xvdFZpc2l0b3ImLCBjb25zdCBj
aGFyKiopIGZpbmFsOworICAgIGJvb2wgaXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpI
YW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCwgSlNDOjpBYnN0cmFjdFNsb3RWaXNp
dG9yJiwgY29uc3QgY2hhcioqKSBmaW5hbDsKIH07CiAKIHN0YXRpYyBKU0FQSVdyYXBwZXJPYmpl
Y3RIYW5kbGVPd25lcioganNBUElXcmFwcGVyT2JqZWN0SGFuZGxlT3duZXIoKQpAQCAtNTYsMTQg
KzU2LDE0IEBAIHZvaWQgSlNBUElXcmFwcGVyT2JqZWN0SGFuZGxlT3duZXI6OmZpbmEKICAgICBK
U0M6OldlYWtTZXQ6OmRlYWxsb2NhdGUoSlNDOjpXZWFrSW1wbDo6YXNXZWFrSW1wbChoYW5kbGUu
c2xvdCgpKSk7CiB9CiAKLWJvb2wgSlNBUElXcmFwcGVyT2JqZWN0SGFuZGxlT3duZXI6OmlzUmVh
Y2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2
b2lkKiwgSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqKQorYm9vbCBKU0FQ
SVdyYXBwZXJPYmplY3RIYW5kbGVPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlND
OjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBKU0M6OkFic3RyYWN0U2xvdFZp
c2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKikKIHsKICAgICBKU0M6OkpTQVBJV3JhcHBlck9i
amVjdCogd3JhcHBlck9iamVjdCA9IEpTQzo6anNDYXN0PEpTQzo6SlNBUElXcmFwcGVyT2JqZWN0
Kj4oaGFuZGxlLmdldCgpLmFzQ2VsbCgpKTsKICAgICAvLyBXZSB1c2UgdGhlIEpTR2xvYmFsT2Jq
ZWN0IHdoZW4gcHJvY2Vzc2luZyB3ZWFrIGhhbmRsZXMgdG8gcHJldmVudCB0aGUgc2l0dWF0aW9u
IHdoZXJlIHVzaW5nCiAgICAgLy8gdGhlIHNhbWUgT2JqZWN0aXZlLUMgb2JqZWN0IGluIG11bHRp
cGxlIGdsb2JhbCBvYmplY3RzIGtlZXBzIGFsbCBvZiB0aGUgZ2xvYmFsIG9iamVjdHMgYWxpdmUu
CiAgICAgaWYgKCF3cmFwcGVyT2JqZWN0LT53cmFwcGVkT2JqZWN0KCkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICByZXR1cm4gdmlzaXRvci52bSgpLmhlYXAuaXNNYXJrZWQod3JhcHBlck9i
amVjdC0+c3RydWN0dXJlKCktPmdsb2JhbE9iamVjdCgpKSAmJiB2aXNpdG9yLmNvbnRhaW5zT3Bh
cXVlUm9vdCh3cmFwcGVyT2JqZWN0LT53cmFwcGVkT2JqZWN0KCkpOworICAgIHJldHVybiB2aXNp
dG9yLmlzTWFya2VkKHdyYXBwZXJPYmplY3QtPnN0cnVjdHVyZSgpLT5nbG9iYWxPYmplY3QoKSkg
JiYgdmlzaXRvci5jb250YWluc09wYXF1ZVJvb3Qod3JhcHBlck9iamVjdC0+d3JhcHBlZE9iamVj
dCgpKTsKIH0KIAogbmFtZXNwYWNlIEpTQyB7CkBAIC03Myw2ICs3Myw4IEBAIHN0YXRpYyBKU0Nf
REVDTEFSRV9IT1NUX0ZVTkNUSU9OKGNvbnN0cnUKIHN0YXRpYyBKU0NfREVDTEFSRV9DVVNUT01f
R0VUVEVSKGNhbGxiYWNrR2V0dGVySlNBUElXcmFwcGVyT2JqZWN0Q2FsbGJhY2tPYmplY3QpOwog
c3RhdGljIEpTQ19ERUNMQVJFX0NVU1RPTV9HRVRURVIoc3RhdGljRnVuY3Rpb25HZXR0ZXJKU0FQ
SVdyYXBwZXJPYmplY3RDYWxsYmFja09iamVjdCk7CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTl9X
SVRIX01PRElGSUVSKHRlbXBsYXRlPD4sIEpTQ2FsbGJhY2tPYmplY3Q8SlNBUElXcmFwcGVyT2Jq
ZWN0Pik7CisKIHRlbXBsYXRlIDw+IGNvbnN0IENsYXNzSW5mbyBKU0NhbGxiYWNrT2JqZWN0PEpT
QVBJV3JhcHBlck9iamVjdD46OnNfaW5mbyA9IHsgIkpTQVBJV3JhcHBlck9iamVjdCIsICZCYXNl
OjpzX2luZm8sIG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNDYWxsYmFj
a09iamVjdCkgfTsKIHRlbXBsYXRlIDw+IGNvbnN0IGJvb2wgSlNDYWxsYmFja09iamVjdDxKU0FQ
SVdyYXBwZXJPYmplY3Q+OjpuZWVkc0Rlc3RydWN0aW9uID0gdHJ1ZTsKIApAQCAtMTIzLDcgKzEy
NSw4IEBAIHZvaWQgSlNBUElXcmFwcGVyT2JqZWN0OjpzZXRXcmFwcGVkT2JqZWMKICAgICBtX3dy
YXBwZWRPYmplY3QgPSBbc3RhdGljX2Nhc3Q8aWQ+KHdyYXBwZWRPYmplY3QpIHJldGFpbl07CiB9
CiAKLXZvaWQgSlNBUElXcmFwcGVyT2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwg
SlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2
b2lkIEpTQVBJV3JhcHBlck9iamVjdDo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBW
aXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTQVBJV3JhcHBlck9iamVjdCogdGhpc09iamVjdCA9
IEpTQzo6anNDYXN0PEpTQVBJV3JhcHBlck9iamVjdCo+KGNlbGwpOwogICAgIEJhc2U6OnZpc2l0
Q2hpbGRyZW4oY2VsbCwgdmlzaXRvcik7CkBAIC0xMzMsNiArMTM2LDggQEAgdm9pZCBKU0FQSVdy
YXBwZXJPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSgogICAgICAgICBzY2FuRXh0ZXJuYWxPYmplY3RH
cmFwaCh2aXNpdG9yLnZtKCksIHZpc2l0b3IsIHdyYXBwZWRPYmplY3QpOwogfQogCitERUZJTkVf
VklTSVRfQ0hJTERSRU5fV0lUSF9NT0RJRklFUihKU19FWFBPUlRfUFJJVkFURSwgSlNBUElXcmFw
cGVyT2JqZWN0KTsKKwogdGVtcGxhdGUgPD4KIElzb1N1YnNwYWNlKiBKU0NhbGxiYWNrT2JqZWN0
PEpTQVBJV3JhcHBlck9iamVjdD46OnN1YnNwYWNlRm9ySW1wbChWTSYgdm0sIFN1YnNwYWNlQWNj
ZXNzIG1vZGUpCiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tP
YmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxs
YmFja09iamVjdC5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9BUEkvSlNDYWxsYmFja09iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMTcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwNyBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJr
aXQub3JnPgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtNDEsNiArNDEsOSBAQCBzdGF0aWMgSlNDX0RF
Q0xBUkVfQ1VTVE9NX0dFVFRFUihzdGF0aWNGCiBzdGF0aWMgSlNDX0RFQ0xBUkVfQ1VTVE9NX0dF
VFRFUihjYWxsYmFja0dldHRlckpTR2xvYmFsT2JqZWN0Q2FsbGJhY2tPYmplY3QpOwogc3RhdGlj
IEpTQ19ERUNMQVJFX0NVU1RPTV9HRVRURVIoc3RhdGljRnVuY3Rpb25HZXR0ZXJKU0dsb2JhbE9i
amVjdENhbGxiYWNrT2JqZWN0KTsKIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOX1dJVEhfTU9ESUZJ
RVIodGVtcGxhdGU8PiwgSlNDYWxsYmFja09iamVjdDxKU05vbkZpbmFsT2JqZWN0Pik7CitERUZJ
TkVfVklTSVRfQ0hJTERSRU5fV0lUSF9NT0RJRklFUih0ZW1wbGF0ZTw+LCBKU0NhbGxiYWNrT2Jq
ZWN0PEpTR2xvYmFsT2JqZWN0Pik7CisKIC8vIERlZmluZSB0aGUgdHdvIHR5cGVzIG9mIEpTQ2Fs
bGJhY2tPYmplY3RzIHdlIHN1cHBvcnQuCiB0ZW1wbGF0ZSA8PiBjb25zdCBDbGFzc0luZm8gSlND
YWxsYmFja09iamVjdDxKU05vbkZpbmFsT2JqZWN0Pjo6c19pbmZvID0geyAiQ2FsbGJhY2tPYmpl
Y3QiLCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxF
KEpTQ2FsbGJhY2tPYmplY3QpIH07CiB0ZW1wbGF0ZSA8PiBjb25zdCBDbGFzc0luZm8gSlNDYWxs
YmFja09iamVjdDxKU0dsb2JhbE9iamVjdD46OnNfaW5mbyA9IHsgIkNhbGxiYWNrR2xvYmFsT2Jq
ZWN0IiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJM
RShKU0NhbGxiYWNrT2JqZWN0KSB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9K
U0NhbGxiYWNrT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQ
SS9KU0NhbGxiYWNrT2JqZWN0LmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwNyBFcmljIFNlaWRlbCA8ZXJpY0B3
ZWJraXQub3JnPgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtNjksNyArNjksMTAgQEAgcHVibGljOgog
ICAgICAgICBtX3ByaXZhdGVQcm9wZXJ0aWVzLT5kZWxldGVQcml2YXRlUHJvcGVydHkocHJvcGVy
dHlOYW1lKTsKICAgICB9CiAKLSAgICB2b2lkIHZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZp
c2l0b3IpCisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKKworICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFZpc2l0b3I+CisgICAgdm9pZCB2aXNpdENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiAg
ICAgewogICAgICAgICBKU1ByaXZhdGVQcm9wZXJ0eU1hcCogcHJvcGVydGllcyA9IG1fcHJpdmF0
ZVByb3BlcnRpZXMuZ2V0KCk7CiAgICAgICAgIGlmICghcHJvcGVydGllcykKQEAgLTEwMyw3ICsx
MDYsOCBAQCBwdWJsaWM6CiAgICAgICAgICAgICBtX3Byb3BlcnR5TWFwLnJlbW92ZShwcm9wZXJ0
eU5hbWUuaW1wbCgpKTsKICAgICAgICAgfQogCi0gICAgICAgIHZvaWQgdmlzaXRDaGlsZHJlbihT
bG90VmlzaXRvciYgdmlzaXRvcikKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4K
KyAgICAgICAgdm9pZCB2aXNpdENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiAgICAgICAgIHsK
ICAgICAgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fbG9jayk7CiAgICAgICAgICAgICBmb3Ig
KGF1dG8mIHBhaXIgOiBtX3Byb3BlcnR5TWFwKSB7CkBAIC0yMTYsMTMgKzIyMCw3IEBAIHByaXZh
dGU6CiAgICAgc3RhdGljIENhbGxEYXRhIGdldENvbnN0cnVjdERhdGEoSlNDZWxsKik7CiAgICAg
c3RhdGljIENhbGxEYXRhIGdldENhbGxEYXRhKEpTQ2VsbCopOwogCi0gICAgc3RhdGljIHZvaWQg
dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQotICAgIHsK
LSAgICAgICAgSlNDYWxsYmFja09iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0NhbGxiYWNr
T2JqZWN0Kj4oY2VsbCk7Ci0gICAgICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoKHN0YXRp
Y19jYXN0PFBhcmVudCo+KHRoaXNPYmplY3QpKSwgSlNDYWxsYmFja09iamVjdDxQYXJlbnQ+Ojpp
bmZvKCkpOwotICAgICAgICBQYXJlbnQ6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRv
cik7Ci0gICAgICAgIHRoaXNPYmplY3QtPm1fY2FsbGJhY2tPYmplY3REYXRhLT52aXNpdENoaWxk
cmVuKHZpc2l0b3IpOwotICAgIH0KKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAg
dm9pZCBpbml0KEpTR2xvYmFsT2JqZWN0Kik7CiAgCkBAIC0yNDUsNiArMjQzLDE2IEBAIHByaXZh
dGU6CiAgICAgY29uc3QgQ2xhc3NJbmZvKiBtX2NsYXNzSW5mbyB7IG51bGxwdHIgfTsKIH07CiAK
K3RlbXBsYXRlIDxjbGFzcyBQYXJlbnQ+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9p
ZCBKU0NhbGxiYWNrT2JqZWN0PFBhcmVudD46OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2Vs
bCwgVmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBKU0NhbGxiYWNrT2JqZWN0KiB0aGlzT2JqZWN0
ID0ganNDYXN0PEpTQ2FsbGJhY2tPYmplY3QqPihjZWxsKTsKKyAgICBBU1NFUlRfR0NfT0JKRUNU
X0lOSEVSSVRTKChzdGF0aWNfY2FzdDxQYXJlbnQqPih0aGlzT2JqZWN0KSksIEpTQ2FsbGJhY2tP
YmplY3Q8UGFyZW50Pjo6aW5mbygpKTsKKyAgICBQYXJlbnQ6OnZpc2l0Q2hpbGRyZW4odGhpc09i
amVjdCwgdmlzaXRvcik7CisgICAgdGhpc09iamVjdC0+bV9jYWxsYmFja09iamVjdERhdGEtPnZp
c2l0Q2hpbGRyZW4odmlzaXRvcik7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAvLyBpbmNs
dWRlIHRoZSBhY3R1YWwgdGVtcGxhdGUgY2xhc3MgaW1wbGVtZW50YXRpb24KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNNYW5hZ2VkVmFsdWUubW0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU01hbmFnZWRWYWx1ZS5tbQkocmV2aXNpb24gMjcyODMw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU01hbmFnZWRWYWx1ZS5tbQkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC00Miw3ICs0Miw3IEBACiBjbGFzcyBKU01hbmFnZWRWYWx1ZUhhbmRsZU93
bmVyIGZpbmFsIDogcHVibGljIEpTQzo6V2Vha0hhbmRsZU93bmVyIHsKIHB1YmxpYzoKICAgICB2
b2lkIGZpbmFsaXplKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQpIGZp
bmFsOwotICAgIGJvb2wgaXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlND
OjpVbmtub3duPiwgdm9pZCogY29udGV4dCwgSlNDOjpTbG90VmlzaXRvciYsIGNvbnN0IGNoYXIq
KikgZmluYWw7CisgICAgYm9vbCBpc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRs
ZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0LCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3Im
LCBjb25zdCBjaGFyKiopIGZpbmFsOwogfTsKIAogc3RhdGljIEpTTWFuYWdlZFZhbHVlSGFuZGxl
T3duZXImIG1hbmFnZWRWYWx1ZUhhbmRsZU93bmVyKCkKQEAgLTE4MCw3ICsxODAsNyBAQCBAaW50
ZXJmYWNlIEpTTWFuYWdlZFZhbHVlIChQcml2YXRlTWV0aG9kCiAtICh2b2lkKWRpc2Nvbm5lY3RW
YWx1ZTsKIEBlbmQKIAotYm9vbCBKU01hbmFnZWRWYWx1ZUhhbmRsZU93bmVyOjppc1JlYWNoYWJs
ZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0
LCBKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQorYm9vbCBK
U01hbmFnZWRWYWx1ZUhhbmRsZU93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6
OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0LCBKU0M6OkFic3RyYWN0U2xvdFZp
c2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCiB7CiAgICAgaWYgKFVOTElLRUxZ
KHJlYXNvbikpCiAgICAgICAgICpyZWFzb24gPSAiSlNNYW5hZ2VkVmFsdWUgaXMgb3BhcXVlIHJv
b3QiOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU01hcmtpbmdDb25zdHJhaW50
UHJpdmF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU01h
cmtpbmdDb25zdHJhaW50UHJpdmF0ZS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9BUEkvSlNNYXJraW5nQ29uc3RyYWludFByaXZhdGUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zNiw3ICszNiw3IEBAIG5hbWVzcGFjZSB7CiBBdG9taWM8dW5zaWduZWQ+IGNv
bnN0cmFpbnRDb3VudGVyOwogCiBzdHJ1Y3QgTWFya2VyIDogSlNNYXJrZXIgewotICAgIFNsb3RW
aXNpdG9yKiB2aXNpdG9yOworICAgIEFic3RyYWN0U2xvdFZpc2l0b3IqIHZpc2l0b3I7CiB9Owog
CiBib29sIGlzTWFya2VkKEpTTWFya2VyUmVmIG1hcmtlclJlZiwgSlNPYmplY3RSZWYgb2JqZWN0
UmVmKQpAQCAtNDQsNyArNDQsNyBAQCBib29sIGlzTWFya2VkKEpTTWFya2VyUmVmIG1hcmtlclJl
ZiwgSlNPCiAgICAgaWYgKCFvYmplY3RSZWYpCiAgICAgICAgIHJldHVybiB0cnVlOyAvLyBOdWxs
IGlzIGFuIGltbW9ydGFsIG9iamVjdC4KICAgICAKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8TWFy
a2VyKj4obWFya2VyUmVmKS0+dmlzaXRvci0+dm0oKS5oZWFwLmlzTWFya2VkKHRvSlMob2JqZWN0
UmVmKSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PE1hcmtlcio+KG1hcmtlclJlZiktPnZpc2l0
b3ItPmlzTWFya2VkKHRvSlMob2JqZWN0UmVmKSk7CiB9CiAKIHZvaWQgbWFyayhKU01hcmtlclJl
ZiBtYXJrZXJSZWYsIEpTT2JqZWN0UmVmIG9iamVjdFJlZikKQEAgLTczLDE0ICs3MywxNCBAQCB2
b2lkIEpTQ29udGV4dEdyb3VwQWRkTWFya2luZ0NvbnN0cmFpbnQoCiAgICAgYXV0byBjb25zdHJh
aW50ID0gbWFrZVVuaXF1ZTxTaW1wbGVNYXJraW5nQ29uc3RyYWludD4oCiAgICAgICAgIHRvQ1N0
cmluZygiQW1jIiwgY29uc3RyYWludEluZGV4LCAiKCIsIFJhd1BvaW50ZXIoYml0d2lzZV9jYXN0
PHZvaWQqPihjb25zdHJhaW50Q2FsbGJhY2spKSwgIikiKSwKICAgICAgICAgdG9DU3RyaW5nKCJB
UEkgTWFya2luZyBDb25zdHJhaW50ICMiLCBjb25zdHJhaW50SW5kZXgsICIgKCIsIFJhd1BvaW50
ZXIoYml0d2lzZV9jYXN0PHZvaWQqPihjb25zdHJhaW50Q2FsbGJhY2spKSwgIiwgIiwgUmF3UG9p
bnRlcih1c2VyRGF0YSksICIpIiksCi0gICAgICAgIFtjb25zdHJhaW50Q2FsbGJhY2ssIHVzZXJE
YXRhXSAoU2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsKKyAgICAgICAgTUFLRV9NQVJLSU5HX0NPTlNU
UkFJTlRfRVhFQ1VUT1JfUEFJUigoW2NvbnN0cmFpbnRDYWxsYmFjaywgdXNlckRhdGFdIChBYnN0
cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKSB7CiAgICAgICAgICAgICBNYXJrZXIgbWFya2VyOwog
ICAgICAgICAgICAgbWFya2VyLklzTWFya2VkID0gaXNNYXJrZWQ7CiAgICAgICAgICAgICBtYXJr
ZXIuTWFyayA9IG1hcms7CiAgICAgICAgICAgICBtYXJrZXIudmlzaXRvciA9ICZ2aXNpdG9yOwog
ICAgICAgICAgICAgCiAgICAgICAgICAgICBjb25zdHJhaW50Q2FsbGJhY2soJm1hcmtlciwgdXNl
ckRhdGEpOwotICAgICAgICB9LAorICAgICAgICB9KSksCiAgICAgICAgIHZvbGF0aWxpdHksCiAg
ICAgICAgIENvbnN0cmFpbnRDb25jdXJyZW5jeTo6U2VxdWVudGlhbCk7CiAgICAgCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmlydHVhbE1hY2hpbmUubW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1ZpcnR1YWxNYWNoaW5lLm1tCShyZXZpc2lv
biAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmlydHVhbE1hY2hpbmUu
bW0JKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0zMTUsNyArMzE1LDcgQEAgKyAodm9pZClzZXRDcmFzaE9u
Vk1DcmVhdGlvbjooQk9PTClzaG91bAogCiBAZW5kCiAKLXN0YXRpYyB2b2lkIHNjYW5FeHRlcm5h
bE9iamVjdEdyYXBoKEpTQzo6Vk0mIHZtLCBKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yLCB2b2lk
KiByb290LCBib29sIGxvY2tBY3F1aXJlZCkKK3N0YXRpYyB2b2lkIHNjYW5FeHRlcm5hbE9iamVj
dEdyYXBoKEpTQzo6Vk0mIHZtLCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIHZv
aWQqIHJvb3QsIGJvb2wgbG9ja0FjcXVpcmVkKQogewogICAgIEBhdXRvcmVsZWFzZXBvb2wgewog
ICAgICAgICBKU1ZpcnR1YWxNYWNoaW5lICp2aXJ0dWFsTWFjaGluZSA9IFtKU1ZNV3JhcHBlckNh
Y2hlIHdyYXBwZXJGb3JKU0NvbnRleHRHcm91cFJlZjp0b1JlZigmdm0pXTsKQEAgLTM0NywxMyAr
MzQ3LDEzIEBAIHN0YXRpYyB2b2lkIHNjYW5FeHRlcm5hbE9iamVjdEdyYXBoKEpTQzoKICAgICB9
CiB9CiAKLXZvaWQgc2NhbkV4dGVybmFsT2JqZWN0R3JhcGgoSlNDOjpWTSYgdm0sIEpTQzo6U2xv
dFZpc2l0b3ImIHZpc2l0b3IsIHZvaWQqIHJvb3QpCit2b2lkIHNjYW5FeHRlcm5hbE9iamVjdEdy
YXBoKEpTQzo6Vk0mIHZtLCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIHZvaWQq
IHJvb3QpCiB7CiAgICAgYm9vbCBsb2NrQWNxdWlyZWQgPSBmYWxzZTsKICAgICBzY2FuRXh0ZXJu
YWxPYmplY3RHcmFwaCh2bSwgdmlzaXRvciwgcm9vdCwgbG9ja0FjcXVpcmVkKTsKIH0KIAotdm9p
ZCBzY2FuRXh0ZXJuYWxSZW1lbWJlcmVkU2V0KEpTQzo6Vk0mIHZtLCBKU0M6OlNsb3RWaXNpdG9y
JiB2aXNpdG9yKQordm9pZCBzY2FuRXh0ZXJuYWxSZW1lbWJlcmVkU2V0KEpTQzo6Vk0mIHZtLCBK
U0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgQGF1dG9yZWxlYXNlcG9v
bCB7CiAgICAgICAgIEpTVmlydHVhbE1hY2hpbmUgKnZpcnR1YWxNYWNoaW5lID0gW0pTVk1XcmFw
cGVyQ2FjaGUgd3JhcHBlckZvckpTQ29udGV4dEdyb3VwUmVmOnRvUmVmKCZ2bSldOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1ZpcnR1YWxNYWNoaW5lSW50ZXJuYWwuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmlydHVhbE1hY2hpbmVJbnRl
cm5hbC5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pT
VmlydHVhbE1hY2hpbmVJbnRlcm5hbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMyLDcgKzMyLDcg
QEAKIAogbmFtZXNwYWNlIEpTQyB7CiBjbGFzcyBWTTsKLWNsYXNzIFNsb3RWaXNpdG9yOworY2xh
c3MgQWJzdHJhY3RTbG90VmlzaXRvcjsKIH0KIAogI2lmIGRlZmluZWQoX19PQkpDX18pCkBAIC01
NCw4ICs1NCw4IEBAIEpTQ29udGV4dEdyb3VwUmVmIGdldEdyb3VwRnJvbVZpcnR1YWxNYWMKIAog
I2VuZGlmIC8vIGRlZmluZWQoX19PQkpDX18pCiAKLXZvaWQgc2NhbkV4dGVybmFsT2JqZWN0R3Jh
cGgoSlNDOjpWTSYsIEpTQzo6U2xvdFZpc2l0b3ImLCB2b2lkKiByb290KTsKLXZvaWQgc2NhbkV4
dGVybmFsUmVtZW1iZXJlZFNldChKU0M6OlZNJiwgSlNDOjpTbG90VmlzaXRvciYpOwordm9pZCBz
Y2FuRXh0ZXJuYWxPYmplY3RHcmFwaChKU0M6OlZNJiwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9y
Jiwgdm9pZCogcm9vdCk7Cit2b2lkIHNjYW5FeHRlcm5hbFJlbWVtYmVyZWRTZXQoSlNDOjpWTSYs
IEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpOwogCiAjZW5kaWYgLy8gSlNDX09CSkNfQVBJX0VO
QUJMRUQKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9NYXJrZWRKU1ZhbHVlUmVm
QXJyYXkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvTWFya2Vk
SlNWYWx1ZVJlZkFycmF5LmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL0FQSS9NYXJrZWRKU1ZhbHVlUmVmQXJyYXkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAtMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ2LDcg
KzQ2LDggQEAgTWFya2VkSlNWYWx1ZVJlZkFycmF5Ojp+TWFya2VkSlNWYWx1ZVJlZgogICAgICAg
ICByZW1vdmUoKTsKIH0KIAotdm9pZCBNYXJrZWRKU1ZhbHVlUmVmQXJyYXk6OnZpc2l0QWdncmVn
YXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3Zv
aWQgTWFya2VkSlNWYWx1ZVJlZkFycmF5Ojp2aXNpdEFnZ3JlZ2F0ZShWaXNpdG9yJiB2aXNpdG9y
KQogewogICAgIEpTVmFsdWVSZWYqIGJ1ZmZlciA9IGRhdGEoKTsKICAgICBmb3IgKHVuc2lnbmVk
IGluZGV4ID0gMDsgaW5kZXggPCBtX3NpemU7ICsraW5kZXgpIHsKQEAgLTYyLDQgKzYzLDcgQEAg
dm9pZCBNYXJrZWRKU1ZhbHVlUmVmQXJyYXk6OnZpc2l0QWdncmVnYQogICAgIH0KIH0KIAordGVt
cGxhdGUgdm9pZCBNYXJrZWRKU1ZhbHVlUmVmQXJyYXk6OnZpc2l0QWdncmVnYXRlKEFic3RyYWN0
U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgTWFya2VkSlNWYWx1ZVJlZkFycmF5Ojp2aXNp
dEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYpOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvTWFya2VkSlNWYWx1ZVJlZkFycmF5LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9NYXJrZWRKU1ZhbHVlUmVmQXJyYXkuaAko
cmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9NYXJrZWRKU1Zh
bHVlUmVmQXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDIwLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02Miw3ICs2Miw3IEBAIHB1YmxpYzoKICAgICAg
ICAgcmV0dXJuIG1faW5saW5lQnVmZmVyOwogICAgIH0KIAotICAgIHZvaWQgdmlzaXRBZ2dyZWdh
dGUoU2xvdFZpc2l0b3ImKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIHZp
c2l0QWdncmVnYXRlKFZpc2l0b3ImKTsKIAogcHJpdmF0ZToKICAgICB1bnNpZ25lZCBtX3NpemU7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNBUElXcmFwcGVyR2xvYmFs
T2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIv
SlNBUElXcmFwcGVyR2xvYmFsT2JqZWN0LmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQVBJV3JhcHBlckdsb2JhbE9iamVjdC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTU5LDYgKzU5LDggQEAgc3RhdGljIEpTQ19ERUNMQVJFX0hPU1RfRlVO
Q1RJT04oY29uc3RydQogc3RhdGljIEpTQ19ERUNMQVJFX0NVU1RPTV9HRVRURVIoY2FsbGJhY2tH
ZXR0ZXJKU0FQSVdyYXBwZXJHbG9iYWxPYmplY3RDYWxsYmFja09iamVjdCk7CiBzdGF0aWMgSlND
X0RFQ0xBUkVfQ1VTVE9NX0dFVFRFUihzdGF0aWNGdW5jdGlvbkdldHRlckpTQVBJV3JhcHBlckds
b2JhbE9iamVjdENhbGxiYWNrT2JqZWN0KTsKIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOX1dJVEhf
TU9ESUZJRVIodGVtcGxhdGU8PiwgSlNDYWxsYmFja09iamVjdDxKU0FQSVdyYXBwZXJHbG9iYWxP
YmplY3Q+KTsKKwogdGVtcGxhdGUgPD4gY29uc3QgQ2xhc3NJbmZvIEpTQ2FsbGJhY2tPYmplY3Q8
SlNBUElXcmFwcGVyR2xvYmFsT2JqZWN0Pjo6c19pbmZvID0geyAiSlNBUElXcmFwcGVyR2xvYmFs
T2JqZWN0IiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9U
QUJMRShKU0NhbGxiYWNrT2JqZWN0KSB9OwogdGVtcGxhdGU8PiBjb25zdCBib29sIEpTQ2FsbGJh
Y2tPYmplY3Q8SlNBUElXcmFwcGVyR2xvYmFsT2JqZWN0Pjo6bmVlZHNEZXN0cnVjdGlvbiA9IHRy
dWU7CiAKQEAgLTE0NCw5ICsxNDYsNCBAQCB2b2lkIEpTQVBJV3JhcHBlckdsb2JhbE9iamVjdDo6
ZmluaXNoQ3JlCiAgICAgV2Vha1NldDo6YWxsb2NhdGUodGhpcywganNBUElXcmFwcGVyR2xvYmFs
T2JqZWN0SGFuZGxlT3duZXIoKSwgMCk7IC8vIEJhbGFuY2VkIGluIEpTQVBJV3JhcHBlckdsb2Jh
bE9iamVjdEhhbmRsZU93bmVyOjpmaW5hbGl6ZS4KIH0KIAotdm9pZCBKU0FQSVdyYXBwZXJHbG9i
YWxPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBKU0M6OlNsb3RWaXNpdG9yJiB2
aXNpdG9yKQotewotICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4oY2VsbCwgdmlzaXRvcik7Ci19Ci0K
IH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGli
L0pTQVBJV3JhcHBlckdsb2JhbE9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvZ2xpYi9KU0FQSVdyYXBwZXJHbG9iYWxPYmplY3QuaAkocmV2aXNpb24gMjcy
ODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQVBJV3JhcHBlckdsb2Jh
bE9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw3ICszOSw2IEBAIHB1YmxpYzoKICAgICBz
dGF0aWMgdm9pZCBzdWJzcGFjZUZvcihWTSYpIHsgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsgfQogCiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOwotICAgIHN0YXRpYyB2b2lkIHZp
c2l0Q2hpbGRyZW4oSlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpOwogCiAgICAgSlNDR0xpYldy
YXBwZXJPYmplY3QqIHdyYXBwZWRPYmplY3QoKSBjb25zdCB7IHJldHVybiBtX3dyYXBwZWRPYmpl
Y3Q7IH0KICAgICB2b2lkIHNldFdyYXBwZWRPYmplY3QoSlNDR0xpYldyYXBwZXJPYmplY3QqIHdy
YXBwZWRPYmplY3QpIHsgbV93cmFwcGVkT2JqZWN0ID0gd3JhcHBlZE9iamVjdDsgfQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQVBJV3JhcHBlck9iamVjdEdMaWIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0FQSVdyYXBw
ZXJPYmplY3RHTGliLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL0FQSS9nbGliL0pTQVBJV3JhcHBlck9iamVjdEdMaWIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSlNBUElXcmFw
cGVyT2JqZWN0LmgiCiAKKyNpbmNsdWRlICJBYnN0cmFjdFNsb3RWaXNpdG9yLmgiCiAjaW5jbHVk
ZSAiSlNDR0xpYldyYXBwZXJPYmplY3QuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5j
bHVkZSAiSlNDYWxsYmFja09iamVjdC5oIgpAQCAtMzYsNyArMzcsNyBAQAogY2xhc3MgSlNBUElX
cmFwcGVyT2JqZWN0SGFuZGxlT3duZXIgZmluYWwgOiBwdWJsaWMgSlNDOjpXZWFrSGFuZGxlT3du
ZXIgewogcHVibGljOgogICAgIHZvaWQgZmluYWxpemUoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3du
Piwgdm9pZCopIGZpbmFsOwotICAgIGJvb2wgaXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlND
OjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCwgSlNDOjpTbG90VmlzaXRvciYs
IGNvbnN0IGNoYXIqKikgZmluYWw7CisgICAgYm9vbCBpc1JlYWNoYWJsZUZyb21PcGFxdWVSb290
cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0LCBKU0M6OkFic3RyYWN0
U2xvdFZpc2l0b3ImLCBjb25zdCBjaGFyKiopIGZpbmFsOwogfTsKIAogc3RhdGljIEpTQVBJV3Jh
cHBlck9iamVjdEhhbmRsZU93bmVyKiBqc0FQSVdyYXBwZXJPYmplY3RIYW5kbGVPd25lcigpCkBA
IC01NSw3ICs1Niw3IEBAIHZvaWQgSlNBUElXcmFwcGVyT2JqZWN0SGFuZGxlT3duZXI6OmZpbmEK
ICAgICBKU0M6OldlYWtTZXQ6OmRlYWxsb2NhdGUoSlNDOjpXZWFrSW1wbDo6YXNXZWFrSW1wbCho
YW5kbGUuc2xvdCgpKSk7CiB9CiAKLWJvb2wgSlNBUElXcmFwcGVyT2JqZWN0SGFuZGxlT3duZXI6
OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFu
ZGxlLCB2b2lkKiwgSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqKQorYm9v
bCBKU0FQSVdyYXBwZXJPYmplY3RIYW5kbGVPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9v
dHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBKU0M6OkFic3RyYWN0
U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKikKIHsKICAgICBKU0M6OkpTQVBJV3Jh
cHBlck9iamVjdCogd3JhcHBlck9iamVjdCA9IEpTQzo6anNDYXN0PEpTQzo6SlNBUElXcmFwcGVy
T2JqZWN0Kj4oaGFuZGxlLmdldCgpLmFzQ2VsbCgpKTsKICAgICAvLyBXZSB1c2UgdGhlIEpTR2xv
YmFsT2JqZWN0IHdoZW4gcHJvY2Vzc2luZyB3ZWFrIGhhbmRsZXMgdG8gcHJldmVudCB0aGUgc2l0
dWF0aW9uIHdoZXJlIHVzaW5nCkBAIC03Miw2ICs3Myw4IEBAIHN0YXRpYyBKU0NfREVDTEFSRV9I
T1NUX0ZVTkNUSU9OKGNvbnN0cnUKIHN0YXRpYyBKU0NfREVDTEFSRV9DVVNUT01fR0VUVEVSKGNh
bGxiYWNrR2V0dGVySlNBUElXcmFwcGVyT2JqZWN0Q2FsbGJhY2tPYmplY3QpOwogc3RhdGljIEpT
Q19ERUNMQVJFX0NVU1RPTV9HRVRURVIoc3RhdGljRnVuY3Rpb25HZXR0ZXJKU0FQSVdyYXBwZXJP
YmplY3RDYWxsYmFja09iamVjdCk7CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTl9XSVRIX01PRElG
SUVSKHRlbXBsYXRlPD4sIEpTQ2FsbGJhY2tPYmplY3Q8SlNBUElXcmFwcGVyT2JqZWN0Pik7CisK
IHRlbXBsYXRlIDw+IGNvbnN0IENsYXNzSW5mbyBKU0NhbGxiYWNrT2JqZWN0PEpTQVBJV3JhcHBl
ck9iamVjdD46OnNfaW5mbyA9IHsgIkpTQVBJV3JhcHBlck9iamVjdCIsICZCYXNlOjpzX2luZm8s
IG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNDYWxsYmFja09iamVjdCkg
fTsKIHRlbXBsYXRlPD4gY29uc3QgYm9vbCBKU0NhbGxiYWNrT2JqZWN0PEpTQVBJV3JhcHBlck9i
amVjdD46Om5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOwogCkBAIC0xNTUsOSArMTU4LDEyIEBAIHZv
aWQgSlNBUElXcmFwcGVyT2JqZWN0OjpzZXRXcmFwcGVkT2JqZWMKICAgICBtX3dyYXBwZWRPYmpl
Y3QgPSB3cmFwcGVkT2JqZWN0OwogfQogCi12b2lkIEpTQVBJV3JhcHBlck9iamVjdDo6dmlzaXRD
aGlsZHJlbihKU0NlbGwqIGNlbGwsIEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0
ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0FQSVdyYXBwZXJPYmplY3Q6OnZpc2l0Q2hpbGRy
ZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBCYXNlOjp2aXNp
dENoaWxkcmVuKGNlbGwsIHZpc2l0b3IpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU5fV0lU
SF9NT0RJRklFUihKU19FWFBPUlRfUFJJVkFURSwgSlNBUElXcmFwcGVyT2JqZWN0KTsKKwogfSAv
LyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNp
b24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTExNTgsNiArMTE1OCw3IEBA
CiAJCTY1QjgzOTJFMUJBQ0FEMzYwMDQ0RTgyNCAvKiBDYWNoZWRSZWNvdmVyeS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjVCODM5MkMxQkFDQTkyQTAw
NDRFODI0IC8qIENhY2hlZFJlY292ZXJ5LmggKi87IH07CiAJCTZBMzhDRkFBMUUzMkI1QUIwMDYw
MjA2RiAvKiBBc3luY1N0YWNrVHJhY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDZBMzhDRkE4MUUzMkI1OEIwMDYwMjA2RiAvKiBBc3luY1N0YWNrVHJh
Y2UuaCAqLzsgfTsKIAkJNkFEMkNCNEQxOUI5MTQwMTAwMDY1NzE5IC8qIERlYnVnZ2VyRXZhbEVu
YWJsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZB
RDJDQjRDMTlCOTE0MDEwMDA2NTcxOSAvKiBEZWJ1Z2dlckV2YWxFbmFibGVyLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNkJDQ0VDMDQyNUQxRkEy
NzAwMEYzOTFEIC8qIFZlcmlmaWVyU2xvdFZpc2l0b3JJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2QkNDRUMwMzI1RDFGQTI3MDAwRjM5MUQg
LyogVmVyaWZpZXJTbG90VmlzaXRvcklubGluZXMuaCAqLzsgfTsKIAkJNzAxMTNENEMxQThEQjA5
MzAwMzg0OEM0IC8qIEl0ZXJhdG9yT3BlcmF0aW9ucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzAxMTNENEExQThEQjA5MzAwMzg0OEM0IC8qIEl0ZXJh
dG9yT3BlcmF0aW9ucy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTcwMTNDQThDMUI0OTFBOTQwMENBRTYxMyAvKiBKU01pY3JvdGFzay5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzAxM0NBOEExQjQ5MUE5
NDAwQ0FFNjEzIC8qIEpTTWljcm90YXNrLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzA1QjQxQUMxQTZFNTAxRTAwNzE2NzU3IC8qIFN5bWJvbC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzA1QjQxQTQx
QTZFNTAxRTAwNzE2NzU3IC8qIFN5bWJvbC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CkBAIC0xOTE2LDYgKzE5MTcsNyBAQAogCQlFM0ZGNzUzMzFEOUNF
QTE4MDBDN0UxNkQgLyogRE9NSklUR2V0dGVyU2V0dGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFM0ZGNzUyRjFEOUNFQTEyMDBDN0UxNkQgLyogRE9N
SklUR2V0dGVyU2V0dGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJRTQ5REMxNkMxMkVGMjk0RTAwMTg0QTFGIC8qIFNvdXJjZVByb3ZpZGVyQ2Fj
aGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0OURD
MTUxMTJFRjI3MjIwMDE4NEExRiAvKiBTb3VyY2VQcm92aWRlckNhY2hlLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTQ5REMxNkQxMkVGMjk1MzAw
MTg0QTFGIC8qIFNvdXJjZVByb3ZpZGVyQ2FjaGVJdGVtLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDlEQzE0OTEyRUYyNjFBMDAxODRBMUYgLyogU291
cmNlUHJvdmlkZXJDYWNoZUl0ZW0uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OworCQlGRTA0MTU1MzI1MkVDMDczMDA5MUVCNUQgLyogU2xvdFZpc2l0b3JN
YWNyb3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZF
MDQxNTUyMjUyRUMwNzMwMDkxRUI1RCAvKiBTbG90VmlzaXRvck1hY3Jvcy5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUZFMDVGQUZEMUZFNENFREEw
MDA5MzIzMCAvKiBEZXByZWNhdGVkSW5zcGVjdG9yVmFsdWVzLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk5MkQ2QTExMUZCRDQ5MUQwMDAyNDVGNCAv
KiBEZXByZWNhdGVkSW5zcGVjdG9yVmFsdWVzLmNwcCAqLzsgfTsKIAkJRkUwODZCQ0EyMTIzREVG
QjAwM0YyOTI5IC8qIEVudHJ5RnJhbWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEZFMDg2QkM5MjEyM0RFRkEwMDNGMjkyOSAvKiBFbnRyeUZyYW1lLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRkUwRDRB
MDYxQUI4REQwQTAwMkY1NEJGIC8qIEV4ZWN1dGlvblRpbWVMaW1pdFRlc3QuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUwRDRBMDQxQUI4REQwQTAw
MkY1NEJGIC8qIEV4ZWN1dGlvblRpbWVMaW1pdFRlc3QuY3BwICovOyB9OwpAQCAtMTkzOCw5ICsx
OTQwLDExIEBACiAJCUZFMUUyQzNGMjI0MERENTgwMEY2QjcyOSAvKiBNYWNyb0Fzc2VtYmxlckFS
TTY0RS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUx
RTJDM0UyMjQwRDMwQjAwRjZCNzI5IC8qIE1hY3JvQXNzZW1ibGVyQVJNNjRFLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRkUxRTJDNDAyMjQwREQ2
MjAwRjZCNzI5IC8qIEFSTTY0RUFzc2VtYmxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRkUxRTJDM0QyMjQwRDJGNjAwRjZCNzI5IC8qIEFSTTY0RUFz
c2VtYmxlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCUZFMjBDRTlFMTVGMDRBOTUwMERGMzQzMCAvKiBMTEludENMb29wLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTIwQ0U5QzE1RjA0QTk1MDBERjM0
MzAgLyogTExJbnRDTG9vcC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CisJCUZFMjg3RDAyMjUyRkIyRTgwMEQ3MjNGOSAvKiBWZXJpZmllclNsb3RWaXNp
dG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTI4
N0QwMTI1MkZCMkU4MDBENzIzRjkgLyogVmVyaWZpZXJTbG90VmlzaXRvci5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUZFMkE4NzYwMUYwMjM4MTYw
MEVCMzFCMiAvKiBNaW5pbXVtUmVzZXJ2ZWRab25lU2l6ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUyQTg3NUYxRjAyMzgxNjAwRUIzMUIyIC8qIE1p
bmltdW1SZXNlcnZlZFpvbmVTaXplLmggKi87IH07CiAJCUZFMzAyMkQzMUUzRDczQTUwMEJBQzQ5
MyAvKiBTaWdpbGxDcmFzaEFuYWx5emVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBGRTMwMjJEMTFFM0Q3Mzk2MDBCQUM0OTMgLyogU2lnaWxsQ3Jhc2hB
bmFseXplci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCUZFMzAyMkQ3MUU0Mjg1NzMwMEJBQzQ5MyAvKiBWTUluc3BlY3Rvci5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUzMDIyRDUxRTQyODU2NzAwQkFD
NDkzIC8qIFZNSW5zcGVjdG9yLmggKi87IH07CisJCUZFMzM2QjUzMjVEQjQ5N0QwMDk4RjAzNCAv
KiBNYXJraW5nQ29uc3RyYWludEV4ZWN1dG9yUGFpci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUzMzZCNTIyNURCNDk3RDAwOThGMDM0IC8qIE1hcmtp
bmdDb25zdHJhaW50RXhlY3V0b3JQYWlyLmggKi87IH07CiAJCUZFMzQyMjEyMUQ2QjgxQzMwMDMy
QkU4OCAvKiBUaHJvd1Njb3BlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBGRTM0MjIxMTFENkI4MThDMDAzMkJFODggLyogVGhyb3dTY29wZS5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUZFMzRFRTIxMjQz
OThBQUUwMEFBMkU3QyAvKiBFbnN1cmVTdGlsbEFsaXZlSGVyZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUzNEVFMjAyNDM5OEE5QTAwQUEyRTdDIC8q
IEVuc3VyZVN0aWxsQWxpdmVIZXJlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJRkUzODQyMzMyMzI0RDUxQjAwOURENDQ1IC8qIE9wdGlvbnNMaXN0
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTM4NDIz
MTIzMjRENTFCMDA5REQ0NDUgLyogT3B0aW9uc0xpc3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMTk3Niw2ICsxOTgwLDggQEAKIAkJRkU4MEMx
OTcxRDc3NUNERDAwODUxMEMwIC8qIENhdGNoU2NvcGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFODBDMTk2MUQ3NzVCMjcwMDg1MTBDMCAvKiBDYXRj
aFNjb3BlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJRkU4REU1NEIyM0FDMURBRDAwNUM5MTQyIC8qIENhY2hlYWJsZUlkZW50aWZpZXIuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFOERFNTRBMjNBQzFE
QUQwMDVDOTE0MiAvKiBDYWNoZWFibGVJZGVudGlmaWVyLmggKi87IH07CiAJCUZFOERFNTREMjNB
QzFFODYwMDVDOTE0MiAvKiBDYWNoZWFibGVJZGVudGlmaWVySW5saW5lcy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkU4REU1NEMyM0FDMUU4NjAwNUM5
MTQyIC8qIENhY2hlYWJsZUlkZW50aWZpZXJJbmxpbmVzLmggKi87IH07CisJCUZFOTEyQjRGMjUz
MTE5MzMwMEZBQkRERiAvKiBBYnN0cmFjdFNsb3RWaXNpdG9yLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTkxMkI0RTI1MzExOTMzMDBGQUJEREYgLyog
QWJzdHJhY3RTbG90VmlzaXRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CisJCUZFOTEyQjUxMjUzMTFBRDEwMEZBQkRERiAvKiBBYnN0cmFjdFNsb3RW
aXNpdG9ySW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gRkU5MTJCNTAyNTMxMUFEMTAwRkFCRERGIC8qIEFic3RyYWN0U2xvdFZpc2l0b3JJbmxp
bmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
RkU5OUIyNDkxQzI0QzNEMzAwQzgyMTU5IC8qIEpJVE5lZ0dlbmVyYXRvci5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkU5OUIyNDgxQzI0QjZEMzAwQzgy
MTU5IC8qIEpJVE5lZ0dlbmVyYXRvci5oICovOyB9OwogCQlGRUEwODYyMDE4MkI3QTA0MDBGNkQ4
NTEgLyogQnJlYWtwb2ludC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRkVBMDg2MUUxODJCN0EwNDAwRjZEODUxIC8qIEJyZWFrcG9pbnQuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlGRUEwODYyMTE4MkI3
QTA0MDBGNkQ4NTEgLyogRGVidWdnZXJQcmltaXRpdmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRUEwODYxRjE4MkI3QTA0MDBGNkQ4NTEgLyogRGVi
dWdnZXJQcmltaXRpdmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKQEAgLTM5ODgsNiArMzk5NCw3IEBACiAJCTZBMzhDRkE4MUUzMkI1OEIwMDYwMjA2
RiAvKiBBc3luY1N0YWNrVHJhY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
QXN5bmNTdGFja1RyYWNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZBRDJDQjRD
MTlCOTE0MDEwMDA2NTcxOSAvKiBEZWJ1Z2dlckV2YWxFbmFibGVyLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IERlYnVnZ2VyRXZhbEVuYWJsZXIuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNkJBOTNDOTU5MDQ4NEM1QkFEOTMxNkVBIC8qIEpTU2NyaXB0RmV0Y2hl
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1NjcmlwdEZldGNoZXIuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNkJDQ0VDMDMyNUQxRkEyNzAwMEYzOTFEIC8q
IFZlcmlmaWVyU2xvdFZpc2l0b3JJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFZlcmlmaWVyU2xvdFZpc2l0b3JJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTcwMTEzRDQ5MUE4REIwOTMwMDM4NDhDNCAvKiBJdGVyYXRvck9wZXJhdGlvbnMu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSXRlcmF0b3JPcGVyYXRp
b25zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzAxMTNENEExQThEQjA5MzAw
Mzg0OEM0IC8qIEl0ZXJhdG9yT3BlcmF0aW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBJdGVyYXRvck9wZXJhdGlvbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNzAxM0NBODkxQjQ5MUE5NDAwQ0FFNjEzIC8qIEpTTWljcm90YXNrLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTTWljcm90YXNrLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTUyMjEsNiArNTIyOCw3IEBACiAJCUY2OTJBODg3MDI1NTU5N0Qw
MUZGNjBGNyAvKiBKU0NKU1ZhbHVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTQ0pTVmFsdWUuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB0YWJXaWR0aCA9IDg7IH07CiAJCUY3MzkyNjkxOERDNjQzMzBBRkNERjBENyAvKiBK
U1NvdXJjZUNvZGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNT
b3VyY2VDb2RlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkUwMDI2MjIyM0Yz
QUYzMzAwM0EzNThGIC8qIFdlYkFzc2VtYmx5LmFzbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYXNtLmFzbTsgbmFtZSA9IFdlYkFz
c2VtYmx5LmFzbTsgcGF0aCA9IGxsaW50L1dlYkFzc2VtYmx5LmFzbTsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJRkUwNDE1NTIyNTJFQzA3MzAwOTFFQjVEIC8qIFNsb3RWaXNpdG9yTWFj
cm9zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNsb3RWaXNpdG9yTWFjcm9z
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFMDg2QkM5MjEyM0RFRkEwMDNGMjky
OSAvKiBFbnRyeUZyYW1lLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEVudHJ5
RnJhbWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkUwRDRBMDQxQUI4REQwQTAw
MkY1NEJGIC8qIEV4ZWN1dGlvblRpbWVMaW1pdFRlc3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBuYW1lID0gRXhlY3V0aW9uVGltZUxpbWl0VGVzdC5jcHA7IHBhdGggPSBBUEkv
dGVzdHMvRXhlY3V0aW9uVGltZUxpbWl0VGVzdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUZFMEQ0QTA1MUFCOEREMEEwMDJGNTRCRiAvKiBFeGVjdXRpb25UaW1lTGltaXRUZXN0
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEV4ZWN1dGlvblRpbWVMaW1pdFRl
c3QuaDsgcGF0aCA9IEFQSS90ZXN0cy9FeGVjdXRpb25UaW1lTGltaXRUZXN0Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01MjU1LDEyICs1MjYzLDE1IEBACiAJCUZFMUUyQzNFMjI0
MEQzMEIwMEY2QjcyOSAvKiBNYWNyb0Fzc2VtYmxlckFSTTY0RS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBNYWNyb0Fzc2VtYmxlckFSTTY0RS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlGRTIwQ0U5QjE1RjA0QTk1MDBERjM0MzAgLyogTExJbnRDTG9vcC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBMTEludENMb29wLmNwcDsgcGF0
aCA9IGxsaW50L0xMSW50Q0xvb3AuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlG
RTIwQ0U5QzE1RjA0QTk1MDBERjM0MzAgLyogTExJbnRDTG9vcC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBMTEludENMb29wLmg7IHBhdGggPSBsbGludC9MTEludENMb29wLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZFMjg3RDAxMjUyRkIyRTgwMEQ3MjNGOSAv
KiBWZXJpZmllclNsb3RWaXNpdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFZlcmlmaWVyU2xvdFZpc2l0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkUy
QTg3NUYxRjAyMzgxNjAwRUIzMUIyIC8qIE1pbmltdW1SZXNlcnZlZFpvbmVTaXplLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IE1pbmltdW1SZXNlcnZlZFpvbmVTaXplLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUZFMkJENjZFMjVDMERDODIwMDk5OUQzQiAvKiBWZXJpZmllclNsb3RWaXNpdG9y
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFZlcmlmaWVyU2xvdFZp
c2l0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTJFNkE3QTFENkVBNUZF
MDA2MEY4OTYgLyogVGhyb3dTY29wZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBUaHJvd1Njb3BlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkUz
MDIyRDAxRTNENzM5NjAwQkFDNDkzIC8qIFNpZ2lsbENyYXNoQW5hbHl6ZXIuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2lnaWxsQ3Jhc2hBbmFseXplci5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFMzAyMkQxMUUzRDczOTYwMEJBQzQ5MyAvKiBT
aWdpbGxDcmFzaEFuYWx5emVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNp
Z2lsbENyYXNoQW5hbHl6ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkUzMDIy
RDQxRTQyODU2NzAwQkFDNDkzIC8qIFZNSW5zcGVjdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFZNSW5zcGVjdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJRkUzMDIyRDUxRTQyODU2NzAwQkFDNDkzIC8qIFZNSW5zcGVjdG9yLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZNSW5zcGVjdG9yLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCUZFMzM2QjUyMjVEQjQ5N0QwMDk4RjAzNCAvKiBNYXJraW5nQ29uc3Ry
YWludEV4ZWN1dG9yUGFpci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNYXJr
aW5nQ29uc3RyYWludEV4ZWN1dG9yUGFpci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlGRTM0MjIxMTFENkI4MThDMDAzMkJFODggLyogVGhyb3dTY29wZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBUaHJvd1Njb3BlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUZFMzRFRTIwMjQzOThBOUEwMEFBMkU3QyAvKiBFbnN1cmVTdGlsbEFsaXZlSGVyZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBFbnN1cmVTdGlsbEFsaXZlSGVyZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlGRTM0RUUyMjI0Mzk4Qjg1MDBBQTJFN0MgLyogRW5zdXJlU3RpbGxBbGl2
ZUhlcmUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRW5zdXJlU3Rp
bGxBbGl2ZUhlcmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNTMyOSw2ICs1
MzQwLDggQEAKIAkJRkU4REU1NEMyM0FDMUU4NjAwNUM5MTQyIC8qIENhY2hlYWJsZUlkZW50aWZp
ZXJJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENhY2hlYWJsZUlk
ZW50aWZpZXJJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFOERFNTRF
MjNBQzNBOEUwMDVDOTE0MiAvKiBDYWNoZWFibGVJZGVudGlmaWVyLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IENhY2hlYWJsZUlkZW50aWZpZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlGRTkwQkIzQTFCN0NGNjRFMDA2QjNGMDMgLyogVk1JbmxpbmVzLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZNSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlGRTkxMkI0RTI1MzExOTMzMDBGQUJEREYgLyogQWJzdHJhY3RTbG90VmlzaXRvci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBYnN0cmFjdFNsb3RWaXNpdG9yLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZFOTEyQjUwMjUzMTFBRDEwMEZBQkRERiAv
KiBBYnN0cmFjdFNsb3RWaXNpdG9ySW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBBYnN0cmFjdFNsb3RWaXNpdG9ySW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlGRTk4QjVCNjFCQjlBRTExMDA3M0U3QTYgLyogSklUU3ViR2VuZXJhdG9yLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpJVFN1YkdlbmVyYXRvci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTk5QjI0NzFDMjRCNkQzMDBDODIxNTkgLyogSklU
TmVnR2VuZXJhdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpJ
VE5lZ0dlbmVyYXRvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFOTlCMjQ4
MUMyNEI2RDMwMEM4MjE1OSAvKiBKSVROZWdHZW5lcmF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSklUTmVnR2VuZXJhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC02Mjc4LDYgKzYyOTEsOCBAQAogCQkxNDJFMzEyQTEzNEZGMEE2MDBBRkFEQjUgLyog
aGVhcCAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJRkU5
MTJCNEUyNTMxMTkzMzAwRkFCRERGIC8qIEFic3RyYWN0U2xvdFZpc2l0b3IuaCAqLywKKwkJCQlG
RTkxMkI1MDI1MzExQUQxMDBGQUJEREYgLyogQWJzdHJhY3RTbG90VmlzaXRvcklubGluZXMuaCAq
LywKIAkJCQkwRkVDM0M1MDFGMzNBNDE2MDBGNTlCNkMgLyogQWxpZ25lZE1lbW9yeUFsbG9jYXRv
ci5jcHAgKi8sCiAJCQkJMEZFQzNDNTExRjMzQTQxNjAwRjU5QjZDIC8qIEFsaWduZWRNZW1vcnlB
bGxvY2F0b3IuaCAqLywKIAkJCQkwRkE3NjIwQTFEQjk1OUY2MDBCN0EyRkQgLyogQWxsb2NhdGlu
Z1Njb3BlLmggKi8sCkBAIC02NDA5LDYgKzY0MjQsNyBAQAogCQkJCTBGN0RGMTMwMUUyOTcwRDUw
MDk1OTUxQiAvKiBNYXJrZWRTcGFjZUlubGluZXMuaCAqLywKIAkJCQkwRjY2MEUzMzFFMDUxN0I3
MDAzMTQ2MkMgLyogTWFya2luZ0NvbnN0cmFpbnQuY3BwICovLAogCQkJCTBGNjYwRTM0MUUwNTE3
QjcwMDMxNDYyQyAvKiBNYXJraW5nQ29uc3RyYWludC5oICovLAorCQkJCUZFMzM2QjUyMjVEQjQ5
N0QwMDk4RjAzNCAvKiBNYXJraW5nQ29uc3RyYWludEV4ZWN1dG9yUGFpci5oICovLAogCQkJCTBG
NjYwRTM1MUUwNTE3QjcwMDMxNDYyQyAvKiBNYXJraW5nQ29uc3RyYWludFNldC5jcHAgKi8sCiAJ
CQkJMEY2NjBFMzYxRTA1MTdCODAwMzE0NjJDIC8qIE1hcmtpbmdDb25zdHJhaW50U2V0LmggKi8s
CiAJCQkJMEY5REFBMDYxRkQxQzNDODAwNzlDNUIyIC8qIE1hcmtpbmdDb25zdHJhaW50U29sdmVy
LmNwcCAqLywKQEAgLTY0MzUsNiArNjQ1MSw3IEBACiAJCQkJQzIyNTQ5NDIxNUY3REJBQTAwNjVF
ODk4IC8qIFNsb3RWaXNpdG9yLmNwcCAqLywKIAkJCQkxNEJBNzhGMDEzQUFCODhGMDA1QjdDMkMg
LyogU2xvdFZpc2l0b3IuaCAqLywKIAkJCQkwRkNCNDA4NTE1QzBBM0MzMDA0ODkzMkIgLyogU2xv
dFZpc2l0b3JJbmxpbmVzLmggKi8sCisJCQkJRkUwNDE1NTIyNTJFQzA3MzAwOTFFQjVEIC8qIFNs
b3RWaXNpdG9yTWFjcm9zLmggKi8sCiAJCQkJMEZERTg3RkExREZFNkU1MDAwNjRDMzkwIC8qIFNw
YWNlVGltZU11dGF0b3JTY2hlZHVsZXIuY3BwICovLAogCQkJCTBGREU4N0ZCMURGRTZFNTAwMDY0
QzM5MCAvKiBTcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyLmggKi8sCiAJCQkJMEY0RjgyODkxRTMx
Qjk3MTAwNzUxODRDIC8qIFN0b2NoYXN0aWNTcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyLmNwcCAq
LywKQEAgLTY0NTIsNiArNjQ2OSw5IEBACiAJCQkJMEYxRkIzOEExRTE3M0E2MjAwQTlCRTUwIC8q
IFN5bmNocm9ub3VzU3RvcFRoZVdvcmxkTXV0YXRvclNjaGVkdWxlci5jcHAgKi8sCiAJCQkJMEYx
RkIzOEIxRTE3M0E2MjAwQTlCRTUwIC8qIFN5bmNocm9ub3VzU3RvcFRoZVdvcmxkTXV0YXRvclNj
aGVkdWxlci5oICovLAogCQkJCTE0MTQ0OENDMTNBMTc4MzcwMEY1QkExQSAvKiBUaW55Qmxvb21G
aWx0ZXIuaCAqLywKKwkJCQlGRTJCRDY2RTI1QzBEQzgyMDA5OTlEM0IgLyogVmVyaWZpZXJTbG90
VmlzaXRvci5jcHAgKi8sCisJCQkJRkUyODdEMDEyNTJGQjJFODAwRDcyM0Y5IC8qIFZlcmlmaWVy
U2xvdFZpc2l0b3IuaCAqLywKKwkJCQk2QkNDRUMwMzI1RDFGQTI3MDAwRjM5MUQgLyogVmVyaWZp
ZXJTbG90VmlzaXRvcklubGluZXMuaCAqLywKIAkJCQkwRjREOEM3MjFGQzdBOTczMDAxRDMyQUMg
LyogVmlzaXRDb3VudGVyLmggKi8sCiAJCQkJMEY5NTJBOUYxREY3ODYwNzAwRTA2RkJEIC8qIFZp
c2l0UmFjZUtleS5jcHAgKi8sCiAJCQkJMEY5NTJBQTAxREY3ODYwNzAwRTA2RkJEIC8qIFZpc2l0
UmFjZUtleS5oICovLApAQCAtOTI5Myw2ICs5MzEzLDcgQEAKIAkJCQkxNDdCODNBQzBFNkRCOEM5
MDA0Nzc1QTQgLyogQmF0Y2hlZFRyYW5zaXRpb25PcHRpbWl6ZXIuaCBpbiBIZWFkZXJzICovLAog
CQkJCUUzNUU4OUZEMjVDNTBGODcwMDcxRUUxRSAvKiBCaWdJbnQ2NEFycmF5LmggaW4gSGVhZGVy
cyAqLywKIAkJCQk4Njk3NkU1RjFGQTNFOEJDMDBFN0M0RTEgLyogQmlnSW50Q29uc3RydWN0b3Iu
aCBpbiBIZWFkZXJzICovLAorCQkJCUZFMDQxNTUzMjUyRUMwNzMwMDkxRUI1RCAvKiBTbG90Vmlz
aXRvck1hY3Jvcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODY2NzM5RDIxM0JGREU3MTAwMjNEODdD
IC8qIEJpZ0ludGVnZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2MTgxNjc3MUZCNzkyNDIwMEVD
QzRFQyAvKiBCaWdJbnRPYmplY3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2OTc2RTVFMUZBM0U4
QjYwMEU3QzRFMSAvKiBCaWdJbnRQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovLApAQCAtOTU3NCw2
ICs5NTk1LDcgQEAKIAkJCQkwRkQ4MkU1NzE0MURBRjEwMDAxNzlDOTQgLyogREZHT1NSRW50cnku
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGRDhBMzI2MTdENTFGNTcwMENBMkM0MCAvKiBERkdPU1JF
bnRyeXBvaW50Q3JlYXRpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZDMDk3NkExNDY4
QTZGNzAwQ0YyNDQyIC8qIERGR09TUkV4aXQuaCBpbiBIZWFkZXJzICovLAorCQkJCUZFOTEyQjRG
MjUzMTE5MzMwMEZBQkRERiAvKiBBYnN0cmFjdFNsb3RWaXNpdG9yLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRjIzNUJFQzE3MTc4RTczMDA2OTBDN0YgLyogREZHT1NSRXhpdEJhc2UuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGRkI5MjFDMTZEMDJGMTEwMDU1QTVEQiAvKiBERkdPU1JFeGl0Q29tcGls
YXRpb25JbmZvLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjcwMjVBQTE3MTRCMEZDMDAzODJDMEUg
LyogREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmggaW4gSGVhZGVycyAqLywKQEAgLTk4NTksNiAr
OTg4MSw3IEBACiAJCQkJQTUxM0U1QkUxODVCRkFDQzAwN0U5NUFEIC8qIEluamVjdGVkU2NyaXB0
SG9zdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTUxM0U1Q0IxODVGOTYyNDAwN0U5NUFEIC8qIElu
amVjdGVkU2NyaXB0TWFuYWdlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTU4NDBFMjExODdCN0I4
NjAwODQzQjEwIC8qIEluamVjdGVkU2NyaXB0TW9kdWxlLmggaW4gSGVhZGVycyAqLywKKwkJCQlG
RTI4N0QwMjI1MkZCMkU4MDBENzIzRjkgLyogVmVyaWZpZXJTbG90VmlzaXRvci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQTUxM0U1QzcxODVGOTQ0NjAwN0U5NUFEIC8qIEluamVjdGVkU2NyaXB0U291
cmNlLmggaW4gSGVhZGVycyAqLywKIAkJCQk5OTU5RTkzMjFCRDE4Mjc5MDAxQUE0MTMgLyogaW5s
aW5lLWFuZC1taW5pZnktc3R5bGVzaGVldHMtYW5kLXNjcmlwdHMucHkgaW4gSGVhZGVycyAqLywK
IAkJCQk3OTA1QkI2OTFEMTIwNTBFMDAxOUZFNTcgLyogSW5saW5lQWNjZXNzLmggaW4gSGVhZGVy
cyAqLywKQEAgLTk5OTgsNiArMTAwMjEsNyBAQAogCQkJCTUzQzRGNjZCMjFCMUE0MDkwMDJGRDAw
OSAvKiBKU0FQSUdsb2JhbE9iamVjdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODQwNDgwMTMxMDIx
QTFEOTAwOEU3RjAxIC8qIEpTQVBJVmFsdWVXcmFwcGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlD
MkNGMzlDMjE2RTE1QTgxMDBERDY5QkUgLyogSlNBUElXcmFwcGVyT2JqZWN0LmggaW4gSGVhZGVy
cyAqLywKKwkJCQlGRTMzNkI1MzI1REI0OTdEMDA5OEYwMzQgLyogTWFya2luZ0NvbnN0cmFpbnRF
eGVjdXRvclBhaXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDE3MEUxNkY1Q0QwMEIzNDQ2
MCAvKiBKU0FycmF5LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCNjZFMzE3QjZCNUFCMDBBN0FF
M0YgLyogSlNBcnJheUJ1ZmZlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjY2RTUxN0I2QjVB
QjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCkBA
IC0xMDAzNCw2ICsxMDA1OCw3IEBACiAJCQkJQTU4QzAyNDIxOEU0QTQxQTAwMDMyQkM1IC8qIEpT
Q29udGV4dFByaXZhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDFFMEUxNkY1Q0QwMEIz
NDQ2MCAvKiBKU0NvbnRleHRSZWYuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1RUE3MEVFMTlGNUI1
QzQwMDk4RjVFQyAvKiBKU0NvbnRleHRSZWZJbnNwZWN0b3JTdXBwb3J0LmggaW4gSGVhZGVycyAq
LywKKwkJCQk2QkNDRUMwNDI1RDFGQTI3MDAwRjM5MUQgLyogVmVyaWZpZXJTbG90VmlzaXRvcklu
bGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1RDJFNjY1MTk1RTE3NDAwMEE1MThFNyAvKiBK
U0NvbnRleHRSZWZJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQ4Q0QxRDgxMDhDRjkw
MjAwODE2M0M2IC8qIEpTQ29udGV4dFJlZlByaXZhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUZF
NzQ5N0U2MjA5MDAxQjEwMDAzNTY1QiAvKiBKU0NQdHJUYWcuaCBpbiBIZWFkZXJzICovLApAQCAt
MTAxNjQsNiArMTAxODksNyBAQAogCQkJCTc5NUFDNjE4MjBBMjM1NUUwMDUyQzc2QyAvKiBKU1Zp
cnR1YWxNYWNoaW5lUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdDQTNBRTgxN0RBNDFB
RTAwNjUzOEFGIC8qIEpTV2Vha01hcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc0ODJFOTMxMTZB
N0NBRDAwM0IwNzEyIC8qIEpTV2Vha09iamVjdE1hcFJlZkludGVybmFsLmggaW4gSGVhZGVycyAq
LywKKwkJCQlGRTkxMkI1MTI1MzExQUQxMDBGQUJEREYgLyogQWJzdHJhY3RTbG90VmlzaXRvcklu
bGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3NDgyQjkzMTE2NzExNDcwMDNCMDcxMiAvKiBK
U1dlYWtPYmplY3RNYXBSZWZQcml2YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MzlCRkJCMDIy
QUQzQ0RDMDAyM0Y0QzAgLyogSlNXZWFrT2JqZWN0UmVmLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RjBCMjg2QjFFQjhFNkNGMDAwRUI1RDIgLyogSlNXZWFrUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8s
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy93a2J1aWx0aW5zL2J1aWx0aW5z
X2dlbmVyYXRlX2ludGVybmFsc193cmFwcGVyX2hlYWRlci5weQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy93a2J1aWx0aW5zL2J1aWx0aW5zX2dlbmVyYXRlX2lu
dGVybmFsc193cmFwcGVyX2hlYWRlci5weQkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL1NjcmlwdHMvd2tidWlsdGlucy9idWlsdGluc19nZW5lcmF0ZV9pbnRlcm5h
bHNfd3JhcHBlcl9oZWFkZXIucHkJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAjIS91
c3IvYmluL2VudiBweXRob24KICMKLSMgQ29weXJpZ2h0IChjKSAyMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyMgQ29weXJpZ2h0IChjKSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogIwogIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICMgbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC05Myw3
ICs5Myw3IEBAIGNsYXNzIEJ1aWx0aW5zSW50ZXJuYWxzV3JhcHBlckhlYWRlckdlbmUKIAogICAg
IGRlZiBnZW5lcmF0ZV9tZXRob2RzKHNlbGYpOgogICAgICAgICByZXR1cm4gIiIiCi0gICAgdm9p
ZCB2aXNpdChKU0M6OlNsb3RWaXNpdG9yJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRv
cj4gdm9pZCB2aXNpdChWaXNpdG9yJik7CiAgICAgdm9pZCBpbml0aWFsaXplKEpTRE9NR2xvYmFs
T2JqZWN0Jik7CiAiIiIKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvd2ti
dWlsdGlucy9idWlsdGluc19nZW5lcmF0ZV9pbnRlcm5hbHNfd3JhcHBlcl9pbXBsZW1lbnRhdGlv
bi5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy93a2J1aWx0
aW5zL2J1aWx0aW5zX2dlbmVyYXRlX2ludGVybmFsc193cmFwcGVyX2ltcGxlbWVudGF0aW9uLnB5
CShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy93a2J1
aWx0aW5zL2J1aWx0aW5zX2dlbmVyYXRlX2ludGVybmFsc193cmFwcGVyX2ltcGxlbWVudGF0aW9u
LnB5CSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogIyEvdXNyL2Jpbi9lbnYgcHl0aG9u
CiAjCi0jIENvcHlyaWdodCAoYykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisjIENvcHlyaWdodCAoYykgMjAxNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICMKICMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTIwLDEzICsxMjAsMTYgQEAgY2xh
c3MgQnVpbHRpbnNJbnRlcm5hbHNXcmFwcGVySW1wbGVtZW50YQogICAgICAgICByZXR1cm4gJ1xu
Jy5qb2luKGxpbmVzKQogCiAgICAgZGVmIGdlbmVyYXRlX3Zpc2l0X21ldGhvZChzZWxmKToKLSAg
ICAgICAgbGluZXMgPSBbInZvaWQgSlNCdWlsdGluSW50ZXJuYWxGdW5jdGlvbnM6OnZpc2l0KEpT
Qzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpIiwKKyAgICAgICAgbGluZXMgPSBbInRlbXBsYXRlPHR5
cGVuYW1lIFZpc2l0b3I+IiwKKyAgICAgICAgICAgICAgICAgInZvaWQgSlNCdWlsdGluSW50ZXJu
YWxGdW5jdGlvbnM6OnZpc2l0KFZpc2l0b3ImIHZpc2l0b3IpIiwKICAgICAgICAgICAgICAgICAg
InsiXQogICAgICAgICBmb3Igb2JqZWN0IGluIHNlbGYuaW50ZXJuYWxzOgogICAgICAgICAgICAg
dmlzaXQgPSAiICAgICVzLnZpc2l0KHZpc2l0b3IpOyIgJSBzZWxmLm1lbWJlcl9uYW1lKG9iamVj
dCkKICAgICAgICAgICAgIGxpbmVzLmFwcGVuZChCdWlsdGluc0dlbmVyYXRvci53cmFwX3dpdGhf
Z3VhcmQob2JqZWN0LmFubm90YXRpb25zLmdldCgnY29uZGl0aW9uYWwnKSwgdmlzaXQpKQogICAg
ICAgICBsaW5lcy5hcHBlbmQoIiAgICBVTlVTRURfUEFSQU0odmlzaXRvcik7IikKICAgICAgICAg
bGluZXMuYXBwZW5kKCJ9XG4iKQorICAgICAgICBsaW5lcy5hcHBlbmQoInRlbXBsYXRlIHZvaWQg
SlNCdWlsdGluSW50ZXJuYWxGdW5jdGlvbnM6OnZpc2l0KEFic3RyYWN0U2xvdFZpc2l0b3ImKTsi
KQorICAgICAgICBsaW5lcy5hcHBlbmQoInRlbXBsYXRlIHZvaWQgSlNCdWlsdGluSW50ZXJuYWxG
dW5jdGlvbnM6OnZpc2l0KFNsb3RWaXNpdG9yJik7XG4iKQogICAgICAgICByZXR1cm4gJ1xuJy5q
b2luKGxpbmVzKQogCiAgICAgZGVmIF9nZW5lcmF0ZV9pbml0aWFsaXplX3N0YXRpY19nbG9iYWxz
KHNlbGYpOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvd2tidWlsdGlucy9i
dWlsdGluc190ZW1wbGF0ZXMucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L1NjcmlwdHMvd2tidWlsdGlucy9idWlsdGluc190ZW1wbGF0ZXMucHkJKHJldmlzaW9uIDI3Mjgz
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL3drYnVpbHRpbnMvYnVpbHRpbnNf
dGVtcGxhdGVzLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogIyEvdXNyL2Jpbi9l
bnYgcHl0aG9uCiAjCi0jIENvcHlyaWdodCAoYykgMjAxNC0yMDE5IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyMgQ29weXJpZ2h0IChjKSAyMDE0LTIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogIyBDb3B5cmlnaHQgKEMpIDIwMTUgQ2Fub24gSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogIwogIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTE4OCw3ICsxODgsNyBAQCBwdWJsaWM6
CiAgICAgZXhwbGljaXQgJHtvYmplY3ROYW1lfUJ1aWx0aW5GdW5jdGlvbnMoSlNDOjpWTSYgdm0p
IDogbV92bSh2bSkgeyB9CiAKICAgICB2b2lkIGluaXQoSlNDOjpKU0dsb2JhbE9iamVjdCYpOwot
ICAgIHZvaWQgdmlzaXQoSlNDOjpTbG90VmlzaXRvciYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFZpc2l0b3I+IHZvaWQgdmlzaXQoVmlzaXRvciYpOwogCiBwdWJsaWM6CiAgICAgSlNDOjpWTSYg
bV92bTsKQEAgLTIwNywxMCArMjA3LDE1IEBAIGlubGluZSB2b2lkICR7b2JqZWN0TmFtZX1CdWls
dGluRnVuY3Rpb24KICN1bmRlZiBFWFBPUlRfRlVOQ1RJT04KIH0KIAotaW5saW5lIHZvaWQgJHtv
YmplY3ROYW1lfUJ1aWx0aW5GdW5jdGlvbnM6OnZpc2l0KEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0
b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgoraW5saW5lIHZvaWQgJHtvYmplY3ROYW1l
fUJ1aWx0aW5GdW5jdGlvbnM6OnZpc2l0KFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAjZGVmaW5lIFZJ
U0lUX0ZVTkNUSU9OKG5hbWUpIHZpc2l0b3IuYXBwZW5kKG1fIyNuYW1lIyNGdW5jdGlvbik7CiAg
ICAgJHttYWNyb1ByZWZpeH1fRk9SRUFDSF8ke29iamVjdE1hY3JvfV9CVUlMVElOX0ZVTkNUSU9O
X05BTUUoVklTSVRfRlVOQ1RJT04pCiAjdW5kZWYgVklTSVRfRlVOQ1RJT04KIH0KKwordGVtcGxh
dGUgdm9pZCAke29iamVjdE5hbWV9QnVpbHRpbkZ1bmN0aW9uczo6dmlzaXQoSlNDOjpBYnN0cmFj
dFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkICR7b2JqZWN0TmFtZX1CdWlsdGluRnVuY3Rp
b25zOjp2aXNpdChKU0M6OlNsb3RWaXNpdG9yJik7CisKICIiIikKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAJKHJldmlzaW9uIDI3MjgzMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTc1Nyw3ICs3NTcsOCBAQCBib29sIEFjY2Vzc0Nhc2U6OnZpc2l0V2VhayhW
TSYgdm0pIGNvbnN0CiAgICAgcmV0dXJuIGlzVmFsaWQ7CiB9CiAKLWJvb2wgQWNjZXNzQ2FzZTo6
cHJvcGFnYXRlVHJhbnNpdGlvbnMoU2xvdFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0Cit0ZW1wbGF0
ZTx0eXBlbmFtZSBWaXNpdG9yPgorYm9vbCBBY2Nlc3NDYXNlOjpwcm9wYWdhdGVUcmFuc2l0aW9u
cyhWaXNpdG9yJiB2aXNpdG9yKSBjb25zdAogewogICAgIGJvb2wgcmVzdWx0ID0gdHJ1ZTsKIApA
QCAtNzcyLDcgKzc3Myw3IEBAIGJvb2wgQWNjZXNzQ2FzZTo6cHJvcGFnYXRlVHJhbnNpdGlvbnMo
U2wKICAgICBzd2l0Y2ggKG1fdHlwZSkgewogICAgIGNhc2UgVHJhbnNpdGlvbjoKICAgICBjYXNl
IERlbGV0ZToKLSAgICAgICAgaWYgKHZpc2l0b3Iudm0oKS5oZWFwLmlzTWFya2VkKG1fc3RydWN0
dXJlLT5wcmV2aW91c0lEKCkpKQorICAgICAgICBpZiAodmlzaXRvci5pc01hcmtlZChtX3N0cnVj
dHVyZS0+cHJldmlvdXNJRCgpKSkKICAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVy
ZWQobV9zdHJ1Y3R1cmUuZ2V0KCkpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICByZXN1bHQg
PSBmYWxzZTsKQEAgLTc4NCwxMSArNzg1LDE4IEBAIGJvb2wgQWNjZXNzQ2FzZTo6cHJvcGFnYXRl
VHJhbnNpdGlvbnMoU2wKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi12b2lkIEFjY2Vzc0Nhc2U6
OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBjb25zdAordGVtcGxhdGUgYm9v
bCBBY2Nlc3NDYXNlOjpwcm9wYWdhdGVUcmFuc2l0aW9ucyhBYnN0cmFjdFNsb3RWaXNpdG9yJikg
Y29uc3Q7Cit0ZW1wbGF0ZSBib29sIEFjY2Vzc0Nhc2U6OnByb3BhZ2F0ZVRyYW5zaXRpb25zKFNs
b3RWaXNpdG9yJikgY29uc3Q7CisKKwordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQg
QWNjZXNzQ2FzZTo6dmlzaXRBZ2dyZWdhdGVJbXBsKFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0CiB7
CiAgICAgbV9pZGVudGlmaWVyLnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOwogfQogCitERUZJTkVf
VklTSVRfQUdHUkVHQVRFX1dJVEhfTU9ESUZJRVIoQWNjZXNzQ2FzZSwgY29uc3QpOworCiB2b2lk
IEFjY2Vzc0Nhc2U6OmdlbmVyYXRlV2l0aEd1YXJkKAogICAgIEFjY2Vzc0dlbmVyYXRpb25TdGF0
ZSYgc3RhdGUsIENDYWxsSGVscGVyczo6SnVtcExpc3QmIGZhbGxUaHJvdWdoKQogewpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5oCShyZXZpc2lvbiAy
NzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNy0y
MDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
Ny0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMjgwLDkgKzI4MCw5IEBAIHByaXZhdGU6CiAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgRnVuY3Rvcj4KICAgICB2b2lkIGZvckVhY2hEZXBlbmRlbnRDZWxsKFZNJiwgY29u
c3QgRnVuY3RvciYpIGNvbnN0OwogCi0gICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRv
ciYpIGNvbnN0OworICAgIERFQ0xBUkVfVklTSVRfQUdHUkVHQVRFX1dJVEhfTU9ESUZJRVIoY29u
c3QpOwogICAgIGJvb2wgdmlzaXRXZWFrKFZNJikgY29uc3Q7Ci0gICAgYm9vbCBwcm9wYWdhdGVU
cmFuc2l0aW9ucyhTbG90VmlzaXRvciYpIGNvbnN0OworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZp
c2l0b3I+IGJvb2wgcHJvcGFnYXRlVHJhbnNpdGlvbnMoVmlzaXRvciYpIGNvbnN0OwogCiAgICAg
Ly8gRklYTUU6IFRoaXMgb25seSBleGlzdHMgYmVjYXVzZSBvZiBob3cgQWNjZXNzQ2FzZSBwdXRz
IHBvc3QtZ2VuZXJhdGlvbiB0aGluZ3MgaW50byBpdHNlbGYuCiAgICAgLy8gaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NjQ1NgpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0J5VmFsSW5mby5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0J5VmFsSW5mby5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeVZhbEluZm8uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAtMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTMyLDExICszMiwxNCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogI2lmIEVOQUJMRShKSVQpCiAKLXZv
aWQgQnlWYWxJbmZvOjp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBs
YXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEJ5VmFsSW5mbzo6dmlzaXRBZ2dyZWdhdGVJbXBs
KFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgY2FjaGVkSWQudmlzaXRBZ2dyZWdhdGUodmlzaXRv
cik7CiB9CiAKK0RFRklORV9WSVNJVF9BR0dSRUdBVEUoQnlWYWxJbmZvKTsKKwogI2VuZGlmIC8v
IEVOQUJMRShKSVQpCiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0J5VmFsSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9CeVZhbEluZm8uaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5VmFsSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE4IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MjYwLDcgKzI2MCw3IEBAIHN0cnVjdCBCeVZhbEluZm8gewogICAgICAgICB0aGlzLT5zZWVuID0g
ZmFsc2U7CiAgICAgfQogCi0gICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYpOwor
ICAgIERFQ0xBUkVfVklTSVRfQUdHUkVHQVRFOwogCiAgICAgQ29kZUxvY2F0aW9uSnVtcDxKU0lu
dGVybmFsUHRyVGFnPiBub3RJbmRleEp1bXA7CiAgICAgQ29kZUxvY2F0aW9uSnVtcDxKU0ludGVy
bmFsUHRyVGFnPiBiYWRUeXBlSnVtcDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9DaGVja1ByaXZhdGVCcmFuZFN0YXR1cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NoZWNrUHJpdmF0ZUJyYW5kU3RhdHVzLmNwcAkocmV2aXNp
b24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NoZWNrUHJpdmF0
ZUJyYW5kU3RhdHVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjI4LDE4ICsyMjgsMjUgQEAgQ2Fj
aGVhYmxlSWRlbnRpZmllciBDaGVja1ByaXZhdGVCcmFuZFN0YQogICAgIHJldHVybiByZXN1bHQ7
CiB9CiAKLXZvaWQgQ2hlY2tQcml2YXRlQnJhbmRTdGF0dXM6OnZpc2l0QWdncmVnYXRlKFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgQ2hlY2tQ
cml2YXRlQnJhbmRTdGF0dXM6OnZpc2l0QWdncmVnYXRlSW1wbChWaXNpdG9yJiB2aXNpdG9yKQog
ewogICAgIGZvciAoQ2hlY2tQcml2YXRlQnJhbmRWYXJpYW50JiB2YXJpYW50IDogbV92YXJpYW50
cykKICAgICAgICAgdmFyaWFudC52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKIH0KIAotdm9pZCBD
aGVja1ByaXZhdGVCcmFuZFN0YXR1czo6bWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImIHZpc2l0b3Ip
CitERUZJTkVfVklTSVRfQUdHUkVHQVRFKENoZWNrUHJpdmF0ZUJyYW5kU3RhdHVzKTsKKwordGVt
cGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgQ2hlY2tQcml2YXRlQnJhbmRTdGF0dXM6Om1h
cmtJZkNoZWFwKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgZm9yIChDaGVja1ByaXZhdGVCcmFu
ZFZhcmlhbnQmIHZhcmlhbnQgOiBtX3ZhcmlhbnRzKQogICAgICAgICB2YXJpYW50Lm1hcmtJZkNo
ZWFwKHZpc2l0b3IpOwogfQogCit0ZW1wbGF0ZSB2b2lkIENoZWNrUHJpdmF0ZUJyYW5kU3RhdHVz
OjptYXJrSWZDaGVhcChBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIENoZWNr
UHJpdmF0ZUJyYW5kU3RhdHVzOjptYXJrSWZDaGVhcChTbG90VmlzaXRvciYpOworCiBib29sIENo
ZWNrUHJpdmF0ZUJyYW5kU3RhdHVzOjpmaW5hbGl6ZShWTSYgdm0pCiB7CiAgICAgZm9yIChhdXRv
JiB2YXJpYW50IDogbV92YXJpYW50cykgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0NoZWNrUHJpdmF0ZUJyYW5kU3RhdHVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NoZWNrUHJpdmF0ZUJyYW5kU3RhdHVzLmgJKHJldmlzaW9u
IDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DaGVja1ByaXZhdGVC
cmFuZFN0YXR1cy5oCSh3b3JraW5nIGNvcHkpCkBAIC04Miw4ICs4Miw4IEBAIHB1YmxpYzoKICAg
ICAvLyBBdHRlbXB0cyB0byByZWR1Y2UgdGhlIHNldCBvZiB2YXJpYW50cyB0byBmaXQgdGhlIGdp
dmVuIHN0cnVjdHVyZSBzZXQuIFRoaXMgbWF5IGJlIGFwcHJveGltYXRlLgogICAgIHZvaWQgZmls
dGVyKGNvbnN0IFN0cnVjdHVyZVNldCYpOwogCi0gICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShTbG90
VmlzaXRvciYpOwotICAgIHZvaWQgbWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImKTsKKyAgICBERUNM
QVJFX1ZJU0lUX0FHR1JFR0FURTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lk
IG1hcmtJZkNoZWFwKFZpc2l0b3ImKTsKICAgICBib29sIGZpbmFsaXplKFZNJik7CiAKICAgICBi
b29sIGFwcGVuZFZhcmlhbnQoY29uc3QgQ2hlY2tQcml2YXRlQnJhbmRWYXJpYW50Jik7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2hlY2tQcml2YXRlQnJhbmRWYXJpYW50
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2hlY2tQ
cml2YXRlQnJhbmRWYXJpYW50LmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NoZWNrUHJpdmF0ZUJyYW5kVmFyaWFudC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTUxLDExICs1MSwxNSBAQCBib29sIENoZWNrUHJpdmF0ZUJyYW5kVmFyaWFudDo6
YXR0ZW1wdFRvCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgQ2hlY2tQcml2YXRlQnJhbmRW
YXJpYW50OjptYXJrSWZDaGVhcChTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVu
YW1lIFZpc2l0b3I+Cit2b2lkIENoZWNrUHJpdmF0ZUJyYW5kVmFyaWFudDo6bWFya0lmQ2hlYXAo
VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBtX3N0cnVjdHVyZVNldC5tYXJrSWZDaGVhcCh2aXNp
dG9yKTsKIH0KIAordGVtcGxhdGUgdm9pZCBDaGVja1ByaXZhdGVCcmFuZFZhcmlhbnQ6Om1hcmtJ
ZkNoZWFwKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgQ2hlY2tQcml2YXRl
QnJhbmRWYXJpYW50OjptYXJrSWZDaGVhcChTbG90VmlzaXRvciYpOworCiBib29sIENoZWNrUHJp
dmF0ZUJyYW5kVmFyaWFudDo6ZmluYWxpemUoVk0mIHZtKQogewogICAgIGlmICghbV9zdHJ1Y3R1
cmVTZXQuaXNTdGlsbEFsaXZlKHZtKSkKQEAgLTYzLDExICs2NywxNCBAQCBib29sIENoZWNrUHJp
dmF0ZUJyYW5kVmFyaWFudDo6ZmluYWxpemUoCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQg
Q2hlY2tQcml2YXRlQnJhbmRWYXJpYW50Ojp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYgdmlz
aXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIENoZWNrUHJpdmF0ZUJyYW5k
VmFyaWFudDo6dmlzaXRBZ2dyZWdhdGVJbXBsKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgbV9p
ZGVudGlmaWVyLnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOwogfQogCitERUZJTkVfVklTSVRfQUdH
UkVHQVRFKENoZWNrUHJpdmF0ZUJyYW5kVmFyaWFudCk7CisKIHZvaWQgQ2hlY2tQcml2YXRlQnJh
bmRWYXJpYW50OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiB7CiAgICAgZHVtcEluQ29u
dGV4dChvdXQsIG51bGxwdHIpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NoZWNrUHJpdmF0ZUJyYW5kVmFyaWFudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9DaGVja1ByaXZhdGVCcmFuZFZhcmlhbnQuaAkocmV2aXNpb24gMjcy
ODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NoZWNrUHJpdmF0ZUJyYW5k
VmFyaWFudC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Niw4ICs0Niw4IEBAIHB1YmxpYzoKIAogICAg
IGJvb2wgYXR0ZW1wdFRvTWVyZ2UoY29uc3QgQ2hlY2tQcml2YXRlQnJhbmRWYXJpYW50JiBvdGhl
cik7CiAKLSAgICB2b2lkIHZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJik7Ci0gICAgdm9pZCBt
YXJrSWZDaGVhcChTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQUdHUkVHQVRFOwor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgbWFya0lmQ2hlYXAoVmlzaXRvciYp
OwogICAgIGJvb2wgZmluYWxpemUoVk0mKTsKIAogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYp
IGNvbnN0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9j
ay5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDAxLDcgKzEwMDEsOCBAQCBzaXpl
X3QgQ29kZUJsb2NrOjplc3RpbWF0ZWRTaXplKEpTQ2VsbCogCiAgICAgcmV0dXJuIEJhc2U6OmVz
dGltYXRlZFNpemUoY2VsbCwgdm0pICsgZXh0cmFNZW1vcnlBbGxvY2F0ZWQ7CiB9CiAKLXZvaWQg
Q29kZUJsb2NrOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0
b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBDb2RlQmxvY2s6OnZpc2l0Q2hp
bGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBDb2RlQmxv
Y2sqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8Q29kZUJsb2NrKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dD
X09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtMTAxMCw5ICsxMDExLDE0
IEBAIHZvaWQgQ29kZUJsb2NrOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2UKICAgICB0aGlzT2Jq
ZWN0LT52aXNpdENoaWxkcmVuKHZpc2l0b3IpOwogfQogCi12b2lkIENvZGVCbG9jazo6dmlzaXRD
aGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK0RFRklORV9WSVNJVF9DSElMRFJFTihDb2Rl
QmxvY2spOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBDb2RlQmxvY2s6OnZp
c2l0Q2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBDb25jdXJyZW50SlNMb2NrZXIg
bG9ja2VyKG1fbG9jayk7CisKKyAgICBtX3Zpc2l0Q2hpbGRyZW5Ta2lwcGVkRHVlVG9PbGRBZ2Ug
PSBmYWxzZTsKICAgICBpZiAoQ29kZUJsb2NrKiBvdGhlckJsb2NrID0gc3BlY2lhbE9TUkVudHJ5
QmxvY2tPck51bGwoKSkKICAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZChvdGhlckJs
b2NrKTsKIApAQCAtMTAyOSwxMyArMTAzNSwyMiBAQCB2b2lkIENvZGVCbG9jazo6dmlzaXRDaGls
ZHJlbihTbG90VmlzaXRvCiAgICAgVk06OlNwYWNlQW5kU2V0OjpzZXRGb3IoKnN1YnNwYWNlKCkp
LmFkZCh0aGlzKTsKIH0KIAotYm9vbCBDb2RlQmxvY2s6OnNob3VsZFZpc2l0U3Ryb25nbHkoY29u
c3QgQ29uY3VycmVudEpTTG9ja2VyJiBsb2NrZXIpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
PgorYm9vbCBDb2RlQmxvY2s6OnNob3VsZFZpc2l0U3Ryb25nbHkoY29uc3QgQ29uY3VycmVudEpT
TG9ja2VyJiBsb2NrZXIsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgaWYgKE9wdGlvbnM6OmZv
cmNlQ29kZUJsb2NrTGl2ZW5lc3MoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBpZiAo
c2hvdWxkSmV0dGlzb25EdWVUb09sZEFnZShsb2NrZXIpKQorICAgIGlmIChzaG91bGRKZXR0aXNv
bkR1ZVRvT2xkQWdlKGxvY2tlciwgdmlzaXRvcikpIHsKKyAgICAgICAgaWYgKE9wdGlvbnM6OnZl
cmlmeUdDKCkpCisgICAgICAgICAgICBtX3Zpc2l0Q2hpbGRyZW5Ta2lwcGVkRHVlVG9PbGRBZ2Ug
PSB0cnVlOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKFVOTElLRUxZ
KG1fdmlzaXRDaGlsZHJlblNraXBwZWREdWVUb09sZEFnZSkpIHsKKyAgICAgICAgUkVMRUFTRV9B
U1NFUlQoT3B0aW9uczo6dmVyaWZ5R0MoKSk7IC8vIG1sYW0gQVNTRVJUPwogICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQogCiAgICAgLy8gSW50ZXJwcmV0ZXIgYW5kIEJhc2VsaW5lIEpJVCBD
b2RlQmxvY2tzIGRvbid0IG5lZWQgdG8gYmUgamV0dGlzb25lZCB3aGVuCiAgICAgLy8gdGhlaXIg
d2VhayByZWZlcmVuY2VzIGdvIHN0YWxlLiBTbyBpZiBhIGJhc2xpbmUgSklUIENvZGVCbG9jayBn
ZXRzCkBAIC0xMDQ2LDYgKzEwNjEsOSBAQCBib29sIENvZGVCbG9jazo6c2hvdWxkVmlzaXRTdHJv
bmdseShjb25zCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCit0ZW1wbGF0ZSBib29sIENvZGVCbG9j
azo6c2hvdWxkVmlzaXRTdHJvbmdseShjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBBYnN0cmFj
dFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSBib29sIENvZGVCbG9jazo6c2hvdWxkVmlzaXRTdHJv
bmdseShjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBTbG90VmlzaXRvciYpOworCiBib29sIENv
ZGVCbG9jazo6c2hvdWxkSmV0dGlzb25EdWVUb1dlYWtSZWZlcmVuY2UoVk0mIHZtKQogewogICAg
IGlmICghSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGppdFR5cGUoKSkpCkBAIC0xMDg2LDkgKzEx
MDQsMTAgQEAgc3RhdGljIFNlY29uZHMgdGltZVRvTGl2ZShKSVRUeXBlIGppdFR5cAogICAgIH0K
IH0KIAotYm9vbCBDb2RlQmxvY2s6OnNob3VsZEpldHRpc29uRHVlVG9PbGRBZ2UoY29uc3QgQ29u
Y3VycmVudEpTTG9ja2VyJikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Citib29sIENvZGVC
bG9jazo6c2hvdWxkSmV0dGlzb25EdWVUb09sZEFnZShjb25zdCBDb25jdXJyZW50SlNMb2NrZXIm
LCBWaXNpdG9yJiB2aXNpdG9yKQogewotICAgIGlmIChtX3ZtLT5oZWFwLmlzTWFya2VkKHRoaXMp
KQorICAgIGlmICh2aXNpdG9yLmlzTWFya2VkKHRoaXMpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKICAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6Zm9yY2VDb2RlQmxvY2tUb0pldHRpc29uRHVl
VG9PbGRBZ2UoKSkpCkBAIC0xMTAxLDEyICsxMTIwLDEzIEBAIGJvb2wgQ29kZUJsb2NrOjpzaG91
bGRKZXR0aXNvbkR1ZVRvT2xkQWcKIH0KIAogI2lmIEVOQUJMRShERkdfSklUKQotc3RhdGljIGJv
b2wgc2hvdWxkTWFya1RyYW5zaXRpb24oVk0mIHZtLCBERkc6OldlYWtSZWZlcmVuY2VUcmFuc2l0
aW9uJiB0cmFuc2l0aW9uKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3N0YXRpYyBpbmxp
bmUgYm9vbCBzaG91bGRNYXJrVHJhbnNpdGlvbihWaXNpdG9yJiB2aXNpdG9yLCBERkc6OldlYWtS
ZWZlcmVuY2VUcmFuc2l0aW9uJiB0cmFuc2l0aW9uKQogewotICAgIGlmICh0cmFuc2l0aW9uLm1f
Y29kZU9yaWdpbiAmJiAhdm0uaGVhcC5pc01hcmtlZCh0cmFuc2l0aW9uLm1fY29kZU9yaWdpbi5n
ZXQoKSkpCisgICAgaWYgKHRyYW5zaXRpb24ubV9jb2RlT3JpZ2luICYmICF2aXNpdG9yLmlzTWFy
a2VkKHRyYW5zaXRpb24ubV9jb2RlT3JpZ2luLmdldCgpKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIAotICAgIGlmICghdm0uaGVhcC5pc01hcmtlZCh0cmFuc2l0aW9uLm1fZnJvbS5nZXQo
KSkpCisgICAgaWYgKCF2aXNpdG9yLmlzTWFya2VkKHRyYW5zaXRpb24ubV9mcm9tLmdldCgpKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAogICAgIHJldHVybiB0cnVlOwpAQCAtMTEyMiw4
ICsxMTQyLDEwIEBAIEJ5dGVjb2RlSW5kZXggQ29kZUJsb2NrOjpieXRlY29kZUluZGV4Rm8KIH0K
ICNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKIAotdm9pZCBDb2RlQmxvY2s6OnByb3BhZ2F0ZVRy
YW5zaXRpb25zKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIFNsb3RWaXNpdG9yJiB2aXNpdG9y
KQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgQ29kZUJsb2NrOjpwcm9wYWdhdGVU
cmFuc2l0aW9ucyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBWaXNpdG9yJiB2aXNpdG9yKQog
eworICAgIHR5cGVuYW1lIFZpc2l0b3I6OlN1cHByZXNzR0NWZXJpZmllclNjb3BlIHN1cHByZXNz
U2NvcGUodmlzaXRvcik7CiAgICAgVk0mIHZtID0gKm1fdm07CiAKICAgICBpZiAoaml0VHlwZSgp
ID09IEpJVFR5cGU6OkludGVycHJldGVyVGh1bmspIHsKQEAgLTExMzMsOCArMTE1NSw5IEBAIHZv
aWQgQ29kZUJsb2NrOjpwcm9wYWdhdGVUcmFuc2l0aW9ucyhjb24KICAgICAgICAgICAgICAgICBT
dHJ1Y3R1cmVJRCBuZXdTdHJ1Y3R1cmVJRCA9IG1ldGFkYXRhLm1fbmV3U3RydWN0dXJlSUQ7CiAg
ICAgICAgICAgICAgICAgaWYgKCFvbGRTdHJ1Y3R1cmVJRCB8fCAhbmV3U3RydWN0dXJlSUQpCiAg
ICAgICAgICAgICAgICAgICAgIHJldHVybjsKKwogICAgICAgICAgICAgICAgIFN0cnVjdHVyZSog
b2xkU3RydWN0dXJlID0gdm0uaGVhcC5zdHJ1Y3R1cmVJRFRhYmxlKCkuZ2V0KG9sZFN0cnVjdHVy
ZUlEKTsKLSAgICAgICAgICAgICAgICBpZiAodm0uaGVhcC5pc01hcmtlZChvbGRTdHJ1Y3R1cmUp
KSB7CisgICAgICAgICAgICAgICAgaWYgKHZpc2l0b3IuaXNNYXJrZWQob2xkU3RydWN0dXJlKSkg
ewogICAgICAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IHZtLmhlYXAu
c3RydWN0dXJlSURUYWJsZSgpLmdldChuZXdTdHJ1Y3R1cmVJRCk7CiAgICAgICAgICAgICAgICAg
ICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQobmV3U3RydWN0dXJlKTsKICAgICAgICAgICAg
ICAgICB9CkBAIC0xMTQ4LDExICsxMTcxLDExIEBAIHZvaWQgQ29kZUJsb2NrOjpwcm9wYWdhdGVU
cmFuc2l0aW9ucyhjb24KIAogICAgICAgICAgICAgICAgIEpTQ2VsbCogcHJvcGVydHkgPSBtZXRh
ZGF0YS5tX3Byb3BlcnR5LmdldCgpOwogICAgICAgICAgICAgICAgIEFTU0VSVChwcm9wZXJ0eSk7
Ci0gICAgICAgICAgICAgICAgaWYgKCF2bS5oZWFwLmlzTWFya2VkKHByb3BlcnR5KSkKKyAgICAg
ICAgICAgICAgICBpZiAoIXZpc2l0b3IuaXNNYXJrZWQocHJvcGVydHkpKQogICAgICAgICAgICAg
ICAgICAgICByZXR1cm47CiAKICAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVy
ZSA9IHZtLmhlYXAuc3RydWN0dXJlSURUYWJsZSgpLmdldChvbGRTdHJ1Y3R1cmVJRCk7Ci0gICAg
ICAgICAgICAgICAgaWYgKHZtLmhlYXAuaXNNYXJrZWQob2xkU3RydWN0dXJlKSkgeworICAgICAg
ICAgICAgICAgIGlmICh2aXNpdG9yLmlzTWFya2VkKG9sZFN0cnVjdHVyZSkpIHsKICAgICAgICAg
ICAgICAgICAgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSB2bS5oZWFwLnN0cnVjdHVyZUlE
VGFibGUoKS5nZXQobmV3U3RydWN0dXJlSUQpOwogICAgICAgICAgICAgICAgICAgICB2aXNpdG9y
LmFwcGVuZFVuYmFycmllcmVkKG5ld1N0cnVjdHVyZSk7CiAgICAgICAgICAgICAgICAgfQpAQCAt
MTE2NiwxMSArMTE4OSwxMSBAQCB2b2lkIENvZGVCbG9jazo6cHJvcGFnYXRlVHJhbnNpdGlvbnMo
Y29uCiAKICAgICAgICAgICAgICAgICBKU0NlbGwqIGJyYW5kID0gbWV0YWRhdGEubV9icmFuZC5n
ZXQoKTsKICAgICAgICAgICAgICAgICBBU1NFUlQoYnJhbmQpOwotICAgICAgICAgICAgICAgIGlm
ICghdm0uaGVhcC5pc01hcmtlZChicmFuZCkpCisgICAgICAgICAgICAgICAgaWYgKCF2aXNpdG9y
LmlzTWFya2VkKGJyYW5kKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAg
ICAgICAgICAgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUgPSB2bS5oZWFwLnN0cnVjdHVyZUlEVGFi
bGUoKS5nZXQob2xkU3RydWN0dXJlSUQpOwotICAgICAgICAgICAgICAgIGlmICh2bS5oZWFwLmlz
TWFya2VkKG9sZFN0cnVjdHVyZSkpIHsKKyAgICAgICAgICAgICAgICBpZiAodmlzaXRvci5pc01h
cmtlZChvbGRTdHJ1Y3R1cmUpKSB7CiAgICAgICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogbmV3
U3RydWN0dXJlID0gdm0uaGVhcC5zdHJ1Y3R1cmVJRFRhYmxlKCkuZ2V0KG5ld1N0cnVjdHVyZUlE
KTsKICAgICAgICAgICAgICAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZChuZXdTdHJ1
Y3R1cmUpOwogICAgICAgICAgICAgICAgIH0KQEAgLTExOTcsNyArMTIyMCw3IEBAIHZvaWQgQ29k
ZUJsb2NrOjpwcm9wYWdhdGVUcmFuc2l0aW9ucyhjb24KICAgICAgICAgICAgIHZtLmdldFN0cnVj
dHVyZShzdHJ1Y3R1cmVJRCktPm1hcmtJZkNoZWFwKHZpc2l0b3IpOwogCiAgICAgICAgIGZvciAo
YXV0byYgdHJhbnNpdGlvbiA6IGRmZ0NvbW1vbi0+dHJhbnNpdGlvbnMpIHsKLSAgICAgICAgICAg
IGlmIChzaG91bGRNYXJrVHJhbnNpdGlvbih2bSwgdHJhbnNpdGlvbikpIHsKKyAgICAgICAgICAg
IGlmIChzaG91bGRNYXJrVHJhbnNpdGlvbih2aXNpdG9yLCB0cmFuc2l0aW9uKSkgewogICAgICAg
ICAgICAgICAgIC8vIElmIHRoZSBmb2xsb3dpbmcgdGhyZWUgdGhpbmdzIGFyZSBsaXZlLCB0aGVu
IHRoZSB0YXJnZXQgb2YgdGhlCiAgICAgICAgICAgICAgICAgLy8gdHJhbnNpdGlvbiBpcyBhbHNv
IGxpdmU6CiAgICAgICAgICAgICAgICAgLy8KQEAgLTEyMjQsMTMgKzEyNDcsMTcgQEAgdm9pZCBD
b2RlQmxvY2s6OnByb3BhZ2F0ZVRyYW5zaXRpb25zKGNvbgogI2VuZGlmIC8vIEVOQUJMRShERkdf
SklUKQogfQogCi12b2lkIENvZGVCbG9jazo6ZGV0ZXJtaW5lTGl2ZW5lc3MoY29uc3QgQ29uY3Vy
cmVudEpTTG9ja2VyJiwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZSB2b2lkIENvZGVC
bG9jazo6cHJvcGFnYXRlVHJhbnNpdGlvbnMoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgQWJz
dHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBDb2RlQmxvY2s6OnByb3BhZ2F0ZVRy
YW5zaXRpb25zKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIFNsb3RWaXNpdG9yJik7CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIENvZGVCbG9jazo6ZGV0ZXJtaW5lTGl2ZW5l
c3MoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBV
TlVTRURfUEFSQU0odmlzaXRvcik7CiAgICAgCiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAgVk0m
IHZtID0gKm1fdm07Ci0gICAgaWYgKHZtLmhlYXAuaXNNYXJrZWQodGhpcykpCisgICAgaWYgKHZp
c2l0b3IuaXNNYXJrZWQodGhpcykpCiAgICAgICAgIHJldHVybjsKICAgICAKICAgICAvLyBJbiBy
YXJlIGFuZCB3ZWlyZCBjYXNlcywgdGhpcyBjb3VsZCBiZSBjYWxsZWQgb24gYSBiYXNlbGluZSBD
b2RlQmxvY2suIE9uZSB0aGF0IEkgZm91bmQgd2FzCkBAIC0xMjQ3LDcgKzEyNzQsNyBAQCB2b2lk
IENvZGVCbG9jazo6ZGV0ZXJtaW5lTGl2ZW5lc3MoY29uc3QgCiAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGRmZ0NvbW1vbi0+d2Vha1JlZmVyZW5jZXMuc2l6ZSgpOyArK2kpIHsKICAgICAg
ICAgSlNDZWxsKiByZWZlcmVuY2UgPSBkZmdDb21tb24tPndlYWtSZWZlcmVuY2VzW2ldLmdldCgp
OwogICAgICAgICBBU1NFUlQoIWpzRHluYW1pY0Nhc3Q8Q29kZUJsb2NrKj4odm0sIHJlZmVyZW5j
ZSkpOwotICAgICAgICBpZiAoIXZtLmhlYXAuaXNNYXJrZWQocmVmZXJlbmNlKSkgeworICAgICAg
ICBpZiAoIXZpc2l0b3IuaXNNYXJrZWQocmVmZXJlbmNlKSkgewogICAgICAgICAgICAgYWxsQXJl
TGl2ZVNvRmFyID0gZmFsc2U7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtMTI1
NSw3ICsxMjgyLDcgQEAgdm9pZCBDb2RlQmxvY2s6OmRldGVybWluZUxpdmVuZXNzKGNvbnN0IAog
ICAgIGlmIChhbGxBcmVMaXZlU29GYXIpIHsKICAgICAgICAgZm9yIChTdHJ1Y3R1cmVJRCBzdHJ1
Y3R1cmVJRCA6IGRmZ0NvbW1vbi0+d2Vha1N0cnVjdHVyZVJlZmVyZW5jZXMpIHsKICAgICAgICAg
ICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gdm0uZ2V0U3RydWN0dXJlKHN0cnVjdHVyZUlEKTsK
LSAgICAgICAgICAgIGlmICghdm0uaGVhcC5pc01hcmtlZChzdHJ1Y3R1cmUpKSB7CisgICAgICAg
ICAgICBpZiAoIXZpc2l0b3IuaXNNYXJrZWQoc3RydWN0dXJlKSkgewogICAgICAgICAgICAgICAg
IGFsbEFyZUxpdmVTb0ZhciA9IGZhbHNlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgfQpAQCAtMTI3Myw2ICsxMzAwLDkgQEAgdm9pZCBDb2RlQmxvY2s6OmRldGVybWluZUxp
dmVuZXNzKGNvbnN0IAogI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQogfQogCit0ZW1wbGF0ZSB2
b2lkIENvZGVCbG9jazo6ZGV0ZXJtaW5lTGl2ZW5lc3MoY29uc3QgQ29uY3VycmVudEpTTG9ja2Vy
JiwgQWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBDb2RlQmxvY2s6OmRldGVy
bWluZUxpdmVuZXNzKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIFNsb3RWaXNpdG9yJik7CisK
IHZvaWQgQ29kZUJsb2NrOjpmaW5hbGl6ZUxMSW50SW5saW5lQ2FjaGVzKCkKIHsKICAgICBWTSYg
dm0gPSAqbV92bTsKQEAgLTE2MTYsNiArMTY0Niw3IEBAIHZvaWQgQ29kZUJsb2NrOjpmaW5hbGl6
ZVVuY29uZGl0aW9uYWxseSgKICAgICB1cGRhdGVBY3Rpdml0eSgpOwogCiAgICAgVk06OlNwYWNl
QW5kU2V0OjpzZXRGb3IoKnN1YnNwYWNlKCkpLnJlbW92ZSh0aGlzKTsKKyAgICBtX3Zpc2l0Q2hp
bGRyZW5Ta2lwcGVkRHVlVG9PbGRBZ2UgPSBmYWxzZTsKIH0KIAogdm9pZCBDb2RlQmxvY2s6OmRl
c3Ryb3koSlNDZWxsKiBjZWxsKQpAQCAtMTgwOCw3ICsxODM5LDggQEAgdm9pZCBDb2RlQmxvY2s6
OnJlc2V0SklURGF0YSgpCiB9CiAjZW5kaWYKIAotdm9pZCBDb2RlQmxvY2s6OnZpc2l0T1NSRXhp
dFRhcmdldHMoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgU2xvdFZpc2l0b3ImIHZpc2l0b3Ip
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBDb2RlQmxvY2s6OnZpc2l0T1NSRXhp
dFRhcmdldHMoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgVmlzaXRvciYgdmlzaXRvcikKIHsK
ICAgICAvLyBXZSBzdHJvbmdseSB2aXNpdCBPU1IgZXhpdHMgdGFyZ2V0cyBiZWNhdXNlIHdlIGRv
bid0IHdhbnQgdG8gZGVhbCB3aXRoCiAgICAgLy8gdGhlIGNvbXBsZXhpdHkgb2YgZ2VuZXJhdGlu
ZyBhbiBleGl0IHRhcmdldCBDb2RlQmxvY2sgb24gZGVtYW5kIGFuZApAQCAtMTgyOCw3ICsxODYw
LDggQEAgdm9pZCBDb2RlQmxvY2s6OnZpc2l0T1NSRXhpdFRhcmdldHMoY29ucwogI2VuZGlmCiB9
CiAKLXZvaWQgQ29kZUJsb2NrOjpzdHJvbmdseVZpc2l0U3Ryb25nUmVmZXJlbmNlcyhjb25zdCBD
b25jdXJyZW50SlNMb2NrZXImIGxvY2tlciwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0
ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBDb2RlQmxvY2s6OnN0cm9uZ2x5VmlzaXRTdHJvbmdS
ZWZlcmVuY2VzKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYgbG9ja2VyLCBWaXNpdG9yJiB2aXNp
dG9yKQogewogICAgIFVOVVNFRF9QQVJBTShsb2NrZXIpOwogICAgIApAQCAtMTg2NCw3ICsxODk3
LDggQEAgdm9pZCBDb2RlQmxvY2s6OnN0cm9uZ2x5VmlzaXRTdHJvbmdSZWZlcgogI2VuZGlmCiB9
CiAKLXZvaWQgQ29kZUJsb2NrOjpzdHJvbmdseVZpc2l0V2Vha1JlZmVyZW5jZXMoY29uc3QgQ29u
Y3VycmVudEpTTG9ja2VyJiwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBWaXNpdG9yPgordm9pZCBDb2RlQmxvY2s6OnN0cm9uZ2x5VmlzaXRXZWFrUmVmZXJlbmNlcyhj
b25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFVOVVNF
RF9QQVJBTSh2aXNpdG9yKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Db2RlQmxvY2suaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0NvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAwOC0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwOCBDYW1lcm9uIFp3YXJpY2ggPGN3endhcmljaEB1
d2F0ZXJsb28uY2E+CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0yMDEsMTAgKzIwMSwxMCBAQCBwdWJs
aWM6CiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyMzY3
NwogICAgIENvZGVCbG9jayogYmFzZWxpbmVWZXJzaW9uKCk7CiAKKyAgICBERUNMQVJFX1ZJU0lU
X0NISUxEUkVOOworCiAgICAgc3RhdGljIHNpemVfdCBlc3RpbWF0ZWRTaXplKEpTQ2VsbCosIFZN
Jik7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYp
OwogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7Ci0gICAgdm9pZCB2aXNpdENoaWxk
cmVuKFNsb3RWaXNpdG9yJik7CiAgICAgdm9pZCBmaW5hbGl6ZVVuY29uZGl0aW9uYWxseShWTSYp
OwogCiAgICAgdm9pZCBub3RpZnlMZXhpY2FsQmluZGluZ1VwZGF0ZSgpOwpAQCAtOTQzLDYgKzk0
Myw4IEBAIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIENvZGVCbG9ja1NldDsKICAgICBmcmll
bmQgY2xhc3MgRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZTsKIAorICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFZpc2l0b3I+IEFMV0FZU19JTkxJTkUgdm9pZCB2aXNpdENoaWxkcmVuKFZpc2l0b3ImKTsK
KwogICAgIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcyYgbGl2ZW5lc3NBbmFseXNpc1Nsb3coKTsK
ICAgICAKICAgICBDb2RlQmxvY2sqIHNwZWNpYWxPU1JFbnRyeUJsb2NrT3JOdWxsKCk7CkBAIC05
NjMsMTYgKzk2NSwxNiBAQCBwcml2YXRlOgogICAgICAgICBtX2NvbnN0YW50UmVnaXN0ZXJzW3Jl
Zy50b0NvbnN0YW50SW5kZXgoKV0uc2V0KCptX3ZtLCB0aGlzLCB2YWx1ZSk7CiAgICAgfQogCi0g
ICAgYm9vbCBzaG91bGRWaXNpdFN0cm9uZ2x5KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYpOwor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IGJvb2wgc2hvdWxkVmlzaXRTdHJvbmdseShj
b25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBWaXNpdG9yJik7CiAgICAgYm9vbCBzaG91bGRKZXR0
aXNvbkR1ZVRvV2Vha1JlZmVyZW5jZShWTSYpOwotICAgIGJvb2wgc2hvdWxkSmV0dGlzb25EdWVU
b09sZEFnZShjb25zdCBDb25jdXJyZW50SlNMb2NrZXImKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBWaXNpdG9yPiBib29sIHNob3VsZEpldHRpc29uRHVlVG9PbGRBZ2UoY29uc3QgQ29uY3VycmVu
dEpTTG9ja2VyJiwgVmlzaXRvciYpOwogICAgIAotICAgIHZvaWQgcHJvcGFnYXRlVHJhbnNpdGlv
bnMoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgU2xvdFZpc2l0b3ImKTsKLSAgICB2b2lkIGRl
dGVybWluZUxpdmVuZXNzKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIFNsb3RWaXNpdG9yJik7
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCBwcm9wYWdhdGVUcmFuc2l0aW9u
cyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBWaXNpdG9yJik7CisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVmlzaXRvcj4gdm9pZCBkZXRlcm1pbmVMaXZlbmVzcyhjb25zdCBDb25jdXJyZW50SlNM
b2NrZXImLCBWaXNpdG9yJik7CiAgICAgICAgIAotICAgIHZvaWQgc3Ryb25nbHlWaXNpdFN0cm9u
Z1JlZmVyZW5jZXMoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgU2xvdFZpc2l0b3ImKTsKLSAg
ICB2b2lkIHN0cm9uZ2x5VmlzaXRXZWFrUmVmZXJlbmNlcyhjb25zdCBDb25jdXJyZW50SlNMb2Nr
ZXImLCBTbG90VmlzaXRvciYpOwotICAgIHZvaWQgdmlzaXRPU1JFeGl0VGFyZ2V0cyhjb25zdCBD
b25jdXJyZW50SlNMb2NrZXImLCBTbG90VmlzaXRvciYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFZpc2l0b3I+IHZvaWQgc3Ryb25nbHlWaXNpdFN0cm9uZ1JlZmVyZW5jZXMoY29uc3QgQ29uY3Vy
cmVudEpTTG9ja2VyJiwgVmlzaXRvciYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+
IHZvaWQgc3Ryb25nbHlWaXNpdFdlYWtSZWZlcmVuY2VzKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tl
ciYsIFZpc2l0b3ImKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIHZpc2l0
T1NSRXhpdFRhcmdldHMoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgVmlzaXRvciYpOwogCiAg
ICAgdW5zaWduZWQgbnVtYmVyT2ZOb25Bcmd1bWVudFZhbHVlUHJvZmlsZXMoKSB7IHJldHVybiBt
X251bWJlck9mTm9uQXJndW1lbnRWYWx1ZVByb2ZpbGVzOyB9CiAgICAgdW5zaWduZWQgdG90YWxO
dW1iZXJPZlZhbHVlUHJvZmlsZXMoKSB7IHJldHVybiBudW1iZXJPZkFyZ3VtZW50VmFsdWVQcm9m
aWxlcygpICsgbnVtYmVyT2ZOb25Bcmd1bWVudFZhbHVlUHJvZmlsZXMoKTsgfQpAQCAtMTAxMSw2
ICsxMDEzLDcgQEAgcHJpdmF0ZToKICAgICB1bnNpZ25lZCBtX2J5dGVjb2RlQ29zdCB7IDAgfTsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgbV9zY29wZVJlZ2lzdGVyOwogICAgIG11dGFibGUgQ29kZUJs
b2NrSGFzaCBtX2hhc2g7CisgICAgYm9vbCBtX3Zpc2l0Q2hpbGRyZW5Ta2lwcGVkRHVlVG9PbGRB
Z2UgeyBmYWxzZSB9OwogCiAgICAgV3JpdGVCYXJyaWVyPFVubGlua2VkQ29kZUJsb2NrPiBtX3Vu
bGlua2VkQ29kZTsKICAgICBXcml0ZUJhcnJpZXI8U2NyaXB0RXhlY3V0YWJsZT4gbV9vd25lckV4
ZWN1dGFibGU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRGVsZXRlQnlJ
ZFZhcmlhbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9EZWxldGVCeUlkVmFyaWFudC5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9EZWxldGVCeUlkVmFyaWFudC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMC0yMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
ODgsMTIgKzg4LDE2IEBAIGJvb2wgRGVsZXRlQnlJZFZhcmlhbnQ6OndyaXRlc1N0cnVjdHVyZXMK
ICAgICByZXR1cm4gISFuZXdTdHJ1Y3R1cmUoKTsKIH0KIAotdm9pZCBEZWxldGVCeUlkVmFyaWFu
dDo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBWaXNpdG9yPgordm9pZCBEZWxldGVCeUlkVmFyaWFudDo6dmlzaXRBZ2dyZWdhdGVJbXBsKFZp
c2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgbV9pZGVudGlmaWVyLnZpc2l0QWdncmVnYXRlKHZpc2l0
b3IpOwogfQogCi12b2lkIERlbGV0ZUJ5SWRWYXJpYW50OjptYXJrSWZDaGVhcChTbG90VmlzaXRv
ciYgdmlzaXRvcikKK0RFRklORV9WSVNJVF9BR0dSRUdBVEUoRGVsZXRlQnlJZFZhcmlhbnQpOwor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBEZWxldGVCeUlkVmFyaWFudDo6bWFy
a0lmQ2hlYXAoVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBpZiAobV9vbGRTdHJ1Y3R1cmUpCiAg
ICAgICAgIG1fb2xkU3RydWN0dXJlLT5tYXJrSWZDaGVhcCh2aXNpdG9yKTsKQEAgLTEwMSw2ICsx
MDUsOSBAQCB2b2lkIERlbGV0ZUJ5SWRWYXJpYW50OjptYXJrSWZDaGVhcChTbG90CiAgICAgICAg
IG1fbmV3U3RydWN0dXJlLT5tYXJrSWZDaGVhcCh2aXNpdG9yKTsKIH0KIAordGVtcGxhdGUgdm9p
ZCBEZWxldGVCeUlkVmFyaWFudDo6bWFya0lmQ2hlYXAoQWJzdHJhY3RTbG90VmlzaXRvciYpOwor
dGVtcGxhdGUgdm9pZCBEZWxldGVCeUlkVmFyaWFudDo6bWFya0lmQ2hlYXAoU2xvdFZpc2l0b3Im
KTsKKwogdm9pZCBEZWxldGVCeUlkVmFyaWFudDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25z
dAogewogICAgIGR1bXBJbkNvbnRleHQob3V0LCBudWxscHRyKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9EZWxldGVCeUlkVmFyaWFudC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9EZWxldGVCeUlkVmFyaWFudC5oCShyZXZpc2lv
biAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRGVsZXRlQnlJZFZh
cmlhbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDIwLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC02MSw4ICs2MSw4IEBAIHB1YmxpYzoKIAogICAgIGJvb2wg
YXR0ZW1wdFRvTWVyZ2UoY29uc3QgRGVsZXRlQnlJZFZhcmlhbnQmIG90aGVyKTsKIAotICAgIHZv
aWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImKTsKLSAgICB2b2lkIG1hcmtJZkNoZWFwKFNs
b3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9BR0dSRUdBVEU7CisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCBtYXJrSWZDaGVhcChWaXNpdG9yJik7CiAgICAgYm9vbCBm
aW5hbGl6ZShWTSYpOwogCiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRGVsZXRlQnlTdGF0dXMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9EZWxldGVCeVN0YXR1cy5j
cHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9E
ZWxldGVCeVN0YXR1cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAyMC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjU0LDE4ICsyNTQsMjUgQEAgQ2FjaGVh
YmxlSWRlbnRpZmllciBEZWxldGVCeVN0YXR1czo6c2luZwogICAgIHJldHVybiByZXN1bHQ7CiB9
CiAKLXZvaWQgRGVsZXRlQnlTdGF0dXM6OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJiB2aXNp
dG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgRGVsZXRlQnlTdGF0dXM6OnZp
c2l0QWdncmVnYXRlSW1wbChWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGZvciAoRGVsZXRlQnlJ
ZFZhcmlhbnQmIHZhcmlhbnQgOiBtX3ZhcmlhbnRzKQogICAgICAgICB2YXJpYW50LnZpc2l0QWdn
cmVnYXRlKHZpc2l0b3IpOwogfQogCi12b2lkIERlbGV0ZUJ5U3RhdHVzOjptYXJrSWZDaGVhcChT
bG90VmlzaXRvciYgdmlzaXRvcikKK0RFRklORV9WSVNJVF9BR0dSRUdBVEUoRGVsZXRlQnlTdGF0
dXMpOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBEZWxldGVCeVN0YXR1czo6
bWFya0lmQ2hlYXAoVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBmb3IgKERlbGV0ZUJ5SWRWYXJp
YW50JiB2YXJpYW50IDogbV92YXJpYW50cykKICAgICAgICAgdmFyaWFudC5tYXJrSWZDaGVhcCh2
aXNpdG9yKTsKIH0KIAordGVtcGxhdGUgdm9pZCBEZWxldGVCeVN0YXR1czo6bWFya0lmQ2hlYXAo
QWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBEZWxldGVCeVN0YXR1czo6bWFy
a0lmQ2hlYXAoU2xvdFZpc2l0b3ImKTsKKwogYm9vbCBEZWxldGVCeVN0YXR1czo6ZmluYWxpemUo
Vk0mIHZtKQogewogICAgIGZvciAoYXV0byYgdmFyaWFudCA6IG1fdmFyaWFudHMpIHsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9EZWxldGVCeVN0YXR1cy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9EZWxldGVCeVN0YXR1cy5oCShy
ZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRGVsZXRl
QnlTdGF0dXMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDIwLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC04MSw4ICs4MSw4IEBAIHB1YmxpYzoKICAgICAvLyBB
dHRlbXB0cyB0byByZWR1Y2UgdGhlIHNldCBvZiB2YXJpYW50cyB0byBmaXQgdGhlIGdpdmVuIHN0
cnVjdHVyZSBzZXQuIFRoaXMgbWF5IGJlIGFwcHJveGltYXRlLgogICAgIHZvaWQgZmlsdGVyKGNv
bnN0IFN0cnVjdHVyZVNldCYpOwogCi0gICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRv
ciYpOwotICAgIHZvaWQgbWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJ
U0lUX0FHR1JFR0FURTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIG1hcmtJ
ZkNoZWFwKFZpc2l0b3ImKTsKICAgICBib29sIGZpbmFsaXplKFZNJik7CiAKICAgICBib29sIGFw
cGVuZFZhcmlhbnQoY29uc3QgRGVsZXRlQnlJZFZhcmlhbnQmKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9EaXJlY3RFdmFsQ29kZUNhY2hlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRGlyZWN0RXZhbENvZGVDYWNoZS5jcHAJ
KHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9EaXJl
Y3RFdmFsQ29kZUNhY2hlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00NSw3ICs0NSw4IEBAIHZvaWQgRGly
ZWN0RXZhbENvZGVDYWNoZTo6Y2xlYXIoKQogICAgIG1fY2FjaGVNYXAuY2xlYXIoKTsKIH0KIAot
dm9pZCBEaXJlY3RFdmFsQ29kZUNhY2hlOjp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYgdmlz
aXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIERpcmVjdEV2YWxDb2RlQ2Fj
aGU6OnZpc2l0QWdncmVnYXRlSW1wbChWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIExvY2tIb2xk
ZXIgbG9ja2VyKG1fbG9jayk7CiAgICAgRXZhbENhY2hlTWFwOjppdGVyYXRvciBlbmQgPSBtX2Nh
Y2hlTWFwLmVuZCgpOwpAQCAtNTMsNSArNTQsNiBAQCB2b2lkIERpcmVjdEV2YWxDb2RlQ2FjaGU6
OnZpc2l0QWdncmVnYXRlCiAgICAgICAgIHZpc2l0b3IuYXBwZW5kKHB0ci0+dmFsdWUpOwogfQog
Ci19IC8vIG5hbWVzcGFjZSBKU0MKK0RFRklORV9WSVNJVF9BR0dSRUdBVEUoRGlyZWN0RXZhbENv
ZGVDYWNoZSk7CiAKK30gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0RpcmVjdEV2YWxDb2RlQ2FjaGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRGlyZWN0RXZhbENvZGVDYWNoZS5oCShyZXZpc2lvbiAy
NzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRGlyZWN0RXZhbENvZGVD
YWNoZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAwOC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAwOC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtOTcsNyArOTcsNyBAQCBuYW1lc3BhY2UgSlNDIHsK
IAogICAgICAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBtX2NhY2hlTWFwLmlzRW1w
dHkoKTsgfQogCi0gICAgICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImKTsKKyAg
ICAgICAgREVDTEFSRV9WSVNJVF9BR0dSRUdBVEU7CiAKICAgICAgICAgdm9pZCBjbGVhcigpOwog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhlY3V0YWJsZVRvQ29kZUJs
b2NrRWRnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0V4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE4
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOC0y
MDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtNTMsNyArNTMsOCBAQCB2b2lkIEV4ZWN1dGFibGVUb0NvZGVCbG9ja0Vk
Z2U6OmZpbmlzaENyCiAgICAgQVNTRVJUKCFpc0FjdGl2ZSgpKTsKIH0KIAotdm9pZCBFeGVjdXRh
YmxlVG9Db2RlQmxvY2tFZGdlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0
b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBFeGVjdXRhYmxl
VG9Db2RlQmxvY2tFZGdlOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3Im
IHZpc2l0b3IpCiB7CiAgICAgVk0mIHZtID0gdmlzaXRvci52bSgpOwogICAgIEV4ZWN1dGFibGVU
b0NvZGVCbG9ja0VkZ2UqIGVkZ2UgPSBqc0Nhc3Q8RXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZSo+
KGNlbGwpOwpAQCAtNjEsNyArNjIsNyBAQCB2b2lkIEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2U6
OnZpc2l0Q2hpCiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbihjZWxsLCB2aXNpdG9yKTsKIAogICAg
IENvZGVCbG9jayogY29kZUJsb2NrID0gZWRnZS0+bV9jb2RlQmxvY2suZ2V0KCk7Ci0gICAgCisK
ICAgICAvLyBJdCdzIHBvc3NpYmxlIGZvciBzb21lb25lIHRvIGhvbGQgYSBwb2ludGVyIHRvIHRo
ZSBlZGdlIGFmdGVyIHRoZSBlZGdlIGhhcyBjbGVhcmVkIGl0cyB3ZWFrCiAgICAgLy8gcmVmZXJl
bmNlIHRvIHRoZSBjb2RlQmxvY2suIEluIGEgY29uc2VydmF0aXZlIEdDIGxpa2Ugb3VycywgdGhh
dCBjb3VsZCBoYXBwZW4gYXQgcmFuZG9tIGZvcgogICAgIC8vIG5vIGdvb2QgcmVhc29uIGFuZCBp
dCdzIFRvdGFsbHkgT0sgKFRNKS4gU2VlIGZpbmFsaXplVW5jb25kaXRpb25hbGx5KCkgZm9yIHdo
ZXJlIHdlIGNsZWFyCkBAIC03NSwxMSArNzYsMTEgQEAgdm9pZCBFeGVjdXRhYmxlVG9Db2RlQmxv
Y2tFZGdlOjp2aXNpdENoaQogICAgIH0KICAgICAKICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9j
a2VyKGNvZGVCbG9jay0+bV9sb2NrKTsKLSAgICAKLSAgICBpZiAoY29kZUJsb2NrLT5zaG91bGRW
aXNpdFN0cm9uZ2x5KGxvY2tlcikpCisKKyAgICBpZiAoY29kZUJsb2NrLT5zaG91bGRWaXNpdFN0
cm9uZ2x5KGxvY2tlciwgdmlzaXRvcikpCiAgICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVy
ZWQoY29kZUJsb2NrKTsKICAgICAKLSAgICBpZiAoIXZtLmhlYXAuaXNNYXJrZWQoY29kZUJsb2Nr
KSkKKyAgICBpZiAoIXZpc2l0b3IuaXNNYXJrZWQoY29kZUJsb2NrKSkKICAgICAgICAgdm0uZXhl
Y3V0YWJsZVRvQ29kZUJsb2NrRWRnZXNXaXRoRmluYWxpemVycy5hZGQoZWRnZSk7CiAgICAgCiAg
ICAgaWYgKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChjb2RlQmxvY2stPmppdFR5cGUoKSkpIHsK
QEAgLTExNyw3ICsxMTgsMTAgQEAgdm9pZCBFeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlOjp2aXNp
dENoaQogICAgIGVkZ2UtPnJ1bkNvbnN0cmFpbnQobG9ja2VyLCB2bSwgdmlzaXRvcik7CiB9CiAK
LXZvaWQgRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZTo6dmlzaXRPdXRwdXRDb25zdHJhaW50cyhK
U0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorREVGSU5FX1ZJU0lUX0NISUxEUkVO
KEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UpOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
Pgordm9pZCBFeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlOjp2aXNpdE91dHB1dENvbnN0cmFpbnRz
SW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgVk0mIHZtID0gdmlz
aXRvci52bSgpOwogICAgIEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UqIGVkZ2UgPSBqc0Nhc3Q8
RXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZSo+KGNlbGwpOwpAQCAtMTI1LDYgKzEyOSw4IEBAIHZv
aWQgRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZTo6dmlzaXRPdXQKICAgICBlZGdlLT5ydW5Db25z
dHJhaW50KE5vTG9ja2luZ05lY2Vzc2FyeSwgdm0sIHZpc2l0b3IpOwogfQogCitERUZJTkVfVklT
SVRfT1VUUFVUX0NPTlNUUkFJTlRTKEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UpOworCiB2b2lk
IEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2U6OmZpbmFsaXplVW5jb25kaXRpb25hbGx5KFZNJiB2
bSkKIHsKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IG1fY29kZUJsb2NrLmdldCgpOwpAQCAt
MTg2LDE2ICsxOTIsMjEgQEAgRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZTo6RXhlY3V0YWJsZVRv
QwogewogfQogCi12b2lkIEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2U6OnJ1bkNvbnN0cmFpbnQo
Y29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiBsb2NrZXIsIFZNJiB2bSwgU2xvdFZpc2l0b3ImIHZp
c2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBFeGVjdXRhYmxlVG9Db2Rl
QmxvY2tFZGdlOjpydW5Db25zdHJhaW50KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYgbG9ja2Vy
LCBWTSYgdm0sIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sg
PSBtX2NvZGVCbG9jay5nZXQoKTsKICAgICAKICAgICBjb2RlQmxvY2stPnByb3BhZ2F0ZVRyYW5z
aXRpb25zKGxvY2tlciwgdmlzaXRvcik7CiAgICAgY29kZUJsb2NrLT5kZXRlcm1pbmVMaXZlbmVz
cyhsb2NrZXIsIHZpc2l0b3IpOwotICAgIAotICAgIGlmICh2bS5oZWFwLmlzTWFya2VkKGNvZGVC
bG9jaykpCisKKyAgICBpZiAodmlzaXRvci5pc01hcmtlZChjb2RlQmxvY2spKQogICAgICAgICB2
bS5leGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlc1dpdGhDb25zdHJhaW50cy5yZW1vdmUodGhpcyk7
CiB9CiAKK3RlbXBsYXRlIHZvaWQgRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZTo6cnVuQ29uc3Ry
YWludChjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBWTSYsIEFic3RyYWN0U2xvdFZpc2l0b3Im
KTsKK3RlbXBsYXRlIHZvaWQgRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZTo6cnVuQ29uc3RyYWlu
dChjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBWTSYsIFNsb3RWaXNpdG9yJik7CisKKwogfSAv
LyBuYW1lc3BhY2UgSlNDCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9F
eGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UuaAkocmV2aXNpb24gMjcy
ODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGFibGVUb0NvZGVC
bG9ja0VkZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTgtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTgtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTUzLDkgKzUzLDkgQEAgcHVibGljOgogICAg
IERFQ0xBUkVfSU5GTzsKIAogICAgIENvZGVCbG9jayogY29kZUJsb2NrKCkgY29uc3QgeyByZXR1
cm4gbV9jb2RlQmxvY2suZ2V0KCk7IH0KLSAgICAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxk
cmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRPdXRwdXRD
b25zdHJhaW50cyhKU0NlbGwqLCBTbG90VmlzaXRvciYpOworCisgICAgREVDTEFSRV9WSVNJVF9D
SElMRFJFTjsKKyAgICBERUNMQVJFX1ZJU0lUX09VVFBVVF9DT05TVFJBSU5UUzsKICAgICB2b2lk
IGZpbmFsaXplVW5jb25kaXRpb25hbGx5KFZNJik7CiAgICAgCiAgICAgc3RhdGljIENvZGVCbG9j
ayogdW53cmFwKEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UqIGVkZ2UpCkBAIC04MSw5ICs4MSw5
IEBAIHByaXZhdGU6CiAgICAgdm9pZCBhY3RpdmF0ZSgpOwogICAgIHZvaWQgZGVhY3RpdmF0ZSgp
OwogICAgIGJvb2wgaXNBY3RpdmUoKSBjb25zdDsKLSAgICAKLSAgICB2b2lkIHJ1bkNvbnN0cmFp
bnQoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgVk0mLCBTbG90VmlzaXRvciYpOwotICAgIAor
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCBydW5Db25zdHJhaW50KGNvbnN0
IENvbmN1cnJlbnRKU0xvY2tlciYsIFZNJiwgVmlzaXRvciYpOworCiAgICAgV3JpdGVCYXJyaWVy
PENvZGVCbG9jaz4gbV9jb2RlQmxvY2s7CiB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvR2V0QnlJZFZhcmlhbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkVmFyaWFudC5jcHAJKHJldmlzaW9uIDI3MjgzMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkVmFyaWFudC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0LTIw
MjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0
LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0xNTYsMTYgKzE1NiwyMyBAQCBib29sIEdldEJ5SWRWYXJpYW50Ojph
dHRlbXB0VG9NZXJnZShjb25zCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgR2V0QnlJZFZh
cmlhbnQ6OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlw
ZW5hbWUgVmlzaXRvcj4KK3ZvaWQgR2V0QnlJZFZhcmlhbnQ6OnZpc2l0QWdncmVnYXRlSW1wbChW
aXNpdG9yJiB2aXNpdG9yKQogewogICAgIG1faWRlbnRpZmllci52aXNpdEFnZ3JlZ2F0ZSh2aXNp
dG9yKTsKIH0KIAotdm9pZCBHZXRCeUlkVmFyaWFudDo6bWFya0lmQ2hlYXAoU2xvdFZpc2l0b3Im
IHZpc2l0b3IpCitERUZJTkVfVklTSVRfQUdHUkVHQVRFKEdldEJ5SWRWYXJpYW50KTsKKwordGVt
cGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgR2V0QnlJZFZhcmlhbnQ6Om1hcmtJZkNoZWFw
KFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgbV9zdHJ1Y3R1cmVTZXQubWFya0lmQ2hlYXAodmlz
aXRvcik7CiB9CiAKK3RlbXBsYXRlIHZvaWQgR2V0QnlJZFZhcmlhbnQ6Om1hcmtJZkNoZWFwKEFi
c3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgR2V0QnlJZFZhcmlhbnQ6Om1hcmtJ
ZkNoZWFwKFNsb3RWaXNpdG9yJik7CisKIGJvb2wgR2V0QnlJZFZhcmlhbnQ6OmZpbmFsaXplKFZN
JiB2bSkKIHsKICAgICBpZiAoIW1fc3RydWN0dXJlU2V0LmlzU3RpbGxBbGl2ZSh2bSkpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFZhcmlhbnQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFZhcmlhbnQuaAko
cmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5
SWRWYXJpYW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDE0LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE0LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03Nyw4ICs3Nyw4IEBAIHB1YmxpYzoKIAog
ICAgIGJvb2wgYXR0ZW1wdFRvTWVyZ2UoY29uc3QgR2V0QnlJZFZhcmlhbnQmIG90aGVyKTsKICAg
ICAKLSAgICB2b2lkIHZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJik7Ci0gICAgdm9pZCBtYXJr
SWZDaGVhcChTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQUdHUkVHQVRFOworICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgbWFya0lmQ2hlYXAoVmlzaXRvciYpOwog
ICAgIGJvb2wgZmluYWxpemUoVk0mKTsKICAgICAKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0m
KSBjb25zdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeVN0YXR1
cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5
U3RhdHVzLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0dldEJ5U3RhdHVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTUzMCw3ICs1MzAsOCBA
QCB2b2lkIEdldEJ5U3RhdHVzOjpmaWx0ZXIoY29uc3QgU3RydWN0dXJlCiAgICAgICAgIG1fc3Rh
dGUgPSBOb0luZm9ybWF0aW9uOwogfQogCi12b2lkIEdldEJ5U3RhdHVzOjp2aXNpdEFnZ3JlZ2F0
ZShTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lk
IEdldEJ5U3RhdHVzOjp2aXNpdEFnZ3JlZ2F0ZUltcGwoVmlzaXRvciYgdmlzaXRvcikKIHsKICAg
ICBpZiAoaXNNb2R1bGVOYW1lc3BhY2UoKSkKICAgICAgICAgbV9tb2R1bGVOYW1lc3BhY2VEYXRh
LT5tX2lkZW50aWZpZXIudmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7CkBAIC01MzgsMTIgKzUzOSwx
OCBAQCB2b2lkIEdldEJ5U3RhdHVzOjp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzCiAgICAgICAgIHZh
cmlhbnQudmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7CiB9CiAKLXZvaWQgR2V0QnlTdGF0dXM6Om1h
cmtJZkNoZWFwKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorREVGSU5FX1ZJU0lUX0FHR1JFR0FURShH
ZXRCeVN0YXR1cyk7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEdldEJ5U3Rh
dHVzOjptYXJrSWZDaGVhcChWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGZvciAoR2V0QnlJZFZh
cmlhbnQmIHZhcmlhbnQgOiBtX3ZhcmlhbnRzKQogICAgICAgICB2YXJpYW50Lm1hcmtJZkNoZWFw
KHZpc2l0b3IpOwogfQogCit0ZW1wbGF0ZSB2b2lkIEdldEJ5U3RhdHVzOjptYXJrSWZDaGVhcChB
YnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEdldEJ5U3RhdHVzOjptYXJrSWZD
aGVhcChTbG90VmlzaXRvciYpOworCiBib29sIEdldEJ5U3RhdHVzOjpmaW5hbGl6ZShWTSYgdm0p
CiB7CiAgICAgZm9yIChHZXRCeUlkVmFyaWFudCYgdmFyaWFudCA6IG1fdmFyaWFudHMpIHsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeVN0YXR1cy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeVN0YXR1cy5oCShyZXZp
c2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlTdGF0
dXMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTItMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTItMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTExOCw4ICsxMTgsOCBAQCBwdWJsaWM6CiAgICAgSlNN
b2R1bGVFbnZpcm9ubWVudCogbW9kdWxlRW52aXJvbm1lbnQoKSBjb25zdCB7IHJldHVybiBtX21v
ZHVsZU5hbWVzcGFjZURhdGEtPm1fbW9kdWxlRW52aXJvbm1lbnQ7IH0KICAgICBTY29wZU9mZnNl
dCBzY29wZU9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fbW9kdWxlTmFtZXNwYWNlRGF0YS0+bV9z
Y29wZU9mZnNldDsgfQogICAgIAotICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3Im
KTsKLSAgICB2b2lkIG1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJ
VF9BR0dSRUdBVEU7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCBtYXJrSWZD
aGVhcChWaXNpdG9yJik7CiAgICAgYm9vbCBmaW5hbGl6ZShWTSYpOyAvLyBSZXR1cm4gdHJ1ZSBp
ZiB0aGlzIGdldHMgdG8gbGl2ZS4KIAogICAgIGJvb2wgYXBwZW5kVmFyaWFudChjb25zdCBHZXRC
eUlkVmFyaWFudCYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luQnlJ
ZFN0YXR1cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0luQnlJZFN0YXR1cy5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9JbkJ5SWRTdGF0dXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEs
NiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxOCBZdXN1a2UgU3V6dWtpIDx1dGF0YW5lLnRl
YUBnbWFpbC5jb20+LgotICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOC0yMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjUxLDEy
ICsyNTEsMTYgQEAgdm9pZCBJbkJ5SWRTdGF0dXM6OmZpbHRlcihjb25zdCBTdHJ1Y3R1cgogICAg
ICAgICBtX3N0YXRlID0gTm9JbmZvcm1hdGlvbjsKIH0KIAotdm9pZCBJbkJ5SWRTdGF0dXM6Om1h
cmtJZkNoZWFwKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRv
cj4KK3ZvaWQgSW5CeUlkU3RhdHVzOjptYXJrSWZDaGVhcChWaXNpdG9yJiB2aXNpdG9yKQogewog
ICAgIGZvciAoSW5CeUlkVmFyaWFudCYgdmFyaWFudCA6IG1fdmFyaWFudHMpCiAgICAgICAgIHZh
cmlhbnQubWFya0lmQ2hlYXAodmlzaXRvcik7CiB9CiAKK3RlbXBsYXRlIHZvaWQgSW5CeUlkU3Rh
dHVzOjptYXJrSWZDaGVhcChBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIElu
QnlJZFN0YXR1czo6bWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImKTsKKwogYm9vbCBJbkJ5SWRTdGF0
dXM6OmZpbmFsaXplKFZNJiB2bSkKIHsKICAgICBmb3IgKEluQnlJZFZhcmlhbnQmIHZhcmlhbnQg
OiBtX3ZhcmlhbnRzKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5C
eUlkU3RhdHVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0luQnlJZFN0YXR1cy5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvSW5CeUlkU3RhdHVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBA
CiAvKgogICogQ29weXJpZ2h0IChDKSAyMDE4IFl1c3VrZSBTdXp1a2kgPHV0YXRhbmUudGVhQGdt
YWlsLmNvbT4uCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMDYsNyArMTA2
LDcgQEAgcHVibGljOgogICAgIC8vIEF0dGVtcHRzIHRvIHJlZHVjZSB0aGUgc2V0IG9mIHZhcmlh
bnRzIHRvIGZpdCB0aGUgZ2l2ZW4gc3RydWN0dXJlIHNldC4gVGhpcyBtYXkgYmUgYXBwcm94aW1h
dGUuCiAgICAgdm9pZCBmaWx0ZXIoY29uc3QgU3RydWN0dXJlU2V0Jik7CiAgICAgCi0gICAgdm9p
ZCBtYXJrSWZDaGVhcChTbG90VmlzaXRvciYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0
b3I+IHZvaWQgbWFya0lmQ2hlYXAoVmlzaXRvciYpOwogICAgIGJvb2wgZmluYWxpemUoVk0mKTsK
IAogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0luQnlJZFZhcmlhbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbkJ5SWRWYXJpYW50LmNwcAkocmV2aXNpb24gMjcy
ODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luQnlJZFZhcmlhbnQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAx
OCBZdXN1a2UgU3V6dWtpIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+LgotICogQ29weXJpZ2h0IChD
KSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxOC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtNjQsMTEgKzY0LDE1IEBAIGJvb2wgSW5CeUlkVmFyaWFudDo6
YXR0ZW1wdFRvTWVyZ2UoY29uc3QKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBJbkJ5SWRW
YXJpYW50OjptYXJrSWZDaGVhcChTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVu
YW1lIFZpc2l0b3I+Cit2b2lkIEluQnlJZFZhcmlhbnQ6Om1hcmtJZkNoZWFwKFZpc2l0b3ImIHZp
c2l0b3IpCiB7CiAgICAgbV9zdHJ1Y3R1cmVTZXQubWFya0lmQ2hlYXAodmlzaXRvcik7CiB9CiAK
K3RlbXBsYXRlIHZvaWQgSW5CeUlkVmFyaWFudDo6bWFya0lmQ2hlYXAoQWJzdHJhY3RTbG90Vmlz
aXRvciYpOwordGVtcGxhdGUgdm9pZCBJbkJ5SWRWYXJpYW50OjptYXJrSWZDaGVhcChTbG90Vmlz
aXRvciYpOworCiBib29sIEluQnlJZFZhcmlhbnQ6OmZpbmFsaXplKFZNJiB2bSkKIHsKICAgICBp
ZiAoIW1fc3RydWN0dXJlU2V0LmlzU3RpbGxBbGl2ZSh2bSkpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvSW5CeUlkVmFyaWFudC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbkJ5SWRWYXJpYW50LmgJKHJldmlzaW9uIDI3MjgzMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbkJ5SWRWYXJpYW50LmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDE4IFl1c3Vr
ZSBTdXp1a2kgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4uCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTgg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE4LTIw
MjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC01Nyw3ICs1Nyw3IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgYXR0ZW1wdFRv
TWVyZ2UoY29uc3QgSW5CeUlkVmFyaWFudCYgb3RoZXIpOwogICAgIAotICAgIHZvaWQgbWFya0lm
Q2hlYXAoU2xvdFZpc2l0b3ImKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lk
IG1hcmtJZkNoZWFwKFZpc2l0b3ImKTsKICAgICBib29sIGZpbmFsaXplKFZNJik7CiAKICAgICB2
b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9JbnRlcm5hbEZ1bmN0aW9uQWxsb2NhdGlvblByb2ZpbGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW50ZXJuYWxGdW5jdGlvbkFsbG9j
YXRpb25Qcm9maWxlLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9JbnRlcm5hbEZ1bmN0aW9uQWxsb2NhdGlvblByb2ZpbGUuaAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTM5LDcgKzM5LDcgQEAgcHVibGljOgogICAgIFN0cnVjdHVyZSogY3JlYXRlQWxs
b2NhdGlvblN0cnVjdHVyZUZyb21CYXNlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU0NlbGwqIG93
bmVyLCBKU09iamVjdCogcHJvdG90eXBlLCBTdHJ1Y3R1cmUqIGJhc2UpOwogCiAgICAgdm9pZCBj
bGVhcigpIHsgbV9zdHJ1Y3R1cmUuY2xlYXIoKTsgfQotICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUo
U2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsgdmlzaXRvci5hcHBlbmQobV9zdHJ1Y3R1cmUpOyB9Cisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCB2aXNpdEFnZ3JlZ2F0ZShWaXNpdG9y
JiB2aXNpdG9yKSB7IHZpc2l0b3IuYXBwZW5kKG1fc3RydWN0dXJlKTsgfQogCiBwcml2YXRlOgog
ICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1fc3RydWN0dXJlOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL09iamVjdEFsbG9jYXRpb25Qcm9maWxlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09iamVjdEFsbG9jYXRpb25Qcm9m
aWxlLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9PYmplY3RBbGxvY2F0aW9uUHJvZmlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjQsNyArNjQs
OCBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIEFTU0VSVChpc051bGwoKSk7CiAgICAgfQogCi0gICAg
dm9pZCB2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYgdmlzaXRvcikKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBWaXNpdG9yPgorICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoVmlzaXRvciYgdmlzaXRv
cikKICAgICB7CiAgICAgICAgIHZpc2l0b3IuYXBwZW5kKG1fc3RydWN0dXJlKTsKICAgICB9CkBA
IC0xMTAsNyArMTExLDggQEAgcHVibGljOgogICAgICAgICBBU1NFUlQoaXNOdWxsKCkpOwogICAg
IH0KIAotICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisgICAg
dGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KKyAgICB2b2lkIHZpc2l0QWdncmVnYXRlKFZpc2l0
b3ImIHZpc2l0b3IpCiAgICAgewogICAgICAgICBCYXNlOjp2aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9y
KTsKICAgICAgICAgdmlzaXRvci5hcHBlbmQobV9wcm90b3R5cGUpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwCShy
ZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1v
cnBoaWNBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxNC0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzU4LDcgKzM1OCw4IEBAIGJvb2wg
UG9seW1vcnBoaWNBY2Nlc3M6OnZpc2l0V2VhayhWTSYgdm0KICAgICByZXR1cm4gdHJ1ZTsKIH0K
IAotYm9vbCBQb2x5bW9ycGhpY0FjY2Vzczo6cHJvcGFnYXRlVHJhbnNpdGlvbnMoU2xvdFZpc2l0
b3ImIHZpc2l0b3IpIGNvbnN0Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgorYm9vbCBQb2x5
bW9ycGhpY0FjY2Vzczo6cHJvcGFnYXRlVHJhbnNpdGlvbnMoVmlzaXRvciYgdmlzaXRvcikgY29u
c3QKIHsKICAgICBib29sIHJlc3VsdCA9IHRydWU7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IHNpemUoKTsgKytpKQpAQCAtMzY2LDEyICszNjcsMTggQEAgYm9vbCBQb2x5bW9ycGhpY0Fj
Y2Vzczo6cHJvcGFnYXRlVHJhbnNpdAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQgUG9s
eW1vcnBoaWNBY2Nlc3M6OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVt
cGxhdGUgYm9vbCBQb2x5bW9ycGhpY0FjY2Vzczo6cHJvcGFnYXRlVHJhbnNpdGlvbnMoQWJzdHJh
Y3RTbG90VmlzaXRvciYpIGNvbnN0OwordGVtcGxhdGUgYm9vbCBQb2x5bW9ycGhpY0FjY2Vzczo6
cHJvcGFnYXRlVHJhbnNpdGlvbnMoU2xvdFZpc2l0b3ImKSBjb25zdDsKKwordGVtcGxhdGU8dHlw
ZW5hbWUgVmlzaXRvcj4KK3ZvaWQgUG9seW1vcnBoaWNBY2Nlc3M6OnZpc2l0QWdncmVnYXRlSW1w
bChWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXpl
KCk7ICsraSkKICAgICAgICAgYXQoaSkudmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7CiB9CiAKK0RF
RklORV9WSVNJVF9BR0dSRUdBVEUoUG9seW1vcnBoaWNBY2Nlc3MpOworCiB2b2lkIFBvbHltb3Jw
aGljQWNjZXNzOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiB7CiAgICAgb3V0LnByaW50
KFJhd1BvaW50ZXIodGhpcyksICI6WyIpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmgJKHJldmlzaW9uIDI3MjgzMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNC0yMDIw
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNC0y
MDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMTUyLDE0ICsxNTIsMTQgQEAgcHVibGljOgogICAgIGNvbnN0IEFjY2Vz
c0Nhc2UmIGF0KHVuc2lnbmVkIGkpIGNvbnN0IHsgcmV0dXJuICptX2xpc3RbaV07IH0KICAgICBj
b25zdCBBY2Nlc3NDYXNlJiBvcGVyYXRvcltdKHVuc2lnbmVkIGkpIGNvbnN0IHsgcmV0dXJuICpt
X2xpc3RbaV07IH0KIAotICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImKTsKKyAg
ICBERUNMQVJFX1ZJU0lUX0FHR1JFR0FURTsKIAogICAgIC8vIElmIHRoaXMgcmV0dXJucyBmYWxz
ZSB0aGVuIHdlIGFyZSByZXF1ZXN0aW5nIGEgcmVzZXQgb2YgdGhlIG93bmluZyBTdHJ1Y3R1cmVT
dHViSW5mby4KICAgICBib29sIHZpc2l0V2VhayhWTSYpIGNvbnN0OwogICAgIAogICAgIC8vIFRo
aXMgcmV0dXJucyB0cnVlIGlmIGl0IGhhcyBtYXJrZWQgZXZlcnl0aGluZyBpdCB3aWxsIGV2ZXIg
bWFya2VkLiBUaGlzIGNhbiBiZSB1c2VkIGFzIGFuCiAgICAgLy8gb3B0aW1pemF0aW9uIHRvIHRo
ZW4gYXZvaWQgY2FsbGluZyB0aGlzIG1ldGhvZCBhZ2FpbiBkdXJpbmcgdGhlIGZpeHBvaW50Lgot
ICAgIGJvb2wgcHJvcGFnYXRlVHJhbnNpdGlvbnMoU2xvdFZpc2l0b3ImKSBjb25zdDsKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiBib29sIHByb3BhZ2F0ZVRyYW5zaXRpb25zKFZpc2l0
b3ImKSBjb25zdDsKIAogICAgIHZvaWQgYWJvdXRUb0RpZSgpOwogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuY3BwCShyZXZpc2lvbiAy
NzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDEyLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEyLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0zOTYsMTIgKzM5NiwxNiBAQCBQdXRCeUlkU3RhdHVzIFB1
dEJ5SWRTdGF0dXM6OnNsb3dWZXJzaW9uCiAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMobWFrZXND
YWxscygpID8gTWFrZXNDYWxscyA6IFRha2VzU2xvd1BhdGgpOwogfQogCi12b2lkIFB1dEJ5SWRT
dGF0dXM6Om1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5h
bWUgVmlzaXRvcj4KK3ZvaWQgUHV0QnlJZFN0YXR1czo6bWFya0lmQ2hlYXAoVmlzaXRvciYgdmlz
aXRvcikKIHsKICAgICBmb3IgKFB1dEJ5SWRWYXJpYW50JiB2YXJpYW50IDogbV92YXJpYW50cykK
ICAgICAgICAgdmFyaWFudC5tYXJrSWZDaGVhcCh2aXNpdG9yKTsKIH0KIAordGVtcGxhdGUgdm9p
ZCBQdXRCeUlkU3RhdHVzOjptYXJrSWZDaGVhcChBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1w
bGF0ZSB2b2lkIFB1dEJ5SWRTdGF0dXM6Om1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJik7CisKIGJv
b2wgUHV0QnlJZFN0YXR1czo6ZmluYWxpemUoVk0mIHZtKQogewogICAgIGZvciAoUHV0QnlJZFZh
cmlhbnQmIHZhcmlhbnQgOiBtX3ZhcmlhbnRzKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTggQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0xMTcsNyArMTE3LDcgQEAgcHVibGljOgogICAgIGNvbnN0IFB1dEJ5SWRWYXJpYW50
JiBhdChzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fdmFyaWFudHNbaW5kZXhdOyB9CiAg
ICAgY29uc3QgUHV0QnlJZFZhcmlhbnQmIG9wZXJhdG9yW10oc2l6ZV90IGluZGV4KSBjb25zdCB7
IHJldHVybiBhdChpbmRleCk7IH0KICAgICAKLSAgICB2b2lkIG1hcmtJZkNoZWFwKFNsb3RWaXNp
dG9yJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCBtYXJrSWZDaGVhcChW
aXNpdG9yJik7CiAgICAgYm9vbCBmaW5hbGl6ZShWTSYpOwogICAgIAogICAgIHZvaWQgbWVyZ2Uo
Y29uc3QgUHV0QnlJZFN0YXR1cyYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1B1dEJ5SWRWYXJpYW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNC0yMDE4IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMjYyLDEzICsyNjIsMTcgQEAgYm9vbCBQdXRCeUlkVmFyaWFudDo6YXR0ZW1wdFRv
TWVyZ2VUcmFucwogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIFB1dEJ5SWRWYXJpYW50Ojpt
YXJrSWZDaGVhcChTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0
b3I+Cit2b2lkIFB1dEJ5SWRWYXJpYW50OjptYXJrSWZDaGVhcChWaXNpdG9yJiB2aXNpdG9yKQog
ewogICAgIG1fb2xkU3RydWN0dXJlLm1hcmtJZkNoZWFwKHZpc2l0b3IpOwogICAgIGlmIChtX25l
d1N0cnVjdHVyZSkKICAgICAgICAgbV9uZXdTdHJ1Y3R1cmUtPm1hcmtJZkNoZWFwKHZpc2l0b3Ip
OwogfQogCit0ZW1wbGF0ZSB2b2lkIFB1dEJ5SWRWYXJpYW50OjptYXJrSWZDaGVhcChBYnN0cmFj
dFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIFB1dEJ5SWRWYXJpYW50OjptYXJrSWZDaGVh
cChTbG90VmlzaXRvciYpOworCiBib29sIFB1dEJ5SWRWYXJpYW50OjpmaW5hbGl6ZShWTSYgdm0p
CiB7CiAgICAgaWYgKCFtX29sZFN0cnVjdHVyZS5pc1N0aWxsQWxpdmUodm0pKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmgJKHJldmlz
aW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkVmFy
aWFudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxNC0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTMyLDcgKzEzMiw3IEBAIHB1YmxpYzoKIAogICAg
IGJvb2wgYXR0ZW1wdFRvTWVyZ2UoY29uc3QgUHV0QnlJZFZhcmlhbnQmIG90aGVyKTsKICAgICAK
LSAgICB2b2lkIG1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJik7CisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgVmlzaXRvcj4gdm9pZCBtYXJrSWZDaGVhcChWaXNpdG9yJik7CiAgICAgYm9vbCBmaW5hbGl6
ZShWTSYpOwogICAgIAogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1JlY29yZGVkU3RhdHVzZXMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9SZWNvcmRlZFN0YXR1c2Vz
LmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1JlY29yZGVkU3RhdHVzZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDIsNyArMTAyLDggQEAg
U2V0UHJpdmF0ZUJyYW5kU3RhdHVzKiBSZWNvcmRlZFN0YXR1c2VzOgogICAgIHJldHVybiByZXN1
bHQ7CiB9CiAKLXZvaWQgUmVjb3JkZWRTdGF0dXNlczo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0
b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBSZWNvcmRlZFN0
YXR1c2VzOjp2aXNpdEFnZ3JlZ2F0ZUltcGwoVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBmb3Ig
KGF1dG8mIHBhaXIgOiBnZXRzKQogICAgICAgICBwYWlyLnNlY29uZC0+dmlzaXRBZ2dyZWdhdGUo
dmlzaXRvcik7CkBAIC0xMTQsNyArMTE1LDEwIEBAIHZvaWQgUmVjb3JkZWRTdGF0dXNlczo6dmlz
aXRBZ2dyZWdhdGUoU2wKICAgICAgICAgcGFpci5zZWNvbmQtPnZpc2l0QWdncmVnYXRlKHZpc2l0
b3IpOwogfQogCi12b2lkIFJlY29yZGVkU3RhdHVzZXM6Om1hcmtJZkNoZWFwKFNsb3RWaXNpdG9y
JiB2aXNpdG9yKQorREVGSU5FX1ZJU0lUX0FHR1JFR0FURShSZWNvcmRlZFN0YXR1c2VzKTsKKwor
dGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgUmVjb3JkZWRTdGF0dXNlczo6bWFya0lm
Q2hlYXAoVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBmb3IgKGF1dG8mIHBhaXIgOiBnZXRzKQog
ICAgICAgICBwYWlyLnNlY29uZC0+bWFya0lmQ2hlYXAodmlzaXRvcik7CkBAIC0xMzAsNiArMTM0
LDkgQEAgdm9pZCBSZWNvcmRlZFN0YXR1c2VzOjptYXJrSWZDaGVhcChTbG90VgogICAgICAgICBw
YWlyLnNlY29uZC0+bWFya0lmQ2hlYXAodmlzaXRvcik7CiB9CiAKK3RlbXBsYXRlIHZvaWQgUmVj
b3JkZWRTdGF0dXNlczo6bWFya0lmQ2hlYXAoQWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxh
dGUgdm9pZCBSZWNvcmRlZFN0YXR1c2VzOjptYXJrSWZDaGVhcChTbG90VmlzaXRvciYpOworCiB2
b2lkIFJlY29yZGVkU3RhdHVzZXM6OmZpbmFsaXplV2l0aG91dERlbGV0aW5nKFZNJiB2bSkKIHsK
ICAgICAvLyBUaGlzIHZhcmlhbnQgb2YgZmluYWxpemUgZ2V0cyBjYWxsZWQgZnJvbSB3aXRoaW4g
Z3JhcGggc2FmZXBvaW50cyAtLSBzbyB0aGVyZSBtYXkgYmUgREZHIElSIGluCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUmVjb3JkZWRTdGF0dXNlcy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9SZWNvcmRlZFN0YXR1c2VzLmgJKHJl
dmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9SZWNvcmRl
ZFN0YXR1c2VzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDE4LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE4LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01NCw4ICs1NCw4IEBAIHN0cnVjdCBSZWNv
cmRlZFN0YXR1c2VzIHsKICAgICBDaGVja1ByaXZhdGVCcmFuZFN0YXR1cyogYWRkQ2hlY2tQcml2
YXRlQnJhbmRTdGF0dXMoY29uc3QgQ29kZU9yaWdpbiYsIGNvbnN0IENoZWNrUHJpdmF0ZUJyYW5k
U3RhdHVzJik7CiAgICAgU2V0UHJpdmF0ZUJyYW5kU3RhdHVzKiBhZGRTZXRQcml2YXRlQnJhbmRT
dGF0dXMoY29uc3QgQ29kZU9yaWdpbiYsIGNvbnN0IFNldFByaXZhdGVCcmFuZFN0YXR1cyYpOwog
ICAgIAotICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImKTsKLSAgICB2b2lkIG1h
cmtJZkNoZWFwKFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9BR0dSRUdBVEU7Cisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCBtYXJrSWZDaGVhcChWaXNpdG9yJik7
CiAgICAgCiAgICAgdm9pZCBmaW5hbGl6ZVdpdGhvdXREZWxldGluZyhWTSYpOwogICAgIHZvaWQg
ZmluYWxpemUoVk0mKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TZXRQ
cml2YXRlQnJhbmRTdGF0dXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9TZXRQcml2YXRlQnJhbmRTdGF0dXMuY3BwCShyZXZpc2lvbiAyNzI4MzApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU2V0UHJpdmF0ZUJyYW5kU3RhdHVzLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjM1LDE4ICsyMzUsMjUgQEAgQ2FjaGVhYmxlSWRlbnRpZmll
ciBTZXRQcml2YXRlQnJhbmRTdGF0dQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQgU2V0
UHJpdmF0ZUJyYW5kU3RhdHVzOjp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYgdmlzaXRvcikK
K3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFNldFByaXZhdGVCcmFuZFN0YXR1czo6
dmlzaXRBZ2dyZWdhdGVJbXBsKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgZm9yIChTZXRQcml2
YXRlQnJhbmRWYXJpYW50JiB2YXJpYW50IDogbV92YXJpYW50cykKICAgICAgICAgdmFyaWFudC52
aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKIH0KIAotdm9pZCBTZXRQcml2YXRlQnJhbmRTdGF0dXM6
Om1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorREVGSU5FX1ZJU0lUX0FHR1JFR0FU
RShTZXRQcml2YXRlQnJhbmRTdGF0dXMpOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgor
dm9pZCBTZXRQcml2YXRlQnJhbmRTdGF0dXM6Om1hcmtJZkNoZWFwKFZpc2l0b3ImIHZpc2l0b3Ip
CiB7CiAgICAgZm9yIChTZXRQcml2YXRlQnJhbmRWYXJpYW50JiB2YXJpYW50IDogbV92YXJpYW50
cykKICAgICAgICAgdmFyaWFudC5tYXJrSWZDaGVhcCh2aXNpdG9yKTsKIH0KIAordGVtcGxhdGUg
dm9pZCBTZXRQcml2YXRlQnJhbmRTdGF0dXM6Om1hcmtJZkNoZWFwKEFic3RyYWN0U2xvdFZpc2l0
b3ImKTsKK3RlbXBsYXRlIHZvaWQgU2V0UHJpdmF0ZUJyYW5kU3RhdHVzOjptYXJrSWZDaGVhcChT
bG90VmlzaXRvciYpOworCiBib29sIFNldFByaXZhdGVCcmFuZFN0YXR1czo6ZmluYWxpemUoVk0m
IHZtKQogewogICAgIGZvciAoYXV0byYgdmFyaWFudCA6IG1fdmFyaWFudHMpIHsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TZXRQcml2YXRlQnJhbmRTdGF0dXMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU2V0UHJpdmF0ZUJyYW5k
U3RhdHVzLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9TZXRQcml2YXRlQnJhbmRTdGF0dXMuaAkod29ya2luZyBjb3B5KQpAQCAtODMsOCArODMs
OCBAQCBwdWJsaWM6CiAgICAgLy8gQXR0ZW1wdHMgdG8gcmVkdWNlIHRoZSBzZXQgb2YgdmFyaWFu
dHMgdG8gZml0IHRoZSBnaXZlbiBzdHJ1Y3R1cmUgc2V0LiBUaGlzIG1heSBiZSBhcHByb3hpbWF0
ZS4KICAgICB2b2lkIGZpbHRlcihjb25zdCBTdHJ1Y3R1cmVTZXQmKTsKIAotICAgIHZvaWQgdmlz
aXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImKTsKLSAgICB2b2lkIG1hcmtJZkNoZWFwKFNsb3RWaXNp
dG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9BR0dSRUdBVEU7CisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgVmlzaXRvcj4gdm9pZCBtYXJrSWZDaGVhcChWaXNpdG9yJik7CiAgICAgYm9vbCBmaW5hbGl6
ZShWTSYpOwogCiAgICAgYm9vbCBhcHBlbmRWYXJpYW50KGNvbnN0IFNldFByaXZhdGVCcmFuZFZh
cmlhbnQmKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TZXRQcml2YXRl
QnJhbmRWYXJpYW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvU2V0UHJpdmF0ZUJyYW5kVmFyaWFudC5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TZXRQcml2YXRlQnJhbmRWYXJpYW50LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjAg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIwLTIw
MjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDIx
IElnYWxpYSBTLkEuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC01
NCw3ICs1NCw4IEBAIGJvb2wgU2V0UHJpdmF0ZUJyYW5kVmFyaWFudDo6YXR0ZW1wdFRvTWUKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBTZXRQcml2YXRlQnJhbmRWYXJpYW50OjptYXJrSWZD
aGVhcChTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2
b2lkIFNldFByaXZhdGVCcmFuZFZhcmlhbnQ6Om1hcmtJZkNoZWFwKFZpc2l0b3ImIHZpc2l0b3Ip
CiB7CiAgICAgaWYgKG1fb2xkU3RydWN0dXJlKQogICAgICAgICBtX29sZFN0cnVjdHVyZS0+bWFy
a0lmQ2hlYXAodmlzaXRvcik7CkBAIC02Miw2ICs2Myw5IEBAIHZvaWQgU2V0UHJpdmF0ZUJyYW5k
VmFyaWFudDo6bWFya0lmQ2hlYXAKICAgICAgICAgbV9uZXdTdHJ1Y3R1cmUtPm1hcmtJZkNoZWFw
KHZpc2l0b3IpOwogfQogCit0ZW1wbGF0ZSB2b2lkIFNldFByaXZhdGVCcmFuZFZhcmlhbnQ6Om1h
cmtJZkNoZWFwKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgU2V0UHJpdmF0
ZUJyYW5kVmFyaWFudDo6bWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImKTsKKwogYm9vbCBTZXRQcml2
YXRlQnJhbmRWYXJpYW50OjpmaW5hbGl6ZShWTSYgdm0pCiB7CiAgICAgaWYgKCF2bS5oZWFwLmlz
TWFya2VkKG1fb2xkU3RydWN0dXJlKSkKQEAgLTcxLDExICs3NSwxNCBAQCBib29sIFNldFByaXZh
dGVCcmFuZFZhcmlhbnQ6OmZpbmFsaXplKFZNCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQg
U2V0UHJpdmF0ZUJyYW5kVmFyaWFudDo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImIHZpc2l0
b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBTZXRQcml2YXRlQnJhbmRWYXJp
YW50Ojp2aXNpdEFnZ3JlZ2F0ZUltcGwoVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBtX2lkZW50
aWZpZXIudmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7CiB9CiAKK0RFRklORV9WSVNJVF9BR0dSRUdB
VEUoU2V0UHJpdmF0ZUJyYW5kVmFyaWFudCk7CisKIHZvaWQgU2V0UHJpdmF0ZUJyYW5kVmFyaWFu
dDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAogewogICAgIGR1bXBJbkNvbnRleHQob3V0
LCBudWxscHRyKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TZXRQcml2
YXRlQnJhbmRWYXJpYW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1NldFByaXZhdGVCcmFuZFZhcmlhbnQuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NldFByaXZhdGVCcmFuZFZhcmlhbnQuaAkod29y
a2luZyBjb3B5KQpAQCAtNDUsOCArNDUsOCBAQCBwdWJsaWM6CiAKICAgICBib29sIGF0dGVtcHRU
b01lcmdlKGNvbnN0IFNldFByaXZhdGVCcmFuZFZhcmlhbnQmIG90aGVyKTsKIAotICAgIHZvaWQg
dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImKTsKLSAgICB2b2lkIG1hcmtJZkNoZWFwKFNsb3RW
aXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9BR0dSRUdBVEU7CisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVmlzaXRvcj4gdm9pZCBtYXJrSWZDaGVhcChWaXNpdG9yJik7CiAgICAgYm9vbCBmaW5h
bGl6ZShWTSYpOwogCiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU2V0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU2V0LmNwcAkocmV2
aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVy
ZVNldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDE0LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE0LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMSwxMiArMzEsMTYgQEAKIAogbmFtZXNwYWNl
IEpTQyB7CiAKLXZvaWQgU3RydWN0dXJlU2V0OjptYXJrSWZDaGVhcChTbG90VmlzaXRvciYgdmlz
aXRvcikgY29uc3QKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFN0cnVjdHVyZVNl
dDo6bWFya0lmQ2hlYXAoVmlzaXRvciYgdmlzaXRvcikgY29uc3QKIHsKICAgICBmb3IgKFN0cnVj
dHVyZSogc3RydWN0dXJlIDogKnRoaXMpCiAgICAgICAgIHN0cnVjdHVyZS0+bWFya0lmQ2hlYXAo
dmlzaXRvcik7CiB9CiAKK3RlbXBsYXRlIHZvaWQgU3RydWN0dXJlU2V0OjptYXJrSWZDaGVhcChB
YnN0cmFjdFNsb3RWaXNpdG9yJikgY29uc3Q7Cit0ZW1wbGF0ZSB2b2lkIFN0cnVjdHVyZVNldDo6
bWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImKSBjb25zdDsKKwogYm9vbCBTdHJ1Y3R1cmVTZXQ6Omlz
U3RpbGxBbGl2ZShWTSYgdm0pIGNvbnN0CiB7CiAgICAgZm9yIChTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSA6ICp0aGlzKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0
dXJlU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0
cnVjdHVyZVNldC5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvU3RydWN0dXJlU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01NCw3ICs1NCw3IEBA
IHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG9ubHlFbnRyeSgpOwogICAgIH0KIAotICAgIHZvaWQg
bWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPiB2b2lkIG1hcmtJZkNoZWFwKFZpc2l0b3ImKSBjb25zdDsKICAgICBib29sIGlzU3Rp
bGxBbGl2ZShWTSYpIGNvbnN0OwogICAgIAogICAgIHZvaWQgZHVtcEluQ29udGV4dChQcmludFN0
cmVhbSYsIER1bXBDb250ZXh0KikgY29uc3Q7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAJKHJldmlzaW9uIDI3Mjgz
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDA4LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDA4LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0yOTYsNyArMjk2LDggQEAgdm9pZCBTdHJ1Y3R1cmVTdHVi
SW5mbzo6cmVzZXQoY29uc3QgQ29uYwogICAgIHNldENhY2hlVHlwZShsb2NrZXIsIENhY2hlVHlw
ZTo6VW5zZXQpOwogfQogCi12b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjp2aXNpdEFnZ3JlZ2F0ZShT
bG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFN0
cnVjdHVyZVN0dWJJbmZvOjp2aXNpdEFnZ3JlZ2F0ZUltcGwoVmlzaXRvciYgdmlzaXRvcikKIHsK
ICAgICB7CiAgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9idWZmZXJlZFN0cnVjdHVy
ZXNMb2NrKTsKQEAgLTMyMiw2ICszMjMsOCBAQCB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjp2aXNp
dEFnZ3JlZ2F0ZShTCiAgICAgcmV0dXJuOwogfQogCitERUZJTkVfVklTSVRfQUdHUkVHQVRFKFN0
cnVjdHVyZVN0dWJJbmZvKTsKKwogdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6dmlzaXRXZWFrUmVm
ZXJlbmNlcyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXJCYXNlJiBsb2NrZXIsIENvZGVCbG9jayog
Y29kZUJsb2NrKQogewogICAgIFZNJiB2bSA9IGNvZGVCbG9jay0+dm0oKTsKQEAgLTM1Miw3ICsz
NTUsOCBAQCB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjp2aXNpdFdlYWtSZWZlcmVuCiAgICAgcmVz
ZXRCeUdDID0gdHJ1ZTsKIH0KIAotYm9vbCBTdHJ1Y3R1cmVTdHViSW5mbzo6cHJvcGFnYXRlVHJh
bnNpdGlvbnMoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
PgorYm9vbCBTdHJ1Y3R1cmVTdHViSW5mbzo6cHJvcGFnYXRlVHJhbnNpdGlvbnMoVmlzaXRvciYg
dmlzaXRvcikKIHsKICAgICBzd2l0Y2ggKG1fY2FjaGVUeXBlKSB7CiAgICAgY2FzZSBDYWNoZVR5
cGU6OlVuc2V0OgpAQCAtMzcxLDYgKzM3NSw5IEBAIGJvb2wgU3RydWN0dXJlU3R1YkluZm86OnBy
b3BhZ2F0ZVRyYW5zaXQKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAordGVtcGxhdGUgYm9vbCBTdHJ1
Y3R1cmVTdHViSW5mbzo6cHJvcGFnYXRlVHJhbnNpdGlvbnMoQWJzdHJhY3RTbG90VmlzaXRvciYp
OwordGVtcGxhdGUgYm9vbCBTdHJ1Y3R1cmVTdHViSW5mbzo6cHJvcGFnYXRlVHJhbnNpdGlvbnMo
U2xvdFZpc2l0b3ImKTsKKwogU3R1YkluZm9TdW1tYXJ5IFN0cnVjdHVyZVN0dWJJbmZvOjpzdW1t
YXJ5KFZNJiB2bSkgY29uc3QKIHsKICAgICBTdHViSW5mb1N1bW1hcnkgdGFrZXNTbG93UGF0aCA9
IFN0dWJJbmZvU3VtbWFyeTo6VGFrZXNTbG93UGF0aDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCShyZXZpc2lvbiAyNzI4
MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8u
aAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDgtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDgtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTkzLDE0ICs5MywxNCBAQCBwdWJsaWM6CiAgICAgdm9pZCBk
ZXJlZigpOwogICAgIHZvaWQgYWJvdXRUb0RpZSgpOwogCi0gICAgdm9pZCB2aXNpdEFnZ3JlZ2F0
ZShTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQUdHUkVHQVRFOwogCiAgICAgLy8g
Q2hlY2sgaWYgdGhlIHN0dWIgaGFzIHdlYWsgcmVmZXJlbmNlcyB0aGF0IGFyZSBkZWFkLiBJZiBp
dCBkb2VzLCB0aGVuIGl0IHJlc2V0cyBpdHNlbGYsCiAgICAgLy8gZWl0aGVyIGVudGlyZWx5IG9y
IGp1c3QgZW5vdWdoIHRvIGVuc3VyZSB0aGF0IHRob3NlIGRlYWQgcG9pbnRlcnMgZG9uJ3QgZ2V0
IHVzZWQgYW55bW9yZS4KICAgICB2b2lkIHZpc2l0V2Vha1JlZmVyZW5jZXMoY29uc3QgQ29uY3Vy
cmVudEpTTG9ja2VyQmFzZSYsIENvZGVCbG9jayopOwogICAgIAogICAgIC8vIFRoaXMgcmV0dXJu
cyB0cnVlIGlmIGl0IGhhcyBtYXJrZWQgZXZlcnl0aGluZyB0aGF0IGl0IHdpbGwgZXZlciBtYXJr
LgotICAgIGJvb2wgcHJvcGFnYXRlVHJhbnNpdGlvbnMoU2xvdFZpc2l0b3ImKTsKKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiBib29sIHByb3BhZ2F0ZVRyYW5zaXRpb25zKFZpc2l0b3Im
KTsKICAgICAgICAgCiAgICAgU3R1YkluZm9TdW1tYXJ5IHN1bW1hcnkoVk0mKSBjb25zdDsKICAg
ICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9j
ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlu
a2VkQ29kZUJsb2NrLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxOSBBcHBsZSBJbmMuIEFsbCBS
aWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMSBBcHBsZSBJbmMuIEFs
bCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTc1
LDcgKzc1LDggQEAgVW5saW5rZWRDb2RlQmxvY2s6OlVubGlua2VkQ29kZUJsb2NrKFZNJgogICAg
IH0KIH0KIAotdm9pZCBVbmxpbmtlZENvZGVCbG9jazo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNl
bGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3Zv
aWQgVW5saW5rZWRDb2RlQmxvY2s6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlz
aXRvciYgdmlzaXRvcikKIHsKICAgICBVbmxpbmtlZENvZGVCbG9jayogdGhpc09iamVjdCA9IGpz
Q2FzdDxVbmxpbmtlZENvZGVCbG9jayo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5I
RVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTk0LDYgKzk1LDggQEAgdm9pZCBVbmxpbmtl
ZENvZGVCbG9jazo6dmlzaXRDaGlsZHJlbihKUwogICAgIHZpc2l0b3IucmVwb3J0RXh0cmFNZW1v
cnlWaXNpdGVkKGV4dHJhTWVtb3J5KTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKFVubGlu
a2VkQ29kZUJsb2NrKTsKKwogc2l6ZV90IFVubGlua2VkQ29kZUJsb2NrOjplc3RpbWF0ZWRTaXpl
KEpTQ2VsbCogY2VsbCwgVk0mIHZtKQogewogICAgIFVubGlua2VkQ29kZUJsb2NrKiB0aGlzT2Jq
ZWN0ID0ganNDYXN0PFVubGlua2VkQ29kZUJsb2NrKj4oY2VsbCk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaAkocmV2aXNp
b24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29k
ZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDEyLTIwMTkgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEyLTIwMjEgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00MzEsNyArNDMxLDcgQEAgcHJpdmF0ZToKICAg
ICBSZWZDb3VudGVkQXJyYXk8RXhwcmVzc2lvblJhbmdlSW5mbz4gbV9leHByZXNzaW9uSW5mbzsK
IAogcHJvdGVjdGVkOgotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xv
dFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogICAgIHN0YXRpYyBzaXpl
X3QgZXN0aW1hdGVkU2l6ZShKU0NlbGwqLCBWTSYpOwogCiBwdWJsaWM6CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZEZ1bmN0
aW9uRXhlY3V0YWJsZS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTkgQXBwbGUg
SW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjEgQXBw
bGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0xNDYsNyArMTQ2LDggQEAgdm9pZCBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6
ZGVzdHJveQogICAgIHN0YXRpY19jYXN0PFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKj4oY2Vs
bCktPn5VbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSgpOwogfQogCi12b2lkIFVubGlua2VkRnVu
Y3Rpb25FeGVjdXRhYmxlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3Im
IHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBVbmxpbmtlZEZ1bmN0
aW9uRXhlY3V0YWJsZTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2
aXNpdG9yKQogewogICAgIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiB0aGlzT2JqZWN0ID0g
anNDYXN0PFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dD
X09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtMTY5LDYgKzE3MCw4IEBA
IHZvaWQgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU6OnZpc2l0Q2gKICAgICB9CiB9CiAKK0RF
RklORV9WSVNJVF9DSElMRFJFTihVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSk7CisKIFNvdXJj
ZUNvZGUgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU6OmxpbmtlZFNvdXJjZUNvZGUoY29uc3Qg
U291cmNlQ29kZSYgcGFzc2VkUGFyZW50U291cmNlKSBjb25zdAogewogICAgIGNvbnN0IFNvdXJj
ZUNvZGUmIHBhcmVudFNvdXJjZSA9ICFtX2lzQnVpbHRpbkRlZmF1bHRDbGFzc0NvbnN0cnVjdG9y
ID8gcGFzc2VkUGFyZW50U291cmNlIDogQnVpbHRpbkV4ZWN1dGFibGVzOjpkZWZhdWx0Q29uc3Ry
dWN0b3JTb3VyY2VDb2RlKGNvbnN0cnVjdG9yS2luZCgpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9uRXhlY3V0
YWJsZS5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxOSBBcHBsZSBJbmMuIEFsbCBSaWdo
dHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMSBBcHBsZSBJbmMuIEFsbCBS
aWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI0Miw3
ICsyNDIsNyBAQCBwcml2YXRlOgogICAgIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKFZNJiwg
U3RydWN0dXJlKiwgY29uc3QgU291cmNlQ29kZSYsIEZ1bmN0aW9uTWV0YWRhdGFOb2RlKiwgVW5s
aW5rZWRGdW5jdGlvbktpbmQsIENvbnN0cnVjdEFiaWxpdHksIEpTUGFyc2VyU2NyaXB0TW9kZSwg
UmVmUHRyPFREWkVudmlyb25tZW50TGluaz4sIE9wdGlvbmFsPFByaXZhdGVOYW1lRW52aXJvbm1l
bnQ+LCBKU0M6OkRlcml2ZWRDb250ZXh0VHlwZSwgSlNDOjpOZWVkc0NsYXNzRmllbGRJbml0aWFs
aXplciwgUHJpdmF0ZUJyYW5kUmVxdWlyZW1lbnQsIGJvb2wgaXNCdWlsdGluRGVmYXVsdENsYXNz
Q29uc3RydWN0b3IpOwogICAgIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKERlY29kZXImLCBj
b25zdCBDYWNoZWRGdW5jdGlvbkV4ZWN1dGFibGUmKTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0
Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxE
UkVOOwogCiAgICAgdm9pZCBkZWNvZGVDYWNoZWRDb2RlQmxvY2tzKFZNJik7CiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlclNjb3BlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXJTY29wZS5jcHAJKHJl
dmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dl
clNjb3BlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDgtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDgtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU1LDcgKzU1LDggQEAgdm9pZCBEZWJ1Z2dl
clNjb3BlOjpmaW5pc2hDcmVhdGlvbihWTSYgdgogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZt
KTsKIH0KIAotdm9pZCBEZWJ1Z2dlclNjb3BlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwg
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBE
ZWJ1Z2dlclNjb3BlOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZp
c2l0b3IpCiB7CiAgICAgRGVidWdnZXJTY29wZSogdGhpc09iamVjdCA9IGpzQ2FzdDxEZWJ1Z2dl
clNjb3BlKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0
LCBpbmZvKCkpOwpAQCAtNjUsNiArNjYsOCBAQCB2b2lkIERlYnVnZ2VyU2NvcGU6OnZpc2l0Q2hp
bGRyZW4oSlNDZWxsCiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9uZXh0KTsKIH0K
IAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKERlYnVnZ2VyU2NvcGUpOworCiBTdHJpbmcgRGVidWdn
ZXJTY29wZTo6Y2xhc3NOYW1lKGNvbnN0IEpTT2JqZWN0KiBvYmplY3QsIFZNJiB2bSkKIHsKICAg
ICBjb25zdCBEZWJ1Z2dlclNjb3BlKiBzY29wZSA9IGpzQ2FzdDxjb25zdCBEZWJ1Z2dlclNjb3Bl
Kj4ob2JqZWN0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dl
clNjb3BlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0Rl
YnVnZ2VyU2NvcGUuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RlYnVnZ2VyL0RlYnVnZ2VyU2NvcGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ2LDcgKzQ2LDcg
QEAgcHVibGljOgogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIERlYnVnZ2VyU2NvcGUq
IGNyZWF0ZShWTSYgdm0sIEpTU2NvcGUqIHNjb3BlKTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0
Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxE
UkVOOwogICAgIHN0YXRpYyBTdHJpbmcgY2xhc3NOYW1lKGNvbnN0IEpTT2JqZWN0KiwgVk0mKTsK
ICAgICBzdGF0aWMgU3RyaW5nIHRvU3RyaW5nTmFtZShjb25zdCBKU09iamVjdCosIEpTR2xvYmFs
T2JqZWN0Kik7CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0Kiwg
SlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkVHJhbnNpdGlvbnMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFRyYW5zaXRpb25zLmNw
cAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNp
cmVkVHJhbnNpdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzEsNiArMzEsNyBAQAogI2lu
Y2x1ZGUgIkNvZGVCbG9jay5oIgogI2luY2x1ZGUgIkRGR0NvbW1vbkRhdGEuaCIKICNpbmNsdWRl
ICJKU0NlbGxJbmxpbmVzLmgiCisjaW5jbHVkZSAiU2xvdFZpc2l0b3JJbmxpbmVzLmgiCiAKIG5h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIApAQCAtNTIsMTMgKzUzLDE3IEBAIHZvaWQg
RGVzaXJlZFRyYW5zaXRpb246OnJlYWxseUFkZChWTSYgdm0KICAgICAgICAgICAgIG1fb2xkU3Ry
dWN0dXJlLCBtX25ld1N0cnVjdHVyZSkpOwogfQogCi12b2lkIERlc2lyZWRUcmFuc2l0aW9uOjp2
aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlz
aXRvcj4KK3ZvaWQgRGVzaXJlZFRyYW5zaXRpb246OnZpc2l0Q2hpbGRyZW4oVmlzaXRvciYgdmlz
aXRvcikKIHsKICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKG1fY29kZU9yaWdpbk93bmVy
KTsKICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKG1fb2xkU3RydWN0dXJlKTsKICAgICB2
aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKG1fbmV3U3RydWN0dXJlKTsKIH0KIAordGVtcGxhdGUg
dm9pZCBEZXNpcmVkVHJhbnNpdGlvbjo6dmlzaXRDaGlsZHJlbihBYnN0cmFjdFNsb3RWaXNpdG9y
Jik7Cit0ZW1wbGF0ZSB2b2lkIERlc2lyZWRUcmFuc2l0aW9uOjp2aXNpdENoaWxkcmVuKFNsb3RW
aXNpdG9yJik7CisKIERlc2lyZWRUcmFuc2l0aW9uczo6RGVzaXJlZFRyYW5zaXRpb25zKCkKIHsK
IH0KQEAgLTc4LDEyICs4MywxNiBAQCB2b2lkIERlc2lyZWRUcmFuc2l0aW9uczo6cmVhbGx5QWRk
KFZNJiB2CiAgICAgICAgIG1fdHJhbnNpdGlvbnNbaV0ucmVhbGx5QWRkKHZtLCBjb21tb24pOwog
fQogCi12b2lkIERlc2lyZWRUcmFuc2l0aW9uczo6dmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYg
dmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIERlc2lyZWRUcmFuc2l0
aW9uczo6dmlzaXRDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBtX3RyYW5zaXRpb25zLnNpemUoKTsgaSsrKQogICAgICAgICBtX3RyYW5z
aXRpb25zW2ldLnZpc2l0Q2hpbGRyZW4odmlzaXRvcik7CiB9CiAKK3RlbXBsYXRlIHZvaWQgRGVz
aXJlZFRyYW5zaXRpb25zOjp2aXNpdENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3Rl
bXBsYXRlIHZvaWQgRGVzaXJlZFRyYW5zaXRpb25zOjp2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9y
Jik7CisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIAogI2VuZGlmIC8vIEVOQUJMRShERkdf
SklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkVHJhbnNpdGlv
bnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRU
cmFuc2l0aW9ucy5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Rlc2lyZWRUcmFuc2l0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMzLDcgKzMz
LDYgQEAgbmFtZXNwYWNlIEpTQyB7IAogCiBjbGFzcyBDb2RlQmxvY2s7CiBjbGFzcyBTY3JpcHRF
eGVjdXRhYmxlOwotY2xhc3MgU2xvdFZpc2l0b3I7CiBjbGFzcyBTdHJ1Y3R1cmU7CiBjbGFzcyBW
TTsKIApAQCAtNDYsOCArNDUsNyBAQCBwdWJsaWM6CiAgICAgRGVzaXJlZFRyYW5zaXRpb24oQ29k
ZUJsb2NrKiwgQ29kZUJsb2NrKiBjb2RlT3JpZ2luT3duZXIsIFN0cnVjdHVyZSosIFN0cnVjdHVy
ZSopOwogCiAgICAgdm9pZCByZWFsbHlBZGQoVk0mLCBDb21tb25EYXRhKik7Ci0gICAgCi0gICAg
dm9pZCB2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
VmlzaXRvcj4gdm9pZCB2aXNpdENoaWxkcmVuKFZpc2l0b3ImKTsKIAogcHJpdmF0ZToKICAgICBD
b2RlQmxvY2sqIG1fY29kZUJsb2NrOwpAQCAtNjMsNyArNjEsNyBAQCBwdWJsaWM6CiAKICAgICB2
b2lkIGFkZExhemlseShDb2RlQmxvY2sqLCBDb2RlQmxvY2sqIGNvZGVPcmlnaW5Pd25lciwgU3Ry
dWN0dXJlKiwgU3RydWN0dXJlKik7CiAgICAgdm9pZCByZWFsbHlBZGQoVk0mLCBDb21tb25EYXRh
Kik7Ci0gICAgdm9pZCB2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCB2aXNpdENoaWxkcmVuKFZpc2l0b3ImKTsKIAogcHJpdmF0
ZToKICAgICBWZWN0b3I8RGVzaXJlZFRyYW5zaXRpb24+IG1fdHJhbnNpdGlvbnM7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXZWFrUmVmZXJlbmNlcy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2Vha1JlZmVy
ZW5jZXMuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0Rlc2lyZWRXZWFrUmVmZXJlbmNlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC04NywxMiAr
ODcsMTYgQEAgdm9pZCBEZXNpcmVkV2Vha1JlZmVyZW5jZXM6OnJlYWxseUFkZChWTQogICAgIH0K
IH0KIAotdm9pZCBEZXNpcmVkV2Vha1JlZmVyZW5jZXM6OnZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0
b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBEZXNpcmVkV2Vh
a1JlZmVyZW5jZXM6OnZpc2l0Q2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBmb3Ig
KEpTQ2VsbCogdGFyZ2V0IDogbV9yZWZlcmVuY2VzKQogICAgICAgICB2aXNpdG9yLmFwcGVuZFVu
YmFycmllcmVkKHRhcmdldCk7CiB9CiAKK3RlbXBsYXRlIHZvaWQgRGVzaXJlZFdlYWtSZWZlcmVu
Y2VzOjp2aXNpdENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQg
RGVzaXJlZFdlYWtSZWZlcmVuY2VzOjp2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CisKIH0g
fSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIAogI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2Vha1JlZmVyZW5jZXMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXZWFrUmVm
ZXJlbmNlcy5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0Rlc2lyZWRXZWFrUmVmZXJlbmNlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzQsNyArMzQs
NiBAQCBuYW1lc3BhY2UgSlNDIHsgCiBjbGFzcyBDb2RlQmxvY2s7CiBjbGFzcyBKU0NlbGw7CiBj
bGFzcyBKU1ZhbHVlOwotY2xhc3MgU2xvdFZpc2l0b3I7CiBjbGFzcyBWTTsKIAogbmFtZXNwYWNl
IERGRyB7CkBAIC01Miw4ICs1MSw4IEBAIHB1YmxpYzoKICAgICBib29sIGNvbnRhaW5zKEpTQ2Vs
bCopOwogICAgIAogICAgIHZvaWQgcmVhbGx5QWRkKFZNJiwgQ29tbW9uRGF0YSopOwotICAgIAot
ICAgIHZvaWQgdmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYpOworCisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVmlzaXRvcj4gdm9pZCB2aXNpdENoaWxkcmVuKFZpc2l0b3ImKTsKIAogcHJpdmF0ZToK
ICAgICBDb2RlQmxvY2sqIG1fY29kZUJsb2NrOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdHcmFwaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdHcmFwaC5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHR3JhcGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MSw2ICs1MSw3IEBACiAjaW5j
bHVkZSAiSlNMZXhpY2FsRW52aXJvbm1lbnQuaCIKICNpbmNsdWRlICJNYXhGcmFtZUV4dGVudEZv
clNsb3dQYXRoQ2FsbC5oIgogI2luY2x1ZGUgIk9wZXJhbmRzSW5saW5lcy5oIgorI2luY2x1ZGUg
IlNsb3RWaXNpdG9ySW5saW5lcy5oIgogI2luY2x1ZGUgIlNuaXBwZXQuaCIKICNpbmNsdWRlICJT
dGFja0FsaWdubWVudC5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZUlubGluZXMuaCIKQEAgLTE0NDgs
NyArMTQ0OSw4IEBAIHZvaWQgR3JhcGg6OnJlZ2lzdGVyRnJvemVuVmFsdWVzKCkKICAgICBtX2Nv
ZGVCbG9jay0+Y29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uKCkuc2hyaW5rVG9GaXQo
KTsKIH0KIAotdm9pZCBHcmFwaDo6dmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikK
K3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+CitBTFdBWVNfSU5MSU5FIHZvaWQgR3JhcGg6OnZp
c2l0Q2hpbGRyZW5JbXBsKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgZm9yIChGcm96ZW5WYWx1
ZSogdmFsdWUgOiBtX2Zyb3plblZhbHVlcykgewogICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFy
cmllcmVkKHZhbHVlLT52YWx1ZSgpKTsKQEAgLTE0NTYsNiArMTQ1OCw5IEBAIHZvaWQgR3JhcGg6
OnZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHYKICAgICB9CiB9CiAKK3ZvaWQgR3JhcGg6OnZp
c2l0Q2hpbGRyZW4oQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikgeyB2aXNpdENoaWxkcmVu
SW1wbCh2aXNpdG9yKTsgfQordm9pZCBHcmFwaDo6dmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYg
dmlzaXRvcikgeyB2aXNpdENoaWxkcmVuSW1wbCh2aXNpdG9yKTsgfQorCiBGcm96ZW5WYWx1ZSog
R3JhcGg6OmZyZWV6ZShKU1ZhbHVlIHZhbHVlKQogewogICAgIGlmIChVTkxJS0VMWSghdmFsdWUp
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkocmV2aXNpb24gMjcyODMw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMS0yMDIwIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDIxIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMTAwMCw5ICsxMDAwLDEwIEBAIHB1YmxpYzoKICAgICBib29sIGNhbkRvRmFzdFNwcmVh
ZChOb2RlKiwgY29uc3QgQWJzdHJhY3RWYWx1ZSYpOwogICAgIAogICAgIHZvaWQgcmVnaXN0ZXJG
cm96ZW5WYWx1ZXMoKTsKLSAgICAKKworICAgIHZvaWQgdmlzaXRDaGlsZHJlbihBYnN0cmFjdFNs
b3RWaXNpdG9yJikgZmluYWw7CiAgICAgdm9pZCB2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJikg
ZmluYWw7Ci0gICAgCisKICAgICB2b2lkIGxvZ0Fzc2VydGlvbkZhaWx1cmUoCiAgICAgICAgIHN0
ZDo6bnVsbHB0cl90LCBjb25zdCBjaGFyKiBmaWxlLCBpbnQgbGluZSwgY29uc3QgY2hhciogZnVu
Y3Rpb24sCiAgICAgICAgIGNvbnN0IGNoYXIqIGFzc2VydGlvbik7CkBAIC0xMTg0LDYgKzExODUs
OCBAQCBwdWJsaWM6CiAgICAgSGFzaFNldDxOb2RlKj4gbV9zbG93R2V0QnlWYWw7CiAKIHByaXZh
dGU6CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCB2aXNpdENoaWxkcmVuSW1w
bChWaXNpdG9yJik7CisKICAgICBib29sIGlzU3RyaW5nUHJvdG90eXBlTWV0aG9kU2FuZShKU0ds
b2JhbE9iamVjdCosIFVuaXF1ZWRTdHJpbmdJbXBsKik7CiAKICAgICB2b2lkIGhhbmRsZVN1Y2Nl
c3NvcihWZWN0b3I8QmFzaWNCbG9jayosIDE2PiYgd29ya2xpc3QsIEJhc2ljQmxvY2sqLCBCYXNp
Y0Jsb2NrKiBzdWNjZXNzb3IpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQ
bGFuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4u
Y3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Bs
YW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjcyLDkgKzY3MiwxMCBAQCBDb21waWxhdGlvbktl
eSBQbGFuOjprZXkoKQogICAgIHJldHVybiBDb21waWxhdGlvbktleShtX2NvZGVCbG9jay0+YWx0
ZXJuYXRpdmUoKSwgbV9tb2RlKTsKIH0KIAotdm9pZCBQbGFuOjpjaGVja0xpdmVuZXNzQW5kVmlz
aXRDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0
b3I+Cit2b2lkIFBsYW46OmNoZWNrTGl2ZW5lc3NBbmRWaXNpdENoaWxkcmVuKFZpc2l0b3ImIHZp
c2l0b3IpCiB7Ci0gICAgaWYgKCFpc0tub3duVG9CZUxpdmVEdXJpbmdHQygpKQorICAgIGlmICgh
aXNLbm93blRvQmVMaXZlRHVyaW5nR0ModmlzaXRvcikpCiAgICAgICAgIHJldHVybjsKIAogICAg
IGNsZWFuTXVzdEhhbmRsZVZhbHVlc0lmTmVjZXNzYXJ5KCk7CkBAIC03MDIsMTMgKzcwMywzMyBA
QCB2b2lkIFBsYW46OmNoZWNrTGl2ZW5lc3NBbmRWaXNpdENoaWxkcmVuCiAgICAgbV90cmFuc2l0
aW9ucy52aXNpdENoaWxkcmVuKHZpc2l0b3IpOwogfQogCit0ZW1wbGF0ZSB2b2lkIFBsYW46OmNo
ZWNrTGl2ZW5lc3NBbmRWaXNpdENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBs
YXRlIHZvaWQgUGxhbjo6Y2hlY2tMaXZlbmVzc0FuZFZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3Im
KTsKKwogdm9pZCBQbGFuOjpmaW5hbGl6ZUluR0MoKQogewogICAgIEFTU0VSVChtX3ZtKTsKICAg
ICBtX3JlY29yZGVkU3RhdHVzZXMuZmluYWxpemVXaXRob3V0RGVsZXRpbmcoKm1fdm0pOwogfQog
Ci1ib29sIFBsYW46OmlzS25vd25Ub0JlTGl2ZUR1cmluZ0dDKCkKK3RlbXBsYXRlPHR5cGVuYW1l
IFZpc2l0b3I+Citib29sIFBsYW46OmlzS25vd25Ub0JlTGl2ZUR1cmluZ0dDKFZpc2l0b3ImIHZp
c2l0b3IpCit7CisgICAgaWYgKG1fc3RhZ2UgPT0gQ2FuY2VsbGVkKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgaWYgKCF2aXNpdG9yLmlzTWFya2VkKG1fY29kZUJsb2NrLT5vd25lckV4ZWN1
dGFibGUoKSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIXZpc2l0b3IuaXNNYXJr
ZWQobV9jb2RlQmxvY2stPmFsdGVybmF0aXZlKCkpKQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgaWYgKCEhbV9wcm9maWxlZERGR0NvZGVCbG9jayAmJiAhdmlzaXRvci5pc01hcmtlZChtX3By
b2ZpbGVkREZHQ29kZUJsb2NrKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiB0
cnVlOworfQorCit0ZW1wbGF0ZSBib29sIFBsYW46OmlzS25vd25Ub0JlTGl2ZUR1cmluZ0dDKEFi
c3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIGJvb2wgUGxhbjo6aXNLbm93blRvQmVMaXZl
RHVyaW5nR0MoU2xvdFZpc2l0b3ImKTsKKworYm9vbCBQbGFuOjppc0tub3duVG9CZUxpdmVBZnRl
ckdDKCkKIHsKICAgICBpZiAobV9zdGFnZSA9PSBDYW5jZWxsZWQpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5oCShyZXZpc2lvbiAyNzI4
MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uaAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTQ0LDcgKzQ0LDYgQEAKIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBDb2RlQmxvY2s7
Ci1jbGFzcyBTbG90VmlzaXRvcjsKIAogbmFtZXNwYWNlIERGRyB7CiAKQEAgLTcwLDEwICs2OSwx
MSBAQCBwdWJsaWM6CiAgICAgCiAgICAgQ29tcGlsYXRpb25LZXkga2V5KCk7CiAgICAgCi0gICAg
dGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KLSAgICB2b2lkIGl0ZXJhdGVDb2RlQmxvY2tzRm9yR0Mo
Y29uc3QgRnVuYyYpOwotICAgIHZvaWQgY2hlY2tMaXZlbmVzc0FuZFZpc2l0Q2hpbGRyZW4oU2xv
dFZpc2l0b3ImKTsKLSAgICBib29sIGlzS25vd25Ub0JlTGl2ZUR1cmluZ0dDKCk7CisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgRnVuYywgdHlwZW5hbWUgVmlzaXRvcj4KKyAgICB2b2lkIGl0ZXJhdGVD
b2RlQmxvY2tzRm9yR0MoVmlzaXRvciYsIGNvbnN0IEZ1bmMmKTsKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBWaXNpdG9yPiB2b2lkIGNoZWNrTGl2ZW5lc3NBbmRWaXNpdENoaWxkcmVuKFZpc2l0b3Im
KTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiBib29sIGlzS25vd25Ub0JlTGl2ZUR1
cmluZ0dDKFZpc2l0b3ImKTsKKyAgICBib29sIGlzS25vd25Ub0JlTGl2ZUFmdGVyR0MoKTsKICAg
ICB2b2lkIGZpbmFsaXplSW5HQygpOwogICAgIHZvaWQgY2FuY2VsKCk7CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbklubGluZXMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW5JbmxpbmVzLmgJKHJldmlzaW9uIDI3MjgzMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbklubGluZXMuaAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAxOCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTMxLDEwICszMSwxMCBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7
CiAKICNpZiBFTkFCTEUoREZHX0pJVCkKIAotdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KLXZvaWQg
UGxhbjo6aXRlcmF0ZUNvZGVCbG9ja3NGb3JHQyhjb25zdCBGdW5jJiBmdW5jKQordGVtcGxhdGU8
dHlwZW5hbWUgRnVuYywgdHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgUGxhbjo6aXRlcmF0ZUNvZGVC
bG9ja3NGb3JHQyhWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBGdW5jJiBmdW5jKQogewotICAgIGlm
ICghaXNLbm93blRvQmVMaXZlRHVyaW5nR0MoKSkKKyAgICBpZiAoIWlzS25vd25Ub0JlTGl2ZUR1
cmluZ0dDKHZpc2l0b3IpKQogICAgICAgICByZXR1cm47CiAgICAgCiAgICAgLy8gQ29tcGlsYXRp
b24gd3JpdGVzIGxvdHMgb2YgdmFsdWVzIHRvIGEgQ29kZUJsb2NrIHdpdGhvdXQgcGVyZm9ybWlu
ZwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlcG9pbnQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZXBvaW50LmNwcAkocmV2
aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlcG9pbnQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxNC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODMsMjggKzgzLDQ2IEBAIHZvaWQgU2FmZXBvaW50Ojpi
ZWdpbigpCiAgICAgfQogfQogCi12b2lkIFNhZmVwb2ludDo6Y2hlY2tMaXZlbmVzc0FuZFZpc2l0
Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
Pgordm9pZCBTYWZlcG9pbnQ6OmNoZWNrTGl2ZW5lc3NBbmRWaXNpdENoaWxkcmVuKFZpc2l0b3Im
IHZpc2l0b3IpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQobV9kaWRDYWxsQmVnaW4pOwogCiAgICAg
aWYgKG1fcmVzdWx0Lm1fZGlkR2V0Q2FuY2VsbGVkKQogICAgICAgICByZXR1cm47IC8vIFdlIHdl
cmUgY2FuY2VsbGVkIGR1cmluZyBhIHByZXZpb3VzIEdDIQogICAgIAotICAgIGlmICghaXNLbm93
blRvQmVMaXZlRHVyaW5nR0MoKSkKKyAgICBpZiAoIWlzS25vd25Ub0JlTGl2ZUR1cmluZ0dDKHZp
c2l0b3IpKQogICAgICAgICByZXR1cm47CiAgICAgCiAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9z
Y2FubmFibGVzLnNpemUoKTsgaS0tOykKICAgICAgICAgbV9zY2FubmFibGVzW2ldLT52aXNpdENo
aWxkcmVuKHZpc2l0b3IpOwogfQogCi1ib29sIFNhZmVwb2ludDo6aXNLbm93blRvQmVMaXZlRHVy
aW5nR0MoKQordGVtcGxhdGUgdm9pZCBTYWZlcG9pbnQ6OmNoZWNrTGl2ZW5lc3NBbmRWaXNpdENo
aWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgU2FmZXBvaW50Ojpj
aGVja0xpdmVuZXNzQW5kVmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYpOworCit0ZW1wbGF0ZTx0
eXBlbmFtZSBWaXNpdG9yPgorYm9vbCBTYWZlcG9pbnQ6OmlzS25vd25Ub0JlTGl2ZUR1cmluZ0dD
KFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgUkVMRUFTRV9BU1NFUlQobV9kaWRDYWxsQmVnaW4p
OworICAgIAorICAgIGlmIChtX3Jlc3VsdC5tX2RpZEdldENhbmNlbGxlZCkKKyAgICAgICAgcmV0
dXJuIHRydWU7IC8vIFdlIHdlcmUgY2FuY2VsbGVkIGR1cmluZyBhIHByZXZpb3VzIEdDLCBzbyBs
ZXQncyBub3QgbWVzcyB3aXRoIGl0IHRoaXMgdGltZSBhcm91bmQgLSBwcmV0ZW5kIGl0J3MgbGl2
ZSBhbmQgbW92ZSBvbi4KKyAgICAKKyAgICByZXR1cm4gbV9wbGFuLmlzS25vd25Ub0JlTGl2ZUR1
cmluZ0dDKHZpc2l0b3IpOworfQorCit0ZW1wbGF0ZSBib29sIFNhZmVwb2ludDo6aXNLbm93blRv
QmVMaXZlRHVyaW5nR0MoQWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgYm9vbCBTYWZl
cG9pbnQ6OmlzS25vd25Ub0JlTGl2ZUR1cmluZ0dDKFNsb3RWaXNpdG9yJik7CisKK2Jvb2wgU2Fm
ZXBvaW50Ojppc0tub3duVG9CZUxpdmVBZnRlckdDKCkKIHsKICAgICBSRUxFQVNFX0FTU0VSVCht
X2RpZENhbGxCZWdpbik7CiAgICAgCiAgICAgaWYgKG1fcmVzdWx0Lm1fZGlkR2V0Q2FuY2VsbGVk
KQogICAgICAgICByZXR1cm4gdHJ1ZTsgLy8gV2Ugd2VyZSBjYW5jZWxsZWQgZHVyaW5nIGEgcHJl
dmlvdXMgR0MsIHNvIGxldCdzIG5vdCBtZXNzIHdpdGggaXQgdGhpcyB0aW1lIGFyb3VuZCAtIHBy
ZXRlbmQgaXQncyBsaXZlIGFuZCBtb3ZlIG9uLgogICAgIAotICAgIHJldHVybiBtX3BsYW4uaXNL
bm93blRvQmVMaXZlRHVyaW5nR0MoKTsKKyAgICByZXR1cm4gbV9wbGFuLmlzS25vd25Ub0JlTGl2
ZUFmdGVyR0MoKTsKIH0KIAogdm9pZCBTYWZlcG9pbnQ6OmNhbmNlbCgpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVwb2ludC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZXBvaW50LmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZXBvaW50LmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0LCAyMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDIxIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtMzEsNyArMzEsNiBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotY2xhc3MgU2xvdFZpc2l0b3I7
CiBjbGFzcyBWTTsKIAogbmFtZXNwYWNlIERGRyB7CkBAIC02Niw5ICs2NSwxMCBAQCBwdWJsaWM6
CiAgICAgdm9pZCBhZGQoU2Nhbm5hYmxlKik7CiAgICAgCiAgICAgdm9pZCBiZWdpbigpOwotICAg
IAotICAgIHZvaWQgY2hlY2tMaXZlbmVzc0FuZFZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsK
LSAgICBib29sIGlzS25vd25Ub0JlTGl2ZUR1cmluZ0dDKCk7CisKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBWaXNpdG9yPiB2b2lkIGNoZWNrTGl2ZW5lc3NBbmRWaXNpdENoaWxkcmVuKFZpc2l0b3Im
KTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiBib29sIGlzS25vd25Ub0JlTGl2ZUR1
cmluZ0dDKFZpc2l0b3ImKTsKKyAgICBib29sIGlzS25vd25Ub0JlTGl2ZUFmdGVyR0MoKTsKICAg
ICB2b2lkIGNhbmNlbCgpOwogICAgIAogICAgIFZNKiB2bSgpIGNvbnN0OyAvLyBNYXkgcmV0dXJu
IG51bGwgaWYgd2UndmUgYmVlbiBjYW5jZWxsZWQuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NjYW5uYWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU2Nhbm5hYmxlLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU2Nhbm5hYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjksNiArMjksNyBAQAog
CiBuYW1lc3BhY2UgSlNDIHsKIAorY2xhc3MgQWJzdHJhY3RTbG90VmlzaXRvcjsKIGNsYXNzIFNs
b3RWaXNpdG9yOwogCiBuYW1lc3BhY2UgREZHIHsKQEAgLTM3LDcgKzM4LDggQEAgY2xhc3MgU2Nh
bm5hYmxlIHsKIHB1YmxpYzoKICAgICBTY2FubmFibGUoKSB7IH0KICAgICB2aXJ0dWFsIH5TY2Fu
bmFibGUoKSB7IH0KLSAgICAKKworICAgIHZpcnR1YWwgdm9pZCB2aXNpdENoaWxkcmVuKEFic3Ry
YWN0U2xvdFZpc2l0b3ImKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHZpc2l0Q2hpbGRyZW4oU2xv
dFZpc2l0b3ImKSA9IDA7CiB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1dvcmtsaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1dvcmtsaXN0LmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdXb3JrbGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNzIsNyArMzcyLDggQEAg
dm9pZCBXb3JrbGlzdDo6cmVzdW1lQWxsVGhyZWFkcygpCiAgICAgbV9zdXNwZW5zaW9uTG9jay51
bmxvY2soKTsKIH0KIAotdm9pZCBXb3JrbGlzdDo6dmlzaXRXZWFrUmVmZXJlbmNlcyhTbG90Vmlz
aXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFdvcmtsaXN0
Ojp2aXNpdFdlYWtSZWZlcmVuY2VzKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgVk0qIHZtID0g
JnZpc2l0b3IuaGVhcCgpLT52bSgpOwogICAgIHsKQEAgLTM5Niw2ICszOTcsOSBAQCB2b2lkIFdv
cmtsaXN0Ojp2aXNpdFdlYWtSZWZlcmVuY2VzKFNsb3RWCiAgICAgfQogfQogCit0ZW1wbGF0ZSB2
b2lkIFdvcmtsaXN0Ojp2aXNpdFdlYWtSZWZlcmVuY2VzKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsK
K3RlbXBsYXRlIHZvaWQgV29ya2xpc3Q6OnZpc2l0V2Vha1JlZmVyZW5jZXMoU2xvdFZpc2l0b3Im
KTsKKwogdm9pZCBXb3JrbGlzdDo6cmVtb3ZlRGVhZFBsYW5zKFZNJiB2bSkKIHsKICAgICB7CkBA
IC00MDUsNyArNDA5LDcgQEAgdm9pZCBXb3JrbGlzdDo6cmVtb3ZlRGVhZFBsYW5zKFZNJiB2bSkK
ICAgICAgICAgICAgIFBsYW4qIHBsYW4gPSBpdGVyLT52YWx1ZS5nZXQoKTsKICAgICAgICAgICAg
IGlmIChwbGFuLT52bSgpICE9ICZ2bSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAg
ICAgICAgIGlmIChwbGFuLT5pc0tub3duVG9CZUxpdmVEdXJpbmdHQygpKSB7CisgICAgICAgICAg
ICBpZiAocGxhbi0+aXNLbm93blRvQmVMaXZlQWZ0ZXJHQygpKSB7CiAgICAgICAgICAgICAgICAg
cGxhbi0+ZmluYWxpemVJbkdDKCk7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAg
ICAgICB9CkBAIC00NDAsNyArNDQ0LDcgQEAgdm9pZCBXb3JrbGlzdDo6cmVtb3ZlRGVhZFBsYW5z
KFZNJiB2bSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBpZiAoc2FmZXBvaW50LT52
bSgpICE9ICZ2bSkKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAoc2FmZXBvaW50
LT5pc0tub3duVG9CZUxpdmVEdXJpbmdHQygpKQorICAgICAgICBpZiAoc2FmZXBvaW50LT5pc0tu
b3duVG9CZUxpdmVBZnRlckdDKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgc2Fm
ZXBvaW50LT5jYW5jZWwoKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1dvcmtsaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdXb3JrbGlzdC5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1dvcmtsaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMywxMSArMzMsNyBAQAogI2lu
Y2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL0xvY2suaD4KIAotbmFtZXNwYWNl
IEpTQyB7Ci0KLWNsYXNzIFNsb3RWaXNpdG9yOwotCi1uYW1lc3BhY2UgREZHIHsKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAogI2lmIEVOQUJMRShERkdfSklUKQogCkBAIC01Niw4
ICs1Miw4IEBAIHB1YmxpYzoKICAgICAvLyB3b3JrbGlzdC0+Y29tcGxldGVBbGxSZWFkeVBsYW5z
Rm9yVk0odm0pOwogICAgIHZvaWQgY29tcGxldGVBbGxQbGFuc0ZvclZNKFZNJik7CiAKLSAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgotICAgIHZvaWQgaXRlcmF0ZUNvZGVCbG9ja3NGb3JHQyhW
TSYsIGNvbnN0IEZ1bmMmKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jLCB0eXBlbmFtZSBW
aXNpdG9yPgorICAgIHZvaWQgaXRlcmF0ZUNvZGVCbG9ja3NGb3JHQyhWaXNpdG9yJiwgVk0mLCBj
b25zdCBGdW5jJik7CiAKICAgICB2b2lkIHdhaXRVbnRpbEFsbFBsYW5zRm9yVk1BcmVSZWFkeShW
TSYpOwogICAgIFN0YXRlIGNvbXBsZXRlQWxsUmVhZHlQbGFuc0ZvclZNKFZNJiwgQ29tcGlsYXRp
b25LZXkgPSBDb21waWxhdGlvbktleSgpKTsKQEAgLTczLDcgKzY5LDcgQEAgcHVibGljOgogICAg
IGJvb2wgaXNBY3RpdmVGb3JWTShWTSYpIGNvbnN0OwogICAgIAogICAgIC8vIE9ubHkgY2FsbGVk
IG9uIHRoZSBtYWluIHRocmVhZCBhZnRlciBzdXNwZW5kaW5nIGFsbCB0aHJlYWRzLgotICAgIHZv
aWQgdmlzaXRXZWFrUmVmZXJlbmNlcyhTbG90VmlzaXRvciYpOworICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFZpc2l0b3I+IHZvaWQgdmlzaXRXZWFrUmVmZXJlbmNlcyhWaXNpdG9yJik7CiAgICAgdm9p
ZCByZW1vdmVEZWFkUGxhbnMoVk0mKTsKICAgICAKICAgICB2b2lkIHJlbW92ZU5vbkNvbXBpbGlu
Z1BsYW5zRm9yVk0oVk0mKTsKQEAgLTE0Myw4ICsxMzksOCBAQCBXb3JrbGlzdCYgZXhpc3RpbmdX
b3JrbGlzdEZvckluZGV4KHVuc2lnCiAKIHZvaWQgY29tcGxldGVBbGxQbGFuc0ZvclZNKFZNJik7
CiAKLXRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+Ci12b2lkIGl0ZXJhdGVDb2RlQmxvY2tzRm9yR0Mo
Vk0mLCBjb25zdCBGdW5jJik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jLCB0eXBlbmFtZSBWaXNp
dG9yPgordm9pZCBpdGVyYXRlQ29kZUJsb2Nrc0ZvckdDKFZpc2l0b3ImLCBWTSYsIGNvbnN0IEZ1
bmMmKTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3RJbmxpbmVzLmgJKHJldmlzaW9uIDI3MjgzMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3RJbmxpbmVzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMTgg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIw
MjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0zMiwzMSArMzIsMzEgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBE
RkcgewogCiAjaWYgRU5BQkxFKERGR19KSVQpCiAKLXRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+Ci12
b2lkIGl0ZXJhdGVDb2RlQmxvY2tzRm9yR0MoVk0mIHZtLCBjb25zdCBGdW5jJiBmdW5jKQordGVt
cGxhdGU8dHlwZW5hbWUgRnVuYywgdHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgaXRlcmF0ZUNvZGVC
bG9ja3NGb3JHQyhWaXNpdG9yJiB2aXNpdG9yLCBWTSYgdm0sIGNvbnN0IEZ1bmMmIGZ1bmMpCiB7
CiAgICAgZm9yICh1bnNpZ25lZCBpID0gREZHOjpudW1iZXJPZldvcmtsaXN0cygpOyBpLS07KSB7
CiAgICAgICAgIGlmIChERkc6OldvcmtsaXN0KiB3b3JrbGlzdCA9IERGRzo6ZXhpc3RpbmdXb3Jr
bGlzdEZvckluZGV4T3JOdWxsKGkpKQotICAgICAgICAgICAgd29ya2xpc3QtPml0ZXJhdGVDb2Rl
QmxvY2tzRm9yR0Modm0sIGZ1bmMpOworICAgICAgICAgICAgd29ya2xpc3QtPml0ZXJhdGVDb2Rl
QmxvY2tzRm9yR0ModmlzaXRvciwgdm0sIGZ1bmMpOwogICAgIH0KIH0KIAotdGVtcGxhdGU8dHlw
ZW5hbWUgRnVuYz4KLXZvaWQgV29ya2xpc3Q6Oml0ZXJhdGVDb2RlQmxvY2tzRm9yR0MoVk0mIHZt
LCBjb25zdCBGdW5jJiBmdW5jKQordGVtcGxhdGU8dHlwZW5hbWUgRnVuYywgdHlwZW5hbWUgVmlz
aXRvcj4KK3ZvaWQgV29ya2xpc3Q6Oml0ZXJhdGVDb2RlQmxvY2tzRm9yR0MoVmlzaXRvciYgdmlz
aXRvciwgVk0mIHZtLCBjb25zdCBGdW5jJiBmdW5jKQogewogICAgIExvY2tIb2xkZXIgbG9ja2Vy
KCptX2xvY2spOwogICAgIGZvciAoUGxhbk1hcDo6aXRlcmF0b3IgaXRlciA9IG1fcGxhbnMuYmVn
aW4oKTsgaXRlciAhPSBtX3BsYW5zLmVuZCgpOyArK2l0ZXIpIHsKICAgICAgICAgUGxhbiogcGxh
biA9IGl0ZXItPnZhbHVlLmdldCgpOwogICAgICAgICBpZiAocGxhbi0+dm0oKSAhPSAmdm0pCiAg
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgcGxhbi0+aXRlcmF0ZUNvZGVCbG9ja3NGb3JH
QyhmdW5jKTsKKyAgICAgICAgcGxhbi0+aXRlcmF0ZUNvZGVCbG9ja3NGb3JHQyh2aXNpdG9yLCBm
dW5jKTsKICAgICB9CiB9CiAKICNlbHNlIC8vIEVOQUJMRShERkdfSklUKQogCi10ZW1wbGF0ZTx0
eXBlbmFtZSBGdW5jPgotdm9pZCBpdGVyYXRlQ29kZUJsb2Nrc0ZvckdDKFZNJiwgY29uc3QgRnVu
YyYpCit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jLCB0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBpdGVy
YXRlQ29kZUJsb2Nrc0ZvckdDKFZpc2l0b3ImLCBWTSYsIGNvbnN0IEZ1bmMmKQogewogfQogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9BYnN0cmFjdFNsb3RWaXNpdG9yLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQWJzdHJhY3RTbG90VmlzaXRv
ci5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Fic3RyYWN0
U2xvdFZpc2l0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIwOCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5j
bHVkZSAiSlNDSlNWYWx1ZS5oIgorI2luY2x1ZGUgIk1hcmtTdGFjay5oIgorI2luY2x1ZGUgIlJv
b3RNYXJrUmVhc29uLmgiCisjaW5jbHVkZSAiVmlzaXRSYWNlS2V5LmgiCisjaW5jbHVkZSA8d3Rm
L0NvbmN1cnJlbnRQdHJIYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL1NoYXJlZFRhc2suaD4KKyNp
bmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBD
b25zZXJ2YXRpdmVSb290czsKK2NsYXNzIEhlYXA7CitjbGFzcyBIZWFwQ2VsbDsKK2NsYXNzIEpT
Q2VsbDsKK2NsYXNzIE1hcmtlZEJsb2NrOworY2xhc3MgTWFya2luZ0NvbnN0cmFpbnQ7CitjbGFz
cyBNYXJraW5nQ29uc3RyYWludFNvbHZlcjsKK2NsYXNzIFByZWNpc2VBbGxvY2F0aW9uOworY2xh
c3MgU2xvdFZpc2l0b3I7CitjbGFzcyBWTTsKK2NsYXNzIFZlcmlmaWVyU2xvdFZpc2l0b3I7Cit0
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjbGFzcyBXZWFrOwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlw
ZW5hbWUgVHJhaXRzPiBjbGFzcyBXcml0ZUJhcnJpZXJCYXNlOworCitjbGFzcyBBYnN0cmFjdFNs
b3RWaXNpdG9yIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShBYnN0cmFjdFNsb3RWaXNpdG9y
KTsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBjbGFzcyBDb250
ZXh0IHsKKyAgICBwdWJsaWM6CisgICAgICAgIENvbnRleHQoQWJzdHJhY3RTbG90VmlzaXRvciYs
IEhlYXBDZWxsKik7CisgICAgICAgIH5Db250ZXh0KCk7CisgICAgICAgIEhlYXBDZWxsKiBjZWxs
KCkgY29uc3QgeyByZXR1cm4gbV9jZWxsOyB9CisgICAgcHJpdmF0ZToKKyAgICAgICAgQWJzdHJh
Y3RTbG90VmlzaXRvciYgbV92aXNpdG9yOworICAgICAgICBIZWFwQ2VsbCogbV9jZWxsOworICAg
ICAgICBDb250ZXh0KiBtX3ByZXZpb3VzOworICAgIH07CisKKyAgICBjbGFzcyBTdXBwcmVzc0dD
VmVyaWZpZXJTY29wZSB7CisgICAgcHVibGljOgorICAgICAgICBTdXBwcmVzc0dDVmVyaWZpZXJT
Y29wZShBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorICAgICAgICAgICAgOiBtX3Zpc2l0
b3IodmlzaXRvcikKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKCFtX3Zpc2l0b3IubV9z
dXBwcmVzc1ZlcmlmaWVyKTsKKyAgICAgICAgICAgIG1fdmlzaXRvci5tX3N1cHByZXNzVmVyaWZp
ZXIgPSB0cnVlOworICAgICAgICB9CisgICAgICAgIH5TdXBwcmVzc0dDVmVyaWZpZXJTY29wZSgp
IHsgbV92aXNpdG9yLm1fc3VwcHJlc3NWZXJpZmllciA9IGZhbHNlOyB9CisgICAgcHJpdmF0ZToK
KyAgICAgICAgQWJzdHJhY3RTbG90VmlzaXRvciYgbV92aXNpdG9yOworICAgIH07CisKKyAgICBj
bGFzcyBEZWZhdWx0TWFya2luZ1Zpb2xhdGlvbkFzc2VydGlvblNjb3BlIHsKKyAgICBwdWJsaWM6
CisgICAgICAgIERlZmF1bHRNYXJraW5nVmlvbGF0aW9uQXNzZXJ0aW9uU2NvcGUoQWJzdHJhY3RT
bG90VmlzaXRvciYpIHsgfQorICAgIH07CisKKyAgICB2aXJ0dWFsIH5BYnN0cmFjdFNsb3RWaXNp
dG9yKCkgPSBkZWZhdWx0OworCisgICAgTWFya1N0YWNrQXJyYXkmIGNvbGxlY3Rvck1hcmtTdGFj
aygpIHsgcmV0dXJuIG1fY29sbGVjdG9yU3RhY2s7IH0KKyAgICBNYXJrU3RhY2tBcnJheSYgbXV0
YXRvck1hcmtTdGFjaygpIHsgcmV0dXJuIG1fbXV0YXRvclN0YWNrOyB9CisgICAgY29uc3QgTWFy
a1N0YWNrQXJyYXkmIGNvbGxlY3Rvck1hcmtTdGFjaygpIGNvbnN0IHsgcmV0dXJuIG1fY29sbGVj
dG9yU3RhY2s7IH0KKyAgICBjb25zdCBNYXJrU3RhY2tBcnJheSYgbXV0YXRvck1hcmtTdGFjaygp
IGNvbnN0IHsgcmV0dXJuIG1fbXV0YXRvclN0YWNrOyB9CisKKyAgICBib29sIGlzRW1wdHkoKSB7
IHJldHVybiBtX2NvbGxlY3RvclN0YWNrLmlzRW1wdHkoKSAmJiBtX211dGF0b3JTdGFjay5pc0Vt
cHR5KCk7IH0KKworICAgIFZNJiB2bSgpOworICAgIGNvbnN0IFZNJiB2bSgpIGNvbnN0OworICAg
IEhlYXAqIGhlYXAoKSBjb25zdDsKKworICAgIHZpcnR1YWwgdm9pZCBhcHBlbmQoY29uc3QgQ29u
c2VydmF0aXZlUm9vdHMmKSA9IDA7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFt
ZSBUcmFpdHM+IHZvaWQgYXBwZW5kKGNvbnN0IFdyaXRlQmFycmllckJhc2U8VCwgVHJhaXRzPiYp
OworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFRyYWl0cz4gdm9pZCBhcHBlbmRI
aWRkZW4oY29uc3QgV3JpdGVCYXJyaWVyQmFzZTxULCBUcmFpdHM+Jik7CisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgSXRlcmF0b3I+IHZvaWQgYXBwZW5kKEl0ZXJhdG9yIGJlZ2luICwgSXRlcmF0b3Ig
ZW5kKTsKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgYXBwZW5kVmFsdWVzKGNvbnN0IFdyaXRlQmFy
cmllckJhc2U8VW5rbm93biwgUmF3VmFsdWVUcmFpdHM8VW5rbm93bj4+Kiwgc2l6ZV90IGNvdW50
KTsKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgYXBwZW5kVmFsdWVzSGlkZGVuKGNvbnN0IFdyaXRl
QmFycmllckJhc2U8VW5rbm93biwgUmF3VmFsdWVUcmFpdHM8VW5rbm93bj4+Kiwgc2l6ZV90IGNv
dW50KTsKKworICAgIC8vIFRoZXNlIGRvbid0IHJlcXVpcmUgeW91IHRvIHByb3ZlIHRoYXQgeW91
IGhhdmUgYSBXcml0ZUJhcnJpZXI8Pi4gVGhhdCBtYWtlcyBzZW5zZQorICAgIC8vIGZvcjoKKyAg
ICAvLworICAgIC8vIC0gcm9vdHMuCisgICAgLy8gLSBzb3BoaXN0aWNhdGVkIGRhdGEgc3RydWN0
dXJlcyB0aGF0IGJhcnJpZXIgdGhyb3VnaCBvdGhlciBtZWFucyAobGlrZSBERkc6OlBsYW4gYW5k
CisgICAgLy8gICBmcmllbmRzKS4KKyAgICAvLworICAgIC8vIElmIHlvdSBhcmUgbm90IGEgcm9v
dCBhbmQgeW91IGRvbid0IGtub3cgd2hhdCBraW5kIG9mIGJhcnJpZXIgeW91IGhhdmUsIHRoZW4g
eW91CisgICAgLy8gc2hvdWxkbid0IGNhbGwgdGhlc2UgbWV0aG9kcy4KKyAgICBBTFdBWVNfSU5M
SU5FIHZvaWQgYXBwZW5kVW5iYXJyaWVyZWQoSlNWYWx1ZSk7CisgICAgQUxXQVlTX0lOTElORSB2
b2lkIGFwcGVuZFVuYmFycmllcmVkKEpTVmFsdWUqLCBzaXplX3QpOworICAgIHZpcnR1YWwgdm9p
ZCBhcHBlbmRVbmJhcnJpZXJlZChKU0NlbGwqKSA9IDA7CisKKyAgICBpbmxpbmUgYm9vbCBhZGRP
cGFxdWVSb290KHZvaWQqKTsgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSByb290IHdhcyBuZXcuCisg
ICAgaW5saW5lIGJvb2wgY29udGFpbnNPcGFxdWVSb290KHZvaWQqKSBjb25zdDsKKyAgICB2b2lk
IHNldElnbm9yZU5ld09wYXF1ZVJvb3RzKGJvb2wgdmFsdWUpIHsgbV9pZ25vcmVOZXdPcGFxdWVS
b290cyA9IHZhbHVlOyB9CisKKyAgICB2aXJ0dWFsIGJvb2wgaXNGaXJzdFZpc2l0KCkgY29uc3Qg
PSAwOworCisgICAgdmlydHVhbCBib29sIGlzTWFya2VkKGNvbnN0IHZvaWQqKSBjb25zdCA9IDA7
CisgICAgdmlydHVhbCBib29sIGlzTWFya2VkKE1hcmtlZEJsb2NrJiwgSGVhcENlbGwqKSBjb25z
dCA9IDA7CisgICAgdmlydHVhbCBib29sIGlzTWFya2VkKFByZWNpc2VBbGxvY2F0aW9uJiwgSGVh
cENlbGwqKSBjb25zdCA9IDA7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIHZvaWQg
YXBwZW5kKGNvbnN0IFdlYWs8VD4mKTsKKworICAgIEFMV0FZU19JTkxJTkUgdm9pZCBhcHBlbmRI
aWRkZW5VbmJhcnJpZXJlZChKU1ZhbHVlKTsKKyAgICB2aXJ0dWFsIHZvaWQgYXBwZW5kSGlkZGVu
VW5iYXJyaWVyZWQoSlNDZWxsKikgPSAwOworCisgICAgc2l6ZV90IHZpc2l0Q291bnQoKSBjb25z
dCB7IHJldHVybiBtX3Zpc2l0Q291bnQ7IH0KKworICAgIHZvaWQgYWRkVG9WaXNpdENvdW50KHNp
emVfdCB2YWx1ZSkgeyBtX3Zpc2l0Q291bnQgKz0gdmFsdWU7IH0KKworICAgIHZpcnR1YWwgdm9p
ZCBhZGRQYXJhbGxlbENvbnN0cmFpbnRUYXNrKFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoQWJzdHJh
Y3RTbG90VmlzaXRvciYpPj4pID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgYWRkUGFyYWxsZWxDb25z
dHJhaW50VGFzayhSZWZQdHI8U2hhcmVkVGFzazx2b2lkKFNsb3RWaXNpdG9yJik+PikgPSAwOwor
CisgICAgdmlydHVhbCB2b2lkIG1hcmtBdXhpbGlhcnkoY29uc3Qgdm9pZCogYmFzZSkgPSAwOwor
CisgICAgdmlydHVhbCB2b2lkIHJlcG9ydEV4dHJhTWVtb3J5VmlzaXRlZChzaXplX3QpID0gMDsK
KyNpZiBFTkFCTEUoUkVTT1VSQ0VfVVNBR0UpCisgICAgdmlydHVhbCB2b2lkIHJlcG9ydEV4dGVy
bmFsTWVtb3J5VmlzaXRlZChzaXplX3QpID0gMDsKKyNlbmRpZgorCisgICAgdmlydHVhbCB2b2lk
IGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdCA9IDA7CisKKyAgICBSb290TWFya1JlYXNvbiByb290
TWFya1JlYXNvbigpIGNvbnN0IHsgcmV0dXJuIG1fcm9vdE1hcmtSZWFzb247IH0KKyAgICB2b2lk
IHNldFJvb3RNYXJrUmVhc29uKFJvb3RNYXJrUmVhc29uIHJlYXNvbikgeyBtX3Jvb3RNYXJrUmVh
c29uID0gcmVhc29uOyB9CisKKyAgICB2aXJ0dWFsIGJvb2wgbXV0YXRvcklzU3RvcHBlZCgpIGNv
bnN0ID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBkaWRSYWNlKGNvbnN0IFZpc2l0UmFjZUtleSYp
ID0gMDsKKyAgICB2b2lkIGRpZFJhY2UoSlNDZWxsKiBjZWxsLCBjb25zdCBjaGFyKiByZWFzb24p
IHsgZGlkUmFjZShWaXNpdFJhY2VLZXkoY2VsbCwgcmVhc29uKSk7IH0KKworICAgIHZpcnR1YWwg
dm9pZCB2aXNpdEFzQ29uc3RyYWludChjb25zdCBKU0NlbGwqKSA9IDA7CisKKyAgICBjb25zdCBj
aGFyKiBjb2RlTmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29kZU5hbWUuZGF0YSgpOyB9CisKK3By
b3RlY3RlZDoKKyAgICBpbmxpbmUgQWJzdHJhY3RTbG90VmlzaXRvcihIZWFwJiwgQ1N0cmluZyBj
b2RlTmFtZSwgQ29uY3VycmVudFB0ckhhc2hTZXQmKTsKKworICAgIEhlYXBDZWxsKiBwYXJlbnRD
ZWxsKCkgY29uc3Q7CisgICAgdm9pZCByZXNldCgpOworCisgICAgTWFya1N0YWNrQXJyYXkgbV9j
b2xsZWN0b3JTdGFjazsKKyAgICBNYXJrU3RhY2tBcnJheSBtX211dGF0b3JTdGFjazsKKworICAg
IHNpemVfdCBtX3Zpc2l0Q291bnQgeyAwIH07CisKKyAgICBIZWFwJiBtX2hlYXA7CisgICAgQ29u
dGV4dCogbV9jb250ZXh0IHsgbnVsbHB0ciB9OworICAgIENTdHJpbmcgbV9jb2RlTmFtZTsKKwor
ICAgIE1hcmtpbmdDb25zdHJhaW50KiBtX2N1cnJlbnRDb25zdHJhaW50IHsgbnVsbHB0ciB9Owor
ICAgIE1hcmtpbmdDb25zdHJhaW50U29sdmVyKiBtX2N1cnJlbnRTb2x2ZXIgeyBudWxscHRyIH07
CisgICAgQ29uY3VycmVudFB0ckhhc2hTZXQmIG1fb3BhcXVlUm9vdHM7CisKKyAgICBSb290TWFy
a1JlYXNvbiBtX3Jvb3RNYXJrUmVhc29uIHsgUm9vdE1hcmtSZWFzb246Ok5vbmUgfTsKKyAgICBi
b29sIG1fc3VwcHJlc3NWZXJpZmllciB7IGZhbHNlIH07CisgICAgYm9vbCBtX2lnbm9yZU5ld09w
YXF1ZVJvb3RzIHsgZmFsc2UgfTsgLy8gVXNlZnVsIGFzIGEgZGVidWdnaW5nIG1vZGUuCisKKyAg
ICBmcmllbmQgY2xhc3MgTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXI7Cit9OworCitjbGFzcyBTZXRS
b290TWFya1JlYXNvblNjb3BlIHsKK3B1YmxpYzoKKyAgICBTZXRSb290TWFya1JlYXNvblNjb3Bl
KEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIFJvb3RNYXJrUmVhc29uIHJlYXNvbikKKyAg
ICAgICAgOiBtX3Zpc2l0b3IodmlzaXRvcikKKyAgICAgICAgLCBtX3ByZXZpb3VzUmVhc29uKHZp
c2l0b3Iucm9vdE1hcmtSZWFzb24oKSkKKyAgICB7CisgICAgICAgIG1fdmlzaXRvci5zZXRSb290
TWFya1JlYXNvbihyZWFzb24pOworICAgIH0KKworICAgIH5TZXRSb290TWFya1JlYXNvblNjb3Bl
KCkKKyAgICB7CisgICAgICAgIG1fdmlzaXRvci5zZXRSb290TWFya1JlYXNvbihtX3ByZXZpb3Vz
UmVhc29uKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgQWJzdHJhY3RTbG90VmlzaXRvciYgbV92
aXNpdG9yOworICAgIFJvb3RNYXJrUmVhc29uIG1fcHJldmlvdXNSZWFzb247Cit9OworCit9IC8v
IG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Fic3RyYWN0
U2xvdFZpc2l0b3JJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvQWJzdHJhY3RTbG90VmlzaXRvcklubGluZXMuaAkobm9uZXhpc3RlbnQpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9BYnN0cmFjdFNsb3RWaXNpdG9ySW5saW5lcy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMTU0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJBYnN0cmFjdFNsb3RW
aXNpdG9yLmgiCisjaW5jbHVkZSAiSGVhcC5oIgorI2luY2x1ZGUgIldlYWtJbmxpbmVzLmgiCisj
aW5jbHVkZSAiV3JpdGVCYXJyaWVyLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitpbmxpbmUgQWJz
dHJhY3RTbG90VmlzaXRvcjo6Q29udGV4dDo6Q29udGV4dChBYnN0cmFjdFNsb3RWaXNpdG9yJiB2
aXNpdG9yLCBIZWFwQ2VsbCogY2VsbCkKKyAgICA6IG1fdmlzaXRvcih2aXNpdG9yKQorICAgICwg
bV9jZWxsKGNlbGwpCit7CisgICAgbV9wcmV2aW91cyA9IG1fdmlzaXRvci5tX2NvbnRleHQ7Cisg
ICAgbV92aXNpdG9yLm1fY29udGV4dCA9IHRoaXM7Cit9CisKK2lubGluZSBBYnN0cmFjdFNsb3RW
aXNpdG9yOjpDb250ZXh0Ojp+Q29udGV4dCgpCit7CisgICAgbV92aXNpdG9yLm1fY29udGV4dCA9
IG1fcHJldmlvdXM7Cit9CisKK2lubGluZSBBYnN0cmFjdFNsb3RWaXNpdG9yOjpBYnN0cmFjdFNs
b3RWaXNpdG9yKEhlYXAmIGhlYXAsIENTdHJpbmcgY29kZU5hbWUsIENvbmN1cnJlbnRQdHJIYXNo
U2V0JiBvcGFxdWVSb290cykKKyAgICA6IG1faGVhcChoZWFwKQorICAgICwgbV9jb2RlTmFtZShj
b2RlTmFtZSkKKyAgICAsIG1fb3BhcXVlUm9vdHMob3BhcXVlUm9vdHMpCit7Cit9CisKK2lubGlu
ZSBIZWFwKiBBYnN0cmFjdFNsb3RWaXNpdG9yOjpoZWFwKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
Jm1faGVhcDsKK30KKworaW5saW5lIFZNJiBBYnN0cmFjdFNsb3RWaXNpdG9yOjp2bSgpCit7Cisg
ICAgcmV0dXJuIG1faGVhcC52bSgpOworfQorCitpbmxpbmUgY29uc3QgVk0mIEFic3RyYWN0U2xv
dFZpc2l0b3I6OnZtKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9oZWFwLnZtKCk7Cit9CisKK2lu
bGluZSBib29sIEFic3RyYWN0U2xvdFZpc2l0b3I6OmFkZE9wYXF1ZVJvb3Qodm9pZCogcHRyKQor
eworICAgIGlmICghcHRyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG1faWdub3Jl
TmV3T3BhcXVlUm9vdHMpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIW1fb3BhcXVl
Um9vdHMuYWRkKHB0cikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBtX3Zpc2l0Q291bnQr
KzsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworaW5saW5lIGJvb2wgQWJzdHJhY3RTbG90VmlzaXRv
cjo6Y29udGFpbnNPcGFxdWVSb290KHZvaWQqIHB0cikgY29uc3QKK3sKKyAgICByZXR1cm4gbV9v
cGFxdWVSb290cy5jb250YWlucyhwdHIpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorQUxX
QVlTX0lOTElORSB2b2lkIEFic3RyYWN0U2xvdFZpc2l0b3I6OmFwcGVuZChjb25zdCBXZWFrPFQ+
JiB3ZWFrKQoreworICAgIGFwcGVuZFVuYmFycmllcmVkKHdlYWsuZ2V0KCkpOworfQorCit0ZW1w
bGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBUcmFpdHM+CitBTFdBWVNfSU5MSU5FIHZvaWQgQWJz
dHJhY3RTbG90VmlzaXRvcjo6YXBwZW5kKGNvbnN0IFdyaXRlQmFycmllckJhc2U8VCwgVHJhaXRz
PiYgc2xvdCkKK3sKKyAgICBhcHBlbmRVbmJhcnJpZXJlZChzbG90LmdldCgpKTsKK30KKwordGVt
cGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVHJhaXRzPgorQUxXQVlTX0lOTElORSB2b2lkIEFi
c3RyYWN0U2xvdFZpc2l0b3I6OmFwcGVuZEhpZGRlbihjb25zdCBXcml0ZUJhcnJpZXJCYXNlPFQs
IFRyYWl0cz4mIHNsb3QpCit7CisgICAgYXBwZW5kSGlkZGVuVW5iYXJyaWVyZWQoc2xvdC5nZXQo
KSk7Cit9CisKK0FMV0FZU19JTkxJTkUgdm9pZCBBYnN0cmFjdFNsb3RWaXNpdG9yOjphcHBlbmRI
aWRkZW5VbmJhcnJpZXJlZChKU1ZhbHVlIHZhbHVlKQoreworICAgIGlmICh2YWx1ZS5pc0NlbGwo
KSkKKyAgICAgICAgYXBwZW5kSGlkZGVuVW5iYXJyaWVyZWQodmFsdWUuYXNDZWxsKCkpOworfQor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBJdGVyYXRvcj4KK0FMV0FZU19JTkxJTkUgdm9pZCBBYnN0cmFj
dFNsb3RWaXNpdG9yOjphcHBlbmQoSXRlcmF0b3IgYmVnaW4sIEl0ZXJhdG9yIGVuZCkKK3sKKyAg
ICBmb3IgKGF1dG8gaXQgPSBiZWdpbjsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICBhcHBlbmQo
Kml0KTsKK30KKworQUxXQVlTX0lOTElORSB2b2lkIEFic3RyYWN0U2xvdFZpc2l0b3I6OmFwcGVu
ZFZhbHVlcyhjb25zdCBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+KiBiYXJyaWVycywgc2l6ZV90
IGNvdW50KQoreworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY291bnQ7ICsraSkKKyAgICAg
ICAgYXBwZW5kKGJhcnJpZXJzW2ldKTsKK30KKworQUxXQVlTX0lOTElORSB2b2lkIEFic3RyYWN0
U2xvdFZpc2l0b3I6OmFwcGVuZFZhbHVlc0hpZGRlbihjb25zdCBXcml0ZUJhcnJpZXJCYXNlPFVu
a25vd24+KiBiYXJyaWVycywgc2l6ZV90IGNvdW50KQoreworICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgY291bnQ7ICsraSkKKyAgICAgICAgYXBwZW5kSGlkZGVuKGJhcnJpZXJzW2ldKTsKK30K
KworQUxXQVlTX0lOTElORSB2b2lkIEFic3RyYWN0U2xvdFZpc2l0b3I6OmFwcGVuZFVuYmFycmll
cmVkKEpTVmFsdWUgdmFsdWUpCit7CisgICAgaWYgKHZhbHVlLmlzQ2VsbCgpKQorICAgICAgICBh
cHBlbmRVbmJhcnJpZXJlZCh2YWx1ZS5hc0NlbGwoKSk7Cit9CisKK0FMV0FZU19JTkxJTkUgdm9p
ZCBBYnN0cmFjdFNsb3RWaXNpdG9yOjphcHBlbmRVbmJhcnJpZXJlZChKU1ZhbHVlKiBzbG90LCBz
aXplX3QgY291bnQpCit7CisgICAgZm9yIChzaXplX3QgaSA9IGNvdW50OyBpLS07KQorICAgICAg
ICBhcHBlbmRVbmJhcnJpZXJlZChzbG90W2ldKTsKK30KKworQUxXQVlTX0lOTElORSBIZWFwQ2Vs
bCogQWJzdHJhY3RTbG90VmlzaXRvcjo6cGFyZW50Q2VsbCgpIGNvbnN0Cit7CisgICAgaWYgKCFt
X2NvbnRleHQpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiBtX2NvbnRleHQt
PmNlbGwoKTsKK30KKworQUxXQVlTX0lOTElORSB2b2lkIEFic3RyYWN0U2xvdFZpc2l0b3I6OnJl
c2V0KCkKK3sKKyAgICBtX3Zpc2l0Q291bnQgPSAwOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hhbmRsZVNldC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGFuZGxlU2V0LmNwcAkocmV2aXNpb24g
MjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGFuZGxlU2V0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAx
OSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEt
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTU2LDcgKzU2LDggQEAgdm9pZCBIYW5kbGVTZXQ6Omdyb3coKQogICAg
IH0KIH0KIAotdm9pZCBIYW5kbGVTZXQ6OnZpc2l0U3Ryb25nSGFuZGxlcyhTbG90VmlzaXRvciYg
dmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEhhbmRsZVNldDo6dmlz
aXRTdHJvbmdIYW5kbGVzKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgTm9kZSogZW5kID0gbV9z
dHJvbmdMaXN0LmVuZCgpOwogICAgIGZvciAoTm9kZSogbm9kZSA9IG1fc3Ryb25nTGlzdC5iZWdp
bigpOyBub2RlICE9IGVuZDsgbm9kZSA9IG5vZGUtPm5leHQoKSkgewpAQCAtNjcsNiArNjgsOSBA
QCB2b2lkIEhhbmRsZVNldDo6dmlzaXRTdHJvbmdIYW5kbGVzKFNsb3RWCiAgICAgfQogfQogCit0
ZW1wbGF0ZSB2b2lkIEhhbmRsZVNldDo6dmlzaXRTdHJvbmdIYW5kbGVzKEFic3RyYWN0U2xvdFZp
c2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSGFuZGxlU2V0Ojp2aXNpdFN0cm9uZ0hhbmRsZXMoU2xv
dFZpc2l0b3ImKTsKKwogdm9pZCBIYW5kbGVTZXQ6OndyaXRlQmFycmllcihIYW5kbGVTbG90IHNs
b3QsIGNvbnN0IEpTVmFsdWUmIHZhbHVlKQogewogICAgIGlmICghdmFsdWUgPT0gISpzbG90ICYm
IHNsb3QtPmlzQ2VsbCgpID09IHZhbHVlLmlzQ2VsbCgpKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvSGFuZGxlU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvSGFuZGxlU2V0LmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0hhbmRsZVNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMS0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzgsNyArMzgsNiBA
QCBuYW1lc3BhY2UgSlNDIHsKIGNsYXNzIEhhbmRsZVNldDsKIGNsYXNzIFZNOwogY2xhc3MgSlNW
YWx1ZTsKLWNsYXNzIFNsb3RWaXNpdG9yOwogCiBjbGFzcyBIYW5kbGVOb2RlIHsKIHB1YmxpYzoK
QEAgLTczLDcgKzcyLDcgQEAgcHVibGljOgogICAgIEhhbmRsZVNsb3QgYWxsb2NhdGUoKTsKICAg
ICB2b2lkIGRlYWxsb2NhdGUoSGFuZGxlU2xvdCk7CiAKLSAgICB2b2lkIHZpc2l0U3Ryb25nSGFu
ZGxlcyhTbG90VmlzaXRvciYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQg
dmlzaXRTdHJvbmdIYW5kbGVzKFZpc2l0b3ImKTsKIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZv
aWQgd3JpdGVCYXJyaWVyKEhhbmRsZVNsb3QsIGNvbnN0IEpTVmFsdWUmKTsKIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Miw2ICs3Miw3
IEBACiAjaW5jbHVkZSAiVHlwZVByb2ZpbGVyLmgiCiAjaW5jbHVkZSAiVHlwZVByb2ZpbGVyTG9n
LmgiCiAjaW5jbHVkZSAiVk0uaCIKKyNpbmNsdWRlICJWZXJpZmllclNsb3RWaXNpdG9ySW5saW5l
cy5oIgogI2luY2x1ZGUgIldlYWtNYXBJbXBsSW5saW5lcy5oIgogI2luY2x1ZGUgIldlYWtTZXRJ
bmxpbmVzLmgiCiAjaW5jbHVkZSA8YWxnb3JpdGhtPgpAQCAtNjQzLDE5ICs2NDQsMTkgQEAgdm9p
ZCBIZWFwOjpjb21wbGV0ZUFsbEpJVFBsYW5zKCkKICAgICBERkc6OmNvbXBsZXRlQWxsUGxhbnNG
b3JWTShtX3ZtKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KLXZvaWQgSGVhcDo6aXRl
cmF0ZUV4ZWN1dGluZ0FuZENvbXBpbGluZ0NvZGVCbG9ja3MoY29uc3QgRnVuYyYgZnVuYykKK3Rl
bXBsYXRlPHR5cGVuYW1lIEZ1bmMsIHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEhlYXA6Oml0ZXJh
dGVFeGVjdXRpbmdBbmRDb21waWxpbmdDb2RlQmxvY2tzKFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0
IEZ1bmMmIGZ1bmMpCiB7CiAgICAgbV9jb2RlQmxvY2tzLT5pdGVyYXRlQ3VycmVudGx5RXhlY3V0
aW5nKGZ1bmMpOwogICAgIGlmIChPcHRpb25zOjp1c2VKSVQoKSkKLSAgICAgICAgREZHOjppdGVy
YXRlQ29kZUJsb2Nrc0ZvckdDKG1fdm0sIGZ1bmMpOworICAgICAgICBERkc6Oml0ZXJhdGVDb2Rl
QmxvY2tzRm9yR0ModmlzaXRvciwgbV92bSwgZnVuYyk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1l
IEZ1bmM+Ci12b2lkIEhlYXA6Oml0ZXJhdGVFeGVjdXRpbmdBbmRDb21waWxpbmdDb2RlQmxvY2tz
V2l0aG91dEhvbGRpbmdMb2Nrcyhjb25zdCBGdW5jJiBmdW5jKQordGVtcGxhdGU8dHlwZW5hbWUg
RnVuYywgdHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSGVhcDo6aXRlcmF0ZUV4ZWN1dGluZ0FuZENv
bXBpbGluZ0NvZGVCbG9ja3NXaXRob3V0SG9sZGluZ0xvY2tzKFZpc2l0b3ImIHZpc2l0b3IsIGNv
bnN0IEZ1bmMmIGZ1bmMpCiB7CiAgICAgVmVjdG9yPENvZGVCbG9jayosIDI1Nj4gY29kZUJsb2Nr
czsKLSAgICBpdGVyYXRlRXhlY3V0aW5nQW5kQ29tcGlsaW5nQ29kZUJsb2NrcygKKyAgICBpdGVy
YXRlRXhlY3V0aW5nQW5kQ29tcGlsaW5nQ29kZUJsb2Nrcyh2aXNpdG9yLAogICAgICAgICBbJl0g
KENvZGVCbG9jayogY29kZUJsb2NrKSB7CiAgICAgICAgICAgICBjb2RlQmxvY2tzLmFwcGVuZChj
b2RlQmxvY2spOwogICAgICAgICB9KTsKQEAgLTczMywxNCArNzM0LDYgQEAgdm9pZCBIZWFwOjpy
ZW1vdmVEZWFkQ29tcGlsZXJXb3JrbGlzdEVudAogI2VuZGlmCiB9CiAKLWJvb2wgSGVhcDo6aXNB
bmFseXppbmdIZWFwKCkgY29uc3QKLXsKLSAgICBIZWFwUHJvZmlsZXIqIGhlYXBQcm9maWxlciA9
IG1fdm0uaGVhcFByb2ZpbGVyKCk7Ci0gICAgaWYgKFVOTElLRUxZKGhlYXBQcm9maWxlcikpCi0g
ICAgICAgIHJldHVybiBoZWFwUHJvZmlsZXItPmFjdGl2ZUhlYXBBbmFseXplcigpOwotICAgIHJl
dHVybiBmYWxzZTsKLX0KLQogc3RydWN0IEdhdGhlckV4dHJhSGVhcERhdGEgOiBNYXJrZWRCbG9j
azo6Q291bnRGdW5jdG9yIHsKICAgICBHYXRoZXJFeHRyYUhlYXBEYXRhKFZNJiB2bSwgSGVhcEFu
YWx5emVyJiBhbmFseXplcikKICAgICAgICAgOiBtX3ZtKHZtKQpAQCAtMTQ4NSwxNCArMTQ3OCwy
MSBAQCBORVZFUl9JTkxJTkUgYm9vbCBIZWFwOjpydW5FbmRQaGFzZShHQ0NvCiAgICAgfQogICAg
IG1faGVscGVyQ2xpZW50LmZpbmlzaCgpOwogICAgIAotICAgIGl0ZXJhdGVFeGVjdXRpbmdBbmRD
b21waWxpbmdDb2RlQmxvY2tzKAorICAgIEFTU0VSVChtX211dGF0b3JNYXJrU3RhY2stPmlzRW1w
dHkoKSk7CisgICAgQVNTRVJUKG1fcmFjZU1hcmtTdGFjay0+aXNFbXB0eSgpKTsKKworICAgIFNs
b3RWaXNpdG9yJiB2aXNpdG9yID0gKm1fY29sbGVjdG9yU2xvdFZpc2l0b3I7CisgICAgaXRlcmF0
ZUV4ZWN1dGluZ0FuZENvbXBpbGluZ0NvZGVCbG9ja3ModmlzaXRvciwKICAgICAgICAgWyZdIChD
b2RlQmxvY2sqIGNvZGVCbG9jaykgewogICAgICAgICAgICAgd3JpdGVCYXJyaWVyKGNvZGVCbG9j
ayk7CiAgICAgICAgIH0pOwotICAgICAgICAKKwogICAgIHVwZGF0ZU9iamVjdENvdW50cygpOwog
ICAgIGVuZE1hcmtpbmcoKTsKIAorICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjp2ZXJpZnlHQygp
KSkKKyAgICAgICAgdmVyaWZ5R0MoKTsKKwogICAgIGlmIChVTkxJS0VMWShtX3ZlcmlmaWVyKSkg
ewogICAgICAgICBtX3ZlcmlmaWVyLT5nYXRoZXJMaXZlQ2VsbHMoSGVhcFZlcmlmaWVyOjpQaGFz
ZTo6QWZ0ZXJNYXJraW5nKTsKICAgICAgICAgbV92ZXJpZmllci0+dmVyaWZ5KEhlYXBWZXJpZmll
cjo6UGhhc2U6OkFmdGVyTWFya2luZyk7CkBAIC0yMTcwLDYgKzIxNzAsMTIgQEAgdm9pZCBIZWFw
OjpzdXNwZW5kQ29tcGlsZXJUaHJlYWRzKCkKIAogdm9pZCBIZWFwOjp3aWxsU3RhcnRDb2xsZWN0
aW9uKCkKIHsKKyAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6dmVyaWZ5R0MoKSkpIHsKKyAgICAg
ICAgbV92ZXJpZmllclNsb3RWaXNpdG9yID0gbWFrZVVuaXF1ZTxWZXJpZmllclNsb3RWaXNpdG9y
PigqdGhpcyk7CisgICAgICAgIEFTU0VSVCghbV9pc01hcmtpbmdGb3JHQ1ZlcmlmaWVyKTsKKy8v
ICAgICAgICBSRUxFQVNFX0FTU0VSVCghbV9pc01hcmtpbmdGb3JHQ1ZlcmlmaWVyKTsgLy8gbWxh
bSBURVNUIG9ubHkKKyAgICB9CisKICAgICBkYXRhTG9nSWYoT3B0aW9uczo6bG9nR0MoKSwgIj0+
ICIpOwogICAgIAogICAgIGlmIChzaG91bGREb0Z1bGxDb2xsZWN0aW9uKCkpIHsKQEAgLTI2OTcs
MTMgKzI3MDMsNDggQEAgdm9pZCBIZWFwOjpkaWRGcmVlQmxvY2soc2l6ZV90IGNhcGFjaXR5KQog
I2VuZGlmCiB9CiAKKy8vIFRoZSBmb2xsb3dpbmcgYXJlIHB1bGxlZCBvdXQgb2YgdGhlIGJvZHkg
b2YgSGVhcDo6YWRkQ29yZUNvbnN0cmFpbnRzKCkgb25seQorLy8gYmVjYXVzZSB0aGUgV2luQ2Fp
cm8gcG9ydCBpcyBub3QgYWJsZSB0byBoYW5kbGUgI2lmJ3MgaW5zaWRlIHRoZSBib2R5IG9mIHRo
ZQorLy8gbGFtYmRhIHBhc3NlZCBpbnRvIHRoZSBNQUtFX01BUktJTkdfQ09OU1RSQUlOVF9FWEVD
VVRPUl9QQUlSIG1hY3JvLiBUaGlzIHdvcmtzCisvLyBhcm91bmQgdGhhdCBpc3N1ZS4KKworI2lm
IEpTQ19PQkpDX0FQSV9FTkFCTEVECitjb25zdGV4cHIgYm9vbCBvYmpjQVBJRW5hYmxlZCA9IHRy
dWU7CisjZWxzZQorY29uc3RleHByIGJvb2wgb2JqY0FQSUVuYWJsZWQgPSBmYWxzZTsKK3N0YXRp
YyBVTlVTRURfRlVOQ1RJT04gdm9pZCBzY2FuRXh0ZXJuYWxSZW1lbWJlcmVkU2V0KFZNJiwgQWJz
dHJhY3RTbG90VmlzaXRvciYpIHsgfQorI2VuZGlmCisKKyNpZiBFTkFCTEUoU0FNUExJTkdfUFJP
RklMRVIpCitjb25zdGV4cHIgYm9vbCBzYW1wbGluZ1Byb2ZpbGVyU3VwcG9ydGVkID0gdHJ1ZTsK
K3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+CitzdGF0aWMgaW5saW5lIHZvaWQgc2VydmljZVNh
bXBsaW5nUHJvZmlsZXIoVk0mIHZtLCBWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIGlmIChTYW1w
bGluZ1Byb2ZpbGVyKiBzYW1wbGluZ1Byb2ZpbGVyID0gdm0uc2FtcGxpbmdQcm9maWxlcigpKSB7
CisgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2soc2FtcGxpbmdQcm9maWxlci0+Z2V0TG9j
aygpKTsKKyAgICAgICAgc2FtcGxpbmdQcm9maWxlci0+cHJvY2Vzc1VudmVyaWZpZWRTdGFja1Ry
YWNlcyhsb2NrZXIpOworICAgICAgICBzYW1wbGluZ1Byb2ZpbGVyLT52aXNpdCh2aXNpdG9yKTsK
KyAgICAgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkgPT0gR0NMb2dnaW5nOjpWZXJib3NlKQorICAg
ICAgICAgICAgZGF0YUxvZygiU2FtcGxpbmcgUHJvZmlsZXIgZGF0YTpcbiIsIHZpc2l0b3IpOwor
ICAgIH0KK307CisjZWxzZQorY29uc3RleHByIGJvb2wgc2FtcGxpbmdQcm9maWxlclN1cHBvcnRl
ZCA9IGZhbHNlOworc3RhdGljIFVOVVNFRF9GVU5DVElPTiB2b2lkIHNlcnZpY2VTYW1wbGluZ1By
b2ZpbGVyKFZNJiwgQWJzdHJhY3RTbG90VmlzaXRvciYpIHsgfTsKKyNlbmRpZgorCiB2b2lkIEhl
YXA6OmFkZENvcmVDb25zdHJhaW50cygpCiB7CiAgICAgbV9jb25zdHJhaW50U2V0LT5hZGQoCiAg
ICAgICAgICJDcyIsICJDb25zZXJ2YXRpdmUgU2NhbiIsCi0gICAgICAgIFt0aGlzLCBsYXN0VmVy
c2lvbiA9IHN0YXRpY19jYXN0PHVpbnQ2NF90PigwKV0gKFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBt
dXRhYmxlIHsKKyAgICAgICAgTUFLRV9NQVJLSU5HX0NPTlNUUkFJTlRfRVhFQ1VUT1JfUEFJUigo
W3RoaXMsIGxhc3RWZXJzaW9uID0gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KDApXSAoYXV0byYgdmlz
aXRvcikgbXV0YWJsZSB7CiAgICAgICAgICAgICBib29sIHNob3VsZE5vdFByb2R1Y2VXb3JrID0g
bGFzdFZlcnNpb24gPT0gbV9waGFzZVZlcnNpb247Ci0gICAgICAgICAgICBpZiAoc2hvdWxkTm90
UHJvZHVjZVdvcmspCisKKyAgICAgICAgICAgIC8vIEZvciB0aGUgR0MgVmVyZmllciwgd2Ugd291
bGQgbGlrZSB0byB1c2UgdGhlIGlkZW50aWNhbCBzZXQgb2YgY29uc2VydmF0aXZlIHJvb3RzCisg
ICAgICAgICAgICAvLyBhcyB0aGUgcmVhbCBHQy4gT3RoZXJ3aXNlLCB0aGUgR0MgdmVyaWZpZXIg
bWF5IHJlcG9ydCBmYWxzZSBuZWdhdGl2ZXMgZHVlIHRvCisgICAgICAgICAgICAvLyB2YXJpYXRp
b25zIGluIHN0YWNrIHZhbHVlcy4gRm9yIHRoaXMgc2FtZSByZWFzb24sIHdlIHdpbGwgc2tpcCB0
aGlzIGNvbnN0cmFpbnQKKyAgICAgICAgICAgIC8vIHdoZW4gd2UncmUgcnVubmluZyB0aGUgR0Mg
dmVyaWZpY2F0aW9uIGluIHRoZSBFbmQgcGhhc2UuCisgICAgICAgICAgICBpZiAoc2hvdWxkTm90
UHJvZHVjZVdvcmsgfHwgbV9pc01hcmtpbmdGb3JHQ1ZlcmlmaWVyKQogICAgICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgICAgIAogICAgICAgICAgICAgVGltaW5nU2NvcGUgcHJlQ29udmVy
Z2VuY2VUaW1pbmdTY29wZSgqdGhpcywgIkNvbnN0cmFpbnQ6IGNvbnNlcnZhdGl2ZSBzY2FuIik7
CkBAIC0yNzIwLDI0ICsyNzYxLDMxIEBAIHZvaWQgSGVhcDo6YWRkQ29yZUNvbnN0cmFpbnRzKCkK
IAogICAgICAgICAgICAgICAgIFNldFJvb3RNYXJrUmVhc29uU2NvcGUgcm9vdFNjb3BlKHZpc2l0
b3IsIFJvb3RNYXJrUmVhc29uOjpDb25zZXJ2YXRpdmVTY2FuKTsKICAgICAgICAgICAgICAgICB2
aXNpdG9yLmFwcGVuZChjb25zZXJ2YXRpdmVSb290cyk7CisgICAgICAgICAgICAgICAgaWYgKFVO
TElLRUxZKG1fdmVyaWZpZXJTbG90VmlzaXRvcikpCisgICAgICAgICAgICAgICAgICAgIG1fdmVy
aWZpZXJTbG90VmlzaXRvci0+YXBwZW5kKGNvbnNlcnZhdGl2ZVJvb3RzKTsKICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIGlmIChPcHRpb25zOjp1c2VKSVQoKSkgewogICAgICAgICAgICAgICAg
IC8vIEpJVFN0dWJSb3V0aW5lcyBtdXN0IGJlIHZpc2l0ZWQgYWZ0ZXIgc2Nhbm5pbmcgQ29uc2Vy
dmF0aXZlUm9vdHMgc2luY2UgSklUU3R1YlJvdXRpbmVzIGRlcGVuZCBvbiB0aGUgaG9vayBleGVj
dXRlZCBkdXJpbmcgZ2F0aGVyaW5nIENvbnNlcnZhdGl2ZVJvb3RzLgogICAgICAgICAgICAgICAg
IFNldFJvb3RNYXJrUmVhc29uU2NvcGUgcm9vdFNjb3BlKHZpc2l0b3IsIFJvb3RNYXJrUmVhc29u
OjpKSVRTdHViUm91dGluZXMpOwogICAgICAgICAgICAgICAgIG1faml0U3R1YlJvdXRpbmVzLT50
cmFjZU1hcmtlZFN0dWJSb3V0aW5lcyh2aXNpdG9yKTsKKyAgICAgICAgICAgICAgICBpZiAoVU5M
SUtFTFkobV92ZXJpZmllclNsb3RWaXNpdG9yKSkgeworICAgICAgICAgICAgICAgICAgICAvLyBJ
dCdzIGltcG9ydGFudCB0byBjYXN0IG1fdmVyaWZpZXJTbG90VmlzaXRvciB0byBhbiBBYnN0cmFj
dFNsb3RWaXNpdG9yIGhlcmUKKyAgICAgICAgICAgICAgICAgICAgLy8gc28gdGhhdCB3ZSdsbCBj
YWxsIHRoZSBBYnN0cmFjdFNsb3RWaXNpdG9yIHZlcnNpb24gb2YgdHJhY2VNYXJrZWRTdHViUm91
dGluZXMoKS4KKyAgICAgICAgICAgICAgICAgICAgQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRv
ciA9ICptX3ZlcmlmaWVyU2xvdFZpc2l0b3I7CisgICAgICAgICAgICAgICAgICAgIG1faml0U3R1
YlJvdXRpbmVzLT50cmFjZU1hcmtlZFN0dWJSb3V0aW5lcyh2aXNpdG9yKTsKKyAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGxhc3RWZXJz
aW9uID0gbV9waGFzZVZlcnNpb247Ci0gICAgICAgIH0sCisgICAgICAgIH0pKSwKICAgICAgICAg
Q29uc3RyYWludFZvbGF0aWxpdHk6OkdyZXllZEJ5RXhlY3V0aW9uKTsKICAgICAKICAgICBtX2Nv
bnN0cmFpbnRTZXQtPmFkZCgKICAgICAgICAgIk1zciIsICJNaXNjIFNtYWxsIFJvb3RzIiwKLSAg
ICAgICAgW3RoaXNdIChTbG90VmlzaXRvciYgdmlzaXRvcikgeworICAgICAgICBNQUtFX01BUktJ
TkdfQ09OU1RSQUlOVF9FWEVDVVRPUl9QQUlSKChbdGhpc10gKGF1dG8mIHZpc2l0b3IpIHsKKyAg
ICAgICAgICAgIGlmIGNvbnN0ZXhwciAob2JqY0FQSUVuYWJsZWQpCisgICAgICAgICAgICAgICAg
c2NhbkV4dGVybmFsUmVtZW1iZXJlZFNldChtX3ZtLCB2aXNpdG9yKTsKIAotI2lmIEpTQ19PQkpD
X0FQSV9FTkFCTEVECi0gICAgICAgICAgICBzY2FuRXh0ZXJuYWxSZW1lbWJlcmVkU2V0KG1fdm0s
IHZpc2l0b3IpOwotI2VuZGlmCiAgICAgICAgICAgICBpZiAobV92bS5zbWFsbFN0cmluZ3MubmVl
ZHNUb0JlVmlzaXRlZCgqbV9jb2xsZWN0aW9uU2NvcGUpKSB7CiAgICAgICAgICAgICAgICAgU2V0
Um9vdE1hcmtSZWFzb25TY29wZSByb290U2NvcGUodmlzaXRvciwgUm9vdE1hcmtSZWFzb246OlN0
cm9uZ1JlZmVyZW5jZXMpOwogICAgICAgICAgICAgICAgIG1fdm0uc21hbGxTdHJpbmdzLnZpc2l0
U3Ryb25nUmVmZXJlbmNlcyh2aXNpdG9yKTsKQEAgLTI3NjMsNjggKzI4MTEsNjYgQEAgdm9pZCBI
ZWFwOjphZGRDb3JlQ29uc3RyYWludHMoKQogICAgICAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5k
VW5iYXJyaWVyZWQobV92bS5leGNlcHRpb24oKSk7CiAgICAgICAgICAgICAgICAgdmlzaXRvci5h
cHBlbmRVbmJhcnJpZXJlZChtX3ZtLmxhc3RFeGNlcHRpb24oKSk7CiAgICAgICAgICAgICB9Ci0g
ICAgICAgIH0sCisgICAgICAgIH0pKSwKICAgICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHk6Okdy
ZXllZEJ5RXhlY3V0aW9uKTsKICAgICAKICAgICBtX2NvbnN0cmFpbnRTZXQtPmFkZCgKICAgICAg
ICAgIlNoIiwgIlN0cm9uZyBIYW5kbGVzIiwKLSAgICAgICAgW3RoaXNdIChTbG90VmlzaXRvciYg
dmlzaXRvcikgeworICAgICAgICBNQUtFX01BUktJTkdfQ09OU1RSQUlOVF9FWEVDVVRPUl9QQUlS
KChbdGhpc10gKGF1dG8mIHZpc2l0b3IpIHsKICAgICAgICAgICAgIFNldFJvb3RNYXJrUmVhc29u
U2NvcGUgcm9vdFNjb3BlKHZpc2l0b3IsIFJvb3RNYXJrUmVhc29uOjpTdHJvbmdIYW5kbGVzKTsK
ICAgICAgICAgICAgIG1faGFuZGxlU2V0LnZpc2l0U3Ryb25nSGFuZGxlcyh2aXNpdG9yKTsKLSAg
ICAgICAgfSwKKyAgICAgICAgfSkpLAogICAgICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eTo6R3Jl
eWVkQnlFeGVjdXRpb24pOwogICAgIAogICAgIG1fY29uc3RyYWludFNldC0+YWRkKAogICAgICAg
ICAiRCIsICJEZWJ1Z2dlciIsCi0gICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHZpc2l0b3Ip
IHsKKyAgICAgICAgTUFLRV9NQVJLSU5HX0NPTlNUUkFJTlRfRVhFQ1VUT1JfUEFJUigoW3RoaXNd
IChhdXRvJiB2aXNpdG9yKSB7CiAgICAgICAgICAgICBTZXRSb290TWFya1JlYXNvblNjb3BlIHJv
b3RTY29wZSh2aXNpdG9yLCBSb290TWFya1JlYXNvbjo6RGVidWdnZXIpOwogCi0jaWYgRU5BQkxF
KFNBTVBMSU5HX1BST0ZJTEVSKQotICAgICAgICAgICAgaWYgKFNhbXBsaW5nUHJvZmlsZXIqIHNh
bXBsaW5nUHJvZmlsZXIgPSBtX3ZtLnNhbXBsaW5nUHJvZmlsZXIoKSkgewotICAgICAgICAgICAg
ICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2soc2FtcGxpbmdQcm9maWxlci0+Z2V0TG9jaygpKTsK
LSAgICAgICAgICAgICAgICBzYW1wbGluZ1Byb2ZpbGVyLT5wcm9jZXNzVW52ZXJpZmllZFN0YWNr
VHJhY2VzKGxvY2tlcik7Ci0gICAgICAgICAgICAgICAgc2FtcGxpbmdQcm9maWxlci0+dmlzaXQo
dmlzaXRvcik7Ci0gICAgICAgICAgICAgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkgPT0gR0NMb2dn
aW5nOjpWZXJib3NlKQotICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJTYW1wbGluZyBQcm9m
aWxlciBkYXRhOlxuIiwgdmlzaXRvcik7Ci0gICAgICAgICAgICB9Ci0jZW5kaWYgLy8gRU5BQkxF
KFNBTVBMSU5HX1BST0ZJTEVSKQorICAgICAgICAgICAgaWYgY29uc3RleHByIChzYW1wbGluZ1By
b2ZpbGVyU3VwcG9ydGVkKQorICAgICAgICAgICAgICAgIHNlcnZpY2VTYW1wbGluZ1Byb2ZpbGVy
KG1fdm0sIHZpc2l0b3IpOwogCiAgICAgICAgICAgICBpZiAobV92bS50eXBlUHJvZmlsZXIoKSkK
ICAgICAgICAgICAgICAgICBtX3ZtLnR5cGVQcm9maWxlckxvZygpLT52aXNpdCh2aXNpdG9yKTsK
ICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKGF1dG8qIHNoYWRvd0NoaWNrZW4gPSBtX3Zt
LnNoYWRvd0NoaWNrZW4oKSkKICAgICAgICAgICAgICAgICBzaGFkb3dDaGlja2VuLT52aXNpdENo
aWxkcmVuKHZpc2l0b3IpOwotICAgICAgICB9LAorICAgICAgICB9KSksCiAgICAgICAgIENvbnN0
cmFpbnRWb2xhdGlsaXR5OjpHcmV5ZWRCeUV4ZWN1dGlvbik7CiAgICAgCiAgICAgbV9jb25zdHJh
aW50U2V0LT5hZGQoCiAgICAgICAgICJXcyIsICJXZWFrIFNldHMiLAotICAgICAgICBbdGhpc10g
KFNsb3RWaXNpdG9yJiB2aXNpdG9yKSB7CisgICAgICAgIE1BS0VfTUFSS0lOR19DT05TVFJBSU5U
X0VYRUNVVE9SX1BBSVIoKFt0aGlzXSAoYXV0byYgdmlzaXRvcikgewogICAgICAgICAgICAgU2V0
Um9vdE1hcmtSZWFzb25TY29wZSByb290U2NvcGUodmlzaXRvciwgUm9vdE1hcmtSZWFzb246Oldl
YWtTZXRzKTsKICAgICAgICAgICAgIG1fb2JqZWN0U3BhY2UudmlzaXRXZWFrU2V0cyh2aXNpdG9y
KTsKLSAgICAgICAgfSwKKyAgICAgICAgfSkpLAogICAgICAgICBDb25zdHJhaW50Vm9sYXRpbGl0
eTo6R3JleWVkQnlNYXJraW5nKTsKICAgICAKICAgICBtX2NvbnN0cmFpbnRTZXQtPmFkZCgKICAg
ICAgICAgIk8iLCAiT3V0cHV0IiwKLSAgICAgICAgW10gKFNsb3RWaXNpdG9yJiB2aXNpdG9yKSB7
CisgICAgICAgIE1BS0VfTUFSS0lOR19DT05TVFJBSU5UX0VYRUNVVE9SX1BBSVIoKFtdIChhdXRv
JiB2aXNpdG9yKSB7CisgICAgICAgICAgICB1c2luZyBWaXNpdG9yID0gZGVjbHR5cGUodmlzaXRv
cik7CiAgICAgICAgICAgICBWTSYgdm0gPSB2aXNpdG9yLnZtKCk7CiAKLSAgICAgICAgICAgIGF1
dG8gY2FsbE91dHB1dENvbnN0cmFpbnQgPSBbXSAoU2xvdFZpc2l0b3ImIHZpc2l0b3IsIEhlYXBD
ZWxsKiBoZWFwQ2VsbCwgSGVhcENlbGw6OktpbmQpIHsKLSAgICAgICAgICAgICAgICBTZXRSb290
TWFya1JlYXNvblNjb3BlIHJvb3RTY29wZSh2aXNpdG9yLCBSb290TWFya1JlYXNvbjo6T3V0cHV0
KTsKLSAgICAgICAgICAgICAgICBWTSYgdm0gPSB2aXNpdG9yLnZtKCk7CisgICAgICAgICAgICAv
LyBUaGUgYHZpc2l0b3IyYCBhcmd1bWVudCBpcyBzdHJhbmdlbHkgbmFtZWQgYmVjYXVzZSB0aGUg
V2luQ2Fpcm8gcG9ydAorICAgICAgICAgICAgLy8gZ2V0cyBjb25mdXNlZCAgYW5kIHRoaW5rcyB3
ZSdyZSB0cnlpbmcgdG8gY2FwdHVyZSB0aGUgb3V0ZXIgdmlzaXRvcgorICAgICAgICAgICAgLy8g
YXJnIGhlcmUuIEdpdmluZyBpdCBhIHVuaXF1ZSBuYW1lIHdvcmtzIGFyb3VuZCB0aGlzIGlzc3Vl
LgorICAgICAgICAgICAgYXV0byBjYWxsT3V0cHV0Q29uc3RyYWludCA9IFtdIChWaXNpdG9yJiB2
aXNpdG9yMiwgSGVhcENlbGwqIGhlYXBDZWxsLCBIZWFwQ2VsbDo6S2luZCkgeworICAgICAgICAg
ICAgICAgIFNldFJvb3RNYXJrUmVhc29uU2NvcGUgcm9vdFNjb3BlKHZpc2l0b3IyLCBSb290TWFy
a1JlYXNvbjo6T3V0cHV0KTsKKyAgICAgICAgICAgICAgICBWTSYgdm0gPSB2aXNpdG9yMi52bSgp
OwogICAgICAgICAgICAgICAgIEpTQ2VsbCogY2VsbCA9IHN0YXRpY19jYXN0PEpTQ2VsbCo+KGhl
YXBDZWxsKTsKLSAgICAgICAgICAgICAgICBjZWxsLT5tZXRob2RUYWJsZSh2bSktPnZpc2l0T3V0
cHV0Q29uc3RyYWludHMoY2VsbCwgdmlzaXRvcik7CisgICAgICAgICAgICAgICAgY2VsbC0+bWV0
aG9kVGFibGUodm0pLT52aXNpdE91dHB1dENvbnN0cmFpbnRzKGNlbGwsIHZpc2l0b3IyKTsKICAg
ICAgICAgICAgIH07CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGF1dG8gYWRkID0gWyZdIChh
dXRvJiBzZXQpIHsKLSAgICAgICAgICAgICAgICB2aXNpdG9yLmFkZFBhcmFsbGVsQ29uc3RyYWlu
dFRhc2soc2V0LmZvckVhY2hNYXJrZWRDZWxsSW5QYXJhbGxlbChjYWxsT3V0cHV0Q29uc3RyYWlu
dCkpOworICAgICAgICAgICAgICAgIFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoVmlzaXRvciYpPj4g
dGFzayA9IHNldC50ZW1wbGF0ZSBmb3JFYWNoTWFya2VkQ2VsbEluUGFyYWxsZWw8VmlzaXRvcj4o
Y2FsbE91dHB1dENvbnN0cmFpbnQpOworICAgICAgICAgICAgICAgIHZpc2l0b3IuYWRkUGFyYWxs
ZWxDb25zdHJhaW50VGFzayh0YXNrKTsKICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAKICAg
ICAgICAgICAgIGFkZCh2bS5leGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlc1dpdGhDb25zdHJhaW50
cyk7CiAgICAgICAgICAgICBpZiAodm0ubV93ZWFrTWFwU3BhY2UpCiAgICAgICAgICAgICAgICAg
YWRkKCp2bS5tX3dlYWtNYXBTcGFjZSk7Ci0gICAgICAgIH0sCisgICAgICAgIH0pKSwKICAgICAg
ICAgQ29uc3RyYWludFZvbGF0aWxpdHk6OkdyZXllZEJ5TWFya2luZywKICAgICAgICAgQ29uc3Ry
YWludFBhcmFsbGVsaXNtOjpQYXJhbGxlbCk7CiAgICAgCkBAIC0yODMyLDcgKzI4NzgsNyBAQCB2
b2lkIEhlYXA6OmFkZENvcmVDb25zdHJhaW50cygpCiAgICAgaWYgKE9wdGlvbnM6OnVzZUpJVCgp
KSB7CiAgICAgICAgIG1fY29uc3RyYWludFNldC0+YWRkKAogICAgICAgICAgICAgIkR3IiwgIkRG
RyBXb3JrbGlzdHMiLAotICAgICAgICAgICAgW3RoaXNdIChTbG90VmlzaXRvciYgdmlzaXRvcikg
eworICAgICAgICAgICAgTUFLRV9NQVJLSU5HX0NPTlNUUkFJTlRfRVhFQ1VUT1JfUEFJUigoW3Ro
aXNdIChhdXRvJiB2aXNpdG9yKSB7CiAgICAgICAgICAgICAgICAgU2V0Um9vdE1hcmtSZWFzb25T
Y29wZSByb290U2NvcGUodmlzaXRvciwgUm9vdE1hcmtSZWFzb246OkRGR1dvcmtMaXN0cyk7CiAK
ICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBERkc6Om51bWJlck9mV29ya2xpc3Rz
KCk7IGktLTspCkBAIC0yODQwLDcgKzI4ODYsNyBAQCB2b2lkIEhlYXA6OmFkZENvcmVDb25zdHJh
aW50cygpCiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMg
aXMgYWxtb3N0IGNlcnRhaW5seSB1bm5lY2Vzc2FyeS4KICAgICAgICAgICAgICAgICAvLyBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY2ODI5Ci0gICAgICAgICAgICAg
ICAgREZHOjppdGVyYXRlQ29kZUJsb2Nrc0ZvckdDKAorICAgICAgICAgICAgICAgIERGRzo6aXRl
cmF0ZUNvZGVCbG9ja3NGb3JHQyh2aXNpdG9yLAogICAgICAgICAgICAgICAgICAgICBtX3ZtLAog
ICAgICAgICAgICAgICAgICAgICBbJl0gKENvZGVCbG9jayogY29kZUJsb2NrKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKGNvZGVCbG9jayk7CkBA
IC0yODQ4LDIzICsyODk0LDIzIEBAIHZvaWQgSGVhcDo6YWRkQ29yZUNvbnN0cmFpbnRzKCkKICAg
ICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSA9PSBH
Q0xvZ2dpbmc6OlZlcmJvc2UpCiAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIkRGRyBXb3Jr
bGlzdHM6XG4iLCB2aXNpdG9yKTsKLSAgICAgICAgICAgIH0sCisgICAgICAgICAgICB9KSksCiAg
ICAgICAgICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eTo6R3JleWVkQnlNYXJraW5nKTsKICAgICB9
CiAjZW5kaWYKICAgICAKICAgICBtX2NvbnN0cmFpbnRTZXQtPmFkZCgKICAgICAgICAgIkNiIiwg
IkNvZGVCbG9ja3MiLAotICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiB2aXNpdG9yKSB7Cisg
ICAgICAgIE1BS0VfTUFSS0lOR19DT05TVFJBSU5UX0VYRUNVVE9SX1BBSVIoKFt0aGlzXSAoYXV0
byYgdmlzaXRvcikgewogICAgICAgICAgICAgU2V0Um9vdE1hcmtSZWFzb25TY29wZSByb290U2Nv
cGUodmlzaXRvciwgUm9vdE1hcmtSZWFzb246OkNvZGVCbG9ja3MpOwotICAgICAgICAgICAgaXRl
cmF0ZUV4ZWN1dGluZ0FuZENvbXBpbGluZ0NvZGVCbG9ja3NXaXRob3V0SG9sZGluZ0xvY2tzKAor
ICAgICAgICAgICAgaXRlcmF0ZUV4ZWN1dGluZ0FuZENvbXBpbGluZ0NvZGVCbG9ja3NXaXRob3V0
SG9sZGluZ0xvY2tzKHZpc2l0b3IsCiAgICAgICAgICAgICAgICAgWyZdIChDb2RlQmxvY2sqIGNv
ZGVCbG9jaykgewogICAgICAgICAgICAgICAgICAgICAvLyBWaXNpdCB0aGUgQ29kZUJsb2NrIGFz
IGEgY29uc3RyYWludCBvbmx5IGlmIGl0J3MgYmxhY2suCi0gICAgICAgICAgICAgICAgICAgIGlm
IChpc01hcmtlZChjb2RlQmxvY2spCisgICAgICAgICAgICAgICAgICAgIGlmICh2aXNpdG9yLmlz
TWFya2VkKGNvZGVCbG9jaykKICAgICAgICAgICAgICAgICAgICAgICAgICYmIGNvZGVCbG9jay0+
Y2VsbFN0YXRlKCkgPT0gQ2VsbFN0YXRlOjpQb3NzaWJseUJsYWNrKQogICAgICAgICAgICAgICAg
ICAgICAgICAgdmlzaXRvci52aXNpdEFzQ29uc3RyYWludChjb2RlQmxvY2spOwogICAgICAgICAg
ICAgICAgIH0pOwotICAgICAgICB9LAorICAgICAgICB9KSksCiAgICAgICAgIENvbnN0cmFpbnRW
b2xhdGlsaXR5OjpTZWxkb21HcmV5ZWQpOwogICAgIAogICAgIG1fY29uc3RyYWludFNldC0+YWRk
KG1ha2VVbmlxdWU8TWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQ+KCp0aGlzKSk7CkBAIC0zMDIz
LDQgKzMwNjksMzQgQEAgdm9pZCBIZWFwOjpydW5UYXNrSW5QYXJhbGxlbChSZWZQdHI8U2hhcgog
ICAgIH0KIH0KIAordm9pZCBIZWFwOjp2ZXJpZnlHQygpCit7CisgICAgUkVMRUFTRV9BU1NFUlQo
bV92ZXJpZmllclNsb3RWaXNpdG9yKTsKKyAgICBSRUxFQVNFX0FTU0VSVCghbV9pc01hcmtpbmdG
b3JHQ1ZlcmlmaWVyKTsKKyAgICBtX2lzTWFya2luZ0ZvckdDVmVyaWZpZXIgPSB0cnVlOworCisg
ICAgVmVyaWZpZXJTbG90VmlzaXRvciYgdmlzaXRvciA9ICptX3ZlcmlmaWVyU2xvdFZpc2l0b3I7
CisKKyAgICBkbyB7CisgICAgICAgIHdoaWxlICghdmlzaXRvci5pc0VtcHR5KCkpCisgICAgICAg
ICAgICB2aXNpdG9yLmRyYWluKCk7CisgICAgICAgIG1fY29uc3RyYWludFNldC0+ZXhlY3V0ZUFs
bFN5bmNocm9ub3VzbHkodmlzaXRvcik7CisgICAgICAgIHZpc2l0b3IuZXhlY3V0ZUNvbnN0cmFp
bnRUYXNrcygpOworICAgIH0gd2hpbGUgKCF2aXNpdG9yLmlzRW1wdHkoKSk7CisKKyAgICBtX2lz
TWFya2luZ0ZvckdDVmVyaWZpZXIgPSBmYWxzZTsKKworICAgIHZpc2l0b3IuZm9yRWFjaExpdmVD
ZWxsKFsmXSAoSGVhcENlbGwqIGNlbGwpIHsKKyAgICAgICAgaWYgKEhlYXA6OmlzTWFya2VkKGNl
bGwpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGRhdGFMb2dMbigiXG4iICJHQyBW
ZXJpZmllcjogRVJST1IgY2VsbCAiLCBSYXdQb2ludGVyKGNlbGwpLCAiIHdhcyBub3QgbWFya2Vk
Iik7CisgICAgICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjp2ZXJib3NlVmVyaWZ5R0MoKSkpCisg
ICAgICAgICAgICB2aXNpdG9yLmR1bXBNYXJrZXJEYXRhKGNlbGwpOworICAgICAgICBSRUxFQVNF
X0FTU0VSVCh0aGlzLT5pc01hcmtlZChjZWxsKSk7CisgICAgfSk7CisKKyAgICBtX3ZlcmlmaWVy
U2xvdFZpc2l0b3IgPSBudWxscHRyOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMSw3ICsxLDcgQEAKIC8q
CiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDAgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9y
ZykKICAqICBDb3B5cmlnaHQgKEMpIDIwMDEgUGV0ZXIgS2VsbHkgKHBta0Bwb3N0LmNvbSkKLSAq
ICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwpAQCAtODYsNiArODYsNyBAQCBjbGFzcyBTcGFjZVRp
bWVNdXRhdG9yU2NoZWR1bGVyOwogY2xhc3MgU3RvcElmTmVjZXNzYXJ5VGltZXI7CiBjbGFzcyBT
d2VlcGluZ1Njb3BlOwogY2xhc3MgVk07CitjbGFzcyBWZXJpZmllclNsb3RWaXNpdG9yOwogY2xh
c3MgV2Vha0dDTWFwQmFzZTsKIHN0cnVjdCBDdXJyZW50VGhyZWFkU3RhdGU7CiAKQEAgLTE4NCw4
ICsxODUsNiBAQCBwdWJsaWM6CiAgICAgCiAgICAgYm9vbCBpc1NodXR0aW5nRG93bigpIGNvbnN0
IHsgcmV0dXJuIG1faXNTaHV0dGluZ0Rvd247IH0KIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIGJv
b2wgaXNBbmFseXppbmdIZWFwKCkgY29uc3Q7Ci0KICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lk
IHN3ZWVwU3luY2hyb25vdXNseSgpOwogCiAgICAgYm9vbCBzaG91bGRDb2xsZWN0SGV1cmlzdGlj
KCk7CkBAIC0zODUsOCArMzg0LDYgQEAgcHVibGljOgogICAgIAogICAgIEpTX0VYUE9SVF9QUklW
QVRFIHZvaWQgYWRkTWFya2luZ0NvbnN0cmFpbnQoc3RkOjp1bmlxdWVfcHRyPE1hcmtpbmdDb25z
dHJhaW50Pik7CiAgICAgCi0gICAgc2l6ZV90IG51bU9wYXF1ZVJvb3RzKCkgY29uc3QgeyByZXR1
cm4gbV9vcGFxdWVSb290cy5zaXplKCk7IH0KLQogICAgIEhlYXBWZXJpZmllciogdmVyaWZpZXIo
KSBjb25zdCB7IHJldHVybiBtX3ZlcmlmaWVyLmdldCgpOyB9CiAgICAgCiAgICAgdm9pZCBhZGRI
ZWFwRmluYWxpemVyQ2FsbGJhY2soY29uc3QgSGVhcEZpbmFsaXplckNhbGxiYWNrJik7CkBAIC00
MDcsNiArNDA0LDggQEAgcHVibGljOgogCiAgICAgSGFzaE1hcDxKU0ltbXV0YWJsZUJ1dHRlcmZs
eSosIEpTU3RyaW5nKj4gaW1tdXRhYmxlQnV0dGVyZmx5VG9TdHJpbmdDYWNoZTsKIAorICAgIGJv
b2wgaXNNYXJraW5nRm9yR0NWZXJpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1faXNNYXJraW5nRm9y
R0NWZXJpZmllcjsgfQorCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBBbGxvY2F0aW5nU2Nv
cGU7CiAgICAgZnJpZW5kIGNsYXNzIENvZGVCbG9jazsKQEAgLTU3NSwxMSArNTc0LDExIEBAIHBy
aXZhdGU6CiAKICAgICBib29sIG92ZXJDcml0aWNhbE1lbW9yeVRocmVzaG9sZChNZW1vcnlUaHJl
c2hvbGRDYWxsVHlwZSBtZW1vcnlUaHJlc2hvbGRDYWxsVHlwZSA9IE1lbW9yeVRocmVzaG9sZENh
bGxUeXBlOjpDYWNoZWQpOwogICAgIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+Ci0gICAg
dm9pZCBpdGVyYXRlRXhlY3V0aW5nQW5kQ29tcGlsaW5nQ29kZUJsb2Nrcyhjb25zdCBGdW5jJik7
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYywgdHlwZW5hbWUgVmlzaXRvcj4KKyAgICB2b2lk
IGl0ZXJhdGVFeGVjdXRpbmdBbmRDb21waWxpbmdDb2RlQmxvY2tzKFZpc2l0b3ImLCBjb25zdCBG
dW5jJik7CiAgICAgCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KLSAgICB2b2lkIGl0ZXJh
dGVFeGVjdXRpbmdBbmRDb21waWxpbmdDb2RlQmxvY2tzV2l0aG91dEhvbGRpbmdMb2Nrcyhjb25z
dCBGdW5jJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYywgdHlwZW5hbWUgVmlzaXRvcj4K
KyAgICB2b2lkIGl0ZXJhdGVFeGVjdXRpbmdBbmRDb21waWxpbmdDb2RlQmxvY2tzV2l0aG91dEhv
bGRpbmdMb2NrcyhWaXNpdG9yJiwgY29uc3QgRnVuYyYpOwogICAgIAogICAgIHZvaWQgYXNzZXJ0
TWFya1N0YWNrc0VtcHR5KCk7CiAKQEAgLTU5MCw2ICs1ODksOCBAQCBwcml2YXRlOgogICAgIHN0
YXRpYyBib29sIHVzZUdlbmVyYXRpb25hbEdDKCk7CiAgICAgc3RhdGljIGJvb2wgc2hvdWxkU3dl
ZXBTeW5jaHJvbm91c2x5KCk7CiAgICAgCisgICAgdm9pZCB2ZXJpZnlHQygpOworCiAgICAgY29u
c3QgSGVhcFR5cGUgbV9oZWFwVHlwZTsKICAgICBNdXRhdG9yU3RhdGUgbV9tdXRhdG9yU3RhdGUg
eyBNdXRhdG9yU3RhdGU6OlJ1bm5pbmcgfTsKICAgICBjb25zdCBzaXplX3QgbV9yYW1TaXplOwpA
QCAtNjM2LDYgKzYzNyw3IEBAIHByaXZhdGU6CiAgICAgc3RkOjp1bmlxdWVfcHRyPE1hcmtTdGFj
a0FycmF5PiBtX211dGF0b3JNYXJrU3RhY2s7CiAgICAgc3RkOjp1bmlxdWVfcHRyPE1hcmtTdGFj
a0FycmF5PiBtX3JhY2VNYXJrU3RhY2s7CiAgICAgc3RkOjp1bmlxdWVfcHRyPE1hcmtpbmdDb25z
dHJhaW50U2V0PiBtX2NvbnN0cmFpbnRTZXQ7CisgICAgc3RkOjp1bmlxdWVfcHRyPFZlcmlmaWVy
U2xvdFZpc2l0b3I+IG1fdmVyaWZpZXJTbG90VmlzaXRvcjsKIAogICAgIC8vIFdlIHBvb2wgdGhl
IHNsb3QgdmlzaXRvcnMgdXNlZCBieSBwYXJhbGxlbCBtYXJraW5nIHRocmVhZHMuIEl0J3MgdXNl
ZnVsIHRvIGJlIGFibGUgdG8KICAgICAvLyBlbnVtZXJhdGUgb3ZlciB0aGVtLCBhbmQgaXQncyB1
c2VmdWwgdG8gaGF2ZSB0aGVtIGNhY2hlIHNvbWUgc21hbGwgYW1vdW50IG9mIG1lbW9yeSBmcm9t
CkBAIC02NTQsNiArNjU2LDcgQEAgcHJpdmF0ZToKICAgICBib29sIG1faXNTYWZlVG9Db2xsZWN0
IHsgZmFsc2UgfTsKICAgICBib29sIG1faXNTaHV0dGluZ0Rvd24geyBmYWxzZSB9OwogICAgIGJv
b2wgbV9tdXRhdG9yU2hvdWxkQmVGZW5jZWQgeyBPcHRpb25zOjpmb3JjZUZlbmNlZEJhcnJpZXIo
KSB9OworICAgIGJvb2wgbV9pc01hcmtpbmdGb3JHQ1ZlcmlmaWVyIHsgZmFsc2UgfTsKIAogICAg
IHVuc2lnbmVkIG1fYmFycmllclRocmVzaG9sZCB7IE9wdGlvbnM6OmZvcmNlRmVuY2VkQmFycmll
cigpID8gdGF1dG9sb2dpY2FsVGhyZXNob2xkIDogYmxhY2tUaHJlc2hvbGQgfTsKIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcElubGluZXMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwSW5saW5lcy5oCShyZXZpc2lvbiAyNzI4MzAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwSW5saW5lcy5oCSh3b3JraW5nIGNv
cHkpCkBAIC02OSw2ICs2OSw4IEBAIGlubGluZSBib29sIEhlYXA6OndvcmxkSXNTdG9wcGVkKCkg
Y29uc3QKIAogQUxXQVlTX0lOTElORSBib29sIEhlYXA6OmlzTWFya2VkKGNvbnN0IHZvaWQqIHJh
d0NlbGwpCiB7CisgICAgQVNTRVJUKCFtX2lzTWFya2luZ0ZvckdDVmVyaWZpZXIpOworLy8gICAg
UkVMRUFTRV9BU1NFUlQoIW1faXNNYXJraW5nRm9yR0NWZXJpZmllcik7IC8vIG1sYW0gVEVTVCBv
bmx5CiAgICAgSGVhcENlbGwqIGNlbGwgPSBiaXR3aXNlX2Nhc3Q8SGVhcENlbGwqPihyYXdDZWxs
KTsKICAgICBpZiAoY2VsbC0+aXNQcmVjaXNlQWxsb2NhdGlvbigpKQogICAgICAgICByZXR1cm4g
Y2VsbC0+cHJlY2lzZUFsbG9jYXRpb24oKS5pc01hcmtlZCgpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvSGVhcFByb2ZpbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9IZWFwUHJvZmlsZXIuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwUHJvZmlsZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTYwLDYgKzYwLDcgQEAgdm9pZCBIZWFwUHJvZmlsZXI6OnNldEFjdGl2ZUhlYXBBbmFseXplcgog
ewogICAgIEFTU0VSVCghIW1fYWN0aXZlQW5hbHl6ZXIgIT0gISFhbmFseXplcik7CiAgICAgbV9h
Y3RpdmVBbmFseXplciA9IGFuYWx5emVyOworICAgIG1fdm0uc2V0QWN0aXZlSGVhcEFuYWx5emVy
KGFuYWx5emVyKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9Jc29DZWxsU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvSXNvQ2VsbFNldC5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9Jc29DZWxsU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTgsOCArNTgsOCBA
QCBwdWJsaWM6CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KICAgICB2b2lkIGZvckVhY2hN
YXJrZWRDZWxsKGNvbnN0IEZ1bmMmKTsKIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+Ci0g
ICAgUmVmPFNoYXJlZFRhc2s8dm9pZChTbG90VmlzaXRvciYpPj4gZm9yRWFjaE1hcmtlZENlbGxJ
blBhcmFsbGVsKGNvbnN0IEZ1bmMmKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yLCB0
eXBlbmFtZSBGdW5jPgorICAgIFJlZjxTaGFyZWRUYXNrPHZvaWQoVmlzaXRvciYpPj4gZm9yRWFj
aE1hcmtlZENlbGxJblBhcmFsbGVsKGNvbnN0IEZ1bmMmKTsKICAgICAKICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBGdW5jPgogICAgIHZvaWQgZm9yRWFjaExpdmVDZWxsKGNvbnN0IEZ1bmMmKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0lzb0NlbGxTZXRJbmxpbmVzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvQ2VsbFNldElubGluZXMuaAko
cmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvQ2VsbFNl
dElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC05MSwxMCArOTEsMTAgQEAgdm9pZCBJc29DZWxsU2V0
Ojpmb3JFYWNoTWFya2VkQ2VsbChjb25zdAogICAgICAgICB9KTsKIH0KIAotdGVtcGxhdGU8dHlw
ZW5hbWUgRnVuYz4KLVJlZjxTaGFyZWRUYXNrPHZvaWQoU2xvdFZpc2l0b3ImKT4+IElzb0NlbGxT
ZXQ6OmZvckVhY2hNYXJrZWRDZWxsSW5QYXJhbGxlbChjb25zdCBGdW5jJiBmdW5jKQordGVtcGxh
dGU8dHlwZW5hbWUgVmlzaXRvciwgdHlwZW5hbWUgRnVuYz4KK1JlZjxTaGFyZWRUYXNrPHZvaWQo
VmlzaXRvciYpPj4gSXNvQ2VsbFNldDo6Zm9yRWFjaE1hcmtlZENlbGxJblBhcmFsbGVsKGNvbnN0
IEZ1bmMmIGZ1bmMpCiB7Ci0gICAgY2xhc3MgVGFzayBmaW5hbCA6IHB1YmxpYyBTaGFyZWRUYXNr
PHZvaWQoU2xvdFZpc2l0b3ImKT4geworICAgIGNsYXNzIFRhc2sgZmluYWwgOiBwdWJsaWMgU2hh
cmVkVGFzazx2b2lkKFZpc2l0b3ImKT4gewogICAgIHB1YmxpYzoKICAgICAgICAgVGFzayhJc29D
ZWxsU2V0JiBzZXQsIGNvbnN0IEZ1bmMmIGZ1bmMpCiAgICAgICAgICAgICA6IG1fc2V0KHNldCkK
QEAgLTEwMyw3ICsxMDMsNyBAQCBSZWY8U2hhcmVkVGFzazx2b2lkKFNsb3RWaXNpdG9yJik+PiBJ
c29DCiAgICAgICAgIHsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgdm9pZCBydW4oU2xv
dFZpc2l0b3ImIHZpc2l0b3IpIGZpbmFsCisgICAgICAgIHZvaWQgcnVuKFZpc2l0b3ImIHZpc2l0
b3IpIGZpbmFsCiAgICAgICAgIHsKICAgICAgICAgICAgIHdoaWxlIChNYXJrZWRCbG9jazo6SGFu
ZGxlKiBoYW5kbGUgPSBtX2Jsb2NrU291cmNlLT5ydW4oKSkgewogICAgICAgICAgICAgICAgIHVu
c2lnbmVkIGJsb2NrSW5kZXggPSBoYW5kbGUtPmluZGV4KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9KSVRTdHViUm91dGluZVNldC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvSklUU3R1YlJvdXRpbmVTZXQuY3BwCShyZXZpc2lvbiAyNzI4
MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9KSVRTdHViUm91dGluZVNldC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEy
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0y
MDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMTI4LDcgKzEyOCw4IEBAIHZvaWQgSklUU3R1YlJvdXRpbmVTZXQ6OmRl
bGV0ZVVubWFya2VkSmUKICAgICBtX3JvdXRpbmVzLnNocmluayhkc3RJbmRleCk7CiB9CiAKLXZv
aWQgSklUU3R1YlJvdXRpbmVTZXQ6OnRyYWNlTWFya2VkU3R1YlJvdXRpbmVzKFNsb3RWaXNpdG9y
JiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSklUU3R1YlJvdXRp
bmVTZXQ6OnRyYWNlTWFya2VkU3R1YlJvdXRpbmVzKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAg
Zm9yIChhdXRvJiBlbnRyeSA6IG1fcm91dGluZXMpIHsKICAgICAgICAgR0NBd2FyZUpJVFN0dWJS
b3V0aW5lKiByb3V0aW5lID0gZW50cnkucm91dGluZTsKQEAgLTEzOSw2ICsxNDAsOSBAQCB2b2lk
IEpJVFN0dWJSb3V0aW5lU2V0Ojp0cmFjZU1hcmtlZFN0dWJSCiAgICAgfQogfQogCit0ZW1wbGF0
ZSB2b2lkIEpJVFN0dWJSb3V0aW5lU2V0Ojp0cmFjZU1hcmtlZFN0dWJSb3V0aW5lcyhBYnN0cmFj
dFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpJVFN0dWJSb3V0aW5lU2V0Ojp0cmFjZU1h
cmtlZFN0dWJSb3V0aW5lcyhTbG90VmlzaXRvciYpOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAog
I2VuZGlmIC8vIEVOQUJMRShKSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9K
SVRTdHViUm91dGluZVNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0pJVFN0dWJSb3V0aW5lU2V0LmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0pJVFN0dWJSb3V0aW5lU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTggQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0z
Niw3ICszNiw2IEBAIHVzaW5nIFdURjo6UmFuZ2U7CiBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3Mg
R0NBd2FyZUpJVFN0dWJSb3V0aW5lOwotY2xhc3MgU2xvdFZpc2l0b3I7CiAKICNpZiBFTkFCTEUo
SklUKQogCkBAIC02Myw4ICs2Miw4IEBAIHB1YmxpYzoKICAgICB2b2lkIHByZXBhcmVGb3JDb25z
ZXJ2YXRpdmVTY2FuKCk7CiAgICAgCiAgICAgdm9pZCBkZWxldGVVbm1hcmtlZEpldHRpc29uZWRT
dHViUm91dGluZXMoKTsKLSAgICAKLSAgICB2b2lkIHRyYWNlTWFya2VkU3R1YlJvdXRpbmVzKFNs
b3RWaXNpdG9yJik7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIHRyYWNl
TWFya2VkU3R1YlJvdXRpbmVzKFZpc2l0b3ImKTsKICAgICAKIHByaXZhdGU6CiAgICAgdm9pZCBt
YXJrU2xvdyh1aW50cHRyX3QgYWRkcmVzcyk7CkBAIC05Miw3ICs5MSw3IEBAIHB1YmxpYzoKICAg
ICB2b2lkIG1hcmsodm9pZCopIHsgfQogICAgIHZvaWQgcHJlcGFyZUZvckNvbnNlcnZhdGl2ZVNj
YW4oKSB7IH0KICAgICB2b2lkIGRlbGV0ZVVubWFya2VkSmV0dGlzb25lZFN0dWJSb3V0aW5lcygp
IHsgfQotICAgIHZvaWQgdHJhY2VNYXJrZWRTdHViUm91dGluZXMoU2xvdFZpc2l0b3ImKSB7IH0K
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIHRyYWNlTWFya2VkU3R1YlJvdXRp
bmVzKFZpc2l0b3ImKSB7IH0KIH07CiAKICNlbmRpZiAvLyAhRU5BQkxFKEpJVCkKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtTdGFja01lcmdpbmdDb25zdHJhaW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3RhY2tNZXJnaW5n
Q29uc3RyYWludC5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL01hcmtTdGFja01lcmdpbmdDb25zdHJhaW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNSw3
ICsyNSw2IEBACiAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJNYXJrU3RhY2tNZXJn
aW5nQ29uc3RyYWludC5oIgotCiAjaW5jbHVkZSAiR0NTZWdtZW50ZWRBcnJheUlubGluZXMuaCIK
ICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAKQEAgLTQ2LDcgKzQ1LDcgQEAgZG91YmxlIE1hcmtT
dGFja01lcmdpbmdDb25zdHJhaW50OjpxdWljawogICAgIHJldHVybiBtX2hlYXAubV9tdXRhdG9y
TWFya1N0YWNrLT5zaXplKCkgKyBtX2hlYXAubV9yYWNlTWFya1N0YWNrLT5zaXplKCk7CiB9CiAK
LXZvaWQgTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQ6OnByZXBhcmVUb0V4ZWN1dGVJbXBsKGNv
bnN0IEFic3RyYWN0TG9ja2VyJiwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIE1hcmtTdGFj
a01lcmdpbmdDb25zdHJhaW50OjpwcmVwYXJlVG9FeGVjdXRlSW1wbChjb25zdCBBYnN0cmFjdExv
Y2tlciYsIEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgLy8gTG9nZ2luZyB0
aGUgd29yayBoZXJlIGVuc3VyZXMgdGhhdCB0aGUgY29uc3RyYWludCBzb2x2ZXIga25vd3MgdGhh
dCBpdCBkb2Vzbid0IG5lZWQgdG8gcHJvZHVjZQogICAgIC8vIGFueW1vcmUgd29yay4KQEAgLTU2
LDExICs1NSwyNCBAQCB2b2lkIE1hcmtTdGFja01lcmdpbmdDb25zdHJhaW50OjpwcmVwYXJlCiAg
ICAgZGF0YUxvZ0lmKE9wdGlvbnM6OmxvZ0dDKCksICIoIiwgc2l6ZSwgIikiKTsKIH0KIAotdm9p
ZCBNYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludDo6ZXhlY3V0ZUltcGwoU2xvdFZpc2l0b3ImIHZp
c2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBNYXJrU3RhY2tNZXJnaW5n
Q29uc3RyYWludDo6ZXhlY3V0ZUltcGxJbXBsKFZpc2l0b3ImIHZpc2l0b3IpCiB7CisgICAgLy8g
V2Ugd2FudCB0byBza2lwIHRoaXMgY29uc3RyYWludCBmb3IgdGhlIEdDIHZlcmlmaWVyIGJlY2F1
c2U6CisgICAgLy8gMS4gVGhlcmUgc2hvdWxkIGJlIG5vIG11dGF0b3IgbWFya2luZyBhY3Rpb24g
YmV0d2VlbiB0aGUgRW5kIHBoYXNlIGFuZCB2ZXJpZnlHQygpLgorICAgIC8vICAgIEhlbmNlLCB3
ZSBjYW4gaWdub3JlIHRoc2Ugc3RhY2tzLgorICAgIC8vIDIuIFRoZSBFbmQgcGhhc2UgZXhwbGlj
dGx5IGNhbGxzIGl0ZXJhdGVFeGVjdXRpbmdBbmRDb21waWxpbmdDb2RlQmxvY2tzKCkKKyAgICAv
LyAgICB0byBhZGQgZXhlY3V0aW5nIENvZGVCbG9ja3MgdG8gbV9oZWFwLm1fbXV0YXRvck1hcmtT
dGFjay4gV2Ugd2FudCB0bworICAgIC8vICAgIGxlYXZlIHRob3NlIHVucGVydHVyYmVkLgorICAg
IGlmIChtX2hlYXAubV9pc01hcmtpbmdGb3JHQ1ZlcmlmaWVyKQorICAgICAgICByZXR1cm47CisK
ICAgICBtX2hlYXAubV9tdXRhdG9yTWFya1N0YWNrLT50cmFuc2ZlclRvKHZpc2l0b3IubXV0YXRv
ck1hcmtTdGFjaygpKTsKICAgICBtX2hlYXAubV9yYWNlTWFya1N0YWNrLT50cmFuc2ZlclRvKHZp
c2l0b3IubXV0YXRvck1hcmtTdGFjaygpKTsKIH0KIAordm9pZCBNYXJrU3RhY2tNZXJnaW5nQ29u
c3RyYWludDo6ZXhlY3V0ZUltcGwoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikgeyBleGVj
dXRlSW1wbEltcGwodmlzaXRvcik7IH0KK3ZvaWQgTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQ6
OmV4ZWN1dGVJbXBsKFNsb3RWaXNpdG9yJiB2aXNpdG9yKSB7IGV4ZWN1dGVJbXBsSW1wbCh2aXNp
dG9yKTsgfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludC5oCShyZXZp
c2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3RhY2tNZXJn
aW5nQ29uc3RyYWludC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiBuYW1lc3Bh
Y2UgSlNDIHsKIAogY2xhc3MgSGVhcDsKK2NsYXNzIEFic3RyYWN0U2xvdFZpc2l0b3I7CiBjbGFz
cyBTbG90VmlzaXRvcjsKIAogY2xhc3MgTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQgZmluYWwg
OiBwdWJsaWMgTWFya2luZ0NvbnN0cmFpbnQgewpAQCAtNDAsNyArNDEsOSBAQCBwdWJsaWM6CiAg
ICAgZG91YmxlIHF1aWNrV29ya0VzdGltYXRlKFNsb3RWaXNpdG9yJikgZmluYWw7CiAgICAgCiBw
cml2YXRlOgotICAgIHZvaWQgcHJlcGFyZVRvRXhlY3V0ZUltcGwoY29uc3QgQWJzdHJhY3RMb2Nr
ZXImIGNvbnN0cmFpbnRTb2x2aW5nTG9ja2VyLCBTbG90VmlzaXRvciYpIGZpbmFsOworICAgIHZv
aWQgcHJlcGFyZVRvRXhlY3V0ZUltcGwoY29uc3QgQWJzdHJhY3RMb2NrZXImIGNvbnN0cmFpbnRT
b2x2aW5nTG9ja2VyLCBBYnN0cmFjdFNsb3RWaXNpdG9yJikgZmluYWw7CisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgVmlzaXRvcj4gQUxXQVlTX0lOTElORSB2b2lkIGV4ZWN1dGVJbXBsSW1wbChWaXNp
dG9yJik7CisgICAgdm9pZCBleGVjdXRlSW1wbChBYnN0cmFjdFNsb3RWaXNpdG9yJikgZmluYWw7
CiAgICAgdm9pZCBleGVjdXRlSW1wbChTbG90VmlzaXRvciYpIGZpbmFsOwogICAgIAogICAgIEhl
YXAmIG1faGVhcDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2Nr
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2su
aAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2Vk
QmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMjAwLDYgKzIwMCw3IEBAIHB1YmxpYzoKICAgICAg
ICAgCiAgICAgICAgIHZvaWQqIHN0YXJ0KCkgY29uc3QgeyByZXR1cm4gJm1fYmxvY2stPmF0b21z
KClbMF07IH0KICAgICAgICAgdm9pZCogZW5kKCkgY29uc3QgeyByZXR1cm4gJm1fYmxvY2stPmF0
b21zKClbbV9lbmRBdG9tXTsgfQorICAgICAgICB2b2lkKiBhdG9tQXQoc2l6ZV90IGkpIGNvbnN0
IHsgcmV0dXJuICZtX2Jsb2NrLT5hdG9tcygpW2ldOyB9CiAgICAgICAgIGJvb2wgY29udGFpbnMo
dm9pZCogcCkgY29uc3QgeyByZXR1cm4gc3RhcnQoKSA8PSBwICYmIHAgPCBlbmQoKTsgfQogCiAg
ICAgICAgIHZvaWQgZHVtcFN0YXRlKFByaW50U3RyZWFtJik7CkBAIC0yOTUsOSArMjk2LDEwIEBA
IHB1YmxpYzoKIAogICAgICAgICBCaXRtYXA8YXRvbXNQZXJCbG9jaz4gbV9tYXJrczsKICAgICAg
ICAgQml0bWFwPGF0b21zUGVyQmxvY2s+IG1fbmV3bHlBbGxvY2F0ZWQ7CisgICAgICAgIHZvaWQq
IG1fdmVyaWZpZXJNZW1vIHsgbnVsbHB0ciB9OwogICAgIH07CiAgICAgCi1wcml2YXRlOiAgICAK
K3ByaXZhdGU6CiAgICAgRm9vdGVyJiBmb290ZXIoKTsKICAgICBjb25zdCBGb290ZXImIGZvb3Rl
cigpIGNvbnN0OwogCkBAIC0zODQsNyArMzg2LDExIEBAIHB1YmxpYzoKICAgICAgICAgKmJpdHdp
c2VfY2FzdDx2b2xhdGlsZSB1aW50OF90Kj4oJmZvb3RlcigpKTsKICAgICB9CiAgICAgCisgICAg
dm9pZCBzZXRWZXJpZmllck1lbW8odm9pZCopOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IFQg
dmVyaWZpZXJNZW1vKCkgY29uc3Q7CisKICAgICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBvZmZz
ZXRPZkZvb3RlciA9IGVuZEF0b20gKiBhdG9tU2l6ZTsKKyAgICBzdGF0aWNfYXNzZXJ0KG9mZnNl
dE9mRm9vdGVyICsgc2l6ZW9mKEZvb3RlcikgPD0gYmxvY2tTaXplKTsKIAogcHJpdmF0ZToKICAg
ICBNYXJrZWRCbG9jayhWTSYsIEhhbmRsZSYpOwpAQCAtNjYwLDYgKzY2NiwxNyBAQCBpbmxpbmUg
dm9pZCBNYXJrZWRCbG9jazo6bm90ZU1hcmtlZCgpCiAgICAgICAgIG5vdGVNYXJrZWRTbG93KCk7
CiB9CiAKK2lubGluZSB2b2lkIE1hcmtlZEJsb2NrOjpzZXRWZXJpZmllck1lbW8odm9pZCogcCkK
K3sKKyAgICBmb290ZXIoKS5tX3ZlcmlmaWVyTWVtbyA9IHA7Cit9CisKK3RlbXBsYXRlPHR5cGVu
YW1lIFQ+CitUIE1hcmtlZEJsb2NrOjp2ZXJpZmllck1lbW8oKSBjb25zdAoreworICAgIHJldHVy
biBiaXR3aXNlX2Nhc3Q8VD4oZm9vdGVyKCkubV92ZXJpZmllck1lbW8pOworfQorCiB9IC8vIG5h
bWVzcGFjZSBKU0MKIAogbmFtZXNwYWNlIFdURiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9NYXJrZWRTcGFjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvTWFya2VkU3BhY2UuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRTcGFjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3Miw3
ICsyNzIsOCBAQCB2b2lkIE1hcmtlZFNwYWNlOjplbmFibGVQcmVjaXNlQWxsb2NhdGlvCiAgICAg
ICAgIG1fcHJlY2lzZUFsbG9jYXRpb25TZXQtPmFkZChhbGxvY2F0aW9uLT5jZWxsKCkpOwogfQog
Ci12b2lkIE1hcmtlZFNwYWNlOjp2aXNpdFdlYWtTZXRzKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQor
dGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgTWFya2VkU3BhY2U6OnZpc2l0V2Vha1Nl
dHMoVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBhdXRvIHZpc2l0ID0gWyZdIChXZWFrU2V0KiB3
ZWFrU2V0KSB7CiAgICAgICAgIHdlYWtTZXQtPnZpc2l0KHZpc2l0b3IpOwpAQCAtMjg0LDYgKzI4
NSw5IEBAIHZvaWQgTWFya2VkU3BhY2U6OnZpc2l0V2Vha1NldHMoU2xvdFZpc2kKICAgICAgICAg
bV9hY3RpdmVXZWFrU2V0cy5mb3JFYWNoKHZpc2l0KTsKIH0KIAordGVtcGxhdGUgdm9pZCBNYXJr
ZWRTcGFjZTo6dmlzaXRXZWFrU2V0cyhBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2
b2lkIE1hcmtlZFNwYWNlOjp2aXNpdFdlYWtTZXRzKFNsb3RWaXNpdG9yJik7CisKIHZvaWQgTWFy
a2VkU3BhY2U6OnJlYXBXZWFrU2V0cygpCiB7CiAgICAgYXV0byB2aXNpdCA9IFsmXSAoV2Vha1Nl
dCogd2Vha1NldCkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkU3Bh
Y2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRTcGFj
ZS5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJr
ZWRTcGFjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqICBDb3B5cmln
aHQgKEMpIDE5OTktMjAwMCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQogICogIENvcHly
aWdodCAoQykgMjAwMSBQZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQotICogIENvcHlyaWdodCAo
QykgMjAwMy0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmln
aHQgKEMpIDIwMDMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdl
bmVyYWwgUHVibGljCkBAIC0xMDUsNyArMTA1LDcgQEAgcHVibGljOgogICAgIAogICAgIHZvaWQg
cHJlcGFyZUZvckFsbG9jYXRpb24oKTsKIAotICAgIHZvaWQgdmlzaXRXZWFrU2V0cyhTbG90Vmlz
aXRvciYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgdmlzaXRXZWFrU2V0
cyhWaXNpdG9yJik7CiAgICAgdm9pZCByZWFwV2Vha1NldHMoKTsKIAogICAgIE1hcmtlZEJsb2Nr
U2V0JiBibG9ja3MoKSB7IHJldHVybiBtX2Jsb2NrczsgfQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50LmNwcAkocmV2aXNpb24gMjcyODMw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTUzLDYgKzUzLDcgQEAgdm9pZCBNYXJraW5nQ29uc3RyYWludDo6cmVzZXRT
dGF0cygpCiAKIHZvaWQgTWFya2luZ0NvbnN0cmFpbnQ6OmV4ZWN1dGUoU2xvdFZpc2l0b3ImIHZp
c2l0b3IpCiB7CisgICAgQVNTRVJUKCF2aXNpdG9yLmhlYXAoKS0+aXNNYXJraW5nRm9yR0NWZXJp
ZmllcigpKTsKICAgICBWaXNpdENvdW50ZXIgdmlzaXRDb3VudGVyKHZpc2l0b3IpOwogICAgIGV4
ZWN1dGVJbXBsKHZpc2l0b3IpOwogICAgIG1fbGFzdFZpc2l0Q291bnQgKz0gdmlzaXRDb3VudGVy
LnZpc2l0Q291bnQoKTsKQEAgLTYwLDYgKzYxLDEyIEBAIHZvaWQgTWFya2luZ0NvbnN0cmFpbnQ6
OmV4ZWN1dGUoU2xvdFZpc2kKICAgICAgICAgZGF0YUxvZygiKCIsIGFiYnJldmlhdGVkTmFtZSgp
LCAiIHZpc2l0ZWQgIiwgdmlzaXRDb3VudGVyLnZpc2l0Q291bnQoKSwgIiBpbiBleGVjdXRlKSIp
OwogfQogCit2b2lkIE1hcmtpbmdDb25zdHJhaW50OjpleGVjdXRlU3luY2hyb25vdXNseShBYnN0
cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIHByZXBhcmVUb0V4ZWN1dGVJbXBsKE5v
TG9ja2luZ05lY2Vzc2FyeSwgdmlzaXRvcik7CisgICAgZXhlY3V0ZUltcGwodmlzaXRvcik7Cit9
CisKIGRvdWJsZSBNYXJraW5nQ29uc3RyYWludDo6cXVpY2tXb3JrRXN0aW1hdGUoU2xvdFZpc2l0
b3ImKQogewogICAgIHJldHVybiAwOwpAQCAtNzIsNiArNzksNyBAQCBkb3VibGUgTWFya2luZ0Nv
bnN0cmFpbnQ6OndvcmtFc3RpbWF0ZShTCiAKIHZvaWQgTWFya2luZ0NvbnN0cmFpbnQ6OnByZXBh
cmVUb0V4ZWN1dGUoY29uc3QgQWJzdHJhY3RMb2NrZXImIGNvbnN0cmFpbnRTb2x2aW5nTG9ja2Vy
LCBTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKKyAgICBBU1NFUlQoIXZpc2l0b3IuaGVhcCgpLT5p
c01hcmtpbmdGb3JHQ1ZlcmlmaWVyKCkpOwogICAgIGRhdGFMb2dJZihPcHRpb25zOjpsb2dHQygp
LCBhYmJyZXZpYXRlZE5hbWUoKSk7CiAgICAgVmlzaXRDb3VudGVyIHZpc2l0Q291bnRlcih2aXNp
dG9yKTsKICAgICBwcmVwYXJlVG9FeGVjdXRlSW1wbChjb25zdHJhaW50U29sdmluZ0xvY2tlciwg
dmlzaXRvcik7CkBAIC04Miw2ICs5MCw3IEBAIHZvaWQgTWFya2luZ0NvbnN0cmFpbnQ6OnByZXBh
cmVUb0V4ZWN1dGUKIAogdm9pZCBNYXJraW5nQ29uc3RyYWludDo6ZG9QYXJhbGxlbFdvcmsoU2xv
dFZpc2l0b3ImIHZpc2l0b3IsIFNoYXJlZFRhc2s8dm9pZChTbG90VmlzaXRvciYpPiYgdGFzaykK
IHsKKyAgICBBU1NFUlQoIXZpc2l0b3IuaGVhcCgpLT5pc01hcmtpbmdGb3JHQ1ZlcmlmaWVyKCkp
OwogICAgIFZpc2l0Q291bnRlciB2aXNpdENvdW50ZXIodmlzaXRvcik7CiAgICAgdGFzay5ydW4o
dmlzaXRvcik7CiAgICAgaWYgKHZlcmJvc2VNYXJraW5nQ29uc3RyYWludCAmJiB2aXNpdENvdW50
ZXIudmlzaXRDb3VudCgpKQpAQCAtOTIsNyArMTAxLDcgQEAgdm9pZCBNYXJraW5nQ29uc3RyYWlu
dDo6ZG9QYXJhbGxlbFdvcmsoUwogICAgIH0KIH0KIAotdm9pZCBNYXJraW5nQ29uc3RyYWludDo6
cHJlcGFyZVRvRXhlY3V0ZUltcGwoY29uc3QgQWJzdHJhY3RMb2NrZXImLCBTbG90VmlzaXRvciYp
Cit2b2lkIE1hcmtpbmdDb25zdHJhaW50OjpwcmVwYXJlVG9FeGVjdXRlSW1wbChjb25zdCBBYnN0
cmFjdExvY2tlciYsIEFic3RyYWN0U2xvdFZpc2l0b3ImKQogewogfQogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50LmgJKHJldmlzaW9uIDI3
MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0y
MDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMzgsNiArMzgsNyBAQAogbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIE1h
cmtpbmdDb25zdHJhaW50U2V0OworY2xhc3MgQWJzdHJhY3RTbG90VmlzaXRvcjsKIGNsYXNzIFNs
b3RWaXNpdG9yOwogCiBjbGFzcyBNYXJraW5nQ29uc3RyYWludCB7CkBAIC02MCwxMSArNjEsMTMg
QEAgcHVibGljOgogICAgIAogICAgIHNpemVfdCBsYXN0VmlzaXRDb3VudCgpIGNvbnN0IHsgcmV0
dXJuIG1fbGFzdFZpc2l0Q291bnQ7IH0KICAgICAKKyAgICAvLyBUaGUgZm9sbG93aW5nIGZ1bmN0
aW9ucyBhcmUgb25seSB1c2VkIGJ5IHRoZSByZWFsIEdDIHZpYSB0aGUgTWFya2luZ0NvbnN0cmFp
bnRTb2x2ZXIuCisgICAgLy8gSGVuY2UsIHdlIG9ubHkgbmVlZCB0aGUgU2xvdFZpc2l0b3IgdmVy
c2lvbi4KICAgICB2b2lkIGV4ZWN1dGUoU2xvdFZpc2l0b3ImKTsKKworICAgIEpTX0VYUE9SVF9Q
UklWQVRFIHZpcnR1YWwgZG91YmxlIHF1aWNrV29ya0VzdGltYXRlKFNsb3RWaXNpdG9yJik7CiAg
ICAgCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgdmlydHVhbCBkb3VibGUgcXVpY2tXb3JrRXN0aW1h
dGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpOwotICAgIAotICAgIGRvdWJsZSB3b3JrRXN0aW1hdGUo
U2xvdFZpc2l0b3ImIHZpc2l0b3IpOworICAgIGRvdWJsZSB3b3JrRXN0aW1hdGUoU2xvdFZpc2l0
b3ImKTsKICAgICAKICAgICB2b2lkIHByZXBhcmVUb0V4ZWN1dGUoY29uc3QgQWJzdHJhY3RMb2Nr
ZXImIGNvbnN0cmFpbnRTb2x2aW5nTG9ja2VyLCBTbG90VmlzaXRvciYpOwogICAgIApAQCAtNzYs
OSArNzksMTQgQEAgcHVibGljOgogICAgIENvbnN0cmFpbnRQYXJhbGxlbGlzbSBwYXJhbGxlbGlz
bSgpIGNvbnN0IHsgcmV0dXJuIG1fcGFyYWxsZWxpc207IH0KIAogcHJvdGVjdGVkOgorICAgIHZp
cnR1YWwgdm9pZCBleGVjdXRlSW1wbChBYnN0cmFjdFNsb3RWaXNpdG9yJikgPSAwOwogICAgIHZp
cnR1YWwgdm9pZCBleGVjdXRlSW1wbChTbG90VmlzaXRvciYpID0gMDsKLSAgICBKU19FWFBPUlRf
UFJJVkFURSB2aXJ0dWFsIHZvaWQgcHJlcGFyZVRvRXhlY3V0ZUltcGwoY29uc3QgQWJzdHJhY3RM
b2NrZXImIGNvbnN0cmFpbnRTb2x2aW5nTG9ja2VyLCBTbG90VmlzaXRvciYpOwotICAgIAorICAg
IEpTX0VYUE9SVF9QUklWQVRFIHZpcnR1YWwgdm9pZCBwcmVwYXJlVG9FeGVjdXRlSW1wbChjb25z
dCBBYnN0cmFjdExvY2tlciYgY29uc3RyYWludFNvbHZpbmdMb2NrZXIsIEFic3RyYWN0U2xvdFZp
c2l0b3ImKTsKKworICAgIC8vIFRoaXMgZnVuY3Rpb24gaXMgb25seSB1c2VkIGJ5IHRoZSB2ZXJp
ZmllciBHQyB2aWEgSGVhcDo6dmVyaWZ5R0MoKS4KKyAgICAvLyBIZW5jZSwgd2Ugb25seSBuZWVk
IHRoZSBBYnN0cmFjdFNsb3RWaXNpdG9yIHZlcnNpb24uCisgICAgdm9pZCBleGVjdXRlU3luY2hy
b25vdXNseShBYnN0cmFjdFNsb3RWaXNpdG9yJik7CisKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNs
YXNzIE1hcmtpbmdDb25zdHJhaW50U2V0OyAvLyBTbyBpdCBjYW4gc2V0IG1faW5kZXguCiAgICAg
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludEV4ZWN1
dG9yUGFpci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtp
bmdDb25zdHJhaW50RXhlY3V0b3JQYWlyLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnRFeGVjdXRvclBhaXIuaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDU0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNs
dWRlIDx3dGYvRnVuY3Rpb24uaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEFic3RyYWN0
U2xvdFZpc2l0b3I7CitjbGFzcyBTbG90VmlzaXRvcjsKKworc3RydWN0IE1hcmtpbmdDb25zdHJh
aW50RXhlY3V0b3JQYWlyIHsKKyAgICBNYXJraW5nQ29uc3RyYWludEV4ZWN1dG9yUGFpcigKKyAg
ICAgICAgOjpGdW5jdGlvbjx2b2lkKEFic3RyYWN0U2xvdFZpc2l0b3ImKT4gYWJzdHJhY3RTbG90
VmlzaXRvckZ1bmMsCisgICAgICAgIDo6RnVuY3Rpb248dm9pZChTbG90VmlzaXRvciYpPiBzbG90
VmlzaXRvckZ1bmMpCisgICAgICAgIDogYWJzdHJhY3RTbG90VmlzaXRvckZ1bmMoV1RGTW92ZShh
YnN0cmFjdFNsb3RWaXNpdG9yRnVuYykpCisgICAgICAgICwgc2xvdFZpc2l0b3JGdW5jKFdURk1v
dmUoc2xvdFZpc2l0b3JGdW5jKSkKKyAgICB7IH0KKyAgICBNYXJraW5nQ29uc3RyYWludEV4ZWN1
dG9yUGFpcihNYXJraW5nQ29uc3RyYWludEV4ZWN1dG9yUGFpciYmKSA9IGRlZmF1bHQ7CisKKyAg
ICB2b2lkIGV4ZWN1dGUoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikgeyBhYnN0cmFjdFNs
b3RWaXNpdG9yRnVuYyh2aXNpdG9yKTsgfQorICAgIHZvaWQgZXhlY3V0ZShTbG90VmlzaXRvciYg
dmlzaXRvcikgeyBzbG90VmlzaXRvckZ1bmModmlzaXRvcik7IH0KKworICAgIDo6RnVuY3Rpb248
dm9pZChBYnN0cmFjdFNsb3RWaXNpdG9yJik+IGFic3RyYWN0U2xvdFZpc2l0b3JGdW5jOworICAg
IDo6RnVuY3Rpb248dm9pZChTbG90VmlzaXRvciYpPiBzbG90VmlzaXRvckZ1bmM7Cit9OworCisj
ZGVmaW5lIE1BS0VfTUFSS0lOR19DT05TVFJBSU5UX0VYRUNVVE9SX1BBSVIobGFtYmRhKSBcCisg
ICAgTWFya2luZ0NvbnN0cmFpbnRFeGVjdXRvclBhaXIoKGxhbWJkYSksIChsYW1iZGEpKQorCit9
IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtp
bmdDb25zdHJhaW50U2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9NYXJraW5nQ29uc3RyYWludFNldC5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50U2V0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC02Myw5ICs2Myw5IEBAIHZvaWQgTWFya2luZ0NvbnN0cmFpbnRTZXQ6OmRpZFN0YXJ0TWFy
a2kKICAgICBtX2l0ZXJhdGlvbiA9IDE7CiB9CiAKLXZvaWQgTWFya2luZ0NvbnN0cmFpbnRTZXQ6
OmFkZChDU3RyaW5nIGFiYnJldmlhdGVkTmFtZSwgQ1N0cmluZyBuYW1lLCA6OkZ1bmN0aW9uPHZv
aWQoU2xvdFZpc2l0b3ImKT4gZnVuY3Rpb24sIENvbnN0cmFpbnRWb2xhdGlsaXR5IHZvbGF0aWxp
dHksIENvbnN0cmFpbnRDb25jdXJyZW5jeSBjb25jdXJyZW5jeSwgQ29uc3RyYWludFBhcmFsbGVs
aXNtIHBhcmFsbGVsaXNtKQordm9pZCBNYXJraW5nQ29uc3RyYWludFNldDo6YWRkKENTdHJpbmcg
YWJicmV2aWF0ZWROYW1lLCBDU3RyaW5nIG5hbWUsIE1hcmtpbmdDb25zdHJhaW50RXhlY3V0b3JQ
YWlyJiYgZXhlY3V0b3JzLCBDb25zdHJhaW50Vm9sYXRpbGl0eSB2b2xhdGlsaXR5LCBDb25zdHJh
aW50Q29uY3VycmVuY3kgY29uY3VycmVuY3ksIENvbnN0cmFpbnRQYXJhbGxlbGlzbSBwYXJhbGxl
bGlzbSkKIHsKLSAgICBhZGQobWFrZVVuaXF1ZTxTaW1wbGVNYXJraW5nQ29uc3RyYWludD4oV1RG
TW92ZShhYmJyZXZpYXRlZE5hbWUpLCBXVEZNb3ZlKG5hbWUpLCBXVEZNb3ZlKGZ1bmN0aW9uKSwg
dm9sYXRpbGl0eSwgY29uY3VycmVuY3ksIHBhcmFsbGVsaXNtKSk7CisgICAgYWRkKG1ha2VVbmlx
dWU8U2ltcGxlTWFya2luZ0NvbnN0cmFpbnQ+KFdURk1vdmUoYWJicmV2aWF0ZWROYW1lKSwgV1RG
TW92ZShuYW1lKSwgV1RGTW92ZShleGVjdXRvcnMpLCB2b2xhdGlsaXR5LCBjb25jdXJyZW5jeSwg
cGFyYWxsZWxpc20pKTsKIH0KIAogdm9pZCBNYXJraW5nQ29uc3RyYWludFNldDo6YWRkKApAQCAt
MTY2LDEwICsxNjYsMTAgQEAgYm9vbCBNYXJraW5nQ29uc3RyYWludFNldDo6ZXhlY3V0ZUNvbnZl
cgogICAgIHJldHVybiAhc29sdmVyLmRpZFZpc2l0U29tZXRoaW5nKCk7CiB9CiAKLXZvaWQgTWFy
a2luZ0NvbnN0cmFpbnRTZXQ6OmV4ZWN1dGVBbGwoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2b2lk
IE1hcmtpbmdDb25zdHJhaW50U2V0OjpleGVjdXRlQWxsU3luY2hyb25vdXNseShBYnN0cmFjdFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGZvciAoYXV0byYgY29uc3RyYWludCA6IG1fc2V0
KQotICAgICAgICBjb25zdHJhaW50LT5leGVjdXRlKHZpc2l0b3IpOworICAgICAgICBjb25zdHJh
aW50LT5leGVjdXRlU3luY2hyb25vdXNseSh2aXNpdG9yKTsKICAgICBkYXRhTG9nSWYoT3B0aW9u
czo6bG9nR0MoKSwgIiAiKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
TWFya2luZ0NvbnN0cmFpbnRTZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9NYXJraW5nQ29uc3RyYWludFNldC5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludFNldC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTI2LDYgKzI2LDcgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiTWFya2luZ0NvbnN0
cmFpbnQuaCIKKyNpbmNsdWRlICJNYXJraW5nQ29uc3RyYWludEV4ZWN1dG9yUGFpci5oIgogI2lu
Y2x1ZGUgPHd0Zi9CaXRWZWN0b3IuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKQEAgLTQ2
LDIyICs0NywyNSBAQCBwdWJsaWM6CiAgICAgdm9pZCBhZGQoCiAgICAgICAgIENTdHJpbmcgYWJi
cmV2aWF0ZWROYW1lLAogICAgICAgICBDU3RyaW5nIG5hbWUsCi0gICAgICAgIDo6RnVuY3Rpb248
dm9pZChTbG90VmlzaXRvciYpPiwKKyAgICAgICAgTWFya2luZ0NvbnN0cmFpbnRFeGVjdXRvclBh
aXImJiwKICAgICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHksCiAgICAgICAgIENvbnN0cmFpbnRD
b25jdXJyZW5jeSA9IENvbnN0cmFpbnRDb25jdXJyZW5jeTo6Q29uY3VycmVudCwKICAgICAgICAg
Q29uc3RyYWludFBhcmFsbGVsaXNtID0gQ29uc3RyYWludFBhcmFsbGVsaXNtOjpTZXF1ZW50aWFs
KTsKICAgICAKICAgICB2b2lkIGFkZCgKICAgICAgICAgQ1N0cmluZyBhYmJyZXZpYXRlZE5hbWUs
IENTdHJpbmcgbmFtZSwKLSAgICAgICAgOjpGdW5jdGlvbjx2b2lkKFNsb3RWaXNpdG9yJik+IGZ1
bmMsCisgICAgICAgIE1hcmtpbmdDb25zdHJhaW50RXhlY3V0b3JQYWlyJiYgZXhlY3V0b3JzLAog
ICAgICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eSB2b2xhdGlsaXR5LAogICAgICAgICBDb25zdHJh
aW50UGFyYWxsZWxpc20gcGFyYWxsZWxpc20pCiAgICAgewotICAgICAgICBhZGQoYWJicmV2aWF0
ZWROYW1lLCBuYW1lLCBXVEZNb3ZlKGZ1bmMpLCB2b2xhdGlsaXR5LCBDb25zdHJhaW50Q29uY3Vy
cmVuY3k6OkNvbmN1cnJlbnQsIHBhcmFsbGVsaXNtKTsKKyAgICAgICAgYWRkKGFiYnJldmlhdGVk
TmFtZSwgbmFtZSwgV1RGTW92ZShleGVjdXRvcnMpLCB2b2xhdGlsaXR5LCBDb25zdHJhaW50Q29u
Y3VycmVuY3k6OkNvbmN1cnJlbnQsIHBhcmFsbGVsaXNtKTsKICAgICB9CiAgICAgCiAgICAgdm9p
ZCBhZGQoc3RkOjp1bmlxdWVfcHRyPE1hcmtpbmdDb25zdHJhaW50Pik7Ci0gICAgCisKKyAgICAv
LyBUaGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBhcmUgb25seSB1c2VkIGJ5IHRoZSByZWFsIEdDIHZp
YSB0aGUgTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXIuCisgICAgLy8gSGVuY2UsIHdlIG9ubHkgbmVl
ZCB0aGUgU2xvdFZpc2l0b3IgdmVyc2lvbi4KKwogICAgIC8vIEFzc3VtaW5nIHRoYXQgdGhlIG1h
cmsgc3RhY2tzIGFyZSBhbGwgZW1wdHksIHRoaXMgd2lsbCBnaXZlIHlvdSBhIGd1ZXNzIGFzIHRv
IHdoZXRoZXIgb3IKICAgICAvLyBub3QgdGhlIHdhdmVmcm9udCBpcyBhZHZhbmNpbmcuCiAgICAg
Ym9vbCBpc1dhdmVmcm9udEFkdmFuY2luZyhTbG90VmlzaXRvciYpOwpAQCAtNzAsMTMgKzc0LDE2
IEBAIHB1YmxpYzoKICAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhpcyBleGVjdXRlZCBhbGwgY29u
c3RyYWludHMgYW5kIG5vbmUgb2YgdGhlbSBwcm9kdWNlZCBuZXcgd29yay4gVGhpcwogICAgIC8v
IGFzc3VtZXMgdGhhdCB5b3UndmUgYWxyYWVkeSB2aXNpdGVkIHJvb3RzIGFuZCBkcmFpbmVkIGZy
b20gdGhlcmUuCiAgICAgYm9vbCBleGVjdXRlQ29udmVyZ2VuY2UoU2xvdFZpc2l0b3ImKTsKLSAg
ICAKKworICAgIC8vIFRoaXMgZnVuY3Rpb24gaXMgb25seSB1c2VkIGJ5IHRoZSB2ZXJpZmllciBH
QyB2aWEgSGVhcDo6dmVyaWZ5R0MoKS4KKyAgICAvLyBIZW5jZSwgd2Ugb25seSBuZWVkIHRoZSBB
YnN0cmFjdFNsb3RWaXNpdG9yIHZlcnNpb24uCisKICAgICAvLyBTaW1wbHkgcnVucyBhbGwgY29u
c3RyYWludHMgd2l0aG91dCBhbnkgc2hlbmFuaWdhbnMuCi0gICAgdm9pZCBleGVjdXRlQWxsKFNs
b3RWaXNpdG9yJik7Ci0gICAgCisgICAgdm9pZCBleGVjdXRlQWxsU3luY2hyb25vdXNseShBYnN0
cmFjdFNsb3RWaXNpdG9yJik7CisKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIE1hcmtpbmdD
b25zdHJhaW50U29sdmVyOwotICAgIAorCiAgICAgYm9vbCBleGVjdXRlQ29udmVyZ2VuY2VJbXBs
KFNsb3RWaXNpdG9yJik7CiAgICAgCiAgICAgSGVhcCYgbV9oZWFwOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50U29sdmVyLmNw
cAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2lu
Z0NvbnN0cmFpbnRTb2x2ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50U29sdmVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXIuaAkocmV2aXNpb24g
MjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnRT
b2x2ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TaW1w
bGVNYXJraW5nQ29uc3RyYWludC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQuY3BwCShyZXZpc2lvbiAyNzI4MzApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TaW1wbGVNYXJraW5nQ29uc3RyYWludC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0y
MDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMzAsMTEgKzMwLDExIEBAIG5hbWVzcGFjZSBKU0MgewogCiBTaW1wbGVN
YXJraW5nQ29uc3RyYWludDo6U2ltcGxlTWFya2luZ0NvbnN0cmFpbnQoCiAgICAgQ1N0cmluZyBh
YmJyZXZpYXRlZE5hbWUsIENTdHJpbmcgbmFtZSwKLSAgICA6OkZ1bmN0aW9uPHZvaWQoU2xvdFZp
c2l0b3ImKT4gZXhlY3V0ZUZ1bmN0aW9uLAorICAgIE1hcmtpbmdDb25zdHJhaW50RXhlY3V0b3JQ
YWlyJiYgZXhlY3V0b3JzLAogICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5IHZvbGF0aWxpdHksIENv
bnN0cmFpbnRDb25jdXJyZW5jeSBjb25jdXJyZW5jeSwKICAgICBDb25zdHJhaW50UGFyYWxsZWxp
c20gcGFyYWxsZWxpc20pCiAgICAgOiBNYXJraW5nQ29uc3RyYWludChXVEZNb3ZlKGFiYnJldmlh
dGVkTmFtZSksIFdURk1vdmUobmFtZSksIHZvbGF0aWxpdHksIGNvbmN1cnJlbmN5LCBwYXJhbGxl
bGlzbSkKLSAgICAsIG1fZXhlY3V0ZUZ1bmN0aW9uKFdURk1vdmUoZXhlY3V0ZUZ1bmN0aW9uKSkK
KyAgICAsIG1fZXhlY3V0b3JzKFdURk1vdmUoZXhlY3V0b3JzKSkKIHsKIH0KIApAQCAtNDIsMTAg
KzQyLDE0IEBAIFNpbXBsZU1hcmtpbmdDb25zdHJhaW50Ojp+U2ltcGxlTWFya2luZ0MKIHsKIH0K
IAotdm9pZCBTaW1wbGVNYXJraW5nQ29uc3RyYWludDo6ZXhlY3V0ZUltcGwoU2xvdFZpc2l0b3Im
IHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBTaW1wbGVNYXJraW5n
Q29uc3RyYWludDo6ZXhlY3V0ZUltcGxJbXBsKFZpc2l0b3ImIHZpc2l0b3IpCiB7Ci0gICAgbV9l
eGVjdXRlRnVuY3Rpb24odmlzaXRvcik7CisgICAgbV9leGVjdXRvcnMuZXhlY3V0ZSh2aXNpdG9y
KTsKIH0KIAordm9pZCBTaW1wbGVNYXJraW5nQ29uc3RyYWludDo6ZXhlY3V0ZUltcGwoQWJzdHJh
Y3RTbG90VmlzaXRvciYgdmlzaXRvcikgeyBleGVjdXRlSW1wbEltcGwodmlzaXRvcik7IH0KK3Zv
aWQgU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQ6OmV4ZWN1dGVJbXBsKFNsb3RWaXNpdG9yJiB2aXNp
dG9yKSB7IGV4ZWN1dGVJbXBsSW1wbCh2aXNpdG9yKTsgfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MK
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2ltcGxlTWFya2luZ0NvbnN0cmFp
bnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TaW1wbGVNYXJr
aW5nQ29uc3RyYWludC5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9TaW1wbGVNYXJraW5nQ29uc3RyYWludC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2LDcgKzI2
LDcgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiTWFya2luZ0NvbnN0cmFpbnQuaCIKLSNp
bmNsdWRlIDx3dGYvRnVuY3Rpb24uaD4KKyNpbmNsdWRlICJNYXJraW5nQ29uc3RyYWludEV4ZWN1
dG9yUGFpci5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIApAQCAtMzcsMjYgKzM3LDI4IEBAIGNsYXNz
IFNpbXBsZU1hcmtpbmdDb25zdHJhaW50IGZpbmFsIDogcHUKIHB1YmxpYzoKICAgICBKU19FWFBP
UlRfUFJJVkFURSBTaW1wbGVNYXJraW5nQ29uc3RyYWludCgKICAgICAgICAgQ1N0cmluZyBhYmJy
ZXZpYXRlZE5hbWUsIENTdHJpbmcgbmFtZSwKLSAgICAgICAgOjpGdW5jdGlvbjx2b2lkKFNsb3RW
aXNpdG9yJik+LAorICAgICAgICBNYXJraW5nQ29uc3RyYWludEV4ZWN1dG9yUGFpciYmLAogICAg
ICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eSwKICAgICAgICAgQ29uc3RyYWludENvbmN1cnJlbmN5
ID0gQ29uc3RyYWludENvbmN1cnJlbmN5OjpDb25jdXJyZW50LAogICAgICAgICBDb25zdHJhaW50
UGFyYWxsZWxpc20gPSBDb25zdHJhaW50UGFyYWxsZWxpc206OlNlcXVlbnRpYWwpOwogICAgIAog
ICAgIFNpbXBsZU1hcmtpbmdDb25zdHJhaW50KAogICAgICAgICBDU3RyaW5nIGFiYnJldmlhdGVk
TmFtZSwgQ1N0cmluZyBuYW1lLAotICAgICAgICA6OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3Im
KT4gZnVuYywKKyAgICAgICAgTWFya2luZ0NvbnN0cmFpbnRFeGVjdXRvclBhaXImJiBleGVjdXRv
cnMsCiAgICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5IHZvbGF0aWxpdHksCiAgICAgICAgIENv
bnN0cmFpbnRQYXJhbGxlbGlzbSBwYXJhbGxlbGlzbSkKLSAgICAgICAgOiBTaW1wbGVNYXJraW5n
Q29uc3RyYWludChhYmJyZXZpYXRlZE5hbWUsIG5hbWUsIFdURk1vdmUoZnVuYyksIHZvbGF0aWxp
dHksIENvbnN0cmFpbnRDb25jdXJyZW5jeTo6Q29uY3VycmVudCwgcGFyYWxsZWxpc20pCisgICAg
ICAgIDogU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQoYWJicmV2aWF0ZWROYW1lLCBuYW1lLCBXVEZN
b3ZlKGV4ZWN1dG9ycyksIHZvbGF0aWxpdHksIENvbnN0cmFpbnRDb25jdXJyZW5jeTo6Q29uY3Vy
cmVudCwgcGFyYWxsZWxpc20pCiAgICAgewogICAgIH0KICAgICAKICAgICBKU19FWFBPUlRfUFJJ
VkFURSB+U2ltcGxlTWFya2luZ0NvbnN0cmFpbnQoKSBmaW5hbDsKICAgICAKIHByaXZhdGU6Cisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gQUxXQVlTX0lOTElORSB2b2lkIGV4ZWN1dGVJ
bXBsSW1wbChWaXNpdG9yJik7CisgICAgdm9pZCBleGVjdXRlSW1wbChBYnN0cmFjdFNsb3RWaXNp
dG9yJikgZmluYWw7CiAgICAgdm9pZCBleGVjdXRlSW1wbChTbG90VmlzaXRvciYpIGZpbmFsOwog
Ci0gICAgOjpGdW5jdGlvbjx2b2lkKFNsb3RWaXNpdG9yJik+IG1fZXhlY3V0ZUZ1bmN0aW9uOwor
ICAgIE1hcmtpbmdDb25zdHJhaW50RXhlY3V0b3JQYWlyIG1fZXhlY3V0b3JzOwogfTsKIAogfSAv
LyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90Vmlz
aXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZp
c2l0b3IuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9TbG90VmlzaXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDEyLTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03NywxNSArNzcsMTAgQEAgc3Rh
dGljIHZvaWQgdmFsaWRhdGUoSlNDZWxsKiBjZWxsKQogI2VuZGlmCiAKIFNsb3RWaXNpdG9yOjpT
bG90VmlzaXRvcihIZWFwJiBoZWFwLCBDU3RyaW5nIGNvZGVOYW1lKQotICAgIDogbV9ieXRlc1Zp
c2l0ZWQoMCkKLSAgICAsIG1fdmlzaXRDb3VudCgwKQotICAgICwgbV9pc0luUGFyYWxsZWxNb2Rl
KGZhbHNlKQorICAgIDogQmFzZShoZWFwLCBjb2RlTmFtZSwgaGVhcC5tX29wYXF1ZVJvb3RzKQog
ICAgICwgbV9tYXJraW5nVmVyc2lvbihNYXJrZWRTcGFjZTo6aW5pdGlhbFZlcnNpb24pCi0gICAg
LCBtX2hlYXAoaGVhcCkKLSAgICAsIG1fY29kZU5hbWUoY29kZU5hbWUpCiAjaWYgQVNTRVJUX0VO
QUJMRUQKICAgICAsIG1faXNDaGVja2luZ0ZvckRlZmF1bHRNYXJrVmlvbGF0aW9uKGZhbHNlKQot
ICAgICwgbV9pc0RyYWluaW5nKGZhbHNlKQogI2VuZGlmCiB7CiB9CkBAIC0xMTcsOCArMTEyLDgg
QEAgdm9pZCBTbG90VmlzaXRvcjo6ZGlkU3RhcnRNYXJraW5nKCkKIAogdm9pZCBTbG90VmlzaXRv
cjo6cmVzZXQoKQogeworICAgIEFic3RyYWN0U2xvdFZpc2l0b3I6OnJlc2V0KCk7CiAgICAgbV9i
eXRlc1Zpc2l0ZWQgPSAwOwotICAgIG1fdmlzaXRDb3VudCA9IDA7CiAgICAgbV9oZWFwQW5hbHl6
ZXIgPSBudWxscHRyOwogICAgIFJFTEVBU0VfQVNTRVJUKCFtX2N1cnJlbnRDZWxsKTsKIH0KQEAg
LTIzMCw3ICsyMjUsNyBAQCB2b2lkIFNsb3RWaXNpdG9yOjphcHBlbmRKU0NlbGxPckF1eGlsaWFy
CiB2b2lkIFNsb3RWaXNpdG9yOjphcHBlbmRTbG93KEpTQ2VsbCogY2VsbCwgRGVwZW5kZW5jeSBk
ZXBlbmRlbmN5KQogewogICAgIGlmIChVTkxJS0VMWShtX2hlYXBBbmFseXplcikpCi0gICAgICAg
IG1faGVhcEFuYWx5emVyLT5hbmFseXplRWRnZShtX2N1cnJlbnRDZWxsLCBjZWxsLCBtX3Jvb3RN
YXJrUmVhc29uKTsKKyAgICAgICAgbV9oZWFwQW5hbHl6ZXItPmFuYWx5emVFZGdlKG1fY3VycmVu
dENlbGwsIGNlbGwsIHJvb3RNYXJrUmVhc29uKCkpOwogCiAgICAgYXBwZW5kSGlkZGVuU2xvd0lt
cGwoY2VsbCwgZGVwZW5kZW5jeSk7CiB9CkBAIC04MDcsMTIgKzgwMiwxNyBAQCBNYXJrU3RhY2tB
cnJheSYgU2xvdFZpc2l0b3I6OmNvcnJlc3BvbmRpCiAgICAgcmV0dXJuICptX2hlYXAubV9zaGFy
ZWRNdXRhdG9yTWFya1N0YWNrOwogfQogCitOT19SRVRVUk5fRFVFX1RPX0NSQVNIIHZvaWQgU2xv
dFZpc2l0b3I6OmFkZFBhcmFsbGVsQ29uc3RyYWludFRhc2soUmVmUHRyPFNoYXJlZFRhc2s8dm9p
ZChBYnN0cmFjdFNsb3RWaXNpdG9yJik+PikKK3sKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOworfQorCiB2b2lkIFNsb3RWaXNpdG9yOjphZGRQYXJhbGxlbENvbnN0cmFpbnRUYXNr
KFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoU2xvdFZpc2l0b3ImKT4+IHRhc2spCiB7CiAgICAgUkVM
RUFTRV9BU1NFUlQobV9jdXJyZW50U29sdmVyKTsKICAgICBSRUxFQVNFX0FTU0VSVChtX2N1cnJl
bnRDb25zdHJhaW50KTsKICAgICBSRUxFQVNFX0FTU0VSVCh0YXNrKTsKLSAgICAKKwogICAgIG1f
Y3VycmVudFNvbHZlci0+YWRkUGFyYWxsZWxUYXNrKHRhc2ssICptX2N1cnJlbnRDb25zdHJhaW50
KTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5oCShy
ZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRv
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw1OSArMjUsNzYgQEAKIAogI3ByYWdtYSBvbmNlCiAK
KyNpbmNsdWRlICJBYnN0cmFjdFNsb3RWaXNpdG9yLmgiCiAjaW5jbHVkZSAiSGFuZGxlVHlwZXMu
aCIKICNpbmNsdWRlICJJdGVyYXRpb25TdGF0dXMuaCIKLSNpbmNsdWRlICJNYXJrU3RhY2suaCIK
LSNpbmNsdWRlICJSb290TWFya1JlYXNvbi5oIgotI2luY2x1ZGUgIlZpc2l0UmFjZUtleS5oIgog
I2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL01vbm90b25pY1RpbWUuaD4K
LSNpbmNsdWRlIDx3dGYvU2hhcmVkVGFzay5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcu
aD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKLWNsYXNzIENvbnNlcnZhdGl2ZVJvb3RzOwogY2xhc3Mg
R0NUaHJlYWRTaGFyZWREYXRhOwotY2xhc3MgSGVhcDsKIGNsYXNzIEhlYXBDZWxsOwogY2xhc3Mg
SGVhcEFuYWx5emVyOwotY2xhc3MgTWFya2VkQmxvY2s7CiBjbGFzcyBNYXJraW5nQ29uc3RyYWlu
dDsKIGNsYXNzIE1hcmtpbmdDb25zdHJhaW50U29sdmVyOwotdGVtcGxhdGU8dHlwZW5hbWUgVD4g
Y2xhc3MgV2VhazsKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFRyYWl0cz4gY2xhc3Mg
V3JpdGVCYXJyaWVyQmFzZTsKIAogdHlwZWRlZiB1aW50MzJfdCBIZWFwVmVyc2lvbjsKIAotY2xh
c3MgU2xvdFZpc2l0b3IgeworY2xhc3MgU2xvdFZpc2l0b3IgZmluYWwgOiBwdWJsaWMgQWJzdHJh
Y3RTbG90VmlzaXRvciB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU2xvdFZpc2l0b3IpOwog
ICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogCisgICAgdXNpbmcgQmFzZSA9IEFic3RyYWN0
U2xvdFZpc2l0b3I7CisKICAgICBmcmllbmQgY2xhc3MgU2V0Q3VycmVudENlbGxTY29wZTsKICAg
ICBmcmllbmQgY2xhc3MgSGVhcDsKIAogcHVibGljOgorICAgIGNsYXNzIENvbnRleHQgeworICAg
IHB1YmxpYzoKKyAgICAgICAgQUxXQVlTX0lOTElORSBDb250ZXh0KEFic3RyYWN0U2xvdFZpc2l0
b3ImLCBIZWFwQ2VsbCopIHsgfQorICAgIH07CisKKyAgICBjbGFzcyBTdXBwcmVzc0dDVmVyaWZp
ZXJTY29wZSB7CisgICAgcHVibGljOgorICAgICAgICBTdXBwcmVzc0dDVmVyaWZpZXJTY29wZShT
bG90VmlzaXRvciYpIHsgfQorICAgIH07CisKKyAgICBjbGFzcyBEZWZhdWx0TWFya2luZ1Zpb2xh
dGlvbkFzc2VydGlvblNjb3BlIHsKKyAgICBwdWJsaWM6CisjaWYgQVNTRVJUX0VOQUJMRUQKKyAg
ICAgICAgRGVmYXVsdE1hcmtpbmdWaW9sYXRpb25Bc3NlcnRpb25TY29wZShTbG90VmlzaXRvciYg
dmlzaXRvcikKKyAgICAgICAgICAgIDogbV92aXNpdG9yKHZpc2l0b3IpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIG1fd2FzQ2hlY2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlvbiA9IG1fdmlzaXRv
ci5tX2lzQ2hlY2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlvbjsKKyAgICAgICAgICAgIG1fdmlz
aXRvci5tX2lzQ2hlY2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlvbiA9IGZhbHNlOworICAgICAg
ICB9CisKKyAgICAgICAgfkRlZmF1bHRNYXJraW5nVmlvbGF0aW9uQXNzZXJ0aW9uU2NvcGUoKQor
ICAgICAgICB7CisgICAgICAgICAgICBtX3Zpc2l0b3IubV9pc0NoZWNraW5nRm9yRGVmYXVsdE1h
cmtWaW9sYXRpb24gPSBtX3dhc0NoZWNraW5nRm9yRGVmYXVsdE1hcmtWaW9sYXRpb247CisgICAg
ICAgIH0KKworICAgIHByaXZhdGU6CisgICAgICAgIFNsb3RWaXNpdG9yJiBtX3Zpc2l0b3I7Cisg
ICAgICAgIGJvb2wgbV93YXNDaGVja2luZ0ZvckRlZmF1bHRNYXJrVmlvbGF0aW9uOworI2Vsc2UK
KyAgICAgICAgRGVmYXVsdE1hcmtpbmdWaW9sYXRpb25Bc3NlcnRpb25TY29wZShTbG90VmlzaXRv
ciYpIHsgfQorI2VuZGlmCisgICAgfTsKKwogICAgIFNsb3RWaXNpdG9yKEhlYXAmLCBDU3RyaW5n
IGNvZGVOYW1lKTsKICAgICB+U2xvdFZpc2l0b3IoKTsKIAotICAgIE1hcmtTdGFja0FycmF5JiBj
b2xsZWN0b3JNYXJrU3RhY2soKSB7IHJldHVybiBtX2NvbGxlY3RvclN0YWNrOyB9Ci0gICAgTWFy
a1N0YWNrQXJyYXkmIG11dGF0b3JNYXJrU3RhY2soKSB7IHJldHVybiBtX211dGF0b3JTdGFjazsg
fQotICAgIGNvbnN0IE1hcmtTdGFja0FycmF5JiBjb2xsZWN0b3JNYXJrU3RhY2soKSBjb25zdCB7
IHJldHVybiBtX2NvbGxlY3RvclN0YWNrOyB9Ci0gICAgY29uc3QgTWFya1N0YWNrQXJyYXkmIG11
dGF0b3JNYXJrU3RhY2soKSBjb25zdCB7IHJldHVybiBtX211dGF0b3JTdGFjazsgfQotICAgIAot
ICAgIFZNJiB2bSgpOwotICAgIGNvbnN0IFZNJiB2bSgpIGNvbnN0OwotICAgIEhlYXAqIGhlYXAo
KSBjb25zdDsKKyAgICB2b2lkIGFwcGVuZChjb25zdCBDb25zZXJ2YXRpdmVSb290cyYpIGZpbmFs
OwogCi0gICAgdm9pZCBhcHBlbmQoY29uc3QgQ29uc2VydmF0aXZlUm9vdHMmKTsKLSAgICAKICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBUcmFpdHM+IHZvaWQgYXBwZW5kKGNvbnN0
IFdyaXRlQmFycmllckJhc2U8VCwgVHJhaXRzPiYpOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQs
IHR5cGVuYW1lIFRyYWl0cz4gdm9pZCBhcHBlbmRIaWRkZW4oY29uc3QgV3JpdGVCYXJyaWVyQmFz
ZTxULCBUcmFpdHM+Jik7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgSXRlcmF0b3I+IHZvaWQgYXBw
ZW5kKEl0ZXJhdG9yIGJlZ2luICwgSXRlcmF0b3IgZW5kKTsKLSAgICB2b2lkIGFwcGVuZFZhbHVl
cyhjb25zdCBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24sIFJhd1ZhbHVlVHJhaXRzPFVua25vd24+
PiosIHNpemVfdCBjb3VudCk7Ci0gICAgdm9pZCBhcHBlbmRWYWx1ZXNIaWRkZW4oY29uc3QgV3Jp
dGVCYXJyaWVyQmFzZTxVbmtub3duLCBSYXdWYWx1ZVRyYWl0czxVbmtub3duPj4qLCBzaXplX3Qg
Y291bnQpOwotICAgIAorICAgIEFMV0FZU19JTkxJTkUgdm9pZCBhcHBlbmRWYWx1ZXMoY29uc3Qg
V3JpdGVCYXJyaWVyQmFzZTxVbmtub3duLCBSYXdWYWx1ZVRyYWl0czxVbmtub3duPj4qLCBzaXpl
X3QgY291bnQpOworICAgIEFMV0FZU19JTkxJTkUgdm9pZCBhcHBlbmRWYWx1ZXNIaWRkZW4oY29u
c3QgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duLCBSYXdWYWx1ZVRyYWl0czxVbmtub3duPj4qLCBz
aXplX3QgY291bnQpOworCiAgICAgLy8gVGhlc2UgZG9uJ3QgcmVxdWlyZSB5b3UgdG8gcHJvdmUg
dGhhdCB5b3UgaGF2ZSBhIFdyaXRlQmFycmllcjw+LiBUaGF0IG1ha2VzIHNlbnNlCiAgICAgLy8g
Zm9yOgogICAgIC8vCkBAIC04NywzMiArMTA0LDI3IEBAIHB1YmxpYzoKICAgICAvLwogICAgIC8v
IElmIHlvdSBhcmUgbm90IGEgcm9vdCBhbmQgeW91IGRvbid0IGtub3cgd2hhdCBraW5kIG9mIGJh
cnJpZXIgeW91IGhhdmUsIHRoZW4geW91CiAgICAgLy8gc2hvdWxkbid0IGNhbGwgdGhlc2UgbWV0
aG9kcy4KLSAgICB2b2lkIGFwcGVuZFVuYmFycmllcmVkKEpTVmFsdWUpOwotICAgIHZvaWQgYXBw
ZW5kVW5iYXJyaWVyZWQoSlNWYWx1ZSosIHNpemVfdCk7Ci0gICAgdm9pZCBhcHBlbmRVbmJhcnJp
ZXJlZChKU0NlbGwqKTsKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgYXBwZW5kVW5iYXJyaWVyZWQo
SlNWYWx1ZSk7CisgICAgQUxXQVlTX0lOTElORSB2b2lkIGFwcGVuZFVuYmFycmllcmVkKEpTVmFs
dWUqLCBzaXplX3QpOworICAgIHZvaWQgYXBwZW5kVW5iYXJyaWVyZWQoSlNDZWxsKikgZmluYWw7
CiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KICAgICB2b2lkIGFwcGVuZChjb25zdCBX
ZWFrPFQ+JiB3ZWFrKTsKICAgICAKLSAgICB2b2lkIGFwcGVuZEhpZGRlblVuYmFycmllcmVkKEpT
VmFsdWUpOwotICAgIHZvaWQgYXBwZW5kSGlkZGVuVW5iYXJyaWVyZWQoSlNDZWxsKik7Ci0KLSAg
ICBib29sIGFkZE9wYXF1ZVJvb3Qodm9pZCopOyAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIHJvb3Qg
d2FzIG5ldy4KLSAgICAKLSAgICBib29sIGNvbnRhaW5zT3BhcXVlUm9vdCh2b2lkKikgY29uc3Q7
CisgICAgQUxXQVlTX0lOTElORSB2b2lkIGFwcGVuZEhpZGRlblVuYmFycmllcmVkKEpTVmFsdWUp
OworICAgIHZvaWQgYXBwZW5kSGlkZGVuVW5iYXJyaWVyZWQoSlNDZWxsKikgZmluYWw7CiAKLSAg
ICBib29sIGlzRW1wdHkoKSB7IHJldHVybiBtX2NvbGxlY3RvclN0YWNrLmlzRW1wdHkoKSAmJiBt
X211dGF0b3JTdGFjay5pc0VtcHR5KCk7IH0KKyAgICBib29sIGlzRmlyc3RWaXNpdCgpIGNvbnN0
IGZpbmFsIHsgcmV0dXJuIG1faXNGaXJzdFZpc2l0OyB9CiAKLSAgICBib29sIGlzRmlyc3RWaXNp
dCgpIGNvbnN0IHsgcmV0dXJuIG1faXNGaXJzdFZpc2l0OyB9CisgICAgYm9vbCBpc01hcmtlZChj
b25zdCB2b2lkKikgY29uc3QgZmluYWw7CisgICAgYm9vbCBpc01hcmtlZChNYXJrZWRCbG9jayYs
IEhlYXBDZWxsKikgY29uc3QgZmluYWw7CisgICAgYm9vbCBpc01hcmtlZChQcmVjaXNlQWxsb2Nh
dGlvbiYsIEhlYXBDZWxsKikgY29uc3QgZmluYWw7CiAKICAgICB2b2lkIGRpZFN0YXJ0TWFya2lu
ZygpOwogICAgIHZvaWQgcmVzZXQoKTsKICAgICB2b2lkIGNsZWFyTWFya1N0YWNrcygpOwogCiAg
ICAgc2l6ZV90IGJ5dGVzVmlzaXRlZCgpIGNvbnN0IHsgcmV0dXJuIG1fYnl0ZXNWaXNpdGVkOyB9
Ci0gICAgc2l6ZV90IHZpc2l0Q291bnQoKSBjb25zdCB7IHJldHVybiBtX3Zpc2l0Q291bnQ7IH0K
LSAgICAKLSAgICB2b2lkIGFkZFRvVmlzaXRDb3VudChzaXplX3QgdmFsdWUpIHsgbV92aXNpdENv
dW50ICs9IHZhbHVlOyB9CiAKICAgICB2b2lkIGRvbmF0ZSgpOwogICAgIHZvaWQgZHJhaW4oTW9u
b3RvbmljVGltZSB0aW1lb3V0ID0gTW9ub3RvbmljVGltZTo6aW5maW5pdHkoKSk7CkBAIC0xMzUs
MjQgKzE0NywxOCBAQCBwdWJsaWM6CiAgICAgCiAgICAgLy8gVGhpcyBpbmZvcm1zIHRoZSBHQyBh
Ym91dCBhdXhpbGlhcnkgb2Ygc29tZSBzaXplIHRoYXQgd2UgYXJlIGtlZXBpbmcgYWxpdmUuIElm
IHlvdSBkb24ndCBkbwogICAgIC8vIHRoaXMgdGhlbiB0aGUgc3BhY2Ugd2lsbCBiZSBmcmVlZCBh
dCBlbmQgb2YgR0MuCi0gICAgdm9pZCBtYXJrQXV4aWxpYXJ5KGNvbnN0IHZvaWQqIGJhc2UpOwor
ICAgIHZvaWQgbWFya0F1eGlsaWFyeShjb25zdCB2b2lkKiBiYXNlKSBmaW5hbDsKIAotICAgIHZv
aWQgcmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKHNpemVfdCk7CisgICAgdm9pZCByZXBvcnRFeHRy
YU1lbW9yeVZpc2l0ZWQoc2l6ZV90KSBmaW5hbDsKICNpZiBFTkFCTEUoUkVTT1VSQ0VfVVNBR0Up
Ci0gICAgdm9pZCByZXBvcnRFeHRlcm5hbE1lbW9yeVZpc2l0ZWQoc2l6ZV90KTsKKyAgICB2b2lk
IHJlcG9ydEV4dGVybmFsTWVtb3J5VmlzaXRlZChzaXplX3QpIGZpbmFsOwogI2VuZGlmCiAgICAg
Ci0gICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7Ci0KLSAgICBib29sIGlzQW5hbHl6
aW5nSGVhcCgpIGNvbnN0IHsgcmV0dXJuICEhbV9oZWFwQW5hbHl6ZXI7IH0KLSAgICBIZWFwQW5h
bHl6ZXIqIGhlYXBBbmFseXplcigpIGNvbnN0IHsgcmV0dXJuIG1faGVhcEFuYWx5emVyOyB9Ci0g
ICAgCi0gICAgUm9vdE1hcmtSZWFzb24gcm9vdE1hcmtSZWFzb24oKSBjb25zdCB7IHJldHVybiBt
X3Jvb3RNYXJrUmVhc29uOyB9Ci0gICAgdm9pZCBzZXRSb290TWFya1JlYXNvbihSb290TWFya1Jl
YXNvbiByZWFzb24pIHsgbV9yb290TWFya1JlYXNvbiA9IHJlYXNvbjsgfQorICAgIHZvaWQgZHVt
cChQcmludFN0cmVhbSYpIGNvbnN0IGZpbmFsOwogCiAgICAgSGVhcFZlcnNpb24gbWFya2luZ1Zl
cnNpb24oKSBjb25zdCB7IHJldHVybiBtX21hcmtpbmdWZXJzaW9uOyB9CiAKLSAgICBib29sIG11
dGF0b3JJc1N0b3BwZWQoKSBjb25zdCB7IHJldHVybiBtX211dGF0b3JJc1N0b3BwZWQ7IH0KKyAg
ICBib29sIG11dGF0b3JJc1N0b3BwZWQoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX211dGF0b3JJ
c1N0b3BwZWQ7IH0KICAgICAKICAgICBMb2NrJiByaWdodFRvUnVuKCkgeyByZXR1cm4gbV9yaWdo
dFRvUnVuOyB9CiAgICAgCkBAIC0xNjQsMjAgKzE3MCwxNyBAQCBwdWJsaWM6CiAgICAgCiAgICAg
dm9pZCBvcHRpbWl6ZUZvclN0b3BwZWRNdXRhdG9yKCk7CiAgICAgCi0gICAgdm9pZCBkaWRSYWNl
KGNvbnN0IFZpc2l0UmFjZUtleSYpOworICAgIHZvaWQgZGlkUmFjZShjb25zdCBWaXNpdFJhY2VL
ZXkmKSBmaW5hbDsKICAgICB2b2lkIGRpZFJhY2UoSlNDZWxsKiBjZWxsLCBjb25zdCBjaGFyKiBy
ZWFzb24pIHsgZGlkUmFjZShWaXNpdFJhY2VLZXkoY2VsbCwgcmVhc29uKSk7IH0KICAgICAKLSAg
ICB2b2lkIHZpc2l0QXNDb25zdHJhaW50KGNvbnN0IEpTQ2VsbCopOworICAgIHZvaWQgdmlzaXRB
c0NvbnN0cmFpbnQoY29uc3QgSlNDZWxsKikgZmluYWw7CiAgICAgCiAgICAgYm9vbCBkaWRSZWFj
aFRlcm1pbmF0aW9uKCk7CiAgICAgCi0gICAgdm9pZCBzZXRJZ25vcmVOZXdPcGFxdWVSb290cyhi
b29sIHZhbHVlKSB7IG1faWdub3JlTmV3T3BhcXVlUm9vdHMgPSB2YWx1ZTsgfQotCiAgICAgdm9p
ZCBkb25hdGVBbGwoKTsKLSAgICAKLSAgICBjb25zdCBjaGFyKiBjb2RlTmFtZSgpIGNvbnN0IHsg
cmV0dXJuIG1fY29kZU5hbWUuZGF0YSgpOyB9Ci0gICAgCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUg
dm9pZCBhZGRQYXJhbGxlbENvbnN0cmFpbnRUYXNrKFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoU2xv
dFZpc2l0b3ImKT4+KTsKKworICAgIE5PX1JFVFVSTl9EVUVfVE9fQ1JBU0ggdm9pZCBhZGRQYXJh
bGxlbENvbnN0cmFpbnRUYXNrKFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoQWJzdHJhY3RTbG90Vmlz
aXRvciYpPj4pIGZpbmFsOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgYWRkUGFyYWxsZWxD
b25zdHJhaW50VGFzayhSZWZQdHI8U2hhcmVkVGFzazx2b2lkKFNsb3RWaXNpdG9yJik+PikgZmlu
YWw7CiAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIFBhcmFsbGVsTW9kZUVuYWJsZXI7CkBA
IC0yMTYsMzkgKzIxOSwyNSBAQCBwcml2YXRlOgogCiAgICAgTWFya1N0YWNrQXJyYXkmIGNvcnJl
c3BvbmRpbmdHbG9iYWxTdGFjayhNYXJrU3RhY2tBcnJheSYpOwogCi0gICAgTWFya1N0YWNrQXJy
YXkgbV9jb2xsZWN0b3JTdGFjazsKLSAgICBNYXJrU3RhY2tBcnJheSBtX211dGF0b3JTdGFjazsK
LSAgICAKLSAgICBzaXplX3QgbV9ieXRlc1Zpc2l0ZWQ7Ci0gICAgc2l6ZV90IG1fdmlzaXRDb3Vu
dDsKLSAgICBzaXplX3QgbV9ub25DZWxsVmlzaXRDb3VudCB7IDAgfTsgLy8gVXNlZCBmb3IgaW5j
cmVtZW50YWwgZHJhaW5pbmcsIGlnbm9yZWQgb3RoZXJ3aXNlLgotICAgIENoZWNrZWRTaXplIG1f
ZXh0cmFNZW1vcnlTaXplIHsgMCB9OwotICAgIGJvb2wgbV9pc0luUGFyYWxsZWxNb2RlOwotICAg
IGJvb2wgbV9pZ25vcmVOZXdPcGFxdWVSb290cyB7IGZhbHNlIH07IC8vIFVzZWZ1bCBhcyBhIGRl
YnVnZ2luZyBtb2RlLgorICAgIGJvb2wgbV9pc0luUGFyYWxsZWxNb2RlIHsgZmFsc2UgfTsKIAog
ICAgIEhlYXBWZXJzaW9uIG1fbWFya2luZ1ZlcnNpb247Ci0gICAgCi0gICAgSGVhcCYgbV9oZWFw
OworCisgICAgc2l6ZV90IG1fYnl0ZXNWaXNpdGVkIHsgMCB9OworICAgIHNpemVfdCBtX25vbkNl
bGxWaXNpdENvdW50IHsgMCB9OyAvLyBVc2VkIGZvciBpbmNyZW1lbnRhbCBkcmFpbmluZywgaWdu
b3JlZCBvdGhlcndpc2UuCisgICAgQ2hlY2tlZFNpemUgbV9leHRyYU1lbW9yeVNpemUgeyAwIH07
CiAKICAgICBIZWFwQW5hbHl6ZXIqIG1faGVhcEFuYWx5emVyIHsgbnVsbHB0ciB9OwogICAgIEpT
Q2VsbCogbV9jdXJyZW50Q2VsbCB7IG51bGxwdHIgfTsKLSAgICBSb290TWFya1JlYXNvbiBtX3Jv
b3RNYXJrUmVhc29uIHsgUm9vdE1hcmtSZWFzb246Ok5vbmUgfTsKICAgICBib29sIG1faXNGaXJz
dFZpc2l0IHsgZmFsc2UgfTsKICAgICBib29sIG1fbXV0YXRvcklzU3RvcHBlZCB7IGZhbHNlIH07
CiAgICAgYm9vbCBtX2Nhbk9wdGltaXplRm9yU3RvcHBlZE11dGF0b3IgeyBmYWxzZSB9OwogICAg
IExvY2sgbV9yaWdodFRvUnVuOwogICAgIAotICAgIENTdHJpbmcgbV9jb2RlTmFtZTsKLSAgICAK
LSAgICBNYXJraW5nQ29uc3RyYWludCogbV9jdXJyZW50Q29uc3RyYWludCB7IG51bGxwdHIgfTsK
LSAgICBNYXJraW5nQ29uc3RyYWludFNvbHZlciogbV9jdXJyZW50U29sdmVyIHsgbnVsbHB0ciB9
OwotICAgIAogICAgIC8vIFB1dCBwYWRkaW5nIGhlcmUgdG8gbWl0aWdhdGUgZmFsc2Ugc2hhcmlu
ZyBiZXR3ZWVuIG11bHRpcGxlIFNsb3RWaXNpdG9ycy4KICAgICBjaGFyIHBhZGRpbmdbNjRdOwot
cHVibGljOgogI2lmIEFTU0VSVF9FTkFCTEVECi0gICAgYm9vbCBtX2lzQ2hlY2tpbmdGb3JEZWZh
dWx0TWFya1Zpb2xhdGlvbjsKLSAgICBib29sIG1faXNEcmFpbmluZzsKKyAgICBib29sIG1faXND
aGVja2luZ0ZvckRlZmF1bHRNYXJrVmlvbGF0aW9uIHsgZmFsc2UgfTsKICNlbmRpZgogfTsKIApA
QCAtMjcxLDIzICsyNjAsNCBAQCBwcml2YXRlOgogICAgIFNsb3RWaXNpdG9yJiBtX3N0YWNrOwog
fTsKIAotY2xhc3MgU2V0Um9vdE1hcmtSZWFzb25TY29wZSB7Ci1wdWJsaWM6Ci0gICAgU2V0Um9v
dE1hcmtSZWFzb25TY29wZShTbG90VmlzaXRvciYgdmlzaXRvciwgUm9vdE1hcmtSZWFzb24gcmVh
c29uKQotICAgICAgICA6IG1fdmlzaXRvcih2aXNpdG9yKQotICAgICAgICAsIG1fcHJldmlvdXNS
ZWFzb24odmlzaXRvci5yb290TWFya1JlYXNvbigpKQotICAgIHsKLSAgICAgICAgbV92aXNpdG9y
LnNldFJvb3RNYXJrUmVhc29uKHJlYXNvbik7Ci0gICAgfQotCi0gICAgflNldFJvb3RNYXJrUmVh
c29uU2NvcGUoKQotICAgIHsKLSAgICAgICAgbV92aXNpdG9yLnNldFJvb3RNYXJrUmVhc29uKG1f
cHJldmlvdXNSZWFzb24pOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBTbG90VmlzaXRvciYgbV92
aXNpdG9yOwotICAgIFJvb3RNYXJrUmVhc29uIG1fcHJldmlvdXNSZWFzb247Ci19OwotCiB9IC8v
IG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNp
dG9ySW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Ns
b3RWaXNpdG9ySW5saW5lcy5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9TbG90VmlzaXRvcklubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI1LDkg
KzI1LDEwIEBACiAKICNwcmFnbWEgb25jZQogCisjaW5jbHVkZSAiQWJzdHJhY3RTbG90VmlzaXRv
cklubGluZXMuaCIKKyNpbmNsdWRlICJNYXJrZWRCbG9jay5oIgorI2luY2x1ZGUgIlByZWNpc2VB
bGxvY2F0aW9uLmgiCiAjaW5jbHVkZSAiU2xvdFZpc2l0b3IuaCIKLSNpbmNsdWRlICJXZWFrLmgi
Ci0jaW5jbHVkZSAiV2Vha0lubGluZXMuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAgLTEzNCwy
MSArMTM1LDE5IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBTbG90VmlzaXRvcjo6YXBwZW5kVmEKICAg
ICAgICAgYXBwZW5kSGlkZGVuKGJhcnJpZXJzW2ldKTsKIH0KIAotaW5saW5lIGJvb2wgU2xvdFZp
c2l0b3I6OmFkZE9wYXF1ZVJvb3Qodm9pZCogcHRyKQorQUxXQVlTX0lOTElORSBib29sIFNsb3RW
aXNpdG9yOjppc01hcmtlZChjb25zdCB2b2lkKiBwKSBjb25zdAogewotICAgIGlmICghcHRyKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKG1faWdub3JlTmV3T3BhcXVlUm9vdHMpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoIWhlYXAoKS0+bV9vcGFxdWVSb290cy5hZGQo
cHRyKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1fdmlzaXRDb3VudCsrOwotICAgIHJl
dHVybiB0cnVlOworICAgIHJldHVybiBoZWFwKCktPmlzTWFya2VkKHApOwogfQogCi1pbmxpbmUg
Ym9vbCBTbG90VmlzaXRvcjo6Y29udGFpbnNPcGFxdWVSb290KHZvaWQqIHB0cikgY29uc3QKK0FM
V0FZU19JTkxJTkUgYm9vbCBTbG90VmlzaXRvcjo6aXNNYXJrZWQoTWFya2VkQmxvY2smIGNvbnRh
aW5lciwgSGVhcENlbGwqIGNlbGwpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGhlYXAoKS0+bV9vcGFx
dWVSb290cy5jb250YWlucyhwdHIpOworICAgIHJldHVybiBjb250YWluZXIuaXNNYXJrZWQobWFy
a2luZ1ZlcnNpb24oKSwgY2VsbCk7Cit9CisKK0FMV0FZU19JTkxJTkUgYm9vbCBTbG90VmlzaXRv
cjo6aXNNYXJrZWQoUHJlY2lzZUFsbG9jYXRpb24mIGNvbnRhaW5lciwgSGVhcENlbGwqIGNlbGwp
IGNvbnN0Cit7CisgICAgcmV0dXJuIGNvbnRhaW5lci5pc01hcmtlZChtYXJraW5nVmVyc2lvbigp
LCBjZWxsKTsKIH0KIAogaW5saW5lIHZvaWQgU2xvdFZpc2l0b3I6OnJlcG9ydEV4dHJhTWVtb3J5
VmlzaXRlZChzaXplX3Qgc2l6ZSkKQEAgLTE2OSwyMSArMTY4LDYgQEAgaW5saW5lIHZvaWQgU2xv
dFZpc2l0b3I6OnJlcG9ydEV4dGVybmFsTQogfQogI2VuZGlmCiAKLWlubGluZSBIZWFwKiBTbG90
VmlzaXRvcjo6aGVhcCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuICZtX2hlYXA7Ci19Ci0KLWlubGlu
ZSBWTSYgU2xvdFZpc2l0b3I6OnZtKCkKLXsKLSAgICByZXR1cm4gbV9oZWFwLnZtKCk7Ci19Ci0K
LWlubGluZSBjb25zdCBWTSYgU2xvdFZpc2l0b3I6OnZtKCkgY29uc3QKLXsKLSAgICByZXR1cm4g
bV9oZWFwLnZtKCk7Ci19Ci0KIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CiBJdGVyYXRpb25TdGF0
dXMgU2xvdFZpc2l0b3I6OmZvckVhY2hNYXJrU3RhY2soY29uc3QgRnVuYyYgZnVuYykKIHsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yTWFjcm9zLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3JNYWNyb3MuaAko
bm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvck1h
Y3Jvcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTIzIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKK25hbWVzcGFjZSBK
U0MgeworCitjbGFzcyBBYnN0cmFjdFNsb3RWaXNpdG9yOworY2xhc3MgSlNDZWxsOworY2xhc3Mg
U2xvdFZpc2l0b3I7CisKKyNkZWZpbmUgVU5VU0VEX01PRElGSUVSX0FSR1VNRU5UIC8qIHVudXNl
ZCAqLworCisjZGVmaW5lIERFQ0xBUkVfVU5VU0VEX1NUUlVDVF9UT19URVJNSU5BVEVfVklTSVRf
TUFDUk9fRVhQQU5ERVJfSU1QTChjb3VudGVyKSBcCisgICAgc3RydWN0IFVudXNlZFNsb3RWaXNp
dG9yTWFjcm9TdHJ1Y3RTb1dlQ2FuSGF2ZUFTZW1pY29sb24jI2NvdW50ZXIgeyB9CisKKyNkZWZp
bmUgREVDTEFSRV9VTlVTRURfU1RSVUNUX1RPX1RFUk1JTkFURV9WSVNJVF9NQUNST19FWFBBTkRF
Uihjb3VudGVyKSBcCisgICAgREVDTEFSRV9VTlVTRURfU1RSVUNUX1RPX1RFUk1JTkFURV9WSVNJ
VF9NQUNST19FWFBBTkRFUl9JTVBMKGNvdW50ZXIpCisKKyNkZWZpbmUgREVDTEFSRV9VTlVTRURf
U1RSVUNUX1RPX1RFUk1JTkFURV9WSVNJVF9NQUNSTyBcCisgICAgREVDTEFSRV9VTlVTRURfU1RS
VUNUX1RPX1RFUk1JTkFURV9WSVNJVF9NQUNST19FWFBBTkRFUihfX0NPVU5URVJfXykKKworLy8g
TWFjcm9zIGZvciB2aXNpdEFnZ3JlZ2F0ZSgpLgorCisjZGVmaW5lIERFQ0xBUkVfVklTSVRfQUdH
UkVHQVRFX1dJVEhfTU9ESUZJRVIocG9zdE1vZGlmaWVyKSBcCitwcml2YXRlOiBcCisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gQUxXQVlTX0lOTElORSB2b2lkIHZpc2l0QWdncmVnYXRl
SW1wbChWaXNpdG9yJikgcG9zdE1vZGlmaWVyOyBcCitwdWJsaWM6IFwKKyAgICB2b2lkIHZpc2l0
QWdncmVnYXRlKEFic3RyYWN0U2xvdFZpc2l0b3ImKSBwb3N0TW9kaWZpZXI7IFwKKyAgICB2b2lk
IHZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJikgcG9zdE1vZGlmaWVyCisKKyNkZWZpbmUgREVD
TEFSRV9WSVNJVF9BR0dSRUdBVEUgXAorICAgIERFQ0xBUkVfVklTSVRfQUdHUkVHQVRFX1dJVEhf
TU9ESUZJRVIoVU5VU0VEX01PRElGSUVSX0FSR1VNRU5UKQorCisjZGVmaW5lIERFRklORV9WSVNJ
VF9BR0dSRUdBVEVfV0lUSF9NT0RJRklFUihjbGFzc05hbWUsIHBvc3RNb2RpZmllcikgXAorICAg
IHZvaWQgY2xhc3NOYW1lOjp2aXNpdEFnZ3JlZ2F0ZShBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNp
dG9yKSBwb3N0TW9kaWZpZXIgeyB2aXNpdEFnZ3JlZ2F0ZUltcGwodmlzaXRvcik7IH0gXAorICAg
IHZvaWQgY2xhc3NOYW1lOjp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYgdmlzaXRvcikgcG9z
dE1vZGlmaWVyIHsgdmlzaXRBZ2dyZWdhdGVJbXBsKHZpc2l0b3IpOyB9IFwKKyAgICBERUNMQVJF
X1VOVVNFRF9TVFJVQ1RfVE9fVEVSTUlOQVRFX1ZJU0lUX01BQ1JPCisKKyNkZWZpbmUgREVGSU5F
X1ZJU0lUX0FHR1JFR0FURShjbGFzc05hbWUpIFwKKyAgICBERUZJTkVfVklTSVRfQUdHUkVHQVRF
X1dJVEhfTU9ESUZJRVIoY2xhc3NOYW1lLCBVTlVTRURfTU9ESUZJRVJfQVJHVU1FTlQpCisKKy8v
IE1hY3JvcyBmb3Igc3RhdGljIHZpc2l0Q2hpbGRyZW4oKS4KKworI2RlZmluZSBERUNMQVJFX1ZJ
U0lUX0NISUxEUkVOX1dJVEhfTU9ESUZJRVIocHJlTW9kaWZpZXIpIFwKK3ByaXZhdGU6IFwKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiBBTFdBWVNfSU5MSU5FIHN0YXRpYyB2b2lkIHZp
c2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCosIFZpc2l0b3ImKTsgXAorcHVibGljOiBcCisgICAgcHJl
TW9kaWZpZXIgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBBYnN0cmFjdFNsb3RW
aXNpdG9yJik7IFwKKyAgICBwcmVNb2RpZmllciBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpT
Q2VsbCosIFNsb3RWaXNpdG9yJikKKworI2RlZmluZSBERUNMQVJFX1ZJU0lUX0NISUxEUkVOIFwK
KyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOX1dJVEhfTU9ESUZJRVIoVU5VU0VEX01PRElGSUVS
X0FSR1VNRU5UKQorCisjZGVmaW5lIERFRklORV9WSVNJVF9DSElMRFJFTl9XSVRIX01PRElGSUVS
KHByZU1vZGlmaWVyLCBjbGFzc05hbWUpIFwKKyAgICBwcmVNb2RpZmllciB2b2lkIGNsYXNzTmFt
ZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0
b3IpIFwKKyAgICB7IFwKKyAgICAgICAgQWJzdHJhY3RTbG90VmlzaXRvcjo6Q29udGV4dCBjb250
ZXh0KHZpc2l0b3IsIGNlbGwpOyBcCisgICAgICAgIHZpc2l0Q2hpbGRyZW5JbXBsKGNlbGwsIHZp
c2l0b3IpOyBcCisgICAgfSBcCisgICAgcHJlTW9kaWZpZXIgdm9pZCBjbGFzc05hbWU6OnZpc2l0
Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikgeyB2aXNpdENoaWxk
cmVuSW1wbChjZWxsLCB2aXNpdG9yKTsgfSBcCisgICAgREVDTEFSRV9VTlVTRURfU1RSVUNUX1RP
X1RFUk1JTkFURV9WSVNJVF9NQUNSTworCisjZGVmaW5lIERFRklORV9WSVNJVF9DSElMRFJFTihj
bGFzc05hbWUpIFwKKyAgICBERUZJTkVfVklTSVRfQ0hJTERSRU5fV0lUSF9NT0RJRklFUihVTlVT
RURfTU9ESUZJRVJfQVJHVU1FTlQsIGNsYXNzTmFtZSkKKworLy8gTWFjcm9zIGZvciBzdGF0aWMg
dmlzaXRPdXRwdXRDb25zdHJhaW50cygpLgorCisjZGVmaW5lIERFQ0xBUkVfVklTSVRfT1VUUFVU
X0NPTlNUUkFJTlRTX1dJVEhfTU9ESUZJRVIocHJlTW9kaWZpZXIpIFwKK3ByaXZhdGU6IFwKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiBBTFdBWVNfSU5MSU5FIHN0YXRpYyB2b2lkIHZp
c2l0T3V0cHV0Q29uc3RyYWludHNJbXBsKEpTQ2VsbCosIFZpc2l0b3ImKTsgXAorcHVibGljOiBc
CisgICAgcHJlTW9kaWZpZXIgc3RhdGljIHZvaWQgdmlzaXRPdXRwdXRDb25zdHJhaW50cyhKU0Nl
bGwqLCBBYnN0cmFjdFNsb3RWaXNpdG9yJik7IFwKKyAgICBwcmVNb2RpZmllciBzdGF0aWMgdm9p
ZCB2aXNpdE91dHB1dENvbnN0cmFpbnRzKEpTQ2VsbCosIFNsb3RWaXNpdG9yJikKKworI2RlZmlu
ZSBERUNMQVJFX1ZJU0lUX09VVFBVVF9DT05TVFJBSU5UUyBcCisgICAgREVDTEFSRV9WSVNJVF9P
VVRQVVRfQ09OU1RSQUlOVFNfV0lUSF9NT0RJRklFUihVTlVTRURfTU9ESUZJRVJfQVJHVU1FTlQp
CisKKyNkZWZpbmUgREVGSU5FX1ZJU0lUX09VVFBVVF9DT05TVFJBSU5UU19XSVRIX01PRElGSUVS
KHByZU1vZGlmaWVyLCBjbGFzc05hbWUpIFwKKyAgICBwcmVNb2RpZmllciB2b2lkIGNsYXNzTmFt
ZTo6dmlzaXRPdXRwdXRDb25zdHJhaW50cyhKU0NlbGwqIGNlbGwsIEFic3RyYWN0U2xvdFZpc2l0
b3ImIHZpc2l0b3IpIFwKKyAgICB7IFwKKyAgICAgICAgQWJzdHJhY3RTbG90VmlzaXRvcjo6Q29u
dGV4dCBjb250ZXh0KHZpc2l0b3IsIGNlbGwpOyBcCisgICAgICAgIHZpc2l0T3V0cHV0Q29uc3Ry
YWludHNJbXBsKGNlbGwsIHZpc2l0b3IpOyBcCisgICAgfSBcCisgICAgcHJlTW9kaWZpZXIgdm9p
ZCBjbGFzc05hbWU6OnZpc2l0T3V0cHV0Q29uc3RyYWludHMoSlNDZWxsKiBjZWxsLCBTbG90Vmlz
aXRvciYgdmlzaXRvcikgeyB2aXNpdE91dHB1dENvbnN0cmFpbnRzSW1wbChjZWxsLCB2aXNpdG9y
KTsgfSBcCisgICAgREVDTEFSRV9VTlVTRURfU1RSVUNUX1RPX1RFUk1JTkFURV9WSVNJVF9NQUNS
TworCisjZGVmaW5lIERFRklORV9WSVNJVF9PVVRQVVRfQ09OU1RSQUlOVFMoY2xhc3NOYW1lKSBc
CisgICAgREVGSU5FX1ZJU0lUX09VVFBVVF9DT05TVFJBSU5UU19XSVRIX01PRElGSUVSKFVOVVNF
RF9NT0RJRklFUl9BUkdVTUVOVCwgY2xhc3NOYW1lKQorCisvLyBNYWNyb3MgZm9yIHZpc2l0QWRk
aXRpb25hbENoaWxkcmVuKCkuCisKKyNkZWZpbmUgREVGSU5FX1ZJU0lUX0FERElUSU9OQUxfQ0hJ
TERSRU4oY2xhc3NOYW1lKSBcCisgICAgdGVtcGxhdGUgdm9pZCBjbGFzc05hbWU6OnZpc2l0QWRk
aXRpb25hbENoaWxkcmVuKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpOyBcCisgICAgdGVtcGxh
dGUgdm9pZCBjbGFzc05hbWU6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0
b3ImKQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwordXNpbmcgSlNDOjpBYnN0cmFjdFNsb3RWaXNp
dG9yOwordXNpbmcgSlNDOjpKU0NlbGw7Cit1c2luZyBKU0M6OlNsb3RWaXNpdG9yOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3Vic3BhY2UuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdWJzcGFjZS5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdWJzcGFjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNy0yMDE4IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
ODYsOCArODYsOCBAQCBwdWJsaWM6CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KICAgICB2
b2lkIGZvckVhY2hNYXJrZWRDZWxsKGNvbnN0IEZ1bmMmKTsKICAgICAKLSAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBGdW5jPgotICAgIFJlZjxTaGFyZWRUYXNrPHZvaWQoU2xvdFZpc2l0b3ImKT4+IGZv
ckVhY2hNYXJrZWRDZWxsSW5QYXJhbGxlbChjb25zdCBGdW5jJik7CisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVmlzaXRvciwgdHlwZW5hbWUgRnVuYz4KKyAgICBSZWY8U2hhcmVkVGFzazx2b2lkKFZp
c2l0b3ImKT4+IGZvckVhY2hNYXJrZWRDZWxsSW5QYXJhbGxlbChjb25zdCBGdW5jJik7CiAKICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgogICAgIHZvaWQgZm9yRWFjaExpdmVDZWxsKGNvbnN0
IEZ1bmMmKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N1YnNwYWNlSW5saW5l
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N1YnNwYWNlSW5s
aW5lcy5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9T
dWJzcGFjZUlubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTctMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTg1LDEwICs4NSwxMCBAQCB2b2lk
IFN1YnNwYWNlOjpmb3JFYWNoTWFya2VkQ2VsbChjb25zdCBGCiAgICAgICAgIH0pOwogfQogCi10
ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgotUmVmPFNoYXJlZFRhc2s8dm9pZChTbG90VmlzaXRvciYp
Pj4gU3Vic3BhY2U6OmZvckVhY2hNYXJrZWRDZWxsSW5QYXJhbGxlbChjb25zdCBGdW5jJiBmdW5j
KQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvciwgdHlwZW5hbWUgRnVuYz4KK1JlZjxTaGFyZWRU
YXNrPHZvaWQoVmlzaXRvciYpPj4gU3Vic3BhY2U6OmZvckVhY2hNYXJrZWRDZWxsSW5QYXJhbGxl
bChjb25zdCBGdW5jJiBmdW5jKQogewotICAgIGNsYXNzIFRhc2sgZmluYWwgOiBwdWJsaWMgU2hh
cmVkVGFzazx2b2lkKFNsb3RWaXNpdG9yJik+IHsKKyAgICBjbGFzcyBUYXNrIGZpbmFsIDogcHVi
bGljIFNoYXJlZFRhc2s8dm9pZChWaXNpdG9yJik+IHsKICAgICBwdWJsaWM6CiAgICAgICAgIFRh
c2soU3Vic3BhY2UmIHN1YnNwYWNlLCBjb25zdCBGdW5jJiBmdW5jKQogICAgICAgICAgICAgOiBt
X3N1YnNwYWNlKHN1YnNwYWNlKQpAQCAtOTcsNyArOTcsNyBAQCBSZWY8U2hhcmVkVGFzazx2b2lk
KFNsb3RWaXNpdG9yJik+PiBTdWJzCiAgICAgICAgIHsKICAgICAgICAgfQogICAgICAgICAKLSAg
ICAgICAgdm9pZCBydW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpIGZpbmFsCisgICAgICAgIHZvaWQg
cnVuKFZpc2l0b3ImIHZpc2l0b3IpIGZpbmFsCiAgICAgICAgIHsKICAgICAgICAgICAgIHdoaWxl
IChNYXJrZWRCbG9jazo6SGFuZGxlKiBoYW5kbGUgPSBtX2Jsb2NrU291cmNlLT5ydW4oKSkgewog
ICAgICAgICAgICAgICAgIGhhbmRsZS0+Zm9yRWFjaE1hcmtlZENlbGwoCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9WZXJpZmllclNsb3RWaXNpdG9yLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9WZXJpZmllclNsb3RWaXNpdG9yLmNwcAkobm9u
ZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9WZXJpZmllclNsb3RWaXNp
dG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM0NiBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJWZXJpZmllclNsb3RWaXNpdG9yLmgiCisKKyNp
bmNsdWRlICJCbG9ja0RpcmVjdG9yeUlubGluZXMuaCIKKyNpbmNsdWRlICJDb25zZXJ2YXRpdmVS
b290cy5oIgorI2luY2x1ZGUgIkdDU2VnbWVudGVkQXJyYXlJbmxpbmVzLmgiCisjaW5jbHVkZSAi
SGVhcENlbGwuaCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAiVk0uaCIKKyNp
bmNsdWRlICJWZXJpZmllclNsb3RWaXNpdG9ySW5saW5lcy5oIgorI2luY2x1ZGUgPHd0Zi9TdGFj
a1RyYWNlLmg+CisKK25hbWVzcGFjZSBKU0MgeworCit1c2luZyBNYXJrZXJEYXRhID0gVmVyaWZp
ZXJTbG90VmlzaXRvcjo6TWFya2VyRGF0YTsKKworY29uc3RleHByIGludCBtYXhNYXJraW5nU3Rh
Y2tGcmFtZXNUb0NhcHR1cmUgPSAxMDA7CisKK01hcmtlckRhdGE6Ok1hcmtlckRhdGEoSGVhcENl
bGwqIHBhcmVudCwgc3RkOjp1bmlxdWVfcHRyPFN0YWNrVHJhY2U+JiYgc3RhY2spCisgICAgOiBw
YXJlbnQocGFyZW50KQorICAgICwgc3RhY2soV1RGTW92ZShzdGFjaykpCit7Cit9CisKK1Zlcmlm
aWVyU2xvdFZpc2l0b3I6Ok1hcmtlZEJsb2NrRGF0YTo6TWFya2VkQmxvY2tEYXRhKE1hcmtlZEJs
b2NrKiBibG9jaykKKyAgICA6IG1fYmxvY2soYmxvY2spCit7Cit9CisKK3ZvaWQgVmVyaWZpZXJT
bG90VmlzaXRvcjo6TWFya2VkQmxvY2tEYXRhOjphZGRNYXJrZXJEYXRhKHVuc2lnbmVkIGF0b21O
dW1iZXIsIE1hcmtlckRhdGEmJiBtYXJrZXIpCit7CisgICAgaWYgKG1fbWFya2Vycy5pc0VtcHR5
KCkpCisgICAgICAgIG1fbWFya2Vycy5ncm93KE1hcmtlZEJsb2NrOjphdG9tc1BlckJsb2NrKTsK
KyAgICBtX21hcmtlcnNbYXRvbU51bWJlcl0gPSBXVEZNb3ZlKG1hcmtlcik7Cit9CisKK2NvbnN0
IE1hcmtlckRhdGEqIFZlcmlmaWVyU2xvdFZpc2l0b3I6Ok1hcmtlZEJsb2NrRGF0YTo6bWFya2Vy
RGF0YSh1bnNpZ25lZCBhdG9tTnVtYmVyKSBjb25zdAoreworICAgIGF1dG8mIG1hcmtlciA9IG1f
bWFya2Vyc1thdG9tTnVtYmVyXTsKKyAgICBpZiAobWFya2VyLnN0YWNrKQorICAgICAgICByZXR1
cm4gJm1hcmtlcjsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworVmVyaWZpZXJTbG90VmlzaXRv
cjo6UHJlY2lzZUFsbG9jYXRpb25EYXRhOjpQcmVjaXNlQWxsb2NhdGlvbkRhdGEoUHJlY2lzZUFs
bG9jYXRpb24qIGFsbG9jYXRpb24pCisgICAgOiBtX2FsbG9jYXRpb24oYWxsb2NhdGlvbikKK3sK
K30KKworY29uc3QgTWFya2VyRGF0YSogVmVyaWZpZXJTbG90VmlzaXRvcjo6UHJlY2lzZUFsbG9j
YXRpb25EYXRhOjptYXJrZXJEYXRhKCkgY29uc3QKK3sKKyAgICBpZiAobV9tYXJrZXIuc3RhY2sp
CisgICAgICAgIHJldHVybiAmbV9tYXJrZXI7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK3Zv
aWQgVmVyaWZpZXJTbG90VmlzaXRvcjo6UHJlY2lzZUFsbG9jYXRpb25EYXRhOjphZGRNYXJrZXJE
YXRhKE1hcmtlckRhdGEmJiBtYXJrZXIpCit7CisgICAgbV9tYXJrZXIgPSBXVEZNb3ZlKG1hcmtl
cik7Cit9CisKK1ZlcmlmaWVyU2xvdFZpc2l0b3I6OlZlcmlmaWVyU2xvdFZpc2l0b3IoSGVhcCYg
aGVhcCkKKyAgICA6IEJhc2UoaGVhcCwgIlZlcmlmaWVyIiwgbV9vcGFxdWVSb290U3RvcmFnZSkK
K3sKK30KKworVmVyaWZpZXJTbG90VmlzaXRvcjo6flZlcmlmaWVyU2xvdFZpc2l0b3IoKQorewor
ICAgIGhlYXAoKS0+b2JqZWN0U3BhY2UoKS5mb3JFYWNoQmxvY2soCisgICAgICAgIFsmXSAoTWFy
a2VkQmxvY2s6OkhhbmRsZSogaGFuZGxlKSB7CisgICAgICAgICAgICBoYW5kbGUtPmJsb2NrKCku
c2V0VmVyaWZpZXJNZW1vKG51bGxwdHIpOworICAgICAgICB9KTsKK30KKwordm9pZCBWZXJpZmll
clNsb3RWaXNpdG9yOjphZGRQYXJhbGxlbENvbnN0cmFpbnRUYXNrKFJlZlB0cjxTaGFyZWRUYXNr
PHZvaWQoQWJzdHJhY3RTbG90VmlzaXRvciYpPj4gdGFzaykKK3sKKyAgICBtX2NvbnN0cmFpbnRU
YXNrcy5hcHBlbmQoV1RGTW92ZSh0YXNrKSk7Cit9CisKK05PX1JFVFVSTl9EVUVfVE9fQ1JBU0gg
dm9pZCBWZXJpZmllclNsb3RWaXNpdG9yOjphZGRQYXJhbGxlbENvbnN0cmFpbnRUYXNrKFJlZlB0
cjxTaGFyZWRUYXNrPHZvaWQoU2xvdFZpc2l0b3ImKT4+KQoreworICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7Cit9CisKK3ZvaWQgVmVyaWZpZXJTbG90VmlzaXRvcjo6ZXhlY3V0ZUNv
bnN0cmFpbnRUYXNrcygpCit7CisgICAgd2hpbGUgKCFtX2NvbnN0cmFpbnRUYXNrcy5pc0VtcHR5
KCkpCisgICAgICAgIG1fY29uc3RyYWludFRhc2tzLnRha2VGaXJzdCgpLT5ydW4oKnRoaXMpOwor
fQorCit2b2lkIFZlcmlmaWVyU2xvdFZpc2l0b3I6OmFwcGVuZChjb25zdCBDb25zZXJ2YXRpdmVS
b290cyYgY29uc2VydmF0aXZlUm9vdHMpCit7CisgICAgYXV0byBhcHBlbmRKU0NlbGxPckF1eGls
aWFyeSA9IFsmXSAoSGVhcENlbGwqIGhlYXBDZWxsKSB7CisgICAgICAgIGlmICghaGVhcENlbGwp
CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgaWYgKHRlc3RBbmRTZXRNYXJrZWQoaGVh
cENlbGwpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHN3aXRjaCAoaGVhcENlbGwt
PmNlbGxLaW5kKCkpIHsKKyAgICAgICAgY2FzZSBIZWFwQ2VsbDo6SlNDZWxsOgorICAgICAgICBj
YXNlIEhlYXBDZWxsOjpKU0NlbGxXaXRoSW5kZXhpbmdIZWFkZXI6IHsKKyAgICAgICAgICAgIEpT
Q2VsbCoganNDZWxsID0gc3RhdGljX2Nhc3Q8SlNDZWxsKj4oaGVhcENlbGwpOworICAgICAgICAg
ICAgYXBwZW5kVG9NYXJrU3RhY2soanNDZWxsKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorCisgICAgICAgIGNhc2UgSGVhcENlbGw6OkF1eGlsaWFyeToKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorICAgIH07CisKKyAgICBIZWFwQ2VsbCoqIHJvb3RzID0gY29uc2Vy
dmF0aXZlUm9vdHMucm9vdHMoKTsKKyAgICBzaXplX3Qgc2l6ZSA9IGNvbnNlcnZhdGl2ZVJvb3Rz
LnNpemUoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkKKyAgICAgICAg
YXBwZW5kSlNDZWxsT3JBdXhpbGlhcnkocm9vdHNbaV0pOworfQorCit2b2lkIFZlcmlmaWVyU2xv
dFZpc2l0b3I6OmFwcGVuZFRvTWFya1N0YWNrKEpTQ2VsbCogY2VsbCkKK3sKKyAgICBBU1NFUlQo
IWNlbGwtPmlzWmFwcGVkKCkpOworICAgIG1fY29sbGVjdG9yU3RhY2suYXBwZW5kKGNlbGwpOwor
fQorCit2b2lkIFZlcmlmaWVyU2xvdFZpc2l0b3I6OmFwcGVuZFVuYmFycmllcmVkKEpTQ2VsbCog
Y2VsbCkKK3sKKyAgICBpZiAoIWNlbGwpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChVTkxJ
S0VMWShjZWxsLT5pc1ByZWNpc2VBbGxvY2F0aW9uKCkpKSB7CisgICAgICAgIGlmIChMSUtFTFko
aXNNYXJrZWQoY2VsbC0+cHJlY2lzZUFsbG9jYXRpb24oKSwgY2VsbCkpKQorICAgICAgICAgICAg
cmV0dXJuOworICAgIH0gZWxzZSB7CisgICAgICAgIE1hcmtlZEJsb2NrJiBibG9jayA9IGNlbGwt
Pm1hcmtlZEJsb2NrKCk7CisgICAgICAgIGlmIChMSUtFTFkoaXNNYXJrZWQoYmxvY2ssIGNlbGwp
KSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBhcHBlbmRTbG93KGNlbGwpOwor
fQorCit2b2lkIFZlcmlmaWVyU2xvdFZpc2l0b3I6OmFwcGVuZEhpZGRlblVuYmFycmllcmVkKEpT
Q2VsbCogY2VsbCkKK3sKKyAgICBhcHBlbmRVbmJhcnJpZXJlZChjZWxsKTsKK30KKwordm9pZCBW
ZXJpZmllclNsb3RWaXNpdG9yOjpkcmFpbigpCit7CisgICAgUkVMRUFTRV9BU1NFUlQobV9tdXRh
dG9yU3RhY2suaXNFbXB0eSgpKTsKKworICAgIE1hcmtTdGFja0FycmF5JiBzdGFjayA9IG1fY29s
bGVjdG9yU3RhY2s7CisgICAgaWYgKHN0YWNrLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgc3RhY2sucmVmaWxsKCk7CisgICAgd2hpbGUgKHN0YWNrLmNhblJlbW92ZUxhc3QoKSkK
KyAgICAgICAgdmlzaXRDaGlsZHJlbihzdGFjay5yZW1vdmVMYXN0KCkpOworfQorCit2b2lkIFZl
cmlmaWVyU2xvdFZpc2l0b3I6OmR1bXBNYXJrZXJEYXRhKEhlYXBDZWxsKiBjZWxsKQoreworICAg
IGlmIChjZWxsLT5pc1ByZWNpc2VBbGxvY2F0aW9uKCkpCisgICAgICAgIHJldHVybiBkdW1wTWFy
a2VyRGF0YShjZWxsLT5wcmVjaXNlQWxsb2NhdGlvbigpLCBjZWxsKTsKKyAgICByZXR1cm4gZHVt
cE1hcmtlckRhdGEoY2VsbC0+bWFya2VkQmxvY2soKSwgY2VsbCk7Cit9CisKK3ZvaWQgVmVyaWZp
ZXJTbG90VmlzaXRvcjo6ZHVtcE1hcmtlckRhdGEoUHJlY2lzZUFsbG9jYXRpb24mIGFsbG9jYXRp
b24sIEhlYXBDZWxsKiBjZWxsKQoreworICAgIGF1dG8gaXRlcmF0b3IgPSBtX3ByZWNpc2VBbGxv
Y2F0aW9uTWFwLmZpbmQoJmFsbG9jYXRpb24pOworICAgIGlmIChpdGVyYXRvciAhPSBtX3ByZWNp
c2VBbGxvY2F0aW9uTWFwLmVuZCgpKSB7CisgICAgICAgIGR1bXBNYXJrZXJEYXRhKGNlbGwsIGl0
ZXJhdG9yLT52YWx1ZS0+bWFya2VyRGF0YSgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICBkYXRhTG9nTG4oIkNlbGwgIiwgUmF3UG9pbnRlcihjZWxsKSwgIiBub3QgZm91bmQiKTsKK30K
Kwordm9pZCBWZXJpZmllclNsb3RWaXNpdG9yOjpkdW1wTWFya2VyRGF0YShNYXJrZWRCbG9jayYg
YmxvY2ssIEhlYXBDZWxsKiBjZWxsKQoreworICAgIGF1dG8gaXRlcmF0b3IgPSBtX21hcmtlZEJs
b2NrTWFwLmZpbmQoJmJsb2NrKTsKKyAgICBpZiAoaXRlcmF0b3IgIT0gbV9tYXJrZWRCbG9ja01h
cC5lbmQoKSkgeworICAgICAgICB1bnNpZ25lZCBhdG9tTnVtYmVyID0gYmxvY2suYXRvbU51bWJl
cihjZWxsKTsKKyAgICAgICAgZHVtcE1hcmtlckRhdGEoY2VsbCwgaXRlcmF0b3ItPnZhbHVlLT5t
YXJrZXJEYXRhKGF0b21OdW1iZXIpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBkYXRh
TG9nTG4oIkNlbGwgIiwgUmF3UG9pbnRlcihjZWxsKSwgIiBub3QgZm91bmQiKTsKK30KKwordm9p
ZCBWZXJpZmllclNsb3RWaXNpdG9yOjpkdW1wTWFya2VyRGF0YShIZWFwQ2VsbCogY2VsbCwgY29u
c3QgTWFya2VyRGF0YSogbWFya2VyKQoreworICAgIGlmICghbWFya2VyKSB7CisgICAgICAgIGRh
dGFMb2dMbigiTWFya2VyIGRhdGEgaXMgbm90IGF2YWlsYWJsZSBmb3IgY2VsbCAiLCBSYXdQb2lu
dGVyKGNlbGwpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGRhdGFMb2dMbigiQ2Vs
bCAiLCBSYXdQb2ludGVyKGNlbGwpLCAiIHdhcyByZWFjaGFibGUgdmlhIGNlbGwgIiwgUmF3UG9p
bnRlcihtYXJrZXItPnBhcmVudCksICIgYXQ6Iik7CisgICAgbWFya2VyLT5zdGFjay0+ZHVtcChX
VEY6OmRhdGFGaWxlKCksICIgICAgIik7Cit9CisKK2Jvb2wgVmVyaWZpZXJTbG90VmlzaXRvcjo6
aXNGaXJzdFZpc2l0KCkgY29uc3QKK3sKKyAgICAvLyBJbiB0aGUgcmVndWxhciBHQywgdGhpcyBy
ZXR1cm4gdmFsdWUgaXMgb25seSB1c2VkIHRvIGNvbnRyb2wgd2hldGhlcgorICAgIC8vIFVubGlu
a2VkQ29kZUJsb2NrcyB3aWxsIGJlIGFnZWQgKHNlZSBVbmxpbmtlZENvZGVCbG9jazo6dmlzaXRD
aGlsZHJlbkltcGwoKSkuCisgICAgLy8gRm9yIHRoZSB2ZXJpZmllciBHQyBwYXNzLCB3ZSBzaG91
bGQgYWx3YXlzIHJldHVybiBmYWxzZSBiZWNhdXNlIHdlIGRvbid0CisgICAgLy8gd2FudCB0byBk
byB0aGUgYWdpbmcgYWN0aW9uIGFnYWluLgorICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBW
ZXJpZmllclNsb3RWaXNpdG9yOjppc01hcmtlZChjb25zdCB2b2lkKiByYXdDZWxsKSBjb25zdAor
eworICAgIEhlYXBDZWxsKiBjZWxsID0gYml0d2lzZV9jYXN0PEhlYXBDZWxsKj4ocmF3Q2VsbCk7
CisgICAgaWYgKGNlbGwtPmlzUHJlY2lzZUFsbG9jYXRpb24oKSkKKyAgICAgICAgcmV0dXJuIGlz
TWFya2VkKGNlbGwtPnByZWNpc2VBbGxvY2F0aW9uKCksIGNlbGwpOworICAgIHJldHVybiBpc01h
cmtlZChjZWxsLT5tYXJrZWRCbG9jaygpLCBjZWxsKTsKK30KKworYm9vbCBWZXJpZmllclNsb3RW
aXNpdG9yOjppc01hcmtlZChQcmVjaXNlQWxsb2NhdGlvbiYgYWxsb2NhdGlvbiwgSGVhcENlbGwq
KSBjb25zdAoreworICAgIHJldHVybiBtX3ByZWNpc2VBbGxvY2F0aW9uTWFwLmNvbnRhaW5zKCZh
bGxvY2F0aW9uKTsKK30KKworYm9vbCBWZXJpZmllclNsb3RWaXNpdG9yOjppc01hcmtlZChNYXJr
ZWRCbG9jayYgYmxvY2ssIEhlYXBDZWxsKiBjZWxsKSBjb25zdAoreworICAgIGF1dG8gZW50cnkg
PSBtX21hcmtlZEJsb2NrTWFwLmZpbmQoJmJsb2NrKTsKKyAgICBpZiAoZW50cnkgPT0gbV9tYXJr
ZWRCbG9ja01hcC5lbmQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYXV0byYgZGF0
YSA9IGVudHJ5LT52YWx1ZTsKKyAgICB1bnNpZ25lZCBhdG9tTnVtYmVyID0gYmxvY2suYXRvbU51
bWJlcihjZWxsKTsKKyAgICByZXR1cm4gZGF0YS0+aXNNYXJrZWQoYXRvbU51bWJlcik7Cit9CisK
K3ZvaWQgVmVyaWZpZXJTbG90VmlzaXRvcjo6bWFya0F1eGlsaWFyeShjb25zdCB2b2lkKiBiYXNl
KQoreworICAgIEhlYXBDZWxsKiBjZWxsID0gYml0d2lzZV9jYXN0PEhlYXBDZWxsKj4oYmFzZSk7
CisKKyAgICBBU1NFUlQoY2VsbC0+aGVhcCgpID09IGhlYXAoKSk7CisgICAgdGVzdEFuZFNldE1h
cmtlZChjZWxsKTsKK30KKworYm9vbCBWZXJpZmllclNsb3RWaXNpdG9yOjptdXRhdG9ySXNTdG9w
cGVkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBWZXJpZmllclNsb3RW
aXNpdG9yOjp0ZXN0QW5kU2V0TWFya2VkKGNvbnN0IHZvaWQqIHJhd0NlbGwpCit7CisgICAgSGVh
cENlbGwqIGNlbGwgPSBiaXR3aXNlX2Nhc3Q8SGVhcENlbGwqPihyYXdDZWxsKTsKKyAgICBpZiAo
Y2VsbC0+aXNQcmVjaXNlQWxsb2NhdGlvbigpKQorICAgICAgICByZXR1cm4gdGVzdEFuZFNldE1h
cmtlZChjZWxsLT5wcmVjaXNlQWxsb2NhdGlvbigpKTsKKyAgICByZXR1cm4gdGVzdEFuZFNldE1h
cmtlZChjZWxsLT5tYXJrZWRCbG9jaygpLCBjZWxsKTsKK30KKworYm9vbCBWZXJpZmllclNsb3RW
aXNpdG9yOjp0ZXN0QW5kU2V0TWFya2VkKFByZWNpc2VBbGxvY2F0aW9uJiBhbGxvY2F0aW9uKQor
eworICAgIHN0ZDo6dW5pcXVlX3B0cjxQcmVjaXNlQWxsb2NhdGlvbkRhdGE+JiBkYXRhID0gbV9w
cmVjaXNlQWxsb2NhdGlvbk1hcC5hZGQoJmFsbG9jYXRpb24sIG51bGxwdHIpLml0ZXJhdG9yLT52
YWx1ZTsKKyAgICBpZiAoIWRhdGEpIHsKKyAgICAgICAgZGF0YSA9IG1ha2VVbmlxdWU8UHJlY2lz
ZUFsbG9jYXRpb25EYXRhPigmYWxsb2NhdGlvbik7CisgICAgICAgIGlmIChVTkxJS0VMWShPcHRp
b25zOjp2ZXJib3NlVmVyaWZ5R0MoKSkpCisgICAgICAgICAgICBkYXRhLT5hZGRNYXJrZXJEYXRh
KHsgcGFyZW50Q2VsbCgpLCBTdGFja1RyYWNlOjpjYXB0dXJlU3RhY2tUcmFjZShtYXhNYXJraW5n
U3RhY2tGcmFtZXNUb0NhcHR1cmUsIDIpIH0pOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorICAgIHJldHVybiB0cnVlOworfQorCitib29sIFZlcmlmaWVyU2xvdFZpc2l0b3I6OnRlc3RB
bmRTZXRNYXJrZWQoTWFya2VkQmxvY2smIGJsb2NrLCBIZWFwQ2VsbCogY2VsbCkKK3sKKyAgICBN
YXJrZWRCbG9ja0RhdGEqIGRhdGEgPSBibG9jay52ZXJpZmllck1lbW88TWFya2VkQmxvY2tEYXRh
Kj4oKTsKKyAgICBpZiAoVU5MSUtFTFkoIWRhdGEpKSB7CisgICAgICAgIHN0ZDo6dW5pcXVlX3B0
cjxNYXJrZWRCbG9ja0RhdGE+JiBlbnRyeURhdGEgPSBtX21hcmtlZEJsb2NrTWFwLmFkZCgmYmxv
Y2ssIG51bGxwdHIpLml0ZXJhdG9yLT52YWx1ZTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWVu
dHJ5RGF0YSk7CisgICAgICAgIGVudHJ5RGF0YSA9IG1ha2VVbmlxdWU8TWFya2VkQmxvY2tEYXRh
PigmYmxvY2spOworICAgICAgICBkYXRhID0gZW50cnlEYXRhLmdldCgpOworICAgICAgICBibG9j
ay5zZXRWZXJpZmllck1lbW8oZGF0YSk7CisgICAgfQorCisgICAgdW5zaWduZWQgYXRvbU51bWJl
ciA9IGJsb2NrLmF0b21OdW1iZXIoY2VsbCk7CisgICAgYm9vbCBhbHJlYWR5U2V0ID0gZGF0YS0+
dGVzdEFuZFNldE1hcmtlZChhdG9tTnVtYmVyKTsKKyAgICBpZiAoIWFscmVhZHlTZXQgJiYgVU5M
SUtFTFkoT3B0aW9uczo6dmVyYm9zZVZlcmlmeUdDKCkpKQorICAgICAgICBkYXRhLT5hZGRNYXJr
ZXJEYXRhKGF0b21OdW1iZXIsIHsgcGFyZW50Q2VsbCgpLCBTdGFja1RyYWNlOjpjYXB0dXJlU3Rh
Y2tUcmFjZShtYXhNYXJraW5nU3RhY2tGcmFtZXNUb0NhcHR1cmUsIDIpIH0pOworICAgIHJldHVy
biBhbHJlYWR5U2V0OworfQorCit2b2lkIFZlcmlmaWVyU2xvdFZpc2l0b3I6OnNldE1hcmtlZEFu
ZEFwcGVuZFRvTWFya1N0YWNrKEpTQ2VsbCogY2VsbCkKK3sKKyAgICBpZiAobV9zdXBwcmVzc1Zl
cmlmaWVyKQorICAgICAgICByZXR1cm47CisgICAgaWYgKHRlc3RBbmRTZXRNYXJrZWQoY2VsbCkp
CisgICAgICAgIHJldHVybjsKKyAgICBhcHBlbmRUb01hcmtTdGFjayhjZWxsKTsKK30KKwordm9p
ZCBWZXJpZmllclNsb3RWaXNpdG9yOjp2aXNpdEFzQ29uc3RyYWludChjb25zdCBKU0NlbGwqIGNl
bGwpCit7CisgICAgdmlzaXRDaGlsZHJlbihjZWxsKTsKK30KKwordm9pZCBWZXJpZmllclNsb3RW
aXNpdG9yOjp2aXNpdENoaWxkcmVuKGNvbnN0IEpTQ2VsbCogY2VsbCkKK3sKKyAgICBSRUxFQVNF
X0FTU0VSVChpc01hcmtlZChjZWxsKSk7CisgICAgc3dpdGNoIChjZWxsLT50eXBlKCkpIHsKKyAg
ICBjYXNlIFN0cmluZ1R5cGU6CisgICAgICAgIEpTU3RyaW5nOjp2aXNpdENoaWxkcmVuKGNvbnN0
X2Nhc3Q8SlNDZWxsKj4oY2VsbCksICp0aGlzKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgIAor
ICAgIGNhc2UgRmluYWxPYmplY3RUeXBlOgorICAgICAgICBKU0ZpbmFsT2JqZWN0Ojp2aXNpdENo
aWxkcmVuKGNvbnN0X2Nhc3Q8SlNDZWxsKj4oY2VsbCksICp0aGlzKTsKKyAgICAgICAgYnJlYWs7
CisKKyAgICBjYXNlIEFycmF5VHlwZToKKyAgICAgICAgSlNBcnJheTo6dmlzaXRDaGlsZHJlbihj
b25zdF9jYXN0PEpTQ2VsbCo+KGNlbGwpLCAqdGhpcyk7CisgICAgICAgIGJyZWFrOworICAgICAg
ICAKKyAgICBkZWZhdWx0OgorICAgICAgICAvLyBGSVhNRTogVGhpcyBjb3VsZCBiZSBzbyBtdWNo
IGJldHRlci4KKyAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE2MjQ2MgorICAgICAgICBjZWxsLT5tZXRob2RUYWJsZSh2bSgpKS0+dmlzaXRDaGlsZHJl
bihjb25zdF9jYXN0PEpTQ2VsbCo+KGNlbGwpLCAqdGhpcyk7CisgICAgICAgIGJyZWFrOworICAg
IH0KK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9WZXJpZmllclNsb3RWaXNpdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvVmVyaWZpZXJTbG90VmlzaXRvci5oCShub25leGlzdGVudCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1ZlcmlmaWVyU2xvdFZpc2l0b3IuaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDE3MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQWJzdHJhY3RTbG90VmlzaXRvci5o
IgorI2luY2x1ZGUgIkpTQ0pTVmFsdWUuaCIKKyNpbmNsdWRlICJNYXJrZWRCbG9jay5oIgorI2lu
Y2x1ZGUgIlZpc2l0UmFjZUtleS5oIgorI2luY2x1ZGUgIldlYWsuaCIKKyNpbmNsdWRlIDxtZW1v
cnk+CisjaW5jbHVkZSA8d3RmL0JpdG1hcC5oPgorI2luY2x1ZGUgPHd0Zi9EZXF1ZS5oPgorI2lu
Y2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNs
dWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1NoYXJlZFRhc2suaD4KKworbmFtZXNw
YWNlIFdURiB7CisKK2NsYXNzIFN0YWNrVHJhY2U7CisKK30gLy8gbmFtZXNwYWNlIFdURgorCitu
YW1lc3BhY2UgSlNDIHsKKworY2xhc3MgQ29uc2VydmF0aXZlUm9vdHM7CitjbGFzcyBIZWFwOwor
Y2xhc3MgSGVhcENlbGw7CitjbGFzcyBQcmVjaXNlQWxsb2NhdGlvbjsKKwordXNpbmcgV1RGOjpT
dGFja1RyYWNlOworCitjbGFzcyBWZXJpZmllclNsb3RWaXNpdG9yIDogcHVibGljIEFic3RyYWN0
U2xvdFZpc2l0b3IgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFZlcmlmaWVyU2xvdFZpc2l0
b3IpOworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworICAgIHVzaW5nIEJhc2UgPSBBYnN0
cmFjdFNsb3RWaXNpdG9yOworcHVibGljOgorICAgIHN0cnVjdCBNYXJrZXJEYXRhIHsKKyAgICAg
ICAgTWFya2VyRGF0YSgpID0gZGVmYXVsdDsKKyAgICAgICAgTWFya2VyRGF0YShNYXJrZXJEYXRh
JiYpID0gZGVmYXVsdDsKKyAgICAgICAgTWFya2VyRGF0YShIZWFwQ2VsbCosIHN0ZDo6dW5pcXVl
X3B0cjxTdGFja1RyYWNlPiYmKTsKKyAgICAgICAgTWFya2VyRGF0YSYgb3BlcmF0b3I9KE1hcmtl
ckRhdGEmJikgPSBkZWZhdWx0OworCisgICAgICAgIEhlYXBDZWxsKiBwYXJlbnQgeyBudWxscHRy
IH07CisgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxTdGFja1RyYWNlPiBzdGFjazsKKyAgICB9Owor
CisgICAgVmVyaWZpZXJTbG90VmlzaXRvcihIZWFwJik7CisgICAgflZlcmlmaWVyU2xvdFZpc2l0
b3IoKTsKKworICAgIHZvaWQgYXBwZW5kKGNvbnN0IENvbnNlcnZhdGl2ZVJvb3RzJikgZmluYWw7
CisgICAgdm9pZCBhcHBlbmRVbmJhcnJpZXJlZChKU0NlbGwqKSBmaW5hbDsKKyAgICB2b2lkIGFw
cGVuZEhpZGRlblVuYmFycmllcmVkKEpTQ2VsbCopIGZpbmFsOworCisgICAgYm9vbCBpc0ZpcnN0
VmlzaXQoKSBjb25zdCBmaW5hbDsKKyAgICBib29sIGlzTWFya2VkKGNvbnN0IHZvaWQqKSBjb25z
dCBmaW5hbDsKKyAgICBib29sIGlzTWFya2VkKE1hcmtlZEJsb2NrJiwgSGVhcENlbGwqKSBjb25z
dCBmaW5hbDsKKyAgICBib29sIGlzTWFya2VkKFByZWNpc2VBbGxvY2F0aW9uJiwgSGVhcENlbGwq
KSBjb25zdCBmaW5hbDsKKworICAgIHZvaWQgbWFya0F1eGlsaWFyeShjb25zdCB2b2lkKikgZmlu
YWw7CisKKyAgICB2b2lkIHJlcG9ydEV4dHJhTWVtb3J5VmlzaXRlZChzaXplX3QpIGZpbmFsIHsg
fQorI2lmIEVOQUJMRShSRVNPVVJDRV9VU0FHRSkKKyAgICB2b2lkIHJlcG9ydEV4dGVybmFsTWVt
b3J5VmlzaXRlZChzaXplX3QpIGZpbmFsIHsgfQorI2VuZGlmCisKKyAgICBib29sIG11dGF0b3JJ
c1N0b3BwZWQoKSBjb25zdCBmaW5hbDsKKworICAgIHZvaWQgZGlkUmFjZShjb25zdCBWaXNpdFJh
Y2VLZXkmKSBmaW5hbCB7IH0KKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdCBmaW5h
bCB7IH0KKworICAgIHZvaWQgdmlzaXRBc0NvbnN0cmFpbnQoY29uc3QgSlNDZWxsKikgZmluYWw7
CisKKyAgICB2b2lkIGRyYWluKCk7CisKKyAgICB2b2lkIGFkZFBhcmFsbGVsQ29uc3RyYWludFRh
c2soUmVmUHRyPFNoYXJlZFRhc2s8dm9pZChBYnN0cmFjdFNsb3RWaXNpdG9yJik+PikgZmluYWw7
CisgICAgTk9fUkVUVVJOX0RVRV9UT19DUkFTSCB2b2lkIGFkZFBhcmFsbGVsQ29uc3RyYWludFRh
c2soUmVmUHRyPFNoYXJlZFRhc2s8dm9pZChTbG90VmlzaXRvciYpPj4pIGZpbmFsOworICAgIHZv
aWQgZXhlY3V0ZUNvbnN0cmFpbnRUYXNrcygpOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVu
Y3Rvcj4gdm9pZCBmb3JFYWNoTGl2ZUNlbGwoY29uc3QgRnVuY3RvciYpOworICAgIHRlbXBsYXRl
PHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaExpdmVQcmVjaXNlQWxsb2NhdGlvbihjb25z
dCBGdW5jdG9yJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBmb3JFYWNo
TGl2ZU1hcmtlZEJsb2NrQ2VsbChjb25zdCBGdW5jdG9yJik7CisKKyAgICBKU19FWFBPUlRfUFJJ
VkFURSB2b2lkIGR1bXBNYXJrZXJEYXRhKEhlYXBDZWxsKik7CisKK3ByaXZhdGU6CisgICAgY2xh
c3MgTWFya2VkQmxvY2tEYXRhIHsKKyAgICAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Cisg
ICAgICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKE1hcmtlZEJsb2NrRGF0YSk7CisgICAgcHVibGlj
OgorICAgICAgICB1c2luZyBBdG9tc0JpdG1hcCA9IEJpdG1hcDxNYXJrZWRCbG9jazo6YXRvbXNQ
ZXJCbG9jaz47CisKKyAgICAgICAgTWFya2VkQmxvY2tEYXRhKE1hcmtlZEJsb2NrKik7CisKKyAg
ICAgICAgTWFya2VkQmxvY2sqIGJsb2NrKCkgY29uc3QgeyByZXR1cm4gbV9ibG9jazsgfQorICAg
ICAgICBjb25zdCBBdG9tc0JpdG1hcCYgYXRvbXMoKSBjb25zdCB7IHJldHVybiBtX2F0b21zOyB9
CisKKyAgICAgICAgYm9vbCBpc01hcmtlZCh1bnNpZ25lZCBhdG9tTnVtYmVyKSB7IHJldHVybiBt
X2F0b21zLmdldChhdG9tTnVtYmVyKTsgfQorICAgICAgICBib29sIHRlc3RBbmRTZXRNYXJrZWQo
dW5zaWduZWQgYXRvbU51bWJlcikgeyByZXR1cm4gbV9hdG9tcy50ZXN0QW5kU2V0KGF0b21OdW1i
ZXIpOyB9CisKKyAgICAgICAgdm9pZCBhZGRNYXJrZXJEYXRhKHVuc2lnbmVkIGF0b21OdW1iZXIs
IE1hcmtlckRhdGEmJik7CisgICAgICAgIGNvbnN0IE1hcmtlckRhdGEqIG1hcmtlckRhdGEodW5z
aWduZWQgYXRvbU51bWJlcikgY29uc3Q7CisKKyAgICBwcml2YXRlOgorICAgICAgICBNYXJrZWRC
bG9jayogbV9ibG9jayB7IG51bGxwdHIgfTsKKyAgICAgICAgQXRvbXNCaXRtYXAgbV9hdG9tczsK
KyAgICAgICAgVmVjdG9yPE1hcmtlckRhdGE+IG1fbWFya2VyczsKKyAgICB9OworCisgICAgY2xh
c3MgUHJlY2lzZUFsbG9jYXRpb25EYXRhIHsKKyAgICAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FU
RUQ7CisgICAgICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFByZWNpc2VBbGxvY2F0aW9uRGF0YSk7
CisgICAgcHVibGljOgorICAgICAgICBQcmVjaXNlQWxsb2NhdGlvbkRhdGEoUHJlY2lzZUFsbG9j
YXRpb24qKTsKKyAgICAgICAgUHJlY2lzZUFsbG9jYXRpb24qIGFsbG9jYXRpb24oKSBjb25zdCB7
IHJldHVybiBtX2FsbG9jYXRpb247IH0KKworICAgICAgICB2b2lkIGFkZE1hcmtlckRhdGEoTWFy
a2VyRGF0YSYmKTsKKyAgICAgICAgY29uc3QgTWFya2VyRGF0YSogbWFya2VyRGF0YSgpIGNvbnN0
OworCisgICAgcHJpdmF0ZToKKyAgICAgICAgUHJlY2lzZUFsbG9jYXRpb24qIG1fYWxsb2NhdGlv
biB7IG51bGxwdHIgfTsKKyAgICAgICAgTWFya2VyRGF0YSBtX21hcmtlcjsKKyAgICB9OworCisg
ICAgdXNpbmcgTWFya2VkQmxvY2tNYXAgPSBIYXNoTWFwPE1hcmtlZEJsb2NrKiwgc3RkOjp1bmlx
dWVfcHRyPE1hcmtlZEJsb2NrRGF0YT4+OworICAgIHVzaW5nIFByZWNpc2VBbGxvY2F0aW9uTWFw
ID0gSGFzaE1hcDxQcmVjaXNlQWxsb2NhdGlvbiosIHN0ZDo6dW5pcXVlX3B0cjxQcmVjaXNlQWxs
b2NhdGlvbkRhdGE+PjsKKworICAgIHZvaWQgYXBwZW5kVG9NYXJrU3RhY2soSlNDZWxsKik7Cisg
ICAgdm9pZCBhcHBlbmRTbG93KEpTQ2VsbCogY2VsbCkgeyBzZXRNYXJrZWRBbmRBcHBlbmRUb01h
cmtTdGFjayhjZWxsKTsgfQorCisgICAgYm9vbCB0ZXN0QW5kU2V0TWFya2VkKGNvbnN0IHZvaWQq
IHJhd0NlbGwpOworICAgIGJvb2wgdGVzdEFuZFNldE1hcmtlZChQcmVjaXNlQWxsb2NhdGlvbiYp
OworICAgIGJvb2wgdGVzdEFuZFNldE1hcmtlZChNYXJrZWRCbG9jayYsIEhlYXBDZWxsKik7CisK
KyAgICB2b2lkIHNldE1hcmtlZEFuZEFwcGVuZFRvTWFya1N0YWNrKEpTQ2VsbCopOworCisgICAg
dm9pZCB2aXNpdENoaWxkcmVuKGNvbnN0IEpTQ2VsbCopOworCisgICAgdm9pZCBkdW1wTWFya2Vy
RGF0YShQcmVjaXNlQWxsb2NhdGlvbiYsIEhlYXBDZWxsKik7CisgICAgdm9pZCBkdW1wTWFya2Vy
RGF0YShNYXJrZWRCbG9jayYsIEhlYXBDZWxsKik7CisgICAgdm9pZCBkdW1wTWFya2VyRGF0YShI
ZWFwQ2VsbCosIGNvbnN0IE1hcmtlckRhdGEqKTsKKworICAgIFByZWNpc2VBbGxvY2F0aW9uTWFw
IG1fcHJlY2lzZUFsbG9jYXRpb25NYXA7CisgICAgTWFya2VkQmxvY2tNYXAgbV9tYXJrZWRCbG9j
a01hcDsKKyAgICBDb25jdXJyZW50UHRySGFzaFNldCBtX29wYXF1ZVJvb3RTdG9yYWdlOworICAg
IERlcXVlPFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoQWJzdHJhY3RTbG90VmlzaXRvciYpPj4sIDMy
PiBtX2NvbnN0cmFpbnRUYXNrczsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVmVyaWZpZXJTbG90VmlzaXRvcklubGluZXMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9WZXJpZmllclNsb3RWaXNpdG9y
SW5saW5lcy5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Zl
cmlmaWVyU2xvdFZpc2l0b3JJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEg
b25jZQorCisjaW5jbHVkZSAiQWJzdHJhY3RTbG90VmlzaXRvcklubGluZXMuaCIKKyNpbmNsdWRl
ICJWZXJpZmllclNsb3RWaXNpdG9yLmgiCisKK25hbWVzcGFjZSBKU0MgeworCit0ZW1wbGF0ZTx0
eXBlbmFtZSBGdW5jdG9yPgordm9pZCBWZXJpZmllclNsb3RWaXNpdG9yOjpmb3JFYWNoTGl2ZUNl
bGwoY29uc3QgRnVuY3RvciYgZnVuY3RvcikKK3sKKyAgICBmb3JFYWNoTGl2ZVByZWNpc2VBbGxv
Y2F0aW9uKGZ1bmN0b3IpOworICAgIGZvckVhY2hMaXZlTWFya2VkQmxvY2tDZWxsKGZ1bmN0b3Ip
OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgordm9pZCBWZXJpZmllclNsb3RWaXNp
dG9yOjpmb3JFYWNoTGl2ZVByZWNpc2VBbGxvY2F0aW9uKGNvbnN0IEZ1bmN0b3ImIGZ1bmMpCit7
CisgICAgZm9yIChhdXRvJiBlbnRyeSA6IG1fcHJlY2lzZUFsbG9jYXRpb25NYXApIHsKKyAgICAg
ICAgUHJlY2lzZUFsbG9jYXRpb24qIGFsbG9jYXRpb24gPSBlbnRyeS52YWx1ZS0+YWxsb2NhdGlv
bigpOworICAgICAgICBmdW5jKGFsbG9jYXRpb24tPmNlbGwoKSk7CisgICAgfQorfQorCit0ZW1w
bGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgordm9pZCBWZXJpZmllclNsb3RWaXNpdG9yOjpmb3JFYWNo
TGl2ZU1hcmtlZEJsb2NrQ2VsbChjb25zdCBGdW5jdG9yJiBmdW5jKQoreworICAgIGZvciAoYXV0
byYgZW50cnkgOiBtX21hcmtlZEJsb2NrTWFwKSB7CisgICAgICAgIGF1dG8mIGRhdGEgPSBlbnRy
eS52YWx1ZTsKKyAgICAgICAgTWFya2VkQmxvY2sqIGJsb2NrID0gZGF0YS0+YmxvY2soKTsKKyAg
ICAgICAgY29uc3QgTWFya2VkQmxvY2tEYXRhOjpBdG9tc0JpdG1hcCYgYXRvbXMgPSAgZGF0YS0+
YXRvbXMoKTsKKyAgICAgICAgZm9yIChhdXRvIGF0b21OdW1iZXIgOiBhdG9tcykKKyAgICAgICAg
ICAgIGZ1bmMoYml0d2lzZV9jYXN0PEhlYXBDZWxsKj4oYmxvY2stPmhhbmRsZSgpLmF0b21BdChh
dG9tTnVtYmVyKSkpOworICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9WaXNpdENvdW50ZXIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9WaXNpdENvdW50ZXIuaAkocmV2aXNpb24gMjcyODMwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVmlzaXRDb3VudGVyLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIxIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtMjUsNyArMjUsNyBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgIlNsb3RWaXNpdG9y
LmgiCisjaW5jbHVkZSAiQWJzdHJhY3RTbG90VmlzaXRvci5oIgogCiBuYW1lc3BhY2UgSlNDIHsK
IApAQCAtMzMsMTMgKzMzLDEzIEBAIGNsYXNzIFZpc2l0Q291bnRlciB7CiBwdWJsaWM6CiAgICAg
VmlzaXRDb3VudGVyKCkgeyB9CiAgICAgCi0gICAgVmlzaXRDb3VudGVyKFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQorICAgIFZpc2l0Q291bnRlcihBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQog
ICAgICAgICA6IG1fdmlzaXRvcigmdmlzaXRvcikKICAgICAgICAgLCBtX2luaXRpYWxWaXNpdENv
dW50KHZpc2l0b3IudmlzaXRDb3VudCgpKQogICAgIHsKICAgICB9CiAgICAgCi0gICAgU2xvdFZp
c2l0b3ImIHZpc2l0b3IoKSBjb25zdCB7IHJldHVybiAqbV92aXNpdG9yOyB9CisgICAgQWJzdHJh
Y3RTbG90VmlzaXRvciYgdmlzaXRvcigpIGNvbnN0IHsgcmV0dXJuICptX3Zpc2l0b3I7IH0KICAg
ICAKICAgICBzaXplX3QgdmlzaXRDb3VudCgpIGNvbnN0CiAgICAgewpAQCAtNDcsNyArNDcsNyBA
QCBwdWJsaWM6CiAgICAgfQogICAgIAogcHJpdmF0ZToKLSAgICBTbG90VmlzaXRvciogbV92aXNp
dG9yIHsgbnVsbHB0ciB9OworICAgIEFic3RyYWN0U2xvdFZpc2l0b3IqIG1fdmlzaXRvciB7IG51
bGxwdHIgfTsKICAgICBzaXplX3QgbV9pbml0aWFsVmlzaXRDb3VudCB7IDAgfTsKIH07CiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtCbG9jay5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha0Jsb2NrLmNwcAkocmV2aXNpb24gMjcy
ODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha0Jsb2NrLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxNyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTk4LDEyICs5OCwxMSBAQCB2b2lkIFdlYWtCbG9jazo6c3dlZXAoKQogICAg
IEFTU0VSVCghbV9zd2VlcFJlc3VsdC5pc051bGwoKSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1l
IENvbnRhaW5lclR5cGU+Ci12b2lkIFdlYWtCbG9jazo6c3BlY2lhbGl6ZWRWaXNpdChDb250YWlu
ZXJUeXBlJiBjb250YWluZXIsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5h
bWUgQ29udGFpbmVyVHlwZSwgdHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgV2Vha0Jsb2NrOjpzcGVj
aWFsaXplZFZpc2l0KENvbnRhaW5lclR5cGUmIGNvbnRhaW5lciwgVmlzaXRvciYgdmlzaXRvcikK
IHsKLSAgICBIZWFwVmVyc2lvbiBtYXJraW5nVmVyc2lvbiA9IHZpc2l0b3IubWFya2luZ1ZlcnNp
b24oKTsKLQogICAgIHNpemVfdCBjb3VudCA9IHdlYWtJbXBsQ291bnQoKTsKKyAgICBIZWFwQW5h
bHl6ZXIqIGhlYXBBbmFseXplciA9IHZpc2l0b3Iudm0oKS5hY3RpdmVIZWFwQW5hbHl6ZXIoKTsK
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKICAgICAgICAgV2Vha0lt
cGwqIHdlYWtJbXBsID0gJndlYWtJbXBscygpW2ldOwogICAgICAgICBpZiAod2Vha0ltcGwtPnN0
YXRlKCkgIT0gV2Vha0ltcGw6OkxpdmUpCkBAIC0xMTQsMTIgKzExMywxMiBAQCB2b2lkIFdlYWtC
bG9jazo6c3BlY2lhbGl6ZWRWaXNpdChDb250YWluCiAgICAgICAgICAgICBjb250aW51ZTsKIAog
ICAgICAgICBKU1ZhbHVlIGpzVmFsdWUgPSB3ZWFrSW1wbC0+anNWYWx1ZSgpOwotICAgICAgICBp
ZiAoY29udGFpbmVyLmlzTWFya2VkKG1hcmtpbmdWZXJzaW9uLCBqc1ZhbHVlLmFzQ2VsbCgpKSkK
KyAgICAgICAgaWYgKHZpc2l0b3IuaXNNYXJrZWQoY29udGFpbmVyLCBqc1ZhbHVlLmFzQ2VsbCgp
KSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAKICAgICAgICAgY29uc3QgY2hhciog
cmVhc29uID0gIiI7CiAgICAgICAgIGNvbnN0IGNoYXIqKiByZWFzb25QdHIgPSBudWxscHRyOwot
ICAgICAgICBpZiAoVU5MSUtFTFkodmlzaXRvci5pc0FuYWx5emluZ0hlYXAoKSkpCisgICAgICAg
IGlmIChVTkxJS0VMWShoZWFwQW5hbHl6ZXIpKQogICAgICAgICAgICAgcmVhc29uUHRyID0gJnJl
YXNvbjsKIAogICAgICAgICBpZiAoIXdlYWtIYW5kbGVPd25lci0+aXNSZWFjaGFibGVGcm9tT3Bh
cXVlUm9vdHMoSGFuZGxlPFVua25vd24+Ojp3cmFwU2xvdCgmY29uc3RfY2FzdDxKU1ZhbHVlJj4o
anNWYWx1ZSkpLCB3ZWFrSW1wbC0+Y29udGV4dCgpLCB2aXNpdG9yLCByZWFzb25QdHIpKQpAQCAt
MTI3LDE0ICsxMjYsMTUgQEAgdm9pZCBXZWFrQmxvY2s6OnNwZWNpYWxpemVkVmlzaXQoQ29udGFp
bgogCiAgICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQoanNWYWx1ZSk7CiAKLSAgICAg
ICAgaWYgKFVOTElLRUxZKHZpc2l0b3IuaXNBbmFseXppbmdIZWFwKCkpKSB7CisgICAgICAgIGlm
IChVTkxJS0VMWShoZWFwQW5hbHl6ZXIpKSB7CiAgICAgICAgICAgICBpZiAoanNWYWx1ZS5pc0Nl
bGwoKSkKLSAgICAgICAgICAgICAgICB2aXNpdG9yLmhlYXBBbmFseXplcigpLT5zZXRPcGFxdWVS
b290UmVhY2hhYmlsaXR5UmVhc29uRm9yQ2VsbChqc1ZhbHVlLmFzQ2VsbCgpLCAqcmVhc29uUHRy
KTsKKyAgICAgICAgICAgICAgICBoZWFwQW5hbHl6ZXItPnNldE9wYXF1ZVJvb3RSZWFjaGFiaWxp
dHlSZWFzb25Gb3JDZWxsKGpzVmFsdWUuYXNDZWxsKCksICpyZWFzb25QdHIpOwogICAgICAgICB9
CiAgICAgfQogfQogCi12b2lkIFdlYWtCbG9jazo6dmlzaXQoU2xvdFZpc2l0b3ImIHZpc2l0b3Ip
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgorQUxXQVlTX0lOTElORSB2b2lkIFdlYWtCbG9j
azo6dmlzaXRJbXBsKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgLy8gSWYgYSBibG9jayBpcyBj
b21wbGV0ZWx5IGVtcHR5LCBhIHZpc2l0IHdvbid0IGhhdmUgYW55IGVmZmVjdC4KICAgICBpZiAo
aXNFbXB0eSgpKQpAQCAtMTQ5LDYgKzE0OSw5IEBAIHZvaWQgV2Vha0Jsb2NrOjp2aXNpdChTbG90
VmlzaXRvciYgdmlzaXQKICAgICAgICAgc3BlY2lhbGl6ZWRWaXNpdChtX2NvbnRhaW5lci5tYXJr
ZWRCbG9jaygpLCB2aXNpdG9yKTsKIH0KIAordm9pZCBXZWFrQmxvY2s6OnZpc2l0KEFic3RyYWN0
U2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsgdmlzaXRJbXBsKHZpc2l0b3IpOyB9Cit2b2lkIFdlYWtC
bG9jazo6dmlzaXQoU2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsgdmlzaXRJbXBsKHZpc2l0b3IpOyB9
CisKIHZvaWQgV2Vha0Jsb2NrOjpyZWFwKCkKIHsKICAgICAvLyBJZiBhIGJsb2NrIGlzIGNvbXBs
ZXRlbHkgZW1wdHksIGEgcmVhcGluZyB3b24ndCBoYXZlIGFueSBlZmZlY3QuCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrQmxvY2suaAkocmV2aXNpb24gMjcyODMwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha0Jsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTkgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0z
Miw2ICszMiw3IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCitjbGFzcyBBYnN0cmFjdFNsb3RWaXNp
dG9yOwogY2xhc3MgSGVhcDsKIGNsYXNzIFNsb3RWaXNpdG9yOwogCkBAIC02NSw3ICs2Niw4IEBA
IHB1YmxpYzoKICAgICB2b2lkIHN3ZWVwKCk7CiAgICAgU3dlZXBSZXN1bHQgdGFrZVN3ZWVwUmVz
dWx0KCk7CiAKLSAgICB2b2lkIHZpc2l0KFNsb3RWaXNpdG9yJik7CisgICAgSlNfRVhQT1JUX1BS
SVZBVEUgdm9pZCB2aXNpdChBYnN0cmFjdFNsb3RWaXNpdG9yJik7CisgICAgSlNfRVhQT1JUX1BS
SVZBVEUgdm9pZCB2aXNpdChTbG90VmlzaXRvciYpOwogCiAgICAgdm9pZCByZWFwKCk7CiAKQEAg
LTczLDEwICs3NSwxMiBAQCBwdWJsaWM6CiAgICAgdm9pZCBkaXNjb25uZWN0Q29udGFpbmVyKCkg
eyBtX2NvbnRhaW5lciA9IENlbGxDb250YWluZXIoKTsgfQogCiBwcml2YXRlOgorICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgdmlzaXRJbXBsKFZpc2l0b3ImKTsKKwogICAgIHN0
YXRpYyBGcmVlQ2VsbCogYXNGcmVlQ2VsbChXZWFrSW1wbCopOwogICAgIAotICAgIHRlbXBsYXRl
PHR5cGVuYW1lIENvbnRhaW5lclR5cGU+Ci0gICAgdm9pZCBzcGVjaWFsaXplZFZpc2l0KENvbnRh
aW5lclR5cGUmLCBTbG90VmlzaXRvciYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIENvbnRhaW5l
clR5cGUsIHR5cGVuYW1lIFZpc2l0b3I+CisgICAgdm9pZCBzcGVjaWFsaXplZFZpc2l0KENvbnRh
aW5lclR5cGUmLCBWaXNpdG9yJik7CiAKICAgICBleHBsaWNpdCBXZWFrQmxvY2soQ2VsbENvbnRh
aW5lcik7CiAgICAgdm9pZCBmaW5hbGl6ZShXZWFrSW1wbCopOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvV2Vha0hhbmRsZU93bmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrSGFuZGxlT3duZXIuY3BwCShyZXZpc2lvbiAyNzI4MzAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrSGFuZGxlT3duZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTM1LDcgKzM1LDcgQEAgV2Vha0hhbmRsZU93bmVyOjp+V2Vha0hhbmRsZU93bmVy
KCkKIHsKIH0KIAotYm9vbCBXZWFrSGFuZGxlT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJv
b3RzKEhhbmRsZTxVbmtub3duPiwgdm9pZCosIFNsb3RWaXNpdG9yJiwgY29uc3QgY2hhcioqKQor
Ym9vbCBXZWFrSGFuZGxlT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEhhbmRsZTxV
bmtub3duPiwgdm9pZCosIEFic3RyYWN0U2xvdFZpc2l0b3ImLCBjb25zdCBjaGFyKiopCiB7CiAg
ICAgcmV0dXJuIGZhbHNlOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vh
a0hhbmRsZU93bmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
V2Vha0hhbmRsZU93bmVyLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL1dlYWtIYW5kbGVPd25lci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI5LDEzICsyOSwxMyBA
QAogCiBuYW1lc3BhY2UgSlNDIHsKIAotY2xhc3MgU2xvdFZpc2l0b3I7CitjbGFzcyBBYnN0cmFj
dFNsb3RWaXNpdG9yOwogCiBjbGFzcyBKU19FWFBPUlRfUFJJVkFURSBXZWFrSGFuZGxlT3duZXIg
ewogcHVibGljOgogICAgIHZpcnR1YWwgfldlYWtIYW5kbGVPd25lcigpOwogICAgIC8vIHJlYXNv
biB3aWxsIG9ubHkgYmUgbm9uLW51bGwgd2hlbiBnZW5lcmF0aW5nIGEgZGVidWcgR0MgaGVhcCBz
bmFwc2hvdC4KLSAgICB2aXJ0dWFsIGJvb2wgaXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSGFu
ZGxlPFVua25vd24+LCB2b2lkKiBjb250ZXh0LCBTbG90VmlzaXRvciYsIGNoYXIgY29uc3QqKiBy
ZWFzb24gPSBudWxscHRyKTsKKyAgICB2aXJ0dWFsIGJvb2wgaXNSZWFjaGFibGVGcm9tT3BhcXVl
Um9vdHMoSGFuZGxlPFVua25vd24+LCB2b2lkKiBjb250ZXh0LCBBYnN0cmFjdFNsb3RWaXNpdG9y
JiwgY2hhciBjb25zdCoqIHJlYXNvbiA9IG51bGxwdHIpOwogICAgIHZpcnR1YWwgdm9pZCBmaW5h
bGl6ZShIYW5kbGU8VW5rbm93bj4sIHZvaWQqIGNvbnRleHQpOwogfTsKIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha1NldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvV2Vha1NldC5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtTZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjMs
NCArMTIzLDcgQEAgdm9pZCBXZWFrU2V0OjpyZW1vdmVBbGxvY2F0b3IoV2Vha0Jsb2NrKgogICAg
IFdlYWtCbG9jazo6ZGVzdHJveSgqaGVhcCgpLCBibG9jayk7CiB9CiAKK3RlbXBsYXRlIHZvaWQg
V2Vha1NldDo6dmlzaXQoQWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBXZWFr
U2V0Ojp2aXNpdChTbG90VmlzaXRvciYpOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtTZXQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrU2V0LmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtTZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTUxLDcg
KzUxLDcgQEAgcHVibGljOgogICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0OwogICAgIGJvb2wgaXNU
cml2aWFsbHlEZXN0cnVjdGlibGUoKSBjb25zdDsKIAotICAgIHZvaWQgdmlzaXQoU2xvdFZpc2l0
b3ImKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIHZpc2l0KFZpc2l0b3Im
KTsKIAogICAgIHZvaWQgcmVhcCgpOwogICAgIHZvaWQgc3dlZXAoKTsKQEAgLTExNCw3ICsxMTQs
OCBAQCBpbmxpbmUgdm9pZCBXZWFrU2V0OjpsYXN0Q2hhbmNlVG9GaW5hbGl6CiAgICAgICAgIGJs
b2NrLT5sYXN0Q2hhbmNlVG9GaW5hbGl6ZSgpOwogfQogCi1pbmxpbmUgdm9pZCBXZWFrU2V0Ojp2
aXNpdChTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Citp
bmxpbmUgdm9pZCBXZWFrU2V0Ojp2aXNpdChWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGZvciAo
V2Vha0Jsb2NrKiBibG9jayA9IG1fYmxvY2tzLmhlYWQoKTsgYmxvY2s7IGJsb2NrID0gYmxvY2st
Pm5leHQoKSkKICAgICAgICAgYmxvY2stPnZpc2l0KHZpc2l0b3IpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1NoYWRvd0NoaWNrZW4uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TaGFkb3dDaGlja2VuLmNwcAkocmV2
aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1NoYWRv
d0NoaWNrZW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxNi0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDQwLDcgKzQ0MCw5IEBAIHZvaWQgU2hh
ZG93Q2hpY2tlbjo6dXBkYXRlKFZNJiB2bSwgQ2FsbEYKICAgICAgICAgZGF0YUxvZygiICAgIEFm
dGVyIGNsZWFuLXVwOiAiLCAqdGhpcywgIlxuIik7CiB9CiAKLXZvaWQgU2hhZG93Q2hpY2tlbjo6
dmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vIFdlIGRvbid0IG5lZWQgYSBT
bG90VmlzaXRvciB2ZXJzaW9uIG9mIHRoaXMgYmVjYXVzZSBTaGFkb3dDaGlja2VuIGlzIG9ubHkg
dXNlZCBieSB0aGUKKy8vIERlYnVnZ2VyLCBhbmQgaXMgdGhlcmVmb3JlIG5vdCBvbiB0aGUgY3Jp
dGljYWwgcGF0aCBmb3IgcGVyZm9ybWFuY2UuCit2b2lkIFNoYWRvd0NoaWNrZW46OnZpc2l0Q2hp
bGRyZW4oQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBmb3IgKHVuc2lnbmVk
IGkgPSBtX2xvZ0N1cnNvciAtIG1fbG9nOyBpLS07KSB7CiAgICAgICAgIEpTT2JqZWN0KiBjYWxs
ZWUgPSBtX2xvZ1tpXS5jYWxsZWU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJw
cmV0ZXIvU2hhZG93Q2hpY2tlbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnRlcnByZXRlci9TaGFkb3dDaGlja2VuLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TaGFkb3dDaGlja2VuLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIxIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtMzUsMTMgKzM1LDEzIEBACiAKIG5hbWVzcGFjZSBKU0MgewogCitjbGFzcyBBYnN0cmFjdFNs
b3RWaXNpdG9yOwogY2xhc3MgQ2FsbEZyYW1lOwogY2xhc3MgQ29kZUJsb2NrOwogY2xhc3MgSlNB
cnJheTsKIGNsYXNzIEpTT2JqZWN0OwogY2xhc3MgSlNTY29wZTsKIGNsYXNzIExMSW50T2Zmc2V0
c0V4dHJhY3RvcjsKLWNsYXNzIFNsb3RWaXNpdG9yOwogY2xhc3MgVk07CiAKIC8vIFNoYWRvd0No
aWNrZW4gaXMgYSBsb2cgdGhhdCBjYW4gYmUgdXNlZCB0byBwcm9kdWNlIGEgc2hhZG93IHN0YWNr
IG9mIENISUNLRU4tc3R5bGUgc3RhY2sgZnJhbWVzLgpAQCAtMTk2LDcgKzE5Niw3IEBAIHB1Ymxp
YzoKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgogICAgIHZvaWQgaXRlcmF0ZShWTSYs
IENhbGxGcmFtZSosIGNvbnN0IEZ1bmN0b3ImKTsKICAgICAKLSAgICB2b2lkIHZpc2l0Q2hpbGRy
ZW4oU2xvdFZpc2l0b3ImKTsKKyAgICB2b2lkIHZpc2l0Q2hpbGRyZW4oQWJzdHJhY3RTbG90Vmlz
aXRvciYpOwogICAgIHZvaWQgcmVzZXQoKTsKICAgICAKICAgICAvLyBKSVQgc3VwcG9ydC4KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvR0NBd2FyZUpJVFN0dWJSb3V0aW5lLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0dDQXdhcmVKSVRTdHViUm91
dGluZS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
R0NBd2FyZUpJVFN0dWJSb3V0aW5lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTczLDEwICs3Myw2
IEBAIHZvaWQgR0NBd2FyZUpJVFN0dWJSb3V0aW5lOjpkZWxldGVGcm9tR0MKICAgICBkZWxldGUg
dGhpczsKIH0KIAotdm9pZCBHQ0F3YXJlSklUU3R1YlJvdXRpbmU6Om1hcmtSZXF1aXJlZE9iamVj
dHNJbnRlcm5hbChTbG90VmlzaXRvciYpCi17Ci19Ci0KIE1hcmtpbmdHQ0F3YXJlSklUU3R1YlJv
dXRpbmU6Ok1hcmtpbmdHQ0F3YXJlSklUU3R1YlJvdXRpbmUoCiAgICAgY29uc3QgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiYgY29kZSwgVk0mIHZtLCBjb25zdCBK
U0NlbGwqIG93bmVyLAogICAgIGNvbnN0IFZlY3RvcjxKU0NlbGwqPiYgY2VsbHMsIEJhZzxDYWxs
TGlua0luZm8+JiYgY2FsbExpbmtJbmZvcykKQEAgLTkyLDEyICs4OCwyMSBAQCBNYXJraW5nR0NB
d2FyZUpJVFN0dWJSb3V0aW5lOjp+TWFya2luZ0dDCiB7CiB9CiAKLXZvaWQgTWFya2luZ0dDQXdh
cmVKSVRTdHViUm91dGluZTo6bWFya1JlcXVpcmVkT2JqZWN0c0ludGVybmFsKFNsb3RWaXNpdG9y
JiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK0FMV0FZU19JTkxJTkUgdm9p
ZCBNYXJraW5nR0NBd2FyZUpJVFN0dWJSb3V0aW5lOjptYXJrUmVxdWlyZWRPYmplY3RzSW50ZXJu
YWxJbXBsKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgZm9yIChhdXRvJiBlbnRyeSA6IG1fY2Vs
bHMpCiAgICAgICAgIHZpc2l0b3IuYXBwZW5kKGVudHJ5KTsKIH0KIAordm9pZCBNYXJraW5nR0NB
d2FyZUpJVFN0dWJSb3V0aW5lOjptYXJrUmVxdWlyZWRPYmplY3RzSW50ZXJuYWwoQWJzdHJhY3RT
bG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBtYXJrUmVxdWlyZWRPYmplY3RzSW50ZXJuYWxJ
bXBsKHZpc2l0b3IpOworfQordm9pZCBNYXJraW5nR0NBd2FyZUpJVFN0dWJSb3V0aW5lOjptYXJr
UmVxdWlyZWRPYmplY3RzSW50ZXJuYWwoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgbWFy
a1JlcXVpcmVkT2JqZWN0c0ludGVybmFsSW1wbCh2aXNpdG9yKTsKK30KIAogR0NBd2FyZUpJVFN0
dWJSb3V0aW5lV2l0aEV4Y2VwdGlvbkhhbmRsZXI6OkdDQXdhcmVKSVRTdHViUm91dGluZVdpdGhF
eGNlcHRpb25IYW5kbGVyKAogICAgIGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRTdHVi
Um91dGluZVB0clRhZz4mIGNvZGUsIFZNJiB2bSwgIGNvbnN0IEpTQ2VsbCogb3duZXIsIGNvbnN0
IFZlY3RvcjxKU0NlbGwqPiYgY2VsbHMsIEJhZzxDYWxsTGlua0luZm8+JiYgY2FsbExpbmtJbmZv
cywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvR0NBd2FyZUpJVFN0dWJSb3V0aW5l
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9HQ0F3YXJlSklUU3R1
YlJvdXRpbmUuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9HQ0F3YXJlSklUU3R1YlJvdXRpbmUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTYwLDggKzYwLDkg
QEAgcHVibGljOgogICAgIHsKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgR0NBd2FyZUpJ
VFN0dWJSb3V0aW5lKGNvZGUsIHZtKSk7CiAgICAgfQotICAgIAotICAgIHZvaWQgbWFya1JlcXVp
cmVkT2JqZWN0cyhTbG90VmlzaXRvciYgdmlzaXRvcikKKworICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFZpc2l0b3I+CisgICAgdm9pZCBtYXJrUmVxdWlyZWRPYmplY3RzKFZpc2l0b3ImIHZpc2l0b3Ip
CiAgICAgewogICAgICAgICBtYXJrUmVxdWlyZWRPYmplY3RzSW50ZXJuYWwodmlzaXRvcik7CiAg
ICAgfQpAQCAtNzEsNyArNzIsOCBAQCBwdWJsaWM6CiBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBvYnNl
cnZlWmVyb1JlZkNvdW50KCkgb3ZlcnJpZGU7CiAgICAgCi0gICAgdmlydHVhbCB2b2lkIG1hcmtS
ZXF1aXJlZE9iamVjdHNJbnRlcm5hbChTbG90VmlzaXRvciYpOworICAgIHZpcnR1YWwgdm9pZCBt
YXJrUmVxdWlyZWRPYmplY3RzSW50ZXJuYWwoQWJzdHJhY3RTbG90VmlzaXRvciYpIHsgfQorICAg
IHZpcnR1YWwgdm9pZCBtYXJrUmVxdWlyZWRPYmplY3RzSW50ZXJuYWwoU2xvdFZpc2l0b3ImKSB7
IH0KIAogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgSklUU3R1YlJvdXRpbmVTZXQ7CkBAIC04
OSw3ICs5MSw5IEBAIHB1YmxpYzoKICAgICB+TWFya2luZ0dDQXdhcmVKSVRTdHViUm91dGluZSgp
IG92ZXJyaWRlOwogICAgIAogcHJvdGVjdGVkOgotICAgIHZvaWQgbWFya1JlcXVpcmVkT2JqZWN0
c0ludGVybmFsKFNsb3RWaXNpdG9yJikgb3ZlcnJpZGU7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
VmlzaXRvcj4gdm9pZCBtYXJrUmVxdWlyZWRPYmplY3RzSW50ZXJuYWxJbXBsKFZpc2l0b3ImKTsK
KyAgICB2b2lkIG1hcmtSZXF1aXJlZE9iamVjdHNJbnRlcm5hbChBYnN0cmFjdFNsb3RWaXNpdG9y
JikgZmluYWw7CisgICAgdm9pZCBtYXJrUmVxdWlyZWRPYmplY3RzSW50ZXJuYWwoU2xvdFZpc2l0
b3ImKSBmaW5hbDsKIAogcHJpdmF0ZToKICAgICBWZWN0b3I8V3JpdGVCYXJyaWVyPEpTQ2VsbD4+
IG1fY2VsbHM7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFdvcmtsaXN0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFdvcmtsaXN0LmNw
cAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRXb3Jr
bGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDE2LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE2LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L1BvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L1BvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lLmNwcAkocmV2aXNpb24g
MjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Qb2x5bW9ycGhpY0NhbGxTdHVi
Um91dGluZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDE1LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE1LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMzUsMTIgKzEzNSwyMiBAQCBib29sIFBv
bHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lOjp2aXNpdFdlCiAgICAgcmV0dXJuIGlzU3RpbGxMaXZl
OwogfQogCi12b2lkIFBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lOjptYXJrUmVxdWlyZWRPYmpl
Y3RzSW50ZXJuYWwoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNp
dG9yPgorQUxXQVlTX0lOTElORSB2b2lkIFBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lOjptYXJr
UmVxdWlyZWRPYmplY3RzSW50ZXJuYWxJbXBsKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgZm9y
IChhdXRvJiB2YXJpYW50IDogbV92YXJpYW50cykKICAgICAgICAgdmlzaXRvci5hcHBlbmQodmFy
aWFudCk7CiB9CiAKK3ZvaWQgUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmU6Om1hcmtSZXF1aXJl
ZE9iamVjdHNJbnRlcm5hbChBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIG1h
cmtSZXF1aXJlZE9iamVjdHNJbnRlcm5hbEltcGwodmlzaXRvcik7Cit9Cit2b2lkIFBvbHltb3Jw
aGljQ2FsbFN0dWJSb3V0aW5lOjptYXJrUmVxdWlyZWRPYmplY3RzSW50ZXJuYWwoU2xvdFZpc2l0
b3ImIHZpc2l0b3IpCit7CisgICAgbWFya1JlcXVpcmVkT2JqZWN0c0ludGVybmFsSW1wbCh2aXNp
dG9yKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBFTkFCTEUoSklUKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Qb2x5bW9ycGhpY0NhbGxTdHViUm91dGlu
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUG9seW1vcnBoaWND
YWxsU3R1YlJvdXRpbmUuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9Qb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE4IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MTA1LDYgKzEwNSw4IEBAIHB1YmxpYzoKICAgICBib29sIHZpc2l0V2VhayhWTSYpIGZpbmFsOwog
CiBwcml2YXRlOgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgbWFya1JlcXVp
cmVkT2JqZWN0c0ludGVybmFsSW1wbChWaXNpdG9yJik7CisgICAgdm9pZCBtYXJrUmVxdWlyZWRP
YmplY3RzSW50ZXJuYWwoQWJzdHJhY3RTbG90VmlzaXRvciYpIGZpbmFsOwogICAgIHZvaWQgbWFy
a1JlcXVpcmVkT2JqZWN0c0ludGVybmFsKFNsb3RWaXNpdG9yJikgZmluYWw7CiAKICAgICBWZWN0
b3I8V3JpdGVCYXJyaWVyPEpTQ2VsbD4sIDI+IG1fdmFyaWFudHM7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9BYnN0cmFjdE1vZHVsZVJlY29yZC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQWJzdHJhY3RNb2R1bGVSZWNvcmQuY3Bw
CShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BYnN0
cmFjdE1vZHVsZVJlY29yZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02MCw3ICs2MCw4IEBAIHZv
aWQgQWJzdHJhY3RNb2R1bGVSZWNvcmQ6OmZpbmlzaENyZWF0aW8KICAgICBwdXREaXJlY3Qodm0s
IElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJkZXBlbmRlbmNpZXNNYXAiX3MpLCBtX2RlcGVu
ZGVuY2llc01hcC5nZXQoKSk7CiB9CiAKLXZvaWQgQWJzdHJhY3RNb2R1bGVSZWNvcmQ6OnZpc2l0
Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5
cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEFic3RyYWN0TW9kdWxlUmVjb3JkOjp2aXNpdENoaWxkcmVu
SW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgQWJzdHJhY3RNb2R1
bGVSZWNvcmQqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8QWJzdHJhY3RNb2R1bGVSZWNvcmQqPihjZWxs
KTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBA
IC03MCw2ICs3MSw4IEBAIHZvaWQgQWJzdHJhY3RNb2R1bGVSZWNvcmQ6OnZpc2l0Q2hpbGRyZW4K
ICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2RlcGVuZGVuY2llc01hcCk7CiB9CiAK
K0RFRklORV9WSVNJVF9DSElMRFJFTihBYnN0cmFjdE1vZHVsZVJlY29yZCk7CisKIHZvaWQgQWJz
dHJhY3RNb2R1bGVSZWNvcmQ6OmFwcGVuZFJlcXVlc3RlZE1vZHVsZShjb25zdCBJZGVudGlmaWVy
JiBtb2R1bGVOYW1lKQogewogICAgIG1fcmVxdWVzdGVkTW9kdWxlcy5hZGQobW9kdWxlTmFtZS5p
bXBsKCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQWJzdHJhY3RNb2R1
bGVSZWNvcmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9B
YnN0cmFjdE1vZHVsZVJlY29yZC5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9BYnN0cmFjdE1vZHVsZVJlY29yZC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEz
Niw3ICsxMzYsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgQWJzdHJhY3RNb2R1bGVSZWNvcmQoVk0mLCBT
dHJ1Y3R1cmUqLCBjb25zdCBJZGVudGlmaWVyJik7CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihK
U0dsb2JhbE9iamVjdCosIFZNJik7CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpT
Q2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAg
IHZvaWQgc2V0TW9kdWxlRW52aXJvbm1lbnQoSlNHbG9iYWxPYmplY3QqLCBKU01vZHVsZUVudmly
b25tZW50Kik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FyZ0xpc3Qu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FyZ0xpc3Qu
Y3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9B
cmdMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiAgQ29weXJp
Z2h0IChDKSAyMDAzLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENv
cHlyaWdodCAoQykgMjAwMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCkBAIC01MSw3ICs1MSw4IEBAIHZvaWQgQXJnTGlzdDo6Z2V0U2xp
Y2UoaW50IHN0YXJ0SW5kZXgsIEEKICAgICByZXN1bHQubV9hcmdDb3VudCA9ICBtX2FyZ0NvdW50
IC0gc3RhcnRJbmRleDsKIH0KIAotdm9pZCBNYXJrZWRBcmd1bWVudEJ1ZmZlcjo6bWFya0xpc3Rz
KFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBMaXN0U2V0JiBtYXJrU2V0KQordGVtcGxhdGU8dHlwZW5h
bWUgVmlzaXRvcj4KK3ZvaWQgTWFya2VkQXJndW1lbnRCdWZmZXI6Om1hcmtMaXN0cyhWaXNpdG9y
JiB2aXNpdG9yLCBMaXN0U2V0JiBtYXJrU2V0KQogewogICAgIExpc3RTZXQ6Oml0ZXJhdG9yIGVu
ZCA9IG1hcmtTZXQuZW5kKCk7CiAgICAgZm9yIChMaXN0U2V0OjppdGVyYXRvciBpdCA9IG1hcmtT
ZXQuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CkBAIC02MSw2ICs2Miw5IEBAIHZvaWQgTWFy
a2VkQXJndW1lbnRCdWZmZXI6Om1hcmtMaXN0cyhTbG8KICAgICB9CiB9CiAKK3RlbXBsYXRlIHZv
aWQgTWFya2VkQXJndW1lbnRCdWZmZXI6Om1hcmtMaXN0cyhBYnN0cmFjdFNsb3RWaXNpdG9yJiwg
TGlzdFNldCYpOwordGVtcGxhdGUgdm9pZCBNYXJrZWRBcmd1bWVudEJ1ZmZlcjo6bWFya0xpc3Rz
KFNsb3RWaXNpdG9yJiwgTGlzdFNldCYpOworCiB2b2lkIE1hcmtlZEFyZ3VtZW50QnVmZmVyOjpz
bG93RW5zdXJlQ2FwYWNpdHkoc2l6ZV90IHJlcXVlc3RlZENhcGFjaXR5KQogewogICAgIHNldE5l
ZWRzT3ZlcmZsb3dDaGVjaygpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
QXJnTGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Fy
Z0xpc3QuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvQXJnTGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqICBDb3B5
cmlnaHQgKEMpIDE5OTktMjAwMSBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQotICogIENv
cHlyaWdodCAoQykgMjAwMy0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
ICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMTE4LDcgKzExOCw3IEBAIHB1YmxpYzoKICAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAgICAgICAgIAotICAgIHN0YXRpYyB2b2lkIG1hcmtM
aXN0cyhTbG90VmlzaXRvciYsIExpc3RTZXQmKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNp
dG9yPiBzdGF0aWMgdm9pZCBtYXJrTGlzdHMoVmlzaXRvciYsIExpc3RTZXQmKTsKIAogICAgIHZv
aWQgZW5zdXJlQ2FwYWNpdHkoc2l6ZV90IHJlcXVlc3RlZENhcGFjaXR5KQogICAgIHsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlYWJsZUlkZW50aWZpZXIuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWFibGVJZGVudGlm
aWVyLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0NhY2hlYWJsZUlkZW50aWZpZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDIwLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00Miw3ICs0Miw2IEBAIG5hbWVz
cGFjZSBKU0MgewogY2xhc3MgQ29kZUJsb2NrOwogY2xhc3MgSWRlbnRpZmllcjsKIGNsYXNzIEpT
Q2VsbDsKLWNsYXNzIFNsb3RWaXNpdG9yOwogCiBjbGFzcyBDYWNoZWFibGVJZGVudGlmaWVyIHsK
IHB1YmxpYzoKQEAgLTg3LDcgKzg2LDcgQEAgcHVibGljOgogCiAgICAgdWludHB0cl90IHJhd0Jp
dHMoKSBjb25zdCB7IHJldHVybiBtX2JpdHM7IH0KIAotICAgIGlubGluZSB2b2lkIHZpc2l0QWdn
cmVnYXRlKFNsb3RWaXNpdG9yJikgY29uc3Q7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRv
cj4gaW5saW5lIHZvaWQgdmlzaXRBZ2dyZWdhdGUoVmlzaXRvciYpIGNvbnN0OwogCiAgICAgSlNf
RVhQT1JUX1BSSVZBVEUgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlYWJsZUlkZW50aWZpZXJJbmxpbmVzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVhYmxlSWRl
bnRpZmllcklubGluZXMuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQ2FjaGVhYmxlSWRlbnRpZmllcklubGluZXMuaAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIwLTIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0x
MzcsNyArMTM3LDggQEAgaW5saW5lIHZvaWQgQ2FjaGVhYmxlSWRlbnRpZmllcjo6c2V0VWlkQgog
ICAgIG1fYml0cyA9IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KHVpZCkgfCBzX3VpZFRhZzsKIH0K
IAotaW5saW5lIHZvaWQgQ2FjaGVhYmxlSWRlbnRpZmllcjo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZp
c2l0b3ImIHZpc2l0b3IpIGNvbnN0Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgoraW5saW5l
IHZvaWQgQ2FjaGVhYmxlSWRlbnRpZmllcjo6dmlzaXRBZ2dyZWdhdGUoVmlzaXRvciYgdmlzaXRv
cikgY29uc3QKIHsKICAgICBpZiAobV9iaXRzICYmIGlzQ2VsbCgpKQogICAgICAgICB2aXNpdG9y
LmFwcGVuZFVuYmFycmllcmVkKGNlbGwoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9DbGFzc0luZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9DbGFzc0luZm8uaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQ2xhc3NJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSw3IEBA
CiAvKgogICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAxIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtk
ZS5vcmcpCiAgKiAgQ29weXJpZ2h0IChDKSAyMDAxIFBldGVyIEtlbGx5IChwbWtAcG9zdC5jb20p
Ci0gKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogIENvcHlyaWdodCAoQykgMjAwMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC00NCw5ICs0NCw2IEBAIHN0cnVjdCBN
ZXRob2RUYWJsZSB7CiAgICAgdXNpbmcgRGVzdHJveUZ1bmN0aW9uUHRyID0gdm9pZCAoKikoSlND
ZWxsKik7CiAgICAgRGVzdHJveUZ1bmN0aW9uUHRyIE1FVEhPRF9UQUJMRV9FTlRSWShkZXN0cm95
KTsKIAotICAgIHVzaW5nIFZpc2l0Q2hpbGRyZW5GdW5jdGlvblB0ciA9IHZvaWQgKCopKEpTQ2Vs
bCosIFNsb3RWaXNpdG9yJik7Ci0gICAgVmlzaXRDaGlsZHJlbkZ1bmN0aW9uUHRyIE1FVEhPRF9U
QUJMRV9FTlRSWSh2aXNpdENoaWxkcmVuKTsKLQogICAgIHVzaW5nIEdldENhbGxEYXRhRnVuY3Rp
b25QdHIgPSBDYWxsRGF0YSAoKikoSlNDZWxsKik7CiAgICAgR2V0Q2FsbERhdGFGdW5jdGlvblB0
ciBNRVRIT0RfVEFCTEVfRU5UUlkoZ2V0Q2FsbERhdGEpOwogCkBAIC0xMjAsOCArMTE3LDIzIEBA
IHN0cnVjdCBNZXRob2RUYWJsZSB7CiAgICAgdXNpbmcgRXN0aW1hdGVkU2l6ZUZ1bmN0aW9uUHRy
ID0gc2l6ZV90ICgqKShKU0NlbGwqLCBWTSYpOwogICAgIEVzdGltYXRlZFNpemVGdW5jdGlvblB0
ciBNRVRIT0RfVEFCTEVfRU5UUlkoZXN0aW1hdGVkU2l6ZSk7CiAKKyAgICB1c2luZyBWaXNpdENo
aWxkcmVuRnVuY3Rpb25QdHIgPSB2b2lkICgqKShKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAg
IFZpc2l0Q2hpbGRyZW5GdW5jdGlvblB0ciBNRVRIT0RfVEFCTEVfRU5UUlkodmlzaXRDaGlsZHJl
bldpdGhTbG90VmlzaXRvcik7CisKKyAgICB1c2luZyBWaXNpdENoaWxkcmVuV2l0aEFic3RyYWN0
U2xvdFZpc2l0b3JQdHIgPSB2b2lkICgqKShKU0NlbGwqLCBBYnN0cmFjdFNsb3RWaXNpdG9yJik7
CisgICAgVmlzaXRDaGlsZHJlbldpdGhBYnN0cmFjdFNsb3RWaXNpdG9yUHRyIE1FVEhPRF9UQUJM
RV9FTlRSWSh2aXNpdENoaWxkcmVuV2l0aEFic3RyYWN0U2xvdFZpc2l0b3IpOworCisgICAgQUxX
QVlTX0lOTElORSB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYg
dmlzaXRvcikgY29uc3QgeyB2aXNpdENoaWxkcmVuV2l0aFNsb3RWaXNpdG9yKGNlbGwsIHZpc2l0
b3IpOyB9CisgICAgQUxXQVlTX0lOTElORSB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxs
LCBBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBjb25zdCB7IHZpc2l0Q2hpbGRyZW5XaXRo
QWJzdHJhY3RTbG90VmlzaXRvcihjZWxsLCB2aXNpdG9yKTsgfQorCiAgICAgdXNpbmcgVmlzaXRP
dXRwdXRDb25zdHJhaW50c1B0ciA9IHZvaWQgKCopKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7Ci0g
ICAgVmlzaXRPdXRwdXRDb25zdHJhaW50c1B0ciBNRVRIT0RfVEFCTEVfRU5UUlkodmlzaXRPdXRw
dXRDb25zdHJhaW50cyk7CisgICAgVmlzaXRPdXRwdXRDb25zdHJhaW50c1B0ciBNRVRIT0RfVEFC
TEVfRU5UUlkodmlzaXRPdXRwdXRDb25zdHJhaW50c1dpdGhTbG90VmlzaXRvcik7CisKKyAgICB1
c2luZyBWaXNpdE91dHB1dENvbnN0cmFpbnRzV2l0aEFic3RyYWN0U2xvdFZpc2l0b3JQdHIgPSB2
b2lkICgqKShKU0NlbGwqLCBBYnN0cmFjdFNsb3RWaXNpdG9yJik7CisgICAgVmlzaXRPdXRwdXRD
b25zdHJhaW50c1dpdGhBYnN0cmFjdFNsb3RWaXNpdG9yUHRyIE1FVEhPRF9UQUJMRV9FTlRSWSh2
aXNpdE91dHB1dENvbnN0cmFpbnRzV2l0aEFic3RyYWN0U2xvdFZpc2l0b3IpOworCisgICAgQUxX
QVlTX0lOTElORSB2b2lkIHZpc2l0T3V0cHV0Q29uc3RyYWludHMoSlNDZWxsKiBjZWxsLCBTbG90
VmlzaXRvciYgdmlzaXRvcikgY29uc3QgeyB2aXNpdE91dHB1dENvbnN0cmFpbnRzV2l0aFNsb3RW
aXNpdG9yKGNlbGwsIHZpc2l0b3IpOyB9CisgICAgQUxXQVlTX0lOTElORSB2b2lkIHZpc2l0T3V0
cHV0Q29uc3RyYWludHMoSlNDZWxsKiBjZWxsLCBBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9y
KSBjb25zdCB7IHZpc2l0T3V0cHV0Q29uc3RyYWludHNXaXRoQWJzdHJhY3RTbG90VmlzaXRvcihj
ZWxsLCB2aXNpdG9yKTsgfQogfTsKIAogI2RlZmluZSBDUkVBVEVfTUVNQkVSX0NIRUNLRVIobWVt
YmVyKSBcCkBAIC0xNDcsNyArMTU5LDYgQEAgc3RydWN0IE1ldGhvZFRhYmxlIHsKICAgICBKU0Nh
c3RpbmdIZWxwZXJzOjpJbmhlcml0c1RyYWl0czxDbGFzc05hbWU+Ojp0eXBlUmFuZ2UsIFwKICAg
ICB7IFwKICAgICAgICAgJkNsYXNzTmFtZTo6ZGVzdHJveSwgXAotICAgICAgICAmQ2xhc3NOYW1l
Ojp2aXNpdENoaWxkcmVuLCBcCiAgICAgICAgICZDbGFzc05hbWU6OmdldENhbGxEYXRhLCBcCiAg
ICAgICAgICZDbGFzc05hbWU6OmdldENvbnN0cnVjdERhdGEsIFwKICAgICAgICAgJkNsYXNzTmFt
ZTo6cHV0LCBcCkBAIC0xNzMsNiArMTg0LDkgQEAgc3RydWN0IE1ldGhvZFRhYmxlIHsKICAgICAg
ICAgJkNsYXNzTmFtZTo6ZHVtcFRvU3RyZWFtLCBcCiAgICAgICAgICZDbGFzc05hbWU6OmFuYWx5
emVIZWFwLCBcCiAgICAgICAgICZDbGFzc05hbWU6OmVzdGltYXRlZFNpemUsIFwKKyAgICAgICAg
JkNsYXNzTmFtZTo6dmlzaXRDaGlsZHJlbiwgXAorICAgICAgICAmQ2xhc3NOYW1lOjp2aXNpdENo
aWxkcmVuLCBcCisgICAgICAgICZDbGFzc05hbWU6OnZpc2l0T3V0cHV0Q29uc3RyYWludHMsIFwK
ICAgICAgICAgJkNsYXNzTmFtZTo6dmlzaXRPdXRwdXRDb25zdHJhaW50cywgXAogICAgIH0sIFwK
ICAgICBDbGFzc05hbWU6OlR5cGVkQXJyYXlTdG9yYWdlVHlwZSwgXApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xvbmVkQXJndW1lbnRzLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DbG9uZWRBcmd1bWVudHMuY3BwCShyZXZpc2lv
biAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DbG9uZWRBcmd1bWVu
dHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxNS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjY3LDcgKzI2Nyw4IEBAIHZvaWQgQ2xvbmVkQXJn
dW1lbnRzOjptYXRlcmlhbGl6ZVNwZWNpYWwKICAgICAgICAgbWF0ZXJpYWxpemVTcGVjaWFscyhn
bG9iYWxPYmplY3QpOwogfQogCi12b2lkIENsb25lZEFyZ3VtZW50czo6dmlzaXRDaGlsZHJlbihK
U0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlz
aXRvcj4KK3ZvaWQgQ2xvbmVkQXJndW1lbnRzOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNl
bGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgQ2xvbmVkQXJndW1lbnRzKiB0aGlzT2JqZWN0
ID0ganNDYXN0PENsb25lZEFyZ3VtZW50cyo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1Rf
SU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTI3NSw1ICsyNzYsNyBAQCB2b2lkIENs
b25lZEFyZ3VtZW50czo6dmlzaXRDaGlsZHJlbihKU0NlCiAgICAgdmlzaXRvci5hcHBlbmQodGhp
c09iamVjdC0+bV9jYWxsZWUpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oQ2xvbmVkQXJn
dW1lbnRzKTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0Nsb25lZEFyZ3VtZW50cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0Nsb25lZEFyZ3VtZW50cy5oCShyZXZpc2lvbiAyNzI4MzApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DbG9uZWRBcmd1bWVudHMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTYyLDcgKzYyLDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBTdHJ1Y3R1cmUq
IGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBwcm90b3R5cGUp
OwogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVNsb3dQdXRTdHJ1Y3R1cmUoVk0mLCBKU0ds
b2JhbE9iamVjdCosIEpTVmFsdWUgcHJvdG90eXBlKTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0
Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxE
UkVOOwogCiAgICAgREVDTEFSRV9JTkZPOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9EaXJlY3RBcmd1bWVudHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTgg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIw
MjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC05MCw3ICs5MCw4IEBAIHNpemVfdCBEaXJlY3RBcmd1bWVudHM6OmVzdGlt
YXRlZFNpemUoSlMKICAgICByZXR1cm4gQmFzZTo6ZXN0aW1hdGVkU2l6ZShjZWxsLCB2bSkgKyBt
YXBwZWRBcmd1bWVudHNTaXplICsgbW9kaWZpZWRBcmd1bWVudHNTaXplOwogfQogCi12b2lkIERp
cmVjdEFyZ3VtZW50czo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIHRoaXNDZWxsLCBTbG90VmlzaXRv
ciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIERpcmVjdEFyZ3Vt
ZW50czo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiB0aGlzQ2VsbCwgVmlzaXRvciYgdmlzaXRv
cikKIHsKICAgICBEaXJlY3RBcmd1bWVudHMqIHRoaXNPYmplY3QgPSBzdGF0aWNfY2FzdDxEaXJl
Y3RBcmd1bWVudHMqPih0aGlzQ2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0
aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtMTA0LDYgKzEwNSw4IEBAIHZvaWQgRGlyZWN0QXJndW1l
bnRzOjp2aXNpdENoaWxkcmVuKEpTQ2UKICAgICBHZW5lcmljQXJndW1lbnRzPERpcmVjdEFyZ3Vt
ZW50cz46OnZpc2l0Q2hpbGRyZW4odGhpc0NlbGwsIHZpc2l0b3IpOwogfQogCitERUZJTkVfVklT
SVRfQ0hJTERSRU4oRGlyZWN0QXJndW1lbnRzKTsKKwogU3RydWN0dXJlKiBEaXJlY3RBcmd1bWVu
dHM6OmNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEpTVmFsdWUgcHJvdG90eXBlKQogewogICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwg
Z2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKERpcmVjdEFyZ3VtZW50c1R5cGUsIFN0
cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0RpcmVjdEFyZ3VtZW50cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9EaXJlY3RBcmd1bWVudHMuaAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxOSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTY1LDcgKzY1LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBEaXJlY3RBcmd1bWVudHMqIGNy
ZWF0ZUJ5Q29weWluZyhKU0dsb2JhbE9iamVjdCosIENhbGxGcmFtZSopOwogCiAgICAgc3RhdGlj
IHNpemVfdCBlc3RpbWF0ZWRTaXplKEpTQ2VsbCosIFZNJik7Ci0gICAgc3RhdGljIHZvaWQgdmlz
aXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJ
TERSRU47CiAgICAgCiAgICAgdWludDMyX3QgaW50ZXJuYWxMZW5ndGgoKSBjb25zdAogICAgIHsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V2YWxFeGVjdXRhYmxlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FdmFsRXhlY3V0YWJs
ZS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0V2YWxFeGVjdXRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAsIDIwMTMsIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTUwLDcgKzUwLDggQEAgYXV0byBFdmFsRXhlY3V0YWJsZTo6ZW5zdXJlVGVtcGxhdGVPYmplYwog
ICAgIHJldHVybiBlbnN1cmVUZW1wbGF0ZU9iamVjdE1hcEltcGwobV90ZW1wbGF0ZU9iamVjdE1h
cCk7CiB9CiAKLXZvaWQgRXZhbEV4ZWN1dGFibGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxs
LCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lk
IEV2YWxFeGVjdXRhYmxlOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3Im
IHZpc2l0b3IpCiB7CiAgICAgRXZhbEV4ZWN1dGFibGUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8RXZh
bEV4ZWN1dGFibGUqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNP
YmplY3QsIGluZm8oKSk7CkBAIC02NCw0ICs2NSw2IEBAIHZvaWQgRXZhbEV4ZWN1dGFibGU6OnZp
c2l0Q2hpbGRyZW4oSlNDZWwKICAgICB9CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihFdmFs
RXhlY3V0YWJsZSk7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvRXZhbEV4ZWN1dGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9FdmFsRXhlY3V0YWJsZS5oCShyZXZpc2lvbiAyNzI4MzApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FdmFsRXhlY3V0YWJsZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOS0yMDE5IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtNzksNyArNzksNyBAQCBwcm90ZWN0ZWQ6CiAgICAgdXNpbmcgQmFzZTo6Zmlu
aXNoQ3JlYXRpb247CiAgICAgRXZhbEV4ZWN1dGFibGUoSlNHbG9iYWxPYmplY3QqLCBjb25zdCBT
b3VyY2VDb2RlJiwgYm9vbCBpblN0cmljdENvbnRleHQsIERlcml2ZWRDb250ZXh0VHlwZSwgYm9v
bCBpc0Fycm93RnVuY3Rpb25Db250ZXh0LCBib29sIGlzSW5zaWRlT3JkaW5hcnlGdW5jdGlvbiwg
RXZhbENvbnRleHRUeXBlLCBOZWVkc0NsYXNzRmllbGRJbml0aWFsaXplciwgUHJpdmF0ZUJyYW5k
UmVxdWlyZW1lbnQpOwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBT
bG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICB1bnNpZ25l
ZCBtX25lZWRzQ2xhc3NGaWVsZEluaXRpYWxpemVyIDogMTsKICAgICB1bnNpZ25lZCBtX3ByaXZh
dGVCcmFuZFJlcXVpcmVtZW50IDogMTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0V4Y2VwdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvRXhjZXB0aW9uLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTUzLDcgKzUz
LDggQEAgU3RydWN0dXJlKiBFeGNlcHRpb246OmNyZWF0ZVN0cnVjdHVyZShWTQogICAgIHJldHVy
biBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZv
KENlbGxUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CiB9CiAKLXZvaWQgRXhjZXB0aW9u
Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1w
bGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBFeGNlcHRpb246OnZpc2l0Q2hpbGRyZW5JbXBs
KEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBFeGNlcHRpb24qIHRoaXNP
YmplY3QgPSBqc0Nhc3Q8RXhjZXB0aW9uKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9J
TkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNjQsNiArNjUsOCBAQCB2b2lkIEV4Y2Vw
dGlvbjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlCiAgICAgICAgIGZyYW1lLnZpc2l0Q2hpbGRy
ZW4odmlzaXRvcik7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihFeGNlcHRpb24pOworCiBF
eGNlcHRpb246OkV4Y2VwdGlvbihWTSYgdm0pCiAgICAgOiBCYXNlKHZtLCB2bS5leGNlcHRpb25T
dHJ1Y3R1cmUuZ2V0KCkpCiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9F
eGNlcHRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9F
eGNlcHRpb24uaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvRXhjZXB0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDE1LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01MSw3ICs1MSw3IEBAIHB1Ymxp
YzoKIAogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFs
T2JqZWN0KiwgSlNWYWx1ZSBwcm90b3R5cGUpOwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGls
ZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47
CiAKICAgICBERUNMQVJFX0VYUE9SVF9JTkZPOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9GdW5jdGlvbkV4ZWN1dGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZS5jcHAJKHJldmlzaW9uIDI3
MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJs
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDA5LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDA5LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02Nyw3ICs2Nyw4IEBAIEZ1bmN0aW9uQ29kZUJsb2Nr
KiBGdW5jdGlvbkV4ZWN1dGFibGU6OmIKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RnVuY3Rpb25D
b2RlQmxvY2sqPihlZGdlLT5jb2RlQmxvY2soKS0+YmFzZWxpbmVBbHRlcm5hdGl2ZSgpKTsKIH0K
IAotdm9pZCBGdW5jdGlvbkV4ZWN1dGFibGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBT
bG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEZ1
bmN0aW9uRXhlY3V0YWJsZTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9y
JiB2aXNpdG9yKQogewogICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogdGhpc09iamVjdCA9IGpzQ2Fz
dDxGdW5jdGlvbkV4ZWN1dGFibGUqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVS
SVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC04Niw2ICs4Nyw4IEBAIHZvaWQgRnVuY3Rpb25F
eGVjdXRhYmxlOjp2aXNpdENoaWxkcmVuKEoKICAgICB9CiB9CiAKK0RFRklORV9WSVNJVF9DSElM
RFJFTihGdW5jdGlvbkV4ZWN1dGFibGUpOworCiBGdW5jdGlvbkV4ZWN1dGFibGUqIEZ1bmN0aW9u
RXhlY3V0YWJsZTo6ZnJvbUdsb2JhbENvZGUoCiAgICAgY29uc3QgSWRlbnRpZmllciYgbmFtZSwg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCAK
ICAgICBKU09iamVjdComIGV4Y2VwdGlvbiwgaW50IG92ZXJyaWRlTGluZU51bWJlciwgT3B0aW9u
YWw8aW50PiBmdW5jdGlvbkNvbnN0cnVjdG9yUGFyYW1ldGVyc0VuZFBvc2l0aW9uKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25FeGVjdXRhYmxlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25FeGVjdXRhYmxl
LmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1
bmN0aW9uRXhlY3V0YWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAwOS0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTY2LDcgKzE2Niw3IEBAIHB1
YmxpYzoKICAgICBKU1BhcnNlclNjcmlwdE1vZGUgc2NyaXB0TW9kZSgpIGNvbnN0IHsgcmV0dXJu
IG1fdW5saW5rZWRFeGVjdXRhYmxlLT5zY3JpcHRNb2RlKCk7IH0KICAgICBTb3VyY2VDb2RlIGNs
YXNzU291cmNlKCkgY29uc3QgeyByZXR1cm4gbV91bmxpbmtlZEV4ZWN1dGFibGUtPmNsYXNzU291
cmNlKCk7IH0KIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZp
c2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogICAgIHN0YXRpYyBTdHJ1Y3R1
cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEpTVmFsdWUgcHJvdG8pCiAgICAgewogICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUo
dm0sIGdsb2JhbE9iamVjdCwgcHJvdG8sIFR5cGVJbmZvKEZ1bmN0aW9uRXhlY3V0YWJsZVR5cGUs
IFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0Z1bmN0aW9uUmFyZURhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uUmFyZURhdGEuY3BwCShyZXZpc2lvbiAyNzI4MzApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvblJhcmVEYXRhLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAx
OSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUt
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTUxLDcgKzUxLDggQEAgU3RydWN0dXJlKiBGdW5jdGlvblJhcmVEYXRh
OjpjcmVhdGVTdHJ1YwogICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2Jq
ZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKENlbGxUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8o
KSk7CiB9CiAKLXZvaWQgRnVuY3Rpb25SYXJlRGF0YTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNl
bGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3Zv
aWQgRnVuY3Rpb25SYXJlRGF0YTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNp
dG9yJiB2aXNpdG9yKQogewogICAgIEZ1bmN0aW9uUmFyZURhdGEqIHJhcmVEYXRhID0ganNDYXN0
PEZ1bmN0aW9uUmFyZURhdGEqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRT
KGNlbGwsIGluZm8oKSk7CkBAIC02Myw2ICs2NCw4IEBAIHZvaWQgRnVuY3Rpb25SYXJlRGF0YTo6
dmlzaXRDaGlsZHJlbihKU0MKICAgICB2aXNpdG9yLmFwcGVuZChyYXJlRGF0YS0+bV9leGVjdXRh
YmxlKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEZ1bmN0aW9uUmFyZURhdGEpOworCiBG
dW5jdGlvblJhcmVEYXRhOjpGdW5jdGlvblJhcmVEYXRhKFZNJiB2bSwgRXhlY3V0YWJsZUJhc2Uq
IGV4ZWN1dGFibGUpCiAgICAgOiBCYXNlKHZtLCB2bS5mdW5jdGlvblJhcmVEYXRhU3RydWN0dXJl
LmdldCgpKQogICAgICwgbV9vYmplY3RBbGxvY2F0aW9uUHJvZmlsZSgpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvblJhcmVEYXRhLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25SYXJlRGF0YS5oCShyZXZpc2lv
biAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvblJhcmVE
YXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDE1LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE1LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02NSw3ICs2NSw3IEBAIHB1YmxpYzoKIAogICAgIHN0
YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNW
YWx1ZSBwcm90b3R5cGUpOwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwq
LCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBERUNM
QVJFX0lORk87CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNB
cmd1bWVudHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9H
ZW5lcmljQXJndW1lbnRzLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0dlbmVyaWNBcmd1bWVudHMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ0LDcg
KzQ0LDcgQEAgcHJvdGVjdGVkOgogICAgIHsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNp
dENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElM
RFJFTjsKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqLCBKU0ds
b2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CiAgICAgc3RhdGljIGJv
b2wgZ2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0Kiwg
dW5zaWduZWQgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKICAgICBzdGF0aWMgdm9pZCBn
ZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5h
bWVBcnJheSYsIERvbnRFbnVtUHJvcGVydGllc01vZGUpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50c0lubGluZXMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljQXJndW1lbnRzSW5saW5lcy5oCShy
ZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmlj
QXJndW1lbnRzSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxNS0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzEsNyArMzEsOCBAQAogbmFt
ZXNwYWNlIEpTQyB7CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFR5cGU+Ci12b2lkIEdlbmVyaWNBcmd1
bWVudHM8VHlwZT46OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiB0aGlzQ2VsbCwgU2xvdFZpc2l0b3Im
IHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBHZW5lcmljQXJndW1l
bnRzPFR5cGU+Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIHRoaXNDZWxsLCBWaXNpdG9yJiB2
aXNpdG9yKQogewogICAgIFR5cGUqIHRoaXNPYmplY3QgPSBzdGF0aWNfY2FzdDxUeXBlKj4odGhp
c0NlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygp
KTsKQEAgLTQxLDYgKzQyLDggQEAgdm9pZCBHZW5lcmljQXJndW1lbnRzPFR5cGU+Ojp2aXNpdENo
aWxkcgogICAgICAgICB2aXNpdG9yLm1hcmtBdXhpbGlhcnkodGhpc09iamVjdC0+bV9tb2RpZmll
ZEFyZ3VtZW50c0Rlc2NyaXB0b3IuZ2V0VW5zYWZlKCkpOwogfQogCitERUZJTkVfVklTSVRfQ0hJ
TERSRU5fV0lUSF9NT0RJRklFUih0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlPiwgR2VuZXJpY0FyZ3Vt
ZW50czxUeXBlPik7CisKIHRlbXBsYXRlPHR5cGVuYW1lIFR5cGU+CiBib29sIEdlbmVyaWNBcmd1
bWVudHM8VHlwZT46OmdldE93blByb3BlcnR5U2xvdChKU09iamVjdCogb2JqZWN0LCBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWUgaWRlbnQsIFByb3BlcnR5U2xvdCYg
c2xvdCkKIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dldHRlclNldHRl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2V0dGVy
U2V0dGVyLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvR2V0dGVyU2V0dGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw3ICsxLDcgQEAKIC8q
CiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDIgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9y
ZykKICAqICBDb3B5cmlnaHQgKEMpIDIwMDEgUGV0ZXIgS2VsbHkgKHBta0Bwb3N0LmNvbSkKLSAq
ICBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiAgQ29weXJpZ2h0IChDKSAyMDA0LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTMzLDcgKzMzLDggQEAgU1RBVElDX0FTU0VS
VF9JU19UUklWSUFMTFlfREVTVFJVQ1RJQkxFKAogCiBjb25zdCBDbGFzc0luZm8gR2V0dGVyU2V0
dGVyOjpzX2luZm8gPSB7ICJHZXR0ZXJTZXR0ZXIiLCBudWxscHRyLCBudWxscHRyLCBudWxscHRy
LCBDUkVBVEVfTUVUSE9EX1RBQkxFKEdldHRlclNldHRlcikgfTsKIAotdm9pZCBHZXR0ZXJTZXR0
ZXI6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3Rl
bXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEdldHRlclNldHRlcjo6dmlzaXRDaGlsZHJl
bkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEdldHRlclNldHRl
ciogdGhpc09iamVjdCA9IGpzQ2FzdDxHZXR0ZXJTZXR0ZXIqPihjZWxsKTsKICAgICBBU1NFUlRf
R0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC00Myw2ICs0NCw4IEBA
IHZvaWQgR2V0dGVyU2V0dGVyOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCoKICAgICB2aXNpdG9yLmFw
cGVuZCh0aGlzT2JqZWN0LT5tX3NldHRlcik7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihH
ZXR0ZXJTZXR0ZXIpOworCiBKU1ZhbHVlIGNhbGxHZXR0ZXIoSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgSlNWYWx1ZSBiYXNlLCBKU1ZhbHVlIGdldHRlclNldHRlcikKIHsKICAgICBWTSYg
dm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9HZXR0ZXJTZXR0ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9HZXR0ZXJTZXR0ZXIuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvR2V0dGVyU2V0dGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNyAr
MSw3IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAxIEhhcnJpIFBvcnRlbiAocG9y
dGVuQGtkZS5vcmcpCiAgKiAgQ29weXJpZ2h0IChDKSAyMDAxIFBldGVyIEtlbGx5IChwbWtAcG9z
dC5jb20pCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC04Miw3ICs4Miw3IEBAIHB1
YmxpYzoKICAgICAgICAgcmV0dXJuIGNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBnZXR0ZXJPYmpl
Y3QsIHNldHRlck9iamVjdCk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJl
bihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAK
ICAgICBKU09iamVjdCogZ2V0dGVyKCkgY29uc3QgeyByZXR1cm4gbV9nZXR0ZXIuZ2V0KCk7IH0K
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSGFzaE1hcEltcGwuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0hhc2hNYXBJbXBsLmNw
cAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSGFz
aE1hcEltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMwLDYgKzMwLDkgQEAKIAogbmFtZXNwYWNlIEpT
QyB7CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTl9XSVRIX01PRElGSUVSKHRlbXBsYXRlPD4sIEhh
c2hNYXBCdWNrZXQ8SGFzaE1hcEJ1Y2tldERhdGFLZXk+KTsKK0RFRklORV9WSVNJVF9DSElMRFJF
Tl9XSVRIX01PRElGSUVSKHRlbXBsYXRlPD4sIEhhc2hNYXBCdWNrZXQ8SGFzaE1hcEJ1Y2tldERh
dGFLZXlWYWx1ZT4pOworCiB0ZW1wbGF0ZTw+CiBjb25zdCBDbGFzc0luZm8gSGFzaE1hcEJ1Y2tl
dDxIYXNoTWFwQnVja2V0RGF0YUtleT46OnNfaW5mbyA9CiAgICAgeyAiSGFzaE1hcEJ1Y2tldCIs
IG51bGxwdHIsIG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSGFzaE1hcEJ1
Y2tldDxIYXNoTWFwQnVja2V0RGF0YUtleT4pIH07CkBAIC0zOCw4ICs0MSw5IEBAIHRlbXBsYXRl
PD4KIGNvbnN0IENsYXNzSW5mbyBIYXNoTWFwQnVja2V0PEhhc2hNYXBCdWNrZXREYXRhS2V5VmFs
dWU+OjpzX2luZm8gPQogICAgIHsgIkhhc2hNYXBCdWNrZXQiLCBudWxscHRyLCBudWxscHRyLCBu
dWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEhhc2hNYXBCdWNrZXQ8SGFzaE1hcEJ1Y2tldERh
dGFLZXlWYWx1ZT4pIH07CiAKLXRlbXBsYXRlIDx0eXBlbmFtZSBEYXRhPgotdm9pZCBIYXNoTWFw
QnVja2V0PERhdGE+Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZp
c2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBEYXRhPgordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRv
cj4KK3ZvaWQgSGFzaE1hcEJ1Y2tldDxEYXRhPjo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBj
ZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEhhc2hNYXBCdWNrZXQqIHRoaXNPYmplY3Qg
PSBqc0Nhc3Q8SGFzaE1hcEJ1Y2tldCo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5I
RVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTUyLDggKzU2LDkgQEAgdm9pZCBIYXNoTWFw
QnVja2V0PERhdGE+Ojp2aXNpdENoaWxkcmVuKAogICAgIHZpc2l0b3IuYXBwZW5kVmFsdWVzKGJp
dHdpc2VfY2FzdDxXcml0ZUJhcnJpZXI8VW5rbm93bj4qPigmdGhpc09iamVjdC0+bV9kYXRhKSwg
c2l6ZW9mKERhdGEpIC8gc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpOwogfQogCi10ZW1w
bGF0ZSA8dHlwZW5hbWUgSGFzaE1hcEJ1Y2tldD4KLXZvaWQgSGFzaE1hcEltcGw8SGFzaE1hcEJ1
Y2tldD46OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikK
K3RlbXBsYXRlPHR5cGVuYW1lIEhhc2hNYXBCdWNrZXQ+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNp
dG9yPgordm9pZCBIYXNoTWFwSW1wbDxIYXNoTWFwQnVja2V0Pjo6dmlzaXRDaGlsZHJlbkltcGwo
SlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEhhc2hNYXBJbXBsKiB0aGlz
T2JqZWN0ID0ganNDYXN0PEhhc2hNYXBJbXBsKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVD
VF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNjYsNiArNzEsOCBAQCB2b2lkIEhh
c2hNYXBJbXBsPEhhc2hNYXBCdWNrZXQ+Ojp2aXNpdENoCiAgICAgICAgIHZpc2l0b3IubWFya0F1
eGlsaWFyeShidWZmZXIpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU5fV0lUSF9NT0RJRklF
Uih0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoTWFwQnVja2V0PiwgSGFzaE1hcEltcGw8SGFzaE1hcEJ1
Y2tldD4pOworCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgSGFzaE1hcEJ1Y2tldD4KIHNpemVfdCBIYXNo
TWFwSW1wbDxIYXNoTWFwQnVja2V0Pjo6ZXN0aW1hdGVkU2l6ZShKU0NlbGwqIGNlbGwsIFZNJiB2
bSkKIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0hhc2hNYXBJbXBsLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSGFzaE1hcEltcGwu
aAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSGFz
aE1hcEltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTYtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE0OCw3ICsxNDgsNyBAQCBwdWJsaWM6CiAg
ICAgICAgIHJldHVybiBtX2RhdGEudmFsdWUuZ2V0KCk7CiAgICAgfQogCi0gICAgc3RhdGljIHZv
aWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklT
SVRfQ0hJTERSRU47CiAKICAgICBBTFdBWVNfSU5MSU5FIEhhc2hNYXBCdWNrZXQqIG5leHQoKSBj
b25zdCB7IHJldHVybiBtX25leHQuZ2V0KCk7IH0KICAgICBBTFdBWVNfSU5MSU5FIEhhc2hNYXBC
dWNrZXQqIHByZXYoKSBjb25zdCB7IHJldHVybiBtX3ByZXYuZ2V0KCk7IH0KQEAgLTM2NCw3ICsz
NjQsNyBAQCBjbGFzcyBIYXNoTWFwSW1wbCA6IHB1YmxpYyBKU05vbkZpbmFsT2JqCiBwdWJsaWM6
CiAgICAgdXNpbmcgQnVja2V0VHlwZSA9IEhhc2hNYXBCdWNrZXRUeXBlOwogCi0gICAgc3RhdGlj
IHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVf
VklTSVRfQ0hJTERSRU47CiAKICAgICBzdGF0aWMgc2l6ZV90IGVzdGltYXRlZFNpemUoSlNDZWxs
KiwgVk0mKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50ZXJuYWxG
dW5jdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SW50ZXJuYWxGdW5jdGlvbi5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0ludGVybmFsRnVuY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDcgKzEsNyBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMiBIYXJyaSBQb3J0ZW4g
KHBvcnRlbkBrZGUub3JnKQogICogIENvcHlyaWdodCAoQykgMjAwMSBQZXRlciBLZWxseSAocG1r
QHBvc3QuY29tKQotICogIENvcHlyaWdodCAoQykgMjAwNC0yMDE5IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDQtMjAyMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtNjQsNyArNjQsOCBA
QCB2b2lkIEludGVybmFsRnVuY3Rpb246OmZpbmlzaENyZWF0aW9uKFZNCiAgICAgfQogfQogCi12
b2lkIEludGVybmFsRnVuY3Rpb246OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90Vmlz
aXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEludGVybmFs
RnVuY3Rpb246OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRv
cikKIHsKICAgICBJbnRlcm5hbEZ1bmN0aW9uKiB0aGlzT2JqZWN0ID0ganNDYXN0PEludGVybmFs
RnVuY3Rpb24qPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmpl
Y3QsIGluZm8oKSk7CkBAIC03Myw2ICs3NCw4IEBAIHZvaWQgSW50ZXJuYWxGdW5jdGlvbjo6dmlz
aXRDaGlsZHJlbihKU0MKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX29yaWdpbmFs
TmFtZSk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTl9XSVRIX01PRElGSUVSKEpTX0VYUE9S
VF9QUklWQVRFLCBJbnRlcm5hbEZ1bmN0aW9uKTsKKwogY29uc3QgU3RyaW5nJiBJbnRlcm5hbEZ1
bmN0aW9uOjpuYW1lKCkKIHsKICAgICBjb25zdCBTdHJpbmcmIG5hbWUgPSBtX29yaWdpbmFsTmFt
ZS0+dHJ5R2V0VmFsdWUoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lu
dGVybmFsRnVuY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9JbnRlcm5hbEZ1bmN0aW9uLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0ludGVybmFsRnVuY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAt
MSw2ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDAgSGFycmkgUG9ydGVu
IChwb3J0ZW5Aa2RlLm9yZykKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAxOSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMjEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogIENvcHlyaWdodCAoQykgMjAwNyBDYW1lcm9u
IFp3YXJpY2ggKGN3endhcmljaEB1d2F0ZXJsb28uY2EpCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA3
IE1ha3MgT3Jsb3ZpY2gKICAqCkBAIC00Niw3ICs0Niw3IEBAIHB1YmxpYzoKIAogICAgIERFQ0xB
UkVfRVhQT1JUX0lORk87CiAKLSAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCB2aXNp
dENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElM
RFJFTl9XSVRIX01PRElGSUVSKEpTX0VYUE9SVF9QUklWQVRFKTsKIAogICAgIEpTX0VYUE9SVF9Q
UklWQVRFIGNvbnN0IFN0cmluZyYgbmFtZSgpOwogICAgIGNvbnN0IFN0cmluZyBkaXNwbGF5TmFt
ZShWTSYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bENvbGxhdG9y
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsQ29s
bGF0b3IuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9JbnRsQ29sbGF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBAQAogLyoK
ICAqIENvcHlyaWdodCAoQykgMjAxNSBBbmR5IFZhbldhZ29uZXIgKGFuZHlAdmFud2Fnb25lci5m
YW1pbHkpCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTUgU3Vrb2xzYWsgU2Frc2h1d29uZyAoc3Vrb2xz
YWtAZ21haWwuY29tKQotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjAgQXBwbGUgSW5jLiBBbGwg
UmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBB
bGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02
NSw3ICs2NSw4IEBAIHZvaWQgSW50bENvbGxhdG9yOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0KICAg
ICBBU1NFUlQoaW5oZXJpdHModm0sIGluZm8oKSkpOwogfQogCi12b2lkIEludGxDb2xsYXRvcjo6
dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxh
dGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSW50bENvbGxhdG9yOjp2aXNpdENoaWxkcmVuSW1w
bChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSW50bENvbGxhdG9yKiB0
aGlzT2JqZWN0ID0ganNDYXN0PEludGxDb2xsYXRvcio+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19P
QkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTc1LDYgKzc2LDggQEAgdm9p
ZCBJbnRsQ29sbGF0b3I6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKgogICAgIHZpc2l0b3IuYXBwZW5k
KHRoaXNPYmplY3QtPm1fYm91bmRDb21wYXJlKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVO
KEludGxDb2xsYXRvcik7CisKIFZlY3RvcjxTdHJpbmc+IEludGxDb2xsYXRvcjo6c29ydExvY2Fs
ZURhdGEoY29uc3QgU3RyaW5nJiBsb2NhbGUsIFJlbGV2YW50RXh0ZW5zaW9uS2V5IGtleSkKIHsK
ICAgICAvLyA5LjEgSW50ZXJuYWwgc2xvdHMgb2YgU2VydmljZSBDb25zdHJ1Y3RvcnMgJiAxMC4y
LjMgSW50ZXJuYWwgc2xvdHMgKEVDTUEtNDAyIDIuMCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0ludGxDb2xsYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0ludGxDb2xsYXRvci5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsQ29sbGF0b3IuaAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQW5keSBWYW5XYWdvbmVy
IChhbmR5QHZhbndhZ29uZXIuZmFtaWx5KQorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIElu
Yy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtODAsNyArODEsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIEludGxDb2xsYXRvcihWTSYs
IFN0cnVjdHVyZSopOwogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKLSAgICBzdGF0aWMg
dm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9W
SVNJVF9DSElMRFJFTjsKIAogICAgIGJvb2wgdXBkYXRlQ2FuRG9BU0NJSVVDQURVQ0VUQ29tcGFy
aXNvbigpIGNvbnN0OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRs
RGF0ZVRpbWVGb3JtYXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0ludGxEYXRlVGltZUZvcm1hdC5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxEYXRlVGltZUZvcm1hdC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDE1IEFuZHkgVmFu
V2Fnb25lciAoYW5keUB2YW53YWdvbmVyLmZhbWlseSkKLSAqIENvcHlyaWdodCAoQykgMjAxNi0y
MDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
Ni0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtOTAsNyArOTAsOCBAQCB2b2lkIEludGxEYXRlVGltZUZvcm1hdDo6
ZmluaXNoQ3JlYXRpb24oCiAgICAgQVNTRVJUKGluaGVyaXRzKHZtLCBpbmZvKCkpKTsKIH0KIAot
dm9pZCBJbnRsRGF0ZVRpbWVGb3JtYXQ6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90
VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEludGxE
YXRlVGltZUZvcm1hdDo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2
aXNpdG9yKQogewogICAgIEludGxEYXRlVGltZUZvcm1hdCogdGhpc09iamVjdCA9IGpzQ2FzdDxJ
bnRsRGF0ZVRpbWVGb3JtYXQqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRT
KHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC0xMDAsNiArMTAxLDggQEAgdm9pZCBJbnRsRGF0ZVRp
bWVGb3JtYXQ6OnZpc2l0Q2hpbGRyZW4oSgogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3Qt
Pm1fYm91bmRGb3JtYXQpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSW50bERhdGVUaW1l
Rm9ybWF0KTsKKwogdm9pZCBJbnRsRGF0ZVRpbWVGb3JtYXQ6OnNldEJvdW5kRm9ybWF0KFZNJiB2
bSwgSlNCb3VuZEZ1bmN0aW9uKiBmb3JtYXQpCiB7CiAgICAgbV9ib3VuZEZvcm1hdC5zZXQodm0s
IHRoaXMsIGZvcm1hdCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRs
RGF0ZVRpbWVGb3JtYXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9JbnRsRGF0ZVRpbWVGb3JtYXQuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERhdGVUaW1lRm9ybWF0LmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDE1IEFuZHkgVmFuV2Fnb25l
ciAoYW5keUB2YW53YWdvbmVyLmZhbWlseSkKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTg1LDcgKzg2LDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBJbnRsRGF0ZVRpbWVGb3Jt
YXQoVk0mLCBTdHJ1Y3R1cmUqKTsKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7Ci0gICAg
c3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERF
Q0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBzdGF0aWMgVmVjdG9yPFN0cmluZz4gbG9jYWxl
RGF0YShjb25zdCBTdHJpbmcmLCBSZWxldmFudEV4dGVuc2lvbktleSk7CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxMb2NhbGUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxMb2NhbGUuY3BwCShyZXZpc2lvbiAyNzI4
MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTG9jYWxlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMjAgU29u
eSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTU4LDcgKzU5LDggQEAgdm9pZCBJbnRsTG9jYWxlOjpmaW5pc2hDcmVhdGlvbihW
TSYgdm0pCiAgICAgQVNTRVJUKGluaGVyaXRzKHZtLCBpbmZvKCkpKTsKIH0KIAotdm9pZCBJbnRs
TG9jYWxlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3Ip
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBJbnRsTG9jYWxlOjp2aXNpdENoaWxk
cmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0byogdGhp
c09iamVjdCA9IGpzQ2FzdDxJbnRsTG9jYWxlKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVD
VF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNjYsNiArNjgsOCBAQCB2b2lkIElu
dGxMb2NhbGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjCiAgICAgQmFzZTo6dmlzaXRDaGlsZHJl
bih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEludGxM
b2NhbGUpOworCiBjbGFzcyBMb2NhbGVJREJ1aWxkZXIgZmluYWwgewogcHVibGljOgogICAgIGJv
b2wgaW5pdGlhbGl6ZShjb25zdCBTdHJpbmcmKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0ludGxMb2NhbGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9JbnRsTG9jYWxlLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0ludGxMb2NhbGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMjAgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRh
aW5tZW50IEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTcxLDcgKzcyLDcg
QEAgcHVibGljOgogcHJpdmF0ZToKICAgICBJbnRsTG9jYWxlKFZNJiwgU3RydWN0dXJlKik7CiAg
ICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOwotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwog
CiAgICAgU3RyaW5nIGtleXdvcmRWYWx1ZShBU0NJSUxpdGVyYWwsIGJvb2wgaXNCb29sZWFuID0g
ZmFsc2UpIGNvbnN0OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRs
TnVtYmVyRm9ybWF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9JbnRsTnVtYmVyRm9ybWF0LmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE51bWJlckZvcm1hdC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsNyArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDE1IEFuZHkgVmFuV2Fnb25l
ciAoYW5keUB2YW53YWdvbmVyLmZhbWlseSkKICAqIENvcHlyaWdodCAoQykgMjAxNiBTdWtvbHNh
ayBTYWtzaHV3b25nIChzdWtvbHNha0BnbWFpbC5jb20pCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYt
MjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMp
IDIwMjAgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKQEAgLTczLDcgKzczLDggQEAgdm9pZCBJbnRsTnVtYmVyRm9ybWF0OjpmaW5pc2hDcmVhdGlv
bihWTQogICAgIEFTU0VSVChpbmhlcml0cyh2bSwgaW5mbygpKSk7CiB9CiAKLXZvaWQgSW50bE51
bWJlckZvcm1hdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNp
dG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSW50bE51bWJlckZvcm1hdDo6
dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAg
IEludGxOdW1iZXJGb3JtYXQqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SW50bE51bWJlckZvcm1hdCo+
KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygp
KTsKQEAgLTgzLDYgKzg0LDggQEAgdm9pZCBJbnRsTnVtYmVyRm9ybWF0Ojp2aXNpdENoaWxkcmVu
KEpTQwogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fYm91bmRGb3JtYXQpOwogfQog
CitERUZJTkVfVklTSVRfQ0hJTERSRU4oSW50bE51bWJlckZvcm1hdCk7CisKIFZlY3RvcjxTdHJp
bmc+IEludGxOdW1iZXJGb3JtYXQ6OmxvY2FsZURhdGEoY29uc3QgU3RyaW5nJiBsb2NhbGUsIFJl
bGV2YW50RXh0ZW5zaW9uS2V5IGtleSkKIHsKICAgICAvLyA5LjEgSW50ZXJuYWwgc2xvdHMgb2Yg
U2VydmljZSBDb25zdHJ1Y3RvcnMgJiAxMS4yLjMgSW50ZXJuYWwgc2xvdHMgKEVDTUEtNDAyIDIu
MCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxOdW1iZXJGb3JtYXQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTnVtYmVy
Rm9ybWF0LmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0ludGxOdW1iZXJGb3JtYXQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDcgQEAKIC8q
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQW5keSBWYW5XYWdvbmVyIChhbmR5QHZhbndhZ29uZXIu
ZmFtaWx5KQogICogQ29weXJpZ2h0IChDKSAyMDIwIFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlu
bWVudCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC05Niw3ICs5Nyw3IEBA
IHB1YmxpYzoKIHByaXZhdGU6CiAgICAgSW50bE51bWJlckZvcm1hdChWTSYsIFN0cnVjdHVyZSop
OwogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENo
aWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJF
TjsKIAogICAgIHN0YXRpYyBWZWN0b3I8U3RyaW5nPiBsb2NhbGVEYXRhKGNvbnN0IFN0cmluZyYs
IFJlbGV2YW50RXh0ZW5zaW9uS2V5KTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSW50bFBsdXJhbFJ1bGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9JbnRsUGx1cmFsUnVsZXMuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsUGx1cmFsUnVsZXMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxOCBBbmR5IFZh
bldhZ29uZXIgKGFuZHlAdmFud2Fnb25lci5mYW1pbHkpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTkt
MjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTktMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTYxLDcgKzYxLDggQEAgdm9pZCBJbnRsUGx1cmFsUnVsZXM6OmZp
bmlzaENyZWF0aW9uKFZNJgogICAgIEFTU0VSVChpbmhlcml0cyh2bSwgaW5mbygpKSk7CiB9CiAK
LXZvaWQgSW50bFBsdXJhbFJ1bGVzOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZp
c2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBJbnRsUGx1
cmFsUnVsZXM6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRv
cikKIHsKICAgICBJbnRsUGx1cmFsUnVsZXMqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SW50bFBsdXJh
bFJ1bGVzKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0
LCBpbmZvKCkpOwpAQCAtNjksNiArNzAsOCBAQCB2b2lkIEludGxQbHVyYWxSdWxlczo6dmlzaXRD
aGlsZHJlbihKU0NlCiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9y
KTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEludGxQbHVyYWxSdWxlcyk7CisKIFZlY3Rv
cjxTdHJpbmc+IEludGxQbHVyYWxSdWxlczo6bG9jYWxlRGF0YShjb25zdCBTdHJpbmcmLCBSZWxl
dmFudEV4dGVuc2lvbktleSkKIHsKICAgICByZXR1cm4geyB9OwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSW50bFBsdXJhbFJ1bGVzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFBsdXJhbFJ1bGVzLmgJKHJldmlzaW9uIDI3Mjgz
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxQbHVyYWxSdWxlcy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxOCBB
bmR5IFZhbldhZ29uZXIgKGFuZHlAdmFud2Fnb25lci5mYW1pbHkpCisgKiBDb3B5cmlnaHQgKEMp
IDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC02Niw3ICs2Nyw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgSW50
bFBsdXJhbFJ1bGVzKFZNJiwgU3RydWN0dXJlKik7CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihW
TSYpOwotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3Im
KTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgc3RhdGljIFZlY3RvcjxTdHJp
bmc+IGxvY2FsZURhdGEoY29uc3QgU3RyaW5nJiwgUmVsZXZhbnRFeHRlbnNpb25LZXkpOwogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsUmVsYXRpdmVUaW1lRm9ybWF0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsUmVs
YXRpdmVUaW1lRm9ybWF0LmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSW50bFJlbGF0aXZlVGltZUZvcm1hdC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDIwIFNvbnkgSW50ZXJhY3Rp
dmUgRW50ZXJ0YWlubWVudCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02
Miw3ICs2Myw4IEBAIHZvaWQgSW50bFJlbGF0aXZlVGltZUZvcm1hdDo6ZmluaXNoQ3JlYXQKICAg
ICBBU1NFUlQoaW5oZXJpdHModm0sIGluZm8oKSkpOwogfQogCi12b2lkIEludGxSZWxhdGl2ZVRp
bWVGb3JtYXQ6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRv
cikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEludGxSZWxhdGl2ZVRpbWVGb3Jt
YXQ6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsK
ICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEludGxSZWxhdGl2ZVRpbWVGb3JtYXQqPihj
ZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7
CkBAIC03MCw2ICs3Miw4IEBAIHZvaWQgSW50bFJlbGF0aXZlVGltZUZvcm1hdDo6dmlzaXRDaGls
ZHIKICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwogfQogCitE
RUZJTkVfVklTSVRfQ0hJTERSRU4oSW50bFJlbGF0aXZlVGltZUZvcm1hdCk7CisKIFZlY3RvcjxT
dHJpbmc+IEludGxSZWxhdGl2ZVRpbWVGb3JtYXQ6OmxvY2FsZURhdGEoY29uc3QgU3RyaW5nJiBs
b2NhbGUsIFJlbGV2YW50RXh0ZW5zaW9uS2V5IGtleSkKIHsKICAgICBBU1NFUlRfVU5VU0VEKGtl
eSwga2V5ID09IFJlbGV2YW50RXh0ZW5zaW9uS2V5OjpOdSk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9JbnRsUmVsYXRpdmVUaW1lRm9ybWF0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFJlbGF0aXZlVGltZUZvcm1hdC5oCShy
ZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsUmVs
YXRpdmVUaW1lRm9ybWF0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICog
Q29weXJpZ2h0IChDKSAyMDIwIFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDIwLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02NCw3ICs2NCw3IEBAIHB1YmxpYzoK
IHByaXZhdGU6CiAgICAgSW50bFJlbGF0aXZlVGltZUZvcm1hdChWTSYsIFN0cnVjdHVyZSopOwog
ICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxk
cmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsK
IAogICAgIHN0YXRpYyBWZWN0b3I8U3RyaW5nPiBsb2NhbGVEYXRhKGNvbnN0IFN0cmluZyYsIFJl
bGV2YW50RXh0ZW5zaW9uS2V5KTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSW50bFNlZ21lbnRJdGVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSW50bFNlZ21lbnRJdGVyYXRvci5jcHAJKHJldmlzaW9uIDI3MjgzMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxTZWdtZW50SXRlcmF0b3IuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAy
MCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC02NCwxMyArNjUsMTYgQEAgdm9pZCBJbnRsU2VnbWVudEl0ZXJhdG9yOjpmaW5p
c2hDcmVhdGlvbgogICAgIG1fc3RyaW5nLnNldCh2bSwgdGhpcywgc3RyaW5nKTsKIH0KIAotdm9p
ZCBJbnRsU2VnbWVudEl0ZXJhdG9yOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZp
c2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBJbnRsU2Vn
bWVudEl0ZXJhdG9yOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZp
c2l0b3IpCiB7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxJbnRsU2VnbWVudEl0ZXJh
dG9yKj4oY2VsbCk7CiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9y
KTsKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX3N0cmluZyk7CiB9CiAKK0RFRklO
RV9WSVNJVF9DSElMRFJFTihJbnRsU2VnbWVudEl0ZXJhdG9yKTsKKwogSlNPYmplY3QqIEludGxT
ZWdtZW50SXRlcmF0b3I6Om5leHQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKIHsKICAg
ICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9JbnRsU2VnbWVudEl0ZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFNlZ21lbnRJdGVyYXRvci5oCShyZXZpc2lvbiAyNzI4
MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsU2VnbWVudEl0ZXJhdG9y
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAy
MDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTUzLDcgKzU0LDcgQEAgcHVibGljOgogCiAgICAgSlNPYmplY3QqIG5leHQo
SlNHbG9iYWxPYmplY3QqKTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiBwcml2YXRl
OgogICAgIEludGxTZWdtZW50SXRlcmF0b3IoVk0mLCBTdHJ1Y3R1cmUqLCBzdGQ6OnVuaXF1ZV9w
dHI8VUJyZWFrSXRlcmF0b3IsIFVCcmVha0l0ZXJhdG9yRGVsZXRlcj4mJiwgQm94PFZlY3RvcjxV
Q2hhcj4+JiYsIEludGxTZWdtZW50ZXI6OkdyYW51bGFyaXR5KTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0ludGxTZWdtZW50cy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFNlZ21lbnRzLmNwcAkocmV2aXNpb24gMjcyODMw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFNlZ21lbnRzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMTA5LDExICsxMTAsMTQgQEAgSlNPYmplY3QqIEludGxTZWdtZW50czo6Y3JlYXRlU2Vn
bWVudEl0ZQogICAgIHJldHVybiBJbnRsU2VnbWVudEl0ZXJhdG9yOjpjcmVhdGUodm0sIGdsb2Jh
bE9iamVjdC0+c2VnbWVudEl0ZXJhdG9yU3RydWN0dXJlKCksIFdURk1vdmUoc2VnbWVudGVyKSwg
bV9idWZmZXIsIG1fc3RyaW5nLmdldCgpLCBtX2dyYW51bGFyaXR5KTsKIH0KIAotdm9pZCBJbnRs
U2VnbWVudHM6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRv
cikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEludGxTZWdtZW50czo6dmlzaXRD
aGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGF1dG8q
IHRoaXNPYmplY3QgPSBqc0Nhc3Q8SW50bFNlZ21lbnRzKj4oY2VsbCk7CiAgICAgQmFzZTo6dmlz
aXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlz
T2JqZWN0LT5tX3N0cmluZyk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihJbnRsU2VnbWVu
dHMpOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0ludGxTZWdtZW50cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0ludGxTZWdtZW50cy5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9JbnRsU2VnbWVudHMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTQsNyArNTUsNyBA
QCBwdWJsaWM6CiAgICAgSlNWYWx1ZSBjb250YWluaW5nKEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1
ZSBpbmRleFZhbHVlKTsKICAgICBKU09iamVjdCogY3JlYXRlU2VnbWVudEl0ZXJhdG9yKEpTR2xv
YmFsT2JqZWN0Kik7CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNs
b3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogcHJpdmF0ZToKICAg
ICBJbnRsU2VnbWVudHMoVk0mLCBTdHJ1Y3R1cmUqLCBzdGQ6OnVuaXF1ZV9wdHI8VUJyZWFrSXRl
cmF0b3IsIFVCcmVha0l0ZXJhdG9yRGVsZXRlcj4mJiwgQm94PFZlY3RvcjxVQ2hhcj4+JiYsIElu
dGxTZWdtZW50ZXI6OkdyYW51bGFyaXR5KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5jcHAJKHJldmlzaW9uIDI3MjgzMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTE1NSw3ICsxNTUsOCBAQCB2b2lkIEpTQXJyYXlCdWZmZXJWaWV3
OjpmaW5pc2hDcmVhdGlvbihWCiAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0K
IAotdm9pZCBKU0FycmF5QnVmZmVyVmlldzo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNB
cnJheUJ1ZmZlclZpZXc6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYg
dmlzaXRvcikKIHsKICAgICBKU0FycmF5QnVmZmVyVmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxK
U0FycmF5QnVmZmVyVmlldyo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMo
dGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTE2OSw2ICsxNzAsOCBAQCB2b2lkIEpTQXJyYXlCdWZm
ZXJWaWV3Ojp2aXNpdENoaWxkcmVuKEpTCiAgICAgfQogfQogCitERUZJTkVfVklTSVRfQ0hJTERS
RU4oSlNBcnJheUJ1ZmZlclZpZXcpOworCiBib29sIEpTQXJyYXlCdWZmZXJWaWV3OjpwdXQoCiAg
ICAgSlNDZWxsKiBjZWxsLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5h
bWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLAogICAgIFB1dFByb3BlcnR5U2xvdCYgc2xv
dCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1
ZmZlclZpZXcuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE3Miw3ICsxNzIs
NyBAQCBwcm90ZWN0ZWQ6CiAgICAgCiAgICAgc3RhdGljIGJvb2wgcHV0KEpTQ2VsbCosIEpTR2xv
YmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmKTsKIAot
ICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAg
ICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogICAgIAogcHVibGljOgogICAgIFR5cGVkQXJyYXlN
b2RlIG1vZGUoKSBjb25zdCB7IHJldHVybiBtX21vZGU7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTQXJyYXlJdGVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUl0ZXJhdG9yLmNwcAkocmV2aXNpb24gMjcy
ODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUl0ZXJhdG9yLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIw
LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC02OCwxMSArNjgsMTQgQEAgdm9pZCBKU0FycmF5SXRlcmF0b3I6OmZp
bmlzaENyZWF0aW9uKFZNJgogICAgICAgICBCYXNlOjppbnRlcm5hbEZpZWxkKGluZGV4KS5zZXQo
dm0sIHRoaXMsIHZhbHVlc1tpbmRleF0pOwogfQogCi12b2lkIEpTQXJyYXlJdGVyYXRvcjo6dmlz
aXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8
dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNBcnJheUl0ZXJhdG9yOjp2aXNpdENoaWxkcmVuSW1w
bChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0byogdGhpc09iamVj
dCA9IGpzQ2FzdDxKU0FycmF5SXRlcmF0b3IqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNU
X0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0
aGlzT2JqZWN0LCB2aXNpdG9yKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTQXJyYXlJ
dGVyYXRvcik7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNBcnJheUl0ZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUl0ZXJhdG9yLmgJKHJldmlzaW9uIDI3MjgzMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlJdGVyYXRvci5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAtMjAyMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTc4LDcgKzc4LDcgQEAgcHVibGljOgogCiAgICAgREVDTEFSRV9JTkZPOwogCi0gICAg
c3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERF
Q0xBUkVfVklTSVRfQ0hJTERSRU47CiAKIHByaXZhdGU6CiAgICAgSlNBcnJheUl0ZXJhdG9yKFZN
JiwgU3RydWN0dXJlKik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Fz
eW5jR2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0FzeW5jR2VuZXJhdG9yLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBc3luY0dlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOS0yMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
NTksMTEgKzU5LDE0IEBAIHZvaWQgSlNBc3luY0dlbmVyYXRvcjo6ZmluaXNoQ3JlYXRpb24oVk0K
ICAgICAgICAgaW50ZXJuYWxGaWVsZChpbmRleCkuc2V0KHZtLCB0aGlzLCB2YWx1ZXNbaW5kZXhd
KTsKIH0KIAotdm9pZCBKU0FzeW5jR2VuZXJhdG9yOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2Vs
bCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9p
ZCBKU0FzeW5jR2VuZXJhdG9yOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0
b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0FzeW5jR2Vu
ZXJhdG9yKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0
LCBpbmZvKCkpOwogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7
CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU0FzeW5jR2VuZXJhdG9yKTsKKwogfSAvLyBu
YW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FzeW5j
R2VuZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNBc3luY0dlbmVyYXRvci5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0FzeW5jR2VuZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtOTUsNyArOTUs
NyBAQCBwdWJsaWM6CiAKICAgICBERUNMQVJFX0VYUE9SVF9JTkZPOwogCi0gICAgc3RhdGljIHZv
aWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklT
SVRfQ0hJTERSRU47CiAKIHByaXZhdGU6CiAgICAgSlNBc3luY0dlbmVyYXRvcihWTSYsIFN0cnVj
dHVyZSopOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCaWdJbnQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQmlnSW50LmNw
cAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNC
aWdJbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENvcHlyaWdo
dCAoQykgMjAxNyBDYWlvIExpbWEgPHRpY2Fpb2xpbWFAZ21haWwuY29tPgotICogQ29weXJpZ2h0
IChDKSAyMDE3LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02Nyw3ICs2Nyw4IEBAIEpTQmlnSW50OjpKU0Jp
Z0ludChWTSYgdm0sIFN0cnVjdHVyZSogc3QKICAgICAsIG1fZGF0YSh2bSwgdGhpcywgZGF0YSwg
bGVuZ3RoKQogeyB9CiAKLXZvaWQgSlNCaWdJbnQ6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxs
LCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lk
IEpTQmlnSW50Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0
b3IpCiB7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0JpZ0ludCo+KGNlbGwpOwog
ICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTc2
LDYgKzc3LDggQEAgdm9pZCBKU0JpZ0ludDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbAogICAg
ICAgICB2aXNpdG9yLm1hcmtBdXhpbGlhcnkoZGF0YSk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElM
RFJFTihKU0JpZ0ludCk7CisKIHZvaWQgSlNCaWdJbnQ6OmluaXRpYWxpemUoSW5pdGlhbGl6YXRp
b25UeXBlIGluaXRUeXBlKQogewogICAgIGlmIChpbml0VHlwZSA9PSBJbml0aWFsaXphdGlvblR5
cGU6OldpdGhaZXJvKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCaWdJ
bnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JpZ0lu
dC5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0JpZ0ludC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENvcHlyaWdo
dCAoQykgMjAxNyBDYWlvIExpbWEgPHRpY2Fpb2xpbWFAZ21haWwuY29tPgotICogQ29weXJpZ2h0
IChDKSAyMDE5LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE5LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01MCw3ICs1MCw3IEBAIHB1YmxpYzoKICAgICBz
dGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJl
RmxhZ3MgfCBTdHJ1Y3R1cmVJc0ltbW9ydGFsIHwgT3ZlcnJpZGVzVG9UaGlzOwogICAgIGZyaWVu
ZCBjbGFzcyBDYWNoZWRCaWdJbnQ7CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpT
Q2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAg
IHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2Vzcz4KICAgICBzdGF0aWMg
SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTQm91bmRGdW5jdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCb3VuZEZ1bmN0aW9uLmNwcAkocmV2aXNpb24gMjcyODMw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCb3VuZEZ1bmN0aW9uLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEs
IDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTEtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI0OSw3ICsyNDksOCBAQCB2b2lkIEpTQm91bmRGdW5j
dGlvbjo6ZmluaXNoQ3JlYXRpb24oVk0mCiAgICAgQVNTRVJUKGluaGVyaXRzKHZtLCBpbmZvKCkp
KTsKIH0KIAotdm9pZCBKU0JvdW5kRnVuY3Rpb246OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxs
LCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lk
IEpTQm91bmRGdW5jdGlvbjo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9y
JiB2aXNpdG9yKQogewogICAgIEpTQm91bmRGdW5jdGlvbiogdGhpc09iamVjdCA9IGpzQ2FzdDxK
U0JvdW5kRnVuY3Rpb24qPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRo
aXNPYmplY3QsIGluZm8oKSk7CkBAIC0yNjEsNCArMjYyLDYgQEAgdm9pZCBKU0JvdW5kRnVuY3Rp
b246OnZpc2l0Q2hpbGRyZW4oSlNDZQogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1f
bmFtZU1heUJlTnVsbCk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU0JvdW5kRnVuY3Rp
b24pOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTQm91bmRGdW5jdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTQm91bmRGdW5jdGlvbi5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JvdW5kRnVuY3Rpb24uaAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxOCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAyMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTg0LDcgKzg0LDcgQEAgcHJpdmF0ZToKICAgICBKU0JvdW5kRnVuY3Rpb24oVk0mLCBO
YXRpdmVFeGVjdXRhYmxlKiwgSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqLCBKU09iamVjdCog
dGFyZ2V0RnVuY3Rpb24sIEpTVmFsdWUgYm91bmRUaGlzLCBKU0ltbXV0YWJsZUJ1dHRlcmZseSog
Ym91bmRBcmdzLCBKU1N0cmluZyogbmFtZU1heUJlTnVsbCwgZG91YmxlIGxlbmd0aCk7CiAKICAg
ICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJl
bihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAK
ICAgICBXcml0ZUJhcnJpZXI8SlNPYmplY3Q+IG1fdGFyZ2V0RnVuY3Rpb247CiAgICAgV3JpdGVC
YXJyaWVyPFVua25vd24+IG1fYm91bmRUaGlzOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNDYWxsZWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQ2FsbGVlLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNDYWxsZWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTUwLDcg
KzUwLDggQEAgdm9pZCBKU0NhbGxlZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQogICAgIEFTU0VS
VChpbmhlcml0cyh2bSwgaW5mbygpKSk7CiB9CiAKLXZvaWQgSlNDYWxsZWU6OnZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1l
IFZpc2l0b3I+Cit2b2lkIEpTQ2FsbGVlOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGws
IFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNDYWxsZWUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8
SlNDYWxsZWUqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmpl
Y3QsIGluZm8oKSk7CkBAIC01OSw0ICs2MCw2IEBAIHZvaWQgSlNDYWxsZWU6OnZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKiBjZWwKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX3Njb3BlKTsK
IH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTQ2FsbGVlKTsKKwogfSAvLyBuYW1lc3BhY2Ug
SlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NhbGxlZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2FsbGVlLmgJKHJldmlz
aW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2FsbGVlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNC0y
MDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMTAwLDcgKzEwMCw3IEBAIHByb3RlY3RlZDoKICAgICB2b2lkIGZpbmlz
aENyZWF0aW9uKFZNJik7CiAgICAgdXNpbmcgQmFzZTo6ZmluaXNoQ3JlYXRpb247CiAKLSAgICBz
dGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVD
TEFSRV9WSVNJVF9DSElMRFJFTjsKIAogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgTExJbnRP
ZmZzZXRzRXh0cmFjdG9yOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlND
ZWxsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxs
LmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
Q2VsbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqICBDb3B5cmlnaHQg
KEMpIDE5OTktMjAwMSBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQogICogIENvcHlyaWdo
dCAoQykgMjAwMSBQZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQotICogIENvcHlyaWdodCAoQykg
MjAwMy0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQg
KEMpIDIwMDMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYwpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIkpTTG9jay5oIgogI2luY2x1
ZGUgIkpTVHlwZUluZm8uaCIKICNpbmNsdWRlICJTbG90VmlzaXRvci5oIgorI2luY2x1ZGUgIlNs
b3RWaXNpdG9yTWFjcm9zLmgiCiAjaW5jbHVkZSAiU3Vic3BhY2VBY2Nlc3MuaCIKICNpbmNsdWRl
ICJUeXBlZEFycmF5VHlwZS5oIgogI2luY2x1ZGUgIldyaXRlQmFycmllci5oIgpAQCAtMTY3LDgg
KzE2OCw4IEBAIHB1YmxpYzoKICAgICBzaXplX3QgZXN0aW1hdGVkU2l6ZUluQnl0ZXMoVk0mKSBj
b25zdDsKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgc2l6ZV90IGVzdGltYXRlZFNpemUo
SlNDZWxsKiwgVk0mKTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwg
U2xvdFZpc2l0b3ImKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdE91dHB1dENvbnN0cmFpbnRzKEpT
Q2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTl9XSVRIX01P
RElGSUVSKGlubGluZSk7CisgICAgREVDTEFSRV9WSVNJVF9PVVRQVVRfQ09OU1RSQUlOVFNfV0lU
SF9NT0RJRklFUihpbmxpbmUpOwogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQg
YW5hbHl6ZUhlYXAoSlNDZWxsKiwgSGVhcEFuYWx5emVyJik7CiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbElubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGxJbmxpbmVzLmgJKHJldmlzaW9uIDI3MjgzMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbElubGluZXMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTE0MSwxNSArMTQxLDIxIEBAIEFMV0FZU19JTkxJTkUgU3RydWN0dXJlKiBK
U0NlbGw6OnN0cnVjdHUKICAgICByZXR1cm4gdm0uZ2V0U3RydWN0dXJlKG1fc3RydWN0dXJlSUQp
OwogfQogCi1pbmxpbmUgdm9pZCBKU0NlbGw6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBT
bG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpT
Q2VsbDo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQog
ewogICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQoY2VsbC0+c3RydWN0dXJlKHZpc2l0b3Iu
dm0oKSkpOwogfQogCi1pbmxpbmUgdm9pZCBKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHMo
SlNDZWxsKiwgU2xvdFZpc2l0b3ImKQorREVGSU5FX1ZJU0lUX0NISUxEUkVOX1dJVEhfTU9ESUZJ
RVIoaW5saW5lLCBKU0NlbGwpOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgorQUxXQVlT
X0lOTElORSB2b2lkIEpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50c0ltcGwoSlNDZWxsKiwg
VmlzaXRvciYpCiB7CiB9CiAKK0RFRklORV9WSVNJVF9PVVRQVVRfQ09OU1RSQUlOVFNfV0lUSF9N
T0RJRklFUihpbmxpbmUsIEpTQ2VsbCk7CisKIEFMV0FZU19JTkxJTkUgVk0mIENhbGxGcmFtZTo6
ZGVwcmVjYXRlZFZNKCkgY29uc3QKIHsKICAgICBKU0NlbGwqIGNhbGxlZSA9IHRoaXMtPmNhbGxl
ZSgpLmFzQ2VsbCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGaW5h
bGl6YXRpb25SZWdpc3RyeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNGaW5hbGl6YXRpb25SZWdpc3RyeS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRmluYWxpemF0aW9uUmVnaXN0cnkuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAy
MCBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIw
LTIwMjEgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2lu
Y2x1ZGUgIkpTRmluYWxpemF0aW9uUmVnaXN0cnkuaCIKIAorI2luY2x1ZGUgIkFic3RyYWN0U2xv
dFZpc2l0b3IuaCIKICNpbmNsdWRlICJEZWZlcnJlZFdvcmtUaW1lci5oIgogI2luY2x1ZGUgIkpT
Q0lubGluZXMuaCIKICNpbmNsdWRlICJKU0ludGVybmFsRmllbGRPYmplY3RJbXBsSW5saW5lcy5o
IgpAQCAtNjAsNyArNjEsOCBAQCB2b2lkIEpTRmluYWxpemF0aW9uUmVnaXN0cnk6OmZpbmlzaENy
ZWF0CiAgICAgZ2xvYmFsT2JqZWN0LT5nbG9iYWxPYmplY3RNZXRob2RUYWJsZSgpLT5jdXJyZW50
U2NyaXB0RXhlY3V0aW9uT3duZXIoZ2xvYmFsT2JqZWN0KTsKIH0KIAotdm9pZCBKU0ZpbmFsaXph
dGlvblJlZ2lzdHJ5Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZp
c2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0ZpbmFsaXphdGlvblJl
Z2lzdHJ5Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3Ip
CiB7CiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbihjZWxsLCB2aXNpdG9yKTsKIApAQCAtODAsMTMg
KzgyLDE1IEBAIHZvaWQgSlNGaW5hbGl6YXRpb25SZWdpc3RyeTo6dmlzaXRDaGlsZHIKICAgICBm
b3IgKGF1dG8mIGhvbGRpbmdzIDogdGhpc09iamVjdC0+bV9ub1VucmVnaXN0cmF0aW9uRGVhZCkK
ICAgICAgICAgdmlzaXRvci5hcHBlbmQoaG9sZGluZ3MpOwogCi0gICAgc2l6ZV90IHRvdGFsQnVm
ZmVyU2l6ZXNJbkJ5dGVzID0gdGhpc09iamVjdC0+bV9kZWFkUmVnaXN0cmF0aW9ucy5jYXBhY2l0
eSgpICogc2l6ZW9mKGRlY2x0eXBlKHRoaXNPYmplY3QtPm1fZGVhZFJlZ2lzdHJhdGlvbnMpOjpL
ZXlWYWx1ZVBhaXJUeXBlKTsKLSAgICB0b3RhbEJ1ZmZlclNpemVzSW5CeXRlcyArPSB0aGlzT2Jq
ZWN0LT5tX2xpdmVSZWdpc3RyYXRpb25zLmNhcGFjaXR5KCkgKiBzaXplb2YoZGVjbHR5cGUodGhp
c09iamVjdC0+bV9kZWFkUmVnaXN0cmF0aW9ucyk6OktleVZhbHVlUGFpclR5cGUpOworICAgIHNp
emVfdCB0b3RhbEJ1ZmZlclNpemVzSW5CeXRlcyA9IHRoaXNPYmplY3QtPm1fZGVhZFJlZ2lzdHJh
dGlvbnMuY2FwYWNpdHkoKSAqIHNpemVvZih0eXBlbmFtZSBkZWNsdHlwZSh0aGlzT2JqZWN0LT5t
X2RlYWRSZWdpc3RyYXRpb25zKTo6S2V5VmFsdWVQYWlyVHlwZSk7CisgICAgdG90YWxCdWZmZXJT
aXplc0luQnl0ZXMgKz0gdGhpc09iamVjdC0+bV9saXZlUmVnaXN0cmF0aW9ucy5jYXBhY2l0eSgp
ICogc2l6ZW9mKHR5cGVuYW1lIGRlY2x0eXBlKHRoaXNPYmplY3QtPm1fZGVhZFJlZ2lzdHJhdGlv
bnMpOjpLZXlWYWx1ZVBhaXJUeXBlKTsKICAgICB0b3RhbEJ1ZmZlclNpemVzSW5CeXRlcyArPSB0
aGlzT2JqZWN0LT5tX25vVW5yZWdpc3RyYXRpb25MaXZlLmNhcGFjaXR5KCkgKiBzaXplb2YoZGVj
bHR5cGUodGhpc09iamVjdC0+bV9ub1VucmVnaXN0cmF0aW9uTGl2ZS50YWtlTGFzdCgpKSk7CiAg
ICAgdG90YWxCdWZmZXJTaXplc0luQnl0ZXMgKz0gdGhpc09iamVjdC0+bV9ub1VucmVnaXN0cmF0
aW9uRGVhZC5jYXBhY2l0eSgpICogc2l6ZW9mKGRlY2x0eXBlKHRoaXNPYmplY3QtPm1fbm9VbnJl
Z2lzdHJhdGlvbkxpdmUudGFrZUxhc3QoKSkpOwogICAgIHZpc2l0b3Iudm0oKS5oZWFwLnJlcG9y
dEV4dHJhTWVtb3J5VmlzaXRlZCh0b3RhbEJ1ZmZlclNpemVzSW5CeXRlcyk7CiB9CiAKK0RFRklO
RV9WSVNJVF9DSElMRFJFTihKU0ZpbmFsaXphdGlvblJlZ2lzdHJ5KTsKKwogdm9pZCBKU0ZpbmFs
aXphdGlvblJlZ2lzdHJ5OjpkZXN0cm95KEpTQ2VsbCogdGFibGUpCiB7CiAgICAgc3RhdGljX2Nh
c3Q8SlNGaW5hbGl6YXRpb25SZWdpc3RyeSo+KHRhYmxlKS0+fkpTRmluYWxpemF0aW9uUmVnaXN0
cnkoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRmluYWxpemF0aW9u
UmVnaXN0cnkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0ZpbmFsaXphdGlvblJlZ2lzdHJ5LmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTRmluYWxpemF0aW9uUmVnaXN0cnkuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUsIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMC0yMDIxIEFwcGxlLCBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTcwLDcgKzcwLDcgQEAgcHVibGljOgogICAgIERFQ0xBUkVfRVhQT1JUX0lORk87CiAKICAg
ICB2b2lkIGZpbmFsaXplVW5jb25kaXRpb25hbGx5KFZNJik7Ci0gICAgc3RhdGljIHZvaWQgdmlz
aXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJ
TERSRU47CiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKICAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgbmVlZHNEZXN0cnVjdGlvbiA9IHRydWU7CiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uY3BwCShyZXZpc2lvbiAyNzI4MzApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDIgSGFy
cmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKICAqICBDb3B5cmlnaHQgKEMpIDIwMDEgUGV0ZXIg
S2VsbHkgKHBta0Bwb3N0LmNvbSkKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAyMCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogIENvcHlyaWdodCAoQykgMjAwNyBDYW1l
cm9uIFp3YXJpY2ggKGN3endhcmljaEB1d2F0ZXJsb28uY2EpCiAgKiAgQ29weXJpZ2h0IChDKSAy
MDA3IE1ha3MgT3Jsb3ZpY2gKICAqICBDb3B5cmlnaHQgKEMpIDIwMTUgQ2Fub24gSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgpAQCAtMjUyLDcgKzI1Miw4IEBAIGNvbnN0IFNvdXJjZUNvZGUqIEpT
RnVuY3Rpb246OnNvdXJjZUNvZGUKICAgICByZXR1cm4gJmpzRXhlY3V0YWJsZSgpLT5zb3VyY2Uo
KTsKIH0KICAgICAKLXZvaWQgSlNGdW5jdGlvbjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGws
IFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQg
SlNGdW5jdGlvbjo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNp
dG9yKQogewogICAgIEpTRnVuY3Rpb24qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNGdW5jdGlvbio+
KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygp
KTsKQEAgLTI2MSw2ICsyNjIsOCBAQCB2b2lkIEpTRnVuY3Rpb246OnZpc2l0Q2hpbGRyZW4oSlND
ZWxsKiBjCiAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZChiaXR3aXNlX2Nhc3Q8SlNDZWxs
Kj4oYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4odGhpc09iamVjdC0+bV9leGVjdXRhYmxlT3JSYXJl
RGF0YSkgJiB+cmFyZURhdGFUYWcpKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTRnVu
Y3Rpb24pOworCiBDYWxsRGF0YSBKU0Z1bmN0aW9uOjpnZXRDYWxsRGF0YShKU0NlbGwqIGNlbGwp
CiB7CiAgICAgLy8gS2VlcCB0aGlzIGZ1bmN0aW9uIE9LIGZvciBpbnZvY2F0aW9uIGZyb20gY29u
Y3VycmVudCBjb21waWxlcnMuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0Z1bmN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNGdW5jdGlvbi5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0Z1bmN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgog
ICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAwIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcp
Ci0gKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogIENvcHlyaWdodCAoQykgMjAwMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqICBDb3B5cmlnaHQgKEMpIDIwMDcgQ2FtZXJvbiBad2FyaWNoIChjd3p3YXJp
Y2hAdXdhdGVybG9vLmNhKQogICogIENvcHlyaWdodCAoQykgMjAwNyBNYWtzIE9ybG92aWNoCiAg
KgpAQCAtMTgwLDcgKzE4MCw3IEBAIHByb3RlY3RlZDoKIAogICAgIHN0YXRpYyBib29sIGRlbGV0
ZVByb3BlcnR5KEpTQ2VsbCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBEZWxldGVQ
cm9wZXJ0eVNsb3QmKTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwg
U2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiBwcml2YXRlOgog
ICAgIHN0YXRpYyBKU0Z1bmN0aW9uKiBjcmVhdGVJbXBsKFZNJiB2bSwgRnVuY3Rpb25FeGVjdXRh
YmxlKiBleGVjdXRhYmxlLCBKU1Njb3BlKiBzY29wZSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyYXRvci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmF0b3IuY3BwCShy
ZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVy
YXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxOS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTksMTEgKzU5LDE0IEBAIHZvaWQgSlNHZW5lcmF0b3I6
OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKICAgICAgICAgaW50ZXJuYWxGaWVsZChpbmRleCkuc2V0
KHZtLCB0aGlzLCB2YWx1ZXNbaW5kZXhdKTsKIH0KIAotdm9pZCBKU0dlbmVyYXRvcjo6dmlzaXRD
aGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlw
ZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNHZW5lcmF0b3I6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2Vs
bCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganND
YXN0PEpTR2VuZXJhdG9yKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0
aGlzT2JqZWN0LCBpbmZvKCkpOwogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwg
dmlzaXRvcik7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU0dlbmVyYXRvcik7CisKIH0g
Ly8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNH
ZW5lcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0dlbmVyYXRvci5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0dlbmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTk0LDcgKzk0LDcgQEAgcHVibGlj
OgogCiAgICAgREVDTEFSRV9FWFBPUlRfSU5GTzsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hp
bGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVO
OwogCiBwcml2YXRlOgogICAgIEpTR2VuZXJhdG9yKFZNJiwgU3RydWN0dXJlKik7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlldy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVk
QXJyYXlWaWV3LmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjAgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMTMs
NyArMzEzLDcgQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVz
KEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIERvbnRFbnVt
UHJvcGVydGllc01vZGUpOwogCiAgICAgc3RhdGljIHNpemVfdCBlc3RpbWF0ZWRTaXplKEpTQ2Vs
bCosIFZNJik7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90Vmlz
aXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICAvLyBSZXR1cm5zIHRy
dWUgaWYgc3VjY2Vzc2Z1bCwgYW5kIGZhbHNlIG9uIGVycm9yOyBpdCB3aWxsIHRocm93IG9uIGVy
cm9yLgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIE90aGVyQWRhcHRvcj4KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVk
QXJyYXlWaWV3SW5saW5lcy5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxOSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTUxNyw3ICs1MTcsOCBAQCBzaXplX3QgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8
QWRhcHRvcj46CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+Ci12b2lkIEpTR2VuZXJp
Y1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xv
dFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0dl
bmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBj
ZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiB0
aGlzT2JqZWN0ID0ganNDYXN0PEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Kj4oY2VsbCk7CiAgICAg
QVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNTU1LDQg
KzU1Niw2IEBAIHZvaWQgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OnYKICAgICB9
CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTl9XSVRIX01PRElGSUVSKHRlbXBsYXRlPHR5cGVu
YW1lIEFkYXB0b3I+LCBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPik7CisKIH0gLy8g
bmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9i
YWxPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTR2xvYmFsT2JqZWN0LmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNy0yMDIwIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwOCBDYW1lcm9uIFp3YXJpY2gg
KGN3endhcmljaEB1d2F0ZXJsb28uY2EpCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0xODkyLDcgKzE4
OTIsOCBAQCB2b2lkIEpTR2xvYmFsT2JqZWN0OjpyZXNldFByb3RvdHlwZShWTSYgCiAgICAgc2V0
R2xvYmFsVGhpcyh2bSwgSlNQcm94eTo6Y3JlYXRlKHZtLCBKU1Byb3h5OjpjcmVhdGVTdHJ1Y3R1
cmUodm0sIHRoaXMsIHByb3RvdHlwZSwgUHVyZUZvcndhcmRpbmdQcm94eVR5cGUpLCB0aGlzKSk7
CiB9CiAKLXZvaWQgSlNHbG9iYWxPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBT
bG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpT
R2xvYmFsT2JqZWN0Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZp
c2l0b3IpCiB7IAogICAgIEpTR2xvYmFsT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTR2xv
YmFsT2JqZWN0Kj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2Jq
ZWN0LCBpbmZvKCkpOwpAQCAtMjA2MCw2ICsyMDYxLDggQEAgdm9pZCBKU0dsb2JhbE9iamVjdDo6
dmlzaXRDaGlsZHJlbihKU0NlbAogICAgIHRoaXNPYmplY3QtPm1fcmVnRXhwR2xvYmFsRGF0YS52
aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOX1dJVEhf
TU9ESUZJRVIoSlNfRVhQT1JUX1BSSVZBVEUsIEpTR2xvYmFsT2JqZWN0KTsKKwogQ2FsbEZyYW1l
KiBKU0dsb2JhbE9iamVjdDo6ZGVwcmVjYXRlZENhbGxGcmFtZUZvckRlYnVnZ2VyKCkKIHsKICAg
ICByZXR1cm4gQ2FsbEZyYW1lOjpjcmVhdGUobV9kZXByZWNhdGVkQ2FsbEZyYW1lRm9yRGVidWdn
ZXIpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3Qu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9i
amVjdC5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0dsb2JhbE9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAq
ICBDb3B5cmlnaHQgKEMpIDIwMDcgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KLSAqICBD
b3B5cmlnaHQgKEMpIDIwMDctMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiAgQ29weXJpZ2h0IChDKSAyMDA3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTYwOSw3ICs2MDksNyBAQCBwdWJsaWM6CiAgICAg
SlNfRVhQT1JUX1BSSVZBVEUgfkpTR2xvYmFsT2JqZWN0KCk7CiAgICAgSlNfRVhQT1JUX1BSSVZB
VEUgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKIAotICAgIEpTX0VYUE9SVF9QUklWQVRF
IHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBE
RUNMQVJFX1ZJU0lUX0NISUxEUkVOX1dJVEhfTU9ESUZJRVIoSlNfRVhQT1JUX1BSSVZBVEUpOwog
CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpT
T2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwog
ICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBib29sIHB1dChKU0NlbGwqLCBKU0dsb2JhbE9i
amVjdCosIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgUHV0UHJvcGVydHlTbG90Jik7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ltbXV0YWJsZUJ1dHRlcmZseS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbW11dGFibGVCdXR0
ZXJmbHkuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0ltbXV0YWJsZUJ1dHRlcmZseS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzIsNyArMzIsOCBA
QCBuYW1lc3BhY2UgSlNDIHsKIAogY29uc3QgQ2xhc3NJbmZvIEpTSW1tdXRhYmxlQnV0dGVyZmx5
OjpzX2luZm8gPSB7ICJJbW11dGFibGUgQnV0dGVyZmx5IiwgbnVsbHB0ciwgbnVsbHB0ciwgbnVs
bHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU0ltbXV0YWJsZUJ1dHRlcmZseSkgfTsKIAotdm9p
ZCBKU0ltbXV0YWJsZUJ1dHRlcmZseTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNJbW11
dGFibGVCdXR0ZXJmbHk6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYg
dmlzaXRvcikKIHsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNlbGwsIGluZm8oKSk7
CiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbihjZWxsLCB2aXNpdG9yKTsKQEAgLTQ1LDYgKzQ2LDgg
QEAgdm9pZCBKU0ltbXV0YWJsZUJ1dHRlcmZseTo6dmlzaXRDaGlsZHJlbgogICAgIHZpc2l0b3Iu
YXBwZW5kVmFsdWVzSGlkZGVuKGJ1dHRlcmZseS0+Y29udGlndW91cygpLmRhdGEoKSwgYnV0dGVy
Zmx5LT5wdWJsaWNMZW5ndGgoKSk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU0ltbXV0
YWJsZUJ1dHRlcmZseSk7CisKIHZvaWQgSlNJbW11dGFibGVCdXR0ZXJmbHk6OmNvcHlUb0FyZ3Vt
ZW50cyhKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUqIGZpcnN0RWxlbWVudERlc3QsIHVuc2lnbmVk
IG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQogewogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBsZW5ndGg7ICsraSkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJ
bW11dGFibGVCdXR0ZXJmbHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0ltbXV0YWJsZUJ1dHRlcmZseS5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ltbXV0YWJsZUJ1dHRlcmZseS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOC0yMDE5IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOC0yMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMTQ1LDcgKzE0NSw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGpzRG91
YmxlTnVtYmVyKHZhbHVlKTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVu
KEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAog
ICAgIHZvaWQgY29weVRvQXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSogZmlyc3RF
bGVtZW50RGVzdCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOwogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ludGVybmFsRmllbGRPYmplY3RJbXBsLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbnRlcm5hbEZp
ZWxkT2JqZWN0SW1wbC5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0ludGVybmFsRmllbGRPYmplY3RJbXBsLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOS0yMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjYs
NyArNjYsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkludGVybmFs
RmllbGQodW5zaWduZWQgaW5kZXgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU0ludGVybmFs
RmllbGRPYmplY3RJbXBsLCBtX2ludGVybmFsRmllbGRzKSArIGluZGV4ICogc2l6ZW9mKFdyaXRl
QmFycmllcjxVbmtub3duPik7IH0KIAogcHJvdGVjdGVkOgotICAgIHN0YXRpYyB2b2lkIHZpc2l0
Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxE
UkVOOwogCiAgICAgSlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbChWTSYgdm0sIFN0cnVjdHVyZSog
c3RydWN0dXJlKQogICAgICAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSkKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTSW50ZXJuYWxGaWVsZE9iamVjdEltcGxJbmxpbmVzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbnRlcm5hbEZp
ZWxkT2JqZWN0SW1wbElubGluZXMuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbElubGluZXMuaAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE5LTIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0zMCw3ICszMCw4IEBACiBuYW1lc3BhY2UgSlNDIHsKIAogdGVtcGxhdGU8dW5z
aWduZWQgcGFzc2VkTnVtYmVyT2ZJbnRlcm5hbEZpZWxkcz4KLXZvaWQgSlNJbnRlcm5hbEZpZWxk
T2JqZWN0SW1wbDxwYXNzZWROdW1iZXJPZkludGVybmFsRmllbGRzPjo6dmlzaXRDaGlsZHJlbihK
U0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlz
aXRvcj4KK3ZvaWQgSlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbDxwYXNzZWROdW1iZXJPZkludGVy
bmFsRmllbGRzPjo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNp
dG9yKQogewogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNJbnRlcm5hbEZpZWxkT2Jq
ZWN0SW1wbCo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVj
dCwgaW5mbygpKTsKQEAgLTM4LDQgKzM5LDYgQEAgdm9pZCBKU0ludGVybmFsRmllbGRPYmplY3RJ
bXBsPHBhc3NlZE51bQogICAgIHZpc2l0b3IuYXBwZW5kVmFsdWVzKHRoaXNPYmplY3QtPm1faW50
ZXJuYWxGaWVsZHMsIG51bWJlck9mSW50ZXJuYWxGaWVsZHMpOwogfQogCitERUZJTkVfVklTSVRf
Q0hJTERSRU5fV0lUSF9NT0RJRklFUih0ZW1wbGF0ZTx1bnNpZ25lZCBwYXNzZWROdW1iZXJPZklu
dGVybmFsRmllbGRzPiwgSlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbDxwYXNzZWROdW1iZXJPZklu
dGVybmFsRmllbGRzPik7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNMZXhpY2FsRW52aXJvbm1lbnQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTGV4aWNhbEVudmlyb25tZW50LmNwcAko
cmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMZXhp
Y2FsRW52aXJvbm1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAwOC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzYsNyArMzYsOCBAQCBuYW1l
c3BhY2UgSlNDIHsKIAogY29uc3QgQ2xhc3NJbmZvIEpTTGV4aWNhbEVudmlyb25tZW50OjpzX2lu
Zm8gPSB7ICJKU0xleGljYWxFbnZpcm9ubWVudCIsICZCYXNlOjpzX2luZm8sIG51bGxwdHIsIG51
bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNMZXhpY2FsRW52aXJvbm1lbnQpIH07CiAKLXZv
aWQgSlNMZXhpY2FsRW52aXJvbm1lbnQ6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90
VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTTGV4
aWNhbEVudmlyb25tZW50Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3Im
IHZpc2l0b3IpCiB7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0xleGljYWxFbnZp
cm9ubWVudCo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVj
dCwgaW5mbygpKTsKQEAgLTQ0LDYgKzQ1LDggQEAgdm9pZCBKU0xleGljYWxFbnZpcm9ubWVudDo6
dmlzaXRDaGlsZHJlbgogICAgIHZpc2l0b3IuYXBwZW5kVmFsdWVzSGlkZGVuKHRoaXNPYmplY3Qt
PnZhcmlhYmxlcygpLCB0aGlzT2JqZWN0LT5zeW1ib2xUYWJsZSgpLT5zY29wZVNpemUoKSk7CiB9
CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU0xleGljYWxFbnZpcm9ubWVudCk7CisKIHZvaWQg
SlNMZXhpY2FsRW52aXJvbm1lbnQ6OmFuYWx5emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFuYWx5
emVyJiBhbmFseXplcikKIHsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTTGV4aWNh
bEVudmlyb25tZW50Kj4oY2VsbCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0xleGljYWxFbnZpcm9ubWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTTGV4aWNhbEVudmlyb25tZW50LmgJKHJldmlzaW9uIDI3MjgzMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTGV4aWNhbEVudmlyb25tZW50LmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LTIw
MjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4
LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0xMzQsNyArMTM0LDcgQEAgcHJvdGVjdGVkOgogICAgICAgICB9CiAg
ICAgfQogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRv
ciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAgICAgc3RhdGljIHZvaWQgYW5hbHl6
ZUhlYXAoSlNDZWxsKiwgSGVhcEFuYWx5emVyJik7CiB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU01hcEl0ZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01hcEl0ZXJhdG9yLmNwcAkocmV2aXNpb24gMjcyODMw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNYXBJdGVyYXRvci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTcgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
My0yMDIxIEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTU3LDEzICs1NywxNiBAQCB2b2lkIEpTTWFwSXRlcmF0b3I6OmZp
bmlzaENyZWF0aW9uKFZNJiB2CiAgICAgICAgIEJhc2U6OmludGVybmFsRmllbGQoaW5kZXgpLnNl
dCh2bSwgdGhpcywgdmFsdWVzW2luZGV4XSk7CiB9CiAKLXZvaWQgSlNNYXBJdGVyYXRvcjo6dmlz
aXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8
dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNNYXBJdGVyYXRvcjo6dmlzaXRDaGlsZHJlbkltcGwo
SlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGF1dG8qIHRoaXNPYmplY3Qg
PSBqc0Nhc3Q8SlNNYXBJdGVyYXRvcio+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5I
RVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNP
YmplY3QsIHZpc2l0b3IpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNNYXBJdGVyYXRv
cik7CisKIEpTVmFsdWUgSlNNYXBJdGVyYXRvcjo6Y3JlYXRlUGFpcihKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBKU1ZhbHVlIGtleSwgSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBNYXJrZWRB
cmd1bWVudEJ1ZmZlciBhcmdzOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNNYXBJdGVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTTWFwSXRlcmF0b3IuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNNYXBJdGVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNiBBcHBsZSwgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjEgQXBwbGUsIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTQy
LDcgKzE0Miw3IEBAIHByaXZhdGU6CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBmaW5pc2hD
cmVhdGlvbihWTSYsIEpTTWFwKiwgSXRlcmF0aW9uS2luZCk7CiAgICAgdm9pZCBmaW5pc2hDcmVh
dGlvbihWTSYpOwogICAgIEpTVmFsdWUgY3JlYXRlUGFpcihKU0dsb2JhbE9iamVjdCosIEpTVmFs
dWUsIEpTVmFsdWUpOwotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xv
dFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogfTsKIFNUQVRJQ19BU1NF
UlRfSVNfVFJJVklBTExZX0RFU1RSVUNUSUJMRShKU01hcEl0ZXJhdG9yKTsKIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVFbnZpcm9ubWVudC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVFbnZpcm9ubWVu
dC5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTTW9kdWxlRW52aXJvbm1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjUsNyArNjUsOCBA
QCB2b2lkIEpTTW9kdWxlRW52aXJvbm1lbnQ6OmZpbmlzaENyZWF0aW9uCiAgICAgdGhpcy0+bW9k
dWxlUmVjb3JkU2xvdCgpLnNldCh2bSwgdGhpcywgbW9kdWxlUmVjb3JkKTsKIH0KIAotdm9pZCBK
U01vZHVsZUVudmlyb25tZW50Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0
b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU01vZHVsZUVu
dmlyb25tZW50Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0
b3IpCiB7CiAgICAgSlNNb2R1bGVFbnZpcm9ubWVudCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU01v
ZHVsZUVudmlyb25tZW50Kj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0
aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNzQsNiArNzUsOCBAQCB2b2lkIEpTTW9kdWxlRW52aXJv
bm1lbnQ6OnZpc2l0Q2hpbGRyZW4oCiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bW9k
dWxlUmVjb3JkU2xvdCgpKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTTW9kdWxlRW52
aXJvbm1lbnQpOworCiBib29sIEpTTW9kdWxlRW52aXJvbm1lbnQ6OmdldE93blByb3BlcnR5U2xv
dChKU09iamVjdCogY2VsbCwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUHJvcGVydHlO
YW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQogewogICAgIFZNJiB2bSA9IGds
b2JhbE9iamVjdC0+dm0oKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
TW9kdWxlRW52aXJvbm1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU01vZHVsZUVudmlyb25tZW50LmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlRW52aXJvbm1lbnQuaAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTg5LDcgKzg5LDcgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuICpiaXR3aXNl
X2Nhc3Q8V3JpdGVCYXJyaWVyQmFzZTxBYnN0cmFjdE1vZHVsZVJlY29yZD4qPihiaXR3aXNlX2Nh
c3Q8Y2hhcio+KHRoaXMpICsgb2Zmc2V0T2ZNb2R1bGVSZWNvcmQoc3ltYm9sVGFibGUoKSkpOwog
ICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0
b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogfTsKIAogaW5saW5lIEpTTW9kdWxl
RW52aXJvbm1lbnQ6OkpTTW9kdWxlRW52aXJvbm1lbnQoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSwgSlNTY29wZSogY3VycmVudFNjb3BlLCBTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZU5hbWVzcGFjZU9iamVj
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1
bGVOYW1lc3BhY2VPYmplY3QuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU01vZHVsZU5hbWVzcGFjZU9iamVjdC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjAgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC04NSw3ICs4NSw4IEBAIHZvaWQgSlNNb2R1bGVOYW1lc3BhY2VPYmplY3Q6OmRlc3Ry
b3koSlMKICAgICB0aGlzT2JqZWN0LT5KU01vZHVsZU5hbWVzcGFjZU9iamVjdDo6fkpTTW9kdWxl
TmFtZXNwYWNlT2JqZWN0KCk7CiB9CiAKLXZvaWQgSlNNb2R1bGVOYW1lc3BhY2VPYmplY3Q6OnZp
c2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRl
PHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0Ojp2aXNpdENo
aWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNNb2R1
bGVOYW1lc3BhY2VPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNNb2R1bGVOYW1lc3BhY2VP
YmplY3QqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3Qs
IGluZm8oKSk7CkBAIC05OCw2ICs5OSw4IEBAIHZvaWQgSlNNb2R1bGVOYW1lc3BhY2VPYmplY3Q6
OnZpc2l0Q2hpbGQKICAgICB9CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU01vZHVsZU5h
bWVzcGFjZU9iamVjdCk7CisKIHN0YXRpYyBKU1ZhbHVlIGdldFZhbHVlKEpTTW9kdWxlRW52aXJv
bm1lbnQqIGVudmlyb25tZW50LCBQcm9wZXJ0eU5hbWUgbG9jYWxOYW1lLCBTY29wZU9mZnNldCYg
c2NvcGVPZmZzZXQpCiB7CiAgICAgU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlID0gZW52aXJvbm1l
bnQtPnN5bWJvbFRhYmxlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U01vZHVsZU5hbWVzcGFjZU9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTTW9kdWxlTmFtZXNwYWNlT2JqZWN0LmgJKHJldmlzaW9uIDI3MjgzMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlTmFtZXNwYWNlT2JqZWN0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDE1LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE1LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC03Miw3ICs3Miw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QoVk0mLCBTdHJ1Y3R1
cmUqKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGZpbmlzaENyZWF0aW9uKEpTR2xvYmFs
T2JqZWN0KiwgQWJzdHJhY3RNb2R1bGVSZWNvcmQqLCBWZWN0b3I8c3RkOjpwYWlyPElkZW50aWZp
ZXIsIEFic3RyYWN0TW9kdWxlUmVjb3JkOjpSZXNvbHV0aW9uPj4mJik7Ci0gICAgc3RhdGljIHZv
aWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklT
SVRfQ0hJTERSRU47CiAgICAgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3RDb21tb24oSlNHbG9iYWxP
YmplY3QqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwogCiAgICAgc3RydWN0IEV4cG9y
dEVudHJ5IHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlUmVj
b3JkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01v
ZHVsZVJlY29yZC5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTTW9kdWxlUmVjb3JkLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTcwLDcgKzcw
LDggQEAgdm9pZCBKU01vZHVsZVJlY29yZDo6ZmluaXNoQ3JlYXRpb24oSlNHbAogICAgIEFTU0VS
VChpbmhlcml0cyh2bSwgaW5mbygpKSk7CiB9CiAKLXZvaWQgSlNNb2R1bGVSZWNvcmQ6OnZpc2l0
Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5
cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTTW9kdWxlUmVjb3JkOjp2aXNpdENoaWxkcmVuSW1wbChK
U0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNNb2R1bGVSZWNvcmQqIHRo
aXNPYmplY3QgPSBqc0Nhc3Q8SlNNb2R1bGVSZWNvcmQqPihjZWxsKTsKICAgICBBU1NFUlRfR0Nf
T0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC03OCw2ICs3OSw4IEBAIHZv
aWQgSlNNb2R1bGVSZWNvcmQ6OnZpc2l0Q2hpbGRyZW4oSlNDZWwKICAgICB2aXNpdG9yLmFwcGVu
ZCh0aGlzT2JqZWN0LT5tX21vZHVsZVByb2dyYW1FeGVjdXRhYmxlKTsKIH0KIAorREVGSU5FX1ZJ
U0lUX0NISUxEUkVOKEpTTW9kdWxlUmVjb3JkKTsKKwogdm9pZCBKU01vZHVsZVJlY29yZDo6bGlu
ayhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHNjcmlwdEZldGNoZXIpCiB7
CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVSZWNvcmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZVJlY29yZC5oCShyZXZpc2lvbiAyNzI4MzApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZVJlY29yZC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtNjYsNyArNjYsNyBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBmaW5pc2hDcmVh
dGlvbihKU0dsb2JhbE9iamVjdCosIFZNJik7CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxk
cmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsK
IAogICAgIHZvaWQgaW5zdGFudGlhdGVEZWNsYXJhdGlvbnMoSlNHbG9iYWxPYmplY3QqLCBNb2R1
bGVQcm9ncmFtRXhlY3V0YWJsZSosIEpTVmFsdWUgc2NyaXB0RmV0Y2hlcik7CiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTmF0aXZlU3RkRnVuY3Rpb24uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTmF0aXZlU3RkRnVuY3Rp
b24uY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU05hdGl2ZVN0ZEZ1bmN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQxLDEzICs0MSwx
NiBAQCBKU05hdGl2ZVN0ZEZ1bmN0aW9uOjpKU05hdGl2ZVN0ZEZ1bmN0aW9uCiB7CiB9CiAKLXZv
aWQgSlNOYXRpdmVTdGRGdW5jdGlvbjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNOYXRp
dmVTdGRGdW5jdGlvbjo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2
aXNpdG9yKQogewogICAgIEpTTmF0aXZlU3RkRnVuY3Rpb24qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8
SlNOYXRpdmVTdGRGdW5jdGlvbio+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJ
VFModGhpc09iamVjdCwgaW5mbygpKTsKICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmpl
Y3QsIHZpc2l0b3IpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNOYXRpdmVTdGRGdW5j
dGlvbik7CisKIHZvaWQgSlNOYXRpdmVTdGRGdW5jdGlvbjo6ZmluaXNoQ3JlYXRpb24oVk0mIHZt
LCBOYXRpdmVFeGVjdXRhYmxlKiBleGVjdXRhYmxlLCB1bnNpZ25lZCBsZW5ndGgsIGNvbnN0IFN0
cmluZyYgbmFtZSkKIHsKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSwgZXhlY3V0YWJsZSwg
bGVuZ3RoLCBuYW1lKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTmF0
aXZlU3RkRnVuY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU05hdGl2ZVN0ZEZ1bmN0aW9uLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTmF0aXZlU3RkRnVuY3Rpb24uaAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxOCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTY1LDcgKzY1LDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBKU05hdGl2ZVN0ZEZ1
bmN0aW9uKFZNJiwgTmF0aXZlRXhlY3V0YWJsZSosIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJl
KiwgTmF0aXZlU3RkRnVuY3Rpb24mJik7CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIE5h
dGl2ZUV4ZWN1dGFibGUqLCB1bnNpZ25lZCBsZW5ndGgsIGNvbnN0IFN0cmluZyYgbmFtZSk7Ci0g
ICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAg
IERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBOYXRpdmVTdGRGdW5jdGlvbiBtX2Z1bmN0
aW9uOwogfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5j
cHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
T2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiAgQ29weXJp
Z2h0IChDKSAxOTk5LTIwMDEgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKICAqICBDb3B5
cmlnaHQgKEMpIDIwMDEgUGV0ZXIgS2VsbHkgKHBta0Bwb3N0LmNvbSkKLSAqICBDb3B5cmlnaHQg
KEMpIDIwMDMtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJp
Z2h0IChDKSAyMDAzLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogIENv
cHlyaWdodCAoQykgMjAwNyBFcmljIFNlaWRlbCAoZXJpY0B3ZWJraXQub3JnKQogICoKICAqICBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCkBAIC03Miw3ICs3Miw4IEBAIGNvbnN0IENsYXNzSW5mbyBKU09iamVjdDo6c19pbmZvID0g
eyAiT2IKIAogY29uc3QgQ2xhc3NJbmZvIEpTRmluYWxPYmplY3Q6OnNfaW5mbyA9IHsgIk9iamVj
dCIsICZCYXNlOjpzX2luZm8sIG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUo
SlNGaW5hbE9iamVjdCkgfTsKIAotQUxXQVlTX0lOTElORSB2b2lkIEpTT2JqZWN0OjptYXJrQXV4
aWxpYXJ5QW5kVmlzaXRPdXRPZkxpbmVQcm9wZXJ0aWVzKFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBC
dXR0ZXJmbHkqIGJ1dHRlcmZseSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0
IG1heE9mZnNldCkKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+CitBTFdBWVNfSU5MSU5FIHZv
aWQgSlNPYmplY3Q6Om1hcmtBdXhpbGlhcnlBbmRWaXNpdE91dE9mTGluZVByb3BlcnRpZXMoVmlz
aXRvciYgdmlzaXRvciwgQnV0dGVyZmx5KiBidXR0ZXJmbHksIFN0cnVjdHVyZSogc3RydWN0dXJl
LCBQcm9wZXJ0eU9mZnNldCBtYXhPZmZzZXQpCiB7CiAgICAgLy8gV2UgY2FsbCB0aGlzIHdoZW4g
d2UgZm91bmQgZXZlcnl0aGluZyB3aXRob3V0IHJhY2VzLgogICAgIEFTU0VSVChzdHJ1Y3R1cmUp
OwpAQCAtMTAzLDcgKzEwNCw4IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKU09iamVjdDo6bWFya0F1
eGlsaWEKICAgICB2aXNpdG9yLmFwcGVuZFZhbHVlc0hpZGRlbihidXR0ZXJmbHktPnByb3BlcnR5
U3RvcmFnZSgpIC0gb3V0T2ZMaW5lU2l6ZSwgb3V0T2ZMaW5lU2l6ZSk7CiB9CiAKLUFMV0FZU19J
TkxJTkUgU3RydWN0dXJlKiBKU09iamVjdDo6dmlzaXRCdXR0ZXJmbHkoU2xvdFZpc2l0b3ImIHZp
c2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgorQUxXQVlTX0lOTElORSBTdHJ1Y3R1
cmUqIEpTT2JqZWN0Ojp2aXNpdEJ1dHRlcmZseShWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHN0
YXRpYyBjb25zdCBjaGFyKiBjb25zdCByYWNlUmVhc29uID0gIkpTT2JqZWN0Ojp2aXNpdEJ1dHRl
cmZseSI7CiAgICAgU3RydWN0dXJlKiByZXN1bHQgPSB2aXNpdEJ1dHRlcmZseUltcGwodmlzaXRv
cik7CkBAIC0xMTIsNyArMTE0LDggQEAgQUxXQVlTX0lOTElORSBTdHJ1Y3R1cmUqIEpTT2JqZWN0
Ojp2aXNpdAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUFMV0FZU19JTkxJTkUgU3RydWN0dXJl
KiBKU09iamVjdDo6dmlzaXRCdXR0ZXJmbHlJbXBsKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVt
cGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK0FMV0FZU19JTkxJTkUgU3RydWN0dXJlKiBKU09iamVj
dDo6dmlzaXRCdXR0ZXJmbHlJbXBsKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgVk0mIHZtID0g
dmlzaXRvci52bSgpOwogICAgIApAQCAtNDEyLDI0ICs0MTUsMjAgQEAgc2l6ZV90IEpTT2JqZWN0
Ojplc3RpbWF0ZWRTaXplKEpTQ2VsbCogYwogICAgIHJldHVybiBCYXNlOjplc3RpbWF0ZWRTaXpl
KGNlbGwsIHZtKSArIGJ1dHRlcmZseU91dE9mTGluZVNpemU7CiB9CiAKLXZvaWQgSlNPYmplY3Q6
OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBs
YXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTT2JqZWN0Ojp2aXNpdENoaWxkcmVuSW1wbChK
U0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNPYmplY3QqIHRoaXNPYmpl
Y3QgPSBqc0Nhc3Q8SlNPYmplY3QqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVS
SVRTKHRoaXNPYmplY3QsIGluZm8oKSk7Ci0jaWYgQVNTRVJUX0VOQUJMRUQKLSAgICBib29sIHdh
c0NoZWNraW5nRm9yRGVmYXVsdE1hcmtWaW9sYXRpb24gPSB2aXNpdG9yLm1faXNDaGVja2luZ0Zv
ckRlZmF1bHRNYXJrVmlvbGF0aW9uOwotICAgIHZpc2l0b3IubV9pc0NoZWNraW5nRm9yRGVmYXVs
dE1hcmtWaW9sYXRpb24gPSBmYWxzZTsKLSNlbmRpZgotICAgIAorICAgIHR5cGVuYW1lIFZpc2l0
b3I6OkRlZmF1bHRNYXJraW5nVmlvbGF0aW9uQXNzZXJ0aW9uU2NvcGUgYXNzZXJ0aW9uU2NvcGUo
dmlzaXRvcik7CisKICAgICBKU0NlbGw6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRv
cik7Ci0gICAgCisKICAgICB0aGlzT2JqZWN0LT52aXNpdEJ1dHRlcmZseSh2aXNpdG9yKTsKLSAg
ICAKLSNpZiBBU1NFUlRfRU5BQkxFRAotICAgIHZpc2l0b3IubV9pc0NoZWNraW5nRm9yRGVmYXVs
dE1hcmtWaW9sYXRpb24gPSB3YXNDaGVja2luZ0ZvckRlZmF1bHRNYXJrVmlvbGF0aW9uOwotI2Vu
ZGlmCiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTl9XSVRIX01PRElGSUVSKEpTX0VYUE9SVF9Q
UklWQVRFLCBKU09iamVjdCk7CisKIHZvaWQgSlNPYmplY3Q6OmFuYWx5emVIZWFwKEpTQ2VsbCog
Y2VsbCwgSGVhcEFuYWx5emVyJiBhbmFseXplcikKIHsKICAgICBKU09iamVjdCogdGhpc09iamVj
dCA9IGpzQ2FzdDxKU09iamVjdCo+KGNlbGwpOwpAQCAtNDY4LDE0ICs0NjcsMTIgQEAgdm9pZCBK
U09iamVjdDo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLAogICAgIH0KIH0KIAotdm9pZCBKU0Zp
bmFsT2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0
b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0ZpbmFsT2JqZWN0Ojp2aXNp
dENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNG
aW5hbE9iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0ZpbmFsT2JqZWN0Kj4oY2VsbCk7CiAg
ICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwotI2lmIEFT
U0VSVF9FTkFCTEVECi0gICAgYm9vbCB3YXNDaGVja2luZ0ZvckRlZmF1bHRNYXJrVmlvbGF0aW9u
ID0gdmlzaXRvci5tX2lzQ2hlY2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlvbjsKLSAgICB2aXNp
dG9yLm1faXNDaGVja2luZ0ZvckRlZmF1bHRNYXJrVmlvbGF0aW9uID0gZmFsc2U7Ci0jZW5kaWYK
KyAgICB0eXBlbmFtZSBWaXNpdG9yOjpEZWZhdWx0TWFya2luZ1Zpb2xhdGlvbkFzc2VydGlvblNj
b3BlIGFzc2VydGlvblNjb3BlKHZpc2l0b3IpOwogICAgIAogICAgIEpTQ2VsbDo6dmlzaXRDaGls
ZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKICAgICAKQEAgLTQ4MywxMiArNDgwLDEwIEBAIHZv
aWQgSlNGaW5hbE9iamVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwKICAgICAgICAgaWYgKHVuc2ln
bmVkIHN0b3JhZ2VTaXplID0gc3RydWN0dXJlLT5pbmxpbmVTaXplKCkpCiAgICAgICAgICAgICB2
aXNpdG9yLmFwcGVuZFZhbHVlc0hpZGRlbih0aGlzT2JqZWN0LT5pbmxpbmVTdG9yYWdlKCksIHN0
b3JhZ2VTaXplKTsKICAgICB9Ci0gICAgCi0jaWYgQVNTRVJUX0VOQUJMRUQKLSAgICB2aXNpdG9y
Lm1faXNDaGVja2luZ0ZvckRlZmF1bHRNYXJrVmlvbGF0aW9uID0gd2FzQ2hlY2tpbmdGb3JEZWZh
dWx0TWFya1Zpb2xhdGlvbjsKLSNlbmRpZgogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU5fV0lU
SF9NT0RJRklFUihKU19FWFBPUlRfUFJJVkFURSwgSlNGaW5hbE9iamVjdCk7CisKIFN0cmluZyBK
U09iamVjdDo6Y2xhc3NOYW1lKGNvbnN0IEpTT2JqZWN0KiBvYmplY3QsIFZNJiB2bSkKIHsKICAg
ICBjb25zdCBDbGFzc0luZm8qIGluZm8gPSBvYmplY3QtPmNsYXNzSW5mbyh2bSk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJKHJldmlzaW9uIDI3MjgzMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNyArMSw3IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAxIEhhcnJp
IFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCiAgKiAgQ29weXJpZ2h0IChDKSAyMDAxIFBldGVyIEtl
bGx5IChwbWtAcG9zdC5jb20pCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMTkgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwMy0yMDIxIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0xMDgs
OCArMTA4LDkgQEAgY2xhc3MgSlNPYmplY3QgOiBwdWJsaWMgSlNDZWxsIHsKIHB1YmxpYzoKICAg
ICB1c2luZyBCYXNlID0gSlNDZWxsOwogCisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTl9XSVRI
X01PRElGSUVSKEpTX0VYUE9SVF9QUklWQVRFKTsKKwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0
YXRpYyBzaXplX3QgZXN0aW1hdGVkU2l6ZShKU0NlbGwqLCBWTSYpOwotICAgIEpTX0VYUE9SVF9Q
UklWQVRFIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsK
ICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBhbmFseXplSGVhcChKU0NlbGwqLCBI
ZWFwQW5hbHl6ZXImKTsKIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBTdHJpbmcgY2xh
c3NOYW1lKGNvbnN0IEpTT2JqZWN0KiwgVk0mKTsKQEAgLTk4MiwxMSArOTgzLDExIEBAIHByb3Rl
Y3RlZDoKICAgICBKU09iamVjdChWTSYsIFN0cnVjdHVyZSosIEJ1dHRlcmZseSogPSBudWxscHRy
KTsKICAgICAKICAgICAvLyBWaXNpdHMgdGhlIGJ1dHRlcmZseSB1bmxlc3MgdGhlcmUgaXMgYSBy
YWNlLiBSZXR1cm5zIHRoZSBzdHJ1Y3R1cmUgaWYgdGhlcmUgd2FzIG5vIHJhY2UuCi0gICAgU3Ry
dWN0dXJlKiB2aXNpdEJ1dHRlcmZseShTbG90VmlzaXRvciYpOworICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFZpc2l0b3I+IFN0cnVjdHVyZSogdmlzaXRCdXR0ZXJmbHkoVmlzaXRvciYpOwogICAgIAot
ICAgIFN0cnVjdHVyZSogdmlzaXRCdXR0ZXJmbHlJbXBsKFNsb3RWaXNpdG9yJik7CisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gU3RydWN0dXJlKiB2aXNpdEJ1dHRlcmZseUltcGwoVmlz
aXRvciYpOwogICAgIAotICAgIHZvaWQgbWFya0F1eGlsaWFyeUFuZFZpc2l0T3V0T2ZMaW5lUHJv
cGVydGllcyhTbG90VmlzaXRvciYsIEJ1dHRlcmZseSosIFN0cnVjdHVyZSosIFByb3BlcnR5T2Zm
c2V0IG1heE9mZnNldCk7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCBtYXJr
QXV4aWxpYXJ5QW5kVmlzaXRPdXRPZkxpbmVQcm9wZXJ0aWVzKFZpc2l0b3ImLCBCdXR0ZXJmbHkq
LCBTdHJ1Y3R1cmUqLCBQcm9wZXJ0eU9mZnNldCBtYXhPZmZzZXQpOwogCiAgICAgLy8gQ2FsbCB0
aGlzIGlmIHlvdSBrbm93IHRoYXQgdGhlIG9iamVjdCBpcyBpbiBhIG1vZGUgd2hlcmUgaXQgaGFz
IGFycmF5CiAgICAgLy8gc3RvcmFnZS4gVGhpcyB3aWxsIGFzc2VydCBvdGhlcndpc2UuCkBAIC0x
MTc0LDggKzExNzUsNiBAQCBwcm90ZWN0ZWQ6CiAgICAgfQogfTsKIAotY2xhc3MgSlNGaW5hbE9i
amVjdDsKLQogLy8gSlNGaW5hbE9iamVjdCBpcyBhIHR5cGUgb2YgSlNPYmplY3QgdGhhdCBjb250
YWlucyBzdWZmaWNpZW50IGludGVybmFsCiAvLyBzdG9yYWdlIHRvIGZ1bGx5IG1ha2UgdXNlIG9m
IHRoZSBjb2xsZWN0b3IgY2VsbCBjb250YWluaW5nIGl0LgogY2xhc3MgSlNGaW5hbE9iamVjdCBm
aW5hbCA6IHB1YmxpYyBKU09iamVjdCB7CkBAIC0xMjE0LDE1ICsxMjEzLDEzIEBAIHB1YmxpYzoK
ICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3Rv
dHlwZSwgdHlwZUluZm8oKSwgaW5mbygpLCBkZWZhdWx0SW5kZXhpbmdUeXBlLCBpbmxpbmVDYXBh
Y2l0eSk7CiAgICAgfQogCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgdmlzaXRD
aGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERS
RU5fV0lUSF9NT0RJRklFUihKU19FWFBPUlRfUFJJVkFURSk7CiAKICAgICBERUNMQVJFX0VYUE9S
VF9JTkZPOwogCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0
b3I7CiAKLSAgICB2b2lkIHZpc2l0Q2hpbGRyZW5Db21tb24oU2xvdFZpc2l0b3ImKTsKLQogICAg
IGV4cGxpY2l0IEpTRmluYWxPYmplY3QoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgQnV0
dGVyZmx5KiBidXR0ZXJmbHkpCiAgICAgICAgIDogSlNPYmplY3Qodm0sIHN0cnVjdHVyZSwgYnV0
dGVyZmx5KQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJv
bWlzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQ
cm9taXNlLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNQcm9taXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY3LDEzICs2NywxNiBAQCB2
b2lkIEpTUHJvbWlzZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQogICAgICAgICBCYXNlOjppbnRl
cm5hbEZpZWxkKGluZGV4KS5zZXQodm0sIHRoaXMsIHZhbHVlc1tpbmRleF0pOwogfQogCi12b2lk
IEpTUHJvbWlzZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNp
dG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNQcm9taXNlOjp2aXNpdENo
aWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0byog
dGhpc09iamVjdCA9IGpzQ2FzdDxKU1Byb21pc2UqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JK
RUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAgICAgQmFzZTo6dmlzaXRDaGlsZHJl
bih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTUHJv
bWlzZSk7CisKIGF1dG8gSlNQcm9taXNlOjpzdGF0dXMoVk0mKSBjb25zdCAtPiBTdGF0dXMKIHsK
ICAgICBKU1ZhbHVlIHZhbHVlID0gaW50ZXJuYWxGaWVsZChGaWVsZDo6RmxhZ3MpLmdldCgpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9taXNlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9taXNlLmgJKHJldmlzaW9u
IDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvbWlzZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTk2LDcgKzk2LDcgQEAgcHVibGljOgogICAgIH07CiAgICAgc3RhdGljIERl
ZmVycmVkRGF0YSBjcmVhdGVEZWZlcnJlZERhdGEoSlNHbG9iYWxPYmplY3QqLCBKU1Byb21pc2VD
b25zdHJ1Y3RvciopOwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBT
bG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKIHByb3RlY3RlZDoK
ICAgICBKU1Byb21pc2UoVk0mLCBTdHJ1Y3R1cmUqKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTUHJvcGVydHlOYW1lRW51bWVyYXRvci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmNw
cAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQ
cm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTcwLDcgKzcwLDgg
QEAgdm9pZCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmZpbmlzaENyZQogICAgIH0KIH0KIAot
dm9pZCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxs
LCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lk
IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxs
LCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvciogdGhp
c09iamVjdCA9IGpzQ2FzdDxKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqPihjZWxsKTsKICAgICBB
U1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC04Nyw2ICs4
OCw4IEBAIHZvaWQgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjp2aXNpdENoaWwKICAgICB9CiB9
CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IpOworCiAv
LyBGSVhNRTogQXNzZXJ0IHRoYXQgcHJvcGVydGllcyByZXR1cm5lZCBieSBnZXRPd25Qcm9wZXJ0
eU5hbWVzKCkgYXJlIHJlcG9ydGVkIGVudW1lcmFibGUgYnkgZ2V0T3duUHJvcGVydHlTbG90KCku
CiAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE5OTI2CiB2b2lk
IGdldEVudW1lcmFibGVQcm9wZXJ0eU5hbWVzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEpTT2JqZWN0KiBiYXNlLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgdWludDMy
X3QmIGluZGV4ZWRMZW5ndGgsIHVpbnQzMl90JiBzdHJ1Y3R1cmVQcm9wZXJ0eUNvdW50KQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9y
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTUHJvcGVydHlOYW1lRW51bWVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNC0yMDE5IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDIxIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtODQsNyArODQsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0Yo
SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLCBtX3Byb3BlcnR5TmFtZXMpOwogICAgIH0KIAotICAg
IHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBE
RUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBMTElu
dE9mZnNldHNFeHRyYWN0b3I7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U1Byb3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U1Byb3h5LmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNQcm94eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDExLTIwMTIsIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM1LDcgKzM1
LDggQEAgU1RBVElDX0FTU0VSVF9JU19UUklWSUFMTFlfREVTVFJVQ1RJQkxFKAogCiBjb25zdCBD
bGFzc0luZm8gSlNQcm94eTo6c19pbmZvID0geyAiSlNQcm94eSIsICZCYXNlOjpzX2luZm8sIG51
bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNQcm94eSkgfTsKIAotdm9pZCBK
U1Byb3h5Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3Ip
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1Byb3h5Ojp2aXNpdENoaWxkcmVu
SW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNQcm94eSogdGhp
c09iamVjdCA9IGpzQ2FzdDxKU1Byb3h5Kj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9J
TkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNDMsNiArNDQsOCBAQCB2b2lkIEpTUHJv
eHk6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsCiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09i
amVjdC0+bV90YXJnZXQpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU5fV0lUSF9NT0RJRklF
UihKU19FWFBPUlRfUFJJVkFURSwgSlNQcm94eSk7CisKIHZvaWQgSlNQcm94eTo6c2V0VGFyZ2V0
KFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKIHsKICAgICBtX3RhcmdldC5z
ZXQodm0sIHRoaXMsIGdsb2JhbE9iamVjdCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU1Byb3h5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNQcm94eS5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1Byb3h5LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDExLTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC04NSw3ICs4NSw3IEBAIHBy
b3RlY3RlZDoKICAgICAgICAgbV90YXJnZXQuc2V0KHZtLCB0aGlzLCB0YXJnZXQpOwogICAgIH0K
IAotICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOX1dJVEhfTU9ESUZJ
RVIoSlNfRVhQT1JUX1BSSVZBVEUpOwogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFN0
cmluZyBjbGFzc05hbWUoY29uc3QgSlNPYmplY3QqLCBWTSYpOwogICAgIEpTX0VYUE9SVF9QUklW
QVRFIHN0YXRpYyBTdHJpbmcgdG9TdHJpbmdOYW1lKGNvbnN0IEpTT2JqZWN0KiwgSlNHbG9iYWxP
YmplY3QqKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2NvcGUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2NvcGUuY3Bw
CShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Nj
b3BlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTItMjAyMCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTItMjAyMSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM5LDcgKzM5LDggQEAgU1RBVElDX0FTU0VSVF9J
U19UUklWSUFMTFlfREVTVFJVQ1RJQkxFKAogCiBjb25zdCBDbGFzc0luZm8gSlNTY29wZTo6c19p
bmZvID0geyAiU2NvcGUiLCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVf
TUVUSE9EX1RBQkxFKEpTU2NvcGUpIH07CiAKLXZvaWQgSlNTY29wZTo6dmlzaXRDaGlsZHJlbihK
U0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlz
aXRvcj4KK3ZvaWQgSlNTY29wZTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNp
dG9yJiB2aXNpdG9yKQogewogICAgIEpTU2NvcGUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNTY29w
ZSo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5m
bygpKTsKQEAgLTQ3LDYgKzQ4LDggQEAgdm9pZCBKU1Njb3BlOjp2aXNpdENoaWxkcmVuKEpTQ2Vs
bCogY2VsbAogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fbmV4dCk7CiB9CiAKK0RF
RklORV9WSVNJVF9DSElMRFJFTihKU1Njb3BlKTsKKwogLy8gUmV0dXJucyB0cnVlIGlmIHdlIGZv
dW5kIGVub3VnaCBpbmZvcm1hdGlvbiB0byB0ZXJtaW5hdGUgb3B0aW1pemF0aW9uLgogc3RhdGlj
IGlubGluZSBib29sIGFic3RyYWN0QWNjZXNzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEpTU2NvcGUqIHNjb3BlLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgR2V0T3JQdXQgZ2V0T3JQ
dXQsIHNpemVfdCBkZXB0aCwgYm9vbCYgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MsIFJlc29sdmVP
cCYgb3AsIEluaXRpYWxpemF0aW9uTW9kZSBpbml0aWFsaXphdGlvbk1vZGUpCiB7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Njb3BlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTY29wZS5oCShyZXZpc2lvbiAyNzI4MzApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Njb3BlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTkgQXBwbGUgSW5j
LiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjEgQXBwbGUg
SW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC02NCw3ICs2NCw3IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyB2b2lkIGNvbGxlY3RDbG9z
dXJlVmFyaWFibGVzVW5kZXJURFooSlNTY29wZSosIFREWkVudmlyb25tZW50JiByZXN1bHQsIFBy
aXZhdGVOYW1lRW52aXJvbm1lbnQmKTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4o
SlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAg
ICAgYm9vbCBpc1ZhclNjb3BlKCk7CiAgICAgYm9vbCBpc0xleGljYWxTY29wZSgpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZWdtZW50
ZWRWYXJpYWJsZU9iamVjdC5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVPYmplY3QuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC02Miw3ICs2Miw4IEBAIFNjb3BlT2Zmc2V0IEpTU2VnbWVudGVkVmFyaWFibGVPYmpl
Y3Q6OmEKICAgICByZXR1cm4gU2NvcGVPZmZzZXQob2xkU2l6ZSk7CiB9CiAKLXZvaWQgSlNTZWdt
ZW50ZWRWYXJpYWJsZU9iamVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNp
dG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNTZWdtZW50
ZWRWYXJpYWJsZU9iamVjdDo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9y
JiB2aXNpdG9yKQogewogICAgIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3QqIHRoaXNPYmplY3Qg
PSBqc0Nhc3Q8SlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdCo+KGNlbGwpOwogICAgIEFTU0VSVF9H
Q19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTc1LDYgKzc2LDggQEAg
dm9pZCBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0Ojp2aXNpdENoaQogICAgICAgICB2aXNpdG9y
LmFwcGVuZEhpZGRlbih0aGlzT2JqZWN0LT5tX3ZhcmlhYmxlc1tpXSk7CiB9CiAKK0RFRklORV9W
SVNJVF9DSElMRFJFTl9XSVRIX01PRElGSUVSKEpTX0VYUE9SVF9QUklWQVRFLCBKU1NlZ21lbnRl
ZFZhcmlhYmxlT2JqZWN0KTsKKwogdm9pZCBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0OjphbmFs
eXplSGVhcChKU0NlbGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCiB7CiAgICAgSlNT
ZWdtZW50ZWRWYXJpYWJsZU9iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1NlZ21lbnRlZFZh
cmlhYmxlT2JqZWN0Kj4oY2VsbCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdC5oCShyZXZpc2lvbiAy
NzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NlZ21lbnRlZFZhcmlh
YmxlT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDEyLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDEyLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC04NSw4ICs4NSw4IEBAIHB1YmxpYzoKICAg
ICAvLyBBZGRzIG51bWJlck9mUmVnaXN0ZXJzVG9BZGQgcmVnaXN0ZXJzLCBpbml0aWFsaXplcyB0
aGVtIHRvIFVuZGVmaW5lZCwgYW5kIHJldHVybnMKICAgICAvLyB0aGUgaW5kZXggb2YgdGhlIGZp
cnN0IG9uZSBhZGRlZC4KICAgICBKU19FWFBPUlRfUFJJVkFURSBTY29wZU9mZnNldCBhZGRWYXJp
YWJsZXModW5zaWduZWQgbnVtYmVyT2ZWYXJpYWJsZXNUb0FkZCwgSlNWYWx1ZSk7Ci0gICAgCi0g
ICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBT
bG90VmlzaXRvciYpOworCisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTl9XSVRIX01PRElGSUVS
KEpTX0VYUE9SVF9QUklWQVRFKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBh
bmFseXplSGVhcChKU0NlbGwqLCBIZWFwQW5hbHl6ZXImKTsKICAgICAKIHByb3RlY3RlZDoKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2V0SXRlcmF0b3IuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2V0SXRlcmF0b3IuY3Bw
CShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Nl
dEl0ZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNyBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMjEgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTcsMTMgKzU3LDE2IEBAIHZvaWQg
SlNTZXRJdGVyYXRvcjo6ZmluaXNoQ3JlYXRpb24oVk0mIHYKICAgICAgICAgQmFzZTo6aW50ZXJu
YWxGaWVsZChpbmRleCkuc2V0KHZtLCB0aGlzLCB2YWx1ZXNbaW5kZXhdKTsKIH0KIAotdm9pZCBK
U1NldEl0ZXJhdG9yOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZp
c2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1NldEl0ZXJhdG9yOjp2
aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAg
YXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1NldEl0ZXJhdG9yKj4oY2VsbCk7CiAgICAgQVNT
RVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwogICAgIEJhc2U6OnZp
c2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CiB9CiAKK0RFRklORV9WSVNJVF9DSElM
RFJFTihKU1NldEl0ZXJhdG9yKTsKKwogSlNWYWx1ZSBKU1NldEl0ZXJhdG9yOjpjcmVhdGVQYWly
KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUga2V5LCBKU1ZhbHVlIHZhbHVl
KQogewogICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3M7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU1NldEl0ZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZXRJdGVyYXRvci5oCShyZXZpc2lvbiAyNzI4MzApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NldEl0ZXJhdG9yLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE2IEFw
cGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAy
MSBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0xMzAsNyArMTMwLDcgQEAgcHJpdmF0ZToKICAgICBKU19FWFBPUlRfUFJJ
VkFURSB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgSlNTZXQqLCBJdGVyYXRpb25LaW5kKTsKICAg
ICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgSlNWYWx1
ZSBjcmVhdGVQYWlyKEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSwgSlNWYWx1ZSk7Ci0gICAgc3Rh
dGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xB
UkVfVklTSVRfQ0hJTERSRU47CiB9OwogU1RBVElDX0FTU0VSVF9JU19UUklWSUFMTFlfREVTVFJV
Q1RJQkxFKEpTU2V0SXRlcmF0b3IpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1N0cmluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNTdHJpbmcuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU1N0cmluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSw3IEBA
CiAvKgogICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAyIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtk
ZS5vcmcpCiAgKiAgQ29weXJpZ2h0IChDKSAyMDAxIFBldGVyIEtlbGx5IChwbWtAcG9zdC5jb20p
Ci0gKiAgQ29weXJpZ2h0IChDKSAyMDA0LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogIENvcHlyaWdodCAoQykgMjAwNC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0xMDUsNyArMTA1LDggQEAgc2l6ZV90
IEpTU3RyaW5nOjplc3RpbWF0ZWRTaXplKEpTQ2VsbCogYwogICAgIHJldHVybiBCYXNlOjplc3Rp
bWF0ZWRTaXplKGNlbGwsIHZtKSArIGJpdHdpc2VfY2FzdDxTdHJpbmdJbXBsKj4ocG9pbnRlcikt
PmNvc3REdXJpbmdHQygpOwogfQogCi12b2lkIEpTU3RyaW5nOjp2aXNpdENoaWxkcmVuKEpTQ2Vs
bCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
Pgordm9pZCBKU1N0cmluZzo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9y
JiB2aXNpdG9yKQogewogICAgIEpTU3RyaW5nKiB0aGlzT2JqZWN0ID0gYXNTdHJpbmcoY2VsbCk7
CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAt
MTQzLDYgKzE0NCw4IEBAIHZvaWQgSlNTdHJpbmc6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWwK
ICAgICAgICAgdmlzaXRvci5yZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQoaW1wbC0+Y29zdER1cmlu
Z0dDKCkpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNTdHJpbmcpOworCiBzdGF0aWMg
Y29uc3RleHByIHVuc2lnbmVkIG1heExlbmd0aEZvck9uU3RhY2tSZXNvbHZlID0gMjA0ODsKIAog
dm9pZCBKU1JvcGVTdHJpbmc6OnJlc29sdmVSb3BlSW50ZXJuYWw4KExDaGFyKiBidWZmZXIpIGNv
bnN0CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmgJKHJldmlz
aW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSw3IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMTk5
OS0yMDAxIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCiAgKiAgQ29weXJpZ2h0IChDKSAy
MDAxIFBldGVyIEtlbGx5IChwbWtAcG9zdC5jb20pCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIw
MjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAw
My0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICog
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCkBAIC0yMTcsNyArMjE3LDcgQEAgcHVibGljOgogCiAgICAgc3RhdGljIHZvaWQgZHVtcFRv
U3RyZWFtKGNvbnN0IEpTQ2VsbCosIFByaW50U3RyZWFtJik7CiAgICAgc3RhdGljIHNpemVfdCBl
c3RpbWF0ZWRTaXplKEpTQ2VsbCosIFZNJik7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJl
bihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAK
ICAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaXNSb3BlKCkgY29uc3QKICAgICB7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZ0l0ZXJhdG9yLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZ0l0ZXJhdG9yLmNwcAko
cmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJp
bmdJdGVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogQ29w
eXJpZ2h0IChDKSAyMDE1IFl1c3VrZSBTdXp1a2kgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4uCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01MSwxMSArNTEsMTQgQEAgSlNTdHJp
bmdJdGVyYXRvciogSlNTdHJpbmdJdGVyYXRvcjo6Y2xvbgogICAgIHJldHVybiBjbG9uZTsKIH0K
IAotdm9pZCBKU1N0cmluZ0l0ZXJhdG9yOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xv
dFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1N0
cmluZ0l0ZXJhdG9yOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZp
c2l0b3IpCiB7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1N0cmluZ0l0ZXJhdG9y
Kj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZv
KCkpOwogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CiB9CiAK
K0RFRklORV9WSVNJVF9DSElMRFJFTihKU1N0cmluZ0l0ZXJhdG9yKTsKKwogfSAvLyBuYW1lc3Bh
Y2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZ0l0ZXJh
dG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJp
bmdJdGVyYXRvci5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU1N0cmluZ0l0ZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBA
CiAvKgogICogQ29weXJpZ2h0IChDKSAyMDE1IFl1c3VrZSBTdXp1a2kgPHV0YXRhbmUudGVhQGdt
YWlsLmNvbT4uCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03OSw3ICs4MCw3IEBA
IHB1YmxpYzoKICAgICBKU1ZhbHVlIGluZGV4KCkgY29uc3QgeyByZXR1cm4gaW50ZXJuYWxGaWVs
ZChGaWVsZDo6SW5kZXgpLmdldCgpOyB9CiAgICAgSlNTdHJpbmdJdGVyYXRvciogY2xvbmUoSlNH
bG9iYWxPYmplY3QqKTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwg
U2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiBwcml2YXRlOgog
ICAgIEpTU3RyaW5nSXRlcmF0b3IoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3ltYm9sVGFibGVP
YmplY3QuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM2LDcgKzM2
LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAKIGNvbnN0IENsYXNzSW5mbyBKU1N5bWJvbFRhYmxlT2Jq
ZWN0OjpzX2luZm8gPSB7ICJTeW1ib2xUYWJsZU9iamVjdCIsICZCYXNlOjpzX2luZm8sIG51bGxw
dHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNTeW1ib2xUYWJsZU9iamVjdCkgfTsK
IAotdm9pZCBKU1N5bWJvbFRhYmxlT2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwg
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBK
U1N5bWJvbFRhYmxlT2JqZWN0Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0
b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNTeW1ib2xUYWJsZU9iamVjdCogdGhpc09iamVjdCA9IGpz
Q2FzdDxKU1N5bWJvbFRhYmxlT2JqZWN0Kj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9J
TkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNDQsNiArNDUsOCBAQCB2b2lkIEpTU3lt
Ym9sVGFibGVPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oCiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09i
amVjdC0+bV9zeW1ib2xUYWJsZSk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU1N5bWJv
bFRhYmxlT2JqZWN0KTsKKwogYm9vbCBKU1N5bWJvbFRhYmxlT2JqZWN0OjpkZWxldGVQcm9wZXJ0
eShKU0NlbGwqIGNlbGwsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFByb3BlcnR5TmFt
ZSBwcm9wZXJ0eU5hbWUsIERlbGV0ZVByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBKU1N5bWJv
bFRhYmxlT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTU3ltYm9sVGFibGVPYmplY3QqPihj
ZWxsKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3ltYm9sVGFibGVP
YmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N5
bWJvbFRhYmxlT2JqZWN0LmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTcw
LDcgKzcwLDcgQEAgcHJvdGVjdGVkOgogICAgICAgICBtX3N5bWJvbFRhYmxlLnNldCh2bSwgdGhp
cywgc3ltYm9sVGFibGUpOwogICAgIH0KICAgICAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxk
cmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsK
ICAgICAKIHByaXZhdGU6CiAgICAgV3JpdGVCYXJyaWVyPFN5bWJvbFRhYmxlPiBtX3N5bWJvbFRh
YmxlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNXZWFrT2JqZWN0UmVm
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1dlYWtP
YmplY3RSZWYuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU1dlYWtPYmplY3RSZWYuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE5LTIwMjEgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzksNyArMzksOCBA
QCB2b2lkIEpTV2Vha09iamVjdFJlZjo6ZmluaXNoQ3JlYXRpb24oVk0mCiAgICAgQmFzZTo6Zmlu
aXNoQ3JlYXRpb24odm0pOwogfQogCi12b2lkIEpTV2Vha09iamVjdFJlZjo6dmlzaXRDaGlsZHJl
bihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUg
VmlzaXRvcj4KK3ZvaWQgSlNXZWFrT2JqZWN0UmVmOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwq
IGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2Fz
dDxKU1dlYWtPYmplY3RSZWYqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRT
KHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC01MSw2ICs1Miw4IEBAIHZvaWQgSlNXZWFrT2JqZWN0
UmVmOjp2aXNpdENoaWxkcmVuKEpTQ2UKICAgICB9CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJF
TihKU1dlYWtPYmplY3RSZWYpOworCiB2b2lkIEpTV2Vha09iamVjdFJlZjo6ZmluYWxpemVVbmNv
bmRpdGlvbmFsbHkoVk0mIHZtKQogewogICAgIGlmIChtX3ZhbHVlICYmICF2bS5oZWFwLmlzTWFy
a2VkKG1fdmFsdWUuZ2V0KCkpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNXZWFrT2JqZWN0UmVmLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNXZWFrT2JqZWN0UmVmLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTV2Vha09iamVjdFJlZi5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSwgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE5LTIwMjEgQXBwbGUsIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjUs
NyArNjUsNyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgdm9pZCBmaW5hbGl6ZVVuY29uZGl0aW9u
YWxseShWTSYpOwotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZp
c2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiBwcml2YXRlOgogICAgIEpT
V2Vha09iamVjdFJlZihWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNXaXRoU2NvcGUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTV2l0aFNjb3BlLmNwcAkocmV2aXNpb24gMjcy
ODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNXaXRoU2NvcGUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiwg
MjAxNiBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTItMjAyMSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTQxLDcgKzQxLDggQEAgSlNXaXRoU2NvcGUqIEpTV2l0aFNjb3Bl
OjpjcmVhdGUoCiAgICAgcmV0dXJuIHdpdGhTY29wZTsKIH0KIAotdm9pZCBKU1dpdGhTY29wZTo6
dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxh
dGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNXaXRoU2NvcGU6OnZpc2l0Q2hpbGRyZW5JbXBs
KEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU1dpdGhTY29wZSogdGhp
c09iamVjdCA9IGpzQ2FzdDxKU1dpdGhTY29wZSo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpF
Q1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTQ5LDYgKzUwLDggQEAgdm9pZCBK
U1dpdGhTY29wZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIAogICAgIHZpc2l0b3IuYXBwZW5kKHRo
aXNPYmplY3QtPm1fb2JqZWN0KTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTV2l0aFNj
b3BlKTsKKwogU3RydWN0dXJlKiBKU1dpdGhTY29wZTo6Y3JlYXRlU3RydWN0dXJlKFZNJiB2bSwg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90bykKIHsKICAgICByZXR1
cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG8sIFR5cGVJbmZvKFdp
dGhTY29wZVR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTV2l0aFNjb3BlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNXaXRoU2NvcGUuaAkocmV2aXNpb24gMjcyODMwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNXaXRoU2NvcGUuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTYgQXBwbGUg
SW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjEgQXBw
bGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC00Myw3ICs0Myw3IEBAIHB1YmxpYzoKIAogICAgIEpTT2JqZWN0KiBvYmplY3QoKSB7
IHJldHVybiBtX29iamVjdC5nZXQoKTsgfQogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJl
bihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAK
ICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVj
dCosIEpTVmFsdWUgcHJvdG8pOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU1dyYXBwZXJPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTV3JhcHBlck9iamVjdC5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTV3JhcHBlck9iamVjdC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMjAwNiBNYWtzIE9ybG92
aWNoCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA5LCAyMDEyIEFwcGxlLCBJbmMuCisgKiAg
Q29weXJpZ2h0IChDKSAyMDA2LTIwMjEgQXBwbGUsIEluYy4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CkBAIC0yOSwxMSArMjksMTQgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIFNUQVRJQ19BU1NFUlRfSVNf
VFJJVklBTExZX0RFU1RSVUNUSUJMRShKU1dyYXBwZXJPYmplY3QpOwogCi12b2lkIEpTV3JhcHBl
ck9iamVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9y
KQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNXcmFwcGVyT2JqZWN0Ojp2aXNp
dENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0
byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1dyYXBwZXJPYmplY3QqPihjZWxsKTsKICAgICBBU1NF
UlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAgICAgQmFzZTo6dmlz
aXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxE
UkVOX1dJVEhfTU9ESUZJRVIoSlNfRVhQT1JUX1BSSVZBVEUsIEpTV3JhcHBlck9iamVjdCk7CisK
IH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNXcmFwcGVyT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNXcmFwcGVyT2JqZWN0LmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTV3JhcHBlck9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDYgKzEsNiBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDIwMDYgTWFrcyBPcmxvdmljaAotICog
IENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTY0LDcgKzY0LDcgQEAg
cHVibGljOgogcHJvdGVjdGVkOgogICAgIGV4cGxpY2l0IEpTV3JhcHBlck9iamVjdChWTSYsIFN0
cnVjdHVyZSopOwogCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgdmlzaXRDaGls
ZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU5f
V0lUSF9NT0RJRklFUihKU19FWFBPUlRfUFJJVkFURSk7CiB9OwogCiBpbmxpbmUgSlNXcmFwcGVy
T2JqZWN0OjpKU1dyYXBwZXJPYmplY3QoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0xhenlDbGFzc1N0cnVjdHVyZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTGF6eUNsYXNzU3Ry
dWN0dXJlLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvTGF6eUNsYXNzU3RydWN0dXJlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTcyLDEyICs3
MiwxNiBAQCB2b2lkIExhenlDbGFzc1N0cnVjdHVyZTo6SW5pdGlhbGl6ZXI6OnNlCiAgICAgY2xh
c3NTdHJ1Y3R1cmUubV9jb25zdHJ1Y3Rvci5zZXQodm0sIGdsb2JhbCwgY29uc3RydWN0b3IpOwog
fQogCi12b2lkIExhenlDbGFzc1N0cnVjdHVyZTo6dmlzaXQoU2xvdFZpc2l0b3ImIHZpc2l0b3Ip
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBMYXp5Q2xhc3NTdHJ1Y3R1cmU6OnZp
c2l0KFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgbV9zdHJ1Y3R1cmUudmlzaXQodmlzaXRvcik7
CiAgICAgdmlzaXRvci5hcHBlbmQobV9jb25zdHJ1Y3Rvcik7CiB9CiAKK3RlbXBsYXRlIHZvaWQg
TGF6eUNsYXNzU3RydWN0dXJlOjp2aXNpdChBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0
ZSB2b2lkIExhenlDbGFzc1N0cnVjdHVyZTo6dmlzaXQoU2xvdFZpc2l0b3ImKTsKKwogdm9pZCBM
YXp5Q2xhc3NTdHJ1Y3R1cmU6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKIHsKICAgICBv
dXQucHJpbnQoIjxzdHJ1Y3R1cmUgPSAiLCBtX3N0cnVjdHVyZSwgIiwgY29uc3RydWN0b3IgPSAi
LCBSYXdQb2ludGVyKG1fY29uc3RydWN0b3IuZ2V0KCkpLCAiPiIpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvTGF6eUNsYXNzU3RydWN0dXJlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTGF6eUNsYXNzU3RydWN0dXJlLmgJKHJldmlz
aW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0xhenlDbGFzc1N0
cnVjdHVyZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTExNyw3ICsxMTcsNyBAQCBwdWJsaWM6CiAgICAgICAg
IHJldHVybiBtX2NvbnN0cnVjdG9yLmdldCgpOwogICAgIH0KICAgICAKLSAgICB2b2lkIHZpc2l0
KFNsb3RWaXNpdG9yJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCB2aXNp
dChWaXNpdG9yJik7CiAgICAgCiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0xhenlQcm9wZXJ0eS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0xhenlQcm9wZXJ0eS5oCShy
ZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9MYXp5UHJv
cGVydHkuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTYtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEwMyw3ICsxMDMsNyBAQCBwdWJsaWM6CiAgICAg
dm9pZCBzZXRNYXlCZU51bGwoVk0mLCBjb25zdCBPd25lclR5cGUqIG93bmVyLCBFbGVtZW50VHlw
ZSopOwogICAgIHZvaWQgc2V0KFZNJiwgY29uc3QgT3duZXJUeXBlKiBvd25lciwgRWxlbWVudFR5
cGUqKTsKICAgICAKLSAgICB2b2lkIHZpc2l0KFNsb3RWaXNpdG9yJik7CisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCB2aXNpdChWaXNpdG9yJik7CiAgICAgCiAgICAgdm9pZCBk
dW1wKFByaW50U3RyZWFtJikgY29uc3Q7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9MYXp5UHJvcGVydHlJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvTGF6eVByb3BlcnR5SW5saW5lcy5oCShyZXZpc2lvbiAyNzI4
MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9MYXp5UHJvcGVydHlJbmxpbmVz
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
Ni0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtNjYsNyArNjYsOCBAQCB2b2lkIExhenlQcm9wZXJ0eTxPd25lclR5
cGUsIEVsZW1lbnRUeXBlCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE93bmVyVHlwZSwgdHlwZW5h
bWUgRWxlbWVudFR5cGU+Ci12b2lkIExhenlQcm9wZXJ0eTxPd25lclR5cGUsIEVsZW1lbnRUeXBl
Pjo6dmlzaXQoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
Pgordm9pZCBMYXp5UHJvcGVydHk8T3duZXJUeXBlLCBFbGVtZW50VHlwZT46OnZpc2l0KFZpc2l0
b3ImIHZpc2l0b3IpCiB7CiAgICAgaWYgKG1fcG9pbnRlciAmJiAhKG1fcG9pbnRlciAmIGxhenlU
YWcpKQogICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKGJpdHdpc2VfY2FzdDxFbGVt
ZW50VHlwZSo+KG1fcG9pbnRlcikpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL01vZHVsZVByb2dyYW1FeGVjdXRhYmxlLmNwcAkocmV2aXNpb24g
MjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTW9kdWxlUHJvZ3JhbUV4
ZWN1dGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAwOSwgMjAxMCwgMjAxMywgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNzksNyAr
NzksOCBAQCBhdXRvIE1vZHVsZVByb2dyYW1FeGVjdXRhYmxlOjplbnN1cmVUZW1wCiAgICAgcmV0
dXJuIGVuc3VyZVRlbXBsYXRlT2JqZWN0TWFwSW1wbChtX3RlbXBsYXRlT2JqZWN0TWFwKTsKIH0K
IAotdm9pZCBNb2R1bGVQcm9ncmFtRXhlY3V0YWJsZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNl
bGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3Zv
aWQgTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGU6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2Vs
bCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBNb2R1bGVQcm9ncmFtRXhlY3V0YWJsZSogdGhp
c09iamVjdCA9IGpzQ2FzdDxNb2R1bGVQcm9ncmFtRXhlY3V0YWJsZSo+KGNlbGwpOwogICAgIEFT
U0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTk0LDQgKzk1
LDYgQEAgdm9pZCBNb2R1bGVQcm9ncmFtRXhlY3V0YWJsZTo6dmlzaXRDaGlsZAogICAgIH0KIH0K
IAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKE1vZHVsZVByb2dyYW1FeGVjdXRhYmxlKTsKKwogfSAv
LyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Nb2R1
bGVQcm9ncmFtRXhlY3V0YWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL01vZHVsZVByb2dyYW1FeGVjdXRhYmxlLmgJKHJldmlzaW9uIDI3MjgzMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01vZHVsZVByb2dyYW1FeGVjdXRhYmxlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5
LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDA5LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC03Nyw3ICs3Nyw3IEBAIHByaXZhdGU6CiAKICAgICBNb2R1bGVQ
cm9ncmFtRXhlY3V0YWJsZShKU0dsb2JhbE9iamVjdCosIGNvbnN0IFNvdXJjZUNvZGUmKTsKIAot
ICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAg
ICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgV3JpdGVCYXJyaWVyPFVubGlua2VkTW9k
dWxlUHJvZ3JhbUNvZGVCbG9jaz4gbV91bmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2s7CiAg
ICAgV3JpdGVCYXJyaWVyPFN5bWJvbFRhYmxlPiBtX21vZHVsZUVudmlyb25tZW50U3ltYm9sVGFi
bGU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcAkocmV2
aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDExLTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDExLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC01NTgsNiArNTU4LDkgQEAgdm9pZCBPcHRpb25zOjpyZWNv
bXB1dGVEZXBlbmRlbnRPcHRpb25zKAogCiAgICAgaWYgKE9wdGlvbnM6OnVzZVByaXZhdGVTdGF0
aWNDbGFzc0ZpZWxkcygpKQogICAgICAgICBPcHRpb25zOjp1c2VQcml2YXRlQ2xhc3NGaWVsZHMo
KSA9IHRydWU7CisKKyAgICBpZiAoT3B0aW9uczo6dmVyYm9zZVZlcmlmeUdDKCkpCisgICAgICAg
IE9wdGlvbnM6OnZlcmlmeUdDKCkgPSB0cnVlOwogfQogCiBpbmxpbmUgdm9pZCogT3B0aW9uczo6
YWRkcmVzc09mT3B0aW9uKE9wdGlvbnM6OklEIGlkKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9PcHRpb25zTGlzdC5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zTGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
NjksNiArMzY5LDggQEAgSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBjYW5Vc2VKSVRDYWdlKCk7CiAg
ICAgdihCb29sLCBhbHdheXNHZW5lcmF0ZVBDVG9Db2RlT3JpZ2luTWFwLCBmYWxzZSwgTm9ybWFs
LCAiVGhpcyB3aWxsIG1ha2Ugc3VyZSB3ZSBhbHdheXMgZ2VuZXJhdGUgYSBQQ1RvQ29kZU9yaWdp
bk1hcCBmb3IgSklUZWQgY29kZS4iKSBcCiAgICAgXAogICAgIHYoRG91YmxlLCByYW5kb21JbnRl
Z3JpdHlBdWRpdFJhdGUsIDAuMDUsIE5vcm1hbCwgIlByb2JhYmlsaXR5IG9mIHJhbmRvbSBpbnRl
Z3JpdHkgYXVkaXRzIFswLjAgLSAxLjBdIikgXAorICAgIHYoQm9vbCwgdmVyaWZ5R0MsIHRydWUs
IE5vcm1hbCwgbnVsbHB0cikgXAorICAgIHYoQm9vbCwgdmVyYm9zZVZlcmlmeUdDLCBmYWxzZSwg
Tm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihCb29sLCB2ZXJpZnlIZWFwLCBmYWxzZSwgTm9ybWFs
LCBudWxscHRyKSBcCiAgICAgdihVbnNpZ25lZCwgbnVtYmVyT2ZHQ0N5Y2xlc1RvUmVjb3JkRm9y
VmVyaWZpY2F0aW9uLCAzLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICBcCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9ncmFtRXhlY3V0YWJsZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvZ3JhbUV4ZWN1dGFibGUuY3BwCShy
ZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9ncmFt
RXhlY3V0YWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDA5LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDA5LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yMDgsNyArMjA4LDggQEAgYXV0byBQ
cm9ncmFtRXhlY3V0YWJsZTo6ZW5zdXJlVGVtcGxhdGVPYgogICAgIHJldHVybiBlbnN1cmVUZW1w
bGF0ZU9iamVjdE1hcEltcGwobV90ZW1wbGF0ZU9iamVjdE1hcCk7CiB9CiAKLXZvaWQgUHJvZ3Jh
bUV4ZWN1dGFibGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlz
aXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFByb2dyYW1FeGVjdXRhYmxl
Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAg
ICAgUHJvZ3JhbUV4ZWN1dGFibGUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8UHJvZ3JhbUV4ZWN1dGFi
bGUqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGlu
Zm8oKSk7CkBAIC0yMjIsNCArMjIzLDYgQEAgdm9pZCBQcm9ncmFtRXhlY3V0YWJsZTo6dmlzaXRD
aGlsZHJlbihKUwogICAgIH0KIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKFByb2dyYW1FeGVj
dXRhYmxlKTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9Qcm9ncmFtRXhlY3V0YWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1Byb2dyYW1FeGVjdXRhYmxlLmgJKHJldmlzaW9uIDI3MjgzMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb2dyYW1FeGVjdXRhYmxlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5LTIw
MTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5
LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC04MSw3ICs4MSw3IEBAIHByaXZhdGU6CiAKICAgICBQcm9ncmFtRXhl
Y3V0YWJsZShKU0dsb2JhbE9iamVjdCosIGNvbnN0IFNvdXJjZUNvZGUmKTsKIAotICAgIHN0YXRp
YyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJF
X1ZJU0lUX0NISUxEUkVOOwogCiAgICAgV3JpdGVCYXJyaWVyPFVubGlua2VkUHJvZ3JhbUNvZGVC
bG9jaz4gbV91bmxpbmtlZFByb2dyYW1Db2RlQmxvY2s7CiAgICAgV3JpdGVCYXJyaWVyPEV4ZWN1
dGFibGVUb0NvZGVCbG9ja0VkZ2U+IG1fcHJvZ3JhbUNvZGVCbG9jazsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5TWFwSGFzaFRhYmxlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlNYXBIYXNoVGFibGUuaAko
cmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVy
dHlNYXBIYXNoVGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiAg
Q29weXJpZ2h0IChDKSAyMDA0LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogIENvcHlyaWdodCAoQykgMjAwNC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0xMzMsNyArMTMzLDcgQEAgcHVibGljOgogCiAg
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOwogICAgIHN0
YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJl
bihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAK
ICAgICBERUNMQVJFX0VYUE9SVF9JTkZPOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9Qcm9wZXJ0eVRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9Qcm9wZXJ0eVRhYmxlLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlUYWJsZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMTE4LDcgKzExOCw4IEBAIHZvaWQgUHJvcGVydHlUYWJsZTo6ZmluaXNoQ3JlYXRp
b24oVk0mIHYKICAgICB2bS5oZWFwLnJlcG9ydEV4dHJhTWVtb3J5QWxsb2NhdGVkKGRhdGFTaXpl
KCkpOwogfQogCi12b2lkIFByb3BlcnR5VGFibGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxs
LCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lk
IFByb3BlcnR5VGFibGU6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYg
dmlzaXRvcikKIHsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PFByb3BlcnR5VGFibGUq
PihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8o
KSk7CkBAIC0xMjYsNiArMTI3LDggQEAgdm9pZCBQcm9wZXJ0eVRhYmxlOjp2aXNpdENoaWxkcmVu
KEpTQ2VsbAogICAgIHZpc2l0b3IucmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKHRoaXNPYmplY3Qt
PmRhdGFTaXplKCkpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oUHJvcGVydHlUYWJsZSk7
CisKIHZvaWQgUHJvcGVydHlUYWJsZTo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCiB7CiAgICAgc3Rh
dGljX2Nhc3Q8UHJvcGVydHlUYWJsZSo+KGNlbGwpLT5Qcm9wZXJ0eVRhYmxlOjp+UHJvcGVydHlU
YWJsZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJveHlPYmplY3Qu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3h5T2Jq
ZWN0LmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvUHJveHlPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxNi0yMDIwIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIxIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTE1OCw3ICsxMTU4LDggQEAg
Ym9vbCBQcm94eU9iamVjdDo6aXNSZXZva2VkKCkgY29uc3QKICAgICByZXR1cm4gaGFuZGxlcigp
LmlzTnVsbCgpOwogfQogCi12b2lkIFByb3h5T2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCog
Y2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgor
dm9pZCBQcm94eU9iamVjdDo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9y
JiB2aXNpdG9yKQogewogICAgIFByb3h5T2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PFByb3h5
T2JqZWN0Kj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0
LCBpbmZvKCkpOwpAQCAtMTE2OCw0ICsxMTY5LDYgQEAgdm9pZCBQcm94eU9iamVjdDo6dmlzaXRD
aGlsZHJlbihKU0NlbGwqIAogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1faGFuZGxl
cik7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihQcm94eU9iamVjdCk7CisKIH0gLy8gbmFt
ZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJveHlPYmpl
Y3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm94eU9i
amVjdC5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9Qcm94eU9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTkxLDcgKzkxLDcgQEAgcHJpdmF0ZToKICAg
ICBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgSlNHbG9iYWxPYmpl
Y3QqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIERvbnRFbnVtUHJvcGVydGllc01vZGUpOwogICAgIHN0
YXRpYyBib29sIHNldFByb3RvdHlwZShKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1
ZSBwcm90b3R5cGUsIGJvb2wgc2hvdWxkVGhyb3dJZkNhbnRTZXQpOwogICAgIHN0YXRpYyBKU1Zh
bHVlIGdldFByb3RvdHlwZShKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0Kik7Ci0gICAgc3RhdGlj
IHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVf
VklTSVRfQ0hJTERSRU47CiAKICAgICBib29sIGdldE93blByb3BlcnR5U2xvdENvbW1vbihKU0ds
b2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CiAgICAgYm9vbCBwZXJm
b3JtSW50ZXJuYWxNZXRob2RHZXRPd25Qcm9wZXJ0eShKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5
TmFtZSwgUHJvcGVydHlTbG90Jik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9Qcm94eVJldm9rZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvUHJveHlSZXZva2UuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9Qcm94eVJldm9rZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBS
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIxIEFwcGxlIEluYy4gQWxsIFJpZ2h0
cyBSZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjksNyArNjks
OCBAQCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04ocGVyZm9ybVByb3h5UmV2CiAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KIAotdm9pZCBQcm94eVJldm9rZTo6
dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxh
dGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgUHJveHlSZXZva2U6OnZpc2l0Q2hpbGRyZW5JbXBs
KEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBQcm94eVJldm9rZSogdGhp
c09iamVjdCA9IGpzQ2FzdDxQcm94eVJldm9rZSo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpF
Q1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTc4LDQgKzc5LDYgQEAgdm9pZCBQ
cm94eVJldm9rZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIAogICAgIHZpc2l0b3IuYXBwZW5kKHRo
aXNPYmplY3QtPm1fcHJveHkpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oUHJveHlSZXZv
a2UpOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1Byb3h5UmV2b2tlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvUHJveHlSZXZva2UuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvUHJveHlSZXZva2UuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxOSBBcHBsZSBJbmMuIEFsbCBSaWdo
dHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCBS
aWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTUyLDcg
KzUyLDcgQEAgcHVibGljOgogICAgIH0KIAogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBQ
cm94eU9iamVjdCopOwotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xv
dFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogICAgIEpTVmFsdWUgcHJv
eHkoKSB7IHJldHVybiBtX3Byb3h5LmdldCgpOyB9CiAgICAgdm9pZCBzZXRQcm94eVRvTnVsbChW
TSYgdm0pIHsgcmV0dXJuIG1fcHJveHkuc2V0KHZtLCB0aGlzLCBqc051bGwoKSk7IH0KIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwQ2FjaGVkUmVzdWx0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBDYWNoZWRS
ZXN1bHQuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9SZWdFeHBDYWNoZWRSZXN1bHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMxLDcgKzMx
LDggQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLXZvaWQgUmVnRXhwQ2FjaGVkUmVzdWx0Ojp2aXNp
dEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0
b3I+Cit2b2lkIFJlZ0V4cENhY2hlZFJlc3VsdDo6dmlzaXRBZ2dyZWdhdGVJbXBsKFZpc2l0b3Im
IHZpc2l0b3IpCiB7CiAgICAgdmlzaXRvci5hcHBlbmQobV9sYXN0SW5wdXQpOwogICAgIHZpc2l0
b3IuYXBwZW5kKG1fbGFzdFJlZ0V4cCk7CkBAIC00Myw2ICs0NCw4IEBAIHZvaWQgUmVnRXhwQ2Fj
aGVkUmVzdWx0Ojp2aXNpdEFnZ3JlZ2F0ZSgKICAgICB9CiB9CiAKK0RFRklORV9WSVNJVF9BR0dS
RUdBVEUoUmVnRXhwQ2FjaGVkUmVzdWx0KTsKKwogSlNBcnJheSogUmVnRXhwQ2FjaGVkUmVzdWx0
OjpsYXN0UmVzdWx0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTT2JqZWN0KiBvd25l
cikKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBDYWNoZWRSZXN1bHQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBDYWNoZWRSZXN1bHQuaAkocmV2aXNp
b24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwQ2FjaGVk
UmVzdWx0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDEyLCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjUsNyArNjUsNyBAQCBwdWJsaWM6CiAgICAg
ICAgIHJldHVybiBtX3JlaWZpZWQgPyBtX3JlaWZpZWRJbnB1dC5nZXQoKSA6IG1fbGFzdElucHV0
LmdldCgpOwogICAgIH0KIAotICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImKTsK
KyAgICBERUNMQVJFX1ZJU0lUX0FHR1JFR0FURTsKIAogICAgIC8vIG1fbGFzdFJlZ0V4cCB3b3Vs
ZCBiZSBudWxscHRyIHdoZW4gUmVnRXhwQ2FjaGVkUmVzdWx0IGlzIG5vdCByZWlmaWVkLgogICAg
IC8vIElmIHdlIGZpbmQgbV9sYXN0UmVnRXhwIGlzIG51bGxwdHIsIGl0IG1lYW5zIHRoaXMgc2hv
dWxkIGhvbGQgdGhlIGVtcHR5IFJlZ0V4cC4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1JlZ0V4cEdsb2JhbERhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1JlZ0V4cEdsb2JhbERhdGEuY3BwCShyZXZpc2lvbiAyNzI4MzApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBHbG9iYWxEYXRhLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBw
bGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE5LTIwMjEg
QXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0zMCwxMSArMzAsMTQgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLXZvaWQgUmVn
RXhwR2xvYmFsRGF0YTo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1w
bGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBSZWdFeHBHbG9iYWxEYXRhOjp2aXNpdEFnZ3Jl
Z2F0ZUltcGwoVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBtX2NhY2hlZFJlc3VsdC52aXNpdEFn
Z3JlZ2F0ZSh2aXNpdG9yKTsKIH0KIAorREVGSU5FX1ZJU0lUX0FHR1JFR0FURShSZWdFeHBHbG9i
YWxEYXRhKTsKKwogSlNWYWx1ZSBSZWdFeHBHbG9iYWxEYXRhOjpnZXRCYWNrcmVmKEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIHVuc2lnbmVkIGkpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFs
T2JqZWN0LT52bSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhw
R2xvYmFsRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1JlZ0V4cEdsb2JhbERhdGEuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvUmVnRXhwR2xvYmFsRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCBSaWdodHMg
UmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMSBBcHBsZSBJbmMuIEFsbCBSaWdo
dHMgUmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQxLDcgKzQx
LDcgQEAgcHVibGljOgogICAgIHZvaWQgc2V0SW5wdXQoSlNHbG9iYWxPYmplY3QqLCBKU1N0cmlu
ZyopOwogICAgIEpTU3RyaW5nKiBpbnB1dCgpIHsgcmV0dXJuIG1fY2FjaGVkUmVzdWx0LmlucHV0
KCk7IH0KIAotICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImKTsKKyAgICBERUNM
QVJFX1ZJU0lUX0FHR1JFR0FURTsKIAogICAgIEpTVmFsdWUgZ2V0QmFja3JlZihKU0dsb2JhbE9i
amVjdCosIHVuc2lnbmVkKTsKICAgICBKU1ZhbHVlIGdldExhc3RQYXJlbihKU0dsb2JhbE9iamVj
dCopOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBPYmpl
Y3QuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9SZWdFeHBPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAq
ICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQot
ICogIENvcHlyaWdodCAoQykgMjAwMy0yMDE5IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZl
ZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAyMSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVz
ZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCkBAIC00Niw3ICs0Niw4IEBAIHZvaWQgUmVnRXhw
T2JqZWN0OjpmaW5pc2hDcmVhdGlvbihWTSYgdm0KICAgICBBU1NFUlQodHlwZSgpID09IFJlZ0V4
cE9iamVjdFR5cGUpOwogfQogCi12b2lkIFJlZ0V4cE9iamVjdDo6dmlzaXRDaGlsZHJlbihKU0Nl
bGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRv
cj4KK3ZvaWQgUmVnRXhwT2JqZWN0Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZp
c2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgUmVnRXhwT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0
PFJlZ0V4cE9iamVjdCo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhp
c09iamVjdCwgaW5mbygpKTsKQEAgLTU1LDYgKzU2LDggQEAgdm9pZCBSZWdFeHBPYmplY3Q6OnZp
c2l0Q2hpbGRyZW4oSlNDZWxsKgogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fbGFz
dEluZGV4KTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKFJlZ0V4cE9iamVjdCk7CisKIGJv
b2wgUmVnRXhwT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqIG9iamVjdCwgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJv
cGVydHlTbG90JiBzbG90KQogewogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE9iamVjdC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE9iamVjdC5oCShyZXZp
c2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBPYmpl
Y3QuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChD
KSAxOTk5LTIwMDAgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKLSAqICBDb3B5cmlnaHQg
KEMpIDIwMDMtMjAxOSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiAgQ29weXJp
Z2h0IChDKSAyMDAzLTIwMjEgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAq
ICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBH
ZW5lcmFsIFB1YmxpYwpAQCAtMTMzLDcgKzEzMyw3IEBAIHByaXZhdGU6CiAgICAgSlNfRVhQT1JU
X1BSSVZBVEUgUmVnRXhwT2JqZWN0KFZNJiwgU3RydWN0dXJlKiwgUmVnRXhwKik7CiAgICAgSlNf
RVhQT1JUX1BSSVZBVEUgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOwogCi0gICAgc3RhdGljIHZv
aWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklT
SVRfQ0hJTERSRU47CiAKICAgICBib29sIGxhc3RJbmRleElzV3JpdGFibGUoKSBjb25zdAogICAg
IHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NhbXBsaW5nUHJvZmlsZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NhbXBsaW5n
UHJvZmlsZXIuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TYW1wbGluZ1Byb2ZpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjUyLDEzICs2
NTIsMTcgQEAgdm9pZCBTYW1wbGluZ1Byb2ZpbGVyOjpwcm9jZXNzVW52ZXJpZmllZAogICAgIG1f
dW5wcm9jZXNzZWRTdGFja1RyYWNlcy5jbGVhcigpOwogfQogCi12b2lkIFNhbXBsaW5nUHJvZmls
ZXI6OnZpc2l0KFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRv
cj4KK3ZvaWQgU2FtcGxpbmdQcm9maWxlcjo6dmlzaXQoVmlzaXRvciYgdmlzaXRvcikKIHsKICAg
ICBSRUxFQVNFX0FTU0VSVChtX2xvY2suaXNMb2NrZWQoKSk7CiAgICAgZm9yIChKU0NlbGwqIGNl
bGwgOiBtX2xpdmVDZWxsUG9pbnRlcnMpCiAgICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVy
ZWQoY2VsbCk7CiB9CiAKK3RlbXBsYXRlIHZvaWQgU2FtcGxpbmdQcm9maWxlcjo6dmlzaXQoQWJz
dHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBTYW1wbGluZ1Byb2ZpbGVyOjp2aXNp
dChTbG90VmlzaXRvciYpOworCiB2b2lkIFNhbXBsaW5nUHJvZmlsZXI6OnNodXRkb3duKCkKIHsK
ICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2xvY2spOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1NhbXBsaW5nUHJvZmlsZXIuaAkocmV2aXNpb24gMjcyODMwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTE3MSw3ICsxNzEsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBub3RpY2VKU0xvY2tB
Y3F1aXNpdGlvbigpOwogICAgIHZvaWQgbm90aWNlVk1FbnRyeSgpOwogICAgIHZvaWQgc2h1dGRv
d24oKTsKLSAgICB2b2lkIHZpc2l0KFNsb3RWaXNpdG9yJik7CisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgVmlzaXRvcj4gdm9pZCB2aXNpdChWaXNpdG9yJik7CiAgICAgTG9jayYgZ2V0TG9jaygpIHsg
cmV0dXJuIG1fbG9jazsgfQogICAgIHZvaWQgc2V0VGltaW5nSW50ZXJ2YWwoU2Vjb25kcyBpbnRl
cnZhbCkgeyBtX3RpbWluZ0ludGVydmFsID0gaW50ZXJ2YWw7IH0KICAgICBKU19FWFBPUlRfUFJJ
VkFURSB2b2lkIHN0YXJ0KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
Y29wZWRBcmd1bWVudHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1Njb3BlZEFyZ3VtZW50cy5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlZEFyZ3VtZW50cy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTggQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC05OCw3ICs5OCw4IEBAIFNjb3BlZEFyZ3VtZW50cyogU2NvcGVkQXJndW1lbnRzOjpjcmVh
dGUKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi12b2lkIFNjb3BlZEFyZ3VtZW50czo6dmlzaXRD
aGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlw
ZW5hbWUgVmlzaXRvcj4KK3ZvaWQgU2NvcGVkQXJndW1lbnRzOjp2aXNpdENoaWxkcmVuSW1wbChK
U0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgU2NvcGVkQXJndW1lbnRzKiB0
aGlzT2JqZWN0ID0gc3RhdGljX2Nhc3Q8U2NvcGVkQXJndW1lbnRzKj4oY2VsbCk7CiAgICAgQVNT
RVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtMTE1LDYgKzEx
Niw4IEBAIHZvaWQgU2NvcGVkQXJndW1lbnRzOjp2aXNpdENoaWxkcmVuKEpTQ2UKICAgICB9CiB9
CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihTY29wZWRBcmd1bWVudHMpOworCiBTdHJ1Y3R1cmUq
IFNjb3BlZEFyZ3VtZW50czo6Y3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCiB7CiAgICAgcmV0dXJuIFN0cnVjdHVy
ZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oU2NvcGVkQXJn
dW1lbnRzVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVkQXJndW1lbnRzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVkQXJndW1lbnRzLmgJKHJldmlzaW9uIDI3Mjgz
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlZEFyZ3VtZW50cy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0y
MDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
NS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtNjMsOSArNjMsOSBAQCBwdWJsaWM6CiAgICAgCiAgICAgLy8gQ3Jl
YXRlcyBhbiBhcmd1bWVudHMgb2JqZWN0IGJ5IGNvcHlpbmcgdGhlIGFyZ3VtZW50cyBmcm9tIGEg
d2VsbC1kZWZpbmVkIHN0YWNrIGxvY2F0aW9uLgogICAgIHN0YXRpYyBTY29wZWRBcmd1bWVudHMq
IGNyZWF0ZUJ5Q29weWluZ0Zyb20oVk0mLCBTdHJ1Y3R1cmUqLCBSZWdpc3RlciogYXJndW1lbnRz
U3RhcnQsIHVuc2lnbmVkIHRvdGFsTGVuZ3RoLCBKU0Z1bmN0aW9uKiBjYWxsZWUsIFNjb3BlZEFy
Z3VtZW50c1RhYmxlKiwgSlNMZXhpY2FsRW52aXJvbm1lbnQqKTsKLSAgICAKLSAgICBzdGF0aWMg
dm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7Ci0gICAgCisKKyAgICBE
RUNMQVJFX1ZJU0lUX0NISUxEUkVOOworCiAgICAgdWludDMyX3QgaW50ZXJuYWxMZW5ndGgoKSBj
b25zdAogICAgIHsKICAgICAgICAgcmV0dXJuIG1fdG90YWxMZW5ndGg7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2ltcGxlVHlwZWRBcnJh
eUNvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIxIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtNjIsNyArNjIsNyBAQCBib29sIFNpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyOjppc0F0
b21pCiAgICAgcmV0dXJuIG1fYWxsb3dBdG9taWNzV2FpdDsKIH0KIAotYm9vbCBTaW1wbGVUeXBl
ZEFycmF5Q29udHJvbGxlcjo6SlNBcnJheUJ1ZmZlck93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFx
dWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIEpTQzo6U2xv
dFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCitib29sIFNpbXBsZVR5cGVk
QXJyYXlDb250cm9sbGVyOjpKU0FycmF5QnVmZmVyT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1
ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgSlNDOjpBYnN0
cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQogewogICAgIGlm
IChVTkxJS0VMWShyZWFzb24pKQogICAgICAgICAqcmVhc29uID0gIkpTQXJyYXlCdWZmZXIgaXMg
b3BhcXVlIHJvb3QiOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2ltcGxl
VHlwZWRBcnJheUNvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlci5oCShyZXZpc2lvbiAyNzI4MzAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TaW1wbGVUeXBlZEFycmF5Q29udHJv
bGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTU4LDcgKzU4LDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAg
ICBjbGFzcyBKU0FycmF5QnVmZmVyT3duZXIgZmluYWwgOiBwdWJsaWMgV2Vha0hhbmRsZU93bmVy
IHsKICAgICBwdWJsaWM6Ci0gICAgICAgIGJvb2wgaXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMo
SlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCwgU2xvdFZpc2l0b3ImLCBj
b25zdCBjaGFyKiogcmVhc29uKSBmaW5hbDsKKyAgICAgICAgYm9vbCBpc1JlYWNoYWJsZUZyb21P
cGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0LCBBYnN0
cmFjdFNsb3RWaXNpdG9yJiwgY29uc3QgY2hhcioqIHJlYXNvbikgZmluYWw7CiAgICAgICAgIHZv
aWQgZmluYWxpemUoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCkgZmlu
YWw7CiAgICAgfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU21hbGxT
dHJpbmdzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
bWFsbFN0cmluZ3MuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TbWFsbFN0cmluZ3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAxMCBBcHBsZSBJbmMuIEFsbCBSaWdodHMg
UmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAyMSBBcHBsZSBJbmMuIEFsbCBSaWdo
dHMgUmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY2LDcgKzY2
LDggQEAgdm9pZCBTbWFsbFN0cmluZ3M6OmluaXRpYWxpemVDb21tb25TdHJpbgogICAgIHNldElz
SW5pdGlhbGl6ZWQodHJ1ZSk7CiB9CiAKLXZvaWQgU21hbGxTdHJpbmdzOjp2aXNpdFN0cm9uZ1Jl
ZmVyZW5jZXMoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
Pgordm9pZCBTbWFsbFN0cmluZ3M6OnZpc2l0U3Ryb25nUmVmZXJlbmNlcyhWaXNpdG9yJiB2aXNp
dG9yKQogewogICAgIG1fbmVlZHNUb0JlVmlzaXRlZCA9IGZhbHNlOwogICAgIHZpc2l0b3IuYXBw
ZW5kVW5iYXJyaWVyZWQobV9lbXB0eVN0cmluZyk7CkBAIC04NCw2ICs4NSw5IEBAIHZvaWQgU21h
bGxTdHJpbmdzOjp2aXNpdFN0cm9uZ1JlZmVyZW5jZXMKICAgICB2aXNpdG9yLmFwcGVuZFVuYmFy
cmllcmVkKG1fb2tTdHJpbmcpOwogfQogCit0ZW1wbGF0ZSB2b2lkIFNtYWxsU3RyaW5nczo6dmlz
aXRTdHJvbmdSZWZlcmVuY2VzKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQg
U21hbGxTdHJpbmdzOjp2aXNpdFN0cm9uZ1JlZmVyZW5jZXMoU2xvdFZpc2l0b3ImKTsKKwogU21h
bGxTdHJpbmdzOjp+U21hbGxTdHJpbmdzKCkKIHsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1NtYWxsU3RyaW5ncy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1NtYWxsU3RyaW5ncy5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TbWFsbFN0cmluZ3MuaAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxOSBBcHBsZSBJbmMu
IEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAyMSBBcHBsZSBJ
bmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTUxLDcgKzUxLDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIFZNOwogY2xhc3MgSlNT
dHJpbmc7Ci1jbGFzcyBTbG90VmlzaXRvcjsKIAogc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBt
YXhTaW5nbGVDaGFyYWN0ZXJTdHJpbmcgPSAweEZGOwogCkBAIC03OCw3ICs3Nyw3IEBAIHB1Ymxp
YzoKICAgICBKU1N0cmluZyoqIHNpbmdsZUNoYXJhY3RlclN0cmluZ3MoKSB7IHJldHVybiAmbV9z
aW5nbGVDaGFyYWN0ZXJTdHJpbmdzWzBdOyB9CiAKICAgICB2b2lkIGluaXRpYWxpemVDb21tb25T
dHJpbmdzKFZNJik7Ci0gICAgdm9pZCB2aXNpdFN0cm9uZ1JlZmVyZW5jZXMoU2xvdFZpc2l0b3Im
KTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIHZpc2l0U3Ryb25nUmVmZXJl
bmNlcyhWaXNpdG9yJik7CiAKICNkZWZpbmUgSlNDX0NPTU1PTl9TVFJJTkdTX0FDQ0VTU09SX0RF
RklOSVRJT04obmFtZSkgXAogICAgIEpTU3RyaW5nKiBuYW1lIyNTdHJpbmcoKSBjb25zdCAgICAg
ICAgICAgICAgICAgICBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TcGFy
c2VBcnJheVZhbHVlTWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TcGFyc2VBcnJheVZhbHVlTWFwLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3BhcnNlQXJyYXlWYWx1ZU1hcC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLTIw
MjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0yMTAsNyArMjEwLDggQEAgSlNWYWx1ZSBTcGFyc2VBcnJheUVudHJ5Ojpn
ZXROb25TcGFyc2VNbwogICAgIHJldHVybiBCYXNlOjpnZXQoKTsKIH0KIAotdm9pZCBTcGFyc2VB
cnJheVZhbHVlTWFwOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZp
c2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBTcGFyc2VBcnJheVZhbHVl
TWFwOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7
CiAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCogdGhpc09iamVjdCA9IGpzQ2FzdDxTcGFyc2VBcnJh
eVZhbHVlTWFwKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2Jq
ZWN0LCBpbmZvKCkpOwpAQCAtMjIzLDUgKzIyNCw3IEBAIHZvaWQgU3BhcnNlQXJyYXlWYWx1ZU1h
cDo6dmlzaXRDaGlsZHJlbigKICAgICB2aXNpdG9yLnJlcG9ydEV4dHJhTWVtb3J5VmlzaXRlZCh0
aGlzT2JqZWN0LT5tX3JlcG9ydGVkQ2FwYWNpdHkgKiBzaXplb2YoTWFwOjpLZXlWYWx1ZVBhaXJU
eXBlKSk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihTcGFyc2VBcnJheVZhbHVlTWFwKTsK
KwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1NwYXJzZUFycmF5VmFsdWVNYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TcGFyc2VBcnJheVZhbHVlTWFwLmgJKHJldmlzaW9uIDI3MjgzMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NwYXJzZUFycmF5VmFsdWVNYXAuaAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAx
OSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEt
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTExNSw3ICsxMTUsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgc3RhdGlj
IFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVl
IHByb3RvdHlwZSk7CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNs
b3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIGJvb2wgc3Bh
cnNlTW9kZSgpCiAgICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3Rh
Y2tGcmFtZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U3RhY2tGcmFtZS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1N0YWNrRnJhbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTQxLDEzICsxNDEs
NSBAQCBTdHJpbmcgU3RhY2tGcmFtZTo6dG9TdHJpbmcoVk0mIHZtKSBjb25zCiAgICAgcmV0dXJu
IHRyYWNlQnVpbGQudG9TdHJpbmcoKS5pbXBsKCk7CiB9CiAKLXZvaWQgU3RhY2tGcmFtZTo6dmlz
aXRDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKLXsKLSAgICBpZiAobV9jYWxsZWUpCi0g
ICAgICAgIHZpc2l0b3IuYXBwZW5kKG1fY2FsbGVlKTsKLSAgICBpZiAobV9jb2RlQmxvY2spCi0g
ICAgICAgIHZpc2l0b3IuYXBwZW5kKG1fY29kZUJsb2NrKTsKLX0KLQogfSAvLyBuYW1lc3BhY2Ug
SlNDCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0YWNrRnJhbWUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdGFja0ZyYW1lLmgJ
KHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0YWNr
RnJhbWUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2LDYgKzI2LDcgQEAKICNwcmFnbWEgb25jZQog
CiAjaW5jbHVkZSAiSGVhcC5oIgorI2luY2x1ZGUgIlNsb3RWaXNpdG9yTWFjcm9zLmgiCiAjaW5j
bHVkZSAiVk0uaCIKICNpbmNsdWRlICJXYXNtSW5kZXhPck5hbWUuaCIKICNpbmNsdWRlICJXcml0
ZUJhcnJpZXIuaCIKQEAgLTM1LDcgKzM2LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIENv
ZGVCbG9jazsKIGNsYXNzIEpTT2JqZWN0OwotY2xhc3MgU2xvdFZpc2l0b3I7CiAKIGNsYXNzIFN0
YWNrRnJhbWUgewogcHVibGljOgpAQCAtNTcsOCArNTcsMTYgQEAgcHVibGljOgogICAgICAgICBB
U1NFUlQoaGFzQnl0ZWNvZGVJbmRleCgpKTsKICAgICAgICAgcmV0dXJuIG1fYnl0ZWNvZGVJbmRl
eDsKICAgICB9Ci0gICAgCi0gICAgdm9pZCB2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CisK
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgorICAgIHZvaWQgdmlzaXRDaGlsZHJlbihW
aXNpdG9yJiB2aXNpdG9yKQorICAgIHsKKyAgICAgICAgaWYgKG1fY2FsbGVlKQorICAgICAgICAg
ICAgdmlzaXRvci5hcHBlbmQobV9jYWxsZWUpOworICAgICAgICBpZiAobV9jb2RlQmxvY2spCisg
ICAgICAgICAgICB2aXNpdG9yLmFwcGVuZChtX2NvZGVCbG9jayk7CisgICAgfQorCiAgICAgYm9v
bCBpc01hcmtlZChWTSYgdm0pIGNvbnN0IHsgcmV0dXJuICghbV9jYWxsZWUgfHwgdm0uaGVhcC5p
c01hcmtlZChtX2NhbGxlZS5nZXQoKSkpICYmICghbV9jb2RlQmxvY2sgfHwgdm0uaGVhcC5pc01h
cmtlZChtX2NvZGVCbG9jay5nZXQoKSkpOyB9CiAKIHByaXZhdGU6CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTkgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDIwIEFsZXhl
eSBTaHZheWthIDxzaHZhaWthbGVzaEBnbWFpbC5jb20+LgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAt
MTI2OCw3ICsxMjY4LDggQEAgdm9pZCBTdHJ1Y3R1cmU6OmRpZFRyYW5zaXRpb25Gcm9tVGhpc1N0
cgogICAgICAgICBtX3RyYW5zaXRpb25XYXRjaHBvaW50U2V0LmZpcmVBbGwodm0oKSwgU3RydWN0
dXJlRmlyZURldGFpbCh0aGlzKSk7CiB9CiAKLXZvaWQgU3RydWN0dXJlOjp2aXNpdENoaWxkcmVu
KEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPgordm9pZCBTdHJ1Y3R1cmU6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwg
VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBTdHJ1Y3R1cmUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8
U3RydWN0dXJlKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2Jq
ZWN0LCBpbmZvKCkpOwpAQCAtMTI5MCwzMiArMTI5MSwzOCBAQCB2b2lkIFN0cnVjdHVyZTo6dmlz
aXRDaGlsZHJlbihKU0NlbGwqIGNlCiAgICAgICAgIC8vIE5PVEU6IFRoaXMgY2FuIGludGVybGVh
dmUgaW4gcGluKCksIGluIHdoaWNoIGNhc2UgaXQgbWF5IHNlZSBhIG51bGwgcHJvcGVydHkgdGFi
bGUuCiAgICAgICAgIC8vIFRoYXQncyBmaW5lLCBiZWNhdXNlIHRoZW4gdGhlIGJhcnJpZXIgd2ls
bCBmaXJlIGFuZCB3ZSB3aWxsIHNjYW4gdGhpcyBhZ2Fpbi4KICAgICAgICAgdmlzaXRvci5hcHBl
bmQodGhpc09iamVjdC0+bV9wcm9wZXJ0eVRhYmxlVW5zYWZlKTsKLSAgICB9IGVsc2UgaWYgKHZp
c2l0b3IuaXNBbmFseXppbmdIZWFwKCkpCisgICAgfSBlbHNlIGlmICh2aXNpdG9yLnZtKCkuaXNB
bmFseXppbmdIZWFwKCkpCiAgICAgICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fcHJv
cGVydHlUYWJsZVVuc2FmZSk7CiAgICAgZWxzZSBpZiAodGhpc09iamVjdC0+bV9wcm9wZXJ0eVRh
YmxlVW5zYWZlKQogICAgICAgICB0aGlzT2JqZWN0LT5tX3Byb3BlcnR5VGFibGVVbnNhZmUuY2xl
YXIoKTsKIH0KIAotYm9vbCBTdHJ1Y3R1cmU6OmlzQ2hlYXBEdXJpbmdHQyhWTSYgdm0pCitERUZJ
TkVfVklTSVRfQ0hJTERSRU4oU3RydWN0dXJlKTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRv
cj4KK0FMV0FZU19JTkxJTkUgYm9vbCBTdHJ1Y3R1cmU6OmlzQ2hlYXBEdXJpbmdHQyhWaXNpdG9y
JiB2aXNpdG9yKQogewogICAgIC8vIEZJWE1FOiBXZSBjb3VsZCBtYWtlIHRoaXMgZXZlbiBzYWZl
ciBieSByZXR1cm5pbmcgZmFsc2UgaWYgdGhpcyBzdHJ1Y3R1cmUncyBwcm9wZXJ0eSB0YWJsZQog
ICAgIC8vIGhhcyBhbnkgbGFyZ2UgcHJvcGVydHkgbmFtZXMuCiAgICAgLy8gaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NzMzNAogICAgIAotICAgIHJldHVybiAoIW1f
Z2xvYmFsT2JqZWN0IHx8IHZtLmhlYXAuaXNNYXJrZWQobV9nbG9iYWxPYmplY3QuZ2V0KCkpKQot
ICAgICAgICAmJiAoaGFzUG9seVByb3RvKCkgfHwgIXN0b3JlZFByb3RvdHlwZU9iamVjdCgpIHx8
IHZtLmhlYXAuaXNNYXJrZWQoc3RvcmVkUHJvdG90eXBlT2JqZWN0KCkpKTsKKyAgICByZXR1cm4g
KCFtX2dsb2JhbE9iamVjdCB8fCB2aXNpdG9yLmlzTWFya2VkKG1fZ2xvYmFsT2JqZWN0LmdldCgp
KSkKKyAgICAgICAgJiYgKGhhc1BvbHlQcm90bygpIHx8ICFzdG9yZWRQcm90b3R5cGVPYmplY3Qo
KSB8fCB2aXNpdG9yLmlzTWFya2VkKHN0b3JlZFByb3RvdHlwZU9iamVjdCgpKSk7CiB9CiAKLWJv
b2wgU3RydWN0dXJlOjptYXJrSWZDaGVhcChTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRl
PHR5cGVuYW1lIFZpc2l0b3I+Citib29sIFN0cnVjdHVyZTo6bWFya0lmQ2hlYXAoVmlzaXRvciYg
dmlzaXRvcikKIHsKLSAgICBWTSYgdm0gPSB2aXNpdG9yLnZtKCk7Ci0gICAgaWYgKCFpc0NoZWFw
RHVyaW5nR0Modm0pKQotICAgICAgICByZXR1cm4gdm0uaGVhcC5pc01hcmtlZCh0aGlzKTsKLSAg
ICAKKyAgICBpZiAoIWlzQ2hlYXBEdXJpbmdHQyh2aXNpdG9yKSkKKyAgICAgICAgcmV0dXJuIHZp
c2l0b3IuaXNNYXJrZWQodGhpcyk7CisKICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKHRo
aXMpOwogICAgIHJldHVybiB0cnVlOwogfQogCit0ZW1wbGF0ZSBib29sIFN0cnVjdHVyZTo6bWFy
a0lmQ2hlYXAoQWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgYm9vbCBTdHJ1Y3R1cmU6
Om1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJik7CisKIFJlZjxTdHJ1Y3R1cmVTaGFwZT4gU3RydWN0
dXJlOjp0b1N0cnVjdHVyZVNoYXBlKEpTVmFsdWUgdmFsdWUsIGJvb2wmIHNhd1BvbHlQcm90b1N0
cnVjdHVyZSkKIHsKICAgICBSZWY8U3RydWN0dXJlU2hhcGU+IGJhc2VTaGFwZSA9IFN0cnVjdHVy
ZVNoYXBlOjpjcmVhdGUoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0
cnVjdHVyZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0
cnVjdHVyZS5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TdHJ1Y3R1cmUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDgtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTYwLDcgKzYwLDYgQEAgY2xhc3Mg
UHJvcGVydHlOYW1lQXJyYXlEYXRhOwogY2xhc3MgUHJvcGVydHlUYWJsZTsKIGNsYXNzIFN0cnVj
dHVyZUNoYWluOwogY2xhc3MgU3RydWN0dXJlU2hhcGU7Ci1jbGFzcyBTbG90VmlzaXRvcjsKIGNs
YXNzIEpTU3RyaW5nOwogc3RydWN0IER1bXBDb250ZXh0Owogc3RydWN0IEhhc2hUYWJsZTsKQEAg
LTMxMCw3ICszMDksNyBAQCBwdWJsaWM6CiAgICAgSlNWYWx1ZSBwcm90b3R5cGVGb3JMb29rdXAo
SlNHbG9iYWxPYmplY3QqLCBKU0NlbGwqIGJhc2UpIGNvbnN0OwogICAgIFN0cnVjdHVyZUNoYWlu
KiBwcm90b3R5cGVDaGFpbihWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNPYmplY3QqIGJhc2UpIGNv
bnN0OwogICAgIFN0cnVjdHVyZUNoYWluKiBwcm90b3R5cGVDaGFpbihKU0dsb2JhbE9iamVjdCos
IEpTT2JqZWN0KiBiYXNlKSBjb25zdDsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpT
Q2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKICAgICAK
ICAgICAvLyBBIFN0cnVjdHVyZSBpcyBjaGVhcCB0byBtYXJrIGR1cmluZyBHQyBpZiBkb2luZyBz
byB3b3VsZCBvbmx5IGFkZCBhIHNtYWxsIGFuZCBib3VuZGVkIGFtb3VudAogICAgIC8vIHRvIG91
ciBoZWFwIGZvb3RwcmludC4gRm9yIGV4YW1wbGUsIGlmIHRoZSBzdHJ1Y3R1cmUgcmVmZXJzIHRv
IGEgZ2xvYmFsIG9iamVjdCB0aGF0IGlzIG5vdApAQCAtMzE4LDEwICszMTcsMTAgQEAgcHVibGlj
OgogICAgIC8vIGluY3JlYXNlIGluIGZvb3RwcmludCBiZWNhdXNlIG5vIG90aGVyIG9iamVjdCBy
ZWZlcnMgdG8gdGhhdCBnbG9iYWwgb2JqZWN0LiBUaGlzIG1ldGhvZAogICAgIC8vIHJldHVybnMg
dHJ1ZSBpZiBhbGwgdXNlci1jb250cm9sbGVkIChhbmQgaGVuY2UgdW5ib3VuZGVkIGluIHNpemUp
IG9iamVjdHMgcmVmZXJlbmNlZCBmcm9tIHRoZQogICAgIC8vIFN0cnVjdHVyZSBhcmUgYWxyZWFk
eSBtYXJrZWQuCi0gICAgYm9vbCBpc0NoZWFwRHVyaW5nR0MoVk0mKTsKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBWaXNpdG9yPiBib29sIGlzQ2hlYXBEdXJpbmdHQyhWaXNpdG9yJik7CiAgICAgCiAg
ICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoaXMgc3RydWN0dXJlIGlzIG5vdyBtYXJrZWQuCi0gICAg
Ym9vbCBtYXJrSWZDaGVhcChTbG90VmlzaXRvciYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZp
c2l0b3I+IGJvb2wgbWFya0lmQ2hlYXAoVmlzaXRvciYpOwogICAgIAogICAgIGJvb2wgaGFzUmFy
ZURhdGEoKSBjb25zdAogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1N0cnVjdHVyZUNoYWluLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TdHJ1Y3R1cmVDaGFpbi5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUNoYWluLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02
Niw3ICs2Niw4IEBAIHZvaWQgU3RydWN0dXJlQ2hhaW46OmZpbmlzaENyZWF0aW9uKFZNJiAKICAg
ICB9CiB9CiAKLXZvaWQgU3RydWN0dXJlQ2hhaW46OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxs
LCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lk
IFN0cnVjdHVyZUNoYWluOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3Im
IHZpc2l0b3IpCiB7CiAgICAgU3RydWN0dXJlQ2hhaW4qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8U3Ry
dWN0dXJlQ2hhaW4qPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNP
YmplY3QsIGluZm8oKSk7CkBAIC04MCw0ICs4MSw2IEBAIHZvaWQgU3RydWN0dXJlQ2hhaW46OnZp
c2l0Q2hpbGRyZW4oSlNDZWwKICAgICB9CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihTdHJ1
Y3R1cmVDaGFpbik7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlQ2hhaW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVDaGFpbi5oCShyZXZpc2lvbiAyNzI4MzApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVDaGFpbi5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOC0yMDE5IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtNTEsNyArNTEsNyBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgU3RydWN0dXJl
Q2hhaW4qIGNyZWF0ZShWTSYsIEpTT2JqZWN0Kik7CiAgICAgU3RydWN0dXJlSUQqIGhlYWQoKSB7
IHJldHVybiBtX3ZlY3Rvci5nZXQoKTsgfQotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4o
SlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAg
ICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCiAgICAgewpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlUmFyZURhdGEuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZVJhcmVEYXRhLmNwcAko
cmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0
dXJlUmFyZURhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjcsNyArNjcsOCBAQCBTdHJ1Y3R1
cmVSYXJlRGF0YTo6U3RydWN0dXJlUmFyZURhdGEoVk0mCiAgICAgICAgIG1fcHJldmlvdXMuc2V0
KHZtLCB0aGlzLCBwcmV2aW91cyk7CiB9CiAKLXZvaWQgU3RydWN0dXJlUmFyZURhdGE6OnZpc2l0
Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5
cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFN0cnVjdHVyZVJhcmVEYXRhOjp2aXNpdENoaWxkcmVuSW1w
bChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgU3RydWN0dXJlUmFyZURh
dGEqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8U3RydWN0dXJlUmFyZURhdGEqPihjZWxsKTsKICAgICBB
U1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC04Niw2ICs4
Nyw4IEBAIHZvaWQgU3RydWN0dXJlUmFyZURhdGE6OnZpc2l0Q2hpbGRyZW4oSlMKICAgICB9CiB9
CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihTdHJ1Y3R1cmVSYXJlRGF0YSk7CisKIC8vIC0tLS0t
LS0tLS0tIENhY2hlZCBzcGVjaWFsIHByb3BlcnRpZXMgaGVscGVyIHdhdGNocG9pbnQgY2xhc3Nl
cyAtLS0tLS0tLS0tLQogCiBjbGFzcyBDYWNoZWRTcGVjaWFsUHJvcGVydHlBZGFwdGl2ZUluZmVy
cmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQgZmluYWwgOiBwdWJsaWMgQWRhcHRpdmVJbmZlcnJl
ZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50QmFzZSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TdHJ1Y3R1cmVSYXJlRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZVJhcmVEYXRhLmgJKHJldmlzaW9uIDI3MjgzMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZVJhcmVEYXRhLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC02OCw3ICs2OCw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgbmVlZHNEZXN0cnVjdGlvbiA9IHRydWU7CiAgICAgc3RhdGljIHZvaWQgZGVzdHJv
eShKU0NlbGwqKTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xv
dFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgc3RhdGljIFN0
cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlIHBy
b3RvdHlwZSk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJvbFRh
YmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TeW1i
b2xUYWJsZS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1N5bWJvbFRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTkyLDcgKzkyLDggQEAg
dm9pZCBTeW1ib2xUYWJsZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQogICAgIEJhc2U6OmZpbmlz
aENyZWF0aW9uKHZtKTsKIH0KIAotdm9pZCBTeW1ib2xUYWJsZTo6dmlzaXRDaGlsZHJlbihKU0Nl
bGwqIHRoaXNDZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZp
c2l0b3I+Cit2b2lkIFN5bWJvbFRhYmxlOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIHRoaXND
ZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFN5bWJvbFRhYmxlKiB0aGlzU3ltYm9sVGFi
bGUgPSBqc0Nhc3Q8U3ltYm9sVGFibGUqPih0aGlzQ2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVD
VF9JTkhFUklUUyh0aGlzU3ltYm9sVGFibGUsIGluZm8oKSk7CkBAIC0xMDgsNiArMTA5LDggQEAg
dm9pZCBTeW1ib2xUYWJsZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIAogICAgIHRoaXNTeW1ib2xU
YWJsZS0+bV9sb2NhbFRvRW50cnkgPSBudWxscHRyOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERS
RU4oU3ltYm9sVGFibGUpOworCiBjb25zdCBTeW1ib2xUYWJsZTo6TG9jYWxUb0VudHJ5VmVjJiBT
eW1ib2xUYWJsZTo6bG9jYWxUb0VudHJ5KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYpCiB7CiAg
ICAgaWYgKFVOTElLRUxZKCFtX2xvY2FsVG9FbnRyeSkpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1N5bWJvbFRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFibGUuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFibGUuaAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAyMCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAyMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTczMyw3ICs3MzMsNyBAQCBwdWJsaWM6CiAgICAgICAgIG1fc2luZ2xldG9uLm5vdGlmeVdy
aXRlKHZtLCB0aGlzLCBzY29wZSwgcmVhc29uKTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCB2
aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9D
SElMRFJFTjsKIAogICAgIERFQ0xBUkVfRVhQT1JUX0lORk87CiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1R5cGVQcm9maWxlckxvZy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZVByb2ZpbGVyTG9nLmNwcAkocmV2aXNpb24g
MjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZVByb2ZpbGVyTG9n
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTQtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTQtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEyNCw3ICsxMjQsOSBAQCB2b2lkIFR5cGVQcm9maWxl
ckxvZzo6cHJvY2Vzc0xvZ0VudHJpZXMoCiAgICAgfQogfQogCi12b2lkIFR5cGVQcm9maWxlckxv
Zzo6dmlzaXQoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvLyBXZSBkb24ndCBuZWVkIGEgU2xvdFZp
c2l0b3IgdmVyc2lvbiBvZiB0aGlzIGJlY2F1c2UgVHlwZVByb2ZpbGVyTG9nIGlzIG9ubHkgdXNl
ZCBieQorLy8gZGV2IHRvb2xzLCBhbmQgaXMgdGhlcmVmb3JlIG5vdCBvbiB0aGUgY3JpdGljYWwg
cGF0aCBmb3IgcGVyZm9ybWFuY2UuCit2b2lkIFR5cGVQcm9maWxlckxvZzo6dmlzaXQoQWJzdHJh
Y3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBmb3IgKExvZ0VudHJ5KiBlbnRyeSA9IG1f
bG9nU3RhcnRQdHI7IGVudHJ5ICE9IG1fY3VycmVudExvZ0VudHJ5UHRyOyArK2VudHJ5KSB7CiAg
ICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQoZW50cnktPnZhbHVlKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVQcm9maWxlckxvZy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVQcm9maWxlckxvZy5oCShyZXZp
c2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlUHJvZmls
ZXJMb2cuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE0LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0zMyw2ICszMyw3IEBACiAKIG5hbWVzcGFjZSBKU0Mgewog
CitjbGFzcyBBYnN0cmFjdFNsb3RWaXNpdG9yOwogY2xhc3MgVHlwZUxvY2F0aW9uOwogCiBjbGFz
cyBUeXBlUHJvZmlsZXJMb2cgewpAQCAtNTksNyArNjAsNyBAQCBwdWJsaWM6CiAgICAgSlNfRVhQ
T1JUX1BSSVZBVEUgdm9pZCBwcm9jZXNzTG9nRW50cmllcyhWTSYsIGNvbnN0IFN0cmluZyYpOwog
ICAgIExvZ0VudHJ5KiBsb2dFbmRQdHIoKSBjb25zdCB7IHJldHVybiBtX2xvZ0VuZFB0cjsgfQog
Ci0gICAgdm9pZCB2aXNpdChTbG90VmlzaXRvciYpOworICAgIHZvaWQgdmlzaXQoQWJzdHJhY3RT
bG90VmlzaXRvciYpOwogCiAgICAgc3RhdGljIHB0cmRpZmZfdCBsb2dTdGFydE9mZnNldCgpIHsg
cmV0dXJuIE9CSkVDVF9PRkZTRVRPRihUeXBlUHJvZmlsZXJMb2csIG1fbG9nU3RhcnRQdHIpOyB9
CiAgICAgc3RhdGljIHB0cmRpZmZfdCBjdXJyZW50TG9nRW50cnlPZmZzZXQoKSB7IHJldHVybiBP
QkpFQ1RfT0ZGU0VUT0YoVHlwZVByb2ZpbGVyTG9nLCBtX2N1cnJlbnRMb2dFbnRyeVB0cik7IH0K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAkocmV2aXNpb24gMjcyODMwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAyMCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAyMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEy
MSw2ICsxMjEsNyBAQCBjbGFzcyBGYXN0TWFsbG9jQWxpZ25lZE1lbW9yeUFsbG9jYXRvcjsKIGNs
YXNzIEdpZ2FjYWdlQWxpZ25lZE1lbW9yeUFsbG9jYXRvcjsKIGNsYXNzIEhhbmRsZVN0YWNrOwog
Y2xhc3MgSGFzT3duUHJvcGVydHlDYWNoZTsKK2NsYXNzIEhlYXBBbmFseXplcjsKIGNsYXNzIEhl
YXBQcm9maWxlcjsKIGNsYXNzIElkZW50aWZpZXI7CiBjbGFzcyBJbnRlcnByZXRlcjsKQEAgLTMx
MCw2ICszMTEsMTAgQEAgcHVibGljOgogICAgIEhlYXBQcm9maWxlciogaGVhcFByb2ZpbGVyKCkg
Y29uc3QgeyByZXR1cm4gbV9oZWFwUHJvZmlsZXIuZ2V0KCk7IH0KICAgICBKU19FWFBPUlRfUFJJ
VkFURSBIZWFwUHJvZmlsZXImIGVuc3VyZUhlYXBQcm9maWxlcigpOwogCisgICAgYm9vbCBpc0Fu
YWx5emluZ0hlYXAoKSBjb25zdCB7IHJldHVybiBtX2FjdGl2ZUhlYXBBbmFseXplcjsgfQorICAg
IEhlYXBBbmFseXplciogYWN0aXZlSGVhcEFuYWx5emVyKCkgY29uc3QgeyByZXR1cm4gbV9hY3Rp
dmVIZWFwQW5hbHl6ZXI7IH0KKyAgICB2b2lkIHNldEFjdGl2ZUhlYXBBbmFseXplcihIZWFwQW5h
bHl6ZXIqIGFuYWx5emVyKSB7IG1fYWN0aXZlSGVhcEFuYWx5emVyID0gYW5hbHl6ZXI7IH0KKwog
I2lmIEVOQUJMRShTQU1QTElOR19QUk9GSUxFUikKICAgICBTYW1wbGluZ1Byb2ZpbGVyKiBzYW1w
bGluZ1Byb2ZpbGVyKCkgeyByZXR1cm4gbV9zYW1wbGluZ1Byb2ZpbGVyLmdldCgpOyB9CiAgICAg
SlNfRVhQT1JUX1BSSVZBVEUgU2FtcGxpbmdQcm9maWxlciYgZW5zdXJlU2FtcGxpbmdQcm9maWxl
cihSZWY8U3RvcHdhdGNoPiYmKTsKQEAgLTExOTUsOSArMTIwMCwxMCBAQCBwdWJsaWM6CiAgICAg
Ym9vbCBkaWRFbnRlclZNIHsgZmFsc2UgfTsKIHByaXZhdGU6CiAgICAgYm9vbCBtX2ZhaWxOZXh0
TmV3Q29kZUJsb2NrIHsgZmFsc2UgfTsKLSAgICBEZWxldGVQcm9wZXJ0eU1vZGUgbV9kZWxldGVQ
cm9wZXJ0eU1vZGUgeyBEZWxldGVQcm9wZXJ0eU1vZGU6OkRlZmF1bHQgfTsKICAgICBib29sIG1f
Z2xvYmFsQ29uc3RSZWRlY2xhcmF0aW9uU2hvdWxkVGhyb3cgeyB0cnVlIH07CiAgICAgYm9vbCBt
X3Nob3VsZEJ1aWxkUENUb0NvZGVPcmlnaW5NYXBwaW5nIHsgZmFsc2UgfTsKKyAgICBEZWxldGVQ
cm9wZXJ0eU1vZGUgbV9kZWxldGVQcm9wZXJ0eU1vZGUgeyBEZWxldGVQcm9wZXJ0eU1vZGU6OkRl
ZmF1bHQgfTsKKyAgICBIZWFwQW5hbHl6ZXIqIG1fYWN0aXZlSGVhcEFuYWx5emVyIHsgbnVsbHB0
ciB9OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxDb2RlQ2FjaGU+IG1fY29kZUNhY2hlOwogICAgIHN0
ZDo6dW5pcXVlX3B0cjxJbnRsQ2FjaGU+IG1faW50bENhY2hlOwogICAgIHN0ZDo6dW5pcXVlX3B0
cjxCdWlsdGluRXhlY3V0YWJsZXM+IG1fYnVpbHRpbkV4ZWN1dGFibGVzOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha01hcEltcGwuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtNYXBJbXBsLmNwcAkocmV2aXNpb24gMjcy
ODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha01hcEltcGwuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTcg
WXVzdWtlIFN1enVraSA8dXRhdGFuZS50ZWFAZ21haWwuY29tPi4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
QEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlICJXZWFrTWFwSW1wbC5oIgogCiAjaW5jbHVkZSAi
QXV4aWxpYXJ5QmFycmllcklubGluZXMuaCIKKyNpbmNsdWRlICJTbG90VmlzaXRvcklubGluZXMu
aCIKICNpbmNsdWRlICJTdHJ1Y3R1cmVJbmxpbmVzLmgiCiAjaW5jbHVkZSAiV2Vha01hcEltcGxJ
bmxpbmVzLmgiCiAKQEAgLTM5LDggKzQwLDkgQEAgdm9pZCBXZWFrTWFwSW1wbDxXZWFrTWFwQnVj
a2V0Pjo6ZGVzdHJveQogICAgIHN0YXRpY19jYXN0PFdlYWtNYXBJbXBsKj4oY2VsbCktPn5XZWFr
TWFwSW1wbCgpOwogfQogCi10ZW1wbGF0ZSA8dHlwZW5hbWUgV2Vha01hcEJ1Y2tldD4KLXZvaWQg
V2Vha01hcEltcGw8V2Vha01hcEJ1Y2tldD46OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBT
bG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFdlYWtNYXBCdWNrZXQ+Cit0
ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBXZWFrTWFwSW1wbDxXZWFrTWFwQnVja2V0
Pjo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewog
ICAgIFdlYWtNYXBJbXBsKiB0aGlzT2JqZWN0ID0ganNDYXN0PFdlYWtNYXBJbXBsKj4oY2VsbCk7
CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAt
NDgsNiArNTAsOCBAQCB2b2lkIFdlYWtNYXBJbXBsPFdlYWtNYXBCdWNrZXQ+Ojp2aXNpdENoCiAg
ICAgdmlzaXRvci5yZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQodGhpc09iamVjdC0+bV9jYXBhY2l0
eSAqIHNpemVvZihXZWFrTWFwQnVja2V0KSk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTl9X
SVRIX01PRElGSUVSKHRlbXBsYXRlPHR5cGVuYW1lIFdlYWtNYXBCdWNrZXQ+LCBXZWFrTWFwSW1w
bDxXZWFrTWFwQnVja2V0Pik7CisKIHRlbXBsYXRlIDx0eXBlbmFtZSBXZWFrTWFwQnVja2V0Pgog
c2l6ZV90IFdlYWtNYXBJbXBsPFdlYWtNYXBCdWNrZXQ+Ojplc3RpbWF0ZWRTaXplKEpTQ2VsbCog
Y2VsbCwgVk0mIHZtKQogewpAQCAtNTYsMTUgKzYwLDI1IEBAIHNpemVfdCBXZWFrTWFwSW1wbDxX
ZWFrTWFwQnVja2V0Pjo6ZXN0aW0KIH0KIAogdGVtcGxhdGUgPD4KLXZvaWQgV2Vha01hcEltcGw8
V2Vha01hcEJ1Y2tldDxXZWFrTWFwQnVja2V0RGF0YUtleT4+Ojp2aXNpdE91dHB1dENvbnN0cmFp
bnRzKEpTQ2VsbCosIFNsb3RWaXNpdG9yJikKK3RlbXBsYXRlIDw+Cit2b2lkIFdlYWtNYXBJbXBs
PFdlYWtNYXBCdWNrZXQ8V2Vha01hcEJ1Y2tldERhdGFLZXk+Pjo6dmlzaXRPdXRwdXRDb25zdHJh
aW50cyhKU0NlbGwqLCBBYnN0cmFjdFNsb3RWaXNpdG9yJikKIHsKICAgICAvLyBPbmx5IEpTV2Vh
a01hcCBuZWVkcyB0byBoYXJ2ZXN0IHZhbHVlIHJlZmVyZW5jZXMKIH0KIAogdGVtcGxhdGUgPD4K
LXZvaWQgV2Vha01hcEltcGw8V2Vha01hcEJ1Y2tldDxXZWFrTWFwQnVja2V0RGF0YUtleVZhbHVl
Pj46OnZpc2l0T3V0cHV0Q29uc3RyYWludHMoSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlz
aXRvcikKK3RlbXBsYXRlIDw+Cit2b2lkIFdlYWtNYXBJbXBsPFdlYWtNYXBCdWNrZXQ8V2Vha01h
cEJ1Y2tldERhdGFLZXk+Pjo6dmlzaXRPdXRwdXRDb25zdHJhaW50cyhKU0NlbGwqLCBTbG90Vmlz
aXRvciYpCiB7Ci0gICAgVk0mIHZtID0gdmlzaXRvci52bSgpOworICAgIC8vIE9ubHkgSlNXZWFr
TWFwIG5lZWRzIHRvIGhhcnZlc3QgdmFsdWUgcmVmZXJlbmNlcworfQorCit0ZW1wbGF0ZTx0eXBl
bmFtZSBCdWNrZXRUeXBlPgordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK0FMV0FZU19JTkxJ
TkUgdm9pZCBXZWFrTWFwSW1wbDxCdWNrZXRUeXBlPjo6dmlzaXRPdXRwdXRDb25zdHJhaW50cyhK
U0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgc3RhdGljX2Fzc2VydChzdGQ6
OmlzX3NhbWU8QnVja2V0VHlwZSwgV2Vha01hcEJ1Y2tldDxXZWFrTWFwQnVja2V0RGF0YUtleVZh
bHVlPj46OnZhbHVlKTsKKwogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8V2Vha01hcElt
cGwqPihjZWxsKTsKICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKHRoaXNPYmplY3QtPmNlbGxM
b2NrKCkpOwogICAgIGF1dG8qIGJ1ZmZlciA9IHRoaXNPYmplY3QtPmJ1ZmZlcigpOwpAQCAtNzIs
MTIgKzg2LDE1IEBAIHZvaWQgV2Vha01hcEltcGw8V2Vha01hcEJ1Y2tldDxXZWFrTWFwQnUKICAg
ICAgICAgYXV0byogYnVja2V0ID0gYnVmZmVyICsgaW5kZXg7CiAgICAgICAgIGlmIChidWNrZXQt
PmlzRW1wdHkoKSB8fCBidWNrZXQtPmlzRGVsZXRlZCgpKQogICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgIGlmICghdm0uaGVhcC5pc01hcmtlZChidWNrZXQtPmtleSgpKSkKKyAgICAgICAg
aWYgKCF2aXNpdG9yLmlzTWFya2VkKGJ1Y2tldC0+a2V5KCkpKQogICAgICAgICAgICAgY29udGlu
dWU7CiAgICAgICAgIGJ1Y2tldC0+dmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7CiAgICAgfQogfQog
Cit0ZW1wbGF0ZSB2b2lkIFdlYWtNYXBJbXBsPFdlYWtNYXBCdWNrZXQ8V2Vha01hcEJ1Y2tldERh
dGFLZXlWYWx1ZT4+Ojp2aXNpdE91dHB1dENvbnN0cmFpbnRzKEpTQ2VsbCosIEFic3RyYWN0U2xv
dFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgV2Vha01hcEltcGw8V2Vha01hcEJ1Y2tldDxXZWFr
TWFwQnVja2V0RGF0YUtleVZhbHVlPj46OnZpc2l0T3V0cHV0Q29uc3RyYWludHMoSlNDZWxsKiwg
U2xvdFZpc2l0b3ImKTsKKwogdGVtcGxhdGUgPHR5cGVuYW1lIFdlYWtNYXBCdWNrZXQ+CiB0ZW1w
bGF0ZTx0eXBlbmFtZSBBcHBlbmRlcj4KIHZvaWQgV2Vha01hcEltcGw8V2Vha01hcEJ1Y2tldD46
OnRha2VTbmFwc2hvdEludGVybmFsKHVuc2lnbmVkIGxpbWl0LCBBcHBlbmRlciBhcHBlbmRlcikK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtNYXBJbXBsLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha01hcEltcGwuaAkocmV2
aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha01hcElt
cGwuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmln
aHQgKEMpIDIwMTcgWXVzdWtlIFN1enVraSA8dXRhdGFuZS50ZWFAZ21haWwuY29tPi4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKQEAgLTE0NCw4ICsxNDQsOCBAQCBwdWJsaWM6CiAgICAgICAgIGNsZWFyVmFs
dWUoKTsKICAgICB9CiAKLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVCA9IERhdGE+Ci0gICAgQUxX
QVlTX0lOTElORSB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8VCwgV2Vha01h
cEJ1Y2tldERhdGFLZXlWYWx1ZT46OnZhbHVlPjo6dHlwZSB2aXNpdEFnZ3JlZ2F0ZShTbG90Vmlz
aXRvciYgdmlzaXRvcikKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVCA9IERhdGEsIHR5cGVuYW1l
IFZpc2l0b3I+CisgICAgQUxXQVlTX0lOTElORSB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6
OmlzX3NhbWU8VCwgV2Vha01hcEJ1Y2tldERhdGFLZXlWYWx1ZT46OnZhbHVlPjo6dHlwZSB2aXNp
dEFnZ3JlZ2F0ZShWaXNpdG9yJiB2aXNpdG9yKQogICAgIHsKICAgICAgICAgdmlzaXRvci5hcHBl
bmQobV9kYXRhLnZhbHVlKTsKICAgICB9CkBAIC0yMDIsNyArMjAyLDcgQEAgcHVibGljOgogICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0Rlc3RydWN0aW9uID0gdHJ1ZTsKICAgICBzdGF0
aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJl
bihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAK
ICAgICBzdGF0aWMgc2l6ZV90IGVzdGltYXRlZFNpemUoSlNDZWxsKiwgVk0mKTsKIApAQCAtMzEx
LDEwICszMTEsMTMgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gdm0ud2Vha1NldFNwYWNlPG1v
ZGU+KCk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRPdXRwdXRDb25zdHJhaW50cyhK
U0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHN0
YXRpYyB2b2lkIHZpc2l0T3V0cHV0Q29uc3RyYWludHMoSlNDZWxsKiwgVmlzaXRvciYpOwogICAg
IHZvaWQgZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoVk0mKTsKIAogcHJpdmF0ZToKKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgorICAgIEFMV0FZU19JTkxJTkUgc3RhdGljIHZvaWQgdmlz
aXRPdXRwdXRDb25zdHJhaW50c0ZvckRhdGFLZXlWYWx1ZShKU0NlbGwqLCBWaXNpdG9yJik7CisK
ICAgICBBTFdBWVNfSU5MSU5FIFdlYWtNYXBCdWNrZXRUeXBlKiBmaW5kQnVja2V0KEpTT2JqZWN0
KiBrZXkpCiAgICAgewogICAgICAgICByZXR1cm4gZmluZEJ1Y2tldChrZXksIGpzV2Vha01hcEhh
c2goa2V5KSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvSlNEb2xsYXJWTS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0pTRG9sbGFyVk0u
Y3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvSlNE
b2xsYXJWTS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDE1LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE1LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yMjQsMTQgKzIyNCw3IEBAIHB1YmxpYzoK
IAogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBSb290Kik7CiAKLSAgICBzdGF0aWMgdm9p
ZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCi0gICAg
ewotICAgICAgICBEb2xsYXJWTUFzc2VydFNjb3BlIGFzc2VydFNjb3BlOwotICAgICAgICBFbGVt
ZW50KiB0aGlzT2JqZWN0ID0ganNDYXN0PEVsZW1lbnQqPihjZWxsKTsKLSAgICAgICAgQVNTRVJU
X0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwotICAgICAgICBCYXNlOjp2
aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwotICAgICAgICB2aXNpdG9yLmFwcGVu
ZCh0aGlzT2JqZWN0LT5tX3Jvb3QpOwotICAgIH0KKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVO
OwogCiAgICAgc3RhdGljIEVsZW1lbnRIYW5kbGVPd25lciogaGFuZGxlT3duZXIoKTsKIApAQCAt
MjQ3LDEwICsyNDAsMjIgQEAgcHJpdmF0ZToKICAgICBXcml0ZUJhcnJpZXI8Um9vdD4gbV9yb290
OwogfTsKIAordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgRWxlbWVudDo6dmlzaXRD
aGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIERvbGxh
clZNQXNzZXJ0U2NvcGUgYXNzZXJ0U2NvcGU7CisgICAgRWxlbWVudCogdGhpc09iamVjdCA9IGpz
Q2FzdDxFbGVtZW50Kj4oY2VsbCk7CisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlz
T2JqZWN0LCBpbmZvKCkpOworICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlz
aXRvcik7CisgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9yb290KTsKK30KKworREVG
SU5FX1ZJU0lUX0NISUxEUkVOKEVsZW1lbnQpOworCiBjbGFzcyBFbGVtZW50SGFuZGxlT3duZXIg
ZmluYWwgOiBwdWJsaWMgV2Vha0hhbmRsZU93bmVyIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9D
QVRFRDsKIHB1YmxpYzoKLSAgICBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6
SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgU2xvdFZpc2l0b3ImIHZpc2l0b3Is
IGNvbnN0IGNoYXIqKiByZWFzb24pIGZpbmFsCisgICAgYm9vbCBpc1JlYWNoYWJsZUZyb21PcGFx
dWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIEFic3RyYWN0
U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pIGZpbmFsCiAgICAgewog
ICAgICAgICBEb2xsYXJWTUFzc2VydFNjb3BlIGFzc2VydFNjb3BlOwogICAgICAgICBpZiAoVU5M
SUtFTFkocmVhc29uKSkKQEAgLTMwNCwxOCArMzA5LDIzIEBAIHB1YmxpYzoKICAgICAgICAgcmV0
dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUlu
Zm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwogICAgIH0KIAotICAgIHN0
YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiB0aGlzT2JqZWN0LCBTbG90VmlzaXRvciYg
dmlzaXRvcikKLSAgICB7Ci0gICAgICAgIERvbGxhclZNQXNzZXJ0U2NvcGUgYXNzZXJ0U2NvcGU7
Ci0gICAgICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsK
LSAgICAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKLSAgICAg
ICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHRoaXNPYmplY3QpOwotICAgIH0KKyAgICBERUNMQVJF
X1ZJU0lUX0NISUxEUkVOOwogCiBwcml2YXRlOgogICAgIFdlYWs8RWxlbWVudD4gbV9lbGVtZW50
OwogfTsKIAordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgUm9vdDo6dmlzaXRDaGls
ZHJlbkltcGwoSlNDZWxsKiB0aGlzT2JqZWN0LCBWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIERv
bGxhclZNQXNzZXJ0U2NvcGUgYXNzZXJ0U2NvcGU7CisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhF
UklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOworICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09i
amVjdCwgdmlzaXRvcik7CisgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHRoaXNPYmplY3QpOwor
fQorCitERUZJTkVfVklTSVRfQ0hJTERSRU4oUm9vdCk7CisKIGNsYXNzIFNpbXBsZU9iamVjdCA6
IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKIHB1YmxpYzoKICAgICBTaW1wbGVPYmplY3QoVk0m
IHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKQEAgLTM0MCwxNCArMzUwLDcgQEAgcHVibGljOgog
ICAgICAgICByZXR1cm4gc2ltcGxlT2JqZWN0OwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIHZp
c2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKLSAgICB7Ci0g
ICAgICAgIERvbGxhclZNQXNzZXJ0U2NvcGUgYXNzZXJ0U2NvcGU7Ci0gICAgICAgIFNpbXBsZU9i
amVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxTaW1wbGVPYmplY3QqPihjZWxsKTsKLSAgICAgICAg
QVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwotICAgICAgICBC
YXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwotICAgICAgICB2aXNpdG9y
LmFwcGVuZCh0aGlzT2JqZWN0LT5tX2hpZGRlblZhbHVlKTsKLSAgICB9CisgICAgREVDTEFSRV9W
SVNJVF9DSElMRFJFTjsKIAogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShW
TSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQog
ICAgIHsKQEAgLTM4MCw2ICszODMsMTggQEAgcHJpdmF0ZToKICAgICBXcml0ZUJhcnJpZXI8SlND
OjpVbmtub3duPiBtX2hpZGRlblZhbHVlOwogfTsKIAordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRv
cj4KK3ZvaWQgU2ltcGxlT2JqZWN0Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZp
c2l0b3ImIHZpc2l0b3IpCit7CisgICAgRG9sbGFyVk1Bc3NlcnRTY29wZSBhc3NlcnRTY29wZTsK
KyAgICBTaW1wbGVPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8U2ltcGxlT2JqZWN0Kj4oY2Vs
bCk7CisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwor
ICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CisgICAgdmlzaXRv
ci5hcHBlbmQodGhpc09iamVjdC0+bV9oaWRkZW5WYWx1ZSk7Cit9CisKK0RFRklORV9WSVNJVF9D
SElMRFJFTihTaW1wbGVPYmplY3QpOworCiBjbGFzcyBJbXB1cmVHZXR0ZXIgOiBwdWJsaWMgSlNO
b25GaW5hbE9iamVjdCB7CiBwdWJsaWM6CiAgICAgSW1wdXJlR2V0dGVyKFZNJiB2bSwgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUpCkBAIC00MzYsMTQgKzQ1MSw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0
dXJuIEJhc2U6OmdldE93blByb3BlcnR5U2xvdChvYmplY3QsIGdsb2JhbE9iamVjdCwgbmFtZSwg
c2xvdCk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqIGNl
bGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQotICAgIHsKLSAgICAgICAgRG9sbGFyVk1Bc3NlcnRT
Y29wZSBhc3NlcnRTY29wZTsKLSAgICAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjZWxs
LCBpbmZvKCkpOwotICAgICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKGNlbGwsIHZpc2l0b3IpOwot
ICAgICAgICBJbXB1cmVHZXR0ZXIqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SW1wdXJlR2V0dGVyKj4o
Y2VsbCk7Ci0gICAgICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fZGVsZWdhdGUpOwot
ICAgIH0KKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgdm9pZCBzZXREZWxlZ2F0
ZShWTSYgdm0sIEpTT2JqZWN0KiBkZWxlZ2F0ZSkKICAgICB7CkBAIC00NTQsNiArNDYyLDE4IEBA
IHByaXZhdGU6CiAgICAgV3JpdGVCYXJyaWVyPEpTT2JqZWN0PiBtX2RlbGVnYXRlOwogfTsKIAor
dGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSW1wdXJlR2V0dGVyOjp2aXNpdENoaWxk
cmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgRG9sbGFyVk1B
c3NlcnRTY29wZSBhc3NlcnRTY29wZTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNl
bGwsIGluZm8oKSk7CisgICAgQmFzZTo6dmlzaXRDaGlsZHJlbihjZWxsLCB2aXNpdG9yKTsKKyAg
ICBJbXB1cmVHZXR0ZXIqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SW1wdXJlR2V0dGVyKj4oY2VsbCk7
CisgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9kZWxlZ2F0ZSk7Cit9CisKK0RFRklO
RV9WSVNJVF9DSElMRFJFTihJbXB1cmVHZXR0ZXIpOworCiBzdGF0aWMgSlNDX0RFQ0xBUkVfQ1VT
VE9NX0dFVFRFUihjdXN0b21HZXR0ZXJWYWx1ZUdldHRlcik7CiBzdGF0aWMgSlNDX0RFQ0xBUkVf
Q1VTVE9NX0dFVFRFUihjdXN0b21HZXR0ZXJBY2Vzc29yR2V0dGVyKTsKIApAQCAtMTgyMiwxNCAr
MTg0Miw3IEBAIHB1YmxpYzoKICAgICAgICAgcHV0RGlyZWN0TmF0aXZlRnVuY3Rpb24odm0sIGds
b2JhbE9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImFkZEJ5dGVzIiksIDAsIGZ1
bmN0aW9uV2FzbVN0cmVhbWluZ0NvbXBpbGVyQWRkQnl0ZXMsIE5vSW50cmluc2ljLCBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSk7CiAgICAgfQogCi0g
ICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQotICAgIHsKLSAgICAgICAgRG9sbGFyVk1Bc3NlcnRTY29wZSBhc3NlcnRTY29wZTsK
LSAgICAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxXYXNtU3RyZWFtaW5nQ29tcGlsZXIq
PihjZWxsKTsKLSAgICAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBp
bmZvKCkpOwotICAgICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3Ip
OwotICAgICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX3Byb21pc2UpOwotICAgIH0K
KyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgREVDTEFSRV9JTkZPOwogCkBAIC0x
ODM3LDYgKzE4NTAsMTggQEAgcHVibGljOgogICAgIFJlZjxXYXNtOjpTdHJlYW1pbmdDb21waWxl
cj4gbV9zdHJlYW1pbmdDb21waWxlcjsKIH07CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+
Cit2b2lkIFdhc21TdHJlYW1pbmdDb21waWxlcjo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBj
ZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIERvbGxhclZNQXNzZXJ0U2NvcGUgYXNzZXJ0
U2NvcGU7CisgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxXYXNtU3RyZWFtaW5nQ29tcGls
ZXIqPihjZWxsKTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGlu
Zm8oKSk7CisgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKKyAg
ICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX3Byb21pc2UpOworfQorCitERUZJTkVfVklT
SVRfQ0hJTERSRU4oV2FzbVN0cmVhbWluZ0NvbXBpbGVyKTsKKwogY29uc3QgQ2xhc3NJbmZvIFdh
c21TdHJlYW1pbmdDb21waWxlcjo6c19pbmZvID0geyAiV2FzbVN0cmVhbWluZ0NvbXBpbGVyIiwg
JkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShXYXNt
U3RyZWFtaW5nQ29tcGlsZXIpIH07CiAKIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihmdW5jdGlv
bldhc21TdHJlYW1pbmdDb21waWxlckFkZEJ5dGVzLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpKQpAQCAtMzY5OSwxMyArMzcyNCwxNiBAQCB2b2lk
IEpTRG9sbGFyVk06OmFkZENvbnN0cnVjdGlibGVGdW5jdGlvCiAgICAgcHV0RGlyZWN0KHZtLCBp
ZGVudGlmaWVyLCBKU0Z1bmN0aW9uOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgYXJndW1lbnRz
LCBpZGVudGlmaWVyLnN0cmluZygpLCBmdW5jdGlvbiwgTm9JbnRyaW5zaWMsIGZ1bmN0aW9uKSwg
anNEb2xsYXJWTVByb3BlcnR5QXR0cmlidXRlcyk7CiB9CiAKLXZvaWQgSlNEb2xsYXJWTTo6dmlz
aXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8
dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNEb2xsYXJWTTo6dmlzaXRDaGlsZHJlbkltcGwoSlND
ZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTRG9sbGFyVk0qIHRoaXNPYmpl
Y3QgPSBqc0Nhc3Q8SlNEb2xsYXJWTSo+KGNlbGwpOwogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4o
dGhpc09iamVjdCwgdmlzaXRvcik7CiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9v
YmplY3REb2luZ1NpZGVFZmZlY3RQdXRXaXRob3V0Q29ycmVjdFNsb3RTdGF0dXNTdHJ1Y3R1cmUp
OwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNEb2xsYXJWTSk7CisKIH0gLy8gbmFtZXNw
YWNlIEpTQwogCiBJR05PUkVfV0FSTklOR1NfRU5ECkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvdG9vbHMvSlNEb2xsYXJWTS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS90b29scy9KU0RvbGxhclZNLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS90b29scy9KU0RvbGxhclZNLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03NCw3ICs3NCw3
IEBAIHByaXZhdGU6CiAgICAgdm9pZCBhZGRGdW5jdGlvbihWTSYsIEpTR2xvYmFsT2JqZWN0Kiwg
Y29uc3QgY2hhciogbmFtZSwgTmF0aXZlRnVuY3Rpb24sIHVuc2lnbmVkIGFyZ3VtZW50cyk7CiAg
ICAgdm9pZCBhZGRDb25zdHJ1Y3RpYmxlRnVuY3Rpb24oVk0mLCBKU0dsb2JhbE9iamVjdCosIGNv
bnN0IGNoYXIqIG5hbWUsIE5hdGl2ZUZ1bmN0aW9uLCB1bnNpZ25lZCBhcmd1bWVudHMpOwogCi0g
ICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAg
IERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBt
X29iamVjdERvaW5nU2lkZUVmZmVjdFB1dFdpdGhvdXRDb3JyZWN0U2xvdFN0YXR1c1N0cnVjdHVy
ZTsKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtR2xvYmFsLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtR2xvYmFsLmNwcAko
cmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUdsb2Jh
bC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxOS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMTAzLDcgKzEwMyw4IEBAIHZvaWQgR2xvYmFsOjpzZXQoSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE8KICAgICB9CiB9CiAKLXZvaWQgR2xvYmFsOjp2aXNpdEFnZ3Jl
Z2F0ZShTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2
b2lkIEdsb2JhbDo6dmlzaXRBZ2dyZWdhdGVJbXBsKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAg
c3dpdGNoIChtX3R5cGUpIHsKICAgICBjYXNlIFdhc206OlR5cGU6OkV4dGVybnJlZjoKQEAgLTEx
Nyw2ICsxMTgsOCBAQCB2b2lkIEdsb2JhbDo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImCiAg
ICAgfQogfQogCitERUZJTkVfVklTSVRfQUdHUkVHQVRFKEdsb2JhbCk7CisKIH0gfSAvLyBuYW1l
c3BhY2UgSlNDOjpHbG9iYWwKIAogI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21HbG9iYWwuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtR2xvYmFsLmgJKHJldmlzaW9uIDI3MjgzMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21HbG9iYWwuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAxOCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTU3LDcgKzU3LDggQEAgcHVibGljOgogICAgIEpTVmFsdWUgZ2V0KEpTR2xvYmFsT2Jq
ZWN0KikgY29uc3Q7CiAgICAgdWludDY0X3QgZ2V0UHJpbWl0aXZlKCkgY29uc3QgeyByZXR1cm4g
bV92YWx1ZS5tX3ByaW1pdGl2ZTsgfQogICAgIHZvaWQgc2V0KEpTR2xvYmFsT2JqZWN0KiwgSlNW
YWx1ZSk7Ci0gICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYpOworLy8gICAgdGVt
cGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCB2aXNpdEFnZ3JlZ2F0ZShWaXNpdG9yJik7Cisg
ICAgREVDTEFSRV9WSVNJVF9BR0dSRUdBVEU7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBU
KiBvd25lcigpIGNvbnN0IHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8VCo+KG1fb3duZXIpOyB9
CiAgICAgdm9pZCBzZXRPd25lcihKU09iamVjdCogb3duZXIpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtVGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21UYWJsZS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21UYWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xNjYs
NyArMTY2LDggQEAgSlNWYWx1ZSBUYWJsZTo6Z2V0KHVpbnQzMl90IGluZGV4KSBjb25zdAogICAg
IHJldHVybiBtX2pzVmFsdWVzLmdldCgpW2luZGV4ICYgbV9tYXNrXS5nZXQoKTsKIH0KIAotdm9p
ZCBUYWJsZTo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0
eXBlbmFtZSBWaXNpdG9yPgordm9pZCBUYWJsZTo6dmlzaXRBZ2dyZWdhdGVJbXBsKFZpc2l0b3Im
IHZpc2l0b3IpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQobV9vd25lcik7CiAgICAgYXV0byBsb2Nr
ZXIgPSBob2xkTG9jayhtX293bmVyLT5jZWxsTG9jaygpKTsKQEAgLTE3NCw2ICsxNzUsOCBAQCB2
b2lkIFRhYmxlOjp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYgCiAgICAgICAgIHZpc2l0b3Iu
YXBwZW5kKG1fanNWYWx1ZXMuZ2V0KClbaV0pOwogfQogCitERUZJTkVfVklTSVRfQUdHUkVHQVRF
KFRhYmxlKTsKKwogVHlwZSBUYWJsZTo6d2FzbVR5cGUoKSBjb25zdAogewogICAgIGlmIChpc0V4
dGVybnJlZlRhYmxlKCkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGFi
bGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGFibGUu
aAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRh
YmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDE3LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC04MCw3ICs4MCw3IEBAIHB1YmxpYzoKICAgICBPcHRp
b25hbDx1aW50MzJfdD4gZ3Jvdyh1aW50MzJfdCBkZWx0YSwgSlNWYWx1ZSBkZWZhdWx0VmFsdWUp
OwogICAgIHZvaWQgY29weShjb25zdCBUYWJsZSogc3JjVGFibGUsIHVpbnQzMl90IGRzdEluZGV4
LCB1aW50MzJfdCBzcmNJbmRleCk7CiAKLSAgICB2b2lkIHZpc2l0QWdncmVnYXRlKFNsb3RWaXNp
dG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9BR0dSRUdBVEU7CiAKIHByb3RlY3RlZDoKICAgICBU
YWJsZSh1aW50MzJfdCBpbml0aWFsLCBPcHRpb25hbDx1aW50MzJfdD4gbWF4aW11bSwgVGFibGVF
bGVtZW50VHlwZSA9IFRhYmxlRWxlbWVudFR5cGU6OkV4dGVybnJlZik7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1RvV2FzbUlDQ2FsbGVlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1RvV2FzbUlDQ2FsbGVlLmNwcAkocmV2
aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNUb1dhc21J
Q0NhbGxlZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxOS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDksNyArNDksOCBAQCBTdHJ1Y3R1cmUqIEpTVG9X
YXNtSUNDYWxsZWU6OmNyZWF0ZVN0cnVjCiAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZt
LCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oSlNDYWxsZWVUeXBlLCBTdHJ1Y3R1
cmVGbGFncyksIGluZm8oKSk7CiB9CiAKLXZvaWQgSlNUb1dhc21JQ0NhbGxlZTo6dmlzaXRDaGls
ZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5h
bWUgVmlzaXRvcj4KK3ZvaWQgSlNUb1dhc21JQ0NhbGxlZTo6dmlzaXRDaGlsZHJlbkltcGwoSlND
ZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTVG9XYXNtSUNDYWxsZWUqIHRo
aXNPYmplY3QgPSBqc0Nhc3Q8SlNUb1dhc21JQ0NhbGxlZSo+KGNlbGwpOwogICAgIEFTU0VSVF9H
Q19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTU4LDYgKzU5LDggQEAg
dm9pZCBKU1RvV2FzbUlDQ2FsbGVlOjp2aXNpdENoaWxkcmVuKEpTQwogICAgIHZpc2l0b3IuYXBw
ZW5kKHRoaXNPYmplY3QtPm1fZnVuY3Rpb24pOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4o
SlNUb1dhc21JQ0NhbGxlZSk7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gRU5B
QkxFKFdFQkFTU0VNQkxZKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNU
b1dhc21JQ0NhbGxlZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL0pTVG9XYXNtSUNDYWxsZWUuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvSlNUb1dhc21JQ0NhbGxlZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU2LDcg
KzU2LDcgQEAgcHJpdmF0ZToKICAgICBKU1RvV2FzbUlDQ2FsbGVlKFZNJiB2bSwgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiAgICAgICAgIDogQmFz
ZSh2bSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUpCiAgICAgeyB9Ci0gICAgc3RhdGljIHZvaWQg
dmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRf
Q0hJTERSRU47CiAKICAgICBXcml0ZUJhcnJpZXI8V2ViQXNzZW1ibHlGdW5jdGlvbj4gbV9mdW5j
dGlvbjsKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2Vt
Ymx5Q29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9jay5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3LTIw
MTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3
LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC04Miw3ICs4Miw4IEBAIHZvaWQgSlNXZWJBc3NlbWJseUNvZGVCbG9j
azo6Y2xlYXJKU0NhbGwKICAgICAgICAgKCppdGVyKS0+dW5saW5rKHZtKTsKIH0KIAotdm9pZCBK
U1dlYkFzc2VtYmx5Q29kZUJsb2NrOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZp
c2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1dlYkFz
c2VtYmx5Q29kZUJsb2NrOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3Im
IHZpc2l0b3IpCiB7CiAgICAgSlNXZWJBc3NlbWJseUNvZGVCbG9jayogdGhpc09iamVjdCA9IGpz
Q2FzdDxKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVD
VF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtOTAsNiArOTEsOCBAQCB2b2lkIEpT
V2ViQXNzZW1ibHlDb2RlQmxvY2s6OnZpc2l0Q2hpbGRyCiAgICAgQmFzZTo6dmlzaXRDaGlsZHJl
bih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTV2Vi
QXNzZW1ibHlDb2RlQmxvY2spOworCiB2b2lkIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6OmZpbmFs
aXplVW5jb25kaXRpb25hbGx5KFZNJiB2bSkKIHsKICAgICBmb3IgKGF1dG8gaXRlciA9IG1fY2Fs
bExpbmtJbmZvcy5iZWdpbigpOyAhIWl0ZXI7ICsraXRlcikKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmgJKHJl
dmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNz
ZW1ibHlDb2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTctMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTg2LDcgKzg2LDcgQEAgcHJpdmF0
ZToKICAgICBERUNMQVJFX0VYUE9SVF9JTkZPOwogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBu
ZWVkc0Rlc3RydWN0aW9uID0gdHJ1ZTsKICAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCop
OwotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsK
KyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgUmVmPFdhc206OkNvZGVCbG9jaz4g
bV9jb2RlQmxvY2s7CiAgICAgVmVjdG9yPE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxXYXNtRW50cnlQ
dHJUYWc+PiBtX3dhc21Ub0pTRXhpdFN0dWJzOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvSlNXZWJBc3NlbWJseUdsb2JhbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUdsb2JhbC5jcHAJKHJldmlzaW9uIDI3
MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlHbG9i
YWwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTktMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTcxLDcgKzcxLDggQEAgdm9pZCBKU1dlYkFzc2VtYmx5R2xv
YmFsOjpkZXN0cm95KEpTQ2VsbAogICAgIHN0YXRpY19jYXN0PEpTV2ViQXNzZW1ibHlHbG9iYWwq
PihjZWxsKS0+SlNXZWJBc3NlbWJseUdsb2JhbDo6fkpTV2ViQXNzZW1ibHlHbG9iYWwoKTsKIH0K
IAotdm9pZCBKU1dlYkFzc2VtYmx5R2xvYmFsOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwg
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBK
U1dlYkFzc2VtYmx5R2xvYmFsOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0
b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNXZWJBc3NlbWJseUdsb2JhbCogdGhpc09iamVjdCA9IGpz
Q2FzdDxKU1dlYkFzc2VtYmx5R2xvYmFsKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9J
TkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtODAsNiArODEsOCBAQCB2b2lkIEpTV2Vi
QXNzZW1ibHlHbG9iYWw6OnZpc2l0Q2hpbGRyZW4oCiAgICAgdGhpc09iamVjdC0+Z2xvYmFsKCkt
PnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNX
ZWJBc3NlbWJseUdsb2JhbCk7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gRU5B
QkxFKFdFQkFTU0VNQkxZKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNX
ZWJBc3NlbWJseUdsb2JhbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL2pzL0pTV2ViQXNzZW1ibHlHbG9iYWwuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUdsb2JhbC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTU5LDcgKzU5LDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBKU1dlYkFzc2VtYmx5R2xv
YmFsKFZNJiwgU3RydWN0dXJlKiwgUmVmPFdhc206Okdsb2JhbD4mJik7CiAgICAgdm9pZCBmaW5p
c2hDcmVhdGlvbihWTSYpOwotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwg
U2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgUmVmPFdh
c206Okdsb2JhbD4gbV9nbG9iYWw7CiB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuY3BwCShyZXZpc2lvbiAy
NzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5z
dGFuY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxNi0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNzMsNyArNzMsOCBAQCB2b2lkIEpTV2ViQXNz
ZW1ibHlJbnN0YW5jZTo6ZGVzdHJveShKU0NlCiAgICAgc3RhdGljX2Nhc3Q8SlNXZWJBc3NlbWJs
eUluc3RhbmNlKj4oY2VsbCktPkpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6fkpTV2ViQXNzZW1ibHlJ
bnN0YW5jZSgpOwogfQogCi12b2lkIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6dmlzaXRDaGlsZHJl
bihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUg
VmlzaXRvcj4KK3ZvaWQgSlNXZWJBc3NlbWJseUluc3RhbmNlOjp2aXNpdENoaWxkcmVuSW1wbChK
U0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0byogdGhpc09iamVjdCA9
IGpzQ2FzdDxKU1dlYkFzc2VtYmx5SW5zdGFuY2UqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JK
RUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC0xMDIsNiArMTAzLDggQEAgdm9p
ZCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OnZpc2l0Q2hpbGRyZQogICAgICAgICB2aXNpdG9yLmFw
cGVuZFVuYmFycmllcmVkKHdyYXBwZXIuZ2V0KCkpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERS
RU4oSlNXZWJBc3NlbWJseUluc3RhbmNlKTsKKwogdm9pZCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6
OmZpbmFsaXplQ3JlYXRpb24oVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBS
ZWY8V2FzbTo6Q29kZUJsb2NrPiYmIHdhc21Db2RlQmxvY2ssIEpTT2JqZWN0KiBpbXBvcnRPYmpl
Y3QsIFdhc206OkNyZWF0aW9uTW9kZSBjcmVhdGlvbk1vZGUpCiB7CiAgICAgbV9pbnN0YW5jZS0+
ZmluYWxpemVDcmVhdGlvbih0aGlzLCB3YXNtQ29kZUJsb2NrLmNvcHlSZWYoKSk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5z
dGFuY2UuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
anMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMDUsNyArMTA1
LDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBKU1dlYkFzc2VtYmx5SW5zdGFuY2UoVk0mLCBT
dHJ1Y3R1cmUqLCBSZWY8V2FzbTo6SW5zdGFuY2U+JiYpOwogICAgIHZvaWQgZmluaXNoQ3JlYXRp
b24oVk0mLCBKU1dlYkFzc2VtYmx5TW9kdWxlKiwgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQqKTsK
LSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7Cisg
ICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIFJlZjxXYXNtOjpJbnN0YW5jZT4gbV9p
bnN0YW5jZTsKICAgICBWTSogbV92bTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL0pTV2ViQXNzZW1ibHlNZW1vcnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNZW1vcnkuY3BwCShyZXZpc2lvbiAyNzI4MzAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TWVtb3J5LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTE1OSw3ICsxNTksOCBAQCB2b2lkIEpTV2ViQXNzZW1ibHlN
ZW1vcnk6OmRlc3Ryb3koSlNDZWxsCiAgICAgbWVtb3J5LT5KU1dlYkFzc2VtYmx5TWVtb3J5Ojp+
SlNXZWJBc3NlbWJseU1lbW9yeSgpOwogfQogCi12b2lkIEpTV2ViQXNzZW1ibHlNZW1vcnk6OnZp
c2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRl
PHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTV2ViQXNzZW1ibHlNZW1vcnk6OnZpc2l0Q2hpbGRy
ZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBhdXRvKiB0aGlz
T2JqZWN0ID0ganNDYXN0PEpTV2ViQXNzZW1ibHlNZW1vcnkqPihjZWxsKTsKICAgICBBU1NFUlRf
R0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC0xNjksNiArMTcwLDgg
QEAgdm9pZCBKU1dlYkFzc2VtYmx5TWVtb3J5Ojp2aXNpdENoaWxkcmVuKAogICAgIHZpc2l0b3Iu
cmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKHRoaXNPYmplY3QtPm1lbW9yeSgpLnNpemUoKSk7CiB9
CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU1dlYkFzc2VtYmx5TWVtb3J5KTsKKwogfSAvLyBu
YW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TWVtb3J5LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1lbW9yeS5o
CShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dl
YkFzc2VtYmx5TWVtb3J5LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDE2LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02Myw3ICs2Myw3IEBAIHB1Ymxp
YzoKIHByaXZhdGU6CiAgICAgSlNXZWJBc3NlbWJseU1lbW9yeShWTSYsIFN0cnVjdHVyZSopOwog
ICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxk
cmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsK
IAogICAgIFJlZjxXYXNtOjpNZW1vcnk+IG1fbWVtb3J5OwogICAgIFdyaXRlQmFycmllcjxKU0Fy
cmF5QnVmZmVyPiBtX2J1ZmZlcldyYXBwZXI7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmNwcAkocmV2aXNpb24gMjcy
ODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1vZHVs
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMjQsNyArMTI0LDggQEAgdm9pZCBKU1dlYkFzc2Vt
Ymx5TW9kdWxlOjpzZXRDb2RlQmxvY2soVgogICAgIG1fY29kZUJsb2Nrc1tzdGF0aWNfY2FzdDxz
aXplX3Q+KG1vZGUpXS5zZXQodm0sIHRoaXMsIGNvZGVCbG9jayk7CiB9CiAKLXZvaWQgSlNXZWJB
c3NlbWJseU1vZHVsZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNXZWJBc3NlbWJseU1v
ZHVsZTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQog
ewogICAgIEpTV2ViQXNzZW1ibHlNb2R1bGUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNXZWJBc3Nl
bWJseU1vZHVsZSo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09i
amVjdCwgaW5mbygpKTsKQEAgLTEzNSw2ICsxMzYsOCBAQCB2b2lkIEpTV2ViQXNzZW1ibHlNb2R1
bGU6OnZpc2l0Q2hpbGRyZW4oCiAgICAgICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1f
Y29kZUJsb2Nrc1tpXSk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU1dlYkFzc2VtYmx5
TW9kdWxlKTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBFTkFCTEUoV0VCQVNT
RU1CTFkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5
TW9kdWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNX
ZWJBc3NlbWJseU1vZHVsZS5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTkgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC04
MCw3ICs4MCw3IEBAIHByaXZhdGU6CiAKICAgICBKU1dlYkFzc2VtYmx5TW9kdWxlKFZNJiwgU3Ry
dWN0dXJlKiwgUmVmPFdhc206Ok1vZHVsZT4mJik7CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihW
TSYpOwotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3Im
KTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgUmVmPFdhc206Ok1vZHVsZT4g
bV9tb2R1bGU7CiAgICAgV3JpdGVCYXJyaWVyPFN5bWJvbFRhYmxlPiBtX2V4cG9ydFN5bWJvbFRh
YmxlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseVRh
YmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dl
YkFzc2VtYmx5VGFibGUuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5VGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE5IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
NzIsNyArNzIsOCBAQCB2b2lkIEpTV2ViQXNzZW1ibHlUYWJsZTo6ZGVzdHJveShKU0NlbGwqCiAg
ICAgc3RhdGljX2Nhc3Q8SlNXZWJBc3NlbWJseVRhYmxlKj4oY2VsbCktPkpTV2ViQXNzZW1ibHlU
YWJsZTo6fkpTV2ViQXNzZW1ibHlUYWJsZSgpOwogfQogCi12b2lkIEpTV2ViQXNzZW1ibHlUYWJs
ZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVt
cGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNXZWJBc3NlbWJseVRhYmxlOjp2aXNpdENo
aWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNXZWJB
c3NlbWJseVRhYmxlKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTV2ViQXNzZW1ibHlUYWJsZSo+KGNl
bGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsK
QEAgLTgxLDYgKzgyLDggQEAgdm9pZCBKU1dlYkFzc2VtYmx5VGFibGU6OnZpc2l0Q2hpbGRyZW4o
SgogICAgIHRoaXNPYmplY3QtPnRhYmxlKCktPnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOwogfQog
CitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNXZWJBc3NlbWJseVRhYmxlKTsKKwogYm9vbCBKU1dl
YkFzc2VtYmx5VGFibGU6Omdyb3codWludDMyX3QgZGVsdGEsIEpTVmFsdWUgZGVmYXVsdFZhbHVl
KQogewogICAgIGlmIChkZWx0YSA9PSAwKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vanMvSlNXZWJBc3NlbWJseVRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseVRhYmxlLmgJKHJldmlzaW9uIDI3MjgzMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlUYWJsZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE5
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0y
MDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtNzAsNyArNzAsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIEpTV2Vi
QXNzZW1ibHlUYWJsZShWTSYsIFN0cnVjdHVyZSosIFJlZjxXYXNtOjpUYWJsZT4mJik7CiAgICAg
dm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOwotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4o
SlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAg
ICAgUmVmPFdhc206OlRhYmxlPiBtX3RhYmxlOwogfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uY3BwCShyZXZpc2lv
biAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1
bmN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTYtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ1Miw3ICs0NTIsOCBAQCBXZWJBc3NlbWJs
eUZ1bmN0aW9uOjpXZWJBc3NlbWJseUZ1bmN0aW9uCiAgICAgLCBtX2ltcG9ydGFibGVGdW5jdGlv
biB7IHNpZ25hdHVyZUluZGV4LCB3YXNtVG9XYXNtRW50cnlwb2ludExvYWRMb2NhdGlvbiB9CiB7
IH0KIAotdm9pZCBXZWJBc3NlbWJseUZ1bmN0aW9uOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2Vs
bCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9p
ZCBXZWJBc3NlbWJseUZ1bmN0aW9uOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZp
c2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgV2ViQXNzZW1ibHlGdW5jdGlvbiogdGhpc09iamVjdCA9
IGpzQ2FzdDxXZWJBc3NlbWJseUZ1bmN0aW9uKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVD
VF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNDYxLDYgKzQ2Miw4IEBAIHZvaWQg
V2ViQXNzZW1ibHlGdW5jdGlvbjo6dmlzaXRDaGlsZHJlbigKICAgICB2aXNpdG9yLmFwcGVuZCh0
aGlzT2JqZWN0LT5tX2pzVG9XYXNtSUNDYWxsZWUpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERS
RU4oV2ViQXNzZW1ibHlGdW5jdGlvbik7CisKIHZvaWQgV2ViQXNzZW1ibHlGdW5jdGlvbjo6ZGVz
dHJveShKU0NlbGwqIGNlbGwpCiB7CiAgICAgc3RhdGljX2Nhc3Q8V2ViQXNzZW1ibHlGdW5jdGlv
bio+KGNlbGwpLT5XZWJBc3NlbWJseUZ1bmN0aW9uOjp+V2ViQXNzZW1ibHlGdW5jdGlvbigpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5
RnVuY3Rpb24uaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODYsNyArODYs
NyBAQCBwdWJsaWM6CiAgICAgV2FzbTo6SW5zdGFuY2UqIHByZXZpb3VzSW5zdGFuY2UoQ2FsbEZy
YW1lKik7CiAKIHByaXZhdGU6Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwq
LCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAgICAgV2ViQXNz
ZW1ibHlGdW5jdGlvbihWTSYsIE5hdGl2ZUV4ZWN1dGFibGUqLCBKU0dsb2JhbE9iamVjdCosIFN0
cnVjdHVyZSosIFdhc206OkNhbGxlZSYganNFbnRyeXBvaW50LCBXYXNtVG9XYXNtSW1wb3J0YWJs
ZUZ1bmN0aW9uOjpMb2FkTG9jYXRpb24gZW50cnlwb2ludExvYWRMb2NhdGlvbiwgV2FzbTo6U2ln
bmF0dXJlSW5kZXgpOwogCiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+
IGpzQ2FsbEVudHJ5cG9pbnRTbG93KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uQmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbkJhc2UuY3BwCShyZXZpc2lv
biAyNzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1
bmN0aW9uQmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDEsNyArNDEsOCBAQCBXZWJBc3NlbWJseUZ1
bmN0aW9uQmFzZTo6V2ViQXNzZW1ibHlGdW5jCiAgICAgOiBCYXNlKHZtLCBleGVjdXRhYmxlLCBn
bG9iYWxPYmplY3QsIHN0cnVjdHVyZSkKIHsgfQogCi12b2lkIFdlYkFzc2VtYmx5RnVuY3Rpb25C
YXNlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0
ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBXZWJBc3NlbWJseUZ1bmN0aW9uQmFzZTo6
dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAg
IFdlYkFzc2VtYmx5RnVuY3Rpb25CYXNlKiB0aGlzT2JqZWN0ID0ganNDYXN0PFdlYkFzc2VtYmx5
RnVuY3Rpb25CYXNlKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlz
T2JqZWN0LCBpbmZvKCkpOwpAQCAtNDksNiArNTAsOCBAQCB2b2lkIFdlYkFzc2VtYmx5RnVuY3Rp
b25CYXNlOjp2aXNpdENoaWxkCiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9pbnN0
YW5jZSk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihXZWJBc3NlbWJseUZ1bmN0aW9uQmFz
ZSk7CisKIHZvaWQgV2ViQXNzZW1ibHlGdW5jdGlvbkJhc2U6OmZpbmlzaENyZWF0aW9uKFZNJiB2
bSwgTmF0aXZlRXhlY3V0YWJsZSogZXhlY3V0YWJsZSwgdW5zaWduZWQgbGVuZ3RoLCBjb25zdCBT
dHJpbmcmIG5hbWUsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogaW5zdGFuY2UpCiB7CiAgICAgQmFz
ZTo6ZmluaXNoQ3JlYXRpb24odm0sIGV4ZWN1dGFibGUsIGxlbmd0aCwgbmFtZSk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uQmFzZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVu
Y3Rpb25CYXNlLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb25CYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMTggQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00Niw3
ICs0Niw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mSW5zdGFuY2Uo
KSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoV2ViQXNzZW1ibHlGdW5jdGlvbkJhc2UsIG1faW5z
dGFuY2UpOyB9CiAKIHByb3RlY3RlZDoKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpT
Q2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKICAgICB2
b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgTmF0aXZlRXhlY3V0YWJsZSosIHVuc2lnbmVkIGxlbmd0
aCwgY29uc3QgU3RyaW5nJiBuYW1lLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqKTsKICAgICBXZWJB
c3NlbWJseUZ1bmN0aW9uQmFzZShWTSYsIE5hdGl2ZUV4ZWN1dGFibGUqLCBKU0dsb2JhbE9iamVj
dCosIFN0cnVjdHVyZSopOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9X
ZWJBc3NlbWJseU1vZHVsZVJlY29yZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuY3BwCShyZXZpc2lvbiAyNzI4
MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZVJl
Y29yZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDE2LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03OCw3ICs3OCw4IEBAIHZvaWQgV2ViQXNzZW1i
bHlNb2R1bGVSZWNvcmQ6OmZpbmlzaENyZWEKICAgICB9CiB9CiAKLXZvaWQgV2ViQXNzZW1ibHlN
b2R1bGVSZWNvcmQ6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlz
aXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFdlYkFzc2VtYmx5TW9kdWxl
UmVjb3JkOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3Ip
CiB7CiAgICAgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8V2Vi
QXNzZW1ibHlNb2R1bGVSZWNvcmQqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVS
SVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC04OCw2ICs4OSw4IEBAIHZvaWQgV2ViQXNzZW1i
bHlNb2R1bGVSZWNvcmQ6OnZpc2l0Q2hpbGQKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0
LT5tX2V4cG9ydHNPYmplY3QpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oV2ViQXNzZW1i
bHlNb2R1bGVSZWNvcmQpOworCiB2b2lkIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpwcmVwYXJl
TGluayhWTSYgdm0sIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogaW5zdGFuY2UpCiB7CiAgICAgUkVM
RUFTRV9BU1NFUlQoIW1faW5zdGFuY2UpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZVJlY29yZC5oCShyZXZpc2lvbiAy
NzI4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVs
ZVJlY29yZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxNi0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjksNyArNjksNyBAQCBwcml2YXRlOgogCiAg
ICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0dsb2JhbE9iamVjdCosIFZNJiwgY29uc3QgV2FzbTo6
TW9kdWxlSW5mb3JtYXRpb24mKTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlND
ZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAg
V3JpdGVCYXJyaWVyPEpTV2ViQXNzZW1ibHlJbnN0YW5jZT4gbV9pbnN0YW5jZTsKICAgICBXcml0
ZUJhcnJpZXI8SlNPYmplY3Q+IG1fc3RhcnRGdW5jdGlvbjsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVdyYXBwZXJGdW5j
dGlvbi5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL1dlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAxOCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY3
LDcgKzY3LDggQEAgU3RydWN0dXJlKiBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbjo6YwogICAg
IHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5
cGVJbmZvKEpTRnVuY3Rpb25UeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CiB9CiAKLXZv
aWQgV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb246OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxs
LCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lk
IFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNl
bGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24q
IHRoaXNPYmplY3QgPSBqc0Nhc3Q8V2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24qPihjZWxsKTsK
ICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC03
Niw2ICs3Nyw4IEBAIHZvaWQgV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb246OnZpc2l0Q2gKICAg
ICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2Z1bmN0aW9uKTsKIH0KIAorREVGSU5FX1ZJ
U0lUX0NISUxEUkVOKFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uKTsKKwogSlNDX0RFRklORV9I
T1NUX0ZVTkNUSU9OKGNhbGxXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbiwgKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKSkKIHsKICAgICBWTSYgdm0g
PSBnbG9iYWxPYmplY3QtPnZtKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9XZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmgJKHJldmlzaW9u
IDI3MjgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5V3Jh
cHBlckZ1bmN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDE3LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01OSw3ICs1OSw3IEBAIHB1YmxpYzoK
IHByaXZhdGU6CiAgICAgV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24oVk0mLCBOYXRpdmVFeGVj
dXRhYmxlKiwgSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqLCBXYXNtVG9XYXNtSW1wb3J0YWJs
ZUZ1bmN0aW9uKTsKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgTmF0aXZlRXhlY3V0YWJs
ZSosIHVuc2lnbmVkIGxlbmd0aCwgY29uc3QgU3RyaW5nJiBuYW1lLCBKU09iamVjdCosIEpTV2Vi
QXNzZW1ibHlJbnN0YW5jZSopOwotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgV3Jp
dGVCYXJyaWVyPEpTT2JqZWN0PiBtX2Z1bmN0aW9uOwogICAgIC8vIEl0J3Mgc2FmZSB0byBqdXN0
IGhvbGQgdGhlIHJhdyBXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9uIGJlY2F1c2Ugd2UgaGF2
ZSBhIHJlZmVyZW5jZQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
T2JqZWN0U3RvcmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQk9iamVjdFN0b3JlLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTcyOCw3ICs3MjgsOCBAQCB2b2lkIElEQk9iamVjdFN0b3JlOjpyb2xsYmFja0ZvclZlcnNpb25D
CiAgICAgfQogfQogCi12b2lkIElEQk9iamVjdFN0b3JlOjp2aXNpdFJlZmVyZW5jZWRJbmRleGVz
KFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBjb25zdAordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4K
K3ZvaWQgSURCT2JqZWN0U3RvcmU6OnZpc2l0UmVmZXJlbmNlZEluZGV4ZXMoVmlzaXRvciYgdmlz
aXRvcikgY29uc3QKIHsKICAgICBMb2NrZXI8TG9jaz4gbG9ja2VyKG1fcmVmZXJlbmNlZEluZGV4
TG9jayk7CiAgICAgZm9yIChhdXRvJiBpbmRleCA6IG1fcmVmZXJlbmNlZEluZGV4ZXMudmFsdWVz
KCkpCkBAIC03MzcsNiArNzM4LDkgQEAgdm9pZCBJREJPYmplY3RTdG9yZTo6dmlzaXRSZWZlcmVu
Y2VkSW5kZQogICAgICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QoaW5kZXguZ2V0KCkpOwogfQog
Cit0ZW1wbGF0ZSB2b2lkIElEQk9iamVjdFN0b3JlOjp2aXNpdFJlZmVyZW5jZWRJbmRleGVzKEFi
c3RyYWN0U2xvdFZpc2l0b3ImKSBjb25zdDsKK3RlbXBsYXRlIHZvaWQgSURCT2JqZWN0U3RvcmU6
OnZpc2l0UmVmZXJlbmNlZEluZGV4ZXMoU2xvdFZpc2l0b3ImKSBjb25zdDsKKwogdm9pZCBJREJP
YmplY3RTdG9yZTo6cmVuYW1lUmVmZXJlbmNlZEluZGV4KElEQkluZGV4JiBpbmRleCwgY29uc3Qg
U3RyaW5nJiBuZXdOYW1lKQogewogICAgIExPRyhJbmRleGVkREIsICJJREJPYmplY3RTdG9yZTo6
cmVuYW1lUmVmZXJlbmNlZEluZGV4Iik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmgJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIxIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMTA5LDcgKzEwOSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHJlZigpOwogICAgIHZvaWQg
ZGVyZWYoKTsKIAotICAgIHZvaWQgdmlzaXRSZWZlcmVuY2VkSW5kZXhlcyhKU0M6OlNsb3RWaXNp
dG9yJikgY29uc3Q7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCB2aXNpdFJl
ZmVyZW5jZWRJbmRleGVzKFZpc2l0b3ImKSBjb25zdDsKICAgICB2b2lkIHJlbmFtZVJlZmVyZW5j
ZWRJbmRleChJREJJbmRleCYsIGNvbnN0IFN0cmluZyYgbmV3TmFtZSk7CiAKIHByaXZhdGU6Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNh
Y3Rpb24uY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xNDU1LDcgKzE0
NTUsOCBAQCB2b2lkIElEQlRyYW5zYWN0aW9uOjpjb25uZWN0aW9uQ2xvc2VkRnJvCiAgICAgZmly
ZU9uQWJvcnQoKTsKIH0KIAotdm9pZCBJREJUcmFuc2FjdGlvbjo6dmlzaXRSZWZlcmVuY2VkT2Jq
ZWN0U3RvcmVzKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0Cit0ZW1wbGF0ZTx0eXBl
bmFtZSBWaXNpdG9yPgordm9pZCBJREJUcmFuc2FjdGlvbjo6dmlzaXRSZWZlcmVuY2VkT2JqZWN0
U3RvcmVzKFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0CiB7CiAgICAgTG9ja2VyPExvY2s+IGxvY2tl
cihtX3JlZmVyZW5jZWRPYmplY3RTdG9yZUxvY2spOwogICAgIGZvciAoYXV0byYgb2JqZWN0U3Rv
cmUgOiBtX3JlZmVyZW5jZWRPYmplY3RTdG9yZXMudmFsdWVzKCkpCkBAIC0xNDY0LDYgKzE0NjUs
OSBAQCB2b2lkIElEQlRyYW5zYWN0aW9uOjp2aXNpdFJlZmVyZW5jZWRPYmplCiAgICAgICAgIHZp
c2l0b3IuYWRkT3BhcXVlUm9vdChvYmplY3RTdG9yZS5nZXQoKSk7CiB9CiAKK3RlbXBsYXRlIHZv
aWQgSURCVHJhbnNhY3Rpb246OnZpc2l0UmVmZXJlbmNlZE9iamVjdFN0b3JlcyhKU0M6OkFic3Ry
YWN0U2xvdFZpc2l0b3ImKSBjb25zdDsKK3RlbXBsYXRlIHZvaWQgSURCVHJhbnNhY3Rpb246OnZp
c2l0UmVmZXJlbmNlZE9iamVjdFN0b3JlcyhKU0M6OlNsb3RWaXNpdG9yJikgY29uc3Q7CisKIHZv
aWQgSURCVHJhbnNhY3Rpb246OmhhbmRsZVBlbmRpbmdPcGVyYXRpb25zKCkKIHsKICAgICBBU1NF
UlQoY2FuQ3VycmVudFRocmVhZEFjY2Vzc1RocmVhZExvY2FsRGF0YShtX2RhdGFiYXNlLT5vcmln
aW5UaHJlYWQoKSkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
VHJhbnNhY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJUcmFuc2FjdGlvbi5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE0OSw3
ICsxNDksNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGNvbm5lY3Rpb25DbG9zZWRGcm9tU2VydmVy
KGNvbnN0IElEQkVycm9yJik7CiAKLSAgICB2b2lkIHZpc2l0UmVmZXJlbmNlZE9iamVjdFN0b3Jl
cyhKU0M6OlNsb3RWaXNpdG9yJikgY29uc3Q7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRv
cj4gdm9pZCB2aXNpdFJlZmVyZW5jZWRPYmplY3RTdG9yZXMoVmlzaXRvciYpIGNvbnN0OwogCiAg
ICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIHN0ZDo6YXRvbWljPHVuc2lnbmVkPiBudW1iZXJPZklE
QlRyYW5zYWN0aW9uczsKIApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9B
dWRpb0J1ZmZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJh
dWRpby9BdWRpb0J1ZmZlci5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViYXVkaW8vQXVkaW9CdWZmZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYg
KzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTU0LDEyICsx
NTQsMTYgQEAgRXhjZXB0aW9uT3I8SlNDOjpKU1ZhbHVlPiBBdWRpb0J1ZmZlcjo6ZwogICAgIHJl
dHVybiBjb25zdHJ1Y3RKU0FycmF5KCk7CiB9CiAKLXZvaWQgQXVkaW9CdWZmZXI6OnZpc2l0Q2hh
bm5lbFdyYXBwZXJzKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBWaXNpdG9yPgordm9pZCBBdWRpb0J1ZmZlcjo6dmlzaXRDaGFubmVsV3JhcHBlcnMoVmlzaXRv
ciYgdmlzaXRvcikKIHsKICAgICBmb3IgKGF1dG8mIGNoYW5uZWxXcmFwcGVyIDogbV9jaGFubmVs
V3JhcHBlcnMpCiAgICAgICAgIGNoYW5uZWxXcmFwcGVyLnZpc2l0KHZpc2l0b3IpOwogfQogCit0
ZW1wbGF0ZSB2b2lkIEF1ZGlvQnVmZmVyOjp2aXNpdENoYW5uZWxXcmFwcGVycyhKU0M6OkFic3Ry
YWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgQXVkaW9CdWZmZXI6OnZpc2l0Q2hhbm5l
bFdyYXBwZXJzKEpTQzo6U2xvdFZpc2l0b3ImKTsKKwogUmVmUHRyPEZsb2F0MzJBcnJheT4gQXVk
aW9CdWZmZXI6OmNoYW5uZWxEYXRhKHVuc2lnbmVkIGNoYW5uZWxJbmRleCkKIHsKICAgICBpZiAo
Y2hhbm5lbEluZGV4ID49IG1fY2hhbm5lbHMuc2l6ZSgpKQpJbmRleDogU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJhdWRpby9BdWRpb0J1ZmZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9CdWZmZXIuaAkocmV2aXNpb24gMjcyODMwKQorKysg
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0J1ZmZlci5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIxIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtNzUsNyArNzUsNyBAQCBwdWJsaWM6CiAKICAgICBzaXplX3QgbWVtb3J5Q29zdCgpIGNvbnN0
OwogCi0gICAgdm9pZCB2aXNpdENoYW5uZWxXcmFwcGVycyhKU0M6OlNsb3RWaXNpdG9yJik7Cisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCB2aXNpdENoYW5uZWxXcmFwcGVycyhW
aXNpdG9yJik7CiAgICAgCiBwcml2YXRlOgogICAgIEF1ZGlvQnVmZmVyKHVuc2lnbmVkIG51bWJl
ck9mQ2hhbm5lbHMsIHNpemVfdCBsZW5ndGgsIGZsb2F0IHNhbXBsZVJhdGUsIExlZ2FjeVByZXZl
bnREZXRhY2hpbmcgPSBMZWdhY3lQcmV2ZW50RGV0YWNoaW5nOjpObyk7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9ET01HQ091dHB1dENvbnN0cmFpbnQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0RPTUdDT3V0cHV0Q29uc3RyYWludC5jcHAJ
KHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0RPTUdDT3V0
cHV0Q29uc3RyYWludC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDcgKzQ5LDggQEAgRE9NR0NP
dXRwdXRDb25zdHJhaW50Ojp+RE9NR0NPdXRwdXRDb25zdAogewogfQogCi12b2lkIERPTUdDT3V0
cHV0Q29uc3RyYWludDo6ZXhlY3V0ZUltcGwoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0
ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBET01HQ091dHB1dENvbnN0cmFpbnQ6OmV4ZWN1dGVJ
bXBsSW1wbChWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEhlYXAmIGhlYXAgPSBtX3ZtLmhlYXA7
CiAgICAgCkBAIC02MCwxNSArNjEsMTkgQEAgdm9pZCBET01HQ091dHB1dENvbnN0cmFpbnQ6OmV4
ZWN1dGVJbXBsKAogICAgIAogICAgIG1fY2xpZW50RGF0YS5mb3JFYWNoT3V0cHV0Q29uc3RyYWlu
dFNwYWNlKAogICAgICAgICBbJl0gKFN1YnNwYWNlJiBzdWJzcGFjZSkgewotICAgICAgICAgICAg
YXV0byBmdW5jID0gW10gKFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBIZWFwQ2VsbCogaGVhcENlbGws
IEhlYXBDZWxsOjpLaW5kKSB7CisgICAgICAgICAgICBhdXRvIGZ1bmMgPSBbXSAoVmlzaXRvciYg
dmlzaXRvciwgSGVhcENlbGwqIGhlYXBDZWxsLCBIZWFwQ2VsbDo6S2luZCkgewogICAgICAgICAg
ICAgICAgIFNldFJvb3RNYXJrUmVhc29uU2NvcGUgcm9vdFNjb3BlKHZpc2l0b3IsIFJvb3RNYXJr
UmVhc29uOjpET01HQ091dHB1dCk7CiAgICAgICAgICAgICAgICAgSlNDZWxsKiBjZWxsID0gc3Rh
dGljX2Nhc3Q8SlNDZWxsKj4oaGVhcENlbGwpOwogICAgICAgICAgICAgICAgIGNlbGwtPm1ldGhv
ZFRhYmxlKHZpc2l0b3Iudm0oKSktPnZpc2l0T3V0cHV0Q29uc3RyYWludHMoY2VsbCwgdmlzaXRv
cik7CiAgICAgICAgICAgICB9OwogICAgICAgICAgICAgCi0gICAgICAgICAgICB2aXNpdG9yLmFk
ZFBhcmFsbGVsQ29uc3RyYWludFRhc2soc3Vic3BhY2UuZm9yRWFjaE1hcmtlZENlbGxJblBhcmFs
bGVsKGZ1bmMpKTsKKyAgICAgICAgICAgIFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoVmlzaXRvciYp
Pj4gdGFzayA9IHN1YnNwYWNlLnRlbXBsYXRlIGZvckVhY2hNYXJrZWRDZWxsSW5QYXJhbGxlbDxW
aXNpdG9yPihmdW5jKTsKKyAgICAgICAgICAgIHZpc2l0b3IuYWRkUGFyYWxsZWxDb25zdHJhaW50
VGFzayh0YXNrKTsKICAgICAgICAgfSk7CiB9CiAgICAgICAgIAordm9pZCBET01HQ091dHB1dENv
bnN0cmFpbnQ6OmV4ZWN1dGVJbXBsKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsgZXhl
Y3V0ZUltcGxJbXBsKHZpc2l0b3IpOyB9Cit2b2lkIERPTUdDT3V0cHV0Q29uc3RyYWludDo6ZXhl
Y3V0ZUltcGwoU2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsgZXhlY3V0ZUltcGxJbXBsKHZpc2l0b3Ip
OyB9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvRE9NR0NPdXRwdXRDb25zdHJhaW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvRE9NR0NPdXRwdXRDb25zdHJhaW50LmgJKHJldmlzaW9uIDI3Mjgz
MCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0RPTUdDT3V0cHV0Q29uc3RyYWludC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
Ny0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtNDIsOSArNDIsMTIgQEAgcHVibGljOgogICAgIH5ET01HQ091
dHB1dENvbnN0cmFpbnQoKTsKICAgICAKIHByb3RlY3RlZDoKKyAgICB2b2lkIGV4ZWN1dGVJbXBs
KEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpIG92ZXJyaWRlOwogICAgIHZvaWQgZXhlY3V0ZUlt
cGwoSlNDOjpTbG90VmlzaXRvciYpIG92ZXJyaWRlOwogCiBwcml2YXRlOgorICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgZXhlY3V0ZUltcGxJbXBsKFZpc2l0b3ImKTsKKwogICAg
IEpTQzo6Vk0mIG1fdm07CiAgICAgSlNWTUNsaWVudERhdGEmIG1fY2xpZW50RGF0YTsKICAgICB1
aW50NjRfdCBtX2xhc3RFeGVjdXRpb25WZXJzaW9uOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNBYm9ydENvbnRyb2xsZXJDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQWJvcnRDb250cm9sbGVyQ3VzdG9tLmNwcAkocmV2aXNp
b24gMjcyODMwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNBYm9ydENvbnRyb2xs
ZXJDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSogQ29weXJp
Z2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyogQ29weXJpZ2h0
IChDKSAyMDE5LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogKgogKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0yOCw5ICsyOCwxMiBAQAogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLXZvaWQgSlNBYm9ydENvbnRyb2xsZXI6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpT
Qzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9p
ZCBKU0Fib3J0Q29udHJvbGxlcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlz
aXRvcikKIHsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QoJndyYXBwZWQoKS5zaWduYWwoKSk7
CiB9CiAKK0RFRklORV9WSVNJVF9BRERJVElPTkFMX0NISUxEUkVOKEpTQWJvcnRDb250cm9sbGVy
KTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNBYm9ydFNpZ25hbEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNBYm9ydFNpZ25hbEN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjgzMCkK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQWJvcnRTaWduYWxDdXN0b20uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSogQ29weXJpZ2h0IChDKSAyMDE5IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyogQ29weXJpZ2h0IChDKSAyMDE5LTIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogKgogKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0yOCw3ICsyOCw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotYm9vbCBKU0Fi
b3J0U2lnbmFsT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpT
Qzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvciwgY29u
c3QgY2hhcioqIHJlYXNvbikKK2Jvb2wgSlNBYm9ydFNpZ25hbE93bmVyOjppc1JlYWNoYWJsZUZy
b21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIEpT
Qzo6QWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikKIHsK
ICAgICBhdXRvJiBhYm9ydFNpZ25hbCA9IEpTQzo6anNDYXN0PEpTQWJvcnRTaWduYWwqPihoYW5k
bGUuc2xvdCgpLT5hc0NlbGwoKSktPndyYXBwZWQoKTsKICAgICBpZiAoYWJvcnRTaWduYWwuaXNG
aXJpbmdFdmVudExpc3RlbmVycygpKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0F0dHJDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTQXR0ckN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTQXR0ckN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MzMsMTAgKzMzLDEzIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBKU0F0dHI6OnZp
c2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0
ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0F0dHI6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVu
KFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgaWYgKEVsZW1lbnQqIGVsZW1lbnQgPSB3cmFwcGVk
KCkub3duZXJFbGVtZW50KCkpCiAgICAgICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChyb290KGVs
ZW1lbnQpKTsKIH0KIAorREVGSU5FX1ZJU0lUX0FERElUSU9OQUxfQ0hJTERSRU4oSlNBdHRyKTsK
KwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNBdWRpb0J1ZmZlckN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNBdWRpb0J1ZmZlckN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXVkaW9CdWZmZXJDdXN0b20uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAtMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTMxLDExICszMSwxNCBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogdXNpbmcgbmFt
ZXNwYWNlIEpTQzsKIAotdm9pZCBKU0F1ZGlvQnVmZmVyOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJl
bihTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lk
IEpTQXVkaW9CdWZmZXI6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3Ip
CiB7CiAgICAgd3JhcHBlZCgpLnZpc2l0Q2hhbm5lbFdyYXBwZXJzKHZpc2l0b3IpOwogfQogCitE
RUZJTkVfVklTSVRfQURESVRJT05BTF9DSElMRFJFTihKU0F1ZGlvQnVmZmVyKTsKKwogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQl9BVURJTykKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXVkaW9UcmFja0N1c3RvbS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNBdWRpb1RyYWNrQ3VzdG9tLmNwcAko
cmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNBdWRpb1Ry
YWNrQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDExLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNSwxMSArMzUsMTQgQEAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKLXZvaWQgSlNBdWRpb1RyYWNrOjp2aXNp
dEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVu
YW1lIFZpc2l0b3I+Cit2b2lkIEpTQXVkaW9UcmFjazo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4o
VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qocm9vdCgmd3Jh
cHBlZCgpKSk7CiB9CiAKK0RFRklORV9WSVNJVF9BRERJVElPTkFMX0NISUxEUkVOKEpTQXVkaW9U
cmFjayk7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0F1ZGlvVHJhY2tMaXN0Q3VzdG9tLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0F1ZGlvVHJhY2tMaXN0Q3VzdG9tLmNw
cAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNBdWRp
b1RyYWNrTGlzdEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzYsMTEgKzM2LDE0IEBACiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCi12b2lkIEpTQXVkaW9UcmFj
a0xpc3Q6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVt
cGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNBdWRpb1RyYWNrTGlzdDo6dmlzaXRBZGRp
dGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB2aXNpdG9yLmFkZE9wYXF1
ZVJvb3Qocm9vdCh3cmFwcGVkKCkuZWxlbWVudCgpKSk7CiB9CiAKK0RFRklORV9WSVNJVF9BRERJ
VElPTkFMX0NISUxEUkVOKEpTQXVkaW9UcmFja0xpc3QpOworCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCiAKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNBdWRpb1dv
cmtsZXRQcm9jZXNzb3JDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTQXVkaW9Xb3JrbGV0UHJvY2Vzc29yQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcy
ODMwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNBdWRpb1dvcmtsZXRQcm9jZXNz
b3JDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMjAtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMxLDcgKzMxLDggQEAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKLXZvaWQgSlNBdWRpb1dvcmtsZXRQcm9jZXNz
b3I6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxh
dGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNBdWRpb1dvcmtsZXRQcm9jZXNzb3I6OnZpc2l0
QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0byYgcHJvY2Vz
c29yID0gd3JhcHBlZCgpOwogICAgIHByb2Nlc3Nvci5qc0lucHV0c1dyYXBwZXIoKS52aXNpdCh2
aXNpdG9yKTsKQEAgLTM5LDYgKzQwLDggQEAgdm9pZCBKU0F1ZGlvV29ya2xldFByb2Nlc3Nvcjo6
dmlzaXRBZGRpdAogICAgIHByb2Nlc3Nvci5qc1BhcmFtVmFsdWVzV3JhcHBlcigpLnZpc2l0KHZp
c2l0b3IpOwogfQogCitERUZJTkVfVklTSVRfQURESVRJT05BTF9DSElMRFJFTihKU0F1ZGlvV29y
a2xldFByb2Nlc3Nvcik7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVO
QUJMRShXRUJfQVVESU8pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NTU1J1
bGVDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
Q1NTUnVsZUN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTQ1NTUnVsZUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTEsMTEg
KzUxLDE0IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCi12
b2lkIEpTQ1NTUnVsZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0
b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0NTU1J1bGU6OnZpc2l0QWRk
aXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgdmlzaXRvci5hZGRPcGFx
dWVSb290KHJvb3QoJndyYXBwZWQoKSkpOwogfQogCitERUZJTkVfVklTSVRfQURESVRJT05BTF9D
SElMRFJFTihKU0NTU1J1bGUpOworCiBKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNHbG9iYWxP
YmplY3QqLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWY8Q1NTUnVsZT4mJiBy
dWxlKQogewogICAgIHN3aXRjaCAocnVsZS0+dHlwZSgpKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0NTU1J1bGVMaXN0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NTU1J1bGVMaXN0Q3VzdG9tLmNwcAkocmV2aXNpb24g
MjcyODMwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDU1NSdWxlTGlzdEN1c3Rv
bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDA5LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHQgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDktMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodCByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzYsNyArMzYsNyBAQAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAotYm9vbCBKU0NTU1J1bGVMaXN0T3duZXI6OmlzUmVh
Y2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2
b2lkKiwgU2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCitib29sIEpT
Q1NTUnVsZUxpc3RPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8
SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9y
LCBjb25zdCBjaGFyKiogcmVhc29uKQogewogICAgIEpTQ1NTUnVsZUxpc3QqIGpzQ1NTUnVsZUxp
c3QgPSBqc0Nhc3Q8SlNDU1NSdWxlTGlzdCo+KGhhbmRsZS5zbG90KCktPmFzQ2VsbCgpKTsKICAg
ICBpZiAoIWpzQ1NTUnVsZUxpc3QtPmhhc0N1c3RvbVByb3BlcnRpZXMoanNDU1NSdWxlTGlzdC0+
dm0oKSkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NTU1N0eWxlRGVjbGFy
YXRpb25DdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTQ1NTU3R5bGVEZWNsYXJhdGlvbkN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ1NTU3R5bGVEZWNsYXJhdGlvbkN1c3RvbS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA3
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDA3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC01MSw5ICs1MSwxMiBAQCB2b2lkKiByb290KENTU1N0eWxlRGVj
bGFyYXRpb24qIHN0eWxlKQogICAgIHJldHVybiBzdHlsZTsKIH0KIAotdm9pZCBKU0NTU1N0eWxl
RGVjbGFyYXRpb246OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9y
KQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNDU1NTdHlsZURlY2xhcmF0aW9u
Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHZpc2l0
b3IuYWRkT3BhcXVlUm9vdChyb290KCZ3cmFwcGVkKCkpKTsKIH0KIAorREVGSU5FX1ZJU0lUX0FE
RElUSU9OQUxfQ0hJTERSRU4oSlNDU1NTdHlsZURlY2xhcmF0aW9uKTsKKwogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDYWxsYmFja0Rh
dGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2FsbGJh
Y2tEYXRhLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNDYWxsYmFja0RhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA5LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtOTUsMTIgKzk1
LDE2IEBAIEpTVmFsdWUgSlNDYWxsYmFja0RhdGE6Omludm9rZUNhbGxiYWNrKEoKICAgICByZXR1
cm4gcmVzdWx0OwogfQogCi12b2lkIEpTQ2FsbGJhY2tEYXRhV2Vhazo6dmlzaXRKU0Z1bmN0aW9u
KEpTQzo6U2xvdFZpc2l0b3ImIHZpc3RvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2
b2lkIEpTQ2FsbGJhY2tEYXRhV2Vhazo6dmlzaXRKU0Z1bmN0aW9uKFZpc2l0b3ImIHZpc2l0b3Ip
CiB7Ci0gICAgdmlzdG9yLmFwcGVuZChtX2NhbGxiYWNrKTsKKyAgICB2aXNpdG9yLmFwcGVuZCht
X2NhbGxiYWNrKTsKIH0KIAotYm9vbCBKU0NhbGxiYWNrRGF0YVdlYWs6OldlYWtPd25lcjo6aXNS
ZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCog
Y29udGV4dCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCit0ZW1w
bGF0ZSB2b2lkIEpTQ2FsbGJhY2tEYXRhV2Vhazo6dmlzaXRKU0Z1bmN0aW9uKEpTQzo6QWJzdHJh
Y3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBKU0NhbGxiYWNrRGF0YVdlYWs6OnZpc2l0
SlNGdW5jdGlvbihKU0M6OlNsb3RWaXNpdG9yJik7CisKK2Jvb2wgSlNDYWxsYmFja0RhdGFXZWFr
OjpXZWFrT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6
VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNv
bnN0IGNoYXIqKiByZWFzb24pCiB7CiAgICAgaWYgKFVOTElLRUxZKHJlYXNvbikpCiAgICAgICAg
ICpyZWFzb24gPSAiQ29udGV4dCBpcyBvcGFxdWUgcm9vdCI7IC8vIEZJWE1FOiB3aGF0IGlzIHRo
ZSBjb250ZXh0LgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDYWxsYmFja0Rh
dGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NhbGxiYWNr
RGF0YS5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0NhbGxiYWNrRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAwNy0yMDA5LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTEzLDExICsxMTMsMTEg
QEAgcHVibGljOgogICAgICAgICByZXR1cm4gSlNDYWxsYmFja0RhdGE6Omludm9rZUNhbGxiYWNr
KCpnbG9iYWxPYmplY3QsIGNhbGxiYWNrKCksIHRoaXNWYWx1ZSwgYXJncywgY2FsbGJhY2tUeXBl
LCBmdW5jdGlvbk5hbWUsIHJldHVybmVkRXhjZXB0aW9uKTsKICAgICB9CiAKLSAgICB2b2lkIHZp
c2l0SlNGdW5jdGlvbihKU0M6OlNsb3RWaXNpdG9yJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
VmlzaXRvcj4gdm9pZCB2aXNpdEpTRnVuY3Rpb24oVmlzaXRvciYpOwogCiBwcml2YXRlOgogICAg
IGNsYXNzIFdlYWtPd25lciA6IHB1YmxpYyBKU0M6OldlYWtIYW5kbGVPd25lciB7Ci0gICAgICAg
IGJvb2wgaXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3du
Piwgdm9pZCogY29udGV4dCwgSlNDOjpTbG90VmlzaXRvciYsIGNvbnN0IGNoYXIqKikgb3ZlcnJp
ZGU7CisgICAgICAgIGJvb2wgaXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8
SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiwg
Y29uc3QgY2hhcioqKSBvdmVycmlkZTsKICAgICB9OwogICAgIFdlYWtPd25lciBtX3dlYWtPd25l
cjsKICAgICBKU0M6OldlYWs8SlNDOjpKU09iamVjdD4gbV9jYWxsYmFjazsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQ3VzdG9tLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NhbnZhc1JlbmRl
cmluZ0NvbnRleHQyREN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQ3VzdG9tLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAx
NyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYt
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
QEAgLTI0LDcgKzI0LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1ib29sIEpTQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJET3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6
SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgSlNDOjpTbG90VmlzaXRvciYgdmlz
aXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikKK2Jvb2wgSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0
MkRPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtu
b3duPiBoYW5kbGUsIHZvaWQqLCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNv
bnN0IGNoYXIqKiByZWFzb24pCiB7CiAgICAgaWYgKFVOTElLRUxZKHJlYXNvbikpCiAgICAgICAg
ICpyZWFzb24gPSAiQ2FudmFzIGlzIG9wYXF1ZSByb290IjsKQEAgLTM0LDkgKzM0LDEyIEBAIGJv
b2wgSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRPd25lcjo6aXMKICAgICByZXR1cm4gdmlzaXRv
ci5jb250YWluc09wYXF1ZVJvb3Qocm9vdCk7CiB9CiAKLXZvaWQgSlNDYW52YXNSZW5kZXJpbmdD
b250ZXh0MkQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0
b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0NhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyRDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAg
ICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qocm9vdCh3cmFwcGVkKCkuY2FudmFzKCkpKTsKIH0KIAor
REVGSU5FX1ZJU0lUX0FERElUSU9OQUxfQ0hJTERSRU4oSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0
MkQpOworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0N1c3RvbUV2ZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0N1c3RvbUV2ZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gMjcyODMw
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDdXN0b21FdmVudEN1c3RvbS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1
LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE1LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC00MiwxMCArNDIsMTMgQEAgSlNDOjpKU1ZhbHVlIEpTQ3VzdG9t
RXZlbnQ6OmRldGFpbChKU0M6OgogICAgIH0pOwogfQogCi12b2lkIEpTQ3VzdG9tRXZlbnQ6OnZp
c2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0
ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0N1c3RvbUV2ZW50Ojp2aXNpdEFkZGl0aW9uYWxD
aGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHdyYXBwZWQoKS5kZXRhaWwoKS52aXNp
dCh2aXNpdG9yKTsKICAgICB3cmFwcGVkKCkuY2FjaGVkRGV0YWlsKCkudmlzaXQodmlzaXRvcik7
CiB9CiAKK0RFRklORV9WSVNJVF9BRERJVElPTkFMX0NISUxEUkVOKEpTQ3VzdG9tRXZlbnQpOwor
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0RPTUJ1aWx0aW5Db25zdHJ1Y3RvckJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQnVpbHRpbkNvbnN0cnVjdG9yQmFzZS5jcHAJKHJldmlz
aW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQnVpbHRpbkNv
bnN0cnVjdG9yQmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICog
IENvcHlyaWdodCAoQykgMTk5OS0yMDAxIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCi0g
KiAgQ29weXJpZ2h0IChDKSAyMDA0LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogIENvcHlyaWdodCAoQykgMjAwNC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqICBDb3B5cmlnaHQgKEMpIDIwMDcgU2FtdWVsIFdlaW5pZyA8c2FtQHdlYmtpdC5v
cmc+CiAgKiAgQ29weXJpZ2h0IChDKSAyMDEzIE1pY2hhZWwgUHJ1ZXR0IDxtaWNoYWVsQDY4ay5v
cmc+CiAgKgpAQCAtNDUsNyArNDUsOCBAQCB2b2lkIEpTRE9NQnVpbHRpbkNvbnN0cnVjdG9yQmFz
ZTo6Y2FsbEZ1CiAgICAgSlNDOjpjYWxsKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAmZnVuY3Rpb24s
IGNhbGxEYXRhLCAmdGhpc09iamVjdCwgYXJndW1lbnRzKTsKIH0KIAotdm9pZCBKU0RPTUJ1aWx0
aW5Db25zdHJ1Y3RvckJhc2U6OnZpc2l0Q2hpbGRyZW4oSlNDOjpKU0NlbGwqIGNlbGwsIEpTQzo6
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBK
U0RPTUJ1aWx0aW5Db25zdHJ1Y3RvckJhc2U6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQzo6SlNDZWxs
KiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nh
c3Q8SlNET01CdWlsdGluQ29uc3RydWN0b3JCYXNlKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09C
SkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNTMsNiArNTQsOCBAQCB2b2lk
IEpTRE9NQnVpbHRpbkNvbnN0cnVjdG9yQmFzZTo6dmlzaXRDCiAgICAgdmlzaXRvci5hcHBlbmQo
dGhpc09iamVjdC0+bV9pbml0aWFsaXplRnVuY3Rpb24pOwogfQogCitERUZJTkVfVklTSVRfQ0hJ
TERSRU4oSlNET01CdWlsdGluQ29uc3RydWN0b3JCYXNlKTsKKwogSlNDOjpJc29TdWJzcGFjZSog
SlNET01CdWlsdGluQ29uc3RydWN0b3JCYXNlOjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0p
CiB7CiAgICAgcmV0dXJuICZzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERh
dGEpLT5kb21CdWlsdGluQ29uc3RydWN0b3JTcGFjZSgpOwpJbmRleDogU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNET01CdWlsdGluQ29uc3RydWN0b3JCYXNlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CdWlsdGluQ29uc3RydWN0b3JCYXNlLmgJ
KHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQnVp
bHRpbkNvbnN0cnVjdG9yQmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoK
ICAqICBDb3B5cmlnaHQgKEMpIDIwMTUsIDIwMTYgQ2Fub24gSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwpAQCAtNDIsNyArNDIsNyBAQCBwcm90ZWN0ZWQ6
CiAgICAgewogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDOjpKU0Nl
bGwqLCBKU0M6OlNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAog
ICAgIEpTQzo6SlNGdW5jdGlvbiogaW5pdGlhbGl6ZUZ1bmN0aW9uKCk7CiAgICAgdm9pZCBzZXRJ
bml0aWFsaXplRnVuY3Rpb24oSlNDOjpWTSYsIEpTQzo6SlNGdW5jdGlvbiYpOwpJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01HbG9iYWxPYmplY3QuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0LmNwcAkocmV2
aXNpb24gMjcyODMwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01HbG9iYWxP
YmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAwOC0yMDE4IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAwOC0yMDIxIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjM4LDcgKzIzOCw4IEBAIFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqIEpTRE9NR2xvYmFsT2JqZWMKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAot
dm9pZCBKU0RPTUdsb2JhbE9iamVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNET01H
bG9iYWxPYmplY3Q6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlz
aXRvcikKIHsKICAgICBKU0RPTUdsb2JhbE9iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0RP
TUdsb2JhbE9iamVjdCo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhp
c09iamVjdCwgaW5mbygpKTsKQEAgLTI2MCw2ICsyNjEsOCBAQCB2b2lkIEpTRE9NR2xvYmFsT2Jq
ZWN0Ojp2aXNpdENoaWxkcmVuKEpTCiAgICAgdGhpc09iamVjdC0+bV9idWlsdGluSW50ZXJuYWxG
dW5jdGlvbnMudmlzaXQodmlzaXRvcik7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU0RP
TUdsb2JhbE9iamVjdCk7CisKIHZvaWQgSlNET01HbG9iYWxPYmplY3Q6OnByb21pc2VSZWplY3Rp
b25UcmFja2VyKEpTR2xvYmFsT2JqZWN0KiBqc0dsb2JhbE9iamVjdCwgSlNQcm9taXNlKiBwcm9t
aXNlLCBKU1Byb21pc2VSZWplY3Rpb25PcGVyYXRpb24gb3BlcmF0aW9uKQogewogICAgIC8vIGh0
dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3dlYmFwcGFwaXMuaHRtbCN0aGUt
aG9zdHByb21pc2VyZWplY3Rpb250cmFja2VyLWltcGxlbWVudGF0aW9uCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0LmgJKHJldmlzaW9uIDI3
MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4
LTIwMTggQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDA4LTIwMjEgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC02OSw3ICs2OSw3IEBAIHB1YmxpYzoKICAgICAvLyBNYWtlIGJp
bmRpbmcgY29kZSBnZW5lcmF0aW9uIGVhc2llci4KICAgICBKU0RPTUdsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0KCkgeyByZXR1cm4gdGhpczsgfQogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGls
ZHJlbihKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lU
X0NISUxEUkVOOwogCiAgICAgRE9NV3JhcHBlcldvcmxkJiB3b3JsZCgpIHsgcmV0dXJuIG1fd29y
bGQuZ2V0KCk7IH0KICAgICBib29sIHdvcmxkSXNOb3JtYWwoKSBjb25zdCB7IHJldHVybiBtX3dv
cmxkSXNOb3JtYWw7IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR3Vh
cmRlZE9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
RE9NR3VhcmRlZE9iamVjdC5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0RPTUd1YXJkZWRPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00MCw3ICs0MCw3
IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaXNTdXNwZW5kZWQoKSBjb25zdCB7IHJldHVybiAhbV9n
dWFyZGVkIHx8ICFjYW5JbnZva2VDYWxsYmFjaygpOyB9IC8vIFRoZSB3cmFwcGVyIHdvcmxkIGhh
cyBnb25lIGF3YXkgb3IgYWN0aXZlIERPTSBvYmplY3RzIGhhdmUgYmVlbiBzdXNwZW5kZWQuCiAK
LSAgICB2b2lkIHZpc2l0QWdncmVnYXRlKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsgdmlz
aXRvci5hcHBlbmQobV9ndWFyZGVkKTsgfQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+
IHZvaWQgdmlzaXRBZ2dyZWdhdGUoVmlzaXRvciYgdmlzaXRvcikgeyB2aXNpdG9yLmFwcGVuZCht
X2d1YXJkZWQpOyB9CiAKICAgICBKU0M6OkpTVmFsdWUgZ3VhcmRlZE9iamVjdCgpIGNvbnN0IHsg
cmV0dXJuIG1fZ3VhcmRlZC5nZXQoKTsgfQogICAgIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QoKSBjb25zdCB7IHJldHVybiBtX2dsb2JhbE9iamVjdC5nZXQoKTsgfQpJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01RdWFkQ3VzdG9tLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVF1YWRDdXN0b20uY3BwCShyZXZpc2lv
biAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVF1YWRDdXN0b20u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTMzLDcgKzMzLDggQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVz
aW5nIG5hbWVzcGFjZSBKU0M7CiAKLXZvaWQgSlNET01RdWFkOjp2aXNpdEFkZGl0aW9uYWxDaGls
ZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2
b2lkIEpTRE9NUXVhZDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikK
IHsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QoY29uc3RfY2FzdDxET01Qb2ludCo+KCZ3cmFw
cGVkKCkucDEoKSkpOwogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChjb25zdF9jYXN0PERPTVBv
aW50Kj4oJndyYXBwZWQoKS5wMigpKSk7CkBAIC00MSw0ICs0Miw2IEBAIHZvaWQgSlNET01RdWFk
Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbigKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QoY29u
c3RfY2FzdDxET01Qb2ludCo+KCZ3cmFwcGVkKCkucDQoKSkpOwogfQogCi19CitERUZJTkVfVklT
SVRfQURESVRJT05BTF9DSElMRFJFTihKU0RPTVF1YWQpOworCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0N1c3RvbS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dD
dXN0b20uY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0RPTVdpbmRvd0N1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgpAQCAtMTE2LDcgKzExNiw4IEBAIEpTQ19ERUZJTkVfQ1VTVE9N
X0dFVFRFUihqc0RPTVdpbmRvd0luc3QKICAgICByZXR1cm4gbm9uQ2FjaGluZ1N0YXRpY0Z1bmN0
aW9uR2V0dGVySW1wbDxqc0RPTVdpbmRvd0luc3RhbmNlRnVuY3Rpb25fcG9zdE1lc3NhZ2UsIDI+
KGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lKTsKIH0KIAotdm9pZCBKU0RPTVdpbmRvdzo6dmlz
aXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBl
bmFtZSBWaXNpdG9yPgordm9pZCBKU0RPTVdpbmRvdzo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4o
VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBpZiAoRnJhbWUqIGZyYW1lID0gd3JhcHBlZCgpLmZy
YW1lKCkpCiAgICAgICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChmcmFtZSk7CkBAIC0xMjksNiAr
MTMwLDggQEAgdm9pZCBKU0RPTVdpbmRvdzo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZQogICAgIHdy
YXBwZWQoKS52aXNpdEpTRXZlbnRMaXN0ZW5lcnModmlzaXRvcik7CiB9CiAKK0RFRklORV9WSVNJ
VF9BRERJVElPTkFMX0NISUxEUkVOKEpTRE9NV2luZG93KTsKKwogI2lmIEVOQUJMRShVU0VSX01F
U1NBR0VfSEFORExFUlMpCiBKU0NfREVGSU5FX0NVU1RPTV9HRVRURVIoanNET01XaW5kb3dfd2Vi
a2l0LCAoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVl
IHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKSkKIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTRGVwcmVjYXRlZENTU09NVmFsdWVDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGVwcmVjYXRlZENTU09NVmFsdWVDdXN0b20uY3Bw
CShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RlcHJl
Y2F0ZWRDU1NPTVZhbHVlQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM1LDcgKzM1LDcg
QEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKLWJvb2wgSlNE
ZXByZWNhdGVkQ1NTT01WYWx1ZU93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6
OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIFNsb3RWaXNpdG9yJiB2aXNpdG9y
LCBjb25zdCBjaGFyKiogcmVhc29uKQorYm9vbCBKU0RlcHJlY2F0ZWRDU1NPTVZhbHVlT3duZXI6
OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFu
ZGxlLCB2b2lkKiwgQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJl
YXNvbikKIHsKICAgICBKU0RlcHJlY2F0ZWRDU1NPTVZhbHVlKiBqc0NTU1ZhbHVlID0ganNDYXN0
PEpTRGVwcmVjYXRlZENTU09NVmFsdWUqPihoYW5kbGUuc2xvdCgpLT5hc0NlbGwoKSk7CiAgICAg
aWYgKCFqc0NTU1ZhbHVlLT5oYXNDdXN0b21Qcm9wZXJ0aWVzKGpzQ1NTVmFsdWUtPnZtKCkpKQpJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNEb2N1bWVudEN1c3RvbS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNEb2N1bWVudEN1c3RvbS5j
cHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRG9j
dW1lbnRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAwNy0yMDA5LCAyMDExLCAyMDE2LCAyMDE3IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtOTEsMTEgKzkxLDE0IEBA
IEpTVmFsdWUgdG9KUyhKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2IKICAgICByZXR1cm4gdG9K
U05ld2x5Q3JlYXRlZChsZXhpY2FsR2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QsIFJlZjxEb2N1
bWVudD4oZG9jdW1lbnQpKTsKIH0KIAotdm9pZCBKU0RvY3VtZW50Ojp2aXNpdEFkZGl0aW9uYWxD
aGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+
Cit2b2lkIEpTRG9jdW1lbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0
b3IpCiB7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHN0YXRpY19jYXN0PFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqPigmd3JhcHBlZCgpKSk7CiB9CiAKK0RFRklORV9WSVNJVF9BRERJVElPTkFM
X0NISUxEUkVOKEpTRG9jdW1lbnQpOworCiB2b2lkIEpTRG9jdW1lbnQ6OmFuYWx5emVIZWFwKEpT
Q2VsbCogY2VsbCwgSGVhcEFuYWx5emVyJiBhbmFseXplcikKIHsKICAgICBCYXNlOjphbmFseXpl
SGVhcChjZWxsLCBhbmFseXplcik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0Vycm9yRXZlbnRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTRXJyb3JFdmVudEN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXJyb3JFdmVudEN1c3RvbS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDE4IFl1c3VrZSBTdXp1
a2kgPHl1c3VrZXN1enVraUBzbG93c3RhcnQub3JnPi4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTI4LDkgKzI5LDEyIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBK
U0Vycm9yRXZlbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZp
c2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0Vycm9yRXZlbnQ6OnZp
c2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgd3JhcHBlZCgp
Lm9yaWdpbmFsRXJyb3IoKS52aXNpdCh2aXNpdG9yKTsKIH0KIAorREVGSU5FX1ZJU0lUX0FERElU
SU9OQUxfQ0hJTERSRU4oSlNFcnJvckV2ZW50KTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudExpc3RlbmVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50TGlzdGVuZXIuY3Bw
CShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50
TGlzdGVuZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqICBDb3B5
cmlnaHQgKEMpIDIwMDEgUGV0ZXIgS2VsbHkgKHBta0Bwb3N0LmNvbSkKLSAqICBDb3B5cmlnaHQg
KEMpIDIwMDMtMjAxOSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiAgQ29weXJp
Z2h0IChDKSAyMDAzLTIwMjEgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAq
ICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBH
ZW5lcmFsIFB1YmxpYwpAQCAtNzgsNyArNzgsOCBAQCBKU09iamVjdCogSlNFdmVudExpc3RlbmVy
Ojppbml0aWFsaXplSlNGCiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLXZvaWQgSlNFdmVudExp
c3RlbmVyOjp2aXNpdEpTRnVuY3Rpb24oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0
eXBlbmFtZSBWaXNpdG9yPgoraW5saW5lIHZvaWQgSlNFdmVudExpc3RlbmVyOjp2aXNpdEpTRnVu
Y3Rpb25JbXBsKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgLy8gSWYgbV93cmFwcGVyIGlzIG51
bGwsIHdlIGFyZSBub3Qga2VlcGluZyBtX2pzRnVuY3Rpb24gYWxpdmUuCiAgICAgaWYgKCFtX3dy
YXBwZXIpCkBAIC04Nyw2ICs4OCw5IEBAIHZvaWQgSlNFdmVudExpc3RlbmVyOjp2aXNpdEpTRnVu
Y3Rpb24oU2wKICAgICB2aXNpdG9yLmFwcGVuZChtX2pzRnVuY3Rpb24pOwogfQogCit2b2lkIEpT
RXZlbnRMaXN0ZW5lcjo6dmlzaXRKU0Z1bmN0aW9uKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0
b3IpIHsgdmlzaXRKU0Z1bmN0aW9uSW1wbCh2aXNpdG9yKTsgfQordm9pZCBKU0V2ZW50TGlzdGVu
ZXI6OnZpc2l0SlNGdW5jdGlvbihTbG90VmlzaXRvciYgdmlzaXRvcikgeyB2aXNpdEpTRnVuY3Rp
b25JbXBsKHZpc2l0b3IpOyB9CisKIHN0YXRpYyB2b2lkIGhhbmRsZUJlZm9yZVVubG9hZEV2ZW50
UmV0dXJuVmFsdWUoQmVmb3JlVW5sb2FkRXZlbnQmIGV2ZW50LCBjb25zdCBTdHJpbmcmIHJldHVy
blZhbHVlKQogewogICAgIGlmIChyZXR1cm5WYWx1ZS5pc051bGwoKSkKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRMaXN0ZW5lci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRMaXN0ZW5lci5oCShyZXZpc2lvbiAyNzI4MzAp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50TGlzdGVuZXIuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAyMDAxIFBldGVy
IEtlbGx5IChwbWtAcG9zdC5jb20pCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMTggQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwMy0yMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKQEAgLTYy
LDYgKzYyLDkgQEAgcHVibGljOgogCiBwcml2YXRlOgogICAgIHZpcnR1YWwgSlNDOjpKU09iamVj
dCogaW5pdGlhbGl6ZUpTRnVuY3Rpb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYpIGNvbnN0Owor
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCB2aXNpdEpTRnVuY3Rpb25JbXBs
KFZpc2l0b3ImKTsKKyAgICB2b2lkIHZpc2l0SlNGdW5jdGlvbihKU0M6OkFic3RyYWN0U2xvdFZp
c2l0b3ImKSBmaW5hbDsKICAgICB2b2lkIHZpc2l0SlNGdW5jdGlvbihKU0M6OlNsb3RWaXNpdG9y
JikgZmluYWw7CiAKIHByb3RlY3RlZDoKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTRXZlbnRUYXJnZXRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTRXZlbnRUYXJnZXRDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50VGFyZ2V0Q3VzdG9tLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxNyBB
cHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAy
MSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTcyLDkgKzcyLDEyIEBAIHN0ZDo6dW5pcXVlX3B0cjxKU0V2ZW50VGFyZ2V0
V3JhcHBlcj4ganMKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotdm9pZCBKU0V2ZW50VGFyZ2V0
Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRl
PHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTRXZlbnRUYXJnZXQ6OnZpc2l0QWRkaXRpb25hbENo
aWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgd3JhcHBlZCgpLnZpc2l0SlNFdmVudExp
c3RlbmVycyh2aXNpdG9yKTsKIH0KIAorREVGSU5FX1ZJU0lUX0FERElUSU9OQUxfQ0hJTERSRU4o
SlNFdmVudFRhcmdldCk7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTRmV0Y2hFdmVudEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNGZXRjaEV2ZW50Q3VzdG9tLmNwcAkocmV2aXNp
b24gMjcyODMwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNGZXRjaEV2ZW50Q3Vz
dG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0zMCwxMSArMzAsMTQgQEAKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi12b2lkIEpTRmV0Y2hFdmVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpT
bG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpT
RmV0Y2hFdmVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsK
ICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QoJndyYXBwZWQoKS5yZXF1ZXN0KCkpOwogfQogCi19
CitERUZJTkVfVklTSVRfQURESVRJT05BTF9DSElMRFJFTihKU0ZldGNoRXZlbnQpOworCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNIVE1MQ2FudmFzRWxlbWVudEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MQ2FudmFzRWxlbWVudEN1c3RvbS5jcHAJKHJldmlz
aW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTENhbnZhc0Vs
ZW1lbnRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMjAtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMxLDkgKzMxLDEyIEBACiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotdm9pZCBKU0hUTUxDYW52YXNFbGVtZW50Ojp2aXNpdEFkZGl0aW9uYWxD
aGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlz
aXRvcj4KK3ZvaWQgSlNIVE1MQ2FudmFzRWxlbWVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4o
VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qoc3RhdGljX2Nh
c3Q8Q2FudmFzQmFzZSo+KCZ3cmFwcGVkKCkpKTsKIH0KIAorREVGSU5FX1ZJU0lUX0FERElUSU9O
QUxfQ0hJTERSRU4oSlNIVE1MQ2FudmFzRWxlbWVudCk7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTFRlbXBsYXRlRWxlbWVu
dEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNI
VE1MVGVtcGxhdGVFbGVtZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MVGVtcGxhdGVFbGVtZW50Q3VzdG9tLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMgYXJlCkBAIC0zNywxMCArMzgsMTMgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5h
bWVzcGFjZSBKU0M7CiAKLXZvaWQgSlNIVE1MVGVtcGxhdGVFbGVtZW50Ojp2aXNpdEFkZGl0aW9u
YWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUg
VmlzaXRvcj4KK3ZvaWQgSlNIVE1MVGVtcGxhdGVFbGVtZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGls
ZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGlmIChhdXRvKiBjb250ZW50ID0gd3JhcHBl
ZCgpLmNvbnRlbnRJZkF2YWlsYWJsZSgpKQogICAgICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qo
cm9vdChjb250ZW50KSk7CiB9CiAKK0RFRklORV9WSVNJVF9BRERJVElPTkFMX0NISUxEUkVOKEpT
SFRNTFRlbXBsYXRlRWxlbWVudCk7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSGlzdG9yeUN1c3RvbS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIaXN0b3J5Q3VzdG9tLmNwcAkocmV2aXNp
b24gMjcyODMwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIaXN0b3J5Q3VzdG9t
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDgtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDgtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ0LDkgKzQ0LDEyIEBAIEpTVmFsdWUgSlNIaXN0b3J5
OjpzdGF0ZShKU0dsb2JhbE9iamVjdCYKICAgICB9KTsKIH0KIAotdm9pZCBKU0hpc3Rvcnk6OnZp
c2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlw
ZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNIaXN0b3J5Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihW
aXNpdG9yJiB2aXNpdG9yKQogewogICAgIHdyYXBwZWQoKS5jYWNoZWRTdGF0ZUZvckdDKCkudmlz
aXQodmlzaXRvcik7CiB9CiAKK0RFRklORV9WSVNJVF9BRERJVElPTkFMX0NISUxEUkVOKEpTSGlz
dG9yeSk7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTSURCQ3Vyc29yQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0lEQkN1cnNvckN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjgzMCkK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCQ3Vyc29yQ3VzdG9tLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC01MCw3ICs1MCw4IEBAIEpTQzo6SlNWYWx1ZSBKU0lEQkN1cnNvcjo6cHJpbWFy
eUtleShKU0MKICAgICB9KTsKIH0KIAotdm9pZCBKU0lEQkN1cnNvcjo6dmlzaXRBZGRpdGlvbmFs
Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
Pgordm9pZCBKU0lEQkN1cnNvcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlz
aXRvcikKIHsKICAgICBhdXRvJiBjdXJzb3IgPSB3cmFwcGVkKCk7CiAgICAgaWYgKGF1dG8qIHJl
cXVlc3QgPSBjdXJzb3IucmVxdWVzdCgpKQpAQCAtNTksNiArNjAsOCBAQCB2b2lkIEpTSURCQ3Vy
c29yOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlCiAgICAgY3Vyc29yLnByaW1hcnlLZXlXcmFwcGVy
KCkudmlzaXQodmlzaXRvcik7CiB9CiAKK0RFRklORV9WSVNJVF9BRERJVElPTkFMX0NISUxEUkVO
KEpTSURCQ3Vyc29yKTsKKwogSlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6SlNHbG9iYWxP
YmplY3QqLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWY8SURCQ3Vyc29yPiYm
IGN1cnNvcikKIHsKICAgICBpZiAoaXM8SURCQ3Vyc29yV2l0aFZhbHVlPihjdXJzb3IpKQpJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJDdXJzb3JXaXRoVmFsdWVDdXN0b20u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCQ3Vyc29y
V2l0aFZhbHVlQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNJREJDdXJzb3JXaXRoVmFsdWVDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTQzLDEyICs0MywxNSBAQCBKU0M6OkpTVmFsdWUgSlNJREJDdXJzb3JXaXRoVmFsdWU6OnZhbHVl
CiAgICAgfSk7CiB9CiAKLXZvaWQgSlNJREJDdXJzb3JXaXRoVmFsdWU6OnZpc2l0QWRkaXRpb25h
bENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRv
cj4KK3ZvaWQgSlNJREJDdXJzb3JXaXRoVmFsdWU6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZp
c2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNJREJDdXJzb3I6OnZpc2l0QWRkaXRpb25hbENoaWxk
cmVuKHZpc2l0b3IpOwogICAgIHdyYXBwZWQoKS52YWx1ZVdyYXBwZXIoKS52aXNpdCh2aXNpdG9y
KTsKIH0KIAorREVGSU5FX1ZJU0lUX0FERElUSU9OQUxfQ0hJTERSRU4oSlNJREJDdXJzb3JXaXRo
VmFsdWUpOworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoSU5E
RVhFRF9EQVRBQkFTRSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCSW5k
ZXhDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
SURCSW5kZXhDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0lEQkluZGV4Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNCwxMSArMzQs
MTQgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKLXZvaWQg
SlNJREJJbmRleDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3Ip
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0lEQkluZGV4Ojp2aXNpdEFkZGl0
aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHZpc2l0b3IuYWRkT3BhcXVl
Um9vdChzdGF0aWNfY2FzdDxJREJJbmRleCY+KHdyYXBwZWQoKSkub2JqZWN0U3RvcmVBc09wYXF1
ZVJvb3QoKSk7CiB9CiAKK0RFRklORV9WSVNJVF9BRERJVElPTkFMX0NISUxEUkVOKEpTSURCSW5k
ZXgpOworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoSU5ERVhF
RF9EQVRBQkFTRSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCT2JqZWN0
U3RvcmVDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTSURCT2JqZWN0U3RvcmVDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQk9iamVjdFN0b3JlQ3VzdG9tLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTIgTWljaGFlbCBQ
cnVldHQgPG1pY2hhZWxANjhrLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
CkBAIC0zNiwxMSArMzcsMTQgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFj
ZSBKU0M7CiAKLXZvaWQgSlNJREJPYmplY3RTdG9yZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4o
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBK
U0lEQk9iamVjdFN0b3JlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9y
KQogewogICAgIHN0YXRpY19jYXN0PElEQk9iamVjdFN0b3JlJj4od3JhcHBlZCgpKS52aXNpdFJl
ZmVyZW5jZWRJbmRleGVzKHZpc2l0b3IpOwogfQogCi19CitERUZJTkVfVklTSVRfQURESVRJT05B
TF9DSElMRFJFTihKU0lEQk9iamVjdFN0b3JlKTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQog
CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCUmVxdWVzdEN1
c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJS
ZXF1ZXN0Q3VzdG9tLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNJREJSZXF1ZXN0Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE5LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC04OSwxMiArODks
MTYgQEAgSlNDOjpKU1ZhbHVlIEpTSURCUmVxdWVzdDo6cmVzdWx0KEpTQzo6SgogICAgIH0pOwog
fQogCi12b2lkIEpTSURCUmVxdWVzdDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0
b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0lEQlJlcXVl
c3Q6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0
byYgcmVxdWVzdCA9IHdyYXBwZWQoKTsKICAgICByZXF1ZXN0LnJlc3VsdFdyYXBwZXIoKS52aXNp
dCh2aXNpdG9yKTsKICAgICByZXF1ZXN0LmN1cnNvcldyYXBwZXIoKS52aXNpdCh2aXNpdG9yKTsK
IH0KIAotfQorREVGSU5FX1ZJU0lUX0FERElUSU9OQUxfQ0hJTERSRU4oSlNJREJSZXF1ZXN0KTsK
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCiAjZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFU
QUJBU0UpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQlRyYW5zYWN0aW9u
Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lE
QlRyYW5zYWN0aW9uQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNJREJUcmFuc2FjdGlvbkN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MzQsMTEgKzM0LDE0IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2UgSlND
OwogCi12b2lkIEpTSURCVHJhbnNhY3Rpb246OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNJREJU
cmFuc2FjdGlvbjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsK
ICAgICBzdGF0aWNfY2FzdDxJREJUcmFuc2FjdGlvbiY+KHdyYXBwZWQoKSkudmlzaXRSZWZlcmVu
Y2VkT2JqZWN0U3RvcmVzKHZpc2l0b3IpOwogfQogCi19CitERUZJTkVfVklTSVRfQURESVRJT05B
TF9DSElMRFJFTihKU0lEQlRyYW5zYWN0aW9uKTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQog
CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW50ZXJzZWN0aW9u
T2JzZXJ2ZXJDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTSW50ZXJzZWN0aW9uT2JzZXJ2ZXJDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI4MzApCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0ludGVyc2VjdGlvbk9ic2VydmVyQ3VzdG9t
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMp
IDIwMjAgSWdhbGlhIFMuTC4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMwLDEw
ICszMSwxMyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgSlNJbnRlcnNlY3Rpb25P
YnNlcnZlcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRv
cikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTSW50ZXJzZWN0aW9uT2JzZXJ2
ZXI6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgaWYg
KGF1dG8qIGNhbGxiYWNrID0gd3JhcHBlZCgpLmNhbGxiYWNrQ29uY3VycmVudGx5KCkpCiAgICAg
ICAgIGNhbGxiYWNrLT52aXNpdEpTRnVuY3Rpb24odmlzaXRvcik7CiB9CiAKLX0KK0RFRklORV9W
SVNJVF9BRERJVElPTkFMX0NISUxEUkVOKEpTSW50ZXJzZWN0aW9uT2JzZXJ2ZXIpOworCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lu
dGVyc2VjdGlvbk9ic2VydmVyRW50cnlDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW50ZXJzZWN0aW9uT2JzZXJ2ZXJFbnRyeUN1c3RvbS5jcHAJ
KHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW50ZXJz
ZWN0aW9uT2JzZXJ2ZXJFbnRyeUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2
IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDE4IEdvb2dsZSBMTEMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMCw3ICszMSw4IEBACiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBKU0ludGVyc2VjdGlvbk9ic2VydmVyRW50cnk6
OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1w
bGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0ludGVyc2VjdGlvbk9ic2VydmVyRW50cnk6
OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgdmlzaXRv
ci5hZGRPcGFxdWVSb290KHJvb3Qod3JhcHBlZCgpLnRhcmdldCgpKSk7CiAgICAgdmlzaXRvci5h
ZGRPcGFxdWVSb290KHdyYXBwZWQoKS5ib3VuZGluZ0NsaWVudFJlY3QoKSk7CkBAIC0zOCw0ICs0
MCw2IEBAIHZvaWQgSlNJbnRlcnNlY3Rpb25PYnNlcnZlckVudHJ5Ojp2aXNpdEEKICAgICB2aXNp
dG9yLmFkZE9wYXF1ZVJvb3Qod3JhcHBlZCgpLnJvb3RCb3VuZHMoKSk7CiB9CiAKLX0KK0RFRklO
RV9WSVNJVF9BRERJVElPTkFMX0NISUxEUkVOKEpTSW50ZXJzZWN0aW9uT2JzZXJ2ZXJFbnRyeSk7
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTTWVzc2FnZUNoYW5uZWxDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTTWVzc2FnZUNoYW5uZWxDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI4
MzApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01lc3NhZ2VDaGFubmVsQ3VzdG9t
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDA4LTIwMjEgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMyw3ICszMyw4IEBACiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAotdm9pZCBKU01lc3NhZ2VDaGFubmVsOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihK
U0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3Zv
aWQgSlNNZXNzYWdlQ2hhbm5lbDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlz
aXRvcikKIHsKICAgICBpZiAoTWVzc2FnZVBvcnQqIHBvcnQgPSB3cmFwcGVkKCkucG9ydDEoKSkK
ICAgICAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHBvcnQpOwpAQCAtNDIsNiArNDMsOCBAQCB2
b2lkIEpTTWVzc2FnZUNoYW5uZWw6OnZpc2l0QWRkaXRpb25hbENoCiAgICAgICAgIHZpc2l0b3Iu
YWRkT3BhcXVlUm9vdChwb3J0KTsKIH0KIAorREVGSU5FX1ZJU0lUX0FERElUSU9OQUxfQ0hJTERS
RU4oSlNNZXNzYWdlQ2hhbm5lbCk7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlm
IC8vIEVOQUJMRShDSEFOTkVMX01FU1NBR0lORykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTTWVzc2FnZUV2ZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU01lc3NhZ2VFdmVudEN1c3RvbS5jcHAJKHJldmlzaW9uIDI3Mjgz
MCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWVzc2FnZUV2ZW50Q3VzdG9tLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIw
MDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAw
OS0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAwOS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKQEAgLTcwLDcgKzcwLDggQEAgSlNDOjpKU1ZhbHVlIEpTTWVz
c2FnZUV2ZW50OjpkYXRhKEpTQzo6SgogICAgIH0pOwogfQogCi12b2lkIEpTTWVzc2FnZUV2ZW50
Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVt
cGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNNZXNzYWdlRXZlbnQ6OnZpc2l0QWRkaXRp
b25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgV1RGOjpzd2l0Y2hPbih3cmFw
cGVkKCkuZGF0YSgpLCBbJnZpc2l0b3JdIChjb25zdCBKU1ZhbHVlSW5XcmFwcGVkT2JqZWN0JiBk
YXRhKSB7CiAgICAgICAgIGRhdGEudmlzaXQodmlzaXRvcik7CkBAIC04NCw0ICs4NSw2IEBAIHZv
aWQgSlNNZXNzYWdlRXZlbnQ6OnZpc2l0QWRkaXRpb25hbENoaWwKICAgICB3cmFwcGVkKCkuY2Fj
aGVkUG9ydHMoKS52aXNpdCh2aXNpdG9yKTsKIH0KIAorREVGSU5FX1ZJU0lUX0FERElUSU9OQUxf
Q0hJTERSRU4oSlNNZXNzYWdlRXZlbnQpOworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01lc3NhZ2VQb3J0Q3VzdG9tLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01lc3NhZ2VQb3J0Q3VzdG9t
LmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNN
ZXNzYWdlUG9ydEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMDksIDIwMTYgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMjEgQXBwbGUgSW5jLiBBbGwgUmlnaHRz
IFJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCBSaWdodHMg
UmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0zMSwxMSArMzEsMTQgQEAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKLXZvaWQgSlNNZXNzYWdlUG9ydDo6
dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0
eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU01lc3NhZ2VQb3J0Ojp2aXNpdEFkZGl0aW9uYWxDaGls
ZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIC8vIElmIHdlIGhhdmUgYSBsb2NhbGx5IGVu
dGFuZ2xlZCBwb3J0LCB3ZSBjYW4gZGlyZWN0bHkgbWFyayBpdCBhcyByZWFjaGFibGUuIFBvcnRz
IHRoYXQgYXJlIHJlbW90ZWx5IGVudGFuZ2xlZCBhcmUgbWFya2VkIGluLXVzZSBieSBtYXJrQWN0
aXZlT2JqZWN0c0ZvckNvbnRleHQoKS4KICAgICBpZiAoTWVzc2FnZVBvcnQqIHBvcnQgPSB3cmFw
cGVkKCkubG9jYWxseUVudGFuZ2xlZFBvcnQoKSkKICAgICAgICAgdmlzaXRvci5hZGRPcGFxdWVS
b290KHBvcnQpOwogfQogCitERUZJTkVfVklTSVRfQURESVRJT05BTF9DSElMRFJFTihKU01lc3Nh
Z2VQb3J0KTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNNdXRhdGlvbk9ic2VydmVyQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU011dGF0aW9uT2JzZXJ2ZXJDdXN0b20uY3BwCShy
ZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU011dGF0aW9u
T2JzZXJ2ZXJDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAq
IENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKQEAgLTM5LDEyICszOSwxNSBAQAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAotdm9pZCBKU011dGF0aW9u
T2JzZXJ2ZXI6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0
b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU011dGF0aW9uT2JzZXJ2ZXI6
OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgd3JhcHBl
ZCgpLmNhbGxiYWNrKCkudmlzaXRKU0Z1bmN0aW9uKHZpc2l0b3IpOwogfQogCi1ib29sIEpTTXV0
YXRpb25PYnNlcnZlck93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRs
ZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25z
dCBjaGFyKipyZWFzb24pCitERUZJTkVfVklTSVRfQURESVRJT05BTF9DSElMRFJFTihKU011dGF0
aW9uT2JzZXJ2ZXIpOworCitib29sIEpTTXV0YXRpb25PYnNlcnZlck93bmVyOjppc1JlYWNoYWJs
ZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCos
IEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKnJlYXNvbikKIHsKICAg
ICBmb3IgKGF1dG8qIG5vZGUgOiBqc0Nhc3Q8SlNNdXRhdGlvbk9ic2VydmVyKj4oaGFuZGxlLnNs
b3QoKS0+YXNDZWxsKCkpLT53cmFwcGVkKCkub2JzZXJ2ZWROb2RlcygpKSB7CiAgICAgICAgIGlm
ICh2aXNpdG9yLmNvbnRhaW5zT3BhcXVlUm9vdChyb290KG5vZGUpKSkgewpJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNNdXRhdGlvblJlY29yZEN1c3RvbS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNdXRhdGlvblJlY29yZEN1c3RvbS5j
cHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTXV0
YXRpb25SZWNvcmRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMwLDkgKzMwLDEyIEBACiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBKU011dGF0aW9uUmVjb3JkOjp2aXNpdEFkZGl0aW9u
YWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUg
VmlzaXRvcj4KK3ZvaWQgSlNNdXRhdGlvblJlY29yZDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4o
VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB3cmFwcGVkKCkudmlzaXROb2Rlc0NvbmN1cnJlbnRs
eSh2aXNpdG9yKTsKIH0KLSAgICAKKworREVGSU5FX1ZJU0lUX0FERElUSU9OQUxfQ0hJTERSRU4o
SlNNdXRhdGlvblJlY29yZCk7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTmF2aWdhdG9yQ3VzdG9tLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05hdmlnYXRvckN1c3RvbS5jcHAJKHJldmlz
aW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTmF2aWdhdG9yQ3Vz
dG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0zMiwxMSArMzIsMTQgQEAKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi12b2lkIEpTTmF2aWdhdG9yOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNs
b3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNO
YXZpZ2F0b3I6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAg
ICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHN0YXRpY19jYXN0PE5hdmlnYXRvckJhc2UqPigmd3Jh
cHBlZCgpKSk7CiB9CiAKK0RFRklORV9WSVNJVF9BRERJVElPTkFMX0NISUxEUkVOKEpTTmF2aWdh
dG9yKTsKKwogI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCiBKU0M6OkpTVmFsdWUgSlNOYXZpZ2F0
b3I6OmdldFVzZXJNZWRpYShKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0
LCBKU0M6OkNhbGxGcmFtZSYgY2FsbEZyYW1lKQogewpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNOb2RlQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU05vZGVDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOS0yMDEwLCAyMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtNzQsNyArNzQsNyBAQCB1c2luZyBuYW1lc3BhY2UgSlNDOwogCiB1c2luZyBu
YW1lc3BhY2UgSFRNTE5hbWVzOwogCi1zdGF0aWMgaW5saW5lIGJvb2wgaXNSZWFjaGFibGVGcm9t
RE9NKE5vZGUqIG5vZGUsIFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29u
KQorc3RhdGljIGlubGluZSBib29sIGlzUmVhY2hhYmxlRnJvbURPTShOb2RlKiBub2RlLCBBYnN0
cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQogewogICAgIGlm
ICghbm9kZS0+aXNDb25uZWN0ZWQoKSkgewogICAgICAgICBpZiAoaXM8RWxlbWVudD4oKm5vZGUp
KSB7CkBAIC0xMjMsNyArMTIzLDcgQEAgc3RhdGljIGlubGluZSBib29sIGlzUmVhY2hhYmxlRnJv
bURPTShObwogICAgIHJldHVybiB2aXNpdG9yLmNvbnRhaW5zT3BhcXVlUm9vdChyb290KG5vZGUp
KTsKIH0KIAotYm9vbCBKU05vZGVPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlND
OjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBTbG90VmlzaXRvciYgdmlzaXRv
ciwgY29uc3QgY2hhcioqIHJlYXNvbikKK2Jvb2wgSlNOb2RlT3duZXI6OmlzUmVhY2hhYmxlRnJv
bU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgQWJz
dHJhY3RTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikKIHsKICAgICBK
U05vZGUqIGpzTm9kZSA9IGpzQ2FzdDxKU05vZGUqPihoYW5kbGUuc2xvdCgpLT5hc0NlbGwoKSk7
CiAgICAgcmV0dXJuIGlzUmVhY2hhYmxlRnJvbURPTSgmanNOb2RlLT53cmFwcGVkKCksIHZpc2l0
b3IsIHJlYXNvbik7CkBAIC0xMzYsMTEgKzEzNiwxNCBAQCBKU1Njb3BlKiBKU05vZGU6OnB1c2hF
dmVudEhhbmRsZXJTY29wZShKCiAgICAgcmV0dXJuIG5vZGU7CiB9CiAKLXZvaWQgSlNOb2RlOjp2
aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5
cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTTm9kZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlz
aXRvciYgdmlzaXRvcikKIHsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qocm9vdCh3cmFwcGVk
KCkpKTsKIH0KIAorREVGSU5FX1ZJU0lUX0FERElUSU9OQUxfQ0hJTERSRU4oSlNOb2RlKTsKKwog
c3RhdGljIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBjcmVhdGVXcmFwcGVySW5saW5lKEpTR2xvYmFs
T2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBSZWY8Tm9kZT4mJiBub2RlKQogewogICAgIEFTU0VSVCghZ2V0Q2FjaGVkV3JhcHBlcihn
bG9iYWxPYmplY3QtPndvcmxkKCksIG5vZGUpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTTm9kZUl0ZXJhdG9yQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU05vZGVJdGVyYXRvckN1c3RvbS5jcHAJKHJldmlzaW9uIDI3Mjgz
MCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUl0ZXJhdG9yQ3VzdG9tLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDYsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDA2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCkBAIC0yNSwxMCArMjUsMTMgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci12b2lkIEpTTm9kZUl0ZXJhdG9yOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RW
aXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNOb2Rl
SXRlcmF0b3I6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAg
ICAgaWYgKE5vZGVGaWx0ZXIqIGZpbHRlciA9IHdyYXBwZWQoKS5maWx0ZXIoKSkKICAgICAgICAg
dmlzaXRvci5hZGRPcGFxdWVSb290KGZpbHRlcik7CiB9CiAKLX0KK0RFRklORV9WSVNJVF9BRERJ
VElPTkFMX0NISUxEUkVOKEpTTm9kZUl0ZXJhdG9yKTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlTGlzdEN1c3RvbS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlTGlzdEN1c3Rv
bS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
Tm9kZUxpc3RDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAwNy0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzcsNyArMzcsNyBAQAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAotYm9vbCBKU05vZGVMaXN0
T3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93
bj4gaGFuZGxlLCB2b2lkKiwgU2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFz
b24pCitib29sIEpTTm9kZUxpc3RPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlND
OjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBBYnN0cmFjdFNsb3RWaXNpdG9y
JiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQogewogICAgIEpTTm9kZUxpc3QqIGpzTm9k
ZUxpc3QgPSBqc0Nhc3Q8SlNOb2RlTGlzdCo+KGhhbmRsZS5zbG90KCktPmFzQ2VsbCgpKTsKICAg
ICBpZiAoIWpzTm9kZUxpc3QtPmhhc0N1c3RvbVByb3BlcnRpZXMoanNOb2RlTGlzdC0+dm0oKSkp
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU09mZnNjcmVlbkNhbnZhc1JlbmRl
cmluZ0NvbnRleHQyREN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNPZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRDdXN0b20uY3BwCShy
ZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU09mZnNjcmVl
bkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyREN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMzEsNyArMzEsNyBAQCBpbmxp
bmUgdm9pZCogcm9vdChPZmZzY3JlZW5DYW52YXMqIGNhbnZhCiAgICAgcmV0dXJuIGNhbnZhczsK
IH0KIAotYm9vbCBKU09mZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRE93bmVyOjppc1Jl
YWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwg
dm9pZCosIFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQorYm9vbCBK
U09mZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRE93bmVyOjppc1JlYWNoYWJsZUZyb21P
cGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIEFic3Ry
YWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCiB7CiAgICAgaWYg
KFVOTElLRUxZKHJlYXNvbikpCiAgICAgICAgICpyZWFzb24gPSAiQ2FudmFzIGlzIG9wYXF1ZSBy
b290IjsKQEAgLTQxLDExICs0MSwxNCBAQCBib29sIEpTT2Zmc2NyZWVuQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDJECiAgICAgcmV0dXJuIHZpc2l0b3IuY29udGFpbnNPcGFxdWVSb290KHJvb3QpOwog
fQogCi12b2lkIEpTT2Zmc2NyZWVuQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjp2aXNpdEFkZGl0
aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZp
c2l0b3I+Cit2b2lkIEpTT2Zmc2NyZWVuQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjp2aXNpdEFk
ZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHZpc2l0b3IuYWRkT3Bh
cXVlUm9vdChyb290KCZ3cmFwcGVkKCkuY2FudmFzKCkpKTsKIH0KIAorREVGSU5FX1ZJU0lUX0FE
RElUSU9OQUxfQ0hJTERSRU4oSlNPZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQpOwor
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNQYWludFJlbmRlcmluZ0NvbnRleHQyREN1c3RvbS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNQYWludFJlbmRlcmluZ0NvbnRleHQy
REN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTUGFpbnRSZW5kZXJpbmdDb250ZXh0MkRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAyMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM2
LDcgKzM2LDcgQEAgaW5saW5lIHZvaWQqIHJvb3QoQ3VzdG9tUGFpbnRDYW52YXMqIGNhbgogICAg
IHJldHVybiBjYW52YXM7CiB9CiAKLWJvb2wgSlNQYWludFJlbmRlcmluZ0NvbnRleHQyRE93bmVy
Ojppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhh
bmRsZSwgdm9pZCosIFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQor
Ym9vbCBKU1BhaW50UmVuZGVyaW5nQ29udGV4dDJET3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1
ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgQWJzdHJhY3RT
bG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikKIHsKICAgICBpZiAoVU5M
SUtFTFkocmVhc29uKSkKICAgICAgICAgKnJlYXNvbiA9ICJDYW52YXMgaXMgb3BhcXVlIHJvb3Qi
OwpAQCAtNDYsMTEgKzQ2LDE0IEBAIGJvb2wgSlNQYWludFJlbmRlcmluZ0NvbnRleHQyRE93bmVy
Ojppc1IKICAgICByZXR1cm4gdmlzaXRvci5jb250YWluc09wYXF1ZVJvb3Qocm9vdCk7CiB9CiAK
LXZvaWQgSlNQYWludFJlbmRlcmluZ0NvbnRleHQyRDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4o
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBK
U1BhaW50UmVuZGVyaW5nQ29udGV4dDJEOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9y
JiB2aXNpdG9yKQogewogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChyb290KCZ3cmFwcGVkKCku
Y2FudmFzKCkpKTsKIH0KIAorREVGSU5FX1ZJU0lUX0FERElUSU9OQUxfQ0hJTERSRU4oSlNQYWlu
dFJlbmRlcmluZ0NvbnRleHQyRCk7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKICNlbmRpZgog
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1BhaW50V29ya2xldEdsb2JhbFNj
b3BlQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U1BhaW50V29ya2xldEdsb2JhbFNjb3BlQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNQYWludFdvcmtsZXRHbG9iYWxTY29wZUN1c3Rv
bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxOC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMzEsNyArMzEsOCBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewog
dXNpbmcgbmFtZXNwYWNlIEpTQzsKIAotdm9pZCBKU1BhaW50V29ya2xldEdsb2JhbFNjb3BlOjp2
aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxh
dGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNQYWludFdvcmtsZXRHbG9iYWxTY29wZTo6dmlz
aXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBhdXRvIGxvY2tl
ciA9IGhvbGRMb2NrKHdyYXBwZWQoKS5wYWludERlZmluaXRpb25Mb2NrKCkpOwogICAgIGZvciAo
YXV0byYgcmVnaXN0ZXJlZCA6IHdyYXBwZWQoKS5wYWludERlZmluaXRpb25NYXAoKS52YWx1ZXMo
KSkgewpAQCAtNDAsNSArNDEsOCBAQCB2b2lkIEpTUGFpbnRXb3JrbGV0R2xvYmFsU2NvcGU6OnZp
c2l0QWRkCiAgICAgfQogfQogCi19CitERUZJTkVfVklTSVRfQURESVRJT05BTF9DSElMRFJFTihK
U1BhaW50V29ya2xldEdsb2JhbFNjb3BlKTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCiAj
ZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUGF5bWVudE1ldGhvZENo
YW5nZUV2ZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU1BheW1lbnRNZXRob2RDaGFuZ2VFdmVudEN1c3RvbS5jcHAJKHJldmlzaW9uIDI3Mjgz
MCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUGF5bWVudE1ldGhvZENoYW5nZUV2
ZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE4LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00MSw3ICs0MSw4IEBAIEpTQzo6SlNWYWx1ZSBK
U1BheW1lbnRNZXRob2RDaGFuZ2VFdmVudDoKICAgICB9KTsKIH0KIAotdm9pZCBKU1BheW1lbnRN
ZXRob2RDaGFuZ2VFdmVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRv
ciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTUGF5bWVudE1l
dGhvZENoYW5nZUV2ZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9y
KQogewogICAgIFdURjo6c3dpdGNoT24od3JhcHBlZCgpLm1ldGhvZERldGFpbHMoKSwgWyZ2aXNp
dG9yXShjb25zdCBKU1ZhbHVlSW5XcmFwcGVkT2JqZWN0JiBtZXRob2REZXRhaWxzKSB7CiAgICAg
ICAgIG1ldGhvZERldGFpbHMudmlzaXQodmlzaXRvcik7CkBAIC01MSw2ICs1Miw4IEBAIHZvaWQg
SlNQYXltZW50TWV0aG9kQ2hhbmdlRXZlbnQ6OnZpc2l0QWQKICAgICB3cmFwcGVkKCkuY2FjaGVk
TWV0aG9kRGV0YWlscygpLnZpc2l0KHZpc2l0b3IpOwogfQogCitERUZJTkVfVklTSVRfQURESVRJ
T05BTF9DSElMRFJFTihKU1BheW1lbnRNZXRob2RDaGFuZ2VFdmVudCk7CisKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShQQVlNRU5UX1JFUVVFU1QpCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1BheW1lbnRSZXNwb25zZUN1c3RvbS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNQYXltZW50UmVzcG9uc2VD
dXN0b20uY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU1BheW1lbnRSZXNwb25zZUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzcsMTEgKzM3LDE0
IEBAIEpTQzo6SlNWYWx1ZSBKU1BheW1lbnRSZXNwb25zZTo6ZGV0YWlscygKICAgICB9KTsKIH0K
IAotdm9pZCBKU1BheW1lbnRSZXNwb25zZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpT
bG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpT
UGF5bWVudFJlc3BvbnNlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9y
KQogewogICAgIHdyYXBwZWQoKS5jYWNoZWREZXRhaWxzKCkudmlzaXQodmlzaXRvcik7CiB9CiAK
K0RFRklORV9WSVNJVF9BRERJVElPTkFMX0NISUxEUkVOKEpTUGF5bWVudFJlc3BvbnNlKTsKKwog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKFBBWU1FTlRfUkVRVUVT
VCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUGVyZm9ybWFuY2VPYnNlcnZl
ckN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNQ
ZXJmb3JtYW5jZU9ic2VydmVyQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNQZXJmb3JtYW5jZU9ic2VydmVyQ3VzdG9tLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0zMSwxMiArMzEsMTUgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lk
IEpTUGVyZm9ybWFuY2VPYnNlcnZlcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90
VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTUGVy
Zm9ybWFuY2VPYnNlcnZlcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRv
cikKIHsKICAgICB3cmFwcGVkKCkuY2FsbGJhY2soKS52aXNpdEpTRnVuY3Rpb24odmlzaXRvcik7
CiB9CiAKLWJvb2wgSlNQZXJmb3JtYW5jZU9ic2VydmVyT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9w
YXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgSlNDOjpT
bG90VmlzaXRvciYsIGNvbnN0IGNoYXIqKiByZWFzb24pCitERUZJTkVfVklTSVRfQURESVRJT05B
TF9DSElMRFJFTihKU1BlcmZvcm1hbmNlT2JzZXJ2ZXIpOworCitib29sIEpTUGVyZm9ybWFuY2VP
YnNlcnZlck93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6
OlVua25vd24+IGhhbmRsZSwgdm9pZCosIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYsIGNvbnN0
IGNoYXIqKiByZWFzb24pCiB7CiAgICAgaWYgKFVOTElLRUxZKHJlYXNvbikpCiAgICAgICAgICpy
ZWFzb24gPSAiUmVnaXN0ZXJlZCBQZXJmb3JtYW5jZU9ic2VydmVyIGNhbGxiYWNrIjsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUG9wU3RhdGVFdmVudEN1c3RvbS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNQb3BTdGF0ZUV2ZW50Q3Vz
dG9tLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNQb3BTdGF0ZUV2ZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAK
IC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCkBAIC05MCw5ICs5MSwxMiBAQCBK
U1ZhbHVlIEpTUG9wU3RhdGVFdmVudDo6c3RhdGUoSlNHbG9iYWxPCiAgICAgcmV0dXJuIGNhY2hl
U3RhdGUocmVzdWx0KTsKIH0KIAotdm9pZCBKU1BvcFN0YXRlRXZlbnQ6OnZpc2l0QWRkaXRpb25h
bENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPgordm9pZCBKU1BvcFN0YXRlRXZlbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZp
c2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgd3JhcHBlZCgpLnN0YXRlKCkudmlzaXQodmlzaXRvcik7
CiB9CiAKK0RFRklORV9WSVNJVF9BRERJVElPTkFMX0NISUxEUkVOKEpTUG9wU3RhdGVFdmVudCk7
CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTUHJvbWlzZVJlamVjdGlvbkV2ZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1Byb21pc2VSZWplY3Rpb25FdmVudEN1c3RvbS5jcHAJ
KHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUHJvbWlz
ZVJlamVjdGlvbkV2ZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAK
IC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTggWXVzdWtlIFN1enVraSA8eXVzdWtlc3V6dWtpQHNs
b3dzdGFydC5vcmc+LgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzIsOSArMzMs
MTIgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIEpTUHJvbWlzZVJlamVjdGlvbkV2
ZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQor
dGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNQcm9taXNlUmVqZWN0aW9uRXZlbnQ6
OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgd3JhcHBl
ZCgpLnJlYXNvbigpLnZpc2l0KHZpc2l0b3IpOwogfQogCitERUZJTkVfVklTSVRfQURESVRJT05B
TF9DSElMRFJFTihKU1Byb21pc2VSZWplY3Rpb25FdmVudCk7CisKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUmVzaXplT2JzZXJ2ZXJD
dXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUmVz
aXplT2JzZXJ2ZXJDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU1Jlc2l6ZU9ic2VydmVyQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMjAgSWdhbGlhIFMuTC4KKyAq
IENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMwLDExICszMSwxNCBAQAogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLXZvaWQgSlNSZXNpemVPYnNlcnZlcjo6dmlzaXRBZGRpdGlvbmFsQ2hp
bGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0
b3I+Cit2b2lkIEpTUmVzaXplT2JzZXJ2ZXI6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0
b3ImIHZpc2l0b3IpCiB7CiAgICAgUmVzaXplT2JzZXJ2ZXJDYWxsYmFjayogY2FsbGJhY2sgPSB3
cmFwcGVkKCkuY2FsbGJhY2tDb25jdXJyZW50bHkoKTsKICAgICBpZiAoY2FsbGJhY2spCiAgICAg
ICAgIGNhbGxiYWNrLT52aXNpdEpTRnVuY3Rpb24odmlzaXRvcik7CiB9CiAKLX0KK0RFRklORV9W
SVNJVF9BRERJVElPTkFMX0NISUxEUkVOKEpTUmVzaXplT2JzZXJ2ZXIpOworCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1Jlc2l6ZU9i
c2VydmVyRW50cnlDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTUmVzaXplT2JzZXJ2ZXJFbnRyeUN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjgzMCkK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUmVzaXplT2JzZXJ2ZXJFbnRyeUN1c3Rv
bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChD
KSAyMDE5IElnYWxpYSBTLkwuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMCwx
MCArMzEsMTMgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIEpTUmVzaXplT2JzZXJ2
ZXJFbnRyeTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRv
cikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTUmVzaXplT2JzZXJ2ZXJFbnRy
eTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB2aXNp
dG9yLmFkZE9wYXF1ZVJvb3Qocm9vdCh3cmFwcGVkKCkudGFyZ2V0KCkpKTsKICAgICB2aXNpdG9y
LmFkZE9wYXF1ZVJvb3Qod3JhcHBlZCgpLmNvbnRlbnRSZWN0KCkpOwogfQogCi19CitERUZJTkVf
VklTSVRfQURESVRJT05BTF9DSElMRFJFTihKU1Jlc2l6ZU9ic2VydmVyRW50cnkpOworCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NW
R1ZpZXdTcGVjQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU1NWR1ZpZXdTcGVjQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNTVkdWaWV3U3BlY0N1c3RvbS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOC0yMDIxIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtMzAsMTAgKzMwLDEzIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBKU1NWR1Zp
ZXdTcGVjOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9y
KQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNTVkdWaWV3U3BlYzo6dmlzaXRB
ZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBBU1NFUlQod3JhcHBl
ZCgpLmNvbnRleHRFbGVtZW50Q29uY3VycmVudGx5KCkuZ2V0KCkpOwogICAgIHZpc2l0b3IuYWRk
T3BhcXVlUm9vdChyb290KHdyYXBwZWQoKS5jb250ZXh0RWxlbWVudENvbmN1cnJlbnRseSgpLmdl
dCgpKSk7CiB9CiAKLX0KK0RFRklORV9WSVNJVF9BRERJVElPTkFMX0NISUxEUkVOKEpTU1ZHVmll
d1NwZWMpOworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU1NlcnZpY2VXb3JrZXJHbG9iYWxTY29wZUN1c3RvbS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNTZXJ2aWNlV29ya2VyR2xvYmFsU2Nv
cGVDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU1NlcnZpY2VXb3JrZXJHbG9iYWxTY29wZUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MzQsMTIgKzM0LDE1IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNwYWNlIEpT
QzsKIAotdm9pZCBKU1NlcnZpY2VXb3JrZXJHbG9iYWxTY29wZTo6dmlzaXRBZGRpdGlvbmFsQ2hp
bGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgor
dm9pZCBKU1NlcnZpY2VXb3JrZXJHbG9iYWxTY29wZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4o
VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QoJndyYXBwZWQo
KS5jbGllbnRzKCkpOwogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdCgmd3JhcHBlZCgpLnJlZ2lz
dHJhdGlvbigpKTsKIH0KIAorREVGSU5FX1ZJU0lUX0FERElUSU9OQUxfQ0hJTERSRU4oSlNTZXJ2
aWNlV29ya2VyR2xvYmFsU2NvcGUpOworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRp
ZgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNTdGF0aWNSYW5nZUN1c3RvbS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNTdGF0aWNSYW5n
ZUN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTU3RhdGljUmFuZ2VDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw5ICszMCwx
MiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgSlNTdGF0aWNSYW5nZTo6dmlzaXRB
ZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5
cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTU3RhdGljUmFuZ2U6OnZpc2l0QWRkaXRpb25hbENoaWxk
cmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgd3JhcHBlZCgpLnZpc2l0Tm9kZXNDb25jdXJy
ZW50bHkodmlzaXRvcik7CiB9CiAKK0RFRklORV9WSVNJVF9BRERJVElPTkFMX0NISUxEUkVOKEpT
U3RhdGljUmFuZ2UpOworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU1N0eWxlU2hlZXRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU3R5bGVTaGVldEN1c3RvbS5jcHAJKHJldmlzaW9u
IDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU3R5bGVTaGVldEN1c3Rv
bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDA3LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAwNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzAsMTEgKzMwLDE0IEBACiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotdm9pZCBKU1N0eWxlU2hlZXQ6OnZpc2l0QWRkaXRpb25hbENoaWxk
cmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
Pgordm9pZCBKU1N0eWxlU2hlZXQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZp
c2l0b3IpCiB7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHJvb3QoJndyYXBwZWQoKSkpOwog
fQogCitERUZJTkVfVklTSVRfQURESVRJT05BTF9DSElMRFJFTihKU1N0eWxlU2hlZXQpOworCiBK
U0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNET01H
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmPFN0eWxlU2hlZXQ+JiYgc3R5bGVTaGVldCkK
IHsKICAgICBpZiAoc3R5bGVTaGVldC0+aXNDU1NTdHlsZVNoZWV0KCkpCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU1RleHRUcmFja0N1ZUN1c3RvbS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNUZXh0VHJhY2tDdWVDdXN0b20uY3BwCShy
ZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1RleHRUcmFj
a0N1ZUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzgsNyArMzgsNyBAQAogbmFtZXNwYWNlIFdl
YkNvcmUgewogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAotYm9vbCBKU1RleHRUcmFja0N1ZU93bmVy
Ojppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhh
bmRsZSwgdm9pZCosIFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQor
Ym9vbCBKU1RleHRUcmFja0N1ZU93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6
OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIEFic3RyYWN0U2xvdFZpc2l0b3Im
IHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCiB7CiAgICAgSlNUZXh0VHJhY2tDdWUqIGpz
VGV4dFRyYWNrQ3VlID0ganNDYXN0PEpTVGV4dFRyYWNrQ3VlKj4oaGFuZGxlLnNsb3QoKS0+YXND
ZWxsKCkpOwogICAgIFRleHRUcmFja0N1ZSYgdGV4dFRyYWNrQ3VlID0ganNUZXh0VHJhY2tDdWUt
PndyYXBwZWQoKTsKQEAgLTgyLDEyICs4MiwxNSBAQCBKU1ZhbHVlIHRvSlMoSlNHbG9iYWxPYmpl
Y3QqIGxleGljYWxHbG9iCiAgICAgcmV0dXJuIHdyYXAobGV4aWNhbEdsb2JhbE9iamVjdCwgZ2xv
YmFsT2JqZWN0LCBjdWUpOwogfQogCi12b2lkIEpTVGV4dFRyYWNrQ3VlOjp2aXNpdEFkZGl0aW9u
YWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0
b3I+Cit2b2lkIEpTVGV4dFRyYWNrQ3VlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9y
JiB2aXNpdG9yKQogewogICAgIGlmIChUZXh0VHJhY2sqIHRleHRUcmFjayA9IHdyYXBwZWQoKS50
cmFjaygpKQogICAgICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qocm9vdCh0ZXh0VHJhY2spKTsK
IH0KIAorREVGSU5FX1ZJU0lUX0FERElUSU9OQUxfQ0hJTERSRU4oSlNUZXh0VHJhY2tDdWUpOwor
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNUZXh0VHJhY2tDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTVGV4dFRyYWNrQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcyODMw
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNUZXh0VHJhY2tDdXN0b20uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTM2LDExICszNiwxNCBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogdXNpbmcg
bmFtZXNwYWNlIEpTQzsKIAotdm9pZCBKU1RleHRUcmFjazo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRy
ZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9p
ZCBKU1RleHRUcmFjazo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikK
IHsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qocm9vdCgmd3JhcHBlZCgpKSk7CiB9CiAKK0RF
RklORV9WSVNJVF9BRERJVElPTkFMX0NISUxEUkVOKEpTVGV4dFRyYWNrKTsKKwogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQogCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTVGV4dFRyYWNrTGlzdEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNUZXh0VHJhY2tMaXN0Q3VzdG9tLmNwcAkocmV2aXNpb24gMjcyODMwKQor
KysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNUZXh0VHJhY2tMaXN0Q3VzdG9tLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLTIw
MjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0zNiwxMSArMzYsMTQgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5n
IG5hbWVzcGFjZSBKU0M7CiAKLXZvaWQgSlNUZXh0VHJhY2tMaXN0Ojp2aXNpdEFkZGl0aW9uYWxD
aGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlz
aXRvcj4KK3ZvaWQgSlNUZXh0VHJhY2tMaXN0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNp
dG9yJiB2aXNpdG9yKQogewogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChyb290KHdyYXBwZWQo
KS5lbGVtZW50KCkpKTsKIH0KICAgICAKK0RFRklORV9WSVNJVF9BRERJVElPTkFMX0NISUxEUkVO
KEpTVGV4dFRyYWNrTGlzdCk7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1RyZWVXYWxrZXJDdXN0b20uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVHJlZVdhbGtlckN1c3Rv
bS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
VHJlZVdhbGtlckN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjUsMTAgKzI1LDEzIEBACiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBKU1RyZWVXYWxrZXI6OnZpc2l0QWRkaXRpb25hbENo
aWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNp
dG9yPgordm9pZCBKU1RyZWVXYWxrZXI6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3Im
IHZpc2l0b3IpCiB7CiAgICAgaWYgKE5vZGVGaWx0ZXIqIGZpbHRlciA9IHdyYXBwZWQoKS5maWx0
ZXIoKSkKICAgICAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KGZpbHRlcik7CiB9CiAKLX0KK0RF
RklORV9WSVNJVF9BRERJVElPTkFMX0NISUxEUkVOKEpTVHJlZVdhbGtlcik7CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVW5kb0l0
ZW1DdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
VW5kb0l0ZW1DdXN0b20uY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU1VuZG9JdGVtQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE5LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOSwxMyArMjks
MTYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIEpTVW5kb0l0ZW06OnZpc2l0QWRk
aXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBl
bmFtZSBWaXNpdG9yPgordm9pZCBKU1VuZG9JdGVtOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihW
aXNpdG9yJiB2aXNpdG9yKQogewogICAgIHdyYXBwZWQoKS51bmRvSGFuZGxlcigpLnZpc2l0SlNG
dW5jdGlvbih2aXNpdG9yKTsKICAgICB3cmFwcGVkKCkucmVkb0hhbmRsZXIoKS52aXNpdEpTRnVu
Y3Rpb24odmlzaXRvcik7CiB9CiAKLWJvb2wgSlNVbmRvSXRlbU93bmVyOjppc1JlYWNoYWJsZUZy
b21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIEpT
Qzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCitERUZJTkVfVklT
SVRfQURESVRJT05BTF9DSElMRFJFTihKU1VuZG9JdGVtKTsKKworYm9vbCBKU1VuZG9JdGVtT3du
ZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4g
aGFuZGxlLCB2b2lkKiwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBj
aGFyKiogcmVhc29uKQogewogICAgIGlmIChVTkxJS0VMWShyZWFzb24pKQogICAgICAgICAqcmVh
c29uID0gIkRvY3VtZW50IGlzIGFuIG9wYXF1ZSByb290LiI7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU1ZhbHVlSW5XcmFwcGVkT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNWYWx1ZUluV3JhcHBlZE9iamVjdC5oCShyZXZpc2lv
biAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1ZhbHVlSW5XcmFwcGVk
T2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxOC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIAogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTQwLDcgKzQwLDcgQEAgcHVibGljOgogICAgIG9wZXJhdG9y
IEpTQzo6SlNWYWx1ZSgpIGNvbnN0OwogICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25z
dDsKICAgICBKU1ZhbHVlSW5XcmFwcGVkT2JqZWN0JiBvcGVyYXRvcj0oY29uc3QgSlNWYWx1ZUlu
V3JhcHBlZE9iamVjdCYgb3RoZXIpOwotICAgIHZvaWQgdmlzaXQoSlNDOjpTbG90VmlzaXRvciYp
IGNvbnN0OworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgdmlzaXQoVmlzaXRv
ciYpIGNvbnN0OwogICAgIHZvaWQgY2xlYXIoKTsKIAogcHJpdmF0ZToKQEAgLTk4LDcgKzk4LDgg
QEAgaW5saW5lIEpTVmFsdWVJbldyYXBwZWRPYmplY3QmIEpTVmFsdWVJbgogICAgIHJldHVybiAq
dGhpczsKIH0KIAotaW5saW5lIHZvaWQgSlNWYWx1ZUluV3JhcHBlZE9iamVjdDo6dmlzaXQoSlND
OjpTbG90VmlzaXRvciYgdmlzaXRvcikgY29uc3QKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+
CitpbmxpbmUgdm9pZCBKU1ZhbHVlSW5XcmFwcGVkT2JqZWN0Ojp2aXNpdChWaXNpdG9yJiB2aXNp
dG9yKSBjb25zdAogewogICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKG1fdmFsdWUsIFtdIChKU0M6
OkpTVmFsdWUpIHsKICAgICAgICAgLy8gTm90aGluZyB0byB2aXNpdC4KQEAgLTEwNyw2ICsxMDgs
OSBAQCBpbmxpbmUgdm9pZCBKU1ZhbHVlSW5XcmFwcGVkT2JqZWN0Ojp2aXNpCiAgICAgfSk7CiB9
CiAKK3RlbXBsYXRlIHZvaWQgSlNWYWx1ZUluV3JhcHBlZE9iamVjdDo6dmlzaXQoSlNDOjpBYnN0
cmFjdFNsb3RWaXNpdG9yJikgY29uc3Q7Cit0ZW1wbGF0ZSB2b2lkIEpTVmFsdWVJbldyYXBwZWRP
YmplY3Q6OnZpc2l0KEpTQzo6U2xvdFZpc2l0b3ImKSBjb25zdDsKKwogaW5saW5lIHZvaWQgSlNW
YWx1ZUluV3JhcHBlZE9iamVjdDo6Y2xlYXIoKQogewogICAgIFdURjo6c3dpdGNoT24obV92YWx1
ZSwgW10gKFdlYWsmIHZhbHVlKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U1ZpZGVvVHJhY2tDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTVmlkZW9UcmFja0N1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVmlkZW9UcmFja0N1c3RvbS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDIxIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtMzUsMTEgKzM1LDE0IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2Ug
SlNDOwogCi12b2lkIEpTVmlkZW9UcmFjazo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZp
c2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1ZpZGVv
VHJhY2s6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAg
dmlzaXRvci5hZGRPcGFxdWVSb290KHJvb3QoJndyYXBwZWQoKSkpOwogfQogCitERUZJTkVfVklT
SVRfQURESVRJT05BTF9DSElMRFJFTihKU1ZpZGVvVHJhY2spOworCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCiAKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNWaWRl
b1RyYWNrTGlzdEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNWaWRlb1RyYWNrTGlzdEN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVmlkZW9UcmFja0xpc3RDdXN0b20uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTM1LDExICszNSwxNCBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogdXNpbmcgbmFt
ZXNwYWNlIEpTQzsKIAotdm9pZCBKU1ZpZGVvVHJhY2tMaXN0Ojp2aXNpdEFkZGl0aW9uYWxDaGls
ZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2
b2lkIEpTVmlkZW9UcmFja0xpc3Q6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZp
c2l0b3IpCiB7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHJvb3Qod3JhcHBlZCgpLmVsZW1l
bnQoKSkpOwogfQogCitERUZJTkVfVklTSVRfQURESVRJT05BTF9DSElMRFJFTihKU1ZpZGVvVHJh
Y2tMaXN0KTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViR0wyUmVuZGVyaW5nQ29udGV4dEN1c3RvbS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJHTDJSZW5kZXJp
bmdDb250ZXh0Q3VzdG9tLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNXZWJHTDJSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTMzLDEyICszMywxNSBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogdXNpbmcgbmFt
ZXNwYWNlIEpTQzsKIAotdm9pZCBKU1dlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OnZpc2l0QWRkaXRp
b25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlz
aXRvcj4KK3ZvaWQgSlNXZWJHTDJSZW5kZXJpbmdDb250ZXh0Ojp2aXNpdEFkZGl0aW9uYWxDaGls
ZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdCgmd3Jh
cHBlZCgpKTsKICAgICB3cmFwcGVkKCkuYWRkTWVtYmVyc1RvT3BhcXVlUm9vdHModmlzaXRvcik7
CiB9CiAKK0RFRklORV9WSVNJVF9BRERJVElPTkFMX0NISUxEUkVOKEpTV2ViR0wyUmVuZGVyaW5n
Q29udGV4dCk7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShX
RUJHTCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViR0xSZW5kZXJpbmdD
b250ZXh0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU1dlYkdMUmVuZGVyaW5nQ29udGV4dEN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViR0xSZW5kZXJpbmdDb250ZXh0Q3VzdG9t
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE1LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC0zMywxMiArMzMsMTUgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKLXZvaWQgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZp
c2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlw
ZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZpc2l0QWRkaXRp
b25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVS
b290KCZ3cmFwcGVkKCkpOwogICAgIHdyYXBwZWQoKS5hZGRNZW1iZXJzVG9PcGFxdWVSb290cyh2
aXNpdG9yKTsKIH0KIAorREVGSU5FX1ZJU0lUX0FERElUSU9OQUxfQ0hJTERSRU4oSlNXZWJHTFJl
bmRlcmluZ0NvbnRleHQpOworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBF
TkFCTEUoV0VCR0wpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckds
b2JhbFNjb3BlQmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNXb3JrZXJHbG9iYWxTY29wZUJhc2UuY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckdsb2JhbFNjb3BlQmFzZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5
LCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAwOC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAo
QykgMjAwOSBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dApAQCAtOTIsNyArOTIsOCBAQCB2b2lkIEpTV29ya2VyR2xvYmFsU2NvcGVCYXNlOjpmaW5pc2hD
cmVhCiAgICAgQVNTRVJUKGluaGVyaXRzKHZtLCBpbmZvKCkpKTsKIH0KIAotdm9pZCBKU1dvcmtl
ckdsb2JhbFNjb3BlQmFzZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9y
JiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNXb3JrZXJHbG9i
YWxTY29wZUJhc2U6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlz
aXRvcikKIHsKICAgICBKU1dvcmtlckdsb2JhbFNjb3BlQmFzZSogdGhpc09iamVjdCA9IGpzQ2Fz
dDxKU1dvcmtlckdsb2JhbFNjb3BlQmFzZSo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1Rf
SU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTEwMCw2ICsxMDEsOCBAQCB2b2lkIEpT
V29ya2VyR2xvYmFsU2NvcGVCYXNlOjp2aXNpdENoaWxkCiAgICAgdmlzaXRvci5hcHBlbmQodGhp
c09iamVjdC0+bV9wcm94eSk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU1dvcmtlckds
b2JhbFNjb3BlQmFzZSk7CisKIHZvaWQgSlNXb3JrZXJHbG9iYWxTY29wZUJhc2U6OmRlc3Ryb3ko
SlNDZWxsKiBjZWxsKQogewogICAgIHN0YXRpY19jYXN0PEpTV29ya2VyR2xvYmFsU2NvcGVCYXNl
Kj4oY2VsbCktPkpTV29ya2VyR2xvYmFsU2NvcGVCYXNlOjp+SlNXb3JrZXJHbG9iYWxTY29wZUJh
c2UoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyR2xvYmFsU2Nv
cGVCYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXb3Jr
ZXJHbG9iYWxTY29wZUJhc2UuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNXb3JrZXJHbG9iYWxTY29wZUJhc2UuaAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC03OSw3ICs3OSw3IEBAIHByb3RlY3RlZDoKICAgICBKU1dvcmtlckdsb2JhbFNjb3BlQmFzZShK
U0M6OlZNJiwgSlNDOjpTdHJ1Y3R1cmUqLCBSZWZQdHI8V29ya2VyR2xvYmFsU2NvcGU+JiYpOwog
ICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYsIEpTQzo6SlNQcm94eSopOwogCi0gICAg
c3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3Im
KTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiBwcml2YXRlOgogICAgIFJlZlB0cjxX
b3JrZXJHbG9iYWxTY29wZT4gbV93cmFwcGVkOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNXb3JrZXJHbG9iYWxTY29wZUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrZXJHbG9iYWxTY29wZUN1c3RvbS5jcHAJKHJldmlz
aW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyR2xvYmFs
U2NvcGVDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAwOC0yMDA5LCAyMDExLCAyMDE2IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBS
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDIxIEFwcGxlIEluYy4gQWxsIFJpZ2h0
cyBSZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzMsNyArMzMs
OCBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAotdm9pZCBK
U1dvcmtlckdsb2JhbFNjb3BlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYg
dmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTV29ya2VyR2xvYmFs
U2NvcGU6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAg
aWYgKGF1dG8qIGxvY2F0aW9uID0gd3JhcHBlZCgpLm9wdGlvbmFsTG9jYXRpb24oKSkKICAgICAg
ICAgdmlzaXRvci5hZGRPcGFxdWVSb290KGxvY2F0aW9uKTsKQEAgLTQ4LDYgKzQ5LDggQEAgdm9p
ZCBKU1dvcmtlckdsb2JhbFNjb3BlOjp2aXNpdEFkZGl0aW9uYQogICAgIHdyYXBwZWQoKS52aXNp
dEpTRXZlbnRMaXN0ZW5lcnModmlzaXRvcik7CiB9CiAKK0RFRklORV9WSVNJVF9BRERJVElPTkFM
X0NISUxEUkVOKEpTV29ya2VyR2xvYmFsU2NvcGUpOworCiBKU1ZhbHVlIEpTV29ya2VyR2xvYmFs
U2NvcGU6OnF1ZXVlTWljcm90YXNrKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0
LCBDYWxsRnJhbWUmIGNhbGxGcmFtZSkKIHsKICAgICBWTSYgdm0gPSBsZXhpY2FsR2xvYmFsT2Jq
ZWN0LnZtKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlck5hdmln
YXRvckN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNXb3JrZXJOYXZpZ2F0b3JDdXN0b20uY3BwCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlck5hdmlnYXRvckN1c3RvbS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIxIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMjgsOSArMjgsMTIgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIEpTV29y
a2VyTmF2aWdhdG9yOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2
aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNXb3JrZXJOYXZpZ2F0
b3I6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgdmlz
aXRvci5hZGRPcGFxdWVSb290KHN0YXRpY19jYXN0PE5hdmlnYXRvckJhc2UqPigmd3JhcHBlZCgp
KSk7CiB9CiAKLX0KK0RFRklORV9WSVNJVF9BRERJVElPTkFMX0NISUxEUkVOKEpTV29ya2VyTmF2
aWdhdG9yKTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNXb3JrbGV0R2xvYmFsU2NvcGVCYXNlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtsZXRHbG9iYWxTY29wZUJhc2UuY3BwCShy
ZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtsZXRH
bG9iYWxTY29wZUJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTgtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTgyLDcgKzgyLDggQEAgdm9pZCBKU1dv
cmtsZXRHbG9iYWxTY29wZUJhc2U6OmZpbmlzaENyZQogICAgIEFTU0VSVChpbmhlcml0cyh2bSwg
aW5mbygpKSk7CiB9CiAKLXZvaWQgSlNXb3JrbGV0R2xvYmFsU2NvcGVCYXNlOjp2aXNpdENoaWxk
cmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBWaXNpdG9yPgordm9pZCBKU1dvcmtsZXRHbG9iYWxTY29wZUJhc2U6OnZpc2l0Q2hpbGRyZW5J
bXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBhdXRvKiB0aGlzT2Jq
ZWN0ID0ganNDYXN0PEpTV29ya2xldEdsb2JhbFNjb3BlQmFzZSo+KGNlbGwpOwogICAgIEFTU0VS
VF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTkwLDYgKzkxLDgg
QEAgdm9pZCBKU1dvcmtsZXRHbG9iYWxTY29wZUJhc2U6OnZpc2l0Q2hpbAogICAgIHZpc2l0b3Iu
YXBwZW5kKHRoaXNPYmplY3QtPm1fcHJveHkpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4o
SlNXb3JrbGV0R2xvYmFsU2NvcGVCYXNlKTsKKwogdm9pZCBKU1dvcmtsZXRHbG9iYWxTY29wZUJh
c2U6OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQogewogICAgIHN0YXRpY19jYXN0PEpTV29ya2xldEds
b2JhbFNjb3BlQmFzZSo+KGNlbGwpLT5KU1dvcmtsZXRHbG9iYWxTY29wZUJhc2U6On5KU1dvcmts
ZXRHbG9iYWxTY29wZUJhc2UoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
V29ya2xldEdsb2JhbFNjb3BlQmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTV29ya2xldEdsb2JhbFNjb3BlQmFzZS5oCShyZXZpc2lvbiAyNzI4MzApCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtsZXRHbG9iYWxTY29wZUJhc2UuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTgg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE4LTIw
MjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC02Nyw3ICs2Nyw3IEBAIHByb3RlY3RlZDoKICAgICBKU1dvcmtsZXRHbG9i
YWxTY29wZUJhc2UoSlNDOjpWTSYsIEpTQzo6U3RydWN0dXJlKiwgUmVmUHRyPFdvcmtsZXRHbG9i
YWxTY29wZT4mJik7CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJiwgSlNDOjpKU1By
b3h5Kik7CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQzo6SlNDZWxsKiwgSlND
OjpTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKIHByaXZhdGU6
CiAgICAgUmVmUHRyPFdvcmtsZXRHbG9iYWxTY29wZT4gbV93cmFwcGVkOwpJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNYTUxIdHRwUmVxdWVzdEN1c3RvbS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNYTUxIdHRwUmVxdWVzdEN1c3RvbS5j
cHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTWE1M
SHR0cFJlcXVlc3RDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQxLDcgKzQxLDggQEAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKLXZvaWQgSlNYTUxI
dHRwUmVxdWVzdDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3Ip
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1hNTEh0dHBSZXF1ZXN0Ojp2aXNp
dEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGlmIChhdXRvKiB1
cGxvYWQgPSB3cmFwcGVkKCkub3B0aW9uYWxVcGxvYWQoKSkKICAgICAgICAgdmlzaXRvci5hZGRP
cGFxdWVSb290KHVwbG9hZCk7CkBAIC01MCw2ICs1MSw4IEBAIHZvaWQgSlNYTUxIdHRwUmVxdWVz
dDo6dmlzaXRBZGRpdGlvbmFsQ2gKICAgICAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHJlc3Bv
bnNlRG9jdW1lbnQpOwogfQogCitERUZJTkVfVklTSVRfQURESVRJT05BTF9DSElMRFJFTihKU1hN
TEh0dHBSZXF1ZXN0KTsKKwogSlNWYWx1ZSBKU1hNTEh0dHBSZXF1ZXN0OjpyZXNwb25zZShKU0ds
b2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCkgY29uc3QKIHsKICAgICBhdXRvIGNhY2hl
UmVzdWx0ID0gWyZdIChKU1ZhbHVlIHZhbHVlKSAtPiBKU1ZhbHVlIHsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTWFBhdGhSZXN1bHRDdXN0b20uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTWFBhdGhSZXN1bHRDdXN0b20uY3BwCShyZXZp
c2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1hQYXRoUmVzdWx0
Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmln
aHQgKEMpIDIwMTEgSnVsaWVuIENoYWZmcmFpeCA8amNoYWZmcmFpeEB3ZWJraXQub3JnPgorICog
Q29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzEsNyArMzIsOCBAQAogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLXZvaWQgSlNYUGF0aFJlc3VsdDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4o
SlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2
b2lkIEpTWFBhdGhSZXN1bHQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0
b3IpCiB7CiAgICAgYXV0byYgdmFsdWUgPSB3cmFwcGVkKCkudmFsdWUoKTsKICAgICBpZiAodmFs
dWUuaXNOb2RlU2V0KCkpIHsKQEAgLTQxLDQgKzQzLDYgQEAgdm9pZCBKU1hQYXRoUmVzdWx0Ojp2
aXNpdEFkZGl0aW9uYWxDaGlsZAogICAgIH0KIH0KIAorREVGSU5FX1ZJU0lUX0FERElUSU9OQUxf
Q0hJTERSRU4oSlNYUGF0aFJlc3VsdCk7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV2ViQ29yZVR5cGVk
QXJyYXlDb250cm9sbGVyLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvV2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC01Niw3ICs1Niw3IEBAIGJvb2wgV2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyOjppc0F0b20K
ICAgICByZXR1cm4gbV9hbGxvd0F0b21pY3NXYWl0OwogfQogCi1ib29sIFdlYkNvcmVUeXBlZEFy
cmF5Q29udHJvbGxlcjo6SlNBcnJheUJ1ZmZlck93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVS
b290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIEpTQzo6U2xvdFZp
c2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCitib29sIFdlYkNvcmVUeXBlZEFy
cmF5Q29udHJvbGxlcjo6SlNBcnJheUJ1ZmZlck93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVS
b290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIEpTQzo6QWJzdHJh
Y3RTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikKIHsKICAgICBpZiAo
VU5MSUtFTFkocmVhc29uKSkKICAgICAgICAgKnJlYXNvbiA9ICJBcnJheUJ1ZmZlciBpcyBvcGFx
dWUgcm9vdCI7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlVHlwZWRB
cnJheUNvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9XZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXIuaAkocmV2aXNpb24gMjcyODMwKQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtNDgsNyArNDgsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIGNsYXNzIEpT
QXJyYXlCdWZmZXJPd25lciA6IHB1YmxpYyBKU0M6OldlYWtIYW5kbGVPd25lciB7CiAgICAgcHVi
bGljOgotICAgICAgICBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxl
PEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6U2xvdFZpc2l0b3ImLCBjb25zdCBj
aGFyKiopIG92ZXJyaWRlOworICAgICAgICBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3Rz
KEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6QWJzdHJhY3RT
bG90VmlzaXRvciYsIGNvbnN0IGNoYXIqKikgb3ZlcnJpZGU7CiAgICAgICAgIHZvaWQgZmluYWxp
emUoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCkgb3ZlcnJpZGU7CiAg
ICAgfTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJh
dG9ySlMucG0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9D
b2RlR2VuZXJhdG9ySlMucG0JKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCSh3b3JraW5nIGNvcHkpCkBAIC0zLDcg
KzMsNyBAQAogIyBDb3B5cmlnaHQgKEMpIDIwMDYgQW5kZXJzIENhcmxzc29uIDxhbmRlcnNjYUBt
YWMuY29tPgogIyBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgU2FtdWVsIFdlaW5pZyA8c2FtQHdl
YmtpdC5vcmc+CiAjIENvcHlyaWdodCAoQykgMjAwNiBBbGV4ZXkgUHJvc2t1cnlha292IDxhcEB3
ZWJraXQub3JnPgotIyBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisjIENvcHlyaWdodCAoQykgMjAwNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICMgQ29weXJpZ2h0IChDKSAyMDA5IENhbWVyb24gTWNDb3JtYWNrIDxj
YW1AbWNjLmlkLmF1PgogIyBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVk
IDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAjIENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBD
b3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKQEAgLTMwNzgsOCArMzA3OCw4
IEBAIHN1YiBHZW5lcmF0ZUhlYWRlcgogCiAgICAgIyB2aXNpdCBmdW5jdGlvbgogICAgIGlmICgk
bmVlZHNWaXNpdENoaWxkcmVuKSB7Ci0gICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAg
c3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJik7XG4i
KTsKLSAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICB2b2lkIHZpc2l0QWRkaXRpb25h
bENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImKTtcbiIpIGlmICRpbnRlcmZhY2UtPmV4dGVuZGVk
QXR0cmlidXRlcy0+e0pTQ3VzdG9tTWFya0Z1bmN0aW9ufTsKKyAgICAgICAgcHVzaChAaGVhZGVy
Q29udGVudCwgIiAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOO1xuIik7CisgICAgICAgIHB1c2go
QGhlYWRlckNvbnRlbnQsICIgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCB2aXNp
dEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJik7XG4iKSBpZiAkaW50ZXJmYWNlLT5leHRlbmRl
ZEF0dHJpYnV0ZXMtPntKU0N1c3RvbU1hcmtGdW5jdGlvbn07CiAgICAgICAgIHB1c2goQGhlYWRl
ckNvbnRlbnQsICJcbiIpOwogCiAgICAgICAgIGlmICgkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJp
YnV0ZXMtPntKU0N1c3RvbU1hcmtGdW5jdGlvbn0pIHsKQEAgLTMwOTQsNyArMzA5NCw3IEBAIHN1
YiBHZW5lcmF0ZUhlYWRlcgogICAgICAgICAgICAgIyB0aGF0IHRoZSBHQyBjYWxscyB0byBhc2sg
YW4gb2JqZWN0IGlzIGl0IHdvdWxkIGxpa2UgdG8gbWFyayBhbnl0aGluZyBlbHNlIGFmdGVyIHRo
ZQogICAgICAgICAgICAgIyBwcm9ncmFtIHJlc3VtZWQgc2luY2UgdGhlIGxhc3QgY2FsbCB0byB2
aXNpdENoaWxkcmVuIG9yIHZpc2l0T3V0cHV0Q29uc3RyYWludHMuIFNpbmNlCiAgICAgICAgICAg
ICAjIHRoaXMganVzdCBjYWxscyB2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbiwgeW91IHVzdWFsbHkg
ZG9uJ3QgaGF2ZSB0byB3b3JyeSBhYm91dCB0aGlzLgotICAgICAgICAgICAgcHVzaChAaGVhZGVy
Q29udGVudCwgIiAgICBzdGF0aWMgdm9pZCB2aXNpdE91dHB1dENvbnN0cmFpbnRzKEpTQ2VsbCos
IEpTQzo6U2xvdFZpc2l0b3ImKTtcbiIpOworICAgICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVu
dCwgIiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiBzdGF0aWMgdm9pZCB2aXNpdE91dHB1
dENvbnN0cmFpbnRzKEpTQ2VsbCosIFZpc2l0b3ImKTtcbiIpOwogICAgICAgICB9CiAgICAgfQog
CkBAIC0zMjE1LDcgKzMyMTUsNyBAQCBzdWIgR2VuZXJhdGVIZWFkZXIKICAgICAgICAgfQogICAg
ICAgICAkaGVhZGVySW5jbHVkZXN7Ijx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4ifSA9IDE7CiAgICAg
ICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJwdWJsaWM6XG4iKTsKLSAgICAgICAgcHVzaChAaGVh
ZGVyQ29udGVudCwgIiAgICBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFu
ZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6U2xvdFZpc2l0b3ImLCBjb25z
dCBjaGFyKiopICR7b3ZlcnJpZGVEZWNsfTtcbiIpOworICAgICAgICBwdXNoKEBoZWFkZXJDb250
ZW50LCAiICAgIGJvb2wgaXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlND
OjpVbmtub3duPiwgdm9pZCogY29udGV4dCwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiwgY29u
c3QgY2hhcioqKSAke292ZXJyaWRlRGVjbH07XG4iKTsKICAgICAgICAgcHVzaChAaGVhZGVyQ29u
dGVudCwgIiAgICB2b2lkIGZpbmFsaXplKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQq
IGNvbnRleHQpICR7b3ZlcnJpZGVEZWNsfTtcbiIpOwogICAgICAgICBwdXNoKEBoZWFkZXJDb250
ZW50LCAifTtcbiIpOwogICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiXG4iKTsKQEAgLTQ5
MzksNiArNDkzOSw3IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgQWRkVG9JbXBs
SW5jbHVkZXMoIkRPTUlzb1N1YnNwYWNlcy5oIik7CiAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIldl
YkNvcmVKU0NsaWVudERhdGEuaCIpOwogICAgIEFkZFRvSW1wbEluY2x1ZGVzKCI8SmF2YVNjcmlw
dENvcmUvSlNEZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUuaD4iKTsKKyAgICBBZGRUb0lt
cGxJbmNsdWRlcygiPEphdmFTY3JpcHRDb3JlL1Nsb3RWaXNpdG9yTWFjcm9zLmg+Iik7CiAgICAg
QWRkVG9JbXBsSW5jbHVkZXMoIjxKYXZhU2NyaXB0Q29yZS9TdWJzcGFjZUlubGluZXMuaD4iKTsK
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgIkpTQzo6SXNvU3Vic3BhY2UqICR7Y2xhc3NOYW1lfTo6
c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKVxuIik7CiAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICJ7XG4iKTsKQEAgLTQ5NTgsNyArNDk1OSwxMCBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlv
bgogICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGF1dG8qIHNwYWNlID0gc3BhY2VzLm1fc3Vi
c3BhY2VGb3Ike2ludGVyZmFjZU5hbWV9LmdldCgpO1xuIik7CiAgICAgcHVzaChAaW1wbENvbnRl
bnQsICJJR05PUkVfV0FSTklOR1NfQkVHSU4oXCJ1bnJlYWNoYWJsZS1jb2RlXCIpXG4iKTsKICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgIklHTk9SRV9XQVJOSU5HU19CRUdJTihcInRhdXRvbG9naWNh
bC1jb21wYXJlXCIpXG4iKTsKLSAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAoJiR7Y2xh
c3NOYW1lfTo6dmlzaXRPdXRwdXRDb25zdHJhaW50cyAhPSAmSlNDOjpKU0NlbGw6OnZpc2l0T3V0
cHV0Q29uc3RyYWludHMpXG4iKTsKKyAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICB2b2lkICgq
bXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYp
ID0gJHtjbGFzc05hbWV9Ojp2aXNpdE91dHB1dENvbnN0cmFpbnRzO1xuIik7CisgICAgcHVzaChA
aW1wbENvbnRlbnQsICIgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlND
OjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRD
b25zdHJhaW50cztcbiIpOworICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGlmIChteVZpc2l0
T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpXG4iKTsKKyMg
ICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgaWYgKCYke2NsYXNzTmFtZX06OnZpc2l0T3V0cHV0
Q29uc3RyYWludHMgIT0gJkpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzKVxuIik7
CiAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIGNsaWVudERhdGEub3V0cHV0Q29uc3Ry
YWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7XG4iKTsKICAgICBwdXNoKEBpbXBsQ29udGVudCwg
IklHTk9SRV9XQVJOSU5HU19FTkRcbiIpOwogICAgIHB1c2goQGltcGxDb250ZW50LCAiSUdOT1JF
X1dBUk5JTkdTX0VORFxuIik7CkBAIC00OTY2LDcgKzQ5NzAsOCBAQCBzdWIgR2VuZXJhdGVJbXBs
ZW1lbnRhdGlvbgogICAgIHB1c2goQGltcGxDb250ZW50LCAifVxuXG4iKTsKIAogICAgIGlmICgk
bmVlZHNWaXNpdENoaWxkcmVuKSB7Ci0gICAgICAgIHB1c2goQGltcGxDb250ZW50LCAidm9pZCAk
e2NsYXNzTmFtZX06OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlz
aXRvcilcbiIpOworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgInRlbXBsYXRlPHR5cGVuYW1l
IFZpc2l0b3I+XG4iKTsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ2b2lkICR7Y2xhc3NO
YW1lfTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKVxu
Iik7CiAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAie1xuIik7CiAgICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAiICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8JHtjbGFzc05hbWV9Kj4o
Y2VsbCk7XG4iKTsKICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgQVNTRVJUX0dDX09C
SkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpO1xuIik7CkBAIC00OTkxLDE0ICs0OTk2
LDE5IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgICAgICAgICB9CiAgICAgICAg
IH0KICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ9XG5cbiIpOworICAgICAgICBwdXNoKEBp
bXBsQ29udGVudCwgIkRFRklORV9WSVNJVF9DSElMRFJFTigke2NsYXNzTmFtZX0pO1xuXG4iKTsK
KwogICAgICAgICBpZiAoJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57SlNDdXN0b21N
YXJrRnVuY3Rpb259KSB7Ci0gICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgInZvaWQgJHtj
bGFzc05hbWV9Ojp2aXNpdE91dHB1dENvbnN0cmFpbnRzKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0
b3ImIHZpc2l0b3IpXG4iKTsKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAidGVtcGxh
dGU8dHlwZW5hbWUgVmlzaXRvcj5cbiIpOworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICJ2b2lkICR7Y2xhc3NOYW1lfTo6dmlzaXRPdXRwdXRDb25zdHJhaW50cyhKU0NlbGwqIGNlbGws
IFZpc2l0b3ImIHZpc2l0b3IpXG4iKTsKICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
e1xuIik7CiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBhdXRvKiB0aGlzT2Jq
ZWN0ID0ganNDYXN0PCR7Y2xhc3NOYW1lfSo+KGNlbGwpO1xuIik7CiAgICAgICAgICAgICBwdXNo
KEBpbXBsQ29udGVudCwgIiAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3Qs
IGluZm8oKSk7XG4iKTsKICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIEJhc2U6
OnZpc2l0T3V0cHV0Q29uc3RyYWludHModGhpc09iamVjdCwgdmlzaXRvcik7XG4iKTsKICAgICAg
ICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHRoaXNPYmplY3QtPnZpc2l0QWRkaXRpb25h
bENoaWxkcmVuKHZpc2l0b3IpO1xuIik7CiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwg
In1cblxuIik7CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgInRlbXBsYXRlIHZvaWQg
JHtjbGFzc05hbWV9Ojp2aXNpdE91dHB1dENvbnN0cmFpbnRzKEpTQ2VsbCosIEFic3RyYWN0U2xv
dFZpc2l0b3ImKTtcbiIpOworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ0ZW1wbGF0
ZSB2b2lkICR7Y2xhc3NOYW1lfTo6dmlzaXRPdXRwdXRDb25zdHJhaW50cyhKU0NlbGwqLCBTbG90
VmlzaXRvciYpO1xuIik7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTUwMzMsNyArNTA0Myw3IEBA
IHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgfQogCiAgICAgaWYgKFNob3VsZEdlbmVy
YXRlV3JhcHBlck93bmVyQ29kZSgkaGFzUGFyZW50LCAkaW50ZXJmYWNlKSAmJiAhR2V0Q3VzdG9t
SXNSZWFjaGFibGUoJGludGVyZmFjZSkpIHsKLSAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJi
b29sIEpTJHtpbnRlcmZhY2VOYW1lfU93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhK
U0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIFNsb3RWaXNpdG9yJiB2aXNp
dG9yLCBjb25zdCBjaGFyKiogcmVhc29uKVxuIik7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50
LCAiYm9vbCBKUyR7aW50ZXJmYWNlTmFtZX1Pd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9v
dHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBBYnN0cmFjdFNsb3RW
aXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKVxuIik7CiAgICAgICAgIHB1c2go
QGltcGxDb250ZW50LCAie1xuIik7CiAgICAgICAgICMgQWxsIEFjdGl2ZURPTU9iamVjdHMgaW1w
bGVtZW50IGhhc1BlbmRpbmdBY3Rpdml0eSgpLCBidXQgbm90IGFsbCBvZiB0aGVtCiAgICAgICAg
ICMgaW5jcmVtZW50IHRoZWlyIEMrKyByZWZlcmVuY2UgY291bnRzIHdoZW4gaGFzUGVuZGluZ0Fj
dGl2aXR5KCkgYmVjb21lcwpAQCAtNjQzMiw2ICs2NDQyLDcgQEAgc3ViIEdlbmVyYXRlQ2FsbGJh
Y2tIZWFkZXJDb250ZW50CiAgICAgICAgIHB1c2goQCRjb250ZW50UmVmLCAiICAgIGJvb2wgaGFz
Q2FsbGJhY2soKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2RhdGEgJiYgbV9kYXRhLT5jYWxsYmFj
aygpOyB9XG5cbiIpOwogICAgIH0KIAorICAgIHB1c2goQCRjb250ZW50UmVmLCAiICAgIHZvaWQg
dmlzaXRKU0Z1bmN0aW9uKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpIG92ZXJyaWRlO1xuXG4i
KSBpZiAkaW50ZXJmYWNlT3JDYWxsYmFjay0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57SXNXZWFrQ2Fs
bGJhY2t9OwogICAgIHB1c2goQCRjb250ZW50UmVmLCAiICAgIHZvaWQgdmlzaXRKU0Z1bmN0aW9u
KEpTQzo6U2xvdFZpc2l0b3ImKSBvdmVycmlkZTtcblxuIikgaWYgJGludGVyZmFjZU9yQ2FsbGJh
Y2stPmV4dGVuZGVkQXR0cmlidXRlcy0+e0lzV2Vha0NhbGxiYWNrfTsKIAogICAgIHB1c2goQCRj
b250ZW50UmVmLCAiICAgICR7Y2FsbGJhY2tEYXRhVHlwZX0qIG1fZGF0YTtcbiIpOwpAQCAtNjYy
Myw2ICs2NjM0LDEwIEBAIHN1YiBHZW5lcmF0ZUNhbGxiYWNrSW1wbGVtZW50YXRpb25Db250ZW4K
ICAgICB9CiAKICAgICBpZiAoJGludGVyZmFjZU9yQ2FsbGJhY2stPmV4dGVuZGVkQXR0cmlidXRl
cy0+e0lzV2Vha0NhbGxiYWNrfSkgeworICAgICAgICBwdXNoKEAkY29udGVudFJlZiwgInZvaWQg
JHtjbGFzc05hbWV9Ojp2aXNpdEpTRnVuY3Rpb24oSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiB2
aXNpdG9yKVxuIik7CisgICAgICAgIHB1c2goQCRjb250ZW50UmVmLCAie1xuIik7CisgICAgICAg
IHB1c2goQCRjb250ZW50UmVmLCAiICAgIG1fZGF0YS0+dmlzaXRKU0Z1bmN0aW9uKHZpc2l0b3Ip
O1xuIik7CisgICAgICAgIHB1c2goQCRjb250ZW50UmVmLCAifVxuXG4iKTsKICAgICAgICAgcHVz
aChAJGNvbnRlbnRSZWYsICJ2b2lkICR7Y2xhc3NOYW1lfTo6dmlzaXRKU0Z1bmN0aW9uKEpTQzo6
U2xvdFZpc2l0b3ImIHZpc2l0b3IpXG4iKTsKICAgICAgICAgcHVzaChAJGNvbnRlbnRSZWYsICJ7
XG4iKTsKICAgICAgICAgcHVzaChAJGNvbnRlbnRSZWYsICIgICAgbV9kYXRhLT52aXNpdEpTRnVu
Y3Rpb24odmlzaXRvcik7XG4iKTsKQEAgLTY3MzQsNiArNjc0OSw3IEBAIHN1YiBHZW5lcmF0ZUl0
ZXJhYmxlRGVmaW5pdGlvbgogICAgIG15ICR2aXNpYmxlSW50ZXJmYWNlTmFtZSA9ICRjb2RlR2Vu
ZXJhdG9yLT5HZXRWaXNpYmxlSW50ZXJmYWNlTmFtZSgkaW50ZXJmYWNlKTsKIAogICAgIEFkZFRv
SW1wbEluY2x1ZGVzKCJKU0RPTUl0ZXJhdG9yLmgiKTsKKyAgICBBZGRUb0ltcGxJbmNsdWRlcygi
PEphdmFTY3JpcHRDb3JlL1Nsb3RWaXNpdG9yTWFjcm9zLmg+Iik7CiAKICAgICByZXR1cm4gdW5s
ZXNzIElzS2V5VmFsdWVJdGVyYWJsZUludGVyZmFjZSgkaW50ZXJmYWNlKTsKIApAQCAtNjc3Nyw3
ICs2NzkzLDkgQEAgcHVibGljOgogICAgICAgICBhdXRvKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNw
YWNlRm9yJHtpdGVyYXRvck5hbWV9LmdldCgpOwogSUdOT1JFX1dBUk5JTkdTX0JFR0lOKFwidW5y
ZWFjaGFibGUtY29kZVwiKQogSUdOT1JFX1dBUk5JTkdTX0JFR0lOKFwidGF1dG9sb2dpY2FsLWNv
bXBhcmVcIikKLSAgICAgICAgaWYgKCYke2l0ZXJhdG9yTmFtZX06OnZpc2l0T3V0cHV0Q29uc3Ry
YWludHMgIT0gJkpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzKQorICAgICAgICB2
b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90Vmlz
aXRvciYpID0gJHtpdGVyYXRvck5hbWV9Ojp2aXNpdE91dHB1dENvbnN0cmFpbnRzOworICAgICAg
ICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6
U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOworICAg
ICAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25z
dHJhaW50KQogICAgICAgICAgICAgY2xpZW50RGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCku
YXBwZW5kKHNwYWNlKTsKIElHTk9SRV9XQVJOSU5HU19FTkQKIElHTk9SRV9XQVJOSU5HU19FTkQK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9BY3RpdmVET01DYWxsYmFjay5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9BY3RpdmVET01DYWxsYmFjay5oCShyZXZpc2lvbiAyNzI4
MzApCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vQWN0aXZlRE9NQ2FsbGJhY2suaAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTIgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMgYXJlCkBAIC0zMyw2ICszNCw3IEBACiAjaW5jbHVkZSAiQ29udGV4dERlc3RydWN0aW9uT2Jz
ZXJ2ZXIuaCIKIAogbmFtZXNwYWNlIEpTQyB7CitjbGFzcyBBYnN0cmFjdFNsb3RWaXNpdG9yOwog
Y2xhc3MgU2xvdFZpc2l0b3I7CiB9CiAKQEAgLTU1LDYgKzU3LDcgQEAgcHVibGljOgogICAgIFdF
QkNPUkVfRVhQT1JUIGJvb2wgYWN0aXZlRE9NT2JqZWN0c0FyZVN1c3BlbmRlZCgpIGNvbnN0Owog
ICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgYWN0aXZlRE9NT2JqZWN0QXJlU3RvcHBlZCgpIGNvbnN0
OwogICAgIAorICAgIHZpcnR1YWwgdm9pZCB2aXNpdEpTRnVuY3Rpb24oSlNDOjpBYnN0cmFjdFNs
b3RWaXNpdG9yJikgeyB9CiAgICAgdmlydHVhbCB2b2lkIHZpc2l0SlNGdW5jdGlvbihKU0M6OlNs
b3RWaXNpdG9yJikgeyB9CiB9OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRMaXN0
ZW5lci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9FdmVudExpc3RlbmVyLmgJ
KHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9FdmVudExpc3RlbmVyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA2
LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAwNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYwpAQCAtMjQsNiArMjQsNyBAQAogI2luY2x1ZGUgPHd0Zi9XZWFrUHRyLmg+CiAK
IG5hbWVzcGFjZSBKU0MgeworY2xhc3MgQWJzdHJhY3RTbG90VmlzaXRvcjsKIGNsYXNzIEpTT2Jq
ZWN0OwogY2xhc3MgU2xvdFZpc2l0b3I7CiB9CkBAIC01Miw2ICs1Myw3IEBAIHB1YmxpYzoKICAg
ICB2aXJ0dWFsIHZvaWQgaGFuZGxlRXZlbnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIEV2ZW50
JikgPSAwOwogICAgIHZpcnR1YWwgYm9vbCB3YXNDcmVhdGVkRnJvbU1hcmt1cCgpIGNvbnN0IHsg
cmV0dXJuIGZhbHNlOyB9CiAKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXRKU0Z1bmN0aW9uKEpTQzo6
QWJzdHJhY3RTbG90VmlzaXRvciYpIHsgfQogICAgIHZpcnR1YWwgdm9pZCB2aXNpdEpTRnVuY3Rp
b24oSlNDOjpTbG90VmlzaXRvciYpIHsgfQogCiAgICAgdmlydHVhbCBib29sIGlzQXR0cmlidXRl
KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9FdmVu
dFRhcmdldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50VGFyZ2V0
LmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50VGFyZ2V0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMiw3ICsyLDcgQEAKICAqIENvcHlyaWdodCAoQykgMTk5
OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQogICogICAgICAgICAgIChDKSAxOTk5IEFudHRp
IEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQogICogICAgICAgICAgIChDKSAyMDAxIERpcmsg
TXVlbGxlciAobXVlbGxlckBrZGUub3JnKQotICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMTcgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA2IEFs
ZXhleSBQcm9za3VyeWFrb3YgKGFwQHdlYmtpdC5vcmcpCiAgKiAgICAgICAgICAgKEMpIDIwMDcs
IDIwMDggTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CiAgKgpAQCAtMzg0
LDcgKzM4NCw4IEBAIHZvaWQgRXZlbnRUYXJnZXQ6OnJlbW92ZUFsbEV2ZW50TGlzdGVuZXIKICAg
ICB0aHJlYWREYXRhLnNldElzSW5SZW1vdmVBbGxFdmVudExpc3RlbmVycyhmYWxzZSk7CiB9CiAK
LXZvaWQgRXZlbnRUYXJnZXQ6OnZpc2l0SlNFdmVudExpc3RlbmVycyhKU0M6OlNsb3RWaXNpdG9y
JiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgRXZlbnRUYXJnZXQ6
OnZpc2l0SlNFdmVudExpc3RlbmVycyhWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEV2ZW50VGFy
Z2V0RGF0YSogZGF0YSA9IGV2ZW50VGFyZ2V0RGF0YUNvbmN1cnJlbnRseSgpOwogICAgIGlmICgh
ZGF0YSkKQEAgLTM5Niw2ICszOTcsOSBAQCB2b2lkIEV2ZW50VGFyZ2V0Ojp2aXNpdEpTRXZlbnRM
aXN0ZW5lcnMoCiAgICAgICAgIGxpc3RlbmVyLT52aXNpdEpTRnVuY3Rpb24odmlzaXRvcik7CiB9
CiAKK3RlbXBsYXRlIHZvaWQgRXZlbnRUYXJnZXQ6OnZpc2l0SlNFdmVudExpc3RlbmVycyhKU0M6
OkFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgRXZlbnRUYXJnZXQ6OnZpc2l0
SlNFdmVudExpc3RlbmVycyhKU0M6OlNsb3RWaXNpdG9yJik7CisKIHZvaWQgRXZlbnRUYXJnZXQ6
OmludmFsaWRhdGVFdmVudExpc3RlbmVyUmVnaW9ucygpCiB7CiAgICAgaWYgKGlzPEVsZW1lbnQ+
KCp0aGlzKSkgewpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50VGFyZ2V0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50VGFyZ2V0LmgJKHJldmlzaW9uIDI3Mjgz
MCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9FdmVudFRhcmdldC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yLDcgKzIsNyBAQAogICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtk
ZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtk
ZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDIwMDEgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5v
cmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQWxleGV5IFByb3NrdXJ5YWtvdiAoYXBA
d2Via2l0Lm9yZykKICAqICAgICAgICAgICAoQykgMjAwNywgMjAwOCBOaWtvbGFzIFppbW1lcm1h
bm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KICAqCkBAIC05Nyw3ICs5Nyw3IEBAIHB1YmxpYzoKICAg
ICB2b2lkIGZpcmVFdmVudExpc3RlbmVycyhFdmVudCYsIEV2ZW50SW52b2tlUGhhc2UpOwogICAg
IGJvb2wgaXNGaXJpbmdFdmVudExpc3RlbmVycygpIGNvbnN0OwogCi0gICAgdm9pZCB2aXNpdEpT
RXZlbnRMaXN0ZW5lcnMoSlNDOjpTbG90VmlzaXRvciYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFZpc2l0b3I+IHZvaWQgdmlzaXRKU0V2ZW50TGlzdGVuZXJzKFZpc2l0b3ImKTsKICAgICB2b2lk
IGludmFsaWRhdGVKU0V2ZW50TGlzdGVuZXJzKEpTQzo6SlNPYmplY3QqKTsKIAogICAgIGNvbnN0
IEV2ZW50VGFyZ2V0RGF0YSogZXZlbnRUYXJnZXREYXRhKCkgY29uc3Q7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9kb20vTXV0YXRpb25SZWNvcmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2RvbS9NdXRhdGlvblJlY29yZC5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2RvbS9NdXRhdGlvblJlY29yZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2
IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQpAQCAtNDEsNyArNDIsNyBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIG5hbWVzcGFjZSB7CiAKLXN0YXRpYyB2b2lkIHZpc2l0
Tm9kZUxpc3QoSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvciwgTm9kZUxpc3QmIG5vZGVMaXN0KQor
c3RhdGljIHZvaWQgdmlzaXROb2RlTGlzdChKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0
b3IsIE5vZGVMaXN0JiBub2RlTGlzdCkKIHsKICAgICBBU1NFUlQoIW5vZGVMaXN0LmlzTGl2ZU5v
ZGVMaXN0KCkpOwogICAgIHVuc2lnbmVkIGxlbmd0aCA9IG5vZGVMaXN0Lmxlbmd0aCgpOwpAQCAt
NjgsNyArNjksNyBAQCBwcml2YXRlOgogICAgIE5vZGUqIHByZXZpb3VzU2libGluZygpIG92ZXJy
aWRlIHsgcmV0dXJuIG1fcHJldmlvdXNTaWJsaW5nLmdldCgpOyB9CiAgICAgTm9kZSogbmV4dFNp
YmxpbmcoKSBvdmVycmlkZSB7IHJldHVybiBtX25leHRTaWJsaW5nLmdldCgpOyB9CiAKLSAgICB2
b2lkIHZpc2l0Tm9kZXNDb25jdXJyZW50bHkoSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikgY29u
c3QgZmluYWwKKyAgICB2b2lkIHZpc2l0Tm9kZXNDb25jdXJyZW50bHkoSlNDOjpBYnN0cmFjdFNs
b3RWaXNpdG9yJiB2aXNpdG9yKSBjb25zdCBmaW5hbAogICAgIHsKICAgICAgICAgdmlzaXRvci5h
ZGRPcGFxdWVSb290KHJvb3QobV90YXJnZXQucHRyKCkpKTsKICAgICAgICAgaWYgKG1fYWRkZWRO
b2RlcykKQEAgLTEwNSw3ICsxMDYsNyBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gbm9kZUxp
c3QuZ2V0KCk7CiAgICAgfQogCi0gICAgdm9pZCB2aXNpdE5vZGVzQ29uY3VycmVudGx5KEpTQzo6
U2xvdFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0IGZpbmFsCisgICAgdm9pZCB2aXNpdE5vZGVzQ29u
Y3VycmVudGx5KEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikgY29uc3QgZmluYWwK
ICAgICB7CiAgICAgICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChyb290KG1fdGFyZ2V0LnB0cigp
KSk7CiAgICAgfQpAQCAtMTY0LDcgKzE2NSw3IEBAIHByaXZhdGU6CiAKICAgICBTdHJpbmcgb2xk
VmFsdWUoKSBvdmVycmlkZSB7IHJldHVybiBTdHJpbmcoKTsgfQogCi0gICAgdm9pZCB2aXNpdE5v
ZGVzQ29uY3VycmVudGx5KEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0IGZpbmFsCisg
ICAgdm9pZCB2aXNpdE5vZGVzQ29uY3VycmVudGx5KEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYg
dmlzaXRvcikgY29uc3QgZmluYWwKICAgICB7CiAgICAgICAgIG1fcmVjb3JkLT52aXNpdE5vZGVz
Q29uY3VycmVudGx5KHZpc2l0b3IpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9N
dXRhdGlvblJlY29yZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9NdXRhdGlv
blJlY29yZC5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vTXV0YXRp
b25SZWNvcmQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmln
aHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlCkBAIC0zNiw3ICszNyw3IEBACiAKIG5hbWVzcGFjZSBKU0Mg
ewogCi1jbGFzcyBTbG90VmlzaXRvcjsKK2NsYXNzIEFic3RyYWN0U2xvdFZpc2l0b3I7CiAKIH0K
IApAQCAtNzIsNyArNzMsNyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIFN0cmluZyBvbGRWYWx1
ZSgpIHsgcmV0dXJuIFN0cmluZygpOyB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXROb2Rlc0Nv
bmN1cnJlbnRseShKU0M6OlNsb3RWaXNpdG9yJikgY29uc3QgPSAwOworICAgIHZpcnR1YWwgdm9p
ZCB2aXNpdE5vZGVzQ29uY3VycmVudGx5KEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpIGNvbnN0
ID0gMDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2RvbS9Ob2RlRmlsdGVyQ29uZGl0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
ZG9tL05vZGVGaWx0ZXJDb25kaXRpb24uaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL1dl
YkNvcmUvZG9tL05vZGVGaWx0ZXJDb25kaXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyAr
MzgsNyBAQCBjbGFzcyBOb2RlRmlsdGVyQ29uZGl0aW9uIDogcHVibGljIFJlZkNvCiBwdWJsaWM6
CiAgICAgdmlydHVhbCB+Tm9kZUZpbHRlckNvbmRpdGlvbigpID0gZGVmYXVsdDsKICAgICB2aXJ0
dWFsIHVuc2lnbmVkIHNob3J0IGFjY2VwdE5vZGUoTm9kZSYpIGNvbnN0ID0gMDsKLSAgICB2aXJ0
dWFsIHZvaWQgdmlzaXRBZ2dyZWdhdGUoSlNDOjpTbG90VmlzaXRvciYpIHsgfQorLy8gICAgdmly
dHVhbCB2b2lkIHZpc2l0QWdncmVnYXRlKEpTQzo6U2xvdFZpc2l0b3ImKSB7IH0gLy8gbWxhbSBV
TlVTRUQKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2RvbS9TdGF0aWNSYW5nZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL1N0
YXRpY1JhbmdlLmNwcAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL1dlYkNvcmUvZG9tL1N0
YXRpY1JhbmdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTYtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTc2LDcgKzc2LDcgQEAgRXhjZXB0aW9u
T3I8UmVmPFN0YXRpY1JhbmdlPj4gU3RhdGljUmFuZwogICAgIHJldHVybiBjcmVhdGUoeyB7IGlu
aXQuc3RhcnRDb250YWluZXIucmVsZWFzZU5vbk51bGwoKSwgaW5pdC5zdGFydE9mZnNldCB9LCB7
IGluaXQuZW5kQ29udGFpbmVyLnJlbGVhc2VOb25OdWxsKCksIGluaXQuZW5kT2Zmc2V0IH0gfSk7
CiB9CiAKLXZvaWQgU3RhdGljUmFuZ2U6OnZpc2l0Tm9kZXNDb25jdXJyZW50bHkoSlNDOjpTbG90
VmlzaXRvciYgdmlzaXRvcikgY29uc3QKK3ZvaWQgU3RhdGljUmFuZ2U6OnZpc2l0Tm9kZXNDb25j
dXJyZW50bHkoSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBjb25zdAogewogICAg
IHZpc2l0b3IuYWRkT3BhcXVlUm9vdChyb290KHN0YXJ0LmNvbnRhaW5lci5nZXQoKSkpOwogICAg
IHZpc2l0b3IuYWRkT3BhcXVlUm9vdChyb290KGVuZC5jb250YWluZXIuZ2V0KCkpKTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2RvbS9TdGF0aWNSYW5nZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2RvbS9TdGF0aWNSYW5nZS5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2Vi
Q29yZS9kb20vU3RhdGljUmFuZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMwLDcgKzMwLDcgQEAK
IAogbmFtZXNwYWNlIEpTQyB7CiAKLWNsYXNzIFNsb3RWaXNpdG9yOworY2xhc3MgQWJzdHJhY3RT
bG90VmlzaXRvcjsKIAogfQogCkBAIC01OCw3ICs1OCw3IEBAIHB1YmxpYzoKICAgICB1bnNpZ25l
ZCBlbmRPZmZzZXQoKSBjb25zdCBmaW5hbCB7IHJldHVybiBTaW1wbGVSYW5nZTo6ZW5kT2Zmc2V0
KCk7IH0KICAgICBib29sIGNvbGxhcHNlZCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIFNpbXBsZVJh
bmdlOjpjb2xsYXBzZWQoKTsgfQogCi0gICAgdm9pZCB2aXNpdE5vZGVzQ29uY3VycmVudGx5KEpT
Qzo6U2xvdFZpc2l0b3ImKSBjb25zdDsKKyAgICB2b2lkIHZpc2l0Tm9kZXNDb25jdXJyZW50bHko
SlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJikgY29uc3Q7CiAKIHByaXZhdGU6CiAgICAgU3RhdGlj
UmFuZ2UoU2ltcGxlUmFuZ2UmJik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9X
ZWJHTDJSZW5kZXJpbmdDb250ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9XZWJHTDJSZW5kZXJpbmdDb250ZXh0LmNwcAkocmV2aXNpb24gMjcyODMwKQor
KysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1
LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE1LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC0zMDc4LDcgKzMwNzgsNyBAQCBib29sIFdlYkdMMlJlbmRlcmlu
Z0NvbnRleHQ6OmNoZWNrQW5kVHJhCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgV2ViR0wy
UmVuZGVyaW5nQ29udGV4dDo6YWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMoSlNDOjpTbG90VmlzaXRv
ciYgdmlzaXRvcikKK3ZvaWQgV2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6YWRkTWVtYmVyc1RvT3Bh
cXVlUm9vdHMoSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFdlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2U6OmFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKHZpc2l0b3IpOwog
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTDJSZW5kZXJpbmdDb250ZXh0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0wyUmVuZGVy
aW5nQ29udGV4dC5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2Nh
bnZhcy9XZWJHTDJSZW5kZXJpbmdDb250ZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNjEsNyAr
MjYxLDcgQEAgcHVibGljOgogCiAgICAgYm9vbCBjaGVja0FuZFRyYW5zbGF0ZUF0dGFjaG1lbnRz
KGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0NHTGVudW0sIFZlY3RvcjxHQ0dMZW51bT4mKTsK
IAotICAgIHZvaWQgYWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMoSlNDOjpTbG90VmlzaXRvciYpIG92
ZXJyaWRlOworICAgIHZvaWQgYWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMoSlNDOjpBYnN0cmFjdFNs
b3RWaXNpdG9yJikgb3ZlcnJpZGU7CiAKIHByaXZhdGU6CiAgICAgV2ViR0wyUmVuZGVyaW5nQ29u
dGV4dChDYW52YXNCYXNlJiwgR3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzKTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRnJhbWVidWZmZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRnJhbWVidWZmZXIuY3BwCShyZXZp
c2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEZyYW1lYnVm
ZmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDktMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMDktMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTYzLDcgKzYzLDcgQEAgbmFtZXNwYWNlIHsKICAg
ICAgICAgdm9pZCBvbkRldGFjaGVkKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgR3JhcGhpY3NDb250
ZXh0R0wqKSBvdmVycmlkZTsKICAgICAgICAgdm9pZCBhdHRhY2goR3JhcGhpY3NDb250ZXh0R0wq
LCBHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIGF0dGFjaG1lbnQpIG92ZXJyaWRlOwogICAgICAg
ICB2b2lkIHVuYXR0YWNoKEdyYXBoaWNzQ29udGV4dEdMKiwgR0NHTGVudW0gdGFyZ2V0LCBHQ0dM
ZW51bSBhdHRhY2htZW50KSBvdmVycmlkZTsKLSAgICAgICAgdm9pZCBhZGRNZW1iZXJzVG9PcGFx
dWVSb290cyhjb25zdCBBYnN0cmFjdExvY2tlciYsIEpTQzo6U2xvdFZpc2l0b3ImKSBvdmVycmlk
ZTsKKyAgICAgICAgdm9pZCBhZGRNZW1iZXJzVG9PcGFxdWVSb290cyhjb25zdCBBYnN0cmFjdExv
Y2tlciYsIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpIG92ZXJyaWRlOwogCiAgICAgICAgIFdl
YkdMUmVuZGVyYnVmZmVyQXR0YWNobWVudCgpIHsgfTsKIApAQCAtMTQ1LDcgKzE0NSw3IEBAIG5h
bWVzcGFjZSB7CiAgICAgICAgICAgICBjb250ZXh0LT5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcih0
YXJnZXQsIGF0dGFjaG1lbnQsIEdyYXBoaWNzQ29udGV4dEdMOjpSRU5ERVJCVUZGRVIsIDApOwog
ICAgIH0KIAotICAgIHZvaWQgV2ViR0xSZW5kZXJidWZmZXJBdHRhY2htZW50OjphZGRNZW1iZXJz
VG9PcGFxdWVSb290cyhjb25zdCBBYnN0cmFjdExvY2tlciYsIEpTQzo6U2xvdFZpc2l0b3ImIHZp
c2l0b3IpCisgICAgdm9pZCBXZWJHTFJlbmRlcmJ1ZmZlckF0dGFjaG1lbnQ6OmFkZE1lbWJlcnNU
b09wYXF1ZVJvb3RzKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgSlNDOjpBYnN0cmFjdFNsb3RWaXNp
dG9yJiB2aXNpdG9yKQogICAgIHsKICAgICAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KG1fcmVu
ZGVyYnVmZmVyLmdldCgpKTsKICAgICB9CkBAIC0xNjksNyArMTY5LDcgQEAgbmFtZXNwYWNlIHsK
ICAgICAgICAgdm9pZCBvbkRldGFjaGVkKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgR3JhcGhpY3ND
b250ZXh0R0wqKSBvdmVycmlkZTsKICAgICAgICAgdm9pZCBhdHRhY2goR3JhcGhpY3NDb250ZXh0
R0wqLCBHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIGF0dGFjaG1lbnQpIG92ZXJyaWRlOwogICAg
ICAgICB2b2lkIHVuYXR0YWNoKEdyYXBoaWNzQ29udGV4dEdMKiwgR0NHTGVudW0gdGFyZ2V0LCBH
Q0dMZW51bSBhdHRhY2htZW50KSBvdmVycmlkZTsKLSAgICAgICAgdm9pZCBhZGRNZW1iZXJzVG9P
cGFxdWVSb290cyhjb25zdCBBYnN0cmFjdExvY2tlciYsIEpTQzo6U2xvdFZpc2l0b3ImKSBvdmVy
cmlkZTsKKyAgICAgICAgdm9pZCBhZGRNZW1iZXJzVG9PcGFxdWVSb290cyhjb25zdCBBYnN0cmFj
dExvY2tlciYsIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpIG92ZXJyaWRlOwogCiAgICAgICAg
IFdlYkdMVGV4dHVyZUF0dGFjaG1lbnQoKSB7IH07CiAKQEAgLTI2Nyw3ICsyNjcsNyBAQCBuYW1l
c3BhY2UgewogI2VuZGlmCiAgICAgfQogCi0gICAgdm9pZCBXZWJHTFRleHR1cmVBdHRhY2htZW50
OjphZGRNZW1iZXJzVG9PcGFxdWVSb290cyhjb25zdCBBYnN0cmFjdExvY2tlciYsIEpTQzo6U2xv
dFZpc2l0b3ImIHZpc2l0b3IpCisgICAgdm9pZCBXZWJHTFRleHR1cmVBdHRhY2htZW50OjphZGRN
ZW1iZXJzVG9PcGFxdWVSb290cyhjb25zdCBBYnN0cmFjdExvY2tlciYsIEpTQzo6QWJzdHJhY3RT
bG90VmlzaXRvciYgdmlzaXRvcikKICAgICB7CiAgICAgICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9v
dChtX3RleHR1cmUuZ2V0KCkpOwogICAgIH0KQEAgLTcyMSw3ICs3MjEsNyBAQCBHQ0dMZW51bSBX
ZWJHTEZyYW1lYnVmZmVyOjpnZXREcmF3QnVmZmVyCiAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4
dEdMOjpOT05FOwogfQogCi12b2lkIFdlYkdMRnJhbWVidWZmZXI6OmFkZE1lbWJlcnNUb09wYXF1
ZVJvb3RzKGNvbnN0IEFic3RyYWN0TG9ja2VyJiBsb2NrZXIsIEpTQzo6U2xvdFZpc2l0b3ImIHZp
c2l0b3IpCit2b2lkIFdlYkdMRnJhbWVidWZmZXI6OmFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKGNv
bnN0IEFic3RyYWN0TG9ja2VyJiBsb2NrZXIsIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYgdmlz
aXRvcikKIHsKICAgICBmb3IgKGF1dG8mIGVudHJ5IDogbV9hdHRhY2htZW50cykKICAgICAgICAg
ZW50cnkudmFsdWUtPmFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKGxvY2tlciwgdmlzaXRvcik7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEZyYW1lYnVmZmVyLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xGcmFtZWJ1ZmZlci5oCShy
ZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEZyYW1l
YnVmZmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAwOS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzQsNyArMzQsNyBAQAogI2luY2x1ZGUgPHd0Zi9WZWN0
b3IuaD4KIAogbmFtZXNwYWNlIEpTQyB7Ci1jbGFzcyBTbG90VmlzaXRvcjsKK2NsYXNzIEFic3Ry
YWN0U2xvdFZpc2l0b3I7CiB9CiAKIG5hbWVzcGFjZSBXVEYgewpAQCAtNjUsNyArNjUsNyBAQCBw
dWJsaWM6CiAgICAgICAgIHZpcnR1YWwgdm9pZCBvbkRldGFjaGVkKGNvbnN0IFdURjo6QWJzdHJh
Y3RMb2NrZXImLCBHcmFwaGljc0NvbnRleHRHTCopID0gMDsKICAgICAgICAgdmlydHVhbCB2b2lk
IGF0dGFjaChHcmFwaGljc0NvbnRleHRHTCosIEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gYXR0
YWNobWVudCkgPSAwOwogICAgICAgICB2aXJ0dWFsIHZvaWQgdW5hdHRhY2goR3JhcGhpY3NDb250
ZXh0R0wqLCBHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIGF0dGFjaG1lbnQpID0gMDsKLSAgICAg
ICAgdmlydHVhbCB2b2lkIGFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKGNvbnN0IFdURjo6QWJzdHJh
Y3RMb2NrZXImLCBKU0M6OlNsb3RWaXNpdG9yJikgPSAwOworICAgICAgICB2aXJ0dWFsIHZvaWQg
YWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMoY29uc3QgV1RGOjpBYnN0cmFjdExvY2tlciYsIEpTQzo6
QWJzdHJhY3RTbG90VmlzaXRvciYpID0gMDsKIAogICAgIHByb3RlY3RlZDoKICAgICAgICAgV2Vi
R0xBdHRhY2htZW50KCk7CkBAIC0xMTQsNyArMTE0LDcgQEAgcHVibGljOgogCiAgICAgR0NHTGVu
dW0gZ2V0RHJhd0J1ZmZlcihHQ0dMZW51bSk7CiAKLSAgICB2b2lkIGFkZE1lbWJlcnNUb09wYXF1
ZVJvb3RzKGNvbnN0IFdURjo6QWJzdHJhY3RMb2NrZXImLCBKU0M6OlNsb3RWaXNpdG9yJik7Cisg
ICAgdm9pZCBhZGRNZW1iZXJzVG9PcGFxdWVSb290cyhjb25zdCBXVEY6OkFic3RyYWN0TG9ja2Vy
JiwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAKIHByaXZhdGU6CiAgICAgV2ViR0xGcmFt
ZWJ1ZmZlcihXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlJik7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9XZWJHTFByb2dyYW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2h0bWwvY2FudmFzL1dlYkdMUHJvZ3JhbS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUHJvZ3JhbS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MjA2LDcgKzIwNiw3IEBAIGJvb2wgV2ViR0xQcm9ncmFtOjpkZXRhY2hTaGFkZXIoY29uc3QgQWIK
ICAgICB9CiB9CiAKLXZvaWQgV2ViR0xQcm9ncmFtOjphZGRNZW1iZXJzVG9PcGFxdWVSb290cyhj
b25zdCBBYnN0cmFjdExvY2tlciYsIEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIFdl
YkdMUHJvZ3JhbTo6YWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMoY29uc3QgQWJzdHJhY3RMb2NrZXIm
LCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgdmlzaXRvci5hZGRP
cGFxdWVSb290KG1fdmVydGV4U2hhZGVyLmdldCgpKTsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJv
b3QobV9mcmFnbWVudFNoYWRlci5nZXQoKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2Nh
bnZhcy9XZWJHTFByb2dyYW0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2Nh
bnZhcy9XZWJHTFByb2dyYW0uaAkocmV2aXNpb24gMjcyODMwKQorKysgU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvV2ViR0xQcm9ncmFtLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNSw3ICszNSw3
IEBACiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgSlNDIHsKLWNsYXNzIFNs
b3RWaXNpdG9yOworY2xhc3MgQWJzdHJhY3RTbG90VmlzaXRvcjsKIH0KIAogbmFtZXNwYWNlIFdU
RiB7CkBAIC04OCw3ICs4OCw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fcmVxdWlyZWRU
cmFuc2Zvcm1GZWVkYmFja0J1ZmZlckNvdW50OwogICAgIH0KIAotICAgIHZvaWQgYWRkTWVtYmVy
c1RvT3BhcXVlUm9vdHMoY29uc3QgV1RGOjpBYnN0cmFjdExvY2tlciYsIEpTQzo6U2xvdFZpc2l0
b3ImKTsKKyAgICB2b2lkIGFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKGNvbnN0IFdURjo6QWJzdHJh
Y3RMb2NrZXImLCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKTsKIAogcHJpdmF0ZToKICAgICBX
ZWJHTFByb2dyYW0oV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSYpOwpJbmRleDogU291cmNlL1dl
YkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZS5jcHAJKHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dl
YkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNzkzMSw3ICs3
OTMxLDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpkaXNwYXRjaAogICAgIHF1
ZXVlVGFza1RvRGlzcGF0Y2hFdmVudCgqY2FudmFzLCBUYXNrU291cmNlOjpXZWJHTCwgV2ViR0xD
b250ZXh0RXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkud2ViZ2xjb250ZXh0Y2hhbmdlZEV2ZW50
LCBFdmVudDo6Q2FuQnViYmxlOjpObywgRXZlbnQ6OklzQ2FuY2VsYWJsZTo6WWVzLCBlbXB0eVN0
cmluZygpKSk7CiB9CiAKLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6YWRkTWVtYmVy
c1RvT3BhcXVlUm9vdHMoSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZTo6YWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMoSlNDOjpBYnN0cmFjdFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sob2JqZWN0
R3JhcGhMb2NrKCkpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9j
YW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5oCShyZXZpc2lvbiAyNzI4MzApCisrKyBT
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIw
MTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1
LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC01OCw3ICs1OCw3IEBACiAjZW5kaWYKIAogbmFtZXNwYWNlIEpTQyB7
Ci1jbGFzcyBTbG90VmlzaXRvcjsKK2NsYXNzIEFic3RyYWN0U2xvdFZpc2l0b3I7CiB9CiAKIG5h
bWVzcGFjZSBXVEYgewpAQCAtNDExLDcgKzQxMSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHJlY3lj
bGVDb250ZXh0KCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBkaXNwYXRjaENvbnRleHRDaGFuZ2VkTm90
aWZpY2F0aW9uKCkgb3ZlcnJpZGU7CiAKLSAgICB2aXJ0dWFsIHZvaWQgYWRkTWVtYmVyc1RvT3Bh
cXVlUm9vdHMoSlNDOjpTbG90VmlzaXRvciYpOworICAgIHZpcnR1YWwgdm9pZCBhZGRNZW1iZXJz
VG9PcGFxdWVSb290cyhKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKTsKICAgICAvLyBUaGlzIGxv
Y2sgbXVzdCBiZSBoZWxkIGFjcm9zcyBhbGwgbXV0YXRpb25zIG9mIGNvbnRhaW5lcnMgbGlrZQog
ICAgIC8vIFZlY3RvcnMsIEhhc2hTZXRzLCBldGMuIHdoaWNoIGNvbnRhaW4gUmVmUHRyPFdlYkdM
T2JqZWN0PiwgYW5kCiAgICAgLy8gd2hpY2ggYXJlIHRyYXZlcnNlZCBieSBhZGRNZW1iZXJzVG9P
cGFxdWVSb290cygpIG9yIGFueSBvZiB0aGUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2Fu
dmFzL1dlYkdMVHJhbnNmb3JtRmVlZGJhY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2h0bWwvY2FudmFzL1dlYkdMVHJhbnNmb3JtRmVlZGJhY2suY3BwCShyZXZpc2lvbiAyNzI4
MzApCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFRyYW5zZm9ybUZlZWRiYWNr
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE1LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC0zMCw4ICszMCw3IEBACiAKICNpbmNsdWRlICJXZWJHTENvbnRl
eHRHcm91cC5oIgogI2luY2x1ZGUgIldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuaCIKLSNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9TbG90VmlzaXRvci5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL1Nsb3RWaXNpdG9ySW5saW5lcy5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0Fic3Ry
YWN0U2xvdFZpc2l0b3JJbmxpbmVzLmg+CiAjaW5jbHVkZSA8d3RmL0xvY2suaD4KICNpbmNsdWRl
IDx3dGYvTG9ja2VyLmg+CiAKQEAgLTkzLDcgKzkyLDcgQEAgYm9vbCBXZWJHTFRyYW5zZm9ybUZl
ZWRiYWNrOjpoYXNFbm91Z2hCdQogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIFdlYkdMVHJh
bnNmb3JtRmVlZGJhY2s6OmFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKGNvbnN0IEFic3RyYWN0TG9j
a2VyJiBsb2NrZXIsIEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIFdlYkdMVHJhbnNm
b3JtRmVlZGJhY2s6OmFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKGNvbnN0IEFic3RyYWN0TG9ja2Vy
JiBsb2NrZXIsIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBmb3Ig
KGF1dG8mIGJ1ZmZlciA6IG1fYm91bmRJbmRleGVkVHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJzKQog
ICAgICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QoYnVmZmVyLmdldCgpKTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVHJhbnNmb3JtRmVlZGJhY2suaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFRyYW5zZm9ybUZlZWRiYWNrLmgJ
KHJldmlzaW9uIDI3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVHJh
bnNmb3JtRmVlZGJhY2suaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMxLDcgKzMxLDcgQEAKICNpbmNs
dWRlICJXZWJHTFNoYXJlZE9iamVjdC5oIgogCiBuYW1lc3BhY2UgSlNDIHsKLWNsYXNzIFNsb3RW
aXNpdG9yOworY2xhc3MgQWJzdHJhY3RTbG90VmlzaXRvcjsKIH0KIAogbmFtZXNwYWNlIFdURiB7
CkBAIC03MCw3ICs3MCw3IEBAIHB1YmxpYzoKICAgICAKICAgICBib29sIGhhc0Vub3VnaEJ1ZmZl
cnMoR0NHTHVpbnQgbnVtUmVxdWlyZWQpIGNvbnN0OwogCi0gICAgdm9pZCBhZGRNZW1iZXJzVG9P
cGFxdWVSb290cyhjb25zdCBBYnN0cmFjdExvY2tlciYsIEpTQzo6U2xvdFZpc2l0b3ImKTsKKyAg
ICB2b2lkIGFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgSlND
OjpBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAKIHByaXZhdGU6CiAgICAgV2ViR0xUcmFuc2Zvcm1G
ZWVkYmFjayhXZWJHTDJSZW5kZXJpbmdDb250ZXh0Jik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9XZWJHTFZlcnRleEFycmF5T2JqZWN0QmFzZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xWZXJ0ZXhBcnJheU9iamVjdEJhc2UuY3Bw
CShyZXZpc2lvbiAyNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFZl
cnRleEFycmF5T2JqZWN0QmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOSw4ICsyOSw3IEBA
CiAjaWYgRU5BQkxFKFdFQkdMKQogCiAjaW5jbHVkZSAiV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZS5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1Nsb3RWaXNpdG9yLmg+Ci0jaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvU2xvdFZpc2l0b3JJbmxpbmVzLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvQWJzdHJhY3RTbG90VmlzaXRvcklubGluZXMuaD4KICNpbmNsdWRlIDx3dGYvTG9ja2Vy
Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTEwOSw3ICsxMDgsNyBAQCB2b2lkIFdlYkdM
VmVydGV4QXJyYXlPYmplY3RCYXNlOjpzZXRWZXJ0CiAgICAgbV92ZXJ0ZXhBdHRyaWJTdGF0ZVtp
bmRleF0uZGl2aXNvciA9IGRpdmlzb3I7CiB9CiAKLXZvaWQgV2ViR0xWZXJ0ZXhBcnJheU9iamVj
dEJhc2U6OmFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgSlND
OjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgV2ViR0xWZXJ0ZXhBcnJheU9iamVjdEJhc2U6
OmFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgSlNDOjpBYnN0
cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdCht
X2JvdW5kRWxlbWVudEFycmF5QnVmZmVyLmdldCgpKTsKICAgICBmb3IgKGF1dG8mIHN0YXRlIDog
bV92ZXJ0ZXhBdHRyaWJTdGF0ZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dl
YkdMVmVydGV4QXJyYXlPYmplY3RCYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvV2ViR0xWZXJ0ZXhBcnJheU9iamVjdEJhc2UuaAkocmV2aXNpb24gMjcyODMw
KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xWZXJ0ZXhBcnJheU9iamVjdEJh
c2UuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTUtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMyLDcgKzMyLDcgQEAKICNpbmNsdWRlICJXZWJHTENv
bnRleHRPYmplY3QuaCIKIAogbmFtZXNwYWNlIEpTQyB7Ci1jbGFzcyBTbG90VmlzaXRvcjsKK2Ns
YXNzIEFic3RyYWN0U2xvdFZpc2l0b3I7CiB9CiAKIG5hbWVzcGFjZSBXVEYgewpAQCAtNzcsNyAr
NzcsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHNldFZlcnRleEF0dHJpYkRpdmlzb3IoR0NHTHVp
bnQgaW5kZXgsIEdDR0x1aW50IGRpdmlzb3IpOwogCi0gICAgdm9pZCBhZGRNZW1iZXJzVG9PcGFx
dWVSb290cyhjb25zdCBXVEY6OkFic3RyYWN0TG9ja2VyJiwgSlNDOjpTbG90VmlzaXRvciYpOwor
ICAgIHZvaWQgYWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMoY29uc3QgV1RGOjpBYnN0cmFjdExvY2tl
ciYsIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpOwogCiBwcm90ZWN0ZWQ6CiAgICAgV2ViR0xW
ZXJ0ZXhBcnJheU9iamVjdEJhc2UoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSYsIFR5cGUpOwo=
</data>
<flag name="commit-queue"
          id="439408"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>420899</attachid>
            <date>2021-02-18 18:44:44 -0800</date>
            <delta_ts>2021-02-18 18:52:24 -0800</delta_ts>
            <desc>proposed patch.</desc>
            <filename>bug-217274.patch</filename>
            <type>text/plain</type>
            <size>879340</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwMDQg
QEAKKzIwMjEtMDItMTggIE1hcmsgTGFtICA8bWFyay5sYW1AYXBwbGUuY29tPgorCisgICAgICAg
IEltcGxlbWVudCBhIEdDIHZlcmlmaWVyLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjE3Mjc0CisgICAgICAgIHJkYXI6Ly81NjI1NTY4MworCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoZSBpZGVhIGJlaGlu
ZCB0aGUgR0MgdmVyaWZpZXIgaXMgdGhhdCBpbiB0aGUgR0MgRW5kIHBoYXNlIGJlZm9yZSB3ZSBm
aW5hbGl6ZQorICAgICAgICBhbmQgc3dlZXAsIHdlJ2xsIGRvIGEgc2ltcGxlIHN0b3AgdGhlIHdv
cmxkIHN5bmNocm9ub3VzIGZ1bGwgR0Mgd2l0aCB0aGUKKyAgICAgICAgVmVyaWZpZXJTbG90Vmlz
aXRvci4gIFRoZSBWZXJpZmllclNsb3RWaXNpdG9yIHdpbGwgY29sbGVjdCBpdCdzIG93biBpbmZv
cm1hdGlvbgorICAgICAgICBvbiB3aGV0aGVyIGEgSlMgY2VsbCBzaG91bGQgYmUgbWFya2VkIG9y
IG5vdC4gIEFmdGVyIHRoaXMgdmVyaWZpZXIgR0MgcGFzcywgd2UnbGwKKyAgICAgICAgY29tcGFy
ZSB0aGUgbWFyayByZXN1bHRzLgorCisgICAgICAgIElmIHRoZSB2ZXJpZmllciBHQyBzYXlzIGEg
Y2VsbCBzaG91bGQgYmUgbWFya2VkLCB0aGVuIHRoZSByZWFsIEdDIHNob3VsZCBoYXZlCisgICAg
ICAgIG1hcmtlZCB0aGUgY2VsbC4gIFRoZSByZXZlcnNlIGlzIG5vdCB0cnVlOiBpZiB0aGUgdmVy
aWZpZXIgZG9lcyBub3QgbWFyayBhIGNlbGwsCisgICAgICAgIGl0IGlzIHN0aWxsIE9LIGZvciB0
aGUgcmVhbCBHQyB0byBtYXJrIGl0LiAgRm9yIGV4YW1wbGUsIGluIGFuIGVkZW4gR0MsIGFsbCBv
bGQKKyAgICAgICAgZ2VuZXJhdGlvbiBjZWxscyB3b3VsZCBiZSBjb25zaWRlcmVkIG1hcmsgYnkg
dGhlIHJlYWwgR0MgdGhvdWdoIHRoZSB2ZXJpZmllciB3b3VsZAorICAgICAgICBrbm93IGJldHRl
ciBpZiB0aGV5IGFyZSBhbHJlYWR5IGRlYWQuCisKKyAgICAgICAgSW1wbGVtZW50YXRpb24gZGV0
YWlsczoKKworICAgICAgICAxLiBTbG90VmlzaXRvciAob25seSB1c2VkIGJ5IHRoZSByZWFsIEdD
KSBub3cgaW5oZXJpdHMgZnJvbSBhIG5ldyBhYnN0cmFjdCBjbGFzcywKKyAgICAgICAgICAgQWJz
dHJhY3RTbG90VmlzaXRvci4KKworICAgICAgICAgICBWZXJpZmllclNsb3RWaXNpdG9yIChvbmx5
IHVzZWQgYnkgdGhlIHZlcmlmaWVyIEdDKSBhbHNvIGluaGVyaXRzIGZyb20KKyAgICAgICAgICAg
QWJzdHJhY3RTbG90VmlzaXRvci4KKworICAgICAgICAyLiBBYnN0cmFjdFNsb3RWaXNpdG9yIGRl
Y2xhcmVzIG1hbnkgdmlydHVhbCBtZXRob2RzLgorCisgICAgICAgICAgIFNsb3RWaXNpdG9yIGlt
cGxlbWVudHMgc29tZSBvZiB0aGVzZSB2aXJ0dWFsIG1ldGhvZHMgYXMgaW5saW5lIGFuZCBmaW5h
bC4KKyAgICAgICAgICAgSWYgdGhlIGNsaWVudCBpcyBpbnZva2luZyBvbmUgdGhlc2UgbWV0aG9k
cyBhbmQga25vd3MgdGhhdCBpdCB3aWxsIGJlIG9wZXJhdGluZworICAgICAgICAgICBvbiBhIFNs
b3RWaXNpdG9yLCB0aGUgbWV0aG9kIGJlaW5nIGZpbmFsIGFsbG93cyBpdCB0byBiZSBpbmxpbmVk
IGludG8gdGhlIGNsaWVudAorICAgICAgICAgICBpbnN0ZWFkIG9mIGdvaW5nIHRocm91Z2ggdGhl
IHZpcnR1YWwgZGlzcGF0Y2guCisKKyAgICAgICAgICAgRm9yIHRoZSBWZXJpZmllclNsb3RWaXNp
dG9yLCB0aGVzZSBtZXRob2RzIHdpbGwgYWx3YXlzIGJlIGludm9rZWQgYnkgIHZpcnR1YWwKKyAg
ICAgICAgICAgZGlzcGF0Y2ggdmlhIHRoZSBBYnN0cmFjdFNsb3RWaXNpdG9yIGFic3RyYWN0aW9u
LgorCisgICAgICAgIDMuIEFsbW9zdCBhbGwgbWV0aG9kcyB0aGF0IHRha2VzIGEgU2xvdFZpc2l0
b3IgcHJldmlvdXNseSAod2l0aCBhIGZldyBleGNlcHRpb25zKQorICAgICAgICAgICB3aWxsIG5v
dyBiZSB0ZW1wbGF0aXplZCwgYW5kIHNwZWNpYWxpemVkIHRvIGVpdGhlciB0YWtlIGEgU2xvdFZp
c2l0b3Igb3IgYW4KKyAgICAgICAgICAgQWJzdHJhY3RTbG90VmlzaXRvci4KKworICAgICAgICAg
ICBUaGUgY2VsbCBNZXRob2RUYWJsZSB3aWxsIG5vdyBoYXZlIDIgdmVyc2lvbnMgb2YgdmlzaXRD
aGlsZHJlbiBhbmQgdmlzaXRPdXRwdXRDb25zdHJhaW50czoKKyAgICAgICAgICAgb25lIGZvciBT
bG90VmlzaXRvciwgYW5kIG9uZSBmb3IgQWJzdHJhY3RTbG90VmlzaXRvci4KKworICAgICAgICAg
ICBUaGUgcmVhc29uIHdlIGRvbid0IHdpcmUgdGhlIDJuZCB2ZXJzaW9uIHRvIFZlcmlmaWVyU2xv
dFZpc2l0b3IgKGluc3RlYWQgb2YKKyAgICAgICAgICAgQWJzdHJhY3RTbG90VmlzaXRvcikgaXMg
YmVjYXVzZSB3ZSBkb24ndCBuZWVkIHRoZSBHQyB2ZXJpZmllciB0byBydW4gYXQgdG9wCisgICAg
ICAgICAgIHNwZWVkICh0aG91Z2ggd2UgZG9uJ3Qgd2FudCBpdCB0byBiZSB0b28gc2xvdykuICBB
bHNvLCBoYXZpbmcgaG9va3MgZm9yIHVzaW5nCisgICAgICAgICAgIGFuIEFic3RyYWN0U2xvdFZp
c2l0b3IgZ2l2ZXMgdXMgbW9yZSB1dGlsaXR5IGZvciBpbXBsZW1lbnRpbmcgb3RoZXIgdHlwZXMg
b2YKKyAgICAgICAgICAgR0MgY2hlY2tlcnMgLyBhbmFseXplcnMgaW4gdGhlIGZ1dHVyZSBhcyBz
dWJjbGFzc2VzIG9mIEFic3RyYWN0U2xvdFZpc2l0b3IuCisKKyAgICAgICAgNC4gU29tZSBtaW5v
cml0eSBvZiBtZXRob2RzIHRoYXQgdXNlZCB0byB0YWtlIGEgU2xvdFZpc2l0b3IgYnV0IGFyZSBu
b3QgY3JpdGljYWwKKyAgICAgICAgICAgdG8gcGVyZm9ybWFuY2UsIHdpbGwgbm93IGp1c3QgdGFr
ZSBhbiBBYnN0cmFjdFNsb3RWaXNpdG9yIGluc3RlYWQuICBGb3IgZXhhbXBsZSwKKyAgICAgICAg
ICAgc2VlIFR5cGVQcm9maWxlckxvZzo6dmlzaXQoKS4KKworICAgICAgICA1LiBpc1JlYWNoYWJs
ZUZyb21PcGFxdWVSb290cygpIG1ldGhvZHMgd2lsbCBhbHNvIG9ubHkgdGFrZSBhbiBBYnN0cmFj
dFNsb3RWaXNpdG9yLgorCisgICAgICAgICAgIFRoZSByZWFzb24gdGhpcyBpcyBPSyBpcyBiZWNh
dXNlIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKCkgb25seSB1c2VzIHRoZQorICAgICAgICAg
ICB2aXNpdG9yJ3MgYWRkT3BhcXVlUm9vdCgpIGFuZCBjb250YWluc09wYXF1ZVJvb3QoKSBtZXRo
b2RzLCB3aGljaCBhcmUgaW1wbGVtZW50ZWQKKyAgICAgICAgICAgaW4gdGhlIEFic3RyYWN0U2xv
dFZpc2l0b3IgaXRzZWxmLgorCisgICAgICAgICAgIEZvciBTbG90VmlzaXRvciwgdGhlIG1fb3Bh
cXVlUm9vdCBmaWVsZCB3aWxsIGJlIHJlZmVyZW5jZSBIZWFwOjptX29wYXF1ZVJvb3RzLgorICAg
ICAgICAgICBGb3IgVmVyaWZpZXJTbG90VmlzaXRvciwgdGhlIG1fb3BhcXVlUm9vdCBmaWVsZCB3
aWxsIGJlIHJlZmVyZW5jZSBpdHMgb3duCisgICAgICAgICAgIG9wYXF1ZSByb290cyBzdG9yYWdl
LgorCisgICAgICAgICAgIFRoaXMgaW1wbGVtZW50YXRpb24gb2YgYWRkT3BhcXVlUm9vdCgpIGlz
IHBlcmYgbmV1dHJhbCBmb3IgU2xvdFZpc2l0b3IgYmVjYXVzZQorICAgICAgICAgICB3aGVyZSBp
dCB3b3VsZCBwcmV2aW91c2x5IGludm9rZSBtX2hlYXAubV9vcGFxdWVSb290cy5hZGQoKSwgaXQg
d2lsbCBub3cKKyAgICAgICAgICAgaW52b2tlIG1fb3BhcXVlUm9vdC5hZGQoKSBpbnN0ZWFkIHdo
ZXJlIG1fb3BhcXVlUm9vdCBwb2ludHMgdG8gbV9oZWFwLm1fb3BhcXVlUm9vdHMuCisKKyAgICAg
ICAgICAgRGl0dG8gZm9yIEFic3RyYWN0U2xvdFZpc2l0b3I6OmNvbnRhaW5zT3BhcXVlUm9vdCgp
LgorCisgICAgICAgIDYuIFdoZW4gcmVpZnlpbmcgYSB0ZW1wbGF0aXplZCB2aXNpdCBtZXRob2Qs
IHdlIGRvIGl0IGluIDIgd2F5czoKKworICAgICAgICAgICBhLiBJbXBsZW1lbnQgdGhlIHRlbXBs
YXRlIG1ldGhvZCBhcyBhbiBBTFdBWVNfSU5MSU5FIEltcGwgbWV0aG9kLCBhbmQgaGF2ZQorICAg
ICAgICAgICAgICAyIHZpc2l0IG1ldGhvZHMgKHRha2luZyBhIFNsb3RWaXNpdG9yIGFuZCBhbiBB
YnN0cmFjdFNsb3RWaXNpdG9yIHJlc3BlY3RpdmVseSkKKyAgICAgICAgICAgICAgaW5saW5lIHRo
ZSBJbXBsIG1ldGhvZC4gIEZvciBleGFtcGxlLCBzZWUgSlNPYmplY3Q6OnZpc2l0Q2hpbGRyZW5J
bXBsKCkuCisKKyAgICAgICAgICAgYi4gSnVzdCB0ZW1wbGF0aXplIHRoZSB2aXNpdCBtZXRob2Qs
IGFuZCBleHBsaWNpdGx5IGluc3RhbnRpYXRlIGl0IHdpdGggYSBTbG90VmlzaXRvcgorICAgICAg
ICAgICAgICBhbmQgYW4gQWJzdHJhY3RTbG90VmlzaXRvci4gIEZvciBleGFtcGxlLCBzZWUgRGVz
aXJlZFRyYW5zaXRpb246OnZpc2l0Q2hpbGRyZW4oKS4KKworICAgICAgICAgICBUaGUgcmVhc29u
IHdlIG5lZWQgZm9ybSAoYSkgaXMgaWY6CisKKyAgICAgICAgICAgIGkuIHdlIG5lZWQgdG8gZXhw
b3J0IHRoZSB2aXNpdCBtZXRob2RzLgorICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHNlZSBK
U09iamVjdDp2aXNpdENoaWxkcmVuKCkuCisKKyAgICAgICAgICAgICAgIE5vdGU6IEEgQ2xhbmcg
ZW5naW5lZXIgdG9sZCBtZSB0aGF0ICJ0aGVyZeKAmXMgbm8gd2F5IHRvIGV4cG9ydCBhbiBleHBs
aWNpdAorICAgICAgICAgICAgICAgaW5zdGFudGlhdGlvbiB0aGF0IHdpbGwgbWFrZSBpdCBhIHN0
cm9uZyBzeW1ib2wuIiAgVGhpcyBpcyBiZWNhdXNlICJDKysgZG9lcyBub3QKKyAgICAgICAgICAg
ICAgIHByb3ZpZGUgYW55IHN0YW5kYXJkIHdheSB0byBndWFyYW50ZWUgdGhhdCBhbiBleHBsaWNp
dCBpbnN0YW50aWF0aW9uIGlzIHVuaXF1ZSwKKyAgICAgICAgICAgICAgIGFuZCBDbGFuZyBoYXNu
4oCZdCBhZGRlZCBhbnkgZXh0ZW5zaW9uIHRvIGRvIHNvLiIKKworICAgICAgICAgICBpaS4gdGhl
IHZpc2l0IG1ldGhvZCBpcyBhbiBvdmVycmlkZSBvZiBhIHZpcnR1YWwgbWV0aG9kLgorICAgICAg
ICAgICAgICAgRm9yIGV4YW1wbGUsIHNlZSBERkc6OlNjYW5uYWJsZTo6dmlzaXRDaGlsZHJlbigp
IGFuZCBERkc6OkdyYXBoOjp2aXNpdENoaWxkcmVuKCkuCisKKyAgICAgICAgICAgT3RoZXJ3aXNl
LCB3ZSdsbCBwcmVmZXIgZm9ybSAoYikgYXMgaXQgaXMgbmF0dXJhbCBDKysuCisKKyAgICAgICAg
Ny4gQmVjYXVzZSB0ZW1wbGF0aXppbmcgYWxsIHRoZSB2aXNpdCBtZXRob2RzIHJlcXVpcmVzIGEg
bG90IG9mIGJvaWxlciBwbGF0ZSBjb2RlLAorICAgICAgICAgICB3ZSBpbnRyb2R1Y2Ugc29tZSBt
YWNyb3MgaW4gU2xvdFZpc2l0b3JNYWNyb3MuaCB0byBtYWtlIHJlZHVjZSBzb21lIG9mIHRoZQor
ICAgICAgICAgICBib2lsZXIgcGxhdGUgYnVyZGVuLgorCisgICAgICAgICAgIFdlIGVzcGVjaWFs
bHkgdHJ5IHRvIGRvIHRoaXMgZm9yIG1ldGhvZHMgb2YgZm9ybSAoYSkgKHNlZSAoNikgYWJvdmUp
IHdoaWNoCisgICAgICAgICAgIHJlcXVpcmUgbW9yZSBib2lsZXIgcGxhdGUuCisKKyAgICAgICAg
OC4gVGhlIGRyaXZlciBvZiB0aGUgcmVhbCBHQyBpcyBNYXJraW5nQ29uc3RyYWludFNldDo6ZXhl
Y3V0ZUNvbnZlcmdlbmNlKCkgd2hpY2gKKyAgICAgICAgICAgcnVucyB3aXRoIHRoZSBNYXJraW5n
Q29uc3RyYWludFNvbHZlci4KKworICAgICAgICAgICBUaGUgZHJpdmVyIG9mIHRoZSB2ZXJpZmll
ciBHQyBpcyBIZWFwOjp2ZXJpZnlHQygpLCB3aGljaCBoYXMgYSBsb29wIHRvIGRyYWluCisgICAg
ICAgICAgIG1hcmtlZCBvYmplY3RzIGFuZCBleGVjdXRlIGNvbnRyYWludHMuCisKKyAgICAgICAg
OS4gVGhlIEdDIHZlcmlmaWVyIGlzIGJ1aWx0IGluIGJ5IGRlZmF1bHQgYnV0IGRpc2FibGVkLiAg
VGhlIHJlbGV2YW50IG9wdGlvbnMgYXJlOgorICAgICAgICAgICBKU0NfdmVyaWZ5R0MgYW5kIEpT
Q192ZXJib3NlVmVyaWZ5R0MuCisKKyAgICAgICAgICAgSlNDX3ZlcmlmeUdDIHdpbGwgZW5hYmxl
IHRoZSBHQyB2ZXJpZmllci4KKworICAgICAgICAgICBJZiBKU0NfdmVyaWZ5R0MgaXMgdHJ1ZSBh
bmQgdGhlIHZlcmlmaWVyIGZpbmRzIGEgY2VsbCB0aGF0IGlzCisgICAgICAgICAgIGVycm9uZW91
c2x5IG5vdCBtYXJrZWQgYnkgdGhlIHJlYWwgR0MsIGl0IHdpbGwgZHVtcCBhbiBlcnJvciBtZXNz
YWdlIGFuZCB0aGVuCisgICAgICAgICAgIGNyYXNoIHdpdGggYSBSRUxFQVNFX0FTU0VSVC4KKwor
ICAgICAgICAgICBKU0NfdmVyYm9zZVZlcmlmeUdDIHdpbGwgZW5hYmxlIHRoZSBHQyB2ZXJpZmll
ciBhbG9uZyB3aXRoIHNvbWUgbW9yZSBoZWF2eQorICAgICAgICAgICB3ZWlnaHQgcmVjb3JkIGtl
ZXBpbmcgKGkuZS4gdHJhY2tpbmcgdGhlIHBhcmVudCAvIG93bmVyIGNlbGwgdGhhdCBtYXJrZWQg
YQorICAgICAgICAgICBjZWxsLCBhbmQgY2FwdHVyaW5nIHRoZSBjYWxsIHN0YWNrIHRoZSBtYXJr
ZWQgY2VsbCBpcyBhcHBlbmRlZCB0byB0aGUgbWFyaworICAgICAgICAgICBzdGFjaykuCisKKyAg
ICAgICAgICAgSWYgSlNDX3ZlcmJvc2VWZXJpZnlHQyBpcyB0cnVlIGFuZCB0aGUgdmVyaWZpZXIg
ZmluZHMgYSBjZWxsIHRoYXQgaXMKKyAgICAgICAgICAgZXJyb25lb3VzbHkgbm90IG1hcmtlZCBi
eSB0aGUgcmVhbCBHQywgaXQgd2lsbCBkdW1wIHRoZSBwYXJlbnQgY2VsbCBhbmQKKyAgICAgICAg
ICAgY2FwdHVyZWQgc3RhY2sgYWxvbmcgd2l0aCBhbiBlcnJvciBtZXNzYWdlIGJlZm9yZSBjcmFz
aGluZy4gIFRoaXMgZXh0cmEKKyAgICAgICAgICAgaW5mb3JtYXRpb24gcHJvdmlkZXMgdGhlIHN0
YXJ0aW5nIHBvaW50IGZvciBkZWJ1Z2dpbmcgR0MgYnVncyBmb3VuZCBieSB0aGUKKyAgICAgICAg
ICAgdmVyaWZpZXIuCisKKyAgICAgICAgICAgRW5hYmxpbmcgSlNDX3ZlcmJvc2VWZXJpZnlHQyB3
aWxsIGF1dG9tYXRpY2FsbHkgZW5hYmxlIEpTQ192ZXJpZnlHQy4KKworICAgICAgICAxMC4gTm9u
LWRldGVybWluaXNtIGluIHRoZSByZWFsIEdDLgorCisgICAgICAgICAgIFRoZSBHQyB2ZXJpZmll
cidzIGFsZ29yaXRobSByZWxpZXMgb24gdGhlIHJlYWwgR0MgYmVpbmcgZGV0ZXJtaW5pc3RpYy4g
IEhvd2V2ZXIsCisgICAgICAgICAgIHRoZXJlIGFyZSBhIGZldyBwbGFjZXMgd2hlcmUgdGhpcyBp
cyBub3QgdHJ1ZToKKworICAgICAgICAgICBhLiBNYXJraW5nIGNvbnNlcnZhdGl2ZSByb290cyBv
biB0aGUgbXV0YXRvciBzdGFja3MuCisKKyAgICAgICAgICAgICAgQnkgdGhlIHRpbWUgdGhlIHZl
cmlmaWVyIEdDIHJ1bnMgKGluIHRoZSBHQyBFbmQgcGhhc2UpLCB0aGUgbXV0YXRvciBzdGFja3MK
KyAgICAgICAgICAgICAgd2lsbCBsb29rIGNvbXBsZXRlbHkgZGlmZmVyZW50IHRoYW4gd2hhdCB0
aGUgcmVhbCBHQyBzYXcuICBUbyB3b3JrIGFyb3VuZAorICAgICAgICAgICAgICB0aGlzLCBpZiB0
aGUgdmVyaWZpZXIgaXMgZW5hYmxlZCwgdGhlbiBldmVyeSBjb25zZXJ2YXRpdmUgcm9vdCBjYXB0
dXJlZCBieQorICAgICAgICAgICAgICB0aGUgcmVhbCBHQyB3aWxsIGFsc28gYmUgYWRkZWQgdG8g
dGhlIHZlcmlmaWVyJ3MgbWFyayBzdGFjay4KKworICAgICAgICAgICAgICBEdXJpbmcgdGhlIHZl
cmlmeUdDIGluIHRoZSBFbmQgcGhhc2UsIHRoZSBjb25zZXJ2YXRpdmUgcm9vdCBzY2FucyB3aWxs
IGJlCisgICAgICAgICAgICAgIHRyZWF0ZWQgYXMgbm8tb3BzLgorCisgICAgICAgICAgIGIuIENv
ZGVCbG9jazo6c2hvdWxkSmV0dGlzb25EdWVUb09sZEFnZSgpIG1heSByZXR1cm4gYSBkaWZmZXJl
bnQgdmFsdWUuCisKKyAgICAgICAgICAgICAgVGhpcyBpcyBwb3NzaWJsZSBiZWNhdXNlIHRoZSBj
b2RlQmxvY2sgbWF5IGJlIGluIG1pZCBjb21waWxhdGlvbiB3aGlsZSB0aGUKKyAgICAgICAgICAg
ICAgcmVhbCBHQyBpcyBpbiBwcm9ncmVzcy4KKworICAgICAgICAgICAgICBDb2RlQmxvY2s6OnNo
b3VsZFZpc2l0U3Ryb25nbHkoKSBjYWxscyBzaG91bGRKZXR0aXNvbkR1ZVRvT2xkQWdlKCksIGFu
ZCBtYXkKKyAgICAgICAgICAgICAgc2VlIGFuIG9sZCBMTEludCBjb2RlQmxvY2sgd2hvc2UgdGlt
ZVRvTGl2ZSBoYXMgZXhwaXJlZC4gIEFzIGEgcmVzdWx0LAorICAgICAgICAgICAgICBzaG91bGRK
ZXR0aXNvbkR1ZVRvT2xkQWdlKCkgcmV0dXJucyB0cnVlIGFuZCBzaG91bGRWaXNpdFN0cm9uZ2x5
KCkgd2lsbAorICAgICAgICAgICAgICByZXR1cm4gZmFsc2UgZm9yIHRoZSByZWFsIEdDLCBsZWFk
aW5nIHRvIGl0IG5vdCBtYXJraW5nIHRoZSBjb2RlQmxvY2suCisKKyAgICAgICAgICAgICAgSG93
ZXZlciwgYmVmb3JlIHRoZSB2ZXJpZmllciBHQyBnZXRzIHRvIHJ1biwgYmFzZWxpbmUgY29tcGls
YXRpb24gb24gdGhlCisgICAgICAgICAgICAgIGNvZGVCbG9jayBtYXkgZmluaXNoLiAgQXMgYSBi
YXNlbGluZSBjb2RlQmxvY2sgbm93LCBpdCBnZXRzIGEgbG9uZ2VyIHRpbWUKKyAgICAgICAgICAg
ICAgdG8gbGl2ZS4KKworICAgICAgICAgICAgICBBcyBhIHJlc3VsdCwgd2hlbiB0aGUgdmVyaWZp
ZXIgR0MgcnVucywgc2hvdWxkSmV0dGlzb25EdWVUb09sZEFnZSgpIHdpbGwKKyAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlLCBhbmQgc2hvdWxkVmlzaXRTdHJvbmdseSgpIGluIHR1cm4gcmV0dXJu
cyB0cnVlLiAgVGhpcyByZXN1bHRzCisgICAgICAgICAgICAgIGluIHRoZSB2ZXJpZmllciBHQyBt
YXJraW5nIHRoZSBjb2RlQmxvY2sgKGFuZCBpdHMgY2hpbGRyZW4pIHdoZW4gdGhlIHJlYWwKKyAg
ICAgICAgICAgICAgR0MgZGlkIG5vdCwgd2hpY2ggbGVhZHMgdG8gYSBmYWxzZSBlcnJvci4gIFRo
aXMgaXMgbm90IGEgcmVhbCBlcnJvciBiZWNhdXNlCisgICAgICAgICAgICAgIGlmIHRoZSByZWFs
IEdDIGRpZCBub3QgbWFyayB0aGUgY29kZSBibG9jaywgaXQgd2lsbCBzaW1wbHkgZ2V0IGpldHRp
c29uZWQsCisgICAgICAgICAgICAgIGFuZCBjYW4gYmUgcmVpbnN0YW50aWF0ZWQgd2hlbiBuZWVk
ZWQgbGF0ZXIuICBUaGVyZSdzIG5vIEdDIGJ1ZyBoZXJlLgorICAgICAgICAgICAgICBIb3dldmVy
LCB3ZSBkbyBuZWVkIHRvIHdvcmsgYXJvdW5kIHRoaXMgdG8gcHJldmVudCB0aGUgZmFsc2UgZXJy
b3IgZm9yIHRoZQorICAgICAgICAgICAgICBHQyB2ZXJpZmllci4KKworICAgICAgICAgICAgICBU
aGUgd29yayBhcm91bmQgaXMgdG8gaW50cm9kdWNlIGEgQ29kZUJsb2NrOjptX3Zpc2l0Q2hpbGRy
ZW5Ta2lwcGVkRHVlVG9PbGRBZ2UKKyAgICAgICAgICAgICAgZmxhZyB0aGF0IHJlY29yZHMgd2hh
dCB0aGUgcmVhbCBHQyBkZWNpZGVkIGluIHNob3VsZEpldHRpc29uRHVlVG9PbGRBZ2UoKS4KKyAg
ICAgICAgICAgICAgVGhpcyBhbGxvd3MgdGhlIHZlcmlmaWVyIEdDIHRvIHJlcGxheSB0aGUgc2Ft
ZSBkZWNpc2lvbiBhbmQgZ2V0IGEgY29uc2lzdGVudAorICAgICAgICAgICAgICByZXN1bHQuCisK
KyAgICAgICAgICAgYy4gQ29kZUJsb2NrOjpwcm9wYWdhdGVUcmFuc2l0aW9ucygpIHdpbGwgb25s
eSBkbyBhIGJlc3QgZWZmb3J0IGF0IHZpc2l0aW5nCisgICAgICAgICAgICAgIGNlbGxzIGluIElD
cywgZXRjLiAgSWYgYSBjZWxsIGlzIG5vdCBhbHJlYWR5IHN0cm9uZ2x5IG1hcmtlZCBieSB0aGUg
dGltZQorICAgICAgICAgICAgICBDb2RlQmxvY2s6OnByb3BhZ2F0ZVRyYW5zaXRpb25zKCkgY2hl
Y2tzIGl0LCBwcm9wYWdhdGVUcmFuc2l0aW9ucygpIHdpbGwKKyAgICAgICAgICAgICAgbm90IG1h
cmsgb3RoZXIgY2VsbHMgdGhhdCBhcmUgcmVhY2hhYmxlIGZyb20gaXQuCisKKyAgICAgICAgICAg
ICAgU2luY2UgdGhlIHJlYWwgR0MgZG9lcyBtYXJraW5nIG9uIGNvbmN1cnJlbnQgdGhyZWFkcywg
bWFya2luZyBvcmRlciBpcyBub3QKKyAgICAgICAgICAgICAgZGV0ZXJtaW5pc3RpYy4gIENvZGVC
bG9jazo6cHJvcGFnYXRlVHJhbnNpdGlvbnMoKSBtYXkgb3IgbWF5IG5vdCBzZWUgYSBjZWxsCisg
ICAgICAgICAgICAgIGFzIGFscmVhZHkgbWFya2VkIGJ5IHRoZSB0aW1lIGl0IHJ1bnMuCisKKyAg
ICAgICAgICAgICAgVGhlIHZlcmlmaWVyIEdDIG1heSBtYXJrIHNvbWUgb2YgdGhlc2UgY2VsbHMg
aW4gYSBkaWZmZXJlbnQgb3JkZXIgdGhhbiB0aGUKKyAgICAgICAgICAgICAgcmVhbCBHQy4gIEFz
IGEgcmVzdWx0LCBpbiB0aGUgdmVyaWZpZXIgR0MsIENvZGVCbG9jazo6cHJvcGFnYXRlVHJhbnNp
dGlvbnMoKQorICAgICAgICAgICAgICBtYXkgc2VlIGEgY2VsbCBhcyBtYXJrZWQgKGFuZCB0aGVy
ZWZvcmUsIHZpc2l0IGl0cyBjaGlsZHJlbikgd2hlbiBpdCBkaWQKKyAgICAgICAgICAgICAgbm90
IGZvciB0aGUgcmVhbCBHQy4KKworICAgICAgICAgICAgICBUbyB3b3JrIGFyb3VuZCB0aGlzLCB3
ZSBjdXJyZW50bHkgYWRkIGEgU3VwcHJlc3NHQ1ZlcmlmaWVyU2NvcGUgdG8KKyAgICAgICAgICAg
ICAgQ29kZUJsb2NrOjpwcm9wYWdhdGVUcmFuc2l0aW9ucygpIHRvIHBlc3NpbWl6ZSB0aGUgdmVy
aWZpZXIsIGFuZCBhc3N1bWUgdGhhdAorICAgICAgICAgICAgICBwcm9wYWdhdGVUcmFuc2l0aW9u
cygpIHdpbGwgbWFyayBub3RoaW5nLgorCisgICAgICAgICAgICAgIFN1cHByZXNzR0NWZXJpZmll
clNjb3BlIGlzIGEgYmx1bnQgaGFtbWVyIHRoYXQgc3RvcHMgdGhlIHZlcmlmaWVyIEdDIGZyb20K
KyAgICAgICAgICAgICAgYW5hbHl6aW5nIGFsbCBjZWxscyBwb3RlbnRpYWxseSByZWFjaGFibGUg
dmlhIENvZGVCbG9jazo6cHJvcGFnYXRlVHJhbnNpdGlvbnMoKS4KKyAgICAgICAgICAgICAgSW4g
dGhlIGZ1dHVyZSwgaXQgbWF5IGJlIHBvc3NpYmxlIHRvIHJlZmluZSB0aGlzIGFuZCB0cmFjayB3
aGljaCBjZWxscyB3ZXJlCisgICAgICAgICAgICAgIGFjdHVhbGx5IHNraXBwZWQgb3ZlciAobGlr
ZSB3ZSBkaWQgZm9yIHNob3VsZEpldHRpc29uRHVlVG9PbGRBZ2UoKSkuCisgICAgICAgICAgICAg
IEhvd2V2ZXIsIHRoaXMgZGVjaXNpb24gdHJhY2tpbmcgbmVlZHMgdG8gYmUgZG9uZSBpbiB0aGUg
cmVhbCBHQywgYW5kIGNhbiBiZQorICAgICAgICAgICAgICB2ZXJ5IGV4cGVuc2l2ZSBpbiB0ZXJt
cyBvZiBwZXJmb3JtYW5jZS4gIFRoZSBzaG91bGRKZXR0aXNvbkR1ZVRvT2xkQWdlKCkKKyAgICAg
ICAgICAgICAgY2FzZSBpcyByYXJlLCBhbmQgYXMgc3VjaCBsZW5kcyBpdHNlbGYgdG8gdGhpcyBt
b3JlIGZpbmUgZ3JhaW4gdHJhY2tpbmcKKyAgICAgICAgICAgICAgd2l0aG91dCBodXJ0aW5nIHBl
cmZvcm1hbmNlLiAgVGhlIGRlY2lzaW9ucyBtYWRlIGluIENvZGVCbG9jazo6cHJvcGFnYXRlVHJh
bnNpdGlvbnMoKQorICAgICAgICAgICAgICBhcmUgbm90IGFzIHJhcmUsIGFuZCBoZW5jZSwgaXQg
d291bGQgaHVydCBwZXJmb3JtYW5jZSBpZiB3ZSBkaWQgZmluZSBncmFpbgorICAgICAgICAgICAg
ICBkZWNpc2lvbiB0cmFja2luZyB0aGVyZSAoYXQgbGVhc3Qgb3Igbm93KS4KKworICAgICAgICAx
MS4gTWFya2luZyBpbiB0aGUgdmVyaWZpZXIgR0MuCisKKyAgICAgICAgICAgIFRoZSByZWFsIEdD
IHRyYWNrcyBjZWxsIG1hcmtzIHVzaW5nIGEgQml0bWFwIGluIHRoZSBNYXJrZWRCbG9ja3MuICBU
aGUgdmVyaWZpZXIKKyAgICAgICAgICAgIEdDIGtlZXBzIHRyYWNrcyBvZiBNYXJrZWRCbG9jayBj
ZWxsIG1hcmtzIHVzaW5nIGEgQml0bWFwIG9uIHRoZSBzaWRlLCBzdGFzaGVkCisgICAgICAgICAg
ICBhd2F5IGluIGEgSGFzaE1hcC4KKworICAgICAgICAgICAgVG8gaW1wcm92ZSB0aGUgdmVyaWZp
ZXIgbWFraW5nIHBlcmZvcm1hbmNlLCB3ZSByZXNlcnZlIGEgdm9pZCogbV92ZXJpZmllck1lbW8K
KyAgICAgICAgICAgIHBvaW50ZXIgaW4gdGhlIE1hcmtlZEJsb2NrLCB3aGljaCB0aGUgdmVyaWZp
ZXIgd2lsbCBlbXBsb3kgdG8gY2FjaGUgaXRzCisgICAgICAgICAgICBNYXJrZWRCbG9ja0RhdGEg
Zm9yIHRoYXQgTWFya2VkQmxvY2suICBUaGlzIGFsbG93cyB0aGUgdmVyaWZpZXIgdG8gZ2V0IHRv
IGl0cworICAgICAgICAgICAgc2lkZSBCaXRtYXAgd2l0aG91dCBoYXZpbmcgdG8gZG8gYSBIYXNo
TWFwIGxvb2sgdXAgZm9yIGV2ZXJ5IGNlbGwuCisKKyAgICAgICAgICAgIFNpemUtd2lzZSwgaW4g
dGhlIGN1cnJlbnQgMTZLIE1hcmtCbG9ja3MsIHRoZXJlIGlzIHByZXZpb3VzbHkgcm9vbSBmb3Ig
MTAwNS41CisgICAgICAgICAgICBhdG9tcyBhZnRlciByZXNlcnZpbmcgc3BhY2UgZm9yIHRoZSBN
YXJrZWRCbG9jazo6Rm9vdGVyLiAgU2luY2Ugd2UgY2FuIG5ldmVyCisgICAgICAgICAgICBhbGxv
Y2F0ZSBoYWxmIGFuIGF0b20gYW55d2F5LCB0aGF0IC41IGF0b20gZ2l2ZXMgdXMgdGhlIDggYnl0
ZXMgd2UgbmVlZCBmb3IKKyAgICAgICAgICAgIHRoZSBtX3ZlcmlmaWVyTWVtbyBwb2ludGVyLCB3
aGljaCB3ZSdsbCBwdXQgaW4gdGhlIE1hcmtlZEJsb2NrOjpGb290ZXIuICBXaXRoCisgICAgICAg
ICAgICB0aGlzIHBhdGNoLCBlYWNoIE1hcmtlZEJsb2NrIHdpbGwgbm93IGhhdmUgZXhhY3RseSAx
MDA1IGF0b21zIGF2YWlsYWJsZSBmb3IKKyAgICAgICAgICAgIGFsbG9jYXRpb24uCisKKyAgICAg
ICAgSSByYW4gSmV0U3RyZWFtMiBhbmQgU3BlZWRvbWV0ZXIyIGxvY2FsbHkgb24gYSBNYWNCb29r
QWlyMTAsMSwgTWFjQm9va1BybzE2LDEsCisgICAgICAgIGFuZCBhIDEyLjnigJ0gNHRoIEdlbiBp
UGFkIFByby4gIFRoZSBiZW5jaG1hcmsgcmVzdWx0cyBmb3IgdGhlc2Ugd2VyZSBhbGwgbmV1dHJh
bC4KKworICAgICAgICBUaGUgZGVzaWduIG9mIHRoZSBHQyB2ZXJpZmllciBpcyBzdWNoIHRoYXQg
aXQgaW5jdXJzIGFsbW9zdCBubyBhZGRpdGlvbmFsIHJ1bnRpbWUKKyAgICAgICAgbWVtb3J5IG92
ZXJoZWFkIGlmIG5vdCBpbiB1c2UuICBDb2RlIHNpemUgZG9lcyBpbmNyZWFzZSBzaWduaWZpY2Fu
dGx5IGJlY2F1c2UKKyAgICAgICAgdGhlcmUgYXJlIG5vdyAyIHZhcmlhbnRzIG9mIG1vc3Qgb2Yg
dGhlIG1ldGhvZHMgdGhhdCB0YWtlIGEgU2xvdFZpc2l0b3IuCisKKyAgICAgICAgV2hlbiBpbiB1
c2UsIHRoZSBhZGRpdGlvbmFsIHJ1bnRpbWUgbWVtb3J5IGlzIGVuY2Fwc3VsYXRlZCBpbiB0aGUK
KyAgICAgICAgVmVyaWZpZXJTbG90VmlzaXRvciwgd2hpY2ggaXMgaW5zdGFudGlhdGVkIGFuZCBk
ZXN0cnVjdGVkIGV2ZXJ5IEdDIGN5Y2xlLiAgSGVuY2UsCisgICAgICAgIGl0IGNhbiBhZmZlY3Qg
cGVhayBtZW1vcnkgdXNhZ2UgZHVyaW5nIEdDcywgYnV0IHRoZSBjb3N0IGlzIHRyYW5zaWVudC4g
IEl0IGRvZXMKKyAgICAgICAgbm90IHBlcnNpc3QgcGFzdCB0aGUgR0MgRW5kIHBoYXNlLgorCisg
ICAgICAgICogQVBJL0pTQVBJV3JhcHBlck9iamVjdC5oOgorICAgICAgICAqIEFQSS9KU0FQSVdy
YXBwZXJPYmplY3QubW06CisgICAgICAgIChKU0FQSVdyYXBwZXJPYmplY3RIYW5kbGVPd25lcjo6
aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMpOgorICAgICAgICAoSlNDOjpKU0FQSVdyYXBwZXJP
YmplY3Q6OnZpc2l0Q2hpbGRyZW5JbXBsKToKKyAgICAgICAgKEpTQzo6SlNBUElXcmFwcGVyT2Jq
ZWN0Ojp2aXNpdENoaWxkcmVuKTogRGVsZXRlZC4KKyAgICAgICAgKiBBUEkvSlNDYWxsYmFja09i
amVjdC5jcHA6CisgICAgICAgICogQVBJL0pTQ2FsbGJhY2tPYmplY3QuaDoKKyAgICAgICAgKEpT
Qzo6SlNDYWxsYmFja09iamVjdERhdGE6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAoSlNDOjpK
U0NhbGxiYWNrT2JqZWN0RGF0YTo6SlNQcml2YXRlUHJvcGVydHlNYXA6OnZpc2l0Q2hpbGRyZW4p
OgorICAgICAgICAoSlNDOjpKU0NhbGxiYWNrT2JqZWN0PFBhcmVudD46OnZpc2l0Q2hpbGRyZW5J
bXBsKToKKyAgICAgICAgKiBBUEkvSlNNYW5hZ2VkVmFsdWUubW06CisgICAgICAgIChKU01hbmFn
ZWRWYWx1ZUhhbmRsZU93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyk6CisgICAgICAg
ICogQVBJL0pTTWFya2luZ0NvbnN0cmFpbnRQcml2YXRlLmNwcDoKKyAgICAgICAgKEpTQzo6aXNN
YXJrZWQpOgorICAgICAgICAoSlNDb250ZXh0R3JvdXBBZGRNYXJraW5nQ29uc3RyYWludCk6Cisg
ICAgICAgICogQVBJL0pTVmlydHVhbE1hY2hpbmUubW06CisgICAgICAgIChzY2FuRXh0ZXJuYWxP
YmplY3RHcmFwaCk6CisgICAgICAgIChzY2FuRXh0ZXJuYWxSZW1lbWJlcmVkU2V0KToKKyAgICAg
ICAgKiBBUEkvSlNWaXJ0dWFsTWFjaGluZUludGVybmFsLmg6CisgICAgICAgICogQVBJL01hcmtl
ZEpTVmFsdWVSZWZBcnJheS5jcHA6CisgICAgICAgIChKU0M6Ok1hcmtlZEpTVmFsdWVSZWZBcnJh
eTo6dmlzaXRBZ2dyZWdhdGUpOgorICAgICAgICAqIEFQSS9NYXJrZWRKU1ZhbHVlUmVmQXJyYXku
aDoKKyAgICAgICAgKiBBUEkvZ2xpYi9KU0FQSVdyYXBwZXJHbG9iYWxPYmplY3QuY3BwOgorICAg
ICAgICAoSlNDOjpKU0FQSVdyYXBwZXJHbG9iYWxPYmplY3Q6OnZpc2l0Q2hpbGRyZW4pOiBEZWxl
dGVkLgorICAgICAgICAqIEFQSS9nbGliL0pTQVBJV3JhcHBlckdsb2JhbE9iamVjdC5oOgorICAg
ICAgICAqIEFQSS9nbGliL0pTQVBJV3JhcHBlck9iamVjdEdMaWIuY3BwOgorICAgICAgICAoSlNB
UElXcmFwcGVyT2JqZWN0SGFuZGxlT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKToK
KyAgICAgICAgKEpTQzo6SlNBUElXcmFwcGVyT2JqZWN0Ojp2aXNpdENoaWxkcmVuSW1wbCk6Cisg
ICAgICAgIChKU0M6OkpTQVBJV3JhcHBlck9iamVjdDo6dmlzaXRDaGlsZHJlbik6IERlbGV0ZWQu
CisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBTY3JpcHRzL3drYnVpbHRpbnMvYnVp
bHRpbnNfZ2VuZXJhdGVfaW50ZXJuYWxzX3dyYXBwZXJfaGVhZGVyLnB5OgorICAgICAgICAoQnVp
bHRpbnNJbnRlcm5hbHNXcmFwcGVySGVhZGVyR2VuZXJhdG9yKToKKyAgICAgICAgKiBTY3JpcHRz
L3drYnVpbHRpbnMvYnVpbHRpbnNfZ2VuZXJhdGVfaW50ZXJuYWxzX3dyYXBwZXJfaW1wbGVtZW50
YXRpb24ucHk6CisgICAgICAgIChCdWlsdGluc0ludGVybmFsc1dyYXBwZXJJbXBsZW1lbnRhdGlv
bkdlbmVyYXRvci5nZW5lcmF0ZV92aXNpdF9tZXRob2QpOgorICAgICAgICAqIFNjcmlwdHMvd2ti
dWlsdGlucy9idWlsdGluc190ZW1wbGF0ZXMucHk6CisgICAgICAgICogU291cmNlcy50eHQ6Cisg
ICAgICAgICogYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHA6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nh
c2U6OnByb3BhZ2F0ZVRyYW5zaXRpb25zIGNvbnN0KToKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2Fz
ZTo6dmlzaXRBZ2dyZWdhdGVJbXBsIGNvbnN0KToKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6
dmlzaXRBZ2dyZWdhdGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIGJ5dGVjb2RlL0FjY2Vz
c0Nhc2UuaDoKKyAgICAgICAgKiBieXRlY29kZS9CeVZhbEluZm8uY3BwOgorICAgICAgICAoSlND
OjpCeVZhbEluZm86OnZpc2l0QWdncmVnYXRlSW1wbCk6CisgICAgICAgIChKU0M6OkJ5VmFsSW5m
bzo6dmlzaXRBZ2dyZWdhdGUpOiBEZWxldGVkLgorICAgICAgICAqIGJ5dGVjb2RlL0J5VmFsSW5m
by5oOgorICAgICAgICAqIGJ5dGVjb2RlL0NoZWNrUHJpdmF0ZUJyYW5kU3RhdHVzLmNwcDoKKyAg
ICAgICAgKEpTQzo6Q2hlY2tQcml2YXRlQnJhbmRTdGF0dXM6OnZpc2l0QWdncmVnYXRlSW1wbCk6
CisgICAgICAgIChKU0M6OkNoZWNrUHJpdmF0ZUJyYW5kU3RhdHVzOjptYXJrSWZDaGVhcCk6Cisg
ICAgICAgIChKU0M6OkNoZWNrUHJpdmF0ZUJyYW5kU3RhdHVzOjp2aXNpdEFnZ3JlZ2F0ZSk6IERl
bGV0ZWQuCisgICAgICAgICogYnl0ZWNvZGUvQ2hlY2tQcml2YXRlQnJhbmRTdGF0dXMuaDoKKyAg
ICAgICAgKiBieXRlY29kZS9DaGVja1ByaXZhdGVCcmFuZFZhcmlhbnQuY3BwOgorICAgICAgICAo
SlNDOjpDaGVja1ByaXZhdGVCcmFuZFZhcmlhbnQ6Om1hcmtJZkNoZWFwKToKKyAgICAgICAgKEpT
Qzo6Q2hlY2tQcml2YXRlQnJhbmRWYXJpYW50Ojp2aXNpdEFnZ3JlZ2F0ZUltcGwpOgorICAgICAg
ICAoSlNDOjpDaGVja1ByaXZhdGVCcmFuZFZhcmlhbnQ6OnZpc2l0QWdncmVnYXRlKTogRGVsZXRl
ZC4KKyAgICAgICAgKiBieXRlY29kZS9DaGVja1ByaXZhdGVCcmFuZFZhcmlhbnQuaDoKKyAgICAg
ICAgKiBieXRlY29kZS9Db2RlQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OkNv
ZGVCbG9jayk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6dmlzaXRDaGlsZHJlbkltcGwpOgor
ICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAoSlNDOjpD
b2RlQmxvY2s6OnNob3VsZFZpc2l0U3Ryb25nbHkpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6
OnNob3VsZEpldHRpc29uRHVlVG9PbGRBZ2UpOgorICAgICAgICAoSlNDOjpzaG91bGRNYXJrVHJh
bnNpdGlvbik6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6cHJvcGFnYXRlVHJhbnNpdGlvbnMp
OgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmRldGVybWluZUxpdmVuZXNzKToKKyAgICAgICAg
KEpTQzo6Q29kZUJsb2NrOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSk6CisgICAgICAgIChKU0M6
OkNvZGVCbG9jazo6dmlzaXRPU1JFeGl0VGFyZ2V0cyk6CisgICAgICAgIChKU0M6OkNvZGVCbG9j
azo6c3Ryb25nbHlWaXNpdFN0cm9uZ1JlZmVyZW5jZXMpOgorICAgICAgICAoSlNDOjpDb2RlQmxv
Y2s6OnN0cm9uZ2x5VmlzaXRXZWFrUmVmZXJlbmNlcyk6CisgICAgICAgICogYnl0ZWNvZGUvQ29k
ZUJsb2NrLmg6CisgICAgICAgICogYnl0ZWNvZGUvRGVsZXRlQnlJZFZhcmlhbnQuY3BwOgorICAg
ICAgICAoSlNDOjpEZWxldGVCeUlkVmFyaWFudDo6dmlzaXRBZ2dyZWdhdGVJbXBsKToKKyAgICAg
ICAgKEpTQzo6RGVsZXRlQnlJZFZhcmlhbnQ6Om1hcmtJZkNoZWFwKToKKyAgICAgICAgKEpTQzo6
RGVsZXRlQnlJZFZhcmlhbnQ6OnZpc2l0QWdncmVnYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKiBi
eXRlY29kZS9EZWxldGVCeUlkVmFyaWFudC5oOgorICAgICAgICAqIGJ5dGVjb2RlL0RlbGV0ZUJ5
U3RhdHVzLmNwcDoKKyAgICAgICAgKEpTQzo6RGVsZXRlQnlTdGF0dXM6OnZpc2l0QWdncmVnYXRl
SW1wbCk6CisgICAgICAgIChKU0M6OkRlbGV0ZUJ5U3RhdHVzOjptYXJrSWZDaGVhcCk6CisgICAg
ICAgIChKU0M6OkRlbGV0ZUJ5U3RhdHVzOjp2aXNpdEFnZ3JlZ2F0ZSk6IERlbGV0ZWQuCisgICAg
ICAgICogYnl0ZWNvZGUvRGVsZXRlQnlTdGF0dXMuaDoKKyAgICAgICAgKiBieXRlY29kZS9EaXJl
Y3RFdmFsQ29kZUNhY2hlLmNwcDoKKyAgICAgICAgKEpTQzo6RGlyZWN0RXZhbENvZGVDYWNoZTo6
dmlzaXRBZ2dyZWdhdGVJbXBsKToKKyAgICAgICAgKEpTQzo6RGlyZWN0RXZhbENvZGVDYWNoZTo6
dmlzaXRBZ2dyZWdhdGUpOiBEZWxldGVkLgorICAgICAgICAqIGJ5dGVjb2RlL0RpcmVjdEV2YWxD
b2RlQ2FjaGUuaDoKKyAgICAgICAgKiBieXRlY29kZS9FeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdl
LmNwcDoKKyAgICAgICAgKEpTQzo6RXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZTo6dmlzaXRDaGls
ZHJlbkltcGwpOgorICAgICAgICAoSlNDOjpFeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlOjp2aXNp
dE91dHB1dENvbnN0cmFpbnRzSW1wbCk6CisgICAgICAgIChKU0M6OkV4ZWN1dGFibGVUb0NvZGVC
bG9ja0VkZ2U6OnJ1bkNvbnN0cmFpbnQpOgorICAgICAgICAoSlNDOjpFeGVjdXRhYmxlVG9Db2Rl
QmxvY2tFZGdlOjp2aXNpdENoaWxkcmVuKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6RXhlY3V0
YWJsZVRvQ29kZUJsb2NrRWRnZTo6dmlzaXRPdXRwdXRDb25zdHJhaW50cyk6IERlbGV0ZWQuCisg
ICAgICAgICogYnl0ZWNvZGUvRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZS5oOgorICAgICAgICAq
IGJ5dGVjb2RlL0dldEJ5SWRWYXJpYW50LmNwcDoKKyAgICAgICAgKEpTQzo6R2V0QnlJZFZhcmlh
bnQ6OnZpc2l0QWdncmVnYXRlSW1wbCk6CisgICAgICAgIChKU0M6OkdldEJ5SWRWYXJpYW50Ojpt
YXJrSWZDaGVhcCk6CisgICAgICAgIChKU0M6OkdldEJ5SWRWYXJpYW50Ojp2aXNpdEFnZ3JlZ2F0
ZSk6IERlbGV0ZWQuCisgICAgICAgICogYnl0ZWNvZGUvR2V0QnlJZFZhcmlhbnQuaDoKKyAgICAg
ICAgKiBieXRlY29kZS9HZXRCeVN0YXR1cy5jcHA6CisgICAgICAgIChKU0M6OkdldEJ5U3RhdHVz
Ojp2aXNpdEFnZ3JlZ2F0ZUltcGwpOgorICAgICAgICAoSlNDOjpHZXRCeVN0YXR1czo6bWFya0lm
Q2hlYXApOgorICAgICAgICAoSlNDOjpHZXRCeVN0YXR1czo6dmlzaXRBZ2dyZWdhdGUpOiBEZWxl
dGVkLgorICAgICAgICAqIGJ5dGVjb2RlL0dldEJ5U3RhdHVzLmg6CisgICAgICAgICogYnl0ZWNv
ZGUvSW5CeUlkU3RhdHVzLmNwcDoKKyAgICAgICAgKEpTQzo6SW5CeUlkU3RhdHVzOjptYXJrSWZD
aGVhcCk6CisgICAgICAgICogYnl0ZWNvZGUvSW5CeUlkU3RhdHVzLmg6CisgICAgICAgICogYnl0
ZWNvZGUvSW5CeUlkVmFyaWFudC5jcHA6CisgICAgICAgIChKU0M6OkluQnlJZFZhcmlhbnQ6Om1h
cmtJZkNoZWFwKToKKyAgICAgICAgKiBieXRlY29kZS9JbkJ5SWRWYXJpYW50Lmg6CisgICAgICAg
ICogYnl0ZWNvZGUvSW50ZXJuYWxGdW5jdGlvbkFsbG9jYXRpb25Qcm9maWxlLmg6CisgICAgICAg
IChKU0M6OkludGVybmFsRnVuY3Rpb25BbGxvY2F0aW9uUHJvZmlsZTo6dmlzaXRBZ2dyZWdhdGUp
OgorICAgICAgICAqIGJ5dGVjb2RlL09iamVjdEFsbG9jYXRpb25Qcm9maWxlLmg6CisgICAgICAg
IChKU0M6Ok9iamVjdEFsbG9jYXRpb25Qcm9maWxlQmFzZTo6dmlzaXRBZ2dyZWdhdGUpOgorICAg
ICAgICAoSlNDOjpPYmplY3RBbGxvY2F0aW9uUHJvZmlsZVdpdGhQcm90b3R5cGU6OnZpc2l0QWdn
cmVnYXRlKToKKyAgICAgICAgKiBieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHA6CisgICAg
ICAgIChKU0M6OlBvbHltb3JwaGljQWNjZXNzOjpwcm9wYWdhdGVUcmFuc2l0aW9ucyBjb25zdCk6
CisgICAgICAgIChKU0M6OlBvbHltb3JwaGljQWNjZXNzOjp2aXNpdEFnZ3JlZ2F0ZUltcGwpOgor
ICAgICAgICAoSlNDOjpQb2x5bW9ycGhpY0FjY2Vzczo6dmlzaXRBZ2dyZWdhdGUpOiBEZWxldGVk
LgorICAgICAgICAqIGJ5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmg6CisgICAgICAgICogYnl0
ZWNvZGUvUHV0QnlJZFN0YXR1cy5jcHA6CisgICAgICAgIChKU0M6OlB1dEJ5SWRTdGF0dXM6Om1h
cmtJZkNoZWFwKToKKyAgICAgICAgKiBieXRlY29kZS9QdXRCeUlkU3RhdHVzLmg6CisgICAgICAg
ICogYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuY3BwOgorICAgICAgICAoSlNDOjpQdXRCeUlkVmFy
aWFudDo6bWFya0lmQ2hlYXApOgorICAgICAgICAqIGJ5dGVjb2RlL1B1dEJ5SWRWYXJpYW50Lmg6
CisgICAgICAgICogYnl0ZWNvZGUvUmVjb3JkZWRTdGF0dXNlcy5jcHA6CisgICAgICAgIChKU0M6
OlJlY29yZGVkU3RhdHVzZXM6OnZpc2l0QWdncmVnYXRlSW1wbCk6CisgICAgICAgIChKU0M6OlJl
Y29yZGVkU3RhdHVzZXM6Om1hcmtJZkNoZWFwKToKKyAgICAgICAgKEpTQzo6UmVjb3JkZWRTdGF0
dXNlczo6dmlzaXRBZ2dyZWdhdGUpOiBEZWxldGVkLgorICAgICAgICAqIGJ5dGVjb2RlL1JlY29y
ZGVkU3RhdHVzZXMuaDoKKyAgICAgICAgKiBieXRlY29kZS9TZXRQcml2YXRlQnJhbmRTdGF0dXMu
Y3BwOgorICAgICAgICAoSlNDOjpTZXRQcml2YXRlQnJhbmRTdGF0dXM6OnZpc2l0QWdncmVnYXRl
SW1wbCk6CisgICAgICAgIChKU0M6OlNldFByaXZhdGVCcmFuZFN0YXR1czo6bWFya0lmQ2hlYXAp
OgorICAgICAgICAoSlNDOjpTZXRQcml2YXRlQnJhbmRTdGF0dXM6OnZpc2l0QWdncmVnYXRlKTog
RGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29kZS9TZXRQcml2YXRlQnJhbmRTdGF0dXMuaDoKKyAg
ICAgICAgKiBieXRlY29kZS9TZXRQcml2YXRlQnJhbmRWYXJpYW50LmNwcDoKKyAgICAgICAgKEpT
Qzo6U2V0UHJpdmF0ZUJyYW5kVmFyaWFudDo6bWFya0lmQ2hlYXApOgorICAgICAgICAoSlNDOjpT
ZXRQcml2YXRlQnJhbmRWYXJpYW50Ojp2aXNpdEFnZ3JlZ2F0ZUltcGwpOgorICAgICAgICAoSlND
OjpTZXRQcml2YXRlQnJhbmRWYXJpYW50Ojp2aXNpdEFnZ3JlZ2F0ZSk6IERlbGV0ZWQuCisgICAg
ICAgICogYnl0ZWNvZGUvU2V0UHJpdmF0ZUJyYW5kVmFyaWFudC5oOgorICAgICAgICAqIGJ5dGVj
b2RlL1N0cnVjdHVyZVNldC5jcHA6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVNldDo6bWFya0lm
Q2hlYXAgY29uc3QpOgorICAgICAgICAqIGJ5dGVjb2RlL1N0cnVjdHVyZVNldC5oOgorICAgICAg
ICAqIGJ5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcDoKKyAgICAgICAgKEpTQzo6U3RydWN0
dXJlU3R1YkluZm86OnZpc2l0QWdncmVnYXRlSW1wbCk6CisgICAgICAgIChKU0M6OlN0cnVjdHVy
ZVN0dWJJbmZvOjpwcm9wYWdhdGVUcmFuc2l0aW9ucyk6CisgICAgICAgIChKU0M6OlN0cnVjdHVy
ZVN0dWJJbmZvOjp2aXNpdEFnZ3JlZ2F0ZSk6IERlbGV0ZWQuCisgICAgICAgICogYnl0ZWNvZGUv
U3RydWN0dXJlU3R1YkluZm8uaDoKKyAgICAgICAgKiBieXRlY29kZS9VbmxpbmtlZENvZGVCbG9j
ay5jcHA6CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjp2aXNpdENoaWxkcmVuSW1w
bCk6CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjp2aXNpdENoaWxkcmVuKTogRGVs
ZXRlZC4KKyAgICAgICAgKiBieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oOgorICAgICAgICAq
IGJ5dGVjb2RlL1VubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlLmNwcDoKKyAgICAgICAgKEpTQzo6
VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU6OnZpc2l0Q2hpbGRyZW5JbXBsKToKKyAgICAgICAg
KEpTQzo6VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU6OnZpc2l0Q2hpbGRyZW4pOiBEZWxldGVk
LgorICAgICAgICAqIGJ5dGVjb2RlL1VubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlLmg6CisgICAg
ICAgICogZGVidWdnZXIvRGVidWdnZXJTY29wZS5jcHA6CisgICAgICAgIChKU0M6OkRlYnVnZ2Vy
U2NvcGU6OnZpc2l0Q2hpbGRyZW5JbXBsKToKKyAgICAgICAgKEpTQzo6RGVidWdnZXJTY29wZTo6
dmlzaXRDaGlsZHJlbik6IERlbGV0ZWQuCisgICAgICAgICogZGVidWdnZXIvRGVidWdnZXJTY29w
ZS5oOgorICAgICAgICAqIGRmZy9ERkdEZXNpcmVkVHJhbnNpdGlvbnMuY3BwOgorICAgICAgICAo
SlNDOjpERkc6OkRlc2lyZWRUcmFuc2l0aW9uOjp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKEpT
Qzo6REZHOjpEZXNpcmVkVHJhbnNpdGlvbnM6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAqIGRm
Zy9ERkdEZXNpcmVkVHJhbnNpdGlvbnMuaDoKKyAgICAgICAgKiBkZmcvREZHRGVzaXJlZFdlYWtS
ZWZlcmVuY2VzLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpEZXNpcmVkV2Vha1JlZmVyZW5jZXM6
OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAqIGRmZy9ERkdEZXNpcmVkV2Vha1JlZmVyZW5jZXMu
aDoKKyAgICAgICAgKiBkZmcvREZHR3JhcGguY3BwOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBo
Ojp2aXNpdENoaWxkcmVuSW1wbCk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OnZpc2l0Q2hp
bGRyZW4pOgorICAgICAgICAqIGRmZy9ERkdHcmFwaC5oOgorICAgICAgICAqIGRmZy9ERkdQbGFu
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpQbGFuOjpjaGVja0xpdmVuZXNzQW5kVmlzaXRDaGls
ZHJlbik6CisgICAgICAgIChKU0M6OkRGRzo6UGxhbjo6aXNLbm93blRvQmVMaXZlRHVyaW5nR0Mp
OgorICAgICAgICAoSlNDOjpERkc6OlBsYW46OmlzS25vd25Ub0JlTGl2ZUFmdGVyR0MpOgorICAg
ICAgICAqIGRmZy9ERkdQbGFuLmg6CisgICAgICAgICogZGZnL0RGR1BsYW5JbmxpbmVzLmg6Cisg
ICAgICAgIChKU0M6OkRGRzo6UGxhbjo6aXRlcmF0ZUNvZGVCbG9ja3NGb3JHQyk6CisgICAgICAg
ICogZGZnL0RGR1NhZmVwb2ludC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U2FmZXBvaW50Ojpj
aGVja0xpdmVuZXNzQW5kVmlzaXRDaGlsZHJlbik6CisgICAgICAgIChKU0M6OkRGRzo6U2FmZXBv
aW50Ojppc0tub3duVG9CZUxpdmVEdXJpbmdHQyk6CisgICAgICAgIChKU0M6OkRGRzo6U2FmZXBv
aW50Ojppc0tub3duVG9CZUxpdmVBZnRlckdDKToKKyAgICAgICAgKiBkZmcvREZHU2FmZXBvaW50
Lmg6CisgICAgICAgICogZGZnL0RGR1NjYW5uYWJsZS5oOgorICAgICAgICAqIGRmZy9ERkdXb3Jr
bGlzdC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6V29ya2xpc3Q6OnZpc2l0V2Vha1JlZmVyZW5j
ZXMpOgorICAgICAgICAoSlNDOjpERkc6OldvcmtsaXN0OjpyZW1vdmVEZWFkUGxhbnMpOgorICAg
ICAgICAqIGRmZy9ERkdXb3JrbGlzdC5oOgorICAgICAgICAqIGRmZy9ERkdXb3JrbGlzdElubGlu
ZXMuaDoKKyAgICAgICAgKEpTQzo6REZHOjppdGVyYXRlQ29kZUJsb2Nrc0ZvckdDKToKKyAgICAg
ICAgKEpTQzo6REZHOjpXb3JrbGlzdDo6aXRlcmF0ZUNvZGVCbG9ja3NGb3JHQyk6CisgICAgICAg
ICogaGVhcC9BYnN0cmFjdFNsb3RWaXNpdG9yLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpBYnN0
cmFjdFNsb3RWaXNpdG9yOjpDb250ZXh0OjpjZWxsIGNvbnN0KToKKyAgICAgICAgKEpTQzo6QWJz
dHJhY3RTbG90VmlzaXRvcjo6U3VwcHJlc3NHQ1ZlcmlmaWVyU2NvcGU6OlN1cHByZXNzR0NWZXJp
ZmllclNjb3BlKToKKyAgICAgICAgKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvcjo6U3VwcHJlc3NH
Q1ZlcmlmaWVyU2NvcGU6On5TdXBwcmVzc0dDVmVyaWZpZXJTY29wZSk6CisgICAgICAgIChKU0M6
OkFic3RyYWN0U2xvdFZpc2l0b3I6OkRlZmF1bHRNYXJraW5nVmlvbGF0aW9uQXNzZXJ0aW9uU2Nv
cGU6OkRlZmF1bHRNYXJraW5nVmlvbGF0aW9uQXNzZXJ0aW9uU2NvcGUpOgorICAgICAgICAoSlND
OjpBYnN0cmFjdFNsb3RWaXNpdG9yOjpjb2xsZWN0b3JNYXJrU3RhY2spOgorICAgICAgICAoSlND
OjpBYnN0cmFjdFNsb3RWaXNpdG9yOjptdXRhdG9yTWFya1N0YWNrKToKKyAgICAgICAgKEpTQzo6
QWJzdHJhY3RTbG90VmlzaXRvcjo6Y29sbGVjdG9yTWFya1N0YWNrIGNvbnN0KToKKyAgICAgICAg
KEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvcjo6bXV0YXRvck1hcmtTdGFjayBjb25zdCk6CisgICAg
ICAgIChKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3I6OmlzRW1wdHkpOgorICAgICAgICAoSlNDOjpB
YnN0cmFjdFNsb3RWaXNpdG9yOjpzZXRJZ25vcmVOZXdPcGFxdWVSb290cyk6CisgICAgICAgIChK
U0M6OkFic3RyYWN0U2xvdFZpc2l0b3I6OnZpc2l0Q291bnQgY29uc3QpOgorICAgICAgICAoSlND
OjpBYnN0cmFjdFNsb3RWaXNpdG9yOjphZGRUb1Zpc2l0Q291bnQpOgorICAgICAgICAoSlNDOjpB
YnN0cmFjdFNsb3RWaXNpdG9yOjpyb290TWFya1JlYXNvbiBjb25zdCk6CisgICAgICAgIChKU0M6
OkFic3RyYWN0U2xvdFZpc2l0b3I6OnNldFJvb3RNYXJrUmVhc29uKToKKyAgICAgICAgKEpTQzo6
QWJzdHJhY3RTbG90VmlzaXRvcjo6ZGlkUmFjZSk6CisgICAgICAgIChKU0M6OkFic3RyYWN0U2xv
dFZpc2l0b3I6OmNvZGVOYW1lIGNvbnN0KToKKyAgICAgICAgKEpTQzo6U2V0Um9vdE1hcmtSZWFz
b25TY29wZTo6U2V0Um9vdE1hcmtSZWFzb25TY29wZSk6CisgICAgICAgIChKU0M6OlNldFJvb3RN
YXJrUmVhc29uU2NvcGU6On5TZXRSb290TWFya1JlYXNvblNjb3BlKToKKyAgICAgICAgKiBoZWFw
L0Fic3RyYWN0U2xvdFZpc2l0b3JJbmxpbmVzLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpBYnN0
cmFjdFNsb3RWaXNpdG9yOjpDb250ZXh0OjpDb250ZXh0KToKKyAgICAgICAgKEpTQzo6QWJzdHJh
Y3RTbG90VmlzaXRvcjo6Q29udGV4dDo6fkNvbnRleHQpOgorICAgICAgICAoSlNDOjpBYnN0cmFj
dFNsb3RWaXNpdG9yOjpBYnN0cmFjdFNsb3RWaXNpdG9yKToKKyAgICAgICAgKEpTQzo6QWJzdHJh
Y3RTbG90VmlzaXRvcjo6aGVhcCBjb25zdCk6CisgICAgICAgIChKU0M6OkFic3RyYWN0U2xvdFZp
c2l0b3I6OnZtKToKKyAgICAgICAgKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvcjo6dm0gY29uc3Qp
OgorICAgICAgICAoSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yOjphZGRPcGFxdWVSb290KToKKyAg
ICAgICAgKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvcjo6Y29udGFpbnNPcGFxdWVSb290IGNvbnN0
KToKKyAgICAgICAgKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvcjo6YXBwZW5kKToKKyAgICAgICAg
KEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvcjo6YXBwZW5kSGlkZGVuKToKKyAgICAgICAgKEpTQzo6
QWJzdHJhY3RTbG90VmlzaXRvcjo6YXBwZW5kSGlkZGVuVW5iYXJyaWVyZWQpOgorICAgICAgICAo
SlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yOjphcHBlbmRWYWx1ZXMpOgorICAgICAgICAoSlNDOjpB
YnN0cmFjdFNsb3RWaXNpdG9yOjphcHBlbmRWYWx1ZXNIaWRkZW4pOgorICAgICAgICAoSlNDOjpB
YnN0cmFjdFNsb3RWaXNpdG9yOjphcHBlbmRVbmJhcnJpZXJlZCk6CisgICAgICAgIChKU0M6OkFi
c3RyYWN0U2xvdFZpc2l0b3I6OnBhcmVudENlbGwgY29uc3QpOgorICAgICAgICAoSlNDOjpBYnN0
cmFjdFNsb3RWaXNpdG9yOjpyZXNldCk6CisgICAgICAgICogaGVhcC9IYW5kbGVTZXQuY3BwOgor
ICAgICAgICAoSlNDOjpIYW5kbGVTZXQ6OnZpc2l0U3Ryb25nSGFuZGxlcyk6CisgICAgICAgICog
aGVhcC9IYW5kbGVTZXQuaDoKKyAgICAgICAgKiBoZWFwL0hlYXAuY3BwOgorICAgICAgICAoSlND
OjpIZWFwOjppdGVyYXRlRXhlY3V0aW5nQW5kQ29tcGlsaW5nQ29kZUJsb2Nrcyk6CisgICAgICAg
IChKU0M6OkhlYXA6Oml0ZXJhdGVFeGVjdXRpbmdBbmRDb21waWxpbmdDb2RlQmxvY2tzV2l0aG91
dEhvbGRpbmdMb2Nrcyk6CisgICAgICAgIChKU0M6OkhlYXA6OnJ1bkVuZFBoYXNlKToKKyAgICAg
ICAgKEpTQzo6SGVhcDo6d2lsbFN0YXJ0Q29sbGVjdGlvbik6CisgICAgICAgIChKU0M6OnNjYW5F
eHRlcm5hbFJlbWVtYmVyZWRTZXQpOgorICAgICAgICAoSlNDOjpzZXJ2aWNlU2FtcGxpbmdQcm9m
aWxlcik6CisgICAgICAgIChKU0M6OkhlYXA6OmFkZENvcmVDb25zdHJhaW50cyk6CisgICAgICAg
IChKU0M6OkhlYXA6OnZlcmlmeUdDKToKKyAgICAgICAgKEpTQzo6SGVhcDo6aXNBbmFseXppbmdI
ZWFwIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBoZWFwL0hlYXAuaDoKKyAgICAgICAgKEpT
Qzo6SGVhcDo6aXNNYXJraW5nRm9yR0NWZXJpZmllciBjb25zdCk6CisgICAgICAgIChKU0M6Okhl
YXA6Om51bU9wYXF1ZVJvb3RzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBoZWFwL0hlYXBJ
bmxpbmVzLmg6CisgICAgICAgIChKU0M6OkhlYXA6OmlzTWFya2VkKToKKyAgICAgICAgKiBoZWFw
L0hlYXBQcm9maWxlci5jcHA6CisgICAgICAgIChKU0M6OkhlYXBQcm9maWxlcjo6c2V0QWN0aXZl
SGVhcEFuYWx5emVyKToKKyAgICAgICAgKiBoZWFwL0lzb0NlbGxTZXQuaDoKKyAgICAgICAgKiBo
ZWFwL0lzb0NlbGxTZXRJbmxpbmVzLmg6CisgICAgICAgIChKU0M6Oklzb0NlbGxTZXQ6OmZvckVh
Y2hNYXJrZWRDZWxsSW5QYXJhbGxlbCk6CisgICAgICAgICogaGVhcC9KSVRTdHViUm91dGluZVNl
dC5jcHA6CisgICAgICAgIChKU0M6OkpJVFN0dWJSb3V0aW5lU2V0Ojp0cmFjZU1hcmtlZFN0dWJS
b3V0aW5lcyk6CisgICAgICAgICogaGVhcC9KSVRTdHViUm91dGluZVNldC5oOgorICAgICAgICAo
SlNDOjpKSVRTdHViUm91dGluZVNldDo6dHJhY2VNYXJrZWRTdHViUm91dGluZXMpOgorICAgICAg
ICAqIGhlYXAvTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQuY3BwOgorICAgICAgICAoSlNDOjpN
YXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludDo6cHJlcGFyZVRvRXhlY3V0ZUltcGwpOgorICAgICAg
ICAoSlNDOjpNYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludDo6ZXhlY3V0ZUltcGxJbXBsKToKKyAg
ICAgICAgKEpTQzo6TWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQ6OmV4ZWN1dGVJbXBsKToKKyAg
ICAgICAgKiBoZWFwL01hcmtTdGFja01lcmdpbmdDb25zdHJhaW50Lmg6CisgICAgICAgICogaGVh
cC9NYXJrZWRCbG9jay5oOgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6SGFuZGxlOjphdG9t
QXQgY29uc3QpOgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6c2V0VmVyaWZpZXJNZW1vKToK
KyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6OnZlcmlmaWVyTWVtbyBjb25zdCk6CisgICAgICAg
ICogaGVhcC9NYXJrZWRTcGFjZS5jcHA6CisgICAgICAgIChKU0M6Ok1hcmtlZFNwYWNlOjp2aXNp
dFdlYWtTZXRzKToKKyAgICAgICAgKiBoZWFwL01hcmtlZFNwYWNlLmg6CisgICAgICAgICogaGVh
cC9NYXJraW5nQ29uc3RyYWludC5jcHA6CisgICAgICAgIChKU0M6Ok1hcmtpbmdDb25zdHJhaW50
OjpleGVjdXRlKToKKyAgICAgICAgKEpTQzo6TWFya2luZ0NvbnN0cmFpbnQ6OmV4ZWN1dGVTeW5j
aHJvbm91c2x5KToKKyAgICAgICAgKEpTQzo6TWFya2luZ0NvbnN0cmFpbnQ6OnByZXBhcmVUb0V4
ZWN1dGUpOgorICAgICAgICAoSlNDOjpNYXJraW5nQ29uc3RyYWludDo6ZG9QYXJhbGxlbFdvcmsp
OgorICAgICAgICAoSlNDOjpNYXJraW5nQ29uc3RyYWludDo6cHJlcGFyZVRvRXhlY3V0ZUltcGwp
OgorICAgICAgICAqIGhlYXAvTWFya2luZ0NvbnN0cmFpbnQuaDoKKyAgICAgICAgKiBoZWFwL01h
cmtpbmdDb25zdHJhaW50RXhlY3V0b3JQYWlyLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpNYXJr
aW5nQ29uc3RyYWludEV4ZWN1dG9yUGFpcjo6TWFya2luZ0NvbnN0cmFpbnRFeGVjdXRvclBhaXIp
OgorICAgICAgICAoSlNDOjpNYXJraW5nQ29uc3RyYWludEV4ZWN1dG9yUGFpcjo6ZXhlY3V0ZSk6
CisgICAgICAgICogaGVhcC9NYXJraW5nQ29uc3RyYWludFNldC5jcHA6CisgICAgICAgIChKU0M6
Ok1hcmtpbmdDb25zdHJhaW50U2V0OjphZGQpOgorICAgICAgICAoSlNDOjpNYXJraW5nQ29uc3Ry
YWludFNldDo6ZXhlY3V0ZUFsbFN5bmNocm9ub3VzbHkpOgorICAgICAgICAoSlNDOjpNYXJraW5n
Q29uc3RyYWludFNldDo6ZXhlY3V0ZUFsbCk6IERlbGV0ZWQuCisgICAgICAgICogaGVhcC9NYXJr
aW5nQ29uc3RyYWludFNldC5oOgorICAgICAgICAoSlNDOjpNYXJraW5nQ29uc3RyYWludFNldDo6
YWRkKToKKyAgICAgICAgKiBoZWFwL01hcmtpbmdDb25zdHJhaW50U29sdmVyLmNwcDoKKyAgICAg
ICAgKiBoZWFwL01hcmtpbmdDb25zdHJhaW50U29sdmVyLmg6CisgICAgICAgICogaGVhcC9TaW1w
bGVNYXJraW5nQ29uc3RyYWludC5jcHA6CisgICAgICAgIChKU0M6OlNpbXBsZU1hcmtpbmdDb25z
dHJhaW50OjpTaW1wbGVNYXJraW5nQ29uc3RyYWludCk6CisgICAgICAgIChKU0M6OlNpbXBsZU1h
cmtpbmdDb25zdHJhaW50OjpleGVjdXRlSW1wbEltcGwpOgorICAgICAgICAoSlNDOjpTaW1wbGVN
YXJraW5nQ29uc3RyYWludDo6ZXhlY3V0ZUltcGwpOgorICAgICAgICAqIGhlYXAvU2ltcGxlTWFy
a2luZ0NvbnN0cmFpbnQuaDoKKyAgICAgICAgKiBoZWFwL1Nsb3RWaXNpdG9yLmNwcDoKKyAgICAg
ICAgKEpTQzo6U2xvdFZpc2l0b3I6OlNsb3RWaXNpdG9yKToKKyAgICAgICAgKEpTQzo6U2xvdFZp
c2l0b3I6OnJlc2V0KToKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OmFwcGVuZFNsb3cpOgor
ICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6YWRkUGFyYWxsZWxDb25zdHJhaW50VGFzayk6Cisg
ICAgICAgICogaGVhcC9TbG90VmlzaXRvci5oOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6
Y29sbGVjdG9yTWFya1N0YWNrKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6
Om11dGF0b3JNYXJrU3RhY2spOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6
Y29sbGVjdG9yTWFya1N0YWNrIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U2xvdFZp
c2l0b3I6Om11dGF0b3JNYXJrU3RhY2sgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpT
bG90VmlzaXRvcjo6aXNFbXB0eSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9y
Ojppc0ZpcnN0VmlzaXQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpTbG90VmlzaXRv
cjo6Ynl0ZXNWaXNpdGVkIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0
b3I6OnZpc2l0Q291bnQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpTbG90VmlzaXRv
cjo6YWRkVG9WaXNpdENvdW50KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6
OmlzQW5hbHl6aW5nSGVhcCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlNsb3RWaXNp
dG9yOjpoZWFwQW5hbHl6ZXIgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpTbG90Vmlz
aXRvcjo6cm9vdE1hcmtSZWFzb24gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpTbG90
VmlzaXRvcjo6c2V0Um9vdE1hcmtSZWFzb24pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpTbG90
VmlzaXRvcjo6bWFya2luZ1ZlcnNpb24gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpT
bG90VmlzaXRvcjo6bXV0YXRvcklzU3RvcHBlZCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6OlNsb3RWaXNpdG9yOjpyaWdodFRvUnVuKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U2xv
dFZpc2l0b3I6OmRpZFJhY2UpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6
c2V0SWdub3JlTmV3T3BhcXVlUm9vdHMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpTbG90Vmlz
aXRvcjo6Y29kZU5hbWUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpTZXRSb290TWFy
a1JlYXNvblNjb3BlOjpTZXRSb290TWFya1JlYXNvblNjb3BlKTogRGVsZXRlZC4KKyAgICAgICAg
KEpTQzo6U2V0Um9vdE1hcmtSZWFzb25TY29wZTo6flNldFJvb3RNYXJrUmVhc29uU2NvcGUpOiBE
ZWxldGVkLgorICAgICAgICAqIGhlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmg6CisgICAgICAgIChK
U0M6OlNsb3RWaXNpdG9yOjppc01hcmtlZCBjb25zdCk6CisgICAgICAgIChKU0M6OlNsb3RWaXNp
dG9yOjphZGRPcGFxdWVSb290KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6
OmNvbnRhaW5zT3BhcXVlUm9vdCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlNsb3RW
aXNpdG9yOjpoZWFwIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6
OnZtKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OnZtIGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKiBoZWFwL1Nsb3RWaXNpdG9yTWFjcm9zLmg6IEFkZGVkLgorICAgICAg
ICAqIGhlYXAvU3Vic3BhY2UuaDoKKyAgICAgICAgKiBoZWFwL1N1YnNwYWNlSW5saW5lcy5oOgor
ICAgICAgICAoSlNDOjpTdWJzcGFjZTo6Zm9yRWFjaE1hcmtlZENlbGxJblBhcmFsbGVsKToKKyAg
ICAgICAgKiBoZWFwL1ZlcmlmaWVyU2xvdFZpc2l0b3IuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpT
Qzo6TWFya2VyRGF0YTo6TWFya2VyRGF0YSk6CisgICAgICAgIChKU0M6OlZlcmlmaWVyU2xvdFZp
c2l0b3I6Ok1hcmtlZEJsb2NrRGF0YTo6TWFya2VkQmxvY2tEYXRhKToKKyAgICAgICAgKEpTQzo6
VmVyaWZpZXJTbG90VmlzaXRvcjo6TWFya2VkQmxvY2tEYXRhOjphZGRNYXJrZXJEYXRhKToKKyAg
ICAgICAgKEpTQzo6VmVyaWZpZXJTbG90VmlzaXRvcjo6TWFya2VkQmxvY2tEYXRhOjptYXJrZXJE
YXRhIGNvbnN0KToKKyAgICAgICAgKEpTQzo6VmVyaWZpZXJTbG90VmlzaXRvcjo6UHJlY2lzZUFs
bG9jYXRpb25EYXRhOjpQcmVjaXNlQWxsb2NhdGlvbkRhdGEpOgorICAgICAgICAoSlNDOjpWZXJp
ZmllclNsb3RWaXNpdG9yOjpQcmVjaXNlQWxsb2NhdGlvbkRhdGE6Om1hcmtlckRhdGEgY29uc3Qp
OgorICAgICAgICAoSlNDOjpWZXJpZmllclNsb3RWaXNpdG9yOjpQcmVjaXNlQWxsb2NhdGlvbkRh
dGE6OmFkZE1hcmtlckRhdGEpOgorICAgICAgICAoSlNDOjpWZXJpZmllclNsb3RWaXNpdG9yOjpW
ZXJpZmllclNsb3RWaXNpdG9yKToKKyAgICAgICAgKEpTQzo6VmVyaWZpZXJTbG90VmlzaXRvcjo6
flZlcmlmaWVyU2xvdFZpc2l0b3IpOgorICAgICAgICAoSlNDOjpWZXJpZmllclNsb3RWaXNpdG9y
OjphZGRQYXJhbGxlbENvbnN0cmFpbnRUYXNrKToKKyAgICAgICAgKEpTQzo6VmVyaWZpZXJTbG90
VmlzaXRvcjo6ZXhlY3V0ZUNvbnN0cmFpbnRUYXNrcyk6CisgICAgICAgIChKU0M6OlZlcmlmaWVy
U2xvdFZpc2l0b3I6OmFwcGVuZCk6CisgICAgICAgIChKU0M6OlZlcmlmaWVyU2xvdFZpc2l0b3I6
OmFwcGVuZFRvTWFya1N0YWNrKToKKyAgICAgICAgKEpTQzo6VmVyaWZpZXJTbG90VmlzaXRvcjo6
YXBwZW5kVW5iYXJyaWVyZWQpOgorICAgICAgICAoSlNDOjpWZXJpZmllclNsb3RWaXNpdG9yOjph
cHBlbmRIaWRkZW5VbmJhcnJpZXJlZCk6CisgICAgICAgIChKU0M6OlZlcmlmaWVyU2xvdFZpc2l0
b3I6OmRyYWluKToKKyAgICAgICAgKEpTQzo6VmVyaWZpZXJTbG90VmlzaXRvcjo6ZHVtcE1hcmtl
ckRhdGEpOgorICAgICAgICAoSlNDOjpWZXJpZmllclNsb3RWaXNpdG9yOjppc0ZpcnN0VmlzaXQg
Y29uc3QpOgorICAgICAgICAoSlNDOjpWZXJpZmllclNsb3RWaXNpdG9yOjppc01hcmtlZCBjb25z
dCk6CisgICAgICAgIChKU0M6OlZlcmlmaWVyU2xvdFZpc2l0b3I6Om1hcmtBdXhpbGlhcnkpOgor
ICAgICAgICAoSlNDOjpWZXJpZmllclNsb3RWaXNpdG9yOjptdXRhdG9ySXNTdG9wcGVkIGNvbnN0
KToKKyAgICAgICAgKEpTQzo6VmVyaWZpZXJTbG90VmlzaXRvcjo6dGVzdEFuZFNldE1hcmtlZCk6
CisgICAgICAgIChKU0M6OlZlcmlmaWVyU2xvdFZpc2l0b3I6OnNldE1hcmtlZEFuZEFwcGVuZFRv
TWFya1N0YWNrKToKKyAgICAgICAgKEpTQzo6VmVyaWZpZXJTbG90VmlzaXRvcjo6dmlzaXRBc0Nv
bnN0cmFpbnQpOgorICAgICAgICAoSlNDOjpWZXJpZmllclNsb3RWaXNpdG9yOjp2aXNpdENoaWxk
cmVuKToKKyAgICAgICAgKiBoZWFwL1ZlcmlmaWVyU2xvdFZpc2l0b3IuaDogQWRkZWQuCisgICAg
ICAgIChKU0M6OlZlcmlmaWVyU2xvdFZpc2l0b3I6Ok1hcmtlZEJsb2NrRGF0YTo6YmxvY2sgY29u
c3QpOgorICAgICAgICAoSlNDOjpWZXJpZmllclNsb3RWaXNpdG9yOjpNYXJrZWRCbG9ja0RhdGE6
OmF0b21zIGNvbnN0KToKKyAgICAgICAgKEpTQzo6VmVyaWZpZXJTbG90VmlzaXRvcjo6TWFya2Vk
QmxvY2tEYXRhOjppc01hcmtlZCk6CisgICAgICAgIChKU0M6OlZlcmlmaWVyU2xvdFZpc2l0b3I6
Ok1hcmtlZEJsb2NrRGF0YTo6dGVzdEFuZFNldE1hcmtlZCk6CisgICAgICAgIChKU0M6OlZlcmlm
aWVyU2xvdFZpc2l0b3I6OlByZWNpc2VBbGxvY2F0aW9uRGF0YTo6YWxsb2NhdGlvbiBjb25zdCk6
CisgICAgICAgIChKU0M6OlZlcmlmaWVyU2xvdFZpc2l0b3I6OmFwcGVuZFNsb3cpOgorICAgICAg
ICAqIGhlYXAvVmVyaWZpZXJTbG90VmlzaXRvcklubGluZXMuaDogQWRkZWQuCisgICAgICAgIChK
U0M6OlZlcmlmaWVyU2xvdFZpc2l0b3I6OmZvckVhY2hMaXZlQ2VsbCk6CisgICAgICAgIChKU0M6
OlZlcmlmaWVyU2xvdFZpc2l0b3I6OmZvckVhY2hMaXZlUHJlY2lzZUFsbG9jYXRpb24pOgorICAg
ICAgICAoSlNDOjpWZXJpZmllclNsb3RWaXNpdG9yOjpmb3JFYWNoTGl2ZU1hcmtlZEJsb2NrQ2Vs
bCk6CisgICAgICAgICogaGVhcC9WaXNpdENvdW50ZXIuaDoKKyAgICAgICAgKEpTQzo6VmlzaXRD
b3VudGVyOjpWaXNpdENvdW50ZXIpOgorICAgICAgICAoSlNDOjpWaXNpdENvdW50ZXI6OnZpc2l0
b3IgY29uc3QpOgorICAgICAgICAqIGhlYXAvV2Vha0Jsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6
V2Vha0Jsb2NrOjpzcGVjaWFsaXplZFZpc2l0KToKKyAgICAgICAgKEpTQzo6V2Vha0Jsb2NrOjp2
aXNpdEltcGwpOgorICAgICAgICAoSlNDOjpXZWFrQmxvY2s6OnZpc2l0KToKKyAgICAgICAgKiBo
ZWFwL1dlYWtCbG9jay5oOgorICAgICAgICAqIGhlYXAvV2Vha0hhbmRsZU93bmVyLmNwcDoKKyAg
ICAgICAgKEpTQzo6V2Vha0hhbmRsZU93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyk6
CisgICAgICAgICogaGVhcC9XZWFrSGFuZGxlT3duZXIuaDoKKyAgICAgICAgKiBoZWFwL1dlYWtT
ZXQuY3BwOgorICAgICAgICAqIGhlYXAvV2Vha1NldC5oOgorICAgICAgICAoSlNDOjpXZWFrU2V0
Ojp2aXNpdCk6CisgICAgICAgICogaW50ZXJwcmV0ZXIvU2hhZG93Q2hpY2tlbi5jcHA6CisgICAg
ICAgIChKU0M6OlNoYWRvd0NoaWNrZW46OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAqIGludGVy
cHJldGVyL1NoYWRvd0NoaWNrZW4uaDoKKyAgICAgICAgKiBqaXQvR0NBd2FyZUpJVFN0dWJSb3V0
aW5lLmNwcDoKKyAgICAgICAgKEpTQzo6TWFya2luZ0dDQXdhcmVKSVRTdHViUm91dGluZTo6bWFy
a1JlcXVpcmVkT2JqZWN0c0ludGVybmFsSW1wbCk6CisgICAgICAgIChKU0M6Ok1hcmtpbmdHQ0F3
YXJlSklUU3R1YlJvdXRpbmU6Om1hcmtSZXF1aXJlZE9iamVjdHNJbnRlcm5hbCk6CisgICAgICAg
IChKU0M6OkdDQXdhcmVKSVRTdHViUm91dGluZTo6bWFya1JlcXVpcmVkT2JqZWN0c0ludGVybmFs
KTogRGVsZXRlZC4KKyAgICAgICAgKiBqaXQvR0NBd2FyZUpJVFN0dWJSb3V0aW5lLmg6CisgICAg
ICAgIChKU0M6OkdDQXdhcmVKSVRTdHViUm91dGluZTo6bWFya1JlcXVpcmVkT2JqZWN0cyk6Cisg
ICAgICAgIChKU0M6OkdDQXdhcmVKSVRTdHViUm91dGluZTo6bWFya1JlcXVpcmVkT2JqZWN0c0lu
dGVybmFsKToKKyAgICAgICAgKiBqaXQvSklUV29ya2xpc3QuY3BwOgorICAgICAgICAqIGppdC9Q
b2x5bW9ycGhpY0NhbGxTdHViUm91dGluZS5jcHA6CisgICAgICAgIChKU0M6OlBvbHltb3JwaGlj
Q2FsbFN0dWJSb3V0aW5lOjptYXJrUmVxdWlyZWRPYmplY3RzSW50ZXJuYWxJbXBsKToKKyAgICAg
ICAgKEpTQzo6UG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmU6Om1hcmtSZXF1aXJlZE9iamVjdHNJ
bnRlcm5hbCk6CisgICAgICAgICogaml0L1BvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lLmg6Cisg
ICAgICAgICogcnVudGltZS9BYnN0cmFjdE1vZHVsZVJlY29yZC5jcHA6CisgICAgICAgIChKU0M6
OkFic3RyYWN0TW9kdWxlUmVjb3JkOjp2aXNpdENoaWxkcmVuSW1wbCk6CisgICAgICAgIChKU0M6
OkFic3RyYWN0TW9kdWxlUmVjb3JkOjp2aXNpdENoaWxkcmVuKTogRGVsZXRlZC4KKyAgICAgICAg
KiBydW50aW1lL0Fic3RyYWN0TW9kdWxlUmVjb3JkLmg6CisgICAgICAgICogcnVudGltZS9BcmdM
aXN0LmNwcDoKKyAgICAgICAgKEpTQzo6TWFya2VkQXJndW1lbnRCdWZmZXI6Om1hcmtMaXN0cyk6
CisgICAgICAgICogcnVudGltZS9BcmdMaXN0Lmg6CisgICAgICAgICogcnVudGltZS9DYWNoZWFi
bGVJZGVudGlmaWVyLmg6CisgICAgICAgICogcnVudGltZS9DYWNoZWFibGVJZGVudGlmaWVySW5s
aW5lcy5oOgorICAgICAgICAoSlNDOjpDYWNoZWFibGVJZGVudGlmaWVyOjp2aXNpdEFnZ3JlZ2F0
ZSBjb25zdCk6CisgICAgICAgICogcnVudGltZS9DbGFzc0luZm8uaDoKKyAgICAgICAgKEpTQzo6
TWV0aG9kVGFibGU6OnZpc2l0Q2hpbGRyZW4gY29uc3QpOgorICAgICAgICAoSlNDOjpNZXRob2RU
YWJsZTo6dmlzaXRPdXRwdXRDb25zdHJhaW50cyBjb25zdCk6CisgICAgICAgICogcnVudGltZS9D
bG9uZWRBcmd1bWVudHMuY3BwOgorICAgICAgICAoSlNDOjpDbG9uZWRBcmd1bWVudHM6OnZpc2l0
Q2hpbGRyZW5JbXBsKToKKyAgICAgICAgKEpTQzo6Q2xvbmVkQXJndW1lbnRzOjp2aXNpdENoaWxk
cmVuKTogRGVsZXRlZC4KKyAgICAgICAgKiBydW50aW1lL0Nsb25lZEFyZ3VtZW50cy5oOgorICAg
ICAgICAqIHJ1bnRpbWUvRGlyZWN0QXJndW1lbnRzLmNwcDoKKyAgICAgICAgKEpTQzo6RGlyZWN0
QXJndW1lbnRzOjp2aXNpdENoaWxkcmVuSW1wbCk6CisgICAgICAgIChKU0M6OkRpcmVjdEFyZ3Vt
ZW50czo6dmlzaXRDaGlsZHJlbik6IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9EaXJlY3RB
cmd1bWVudHMuaDoKKyAgICAgICAgKiBydW50aW1lL0V2YWxFeGVjdXRhYmxlLmNwcDoKKyAgICAg
ICAgKEpTQzo6RXZhbEV4ZWN1dGFibGU6OnZpc2l0Q2hpbGRyZW5JbXBsKToKKyAgICAgICAgKEpT
Qzo6RXZhbEV4ZWN1dGFibGU6OnZpc2l0Q2hpbGRyZW4pOiBEZWxldGVkLgorICAgICAgICAqIHJ1
bnRpbWUvRXZhbEV4ZWN1dGFibGUuaDoKKyAgICAgICAgKiBydW50aW1lL0V4Y2VwdGlvbi5jcHA6
CisgICAgICAgIChKU0M6OkV4Y2VwdGlvbjo6dmlzaXRDaGlsZHJlbkltcGwpOgorICAgICAgICAo
SlNDOjpFeGNlcHRpb246OnZpc2l0Q2hpbGRyZW4pOiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRp
bWUvRXhjZXB0aW9uLmg6CisgICAgICAgICogcnVudGltZS9GdW5jdGlvbkV4ZWN1dGFibGUuY3Bw
OgorICAgICAgICAoSlNDOjpGdW5jdGlvbkV4ZWN1dGFibGU6OnZpc2l0Q2hpbGRyZW5JbXBsKToK
KyAgICAgICAgKEpTQzo6RnVuY3Rpb25FeGVjdXRhYmxlOjp2aXNpdENoaWxkcmVuKTogRGVsZXRl
ZC4KKyAgICAgICAgKiBydW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZS5oOgorICAgICAgICAqIHJ1
bnRpbWUvRnVuY3Rpb25SYXJlRGF0YS5jcHA6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uUmFyZURh
dGE6OnZpc2l0Q2hpbGRyZW5JbXBsKToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25SYXJlRGF0YTo6
dmlzaXRDaGlsZHJlbik6IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9GdW5jdGlvblJhcmVE
YXRhLmg6CisgICAgICAgICogcnVudGltZS9HZW5lcmljQXJndW1lbnRzLmg6CisgICAgICAgICog
cnVudGltZS9HZW5lcmljQXJndW1lbnRzSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpHZW5lcmlj
QXJndW1lbnRzPFR5cGU+Ojp2aXNpdENoaWxkcmVuSW1wbCk6CisgICAgICAgIChKU0M6OkdlbmVy
aWNBcmd1bWVudHM8VHlwZT46OnZpc2l0Q2hpbGRyZW4pOiBEZWxldGVkLgorICAgICAgICAqIHJ1
bnRpbWUvR2V0dGVyU2V0dGVyLmNwcDoKKyAgICAgICAgKEpTQzo6R2V0dGVyU2V0dGVyOjp2aXNp
dENoaWxkcmVuSW1wbCk6CisgICAgICAgIChKU0M6OkdldHRlclNldHRlcjo6dmlzaXRDaGlsZHJl
bik6IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9HZXR0ZXJTZXR0ZXIuaDoKKyAgICAgICAg
KiBydW50aW1lL0hhc2hNYXBJbXBsLmNwcDoKKyAgICAgICAgKEpTQzo6SGFzaE1hcEJ1Y2tldDxE
YXRhPjo6dmlzaXRDaGlsZHJlbkltcGwpOgorICAgICAgICAoSlNDOjpIYXNoTWFwSW1wbDxIYXNo
TWFwQnVja2V0Pjo6dmlzaXRDaGlsZHJlbkltcGwpOgorICAgICAgICAoSlNDOjpIYXNoTWFwQnVj
a2V0PERhdGE+Ojp2aXNpdENoaWxkcmVuKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SGFzaE1h
cEltcGw8SGFzaE1hcEJ1Y2tldD46OnZpc2l0Q2hpbGRyZW4pOiBEZWxldGVkLgorICAgICAgICAq
IHJ1bnRpbWUvSGFzaE1hcEltcGwuaDoKKyAgICAgICAgKiBydW50aW1lL0ludGVybmFsRnVuY3Rp
b24uY3BwOgorICAgICAgICAoSlNDOjpJbnRlcm5hbEZ1bmN0aW9uOjp2aXNpdENoaWxkcmVuSW1w
bCk6CisgICAgICAgIChKU0M6OkludGVybmFsRnVuY3Rpb246OnZpc2l0Q2hpbGRyZW4pOiBEZWxl
dGVkLgorICAgICAgICAqIHJ1bnRpbWUvSW50ZXJuYWxGdW5jdGlvbi5oOgorICAgICAgICAqIHJ1
bnRpbWUvSW50bENvbGxhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6SW50bENvbGxhdG9yOjp2aXNp
dENoaWxkcmVuSW1wbCk6CisgICAgICAgIChKU0M6OkludGxDb2xsYXRvcjo6dmlzaXRDaGlsZHJl
bik6IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9JbnRsQ29sbGF0b3IuaDoKKyAgICAgICAg
KiBydW50aW1lL0ludGxEYXRlVGltZUZvcm1hdC5jcHA6CisgICAgICAgIChKU0M6OkludGxEYXRl
VGltZUZvcm1hdDo6dmlzaXRDaGlsZHJlbkltcGwpOgorICAgICAgICAoSlNDOjpJbnRsRGF0ZVRp
bWVGb3JtYXQ6OnZpc2l0Q2hpbGRyZW4pOiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvSW50
bERhdGVUaW1lRm9ybWF0Lmg6CisgICAgICAgICogcnVudGltZS9JbnRsTG9jYWxlLmNwcDoKKyAg
ICAgICAgKEpTQzo6SW50bExvY2FsZTo6dmlzaXRDaGlsZHJlbkltcGwpOgorICAgICAgICAoSlND
OjpJbnRsTG9jYWxlOjp2aXNpdENoaWxkcmVuKTogRGVsZXRlZC4KKyAgICAgICAgKiBydW50aW1l
L0ludGxMb2NhbGUuaDoKKyAgICAgICAgKiBydW50aW1lL0ludGxOdW1iZXJGb3JtYXQuY3BwOgor
ICAgICAgICAoSlNDOjpJbnRsTnVtYmVyRm9ybWF0Ojp2aXNpdENoaWxkcmVuSW1wbCk6CisgICAg
ICAgIChKU0M6OkludGxOdW1iZXJGb3JtYXQ6OnZpc2l0Q2hpbGRyZW4pOiBEZWxldGVkLgorICAg
ICAgICAqIHJ1bnRpbWUvSW50bE51bWJlckZvcm1hdC5oOgorICAgICAgICAqIHJ1bnRpbWUvSW50
bFBsdXJhbFJ1bGVzLmNwcDoKKyAgICAgICAgKEpTQzo6SW50bFBsdXJhbFJ1bGVzOjp2aXNpdENo
aWxkcmVuSW1wbCk6CisgICAgICAgIChKU0M6OkludGxQbHVyYWxSdWxlczo6dmlzaXRDaGlsZHJl
bik6IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9JbnRsUGx1cmFsUnVsZXMuaDoKKyAgICAg
ICAgKiBydW50aW1lL0ludGxSZWxhdGl2ZVRpbWVGb3JtYXQuY3BwOgorICAgICAgICAoSlNDOjpJ
bnRsUmVsYXRpdmVUaW1lRm9ybWF0Ojp2aXNpdENoaWxkcmVuSW1wbCk6CisgICAgICAgIChKU0M6
OkludGxSZWxhdGl2ZVRpbWVGb3JtYXQ6OnZpc2l0Q2hpbGRyZW4pOiBEZWxldGVkLgorICAgICAg
ICAqIHJ1bnRpbWUvSW50bFJlbGF0aXZlVGltZUZvcm1hdC5oOgorICAgICAgICAqIHJ1bnRpbWUv
SW50bFNlZ21lbnRJdGVyYXRvci5jcHA6CisgICAgICAgIChKU0M6OkludGxTZWdtZW50SXRlcmF0
b3I6OnZpc2l0Q2hpbGRyZW5JbXBsKToKKyAgICAgICAgKEpTQzo6SW50bFNlZ21lbnRJdGVyYXRv
cjo6dmlzaXRDaGlsZHJlbik6IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9JbnRsU2VnbWVu
dEl0ZXJhdG9yLmg6CisgICAgICAgICogcnVudGltZS9JbnRsU2VnbWVudHMuY3BwOgorICAgICAg
ICAoSlNDOjpJbnRsU2VnbWVudHM6OnZpc2l0Q2hpbGRyZW5JbXBsKToKKyAgICAgICAgKEpTQzo6
SW50bFNlZ21lbnRzOjp2aXNpdENoaWxkcmVuKTogRGVsZXRlZC4KKyAgICAgICAgKiBydW50aW1l
L0ludGxTZWdtZW50cy5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuY3Bw
OgorICAgICAgICAoSlNDOjpKU0FycmF5QnVmZmVyVmlldzo6dmlzaXRDaGlsZHJlbkltcGwpOgor
ICAgICAgICAoSlNDOjpKU0FycmF5QnVmZmVyVmlldzo6dmlzaXRDaGlsZHJlbik6IERlbGV0ZWQu
CisgICAgICAgICogcnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5oOgorICAgICAgICAqIHJ1bnRp
bWUvSlNBcnJheUl0ZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6SlNBcnJheUl0ZXJhdG9yOjp2
aXNpdENoaWxkcmVuSW1wbCk6CisgICAgICAgIChKU0M6OkpTQXJyYXlJdGVyYXRvcjo6dmlzaXRD
aGlsZHJlbik6IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9KU0FycmF5SXRlcmF0b3IuaDoK
KyAgICAgICAgKiBydW50aW1lL0pTQXN5bmNHZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpK
U0FzeW5jR2VuZXJhdG9yOjp2aXNpdENoaWxkcmVuSW1wbCk6CisgICAgICAgIChKU0M6OkpTQXN5
bmNHZW5lcmF0b3I6OnZpc2l0Q2hpbGRyZW4pOiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUv
SlNBc3luY0dlbmVyYXRvci5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNCaWdJbnQuY3BwOgorICAg
ICAgICAoSlNDOjpKU0JpZ0ludDo6dmlzaXRDaGlsZHJlbkltcGwpOgorICAgICAgICAoSlNDOjpK
U0JpZ0ludDo6dmlzaXRDaGlsZHJlbik6IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9KU0Jp
Z0ludC5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNCb3VuZEZ1bmN0aW9uLmNwcDoKKyAgICAgICAg
KEpTQzo6SlNCb3VuZEZ1bmN0aW9uOjp2aXNpdENoaWxkcmVuSW1wbCk6CisgICAgICAgIChKU0M6
OkpTQm91bmRGdW5jdGlvbjo6dmlzaXRDaGlsZHJlbik6IERlbGV0ZWQuCisgICAgICAgICogcnVu
dGltZS9KU0JvdW5kRnVuY3Rpb24uaDoKKyAgICAgICAgKiBydW50aW1lL0pTQ2FsbGVlLmNwcDoK
KyAgICAgICAgKEpTQzo6SlNDYWxsZWU6OnZpc2l0Q2hpbGRyZW5JbXBsKToKKyAgICAgICAgKEpT
Qzo6SlNDYWxsZWU6OnZpc2l0Q2hpbGRyZW4pOiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUv
SlNDYWxsZWUuaDoKKyAgICAgICAgKiBydW50aW1lL0pTQ2VsbC5oOgorICAgICAgICAqIHJ1bnRp
bWUvSlNDZWxsSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpKU0NlbGw6OnZpc2l0Q2hpbGRyZW5J
bXBsKToKKyAgICAgICAgKEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzSW1wbCk6
CisgICAgICAgIChKU0M6OkpTQ2VsbDo6dmlzaXRDaGlsZHJlbik6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50cyk6IERlbGV0ZWQuCisgICAgICAg
ICogcnVudGltZS9KU0ZpbmFsaXphdGlvblJlZ2lzdHJ5LmNwcDoKKyAgICAgICAgKEpTQzo6SlNG
aW5hbGl6YXRpb25SZWdpc3RyeTo6dmlzaXRDaGlsZHJlbkltcGwpOgorICAgICAgICAoSlNDOjpK
U0ZpbmFsaXphdGlvblJlZ2lzdHJ5Ojp2aXNpdENoaWxkcmVuKTogRGVsZXRlZC4KKyAgICAgICAg
KiBydW50aW1lL0pTRmluYWxpemF0aW9uUmVnaXN0cnkuaDoKKyAgICAgICAgKiBydW50aW1lL0pT
RnVuY3Rpb24uY3BwOgorICAgICAgICAoSlNDOjpKU0Z1bmN0aW9uOjp2aXNpdENoaWxkcmVuSW1w
bCk6CisgICAgICAgIChKU0M6OkpTRnVuY3Rpb246OnZpc2l0Q2hpbGRyZW4pOiBEZWxldGVkLgor
ICAgICAgICAqIHJ1bnRpbWUvSlNGdW5jdGlvbi5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNHZW5l
cmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpKU0dlbmVyYXRvcjo6dmlzaXRDaGlsZHJlbkltcGwp
OgorICAgICAgICAoSlNDOjpKU0dlbmVyYXRvcjo6dmlzaXRDaGlsZHJlbik6IERlbGV0ZWQuCisg
ICAgICAgICogcnVudGltZS9KU0dlbmVyYXRvci5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNHZW5l
cmljVHlwZWRBcnJheVZpZXcuaDoKKyAgICAgICAgKiBydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJy
YXlWaWV3SW5saW5lcy5oOgorICAgICAgICAoSlNDOjpKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxB
ZGFwdG9yPjo6dmlzaXRDaGlsZHJlbkltcGwpOgorICAgICAgICAoSlNDOjpKU0dlbmVyaWNUeXBl
ZEFycmF5VmlldzxBZGFwdG9yPjo6dmlzaXRDaGlsZHJlbik6IERlbGV0ZWQuCisgICAgICAgICog
cnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHA6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0
Ojp2aXNpdENoaWxkcmVuSW1wbCk6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0Ojp2aXNp
dENoaWxkcmVuKTogRGVsZXRlZC4KKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsT2JqZWN0Lmg6
CisgICAgICAgICogcnVudGltZS9KU0ltbXV0YWJsZUJ1dHRlcmZseS5jcHA6CisgICAgICAgIChK
U0M6OkpTSW1tdXRhYmxlQnV0dGVyZmx5Ojp2aXNpdENoaWxkcmVuSW1wbCk6CisgICAgICAgIChK
U0M6OkpTSW1tdXRhYmxlQnV0dGVyZmx5Ojp2aXNpdENoaWxkcmVuKTogRGVsZXRlZC4KKyAgICAg
ICAgKiBydW50aW1lL0pTSW1tdXRhYmxlQnV0dGVyZmx5Lmg6CisgICAgICAgICogcnVudGltZS9K
U0ludGVybmFsRmllbGRPYmplY3RJbXBsLmg6CisgICAgICAgICogcnVudGltZS9KU0ludGVybmFs
RmllbGRPYmplY3RJbXBsSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpKU0ludGVybmFsRmllbGRP
YmplY3RJbXBsPHBhc3NlZE51bWJlck9mSW50ZXJuYWxGaWVsZHM+Ojp2aXNpdENoaWxkcmVuSW1w
bCk6CisgICAgICAgIChKU0M6OkpTSW50ZXJuYWxGaWVsZE9iamVjdEltcGw8cGFzc2VkTnVtYmVy
T2ZJbnRlcm5hbEZpZWxkcz46OnZpc2l0Q2hpbGRyZW4pOiBEZWxldGVkLgorICAgICAgICAqIHJ1
bnRpbWUvSlNMZXhpY2FsRW52aXJvbm1lbnQuY3BwOgorICAgICAgICAoSlNDOjpKU0xleGljYWxF
bnZpcm9ubWVudDo6dmlzaXRDaGlsZHJlbkltcGwpOgorICAgICAgICAoSlNDOjpKU0xleGljYWxF
bnZpcm9ubWVudDo6dmlzaXRDaGlsZHJlbik6IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9K
U0xleGljYWxFbnZpcm9ubWVudC5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNNYXBJdGVyYXRvci5j
cHA6CisgICAgICAgIChKU0M6OkpTTWFwSXRlcmF0b3I6OnZpc2l0Q2hpbGRyZW5JbXBsKToKKyAg
ICAgICAgKEpTQzo6SlNNYXBJdGVyYXRvcjo6dmlzaXRDaGlsZHJlbik6IERlbGV0ZWQuCisgICAg
ICAgICogcnVudGltZS9KU01hcEl0ZXJhdG9yLmg6CisgICAgICAgICogcnVudGltZS9KU01vZHVs
ZUVudmlyb25tZW50LmNwcDoKKyAgICAgICAgKEpTQzo6SlNNb2R1bGVFbnZpcm9ubWVudDo6dmlz
aXRDaGlsZHJlbkltcGwpOgorICAgICAgICAoSlNDOjpKU01vZHVsZUVudmlyb25tZW50Ojp2aXNp
dENoaWxkcmVuKTogRGVsZXRlZC4KKyAgICAgICAgKiBydW50aW1lL0pTTW9kdWxlRW52aXJvbm1l
bnQuaDoKKyAgICAgICAgKiBydW50aW1lL0pTTW9kdWxlTmFtZXNwYWNlT2JqZWN0LmNwcDoKKyAg
ICAgICAgKEpTQzo6SlNNb2R1bGVOYW1lc3BhY2VPYmplY3Q6OnZpc2l0Q2hpbGRyZW5JbXBsKToK
KyAgICAgICAgKEpTQzo6SlNNb2R1bGVOYW1lc3BhY2VPYmplY3Q6OnZpc2l0Q2hpbGRyZW4pOiBE
ZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QuaDoKKyAg
ICAgICAgKiBydW50aW1lL0pTTW9kdWxlUmVjb3JkLmNwcDoKKyAgICAgICAgKEpTQzo6SlNNb2R1
bGVSZWNvcmQ6OnZpc2l0Q2hpbGRyZW5JbXBsKToKKyAgICAgICAgKEpTQzo6SlNNb2R1bGVSZWNv
cmQ6OnZpc2l0Q2hpbGRyZW4pOiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvSlNNb2R1bGVS
ZWNvcmQuaDoKKyAgICAgICAgKiBydW50aW1lL0pTTmF0aXZlU3RkRnVuY3Rpb24uY3BwOgorICAg
ICAgICAoSlNDOjpKU05hdGl2ZVN0ZEZ1bmN0aW9uOjp2aXNpdENoaWxkcmVuSW1wbCk6CisgICAg
ICAgIChKU0M6OkpTTmF0aXZlU3RkRnVuY3Rpb246OnZpc2l0Q2hpbGRyZW4pOiBEZWxldGVkLgor
ICAgICAgICAqIHJ1bnRpbWUvSlNOYXRpdmVTdGRGdW5jdGlvbi5oOgorICAgICAgICAqIHJ1bnRp
bWUvSlNPYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6bWFya0F1eGlsaWFyeUFu
ZFZpc2l0T3V0T2ZMaW5lUHJvcGVydGllcyk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojp2aXNp
dEJ1dHRlcmZseSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojp2aXNpdEJ1dHRlcmZseUltcGwp
OgorICAgICAgICAoSlNDOjpKU09iamVjdDo6dmlzaXRDaGlsZHJlbkltcGwpOgorICAgICAgICAo
SlNDOjpKU0ZpbmFsT2JqZWN0Ojp2aXNpdENoaWxkcmVuSW1wbCk6CisgICAgICAgIChKU0M6OkpT
T2JqZWN0Ojp2aXNpdENoaWxkcmVuKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SlNGaW5hbE9i
amVjdDo6dmlzaXRDaGlsZHJlbik6IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9KU09iamVj
dC5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNQcm9taXNlLmNwcDoKKyAgICAgICAgKEpTQzo6SlNQ
cm9taXNlOjp2aXNpdENoaWxkcmVuSW1wbCk6CisgICAgICAgIChKU0M6OkpTUHJvbWlzZTo6dmlz
aXRDaGlsZHJlbik6IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9KU1Byb21pc2UuaDoKKyAg
ICAgICAgKiBydW50aW1lL0pTUHJvcGVydHlOYW1lRW51bWVyYXRvci5jcHA6CisgICAgICAgIChK
U0M6OkpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6dmlzaXRDaGlsZHJlbkltcGwpOgorICAgICAg
ICAoSlNDOjpKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OnZpc2l0Q2hpbGRyZW4pOiBEZWxldGVk
LgorICAgICAgICAqIHJ1bnRpbWUvSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmg6CisgICAgICAg
ICogcnVudGltZS9KU1Byb3h5LmNwcDoKKyAgICAgICAgKEpTQzo6SlNQcm94eTo6dmlzaXRDaGls
ZHJlbkltcGwpOgorICAgICAgICAoSlNDOjpKU1Byb3h5Ojp2aXNpdENoaWxkcmVuKTogRGVsZXRl
ZC4KKyAgICAgICAgKiBydW50aW1lL0pTUHJveHkuaDoKKyAgICAgICAgKiBydW50aW1lL0pTU2Nv
cGUuY3BwOgorICAgICAgICAoSlNDOjpKU1Njb3BlOjp2aXNpdENoaWxkcmVuSW1wbCk6CisgICAg
ICAgIChKU0M6OkpTU2NvcGU6OnZpc2l0Q2hpbGRyZW4pOiBEZWxldGVkLgorICAgICAgICAqIHJ1
bnRpbWUvSlNTY29wZS5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9i
amVjdC5jcHA6CisgICAgICAgIChKU0M6OkpTU2VnbWVudGVkVmFyaWFibGVPYmplY3Q6OnZpc2l0
Q2hpbGRyZW5JbXBsKToKKyAgICAgICAgKEpTQzo6SlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdDo6
dmlzaXRDaGlsZHJlbik6IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9KU1NlZ21lbnRlZFZh
cmlhYmxlT2JqZWN0Lmg6CisgICAgICAgICogcnVudGltZS9KU1NldEl0ZXJhdG9yLmNwcDoKKyAg
ICAgICAgKEpTQzo6SlNTZXRJdGVyYXRvcjo6dmlzaXRDaGlsZHJlbkltcGwpOgorICAgICAgICAo
SlNDOjpKU1NldEl0ZXJhdG9yOjp2aXNpdENoaWxkcmVuKTogRGVsZXRlZC4KKyAgICAgICAgKiBy
dW50aW1lL0pTU2V0SXRlcmF0b3IuaDoKKyAgICAgICAgKiBydW50aW1lL0pTU3RyaW5nLmNwcDoK
KyAgICAgICAgKEpTQzo6SlNTdHJpbmc6OnZpc2l0Q2hpbGRyZW5JbXBsKToKKyAgICAgICAgKEpT
Qzo6SlNTdHJpbmc6OnZpc2l0Q2hpbGRyZW4pOiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUv
SlNTdHJpbmcuaDoKKyAgICAgICAgKiBydW50aW1lL0pTU3RyaW5nSXRlcmF0b3IuY3BwOgorICAg
ICAgICAoSlNDOjpKU1N0cmluZ0l0ZXJhdG9yOjp2aXNpdENoaWxkcmVuSW1wbCk6CisgICAgICAg
IChKU0M6OkpTU3RyaW5nSXRlcmF0b3I6OnZpc2l0Q2hpbGRyZW4pOiBEZWxldGVkLgorICAgICAg
ICAqIHJ1bnRpbWUvSlNTdHJpbmdJdGVyYXRvci5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNTeW1i
b2xUYWJsZU9iamVjdC5jcHA6CisgICAgICAgIChKU0M6OkpTU3ltYm9sVGFibGVPYmplY3Q6OnZp
c2l0Q2hpbGRyZW5JbXBsKToKKyAgICAgICAgKEpTQzo6SlNTeW1ib2xUYWJsZU9iamVjdDo6dmlz
aXRDaGlsZHJlbik6IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9KU1N5bWJvbFRhYmxlT2Jq
ZWN0Lmg6CisgICAgICAgICogcnVudGltZS9KU1dlYWtPYmplY3RSZWYuY3BwOgorICAgICAgICAo
SlNDOjpKU1dlYWtPYmplY3RSZWY6OnZpc2l0Q2hpbGRyZW5JbXBsKToKKyAgICAgICAgKEpTQzo6
SlNXZWFrT2JqZWN0UmVmOjp2aXNpdENoaWxkcmVuKTogRGVsZXRlZC4KKyAgICAgICAgKiBydW50
aW1lL0pTV2Vha09iamVjdFJlZi5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNXaXRoU2NvcGUuY3Bw
OgorICAgICAgICAoSlNDOjpKU1dpdGhTY29wZTo6dmlzaXRDaGlsZHJlbkltcGwpOgorICAgICAg
ICAoSlNDOjpKU1dpdGhTY29wZTo6dmlzaXRDaGlsZHJlbik6IERlbGV0ZWQuCisgICAgICAgICog
cnVudGltZS9KU1dpdGhTY29wZS5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNXcmFwcGVyT2JqZWN0
LmNwcDoKKyAgICAgICAgKEpTQzo6SlNXcmFwcGVyT2JqZWN0Ojp2aXNpdENoaWxkcmVuSW1wbCk6
CisgICAgICAgIChKU0M6OkpTV3JhcHBlck9iamVjdDo6dmlzaXRDaGlsZHJlbik6IERlbGV0ZWQu
CisgICAgICAgICogcnVudGltZS9KU1dyYXBwZXJPYmplY3QuaDoKKyAgICAgICAgKiBydW50aW1l
L0xhenlDbGFzc1N0cnVjdHVyZS5jcHA6CisgICAgICAgIChKU0M6OkxhenlDbGFzc1N0cnVjdHVy
ZTo6dmlzaXQpOgorICAgICAgICAqIHJ1bnRpbWUvTGF6eUNsYXNzU3RydWN0dXJlLmg6CisgICAg
ICAgICogcnVudGltZS9MYXp5UHJvcGVydHkuaDoKKyAgICAgICAgKiBydW50aW1lL0xhenlQcm9w
ZXJ0eUlubGluZXMuaDoKKyAgICAgICAgKEpTQzo6RWxlbWVudFR5cGU+Ojp2aXNpdCk6CisgICAg
ICAgICogcnVudGltZS9Nb2R1bGVQcm9ncmFtRXhlY3V0YWJsZS5jcHA6CisgICAgICAgIChKU0M6
Ok1vZHVsZVByb2dyYW1FeGVjdXRhYmxlOjp2aXNpdENoaWxkcmVuSW1wbCk6CisgICAgICAgIChK
U0M6Ok1vZHVsZVByb2dyYW1FeGVjdXRhYmxlOjp2aXNpdENoaWxkcmVuKTogRGVsZXRlZC4KKyAg
ICAgICAgKiBydW50aW1lL01vZHVsZVByb2dyYW1FeGVjdXRhYmxlLmg6CisgICAgICAgICogcnVu
dGltZS9PcHRpb25zLmNwcDoKKyAgICAgICAgKEpTQzo6T3B0aW9uczo6cmVjb21wdXRlRGVwZW5k
ZW50T3B0aW9ucyk6CisgICAgICAgICogcnVudGltZS9PcHRpb25zTGlzdC5oOgorICAgICAgICAq
IHJ1bnRpbWUvUHJvZ3JhbUV4ZWN1dGFibGUuY3BwOgorICAgICAgICAoSlNDOjpQcm9ncmFtRXhl
Y3V0YWJsZTo6dmlzaXRDaGlsZHJlbkltcGwpOgorICAgICAgICAoSlNDOjpQcm9ncmFtRXhlY3V0
YWJsZTo6dmlzaXRDaGlsZHJlbik6IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9Qcm9ncmFt
RXhlY3V0YWJsZS5oOgorICAgICAgICAqIHJ1bnRpbWUvUHJvcGVydHlNYXBIYXNoVGFibGUuaDoK
KyAgICAgICAgKiBydW50aW1lL1Byb3BlcnR5VGFibGUuY3BwOgorICAgICAgICAoSlNDOjpQcm9w
ZXJ0eVRhYmxlOjp2aXNpdENoaWxkcmVuSW1wbCk6CisgICAgICAgIChKU0M6OlByb3BlcnR5VGFi
bGU6OnZpc2l0Q2hpbGRyZW4pOiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvUHJveHlPYmpl
Y3QuY3BwOgorICAgICAgICAoSlNDOjpQcm94eU9iamVjdDo6dmlzaXRDaGlsZHJlbkltcGwpOgor
ICAgICAgICAoSlNDOjpQcm94eU9iamVjdDo6dmlzaXRDaGlsZHJlbik6IERlbGV0ZWQuCisgICAg
ICAgICogcnVudGltZS9Qcm94eU9iamVjdC5oOgorICAgICAgICAqIHJ1bnRpbWUvUHJveHlSZXZv
a2UuY3BwOgorICAgICAgICAoSlNDOjpQcm94eVJldm9rZTo6dmlzaXRDaGlsZHJlbkltcGwpOgor
ICAgICAgICAoSlNDOjpQcm94eVJldm9rZTo6dmlzaXRDaGlsZHJlbik6IERlbGV0ZWQuCisgICAg
ICAgICogcnVudGltZS9Qcm94eVJldm9rZS5oOgorICAgICAgICAqIHJ1bnRpbWUvUmVnRXhwQ2Fj
aGVkUmVzdWx0LmNwcDoKKyAgICAgICAgKEpTQzo6UmVnRXhwQ2FjaGVkUmVzdWx0Ojp2aXNpdEFn
Z3JlZ2F0ZUltcGwpOgorICAgICAgICAoSlNDOjpSZWdFeHBDYWNoZWRSZXN1bHQ6OnZpc2l0QWdn
cmVnYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKiBydW50aW1lL1JlZ0V4cENhY2hlZFJlc3VsdC5o
OgorICAgICAgICAqIHJ1bnRpbWUvUmVnRXhwR2xvYmFsRGF0YS5jcHA6CisgICAgICAgIChKU0M6
OlJlZ0V4cEdsb2JhbERhdGE6OnZpc2l0QWdncmVnYXRlSW1wbCk6CisgICAgICAgIChKU0M6OlJl
Z0V4cEdsb2JhbERhdGE6OnZpc2l0QWdncmVnYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKiBydW50
aW1lL1JlZ0V4cEdsb2JhbERhdGEuaDoKKyAgICAgICAgKiBydW50aW1lL1JlZ0V4cE9iamVjdC5j
cHA6CisgICAgICAgIChKU0M6OlJlZ0V4cE9iamVjdDo6dmlzaXRDaGlsZHJlbkltcGwpOgorICAg
ICAgICAoSlNDOjpSZWdFeHBPYmplY3Q6OnZpc2l0Q2hpbGRyZW4pOiBEZWxldGVkLgorICAgICAg
ICAqIHJ1bnRpbWUvUmVnRXhwT2JqZWN0Lmg6CisgICAgICAgICogcnVudGltZS9TYW1wbGluZ1By
b2ZpbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6U2FtcGxpbmdQcm9maWxlcjo6dmlzaXQpOgorICAg
ICAgICAqIHJ1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5oOgorICAgICAgICAqIHJ1bnRpbWUvU2Nv
cGVkQXJndW1lbnRzLmNwcDoKKyAgICAgICAgKEpTQzo6U2NvcGVkQXJndW1lbnRzOjp2aXNpdENo
aWxkcmVuSW1wbCk6CisgICAgICAgIChKU0M6OlNjb3BlZEFyZ3VtZW50czo6dmlzaXRDaGlsZHJl
bik6IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9TY29wZWRBcmd1bWVudHMuaDoKKyAgICAg
ICAgKiBydW50aW1lL1NpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKEpT
Qzo6U2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXI6OkpTQXJyYXlCdWZmZXJPd25lcjo6aXNSZWFj
aGFibGVGcm9tT3BhcXVlUm9vdHMpOgorICAgICAgICAqIHJ1bnRpbWUvU2ltcGxlVHlwZWRBcnJh
eUNvbnRyb2xsZXIuaDoKKyAgICAgICAgKiBydW50aW1lL1NtYWxsU3RyaW5ncy5jcHA6CisgICAg
ICAgIChKU0M6OlNtYWxsU3RyaW5nczo6dmlzaXRTdHJvbmdSZWZlcmVuY2VzKToKKyAgICAgICAg
KiBydW50aW1lL1NtYWxsU3RyaW5ncy5oOgorICAgICAgICAqIHJ1bnRpbWUvU3BhcnNlQXJyYXlW
YWx1ZU1hcC5jcHA6CisgICAgICAgIChKU0M6OlNwYXJzZUFycmF5VmFsdWVNYXA6OnZpc2l0Q2hp
bGRyZW5JbXBsKToKKyAgICAgICAgKEpTQzo6U3BhcnNlQXJyYXlWYWx1ZU1hcDo6dmlzaXRDaGls
ZHJlbik6IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9TcGFyc2VBcnJheVZhbHVlTWFwLmg6
CisgICAgICAgICogcnVudGltZS9TdGFja0ZyYW1lLmNwcDoKKyAgICAgICAgKEpTQzo6U3RhY2tG
cmFtZTo6dmlzaXRDaGlsZHJlbik6IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9TdGFja0Zy
YW1lLmg6CisgICAgICAgIChKU0M6OlN0YWNrRnJhbWU6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAg
ICAqIHJ1bnRpbWUvU3RydWN0dXJlLmNwcDoKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjp2aXNp
dENoaWxkcmVuSW1wbCk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6aXNDaGVhcER1cmluZ0dD
KToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjptYXJrSWZDaGVhcCk6CisgICAgICAgIChKU0M6
OlN0cnVjdHVyZTo6dmlzaXRDaGlsZHJlbik6IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9T
dHJ1Y3R1cmUuaDoKKyAgICAgICAgKiBydW50aW1lL1N0cnVjdHVyZUNoYWluLmNwcDoKKyAgICAg
ICAgKEpTQzo6U3RydWN0dXJlQ2hhaW46OnZpc2l0Q2hpbGRyZW5JbXBsKToKKyAgICAgICAgKEpT
Qzo6U3RydWN0dXJlQ2hhaW46OnZpc2l0Q2hpbGRyZW4pOiBEZWxldGVkLgorICAgICAgICAqIHJ1
bnRpbWUvU3RydWN0dXJlQ2hhaW4uaDoKKyAgICAgICAgKiBydW50aW1lL1N0cnVjdHVyZVJhcmVE
YXRhLmNwcDoKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlUmFyZURhdGE6OnZpc2l0Q2hpbGRyZW5J
bXBsKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlUmFyZURhdGE6OnZpc2l0Q2hpbGRyZW4pOiBE
ZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJlUmFyZURhdGEuaDoKKyAgICAgICAg
KiBydW50aW1lL1N5bWJvbFRhYmxlLmNwcDoKKyAgICAgICAgKEpTQzo6U3ltYm9sVGFibGU6OnZp
c2l0Q2hpbGRyZW5JbXBsKToKKyAgICAgICAgKEpTQzo6U3ltYm9sVGFibGU6OnZpc2l0Q2hpbGRy
ZW4pOiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvU3ltYm9sVGFibGUuaDoKKyAgICAgICAg
KiBydW50aW1lL1R5cGVQcm9maWxlckxvZy5jcHA6CisgICAgICAgIChKU0M6OlR5cGVQcm9maWxl
ckxvZzo6dmlzaXQpOgorICAgICAgICAqIHJ1bnRpbWUvVHlwZVByb2ZpbGVyTG9nLmg6CisgICAg
ICAgICogcnVudGltZS9WTS5oOgorICAgICAgICAoSlNDOjpWTTo6aXNBbmFseXppbmdIZWFwIGNv
bnN0KToKKyAgICAgICAgKEpTQzo6Vk06OmFjdGl2ZUhlYXBBbmFseXplciBjb25zdCk6CisgICAg
ICAgIChKU0M6OlZNOjpzZXRBY3RpdmVIZWFwQW5hbHl6ZXIpOgorICAgICAgICAqIHJ1bnRpbWUv
V2Vha01hcEltcGwuY3BwOgorICAgICAgICAoSlNDOjpXZWFrTWFwSW1wbDxXZWFrTWFwQnVja2V0
Pjo6dmlzaXRDaGlsZHJlbkltcGwpOgorICAgICAgICAoSlNDOjpXZWFrTWFwSW1wbDxXZWFrTWFw
QnVja2V0PFdlYWtNYXBCdWNrZXREYXRhS2V5Pj46OnZpc2l0T3V0cHV0Q29uc3RyYWludHMpOgor
ICAgICAgICAoSlNDOjpXZWFrTWFwSW1wbDxCdWNrZXRUeXBlPjo6dmlzaXRPdXRwdXRDb25zdHJh
aW50cyk6CisgICAgICAgIChKU0M6OldlYWtNYXBJbXBsPFdlYWtNYXBCdWNrZXQ+Ojp2aXNpdENo
aWxkcmVuKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V2Vha01hcEltcGw8V2Vha01hcEJ1Y2tl
dDxXZWFrTWFwQnVja2V0RGF0YUtleVZhbHVlPj46OnZpc2l0T3V0cHV0Q29uc3RyYWludHMpOiBE
ZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvV2Vha01hcEltcGwuaDoKKyAgICAgICAgKEpTQzo6
V2Vha01hcEJ1Y2tldDo6dmlzaXRBZ2dyZWdhdGUpOgorICAgICAgICAqIHRvb2xzL0pTRG9sbGFy
Vk0uY3BwOgorICAgICAgICAoSlNDOjpKU0RvbGxhclZNOjp2aXNpdENoaWxkcmVuSW1wbCk6Cisg
ICAgICAgIChKU0M6OkpTRG9sbGFyVk06OnZpc2l0Q2hpbGRyZW4pOiBEZWxldGVkLgorICAgICAg
ICAqIHRvb2xzL0pTRG9sbGFyVk0uaDoKKyAgICAgICAgKiB3YXNtL1dhc21HbG9iYWwuY3BwOgor
ICAgICAgICAoSlNDOjpXYXNtOjpHbG9iYWw6OnZpc2l0QWdncmVnYXRlSW1wbCk6CisgICAgICAg
IChKU0M6Oldhc206Okdsb2JhbDo6dmlzaXRBZ2dyZWdhdGUpOiBEZWxldGVkLgorICAgICAgICAq
IHdhc20vV2FzbUdsb2JhbC5oOgorICAgICAgICAqIHdhc20vV2FzbVRhYmxlLmNwcDoKKyAgICAg
ICAgKEpTQzo6V2FzbTo6VGFibGU6OnZpc2l0QWdncmVnYXRlSW1wbCk6CisgICAgICAgIChKU0M6
Oldhc206OlRhYmxlOjp2aXNpdEFnZ3JlZ2F0ZSk6IERlbGV0ZWQuCisgICAgICAgICogd2FzbS9X
YXNtVGFibGUuaDoKKyAgICAgICAgKiB3YXNtL2pzL0pTVG9XYXNtSUNDYWxsZWUuY3BwOgorICAg
ICAgICAoSlNDOjpKU1RvV2FzbUlDQ2FsbGVlOjp2aXNpdENoaWxkcmVuSW1wbCk6CisgICAgICAg
IChKU0M6OkpTVG9XYXNtSUNDYWxsZWU6OnZpc2l0Q2hpbGRyZW4pOiBEZWxldGVkLgorICAgICAg
ICAqIHdhc20vanMvSlNUb1dhc21JQ0NhbGxlZS5oOgorICAgICAgICAqIHdhc20vanMvSlNXZWJB
c3NlbWJseUNvZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlDb2RlQmxv
Y2s6OnZpc2l0Q2hpbGRyZW5JbXBsKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUNvZGVC
bG9jazo6dmlzaXRDaGlsZHJlbik6IERlbGV0ZWQuCisgICAgICAgICogd2FzbS9qcy9KU1dlYkFz
c2VtYmx5Q29kZUJsb2NrLmg6CisgICAgICAgICogd2FzbS9qcy9KU1dlYkFzc2VtYmx5R2xvYmFs
LmNwcDoKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUdsb2JhbDo6dmlzaXRDaGlsZHJlbklt
cGwpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5R2xvYmFsOjp2aXNpdENoaWxkcmVuKTog
RGVsZXRlZC4KKyAgICAgICAgKiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlHbG9iYWwuaDoKKyAgICAg
ICAgKiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5jcHA6CisgICAgICAgIChKU0M6OkpT
V2ViQXNzZW1ibHlJbnN0YW5jZTo6dmlzaXRDaGlsZHJlbkltcGwpOgorICAgICAgICAoSlNDOjpK
U1dlYkFzc2VtYmx5SW5zdGFuY2U6OnZpc2l0Q2hpbGRyZW4pOiBEZWxldGVkLgorICAgICAgICAq
IHdhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmg6CisgICAgICAgICogd2FzbS9qcy9KU1dl
YkFzc2VtYmx5TWVtb3J5LmNwcDoKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseU1lbW9yeTo6
dmlzaXRDaGlsZHJlbkltcGwpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5TWVtb3J5Ojp2
aXNpdENoaWxkcmVuKTogRGVsZXRlZC4KKyAgICAgICAgKiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlN
ZW1vcnkuaDoKKyAgICAgICAgKiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuY3BwOgorICAg
ICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5TW9kdWxlOjp2aXNpdENoaWxkcmVuSW1wbCk6CisgICAg
ICAgIChKU0M6OkpTV2ViQXNzZW1ibHlNb2R1bGU6OnZpc2l0Q2hpbGRyZW4pOiBEZWxldGVkLgor
ICAgICAgICAqIHdhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5oOgorICAgICAgICAqIHdhc20v
anMvSlNXZWJBc3NlbWJseVRhYmxlLmNwcDoKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseVRh
YmxlOjp2aXNpdENoaWxkcmVuSW1wbCk6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlUYWJs
ZTo6dmlzaXRDaGlsZHJlbik6IERlbGV0ZWQuCisgICAgICAgICogd2FzbS9qcy9KU1dlYkFzc2Vt
Ymx5VGFibGUuaDoKKyAgICAgICAgKiB3YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uY3BwOgor
ICAgICAgICAoSlNDOjpXZWJBc3NlbWJseUZ1bmN0aW9uOjp2aXNpdENoaWxkcmVuSW1wbCk6Cisg
ICAgICAgIChKU0M6OldlYkFzc2VtYmx5RnVuY3Rpb246OnZpc2l0Q2hpbGRyZW4pOiBEZWxldGVk
LgorICAgICAgICAqIHdhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5oOgorICAgICAgICAqIHdh
c20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbkJhc2UuY3BwOgorICAgICAgICAoSlNDOjpXZWJBc3Nl
bWJseUZ1bmN0aW9uQmFzZTo6dmlzaXRDaGlsZHJlbkltcGwpOgorICAgICAgICAoSlNDOjpXZWJB
c3NlbWJseUZ1bmN0aW9uQmFzZTo6dmlzaXRDaGlsZHJlbik6IERlbGV0ZWQuCisgICAgICAgICog
d2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uQmFzZS5oOgorICAgICAgICAqIHdhc20vanMvV2Vi
QXNzZW1ibHlNb2R1bGVSZWNvcmQuY3BwOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseU1vZHVs
ZVJlY29yZDo6dmlzaXRDaGlsZHJlbkltcGwpOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseU1v
ZHVsZVJlY29yZDo6dmlzaXRDaGlsZHJlbik6IERlbGV0ZWQuCisgICAgICAgICogd2FzbS9qcy9X
ZWJBc3NlbWJseU1vZHVsZVJlY29yZC5oOgorICAgICAgICAqIHdhc20vanMvV2ViQXNzZW1ibHlX
cmFwcGVyRnVuY3Rpb24uY3BwOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseVdyYXBwZXJGdW5j
dGlvbjo6dmlzaXRDaGlsZHJlbkltcGwpOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseVdyYXBw
ZXJGdW5jdGlvbjo6dmlzaXRDaGlsZHJlbik6IERlbGV0ZWQuCisgICAgICAgICogd2FzbS9qcy9X
ZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5oOgorCiAyMDIxLTAyLTE4ICBDYWlvIExpbWEgIDx0
aWNhaW9saW1hQGdtYWlsLmNvbT4KIAogICAgICAgICBbSlNDXSBJbXBsZW1lbnQgcHJpdmF0ZSBz
dGF0aWMgbWV0aG9kCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZp
c2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHdv
cmtpbmcgY29weSkKQEAgLTYxMyw2ICs2MTMsOCBAQCBzZXQoSmF2YVNjcmlwdENvcmVfUFJJVkFU
RV9GUkFNRVdPUktfSEVBCiAgICAgZG9taml0L0RPTUpJVEhlYXBSYW5nZS5oCiAgICAgZG9taml0
L0RPTUpJVFNpZ25hdHVyZS5oCiAKKyAgICBoZWFwL0Fic3RyYWN0U2xvdFZpc2l0b3IuaAorICAg
IGhlYXAvQWJzdHJhY3RTbG90VmlzaXRvcklubGluZXMuaAogICAgIGhlYXAvQWxpZ25lZE1lbW9y
eUFsbG9jYXRvci5oCiAgICAgaGVhcC9BbGxvY2F0aW9uRmFpbHVyZU1vZGUuaAogICAgIGhlYXAv
QWxsb2NhdG9yLmgKQEAgLTY3OCw2ICs2ODAsNyBAQCBzZXQoSmF2YVNjcmlwdENvcmVfUFJJVkFU
RV9GUkFNRVdPUktfSEVBCiAgICAgaGVhcC9NYXJrZWRCbG9ja1NldC5oCiAgICAgaGVhcC9NYXJr
ZWRTcGFjZS5oCiAgICAgaGVhcC9NYXJraW5nQ29uc3RyYWludC5oCisgICAgaGVhcC9NYXJraW5n
Q29uc3RyYWludEV4ZWN1dG9yUGFpci5oCiAgICAgaGVhcC9NdXRhdG9yU3RhdGUuaAogICAgIGhl
YXAvUGFja2VkQ2VsbFB0ci5oCiAgICAgaGVhcC9QcmVjaXNlQWxsb2NhdGlvbi5oCkBAIC02ODcs
MTIgKzY5MCwxNCBAQCBzZXQoSmF2YVNjcmlwdENvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVBCiAg
ICAgaGVhcC9TaW1wbGVNYXJraW5nQ29uc3RyYWludC5oCiAgICAgaGVhcC9TbG90VmlzaXRvci5o
CiAgICAgaGVhcC9TbG90VmlzaXRvcklubGluZXMuaAorICAgIGhlYXAvU2xvdFZpc2l0b3JNYWNy
b3MuaAogICAgIGhlYXAvU3Ryb25nLmgKICAgICBoZWFwL1N0cm9uZ0lubGluZXMuaAogICAgIGhl
YXAvU3Vic3BhY2UuaAogICAgIGhlYXAvU3Vic3BhY2VJbmxpbmVzLmgKICAgICBoZWFwL1N5bmNo
cm9ub3VzbmVzcy5oCiAgICAgaGVhcC9UaW55Qmxvb21GaWx0ZXIuaAorICAgIGhlYXAvVmVyaWZp
ZXJTbG90VmlzaXRvci5oCiAgICAgaGVhcC9WaXNpdFJhY2VLZXkuaAogICAgIGhlYXAvV2Vhay5o
CiAgICAgaGVhcC9XZWFrQmxvY2suaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJj
ZXMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAko
cmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CSh3
b3JraW5nIGNvcHkpCkBAIC01NjMsNiArNTYzLDcgQEAgaGVhcC9TdG9wSWZOZWNlc3NhcnlUaW1l
ci5jcHAKIGhlYXAvU3Vic3BhY2UuY3BwCiBoZWFwL1N5bmNocm9ub3VzU3RvcFRoZVdvcmxkTXV0
YXRvclNjaGVkdWxlci5jcHAKIGhlYXAvU3luY2hyb25vdXNuZXNzLmNwcAoraGVhcC9WZXJpZmll
clNsb3RWaXNpdG9yLmNwcAogaGVhcC9WaXNpdFJhY2VLZXkuY3BwCiBoZWFwL1dlYWsuY3BwCiBo
ZWFwL1dlYWtCbG9jay5jcHAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNBUElX
cmFwcGVyT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9K
U0FQSVdyYXBwZXJPYmplY3QuaAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL0FQSS9KU0FQSVdyYXBwZXJPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQxLDcg
KzQxLDcgQEAgcHVibGljOgogICAgIHN0YXRpYyB2b2lkIHN1YnNwYWNlRm9yKFZNJikgeyBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9CiAgICAgCiAgICAgdm9pZCBmaW5pc2hDcmVhdGlv
bihWTSYpOwotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgSlNDOjpTbG90
VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU5fV0lUSF9NT0RJRklFUihKU19F
WFBPUlRfUFJJVkFURSk7CiAgICAgCiAgICAgdm9pZCogd3JhcHBlZE9iamVjdCgpIHsgcmV0dXJu
IG1fd3JhcHBlZE9iamVjdDsgfQogICAgIHZvaWQgc2V0V3JhcHBlZE9iamVjdCh2b2lkKik7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQVBJV3JhcHBlck9iamVjdC5tbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQVBJV3JhcHBlck9iamVjdC5t
bQkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0FQSVdy
YXBwZXJPYmplY3QubW0JKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNyw3ICszNyw3IEBACiBjbGFzcyBK
U0FQSVdyYXBwZXJPYmplY3RIYW5kbGVPd25lciBmaW5hbCA6IHB1YmxpYyBKU0M6OldlYWtIYW5k
bGVPd25lciB7CiBwdWJsaWM6CiAgICAgdm9pZCBmaW5hbGl6ZShKU0M6OkhhbmRsZTxKU0M6OlVu
a25vd24+LCB2b2lkKikgZmluYWw7Ci0gICAgYm9vbCBpc1JlYWNoYWJsZUZyb21PcGFxdWVSb290
cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0LCBKU0M6OlNsb3RWaXNp
dG9yJiwgY29uc3QgY2hhcioqKSBmaW5hbDsKKyAgICBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1
ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6QWJz
dHJhY3RTbG90VmlzaXRvciYsIGNvbnN0IGNoYXIqKikgZmluYWw7CiB9OwogCiBzdGF0aWMgSlNB
UElXcmFwcGVyT2JqZWN0SGFuZGxlT3duZXIqIGpzQVBJV3JhcHBlck9iamVjdEhhbmRsZU93bmVy
KCkKQEAgLTU2LDE0ICs1NiwxNCBAQCB2b2lkIEpTQVBJV3JhcHBlck9iamVjdEhhbmRsZU93bmVy
OjpmaW5hCiAgICAgSlNDOjpXZWFrU2V0OjpkZWFsbG9jYXRlKEpTQzo6V2Vha0ltcGw6OmFzV2Vh
a0ltcGwoaGFuZGxlLnNsb3QoKSkpOwogfQogCi1ib29sIEpTQVBJV3JhcHBlck9iamVjdEhhbmRs
ZU93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25v
d24+IGhhbmRsZSwgdm9pZCosIEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIq
KikKK2Jvb2wgSlNBUElXcmFwcGVyT2JqZWN0SGFuZGxlT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9w
YXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgSlNDOjpB
YnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiopCiB7CiAgICAgSlNDOjpK
U0FQSVdyYXBwZXJPYmplY3QqIHdyYXBwZXJPYmplY3QgPSBKU0M6OmpzQ2FzdDxKU0M6OkpTQVBJ
V3JhcHBlck9iamVjdCo+KGhhbmRsZS5nZXQoKS5hc0NlbGwoKSk7CiAgICAgLy8gV2UgdXNlIHRo
ZSBKU0dsb2JhbE9iamVjdCB3aGVuIHByb2Nlc3Npbmcgd2VhayBoYW5kbGVzIHRvIHByZXZlbnQg
dGhlIHNpdHVhdGlvbiB3aGVyZSB1c2luZwogICAgIC8vIHRoZSBzYW1lIE9iamVjdGl2ZS1DIG9i
amVjdCBpbiBtdWx0aXBsZSBnbG9iYWwgb2JqZWN0cyBrZWVwcyBhbGwgb2YgdGhlIGdsb2JhbCBv
YmplY3RzIGFsaXZlLgogICAgIGlmICghd3JhcHBlck9iamVjdC0+d3JhcHBlZE9iamVjdCgpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIHZpc2l0b3Iudm0oKS5oZWFwLmlzTWFy
a2VkKHdyYXBwZXJPYmplY3QtPnN0cnVjdHVyZSgpLT5nbG9iYWxPYmplY3QoKSkgJiYgdmlzaXRv
ci5jb250YWluc09wYXF1ZVJvb3Qod3JhcHBlck9iamVjdC0+d3JhcHBlZE9iamVjdCgpKTsKKyAg
ICByZXR1cm4gdmlzaXRvci5pc01hcmtlZCh3cmFwcGVyT2JqZWN0LT5zdHJ1Y3R1cmUoKS0+Z2xv
YmFsT2JqZWN0KCkpICYmIHZpc2l0b3IuY29udGFpbnNPcGFxdWVSb290KHdyYXBwZXJPYmplY3Qt
PndyYXBwZWRPYmplY3QoKSk7CiB9CiAKIG5hbWVzcGFjZSBKU0MgewpAQCAtNzMsNiArNzMsOCBA
QCBzdGF0aWMgSlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElPTihjb25zdHJ1CiBzdGF0aWMgSlNDX0RF
Q0xBUkVfQ1VTVE9NX0dFVFRFUihjYWxsYmFja0dldHRlckpTQVBJV3JhcHBlck9iamVjdENhbGxi
YWNrT2JqZWN0KTsKIHN0YXRpYyBKU0NfREVDTEFSRV9DVVNUT01fR0VUVEVSKHN0YXRpY0Z1bmN0
aW9uR2V0dGVySlNBUElXcmFwcGVyT2JqZWN0Q2FsbGJhY2tPYmplY3QpOwogCitERUZJTkVfVklT
SVRfQ0hJTERSRU5fV0lUSF9NT0RJRklFUih0ZW1wbGF0ZTw+LCBKU0NhbGxiYWNrT2JqZWN0PEpT
QVBJV3JhcHBlck9iamVjdD4pOworCiB0ZW1wbGF0ZSA8PiBjb25zdCBDbGFzc0luZm8gSlNDYWxs
YmFja09iamVjdDxKU0FQSVdyYXBwZXJPYmplY3Q+OjpzX2luZm8gPSB7ICJKU0FQSVdyYXBwZXJP
YmplY3QiLCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RB
QkxFKEpTQ2FsbGJhY2tPYmplY3QpIH07CiB0ZW1wbGF0ZSA8PiBjb25zdCBib29sIEpTQ2FsbGJh
Y2tPYmplY3Q8SlNBUElXcmFwcGVyT2JqZWN0Pjo6bmVlZHNEZXN0cnVjdGlvbiA9IHRydWU7CiAK
QEAgLTEyMyw3ICsxMjUsOCBAQCB2b2lkIEpTQVBJV3JhcHBlck9iamVjdDo6c2V0V3JhcHBlZE9i
amVjCiAgICAgbV93cmFwcGVkT2JqZWN0ID0gW3N0YXRpY19jYXN0PGlkPih3cmFwcGVkT2JqZWN0
KSByZXRhaW5dOwogfQogCi12b2lkIEpTQVBJV3JhcHBlck9iamVjdDo6dmlzaXRDaGlsZHJlbihK
U0NlbGwqIGNlbGwsIEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBWaXNpdG9yPgordm9pZCBKU0FQSVdyYXBwZXJPYmplY3Q6OnZpc2l0Q2hpbGRyZW5JbXBsKEpT
Q2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU0FQSVdyYXBwZXJPYmplY3Qq
IHRoaXNPYmplY3QgPSBKU0M6OmpzQ2FzdDxKU0FQSVdyYXBwZXJPYmplY3QqPihjZWxsKTsKICAg
ICBCYXNlOjp2aXNpdENoaWxkcmVuKGNlbGwsIHZpc2l0b3IpOwpAQCAtMTMzLDYgKzEzNiw4IEBA
IHZvaWQgSlNBUElXcmFwcGVyT2JqZWN0Ojp2aXNpdENoaWxkcmVuKEoKICAgICAgICAgc2NhbkV4
dGVybmFsT2JqZWN0R3JhcGgodmlzaXRvci52bSgpLCB2aXNpdG9yLCB3cmFwcGVkT2JqZWN0KTsK
IH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOX1dJVEhfTU9ESUZJRVIoSlNfRVhQT1JUX1BSSVZB
VEUsIEpTQVBJV3JhcHBlck9iamVjdCk7CisKIHRlbXBsYXRlIDw+CiBJc29TdWJzcGFjZSogSlND
YWxsYmFja09iamVjdDxKU0FQSVdyYXBwZXJPYmplY3Q+OjpzdWJzcGFjZUZvckltcGwoVk0mIHZt
LCBTdWJzcGFjZUFjY2VzcyBtb2RlKQogewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQ
SS9KU0NhbGxiYWNrT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvQVBJL0pTQ2FsbGJhY2tPYmplY3QuY3BwCShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNi0yMDE3IEFwcGxlIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcgRXJpYyBTZWlk
ZWwgPGVyaWNAd2Via2l0Lm9yZz4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTQxLDYgKzQxLDkgQEAg
c3RhdGljIEpTQ19ERUNMQVJFX0NVU1RPTV9HRVRURVIoc3RhdGljRgogc3RhdGljIEpTQ19ERUNM
QVJFX0NVU1RPTV9HRVRURVIoY2FsbGJhY2tHZXR0ZXJKU0dsb2JhbE9iamVjdENhbGxiYWNrT2Jq
ZWN0KTsKIHN0YXRpYyBKU0NfREVDTEFSRV9DVVNUT01fR0VUVEVSKHN0YXRpY0Z1bmN0aW9uR2V0
dGVySlNHbG9iYWxPYmplY3RDYWxsYmFja09iamVjdCk7CiAKK0RFRklORV9WSVNJVF9DSElMRFJF
Tl9XSVRIX01PRElGSUVSKHRlbXBsYXRlPD4sIEpTQ2FsbGJhY2tPYmplY3Q8SlNOb25GaW5hbE9i
amVjdD4pOworREVGSU5FX1ZJU0lUX0NISUxEUkVOX1dJVEhfTU9ESUZJRVIodGVtcGxhdGU8Piwg
SlNDYWxsYmFja09iamVjdDxKU0dsb2JhbE9iamVjdD4pOworCiAvLyBEZWZpbmUgdGhlIHR3byB0
eXBlcyBvZiBKU0NhbGxiYWNrT2JqZWN0cyB3ZSBzdXBwb3J0LgogdGVtcGxhdGUgPD4gY29uc3Qg
Q2xhc3NJbmZvIEpTQ2FsbGJhY2tPYmplY3Q8SlNOb25GaW5hbE9iamVjdD46OnNfaW5mbyA9IHsg
IkNhbGxiYWNrT2JqZWN0IiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRF
X01FVEhPRF9UQUJMRShKU0NhbGxiYWNrT2JqZWN0KSB9OwogdGVtcGxhdGUgPD4gY29uc3QgQ2xh
c3NJbmZvIEpTQ2FsbGJhY2tPYmplY3Q8SlNHbG9iYWxPYmplY3Q+OjpzX2luZm8gPSB7ICJDYWxs
YmFja0dsb2JhbE9iamVjdCIsICZCYXNlOjpzX2luZm8sIG51bGxwdHIsIG51bGxwdHIsIENSRUFU
RV9NRVRIT0RfVEFCTEUoSlNDYWxsYmFja09iamVjdCkgfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdC5oCShyZXZpc2lvbiAyNzMxMTkpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3QuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcgRXJpYyBT
ZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTY5LDcgKzY5LDEw
IEBAIHB1YmxpYzoKICAgICAgICAgbV9wcml2YXRlUHJvcGVydGllcy0+ZGVsZXRlUHJpdmF0ZVBy
b3BlcnR5KHByb3BlcnR5TmFtZSk7CiAgICAgfQogCi0gICAgdm9pZCB2aXNpdENoaWxkcmVuKFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQorICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CisKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgorICAgIHZvaWQgdmlzaXRDaGlsZHJlbihWaXNpdG9y
JiB2aXNpdG9yKQogICAgIHsKICAgICAgICAgSlNQcml2YXRlUHJvcGVydHlNYXAqIHByb3BlcnRp
ZXMgPSBtX3ByaXZhdGVQcm9wZXJ0aWVzLmdldCgpOwogICAgICAgICBpZiAoIXByb3BlcnRpZXMp
CkBAIC0xMDMsNyArMTA2LDggQEAgcHVibGljOgogICAgICAgICAgICAgbV9wcm9wZXJ0eU1hcC5y
ZW1vdmUocHJvcGVydHlOYW1lLmltcGwoKSk7CiAgICAgICAgIH0KIAotICAgICAgICB2b2lkIHZp
c2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisgICAgICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFZpc2l0b3I+CisgICAgICAgIHZvaWQgdmlzaXRDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9y
KQogICAgICAgICB7CiAgICAgICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2xvY2spOwogICAg
ICAgICAgICAgZm9yIChhdXRvJiBwYWlyIDogbV9wcm9wZXJ0eU1hcCkgewpAQCAtMjE2LDEzICsy
MjAsNyBAQCBwcml2YXRlOgogICAgIHN0YXRpYyBDYWxsRGF0YSBnZXRDb25zdHJ1Y3REYXRhKEpT
Q2VsbCopOwogICAgIHN0YXRpYyBDYWxsRGF0YSBnZXRDYWxsRGF0YShKU0NlbGwqKTsKIAotICAg
IHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlz
aXRvcikKLSAgICB7Ci0gICAgICAgIEpTQ2FsbGJhY2tPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nh
c3Q8SlNDYWxsYmFja09iamVjdCo+KGNlbGwpOwotICAgICAgICBBU1NFUlRfR0NfT0JKRUNUX0lO
SEVSSVRTKChzdGF0aWNfY2FzdDxQYXJlbnQqPih0aGlzT2JqZWN0KSksIEpTQ2FsbGJhY2tPYmpl
Y3Q8UGFyZW50Pjo6aW5mbygpKTsKLSAgICAgICAgUGFyZW50Ojp2aXNpdENoaWxkcmVuKHRoaXNP
YmplY3QsIHZpc2l0b3IpOwotICAgICAgICB0aGlzT2JqZWN0LT5tX2NhbGxiYWNrT2JqZWN0RGF0
YS0+dmlzaXRDaGlsZHJlbih2aXNpdG9yKTsKLSAgICB9CisgICAgREVDTEFSRV9WSVNJVF9DSElM
RFJFTjsKIAogICAgIHZvaWQgaW5pdChKU0dsb2JhbE9iamVjdCopOwogIApAQCAtMjQzLDYgKzI0
MSwxNiBAQCBwcml2YXRlOgogICAgIGNvbnN0IENsYXNzSW5mbyogbV9jbGFzc0luZm8geyBudWxs
cHRyIH07CiB9OwogCit0ZW1wbGF0ZSA8Y2xhc3MgUGFyZW50PgordGVtcGxhdGU8dHlwZW5hbWUg
VmlzaXRvcj4KK3ZvaWQgSlNDYWxsYmFja09iamVjdDxQYXJlbnQ+Ojp2aXNpdENoaWxkcmVuSW1w
bChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgSlNDYWxsYmFja09iamVj
dCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0NhbGxiYWNrT2JqZWN0Kj4oY2VsbCk7CisgICAgQVNT
RVJUX0dDX09CSkVDVF9JTkhFUklUUygoc3RhdGljX2Nhc3Q8UGFyZW50Kj4odGhpc09iamVjdCkp
LCBKU0NhbGxiYWNrT2JqZWN0PFBhcmVudD46OmluZm8oKSk7CisgICAgUGFyZW50Ojp2aXNpdENo
aWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOworICAgIHRoaXNPYmplY3QtPm1fY2FsbGJhY2tP
YmplY3REYXRhLT52aXNpdENoaWxkcmVuKHZpc2l0b3IpOworfQorCiB9IC8vIG5hbWVzcGFjZSBK
U0MKIAogLy8gaW5jbHVkZSB0aGUgYWN0dWFsIHRlbXBsYXRlIGNsYXNzIGltcGxlbWVudGF0aW9u
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTTWFuYWdlZFZhbHVlLm1tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNNYW5hZ2VkVmFsdWUubW0JKHJl
dmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNNYW5hZ2VkVmFs
dWUubW0JKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDEzLCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDMsNyArNDMsNyBAQAogY2xhc3MgSlNNYW5hZ2Vk
VmFsdWVIYW5kbGVPd25lciBmaW5hbCA6IHB1YmxpYyBKU0M6OldlYWtIYW5kbGVPd25lciB7CiBw
dWJsaWM6CiAgICAgdm9pZCBmaW5hbGl6ZShKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lk
KiBjb250ZXh0KSBmaW5hbDsKLSAgICBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpT
Qzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6U2xvdFZpc2l0b3Im
LCBjb25zdCBjaGFyKiopIGZpbmFsOworICAgIGJvb2wgaXNSZWFjaGFibGVGcm9tT3BhcXVlUm9v
dHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCwgSlNDOjpBYnN0cmFj
dFNsb3RWaXNpdG9yJiwgY29uc3QgY2hhcioqKSBmaW5hbDsKIH07CiAKIHN0YXRpYyBKU01hbmFn
ZWRWYWx1ZUhhbmRsZU93bmVyJiBtYW5hZ2VkVmFsdWVIYW5kbGVPd25lcigpCkBAIC0xNzksNyAr
MTc5LDcgQEAgQGludGVyZmFjZSBKU01hbmFnZWRWYWx1ZSAoUHJpdmF0ZU1ldGhvZAogLSAodm9p
ZClkaXNjb25uZWN0VmFsdWU7CiBAZW5kCiAKLWJvb2wgSlNNYW5hZ2VkVmFsdWVIYW5kbGVPd25l
cjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwg
dm9pZCogY29udGV4dCwgSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJl
YXNvbikKK2Jvb2wgSlNNYW5hZ2VkVmFsdWVIYW5kbGVPd25lcjo6aXNSZWFjaGFibGVGcm9tT3Bh
cXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCwgSlNDOjpB
YnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQogewogICAg
IGlmIChVTkxJS0VMWShyZWFzb24pKQogICAgICAgICAqcmVhc29uID0gIkpTTWFuYWdlZFZhbHVl
IGlzIG9wYXF1ZSByb290IjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNNYXJr
aW5nQ29uc3RyYWludFByaXZhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9BUEkvSlNNYXJraW5nQ29uc3RyYWludFByaXZhdGUuY3BwCShyZXZpc2lvbiAyNzMxMTkp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTTWFya2luZ0NvbnN0cmFpbnRQcml2YXRl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsNyBAQCBuYW1lc3BhY2UgewogQXRvbWlj
PHVuc2lnbmVkPiBjb25zdHJhaW50Q291bnRlcjsKIAogc3RydWN0IE1hcmtlciA6IEpTTWFya2Vy
IHsKLSAgICBTbG90VmlzaXRvciogdmlzaXRvcjsKKyAgICBBYnN0cmFjdFNsb3RWaXNpdG9yKiB2
aXNpdG9yOwogfTsKIAogYm9vbCBpc01hcmtlZChKU01hcmtlclJlZiBtYXJrZXJSZWYsIEpTT2Jq
ZWN0UmVmIG9iamVjdFJlZikKQEAgLTQ0LDcgKzQ0LDcgQEAgYm9vbCBpc01hcmtlZChKU01hcmtl
clJlZiBtYXJrZXJSZWYsIEpTTwogICAgIGlmICghb2JqZWN0UmVmKQogICAgICAgICByZXR1cm4g
dHJ1ZTsgLy8gTnVsbCBpcyBhbiBpbW1vcnRhbCBvYmplY3QuCiAgICAgCi0gICAgcmV0dXJuIHN0
YXRpY19jYXN0PE1hcmtlcio+KG1hcmtlclJlZiktPnZpc2l0b3ItPnZtKCkuaGVhcC5pc01hcmtl
ZCh0b0pTKG9iamVjdFJlZikpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxNYXJrZXIqPihtYXJr
ZXJSZWYpLT52aXNpdG9yLT5pc01hcmtlZCh0b0pTKG9iamVjdFJlZikpOwogfQogCiB2b2lkIG1h
cmsoSlNNYXJrZXJSZWYgbWFya2VyUmVmLCBKU09iamVjdFJlZiBvYmplY3RSZWYpCkBAIC03Mywx
NCArNzMsMTQgQEAgdm9pZCBKU0NvbnRleHRHcm91cEFkZE1hcmtpbmdDb25zdHJhaW50KAogICAg
IGF1dG8gY29uc3RyYWludCA9IG1ha2VVbmlxdWU8U2ltcGxlTWFya2luZ0NvbnN0cmFpbnQ+KAog
ICAgICAgICB0b0NTdHJpbmcoIkFtYyIsIGNvbnN0cmFpbnRJbmRleCwgIigiLCBSYXdQb2ludGVy
KGJpdHdpc2VfY2FzdDx2b2lkKj4oY29uc3RyYWludENhbGxiYWNrKSksICIpIiksCiAgICAgICAg
IHRvQ1N0cmluZygiQVBJIE1hcmtpbmcgQ29uc3RyYWludCAjIiwgY29uc3RyYWludEluZGV4LCAi
ICgiLCBSYXdQb2ludGVyKGJpdHdpc2VfY2FzdDx2b2lkKj4oY29uc3RyYWludENhbGxiYWNrKSks
ICIsICIsIFJhd1BvaW50ZXIodXNlckRhdGEpLCAiKSIpLAotICAgICAgICBbY29uc3RyYWludENh
bGxiYWNrLCB1c2VyRGF0YV0gKFNsb3RWaXNpdG9yJiB2aXNpdG9yKSB7CisgICAgICAgIE1BS0Vf
TUFSS0lOR19DT05TVFJBSU5UX0VYRUNVVE9SX1BBSVIoKFtjb25zdHJhaW50Q2FsbGJhY2ssIHVz
ZXJEYXRhXSAoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikgewogICAgICAgICAgICAgTWFy
a2VyIG1hcmtlcjsKICAgICAgICAgICAgIG1hcmtlci5Jc01hcmtlZCA9IGlzTWFya2VkOwogICAg
ICAgICAgICAgbWFya2VyLk1hcmsgPSBtYXJrOwogICAgICAgICAgICAgbWFya2VyLnZpc2l0b3Ig
PSAmdmlzaXRvcjsKICAgICAgICAgICAgIAogICAgICAgICAgICAgY29uc3RyYWludENhbGxiYWNr
KCZtYXJrZXIsIHVzZXJEYXRhKTsKLSAgICAgICAgfSwKKyAgICAgICAgfSkpLAogICAgICAgICB2
b2xhdGlsaXR5LAogICAgICAgICBDb25zdHJhaW50Q29uY3VycmVuY3k6OlNlcXVlbnRpYWwpOwog
ICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1ZpcnR1YWxNYWNoaW5lLm1t
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWaXJ0dWFsTWFjaGlu
ZS5tbQkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1Zp
cnR1YWxNYWNoaW5lLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzEyLDcgKzMxMiw3IEBAICsgKHZv
aWQpc2V0Q3Jhc2hPblZNQ3JlYXRpb246KEJPT0wpc2hvdWwKIAogQGVuZAogCi1zdGF0aWMgdm9p
ZCBzY2FuRXh0ZXJuYWxPYmplY3RHcmFwaChKU0M6OlZNJiB2bSwgSlNDOjpTbG90VmlzaXRvciYg
dmlzaXRvciwgdm9pZCogcm9vdCwgYm9vbCBsb2NrQWNxdWlyZWQpCitzdGF0aWMgdm9pZCBzY2Fu
RXh0ZXJuYWxPYmplY3RHcmFwaChKU0M6OlZNJiB2bSwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9y
JiB2aXNpdG9yLCB2b2lkKiByb290LCBib29sIGxvY2tBY3F1aXJlZCkKIHsKICAgICBAYXV0b3Jl
bGVhc2Vwb29sIHsKICAgICAgICAgSlNWaXJ0dWFsTWFjaGluZSAqdmlydHVhbE1hY2hpbmUgPSBb
SlNWTVdyYXBwZXJDYWNoZSB3cmFwcGVyRm9ySlNDb250ZXh0R3JvdXBSZWY6dG9SZWYoJnZtKV07
CkBAIC0zNDQsMTMgKzM0NCwxMyBAQCBzdGF0aWMgdm9pZCBzY2FuRXh0ZXJuYWxPYmplY3RHcmFw
aChKU0M6CiAgICAgfQogfQogCi12b2lkIHNjYW5FeHRlcm5hbE9iamVjdEdyYXBoKEpTQzo6Vk0m
IHZtLCBKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yLCB2b2lkKiByb290KQordm9pZCBzY2FuRXh0
ZXJuYWxPYmplY3RHcmFwaChKU0M6OlZNJiB2bSwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiB2
aXNpdG9yLCB2b2lkKiByb290KQogewogICAgIGJvb2wgbG9ja0FjcXVpcmVkID0gZmFsc2U7CiAg
ICAgc2NhbkV4dGVybmFsT2JqZWN0R3JhcGgodm0sIHZpc2l0b3IsIHJvb3QsIGxvY2tBY3F1aXJl
ZCk7CiB9CiAKLXZvaWQgc2NhbkV4dGVybmFsUmVtZW1iZXJlZFNldChKU0M6OlZNJiB2bSwgSlND
OjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgc2NhbkV4dGVybmFsUmVtZW1iZXJlZFNldChK
U0M6OlZNJiB2bSwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEBh
dXRvcmVsZWFzZXBvb2wgewogICAgICAgICBKU1ZpcnR1YWxNYWNoaW5lICp2aXJ0dWFsTWFjaGlu
ZSA9IFtKU1ZNV3JhcHBlckNhY2hlIHdyYXBwZXJGb3JKU0NvbnRleHRHcm91cFJlZjp0b1JlZigm
dm0pXTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWaXJ0dWFsTWFjaGluZUlu
dGVybmFsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1ZpcnR1
YWxNYWNoaW5lSW50ZXJuYWwuaAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL0FQSS9KU1ZpcnR1YWxNYWNoaW5lSW50ZXJuYWwuaAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTcgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0zMiw3ICszMiw3IEBACiAKIG5hbWVzcGFjZSBKU0MgewogY2xhc3MgVk07Ci1jbGFzcyBTbG90
VmlzaXRvcjsKK2NsYXNzIEFic3RyYWN0U2xvdFZpc2l0b3I7CiB9CiAKICNpZiBkZWZpbmVkKF9f
T0JKQ19fKQpAQCAtNTQsOCArNTQsOCBAQCBKU0NvbnRleHRHcm91cFJlZiBnZXRHcm91cEZyb21W
aXJ0dWFsTWFjCiAKICNlbmRpZiAvLyBkZWZpbmVkKF9fT0JKQ19fKQogCi12b2lkIHNjYW5FeHRl
cm5hbE9iamVjdEdyYXBoKEpTQzo6Vk0mLCBKU0M6OlNsb3RWaXNpdG9yJiwgdm9pZCogcm9vdCk7
Ci12b2lkIHNjYW5FeHRlcm5hbFJlbWVtYmVyZWRTZXQoSlNDOjpWTSYsIEpTQzo6U2xvdFZpc2l0
b3ImKTsKK3ZvaWQgc2NhbkV4dGVybmFsT2JqZWN0R3JhcGgoSlNDOjpWTSYsIEpTQzo6QWJzdHJh
Y3RTbG90VmlzaXRvciYsIHZvaWQqIHJvb3QpOwordm9pZCBzY2FuRXh0ZXJuYWxSZW1lbWJlcmVk
U2V0KEpTQzo6Vk0mLCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKTsKIAogI2VuZGlmIC8vIEpT
Q19PQkpDX0FQSV9FTkFCTEVECiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvTWFy
a2VkSlNWYWx1ZVJlZkFycmF5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvQVBJL01hcmtlZEpTVmFsdWVSZWZBcnJheS5jcHAJKHJldmlzaW9uIDI3MzExOSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvTWFya2VkSlNWYWx1ZVJlZkFycmF5LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIwLTIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC00Niw3ICs0Niw4IEBAIE1hcmtlZEpTVmFsdWVSZWZBcnJheTo6fk1hcmtlZEpTVmFs
dWVSZWYKICAgICAgICAgcmVtb3ZlKCk7CiB9CiAKLXZvaWQgTWFya2VkSlNWYWx1ZVJlZkFycmF5
Ojp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1l
IFZpc2l0b3I+Cit2b2lkIE1hcmtlZEpTVmFsdWVSZWZBcnJheTo6dmlzaXRBZ2dyZWdhdGUoVmlz
aXRvciYgdmlzaXRvcikKIHsKICAgICBKU1ZhbHVlUmVmKiBidWZmZXIgPSBkYXRhKCk7CiAgICAg
Zm9yICh1bnNpZ25lZCBpbmRleCA9IDA7IGluZGV4IDwgbV9zaXplOyArK2luZGV4KSB7CkBAIC02
Miw0ICs2Myw3IEBAIHZvaWQgTWFya2VkSlNWYWx1ZVJlZkFycmF5Ojp2aXNpdEFnZ3JlZ2EKICAg
ICB9CiB9CiAKK3RlbXBsYXRlIHZvaWQgTWFya2VkSlNWYWx1ZVJlZkFycmF5Ojp2aXNpdEFnZ3Jl
Z2F0ZShBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIE1hcmtlZEpTVmFsdWVS
ZWZBcnJheTo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImKTsKKwogfSAvLyBuYW1lc3BhY2Ug
SlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL01hcmtlZEpTVmFsdWVSZWZBcnJh
eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvTWFya2VkSlNWYWx1
ZVJlZkFycmF5LmgJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9B
UEkvTWFya2VkSlNWYWx1ZVJlZkFycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjIsNyArNjIsNyBAQCBw
dWJsaWM6CiAgICAgICAgIHJldHVybiBtX2lubGluZUJ1ZmZlcjsKICAgICB9CiAKLSAgICB2b2lk
IHZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlz
aXRvcj4gdm9pZCB2aXNpdEFnZ3JlZ2F0ZShWaXNpdG9yJik7CiAKIHByaXZhdGU6CiAgICAgdW5z
aWduZWQgbV9zaXplOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQVBJ
V3JhcHBlckdsb2JhbE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL0FQSS9nbGliL0pTQVBJV3JhcHBlckdsb2JhbE9iamVjdC5jcHAJKHJldmlzaW9uIDI3MzEx
OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0FQSVdyYXBwZXJHbG9iYWxP
YmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OSw2ICs1OSw4IEBAIHN0YXRpYyBKU0NfREVD
TEFSRV9IT1NUX0ZVTkNUSU9OKGNvbnN0cnUKIHN0YXRpYyBKU0NfREVDTEFSRV9DVVNUT01fR0VU
VEVSKGNhbGxiYWNrR2V0dGVySlNBUElXcmFwcGVyR2xvYmFsT2JqZWN0Q2FsbGJhY2tPYmplY3Qp
Owogc3RhdGljIEpTQ19ERUNMQVJFX0NVU1RPTV9HRVRURVIoc3RhdGljRnVuY3Rpb25HZXR0ZXJK
U0FQSVdyYXBwZXJHbG9iYWxPYmplY3RDYWxsYmFja09iamVjdCk7CiAKK0RFRklORV9WSVNJVF9D
SElMRFJFTl9XSVRIX01PRElGSUVSKHRlbXBsYXRlPD4sIEpTQ2FsbGJhY2tPYmplY3Q8SlNBUElX
cmFwcGVyR2xvYmFsT2JqZWN0Pik7CisKIHRlbXBsYXRlIDw+IGNvbnN0IENsYXNzSW5mbyBKU0Nh
bGxiYWNrT2JqZWN0PEpTQVBJV3JhcHBlckdsb2JhbE9iamVjdD46OnNfaW5mbyA9IHsgIkpTQVBJ
V3JhcHBlckdsb2JhbE9iamVjdCIsICZCYXNlOjpzX2luZm8sIG51bGxwdHIsIG51bGxwdHIsIENS
RUFURV9NRVRIT0RfVEFCTEUoSlNDYWxsYmFja09iamVjdCkgfTsKIHRlbXBsYXRlPD4gY29uc3Qg
Ym9vbCBKU0NhbGxiYWNrT2JqZWN0PEpTQVBJV3JhcHBlckdsb2JhbE9iamVjdD46Om5lZWRzRGVz
dHJ1Y3Rpb24gPSB0cnVlOwogCkBAIC0xNDQsOSArMTQ2LDQgQEAgdm9pZCBKU0FQSVdyYXBwZXJH
bG9iYWxPYmplY3Q6OmZpbmlzaENyZQogICAgIFdlYWtTZXQ6OmFsbG9jYXRlKHRoaXMsIGpzQVBJ
V3JhcHBlckdsb2JhbE9iamVjdEhhbmRsZU93bmVyKCksIDApOyAvLyBCYWxhbmNlZCBpbiBKU0FQ
SVdyYXBwZXJHbG9iYWxPYmplY3RIYW5kbGVPd25lcjo6ZmluYWxpemUuCiB9CiAKLXZvaWQgSlNB
UElXcmFwcGVyR2xvYmFsT2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgSlNDOjpT
bG90VmlzaXRvciYgdmlzaXRvcikKLXsKLSAgICBCYXNlOjp2aXNpdENoaWxkcmVuKGNlbGwsIHZp
c2l0b3IpOwotfQotCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9BUEkvZ2xpYi9KU0FQSVdyYXBwZXJHbG9iYWxPYmplY3QuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNBUElXcmFwcGVyR2xvYmFsT2JqZWN0LmgJ
KHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0FQ
SVdyYXBwZXJHbG9iYWxPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMzksNyArMzksNiBAQCBw
dWJsaWM6CiAgICAgc3RhdGljIHZvaWQgc3Vic3BhY2VGb3IoVk0mKSB7IFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7IH0KIAogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKLSAgICBz
dGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKTsKIAog
ICAgIEpTQ0dMaWJXcmFwcGVyT2JqZWN0KiB3cmFwcGVkT2JqZWN0KCkgY29uc3QgeyByZXR1cm4g
bV93cmFwcGVkT2JqZWN0OyB9CiAgICAgdm9pZCBzZXRXcmFwcGVkT2JqZWN0KEpTQ0dMaWJXcmFw
cGVyT2JqZWN0KiB3cmFwcGVkT2JqZWN0KSB7IG1fd3JhcHBlZE9iamVjdCA9IHdyYXBwZWRPYmpl
Y3Q7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0FQSVdyYXBwZXJP
YmplY3RHTGliLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2ds
aWIvSlNBUElXcmFwcGVyT2JqZWN0R0xpYi5jcHAJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0FQSVdyYXBwZXJPYmplY3RHTGliLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1
ZGUgIkpTQVBJV3JhcHBlck9iamVjdC5oIgogCisjaW5jbHVkZSAiQWJzdHJhY3RTbG90VmlzaXRv
ci5oIgogI2luY2x1ZGUgIkpTQ0dMaWJXcmFwcGVyT2JqZWN0LmgiCiAjaW5jbHVkZSAiSlNDSW5s
aW5lcy5oIgogI2luY2x1ZGUgIkpTQ2FsbGJhY2tPYmplY3QuaCIKQEAgLTM2LDcgKzM3LDcgQEAK
IGNsYXNzIEpTQVBJV3JhcHBlck9iamVjdEhhbmRsZU93bmVyIGZpbmFsIDogcHVibGljIEpTQzo6
V2Vha0hhbmRsZU93bmVyIHsKIHB1YmxpYzoKICAgICB2b2lkIGZpbmFsaXplKEpTQzo6SGFuZGxl
PEpTQzo6VW5rbm93bj4sIHZvaWQqKSBmaW5hbDsKLSAgICBib29sIGlzUmVhY2hhYmxlRnJvbU9w
YXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6
U2xvdFZpc2l0b3ImLCBjb25zdCBjaGFyKiopIGZpbmFsOworICAgIGJvb2wgaXNSZWFjaGFibGVG
cm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCwg
SlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiwgY29uc3QgY2hhcioqKSBmaW5hbDsKIH07CiAKIHN0
YXRpYyBKU0FQSVdyYXBwZXJPYmplY3RIYW5kbGVPd25lcioganNBUElXcmFwcGVyT2JqZWN0SGFu
ZGxlT3duZXIoKQpAQCAtNTUsNyArNTYsNyBAQCB2b2lkIEpTQVBJV3JhcHBlck9iamVjdEhhbmRs
ZU93bmVyOjpmaW5hCiAgICAgSlNDOjpXZWFrU2V0OjpkZWFsbG9jYXRlKEpTQzo6V2Vha0ltcGw6
OmFzV2Vha0ltcGwoaGFuZGxlLnNsb3QoKSkpOwogfQogCi1ib29sIEpTQVBJV3JhcHBlck9iamVj
dEhhbmRsZU93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6
OlVua25vd24+IGhhbmRsZSwgdm9pZCosIEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0
IGNoYXIqKikKK2Jvb2wgSlNBUElXcmFwcGVyT2JqZWN0SGFuZGxlT3duZXI6OmlzUmVhY2hhYmxl
RnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwg
SlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiopCiB7CiAgICAg
SlNDOjpKU0FQSVdyYXBwZXJPYmplY3QqIHdyYXBwZXJPYmplY3QgPSBKU0M6OmpzQ2FzdDxKU0M6
OkpTQVBJV3JhcHBlck9iamVjdCo+KGhhbmRsZS5nZXQoKS5hc0NlbGwoKSk7CiAgICAgLy8gV2Ug
dXNlIHRoZSBKU0dsb2JhbE9iamVjdCB3aGVuIHByb2Nlc3Npbmcgd2VhayBoYW5kbGVzIHRvIHBy
ZXZlbnQgdGhlIHNpdHVhdGlvbiB3aGVyZSB1c2luZwpAQCAtNzIsNiArNzMsOCBAQCBzdGF0aWMg
SlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElPTihjb25zdHJ1CiBzdGF0aWMgSlNDX0RFQ0xBUkVfQ1VT
VE9NX0dFVFRFUihjYWxsYmFja0dldHRlckpTQVBJV3JhcHBlck9iamVjdENhbGxiYWNrT2JqZWN0
KTsKIHN0YXRpYyBKU0NfREVDTEFSRV9DVVNUT01fR0VUVEVSKHN0YXRpY0Z1bmN0aW9uR2V0dGVy
SlNBUElXcmFwcGVyT2JqZWN0Q2FsbGJhY2tPYmplY3QpOwogCitERUZJTkVfVklTSVRfQ0hJTERS
RU5fV0lUSF9NT0RJRklFUih0ZW1wbGF0ZTw+LCBKU0NhbGxiYWNrT2JqZWN0PEpTQVBJV3JhcHBl
ck9iamVjdD4pOworCiB0ZW1wbGF0ZSA8PiBjb25zdCBDbGFzc0luZm8gSlNDYWxsYmFja09iamVj
dDxKU0FQSVdyYXBwZXJPYmplY3Q+OjpzX2luZm8gPSB7ICJKU0FQSVdyYXBwZXJPYmplY3QiLCAm
QmFzZTo6c19pbmZvLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTQ2Fs
bGJhY2tPYmplY3QpIH07CiB0ZW1wbGF0ZTw+IGNvbnN0IGJvb2wgSlNDYWxsYmFja09iamVjdDxK
U0FQSVdyYXBwZXJPYmplY3Q+OjpuZWVkc0Rlc3RydWN0aW9uID0gdHJ1ZTsKIApAQCAtMTU1LDkg
KzE1OCwxMiBAQCB2b2lkIEpTQVBJV3JhcHBlck9iamVjdDo6c2V0V3JhcHBlZE9iamVjCiAgICAg
bV93cmFwcGVkT2JqZWN0ID0gd3JhcHBlZE9iamVjdDsKIH0KIAotdm9pZCBKU0FQSVdyYXBwZXJP
YmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBKU0M6OlNsb3RWaXNpdG9yJiB2aXNp
dG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNBUElXcmFwcGVyT2JqZWN0
Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAg
ICAgQmFzZTo6dmlzaXRDaGlsZHJlbihjZWxsLCB2aXNpdG9yKTsKIH0KIAorREVGSU5FX1ZJU0lU
X0NISUxEUkVOX1dJVEhfTU9ESUZJRVIoSlNfRVhQT1JUX1BSSVZBVEUsIEpTQVBJV3JhcHBlck9i
amVjdCk7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xMTU4
LDYgKzExNTgsNyBAQAogCQk2NUI4MzkyRTFCQUNBRDM2MDA0NEU4MjQgLyogQ2FjaGVkUmVjb3Zl
cnkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1Qjgz
OTJDMUJBQ0E5MkEwMDQ0RTgyNCAvKiBDYWNoZWRSZWNvdmVyeS5oICovOyB9OwogCQk2QTM4Q0ZB
QTFFMzJCNUFCMDA2MDIwNkYgLyogQXN5bmNTdGFja1RyYWNlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2QTM4Q0ZBODFFMzJCNThCMDA2MDIwNkYgLyog
QXN5bmNTdGFja1RyYWNlLmggKi87IH07CiAJCTZBRDJDQjREMTlCOTE0MDEwMDA2NTcxOSAvKiBE
ZWJ1Z2dlckV2YWxFbmFibGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA2QUQyQ0I0QzE5QjkxNDAxMDAwNjU3MTkgLyogRGVidWdnZXJFdmFsRW5hYmxl
ci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTZC
Q0NFQzA0MjVEMUZBMjcwMDBGMzkxRCAvKiBWZXJpZmllclNsb3RWaXNpdG9ySW5saW5lcy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkJDQ0VDMDMyNUQx
RkEyNzAwMEYzOTFEIC8qIFZlcmlmaWVyU2xvdFZpc2l0b3JJbmxpbmVzLmggKi87IH07CiAJCTcw
MTEzRDRDMUE4REIwOTMwMDM4NDhDNCAvKiBJdGVyYXRvck9wZXJhdGlvbnMuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcwMTEzRDRBMUE4REIwOTMwMDM4
NDhDNCAvKiBJdGVyYXRvck9wZXJhdGlvbnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQk3MDEzQ0E4QzFCNDkxQTk0MDBDQUU2MTMgLyogSlNNaWNy
b3Rhc2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcw
MTNDQThBMUI0OTFBOTQwMENBRTYxMyAvKiBKU01pY3JvdGFzay5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTcwNUI0MUFDMUE2RTUwMUUwMDcxNjc1
NyAvKiBTeW1ib2wuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDcwNUI0MUE0MUE2RTUwMUUwMDcxNjc1NyAvKiBTeW1ib2wuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMTkyMCw2ICsxOTIxLDcgQEAKIAkJ
RTNGRjc1MzMxRDlDRUExODAwQzdFMTZEIC8qIERPTUpJVEdldHRlclNldHRlci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTNGRjc1MkYxRDlDRUExMjAw
QzdFMTZEIC8qIERPTUpJVEdldHRlclNldHRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCUU0OURDMTZDMTJFRjI5NEUwMDE4NEExRiAvKiBTb3Vy
Y2VQcm92aWRlckNhY2hlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBFNDlEQzE1MTEyRUYyNzIyMDAxODRBMUYgLyogU291cmNlUHJvdmlkZXJDYWNoZS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUU0OURD
MTZEMTJFRjI5NTMwMDE4NEExRiAvKiBTb3VyY2VQcm92aWRlckNhY2hlSXRlbS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQ5REMxNDkxMkVGMjYxQTAw
MTg0QTFGIC8qIFNvdXJjZVByb3ZpZGVyQ2FjaGVJdGVtLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJRkUwNDE1NTMyNTJFQzA3MzAwOTFFQjVEIC8q
IFNsb3RWaXNpdG9yTWFjcm9zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBGRTA0MTU1MjI1MkVDMDczMDA5MUVCNUQgLyogU2xvdFZpc2l0b3JNYWNyb3Mu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlGRTA1
RkFGRDFGRTRDRURBMDAwOTMyMzAgLyogRGVwcmVjYXRlZEluc3BlY3RvclZhbHVlcy5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5OTJENkExMTFGQkQ0
OTFEMDAwMjQ1RjQgLyogRGVwcmVjYXRlZEluc3BlY3RvclZhbHVlcy5jcHAgKi87IH07CiAJCUZF
MDg2QkNBMjEyM0RFRkIwMDNGMjkyOSAvKiBFbnRyeUZyYW1lLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTA4NkJDOTIxMjNERUZBMDAzRjI5MjkgLyog
RW50cnlGcmFtZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCUZFMEQ0QTA2MUFCOEREMEEwMDJGNTRCRiAvKiBFeGVjdXRpb25UaW1lTGltaXRUZXN0
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFMEQ0
QTA0MUFCOEREMEEwMDJGNTRCRiAvKiBFeGVjdXRpb25UaW1lTGltaXRUZXN0LmNwcCAqLzsgfTsK
QEAgLTE5NDIsOSArMTk0NCwxMSBAQAogCQlGRTFFMkMzRjIyNDBERDU4MDBGNkI3MjkgLyogTWFj
cm9Bc3NlbWJsZXJBUk02NEUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEZFMUUyQzNFMjI0MEQzMEIwMEY2QjcyOSAvKiBNYWNyb0Fzc2VtYmxlckFSTTY0
RS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUZF
MUUyQzQwMjI0MERENjIwMEY2QjcyOSAvKiBBUk02NEVBc3NlbWJsZXIuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFMUUyQzNEMjI0MEQyRjYwMEY2Qjcy
OSAvKiBBUk02NEVBc3NlbWJsZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQlGRTIwQ0U5RTE1RjA0QTk1MDBERjM0MzAgLyogTExJbnRDTG9vcC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUyMENFOUMx
NUYwNEE5NTAwREYzNDMwIC8qIExMSW50Q0xvb3AuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OworCQlGRTI4N0QwMjI1MkZCMkU4MDBENzIzRjkgLyogVmVy
aWZpZXJTbG90VmlzaXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRkUyODdEMDEyNTJGQjJFODAwRDcyM0Y5IC8qIFZlcmlmaWVyU2xvdFZpc2l0b3Iu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlGRTJB
ODc2MDFGMDIzODE2MDBFQjMxQjIgLyogTWluaW11bVJlc2VydmVkWm9uZVNpemUuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFMkE4NzVGMUYwMjM4MTYw
MEVCMzFCMiAvKiBNaW5pbXVtUmVzZXJ2ZWRab25lU2l6ZS5oICovOyB9OwogCQlGRTMwMjJEMzFF
M0Q3M0E1MDBCQUM0OTMgLyogU2lnaWxsQ3Jhc2hBbmFseXplci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUzMDIyRDExRTNENzM5NjAwQkFDNDkzIC8q
IFNpZ2lsbENyYXNoQW5hbHl6ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQlGRTMwMjJENzFFNDI4NTczMDBCQUM0OTMgLyogVk1JbnNwZWN0b3Iu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFMzAyMkQ1
MUU0Mjg1NjcwMEJBQzQ5MyAvKiBWTUluc3BlY3Rvci5oICovOyB9OworCQlGRTMzNkI1MzI1REI0
OTdEMDA5OEYwMzQgLyogTWFya2luZ0NvbnN0cmFpbnRFeGVjdXRvclBhaXIuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFMzM2QjUyMjVEQjQ5N0QwMDk4
RjAzNCAvKiBNYXJraW5nQ29uc3RyYWludEV4ZWN1dG9yUGFpci5oICovOyB9OwogCQlGRTM0MjIx
MjFENkI4MUMzMDAzMkJFODggLyogVGhyb3dTY29wZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUzNDIyMTExRDZCODE4QzAwMzJCRTg4IC8qIFRocm93
U2NvcGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQlGRTM0RUUyMTI0Mzk4QUFFMDBBQTJFN0MgLyogRW5zdXJlU3RpbGxBbGl2ZUhlcmUuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFMzRFRTIwMjQzOThB
OUEwMEFBMkU3QyAvKiBFbnN1cmVTdGlsbEFsaXZlSGVyZS5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUZFMzg0MjMzMjMyNEQ1MUIwMDlERDQ0NSAv
KiBPcHRpb25zTGlzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gRkUzODQyMzEyMzI0RDUxQjAwOURENDQ1IC8qIE9wdGlvbnNMaXN0LmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTE5ODAsNiArMTk4NCw4
IEBACiAJCUZFODBDMTk3MUQ3NzVDREQwMDg1MTBDMCAvKiBDYXRjaFNjb3BlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTgwQzE5NjFENzc1QjI3MDA4
NTEwQzAgLyogQ2F0Y2hTY29wZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCUZFOERFNTRCMjNBQzFEQUQwMDVDOTE0MiAvKiBDYWNoZWFibGVJZGVu
dGlmaWVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBG
RThERTU0QTIzQUMxREFEMDA1QzkxNDIgLyogQ2FjaGVhYmxlSWRlbnRpZmllci5oICovOyB9Owog
CQlGRThERTU0RDIzQUMxRTg2MDA1QzkxNDIgLyogQ2FjaGVhYmxlSWRlbnRpZmllcklubGluZXMu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFOERFNTRD
MjNBQzFFODYwMDVDOTE0MiAvKiBDYWNoZWFibGVJZGVudGlmaWVySW5saW5lcy5oICovOyB9Owor
CQlGRTkxMkI0RjI1MzExOTMzMDBGQUJEREYgLyogQWJzdHJhY3RTbG90VmlzaXRvci5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkU5MTJCNEUyNTMxMTkz
MzAwRkFCRERGIC8qIEFic3RyYWN0U2xvdFZpc2l0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlGRTkxMkI1MTI1MzExQUQxMDBGQUJEREYgLyog
QWJzdHJhY3RTbG90VmlzaXRvcklubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEZFOTEyQjUwMjUzMTFBRDEwMEZBQkRERiAvKiBBYnN0cmFjdFNs
b3RWaXNpdG9ySW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCUZFOTlCMjQ5MUMyNEMzRDMwMEM4MjE1OSAvKiBKSVROZWdHZW5lcmF0b3Iu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFOTlCMjQ4
MUMyNEI2RDMwMEM4MjE1OSAvKiBKSVROZWdHZW5lcmF0b3IuaCAqLzsgfTsKIAkJRkVBMDg2MjAx
ODJCN0EwNDAwRjZEODUxIC8qIEJyZWFrcG9pbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFQTA4NjFFMTgyQjdBMDQwMEY2RDg1MSAvKiBCcmVha3Bv
aW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
RkVBMDg2MjExODJCN0EwNDAwRjZEODUxIC8qIERlYnVnZ2VyUHJpbWl0aXZlcy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkVBMDg2MUYxODJCN0EwNDAw
RjZEODUxIC8qIERlYnVnZ2VyUHJpbWl0aXZlcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0zOTkxLDYgKzM5OTcsNyBAQAogCQk2QTM4Q0ZBODFF
MzJCNThCMDA2MDIwNkYgLyogQXN5bmNTdGFja1RyYWNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEFzeW5jU3RhY2tUcmFjZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk2QUQyQ0I0QzE5QjkxNDAxMDAwNjU3MTkgLyogRGVidWdnZXJFdmFsRW5hYmxlci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEZWJ1Z2dlckV2YWxFbmFibGVyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZCQTkzQzk1OTA0ODRDNUJBRDkzMTZFQSAvKiBK
U1NjcmlwdEZldGNoZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNTY3Jp
cHRGZXRjaGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTZCQ0NFQzAzMjVEMUZB
MjcwMDBGMzkxRCAvKiBWZXJpZmllclNsb3RWaXNpdG9ySW5saW5lcy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBWZXJpZmllclNsb3RWaXNpdG9ySW5saW5lcy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk3MDExM0Q0OTFBOERCMDkzMDAzODQ4QzQgLyogSXRlcmF0
b3JPcGVyYXRpb25zLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEl0
ZXJhdG9yT3BlcmF0aW9ucy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcwMTEz
RDRBMUE4REIwOTMwMDM4NDhDNCAvKiBJdGVyYXRvck9wZXJhdGlvbnMuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSXRlcmF0b3JPcGVyYXRpb25zLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTcwMTNDQTg5MUI0OTFBOTQwMENBRTYxMyAvKiBKU01pY3JvdGFzay5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU01pY3JvdGFzay5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01MjI3LDYgKzUyMzQsNyBAQAogCQlGNjky
QTg4NzAyNTU1OTdEMDFGRjYwRjcgLyogSlNDSlNWYWx1ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0NKU1ZhbHVlLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB9OwogCQlGNzM5MjY5MThEQzY0MzMw
QUZDREYwRDcgLyogSlNTb3VyY2VDb2RlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEpTU291cmNlQ29kZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUZFMDAyNjIyMjNGM0FGMzMwMDNBMzU4RiAvKiBXZWJBc3NlbWJseS5hc20gKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmFzbS5hc207
IG5hbWUgPSBXZWJBc3NlbWJseS5hc207IHBhdGggPSBsbGludC9XZWJBc3NlbWJseS5hc207IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZFMDQxNTUyMjUyRUMwNzMwMDkxRUI1RCAvKiBT
bG90VmlzaXRvck1hY3Jvcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTbG90
VmlzaXRvck1hY3Jvcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTA4NkJDOTIx
MjNERUZBMDAzRjI5MjkgLyogRW50cnlGcmFtZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBFbnRyeUZyYW1lLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFMEQ0
QTA0MUFCOEREMEEwMDJGNTRCRiAvKiBFeGVjdXRpb25UaW1lTGltaXRUZXN0LmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEV4ZWN1dGlvblRpbWVMaW1pdFRlc3QuY3Bw
OyBwYXRoID0gQVBJL3Rlc3RzL0V4ZWN1dGlvblRpbWVMaW1pdFRlc3QuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlGRTBENEEwNTFBQjhERDBBMDAyRjU0QkYgLyogRXhlY3V0aW9u
VGltZUxpbWl0VGVzdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBFeGVjdXRp
b25UaW1lTGltaXRUZXN0Lmg7IHBhdGggPSBBUEkvdGVzdHMvRXhlY3V0aW9uVGltZUxpbWl0VGVz
dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNTI2MSwxMiArNTI2OSwxNSBAQAog
CQlGRTFFMkMzRTIyNDBEMzBCMDBGNkI3MjkgLyogTWFjcm9Bc3NlbWJsZXJBUk02NEUuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWFjcm9Bc3NlbWJsZXJBUk02NEUuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkUyMENFOUIxNUYwNEE5NTAwREYzNDMwIC8qIExM
SW50Q0xvb3AuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gTExJbnRD
TG9vcC5jcHA7IHBhdGggPSBsbGludC9MTEludENMb29wLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJRkUyMENFOUMxNUYwNEE5NTAwREYzNDMwIC8qIExMSW50Q0xvb3AuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gTExJbnRDTG9vcC5oOyBwYXRoID0gbGxpbnQv
TExJbnRDTG9vcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRTI4N0QwMTI1MkZC
MkU4MDBENzIzRjkgLyogVmVyaWZpZXJTbG90VmlzaXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBWZXJpZmllclNsb3RWaXNpdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUZFMkE4NzVGMUYwMjM4MTYwMEVCMzFCMiAvKiBNaW5pbXVtUmVzZXJ2ZWRab25l
U2l6ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBNaW5pbXVtUmVzZXJ2ZWRab25lU2l6ZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlGRTJCRDY2RTI1QzBEQzgyMDA5OTlEM0IgLyogVmVyaWZp
ZXJTbG90VmlzaXRvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBW
ZXJpZmllclNsb3RWaXNpdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkUy
RTZBN0ExRDZFQTVGRTAwNjBGODk2IC8qIFRocm93U2NvcGUuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gVGhyb3dTY29wZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUZFMzAyMkQwMUUzRDczOTYwMEJBQzQ5MyAvKiBTaWdpbGxDcmFzaEFuYWx5emVy
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNpZ2lsbENyYXNoQW5h
bHl6ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTMwMjJEMTFFM0Q3Mzk2
MDBCQUM0OTMgLyogU2lnaWxsQ3Jhc2hBbmFseXplci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBTaWdpbGxDcmFzaEFuYWx5emVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUZFMzAyMkQ0MUU0Mjg1NjcwMEJBQzQ5MyAvKiBWTUluc3BlY3Rvci5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBWTUluc3BlY3Rvci5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFMzAyMkQ1MUU0Mjg1NjcwMEJBQzQ5MyAvKiBWTUluc3Bl
Y3Rvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBWTUluc3BlY3Rvci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRTMzNkI1MjI1REI0OTdEMDA5OEYwMzQgLyog
TWFya2luZ0NvbnN0cmFpbnRFeGVjdXRvclBhaXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gTWFya2luZ0NvbnN0cmFpbnRFeGVjdXRvclBhaXIuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJRkUzNDIyMTExRDZCODE4QzAwMzJCRTg4IC8qIFRocm93U2NvcGUuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGhyb3dTY29wZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlGRTM0RUUyMDI0Mzk4QTlBMDBBQTJFN0MgLyogRW5zdXJlU3Rp
bGxBbGl2ZUhlcmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRW5zdXJlU3RpbGxBbGl2ZUhlcmUuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkUzNEVFMjIyNDM5OEI4NTAwQUEyRTdDIC8qIEVu
c3VyZVN0aWxsQWxpdmVIZXJlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEVuc3VyZVN0aWxsQWxpdmVIZXJlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTUzMzUsNiArNTM0Niw4IEBACiAJCUZFOERFNTRDMjNBQzFFODYwMDVDOTE0MiAvKiBDYWNo
ZWFibGVJZGVudGlmaWVySW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBDYWNoZWFibGVJZGVudGlmaWVySW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlGRThERTU0RTIzQUMzQThFMDA1QzkxNDIgLyogQ2FjaGVhYmxlSWRlbnRpZmllci5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBDYWNoZWFibGVJZGVudGlmaWVyLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJRkU5MEJCM0ExQjdDRjY0RTAwNkIzRjAzIC8qIFZNSW5saW5lcy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBWTUlubGluZXMuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkU5MTJCNEUyNTMxMTkzMzAwRkFCRERGIC8qIEFic3RyYWN0
U2xvdFZpc2l0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQWJzdHJhY3RT
bG90VmlzaXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRTkxMkI1MDI1MzEx
QUQxMDBGQUJEREYgLyogQWJzdHJhY3RTbG90VmlzaXRvcklubGluZXMuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gQWJzdHJhY3RTbG90VmlzaXRvcklubGluZXMuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkU5OEI1QjYxQkI5QUUxMTAwNzNFN0E2IC8qIEpJVFN1
YkdlbmVyYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKSVRTdWJHZW5l
cmF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkU5OUIyNDcxQzI0QjZEMzAw
QzgyMTU5IC8qIEpJVE5lZ0dlbmVyYXRvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBKSVROZWdHZW5lcmF0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlGRTk5QjI0ODFDMjRCNkQzMDBDODIxNTkgLyogSklUTmVnR2VuZXJhdG9yLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpJVE5lZ0dlbmVyYXRvci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtNjI4Miw2ICs2Mjk1LDggQEAKIAkJMTQyRTMxMkExMzRGRjBB
NjAwQUZBREI1IC8qIGhlYXAgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVu
ID0gKAorCQkJCUZFOTEyQjRFMjUzMTE5MzMwMEZBQkRERiAvKiBBYnN0cmFjdFNsb3RWaXNpdG9y
LmggKi8sCisJCQkJRkU5MTJCNTAyNTMxMUFEMTAwRkFCRERGIC8qIEFic3RyYWN0U2xvdFZpc2l0
b3JJbmxpbmVzLmggKi8sCiAJCQkJMEZFQzNDNTAxRjMzQTQxNjAwRjU5QjZDIC8qIEFsaWduZWRN
ZW1vcnlBbGxvY2F0b3IuY3BwICovLAogCQkJCTBGRUMzQzUxMUYzM0E0MTYwMEY1OUI2QyAvKiBB
bGlnbmVkTWVtb3J5QWxsb2NhdG9yLmggKi8sCiAJCQkJMEZBNzYyMEExREI5NTlGNjAwQjdBMkZE
IC8qIEFsbG9jYXRpbmdTY29wZS5oICovLApAQCAtNjQxMyw2ICs2NDI4LDcgQEAKIAkJCQkwRjdE
RjEzMDFFMjk3MEQ1MDA5NTk1MUIgLyogTWFya2VkU3BhY2VJbmxpbmVzLmggKi8sCiAJCQkJMEY2
NjBFMzMxRTA1MTdCNzAwMzE0NjJDIC8qIE1hcmtpbmdDb25zdHJhaW50LmNwcCAqLywKIAkJCQkw
RjY2MEUzNDFFMDUxN0I3MDAzMTQ2MkMgLyogTWFya2luZ0NvbnN0cmFpbnQuaCAqLywKKwkJCQlG
RTMzNkI1MjI1REI0OTdEMDA5OEYwMzQgLyogTWFya2luZ0NvbnN0cmFpbnRFeGVjdXRvclBhaXIu
aCAqLywKIAkJCQkwRjY2MEUzNTFFMDUxN0I3MDAzMTQ2MkMgLyogTWFya2luZ0NvbnN0cmFpbnRT
ZXQuY3BwICovLAogCQkJCTBGNjYwRTM2MUUwNTE3QjgwMDMxNDYyQyAvKiBNYXJraW5nQ29uc3Ry
YWludFNldC5oICovLAogCQkJCTBGOURBQTA2MUZEMUMzQzgwMDc5QzVCMiAvKiBNYXJraW5nQ29u
c3RyYWludFNvbHZlci5jcHAgKi8sCkBAIC02NDM5LDYgKzY0NTUsNyBAQAogCQkJCUMyMjU0OTQy
MTVGN0RCQUEwMDY1RTg5OCAvKiBTbG90VmlzaXRvci5jcHAgKi8sCiAJCQkJMTRCQTc4RjAxM0FB
Qjg4RjAwNUI3QzJDIC8qIFNsb3RWaXNpdG9yLmggKi8sCiAJCQkJMEZDQjQwODUxNUMwQTNDMzAw
NDg5MzJCIC8qIFNsb3RWaXNpdG9ySW5saW5lcy5oICovLAorCQkJCUZFMDQxNTUyMjUyRUMwNzMw
MDkxRUI1RCAvKiBTbG90VmlzaXRvck1hY3Jvcy5oICovLAogCQkJCTBGREU4N0ZBMURGRTZFNTAw
MDY0QzM5MCAvKiBTcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyLmNwcCAqLywKIAkJCQkwRkRFODdG
QjFERkU2RTUwMDA2NEMzOTAgLyogU3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlci5oICovLAogCQkJ
CTBGNEY4Mjg5MUUzMUI5NzEwMDc1MTg0QyAvKiBTdG9jaGFzdGljU3BhY2VUaW1lTXV0YXRvclNj
aGVkdWxlci5jcHAgKi8sCkBAIC02NDU2LDYgKzY0NzMsOSBAQAogCQkJCTBGMUZCMzhBMUUxNzNB
NjIwMEE5QkU1MCAvKiBTeW5jaHJvbm91c1N0b3BUaGVXb3JsZE11dGF0b3JTY2hlZHVsZXIuY3Bw
ICovLAogCQkJCTBGMUZCMzhCMUUxNzNBNjIwMEE5QkU1MCAvKiBTeW5jaHJvbm91c1N0b3BUaGVX
b3JsZE11dGF0b3JTY2hlZHVsZXIuaCAqLywKIAkJCQkxNDE0NDhDQzEzQTE3ODM3MDBGNUJBMUEg
LyogVGlueUJsb29tRmlsdGVyLmggKi8sCisJCQkJRkUyQkQ2NkUyNUMwREM4MjAwOTk5RDNCIC8q
IFZlcmlmaWVyU2xvdFZpc2l0b3IuY3BwICovLAorCQkJCUZFMjg3RDAxMjUyRkIyRTgwMEQ3MjNG
OSAvKiBWZXJpZmllclNsb3RWaXNpdG9yLmggKi8sCisJCQkJNkJDQ0VDMDMyNUQxRkEyNzAwMEYz
OTFEIC8qIFZlcmlmaWVyU2xvdFZpc2l0b3JJbmxpbmVzLmggKi8sCiAJCQkJMEY0RDhDNzIxRkM3
QTk3MzAwMUQzMkFDIC8qIFZpc2l0Q291bnRlci5oICovLAogCQkJCTBGOTUyQTlGMURGNzg2MDcw
MEUwNkZCRCAvKiBWaXNpdFJhY2VLZXkuY3BwICovLAogCQkJCTBGOTUyQUEwMURGNzg2MDcwMEUw
NkZCRCAvKiBWaXNpdFJhY2VLZXkuaCAqLywKQEAgLTkzMDEsNiArOTMyMSw3IEBACiAJCQkJMTQ3
QjgzQUMwRTZEQjhDOTAwNDc3NUE0IC8qIEJhdGNoZWRUcmFuc2l0aW9uT3B0aW1pemVyLmggaW4g
SGVhZGVycyAqLywKIAkJCQlFMzVFODlGRDI1QzUwRjg3MDA3MUVFMUUgLyogQmlnSW50NjRBcnJh
eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODY5NzZFNUYxRkEzRThCQzAwRTdDNEUxIC8qIEJpZ0lu
dENvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKKwkJCQlGRTA0MTU1MzI1MkVDMDczMDA5MUVC
NUQgLyogU2xvdFZpc2l0b3JNYWNyb3MuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2NjczOUQyMTNC
RkRFNzEwMDIzRDg3QyAvKiBCaWdJbnRlZ2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjE4MTY3
NzFGQjc5MjQyMDBFQ0M0RUMgLyogQmlnSW50T2JqZWN0LmggaW4gSGVhZGVycyAqLywKIAkJCQk4
Njk3NkU1RTFGQTNFOEI2MDBFN0M0RTEgLyogQmlnSW50UHJvdG90eXBlLmggaW4gSGVhZGVycyAq
LywKQEAgLTk1ODIsNiArOTYwMyw3IEBACiAJCQkJMEZEODJFNTcxNDFEQUYxMDAwMTc5Qzk0IC8q
IERGR09TUkVudHJ5LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkQ4QTMyNjE3RDUxRjU3MDBDQTJD
NDAgLyogREZHT1NSRW50cnlwb2ludENyZWF0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGQzA5NzZBMTQ2OEE2RjcwMENGMjQ0MiAvKiBERkdPU1JFeGl0LmggaW4gSGVhZGVycyAqLywK
KwkJCQlGRTkxMkI0RjI1MzExOTMzMDBGQUJEREYgLyogQWJzdHJhY3RTbG90VmlzaXRvci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEYyMzVCRUMxNzE3OEU3MzAwNjkwQzdGIC8qIERGR09TUkV4aXRC
YXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkZCOTIxQzE2RDAyRjExMDA1NUE1REIgLyogREZH
T1NSRXhpdENvbXBpbGF0aW9uSW5mby5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY3MDI1QUExNzE0
QjBGQzAwMzgyQzBFIC8qIERGR09TUkV4aXRDb21waWxlckNvbW1vbi5oIGluIEhlYWRlcnMgKi8s
CkBAIC05ODY4LDYgKzk4OTAsNyBAQAogCQkJCUE1MTNFNUJFMTg1QkZBQ0MwMDdFOTVBRCAvKiBJ
bmplY3RlZFNjcmlwdEhvc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1MTNFNUNCMTg1Rjk2MjQw
MDdFOTVBRCAvKiBJbmplY3RlZFNjcmlwdE1hbmFnZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1
ODQwRTIxMTg3QjdCODYwMDg0M0IxMCAvKiBJbmplY3RlZFNjcmlwdE1vZHVsZS5oIGluIEhlYWRl
cnMgKi8sCisJCQkJRkUyODdEMDIyNTJGQjJFODAwRDcyM0Y5IC8qIFZlcmlmaWVyU2xvdFZpc2l0
b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1MTNFNUM3MTg1Rjk0NDYwMDdFOTVBRCAvKiBJbmpl
Y3RlZFNjcmlwdFNvdXJjZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTk1OUU5MzIxQkQxODI3OTAw
MUFBNDEzIC8qIGlubGluZS1hbmQtbWluaWZ5LXN0eWxlc2hlZXRzLWFuZC1zY3JpcHRzLnB5IGlu
IEhlYWRlcnMgKi8sCiAJCQkJNzkwNUJCNjkxRDEyMDUwRTAwMTlGRTU3IC8qIElubGluZUFjY2Vz
cy5oIGluIEhlYWRlcnMgKi8sCkBAIC0xMDAwNyw2ICsxMDAzMCw3IEBACiAJCQkJNTNDNEY2NkIy
MUIxQTQwOTAwMkZEMDA5IC8qIEpTQVBJR2xvYmFsT2JqZWN0LmggaW4gSGVhZGVycyAqLywKIAkJ
CQk4NDA0ODAxMzEwMjFBMUQ5MDA4RTdGMDEgLyogSlNBUElWYWx1ZVdyYXBwZXIuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUMyQ0YzOUMyMTZFMTVBODEwMERENjlCRSAvKiBKU0FQSVdyYXBwZXJPYmpl
Y3QuaCBpbiBIZWFkZXJzICovLAorCQkJCUZFMzM2QjUzMjVEQjQ5N0QwMDk4RjAzNCAvKiBNYXJr
aW5nQ29uc3RyYWludEV4ZWN1dG9yUGFpci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MTcw
RTE2RjVDRDAwQjM0NDYwIC8qIEpTQXJyYXkuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkI2NkUz
MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RjJCNjZFNTE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yLmggaW4g
SGVhZGVycyAqLywKQEAgLTEwMDQzLDYgKzEwMDY3LDcgQEAKIAkJCQlBNThDMDI0MjE4RTRBNDFB
MDAwMzJCQzUgLyogSlNDb250ZXh0UHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0
MUUwRTE2RjVDRDAwQjM0NDYwIC8qIEpTQ29udGV4dFJlZi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QTVFQTcwRUUxOUY1QjVDNDAwOThGNUVDIC8qIEpTQ29udGV4dFJlZkluc3BlY3RvclN1cHBvcnQu
aCBpbiBIZWFkZXJzICovLAorCQkJCTZCQ0NFQzA0MjVEMUZBMjcwMDBGMzkxRCAvKiBWZXJpZmll
clNsb3RWaXNpdG9ySW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTVEMkU2NjUxOTVFMTc0
MDAwQTUxOEU3IC8qIEpTQ29udGV4dFJlZkludGVybmFsLmggaW4gSGVhZGVycyAqLywKIAkJCQkx
NDhDRDFEODEwOENGOTAyMDA4MTYzQzYgLyogSlNDb250ZXh0UmVmUHJpdmF0ZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJRkU3NDk3RTYyMDkwMDFCMTAwMDM1NjVCIC8qIEpTQ1B0clRhZy5oIGluIEhl
YWRlcnMgKi8sCkBAIC0xMDE3NCw2ICsxMDE5OSw3IEBACiAJCQkJNzk1QUM2MTgyMEEyMzU1RTAw
NTJDNzZDIC8qIEpTVmlydHVhbE1hY2hpbmVQcml2YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQlB
N0NBM0FFODE3REE0MUFFMDA2NTM4QUYgLyogSlNXZWFrTWFwLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBNzQ4MkU5MzExNkE3Q0FEMDAzQjA3MTIgLyogSlNXZWFrT2JqZWN0TWFwUmVmSW50ZXJuYWwu
aCBpbiBIZWFkZXJzICovLAorCQkJCUZFOTEyQjUxMjUzMTFBRDEwMEZBQkRERiAvKiBBYnN0cmFj
dFNsb3RWaXNpdG9ySW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc0ODJCOTMxMTY3MTE0
NzAwM0IwNzEyIC8qIEpTV2Vha09iamVjdE1hcFJlZlByaXZhdGUuaCBpbiBIZWFkZXJzICovLAog
CQkJCTUzOUJGQkIwMjJBRDNDREMwMDIzRjRDMCAvKiBKU1dlYWtPYmplY3RSZWYuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGMEIyODZCMUVCOEU2Q0YwMDBFQjVEMiAvKiBKU1dlYWtQcml2YXRlLmgg
aW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL3drYnVp
bHRpbnMvYnVpbHRpbnNfZ2VuZXJhdGVfaW50ZXJuYWxzX3dyYXBwZXJfaGVhZGVyLnB5Cj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL3drYnVpbHRpbnMvYnVpbHRp
bnNfZ2VuZXJhdGVfaW50ZXJuYWxzX3dyYXBwZXJfaGVhZGVyLnB5CShyZXZpc2lvbiAyNzMxMTkp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy93a2J1aWx0aW5zL2J1aWx0aW5zX2dl
bmVyYXRlX2ludGVybmFsc193cmFwcGVyX2hlYWRlci5weQkod29ya2luZyBjb3B5KQpAQCAtMSw2
ICsxLDYgQEAKICMhL3Vzci9iaW4vZW52IHB5dGhvbgogIwotIyBDb3B5cmlnaHQgKGMpIDIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyBDb3B5cmlnaHQgKGMpIDIwMTYtMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAjCiAjIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogIyBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTkzLDcgKzkzLDcgQEAgY2xhc3MgQnVpbHRpbnNJbnRlcm5hbHNXcmFwcGVySGVh
ZGVyR2VuZQogCiAgICAgZGVmIGdlbmVyYXRlX21ldGhvZHMoc2VsZik6CiAgICAgICAgIHJldHVy
biAiIiIKLSAgICB2b2lkIHZpc2l0KEpTQzo6U2xvdFZpc2l0b3ImKTsKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBWaXNpdG9yPiB2b2lkIHZpc2l0KFZpc2l0b3ImKTsKICAgICB2b2lkIGluaXRpYWxp
emUoSlNET01HbG9iYWxPYmplY3QmKTsKICIiIgogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvU2NyaXB0cy93a2J1aWx0aW5zL2J1aWx0aW5zX2dlbmVyYXRlX2ludGVybmFsc193cmFwcGVy
X2ltcGxlbWVudGF0aW9uLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9T
Y3JpcHRzL3drYnVpbHRpbnMvYnVpbHRpbnNfZ2VuZXJhdGVfaW50ZXJuYWxzX3dyYXBwZXJfaW1w
bGVtZW50YXRpb24ucHkJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9TY3JpcHRzL3drYnVpbHRpbnMvYnVpbHRpbnNfZ2VuZXJhdGVfaW50ZXJuYWxzX3dyYXBwZXJf
aW1wbGVtZW50YXRpb24ucHkJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAjIS91c3Iv
YmluL2VudiBweXRob24KICMKLSMgQ29weXJpZ2h0IChjKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyMgQ29weXJpZ2h0IChjKSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogIwogIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICMgbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMjAsMTMg
KzEyMCwxNiBAQCBjbGFzcyBCdWlsdGluc0ludGVybmFsc1dyYXBwZXJJbXBsZW1lbnRhCiAgICAg
ICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMpCiAKICAgICBkZWYgZ2VuZXJhdGVfdmlzaXRfbWV0
aG9kKHNlbGYpOgotICAgICAgICBsaW5lcyA9IFsidm9pZCBKU0J1aWx0aW5JbnRlcm5hbEZ1bmN0
aW9uczo6dmlzaXQoSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikiLAorICAgICAgICBsaW5lcyA9
IFsidGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4iLAorICAgICAgICAgICAgICAgICAidm9pZCBK
U0J1aWx0aW5JbnRlcm5hbEZ1bmN0aW9uczo6dmlzaXQoVmlzaXRvciYgdmlzaXRvcikiLAogICAg
ICAgICAgICAgICAgICAieyJdCiAgICAgICAgIGZvciBvYmplY3QgaW4gc2VsZi5pbnRlcm5hbHM6
CiAgICAgICAgICAgICB2aXNpdCA9ICIgICAgJXMudmlzaXQodmlzaXRvcik7IiAlIHNlbGYubWVt
YmVyX25hbWUob2JqZWN0KQogICAgICAgICAgICAgbGluZXMuYXBwZW5kKEJ1aWx0aW5zR2VuZXJh
dG9yLndyYXBfd2l0aF9ndWFyZChvYmplY3QuYW5ub3RhdGlvbnMuZ2V0KCdjb25kaXRpb25hbCcp
LCB2aXNpdCkpCiAgICAgICAgIGxpbmVzLmFwcGVuZCgiICAgIFVOVVNFRF9QQVJBTSh2aXNpdG9y
KTsiKQogICAgICAgICBsaW5lcy5hcHBlbmQoIn1cbiIpCisgICAgICAgIGxpbmVzLmFwcGVuZCgi
dGVtcGxhdGUgdm9pZCBKU0J1aWx0aW5JbnRlcm5hbEZ1bmN0aW9uczo6dmlzaXQoQWJzdHJhY3RT
bG90VmlzaXRvciYpOyIpCisgICAgICAgIGxpbmVzLmFwcGVuZCgidGVtcGxhdGUgdm9pZCBKU0J1
aWx0aW5JbnRlcm5hbEZ1bmN0aW9uczo6dmlzaXQoU2xvdFZpc2l0b3ImKTtcbiIpCiAgICAgICAg
IHJldHVybiAnXG4nLmpvaW4obGluZXMpCiAKICAgICBkZWYgX2dlbmVyYXRlX2luaXRpYWxpemVf
c3RhdGljX2dsb2JhbHMoc2VsZik6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0
cy93a2J1aWx0aW5zL2J1aWx0aW5zX3RlbXBsYXRlcy5weQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvU2NyaXB0cy93a2J1aWx0aW5zL2J1aWx0aW5zX3RlbXBsYXRlcy5weQko
cmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvd2tidWls
dGlucy9idWlsdGluc190ZW1wbGF0ZXMucHkJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBA
CiAjIS91c3IvYmluL2VudiBweXRob24KICMKLSMgQ29weXJpZ2h0IChjKSAyMDE0LTIwMTkgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyBDb3B5cmlnaHQgKGMpIDIwMTQtMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAjIENvcHlyaWdodCAoQykgMjAxNSBDYW5v
biBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAjCiAjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMTg4LDcgKzE4
OCw3IEBAIHB1YmxpYzoKICAgICBleHBsaWNpdCAke29iamVjdE5hbWV9QnVpbHRpbkZ1bmN0aW9u
cyhKU0M6OlZNJiB2bSkgOiBtX3ZtKHZtKSB7IH0KIAogICAgIHZvaWQgaW5pdChKU0M6OkpTR2xv
YmFsT2JqZWN0Jik7Ci0gICAgdm9pZCB2aXNpdChKU0M6OlNsb3RWaXNpdG9yJik7CisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCB2aXNpdChWaXNpdG9yJik7CiAKIHB1YmxpYzoK
ICAgICBKU0M6OlZNJiBtX3ZtOwpAQCAtMjA3LDEwICsyMDcsMTUgQEAgaW5saW5lIHZvaWQgJHtv
YmplY3ROYW1lfUJ1aWx0aW5GdW5jdGlvbgogI3VuZGVmIEVYUE9SVF9GVU5DVElPTgogfQogCi1p
bmxpbmUgdm9pZCAke29iamVjdE5hbWV9QnVpbHRpbkZ1bmN0aW9uczo6dmlzaXQoSlNDOjpTbG90
VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+CitpbmxpbmUgdm9p
ZCAke29iamVjdE5hbWV9QnVpbHRpbkZ1bmN0aW9uczo6dmlzaXQoVmlzaXRvciYgdmlzaXRvcikK
IHsKICNkZWZpbmUgVklTSVRfRlVOQ1RJT04obmFtZSkgdmlzaXRvci5hcHBlbmQobV8jI25hbWUj
I0Z1bmN0aW9uKTsKICAgICAke21hY3JvUHJlZml4fV9GT1JFQUNIXyR7b2JqZWN0TWFjcm99X0JV
SUxUSU5fRlVOQ1RJT05fTkFNRShWSVNJVF9GVU5DVElPTikKICN1bmRlZiBWSVNJVF9GVU5DVElP
TgogfQorCit0ZW1wbGF0ZSB2b2lkICR7b2JqZWN0TmFtZX1CdWlsdGluRnVuY3Rpb25zOjp2aXNp
dChKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgJHtvYmplY3ROYW1l
fUJ1aWx0aW5GdW5jdGlvbnM6OnZpc2l0KEpTQzo6U2xvdFZpc2l0b3ImKTsKKwogIiIiKQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmNwcAkocmV2
aXNpb24gMjczMTE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nh
c2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxNy0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNzU3LDcgKzc1Nyw4IEBAIGJvb2wgQWNjZXNzQ2Fz
ZTo6dmlzaXRXZWFrKFZNJiB2bSkgY29uc3QKICAgICByZXR1cm4gaXNWYWxpZDsKIH0KIAotYm9v
bCBBY2Nlc3NDYXNlOjpwcm9wYWdhdGVUcmFuc2l0aW9ucyhTbG90VmlzaXRvciYgdmlzaXRvcikg
Y29uc3QKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Citib29sIEFjY2Vzc0Nhc2U6OnByb3Bh
Z2F0ZVRyYW5zaXRpb25zKFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0CiB7CiAgICAgYm9vbCByZXN1
bHQgPSB0cnVlOwogCkBAIC03NzIsNyArNzczLDcgQEAgYm9vbCBBY2Nlc3NDYXNlOjpwcm9wYWdh
dGVUcmFuc2l0aW9ucyhTbAogICAgIHN3aXRjaCAobV90eXBlKSB7CiAgICAgY2FzZSBUcmFuc2l0
aW9uOgogICAgIGNhc2UgRGVsZXRlOgotICAgICAgICBpZiAodmlzaXRvci52bSgpLmhlYXAuaXNN
YXJrZWQobV9zdHJ1Y3R1cmUtPnByZXZpb3VzSUQoKSkpCisgICAgICAgIGlmICh2aXNpdG9yLmlz
TWFya2VkKG1fc3RydWN0dXJlLT5wcmV2aW91c0lEKCkpKQogICAgICAgICAgICAgdmlzaXRvci5h
cHBlbmRVbmJhcnJpZXJlZChtX3N0cnVjdHVyZS5nZXQoKSk7CiAgICAgICAgIGVsc2UKICAgICAg
ICAgICAgIHJlc3VsdCA9IGZhbHNlOwpAQCAtNzg0LDExICs3ODUsMTggQEAgYm9vbCBBY2Nlc3ND
YXNlOjpwcm9wYWdhdGVUcmFuc2l0aW9ucyhTbAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZv
aWQgQWNjZXNzQ2FzZTo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0
Cit0ZW1wbGF0ZSBib29sIEFjY2Vzc0Nhc2U6OnByb3BhZ2F0ZVRyYW5zaXRpb25zKEFic3RyYWN0
U2xvdFZpc2l0b3ImKSBjb25zdDsKK3RlbXBsYXRlIGJvb2wgQWNjZXNzQ2FzZTo6cHJvcGFnYXRl
VHJhbnNpdGlvbnMoU2xvdFZpc2l0b3ImKSBjb25zdDsKKworCit0ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPgordm9pZCBBY2Nlc3NDYXNlOjp2aXNpdEFnZ3JlZ2F0ZUltcGwoVmlzaXRvciYgdmlz
aXRvcikgY29uc3QKIHsKICAgICBtX2lkZW50aWZpZXIudmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7
CiB9CiAKK0RFRklORV9WSVNJVF9BR0dSRUdBVEVfV0lUSF9NT0RJRklFUihBY2Nlc3NDYXNlLCBj
b25zdCk7CisKIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVXaXRoR3VhcmQoCiAgICAgQWNjZXNz
R2VuZXJhdGlvblN0YXRlJiBzdGF0ZSwgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCYgZmFsbFRocm91
Z2gpCiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNl
LmgJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9B
Y2Nlc3NDYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDE3LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yODAsOSArMjgwLDkgQEAgcHJpdmF0ZToK
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgogICAgIHZvaWQgZm9yRWFjaERlcGVuZGVu
dENlbGwoVk0mLCBjb25zdCBGdW5jdG9yJikgY29uc3Q7CiAKLSAgICB2b2lkIHZpc2l0QWdncmVn
YXRlKFNsb3RWaXNpdG9yJikgY29uc3Q7CisgICAgREVDTEFSRV9WSVNJVF9BR0dSRUdBVEVfV0lU
SF9NT0RJRklFUihjb25zdCk7CiAgICAgYm9vbCB2aXNpdFdlYWsoVk0mKSBjb25zdDsKLSAgICBi
b29sIHByb3BhZ2F0ZVRyYW5zaXRpb25zKFNsb3RWaXNpdG9yJikgY29uc3Q7CisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgVmlzaXRvcj4gYm9vbCBwcm9wYWdhdGVUcmFuc2l0aW9ucyhWaXNpdG9yJikg
Y29uc3Q7CiAKICAgICAvLyBGSVhNRTogVGhpcyBvbmx5IGV4aXN0cyBiZWNhdXNlIG9mIGhvdyBB
Y2Nlc3NDYXNlIHB1dHMgcG9zdC1nZW5lcmF0aW9uIHRoaW5ncyBpbnRvIGl0c2VsZi4KICAgICAv
LyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU2NDU2CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnlWYWxJbmZvLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnlWYWxJbmZvLmNwcAkocmV2aXNpb24g
MjczMTE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5VmFsSW5mby5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDIw
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMC0y
MDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMzIsMTEgKzMyLDE0IEBAIG5hbWVzcGFjZSBKU0MgewogCiAjaWYgRU5B
QkxFKEpJVCkKIAotdm9pZCBCeVZhbEluZm86OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgQnlWYWxJbmZvOjp2aXNp
dEFnZ3JlZ2F0ZUltcGwoVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBjYWNoZWRJZC52aXNpdEFn
Z3JlZ2F0ZSh2aXNpdG9yKTsKIH0KIAorREVGSU5FX1ZJU0lUX0FHR1JFR0FURShCeVZhbEluZm8p
OworCiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnlWYWxJbmZvLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5VmFsSW5mby5oCShyZXZpc2lvbiAyNzMx
MTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnlWYWxJbmZvLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTgg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIw
MjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0yNjAsNyArMjYwLDcgQEAgc3RydWN0IEJ5VmFsSW5mbyB7CiAgICAgICAg
IHRoaXMtPnNlZW4gPSBmYWxzZTsKICAgICB9CiAKLSAgICB2b2lkIHZpc2l0QWdncmVnYXRlKFNs
b3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9BR0dSRUdBVEU7CiAKICAgICBDb2RlTG9j
YXRpb25KdW1wPEpTSW50ZXJuYWxQdHJUYWc+IG5vdEluZGV4SnVtcDsKICAgICBDb2RlTG9jYXRp
b25KdW1wPEpTSW50ZXJuYWxQdHJUYWc+IGJhZFR5cGVKdW1wOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NoZWNrUHJpdmF0ZUJyYW5kU3RhdHVzLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2hlY2tQcml2YXRlQnJhbmRTdGF0
dXMuY3BwCShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQ2hlY2tQcml2YXRlQnJhbmRTdGF0dXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjgsMTgg
KzIyOCwyNSBAQCBDYWNoZWFibGVJZGVudGlmaWVyIENoZWNrUHJpdmF0ZUJyYW5kU3RhCiAgICAg
cmV0dXJuIHJlc3VsdDsKIH0KIAotdm9pZCBDaGVja1ByaXZhdGVCcmFuZFN0YXR1czo6dmlzaXRB
Z2dyZWdhdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
Pgordm9pZCBDaGVja1ByaXZhdGVCcmFuZFN0YXR1czo6dmlzaXRBZ2dyZWdhdGVJbXBsKFZpc2l0
b3ImIHZpc2l0b3IpCiB7CiAgICAgZm9yIChDaGVja1ByaXZhdGVCcmFuZFZhcmlhbnQmIHZhcmlh
bnQgOiBtX3ZhcmlhbnRzKQogICAgICAgICB2YXJpYW50LnZpc2l0QWdncmVnYXRlKHZpc2l0b3Ip
OwogfQogCi12b2lkIENoZWNrUHJpdmF0ZUJyYW5kU3RhdHVzOjptYXJrSWZDaGVhcChTbG90Vmlz
aXRvciYgdmlzaXRvcikKK0RFRklORV9WSVNJVF9BR0dSRUdBVEUoQ2hlY2tQcml2YXRlQnJhbmRT
dGF0dXMpOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBDaGVja1ByaXZhdGVC
cmFuZFN0YXR1czo6bWFya0lmQ2hlYXAoVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBmb3IgKENo
ZWNrUHJpdmF0ZUJyYW5kVmFyaWFudCYgdmFyaWFudCA6IG1fdmFyaWFudHMpCiAgICAgICAgIHZh
cmlhbnQubWFya0lmQ2hlYXAodmlzaXRvcik7CiB9CiAKK3RlbXBsYXRlIHZvaWQgQ2hlY2tQcml2
YXRlQnJhbmRTdGF0dXM6Om1hcmtJZkNoZWFwKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBs
YXRlIHZvaWQgQ2hlY2tQcml2YXRlQnJhbmRTdGF0dXM6Om1hcmtJZkNoZWFwKFNsb3RWaXNpdG9y
Jik7CisKIGJvb2wgQ2hlY2tQcml2YXRlQnJhbmRTdGF0dXM6OmZpbmFsaXplKFZNJiB2bSkKIHsK
ICAgICBmb3IgKGF1dG8mIHZhcmlhbnQgOiBtX3ZhcmlhbnRzKSB7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2hlY2tQcml2YXRlQnJhbmRTdGF0dXMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2hlY2tQcml2YXRlQnJhbmRTdGF0
dXMuaAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NoZWNrUHJpdmF0ZUJyYW5kU3RhdHVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTgyLDggKzgyLDgg
QEAgcHVibGljOgogICAgIC8vIEF0dGVtcHRzIHRvIHJlZHVjZSB0aGUgc2V0IG9mIHZhcmlhbnRz
IHRvIGZpdCB0aGUgZ2l2ZW4gc3RydWN0dXJlIHNldC4gVGhpcyBtYXkgYmUgYXBwcm94aW1hdGUu
CiAgICAgdm9pZCBmaWx0ZXIoY29uc3QgU3RydWN0dXJlU2V0Jik7CiAKLSAgICB2b2lkIHZpc2l0
QWdncmVnYXRlKFNsb3RWaXNpdG9yJik7Ci0gICAgdm9pZCBtYXJrSWZDaGVhcChTbG90VmlzaXRv
ciYpOworICAgIERFQ0xBUkVfVklTSVRfQUdHUkVHQVRFOworICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFZpc2l0b3I+IHZvaWQgbWFya0lmQ2hlYXAoVmlzaXRvciYpOwogICAgIGJvb2wgZmluYWxpemUo
Vk0mKTsKIAogICAgIGJvb2wgYXBwZW5kVmFyaWFudChjb25zdCBDaGVja1ByaXZhdGVCcmFuZFZh
cmlhbnQmKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DaGVja1ByaXZh
dGVCcmFuZFZhcmlhbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9DaGVja1ByaXZhdGVCcmFuZFZhcmlhbnQuY3BwCShyZXZpc2lvbiAyNzMxMTkpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2hlY2tQcml2YXRlQnJhbmRWYXJpYW50
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTEsMTEgKzUxLDE1IEBAIGJvb2wgQ2hlY2tQcml2YXRl
QnJhbmRWYXJpYW50OjphdHRlbXB0VG8KICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBDaGVj
a1ByaXZhdGVCcmFuZFZhcmlhbnQ6Om1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQor
dGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgQ2hlY2tQcml2YXRlQnJhbmRWYXJpYW50
OjptYXJrSWZDaGVhcChWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIG1fc3RydWN0dXJlU2V0Lm1h
cmtJZkNoZWFwKHZpc2l0b3IpOwogfQogCit0ZW1wbGF0ZSB2b2lkIENoZWNrUHJpdmF0ZUJyYW5k
VmFyaWFudDo6bWFya0lmQ2hlYXAoQWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9p
ZCBDaGVja1ByaXZhdGVCcmFuZFZhcmlhbnQ6Om1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJik7CisK
IGJvb2wgQ2hlY2tQcml2YXRlQnJhbmRWYXJpYW50OjpmaW5hbGl6ZShWTSYgdm0pCiB7CiAgICAg
aWYgKCFtX3N0cnVjdHVyZVNldC5pc1N0aWxsQWxpdmUodm0pKQpAQCAtNjMsMTEgKzY3LDE0IEBA
IGJvb2wgQ2hlY2tQcml2YXRlQnJhbmRWYXJpYW50OjpmaW5hbGl6ZSgKICAgICByZXR1cm4gdHJ1
ZTsKIH0KIAotdm9pZCBDaGVja1ByaXZhdGVCcmFuZFZhcmlhbnQ6OnZpc2l0QWdncmVnYXRlKFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgQ2hl
Y2tQcml2YXRlQnJhbmRWYXJpYW50Ojp2aXNpdEFnZ3JlZ2F0ZUltcGwoVmlzaXRvciYgdmlzaXRv
cikKIHsKICAgICBtX2lkZW50aWZpZXIudmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7CiB9CiAKK0RF
RklORV9WSVNJVF9BR0dSRUdBVEUoQ2hlY2tQcml2YXRlQnJhbmRWYXJpYW50KTsKKwogdm9pZCBD
aGVja1ByaXZhdGVCcmFuZFZhcmlhbnQ6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKIHsK
ICAgICBkdW1wSW5Db250ZXh0KG91dCwgbnVsbHB0cik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ2hlY2tQcml2YXRlQnJhbmRWYXJpYW50LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NoZWNrUHJpdmF0ZUJyYW5kVmFyaWFudC5o
CShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2hl
Y2tQcml2YXRlQnJhbmRWYXJpYW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDggKzQ2LDggQEAg
cHVibGljOgogCiAgICAgYm9vbCBhdHRlbXB0VG9NZXJnZShjb25zdCBDaGVja1ByaXZhdGVCcmFu
ZFZhcmlhbnQmIG90aGVyKTsKIAotICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3Im
KTsKLSAgICB2b2lkIG1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJ
VF9BR0dSRUdBVEU7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCBtYXJrSWZD
aGVhcChWaXNpdG9yJik7CiAgICAgYm9vbCBmaW5hbGl6ZShWTSYpOwogCiAgICAgdm9pZCBkdW1w
KFByaW50U3RyZWFtJikgY29uc3Q7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQ29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQ29kZUJsb2NrLmNwcAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4MSw3ICsy
ODEsNyBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhWTSYgdm0sIFN0cnVjdHVyZSogCiAgICAgLCBt
X2RpZEZhaWxGVExDb21waWxhdGlvbihmYWxzZSkKICAgICAsIG1faGFzQmVlbkNvbXBpbGVkV2l0
aEZUTChmYWxzZSkKICAgICAsIG1faGFzTGlua2VkT1NSRXhpdChmYWxzZSkKLSAgICAsIG1faXNF
bGlnaWJsZUZvckxMSW50RG93bmdyYWRlKGZhbHNlKSAKKyAgICAsIG1faXNFbGlnaWJsZUZvckxM
SW50RG93bmdyYWRlKGZhbHNlKQogICAgICwgbV9udW1DYWxsZWVMb2NhbHMob3RoZXIubV9udW1D
YWxsZWVMb2NhbHMpCiAgICAgLCBtX251bVZhcnMob3RoZXIubV9udW1WYXJzKQogICAgICwgbV9u
dW1iZXJPZkFyZ3VtZW50c1RvU2tpcChvdGhlci5tX251bWJlck9mQXJndW1lbnRzVG9Ta2lwKQpA
QCAtMTAwMSw3ICsxMDAxLDggQEAgc2l6ZV90IENvZGVCbG9jazo6ZXN0aW1hdGVkU2l6ZShKU0Nl
bGwqIAogICAgIHJldHVybiBCYXNlOjplc3RpbWF0ZWRTaXplKGNlbGwsIHZtKSArIGV4dHJhTWVt
b3J5QWxsb2NhdGVkOwogfQogCi12b2lkIENvZGVCbG9jazo6dmlzaXRDaGlsZHJlbihKU0NlbGwq
IGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4K
K3ZvaWQgQ29kZUJsb2NrOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3Im
IHZpc2l0b3IpCiB7CiAgICAgQ29kZUJsb2NrKiB0aGlzT2JqZWN0ID0ganNDYXN0PENvZGVCbG9j
ayo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5m
bygpKTsKQEAgLTEwMTAsOSArMTAxMSwxNyBAQCB2b2lkIENvZGVCbG9jazo6dmlzaXRDaGlsZHJl
bihKU0NlbGwqIGNlCiAgICAgdGhpc09iamVjdC0+dmlzaXRDaGlsZHJlbih2aXNpdG9yKTsKIH0K
IAotdm9pZCBDb2RlQmxvY2s6OnZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCitE
RUZJTkVfVklTSVRfQ0hJTERSRU4oQ29kZUJsb2NrKTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVmlz
aXRvcj4KK3ZvaWQgQ29kZUJsb2NrOjp2aXNpdENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7
CiAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2spOworCisgICAgLy8gSW4gQ29k
ZUJsb2NrOjpzaG91bGRWaXNpdFN0cm9uZ2x5KCkgd2UgbWF5IGhhdmUgZGVjaWRlZCB0byBza2lw
IHZpc2l0aW5nIHRoaXMKKyAgICAvLyBjb2RlQmxvY2suIEhvd2V2ZXIsIGlmIHdlIGVuZCB1cCB2
aXNpdGluZyBpdCBhbnl3YXkgZHVlIHRvIG90aGVyIHJlZmVyZW5jZXMsCisgICAgLy8gd2UgY2Fu
IGNsZWFyIHRoaXMgZmxhZyBhbmQgYWxsb3cgdGhlIHZlcmlmaWVyIEdDIHRvIHZpc2l0IGl0IGFz
IHdlbGwuCisgICAgbV92aXNpdENoaWxkcmVuU2tpcHBlZER1ZVRvT2xkQWdlID0gZmFsc2U7CiAg
ICAgaWYgKENvZGVCbG9jayogb3RoZXJCbG9jayA9IHNwZWNpYWxPU1JFbnRyeUJsb2NrT3JOdWxs
KCkpCiAgICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQob3RoZXJCbG9jayk7CiAKQEAg
LTEwMjksMTMgKzEwMzgsMjIgQEAgdm9pZCBDb2RlQmxvY2s6OnZpc2l0Q2hpbGRyZW4oU2xvdFZp
c2l0bwogICAgIFZNOjpTcGFjZUFuZFNldDo6c2V0Rm9yKCpzdWJzcGFjZSgpKS5hZGQodGhpcyk7
CiB9CiAKLWJvb2wgQ29kZUJsb2NrOjpzaG91bGRWaXNpdFN0cm9uZ2x5KGNvbnN0IENvbmN1cnJl
bnRKU0xvY2tlciYgbG9ja2VyKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK2Jvb2wgQ29k
ZUJsb2NrOjpzaG91bGRWaXNpdFN0cm9uZ2x5KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYgbG9j
a2VyLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGlmIChPcHRpb25zOjpmb3JjZUNvZGVCbG9j
a0xpdmVuZXNzKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgaWYgKHNob3VsZEpldHRp
c29uRHVlVG9PbGRBZ2UobG9ja2VyKSkKKyAgICBpZiAoc2hvdWxkSmV0dGlzb25EdWVUb09sZEFn
ZShsb2NrZXIsIHZpc2l0b3IpKSB7CisgICAgICAgIGlmIChPcHRpb25zOjp2ZXJpZnlHQygpKQor
ICAgICAgICAgICAgbV92aXNpdENoaWxkcmVuU2tpcHBlZER1ZVRvT2xkQWdlID0gdHJ1ZTsKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmIChVTkxJS0VMWShtX3Zpc2l0Q2hp
bGRyZW5Ta2lwcGVkRHVlVG9PbGRBZ2UpKSB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKE9wdGlv
bnM6OnZlcmlmeUdDKCkpOwogICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQogCiAgICAgLy8g
SW50ZXJwcmV0ZXIgYW5kIEJhc2VsaW5lIEpJVCBDb2RlQmxvY2tzIGRvbid0IG5lZWQgdG8gYmUg
amV0dGlzb25lZCB3aGVuCiAgICAgLy8gdGhlaXIgd2VhayByZWZlcmVuY2VzIGdvIHN0YWxlLiBT
byBpZiBhIGJhc2xpbmUgSklUIENvZGVCbG9jayBnZXRzCkBAIC0xMDQ2LDYgKzEwNjQsOSBAQCBi
b29sIENvZGVCbG9jazo6c2hvdWxkVmlzaXRTdHJvbmdseShjb25zCiAgICAgcmV0dXJuIGZhbHNl
OwogfQogCit0ZW1wbGF0ZSBib29sIENvZGVCbG9jazo6c2hvdWxkVmlzaXRTdHJvbmdseShjb25z
dCBDb25jdXJyZW50SlNMb2NrZXImLCBBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSBi
b29sIENvZGVCbG9jazo6c2hvdWxkVmlzaXRTdHJvbmdseShjb25zdCBDb25jdXJyZW50SlNMb2Nr
ZXImLCBTbG90VmlzaXRvciYpOworCiBib29sIENvZGVCbG9jazo6c2hvdWxkSmV0dGlzb25EdWVU
b1dlYWtSZWZlcmVuY2UoVk0mIHZtKQogewogICAgIGlmICghSklUQ29kZTo6aXNPcHRpbWl6aW5n
SklUKGppdFR5cGUoKSkpCkBAIC0xMDg2LDkgKzExMDcsMTEgQEAgc3RhdGljIFNlY29uZHMgdGlt
ZVRvTGl2ZShKSVRUeXBlIGppdFR5cAogICAgIH0KIH0KIAotYm9vbCBDb2RlQmxvY2s6OnNob3Vs
ZEpldHRpc29uRHVlVG9PbGRBZ2UoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJikKKy8vIEFMV0FZ
U19JTkxJTkUgYmVjYXVzZSB0aGlzIG9ubHkgaGFzIDEgY2xpZW50LgordGVtcGxhdGU8dHlwZW5h
bWUgVmlzaXRvcj4KK0FMV0FZU19JTkxJTkUgYm9vbCBDb2RlQmxvY2s6OnNob3VsZEpldHRpc29u
RHVlVG9PbGRBZ2UoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgVmlzaXRvciYgdmlzaXRvcikK
IHsKLSAgICBpZiAobV92bS0+aGVhcC5pc01hcmtlZCh0aGlzKSkKKyAgICBpZiAodmlzaXRvci5p
c01hcmtlZCh0aGlzKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKFVOTElLRUxZ
KE9wdGlvbnM6OmZvcmNlQ29kZUJsb2NrVG9KZXR0aXNvbkR1ZVRvT2xkQWdlKCkpKQpAQCAtMTEw
MSwxMiArMTEyNCwxMyBAQCBib29sIENvZGVCbG9jazo6c2hvdWxkSmV0dGlzb25EdWVUb09sZEFn
CiB9CiAKICNpZiBFTkFCTEUoREZHX0pJVCkKLXN0YXRpYyBib29sIHNob3VsZE1hcmtUcmFuc2l0
aW9uKFZNJiB2bSwgREZHOjpXZWFrUmVmZXJlbmNlVHJhbnNpdGlvbiYgdHJhbnNpdGlvbikKK3Rl
bXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+CitzdGF0aWMgaW5saW5lIGJvb2wgc2hvdWxkTWFya1Ry
YW5zaXRpb24oVmlzaXRvciYgdmlzaXRvciwgREZHOjpXZWFrUmVmZXJlbmNlVHJhbnNpdGlvbiYg
dHJhbnNpdGlvbikKIHsKLSAgICBpZiAodHJhbnNpdGlvbi5tX2NvZGVPcmlnaW4gJiYgIXZtLmhl
YXAuaXNNYXJrZWQodHJhbnNpdGlvbi5tX2NvZGVPcmlnaW4uZ2V0KCkpKQorICAgIGlmICh0cmFu
c2l0aW9uLm1fY29kZU9yaWdpbiAmJiAhdmlzaXRvci5pc01hcmtlZCh0cmFuc2l0aW9uLm1fY29k
ZU9yaWdpbi5nZXQoKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKLSAgICBpZiAoIXZt
LmhlYXAuaXNNYXJrZWQodHJhbnNpdGlvbi5tX2Zyb20uZ2V0KCkpKQorICAgIGlmICghdmlzaXRv
ci5pc01hcmtlZCh0cmFuc2l0aW9uLm1fZnJvbS5nZXQoKSkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTExMjIsOCArMTE0NiwxMCBAQCBCeXRlY29k
ZUluZGV4IENvZGVCbG9jazo6Ynl0ZWNvZGVJbmRleEZvCiB9CiAjZW5kaWYgLy8gRU5BQkxFKERG
R19KSVQpCiAKLXZvaWQgQ29kZUJsb2NrOjpwcm9wYWdhdGVUcmFuc2l0aW9ucyhjb25zdCBDb25j
dXJyZW50SlNMb2NrZXImLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1l
IFZpc2l0b3I+Cit2b2lkIENvZGVCbG9jazo6cHJvcGFnYXRlVHJhbnNpdGlvbnMoY29uc3QgQ29u
Y3VycmVudEpTTG9ja2VyJiwgVmlzaXRvciYgdmlzaXRvcikKIHsKKyAgICB0eXBlbmFtZSBWaXNp
dG9yOjpTdXBwcmVzc0dDVmVyaWZpZXJTY29wZSBzdXBwcmVzc1Njb3BlKHZpc2l0b3IpOwogICAg
IFZNJiB2bSA9ICptX3ZtOwogCiAgICAgaWYgKGppdFR5cGUoKSA9PSBKSVRUeXBlOjpJbnRlcnBy
ZXRlclRodW5rKSB7CkBAIC0xMTMzLDggKzExNTksOSBAQCB2b2lkIENvZGVCbG9jazo6cHJvcGFn
YXRlVHJhbnNpdGlvbnMoY29uCiAgICAgICAgICAgICAgICAgU3RydWN0dXJlSUQgbmV3U3RydWN0
dXJlSUQgPSBtZXRhZGF0YS5tX25ld1N0cnVjdHVyZUlEOwogICAgICAgICAgICAgICAgIGlmICgh
b2xkU3RydWN0dXJlSUQgfHwgIW5ld1N0cnVjdHVyZUlEKQogICAgICAgICAgICAgICAgICAgICBy
ZXR1cm47CisKICAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSA9IHZtLmhl
YXAuc3RydWN0dXJlSURUYWJsZSgpLmdldChvbGRTdHJ1Y3R1cmVJRCk7Ci0gICAgICAgICAgICAg
ICAgaWYgKHZtLmhlYXAuaXNNYXJrZWQob2xkU3RydWN0dXJlKSkgeworICAgICAgICAgICAgICAg
IGlmICh2aXNpdG9yLmlzTWFya2VkKG9sZFN0cnVjdHVyZSkpIHsKICAgICAgICAgICAgICAgICAg
ICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSB2bS5oZWFwLnN0cnVjdHVyZUlEVGFibGUoKS5n
ZXQobmV3U3RydWN0dXJlSUQpOwogICAgICAgICAgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZFVu
YmFycmllcmVkKG5ld1N0cnVjdHVyZSk7CiAgICAgICAgICAgICAgICAgfQpAQCAtMTE0OCwxMSAr
MTE3NSwxMSBAQCB2b2lkIENvZGVCbG9jazo6cHJvcGFnYXRlVHJhbnNpdGlvbnMoY29uCiAKICAg
ICAgICAgICAgICAgICBKU0NlbGwqIHByb3BlcnR5ID0gbWV0YWRhdGEubV9wcm9wZXJ0eS5nZXQo
KTsKICAgICAgICAgICAgICAgICBBU1NFUlQocHJvcGVydHkpOwotICAgICAgICAgICAgICAgIGlm
ICghdm0uaGVhcC5pc01hcmtlZChwcm9wZXJ0eSkpCisgICAgICAgICAgICAgICAgaWYgKCF2aXNp
dG9yLmlzTWFya2VkKHByb3BlcnR5KSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogCiAg
ICAgICAgICAgICAgICAgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUgPSB2bS5oZWFwLnN0cnVjdHVy
ZUlEVGFibGUoKS5nZXQob2xkU3RydWN0dXJlSUQpOwotICAgICAgICAgICAgICAgIGlmICh2bS5o
ZWFwLmlzTWFya2VkKG9sZFN0cnVjdHVyZSkpIHsKKyAgICAgICAgICAgICAgICBpZiAodmlzaXRv
ci5pc01hcmtlZChvbGRTdHJ1Y3R1cmUpKSB7CiAgICAgICAgICAgICAgICAgICAgIFN0cnVjdHVy
ZSogbmV3U3RydWN0dXJlID0gdm0uaGVhcC5zdHJ1Y3R1cmVJRFRhYmxlKCkuZ2V0KG5ld1N0cnVj
dHVyZUlEKTsKICAgICAgICAgICAgICAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZChu
ZXdTdHJ1Y3R1cmUpOwogICAgICAgICAgICAgICAgIH0KQEAgLTExNjYsMTEgKzExOTMsMTEgQEAg
dm9pZCBDb2RlQmxvY2s6OnByb3BhZ2F0ZVRyYW5zaXRpb25zKGNvbgogCiAgICAgICAgICAgICAg
ICAgSlNDZWxsKiBicmFuZCA9IG1ldGFkYXRhLm1fYnJhbmQuZ2V0KCk7CiAgICAgICAgICAgICAg
ICAgQVNTRVJUKGJyYW5kKTsKLSAgICAgICAgICAgICAgICBpZiAoIXZtLmhlYXAuaXNNYXJrZWQo
YnJhbmQpKQorICAgICAgICAgICAgICAgIGlmICghdmlzaXRvci5pc01hcmtlZChicmFuZCkpCiAg
ICAgICAgICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICAgICAgICAgIFN0cnVjdHVyZSog
b2xkU3RydWN0dXJlID0gdm0uaGVhcC5zdHJ1Y3R1cmVJRFRhYmxlKCkuZ2V0KG9sZFN0cnVjdHVy
ZUlEKTsKLSAgICAgICAgICAgICAgICBpZiAodm0uaGVhcC5pc01hcmtlZChvbGRTdHJ1Y3R1cmUp
KSB7CisgICAgICAgICAgICAgICAgaWYgKHZpc2l0b3IuaXNNYXJrZWQob2xkU3RydWN0dXJlKSkg
ewogICAgICAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IHZtLmhlYXAu
c3RydWN0dXJlSURUYWJsZSgpLmdldChuZXdTdHJ1Y3R1cmVJRCk7CiAgICAgICAgICAgICAgICAg
ICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQobmV3U3RydWN0dXJlKTsKICAgICAgICAgICAg
ICAgICB9CkBAIC0xMTk3LDcgKzEyMjQsNyBAQCB2b2lkIENvZGVCbG9jazo6cHJvcGFnYXRlVHJh
bnNpdGlvbnMoY29uCiAgICAgICAgICAgICB2bS5nZXRTdHJ1Y3R1cmUoc3RydWN0dXJlSUQpLT5t
YXJrSWZDaGVhcCh2aXNpdG9yKTsKIAogICAgICAgICBmb3IgKGF1dG8mIHRyYW5zaXRpb24gOiBk
ZmdDb21tb24tPnRyYW5zaXRpb25zKSB7Ci0gICAgICAgICAgICBpZiAoc2hvdWxkTWFya1RyYW5z
aXRpb24odm0sIHRyYW5zaXRpb24pKSB7CisgICAgICAgICAgICBpZiAoc2hvdWxkTWFya1RyYW5z
aXRpb24odmlzaXRvciwgdHJhbnNpdGlvbikpIHsKICAgICAgICAgICAgICAgICAvLyBJZiB0aGUg
Zm9sbG93aW5nIHRocmVlIHRoaW5ncyBhcmUgbGl2ZSwgdGhlbiB0aGUgdGFyZ2V0IG9mIHRoZQog
ICAgICAgICAgICAgICAgIC8vIHRyYW5zaXRpb24gaXMgYWxzbyBsaXZlOgogICAgICAgICAgICAg
ICAgIC8vCkBAIC0xMjI0LDEzICsxMjUxLDE3IEBAIHZvaWQgQ29kZUJsb2NrOjpwcm9wYWdhdGVU
cmFuc2l0aW9ucyhjb24KICNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKIH0KIAotdm9pZCBDb2Rl
QmxvY2s6OmRldGVybWluZUxpdmVuZXNzKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGUgdm9pZCBDb2RlQmxvY2s6OnByb3BhZ2F0ZVRyYW5z
aXRpb25zKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIEFic3RyYWN0U2xvdFZpc2l0b3ImKTsK
K3RlbXBsYXRlIHZvaWQgQ29kZUJsb2NrOjpwcm9wYWdhdGVUcmFuc2l0aW9ucyhjb25zdCBDb25j
dXJyZW50SlNMb2NrZXImLCBTbG90VmlzaXRvciYpOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNp
dG9yPgordm9pZCBDb2RlQmxvY2s6OmRldGVybWluZUxpdmVuZXNzKGNvbnN0IENvbmN1cnJlbnRK
U0xvY2tlciYsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHZpc2l0b3Ip
OwogICAgIAogI2lmIEVOQUJMRShERkdfSklUKQogICAgIFZNJiB2bSA9ICptX3ZtOwotICAgIGlm
ICh2bS5oZWFwLmlzTWFya2VkKHRoaXMpKQorICAgIGlmICh2aXNpdG9yLmlzTWFya2VkKHRoaXMp
KQogICAgICAgICByZXR1cm47CiAgICAgCiAgICAgLy8gSW4gcmFyZSBhbmQgd2VpcmQgY2FzZXMs
IHRoaXMgY291bGQgYmUgY2FsbGVkIG9uIGEgYmFzZWxpbmUgQ29kZUJsb2NrLiBPbmUgdGhhdCBJ
IGZvdW5kIHdhcwpAQCAtMTI0Nyw3ICsxMjc4LDcgQEAgdm9pZCBDb2RlQmxvY2s6OmRldGVybWlu
ZUxpdmVuZXNzKGNvbnN0IAogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkZmdDb21tb24t
PndlYWtSZWZlcmVuY2VzLnNpemUoKTsgKytpKSB7CiAgICAgICAgIEpTQ2VsbCogcmVmZXJlbmNl
ID0gZGZnQ29tbW9uLT53ZWFrUmVmZXJlbmNlc1tpXS5nZXQoKTsKICAgICAgICAgQVNTRVJUKCFq
c0R5bmFtaWNDYXN0PENvZGVCbG9jayo+KHZtLCByZWZlcmVuY2UpKTsKLSAgICAgICAgaWYgKCF2
bS5oZWFwLmlzTWFya2VkKHJlZmVyZW5jZSkpIHsKKyAgICAgICAgaWYgKCF2aXNpdG9yLmlzTWFy
a2VkKHJlZmVyZW5jZSkpIHsKICAgICAgICAgICAgIGFsbEFyZUxpdmVTb0ZhciA9IGZhbHNlOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTEyNTUsNyArMTI4Niw3IEBAIHZvaWQg
Q29kZUJsb2NrOjpkZXRlcm1pbmVMaXZlbmVzcyhjb25zdCAKICAgICBpZiAoYWxsQXJlTGl2ZVNv
RmFyKSB7CiAgICAgICAgIGZvciAoU3RydWN0dXJlSUQgc3RydWN0dXJlSUQgOiBkZmdDb21tb24t
PndlYWtTdHJ1Y3R1cmVSZWZlcmVuY2VzKSB7CiAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSA9IHZtLmdldFN0cnVjdHVyZShzdHJ1Y3R1cmVJRCk7Ci0gICAgICAgICAgICBpZiAoIXZt
LmhlYXAuaXNNYXJrZWQoc3RydWN0dXJlKSkgeworICAgICAgICAgICAgaWYgKCF2aXNpdG9yLmlz
TWFya2VkKHN0cnVjdHVyZSkpIHsKICAgICAgICAgICAgICAgICBhbGxBcmVMaXZlU29GYXIgPSBm
YWxzZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KQEAgLTEyNzMsNiAr
MTMwNCw5IEBAIHZvaWQgQ29kZUJsb2NrOjpkZXRlcm1pbmVMaXZlbmVzcyhjb25zdCAKICNlbmRp
ZiAvLyBFTkFCTEUoREZHX0pJVCkKIH0KIAordGVtcGxhdGUgdm9pZCBDb2RlQmxvY2s6OmRldGVy
bWluZUxpdmVuZXNzKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIEFic3RyYWN0U2xvdFZpc2l0
b3ImKTsKK3RlbXBsYXRlIHZvaWQgQ29kZUJsb2NrOjpkZXRlcm1pbmVMaXZlbmVzcyhjb25zdCBD
b25jdXJyZW50SlNMb2NrZXImLCBTbG90VmlzaXRvciYpOworCiB2b2lkIENvZGVCbG9jazo6Zmlu
YWxpemVMTEludElubGluZUNhY2hlcygpCiB7CiAgICAgVk0mIHZtID0gKm1fdm07CkBAIC0xNjE2
LDYgKzE2NTAsMTEgQEAgdm9pZCBDb2RlQmxvY2s6OmZpbmFsaXplVW5jb25kaXRpb25hbGx5KAog
ICAgIHVwZGF0ZUFjdGl2aXR5KCk7CiAKICAgICBWTTo6U3BhY2VBbmRTZXQ6OnNldEZvcigqc3Vi
c3BhY2UoKSkucmVtb3ZlKHRoaXMpOworCisgICAgLy8gSW4gQ29kZUJsb2NrOjpzaG91bGRWaXNp
dFN0cm9uZ2x5KCkgd2UgbWF5IGhhdmUgZGVjaWRlZCB0byBza2lwIHZpc2l0aW5nIHRoaXMKKyAg
ICAvLyBjb2RlQmxvY2suIEJ5IHRoZSB0aW1lIHdlIGdldCBoZXJlLCB3ZSdyZSBkb25lIHdpdGgg
dGhlIHZlcmlmaWVyIEdDLiBTbywgbGV0J3MKKyAgICAvLyByZXNldCB0aGlzIGZsYWcgZm9yIHRo
ZSBuZXh0IEdDIGN5Y2xlLgorICAgIG1fdmlzaXRDaGlsZHJlblNraXBwZWREdWVUb09sZEFnZSA9
IGZhbHNlOwogfQogCiB2b2lkIENvZGVCbG9jazo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCkBAIC0x
ODA4LDcgKzE4NDcsOCBAQCB2b2lkIENvZGVCbG9jazo6cmVzZXRKSVREYXRhKCkKIH0KICNlbmRp
ZgogCi12b2lkIENvZGVCbG9jazo6dmlzaXRPU1JFeGl0VGFyZ2V0cyhjb25zdCBDb25jdXJyZW50
SlNMb2NrZXImLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0
b3I+Cit2b2lkIENvZGVCbG9jazo6dmlzaXRPU1JFeGl0VGFyZ2V0cyhjb25zdCBDb25jdXJyZW50
SlNMb2NrZXImLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIC8vIFdlIHN0cm9uZ2x5IHZpc2l0
IE9TUiBleGl0cyB0YXJnZXRzIGJlY2F1c2Ugd2UgZG9uJ3Qgd2FudCB0byBkZWFsIHdpdGgKICAg
ICAvLyB0aGUgY29tcGxleGl0eSBvZiBnZW5lcmF0aW5nIGFuIGV4aXQgdGFyZ2V0IENvZGVCbG9j
ayBvbiBkZW1hbmQgYW5kCkBAIC0xODI4LDcgKzE4NjgsOCBAQCB2b2lkIENvZGVCbG9jazo6dmlz
aXRPU1JFeGl0VGFyZ2V0cyhjb25zCiAjZW5kaWYKIH0KIAotdm9pZCBDb2RlQmxvY2s6OnN0cm9u
Z2x5VmlzaXRTdHJvbmdSZWZlcmVuY2VzKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYgbG9ja2Vy
LCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lk
IENvZGVCbG9jazo6c3Ryb25nbHlWaXNpdFN0cm9uZ1JlZmVyZW5jZXMoY29uc3QgQ29uY3VycmVu
dEpTTG9ja2VyJiBsb2NrZXIsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgVU5VU0VEX1BBUkFN
KGxvY2tlcik7CiAgICAgCkBAIC0xODY0LDcgKzE5MDUsOCBAQCB2b2lkIENvZGVCbG9jazo6c3Ry
b25nbHlWaXNpdFN0cm9uZ1JlZmVyCiAjZW5kaWYKIH0KIAotdm9pZCBDb2RlQmxvY2s6OnN0cm9u
Z2x5VmlzaXRXZWFrUmVmZXJlbmNlcyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBTbG90Vmlz
aXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIENvZGVCbG9j
azo6c3Ryb25nbHlWaXNpdFdlYWtSZWZlcmVuY2VzKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYs
IFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHZpc2l0b3IpOwogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShyZXZpc2lvbiAy
NzMxMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LTIw
MjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4
LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAy
MDA4IENhbWVyb24gWndhcmljaCA8Y3d6d2FyaWNoQHV3YXRlcmxvby5jYT4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKQEAgLTIwMSwxMCArMjAxLDEwIEBAIHB1YmxpYzoKICAgICAvLyBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIzNjc3CiAgICAgQ29kZUJsb2NrKiBiYXNlbGlu
ZVZlcnNpb24oKTsKIAorICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CisKICAgICBzdGF0aWMg
c2l6ZV90IGVzdGltYXRlZFNpemUoSlNDZWxsKiwgVk0mKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNp
dENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CiAgICAgc3RhdGljIHZvaWQgZGVzdHJv
eShKU0NlbGwqKTsKLSAgICB2b2lkIHZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKICAgICB2
b2lkIGZpbmFsaXplVW5jb25kaXRpb25hbGx5KFZNJik7CiAKICAgICB2b2lkIG5vdGlmeUxleGlj
YWxCaW5kaW5nVXBkYXRlKCk7CkBAIC04NjksNiArODY5LDcgQEAgcHVibGljOgogCiAgICAgYm9v
bCBtX2hhc0xpbmtlZE9TUkV4aXQgOiAxOwogICAgIGJvb2wgbV9pc0VsaWdpYmxlRm9yTExJbnRE
b3duZ3JhZGUgOiAxOworICAgIGJvb2wgbV92aXNpdENoaWxkcmVuU2tpcHBlZER1ZVRvT2xkQWdl
IHsgZmFsc2UgfTsKIAogICAgIC8vIEludGVybmFsIG1ldGhvZHMgZm9yIHVzZSBieSB2YWxpZGF0
aW9uIGNvZGUuIEl0IHdvdWxkIGJlIHByaXZhdGUgaWYgaXQgd2Fzbid0CiAgICAgLy8gZm9yIHRo
ZSBmYWN0IHRoYXQgd2UgdXNlIGl0IGZyb20gYW5vbnltb3VzIG5hbWVzcGFjZXMuCkBAIC05NDMs
NiArOTQ0LDggQEAgcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgQ29kZUJsb2NrU2V0OwogICAg
IGZyaWVuZCBjbGFzcyBFeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlOwogCisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgVmlzaXRvcj4gQUxXQVlTX0lOTElORSB2b2lkIHZpc2l0Q2hpbGRyZW4oVmlzaXRv
ciYpOworCiAgICAgQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzJiBsaXZlbmVzc0FuYWx5c2lzU2xv
dygpOwogICAgIAogICAgIENvZGVCbG9jayogc3BlY2lhbE9TUkVudHJ5QmxvY2tPck51bGwoKTsK
QEAgLTk2MywxNiArOTY2LDE2IEBAIHByaXZhdGU6CiAgICAgICAgIG1fY29uc3RhbnRSZWdpc3Rl
cnNbcmVnLnRvQ29uc3RhbnRJbmRleCgpXS5zZXQoKm1fdm0sIHRoaXMsIHZhbHVlKTsKICAgICB9
CiAKLSAgICBib29sIHNob3VsZFZpc2l0U3Ryb25nbHkoY29uc3QgQ29uY3VycmVudEpTTG9ja2Vy
Jik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gYm9vbCBzaG91bGRWaXNpdFN0cm9u
Z2x5KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIFZpc2l0b3ImKTsKICAgICBib29sIHNob3Vs
ZEpldHRpc29uRHVlVG9XZWFrUmVmZXJlbmNlKFZNJik7Ci0gICAgYm9vbCBzaG91bGRKZXR0aXNv
bkR1ZVRvT2xkQWdlKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYpOworICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFZpc2l0b3I+IGJvb2wgc2hvdWxkSmV0dGlzb25EdWVUb09sZEFnZShjb25zdCBDb25j
dXJyZW50SlNMb2NrZXImLCBWaXNpdG9yJik7CiAgICAgCi0gICAgdm9pZCBwcm9wYWdhdGVUcmFu
c2l0aW9ucyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBTbG90VmlzaXRvciYpOwotICAgIHZv
aWQgZGV0ZXJtaW5lTGl2ZW5lc3MoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgU2xvdFZpc2l0
b3ImKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIHByb3BhZ2F0ZVRyYW5z
aXRpb25zKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIFZpc2l0b3ImKTsKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIGRldGVybWluZUxpdmVuZXNzKGNvbnN0IENvbmN1cnJl
bnRKU0xvY2tlciYsIFZpc2l0b3ImKTsKICAgICAgICAgCi0gICAgdm9pZCBzdHJvbmdseVZpc2l0
U3Ryb25nUmVmZXJlbmNlcyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBTbG90VmlzaXRvciYp
OwotICAgIHZvaWQgc3Ryb25nbHlWaXNpdFdlYWtSZWZlcmVuY2VzKGNvbnN0IENvbmN1cnJlbnRK
U0xvY2tlciYsIFNsb3RWaXNpdG9yJik7Ci0gICAgdm9pZCB2aXNpdE9TUkV4aXRUYXJnZXRzKGNv
bnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIFNsb3RWaXNpdG9yJik7CisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVmlzaXRvcj4gdm9pZCBzdHJvbmdseVZpc2l0U3Ryb25nUmVmZXJlbmNlcyhjb25zdCBD
b25jdXJyZW50SlNMb2NrZXImLCBWaXNpdG9yJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlz
aXRvcj4gdm9pZCBzdHJvbmdseVZpc2l0V2Vha1JlZmVyZW5jZXMoY29uc3QgQ29uY3VycmVudEpT
TG9ja2VyJiwgVmlzaXRvciYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQg
dmlzaXRPU1JFeGl0VGFyZ2V0cyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBWaXNpdG9yJik7
CiAKICAgICB1bnNpZ25lZCBudW1iZXJPZk5vbkFyZ3VtZW50VmFsdWVQcm9maWxlcygpIHsgcmV0
dXJuIG1fbnVtYmVyT2ZOb25Bcmd1bWVudFZhbHVlUHJvZmlsZXM7IH0KICAgICB1bnNpZ25lZCB0
b3RhbE51bWJlck9mVmFsdWVQcm9maWxlcygpIHsgcmV0dXJuIG51bWJlck9mQXJndW1lbnRWYWx1
ZVByb2ZpbGVzKCkgKyBudW1iZXJPZk5vbkFyZ3VtZW50VmFsdWVQcm9maWxlcygpOyB9CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRGVsZXRlQnlJZFZhcmlhbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9EZWxldGVCeUlkVmFy
aWFudC5jcHAJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9EZWxldGVCeUlkVmFyaWFudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODgsMTIgKzg4LDE2IEBA
IGJvb2wgRGVsZXRlQnlJZFZhcmlhbnQ6OndyaXRlc1N0cnVjdHVyZXMKICAgICByZXR1cm4gISFu
ZXdTdHJ1Y3R1cmUoKTsKIH0KIAotdm9pZCBEZWxldGVCeUlkVmFyaWFudDo6dmlzaXRBZ2dyZWdh
dGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9p
ZCBEZWxldGVCeUlkVmFyaWFudDo6dmlzaXRBZ2dyZWdhdGVJbXBsKFZpc2l0b3ImIHZpc2l0b3Ip
CiB7CiAgICAgbV9pZGVudGlmaWVyLnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOwogfQogCi12b2lk
IERlbGV0ZUJ5SWRWYXJpYW50OjptYXJrSWZDaGVhcChTbG90VmlzaXRvciYgdmlzaXRvcikKK0RF
RklORV9WSVNJVF9BR0dSRUdBVEUoRGVsZXRlQnlJZFZhcmlhbnQpOworCit0ZW1wbGF0ZTx0eXBl
bmFtZSBWaXNpdG9yPgordm9pZCBEZWxldGVCeUlkVmFyaWFudDo6bWFya0lmQ2hlYXAoVmlzaXRv
ciYgdmlzaXRvcikKIHsKICAgICBpZiAobV9vbGRTdHJ1Y3R1cmUpCiAgICAgICAgIG1fb2xkU3Ry
dWN0dXJlLT5tYXJrSWZDaGVhcCh2aXNpdG9yKTsKQEAgLTEwMSw2ICsxMDUsOSBAQCB2b2lkIERl
bGV0ZUJ5SWRWYXJpYW50OjptYXJrSWZDaGVhcChTbG90CiAgICAgICAgIG1fbmV3U3RydWN0dXJl
LT5tYXJrSWZDaGVhcCh2aXNpdG9yKTsKIH0KIAordGVtcGxhdGUgdm9pZCBEZWxldGVCeUlkVmFy
aWFudDo6bWFya0lmQ2hlYXAoQWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBE
ZWxldGVCeUlkVmFyaWFudDo6bWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImKTsKKwogdm9pZCBEZWxl
dGVCeUlkVmFyaWFudDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAogewogICAgIGR1bXBJ
bkNvbnRleHQob3V0LCBudWxscHRyKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9EZWxldGVCeUlkVmFyaWFudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9EZWxldGVCeUlkVmFyaWFudC5oCShyZXZpc2lvbiAyNzMxMTkpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRGVsZXRlQnlJZFZhcmlhbnQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIwLTIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC02MSw4ICs2MSw4IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgYXR0ZW1wdFRvTWVyZ2Uo
Y29uc3QgRGVsZXRlQnlJZFZhcmlhbnQmIG90aGVyKTsKIAotICAgIHZvaWQgdmlzaXRBZ2dyZWdh
dGUoU2xvdFZpc2l0b3ImKTsKLSAgICB2b2lkIG1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJik7Cisg
ICAgREVDTEFSRV9WSVNJVF9BR0dSRUdBVEU7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRv
cj4gdm9pZCBtYXJrSWZDaGVhcChWaXNpdG9yJik7CiAgICAgYm9vbCBmaW5hbGl6ZShWTSYpOwog
CiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvRGVsZXRlQnlTdGF0dXMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9EZWxldGVCeVN0YXR1cy5jcHAJKHJldmlzaW9uIDI3
MzExOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9EZWxldGVCeVN0YXR1cy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAy
MC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMjU0LDE4ICsyNTQsMjUgQEAgQ2FjaGVhYmxlSWRlbnRpZmllciBE
ZWxldGVCeVN0YXR1czo6c2luZwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQgRGVsZXRl
QnlTdGF0dXM6OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8
dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgRGVsZXRlQnlTdGF0dXM6OnZpc2l0QWdncmVnYXRlSW1w
bChWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGZvciAoRGVsZXRlQnlJZFZhcmlhbnQmIHZhcmlh
bnQgOiBtX3ZhcmlhbnRzKQogICAgICAgICB2YXJpYW50LnZpc2l0QWdncmVnYXRlKHZpc2l0b3Ip
OwogfQogCi12b2lkIERlbGV0ZUJ5U3RhdHVzOjptYXJrSWZDaGVhcChTbG90VmlzaXRvciYgdmlz
aXRvcikKK0RFRklORV9WSVNJVF9BR0dSRUdBVEUoRGVsZXRlQnlTdGF0dXMpOworCit0ZW1wbGF0
ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBEZWxldGVCeVN0YXR1czo6bWFya0lmQ2hlYXAoVmlz
aXRvciYgdmlzaXRvcikKIHsKICAgICBmb3IgKERlbGV0ZUJ5SWRWYXJpYW50JiB2YXJpYW50IDog
bV92YXJpYW50cykKICAgICAgICAgdmFyaWFudC5tYXJrSWZDaGVhcCh2aXNpdG9yKTsKIH0KIAor
dGVtcGxhdGUgdm9pZCBEZWxldGVCeVN0YXR1czo6bWFya0lmQ2hlYXAoQWJzdHJhY3RTbG90Vmlz
aXRvciYpOwordGVtcGxhdGUgdm9pZCBEZWxldGVCeVN0YXR1czo6bWFya0lmQ2hlYXAoU2xvdFZp
c2l0b3ImKTsKKwogYm9vbCBEZWxldGVCeVN0YXR1czo6ZmluYWxpemUoVk0mIHZtKQogewogICAg
IGZvciAoYXV0byYgdmFyaWFudCA6IG1fdmFyaWFudHMpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9EZWxldGVCeVN0YXR1cy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9EZWxldGVCeVN0YXR1cy5oCShyZXZpc2lvbiAyNzMxMTkp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRGVsZXRlQnlTdGF0dXMuaAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIwLTIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC04MSw4ICs4MSw4IEBAIHB1YmxpYzoKICAgICAvLyBBdHRlbXB0cyB0byByZWR1
Y2UgdGhlIHNldCBvZiB2YXJpYW50cyB0byBmaXQgdGhlIGdpdmVuIHN0cnVjdHVyZSBzZXQuIFRo
aXMgbWF5IGJlIGFwcHJveGltYXRlLgogICAgIHZvaWQgZmlsdGVyKGNvbnN0IFN0cnVjdHVyZVNl
dCYpOwogCi0gICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYpOwotICAgIHZvaWQg
bWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0FHR1JFR0FURTsK
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIG1hcmtJZkNoZWFwKFZpc2l0b3Im
KTsKICAgICBib29sIGZpbmFsaXplKFZNJik7CiAKICAgICBib29sIGFwcGVuZFZhcmlhbnQoY29u
c3QgRGVsZXRlQnlJZFZhcmlhbnQmKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9EaXJlY3RFdmFsQ29kZUNhY2hlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvRGlyZWN0RXZhbENvZGVDYWNoZS5jcHAJKHJldmlzaW9uIDI3MzEx
OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9EaXJlY3RFdmFsQ29kZUNhY2hl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC00NSw3ICs0NSw4IEBAIHZvaWQgRGlyZWN0RXZhbENvZGVDYWNo
ZTo6Y2xlYXIoKQogICAgIG1fY2FjaGVNYXAuY2xlYXIoKTsKIH0KIAotdm9pZCBEaXJlY3RFdmFs
Q29kZUNhY2hlOjp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRl
PHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIERpcmVjdEV2YWxDb2RlQ2FjaGU6OnZpc2l0QWdncmVn
YXRlSW1wbChWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fbG9j
ayk7CiAgICAgRXZhbENhY2hlTWFwOjppdGVyYXRvciBlbmQgPSBtX2NhY2hlTWFwLmVuZCgpOwpA
QCAtNTMsNSArNTQsNiBAQCB2b2lkIERpcmVjdEV2YWxDb2RlQ2FjaGU6OnZpc2l0QWdncmVnYXRl
CiAgICAgICAgIHZpc2l0b3IuYXBwZW5kKHB0ci0+dmFsdWUpOwogfQogCi19IC8vIG5hbWVzcGFj
ZSBKU0MKK0RFRklORV9WSVNJVF9BR0dSRUdBVEUoRGlyZWN0RXZhbENvZGVDYWNoZSk7CiAKK30g
Ly8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Rp
cmVjdEV2YWxDb2RlQ2FjaGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvRGlyZWN0RXZhbENvZGVDYWNoZS5oCShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRGlyZWN0RXZhbENvZGVDYWNoZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOC0yMDE5IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtOTcsNyArOTcsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBib29s
IGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBtX2NhY2hlTWFwLmlzRW1wdHkoKTsgfQogCi0gICAg
ICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImKTsKKyAgICAgICAgREVDTEFSRV9W
SVNJVF9BR0dSRUdBVEU7CiAKICAgICAgICAgdm9pZCBjbGVhcigpOwogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGFibGVUb0Nv
ZGVCbG9ja0VkZ2UuY3BwCShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOC0yMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
NTMsNyArNTMsOCBAQCB2b2lkIEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2U6OmZpbmlzaENyCiAg
ICAgQVNTRVJUKCFpc0FjdGl2ZSgpKTsKIH0KIAotdm9pZCBFeGVjdXRhYmxlVG9Db2RlQmxvY2tF
ZGdlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0
ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBFeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdl
Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAg
ICAgVk0mIHZtID0gdmlzaXRvci52bSgpOwogICAgIEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2Uq
IGVkZ2UgPSBqc0Nhc3Q8RXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZSo+KGNlbGwpOwpAQCAtNjEs
NyArNjIsNyBAQCB2b2lkIEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2U6OnZpc2l0Q2hpCiAgICAg
QmFzZTo6dmlzaXRDaGlsZHJlbihjZWxsLCB2aXNpdG9yKTsKIAogICAgIENvZGVCbG9jayogY29k
ZUJsb2NrID0gZWRnZS0+bV9jb2RlQmxvY2suZ2V0KCk7Ci0gICAgCisKICAgICAvLyBJdCdzIHBv
c3NpYmxlIGZvciBzb21lb25lIHRvIGhvbGQgYSBwb2ludGVyIHRvIHRoZSBlZGdlIGFmdGVyIHRo
ZSBlZGdlIGhhcyBjbGVhcmVkIGl0cyB3ZWFrCiAgICAgLy8gcmVmZXJlbmNlIHRvIHRoZSBjb2Rl
QmxvY2suIEluIGEgY29uc2VydmF0aXZlIEdDIGxpa2Ugb3VycywgdGhhdCBjb3VsZCBoYXBwZW4g
YXQgcmFuZG9tIGZvcgogICAgIC8vIG5vIGdvb2QgcmVhc29uIGFuZCBpdCdzIFRvdGFsbHkgT0sg
KFRNKS4gU2VlIGZpbmFsaXplVW5jb25kaXRpb25hbGx5KCkgZm9yIHdoZXJlIHdlIGNsZWFyCkBA
IC03NSwxMSArNzYsMTEgQEAgdm9pZCBFeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlOjp2aXNpdENo
aQogICAgIH0KICAgICAKICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+
bV9sb2NrKTsKLSAgICAKLSAgICBpZiAoY29kZUJsb2NrLT5zaG91bGRWaXNpdFN0cm9uZ2x5KGxv
Y2tlcikpCisKKyAgICBpZiAoY29kZUJsb2NrLT5zaG91bGRWaXNpdFN0cm9uZ2x5KGxvY2tlciwg
dmlzaXRvcikpCiAgICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQoY29kZUJsb2NrKTsK
ICAgICAKLSAgICBpZiAoIXZtLmhlYXAuaXNNYXJrZWQoY29kZUJsb2NrKSkKKyAgICBpZiAoIXZp
c2l0b3IuaXNNYXJrZWQoY29kZUJsb2NrKSkKICAgICAgICAgdm0uZXhlY3V0YWJsZVRvQ29kZUJs
b2NrRWRnZXNXaXRoRmluYWxpemVycy5hZGQoZWRnZSk7CiAgICAgCiAgICAgaWYgKEpJVENvZGU6
OmlzT3B0aW1pemluZ0pJVChjb2RlQmxvY2stPmppdFR5cGUoKSkpIHsKQEAgLTExNyw3ICsxMTgs
MTAgQEAgdm9pZCBFeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlOjp2aXNpdENoaQogICAgIGVkZ2Ut
PnJ1bkNvbnN0cmFpbnQobG9ja2VyLCB2bSwgdmlzaXRvcik7CiB9CiAKLXZvaWQgRXhlY3V0YWJs
ZVRvQ29kZUJsb2NrRWRnZTo6dmlzaXRPdXRwdXRDb25zdHJhaW50cyhKU0NlbGwqIGNlbGwsIFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEV4ZWN1dGFibGVUb0Nv
ZGVCbG9ja0VkZ2UpOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBFeGVjdXRh
YmxlVG9Db2RlQmxvY2tFZGdlOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzSW1wbChKU0NlbGwqIGNl
bGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgVk0mIHZtID0gdmlzaXRvci52bSgpOwogICAg
IEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UqIGVkZ2UgPSBqc0Nhc3Q8RXhlY3V0YWJsZVRvQ29k
ZUJsb2NrRWRnZSo+KGNlbGwpOwpAQCAtMTI1LDYgKzEyOSw4IEBAIHZvaWQgRXhlY3V0YWJsZVRv
Q29kZUJsb2NrRWRnZTo6dmlzaXRPdXQKICAgICBlZGdlLT5ydW5Db25zdHJhaW50KE5vTG9ja2lu
Z05lY2Vzc2FyeSwgdm0sIHZpc2l0b3IpOwogfQogCitERUZJTkVfVklTSVRfT1VUUFVUX0NPTlNU
UkFJTlRTKEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UpOworCiB2b2lkIEV4ZWN1dGFibGVUb0Nv
ZGVCbG9ja0VkZ2U6OmZpbmFsaXplVW5jb25kaXRpb25hbGx5KFZNJiB2bSkKIHsKICAgICBDb2Rl
QmxvY2sqIGNvZGVCbG9jayA9IG1fY29kZUJsb2NrLmdldCgpOwpAQCAtMTg2LDE2ICsxOTIsMjEg
QEAgRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZTo6RXhlY3V0YWJsZVRvQwogewogfQogCi12b2lk
IEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2U6OnJ1bkNvbnN0cmFpbnQoY29uc3QgQ29uY3VycmVu
dEpTTG9ja2VyJiBsb2NrZXIsIFZNJiB2bSwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0
ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBFeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlOjpydW5D
b25zdHJhaW50KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYgbG9ja2VyLCBWTSYgdm0sIFZpc2l0
b3ImIHZpc2l0b3IpCiB7CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBtX2NvZGVCbG9jay5n
ZXQoKTsKICAgICAKICAgICBjb2RlQmxvY2stPnByb3BhZ2F0ZVRyYW5zaXRpb25zKGxvY2tlciwg
dmlzaXRvcik7CiAgICAgY29kZUJsb2NrLT5kZXRlcm1pbmVMaXZlbmVzcyhsb2NrZXIsIHZpc2l0
b3IpOwotICAgIAotICAgIGlmICh2bS5oZWFwLmlzTWFya2VkKGNvZGVCbG9jaykpCisKKyAgICBp
ZiAodmlzaXRvci5pc01hcmtlZChjb2RlQmxvY2spKQogICAgICAgICB2bS5leGVjdXRhYmxlVG9D
b2RlQmxvY2tFZGdlc1dpdGhDb25zdHJhaW50cy5yZW1vdmUodGhpcyk7CiB9CiAKK3RlbXBsYXRl
IHZvaWQgRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZTo6cnVuQ29uc3RyYWludChjb25zdCBDb25j
dXJyZW50SlNMb2NrZXImLCBWTSYsIEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZv
aWQgRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZTo6cnVuQ29uc3RyYWludChjb25zdCBDb25jdXJy
ZW50SlNMb2NrZXImLCBWTSYsIFNsb3RWaXNpdG9yJik7CisKKwogfSAvLyBuYW1lc3BhY2UgSlND
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGVjdXRhYmxlVG9Db2Rl
QmxvY2tFZGdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0V4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UuaAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UuaAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAx
OSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTgt
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTUzLDkgKzUzLDkgQEAgcHVibGljOgogICAgIERFQ0xBUkVfSU5GTzsK
IAogICAgIENvZGVCbG9jayogY29kZUJsb2NrKCkgY29uc3QgeyByZXR1cm4gbV9jb2RlQmxvY2su
Z2V0KCk7IH0KLSAgICAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNs
b3RWaXNpdG9yJik7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRPdXRwdXRDb25zdHJhaW50cyhKU0Nl
bGwqLCBTbG90VmlzaXRvciYpOworCisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKKyAgICBE
RUNMQVJFX1ZJU0lUX09VVFBVVF9DT05TVFJBSU5UUzsKICAgICB2b2lkIGZpbmFsaXplVW5jb25k
aXRpb25hbGx5KFZNJik7CiAgICAgCiAgICAgc3RhdGljIENvZGVCbG9jayogdW53cmFwKEV4ZWN1
dGFibGVUb0NvZGVCbG9ja0VkZ2UqIGVkZ2UpCkBAIC04MSw5ICs4MSw5IEBAIHByaXZhdGU6CiAg
ICAgdm9pZCBhY3RpdmF0ZSgpOwogICAgIHZvaWQgZGVhY3RpdmF0ZSgpOwogICAgIGJvb2wgaXNB
Y3RpdmUoKSBjb25zdDsKLSAgICAKLSAgICB2b2lkIHJ1bkNvbnN0cmFpbnQoY29uc3QgQ29uY3Vy
cmVudEpTTG9ja2VyJiwgVk0mLCBTbG90VmlzaXRvciYpOwotICAgIAorCisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCBydW5Db25zdHJhaW50KGNvbnN0IENvbmN1cnJlbnRKU0xv
Y2tlciYsIFZNJiwgVmlzaXRvciYpOworCiAgICAgV3JpdGVCYXJyaWVyPENvZGVCbG9jaz4gbV9j
b2RlQmxvY2s7CiB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0
QnlJZFZhcmlhbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9HZXRCeUlkVmFyaWFudC5jcHAJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkVmFyaWFudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMjAgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0xNTYsMTYgKzE1NiwyMyBAQCBib29sIEdldEJ5SWRWYXJpYW50OjphdHRlbXB0VG9NZXJnZShj
b25zCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgR2V0QnlJZFZhcmlhbnQ6OnZpc2l0QWdn
cmVnYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4K
K3ZvaWQgR2V0QnlJZFZhcmlhbnQ6OnZpc2l0QWdncmVnYXRlSW1wbChWaXNpdG9yJiB2aXNpdG9y
KQogewogICAgIG1faWRlbnRpZmllci52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKIH0KIAotdm9p
ZCBHZXRCeUlkVmFyaWFudDo6bWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCitERUZJ
TkVfVklTSVRfQUdHUkVHQVRFKEdldEJ5SWRWYXJpYW50KTsKKwordGVtcGxhdGU8dHlwZW5hbWUg
VmlzaXRvcj4KK3ZvaWQgR2V0QnlJZFZhcmlhbnQ6Om1hcmtJZkNoZWFwKFZpc2l0b3ImIHZpc2l0
b3IpCiB7CiAgICAgbV9zdHJ1Y3R1cmVTZXQubWFya0lmQ2hlYXAodmlzaXRvcik7CiB9CiAKK3Rl
bXBsYXRlIHZvaWQgR2V0QnlJZFZhcmlhbnQ6Om1hcmtJZkNoZWFwKEFic3RyYWN0U2xvdFZpc2l0
b3ImKTsKK3RlbXBsYXRlIHZvaWQgR2V0QnlJZFZhcmlhbnQ6Om1hcmtJZkNoZWFwKFNsb3RWaXNp
dG9yJik7CisKIGJvb2wgR2V0QnlJZFZhcmlhbnQ6OmZpbmFsaXplKFZNJiB2bSkKIHsKICAgICBp
ZiAoIW1fc3RydWN0dXJlU2V0LmlzU3RpbGxBbGl2ZSh2bSkpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFZhcmlhbnQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFZhcmlhbnQuaAkocmV2aXNpb24gMjczMTE5
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRWYXJpYW50LmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0LTIw
MjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0
LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC03Nyw4ICs3Nyw4IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgYXR0ZW1w
dFRvTWVyZ2UoY29uc3QgR2V0QnlJZFZhcmlhbnQmIG90aGVyKTsKICAgICAKLSAgICB2b2lkIHZp
c2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJik7Ci0gICAgdm9pZCBtYXJrSWZDaGVhcChTbG90Vmlz
aXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQUdHUkVHQVRFOworICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFZpc2l0b3I+IHZvaWQgbWFya0lmQ2hlYXAoVmlzaXRvciYpOwogICAgIGJvb2wgZmluYWxp
emUoVk0mKTsKICAgICAKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeVN0YXR1cy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5U3RhdHVzLmNwcAkocmV2
aXNpb24gMjczMTE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5U3Rh
dHVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTItMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTItMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTUzMCw3ICs1MzAsOCBAQCB2b2lkIEdldEJ5U3Rh
dHVzOjpmaWx0ZXIoY29uc3QgU3RydWN0dXJlCiAgICAgICAgIG1fc3RhdGUgPSBOb0luZm9ybWF0
aW9uOwogfQogCi12b2lkIEdldEJ5U3RhdHVzOjp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYg
dmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEdldEJ5U3RhdHVzOjp2
aXNpdEFnZ3JlZ2F0ZUltcGwoVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBpZiAoaXNNb2R1bGVO
YW1lc3BhY2UoKSkKICAgICAgICAgbV9tb2R1bGVOYW1lc3BhY2VEYXRhLT5tX2lkZW50aWZpZXIu
dmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7CkBAIC01MzgsMTIgKzUzOSwxOCBAQCB2b2lkIEdldEJ5
U3RhdHVzOjp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzCiAgICAgICAgIHZhcmlhbnQudmlzaXRBZ2dy
ZWdhdGUodmlzaXRvcik7CiB9CiAKLXZvaWQgR2V0QnlTdGF0dXM6Om1hcmtJZkNoZWFwKFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQorREVGSU5FX1ZJU0lUX0FHR1JFR0FURShHZXRCeVN0YXR1cyk7CisK
K3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEdldEJ5U3RhdHVzOjptYXJrSWZDaGVh
cChWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGZvciAoR2V0QnlJZFZhcmlhbnQmIHZhcmlhbnQg
OiBtX3ZhcmlhbnRzKQogICAgICAgICB2YXJpYW50Lm1hcmtJZkNoZWFwKHZpc2l0b3IpOwogfQog
Cit0ZW1wbGF0ZSB2b2lkIEdldEJ5U3RhdHVzOjptYXJrSWZDaGVhcChBYnN0cmFjdFNsb3RWaXNp
dG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEdldEJ5U3RhdHVzOjptYXJrSWZDaGVhcChTbG90VmlzaXRv
ciYpOworCiBib29sIEdldEJ5U3RhdHVzOjpmaW5hbGl6ZShWTSYgdm0pCiB7CiAgICAgZm9yIChH
ZXRCeUlkVmFyaWFudCYgdmFyaWFudCA6IG1fdmFyaWFudHMpIHsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeVN0YXR1cy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeVN0YXR1cy5oCShyZXZpc2lvbiAyNzMxMTkpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlTdGF0dXMuaAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTExOCw4ICsxMTgsOCBAQCBwdWJsaWM6CiAgICAgSlNNb2R1bGVFbnZpcm9ubWVu
dCogbW9kdWxlRW52aXJvbm1lbnQoKSBjb25zdCB7IHJldHVybiBtX21vZHVsZU5hbWVzcGFjZURh
dGEtPm1fbW9kdWxlRW52aXJvbm1lbnQ7IH0KICAgICBTY29wZU9mZnNldCBzY29wZU9mZnNldCgp
IGNvbnN0IHsgcmV0dXJuIG1fbW9kdWxlTmFtZXNwYWNlRGF0YS0+bV9zY29wZU9mZnNldDsgfQog
ICAgIAotICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImKTsKLSAgICB2b2lkIG1h
cmtJZkNoZWFwKFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9BR0dSRUdBVEU7Cisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCBtYXJrSWZDaGVhcChWaXNpdG9yJik7
CiAgICAgYm9vbCBmaW5hbGl6ZShWTSYpOyAvLyBSZXR1cm4gdHJ1ZSBpZiB0aGlzIGdldHMgdG8g
bGl2ZS4KIAogICAgIGJvb2wgYXBwZW5kVmFyaWFudChjb25zdCBHZXRCeUlkVmFyaWFudCYpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luQnlJZFN0YXR1cy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luQnlJZFN0YXR1cy5j
cHAJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9J
bkJ5SWRTdGF0dXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENv
cHlyaWdodCAoQykgMjAxOCBZdXN1a2UgU3V6dWtpIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+Lgot
ICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxOC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjUxLDEyICsyNTEsMTYgQEAgdm9p
ZCBJbkJ5SWRTdGF0dXM6OmZpbHRlcihjb25zdCBTdHJ1Y3R1cgogICAgICAgICBtX3N0YXRlID0g
Tm9JbmZvcm1hdGlvbjsKIH0KIAotdm9pZCBJbkJ5SWRTdGF0dXM6Om1hcmtJZkNoZWFwKFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSW5CeUlk
U3RhdHVzOjptYXJrSWZDaGVhcChWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGZvciAoSW5CeUlk
VmFyaWFudCYgdmFyaWFudCA6IG1fdmFyaWFudHMpCiAgICAgICAgIHZhcmlhbnQubWFya0lmQ2hl
YXAodmlzaXRvcik7CiB9CiAKK3RlbXBsYXRlIHZvaWQgSW5CeUlkU3RhdHVzOjptYXJrSWZDaGVh
cChBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEluQnlJZFN0YXR1czo6bWFy
a0lmQ2hlYXAoU2xvdFZpc2l0b3ImKTsKKwogYm9vbCBJbkJ5SWRTdGF0dXM6OmZpbmFsaXplKFZN
JiB2bSkKIHsKICAgICBmb3IgKEluQnlJZFZhcmlhbnQmIHZhcmlhbnQgOiBtX3ZhcmlhbnRzKSB7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5CeUlkU3RhdHVzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luQnlJZFN0YXR1cy5o
CShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5C
eUlkU3RhdHVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogQ29weXJp
Z2h0IChDKSAyMDE4IFl1c3VrZSBTdXp1a2kgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4uCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE4LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMDYsNyArMTA2LDcgQEAgcHVibGljOgog
ICAgIC8vIEF0dGVtcHRzIHRvIHJlZHVjZSB0aGUgc2V0IG9mIHZhcmlhbnRzIHRvIGZpdCB0aGUg
Z2l2ZW4gc3RydWN0dXJlIHNldC4gVGhpcyBtYXkgYmUgYXBwcm94aW1hdGUuCiAgICAgdm9pZCBm
aWx0ZXIoY29uc3QgU3RydWN0dXJlU2V0Jik7CiAgICAgCi0gICAgdm9pZCBtYXJrSWZDaGVhcChT
bG90VmlzaXRvciYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgbWFya0lm
Q2hlYXAoVmlzaXRvciYpOwogICAgIGJvb2wgZmluYWxpemUoVk0mKTsKIAogICAgIHZvaWQgZHVt
cChQcmludFN0cmVhbSYpIGNvbnN0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0luQnlJZFZhcmlhbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9JbkJ5SWRWYXJpYW50LmNwcAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luQnlJZFZhcmlhbnQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxOCBZdXN1a2UgU3V6dWtp
IDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+LgotICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOC0yMDIxIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtNjQsMTEgKzY0LDE1IEBAIGJvb2wgSW5CeUlkVmFyaWFudDo6YXR0ZW1wdFRvTWVyZ2Uo
Y29uc3QKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBJbkJ5SWRWYXJpYW50OjptYXJrSWZD
aGVhcChTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2
b2lkIEluQnlJZFZhcmlhbnQ6Om1hcmtJZkNoZWFwKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAg
bV9zdHJ1Y3R1cmVTZXQubWFya0lmQ2hlYXAodmlzaXRvcik7CiB9CiAKK3RlbXBsYXRlIHZvaWQg
SW5CeUlkVmFyaWFudDo6bWFya0lmQ2hlYXAoQWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxh
dGUgdm9pZCBJbkJ5SWRWYXJpYW50OjptYXJrSWZDaGVhcChTbG90VmlzaXRvciYpOworCiBib29s
IEluQnlJZFZhcmlhbnQ6OmZpbmFsaXplKFZNJiB2bSkKIHsKICAgICBpZiAoIW1fc3RydWN0dXJl
U2V0LmlzU3RpbGxBbGl2ZSh2bSkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvSW5CeUlkVmFyaWFudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9JbkJ5SWRWYXJpYW50LmgJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9JbkJ5SWRWYXJpYW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NiArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDE4IFl1c3VrZSBTdXp1a2kgPHV0YXRh
bmUudGVhQGdtYWlsLmNvbT4uCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01
Nyw3ICs1Nyw3IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgYXR0ZW1wdFRvTWVyZ2UoY29uc3QgSW5C
eUlkVmFyaWFudCYgb3RoZXIpOwogICAgIAotICAgIHZvaWQgbWFya0lmQ2hlYXAoU2xvdFZpc2l0
b3ImKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIG1hcmtJZkNoZWFwKFZp
c2l0b3ImKTsKICAgICBib29sIGZpbmFsaXplKFZNJik7CiAKICAgICB2b2lkIGR1bXAoUHJpbnRT
dHJlYW0mKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnRl
cm5hbEZ1bmN0aW9uQWxsb2NhdGlvblByb2ZpbGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW50ZXJuYWxGdW5jdGlvbkFsbG9jYXRpb25Qcm9maWxlLmgJ
KHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnRl
cm5hbEZ1bmN0aW9uQWxsb2NhdGlvblByb2ZpbGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM5LDcg
KzM5LDcgQEAgcHVibGljOgogICAgIFN0cnVjdHVyZSogY3JlYXRlQWxsb2NhdGlvblN0cnVjdHVy
ZUZyb21CYXNlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU0NlbGwqIG93bmVyLCBKU09iamVjdCog
cHJvdG90eXBlLCBTdHJ1Y3R1cmUqIGJhc2UpOwogCiAgICAgdm9pZCBjbGVhcigpIHsgbV9zdHJ1
Y3R1cmUuY2xlYXIoKTsgfQotICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImIHZp
c2l0b3IpIHsgdmlzaXRvci5hcHBlbmQobV9zdHJ1Y3R1cmUpOyB9CisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVmlzaXRvcj4gdm9pZCB2aXNpdEFnZ3JlZ2F0ZShWaXNpdG9yJiB2aXNpdG9yKSB7IHZp
c2l0b3IuYXBwZW5kKG1fc3RydWN0dXJlKTsgfQogCiBwcml2YXRlOgogICAgIFdyaXRlQmFycmll
cjxTdHJ1Y3R1cmU+IG1fc3RydWN0dXJlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL09iamVjdEFsbG9jYXRpb25Qcm9maWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL09iamVjdEFsbG9jYXRpb25Qcm9maWxlLmgJKHJldmlzaW9u
IDI3MzExOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PYmplY3RBbGxvY2F0
aW9uUHJvZmlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjQsNyArNjQsOCBAQCBwcm90ZWN0ZWQ6
CiAgICAgICAgIEFTU0VSVChpc051bGwoKSk7CiAgICAgfQogCi0gICAgdm9pZCB2aXNpdEFnZ3Jl
Z2F0ZShTbG90VmlzaXRvciYgdmlzaXRvcikKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
PgorICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoVmlzaXRvciYgdmlzaXRvcikKICAgICB7CiAgICAg
ICAgIHZpc2l0b3IuYXBwZW5kKG1fc3RydWN0dXJlKTsKICAgICB9CkBAIC0xMTAsNyArMTExLDgg
QEAgcHVibGljOgogICAgICAgICBBU1NFUlQoaXNOdWxsKCkpOwogICAgIH0KIAotICAgIHZvaWQg
dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgVmlzaXRvcj4KKyAgICB2b2lkIHZpc2l0QWdncmVnYXRlKFZpc2l0b3ImIHZpc2l0b3IpCiAg
ICAgewogICAgICAgICBCYXNlOjp2aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKICAgICAgICAgdmlz
aXRvci5hcHBlbmQobV9wcm90b3R5cGUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwCShyZXZpc2lvbiAyNzMxMTkp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
NC0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMzU4LDcgKzM1OCw4IEBAIGJvb2wgUG9seW1vcnBoaWNBY2Nl
c3M6OnZpc2l0V2VhayhWTSYgdm0KICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBQb2x5bW9y
cGhpY0FjY2Vzczo6cHJvcGFnYXRlVHJhbnNpdGlvbnMoU2xvdFZpc2l0b3ImIHZpc2l0b3IpIGNv
bnN0Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgorYm9vbCBQb2x5bW9ycGhpY0FjY2Vzczo6
cHJvcGFnYXRlVHJhbnNpdGlvbnMoVmlzaXRvciYgdmlzaXRvcikgY29uc3QKIHsKICAgICBib29s
IHJlc3VsdCA9IHRydWU7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemUoKTsgKytp
KQpAQCAtMzY2LDEyICszNjcsMTggQEAgYm9vbCBQb2x5bW9ycGhpY0FjY2Vzczo6cHJvcGFnYXRl
VHJhbnNpdAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQgUG9seW1vcnBoaWNBY2Nlc3M6
OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGUgYm9vbCBQb2x5
bW9ycGhpY0FjY2Vzczo6cHJvcGFnYXRlVHJhbnNpdGlvbnMoQWJzdHJhY3RTbG90VmlzaXRvciYp
IGNvbnN0OwordGVtcGxhdGUgYm9vbCBQb2x5bW9ycGhpY0FjY2Vzczo6cHJvcGFnYXRlVHJhbnNp
dGlvbnMoU2xvdFZpc2l0b3ImKSBjb25zdDsKKwordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4K
K3ZvaWQgUG9seW1vcnBoaWNBY2Nlc3M6OnZpc2l0QWdncmVnYXRlSW1wbChWaXNpdG9yJiB2aXNp
dG9yKQogewogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplKCk7ICsraSkKICAgICAg
ICAgYXQoaSkudmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7CiB9CiAKK0RFRklORV9WSVNJVF9BR0dS
RUdBVEUoUG9seW1vcnBoaWNBY2Nlc3MpOworCiB2b2lkIFBvbHltb3JwaGljQWNjZXNzOjpkdW1w
KFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiB7CiAgICAgb3V0LnByaW50KFJhd1BvaW50ZXIodGhp
cyksICI6WyIpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3Jw
aGljQWNjZXNzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1BvbHltb3JwaGljQWNjZXNzLmgJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNC0yMDIwIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MTUyLDE0ICsxNTIsMTQgQEAgcHVibGljOgogICAgIGNvbnN0IEFjY2Vzc0Nhc2UmIGF0KHVuc2ln
bmVkIGkpIGNvbnN0IHsgcmV0dXJuICptX2xpc3RbaV07IH0KICAgICBjb25zdCBBY2Nlc3NDYXNl
JiBvcGVyYXRvcltdKHVuc2lnbmVkIGkpIGNvbnN0IHsgcmV0dXJuICptX2xpc3RbaV07IH0KIAot
ICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lU
X0FHR1JFR0FURTsKIAogICAgIC8vIElmIHRoaXMgcmV0dXJucyBmYWxzZSB0aGVuIHdlIGFyZSBy
ZXF1ZXN0aW5nIGEgcmVzZXQgb2YgdGhlIG93bmluZyBTdHJ1Y3R1cmVTdHViSW5mby4KICAgICBi
b29sIHZpc2l0V2VhayhWTSYpIGNvbnN0OwogICAgIAogICAgIC8vIFRoaXMgcmV0dXJucyB0cnVl
IGlmIGl0IGhhcyBtYXJrZWQgZXZlcnl0aGluZyBpdCB3aWxsIGV2ZXIgbWFya2VkLiBUaGlzIGNh
biBiZSB1c2VkIGFzIGFuCiAgICAgLy8gb3B0aW1pemF0aW9uIHRvIHRoZW4gYXZvaWQgY2FsbGlu
ZyB0aGlzIG1ldGhvZCBhZ2FpbiBkdXJpbmcgdGhlIGZpeHBvaW50LgotICAgIGJvb2wgcHJvcGFn
YXRlVHJhbnNpdGlvbnMoU2xvdFZpc2l0b3ImKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBWaXNpdG9yPiBib29sIHByb3BhZ2F0ZVRyYW5zaXRpb25zKFZpc2l0b3ImKSBjb25zdDsKIAog
ICAgIHZvaWQgYWJvdXRUb0RpZSgpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvUHV0QnlJZFN0YXR1cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuY3BwCShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTkgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0zOTYsMTIgKzM5NiwxNiBAQCBQdXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OnNs
b3dWZXJzaW9uCiAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMobWFrZXNDYWxscygpID8gTWFrZXND
YWxscyA6IFRha2VzU2xvd1BhdGgpOwogfQogCi12b2lkIFB1dEJ5SWRTdGF0dXM6Om1hcmtJZkNo
ZWFwKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3Zv
aWQgUHV0QnlJZFN0YXR1czo6bWFya0lmQ2hlYXAoVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBm
b3IgKFB1dEJ5SWRWYXJpYW50JiB2YXJpYW50IDogbV92YXJpYW50cykKICAgICAgICAgdmFyaWFu
dC5tYXJrSWZDaGVhcCh2aXNpdG9yKTsKIH0KIAordGVtcGxhdGUgdm9pZCBQdXRCeUlkU3RhdHVz
OjptYXJrSWZDaGVhcChBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIFB1dEJ5
SWRTdGF0dXM6Om1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJik7CisKIGJvb2wgUHV0QnlJZFN0YXR1
czo6ZmluYWxpemUoVk0mIHZtKQogewogICAgIGZvciAoUHV0QnlJZFZhcmlhbnQmIHZhcmlhbnQg
OiBtX3ZhcmlhbnRzKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0
QnlJZFN0YXR1cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9QdXRCeUlkU3RhdHVzLmgJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMTcsNyAr
MTE3LDcgQEAgcHVibGljOgogICAgIGNvbnN0IFB1dEJ5SWRWYXJpYW50JiBhdChzaXplX3QgaW5k
ZXgpIGNvbnN0IHsgcmV0dXJuIG1fdmFyaWFudHNbaW5kZXhdOyB9CiAgICAgY29uc3QgUHV0QnlJ
ZFZhcmlhbnQmIG9wZXJhdG9yW10oc2l6ZV90IGluZGV4KSBjb25zdCB7IHJldHVybiBhdChpbmRl
eCk7IH0KICAgICAKLSAgICB2b2lkIG1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJik7CisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCBtYXJrSWZDaGVhcChWaXNpdG9yJik7CiAgICAg
Ym9vbCBmaW5hbGl6ZShWTSYpOwogICAgIAogICAgIHZvaWQgbWVyZ2UoY29uc3QgUHV0QnlJZFN0
YXR1cyYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJp
YW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0
QnlJZFZhcmlhbnQuY3BwCShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNC0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYyLDEz
ICsyNjIsMTcgQEAgYm9vbCBQdXRCeUlkVmFyaWFudDo6YXR0ZW1wdFRvTWVyZ2VUcmFucwogICAg
IHJldHVybiB0cnVlOwogfQogCi12b2lkIFB1dEJ5SWRWYXJpYW50OjptYXJrSWZDaGVhcChTbG90
VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFB1dEJ5
SWRWYXJpYW50OjptYXJrSWZDaGVhcChWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIG1fb2xkU3Ry
dWN0dXJlLm1hcmtJZkNoZWFwKHZpc2l0b3IpOwogICAgIGlmIChtX25ld1N0cnVjdHVyZSkKICAg
ICAgICAgbV9uZXdTdHJ1Y3R1cmUtPm1hcmtJZkNoZWFwKHZpc2l0b3IpOwogfQogCit0ZW1wbGF0
ZSB2b2lkIFB1dEJ5SWRWYXJpYW50OjptYXJrSWZDaGVhcChBYnN0cmFjdFNsb3RWaXNpdG9yJik7
Cit0ZW1wbGF0ZSB2b2lkIFB1dEJ5SWRWYXJpYW50OjptYXJrSWZDaGVhcChTbG90VmlzaXRvciYp
OworCiBib29sIFB1dEJ5SWRWYXJpYW50OjpmaW5hbGl6ZShWTSYgdm0pCiB7CiAgICAgaWYgKCFt
X29sZFN0cnVjdHVyZS5pc1N0aWxsQWxpdmUodm0pKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmgJKHJldmlzaW9uIDI3MzExOSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkVmFyaWFudC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNC0yMDE4IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMTMyLDcgKzEzMiw3IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgYXR0ZW1wdFRv
TWVyZ2UoY29uc3QgUHV0QnlJZFZhcmlhbnQmIG90aGVyKTsKICAgICAKLSAgICB2b2lkIG1hcmtJ
ZkNoZWFwKFNsb3RWaXNpdG9yJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9p
ZCBtYXJrSWZDaGVhcChWaXNpdG9yJik7CiAgICAgYm9vbCBmaW5hbGl6ZShWTSYpOwogICAgIAog
ICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1JlY29yZGVkU3RhdHVzZXMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9SZWNvcmRlZFN0YXR1c2VzLmNwcAkocmV2aXNpb24g
MjczMTE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1JlY29yZGVkU3RhdHVz
ZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDIsNyArMTAyLDggQEAgU2V0UHJpdmF0ZUJyYW5k
U3RhdHVzKiBSZWNvcmRlZFN0YXR1c2VzOgogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQg
UmVjb3JkZWRTdGF0dXNlczo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0
ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBSZWNvcmRlZFN0YXR1c2VzOjp2aXNpdEFn
Z3JlZ2F0ZUltcGwoVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBmb3IgKGF1dG8mIHBhaXIgOiBn
ZXRzKQogICAgICAgICBwYWlyLnNlY29uZC0+dmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7CkBAIC0x
MTQsNyArMTE1LDEwIEBAIHZvaWQgUmVjb3JkZWRTdGF0dXNlczo6dmlzaXRBZ2dyZWdhdGUoU2wK
ICAgICAgICAgcGFpci5zZWNvbmQtPnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOwogfQogCi12b2lk
IFJlY29yZGVkU3RhdHVzZXM6Om1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorREVG
SU5FX1ZJU0lUX0FHR1JFR0FURShSZWNvcmRlZFN0YXR1c2VzKTsKKwordGVtcGxhdGU8dHlwZW5h
bWUgVmlzaXRvcj4KK3ZvaWQgUmVjb3JkZWRTdGF0dXNlczo6bWFya0lmQ2hlYXAoVmlzaXRvciYg
dmlzaXRvcikKIHsKICAgICBmb3IgKGF1dG8mIHBhaXIgOiBnZXRzKQogICAgICAgICBwYWlyLnNl
Y29uZC0+bWFya0lmQ2hlYXAodmlzaXRvcik7CkBAIC0xMzAsNiArMTM0LDkgQEAgdm9pZCBSZWNv
cmRlZFN0YXR1c2VzOjptYXJrSWZDaGVhcChTbG90VgogICAgICAgICBwYWlyLnNlY29uZC0+bWFy
a0lmQ2hlYXAodmlzaXRvcik7CiB9CiAKK3RlbXBsYXRlIHZvaWQgUmVjb3JkZWRTdGF0dXNlczo6
bWFya0lmQ2hlYXAoQWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBSZWNvcmRl
ZFN0YXR1c2VzOjptYXJrSWZDaGVhcChTbG90VmlzaXRvciYpOworCiB2b2lkIFJlY29yZGVkU3Rh
dHVzZXM6OmZpbmFsaXplV2l0aG91dERlbGV0aW5nKFZNJiB2bSkKIHsKICAgICAvLyBUaGlzIHZh
cmlhbnQgb2YgZmluYWxpemUgZ2V0cyBjYWxsZWQgZnJvbSB3aXRoaW4gZ3JhcGggc2FmZXBvaW50
cyAtLSBzbyB0aGVyZSBtYXkgYmUgREZHIElSIGluCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvUmVjb3JkZWRTdGF0dXNlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9SZWNvcmRlZFN0YXR1c2VzLmgJKHJldmlzaW9uIDI3MzExOSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9SZWNvcmRlZFN0YXR1c2VzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE4LTIw
MjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE4
LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC01NCw4ICs1NCw4IEBAIHN0cnVjdCBSZWNvcmRlZFN0YXR1c2VzIHsK
ICAgICBDaGVja1ByaXZhdGVCcmFuZFN0YXR1cyogYWRkQ2hlY2tQcml2YXRlQnJhbmRTdGF0dXMo
Y29uc3QgQ29kZU9yaWdpbiYsIGNvbnN0IENoZWNrUHJpdmF0ZUJyYW5kU3RhdHVzJik7CiAgICAg
U2V0UHJpdmF0ZUJyYW5kU3RhdHVzKiBhZGRTZXRQcml2YXRlQnJhbmRTdGF0dXMoY29uc3QgQ29k
ZU9yaWdpbiYsIGNvbnN0IFNldFByaXZhdGVCcmFuZFN0YXR1cyYpOwogICAgIAotICAgIHZvaWQg
dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImKTsKLSAgICB2b2lkIG1hcmtJZkNoZWFwKFNsb3RW
aXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9BR0dSRUdBVEU7CisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVmlzaXRvcj4gdm9pZCBtYXJrSWZDaGVhcChWaXNpdG9yJik7CiAgICAgCiAgICAgdm9p
ZCBmaW5hbGl6ZVdpdGhvdXREZWxldGluZyhWTSYpOwogICAgIHZvaWQgZmluYWxpemUoVk0mKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TZXRQcml2YXRlQnJhbmRTdGF0
dXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TZXRQ
cml2YXRlQnJhbmRTdGF0dXMuY3BwCShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvU2V0UHJpdmF0ZUJyYW5kU3RhdHVzLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjM1LDE4ICsyMzUsMjUgQEAgQ2FjaGVhYmxlSWRlbnRpZmllciBTZXRQcml2YXRlQnJh
bmRTdGF0dQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQgU2V0UHJpdmF0ZUJyYW5kU3Rh
dHVzOjp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVu
YW1lIFZpc2l0b3I+Cit2b2lkIFNldFByaXZhdGVCcmFuZFN0YXR1czo6dmlzaXRBZ2dyZWdhdGVJ
bXBsKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgZm9yIChTZXRQcml2YXRlQnJhbmRWYXJpYW50
JiB2YXJpYW50IDogbV92YXJpYW50cykKICAgICAgICAgdmFyaWFudC52aXNpdEFnZ3JlZ2F0ZSh2
aXNpdG9yKTsKIH0KIAotdm9pZCBTZXRQcml2YXRlQnJhbmRTdGF0dXM6Om1hcmtJZkNoZWFwKFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQorREVGSU5FX1ZJU0lUX0FHR1JFR0FURShTZXRQcml2YXRlQnJh
bmRTdGF0dXMpOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBTZXRQcml2YXRl
QnJhbmRTdGF0dXM6Om1hcmtJZkNoZWFwKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgZm9yIChT
ZXRQcml2YXRlQnJhbmRWYXJpYW50JiB2YXJpYW50IDogbV92YXJpYW50cykKICAgICAgICAgdmFy
aWFudC5tYXJrSWZDaGVhcCh2aXNpdG9yKTsKIH0KIAordGVtcGxhdGUgdm9pZCBTZXRQcml2YXRl
QnJhbmRTdGF0dXM6Om1hcmtJZkNoZWFwKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRl
IHZvaWQgU2V0UHJpdmF0ZUJyYW5kU3RhdHVzOjptYXJrSWZDaGVhcChTbG90VmlzaXRvciYpOwor
CiBib29sIFNldFByaXZhdGVCcmFuZFN0YXR1czo6ZmluYWxpemUoVk0mIHZtKQogewogICAgIGZv
ciAoYXV0byYgdmFyaWFudCA6IG1fdmFyaWFudHMpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9TZXRQcml2YXRlQnJhbmRTdGF0dXMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU2V0UHJpdmF0ZUJyYW5kU3RhdHVzLmgJKHJldmlz
aW9uIDI3MzExOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TZXRQcml2YXRl
QnJhbmRTdGF0dXMuaAkod29ya2luZyBjb3B5KQpAQCAtODMsOCArODMsOCBAQCBwdWJsaWM6CiAg
ICAgLy8gQXR0ZW1wdHMgdG8gcmVkdWNlIHRoZSBzZXQgb2YgdmFyaWFudHMgdG8gZml0IHRoZSBn
aXZlbiBzdHJ1Y3R1cmUgc2V0LiBUaGlzIG1heSBiZSBhcHByb3hpbWF0ZS4KICAgICB2b2lkIGZp
bHRlcihjb25zdCBTdHJ1Y3R1cmVTZXQmKTsKIAotICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xv
dFZpc2l0b3ImKTsKLSAgICB2b2lkIG1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJik7CisgICAgREVD
TEFSRV9WSVNJVF9BR0dSRUdBVEU7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9p
ZCBtYXJrSWZDaGVhcChWaXNpdG9yJik7CiAgICAgYm9vbCBmaW5hbGl6ZShWTSYpOwogCiAgICAg
Ym9vbCBhcHBlbmRWYXJpYW50KGNvbnN0IFNldFByaXZhdGVCcmFuZFZhcmlhbnQmKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TZXRQcml2YXRlQnJhbmRWYXJpYW50LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU2V0UHJpdmF0
ZUJyYW5kVmFyaWFudC5jcHAJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9TZXRQcml2YXRlQnJhbmRWYXJpYW50LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIwLTIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDIxIElnYWxpYSBTLkEuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC01NCw3ICs1NCw4IEBAIGJv
b2wgU2V0UHJpdmF0ZUJyYW5kVmFyaWFudDo6YXR0ZW1wdFRvTWUKICAgICByZXR1cm4gdHJ1ZTsK
IH0KIAotdm9pZCBTZXRQcml2YXRlQnJhbmRWYXJpYW50OjptYXJrSWZDaGVhcChTbG90VmlzaXRv
ciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFNldFByaXZhdGVC
cmFuZFZhcmlhbnQ6Om1hcmtJZkNoZWFwKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgaWYgKG1f
b2xkU3RydWN0dXJlKQogICAgICAgICBtX29sZFN0cnVjdHVyZS0+bWFya0lmQ2hlYXAodmlzaXRv
cik7CkBAIC02Miw2ICs2Myw5IEBAIHZvaWQgU2V0UHJpdmF0ZUJyYW5kVmFyaWFudDo6bWFya0lm
Q2hlYXAKICAgICAgICAgbV9uZXdTdHJ1Y3R1cmUtPm1hcmtJZkNoZWFwKHZpc2l0b3IpOwogfQog
Cit0ZW1wbGF0ZSB2b2lkIFNldFByaXZhdGVCcmFuZFZhcmlhbnQ6Om1hcmtJZkNoZWFwKEFic3Ry
YWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgU2V0UHJpdmF0ZUJyYW5kVmFyaWFudDo6
bWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImKTsKKwogYm9vbCBTZXRQcml2YXRlQnJhbmRWYXJpYW50
OjpmaW5hbGl6ZShWTSYgdm0pCiB7CiAgICAgaWYgKCF2bS5oZWFwLmlzTWFya2VkKG1fb2xkU3Ry
dWN0dXJlKSkKQEAgLTcxLDExICs3NSwxNCBAQCBib29sIFNldFByaXZhdGVCcmFuZFZhcmlhbnQ6
OmZpbmFsaXplKFZNCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgU2V0UHJpdmF0ZUJyYW5k
VmFyaWFudDo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0
eXBlbmFtZSBWaXNpdG9yPgordm9pZCBTZXRQcml2YXRlQnJhbmRWYXJpYW50Ojp2aXNpdEFnZ3Jl
Z2F0ZUltcGwoVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBtX2lkZW50aWZpZXIudmlzaXRBZ2dy
ZWdhdGUodmlzaXRvcik7CiB9CiAKK0RFRklORV9WSVNJVF9BR0dSRUdBVEUoU2V0UHJpdmF0ZUJy
YW5kVmFyaWFudCk7CisKIHZvaWQgU2V0UHJpdmF0ZUJyYW5kVmFyaWFudDo6ZHVtcChQcmludFN0
cmVhbSYgb3V0KSBjb25zdAogewogICAgIGR1bXBJbkNvbnRleHQob3V0LCBudWxscHRyKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TZXRQcml2YXRlQnJhbmRWYXJpYW50
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NldFByaXZh
dGVCcmFuZFZhcmlhbnQuaAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1NldFByaXZhdGVCcmFuZFZhcmlhbnQuaAkod29ya2luZyBjb3B5KQpAQCAt
NDUsOCArNDUsOCBAQCBwdWJsaWM6CiAKICAgICBib29sIGF0dGVtcHRUb01lcmdlKGNvbnN0IFNl
dFByaXZhdGVCcmFuZFZhcmlhbnQmIG90aGVyKTsKIAotICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUo
U2xvdFZpc2l0b3ImKTsKLSAgICB2b2lkIG1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJik7CisgICAg
REVDTEFSRV9WSVNJVF9BR0dSRUdBVEU7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4g
dm9pZCBtYXJrSWZDaGVhcChWaXNpdG9yJik7CiAgICAgYm9vbCBmaW5hbGl6ZShWTSYpOwogCiAg
ICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU2V0LmNwcAkocmV2aXNpb24gMjczMTE5KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVNldC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTgg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIw
MjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0zMSwxMiArMzEsMTYgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLXZvaWQg
U3RydWN0dXJlU2V0OjptYXJrSWZDaGVhcChTbG90VmlzaXRvciYgdmlzaXRvcikgY29uc3QKK3Rl
bXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFN0cnVjdHVyZVNldDo6bWFya0lmQ2hlYXAo
VmlzaXRvciYgdmlzaXRvcikgY29uc3QKIHsKICAgICBmb3IgKFN0cnVjdHVyZSogc3RydWN0dXJl
IDogKnRoaXMpCiAgICAgICAgIHN0cnVjdHVyZS0+bWFya0lmQ2hlYXAodmlzaXRvcik7CiB9CiAK
K3RlbXBsYXRlIHZvaWQgU3RydWN0dXJlU2V0OjptYXJrSWZDaGVhcChBYnN0cmFjdFNsb3RWaXNp
dG9yJikgY29uc3Q7Cit0ZW1wbGF0ZSB2b2lkIFN0cnVjdHVyZVNldDo6bWFya0lmQ2hlYXAoU2xv
dFZpc2l0b3ImKSBjb25zdDsKKwogYm9vbCBTdHJ1Y3R1cmVTZXQ6OmlzU3RpbGxBbGl2ZShWTSYg
dm0pIGNvbnN0CiB7CiAgICAgZm9yIChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA6ICp0aGlzKSB7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU2V0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVNldC5oCShy
ZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0
dXJlU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDExLTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDExLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01NCw3ICs1NCw3IEBAIHB1YmxpYzoKICAgICAg
ICAgcmV0dXJuIG9ubHlFbnRyeSgpOwogICAgIH0KIAotICAgIHZvaWQgbWFya0lmQ2hlYXAoU2xv
dFZpc2l0b3ImKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIG1h
cmtJZkNoZWFwKFZpc2l0b3ImKSBjb25zdDsKICAgICBib29sIGlzU3RpbGxBbGl2ZShWTSYpIGNv
bnN0OwogICAgIAogICAgIHZvaWQgZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYsIER1bXBDb250
ZXh0KikgY29uc3Q7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0
dXJlU3R1YkluZm8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMjAgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0yOTYsNyArMjk2LDggQEAgdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6cmVzZXQoY29u
c3QgQ29uYwogICAgIHNldENhY2hlVHlwZShsb2NrZXIsIENhY2hlVHlwZTo6VW5zZXQpOwogfQog
Ci12b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYgdmlz
aXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFN0cnVjdHVyZVN0dWJJbmZv
Ojp2aXNpdEFnZ3JlZ2F0ZUltcGwoVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB7CiAgICAgICAg
IGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9idWZmZXJlZFN0cnVjdHVyZXNMb2NrKTsKQEAgLTMy
Miw2ICszMjMsOCBAQCB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjp2aXNpdEFnZ3JlZ2F0ZShTCiAg
ICAgcmV0dXJuOwogfQogCitERUZJTkVfVklTSVRfQUdHUkVHQVRFKFN0cnVjdHVyZVN0dWJJbmZv
KTsKKwogdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6dmlzaXRXZWFrUmVmZXJlbmNlcyhjb25zdCBD
b25jdXJyZW50SlNMb2NrZXJCYXNlJiBsb2NrZXIsIENvZGVCbG9jayogY29kZUJsb2NrKQogewog
ICAgIFZNJiB2bSA9IGNvZGVCbG9jay0+dm0oKTsKQEAgLTM1Miw3ICszNTUsOCBAQCB2b2lkIFN0
cnVjdHVyZVN0dWJJbmZvOjp2aXNpdFdlYWtSZWZlcmVuCiAgICAgcmVzZXRCeUdDID0gdHJ1ZTsK
IH0KIAotYm9vbCBTdHJ1Y3R1cmVTdHViSW5mbzo6cHJvcGFnYXRlVHJhbnNpdGlvbnMoU2xvdFZp
c2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgorYm9vbCBTdHJ1Y3R1
cmVTdHViSW5mbzo6cHJvcGFnYXRlVHJhbnNpdGlvbnMoVmlzaXRvciYgdmlzaXRvcikKIHsKICAg
ICBzd2l0Y2ggKG1fY2FjaGVUeXBlKSB7CiAgICAgY2FzZSBDYWNoZVR5cGU6OlVuc2V0OgpAQCAt
MzcxLDYgKzM3NSw5IEBAIGJvb2wgU3RydWN0dXJlU3R1YkluZm86OnByb3BhZ2F0ZVRyYW5zaXQK
ICAgICByZXR1cm4gdHJ1ZTsKIH0KIAordGVtcGxhdGUgYm9vbCBTdHJ1Y3R1cmVTdHViSW5mbzo6
cHJvcGFnYXRlVHJhbnNpdGlvbnMoQWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgYm9v
bCBTdHJ1Y3R1cmVTdHViSW5mbzo6cHJvcGFnYXRlVHJhbnNpdGlvbnMoU2xvdFZpc2l0b3ImKTsK
KwogU3R1YkluZm9TdW1tYXJ5IFN0cnVjdHVyZVN0dWJJbmZvOjpzdW1tYXJ5KFZNJiB2bSkgY29u
c3QKIHsKICAgICBTdHViSW5mb1N1bW1hcnkgdGFrZXNTbG93UGF0aCA9IFN0dWJJbmZvU3VtbWFy
eTo6VGFrZXNTbG93UGF0aDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9T
dHJ1Y3R1cmVTdHViSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAyMCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAyMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTkzLDE0ICs5MywxNCBAQCBwdWJsaWM6CiAgICAgdm9pZCBkZXJlZigpOwogICAgIHZv
aWQgYWJvdXRUb0RpZSgpOwogCi0gICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYp
OworICAgIERFQ0xBUkVfVklTSVRfQUdHUkVHQVRFOwogCiAgICAgLy8gQ2hlY2sgaWYgdGhlIHN0
dWIgaGFzIHdlYWsgcmVmZXJlbmNlcyB0aGF0IGFyZSBkZWFkLiBJZiBpdCBkb2VzLCB0aGVuIGl0
IHJlc2V0cyBpdHNlbGYsCiAgICAgLy8gZWl0aGVyIGVudGlyZWx5IG9yIGp1c3QgZW5vdWdoIHRv
IGVuc3VyZSB0aGF0IHRob3NlIGRlYWQgcG9pbnRlcnMgZG9uJ3QgZ2V0IHVzZWQgYW55bW9yZS4K
ICAgICB2b2lkIHZpc2l0V2Vha1JlZmVyZW5jZXMoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyQmFz
ZSYsIENvZGVCbG9jayopOwogICAgIAogICAgIC8vIFRoaXMgcmV0dXJucyB0cnVlIGlmIGl0IGhh
cyBtYXJrZWQgZXZlcnl0aGluZyB0aGF0IGl0IHdpbGwgZXZlciBtYXJrLgotICAgIGJvb2wgcHJv
cGFnYXRlVHJhbnNpdGlvbnMoU2xvdFZpc2l0b3ImKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPiBib29sIHByb3BhZ2F0ZVRyYW5zaXRpb25zKFZpc2l0b3ImKTsKICAgICAgICAgCiAg
ICAgU3R1YkluZm9TdW1tYXJ5IHN1bW1hcnkoVk0mKSBjb25zdDsKICAgICAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNw
cAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Vu
bGlua2VkQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxOSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTc1LDcgKzc1LDggQEAgVW5s
aW5rZWRDb2RlQmxvY2s6OlVubGlua2VkQ29kZUJsb2NrKFZNJgogICAgIH0KIH0KIAotdm9pZCBV
bmxpbmtlZENvZGVCbG9jazo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9y
JiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgVW5saW5rZWRDb2Rl
QmxvY2s6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikK
IHsKICAgICBVbmxpbmtlZENvZGVCbG9jayogdGhpc09iamVjdCA9IGpzQ2FzdDxVbmxpbmtlZENv
ZGVCbG9jayo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVj
dCwgaW5mbygpKTsKQEAgLTk0LDYgKzk1LDggQEAgdm9pZCBVbmxpbmtlZENvZGVCbG9jazo6dmlz
aXRDaGlsZHJlbihKUwogICAgIHZpc2l0b3IucmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKGV4dHJh
TWVtb3J5KTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKFVubGlua2VkQ29kZUJsb2NrKTsK
Kwogc2l6ZV90IFVubGlua2VkQ29kZUJsb2NrOjplc3RpbWF0ZWRTaXplKEpTQ2VsbCogY2VsbCwg
Vk0mIHZtKQogewogICAgIFVubGlua2VkQ29kZUJsb2NrKiB0aGlzT2JqZWN0ID0ganNDYXN0PFVu
bGlua2VkQ29kZUJsb2NrKj4oY2VsbCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaAkocmV2aXNpb24gMjczMTE5KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTkg
QXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIw
MjEgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC00MzEsNyArNDMxLDcgQEAgcHJpdmF0ZToKICAgICBSZWZDb3VudGVkQXJy
YXk8RXhwcmVzc2lvblJhbmdlSW5mbz4gbV9leHByZXNzaW9uSW5mbzsKIAogcHJvdGVjdGVkOgot
ICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAg
ICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogICAgIHN0YXRpYyBzaXplX3QgZXN0aW1hdGVkU2l6
ZShKU0NlbGwqLCBWTSYpOwogCiBwdWJsaWM6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5j
cHAJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9V
bmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTkgQXBwbGUgSW5jLiBBbGwgUmlnaHRz
IFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjEgQXBwbGUgSW5jLiBBbGwgUmln
aHRzIFJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xNDYsNyAr
MTQ2LDggQEAgdm9pZCBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6ZGVzdHJveQogICAgIHN0
YXRpY19jYXN0PFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKj4oY2VsbCktPn5VbmxpbmtlZEZ1
bmN0aW9uRXhlY3V0YWJsZSgpOwogfQogCi12b2lkIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxl
Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1w
bGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6
dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAg
IFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiB0aGlzT2JqZWN0ID0ganNDYXN0PFVubGlua2Vk
RnVuY3Rpb25FeGVjdXRhYmxlKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklU
Uyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtMTY5LDYgKzE3MCw4IEBAIHZvaWQgVW5saW5rZWRG
dW5jdGlvbkV4ZWN1dGFibGU6OnZpc2l0Q2gKICAgICB9CiB9CiAKK0RFRklORV9WSVNJVF9DSElM
RFJFTihVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSk7CisKIFNvdXJjZUNvZGUgVW5saW5rZWRG
dW5jdGlvbkV4ZWN1dGFibGU6OmxpbmtlZFNvdXJjZUNvZGUoY29uc3QgU291cmNlQ29kZSYgcGFz
c2VkUGFyZW50U291cmNlKSBjb25zdAogewogICAgIGNvbnN0IFNvdXJjZUNvZGUmIHBhcmVudFNv
dXJjZSA9ICFtX2lzQnVpbHRpbkRlZmF1bHRDbGFzc0NvbnN0cnVjdG9yID8gcGFzc2VkUGFyZW50
U291cmNlIDogQnVpbHRpbkV4ZWN1dGFibGVzOjpkZWZhdWx0Q29uc3RydWN0b3JTb3VyY2VDb2Rl
KGNvbnN0cnVjdG9yS2luZCgpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9VbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5oCShyZXZpc2lv
biAyNzMxMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRGdW5j
dGlvbkV4ZWN1dGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTItMjAxOSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI0Miw3ICsyNDIsNyBAQCBwcml2
YXRlOgogICAgIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKFZNJiwgU3RydWN0dXJlKiwgY29u
c3QgU291cmNlQ29kZSYsIEZ1bmN0aW9uTWV0YWRhdGFOb2RlKiwgVW5saW5rZWRGdW5jdGlvbktp
bmQsIENvbnN0cnVjdEFiaWxpdHksIEpTUGFyc2VyU2NyaXB0TW9kZSwgUmVmUHRyPFREWkVudmly
b25tZW50TGluaz4sIE9wdGlvbmFsPFByaXZhdGVOYW1lRW52aXJvbm1lbnQ+LCBKU0M6OkRlcml2
ZWRDb250ZXh0VHlwZSwgSlNDOjpOZWVkc0NsYXNzRmllbGRJbml0aWFsaXplciwgUHJpdmF0ZUJy
YW5kUmVxdWlyZW1lbnQsIGJvb2wgaXNCdWlsdGluRGVmYXVsdENsYXNzQ29uc3RydWN0b3IpOwog
ICAgIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKERlY29kZXImLCBjb25zdCBDYWNoZWRGdW5j
dGlvbkV4ZWN1dGFibGUmKTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgdm9p
ZCBkZWNvZGVDYWNoZWRDb2RlQmxvY2tzKFZNJik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlclNjb3BlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXJTY29wZS5jcHAJKHJldmlzaW9uIDI3MzExOSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlclNjb3BlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAx
OSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgt
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTU1LDcgKzU1LDggQEAgdm9pZCBEZWJ1Z2dlclNjb3BlOjpmaW5pc2hD
cmVhdGlvbihWTSYgdgogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKIH0KIAotdm9pZCBE
ZWJ1Z2dlclNjb3BlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZp
c2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBEZWJ1Z2dlclNjb3BlOjp2
aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAg
RGVidWdnZXJTY29wZSogdGhpc09iamVjdCA9IGpzQ2FzdDxEZWJ1Z2dlclNjb3BlKj4oY2VsbCk7
CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAt
NjUsNiArNjYsOCBAQCB2b2lkIERlYnVnZ2VyU2NvcGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsCiAg
ICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9uZXh0KTsKIH0KIAorREVGSU5FX1ZJU0lU
X0NISUxEUkVOKERlYnVnZ2VyU2NvcGUpOworCiBTdHJpbmcgRGVidWdnZXJTY29wZTo6Y2xhc3NO
YW1lKGNvbnN0IEpTT2JqZWN0KiBvYmplY3QsIFZNJiB2bSkKIHsKICAgICBjb25zdCBEZWJ1Z2dl
clNjb3BlKiBzY29wZSA9IGpzQ2FzdDxjb25zdCBEZWJ1Z2dlclNjb3BlKj4ob2JqZWN0KTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlclNjb3BlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyU2NvcGUuaAko
cmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVn
Z2VyU2NvcGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDgtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDgtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ2LDcgKzQ2LDcgQEAgcHVibGljOgogCiAg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIERlYnVnZ2VyU2NvcGUqIGNyZWF0ZShWTSYgdm0s
IEpTU2NvcGUqIHNjb3BlKTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogICAgIHN0YXRp
YyBTdHJpbmcgY2xhc3NOYW1lKGNvbnN0IEpTT2JqZWN0KiwgVk0mKTsKICAgICBzdGF0aWMgU3Ry
aW5nIHRvU3RyaW5nTmFtZShjb25zdCBKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0Kik7CiAgICAg
c3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3Qq
LCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdEZXNpcmVkVHJhbnNpdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFRyYW5zaXRpb25zLmNwcAkocmV2aXNpb24gMjcz
MTE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkVHJhbnNpdGlvbnMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIkNvZGVCbG9j
ay5oIgogI2luY2x1ZGUgIkRGR0NvbW1vbkRhdGEuaCIKICNpbmNsdWRlICJKU0NlbGxJbmxpbmVz
LmgiCisjaW5jbHVkZSAiU2xvdFZpc2l0b3JJbmxpbmVzLmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgREZHIHsKIApAQCAtNTIsMTMgKzUzLDE3IEBAIHZvaWQgRGVzaXJlZFRyYW5zaXRp
b246OnJlYWxseUFkZChWTSYgdm0KICAgICAgICAgICAgIG1fb2xkU3RydWN0dXJlLCBtX25ld1N0
cnVjdHVyZSkpOwogfQogCi12b2lkIERlc2lyZWRUcmFuc2l0aW9uOjp2aXNpdENoaWxkcmVuKFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgRGVz
aXJlZFRyYW5zaXRpb246OnZpc2l0Q2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB2
aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKG1fY29kZU9yaWdpbk93bmVyKTsKICAgICB2aXNpdG9y
LmFwcGVuZFVuYmFycmllcmVkKG1fb2xkU3RydWN0dXJlKTsKICAgICB2aXNpdG9yLmFwcGVuZFVu
YmFycmllcmVkKG1fbmV3U3RydWN0dXJlKTsKIH0KIAordGVtcGxhdGUgdm9pZCBEZXNpcmVkVHJh
bnNpdGlvbjo6dmlzaXRDaGlsZHJlbihBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2
b2lkIERlc2lyZWRUcmFuc2l0aW9uOjp2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CisKIERl
c2lyZWRUcmFuc2l0aW9uczo6RGVzaXJlZFRyYW5zaXRpb25zKCkKIHsKIH0KQEAgLTc4LDEyICs4
MywxNiBAQCB2b2lkIERlc2lyZWRUcmFuc2l0aW9uczo6cmVhbGx5QWRkKFZNJiB2CiAgICAgICAg
IG1fdHJhbnNpdGlvbnNbaV0ucmVhbGx5QWRkKHZtLCBjb21tb24pOwogfQogCi12b2lkIERlc2ly
ZWRUcmFuc2l0aW9uczo6dmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBs
YXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIERlc2lyZWRUcmFuc2l0aW9uczo6dmlzaXRDaGls
ZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBt
X3RyYW5zaXRpb25zLnNpemUoKTsgaSsrKQogICAgICAgICBtX3RyYW5zaXRpb25zW2ldLnZpc2l0
Q2hpbGRyZW4odmlzaXRvcik7CiB9CiAKK3RlbXBsYXRlIHZvaWQgRGVzaXJlZFRyYW5zaXRpb25z
Ojp2aXNpdENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgRGVz
aXJlZFRyYW5zaXRpb25zOjp2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CisKIH0gfSAvLyBu
YW1lc3BhY2UgSlNDOjpERkcKIAogI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkVHJhbnNpdGlvbnMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRUcmFuc2l0aW9ucy5oCShy
ZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRU
cmFuc2l0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMzLDcgKzMzLDYgQEAgbmFtZXNwYWNl
IEpTQyB7IAogCiBjbGFzcyBDb2RlQmxvY2s7CiBjbGFzcyBTY3JpcHRFeGVjdXRhYmxlOwotY2xh
c3MgU2xvdFZpc2l0b3I7CiBjbGFzcyBTdHJ1Y3R1cmU7CiBjbGFzcyBWTTsKIApAQCAtNDYsOCAr
NDUsNyBAQCBwdWJsaWM6CiAgICAgRGVzaXJlZFRyYW5zaXRpb24oQ29kZUJsb2NrKiwgQ29kZUJs
b2NrKiBjb2RlT3JpZ2luT3duZXIsIFN0cnVjdHVyZSosIFN0cnVjdHVyZSopOwogCiAgICAgdm9p
ZCByZWFsbHlBZGQoVk0mLCBDb21tb25EYXRhKik7Ci0gICAgCi0gICAgdm9pZCB2aXNpdENoaWxk
cmVuKFNsb3RWaXNpdG9yJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCB2
aXNpdENoaWxkcmVuKFZpc2l0b3ImKTsKIAogcHJpdmF0ZToKICAgICBDb2RlQmxvY2sqIG1fY29k
ZUJsb2NrOwpAQCAtNjMsNyArNjEsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGFkZExhemlseShD
b2RlQmxvY2sqLCBDb2RlQmxvY2sqIGNvZGVPcmlnaW5Pd25lciwgU3RydWN0dXJlKiwgU3RydWN0
dXJlKik7CiAgICAgdm9pZCByZWFsbHlBZGQoVk0mLCBDb21tb25EYXRhKik7Ci0gICAgdm9pZCB2
aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRv
cj4gdm9pZCB2aXNpdENoaWxkcmVuKFZpc2l0b3ImKTsKIAogcHJpdmF0ZToKICAgICBWZWN0b3I8
RGVzaXJlZFRyYW5zaXRpb24+IG1fdHJhbnNpdGlvbnM7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Rlc2lyZWRXZWFrUmVmZXJlbmNlcy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2Vha1JlZmVyZW5jZXMuY3BwCShyZXZp
c2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXZWFr
UmVmZXJlbmNlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC04NywxMiArODcsMTYgQEAgdm9pZCBE
ZXNpcmVkV2Vha1JlZmVyZW5jZXM6OnJlYWxseUFkZChWTQogICAgIH0KIH0KIAotdm9pZCBEZXNp
cmVkV2Vha1JlZmVyZW5jZXM6OnZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0
ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBEZXNpcmVkV2Vha1JlZmVyZW5jZXM6OnZp
c2l0Q2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBmb3IgKEpTQ2VsbCogdGFyZ2V0
IDogbV9yZWZlcmVuY2VzKQogICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKHRhcmdl
dCk7CiB9CiAKK3RlbXBsYXRlIHZvaWQgRGVzaXJlZFdlYWtSZWZlcmVuY2VzOjp2aXNpdENoaWxk
cmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgRGVzaXJlZFdlYWtSZWZl
cmVuY2VzOjp2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CisKIH0gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpERkcKIAogI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2Vha1JlZmVyZW5jZXMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXZWFrUmVmZXJlbmNlcy5oCShyZXZp
c2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXZWFr
UmVmZXJlbmNlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzQsNyArMzQsNiBAQCBuYW1lc3BhY2Ug
SlNDIHsgCiBjbGFzcyBDb2RlQmxvY2s7CiBjbGFzcyBKU0NlbGw7CiBjbGFzcyBKU1ZhbHVlOwot
Y2xhc3MgU2xvdFZpc2l0b3I7CiBjbGFzcyBWTTsKIAogbmFtZXNwYWNlIERGRyB7CkBAIC01Miw4
ICs1MSw4IEBAIHB1YmxpYzoKICAgICBib29sIGNvbnRhaW5zKEpTQ2VsbCopOwogICAgIAogICAg
IHZvaWQgcmVhbGx5QWRkKFZNJiwgQ29tbW9uRGF0YSopOwotICAgIAotICAgIHZvaWQgdmlzaXRD
aGlsZHJlbihTbG90VmlzaXRvciYpOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4g
dm9pZCB2aXNpdENoaWxkcmVuKFZpc2l0b3ImKTsKIAogcHJpdmF0ZToKICAgICBDb2RlQmxvY2sq
IG1fY29kZUJsb2NrOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJ
KHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGgu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MSw2ICs1MSw3IEBACiAjaW5jbHVkZSAiSlNMZXhpY2Fs
RW52aXJvbm1lbnQuaCIKICNpbmNsdWRlICJNYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbC5o
IgogI2luY2x1ZGUgIk9wZXJhbmRzSW5saW5lcy5oIgorI2luY2x1ZGUgIlNsb3RWaXNpdG9ySW5s
aW5lcy5oIgogI2luY2x1ZGUgIlNuaXBwZXQuaCIKICNpbmNsdWRlICJTdGFja0FsaWdubWVudC5o
IgogI2luY2x1ZGUgIlN0cnVjdHVyZUlubGluZXMuaCIKQEAgLTE0NDgsNyArMTQ0OSw4IEBAIHZv
aWQgR3JhcGg6OnJlZ2lzdGVyRnJvemVuVmFsdWVzKCkKICAgICBtX2NvZGVCbG9jay0+Y29uc3Rh
bnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uKCkuc2hyaW5rVG9GaXQoKTsKIH0KIAotdm9pZCBH
cmFwaDo6dmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVu
YW1lIFZpc2l0b3I+CitBTFdBWVNfSU5MSU5FIHZvaWQgR3JhcGg6OnZpc2l0Q2hpbGRyZW5JbXBs
KFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgZm9yIChGcm96ZW5WYWx1ZSogdmFsdWUgOiBtX2Zy
b3plblZhbHVlcykgewogICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKHZhbHVlLT52
YWx1ZSgpKTsKQEAgLTE0NTYsNiArMTQ1OCw5IEBAIHZvaWQgR3JhcGg6OnZpc2l0Q2hpbGRyZW4o
U2xvdFZpc2l0b3ImIHYKICAgICB9CiB9CiAKK3ZvaWQgR3JhcGg6OnZpc2l0Q2hpbGRyZW4oQWJz
dHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikgeyB2aXNpdENoaWxkcmVuSW1wbCh2aXNpdG9yKTsg
fQordm9pZCBHcmFwaDo6dmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikgeyB2aXNp
dENoaWxkcmVuSW1wbCh2aXNpdG9yKTsgfQorCiBGcm96ZW5WYWx1ZSogR3JhcGg6OmZyZWV6ZShK
U1ZhbHVlIHZhbHVlKQogewogICAgIGlmIChVTkxJS0VMWSghdmFsdWUpKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMS0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTAwMCw5ICsx
MDAwLDEwIEBAIHB1YmxpYzoKICAgICBib29sIGNhbkRvRmFzdFNwcmVhZChOb2RlKiwgY29uc3Qg
QWJzdHJhY3RWYWx1ZSYpOwogICAgIAogICAgIHZvaWQgcmVnaXN0ZXJGcm96ZW5WYWx1ZXMoKTsK
LSAgICAKKworICAgIHZvaWQgdmlzaXRDaGlsZHJlbihBYnN0cmFjdFNsb3RWaXNpdG9yJikgZmlu
YWw7CiAgICAgdm9pZCB2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJikgZmluYWw7Ci0gICAgCisK
ICAgICB2b2lkIGxvZ0Fzc2VydGlvbkZhaWx1cmUoCiAgICAgICAgIHN0ZDo6bnVsbHB0cl90LCBj
b25zdCBjaGFyKiBmaWxlLCBpbnQgbGluZSwgY29uc3QgY2hhciogZnVuY3Rpb24sCiAgICAgICAg
IGNvbnN0IGNoYXIqIGFzc2VydGlvbik7CkBAIC0xMTg0LDYgKzExODUsOCBAQCBwdWJsaWM6CiAg
ICAgSGFzaFNldDxOb2RlKj4gbV9zbG93R2V0QnlWYWw7CiAKIHByaXZhdGU6CisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCB2aXNpdENoaWxkcmVuSW1wbChWaXNpdG9yJik7CisK
ICAgICBib29sIGlzU3RyaW5nUHJvdG90eXBlTWV0aG9kU2FuZShKU0dsb2JhbE9iamVjdCosIFVu
aXF1ZWRTdHJpbmdJbXBsKik7CiAKICAgICB2b2lkIGhhbmRsZVN1Y2Nlc3NvcihWZWN0b3I8QmFz
aWNCbG9jayosIDE2PiYgd29ya2xpc3QsIEJhc2ljQmxvY2sqLCBCYXNpY0Jsb2NrKiBzdWNjZXNz
b3IpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCShyZXZpc2lvbiAy
NzMxMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIwIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtNjcyLDkgKzY3MiwxMCBAQCBDb21waWxhdGlvbktleSBQbGFuOjprZXkoKQog
ICAgIHJldHVybiBDb21waWxhdGlvbktleShtX2NvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSwgbV9t
b2RlKTsKIH0KIAotdm9pZCBQbGFuOjpjaGVja0xpdmVuZXNzQW5kVmlzaXRDaGlsZHJlbihTbG90
VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFBsYW46
OmNoZWNrTGl2ZW5lc3NBbmRWaXNpdENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7Ci0gICAg
aWYgKCFpc0tub3duVG9CZUxpdmVEdXJpbmdHQygpKQorICAgIGlmICghaXNLbm93blRvQmVMaXZl
RHVyaW5nR0ModmlzaXRvcikpCiAgICAgICAgIHJldHVybjsKIAogICAgIGNsZWFuTXVzdEhhbmRs
ZVZhbHVlc0lmTmVjZXNzYXJ5KCk7CkBAIC03MDIsMTMgKzcwMywzMyBAQCB2b2lkIFBsYW46OmNo
ZWNrTGl2ZW5lc3NBbmRWaXNpdENoaWxkcmVuCiAgICAgbV90cmFuc2l0aW9ucy52aXNpdENoaWxk
cmVuKHZpc2l0b3IpOwogfQogCit0ZW1wbGF0ZSB2b2lkIFBsYW46OmNoZWNrTGl2ZW5lc3NBbmRW
aXNpdENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgUGxhbjo6
Y2hlY2tMaXZlbmVzc0FuZFZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKKwogdm9pZCBQbGFu
OjpmaW5hbGl6ZUluR0MoKQogewogICAgIEFTU0VSVChtX3ZtKTsKICAgICBtX3JlY29yZGVkU3Rh
dHVzZXMuZmluYWxpemVXaXRob3V0RGVsZXRpbmcoKm1fdm0pOwogfQogCi1ib29sIFBsYW46Omlz
S25vd25Ub0JlTGl2ZUR1cmluZ0dDKCkKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Citib29s
IFBsYW46OmlzS25vd25Ub0JlTGl2ZUR1cmluZ0dDKFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAg
aWYgKG1fc3RhZ2UgPT0gQ2FuY2VsbGVkKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYg
KCF2aXNpdG9yLmlzTWFya2VkKG1fY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIXZpc2l0b3IuaXNNYXJrZWQobV9jb2RlQmxvY2st
PmFsdGVybmF0aXZlKCkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCEhbV9wcm9m
aWxlZERGR0NvZGVCbG9jayAmJiAhdmlzaXRvci5pc01hcmtlZChtX3Byb2ZpbGVkREZHQ29kZUJs
b2NrKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiB0cnVlOworfQorCit0ZW1w
bGF0ZSBib29sIFBsYW46OmlzS25vd25Ub0JlTGl2ZUR1cmluZ0dDKEFic3RyYWN0U2xvdFZpc2l0
b3ImKTsKK3RlbXBsYXRlIGJvb2wgUGxhbjo6aXNLbm93blRvQmVMaXZlRHVyaW5nR0MoU2xvdFZp
c2l0b3ImKTsKKworYm9vbCBQbGFuOjppc0tub3duVG9CZUxpdmVBZnRlckdDKCkKIHsKICAgICBp
ZiAobV9zdGFnZSA9PSBDYW5jZWxsZWQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5oCShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ0LDcgKzQ0
LDYgQEAKIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBDb2RlQmxvY2s7Ci1jbGFzcyBTbG90Vmlz
aXRvcjsKIAogbmFtZXNwYWNlIERGRyB7CiAKQEAgLTcwLDEwICs2OSwxMSBAQCBwdWJsaWM6CiAg
ICAgCiAgICAgQ29tcGlsYXRpb25LZXkga2V5KCk7CiAgICAgCi0gICAgdGVtcGxhdGU8dHlwZW5h
bWUgRnVuYz4KLSAgICB2b2lkIGl0ZXJhdGVDb2RlQmxvY2tzRm9yR0MoY29uc3QgRnVuYyYpOwot
ICAgIHZvaWQgY2hlY2tMaXZlbmVzc0FuZFZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKLSAg
ICBib29sIGlzS25vd25Ub0JlTGl2ZUR1cmluZ0dDKCk7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
RnVuYywgdHlwZW5hbWUgVmlzaXRvcj4KKyAgICB2b2lkIGl0ZXJhdGVDb2RlQmxvY2tzRm9yR0Mo
VmlzaXRvciYsIGNvbnN0IEZ1bmMmKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2
b2lkIGNoZWNrTGl2ZW5lc3NBbmRWaXNpdENoaWxkcmVuKFZpc2l0b3ImKTsKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBWaXNpdG9yPiBib29sIGlzS25vd25Ub0JlTGl2ZUR1cmluZ0dDKFZpc2l0b3Im
KTsKKyAgICBib29sIGlzS25vd25Ub0JlTGl2ZUFmdGVyR0MoKTsKICAgICB2b2lkIGZpbmFsaXpl
SW5HQygpOwogICAgIHZvaWQgY2FuY2VsKCk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHUGxhbklubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1BsYW5JbmxpbmVzLmgJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHUGxhbklubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMxLDEw
ICszMSwxMCBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKICNpZiBFTkFCTEUo
REZHX0pJVCkKIAotdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KLXZvaWQgUGxhbjo6aXRlcmF0ZUNv
ZGVCbG9ja3NGb3JHQyhjb25zdCBGdW5jJiBmdW5jKQordGVtcGxhdGU8dHlwZW5hbWUgRnVuYywg
dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgUGxhbjo6aXRlcmF0ZUNvZGVCbG9ja3NGb3JHQyhWaXNp
dG9yJiB2aXNpdG9yLCBjb25zdCBGdW5jJiBmdW5jKQogewotICAgIGlmICghaXNLbm93blRvQmVM
aXZlRHVyaW5nR0MoKSkKKyAgICBpZiAoIWlzS25vd25Ub0JlTGl2ZUR1cmluZ0dDKHZpc2l0b3Ip
KQogICAgICAgICByZXR1cm47CiAgICAgCiAgICAgLy8gQ29tcGlsYXRpb24gd3JpdGVzIGxvdHMg
b2YgdmFsdWVzIHRvIGEgQ29kZUJsb2NrIHdpdGhvdXQgcGVyZm9ybWluZwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlcG9pbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZXBvaW50LmNwcAkocmV2aXNpb24gMjczMTE5KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlcG9pbnQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNC0yMDE5IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtODMsMjggKzgzLDQ2IEBAIHZvaWQgU2FmZXBvaW50OjpiZWdpbigpCiAgICAgfQog
fQogCi12b2lkIFNhZmVwb2ludDo6Y2hlY2tMaXZlbmVzc0FuZFZpc2l0Q2hpbGRyZW4oU2xvdFZp
c2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBTYWZlcG9p
bnQ6OmNoZWNrTGl2ZW5lc3NBbmRWaXNpdENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAg
ICAgUkVMRUFTRV9BU1NFUlQobV9kaWRDYWxsQmVnaW4pOwogCiAgICAgaWYgKG1fcmVzdWx0Lm1f
ZGlkR2V0Q2FuY2VsbGVkKQogICAgICAgICByZXR1cm47IC8vIFdlIHdlcmUgY2FuY2VsbGVkIGR1
cmluZyBhIHByZXZpb3VzIEdDIQogICAgIAotICAgIGlmICghaXNLbm93blRvQmVMaXZlRHVyaW5n
R0MoKSkKKyAgICBpZiAoIWlzS25vd25Ub0JlTGl2ZUR1cmluZ0dDKHZpc2l0b3IpKQogICAgICAg
ICByZXR1cm47CiAgICAgCiAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9zY2FubmFibGVzLnNpemUo
KTsgaS0tOykKICAgICAgICAgbV9zY2FubmFibGVzW2ldLT52aXNpdENoaWxkcmVuKHZpc2l0b3Ip
OwogfQogCi1ib29sIFNhZmVwb2ludDo6aXNLbm93blRvQmVMaXZlRHVyaW5nR0MoKQordGVtcGxh
dGUgdm9pZCBTYWZlcG9pbnQ6OmNoZWNrTGl2ZW5lc3NBbmRWaXNpdENoaWxkcmVuKEFic3RyYWN0
U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgU2FmZXBvaW50OjpjaGVja0xpdmVuZXNzQW5k
VmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYpOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
PgorYm9vbCBTYWZlcG9pbnQ6OmlzS25vd25Ub0JlTGl2ZUR1cmluZ0dDKFZpc2l0b3ImIHZpc2l0
b3IpCit7CisgICAgUkVMRUFTRV9BU1NFUlQobV9kaWRDYWxsQmVnaW4pOworICAgIAorICAgIGlm
IChtX3Jlc3VsdC5tX2RpZEdldENhbmNlbGxlZCkKKyAgICAgICAgcmV0dXJuIHRydWU7IC8vIFdl
IHdlcmUgY2FuY2VsbGVkIGR1cmluZyBhIHByZXZpb3VzIEdDLCBzbyBsZXQncyBub3QgbWVzcyB3
aXRoIGl0IHRoaXMgdGltZSBhcm91bmQgLSBwcmV0ZW5kIGl0J3MgbGl2ZSBhbmQgbW92ZSBvbi4K
KyAgICAKKyAgICByZXR1cm4gbV9wbGFuLmlzS25vd25Ub0JlTGl2ZUR1cmluZ0dDKHZpc2l0b3Ip
OworfQorCit0ZW1wbGF0ZSBib29sIFNhZmVwb2ludDo6aXNLbm93blRvQmVMaXZlRHVyaW5nR0Mo
QWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgYm9vbCBTYWZlcG9pbnQ6OmlzS25vd25U
b0JlTGl2ZUR1cmluZ0dDKFNsb3RWaXNpdG9yJik7CisKK2Jvb2wgU2FmZXBvaW50Ojppc0tub3du
VG9CZUxpdmVBZnRlckdDKCkKIHsKICAgICBSRUxFQVNFX0FTU0VSVChtX2RpZENhbGxCZWdpbik7
CiAgICAgCiAgICAgaWYgKG1fcmVzdWx0Lm1fZGlkR2V0Q2FuY2VsbGVkKQogICAgICAgICByZXR1
cm4gdHJ1ZTsgLy8gV2Ugd2VyZSBjYW5jZWxsZWQgZHVyaW5nIGEgcHJldmlvdXMgR0MsIHNvIGxl
dCdzIG5vdCBtZXNzIHdpdGggaXQgdGhpcyB0aW1lIGFyb3VuZCAtIHByZXRlbmQgaXQncyBsaXZl
IGFuZCBtb3ZlIG9uLgogICAgIAotICAgIHJldHVybiBtX3BsYW4uaXNLbm93blRvQmVMaXZlRHVy
aW5nR0MoKTsKKyAgICByZXR1cm4gbV9wbGFuLmlzS25vd25Ub0JlTGl2ZUFmdGVyR0MoKTsKIH0K
IAogdm9pZCBTYWZlcG9pbnQ6OmNhbmNlbCgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NhZmVwb2ludC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU2FmZXBvaW50LmgJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU2FmZXBvaW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDE0LCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzEsNyArMzEsNiBA
QAogCiBuYW1lc3BhY2UgSlNDIHsKIAotY2xhc3MgU2xvdFZpc2l0b3I7CiBjbGFzcyBWTTsKIAog
bmFtZXNwYWNlIERGRyB7CkBAIC02Niw5ICs2NSwxMCBAQCBwdWJsaWM6CiAgICAgdm9pZCBhZGQo
U2Nhbm5hYmxlKik7CiAgICAgCiAgICAgdm9pZCBiZWdpbigpOwotICAgIAotICAgIHZvaWQgY2hl
Y2tMaXZlbmVzc0FuZFZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKLSAgICBib29sIGlzS25v
d25Ub0JlTGl2ZUR1cmluZ0dDKCk7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2
b2lkIGNoZWNrTGl2ZW5lc3NBbmRWaXNpdENoaWxkcmVuKFZpc2l0b3ImKTsKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBWaXNpdG9yPiBib29sIGlzS25vd25Ub0JlTGl2ZUR1cmluZ0dDKFZpc2l0b3Im
KTsKKyAgICBib29sIGlzS25vd25Ub0JlTGl2ZUFmdGVyR0MoKTsKICAgICB2b2lkIGNhbmNlbCgp
OwogICAgIAogICAgIFZNKiB2bSgpIGNvbnN0OyAvLyBNYXkgcmV0dXJuIG51bGwgaWYgd2UndmUg
YmVlbiBjYW5jZWxsZWQuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NjYW5u
YWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2Nhbm5h
YmxlLmgJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U2Nhbm5hYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjksNiArMjksNyBAQAogCiBuYW1lc3BhY2UgSlND
IHsKIAorY2xhc3MgQWJzdHJhY3RTbG90VmlzaXRvcjsKIGNsYXNzIFNsb3RWaXNpdG9yOwogCiBu
YW1lc3BhY2UgREZHIHsKQEAgLTM3LDcgKzM4LDggQEAgY2xhc3MgU2Nhbm5hYmxlIHsKIHB1Ymxp
YzoKICAgICBTY2FubmFibGUoKSB7IH0KICAgICB2aXJ0dWFsIH5TY2FubmFibGUoKSB7IH0KLSAg
ICAKKworICAgIHZpcnR1YWwgdm9pZCB2aXNpdENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0b3Im
KSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImKSA9IDA7
CiB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0LmNwcAko
cmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlz
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNzIsNyArMzcyLDggQEAgdm9pZCBXb3JrbGlzdDo6
cmVzdW1lQWxsVGhyZWFkcygpCiAgICAgbV9zdXNwZW5zaW9uTG9jay51bmxvY2soKTsKIH0KIAot
dm9pZCBXb3JrbGlzdDo6dmlzaXRXZWFrUmVmZXJlbmNlcyhTbG90VmlzaXRvciYgdmlzaXRvcikK
K3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFdvcmtsaXN0Ojp2aXNpdFdlYWtSZWZl
cmVuY2VzKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgVk0qIHZtID0gJnZpc2l0b3IuaGVhcCgp
LT52bSgpOwogICAgIHsKQEAgLTM5Niw2ICszOTcsOSBAQCB2b2lkIFdvcmtsaXN0Ojp2aXNpdFdl
YWtSZWZlcmVuY2VzKFNsb3RWCiAgICAgfQogfQogCit0ZW1wbGF0ZSB2b2lkIFdvcmtsaXN0Ojp2
aXNpdFdlYWtSZWZlcmVuY2VzKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQg
V29ya2xpc3Q6OnZpc2l0V2Vha1JlZmVyZW5jZXMoU2xvdFZpc2l0b3ImKTsKKwogdm9pZCBXb3Jr
bGlzdDo6cmVtb3ZlRGVhZFBsYW5zKFZNJiB2bSkKIHsKICAgICB7CkBAIC00MDUsNyArNDA5LDcg
QEAgdm9pZCBXb3JrbGlzdDo6cmVtb3ZlRGVhZFBsYW5zKFZNJiB2bSkKICAgICAgICAgICAgIFBs
YW4qIHBsYW4gPSBpdGVyLT52YWx1ZS5nZXQoKTsKICAgICAgICAgICAgIGlmIChwbGFuLT52bSgp
ICE9ICZ2bSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGlmIChwbGFu
LT5pc0tub3duVG9CZUxpdmVEdXJpbmdHQygpKSB7CisgICAgICAgICAgICBpZiAocGxhbi0+aXNL
bm93blRvQmVMaXZlQWZ0ZXJHQygpKSB7CiAgICAgICAgICAgICAgICAgcGxhbi0+ZmluYWxpemVJ
bkdDKCk7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CkBAIC00NDAs
NyArNDQ0LDcgQEAgdm9pZCBXb3JrbGlzdDo6cmVtb3ZlRGVhZFBsYW5zKFZNJiB2bSkKICAgICAg
ICAgICAgIGNvbnRpbnVlOwogICAgICAgICBpZiAoc2FmZXBvaW50LT52bSgpICE9ICZ2bSkKICAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAoc2FmZXBvaW50LT5pc0tub3duVG9CZUxp
dmVEdXJpbmdHQygpKQorICAgICAgICBpZiAoc2FmZXBvaW50LT5pc0tub3duVG9CZUxpdmVBZnRl
ckdDKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgc2FmZXBvaW50LT5jYW5jZWwo
KTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5oCShy
ZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0zMywxMSArMzMsNyBAQAogI2luY2x1ZGUgPHd0Zi9IYXNo
TWFwLmg+CiAjaW5jbHVkZSA8d3RmL0xvY2suaD4KIAotbmFtZXNwYWNlIEpTQyB7Ci0KLWNsYXNz
IFNsb3RWaXNpdG9yOwotCi1uYW1lc3BhY2UgREZHIHsKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgREZHIHsKIAogI2lmIEVOQUJMRShERkdfSklUKQogCkBAIC01Niw4ICs1Miw4IEBAIHB1Ymxp
YzoKICAgICAvLyB3b3JrbGlzdC0+Y29tcGxldGVBbGxSZWFkeVBsYW5zRm9yVk0odm0pOwogICAg
IHZvaWQgY29tcGxldGVBbGxQbGFuc0ZvclZNKFZNJik7CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBGdW5jPgotICAgIHZvaWQgaXRlcmF0ZUNvZGVCbG9ja3NGb3JHQyhWTSYsIGNvbnN0IEZ1bmMm
KTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jLCB0eXBlbmFtZSBWaXNpdG9yPgorICAgIHZv
aWQgaXRlcmF0ZUNvZGVCbG9ja3NGb3JHQyhWaXNpdG9yJiwgVk0mLCBjb25zdCBGdW5jJik7CiAK
ICAgICB2b2lkIHdhaXRVbnRpbEFsbFBsYW5zRm9yVk1BcmVSZWFkeShWTSYpOwogICAgIFN0YXRl
IGNvbXBsZXRlQWxsUmVhZHlQbGFuc0ZvclZNKFZNJiwgQ29tcGlsYXRpb25LZXkgPSBDb21waWxh
dGlvbktleSgpKTsKQEAgLTczLDcgKzY5LDcgQEAgcHVibGljOgogICAgIGJvb2wgaXNBY3RpdmVG
b3JWTShWTSYpIGNvbnN0OwogICAgIAogICAgIC8vIE9ubHkgY2FsbGVkIG9uIHRoZSBtYWluIHRo
cmVhZCBhZnRlciBzdXNwZW5kaW5nIGFsbCB0aHJlYWRzLgotICAgIHZvaWQgdmlzaXRXZWFrUmVm
ZXJlbmNlcyhTbG90VmlzaXRvciYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZv
aWQgdmlzaXRXZWFrUmVmZXJlbmNlcyhWaXNpdG9yJik7CiAgICAgdm9pZCByZW1vdmVEZWFkUGxh
bnMoVk0mKTsKICAgICAKICAgICB2b2lkIHJlbW92ZU5vbkNvbXBpbGluZ1BsYW5zRm9yVk0oVk0m
KTsKQEAgLTE0Myw4ICsxMzksOCBAQCBXb3JrbGlzdCYgZXhpc3RpbmdXb3JrbGlzdEZvckluZGV4
KHVuc2lnCiAKIHZvaWQgY29tcGxldGVBbGxQbGFuc0ZvclZNKFZNJik7CiAKLXRlbXBsYXRlPHR5
cGVuYW1lIEZ1bmM+Ci12b2lkIGl0ZXJhdGVDb2RlQmxvY2tzRm9yR0MoVk0mLCBjb25zdCBGdW5j
Jik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jLCB0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBpdGVy
YXRlQ29kZUJsb2Nrc0ZvckdDKFZpc2l0b3ImLCBWTSYsIGNvbnN0IEZ1bmMmKTsKIAogfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkRGRwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1dvcmtsaXN0SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHV29ya2xpc3RJbmxpbmVzLmgJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3RJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMTggQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0z
MiwzMSArMzIsMzEgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCiAjaWYgRU5B
QkxFKERGR19KSVQpCiAKLXRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+Ci12b2lkIGl0ZXJhdGVDb2Rl
QmxvY2tzRm9yR0MoVk0mIHZtLCBjb25zdCBGdW5jJiBmdW5jKQordGVtcGxhdGU8dHlwZW5hbWUg
RnVuYywgdHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgaXRlcmF0ZUNvZGVCbG9ja3NGb3JHQyhWaXNp
dG9yJiB2aXNpdG9yLCBWTSYgdm0sIGNvbnN0IEZ1bmMmIGZ1bmMpCiB7CiAgICAgZm9yICh1bnNp
Z25lZCBpID0gREZHOjpudW1iZXJPZldvcmtsaXN0cygpOyBpLS07KSB7CiAgICAgICAgIGlmIChE
Rkc6OldvcmtsaXN0KiB3b3JrbGlzdCA9IERGRzo6ZXhpc3RpbmdXb3JrbGlzdEZvckluZGV4T3JO
dWxsKGkpKQotICAgICAgICAgICAgd29ya2xpc3QtPml0ZXJhdGVDb2RlQmxvY2tzRm9yR0Modm0s
IGZ1bmMpOworICAgICAgICAgICAgd29ya2xpc3QtPml0ZXJhdGVDb2RlQmxvY2tzRm9yR0Modmlz
aXRvciwgdm0sIGZ1bmMpOwogICAgIH0KIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KLXZv
aWQgV29ya2xpc3Q6Oml0ZXJhdGVDb2RlQmxvY2tzRm9yR0MoVk0mIHZtLCBjb25zdCBGdW5jJiBm
dW5jKQordGVtcGxhdGU8dHlwZW5hbWUgRnVuYywgdHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgV29y
a2xpc3Q6Oml0ZXJhdGVDb2RlQmxvY2tzRm9yR0MoVmlzaXRvciYgdmlzaXRvciwgVk0mIHZtLCBj
b25zdCBGdW5jJiBmdW5jKQogewogICAgIExvY2tIb2xkZXIgbG9ja2VyKCptX2xvY2spOwogICAg
IGZvciAoUGxhbk1hcDo6aXRlcmF0b3IgaXRlciA9IG1fcGxhbnMuYmVnaW4oKTsgaXRlciAhPSBt
X3BsYW5zLmVuZCgpOyArK2l0ZXIpIHsKICAgICAgICAgUGxhbiogcGxhbiA9IGl0ZXItPnZhbHVl
LmdldCgpOwogICAgICAgICBpZiAocGxhbi0+dm0oKSAhPSAmdm0pCiAgICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgcGxhbi0+aXRlcmF0ZUNvZGVCbG9ja3NGb3JHQyhmdW5jKTsKKyAgICAg
ICAgcGxhbi0+aXRlcmF0ZUNvZGVCbG9ja3NGb3JHQyh2aXNpdG9yLCBmdW5jKTsKICAgICB9CiB9
CiAKICNlbHNlIC8vIEVOQUJMRShERkdfSklUKQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgot
dm9pZCBpdGVyYXRlQ29kZUJsb2Nrc0ZvckdDKFZNJiwgY29uc3QgRnVuYyYpCit0ZW1wbGF0ZTx0
eXBlbmFtZSBGdW5jLCB0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBpdGVyYXRlQ29kZUJsb2Nrc0Zv
ckdDKFZpc2l0b3ImLCBWTSYsIGNvbnN0IEZ1bmMmKQogewogfQogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9BYnN0cmFjdFNsb3RWaXNpdG9yLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQWJzdHJhY3RTbG90VmlzaXRvci5oCShub25leGlzdGVu
dCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Fic3RyYWN0U2xvdFZpc2l0b3IuaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIwOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiSlNDSlNWYWx1
ZS5oIgorI2luY2x1ZGUgIk1hcmtTdGFjay5oIgorI2luY2x1ZGUgIlJvb3RNYXJrUmVhc29uLmgi
CisjaW5jbHVkZSAiVmlzaXRSYWNlS2V5LmgiCisjaW5jbHVkZSA8d3RmL0NvbmN1cnJlbnRQdHJI
YXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL1NoYXJlZFRhc2suaD4KKyNpbmNsdWRlIDx3dGYvdGV4
dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBDb25zZXJ2YXRpdmVSb290
czsKK2NsYXNzIEhlYXA7CitjbGFzcyBIZWFwQ2VsbDsKK2NsYXNzIEpTQ2VsbDsKK2NsYXNzIE1h
cmtlZEJsb2NrOworY2xhc3MgTWFya2luZ0NvbnN0cmFpbnQ7CitjbGFzcyBNYXJraW5nQ29uc3Ry
YWludFNvbHZlcjsKK2NsYXNzIFByZWNpc2VBbGxvY2F0aW9uOworY2xhc3MgU2xvdFZpc2l0b3I7
CitjbGFzcyBWTTsKK2NsYXNzIFZlcmlmaWVyU2xvdFZpc2l0b3I7Cit0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBjbGFzcyBXZWFrOwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVHJhaXRzPiBj
bGFzcyBXcml0ZUJhcnJpZXJCYXNlOworCitjbGFzcyBBYnN0cmFjdFNsb3RWaXNpdG9yIHsKKyAg
ICBXVEZfTUFLRV9OT05DT1BZQUJMRShBYnN0cmFjdFNsb3RWaXNpdG9yKTsKKyAgICBXVEZfTUFL
RV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBjbGFzcyBDb250ZXh0IHsKKyAgICBwdWJs
aWM6CisgICAgICAgIENvbnRleHQoQWJzdHJhY3RTbG90VmlzaXRvciYsIEhlYXBDZWxsKik7Cisg
ICAgICAgIH5Db250ZXh0KCk7CisgICAgICAgIEhlYXBDZWxsKiBjZWxsKCkgY29uc3QgeyByZXR1
cm4gbV9jZWxsOyB9CisgICAgcHJpdmF0ZToKKyAgICAgICAgQWJzdHJhY3RTbG90VmlzaXRvciYg
bV92aXNpdG9yOworICAgICAgICBIZWFwQ2VsbCogbV9jZWxsOworICAgICAgICBDb250ZXh0KiBt
X3ByZXZpb3VzOworICAgIH07CisKKyAgICBjbGFzcyBTdXBwcmVzc0dDVmVyaWZpZXJTY29wZSB7
CisgICAgcHVibGljOgorICAgICAgICBTdXBwcmVzc0dDVmVyaWZpZXJTY29wZShBYnN0cmFjdFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQorICAgICAgICAgICAgOiBtX3Zpc2l0b3IodmlzaXRvcikKKyAg
ICAgICAgeworICAgICAgICAgICAgQVNTRVJUKCFtX3Zpc2l0b3IubV9zdXBwcmVzc1ZlcmlmaWVy
KTsKKyAgICAgICAgICAgIG1fdmlzaXRvci5tX3N1cHByZXNzVmVyaWZpZXIgPSB0cnVlOworICAg
ICAgICB9CisgICAgICAgIH5TdXBwcmVzc0dDVmVyaWZpZXJTY29wZSgpIHsgbV92aXNpdG9yLm1f
c3VwcHJlc3NWZXJpZmllciA9IGZhbHNlOyB9CisgICAgcHJpdmF0ZToKKyAgICAgICAgQWJzdHJh
Y3RTbG90VmlzaXRvciYgbV92aXNpdG9yOworICAgIH07CisKKyAgICBjbGFzcyBEZWZhdWx0TWFy
a2luZ1Zpb2xhdGlvbkFzc2VydGlvblNjb3BlIHsKKyAgICBwdWJsaWM6CisgICAgICAgIERlZmF1
bHRNYXJraW5nVmlvbGF0aW9uQXNzZXJ0aW9uU2NvcGUoQWJzdHJhY3RTbG90VmlzaXRvciYpIHsg
fQorICAgIH07CisKKyAgICB2aXJ0dWFsIH5BYnN0cmFjdFNsb3RWaXNpdG9yKCkgPSBkZWZhdWx0
OworCisgICAgTWFya1N0YWNrQXJyYXkmIGNvbGxlY3Rvck1hcmtTdGFjaygpIHsgcmV0dXJuIG1f
Y29sbGVjdG9yU3RhY2s7IH0KKyAgICBNYXJrU3RhY2tBcnJheSYgbXV0YXRvck1hcmtTdGFjaygp
IHsgcmV0dXJuIG1fbXV0YXRvclN0YWNrOyB9CisgICAgY29uc3QgTWFya1N0YWNrQXJyYXkmIGNv
bGxlY3Rvck1hcmtTdGFjaygpIGNvbnN0IHsgcmV0dXJuIG1fY29sbGVjdG9yU3RhY2s7IH0KKyAg
ICBjb25zdCBNYXJrU3RhY2tBcnJheSYgbXV0YXRvck1hcmtTdGFjaygpIGNvbnN0IHsgcmV0dXJu
IG1fbXV0YXRvclN0YWNrOyB9CisKKyAgICBib29sIGlzRW1wdHkoKSB7IHJldHVybiBtX2NvbGxl
Y3RvclN0YWNrLmlzRW1wdHkoKSAmJiBtX211dGF0b3JTdGFjay5pc0VtcHR5KCk7IH0KKworICAg
IFZNJiB2bSgpOworICAgIGNvbnN0IFZNJiB2bSgpIGNvbnN0OworICAgIEhlYXAqIGhlYXAoKSBj
b25zdDsKKworICAgIHZpcnR1YWwgdm9pZCBhcHBlbmQoY29uc3QgQ29uc2VydmF0aXZlUm9vdHMm
KSA9IDA7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBUcmFpdHM+IHZvaWQg
YXBwZW5kKGNvbnN0IFdyaXRlQmFycmllckJhc2U8VCwgVHJhaXRzPiYpOworICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFQsIHR5cGVuYW1lIFRyYWl0cz4gdm9pZCBhcHBlbmRIaWRkZW4oY29uc3QgV3Jp
dGVCYXJyaWVyQmFzZTxULCBUcmFpdHM+Jik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSXRlcmF0
b3I+IHZvaWQgYXBwZW5kKEl0ZXJhdG9yIGJlZ2luICwgSXRlcmF0b3IgZW5kKTsKKyAgICBBTFdB
WVNfSU5MSU5FIHZvaWQgYXBwZW5kVmFsdWVzKGNvbnN0IFdyaXRlQmFycmllckJhc2U8VW5rbm93
biwgUmF3VmFsdWVUcmFpdHM8VW5rbm93bj4+Kiwgc2l6ZV90IGNvdW50KTsKKyAgICBBTFdBWVNf
SU5MSU5FIHZvaWQgYXBwZW5kVmFsdWVzSGlkZGVuKGNvbnN0IFdyaXRlQmFycmllckJhc2U8VW5r
bm93biwgUmF3VmFsdWVUcmFpdHM8VW5rbm93bj4+Kiwgc2l6ZV90IGNvdW50KTsKKworICAgIC8v
IFRoZXNlIGRvbid0IHJlcXVpcmUgeW91IHRvIHByb3ZlIHRoYXQgeW91IGhhdmUgYSBXcml0ZUJh
cnJpZXI8Pi4gVGhhdCBtYWtlcyBzZW5zZQorICAgIC8vIGZvcjoKKyAgICAvLworICAgIC8vIC0g
cm9vdHMuCisgICAgLy8gLSBzb3BoaXN0aWNhdGVkIGRhdGEgc3RydWN0dXJlcyB0aGF0IGJhcnJp
ZXIgdGhyb3VnaCBvdGhlciBtZWFucyAobGlrZSBERkc6OlBsYW4gYW5kCisgICAgLy8gICBmcmll
bmRzKS4KKyAgICAvLworICAgIC8vIElmIHlvdSBhcmUgbm90IGEgcm9vdCBhbmQgeW91IGRvbid0
IGtub3cgd2hhdCBraW5kIG9mIGJhcnJpZXIgeW91IGhhdmUsIHRoZW4geW91CisgICAgLy8gc2hv
dWxkbid0IGNhbGwgdGhlc2UgbWV0aG9kcy4KKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgYXBwZW5k
VW5iYXJyaWVyZWQoSlNWYWx1ZSk7CisgICAgQUxXQVlTX0lOTElORSB2b2lkIGFwcGVuZFVuYmFy
cmllcmVkKEpTVmFsdWUqLCBzaXplX3QpOworICAgIHZpcnR1YWwgdm9pZCBhcHBlbmRVbmJhcnJp
ZXJlZChKU0NlbGwqKSA9IDA7CisKKyAgICBpbmxpbmUgYm9vbCBhZGRPcGFxdWVSb290KHZvaWQq
KTsgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSByb290IHdhcyBuZXcuCisgICAgaW5saW5lIGJvb2wg
Y29udGFpbnNPcGFxdWVSb290KHZvaWQqKSBjb25zdDsKKyAgICB2b2lkIHNldElnbm9yZU5ld09w
YXF1ZVJvb3RzKGJvb2wgdmFsdWUpIHsgbV9pZ25vcmVOZXdPcGFxdWVSb290cyA9IHZhbHVlOyB9
CisKKyAgICB2aXJ0dWFsIGJvb2wgaXNGaXJzdFZpc2l0KCkgY29uc3QgPSAwOworCisgICAgdmly
dHVhbCBib29sIGlzTWFya2VkKGNvbnN0IHZvaWQqKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBi
b29sIGlzTWFya2VkKE1hcmtlZEJsb2NrJiwgSGVhcENlbGwqKSBjb25zdCA9IDA7CisgICAgdmly
dHVhbCBib29sIGlzTWFya2VkKFByZWNpc2VBbGxvY2F0aW9uJiwgSGVhcENlbGwqKSBjb25zdCA9
IDA7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIHZvaWQgYXBwZW5kKGNvbnN0IFdl
YWs8VD4mKTsKKworICAgIEFMV0FZU19JTkxJTkUgdm9pZCBhcHBlbmRIaWRkZW5VbmJhcnJpZXJl
ZChKU1ZhbHVlKTsKKyAgICB2aXJ0dWFsIHZvaWQgYXBwZW5kSGlkZGVuVW5iYXJyaWVyZWQoSlND
ZWxsKikgPSAwOworCisgICAgc2l6ZV90IHZpc2l0Q291bnQoKSBjb25zdCB7IHJldHVybiBtX3Zp
c2l0Q291bnQ7IH0KKworICAgIHZvaWQgYWRkVG9WaXNpdENvdW50KHNpemVfdCB2YWx1ZSkgeyBt
X3Zpc2l0Q291bnQgKz0gdmFsdWU7IH0KKworICAgIHZpcnR1YWwgdm9pZCBhZGRQYXJhbGxlbENv
bnN0cmFpbnRUYXNrKFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoQWJzdHJhY3RTbG90VmlzaXRvciYp
Pj4pID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgYWRkUGFyYWxsZWxDb25zdHJhaW50VGFzayhSZWZQ
dHI8U2hhcmVkVGFzazx2b2lkKFNsb3RWaXNpdG9yJik+PikgPSAwOworCisgICAgdmlydHVhbCB2
b2lkIG1hcmtBdXhpbGlhcnkoY29uc3Qgdm9pZCogYmFzZSkgPSAwOworCisgICAgdmlydHVhbCB2
b2lkIHJlcG9ydEV4dHJhTWVtb3J5VmlzaXRlZChzaXplX3QpID0gMDsKKyNpZiBFTkFCTEUoUkVT
T1VSQ0VfVVNBR0UpCisgICAgdmlydHVhbCB2b2lkIHJlcG9ydEV4dGVybmFsTWVtb3J5VmlzaXRl
ZChzaXplX3QpID0gMDsKKyNlbmRpZgorCisgICAgdmlydHVhbCB2b2lkIGR1bXAoUHJpbnRTdHJl
YW0mKSBjb25zdCA9IDA7CisKKyAgICBSb290TWFya1JlYXNvbiByb290TWFya1JlYXNvbigpIGNv
bnN0IHsgcmV0dXJuIG1fcm9vdE1hcmtSZWFzb247IH0KKyAgICB2b2lkIHNldFJvb3RNYXJrUmVh
c29uKFJvb3RNYXJrUmVhc29uIHJlYXNvbikgeyBtX3Jvb3RNYXJrUmVhc29uID0gcmVhc29uOyB9
CisKKyAgICB2aXJ0dWFsIGJvb2wgbXV0YXRvcklzU3RvcHBlZCgpIGNvbnN0ID0gMDsKKworICAg
IHZpcnR1YWwgdm9pZCBkaWRSYWNlKGNvbnN0IFZpc2l0UmFjZUtleSYpID0gMDsKKyAgICB2b2lk
IGRpZFJhY2UoSlNDZWxsKiBjZWxsLCBjb25zdCBjaGFyKiByZWFzb24pIHsgZGlkUmFjZShWaXNp
dFJhY2VLZXkoY2VsbCwgcmVhc29uKSk7IH0KKworICAgIHZpcnR1YWwgdm9pZCB2aXNpdEFzQ29u
c3RyYWludChjb25zdCBKU0NlbGwqKSA9IDA7CisKKyAgICBjb25zdCBjaGFyKiBjb2RlTmFtZSgp
IGNvbnN0IHsgcmV0dXJuIG1fY29kZU5hbWUuZGF0YSgpOyB9CisKK3Byb3RlY3RlZDoKKyAgICBp
bmxpbmUgQWJzdHJhY3RTbG90VmlzaXRvcihIZWFwJiwgQ1N0cmluZyBjb2RlTmFtZSwgQ29uY3Vy
cmVudFB0ckhhc2hTZXQmKTsKKworICAgIEhlYXBDZWxsKiBwYXJlbnRDZWxsKCkgY29uc3Q7Cisg
ICAgdm9pZCByZXNldCgpOworCisgICAgTWFya1N0YWNrQXJyYXkgbV9jb2xsZWN0b3JTdGFjazsK
KyAgICBNYXJrU3RhY2tBcnJheSBtX211dGF0b3JTdGFjazsKKworICAgIHNpemVfdCBtX3Zpc2l0
Q291bnQgeyAwIH07CisKKyAgICBIZWFwJiBtX2hlYXA7CisgICAgQ29udGV4dCogbV9jb250ZXh0
IHsgbnVsbHB0ciB9OworICAgIENTdHJpbmcgbV9jb2RlTmFtZTsKKworICAgIE1hcmtpbmdDb25z
dHJhaW50KiBtX2N1cnJlbnRDb25zdHJhaW50IHsgbnVsbHB0ciB9OworICAgIE1hcmtpbmdDb25z
dHJhaW50U29sdmVyKiBtX2N1cnJlbnRTb2x2ZXIgeyBudWxscHRyIH07CisgICAgQ29uY3VycmVu
dFB0ckhhc2hTZXQmIG1fb3BhcXVlUm9vdHM7CisKKyAgICBSb290TWFya1JlYXNvbiBtX3Jvb3RN
YXJrUmVhc29uIHsgUm9vdE1hcmtSZWFzb246Ok5vbmUgfTsKKyAgICBib29sIG1fc3VwcHJlc3NW
ZXJpZmllciB7IGZhbHNlIH07CisgICAgYm9vbCBtX2lnbm9yZU5ld09wYXF1ZVJvb3RzIHsgZmFs
c2UgfTsgLy8gVXNlZnVsIGFzIGEgZGVidWdnaW5nIG1vZGUuCisKKyAgICBmcmllbmQgY2xhc3Mg
TWFya2luZ0NvbnN0cmFpbnRTb2x2ZXI7Cit9OworCitjbGFzcyBTZXRSb290TWFya1JlYXNvblNj
b3BlIHsKK3B1YmxpYzoKKyAgICBTZXRSb290TWFya1JlYXNvblNjb3BlKEFic3RyYWN0U2xvdFZp
c2l0b3ImIHZpc2l0b3IsIFJvb3RNYXJrUmVhc29uIHJlYXNvbikKKyAgICAgICAgOiBtX3Zpc2l0
b3IodmlzaXRvcikKKyAgICAgICAgLCBtX3ByZXZpb3VzUmVhc29uKHZpc2l0b3Iucm9vdE1hcmtS
ZWFzb24oKSkKKyAgICB7CisgICAgICAgIG1fdmlzaXRvci5zZXRSb290TWFya1JlYXNvbihyZWFz
b24pOworICAgIH0KKworICAgIH5TZXRSb290TWFya1JlYXNvblNjb3BlKCkKKyAgICB7CisgICAg
ICAgIG1fdmlzaXRvci5zZXRSb290TWFya1JlYXNvbihtX3ByZXZpb3VzUmVhc29uKTsKKyAgICB9
CisKK3ByaXZhdGU6CisgICAgQWJzdHJhY3RTbG90VmlzaXRvciYgbV92aXNpdG9yOworICAgIFJv
b3RNYXJrUmVhc29uIG1fcHJldmlvdXNSZWFzb247Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Fic3RyYWN0U2xvdFZpc2l0b3JJbmxp
bmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQWJzdHJhY3RT
bG90VmlzaXRvcklubGluZXMuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9BYnN0cmFjdFNsb3RWaXNpdG9ySW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMTU0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJBYnN0cmFjdFNsb3RWaXNpdG9yLmgiCisjaW5j
bHVkZSAiSGVhcC5oIgorI2luY2x1ZGUgIldlYWtJbmxpbmVzLmgiCisjaW5jbHVkZSAiV3JpdGVC
YXJyaWVyLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitpbmxpbmUgQWJzdHJhY3RTbG90VmlzaXRv
cjo6Q29udGV4dDo6Q29udGV4dChBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBIZWFwQ2Vs
bCogY2VsbCkKKyAgICA6IG1fdmlzaXRvcih2aXNpdG9yKQorICAgICwgbV9jZWxsKGNlbGwpCit7
CisgICAgbV9wcmV2aW91cyA9IG1fdmlzaXRvci5tX2NvbnRleHQ7CisgICAgbV92aXNpdG9yLm1f
Y29udGV4dCA9IHRoaXM7Cit9CisKK2lubGluZSBBYnN0cmFjdFNsb3RWaXNpdG9yOjpDb250ZXh0
Ojp+Q29udGV4dCgpCit7CisgICAgbV92aXNpdG9yLm1fY29udGV4dCA9IG1fcHJldmlvdXM7Cit9
CisKK2lubGluZSBBYnN0cmFjdFNsb3RWaXNpdG9yOjpBYnN0cmFjdFNsb3RWaXNpdG9yKEhlYXAm
IGhlYXAsIENTdHJpbmcgY29kZU5hbWUsIENvbmN1cnJlbnRQdHJIYXNoU2V0JiBvcGFxdWVSb290
cykKKyAgICA6IG1faGVhcChoZWFwKQorICAgICwgbV9jb2RlTmFtZShjb2RlTmFtZSkKKyAgICAs
IG1fb3BhcXVlUm9vdHMob3BhcXVlUm9vdHMpCit7Cit9CisKK2lubGluZSBIZWFwKiBBYnN0cmFj
dFNsb3RWaXNpdG9yOjpoZWFwKCkgY29uc3QKK3sKKyAgICByZXR1cm4gJm1faGVhcDsKK30KKwor
aW5saW5lIFZNJiBBYnN0cmFjdFNsb3RWaXNpdG9yOjp2bSgpCit7CisgICAgcmV0dXJuIG1faGVh
cC52bSgpOworfQorCitpbmxpbmUgY29uc3QgVk0mIEFic3RyYWN0U2xvdFZpc2l0b3I6OnZtKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gbV9oZWFwLnZtKCk7Cit9CisKK2lubGluZSBib29sIEFic3Ry
YWN0U2xvdFZpc2l0b3I6OmFkZE9wYXF1ZVJvb3Qodm9pZCogcHRyKQoreworICAgIGlmICghcHRy
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG1faWdub3JlTmV3T3BhcXVlUm9vdHMp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIW1fb3BhcXVlUm9vdHMuYWRkKHB0cikp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBtX3Zpc2l0Q291bnQrKzsKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKworaW5saW5lIGJvb2wgQWJzdHJhY3RTbG90VmlzaXRvcjo6Y29udGFpbnNPcGFx
dWVSb290KHZvaWQqIHB0cikgY29uc3QKK3sKKyAgICByZXR1cm4gbV9vcGFxdWVSb290cy5jb250
YWlucyhwdHIpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorQUxXQVlTX0lOTElORSB2b2lk
IEFic3RyYWN0U2xvdFZpc2l0b3I6OmFwcGVuZChjb25zdCBXZWFrPFQ+JiB3ZWFrKQoreworICAg
IGFwcGVuZFVuYmFycmllcmVkKHdlYWsuZ2V0KCkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
LCB0eXBlbmFtZSBUcmFpdHM+CitBTFdBWVNfSU5MSU5FIHZvaWQgQWJzdHJhY3RTbG90VmlzaXRv
cjo6YXBwZW5kKGNvbnN0IFdyaXRlQmFycmllckJhc2U8VCwgVHJhaXRzPiYgc2xvdCkKK3sKKyAg
ICBhcHBlbmRVbmJhcnJpZXJlZChzbG90LmdldCgpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUg
VCwgdHlwZW5hbWUgVHJhaXRzPgorQUxXQVlTX0lOTElORSB2b2lkIEFic3RyYWN0U2xvdFZpc2l0
b3I6OmFwcGVuZEhpZGRlbihjb25zdCBXcml0ZUJhcnJpZXJCYXNlPFQsIFRyYWl0cz4mIHNsb3Qp
Cit7CisgICAgYXBwZW5kSGlkZGVuVW5iYXJyaWVyZWQoc2xvdC5nZXQoKSk7Cit9CisKK0FMV0FZ
U19JTkxJTkUgdm9pZCBBYnN0cmFjdFNsb3RWaXNpdG9yOjphcHBlbmRIaWRkZW5VbmJhcnJpZXJl
ZChKU1ZhbHVlIHZhbHVlKQoreworICAgIGlmICh2YWx1ZS5pc0NlbGwoKSkKKyAgICAgICAgYXBw
ZW5kSGlkZGVuVW5iYXJyaWVyZWQodmFsdWUuYXNDZWxsKCkpOworfQorCit0ZW1wbGF0ZTx0eXBl
bmFtZSBJdGVyYXRvcj4KK0FMV0FZU19JTkxJTkUgdm9pZCBBYnN0cmFjdFNsb3RWaXNpdG9yOjph
cHBlbmQoSXRlcmF0b3IgYmVnaW4sIEl0ZXJhdG9yIGVuZCkKK3sKKyAgICBmb3IgKGF1dG8gaXQg
PSBiZWdpbjsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICBhcHBlbmQoKml0KTsKK30KKworQUxX
QVlTX0lOTElORSB2b2lkIEFic3RyYWN0U2xvdFZpc2l0b3I6OmFwcGVuZFZhbHVlcyhjb25zdCBX
cml0ZUJhcnJpZXJCYXNlPFVua25vd24+KiBiYXJyaWVycywgc2l6ZV90IGNvdW50KQoreworICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY291bnQ7ICsraSkKKyAgICAgICAgYXBwZW5kKGJhcnJp
ZXJzW2ldKTsKK30KKworQUxXQVlTX0lOTElORSB2b2lkIEFic3RyYWN0U2xvdFZpc2l0b3I6OmFw
cGVuZFZhbHVlc0hpZGRlbihjb25zdCBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+KiBiYXJyaWVy
cywgc2l6ZV90IGNvdW50KQoreworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY291bnQ7ICsr
aSkKKyAgICAgICAgYXBwZW5kSGlkZGVuKGJhcnJpZXJzW2ldKTsKK30KKworQUxXQVlTX0lOTElO
RSB2b2lkIEFic3RyYWN0U2xvdFZpc2l0b3I6OmFwcGVuZFVuYmFycmllcmVkKEpTVmFsdWUgdmFs
dWUpCit7CisgICAgaWYgKHZhbHVlLmlzQ2VsbCgpKQorICAgICAgICBhcHBlbmRVbmJhcnJpZXJl
ZCh2YWx1ZS5hc0NlbGwoKSk7Cit9CisKK0FMV0FZU19JTkxJTkUgdm9pZCBBYnN0cmFjdFNsb3RW
aXNpdG9yOjphcHBlbmRVbmJhcnJpZXJlZChKU1ZhbHVlKiBzbG90LCBzaXplX3QgY291bnQpCit7
CisgICAgZm9yIChzaXplX3QgaSA9IGNvdW50OyBpLS07KQorICAgICAgICBhcHBlbmRVbmJhcnJp
ZXJlZChzbG90W2ldKTsKK30KKworQUxXQVlTX0lOTElORSBIZWFwQ2VsbCogQWJzdHJhY3RTbG90
VmlzaXRvcjo6cGFyZW50Q2VsbCgpIGNvbnN0Cit7CisgICAgaWYgKCFtX2NvbnRleHQpCisgICAg
ICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiBtX2NvbnRleHQtPmNlbGwoKTsKK30KKwor
QUxXQVlTX0lOTElORSB2b2lkIEFic3RyYWN0U2xvdFZpc2l0b3I6OnJlc2V0KCkKK3sKKyAgICBt
X3Zpc2l0Q291bnQgPSAwOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0hhbmRsZVNldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvSGFuZGxlU2V0LmNwcAkocmV2aXNpb24gMjczMTE5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGFuZGxlU2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxOSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTU2LDcgKzU2LDggQEAgdm9pZCBIYW5kbGVTZXQ6Omdyb3coKQogICAgIH0KIH0KIAotdm9pZCBI
YW5kbGVTZXQ6OnZpc2l0U3Ryb25nSGFuZGxlcyhTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBs
YXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEhhbmRsZVNldDo6dmlzaXRTdHJvbmdIYW5kbGVz
KFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgTm9kZSogZW5kID0gbV9zdHJvbmdMaXN0LmVuZCgp
OwogICAgIGZvciAoTm9kZSogbm9kZSA9IG1fc3Ryb25nTGlzdC5iZWdpbigpOyBub2RlICE9IGVu
ZDsgbm9kZSA9IG5vZGUtPm5leHQoKSkgewpAQCAtNjcsNiArNjgsOSBAQCB2b2lkIEhhbmRsZVNl
dDo6dmlzaXRTdHJvbmdIYW5kbGVzKFNsb3RWCiAgICAgfQogfQogCit0ZW1wbGF0ZSB2b2lkIEhh
bmRsZVNldDo6dmlzaXRTdHJvbmdIYW5kbGVzKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBs
YXRlIHZvaWQgSGFuZGxlU2V0Ojp2aXNpdFN0cm9uZ0hhbmRsZXMoU2xvdFZpc2l0b3ImKTsKKwog
dm9pZCBIYW5kbGVTZXQ6OndyaXRlQmFycmllcihIYW5kbGVTbG90IHNsb3QsIGNvbnN0IEpTVmFs
dWUmIHZhbHVlKQogewogICAgIGlmICghdmFsdWUgPT0gISpzbG90ICYmIHNsb3QtPmlzQ2VsbCgp
ID09IHZhbHVlLmlzQ2VsbCgpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGFu
ZGxlU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGFuZGxl
U2V0LmgJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hh
bmRsZVNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMS0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzgsNyArMzgsNiBAQCBuYW1lc3BhY2UgSlND
IHsKIGNsYXNzIEhhbmRsZVNldDsKIGNsYXNzIFZNOwogY2xhc3MgSlNWYWx1ZTsKLWNsYXNzIFNs
b3RWaXNpdG9yOwogCiBjbGFzcyBIYW5kbGVOb2RlIHsKIHB1YmxpYzoKQEAgLTczLDcgKzcyLDcg
QEAgcHVibGljOgogICAgIEhhbmRsZVNsb3QgYWxsb2NhdGUoKTsKICAgICB2b2lkIGRlYWxsb2Nh
dGUoSGFuZGxlU2xvdCk7CiAKLSAgICB2b2lkIHZpc2l0U3Ryb25nSGFuZGxlcyhTbG90VmlzaXRv
ciYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgdmlzaXRTdHJvbmdIYW5k
bGVzKFZpc2l0b3ImKTsKIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgd3JpdGVCYXJyaWVy
KEhhbmRsZVNsb3QsIGNvbnN0IEpTVmFsdWUmKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvSGVhcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvSGVhcC5jcHAJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0hlYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Miw2ICs3Miw3IEBACiAjaW5jbHVkZSAi
VHlwZVByb2ZpbGVyLmgiCiAjaW5jbHVkZSAiVHlwZVByb2ZpbGVyTG9nLmgiCiAjaW5jbHVkZSAi
Vk0uaCIKKyNpbmNsdWRlICJWZXJpZmllclNsb3RWaXNpdG9ySW5saW5lcy5oIgogI2luY2x1ZGUg
IldlYWtNYXBJbXBsSW5saW5lcy5oIgogI2luY2x1ZGUgIldlYWtTZXRJbmxpbmVzLmgiCiAjaW5j
bHVkZSA8YWxnb3JpdGhtPgpAQCAtNjQzLDE5ICs2NDQsMTkgQEAgdm9pZCBIZWFwOjpjb21wbGV0
ZUFsbEpJVFBsYW5zKCkKICAgICBERkc6OmNvbXBsZXRlQWxsUGxhbnNGb3JWTShtX3ZtKTsKIH0K
IAotdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KLXZvaWQgSGVhcDo6aXRlcmF0ZUV4ZWN1dGluZ0Fu
ZENvbXBpbGluZ0NvZGVCbG9ja3MoY29uc3QgRnVuYyYgZnVuYykKK3RlbXBsYXRlPHR5cGVuYW1l
IEZ1bmMsIHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEhlYXA6Oml0ZXJhdGVFeGVjdXRpbmdBbmRD
b21waWxpbmdDb2RlQmxvY2tzKFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IEZ1bmMmIGZ1bmMpCiB7
CiAgICAgbV9jb2RlQmxvY2tzLT5pdGVyYXRlQ3VycmVudGx5RXhlY3V0aW5nKGZ1bmMpOwogICAg
IGlmIChPcHRpb25zOjp1c2VKSVQoKSkKLSAgICAgICAgREZHOjppdGVyYXRlQ29kZUJsb2Nrc0Zv
ckdDKG1fdm0sIGZ1bmMpOworICAgICAgICBERkc6Oml0ZXJhdGVDb2RlQmxvY2tzRm9yR0Modmlz
aXRvciwgbV92bSwgZnVuYyk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+Ci12b2lkIEhl
YXA6Oml0ZXJhdGVFeGVjdXRpbmdBbmRDb21waWxpbmdDb2RlQmxvY2tzV2l0aG91dEhvbGRpbmdM
b2Nrcyhjb25zdCBGdW5jJiBmdW5jKQordGVtcGxhdGU8dHlwZW5hbWUgRnVuYywgdHlwZW5hbWUg
VmlzaXRvcj4KK3ZvaWQgSGVhcDo6aXRlcmF0ZUV4ZWN1dGluZ0FuZENvbXBpbGluZ0NvZGVCbG9j
a3NXaXRob3V0SG9sZGluZ0xvY2tzKFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IEZ1bmMmIGZ1bmMp
CiB7CiAgICAgVmVjdG9yPENvZGVCbG9jayosIDI1Nj4gY29kZUJsb2NrczsKLSAgICBpdGVyYXRl
RXhlY3V0aW5nQW5kQ29tcGlsaW5nQ29kZUJsb2NrcygKKyAgICBpdGVyYXRlRXhlY3V0aW5nQW5k
Q29tcGlsaW5nQ29kZUJsb2Nrcyh2aXNpdG9yLAogICAgICAgICBbJl0gKENvZGVCbG9jayogY29k
ZUJsb2NrKSB7CiAgICAgICAgICAgICBjb2RlQmxvY2tzLmFwcGVuZChjb2RlQmxvY2spOwogICAg
ICAgICB9KTsKQEAgLTczMywxNCArNzM0LDYgQEAgdm9pZCBIZWFwOjpyZW1vdmVEZWFkQ29tcGls
ZXJXb3JrbGlzdEVudAogI2VuZGlmCiB9CiAKLWJvb2wgSGVhcDo6aXNBbmFseXppbmdIZWFwKCkg
Y29uc3QKLXsKLSAgICBIZWFwUHJvZmlsZXIqIGhlYXBQcm9maWxlciA9IG1fdm0uaGVhcFByb2Zp
bGVyKCk7Ci0gICAgaWYgKFVOTElLRUxZKGhlYXBQcm9maWxlcikpCi0gICAgICAgIHJldHVybiBo
ZWFwUHJvZmlsZXItPmFjdGl2ZUhlYXBBbmFseXplcigpOwotICAgIHJldHVybiBmYWxzZTsKLX0K
LQogc3RydWN0IEdhdGhlckV4dHJhSGVhcERhdGEgOiBNYXJrZWRCbG9jazo6Q291bnRGdW5jdG9y
IHsKICAgICBHYXRoZXJFeHRyYUhlYXBEYXRhKFZNJiB2bSwgSGVhcEFuYWx5emVyJiBhbmFseXpl
cikKICAgICAgICAgOiBtX3ZtKHZtKQpAQCAtMTQ4NSwxNCArMTQ3OCwyMSBAQCBORVZFUl9JTkxJ
TkUgYm9vbCBIZWFwOjpydW5FbmRQaGFzZShHQ0NvCiAgICAgfQogICAgIG1faGVscGVyQ2xpZW50
LmZpbmlzaCgpOwogICAgIAotICAgIGl0ZXJhdGVFeGVjdXRpbmdBbmRDb21waWxpbmdDb2RlQmxv
Y2tzKAorICAgIEFTU0VSVChtX211dGF0b3JNYXJrU3RhY2stPmlzRW1wdHkoKSk7CisgICAgQVNT
RVJUKG1fcmFjZU1hcmtTdGFjay0+aXNFbXB0eSgpKTsKKworICAgIFNsb3RWaXNpdG9yJiB2aXNp
dG9yID0gKm1fY29sbGVjdG9yU2xvdFZpc2l0b3I7CisgICAgaXRlcmF0ZUV4ZWN1dGluZ0FuZENv
bXBpbGluZ0NvZGVCbG9ja3ModmlzaXRvciwKICAgICAgICAgWyZdIChDb2RlQmxvY2sqIGNvZGVC
bG9jaykgewogICAgICAgICAgICAgd3JpdGVCYXJyaWVyKGNvZGVCbG9jayk7CiAgICAgICAgIH0p
OwotICAgICAgICAKKwogICAgIHVwZGF0ZU9iamVjdENvdW50cygpOwogICAgIGVuZE1hcmtpbmco
KTsKIAorICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjp2ZXJpZnlHQygpKSkKKyAgICAgICAgdmVy
aWZ5R0MoKTsKKwogICAgIGlmIChVTkxJS0VMWShtX3ZlcmlmaWVyKSkgewogICAgICAgICBtX3Zl
cmlmaWVyLT5nYXRoZXJMaXZlQ2VsbHMoSGVhcFZlcmlmaWVyOjpQaGFzZTo6QWZ0ZXJNYXJraW5n
KTsKICAgICAgICAgbV92ZXJpZmllci0+dmVyaWZ5KEhlYXBWZXJpZmllcjo6UGhhc2U6OkFmdGVy
TWFya2luZyk7CkBAIC0yMTcwLDYgKzIxNzAsMTEgQEAgdm9pZCBIZWFwOjpzdXNwZW5kQ29tcGls
ZXJUaHJlYWRzKCkKIAogdm9pZCBIZWFwOjp3aWxsU3RhcnRDb2xsZWN0aW9uKCkKIHsKKyAgICBp
ZiAoVU5MSUtFTFkoT3B0aW9uczo6dmVyaWZ5R0MoKSkpIHsKKyAgICAgICAgbV92ZXJpZmllclNs
b3RWaXNpdG9yID0gbWFrZVVuaXF1ZTxWZXJpZmllclNsb3RWaXNpdG9yPigqdGhpcyk7CisgICAg
ICAgIEFTU0VSVCghbV9pc01hcmtpbmdGb3JHQ1ZlcmlmaWVyKTsKKyAgICB9CisKICAgICBkYXRh
TG9nSWYoT3B0aW9uczo6bG9nR0MoKSwgIj0+ICIpOwogICAgIAogICAgIGlmIChzaG91bGREb0Z1
bGxDb2xsZWN0aW9uKCkpIHsKQEAgLTI2OTcsMTMgKzI3MDIsNDggQEAgdm9pZCBIZWFwOjpkaWRG
cmVlQmxvY2soc2l6ZV90IGNhcGFjaXR5KQogI2VuZGlmCiB9CiAKKy8vIFRoZSBmb2xsb3dpbmcg
YXJlIHB1bGxlZCBvdXQgb2YgdGhlIGJvZHkgb2YgSGVhcDo6YWRkQ29yZUNvbnN0cmFpbnRzKCkg
b25seQorLy8gYmVjYXVzZSB0aGUgV2luQ2Fpcm8gcG9ydCBpcyBub3QgYWJsZSB0byBoYW5kbGUg
I2lmJ3MgaW5zaWRlIHRoZSBib2R5IG9mIHRoZQorLy8gbGFtYmRhIHBhc3NlZCBpbnRvIHRoZSBN
QUtFX01BUktJTkdfQ09OU1RSQUlOVF9FWEVDVVRPUl9QQUlSIG1hY3JvLiBUaGlzIHdvcmtzCisv
LyBhcm91bmQgdGhhdCBpc3N1ZS4KKworI2lmIEpTQ19PQkpDX0FQSV9FTkFCTEVECitjb25zdGV4
cHIgYm9vbCBvYmpjQVBJRW5hYmxlZCA9IHRydWU7CisjZWxzZQorY29uc3RleHByIGJvb2wgb2Jq
Y0FQSUVuYWJsZWQgPSBmYWxzZTsKK3N0YXRpYyBVTlVTRURfRlVOQ1RJT04gdm9pZCBzY2FuRXh0
ZXJuYWxSZW1lbWJlcmVkU2V0KFZNJiwgQWJzdHJhY3RTbG90VmlzaXRvciYpIHsgfQorI2VuZGlm
CisKKyNpZiBFTkFCTEUoU0FNUExJTkdfUFJPRklMRVIpCitjb25zdGV4cHIgYm9vbCBzYW1wbGlu
Z1Byb2ZpbGVyU3VwcG9ydGVkID0gdHJ1ZTsKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Citz
dGF0aWMgQUxXQVlTX0lOTElORSB2b2lkIHNlcnZpY2VTYW1wbGluZ1Byb2ZpbGVyKFZNJiB2bSwg
VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBpZiAoVU5MSUtFTFkoU2FtcGxpbmdQcm9maWxlciog
c2FtcGxpbmdQcm9maWxlciA9IHZtLnNhbXBsaW5nUHJvZmlsZXIoKSkpIHsKKyAgICAgICAgYXV0
byBsb2NrZXIgPSBob2xkTG9jayhzYW1wbGluZ1Byb2ZpbGVyLT5nZXRMb2NrKCkpOworICAgICAg
ICBzYW1wbGluZ1Byb2ZpbGVyLT5wcm9jZXNzVW52ZXJpZmllZFN0YWNrVHJhY2VzKGxvY2tlcik7
CisgICAgICAgIHNhbXBsaW5nUHJvZmlsZXItPnZpc2l0KHZpc2l0b3IpOworICAgICAgICBpZiAo
T3B0aW9uczo6bG9nR0MoKSA9PSBHQ0xvZ2dpbmc6OlZlcmJvc2UpCisgICAgICAgICAgICBkYXRh
TG9nKCJTYW1wbGluZyBQcm9maWxlciBkYXRhOlxuIiwgdmlzaXRvcik7CisgICAgfQorfTsKKyNl
bHNlCitjb25zdGV4cHIgYm9vbCBzYW1wbGluZ1Byb2ZpbGVyU3VwcG9ydGVkID0gZmFsc2U7Citz
dGF0aWMgVU5VU0VEX0ZVTkNUSU9OIHZvaWQgc2VydmljZVNhbXBsaW5nUHJvZmlsZXIoVk0mLCBB
YnN0cmFjdFNsb3RWaXNpdG9yJikgeyB9OworI2VuZGlmCisKIHZvaWQgSGVhcDo6YWRkQ29yZUNv
bnN0cmFpbnRzKCkKIHsKICAgICBtX2NvbnN0cmFpbnRTZXQtPmFkZCgKICAgICAgICAgIkNzIiwg
IkNvbnNlcnZhdGl2ZSBTY2FuIiwKLSAgICAgICAgW3RoaXMsIGxhc3RWZXJzaW9uID0gc3RhdGlj
X2Nhc3Q8dWludDY0X3Q+KDApXSAoU2xvdFZpc2l0b3ImIHZpc2l0b3IpIG11dGFibGUgeworICAg
ICAgICBNQUtFX01BUktJTkdfQ09OU1RSQUlOVF9FWEVDVVRPUl9QQUlSKChbdGhpcywgbGFzdFZl
cnNpb24gPSBzdGF0aWNfY2FzdDx1aW50NjRfdD4oMCldIChhdXRvJiB2aXNpdG9yKSBtdXRhYmxl
IHsKICAgICAgICAgICAgIGJvb2wgc2hvdWxkTm90UHJvZHVjZVdvcmsgPSBsYXN0VmVyc2lvbiA9
PSBtX3BoYXNlVmVyc2lvbjsKLSAgICAgICAgICAgIGlmIChzaG91bGROb3RQcm9kdWNlV29yaykK
KworICAgICAgICAgICAgLy8gRm9yIHRoZSBHQyBWZXJmaWVyLCB3ZSB3b3VsZCBsaWtlIHRvIHVz
ZSB0aGUgaWRlbnRpY2FsIHNldCBvZiBjb25zZXJ2YXRpdmUgcm9vdHMKKyAgICAgICAgICAgIC8v
IGFzIHRoZSByZWFsIEdDLiBPdGhlcndpc2UsIHRoZSBHQyB2ZXJpZmllciBtYXkgcmVwb3J0IGZh
bHNlIG5lZ2F0aXZlcyBkdWUgdG8KKyAgICAgICAgICAgIC8vIHZhcmlhdGlvbnMgaW4gc3RhY2sg
dmFsdWVzLiBGb3IgdGhpcyBzYW1lIHJlYXNvbiwgd2Ugd2lsbCBza2lwIHRoaXMgY29uc3RyYWlu
dAorICAgICAgICAgICAgLy8gd2hlbiB3ZSdyZSBydW5uaW5nIHRoZSBHQyB2ZXJpZmljYXRpb24g
aW4gdGhlIEVuZCBwaGFzZS4KKyAgICAgICAgICAgIGlmIChzaG91bGROb3RQcm9kdWNlV29yayB8
fCBtX2lzTWFya2luZ0ZvckdDVmVyaWZpZXIpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICAgICAgCiAgICAgICAgICAgICBUaW1pbmdTY29wZSBwcmVDb252ZXJnZW5jZVRpbWluZ1Nj
b3BlKCp0aGlzLCAiQ29uc3RyYWludDogY29uc2VydmF0aXZlIHNjYW4iKTsKQEAgLTI3MjAsMjQg
KzI3NjAsMzEgQEAgdm9pZCBIZWFwOjphZGRDb3JlQ29uc3RyYWludHMoKQogCiAgICAgICAgICAg
ICAgICAgU2V0Um9vdE1hcmtSZWFzb25TY29wZSByb290U2NvcGUodmlzaXRvciwgUm9vdE1hcmtS
ZWFzb246OkNvbnNlcnZhdGl2ZVNjYW4pOwogICAgICAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5k
KGNvbnNlcnZhdGl2ZVJvb3RzKTsKKyAgICAgICAgICAgICAgICBpZiAoVU5MSUtFTFkobV92ZXJp
ZmllclNsb3RWaXNpdG9yKSkKKyAgICAgICAgICAgICAgICAgICAgbV92ZXJpZmllclNsb3RWaXNp
dG9yLT5hcHBlbmQoY29uc2VydmF0aXZlUm9vdHMpOwogICAgICAgICAgICAgfQogICAgICAgICAg
ICAgaWYgKE9wdGlvbnM6OnVzZUpJVCgpKSB7CiAgICAgICAgICAgICAgICAgLy8gSklUU3R1YlJv
dXRpbmVzIG11c3QgYmUgdmlzaXRlZCBhZnRlciBzY2FubmluZyBDb25zZXJ2YXRpdmVSb290cyBz
aW5jZSBKSVRTdHViUm91dGluZXMgZGVwZW5kIG9uIHRoZSBob29rIGV4ZWN1dGVkIGR1cmluZyBn
YXRoZXJpbmcgQ29uc2VydmF0aXZlUm9vdHMuCiAgICAgICAgICAgICAgICAgU2V0Um9vdE1hcmtS
ZWFzb25TY29wZSByb290U2NvcGUodmlzaXRvciwgUm9vdE1hcmtSZWFzb246OkpJVFN0dWJSb3V0
aW5lcyk7CiAgICAgICAgICAgICAgICAgbV9qaXRTdHViUm91dGluZXMtPnRyYWNlTWFya2VkU3R1
YlJvdXRpbmVzKHZpc2l0b3IpOworICAgICAgICAgICAgICAgIGlmIChVTkxJS0VMWShtX3Zlcmlm
aWVyU2xvdFZpc2l0b3IpKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIEl0J3MgaW1wb3J0YW50
IHRvIGNhc3QgbV92ZXJpZmllclNsb3RWaXNpdG9yIHRvIGFuIEFic3RyYWN0U2xvdFZpc2l0b3Ig
aGVyZQorICAgICAgICAgICAgICAgICAgICAvLyBzbyB0aGF0IHdlJ2xsIGNhbGwgdGhlIEFic3Ry
YWN0U2xvdFZpc2l0b3IgdmVyc2lvbiBvZiB0cmFjZU1hcmtlZFN0dWJSb3V0aW5lcygpLgorICAg
ICAgICAgICAgICAgICAgICBBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yID0gKm1fdmVyaWZp
ZXJTbG90VmlzaXRvcjsKKyAgICAgICAgICAgICAgICAgICAgbV9qaXRTdHViUm91dGluZXMtPnRy
YWNlTWFya2VkU3R1YlJvdXRpbmVzKHZpc2l0b3IpOworICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICAgICAgbGFzdFZlcnNpb24gPSBtX3BoYXNl
VmVyc2lvbjsKLSAgICAgICAgfSwKKyAgICAgICAgfSkpLAogICAgICAgICBDb25zdHJhaW50Vm9s
YXRpbGl0eTo6R3JleWVkQnlFeGVjdXRpb24pOwogICAgIAogICAgIG1fY29uc3RyYWludFNldC0+
YWRkKAogICAgICAgICAiTXNyIiwgIk1pc2MgU21hbGwgUm9vdHMiLAotICAgICAgICBbdGhpc10g
KFNsb3RWaXNpdG9yJiB2aXNpdG9yKSB7CisgICAgICAgIE1BS0VfTUFSS0lOR19DT05TVFJBSU5U
X0VYRUNVVE9SX1BBSVIoKFt0aGlzXSAoYXV0byYgdmlzaXRvcikgeworICAgICAgICAgICAgaWYg
Y29uc3RleHByIChvYmpjQVBJRW5hYmxlZCkKKyAgICAgICAgICAgICAgICBzY2FuRXh0ZXJuYWxS
ZW1lbWJlcmVkU2V0KG1fdm0sIHZpc2l0b3IpOwogCi0jaWYgSlNDX09CSkNfQVBJX0VOQUJMRUQK
LSAgICAgICAgICAgIHNjYW5FeHRlcm5hbFJlbWVtYmVyZWRTZXQobV92bSwgdmlzaXRvcik7Ci0j
ZW5kaWYKICAgICAgICAgICAgIGlmIChtX3ZtLnNtYWxsU3RyaW5ncy5uZWVkc1RvQmVWaXNpdGVk
KCptX2NvbGxlY3Rpb25TY29wZSkpIHsKICAgICAgICAgICAgICAgICBTZXRSb290TWFya1JlYXNv
blNjb3BlIHJvb3RTY29wZSh2aXNpdG9yLCBSb290TWFya1JlYXNvbjo6U3Ryb25nUmVmZXJlbmNl
cyk7CiAgICAgICAgICAgICAgICAgbV92bS5zbWFsbFN0cmluZ3MudmlzaXRTdHJvbmdSZWZlcmVu
Y2VzKHZpc2l0b3IpOwpAQCAtMjc2Myw2OCArMjgxMCw2NiBAQCB2b2lkIEhlYXA6OmFkZENvcmVD
b25zdHJhaW50cygpCiAgICAgICAgICAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZCht
X3ZtLmV4Y2VwdGlvbigpKTsKICAgICAgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmll
cmVkKG1fdm0ubGFzdEV4Y2VwdGlvbigpKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgfSwKKyAg
ICAgICAgfSkpLAogICAgICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eTo6R3JleWVkQnlFeGVjdXRp
b24pOwogICAgIAogICAgIG1fY29uc3RyYWludFNldC0+YWRkKAogICAgICAgICAiU2giLCAiU3Ry
b25nIEhhbmRsZXMiLAotICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiB2aXNpdG9yKSB7Cisg
ICAgICAgIE1BS0VfTUFSS0lOR19DT05TVFJBSU5UX0VYRUNVVE9SX1BBSVIoKFt0aGlzXSAoYXV0
byYgdmlzaXRvcikgewogICAgICAgICAgICAgU2V0Um9vdE1hcmtSZWFzb25TY29wZSByb290U2Nv
cGUodmlzaXRvciwgUm9vdE1hcmtSZWFzb246OlN0cm9uZ0hhbmRsZXMpOwogICAgICAgICAgICAg
bV9oYW5kbGVTZXQudmlzaXRTdHJvbmdIYW5kbGVzKHZpc2l0b3IpOwotICAgICAgICB9LAorICAg
ICAgICB9KSksCiAgICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5OjpHcmV5ZWRCeUV4ZWN1dGlv
bik7CiAgICAgCiAgICAgbV9jb25zdHJhaW50U2V0LT5hZGQoCiAgICAgICAgICJEIiwgIkRlYnVn
Z2VyIiwKLSAgICAgICAgW3RoaXNdIChTbG90VmlzaXRvciYgdmlzaXRvcikgeworICAgICAgICBN
QUtFX01BUktJTkdfQ09OU1RSQUlOVF9FWEVDVVRPUl9QQUlSKChbdGhpc10gKGF1dG8mIHZpc2l0
b3IpIHsKICAgICAgICAgICAgIFNldFJvb3RNYXJrUmVhc29uU2NvcGUgcm9vdFNjb3BlKHZpc2l0
b3IsIFJvb3RNYXJrUmVhc29uOjpEZWJ1Z2dlcik7CiAKLSNpZiBFTkFCTEUoU0FNUExJTkdfUFJP
RklMRVIpCi0gICAgICAgICAgICBpZiAoU2FtcGxpbmdQcm9maWxlciogc2FtcGxpbmdQcm9maWxl
ciA9IG1fdm0uc2FtcGxpbmdQcm9maWxlcigpKSB7Ci0gICAgICAgICAgICAgICAgYXV0byBsb2Nr
ZXIgPSBob2xkTG9jayhzYW1wbGluZ1Byb2ZpbGVyLT5nZXRMb2NrKCkpOwotICAgICAgICAgICAg
ICAgIHNhbXBsaW5nUHJvZmlsZXItPnByb2Nlc3NVbnZlcmlmaWVkU3RhY2tUcmFjZXMobG9ja2Vy
KTsKLSAgICAgICAgICAgICAgICBzYW1wbGluZ1Byb2ZpbGVyLT52aXNpdCh2aXNpdG9yKTsKLSAg
ICAgICAgICAgICAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSA9PSBHQ0xvZ2dpbmc6OlZlcmJvc2Up
Ci0gICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIlNhbXBsaW5nIFByb2ZpbGVyIGRhdGE6XG4i
LCB2aXNpdG9yKTsKLSAgICAgICAgICAgIH0KLSNlbmRpZiAvLyBFTkFCTEUoU0FNUExJTkdfUFJP
RklMRVIpCisgICAgICAgICAgICBpZiBjb25zdGV4cHIgKHNhbXBsaW5nUHJvZmlsZXJTdXBwb3J0
ZWQpCisgICAgICAgICAgICAgICAgc2VydmljZVNhbXBsaW5nUHJvZmlsZXIobV92bSwgdmlzaXRv
cik7CiAKICAgICAgICAgICAgIGlmIChtX3ZtLnR5cGVQcm9maWxlcigpKQogICAgICAgICAgICAg
ICAgIG1fdm0udHlwZVByb2ZpbGVyTG9nKCktPnZpc2l0KHZpc2l0b3IpOwogICAgICAgICAgICAg
CiAgICAgICAgICAgICBpZiAoYXV0byogc2hhZG93Q2hpY2tlbiA9IG1fdm0uc2hhZG93Q2hpY2tl
bigpKQogICAgICAgICAgICAgICAgIHNoYWRvd0NoaWNrZW4tPnZpc2l0Q2hpbGRyZW4odmlzaXRv
cik7Ci0gICAgICAgIH0sCisgICAgICAgIH0pKSwKICAgICAgICAgQ29uc3RyYWludFZvbGF0aWxp
dHk6OkdyZXllZEJ5RXhlY3V0aW9uKTsKICAgICAKICAgICBtX2NvbnN0cmFpbnRTZXQtPmFkZCgK
ICAgICAgICAgIldzIiwgIldlYWsgU2V0cyIsCi0gICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3Im
IHZpc2l0b3IpIHsKKyAgICAgICAgTUFLRV9NQVJLSU5HX0NPTlNUUkFJTlRfRVhFQ1VUT1JfUEFJ
UigoW3RoaXNdIChhdXRvJiB2aXNpdG9yKSB7CiAgICAgICAgICAgICBTZXRSb290TWFya1JlYXNv
blNjb3BlIHJvb3RTY29wZSh2aXNpdG9yLCBSb290TWFya1JlYXNvbjo6V2Vha1NldHMpOwogICAg
ICAgICAgICAgbV9vYmplY3RTcGFjZS52aXNpdFdlYWtTZXRzKHZpc2l0b3IpOwotICAgICAgICB9
LAorICAgICAgICB9KSksCiAgICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5OjpHcmV5ZWRCeU1h
cmtpbmcpOwogICAgIAogICAgIG1fY29uc3RyYWludFNldC0+YWRkKAogICAgICAgICAiTyIsICJP
dXRwdXQiLAotICAgICAgICBbXSAoU2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsKKyAgICAgICAgTUFL
RV9NQVJLSU5HX0NPTlNUUkFJTlRfRVhFQ1VUT1JfUEFJUigoW10gKGF1dG8mIHZpc2l0b3IpIHsK
KyAgICAgICAgICAgIHVzaW5nIFZpc2l0b3IgPSBkZWNsdHlwZSh2aXNpdG9yKTsKICAgICAgICAg
ICAgIFZNJiB2bSA9IHZpc2l0b3Iudm0oKTsKIAotICAgICAgICAgICAgYXV0byBjYWxsT3V0cHV0
Q29uc3RyYWludCA9IFtdIChTbG90VmlzaXRvciYgdmlzaXRvciwgSGVhcENlbGwqIGhlYXBDZWxs
LCBIZWFwQ2VsbDo6S2luZCkgewotICAgICAgICAgICAgICAgIFNldFJvb3RNYXJrUmVhc29uU2Nv
cGUgcm9vdFNjb3BlKHZpc2l0b3IsIFJvb3RNYXJrUmVhc29uOjpPdXRwdXQpOwotICAgICAgICAg
ICAgICAgIFZNJiB2bSA9IHZpc2l0b3Iudm0oKTsKKyAgICAgICAgICAgIC8vIFRoZSBgdmlzaXRv
cjJgIGFyZ3VtZW50IGlzIHN0cmFuZ2VseSBuYW1lZCBiZWNhdXNlIHRoZSBXaW5DYWlybyBwb3J0
CisgICAgICAgICAgICAvLyBnZXRzIGNvbmZ1c2VkICBhbmQgdGhpbmtzIHdlJ3JlIHRyeWluZyB0
byBjYXB0dXJlIHRoZSBvdXRlciB2aXNpdG9yCisgICAgICAgICAgICAvLyBhcmcgaGVyZS4gR2l2
aW5nIGl0IGEgdW5pcXVlIG5hbWUgd29ya3MgYXJvdW5kIHRoaXMgaXNzdWUuCisgICAgICAgICAg
ICBhdXRvIGNhbGxPdXRwdXRDb25zdHJhaW50ID0gW10gKFZpc2l0b3ImIHZpc2l0b3IyLCBIZWFw
Q2VsbCogaGVhcENlbGwsIEhlYXBDZWxsOjpLaW5kKSB7CisgICAgICAgICAgICAgICAgU2V0Um9v
dE1hcmtSZWFzb25TY29wZSByb290U2NvcGUodmlzaXRvcjIsIFJvb3RNYXJrUmVhc29uOjpPdXRw
dXQpOworICAgICAgICAgICAgICAgIFZNJiB2bSA9IHZpc2l0b3IyLnZtKCk7CiAgICAgICAgICAg
ICAgICAgSlNDZWxsKiBjZWxsID0gc3RhdGljX2Nhc3Q8SlNDZWxsKj4oaGVhcENlbGwpOwotICAg
ICAgICAgICAgICAgIGNlbGwtPm1ldGhvZFRhYmxlKHZtKS0+dmlzaXRPdXRwdXRDb25zdHJhaW50
cyhjZWxsLCB2aXNpdG9yKTsKKyAgICAgICAgICAgICAgICBjZWxsLT5tZXRob2RUYWJsZSh2bSkt
PnZpc2l0T3V0cHV0Q29uc3RyYWludHMoY2VsbCwgdmlzaXRvcjIpOwogICAgICAgICAgICAgfTsK
ICAgICAgICAgICAgIAogICAgICAgICAgICAgYXV0byBhZGQgPSBbJl0gKGF1dG8mIHNldCkgewot
ICAgICAgICAgICAgICAgIHZpc2l0b3IuYWRkUGFyYWxsZWxDb25zdHJhaW50VGFzayhzZXQuZm9y
RWFjaE1hcmtlZENlbGxJblBhcmFsbGVsKGNhbGxPdXRwdXRDb25zdHJhaW50KSk7CisgICAgICAg
ICAgICAgICAgUmVmUHRyPFNoYXJlZFRhc2s8dm9pZChWaXNpdG9yJik+PiB0YXNrID0gc2V0LnRl
bXBsYXRlIGZvckVhY2hNYXJrZWRDZWxsSW5QYXJhbGxlbDxWaXNpdG9yPihjYWxsT3V0cHV0Q29u
c3RyYWludCk7CisgICAgICAgICAgICAgICAgdmlzaXRvci5hZGRQYXJhbGxlbENvbnN0cmFpbnRU
YXNrKHRhc2spOwogICAgICAgICAgICAgfTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgYWRk
KHZtLmV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2VzV2l0aENvbnN0cmFpbnRzKTsKICAgICAgICAg
ICAgIGlmICh2bS5tX3dlYWtNYXBTcGFjZSkKICAgICAgICAgICAgICAgICBhZGQoKnZtLm1fd2Vh
a01hcFNwYWNlKTsKLSAgICAgICAgfSwKKyAgICAgICAgfSkpLAogICAgICAgICBDb25zdHJhaW50
Vm9sYXRpbGl0eTo6R3JleWVkQnlNYXJraW5nLAogICAgICAgICBDb25zdHJhaW50UGFyYWxsZWxp
c206OlBhcmFsbGVsKTsKICAgICAKQEAgLTI4MzIsNyArMjg3Nyw3IEBAIHZvaWQgSGVhcDo6YWRk
Q29yZUNvbnN0cmFpbnRzKCkKICAgICBpZiAoT3B0aW9uczo6dXNlSklUKCkpIHsKICAgICAgICAg
bV9jb25zdHJhaW50U2V0LT5hZGQoCiAgICAgICAgICAgICAiRHciLCAiREZHIFdvcmtsaXN0cyIs
Ci0gICAgICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiB2aXNpdG9yKSB7CisgICAgICAgICAg
ICBNQUtFX01BUktJTkdfQ09OU1RSQUlOVF9FWEVDVVRPUl9QQUlSKChbdGhpc10gKGF1dG8mIHZp
c2l0b3IpIHsKICAgICAgICAgICAgICAgICBTZXRSb290TWFya1JlYXNvblNjb3BlIHJvb3RTY29w
ZSh2aXNpdG9yLCBSb290TWFya1JlYXNvbjo6REZHV29ya0xpc3RzKTsKIAogICAgICAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IERGRzo6bnVtYmVyT2ZXb3JrbGlzdHMoKTsgaS0tOykKQEAg
LTI4NDAsNyArMjg4NSw3IEBAIHZvaWQgSGVhcDo6YWRkQ29yZUNvbnN0cmFpbnRzKCkKICAgICAg
ICAgICAgICAgICAKICAgICAgICAgICAgICAgICAvLyBGSVhNRTogVGhpcyBpcyBhbG1vc3QgY2Vy
dGFpbmx5IHVubmVjZXNzYXJ5LgogICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjY4MjkKLSAgICAgICAgICAgICAgICBERkc6Oml0ZXJh
dGVDb2RlQmxvY2tzRm9yR0MoCisgICAgICAgICAgICAgICAgREZHOjppdGVyYXRlQ29kZUJsb2Nr
c0ZvckdDKHZpc2l0b3IsCiAgICAgICAgICAgICAgICAgICAgIG1fdm0sCiAgICAgICAgICAgICAg
ICAgICAgIFsmXSAoQ29kZUJsb2NrKiBjb2RlQmxvY2spIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQoY29kZUJsb2NrKTsKQEAgLTI4NDgsMjMgKzI4
OTMsMjMgQEAgdm9pZCBIZWFwOjphZGRDb3JlQ29uc3RyYWludHMoKQogICAgICAgICAgICAgICAg
IAogICAgICAgICAgICAgICAgIGlmIChPcHRpb25zOjpsb2dHQygpID09IEdDTG9nZ2luZzo6VmVy
Ym9zZSkKICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiREZHIFdvcmtsaXN0czpcbiIsIHZp
c2l0b3IpOwotICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIH0pKSwKICAgICAgICAgICAgIENv
bnN0cmFpbnRWb2xhdGlsaXR5OjpHcmV5ZWRCeU1hcmtpbmcpOwogICAgIH0KICNlbmRpZgogICAg
IAogICAgIG1fY29uc3RyYWludFNldC0+YWRkKAogICAgICAgICAiQ2IiLCAiQ29kZUJsb2NrcyIs
Ci0gICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsKKyAgICAgICAgTUFLRV9N
QVJLSU5HX0NPTlNUUkFJTlRfRVhFQ1VUT1JfUEFJUigoW3RoaXNdIChhdXRvJiB2aXNpdG9yKSB7
CiAgICAgICAgICAgICBTZXRSb290TWFya1JlYXNvblNjb3BlIHJvb3RTY29wZSh2aXNpdG9yLCBS
b290TWFya1JlYXNvbjo6Q29kZUJsb2Nrcyk7Ci0gICAgICAgICAgICBpdGVyYXRlRXhlY3V0aW5n
QW5kQ29tcGlsaW5nQ29kZUJsb2Nrc1dpdGhvdXRIb2xkaW5nTG9ja3MoCisgICAgICAgICAgICBp
dGVyYXRlRXhlY3V0aW5nQW5kQ29tcGlsaW5nQ29kZUJsb2Nrc1dpdGhvdXRIb2xkaW5nTG9ja3Mo
dmlzaXRvciwKICAgICAgICAgICAgICAgICBbJl0gKENvZGVCbG9jayogY29kZUJsb2NrKSB7CiAg
ICAgICAgICAgICAgICAgICAgIC8vIFZpc2l0IHRoZSBDb2RlQmxvY2sgYXMgYSBjb25zdHJhaW50
IG9ubHkgaWYgaXQncyBibGFjay4KLSAgICAgICAgICAgICAgICAgICAgaWYgKGlzTWFya2VkKGNv
ZGVCbG9jaykKKyAgICAgICAgICAgICAgICAgICAgaWYgKHZpc2l0b3IuaXNNYXJrZWQoY29kZUJs
b2NrKQogICAgICAgICAgICAgICAgICAgICAgICAgJiYgY29kZUJsb2NrLT5jZWxsU3RhdGUoKSA9
PSBDZWxsU3RhdGU6OlBvc3NpYmx5QmxhY2spCiAgICAgICAgICAgICAgICAgICAgICAgICB2aXNp
dG9yLnZpc2l0QXNDb25zdHJhaW50KGNvZGVCbG9jayk7CiAgICAgICAgICAgICAgICAgfSk7Ci0g
ICAgICAgIH0sCisgICAgICAgIH0pKSwKICAgICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHk6OlNl
bGRvbUdyZXllZCk7CiAgICAgCiAgICAgbV9jb25zdHJhaW50U2V0LT5hZGQobWFrZVVuaXF1ZTxN
YXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludD4oKnRoaXMpKTsKQEAgLTMwMjMsNCArMzA2OCwzNCBA
QCB2b2lkIEhlYXA6OnJ1blRhc2tJblBhcmFsbGVsKFJlZlB0cjxTaGFyCiAgICAgfQogfQogCit2
b2lkIEhlYXA6OnZlcmlmeUdDKCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChtX3ZlcmlmaWVyU2xv
dFZpc2l0b3IpOworICAgIFJFTEVBU0VfQVNTRVJUKCFtX2lzTWFya2luZ0ZvckdDVmVyaWZpZXIp
OworICAgIG1faXNNYXJraW5nRm9yR0NWZXJpZmllciA9IHRydWU7CisKKyAgICBWZXJpZmllclNs
b3RWaXNpdG9yJiB2aXNpdG9yID0gKm1fdmVyaWZpZXJTbG90VmlzaXRvcjsKKworICAgIGRvIHsK
KyAgICAgICAgd2hpbGUgKCF2aXNpdG9yLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHZpc2l0b3Iu
ZHJhaW4oKTsKKyAgICAgICAgbV9jb25zdHJhaW50U2V0LT5leGVjdXRlQWxsU3luY2hyb25vdXNs
eSh2aXNpdG9yKTsKKyAgICAgICAgdmlzaXRvci5leGVjdXRlQ29uc3RyYWludFRhc2tzKCk7Cisg
ICAgfSB3aGlsZSAoIXZpc2l0b3IuaXNFbXB0eSgpKTsKKworICAgIG1faXNNYXJraW5nRm9yR0NW
ZXJpZmllciA9IGZhbHNlOworCisgICAgdmlzaXRvci5mb3JFYWNoTGl2ZUNlbGwoWyZdIChIZWFw
Q2VsbCogY2VsbCkgeworICAgICAgICBpZiAoSGVhcDo6aXNNYXJrZWQoY2VsbCkpCisgICAgICAg
ICAgICByZXR1cm47CisKKyAgICAgICAgZGF0YUxvZ0xuKCJcbiIgIkdDIFZlcmlmaWVyOiBFUlJP
UiBjZWxsICIsIFJhd1BvaW50ZXIoY2VsbCksICIgd2FzIG5vdCBtYXJrZWQiKTsKKyAgICAgICAg
aWYgKFVOTElLRUxZKE9wdGlvbnM6OnZlcmJvc2VWZXJpZnlHQygpKSkKKyAgICAgICAgICAgIHZp
c2l0b3IuZHVtcE1hcmtlckRhdGEoY2VsbCk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKHRoaXMt
PmlzTWFya2VkKGNlbGwpKTsKKyAgICB9KTsKKworICAgIG1fdmVyaWZpZXJTbG90VmlzaXRvciA9
IG51bGxwdHI7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvSGVhcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0hlYXAuaAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvSGVhcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqICBDb3B5cmln
aHQgKEMpIDE5OTktMjAwMCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQogICogIENvcHly
aWdodCAoQykgMjAwMSBQZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQotICogIENvcHlyaWdodCAo
QykgMjAwMy0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmln
aHQgKEMpIDIwMDMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdl
bmVyYWwgUHVibGljCkBAIC04Niw2ICs4Niw3IEBAIGNsYXNzIFNwYWNlVGltZU11dGF0b3JTY2hl
ZHVsZXI7CiBjbGFzcyBTdG9wSWZOZWNlc3NhcnlUaW1lcjsKIGNsYXNzIFN3ZWVwaW5nU2NvcGU7
CiBjbGFzcyBWTTsKK2NsYXNzIFZlcmlmaWVyU2xvdFZpc2l0b3I7CiBjbGFzcyBXZWFrR0NNYXBC
YXNlOwogc3RydWN0IEN1cnJlbnRUaHJlYWRTdGF0ZTsKIApAQCAtMTg0LDggKzE4NSw2IEBAIHB1
YmxpYzoKICAgICAKICAgICBib29sIGlzU2h1dHRpbmdEb3duKCkgY29uc3QgeyByZXR1cm4gbV9p
c1NodXR0aW5nRG93bjsgfQogCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBpc0FuYWx5emlu
Z0hlYXAoKSBjb25zdDsKLQogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgc3dlZXBTeW5jaHJv
bm91c2x5KCk7CiAKICAgICBib29sIHNob3VsZENvbGxlY3RIZXVyaXN0aWMoKTsKQEAgLTM4NSw4
ICszODQsNiBAQCBwdWJsaWM6CiAgICAgCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBhZGRN
YXJraW5nQ29uc3RyYWludChzdGQ6OnVuaXF1ZV9wdHI8TWFya2luZ0NvbnN0cmFpbnQ+KTsKICAg
ICAKLSAgICBzaXplX3QgbnVtT3BhcXVlUm9vdHMoKSBjb25zdCB7IHJldHVybiBtX29wYXF1ZVJv
b3RzLnNpemUoKTsgfQotCiAgICAgSGVhcFZlcmlmaWVyKiB2ZXJpZmllcigpIGNvbnN0IHsgcmV0
dXJuIG1fdmVyaWZpZXIuZ2V0KCk7IH0KICAgICAKICAgICB2b2lkIGFkZEhlYXBGaW5hbGl6ZXJD
YWxsYmFjayhjb25zdCBIZWFwRmluYWxpemVyQ2FsbGJhY2smKTsKQEAgLTQwNyw2ICs0MDQsOCBA
QCBwdWJsaWM6CiAKICAgICBIYXNoTWFwPEpTSW1tdXRhYmxlQnV0dGVyZmx5KiwgSlNTdHJpbmcq
PiBpbW11dGFibGVCdXR0ZXJmbHlUb1N0cmluZ0NhY2hlOwogCisgICAgYm9vbCBpc01hcmtpbmdG
b3JHQ1ZlcmlmaWVyKCkgY29uc3QgeyByZXR1cm4gbV9pc01hcmtpbmdGb3JHQ1ZlcmlmaWVyOyB9
CisKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIEFsbG9jYXRpbmdTY29wZTsKICAgICBmcmll
bmQgY2xhc3MgQ29kZUJsb2NrOwpAQCAtNTc1LDExICs1NzQsMTEgQEAgcHJpdmF0ZToKIAogICAg
IGJvb2wgb3ZlckNyaXRpY2FsTWVtb3J5VGhyZXNob2xkKE1lbW9yeVRocmVzaG9sZENhbGxUeXBl
IG1lbW9yeVRocmVzaG9sZENhbGxUeXBlID0gTWVtb3J5VGhyZXNob2xkQ2FsbFR5cGU6OkNhY2hl
ZCk7CiAgICAgCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KLSAgICB2b2lkIGl0ZXJhdGVF
eGVjdXRpbmdBbmRDb21waWxpbmdDb2RlQmxvY2tzKGNvbnN0IEZ1bmMmKTsKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBGdW5jLCB0eXBlbmFtZSBWaXNpdG9yPgorICAgIHZvaWQgaXRlcmF0ZUV4ZWN1
dGluZ0FuZENvbXBpbGluZ0NvZGVCbG9ja3MoVmlzaXRvciYsIGNvbnN0IEZ1bmMmKTsKICAgICAK
LSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgotICAgIHZvaWQgaXRlcmF0ZUV4ZWN1dGluZ0Fu
ZENvbXBpbGluZ0NvZGVCbG9ja3NXaXRob3V0SG9sZGluZ0xvY2tzKGNvbnN0IEZ1bmMmKTsKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jLCB0eXBlbmFtZSBWaXNpdG9yPgorICAgIHZvaWQgaXRl
cmF0ZUV4ZWN1dGluZ0FuZENvbXBpbGluZ0NvZGVCbG9ja3NXaXRob3V0SG9sZGluZ0xvY2tzKFZp
c2l0b3ImLCBjb25zdCBGdW5jJik7CiAgICAgCiAgICAgdm9pZCBhc3NlcnRNYXJrU3RhY2tzRW1w
dHkoKTsKIApAQCAtNTkwLDYgKzU4OSw4IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIGJvb2wgdXNl
R2VuZXJhdGlvbmFsR0MoKTsKICAgICBzdGF0aWMgYm9vbCBzaG91bGRTd2VlcFN5bmNocm9ub3Vz
bHkoKTsKICAgICAKKyAgICB2b2lkIHZlcmlmeUdDKCk7CisKICAgICBjb25zdCBIZWFwVHlwZSBt
X2hlYXBUeXBlOwogICAgIE11dGF0b3JTdGF0ZSBtX211dGF0b3JTdGF0ZSB7IE11dGF0b3JTdGF0
ZTo6UnVubmluZyB9OwogICAgIGNvbnN0IHNpemVfdCBtX3JhbVNpemU7CkBAIC02MzYsNiArNjM3
LDcgQEAgcHJpdmF0ZToKICAgICBzdGQ6OnVuaXF1ZV9wdHI8TWFya1N0YWNrQXJyYXk+IG1fbXV0
YXRvck1hcmtTdGFjazsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8TWFya1N0YWNrQXJyYXk+IG1fcmFj
ZU1hcmtTdGFjazsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8TWFya2luZ0NvbnN0cmFpbnRTZXQ+IG1f
Y29uc3RyYWludFNldDsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8VmVyaWZpZXJTbG90VmlzaXRvcj4g
bV92ZXJpZmllclNsb3RWaXNpdG9yOwogCiAgICAgLy8gV2UgcG9vbCB0aGUgc2xvdCB2aXNpdG9y
cyB1c2VkIGJ5IHBhcmFsbGVsIG1hcmtpbmcgdGhyZWFkcy4gSXQncyB1c2VmdWwgdG8gYmUgYWJs
ZSB0bwogICAgIC8vIGVudW1lcmF0ZSBvdmVyIHRoZW0sIGFuZCBpdCdzIHVzZWZ1bCB0byBoYXZl
IHRoZW0gY2FjaGUgc29tZSBzbWFsbCBhbW91bnQgb2YgbWVtb3J5IGZyb20KQEAgLTY1NCw2ICs2
NTYsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9pc1NhZmVUb0NvbGxlY3QgeyBmYWxzZSB9Owog
ICAgIGJvb2wgbV9pc1NodXR0aW5nRG93biB7IGZhbHNlIH07CiAgICAgYm9vbCBtX211dGF0b3JT
aG91bGRCZUZlbmNlZCB7IE9wdGlvbnM6OmZvcmNlRmVuY2VkQmFycmllcigpIH07CisgICAgYm9v
bCBtX2lzTWFya2luZ0ZvckdDVmVyaWZpZXIgeyBmYWxzZSB9OwogCiAgICAgdW5zaWduZWQgbV9i
YXJyaWVyVGhyZXNob2xkIHsgT3B0aW9uczo6Zm9yY2VGZW5jZWRCYXJyaWVyKCkgPyB0YXV0b2xv
Z2ljYWxUaHJlc2hvbGQgOiBibGFja1RocmVzaG9sZCB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9IZWFwSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0hlYXBJbmxpbmVzLmgJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTY5LDYg
KzY5LDcgQEAgaW5saW5lIGJvb2wgSGVhcDo6d29ybGRJc1N0b3BwZWQoKSBjb25zdAogCiBBTFdB
WVNfSU5MSU5FIGJvb2wgSGVhcDo6aXNNYXJrZWQoY29uc3Qgdm9pZCogcmF3Q2VsbCkKIHsKKyAg
ICBBU1NFUlQoIW1faXNNYXJraW5nRm9yR0NWZXJpZmllcik7CiAgICAgSGVhcENlbGwqIGNlbGwg
PSBiaXR3aXNlX2Nhc3Q8SGVhcENlbGwqPihyYXdDZWxsKTsKICAgICBpZiAoY2VsbC0+aXNQcmVj
aXNlQWxsb2NhdGlvbigpKQogICAgICAgICByZXR1cm4gY2VsbC0+cHJlY2lzZUFsbG9jYXRpb24o
KS5pc01hcmtlZCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcFByb2Zp
bGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwUHJv
ZmlsZXIuY3BwCShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9IZWFwUHJvZmlsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTYwLDYgKzYwLDcgQEAgdm9pZCBIZWFw
UHJvZmlsZXI6OnNldEFjdGl2ZUhlYXBBbmFseXplcgogewogICAgIEFTU0VSVCghIW1fYWN0aXZl
QW5hbHl6ZXIgIT0gISFhbmFseXplcik7CiAgICAgbV9hY3RpdmVBbmFseXplciA9IGFuYWx5emVy
OworICAgIG1fdm0uc2V0QWN0aXZlSGVhcEFuYWx5emVyKGFuYWx5emVyKTsKIH0KIAogfSAvLyBu
YW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Jc29DZWxsU2V0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvQ2VsbFNldC5o
CShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Jc29DZWxs
U2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtNTgsOCArNTgsOCBAQCBwdWJsaWM6CiAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgRnVuYz4KICAgICB2b2lkIGZvckVhY2hNYXJrZWRDZWxsKGNvbnN0IEZ1bmMmKTsK
IAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+Ci0gICAgUmVmPFNoYXJlZFRhc2s8dm9pZChT
bG90VmlzaXRvciYpPj4gZm9yRWFjaE1hcmtlZENlbGxJblBhcmFsbGVsKGNvbnN0IEZ1bmMmKTsK
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yLCB0eXBlbmFtZSBGdW5jPgorICAgIFJlZjxT
aGFyZWRUYXNrPHZvaWQoVmlzaXRvciYpPj4gZm9yRWFjaE1hcmtlZENlbGxJblBhcmFsbGVsKGNv
bnN0IEZ1bmMmKTsKICAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgogICAgIHZvaWQg
Zm9yRWFjaExpdmVDZWxsKGNvbnN0IEZ1bmMmKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0lzb0NlbGxTZXRJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvSXNvQ2VsbFNldElubGluZXMuaAkocmV2aXNpb24gMjczMTE5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvQ2VsbFNldElubGluZXMuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC05MSwxMCArOTEsMTAgQEAgdm9pZCBJc29DZWxsU2V0Ojpmb3JFYWNoTWFya2VkQ2VsbChjb25z
dAogICAgICAgICB9KTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KLVJlZjxTaGFyZWRU
YXNrPHZvaWQoU2xvdFZpc2l0b3ImKT4+IElzb0NlbGxTZXQ6OmZvckVhY2hNYXJrZWRDZWxsSW5Q
YXJhbGxlbChjb25zdCBGdW5jJiBmdW5jKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvciwgdHlw
ZW5hbWUgRnVuYz4KK1JlZjxTaGFyZWRUYXNrPHZvaWQoVmlzaXRvciYpPj4gSXNvQ2VsbFNldDo6
Zm9yRWFjaE1hcmtlZENlbGxJblBhcmFsbGVsKGNvbnN0IEZ1bmMmIGZ1bmMpCiB7Ci0gICAgY2xh
c3MgVGFzayBmaW5hbCA6IHB1YmxpYyBTaGFyZWRUYXNrPHZvaWQoU2xvdFZpc2l0b3ImKT4gewor
ICAgIGNsYXNzIFRhc2sgZmluYWwgOiBwdWJsaWMgU2hhcmVkVGFzazx2b2lkKFZpc2l0b3ImKT4g
ewogICAgIHB1YmxpYzoKICAgICAgICAgVGFzayhJc29DZWxsU2V0JiBzZXQsIGNvbnN0IEZ1bmMm
IGZ1bmMpCiAgICAgICAgICAgICA6IG1fc2V0KHNldCkKQEAgLTEwMyw3ICsxMDMsNyBAQCBSZWY8
U2hhcmVkVGFzazx2b2lkKFNsb3RWaXNpdG9yJik+PiBJc29DCiAgICAgICAgIHsKICAgICAgICAg
fQogICAgICAgICAKLSAgICAgICAgdm9pZCBydW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpIGZpbmFs
CisgICAgICAgIHZvaWQgcnVuKFZpc2l0b3ImIHZpc2l0b3IpIGZpbmFsCiAgICAgICAgIHsKICAg
ICAgICAgICAgIHdoaWxlIChNYXJrZWRCbG9jazo6SGFuZGxlKiBoYW5kbGUgPSBtX2Jsb2NrU291
cmNlLT5ydW4oKSkgewogICAgICAgICAgICAgICAgIHVuc2lnbmVkIGJsb2NrSW5kZXggPSBoYW5k
bGUtPmluZGV4KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9KSVRTdHViUm91
dGluZVNldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSklU
U3R1YlJvdXRpbmVTZXQuY3BwCShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9KSVRTdHViUm91dGluZVNldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTI4LDcgKzEy
OCw4IEBAIHZvaWQgSklUU3R1YlJvdXRpbmVTZXQ6OmRlbGV0ZVVubWFya2VkSmUKICAgICBtX3Jv
dXRpbmVzLnNocmluayhkc3RJbmRleCk7CiB9CiAKLXZvaWQgSklUU3R1YlJvdXRpbmVTZXQ6OnRy
YWNlTWFya2VkU3R1YlJvdXRpbmVzKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlw
ZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSklUU3R1YlJvdXRpbmVTZXQ6OnRyYWNlTWFya2VkU3R1YlJv
dXRpbmVzKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgZm9yIChhdXRvJiBlbnRyeSA6IG1fcm91
dGluZXMpIHsKICAgICAgICAgR0NBd2FyZUpJVFN0dWJSb3V0aW5lKiByb3V0aW5lID0gZW50cnku
cm91dGluZTsKQEAgLTEzOSw2ICsxNDAsOSBAQCB2b2lkIEpJVFN0dWJSb3V0aW5lU2V0Ojp0cmFj
ZU1hcmtlZFN0dWJSCiAgICAgfQogfQogCit0ZW1wbGF0ZSB2b2lkIEpJVFN0dWJSb3V0aW5lU2V0
Ojp0cmFjZU1hcmtlZFN0dWJSb3V0aW5lcyhBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0
ZSB2b2lkIEpJVFN0dWJSb3V0aW5lU2V0Ojp0cmFjZU1hcmtlZFN0dWJSb3V0aW5lcyhTbG90Vmlz
aXRvciYpOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIEVOQUJMRShKSVQpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9KSVRTdHViUm91dGluZVNldC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0pJVFN0dWJSb3V0aW5lU2V0LmgJ
KHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0pJVFN0dWJS
b3V0aW5lU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDEyLTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDEyLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNiw3ICszNiw2IEBAIHVzaW5nIFdURjo6
UmFuZ2U7CiBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgR0NBd2FyZUpJVFN0dWJSb3V0aW5lOwot
Y2xhc3MgU2xvdFZpc2l0b3I7CiAKICNpZiBFTkFCTEUoSklUKQogCkBAIC02Myw4ICs2Miw4IEBA
IHB1YmxpYzoKICAgICB2b2lkIHByZXBhcmVGb3JDb25zZXJ2YXRpdmVTY2FuKCk7CiAgICAgCiAg
ICAgdm9pZCBkZWxldGVVbm1hcmtlZEpldHRpc29uZWRTdHViUm91dGluZXMoKTsKLSAgICAKLSAg
ICB2b2lkIHRyYWNlTWFya2VkU3R1YlJvdXRpbmVzKFNsb3RWaXNpdG9yJik7CisKKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIHRyYWNlTWFya2VkU3R1YlJvdXRpbmVzKFZpc2l0
b3ImKTsKICAgICAKIHByaXZhdGU6CiAgICAgdm9pZCBtYXJrU2xvdyh1aW50cHRyX3QgYWRkcmVz
cyk7CkBAIC05Miw3ICs5MSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIG1hcmsodm9pZCopIHsgfQog
ICAgIHZvaWQgcHJlcGFyZUZvckNvbnNlcnZhdGl2ZVNjYW4oKSB7IH0KICAgICB2b2lkIGRlbGV0
ZVVubWFya2VkSmV0dGlzb25lZFN0dWJSb3V0aW5lcygpIHsgfQotICAgIHZvaWQgdHJhY2VNYXJr
ZWRTdHViUm91dGluZXMoU2xvdFZpc2l0b3ImKSB7IH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPiB2b2lkIHRyYWNlTWFya2VkU3R1YlJvdXRpbmVzKFZpc2l0b3ImKSB7IH0KIH07CiAK
ICNlbmRpZiAvLyAhRU5BQkxFKEpJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L01hcmtTdGFja01lcmdpbmdDb25zdHJhaW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9NYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludC5jcHAJKHJldmlzaW9u
IDI3MzExOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtTdGFja01lcmdpbmdD
b25zdHJhaW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00Niw3ICs0Niw3IEBAIGRvdWJsZSBNYXJrU3Rh
Y2tNZXJnaW5nQ29uc3RyYWludDo6cXVpY2sKICAgICByZXR1cm4gbV9oZWFwLm1fbXV0YXRvck1h
cmtTdGFjay0+c2l6ZSgpICsgbV9oZWFwLm1fcmFjZU1hcmtTdGFjay0+c2l6ZSgpOwogfQogCi12
b2lkIE1hcmtTdGFja01lcmdpbmdDb25zdHJhaW50OjpwcmVwYXJlVG9FeGVjdXRlSW1wbChjb25z
dCBBYnN0cmFjdExvY2tlciYsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBNYXJrU3RhY2tN
ZXJnaW5nQ29uc3RyYWludDo6cHJlcGFyZVRvRXhlY3V0ZUltcGwoY29uc3QgQWJzdHJhY3RMb2Nr
ZXImLCBBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIC8vIExvZ2dpbmcgdGhl
IHdvcmsgaGVyZSBlbnN1cmVzIHRoYXQgdGhlIGNvbnN0cmFpbnQgc29sdmVyIGtub3dzIHRoYXQg
aXQgZG9lc24ndCBuZWVkIHRvIHByb2R1Y2UKICAgICAvLyBhbnltb3JlIHdvcmsuCkBAIC01Niwx
MSArNTYsMjQgQEAgdm9pZCBNYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludDo6cHJlcGFyZQogICAg
IGRhdGFMb2dJZihPcHRpb25zOjpsb2dHQygpLCAiKCIsIHNpemUsICIpIik7CiB9CiAKLXZvaWQg
TWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQ6OmV4ZWN1dGVJbXBsKFNsb3RWaXNpdG9yJiB2aXNp
dG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgTWFya1N0YWNrTWVyZ2luZ0Nv
bnN0cmFpbnQ6OmV4ZWN1dGVJbXBsSW1wbChWaXNpdG9yJiB2aXNpdG9yKQogeworICAgIC8vIFdl
IHdhbnQgdG8gc2tpcCB0aGlzIGNvbnN0cmFpbnQgZm9yIHRoZSBHQyB2ZXJpZmllciBiZWNhdXNl
OgorICAgIC8vIDEuIFRoZXJlIHNob3VsZCBiZSBubyBtdXRhdG9yIG1hcmtpbmcgYWN0aW9uIGJl
dHdlZW4gdGhlIEVuZCBwaGFzZSBhbmQgdmVyaWZ5R0MoKS4KKyAgICAvLyAgICBIZW5jZSwgd2Ug
Y2FuIGlnbm9yZSB0aHNlIHN0YWNrcy4KKyAgICAvLyAyLiBUaGUgRW5kIHBoYXNlIGV4cGxpY3Rs
eSBjYWxscyBpdGVyYXRlRXhlY3V0aW5nQW5kQ29tcGlsaW5nQ29kZUJsb2NrcygpCisgICAgLy8g
ICAgdG8gYWRkIGV4ZWN1dGluZyBDb2RlQmxvY2tzIHRvIG1faGVhcC5tX211dGF0b3JNYXJrU3Rh
Y2suIFdlIHdhbnQgdG8KKyAgICAvLyAgICBsZWF2ZSB0aG9zZSB1bnBlcnR1cmJlZC4KKyAgICBp
ZiAobV9oZWFwLm1faXNNYXJraW5nRm9yR0NWZXJpZmllcikKKyAgICAgICAgcmV0dXJuOworCiAg
ICAgbV9oZWFwLm1fbXV0YXRvck1hcmtTdGFjay0+dHJhbnNmZXJUbyh2aXNpdG9yLm11dGF0b3JN
YXJrU3RhY2soKSk7CiAgICAgbV9oZWFwLm1fcmFjZU1hcmtTdGFjay0+dHJhbnNmZXJUbyh2aXNp
dG9yLm11dGF0b3JNYXJrU3RhY2soKSk7CiB9CiAKK3ZvaWQgTWFya1N0YWNrTWVyZ2luZ0NvbnN0
cmFpbnQ6OmV4ZWN1dGVJbXBsKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsgZXhlY3V0
ZUltcGxJbXBsKHZpc2l0b3IpOyB9Cit2b2lkIE1hcmtTdGFja01lcmdpbmdDb25zdHJhaW50Ojpl
eGVjdXRlSW1wbChTbG90VmlzaXRvciYgdmlzaXRvcikgeyBleGVjdXRlSW1wbEltcGwodmlzaXRv
cik7IH0KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL01hcmtTdGFja01lcmdpbmdDb25zdHJhaW50LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQuaAkocmV2aXNp
b24gMjczMTE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya1N0YWNrTWVyZ2lu
Z0NvbnN0cmFpbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogbmFtZXNwYWNl
IEpTQyB7CiAKIGNsYXNzIEhlYXA7CitjbGFzcyBBYnN0cmFjdFNsb3RWaXNpdG9yOwogY2xhc3Mg
U2xvdFZpc2l0b3I7CiAKIGNsYXNzIE1hcmtTdGFja01lcmdpbmdDb25zdHJhaW50IGZpbmFsIDog
cHVibGljIE1hcmtpbmdDb25zdHJhaW50IHsKQEAgLTQwLDcgKzQxLDkgQEAgcHVibGljOgogICAg
IGRvdWJsZSBxdWlja1dvcmtFc3RpbWF0ZShTbG90VmlzaXRvciYpIGZpbmFsOwogICAgIAogcHJp
dmF0ZToKLSAgICB2b2lkIHByZXBhcmVUb0V4ZWN1dGVJbXBsKGNvbnN0IEFic3RyYWN0TG9ja2Vy
JiBjb25zdHJhaW50U29sdmluZ0xvY2tlciwgU2xvdFZpc2l0b3ImKSBmaW5hbDsKKyAgICB2b2lk
IHByZXBhcmVUb0V4ZWN1dGVJbXBsKGNvbnN0IEFic3RyYWN0TG9ja2VyJiBjb25zdHJhaW50U29s
dmluZ0xvY2tlciwgQWJzdHJhY3RTbG90VmlzaXRvciYpIGZpbmFsOworICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFZpc2l0b3I+IEFMV0FZU19JTkxJTkUgdm9pZCBleGVjdXRlSW1wbEltcGwoVmlzaXRv
ciYpOworICAgIHZvaWQgZXhlY3V0ZUltcGwoQWJzdHJhY3RTbG90VmlzaXRvciYpIGZpbmFsOwog
ICAgIHZvaWQgZXhlY3V0ZUltcGwoU2xvdFZpc2l0b3ImKSBmaW5hbDsKICAgICAKICAgICBIZWFw
JiBtX2hlYXA7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmgJ
KHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJs
b2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTIwMCw2ICsyMDAsNyBAQCBwdWJsaWM6CiAgICAgICAg
IAogICAgICAgICB2b2lkKiBzdGFydCgpIGNvbnN0IHsgcmV0dXJuICZtX2Jsb2NrLT5hdG9tcygp
WzBdOyB9CiAgICAgICAgIHZvaWQqIGVuZCgpIGNvbnN0IHsgcmV0dXJuICZtX2Jsb2NrLT5hdG9t
cygpW21fZW5kQXRvbV07IH0KKyAgICAgICAgdm9pZCogYXRvbUF0KHNpemVfdCBpKSBjb25zdCB7
IHJldHVybiAmbV9ibG9jay0+YXRvbXMoKVtpXTsgfQogICAgICAgICBib29sIGNvbnRhaW5zKHZv
aWQqIHApIGNvbnN0IHsgcmV0dXJuIHN0YXJ0KCkgPD0gcCAmJiBwIDwgZW5kKCk7IH0KIAogICAg
ICAgICB2b2lkIGR1bXBTdGF0ZShQcmludFN0cmVhbSYpOwpAQCAtMjk1LDkgKzI5NiwxMCBAQCBw
dWJsaWM6CiAKICAgICAgICAgQml0bWFwPGF0b21zUGVyQmxvY2s+IG1fbWFya3M7CiAgICAgICAg
IEJpdG1hcDxhdG9tc1BlckJsb2NrPiBtX25ld2x5QWxsb2NhdGVkOworICAgICAgICB2b2lkKiBt
X3ZlcmlmaWVyTWVtbyB7IG51bGxwdHIgfTsKICAgICB9OwogICAgIAotcHJpdmF0ZTogICAgCitw
cml2YXRlOgogICAgIEZvb3RlciYgZm9vdGVyKCk7CiAgICAgY29uc3QgRm9vdGVyJiBmb290ZXIo
KSBjb25zdDsKIApAQCAtMzg0LDcgKzM4NiwxMSBAQCBwdWJsaWM6CiAgICAgICAgICpiaXR3aXNl
X2Nhc3Q8dm9sYXRpbGUgdWludDhfdCo+KCZmb290ZXIoKSk7CiAgICAgfQogICAgIAorICAgIHZv
aWQgc2V0VmVyaWZpZXJNZW1vKHZvaWQqKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBUIHZl
cmlmaWVyTWVtbygpIGNvbnN0OworCiAgICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3Qgb2Zmc2V0
T2ZGb290ZXIgPSBlbmRBdG9tICogYXRvbVNpemU7CisgICAgc3RhdGljX2Fzc2VydChvZmZzZXRP
ZkZvb3RlciArIHNpemVvZihGb290ZXIpIDw9IGJsb2NrU2l6ZSk7CiAKIHByaXZhdGU6CiAgICAg
TWFya2VkQmxvY2soVk0mLCBIYW5kbGUmKTsKQEAgLTY2MCw2ICs2NjYsMTcgQEAgaW5saW5lIHZv
aWQgTWFya2VkQmxvY2s6Om5vdGVNYXJrZWQoKQogICAgICAgICBub3RlTWFya2VkU2xvdygpOwog
fQogCitpbmxpbmUgdm9pZCBNYXJrZWRCbG9jazo6c2V0VmVyaWZpZXJNZW1vKHZvaWQqIHApCit7
CisgICAgZm9vdGVyKCkubV92ZXJpZmllck1lbW8gPSBwOworfQorCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPgorVCBNYXJrZWRCbG9jazo6dmVyaWZpZXJNZW1vKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
Yml0d2lzZV9jYXN0PFQ+KGZvb3RlcigpLm1fdmVyaWZpZXJNZW1vKTsKK30KKwogfSAvLyBuYW1l
c3BhY2UgSlNDCiAKIG5hbWVzcGFjZSBXVEYgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvTWFya2VkU3BhY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL01hcmtlZFNwYWNlLmNwcAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvTWFya2VkU3BhY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNzIsNyAr
MjcyLDggQEAgdm9pZCBNYXJrZWRTcGFjZTo6ZW5hYmxlUHJlY2lzZUFsbG9jYXRpbwogICAgICAg
ICBtX3ByZWNpc2VBbGxvY2F0aW9uU2V0LT5hZGQoYWxsb2NhdGlvbi0+Y2VsbCgpKTsKIH0KIAot
dm9pZCBNYXJrZWRTcGFjZTo6dmlzaXRXZWFrU2V0cyhTbG90VmlzaXRvciYgdmlzaXRvcikKK3Rl
bXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIE1hcmtlZFNwYWNlOjp2aXNpdFdlYWtTZXRz
KFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0byB2aXNpdCA9IFsmXSAoV2Vha1NldCogd2Vh
a1NldCkgewogICAgICAgICB3ZWFrU2V0LT52aXNpdCh2aXNpdG9yKTsKQEAgLTI4NCw2ICsyODUs
OSBAQCB2b2lkIE1hcmtlZFNwYWNlOjp2aXNpdFdlYWtTZXRzKFNsb3RWaXNpCiAgICAgICAgIG1f
YWN0aXZlV2Vha1NldHMuZm9yRWFjaCh2aXNpdCk7CiB9CiAKK3RlbXBsYXRlIHZvaWQgTWFya2Vk
U3BhY2U6OnZpc2l0V2Vha1NldHMoQWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9p
ZCBNYXJrZWRTcGFjZTo6dmlzaXRXZWFrU2V0cyhTbG90VmlzaXRvciYpOworCiB2b2lkIE1hcmtl
ZFNwYWNlOjpyZWFwV2Vha1NldHMoKQogewogICAgIGF1dG8gdmlzaXQgPSBbJl0gKFdlYWtTZXQq
IHdlYWtTZXQpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZFNwYWNl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkU3BhY2Uu
aAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2Vk
U3BhY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiAgQ29weXJpZ2h0
IChDKSAxOTk5LTIwMDAgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKICAqICBDb3B5cmln
aHQgKEMpIDIwMDEgUGV0ZXIgS2VsbHkgKHBta0Bwb3N0LmNvbSkKLSAqICBDb3B5cmlnaHQgKEMp
IDIwMDMtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0
IChDKSAyMDAzLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5l
cmFsIFB1YmxpYwpAQCAtMTA1LDcgKzEwNSw3IEBAIHB1YmxpYzoKICAgICAKICAgICB2b2lkIHBy
ZXBhcmVGb3JBbGxvY2F0aW9uKCk7CiAKLSAgICB2b2lkIHZpc2l0V2Vha1NldHMoU2xvdFZpc2l0
b3ImKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIHZpc2l0V2Vha1NldHMo
VmlzaXRvciYpOwogICAgIHZvaWQgcmVhcFdlYWtTZXRzKCk7CiAKICAgICBNYXJrZWRCbG9ja1Nl
dCYgYmxvY2tzKCkgeyByZXR1cm4gbV9ibG9ja3M7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludC5jcHAJKHJldmlzaW9uIDI3MzExOSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC01Myw2ICs1Myw3IEBAIHZvaWQgTWFya2luZ0NvbnN0cmFpbnQ6OnJlc2V0U3Rh
dHMoKQogCiB2b2lkIE1hcmtpbmdDb25zdHJhaW50OjpleGVjdXRlKFNsb3RWaXNpdG9yJiB2aXNp
dG9yKQogeworICAgIEFTU0VSVCghdmlzaXRvci5oZWFwKCktPmlzTWFya2luZ0ZvckdDVmVyaWZp
ZXIoKSk7CiAgICAgVmlzaXRDb3VudGVyIHZpc2l0Q291bnRlcih2aXNpdG9yKTsKICAgICBleGVj
dXRlSW1wbCh2aXNpdG9yKTsKICAgICBtX2xhc3RWaXNpdENvdW50ICs9IHZpc2l0Q291bnRlci52
aXNpdENvdW50KCk7CkBAIC02MCw2ICs2MSwxMiBAQCB2b2lkIE1hcmtpbmdDb25zdHJhaW50Ojpl
eGVjdXRlKFNsb3RWaXNpCiAgICAgICAgIGRhdGFMb2coIigiLCBhYmJyZXZpYXRlZE5hbWUoKSwg
IiB2aXNpdGVkICIsIHZpc2l0Q291bnRlci52aXNpdENvdW50KCksICIgaW4gZXhlY3V0ZSkiKTsK
IH0KIAordm9pZCBNYXJraW5nQ29uc3RyYWludDo6ZXhlY3V0ZVN5bmNocm9ub3VzbHkoQWJzdHJh
Y3RTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBwcmVwYXJlVG9FeGVjdXRlSW1wbChOb0xv
Y2tpbmdOZWNlc3NhcnksIHZpc2l0b3IpOworICAgIGV4ZWN1dGVJbXBsKHZpc2l0b3IpOworfQor
CiBkb3VibGUgTWFya2luZ0NvbnN0cmFpbnQ6OnF1aWNrV29ya0VzdGltYXRlKFNsb3RWaXNpdG9y
JikKIHsKICAgICByZXR1cm4gMDsKQEAgLTcyLDYgKzc5LDcgQEAgZG91YmxlIE1hcmtpbmdDb25z
dHJhaW50Ojp3b3JrRXN0aW1hdGUoUwogCiB2b2lkIE1hcmtpbmdDb25zdHJhaW50OjpwcmVwYXJl
VG9FeGVjdXRlKGNvbnN0IEFic3RyYWN0TG9ja2VyJiBjb25zdHJhaW50U29sdmluZ0xvY2tlciwg
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CisgICAgQVNTRVJUKCF2aXNpdG9yLmhlYXAoKS0+aXNN
YXJraW5nRm9yR0NWZXJpZmllcigpKTsKICAgICBkYXRhTG9nSWYoT3B0aW9uczo6bG9nR0MoKSwg
YWJicmV2aWF0ZWROYW1lKCkpOwogICAgIFZpc2l0Q291bnRlciB2aXNpdENvdW50ZXIodmlzaXRv
cik7CiAgICAgcHJlcGFyZVRvRXhlY3V0ZUltcGwoY29uc3RyYWludFNvbHZpbmdMb2NrZXIsIHZp
c2l0b3IpOwpAQCAtODIsNiArOTAsNyBAQCB2b2lkIE1hcmtpbmdDb25zdHJhaW50OjpwcmVwYXJl
VG9FeGVjdXRlCiAKIHZvaWQgTWFya2luZ0NvbnN0cmFpbnQ6OmRvUGFyYWxsZWxXb3JrKFNsb3RW
aXNpdG9yJiB2aXNpdG9yLCBTaGFyZWRUYXNrPHZvaWQoU2xvdFZpc2l0b3ImKT4mIHRhc2spCiB7
CisgICAgQVNTRVJUKCF2aXNpdG9yLmhlYXAoKS0+aXNNYXJraW5nRm9yR0NWZXJpZmllcigpKTsK
ICAgICBWaXNpdENvdW50ZXIgdmlzaXRDb3VudGVyKHZpc2l0b3IpOwogICAgIHRhc2sucnVuKHZp
c2l0b3IpOwogICAgIGlmICh2ZXJib3NlTWFya2luZ0NvbnN0cmFpbnQgJiYgdmlzaXRDb3VudGVy
LnZpc2l0Q291bnQoKSkKQEAgLTkyLDcgKzEwMSw3IEBAIHZvaWQgTWFya2luZ0NvbnN0cmFpbnQ6
OmRvUGFyYWxsZWxXb3JrKFMKICAgICB9CiB9CiAKLXZvaWQgTWFya2luZ0NvbnN0cmFpbnQ6OnBy
ZXBhcmVUb0V4ZWN1dGVJbXBsKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgU2xvdFZpc2l0b3ImKQor
dm9pZCBNYXJraW5nQ29uc3RyYWludDo6cHJlcGFyZVRvRXhlY3V0ZUltcGwoY29uc3QgQWJzdHJh
Y3RMb2NrZXImLCBBYnN0cmFjdFNsb3RWaXNpdG9yJikKIHsKIH0KIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludC5oCShyZXZpc2lvbiAyNzMx
MTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTM4LDYgKzM4LDcgQEAKIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBNYXJr
aW5nQ29uc3RyYWludFNldDsKK2NsYXNzIEFic3RyYWN0U2xvdFZpc2l0b3I7CiBjbGFzcyBTbG90
VmlzaXRvcjsKIAogY2xhc3MgTWFya2luZ0NvbnN0cmFpbnQgewpAQCAtNjAsMTEgKzYxLDEzIEBA
IHB1YmxpYzoKICAgICAKICAgICBzaXplX3QgbGFzdFZpc2l0Q291bnQoKSBjb25zdCB7IHJldHVy
biBtX2xhc3RWaXNpdENvdW50OyB9CiAgICAgCisgICAgLy8gVGhlIGZvbGxvd2luZyBmdW5jdGlv
bnMgYXJlIG9ubHkgdXNlZCBieSB0aGUgcmVhbCBHQyB2aWEgdGhlIE1hcmtpbmdDb25zdHJhaW50
U29sdmVyLgorICAgIC8vIEhlbmNlLCB3ZSBvbmx5IG5lZWQgdGhlIFNsb3RWaXNpdG9yIHZlcnNp
b24uCiAgICAgdm9pZCBleGVjdXRlKFNsb3RWaXNpdG9yJik7CisKKyAgICBKU19FWFBPUlRfUFJJ
VkFURSB2aXJ0dWFsIGRvdWJsZSBxdWlja1dvcmtFc3RpbWF0ZShTbG90VmlzaXRvciYpOwogICAg
IAotICAgIEpTX0VYUE9SVF9QUklWQVRFIHZpcnR1YWwgZG91YmxlIHF1aWNrV29ya0VzdGltYXRl
KFNsb3RWaXNpdG9yJiB2aXNpdG9yKTsKLSAgICAKLSAgICBkb3VibGUgd29ya0VzdGltYXRlKFNs
b3RWaXNpdG9yJiB2aXNpdG9yKTsKKyAgICBkb3VibGUgd29ya0VzdGltYXRlKFNsb3RWaXNpdG9y
Jik7CiAgICAgCiAgICAgdm9pZCBwcmVwYXJlVG9FeGVjdXRlKGNvbnN0IEFic3RyYWN0TG9ja2Vy
JiBjb25zdHJhaW50U29sdmluZ0xvY2tlciwgU2xvdFZpc2l0b3ImKTsKICAgICAKQEAgLTc2LDkg
Kzc5LDE0IEBAIHB1YmxpYzoKICAgICBDb25zdHJhaW50UGFyYWxsZWxpc20gcGFyYWxsZWxpc20o
KSBjb25zdCB7IHJldHVybiBtX3BhcmFsbGVsaXNtOyB9CiAKIHByb3RlY3RlZDoKKyAgICB2aXJ0
dWFsIHZvaWQgZXhlY3V0ZUltcGwoQWJzdHJhY3RTbG90VmlzaXRvciYpID0gMDsKICAgICB2aXJ0
dWFsIHZvaWQgZXhlY3V0ZUltcGwoU2xvdFZpc2l0b3ImKSA9IDA7Ci0gICAgSlNfRVhQT1JUX1BS
SVZBVEUgdmlydHVhbCB2b2lkIHByZXBhcmVUb0V4ZWN1dGVJbXBsKGNvbnN0IEFic3RyYWN0TG9j
a2VyJiBjb25zdHJhaW50U29sdmluZ0xvY2tlciwgU2xvdFZpc2l0b3ImKTsKLSAgICAKKyAgICBK
U19FWFBPUlRfUFJJVkFURSB2aXJ0dWFsIHZvaWQgcHJlcGFyZVRvRXhlY3V0ZUltcGwoY29uc3Qg
QWJzdHJhY3RMb2NrZXImIGNvbnN0cmFpbnRTb2x2aW5nTG9ja2VyLCBBYnN0cmFjdFNsb3RWaXNp
dG9yJik7CisKKyAgICAvLyBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgdXNlZCBieSB0aGUgdmVyaWZp
ZXIgR0MgdmlhIEhlYXA6OnZlcmlmeUdDKCkuCisgICAgLy8gSGVuY2UsIHdlIG9ubHkgbmVlZCB0
aGUgQWJzdHJhY3RTbG90VmlzaXRvciB2ZXJzaW9uLgorICAgIHZvaWQgZXhlY3V0ZVN5bmNocm9u
b3VzbHkoQWJzdHJhY3RTbG90VmlzaXRvciYpOworCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFz
cyBNYXJraW5nQ29uc3RyYWludFNldDsgLy8gU28gaXQgY2FuIHNldCBtX2luZGV4LgogICAgIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnRFeGVjdXRv
clBhaXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5n
Q29uc3RyYWludEV4ZWN1dG9yUGFpci5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50RXhlY3V0b3JQYWlyLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVk
ZSA8d3RmL0Z1bmN0aW9uLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBBYnN0cmFjdFNs
b3RWaXNpdG9yOworY2xhc3MgU2xvdFZpc2l0b3I7CisKK3N0cnVjdCBNYXJraW5nQ29uc3RyYWlu
dEV4ZWN1dG9yUGFpciB7CisgICAgTWFya2luZ0NvbnN0cmFpbnRFeGVjdXRvclBhaXIoCisgICAg
ICAgIDo6RnVuY3Rpb248dm9pZChBYnN0cmFjdFNsb3RWaXNpdG9yJik+IGFic3RyYWN0U2xvdFZp
c2l0b3JGdW5jLAorICAgICAgICA6OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3ImKT4gc2xvdFZp
c2l0b3JGdW5jKQorICAgICAgICA6IGFic3RyYWN0U2xvdFZpc2l0b3JGdW5jKFdURk1vdmUoYWJz
dHJhY3RTbG90VmlzaXRvckZ1bmMpKQorICAgICAgICAsIHNsb3RWaXNpdG9yRnVuYyhXVEZNb3Zl
KHNsb3RWaXNpdG9yRnVuYykpCisgICAgeyB9CisgICAgTWFya2luZ0NvbnN0cmFpbnRFeGVjdXRv
clBhaXIoTWFya2luZ0NvbnN0cmFpbnRFeGVjdXRvclBhaXImJikgPSBkZWZhdWx0OworCisgICAg
dm9pZCBleGVjdXRlKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsgYWJzdHJhY3RTbG90
VmlzaXRvckZ1bmModmlzaXRvcik7IH0KKyAgICB2b2lkIGV4ZWN1dGUoU2xvdFZpc2l0b3ImIHZp
c2l0b3IpIHsgc2xvdFZpc2l0b3JGdW5jKHZpc2l0b3IpOyB9CisKKyAgICA6OkZ1bmN0aW9uPHZv
aWQoQWJzdHJhY3RTbG90VmlzaXRvciYpPiBhYnN0cmFjdFNsb3RWaXNpdG9yRnVuYzsKKyAgICA6
OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3ImKT4gc2xvdFZpc2l0b3JGdW5jOworfTsKKworI2Rl
ZmluZSBNQUtFX01BUktJTkdfQ09OU1RSQUlOVF9FWEVDVVRPUl9QQUlSKGxhbWJkYSkgXAorICAg
IE1hcmtpbmdDb25zdHJhaW50RXhlY3V0b3JQYWlyKChsYW1iZGEpLCAobGFtYmRhKSkKKworfSAv
LyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5n
Q29uc3RyYWludFNldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvTWFya2luZ0NvbnN0cmFpbnRTZXQuY3BwCShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludFNldC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIxIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtNjMsOSArNjMsOSBAQCB2b2lkIE1hcmtpbmdDb25zdHJhaW50U2V0OjpkaWRTdGFydE1hcmtp
CiAgICAgbV9pdGVyYXRpb24gPSAxOwogfQogCi12b2lkIE1hcmtpbmdDb25zdHJhaW50U2V0Ojph
ZGQoQ1N0cmluZyBhYmJyZXZpYXRlZE5hbWUsIENTdHJpbmcgbmFtZSwgOjpGdW5jdGlvbjx2b2lk
KFNsb3RWaXNpdG9yJik+IGZ1bmN0aW9uLCBDb25zdHJhaW50Vm9sYXRpbGl0eSB2b2xhdGlsaXR5
LCBDb25zdHJhaW50Q29uY3VycmVuY3kgY29uY3VycmVuY3ksIENvbnN0cmFpbnRQYXJhbGxlbGlz
bSBwYXJhbGxlbGlzbSkKK3ZvaWQgTWFya2luZ0NvbnN0cmFpbnRTZXQ6OmFkZChDU3RyaW5nIGFi
YnJldmlhdGVkTmFtZSwgQ1N0cmluZyBuYW1lLCBNYXJraW5nQ29uc3RyYWludEV4ZWN1dG9yUGFp
ciYmIGV4ZWN1dG9ycywgQ29uc3RyYWludFZvbGF0aWxpdHkgdm9sYXRpbGl0eSwgQ29uc3RyYWlu
dENvbmN1cnJlbmN5IGNvbmN1cnJlbmN5LCBDb25zdHJhaW50UGFyYWxsZWxpc20gcGFyYWxsZWxp
c20pCiB7Ci0gICAgYWRkKG1ha2VVbmlxdWU8U2ltcGxlTWFya2luZ0NvbnN0cmFpbnQ+KFdURk1v
dmUoYWJicmV2aWF0ZWROYW1lKSwgV1RGTW92ZShuYW1lKSwgV1RGTW92ZShmdW5jdGlvbiksIHZv
bGF0aWxpdHksIGNvbmN1cnJlbmN5LCBwYXJhbGxlbGlzbSkpOworICAgIGFkZChtYWtlVW5pcXVl
PFNpbXBsZU1hcmtpbmdDb25zdHJhaW50PihXVEZNb3ZlKGFiYnJldmlhdGVkTmFtZSksIFdURk1v
dmUobmFtZSksIFdURk1vdmUoZXhlY3V0b3JzKSwgdm9sYXRpbGl0eSwgY29uY3VycmVuY3ksIHBh
cmFsbGVsaXNtKSk7CiB9CiAKIHZvaWQgTWFya2luZ0NvbnN0cmFpbnRTZXQ6OmFkZCgKQEAgLTE2
NiwxMCArMTY2LDEwIEBAIGJvb2wgTWFya2luZ0NvbnN0cmFpbnRTZXQ6OmV4ZWN1dGVDb252ZXIK
ICAgICByZXR1cm4gIXNvbHZlci5kaWRWaXNpdFNvbWV0aGluZygpOwogfQogCi12b2lkIE1hcmtp
bmdDb25zdHJhaW50U2V0OjpleGVjdXRlQWxsKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBN
YXJraW5nQ29uc3RyYWludFNldDo6ZXhlY3V0ZUFsbFN5bmNocm9ub3VzbHkoQWJzdHJhY3RTbG90
VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBmb3IgKGF1dG8mIGNvbnN0cmFpbnQgOiBtX3NldCkK
LSAgICAgICAgY29uc3RyYWludC0+ZXhlY3V0ZSh2aXNpdG9yKTsKKyAgICAgICAgY29uc3RyYWlu
dC0+ZXhlY3V0ZVN5bmNocm9ub3VzbHkodmlzaXRvcik7CiAgICAgZGF0YUxvZ0lmKE9wdGlvbnM6
OmxvZ0dDKCksICIgIik7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01h
cmtpbmdDb25zdHJhaW50U2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvTWFya2luZ0NvbnN0cmFpbnRTZXQuaAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnRTZXQuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0yNiw2ICsyNiw3IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIk1hcmtpbmdDb25zdHJh
aW50LmgiCisjaW5jbHVkZSAiTWFya2luZ0NvbnN0cmFpbnRFeGVjdXRvclBhaXIuaCIKICNpbmNs
dWRlIDx3dGYvQml0VmVjdG9yLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCkBAIC00Niwy
MiArNDcsMjUgQEAgcHVibGljOgogICAgIHZvaWQgYWRkKAogICAgICAgICBDU3RyaW5nIGFiYnJl
dmlhdGVkTmFtZSwKICAgICAgICAgQ1N0cmluZyBuYW1lLAotICAgICAgICA6OkZ1bmN0aW9uPHZv
aWQoU2xvdFZpc2l0b3ImKT4sCisgICAgICAgIE1hcmtpbmdDb25zdHJhaW50RXhlY3V0b3JQYWly
JiYsCiAgICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5LAogICAgICAgICBDb25zdHJhaW50Q29u
Y3VycmVuY3kgPSBDb25zdHJhaW50Q29uY3VycmVuY3k6OkNvbmN1cnJlbnQsCiAgICAgICAgIENv
bnN0cmFpbnRQYXJhbGxlbGlzbSA9IENvbnN0cmFpbnRQYXJhbGxlbGlzbTo6U2VxdWVudGlhbCk7
CiAgICAgCiAgICAgdm9pZCBhZGQoCiAgICAgICAgIENTdHJpbmcgYWJicmV2aWF0ZWROYW1lLCBD
U3RyaW5nIG5hbWUsCi0gICAgICAgIDo6RnVuY3Rpb248dm9pZChTbG90VmlzaXRvciYpPiBmdW5j
LAorICAgICAgICBNYXJraW5nQ29uc3RyYWludEV4ZWN1dG9yUGFpciYmIGV4ZWN1dG9ycywKICAg
ICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHkgdm9sYXRpbGl0eSwKICAgICAgICAgQ29uc3RyYWlu
dFBhcmFsbGVsaXNtIHBhcmFsbGVsaXNtKQogICAgIHsKLSAgICAgICAgYWRkKGFiYnJldmlhdGVk
TmFtZSwgbmFtZSwgV1RGTW92ZShmdW5jKSwgdm9sYXRpbGl0eSwgQ29uc3RyYWludENvbmN1cnJl
bmN5OjpDb25jdXJyZW50LCBwYXJhbGxlbGlzbSk7CisgICAgICAgIGFkZChhYmJyZXZpYXRlZE5h
bWUsIG5hbWUsIFdURk1vdmUoZXhlY3V0b3JzKSwgdm9sYXRpbGl0eSwgQ29uc3RyYWludENvbmN1
cnJlbmN5OjpDb25jdXJyZW50LCBwYXJhbGxlbGlzbSk7CiAgICAgfQogICAgIAogICAgIHZvaWQg
YWRkKHN0ZDo6dW5pcXVlX3B0cjxNYXJraW5nQ29uc3RyYWludD4pOwotICAgIAorCisgICAgLy8g
VGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgYXJlIG9ubHkgdXNlZCBieSB0aGUgcmVhbCBHQyB2aWEg
dGhlIE1hcmtpbmdDb25zdHJhaW50U29sdmVyLgorICAgIC8vIEhlbmNlLCB3ZSBvbmx5IG5lZWQg
dGhlIFNsb3RWaXNpdG9yIHZlcnNpb24uCisKICAgICAvLyBBc3N1bWluZyB0aGF0IHRoZSBtYXJr
IHN0YWNrcyBhcmUgYWxsIGVtcHR5LCB0aGlzIHdpbGwgZ2l2ZSB5b3UgYSBndWVzcyBhcyB0byB3
aGV0aGVyIG9yCiAgICAgLy8gbm90IHRoZSB3YXZlZnJvbnQgaXMgYWR2YW5jaW5nLgogICAgIGJv
b2wgaXNXYXZlZnJvbnRBZHZhbmNpbmcoU2xvdFZpc2l0b3ImKTsKQEAgLTcwLDEzICs3NCwxNiBA
QCBwdWJsaWM6CiAgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoaXMgZXhlY3V0ZWQgYWxsIGNvbnN0
cmFpbnRzIGFuZCBub25lIG9mIHRoZW0gcHJvZHVjZWQgbmV3IHdvcmsuIFRoaXMKICAgICAvLyBh
c3N1bWVzIHRoYXQgeW91J3ZlIGFscmFlZHkgdmlzaXRlZCByb290cyBhbmQgZHJhaW5lZCBmcm9t
IHRoZXJlLgogICAgIGJvb2wgZXhlY3V0ZUNvbnZlcmdlbmNlKFNsb3RWaXNpdG9yJik7Ci0gICAg
CisKKyAgICAvLyBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgdXNlZCBieSB0aGUgdmVyaWZpZXIgR0Mg
dmlhIEhlYXA6OnZlcmlmeUdDKCkuCisgICAgLy8gSGVuY2UsIHdlIG9ubHkgbmVlZCB0aGUgQWJz
dHJhY3RTbG90VmlzaXRvciB2ZXJzaW9uLgorCiAgICAgLy8gU2ltcGx5IHJ1bnMgYWxsIGNvbnN0
cmFpbnRzIHdpdGhvdXQgYW55IHNoZW5hbmlnYW5zLgotICAgIHZvaWQgZXhlY3V0ZUFsbChTbG90
VmlzaXRvciYpOwotICAgIAorICAgIHZvaWQgZXhlY3V0ZUFsbFN5bmNocm9ub3VzbHkoQWJzdHJh
Y3RTbG90VmlzaXRvciYpOworCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBNYXJraW5nQ29u
c3RyYWludFNvbHZlcjsKLSAgICAKKwogICAgIGJvb2wgZXhlY3V0ZUNvbnZlcmdlbmNlSW1wbChT
bG90VmlzaXRvciYpOwogICAgIAogICAgIEhlYXAmIG1faGVhcDsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50U29sdmVyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludFNvbHZlci5jcHAJ
KHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdD
b25zdHJhaW50U29sdmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9NYXJraW5nQ29uc3RyYWludFNvbHZlci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50U29sdmVyLmgJKHJldmlzaW9uIDI3
MzExOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50U29s
dmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2ltcGxl
TWFya2luZ0NvbnN0cmFpbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL1NpbXBsZU1hcmtpbmdDb25zdHJhaW50LmNwcAkocmV2aXNpb24gMjczMTE5KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTMwLDExICszMCwxMSBAQCBuYW1lc3BhY2UgSlNDIHsKIAogU2ltcGxlTWFy
a2luZ0NvbnN0cmFpbnQ6OlNpbXBsZU1hcmtpbmdDb25zdHJhaW50KAogICAgIENTdHJpbmcgYWJi
cmV2aWF0ZWROYW1lLCBDU3RyaW5nIG5hbWUsCi0gICAgOjpGdW5jdGlvbjx2b2lkKFNsb3RWaXNp
dG9yJik+IGV4ZWN1dGVGdW5jdGlvbiwKKyAgICBNYXJraW5nQ29uc3RyYWludEV4ZWN1dG9yUGFp
ciYmIGV4ZWN1dG9ycywKICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eSB2b2xhdGlsaXR5LCBDb25z
dHJhaW50Q29uY3VycmVuY3kgY29uY3VycmVuY3ksCiAgICAgQ29uc3RyYWludFBhcmFsbGVsaXNt
IHBhcmFsbGVsaXNtKQogICAgIDogTWFya2luZ0NvbnN0cmFpbnQoV1RGTW92ZShhYmJyZXZpYXRl
ZE5hbWUpLCBXVEZNb3ZlKG5hbWUpLCB2b2xhdGlsaXR5LCBjb25jdXJyZW5jeSwgcGFyYWxsZWxp
c20pCi0gICAgLCBtX2V4ZWN1dGVGdW5jdGlvbihXVEZNb3ZlKGV4ZWN1dGVGdW5jdGlvbikpCisg
ICAgLCBtX2V4ZWN1dG9ycyhXVEZNb3ZlKGV4ZWN1dG9ycykpCiB7CiB9CiAKQEAgLTQyLDEwICs0
MiwxNCBAQCBTaW1wbGVNYXJraW5nQ29uc3RyYWludDo6flNpbXBsZU1hcmtpbmdDCiB7CiB9CiAK
LXZvaWQgU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQ6OmV4ZWN1dGVJbXBsKFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgU2ltcGxlTWFya2luZ0Nv
bnN0cmFpbnQ6OmV4ZWN1dGVJbXBsSW1wbChWaXNpdG9yJiB2aXNpdG9yKQogewotICAgIG1fZXhl
Y3V0ZUZ1bmN0aW9uKHZpc2l0b3IpOworICAgIG1fZXhlY3V0b3JzLmV4ZWN1dGUodmlzaXRvcik7
CiB9CiAKK3ZvaWQgU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQ6OmV4ZWN1dGVJbXBsKEFic3RyYWN0
U2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsgZXhlY3V0ZUltcGxJbXBsKHZpc2l0b3IpOyB9Cit2b2lk
IFNpbXBsZU1hcmtpbmdDb25zdHJhaW50OjpleGVjdXRlSW1wbChTbG90VmlzaXRvciYgdmlzaXRv
cikgeyBleGVjdXRlSW1wbEltcGwodmlzaXRvcik7IH0KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1NpbXBsZU1hcmtpbmdDb25zdHJhaW50
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2ltcGxlTWFya2lu
Z0NvbnN0cmFpbnQuaAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNiw3ICsyNiw3
IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIk1hcmtpbmdDb25zdHJhaW50LmgiCi0jaW5j
bHVkZSA8d3RmL0Z1bmN0aW9uLmg+CisjaW5jbHVkZSAiTWFya2luZ0NvbnN0cmFpbnRFeGVjdXRv
clBhaXIuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAgLTM3LDI2ICszNywyOCBAQCBjbGFzcyBT
aW1wbGVNYXJraW5nQ29uc3RyYWludCBmaW5hbCA6IHB1CiBwdWJsaWM6CiAgICAgSlNfRVhQT1JU
X1BSSVZBVEUgU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQoCiAgICAgICAgIENTdHJpbmcgYWJicmV2
aWF0ZWROYW1lLCBDU3RyaW5nIG5hbWUsCi0gICAgICAgIDo6RnVuY3Rpb248dm9pZChTbG90Vmlz
aXRvciYpPiwKKyAgICAgICAgTWFya2luZ0NvbnN0cmFpbnRFeGVjdXRvclBhaXImJiwKICAgICAg
ICAgQ29uc3RyYWludFZvbGF0aWxpdHksCiAgICAgICAgIENvbnN0cmFpbnRDb25jdXJyZW5jeSA9
IENvbnN0cmFpbnRDb25jdXJyZW5jeTo6Q29uY3VycmVudCwKICAgICAgICAgQ29uc3RyYWludFBh
cmFsbGVsaXNtID0gQ29uc3RyYWludFBhcmFsbGVsaXNtOjpTZXF1ZW50aWFsKTsKICAgICAKICAg
ICBTaW1wbGVNYXJraW5nQ29uc3RyYWludCgKICAgICAgICAgQ1N0cmluZyBhYmJyZXZpYXRlZE5h
bWUsIENTdHJpbmcgbmFtZSwKLSAgICAgICAgOjpGdW5jdGlvbjx2b2lkKFNsb3RWaXNpdG9yJik+
IGZ1bmMsCisgICAgICAgIE1hcmtpbmdDb25zdHJhaW50RXhlY3V0b3JQYWlyJiYgZXhlY3V0b3Jz
LAogICAgICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eSB2b2xhdGlsaXR5LAogICAgICAgICBDb25z
dHJhaW50UGFyYWxsZWxpc20gcGFyYWxsZWxpc20pCi0gICAgICAgIDogU2ltcGxlTWFya2luZ0Nv
bnN0cmFpbnQoYWJicmV2aWF0ZWROYW1lLCBuYW1lLCBXVEZNb3ZlKGZ1bmMpLCB2b2xhdGlsaXR5
LCBDb25zdHJhaW50Q29uY3VycmVuY3k6OkNvbmN1cnJlbnQsIHBhcmFsbGVsaXNtKQorICAgICAg
ICA6IFNpbXBsZU1hcmtpbmdDb25zdHJhaW50KGFiYnJldmlhdGVkTmFtZSwgbmFtZSwgV1RGTW92
ZShleGVjdXRvcnMpLCB2b2xhdGlsaXR5LCBDb25zdHJhaW50Q29uY3VycmVuY3k6OkNvbmN1cnJl
bnQsIHBhcmFsbGVsaXNtKQogICAgIHsKICAgICB9CiAgICAgCiAgICAgSlNfRVhQT1JUX1BSSVZB
VEUgflNpbXBsZU1hcmtpbmdDb25zdHJhaW50KCkgZmluYWw7CiAgICAgCiBwcml2YXRlOgorICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IEFMV0FZU19JTkxJTkUgdm9pZCBleGVjdXRlSW1w
bEltcGwoVmlzaXRvciYpOworICAgIHZvaWQgZXhlY3V0ZUltcGwoQWJzdHJhY3RTbG90VmlzaXRv
ciYpIGZpbmFsOwogICAgIHZvaWQgZXhlY3V0ZUltcGwoU2xvdFZpc2l0b3ImKSBmaW5hbDsKIAot
ICAgIDo6RnVuY3Rpb248dm9pZChTbG90VmlzaXRvciYpPiBtX2V4ZWN1dGVGdW5jdGlvbjsKKyAg
ICBNYXJraW5nQ29uc3RyYWludEV4ZWN1dG9yUGFpciBtX2V4ZWN1dG9yczsKIH07CiAKIH0gLy8g
bmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0
b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNp
dG9yLmNwcAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
U2xvdFZpc2l0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMi0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNzcsMTUgKzc3LDEwIEBAIHN0YXRp
YyB2b2lkIHZhbGlkYXRlKEpTQ2VsbCogY2VsbCkKICNlbmRpZgogCiBTbG90VmlzaXRvcjo6U2xv
dFZpc2l0b3IoSGVhcCYgaGVhcCwgQ1N0cmluZyBjb2RlTmFtZSkKLSAgICA6IG1fYnl0ZXNWaXNp
dGVkKDApCi0gICAgLCBtX3Zpc2l0Q291bnQoMCkKLSAgICAsIG1faXNJblBhcmFsbGVsTW9kZShm
YWxzZSkKKyAgICA6IEJhc2UoaGVhcCwgY29kZU5hbWUsIGhlYXAubV9vcGFxdWVSb290cykKICAg
ICAsIG1fbWFya2luZ1ZlcnNpb24oTWFya2VkU3BhY2U6OmluaXRpYWxWZXJzaW9uKQotICAgICwg
bV9oZWFwKGhlYXApCi0gICAgLCBtX2NvZGVOYW1lKGNvZGVOYW1lKQogI2lmIEFTU0VSVF9FTkFC
TEVECiAgICAgLCBtX2lzQ2hlY2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlvbihmYWxzZSkKLSAg
ICAsIG1faXNEcmFpbmluZyhmYWxzZSkKICNlbmRpZgogewogfQpAQCAtMTE3LDggKzExMiw4IEBA
IHZvaWQgU2xvdFZpc2l0b3I6OmRpZFN0YXJ0TWFya2luZygpCiAKIHZvaWQgU2xvdFZpc2l0b3I6
OnJlc2V0KCkKIHsKKyAgICBBYnN0cmFjdFNsb3RWaXNpdG9yOjpyZXNldCgpOwogICAgIG1fYnl0
ZXNWaXNpdGVkID0gMDsKLSAgICBtX3Zpc2l0Q291bnQgPSAwOwogICAgIG1faGVhcEFuYWx5emVy
ID0gbnVsbHB0cjsKICAgICBSRUxFQVNFX0FTU0VSVCghbV9jdXJyZW50Q2VsbCk7CiB9CkBAIC0y
MzAsNyArMjI1LDcgQEAgdm9pZCBTbG90VmlzaXRvcjo6YXBwZW5kSlNDZWxsT3JBdXhpbGlhcgog
dm9pZCBTbG90VmlzaXRvcjo6YXBwZW5kU2xvdyhKU0NlbGwqIGNlbGwsIERlcGVuZGVuY3kgZGVw
ZW5kZW5jeSkKIHsKICAgICBpZiAoVU5MSUtFTFkobV9oZWFwQW5hbHl6ZXIpKQotICAgICAgICBt
X2hlYXBBbmFseXplci0+YW5hbHl6ZUVkZ2UobV9jdXJyZW50Q2VsbCwgY2VsbCwgbV9yb290TWFy
a1JlYXNvbik7CisgICAgICAgIG1faGVhcEFuYWx5emVyLT5hbmFseXplRWRnZShtX2N1cnJlbnRD
ZWxsLCBjZWxsLCByb290TWFya1JlYXNvbigpKTsKIAogICAgIGFwcGVuZEhpZGRlblNsb3dJbXBs
KGNlbGwsIGRlcGVuZGVuY3kpOwogfQpAQCAtODA3LDEyICs4MDIsMTcgQEAgTWFya1N0YWNrQXJy
YXkmIFNsb3RWaXNpdG9yOjpjb3JyZXNwb25kaQogICAgIHJldHVybiAqbV9oZWFwLm1fc2hhcmVk
TXV0YXRvck1hcmtTdGFjazsKIH0KIAorTk9fUkVUVVJOX0RVRV9UT19DUkFTSCB2b2lkIFNsb3RW
aXNpdG9yOjphZGRQYXJhbGxlbENvbnN0cmFpbnRUYXNrKFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQo
QWJzdHJhY3RTbG90VmlzaXRvciYpPj4pCit7CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKK30KKwogdm9pZCBTbG90VmlzaXRvcjo6YWRkUGFyYWxsZWxDb25zdHJhaW50VGFzayhS
ZWZQdHI8U2hhcmVkVGFzazx2b2lkKFNsb3RWaXNpdG9yJik+PiB0YXNrKQogewogICAgIFJFTEVB
U0VfQVNTRVJUKG1fY3VycmVudFNvbHZlcik7CiAgICAgUkVMRUFTRV9BU1NFUlQobV9jdXJyZW50
Q29uc3RyYWludCk7CiAgICAgUkVMRUFTRV9BU1NFUlQodGFzayk7Ci0gICAgCisKICAgICBtX2N1
cnJlbnRTb2x2ZXItPmFkZFBhcmFsbGVsVGFzayh0YXNrLCAqbV9jdXJyZW50Q29uc3RyYWludCk7
CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuaAkocmV2
aXNpb24gMjczMTE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3Iu
aAkod29ya2luZyBjb3B5KQpAQCAtMjUsNTkgKzI1LDc2IEBACiAKICNwcmFnbWEgb25jZQogCisj
aW5jbHVkZSAiQWJzdHJhY3RTbG90VmlzaXRvci5oIgogI2luY2x1ZGUgIkhhbmRsZVR5cGVzLmgi
CiAjaW5jbHVkZSAiSXRlcmF0aW9uU3RhdHVzLmgiCi0jaW5jbHVkZSAiTWFya1N0YWNrLmgiCi0j
aW5jbHVkZSAiUm9vdE1hcmtSZWFzb24uaCIKLSNpbmNsdWRlICJWaXNpdFJhY2VLZXkuaCIKICNp
bmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9Nb25vdG9uaWNUaW1lLmg+Ci0j
aW5jbHVkZSA8d3RmL1NoYXJlZFRhc2suaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+
CiAKIG5hbWVzcGFjZSBKU0MgewogCi1jbGFzcyBDb25zZXJ2YXRpdmVSb290czsKIGNsYXNzIEdD
VGhyZWFkU2hhcmVkRGF0YTsKLWNsYXNzIEhlYXA7CiBjbGFzcyBIZWFwQ2VsbDsKIGNsYXNzIEhl
YXBBbmFseXplcjsKLWNsYXNzIE1hcmtlZEJsb2NrOwogY2xhc3MgTWFya2luZ0NvbnN0cmFpbnQ7
CiBjbGFzcyBNYXJraW5nQ29uc3RyYWludFNvbHZlcjsKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNs
YXNzIFdlYWs7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBUcmFpdHM+IGNsYXNzIFdy
aXRlQmFycmllckJhc2U7CiAKIHR5cGVkZWYgdWludDMyX3QgSGVhcFZlcnNpb247CiAKLWNsYXNz
IFNsb3RWaXNpdG9yIHsKK2NsYXNzIFNsb3RWaXNpdG9yIGZpbmFsIDogcHVibGljIEFic3RyYWN0
U2xvdFZpc2l0b3IgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFNsb3RWaXNpdG9yKTsKICAg
ICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIAorICAgIHVzaW5nIEJhc2UgPSBBYnN0cmFjdFNs
b3RWaXNpdG9yOworCiAgICAgZnJpZW5kIGNsYXNzIFNldEN1cnJlbnRDZWxsU2NvcGU7CiAgICAg
ZnJpZW5kIGNsYXNzIEhlYXA7CiAKIHB1YmxpYzoKKyAgICBjbGFzcyBDb250ZXh0IHsKKyAgICBw
dWJsaWM6CisgICAgICAgIEFMV0FZU19JTkxJTkUgQ29udGV4dChBYnN0cmFjdFNsb3RWaXNpdG9y
JiwgSGVhcENlbGwqKSB7IH0KKyAgICB9OworCisgICAgY2xhc3MgU3VwcHJlc3NHQ1ZlcmlmaWVy
U2NvcGUgeworICAgIHB1YmxpYzoKKyAgICAgICAgU3VwcHJlc3NHQ1ZlcmlmaWVyU2NvcGUoU2xv
dFZpc2l0b3ImKSB7IH0KKyAgICB9OworCisgICAgY2xhc3MgRGVmYXVsdE1hcmtpbmdWaW9sYXRp
b25Bc3NlcnRpb25TY29wZSB7CisgICAgcHVibGljOgorI2lmIEFTU0VSVF9FTkFCTEVECisgICAg
ICAgIERlZmF1bHRNYXJraW5nVmlvbGF0aW9uQXNzZXJ0aW9uU2NvcGUoU2xvdFZpc2l0b3ImIHZp
c2l0b3IpCisgICAgICAgICAgICA6IG1fdmlzaXRvcih2aXNpdG9yKQorICAgICAgICB7CisgICAg
ICAgICAgICBtX3dhc0NoZWNraW5nRm9yRGVmYXVsdE1hcmtWaW9sYXRpb24gPSBtX3Zpc2l0b3Iu
bV9pc0NoZWNraW5nRm9yRGVmYXVsdE1hcmtWaW9sYXRpb247CisgICAgICAgICAgICBtX3Zpc2l0
b3IubV9pc0NoZWNraW5nRm9yRGVmYXVsdE1hcmtWaW9sYXRpb24gPSBmYWxzZTsKKyAgICAgICAg
fQorCisgICAgICAgIH5EZWZhdWx0TWFya2luZ1Zpb2xhdGlvbkFzc2VydGlvblNjb3BlKCkKKyAg
ICAgICAgeworICAgICAgICAgICAgbV92aXNpdG9yLm1faXNDaGVja2luZ0ZvckRlZmF1bHRNYXJr
VmlvbGF0aW9uID0gbV93YXNDaGVja2luZ0ZvckRlZmF1bHRNYXJrVmlvbGF0aW9uOworICAgICAg
ICB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBTbG90VmlzaXRvciYgbV92aXNpdG9yOworICAg
ICAgICBib29sIG1fd2FzQ2hlY2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlvbjsKKyNlbHNlCisg
ICAgICAgIERlZmF1bHRNYXJraW5nVmlvbGF0aW9uQXNzZXJ0aW9uU2NvcGUoU2xvdFZpc2l0b3Im
KSB7IH0KKyNlbmRpZgorICAgIH07CisKICAgICBTbG90VmlzaXRvcihIZWFwJiwgQ1N0cmluZyBj
b2RlTmFtZSk7CiAgICAgflNsb3RWaXNpdG9yKCk7CiAKLSAgICBNYXJrU3RhY2tBcnJheSYgY29s
bGVjdG9yTWFya1N0YWNrKCkgeyByZXR1cm4gbV9jb2xsZWN0b3JTdGFjazsgfQotICAgIE1hcmtT
dGFja0FycmF5JiBtdXRhdG9yTWFya1N0YWNrKCkgeyByZXR1cm4gbV9tdXRhdG9yU3RhY2s7IH0K
LSAgICBjb25zdCBNYXJrU3RhY2tBcnJheSYgY29sbGVjdG9yTWFya1N0YWNrKCkgY29uc3QgeyBy
ZXR1cm4gbV9jb2xsZWN0b3JTdGFjazsgfQotICAgIGNvbnN0IE1hcmtTdGFja0FycmF5JiBtdXRh
dG9yTWFya1N0YWNrKCkgY29uc3QgeyByZXR1cm4gbV9tdXRhdG9yU3RhY2s7IH0KLSAgICAKLSAg
ICBWTSYgdm0oKTsKLSAgICBjb25zdCBWTSYgdm0oKSBjb25zdDsKLSAgICBIZWFwKiBoZWFwKCkg
Y29uc3Q7CisgICAgdm9pZCBhcHBlbmQoY29uc3QgQ29uc2VydmF0aXZlUm9vdHMmKSBmaW5hbDsK
IAotICAgIHZvaWQgYXBwZW5kKGNvbnN0IENvbnNlcnZhdGl2ZVJvb3RzJik7Ci0gICAgCiAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVHJhaXRzPiB2b2lkIGFwcGVuZChjb25zdCBX
cml0ZUJhcnJpZXJCYXNlPFQsIFRyYWl0cz4mKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0
eXBlbmFtZSBUcmFpdHM+IHZvaWQgYXBwZW5kSGlkZGVuKGNvbnN0IFdyaXRlQmFycmllckJhc2U8
VCwgVHJhaXRzPiYpOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEl0ZXJhdG9yPiB2b2lkIGFwcGVu
ZChJdGVyYXRvciBiZWdpbiAsIEl0ZXJhdG9yIGVuZCk7Ci0gICAgdm9pZCBhcHBlbmRWYWx1ZXMo
Y29uc3QgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duLCBSYXdWYWx1ZVRyYWl0czxVbmtub3duPj4q
LCBzaXplX3QgY291bnQpOwotICAgIHZvaWQgYXBwZW5kVmFsdWVzSGlkZGVuKGNvbnN0IFdyaXRl
QmFycmllckJhc2U8VW5rbm93biwgUmF3VmFsdWVUcmFpdHM8VW5rbm93bj4+Kiwgc2l6ZV90IGNv
dW50KTsKLSAgICAKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgYXBwZW5kVmFsdWVzKGNvbnN0IFdy
aXRlQmFycmllckJhc2U8VW5rbm93biwgUmF3VmFsdWVUcmFpdHM8VW5rbm93bj4+Kiwgc2l6ZV90
IGNvdW50KTsKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgYXBwZW5kVmFsdWVzSGlkZGVuKGNvbnN0
IFdyaXRlQmFycmllckJhc2U8VW5rbm93biwgUmF3VmFsdWVUcmFpdHM8VW5rbm93bj4+Kiwgc2l6
ZV90IGNvdW50KTsKKwogICAgIC8vIFRoZXNlIGRvbid0IHJlcXVpcmUgeW91IHRvIHByb3ZlIHRo
YXQgeW91IGhhdmUgYSBXcml0ZUJhcnJpZXI8Pi4gVGhhdCBtYWtlcyBzZW5zZQogICAgIC8vIGZv
cjoKICAgICAvLwpAQCAtODcsMzIgKzEwNCwyNyBAQCBwdWJsaWM6CiAgICAgLy8KICAgICAvLyBJ
ZiB5b3UgYXJlIG5vdCBhIHJvb3QgYW5kIHlvdSBkb24ndCBrbm93IHdoYXQga2luZCBvZiBiYXJy
aWVyIHlvdSBoYXZlLCB0aGVuIHlvdQogICAgIC8vIHNob3VsZG4ndCBjYWxsIHRoZXNlIG1ldGhv
ZHMuCi0gICAgdm9pZCBhcHBlbmRVbmJhcnJpZXJlZChKU1ZhbHVlKTsKLSAgICB2b2lkIGFwcGVu
ZFVuYmFycmllcmVkKEpTVmFsdWUqLCBzaXplX3QpOwotICAgIHZvaWQgYXBwZW5kVW5iYXJyaWVy
ZWQoSlNDZWxsKik7CisgICAgQUxXQVlTX0lOTElORSB2b2lkIGFwcGVuZFVuYmFycmllcmVkKEpT
VmFsdWUpOworICAgIEFMV0FZU19JTkxJTkUgdm9pZCBhcHBlbmRVbmJhcnJpZXJlZChKU1ZhbHVl
Kiwgc2l6ZV90KTsKKyAgICB2b2lkIGFwcGVuZFVuYmFycmllcmVkKEpTQ2VsbCopIGZpbmFsOwog
ICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiAgICAgdm9pZCBhcHBlbmQoY29uc3QgV2Vh
azxUPiYgd2Vhayk7CiAgICAgCi0gICAgdm9pZCBhcHBlbmRIaWRkZW5VbmJhcnJpZXJlZChKU1Zh
bHVlKTsKLSAgICB2b2lkIGFwcGVuZEhpZGRlblVuYmFycmllcmVkKEpTQ2VsbCopOwotCi0gICAg
Ym9vbCBhZGRPcGFxdWVSb290KHZvaWQqKTsgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSByb290IHdh
cyBuZXcuCi0gICAgCi0gICAgYm9vbCBjb250YWluc09wYXF1ZVJvb3Qodm9pZCopIGNvbnN0Owor
ICAgIEFMV0FZU19JTkxJTkUgdm9pZCBhcHBlbmRIaWRkZW5VbmJhcnJpZXJlZChKU1ZhbHVlKTsK
KyAgICB2b2lkIGFwcGVuZEhpZGRlblVuYmFycmllcmVkKEpTQ2VsbCopIGZpbmFsOwogCi0gICAg
Ym9vbCBpc0VtcHR5KCkgeyByZXR1cm4gbV9jb2xsZWN0b3JTdGFjay5pc0VtcHR5KCkgJiYgbV9t
dXRhdG9yU3RhY2suaXNFbXB0eSgpOyB9CisgICAgYm9vbCBpc0ZpcnN0VmlzaXQoKSBjb25zdCBm
aW5hbCB7IHJldHVybiBtX2lzRmlyc3RWaXNpdDsgfQogCi0gICAgYm9vbCBpc0ZpcnN0VmlzaXQo
KSBjb25zdCB7IHJldHVybiBtX2lzRmlyc3RWaXNpdDsgfQorICAgIGJvb2wgaXNNYXJrZWQoY29u
c3Qgdm9pZCopIGNvbnN0IGZpbmFsOworICAgIGJvb2wgaXNNYXJrZWQoTWFya2VkQmxvY2smLCBI
ZWFwQ2VsbCopIGNvbnN0IGZpbmFsOworICAgIGJvb2wgaXNNYXJrZWQoUHJlY2lzZUFsbG9jYXRp
b24mLCBIZWFwQ2VsbCopIGNvbnN0IGZpbmFsOwogCiAgICAgdm9pZCBkaWRTdGFydE1hcmtpbmco
KTsKICAgICB2b2lkIHJlc2V0KCk7CiAgICAgdm9pZCBjbGVhck1hcmtTdGFja3MoKTsKIAogICAg
IHNpemVfdCBieXRlc1Zpc2l0ZWQoKSBjb25zdCB7IHJldHVybiBtX2J5dGVzVmlzaXRlZDsgfQot
ICAgIHNpemVfdCB2aXNpdENvdW50KCkgY29uc3QgeyByZXR1cm4gbV92aXNpdENvdW50OyB9Ci0g
ICAgCi0gICAgdm9pZCBhZGRUb1Zpc2l0Q291bnQoc2l6ZV90IHZhbHVlKSB7IG1fdmlzaXRDb3Vu
dCArPSB2YWx1ZTsgfQogCiAgICAgdm9pZCBkb25hdGUoKTsKICAgICB2b2lkIGRyYWluKE1vbm90
b25pY1RpbWUgdGltZW91dCA9IE1vbm90b25pY1RpbWU6OmluZmluaXR5KCkpOwpAQCAtMTM1LDI0
ICsxNDcsMTggQEAgcHVibGljOgogICAgIAogICAgIC8vIFRoaXMgaW5mb3JtcyB0aGUgR0MgYWJv
dXQgYXV4aWxpYXJ5IG9mIHNvbWUgc2l6ZSB0aGF0IHdlIGFyZSBrZWVwaW5nIGFsaXZlLiBJZiB5
b3UgZG9uJ3QgZG8KICAgICAvLyB0aGlzIHRoZW4gdGhlIHNwYWNlIHdpbGwgYmUgZnJlZWQgYXQg
ZW5kIG9mIEdDLgotICAgIHZvaWQgbWFya0F1eGlsaWFyeShjb25zdCB2b2lkKiBiYXNlKTsKKyAg
ICB2b2lkIG1hcmtBdXhpbGlhcnkoY29uc3Qgdm9pZCogYmFzZSkgZmluYWw7CiAKLSAgICB2b2lk
IHJlcG9ydEV4dHJhTWVtb3J5VmlzaXRlZChzaXplX3QpOworICAgIHZvaWQgcmVwb3J0RXh0cmFN
ZW1vcnlWaXNpdGVkKHNpemVfdCkgZmluYWw7CiAjaWYgRU5BQkxFKFJFU09VUkNFX1VTQUdFKQot
ICAgIHZvaWQgcmVwb3J0RXh0ZXJuYWxNZW1vcnlWaXNpdGVkKHNpemVfdCk7CisgICAgdm9pZCBy
ZXBvcnRFeHRlcm5hbE1lbW9yeVZpc2l0ZWQoc2l6ZV90KSBmaW5hbDsKICNlbmRpZgogICAgIAot
ICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwotCi0gICAgYm9vbCBpc0FuYWx5emlu
Z0hlYXAoKSBjb25zdCB7IHJldHVybiAhIW1faGVhcEFuYWx5emVyOyB9Ci0gICAgSGVhcEFuYWx5
emVyKiBoZWFwQW5hbHl6ZXIoKSBjb25zdCB7IHJldHVybiBtX2hlYXBBbmFseXplcjsgfQotICAg
IAotICAgIFJvb3RNYXJrUmVhc29uIHJvb3RNYXJrUmVhc29uKCkgY29uc3QgeyByZXR1cm4gbV9y
b290TWFya1JlYXNvbjsgfQotICAgIHZvaWQgc2V0Um9vdE1hcmtSZWFzb24oUm9vdE1hcmtSZWFz
b24gcmVhc29uKSB7IG1fcm9vdE1hcmtSZWFzb24gPSByZWFzb247IH0KKyAgICB2b2lkIGR1bXAo
UHJpbnRTdHJlYW0mKSBjb25zdCBmaW5hbDsKIAogICAgIEhlYXBWZXJzaW9uIG1hcmtpbmdWZXJz
aW9uKCkgY29uc3QgeyByZXR1cm4gbV9tYXJraW5nVmVyc2lvbjsgfQogCi0gICAgYm9vbCBtdXRh
dG9ySXNTdG9wcGVkKCkgY29uc3QgeyByZXR1cm4gbV9tdXRhdG9ySXNTdG9wcGVkOyB9CisgICAg
Ym9vbCBtdXRhdG9ySXNTdG9wcGVkKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9tdXRhdG9ySXNT
dG9wcGVkOyB9CiAgICAgCiAgICAgTG9jayYgcmlnaHRUb1J1bigpIHsgcmV0dXJuIG1fcmlnaHRU
b1J1bjsgfQogICAgIApAQCAtMTY0LDIwICsxNzAsMTcgQEAgcHVibGljOgogICAgIAogICAgIHZv
aWQgb3B0aW1pemVGb3JTdG9wcGVkTXV0YXRvcigpOwogICAgIAotICAgIHZvaWQgZGlkUmFjZShj
b25zdCBWaXNpdFJhY2VLZXkmKTsKKyAgICB2b2lkIGRpZFJhY2UoY29uc3QgVmlzaXRSYWNlS2V5
JikgZmluYWw7CiAgICAgdm9pZCBkaWRSYWNlKEpTQ2VsbCogY2VsbCwgY29uc3QgY2hhciogcmVh
c29uKSB7IGRpZFJhY2UoVmlzaXRSYWNlS2V5KGNlbGwsIHJlYXNvbikpOyB9CiAgICAgCi0gICAg
dm9pZCB2aXNpdEFzQ29uc3RyYWludChjb25zdCBKU0NlbGwqKTsKKyAgICB2b2lkIHZpc2l0QXND
b25zdHJhaW50KGNvbnN0IEpTQ2VsbCopIGZpbmFsOwogICAgIAogICAgIGJvb2wgZGlkUmVhY2hU
ZXJtaW5hdGlvbigpOwogICAgIAotICAgIHZvaWQgc2V0SWdub3JlTmV3T3BhcXVlUm9vdHMoYm9v
bCB2YWx1ZSkgeyBtX2lnbm9yZU5ld09wYXF1ZVJvb3RzID0gdmFsdWU7IH0KLQogICAgIHZvaWQg
ZG9uYXRlQWxsKCk7Ci0gICAgCi0gICAgY29uc3QgY2hhciogY29kZU5hbWUoKSBjb25zdCB7IHJl
dHVybiBtX2NvZGVOYW1lLmRhdGEoKTsgfQotICAgIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIHZv
aWQgYWRkUGFyYWxsZWxDb25zdHJhaW50VGFzayhSZWZQdHI8U2hhcmVkVGFzazx2b2lkKFNsb3RW
aXNpdG9yJik+Pik7CisKKyAgICBOT19SRVRVUk5fRFVFX1RPX0NSQVNIIHZvaWQgYWRkUGFyYWxs
ZWxDb25zdHJhaW50VGFzayhSZWZQdHI8U2hhcmVkVGFzazx2b2lkKEFic3RyYWN0U2xvdFZpc2l0
b3ImKT4+KSBmaW5hbDsKKyAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGFkZFBhcmFsbGVsQ29u
c3RyYWludFRhc2soUmVmUHRyPFNoYXJlZFRhc2s8dm9pZChTbG90VmlzaXRvciYpPj4pIGZpbmFs
OwogCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBQYXJhbGxlbE1vZGVFbmFibGVyOwpAQCAt
MjE2LDM5ICsyMTksMjUgQEAgcHJpdmF0ZToKIAogICAgIE1hcmtTdGFja0FycmF5JiBjb3JyZXNw
b25kaW5nR2xvYmFsU3RhY2soTWFya1N0YWNrQXJyYXkmKTsKIAotICAgIE1hcmtTdGFja0FycmF5
IG1fY29sbGVjdG9yU3RhY2s7Ci0gICAgTWFya1N0YWNrQXJyYXkgbV9tdXRhdG9yU3RhY2s7Ci0g
ICAgCi0gICAgc2l6ZV90IG1fYnl0ZXNWaXNpdGVkOwotICAgIHNpemVfdCBtX3Zpc2l0Q291bnQ7
Ci0gICAgc2l6ZV90IG1fbm9uQ2VsbFZpc2l0Q291bnQgeyAwIH07IC8vIFVzZWQgZm9yIGluY3Jl
bWVudGFsIGRyYWluaW5nLCBpZ25vcmVkIG90aGVyd2lzZS4KLSAgICBDaGVja2VkU2l6ZSBtX2V4
dHJhTWVtb3J5U2l6ZSB7IDAgfTsKLSAgICBib29sIG1faXNJblBhcmFsbGVsTW9kZTsKLSAgICBi
b29sIG1faWdub3JlTmV3T3BhcXVlUm9vdHMgeyBmYWxzZSB9OyAvLyBVc2VmdWwgYXMgYSBkZWJ1
Z2dpbmcgbW9kZS4KKyAgICBib29sIG1faXNJblBhcmFsbGVsTW9kZSB7IGZhbHNlIH07CiAKICAg
ICBIZWFwVmVyc2lvbiBtX21hcmtpbmdWZXJzaW9uOwotICAgIAotICAgIEhlYXAmIG1faGVhcDsK
KworICAgIHNpemVfdCBtX2J5dGVzVmlzaXRlZCB7IDAgfTsKKyAgICBzaXplX3QgbV9ub25DZWxs
VmlzaXRDb3VudCB7IDAgfTsgLy8gVXNlZCBmb3IgaW5jcmVtZW50YWwgZHJhaW5pbmcsIGlnbm9y
ZWQgb3RoZXJ3aXNlLgorICAgIENoZWNrZWRTaXplIG1fZXh0cmFNZW1vcnlTaXplIHsgMCB9Owog
CiAgICAgSGVhcEFuYWx5emVyKiBtX2hlYXBBbmFseXplciB7IG51bGxwdHIgfTsKICAgICBKU0Nl
bGwqIG1fY3VycmVudENlbGwgeyBudWxscHRyIH07Ci0gICAgUm9vdE1hcmtSZWFzb24gbV9yb290
TWFya1JlYXNvbiB7IFJvb3RNYXJrUmVhc29uOjpOb25lIH07CiAgICAgYm9vbCBtX2lzRmlyc3RW
aXNpdCB7IGZhbHNlIH07CiAgICAgYm9vbCBtX211dGF0b3JJc1N0b3BwZWQgeyBmYWxzZSB9Owog
ICAgIGJvb2wgbV9jYW5PcHRpbWl6ZUZvclN0b3BwZWRNdXRhdG9yIHsgZmFsc2UgfTsKICAgICBM
b2NrIG1fcmlnaHRUb1J1bjsKICAgICAKLSAgICBDU3RyaW5nIG1fY29kZU5hbWU7Ci0gICAgCi0g
ICAgTWFya2luZ0NvbnN0cmFpbnQqIG1fY3VycmVudENvbnN0cmFpbnQgeyBudWxscHRyIH07Ci0g
ICAgTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXIqIG1fY3VycmVudFNvbHZlciB7IG51bGxwdHIgfTsK
LSAgICAKICAgICAvLyBQdXQgcGFkZGluZyBoZXJlIHRvIG1pdGlnYXRlIGZhbHNlIHNoYXJpbmcg
YmV0d2VlbiBtdWx0aXBsZSBTbG90VmlzaXRvcnMuCiAgICAgY2hhciBwYWRkaW5nWzY0XTsKLXB1
YmxpYzoKICNpZiBBU1NFUlRfRU5BQkxFRAotICAgIGJvb2wgbV9pc0NoZWNraW5nRm9yRGVmYXVs
dE1hcmtWaW9sYXRpb247Ci0gICAgYm9vbCBtX2lzRHJhaW5pbmc7CisgICAgYm9vbCBtX2lzQ2hl
Y2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlvbiB7IGZhbHNlIH07CiAjZW5kaWYKIH07CiAKQEAg
LTI3MSwyMyArMjYwLDQgQEAgcHJpdmF0ZToKICAgICBTbG90VmlzaXRvciYgbV9zdGFjazsKIH07
CiAKLWNsYXNzIFNldFJvb3RNYXJrUmVhc29uU2NvcGUgewotcHVibGljOgotICAgIFNldFJvb3RN
YXJrUmVhc29uU2NvcGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IsIFJvb3RNYXJrUmVhc29uIHJlYXNv
bikKLSAgICAgICAgOiBtX3Zpc2l0b3IodmlzaXRvcikKLSAgICAgICAgLCBtX3ByZXZpb3VzUmVh
c29uKHZpc2l0b3Iucm9vdE1hcmtSZWFzb24oKSkKLSAgICB7Ci0gICAgICAgIG1fdmlzaXRvci5z
ZXRSb290TWFya1JlYXNvbihyZWFzb24pOwotICAgIH0KLQotICAgIH5TZXRSb290TWFya1JlYXNv
blNjb3BlKCkKLSAgICB7Ci0gICAgICAgIG1fdmlzaXRvci5zZXRSb290TWFya1JlYXNvbihtX3By
ZXZpb3VzUmVhc29uKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgU2xvdFZpc2l0b3ImIG1fdmlz
aXRvcjsKLSAgICBSb290TWFya1JlYXNvbiBtX3ByZXZpb3VzUmVhc29uOwotfTsKLQogfSAvLyBu
YW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRv
cklubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90
VmlzaXRvcklubGluZXMuaAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNSw5ICsy
NSwxMCBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgIkFic3RyYWN0U2xvdFZpc2l0b3JJ
bmxpbmVzLmgiCisjaW5jbHVkZSAiTWFya2VkQmxvY2suaCIKKyNpbmNsdWRlICJQcmVjaXNlQWxs
b2NhdGlvbi5oIgogI2luY2x1ZGUgIlNsb3RWaXNpdG9yLmgiCi0jaW5jbHVkZSAiV2Vhay5oIgot
I2luY2x1ZGUgIldlYWtJbmxpbmVzLmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC0xMzQsMjEg
KzEzNSwxOSBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgU2xvdFZpc2l0b3I6OmFwcGVuZFZhCiAgICAg
ICAgIGFwcGVuZEhpZGRlbihiYXJyaWVyc1tpXSk7CiB9CiAKLWlubGluZSBib29sIFNsb3RWaXNp
dG9yOjphZGRPcGFxdWVSb290KHZvaWQqIHB0cikKK0FMV0FZU19JTkxJTkUgYm9vbCBTbG90Vmlz
aXRvcjo6aXNNYXJrZWQoY29uc3Qgdm9pZCogcCkgY29uc3QKIHsKLSAgICBpZiAoIXB0cikKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChtX2lnbm9yZU5ld09wYXF1ZVJvb3RzKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFoZWFwKCktPm1fb3BhcXVlUm9vdHMuYWRkKHB0
cikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBtX3Zpc2l0Q291bnQrKzsKLSAgICByZXR1
cm4gdHJ1ZTsKKyAgICByZXR1cm4gaGVhcCgpLT5pc01hcmtlZChwKTsKIH0KIAotaW5saW5lIGJv
b2wgU2xvdFZpc2l0b3I6OmNvbnRhaW5zT3BhcXVlUm9vdCh2b2lkKiBwdHIpIGNvbnN0CitBTFdB
WVNfSU5MSU5FIGJvb2wgU2xvdFZpc2l0b3I6OmlzTWFya2VkKE1hcmtlZEJsb2NrJiBjb250YWlu
ZXIsIEhlYXBDZWxsKiBjZWxsKSBjb25zdAogewotICAgIHJldHVybiBoZWFwKCktPm1fb3BhcXVl
Um9vdHMuY29udGFpbnMocHRyKTsKKyAgICByZXR1cm4gY29udGFpbmVyLmlzTWFya2VkKG1hcmtp
bmdWZXJzaW9uKCksIGNlbGwpOworfQorCitBTFdBWVNfSU5MSU5FIGJvb2wgU2xvdFZpc2l0b3I6
OmlzTWFya2VkKFByZWNpc2VBbGxvY2F0aW9uJiBjb250YWluZXIsIEhlYXBDZWxsKiBjZWxsKSBj
b25zdAoreworICAgIHJldHVybiBjb250YWluZXIuaXNNYXJrZWQobWFya2luZ1ZlcnNpb24oKSwg
Y2VsbCk7CiB9CiAKIGlubGluZSB2b2lkIFNsb3RWaXNpdG9yOjpyZXBvcnRFeHRyYU1lbW9yeVZp
c2l0ZWQoc2l6ZV90IHNpemUpCkBAIC0xNjksMjEgKzE2OCw2IEBAIGlubGluZSB2b2lkIFNsb3RW
aXNpdG9yOjpyZXBvcnRFeHRlcm5hbE0KIH0KICNlbmRpZgogCi1pbmxpbmUgSGVhcCogU2xvdFZp
c2l0b3I6OmhlYXAoKSBjb25zdAotewotICAgIHJldHVybiAmbV9oZWFwOwotfQotCi1pbmxpbmUg
Vk0mIFNsb3RWaXNpdG9yOjp2bSgpCi17Ci0gICAgcmV0dXJuIG1faGVhcC52bSgpOwotfQotCi1p
bmxpbmUgY29uc3QgVk0mIFNsb3RWaXNpdG9yOjp2bSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1f
aGVhcC52bSgpOwotfQotCiB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgogSXRlcmF0aW9uU3RhdHVz
IFNsb3RWaXNpdG9yOjpmb3JFYWNoTWFya1N0YWNrKGNvbnN0IEZ1bmMmIGZ1bmMpCiB7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvck1hY3Jvcy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yTWFjcm9zLmgJKG5v
bmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3JNYWNy
b3MuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEyMyBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCituYW1lc3BhY2UgSlND
IHsKKworY2xhc3MgQWJzdHJhY3RTbG90VmlzaXRvcjsKK2NsYXNzIEpTQ2VsbDsKK2NsYXNzIFNs
b3RWaXNpdG9yOworCisjZGVmaW5lIFVOVVNFRF9NT0RJRklFUl9BUkdVTUVOVCAvKiB1bnVzZWQg
Ki8KKworI2RlZmluZSBERUNMQVJFX1VOVVNFRF9TVFJVQ1RfVE9fVEVSTUlOQVRFX1ZJU0lUX01B
Q1JPX0VYUEFOREVSX0lNUEwoY291bnRlcikgXAorICAgIHN0cnVjdCBVbnVzZWRTbG90VmlzaXRv
ck1hY3JvU3RydWN0U29XZUNhbkhhdmVBU2VtaWNvbG9uIyNjb3VudGVyIHsgfQorCisjZGVmaW5l
IERFQ0xBUkVfVU5VU0VEX1NUUlVDVF9UT19URVJNSU5BVEVfVklTSVRfTUFDUk9fRVhQQU5ERVIo
Y291bnRlcikgXAorICAgIERFQ0xBUkVfVU5VU0VEX1NUUlVDVF9UT19URVJNSU5BVEVfVklTSVRf
TUFDUk9fRVhQQU5ERVJfSU1QTChjb3VudGVyKQorCisjZGVmaW5lIERFQ0xBUkVfVU5VU0VEX1NU
UlVDVF9UT19URVJNSU5BVEVfVklTSVRfTUFDUk8gXAorICAgIERFQ0xBUkVfVU5VU0VEX1NUUlVD
VF9UT19URVJNSU5BVEVfVklTSVRfTUFDUk9fRVhQQU5ERVIoX19DT1VOVEVSX18pCisKKy8vIE1h
Y3JvcyBmb3IgdmlzaXRBZ2dyZWdhdGUoKS4KKworI2RlZmluZSBERUNMQVJFX1ZJU0lUX0FHR1JF
R0FURV9XSVRIX01PRElGSUVSKHBvc3RNb2RpZmllcikgXAorcHJpdmF0ZTogXAorICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFZpc2l0b3I+IEFMV0FZU19JTkxJTkUgdm9pZCB2aXNpdEFnZ3JlZ2F0ZUlt
cGwoVmlzaXRvciYpIHBvc3RNb2RpZmllcjsgXAorcHVibGljOiBcCisgICAgdm9pZCB2aXNpdEFn
Z3JlZ2F0ZShBYnN0cmFjdFNsb3RWaXNpdG9yJikgcG9zdE1vZGlmaWVyOyBcCisgICAgdm9pZCB2
aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYpIHBvc3RNb2RpZmllcgorCisjZGVmaW5lIERFQ0xB
UkVfVklTSVRfQUdHUkVHQVRFIFwKKyAgICBERUNMQVJFX1ZJU0lUX0FHR1JFR0FURV9XSVRIX01P
RElGSUVSKFVOVVNFRF9NT0RJRklFUl9BUkdVTUVOVCkKKworI2RlZmluZSBERUZJTkVfVklTSVRf
QUdHUkVHQVRFX1dJVEhfTU9ESUZJRVIoY2xhc3NOYW1lLCBwb3N0TW9kaWZpZXIpIFwKKyAgICB2
b2lkIGNsYXNzTmFtZTo6dmlzaXRBZ2dyZWdhdGUoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRv
cikgcG9zdE1vZGlmaWVyIHsgdmlzaXRBZ2dyZWdhdGVJbXBsKHZpc2l0b3IpOyB9IFwKKyAgICB2
b2lkIGNsYXNzTmFtZTo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpIHBvc3RN
b2RpZmllciB7IHZpc2l0QWdncmVnYXRlSW1wbCh2aXNpdG9yKTsgfSBcCisgICAgREVDTEFSRV9V
TlVTRURfU1RSVUNUX1RPX1RFUk1JTkFURV9WSVNJVF9NQUNSTworCisjZGVmaW5lIERFRklORV9W
SVNJVF9BR0dSRUdBVEUoY2xhc3NOYW1lKSBcCisgICAgREVGSU5FX1ZJU0lUX0FHR1JFR0FURV9X
SVRIX01PRElGSUVSKGNsYXNzTmFtZSwgVU5VU0VEX01PRElGSUVSX0FSR1VNRU5UKQorCisvLyBN
YWNyb3MgZm9yIHN0YXRpYyB2aXNpdENoaWxkcmVuKCkuCisKKyNkZWZpbmUgREVDTEFSRV9WSVNJ
VF9DSElMRFJFTl9XSVRIX01PRElGSUVSKHByZU1vZGlmaWVyKSBcCitwcml2YXRlOiBcCisgICAg
dGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gQUxXQVlTX0lOTElORSBzdGF0aWMgdm9pZCB2aXNp
dENoaWxkcmVuSW1wbChKU0NlbGwqLCBWaXNpdG9yJik7IFwKK3B1YmxpYzogXAorICAgIHByZU1v
ZGlmaWVyIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgQWJzdHJhY3RTbG90Vmlz
aXRvciYpOyBcCisgICAgcHJlTW9kaWZpZXIgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0Nl
bGwqLCBTbG90VmlzaXRvciYpCisKKyNkZWZpbmUgREVDTEFSRV9WSVNJVF9DSElMRFJFTiBcCisg
ICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTl9XSVRIX01PRElGSUVSKFVOVVNFRF9NT0RJRklFUl9B
UkdVTUVOVCkKKworI2RlZmluZSBERUZJTkVfVklTSVRfQ0hJTERSRU5fV0lUSF9NT0RJRklFUihw
cmVNb2RpZmllciwgY2xhc3NOYW1lKSBcCisgICAgcHJlTW9kaWZpZXIgdm9pZCBjbGFzc05hbWU6
OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9y
KSBcCisgICAgeyBcCisgICAgICAgIEFic3RyYWN0U2xvdFZpc2l0b3I6OkNvbnRleHQgY29udGV4
dCh2aXNpdG9yLCBjZWxsKTsgXAorICAgICAgICB2aXNpdENoaWxkcmVuSW1wbChjZWxsLCB2aXNp
dG9yKTsgXAorICAgIH0gXAorICAgIHByZU1vZGlmaWVyIHZvaWQgY2xhc3NOYW1lOjp2aXNpdENo
aWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsgdmlzaXRDaGlsZHJl
bkltcGwoY2VsbCwgdmlzaXRvcik7IH0gXAorICAgIERFQ0xBUkVfVU5VU0VEX1NUUlVDVF9UT19U
RVJNSU5BVEVfVklTSVRfTUFDUk8KKworI2RlZmluZSBERUZJTkVfVklTSVRfQ0hJTERSRU4oY2xh
c3NOYW1lKSBcCisgICAgREVGSU5FX1ZJU0lUX0NISUxEUkVOX1dJVEhfTU9ESUZJRVIoVU5VU0VE
X01PRElGSUVSX0FSR1VNRU5ULCBjbGFzc05hbWUpCisKKy8vIE1hY3JvcyBmb3Igc3RhdGljIHZp
c2l0T3V0cHV0Q29uc3RyYWludHMoKS4KKworI2RlZmluZSBERUNMQVJFX1ZJU0lUX09VVFBVVF9D
T05TVFJBSU5UU19XSVRIX01PRElGSUVSKHByZU1vZGlmaWVyKSBcCitwcml2YXRlOiBcCisgICAg
dGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gQUxXQVlTX0lOTElORSBzdGF0aWMgdm9pZCB2aXNp
dE91dHB1dENvbnN0cmFpbnRzSW1wbChKU0NlbGwqLCBWaXNpdG9yJik7IFwKK3B1YmxpYzogXAor
ICAgIHByZU1vZGlmaWVyIHN0YXRpYyB2b2lkIHZpc2l0T3V0cHV0Q29uc3RyYWludHMoSlNDZWxs
KiwgQWJzdHJhY3RTbG90VmlzaXRvciYpOyBcCisgICAgcHJlTW9kaWZpZXIgc3RhdGljIHZvaWQg
dmlzaXRPdXRwdXRDb25zdHJhaW50cyhKU0NlbGwqLCBTbG90VmlzaXRvciYpCisKKyNkZWZpbmUg
REVDTEFSRV9WSVNJVF9PVVRQVVRfQ09OU1RSQUlOVFMgXAorICAgIERFQ0xBUkVfVklTSVRfT1VU
UFVUX0NPTlNUUkFJTlRTX1dJVEhfTU9ESUZJRVIoVU5VU0VEX01PRElGSUVSX0FSR1VNRU5UKQor
CisjZGVmaW5lIERFRklORV9WSVNJVF9PVVRQVVRfQ09OU1RSQUlOVFNfV0lUSF9NT0RJRklFUihw
cmVNb2RpZmllciwgY2xhc3NOYW1lKSBcCisgICAgcHJlTW9kaWZpZXIgdm9pZCBjbGFzc05hbWU6
OnZpc2l0T3V0cHV0Q29uc3RyYWludHMoSlNDZWxsKiBjZWxsLCBBYnN0cmFjdFNsb3RWaXNpdG9y
JiB2aXNpdG9yKSBcCisgICAgeyBcCisgICAgICAgIEFic3RyYWN0U2xvdFZpc2l0b3I6OkNvbnRl
eHQgY29udGV4dCh2aXNpdG9yLCBjZWxsKTsgXAorICAgICAgICB2aXNpdE91dHB1dENvbnN0cmFp
bnRzSW1wbChjZWxsLCB2aXNpdG9yKTsgXAorICAgIH0gXAorICAgIHByZU1vZGlmaWVyIHZvaWQg
Y2xhc3NOYW1lOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0
b3ImIHZpc2l0b3IpIHsgdmlzaXRPdXRwdXRDb25zdHJhaW50c0ltcGwoY2VsbCwgdmlzaXRvcik7
IH0gXAorICAgIERFQ0xBUkVfVU5VU0VEX1NUUlVDVF9UT19URVJNSU5BVEVfVklTSVRfTUFDUk8K
KworI2RlZmluZSBERUZJTkVfVklTSVRfT1VUUFVUX0NPTlNUUkFJTlRTKGNsYXNzTmFtZSkgXAor
ICAgIERFRklORV9WSVNJVF9PVVRQVVRfQ09OU1RSQUlOVFNfV0lUSF9NT0RJRklFUihVTlVTRURf
TU9ESUZJRVJfQVJHVU1FTlQsIGNsYXNzTmFtZSkKKworLy8gTWFjcm9zIGZvciB2aXNpdEFkZGl0
aW9uYWxDaGlsZHJlbigpLgorCisjZGVmaW5lIERFRklORV9WSVNJVF9BRERJVElPTkFMX0NISUxE
UkVOKGNsYXNzTmFtZSkgXAorICAgIHRlbXBsYXRlIHZvaWQgY2xhc3NOYW1lOjp2aXNpdEFkZGl0
aW9uYWxDaGlsZHJlbihKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKTsgXAorICAgIHRlbXBsYXRl
IHZvaWQgY2xhc3NOYW1lOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9y
JikKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKK3VzaW5nIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRv
cjsKK3VzaW5nIEpTQzo6SlNDZWxsOwordXNpbmcgSlNDOjpTbG90VmlzaXRvcjsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N1YnNwYWNlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvU3Vic3BhY2UuaAkocmV2aXNpb24gMjczMTE5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3Vic3BhY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAxOCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTg2
LDggKzg2LDggQEAgcHVibGljOgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CiAgICAgdm9p
ZCBmb3JFYWNoTWFya2VkQ2VsbChjb25zdCBGdW5jJik7CiAgICAgCi0gICAgdGVtcGxhdGU8dHlw
ZW5hbWUgRnVuYz4KLSAgICBSZWY8U2hhcmVkVGFzazx2b2lkKFNsb3RWaXNpdG9yJik+PiBmb3JF
YWNoTWFya2VkQ2VsbEluUGFyYWxsZWwoY29uc3QgRnVuYyYpOworICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFZpc2l0b3IsIHR5cGVuYW1lIEZ1bmM+CisgICAgUmVmPFNoYXJlZFRhc2s8dm9pZChWaXNp
dG9yJik+PiBmb3JFYWNoTWFya2VkQ2VsbEluUGFyYWxsZWwoY29uc3QgRnVuYyYpOwogCiAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KICAgICB2b2lkIGZvckVhY2hMaXZlQ2VsbChjb25zdCBG
dW5jJik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdWJzcGFjZUlubGluZXMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdWJzcGFjZUlubGlu
ZXMuaAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3Vi
c3BhY2VJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDE3LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC04NSwxMCArODUsMTAgQEAgdm9pZCBT
dWJzcGFjZTo6Zm9yRWFjaE1hcmtlZENlbGwoY29uc3QgRgogICAgICAgICB9KTsKIH0KIAotdGVt
cGxhdGU8dHlwZW5hbWUgRnVuYz4KLVJlZjxTaGFyZWRUYXNrPHZvaWQoU2xvdFZpc2l0b3ImKT4+
IFN1YnNwYWNlOjpmb3JFYWNoTWFya2VkQ2VsbEluUGFyYWxsZWwoY29uc3QgRnVuYyYgZnVuYykK
K3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3IsIHR5cGVuYW1lIEZ1bmM+CitSZWY8U2hhcmVkVGFz
azx2b2lkKFZpc2l0b3ImKT4+IFN1YnNwYWNlOjpmb3JFYWNoTWFya2VkQ2VsbEluUGFyYWxsZWwo
Y29uc3QgRnVuYyYgZnVuYykKIHsKLSAgICBjbGFzcyBUYXNrIGZpbmFsIDogcHVibGljIFNoYXJl
ZFRhc2s8dm9pZChTbG90VmlzaXRvciYpPiB7CisgICAgY2xhc3MgVGFzayBmaW5hbCA6IHB1Ymxp
YyBTaGFyZWRUYXNrPHZvaWQoVmlzaXRvciYpPiB7CiAgICAgcHVibGljOgogICAgICAgICBUYXNr
KFN1YnNwYWNlJiBzdWJzcGFjZSwgY29uc3QgRnVuYyYgZnVuYykKICAgICAgICAgICAgIDogbV9z
dWJzcGFjZShzdWJzcGFjZSkKQEAgLTk3LDcgKzk3LDcgQEAgUmVmPFNoYXJlZFRhc2s8dm9pZChT
bG90VmlzaXRvciYpPj4gU3VicwogICAgICAgICB7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAg
ICAgIHZvaWQgcnVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBmaW5hbAorICAgICAgICB2b2lkIHJ1
bihWaXNpdG9yJiB2aXNpdG9yKSBmaW5hbAogICAgICAgICB7CiAgICAgICAgICAgICB3aGlsZSAo
TWFya2VkQmxvY2s6OkhhbmRsZSogaGFuZGxlID0gbV9ibG9ja1NvdXJjZS0+cnVuKCkpIHsKICAg
ICAgICAgICAgICAgICBoYW5kbGUtPmZvckVhY2hNYXJrZWRDZWxsKApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvVmVyaWZpZXJTbG90VmlzaXRvci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVmVyaWZpZXJTbG90VmlzaXRvci5jcHAJKG5vbmV4
aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVmVyaWZpZXJTbG90VmlzaXRv
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVmVyaWZpZXJTbG90VmlzaXRvci5oIgorCisjaW5j
bHVkZSAiQmxvY2tEaXJlY3RvcnlJbmxpbmVzLmgiCisjaW5jbHVkZSAiQ29uc2VydmF0aXZlUm9v
dHMuaCIKKyNpbmNsdWRlICJHQ1NlZ21lbnRlZEFycmF5SW5saW5lcy5oIgorI2luY2x1ZGUgIkhl
YXBDZWxsLmgiCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUgIlZNLmgiCisjaW5j
bHVkZSAiVmVyaWZpZXJTbG90VmlzaXRvcklubGluZXMuaCIKKyNpbmNsdWRlIDx3dGYvU3RhY2tU
cmFjZS5oPgorCituYW1lc3BhY2UgSlNDIHsKKwordXNpbmcgTWFya2VyRGF0YSA9IFZlcmlmaWVy
U2xvdFZpc2l0b3I6Ok1hcmtlckRhdGE7CisKK2NvbnN0ZXhwciBpbnQgbWF4TWFya2luZ1N0YWNr
RnJhbWVzVG9DYXB0dXJlID0gMTAwOworCitNYXJrZXJEYXRhOjpNYXJrZXJEYXRhKEhlYXBDZWxs
KiBwYXJlbnQsIHN0ZDo6dW5pcXVlX3B0cjxTdGFja1RyYWNlPiYmIHN0YWNrKQorICAgIDogcGFy
ZW50KHBhcmVudCkKKyAgICAsIHN0YWNrKFdURk1vdmUoc3RhY2spKQoreworfQorCitWZXJpZmll
clNsb3RWaXNpdG9yOjpNYXJrZWRCbG9ja0RhdGE6Ok1hcmtlZEJsb2NrRGF0YShNYXJrZWRCbG9j
ayogYmxvY2spCisgICAgOiBtX2Jsb2NrKGJsb2NrKQoreworfQorCit2b2lkIFZlcmlmaWVyU2xv
dFZpc2l0b3I6Ok1hcmtlZEJsb2NrRGF0YTo6YWRkTWFya2VyRGF0YSh1bnNpZ25lZCBhdG9tTnVt
YmVyLCBNYXJrZXJEYXRhJiYgbWFya2VyKQoreworICAgIGlmIChtX21hcmtlcnMuaXNFbXB0eSgp
KQorICAgICAgICBtX21hcmtlcnMuZ3JvdyhNYXJrZWRCbG9jazo6YXRvbXNQZXJCbG9jayk7Cisg
ICAgbV9tYXJrZXJzW2F0b21OdW1iZXJdID0gV1RGTW92ZShtYXJrZXIpOworfQorCitjb25zdCBN
YXJrZXJEYXRhKiBWZXJpZmllclNsb3RWaXNpdG9yOjpNYXJrZWRCbG9ja0RhdGE6Om1hcmtlckRh
dGEodW5zaWduZWQgYXRvbU51bWJlcikgY29uc3QKK3sKKyAgICBhdXRvJiBtYXJrZXIgPSBtX21h
cmtlcnNbYXRvbU51bWJlcl07CisgICAgaWYgKG1hcmtlci5zdGFjaykKKyAgICAgICAgcmV0dXJu
ICZtYXJrZXI7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK1ZlcmlmaWVyU2xvdFZpc2l0b3I6
OlByZWNpc2VBbGxvY2F0aW9uRGF0YTo6UHJlY2lzZUFsbG9jYXRpb25EYXRhKFByZWNpc2VBbGxv
Y2F0aW9uKiBhbGxvY2F0aW9uKQorICAgIDogbV9hbGxvY2F0aW9uKGFsbG9jYXRpb24pCit7Cit9
CisKK2NvbnN0IE1hcmtlckRhdGEqIFZlcmlmaWVyU2xvdFZpc2l0b3I6OlByZWNpc2VBbGxvY2F0
aW9uRGF0YTo6bWFya2VyRGF0YSgpIGNvbnN0Cit7CisgICAgaWYgKG1fbWFya2VyLnN0YWNrKQor
ICAgICAgICByZXR1cm4gJm1fbWFya2VyOworICAgIHJldHVybiBudWxscHRyOworfQorCit2b2lk
IFZlcmlmaWVyU2xvdFZpc2l0b3I6OlByZWNpc2VBbGxvY2F0aW9uRGF0YTo6YWRkTWFya2VyRGF0
YShNYXJrZXJEYXRhJiYgbWFya2VyKQoreworICAgIG1fbWFya2VyID0gV1RGTW92ZShtYXJrZXIp
OworfQorCitWZXJpZmllclNsb3RWaXNpdG9yOjpWZXJpZmllclNsb3RWaXNpdG9yKEhlYXAmIGhl
YXApCisgICAgOiBCYXNlKGhlYXAsICJWZXJpZmllciIsIG1fb3BhcXVlUm9vdFN0b3JhZ2UpCit7
Cit9CisKK1ZlcmlmaWVyU2xvdFZpc2l0b3I6On5WZXJpZmllclNsb3RWaXNpdG9yKCkKK3sKKyAg
ICBoZWFwKCktPm9iamVjdFNwYWNlKCkuZm9yRWFjaEJsb2NrKAorICAgICAgICBbJl0gKE1hcmtl
ZEJsb2NrOjpIYW5kbGUqIGhhbmRsZSkgeworICAgICAgICAgICAgaGFuZGxlLT5ibG9jaygpLnNl
dFZlcmlmaWVyTWVtbyhudWxscHRyKTsKKyAgICAgICAgfSk7Cit9CisKK3ZvaWQgVmVyaWZpZXJT
bG90VmlzaXRvcjo6YWRkUGFyYWxsZWxDb25zdHJhaW50VGFzayhSZWZQdHI8U2hhcmVkVGFzazx2
b2lkKEFic3RyYWN0U2xvdFZpc2l0b3ImKT4+IHRhc2spCit7CisgICAgbV9jb25zdHJhaW50VGFz
a3MuYXBwZW5kKFdURk1vdmUodGFzaykpOworfQorCitOT19SRVRVUk5fRFVFX1RPX0NSQVNIIHZv
aWQgVmVyaWZpZXJTbG90VmlzaXRvcjo6YWRkUGFyYWxsZWxDb25zdHJhaW50VGFzayhSZWZQdHI8
U2hhcmVkVGFzazx2b2lkKFNsb3RWaXNpdG9yJik+PikKK3sKKyAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOworfQorCit2b2lkIFZlcmlmaWVyU2xvdFZpc2l0b3I6OmV4ZWN1dGVDb25z
dHJhaW50VGFza3MoKQoreworICAgIHdoaWxlICghbV9jb25zdHJhaW50VGFza3MuaXNFbXB0eSgp
KQorICAgICAgICBtX2NvbnN0cmFpbnRUYXNrcy50YWtlRmlyc3QoKS0+cnVuKCp0aGlzKTsKK30K
Kwordm9pZCBWZXJpZmllclNsb3RWaXNpdG9yOjphcHBlbmQoY29uc3QgQ29uc2VydmF0aXZlUm9v
dHMmIGNvbnNlcnZhdGl2ZVJvb3RzKQoreworICAgIGF1dG8gYXBwZW5kSlNDZWxsT3JBdXhpbGlh
cnkgPSBbJl0gKEhlYXBDZWxsKiBoZWFwQ2VsbCkgeworICAgICAgICBpZiAoIWhlYXBDZWxsKQor
ICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGlmICh0ZXN0QW5kU2V0TWFya2VkKGhlYXBD
ZWxsKSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBzd2l0Y2ggKGhlYXBDZWxsLT5j
ZWxsS2luZCgpKSB7CisgICAgICAgIGNhc2UgSGVhcENlbGw6OkpTQ2VsbDoKKyAgICAgICAgY2Fz
ZSBIZWFwQ2VsbDo6SlNDZWxsV2l0aEluZGV4aW5nSGVhZGVyOiB7CisgICAgICAgICAgICBKU0Nl
bGwqIGpzQ2VsbCA9IHN0YXRpY19jYXN0PEpTQ2VsbCo+KGhlYXBDZWxsKTsKKyAgICAgICAgICAg
IGFwcGVuZFRvTWFya1N0YWNrKGpzQ2VsbCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKworICAgICAgICBjYXNlIEhlYXBDZWxsOjpBdXhpbGlhcnk6CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKyAgICB9OworCisgICAgSGVhcENlbGwqKiByb290cyA9IGNvbnNlcnZh
dGl2ZVJvb3RzLnJvb3RzKCk7CisgICAgc2l6ZV90IHNpemUgPSBjb25zZXJ2YXRpdmVSb290cy5z
aXplKCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpCisgICAgICAgIGFw
cGVuZEpTQ2VsbE9yQXV4aWxpYXJ5KHJvb3RzW2ldKTsKK30KKwordm9pZCBWZXJpZmllclNsb3RW
aXNpdG9yOjphcHBlbmRUb01hcmtTdGFjayhKU0NlbGwqIGNlbGwpCit7CisgICAgQVNTRVJUKCFj
ZWxsLT5pc1phcHBlZCgpKTsKKyAgICBtX2NvbGxlY3RvclN0YWNrLmFwcGVuZChjZWxsKTsKK30K
Kwordm9pZCBWZXJpZmllclNsb3RWaXNpdG9yOjphcHBlbmRVbmJhcnJpZXJlZChKU0NlbGwqIGNl
bGwpCit7CisgICAgaWYgKCFjZWxsKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoVU5MSUtF
TFkoY2VsbC0+aXNQcmVjaXNlQWxsb2NhdGlvbigpKSkgeworICAgICAgICBpZiAoTElLRUxZKGlz
TWFya2VkKGNlbGwtPnByZWNpc2VBbGxvY2F0aW9uKCksIGNlbGwpKSkKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICB9IGVsc2UgeworICAgICAgICBNYXJrZWRCbG9jayYgYmxvY2sgPSBjZWxsLT5t
YXJrZWRCbG9jaygpOworICAgICAgICBpZiAoTElLRUxZKGlzTWFya2VkKGJsb2NrLCBjZWxsKSkp
CisgICAgICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgYXBwZW5kU2xvdyhjZWxsKTsKK30K
Kwordm9pZCBWZXJpZmllclNsb3RWaXNpdG9yOjphcHBlbmRIaWRkZW5VbmJhcnJpZXJlZChKU0Nl
bGwqIGNlbGwpCit7CisgICAgYXBwZW5kVW5iYXJyaWVyZWQoY2VsbCk7Cit9CisKK3ZvaWQgVmVy
aWZpZXJTbG90VmlzaXRvcjo6ZHJhaW4oKQoreworICAgIFJFTEVBU0VfQVNTRVJUKG1fbXV0YXRv
clN0YWNrLmlzRW1wdHkoKSk7CisKKyAgICBNYXJrU3RhY2tBcnJheSYgc3RhY2sgPSBtX2NvbGxl
Y3RvclN0YWNrOworICAgIGlmIChzdGFjay5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIHN0YWNrLnJlZmlsbCgpOworICAgIHdoaWxlIChzdGFjay5jYW5SZW1vdmVMYXN0KCkpCisg
ICAgICAgIHZpc2l0Q2hpbGRyZW4oc3RhY2sucmVtb3ZlTGFzdCgpKTsKK30KKwordm9pZCBWZXJp
ZmllclNsb3RWaXNpdG9yOjpkdW1wTWFya2VyRGF0YShIZWFwQ2VsbCogY2VsbCkKK3sKKyAgICBp
ZiAoY2VsbC0+aXNQcmVjaXNlQWxsb2NhdGlvbigpKQorICAgICAgICByZXR1cm4gZHVtcE1hcmtl
ckRhdGEoY2VsbC0+cHJlY2lzZUFsbG9jYXRpb24oKSwgY2VsbCk7CisgICAgcmV0dXJuIGR1bXBN
YXJrZXJEYXRhKGNlbGwtPm1hcmtlZEJsb2NrKCksIGNlbGwpOworfQorCit2b2lkIFZlcmlmaWVy
U2xvdFZpc2l0b3I6OmR1bXBNYXJrZXJEYXRhKFByZWNpc2VBbGxvY2F0aW9uJiBhbGxvY2F0aW9u
LCBIZWFwQ2VsbCogY2VsbCkKK3sKKyAgICBhdXRvIGl0ZXJhdG9yID0gbV9wcmVjaXNlQWxsb2Nh
dGlvbk1hcC5maW5kKCZhbGxvY2F0aW9uKTsKKyAgICBpZiAoaXRlcmF0b3IgIT0gbV9wcmVjaXNl
QWxsb2NhdGlvbk1hcC5lbmQoKSkgeworICAgICAgICBkdW1wTWFya2VyRGF0YShjZWxsLCBpdGVy
YXRvci0+dmFsdWUtPm1hcmtlckRhdGEoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAg
ZGF0YUxvZ0xuKCJDZWxsICIsIFJhd1BvaW50ZXIoY2VsbCksICIgbm90IGZvdW5kIik7Cit9CisK
K3ZvaWQgVmVyaWZpZXJTbG90VmlzaXRvcjo6ZHVtcE1hcmtlckRhdGEoTWFya2VkQmxvY2smIGJs
b2NrLCBIZWFwQ2VsbCogY2VsbCkKK3sKKyAgICBhdXRvIGl0ZXJhdG9yID0gbV9tYXJrZWRCbG9j
a01hcC5maW5kKCZibG9jayk7CisgICAgaWYgKGl0ZXJhdG9yICE9IG1fbWFya2VkQmxvY2tNYXAu
ZW5kKCkpIHsKKyAgICAgICAgdW5zaWduZWQgYXRvbU51bWJlciA9IGJsb2NrLmF0b21OdW1iZXIo
Y2VsbCk7CisgICAgICAgIGR1bXBNYXJrZXJEYXRhKGNlbGwsIGl0ZXJhdG9yLT52YWx1ZS0+bWFy
a2VyRGF0YShhdG9tTnVtYmVyKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgZGF0YUxv
Z0xuKCJDZWxsICIsIFJhd1BvaW50ZXIoY2VsbCksICIgbm90IGZvdW5kIik7Cit9CisKK3ZvaWQg
VmVyaWZpZXJTbG90VmlzaXRvcjo6ZHVtcE1hcmtlckRhdGEoSGVhcENlbGwqIGNlbGwsIGNvbnN0
IE1hcmtlckRhdGEqIG1hcmtlcikKK3sKKyAgICBpZiAoIW1hcmtlcikgeworICAgICAgICBkYXRh
TG9nTG4oIk1hcmtlciBkYXRhIGlzIG5vdCBhdmFpbGFibGUgZm9yIGNlbGwgIiwgUmF3UG9pbnRl
cihjZWxsKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBkYXRhTG9nTG4oIkNlbGwg
IiwgUmF3UG9pbnRlcihjZWxsKSwgIiB3YXMgcmVhY2hhYmxlIHZpYSBjZWxsICIsIFJhd1BvaW50
ZXIobWFya2VyLT5wYXJlbnQpLCAiIGF0OiIpOworICAgIG1hcmtlci0+c3RhY2stPmR1bXAoV1RG
OjpkYXRhRmlsZSgpLCAiICAgICIpOworfQorCitib29sIFZlcmlmaWVyU2xvdFZpc2l0b3I6Omlz
Rmlyc3RWaXNpdCgpIGNvbnN0Cit7CisgICAgLy8gSW4gdGhlIHJlZ3VsYXIgR0MsIHRoaXMgcmV0
dXJuIHZhbHVlIGlzIG9ubHkgdXNlZCB0byBjb250cm9sIHdoZXRoZXIKKyAgICAvLyBVbmxpbmtl
ZENvZGVCbG9ja3Mgd2lsbCBiZSBhZ2VkIChzZWUgVW5saW5rZWRDb2RlQmxvY2s6OnZpc2l0Q2hp
bGRyZW5JbXBsKCkpLgorICAgIC8vIEZvciB0aGUgdmVyaWZpZXIgR0MgcGFzcywgd2Ugc2hvdWxk
IGFsd2F5cyByZXR1cm4gZmFsc2UgYmVjYXVzZSB3ZSBkb24ndAorICAgIC8vIHdhbnQgdG8gZG8g
dGhlIGFnaW5nIGFjdGlvbiBhZ2Fpbi4KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgVmVy
aWZpZXJTbG90VmlzaXRvcjo6aXNNYXJrZWQoY29uc3Qgdm9pZCogcmF3Q2VsbCkgY29uc3QKK3sK
KyAgICBIZWFwQ2VsbCogY2VsbCA9IGJpdHdpc2VfY2FzdDxIZWFwQ2VsbCo+KHJhd0NlbGwpOwor
ICAgIGlmIChjZWxsLT5pc1ByZWNpc2VBbGxvY2F0aW9uKCkpCisgICAgICAgIHJldHVybiBpc01h
cmtlZChjZWxsLT5wcmVjaXNlQWxsb2NhdGlvbigpLCBjZWxsKTsKKyAgICByZXR1cm4gaXNNYXJr
ZWQoY2VsbC0+bWFya2VkQmxvY2soKSwgY2VsbCk7Cit9CisKK2Jvb2wgVmVyaWZpZXJTbG90Vmlz
aXRvcjo6aXNNYXJrZWQoUHJlY2lzZUFsbG9jYXRpb24mIGFsbG9jYXRpb24sIEhlYXBDZWxsKikg
Y29uc3QKK3sKKyAgICByZXR1cm4gbV9wcmVjaXNlQWxsb2NhdGlvbk1hcC5jb250YWlucygmYWxs
b2NhdGlvbik7Cit9CisKK2Jvb2wgVmVyaWZpZXJTbG90VmlzaXRvcjo6aXNNYXJrZWQoTWFya2Vk
QmxvY2smIGJsb2NrLCBIZWFwQ2VsbCogY2VsbCkgY29uc3QKK3sKKyAgICBhdXRvIGVudHJ5ID0g
bV9tYXJrZWRCbG9ja01hcC5maW5kKCZibG9jayk7CisgICAgaWYgKGVudHJ5ID09IG1fbWFya2Vk
QmxvY2tNYXAuZW5kKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8mIGRhdGEg
PSBlbnRyeS0+dmFsdWU7CisgICAgdW5zaWduZWQgYXRvbU51bWJlciA9IGJsb2NrLmF0b21OdW1i
ZXIoY2VsbCk7CisgICAgcmV0dXJuIGRhdGEtPmlzTWFya2VkKGF0b21OdW1iZXIpOworfQorCit2
b2lkIFZlcmlmaWVyU2xvdFZpc2l0b3I6Om1hcmtBdXhpbGlhcnkoY29uc3Qgdm9pZCogYmFzZSkK
K3sKKyAgICBIZWFwQ2VsbCogY2VsbCA9IGJpdHdpc2VfY2FzdDxIZWFwQ2VsbCo+KGJhc2UpOwor
CisgICAgQVNTRVJUKGNlbGwtPmhlYXAoKSA9PSBoZWFwKCkpOworICAgIHRlc3RBbmRTZXRNYXJr
ZWQoY2VsbCk7Cit9CisKK2Jvb2wgVmVyaWZpZXJTbG90VmlzaXRvcjo6bXV0YXRvcklzU3RvcHBl
ZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgVmVyaWZpZXJTbG90Vmlz
aXRvcjo6dGVzdEFuZFNldE1hcmtlZChjb25zdCB2b2lkKiByYXdDZWxsKQoreworICAgIEhlYXBD
ZWxsKiBjZWxsID0gYml0d2lzZV9jYXN0PEhlYXBDZWxsKj4ocmF3Q2VsbCk7CisgICAgaWYgKGNl
bGwtPmlzUHJlY2lzZUFsbG9jYXRpb24oKSkKKyAgICAgICAgcmV0dXJuIHRlc3RBbmRTZXRNYXJr
ZWQoY2VsbC0+cHJlY2lzZUFsbG9jYXRpb24oKSk7CisgICAgcmV0dXJuIHRlc3RBbmRTZXRNYXJr
ZWQoY2VsbC0+bWFya2VkQmxvY2soKSwgY2VsbCk7Cit9CisKK2Jvb2wgVmVyaWZpZXJTbG90Vmlz
aXRvcjo6dGVzdEFuZFNldE1hcmtlZChQcmVjaXNlQWxsb2NhdGlvbiYgYWxsb2NhdGlvbikKK3sK
KyAgICBzdGQ6OnVuaXF1ZV9wdHI8UHJlY2lzZUFsbG9jYXRpb25EYXRhPiYgZGF0YSA9IG1fcHJl
Y2lzZUFsbG9jYXRpb25NYXAuYWRkKCZhbGxvY2F0aW9uLCBudWxscHRyKS5pdGVyYXRvci0+dmFs
dWU7CisgICAgaWYgKCFkYXRhKSB7CisgICAgICAgIGRhdGEgPSBtYWtlVW5pcXVlPFByZWNpc2VB
bGxvY2F0aW9uRGF0YT4oJmFsbG9jYXRpb24pOworICAgICAgICBpZiAoVU5MSUtFTFkoT3B0aW9u
czo6dmVyYm9zZVZlcmlmeUdDKCkpKQorICAgICAgICAgICAgZGF0YS0+YWRkTWFya2VyRGF0YSh7
IHBhcmVudENlbGwoKSwgU3RhY2tUcmFjZTo6Y2FwdHVyZVN0YWNrVHJhY2UobWF4TWFya2luZ1N0
YWNrRnJhbWVzVG9DYXB0dXJlLCAyKSB9KTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBWZXJpZmllclNsb3RWaXNpdG9yOjp0ZXN0QW5k
U2V0TWFya2VkKE1hcmtlZEJsb2NrJiBibG9jaywgSGVhcENlbGwqIGNlbGwpCit7CisgICAgTWFy
a2VkQmxvY2tEYXRhKiBkYXRhID0gYmxvY2sudmVyaWZpZXJNZW1vPE1hcmtlZEJsb2NrRGF0YSo+
KCk7CisgICAgaWYgKFVOTElLRUxZKCFkYXRhKSkgeworICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8
TWFya2VkQmxvY2tEYXRhPiYgZW50cnlEYXRhID0gbV9tYXJrZWRCbG9ja01hcC5hZGQoJmJsb2Nr
LCBudWxscHRyKS5pdGVyYXRvci0+dmFsdWU7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFlbnRy
eURhdGEpOworICAgICAgICBlbnRyeURhdGEgPSBtYWtlVW5pcXVlPE1hcmtlZEJsb2NrRGF0YT4o
JmJsb2NrKTsKKyAgICAgICAgZGF0YSA9IGVudHJ5RGF0YS5nZXQoKTsKKyAgICAgICAgYmxvY2su
c2V0VmVyaWZpZXJNZW1vKGRhdGEpOworICAgIH0KKworICAgIHVuc2lnbmVkIGF0b21OdW1iZXIg
PSBibG9jay5hdG9tTnVtYmVyKGNlbGwpOworICAgIGJvb2wgYWxyZWFkeVNldCA9IGRhdGEtPnRl
c3RBbmRTZXRNYXJrZWQoYXRvbU51bWJlcik7CisgICAgaWYgKCFhbHJlYWR5U2V0ICYmIFVOTElL
RUxZKE9wdGlvbnM6OnZlcmJvc2VWZXJpZnlHQygpKSkKKyAgICAgICAgZGF0YS0+YWRkTWFya2Vy
RGF0YShhdG9tTnVtYmVyLCB7IHBhcmVudENlbGwoKSwgU3RhY2tUcmFjZTo6Y2FwdHVyZVN0YWNr
VHJhY2UobWF4TWFya2luZ1N0YWNrRnJhbWVzVG9DYXB0dXJlLCAyKSB9KTsKKyAgICByZXR1cm4g
YWxyZWFkeVNldDsKK30KKwordm9pZCBWZXJpZmllclNsb3RWaXNpdG9yOjpzZXRNYXJrZWRBbmRB
cHBlbmRUb01hcmtTdGFjayhKU0NlbGwqIGNlbGwpCit7CisgICAgaWYgKG1fc3VwcHJlc3NWZXJp
ZmllcikKKyAgICAgICAgcmV0dXJuOworICAgIGlmICh0ZXN0QW5kU2V0TWFya2VkKGNlbGwpKQor
ICAgICAgICByZXR1cm47CisgICAgYXBwZW5kVG9NYXJrU3RhY2soY2VsbCk7Cit9CisKK3ZvaWQg
VmVyaWZpZXJTbG90VmlzaXRvcjo6dmlzaXRBc0NvbnN0cmFpbnQoY29uc3QgSlNDZWxsKiBjZWxs
KQoreworICAgIHZpc2l0Q2hpbGRyZW4oY2VsbCk7Cit9CisKK3ZvaWQgVmVyaWZpZXJTbG90Vmlz
aXRvcjo6dmlzaXRDaGlsZHJlbihjb25zdCBKU0NlbGwqIGNlbGwpCit7CisgICAgUkVMRUFTRV9B
U1NFUlQoaXNNYXJrZWQoY2VsbCkpOworICAgIHN3aXRjaCAoY2VsbC0+dHlwZSgpKSB7CisgICAg
Y2FzZSBTdHJpbmdUeXBlOgorICAgICAgICBKU1N0cmluZzo6dmlzaXRDaGlsZHJlbihjb25zdF9j
YXN0PEpTQ2VsbCo+KGNlbGwpLCAqdGhpcyk7CisgICAgICAgIGJyZWFrOworICAgICAgICAKKyAg
ICBjYXNlIEZpbmFsT2JqZWN0VHlwZToKKyAgICAgICAgSlNGaW5hbE9iamVjdDo6dmlzaXRDaGls
ZHJlbihjb25zdF9jYXN0PEpTQ2VsbCo+KGNlbGwpLCAqdGhpcyk7CisgICAgICAgIGJyZWFrOwor
CisgICAgY2FzZSBBcnJheVR5cGU6CisgICAgICAgIEpTQXJyYXk6OnZpc2l0Q2hpbGRyZW4oY29u
c3RfY2FzdDxKU0NlbGwqPihjZWxsKSwgKnRoaXMpOworICAgICAgICBicmVhazsKKyAgICAgICAg
CisgICAgZGVmYXVsdDoKKyAgICAgICAgLy8gRklYTUU6IFRoaXMgY291bGQgYmUgc28gbXVjaCBi
ZXR0ZXIuCisgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNjI0NjIKKyAgICAgICAgY2VsbC0+bWV0aG9kVGFibGUodm0oKSktPnZpc2l0Q2hpbGRyZW4o
Y29uc3RfY2FzdDxKU0NlbGwqPihjZWxsKSwgKnRoaXMpOworICAgICAgICBicmVhazsKKyAgICB9
Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvVmVyaWZpZXJTbG90VmlzaXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL1ZlcmlmaWVyU2xvdFZpc2l0b3IuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9WZXJpZmllclNsb3RWaXNpdG9yLmgJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwxNzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkFic3RyYWN0U2xvdFZpc2l0b3IuaCIK
KyNpbmNsdWRlICJKU0NKU1ZhbHVlLmgiCisjaW5jbHVkZSAiTWFya2VkQmxvY2suaCIKKyNpbmNs
dWRlICJWaXNpdFJhY2VLZXkuaCIKKyNpbmNsdWRlICJXZWFrLmgiCisjaW5jbHVkZSA8bWVtb3J5
PgorI2luY2x1ZGUgPHd0Zi9CaXRtYXAuaD4KKyNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KKyNpbmNs
dWRlIDx3dGYvRmFzdE1hbGxvYy5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVk
ZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9TaGFyZWRUYXNrLmg+CisKK25hbWVzcGFj
ZSBXVEYgeworCitjbGFzcyBTdGFja1RyYWNlOworCit9IC8vIG5hbWVzcGFjZSBXVEYKKworbmFt
ZXNwYWNlIEpTQyB7CisKK2NsYXNzIENvbnNlcnZhdGl2ZVJvb3RzOworY2xhc3MgSGVhcDsKK2Ns
YXNzIEhlYXBDZWxsOworY2xhc3MgUHJlY2lzZUFsbG9jYXRpb247CisKK3VzaW5nIFdURjo6U3Rh
Y2tUcmFjZTsKKworY2xhc3MgVmVyaWZpZXJTbG90VmlzaXRvciA6IHB1YmxpYyBBYnN0cmFjdFNs
b3RWaXNpdG9yIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShWZXJpZmllclNsb3RWaXNpdG9y
KTsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKKyAgICB1c2luZyBCYXNlID0gQWJzdHJh
Y3RTbG90VmlzaXRvcjsKK3B1YmxpYzoKKyAgICBzdHJ1Y3QgTWFya2VyRGF0YSB7CisgICAgICAg
IE1hcmtlckRhdGEoKSA9IGRlZmF1bHQ7CisgICAgICAgIE1hcmtlckRhdGEoTWFya2VyRGF0YSYm
KSA9IGRlZmF1bHQ7CisgICAgICAgIE1hcmtlckRhdGEoSGVhcENlbGwqLCBzdGQ6OnVuaXF1ZV9w
dHI8U3RhY2tUcmFjZT4mJik7CisgICAgICAgIE1hcmtlckRhdGEmIG9wZXJhdG9yPShNYXJrZXJE
YXRhJiYpID0gZGVmYXVsdDsKKworICAgICAgICBIZWFwQ2VsbCogcGFyZW50IHsgbnVsbHB0ciB9
OworICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8U3RhY2tUcmFjZT4gc3RhY2s7CisgICAgfTsKKwor
ICAgIFZlcmlmaWVyU2xvdFZpc2l0b3IoSGVhcCYpOworICAgIH5WZXJpZmllclNsb3RWaXNpdG9y
KCk7CisKKyAgICB2b2lkIGFwcGVuZChjb25zdCBDb25zZXJ2YXRpdmVSb290cyYpIGZpbmFsOwor
ICAgIHZvaWQgYXBwZW5kVW5iYXJyaWVyZWQoSlNDZWxsKikgZmluYWw7CisgICAgdm9pZCBhcHBl
bmRIaWRkZW5VbmJhcnJpZXJlZChKU0NlbGwqKSBmaW5hbDsKKworICAgIGJvb2wgaXNGaXJzdFZp
c2l0KCkgY29uc3QgZmluYWw7CisgICAgYm9vbCBpc01hcmtlZChjb25zdCB2b2lkKikgY29uc3Qg
ZmluYWw7CisgICAgYm9vbCBpc01hcmtlZChNYXJrZWRCbG9jayYsIEhlYXBDZWxsKikgY29uc3Qg
ZmluYWw7CisgICAgYm9vbCBpc01hcmtlZChQcmVjaXNlQWxsb2NhdGlvbiYsIEhlYXBDZWxsKikg
Y29uc3QgZmluYWw7CisKKyAgICB2b2lkIG1hcmtBdXhpbGlhcnkoY29uc3Qgdm9pZCopIGZpbmFs
OworCisgICAgdm9pZCByZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQoc2l6ZV90KSBmaW5hbCB7IH0K
KyNpZiBFTkFCTEUoUkVTT1VSQ0VfVVNBR0UpCisgICAgdm9pZCByZXBvcnRFeHRlcm5hbE1lbW9y
eVZpc2l0ZWQoc2l6ZV90KSBmaW5hbCB7IH0KKyNlbmRpZgorCisgICAgYm9vbCBtdXRhdG9ySXNT
dG9wcGVkKCkgY29uc3QgZmluYWw7CisKKyAgICB2b2lkIGRpZFJhY2UoY29uc3QgVmlzaXRSYWNl
S2V5JikgZmluYWwgeyB9CisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3QgZmluYWwg
eyB9CisKKyAgICB2b2lkIHZpc2l0QXNDb25zdHJhaW50KGNvbnN0IEpTQ2VsbCopIGZpbmFsOwor
CisgICAgdm9pZCBkcmFpbigpOworCisgICAgdm9pZCBhZGRQYXJhbGxlbENvbnN0cmFpbnRUYXNr
KFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoQWJzdHJhY3RTbG90VmlzaXRvciYpPj4pIGZpbmFsOwor
ICAgIE5PX1JFVFVSTl9EVUVfVE9fQ1JBU0ggdm9pZCBhZGRQYXJhbGxlbENvbnN0cmFpbnRUYXNr
KFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoU2xvdFZpc2l0b3ImKT4+KSBmaW5hbDsKKyAgICB2b2lk
IGV4ZWN1dGVDb25zdHJhaW50VGFza3MoKTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0
b3I+IHZvaWQgZm9yRWFjaExpdmVDZWxsKGNvbnN0IEZ1bmN0b3ImKTsKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hMaXZlUHJlY2lzZUFsbG9jYXRpb24oY29uc3Qg
RnVuY3RvciYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaExp
dmVNYXJrZWRCbG9ja0NlbGwoY29uc3QgRnVuY3RvciYpOworCisgICAgSlNfRVhQT1JUX1BSSVZB
VEUgdm9pZCBkdW1wTWFya2VyRGF0YShIZWFwQ2VsbCopOworCitwcml2YXRlOgorICAgIGNsYXNz
IE1hcmtlZEJsb2NrRGF0YSB7CisgICAgICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworICAg
ICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShNYXJrZWRCbG9ja0RhdGEpOworICAgIHB1YmxpYzoK
KyAgICAgICAgdXNpbmcgQXRvbXNCaXRtYXAgPSBCaXRtYXA8TWFya2VkQmxvY2s6OmF0b21zUGVy
QmxvY2s+OworCisgICAgICAgIE1hcmtlZEJsb2NrRGF0YShNYXJrZWRCbG9jayopOworCisgICAg
ICAgIE1hcmtlZEJsb2NrKiBibG9jaygpIGNvbnN0IHsgcmV0dXJuIG1fYmxvY2s7IH0KKyAgICAg
ICAgY29uc3QgQXRvbXNCaXRtYXAmIGF0b21zKCkgY29uc3QgeyByZXR1cm4gbV9hdG9tczsgfQor
CisgICAgICAgIGJvb2wgaXNNYXJrZWQodW5zaWduZWQgYXRvbU51bWJlcikgeyByZXR1cm4gbV9h
dG9tcy5nZXQoYXRvbU51bWJlcik7IH0KKyAgICAgICAgYm9vbCB0ZXN0QW5kU2V0TWFya2VkKHVu
c2lnbmVkIGF0b21OdW1iZXIpIHsgcmV0dXJuIG1fYXRvbXMudGVzdEFuZFNldChhdG9tTnVtYmVy
KTsgfQorCisgICAgICAgIHZvaWQgYWRkTWFya2VyRGF0YSh1bnNpZ25lZCBhdG9tTnVtYmVyLCBN
YXJrZXJEYXRhJiYpOworICAgICAgICBjb25zdCBNYXJrZXJEYXRhKiBtYXJrZXJEYXRhKHVuc2ln
bmVkIGF0b21OdW1iZXIpIGNvbnN0OworCisgICAgcHJpdmF0ZToKKyAgICAgICAgTWFya2VkQmxv
Y2sqIG1fYmxvY2sgeyBudWxscHRyIH07CisgICAgICAgIEF0b21zQml0bWFwIG1fYXRvbXM7Cisg
ICAgICAgIFZlY3RvcjxNYXJrZXJEYXRhPiBtX21hcmtlcnM7CisgICAgfTsKKworICAgIGNsYXNz
IFByZWNpc2VBbGxvY2F0aW9uRGF0YSB7CisgICAgICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OworICAgICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShQcmVjaXNlQWxsb2NhdGlvbkRhdGEpOwor
ICAgIHB1YmxpYzoKKyAgICAgICAgUHJlY2lzZUFsbG9jYXRpb25EYXRhKFByZWNpc2VBbGxvY2F0
aW9uKik7CisgICAgICAgIFByZWNpc2VBbGxvY2F0aW9uKiBhbGxvY2F0aW9uKCkgY29uc3QgeyBy
ZXR1cm4gbV9hbGxvY2F0aW9uOyB9CisKKyAgICAgICAgdm9pZCBhZGRNYXJrZXJEYXRhKE1hcmtl
ckRhdGEmJik7CisgICAgICAgIGNvbnN0IE1hcmtlckRhdGEqIG1hcmtlckRhdGEoKSBjb25zdDsK
KworICAgIHByaXZhdGU6CisgICAgICAgIFByZWNpc2VBbGxvY2F0aW9uKiBtX2FsbG9jYXRpb24g
eyBudWxscHRyIH07CisgICAgICAgIE1hcmtlckRhdGEgbV9tYXJrZXI7CisgICAgfTsKKworICAg
IHVzaW5nIE1hcmtlZEJsb2NrTWFwID0gSGFzaE1hcDxNYXJrZWRCbG9jayosIHN0ZDo6dW5pcXVl
X3B0cjxNYXJrZWRCbG9ja0RhdGE+PjsKKyAgICB1c2luZyBQcmVjaXNlQWxsb2NhdGlvbk1hcCA9
IEhhc2hNYXA8UHJlY2lzZUFsbG9jYXRpb24qLCBzdGQ6OnVuaXF1ZV9wdHI8UHJlY2lzZUFsbG9j
YXRpb25EYXRhPj47CisKKyAgICB2b2lkIGFwcGVuZFRvTWFya1N0YWNrKEpTQ2VsbCopOworICAg
IHZvaWQgYXBwZW5kU2xvdyhKU0NlbGwqIGNlbGwpIHsgc2V0TWFya2VkQW5kQXBwZW5kVG9NYXJr
U3RhY2soY2VsbCk7IH0KKworICAgIGJvb2wgdGVzdEFuZFNldE1hcmtlZChjb25zdCB2b2lkKiBy
YXdDZWxsKTsKKyAgICBib29sIHRlc3RBbmRTZXRNYXJrZWQoUHJlY2lzZUFsbG9jYXRpb24mKTsK
KyAgICBib29sIHRlc3RBbmRTZXRNYXJrZWQoTWFya2VkQmxvY2smLCBIZWFwQ2VsbCopOworCisg
ICAgdm9pZCBzZXRNYXJrZWRBbmRBcHBlbmRUb01hcmtTdGFjayhKU0NlbGwqKTsKKworICAgIHZv
aWQgdmlzaXRDaGlsZHJlbihjb25zdCBKU0NlbGwqKTsKKworICAgIHZvaWQgZHVtcE1hcmtlckRh
dGEoUHJlY2lzZUFsbG9jYXRpb24mLCBIZWFwQ2VsbCopOworICAgIHZvaWQgZHVtcE1hcmtlckRh
dGEoTWFya2VkQmxvY2smLCBIZWFwQ2VsbCopOworICAgIHZvaWQgZHVtcE1hcmtlckRhdGEoSGVh
cENlbGwqLCBjb25zdCBNYXJrZXJEYXRhKik7CisKKyAgICBQcmVjaXNlQWxsb2NhdGlvbk1hcCBt
X3ByZWNpc2VBbGxvY2F0aW9uTWFwOworICAgIE1hcmtlZEJsb2NrTWFwIG1fbWFya2VkQmxvY2tN
YXA7CisgICAgQ29uY3VycmVudFB0ckhhc2hTZXQgbV9vcGFxdWVSb290U3RvcmFnZTsKKyAgICBE
ZXF1ZTxSZWZQdHI8U2hhcmVkVGFzazx2b2lkKEFic3RyYWN0U2xvdFZpc2l0b3ImKT4+LCAzMj4g
bV9jb25zdHJhaW50VGFza3M7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1ZlcmlmaWVyU2xvdFZpc2l0b3JJbmxpbmVzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVmVyaWZpZXJTbG90VmlzaXRvcklu
bGluZXMuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9WZXJp
ZmllclNsb3RWaXNpdG9ySW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjEgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9u
Y2UKKworI2luY2x1ZGUgIkFic3RyYWN0U2xvdFZpc2l0b3JJbmxpbmVzLmgiCisjaW5jbHVkZSAi
VmVyaWZpZXJTbG90VmlzaXRvci5oIgorCituYW1lc3BhY2UgSlNDIHsKKwordGVtcGxhdGU8dHlw
ZW5hbWUgRnVuY3Rvcj4KK3ZvaWQgVmVyaWZpZXJTbG90VmlzaXRvcjo6Zm9yRWFjaExpdmVDZWxs
KGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCit7CisgICAgZm9yRWFjaExpdmVQcmVjaXNlQWxsb2Nh
dGlvbihmdW5jdG9yKTsKKyAgICBmb3JFYWNoTGl2ZU1hcmtlZEJsb2NrQ2VsbChmdW5jdG9yKTsK
K30KKwordGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KK3ZvaWQgVmVyaWZpZXJTbG90VmlzaXRv
cjo6Zm9yRWFjaExpdmVQcmVjaXNlQWxsb2NhdGlvbihjb25zdCBGdW5jdG9yJiBmdW5jKQorewor
ICAgIGZvciAoYXV0byYgZW50cnkgOiBtX3ByZWNpc2VBbGxvY2F0aW9uTWFwKSB7CisgICAgICAg
IFByZWNpc2VBbGxvY2F0aW9uKiBhbGxvY2F0aW9uID0gZW50cnkudmFsdWUtPmFsbG9jYXRpb24o
KTsKKyAgICAgICAgZnVuYyhhbGxvY2F0aW9uLT5jZWxsKCkpOworICAgIH0KK30KKwordGVtcGxh
dGU8dHlwZW5hbWUgRnVuY3Rvcj4KK3ZvaWQgVmVyaWZpZXJTbG90VmlzaXRvcjo6Zm9yRWFjaExp
dmVNYXJrZWRCbG9ja0NlbGwoY29uc3QgRnVuY3RvciYgZnVuYykKK3sKKyAgICBmb3IgKGF1dG8m
IGVudHJ5IDogbV9tYXJrZWRCbG9ja01hcCkgeworICAgICAgICBhdXRvJiBkYXRhID0gZW50cnku
dmFsdWU7CisgICAgICAgIE1hcmtlZEJsb2NrKiBibG9jayA9IGRhdGEtPmJsb2NrKCk7CisgICAg
ICAgIGNvbnN0IE1hcmtlZEJsb2NrRGF0YTo6QXRvbXNCaXRtYXAmIGF0b21zID0gIGRhdGEtPmF0
b21zKCk7CisgICAgICAgIGZvciAoYXV0byBhdG9tTnVtYmVyIDogYXRvbXMpCisgICAgICAgICAg
ICBmdW5jKGJpdHdpc2VfY2FzdDxIZWFwQ2VsbCo+KGJsb2NrLT5oYW5kbGUoKS5hdG9tQXQoYXRv
bU51bWJlcikpKTsKKyAgICB9Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvVmlzaXRDb3VudGVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvVmlzaXRDb3VudGVyLmgJKHJldmlzaW9uIDI3MzExOSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Zpc2l0Q291bnRlci5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTI1LDcgKzI1LDcgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlICJTbG90VmlzaXRvci5o
IgorI2luY2x1ZGUgIkFic3RyYWN0U2xvdFZpc2l0b3IuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAK
QEAgLTMzLDEzICszMywxMyBAQCBjbGFzcyBWaXNpdENvdW50ZXIgewogcHVibGljOgogICAgIFZp
c2l0Q291bnRlcigpIHsgfQogICAgIAotICAgIFZpc2l0Q291bnRlcihTbG90VmlzaXRvciYgdmlz
aXRvcikKKyAgICBWaXNpdENvdW50ZXIoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKICAg
ICAgICAgOiBtX3Zpc2l0b3IoJnZpc2l0b3IpCiAgICAgICAgICwgbV9pbml0aWFsVmlzaXRDb3Vu
dCh2aXNpdG9yLnZpc2l0Q291bnQoKSkKICAgICB7CiAgICAgfQogICAgIAotICAgIFNsb3RWaXNp
dG9yJiB2aXNpdG9yKCkgY29uc3QgeyByZXR1cm4gKm1fdmlzaXRvcjsgfQorICAgIEFic3RyYWN0
U2xvdFZpc2l0b3ImIHZpc2l0b3IoKSBjb25zdCB7IHJldHVybiAqbV92aXNpdG9yOyB9CiAgICAg
CiAgICAgc2l6ZV90IHZpc2l0Q291bnQoKSBjb25zdAogICAgIHsKQEAgLTQ3LDcgKzQ3LDcgQEAg
cHVibGljOgogICAgIH0KICAgICAKIHByaXZhdGU6Ci0gICAgU2xvdFZpc2l0b3IqIG1fdmlzaXRv
ciB7IG51bGxwdHIgfTsKKyAgICBBYnN0cmFjdFNsb3RWaXNpdG9yKiBtX3Zpc2l0b3IgeyBudWxs
cHRyIH07CiAgICAgc2l6ZV90IG1faW5pdGlhbFZpc2l0Q291bnQgeyAwIH07CiB9OwogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrQmxvY2suY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtCbG9jay5jcHAJKHJldmlzaW9uIDI3MzEx
OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtCbG9jay5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTcgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC05OCwxMiArOTgsMTEgQEAgdm9pZCBXZWFrQmxvY2s6OnN3ZWVwKCkKICAgICBB
U1NFUlQoIW1fc3dlZXBSZXN1bHQuaXNOdWxsKCkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBD
b250YWluZXJUeXBlPgotdm9pZCBXZWFrQmxvY2s6OnNwZWNpYWxpemVkVmlzaXQoQ29udGFpbmVy
VHlwZSYgY29udGFpbmVyLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1l
IENvbnRhaW5lclR5cGUsIHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFdlYWtCbG9jazo6c3BlY2lh
bGl6ZWRWaXNpdChDb250YWluZXJUeXBlJiBjb250YWluZXIsIFZpc2l0b3ImIHZpc2l0b3IpCiB7
Ci0gICAgSGVhcFZlcnNpb24gbWFya2luZ1ZlcnNpb24gPSB2aXNpdG9yLm1hcmtpbmdWZXJzaW9u
KCk7Ci0KICAgICBzaXplX3QgY291bnQgPSB3ZWFrSW1wbENvdW50KCk7CisgICAgSGVhcEFuYWx5
emVyKiBoZWFwQW5hbHl6ZXIgPSB2aXNpdG9yLnZtKCkuYWN0aXZlSGVhcEFuYWx5emVyKCk7CiAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7CiAgICAgICAgIFdlYWtJbXBs
KiB3ZWFrSW1wbCA9ICZ3ZWFrSW1wbHMoKVtpXTsKICAgICAgICAgaWYgKHdlYWtJbXBsLT5zdGF0
ZSgpICE9IFdlYWtJbXBsOjpMaXZlKQpAQCAtMTE0LDEyICsxMTMsMTIgQEAgdm9pZCBXZWFrQmxv
Y2s6OnNwZWNpYWxpemVkVmlzaXQoQ29udGFpbgogICAgICAgICAgICAgY29udGludWU7CiAKICAg
ICAgICAgSlNWYWx1ZSBqc1ZhbHVlID0gd2Vha0ltcGwtPmpzVmFsdWUoKTsKLSAgICAgICAgaWYg
KGNvbnRhaW5lci5pc01hcmtlZChtYXJraW5nVmVyc2lvbiwganNWYWx1ZS5hc0NlbGwoKSkpCisg
ICAgICAgIGlmICh2aXNpdG9yLmlzTWFya2VkKGNvbnRhaW5lciwganNWYWx1ZS5hc0NlbGwoKSkp
CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgCiAgICAgICAgIGNvbnN0IGNoYXIqIHJl
YXNvbiA9ICIiOwogICAgICAgICBjb25zdCBjaGFyKiogcmVhc29uUHRyID0gbnVsbHB0cjsKLSAg
ICAgICAgaWYgKFVOTElLRUxZKHZpc2l0b3IuaXNBbmFseXppbmdIZWFwKCkpKQorICAgICAgICBp
ZiAoVU5MSUtFTFkoaGVhcEFuYWx5emVyKSkKICAgICAgICAgICAgIHJlYXNvblB0ciA9ICZyZWFz
b247CiAKICAgICAgICAgaWYgKCF3ZWFrSGFuZGxlT3duZXItPmlzUmVhY2hhYmxlRnJvbU9wYXF1
ZVJvb3RzKEhhbmRsZTxVbmtub3duPjo6d3JhcFNsb3QoJmNvbnN0X2Nhc3Q8SlNWYWx1ZSY+KGpz
VmFsdWUpKSwgd2Vha0ltcGwtPmNvbnRleHQoKSwgdmlzaXRvciwgcmVhc29uUHRyKSkKQEAgLTEy
NywxNCArMTI2LDE1IEBAIHZvaWQgV2Vha0Jsb2NrOjpzcGVjaWFsaXplZFZpc2l0KENvbnRhaW4K
IAogICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKGpzVmFsdWUpOwogCi0gICAgICAg
IGlmIChVTkxJS0VMWSh2aXNpdG9yLmlzQW5hbHl6aW5nSGVhcCgpKSkgeworICAgICAgICBpZiAo
VU5MSUtFTFkoaGVhcEFuYWx5emVyKSkgewogICAgICAgICAgICAgaWYgKGpzVmFsdWUuaXNDZWxs
KCkpCi0gICAgICAgICAgICAgICAgdmlzaXRvci5oZWFwQW5hbHl6ZXIoKS0+c2V0T3BhcXVlUm9v
dFJlYWNoYWJpbGl0eVJlYXNvbkZvckNlbGwoanNWYWx1ZS5hc0NlbGwoKSwgKnJlYXNvblB0cik7
CisgICAgICAgICAgICAgICAgaGVhcEFuYWx5emVyLT5zZXRPcGFxdWVSb290UmVhY2hhYmlsaXR5
UmVhc29uRm9yQ2VsbChqc1ZhbHVlLmFzQ2VsbCgpLCAqcmVhc29uUHRyKTsKICAgICAgICAgfQog
ICAgIH0KIH0KIAotdm9pZCBXZWFrQmxvY2s6OnZpc2l0KFNsb3RWaXNpdG9yJiB2aXNpdG9yKQor
dGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK0FMV0FZU19JTkxJTkUgdm9pZCBXZWFrQmxvY2s6
OnZpc2l0SW1wbChWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIC8vIElmIGEgYmxvY2sgaXMgY29t
cGxldGVseSBlbXB0eSwgYSB2aXNpdCB3b24ndCBoYXZlIGFueSBlZmZlY3QuCiAgICAgaWYgKGlz
RW1wdHkoKSkKQEAgLTE0OSw2ICsxNDksOSBAQCB2b2lkIFdlYWtCbG9jazo6dmlzaXQoU2xvdFZp
c2l0b3ImIHZpc2l0CiAgICAgICAgIHNwZWNpYWxpemVkVmlzaXQobV9jb250YWluZXIubWFya2Vk
QmxvY2soKSwgdmlzaXRvcik7CiB9CiAKK3ZvaWQgV2Vha0Jsb2NrOjp2aXNpdChBYnN0cmFjdFNs
b3RWaXNpdG9yJiB2aXNpdG9yKSB7IHZpc2l0SW1wbCh2aXNpdG9yKTsgfQordm9pZCBXZWFrQmxv
Y2s6OnZpc2l0KFNsb3RWaXNpdG9yJiB2aXNpdG9yKSB7IHZpc2l0SW1wbCh2aXNpdG9yKTsgfQor
CiB2b2lkIFdlYWtCbG9jazo6cmVhcCgpCiB7CiAgICAgLy8gSWYgYSBibG9jayBpcyBjb21wbGV0
ZWx5IGVtcHR5LCBhIHJlYXBpbmcgd29uJ3QgaGF2ZSBhbnkgZWZmZWN0LgpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha0Jsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvV2Vha0Jsb2NrLmgJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE5IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzIs
NiArMzIsNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAorY2xhc3MgQWJzdHJhY3RTbG90VmlzaXRv
cjsKIGNsYXNzIEhlYXA7CiBjbGFzcyBTbG90VmlzaXRvcjsKIApAQCAtNjUsNyArNjYsOCBAQCBw
dWJsaWM6CiAgICAgdm9pZCBzd2VlcCgpOwogICAgIFN3ZWVwUmVzdWx0IHRha2VTd2VlcFJlc3Vs
dCgpOwogCi0gICAgdm9pZCB2aXNpdChTbG90VmlzaXRvciYpOworICAgIEpTX0VYUE9SVF9QUklW
QVRFIHZvaWQgdmlzaXQoQWJzdHJhY3RTbG90VmlzaXRvciYpOworICAgIEpTX0VYUE9SVF9QUklW
QVRFIHZvaWQgdmlzaXQoU2xvdFZpc2l0b3ImKTsKIAogICAgIHZvaWQgcmVhcCgpOwogCkBAIC03
MywxMCArNzUsMTIgQEAgcHVibGljOgogICAgIHZvaWQgZGlzY29ubmVjdENvbnRhaW5lcigpIHsg
bV9jb250YWluZXIgPSBDZWxsQ29udGFpbmVyKCk7IH0KIAogcHJpdmF0ZToKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIHZpc2l0SW1wbChWaXNpdG9yJik7CisKICAgICBzdGF0
aWMgRnJlZUNlbGwqIGFzRnJlZUNlbGwoV2Vha0ltcGwqKTsKICAgICAKLSAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBDb250YWluZXJUeXBlPgotICAgIHZvaWQgc3BlY2lhbGl6ZWRWaXNpdChDb250YWlu
ZXJUeXBlJiwgU2xvdFZpc2l0b3ImKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDb250YWluZXJU
eXBlLCB0eXBlbmFtZSBWaXNpdG9yPgorICAgIHZvaWQgc3BlY2lhbGl6ZWRWaXNpdChDb250YWlu
ZXJUeXBlJiwgVmlzaXRvciYpOwogCiAgICAgZXhwbGljaXQgV2Vha0Jsb2NrKENlbGxDb250YWlu
ZXIpOwogICAgIHZvaWQgZmluYWxpemUoV2Vha0ltcGwqKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL1dlYWtIYW5kbGVPd25lci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvV2Vha0hhbmRsZU93bmVyLmNwcAkocmV2aXNpb24gMjczMTE5KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha0hhbmRsZU93bmVyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0zNSw3ICszNSw3IEBAIFdlYWtIYW5kbGVPd25lcjo6fldlYWtIYW5kbGVPd25lcigp
CiB7CiB9CiAKLWJvb2wgV2Vha0hhbmRsZU93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290
cyhIYW5kbGU8VW5rbm93bj4sIHZvaWQqLCBTbG90VmlzaXRvciYsIGNvbnN0IGNoYXIqKikKK2Jv
b2wgV2Vha0hhbmRsZU93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhIYW5kbGU8VW5r
bm93bj4sIHZvaWQqLCBBYnN0cmFjdFNsb3RWaXNpdG9yJiwgY29uc3QgY2hhcioqKQogewogICAg
IHJldHVybiBmYWxzZTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtI
YW5kbGVPd25lci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dl
YWtIYW5kbGVPd25lci5oCShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9XZWFrSGFuZGxlT3duZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOSwxMyArMjksMTMgQEAK
IAogbmFtZXNwYWNlIEpTQyB7CiAKLWNsYXNzIFNsb3RWaXNpdG9yOworY2xhc3MgQWJzdHJhY3RT
bG90VmlzaXRvcjsKIAogY2xhc3MgSlNfRVhQT1JUX1BSSVZBVEUgV2Vha0hhbmRsZU93bmVyIHsK
IHB1YmxpYzoKICAgICB2aXJ0dWFsIH5XZWFrSGFuZGxlT3duZXIoKTsKICAgICAvLyByZWFzb24g
d2lsbCBvbmx5IGJlIG5vbi1udWxsIHdoZW4gZ2VuZXJhdGluZyBhIGRlYnVnIEdDIGhlYXAgc25h
cHNob3QuCi0gICAgdmlydHVhbCBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEhhbmRs
ZTxVbmtub3duPiwgdm9pZCogY29udGV4dCwgU2xvdFZpc2l0b3ImLCBjaGFyIGNvbnN0KiogcmVh
c29uID0gbnVsbHB0cik7CisgICAgdmlydHVhbCBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJv
b3RzKEhhbmRsZTxVbmtub3duPiwgdm9pZCogY29udGV4dCwgQWJzdHJhY3RTbG90VmlzaXRvciYs
IGNoYXIgY29uc3QqKiByZWFzb24gPSBudWxscHRyKTsKICAgICB2aXJ0dWFsIHZvaWQgZmluYWxp
emUoSGFuZGxlPFVua25vd24+LCB2b2lkKiBjb250ZXh0KTsKIH07CiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtTZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL1dlYWtTZXQuY3BwCShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrU2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIzLDQg
KzEyMyw3IEBAIHZvaWQgV2Vha1NldDo6cmVtb3ZlQWxsb2NhdG9yKFdlYWtCbG9jayoKICAgICBX
ZWFrQmxvY2s6OmRlc3Ryb3koKmhlYXAoKSwgYmxvY2spOwogfQogCit0ZW1wbGF0ZSB2b2lkIFdl
YWtTZXQ6OnZpc2l0KEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgV2Vha1Nl
dDo6dmlzaXQoU2xvdFZpc2l0b3ImKTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvV2Vha1NldC5oCShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01MSw3ICs1
MSw3IEBAIHB1YmxpYzoKICAgICBib29sIGlzRW1wdHkoKSBjb25zdDsKICAgICBib29sIGlzVHJp
dmlhbGx5RGVzdHJ1Y3RpYmxlKCkgY29uc3Q7CiAKLSAgICB2b2lkIHZpc2l0KFNsb3RWaXNpdG9y
Jik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCB2aXNpdChWaXNpdG9yJik7
CiAKICAgICB2b2lkIHJlYXAoKTsKICAgICB2b2lkIHN3ZWVwKCk7CkBAIC0xMTQsNyArMTE0LDgg
QEAgaW5saW5lIHZvaWQgV2Vha1NldDo6bGFzdENoYW5jZVRvRmluYWxpegogICAgICAgICBibG9j
ay0+bGFzdENoYW5jZVRvRmluYWxpemUoKTsKIH0KIAotaW5saW5lIHZvaWQgV2Vha1NldDo6dmlz
aXQoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgoraW5s
aW5lIHZvaWQgV2Vha1NldDo6dmlzaXQoVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBmb3IgKFdl
YWtCbG9jayogYmxvY2sgPSBtX2Jsb2Nrcy5oZWFkKCk7IGJsb2NrOyBibG9jayA9IGJsb2NrLT5u
ZXh0KCkpCiAgICAgICAgIGJsb2NrLT52aXNpdCh2aXNpdG9yKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnRlcnByZXRlci9TaGFkb3dDaGlja2VuLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU2hhZG93Q2hpY2tlbi5jcHAJKHJldmlz
aW9uIDI3MzExOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TaGFkb3dD
aGlja2VuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTYtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ0MCw3ICs0NDAsOSBAQCB2b2lkIFNoYWRv
d0NoaWNrZW46OnVwZGF0ZShWTSYgdm0sIENhbGxGCiAgICAgICAgIGRhdGFMb2coIiAgICBBZnRl
ciBjbGVhbi11cDogIiwgKnRoaXMsICJcbiIpOwogfQogCi12b2lkIFNoYWRvd0NoaWNrZW46OnZp
c2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisvLyBXZSBkb24ndCBuZWVkIGEgU2xv
dFZpc2l0b3IgdmVyc2lvbiBvZiB0aGlzIGJlY2F1c2UgU2hhZG93Q2hpY2tlbiBpcyBvbmx5IHVz
ZWQgYnkgdGhlCisvLyBEZWJ1Z2dlciwgYW5kIGlzIHRoZXJlZm9yZSBub3Qgb24gdGhlIGNyaXRp
Y2FsIHBhdGggZm9yIHBlcmZvcm1hbmNlLgordm9pZCBTaGFkb3dDaGlja2VuOjp2aXNpdENoaWxk
cmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgZm9yICh1bnNpZ25lZCBp
ID0gbV9sb2dDdXJzb3IgLSBtX2xvZzsgaS0tOykgewogICAgICAgICBKU09iamVjdCogY2FsbGVl
ID0gbV9sb2dbaV0uY2FsbGVlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJl
dGVyL1NoYWRvd0NoaWNrZW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW50ZXJwcmV0ZXIvU2hhZG93Q2hpY2tlbi5oCShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU2hhZG93Q2hpY2tlbi5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTM1LDEzICszNSwxMyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAorY2xhc3MgQWJzdHJhY3RTbG90
VmlzaXRvcjsKIGNsYXNzIENhbGxGcmFtZTsKIGNsYXNzIENvZGVCbG9jazsKIGNsYXNzIEpTQXJy
YXk7CiBjbGFzcyBKU09iamVjdDsKIGNsYXNzIEpTU2NvcGU7CiBjbGFzcyBMTEludE9mZnNldHNF
eHRyYWN0b3I7Ci1jbGFzcyBTbG90VmlzaXRvcjsKIGNsYXNzIFZNOwogCiAvLyBTaGFkb3dDaGlj
a2VuIGlzIGEgbG9nIHRoYXQgY2FuIGJlIHVzZWQgdG8gcHJvZHVjZSBhIHNoYWRvdyBzdGFjayBv
ZiBDSElDS0VOLXN0eWxlIHN0YWNrIGZyYW1lcy4KQEAgLTE5Niw3ICsxOTYsNyBAQCBwdWJsaWM6
CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KICAgICB2b2lkIGl0ZXJhdGUoVk0mLCBD
YWxsRnJhbWUqLCBjb25zdCBGdW5jdG9yJik7CiAgICAgCi0gICAgdm9pZCB2aXNpdENoaWxkcmVu
KFNsb3RWaXNpdG9yJik7CisgICAgdm9pZCB2aXNpdENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0
b3ImKTsKICAgICB2b2lkIHJlc2V0KCk7CiAgICAgCiAgICAgLy8gSklUIHN1cHBvcnQuCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0dDQXdhcmVKSVRTdHViUm91dGluZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9HQ0F3YXJlSklUU3R1YlJvdXRp
bmUuY3BwCShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0dD
QXdhcmVKSVRTdHViUm91dGluZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03MywxMCArNzMsNiBA
QCB2b2lkIEdDQXdhcmVKSVRTdHViUm91dGluZTo6ZGVsZXRlRnJvbUdDCiAgICAgZGVsZXRlIHRo
aXM7CiB9CiAKLXZvaWQgR0NBd2FyZUpJVFN0dWJSb3V0aW5lOjptYXJrUmVxdWlyZWRPYmplY3Rz
SW50ZXJuYWwoU2xvdFZpc2l0b3ImKQotewotfQotCiBNYXJraW5nR0NBd2FyZUpJVFN0dWJSb3V0
aW5lOjpNYXJraW5nR0NBd2FyZUpJVFN0dWJSb3V0aW5lKAogICAgIGNvbnN0IE1hY3JvQXNzZW1i
bGVyQ29kZVJlZjxKSVRTdHViUm91dGluZVB0clRhZz4mIGNvZGUsIFZNJiB2bSwgY29uc3QgSlND
ZWxsKiBvd25lciwKICAgICBjb25zdCBWZWN0b3I8SlNDZWxsKj4mIGNlbGxzLCBCYWc8Q2FsbExp
bmtJbmZvPiYmIGNhbGxMaW5rSW5mb3MpCkBAIC05MiwxMiArODgsMjEgQEAgTWFya2luZ0dDQXdh
cmVKSVRTdHViUm91dGluZTo6fk1hcmtpbmdHQwogewogfQogCi12b2lkIE1hcmtpbmdHQ0F3YXJl
SklUU3R1YlJvdXRpbmU6Om1hcmtSZXF1aXJlZE9iamVjdHNJbnRlcm5hbChTbG90VmlzaXRvciYg
dmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+CitBTFdBWVNfSU5MSU5FIHZvaWQg
TWFya2luZ0dDQXdhcmVKSVRTdHViUm91dGluZTo6bWFya1JlcXVpcmVkT2JqZWN0c0ludGVybmFs
SW1wbChWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGZvciAoYXV0byYgZW50cnkgOiBtX2NlbGxz
KQogICAgICAgICB2aXNpdG9yLmFwcGVuZChlbnRyeSk7CiB9CiAKK3ZvaWQgTWFya2luZ0dDQXdh
cmVKSVRTdHViUm91dGluZTo6bWFya1JlcXVpcmVkT2JqZWN0c0ludGVybmFsKEFic3RyYWN0U2xv
dFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgbWFya1JlcXVpcmVkT2JqZWN0c0ludGVybmFsSW1w
bCh2aXNpdG9yKTsKK30KK3ZvaWQgTWFya2luZ0dDQXdhcmVKSVRTdHViUm91dGluZTo6bWFya1Jl
cXVpcmVkT2JqZWN0c0ludGVybmFsKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIG1hcmtS
ZXF1aXJlZE9iamVjdHNJbnRlcm5hbEltcGwodmlzaXRvcik7Cit9CiAKIEdDQXdhcmVKSVRTdHVi
Um91dGluZVdpdGhFeGNlcHRpb25IYW5kbGVyOjpHQ0F3YXJlSklUU3R1YlJvdXRpbmVXaXRoRXhj
ZXB0aW9uSGFuZGxlcigKICAgICBjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUU3R1YlJv
dXRpbmVQdHJUYWc+JiBjb2RlLCBWTSYgdm0sICBjb25zdCBKU0NlbGwqIG93bmVyLCBjb25zdCBW
ZWN0b3I8SlNDZWxsKj4mIGNlbGxzLCBCYWc8Q2FsbExpbmtJbmZvPiYmIGNhbGxMaW5rSW5mb3Ms
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0dDQXdhcmVKSVRTdHViUm91dGluZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvR0NBd2FyZUpJVFN0dWJS
b3V0aW5lLmgJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
R0NBd2FyZUpJVFN0dWJSb3V0aW5lLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02MCw4ICs2MCw5IEBA
IHB1YmxpYzoKICAgICB7CiAgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEdDQXdhcmVKSVRT
dHViUm91dGluZShjb2RlLCB2bSkpOwogICAgIH0KLSAgICAKLSAgICB2b2lkIG1hcmtSZXF1aXJl
ZE9iamVjdHMoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPgorICAgIHZvaWQgbWFya1JlcXVpcmVkT2JqZWN0cyhWaXNpdG9yJiB2aXNpdG9yKQog
ICAgIHsKICAgICAgICAgbWFya1JlcXVpcmVkT2JqZWN0c0ludGVybmFsKHZpc2l0b3IpOwogICAg
IH0KQEAgLTcxLDcgKzcyLDggQEAgcHVibGljOgogcHJvdGVjdGVkOgogICAgIHZvaWQgb2JzZXJ2
ZVplcm9SZWZDb3VudCgpIG92ZXJyaWRlOwogICAgIAotICAgIHZpcnR1YWwgdm9pZCBtYXJrUmVx
dWlyZWRPYmplY3RzSW50ZXJuYWwoU2xvdFZpc2l0b3ImKTsKKyAgICB2aXJ0dWFsIHZvaWQgbWFy
a1JlcXVpcmVkT2JqZWN0c0ludGVybmFsKEFic3RyYWN0U2xvdFZpc2l0b3ImKSB7IH0KKyAgICB2
aXJ0dWFsIHZvaWQgbWFya1JlcXVpcmVkT2JqZWN0c0ludGVybmFsKFNsb3RWaXNpdG9yJikgeyB9
CiAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIEpJVFN0dWJSb3V0aW5lU2V0OwpAQCAtODks
NyArOTEsOSBAQCBwdWJsaWM6CiAgICAgfk1hcmtpbmdHQ0F3YXJlSklUU3R1YlJvdXRpbmUoKSBv
dmVycmlkZTsKICAgICAKIHByb3RlY3RlZDoKLSAgICB2b2lkIG1hcmtSZXF1aXJlZE9iamVjdHNJ
bnRlcm5hbChTbG90VmlzaXRvciYpIG92ZXJyaWRlOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZp
c2l0b3I+IHZvaWQgbWFya1JlcXVpcmVkT2JqZWN0c0ludGVybmFsSW1wbChWaXNpdG9yJik7Cisg
ICAgdm9pZCBtYXJrUmVxdWlyZWRPYmplY3RzSW50ZXJuYWwoQWJzdHJhY3RTbG90VmlzaXRvciYp
IGZpbmFsOworICAgIHZvaWQgbWFya1JlcXVpcmVkT2JqZWN0c0ludGVybmFsKFNsb3RWaXNpdG9y
JikgZmluYWw7CiAKIHByaXZhdGU6CiAgICAgVmVjdG9yPFdyaXRlQmFycmllcjxKU0NlbGw+PiBt
X2NlbGxzOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRXb3JrbGlzdC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRXb3JrbGlzdC5jcHAJ
KHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUV29ya2xp
c3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxNi0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNi0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Q
b2x5bW9ycGhpY0NhbGxTdHViUm91dGluZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9Qb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZS5jcHAJKHJldmlzaW9uIDI3
MzExOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUG9seW1vcnBoaWNDYWxsU3R1YlJv
dXRpbmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxNS0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTM1LDEyICsxMzUsMjIgQEAgYm9vbCBQb2x5
bW9ycGhpY0NhbGxTdHViUm91dGluZTo6dmlzaXRXZQogICAgIHJldHVybiBpc1N0aWxsTGl2ZTsK
IH0KIAotdm9pZCBQb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZTo6bWFya1JlcXVpcmVkT2JqZWN0
c0ludGVybmFsKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRv
cj4KK0FMV0FZU19JTkxJTkUgdm9pZCBQb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZTo6bWFya1Jl
cXVpcmVkT2JqZWN0c0ludGVybmFsSW1wbChWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGZvciAo
YXV0byYgdmFyaWFudCA6IG1fdmFyaWFudHMpCiAgICAgICAgIHZpc2l0b3IuYXBwZW5kKHZhcmlh
bnQpOwogfQogCit2b2lkIFBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lOjptYXJrUmVxdWlyZWRP
YmplY3RzSW50ZXJuYWwoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBtYXJr
UmVxdWlyZWRPYmplY3RzSW50ZXJuYWxJbXBsKHZpc2l0b3IpOworfQordm9pZCBQb2x5bW9ycGhp
Y0NhbGxTdHViUm91dGluZTo6bWFya1JlcXVpcmVkT2JqZWN0c0ludGVybmFsKFNsb3RWaXNpdG9y
JiB2aXNpdG9yKQoreworICAgIG1hcmtSZXF1aXJlZE9iamVjdHNJbnRlcm5hbEltcGwodmlzaXRv
cik7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1BvbHltb3JwaGljQ2Fs
bFN0dWJSb3V0aW5lLmgJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxOCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEw
NSw2ICsxMDUsOCBAQCBwdWJsaWM6CiAgICAgYm9vbCB2aXNpdFdlYWsoVk0mKSBmaW5hbDsKIAog
cHJpdmF0ZToKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIG1hcmtSZXF1aXJl
ZE9iamVjdHNJbnRlcm5hbEltcGwoVmlzaXRvciYpOworICAgIHZvaWQgbWFya1JlcXVpcmVkT2Jq
ZWN0c0ludGVybmFsKEFic3RyYWN0U2xvdFZpc2l0b3ImKSBmaW5hbDsKICAgICB2b2lkIG1hcmtS
ZXF1aXJlZE9iamVjdHNJbnRlcm5hbChTbG90VmlzaXRvciYpIGZpbmFsOwogCiAgICAgVmVjdG9y
PFdyaXRlQmFycmllcjxKU0NlbGw+LCAyPiBtX3ZhcmlhbnRzOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQWJzdHJhY3RNb2R1bGVSZWNvcmQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Fic3RyYWN0TW9kdWxlUmVjb3JkLmNwcAko
cmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQWJzdHJh
Y3RNb2R1bGVSZWNvcmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxNS0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjAsNyArNjAsOCBAQCB2b2lk
IEFic3RyYWN0TW9kdWxlUmVjb3JkOjpmaW5pc2hDcmVhdGlvCiAgICAgcHV0RGlyZWN0KHZtLCBJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiZGVwZW5kZW5jaWVzTWFwIl9zKSwgbV9kZXBlbmRl
bmNpZXNNYXAuZ2V0KCkpOwogfQogCi12b2lkIEFic3RyYWN0TW9kdWxlUmVjb3JkOjp2aXNpdENo
aWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBl
bmFtZSBWaXNpdG9yPgordm9pZCBBYnN0cmFjdE1vZHVsZVJlY29yZDo6dmlzaXRDaGlsZHJlbklt
cGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEFic3RyYWN0TW9kdWxl
UmVjb3JkKiB0aGlzT2JqZWN0ID0ganNDYXN0PEFic3RyYWN0TW9kdWxlUmVjb3JkKj4oY2VsbCk7
CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAt
NzAsNiArNzEsOCBAQCB2b2lkIEFic3RyYWN0TW9kdWxlUmVjb3JkOjp2aXNpdENoaWxkcmVuCiAg
ICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9kZXBlbmRlbmNpZXNNYXApOwogfQogCitE
RUZJTkVfVklTSVRfQ0hJTERSRU4oQWJzdHJhY3RNb2R1bGVSZWNvcmQpOworCiB2b2lkIEFic3Ry
YWN0TW9kdWxlUmVjb3JkOjphcHBlbmRSZXF1ZXN0ZWRNb2R1bGUoY29uc3QgSWRlbnRpZmllciYg
bW9kdWxlTmFtZSkKIHsKICAgICBtX3JlcXVlc3RlZE1vZHVsZXMuYWRkKG1vZHVsZU5hbWUuaW1w
bCgpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Fic3RyYWN0TW9kdWxl
UmVjb3JkLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQWJz
dHJhY3RNb2R1bGVSZWNvcmQuaAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQWJzdHJhY3RNb2R1bGVSZWNvcmQuaAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMzYs
NyArMTM2LDcgQEAgcHJvdGVjdGVkOgogICAgIEFic3RyYWN0TW9kdWxlUmVjb3JkKFZNJiwgU3Ry
dWN0dXJlKiwgY29uc3QgSWRlbnRpZmllciYpOwogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNH
bG9iYWxPYmplY3QqLCBWTSYpOwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0Nl
bGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICB2
b2lkIHNldE1vZHVsZUVudmlyb25tZW50KEpTR2xvYmFsT2JqZWN0KiwgSlNNb2R1bGVFbnZpcm9u
bWVudCopOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcmdMaXN0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcmdMaXN0LmNw
cAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJn
TGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogIENvcHlyaWdo
dCAoQykgMjAwMy0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5
cmlnaHQgKEMpIDIwMDMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYwpAQCAtNTEsNyArNTEsOCBAQCB2b2lkIEFyZ0xpc3Q6OmdldFNsaWNl
KGludCBzdGFydEluZGV4LCBBCiAgICAgcmVzdWx0Lm1fYXJnQ291bnQgPSAgbV9hcmdDb3VudCAt
IHN0YXJ0SW5kZXg7CiB9CiAKLXZvaWQgTWFya2VkQXJndW1lbnRCdWZmZXI6Om1hcmtMaXN0cyhT
bG90VmlzaXRvciYgdmlzaXRvciwgTGlzdFNldCYgbWFya1NldCkKK3RlbXBsYXRlPHR5cGVuYW1l
IFZpc2l0b3I+Cit2b2lkIE1hcmtlZEFyZ3VtZW50QnVmZmVyOjptYXJrTGlzdHMoVmlzaXRvciYg
dmlzaXRvciwgTGlzdFNldCYgbWFya1NldCkKIHsKICAgICBMaXN0U2V0OjppdGVyYXRvciBlbmQg
PSBtYXJrU2V0LmVuZCgpOwogICAgIGZvciAoTGlzdFNldDo6aXRlcmF0b3IgaXQgPSBtYXJrU2V0
LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewpAQCAtNjEsNiArNjIsOSBAQCB2b2lkIE1hcmtl
ZEFyZ3VtZW50QnVmZmVyOjptYXJrTGlzdHMoU2xvCiAgICAgfQogfQogCit0ZW1wbGF0ZSB2b2lk
IE1hcmtlZEFyZ3VtZW50QnVmZmVyOjptYXJrTGlzdHMoQWJzdHJhY3RTbG90VmlzaXRvciYsIExp
c3RTZXQmKTsKK3RlbXBsYXRlIHZvaWQgTWFya2VkQXJndW1lbnRCdWZmZXI6Om1hcmtMaXN0cyhT
bG90VmlzaXRvciYsIExpc3RTZXQmKTsKKwogdm9pZCBNYXJrZWRBcmd1bWVudEJ1ZmZlcjo6c2xv
d0Vuc3VyZUNhcGFjaXR5KHNpemVfdCByZXF1ZXN0ZWRDYXBhY2l0eSkKIHsKICAgICBzZXROZWVk
c092ZXJmbG93Q2hlY2soKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Fy
Z0xpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcmdM
aXN0LmgJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0FyZ0xpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJp
Z2h0IChDKSAxOTk5LTIwMDEgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKLSAqICBDb3B5
cmlnaHQgKEMpIDIwMDMtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAg
Q29weXJpZ2h0IChDKSAyMDAzLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTExOCw3ICsxMTgsNyBAQCBwdWJsaWM6CiAgICAgICAg
IHJldHVybiByZXN1bHQ7CiAgICAgfQogICAgICAgICAKLSAgICBzdGF0aWMgdm9pZCBtYXJrTGlz
dHMoU2xvdFZpc2l0b3ImLCBMaXN0U2V0Jik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRv
cj4gc3RhdGljIHZvaWQgbWFya0xpc3RzKFZpc2l0b3ImLCBMaXN0U2V0Jik7CiAKICAgICB2b2lk
IGVuc3VyZUNhcGFjaXR5KHNpemVfdCByZXF1ZXN0ZWRDYXBhY2l0eSkKICAgICB7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWFibGVJZGVudGlmaWVyLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVhYmxlSWRlbnRpZmll
ci5oCShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9D
YWNoZWFibGVJZGVudGlmaWVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAyMC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDIsNyArNDIsNiBAQCBuYW1lc3Bh
Y2UgSlNDIHsKIGNsYXNzIENvZGVCbG9jazsKIGNsYXNzIElkZW50aWZpZXI7CiBjbGFzcyBKU0Nl
bGw7Ci1jbGFzcyBTbG90VmlzaXRvcjsKIAogY2xhc3MgQ2FjaGVhYmxlSWRlbnRpZmllciB7CiBw
dWJsaWM6CkBAIC04Nyw3ICs4Niw3IEBAIHB1YmxpYzoKIAogICAgIHVpbnRwdHJfdCByYXdCaXRz
KCkgY29uc3QgeyByZXR1cm4gbV9iaXRzOyB9CiAKLSAgICBpbmxpbmUgdm9pZCB2aXNpdEFnZ3Jl
Z2F0ZShTbG90VmlzaXRvciYpIGNvbnN0OworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+
IGlubGluZSB2b2lkIHZpc2l0QWdncmVnYXRlKFZpc2l0b3ImKSBjb25zdDsKIAogICAgIEpTX0VY
UE9SVF9QUklWQVRFIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWFibGVJZGVudGlmaWVySW5saW5lcy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlYWJsZUlkZW50
aWZpZXJJbmxpbmVzLmgJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0NhY2hlYWJsZUlkZW50aWZpZXJJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMC0yMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTM3
LDcgKzEzNyw4IEBAIGlubGluZSB2b2lkIENhY2hlYWJsZUlkZW50aWZpZXI6OnNldFVpZEIKICAg
ICBtX2JpdHMgPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90Pih1aWQpIHwgc191aWRUYWc7CiB9CiAK
LWlubGluZSB2b2lkIENhY2hlYWJsZUlkZW50aWZpZXI6OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNp
dG9yJiB2aXNpdG9yKSBjb25zdAordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK2lubGluZSB2
b2lkIENhY2hlYWJsZUlkZW50aWZpZXI6OnZpc2l0QWdncmVnYXRlKFZpc2l0b3ImIHZpc2l0b3Ip
IGNvbnN0CiB7CiAgICAgaWYgKG1fYml0cyAmJiBpc0NlbGwoKSkKICAgICAgICAgdmlzaXRvci5h
cHBlbmRVbmJhcnJpZXJlZChjZWxsKCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQ2xhc3NJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQ2xhc3NJbmZvLmgJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0NsYXNzSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBAQAog
LyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMSBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUu
b3JnKQogICogIENvcHlyaWdodCAoQykgMjAwMSBQZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQot
ICogIENvcHlyaWdodCAoQykgMjAwMy0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtNDQsOSArNDQsNiBAQCBzdHJ1Y3QgTWV0
aG9kVGFibGUgewogICAgIHVzaW5nIERlc3Ryb3lGdW5jdGlvblB0ciA9IHZvaWQgKCopKEpTQ2Vs
bCopOwogICAgIERlc3Ryb3lGdW5jdGlvblB0ciBNRVRIT0RfVEFCTEVfRU5UUlkoZGVzdHJveSk7
CiAKLSAgICB1c2luZyBWaXNpdENoaWxkcmVuRnVuY3Rpb25QdHIgPSB2b2lkICgqKShKU0NlbGwq
LCBTbG90VmlzaXRvciYpOwotICAgIFZpc2l0Q2hpbGRyZW5GdW5jdGlvblB0ciBNRVRIT0RfVEFC
TEVfRU5UUlkodmlzaXRDaGlsZHJlbik7Ci0KICAgICB1c2luZyBHZXRDYWxsRGF0YUZ1bmN0aW9u
UHRyID0gQ2FsbERhdGEgKCopKEpTQ2VsbCopOwogICAgIEdldENhbGxEYXRhRnVuY3Rpb25QdHIg
TUVUSE9EX1RBQkxFX0VOVFJZKGdldENhbGxEYXRhKTsKIApAQCAtMTIwLDggKzExNywyMyBAQCBz
dHJ1Y3QgTWV0aG9kVGFibGUgewogICAgIHVzaW5nIEVzdGltYXRlZFNpemVGdW5jdGlvblB0ciA9
IHNpemVfdCAoKikoSlNDZWxsKiwgVk0mKTsKICAgICBFc3RpbWF0ZWRTaXplRnVuY3Rpb25QdHIg
TUVUSE9EX1RBQkxFX0VOVFJZKGVzdGltYXRlZFNpemUpOwogCisgICAgdXNpbmcgVmlzaXRDaGls
ZHJlbkZ1bmN0aW9uUHRyID0gdm9pZCAoKikoSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBW
aXNpdENoaWxkcmVuRnVuY3Rpb25QdHIgTUVUSE9EX1RBQkxFX0VOVFJZKHZpc2l0Q2hpbGRyZW5X
aXRoU2xvdFZpc2l0b3IpOworCisgICAgdXNpbmcgVmlzaXRDaGlsZHJlbldpdGhBYnN0cmFjdFNs
b3RWaXNpdG9yUHRyID0gdm9pZCAoKikoSlNDZWxsKiwgQWJzdHJhY3RTbG90VmlzaXRvciYpOwor
ICAgIFZpc2l0Q2hpbGRyZW5XaXRoQWJzdHJhY3RTbG90VmlzaXRvclB0ciBNRVRIT0RfVEFCTEVf
RU5UUlkodmlzaXRDaGlsZHJlbldpdGhBYnN0cmFjdFNsb3RWaXNpdG9yKTsKKworICAgIEFMV0FZ
U19JTkxJTkUgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZp
c2l0b3IpIGNvbnN0IHsgdmlzaXRDaGlsZHJlbldpdGhTbG90VmlzaXRvcihjZWxsLCB2aXNpdG9y
KTsgfQorICAgIEFMV0FZU19JTkxJTkUgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwg
QWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikgY29uc3QgeyB2aXNpdENoaWxkcmVuV2l0aEFi
c3RyYWN0U2xvdFZpc2l0b3IoY2VsbCwgdmlzaXRvcik7IH0KKwogICAgIHVzaW5nIFZpc2l0T3V0
cHV0Q29uc3RyYWludHNQdHIgPSB2b2lkICgqKShKU0NlbGwqLCBTbG90VmlzaXRvciYpOwotICAg
IFZpc2l0T3V0cHV0Q29uc3RyYWludHNQdHIgTUVUSE9EX1RBQkxFX0VOVFJZKHZpc2l0T3V0cHV0
Q29uc3RyYWludHMpOworICAgIFZpc2l0T3V0cHV0Q29uc3RyYWludHNQdHIgTUVUSE9EX1RBQkxF
X0VOVFJZKHZpc2l0T3V0cHV0Q29uc3RyYWludHNXaXRoU2xvdFZpc2l0b3IpOworCisgICAgdXNp
bmcgVmlzaXRPdXRwdXRDb25zdHJhaW50c1dpdGhBYnN0cmFjdFNsb3RWaXNpdG9yUHRyID0gdm9p
ZCAoKikoSlNDZWxsKiwgQWJzdHJhY3RTbG90VmlzaXRvciYpOworICAgIFZpc2l0T3V0cHV0Q29u
c3RyYWludHNXaXRoQWJzdHJhY3RTbG90VmlzaXRvclB0ciBNRVRIT0RfVEFCTEVfRU5UUlkodmlz
aXRPdXRwdXRDb25zdHJhaW50c1dpdGhBYnN0cmFjdFNsb3RWaXNpdG9yKTsKKworICAgIEFMV0FZ
U19JTkxJTkUgdm9pZCB2aXNpdE91dHB1dENvbnN0cmFpbnRzKEpTQ2VsbCogY2VsbCwgU2xvdFZp
c2l0b3ImIHZpc2l0b3IpIGNvbnN0IHsgdmlzaXRPdXRwdXRDb25zdHJhaW50c1dpdGhTbG90Vmlz
aXRvcihjZWxsLCB2aXNpdG9yKTsgfQorICAgIEFMV0FZU19JTkxJTkUgdm9pZCB2aXNpdE91dHB1
dENvbnN0cmFpbnRzKEpTQ2VsbCogY2VsbCwgQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikg
Y29uc3QgeyB2aXNpdE91dHB1dENvbnN0cmFpbnRzV2l0aEFic3RyYWN0U2xvdFZpc2l0b3IoY2Vs
bCwgdmlzaXRvcik7IH0KIH07CiAKICNkZWZpbmUgQ1JFQVRFX01FTUJFUl9DSEVDS0VSKG1lbWJl
cikgXApAQCAtMTQ3LDcgKzE1OSw2IEBAIHN0cnVjdCBNZXRob2RUYWJsZSB7CiAgICAgSlNDYXN0
aW5nSGVscGVyczo6SW5oZXJpdHNUcmFpdHM8Q2xhc3NOYW1lPjo6dHlwZVJhbmdlLCBcCiAgICAg
eyBcCiAgICAgICAgICZDbGFzc05hbWU6OmRlc3Ryb3ksIFwKLSAgICAgICAgJkNsYXNzTmFtZTo6
dmlzaXRDaGlsZHJlbiwgXAogICAgICAgICAmQ2xhc3NOYW1lOjpnZXRDYWxsRGF0YSwgXAogICAg
ICAgICAmQ2xhc3NOYW1lOjpnZXRDb25zdHJ1Y3REYXRhLCBcCiAgICAgICAgICZDbGFzc05hbWU6
OnB1dCwgXApAQCAtMTczLDYgKzE4NCw5IEBAIHN0cnVjdCBNZXRob2RUYWJsZSB7CiAgICAgICAg
ICZDbGFzc05hbWU6OmR1bXBUb1N0cmVhbSwgXAogICAgICAgICAmQ2xhc3NOYW1lOjphbmFseXpl
SGVhcCwgXAogICAgICAgICAmQ2xhc3NOYW1lOjplc3RpbWF0ZWRTaXplLCBcCisgICAgICAgICZD
bGFzc05hbWU6OnZpc2l0Q2hpbGRyZW4sIFwKKyAgICAgICAgJkNsYXNzTmFtZTo6dmlzaXRDaGls
ZHJlbiwgXAorICAgICAgICAmQ2xhc3NOYW1lOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzLCBcCiAg
ICAgICAgICZDbGFzc05hbWU6OnZpc2l0T3V0cHV0Q29uc3RyYWludHMsIFwKICAgICB9LCBcCiAg
ICAgQ2xhc3NOYW1lOjpUeXBlZEFycmF5U3RvcmFnZVR5cGUsIFwKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0Nsb25lZEFyZ3VtZW50cy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xvbmVkQXJndW1lbnRzLmNwcAkocmV2aXNpb24g
MjczMTE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xvbmVkQXJndW1lbnRz
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTUtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2Nyw3ICsyNjcsOCBAQCB2b2lkIENsb25lZEFyZ3Vt
ZW50czo6bWF0ZXJpYWxpemVTcGVjaWFsCiAgICAgICAgIG1hdGVyaWFsaXplU3BlY2lhbHMoZ2xv
YmFsT2JqZWN0KTsKIH0KIAotdm9pZCBDbG9uZWRBcmd1bWVudHM6OnZpc2l0Q2hpbGRyZW4oSlND
ZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0
b3I+Cit2b2lkIENsb25lZEFyZ3VtZW50czo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxs
LCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIENsb25lZEFyZ3VtZW50cyogdGhpc09iamVjdCA9
IGpzQ2FzdDxDbG9uZWRBcmd1bWVudHMqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lO
SEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC0yNzUsNSArMjc2LDcgQEAgdm9pZCBDbG9u
ZWRBcmd1bWVudHM6OnZpc2l0Q2hpbGRyZW4oSlNDZQogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNP
YmplY3QtPm1fY2FsbGVlKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKENsb25lZEFyZ3Vt
ZW50cyk7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9DbG9uZWRBcmd1bWVudHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9DbG9uZWRBcmd1bWVudHMuaAkocmV2aXNpb24gMjczMTE5KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xvbmVkQXJndW1lbnRzLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjAgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC02Miw3ICs2Miw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgU3RydWN0dXJlKiBj
cmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUgcHJvdG90eXBlKTsK
ICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTbG93UHV0U3RydWN0dXJlKFZNJiwgSlNHbG9i
YWxPYmplY3QqLCBKU1ZhbHVlIHByb3RvdHlwZSk7CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENo
aWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJF
TjsKIAogICAgIERFQ0xBUkVfSU5GTzsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvRGlyZWN0QXJndW1lbnRzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9EaXJlY3RBcmd1bWVudHMuY3BwCShyZXZpc2lvbiAyNzMxMTkpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EaXJlY3RBcmd1bWVudHMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE4IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtOTAsNyArOTAsOCBAQCBzaXplX3QgRGlyZWN0QXJndW1lbnRzOjplc3RpbWF0
ZWRTaXplKEpTCiAgICAgcmV0dXJuIEJhc2U6OmVzdGltYXRlZFNpemUoY2VsbCwgdm0pICsgbWFw
cGVkQXJndW1lbnRzU2l6ZSArIG1vZGlmaWVkQXJndW1lbnRzU2l6ZTsKIH0KIAotdm9pZCBEaXJl
Y3RBcmd1bWVudHM6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiB0aGlzQ2VsbCwgU2xvdFZpc2l0b3Im
IHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBEaXJlY3RBcmd1bWVu
dHM6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogdGhpc0NlbGwsIFZpc2l0b3ImIHZpc2l0b3Ip
CiB7CiAgICAgRGlyZWN0QXJndW1lbnRzKiB0aGlzT2JqZWN0ID0gc3RhdGljX2Nhc3Q8RGlyZWN0
QXJndW1lbnRzKj4odGhpc0NlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhp
c09iamVjdCwgaW5mbygpKTsKQEAgLTEwNCw2ICsxMDUsOCBAQCB2b2lkIERpcmVjdEFyZ3VtZW50
czo6dmlzaXRDaGlsZHJlbihKU0NlCiAgICAgR2VuZXJpY0FyZ3VtZW50czxEaXJlY3RBcmd1bWVu
dHM+Ojp2aXNpdENoaWxkcmVuKHRoaXNDZWxsLCB2aXNpdG9yKTsKIH0KIAorREVGSU5FX1ZJU0lU
X0NISUxEUkVOKERpcmVjdEFyZ3VtZW50cyk7CisKIFN0cnVjdHVyZSogRGlyZWN0QXJndW1lbnRz
OjpjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBK
U1ZhbHVlIHByb3RvdHlwZSkKIHsKICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGds
b2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhEaXJlY3RBcmd1bWVudHNUeXBlLCBTdHJ1
Y3R1cmVGbGFncyksIGluZm8oKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9EaXJlY3RBcmd1bWVudHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9EaXJlY3RBcmd1bWVudHMuaAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvRGlyZWN0QXJndW1lbnRzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTkgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC02NSw3ICs2NSw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgRGlyZWN0QXJndW1lbnRzKiBjcmVh
dGVCeUNvcHlpbmcoSlNHbG9iYWxPYmplY3QqLCBDYWxsRnJhbWUqKTsKIAogICAgIHN0YXRpYyBz
aXplX3QgZXN0aW1hdGVkU2l6ZShKU0NlbGwqLCBWTSYpOwotICAgIHN0YXRpYyB2b2lkIHZpc2l0
Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxE
UkVOOwogICAgIAogICAgIHVpbnQzMl90IGludGVybmFsTGVuZ3RoKCkgY29uc3QKICAgICB7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FdmFsRXhlY3V0YWJsZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXZhbEV4ZWN1dGFibGUu
Y3BwCShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9F
dmFsRXhlY3V0YWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDA5LCAyMDEwLCAyMDEzLCAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01
MCw3ICs1MCw4IEBAIGF1dG8gRXZhbEV4ZWN1dGFibGU6OmVuc3VyZVRlbXBsYXRlT2JqZWMKICAg
ICByZXR1cm4gZW5zdXJlVGVtcGxhdGVPYmplY3RNYXBJbXBsKG1fdGVtcGxhdGVPYmplY3RNYXAp
OwogfQogCi12b2lkIEV2YWxFeGVjdXRhYmxlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwg
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBF
dmFsRXhlY3V0YWJsZTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2
aXNpdG9yKQogewogICAgIEV2YWxFeGVjdXRhYmxlKiB0aGlzT2JqZWN0ID0ganNDYXN0PEV2YWxF
eGVjdXRhYmxlKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2Jq
ZWN0LCBpbmZvKCkpOwpAQCAtNjQsNCArNjUsNiBAQCB2b2lkIEV2YWxFeGVjdXRhYmxlOjp2aXNp
dENoaWxkcmVuKEpTQ2VsCiAgICAgfQogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oRXZhbEV4
ZWN1dGFibGUpOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0V2YWxFeGVjdXRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvRXZhbEV4ZWN1dGFibGUuaAkocmV2aXNpb24gMjczMTE5KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXZhbEV4ZWN1dGFibGUuaAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxOSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTc5LDcgKzc5LDcgQEAgcHJvdGVjdGVkOgogICAgIHVzaW5nIEJhc2U6OmZpbmlz
aENyZWF0aW9uOwogICAgIEV2YWxFeGVjdXRhYmxlKEpTR2xvYmFsT2JqZWN0KiwgY29uc3QgU291
cmNlQ29kZSYsIGJvb2wgaW5TdHJpY3RDb250ZXh0LCBEZXJpdmVkQ29udGV4dFR5cGUsIGJvb2wg
aXNBcnJvd0Z1bmN0aW9uQ29udGV4dCwgYm9vbCBpc0luc2lkZU9yZGluYXJ5RnVuY3Rpb24sIEV2
YWxDb250ZXh0VHlwZSwgTmVlZHNDbGFzc0ZpZWxkSW5pdGlhbGl6ZXIsIFByaXZhdGVCcmFuZFJl
cXVpcmVtZW50KTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xv
dFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgdW5zaWduZWQg
bV9uZWVkc0NsYXNzRmllbGRJbml0aWFsaXplciA6IDE7CiAgICAgdW5zaWduZWQgbV9wcml2YXRl
QnJhbmRSZXF1aXJlbWVudCA6IDE7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9FeGNlcHRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0V4Y2VwdGlvbi5jcHAJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0V4Y2VwdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01Myw3ICs1Myw4
IEBAIFN0cnVjdHVyZSogRXhjZXB0aW9uOjpjcmVhdGVTdHJ1Y3R1cmUoVk0KICAgICByZXR1cm4g
U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhD
ZWxsVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwogfQogCi12b2lkIEV4Y2VwdGlvbjo6
dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxh
dGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgRXhjZXB0aW9uOjp2aXNpdENoaWxkcmVuSW1wbChK
U0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgRXhjZXB0aW9uKiB0aGlzT2Jq
ZWN0ID0ganNDYXN0PEV4Y2VwdGlvbio+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5I
RVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTY0LDYgKzY1LDggQEAgdm9pZCBFeGNlcHRp
b246OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZQogICAgICAgICBmcmFtZS52aXNpdENoaWxkcmVu
KHZpc2l0b3IpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oRXhjZXB0aW9uKTsKKwogRXhj
ZXB0aW9uOjpFeGNlcHRpb24oVk0mIHZtKQogICAgIDogQmFzZSh2bSwgdm0uZXhjZXB0aW9uU3Ry
dWN0dXJlLmdldCgpKQogewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhj
ZXB0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhj
ZXB0aW9uLmgJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0V4Y2VwdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxNS0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTEsNyArNTEsNyBAQCBwdWJsaWM6
CiAKICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9i
amVjdCosIEpTVmFsdWUgcHJvdG90eXBlKTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwog
CiAgICAgREVDTEFSRV9FWFBPUlRfSU5GTzsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvRnVuY3Rpb25FeGVjdXRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvbkV4ZWN1dGFibGUuY3BwCShyZXZpc2lvbiAyNzMx
MTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvbkV4ZWN1dGFibGUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwOS0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAwOS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjcsNyArNjcsOCBAQCBGdW5jdGlvbkNvZGVCbG9jayog
RnVuY3Rpb25FeGVjdXRhYmxlOjpiCiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEZ1bmN0aW9uQ29k
ZUJsb2NrKj4oZWRnZS0+Y29kZUJsb2NrKCktPmJhc2VsaW5lQWx0ZXJuYXRpdmUoKSk7CiB9CiAK
LXZvaWQgRnVuY3Rpb25FeGVjdXRhYmxlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xv
dFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBGdW5j
dGlvbkV4ZWN1dGFibGU6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYg
dmlzaXRvcikKIHsKICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8
RnVuY3Rpb25FeGVjdXRhYmxlKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklU
Uyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtODYsNiArODcsOCBAQCB2b2lkIEZ1bmN0aW9uRXhl
Y3V0YWJsZTo6dmlzaXRDaGlsZHJlbihKCiAgICAgfQogfQogCitERUZJTkVfVklTSVRfQ0hJTERS
RU4oRnVuY3Rpb25FeGVjdXRhYmxlKTsKKwogRnVuY3Rpb25FeGVjdXRhYmxlKiBGdW5jdGlvbkV4
ZWN1dGFibGU6OmZyb21HbG9iYWxDb2RlKAogICAgIGNvbnN0IElkZW50aWZpZXImIG5hbWUsIEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgCiAg
ICAgSlNPYmplY3QqJiBleGNlcHRpb24sIGludCBvdmVycmlkZUxpbmVOdW1iZXIsIE9wdGlvbmFs
PGludD4gZnVuY3Rpb25Db25zdHJ1Y3RvclBhcmFtZXRlcnNFbmRQb3NpdGlvbikKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZS5o
CShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5j
dGlvbkV4ZWN1dGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDktMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDktMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE2Niw3ICsxNjYsNyBAQCBwdWJs
aWM6CiAgICAgSlNQYXJzZXJTY3JpcHRNb2RlIHNjcmlwdE1vZGUoKSBjb25zdCB7IHJldHVybiBt
X3VubGlua2VkRXhlY3V0YWJsZS0+c2NyaXB0TW9kZSgpOyB9CiAgICAgU291cmNlQ29kZSBjbGFz
c1NvdXJjZSgpIGNvbnN0IHsgcmV0dXJuIG1fdW5saW5rZWRFeGVjdXRhYmxlLT5jbGFzc1NvdXJj
ZSgpOyB9CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNp
dG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKICAgICBzdGF0aWMgU3RydWN0dXJl
KiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBK
U1ZhbHVlIHByb3RvKQogICAgIHsKICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZt
LCBnbG9iYWxPYmplY3QsIHByb3RvLCBUeXBlSW5mbyhGdW5jdGlvbkV4ZWN1dGFibGVUeXBlLCBT
dHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9GdW5jdGlvblJhcmVEYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9GdW5jdGlvblJhcmVEYXRhLmNwcAkocmV2aXNpb24gMjczMTE5KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25SYXJlRGF0YS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTkg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIw
MjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC01MSw3ICs1MSw4IEBAIFN0cnVjdHVyZSogRnVuY3Rpb25SYXJlRGF0YTo6
Y3JlYXRlU3RydWMKICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVj
dCwgcHJvdG90eXBlLCBUeXBlSW5mbyhDZWxsVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkp
OwogfQogCi12b2lkIEZ1bmN0aW9uUmFyZURhdGE6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxs
LCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lk
IEZ1bmN0aW9uUmFyZURhdGE6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRv
ciYgdmlzaXRvcikKIHsKICAgICBGdW5jdGlvblJhcmVEYXRhKiByYXJlRGF0YSA9IGpzQ2FzdDxG
dW5jdGlvblJhcmVEYXRhKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhj
ZWxsLCBpbmZvKCkpOwpAQCAtNjMsNiArNjQsOCBAQCB2b2lkIEZ1bmN0aW9uUmFyZURhdGE6OnZp
c2l0Q2hpbGRyZW4oSlNDCiAgICAgdmlzaXRvci5hcHBlbmQocmFyZURhdGEtPm1fZXhlY3V0YWJs
ZSk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihGdW5jdGlvblJhcmVEYXRhKTsKKwogRnVu
Y3Rpb25SYXJlRGF0YTo6RnVuY3Rpb25SYXJlRGF0YShWTSYgdm0sIEV4ZWN1dGFibGVCYXNlKiBl
eGVjdXRhYmxlKQogICAgIDogQmFzZSh2bSwgdm0uZnVuY3Rpb25SYXJlRGF0YVN0cnVjdHVyZS5n
ZXQoKSkKICAgICAsIG1fb2JqZWN0QWxsb2NhdGlvblByb2ZpbGUoKQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25SYXJlRGF0YS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uUmFyZURhdGEuaAkocmV2aXNpb24g
MjczMTE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25SYXJlRGF0
YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxNS0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjUsNyArNjUsNyBAQCBwdWJsaWM6CiAKICAgICBzdGF0
aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFs
dWUgcHJvdG90eXBlKTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwg
U2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgREVDTEFS
RV9JTkZPOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljQXJn
dW1lbnRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2Vu
ZXJpY0FyZ3VtZW50cy5oCShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9HZW5lcmljQXJndW1lbnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00NCw3ICs0
NCw3IEBAIHByb3RlY3RlZDoKICAgICB7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRD
aGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERS
RU47CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiwgSlNHbG9i
YWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwogICAgIHN0YXRpYyBib29s
IGdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIHVu
c2lnbmVkIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CiAgICAgc3RhdGljIHZvaWQgZ2V0
T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1l
QXJyYXkmLCBEb250RW51bVByb3BlcnRpZXNNb2RlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0dlbmVyaWNBcmd1bWVudHNJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50c0lubGluZXMuaAkocmV2
aXNpb24gMjczMTE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY0Fy
Z3VtZW50c0lubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTUtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMxLDcgKzMxLDggQEAKIG5hbWVz
cGFjZSBKU0MgewogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlPgotdm9pZCBHZW5lcmljQXJndW1l
bnRzPFR5cGU+Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogdGhpc0NlbGwsIFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgR2VuZXJpY0FyZ3VtZW50
czxUeXBlPjo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiB0aGlzQ2VsbCwgVmlzaXRvciYgdmlz
aXRvcikKIHsKICAgICBUeXBlKiB0aGlzT2JqZWN0ID0gc3RhdGljX2Nhc3Q8VHlwZSo+KHRoaXND
ZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7
CkBAIC00MSw2ICs0Miw4IEBAIHZvaWQgR2VuZXJpY0FyZ3VtZW50czxUeXBlPjo6dmlzaXRDaGls
ZHIKICAgICAgICAgdmlzaXRvci5tYXJrQXV4aWxpYXJ5KHRoaXNPYmplY3QtPm1fbW9kaWZpZWRB
cmd1bWVudHNEZXNjcmlwdG9yLmdldFVuc2FmZSgpKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxE
UkVOX1dJVEhfTU9ESUZJRVIodGVtcGxhdGU8dHlwZW5hbWUgVHlwZT4sIEdlbmVyaWNBcmd1bWVu
dHM8VHlwZT4pOworCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlPgogYm9vbCBHZW5lcmljQXJndW1l
bnRzPFR5cGU+OjpnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqIG9iamVjdCwgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lIGlkZW50LCBQcm9wZXJ0eVNsb3QmIHNs
b3QpCiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZXR0ZXJTZXR0ZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dldHRlclNl
dHRlci5jcHAJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0dldHRlclNldHRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSw3IEBACiAvKgog
ICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAyIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcp
CiAgKiAgQ29weXJpZ2h0IChDKSAyMDAxIFBldGVyIEtlbGx5IChwbWtAcG9zdC5jb20pCi0gKiAg
Q29weXJpZ2h0IChDKSAyMDA0LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogIENvcHlyaWdodCAoQykgMjAwNC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0zMyw3ICszMyw4IEBAIFNUQVRJQ19BU1NFUlRf
SVNfVFJJVklBTExZX0RFU1RSVUNUSUJMRSgKIAogY29uc3QgQ2xhc3NJbmZvIEdldHRlclNldHRl
cjo6c19pbmZvID0geyAiR2V0dGVyU2V0dGVyIiwgbnVsbHB0ciwgbnVsbHB0ciwgbnVsbHB0ciwg
Q1JFQVRFX01FVEhPRF9UQUJMRShHZXR0ZXJTZXR0ZXIpIH07CiAKLXZvaWQgR2V0dGVyU2V0dGVy
Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1w
bGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBHZXR0ZXJTZXR0ZXI6OnZpc2l0Q2hpbGRyZW5J
bXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBHZXR0ZXJTZXR0ZXIq
IHRoaXNPYmplY3QgPSBqc0Nhc3Q8R2V0dGVyU2V0dGVyKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dD
X09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNDMsNiArNDQsOCBAQCB2
b2lkIEdldHRlclNldHRlcjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqCiAgICAgdmlzaXRvci5hcHBl
bmQodGhpc09iamVjdC0+bV9zZXR0ZXIpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oR2V0
dGVyU2V0dGVyKTsKKwogSlNWYWx1ZSBjYWxsR2V0dGVyKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEpTVmFsdWUgYmFzZSwgSlNWYWx1ZSBnZXR0ZXJTZXR0ZXIpCiB7CiAgICAgVk0mIHZt
ID0gZ2xvYmFsT2JqZWN0LT52bSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvR2V0dGVyU2V0dGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvR2V0dGVyU2V0dGVyLmgJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0dldHRlclNldHRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEs
NyBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMSBIYXJyaSBQb3J0ZW4gKHBvcnRl
bkBrZGUub3JnKQogICogIENvcHlyaWdodCAoQykgMjAwMSBQZXRlciBLZWxseSAocG1rQHBvc3Qu
Y29tKQotICogIENvcHlyaWdodCAoQykgMjAwMy0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtODIsNyArODIsNyBAQCBwdWJs
aWM6CiAgICAgICAgIHJldHVybiBjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgZ2V0dGVyT2JqZWN0
LCBzZXR0ZXJPYmplY3QpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4o
SlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAg
ICAgSlNPYmplY3QqIGdldHRlcigpIGNvbnN0IHsgcmV0dXJuIG1fZ2V0dGVyLmdldCgpOyB9CiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0hhc2hNYXBJbXBsLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9IYXNoTWFwSW1wbC5jcHAJ
KHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0hhc2hN
YXBJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMCw2ICszMCw5IEBACiAKIG5hbWVzcGFjZSBKU0Mg
ewogCitERUZJTkVfVklTSVRfQ0hJTERSRU5fV0lUSF9NT0RJRklFUih0ZW1wbGF0ZTw+LCBIYXNo
TWFwQnVja2V0PEhhc2hNYXBCdWNrZXREYXRhS2V5Pik7CitERUZJTkVfVklTSVRfQ0hJTERSRU5f
V0lUSF9NT0RJRklFUih0ZW1wbGF0ZTw+LCBIYXNoTWFwQnVja2V0PEhhc2hNYXBCdWNrZXREYXRh
S2V5VmFsdWU+KTsKKwogdGVtcGxhdGU8PgogY29uc3QgQ2xhc3NJbmZvIEhhc2hNYXBCdWNrZXQ8
SGFzaE1hcEJ1Y2tldERhdGFLZXk+OjpzX2luZm8gPQogICAgIHsgIkhhc2hNYXBCdWNrZXQiLCBu
dWxscHRyLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEhhc2hNYXBCdWNr
ZXQ8SGFzaE1hcEJ1Y2tldERhdGFLZXk+KSB9OwpAQCAtMzgsOCArNDEsOSBAQCB0ZW1wbGF0ZTw+
CiBjb25zdCBDbGFzc0luZm8gSGFzaE1hcEJ1Y2tldDxIYXNoTWFwQnVja2V0RGF0YUtleVZhbHVl
Pjo6c19pbmZvID0KICAgICB7ICJIYXNoTWFwQnVja2V0IiwgbnVsbHB0ciwgbnVsbHB0ciwgbnVs
bHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShIYXNoTWFwQnVja2V0PEhhc2hNYXBCdWNrZXREYXRh
S2V5VmFsdWU+KSB9OwogCi10ZW1wbGF0ZSA8dHlwZW5hbWUgRGF0YT4KLXZvaWQgSGFzaE1hcEJ1
Y2tldDxEYXRhPjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNp
dG9yKQordGVtcGxhdGU8dHlwZW5hbWUgRGF0YT4KK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+
Cit2b2lkIEhhc2hNYXBCdWNrZXQ8RGF0YT46OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2Vs
bCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBIYXNoTWFwQnVja2V0KiB0aGlzT2JqZWN0ID0g
anNDYXN0PEhhc2hNYXBCdWNrZXQqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVS
SVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC01Miw4ICs1Niw5IEBAIHZvaWQgSGFzaE1hcEJ1
Y2tldDxEYXRhPjo6dmlzaXRDaGlsZHJlbigKICAgICB2aXNpdG9yLmFwcGVuZFZhbHVlcyhiaXR3
aXNlX2Nhc3Q8V3JpdGVCYXJyaWVyPFVua25vd24+Kj4oJnRoaXNPYmplY3QtPm1fZGF0YSksIHNp
emVvZihEYXRhKSAvIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKTsKIH0KIAotdGVtcGxh
dGUgPHR5cGVuYW1lIEhhc2hNYXBCdWNrZXQ+Ci12b2lkIEhhc2hNYXBJbXBsPEhhc2hNYXBCdWNr
ZXQ+Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0
ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoTWFwQnVja2V0PgordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRv
cj4KK3ZvaWQgSGFzaE1hcEltcGw8SGFzaE1hcEJ1Y2tldD46OnZpc2l0Q2hpbGRyZW5JbXBsKEpT
Q2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBIYXNoTWFwSW1wbCogdGhpc09i
amVjdCA9IGpzQ2FzdDxIYXNoTWFwSW1wbCo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1Rf
SU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTY2LDYgKzcxLDggQEAgdm9pZCBIYXNo
TWFwSW1wbDxIYXNoTWFwQnVja2V0Pjo6dmlzaXRDaAogICAgICAgICB2aXNpdG9yLm1hcmtBdXhp
bGlhcnkoYnVmZmVyKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOX1dJVEhfTU9ESUZJRVIo
dGVtcGxhdGU8dHlwZW5hbWUgSGFzaE1hcEJ1Y2tldD4sIEhhc2hNYXBJbXBsPEhhc2hNYXBCdWNr
ZXQ+KTsKKwogdGVtcGxhdGUgPHR5cGVuYW1lIEhhc2hNYXBCdWNrZXQ+CiBzaXplX3QgSGFzaE1h
cEltcGw8SGFzaE1hcEJ1Y2tldD46OmVzdGltYXRlZFNpemUoSlNDZWxsKiBjZWxsLCBWTSYgdm0p
CiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9IYXNoTWFwSW1wbC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0hhc2hNYXBJbXBsLmgJ
KHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0hhc2hN
YXBJbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDE2LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xNDgsNyArMTQ4LDcgQEAgcHVibGljOgogICAg
ICAgICByZXR1cm4gbV9kYXRhLnZhbHVlLmdldCgpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lk
IHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lU
X0NISUxEUkVOOwogCiAgICAgQUxXQVlTX0lOTElORSBIYXNoTWFwQnVja2V0KiBuZXh0KCkgY29u
c3QgeyByZXR1cm4gbV9uZXh0LmdldCgpOyB9CiAgICAgQUxXQVlTX0lOTElORSBIYXNoTWFwQnVj
a2V0KiBwcmV2KCkgY29uc3QgeyByZXR1cm4gbV9wcmV2LmdldCgpOyB9CkBAIC0zNjQsNyArMzY0
LDcgQEAgY2xhc3MgSGFzaE1hcEltcGwgOiBwdWJsaWMgSlNOb25GaW5hbE9iagogcHVibGljOgog
ICAgIHVzaW5nIEJ1Y2tldFR5cGUgPSBIYXNoTWFwQnVja2V0VHlwZTsKIAotICAgIHN0YXRpYyB2
b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJ
U0lUX0NISUxEUkVOOwogCiAgICAgc3RhdGljIHNpemVfdCBlc3RpbWF0ZWRTaXplKEpTQ2VsbCos
IFZNJik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGVybmFsRnVu
Y3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lu
dGVybmFsRnVuY3Rpb24uY3BwCShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9JbnRlcm5hbEZ1bmN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw3
ICsxLDcgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDIgSGFycmkgUG9ydGVuIChw
b3J0ZW5Aa2RlLm9yZykKICAqICBDb3B5cmlnaHQgKEMpIDIwMDEgUGV0ZXIgS2VsbHkgKHBta0Bw
b3N0LmNvbSkKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDA0LTIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTY0LDcgKzY0LDggQEAg
dm9pZCBJbnRlcm5hbEZ1bmN0aW9uOjpmaW5pc2hDcmVhdGlvbihWTQogICAgIH0KIH0KIAotdm9p
ZCBJbnRlcm5hbEZ1bmN0aW9uOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0
b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBJbnRlcm5hbEZ1
bmN0aW9uOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3Ip
CiB7CiAgICAgSW50ZXJuYWxGdW5jdGlvbiogdGhpc09iamVjdCA9IGpzQ2FzdDxJbnRlcm5hbEZ1
bmN0aW9uKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0
LCBpbmZvKCkpOwpAQCAtNzMsNiArNzQsOCBAQCB2b2lkIEludGVybmFsRnVuY3Rpb246OnZpc2l0
Q2hpbGRyZW4oSlNDCiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9vcmlnaW5hbE5h
bWUpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU5fV0lUSF9NT0RJRklFUihKU19FWFBPUlRf
UFJJVkFURSwgSW50ZXJuYWxGdW5jdGlvbik7CisKIGNvbnN0IFN0cmluZyYgSW50ZXJuYWxGdW5j
dGlvbjo6bmFtZSgpCiB7CiAgICAgY29uc3QgU3RyaW5nJiBuYW1lID0gbV9vcmlnaW5hbE5hbWUt
PnRyeUdldFZhbHVlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRl
cm5hbEZ1bmN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSW50ZXJuYWxGdW5jdGlvbi5oCShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9JbnRlcm5hbEZ1bmN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NiArMSw2IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAwIEhhcnJpIFBvcnRlbiAo
cG9ydGVuQGtkZS5vcmcpCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMTkgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwMy0yMDIxIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqICBDb3B5cmlnaHQgKEMpIDIwMDcgQ2FtZXJvbiBa
d2FyaWNoIChjd3p3YXJpY2hAdXdhdGVybG9vLmNhKQogICogIENvcHlyaWdodCAoQykgMjAwNyBN
YWtzIE9ybG92aWNoCiAgKgpAQCAtNDYsNyArNDYsNyBAQCBwdWJsaWM6CiAKICAgICBERUNMQVJF
X0VYUE9SVF9JTkZPOwogCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgdmlzaXRD
aGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERS
RU5fV0lUSF9NT0RJRklFUihKU19FWFBPUlRfUFJJVkFURSk7CiAKICAgICBKU19FWFBPUlRfUFJJ
VkFURSBjb25zdCBTdHJpbmcmIG5hbWUoKTsKICAgICBjb25zdCBTdHJpbmcgZGlzcGxheU5hbWUo
Vk0mKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxDb2xsYXRvci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bENvbGxh
dG9yLmNwcAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSW50bENvbGxhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw3ICsxLDcgQEAKIC8qCiAg
KiBDb3B5cmlnaHQgKEMpIDIwMTUgQW5keSBWYW5XYWdvbmVyIChhbmR5QHZhbndhZ29uZXIuZmFt
aWx5KQogICogQ29weXJpZ2h0IChDKSAyMDE1IFN1a29sc2FrIFNha3NodXdvbmcgKHN1a29sc2Fr
QGdtYWlsLmNvbSkKLSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIwIEFwcGxlIEluYy4gQWxsIFJp
Z2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIxIEFwcGxlIEluYy4gQWxs
IFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjUs
NyArNjUsOCBAQCB2b2lkIEludGxDb2xsYXRvcjo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtCiAgICAg
QVNTRVJUKGluaGVyaXRzKHZtLCBpbmZvKCkpKTsKIH0KIAotdm9pZCBJbnRsQ29sbGF0b3I6OnZp
c2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRl
PHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEludGxDb2xsYXRvcjo6dmlzaXRDaGlsZHJlbkltcGwo
SlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEludGxDb2xsYXRvciogdGhp
c09iamVjdCA9IGpzQ2FzdDxJbnRsQ29sbGF0b3IqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JK
RUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC03NSw2ICs3Niw4IEBAIHZvaWQg
SW50bENvbGxhdG9yOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCoKICAgICB2aXNpdG9yLmFwcGVuZCh0
aGlzT2JqZWN0LT5tX2JvdW5kQ29tcGFyZSk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihJ
bnRsQ29sbGF0b3IpOworCiBWZWN0b3I8U3RyaW5nPiBJbnRsQ29sbGF0b3I6OnNvcnRMb2NhbGVE
YXRhKGNvbnN0IFN0cmluZyYgbG9jYWxlLCBSZWxldmFudEV4dGVuc2lvbktleSBrZXkpCiB7CiAg
ICAgLy8gOS4xIEludGVybmFsIHNsb3RzIG9mIFNlcnZpY2UgQ29uc3RydWN0b3JzICYgMTAuMi4z
IEludGVybmFsIHNsb3RzIChFQ01BLTQwMiAyLjApCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9JbnRsQ29sbGF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9JbnRsQ29sbGF0b3IuaAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bENvbGxhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDE1IEFuZHkgVmFuV2Fnb25lciAo
YW5keUB2YW53YWdvbmVyLmZhbWlseSkKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMu
IEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTgwLDcgKzgxLDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBJbnRsQ29sbGF0b3IoVk0mLCBT
dHJ1Y3R1cmUqKTsKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7Ci0gICAgc3RhdGljIHZv
aWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklT
SVRfQ0hJTERSRU47CiAKICAgICBib29sIHVwZGF0ZUNhbkRvQVNDSUlVQ0FEVUNFVENvbXBhcmlz
b24oKSBjb25zdDsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERh
dGVUaW1lRm9ybWF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9JbnRsRGF0ZVRpbWVGb3JtYXQuY3BwCShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsRGF0ZVRpbWVGb3JtYXQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxNSBBbmR5IFZhbldh
Z29uZXIgKGFuZHlAdmFud2Fnb25lci5mYW1pbHkpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAy
MCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYt
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTkwLDcgKzkwLDggQEAgdm9pZCBJbnRsRGF0ZVRpbWVGb3JtYXQ6OmZp
bmlzaENyZWF0aW9uKAogICAgIEFTU0VSVChpbmhlcml0cyh2bSwgaW5mbygpKSk7CiB9CiAKLXZv
aWQgSW50bERhdGVUaW1lRm9ybWF0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZp
c2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBJbnRsRGF0
ZVRpbWVGb3JtYXQ6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlz
aXRvcikKIHsKICAgICBJbnRsRGF0ZVRpbWVGb3JtYXQqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SW50
bERhdGVUaW1lRm9ybWF0Kj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0
aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtMTAwLDYgKzEwMSw4IEBAIHZvaWQgSW50bERhdGVUaW1l
Rm9ybWF0Ojp2aXNpdENoaWxkcmVuKEoKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5t
X2JvdW5kRm9ybWF0KTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEludGxEYXRlVGltZUZv
cm1hdCk7CisKIHZvaWQgSW50bERhdGVUaW1lRm9ybWF0OjpzZXRCb3VuZEZvcm1hdChWTSYgdm0s
IEpTQm91bmRGdW5jdGlvbiogZm9ybWF0KQogewogICAgIG1fYm91bmRGb3JtYXQuc2V0KHZtLCB0
aGlzLCBmb3JtYXQpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERh
dGVUaW1lRm9ybWF0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSW50bERhdGVUaW1lRm9ybWF0LmgJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0ludGxEYXRlVGltZUZvcm1hdC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxNSBBbmR5IFZhbldhZ29uZXIg
KGFuZHlAdmFud2Fnb25lci5mYW1pbHkpCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC04NSw3ICs4Niw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgSW50bERhdGVUaW1lRm9ybWF0
KFZNJiwgU3RydWN0dXJlKik7CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOwotICAgIHN0
YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNM
QVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgc3RhdGljIFZlY3RvcjxTdHJpbmc+IGxvY2FsZURh
dGEoY29uc3QgU3RyaW5nJiwgUmVsZXZhbnRFeHRlbnNpb25LZXkpOwogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTG9jYWxlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTG9jYWxlLmNwcAkocmV2aXNpb24gMjczMTE5
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bExvY2FsZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDIwIFNvbnkg
SW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC01OCw3ICs1OSw4IEBAIHZvaWQgSW50bExvY2FsZTo6ZmluaXNoQ3JlYXRpb24oVk0m
IHZtKQogICAgIEFTU0VSVChpbmhlcml0cyh2bSwgaW5mbygpKSk7CiB9CiAKLXZvaWQgSW50bExv
Y2FsZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQor
dGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSW50bExvY2FsZTo6dmlzaXRDaGlsZHJl
bkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGF1dG8qIHRoaXNP
YmplY3QgPSBqc0Nhc3Q8SW50bExvY2FsZSo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1Rf
SU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTY2LDYgKzY4LDggQEAgdm9pZCBJbnRs
TG9jYWxlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogYwogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4o
dGhpc09iamVjdCwgdmlzaXRvcik7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihJbnRsTG9j
YWxlKTsKKwogY2xhc3MgTG9jYWxlSURCdWlsZGVyIGZpbmFsIHsKIHB1YmxpYzoKICAgICBib29s
IGluaXRpYWxpemUoY29uc3QgU3RyaW5nJik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9JbnRsTG9jYWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSW50bExvY2FsZS5oCShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9JbnRsTG9jYWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2
IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDIwIFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlu
bWVudCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03MSw3ICs3Miw3IEBA
IHB1YmxpYzoKIHByaXZhdGU6CiAgICAgSW50bExvY2FsZShWTSYsIFN0cnVjdHVyZSopOwogICAg
IHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVu
KEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAog
ICAgIFN0cmluZyBrZXl3b3JkVmFsdWUoQVNDSUlMaXRlcmFsLCBib29sIGlzQm9vbGVhbiA9IGZh
bHNlKSBjb25zdDsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE51
bWJlckZvcm1hdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSW50bE51bWJlckZvcm1hdC5jcHAJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0ludGxOdW1iZXJGb3JtYXQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDcgKzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxNSBBbmR5IFZhbldhZ29uZXIg
KGFuZHlAdmFud2Fnb25lci5mYW1pbHkpCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTYgU3Vrb2xzYWsg
U2Frc2h1d29uZyAoc3Vrb2xzYWtAZ21haWwuY29tKQotICogQ29weXJpZ2h0IChDKSAyMDE2LTIw
MjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2
LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAy
MDIwIFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CkBAIC03Myw3ICs3Myw4IEBAIHZvaWQgSW50bE51bWJlckZvcm1hdDo6ZmluaXNoQ3JlYXRpb24o
Vk0KICAgICBBU1NFUlQoaW5oZXJpdHModm0sIGluZm8oKSkpOwogfQogCi12b2lkIEludGxOdW1i
ZXJGb3JtYXQ6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRv
cikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEludGxOdW1iZXJGb3JtYXQ6OnZp
c2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBJ
bnRsTnVtYmVyRm9ybWF0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEludGxOdW1iZXJGb3JtYXQqPihj
ZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7
CkBAIC04Myw2ICs4NCw4IEBAIHZvaWQgSW50bE51bWJlckZvcm1hdDo6dmlzaXRDaGlsZHJlbihK
U0MKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2JvdW5kRm9ybWF0KTsKIH0KIAor
REVGSU5FX1ZJU0lUX0NISUxEUkVOKEludGxOdW1iZXJGb3JtYXQpOworCiBWZWN0b3I8U3RyaW5n
PiBJbnRsTnVtYmVyRm9ybWF0Ojpsb2NhbGVEYXRhKGNvbnN0IFN0cmluZyYgbG9jYWxlLCBSZWxl
dmFudEV4dGVuc2lvbktleSBrZXkpCiB7CiAgICAgLy8gOS4xIEludGVybmFsIHNsb3RzIG9mIFNl
cnZpY2UgQ29uc3RydWN0b3JzICYgMTEuMi4zIEludGVybmFsIHNsb3RzIChFQ01BLTQwMiAyLjAp
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTnVtYmVyRm9ybWF0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE51bWJlckZv
cm1hdC5oCShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9JbnRsTnVtYmVyRm9ybWF0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw3IEBACiAvKgog
ICogQ29weXJpZ2h0IChDKSAyMDE1IEFuZHkgVmFuV2Fnb25lciAoYW5keUB2YW53YWdvbmVyLmZh
bWlseSkKICAqIENvcHlyaWdodCAoQykgMjAyMCBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1l
bnQgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtOTYsNyArOTcsNyBAQCBw
dWJsaWM6CiBwcml2YXRlOgogICAgIEludGxOdW1iZXJGb3JtYXQoVk0mLCBTdHJ1Y3R1cmUqKTsK
ICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGls
ZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47
CiAKICAgICBzdGF0aWMgVmVjdG9yPFN0cmluZz4gbG9jYWxlRGF0YShjb25zdCBTdHJpbmcmLCBS
ZWxldmFudEV4dGVuc2lvbktleSk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0ludGxQbHVyYWxSdWxlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSW50bFBsdXJhbFJ1bGVzLmNwcAkocmV2aXNpb24gMjczMTE5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFBsdXJhbFJ1bGVzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTggQW5keSBWYW5X
YWdvbmVyIChhbmR5QHZhbndhZ29uZXIuZmFtaWx5KQotICogQ29weXJpZ2h0IChDKSAyMDE5LTIw
MjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE5
LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC02MSw3ICs2MSw4IEBAIHZvaWQgSW50bFBsdXJhbFJ1bGVzOjpmaW5p
c2hDcmVhdGlvbihWTSYKICAgICBBU1NFUlQoaW5oZXJpdHModm0sIGluZm8oKSkpOwogfQogCi12
b2lkIEludGxQbHVyYWxSdWxlczo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNp
dG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSW50bFBsdXJh
bFJ1bGVzOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3Ip
CiB7CiAgICAgSW50bFBsdXJhbFJ1bGVzKiB0aGlzT2JqZWN0ID0ganNDYXN0PEludGxQbHVyYWxS
dWxlcyo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwg
aW5mbygpKTsKQEAgLTY5LDYgKzcwLDggQEAgdm9pZCBJbnRsUGx1cmFsUnVsZXM6OnZpc2l0Q2hp
bGRyZW4oSlNDZQogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7
CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihJbnRsUGx1cmFsUnVsZXMpOworCiBWZWN0b3I8
U3RyaW5nPiBJbnRsUGx1cmFsUnVsZXM6OmxvY2FsZURhdGEoY29uc3QgU3RyaW5nJiwgUmVsZXZh
bnRFeHRlbnNpb25LZXkpCiB7CiAgICAgcmV0dXJuIHsgfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0ludGxQbHVyYWxSdWxlcy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxQbHVyYWxSdWxlcy5oCShyZXZpc2lvbiAyNzMxMTkp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsUGx1cmFsUnVsZXMuaAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTggQW5k
eSBWYW5XYWdvbmVyIChhbmR5QHZhbndhZ29uZXIuZmFtaWx5KQorICogQ29weXJpZ2h0IChDKSAy
MDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtNjYsNyArNjcsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIEludGxQ
bHVyYWxSdWxlcyhWTSYsIFN0cnVjdHVyZSopOwogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0m
KTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7
CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIHN0YXRpYyBWZWN0b3I8U3RyaW5n
PiBsb2NhbGVEYXRhKGNvbnN0IFN0cmluZyYsIFJlbGV2YW50RXh0ZW5zaW9uS2V5KTsKIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFJlbGF0aXZlVGltZUZvcm1hdC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFJlbGF0
aXZlVGltZUZvcm1hdC5jcHAJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0ludGxSZWxhdGl2ZVRpbWVGb3JtYXQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAyMCBTb255IEludGVyYWN0aXZl
IEVudGVydGFpbm1lbnQgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjIs
NyArNjMsOCBAQCB2b2lkIEludGxSZWxhdGl2ZVRpbWVGb3JtYXQ6OmZpbmlzaENyZWF0CiAgICAg
QVNTRVJUKGluaGVyaXRzKHZtLCBpbmZvKCkpKTsKIH0KIAotdm9pZCBJbnRsUmVsYXRpdmVUaW1l
Rm9ybWF0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3Ip
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBJbnRsUmVsYXRpdmVUaW1lRm9ybWF0
Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAg
ICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxJbnRsUmVsYXRpdmVUaW1lRm9ybWF0Kj4oY2Vs
bCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpA
QCAtNzAsNiArNzIsOCBAQCB2b2lkIEludGxSZWxhdGl2ZVRpbWVGb3JtYXQ6OnZpc2l0Q2hpbGRy
CiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKIH0KIAorREVG
SU5FX1ZJU0lUX0NISUxEUkVOKEludGxSZWxhdGl2ZVRpbWVGb3JtYXQpOworCiBWZWN0b3I8U3Ry
aW5nPiBJbnRsUmVsYXRpdmVUaW1lRm9ybWF0Ojpsb2NhbGVEYXRhKGNvbnN0IFN0cmluZyYgbG9j
YWxlLCBSZWxldmFudEV4dGVuc2lvbktleSBrZXkpCiB7CiAgICAgQVNTRVJUX1VOVVNFRChrZXks
IGtleSA9PSBSZWxldmFudEV4dGVuc2lvbktleTo6TnUpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSW50bFJlbGF0aXZlVGltZUZvcm1hdC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxSZWxhdGl2ZVRpbWVGb3JtYXQuaAkocmV2
aXNpb24gMjczMTE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFJlbGF0
aXZlVGltZUZvcm1hdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENv
cHlyaWdodCAoQykgMjAyMCBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgotICog
Q29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAyMC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjQsNyArNjQsNyBAQCBwdWJsaWM6CiBw
cml2YXRlOgogICAgIEludGxSZWxhdGl2ZVRpbWVGb3JtYXQoVk0mLCBTdHJ1Y3R1cmUqKTsKICAg
ICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJl
bihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAK
ICAgICBzdGF0aWMgVmVjdG9yPFN0cmluZz4gbG9jYWxlRGF0YShjb25zdCBTdHJpbmcmLCBSZWxl
dmFudEV4dGVuc2lvbktleSk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0ludGxTZWdtZW50SXRlcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0ludGxTZWdtZW50SXRlcmF0b3IuY3BwCShyZXZpc2lvbiAyNzMxMTkpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsU2VnbWVudEl0ZXJhdG9yLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMjAg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtNjQsMTMgKzY1LDE2IEBAIHZvaWQgSW50bFNlZ21lbnRJdGVyYXRvcjo6ZmluaXNo
Q3JlYXRpb24KICAgICBtX3N0cmluZy5zZXQodm0sIHRoaXMsIHN0cmluZyk7CiB9CiAKLXZvaWQg
SW50bFNlZ21lbnRJdGVyYXRvcjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNp
dG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSW50bFNlZ21l
bnRJdGVyYXRvcjo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNp
dG9yKQogewogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SW50bFNlZ21lbnRJdGVyYXRv
cio+KGNlbGwpOwogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7
CiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9zdHJpbmcpOwogfQogCitERUZJTkVf
VklTSVRfQ0hJTERSRU4oSW50bFNlZ21lbnRJdGVyYXRvcik7CisKIEpTT2JqZWN0KiBJbnRsU2Vn
bWVudEl0ZXJhdG9yOjpuZXh0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCiB7CiAgICAg
Vk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSW50bFNlZ21lbnRJdGVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0ludGxTZWdtZW50SXRlcmF0b3IuaAkocmV2aXNpb24gMjczMTE5
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFNlZ21lbnRJdGVyYXRvci5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAy
MCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC01Myw3ICs1NCw3IEBAIHB1YmxpYzoKIAogICAgIEpTT2JqZWN0KiBuZXh0KEpT
R2xvYmFsT2JqZWN0Kik7CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCos
IFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogcHJpdmF0ZToK
ICAgICBJbnRsU2VnbWVudEl0ZXJhdG9yKFZNJiwgU3RydWN0dXJlKiwgc3RkOjp1bmlxdWVfcHRy
PFVCcmVha0l0ZXJhdG9yLCBVQnJlYWtJdGVyYXRvckRlbGV0ZXI+JiYsIEJveDxWZWN0b3I8VUNo
YXI+PiYmLCBJbnRsU2VnbWVudGVyOjpHcmFudWxhcml0eSk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9JbnRsU2VnbWVudHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxTZWdtZW50cy5jcHAJKHJldmlzaW9uIDI3MzExOSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxTZWdtZW50cy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTEwOSwxMSArMTEwLDE0IEBAIEpTT2JqZWN0KiBJbnRsU2VnbWVudHM6OmNyZWF0ZVNlZ21l
bnRJdGUKICAgICByZXR1cm4gSW50bFNlZ21lbnRJdGVyYXRvcjo6Y3JlYXRlKHZtLCBnbG9iYWxP
YmplY3QtPnNlZ21lbnRJdGVyYXRvclN0cnVjdHVyZSgpLCBXVEZNb3ZlKHNlZ21lbnRlciksIG1f
YnVmZmVyLCBtX3N0cmluZy5nZXQoKSwgbV9ncmFudWxhcml0eSk7CiB9CiAKLXZvaWQgSW50bFNl
Z21lbnRzOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3Ip
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBJbnRsU2VnbWVudHM6OnZpc2l0Q2hp
bGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBhdXRvKiB0
aGlzT2JqZWN0ID0ganNDYXN0PEludGxTZWdtZW50cyo+KGNlbGwpOwogICAgIEJhc2U6OnZpc2l0
Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09i
amVjdC0+bV9zdHJpbmcpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSW50bFNlZ21lbnRz
KTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9JbnRsU2VnbWVudHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9JbnRsU2VnbWVudHMuaAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSW50bFNlZ21lbnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU0LDcgKzU1LDcgQEAg
cHVibGljOgogICAgIEpTVmFsdWUgY29udGFpbmluZyhKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUg
aW5kZXhWYWx1ZSk7CiAgICAgSlNPYmplY3QqIGNyZWF0ZVNlZ21lbnRJdGVyYXRvcihKU0dsb2Jh
bE9iamVjdCopOwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90
VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKIHByaXZhdGU6CiAgICAg
SW50bFNlZ21lbnRzKFZNJiwgU3RydWN0dXJlKiwgc3RkOjp1bmlxdWVfcHRyPFVCcmVha0l0ZXJh
dG9yLCBVQnJlYWtJdGVyYXRvckRlbGV0ZXI+JiYsIEJveDxWZWN0b3I8VUNoYXI+PiYmLCBJbnRs
U2VnbWVudGVyOjpHcmFudWxhcml0eSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0FycmF5QnVmZmVyVmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuY3BwCShyZXZpc2lvbiAyNzMxMTkpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0xNTUsNyArMTU1LDggQEAgdm9pZCBKU0FycmF5QnVmZmVyVmlldzo6
ZmluaXNoQ3JlYXRpb24oVgogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAK
LXZvaWQgSlNBcnJheUJ1ZmZlclZpZXc6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90
VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTQXJy
YXlCdWZmZXJWaWV3Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZp
c2l0b3IpCiB7CiAgICAgSlNBcnJheUJ1ZmZlclZpZXcqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNB
cnJheUJ1ZmZlclZpZXcqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRo
aXNPYmplY3QsIGluZm8oKSk7CkBAIC0xNjksNiArMTcwLDggQEAgdm9pZCBKU0FycmF5QnVmZmVy
Vmlldzo6dmlzaXRDaGlsZHJlbihKUwogICAgIH0KIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVO
KEpTQXJyYXlCdWZmZXJWaWV3KTsKKwogYm9vbCBKU0FycmF5QnVmZmVyVmlldzo6cHV0KAogICAg
IEpTQ2VsbCogY2VsbCwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1l
IHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwKICAgICBQdXRQcm9wZXJ0eVNsb3QmIHNsb3Qp
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZm
ZXJWaWV3LmgJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTQXJyYXlCdWZmZXJWaWV3LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xNzIsNyArMTcyLDcg
QEAgcHJvdGVjdGVkOgogICAgIAogICAgIHN0YXRpYyBib29sIHB1dChKU0NlbGwqLCBKU0dsb2Jh
bE9iamVjdCosIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgUHV0UHJvcGVydHlTbG90Jik7CiAKLSAg
ICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAg
REVDTEFSRV9WSVNJVF9DSElMRFJFTjsKICAgICAKIHB1YmxpYzoKICAgICBUeXBlZEFycmF5TW9k
ZSBtb2RlKCkgY29uc3QgeyByZXR1cm4gbV9tb2RlOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0FycmF5SXRlcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlJdGVyYXRvci5jcHAJKHJldmlzaW9uIDI3MzEx
OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlJdGVyYXRvci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDIw
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMC0y
MDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtNjgsMTEgKzY4LDE0IEBAIHZvaWQgSlNBcnJheUl0ZXJhdG9yOjpmaW5p
c2hDcmVhdGlvbihWTSYKICAgICAgICAgQmFzZTo6aW50ZXJuYWxGaWVsZChpbmRleCkuc2V0KHZt
LCB0aGlzLCB2YWx1ZXNbaW5kZXhdKTsKIH0KIAotdm9pZCBKU0FycmF5SXRlcmF0b3I6OnZpc2l0
Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5
cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTQXJyYXlJdGVyYXRvcjo6dmlzaXRDaGlsZHJlbkltcGwo
SlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGF1dG8qIHRoaXNPYmplY3Qg
PSBqc0Nhc3Q8SlNBcnJheUl0ZXJhdG9yKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9J
TkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhp
c09iamVjdCwgdmlzaXRvcik7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU0FycmF5SXRl
cmF0b3IpOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQXJyYXlJdGVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTQXJyYXlJdGVyYXRvci5oCShyZXZpc2lvbiAyNzMxMTkpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5SXRlcmF0b3IuaAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIwLTIwMjEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC03OCw3ICs3OCw3IEBAIHB1YmxpYzoKIAogICAgIERFQ0xBUkVfSU5GTzsKIAotICAgIHN0
YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNM
QVJFX1ZJU0lUX0NISUxEUkVOOwogCiBwcml2YXRlOgogICAgIEpTQXJyYXlJdGVyYXRvcihWTSYs
IFN0cnVjdHVyZSopOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBc3lu
Y0dlbmVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNBc3luY0dlbmVyYXRvci5jcHAJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTQXN5bmNHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU5
LDExICs1OSwxNCBAQCB2b2lkIEpTQXN5bmNHZW5lcmF0b3I6OmZpbmlzaENyZWF0aW9uKFZNCiAg
ICAgICAgIGludGVybmFsRmllbGQoaW5kZXgpLnNldCh2bSwgdGhpcywgdmFsdWVzW2luZGV4XSk7
CiB9CiAKLXZvaWQgSlNBc3luY0dlbmVyYXRvcjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGws
IFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQg
SlNBc3luY0dlbmVyYXRvcjo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9y
JiB2aXNpdG9yKQogewogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNBc3luY0dlbmVy
YXRvcio+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwg
aW5mbygpKTsKICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwog
fQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNBc3luY0dlbmVyYXRvcik7CisKIH0gLy8gbmFt
ZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBc3luY0dl
bmVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
QXN5bmNHZW5lcmF0b3IuaAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNBc3luY0dlbmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTk1LDcgKzk1LDcg
QEAgcHVibGljOgogCiAgICAgREVDTEFSRV9FWFBPUlRfSU5GTzsKIAotICAgIHN0YXRpYyB2b2lk
IHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lU
X0NISUxEUkVOOwogCiBwcml2YXRlOgogICAgIEpTQXN5bmNHZW5lcmF0b3IoVk0mLCBTdHJ1Y3R1
cmUqKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQmlnSW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JpZ0ludC5jcHAJ
KHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQmln
SW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQg
KEMpIDIwMTcgQ2FpbyBMaW1hIDx0aWNhaW9saW1hQGdtYWlsLmNvbT4KLSAqIENvcHlyaWdodCAo
QykgMjAxNy0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjcsNyArNjcsOCBAQCBKU0JpZ0ludDo6SlNCaWdJ
bnQoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0CiAgICAgLCBtX2RhdGEodm0sIHRoaXMsIGRhdGEsIGxl
bmd0aCkKIHsgfQogCi12b2lkIEpTQmlnSW50Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwg
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBK
U0JpZ0ludDo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9y
KQogewogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNCaWdJbnQqPihjZWxsKTsKICAg
ICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC03Niw2
ICs3Nyw4IEBAIHZvaWQgSlNCaWdJbnQ6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWwKICAgICAg
ICAgdmlzaXRvci5tYXJrQXV4aWxpYXJ5KGRhdGEpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERS
RU4oSlNCaWdJbnQpOworCiB2b2lkIEpTQmlnSW50Ojppbml0aWFsaXplKEluaXRpYWxpemF0aW9u
VHlwZSBpbml0VHlwZSkKIHsKICAgICBpZiAoaW5pdFR5cGUgPT0gSW5pdGlhbGl6YXRpb25UeXBl
OjpXaXRoWmVybykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQmlnSW50
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCaWdJbnQu
aAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNC
aWdJbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQg
KEMpIDIwMTcgQ2FpbyBMaW1hIDx0aWNhaW9saW1hQGdtYWlsLmNvbT4KLSAqIENvcHlyaWdodCAo
QykgMjAxOS0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxOS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTAsNyArNTAsNyBAQCBwdWJsaWM6CiAgICAgc3Rh
dGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZs
YWdzIHwgU3RydWN0dXJlSXNJbW1vcnRhbCB8IE92ZXJyaWRlc1RvVGhpczsKICAgICBmcmllbmQg
Y2xhc3MgQ2FjaGVkQmlnSW50OwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0Nl
bGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3M+CiAgICAgc3RhdGljIElz
b1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0JvdW5kRnVuY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTQm91bmRGdW5jdGlvbi5jcHAJKHJldmlzaW9uIDI3MzExOSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQm91bmRGdW5jdGlvbi5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLCAy
MDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDExLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0yNDksNyArMjQ5LDggQEAgdm9pZCBKU0JvdW5kRnVuY3Rp
b246OmZpbmlzaENyZWF0aW9uKFZNJgogICAgIEFTU0VSVChpbmhlcml0cyh2bSwgaW5mbygpKSk7
CiB9CiAKLXZvaWQgSlNCb3VuZEZ1bmN0aW9uOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwg
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBK
U0JvdW5kRnVuY3Rpb246OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYg
dmlzaXRvcikKIHsKICAgICBKU0JvdW5kRnVuY3Rpb24qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNC
b3VuZEZ1bmN0aW9uKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlz
T2JqZWN0LCBpbmZvKCkpOwpAQCAtMjYxLDQgKzI2Miw2IEBAIHZvaWQgSlNCb3VuZEZ1bmN0aW9u
Ojp2aXNpdENoaWxkcmVuKEpTQ2UKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX25h
bWVNYXlCZU51bGwpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNCb3VuZEZ1bmN0aW9u
KTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0JvdW5kRnVuY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0JvdW5kRnVuY3Rpb24uaAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCb3VuZEZ1bmN0aW9uLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTggQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMjEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC04NCw3ICs4NCw3IEBAIHByaXZhdGU6CiAgICAgSlNCb3VuZEZ1bmN0aW9uKFZNJiwgTmF0
aXZlRXhlY3V0YWJsZSosIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKiwgSlNPYmplY3QqIHRh
cmdldEZ1bmN0aW9uLCBKU1ZhbHVlIGJvdW5kVGhpcywgSlNJbW11dGFibGVCdXR0ZXJmbHkqIGJv
dW5kQXJncywgSlNTdHJpbmcqIG5hbWVNYXlCZU51bGwsIGRvdWJsZSBsZW5ndGgpOwogCiAgICAg
dm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOwotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4o
SlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAg
ICAgV3JpdGVCYXJyaWVyPEpTT2JqZWN0PiBtX3RhcmdldEZ1bmN0aW9uOwogICAgIFdyaXRlQmFy
cmllcjxVbmtub3duPiBtX2JvdW5kVGhpczsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTQ2FsbGVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0NhbGxlZS5jcHAJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTQ2FsbGVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01MCw3ICs1
MCw4IEBAIHZvaWQgSlNDYWxsZWU6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKICAgICBBU1NFUlQo
aW5oZXJpdHModm0sIGluZm8oKSkpOwogfQogCi12b2lkIEpTQ2FsbGVlOjp2aXNpdENoaWxkcmVu
KEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPgordm9pZCBKU0NhbGxlZTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBW
aXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTQ2FsbGVlKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpT
Q2FsbGVlKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0
LCBpbmZvKCkpOwpAQCAtNTksNCArNjAsNiBAQCB2b2lkIEpTQ2FsbGVlOjp2aXNpdENoaWxkcmVu
KEpTQ2VsbCogY2VsCiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9zY29wZSk7CiB9
CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU0NhbGxlZSk7CisKIH0gLy8gbmFtZXNwYWNlIEpT
QwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDYWxsZWUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NhbGxlZS5oCShyZXZpc2lv
biAyNzMxMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NhbGxlZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTEwMCw3ICsxMDAsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBmaW5pc2hD
cmVhdGlvbihWTSYpOwogICAgIHVzaW5nIEJhc2U6OmZpbmlzaENyZWF0aW9uOwogCi0gICAgc3Rh
dGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xB
UkVfVklTSVRfQ0hJTERSRU47CiAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIExMSW50T2Zm
c2V0c0V4dHJhY3RvcjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2Vs
bC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5o
CShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Nl
bGwuaAkod29ya2luZyBjb3B5KQpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChD
KSAxOTk5LTIwMDEgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKICAqICBDb3B5cmlnaHQg
KEMpIDIwMDEgUGV0ZXIgS2VsbHkgKHBta0Bwb3N0LmNvbSkKLSAqICBDb3B5cmlnaHQgKEMpIDIw
MDMtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChD
KSAyMDAzLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJKU0xvY2suaCIKICNpbmNsdWRl
ICJKU1R5cGVJbmZvLmgiCiAjaW5jbHVkZSAiU2xvdFZpc2l0b3IuaCIKKyNpbmNsdWRlICJTbG90
VmlzaXRvck1hY3Jvcy5oIgogI2luY2x1ZGUgIlN1YnNwYWNlQWNjZXNzLmgiCiAjaW5jbHVkZSAi
VHlwZWRBcnJheVR5cGUuaCIKICNpbmNsdWRlICJXcml0ZUJhcnJpZXIuaCIKQEAgLTE2Nyw4ICsx
NjgsOCBAQCBwdWJsaWM6CiAgICAgc2l6ZV90IGVzdGltYXRlZFNpemVJbkJ5dGVzKFZNJikgY29u
c3Q7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHNpemVfdCBlc3RpbWF0ZWRTaXplKEpT
Q2VsbCosIFZNJik7CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNs
b3RWaXNpdG9yJik7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRPdXRwdXRDb25zdHJhaW50cyhKU0Nl
bGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU5fV0lUSF9NT0RJ
RklFUihpbmxpbmUpOworICAgIERFQ0xBUkVfVklTSVRfT1VUUFVUX0NPTlNUUkFJTlRTX1dJVEhf
TU9ESUZJRVIoaW5saW5lKTsKIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGFu
YWx5emVIZWFwKEpTQ2VsbCosIEhlYXBBbmFseXplciYpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0NlbGxJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsSW5saW5lcy5oCShyZXZpc2lvbiAyNzMxMTkpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGxJbmxpbmVzLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjAgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0xNDEsMTUgKzE0MSwyMSBAQCBBTFdBWVNfSU5MSU5FIFN0cnVjdHVyZSogSlND
ZWxsOjpzdHJ1Y3R1CiAgICAgcmV0dXJuIHZtLmdldFN0cnVjdHVyZShtX3N0cnVjdHVyZUlEKTsK
IH0KIAotaW5saW5lIHZvaWQgSlNDZWxsOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xv
dFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0Nl
bGw6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsK
ICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKGNlbGwtPnN0cnVjdHVyZSh2aXNpdG9yLnZt
KCkpKTsKIH0KIAotaW5saW5lIHZvaWQgSlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzKEpT
Q2VsbCosIFNsb3RWaXNpdG9yJikKK0RFRklORV9WSVNJVF9DSElMRFJFTl9XSVRIX01PRElGSUVS
KGlubGluZSwgSlNDZWxsKTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK0FMV0FZU19J
TkxJTkUgdm9pZCBKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHNJbXBsKEpTQ2VsbCosIFZp
c2l0b3ImKQogewogfQogCitERUZJTkVfVklTSVRfT1VUUFVUX0NPTlNUUkFJTlRTX1dJVEhfTU9E
SUZJRVIoaW5saW5lLCBKU0NlbGwpOworCiBBTFdBWVNfSU5MSU5FIFZNJiBDYWxsRnJhbWU6OmRl
cHJlY2F0ZWRWTSgpIGNvbnN0CiB7CiAgICAgSlNDZWxsKiBjYWxsZWUgPSB0aGlzLT5jYWxsZWUo
KS5hc0NlbGwoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRmluYWxp
emF0aW9uUmVnaXN0cnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTRmluYWxpemF0aW9uUmVnaXN0cnkuY3BwCShyZXZpc2lvbiAyNzMxMTkpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ZpbmFsaXphdGlvblJlZ2lzdHJ5LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjAg
QXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMC0y
MDIxIEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNs
dWRlICJKU0ZpbmFsaXphdGlvblJlZ2lzdHJ5LmgiCiAKKyNpbmNsdWRlICJBYnN0cmFjdFNsb3RW
aXNpdG9yLmgiCiAjaW5jbHVkZSAiRGVmZXJyZWRXb3JrVGltZXIuaCIKICNpbmNsdWRlICJKU0NJ
bmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbElubGluZXMuaCIK
QEAgLTYwLDcgKzYxLDggQEAgdm9pZCBKU0ZpbmFsaXphdGlvblJlZ2lzdHJ5OjpmaW5pc2hDcmVh
dAogICAgIGdsb2JhbE9iamVjdC0+Z2xvYmFsT2JqZWN0TWV0aG9kVGFibGUoKS0+Y3VycmVudFNj
cmlwdEV4ZWN1dGlvbk93bmVyKGdsb2JhbE9iamVjdCk7CiB9CiAKLXZvaWQgSlNGaW5hbGl6YXRp
b25SZWdpc3RyeTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNp
dG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNGaW5hbGl6YXRpb25SZWdp
c3RyeTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQog
ewogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4oY2VsbCwgdmlzaXRvcik7CiAKQEAgLTgwLDEzICs4
MiwxNSBAQCB2b2lkIEpTRmluYWxpemF0aW9uUmVnaXN0cnk6OnZpc2l0Q2hpbGRyCiAgICAgZm9y
IChhdXRvJiBob2xkaW5ncyA6IHRoaXNPYmplY3QtPm1fbm9VbnJlZ2lzdHJhdGlvbkRlYWQpCiAg
ICAgICAgIHZpc2l0b3IuYXBwZW5kKGhvbGRpbmdzKTsKIAotICAgIHNpemVfdCB0b3RhbEJ1ZmZl
clNpemVzSW5CeXRlcyA9IHRoaXNPYmplY3QtPm1fZGVhZFJlZ2lzdHJhdGlvbnMuY2FwYWNpdHko
KSAqIHNpemVvZihkZWNsdHlwZSh0aGlzT2JqZWN0LT5tX2RlYWRSZWdpc3RyYXRpb25zKTo6S2V5
VmFsdWVQYWlyVHlwZSk7Ci0gICAgdG90YWxCdWZmZXJTaXplc0luQnl0ZXMgKz0gdGhpc09iamVj
dC0+bV9saXZlUmVnaXN0cmF0aW9ucy5jYXBhY2l0eSgpICogc2l6ZW9mKGRlY2x0eXBlKHRoaXNP
YmplY3QtPm1fZGVhZFJlZ2lzdHJhdGlvbnMpOjpLZXlWYWx1ZVBhaXJUeXBlKTsKKyAgICBzaXpl
X3QgdG90YWxCdWZmZXJTaXplc0luQnl0ZXMgPSB0aGlzT2JqZWN0LT5tX2RlYWRSZWdpc3RyYXRp
b25zLmNhcGFjaXR5KCkgKiBzaXplb2YodHlwZW5hbWUgZGVjbHR5cGUodGhpc09iamVjdC0+bV9k
ZWFkUmVnaXN0cmF0aW9ucyk6OktleVZhbHVlUGFpclR5cGUpOworICAgIHRvdGFsQnVmZmVyU2l6
ZXNJbkJ5dGVzICs9IHRoaXNPYmplY3QtPm1fbGl2ZVJlZ2lzdHJhdGlvbnMuY2FwYWNpdHkoKSAq
IHNpemVvZih0eXBlbmFtZSBkZWNsdHlwZSh0aGlzT2JqZWN0LT5tX2RlYWRSZWdpc3RyYXRpb25z
KTo6S2V5VmFsdWVQYWlyVHlwZSk7CiAgICAgdG90YWxCdWZmZXJTaXplc0luQnl0ZXMgKz0gdGhp
c09iamVjdC0+bV9ub1VucmVnaXN0cmF0aW9uTGl2ZS5jYXBhY2l0eSgpICogc2l6ZW9mKGRlY2x0
eXBlKHRoaXNPYmplY3QtPm1fbm9VbnJlZ2lzdHJhdGlvbkxpdmUudGFrZUxhc3QoKSkpOwogICAg
IHRvdGFsQnVmZmVyU2l6ZXNJbkJ5dGVzICs9IHRoaXNPYmplY3QtPm1fbm9VbnJlZ2lzdHJhdGlv
bkRlYWQuY2FwYWNpdHkoKSAqIHNpemVvZihkZWNsdHlwZSh0aGlzT2JqZWN0LT5tX25vVW5yZWdp
c3RyYXRpb25MaXZlLnRha2VMYXN0KCkpKTsKICAgICB2aXNpdG9yLnZtKCkuaGVhcC5yZXBvcnRF
eHRyYU1lbW9yeVZpc2l0ZWQodG90YWxCdWZmZXJTaXplc0luQnl0ZXMpOwogfQogCitERUZJTkVf
VklTSVRfQ0hJTERSRU4oSlNGaW5hbGl6YXRpb25SZWdpc3RyeSk7CisKIHZvaWQgSlNGaW5hbGl6
YXRpb25SZWdpc3RyeTo6ZGVzdHJveShKU0NlbGwqIHRhYmxlKQogewogICAgIHN0YXRpY19jYXN0
PEpTRmluYWxpemF0aW9uUmVnaXN0cnkqPih0YWJsZSktPn5KU0ZpbmFsaXphdGlvblJlZ2lzdHJ5
KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ZpbmFsaXphdGlvblJl
Z2lzdHJ5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNG
aW5hbGl6YXRpb25SZWdpc3RyeS5oCShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0ZpbmFsaXphdGlvblJlZ2lzdHJ5LmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlLCBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAtMjAyMSBBcHBsZSwgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC03MCw3ICs3MCw3IEBAIHB1YmxpYzoKICAgICBERUNMQVJFX0VYUE9SVF9JTkZPOwogCiAgICAg
dm9pZCBmaW5hbGl6ZVVuY29uZGl0aW9uYWxseShWTSYpOwotICAgIHN0YXRpYyB2b2lkIHZpc2l0
Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxE
UkVOOwogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CiAgICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOwogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmNwcAkocmV2aXNpb24gMjczMTE5KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNyArMSw3IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAyIEhhcnJp
IFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCiAgKiAgQ29weXJpZ2h0IChDKSAyMDAxIFBldGVyIEtl
bGx5IChwbWtAcG9zdC5jb20pCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMjAgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwMy0yMDIxIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqICBDb3B5cmlnaHQgKEMpIDIwMDcgQ2FtZXJv
biBad2FyaWNoIChjd3p3YXJpY2hAdXdhdGVybG9vLmNhKQogICogIENvcHlyaWdodCAoQykgMjAw
NyBNYWtzIE9ybG92aWNoCiAgKiAgQ29weXJpZ2h0IChDKSAyMDE1IENhbm9uIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KQEAgLTI1Miw3ICsyNTIsOCBAQCBjb25zdCBTb3VyY2VDb2RlKiBKU0Z1
bmN0aW9uOjpzb3VyY2VDb2RlCiAgICAgcmV0dXJuICZqc0V4ZWN1dGFibGUoKS0+c291cmNlKCk7
CiB9CiAgICAgCi12b2lkIEpTRnVuY3Rpb246OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBT
bG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpT
RnVuY3Rpb246OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRv
cikKIHsKICAgICBKU0Z1bmN0aW9uKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTRnVuY3Rpb24qPihj
ZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7
CkBAIC0yNjEsNiArMjYyLDggQEAgdm9pZCBKU0Z1bmN0aW9uOjp2aXNpdENoaWxkcmVuKEpTQ2Vs
bCogYwogICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQoYml0d2lzZV9jYXN0PEpTQ2VsbCo+
KGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KHRoaXNPYmplY3QtPm1fZXhlY3V0YWJsZU9yUmFyZURh
dGEpICYgfnJhcmVEYXRhVGFnKSk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU0Z1bmN0
aW9uKTsKKwogQ2FsbERhdGEgSlNGdW5jdGlvbjo6Z2V0Q2FsbERhdGEoSlNDZWxsKiBjZWxsKQog
ewogICAgIC8vIEtlZXAgdGhpcyBmdW5jdGlvbiBPSyBmb3IgaW52b2NhdGlvbiBmcm9tIGNvbmN1
cnJlbnQgY29tcGlsZXJzLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNG
dW5jdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
RnVuY3Rpb24uaAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNGdW5jdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAq
ICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQot
ICogIENvcHlyaWdodCAoQykgMjAwMy0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA3IENhbWVyb24gWndhcmljaCAoY3d6d2FyaWNo
QHV3YXRlcmxvby5jYSkKICAqICBDb3B5cmlnaHQgKEMpIDIwMDcgTWFrcyBPcmxvdmljaAogICoK
QEAgLTE4MCw3ICsxODAsNyBAQCBwcm90ZWN0ZWQ6CiAKICAgICBzdGF0aWMgYm9vbCBkZWxldGVQ
cm9wZXJ0eShKU0NlbGwqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSwgRGVsZXRlUHJv
cGVydHlTbG90Jik7CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNs
b3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogcHJpdmF0ZToKICAg
ICBzdGF0aWMgSlNGdW5jdGlvbiogY3JlYXRlSW1wbChWTSYgdm0sIEZ1bmN0aW9uRXhlY3V0YWJs
ZSogZXhlY3V0YWJsZSwgSlNTY29wZSogc2NvcGUsIFN0cnVjdHVyZSogc3RydWN0dXJlKQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmF0b3IuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJhdG9yLmNwcAkocmV2
aXNpb24gMjczMTE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmF0
b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTktMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTU5LDExICs1OSwxNCBAQCB2b2lkIEpTR2VuZXJhdG9yOjpm
aW5pc2hDcmVhdGlvbihWTSYgdm0pCiAgICAgICAgIGludGVybmFsRmllbGQoaW5kZXgpLnNldCh2
bSwgdGhpcywgdmFsdWVzW2luZGV4XSk7CiB9CiAKLXZvaWQgSlNHZW5lcmF0b3I6OnZpc2l0Q2hp
bGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVu
YW1lIFZpc2l0b3I+Cit2b2lkIEpTR2VuZXJhdG9yOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwq
IGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2Fz
dDxKU0dlbmVyYXRvcio+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhp
c09iamVjdCwgaW5mbygpKTsKICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZp
c2l0b3IpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNHZW5lcmF0b3IpOworCiB9IC8v
IG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2Vu
ZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNH
ZW5lcmF0b3IuaAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNHZW5lcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE5LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC05NCw3ICs5NCw3IEBAIHB1YmxpYzoK
IAogICAgIERFQ0xBUkVfRVhQT1JUX0lORk87CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxk
cmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsK
IAogcHJpdmF0ZToKICAgICBKU0dlbmVyYXRvcihWTSYsIFN0cnVjdHVyZSopOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXcuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFy
cmF5Vmlldy5oCShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzEzLDcg
KzMxMyw3IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhK
U09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lQXJyYXkmLCBEb250RW51bVBy
b3BlcnRpZXNNb2RlKTsKIAogICAgIHN0YXRpYyBzaXplX3QgZXN0aW1hdGVkU2l6ZShKU0NlbGwq
LCBWTSYpOwotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0
b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgLy8gUmV0dXJucyB0cnVl
IGlmIHN1Y2Nlc3NmdWwsIGFuZCBmYWxzZSBvbiBlcnJvcjsgaXQgd2lsbCB0aHJvdyBvbiBlcnJv
ci4KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPdGhlckFkYXB0b3I+CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFy
cmF5Vmlld0lubGluZXMuaAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTkgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC01MTcsNyArNTE3LDggQEAgc2l6ZV90IEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFk
YXB0b3I+OgogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgotdm9pZCBKU0dlbmVyaWNU
eXBlZEFycmF5VmlldzxBZGFwdG9yPjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNHZW5l
cmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2Vs
bCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyogdGhp
c09iamVjdCA9IGpzQ2FzdDxKU0dlbmVyaWNUeXBlZEFycmF5Vmlldyo+KGNlbGwpOwogICAgIEFT
U0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTU1NSw0ICs1
NTYsNiBAQCB2b2lkIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+Ojp2CiAgICAgfQog
fQogCitERUZJTkVfVklTSVRfQ0hJTERSRU5fV0lUSF9NT0RJRklFUih0ZW1wbGF0ZTx0eXBlbmFt
ZSBBZGFwdG9yPiwgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj4pOworCiB9IC8vIG5h
bWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFs
T2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0dsb2JhbE9iamVjdC5jcHAJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDggQ2FtZXJvbiBad2FyaWNoIChj
d3p3YXJpY2hAdXdhdGVybG9vLmNhKQogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMTkwNSw3ICsxOTA1
LDggQEAgdm9pZCBKU0dsb2JhbE9iamVjdDo6cmVzZXRQcm90b3R5cGUoVk0mIAogICAgIHNldEds
b2JhbFRoaXModm0sIEpTUHJveHk6OmNyZWF0ZSh2bSwgSlNQcm94eTo6Y3JlYXRlU3RydWN0dXJl
KHZtLCB0aGlzLCBwcm90b3R5cGUsIFB1cmVGb3J3YXJkaW5nUHJveHlUeXBlKSwgdGhpcykpOwog
fQogCi12b2lkIEpTR2xvYmFsT2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xv
dFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0ds
b2JhbE9iamVjdDo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNp
dG9yKQogeyAKICAgICBKU0dsb2JhbE9iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0dsb2Jh
bE9iamVjdCo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVj
dCwgaW5mbygpKTsKQEAgLTIwNzYsNiArMjA3Nyw4IEBAIHZvaWQgSlNHbG9iYWxPYmplY3Q6OnZp
c2l0Q2hpbGRyZW4oSlNDZWwKICAgICB0aGlzT2JqZWN0LT5tX3JlZ0V4cEdsb2JhbERhdGEudmlz
aXRBZ2dyZWdhdGUodmlzaXRvcik7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTl9XSVRIX01P
RElGSUVSKEpTX0VYUE9SVF9QUklWQVRFLCBKU0dsb2JhbE9iamVjdCk7CisKIENhbGxGcmFtZSog
SlNHbG9iYWxPYmplY3Q6OmRlcHJlY2F0ZWRDYWxsRnJhbWVGb3JEZWJ1Z2dlcigpCiB7CiAgICAg
cmV0dXJuIENhbGxGcmFtZTo6Y3JlYXRlKG1fZGVwcmVjYXRlZENhbGxGcmFtZUZvckRlYnVnZ2Vy
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmpl
Y3QuaAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNHbG9iYWxPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiAg
Q29weXJpZ2h0IChDKSAyMDA3IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+Ci0gKiAgQ29w
eXJpZ2h0IChDKSAyMDA3LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
IENvcHlyaWdodCAoQykgMjAwNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC02MTksNyArNjE5LDcgQEAgcHVibGljOgogICAgIEpT
X0VYUE9SVF9QUklWQVRFIH5KU0dsb2JhbE9iamVjdCgpOwogICAgIEpTX0VYUE9SVF9QUklWQVRF
IHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CiAKLSAgICBKU19FWFBPUlRfUFJJVkFURSBz
dGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVD
TEFSRV9WSVNJVF9DSElMRFJFTl9XSVRIX01PRElGSUVSKEpTX0VYUE9SVF9QUklWQVRFKTsKIAog
ICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU09i
amVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKICAg
ICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgYm9vbCBwdXQoSlNDZWxsKiwgSlNHbG9iYWxPYmpl
Y3QqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbW11dGFibGVCdXR0ZXJmbHkuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTSW1tdXRhYmxlQnV0dGVy
Zmx5LmNwcAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNJbW11dGFibGVCdXR0ZXJmbHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMyLDcgKzMyLDggQEAg
bmFtZXNwYWNlIEpTQyB7CiAKIGNvbnN0IENsYXNzSW5mbyBKU0ltbXV0YWJsZUJ1dHRlcmZseTo6
c19pbmZvID0geyAiSW1tdXRhYmxlIEJ1dHRlcmZseSIsIG51bGxwdHIsIG51bGxwdHIsIG51bGxw
dHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNJbW11dGFibGVCdXR0ZXJmbHkpIH07CiAKLXZvaWQg
SlNJbW11dGFibGVCdXR0ZXJmbHk6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90Vmlz
aXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTSW1tdXRh
YmxlQnV0dGVyZmx5Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZp
c2l0b3IpCiB7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjZWxsLCBpbmZvKCkpOwog
ICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4oY2VsbCwgdmlzaXRvcik7CkBAIC00NSw2ICs0Niw4IEBA
IHZvaWQgSlNJbW11dGFibGVCdXR0ZXJmbHk6OnZpc2l0Q2hpbGRyZW4KICAgICB2aXNpdG9yLmFw
cGVuZFZhbHVlc0hpZGRlbihidXR0ZXJmbHktPmNvbnRpZ3VvdXMoKS5kYXRhKCksIGJ1dHRlcmZs
eS0+cHVibGljTGVuZ3RoKCkpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNJbW11dGFi
bGVCdXR0ZXJmbHkpOworCiB2b2lkIEpTSW1tdXRhYmxlQnV0dGVyZmx5Ojpjb3B5VG9Bcmd1bWVu
dHMoSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlKiBmaXJzdEVsZW1lbnREZXN0LCB1bnNpZ25lZCBv
ZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKIHsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bGVuZ3RoOyArK2kpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTSW1t
dXRhYmxlQnV0dGVyZmx5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNJbW11dGFibGVCdXR0ZXJmbHkuaAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbW11dGFibGVCdXR0ZXJmbHkuaAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAxOSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTE0NSw3ICsxNDUsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBqc0RvdWJs
ZU51bWJlcih2YWx1ZSk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihK
U0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAg
ICB2b2lkIGNvcHlUb0FyZ3VtZW50cyhKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUqIGZpcnN0RWxl
bWVudERlc3QsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTSW50ZXJuYWxGaWVs
ZE9iamVjdEltcGwuaAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY2LDcg
KzY2LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZJbnRlcm5hbEZp
ZWxkKHVuc2lnbmVkIGluZGV4KSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNJbnRlcm5hbEZp
ZWxkT2JqZWN0SW1wbCwgbV9pbnRlcm5hbEZpZWxkcykgKyBpbmRleCAqIHNpemVvZihXcml0ZUJh
cnJpZXI8VW5rbm93bj4pOyB9CiAKIHByb3RlY3RlZDoKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENo
aWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJF
TjsKIAogICAgIEpTSW50ZXJuYWxGaWVsZE9iamVjdEltcGwoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSkKICAgICAgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0ludGVybmFsRmllbGRPYmplY3RJbXBsSW5saW5lcy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTSW50ZXJuYWxGaWVs
ZE9iamVjdEltcGxJbmxpbmVzLmgJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTSW50ZXJuYWxGaWVsZE9iamVjdEltcGxJbmxpbmVzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOS0yMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMzAsNyArMzAsOCBAQAogbmFtZXNwYWNlIEpTQyB7CiAKIHRlbXBsYXRlPHVuc2ln
bmVkIHBhc3NlZE51bWJlck9mSW50ZXJuYWxGaWVsZHM+Ci12b2lkIEpTSW50ZXJuYWxGaWVsZE9i
amVjdEltcGw8cGFzc2VkTnVtYmVyT2ZJbnRlcm5hbEZpZWxkcz46OnZpc2l0Q2hpbGRyZW4oSlND
ZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0
b3I+Cit2b2lkIEpTSW50ZXJuYWxGaWVsZE9iamVjdEltcGw8cGFzc2VkTnVtYmVyT2ZJbnRlcm5h
bEZpZWxkcz46OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRv
cikKIHsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTSW50ZXJuYWxGaWVsZE9iamVj
dEltcGwqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3Qs
IGluZm8oKSk7CkBAIC0zOCw0ICszOSw2IEBAIHZvaWQgSlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1w
bDxwYXNzZWROdW0KICAgICB2aXNpdG9yLmFwcGVuZFZhbHVlcyh0aGlzT2JqZWN0LT5tX2ludGVy
bmFsRmllbGRzLCBudW1iZXJPZkludGVybmFsRmllbGRzKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NI
SUxEUkVOX1dJVEhfTU9ESUZJRVIodGVtcGxhdGU8dW5zaWduZWQgcGFzc2VkTnVtYmVyT2ZJbnRl
cm5hbEZpZWxkcz4sIEpTSW50ZXJuYWxGaWVsZE9iamVjdEltcGw8cGFzc2VkTnVtYmVyT2ZJbnRl
cm5hbEZpZWxkcz4pOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTTGV4aWNhbEVudmlyb25tZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xleGljYWxFbnZpcm9ubWVudC5jcHAJKHJl
dmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTGV4aWNh
bEVudmlyb25tZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDgtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM2LDcgKzM2LDggQEAgbmFtZXNw
YWNlIEpTQyB7CiAKIGNvbnN0IENsYXNzSW5mbyBKU0xleGljYWxFbnZpcm9ubWVudDo6c19pbmZv
ID0geyAiSlNMZXhpY2FsRW52aXJvbm1lbnQiLCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBudWxs
cHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTTGV4aWNhbEVudmlyb25tZW50KSB9OwogCi12b2lk
IEpTTGV4aWNhbEVudmlyb25tZW50Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZp
c2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0xleGlj
YWxFbnZpcm9ubWVudDo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2
aXNpdG9yKQogewogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNMZXhpY2FsRW52aXJv
bm1lbnQqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3Qs
IGluZm8oKSk7CkBAIC00NCw2ICs0NSw4IEBAIHZvaWQgSlNMZXhpY2FsRW52aXJvbm1lbnQ6OnZp
c2l0Q2hpbGRyZW4KICAgICB2aXNpdG9yLmFwcGVuZFZhbHVlc0hpZGRlbih0aGlzT2JqZWN0LT52
YXJpYWJsZXMoKSwgdGhpc09iamVjdC0+c3ltYm9sVGFibGUoKS0+c2NvcGVTaXplKCkpOwogfQog
CitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNMZXhpY2FsRW52aXJvbm1lbnQpOworCiB2b2lkIEpT
TGV4aWNhbEVudmlyb25tZW50OjphbmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhlYXBBbmFseXpl
ciYgYW5hbHl6ZXIpCiB7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0xleGljYWxF
bnZpcm9ubWVudCo+KGNlbGwpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNMZXhpY2FsRW52aXJvbm1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0xleGljYWxFbnZpcm9ubWVudC5oCShyZXZpc2lvbiAyNzMxMTkpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xleGljYWxFbnZpcm9ubWVudC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOC0yMDIw
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0y
MDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMTM0LDcgKzEzNCw3IEBAIHByb3RlY3RlZDoKICAgICAgICAgfQogICAg
IH0KIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3Im
KTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogICAgIHN0YXRpYyB2b2lkIGFuYWx5emVI
ZWFwKEpTQ2VsbCosIEhlYXBBbmFseXplciYpOwogfTsKIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNNYXBJdGVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNYXBJdGVyYXRvci5jcHAJKHJldmlzaW9uIDI3MzExOSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTWFwSXRlcmF0b3IuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE3
IEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAyMSBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC01NywxMyArNTcsMTYgQEAgdm9pZCBKU01hcEl0ZXJhdG9yOjpmaW5p
c2hDcmVhdGlvbihWTSYgdgogICAgICAgICBCYXNlOjppbnRlcm5hbEZpZWxkKGluZGV4KS5zZXQo
dm0sIHRoaXMsIHZhbHVlc1tpbmRleF0pOwogfQogCi12b2lkIEpTTWFwSXRlcmF0b3I6OnZpc2l0
Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5
cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTTWFwSXRlcmF0b3I6OnZpc2l0Q2hpbGRyZW5JbXBsKEpT
Q2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0g
anNDYXN0PEpTTWFwSXRlcmF0b3IqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVS
SVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2Jq
ZWN0LCB2aXNpdG9yKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTTWFwSXRlcmF0b3Ip
OworCiBKU1ZhbHVlIEpTTWFwSXRlcmF0b3I6OmNyZWF0ZVBhaXIoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgSlNWYWx1ZSBrZXksIEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgTWFya2VkQXJn
dW1lbnRCdWZmZXIgYXJnczsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
TWFwSXRlcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU01hcEl0ZXJhdG9yLmgJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTTWFwSXRlcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTYgQXBwbGUsIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIxIEFwcGxlLCBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE0Miw3
ICsxNDIsNyBAQCBwcml2YXRlOgogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZmluaXNoQ3Jl
YXRpb24oVk0mLCBKU01hcCosIEl0ZXJhdGlvbktpbmQpOwogICAgIHZvaWQgZmluaXNoQ3JlYXRp
b24oVk0mKTsKICAgICBKU1ZhbHVlIGNyZWF0ZVBhaXIoSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVl
LCBKU1ZhbHVlKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RW
aXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIH07CiBTVEFUSUNfQVNTRVJU
X0lTX1RSSVZJQUxMWV9ERVNUUlVDVElCTEUoSlNNYXBJdGVyYXRvcik7CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlRW52aXJvbm1lbnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlRW52aXJvbm1lbnQu
Y3BwCShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U01vZHVsZUVudmlyb25tZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY1LDcgKzY1LDggQEAg
dm9pZCBKU01vZHVsZUVudmlyb25tZW50OjpmaW5pc2hDcmVhdGlvbgogICAgIHRoaXMtPm1vZHVs
ZVJlY29yZFNsb3QoKS5zZXQodm0sIHRoaXMsIG1vZHVsZVJlY29yZCk7CiB9CiAKLXZvaWQgSlNN
b2R1bGVFbnZpcm9ubWVudDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9y
JiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNNb2R1bGVFbnZp
cm9ubWVudDo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9y
KQogewogICAgIEpTTW9kdWxlRW52aXJvbm1lbnQqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNNb2R1
bGVFbnZpcm9ubWVudCo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhp
c09iamVjdCwgaW5mbygpKTsKQEAgLTc0LDYgKzc1LDggQEAgdm9pZCBKU01vZHVsZUVudmlyb25t
ZW50Ojp2aXNpdENoaWxkcmVuKAogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1vZHVs
ZVJlY29yZFNsb3QoKSk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU01vZHVsZUVudmly
b25tZW50KTsKKwogYm9vbCBKU01vZHVsZUVudmlyb25tZW50OjpnZXRPd25Qcm9wZXJ0eVNsb3Qo
SlNPYmplY3QqIGNlbGwsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFByb3BlcnR5TmFt
ZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBWTSYgdm0gPSBnbG9i
YWxPYmplY3QtPnZtKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01v
ZHVsZUVudmlyb25tZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNNb2R1bGVFbnZpcm9ubWVudC5oCShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZUVudmlyb25tZW50LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjAgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC04OSw3ICs4OSw3IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiAqYml0d2lzZV9j
YXN0PFdyaXRlQmFycmllckJhc2U8QWJzdHJhY3RNb2R1bGVSZWNvcmQ+Kj4oYml0d2lzZV9jYXN0
PGNoYXIqPih0aGlzKSArIG9mZnNldE9mTW9kdWxlUmVjb3JkKHN5bWJvbFRhYmxlKCkpKTsKICAg
ICB9CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9y
Jik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIH07CiAKIGlubGluZSBKU01vZHVsZUVu
dmlyb25tZW50OjpKU01vZHVsZUVudmlyb25tZW50KFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUsIEpTU2NvcGUqIGN1cnJlbnRTY29wZSwgU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlKQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVOYW1lc3BhY2VPYmplY3Qu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxl
TmFtZXNwYWNlT2JqZWN0LmNwcAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIwIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIxIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtODUsNyArODUsOCBAQCB2b2lkIEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0OjpkZXN0cm95
KEpTCiAgICAgdGhpc09iamVjdC0+SlNNb2R1bGVOYW1lc3BhY2VPYmplY3Q6On5KU01vZHVsZU5h
bWVzcGFjZU9iamVjdCgpOwogfQogCi12b2lkIEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0Ojp2aXNp
dENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0
eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU01vZHVsZU5hbWVzcGFjZU9iamVjdDo6dmlzaXRDaGls
ZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTTW9kdWxl
TmFtZXNwYWNlT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTTW9kdWxlTmFtZXNwYWNlT2Jq
ZWN0Kj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBp
bmZvKCkpOwpAQCAtOTgsNiArOTksOCBAQCB2b2lkIEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0Ojp2
aXNpdENoaWxkCiAgICAgfQogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNNb2R1bGVOYW1l
c3BhY2VPYmplY3QpOworCiBzdGF0aWMgSlNWYWx1ZSBnZXRWYWx1ZShKU01vZHVsZUVudmlyb25t
ZW50KiBlbnZpcm9ubWVudCwgUHJvcGVydHlOYW1lIGxvY2FsTmFtZSwgU2NvcGVPZmZzZXQmIHNj
b3BlT2Zmc2V0KQogewogICAgIFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSA9IGVudmlyb25tZW50
LT5zeW1ib2xUYWJsZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNN
b2R1bGVOYW1lc3BhY2VPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU01vZHVsZU5hbWVzcGFjZU9iamVjdC5oCShyZXZpc2lvbiAyNzMxMTkpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZU5hbWVzcGFjZU9iamVjdC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
NS0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtNzIsNyArNzIsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAg
IEpTX0VYUE9SVF9QUklWQVRFIEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0KFZNJiwgU3RydWN0dXJl
Kik7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0dsb2JhbE9i
amVjdCosIEFic3RyYWN0TW9kdWxlUmVjb3JkKiwgVmVjdG9yPHN0ZDo6cGFpcjxJZGVudGlmaWVy
LCBBYnN0cmFjdE1vZHVsZVJlY29yZDo6UmVzb2x1dGlvbj4+JiYpOwotICAgIHN0YXRpYyB2b2lk
IHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lU
X0NISUxEUkVOOwogICAgIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90Q29tbW9uKEpTR2xvYmFsT2Jq
ZWN0KiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKIAogICAgIHN0cnVjdCBFeHBvcnRF
bnRyeSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZVJlY29y
ZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1
bGVSZWNvcmQuY3BwCShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU01vZHVsZVJlY29yZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03MCw3ICs3MCw4
IEBAIHZvaWQgSlNNb2R1bGVSZWNvcmQ6OmZpbmlzaENyZWF0aW9uKEpTR2wKICAgICBBU1NFUlQo
aW5oZXJpdHModm0sIGluZm8oKSkpOwogfQogCi12b2lkIEpTTW9kdWxlUmVjb3JkOjp2aXNpdENo
aWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBl
bmFtZSBWaXNpdG9yPgordm9pZCBKU01vZHVsZVJlY29yZDo6dmlzaXRDaGlsZHJlbkltcGwoSlND
ZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTTW9kdWxlUmVjb3JkKiB0aGlz
T2JqZWN0ID0ganNDYXN0PEpTTW9kdWxlUmVjb3JkKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09C
SkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNzgsNiArNzksOCBAQCB2b2lk
IEpTTW9kdWxlUmVjb3JkOjp2aXNpdENoaWxkcmVuKEpTQ2VsCiAgICAgdmlzaXRvci5hcHBlbmQo
dGhpc09iamVjdC0+bV9tb2R1bGVQcm9ncmFtRXhlY3V0YWJsZSk7CiB9CiAKK0RFRklORV9WSVNJ
VF9DSElMRFJFTihKU01vZHVsZVJlY29yZCk7CisKIHZvaWQgSlNNb2R1bGVSZWNvcmQ6Omxpbmso
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBzY3JpcHRGZXRjaGVyKQogewog
ICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTTW9kdWxlUmVjb3JkLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVSZWNvcmQuaAkocmV2aXNpb24gMjczMTE5KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVSZWNvcmQuaAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTY2LDcgKzY2LDcgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgZmluaXNoQ3JlYXRp
b24oSlNHbG9iYWxPYmplY3QqLCBWTSYpOwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJl
bihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAK
ICAgICB2b2lkIGluc3RhbnRpYXRlRGVjbGFyYXRpb25zKEpTR2xvYmFsT2JqZWN0KiwgTW9kdWxl
UHJvZ3JhbUV4ZWN1dGFibGUqLCBKU1ZhbHVlIHNjcmlwdEZldGNoZXIpOwogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU05hdGl2ZVN0ZEZ1bmN0aW9uLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU05hdGl2ZVN0ZEZ1bmN0aW9u
LmNwcAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNOYXRpdmVTdGRGdW5jdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00MSwxMyArNDEsMTYg
QEAgSlNOYXRpdmVTdGRGdW5jdGlvbjo6SlNOYXRpdmVTdGRGdW5jdGlvbgogewogfQogCi12b2lk
IEpTTmF0aXZlU3RkRnVuY3Rpb246OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90Vmlz
aXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTTmF0aXZl
U3RkRnVuY3Rpb246OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlz
aXRvcikKIHsKICAgICBKU05hdGl2ZVN0ZEZ1bmN0aW9uKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpT
TmF0aXZlU3RkRnVuY3Rpb24qPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRT
KHRoaXNPYmplY3QsIGluZm8oKSk7CiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0
LCB2aXNpdG9yKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTTmF0aXZlU3RkRnVuY3Rp
b24pOworCiB2b2lkIEpTTmF0aXZlU3RkRnVuY3Rpb246OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwg
TmF0aXZlRXhlY3V0YWJsZSogZXhlY3V0YWJsZSwgdW5zaWduZWQgbGVuZ3RoLCBjb25zdCBTdHJp
bmcmIG5hbWUpCiB7CiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0sIGV4ZWN1dGFibGUsIGxl
bmd0aCwgbmFtZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU05hdGl2
ZVN0ZEZ1bmN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNOYXRpdmVTdGRGdW5jdGlvbi5oCShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU05hdGl2ZVN0ZEZ1bmN0aW9uLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTggQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC02NSw3ICs2NSw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgSlNOYXRpdmVTdGRGdW5j
dGlvbihWTSYsIE5hdGl2ZUV4ZWN1dGFibGUqLCBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSos
IE5hdGl2ZVN0ZEZ1bmN0aW9uJiYpOwogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBOYXRp
dmVFeGVjdXRhYmxlKiwgdW5zaWduZWQgbGVuZ3RoLCBjb25zdCBTdHJpbmcmIG5hbWUpOwotICAg
IHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBE
RUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgTmF0aXZlU3RkRnVuY3Rpb24gbV9mdW5jdGlv
bjsKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3Bw
CShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09i
amVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSw3IEBACiAvKgogICogIENvcHlyaWdo
dCAoQykgMTk5OS0yMDAxIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCiAgKiAgQ29weXJp
Z2h0IChDKSAyMDAxIFBldGVyIEtlbGx5IChwbWtAcG9zdC5jb20pCi0gKiAgQ29weXJpZ2h0IChD
KSAyMDAzLTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdo
dCAoQykgMjAwMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqICBDb3B5
cmlnaHQgKEMpIDIwMDcgRXJpYyBTZWlkZWwgKGVyaWNAd2Via2l0Lm9yZykKICAqCiAgKiAgVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgpAQCAtNzMsNyArNzMsOCBAQCBjb25zdCBDbGFzc0luZm8gSlNPYmplY3Q6OnNfaW5mbyA9IHsg
Ik9iCiAKIGNvbnN0IENsYXNzSW5mbyBKU0ZpbmFsT2JqZWN0OjpzX2luZm8gPSB7ICJPYmplY3Qi
LCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpT
RmluYWxPYmplY3QpIH07CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKU09iamVjdDo6bWFya0F1eGls
aWFyeUFuZFZpc2l0T3V0T2ZMaW5lUHJvcGVydGllcyhTbG90VmlzaXRvciYgdmlzaXRvciwgQnV0
dGVyZmx5KiBidXR0ZXJmbHksIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBt
YXhPZmZzZXQpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgorQUxXQVlTX0lOTElORSB2b2lk
IEpTT2JqZWN0OjptYXJrQXV4aWxpYXJ5QW5kVmlzaXRPdXRPZkxpbmVQcm9wZXJ0aWVzKFZpc2l0
b3ImIHZpc2l0b3IsIEJ1dHRlcmZseSogYnV0dGVyZmx5LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwg
UHJvcGVydHlPZmZzZXQgbWF4T2Zmc2V0KQogewogICAgIC8vIFdlIGNhbGwgdGhpcyB3aGVuIHdl
IGZvdW5kIGV2ZXJ5dGhpbmcgd2l0aG91dCByYWNlcy4KICAgICBBU1NFUlQoc3RydWN0dXJlKTsK
QEAgLTEwNCw3ICsxMDUsOCBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSlNPYmplY3Q6Om1hcmtBdXhp
bGlhCiAgICAgdmlzaXRvci5hcHBlbmRWYWx1ZXNIaWRkZW4oYnV0dGVyZmx5LT5wcm9wZXJ0eVN0
b3JhZ2UoKSAtIG91dE9mTGluZVNpemUsIG91dE9mTGluZVNpemUpOwogfQogCi1BTFdBWVNfSU5M
SU5FIFN0cnVjdHVyZSogSlNPYmplY3Q6OnZpc2l0QnV0dGVyZmx5KFNsb3RWaXNpdG9yJiB2aXNp
dG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK0FMV0FZU19JTkxJTkUgU3RydWN0dXJl
KiBKU09iamVjdDo6dmlzaXRCdXR0ZXJmbHkoVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBzdGF0
aWMgY29uc3QgY2hhciogY29uc3QgcmFjZVJlYXNvbiA9ICJKU09iamVjdDo6dmlzaXRCdXR0ZXJm
bHkiOwogICAgIFN0cnVjdHVyZSogcmVzdWx0ID0gdmlzaXRCdXR0ZXJmbHlJbXBsKHZpc2l0b3Ip
OwpAQCAtMTEzLDcgKzExNSw4IEBAIEFMV0FZU19JTkxJTkUgU3RydWN0dXJlKiBKU09iamVjdDo6
dmlzaXQKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1BTFdBWVNfSU5MSU5FIFN0cnVjdHVyZSog
SlNPYmplY3Q6OnZpc2l0QnV0dGVyZmx5SW1wbChTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBs
YXRlPHR5cGVuYW1lIFZpc2l0b3I+CitBTFdBWVNfSU5MSU5FIFN0cnVjdHVyZSogSlNPYmplY3Q6
OnZpc2l0QnV0dGVyZmx5SW1wbChWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFZNJiB2bSA9IHZp
c2l0b3Iudm0oKTsKICAgICAKQEAgLTQxMywyNCArNDE2LDIwIEBAIHNpemVfdCBKU09iamVjdDo6
ZXN0aW1hdGVkU2l6ZShKU0NlbGwqIGMKICAgICByZXR1cm4gQmFzZTo6ZXN0aW1hdGVkU2l6ZShj
ZWxsLCB2bSkgKyBidXR0ZXJmbHlPdXRPZkxpbmVTaXplOwogfQogCi12b2lkIEpTT2JqZWN0Ojp2
aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0
ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU09iamVjdDo6dmlzaXRDaGlsZHJlbkltcGwoSlND
ZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTT2JqZWN0KiB0aGlzT2JqZWN0
ID0ganNDYXN0PEpTT2JqZWN0Kj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklU
Uyh0aGlzT2JqZWN0LCBpbmZvKCkpOwotI2lmIEFTU0VSVF9FTkFCTEVECi0gICAgYm9vbCB3YXND
aGVja2luZ0ZvckRlZmF1bHRNYXJrVmlvbGF0aW9uID0gdmlzaXRvci5tX2lzQ2hlY2tpbmdGb3JE
ZWZhdWx0TWFya1Zpb2xhdGlvbjsKLSAgICB2aXNpdG9yLm1faXNDaGVja2luZ0ZvckRlZmF1bHRN
YXJrVmlvbGF0aW9uID0gZmFsc2U7Ci0jZW5kaWYKLSAgICAKKyAgICB0eXBlbmFtZSBWaXNpdG9y
OjpEZWZhdWx0TWFya2luZ1Zpb2xhdGlvbkFzc2VydGlvblNjb3BlIGFzc2VydGlvblNjb3BlKHZp
c2l0b3IpOworCiAgICAgSlNDZWxsOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3Ip
OwotICAgIAorCiAgICAgdGhpc09iamVjdC0+dmlzaXRCdXR0ZXJmbHkodmlzaXRvcik7Ci0gICAg
Ci0jaWYgQVNTRVJUX0VOQUJMRUQKLSAgICB2aXNpdG9yLm1faXNDaGVja2luZ0ZvckRlZmF1bHRN
YXJrVmlvbGF0aW9uID0gd2FzQ2hlY2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlvbjsKLSNlbmRp
ZgogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU5fV0lUSF9NT0RJRklFUihKU19FWFBPUlRfUFJJ
VkFURSwgSlNPYmplY3QpOworCiB2b2lkIEpTT2JqZWN0OjphbmFseXplSGVhcChKU0NlbGwqIGNl
bGwsIEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCiB7CiAgICAgSlNPYmplY3QqIHRoaXNPYmplY3Qg
PSBqc0Nhc3Q8SlNPYmplY3QqPihjZWxsKTsKQEAgLTQ2OSwxNCArNDY4LDEyIEBAIHZvaWQgSlNP
YmplY3Q6OmFuYWx5emVIZWFwKEpTQ2VsbCogY2VsbCwKICAgICB9CiB9CiAKLXZvaWQgSlNGaW5h
bE9iamVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9y
KQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNGaW5hbE9iamVjdDo6dmlzaXRD
aGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTRmlu
YWxPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNGaW5hbE9iamVjdCo+KGNlbGwpOwogICAg
IEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKLSNpZiBBU1NF
UlRfRU5BQkxFRAotICAgIGJvb2wgd2FzQ2hlY2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlvbiA9
IHZpc2l0b3IubV9pc0NoZWNraW5nRm9yRGVmYXVsdE1hcmtWaW9sYXRpb247Ci0gICAgdmlzaXRv
ci5tX2lzQ2hlY2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlvbiA9IGZhbHNlOwotI2VuZGlmCisg
ICAgdHlwZW5hbWUgVmlzaXRvcjo6RGVmYXVsdE1hcmtpbmdWaW9sYXRpb25Bc3NlcnRpb25TY29w
ZSBhc3NlcnRpb25TY29wZSh2aXNpdG9yKTsKICAgICAKICAgICBKU0NlbGw6OnZpc2l0Q2hpbGRy
ZW4odGhpc09iamVjdCwgdmlzaXRvcik7CiAgICAgCkBAIC00ODQsMTIgKzQ4MSwxMCBAQCB2b2lk
IEpTRmluYWxPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsCiAgICAgICAgIGlmICh1bnNpZ25l
ZCBzdG9yYWdlU2l6ZSA9IHN0cnVjdHVyZS0+aW5saW5lU2l6ZSgpKQogICAgICAgICAgICAgdmlz
aXRvci5hcHBlbmRWYWx1ZXNIaWRkZW4odGhpc09iamVjdC0+aW5saW5lU3RvcmFnZSgpLCBzdG9y
YWdlU2l6ZSk7CiAgICAgfQotICAgIAotI2lmIEFTU0VSVF9FTkFCTEVECi0gICAgdmlzaXRvci5t
X2lzQ2hlY2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlvbiA9IHdhc0NoZWNraW5nRm9yRGVmYXVs
dE1hcmtWaW9sYXRpb247Ci0jZW5kaWYKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOX1dJVEhf
TU9ESUZJRVIoSlNfRVhQT1JUX1BSSVZBVEUsIEpTRmluYWxPYmplY3QpOworCiBTdHJpbmcgSlNP
YmplY3Q6OmNsYXNzTmFtZShjb25zdCBKU09iamVjdCogb2JqZWN0LCBWTSYgdm0pCiB7CiAgICAg
Y29uc3QgQ2xhc3NJbmZvKiBpbmZvID0gb2JqZWN0LT5jbGFzc0luZm8odm0pOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCShyZXZpc2lvbiAyNzMxMTkpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDcgKzEsNyBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMSBIYXJyaSBQ
b3J0ZW4gKHBvcnRlbkBrZGUub3JnKQogICogIENvcHlyaWdodCAoQykgMjAwMSBQZXRlciBLZWxs
eSAocG1rQHBvc3QuY29tKQotICogIENvcHlyaWdodCAoQykgMjAwMy0yMDE5IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAyMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMTA4LDgg
KzEwOCw5IEBAIGNsYXNzIEpTT2JqZWN0IDogcHVibGljIEpTQ2VsbCB7CiBwdWJsaWM6CiAgICAg
dXNpbmcgQmFzZSA9IEpTQ2VsbDsKIAorICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU5fV0lUSF9N
T0RJRklFUihKU19FWFBPUlRfUFJJVkFURSk7CisKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0
aWMgc2l6ZV90IGVzdGltYXRlZFNpemUoSlNDZWxsKiwgVk0mKTsKLSAgICBKU19FWFBPUlRfUFJJ
VkFURSBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CiAg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgYW5hbHl6ZUhlYXAoSlNDZWxsKiwgSGVh
cEFuYWx5emVyJik7CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgU3RyaW5nIGNsYXNz
TmFtZShjb25zdCBKU09iamVjdCosIFZNJik7CkBAIC05ODIsMTEgKzk4MywxMSBAQCBwcm90ZWN0
ZWQ6CiAgICAgSlNPYmplY3QoVk0mLCBTdHJ1Y3R1cmUqLCBCdXR0ZXJmbHkqID0gbnVsbHB0cik7
CiAgICAgCiAgICAgLy8gVmlzaXRzIHRoZSBidXR0ZXJmbHkgdW5sZXNzIHRoZXJlIGlzIGEgcmFj
ZS4gUmV0dXJucyB0aGUgc3RydWN0dXJlIGlmIHRoZXJlIHdhcyBubyByYWNlLgotICAgIFN0cnVj
dHVyZSogdmlzaXRCdXR0ZXJmbHkoU2xvdFZpc2l0b3ImKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBWaXNpdG9yPiBTdHJ1Y3R1cmUqIHZpc2l0QnV0dGVyZmx5KFZpc2l0b3ImKTsKICAgICAKLSAg
ICBTdHJ1Y3R1cmUqIHZpc2l0QnV0dGVyZmx5SW1wbChTbG90VmlzaXRvciYpOworICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFZpc2l0b3I+IFN0cnVjdHVyZSogdmlzaXRCdXR0ZXJmbHlJbXBsKFZpc2l0
b3ImKTsKICAgICAKLSAgICB2b2lkIG1hcmtBdXhpbGlhcnlBbmRWaXNpdE91dE9mTGluZVByb3Bl
cnRpZXMoU2xvdFZpc2l0b3ImLCBCdXR0ZXJmbHkqLCBTdHJ1Y3R1cmUqLCBQcm9wZXJ0eU9mZnNl
dCBtYXhPZmZzZXQpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgbWFya0F1
eGlsaWFyeUFuZFZpc2l0T3V0T2ZMaW5lUHJvcGVydGllcyhWaXNpdG9yJiwgQnV0dGVyZmx5Kiwg
U3RydWN0dXJlKiwgUHJvcGVydHlPZmZzZXQgbWF4T2Zmc2V0KTsKIAogICAgIC8vIENhbGwgdGhp
cyBpZiB5b3Uga25vdyB0aGF0IHRoZSBvYmplY3QgaXMgaW4gYSBtb2RlIHdoZXJlIGl0IGhhcyBh
cnJheQogICAgIC8vIHN0b3JhZ2UuIFRoaXMgd2lsbCBhc3NlcnQgb3RoZXJ3aXNlLgpAQCAtMTE3
NCw4ICsxMTc1LDYgQEAgcHJvdGVjdGVkOgogICAgIH0KIH07CiAKLWNsYXNzIEpTRmluYWxPYmpl
Y3Q7Ci0KIC8vIEpTRmluYWxPYmplY3QgaXMgYSB0eXBlIG9mIEpTT2JqZWN0IHRoYXQgY29udGFp
bnMgc3VmZmljaWVudCBpbnRlcm5hbAogLy8gc3RvcmFnZSB0byBmdWxseSBtYWtlIHVzZSBvZiB0
aGUgY29sbGVjdG9yIGNlbGwgY29udGFpbmluZyBpdC4KIGNsYXNzIEpTRmluYWxPYmplY3QgZmlu
YWwgOiBwdWJsaWMgSlNPYmplY3QgewpAQCAtMTIxNCwxNSArMTIxMywxMyBAQCBwdWJsaWM6CiAg
ICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5
cGUsIHR5cGVJbmZvKCksIGluZm8oKSwgZGVmYXVsdEluZGV4aW5nVHlwZSwgaW5saW5lQ2FwYWNp
dHkpOwogICAgIH0KIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIHZpc2l0Q2hp
bGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVO
X1dJVEhfTU9ESUZJRVIoSlNfRVhQT1JUX1BSSVZBVEUpOwogCiAgICAgREVDTEFSRV9FWFBPUlRf
SU5GTzsKIAogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9y
OwogCi0gICAgdm9pZCB2aXNpdENoaWxkcmVuQ29tbW9uKFNsb3RWaXNpdG9yJik7Ci0KICAgICBl
eHBsaWNpdCBKU0ZpbmFsT2JqZWN0KFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEJ1dHRl
cmZseSogYnV0dGVyZmx5KQogICAgICAgICA6IEpTT2JqZWN0KHZtLCBzdHJ1Y3R1cmUsIGJ1dHRl
cmZseSkKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb21p
c2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJv
bWlzZS5jcHAJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTUHJvbWlzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02NywxMyArNjcsMTYgQEAgdm9p
ZCBKU1Byb21pc2U6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKICAgICAgICAgQmFzZTo6aW50ZXJu
YWxGaWVsZChpbmRleCkuc2V0KHZtLCB0aGlzLCB2YWx1ZXNbaW5kZXhdKTsKIH0KIAotdm9pZCBK
U1Byb21pc2U6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRv
cikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTUHJvbWlzZTo6dmlzaXRDaGls
ZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGF1dG8qIHRo
aXNPYmplY3QgPSBqc0Nhc3Q8SlNQcm9taXNlKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVD
VF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4o
dGhpc09iamVjdCwgdmlzaXRvcik7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU1Byb21p
c2UpOworCiBhdXRvIEpTUHJvbWlzZTo6c3RhdHVzKFZNJikgY29uc3QgLT4gU3RhdHVzCiB7CiAg
ICAgSlNWYWx1ZSB2YWx1ZSA9IGludGVybmFsRmllbGQoRmllbGQ6OkZsYWdzKS5nZXQoKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvbWlzZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvbWlzZS5oCShyZXZpc2lvbiAy
NzMxMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb21pc2UuaAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC05Niw3ICs5Niw3IEBAIHB1YmxpYzoKICAgICB9OwogICAgIHN0YXRpYyBEZWZl
cnJlZERhdGEgY3JlYXRlRGVmZXJyZWREYXRhKEpTR2xvYmFsT2JqZWN0KiwgSlNQcm9taXNlQ29u
c3RydWN0b3IqKTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xv
dFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiBwcm90ZWN0ZWQ6CiAg
ICAgSlNQcm9taXNlKFZNJiwgU3RydWN0dXJlKik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVydHlOYW1lRW51bWVyYXRvci5jcHAJ
KHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJv
cGVydHlOYW1lRW51bWVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03MCw3ICs3MCw4IEBA
IHZvaWQgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpmaW5pc2hDcmUKICAgICB9CiB9CiAKLXZv
aWQgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwg
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBK
U1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwg
VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqIHRoaXNP
YmplY3QgPSBqc0Nhc3Q8SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKj4oY2VsbCk7CiAgICAgQVNT
RVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtODcsNiArODgs
OCBAQCB2b2lkIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6dmlzaXRDaGlsCiAgICAgfQogfQog
CitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKTsKKwogLy8g
RklYTUU6IEFzc2VydCB0aGF0IHByb3BlcnRpZXMgcmV0dXJuZWQgYnkgZ2V0T3duUHJvcGVydHlO
YW1lcygpIGFyZSByZXBvcnRlZCBlbnVtZXJhYmxlIGJ5IGdldE93blByb3BlcnR5U2xvdCgpLgog
Ly8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxOTkyNgogdm9pZCBn
ZXRFbnVtZXJhYmxlUHJvcGVydHlOYW1lcyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBK
U09iamVjdCogYmFzZSwgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIHVpbnQzMl90
JiBpbmRleGVkTGVuZ3RoLCB1aW50MzJfdCYgc3RydWN0dXJlUHJvcGVydHlDb3VudCkKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVydHlOYW1lRW51bWVyYXRvci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVydHlO
YW1lRW51bWVyYXRvci5oCShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxOSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTg0LDcgKzg0LDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpT
UHJvcGVydHlOYW1lRW51bWVyYXRvciwgbV9wcm9wZXJ0eU5hbWVzKTsKICAgICB9CiAKLSAgICBz
dGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVD
TEFSRV9WSVNJVF9DSElMRFJFTjsKIAogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgTExJbnRP
ZmZzZXRzRXh0cmFjdG9yOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQ
cm94eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQ
cm94eS5jcHAJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTUHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMS0yMDEyLCAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNSw3ICszNSw4
IEBAIFNUQVRJQ19BU1NFUlRfSVNfVFJJVklBTExZX0RFU1RSVUNUSUJMRSgKIAogY29uc3QgQ2xh
c3NJbmZvIEpTUHJveHk6OnNfaW5mbyA9IHsgIkpTUHJveHkiLCAmQmFzZTo6c19pbmZvLCBudWxs
cHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTUHJveHkpIH07CiAKLXZvaWQgSlNQ
cm94eTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQor
dGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNQcm94eTo6dmlzaXRDaGlsZHJlbklt
cGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTUHJveHkqIHRoaXNP
YmplY3QgPSBqc0Nhc3Q8SlNQcm94eSo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5I
RVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTQzLDYgKzQ0LDggQEAgdm9pZCBKU1Byb3h5
Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbAogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmpl
Y3QtPm1fdGFyZ2V0KTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOX1dJVEhfTU9ESUZJRVIo
SlNfRVhQT1JUX1BSSVZBVEUsIEpTUHJveHkpOworCiB2b2lkIEpTUHJveHk6OnNldFRhcmdldChW
TSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCiB7CiAgICAgbV90YXJnZXQuc2V0
KHZtLCB0aGlzLCBnbG9iYWxPYmplY3QpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNQcm94eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTUHJveHkuaAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNQcm94eS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMS0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODUsNyArODUsNyBAQCBwcm90
ZWN0ZWQ6CiAgICAgICAgIG1fdGFyZ2V0LnNldCh2bSwgdGhpcywgdGFyZ2V0KTsKICAgICB9CiAK
LSAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCos
IFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTl9XSVRIX01PRElGSUVS
KEpTX0VYUE9SVF9QUklWQVRFKTsKIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBTdHJp
bmcgY2xhc3NOYW1lKGNvbnN0IEpTT2JqZWN0KiwgVk0mKTsKICAgICBKU19FWFBPUlRfUFJJVkFU
RSBzdGF0aWMgU3RyaW5nIHRvU3RyaW5nTmFtZShjb25zdCBKU09iamVjdCosIEpTR2xvYmFsT2Jq
ZWN0Kik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Njb3BlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Njb3BlLmNwcAko
cmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTY29w
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDEyLTIwMjAgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEyLTIwMjEgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zOSw3ICszOSw4IEBAIFNUQVRJQ19BU1NFUlRfSVNf
VFJJVklBTExZX0RFU1RSVUNUSUJMRSgKIAogY29uc3QgQ2xhc3NJbmZvIEpTU2NvcGU6OnNfaW5m
byA9IHsgIlNjb3BlIiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01F
VEhPRF9UQUJMRShKU1Njb3BlKSB9OwogCi12b2lkIEpTU2NvcGU6OnZpc2l0Q2hpbGRyZW4oSlND
ZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0
b3I+Cit2b2lkIEpTU2NvcGU6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRv
ciYgdmlzaXRvcikKIHsKICAgICBKU1Njb3BlKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTU2NvcGUq
PihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8o
KSk7CkBAIC00Nyw2ICs0OCw4IEBAIHZvaWQgSlNTY29wZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwq
IGNlbGwKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX25leHQpOwogfQogCitERUZJ
TkVfVklTSVRfQ0hJTERSRU4oSlNTY29wZSk7CisKIC8vIFJldHVybnMgdHJ1ZSBpZiB3ZSBmb3Vu
ZCBlbm91Z2ggaW5mb3JtYXRpb24gdG8gdGVybWluYXRlIG9wdGltaXphdGlvbi4KIHN0YXRpYyBp
bmxpbmUgYm9vbCBhYnN0cmFjdEFjY2VzcyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBK
U1Njb3BlKiBzY29wZSwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIEdldE9yUHV0IGdldE9yUHV0
LCBzaXplX3QgZGVwdGgsIGJvb2wmIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCBSZXNvbHZlT3Am
IG9wLCBJbml0aWFsaXphdGlvbk1vZGUgaW5pdGlhbGl6YXRpb25Nb2RlKQogewpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTY29wZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2NvcGUuaAkocmV2aXNpb24gMjczMTE5KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTY29wZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE5IEFwcGxlIEluYy4g
QWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDIxIEFwcGxlIElu
Yy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtNjQsNyArNjQsNyBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgdm9pZCBjb2xsZWN0Q2xvc3Vy
ZVZhcmlhYmxlc1VuZGVyVERaKEpTU2NvcGUqLCBURFpFbnZpcm9ubWVudCYgcmVzdWx0LCBQcml2
YXRlTmFtZUVudmlyb25tZW50Jik7CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpT
Q2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAg
IGJvb2wgaXNWYXJTY29wZSgpOwogICAgIGJvb2wgaXNMZXhpY2FsU2NvcGUoKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVPYmplY3QuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2VnbWVudGVk
VmFyaWFibGVPYmplY3QuY3BwCShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNjIsNyArNjIsOCBAQCBTY29wZU9mZnNldCBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0
OjphCiAgICAgcmV0dXJuIFNjb3BlT2Zmc2V0KG9sZFNpemUpOwogfQogCi12b2lkIEpTU2VnbWVu
dGVkVmFyaWFibGVPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRv
ciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTU2VnbWVudGVk
VmFyaWFibGVPYmplY3Q6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYg
dmlzaXRvcikKIHsKICAgICBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0KiB0aGlzT2JqZWN0ID0g
anNDYXN0PEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3QqPihjZWxsKTsKICAgICBBU1NFUlRfR0Nf
T0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC03NSw2ICs3Niw4IEBAIHZv
aWQgSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdDo6dmlzaXRDaGkKICAgICAgICAgdmlzaXRvci5h
cHBlbmRIaWRkZW4odGhpc09iamVjdC0+bV92YXJpYWJsZXNbaV0pOwogfQogCitERUZJTkVfVklT
SVRfQ0hJTERSRU5fV0lUSF9NT0RJRklFUihKU19FWFBPUlRfUFJJVkFURSwgSlNTZWdtZW50ZWRW
YXJpYWJsZU9iamVjdCk7CisKIHZvaWQgSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdDo6YW5hbHl6
ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQogewogICAgIEpTU2Vn
bWVudGVkVmFyaWFibGVPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNTZWdtZW50ZWRWYXJp
YWJsZU9iamVjdCo+KGNlbGwpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVPYmplY3QuaAkocmV2aXNpb24gMjcz
MTE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJs
ZU9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMi0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODUsOCArODUsOCBAQCBwdWJsaWM6CiAgICAg
Ly8gQWRkcyBudW1iZXJPZlJlZ2lzdGVyc1RvQWRkIHJlZ2lzdGVycywgaW5pdGlhbGl6ZXMgdGhl
bSB0byBVbmRlZmluZWQsIGFuZCByZXR1cm5zCiAgICAgLy8gdGhlIGluZGV4IG9mIHRoZSBmaXJz
dCBvbmUgYWRkZWQuCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgU2NvcGVPZmZzZXQgYWRkVmFyaWFi
bGVzKHVuc2lnbmVkIG51bWJlck9mVmFyaWFibGVzVG9BZGQsIEpTVmFsdWUpOwotICAgIAotICAg
IEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xv
dFZpc2l0b3ImKTsKKworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU5fV0lUSF9NT0RJRklFUihK
U19FWFBPUlRfUFJJVkFURSk7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgYW5h
bHl6ZUhlYXAoSlNDZWxsKiwgSGVhcEFuYWx5emVyJik7CiAgICAgCiBwcm90ZWN0ZWQ6CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NldEl0ZXJhdG9yLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NldEl0ZXJhdG9yLmNwcAko
cmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZXRJ
dGVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTcgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDIxIEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU3LDEzICs1NywxNiBAQCB2b2lkIEpT
U2V0SXRlcmF0b3I6OmZpbmlzaENyZWF0aW9uKFZNJiB2CiAgICAgICAgIEJhc2U6OmludGVybmFs
RmllbGQoaW5kZXgpLnNldCh2bSwgdGhpcywgdmFsdWVzW2luZGV4XSk7CiB9CiAKLXZvaWQgSlNT
ZXRJdGVyYXRvcjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNp
dG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNTZXRJdGVyYXRvcjo6dmlz
aXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGF1
dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNTZXRJdGVyYXRvcio+KGNlbGwpOwogICAgIEFTU0VS
VF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKICAgICBCYXNlOjp2aXNp
dENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERS
RU4oSlNTZXRJdGVyYXRvcik7CisKIEpTVmFsdWUgSlNTZXRJdGVyYXRvcjo6Y3JlYXRlUGFpcihK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIGtleSwgSlNWYWx1ZSB2YWx1ZSkK
IHsKICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdzOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNTZXRJdGVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTU2V0SXRlcmF0b3IuaAkocmV2aXNpb24gMjczMTE5KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZXRJdGVyYXRvci5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNiBBcHBs
ZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjEg
QXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMTMwLDcgKzEzMCw3IEBAIHByaXZhdGU6CiAgICAgSlNfRVhQT1JUX1BSSVZB
VEUgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIEpTU2V0KiwgSXRlcmF0aW9uS2luZCk7CiAgICAg
dm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIEpTVmFsdWUg
Y3JlYXRlUGFpcihKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUsIEpTVmFsdWUpOwotICAgIHN0YXRp
YyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJF
X1ZJU0lUX0NISUxEUkVOOwogfTsKIFNUQVRJQ19BU1NFUlRfSVNfVFJJVklBTExZX0RFU1RSVUNU
SUJMRShKU1NldEl0ZXJhdG9yKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNTdHJpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTU3RyaW5nLmNwcAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNTdHJpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBAQAog
LyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMiBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUu
b3JnKQogICogIENvcHlyaWdodCAoQykgMjAwMSBQZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQot
ICogIENvcHlyaWdodCAoQykgMjAwNC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDQtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMTA1LDcgKzEwNSw4IEBAIHNpemVfdCBK
U1N0cmluZzo6ZXN0aW1hdGVkU2l6ZShKU0NlbGwqIGMKICAgICByZXR1cm4gQmFzZTo6ZXN0aW1h
dGVkU2l6ZShjZWxsLCB2bSkgKyBiaXR3aXNlX2Nhc3Q8U3RyaW5nSW1wbCo+KHBvaW50ZXIpLT5j
b3N0RHVyaW5nR0MoKTsKIH0KIAotdm9pZCBKU1N0cmluZzo6dmlzaXRDaGlsZHJlbihKU0NlbGwq
IGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4K
K3ZvaWQgSlNTdHJpbmc6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYg
dmlzaXRvcikKIHsKICAgICBKU1N0cmluZyogdGhpc09iamVjdCA9IGFzU3RyaW5nKGNlbGwpOwog
ICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTE0
Myw2ICsxNDQsOCBAQCB2b2lkIEpTU3RyaW5nOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsCiAg
ICAgICAgIHZpc2l0b3IucmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKGltcGwtPmNvc3REdXJpbmdH
QygpKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTU3RyaW5nKTsKKwogc3RhdGljIGNv
bnN0ZXhwciB1bnNpZ25lZCBtYXhMZW5ndGhGb3JPblN0YWNrUmVzb2x2ZSA9IDIwNDg7CiAKIHZv
aWQgSlNSb3BlU3RyaW5nOjpyZXNvbHZlUm9wZUludGVybmFsOChMQ2hhciogYnVmZmVyKSBjb25z
dApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5oCShyZXZpc2lv
biAyNzMxMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTkt
MjAwMSBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQogICogIENvcHlyaWdodCAoQykgMjAw
MSBQZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQotICogIENvcHlyaWdodCAoQykgMjAwMy0yMDIw
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMt
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YwpAQCAtMjE3LDcgKzIxNyw3IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyB2b2lkIGR1bXBUb1N0
cmVhbShjb25zdCBKU0NlbGwqLCBQcmludFN0cmVhbSYpOwogICAgIHN0YXRpYyBzaXplX3QgZXN0
aW1hdGVkU2l6ZShKU0NlbGwqLCBWTSYpOwotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4o
SlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAg
ICAgQUxXQVlTX0lOTElORSBib29sIGlzUm9wZSgpIGNvbnN0CiAgICAgewpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmdJdGVyYXRvci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmdJdGVyYXRvci5jcHAJKHJl
dmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5n
SXRlcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENvcHly
aWdodCAoQykgMjAxNSBZdXN1a2UgU3V6dWtpIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+LgotICog
Q29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTEsMTEgKzUxLDE0IEBAIEpTU3RyaW5n
SXRlcmF0b3IqIEpTU3RyaW5nSXRlcmF0b3I6OmNsb24KICAgICByZXR1cm4gY2xvbmU7CiB9CiAK
LXZvaWQgSlNTdHJpbmdJdGVyYXRvcjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNTdHJp
bmdJdGVyYXRvcjo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNp
dG9yKQogewogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNTdHJpbmdJdGVyYXRvcio+
KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygp
KTsKICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwogfQogCitE
RUZJTkVfVklTSVRfQ0hJTERSRU4oSlNTdHJpbmdJdGVyYXRvcik7CisKIH0gLy8gbmFtZXNwYWNl
IEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmdJdGVyYXRv
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5n
SXRlcmF0b3IuaAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNTdHJpbmdJdGVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAog
LyoKICAqIENvcHlyaWdodCAoQykgMjAxNSBZdXN1a2UgU3V6dWtpIDx1dGF0YW5lLnRlYUBnbWFp
bC5jb20+LgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNzksNyArODAsNyBAQCBw
dWJsaWM6CiAgICAgSlNWYWx1ZSBpbmRleCgpIGNvbnN0IHsgcmV0dXJuIGludGVybmFsRmllbGQo
RmllbGQ6OkluZGV4KS5nZXQoKTsgfQogICAgIEpTU3RyaW5nSXRlcmF0b3IqIGNsb25lKEpTR2xv
YmFsT2JqZWN0Kik7CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNs
b3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogcHJpdmF0ZToKICAg
ICBKU1N0cmluZ0l0ZXJhdG9yKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N5bWJvbFRhYmxlT2Jq
ZWN0LmNwcAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNTeW1ib2xUYWJsZU9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNiw3ICszNiw4
IEBAIG5hbWVzcGFjZSBKU0MgewogCiBjb25zdCBDbGFzc0luZm8gSlNTeW1ib2xUYWJsZU9iamVj
dDo6c19pbmZvID0geyAiU3ltYm9sVGFibGVPYmplY3QiLCAmQmFzZTo6c19pbmZvLCBudWxscHRy
LCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTU3ltYm9sVGFibGVPYmplY3QpIH07CiAK
LXZvaWQgSlNTeW1ib2xUYWJsZU9iamVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNT
eW1ib2xUYWJsZU9iamVjdDo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9y
JiB2aXNpdG9yKQogewogICAgIEpTU3ltYm9sVGFibGVPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nh
c3Q8SlNTeW1ib2xUYWJsZU9iamVjdCo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5I
RVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTQ0LDYgKzQ1LDggQEAgdm9pZCBKU1N5bWJv
bFRhYmxlT2JqZWN0Ojp2aXNpdENoaWxkcmVuKAogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmpl
Y3QtPm1fc3ltYm9sVGFibGUpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNTeW1ib2xU
YWJsZU9iamVjdCk7CisKIGJvb2wgSlNTeW1ib2xUYWJsZU9iamVjdDo6ZGVsZXRlUHJvcGVydHko
SlNDZWxsKiBjZWxsLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWUg
cHJvcGVydHlOYW1lLCBEZWxldGVQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgSlNTeW1ib2xU
YWJsZU9iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1N5bWJvbFRhYmxlT2JqZWN0Kj4oY2Vs
bCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N5bWJvbFRhYmxlT2Jq
ZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTeW1i
b2xUYWJsZU9iamVjdC5oCShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjAgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03MCw3
ICs3MCw3IEBAIHByb3RlY3RlZDoKICAgICAgICAgbV9zeW1ib2xUYWJsZS5zZXQodm0sIHRoaXMs
IHN5bWJvbFRhYmxlKTsKICAgICB9CiAgICAgCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJl
bihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAg
ICAgCiBwcml2YXRlOgogICAgIFdyaXRlQmFycmllcjxTeW1ib2xUYWJsZT4gbV9zeW1ib2xUYWJs
ZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTV2Vha09iamVjdFJlZi5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNXZWFrT2Jq
ZWN0UmVmLmNwcAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNXZWFrT2JqZWN0UmVmLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOS0yMDIxIEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM5LDcgKzM5LDggQEAg
dm9pZCBKU1dlYWtPYmplY3RSZWY6OmZpbmlzaENyZWF0aW9uKFZNJgogICAgIEJhc2U6OmZpbmlz
aENyZWF0aW9uKHZtKTsKIH0KIAotdm9pZCBKU1dlYWtPYmplY3RSZWY6OnZpc2l0Q2hpbGRyZW4o
SlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZp
c2l0b3I+Cit2b2lkIEpTV2Vha09iamVjdFJlZjo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBj
ZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8
SlNXZWFrT2JqZWN0UmVmKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0
aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNTEsNiArNTIsOCBAQCB2b2lkIEpTV2Vha09iamVjdFJl
Zjo6dmlzaXRDaGlsZHJlbihKU0NlCiAgICAgfQogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4o
SlNXZWFrT2JqZWN0UmVmKTsKKwogdm9pZCBKU1dlYWtPYmplY3RSZWY6OmZpbmFsaXplVW5jb25k
aXRpb25hbGx5KFZNJiB2bSkKIHsKICAgICBpZiAobV92YWx1ZSAmJiAhdm0uaGVhcC5pc01hcmtl
ZChtX3ZhbHVlLmdldCgpKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
V2Vha09iamVjdFJlZi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTV2Vha09iamVjdFJlZi5oCShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU1dlYWtPYmplY3RSZWYuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUsIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOS0yMDIxIEFwcGxlLCBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY1LDcg
KzY1LDcgQEAgcHVibGljOgogICAgIH0KIAogICAgIHZvaWQgZmluYWxpemVVbmNvbmRpdGlvbmFs
bHkoVk0mKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNp
dG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogcHJpdmF0ZToKICAgICBKU1dl
YWtPYmplY3RSZWYoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTV2l0aFNjb3BlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1dpdGhTY29wZS5jcHAJKHJldmlzaW9uIDI3MzEx
OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTV2l0aFNjb3BlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIw
MTYgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEy
LTIwMjEgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC00MSw3ICs0MSw4IEBAIEpTV2l0aFNjb3BlKiBKU1dpdGhTY29wZTo6
Y3JlYXRlKAogICAgIHJldHVybiB3aXRoU2NvcGU7CiB9CiAKLXZvaWQgSlNXaXRoU2NvcGU6OnZp
c2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRl
PHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTV2l0aFNjb3BlOjp2aXNpdENoaWxkcmVuSW1wbChK
U0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNXaXRoU2NvcGUqIHRoaXNP
YmplY3QgPSBqc0Nhc3Q8SlNXaXRoU2NvcGUqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNU
X0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC00OSw2ICs1MCw4IEBAIHZvaWQgSlNX
aXRoU2NvcGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiAKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlz
T2JqZWN0LT5tX29iamVjdCk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU1dpdGhTY29w
ZSk7CisKIFN0cnVjdHVyZSogSlNXaXRoU2NvcGU6OmNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG8pCiB7CiAgICAgcmV0dXJu
IFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvLCBUeXBlSW5mbyhXaXRo
U2NvcGVUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU1dpdGhTY29wZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTV2l0aFNjb3BlLmgJKHJldmlzaW9uIDI3MzExOSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTV2l0aFNjb3BlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDE2IEFwcGxlIElu
Yy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDIxIEFwcGxl
IEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtNDMsNyArNDMsNyBAQCBwdWJsaWM6CiAKICAgICBKU09iamVjdCogb2JqZWN0KCkgeyBy
ZXR1cm4gbV9vYmplY3QuZ2V0KCk7IH0KIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4o
SlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAg
ICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3Qq
LCBKU1ZhbHVlIHByb3RvKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNXcmFwcGVyT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU1dyYXBwZXJPYmplY3QuY3BwCShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1dyYXBwZXJPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDYgKzEsNiBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDIwMDYgTWFrcyBPcmxvdmlj
aAotICogIENvcHlyaWdodCAoQykgMjAwNiwgMjAwOSwgMjAxMiBBcHBsZSwgSW5jLgorICogIENv
cHlyaWdodCAoQykgMjAwNi0yMDIxIEFwcGxlLCBJbmMuCiAgKgogICogIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpA
QCAtMjksMTEgKzI5LDE0IEBAIG5hbWVzcGFjZSBKU0MgewogCiBTVEFUSUNfQVNTRVJUX0lTX1RS
SVZJQUxMWV9ERVNUUlVDVElCTEUoSlNXcmFwcGVyT2JqZWN0KTsKIAotdm9pZCBKU1dyYXBwZXJP
YmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikK
K3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTV3JhcHBlck9iamVjdDo6dmlzaXRD
aGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGF1dG8q
IHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNXcmFwcGVyT2JqZWN0Kj4oY2VsbCk7CiAgICAgQVNTRVJU
X0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwogICAgIEJhc2U6OnZpc2l0
Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJF
Tl9XSVRIX01PRElGSUVSKEpTX0VYUE9SVF9QUklWQVRFLCBKU1dyYXBwZXJPYmplY3QpOworCiB9
IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
V3JhcHBlck9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTV3JhcHBlck9iamVjdC5oCShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU1dyYXBwZXJPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2
ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA2IE1ha3MgT3Jsb3ZpY2gKLSAqICBD
b3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC02NCw3ICs2NCw3IEBAIHB1
YmxpYzoKIHByb3RlY3RlZDoKICAgICBleHBsaWNpdCBKU1dyYXBwZXJPYmplY3QoVk0mLCBTdHJ1
Y3R1cmUqKTsKIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOX1dJ
VEhfTU9ESUZJRVIoSlNfRVhQT1JUX1BSSVZBVEUpOwogfTsKIAogaW5saW5lIEpTV3JhcHBlck9i
amVjdDo6SlNXcmFwcGVyT2JqZWN0KFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9MYXp5Q2xhc3NTdHJ1Y3R1cmUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0xhenlDbGFzc1N0cnVj
dHVyZS5jcHAJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0xhenlDbGFzc1N0cnVjdHVyZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03MiwxMiArNzIs
MTYgQEAgdm9pZCBMYXp5Q2xhc3NTdHJ1Y3R1cmU6OkluaXRpYWxpemVyOjpzZQogICAgIGNsYXNz
U3RydWN0dXJlLm1fY29uc3RydWN0b3Iuc2V0KHZtLCBnbG9iYWwsIGNvbnN0cnVjdG9yKTsKIH0K
IAotdm9pZCBMYXp5Q2xhc3NTdHJ1Y3R1cmU6OnZpc2l0KFNsb3RWaXNpdG9yJiB2aXNpdG9yKQor
dGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgTGF6eUNsYXNzU3RydWN0dXJlOjp2aXNp
dChWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIG1fc3RydWN0dXJlLnZpc2l0KHZpc2l0b3IpOwog
ICAgIHZpc2l0b3IuYXBwZW5kKG1fY29uc3RydWN0b3IpOwogfQogCit0ZW1wbGF0ZSB2b2lkIExh
enlDbGFzc1N0cnVjdHVyZTo6dmlzaXQoQWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUg
dm9pZCBMYXp5Q2xhc3NTdHJ1Y3R1cmU6OnZpc2l0KFNsb3RWaXNpdG9yJik7CisKIHZvaWQgTGF6
eUNsYXNzU3RydWN0dXJlOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiB7CiAgICAgb3V0
LnByaW50KCI8c3RydWN0dXJlID0gIiwgbV9zdHJ1Y3R1cmUsICIsIGNvbnN0cnVjdG9yID0gIiwg
UmF3UG9pbnRlcihtX2NvbnN0cnVjdG9yLmdldCgpKSwgIj4iKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0xhenlDbGFzc1N0cnVjdHVyZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0xhenlDbGFzc1N0cnVjdHVyZS5oCShyZXZpc2lv
biAyNzMxMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9MYXp5Q2xhc3NTdHJ1
Y3R1cmUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0xMTcsNyArMTE3LDcgQEAgcHVibGljOgogICAgICAgICBy
ZXR1cm4gbV9jb25zdHJ1Y3Rvci5nZXQoKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCB2aXNpdChT
bG90VmlzaXRvciYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgdmlzaXQo
VmlzaXRvciYpOwogICAgIAogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9MYXp5UHJvcGVydHkuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9MYXp5UHJvcGVydHkuaAkocmV2
aXNpb24gMjczMTE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTGF6eVByb3Bl
cnR5LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDE2LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMDMsNyArMTAzLDcgQEAgcHVibGljOgogICAgIHZv
aWQgc2V0TWF5QmVOdWxsKFZNJiwgY29uc3QgT3duZXJUeXBlKiBvd25lciwgRWxlbWVudFR5cGUq
KTsKICAgICB2b2lkIHNldChWTSYsIGNvbnN0IE93bmVyVHlwZSogb3duZXIsIEVsZW1lbnRUeXBl
Kik7CiAgICAgCi0gICAgdm9pZCB2aXNpdChTbG90VmlzaXRvciYpOworICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFZpc2l0b3I+IHZvaWQgdmlzaXQoVmlzaXRvciYpOwogICAgIAogICAgIHZvaWQgZHVt
cChQcmludFN0cmVhbSYpIGNvbnN0OwogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvTGF6eVByb3BlcnR5SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0xhenlQcm9wZXJ0eUlubGluZXMuaAkocmV2aXNpb24gMjczMTE5
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTGF6eVByb3BlcnR5SW5saW5lcy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYt
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTY2LDcgKzY2LDggQEAgdm9pZCBMYXp5UHJvcGVydHk8T3duZXJUeXBl
LCBFbGVtZW50VHlwZQogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPd25lclR5cGUsIHR5cGVuYW1l
IEVsZW1lbnRUeXBlPgotdm9pZCBMYXp5UHJvcGVydHk8T3duZXJUeXBlLCBFbGVtZW50VHlwZT46
OnZpc2l0KFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4K
K3ZvaWQgTGF6eVByb3BlcnR5PE93bmVyVHlwZSwgRWxlbWVudFR5cGU+Ojp2aXNpdChWaXNpdG9y
JiB2aXNpdG9yKQogewogICAgIGlmIChtX3BvaW50ZXIgJiYgIShtX3BvaW50ZXIgJiBsYXp5VGFn
KSkKICAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZChiaXR3aXNlX2Nhc3Q8RWxlbWVu
dFR5cGUqPihtX3BvaW50ZXIpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L01vZHVsZVByb2dyYW1FeGVjdXRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9Nb2R1bGVQcm9ncmFtRXhlY3V0YWJsZS5jcHAJKHJldmlzaW9uIDI3
MzExOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01vZHVsZVByb2dyYW1FeGVj
dXRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDksIDIwMTAsIDIwMTMsIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTc5LDcgKzc5
LDggQEAgYXV0byBNb2R1bGVQcm9ncmFtRXhlY3V0YWJsZTo6ZW5zdXJlVGVtcAogICAgIHJldHVy
biBlbnN1cmVUZW1wbGF0ZU9iamVjdE1hcEltcGwobV90ZW1wbGF0ZU9iamVjdE1hcCk7CiB9CiAK
LXZvaWQgTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxs
LCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lk
IE1vZHVsZVByb2dyYW1FeGVjdXRhYmxlOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGws
IFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUqIHRoaXNP
YmplY3QgPSBqc0Nhc3Q8TW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUqPihjZWxsKTsKICAgICBBU1NF
UlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC05NCw0ICs5NSw2
IEBAIHZvaWQgTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGU6OnZpc2l0Q2hpbGQKICAgICB9CiB9CiAK
K0RFRklORV9WSVNJVF9DSElMRFJFTihNb2R1bGVQcm9ncmFtRXhlY3V0YWJsZSk7CisKIH0gLy8g
bmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTW9kdWxl
UHJvZ3JhbUV4ZWN1dGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9Nb2R1bGVQcm9ncmFtRXhlY3V0YWJsZS5oCShyZXZpc2lvbiAyNzMxMTkpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Nb2R1bGVQcm9ncmFtRXhlY3V0YWJsZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOS0y
MDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAw
OS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtNzcsNyArNzcsNyBAQCBwcml2YXRlOgogCiAgICAgTW9kdWxlUHJv
Z3JhbUV4ZWN1dGFibGUoSlNHbG9iYWxPYmplY3QqLCBjb25zdCBTb3VyY2VDb2RlJik7CiAKLSAg
ICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAg
REVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIFdyaXRlQmFycmllcjxVbmxpbmtlZE1vZHVs
ZVByb2dyYW1Db2RlQmxvY2s+IG1fdW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrOwogICAg
IFdyaXRlQmFycmllcjxTeW1ib2xUYWJsZT4gbV9tb2R1bGVFbnZpcm9ubWVudFN5bWJvbFRhYmxl
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAJKHJldmlz
aW9uIDI3MzExOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MS0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtNTU4LDYgKzU1OCw5IEBAIHZvaWQgT3B0aW9uczo6cmVjb21w
dXRlRGVwZW5kZW50T3B0aW9ucygKIAogICAgIGlmIChPcHRpb25zOjp1c2VQcml2YXRlU3RhdGlj
Q2xhc3NGaWVsZHMoKSkKICAgICAgICAgT3B0aW9uczo6dXNlUHJpdmF0ZUNsYXNzRmllbGRzKCkg
PSB0cnVlOworCisgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VWZXJpZnlHQygpKQorICAgICAgICBP
cHRpb25zOjp2ZXJpZnlHQygpID0gdHJ1ZTsKIH0KIAogaW5saW5lIHZvaWQqIE9wdGlvbnM6OmFk
ZHJlc3NPZk9wdGlvbihPcHRpb25zOjpJRCBpZCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL09wdGlvbnNMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMzY5
LDYgKzM2OSw4IEBAIEpTX0VYUE9SVF9QUklWQVRFIGJvb2wgY2FuVXNlSklUQ2FnZSgpOwogICAg
IHYoQm9vbCwgYWx3YXlzR2VuZXJhdGVQQ1RvQ29kZU9yaWdpbk1hcCwgZmFsc2UsIE5vcm1hbCwg
IlRoaXMgd2lsbCBtYWtlIHN1cmUgd2UgYWx3YXlzIGdlbmVyYXRlIGEgUENUb0NvZGVPcmlnaW5N
YXAgZm9yIEpJVGVkIGNvZGUuIikgXAogICAgIFwKICAgICB2KERvdWJsZSwgcmFuZG9tSW50ZWdy
aXR5QXVkaXRSYXRlLCAwLjA1LCBOb3JtYWwsICJQcm9iYWJpbGl0eSBvZiByYW5kb20gaW50ZWdy
aXR5IGF1ZGl0cyBbMC4wIC0gMS4wXSIpIFwKKyAgICB2KEJvb2wsIHZlcmlmeUdDLCBmYWxzZSwg
Tm9ybWFsLCBudWxscHRyKSBcCisgICAgdihCb29sLCB2ZXJib3NlVmVyaWZ5R0MsIGZhbHNlLCBO
b3JtYWwsIG51bGxwdHIpIFwKICAgICB2KEJvb2wsIHZlcmlmeUhlYXAsIGZhbHNlLCBOb3JtYWws
IG51bGxwdHIpIFwKICAgICB2KFVuc2lnbmVkLCBudW1iZXJPZkdDQ3ljbGVzVG9SZWNvcmRGb3JW
ZXJpZmljYXRpb24sIDMsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIFwKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb2dyYW1FeGVjdXRhYmxlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9ncmFtRXhlY3V0YWJsZS5jcHAJKHJl
dmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb2dyYW1F
eGVjdXRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDktMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDktMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTIwOCw3ICsyMDgsOCBAQCBhdXRvIFBy
b2dyYW1FeGVjdXRhYmxlOjplbnN1cmVUZW1wbGF0ZU9iCiAgICAgcmV0dXJuIGVuc3VyZVRlbXBs
YXRlT2JqZWN0TWFwSW1wbChtX3RlbXBsYXRlT2JqZWN0TWFwKTsKIH0KIAotdm9pZCBQcm9ncmFt
RXhlY3V0YWJsZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNp
dG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgUHJvZ3JhbUV4ZWN1dGFibGU6
OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAg
ICBQcm9ncmFtRXhlY3V0YWJsZSogdGhpc09iamVjdCA9IGpzQ2FzdDxQcm9ncmFtRXhlY3V0YWJs
ZSo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5m
bygpKTsKQEAgLTIyMiw0ICsyMjMsNiBAQCB2b2lkIFByb2dyYW1FeGVjdXRhYmxlOjp2aXNpdENo
aWxkcmVuKEpTCiAgICAgfQogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oUHJvZ3JhbUV4ZWN1
dGFibGUpOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1Byb2dyYW1FeGVjdXRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvUHJvZ3JhbUV4ZWN1dGFibGUuaAkocmV2aXNpb24gMjczMTE5KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvZ3JhbUV4ZWN1dGFibGUuaAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAx
OSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkt
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTgxLDcgKzgxLDcgQEAgcHJpdmF0ZToKIAogICAgIFByb2dyYW1FeGVj
dXRhYmxlKEpTR2xvYmFsT2JqZWN0KiwgY29uc3QgU291cmNlQ29kZSYpOwogCi0gICAgc3RhdGlj
IHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVf
VklTSVRfQ0hJTERSRU47CiAKICAgICBXcml0ZUJhcnJpZXI8VW5saW5rZWRQcm9ncmFtQ29kZUJs
b2NrPiBtX3VubGlua2VkUHJvZ3JhbUNvZGVCbG9jazsKICAgICBXcml0ZUJhcnJpZXI8RXhlY3V0
YWJsZVRvQ29kZUJsb2NrRWRnZT4gbV9wcm9ncmFtQ29kZUJsb2NrOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlNYXBIYXNoVGFibGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eU1hcEhhc2hUYWJsZS5oCShy
ZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0
eU1hcEhhc2hUYWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqICBD
b3B5cmlnaHQgKEMpIDIwMDQtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiAgQ29weXJpZ2h0IChDKSAyMDA0LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTEzMyw3ICsxMzMsNyBAQCBwdWJsaWM6CiAKICAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNEZXN0cnVjdGlvbiA9IHRydWU7CiAgICAgc3Rh
dGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVu
KEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAog
ICAgIERFQ0xBUkVfRVhQT1JUX0lORk87CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1Byb3BlcnR5VGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1Byb3BlcnR5VGFibGUuY3BwCShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eVRhYmxlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0xMTgsNyArMTE4LDggQEAgdm9pZCBQcm9wZXJ0eVRhYmxlOjpmaW5pc2hDcmVhdGlv
bihWTSYgdgogICAgIHZtLmhlYXAucmVwb3J0RXh0cmFNZW1vcnlBbGxvY2F0ZWQoZGF0YVNpemUo
KSk7CiB9CiAKLXZvaWQgUHJvcGVydHlUYWJsZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGws
IFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQg
UHJvcGVydHlUYWJsZTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2
aXNpdG9yKQogewogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8UHJvcGVydHlUYWJsZSo+
KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygp
KTsKQEAgLTEyNiw2ICsxMjcsOCBAQCB2b2lkIFByb3BlcnR5VGFibGU6OnZpc2l0Q2hpbGRyZW4o
SlNDZWxsCiAgICAgdmlzaXRvci5yZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQodGhpc09iamVjdC0+
ZGF0YVNpemUoKSk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihQcm9wZXJ0eVRhYmxlKTsK
Kwogdm9pZCBQcm9wZXJ0eVRhYmxlOjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKIHsKICAgICBzdGF0
aWNfY2FzdDxQcm9wZXJ0eVRhYmxlKj4oY2VsbCktPlByb3BlcnR5VGFibGU6On5Qcm9wZXJ0eVRh
YmxlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm94eU9iamVjdC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJveHlPYmpl
Y3QuY3BwCShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9Qcm94eU9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDE2LTIwMjAgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMTc5LDcgKzExNzksOCBAQCBi
b29sIFByb3h5T2JqZWN0Ojppc1Jldm9rZWQoKSBjb25zdAogICAgIHJldHVybiBoYW5kbGVyKCku
aXNOdWxsKCk7CiB9CiAKLXZvaWQgUHJveHlPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBj
ZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2
b2lkIFByb3h5T2JqZWN0Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3Im
IHZpc2l0b3IpCiB7CiAgICAgUHJveHlPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8UHJveHlP
YmplY3QqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3Qs
IGluZm8oKSk7CkBAIC0xMTg5LDQgKzExOTAsNiBAQCB2b2lkIFByb3h5T2JqZWN0Ojp2aXNpdENo
aWxkcmVuKEpTQ2VsbCogCiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9oYW5kbGVy
KTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKFByb3h5T2JqZWN0KTsKKwogfSAvLyBuYW1l
c3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm94eU9iamVj
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3h5T2Jq
ZWN0LmgJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1Byb3h5T2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtOTEsNyArOTEsNyBAQCBwcml2YXRlOgogICAg
IHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVj
dCosIFByb3BlcnR5TmFtZUFycmF5JiwgRG9udEVudW1Qcm9wZXJ0aWVzTW9kZSk7CiAgICAgc3Rh
dGljIGJvb2wgc2V0UHJvdG90eXBlKEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVl
IHByb3RvdHlwZSwgYm9vbCBzaG91bGRUaHJvd0lmQ2FudFNldCk7CiAgICAgc3RhdGljIEpTVmFs
dWUgZ2V0UHJvdG90eXBlKEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqKTsKLSAgICBzdGF0aWMg
dm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9W
SVNJVF9DSElMRFJFTjsKIAogICAgIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90Q29tbW9uKEpTR2xv
YmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKICAgICBib29sIHBlcmZv
cm1JbnRlcm5hbE1ldGhvZEdldE93blByb3BlcnR5KEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlO
YW1lLCBQcm9wZXJ0eVNsb3QmKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1Byb3h5UmV2b2tlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9Qcm94eVJldm9rZS5jcHAJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1Byb3h5UmV2b2tlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwgUmlnaHRz
IFJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02OSw3ICs2OSw4
IEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihwZXJmb3JtUHJveHlSZXYKICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCi12b2lkIFByb3h5UmV2b2tlOjp2
aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0
ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBQcm94eVJldm9rZTo6dmlzaXRDaGlsZHJlbkltcGwo
SlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFByb3h5UmV2b2tlKiB0aGlz
T2JqZWN0ID0ganNDYXN0PFByb3h5UmV2b2tlKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVD
VF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNzgsNCArNzksNiBAQCB2b2lkIFBy
b3h5UmV2b2tlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogCiAgICAgdmlzaXRvci5hcHBlbmQodGhp
c09iamVjdC0+bV9wcm94eSk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihQcm94eVJldm9r
ZSk7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvUHJveHlSZXZva2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9Qcm94eVJldm9rZS5oCShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9Qcm94eVJldm9rZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE5IEFwcGxlIEluYy4gQWxsIFJpZ2h0
cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIxIEFwcGxlIEluYy4gQWxsIFJp
Z2h0cyBSZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTIsNyAr
NTIsNyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIFBy
b3h5T2JqZWN0Kik7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90
VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAgICAgSlNWYWx1ZSBwcm94
eSgpIHsgcmV0dXJuIG1fcHJveHkuZ2V0KCk7IH0KICAgICB2b2lkIHNldFByb3h5VG9OdWxsKFZN
JiB2bSkgeyByZXR1cm4gbV9wcm94eS5zZXQodm0sIHRoaXMsIGpzTnVsbCgpKTsgfQogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBDYWNoZWRSZXN1bHQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENhY2hlZFJl
c3VsdC5jcHAJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1JlZ0V4cENhY2hlZFJlc3VsdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzEsNyArMzEs
OCBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotdm9pZCBSZWdFeHBDYWNoZWRSZXN1bHQ6OnZpc2l0
QWdncmVnYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRv
cj4KK3ZvaWQgUmVnRXhwQ2FjaGVkUmVzdWx0Ojp2aXNpdEFnZ3JlZ2F0ZUltcGwoVmlzaXRvciYg
dmlzaXRvcikKIHsKICAgICB2aXNpdG9yLmFwcGVuZChtX2xhc3RJbnB1dCk7CiAgICAgdmlzaXRv
ci5hcHBlbmQobV9sYXN0UmVnRXhwKTsKQEAgLTQzLDYgKzQ0LDggQEAgdm9pZCBSZWdFeHBDYWNo
ZWRSZXN1bHQ6OnZpc2l0QWdncmVnYXRlKAogICAgIH0KIH0KIAorREVGSU5FX1ZJU0lUX0FHR1JF
R0FURShSZWdFeHBDYWNoZWRSZXN1bHQpOworCiBKU0FycmF5KiBSZWdFeHBDYWNoZWRSZXN1bHQ6
Omxhc3RSZXN1bHQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNPYmplY3QqIG93bmVy
KQogewogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENhY2hlZFJlc3VsdC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENhY2hlZFJlc3VsdC5oCShyZXZpc2lv
biAyNzMxMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBDYWNoZWRS
ZXN1bHQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTIsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEyLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02NSw3ICs2NSw3IEBAIHB1YmxpYzoKICAgICAg
ICAgcmV0dXJuIG1fcmVpZmllZCA/IG1fcmVpZmllZElucHV0LmdldCgpIDogbV9sYXN0SW5wdXQu
Z2V0KCk7CiAgICAgfQogCi0gICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYpOwor
ICAgIERFQ0xBUkVfVklTSVRfQUdHUkVHQVRFOwogCiAgICAgLy8gbV9sYXN0UmVnRXhwIHdvdWxk
IGJlIG51bGxwdHIgd2hlbiBSZWdFeHBDYWNoZWRSZXN1bHQgaXMgbm90IHJlaWZpZWQuCiAgICAg
Ly8gSWYgd2UgZmluZCBtX2xhc3RSZWdFeHAgaXMgbnVsbHB0ciwgaXQgbWVhbnMgdGhpcyBzaG91
bGQgaG9sZCB0aGUgZW1wdHkgUmVnRXhwLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvUmVnRXhwR2xvYmFsRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvUmVnRXhwR2xvYmFsRGF0YS5jcHAJKHJldmlzaW9uIDI3MzExOSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cEdsb2JhbERhdGEuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBs
ZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMSBB
cHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTMwLDExICszMCwxNCBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotdm9pZCBSZWdF
eHBHbG9iYWxEYXRhOjp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBs
YXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFJlZ0V4cEdsb2JhbERhdGE6OnZpc2l0QWdncmVn
YXRlSW1wbChWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIG1fY2FjaGVkUmVzdWx0LnZpc2l0QWdn
cmVnYXRlKHZpc2l0b3IpOwogfQogCitERUZJTkVfVklTSVRfQUdHUkVHQVRFKFJlZ0V4cEdsb2Jh
bERhdGEpOworCiBKU1ZhbHVlIFJlZ0V4cEdsb2JhbERhdGE6OmdldEJhY2tyZWYoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgdW5zaWduZWQgaSkKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxP
YmplY3QtPnZtKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBH
bG9iYWxEYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
UmVnRXhwR2xvYmFsRGF0YS5oCShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9SZWdFeHBHbG9iYWxEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBS
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOS0yMDIxIEFwcGxlIEluYy4gQWxsIFJpZ2h0
cyBSZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDEsNyArNDEs
NyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRJbnB1dChKU0dsb2JhbE9iamVjdCosIEpTU3RyaW5n
Kik7CiAgICAgSlNTdHJpbmcqIGlucHV0KCkgeyByZXR1cm4gbV9jYWNoZWRSZXN1bHQuaW5wdXQo
KTsgfQogCi0gICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYpOworICAgIERFQ0xB
UkVfVklTSVRfQUdHUkVHQVRFOwogCiAgICAgSlNWYWx1ZSBnZXRCYWNrcmVmKEpTR2xvYmFsT2Jq
ZWN0KiwgdW5zaWduZWQpOwogICAgIEpTVmFsdWUgZ2V0TGFzdFBhcmVuKEpTR2xvYmFsT2JqZWN0
Kik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBPYmplY3QuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE9iamVj
dC5jcHAJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1JlZ0V4cE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICog
IENvcHlyaWdodCAoQykgMTk5OS0yMDAwIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCi0g
KiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMTkgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVk
LgorICogIENvcHlyaWdodCAoQykgMjAwMy0yMDIxIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNl
cnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKQEAgLTQ2LDcgKzQ2LDggQEAgdm9pZCBSZWdFeHBP
YmplY3Q6OmZpbmlzaENyZWF0aW9uKFZNJiB2bQogICAgIEFTU0VSVCh0eXBlKCkgPT0gUmVnRXhw
T2JqZWN0VHlwZSk7CiB9CiAKLXZvaWQgUmVnRXhwT2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2Vs
bCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
Pgordm9pZCBSZWdFeHBPYmplY3Q6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlz
aXRvciYgdmlzaXRvcikKIHsKICAgICBSZWdFeHBPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8
UmVnRXhwT2JqZWN0Kj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlz
T2JqZWN0LCBpbmZvKCkpOwpAQCAtNTUsNiArNTYsOCBAQCB2b2lkIFJlZ0V4cE9iamVjdDo6dmlz
aXRDaGlsZHJlbihKU0NlbGwqCiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9sYXN0
SW5kZXgpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oUmVnRXhwT2JqZWN0KTsKKwogYm9v
bCBSZWdFeHBPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdChKU09iamVjdCogb2JqZWN0LCBKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9w
ZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0LmgJKHJldmlz
aW9uIDI3MzExOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE9iamVj
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMp
IDE5OTktMjAwMCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQotICogIENvcHlyaWdodCAo
QykgMjAwMy0yMDE5IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqICBDb3B5cmln
aHQgKEMpIDIwMDMtMjAyMSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICog
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdl
bmVyYWwgUHVibGljCkBAIC0xMzMsNyArMTMzLDcgQEAgcHJpdmF0ZToKICAgICBKU19FWFBPUlRf
UFJJVkFURSBSZWdFeHBPYmplY3QoVk0mLCBTdHJ1Y3R1cmUqLCBSZWdFeHAqKTsKICAgICBKU19F
WFBPUlRfUFJJVkFURSB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7CiAKLSAgICBzdGF0aWMgdm9p
ZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJ
VF9DSElMRFJFTjsKIAogICAgIGJvb2wgbGFzdEluZGV4SXNXcml0YWJsZSgpIGNvbnN0CiAgICAg
ewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2FtcGxpbmdQ
cm9maWxlci5jcHAJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1NhbXBsaW5nUHJvZmlsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NTIsMTMgKzY1
MiwxNyBAQCB2b2lkIFNhbXBsaW5nUHJvZmlsZXI6OnByb2Nlc3NVbnZlcmlmaWVkCiAgICAgbV91
bnByb2Nlc3NlZFN0YWNrVHJhY2VzLmNsZWFyKCk7CiB9CiAKLXZvaWQgU2FtcGxpbmdQcm9maWxl
cjo6dmlzaXQoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
Pgordm9pZCBTYW1wbGluZ1Byb2ZpbGVyOjp2aXNpdChWaXNpdG9yJiB2aXNpdG9yKQogewogICAg
IFJFTEVBU0VfQVNTRVJUKG1fbG9jay5pc0xvY2tlZCgpKTsKICAgICBmb3IgKEpTQ2VsbCogY2Vs
bCA6IG1fbGl2ZUNlbGxQb2ludGVycykKICAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJl
ZChjZWxsKTsKIH0KIAordGVtcGxhdGUgdm9pZCBTYW1wbGluZ1Byb2ZpbGVyOjp2aXNpdChBYnN0
cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIFNhbXBsaW5nUHJvZmlsZXI6OnZpc2l0
KFNsb3RWaXNpdG9yJik7CisKIHZvaWQgU2FtcGxpbmdQcm9maWxlcjo6c2h1dGRvd24oKQogewog
ICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fbG9jayk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TYW1wbGluZ1Byb2ZpbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5oCShyZXZpc2lvbiAyNzMxMTkpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TYW1wbGluZ1Byb2ZpbGVyLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMTcxLDcgKzE3MSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIG5vdGljZUpTTG9ja0Fj
cXVpc2l0aW9uKCk7CiAgICAgdm9pZCBub3RpY2VWTUVudHJ5KCk7CiAgICAgdm9pZCBzaHV0ZG93
bigpOwotICAgIHZvaWQgdmlzaXQoU2xvdFZpc2l0b3ImKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBWaXNpdG9yPiB2b2lkIHZpc2l0KFZpc2l0b3ImKTsKICAgICBMb2NrJiBnZXRMb2NrKCkgeyBy
ZXR1cm4gbV9sb2NrOyB9CiAgICAgdm9pZCBzZXRUaW1pbmdJbnRlcnZhbChTZWNvbmRzIGludGVy
dmFsKSB7IG1fdGltaW5nSW50ZXJ2YWwgPSBpbnRlcnZhbDsgfQogICAgIEpTX0VYUE9SVF9QUklW
QVRFIHZvaWQgc3RhcnQoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Nj
b3BlZEFyZ3VtZW50cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU2NvcGVkQXJndW1lbnRzLmNwcAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVkQXJndW1lbnRzLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxOCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTk4LDcgKzk4LDggQEAgU2NvcGVkQXJndW1lbnRzKiBTY29wZWRBcmd1bWVudHM6OmNyZWF0
ZQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQgU2NvcGVkQXJndW1lbnRzOjp2aXNpdENo
aWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBl
bmFtZSBWaXNpdG9yPgordm9pZCBTY29wZWRBcmd1bWVudHM6OnZpc2l0Q2hpbGRyZW5JbXBsKEpT
Q2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBTY29wZWRBcmd1bWVudHMqIHRo
aXNPYmplY3QgPSBzdGF0aWNfY2FzdDxTY29wZWRBcmd1bWVudHMqPihjZWxsKTsKICAgICBBU1NF
UlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC0xMTUsNiArMTE2
LDggQEAgdm9pZCBTY29wZWRBcmd1bWVudHM6OnZpc2l0Q2hpbGRyZW4oSlNDZQogICAgIH0KIH0K
IAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKFNjb3BlZEFyZ3VtZW50cyk7CisKIFN0cnVjdHVyZSog
U2NvcGVkQXJndW1lbnRzOjpjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKIHsKICAgICByZXR1cm4gU3RydWN0dXJl
OjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhTY29wZWRBcmd1
bWVudHNUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TY29wZWRBcmd1bWVudHMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29wZWRBcmd1bWVudHMuaAkocmV2aXNpb24gMjczMTE5
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVkQXJndW1lbnRzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIw
MTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1
LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC02Myw5ICs2Myw5IEBAIHB1YmxpYzoKICAgICAKICAgICAvLyBDcmVh
dGVzIGFuIGFyZ3VtZW50cyBvYmplY3QgYnkgY29weWluZyB0aGUgYXJndW1lbnRzIGZyb20gYSB3
ZWxsLWRlZmluZWQgc3RhY2sgbG9jYXRpb24uCiAgICAgc3RhdGljIFNjb3BlZEFyZ3VtZW50cyog
Y3JlYXRlQnlDb3B5aW5nRnJvbShWTSYsIFN0cnVjdHVyZSosIFJlZ2lzdGVyKiBhcmd1bWVudHNT
dGFydCwgdW5zaWduZWQgdG90YWxMZW5ndGgsIEpTRnVuY3Rpb24qIGNhbGxlZSwgU2NvcGVkQXJn
dW1lbnRzVGFibGUqLCBKU0xleGljYWxFbnZpcm9ubWVudCopOwotICAgIAotICAgIHN0YXRpYyB2
b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKLSAgICAKKworICAgIERF
Q0xBUkVfVklTSVRfQ0hJTERSRU47CisKICAgICB1aW50MzJfdCBpbnRlcm5hbExlbmd0aCgpIGNv
bnN0CiAgICAgewogICAgICAgICByZXR1cm4gbV90b3RhbExlbmd0aDsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1NpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TaW1wbGVUeXBlZEFycmF5
Q29udHJvbGxlci5jcHAJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1NpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC02Miw3ICs2Miw3IEBAIGJvb2wgU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXI6OmlzQXRv
bWkKICAgICByZXR1cm4gbV9hbGxvd0F0b21pY3NXYWl0OwogfQogCi1ib29sIFNpbXBsZVR5cGVk
QXJyYXlDb250cm9sbGVyOjpKU0FycmF5QnVmZmVyT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1
ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgSlNDOjpTbG90
VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikKK2Jvb2wgU2ltcGxlVHlwZWRB
cnJheUNvbnRyb2xsZXI6OkpTQXJyYXlCdWZmZXJPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVl
Um9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBKU0M6OkFic3Ry
YWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCiB7CiAgICAgaWYg
KFVOTElLRUxZKHJlYXNvbikpCiAgICAgICAgICpyZWFzb24gPSAiSlNBcnJheUJ1ZmZlciBpcyBv
cGFxdWUgcm9vdCI7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TaW1wbGVU
eXBlZEFycmF5Q29udHJvbGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1NpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyLmgJKHJldmlzaW9uIDI3MzExOSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NpbXBsZVR5cGVkQXJyYXlDb250cm9s
bGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtNTgsNyArNTgsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAg
IGNsYXNzIEpTQXJyYXlCdWZmZXJPd25lciBmaW5hbCA6IHB1YmxpYyBXZWFrSGFuZGxlT3duZXIg
ewogICAgIHB1YmxpYzoKLSAgICAgICAgYm9vbCBpc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhK
U0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0LCBTbG90VmlzaXRvciYsIGNv
bnN0IGNoYXIqKiByZWFzb24pIGZpbmFsOworICAgICAgICBib29sIGlzUmVhY2hhYmxlRnJvbU9w
YXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIEFic3Ry
YWN0U2xvdFZpc2l0b3ImLCBjb25zdCBjaGFyKiogcmVhc29uKSBmaW5hbDsKICAgICAgICAgdm9p
ZCBmaW5hbGl6ZShKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0KSBmaW5h
bDsKICAgICB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TbWFsbFN0
cmluZ3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Nt
YWxsU3RyaW5ncy5jcHAJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1NtYWxsU3RyaW5ncy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDEwIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBS
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDIxIEFwcGxlIEluYy4gQWxsIFJpZ2h0
cyBSZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjYsNyArNjYs
OCBAQCB2b2lkIFNtYWxsU3RyaW5nczo6aW5pdGlhbGl6ZUNvbW1vblN0cmluCiAgICAgc2V0SXNJ
bml0aWFsaXplZCh0cnVlKTsKIH0KIAotdm9pZCBTbWFsbFN0cmluZ3M6OnZpc2l0U3Ryb25nUmVm
ZXJlbmNlcyhTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+
Cit2b2lkIFNtYWxsU3RyaW5nczo6dmlzaXRTdHJvbmdSZWZlcmVuY2VzKFZpc2l0b3ImIHZpc2l0
b3IpCiB7CiAgICAgbV9uZWVkc1RvQmVWaXNpdGVkID0gZmFsc2U7CiAgICAgdmlzaXRvci5hcHBl
bmRVbmJhcnJpZXJlZChtX2VtcHR5U3RyaW5nKTsKQEAgLTg0LDYgKzg1LDkgQEAgdm9pZCBTbWFs
bFN0cmluZ3M6OnZpc2l0U3Ryb25nUmVmZXJlbmNlcwogICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJy
aWVyZWQobV9va1N0cmluZyk7CiB9CiAKK3RlbXBsYXRlIHZvaWQgU21hbGxTdHJpbmdzOjp2aXNp
dFN0cm9uZ1JlZmVyZW5jZXMoQWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBT
bWFsbFN0cmluZ3M6OnZpc2l0U3Ryb25nUmVmZXJlbmNlcyhTbG90VmlzaXRvciYpOworCiBTbWFs
bFN0cmluZ3M6On5TbWFsbFN0cmluZ3MoKQogewogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvU21hbGxTdHJpbmdzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU21hbGxTdHJpbmdzLmgJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NtYWxsU3RyaW5ncy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOC0yMDE5IEFwcGxlIEluYy4g
QWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDIxIEFwcGxlIElu
Yy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtNTEsNyArNTEsNiBAQCBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgVk07CiBjbGFzcyBKU1N0
cmluZzsKLWNsYXNzIFNsb3RWaXNpdG9yOwogCiBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG1h
eFNpbmdsZUNoYXJhY3RlclN0cmluZyA9IDB4RkY7CiAKQEAgLTc4LDcgKzc3LDcgQEAgcHVibGlj
OgogICAgIEpTU3RyaW5nKiogc2luZ2xlQ2hhcmFjdGVyU3RyaW5ncygpIHsgcmV0dXJuICZtX3Np
bmdsZUNoYXJhY3RlclN0cmluZ3NbMF07IH0KIAogICAgIHZvaWQgaW5pdGlhbGl6ZUNvbW1vblN0
cmluZ3MoVk0mKTsKLSAgICB2b2lkIHZpc2l0U3Ryb25nUmVmZXJlbmNlcyhTbG90VmlzaXRvciYp
OworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgdmlzaXRTdHJvbmdSZWZlcmVu
Y2VzKFZpc2l0b3ImKTsKIAogI2RlZmluZSBKU0NfQ09NTU9OX1NUUklOR1NfQUNDRVNTT1JfREVG
SU5JVElPTihuYW1lKSBcCiAgICAgSlNTdHJpbmcqIG5hbWUjI1N0cmluZygpIGNvbnN0ICAgICAg
ICAgICAgICAgICAgIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NwYXJz
ZUFycmF5VmFsdWVNYXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1NwYXJzZUFycmF5VmFsdWVNYXAuY3BwCShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TcGFyc2VBcnJheVZhbHVlTWFwLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxNyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTIxMCw3ICsyMTAsOCBAQCBKU1ZhbHVlIFNwYXJzZUFycmF5RW50cnk6Omdl
dE5vblNwYXJzZU1vCiAgICAgcmV0dXJuIEJhc2U6OmdldCgpOwogfQogCi12b2lkIFNwYXJzZUFy
cmF5VmFsdWVNYXA6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlz
aXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFNwYXJzZUFycmF5VmFsdWVN
YXA6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsK
ICAgICBTcGFyc2VBcnJheVZhbHVlTWFwKiB0aGlzT2JqZWN0ID0ganNDYXN0PFNwYXJzZUFycmF5
VmFsdWVNYXAqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmpl
Y3QsIGluZm8oKSk7CkBAIC0yMjMsNSArMjI0LDcgQEAgdm9pZCBTcGFyc2VBcnJheVZhbHVlTWFw
Ojp2aXNpdENoaWxkcmVuKAogICAgIHZpc2l0b3IucmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKHRo
aXNPYmplY3QtPm1fcmVwb3J0ZWRDYXBhY2l0eSAqIHNpemVvZihNYXA6OktleVZhbHVlUGFpclR5
cGUpKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKFNwYXJzZUFycmF5VmFsdWVNYXApOwor
CiB9IC8vIG5hbWVzcGFjZSBKU0MKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU3BhcnNlQXJyYXlWYWx1ZU1hcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1NwYXJzZUFycmF5VmFsdWVNYXAuaAkocmV2aXNpb24gMjczMTE5KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3BhcnNlQXJyYXlWYWx1ZU1hcC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMS0yMDE5
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMS0y
MDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMTE1LDcgKzExNSw3IEBAIHB1YmxpYzoKICAgICAKICAgICBzdGF0aWMg
U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUg
cHJvdG90eXBlKTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xv
dFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgYm9vbCBzcGFy
c2VNb2RlKCkKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdGFj
a0ZyYW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
dGFja0ZyYW1lLmNwcAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU3RhY2tGcmFtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xNDEsMTMgKzE0MSw1
IEBAIFN0cmluZyBTdGFja0ZyYW1lOjp0b1N0cmluZyhWTSYgdm0pIGNvbnMKICAgICByZXR1cm4g
dHJhY2VCdWlsZC50b1N0cmluZygpLmltcGwoKTsKIH0KIAotdm9pZCBTdGFja0ZyYW1lOjp2aXNp
dENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQotewotICAgIGlmIChtX2NhbGxlZSkKLSAg
ICAgICAgdmlzaXRvci5hcHBlbmQobV9jYWxsZWUpOwotICAgIGlmIChtX2NvZGVCbG9jaykKLSAg
ICAgICAgdmlzaXRvci5hcHBlbmQobV9jb2RlQmxvY2spOwotfQotCiB9IC8vIG5hbWVzcGFjZSBK
U0MKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RhY2tGcmFtZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0YWNrRnJhbWUuaAko
cmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RhY2tG
cmFtZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYsNiArMjYsNyBAQAogI3ByYWdtYSBvbmNlCiAK
ICNpbmNsdWRlICJIZWFwLmgiCisjaW5jbHVkZSAiU2xvdFZpc2l0b3JNYWNyb3MuaCIKICNpbmNs
dWRlICJWTS5oIgogI2luY2x1ZGUgIldhc21JbmRleE9yTmFtZS5oIgogI2luY2x1ZGUgIldyaXRl
QmFycmllci5oIgpAQCAtMzUsNyArMzYsNiBAQCBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgQ29k
ZUJsb2NrOwogY2xhc3MgSlNPYmplY3Q7Ci1jbGFzcyBTbG90VmlzaXRvcjsKIAogY2xhc3MgU3Rh
Y2tGcmFtZSB7CiBwdWJsaWM6CkBAIC01Nyw4ICs1NywxNiBAQCBwdWJsaWM6CiAgICAgICAgIEFT
U0VSVChoYXNCeXRlY29kZUluZGV4KCkpOwogICAgICAgICByZXR1cm4gbV9ieXRlY29kZUluZGV4
OwogICAgIH0KLSAgICAKLSAgICB2b2lkIHZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKKwor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+CisgICAgdm9pZCB2aXNpdENoaWxkcmVuKFZp
c2l0b3ImIHZpc2l0b3IpCisgICAgeworICAgICAgICBpZiAobV9jYWxsZWUpCisgICAgICAgICAg
ICB2aXNpdG9yLmFwcGVuZChtX2NhbGxlZSk7CisgICAgICAgIGlmIChtX2NvZGVCbG9jaykKKyAg
ICAgICAgICAgIHZpc2l0b3IuYXBwZW5kKG1fY29kZUJsb2NrKTsKKyAgICB9CisKICAgICBib29s
IGlzTWFya2VkKFZNJiB2bSkgY29uc3QgeyByZXR1cm4gKCFtX2NhbGxlZSB8fCB2bS5oZWFwLmlz
TWFya2VkKG1fY2FsbGVlLmdldCgpKSkgJiYgKCFtX2NvZGVCbG9jayB8fCB2bS5oZWFwLmlzTWFy
a2VkKG1fY29kZUJsb2NrLmdldCgpKSk7IH0KIAogcHJpdmF0ZToKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAkocmV2aXNpb24gMjczMTE5KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxOSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAyMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQWxleGV5
IFNodmF5a2EgPHNodmFpa2FsZXNoQGdtYWlsLmNvbT4uCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0x
MjY4LDcgKzEyNjgsOCBAQCB2b2lkIFN0cnVjdHVyZTo6ZGlkVHJhbnNpdGlvbkZyb21UaGlzU3Ry
CiAgICAgICAgIG1fdHJhbnNpdGlvbldhdGNocG9pbnRTZXQuZmlyZUFsbCh2bSgpLCBTdHJ1Y3R1
cmVGaXJlRGV0YWlsKHRoaXMpKTsKIH0KIAotdm9pZCBTdHJ1Y3R1cmU6OnZpc2l0Q2hpbGRyZW4o
SlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZp
c2l0b3I+Cit2b2lkIFN0cnVjdHVyZTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBW
aXNpdG9yJiB2aXNpdG9yKQogewogICAgIFN0cnVjdHVyZSogdGhpc09iamVjdCA9IGpzQ2FzdDxT
dHJ1Y3R1cmUqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmpl
Y3QsIGluZm8oKSk7CkBAIC0xMjkwLDMyICsxMjkxLDM4IEBAIHZvaWQgU3RydWN0dXJlOjp2aXNp
dENoaWxkcmVuKEpTQ2VsbCogY2UKICAgICAgICAgLy8gTk9URTogVGhpcyBjYW4gaW50ZXJsZWF2
ZSBpbiBwaW4oKSwgaW4gd2hpY2ggY2FzZSBpdCBtYXkgc2VlIGEgbnVsbCBwcm9wZXJ0eSB0YWJs
ZS4KICAgICAgICAgLy8gVGhhdCdzIGZpbmUsIGJlY2F1c2UgdGhlbiB0aGUgYmFycmllciB3aWxs
IGZpcmUgYW5kIHdlIHdpbGwgc2NhbiB0aGlzIGFnYWluLgogICAgICAgICB2aXNpdG9yLmFwcGVu
ZCh0aGlzT2JqZWN0LT5tX3Byb3BlcnR5VGFibGVVbnNhZmUpOwotICAgIH0gZWxzZSBpZiAodmlz
aXRvci5pc0FuYWx5emluZ0hlYXAoKSkKKyAgICB9IGVsc2UgaWYgKHZpc2l0b3Iudm0oKS5pc0Fu
YWx5emluZ0hlYXAoKSkKICAgICAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9wcm9w
ZXJ0eVRhYmxlVW5zYWZlKTsKICAgICBlbHNlIGlmICh0aGlzT2JqZWN0LT5tX3Byb3BlcnR5VGFi
bGVVbnNhZmUpCiAgICAgICAgIHRoaXNPYmplY3QtPm1fcHJvcGVydHlUYWJsZVVuc2FmZS5jbGVh
cigpOwogfQogCi1ib29sIFN0cnVjdHVyZTo6aXNDaGVhcER1cmluZ0dDKFZNJiB2bSkKK0RFRklO
RV9WSVNJVF9DSElMRFJFTihTdHJ1Y3R1cmUpOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
PgorQUxXQVlTX0lOTElORSBib29sIFN0cnVjdHVyZTo6aXNDaGVhcER1cmluZ0dDKFZpc2l0b3Im
IHZpc2l0b3IpCiB7CiAgICAgLy8gRklYTUU6IFdlIGNvdWxkIG1ha2UgdGhpcyBldmVuIHNhZmVy
IGJ5IHJldHVybmluZyBmYWxzZSBpZiB0aGlzIHN0cnVjdHVyZSdzIHByb3BlcnR5IHRhYmxlCiAg
ICAgLy8gaGFzIGFueSBsYXJnZSBwcm9wZXJ0eSBuYW1lcy4KICAgICAvLyBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU3MzM0CiAgICAgCi0gICAgcmV0dXJuICghbV9n
bG9iYWxPYmplY3QgfHwgdm0uaGVhcC5pc01hcmtlZChtX2dsb2JhbE9iamVjdC5nZXQoKSkpCi0g
ICAgICAgICYmIChoYXNQb2x5UHJvdG8oKSB8fCAhc3RvcmVkUHJvdG90eXBlT2JqZWN0KCkgfHwg
dm0uaGVhcC5pc01hcmtlZChzdG9yZWRQcm90b3R5cGVPYmplY3QoKSkpOworICAgIHJldHVybiAo
IW1fZ2xvYmFsT2JqZWN0IHx8IHZpc2l0b3IuaXNNYXJrZWQobV9nbG9iYWxPYmplY3QuZ2V0KCkp
KQorICAgICAgICAmJiAoaGFzUG9seVByb3RvKCkgfHwgIXN0b3JlZFByb3RvdHlwZU9iamVjdCgp
IHx8IHZpc2l0b3IuaXNNYXJrZWQoc3RvcmVkUHJvdG90eXBlT2JqZWN0KCkpKTsKIH0KIAotYm9v
bCBTdHJ1Y3R1cmU6Om1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8
dHlwZW5hbWUgVmlzaXRvcj4KK2Jvb2wgU3RydWN0dXJlOjptYXJrSWZDaGVhcChWaXNpdG9yJiB2
aXNpdG9yKQogewotICAgIFZNJiB2bSA9IHZpc2l0b3Iudm0oKTsKLSAgICBpZiAoIWlzQ2hlYXBE
dXJpbmdHQyh2bSkpCi0gICAgICAgIHJldHVybiB2bS5oZWFwLmlzTWFya2VkKHRoaXMpOwotICAg
IAorICAgIGlmICghaXNDaGVhcER1cmluZ0dDKHZpc2l0b3IpKQorICAgICAgICByZXR1cm4gdmlz
aXRvci5pc01hcmtlZCh0aGlzKTsKKwogICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQodGhp
cyk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK3RlbXBsYXRlIGJvb2wgU3RydWN0dXJlOjptYXJr
SWZDaGVhcChBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSBib29sIFN0cnVjdHVyZTo6
bWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImKTsKKwogUmVmPFN0cnVjdHVyZVNoYXBlPiBTdHJ1Y3R1
cmU6OnRvU3RydWN0dXJlU2hhcGUoSlNWYWx1ZSB2YWx1ZSwgYm9vbCYgc2F3UG9seVByb3RvU3Ry
dWN0dXJlKQogewogICAgIFJlZjxTdHJ1Y3R1cmVTaGFwZT4gYmFzZVNoYXBlID0gU3RydWN0dXJl
U2hhcGU6OmNyZWF0ZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3Ry
dWN0dXJlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3Ry
dWN0dXJlLmgJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1N0cnVjdHVyZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAwOC0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAwOC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjAsNyArNjAsNiBAQCBjbGFzcyBQ
cm9wZXJ0eU5hbWVBcnJheURhdGE7CiBjbGFzcyBQcm9wZXJ0eVRhYmxlOwogY2xhc3MgU3RydWN0
dXJlQ2hhaW47CiBjbGFzcyBTdHJ1Y3R1cmVTaGFwZTsKLWNsYXNzIFNsb3RWaXNpdG9yOwogY2xh
c3MgSlNTdHJpbmc7CiBzdHJ1Y3QgRHVtcENvbnRleHQ7CiBzdHJ1Y3QgSGFzaFRhYmxlOwpAQCAt
MzEwLDcgKzMwOSw3IEBAIHB1YmxpYzoKICAgICBKU1ZhbHVlIHByb3RvdHlwZUZvckxvb2t1cChK
U0dsb2JhbE9iamVjdCosIEpTQ2VsbCogYmFzZSkgY29uc3Q7CiAgICAgU3RydWN0dXJlQ2hhaW4q
IHByb3RvdHlwZUNoYWluKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU09iamVjdCogYmFzZSkgY29u
c3Q7CiAgICAgU3RydWN0dXJlQ2hhaW4qIHByb3RvdHlwZUNoYWluKEpTR2xvYmFsT2JqZWN0Kiwg
SlNPYmplY3QqIGJhc2UpIGNvbnN0OwotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlND
ZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogICAgIAog
ICAgIC8vIEEgU3RydWN0dXJlIGlzIGNoZWFwIHRvIG1hcmsgZHVyaW5nIEdDIGlmIGRvaW5nIHNv
IHdvdWxkIG9ubHkgYWRkIGEgc21hbGwgYW5kIGJvdW5kZWQgYW1vdW50CiAgICAgLy8gdG8gb3Vy
IGhlYXAgZm9vdHByaW50LiBGb3IgZXhhbXBsZSwgaWYgdGhlIHN0cnVjdHVyZSByZWZlcnMgdG8g
YSBnbG9iYWwgb2JqZWN0IHRoYXQgaXMgbm90CkBAIC0zMTgsMTAgKzMxNywxMCBAQCBwdWJsaWM6
CiAgICAgLy8gaW5jcmVhc2UgaW4gZm9vdHByaW50IGJlY2F1c2Ugbm8gb3RoZXIgb2JqZWN0IHJl
ZmVycyB0byB0aGF0IGdsb2JhbCBvYmplY3QuIFRoaXMgbWV0aG9kCiAgICAgLy8gcmV0dXJucyB0
cnVlIGlmIGFsbCB1c2VyLWNvbnRyb2xsZWQgKGFuZCBoZW5jZSB1bmJvdW5kZWQgaW4gc2l6ZSkg
b2JqZWN0cyByZWZlcmVuY2VkIGZyb20gdGhlCiAgICAgLy8gU3RydWN0dXJlIGFyZSBhbHJlYWR5
IG1hcmtlZC4KLSAgICBib29sIGlzQ2hlYXBEdXJpbmdHQyhWTSYpOworICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFZpc2l0b3I+IGJvb2wgaXNDaGVhcER1cmluZ0dDKFZpc2l0b3ImKTsKICAgICAKICAg
ICAvLyBSZXR1cm5zIHRydWUgaWYgdGhpcyBzdHJ1Y3R1cmUgaXMgbm93IG1hcmtlZC4KLSAgICBi
b29sIG1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlz
aXRvcj4gYm9vbCBtYXJrSWZDaGVhcChWaXNpdG9yJik7CiAgICAgCiAgICAgYm9vbCBoYXNSYXJl
RGF0YSgpIGNvbnN0CiAgICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U3RydWN0dXJlQ2hhaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1N0cnVjdHVyZUNoYWluLmNwcAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlQ2hhaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAyMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY2
LDcgKzY2LDggQEAgdm9pZCBTdHJ1Y3R1cmVDaGFpbjo6ZmluaXNoQ3JlYXRpb24oVk0mIAogICAg
IH0KIH0KIAotdm9pZCBTdHJ1Y3R1cmVDaGFpbjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGws
IFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQg
U3RydWN0dXJlQ2hhaW46OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYg
dmlzaXRvcikKIHsKICAgICBTdHJ1Y3R1cmVDaGFpbiogdGhpc09iamVjdCA9IGpzQ2FzdDxTdHJ1
Y3R1cmVDaGFpbio+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09i
amVjdCwgaW5mbygpKTsKQEAgLTgwLDQgKzgxLDYgQEAgdm9pZCBTdHJ1Y3R1cmVDaGFpbjo6dmlz
aXRDaGlsZHJlbihKU0NlbAogICAgIH0KIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKFN0cnVj
dHVyZUNoYWluKTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TdHJ1Y3R1cmVDaGFpbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUNoYWluLmgJKHJldmlzaW9uIDI3MzExOSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUNoYWluLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTkgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC01MSw3ICs1MSw3IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBTdHJ1Y3R1cmVD
aGFpbiogY3JlYXRlKFZNJiwgSlNPYmplY3QqKTsKICAgICBTdHJ1Y3R1cmVJRCogaGVhZCgpIHsg
cmV0dXJuIG1fdmVjdG9yLmdldCgpOyB9Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihK
U0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAg
ICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKICAgICB7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVSYXJlRGF0YS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlUmFyZURhdGEuY3BwCShy
ZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1
cmVSYXJlRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02Nyw3ICs2Nyw4IEBAIFN0cnVjdHVy
ZVJhcmVEYXRhOjpTdHJ1Y3R1cmVSYXJlRGF0YShWTSYKICAgICAgICAgbV9wcmV2aW91cy5zZXQo
dm0sIHRoaXMsIHByZXZpb3VzKTsKIH0KIAotdm9pZCBTdHJ1Y3R1cmVSYXJlRGF0YTo6dmlzaXRD
aGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlw
ZW5hbWUgVmlzaXRvcj4KK3ZvaWQgU3RydWN0dXJlUmFyZURhdGE6OnZpc2l0Q2hpbGRyZW5JbXBs
KEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBTdHJ1Y3R1cmVSYXJlRGF0
YSogdGhpc09iamVjdCA9IGpzQ2FzdDxTdHJ1Y3R1cmVSYXJlRGF0YSo+KGNlbGwpOwogICAgIEFT
U0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTg2LDYgKzg3
LDggQEAgdm9pZCBTdHJ1Y3R1cmVSYXJlRGF0YTo6dmlzaXRDaGlsZHJlbihKUwogICAgIH0KIH0K
IAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKFN0cnVjdHVyZVJhcmVEYXRhKTsKKwogLy8gLS0tLS0t
LS0tLS0gQ2FjaGVkIHNwZWNpYWwgcHJvcGVydGllcyBoZWxwZXIgd2F0Y2hwb2ludCBjbGFzc2Vz
IC0tLS0tLS0tLS0tCiAKIGNsYXNzIENhY2hlZFNwZWNpYWxQcm9wZXJ0eUFkYXB0aXZlSW5mZXJy
ZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludCBmaW5hbCA6IHB1YmxpYyBBZGFwdGl2ZUluZmVycmVk
UHJvcGVydHlWYWx1ZVdhdGNocG9pbnRCYXNlIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1N0cnVjdHVyZVJhcmVEYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlUmFyZURhdGEuaAkocmV2aXNpb24gMjczMTE5KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlUmFyZURhdGEuaAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAy
MCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTY4LDcgKzY4LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBuZWVkc0Rlc3RydWN0aW9uID0gdHJ1ZTsKICAgICBzdGF0aWMgdm9pZCBkZXN0cm95
KEpTQ2VsbCopOwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90
VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBzdGF0aWMgU3Ry
dWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUgcHJv
dG90eXBlKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFi
bGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJv
bFRhYmxlLmNwcAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU3ltYm9sVGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtOTIsNyArOTIsOCBAQCB2
b2lkIFN5bWJvbFRhYmxlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCiAgICAgQmFzZTo6ZmluaXNo
Q3JlYXRpb24odm0pOwogfQogCi12b2lkIFN5bWJvbFRhYmxlOjp2aXNpdENoaWxkcmVuKEpTQ2Vs
bCogdGhpc0NlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlz
aXRvcj4KK3ZvaWQgU3ltYm9sVGFibGU6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogdGhpc0Nl
bGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgU3ltYm9sVGFibGUqIHRoaXNTeW1ib2xUYWJs
ZSA9IGpzQ2FzdDxTeW1ib2xUYWJsZSo+KHRoaXNDZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNU
X0lOSEVSSVRTKHRoaXNTeW1ib2xUYWJsZSwgaW5mbygpKTsKQEAgLTEwOCw2ICsxMDksOCBAQCB2
b2lkIFN5bWJvbFRhYmxlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogCiAgICAgdGhpc1N5bWJvbFRh
YmxlLT5tX2xvY2FsVG9FbnRyeSA9IG51bGxwdHI7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJF
TihTeW1ib2xUYWJsZSk7CisKIGNvbnN0IFN5bWJvbFRhYmxlOjpMb2NhbFRvRW50cnlWZWMmIFN5
bWJvbFRhYmxlOjpsb2NhbFRvRW50cnkoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJikKIHsKICAg
ICBpZiAoVU5MSUtFTFkoIW1fbG9jYWxUb0VudHJ5KSkgewpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TeW1ib2xUYWJsZS5oCShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TeW1ib2xUYWJsZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNy0yMDIwIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDIxIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtNzMzLDcgKzczMyw3IEBAIHB1YmxpYzoKICAgICAgICAgbV9zaW5nbGV0b24ubm90aWZ5V3Jp
dGUodm0sIHRoaXMsIHNjb3BlLCByZWFzb24pOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIHZp
c2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NI
SUxEUkVOOwogCiAgICAgREVDTEFSRV9FWFBPUlRfSU5GTzsKIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvVHlwZVByb2ZpbGVyTG9nLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlUHJvZmlsZXJMb2cuY3BwCShyZXZpc2lvbiAy
NzMxMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlUHJvZmlsZXJMb2cu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxNC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTI0LDcgKzEyNCw5IEBAIHZvaWQgVHlwZVByb2ZpbGVy
TG9nOjpwcm9jZXNzTG9nRW50cmllcygKICAgICB9CiB9CiAKLXZvaWQgVHlwZVByb2ZpbGVyTG9n
Ojp2aXNpdChTbG90VmlzaXRvciYgdmlzaXRvcikKKy8vIFdlIGRvbid0IG5lZWQgYSBTbG90Vmlz
aXRvciB2ZXJzaW9uIG9mIHRoaXMgYmVjYXVzZSBUeXBlUHJvZmlsZXJMb2cgaXMgb25seSB1c2Vk
IGJ5CisvLyBkZXYgdG9vbHMsIGFuZCBpcyB0aGVyZWZvcmUgbm90IG9uIHRoZSBjcml0aWNhbCBw
YXRoIGZvciBwZXJmb3JtYW5jZS4KK3ZvaWQgVHlwZVByb2ZpbGVyTG9nOjp2aXNpdChBYnN0cmFj
dFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGZvciAoTG9nRW50cnkqIGVudHJ5ID0gbV9s
b2dTdGFydFB0cjsgZW50cnkgIT0gbV9jdXJyZW50TG9nRW50cnlQdHI7ICsrZW50cnkpIHsKICAg
ICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZChlbnRyeS0+dmFsdWUpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZVByb2ZpbGVyTG9nLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZVByb2ZpbGVyTG9nLmgJKHJldmlz
aW9uIDI3MzExOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVQcm9maWxl
ckxvZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTQtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTMzLDYgKzMzLDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAK
K2NsYXNzIEFic3RyYWN0U2xvdFZpc2l0b3I7CiBjbGFzcyBUeXBlTG9jYXRpb247CiAKIGNsYXNz
IFR5cGVQcm9maWxlckxvZyB7CkBAIC01OSw3ICs2MCw3IEBAIHB1YmxpYzoKICAgICBKU19FWFBP
UlRfUFJJVkFURSB2b2lkIHByb2Nlc3NMb2dFbnRyaWVzKFZNJiwgY29uc3QgU3RyaW5nJik7CiAg
ICAgTG9nRW50cnkqIGxvZ0VuZFB0cigpIGNvbnN0IHsgcmV0dXJuIG1fbG9nRW5kUHRyOyB9CiAK
LSAgICB2b2lkIHZpc2l0KFNsb3RWaXNpdG9yJik7CisgICAgdm9pZCB2aXNpdChBYnN0cmFjdFNs
b3RWaXNpdG9yJik7CiAKICAgICBzdGF0aWMgcHRyZGlmZl90IGxvZ1N0YXJ0T2Zmc2V0KCkgeyBy
ZXR1cm4gT0JKRUNUX09GRlNFVE9GKFR5cGVQcm9maWxlckxvZywgbV9sb2dTdGFydFB0cik7IH0K
ICAgICBzdGF0aWMgcHRyZGlmZl90IGN1cnJlbnRMb2dFbnRyeU9mZnNldCgpIHsgcmV0dXJuIE9C
SkVDVF9PRkZTRVRPRihUeXBlUHJvZmlsZXJMb2csIG1fY3VycmVudExvZ0VudHJ5UHRyKTsgfQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCShyZXZpc2lvbiAyNzMxMTkpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOC0yMDIwIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTIx
LDYgKzEyMSw3IEBAIGNsYXNzIEZhc3RNYWxsb2NBbGlnbmVkTWVtb3J5QWxsb2NhdG9yOwogY2xh
c3MgR2lnYWNhZ2VBbGlnbmVkTWVtb3J5QWxsb2NhdG9yOwogY2xhc3MgSGFuZGxlU3RhY2s7CiBj
bGFzcyBIYXNPd25Qcm9wZXJ0eUNhY2hlOworY2xhc3MgSGVhcEFuYWx5emVyOwogY2xhc3MgSGVh
cFByb2ZpbGVyOwogY2xhc3MgSWRlbnRpZmllcjsKIGNsYXNzIEludGVycHJldGVyOwpAQCAtMzA5
LDYgKzMxMCwxMCBAQCBwdWJsaWM6CiAgICAgSGVhcFByb2ZpbGVyKiBoZWFwUHJvZmlsZXIoKSBj
b25zdCB7IHJldHVybiBtX2hlYXBQcm9maWxlci5nZXQoKTsgfQogICAgIEpTX0VYUE9SVF9QUklW
QVRFIEhlYXBQcm9maWxlciYgZW5zdXJlSGVhcFByb2ZpbGVyKCk7CiAKKyAgICBib29sIGlzQW5h
bHl6aW5nSGVhcCgpIGNvbnN0IHsgcmV0dXJuIG1fYWN0aXZlSGVhcEFuYWx5emVyOyB9CisgICAg
SGVhcEFuYWx5emVyKiBhY3RpdmVIZWFwQW5hbHl6ZXIoKSBjb25zdCB7IHJldHVybiBtX2FjdGl2
ZUhlYXBBbmFseXplcjsgfQorICAgIHZvaWQgc2V0QWN0aXZlSGVhcEFuYWx5emVyKEhlYXBBbmFs
eXplciogYW5hbHl6ZXIpIHsgbV9hY3RpdmVIZWFwQW5hbHl6ZXIgPSBhbmFseXplcjsgfQorCiAj
aWYgRU5BQkxFKFNBTVBMSU5HX1BST0ZJTEVSKQogICAgIFNhbXBsaW5nUHJvZmlsZXIqIHNhbXBs
aW5nUHJvZmlsZXIoKSB7IHJldHVybiBtX3NhbXBsaW5nUHJvZmlsZXIuZ2V0KCk7IH0KICAgICBK
U19FWFBPUlRfUFJJVkFURSBTYW1wbGluZ1Byb2ZpbGVyJiBlbnN1cmVTYW1wbGluZ1Byb2ZpbGVy
KFJlZjxTdG9wd2F0Y2g+JiYpOwpAQCAtMTE5NCw5ICsxMTk5LDEwIEBAIHB1YmxpYzoKICAgICBi
b29sIGRpZEVudGVyVk0geyBmYWxzZSB9OwogcHJpdmF0ZToKICAgICBib29sIG1fZmFpbE5leHRO
ZXdDb2RlQmxvY2sgeyBmYWxzZSB9OwotICAgIERlbGV0ZVByb3BlcnR5TW9kZSBtX2RlbGV0ZVBy
b3BlcnR5TW9kZSB7IERlbGV0ZVByb3BlcnR5TW9kZTo6RGVmYXVsdCB9OwogICAgIGJvb2wgbV9n
bG9iYWxDb25zdFJlZGVjbGFyYXRpb25TaG91bGRUaHJvdyB7IHRydWUgfTsKICAgICBib29sIG1f
c2hvdWxkQnVpbGRQQ1RvQ29kZU9yaWdpbk1hcHBpbmcgeyBmYWxzZSB9OworICAgIERlbGV0ZVBy
b3BlcnR5TW9kZSBtX2RlbGV0ZVByb3BlcnR5TW9kZSB7IERlbGV0ZVByb3BlcnR5TW9kZTo6RGVm
YXVsdCB9OworICAgIEhlYXBBbmFseXplciogbV9hY3RpdmVIZWFwQW5hbHl6ZXIgeyBudWxscHRy
IH07CiAgICAgc3RkOjp1bmlxdWVfcHRyPENvZGVDYWNoZT4gbV9jb2RlQ2FjaGU7CiAgICAgc3Rk
Ojp1bmlxdWVfcHRyPEludGxDYWNoZT4gbV9pbnRsQ2FjaGU7CiAgICAgc3RkOjp1bmlxdWVfcHRy
PEJ1aWx0aW5FeGVjdXRhYmxlcz4gbV9idWlsdGluRXhlY3V0YWJsZXM7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9XZWFrTWFwSW1wbC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha01hcEltcGwuY3BwCShyZXZpc2lvbiAyNzMx
MTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9XZWFrTWFwSW1wbC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAxNyBZ
dXN1a2UgU3V6dWtpIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+LgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApA
QCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgIldlYWtNYXBJbXBsLmgiCiAKICNpbmNsdWRlICJB
dXhpbGlhcnlCYXJyaWVySW5saW5lcy5oIgorI2luY2x1ZGUgIlNsb3RWaXNpdG9ySW5saW5lcy5o
IgogI2luY2x1ZGUgIlN0cnVjdHVyZUlubGluZXMuaCIKICNpbmNsdWRlICJXZWFrTWFwSW1wbElu
bGluZXMuaCIKIApAQCAtMzksOCArNDAsOSBAQCB2b2lkIFdlYWtNYXBJbXBsPFdlYWtNYXBCdWNr
ZXQ+OjpkZXN0cm95CiAgICAgc3RhdGljX2Nhc3Q8V2Vha01hcEltcGwqPihjZWxsKS0+fldlYWtN
YXBJbXBsKCk7CiB9CiAKLXRlbXBsYXRlIDx0eXBlbmFtZSBXZWFrTWFwQnVja2V0Pgotdm9pZCBX
ZWFrTWFwSW1wbDxXZWFrTWFwQnVja2V0Pjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgV2Vha01hcEJ1Y2tldD4KK3Rl
bXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFdlYWtNYXBJbXBsPFdlYWtNYXBCdWNrZXQ+
Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAg
ICAgV2Vha01hcEltcGwqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8V2Vha01hcEltcGwqPihjZWxsKTsK
ICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC00
OCw2ICs1MCw4IEBAIHZvaWQgV2Vha01hcEltcGw8V2Vha01hcEJ1Y2tldD46OnZpc2l0Q2gKICAg
ICB2aXNpdG9yLnJlcG9ydEV4dHJhTWVtb3J5VmlzaXRlZCh0aGlzT2JqZWN0LT5tX2NhcGFjaXR5
ICogc2l6ZW9mKFdlYWtNYXBCdWNrZXQpKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOX1dJ
VEhfTU9ESUZJRVIodGVtcGxhdGU8dHlwZW5hbWUgV2Vha01hcEJ1Y2tldD4sIFdlYWtNYXBJbXBs
PFdlYWtNYXBCdWNrZXQ+KTsKKwogdGVtcGxhdGUgPHR5cGVuYW1lIFdlYWtNYXBCdWNrZXQ+CiBz
aXplX3QgV2Vha01hcEltcGw8V2Vha01hcEJ1Y2tldD46OmVzdGltYXRlZFNpemUoSlNDZWxsKiBj
ZWxsLCBWTSYgdm0pCiB7CkBAIC01NiwxNSArNjAsMjUgQEAgc2l6ZV90IFdlYWtNYXBJbXBsPFdl
YWtNYXBCdWNrZXQ+Ojplc3RpbQogfQogCiB0ZW1wbGF0ZSA8Pgotdm9pZCBXZWFrTWFwSW1wbDxX
ZWFrTWFwQnVja2V0PFdlYWtNYXBCdWNrZXREYXRhS2V5Pj46OnZpc2l0T3V0cHV0Q29uc3RyYWlu
dHMoSlNDZWxsKiwgU2xvdFZpc2l0b3ImKQordGVtcGxhdGUgPD4KK3ZvaWQgV2Vha01hcEltcGw8
V2Vha01hcEJ1Y2tldDxXZWFrTWFwQnVja2V0RGF0YUtleT4+Ojp2aXNpdE91dHB1dENvbnN0cmFp
bnRzKEpTQ2VsbCosIEFic3RyYWN0U2xvdFZpc2l0b3ImKQogewogICAgIC8vIE9ubHkgSlNXZWFr
TWFwIG5lZWRzIHRvIGhhcnZlc3QgdmFsdWUgcmVmZXJlbmNlcwogfQogCiB0ZW1wbGF0ZSA8Pgot
dm9pZCBXZWFrTWFwSW1wbDxXZWFrTWFwQnVja2V0PFdlYWtNYXBCdWNrZXREYXRhS2V5VmFsdWU+
Pjo6dmlzaXRPdXRwdXRDb25zdHJhaW50cyhKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNp
dG9yKQordGVtcGxhdGUgPD4KK3ZvaWQgV2Vha01hcEltcGw8V2Vha01hcEJ1Y2tldDxXZWFrTWFw
QnVja2V0RGF0YUtleT4+Ojp2aXNpdE91dHB1dENvbnN0cmFpbnRzKEpTQ2VsbCosIFNsb3RWaXNp
dG9yJikKIHsKLSAgICBWTSYgdm0gPSB2aXNpdG9yLnZtKCk7CisgICAgLy8gT25seSBKU1dlYWtN
YXAgbmVlZHMgdG8gaGFydmVzdCB2YWx1ZSByZWZlcmVuY2VzCit9CisKK3RlbXBsYXRlPHR5cGVu
YW1lIEJ1Y2tldFR5cGU+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgorQUxXQVlTX0lOTElO
RSB2b2lkIFdlYWtNYXBJbXBsPEJ1Y2tldFR5cGU+Ojp2aXNpdE91dHB1dENvbnN0cmFpbnRzKEpT
Q2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6
aXNfc2FtZTxCdWNrZXRUeXBlLCBXZWFrTWFwQnVja2V0PFdlYWtNYXBCdWNrZXREYXRhS2V5VmFs
dWU+Pjo6dmFsdWUpOworCiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxXZWFrTWFwSW1w
bCo+KGNlbGwpOwogICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sodGhpc09iamVjdC0+Y2VsbExv
Y2soKSk7CiAgICAgYXV0byogYnVmZmVyID0gdGhpc09iamVjdC0+YnVmZmVyKCk7CkBAIC03Miwx
MiArODYsMTUgQEAgdm9pZCBXZWFrTWFwSW1wbDxXZWFrTWFwQnVja2V0PFdlYWtNYXBCdQogICAg
ICAgICBhdXRvKiBidWNrZXQgPSBidWZmZXIgKyBpbmRleDsKICAgICAgICAgaWYgKGJ1Y2tldC0+
aXNFbXB0eSgpIHx8IGJ1Y2tldC0+aXNEZWxldGVkKCkpCiAgICAgICAgICAgICBjb250aW51ZTsK
LSAgICAgICAgaWYgKCF2bS5oZWFwLmlzTWFya2VkKGJ1Y2tldC0+a2V5KCkpKQorICAgICAgICBp
ZiAoIXZpc2l0b3IuaXNNYXJrZWQoYnVja2V0LT5rZXkoKSkpCiAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgYnVja2V0LT52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKICAgICB9CiB9CiAK
K3RlbXBsYXRlIHZvaWQgV2Vha01hcEltcGw8V2Vha01hcEJ1Y2tldDxXZWFrTWFwQnVja2V0RGF0
YUtleVZhbHVlPj46OnZpc2l0T3V0cHV0Q29uc3RyYWludHMoSlNDZWxsKiwgQWJzdHJhY3RTbG90
VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBXZWFrTWFwSW1wbDxXZWFrTWFwQnVja2V0PFdlYWtN
YXBCdWNrZXREYXRhS2V5VmFsdWU+Pjo6dmlzaXRPdXRwdXRDb25zdHJhaW50cyhKU0NlbGwqLCBT
bG90VmlzaXRvciYpOworCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgV2Vha01hcEJ1Y2tldD4KIHRlbXBs
YXRlPHR5cGVuYW1lIEFwcGVuZGVyPgogdm9pZCBXZWFrTWFwSW1wbDxXZWFrTWFwQnVja2V0Pjo6
dGFrZVNuYXBzaG90SW50ZXJuYWwodW5zaWduZWQgbGltaXQsIEFwcGVuZGVyIGFwcGVuZGVyKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha01hcEltcGwuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9XZWFrTWFwSW1wbC5oCShyZXZp
c2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9XZWFrTWFwSW1w
bC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdo
dCAoQykgMjAxNyBZdXN1a2UgU3V6dWtpIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+LgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dApAQCAtMTQ0LDggKzE0NCw4IEBAIHB1YmxpYzoKICAgICAgICAgY2xlYXJWYWx1
ZSgpOwogICAgIH0KIAotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUID0gRGF0YT4KLSAgICBBTFdB
WVNfSU5MSU5FIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTxULCBXZWFrTWFw
QnVja2V0RGF0YUtleVZhbHVlPjo6dmFsdWU+Ojp0eXBlIHZpc2l0QWdncmVnYXRlKFNsb3RWaXNp
dG9yJiB2aXNpdG9yKQorICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUID0gRGF0YSwgdHlwZW5hbWUg
VmlzaXRvcj4KKyAgICBBTFdBWVNfSU5MSU5FIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6
aXNfc2FtZTxULCBXZWFrTWFwQnVja2V0RGF0YUtleVZhbHVlPjo6dmFsdWU+Ojp0eXBlIHZpc2l0
QWdncmVnYXRlKFZpc2l0b3ImIHZpc2l0b3IpCiAgICAgewogICAgICAgICB2aXNpdG9yLmFwcGVu
ZChtX2RhdGEudmFsdWUpOwogICAgIH0KQEAgLTIwMiw3ICsyMDIsNyBAQCBwdWJsaWM6CiAgICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOwogICAgIHN0YXRp
YyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVu
KEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAog
ICAgIHN0YXRpYyBzaXplX3QgZXN0aW1hdGVkU2l6ZShKU0NlbGwqLCBWTSYpOwogCkBAIC0zMTEs
MTAgKzMxMSwxMyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiB2bS53ZWFrU2V0U3BhY2U8bW9k
ZT4oKTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdE91dHB1dENvbnN0cmFpbnRzKEpT
Q2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gc3Rh
dGljIHZvaWQgdmlzaXRPdXRwdXRDb25zdHJhaW50cyhKU0NlbGwqLCBWaXNpdG9yJik7CiAgICAg
dm9pZCBmaW5hbGl6ZVVuY29uZGl0aW9uYWxseShWTSYpOwogCiBwcml2YXRlOgorICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFZpc2l0b3I+CisgICAgQUxXQVlTX0lOTElORSBzdGF0aWMgdm9pZCB2aXNp
dE91dHB1dENvbnN0cmFpbnRzRm9yRGF0YUtleVZhbHVlKEpTQ2VsbCosIFZpc2l0b3ImKTsKKwog
ICAgIEFMV0FZU19JTkxJTkUgV2Vha01hcEJ1Y2tldFR5cGUqIGZpbmRCdWNrZXQoSlNPYmplY3Qq
IGtleSkKICAgICB7CiAgICAgICAgIHJldHVybiBmaW5kQnVja2V0KGtleSwganNXZWFrTWFwSGFz
aChrZXkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9KU0RvbGxhclZNLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvSlNEb2xsYXJWTS5j
cHAJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9KU0Rv
bGxhclZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTUtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTUtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTIyNCwxNCArMjI0LDcgQEAgcHVibGljOgog
CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIFJvb3QqKTsKIAotICAgIHN0YXRpYyB2b2lk
IHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKLSAgICB7
Ci0gICAgICAgIERvbGxhclZNQXNzZXJ0U2NvcGUgYXNzZXJ0U2NvcGU7Ci0gICAgICAgIEVsZW1l
bnQqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8RWxlbWVudCo+KGNlbGwpOwotICAgICAgICBBU1NFUlRf
R0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7Ci0gICAgICAgIEJhc2U6OnZp
c2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7Ci0gICAgICAgIHZpc2l0b3IuYXBwZW5k
KHRoaXNPYmplY3QtPm1fcm9vdCk7Ci0gICAgfQorICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47
CiAKICAgICBzdGF0aWMgRWxlbWVudEhhbmRsZU93bmVyKiBoYW5kbGVPd25lcigpOwogCkBAIC0y
NDcsMTAgKzI0MCwyMiBAQCBwcml2YXRlOgogICAgIFdyaXRlQmFycmllcjxSb290PiBtX3Jvb3Q7
CiB9OwogCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBFbGVtZW50Ojp2aXNpdENo
aWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgRG9sbGFy
Vk1Bc3NlcnRTY29wZSBhc3NlcnRTY29wZTsKKyAgICBFbGVtZW50KiB0aGlzT2JqZWN0ID0ganND
YXN0PEVsZW1lbnQqPihjZWxsKTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNP
YmplY3QsIGluZm8oKSk7CisgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNp
dG9yKTsKKyAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX3Jvb3QpOworfQorCitERUZJ
TkVfVklTSVRfQ0hJTERSRU4oRWxlbWVudCk7CisKIGNsYXNzIEVsZW1lbnRIYW5kbGVPd25lciBm
aW5hbCA6IHB1YmxpYyBXZWFrSGFuZGxlT3duZXIgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOwogcHVibGljOgotICAgIGJvb2wgaXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpI
YW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBTbG90VmlzaXRvciYgdmlzaXRvciwg
Y29uc3QgY2hhcioqIHJlYXNvbikgZmluYWwKKyAgICBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1
ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgQWJzdHJhY3RT
bG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikgZmluYWwKICAgICB7CiAg
ICAgICAgIERvbGxhclZNQXNzZXJ0U2NvcGUgYXNzZXJ0U2NvcGU7CiAgICAgICAgIGlmIChVTkxJ
S0VMWShyZWFzb24pKQpAQCAtMzA0LDE4ICszMDksMjMgQEAgcHVibGljOgogICAgICAgICByZXR1
cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5m
byhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CiAgICAgfQogCi0gICAgc3Rh
dGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqIHRoaXNPYmplY3QsIFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQotICAgIHsKLSAgICAgICAgRG9sbGFyVk1Bc3NlcnRTY29wZSBhc3NlcnRTY29wZTsK
LSAgICAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwot
ICAgICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwotICAgICAg
ICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QodGhpc09iamVjdCk7Ci0gICAgfQorICAgIERFQ0xBUkVf
VklTSVRfQ0hJTERSRU47CiAKIHByaXZhdGU6CiAgICAgV2VhazxFbGVtZW50PiBtX2VsZW1lbnQ7
CiB9OwogCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBSb290Ojp2aXNpdENoaWxk
cmVuSW1wbChKU0NlbGwqIHRoaXNPYmplY3QsIFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgRG9s
bGFyVk1Bc3NlcnRTY29wZSBhc3NlcnRTY29wZTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVS
SVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CisgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2Jq
ZWN0LCB2aXNpdG9yKTsKKyAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QodGhpc09iamVjdCk7Cit9
CisKK0RFRklORV9WSVNJVF9DSElMRFJFTihSb290KTsKKwogY2xhc3MgU2ltcGxlT2JqZWN0IDog
cHVibGljIEpTTm9uRmluYWxPYmplY3QgewogcHVibGljOgogICAgIFNpbXBsZU9iamVjdChWTSYg
dm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQpAQCAtMzQwLDE0ICszNTAsNyBAQCBwdWJsaWM6CiAg
ICAgICAgIHJldHVybiBzaW1wbGVPYmplY3Q7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgdmlz
aXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQotICAgIHsKLSAg
ICAgICAgRG9sbGFyVk1Bc3NlcnRTY29wZSBhc3NlcnRTY29wZTsKLSAgICAgICAgU2ltcGxlT2Jq
ZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PFNpbXBsZU9iamVjdCo+KGNlbGwpOwotICAgICAgICBB
U1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7Ci0gICAgICAgIEJh
c2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7Ci0gICAgICAgIHZpc2l0b3Iu
YXBwZW5kKHRoaXNPYmplY3QtPm1faGlkZGVuVmFsdWUpOwotICAgIH0KKyAgICBERUNMQVJFX1ZJ
U0lUX0NISUxEUkVOOwogCiAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZN
JiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCiAg
ICAgewpAQCAtMzgwLDYgKzM4MywxOCBAQCBwcml2YXRlOgogICAgIFdyaXRlQmFycmllcjxKU0M6
OlVua25vd24+IG1faGlkZGVuVmFsdWU7CiB9OwogCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
Pgordm9pZCBTaW1wbGVPYmplY3Q6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlz
aXRvciYgdmlzaXRvcikKK3sKKyAgICBEb2xsYXJWTUFzc2VydFNjb3BlIGFzc2VydFNjb3BlOwor
ICAgIFNpbXBsZU9iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxTaW1wbGVPYmplY3QqPihjZWxs
KTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7Cisg
ICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKKyAgICB2aXNpdG9y
LmFwcGVuZCh0aGlzT2JqZWN0LT5tX2hpZGRlblZhbHVlKTsKK30KKworREVGSU5FX1ZJU0lUX0NI
SUxEUkVOKFNpbXBsZU9iamVjdCk7CisKIGNsYXNzIEltcHVyZUdldHRlciA6IHB1YmxpYyBKU05v
bkZpbmFsT2JqZWN0IHsKIHB1YmxpYzoKICAgICBJbXB1cmVHZXR0ZXIoVk0mIHZtLCBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSkKQEAgLTQzNiwxNCArNDUxLDcgQEAgcHVibGljOgogICAgICAgICByZXR1
cm4gQmFzZTo6Z2V0T3duUHJvcGVydHlTbG90KG9iamVjdCwgZ2xvYmFsT2JqZWN0LCBuYW1lLCBz
bG90KTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2Vs
bCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCi0gICAgewotICAgICAgICBEb2xsYXJWTUFzc2VydFNj
b3BlIGFzc2VydFNjb3BlOwotICAgICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNlbGws
IGluZm8oKSk7Ci0gICAgICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4oY2VsbCwgdmlzaXRvcik7Ci0g
ICAgICAgIEltcHVyZUdldHRlciogdGhpc09iamVjdCA9IGpzQ2FzdDxJbXB1cmVHZXR0ZXIqPihj
ZWxsKTsKLSAgICAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9kZWxlZ2F0ZSk7Ci0g
ICAgfQorICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICB2b2lkIHNldERlbGVnYXRl
KFZNJiB2bSwgSlNPYmplY3QqIGRlbGVnYXRlKQogICAgIHsKQEAgLTQ1NCw2ICs0NjIsMTggQEAg
cHJpdmF0ZToKICAgICBXcml0ZUJhcnJpZXI8SlNPYmplY3Q+IG1fZGVsZWdhdGU7CiB9OwogCit0
ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBJbXB1cmVHZXR0ZXI6OnZpc2l0Q2hpbGRy
ZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBEb2xsYXJWTUFz
c2VydFNjb3BlIGFzc2VydFNjb3BlOworICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2Vs
bCwgaW5mbygpKTsKKyAgICBCYXNlOjp2aXNpdENoaWxkcmVuKGNlbGwsIHZpc2l0b3IpOworICAg
IEltcHVyZUdldHRlciogdGhpc09iamVjdCA9IGpzQ2FzdDxJbXB1cmVHZXR0ZXIqPihjZWxsKTsK
KyAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2RlbGVnYXRlKTsKK30KKworREVGSU5F
X1ZJU0lUX0NISUxEUkVOKEltcHVyZUdldHRlcik7CisKIHN0YXRpYyBKU0NfREVDTEFSRV9DVVNU
T01fR0VUVEVSKGN1c3RvbUdldHRlclZhbHVlR2V0dGVyKTsKIHN0YXRpYyBKU0NfREVDTEFSRV9D
VVNUT01fR0VUVEVSKGN1c3RvbUdldHRlckFjZXNzb3JHZXR0ZXIpOwogCkBAIC0xODIyLDE0ICsx
ODQyLDcgQEAgcHVibGljOgogICAgICAgICBwdXREaXJlY3ROYXRpdmVGdW5jdGlvbih2bSwgZ2xv
YmFsT2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiYWRkQnl0ZXMiKSwgMCwgZnVu
Y3Rpb25XYXNtU3RyZWFtaW5nQ29tcGlsZXJBZGRCeXRlcywgTm9JbnRyaW5zaWMsIHN0YXRpY19j
YXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pKTsKICAgICB9CiAKLSAg
ICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZp
c2l0b3IpCi0gICAgewotICAgICAgICBEb2xsYXJWTUFzc2VydFNjb3BlIGFzc2VydFNjb3BlOwot
ICAgICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PFdhc21TdHJlYW1pbmdDb21waWxlcio+
KGNlbGwpOwotICAgICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGlu
Zm8oKSk7Ci0gICAgICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7
Ci0gICAgICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fcHJvbWlzZSk7Ci0gICAgfQor
ICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBERUNMQVJFX0lORk87CiAKQEAgLTE4
MzcsNiArMTg1MCwxOCBAQCBwdWJsaWM6CiAgICAgUmVmPFdhc206OlN0cmVhbWluZ0NvbXBpbGVy
PiBtX3N0cmVhbWluZ0NvbXBpbGVyOwogfTsKIAordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4K
K3ZvaWQgV2FzbVN0cmVhbWluZ0NvbXBpbGVyOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNl
bGwsIFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgRG9sbGFyVk1Bc3NlcnRTY29wZSBhc3NlcnRT
Y29wZTsKKyAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PFdhc21TdHJlYW1pbmdDb21waWxl
cio+KGNlbGwpOworICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5m
bygpKTsKKyAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOworICAg
IHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fcHJvbWlzZSk7Cit9CisKK0RFRklORV9WSVNJ
VF9DSElMRFJFTihXYXNtU3RyZWFtaW5nQ29tcGlsZXIpOworCiBjb25zdCBDbGFzc0luZm8gV2Fz
bVN0cmVhbWluZ0NvbXBpbGVyOjpzX2luZm8gPSB7ICJXYXNtU3RyZWFtaW5nQ29tcGlsZXIiLCAm
QmFzZTo6c19pbmZvLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKFdhc21T
dHJlYW1pbmdDb21waWxlcikgfTsKIAogSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGZ1bmN0aW9u
V2FzbVN0cmVhbWluZ0NvbXBpbGVyQWRkQnl0ZXMsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkpCkBAIC0zNjk5LDEzICszNzI0LDE2IEBAIHZvaWQg
SlNEb2xsYXJWTTo6YWRkQ29uc3RydWN0aWJsZUZ1bmN0aW8KICAgICBwdXREaXJlY3Qodm0sIGlk
ZW50aWZpZXIsIEpTRnVuY3Rpb246OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBhcmd1bWVudHMs
IGlkZW50aWZpZXIuc3RyaW5nKCksIGZ1bmN0aW9uLCBOb0ludHJpbnNpYywgZnVuY3Rpb24pLCBq
c0RvbGxhclZNUHJvcGVydHlBdHRyaWJ1dGVzKTsKIH0KIAotdm9pZCBKU0RvbGxhclZNOjp2aXNp
dENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0
eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0RvbGxhclZNOjp2aXNpdENoaWxkcmVuSW1wbChKU0Nl
bGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNEb2xsYXJWTSogdGhpc09iamVj
dCA9IGpzQ2FzdDxKU0RvbGxhclZNKj4oY2VsbCk7CiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0
aGlzT2JqZWN0LCB2aXNpdG9yKTsKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX29i
amVjdERvaW5nU2lkZUVmZmVjdFB1dFdpdGhvdXRDb3JyZWN0U2xvdFN0YXR1c1N0cnVjdHVyZSk7
CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU0RvbGxhclZNKTsKKwogfSAvLyBuYW1lc3Bh
Y2UgSlNDCiAKIElHTk9SRV9XQVJOSU5HU19FTkQKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS90b29scy9KU0RvbGxhclZNLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3Rvb2xzL0pTRG9sbGFyVk0uaAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3Rvb2xzL0pTRG9sbGFyVk0uaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTc0LDcgKzc0LDcg
QEAgcHJpdmF0ZToKICAgICB2b2lkIGFkZEZ1bmN0aW9uKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBj
b25zdCBjaGFyKiBuYW1lLCBOYXRpdmVGdW5jdGlvbiwgdW5zaWduZWQgYXJndW1lbnRzKTsKICAg
ICB2b2lkIGFkZENvbnN0cnVjdGlibGVGdW5jdGlvbihWTSYsIEpTR2xvYmFsT2JqZWN0KiwgY29u
c3QgY2hhciogbmFtZSwgTmF0aXZlRnVuY3Rpb24sIHVuc2lnbmVkIGFyZ3VtZW50cyk7CiAKLSAg
ICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAg
REVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1f
b2JqZWN0RG9pbmdTaWRlRWZmZWN0UHV0V2l0aG91dENvcnJlY3RTbG90U3RhdHVzU3RydWN0dXJl
OwogfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21HbG9iYWwuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21HbG9iYWwuY3BwCShy
ZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtR2xvYmFs
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE5LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC0xMDMsNyArMTAzLDggQEAgdm9pZCBHbG9iYWw6OnNldChKU0ds
b2JhbE9iamVjdCogZ2xvYmFsTwogICAgIH0KIH0KIAotdm9pZCBHbG9iYWw6OnZpc2l0QWdncmVn
YXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3Zv
aWQgR2xvYmFsOjp2aXNpdEFnZ3JlZ2F0ZUltcGwoVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBz
d2l0Y2ggKG1fdHlwZSkgewogICAgIGNhc2UgV2FzbTo6VHlwZTo6RXh0ZXJucmVmOgpAQCAtMTE3
LDYgKzExOCw4IEBAIHZvaWQgR2xvYmFsOjp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYKICAg
ICB9CiB9CiAKK0RFRklORV9WSVNJVF9BR0dSRUdBVEUoR2xvYmFsKTsKKwogfSB9IC8vIG5hbWVz
cGFjZSBKU0M6Okdsb2JhbAogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUdsb2JhbC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21HbG9iYWwuaAkocmV2aXNpb24gMjczMTE5KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUdsb2JhbC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNy0yMDE4IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIxIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtNTcsNyArNTcsOCBAQCBwdWJsaWM6CiAgICAgSlNWYWx1ZSBnZXQoSlNHbG9iYWxPYmpl
Y3QqKSBjb25zdDsKICAgICB1aW50NjRfdCBnZXRQcmltaXRpdmUoKSBjb25zdCB7IHJldHVybiBt
X3ZhbHVlLm1fcHJpbWl0aXZlOyB9CiAgICAgdm9pZCBzZXQoSlNHbG9iYWxPYmplY3QqLCBKU1Zh
bHVlKTsKLSAgICB2b2lkIHZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJik7CisvLyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIHZpc2l0QWdncmVnYXRlKFZpc2l0b3ImKTsKKyAg
ICBERUNMQVJFX1ZJU0lUX0FHR1JFR0FURTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IFQq
IG93bmVyKCkgY29uc3QgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxUKj4obV9vd25lcik7IH0K
ICAgICB2b2lkIHNldE93bmVyKEpTT2JqZWN0KiBvd25lcikKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21UYWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbVRhYmxlLmNwcAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbVRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE2Niw3
ICsxNjYsOCBAQCBKU1ZhbHVlIFRhYmxlOjpnZXQodWludDMyX3QgaW5kZXgpIGNvbnN0CiAgICAg
cmV0dXJuIG1fanNWYWx1ZXMuZ2V0KClbaW5kZXggJiBtX21hc2tdLmdldCgpOwogfQogCi12b2lk
IFRhYmxlOjp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5
cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFRhYmxlOjp2aXNpdEFnZ3JlZ2F0ZUltcGwoVmlzaXRvciYg
dmlzaXRvcikKIHsKICAgICBSRUxFQVNFX0FTU0VSVChtX293bmVyKTsKICAgICBhdXRvIGxvY2tl
ciA9IGhvbGRMb2NrKG1fb3duZXItPmNlbGxMb2NrKCkpOwpAQCAtMTc0LDYgKzE3NSw4IEBAIHZv
aWQgVGFibGU6OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJiAKICAgICAgICAgdmlzaXRvci5h
cHBlbmQobV9qc1ZhbHVlcy5nZXQoKVtpXSk7CiB9CiAKK0RFRklORV9WSVNJVF9BR0dSRUdBVEUo
VGFibGUpOworCiBUeXBlIFRhYmxlOjp3YXNtVHlwZSgpIGNvbnN0CiB7CiAgICAgaWYgKGlzRXh0
ZXJucmVmVGFibGUoKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UYWJs
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UYWJsZS5o
CShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGFi
bGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTctMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTgwLDcgKzgwLDcgQEAgcHVibGljOgogICAgIE9wdGlv
bmFsPHVpbnQzMl90PiBncm93KHVpbnQzMl90IGRlbHRhLCBKU1ZhbHVlIGRlZmF1bHRWYWx1ZSk7
CiAgICAgdm9pZCBjb3B5KGNvbnN0IFRhYmxlKiBzcmNUYWJsZSwgdWludDMyX3QgZHN0SW5kZXgs
IHVpbnQzMl90IHNyY0luZGV4KTsKIAotICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0
b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0FHR1JFR0FURTsKIAogcHJvdGVjdGVkOgogICAgIFRh
YmxlKHVpbnQzMl90IGluaXRpYWwsIE9wdGlvbmFsPHVpbnQzMl90PiBtYXhpbXVtLCBUYWJsZUVs
ZW1lbnRUeXBlID0gVGFibGVFbGVtZW50VHlwZTo6RXh0ZXJucmVmKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTVG9XYXNtSUNDYWxsZWUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTVG9XYXNtSUNDYWxsZWUuY3BwCShyZXZp
c2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1RvV2FzbUlD
Q2FsbGVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE5LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00OSw3ICs0OSw4IEBAIFN0cnVjdHVyZSogSlNUb1dh
c21JQ0NhbGxlZTo6Y3JlYXRlU3RydWMKICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0s
IGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhKU0NhbGxlZVR5cGUsIFN0cnVjdHVy
ZUZsYWdzKSwgaW5mbygpKTsKIH0KIAotdm9pZCBKU1RvV2FzbUlDQ2FsbGVlOjp2aXNpdENoaWxk
cmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBWaXNpdG9yPgordm9pZCBKU1RvV2FzbUlDQ2FsbGVlOjp2aXNpdENoaWxkcmVuSW1wbChKU0Nl
bGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNUb1dhc21JQ0NhbGxlZSogdGhp
c09iamVjdCA9IGpzQ2FzdDxKU1RvV2FzbUlDQ2FsbGVlKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dD
X09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNTgsNiArNTksOCBAQCB2
b2lkIEpTVG9XYXNtSUNDYWxsZWU6OnZpc2l0Q2hpbGRyZW4oSlNDCiAgICAgdmlzaXRvci5hcHBl
bmQodGhpc09iamVjdC0+bV9mdW5jdGlvbik7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihK
U1RvV2FzbUlDQ2FsbGVlKTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBFTkFC
TEUoV0VCQVNTRU1CTFkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1Rv
V2FzbUlDQ2FsbGVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
anMvSlNUb1dhc21JQ0NhbGxlZS5oCShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9qcy9KU1RvV2FzbUlDQ2FsbGVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOS0yMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTYsNyAr
NTYsNyBAQCBwcml2YXRlOgogICAgIEpTVG9XYXNtSUNDYWxsZWUoVk0mIHZtLCBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKICAgICAgICAgOiBCYXNl
KHZtLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSkKICAgICB7IH0KLSAgICBzdGF0aWMgdm9pZCB2
aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9D
SElMRFJFTjsKIAogICAgIFdyaXRlQmFycmllcjxXZWJBc3NlbWJseUZ1bmN0aW9uPiBtX2Z1bmN0
aW9uOwogfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1i
bHlDb2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suY3BwCShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAx
OCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTct
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTgyLDcgKzgyLDggQEAgdm9pZCBKU1dlYkFzc2VtYmx5Q29kZUJsb2Nr
OjpjbGVhckpTQ2FsbAogICAgICAgICAoKml0ZXIpLT51bmxpbmsodm0pOwogfQogCi12b2lkIEpT
V2ViQXNzZW1ibHlDb2RlQmxvY2s6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90Vmlz
aXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTV2ViQXNz
ZW1ibHlDb2RlQmxvY2s6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYg
dmlzaXRvcikKIHsKICAgICBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKiB0aGlzT2JqZWN0ID0ganND
YXN0PEpTV2ViQXNzZW1ibHlDb2RlQmxvY2sqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNU
X0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC05MCw2ICs5MSw4IEBAIHZvaWQgSlNX
ZWJBc3NlbWJseUNvZGVCbG9jazo6dmlzaXRDaGlsZHIKICAgICBCYXNlOjp2aXNpdENoaWxkcmVu
KHRoaXNPYmplY3QsIHZpc2l0b3IpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNXZWJB
c3NlbWJseUNvZGVCbG9jayk7CisKIHZvaWQgSlNXZWJBc3NlbWJseUNvZGVCbG9jazo6ZmluYWxp
emVVbmNvbmRpdGlvbmFsbHkoVk0mIHZtKQogewogICAgIGZvciAoYXV0byBpdGVyID0gbV9jYWxs
TGlua0luZm9zLmJlZ2luKCk7ICEhaXRlcjsgKytpdGVyKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suaAkocmV2
aXNpb24gMjczMTE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3Nl
bWJseUNvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxNy0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODYsNyArODYsNyBAQCBwcml2YXRl
OgogICAgIERFQ0xBUkVfRVhQT1JUX0lORk87CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5l
ZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOwogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7
Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwor
ICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBSZWY8V2FzbTo6Q29kZUJsb2NrPiBt
X2NvZGVCbG9jazsKICAgICBWZWN0b3I8TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPFdhc21FbnRyeVB0
clRhZz4+IG1fd2FzbVRvSlNFeGl0U3R1YnM7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9qcy9KU1dlYkFzc2VtYmx5R2xvYmFsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5R2xvYmFsLmNwcAkocmV2aXNpb24gMjcz
MTE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUdsb2Jh
bC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxOS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtNzEsNyArNzEsOCBAQCB2b2lkIEpTV2ViQXNzZW1ibHlHbG9i
YWw6OmRlc3Ryb3koSlNDZWxsCiAgICAgc3RhdGljX2Nhc3Q8SlNXZWJBc3NlbWJseUdsb2JhbCo+
KGNlbGwpLT5KU1dlYkFzc2VtYmx5R2xvYmFsOjp+SlNXZWJBc3NlbWJseUdsb2JhbCgpOwogfQog
Ci12b2lkIEpTV2ViQXNzZW1ibHlHbG9iYWw6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBT
bG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpT
V2ViQXNzZW1ibHlHbG9iYWw6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRv
ciYgdmlzaXRvcikKIHsKICAgICBKU1dlYkFzc2VtYmx5R2xvYmFsKiB0aGlzT2JqZWN0ID0ganND
YXN0PEpTV2ViQXNzZW1ibHlHbG9iYWwqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lO
SEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC04MCw2ICs4MSw4IEBAIHZvaWQgSlNXZWJB
c3NlbWJseUdsb2JhbDo6dmlzaXRDaGlsZHJlbigKICAgICB0aGlzT2JqZWN0LT5nbG9iYWwoKS0+
dmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU1dl
YkFzc2VtYmx5R2xvYmFsKTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBFTkFC
TEUoV0VCQVNTRU1CTFkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dl
YkFzc2VtYmx5R2xvYmFsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vanMvSlNXZWJBc3NlbWJseUdsb2JhbC5oCShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5R2xvYmFsLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOS0yMDIxIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtNTksNyArNTksNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIEpTV2ViQXNzZW1ibHlHbG9i
YWwoVk0mLCBTdHJ1Y3R1cmUqLCBSZWY8V2FzbTo6R2xvYmFsPiYmKTsKICAgICB2b2lkIGZpbmlz
aENyZWF0aW9uKFZNJik7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBT
bG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBSZWY8V2Fz
bTo6R2xvYmFsPiBtX2dsb2JhbDsKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5jcHAJKHJldmlzaW9uIDI3
MzExOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0
YW5jZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDE2LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03Myw3ICs3Myw4IEBAIHZvaWQgSlNXZWJBc3Nl
bWJseUluc3RhbmNlOjpkZXN0cm95KEpTQ2UKICAgICBzdGF0aWNfY2FzdDxKU1dlYkFzc2VtYmx5
SW5zdGFuY2UqPihjZWxsKS0+SlNXZWJBc3NlbWJseUluc3RhbmNlOjp+SlNXZWJBc3NlbWJseUlu
c3RhbmNlKCk7CiB9CiAKLXZvaWQgSlNXZWJBc3NlbWJseUluc3RhbmNlOjp2aXNpdENoaWxkcmVu
KEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPgordm9pZCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OnZpc2l0Q2hpbGRyZW5JbXBsKEpT
Q2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0g
anNDYXN0PEpTV2ViQXNzZW1ibHlJbnN0YW5jZSo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpF
Q1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTEwMiw2ICsxMDMsOCBAQCB2b2lk
IEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6dmlzaXRDaGlsZHJlCiAgICAgICAgIHZpc2l0b3IuYXBw
ZW5kVW5iYXJyaWVyZWQod3JhcHBlci5nZXQoKSk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJF
TihKU1dlYkFzc2VtYmx5SW5zdGFuY2UpOworCiB2b2lkIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6
ZmluYWxpemVDcmVhdGlvbihWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJl
ZjxXYXNtOjpDb2RlQmxvY2s+JiYgd2FzbUNvZGVCbG9jaywgSlNPYmplY3QqIGltcG9ydE9iamVj
dCwgV2FzbTo6Q3JlYXRpb25Nb2RlIGNyZWF0aW9uTW9kZSkKIHsKICAgICBtX2luc3RhbmNlLT5m
aW5hbGl6ZUNyZWF0aW9uKHRoaXMsIHdhc21Db2RlQmxvY2suY29weVJlZigpKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0
YW5jZS5oCShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEwNSw3ICsxMDUs
NyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIEpTV2ViQXNzZW1ibHlJbnN0YW5jZShWTSYsIFN0
cnVjdHVyZSosIFJlZjxXYXNtOjpJbnN0YW5jZT4mJik7CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlv
bihWTSYsIEpTV2ViQXNzZW1ibHlNb2R1bGUqLCBXZWJBc3NlbWJseU1vZHVsZVJlY29yZCopOwot
ICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAg
ICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgUmVmPFdhc206Okluc3RhbmNlPiBtX2lu
c3RhbmNlOwogICAgIFZNKiBtX3ZtOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
anMvSlNXZWJBc3NlbWJseU1lbW9yeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1lbW9yeS5jcHAJKHJldmlzaW9uIDI3MzExOSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNZW1vcnkuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
Ni0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMTU5LDcgKzE1OSw4IEBAIHZvaWQgSlNXZWJBc3NlbWJseU1l
bW9yeTo6ZGVzdHJveShKU0NlbGwKICAgICBtZW1vcnktPkpTV2ViQXNzZW1ibHlNZW1vcnk6On5K
U1dlYkFzc2VtYmx5TWVtb3J5KCk7CiB9CiAKLXZvaWQgSlNXZWJBc3NlbWJseU1lbW9yeTo6dmlz
aXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8
dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNXZWJBc3NlbWJseU1lbW9yeTo6dmlzaXRDaGlsZHJl
bkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGF1dG8qIHRoaXNP
YmplY3QgPSBqc0Nhc3Q8SlNXZWJBc3NlbWJseU1lbW9yeSo+KGNlbGwpOwogICAgIEFTU0VSVF9H
Q19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTE2OSw2ICsxNzAsOCBA
QCB2b2lkIEpTV2ViQXNzZW1ibHlNZW1vcnk6OnZpc2l0Q2hpbGRyZW4oCiAgICAgdmlzaXRvci5y
ZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQodGhpc09iamVjdC0+bWVtb3J5KCkuc2l6ZSgpKTsKIH0K
IAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTV2ViQXNzZW1ibHlNZW1vcnkpOworCiB9IC8vIG5h
bWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNZW1vcnkuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TWVtb3J5LmgJ
KHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2Vi
QXNzZW1ibHlNZW1vcnkuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTYtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTYzLDcgKzYzLDcgQEAgcHVibGlj
OgogcHJpdmF0ZToKICAgICBKU1dlYkFzc2VtYmx5TWVtb3J5KFZNJiwgU3RydWN0dXJlKik7CiAg
ICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOwotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwog
CiAgICAgUmVmPFdhc206Ok1lbW9yeT4gbV9tZW1vcnk7CiAgICAgV3JpdGVCYXJyaWVyPEpTQXJy
YXlCdWZmZXI+IG1fYnVmZmVyV3JhcHBlcjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuY3BwCShyZXZpc2lvbiAyNzMx
MTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEyNCw3ICsxMjQsOCBAQCB2b2lkIEpTV2ViQXNzZW1i
bHlNb2R1bGU6OnNldENvZGVCbG9jayhWCiAgICAgbV9jb2RlQmxvY2tzW3N0YXRpY19jYXN0PHNp
emVfdD4obW9kZSldLnNldCh2bSwgdGhpcywgY29kZUJsb2NrKTsKIH0KIAotdm9pZCBKU1dlYkFz
c2VtYmx5TW9kdWxlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZp
c2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1dlYkFzc2VtYmx5TW9k
dWxlOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7
CiAgICAgSlNXZWJBc3NlbWJseU1vZHVsZSogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1dlYkFzc2Vt
Ymx5TW9kdWxlKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2Jq
ZWN0LCBpbmZvKCkpOwpAQCAtMTM1LDYgKzEzNiw4IEBAIHZvaWQgSlNXZWJBc3NlbWJseU1vZHVs
ZTo6dmlzaXRDaGlsZHJlbigKICAgICAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9j
b2RlQmxvY2tzW2ldKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTV2ViQXNzZW1ibHlN
b2R1bGUpOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NF
TUJMWSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlN
b2R1bGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dl
YkFzc2VtYmx5TW9kdWxlLmgJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxOSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTgw
LDcgKzgwLDcgQEAgcHJpdmF0ZToKIAogICAgIEpTV2ViQXNzZW1ibHlNb2R1bGUoVk0mLCBTdHJ1
Y3R1cmUqLCBSZWY8V2FzbTo6TW9kdWxlPiYmKTsKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZN
Jik7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYp
OworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBSZWY8V2FzbTo6TW9kdWxlPiBt
X21vZHVsZTsKICAgICBXcml0ZUJhcnJpZXI8U3ltYm9sVGFibGU+IG1fZXhwb3J0U3ltYm9sVGFi
bGU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5VGFi
bGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2Vi
QXNzZW1ibHlUYWJsZS5jcHAJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlUYWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTkgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03
Miw3ICs3Miw4IEBAIHZvaWQgSlNXZWJBc3NlbWJseVRhYmxlOjpkZXN0cm95KEpTQ2VsbCoKICAg
ICBzdGF0aWNfY2FzdDxKU1dlYkFzc2VtYmx5VGFibGUqPihjZWxsKS0+SlNXZWJBc3NlbWJseVRh
YmxlOjp+SlNXZWJBc3NlbWJseVRhYmxlKCk7CiB9CiAKLXZvaWQgSlNXZWJBc3NlbWJseVRhYmxl
Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1w
bGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1dlYkFzc2VtYmx5VGFibGU6OnZpc2l0Q2hp
bGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU1dlYkFz
c2VtYmx5VGFibGUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNXZWJBc3NlbWJseVRhYmxlKj4oY2Vs
bCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpA
QCAtODEsNiArODIsOCBAQCB2b2lkIEpTV2ViQXNzZW1ibHlUYWJsZTo6dmlzaXRDaGlsZHJlbihK
CiAgICAgdGhpc09iamVjdC0+dGFibGUoKS0+dmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7CiB9CiAK
K0RFRklORV9WSVNJVF9DSElMRFJFTihKU1dlYkFzc2VtYmx5VGFibGUpOworCiBib29sIEpTV2Vi
QXNzZW1ibHlUYWJsZTo6Z3Jvdyh1aW50MzJfdCBkZWx0YSwgSlNWYWx1ZSBkZWZhdWx0VmFsdWUp
CiB7CiAgICAgaWYgKGRlbHRhID09IDApCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9KU1dlYkFzc2VtYmx5VGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5VGFibGUuaAkocmV2aXNpb24gMjczMTE5KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseVRhYmxlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTkg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIw
MjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC03MCw3ICs3MCw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgSlNXZWJB
c3NlbWJseVRhYmxlKFZNJiwgU3RydWN0dXJlKiwgUmVmPFdhc206OlRhYmxlPiYmKTsKICAgICB2
b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihK
U0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAg
ICBSZWY8V2FzbTo6VGFibGU+IG1fdGFibGU7CiB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5jcHAJKHJldmlzaW9u
IDI3MzExOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVu
Y3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxNi0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDUyLDcgKzQ1Miw4IEBAIFdlYkFzc2VtYmx5
RnVuY3Rpb246OldlYkFzc2VtYmx5RnVuY3Rpb24KICAgICAsIG1faW1wb3J0YWJsZUZ1bmN0aW9u
IHsgc2lnbmF0dXJlSW5kZXgsIHdhc21Ub1dhc21FbnRyeXBvaW50TG9hZExvY2F0aW9uIH0KIHsg
fQogCi12b2lkIFdlYkFzc2VtYmx5RnVuY3Rpb246OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxs
LCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lk
IFdlYkFzc2VtYmx5RnVuY3Rpb246OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlz
aXRvciYgdmlzaXRvcikKIHsKICAgICBXZWJBc3NlbWJseUZ1bmN0aW9uKiB0aGlzT2JqZWN0ID0g
anNDYXN0PFdlYkFzc2VtYmx5RnVuY3Rpb24qPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNU
X0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC00NjEsNiArNDYyLDggQEAgdm9pZCBX
ZWJBc3NlbWJseUZ1bmN0aW9uOjp2aXNpdENoaWxkcmVuKAogICAgIHZpc2l0b3IuYXBwZW5kKHRo
aXNPYmplY3QtPm1fanNUb1dhc21JQ0NhbGxlZSk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJF
TihXZWJBc3NlbWJseUZ1bmN0aW9uKTsKKwogdm9pZCBXZWJBc3NlbWJseUZ1bmN0aW9uOjpkZXN0
cm95KEpTQ2VsbCogY2VsbCkKIHsKICAgICBzdGF0aWNfY2FzdDxXZWJBc3NlbWJseUZ1bmN0aW9u
Kj4oY2VsbCktPldlYkFzc2VtYmx5RnVuY3Rpb246On5XZWJBc3NlbWJseUZ1bmN0aW9uKCk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlG
dW5jdGlvbi5oCShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC04Niw3ICs4Niw3
IEBAIHB1YmxpYzoKICAgICBXYXNtOjpJbnN0YW5jZSogcHJldmlvdXNJbnN0YW5jZShDYWxsRnJh
bWUqKTsKIAogcHJpdmF0ZToKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCos
IFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKICAgICBXZWJBc3Nl
bWJseUZ1bmN0aW9uKFZNJiwgTmF0aXZlRXhlY3V0YWJsZSosIEpTR2xvYmFsT2JqZWN0KiwgU3Ry
dWN0dXJlKiwgV2FzbTo6Q2FsbGVlJiBqc0VudHJ5cG9pbnQsIFdhc21Ub1dhc21JbXBvcnRhYmxl
RnVuY3Rpb246OkxvYWRMb2NhdGlvbiBlbnRyeXBvaW50TG9hZExvY2F0aW9uLCBXYXNtOjpTaWdu
YXR1cmVJbmRleCk7CiAKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4g
anNDYWxsRW50cnlwb2ludFNsb3coKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL1dlYkFzc2VtYmx5RnVuY3Rpb25CYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uQmFzZS5jcHAJKHJldmlzaW9u
IDI3MzExOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVu
Y3Rpb25CYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00MSw3ICs0MSw4IEBAIFdlYkFzc2VtYmx5RnVu
Y3Rpb25CYXNlOjpXZWJBc3NlbWJseUZ1bmMKICAgICA6IEJhc2Uodm0sIGV4ZWN1dGFibGUsIGds
b2JhbE9iamVjdCwgc3RydWN0dXJlKQogeyB9CiAKLXZvaWQgV2ViQXNzZW1ibHlGdW5jdGlvbkJh
c2U6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3Rl
bXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFdlYkFzc2VtYmx5RnVuY3Rpb25CYXNlOjp2
aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAg
V2ViQXNzZW1ibHlGdW5jdGlvbkJhc2UqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8V2ViQXNzZW1ibHlG
dW5jdGlvbkJhc2UqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNP
YmplY3QsIGluZm8oKSk7CkBAIC00OSw2ICs1MCw4IEBAIHZvaWQgV2ViQXNzZW1ibHlGdW5jdGlv
bkJhc2U6OnZpc2l0Q2hpbGQKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2luc3Rh
bmNlKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKFdlYkFzc2VtYmx5RnVuY3Rpb25CYXNl
KTsKKwogdm9pZCBXZWJBc3NlbWJseUZ1bmN0aW9uQmFzZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZt
LCBOYXRpdmVFeGVjdXRhYmxlKiBleGVjdXRhYmxlLCB1bnNpZ25lZCBsZW5ndGgsIGNvbnN0IFN0
cmluZyYgbmFtZSwgSlNXZWJBc3NlbWJseUluc3RhbmNlKiBpbnN0YW5jZSkKIHsKICAgICBCYXNl
OjpmaW5pc2hDcmVhdGlvbih2bSwgZXhlY3V0YWJsZSwgbGVuZ3RoLCBuYW1lKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb25CYXNlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5j
dGlvbkJhc2UuaAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbkJhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ2LDcg
KzQ2LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZJbnN0YW5jZSgp
IHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihXZWJBc3NlbWJseUZ1bmN0aW9uQmFzZSwgbV9pbnN0
YW5jZSk7IH0KIAogcHJvdGVjdGVkOgotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlND
ZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogICAgIHZv
aWQgZmluaXNoQ3JlYXRpb24oVk0mLCBOYXRpdmVFeGVjdXRhYmxlKiwgdW5zaWduZWQgbGVuZ3Ro
LCBjb25zdCBTdHJpbmcmIG5hbWUsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSopOwogICAgIFdlYkFz
c2VtYmx5RnVuY3Rpb25CYXNlKFZNJiwgTmF0aXZlRXhlY3V0YWJsZSosIEpTR2xvYmFsT2JqZWN0
KiwgU3RydWN0dXJlKik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dl
YkFzc2VtYmx5TW9kdWxlUmVjb3JkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZVJlY29yZC5jcHAJKHJldmlzaW9uIDI3MzEx
OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVj
b3JkLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTYtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTc4LDcgKzc4LDggQEAgdm9pZCBXZWJBc3NlbWJs
eU1vZHVsZVJlY29yZDo6ZmluaXNoQ3JlYQogICAgIH0KIH0KIAotdm9pZCBXZWJBc3NlbWJseU1v
ZHVsZVJlY29yZDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNp
dG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgV2ViQXNzZW1ibHlNb2R1bGVS
ZWNvcmQ6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikK
IHsKICAgICBXZWJBc3NlbWJseU1vZHVsZVJlY29yZCogdGhpc09iamVjdCA9IGpzQ2FzdDxXZWJB
c3NlbWJseU1vZHVsZVJlY29yZCo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJ
VFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTg4LDYgKzg5LDggQEAgdm9pZCBXZWJBc3NlbWJs
eU1vZHVsZVJlY29yZDo6dmlzaXRDaGlsZAogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3Qt
Pm1fZXhwb3J0c09iamVjdCk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihXZWJBc3NlbWJs
eU1vZHVsZVJlY29yZCk7CisKIHZvaWQgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OnByZXBhcmVM
aW5rKFZNJiB2bSwgSlNXZWJBc3NlbWJseUluc3RhbmNlKiBpbnN0YW5jZSkKIHsKICAgICBSRUxF
QVNFX0FTU0VSVCghbV9pbnN0YW5jZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9XZWJBc3NlbWJseU1vZHVsZVJlY29yZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmgJKHJldmlzaW9uIDI3
MzExOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxl
UmVjb3JkLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDE2LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02OSw3ICs2OSw3IEBAIHByaXZhdGU6CiAKICAg
ICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTR2xvYmFsT2JqZWN0KiwgVk0mLCBjb25zdCBXYXNtOjpN
b2R1bGVJbmZvcm1hdGlvbiYpOwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0Nl
bGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBX
cml0ZUJhcnJpZXI8SlNXZWJBc3NlbWJseUluc3RhbmNlPiBtX2luc3RhbmNlOwogICAgIFdyaXRl
QmFycmllcjxKU09iamVjdD4gbV9zdGFydEZ1bmN0aW9uOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5V3JhcHBlckZ1bmN0
aW9uLmNwcAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
anMvV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNy0yMDE4IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjcs
NyArNjcsOCBAQCBTdHJ1Y3R1cmUqIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uOjpjCiAgICAg
cmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlw
ZUluZm8oSlNGdW5jdGlvblR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKIH0KIAotdm9p
ZCBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGws
IFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQg
V2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb246OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2Vs
bCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbiog
dGhpc09iamVjdCA9IGpzQ2FzdDxXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbio+KGNlbGwpOwog
ICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTc2
LDYgKzc3LDggQEAgdm9pZCBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbjo6dmlzaXRDaAogICAg
IHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fZnVuY3Rpb24pOwogfQogCitERUZJTkVfVklT
SVRfQ0hJTERSRU4oV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24pOworCiBKU0NfREVGSU5FX0hP
U1RfRlVOQ1RJT04oY2FsbFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLCAoSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpKQogewogICAgIFZNJiB2bSA9
IGdsb2JhbE9iamVjdC0+dm0oKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L1dlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uaAkocmV2aXNpb24g
MjczMTE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlXcmFw
cGVyRnVuY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTctMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU5LDcgKzU5LDcgQEAgcHVibGljOgog
cHJpdmF0ZToKICAgICBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbihWTSYsIE5hdGl2ZUV4ZWN1
dGFibGUqLCBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSosIFdhc21Ub1dhc21JbXBvcnRhYmxl
RnVuY3Rpb24pOwogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBOYXRpdmVFeGVjdXRhYmxl
KiwgdW5zaWduZWQgbGVuZ3RoLCBjb25zdCBTdHJpbmcmIG5hbWUsIEpTT2JqZWN0KiwgSlNXZWJB
c3NlbWJseUluc3RhbmNlKik7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwq
LCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBXcml0
ZUJhcnJpZXI8SlNPYmplY3Q+IG1fZnVuY3Rpb247CiAgICAgLy8gSXQncyBzYWZlIHRvIGp1c3Qg
aG9sZCB0aGUgcmF3IFdhc21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rpb24gYmVjYXVzZSB3ZSBoYXZl
IGEgcmVmZXJlbmNlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2Uv
V2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw1MjkgQEAKKzIwMjEt
MDItMTggIE1hcmsgTGFtICA8bWFyay5sYW1AYXBwbGUuY29tPgorCisgICAgICAgIEltcGxlbWVu
dCBhIEdDIHZlcmlmaWVyLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjE3Mjc0CisgICAgICAgIHJkYXI6Ly81NjI1NTY4MworCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIDEuIEFkZGVkIHN1cHBvcnQgZm9yIHRo
ZSBHQyB2ZXJpZmllci4KKyAgICAgICAgMi4gQWxzbyByZW1vdmVkIE5vZGVGaWx0ZXJDb25kaXRp
b246OnZpc2l0QWdncmVnYXRlKCkgYmVjYXVzZSBpdCBpcyBub3QgdXNlZC4KKyAgICAgICAgMy4g
UmViYXNlZCBiaW5kaW5ncyB0ZXN0IHJlc3VsdHMuCisKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4
ZWRkYi9JREJPYmplY3RTdG9yZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9y
ZTo6dmlzaXRSZWZlcmVuY2VkSW5kZXhlcyBjb25zdCk6CisgICAgICAgICogTW9kdWxlcy9pbmRl
eGVkZGIvSURCT2JqZWN0U3RvcmUuaDoKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJU
cmFuc2FjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbjo6dmlzaXRS
ZWZlcmVuY2VkT2JqZWN0U3RvcmVzIGNvbnN0KToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRk
Yi9JREJUcmFuc2FjdGlvbi5oOgorICAgICAgICAqIE1vZHVsZXMvd2ViYXVkaW8vQXVkaW9CdWZm
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9CdWZmZXI6OnZpc2l0Q2hhbm5lbFdyYXBw
ZXJzKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQnVmZmVyLmg6CisgICAgICAg
ICogYmluZGluZ3MvanMvRE9NR0NPdXRwdXRDb25zdHJhaW50LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkRPTUdDT3V0cHV0Q29uc3RyYWludDo6ZXhlY3V0ZUltcGxJbXBsKToKKyAgICAgICAgKFdl
YkNvcmU6OkRPTUdDT3V0cHV0Q29uc3RyYWludDo6ZXhlY3V0ZUltcGwpOgorICAgICAgICAqIGJp
bmRpbmdzL2pzL0RPTUdDT3V0cHV0Q29uc3RyYWludC5oOgorICAgICAgICAqIGJpbmRpbmdzL2pz
L0pTQWJvcnRDb250cm9sbGVyQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTQWJvcnRD
b250cm9sbGVyOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbik6CisgICAgICAgICogYmluZGluZ3Mv
anMvSlNBYm9ydFNpZ25hbEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0Fib3J0U2ln
bmFsT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKToKKyAgICAgICAgKiBiaW5kaW5n
cy9qcy9KU0F0dHJDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNBdHRyOjp2aXNpdEFk
ZGl0aW9uYWxDaGlsZHJlbik6CisgICAgICAgICogYmluZGluZ3MvanMvSlNBdWRpb0J1ZmZlckN1
c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0F1ZGlvQnVmZmVyOjp2aXNpdEFkZGl0aW9u
YWxDaGlsZHJlbik6CisgICAgICAgICogYmluZGluZ3MvanMvSlNBdWRpb1RyYWNrQ3VzdG9tLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkpTQXVkaW9UcmFjazo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRy
ZW4pOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTQXVkaW9UcmFja0xpc3RDdXN0b20uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SlNBdWRpb1RyYWNrTGlzdDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRy
ZW4pOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTQXVkaW9Xb3JrbGV0UHJvY2Vzc29yQ3VzdG9t
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTQXVkaW9Xb3JrbGV0UHJvY2Vzc29yOjp2aXNpdEFk
ZGl0aW9uYWxDaGlsZHJlbik6CisgICAgICAgICogYmluZGluZ3MvanMvSlNDU1NSdWxlQ3VzdG9t
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTQ1NTUnVsZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRy
ZW4pOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTQ1NTUnVsZUxpc3RDdXN0b20uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SlNDU1NSdWxlTGlzdE93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVS
b290cyk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNDU1NTdHlsZURlY2xhcmF0aW9uQ3VzdG9t
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTQ1NTU3R5bGVEZWNsYXJhdGlvbjo6dmlzaXRBZGRp
dGlvbmFsQ2hpbGRyZW4pOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTQ2FsbGJhY2tEYXRhLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkpTQ2FsbGJhY2tEYXRhV2Vhazo6dmlzaXRKU0Z1bmN0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OkpTQ2FsbGJhY2tEYXRhV2Vhazo6V2Vha093bmVyOjppc1Jl
YWNoYWJsZUZyb21PcGFxdWVSb290cyk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNDYWxsYmFj
a0RhdGEuaDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQy
REN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQy
RE93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyk6CisgICAgICAgIChXZWJDb3JlOjpK
U0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4pOgorICAg
ICAgICAqIGJpbmRpbmdzL2pzL0pTQ3VzdG9tRXZlbnRDdXN0b20uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SlNDdXN0b21FdmVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4pOgorICAgICAgICAq
IGJpbmRpbmdzL2pzL0pTRE9NQnVpbHRpbkNvbnN0cnVjdG9yQmFzZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpKU0RPTUJ1aWx0aW5Db25zdHJ1Y3RvckJhc2U6OnZpc2l0Q2hpbGRyZW5JbXBsKToK
KyAgICAgICAgKFdlYkNvcmU6OkpTRE9NQnVpbHRpbkNvbnN0cnVjdG9yQmFzZTo6dmlzaXRDaGls
ZHJlbik6IERlbGV0ZWQuCisgICAgICAgICogYmluZGluZ3MvanMvSlNET01CdWlsdGluQ29uc3Ry
dWN0b3JCYXNlLmg6CisgICAgICAgICogYmluZGluZ3MvanMvSlNET01HbG9iYWxPYmplY3QuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SlNET01HbG9iYWxPYmplY3Q6OnZpc2l0Q2hpbGRyZW5JbXBs
KToKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NR2xvYmFsT2JqZWN0Ojp2aXNpdENoaWxkcmVuKTog
RGVsZXRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5oOgorICAg
ICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NR3VhcmRlZE9iamVjdC5oOgorICAgICAgICAqIGJpbmRp
bmdzL2pzL0pTRE9NUXVhZEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0RPTVF1YWQ6
OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTVdp
bmRvd0N1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0RPTVdpbmRvdzo6dmlzaXRBZGRp
dGlvbmFsQ2hpbGRyZW4pOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRGVwcmVjYXRlZENTU09N
VmFsdWVDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNEZXByZWNhdGVkQ1NTT01WYWx1
ZU93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyk6CisgICAgICAgICogYmluZGluZ3Mv
anMvSlNEb2N1bWVudEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0RvY3VtZW50Ojp2
aXNpdEFkZGl0aW9uYWxDaGlsZHJlbik6CisgICAgICAgICogYmluZGluZ3MvanMvSlNFcnJvckV2
ZW50Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTRXJyb3JFdmVudDo6dmlzaXRBZGRp
dGlvbmFsQ2hpbGRyZW4pOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRXZlbnRMaXN0ZW5lci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpKU0V2ZW50TGlzdGVuZXI6OnZpc2l0SlNGdW5jdGlvbklt
cGwpOgorICAgICAgICAoV2ViQ29yZTo6SlNFdmVudExpc3RlbmVyOjp2aXNpdEpTRnVuY3Rpb24p
OgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRXZlbnRMaXN0ZW5lci5oOgorICAgICAgICAqIGJp
bmRpbmdzL2pzL0pTRXZlbnRUYXJnZXRDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNF
dmVudFRhcmdldDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4pOgorICAgICAgICAqIGJpbmRpbmdz
L2pzL0pTRmV0Y2hFdmVudEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0ZldGNoRXZl
bnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0hU
TUxDYW52YXNFbGVtZW50Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTSFRNTENhbnZh
c0VsZW1lbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKToKKyAgICAgICAgKiBiaW5kaW5ncy9q
cy9KU0hUTUxUZW1wbGF0ZUVsZW1lbnRDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNI
VE1MVGVtcGxhdGVFbGVtZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbik6CisgICAgICAgICog
YmluZGluZ3MvanMvSlNIaXN0b3J5Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTSGlz
dG9yeTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4pOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pT
SURCQ3Vyc29yQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTSURCQ3Vyc29yOjp2aXNp
dEFkZGl0aW9uYWxDaGlsZHJlbik6CisgICAgICAgICogYmluZGluZ3MvanMvSlNJREJDdXJzb3JX
aXRoVmFsdWVDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNJREJDdXJzb3JXaXRoVmFs
dWU6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0lE
QkluZGV4Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTSURCSW5kZXg6OnZpc2l0QWRk
aXRpb25hbENoaWxkcmVuKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0lEQk9iamVjdFN0b3Jl
Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTSURCT2JqZWN0U3RvcmU6OnZpc2l0QWRk
aXRpb25hbENoaWxkcmVuKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0lEQlJlcXVlc3RDdXN0
b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNJREJSZXF1ZXN0Ojp2aXNpdEFkZGl0aW9uYWxD
aGlsZHJlbik6CisgICAgICAgICogYmluZGluZ3MvanMvSlNJREJUcmFuc2FjdGlvbkN1c3RvbS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpKU0lEQlRyYW5zYWN0aW9uOjp2aXNpdEFkZGl0aW9uYWxD
aGlsZHJlbik6CisgICAgICAgICogYmluZGluZ3MvanMvSlNJbnRlcnNlY3Rpb25PYnNlcnZlckN1
c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0ludGVyc2VjdGlvbk9ic2VydmVyOjp2aXNp
dEFkZGl0aW9uYWxDaGlsZHJlbik6CisgICAgICAgICogYmluZGluZ3MvanMvSlNJbnRlcnNlY3Rp
b25PYnNlcnZlckVudHJ5Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTSW50ZXJzZWN0
aW9uT2JzZXJ2ZXJFbnRyeTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4pOgorICAgICAgICAqIGJp
bmRpbmdzL2pzL0pTTWVzc2FnZUNoYW5uZWxDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SlNNZXNzYWdlQ2hhbm5lbDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4pOgorICAgICAgICAqIGJp
bmRpbmdzL2pzL0pTTWVzc2FnZUV2ZW50Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpT
TWVzc2FnZUV2ZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbik6CisgICAgICAgICogYmluZGlu
Z3MvanMvSlNNZXNzYWdlUG9ydEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU01lc3Nh
Z2VQb3J0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbik6CisgICAgICAgICogYmluZGluZ3MvanMv
SlNNdXRhdGlvbk9ic2VydmVyQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTTXV0YXRp
b25PYnNlcnZlcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4pOgorICAgICAgICAoV2ViQ29yZTo6
SlNNdXRhdGlvbk9ic2VydmVyT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKToKKyAg
ICAgICAgKiBiaW5kaW5ncy9qcy9KU011dGF0aW9uUmVjb3JkQ3VzdG9tLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkpTTXV0YXRpb25SZWNvcmQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKToKKyAg
ICAgICAgKiBiaW5kaW5ncy9qcy9KU05hdmlnYXRvckN1c3RvbS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpKU05hdmlnYXRvcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4pOgorICAgICAgICAqIGJp
bmRpbmdzL2pzL0pTTm9kZUN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjppc1JlYWNoYWJs
ZUZyb21ET00pOgorICAgICAgICAoV2ViQ29yZTo6SlNOb2RlT3duZXI6OmlzUmVhY2hhYmxlRnJv
bU9wYXF1ZVJvb3RzKToKKyAgICAgICAgKFdlYkNvcmU6OkpTTm9kZTo6dmlzaXRBZGRpdGlvbmFs
Q2hpbGRyZW4pOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTTm9kZUl0ZXJhdG9yQ3VzdG9tLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkpTTm9kZUl0ZXJhdG9yOjp2aXNpdEFkZGl0aW9uYWxDaGls
ZHJlbik6CisgICAgICAgICogYmluZGluZ3MvanMvSlNOb2RlTGlzdEN1c3RvbS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpKU05vZGVMaXN0T3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3Rz
KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU09mZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyREN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU09mZnNjcmVlbkNhbnZhc1JlbmRl
cmluZ0NvbnRleHQyRE93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyk6CisgICAgICAg
IChXZWJDb3JlOjpKU09mZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6dmlzaXRBZGRp
dGlvbmFsQ2hpbGRyZW4pOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTUGFpbnRSZW5kZXJpbmdD
b250ZXh0MkRDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNQYWludFJlbmRlcmluZ0Nv
bnRleHQyRE93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyk6CisgICAgICAgIChXZWJD
b3JlOjpKU1BhaW50UmVuZGVyaW5nQ29udGV4dDJEOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbik6
CisgICAgICAgICogYmluZGluZ3MvanMvSlNQYWludFdvcmtsZXRHbG9iYWxTY29wZUN1c3RvbS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpKU1BhaW50V29ya2xldEdsb2JhbFNjb3BlOjp2aXNpdEFk
ZGl0aW9uYWxDaGlsZHJlbik6CisgICAgICAgICogYmluZGluZ3MvanMvSlNQYXltZW50TWV0aG9k
Q2hhbmdlRXZlbnRDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNQYXltZW50TWV0aG9k
Q2hhbmdlRXZlbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKToKKyAgICAgICAgKiBiaW5kaW5n
cy9qcy9KU1BheW1lbnRSZXNwb25zZUN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Bh
eW1lbnRSZXNwb25zZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4pOgorICAgICAgICAqIGJpbmRp
bmdzL2pzL0pTUGVyZm9ybWFuY2VPYnNlcnZlckN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpKU1BlcmZvcm1hbmNlT2JzZXJ2ZXI6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKToKKyAgICAg
ICAgKFdlYkNvcmU6OkpTUGVyZm9ybWFuY2VPYnNlcnZlck93bmVyOjppc1JlYWNoYWJsZUZyb21P
cGFxdWVSb290cyk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNQb3BTdGF0ZUV2ZW50Q3VzdG9t
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTUG9wU3RhdGVFdmVudDo6dmlzaXRBZGRpdGlvbmFs
Q2hpbGRyZW4pOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTUHJvbWlzZVJlamVjdGlvbkV2ZW50
Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTUHJvbWlzZVJlamVjdGlvbkV2ZW50Ojp2
aXNpdEFkZGl0aW9uYWxDaGlsZHJlbik6CisgICAgICAgICogYmluZGluZ3MvanMvSlNSZXNpemVP
YnNlcnZlckN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Jlc2l6ZU9ic2VydmVyOjp2
aXNpdEFkZGl0aW9uYWxDaGlsZHJlbik6CisgICAgICAgICogYmluZGluZ3MvanMvSlNSZXNpemVP
YnNlcnZlckVudHJ5Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTUmVzaXplT2JzZXJ2
ZXJFbnRyeTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4pOgorICAgICAgICAqIGJpbmRpbmdzL2pz
L0pTU1ZHVmlld1NwZWNDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNTVkdWaWV3U3Bl
Yzo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4pOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTU2Vy
dmljZVdvcmtlckdsb2JhbFNjb3BlQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTU2Vy
dmljZVdvcmtlckdsb2JhbFNjb3BlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbik6CisgICAgICAg
ICogYmluZGluZ3MvanMvSlNTdGF0aWNSYW5nZUN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpKU1N0YXRpY1JhbmdlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbik6CisgICAgICAgICogYmlu
ZGluZ3MvanMvSlNTdHlsZVNoZWV0Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTU3R5
bGVTaGVldDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4pOgorICAgICAgICAqIGJpbmRpbmdzL2pz
L0pTVGV4dFRyYWNrQ3VlQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGV4dFRyYWNr
Q3VlT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKToKKyAgICAgICAgKFdlYkNvcmU6
OkpTVGV4dFRyYWNrQ3VlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbik6CisgICAgICAgICogYmlu
ZGluZ3MvanMvSlNUZXh0VHJhY2tDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXh0
VHJhY2s6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9K
U1RleHRUcmFja0xpc3RDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXh0VHJhY2tM
aXN0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbik6CisgICAgICAgICogYmluZGluZ3MvanMvSlNU
cmVlV2Fsa2VyQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVHJlZVdhbGtlcjo6dmlz
aXRBZGRpdGlvbmFsQ2hpbGRyZW4pOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTVW5kb0l0ZW1D
dXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNVbmRvSXRlbTo6dmlzaXRBZGRpdGlvbmFs
Q2hpbGRyZW4pOgorICAgICAgICAoV2ViQ29yZTo6SlNVbmRvSXRlbU93bmVyOjppc1JlYWNoYWJs
ZUZyb21PcGFxdWVSb290cyk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNWYWx1ZUluV3JhcHBl
ZE9iamVjdC5oOgorICAgICAgICAoV2ViQ29yZTo6SlNWYWx1ZUluV3JhcHBlZE9iamVjdDo6dmlz
aXQgY29uc3QpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTVmlkZW9UcmFja0N1c3RvbS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpKU1ZpZGVvVHJhY2s6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVu
KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1ZpZGVvVHJhY2tMaXN0Q3VzdG9tLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkpTVmlkZW9UcmFja0xpc3Q6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVu
KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1dlYkdMMlJlbmRlcmluZ0NvbnRleHRDdXN0b20u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNXZWJHTDJSZW5kZXJpbmdDb250ZXh0Ojp2aXNpdEFk
ZGl0aW9uYWxDaGlsZHJlbik6CisgICAgICAgICogYmluZGluZ3MvanMvSlNXZWJHTFJlbmRlcmlu
Z0NvbnRleHRDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9K
U1dvcmtlckdsb2JhbFNjb3BlQmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1dvcmtlckds
b2JhbFNjb3BlQmFzZTo6dmlzaXRDaGlsZHJlbkltcGwpOgorICAgICAgICAoV2ViQ29yZTo6SlNX
b3JrZXJHbG9iYWxTY29wZUJhc2U6OnZpc2l0Q2hpbGRyZW4pOiBEZWxldGVkLgorICAgICAgICAq
IGJpbmRpbmdzL2pzL0pTV29ya2VyR2xvYmFsU2NvcGVCYXNlLmg6CisgICAgICAgICogYmluZGlu
Z3MvanMvSlNXb3JrZXJHbG9iYWxTY29wZUN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpK
U1dvcmtlckdsb2JhbFNjb3BlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbik6CisgICAgICAgICog
YmluZGluZ3MvanMvSlNXb3JrZXJOYXZpZ2F0b3JDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SlNXb3JrZXJOYXZpZ2F0b3I6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKToKKyAgICAgICAg
KiBiaW5kaW5ncy9qcy9KU1dvcmtsZXRHbG9iYWxTY29wZUJhc2UuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SlNXb3JrbGV0R2xvYmFsU2NvcGVCYXNlOjp2aXNpdENoaWxkcmVuSW1wbCk6CisgICAg
ICAgIChXZWJDb3JlOjpKU1dvcmtsZXRHbG9iYWxTY29wZUJhc2U6OnZpc2l0Q2hpbGRyZW4pOiBE
ZWxldGVkLgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTV29ya2xldEdsb2JhbFNjb3BlQmFzZS5o
OgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTWE1MSHR0cFJlcXVlc3RDdXN0b20uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SlNYTUxIdHRwUmVxdWVzdDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4p
OgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTWFBhdGhSZXN1bHRDdXN0b20uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SlNYUGF0aFJlc3VsdDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4pOgorICAg
ICAgICAqIGJpbmRpbmdzL2pzL1dlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpXZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXI6OkpTQXJyYXlCdWZmZXJP
d25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMpOgorICAgICAgICAqIGJpbmRpbmdzL2pz
L1dlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlci5oOgorICAgICAgICAqIGJpbmRpbmdzL3Njcmlw
dHMvQ29kZUdlbmVyYXRvckpTLnBtOgorICAgICAgICAoR2VuZXJhdGVIZWFkZXIpOgorICAgICAg
ICAoR2VuZXJhdGVJbXBsZW1lbnRhdGlvbik6CisgICAgICAgIChHZW5lcmF0ZUNhbGxiYWNrSGVh
ZGVyQ29udGVudCk6CisgICAgICAgIChHZW5lcmF0ZUNhbGxiYWNrSW1wbGVtZW50YXRpb25Db250
ZW50KToKKyAgICAgICAgKEdlbmVyYXRlSXRlcmFibGVEZWZpbml0aW9uKToKKyAgICAgICAgKiBi
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNET01XaW5kb3cuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SlNET01XaW5kb3c6OnN1YnNwYWNlRm9ySW1wbCk6CisgICAgICAgICogYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGUuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SlNEZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZTo6c3Vic3BhY2VGb3JJbXBsKToK
KyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNFeHBvc2VkVG9Xb3JrZXJBbmRX
aW5kb3cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNFeHBvc2VkVG9Xb3JrZXJBbmRXaW5kb3c6
OnN1YnNwYWNlRm9ySW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpKU0V4cG9zZWRUb1dvcmtlckFu
ZFdpbmRvd093bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyk6CisgICAgICAgICogYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTRXhwb3NlZFRvV29ya2VyQW5kV2luZG93Lmg6CisgICAg
ICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTUGFpbnRXb3JrbGV0R2xvYmFsU2NvcGUu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNQYWludFdvcmtsZXRHbG9iYWxTY29wZTo6c3Vic3Bh
Y2VGb3JJbXBsKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNTZXJ2aWNl
V29ya2VyR2xvYmFsU2NvcGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNTZXJ2aWNlV29ya2Vy
R2xvYmFsU2NvcGU6OnN1YnNwYWNlRm9ySW1wbCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdENFUmVhY3Rpb25zLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVz
dENFUmVhY3Rpb25zOjpzdWJzcGFjZUZvckltcGwpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0
Q0VSZWFjdGlvbnNPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMpOgorICAgICAgICAq
IGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDRVJlYWN0aW9ucy5oOgorICAgICAgICAq
IGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXI6OnN1YnNw
YWNlRm9ySW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lm
aWVyT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKToKKyAgICAgICAgKiBiaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllci5oOgorICAgICAg
ICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDYWxsVHJhY2VyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkpTVGVzdENhbGxUcmFjZXI6OnN1YnNwYWNlRm9ySW1wbCk6CisgICAgICAg
IChXZWJDb3JlOjpKU1Rlc3RDYWxsVHJhY2VyT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJv
b3RzKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q2FsbFRyYWNl
ci5oOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDbGFzc1dpdGhK
U0J1aWx0aW5Db25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RDbGFzc1dp
dGhKU0J1aWx0aW5Db25zdHJ1Y3Rvcjo6c3Vic3BhY2VGb3JJbXBsKToKKyAgICAgICAgKFdlYkNv
cmU6OkpTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yT3duZXI6OmlzUmVhY2hhYmxl
RnJvbU9wYXF1ZVJvb3RzKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IuaDoKKyAgICAgICAgKiBiaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q29uZGl0aW9uYWxJbmNsdWRlcy5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpKU1Rlc3RDb25kaXRpb25hbEluY2x1ZGVzOjpzdWJzcGFjZUZvckltcGwpOgorICAg
ICAgICAoV2ViQ29yZTo6SlNUZXN0Q29uZGl0aW9uYWxJbmNsdWRlc093bmVyOjppc1JlYWNoYWJs
ZUZyb21PcGFxdWVSb290cyk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdENvbmRpdGlvbmFsSW5jbHVkZXMuaDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0Q29uZGl0aW9uYWxseVJlYWRXcml0ZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpKU1Rlc3RDb25kaXRpb25hbGx5UmVhZFdyaXRlOjpzdWJzcGFjZUZvckltcGwpOgorICAgICAg
ICAoV2ViQ29yZTo6SlNUZXN0Q29uZGl0aW9uYWxseVJlYWRXcml0ZU93bmVyOjppc1JlYWNoYWJs
ZUZyb21PcGFxdWVSb290cyk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdENvbmRpdGlvbmFsbHlSZWFkV3JpdGUuaDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0RE9NSklULmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdERPTUpJ
VDo6c3Vic3BhY2VGb3JJbXBsKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0RGVmYXVsdFRvSlNPTi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3REZWZhdWx0
VG9KU09OOjpzdWJzcGFjZUZvckltcGwpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0RGVmYXVs
dFRvSlNPTk93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyk6CisgICAgICAgICogYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdERlZmF1bHRUb0pTT04uaDoKKyAgICAgICAgKiBi
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RGVmYXVsdFRvSlNPTkZpbHRlcmVkQnlFeHBv
c2VkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdERlZmF1bHRUb0pTT05GaWx0ZXJlZEJ5
RXhwb3NlZDo6c3Vic3BhY2VGb3JJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdERlZmF1
bHRUb0pTT05GaWx0ZXJlZEJ5RXhwb3NlZE93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290
cyk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdERlZmF1bHRUb0pT
T05GaWx0ZXJlZEJ5RXhwb3NlZC5oOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3REZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhlcml0YW5jZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpKU1Rlc3REZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhlcml0YW5jZTo6c3Vic3BhY2VG
b3JJbXBsKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RGVmYXVs
dFRvSlNPTkluaGVyaXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0RGVmYXVsdFRvSlNP
TkluaGVyaXQ6OnN1YnNwYWNlRm9ySW1wbCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWwuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbDo6c3Vic3BhY2VGb3JJbXBsKToK
KyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RG9tYWluU2VjdXJpdHku
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0RG9tYWluU2VjdXJpdHk6OnN1YnNwYWNlRm9y
SW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3REb21haW5TZWN1cml0eU93bmVyOjppc1Jl
YWNoYWJsZUZyb21PcGFxdWVSb290cyk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdERvbWFpblNlY3VyaXR5Lmg6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdEVuYWJsZWRCeVNldHRpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNU
ZXN0RW5hYmxlZEJ5U2V0dGluZzo6c3Vic3BhY2VGb3JJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6
OkpTVGVzdEVuYWJsZWRCeVNldHRpbmdPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMp
OgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFbmFibGVkQnlTZXR0
aW5nLmg6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEVuYWJsZWRG
b3JDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEVuYWJsZWRGb3JDb250ZXh0
OjpzdWJzcGFjZUZvckltcGwpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0RW5hYmxlZEZvckNv
bnRleHRPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMpOgorICAgICAgICAqIGJpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFbmFibGVkRm9yQ29udGV4dC5oOgorICAgICAgICAq
IGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFdmVudENvbnN0cnVjdG9yLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkpTVGVzdEV2ZW50Q29uc3RydWN0b3I6OnN1YnNwYWNlRm9ySW1wbCk6
CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV2ZW50VGFyZ2V0LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEV2ZW50VGFyZ2V0OjpzdWJzcGFjZUZvckltcGwp
OgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFeGNlcHRpb24uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0RXhjZXB0aW9uOjpzdWJzcGFjZUZvckltcGwpOgor
ICAgICAgICAoV2ViQ29yZTo6SlNUZXN0RXhjZXB0aW9uT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9w
YXF1ZVJvb3RzKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXhj
ZXB0aW9uLmg6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEdlbmVy
YXRlSXNSZWFjaGFibGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0R2VuZXJhdGVJc1Jl
YWNoYWJsZTo6c3Vic3BhY2VGb3JJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEdlbmVy
YXRlSXNSZWFjaGFibGVPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMpOgorICAgICAg
ICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlLmg6
CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEdsb2JhbE9iamVjdC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RHbG9iYWxPYmplY3Q6OnN1YnNwYWNlRm9ySW1w
bCk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RHbG9iYWxPYmplY3RPd25lcjo6aXNSZWFjaGFi
bGVGcm9tT3BhcXVlUm9vdHMpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RHbG9iYWxPYmplY3QuaDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0SW5kZXhlZFNldHRlck5vSWRlbnRpZmllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpK
U1Rlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyOjpzdWJzcGFjZUZvckltcGwpOgorICAgICAg
ICAoV2ViQ29yZTo6SlNUZXN0SW5kZXhlZFNldHRlck5vSWRlbnRpZmllck93bmVyOjppc1JlYWNo
YWJsZUZyb21PcGFxdWVSb290cyk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIuaDoKKyAgICAgICAgKiBiaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbjo6
c3Vic3BhY2VGb3JJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEluZGV4ZWRTZXR0ZXJU
aHJvd2luZ0V4Y2VwdGlvbk93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyk6CisgICAg
ICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2lu
Z0V4Y2VwdGlvbi5oOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJ
bmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0
SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyOjpzdWJzcGFjZUZvckltcGwpOgorICAgICAgICAo
V2ViQ29yZTo6SlNUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyT3duZXI6OmlzUmVhY2hh
YmxlRnJvbU9wYXF1ZVJvb3RzKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyLmg6CisgICAgICAgICogYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdEludGVyZmFjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpq
c1Rlc3RJbnRlcmZhY2VQcm90b3R5cGVGdW5jdGlvbl9lbnRyaWVzQ2FsbGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkpTVGVzdEludGVyZmFjZTo6c3Vic3BhY2VGb3JJbXBsKToKKyAgICAgICAgKFdl
YkNvcmU6OkpTVGVzdEludGVyZmFjZU93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyk6
CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEludGVyZmFjZS5oOgor
ICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbnRlcmZhY2VMZWFkaW5n
VW5kZXJzY29yZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RJbnRlcmZhY2VMZWFkaW5n
VW5kZXJzY29yZTo6c3Vic3BhY2VGb3JJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdElu
dGVyZmFjZUxlYWRpbmdVbmRlcnNjb3JlT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3Rz
KToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW50ZXJmYWNlTGVh
ZGluZ1VuZGVyc2NvcmUuaDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0SXRlcmFibGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0SXRlcmFibGVQcm90b3R5
cGVGdW5jdGlvbl9lbnRyaWVzQ2FsbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEl0ZXJh
YmxlOjpzdWJzcGFjZUZvckltcGwpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0SXRlcmFibGVP
d25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMpOgorICAgICAgICAqIGJpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RJdGVyYWJsZS5oOgorICAgICAgICAqIGJpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpKU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rvcjo6c3Vic3BhY2VGb3JJbXBsKToKKyAgICAg
ICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TGVnYWN5RmFjdG9yeUZ1bmN0aW9u
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdExlZ2FjeUZhY3RvcnlGdW5jdGlvbjo6c3Vi
c3BhY2VGb3JJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdExlZ2FjeUZhY3RvcnlGdW5j
dGlvbk93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyk6CisgICAgICAgICogYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdExlZ2FjeUZhY3RvcnlGdW5jdGlvbi5oOgorICAgICAg
ICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RMZWdhY3lOb0ludGVyZmFjZU9iamVj
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RMZWdhY3lOb0ludGVyZmFjZU9iamVjdDo6
c3Vic3BhY2VGb3JJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdExlZ2FjeU5vSW50ZXJm
YWNlT2JqZWN0T3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKToKKyAgICAgICAgKiBi
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TGVnYWN5Tm9JbnRlcmZhY2VPYmplY3QuaDoK
KyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TGVnYWN5T3ZlcnJpZGVC
dWlsdElucy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RMZWdhY3lPdmVycmlkZUJ1aWx0
SW5zOjpzdWJzcGFjZUZvckltcGwpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TGVnYWN5T3Zl
cnJpZGVCdWlsdEluc093bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyk6CisgICAgICAg
ICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMu
aDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TWFwTGlrZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RNYXBMaWtlOjpzdWJzcGFjZUZvckltcGwpOgorICAg
ICAgICAoV2ViQ29yZTo6SlNUZXN0TWFwTGlrZU93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVS
b290cyk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE1hcExpa2Uu
aDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TWFwTGlrZVdpdGhP
dmVycmlkZGVuT3BlcmF0aW9ucy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RNYXBMaWtl
V2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zOjpzdWJzcGFjZUZvckltcGwpOgorICAgICAgICAoV2Vi
Q29yZTo6SlNUZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9uc093bmVyOjppc1JlYWNo
YWJsZUZyb21PcGFxdWVSb290cyk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnMuaDoKKyAgICAgICAgKiBiaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVudGlm
aWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5v
SWRlbnRpZmllcjo6c3Vic3BhY2VGb3JJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5h
bWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllck93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFx
dWVSb290cyk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVk
QW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllci5oOgorICAgICAgICAqIGJpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2lu
Z0V4Y2VwdGlvbjo6c3Vic3BhY2VGb3JJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5h
bWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uT3duZXI6OmlzUmVhY2hhYmxlRnJv
bU9wYXF1ZVJvb3RzKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24uaDoKKyAgICAgICAgKiBiaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50
aWZpZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVy
V2l0aElkZW50aWZpZXI6OnN1YnNwYWNlRm9ySW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rl
c3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllck93bmVyOjppc1JlYWNoYWJsZUZy
b21PcGFxdWVSb290cyk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyLmg6CisgICAgICAgICogYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkRGVsZXRlck5vSWRlbnRpZmllci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZERlbGV0ZXJOb0lkZW50aWZpZXI6OnN1YnNwYWNl
Rm9ySW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZERlbGV0ZXJOb0lkZW50aWZp
ZXJPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMpOgorICAgICAgICAqIGJpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZERlbGV0ZXJOb0lkZW50aWZpZXIuaDoKKyAgICAg
ICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWREZWxldGVyVGhyb3dpbmdF
eGNlcHRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWREZWxldGVyVGhyb3dp
bmdFeGNlcHRpb246OnN1YnNwYWNlRm9ySW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RO
YW1lZERlbGV0ZXJUaHJvd2luZ0V4Y2VwdGlvbk93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVS
b290cyk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkRGVs
ZXRlclRocm93aW5nRXhjZXB0aW9uLmg6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdE5hbWVkRGVsZXRlcldpdGhJZGVudGlmaWVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkpTVGVzdE5hbWVkRGVsZXRlcldpdGhJZGVudGlmaWVyOjpzdWJzcGFjZUZvckltcGwpOgor
ICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWREZWxldGVyV2l0aElkZW50aWZpZXJPd25lcjo6
aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3ROYW1lZERlbGV0ZXJXaXRoSWRlbnRpZmllci5oOgorICAgICAgICAqIGJp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZERlbGV0ZXJXaXRoSW5kZXhlZEdldHRl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZERlbGV0ZXJXaXRoSW5kZXhlZEdl
dHRlcjo6c3Vic3BhY2VGb3JJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkRGVs
ZXRlcldpdGhJbmRleGVkR2V0dGVyT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKToK
KyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWREZWxldGVyV2l0
aEluZGV4ZWRHZXR0ZXIuaDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1l
ZEdldHRlckNhbGxXaXRoOjpzdWJzcGFjZUZvckltcGwpOgorICAgICAgICAoV2ViQ29yZTo6SlNU
ZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aE93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyk6
CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkR2V0dGVyQ2Fs
bFdpdGguaDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRH
ZXR0ZXJOb0lkZW50aWZpZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWRHZXR0
ZXJOb0lkZW50aWZpZXI6OnN1YnNwYWNlRm9ySW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rl
c3ROYW1lZEdldHRlck5vSWRlbnRpZmllck93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290
cyk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkR2V0dGVy
Tm9JZGVudGlmaWVyLmg6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dE5hbWVkR2V0dGVyV2l0aElkZW50aWZpZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0
TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmllcjo6c3Vic3BhY2VGb3JJbXBsKToKKyAgICAgICAgKFdl
YkNvcmU6OkpTVGVzdE5hbWVkR2V0dGVyV2l0aElkZW50aWZpZXJPd25lcjo6aXNSZWFjaGFibGVG
cm9tT3BhcXVlUm9vdHMpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3ROYW1lZEdldHRlcldpdGhJZGVudGlmaWVyLmg6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkpTVGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyOjpzdWJzcGFjZUZvckltcGwpOgor
ICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXJPd25lcjo6aXNS
ZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3ROYW1lZFNldHRlck5vSWRlbnRpZmllci5oOgorICAgICAgICAqIGJpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0aW9uLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb246OnN1
YnNwYWNlRm9ySW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZFNldHRlclRocm93
aW5nRXhjZXB0aW9uT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKToKKyAgICAgICAg
KiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2Vw
dGlvbi5oOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNl
dHRlcldpdGhJZGVudGlmaWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkU2V0
dGVyV2l0aElkZW50aWZpZXI6OnN1YnNwYWNlRm9ySW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpK
U1Rlc3ROYW1lZFNldHRlcldpdGhJZGVudGlmaWVyT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1
ZVJvb3RzKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRT
ZXR0ZXJXaXRoSWRlbnRpZmllci5oOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkpTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXI6OnN1YnNwYWNlRm9ySW1wbCk6
CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyT3du
ZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlci5oOgorICAgICAg
ICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVk
R2V0dGVyQW5kU2V0dGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkU2V0dGVy
V2l0aEluZGV4ZWRHZXR0ZXJBbmRTZXR0ZXI6OnN1YnNwYWNlRm9ySW1wbCk6CisgICAgICAgIChX
ZWJDb3JlOjpKU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQW5kU2V0dGVyT3duZXI6
OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRlci5oOgor
ICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhM
ZWdhY3lPdmVycmlkZUJ1aWx0SW5zLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVk
U2V0dGVyV2l0aExlZ2FjeU92ZXJyaWRlQnVpbHRJbnM6OnN1YnNwYWNlRm9ySW1wbCk6CisgICAg
ICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lPdmVycmlkZUJ1aWx0SW5z
T3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKToKKyAgICAgICAgKiBiaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5T3ZlcnJpZGVCdWlsdElu
cy5oOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRl
cldpdGhMZWdhY3lVbmZvcmdlYWJsZVByb3BlcnRpZXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVzOjpzdWJzcGFj
ZUZvckltcGwpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5
VW5mb3JnZWFibGVQcm9wZXJ0aWVzT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKToK
KyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRo
TGVnYWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVzLmg6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGll
c0FuZExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0
TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVzQW5kTGVnYWN5T3ZlcnJp
ZGVCdWlsdEluczo6c3Vic3BhY2VGb3JJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5h
bWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllc0FuZExlZ2FjeU92ZXJyaWRl
QnVpbHRJbnNPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMpOgorICAgICAgICAqIGJp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lVbmZvcmdl
YWJsZVByb3BlcnRpZXNBbmRMZWdhY3lPdmVycmlkZUJ1aWx0SW5zLmg6CisgICAgICAgICogYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
anNUZXN0Tm9kZVByb3RvdHlwZUZ1bmN0aW9uX2VudHJpZXNDYWxsZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6SlNUZXN0Tm9kZTo6c3Vic3BhY2VGb3JJbXBsKToKKyAgICAgICAgKiBiaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE9i
ajo6c3Vic3BhY2VGb3JJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE9iajo6dmlzaXRD
aGlsZHJlbkltcGwpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0T2JqT3duZXI6OmlzUmVhY2hh
YmxlRnJvbU9wYXF1ZVJvb3RzKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE9iajo6dmlzaXRD
aGlsZHJlbik6IERlbGV0ZWQuCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdE9iai5oOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPcGVy
YXRpb25Db25kaXRpb25hbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RPcGVyYXRpb25D
b25kaXRpb25hbDo6c3Vic3BhY2VGb3JJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE9w
ZXJhdGlvbkNvbmRpdGlvbmFsT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKToKKyAg
ICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3BlcmF0aW9uQ29uZGl0aW9u
YWwuaDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3ZlcmxvYWRl
ZENvbnN0cnVjdG9ycy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RPdmVybG9hZGVkQ29u
c3RydWN0b3JzOjpzdWJzcGFjZUZvckltcGwpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0T3Zl
cmxvYWRlZENvbnN0cnVjdG9yc093bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyk6Cisg
ICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE92ZXJsb2FkZWRDb25zdHJ1
Y3RvcnMuaDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3Zlcmxv
YWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rl
c3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNlOjpzdWJzcGFjZUZvckltcGwpOgor
ICAgICAgICAoV2ViQ29yZTo6SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5j
ZU93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyk6CisgICAgICAgICogYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2Uu
aDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0UGx1Z2luSW50ZXJm
YWNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdFBsdWdpbkludGVyZmFjZTo6c3Vic3Bh
Y2VGb3JJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdFBsdWdpbkludGVyZmFjZU93bmVy
Ojppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdFBsdWdpbkludGVyZmFjZS5oOgorICAgICAgICAqIGJpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RQcm9taXNlUmVqZWN0aW9uRXZlbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SlNUZXN0UHJvbWlzZVJlamVjdGlvbkV2ZW50OjpzdWJzcGFjZUZvckltcGwpOgor
ICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RSZWFkT25seU1hcExpa2Uu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0UmVhZE9ubHlNYXBMaWtlOjpzdWJzcGFjZUZv
ckltcGwpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0UmVhZE9ubHlNYXBMaWtlT3duZXI6Omlz
UmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0UmVhZE9ubHlNYXBMaWtlLmg6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdFJlYWRPbmx5U2V0TGlrZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpK
U1Rlc3RSZWFkT25seVNldExpa2U6OnN1YnNwYWNlRm9ySW1wbCk6CisgICAgICAgIChXZWJDb3Jl
OjpKU1Rlc3RSZWFkT25seVNldExpa2VPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMp
OgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RSZWFkT25seVNldExp
a2UuaDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0UmVwb3J0RXh0
cmFNZW1vcnlDb3N0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdFJlcG9ydEV4dHJhTWVt
b3J5Q29zdDo6c3Vic3BhY2VGb3JJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdFJlcG9y
dEV4dHJhTWVtb3J5Q29zdDo6dmlzaXRDaGlsZHJlbkltcGwpOgorICAgICAgICAoV2ViQ29yZTo6
SlNUZXN0UmVwb3J0RXh0cmFNZW1vcnlDb3N0T3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJv
b3RzKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdFJlcG9ydEV4dHJhTWVtb3J5Q29zdDo6dmlz
aXRDaGlsZHJlbik6IERlbGV0ZWQuCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdFJlcG9ydEV4dHJhTWVtb3J5Q29zdC5oOgorICAgICAgICAqIGJpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlOjpzdWJz
cGFjZUZvckltcGwpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZh
bHVlSW50ZXJmYWNlOjp2aXNpdENoaWxkcmVuSW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rl
c3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VPd25lcjo6aXNSZWFjaGFibGVGcm9tT3Bh
cXVlUm9vdHMpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVl
SW50ZXJmYWNlOjp2aXNpdENoaWxkcmVuKTogRGVsZXRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmg6Cisg
ICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNldExpa2UuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SlNUZXN0U2V0TGlrZTo6c3Vic3BhY2VGb3JJbXBsKToKKyAgICAgICAg
KFdlYkNvcmU6OkpTVGVzdFNldExpa2VPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMp
OgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXRMaWtlLmg6Cisg
ICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNldExpa2VXaXRoT3ZlcnJp
ZGRlbk9wZXJhdGlvbnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0U2V0TGlrZVdpdGhP
dmVycmlkZGVuT3BlcmF0aW9uczo6c3Vic3BhY2VGb3JJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6
OkpTVGVzdFNldExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnNPd25lcjo6aXNSZWFjaGFibGVG
cm9tT3BhcXVlUm9vdHMpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zLmg6CisgICAgICAgICogYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdFN0cmluZ2lmaWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkpTVGVzdFN0cmluZ2lmaWVyOjpzdWJzcGFjZUZvckltcGwpOgorICAgICAgICAoV2ViQ29yZTo6
SlNUZXN0U3RyaW5naWZpZXJPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMpOgorICAg
ICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTdHJpbmdpZmllci5oOgorICAg
ICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTdHJpbmdpZmllckFub255bW91
c09wZXJhdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RTdHJpbmdpZmllckFub255
bW91c09wZXJhdGlvbjo6c3Vic3BhY2VGb3JJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVz
dFN0cmluZ2lmaWVyQW5vbnltb3VzT3BlcmF0aW9uT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1
ZVJvb3RzKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U3RyaW5n
aWZpZXJBbm9ueW1vdXNPcGVyYXRpb24uaDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0U3RyaW5naWZpZXJOYW1lZE9wZXJhdGlvbi5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpKU1Rlc3RTdHJpbmdpZmllck5hbWVkT3BlcmF0aW9uOjpzdWJzcGFjZUZvckltcGwpOgor
ICAgICAgICAoV2ViQ29yZTo6SlNUZXN0U3RyaW5naWZpZXJOYW1lZE9wZXJhdGlvbk93bmVyOjpp
c1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdFN0cmluZ2lmaWVyTmFtZWRPcGVyYXRpb24uaDoKKyAgICAgICAgKiBiaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25JbXBsZW1lbnRl
ZEFzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9uSW1w
bGVtZW50ZWRBczo6c3Vic3BhY2VGb3JJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdFN0
cmluZ2lmaWVyT3BlcmF0aW9uSW1wbGVtZW50ZWRBc093bmVyOjppc1JlYWNoYWJsZUZyb21PcGFx
dWVSb290cyk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFN0cmlu
Z2lmaWVyT3BlcmF0aW9uSW1wbGVtZW50ZWRBcy5oOgorICAgICAgICAqIGJpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RTdHJpbmdpZmllck9wZXJhdGlvbk5hbWVkVG9TdHJpbmcuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SlNUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25OYW1lZFRvU3RyaW5n
OjpzdWJzcGFjZUZvckltcGwpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0U3RyaW5naWZpZXJP
cGVyYXRpb25OYW1lZFRvU3RyaW5nT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKToK
KyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U3RyaW5naWZpZXJPcGVy
YXRpb25OYW1lZFRvU3RyaW5nLmg6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdFN0cmluZ2lmaWVyUmVhZE9ubHlBdHRyaWJ1dGUuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SlNUZXN0U3RyaW5naWZpZXJSZWFkT25seUF0dHJpYnV0ZTo6c3Vic3BhY2VGb3JJbXBsKToK
KyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdFN0cmluZ2lmaWVyUmVhZE9ubHlBdHRyaWJ1dGVPd25l
cjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMpOgorICAgICAgICAqIGJpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RTdHJpbmdpZmllclJlYWRPbmx5QXR0cmlidXRlLmg6CisgICAgICAg
ICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFN0cmluZ2lmaWVyUmVhZFdyaXRlQXR0
cmlidXRlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdFN0cmluZ2lmaWVyUmVhZFdyaXRl
QXR0cmlidXRlOjpzdWJzcGFjZUZvckltcGwpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0U3Ry
aW5naWZpZXJSZWFkV3JpdGVBdHRyaWJ1dGVPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9v
dHMpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTdHJpbmdpZmll
clJlYWRXcml0ZUF0dHJpYnV0ZS5oOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RUeXBlZGVmcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RUeXBlZGVmczo6
c3Vic3BhY2VGb3JJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdFR5cGVkZWZzT3duZXI6
OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0VHlwZWRlZnMuaDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNXb3JrZXJHbG9iYWxTY29wZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1dvcmtl
ckdsb2JhbFNjb3BlOjpzdWJzcGFjZUZvckltcGwpOgorICAgICAgICAqIGJpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1dvcmtsZXRHbG9iYWxTY29wZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpK
U1dvcmtsZXRHbG9iYWxTY29wZTo6c3Vic3BhY2VGb3JJbXBsKToKKyAgICAgICAgKiBkb20vQWN0
aXZlRE9NQ2FsbGJhY2suaDoKKyAgICAgICAgKFdlYkNvcmU6OkFjdGl2ZURPTUNhbGxiYWNrOjp2
aXNpdEpTRnVuY3Rpb24pOgorICAgICAgICAqIGRvbS9FdmVudExpc3RlbmVyLmg6CisgICAgICAg
IChXZWJDb3JlOjpFdmVudExpc3RlbmVyOjp2aXNpdEpTRnVuY3Rpb24pOgorICAgICAgICAqIGRv
bS9FdmVudFRhcmdldC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFdmVudFRhcmdldDo6dmlzaXRK
U0V2ZW50TGlzdGVuZXJzKToKKyAgICAgICAgKiBkb20vRXZlbnRUYXJnZXQuaDoKKyAgICAgICAg
KiBkb20vTXV0YXRpb25SZWNvcmQuY3BwOgorICAgICAgICAqIGRvbS9NdXRhdGlvblJlY29yZC5o
OgorICAgICAgICAqIGRvbS9Ob2RlRmlsdGVyQ29uZGl0aW9uLmg6CisgICAgICAgIChXZWJDb3Jl
OjpOb2RlRmlsdGVyQ29uZGl0aW9uOjp2aXNpdEFnZ3JlZ2F0ZSk6IERlbGV0ZWQuCisgICAgICAg
ICogZG9tL1N0YXRpY1JhbmdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0YXRpY1JhbmdlOjp2
aXNpdE5vZGVzQ29uY3VycmVudGx5IGNvbnN0KToKKyAgICAgICAgKiBkb20vU3RhdGljUmFuZ2Uu
aDoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTDJSZW5kZXJpbmdDb250ZXh0LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OldlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OmFkZE1lbWJlcnNUb09wYXF1
ZVJvb3RzKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTDJSZW5kZXJpbmdDb250ZXh0Lmg6
CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xGcmFtZWJ1ZmZlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJHTEZyYW1lYnVmZmVyOjphZGRNZW1iZXJzVG9PcGFxdWVSb290cyk6CisgICAg
ICAgICogaHRtbC9jYW52YXMvV2ViR0xGcmFtZWJ1ZmZlci5oOgorICAgICAgICAqIGh0bWwvY2Fu
dmFzL1dlYkdMUHJvZ3JhbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFByb2dyYW06OmFk
ZE1lbWJlcnNUb09wYXF1ZVJvb3RzKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFByb2dy
YW0uaDoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmFkZE1lbWJl
cnNUb09wYXF1ZVJvb3RzKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlLmg6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xUcmFuc2Zvcm1GZWVkYmFj
ay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFRyYW5zZm9ybUZlZWRiYWNrOjphZGRNZW1i
ZXJzVG9PcGFxdWVSb290cyk6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xUcmFuc2Zvcm1G
ZWVkYmFjay5oOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMVmVydGV4QXJyYXlPYmplY3RC
YXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMVmVydGV4QXJyYXlPYmplY3RCYXNlOjph
ZGRNZW1iZXJzVG9PcGFxdWVSb290cyk6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xWZXJ0
ZXhBcnJheU9iamVjdEJhc2UuaDoKKwogMjAyMS0wMi0xOCAgWmFsYW4gQnVqdGFzICA8emFsYW5A
YXBwbGUuY29tPgogCiAgICAgICAgIFtMRkNdW0lGQ10gRG8gbm90IGNyZWF0ZSB0aGUgbGluZSB3
aXRoIG5lZ2F0aXZlIHdpZHRoIHdoZW4gbmVnYXRpdmUgbGV0dGVyIHNwYWNpbmcgaXMgcHJlc2Vu
dApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9i
amVjdFN0b3JlLmNwcAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTcyOCw3ICs3Mjgs
OCBAQCB2b2lkIElEQk9iamVjdFN0b3JlOjpyb2xsYmFja0ZvclZlcnNpb25DCiAgICAgfQogfQog
Ci12b2lkIElEQk9iamVjdFN0b3JlOjp2aXNpdFJlZmVyZW5jZWRJbmRleGVzKFNsb3RWaXNpdG9y
JiB2aXNpdG9yKSBjb25zdAordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSURCT2Jq
ZWN0U3RvcmU6OnZpc2l0UmVmZXJlbmNlZEluZGV4ZXMoVmlzaXRvciYgdmlzaXRvcikgY29uc3QK
IHsKICAgICBMb2NrZXI8TG9jaz4gbG9ja2VyKG1fcmVmZXJlbmNlZEluZGV4TG9jayk7CiAgICAg
Zm9yIChhdXRvJiBpbmRleCA6IG1fcmVmZXJlbmNlZEluZGV4ZXMudmFsdWVzKCkpCkBAIC03Mzcs
NiArNzM4LDkgQEAgdm9pZCBJREJPYmplY3RTdG9yZTo6dmlzaXRSZWZlcmVuY2VkSW5kZQogICAg
ICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QoaW5kZXguZ2V0KCkpOwogfQogCit0ZW1wbGF0ZSB2
b2lkIElEQk9iamVjdFN0b3JlOjp2aXNpdFJlZmVyZW5jZWRJbmRleGVzKEFic3RyYWN0U2xvdFZp
c2l0b3ImKSBjb25zdDsKK3RlbXBsYXRlIHZvaWQgSURCT2JqZWN0U3RvcmU6OnZpc2l0UmVmZXJl
bmNlZEluZGV4ZXMoU2xvdFZpc2l0b3ImKSBjb25zdDsKKwogdm9pZCBJREJPYmplY3RTdG9yZTo6
cmVuYW1lUmVmZXJlbmNlZEluZGV4KElEQkluZGV4JiBpbmRleCwgY29uc3QgU3RyaW5nJiBuZXdO
YW1lKQogewogICAgIExPRyhJbmRleGVkREIsICJJREJPYmplY3RTdG9yZTo6cmVuYW1lUmVmZXJl
bmNlZEluZGV4Iik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJP
YmplY3RTdG9yZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQk9iamVjdFN0b3JlLmgJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTA5LDcg
KzEwOSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHJlZigpOwogICAgIHZvaWQgZGVyZWYoKTsKIAot
ICAgIHZvaWQgdmlzaXRSZWZlcmVuY2VkSW5kZXhlcyhKU0M6OlNsb3RWaXNpdG9yJikgY29uc3Q7
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCB2aXNpdFJlZmVyZW5jZWRJbmRl
eGVzKFZpc2l0b3ImKSBjb25zdDsKICAgICB2b2lkIHJlbmFtZVJlZmVyZW5jZWRJbmRleChJREJJ
bmRleCYsIGNvbnN0IFN0cmluZyYgbmV3TmFtZSk7CiAKIHByaXZhdGU6CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb24uY3BwCShy
ZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJU
cmFuc2FjdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE1LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xNDU1LDcgKzE0NTUsOCBAQCB2b2lk
IElEQlRyYW5zYWN0aW9uOjpjb25uZWN0aW9uQ2xvc2VkRnJvCiAgICAgZmlyZU9uQWJvcnQoKTsK
IH0KIAotdm9pZCBJREJUcmFuc2FjdGlvbjo6dmlzaXRSZWZlcmVuY2VkT2JqZWN0U3RvcmVzKEpT
Qzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
Pgordm9pZCBJREJUcmFuc2FjdGlvbjo6dmlzaXRSZWZlcmVuY2VkT2JqZWN0U3RvcmVzKFZpc2l0
b3ImIHZpc2l0b3IpIGNvbnN0CiB7CiAgICAgTG9ja2VyPExvY2s+IGxvY2tlcihtX3JlZmVyZW5j
ZWRPYmplY3RTdG9yZUxvY2spOwogICAgIGZvciAoYXV0byYgb2JqZWN0U3RvcmUgOiBtX3JlZmVy
ZW5jZWRPYmplY3RTdG9yZXMudmFsdWVzKCkpCkBAIC0xNDY0LDYgKzE0NjUsOSBAQCB2b2lkIElE
QlRyYW5zYWN0aW9uOjp2aXNpdFJlZmVyZW5jZWRPYmplCiAgICAgICAgIHZpc2l0b3IuYWRkT3Bh
cXVlUm9vdChvYmplY3RTdG9yZS5nZXQoKSk7CiB9CiAKK3RlbXBsYXRlIHZvaWQgSURCVHJhbnNh
Y3Rpb246OnZpc2l0UmVmZXJlbmNlZE9iamVjdFN0b3JlcyhKU0M6OkFic3RyYWN0U2xvdFZpc2l0
b3ImKSBjb25zdDsKK3RlbXBsYXRlIHZvaWQgSURCVHJhbnNhY3Rpb246OnZpc2l0UmVmZXJlbmNl
ZE9iamVjdFN0b3JlcyhKU0M6OlNsb3RWaXNpdG9yJikgY29uc3Q7CisKIHZvaWQgSURCVHJhbnNh
Y3Rpb246OmhhbmRsZVBlbmRpbmdPcGVyYXRpb25zKCkKIHsKICAgICBBU1NFUlQoY2FuQ3VycmVu
dFRocmVhZEFjY2Vzc1RocmVhZExvY2FsRGF0YShtX2RhdGFiYXNlLT5vcmlnaW5UaHJlYWQoKSkp
OwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb24u
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFu
c2FjdGlvbi5oCShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE0OSw3ICsxNDksNyBAQCBw
dWJsaWM6CiAKICAgICB2b2lkIGNvbm5lY3Rpb25DbG9zZWRGcm9tU2VydmVyKGNvbnN0IElEQkVy
cm9yJik7CiAKLSAgICB2b2lkIHZpc2l0UmVmZXJlbmNlZE9iamVjdFN0b3JlcyhKU0M6OlNsb3RW
aXNpdG9yJikgY29uc3Q7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCB2aXNp
dFJlZmVyZW5jZWRPYmplY3RTdG9yZXMoVmlzaXRvciYpIGNvbnN0OwogCiAgICAgV0VCQ09SRV9F
WFBPUlQgc3RhdGljIHN0ZDo6YXRvbWljPHVuc2lnbmVkPiBudW1iZXJPZklEQlRyYW5zYWN0aW9u
czsKIApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0J1ZmZlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0J1
ZmZlci5jcHAJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
YXVkaW8vQXVkaW9CdWZmZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoK
ICAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTU0LDEyICsxNTQsMTYgQEAgRXhj
ZXB0aW9uT3I8SlNDOjpKU1ZhbHVlPiBBdWRpb0J1ZmZlcjo6ZwogICAgIHJldHVybiBjb25zdHJ1
Y3RKU0FycmF5KCk7CiB9CiAKLXZvaWQgQXVkaW9CdWZmZXI6OnZpc2l0Q2hhbm5lbFdyYXBwZXJz
KEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgor
dm9pZCBBdWRpb0J1ZmZlcjo6dmlzaXRDaGFubmVsV3JhcHBlcnMoVmlzaXRvciYgdmlzaXRvcikK
IHsKICAgICBmb3IgKGF1dG8mIGNoYW5uZWxXcmFwcGVyIDogbV9jaGFubmVsV3JhcHBlcnMpCiAg
ICAgICAgIGNoYW5uZWxXcmFwcGVyLnZpc2l0KHZpc2l0b3IpOwogfQogCit0ZW1wbGF0ZSB2b2lk
IEF1ZGlvQnVmZmVyOjp2aXNpdENoYW5uZWxXcmFwcGVycyhKU0M6OkFic3RyYWN0U2xvdFZpc2l0
b3ImKTsKK3RlbXBsYXRlIHZvaWQgQXVkaW9CdWZmZXI6OnZpc2l0Q2hhbm5lbFdyYXBwZXJzKEpT
Qzo6U2xvdFZpc2l0b3ImKTsKKwogUmVmUHRyPEZsb2F0MzJBcnJheT4gQXVkaW9CdWZmZXI6OmNo
YW5uZWxEYXRhKHVuc2lnbmVkIGNoYW5uZWxJbmRleCkKIHsKICAgICBpZiAoY2hhbm5lbEluZGV4
ID49IG1fY2hhbm5lbHMuc2l6ZSgpKQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJh
dWRpby9BdWRpb0J1ZmZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViYXVkaW8vQXVkaW9CdWZmZXIuaAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0J1ZmZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYg
KzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNzUsNyArNzUs
NyBAQCBwdWJsaWM6CiAKICAgICBzaXplX3QgbWVtb3J5Q29zdCgpIGNvbnN0OwogCi0gICAgdm9p
ZCB2aXNpdENoYW5uZWxXcmFwcGVycyhKU0M6OlNsb3RWaXNpdG9yJik7CisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCB2aXNpdENoYW5uZWxXcmFwcGVycyhWaXNpdG9yJik7CiAg
ICAgCiBwcml2YXRlOgogICAgIEF1ZGlvQnVmZmVyKHVuc2lnbmVkIG51bWJlck9mQ2hhbm5lbHMs
IHNpemVfdCBsZW5ndGgsIGZsb2F0IHNhbXBsZVJhdGUsIExlZ2FjeVByZXZlbnREZXRhY2hpbmcg
PSBMZWdhY3lQcmV2ZW50RGV0YWNoaW5nOjpObyk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9ET01HQ091dHB1dENvbnN0cmFpbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0RPTUdDT3V0cHV0Q29uc3RyYWludC5jcHAJKHJldmlzaW9uIDI3
MzExOSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0RPTUdDT3V0cHV0Q29uc3RyYWlu
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDcgKzQ5LDggQEAgRE9NR0NPdXRwdXRDb25zdHJh
aW50Ojp+RE9NR0NPdXRwdXRDb25zdAogewogfQogCi12b2lkIERPTUdDT3V0cHV0Q29uc3RyYWlu
dDo6ZXhlY3V0ZUltcGwoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPgordm9pZCBET01HQ091dHB1dENvbnN0cmFpbnQ6OmV4ZWN1dGVJbXBsSW1wbChWaXNp
dG9yJiB2aXNpdG9yKQogewogICAgIEhlYXAmIGhlYXAgPSBtX3ZtLmhlYXA7CiAgICAgCkBAIC02
MCwxNSArNjEsMTkgQEAgdm9pZCBET01HQ091dHB1dENvbnN0cmFpbnQ6OmV4ZWN1dGVJbXBsKAog
ICAgIAogICAgIG1fY2xpZW50RGF0YS5mb3JFYWNoT3V0cHV0Q29uc3RyYWludFNwYWNlKAogICAg
ICAgICBbJl0gKFN1YnNwYWNlJiBzdWJzcGFjZSkgewotICAgICAgICAgICAgYXV0byBmdW5jID0g
W10gKFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBIZWFwQ2VsbCogaGVhcENlbGwsIEhlYXBDZWxsOjpL
aW5kKSB7CisgICAgICAgICAgICBhdXRvIGZ1bmMgPSBbXSAoVmlzaXRvciYgdmlzaXRvciwgSGVh
cENlbGwqIGhlYXBDZWxsLCBIZWFwQ2VsbDo6S2luZCkgewogICAgICAgICAgICAgICAgIFNldFJv
b3RNYXJrUmVhc29uU2NvcGUgcm9vdFNjb3BlKHZpc2l0b3IsIFJvb3RNYXJrUmVhc29uOjpET01H
Q091dHB1dCk7CiAgICAgICAgICAgICAgICAgSlNDZWxsKiBjZWxsID0gc3RhdGljX2Nhc3Q8SlND
ZWxsKj4oaGVhcENlbGwpOwogICAgICAgICAgICAgICAgIGNlbGwtPm1ldGhvZFRhYmxlKHZpc2l0
b3Iudm0oKSktPnZpc2l0T3V0cHV0Q29uc3RyYWludHMoY2VsbCwgdmlzaXRvcik7CiAgICAgICAg
ICAgICB9OwogICAgICAgICAgICAgCi0gICAgICAgICAgICB2aXNpdG9yLmFkZFBhcmFsbGVsQ29u
c3RyYWludFRhc2soc3Vic3BhY2UuZm9yRWFjaE1hcmtlZENlbGxJblBhcmFsbGVsKGZ1bmMpKTsK
KyAgICAgICAgICAgIFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoVmlzaXRvciYpPj4gdGFzayA9IHN1
YnNwYWNlLnRlbXBsYXRlIGZvckVhY2hNYXJrZWRDZWxsSW5QYXJhbGxlbDxWaXNpdG9yPihmdW5j
KTsKKyAgICAgICAgICAgIHZpc2l0b3IuYWRkUGFyYWxsZWxDb25zdHJhaW50VGFzayh0YXNrKTsK
ICAgICAgICAgfSk7CiB9CiAgICAgICAgIAordm9pZCBET01HQ091dHB1dENvbnN0cmFpbnQ6OmV4
ZWN1dGVJbXBsKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsgZXhlY3V0ZUltcGxJbXBs
KHZpc2l0b3IpOyB9Cit2b2lkIERPTUdDT3V0cHV0Q29uc3RyYWludDo6ZXhlY3V0ZUltcGwoU2xv
dFZpc2l0b3ImIHZpc2l0b3IpIHsgZXhlY3V0ZUltcGxJbXBsKHZpc2l0b3IpOyB9CisKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvRE9N
R0NPdXRwdXRDb25zdHJhaW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvRE9NR0NPdXRwdXRDb25zdHJhaW50LmgJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0RPTUdDT3V0cHV0Q29uc3RyYWludC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNy0yMDE4IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtNDIsOSArNDIsMTIgQEAgcHVibGljOgogICAgIH5ET01HQ091dHB1dENvbnN0cmFp
bnQoKTsKICAgICAKIHByb3RlY3RlZDoKKyAgICB2b2lkIGV4ZWN1dGVJbXBsKEpTQzo6QWJzdHJh
Y3RTbG90VmlzaXRvciYpIG92ZXJyaWRlOwogICAgIHZvaWQgZXhlY3V0ZUltcGwoSlNDOjpTbG90
VmlzaXRvciYpIG92ZXJyaWRlOwogCiBwcml2YXRlOgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZp
c2l0b3I+IHZvaWQgZXhlY3V0ZUltcGxJbXBsKFZpc2l0b3ImKTsKKwogICAgIEpTQzo6Vk0mIG1f
dm07CiAgICAgSlNWTUNsaWVudERhdGEmIG1fY2xpZW50RGF0YTsKICAgICB1aW50NjRfdCBtX2xh
c3RFeGVjdXRpb25WZXJzaW9uOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNB
Ym9ydENvbnRyb2xsZXJDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTQWJvcnRDb250cm9sbGVyQ3VzdG9tLmNwcAkocmV2aXNpb24gMjczMTE5KQor
KysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNBYm9ydENvbnRyb2xsZXJDdXN0b20uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSogQ29weXJpZ2h0IChDKSAyMDE5
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyogQ29weXJpZ2h0IChDKSAyMDE5LTIw
MjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogKgogKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0yOCw5ICsyOCwxMiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQg
SlNBYm9ydENvbnRyb2xsZXI6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0
b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0Fib3J0Q29u
dHJvbGxlcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAg
ICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QoJndyYXBwZWQoKS5zaWduYWwoKSk7CiB9CiAKK0RFRklO
RV9WSVNJVF9BRERJVElPTkFMX0NISUxEUkVOKEpTQWJvcnRDb250cm9sbGVyKTsKKwogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNBYm9y
dFNpZ25hbEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNBYm9ydFNpZ25hbEN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTQWJvcnRTaWduYWxDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyogQ29weXJpZ2h0IChDKSAyMDE5LTIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogKgogKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOCw3
ICsyOCw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotYm9vbCBKU0Fib3J0U2lnbmFsT3du
ZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4g
aGFuZGxlLCB2b2lkKiwgSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJl
YXNvbikKK2Jvb2wgSlNBYm9ydFNpZ25hbE93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290
cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIEpTQzo6QWJzdHJhY3RT
bG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikKIHsKICAgICBhdXRvJiBh
Ym9ydFNpZ25hbCA9IEpTQzo6anNDYXN0PEpTQWJvcnRTaWduYWwqPihoYW5kbGUuc2xvdCgpLT5h
c0NlbGwoKSktPndyYXBwZWQoKTsKICAgICBpZiAoYWJvcnRTaWduYWwuaXNGaXJpbmdFdmVudExp
c3RlbmVycygpKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0F0dHJDdXN0
b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXR0ckN1
c3RvbS5jcHAJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTQXR0ckN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDA3LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzMsMTAgKzMzLDEz
IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBKU0F0dHI6OnZpc2l0QWRkaXRpb25h
bENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPgordm9pZCBKU0F0dHI6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZp
c2l0b3IpCiB7CiAgICAgaWYgKEVsZW1lbnQqIGVsZW1lbnQgPSB3cmFwcGVkKCkub3duZXJFbGVt
ZW50KCkpCiAgICAgICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChyb290KGVsZW1lbnQpKTsKIH0K
IAorREVGSU5FX1ZJU0lUX0FERElUSU9OQUxfQ0hJTERSRU4oSlNBdHRyKTsKKwogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNBdWRpb0J1
ZmZlckN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNBdWRpb0J1ZmZlckN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTQXVkaW9CdWZmZXJDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAtMjAyMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMx
LDExICszMSwxNCBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogdXNpbmcgbmFtZXNwYWNlIEpTQzsK
IAotdm9pZCBKU0F1ZGlvQnVmZmVyOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRv
ciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTQXVkaW9CdWZm
ZXI6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgd3Jh
cHBlZCgpLnZpc2l0Q2hhbm5lbFdyYXBwZXJzKHZpc2l0b3IpOwogfQogCitERUZJTkVfVklTSVRf
QURESVRJT05BTF9DSElMRFJFTihKU0F1ZGlvQnVmZmVyKTsKKwogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQl9BVURJTykKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTQXVkaW9UcmFja0N1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNBdWRpb1RyYWNrQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcz
MTE5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNBdWRpb1RyYWNrQ3VzdG9tLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEx
LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0zNSwxMSArMzUsMTQgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVz
aW5nIG5hbWVzcGFjZSBKU0M7CiAKLXZvaWQgSlNBdWRpb1RyYWNrOjp2aXNpdEFkZGl0aW9uYWxD
aGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+
Cit2b2lkIEpTQXVkaW9UcmFjazo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlz
aXRvcikKIHsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qocm9vdCgmd3JhcHBlZCgpKSk7CiB9
CiAKK0RFRklORV9WSVNJVF9BRERJVElPTkFMX0NISUxEUkVOKEpTQXVkaW9UcmFjayk7CisKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0F1ZGlvVHJhY2tMaXN0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0F1ZGlvVHJhY2tMaXN0Q3VzdG9tLmNwcAkocmV2aXNpb24g
MjczMTE5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNBdWRpb1RyYWNrTGlzdEN1
c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzYsMTEgKzM2LDE0IEBACiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCi12b2lkIEpTQXVkaW9UcmFja0xpc3Q6OnZpc2l0
QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5h
bWUgVmlzaXRvcj4KK3ZvaWQgSlNBdWRpb1RyYWNrTGlzdDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRy
ZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qocm9vdCh3
cmFwcGVkKCkuZWxlbWVudCgpKSk7CiB9CiAKK0RFRklORV9WSVNJVF9BRERJVElPTkFMX0NISUxE
UkVOKEpTQXVkaW9UcmFja0xpc3QpOworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRp
ZgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNBdWRpb1dvcmtsZXRQcm9jZXNz
b3JDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
QXVkaW9Xb3JrbGV0UHJvY2Vzc29yQ3VzdG9tLmNwcAkocmV2aXNpb24gMjczMTE5KQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNBdWRpb1dvcmtsZXRQcm9jZXNzb3JDdXN0b20uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAy
MCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAt
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTMxLDcgKzMxLDggQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5n
IG5hbWVzcGFjZSBKU0M7CiAKLXZvaWQgSlNBdWRpb1dvcmtsZXRQcm9jZXNzb3I6OnZpc2l0QWRk
aXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUg
VmlzaXRvcj4KK3ZvaWQgSlNBdWRpb1dvcmtsZXRQcm9jZXNzb3I6OnZpc2l0QWRkaXRpb25hbENo
aWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0byYgcHJvY2Vzc29yID0gd3JhcHBl
ZCgpOwogICAgIHByb2Nlc3Nvci5qc0lucHV0c1dyYXBwZXIoKS52aXNpdCh2aXNpdG9yKTsKQEAg
LTM5LDYgKzQwLDggQEAgdm9pZCBKU0F1ZGlvV29ya2xldFByb2Nlc3Nvcjo6dmlzaXRBZGRpdAog
ICAgIHByb2Nlc3Nvci5qc1BhcmFtVmFsdWVzV3JhcHBlcigpLnZpc2l0KHZpc2l0b3IpOwogfQog
CitERUZJTkVfVklTSVRfQURESVRJT05BTF9DSElMRFJFTihKU0F1ZGlvV29ya2xldFByb2Nlc3Nv
cik7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShXRUJfQVVE
SU8pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NTU1J1bGVDdXN0b20uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ1NTUnVsZUN1c3Rv
bS5jcHAJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
Q1NTUnVsZUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTEsMTEgKzUxLDE0IEBACiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCi12b2lkIEpTQ1NTUnVs
ZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0
ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0NTU1J1bGU6OnZpc2l0QWRkaXRpb25hbENoaWxk
cmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHJvb3Qo
JndyYXBwZWQoKSkpOwogfQogCitERUZJTkVfVklTSVRfQURESVRJT05BTF9DSElMRFJFTihKU0NT
U1J1bGUpOworCiBKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNHbG9iYWxPYmplY3QqLCBKU0RP
TUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWY8Q1NTUnVsZT4mJiBydWxlKQogewogICAg
IHN3aXRjaCAocnVsZS0+dHlwZSgpKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0NTU1J1bGVMaXN0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0NTU1J1bGVMaXN0Q3VzdG9tLmNwcAkocmV2aXNpb24gMjczMTE5KQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDU1NSdWxlTGlzdEN1c3RvbS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTkg
QXBwbGUgSW5jLiBBbGwgcmlnaHQgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodCByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMzYsNyArMzYsNyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogdXNpbmcgbmFt
ZXNwYWNlIEpTQzsKIAotYm9vbCBKU0NTU1J1bGVMaXN0T3duZXI6OmlzUmVhY2hhYmxlRnJvbU9w
YXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgU2xvdFZp
c2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCitib29sIEpTQ1NTUnVsZUxpc3RP
d25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3du
PiBoYW5kbGUsIHZvaWQqLCBBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFy
KiogcmVhc29uKQogewogICAgIEpTQ1NTUnVsZUxpc3QqIGpzQ1NTUnVsZUxpc3QgPSBqc0Nhc3Q8
SlNDU1NSdWxlTGlzdCo+KGhhbmRsZS5zbG90KCktPmFzQ2VsbCgpKTsKICAgICBpZiAoIWpzQ1NT
UnVsZUxpc3QtPmhhc0N1c3RvbVByb3BlcnRpZXMoanNDU1NSdWxlTGlzdC0+dm0oKSkpCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NTU1N0eWxlRGVjbGFyYXRpb25DdXN0b20u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ1NTU3R5bGVE
ZWNsYXJhdGlvbkN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTQ1NTU3R5bGVEZWNsYXJhdGlvbkN1c3RvbS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC01MSw5ICs1MSwxMiBAQCB2b2lkKiByb290KENTU1N0eWxlRGVjbGFyYXRpb24qIHN0
eWxlKQogICAgIHJldHVybiBzdHlsZTsKIH0KIAotdm9pZCBKU0NTU1N0eWxlRGVjbGFyYXRpb246
OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8
dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNDU1NTdHlsZURlY2xhcmF0aW9uOjp2aXNpdEFkZGl0
aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHZpc2l0b3IuYWRkT3BhcXVl
Um9vdChyb290KCZ3cmFwcGVkKCkpKTsKIH0KIAorREVGSU5FX1ZJU0lUX0FERElUSU9OQUxfQ0hJ
TERSRU4oSlNDU1NTdHlsZURlY2xhcmF0aW9uKTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDYWxsYmFja0RhdGEuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2FsbGJhY2tEYXRhLmNwcAko
cmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDYWxsYmFj
a0RhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAwNy0yMDA5LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAwNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtOTUsMTIgKzk1LDE2IEBAIEpTVmFs
dWUgSlNDYWxsYmFja0RhdGE6Omludm9rZUNhbGxiYWNrKEoKICAgICByZXR1cm4gcmVzdWx0Owog
fQogCi12b2lkIEpTQ2FsbGJhY2tEYXRhV2Vhazo6dmlzaXRKU0Z1bmN0aW9uKEpTQzo6U2xvdFZp
c2l0b3ImIHZpc3RvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTQ2FsbGJh
Y2tEYXRhV2Vhazo6dmlzaXRKU0Z1bmN0aW9uKFZpc2l0b3ImIHZpc2l0b3IpCiB7Ci0gICAgdmlz
dG9yLmFwcGVuZChtX2NhbGxiYWNrKTsKKyAgICB2aXNpdG9yLmFwcGVuZChtX2NhbGxiYWNrKTsK
IH0KIAotYm9vbCBKU0NhbGxiYWNrRGF0YVdlYWs6OldlYWtPd25lcjo6aXNSZWFjaGFibGVGcm9t
T3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCwgU2xv
dFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCit0ZW1wbGF0ZSB2b2lkIEpT
Q2FsbGJhY2tEYXRhV2Vhazo6dmlzaXRKU0Z1bmN0aW9uKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRv
ciYpOwordGVtcGxhdGUgdm9pZCBKU0NhbGxiYWNrRGF0YVdlYWs6OnZpc2l0SlNGdW5jdGlvbihK
U0M6OlNsb3RWaXNpdG9yJik7CisKK2Jvb2wgSlNDYWxsYmFja0RhdGFXZWFrOjpXZWFrT3duZXI6
OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZv
aWQqIGNvbnRleHQsIEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiBy
ZWFzb24pCiB7CiAgICAgaWYgKFVOTElLRUxZKHJlYXNvbikpCiAgICAgICAgICpyZWFzb24gPSAi
Q29udGV4dCBpcyBvcGFxdWUgcm9vdCI7IC8vIEZJWE1FOiB3aGF0IGlzIHRoZSBjb250ZXh0LgpJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDYWxsYmFja0RhdGEuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NhbGxiYWNrRGF0YS5oCShyZXZp
c2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NhbGxiYWNrRGF0
YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwNy0yMDA5LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAwNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTEzLDExICsxMTMsMTEgQEAgcHVibGljOgog
ICAgICAgICByZXR1cm4gSlNDYWxsYmFja0RhdGE6Omludm9rZUNhbGxiYWNrKCpnbG9iYWxPYmpl
Y3QsIGNhbGxiYWNrKCksIHRoaXNWYWx1ZSwgYXJncywgY2FsbGJhY2tUeXBlLCBmdW5jdGlvbk5h
bWUsIHJldHVybmVkRXhjZXB0aW9uKTsKICAgICB9CiAKLSAgICB2b2lkIHZpc2l0SlNGdW5jdGlv
bihKU0M6OlNsb3RWaXNpdG9yJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9p
ZCB2aXNpdEpTRnVuY3Rpb24oVmlzaXRvciYpOwogCiBwcml2YXRlOgogICAgIGNsYXNzIFdlYWtP
d25lciA6IHB1YmxpYyBKU0M6OldlYWtIYW5kbGVPd25lciB7Ci0gICAgICAgIGJvb2wgaXNSZWFj
aGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29u
dGV4dCwgSlNDOjpTbG90VmlzaXRvciYsIGNvbnN0IGNoYXIqKikgb3ZlcnJpZGU7CisgICAgICAg
IGJvb2wgaXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3du
Piwgdm9pZCogY29udGV4dCwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiwgY29uc3QgY2hhcioq
KSBvdmVycmlkZTsKICAgICB9OwogICAgIFdlYWtPd25lciBtX3dlYWtPd25lcjsKICAgICBKU0M6
OldlYWs8SlNDOjpKU09iamVjdD4gbV9jYWxsYmFjazsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQ3VzdG9tLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQy
REN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI0LDcgKzI0
LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1ib29sIEpTQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJET3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6
VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3Qg
Y2hhcioqIHJlYXNvbikKK2Jvb2wgSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRPd25lcjo6aXNS
ZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUs
IHZvaWQqLCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiBy
ZWFzb24pCiB7CiAgICAgaWYgKFVOTElLRUxZKHJlYXNvbikpCiAgICAgICAgICpyZWFzb24gPSAi
Q2FudmFzIGlzIG9wYXF1ZSByb290IjsKQEAgLTM0LDkgKzM0LDEyIEBAIGJvb2wgSlNDYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkRPd25lcjo6aXMKICAgICByZXR1cm4gdmlzaXRvci5jb250YWluc09w
YXF1ZVJvb3Qocm9vdCk7CiB9CiAKLXZvaWQgSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnZp
c2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0
ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6dmlz
aXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB2aXNpdG9yLmFk
ZE9wYXF1ZVJvb3Qocm9vdCh3cmFwcGVkKCkuY2FudmFzKCkpKTsKIH0KIAorREVGSU5FX1ZJU0lU
X0FERElUSU9OQUxfQ0hJTERSRU4oSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQpOworCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0N1
c3RvbUV2ZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0N1c3RvbUV2ZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNDdXN0b21FdmVudEN1c3RvbS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTggQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC00MiwxMCArNDIsMTMgQEAgSlNDOjpKU1ZhbHVlIEpTQ3VzdG9tRXZlbnQ6OmRldGFp
bChKU0M6OgogICAgIH0pOwogfQogCi12b2lkIEpTQ3VzdG9tRXZlbnQ6OnZpc2l0QWRkaXRpb25h
bENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPgordm9pZCBKU0N1c3RvbUV2ZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNp
dG9yJiB2aXNpdG9yKQogewogICAgIHdyYXBwZWQoKS5kZXRhaWwoKS52aXNpdCh2aXNpdG9yKTsK
ICAgICB3cmFwcGVkKCkuY2FjaGVkRGV0YWlsKCkudmlzaXQodmlzaXRvcik7CiB9CiAKK0RFRklO
RV9WSVNJVF9BRERJVElPTkFMX0NISUxEUkVOKEpTQ3VzdG9tRXZlbnQpOworCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJ1aWx0
aW5Db25zdHJ1Y3RvckJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTRE9NQnVpbHRpbkNvbnN0cnVjdG9yQmFzZS5jcHAJKHJldmlzaW9uIDI3MzExOSkK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQnVpbHRpbkNvbnN0cnVjdG9yQmFz
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogIENvcHlyaWdodCAo
QykgMTk5OS0yMDAxIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCi0gKiAgQ29weXJpZ2h0
IChDKSAyMDA0LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHly
aWdodCAoQykgMjAwNC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqICBD
b3B5cmlnaHQgKEMpIDIwMDcgU2FtdWVsIFdlaW5pZyA8c2FtQHdlYmtpdC5vcmc+CiAgKiAgQ29w
eXJpZ2h0IChDKSAyMDEzIE1pY2hhZWwgUHJ1ZXR0IDxtaWNoYWVsQDY4ay5vcmc+CiAgKgpAQCAt
NDUsNyArNDUsOCBAQCB2b2lkIEpTRE9NQnVpbHRpbkNvbnN0cnVjdG9yQmFzZTo6Y2FsbEZ1CiAg
ICAgSlNDOjpjYWxsKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAmZnVuY3Rpb24sIGNhbGxEYXRhLCAm
dGhpc09iamVjdCwgYXJndW1lbnRzKTsKIH0KIAotdm9pZCBKU0RPTUJ1aWx0aW5Db25zdHJ1Y3Rv
ckJhc2U6OnZpc2l0Q2hpbGRyZW4oSlNDOjpKU0NlbGwqIGNlbGwsIEpTQzo6U2xvdFZpc2l0b3Im
IHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0RPTUJ1aWx0aW5D
b25zdHJ1Y3RvckJhc2U6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQzo6SlNDZWxsKiBjZWxsLCBWaXNp
dG9yJiB2aXNpdG9yKQogewogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNET01CdWls
dGluQ29uc3RydWN0b3JCYXNlKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklU
Uyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNTMsNiArNTQsOCBAQCB2b2lkIEpTRE9NQnVpbHRp
bkNvbnN0cnVjdG9yQmFzZTo6dmlzaXRDCiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+
bV9pbml0aWFsaXplRnVuY3Rpb24pOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNET01C
dWlsdGluQ29uc3RydWN0b3JCYXNlKTsKKwogSlNDOjpJc29TdWJzcGFjZSogSlNET01CdWlsdGlu
Q29uc3RydWN0b3JCYXNlOjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCiB7CiAgICAgcmV0
dXJuICZzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpLT5kb21CdWls
dGluQ29uc3RydWN0b3JTcGFjZSgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNET01CdWlsdGluQ29uc3RydWN0b3JCYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNET01CdWlsdGluQ29uc3RydWN0b3JCYXNlLmgJKHJldmlzaW9uIDI3
MzExOSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQnVpbHRpbkNvbnN0cnVj
dG9yQmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqICBDb3B5cmln
aHQgKEMpIDIwMTUsIDIwMTYgQ2Fub24gSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogIENv
cHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29w
eXJpZ2h0IChDKSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3Nl
ciBHZW5lcmFsIFB1YmxpYwpAQCAtNDIsNyArNDIsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgewogICAg
IH0KIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDOjpKU0NlbGwqLCBKU0M6OlNs
b3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIEpTQzo6SlNG
dW5jdGlvbiogaW5pdGlhbGl6ZUZ1bmN0aW9uKCk7CiAgICAgdm9pZCBzZXRJbml0aWFsaXplRnVu
Y3Rpb24oSlNDOjpWTSYsIEpTQzo6SlNGdW5jdGlvbiYpOwpJbmRleDogU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNET01HbG9iYWxPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0LmNwcAkocmV2aXNpb24gMjczMTE5
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01HbG9iYWxPYmplY3QuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOC0y
MDE4IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAw
OC0yMDIxIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMjM4LDcgKzIzOCw4IEBAIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
IEpTRE9NR2xvYmFsT2JqZWMKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotdm9pZCBKU0RPTUds
b2JhbE9iamVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNp
dG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNET01HbG9iYWxPYmplY3Q6
OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAg
ICBKU0RPTUdsb2JhbE9iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVj
dCo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5m
bygpKTsKQEAgLTI2MCw2ICsyNjEsOCBAQCB2b2lkIEpTRE9NR2xvYmFsT2JqZWN0Ojp2aXNpdENo
aWxkcmVuKEpTCiAgICAgdGhpc09iamVjdC0+bV9idWlsdGluSW50ZXJuYWxGdW5jdGlvbnMudmlz
aXQodmlzaXRvcik7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU0RPTUdsb2JhbE9iamVj
dCk7CisKIHZvaWQgSlNET01HbG9iYWxPYmplY3Q6OnByb21pc2VSZWplY3Rpb25UcmFja2VyKEpT
R2xvYmFsT2JqZWN0KiBqc0dsb2JhbE9iamVjdCwgSlNQcm9taXNlKiBwcm9taXNlLCBKU1Byb21p
c2VSZWplY3Rpb25PcGVyYXRpb24gb3BlcmF0aW9uKQogewogICAgIC8vIGh0dHBzOi8vaHRtbC5z
cGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3dlYmFwcGFwaXMuaHRtbCN0aGUtaG9zdHByb21pc2Vy
ZWplY3Rpb250cmFja2VyLWltcGxlbWVudGF0aW9uCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0LmgJKHJldmlzaW9uIDI3MzExOSkKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTggQXBwbGUg
SW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMjEgQXBw
bGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC02OSw3ICs2OSw3IEBAIHB1YmxpYzoKICAgICAvLyBNYWtlIGJpbmRpbmcgY29kZSBn
ZW5lcmF0aW9uIGVhc2llci4KICAgICBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KCkg
eyByZXR1cm4gdGhpczsgfQogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0M6OkpT
Q2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwog
CiAgICAgRE9NV3JhcHBlcldvcmxkJiB3b3JsZCgpIHsgcmV0dXJuIG1fd29ybGQuZ2V0KCk7IH0K
ICAgICBib29sIHdvcmxkSXNOb3JtYWwoKSBjb25zdCB7IHJldHVybiBtX3dvcmxkSXNOb3JtYWw7
IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR3VhcmRlZE9iamVjdC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR3VhcmRlZE9i
amVjdC5oCShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0RPTUd1YXJkZWRPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00MCw3ICs0MCw3IEBAIHB1YmxpYzoK
IAogICAgIGJvb2wgaXNTdXNwZW5kZWQoKSBjb25zdCB7IHJldHVybiAhbV9ndWFyZGVkIHx8ICFj
YW5JbnZva2VDYWxsYmFjaygpOyB9IC8vIFRoZSB3cmFwcGVyIHdvcmxkIGhhcyBnb25lIGF3YXkg
b3IgYWN0aXZlIERPTSBvYmplY3RzIGhhdmUgYmVlbiBzdXNwZW5kZWQuCiAKLSAgICB2b2lkIHZp
c2l0QWdncmVnYXRlKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsgdmlzaXRvci5hcHBlbmQo
bV9ndWFyZGVkKTsgfQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgdmlzaXRB
Z2dyZWdhdGUoVmlzaXRvciYgdmlzaXRvcikgeyB2aXNpdG9yLmFwcGVuZChtX2d1YXJkZWQpOyB9
CiAKICAgICBKU0M6OkpTVmFsdWUgZ3VhcmRlZE9iamVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fZ3Vh
cmRlZC5nZXQoKTsgfQogICAgIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QoKSBjb25z
dCB7IHJldHVybiBtX2dsb2JhbE9iamVjdC5nZXQoKTsgfQpJbmRleDogU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNET01RdWFkQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0RPTVF1YWRDdXN0b20uY3BwCShyZXZpc2lvbiAyNzMxMTkpCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVF1YWRDdXN0b20uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTMzLDcgKzMzLDggQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFj
ZSBKU0M7CiAKLXZvaWQgSlNET01RdWFkOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90Vmlz
aXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTRE9NUXVh
ZDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB2aXNp
dG9yLmFkZE9wYXF1ZVJvb3QoY29uc3RfY2FzdDxET01Qb2ludCo+KCZ3cmFwcGVkKCkucDEoKSkp
OwogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChjb25zdF9jYXN0PERPTVBvaW50Kj4oJndyYXBw
ZWQoKS5wMigpKSk7CkBAIC00MSw0ICs0Miw2IEBAIHZvaWQgSlNET01RdWFkOjp2aXNpdEFkZGl0
aW9uYWxDaGlsZHJlbigKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QoY29uc3RfY2FzdDxET01Q
b2ludCo+KCZ3cmFwcGVkKCkucDQoKSkpOwogfQogCi19CitERUZJTkVfVklTSVRfQURESVRJT05B
TF9DSElMRFJFTihKU0RPTVF1YWQpOworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0N1c3RvbS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dDdXN0b20uY3BwCShy
ZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRv
d0N1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDA3LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDA3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICog
Q29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgpAQCAtMTE5LDcgKzExOSw4IEBAIEpTQ19ERUZJTkVfQ1VTVE9NX0dFVFRFUihqc0RP
TVdpbmRvd0luc3QKICAgICByZXR1cm4gbm9uQ2FjaGluZ1N0YXRpY0Z1bmN0aW9uR2V0dGVySW1w
bDxqc0RPTVdpbmRvd0luc3RhbmNlRnVuY3Rpb25fcG9zdE1lc3NhZ2UsIDI+KGdsb2JhbE9iamVj
dCwgcHJvcGVydHlOYW1lKTsKIH0KIAotdm9pZCBKU0RPTVdpbmRvdzo6dmlzaXRBZGRpdGlvbmFs
Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
Pgordm9pZCBKU0RPTVdpbmRvdzo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlz
aXRvcikKIHsKICAgICBpZiAoRnJhbWUqIGZyYW1lID0gd3JhcHBlZCgpLmZyYW1lKCkpCiAgICAg
ICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChmcmFtZSk7CkBAIC0xMzIsNiArMTMzLDggQEAgdm9p
ZCBKU0RPTVdpbmRvdzo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZQogICAgIHdyYXBwZWQoKS52aXNp
dEpTRXZlbnRMaXN0ZW5lcnModmlzaXRvcik7CiB9CiAKK0RFRklORV9WSVNJVF9BRERJVElPTkFM
X0NISUxEUkVOKEpTRE9NV2luZG93KTsKKwogI2lmIEVOQUJMRShVU0VSX01FU1NBR0VfSEFORExF
UlMpCiBKU0NfREVGSU5FX0NVU1RPTV9HRVRURVIoanNET01XaW5kb3dfd2Via2l0LCAoSlNHbG9i
YWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwg
UHJvcGVydHlOYW1lKSkKIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGVw
cmVjYXRlZENTU09NVmFsdWVDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTRGVwcmVjYXRlZENTU09NVmFsdWVDdXN0b20uY3BwCShyZXZpc2lvbiAy
NzMxMTkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RlcHJlY2F0ZWRDU1NPTVZh
bHVlQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDctMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM1LDcgKzM1LDcgQEAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKLWJvb2wgSlNEZXByZWNhdGVkQ1NT
T01WYWx1ZU93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6
OlVua25vd24+IGhhbmRsZSwgdm9pZCosIFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFy
KiogcmVhc29uKQorYm9vbCBKU0RlcHJlY2F0ZWRDU1NPTVZhbHVlT3duZXI6OmlzUmVhY2hhYmxl
RnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwg
QWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikKIHsKICAg
ICBKU0RlcHJlY2F0ZWRDU1NPTVZhbHVlKiBqc0NTU1ZhbHVlID0ganNDYXN0PEpTRGVwcmVjYXRl
ZENTU09NVmFsdWUqPihoYW5kbGUuc2xvdCgpLT5hc0NlbGwoKSk7CiAgICAgaWYgKCFqc0NTU1Zh
bHVlLT5oYXNDdXN0b21Qcm9wZXJ0aWVzKGpzQ1NTVmFsdWUtPnZtKCkpKQpJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNEb2N1bWVudEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNEb2N1bWVudEN1c3RvbS5jcHAJKHJldmlzaW9u
IDI3MzExOSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRG9jdW1lbnRDdXN0b20u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwNy0yMDA5LCAyMDExLCAyMDE2LCAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtOTEsMTEgKzkxLDE0IEBAIEpTVmFsdWUgdG9K
UyhKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2IKICAgICByZXR1cm4gdG9KU05ld2x5Q3JlYXRl
ZChsZXhpY2FsR2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QsIFJlZjxEb2N1bWVudD4oZG9jdW1l
bnQpKTsKIH0KIAotdm9pZCBKU0RvY3VtZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90
VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTRG9j
dW1lbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAg
dmlzaXRvci5hZGRPcGFxdWVSb290KHN0YXRpY19jYXN0PFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
Pigmd3JhcHBlZCgpKSk7CiB9CiAKK0RFRklORV9WSVNJVF9BRERJVElPTkFMX0NISUxEUkVOKEpT
RG9jdW1lbnQpOworCiB2b2lkIEpTRG9jdW1lbnQ6OmFuYWx5emVIZWFwKEpTQ2VsbCogY2VsbCwg
SGVhcEFuYWx5emVyJiBhbmFseXplcikKIHsKICAgICBCYXNlOjphbmFseXplSGVhcChjZWxsLCBh
bmFseXplcik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Vycm9yRXZlbnRD
dXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXJy
b3JFdmVudEN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTRXJyb3JFdmVudEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDE4IFl1c3VrZSBTdXp1a2kgPHl1c3VrZXN1
enVraUBzbG93c3RhcnQub3JnPi4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI4
LDkgKzI5LDEyIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBKU0Vycm9yRXZlbnQ6
OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1w
bGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0Vycm9yRXZlbnQ6OnZpc2l0QWRkaXRpb25h
bENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgd3JhcHBlZCgpLm9yaWdpbmFsRXJy
b3IoKS52aXNpdCh2aXNpdG9yKTsKIH0KIAorREVGSU5FX1ZJU0lUX0FERElUSU9OQUxfQ0hJTERS
RU4oSlNFcnJvckV2ZW50KTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudExpc3RlbmVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50TGlzdGVuZXIuY3BwCShyZXZpc2lvbiAy
NzMxMTkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50TGlzdGVuZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDIw
MDEgUGV0ZXIgS2VsbHkgKHBta0Bwb3N0LmNvbSkKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAx
OSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDAz
LTIwMjEgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAg
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1Ymxp
YwpAQCAtNzgsNyArNzgsOCBAQCBKU09iamVjdCogSlNFdmVudExpc3RlbmVyOjppbml0aWFsaXpl
SlNGCiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLXZvaWQgSlNFdmVudExpc3RlbmVyOjp2aXNp
dEpTRnVuY3Rpb24oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNp
dG9yPgoraW5saW5lIHZvaWQgSlNFdmVudExpc3RlbmVyOjp2aXNpdEpTRnVuY3Rpb25JbXBsKFZp
c2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgLy8gSWYgbV93cmFwcGVyIGlzIG51bGwsIHdlIGFyZSBu
b3Qga2VlcGluZyBtX2pzRnVuY3Rpb24gYWxpdmUuCiAgICAgaWYgKCFtX3dyYXBwZXIpCkBAIC04
Nyw2ICs4OCw5IEBAIHZvaWQgSlNFdmVudExpc3RlbmVyOjp2aXNpdEpTRnVuY3Rpb24oU2wKICAg
ICB2aXNpdG9yLmFwcGVuZChtX2pzRnVuY3Rpb24pOwogfQogCit2b2lkIEpTRXZlbnRMaXN0ZW5l
cjo6dmlzaXRKU0Z1bmN0aW9uKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsgdmlzaXRK
U0Z1bmN0aW9uSW1wbCh2aXNpdG9yKTsgfQordm9pZCBKU0V2ZW50TGlzdGVuZXI6OnZpc2l0SlNG
dW5jdGlvbihTbG90VmlzaXRvciYgdmlzaXRvcikgeyB2aXNpdEpTRnVuY3Rpb25JbXBsKHZpc2l0
b3IpOyB9CisKIHN0YXRpYyB2b2lkIGhhbmRsZUJlZm9yZVVubG9hZEV2ZW50UmV0dXJuVmFsdWUo
QmVmb3JlVW5sb2FkRXZlbnQmIGV2ZW50LCBjb25zdCBTdHJpbmcmIHJldHVyblZhbHVlKQogewog
ICAgIGlmIChyZXR1cm5WYWx1ZS5pc051bGwoKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTRXZlbnRMaXN0ZW5lci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTRXZlbnRMaXN0ZW5lci5oCShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50TGlzdGVuZXIuaAkod29ya2luZyBjb3B5KQpAQCAt
MSw2ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAyMDAxIFBldGVyIEtlbGx5IChwbWtA
cG9zdC5jb20pCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMTggQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwMy0yMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKQEAgLTYyLDYgKzYyLDkgQEAg
cHVibGljOgogCiBwcml2YXRlOgogICAgIHZpcnR1YWwgSlNDOjpKU09iamVjdCogaW5pdGlhbGl6
ZUpTRnVuY3Rpb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYpIGNvbnN0OworCisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCB2aXNpdEpTRnVuY3Rpb25JbXBsKFZpc2l0b3ImKTsK
KyAgICB2b2lkIHZpc2l0SlNGdW5jdGlvbihKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKSBmaW5h
bDsKICAgICB2b2lkIHZpc2l0SlNGdW5jdGlvbihKU0M6OlNsb3RWaXNpdG9yJikgZmluYWw7CiAK
IHByb3RlY3RlZDoKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRUYXJn
ZXRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
RXZlbnRUYXJnZXRDdXN0b20uY3BwCShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0V2ZW50VGFyZ2V0Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxNyBBcHBsZSBJbmMuIEFs
bCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAyMSBBcHBsZSBJbmMu
IEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTcyLDkgKzcyLDEyIEBAIHN0ZDo6dW5pcXVlX3B0cjxKU0V2ZW50VGFyZ2V0V3JhcHBlcj4ganMK
ICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotdm9pZCBKU0V2ZW50VGFyZ2V0Ojp2aXNpdEFkZGl0
aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZp
c2l0b3I+Cit2b2lkIEpTRXZlbnRUYXJnZXQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0
b3ImIHZpc2l0b3IpCiB7CiAgICAgd3JhcHBlZCgpLnZpc2l0SlNFdmVudExpc3RlbmVycyh2aXNp
dG9yKTsKIH0KIAorREVGSU5FX1ZJU0lUX0FERElUSU9OQUxfQ0hJTERSRU4oSlNFdmVudFRhcmdl
dCk7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTRmV0Y2hFdmVudEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNGZXRjaEV2ZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gMjczMTE5KQor
KysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNGZXRjaEV2ZW50Q3VzdG9tLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0zMCwxMSArMzAsMTQgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lk
IEpTRmV0Y2hFdmVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYg
dmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTRmV0Y2hFdmVudDo6
dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB2aXNpdG9y
LmFkZE9wYXF1ZVJvb3QoJndyYXBwZWQoKS5yZXF1ZXN0KCkpOwogfQogCi19CitERUZJTkVfVklT
SVRfQURESVRJT05BTF9DSElMRFJFTihKU0ZldGNoRXZlbnQpOworCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCiAKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1M
Q2FudmFzRWxlbWVudEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNIVE1MQ2FudmFzRWxlbWVudEN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MzExOSkK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTENhbnZhc0VsZW1lbnRDdXN0b20u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MjAtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTMxLDkgKzMxLDEyIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAotdm9pZCBKU0hUTUxDYW52YXNFbGVtZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6
OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQg
SlNIVE1MQ2FudmFzRWxlbWVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlz
aXRvcikKIHsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qoc3RhdGljX2Nhc3Q8Q2FudmFzQmFz
ZSo+KCZ3cmFwcGVkKCkpKTsKIH0KIAorREVGSU5FX1ZJU0lUX0FERElUSU9OQUxfQ0hJTERSRU4o
SlNIVE1MQ2FudmFzRWxlbWVudCk7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTFRlbXBsYXRlRWxlbWVudEN1c3RvbS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MVGVtcGxhdGVF
bGVtZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNIVE1MVGVtcGxhdGVFbGVtZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCkBAIC0z
NywxMCArMzgsMTMgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBKU0M7
CiAKLXZvaWQgSlNIVE1MVGVtcGxhdGVFbGVtZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihK
U0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3Zv
aWQgSlNIVE1MVGVtcGxhdGVFbGVtZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9y
JiB2aXNpdG9yKQogewogICAgIGlmIChhdXRvKiBjb250ZW50ID0gd3JhcHBlZCgpLmNvbnRlbnRJ
ZkF2YWlsYWJsZSgpKQogICAgICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qocm9vdChjb250ZW50
KSk7CiB9CiAKK0RFRklORV9WSVNJVF9BRERJVElPTkFMX0NISUxEUkVOKEpTSFRNTFRlbXBsYXRl
RWxlbWVudCk7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTSGlzdG9yeUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNIaXN0b3J5Q3VzdG9tLmNwcAkocmV2aXNpb24gMjczMTE5KQor
KysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIaXN0b3J5Q3VzdG9tLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxOCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTQ0LDkgKzQ0LDEyIEBAIEpTVmFsdWUgSlNIaXN0b3J5OjpzdGF0ZShKU0ds
b2JhbE9iamVjdCYKICAgICB9KTsKIH0KIAotdm9pZCBKU0hpc3Rvcnk6OnZpc2l0QWRkaXRpb25h
bENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRv
cj4KK3ZvaWQgSlNIaXN0b3J5Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNp
dG9yKQogewogICAgIHdyYXBwZWQoKS5jYWNoZWRTdGF0ZUZvckdDKCkudmlzaXQodmlzaXRvcik7
CiB9CiAKK0RFRklORV9WSVNJVF9BRERJVElPTkFMX0NISUxEUkVOKEpTSGlzdG9yeSk7CisKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
SURCQ3Vyc29yQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0lEQkN1cnNvckN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCQ3Vyc29yQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01
MCw3ICs1MCw4IEBAIEpTQzo6SlNWYWx1ZSBKU0lEQkN1cnNvcjo6cHJpbWFyeUtleShKU0MKICAg
ICB9KTsKIH0KIAotdm9pZCBKU0lEQkN1cnNvcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xv
dFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0lE
QkN1cnNvcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAg
ICBhdXRvJiBjdXJzb3IgPSB3cmFwcGVkKCk7CiAgICAgaWYgKGF1dG8qIHJlcXVlc3QgPSBjdXJz
b3IucmVxdWVzdCgpKQpAQCAtNTksNiArNjAsOCBAQCB2b2lkIEpTSURCQ3Vyc29yOjp2aXNpdEFk
ZGl0aW9uYWxDaGlsZHJlCiAgICAgY3Vyc29yLnByaW1hcnlLZXlXcmFwcGVyKCkudmlzaXQodmlz
aXRvcik7CiB9CiAKK0RFRklORV9WSVNJVF9BRERJVElPTkFMX0NISUxEUkVOKEpTSURCQ3Vyc29y
KTsKKwogSlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0RP
TUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWY8SURCQ3Vyc29yPiYmIGN1cnNvcikKIHsK
ICAgICBpZiAoaXM8SURCQ3Vyc29yV2l0aFZhbHVlPihjdXJzb3IpKQpJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNJREJDdXJzb3JXaXRoVmFsdWVDdXN0b20uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCQ3Vyc29yV2l0aFZhbHVlQ3Vz
dG9tLmNwcAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNJREJDdXJzb3JXaXRoVmFsdWVDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQzLDEyICs0Mywx
NSBAQCBKU0M6OkpTVmFsdWUgSlNJREJDdXJzb3JXaXRoVmFsdWU6OnZhbHVlCiAgICAgfSk7CiB9
CiAKLXZvaWQgSlNJREJDdXJzb3JXaXRoVmFsdWU6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNJ
REJDdXJzb3JXaXRoVmFsdWU6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0
b3IpCiB7CiAgICAgSlNJREJDdXJzb3I6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKHZpc2l0b3Ip
OwogICAgIHdyYXBwZWQoKS52YWx1ZVdyYXBwZXIoKS52aXNpdCh2aXNpdG9yKTsKIH0KIAorREVG
SU5FX1ZJU0lUX0FERElUSU9OQUxfQ0hJTERSRU4oSlNJREJDdXJzb3JXaXRoVmFsdWUpOworCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFT
RSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCSW5kZXhDdXN0b20uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCSW5kZXhDdXN0
b20uY3BwCShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0lEQkluZGV4Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNCwxMSArMzQsMTQgQEAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKLXZvaWQgSlNJREJJbmRleDo6
dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0
eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0lEQkluZGV4Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJl
bihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChzdGF0aWNf
Y2FzdDxJREJJbmRleCY+KHdyYXBwZWQoKSkub2JqZWN0U3RvcmVBc09wYXF1ZVJvb3QoKSk7CiB9
CiAKK0RFRklORV9WSVNJVF9BRERJVElPTkFMX0NISUxEUkVOKEpTSURCSW5kZXgpOworCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCT2JqZWN0U3RvcmVDdXN0b20u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCT2JqZWN0
U3RvcmVDdXN0b20uY3BwCShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0lEQk9iamVjdFN0b3JlQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTIgTWljaGFlbCBQcnVldHQgPG1pY2hh
ZWxANjhrLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCkBAIC0zNiwxMSAr
MzcsMTQgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKLXZv
aWQgSlNJREJPYmplY3RTdG9yZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3Im
IHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0lEQk9iamVjdFN0
b3JlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHN0
YXRpY19jYXN0PElEQk9iamVjdFN0b3JlJj4od3JhcHBlZCgpKS52aXNpdFJlZmVyZW5jZWRJbmRl
eGVzKHZpc2l0b3IpOwogfQogCi19CitERUZJTkVfVklTSVRfQURESVRJT05BTF9DSElMRFJFTihK
U0lEQk9iamVjdFN0b3JlKTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCUmVxdWVzdEN1c3RvbS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJSZXF1ZXN0Q3VzdG9t
LmNwcAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJ
REJSZXF1ZXN0Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE5LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC04OSwxMiArODksMTYgQEAgSlNDOjpK
U1ZhbHVlIEpTSURCUmVxdWVzdDo6cmVzdWx0KEpTQzo6SgogICAgIH0pOwogfQogCi12b2lkIEpT
SURCUmVxdWVzdDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3Ip
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0lEQlJlcXVlc3Q6OnZpc2l0QWRk
aXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0byYgcmVxdWVzdCA9
IHdyYXBwZWQoKTsKICAgICByZXF1ZXN0LnJlc3VsdFdyYXBwZXIoKS52aXNpdCh2aXNpdG9yKTsK
ICAgICByZXF1ZXN0LmN1cnNvcldyYXBwZXIoKS52aXNpdCh2aXNpdG9yKTsKIH0KIAotfQorREVG
SU5FX1ZJU0lUX0FERElUSU9OQUxfQ0hJTERSRU4oSlNJREJSZXF1ZXN0KTsKKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorCiAjZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQlRyYW5zYWN0aW9uQ3VzdG9tLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQlRyYW5zYWN0aW9u
Q3VzdG9tLmNwcAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNJREJUcmFuc2FjdGlvbkN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzQsMTEgKzM0LDE0
IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCi12b2lkIEpT
SURCVHJhbnNhY3Rpb246OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNp
dG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNJREJUcmFuc2FjdGlvbjo6
dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBzdGF0aWNf
Y2FzdDxJREJUcmFuc2FjdGlvbiY+KHdyYXBwZWQoKSkudmlzaXRSZWZlcmVuY2VkT2JqZWN0U3Rv
cmVzKHZpc2l0b3IpOwogfQogCi19CitERUZJTkVfVklTSVRfQURESVRJT05BTF9DSElMRFJFTihK
U0lEQlRyYW5zYWN0aW9uKTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW50ZXJzZWN0aW9uT2JzZXJ2ZXJDdXN0
b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW50ZXJz
ZWN0aW9uT2JzZXJ2ZXJDdXN0b20uY3BwCShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0ludGVyc2VjdGlvbk9ic2VydmVyQ3VzdG9tLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMjAgSWdhbGlh
IFMuTC4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMwLDEwICszMSwxMyBAQAog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgSlNJbnRlcnNlY3Rpb25PYnNlcnZlcjo6dmlz
aXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRl
PHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTSW50ZXJzZWN0aW9uT2JzZXJ2ZXI6OnZpc2l0QWRk
aXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgaWYgKGF1dG8qIGNhbGxi
YWNrID0gd3JhcHBlZCgpLmNhbGxiYWNrQ29uY3VycmVudGx5KCkpCiAgICAgICAgIGNhbGxiYWNr
LT52aXNpdEpTRnVuY3Rpb24odmlzaXRvcik7CiB9CiAKLX0KK0RFRklORV9WSVNJVF9BRERJVElP
TkFMX0NISUxEUkVOKEpTSW50ZXJzZWN0aW9uT2JzZXJ2ZXIpOworCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0ludGVyc2VjdGlvbk9i
c2VydmVyRW50cnlDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTSW50ZXJzZWN0aW9uT2JzZXJ2ZXJFbnRyeUN1c3RvbS5jcHAJKHJldmlzaW9uIDI3
MzExOSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW50ZXJzZWN0aW9uT2JzZXJ2
ZXJFbnRyeUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKgogICog
Q29weXJpZ2h0IChDKSAyMDE4IEdvb2dsZSBMTEMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMCw3ICszMSw4IEBACiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotdm9pZCBKU0ludGVyc2VjdGlvbk9ic2VydmVyRW50cnk6OnZpc2l0QWRkaXRp
b25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBWaXNpdG9yPgordm9pZCBKU0ludGVyc2VjdGlvbk9ic2VydmVyRW50cnk6OnZpc2l0QWRkaXRp
b25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVS
b290KHJvb3Qod3JhcHBlZCgpLnRhcmdldCgpKSk7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290
KHdyYXBwZWQoKS5ib3VuZGluZ0NsaWVudFJlY3QoKSk7CkBAIC0zOCw0ICs0MCw2IEBAIHZvaWQg
SlNJbnRlcnNlY3Rpb25PYnNlcnZlckVudHJ5Ojp2aXNpdEEKICAgICB2aXNpdG9yLmFkZE9wYXF1
ZVJvb3Qod3JhcHBlZCgpLnJvb3RCb3VuZHMoKSk7CiB9CiAKLX0KK0RFRklORV9WSVNJVF9BRERJ
VElPTkFMX0NISUxEUkVOKEpTSW50ZXJzZWN0aW9uT2JzZXJ2ZXJFbnRyeSk7CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWVzc2Fn
ZUNoYW5uZWxDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTTWVzc2FnZUNoYW5uZWxDdXN0b20uY3BwCShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01lc3NhZ2VDaGFubmVsQ3VzdG9tLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkg
QXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIw
MjEgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0zMyw3ICszMyw4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9p
ZCBKU01lc3NhZ2VDaGFubmVsOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNp
dG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNNZXNzYWdl
Q2hhbm5lbDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAg
ICBpZiAoTWVzc2FnZVBvcnQqIHBvcnQgPSB3cmFwcGVkKCkucG9ydDEoKSkKICAgICAgICAgdmlz
aXRvci5hZGRPcGFxdWVSb290KHBvcnQpOwpAQCAtNDIsNiArNDMsOCBAQCB2b2lkIEpTTWVzc2Fn
ZUNoYW5uZWw6OnZpc2l0QWRkaXRpb25hbENoCiAgICAgICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9v
dChwb3J0KTsKIH0KIAorREVGSU5FX1ZJU0lUX0FERElUSU9OQUxfQ0hJTERSRU4oSlNNZXNzYWdl
Q2hhbm5lbCk7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShD
SEFOTkVMX01FU1NBR0lORykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWVz
c2FnZUV2ZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU01lc3NhZ2VFdmVudEN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWVzc2FnZUV2ZW50Q3VzdG9tLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOS0yMDE4IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucyBhcmUKQEAgLTcwLDcgKzcwLDggQEAgSlNDOjpKU1ZhbHVlIEpTTWVzc2FnZUV2ZW50Ojpk
YXRhKEpTQzo6SgogICAgIH0pOwogfQogCi12b2lkIEpTTWVzc2FnZUV2ZW50Ojp2aXNpdEFkZGl0
aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5h
bWUgVmlzaXRvcj4KK3ZvaWQgSlNNZXNzYWdlRXZlbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVu
KFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgV1RGOjpzd2l0Y2hPbih3cmFwcGVkKCkuZGF0YSgp
LCBbJnZpc2l0b3JdIChjb25zdCBKU1ZhbHVlSW5XcmFwcGVkT2JqZWN0JiBkYXRhKSB7CiAgICAg
ICAgIGRhdGEudmlzaXQodmlzaXRvcik7CkBAIC04NCw0ICs4NSw2IEBAIHZvaWQgSlNNZXNzYWdl
RXZlbnQ6OnZpc2l0QWRkaXRpb25hbENoaWwKICAgICB3cmFwcGVkKCkuY2FjaGVkUG9ydHMoKS52
aXNpdCh2aXNpdG9yKTsKIH0KIAorREVGSU5FX1ZJU0lUX0FERElUSU9OQUxfQ0hJTERSRU4oSlNN
ZXNzYWdlRXZlbnQpOworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU01lc3NhZ2VQb3J0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01lc3NhZ2VQb3J0Q3VzdG9tLmNwcAkocmV2aXNp
b24gMjczMTE5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNZXNzYWdlUG9ydEN1
c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDA4LTIwMDksIDIwMTYgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDA4LTIwMjEgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgog
ICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CkBAIC0zMSwxMSArMzEsMTQgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKLXZvaWQgSlNNZXNzYWdlUG9ydDo6dmlzaXRBZGRpdGlv
bmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNp
dG9yPgordm9pZCBKU01lc3NhZ2VQb3J0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9y
JiB2aXNpdG9yKQogewogICAgIC8vIElmIHdlIGhhdmUgYSBsb2NhbGx5IGVudGFuZ2xlZCBwb3J0
LCB3ZSBjYW4gZGlyZWN0bHkgbWFyayBpdCBhcyByZWFjaGFibGUuIFBvcnRzIHRoYXQgYXJlIHJl
bW90ZWx5IGVudGFuZ2xlZCBhcmUgbWFya2VkIGluLXVzZSBieSBtYXJrQWN0aXZlT2JqZWN0c0Zv
ckNvbnRleHQoKS4KICAgICBpZiAoTWVzc2FnZVBvcnQqIHBvcnQgPSB3cmFwcGVkKCkubG9jYWxs
eUVudGFuZ2xlZFBvcnQoKSkKICAgICAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHBvcnQpOwog
fQogCitERUZJTkVfVklTSVRfQURESVRJT05BTF9DSElMRFJFTihKU01lc3NhZ2VQb3J0KTsKKwog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNNdXRhdGlvbk9ic2VydmVyQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU011dGF0aW9uT2JzZXJ2ZXJDdXN0b20uY3BwCShyZXZpc2lvbiAyNzMx
MTkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU011dGF0aW9uT2JzZXJ2ZXJDdXN0
b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAo
QykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKQEAgLTM5LDEyICszOSwxNSBAQAogbmFtZXNwYWNlIFdlYkNv
cmUgewogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAotdm9pZCBKU011dGF0aW9uT2JzZXJ2ZXI6OnZp
c2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0
ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU011dGF0aW9uT2JzZXJ2ZXI6OnZpc2l0QWRkaXRp
b25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgd3JhcHBlZCgpLmNhbGxiYWNr
KCkudmlzaXRKU0Z1bmN0aW9uKHZpc2l0b3IpOwogfQogCi1ib29sIEpTTXV0YXRpb25PYnNlcnZl
ck93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25v
d24+IGhhbmRsZSwgdm9pZCosIFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKipyZWFz
b24pCitERUZJTkVfVklTSVRfQURESVRJT05BTF9DSElMRFJFTihKU011dGF0aW9uT2JzZXJ2ZXIp
OworCitib29sIEpTTXV0YXRpb25PYnNlcnZlck93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVS
b290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIEFic3RyYWN0U2xv
dFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKnJlYXNvbikKIHsKICAgICBmb3IgKGF1dG8q
IG5vZGUgOiBqc0Nhc3Q8SlNNdXRhdGlvbk9ic2VydmVyKj4oaGFuZGxlLnNsb3QoKS0+YXNDZWxs
KCkpLT53cmFwcGVkKCkub2JzZXJ2ZWROb2RlcygpKSB7CiAgICAgICAgIGlmICh2aXNpdG9yLmNv
bnRhaW5zT3BhcXVlUm9vdChyb290KG5vZGUpKSkgewpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNNdXRhdGlvblJlY29yZEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNNdXRhdGlvblJlY29yZEN1c3RvbS5jcHAJKHJldmlzaW9u
IDI3MzExOSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTXV0YXRpb25SZWNvcmRD
dXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTgtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMwLDkgKzMwLDEyIEBACiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAotdm9pZCBKU011dGF0aW9uUmVjb3JkOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihK
U0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3Zv
aWQgSlNNdXRhdGlvblJlY29yZDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlz
aXRvcikKIHsKICAgICB3cmFwcGVkKCkudmlzaXROb2Rlc0NvbmN1cnJlbnRseSh2aXNpdG9yKTsK
IH0KLSAgICAKKworREVGSU5FX1ZJU0lUX0FERElUSU9OQUxfQ0hJTERSRU4oSlNNdXRhdGlvblJl
Y29yZCk7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTTmF2aWdhdG9yQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU05hdmlnYXRvckN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MzExOSkK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTmF2aWdhdG9yQ3VzdG9tLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0zMiwxMSArMzIsMTQgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lk
IEpTTmF2aWdhdG9yOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2
aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNOYXZpZ2F0b3I6OnZp
c2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgdmlzaXRvci5h
ZGRPcGFxdWVSb290KHN0YXRpY19jYXN0PE5hdmlnYXRvckJhc2UqPigmd3JhcHBlZCgpKSk7CiB9
CiAKK0RFRklORV9WSVNJVF9BRERJVElPTkFMX0NISUxEUkVOKEpTTmF2aWdhdG9yKTsKKwogI2lm
IEVOQUJMRShNRURJQV9TVFJFQU0pCiBKU0M6OkpTVmFsdWUgSlNOYXZpZ2F0b3I6OmdldFVzZXJN
ZWRpYShKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OkNhbGxG
cmFtZSYgY2FsbEZyYW1lKQogewpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNO
b2RlQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U05vZGVDdXN0b20uY3BwCShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU05vZGVDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOS0yMDEwLCAyMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
NzQsNyArNzQsNyBAQCB1c2luZyBuYW1lc3BhY2UgSlNDOwogCiB1c2luZyBuYW1lc3BhY2UgSFRN
TE5hbWVzOwogCi1zdGF0aWMgaW5saW5lIGJvb2wgaXNSZWFjaGFibGVGcm9tRE9NKE5vZGUqIG5v
ZGUsIFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQorc3RhdGljIGlu
bGluZSBib29sIGlzUmVhY2hhYmxlRnJvbURPTShOb2RlKiBub2RlLCBBYnN0cmFjdFNsb3RWaXNp
dG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQogewogICAgIGlmICghbm9kZS0+aXND
b25uZWN0ZWQoKSkgewogICAgICAgICBpZiAoaXM8RWxlbWVudD4oKm5vZGUpKSB7CkBAIC0xMjMs
NyArMTIzLDcgQEAgc3RhdGljIGlubGluZSBib29sIGlzUmVhY2hhYmxlRnJvbURPTShObwogICAg
IHJldHVybiB2aXNpdG9yLmNvbnRhaW5zT3BhcXVlUm9vdChyb290KG5vZGUpKTsKIH0KIAotYm9v
bCBKU05vZGVPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlND
OjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hh
cioqIHJlYXNvbikKK2Jvb2wgSlNOb2RlT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3Rz
KEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgQWJzdHJhY3RTbG90Vmlz
aXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikKIHsKICAgICBKU05vZGUqIGpzTm9k
ZSA9IGpzQ2FzdDxKU05vZGUqPihoYW5kbGUuc2xvdCgpLT5hc0NlbGwoKSk7CiAgICAgcmV0dXJu
IGlzUmVhY2hhYmxlRnJvbURPTSgmanNOb2RlLT53cmFwcGVkKCksIHZpc2l0b3IsIHJlYXNvbik7
CkBAIC0xMzYsMTEgKzEzNiwxNCBAQCBKU1Njb3BlKiBKU05vZGU6OnB1c2hFdmVudEhhbmRsZXJT
Y29wZShKCiAgICAgcmV0dXJuIG5vZGU7CiB9CiAKLXZvaWQgSlNOb2RlOjp2aXNpdEFkZGl0aW9u
YWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0
b3I+Cit2b2lkIEpTTm9kZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRv
cikKIHsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qocm9vdCh3cmFwcGVkKCkpKTsKIH0KIAor
REVGSU5FX1ZJU0lUX0FERElUSU9OQUxfQ0hJTERSRU4oSlNOb2RlKTsKKwogc3RhdGljIEFMV0FZ
U19JTkxJTkUgSlNWYWx1ZSBjcmVhdGVXcmFwcGVySW5saW5lKEpTR2xvYmFsT2JqZWN0KiBsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWY8Tm9k
ZT4mJiBub2RlKQogewogICAgIEFTU0VSVCghZ2V0Q2FjaGVkV3JhcHBlcihnbG9iYWxPYmplY3Qt
PndvcmxkKCksIG5vZGUpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9k
ZUl0ZXJhdG9yQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU05vZGVJdGVyYXRvckN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUl0ZXJhdG9yQ3VzdG9tLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDgsIDIw
MDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2
LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CkBAIC0yNSwxMCArMjUsMTMgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIEpTTm9k
ZUl0ZXJhdG9yOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNp
dG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNOb2RlSXRlcmF0b3I6OnZp
c2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgaWYgKE5vZGVG
aWx0ZXIqIGZpbHRlciA9IHdyYXBwZWQoKS5maWx0ZXIoKSkKICAgICAgICAgdmlzaXRvci5hZGRP
cGFxdWVSb290KGZpbHRlcik7CiB9CiAKLX0KK0RFRklORV9WSVNJVF9BRERJVElPTkFMX0NISUxE
UkVOKEpTTm9kZUl0ZXJhdG9yKTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlTGlzdEN1c3RvbS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlTGlzdEN1c3RvbS5jcHAJKHJldmlz
aW9uIDI3MzExOSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUxpc3RDdXN0
b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAwNy0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAwNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzcsNyArMzcsNyBAQAogbmFtZXNwYWNlIFdlYkNv
cmUgewogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAotYm9vbCBKU05vZGVMaXN0T3duZXI6OmlzUmVh
Y2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2
b2lkKiwgU2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCitib29sIEpT
Tm9kZUxpc3RPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlND
OjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBj
b25zdCBjaGFyKiogcmVhc29uKQogewogICAgIEpTTm9kZUxpc3QqIGpzTm9kZUxpc3QgPSBqc0Nh
c3Q8SlNOb2RlTGlzdCo+KGhhbmRsZS5zbG90KCktPmFzQ2VsbCgpKTsKICAgICBpZiAoIWpzTm9k
ZUxpc3QtPmhhc0N1c3RvbVByb3BlcnRpZXMoanNOb2RlTGlzdC0+dm0oKSkpCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU09mZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRleHQy
REN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNP
ZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRDdXN0b20uY3BwCShyZXZpc2lvbiAyNzMx
MTkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU09mZnNjcmVlbkNhbnZhc1JlbmRl
cmluZ0NvbnRleHQyREN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMzEsNyArMzEsNyBAQCBpbmxpbmUgdm9pZCogcm9v
dChPZmZzY3JlZW5DYW52YXMqIGNhbnZhCiAgICAgcmV0dXJuIGNhbnZhczsKIH0KIAotYm9vbCBK
U09mZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRE93bmVyOjppc1JlYWNoYWJsZUZyb21P
cGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIFNsb3RW
aXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQorYm9vbCBKU09mZnNjcmVlbkNh
bnZhc1JlbmRlcmluZ0NvbnRleHQyRE93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhK
U0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIEFic3RyYWN0U2xvdFZpc2l0
b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCiB7CiAgICAgaWYgKFVOTElLRUxZKHJl
YXNvbikpCiAgICAgICAgICpyZWFzb24gPSAiQ2FudmFzIGlzIG9wYXF1ZSByb290IjsKQEAgLTQx
LDExICs0MSwxNCBAQCBib29sIEpTT2Zmc2NyZWVuQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJECiAg
ICAgcmV0dXJuIHZpc2l0b3IuY29udGFpbnNPcGFxdWVSb290KHJvb3QpOwogfQogCi12b2lkIEpT
T2Zmc2NyZWVuQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJl
bihTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lk
IEpTT2Zmc2NyZWVuQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjp2aXNpdEFkZGl0aW9uYWxDaGls
ZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChyb290
KCZ3cmFwcGVkKCkuY2FudmFzKCkpKTsKIH0KIAorREVGSU5FX1ZJU0lUX0FERElUSU9OQUxfQ0hJ
TERSRU4oSlNPZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQpOworCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCiAKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNQYWludFJlbmRlcmluZ0NvbnRleHQyREN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNQYWludFJlbmRlcmluZ0NvbnRleHQyREN1c3RvbS5jcHAJ
KHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUGFpbnRS
ZW5kZXJpbmdDb250ZXh0MkRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM2LDcgKzM2LDcgQEAg
aW5saW5lIHZvaWQqIHJvb3QoQ3VzdG9tUGFpbnRDYW52YXMqIGNhbgogICAgIHJldHVybiBjYW52
YXM7CiB9CiAKLWJvb2wgSlNQYWludFJlbmRlcmluZ0NvbnRleHQyRE93bmVyOjppc1JlYWNoYWJs
ZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCos
IFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQorYm9vbCBKU1BhaW50
UmVuZGVyaW5nQ29udGV4dDJET3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6
SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgQWJzdHJhY3RTbG90VmlzaXRvciYg
dmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikKIHsKICAgICBpZiAoVU5MSUtFTFkocmVhc29u
KSkKICAgICAgICAgKnJlYXNvbiA9ICJDYW52YXMgaXMgb3BhcXVlIHJvb3QiOwpAQCAtNDYsMTEg
KzQ2LDE0IEBAIGJvb2wgSlNQYWludFJlbmRlcmluZ0NvbnRleHQyRE93bmVyOjppc1IKICAgICBy
ZXR1cm4gdmlzaXRvci5jb250YWluc09wYXF1ZVJvb3Qocm9vdCk7CiB9CiAKLXZvaWQgSlNQYWlu
dFJlbmRlcmluZ0NvbnRleHQyRDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3Im
IHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1BhaW50UmVuZGVy
aW5nQ29udGV4dDJEOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQog
ewogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChyb290KCZ3cmFwcGVkKCkuY2FudmFzKCkpKTsK
IH0KIAorREVGSU5FX1ZJU0lUX0FERElUSU9OQUxfQ0hJTERSRU4oSlNQYWludFJlbmRlcmluZ0Nv
bnRleHQyRCk7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKICNlbmRpZgogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1BhaW50V29ya2xldEdsb2JhbFNjb3BlQ3VzdG9tLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1BhaW50V29ya2xl
dEdsb2JhbFNjb3BlQ3VzdG9tLmNwcAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNQYWludFdvcmtsZXRHbG9iYWxTY29wZUN1c3RvbS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOC0yMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMzEsNyArMzEsOCBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogdXNpbmcgbmFtZXNw
YWNlIEpTQzsKIAotdm9pZCBKU1BhaW50V29ya2xldEdsb2JhbFNjb3BlOjp2aXNpdEFkZGl0aW9u
YWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUg
VmlzaXRvcj4KK3ZvaWQgSlNQYWludFdvcmtsZXRHbG9iYWxTY29wZTo6dmlzaXRBZGRpdGlvbmFs
Q2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2Nr
KHdyYXBwZWQoKS5wYWludERlZmluaXRpb25Mb2NrKCkpOwogICAgIGZvciAoYXV0byYgcmVnaXN0
ZXJlZCA6IHdyYXBwZWQoKS5wYWludERlZmluaXRpb25NYXAoKS52YWx1ZXMoKSkgewpAQCAtNDAs
NSArNDEsOCBAQCB2b2lkIEpTUGFpbnRXb3JrbGV0R2xvYmFsU2NvcGU6OnZpc2l0QWRkCiAgICAg
fQogfQogCi19CitERUZJTkVfVklTSVRfQURESVRJT05BTF9DSElMRFJFTihKU1BhaW50V29ya2xl
dEdsb2JhbFNjb3BlKTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCiAjZW5kaWYKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUGF5bWVudE1ldGhvZENoYW5nZUV2ZW50Q3Vz
dG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1BheW1l
bnRNZXRob2RDaGFuZ2VFdmVudEN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUGF5bWVudE1ldGhvZENoYW5nZUV2ZW50Q3VzdG9tLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE4
LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC00MSw3ICs0MSw4IEBAIEpTQzo6SlNWYWx1ZSBKU1BheW1lbnRNZXRo
b2RDaGFuZ2VFdmVudDoKICAgICB9KTsKIH0KIAotdm9pZCBKU1BheW1lbnRNZXRob2RDaGFuZ2VF
dmVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikK
K3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTUGF5bWVudE1ldGhvZENoYW5nZUV2
ZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFdU
Rjo6c3dpdGNoT24od3JhcHBlZCgpLm1ldGhvZERldGFpbHMoKSwgWyZ2aXNpdG9yXShjb25zdCBK
U1ZhbHVlSW5XcmFwcGVkT2JqZWN0JiBtZXRob2REZXRhaWxzKSB7CiAgICAgICAgIG1ldGhvZERl
dGFpbHMudmlzaXQodmlzaXRvcik7CkBAIC01MSw2ICs1Miw4IEBAIHZvaWQgSlNQYXltZW50TWV0
aG9kQ2hhbmdlRXZlbnQ6OnZpc2l0QWQKICAgICB3cmFwcGVkKCkuY2FjaGVkTWV0aG9kRGV0YWls
cygpLnZpc2l0KHZpc2l0b3IpOwogfQogCitERUZJTkVfVklTSVRfQURESVRJT05BTF9DSElMRFJF
TihKU1BheW1lbnRNZXRob2RDaGFuZ2VFdmVudCk7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
IAogI2VuZGlmIC8vIEVOQUJMRShQQVlNRU5UX1JFUVVFU1QpCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU1BheW1lbnRSZXNwb25zZUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNQYXltZW50UmVzcG9uc2VDdXN0b20uY3BwCShy
ZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1BheW1lbnRS
ZXNwb25zZUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxOC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzcsMTEgKzM3LDE0IEBAIEpTQzo6SlNW
YWx1ZSBKU1BheW1lbnRSZXNwb25zZTo6ZGV0YWlscygKICAgICB9KTsKIH0KIAotdm9pZCBKU1Bh
eW1lbnRSZXNwb25zZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYg
dmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTUGF5bWVudFJlc3Bv
bnNlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHdy
YXBwZWQoKS5jYWNoZWREZXRhaWxzKCkudmlzaXQodmlzaXRvcik7CiB9CiAKK0RFRklORV9WSVNJ
VF9BRERJVElPTkFMX0NISUxEUkVOKEpTUGF5bWVudFJlc3BvbnNlKTsKKwogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKFBBWU1FTlRfUkVRVUVTVCkKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUGVyZm9ybWFuY2VPYnNlcnZlckN1c3RvbS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNQZXJmb3JtYW5jZU9i
c2VydmVyQ3VzdG9tLmNwcAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNQZXJmb3JtYW5jZU9ic2VydmVyQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0z
MSwxMiArMzEsMTUgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIEpTUGVyZm9ybWFu
Y2VPYnNlcnZlcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlz
aXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTUGVyZm9ybWFuY2VPYnNl
cnZlcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB3
cmFwcGVkKCkuY2FsbGJhY2soKS52aXNpdEpTRnVuY3Rpb24odmlzaXRvcik7CiB9CiAKLWJvb2wg
SlNQZXJmb3JtYW5jZU9ic2VydmVyT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpT
Qzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgSlNDOjpTbG90VmlzaXRvciYs
IGNvbnN0IGNoYXIqKiByZWFzb24pCitERUZJTkVfVklTSVRfQURESVRJT05BTF9DSElMRFJFTihK
U1BlcmZvcm1hbmNlT2JzZXJ2ZXIpOworCitib29sIEpTUGVyZm9ybWFuY2VPYnNlcnZlck93bmVy
Ojppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhh
bmRsZSwgdm9pZCosIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYsIGNvbnN0IGNoYXIqKiByZWFz
b24pCiB7CiAgICAgaWYgKFVOTElLRUxZKHJlYXNvbikpCiAgICAgICAgICpyZWFzb24gPSAiUmVn
aXN0ZXJlZCBQZXJmb3JtYW5jZU9ic2VydmVyIGNhbGxiYWNrIjsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTUG9wU3RhdGVFdmVudEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNQb3BTdGF0ZUV2ZW50Q3VzdG9tLmNwcAkocmV2
aXNpb24gMjczMTE5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNQb3BTdGF0ZUV2
ZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5
cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCkBAIC05MCw5ICs5MSwxMiBAQCBKU1ZhbHVlIEpTUG9w
U3RhdGVFdmVudDo6c3RhdGUoSlNHbG9iYWxPCiAgICAgcmV0dXJuIGNhY2hlU3RhdGUocmVzdWx0
KTsKIH0KIAotdm9pZCBKU1BvcFN0YXRlRXZlbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpT
Qzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9p
ZCBKU1BvcFN0YXRlRXZlbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0
b3IpCiB7CiAgICAgd3JhcHBlZCgpLnN0YXRlKCkudmlzaXQodmlzaXRvcik7CiB9CiAKK0RFRklO
RV9WSVNJVF9BRERJVElPTkFMX0NISUxEUkVOKEpTUG9wU3RhdGVFdmVudCk7CisKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUHJvbWlz
ZVJlamVjdGlvbkV2ZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU1Byb21pc2VSZWplY3Rpb25FdmVudEN1c3RvbS5jcHAJKHJldmlzaW9uIDI3
MzExOSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUHJvbWlzZVJlamVjdGlvbkV2
ZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5
cmlnaHQgKEMpIDIwMTggWXVzdWtlIFN1enVraSA8eXVzdWtlc3V6dWtpQHNsb3dzdGFydC5vcmc+
LgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzIsOSArMzMsMTIgQEAKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIEpTUHJvbWlzZVJlamVjdGlvbkV2ZW50Ojp2aXNpdEFk
ZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlw
ZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNQcm9taXNlUmVqZWN0aW9uRXZlbnQ6OnZpc2l0QWRkaXRp
b25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgd3JhcHBlZCgpLnJlYXNvbigp
LnZpc2l0KHZpc2l0b3IpOwogfQogCitERUZJTkVfVklTSVRfQURESVRJT05BTF9DSElMRFJFTihK
U1Byb21pc2VSZWplY3Rpb25FdmVudCk7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUmVzaXplT2JzZXJ2ZXJDdXN0b20uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUmVzaXplT2JzZXJ2ZXJD
dXN0b20uY3BwCShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU1Jlc2l6ZU9ic2VydmVyQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYg
QEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMjAgSWdhbGlhIFMuTC4KKyAqIENvcHlyaWdodCAo
QykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTMwLDExICszMSwxNCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLXZvaWQgSlNSZXNpemVPYnNlcnZlcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpT
bG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpT
UmVzaXplT2JzZXJ2ZXI6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3Ip
CiB7CiAgICAgUmVzaXplT2JzZXJ2ZXJDYWxsYmFjayogY2FsbGJhY2sgPSB3cmFwcGVkKCkuY2Fs
bGJhY2tDb25jdXJyZW50bHkoKTsKICAgICBpZiAoY2FsbGJhY2spCiAgICAgICAgIGNhbGxiYWNr
LT52aXNpdEpTRnVuY3Rpb24odmlzaXRvcik7CiB9CiAKLX0KK0RFRklORV9WSVNJVF9BRERJVElP
TkFMX0NISUxEUkVOKEpTUmVzaXplT2JzZXJ2ZXIpOworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1Jlc2l6ZU9ic2VydmVyRW50cnlD
dXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUmVz
aXplT2JzZXJ2ZXJFbnRyeUN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTUmVzaXplT2JzZXJ2ZXJFbnRyeUN1c3RvbS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDE5IElnYWxp
YSBTLkwuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMCwxMCArMzEsMTMgQEAK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIEpTUmVzaXplT2JzZXJ2ZXJFbnRyeTo6dmlz
aXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRl
PHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTUmVzaXplT2JzZXJ2ZXJFbnRyeTo6dmlzaXRBZGRp
dGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB2aXNpdG9yLmFkZE9wYXF1
ZVJvb3Qocm9vdCh3cmFwcGVkKCkudGFyZ2V0KCkpKTsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJv
b3Qod3JhcHBlZCgpLmNvbnRlbnRSZWN0KCkpOwogfQogCi19CitERUZJTkVfVklTSVRfQURESVRJ
T05BTF9DSElMRFJFTihKU1Jlc2l6ZU9ic2VydmVyRW50cnkpOworCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NWR1ZpZXdTcGVjQ3Vz
dG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NWR1Zp
ZXdTcGVjQ3VzdG9tLmNwcAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNTVkdWaWV3U3BlY0N1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzAsMTAgKzMw
LDEzIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBKU1NWR1ZpZXdTcGVjOjp2aXNp
dEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8
dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNTVkdWaWV3U3BlYzo6dmlzaXRBZGRpdGlvbmFsQ2hp
bGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBBU1NFUlQod3JhcHBlZCgpLmNvbnRleHRF
bGVtZW50Q29uY3VycmVudGx5KCkuZ2V0KCkpOwogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChy
b290KHdyYXBwZWQoKS5jb250ZXh0RWxlbWVudENvbmN1cnJlbnRseSgpLmdldCgpKSk7CiB9CiAK
LX0KK0RFRklORV9WSVNJVF9BRERJVElPTkFMX0NISUxEUkVOKEpTU1ZHVmlld1NwZWMpOworCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U1NlcnZpY2VXb3JrZXJHbG9iYWxTY29wZUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNTZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGVDdXN0b20uY3Bw
CShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NlcnZp
Y2VXb3JrZXJHbG9iYWxTY29wZUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzQsMTIgKzM0LDE1
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAotdm9pZCBK
U1NlcnZpY2VXb3JrZXJHbG9iYWxTY29wZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZp
c2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1NlcnZp
Y2VXb3JrZXJHbG9iYWxTY29wZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlz
aXRvcikKIHsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QoJndyYXBwZWQoKS5jbGllbnRzKCkp
OwogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdCgmd3JhcHBlZCgpLnJlZ2lzdHJhdGlvbigpKTsK
IH0KIAorREVGSU5FX1ZJU0lUX0FERElUSU9OQUxfQ0hJTERSRU4oSlNTZXJ2aWNlV29ya2VyR2xv
YmFsU2NvcGUpOworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZgpJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNTdGF0aWNSYW5nZUN1c3RvbS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNTdGF0aWNSYW5nZUN1c3RvbS5jcHAJ
KHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU3RhdGlj
UmFuZ2VDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw5ICszMCwxMiBAQAogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgSlNTdGF0aWNSYW5nZTo6dmlzaXRBZGRpdGlvbmFsQ2hp
bGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0
b3I+Cit2b2lkIEpTU3RhdGljUmFuZ2U6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3Im
IHZpc2l0b3IpCiB7CiAgICAgd3JhcHBlZCgpLnZpc2l0Tm9kZXNDb25jdXJyZW50bHkodmlzaXRv
cik7CiB9CiAKK0RFRklORV9WSVNJVF9BRERJVElPTkFMX0NISUxEUkVOKEpTU3RhdGljUmFuZ2Up
OworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU1N0eWxlU2hlZXRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTU3R5bGVTaGVldEN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MzExOSkKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU3R5bGVTaGVldEN1c3RvbS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4
LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAwNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMzAsMTEgKzMwLDE0IEBACiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotdm9pZCBKU1N0eWxlU2hlZXQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xv
dFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1N0
eWxlU2hlZXQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAg
ICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHJvb3QoJndyYXBwZWQoKSkpOwogfQogCitERUZJTkVf
VklTSVRfQURESVRJT05BTF9DSElMRFJFTihKU1N0eWxlU2hlZXQpOworCiBKU0M6OkpTVmFsdWUg
dG9KU05ld2x5Q3JlYXRlZChKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNET01HbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgUmVmPFN0eWxlU2hlZXQ+JiYgc3R5bGVTaGVldCkKIHsKICAgICBpZiAo
c3R5bGVTaGVldC0+aXNDU1NTdHlsZVNoZWV0KCkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU1RleHRUcmFja0N1ZUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNUZXh0VHJhY2tDdWVDdXN0b20uY3BwCShyZXZpc2lvbiAyNzMx
MTkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1RleHRUcmFja0N1ZUN1c3RvbS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
MS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMzgsNyArMzgsNyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogdXNp
bmcgbmFtZXNwYWNlIEpTQzsKIAotYm9vbCBKU1RleHRUcmFja0N1ZU93bmVyOjppc1JlYWNoYWJs
ZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCos
IFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQorYm9vbCBKU1RleHRU
cmFja0N1ZU93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6
OlVua25vd24+IGhhbmRsZSwgdm9pZCosIEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNv
bnN0IGNoYXIqKiByZWFzb24pCiB7CiAgICAgSlNUZXh0VHJhY2tDdWUqIGpzVGV4dFRyYWNrQ3Vl
ID0ganNDYXN0PEpTVGV4dFRyYWNrQ3VlKj4oaGFuZGxlLnNsb3QoKS0+YXNDZWxsKCkpOwogICAg
IFRleHRUcmFja0N1ZSYgdGV4dFRyYWNrQ3VlID0ganNUZXh0VHJhY2tDdWUtPndyYXBwZWQoKTsK
QEAgLTgyLDEyICs4MiwxNSBAQCBKU1ZhbHVlIHRvSlMoSlNHbG9iYWxPYmplY3QqIGxleGljYWxH
bG9iCiAgICAgcmV0dXJuIHdyYXAobGV4aWNhbEdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LCBj
dWUpOwogfQogCi12b2lkIEpTVGV4dFRyYWNrQ3VlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihT
bG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpT
VGV4dFRyYWNrQ3VlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQog
ewogICAgIGlmIChUZXh0VHJhY2sqIHRleHRUcmFjayA9IHdyYXBwZWQoKS50cmFjaygpKQogICAg
ICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qocm9vdCh0ZXh0VHJhY2spKTsKIH0KIAorREVGSU5F
X1ZJU0lUX0FERElUSU9OQUxfQ0hJTERSRU4oSlNUZXh0VHJhY2tDdWUpOworCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCiAKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNUZXh0VHJhY2tDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTVGV4dFRyYWNrQ3VzdG9tLmNwcAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNUZXh0VHJhY2tDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTM2LDExICszNiwxNCBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogdXNpbmcgbmFtZXNwYWNlIEpT
QzsKIAotdm9pZCBKU1RleHRUcmFjazo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0
b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1RleHRUcmFj
azo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB2aXNp
dG9yLmFkZE9wYXF1ZVJvb3Qocm9vdCgmd3JhcHBlZCgpKSk7CiB9CiAKK0RFRklORV9WSVNJVF9B
RERJVElPTkFMX0NISUxEUkVOKEpTVGV4dFRyYWNrKTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQogCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVGV4dFRyYWNr
TGlzdEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNUZXh0VHJhY2tMaXN0Q3VzdG9tLmNwcAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNUZXh0VHJhY2tMaXN0Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0zNiwxMSArMzYsMTQgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBK
U0M7CiAKLXZvaWQgSlNUZXh0VHJhY2tMaXN0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6
OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQg
SlNUZXh0VHJhY2tMaXN0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9y
KQogewogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChyb290KHdyYXBwZWQoKS5lbGVtZW50KCkp
KTsKIH0KICAgICAKK0RFRklORV9WSVNJVF9BRERJVElPTkFMX0NISUxEUkVOKEpTVGV4dFRyYWNr
TGlzdCk7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU1RyZWVXYWxrZXJDdXN0b20uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVHJlZVdhbGtlckN1c3RvbS5jcHAJKHJldmlz
aW9uIDI3MzExOSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVHJlZVdhbGtlckN1
c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDA2LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAwNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjUsMTAgKzI1LDEzIEBACiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAotdm9pZCBKU1RyZWVXYWxrZXI6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBK
U1RyZWVXYWxrZXI6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7
CiAgICAgaWYgKE5vZGVGaWx0ZXIqIGZpbHRlciA9IHdyYXBwZWQoKS5maWx0ZXIoKSkKICAgICAg
ICAgdmlzaXRvci5hZGRPcGFxdWVSb290KGZpbHRlcik7CiB9CiAKLX0KK0RFRklORV9WSVNJVF9B
RERJVElPTkFMX0NISUxEUkVOKEpTVHJlZVdhbGtlcik7CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVW5kb0l0ZW1DdXN0b20uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVW5kb0l0ZW1DdXN0
b20uY3BwCShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U1VuZG9JdGVtQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE5LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOSwxMyArMjksMTYgQEAKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIEpTVW5kb0l0ZW06OnZpc2l0QWRkaXRpb25hbENoaWxk
cmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
Pgordm9pZCBKU1VuZG9JdGVtOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNp
dG9yKQogewogICAgIHdyYXBwZWQoKS51bmRvSGFuZGxlcigpLnZpc2l0SlNGdW5jdGlvbih2aXNp
dG9yKTsKICAgICB3cmFwcGVkKCkucmVkb0hhbmRsZXIoKS52aXNpdEpTRnVuY3Rpb24odmlzaXRv
cik7CiB9CiAKLWJvb2wgSlNVbmRvSXRlbU93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290
cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIEpTQzo6U2xvdFZpc2l0
b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCitERUZJTkVfVklTSVRfQURESVRJT05B
TF9DSElMRFJFTihKU1VuZG9JdGVtKTsKKworYm9vbCBKU1VuZG9JdGVtT3duZXI6OmlzUmVhY2hh
YmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lk
KiwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29u
KQogewogICAgIGlmIChVTkxJS0VMWShyZWFzb24pKQogICAgICAgICAqcmVhc29uID0gIkRvY3Vt
ZW50IGlzIGFuIG9wYXF1ZSByb290LiI7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU1ZhbHVlSW5XcmFwcGVkT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNWYWx1ZUluV3JhcHBlZE9iamVjdC5oCShyZXZpc2lvbiAyNzMxMTkpCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1ZhbHVlSW5XcmFwcGVkT2JqZWN0LmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE4IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOC0yMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIAogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTQwLDcgKzQwLDcgQEAgcHVibGljOgogICAgIG9wZXJhdG9yIEpTQzo6SlNWYWx1
ZSgpIGNvbnN0OwogICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdDsKICAgICBKU1Zh
bHVlSW5XcmFwcGVkT2JqZWN0JiBvcGVyYXRvcj0oY29uc3QgSlNWYWx1ZUluV3JhcHBlZE9iamVj
dCYgb3RoZXIpOwotICAgIHZvaWQgdmlzaXQoSlNDOjpTbG90VmlzaXRvciYpIGNvbnN0OworICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgdmlzaXQoVmlzaXRvciYpIGNvbnN0Owog
ICAgIHZvaWQgY2xlYXIoKTsKIAogcHJpdmF0ZToKQEAgLTk4LDcgKzk4LDggQEAgaW5saW5lIEpT
VmFsdWVJbldyYXBwZWRPYmplY3QmIEpTVmFsdWVJbgogICAgIHJldHVybiAqdGhpczsKIH0KIAot
aW5saW5lIHZvaWQgSlNWYWx1ZUluV3JhcHBlZE9iamVjdDo6dmlzaXQoSlNDOjpTbG90VmlzaXRv
ciYgdmlzaXRvcikgY29uc3QKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+CitpbmxpbmUgdm9p
ZCBKU1ZhbHVlSW5XcmFwcGVkT2JqZWN0Ojp2aXNpdChWaXNpdG9yJiB2aXNpdG9yKSBjb25zdAog
ewogICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKG1fdmFsdWUsIFtdIChKU0M6OkpTVmFsdWUpIHsK
ICAgICAgICAgLy8gTm90aGluZyB0byB2aXNpdC4KQEAgLTEwNyw2ICsxMDgsOSBAQCBpbmxpbmUg
dm9pZCBKU1ZhbHVlSW5XcmFwcGVkT2JqZWN0Ojp2aXNpCiAgICAgfSk7CiB9CiAKK3RlbXBsYXRl
IHZvaWQgSlNWYWx1ZUluV3JhcHBlZE9iamVjdDo6dmlzaXQoSlNDOjpBYnN0cmFjdFNsb3RWaXNp
dG9yJikgY29uc3Q7Cit0ZW1wbGF0ZSB2b2lkIEpTVmFsdWVJbldyYXBwZWRPYmplY3Q6OnZpc2l0
KEpTQzo6U2xvdFZpc2l0b3ImKSBjb25zdDsKKwogaW5saW5lIHZvaWQgSlNWYWx1ZUluV3JhcHBl
ZE9iamVjdDo6Y2xlYXIoKQogewogICAgIFdURjo6c3dpdGNoT24obV92YWx1ZSwgW10gKFdlYWsm
IHZhbHVlKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1ZpZGVvVHJhY2tD
dXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVmlk
ZW9UcmFja0N1c3RvbS5jcHAJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTVmlkZW9UcmFja0N1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzUsMTEgKzM1
LDE0IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCi12b2lk
IEpTVmlkZW9UcmFjazo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0
b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1ZpZGVvVHJhY2s6OnZpc2l0
QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgdmlzaXRvci5hZGRP
cGFxdWVSb290KHJvb3QoJndyYXBwZWQoKSkpOwogfQogCitERUZJTkVfVklTSVRfQURESVRJT05B
TF9DSElMRFJFTihKU1ZpZGVvVHJhY2spOworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNl
bmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNWaWRlb1RyYWNrTGlzdEN1
c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNWaWRl
b1RyYWNrTGlzdEN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTVmlkZW9UcmFja0xpc3RDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAyMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM1
LDExICszNSwxNCBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogdXNpbmcgbmFtZXNwYWNlIEpTQzsK
IAotdm9pZCBKU1ZpZGVvVHJhY2tMaXN0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90Vmlz
aXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTVmlkZW9U
cmFja0xpc3Q6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAg
ICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHJvb3Qod3JhcHBlZCgpLmVsZW1lbnQoKSkpOwogfQog
CitERUZJTkVfVklTSVRfQURESVRJT05BTF9DSElMRFJFTihKU1ZpZGVvVHJhY2tMaXN0KTsKKwog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTV2ViR0wyUmVuZGVyaW5nQ29udGV4dEN1c3RvbS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJHTDJSZW5kZXJpbmdDb250ZXh0Q3Vz
dG9tLmNwcAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNXZWJHTDJSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMz
LDEyICszMywxNSBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogdXNpbmcgbmFtZXNwYWNlIEpTQzsK
IAotdm9pZCBKU1dlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVu
KFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQg
SlNXZWJHTDJSZW5kZXJpbmdDb250ZXh0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9y
JiB2aXNpdG9yKQogewogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdCgmd3JhcHBlZCgpKTsKICAg
ICB3cmFwcGVkKCkuYWRkTWVtYmVyc1RvT3BhcXVlUm9vdHModmlzaXRvcik7CiB9CiAKK0RFRklO
RV9WSVNJVF9BRERJVElPTkFMX0NISUxEUkVOKEpTV2ViR0wyUmVuZGVyaW5nQ29udGV4dCk7CisK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShXRUJHTCkKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViR0xSZW5kZXJpbmdDb250ZXh0Q3VzdG9t
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYkdMUmVu
ZGVyaW5nQ29udGV4dEN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTV2ViR0xSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0zMywxMiArMzMsMTUgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVz
cGFjZSBKU0M7CiAKLXZvaWQgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZpc2l0QWRkaXRpb25h
bENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRv
cj4KK3ZvaWQgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVu
KFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KCZ3cmFwcGVk
KCkpOwogICAgIHdyYXBwZWQoKS5hZGRNZW1iZXJzVG9PcGFxdWVSb290cyh2aXNpdG9yKTsKIH0K
IAorREVGSU5FX1ZJU0lUX0FERElUSU9OQUxfQ0hJTERSRU4oSlNXZWJHTFJlbmRlcmluZ0NvbnRl
eHQpOworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoV0VCR0wp
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckdsb2JhbFNjb3BlQmFz
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrZXJH
bG9iYWxTY29wZUJhc2UuY3BwCShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU1dvcmtlckdsb2JhbFNjb3BlQmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5LCAyMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwOSBHb29n
bGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtOTIsNyAr
OTIsOCBAQCB2b2lkIEpTV29ya2VyR2xvYmFsU2NvcGVCYXNlOjpmaW5pc2hDcmVhCiAgICAgQVNT
RVJUKGluaGVyaXRzKHZtLCBpbmZvKCkpKTsKIH0KIAotdm9pZCBKU1dvcmtlckdsb2JhbFNjb3Bl
QmFzZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQor
dGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNXb3JrZXJHbG9iYWxTY29wZUJhc2U6
OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAg
ICBKU1dvcmtlckdsb2JhbFNjb3BlQmFzZSogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1dvcmtlckds
b2JhbFNjb3BlQmFzZSo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhp
c09iamVjdCwgaW5mbygpKTsKQEAgLTEwMCw2ICsxMDEsOCBAQCB2b2lkIEpTV29ya2VyR2xvYmFs
U2NvcGVCYXNlOjp2aXNpdENoaWxkCiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9w
cm94eSk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU1dvcmtlckdsb2JhbFNjb3BlQmFz
ZSk7CisKIHZvaWQgSlNXb3JrZXJHbG9iYWxTY29wZUJhc2U6OmRlc3Ryb3koSlNDZWxsKiBjZWxs
KQogewogICAgIHN0YXRpY19jYXN0PEpTV29ya2VyR2xvYmFsU2NvcGVCYXNlKj4oY2VsbCktPkpT
V29ya2VyR2xvYmFsU2NvcGVCYXNlOjp+SlNXb3JrZXJHbG9iYWxTY29wZUJhc2UoKTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyR2xvYmFsU2NvcGVCYXNlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrZXJHbG9iYWxTY29w
ZUJhc2UuaAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNXb3JrZXJHbG9iYWxTY29wZUJhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03OSw3ICs3OSw3
IEBAIHByb3RlY3RlZDoKICAgICBKU1dvcmtlckdsb2JhbFNjb3BlQmFzZShKU0M6OlZNJiwgSlND
OjpTdHJ1Y3R1cmUqLCBSZWZQdHI8V29ya2VyR2xvYmFsU2NvcGU+JiYpOwogICAgIHZvaWQgZmlu
aXNoQ3JlYXRpb24oSlNDOjpWTSYsIEpTQzo6SlNQcm94eSopOwogCi0gICAgc3RhdGljIHZvaWQg
dmlzaXRDaGlsZHJlbihKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKTsKKyAgICBERUNM
QVJFX1ZJU0lUX0NISUxEUkVOOwogCiBwcml2YXRlOgogICAgIFJlZlB0cjxXb3JrZXJHbG9iYWxT
Y29wZT4gbV93cmFwcGVkOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXb3Jr
ZXJHbG9iYWxTY29wZUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNXb3JrZXJHbG9iYWxTY29wZUN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MzExOSkK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyR2xvYmFsU2NvcGVDdXN0b20u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwOC0yMDA5LCAyMDExLCAyMDE2IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAwOC0yMDIxIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzMsNyArMzMsOCBAQAogbmFtZXNw
YWNlIFdlYkNvcmUgewogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAotdm9pZCBKU1dvcmtlckdsb2Jh
bFNjb3BlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3Rl
bXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTV29ya2VyR2xvYmFsU2NvcGU6OnZpc2l0
QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgaWYgKGF1dG8qIGxv
Y2F0aW9uID0gd3JhcHBlZCgpLm9wdGlvbmFsTG9jYXRpb24oKSkKICAgICAgICAgdmlzaXRvci5h
ZGRPcGFxdWVSb290KGxvY2F0aW9uKTsKQEAgLTQ4LDYgKzQ5LDggQEAgdm9pZCBKU1dvcmtlckds
b2JhbFNjb3BlOjp2aXNpdEFkZGl0aW9uYQogICAgIHdyYXBwZWQoKS52aXNpdEpTRXZlbnRMaXN0
ZW5lcnModmlzaXRvcik7CiB9CiAKK0RFRklORV9WSVNJVF9BRERJVElPTkFMX0NISUxEUkVOKEpT
V29ya2VyR2xvYmFsU2NvcGUpOworCiBKU1ZhbHVlIEpTV29ya2VyR2xvYmFsU2NvcGU6OnF1ZXVl
TWljcm90YXNrKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUm
IGNhbGxGcmFtZSkKIHsKICAgICBWTSYgdm0gPSBsZXhpY2FsR2xvYmFsT2JqZWN0LnZtKCk7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlck5hdmlnYXRvckN1c3RvbS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrZXJOYXZp
Z2F0b3JDdXN0b20uY3BwCShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU1dvcmtlck5hdmlnYXRvckN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjgsOSAr
MjgsMTIgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIEpTV29ya2VyTmF2aWdhdG9y
Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVt
cGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNXb3JrZXJOYXZpZ2F0b3I6OnZpc2l0QWRk
aXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgdmlzaXRvci5hZGRPcGFx
dWVSb290KHN0YXRpY19jYXN0PE5hdmlnYXRvckJhc2UqPigmd3JhcHBlZCgpKSk7CiB9CiAKLX0K
K0RFRklORV9WSVNJVF9BRERJVElPTkFMX0NISUxEUkVOKEpTV29ya2VyTmF2aWdhdG9yKTsKKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNXb3JrbGV0R2xvYmFsU2NvcGVCYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU1dvcmtsZXRHbG9iYWxTY29wZUJhc2UuY3BwCShyZXZpc2lvbiAyNzMx
MTkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtsZXRHbG9iYWxTY29wZUJh
c2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTgtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTgyLDcgKzgyLDggQEAgdm9pZCBKU1dvcmtsZXRHbG9iYWxT
Y29wZUJhc2U6OmZpbmlzaENyZQogICAgIEFTU0VSVChpbmhlcml0cyh2bSwgaW5mbygpKSk7CiB9
CiAKLXZvaWQgSlNXb3JrbGV0R2xvYmFsU2NvcGVCYXNlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCog
Y2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgor
dm9pZCBKU1dvcmtsZXRHbG9iYWxTY29wZUJhc2U6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCog
Y2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0
PEpTV29ya2xldEdsb2JhbFNjb3BlQmFzZSo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1Rf
SU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTkwLDYgKzkxLDggQEAgdm9pZCBKU1dv
cmtsZXRHbG9iYWxTY29wZUJhc2U6OnZpc2l0Q2hpbAogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNP
YmplY3QtPm1fcHJveHkpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNXb3JrbGV0R2xv
YmFsU2NvcGVCYXNlKTsKKwogdm9pZCBKU1dvcmtsZXRHbG9iYWxTY29wZUJhc2U6OmRlc3Ryb3ko
SlNDZWxsKiBjZWxsKQogewogICAgIHN0YXRpY19jYXN0PEpTV29ya2xldEdsb2JhbFNjb3BlQmFz
ZSo+KGNlbGwpLT5KU1dvcmtsZXRHbG9iYWxTY29wZUJhc2U6On5KU1dvcmtsZXRHbG9iYWxTY29w
ZUJhc2UoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2xldEdsb2Jh
bFNjb3BlQmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
V29ya2xldEdsb2JhbFNjb3BlQmFzZS5oCShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU1dvcmtsZXRHbG9iYWxTY29wZUJhc2UuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC02Nyw3ICs2Nyw3IEBAIHByb3RlY3RlZDoKICAgICBKU1dvcmtsZXRHbG9iYWxTY29wZUJhc2Uo
SlNDOjpWTSYsIEpTQzo6U3RydWN0dXJlKiwgUmVmUHRyPFdvcmtsZXRHbG9iYWxTY29wZT4mJik7
CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJiwgSlNDOjpKU1Byb3h5Kik7CiAKLSAg
ICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRv
ciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKIHByaXZhdGU6CiAgICAgUmVmUHRy
PFdvcmtsZXRHbG9iYWxTY29wZT4gbV93cmFwcGVkOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNYTUxIdHRwUmVxdWVzdEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNYTUxIdHRwUmVxdWVzdEN1c3RvbS5jcHAJKHJldmlzaW9u
IDI3MzExOSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTWE1MSHR0cFJlcXVlc3RD
dXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDgtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQxLDcgKzQxLDggQEAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKLXZvaWQgSlNYTUxIdHRwUmVxdWVzdDo6
dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0
eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1hNTEh0dHBSZXF1ZXN0Ojp2aXNpdEFkZGl0aW9uYWxD
aGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGlmIChhdXRvKiB1cGxvYWQgPSB3cmFw
cGVkKCkub3B0aW9uYWxVcGxvYWQoKSkKICAgICAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHVw
bG9hZCk7CkBAIC01MCw2ICs1MSw4IEBAIHZvaWQgSlNYTUxIdHRwUmVxdWVzdDo6dmlzaXRBZGRp
dGlvbmFsQ2gKICAgICAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHJlc3BvbnNlRG9jdW1lbnQp
OwogfQogCitERUZJTkVfVklTSVRfQURESVRJT05BTF9DSElMRFJFTihKU1hNTEh0dHBSZXF1ZXN0
KTsKKwogSlNWYWx1ZSBKU1hNTEh0dHBSZXF1ZXN0OjpyZXNwb25zZShKU0dsb2JhbE9iamVjdCYg
bGV4aWNhbEdsb2JhbE9iamVjdCkgY29uc3QKIHsKICAgICBhdXRvIGNhY2hlUmVzdWx0ID0gWyZd
IChKU1ZhbHVlIHZhbHVlKSAtPiBKU1ZhbHVlIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTWFBhdGhSZXN1bHRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTWFBhdGhSZXN1bHRDdXN0b20uY3BwCShyZXZpc2lvbiAyNzMxMTkp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1hQYXRoUmVzdWx0Q3VzdG9tLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTEg
SnVsaWVuIENoYWZmcmFpeCA8amNoYWZmcmFpeEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChD
KSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMzEsNyArMzIsOCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
LXZvaWQgSlNYUGF0aFJlc3VsdDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90Vmlz
aXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTWFBhdGhS
ZXN1bHQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAg
YXV0byYgdmFsdWUgPSB3cmFwcGVkKCkudmFsdWUoKTsKICAgICBpZiAodmFsdWUuaXNOb2RlU2V0
KCkpIHsKQEAgLTQxLDQgKzQzLDYgQEAgdm9pZCBKU1hQYXRoUmVzdWx0Ojp2aXNpdEFkZGl0aW9u
YWxDaGlsZAogICAgIH0KIH0KIAorREVGSU5FX1ZJU0lUX0FERElUSU9OQUxfQ0hJTERSRU4oSlNY
UGF0aFJlc3VsdCk7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL1dlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV2ViQ29yZVR5cGVkQXJyYXlDb250cm9s
bGVyLmNwcAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
V2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01Niw3ICs1Niw3
IEBAIGJvb2wgV2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyOjppc0F0b20KICAgICByZXR1cm4g
bV9hbGxvd0F0b21pY3NXYWl0OwogfQogCi1ib29sIFdlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxl
cjo6SlNBcnJheUJ1ZmZlck93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6Okhh
bmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0
b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCitib29sIFdlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxl
cjo6SlNBcnJheUJ1ZmZlck93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6Okhh
bmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRv
ciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikKIHsKICAgICBpZiAoVU5MSUtFTFkocmVh
c29uKSkKICAgICAgICAgKnJlYXNvbiA9ICJBcnJheUJ1ZmZlciBpcyBvcGFxdWUgcm9vdCI7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xs
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlVHlw
ZWRBcnJheUNvbnRyb2xsZXIuaAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvV2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
NDgsNyArNDgsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIGNsYXNzIEpTQXJyYXlCdWZmZXJP
d25lciA6IHB1YmxpYyBKU0M6OldlYWtIYW5kbGVPd25lciB7CiAgICAgcHVibGljOgotICAgICAg
ICBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93
bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6U2xvdFZpc2l0b3ImLCBjb25zdCBjaGFyKiopIG92ZXJy
aWRlOworICAgICAgICBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxl
PEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYs
IGNvbnN0IGNoYXIqKikgb3ZlcnJpZGU7CiAgICAgICAgIHZvaWQgZmluYWxpemUoSlNDOjpIYW5k
bGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCkgb3ZlcnJpZGU7CiAgICAgfTsKIApJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9y
SlMucG0JKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvQ29kZUdlbmVyYXRvckpTLnBtCSh3b3JraW5nIGNvcHkpCkBAIC0zLDcgKzMsNyBAQAogIyBD
b3B5cmlnaHQgKEMpIDIwMDYgQW5kZXJzIENhcmxzc29uIDxhbmRlcnNjYUBtYWMuY29tPgogIyBD
b3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgU2FtdWVsIFdlaW5pZyA8c2FtQHdlYmtpdC5vcmc+CiAj
IENvcHlyaWdodCAoQykgMjAwNiBBbGV4ZXkgUHJvc2t1cnlha292IDxhcEB3ZWJraXQub3JnPgot
IyBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisjIENvcHlyaWdodCAoQykgMjAwNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICMgQ29weXJpZ2h0IChDKSAyMDA5IENhbWVyb24gTWNDb3JtYWNrIDxjYW1AbWNjLmlkLmF1
PgogIyBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAjIENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBh
bmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKQEAgLTMwODcsOCArMzA4Nyw4IEBAIHN1YiBHZW5l
cmF0ZUhlYWRlcgogCiAgICAgIyB2aXNpdCBmdW5jdGlvbgogICAgIGlmICgkbmVlZHNWaXNpdENo
aWxkcmVuKSB7Ci0gICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgc3RhdGljIHZvaWQg
dmlzaXRDaGlsZHJlbihKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJik7XG4iKTsKLSAgICAgICAg
cHVzaChAaGVhZGVyQ29udGVudCwgIiAgICB2b2lkIHZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpT
Qzo6U2xvdFZpc2l0b3ImKTtcbiIpIGlmICRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+
e0pTQ3VzdG9tTWFya0Z1bmN0aW9ufTsKKyAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAg
ICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOO1xuIik7CisgICAgICAgIHB1c2goQGhlYWRlckNvbnRl
bnQsICIgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCB2aXNpdEFkZGl0aW9uYWxD
aGlsZHJlbihWaXNpdG9yJik7XG4iKSBpZiAkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMt
PntKU0N1c3RvbU1hcmtGdW5jdGlvbn07CiAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJc
biIpOwogCiAgICAgICAgIGlmICgkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntKU0N1
c3RvbU1hcmtGdW5jdGlvbn0pIHsKQEAgLTMxMDMsNyArMzEwMyw3IEBAIHN1YiBHZW5lcmF0ZUhl
YWRlcgogICAgICAgICAgICAgIyB0aGF0IHRoZSBHQyBjYWxscyB0byBhc2sgYW4gb2JqZWN0IGlz
IGl0IHdvdWxkIGxpa2UgdG8gbWFyayBhbnl0aGluZyBlbHNlIGFmdGVyIHRoZQogICAgICAgICAg
ICAgIyBwcm9ncmFtIHJlc3VtZWQgc2luY2UgdGhlIGxhc3QgY2FsbCB0byB2aXNpdENoaWxkcmVu
IG9yIHZpc2l0T3V0cHV0Q29uc3RyYWludHMuIFNpbmNlCiAgICAgICAgICAgICAjIHRoaXMganVz
dCBjYWxscyB2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbiwgeW91IHVzdWFsbHkgZG9uJ3QgaGF2ZSB0
byB3b3JyeSBhYm91dCB0aGlzLgotICAgICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAg
ICBzdGF0aWMgdm9pZCB2aXNpdE91dHB1dENvbnN0cmFpbnRzKEpTQ2VsbCosIEpTQzo6U2xvdFZp
c2l0b3ImKTtcbiIpOworICAgICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiBzdGF0aWMgdm9pZCB2aXNpdE91dHB1dENvbnN0cmFpbnRz
KEpTQ2VsbCosIFZpc2l0b3ImKTtcbiIpOwogICAgICAgICB9CiAgICAgfQogCkBAIC0zMjI0LDcg
KzMyMjQsNyBAQCBzdWIgR2VuZXJhdGVIZWFkZXIKICAgICAgICAgfQogICAgICAgICAkaGVhZGVy
SW5jbHVkZXN7Ijx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4ifSA9IDE7CiAgICAgICAgIHB1c2goQGhl
YWRlckNvbnRlbnQsICJwdWJsaWM6XG4iKTsKLSAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwg
IiAgICBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5r
bm93bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6U2xvdFZpc2l0b3ImLCBjb25zdCBjaGFyKiopICR7
b3ZlcnJpZGVEZWNsfTtcbiIpOworICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIGJv
b2wgaXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwg
dm9pZCogY29udGV4dCwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiwgY29uc3QgY2hhcioqKSAk
e292ZXJyaWRlRGVjbH07XG4iKTsKICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICB2
b2lkIGZpbmFsaXplKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQpICR7
b3ZlcnJpZGVEZWNsfTtcbiIpOwogICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAifTtcbiIp
OwogICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiXG4iKTsKQEAgLTQ5NDgsNiArNDk0OCw3
IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIkRP
TUlzb1N1YnNwYWNlcy5oIik7CiAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIldlYkNvcmVKU0NsaWVu
dERhdGEuaCIpOwogICAgIEFkZFRvSW1wbEluY2x1ZGVzKCI8SmF2YVNjcmlwdENvcmUvSlNEZXN0
cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUuaD4iKTsKKyAgICBBZGRUb0ltcGxJbmNsdWRlcygi
PEphdmFTY3JpcHRDb3JlL1Nsb3RWaXNpdG9yTWFjcm9zLmg+Iik7CiAgICAgQWRkVG9JbXBsSW5j
bHVkZXMoIjxKYXZhU2NyaXB0Q29yZS9TdWJzcGFjZUlubGluZXMuaD4iKTsKICAgICBwdXNoKEBp
bXBsQ29udGVudCwgIkpTQzo6SXNvU3Vic3BhY2UqICR7Y2xhc3NOYW1lfTo6c3Vic3BhY2VGb3JJ
bXBsKEpTQzo6Vk0mIHZtKVxuIik7CiAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ7XG4iKTsKQEAg
LTQ5NjcsNyArNDk2OCwxMCBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgIHB1c2go
QGltcGxDb250ZW50LCAiICAgIGF1dG8qIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3Ike2lu
dGVyZmFjZU5hbWV9LmdldCgpO1xuIik7CiAgICAgcHVzaChAaW1wbENvbnRlbnQsICJJR05PUkVf
V0FSTklOR1NfQkVHSU4oXCJ1bnJlYWNoYWJsZS1jb2RlXCIpXG4iKTsKICAgICBwdXNoKEBpbXBs
Q29udGVudCwgIklHTk9SRV9XQVJOSU5HU19CRUdJTihcInRhdXRvbG9naWNhbC1jb21wYXJlXCIp
XG4iKTsKLSAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAoJiR7Y2xhc3NOYW1lfTo6dmlz
aXRPdXRwdXRDb25zdHJhaW50cyAhPSAmSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWlu
dHMpXG4iKTsKKyAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICB2b2lkICgqbXlWaXNpdE91dHB1
dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gJHtjbGFzc05h
bWV9Ojp2aXNpdE91dHB1dENvbnN0cmFpbnRzO1xuIik7CisgICAgcHVzaChAaW1wbENvbnRlbnQs
ICIgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBK
U0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50cztc
biIpOworICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3Ry
YWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpXG4iKTsKKyMgICAgcHVzaChAaW1w
bENvbnRlbnQsICIgICAgaWYgKCYke2NsYXNzTmFtZX06OnZpc2l0T3V0cHV0Q29uc3RyYWludHMg
IT0gJkpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzKVxuIik7CiAgICAgcHVzaChA
aW1wbENvbnRlbnQsICIgICAgICAgIGNsaWVudERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygp
LmFwcGVuZChzcGFjZSk7XG4iKTsKICAgICBwdXNoKEBpbXBsQ29udGVudCwgIklHTk9SRV9XQVJO
SU5HU19FTkRcbiIpOwogICAgIHB1c2goQGltcGxDb250ZW50LCAiSUdOT1JFX1dBUk5JTkdTX0VO
RFxuIik7CkBAIC00OTc1LDcgKzQ5NzksOCBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgog
ICAgIHB1c2goQGltcGxDb250ZW50LCAifVxuXG4iKTsKIAogICAgIGlmICgkbmVlZHNWaXNpdENo
aWxkcmVuKSB7Ci0gICAgICAgIHB1c2goQGltcGxDb250ZW50LCAidm9pZCAke2NsYXNzTmFtZX06
OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcilcbiIpOwor
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgInRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+XG4i
KTsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ2b2lkICR7Y2xhc3NOYW1lfTo6dmlzaXRD
aGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKVxuIik7CiAgICAgICAg
IHB1c2goQGltcGxDb250ZW50LCAie1xuIik7CiAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
ICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8JHtjbGFzc05hbWV9Kj4oY2VsbCk7XG4iKTsK
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklU
Uyh0aGlzT2JqZWN0LCBpbmZvKCkpO1xuIik7CkBAIC01MDAwLDE0ICs1MDA1LDE5IEBAIHN1YiBH
ZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICJ9XG5cbiIpOworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwg
IkRFRklORV9WSVNJVF9DSElMRFJFTigke2NsYXNzTmFtZX0pO1xuXG4iKTsKKwogICAgICAgICBp
ZiAoJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57SlNDdXN0b21NYXJrRnVuY3Rpb259
KSB7Ci0gICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgInZvaWQgJHtjbGFzc05hbWV9Ojp2
aXNpdE91dHB1dENvbnN0cmFpbnRzKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3Ip
XG4iKTsKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAidGVtcGxhdGU8dHlwZW5hbWUg
VmlzaXRvcj5cbiIpOworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ2b2lkICR7Y2xh
c3NOYW1lfTo6dmlzaXRPdXRwdXRDb25zdHJhaW50cyhKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZp
c2l0b3IpXG4iKTsKICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAie1xuIik7CiAgICAg
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0
PCR7Y2xhc3NOYW1lfSo+KGNlbGwpO1xuIik7CiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIiAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7XG4i
KTsKICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIEJhc2U6OnZpc2l0T3V0cHV0
Q29uc3RyYWludHModGhpc09iamVjdCwgdmlzaXRvcik7XG4iKTsKICAgICAgICAgICAgIHB1c2go
QGltcGxDb250ZW50LCAiICAgIHRoaXNPYmplY3QtPnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKHZp
c2l0b3IpO1xuIik7CiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIn1cblxuIik7Cisg
ICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgInRlbXBsYXRlIHZvaWQgJHtjbGFzc05hbWV9
Ojp2aXNpdE91dHB1dENvbnN0cmFpbnRzKEpTQ2VsbCosIEFic3RyYWN0U2xvdFZpc2l0b3ImKTtc
biIpOworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ0ZW1wbGF0ZSB2b2lkICR7Y2xh
c3NOYW1lfTo6dmlzaXRPdXRwdXRDb25zdHJhaW50cyhKU0NlbGwqLCBTbG90VmlzaXRvciYpO1xu
Iik7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTUwNDIsNyArNTA1Miw3IEBAIHN1YiBHZW5lcmF0
ZUltcGxlbWVudGF0aW9uCiAgICAgfQogCiAgICAgaWYgKFNob3VsZEdlbmVyYXRlV3JhcHBlck93
bmVyQ29kZSgkaGFzUGFyZW50LCAkaW50ZXJmYWNlKSAmJiAhR2V0Q3VzdG9tSXNSZWFjaGFibGUo
JGludGVyZmFjZSkpIHsKLSAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJib29sIEpTJHtpbnRl
cmZhY2VOYW1lfU93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxK
U0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBj
aGFyKiogcmVhc29uKVxuIik7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiYm9vbCBKUyR7
aW50ZXJmYWNlTmFtZX1Pd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5k
bGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNp
dG9yLCBjb25zdCBjaGFyKiogcmVhc29uKVxuIik7CiAgICAgICAgIHB1c2goQGltcGxDb250ZW50
LCAie1xuIik7CiAgICAgICAgICMgQWxsIEFjdGl2ZURPTU9iamVjdHMgaW1wbGVtZW50IGhhc1Bl
bmRpbmdBY3Rpdml0eSgpLCBidXQgbm90IGFsbCBvZiB0aGVtCiAgICAgICAgICMgaW5jcmVtZW50
IHRoZWlyIEMrKyByZWZlcmVuY2UgY291bnRzIHdoZW4gaGFzUGVuZGluZ0FjdGl2aXR5KCkgYmVj
b21lcwpAQCAtNjQ0MSw2ICs2NDUxLDcgQEAgc3ViIEdlbmVyYXRlQ2FsbGJhY2tIZWFkZXJDb250
ZW50CiAgICAgICAgIHB1c2goQCRjb250ZW50UmVmLCAiICAgIGJvb2wgaGFzQ2FsbGJhY2soKSBj
b25zdCBmaW5hbCB7IHJldHVybiBtX2RhdGEgJiYgbV9kYXRhLT5jYWxsYmFjaygpOyB9XG5cbiIp
OwogICAgIH0KIAorICAgIHB1c2goQCRjb250ZW50UmVmLCAiICAgIHZvaWQgdmlzaXRKU0Z1bmN0
aW9uKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpIG92ZXJyaWRlO1xuXG4iKSBpZiAkaW50ZXJm
YWNlT3JDYWxsYmFjay0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57SXNXZWFrQ2FsbGJhY2t9OwogICAg
IHB1c2goQCRjb250ZW50UmVmLCAiICAgIHZvaWQgdmlzaXRKU0Z1bmN0aW9uKEpTQzo6U2xvdFZp
c2l0b3ImKSBvdmVycmlkZTtcblxuIikgaWYgJGludGVyZmFjZU9yQ2FsbGJhY2stPmV4dGVuZGVk
QXR0cmlidXRlcy0+e0lzV2Vha0NhbGxiYWNrfTsKIAogICAgIHB1c2goQCRjb250ZW50UmVmLCAi
ICAgICR7Y2FsbGJhY2tEYXRhVHlwZX0qIG1fZGF0YTtcbiIpOwpAQCAtNjYzMiw2ICs2NjQzLDEw
IEBAIHN1YiBHZW5lcmF0ZUNhbGxiYWNrSW1wbGVtZW50YXRpb25Db250ZW4KICAgICB9CiAKICAg
ICBpZiAoJGludGVyZmFjZU9yQ2FsbGJhY2stPmV4dGVuZGVkQXR0cmlidXRlcy0+e0lzV2Vha0Nh
bGxiYWNrfSkgeworICAgICAgICBwdXNoKEAkY29udGVudFJlZiwgInZvaWQgJHtjbGFzc05hbWV9
Ojp2aXNpdEpTRnVuY3Rpb24oSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKVxuIik7
CisgICAgICAgIHB1c2goQCRjb250ZW50UmVmLCAie1xuIik7CisgICAgICAgIHB1c2goQCRjb250
ZW50UmVmLCAiICAgIG1fZGF0YS0+dmlzaXRKU0Z1bmN0aW9uKHZpc2l0b3IpO1xuIik7CisgICAg
ICAgIHB1c2goQCRjb250ZW50UmVmLCAifVxuXG4iKTsKICAgICAgICAgcHVzaChAJGNvbnRlbnRS
ZWYsICJ2b2lkICR7Y2xhc3NOYW1lfTo6dmlzaXRKU0Z1bmN0aW9uKEpTQzo6U2xvdFZpc2l0b3Im
IHZpc2l0b3IpXG4iKTsKICAgICAgICAgcHVzaChAJGNvbnRlbnRSZWYsICJ7XG4iKTsKICAgICAg
ICAgcHVzaChAJGNvbnRlbnRSZWYsICIgICAgbV9kYXRhLT52aXNpdEpTRnVuY3Rpb24odmlzaXRv
cik7XG4iKTsKQEAgLTY3NDMsNiArNjc1OCw3IEBAIHN1YiBHZW5lcmF0ZUl0ZXJhYmxlRGVmaW5p
dGlvbgogICAgIG15ICR2aXNpYmxlSW50ZXJmYWNlTmFtZSA9ICRjb2RlR2VuZXJhdG9yLT5HZXRW
aXNpYmxlSW50ZXJmYWNlTmFtZSgkaW50ZXJmYWNlKTsKIAogICAgIEFkZFRvSW1wbEluY2x1ZGVz
KCJKU0RPTUl0ZXJhdG9yLmgiKTsKKyAgICBBZGRUb0ltcGxJbmNsdWRlcygiPEphdmFTY3JpcHRD
b3JlL1Nsb3RWaXNpdG9yTWFjcm9zLmg+Iik7CiAKICAgICByZXR1cm4gdW5sZXNzIElzS2V5VmFs
dWVJdGVyYWJsZUludGVyZmFjZSgkaW50ZXJmYWNlKTsKIApAQCAtNjc4Niw3ICs2ODAyLDkgQEAg
cHVibGljOgogICAgICAgICBhdXRvKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yJHtpdGVy
YXRvck5hbWV9LmdldCgpOwogSUdOT1JFX1dBUk5JTkdTX0JFR0lOKFwidW5yZWFjaGFibGUtY29k
ZVwiKQogSUdOT1JFX1dBUk5JTkdTX0JFR0lOKFwidGF1dG9sb2dpY2FsLWNvbXBhcmVcIikKLSAg
ICAgICAgaWYgKCYke2l0ZXJhdG9yTmFtZX06OnZpc2l0T3V0cHV0Q29uc3RyYWludHMgIT0gJkpT
Qzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzKQorICAgICAgICB2b2lkICgqbXlWaXNp
dE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gJHtp
dGVyYXRvck5hbWV9Ojp2aXNpdE91dHB1dENvbnN0cmFpbnRzOworICAgICAgICB2b2lkICgqanND
ZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3Im
KSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOworICAgICAgICBpZiAobXlW
aXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQogICAg
ICAgICAgICAgY2xpZW50RGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNl
KTsKIElHTk9SRV9XQVJOSU5HU19FTkQKIElHTk9SRV9XQVJOSU5HU19FTkQKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU0RPTVdpbmRvdy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTRE9NV2lu
ZG93LmNwcAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTRE9NV2luZG93LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUsNiArNDUs
NyBAQAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0hlYXBBbmFseXplci5oPgogI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL0pTQ0lubGluZXMuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9K
U0Rlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZS5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL1Nsb3RWaXNpdG9yTWFjcm9zLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvU3Vic3Bh
Y2VJbmxpbmVzLmg+CiAjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgogI2luY2x1ZGUgPHd0Zi9Qb2lu
dGVyUHJlcGFyYXRpb25zLmg+CkBAIC01MTksNyArNTIwLDkgQEAgSlNDOjpJc29TdWJzcGFjZSog
SlNET01XaW5kb3c6OnN1YnNwYWNlRgogICAgIGF1dG8qIHNwYWNlID0gc3BhY2VzLm1fc3Vic3Bh
Y2VGb3JET01XaW5kb3cuZ2V0KCk7CiBJR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxl
LWNvZGUiKQogSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0g
ICAgaWYgKCZKU0RPTVdpbmRvdzo6dmlzaXRPdXRwdXRDb25zdHJhaW50cyAhPSAmSlNDOjpKU0Nl
bGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHMpCisgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25z
dHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTRE9NV2luZG93Ojp2
aXNpdE91dHB1dENvbnN0cmFpbnRzOworICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0
cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZp
c2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9
IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKICAgICAgICAgY2xpZW50RGF0YS5vdXRwdXRD
b25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKIElHTk9SRV9XQVJOSU5HU19FTkQKIElH
Tk9SRV9XQVJOSU5HU19FTkQKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU0RlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNEZWRpY2F0ZWRXb3JrZXJH
bG9iYWxTY29wZS5jcHAJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU0RlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0hl
YXBBbmFseXplci5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTQ0lubGluZXMuaD4KICNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0Rlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZS5o
PgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1Nsb3RWaXNpdG9yTWFjcm9zLmg+CiAjaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvU3Vic3BhY2VJbmxpbmVzLmg+CiAjaW5jbHVkZSA8d3RmL0dldFB0
ci5oPgogI2luY2x1ZGUgPHd0Zi9Qb2ludGVyUHJlcGFyYXRpb25zLmg+CkBAIC0xNzEsNyArMTcy
LDkgQEAgSlNDOjpJc29TdWJzcGFjZSogSlNEZWRpY2F0ZWRXb3JrZXJHbG9iYQogICAgIGF1dG8q
IHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JEZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZS5n
ZXQoKTsKIElHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCiBJR05PUkVf
V0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKLSAgICBpZiAoJkpTRGVkaWNh
dGVkV29ya2VyR2xvYmFsU2NvcGU6OnZpc2l0T3V0cHV0Q29uc3RyYWludHMgIT0gJkpTQzo6SlND
ZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzKQorICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29u
c3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0RlZGljYXRlZFdv
cmtlckdsb2JhbFNjb3BlOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOworICAgIHZvaWQgKCpqc0Nl
bGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYp
ID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAgaWYgKG15VmlzaXRP
dXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKICAgICAgICAg
Y2xpZW50RGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKIElHTk9S
RV9XQVJOSU5HU19FTkQKIElHTk9SRV9XQVJOSU5HU19FTkQKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU0V4cG9zZWRUb1dvcmtlckFuZFdpbmRvdy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
RXhwb3NlZFRvV29ya2VyQW5kV2luZG93LmNwcAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTRXhwb3NlZFRvV29ya2VyQW5kV2lu
ZG93LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsNiArMzgsNyBAQAogI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL0pTQ0lubGluZXMuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0Rlc3Ry
dWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZS5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL09i
amVjdENvbnN0cnVjdG9yLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvU2xvdFZpc2l0b3JN
YWNyb3MuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9TdWJzcGFjZUlubGluZXMuaD4KICNp
bmNsdWRlIDx3dGYvR2V0UHRyLmg+CiAjaW5jbHVkZSA8d3RmL1BvaW50ZXJQcmVwYXJhdGlvbnMu
aD4KQEAgLTI1Nyw3ICsyNTgsOSBAQCBKU0M6Oklzb1N1YnNwYWNlKiBKU0V4cG9zZWRUb1dvcmtl
ckFuZFdpCiAgICAgYXV0byogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvckV4cG9zZWRUb1dv
cmtlckFuZFdpbmRvdy5nZXQoKTsKIElHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUt
Y29kZSIpCiBJR05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKLSAg
ICBpZiAoJkpTRXhwb3NlZFRvV29ya2VyQW5kV2luZG93Ojp2aXNpdE91dHB1dENvbnN0cmFpbnRz
ICE9ICZKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50cykKKyAgICB2b2lkICgqbXlW
aXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0g
SlNFeHBvc2VkVG9Xb3JrZXJBbmRXaW5kb3c6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAg
dm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNs
b3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKKyAgICBp
ZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50
KQogICAgICAgICBjbGllbnREYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3Bh
Y2UpOwogSUdOT1JFX1dBUk5JTkdTX0VORAogSUdOT1JFX1dBUk5JTkdTX0VORApAQCAtMjczLDcg
KzI3Niw3IEBAIHZvaWQgSlNFeHBvc2VkVG9Xb3JrZXJBbmRXaW5kb3c6OmFuYWx5emUKICAgICBC
YXNlOjphbmFseXplSGVhcChjZWxsLCBhbmFseXplcik7CiB9CiAKLWJvb2wgSlNFeHBvc2VkVG9X
b3JrZXJBbmRXaW5kb3dPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5k
bGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBTbG90VmlzaXRvciYgdmlzaXRvciwgY29u
c3QgY2hhcioqIHJlYXNvbikKK2Jvb2wgSlNFeHBvc2VkVG9Xb3JrZXJBbmRXaW5kb3dPd25lcjo6
aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5k
bGUsIHZvaWQqLCBBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVh
c29uKQogewogICAgIFVOVVNFRF9QQVJBTShoYW5kbGUpOwogICAgIFVOVVNFRF9QQVJBTSh2aXNp
dG9yKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU0V4
cG9zZWRUb1dvcmtlckFuZFdpbmRvdy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU0V4cG9zZWRUb1dvcmtlckFuZFdpbmRvdy5oCShyZXZp
c2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNFeHBvc2VkVG9Xb3JrZXJBbmRXaW5kb3cuaAkod29ya2luZyBjb3B5KQpAQCAtNjYsNyArNjYs
NyBAQCBwcm90ZWN0ZWQ6CiAKIGNsYXNzIEpTRXhwb3NlZFRvV29ya2VyQW5kV2luZG93T3duZXIg
ZmluYWwgOiBwdWJsaWMgSlNDOjpXZWFrSGFuZGxlT3duZXIgewogcHVibGljOgotICAgIGJvb2wg
aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9p
ZCogY29udGV4dCwgSlNDOjpTbG90VmlzaXRvciYsIGNvbnN0IGNoYXIqKikgZmluYWw7CisgICAg
Ym9vbCBpc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+
LCB2b2lkKiBjb250ZXh0LCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImLCBjb25zdCBjaGFyKiop
IGZpbmFsOwogICAgIHZvaWQgZmluYWxpemUoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9p
ZCogY29udGV4dCkgZmluYWw7CiB9OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNQYWludFdvcmtsZXRHbG9iYWxTY29wZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTUGFpbnRXb3JrbGV0
R2xvYmFsU2NvcGUuY3BwCShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNQYWludFdvcmtsZXRHbG9iYWxTY29wZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9IZWFw
QW5hbHl6ZXIuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0NJbmxpbmVzLmg+CiAjaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvSlNEZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUuaD4K
KyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9TbG90VmlzaXRvck1hY3Jvcy5oPgogI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL1N1YnNwYWNlSW5saW5lcy5oPgogI2luY2x1ZGUgPHd0Zi9HZXRQdHIu
aD4KICNpbmNsdWRlIDx3dGYvUG9pbnRlclByZXBhcmF0aW9ucy5oPgpAQCAtMTcxLDcgKzE3Miw5
IEBAIEpTQzo6SXNvU3Vic3BhY2UqIEpTUGFpbnRXb3JrbGV0R2xvYmFsU2MKICAgICBhdXRvKiBz
cGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yUGFpbnRXb3JrbGV0R2xvYmFsU2NvcGUuZ2V0KCk7
CiBJR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQogSUdOT1JFX1dBUk5J
TkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgaWYgKCZKU1BhaW50V29ya2xl
dEdsb2JhbFNjb3BlOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzICE9ICZKU0M6OkpTQ2VsbDo6dmlz
aXRPdXRwdXRDb25zdHJhaW50cykKKyAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQp
KEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNQYWludFdvcmtsZXRHbG9iYWxT
Y29wZTo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKKyAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRw
dXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlND
ZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOworICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3Ry
YWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCiAgICAgICAgIGNsaWVudERhdGEu
b3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7CiBJR05PUkVfV0FSTklOR1Nf
RU5ECiBJR05PUkVfV0FSTklOR1NfRU5ECkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNTZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1NlcnZpY2VXb3Jr
ZXJHbG9iYWxTY29wZS5jcHAJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1NlcnZpY2VXb3JrZXJHbG9iYWxTY29wZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9I
ZWFwQW5hbHl6ZXIuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0NJbmxpbmVzLmg+CiAj
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNEZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUu
aD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9TbG90VmlzaXRvck1hY3Jvcy5oPgogI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL1N1YnNwYWNlSW5saW5lcy5oPgogI2luY2x1ZGUgPHd0Zi9HZXRQ
dHIuaD4KICNpbmNsdWRlIDx3dGYvUG9pbnRlclByZXBhcmF0aW9ucy5oPgpAQCAtMTcxLDcgKzE3
Miw5IEBAIEpTQzo6SXNvU3Vic3BhY2UqIEpTU2VydmljZVdvcmtlckdsb2JhbFMKICAgICBhdXRv
KiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yU2VydmljZVdvcmtlckdsb2JhbFNjb3BlLmdl
dCgpOwogSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKIElHTk9SRV9X
QVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQotICAgIGlmICgmSlNTZXJ2aWNl
V29ya2VyR2xvYmFsU2NvcGU6OnZpc2l0T3V0cHV0Q29uc3RyYWludHMgIT0gJkpTQzo6SlNDZWxs
Ojp2aXNpdE91dHB1dENvbnN0cmFpbnRzKQorICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3Ry
YWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1NlcnZpY2VXb3JrZXJH
bG9iYWxTY29wZTo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKKyAgICB2b2lkICgqanNDZWxsVmlz
aXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpT
Qzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOworICAgIGlmIChteVZpc2l0T3V0cHV0
Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCiAgICAgICAgIGNsaWVu
dERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7CiBJR05PUkVfV0FS
TklOR1NfRU5ECiBJR05PUkVfV0FSTklOR1NfRU5ECkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q0VSZWFjdGlvbnMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDRVJlYWN0aW9u
cy5jcHAJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RDRVJlYWN0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDYg
KzQxLDcgQEAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9IZWFwQW5hbHl6ZXIuaD4KICNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9KU0NJbmxpbmVzLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvSlNEZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUuaD4KKyNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9TbG90VmlzaXRvck1hY3Jvcy5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1N1
YnNwYWNlSW5saW5lcy5oPgogI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KICNpbmNsdWRlIDx3dGYv
UG9pbnRlclByZXBhcmF0aW9ucy5oPgpAQCAtNDUxLDcgKzQ1Miw5IEBAIEpTQzo6SXNvU3Vic3Bh
Y2UqIEpTVGVzdENFUmVhY3Rpb25zOjpzdWIKICAgICBhdXRvKiBzcGFjZSA9IHNwYWNlcy5tX3N1
YnNwYWNlRm9yVGVzdENFUmVhY3Rpb25zLmdldCgpOwogSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1
bnJlYWNoYWJsZS1jb2RlIikKIElHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNv
bXBhcmUiKQotICAgIGlmICgmSlNUZXN0Q0VSZWFjdGlvbnM6OnZpc2l0T3V0cHV0Q29uc3RyYWlu
dHMgIT0gJkpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzKQorICAgIHZvaWQgKCpt
eVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikg
PSBKU1Rlc3RDRVJlYWN0aW9uczo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKKyAgICB2b2lkICgq
anNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0
b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOworICAgIGlmIChteVZp
c2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCiAgICAg
ICAgIGNsaWVudERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7CiBJ
R05PUkVfV0FSTklOR1NfRU5ECiBJR05PUkVfV0FSTklOR1NfRU5ECkBAIC00NjcsNyArNDcwLDcg
QEAgdm9pZCBKU1Rlc3RDRVJlYWN0aW9uczo6YW5hbHl6ZUhlYXAoSlNDZQogICAgIEJhc2U6OmFu
YWx5emVIZWFwKGNlbGwsIGFuYWx5emVyKTsKIH0KIAotYm9vbCBKU1Rlc3RDRVJlYWN0aW9uc093
bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+
IGhhbmRsZSwgdm9pZCosIFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29u
KQorYm9vbCBKU1Rlc3RDRVJlYWN0aW9uc093bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290
cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIEFic3RyYWN0U2xvdFZp
c2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCiB7CiAgICAgVU5VU0VEX1BBUkFN
KGhhbmRsZSk7CiAgICAgVU5VU0VEX1BBUkFNKHZpc2l0b3IpOwpJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENFUmVhY3Rpb25zLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENFUmVh
Y3Rpb25zLmgJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RDRVJlYWN0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC02NSw3
ICs2NSw3IEBAIHByb3RlY3RlZDoKIAogY2xhc3MgSlNUZXN0Q0VSZWFjdGlvbnNPd25lciBmaW5h
bCA6IHB1YmxpYyBKU0M6OldlYWtIYW5kbGVPd25lciB7CiBwdWJsaWM6Ci0gICAgYm9vbCBpc1Jl
YWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBj
b250ZXh0LCBKU0M6OlNsb3RWaXNpdG9yJiwgY29uc3QgY2hhcioqKSBmaW5hbDsKKyAgICBib29s
IGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZv
aWQqIGNvbnRleHQsIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYsIGNvbnN0IGNoYXIqKikgZmlu
YWw7CiAgICAgdm9pZCBmaW5hbGl6ZShKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBj
b250ZXh0KSBmaW5hbDsKIH07CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q0VSZWFjdGlv
bnNTdHJpbmdpZmllci5jcHAJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzcsNiArMzcsNyBAQAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L0hlYXBBbmFseXplci5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTQ0lubGluZXMuaD4K
ICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0Rlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlw
ZS5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1Nsb3RWaXNpdG9yTWFjcm9zLmg+CiAjaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvU3Vic3BhY2VJbmxpbmVzLmg+CiAjaW5jbHVkZSA8d3RmL0dl
dFB0ci5oPgogI2luY2x1ZGUgPHd0Zi9Qb2ludGVyUHJlcGFyYXRpb25zLmg+CkBAIC0yNzYsNyAr
Mjc3LDkgQEAgSlNDOjpJc29TdWJzcGFjZSogSlNUZXN0Q0VSZWFjdGlvbnNTdHJpbgogICAgIGF1
dG8qIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmll
ci5nZXQoKTsKIElHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCiBJR05P
UkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKLSAgICBpZiAoJkpTVGVz
dENFUmVhY3Rpb25zU3RyaW5naWZpZXI6OnZpc2l0T3V0cHV0Q29uc3RyYWludHMgIT0gJkpTQzo6
SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzKQorICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0
Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3RDRVJl
YWN0aW9uc1N0cmluZ2lmaWVyOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOworICAgIHZvaWQgKCpq
c0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRv
ciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAgaWYgKG15Vmlz
aXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKICAgICAg
ICAgY2xpZW50RGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKIElH
Tk9SRV9XQVJOSU5HU19FTkQKIElHTk9SRV9XQVJOSU5HU19FTkQKQEAgLTI5Miw3ICsyOTUsNyBA
QCB2b2lkIEpTVGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXI6OmFuYWx5CiAgICAgQmFzZTo6YW5h
bHl6ZUhlYXAoY2VsbCwgYW5hbHl6ZXIpOwogfQogCi1ib29sIEpTVGVzdENFUmVhY3Rpb25zU3Ry
aW5naWZpZXJPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlND
OjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hh
cioqIHJlYXNvbikKK2Jvb2wgSlNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllck93bmVyOjppc1Jl
YWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwg
dm9pZCosIEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24p
CiB7CiAgICAgVU5VU0VEX1BBUkFNKGhhbmRsZSk7CiAgICAgVU5VU0VEX1BBUkFNKHZpc2l0b3Ip
OwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENF
UmVhY3Rpb25zU3RyaW5naWZpZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllci5oCShyZXZp
c2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllci5oCSh3b3JraW5nIGNvcHkpCkBAIC02NSw3ICs2
NSw3IEBAIHByb3RlY3RlZDoKIAogY2xhc3MgSlNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllck93
bmVyIGZpbmFsIDogcHVibGljIEpTQzo6V2Vha0hhbmRsZU93bmVyIHsKIHB1YmxpYzoKLSAgICBi
b29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4s
IHZvaWQqIGNvbnRleHQsIEpTQzo6U2xvdFZpc2l0b3ImLCBjb25zdCBjaGFyKiopIGZpbmFsOwor
ICAgIGJvb2wgaXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtu
b3duPiwgdm9pZCogY29udGV4dCwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiwgY29uc3QgY2hh
cioqKSBmaW5hbDsKICAgICB2b2lkIGZpbmFsaXplKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4s
IHZvaWQqIGNvbnRleHQpIGZpbmFsOwogfTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENhbGxUcmFjZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDYWxsVHJhY2VyLmNw
cAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdENhbGxUcmFjZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NCw2ICs0NCw3
IEBACiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSGVhcEFuYWx5emVyLmg+CiAjaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvSlNDSW5saW5lcy5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pT
RGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvU2xvdFZpc2l0b3JNYWNyb3MuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9TdWJzcGFj
ZUlubGluZXMuaD4KICNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CiAjaW5jbHVkZSA8d3RmL1BvaW50
ZXJQcmVwYXJhdGlvbnMuaD4KQEAgLTUzNyw3ICs1MzgsOSBAQCBKU0M6Oklzb1N1YnNwYWNlKiBK
U1Rlc3RDYWxsVHJhY2VyOjpzdWJzCiAgICAgYXV0byogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFj
ZUZvclRlc3RDYWxsVHJhY2VyLmdldCgpOwogSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNo
YWJsZS1jb2RlIikKIElHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUi
KQotICAgIGlmICgmSlNUZXN0Q2FsbFRyYWNlcjo6dmlzaXRPdXRwdXRDb25zdHJhaW50cyAhPSAm
SlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHMpCisgICAgdm9pZCAoKm15VmlzaXRP
dXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVz
dENhbGxUcmFjZXI6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAgdm9pZCAoKmpzQ2VsbFZp
c2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBK
U0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKKyAgICBpZiAobXlWaXNpdE91dHB1
dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQogICAgICAgICBjbGll
bnREYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOwogSUdOT1JFX1dB
Uk5JTkdTX0VORAogSUdOT1JFX1dBUk5JTkdTX0VORApAQCAtNTUzLDcgKzU1Niw3IEBAIHZvaWQg
SlNUZXN0Q2FsbFRyYWNlcjo6YW5hbHl6ZUhlYXAoSlNDZWwKICAgICBCYXNlOjphbmFseXplSGVh
cChjZWxsLCBhbmFseXplcik7CiB9CiAKLWJvb2wgSlNUZXN0Q2FsbFRyYWNlck93bmVyOjppc1Jl
YWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwg
dm9pZCosIFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQorYm9vbCBK
U1Rlc3RDYWxsVHJhY2VyT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFu
ZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgQWJzdHJhY3RTbG90VmlzaXRvciYgdmlz
aXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikKIHsKICAgICBVTlVTRURfUEFSQU0oaGFuZGxlKTsK
ICAgICBVTlVTRURfUEFSQU0odmlzaXRvcik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q2FsbFRyYWNlci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDYWxsVHJhY2VyLmgJKHJl
dmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RDYWxsVHJhY2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTY1LDcgKzY1LDcgQEAgcHJv
dGVjdGVkOgogCiBjbGFzcyBKU1Rlc3RDYWxsVHJhY2VyT3duZXIgZmluYWwgOiBwdWJsaWMgSlND
OjpXZWFrSGFuZGxlT3duZXIgewogcHVibGljOgotICAgIGJvb2wgaXNSZWFjaGFibGVGcm9tT3Bh
cXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCwgSlNDOjpT
bG90VmlzaXRvciYsIGNvbnN0IGNoYXIqKikgZmluYWw7CisgICAgYm9vbCBpc1JlYWNoYWJsZUZy
b21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0LCBK
U0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImLCBjb25zdCBjaGFyKiopIGZpbmFsOwogICAgIHZvaWQg
ZmluYWxpemUoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCkgZmluYWw7
CiB9OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDbGFzc1dpdGhKU0J1aWx0
aW5Db25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rv
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9IZWFwQW5hbHl6ZXIuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0NJbmxp
bmVzLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNEZXN0cnVjdGlibGVPYmplY3RIZWFw
Q2VsbFR5cGUuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9TbG90VmlzaXRvck1hY3Jvcy5o
PgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1N1YnNwYWNlSW5saW5lcy5oPgogI2luY2x1ZGUg
PHd0Zi9HZXRQdHIuaD4KICNpbmNsdWRlIDx3dGYvUG9pbnRlclByZXBhcmF0aW9ucy5oPgpAQCAt
MTc4LDcgKzE3OSw5IEBAIEpTQzo6SXNvU3Vic3BhY2UqIEpTVGVzdENsYXNzV2l0aEpTQnVpbHQK
ICAgICBhdXRvKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdENsYXNzV2l0aEpTQnVp
bHRpbkNvbnN0cnVjdG9yLmdldCgpOwogSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJs
ZS1jb2RlIikKIElHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQot
ICAgIGlmICgmSlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3I6OnZpc2l0T3V0cHV0
Q29uc3RyYWludHMgIT0gJkpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzKQorICAg
IHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RW
aXNpdG9yJikgPSBKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvcjo6dmlzaXRPdXRw
dXRDb25zdHJhaW50czsKKyAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShK
U0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1
dENvbnN0cmFpbnRzOworICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxW
aXNpdE91dHB1dENvbnN0cmFpbnQpCiAgICAgICAgIGNsaWVudERhdGEub3V0cHV0Q29uc3RyYWlu
dFNwYWNlcygpLmFwcGVuZChzcGFjZSk7CiBJR05PUkVfV0FSTklOR1NfRU5ECiBJR05PUkVfV0FS
TklOR1NfRU5ECkBAIC0xOTQsNyArMTk3LDcgQEAgdm9pZCBKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0
aW5Db25zdHJ1Y3RvcgogICAgIEJhc2U6OmFuYWx5emVIZWFwKGNlbGwsIGFuYWx5emVyKTsKIH0K
IAotYm9vbCBKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvck93bmVyOjppc1JlYWNo
YWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9p
ZCosIFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQorYm9vbCBKU1Rl
c3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvck93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFx
dWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIEFic3RyYWN0
U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCiB7CiAgICAgVU5VU0VE
X1BBUkFNKGhhbmRsZSk7CiAgICAgVU5VU0VEX1BBUkFNKHZpc2l0b3IpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENsYXNzV2l0aEpTQnVpbHRp
bkNvbnN0cnVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yLmgJKHJldmlz
aW9uIDI3MzExOSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC02
NSw3ICs2NSw3IEBAIHByb3RlY3RlZDoKIAogY2xhc3MgSlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGlu
Q29uc3RydWN0b3JPd25lciBmaW5hbCA6IHB1YmxpYyBKU0M6OldlYWtIYW5kbGVPd25lciB7CiBw
dWJsaWM6Ci0gICAgYm9vbCBpc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxK
U0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0LCBKU0M6OlNsb3RWaXNpdG9yJiwgY29uc3QgY2hh
cioqKSBmaW5hbDsKKyAgICBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFu
ZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRv
ciYsIGNvbnN0IGNoYXIqKikgZmluYWw7CiAgICAgdm9pZCBmaW5hbGl6ZShKU0M6OkhhbmRsZTxK
U0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0KSBmaW5hbDsKIH07CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDb25kaXRpb25hbEluY2x1ZGVz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0Q29uZGl0aW9uYWxJbmNsdWRlcy5jcHAJKHJldmlzaW9uIDI3MzExOSkKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDb25kaXRpb25hbElu
Y2x1ZGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL0hlYXBBbmFseXplci5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pT
Q0lubGluZXMuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0Rlc3RydWN0aWJsZU9iamVj
dEhlYXBDZWxsVHlwZS5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1Nsb3RWaXNpdG9yTWFj
cm9zLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvU3Vic3BhY2VJbmxpbmVzLmg+CiAjaW5j
bHVkZSA8d3RmL0dldFB0ci5oPgogI2luY2x1ZGUgPHd0Zi9Qb2ludGVyUHJlcGFyYXRpb25zLmg+
CkBAIC04MDQsNyArODA1LDkgQEAgSlNDOjpJc29TdWJzcGFjZSogSlNUZXN0Q29uZGl0aW9uYWxJ
bmNsdQogICAgIGF1dG8qIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0Q29uZGl0aW9u
YWxJbmNsdWRlcy5nZXQoKTsKIElHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29k
ZSIpCiBJR05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKLSAgICBp
ZiAoJkpTVGVzdENvbmRpdGlvbmFsSW5jbHVkZXM6OnZpc2l0T3V0cHV0Q29uc3RyYWludHMgIT0g
JkpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzKQorICAgIHZvaWQgKCpteVZpc2l0
T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rl
c3RDb25kaXRpb25hbEluY2x1ZGVzOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOworICAgIHZvaWQg
KCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90Vmlz
aXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAgaWYgKG15
VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKICAg
ICAgICAgY2xpZW50RGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsK
IElHTk9SRV9XQVJOSU5HU19FTkQKIElHTk9SRV9XQVJOSU5HU19FTkQKQEAgLTgyMCw3ICs4MjMs
NyBAQCB2b2lkIEpTVGVzdENvbmRpdGlvbmFsSW5jbHVkZXM6OmFuYWx5emVICiAgICAgQmFzZTo6
YW5hbHl6ZUhlYXAoY2VsbCwgYW5hbHl6ZXIpOwogfQogCi1ib29sIEpTVGVzdENvbmRpdGlvbmFs
SW5jbHVkZXNPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlND
OjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hh
cioqIHJlYXNvbikKK2Jvb2wgSlNUZXN0Q29uZGl0aW9uYWxJbmNsdWRlc093bmVyOjppc1JlYWNo
YWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9p
ZCosIEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCiB7
CiAgICAgVU5VU0VEX1BBUkFNKGhhbmRsZSk7CiAgICAgVU5VU0VEX1BBUkFNKHZpc2l0b3IpOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENvbmRp
dGlvbmFsSW5jbHVkZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q29uZGl0aW9uYWxJbmNsdWRlcy5oCShyZXZpc2lvbiAyNzMx
MTkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q29u
ZGl0aW9uYWxJbmNsdWRlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC03OCw3ICs3OCw3IEBAIHByb3Rl
Y3RlZDoKIAogY2xhc3MgSlNUZXN0Q29uZGl0aW9uYWxJbmNsdWRlc093bmVyIGZpbmFsIDogcHVi
bGljIEpTQzo6V2Vha0hhbmRsZU93bmVyIHsKIHB1YmxpYzoKLSAgICBib29sIGlzUmVhY2hhYmxl
RnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQs
IEpTQzo6U2xvdFZpc2l0b3ImLCBjb25zdCBjaGFyKiopIGZpbmFsOworICAgIGJvb2wgaXNSZWFj
aGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29u
dGV4dCwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiwgY29uc3QgY2hhcioqKSBmaW5hbDsKICAg
ICB2b2lkIGZpbmFsaXplKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQp
IGZpbmFsOwogfTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdENvbmRpdGlvbmFsbHlSZWFkV3JpdGUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDb25kaXRpb25hbGx5UmVh
ZFdyaXRlLmNwcAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdENvbmRpdGlvbmFsbHlSZWFkV3JpdGUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00Miw2ICs0Miw3IEBACiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSGVhcEFu
YWx5emVyLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNDSW5saW5lcy5oPgogI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL0pTRGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLmg+Cisj
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvU2xvdFZpc2l0b3JNYWNyb3MuaD4KICNpbmNsdWRlIDxK
YXZhU2NyaXB0Q29yZS9TdWJzcGFjZUlubGluZXMuaD4KICNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+
CiAjaW5jbHVkZSA8d3RmL1BvaW50ZXJQcmVwYXJhdGlvbnMuaD4KQEAgLTYxOCw3ICs2MTksOSBA
QCBKU0M6Oklzb1N1YnNwYWNlKiBKU1Rlc3RDb25kaXRpb25hbGx5UmVhCiAgICAgYXV0byogc3Bh
Y2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RDb25kaXRpb25hbGx5UmVhZFdyaXRlLmdldCgp
OwogSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKIElHTk9SRV9XQVJO
SU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQotICAgIGlmICgmSlNUZXN0Q29uZGl0
aW9uYWxseVJlYWRXcml0ZTo6dmlzaXRPdXRwdXRDb25zdHJhaW50cyAhPSAmSlNDOjpKU0NlbGw6
OnZpc2l0T3V0cHV0Q29uc3RyYWludHMpCisgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJh
aW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdENvbmRpdGlvbmFs
bHlSZWFkV3JpdGU6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAgdm9pZCAoKmpzQ2VsbFZp
c2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBK
U0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKKyAgICBpZiAobXlWaXNpdE91dHB1
dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQogICAgICAgICBjbGll
bnREYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOwogSUdOT1JFX1dB
Uk5JTkdTX0VORAogSUdOT1JFX1dBUk5JTkdTX0VORApAQCAtNjM0LDcgKzYzNyw3IEBAIHZvaWQg
SlNUZXN0Q29uZGl0aW9uYWxseVJlYWRXcml0ZTo6YW5hbHkKICAgICBCYXNlOjphbmFseXplSGVh
cChjZWxsLCBhbmFseXplcik7CiB9CiAKLWJvb2wgSlNUZXN0Q29uZGl0aW9uYWxseVJlYWRXcml0
ZU93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25v
d24+IGhhbmRsZSwgdm9pZCosIFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVh
c29uKQorYm9vbCBKU1Rlc3RDb25kaXRpb25hbGx5UmVhZFdyaXRlT3duZXI6OmlzUmVhY2hhYmxl
RnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwg
QWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikKIHsKICAg
ICBVTlVTRURfUEFSQU0oaGFuZGxlKTsKICAgICBVTlVTRURfUEFSQU0odmlzaXRvcik7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q29uZGl0aW9u
YWxseVJlYWRXcml0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RDb25kaXRpb25hbGx5UmVhZFdyaXRlLmgJKHJldmlzaW9uIDI3
MzExOSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RD
b25kaXRpb25hbGx5UmVhZFdyaXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTY3LDcgKzY3LDcgQEAg
cHJvdGVjdGVkOgogCiBjbGFzcyBKU1Rlc3RDb25kaXRpb25hbGx5UmVhZFdyaXRlT3duZXIgZmlu
YWwgOiBwdWJsaWMgSlNDOjpXZWFrSGFuZGxlT3duZXIgewogcHVibGljOgotICAgIGJvb2wgaXNS
ZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCog
Y29udGV4dCwgSlNDOjpTbG90VmlzaXRvciYsIGNvbnN0IGNoYXIqKikgZmluYWw7CisgICAgYm9v
bCBpc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2
b2lkKiBjb250ZXh0LCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImLCBjb25zdCBjaGFyKiopIGZp
bmFsOwogICAgIHZvaWQgZmluYWxpemUoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCog
Y29udGV4dCkgZmluYWw7CiB9OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0RE9NSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RE9NSklULmNwcAkocmV2aXNpb24gMjcz
MTE5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdERP
TUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDYgKzQ4LDcgQEAKICNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9IZWFwQW5hbHl6ZXIuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0NJ
bmxpbmVzLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNEZXN0cnVjdGlibGVPYmplY3RI
ZWFwQ2VsbFR5cGUuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9TbG90VmlzaXRvck1hY3Jv
cy5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1N1YnNwYWNlSW5saW5lcy5oPgogI2luY2x1
ZGUgPHd0Zi9HZXRQdHIuaD4KICNpbmNsdWRlIDx3dGYvUG9pbnRlclByZXBhcmF0aW9ucy5oPgpA
QCAtMTI3MSw3ICsxMjcyLDkgQEAgSlNDOjpJc29TdWJzcGFjZSogSlNUZXN0RE9NSklUOjpzdWJz
cGFjZQogICAgIGF1dG8qIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0RE9NSklULmdl
dCgpOwogSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKIElHTk9SRV9X
QVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQotICAgIGlmICgmSlNUZXN0RE9N
SklUOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzICE9ICZKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRD
b25zdHJhaW50cykKKyAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlND
ZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0RE9NSklUOjp2aXNpdE91dHB1dENvbnN0
cmFpbnRzOworICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlND
ZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3Ry
YWludHM7CisgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0
cHV0Q29uc3RyYWludCkKICAgICAgICAgY2xpZW50RGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2Vz
KCkuYXBwZW5kKHNwYWNlKTsKIElHTk9SRV9XQVJOSU5HU19FTkQKIElHTk9SRV9XQVJOSU5HU19F
TkQKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RE
ZWZhdWx0VG9KU09OLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0RGVmYXVsdFRvSlNPTi5jcHAJKHJldmlzaW9uIDI3MzExOSkK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3REZWZhdWx0
VG9KU09OLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTEsNiArNTEsNyBAQAogI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL0pTQ0lubGluZXMuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0Rl
c3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZS5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L09iamVjdENvbnN0cnVjdG9yLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvU2xvdFZpc2l0
b3JNYWNyb3MuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9TdWJzcGFjZUlubGluZXMuaD4K
ICNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CiAjaW5jbHVkZSA8d3RmL1BvaW50ZXJQcmVwYXJhdGlv
bnMuaD4KQEAgLTc5MCw3ICs3OTEsOSBAQCBKU0M6Oklzb1N1YnNwYWNlKiBKU1Rlc3REZWZhdWx0
VG9KU09OOjpzCiAgICAgYXV0byogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3REZWZh
dWx0VG9KU09OLmdldCgpOwogSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2Rl
IikKIElHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQotICAgIGlm
ICgmSlNUZXN0RGVmYXVsdFRvSlNPTjo6dmlzaXRPdXRwdXRDb25zdHJhaW50cyAhPSAmSlNDOjpK
U0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHMpCisgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRD
b25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdERlZmF1
bHRUb0pTT046OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAgdm9pZCAoKmpzQ2VsbFZpc2l0
T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6
OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKKyAgICBpZiAobXlWaXNpdE91dHB1dENv
bnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQogICAgICAgICBjbGllbnRE
YXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOwogSUdOT1JFX1dBUk5J
TkdTX0VORAogSUdOT1JFX1dBUk5JTkdTX0VORApAQCAtODA2LDcgKzgwOSw3IEBAIHZvaWQgSlNU
ZXN0RGVmYXVsdFRvSlNPTjo6YW5hbHl6ZUhlYXAoSlMKICAgICBCYXNlOjphbmFseXplSGVhcChj
ZWxsLCBhbmFseXplcik7CiB9CiAKLWJvb2wgSlNUZXN0RGVmYXVsdFRvSlNPTk93bmVyOjppc1Jl
YWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwg
dm9pZCosIFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQorYm9vbCBK
U1Rlc3REZWZhdWx0VG9KU09OT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6
SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgQWJzdHJhY3RTbG90VmlzaXRvciYg
dmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikKIHsKICAgICBVTlVTRURfUEFSQU0oaGFuZGxl
KTsKICAgICBVTlVTRURfUEFSQU0odmlzaXRvcik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RGVmYXVsdFRvSlNPTi5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3REZWZhdWx0VG9K
U09OLmgJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3REZWZhdWx0VG9KU09OLmgJKHdvcmtpbmcgY29weSkKQEAgLTY1LDcg
KzY1LDcgQEAgcHJvdGVjdGVkOgogCiBjbGFzcyBKU1Rlc3REZWZhdWx0VG9KU09OT3duZXIgZmlu
YWwgOiBwdWJsaWMgSlNDOjpXZWFrSGFuZGxlT3duZXIgewogcHVibGljOgotICAgIGJvb2wgaXNS
ZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCog
Y29udGV4dCwgSlNDOjpTbG90VmlzaXRvciYsIGNvbnN0IGNoYXIqKikgZmluYWw7CisgICAgYm9v
bCBpc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2
b2lkKiBjb250ZXh0LCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImLCBjb25zdCBjaGFyKiopIGZp
bmFsOwogICAgIHZvaWQgZmluYWxpemUoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCog
Y29udGV4dCkgZmluYWw7CiB9OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0RGVmYXVsdFRvSlNPTkZpbHRlcmVkQnlFeHBvc2VkLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
RGVmYXVsdFRvSlNPTkZpbHRlcmVkQnlFeHBvc2VkLmNwcAkocmV2aXNpb24gMjczMTE5KQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdERlZmF1bHRUb0pT
T05GaWx0ZXJlZEJ5RXhwb3NlZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDYgKzM4LDcgQEAK
ICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0NJbmxpbmVzLmg+CiAjaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvSlNEZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUuaD4KICNpbmNsdWRlIDxK
YXZhU2NyaXB0Q29yZS9PYmplY3RDb25zdHJ1Y3Rvci5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL1Nsb3RWaXNpdG9yTWFjcm9zLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvU3Vic3Bh
Y2VJbmxpbmVzLmg+CiAjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgogI2luY2x1ZGUgPHd0Zi9Qb2lu
dGVyUHJlcGFyYXRpb25zLmg+CkBAIC0yNzYsNyArMjc3LDkgQEAgSlNDOjpJc29TdWJzcGFjZSog
SlNUZXN0RGVmYXVsdFRvSlNPTkZpbAogICAgIGF1dG8qIHNwYWNlID0gc3BhY2VzLm1fc3Vic3Bh
Y2VGb3JUZXN0RGVmYXVsdFRvSlNPTkZpbHRlcmVkQnlFeHBvc2VkLmdldCgpOwogSUdOT1JFX1dB
Uk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKIElHTk9SRV9XQVJOSU5HU19CRUdJTigi
dGF1dG9sb2dpY2FsLWNvbXBhcmUiKQotICAgIGlmICgmSlNUZXN0RGVmYXVsdFRvSlNPTkZpbHRl
cmVkQnlFeHBvc2VkOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzICE9ICZKU0M6OkpTQ2VsbDo6dmlz
aXRPdXRwdXRDb25zdHJhaW50cykKKyAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQp
KEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0RGVmYXVsdFRvSlNPTkZp
bHRlcmVkQnlFeHBvc2VkOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOworICAgIHZvaWQgKCpqc0Nl
bGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYp
ID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAgaWYgKG15VmlzaXRP
dXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKICAgICAgICAg
Y2xpZW50RGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKIElHTk9S
RV9XQVJOSU5HU19FTkQKIElHTk9SRV9XQVJOSU5HU19FTkQKQEAgLTI5Miw3ICsyOTUsNyBAQCB2
b2lkIEpTVGVzdERlZmF1bHRUb0pTT05GaWx0ZXJlZEJ5RXhwb3NlCiAgICAgQmFzZTo6YW5hbHl6
ZUhlYXAoY2VsbCwgYW5hbHl6ZXIpOwogfQogCi1ib29sIEpTVGVzdERlZmF1bHRUb0pTT05GaWx0
ZXJlZEJ5RXhwb3NlZE93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRs
ZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25z
dCBjaGFyKiogcmVhc29uKQorYm9vbCBKU1Rlc3REZWZhdWx0VG9KU09ORmlsdGVyZWRCeUV4cG9z
ZWRPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtu
b3duPiBoYW5kbGUsIHZvaWQqLCBBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBj
aGFyKiogcmVhc29uKQogewogICAgIFVOVVNFRF9QQVJBTShoYW5kbGUpOwogICAgIFVOVVNFRF9Q
QVJBTSh2aXNpdG9yKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3REZWZhdWx0VG9KU09ORmlsdGVyZWRCeUV4cG9zZWQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RGVmYXVsdFRv
SlNPTkZpbHRlcmVkQnlFeHBvc2VkLmgJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3REZWZhdWx0VG9KU09ORmlsdGVyZWRC
eUV4cG9zZWQuaAkod29ya2luZyBjb3B5KQpAQCAtNjUsNyArNjUsNyBAQCBwcm90ZWN0ZWQ6CiAK
IGNsYXNzIEpTVGVzdERlZmF1bHRUb0pTT05GaWx0ZXJlZEJ5RXhwb3NlZE93bmVyIGZpbmFsIDog
cHVibGljIEpTQzo6V2Vha0hhbmRsZU93bmVyIHsKIHB1YmxpYzoKLSAgICBib29sIGlzUmVhY2hh
YmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRl
eHQsIEpTQzo6U2xvdFZpc2l0b3ImLCBjb25zdCBjaGFyKiopIGZpbmFsOworICAgIGJvb2wgaXNS
ZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCog
Y29udGV4dCwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiwgY29uc3QgY2hhcioqKSBmaW5hbDsK
ICAgICB2b2lkIGZpbmFsaXplKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRl
eHQpIGZpbmFsOwogfTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RGVm
YXVsdFRvSlNPTkluZGlyZWN0SW5oZXJpdGFuY2UuY3BwCShyZXZpc2lvbiAyNzMxMTkpCisrKyBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RGVmYXVsdFRvSlNP
TkluZGlyZWN0SW5oZXJpdGFuY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBA
CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSGVhcEFuYWx5emVyLmg+CiAjaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvSlNDSW5saW5lcy5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTRGVz
dHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
U2xvdFZpc2l0b3JNYWNyb3MuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9TdWJzcGFjZUlu
bGluZXMuaD4KICNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CiAjaW5jbHVkZSA8d3RmL1BvaW50ZXJQ
cmVwYXJhdGlvbnMuaD4KQEAgLTE2NCw3ICsxNjUsOSBAQCBKU0M6Oklzb1N1YnNwYWNlKiBKU1Rl
c3REZWZhdWx0VG9KU09OSW5kCiAgICAgYXV0byogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZv
clRlc3REZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhlcml0YW5jZS5nZXQoKTsKIElHTk9SRV9XQVJO
SU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCiBJR05PUkVfV0FSTklOR1NfQkVHSU4oInRh
dXRvbG9naWNhbC1jb21wYXJlIikKLSAgICBpZiAoJkpTVGVzdERlZmF1bHRUb0pTT05JbmRpcmVj
dEluaGVyaXRhbmNlOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzICE9ICZKU0M6OkpTQ2VsbDo6dmlz
aXRPdXRwdXRDb25zdHJhaW50cykKKyAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQp
KEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0RGVmYXVsdFRvSlNPTklu
ZGlyZWN0SW5oZXJpdGFuY2U6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAgdm9pZCAoKmpz
Q2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9y
JikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKKyAgICBpZiAobXlWaXNp
dE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQogICAgICAg
ICBjbGllbnREYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOwogSUdO
T1JFX1dBUk5JTkdTX0VORAogSUdOT1JFX1dBUk5JTkdTX0VORApJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXQuY3BwCShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RGVmYXVsdFRvSlNPTklu
aGVyaXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw2ICs0Nyw3IEBACiAjaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvSlNDSW5saW5lcy5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTRGVz
dHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
T2JqZWN0Q29uc3RydWN0b3IuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9TbG90VmlzaXRv
ck1hY3Jvcy5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1N1YnNwYWNlSW5saW5lcy5oPgog
I2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KICNpbmNsdWRlIDx3dGYvUG9pbnRlclByZXBhcmF0aW9u
cy5oPgpAQCAtMjcyLDcgKzI3Myw5IEBAIEpTQzo6SXNvU3Vic3BhY2UqIEpTVGVzdERlZmF1bHRU
b0pTT05JbmgKICAgICBhdXRvKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdERlZmF1
bHRUb0pTT05Jbmhlcml0LmdldCgpOwogSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJs
ZS1jb2RlIikKIElHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQot
ICAgIGlmICgmSlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXQ6OnZpc2l0T3V0cHV0Q29uc3RyYWlu
dHMgIT0gJkpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzKQorICAgIHZvaWQgKCpt
eVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikg
PSBKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKKyAg
ICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6
U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOworICAg
IGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFp
bnQpCiAgICAgICAgIGNsaWVudERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChz
cGFjZSk7CiBJR05PUkVfV0FSTklOR1NfRU5ECiBJR05PUkVfV0FSTklOR1NfRU5ECkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RGVmYXVsdFRvSlNP
TkluaGVyaXRGaW5hbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWwuY3BwCShyZXZp
c2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3
LDYgKzQ3LDcgQEAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0NJbmxpbmVzLmg+CiAjaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvSlNEZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUuaD4K
ICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9PYmplY3RDb25zdHJ1Y3Rvci5oPgorI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL1Nsb3RWaXNpdG9yTWFjcm9zLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvU3Vic3BhY2VJbmxpbmVzLmg+CiAjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgogI2luY2x1
ZGUgPHd0Zi9Qb2ludGVyUHJlcGFyYXRpb25zLmg+CkBAIC0zMDgsNyArMzA5LDkgQEAgSlNDOjpJ
c29TdWJzcGFjZSogSlNUZXN0RGVmYXVsdFRvSlNPTkluaAogICAgIGF1dG8qIHNwYWNlID0gc3Bh
Y2VzLm1fc3Vic3BhY2VGb3JUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbC5nZXQoKTsKIElH
Tk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCiBJR05PUkVfV0FSTklOR1Nf
QkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKLSAgICBpZiAoJkpTVGVzdERlZmF1bHRUb0pT
T05Jbmhlcml0RmluYWw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHMgIT0gJkpTQzo6SlNDZWxsOjp2
aXNpdE91dHB1dENvbnN0cmFpbnRzKQorICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWlu
dCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3REZWZhdWx0VG9KU09O
SW5oZXJpdEZpbmFsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOworICAgIHZvaWQgKCpqc0NlbGxW
aXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0g
SlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAgaWYgKG15VmlzaXRPdXRw
dXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKICAgICAgICAgY2xp
ZW50RGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKIElHTk9SRV9X
QVJOSU5HU19FTkQKIElHTk9SRV9XQVJOSU5HU19FTkQKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3REb21haW5TZWN1cml0eS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdERvbWFp
blNlY3VyaXR5LmNwcAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdERvbWFpblNlY3VyaXR5LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDEsNiArNDEsNyBAQAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0hlYXBBbmFseXpl
ci5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTQ0lubGluZXMuaD4KICNpbmNsdWRlIDxK
YXZhU2NyaXB0Q29yZS9KU0Rlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZS5oPgorI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL1Nsb3RWaXNpdG9yTWFjcm9zLmg+CiAjaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvU3Vic3BhY2VJbmxpbmVzLmg+CiAjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgogI2lu
Y2x1ZGUgPHd0Zi9Qb2ludGVyUHJlcGFyYXRpb25zLmg+CkBAIC0zMzgsNyArMzM5LDkgQEAgSlND
OjpJc29TdWJzcGFjZSogSlNUZXN0RG9tYWluU2VjdXJpdHk6OgogICAgIGF1dG8qIHNwYWNlID0g
c3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0RG9tYWluU2VjdXJpdHkuZ2V0KCk7CiBJR05PUkVfV0FS
TklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQogSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0
YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgaWYgKCZKU1Rlc3REb21haW5TZWN1cml0eTo6dmlz
aXRPdXRwdXRDb25zdHJhaW50cyAhPSAmSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWlu
dHMpCisgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpT
Qzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdERvbWFpblNlY3VyaXR5Ojp2aXNpdE91dHB1dENvbnN0
cmFpbnRzOworICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlND
ZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3Ry
YWludHM7CisgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0
cHV0Q29uc3RyYWludCkKICAgICAgICAgY2xpZW50RGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2Vz
KCkuYXBwZW5kKHNwYWNlKTsKIElHTk9SRV9XQVJOSU5HU19FTkQKIElHTk9SRV9XQVJOSU5HU19F
TkQKQEAgLTM1NCw3ICszNTcsNyBAQCB2b2lkIEpTVGVzdERvbWFpblNlY3VyaXR5OjphbmFseXpl
SGVhcChKCiAgICAgQmFzZTo6YW5hbHl6ZUhlYXAoY2VsbCwgYW5hbHl6ZXIpOwogfQogCi1ib29s
IEpTVGVzdERvbWFpblNlY3VyaXR5T3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpT
Qzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgU2xvdFZpc2l0b3ImIHZpc2l0
b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCitib29sIEpTVGVzdERvbWFpblNlY3VyaXR5T3duZXI6
OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFu
ZGxlLCB2b2lkKiwgQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJl
YXNvbikKIHsKICAgICBVTlVTRURfUEFSQU0oaGFuZGxlKTsKICAgICBVTlVTRURfUEFSQU0odmlz
aXRvcik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0RG9tYWluU2VjdXJpdHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RG9tYWluU2VjdXJpdHkuaAkocmV2aXNpb24gMjczMTE5
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdERvbWFp
blNlY3VyaXR5LmgJKHdvcmtpbmcgY29weSkKQEAgLTY4LDcgKzY4LDcgQEAgcHJvdGVjdGVkOgog
CiBjbGFzcyBKU1Rlc3REb21haW5TZWN1cml0eU93bmVyIGZpbmFsIDogcHVibGljIEpTQzo6V2Vh
a0hhbmRsZU93bmVyIHsKIHB1YmxpYzoKLSAgICBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJv
b3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6U2xvdFZp
c2l0b3ImLCBjb25zdCBjaGFyKiopIGZpbmFsOworICAgIGJvb2wgaXNSZWFjaGFibGVGcm9tT3Bh
cXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCwgSlNDOjpB
YnN0cmFjdFNsb3RWaXNpdG9yJiwgY29uc3QgY2hhcioqKSBmaW5hbDsKICAgICB2b2lkIGZpbmFs
aXplKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQpIGZpbmFsOwogfTsK
IApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEVu
YWJsZWRCeVNldHRpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFbmFibGVkQnlTZXR0aW5nLmNwcAkocmV2aXNpb24gMjcz
MTE5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEVu
YWJsZWRCeVNldHRpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw2ICszOCw3IEBACiAjaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvSGVhcEFuYWx5emVyLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvSlNDSW5saW5lcy5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTRGVzdHJ1Y3Rp
YmxlT2JqZWN0SGVhcENlbGxUeXBlLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvU2xvdFZp
c2l0b3JNYWNyb3MuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9TdWJzcGFjZUlubGluZXMu
aD4KICNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CiAjaW5jbHVkZSA8d3RmL1BvaW50ZXJQcmVwYXJh
dGlvbnMuaD4KQEAgLTUwNyw3ICs1MDgsOSBAQCBKU0M6Oklzb1N1YnNwYWNlKiBKU1Rlc3RFbmFi
bGVkQnlTZXR0aW5nCiAgICAgYXV0byogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RF
bmFibGVkQnlTZXR0aW5nLmdldCgpOwogSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJs
ZS1jb2RlIikKIElHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQot
ICAgIGlmICgmSlNUZXN0RW5hYmxlZEJ5U2V0dGluZzo6dmlzaXRPdXRwdXRDb25zdHJhaW50cyAh
PSAmSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHMpCisgICAgdm9pZCAoKm15Vmlz
aXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpT
VGVzdEVuYWJsZWRCeVNldHRpbmc6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAgdm9pZCAo
KmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNp
dG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKKyAgICBpZiAobXlW
aXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQogICAg
ICAgICBjbGllbnREYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOwog
SUdOT1JFX1dBUk5JTkdTX0VORAogSUdOT1JFX1dBUk5JTkdTX0VORApAQCAtNTIzLDcgKzUyNiw3
IEBAIHZvaWQgSlNUZXN0RW5hYmxlZEJ5U2V0dGluZzo6YW5hbHl6ZUhlYXAKICAgICBCYXNlOjph
bmFseXplSGVhcChjZWxsLCBhbmFseXplcik7CiB9CiAKLWJvb2wgSlNUZXN0RW5hYmxlZEJ5U2V0
dGluZ093bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVu
a25vd24+IGhhbmRsZSwgdm9pZCosIFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiog
cmVhc29uKQorYm9vbCBKU1Rlc3RFbmFibGVkQnlTZXR0aW5nT3duZXI6OmlzUmVhY2hhYmxlRnJv
bU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgQWJz
dHJhY3RTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikKIHsKICAgICBV
TlVTRURfUEFSQU0oaGFuZGxlKTsKICAgICBVTlVTRURfUEFSQU0odmlzaXRvcik7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RW5hYmxlZEJ5U2V0
dGluZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RFbmFibGVkQnlTZXR0aW5nLmgJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFbmFibGVkQnlTZXR0aW5n
LmgJKHdvcmtpbmcgY29weSkKQEAgLTY3LDcgKzY3LDcgQEAgcHJvdGVjdGVkOgogCiBjbGFzcyBK
U1Rlc3RFbmFibGVkQnlTZXR0aW5nT3duZXIgZmluYWwgOiBwdWJsaWMgSlNDOjpXZWFrSGFuZGxl
T3duZXIgewogcHVibGljOgotICAgIGJvb2wgaXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlND
OjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCwgSlNDOjpTbG90VmlzaXRvciYs
IGNvbnN0IGNoYXIqKikgZmluYWw7CisgICAgYm9vbCBpc1JlYWNoYWJsZUZyb21PcGFxdWVSb290
cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0LCBKU0M6OkFic3RyYWN0
U2xvdFZpc2l0b3ImLCBjb25zdCBjaGFyKiopIGZpbmFsOwogICAgIHZvaWQgZmluYWxpemUoSlND
OjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCkgZmluYWw7CiB9OwogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RW5hYmxlZEZv
ckNvbnRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RFbmFibGVkRm9yQ29udGV4dC5jcHAJKHJldmlzaW9uIDI3MzExOSkK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFbmFibGVk
Rm9yQ29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9IZWFwQW5hbHl6ZXIuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9KU0NJbmxpbmVzLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNEZXN0cnVjdGlibGVP
YmplY3RIZWFwQ2VsbFR5cGUuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9TbG90VmlzaXRv
ck1hY3Jvcy5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1N1YnNwYWNlSW5saW5lcy5oPgog
I2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KICNpbmNsdWRlIDx3dGYvUG9pbnRlclByZXBhcmF0aW9u
cy5oPgpAQCAtMjA2LDcgKzIwNyw5IEBAIEpTQzo6SXNvU3Vic3BhY2UqIEpTVGVzdEVuYWJsZWRG
b3JDb250ZXgKICAgICBhdXRvKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdEVuYWJs
ZWRGb3JDb250ZXh0LmdldCgpOwogSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1j
b2RlIikKIElHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQotICAg
IGlmICgmSlNUZXN0RW5hYmxlZEZvckNvbnRleHQ6OnZpc2l0T3V0cHV0Q29uc3RyYWludHMgIT0g
JkpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzKQorICAgIHZvaWQgKCpteVZpc2l0
T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rl
c3RFbmFibGVkRm9yQ29udGV4dDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKKyAgICB2b2lkICgq
anNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0
b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOworICAgIGlmIChteVZp
c2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCiAgICAg
ICAgIGNsaWVudERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7CiBJ
R05PUkVfV0FSTklOR1NfRU5ECiBJR05PUkVfV0FSTklOR1NfRU5ECkBAIC0yMjIsNyArMjI1LDcg
QEAgdm9pZCBKU1Rlc3RFbmFibGVkRm9yQ29udGV4dDo6YW5hbHl6ZUhlYQogICAgIEJhc2U6OmFu
YWx5emVIZWFwKGNlbGwsIGFuYWx5emVyKTsKIH0KIAotYm9vbCBKU1Rlc3RFbmFibGVkRm9yQ29u
dGV4dE93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVu
a25vd24+IGhhbmRsZSwgdm9pZCosIFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiog
cmVhc29uKQorYm9vbCBKU1Rlc3RFbmFibGVkRm9yQ29udGV4dE93bmVyOjppc1JlYWNoYWJsZUZy
b21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIEFi
c3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCiB7CiAgICAg
VU5VU0VEX1BBUkFNKGhhbmRsZSk7CiAgICAgVU5VU0VEX1BBUkFNKHZpc2l0b3IpOwpJbmRleDog
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEVuYWJsZWRGb3JD
b250ZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdEVuYWJsZWRGb3JDb250ZXh0LmgJKHJldmlzaW9uIDI3MzExOSkKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFbmFibGVkRm9yQ29u
dGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC02Nyw3ICs2Nyw3IEBAIHByb3RlY3RlZDoKIAogY2xh
c3MgSlNUZXN0RW5hYmxlZEZvckNvbnRleHRPd25lciBmaW5hbCA6IHB1YmxpYyBKU0M6OldlYWtI
YW5kbGVPd25lciB7CiBwdWJsaWM6Ci0gICAgYm9vbCBpc1JlYWNoYWJsZUZyb21PcGFxdWVSb290
cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0LCBKU0M6OlNsb3RWaXNp
dG9yJiwgY29uc3QgY2hhcioqKSBmaW5hbDsKKyAgICBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1
ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6QWJz
dHJhY3RTbG90VmlzaXRvciYsIGNvbnN0IGNoYXIqKikgZmluYWw7CiAgICAgdm9pZCBmaW5hbGl6
ZShKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0KSBmaW5hbDsKIH07CiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFdmVu
dENvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXZlbnRDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDI3MzEx
OSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFdmVu
dENvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL0hlYXBBbmFseXplci5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL0pTQ0lubGluZXMuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0Rlc3RydWN0aWJs
ZU9iamVjdEhlYXBDZWxsVHlwZS5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1Nsb3RWaXNp
dG9yTWFjcm9zLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvU3Vic3BhY2VJbmxpbmVzLmg+
CiAjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgogI2luY2x1ZGUgPHd0Zi9Qb2ludGVyUHJlcGFyYXRp
b25zLmg+CkBAIC0zMjgsNyArMzI5LDkgQEAgSlNDOjpJc29TdWJzcGFjZSogSlNUZXN0RXZlbnRD
b25zdHJ1Y3RvcgogICAgIGF1dG8qIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0RXZl
bnRDb25zdHJ1Y3Rvci5nZXQoKTsKIElHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUt
Y29kZSIpCiBJR05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKLSAg
ICBpZiAoJkpTVGVzdEV2ZW50Q29uc3RydWN0b3I6OnZpc2l0T3V0cHV0Q29uc3RyYWludHMgIT0g
JkpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzKQorICAgIHZvaWQgKCpteVZpc2l0
T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rl
c3RFdmVudENvbnN0cnVjdG9yOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOworICAgIHZvaWQgKCpq
c0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRv
ciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAgaWYgKG15Vmlz
aXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKICAgICAg
ICAgY2xpZW50RGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKIElH
Tk9SRV9XQVJOSU5HU19FTkQKIElHTk9SRV9XQVJOSU5HU19FTkQKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFdmVudFRhcmdldC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV2
ZW50VGFyZ2V0LmNwcAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV2ZW50VGFyZ2V0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzksNiArMzksNyBAQAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTQ0lubGluZXMuaD4K
ICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0Rlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlw
ZS5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1Byb3BlcnR5TmFtZUFycmF5Lmg+CisjaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvU2xvdFZpc2l0b3JNYWNyb3MuaD4KICNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9TdWJzcGFjZUlubGluZXMuaD4KICNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CiAj
aW5jbHVkZSA8d3RmL1BvaW50ZXJQcmVwYXJhdGlvbnMuaD4KQEAgLTI2OSw3ICsyNzAsOSBAQCBK
U0M6Oklzb1N1YnNwYWNlKiBKU1Rlc3RFdmVudFRhcmdldDo6c3ViCiAgICAgYXV0byogc3BhY2Ug
PSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RFdmVudFRhcmdldC5nZXQoKTsKIElHTk9SRV9XQVJO
SU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCiBJR05PUkVfV0FSTklOR1NfQkVHSU4oInRh
dXRvbG9naWNhbC1jb21wYXJlIikKLSAgICBpZiAoJkpTVGVzdEV2ZW50VGFyZ2V0Ojp2aXNpdE91
dHB1dENvbnN0cmFpbnRzICE9ICZKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50cykK
KyAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpT
bG90VmlzaXRvciYpID0gSlNUZXN0RXZlbnRUYXJnZXQ6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7
CisgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBK
U0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsK
KyAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25z
dHJhaW50KQogICAgICAgICBjbGllbnREYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBl
bmQoc3BhY2UpOwogSUdOT1JFX1dBUk5JTkdTX0VORAogSUdOT1JFX1dBUk5JTkdTX0VORApJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV4Y2VwdGlv
bi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdEV4Y2VwdGlvbi5jcHAJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFeGNlcHRpb24uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSGVhcEFu
YWx5emVyLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNDSW5saW5lcy5oPgogI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL0pTRGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLmg+Cisj
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvU2xvdFZpc2l0b3JNYWNyb3MuaD4KICNpbmNsdWRlIDxK
YXZhU2NyaXB0Q29yZS9TdWJzcGFjZUlubGluZXMuaD4KICNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+
CiAjaW5jbHVkZSA8d3RmL1BvaW50ZXJQcmVwYXJhdGlvbnMuaD4KQEAgLTE5NCw3ICsxOTUsOSBA
QCBKU0M6Oklzb1N1YnNwYWNlKiBKU1Rlc3RFeGNlcHRpb246OnN1YnNwCiAgICAgYXV0byogc3Bh
Y2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RFeGNlcHRpb24uZ2V0KCk7CiBJR05PUkVfV0FS
TklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQogSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0
YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgaWYgKCZKU1Rlc3RFeGNlcHRpb246OnZpc2l0T3V0
cHV0Q29uc3RyYWludHMgIT0gJkpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzKQor
ICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNs
b3RWaXNpdG9yJikgPSBKU1Rlc3RFeGNlcHRpb246OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Cisg
ICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6
OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKKyAg
ICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJh
aW50KQogICAgICAgICBjbGllbnREYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQo
c3BhY2UpOwogSUdOT1JFX1dBUk5JTkdTX0VORAogSUdOT1JFX1dBUk5JTkdTX0VORApAQCAtMjEw
LDcgKzIxMyw3IEBAIHZvaWQgSlNUZXN0RXhjZXB0aW9uOjphbmFseXplSGVhcChKU0NlbGwKICAg
ICBCYXNlOjphbmFseXplSGVhcChjZWxsLCBhbmFseXplcik7CiB9CiAKLWJvb2wgSlNUZXN0RXhj
ZXB0aW9uT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6
VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgU2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIq
KiByZWFzb24pCitib29sIEpTVGVzdEV4Y2VwdGlvbk93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFx
dWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIEFic3RyYWN0
U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCiB7CiAgICAgVU5VU0VE
X1BBUkFNKGhhbmRsZSk7CiAgICAgVU5VU0VEX1BBUkFNKHZpc2l0b3IpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV4Y2VwdGlvbi5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RF
eGNlcHRpb24uaAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV4Y2VwdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC02Niw3
ICs2Niw3IEBAIHByb3RlY3RlZDoKIAogY2xhc3MgSlNUZXN0RXhjZXB0aW9uT3duZXIgZmluYWwg
OiBwdWJsaWMgSlNDOjpXZWFrSGFuZGxlT3duZXIgewogcHVibGljOgotICAgIGJvb2wgaXNSZWFj
aGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29u
dGV4dCwgSlNDOjpTbG90VmlzaXRvciYsIGNvbnN0IGNoYXIqKikgZmluYWw7CisgICAgYm9vbCBp
c1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lk
KiBjb250ZXh0LCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImLCBjb25zdCBjaGFyKiopIGZpbmFs
OwogICAgIHZvaWQgZmluYWxpemUoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29u
dGV4dCkgZmluYWw7CiB9OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEdlbmVyYXRlSXNSZWFj
aGFibGUuY3BwCShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9IZWFwQW5hbHl6
ZXIuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0NJbmxpbmVzLmg+CiAjaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvSlNEZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUuaD4KKyNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9TbG90VmlzaXRvck1hY3Jvcy5oPgogI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL1N1YnNwYWNlSW5saW5lcy5oPgogI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KICNp
bmNsdWRlIDx3dGYvUG9pbnRlclByZXBhcmF0aW9ucy5oPgpAQCAtMjA0LDcgKzIwNSw5IEBAIEpT
Qzo6SXNvU3Vic3BhY2UqIEpTVGVzdEdlbmVyYXRlSXNSZWFjaGEKICAgICBhdXRvKiBzcGFjZSA9
IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdEdlbmVyYXRlSXNSZWFjaGFibGUuZ2V0KCk7CiBJR05P
UkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQogSUdOT1JFX1dBUk5JTkdTX0JF
R0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgaWYgKCZKU1Rlc3RHZW5lcmF0ZUlzUmVh
Y2hhYmxlOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzICE9ICZKU0M6OkpTQ2VsbDo6dmlzaXRPdXRw
dXRDb25zdHJhaW50cykKKyAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6
SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZTo6
dmlzaXRPdXRwdXRDb25zdHJhaW50czsKKyAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25z
dHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2
aXNpdE91dHB1dENvbnN0cmFpbnRzOworICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAh
PSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCiAgICAgICAgIGNsaWVudERhdGEub3V0cHV0
Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7CiBJR05PUkVfV0FSTklOR1NfRU5ECiBJ
R05PUkVfV0FSTklOR1NfRU5ECkBAIC0yMjAsNyArMjIzLDcgQEAgdm9pZCBKU1Rlc3RHZW5lcmF0
ZUlzUmVhY2hhYmxlOjphbmFseXplSAogICAgIEJhc2U6OmFuYWx5emVIZWFwKGNlbGwsIGFuYWx5
emVyKTsKIH0KIAotYm9vbCBKU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlT3duZXI6OmlzUmVhY2hh
YmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lk
KiwgU2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCitib29sIEpTVGVz
dEdlbmVyYXRlSXNSZWFjaGFibGVPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlND
OjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBBYnN0cmFjdFNsb3RWaXNpdG9y
JiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQogewogICAgIGF1dG8qIGpzVGVzdEdlbmVy
YXRlSXNSZWFjaGFibGUgPSBqc0Nhc3Q8SlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZSo+KGhhbmRs
ZS5zbG90KCktPmFzQ2VsbCgpKTsKICAgICBUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZSogcm9vdCA9
ICZqc1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlLT53cmFwcGVkKCk7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlLmgJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTY1LDcgKzY1LDcgQEAgcHJvdGVjdGVkOgogCiBjbGFzcyBK
U1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlT3duZXIgZmluYWwgOiBwdWJsaWMgSlNDOjpXZWFrSGFu
ZGxlT3duZXIgewogcHVibGljOgotICAgIGJvb2wgaXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMo
SlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCwgSlNDOjpTbG90VmlzaXRv
ciYsIGNvbnN0IGNoYXIqKikgZmluYWw7CisgICAgYm9vbCBpc1JlYWNoYWJsZUZyb21PcGFxdWVS
b290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0LCBKU0M6OkFic3Ry
YWN0U2xvdFZpc2l0b3ImLCBjb25zdCBjaGFyKiopIGZpbmFsOwogICAgIHZvaWQgZmluYWxpemUo
SlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCkgZmluYWw7CiB9OwogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0R2xvYmFs
T2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0R2xvYmFsT2JqZWN0LmNwcAkocmV2aXNpb24gMjczMTE5KQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEdsb2JhbE9iamVjdC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTk5LDYgKzk5LDcgQEAKICNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9IZWFwQW5hbHl6ZXIuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0NJbmxpbmVz
Lmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNEZXN0cnVjdGlibGVPYmplY3RIZWFwQ2Vs
bFR5cGUuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9TbG90VmlzaXRvck1hY3Jvcy5oPgog
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1N1YnNwYWNlSW5saW5lcy5oPgogI2luY2x1ZGUgPHd0
Zi9HZXRQdHIuaD4KICNpbmNsdWRlIDx3dGYvUG9pbnRlclByZXBhcmF0aW9ucy5oPgpAQCAtMjU5
OCw3ICsyNTk5LDkgQEAgSlNDOjpJc29TdWJzcGFjZSogSlNUZXN0R2xvYmFsT2JqZWN0OjpzdQog
ICAgIGF1dG8qIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0R2xvYmFsT2JqZWN0Lmdl
dCgpOwogSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKIElHTk9SRV9X
QVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQotICAgIGlmICgmSlNUZXN0R2xv
YmFsT2JqZWN0Ojp2aXNpdE91dHB1dENvbnN0cmFpbnRzICE9ICZKU0M6OkpTQ2VsbDo6dmlzaXRP
dXRwdXRDb25zdHJhaW50cykKKyAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpT
Qzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0R2xvYmFsT2JqZWN0Ojp2aXNp
dE91dHB1dENvbnN0cmFpbnRzOworICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFp
bnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0
T3V0cHV0Q29uc3RyYWludHM7CisgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpz
Q2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKICAgICAgICAgY2xpZW50RGF0YS5vdXRwdXRDb25z
dHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKIElHTk9SRV9XQVJOSU5HU19FTkQKIElHTk9S
RV9XQVJOSU5HU19FTkQKQEAgLTI2MTQsNyArMjYxNyw3IEBAIHZvaWQgSlNUZXN0R2xvYmFsT2Jq
ZWN0OjphbmFseXplSGVhcChKU0MKICAgICBCYXNlOjphbmFseXplSGVhcChjZWxsLCBhbmFseXpl
cik7CiB9CiAKLWJvb2wgSlNUZXN0R2xvYmFsT2JqZWN0T3duZXI6OmlzUmVhY2hhYmxlRnJvbU9w
YXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgU2xvdFZp
c2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCitib29sIEpTVGVzdEdsb2JhbE9i
amVjdE93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVu
a25vd24+IGhhbmRsZSwgdm9pZCosIEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0
IGNoYXIqKiByZWFzb24pCiB7CiAgICAgVU5VU0VEX1BBUkFNKGhhbmRsZSk7CiAgICAgVU5VU0VE
X1BBUkFNKHZpc2l0b3IpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdEdsb2JhbE9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RHbG9iYWxPYmplY3QuaAkocmV2aXNpb24g
MjczMTE5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dEdsb2JhbE9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC02Nyw3ICs2Nyw3IEBAIHByb3RlY3Rl
ZDoKIAogY2xhc3MgSlNUZXN0R2xvYmFsT2JqZWN0T3duZXIgZmluYWwgOiBwdWJsaWMgSlNDOjpX
ZWFrSGFuZGxlT3duZXIgewogcHVibGljOgotICAgIGJvb2wgaXNSZWFjaGFibGVGcm9tT3BhcXVl
Um9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCwgSlNDOjpTbG90
VmlzaXRvciYsIGNvbnN0IGNoYXIqKikgZmluYWw7CisgICAgYm9vbCBpc1JlYWNoYWJsZUZyb21P
cGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0LCBKU0M6
OkFic3RyYWN0U2xvdFZpc2l0b3ImLCBjb25zdCBjaGFyKiopIGZpbmFsOwogICAgIHZvaWQgZmlu
YWxpemUoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCkgZmluYWw7CiB9
OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
SW5kZXhlZFNldHRlck5vSWRlbnRpZmllci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZp
ZXIuY3BwCShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0SW5kZXhlZFNldHRlck5vSWRlbnRpZmllci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0NJbmxp
bmVzLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNEZXN0cnVjdGlibGVPYmplY3RIZWFw
Q2VsbFR5cGUuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9Qcm9wZXJ0eU5hbWVBcnJheS5o
PgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1Nsb3RWaXNpdG9yTWFjcm9zLmg+CiAjaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvU3Vic3BhY2VJbmxpbmVzLmg+CiAjaW5jbHVkZSA8d3RmL0dldFB0
ci5oPgogI2luY2x1ZGUgPHd0Zi9Qb2ludGVyUHJlcGFyYXRpb25zLmg+CkBAIC0yNjQsNyArMjY1
LDkgQEAgSlNDOjpJc29TdWJzcGFjZSogSlNUZXN0SW5kZXhlZFNldHRlck5vSQogICAgIGF1dG8q
IHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0SW5kZXhlZFNldHRlck5vSWRlbnRpZmll
ci5nZXQoKTsKIElHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCiBJR05P
UkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKLSAgICBpZiAoJkpTVGVz
dEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXI6OnZpc2l0T3V0cHV0Q29uc3RyYWludHMgIT0gJkpT
Qzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzKQorICAgIHZvaWQgKCpteVZpc2l0T3V0
cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3RJ
bmRleGVkU2V0dGVyTm9JZGVudGlmaWVyOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOworICAgIHZv
aWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90
VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAgaWYg
KG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkK
ICAgICAgICAgY2xpZW50RGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNl
KTsKIElHTk9SRV9XQVJOSU5HU19FTkQKIElHTk9SRV9XQVJOSU5HU19FTkQKQEAgLTI4MCw3ICsy
ODMsNyBAQCB2b2lkIEpTVGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXI6OmFuCiAgICAgQmFz
ZTo6YW5hbHl6ZUhlYXAoY2VsbCwgYW5hbHl6ZXIpOwogfQogCi1ib29sIEpTVGVzdEluZGV4ZWRT
ZXR0ZXJOb0lkZW50aWZpZXJPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpI
YW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBTbG90VmlzaXRvciYgdmlzaXRvciwg
Y29uc3QgY2hhcioqIHJlYXNvbikKK2Jvb2wgSlNUZXN0SW5kZXhlZFNldHRlck5vSWRlbnRpZmll
ck93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25v
d24+IGhhbmRsZSwgdm9pZCosIEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNo
YXIqKiByZWFzb24pCiB7CiAgICAgVU5VU0VEX1BBUkFNKGhhbmRsZSk7CiAgICAgVU5VU0VEX1BB
UkFNKHZpc2l0b3IpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW5kZXhlZFNldHRlck5v
SWRlbnRpZmllci5oCShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW5kZXhlZFNldHRlck5vSWRlbnRpZmllci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC03Myw3ICs3Myw3IEBAIHByb3RlY3RlZDoKIAogY2xhc3MgSlNUZXN0SW5k
ZXhlZFNldHRlck5vSWRlbnRpZmllck93bmVyIGZpbmFsIDogcHVibGljIEpTQzo6V2Vha0hhbmRs
ZU93bmVyIHsKIHB1YmxpYzoKLSAgICBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpT
Qzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6U2xvdFZpc2l0b3Im
LCBjb25zdCBjaGFyKiopIGZpbmFsOworICAgIGJvb2wgaXNSZWFjaGFibGVGcm9tT3BhcXVlUm9v
dHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCwgSlNDOjpBYnN0cmFj
dFNsb3RWaXNpdG9yJiwgY29uc3QgY2hhcioqKSBmaW5hbDsKICAgICB2b2lkIGZpbmFsaXplKEpT
Qzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQpIGZpbmFsOwogfTsKIApJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEluZGV4ZWRT
ZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2Vw
dGlvbi5jcHAJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
SlNDSW5saW5lcy5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTRGVzdHJ1Y3RpYmxlT2Jq
ZWN0SGVhcENlbGxUeXBlLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvUHJvcGVydHlOYW1l
QXJyYXkuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9TbG90VmlzaXRvck1hY3Jvcy5oPgog
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1N1YnNwYWNlSW5saW5lcy5oPgogI2luY2x1ZGUgPHd0
Zi9HZXRQdHIuaD4KICNpbmNsdWRlIDx3dGYvUG9pbnRlclByZXBhcmF0aW9ucy5oPgpAQCAtMjY0
LDcgKzI2NSw5IEBAIEpTQzo6SXNvU3Vic3BhY2UqIEpTVGVzdEluZGV4ZWRTZXR0ZXJUaHIKICAg
ICBhdXRvKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdEluZGV4ZWRTZXR0ZXJUaHJv
d2luZ0V4Y2VwdGlvbi5nZXQoKTsKIElHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUt
Y29kZSIpCiBJR05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKLSAg
ICBpZiAoJkpTVGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbjo6dmlzaXRPdXRwdXRD
b25zdHJhaW50cyAhPSAmSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHMpCisgICAg
dm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZp
c2l0b3ImKSA9IEpTVGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbjo6dmlzaXRPdXRw
dXRDb25zdHJhaW50czsKKyAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShK
U0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1
dENvbnN0cmFpbnRzOworICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxW
aXNpdE91dHB1dENvbnN0cmFpbnQpCiAgICAgICAgIGNsaWVudERhdGEub3V0cHV0Q29uc3RyYWlu
dFNwYWNlcygpLmFwcGVuZChzcGFjZSk7CiBJR05PUkVfV0FSTklOR1NfRU5ECiBJR05PUkVfV0FS
TklOR1NfRU5ECkBAIC0yODAsNyArMjgzLDcgQEAgdm9pZCBKU1Rlc3RJbmRleGVkU2V0dGVyVGhy
b3dpbmdFeGNlcHRpbwogICAgIEJhc2U6OmFuYWx5emVIZWFwKGNlbGwsIGFuYWx5emVyKTsKIH0K
IAotYm9vbCBKU1Rlc3RJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb25Pd25lcjo6aXNSZWFj
aGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZv
aWQqLCBTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikKK2Jvb2wgSlNU
ZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9w
YXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgQWJzdHJh
Y3RTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikKIHsKICAgICBVTlVT
RURfUEFSQU0oaGFuZGxlKTsKICAgICBVTlVTRURfUEFSQU0odmlzaXRvcik7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW5kZXhlZFNldHRlclRo
cm93aW5nRXhjZXB0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5oCShy
ZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uLmgJKHdvcmtpbmcgY29weSkK
QEAgLTczLDcgKzczLDcgQEAgcHJvdGVjdGVkOgogCiBjbGFzcyBKU1Rlc3RJbmRleGVkU2V0dGVy
VGhyb3dpbmdFeGNlcHRpb25Pd25lciBmaW5hbCA6IHB1YmxpYyBKU0M6OldlYWtIYW5kbGVPd25l
ciB7CiBwdWJsaWM6Ci0gICAgYm9vbCBpc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6Okhh
bmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0LCBKU0M6OlNsb3RWaXNpdG9yJiwgY29u
c3QgY2hhcioqKSBmaW5hbDsKKyAgICBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpT
Qzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6QWJzdHJhY3RTbG90
VmlzaXRvciYsIGNvbnN0IGNoYXIqKikgZmluYWw7CiAgICAgdm9pZCBmaW5hbGl6ZShKU0M6Okhh
bmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0KSBmaW5hbDsKIH07CiAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbmRleGVkU2V0dGVy
V2l0aElkZW50aWZpZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIuY3BwCShy
ZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzcsNiArMzcsNyBAQAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTQ0lubGluZXMuaD4K
ICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0Rlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlw
ZS5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1Byb3BlcnR5TmFtZUFycmF5Lmg+CisjaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvU2xvdFZpc2l0b3JNYWNyb3MuaD4KICNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9TdWJzcGFjZUlubGluZXMuaD4KICNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CiAj
aW5jbHVkZSA8d3RmL1BvaW50ZXJQcmVwYXJhdGlvbnMuaD4KQEAgLTMwMSw3ICszMDIsOSBAQCBK
U0M6Oklzb1N1YnNwYWNlKiBKU1Rlc3RJbmRleGVkU2V0dGVyV2l0CiAgICAgYXV0byogc3BhY2Ug
PSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIuZ2V0
KCk7CiBJR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQogSUdOT1JFX1dB
Uk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgaWYgKCZKU1Rlc3RJbmRl
eGVkU2V0dGVyV2l0aElkZW50aWZpZXI6OnZpc2l0T3V0cHV0Q29uc3RyYWludHMgIT0gJkpTQzo6
SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzKQorICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0
Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3RJbmRl
eGVkU2V0dGVyV2l0aElkZW50aWZpZXI6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAgdm9p
ZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RW
aXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKKyAgICBpZiAo
bXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQog
ICAgICAgICBjbGllbnREYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2Up
OwogSUdOT1JFX1dBUk5JTkdTX0VORAogSUdOT1JFX1dBUk5JTkdTX0VORApAQCAtMzE3LDcgKzMy
MCw3IEBAIHZvaWQgSlNUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyOjoKICAgICBCYXNl
OjphbmFseXplSGVhcChjZWxsLCBhbmFseXplcik7CiB9CiAKLWJvb2wgSlNUZXN0SW5kZXhlZFNl
dHRlcldpdGhJZGVudGlmaWVyT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6
SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgU2xvdFZpc2l0b3ImIHZpc2l0b3Is
IGNvbnN0IGNoYXIqKiByZWFzb24pCitib29sIEpTVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRp
Zmllck93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVu
a25vd24+IGhhbmRsZSwgdm9pZCosIEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0
IGNoYXIqKiByZWFzb24pCiB7CiAgICAgVU5VU0VEX1BBUkFNKGhhbmRsZSk7CiAgICAgVU5VU0VE
X1BBUkFNKHZpc2l0b3IpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbmRleGVkU2V0
dGVyV2l0aElkZW50aWZpZXIuaAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmll
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC03Myw3ICs3Myw3IEBAIHByb3RlY3RlZDoKIAogY2xhc3Mg
SlNUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyT3duZXIgZmluYWwgOiBwdWJsaWMgSlND
OjpXZWFrSGFuZGxlT3duZXIgewogcHVibGljOgotICAgIGJvb2wgaXNSZWFjaGFibGVGcm9tT3Bh
cXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCwgSlNDOjpT
bG90VmlzaXRvciYsIGNvbnN0IGNoYXIqKikgZmluYWw7CisgICAgYm9vbCBpc1JlYWNoYWJsZUZy
b21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0LCBK
U0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImLCBjb25zdCBjaGFyKiopIGZpbmFsOwogICAgIHZvaWQg
ZmluYWxpemUoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCkgZmluYWw7
CiB9OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0SW50ZXJmYWNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW50ZXJmYWNlLmNwcAkocmV2aXNpb24gMjczMTE5KQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEludGVyZmFjZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDYgKzQ2LDcgQEAKICNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9IZWFwQW5hbHl6ZXIuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0NJbmxpbmVz
Lmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNEZXN0cnVjdGlibGVPYmplY3RIZWFwQ2Vs
bFR5cGUuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9TbG90VmlzaXRvck1hY3Jvcy5oPgog
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1N1YnNwYWNlSW5saW5lcy5oPgogI2luY2x1ZGUgPHd0
Zi9HZXRQdHIuaD4KICNpbmNsdWRlIDx3dGYvUG9pbnRlclByZXBhcmF0aW9ucy5oPgpAQCAtMTEy
Miw3ICsxMTIzLDkgQEAgcHVibGljOgogICAgICAgICBhdXRvKiBzcGFjZSA9IHNwYWNlcy5tX3N1
YnNwYWNlRm9yVGVzdEludGVyZmFjZUl0ZXJhdG9yLmdldCgpOwogSUdOT1JFX1dBUk5JTkdTX0JF
R0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKIElHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dp
Y2FsLWNvbXBhcmUiKQotICAgICAgICBpZiAoJlRlc3RJbnRlcmZhY2VJdGVyYXRvcjo6dmlzaXRP
dXRwdXRDb25zdHJhaW50cyAhPSAmSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHMp
CisgICAgICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBK
U0M6OlNsb3RWaXNpdG9yJikgPSBUZXN0SW50ZXJmYWNlSXRlcmF0b3I6OnZpc2l0T3V0cHV0Q29u
c3RyYWludHM7CisgICAgICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpT
Qzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0
Q29uc3RyYWludHM7CisgICAgICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0Nl
bGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCiAgICAgICAgICAgICBjbGllbnREYXRhLm91dHB1dENv
bnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOwogSUdOT1JFX1dBUk5JTkdTX0VORAogSUdO
T1JFX1dBUk5JTkdTX0VORApAQCAtMTIxMiw3ICsxMjE1LDkgQEAgSlNDOjpJc29TdWJzcGFjZSog
SlNUZXN0SW50ZXJmYWNlOjpzdWJzcAogICAgIGF1dG8qIHNwYWNlID0gc3BhY2VzLm1fc3Vic3Bh
Y2VGb3JUZXN0SW50ZXJmYWNlLmdldCgpOwogSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNo
YWJsZS1jb2RlIikKIElHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUi
KQotICAgIGlmICgmSlNUZXN0SW50ZXJmYWNlOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzICE9ICZK
U0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50cykKKyAgICB2b2lkICgqbXlWaXNpdE91
dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0
SW50ZXJmYWNlOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOworICAgIHZvaWQgKCpqc0NlbGxWaXNp
dE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlND
OjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAgaWYgKG15VmlzaXRPdXRwdXRD
b25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKICAgICAgICAgY2xpZW50
RGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKIElHTk9SRV9XQVJO
SU5HU19FTkQKIElHTk9SRV9XQVJOSU5HU19FTkQKQEAgLTEyMjgsNyArMTIzMyw3IEBAIHZvaWQg
SlNUZXN0SW50ZXJmYWNlOjphbmFseXplSGVhcChKU0NlbGwKICAgICBCYXNlOjphbmFseXplSGVh
cChjZWxsLCBhbmFseXplcik7CiB9CiAKLWJvb2wgSlNUZXN0SW50ZXJmYWNlT3duZXI6OmlzUmVh
Y2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2
b2lkKiwgU2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCitib29sIEpT
VGVzdEludGVyZmFjZU93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRs
ZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0
b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCiB7CiAgICAgYXV0byoganNUZXN0SW50ZXJmYWNlID0g
anNDYXN0PEpTVGVzdEludGVyZmFjZSo+KGhhbmRsZS5zbG90KCktPmFzQ2VsbCgpKTsKICAgICBh
dXRvJiB3cmFwcGVkID0ganNUZXN0SW50ZXJmYWNlLT53cmFwcGVkKCk7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW50ZXJmYWNlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdElu
dGVyZmFjZS5oCShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW50ZXJmYWNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTkxLDcg
KzkxLDcgQEAgcHJvdGVjdGVkOgogCiBjbGFzcyBXRUJDT1JFX0VYUE9SVCBKU1Rlc3RJbnRlcmZh
Y2VPd25lciBmaW5hbCA6IHB1YmxpYyBKU0M6OldlYWtIYW5kbGVPd25lciB7CiBwdWJsaWM6Ci0g
ICAgYm9vbCBpc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25v
d24+LCB2b2lkKiBjb250ZXh0LCBKU0M6OlNsb3RWaXNpdG9yJiwgY29uc3QgY2hhcioqKSBmaW5h
bDsKKyAgICBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6
VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYsIGNvbnN0
IGNoYXIqKikgZmluYWw7CiAgICAgdm9pZCBmaW5hbGl6ZShKU0M6OkhhbmRsZTxKU0M6OlVua25v
d24+LCB2b2lkKiBjb250ZXh0KSBmaW5hbDsKIH07CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbnRlcmZhY2VMZWFkaW5nVW5kZXJzY29yZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdEludGVyZmFjZUxlYWRpbmdVbmRlcnNjb3JlLmNwcAkocmV2aXNpb24gMjczMTE5KQor
KysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEludGVyZmFj
ZUxlYWRpbmdVbmRlcnNjb3JlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsNiArMzUsNyBAQAog
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0hlYXBBbmFseXplci5oPgogI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL0pTQ0lubGluZXMuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0Rlc3Ry
dWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZS5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1Ns
b3RWaXNpdG9yTWFjcm9zLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvU3Vic3BhY2VJbmxp
bmVzLmg+CiAjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgogI2luY2x1ZGUgPHd0Zi9Qb2ludGVyUHJl
cGFyYXRpb25zLmg+CkBAIC0xOTQsNyArMTk1LDkgQEAgSlNDOjpJc29TdWJzcGFjZSogSlNUZXN0
SW50ZXJmYWNlTGVhZGluZwogICAgIGF1dG8qIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JU
ZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmUuZ2V0KCk7CiBJR05PUkVfV0FSTklOR1NfQkVH
SU4oInVucmVhY2hhYmxlLWNvZGUiKQogSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2lj
YWwtY29tcGFyZSIpCi0gICAgaWYgKCZKU1Rlc3RJbnRlcmZhY2VMZWFkaW5nVW5kZXJzY29yZTo6
dmlzaXRPdXRwdXRDb25zdHJhaW50cyAhPSAmSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3Ry
YWludHMpCisgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCos
IEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdEludGVyZmFjZUxlYWRpbmdVbmRlcnNjb3JlOjp2
aXNpdE91dHB1dENvbnN0cmFpbnRzOworICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0
cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZp
c2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9
IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKICAgICAgICAgY2xpZW50RGF0YS5vdXRwdXRD
b25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKIElHTk9SRV9XQVJOSU5HU19FTkQKIElH
Tk9SRV9XQVJOSU5HU19FTkQKQEAgLTIxMCw3ICsyMTMsNyBAQCB2b2lkIEpTVGVzdEludGVyZmFj
ZUxlYWRpbmdVbmRlcnNjb3JlOjphCiAgICAgQmFzZTo6YW5hbHl6ZUhlYXAoY2VsbCwgYW5hbHl6
ZXIpOwogfQogCi1ib29sIEpTVGVzdEludGVyZmFjZUxlYWRpbmdVbmRlcnNjb3JlT3duZXI6Omlz
UmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxl
LCB2b2lkKiwgU2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCitib29s
IEpTVGVzdEludGVyZmFjZUxlYWRpbmdVbmRlcnNjb3JlT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9w
YXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgQWJzdHJh
Y3RTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikKIHsKICAgICBVTlVT
RURfUEFSQU0oaGFuZGxlKTsKICAgICBVTlVTRURfUEFSQU0odmlzaXRvcik7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW50ZXJmYWNlTGVhZGlu
Z1VuZGVyc2NvcmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmUuaAkocmV2aXNpb24g
MjczMTE5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dEludGVyZmFjZUxlYWRpbmdVbmRlcnNjb3JlLmgJKHdvcmtpbmcgY29weSkKQEAgLTY1LDcgKzY1
LDcgQEAgcHJvdGVjdGVkOgogCiBjbGFzcyBKU1Rlc3RJbnRlcmZhY2VMZWFkaW5nVW5kZXJzY29y
ZU93bmVyIGZpbmFsIDogcHVibGljIEpTQzo6V2Vha0hhbmRsZU93bmVyIHsKIHB1YmxpYzoKLSAg
ICBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93
bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6U2xvdFZpc2l0b3ImLCBjb25zdCBjaGFyKiopIGZpbmFs
OworICAgIGJvb2wgaXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpV
bmtub3duPiwgdm9pZCogY29udGV4dCwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiwgY29uc3Qg
Y2hhcioqKSBmaW5hbDsKICAgICB2b2lkIGZpbmFsaXplKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93
bj4sIHZvaWQqIGNvbnRleHQpIGZpbmFsOwogfTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEl0ZXJhYmxlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SXRlcmFibGUuY3Bw
CShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0SXRlcmFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw2ICszOCw3IEBA
CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSGVhcEFuYWx5emVyLmg+CiAjaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvSlNDSW5saW5lcy5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTRGVz
dHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
U2xvdFZpc2l0b3JNYWNyb3MuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9TdWJzcGFjZUlu
bGluZXMuaD4KICNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CiAjaW5jbHVkZSA8d3RmL1BvaW50ZXJQ
cmVwYXJhdGlvbnMuaD4KQEAgLTIwOCw3ICsyMDksOSBAQCBwdWJsaWM6CiAgICAgICAgIGF1dG8q
IHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0SXRlcmFibGVJdGVyYXRvci5nZXQoKTsK
IElHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCiBJR05PUkVfV0FSTklO
R1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKLSAgICAgICAgaWYgKCZUZXN0SXRlcmFi
bGVJdGVyYXRvcjo6dmlzaXRPdXRwdXRDb25zdHJhaW50cyAhPSAmSlNDOjpKU0NlbGw6OnZpc2l0
T3V0cHV0Q29uc3RyYWludHMpCisgICAgICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWlu
dCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBUZXN0SXRlcmFibGVJdGVyYXRv
cjo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKKyAgICAgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0
cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpT
Q2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKKyAgICAgICAgaWYgKG15VmlzaXRPdXRwdXRD
b25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKICAgICAgICAgICAgIGNs
aWVudERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7CiBJR05PUkVf
V0FSTklOR1NfRU5ECiBJR05PUkVfV0FSTklOR1NfRU5ECkBAIC0yOTgsNyArMzAxLDkgQEAgSlND
OjpJc29TdWJzcGFjZSogSlNUZXN0SXRlcmFibGU6OnN1YnNwYQogICAgIGF1dG8qIHNwYWNlID0g
c3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0SXRlcmFibGUuZ2V0KCk7CiBJR05PUkVfV0FSTklOR1Nf
QkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQogSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xv
Z2ljYWwtY29tcGFyZSIpCi0gICAgaWYgKCZKU1Rlc3RJdGVyYWJsZTo6dmlzaXRPdXRwdXRDb25z
dHJhaW50cyAhPSAmSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHMpCisgICAgdm9p
ZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0
b3ImKSA9IEpTVGVzdEl0ZXJhYmxlOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOworICAgIHZvaWQg
KCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90Vmlz
aXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAgaWYgKG15
VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKICAg
ICAgICAgY2xpZW50RGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsK
IElHTk9SRV9XQVJOSU5HU19FTkQKIElHTk9SRV9XQVJOSU5HU19FTkQKQEAgLTMxNCw3ICszMTks
NyBAQCB2b2lkIEpTVGVzdEl0ZXJhYmxlOjphbmFseXplSGVhcChKU0NlbGwqCiAgICAgQmFzZTo6
YW5hbHl6ZUhlYXAoY2VsbCwgYW5hbHl6ZXIpOwogfQogCi1ib29sIEpTVGVzdEl0ZXJhYmxlT3du
ZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4g
aGFuZGxlLCB2b2lkKiwgU2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24p
Citib29sIEpTVGVzdEl0ZXJhYmxlT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpT
Qzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgQWJzdHJhY3RTbG90VmlzaXRv
ciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikKIHsKICAgICBVTlVTRURfUEFSQU0oaGFu
ZGxlKTsKICAgICBVTlVTRURfUEFSQU0odmlzaXRvcik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SXRlcmFibGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SXRlcmFibGUuaAko
cmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdEl0ZXJhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTY1LDcgKzY1LDcgQEAgcHJv
dGVjdGVkOgogCiBjbGFzcyBKU1Rlc3RJdGVyYWJsZU93bmVyIGZpbmFsIDogcHVibGljIEpTQzo6
V2Vha0hhbmRsZU93bmVyIHsKIHB1YmxpYzoKLSAgICBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1
ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6U2xv
dFZpc2l0b3ImLCBjb25zdCBjaGFyKiopIGZpbmFsOworICAgIGJvb2wgaXNSZWFjaGFibGVGcm9t
T3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCwgSlND
OjpBYnN0cmFjdFNsb3RWaXNpdG9yJiwgY29uc3QgY2hhcioqKSBmaW5hbDsKICAgICB2b2lkIGZp
bmFsaXplKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQpIGZpbmFsOwog
fTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dEpTQnVpbHRpbkNvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3IuY3BwCShy
ZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2
ICszMyw3IEBACiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvRnVuY3Rpb25Qcm90b3R5cGUuaD4K
ICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0NJbmxpbmVzLmg+CiAjaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvSlNEZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUuaD4KKyNpbmNsdWRlIDxK
YXZhU2NyaXB0Q29yZS9TbG90VmlzaXRvck1hY3Jvcy5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL1N1YnNwYWNlSW5saW5lcy5oPgogI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KICNpbmNsdWRl
IDx3dGYvUG9pbnRlclByZXBhcmF0aW9ucy5oPgpAQCAtMjQyLDcgKzI0Myw5IEBAIEpTQzo6SXNv
U3Vic3BhY2UqIEpTVGVzdEpTQnVpbHRpbkNvbnN0cnUKICAgICBhdXRvKiBzcGFjZSA9IHNwYWNl
cy5tX3N1YnNwYWNlRm9yVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yLmdldCgpOwogSUdOT1JFX1dB
Uk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKIElHTk9SRV9XQVJOSU5HU19CRUdJTigi
dGF1dG9sb2dpY2FsLWNvbXBhcmUiKQotICAgIGlmICgmSlNUZXN0SlNCdWlsdGluQ29uc3RydWN0
b3I6OnZpc2l0T3V0cHV0Q29uc3RyYWludHMgIT0gJkpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENv
bnN0cmFpbnRzKQorICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0Nl
bGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rvcjo6dmlz
aXRPdXRwdXRDb25zdHJhaW50czsKKyAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJh
aW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNp
dE91dHB1dENvbnN0cmFpbnRzOworICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBq
c0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCiAgICAgICAgIGNsaWVudERhdGEub3V0cHV0Q29u
c3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7CiBJR05PUkVfV0FSTklOR1NfRU5ECiBJR05P
UkVfV0FSTklOR1NfRU5ECkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0TGVnYWN5RmFjdG9yeUZ1bmN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TGVnYWN5RmFjdG9yeUZ1
bmN0aW9uLmNwcAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdExlZ2FjeUZhY3RvcnlGdW5jdGlvbi5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM3LDYgKzM3LDcgQEAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9IZWFwQW5h
bHl6ZXIuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0NJbmxpbmVzLmg+CiAjaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvSlNEZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUuaD4KKyNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9TbG90VmlzaXRvck1hY3Jvcy5oPgogI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL1N1YnNwYWNlSW5saW5lcy5oPgogI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4K
ICNpbmNsdWRlIDx3dGYvUG9pbnRlclByZXBhcmF0aW9ucy5oPgpAQCAtMjMwLDcgKzIzMSw5IEBA
IEpTQzo6SXNvU3Vic3BhY2UqIEpTVGVzdExlZ2FjeUZhY3RvcnlGdW4KICAgICBhdXRvKiBzcGFj
ZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdExlZ2FjeUZhY3RvcnlGdW5jdGlvbi5nZXQoKTsK
IElHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCiBJR05PUkVfV0FSTklO
R1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKLSAgICBpZiAoJkpTVGVzdExlZ2FjeUZh
Y3RvcnlGdW5jdGlvbjo6dmlzaXRPdXRwdXRDb25zdHJhaW50cyAhPSAmSlNDOjpKU0NlbGw6OnZp
c2l0T3V0cHV0Q29uc3RyYWludHMpCisgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50
KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdExlZ2FjeUZhY3RvcnlG
dW5jdGlvbjo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKKyAgICB2b2lkICgqanNDZWxsVmlzaXRP
dXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6
SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOworICAgIGlmIChteVZpc2l0T3V0cHV0Q29u
c3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCiAgICAgICAgIGNsaWVudERh
dGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7CiBJR05PUkVfV0FSTklO
R1NfRU5ECiBJR05PUkVfV0FSTklOR1NfRU5ECkBAIC0yNDYsNyArMjQ5LDcgQEAgdm9pZCBKU1Rl
c3RMZWdhY3lGYWN0b3J5RnVuY3Rpb246OmFuYWx5egogICAgIEJhc2U6OmFuYWx5emVIZWFwKGNl
bGwsIGFuYWx5emVyKTsKIH0KIAotYm9vbCBKU1Rlc3RMZWdhY3lGYWN0b3J5RnVuY3Rpb25Pd25l
cjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBo
YW5kbGUsIHZvaWQqLCBTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikK
K2Jvb2wgSlNUZXN0TGVnYWN5RmFjdG9yeUZ1bmN0aW9uT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9w
YXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgQWJzdHJh
Y3RTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikKIHsKICAgICBhdXRv
KiBqc1Rlc3RMZWdhY3lGYWN0b3J5RnVuY3Rpb24gPSBqc0Nhc3Q8SlNUZXN0TGVnYWN5RmFjdG9y
eUZ1bmN0aW9uKj4oaGFuZGxlLnNsb3QoKS0+YXNDZWxsKCkpOwogICAgIGF1dG8mIHdyYXBwZWQg
PSBqc1Rlc3RMZWdhY3lGYWN0b3J5RnVuY3Rpb24tPndyYXBwZWQoKTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RMZWdhY3lGYWN0b3J5RnVuY3Rp
b24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0TGVnYWN5RmFjdG9yeUZ1bmN0aW9uLmgJKHJldmlzaW9uIDI3MzExOSkKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RMZWdhY3lGYWN0b3J5
RnVuY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtNjYsNyArNjYsNyBAQCBwcm90ZWN0ZWQ6CiAK
IGNsYXNzIEpTVGVzdExlZ2FjeUZhY3RvcnlGdW5jdGlvbk93bmVyIGZpbmFsIDogcHVibGljIEpT
Qzo6V2Vha0hhbmRsZU93bmVyIHsKIHB1YmxpYzoKLSAgICBib29sIGlzUmVhY2hhYmxlRnJvbU9w
YXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6
U2xvdFZpc2l0b3ImLCBjb25zdCBjaGFyKiopIGZpbmFsOworICAgIGJvb2wgaXNSZWFjaGFibGVG
cm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCwg
SlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiwgY29uc3QgY2hhcioqKSBmaW5hbDsKICAgICB2b2lk
IGZpbmFsaXplKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQpIGZpbmFs
OwogfTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdExlZ2FjeU5vSW50ZXJmYWNlT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TGVnYWN5Tm9JbnRlcmZhY2VPYmpl
Y3QuY3BwCShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0TGVnYWN5Tm9JbnRlcmZhY2VPYmplY3QuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00MSw2ICs0MSw3IEBACiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSGVhcEFuYWx5
emVyLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNDSW5saW5lcy5oPgogI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL0pTRGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLmg+CisjaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvU2xvdFZpc2l0b3JNYWNyb3MuaD4KICNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9TdWJzcGFjZUlubGluZXMuaD4KICNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CiAj
aW5jbHVkZSA8d3RmL1BvaW50ZXJQcmVwYXJhdGlvbnMuaD4KQEAgLTM4MSw3ICszODIsOSBAQCBK
U0M6Oklzb1N1YnNwYWNlKiBKU1Rlc3RMZWdhY3lOb0ludGVyZmFjCiAgICAgYXV0byogc3BhY2Ug
PSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RMZWdhY3lOb0ludGVyZmFjZU9iamVjdC5nZXQoKTsK
IElHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCiBJR05PUkVfV0FSTklO
R1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKLSAgICBpZiAoJkpTVGVzdExlZ2FjeU5v
SW50ZXJmYWNlT2JqZWN0Ojp2aXNpdE91dHB1dENvbnN0cmFpbnRzICE9ICZKU0M6OkpTQ2VsbDo6
dmlzaXRPdXRwdXRDb25zdHJhaW50cykKKyAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFp
bnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0TGVnYWN5Tm9JbnRl
cmZhY2VPYmplY3Q6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAgdm9pZCAoKmpzQ2VsbFZp
c2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBK
U0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKKyAgICBpZiAobXlWaXNpdE91dHB1
dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQogICAgICAgICBjbGll
bnREYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOwogSUdOT1JFX1dB
Uk5JTkdTX0VORAogSUdOT1JFX1dBUk5JTkdTX0VORApAQCAtMzk3LDcgKzQwMCw3IEBAIHZvaWQg
SlNUZXN0TGVnYWN5Tm9JbnRlcmZhY2VPYmplY3Q6OmFuYWwKICAgICBCYXNlOjphbmFseXplSGVh
cChjZWxsLCBhbmFseXplcik7CiB9CiAKLWJvb2wgSlNUZXN0TGVnYWN5Tm9JbnRlcmZhY2VPYmpl
Y3RPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtu
b3duPiBoYW5kbGUsIHZvaWQqLCBTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJl
YXNvbikKK2Jvb2wgSlNUZXN0TGVnYWN5Tm9JbnRlcmZhY2VPYmplY3RPd25lcjo6aXNSZWFjaGFi
bGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQq
LCBBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQogewog
ICAgIFVOVVNFRF9QQVJBTShoYW5kbGUpOwogICAgIFVOVVNFRF9QQVJBTSh2aXNpdG9yKTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RMZWdhY3lO
b0ludGVyZmFjZU9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RMZWdhY3lOb0ludGVyZmFjZU9iamVjdC5oCShyZXZpc2lv
biAyNzMxMTkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0TGVnYWN5Tm9JbnRlcmZhY2VPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtNzMsNyArNzMs
NyBAQCBwcm90ZWN0ZWQ6CiAKIGNsYXNzIEpTVGVzdExlZ2FjeU5vSW50ZXJmYWNlT2JqZWN0T3du
ZXIgZmluYWwgOiBwdWJsaWMgSlNDOjpXZWFrSGFuZGxlT3duZXIgewogcHVibGljOgotICAgIGJv
b2wgaXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwg
dm9pZCogY29udGV4dCwgSlNDOjpTbG90VmlzaXRvciYsIGNvbnN0IGNoYXIqKikgZmluYWw7Cisg
ICAgYm9vbCBpc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25v
d24+LCB2b2lkKiBjb250ZXh0LCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImLCBjb25zdCBjaGFy
KiopIGZpbmFsOwogICAgIHZvaWQgZmluYWxpemUoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwg
dm9pZCogY29udGV4dCkgZmluYWw7CiB9OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TGVnYWN5T3ZlcnJpZGVCdWlsdElucy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdExl
Z2FjeU92ZXJyaWRlQnVpbHRJbnMuY3BwCShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TGVnYWN5T3ZlcnJpZGVCdWlsdElu
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDYgKzM5LDcgQEAKICNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9IZWFwQW5hbHl6ZXIuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0NJbmxp
bmVzLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNEZXN0cnVjdGlibGVPYmplY3RIZWFw
Q2VsbFR5cGUuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9TbG90VmlzaXRvck1hY3Jvcy5o
PgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1N1YnNwYWNlSW5saW5lcy5oPgogI2luY2x1ZGUg
PHd0Zi9HZXRQdHIuaD4KICNpbmNsdWRlIDx3dGYvUG9pbnRlclByZXBhcmF0aW9ucy5oPgpAQCAt
MjU4LDcgKzI1OSw5IEBAIEpTQzo6SXNvU3Vic3BhY2UqIEpTVGVzdExlZ2FjeU92ZXJyaWRlQnUK
ICAgICBhdXRvKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdExlZ2FjeU92ZXJyaWRl
QnVpbHRJbnMuZ2V0KCk7CiBJR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUi
KQogSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgaWYg
KCZKU1Rlc3RMZWdhY3lPdmVycmlkZUJ1aWx0SW5zOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzICE9
ICZKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50cykKKyAgICB2b2lkICgqbXlWaXNp
dE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNU
ZXN0TGVnYWN5T3ZlcnJpZGVCdWlsdEluczo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKKyAgICB2
b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xv
dFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOworICAgIGlm
IChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQp
CiAgICAgICAgIGNsaWVudERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFj
ZSk7CiBJR05PUkVfV0FSTklOR1NfRU5ECiBJR05PUkVfV0FSTklOR1NfRU5ECkBAIC0yNzQsNyAr
Mjc3LDcgQEAgdm9pZCBKU1Rlc3RMZWdhY3lPdmVycmlkZUJ1aWx0SW5zOjphbmFseQogICAgIEJh
c2U6OmFuYWx5emVIZWFwKGNlbGwsIGFuYWx5emVyKTsKIH0KIAotYm9vbCBKU1Rlc3RMZWdhY3lP
dmVycmlkZUJ1aWx0SW5zT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFu
ZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgU2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNv
bnN0IGNoYXIqKiByZWFzb24pCitib29sIEpTVGVzdExlZ2FjeU92ZXJyaWRlQnVpbHRJbnNPd25l
cjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBo
YW5kbGUsIHZvaWQqLCBBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiog
cmVhc29uKQogewogICAgIFVOVVNFRF9QQVJBTShoYW5kbGUpOwogICAgIFVOVVNFRF9QQVJBTSh2
aXNpdG9yKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RMZWdhY3lPdmVycmlkZUJ1aWx0SW5zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMu
aAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMuaAkod29ya2luZyBjb3B5KQpAQCAt
NzAsNyArNzAsNyBAQCBwcm90ZWN0ZWQ6CiAKIGNsYXNzIEpTVGVzdExlZ2FjeU92ZXJyaWRlQnVp
bHRJbnNPd25lciBmaW5hbCA6IHB1YmxpYyBKU0M6OldlYWtIYW5kbGVPd25lciB7CiBwdWJsaWM6
Ci0gICAgYm9vbCBpc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVu
a25vd24+LCB2b2lkKiBjb250ZXh0LCBKU0M6OlNsb3RWaXNpdG9yJiwgY29uc3QgY2hhcioqKSBm
aW5hbDsKKyAgICBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpT
Qzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYsIGNv
bnN0IGNoYXIqKikgZmluYWw7CiAgICAgdm9pZCBmaW5hbGl6ZShKU0M6OkhhbmRsZTxKU0M6OlVu
a25vd24+LCB2b2lkKiBjb250ZXh0KSBmaW5hbDsKIH07CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RNYXBMaWtlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TWFwTGlrZS5j
cHAJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RNYXBMaWtlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksNiArMzksNyBA
QAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0hlYXBBbmFseXplci5oPgogI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL0pTQ0lubGluZXMuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0Rl
c3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZS5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L1Nsb3RWaXNpdG9yTWFjcm9zLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvU3Vic3BhY2VJ
bmxpbmVzLmg+CiAjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgogI2luY2x1ZGUgPHd0Zi9Qb2ludGVy
UHJlcGFyYXRpb25zLmg+CkBAIC0zODAsNyArMzgxLDkgQEAgSlNDOjpJc29TdWJzcGFjZSogSlNU
ZXN0TWFwTGlrZTo6c3Vic3BhYwogICAgIGF1dG8qIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VG
b3JUZXN0TWFwTGlrZS5nZXQoKTsKIElHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUt
Y29kZSIpCiBJR05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKLSAg
ICBpZiAoJkpTVGVzdE1hcExpa2U6OnZpc2l0T3V0cHV0Q29uc3RyYWludHMgIT0gJkpTQzo6SlND
ZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzKQorICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29u
c3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3RNYXBMaWtl
Ojp2aXNpdE91dHB1dENvbnN0cmFpbnRzOworICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENv
bnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6
OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50
ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKICAgICAgICAgY2xpZW50RGF0YS5vdXRw
dXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKIElHTk9SRV9XQVJOSU5HU19FTkQK
IElHTk9SRV9XQVJOSU5HU19FTkQKQEAgLTM5Niw3ICszOTksNyBAQCB2b2lkIEpTVGVzdE1hcExp
a2U6OmFuYWx5emVIZWFwKEpTQ2VsbCogCiAgICAgQmFzZTo6YW5hbHl6ZUhlYXAoY2VsbCwgYW5h
bHl6ZXIpOwogfQogCi1ib29sIEpTVGVzdE1hcExpa2VPd25lcjo6aXNSZWFjaGFibGVGcm9tT3Bh
cXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBTbG90Vmlz
aXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikKK2Jvb2wgSlNUZXN0TWFwTGlrZU93
bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+
IGhhbmRsZSwgdm9pZCosIEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIq
KiByZWFzb24pCiB7CiAgICAgVU5VU0VEX1BBUkFNKGhhbmRsZSk7CiAgICAgVU5VU0VEX1BBUkFN
KHZpc2l0b3IpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdE1hcExpa2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0TWFwTGlrZS5oCShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TWFwTGlrZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC02NSw3ICs2NSw3IEBAIHByb3RlY3RlZDoKIAogY2xhc3MgSlNUZXN0TWFw
TGlrZU93bmVyIGZpbmFsIDogcHVibGljIEpTQzo6V2Vha0hhbmRsZU93bmVyIHsKIHB1YmxpYzoK
LSAgICBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5r
bm93bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6U2xvdFZpc2l0b3ImLCBjb25zdCBjaGFyKiopIGZp
bmFsOworICAgIGJvb2wgaXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlND
OjpVbmtub3duPiwgdm9pZCogY29udGV4dCwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiwgY29u
c3QgY2hhcioqKSBmaW5hbDsKICAgICB2b2lkIGZpbmFsaXplKEpTQzo6SGFuZGxlPEpTQzo6VW5r
bm93bj4sIHZvaWQqIGNvbnRleHQpIGZpbmFsOwogfTsKIApJbmRleDogU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJh
dGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zLmNwcAkocmV2aXNp
b24gMjczMTE5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00MCw2ICs0MCw3IEBACiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSGVhcEFuYWx5emVyLmg+
CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNDSW5saW5lcy5oPgogI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL0pTRGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLmg+CisjaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvU2xvdFZpc2l0b3JNYWNyb3MuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9TdWJzcGFjZUlubGluZXMuaD4KICNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CiAjaW5jbHVk
ZSA8d3RmL1BvaW50ZXJQcmVwYXJhdGlvbnMuaD4KQEAgLTM5Miw3ICszOTMsOSBAQCBKU0M6Oklz
b1N1YnNwYWNlKiBKU1Rlc3RNYXBMaWtlV2l0aE92ZXJyCiAgICAgYXV0byogc3BhY2UgPSBzcGFj
ZXMubV9zdWJzcGFjZUZvclRlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zLmdldCgp
OwogSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKIElHTk9SRV9XQVJO
SU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQotICAgIGlmICgmSlNUZXN0TWFwTGlr
ZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9uczo6dmlzaXRPdXRwdXRDb25zdHJhaW50cyAhPSAmSlND
OjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHMpCisgICAgdm9pZCAoKm15VmlzaXRPdXRw
dXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdE1h
cExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnM6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Cisg
ICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6
OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKKyAg
ICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJh
aW50KQogICAgICAgICBjbGllbnREYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQo
c3BhY2UpOwogSUdOT1JFX1dBUk5JTkdTX0VORAogSUdOT1JFX1dBUk5JTkdTX0VORApAQCAtNDA4
LDcgKzQxMSw3IEBAIHZvaWQgSlNUZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW8KICAg
ICBCYXNlOjphbmFseXplSGVhcChjZWxsLCBhbmFseXplcik7CiB9CiAKLWJvb2wgSlNUZXN0TWFw
TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9uc093bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVS
b290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIFNsb3RWaXNpdG9y
JiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQorYm9vbCBKU1Rlc3RNYXBMaWtlV2l0aE92
ZXJyaWRkZW5PcGVyYXRpb25zT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6
SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgQWJzdHJhY3RTbG90VmlzaXRvciYg
dmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikKIHsKICAgICBVTlVTRURfUEFSQU0oaGFuZGxl
KTsKICAgICBVTlVTRURfUEFSQU0odmlzaXRvcik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9u
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zLmgJKHJldmlzaW9uIDI3MzEx
OSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RNYXBM
aWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTY1LDcgKzY1
LDcgQEAgcHJvdGVjdGVkOgogCiBjbGFzcyBKU1Rlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVy
YXRpb25zT3duZXIgZmluYWwgOiBwdWJsaWMgSlNDOjpXZWFrSGFuZGxlT3duZXIgewogcHVibGlj
OgotICAgIGJvb2wgaXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpV
bmtub3duPiwgdm9pZCogY29udGV4dCwgSlNDOjpTbG90VmlzaXRvciYsIGNvbnN0IGNoYXIqKikg
ZmluYWw7CisgICAgYm9vbCBpc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxK
U0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0LCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImLCBj
b25zdCBjaGFyKiopIGZpbmFsOwogICAgIHZvaWQgZmluYWxpemUoSlNDOjpIYW5kbGU8SlNDOjpV
bmtub3duPiwgdm9pZCogY29udGV4dCkgZmluYWw7CiB9OwogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9J
ZGVudGlmaWVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyLmNwcAko
cmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0NJbmxp
bmVzLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNEZXN0cnVjdGlibGVPYmplY3RIZWFw
Q2VsbFR5cGUuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9Qcm9wZXJ0eU5hbWVBcnJheS5o
PgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1Nsb3RWaXNpdG9yTWFjcm9zLmg+CiAjaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvU3Vic3BhY2VJbmxpbmVzLmg+CiAjaW5jbHVkZSA8d3RmL0dldFB0
ci5oPgogI2luY2x1ZGUgPHd0Zi9Qb2ludGVyUHJlcGFyYXRpb25zLmg+CkBAIC0zMzgsNyArMzM5
LDkgQEAgSlNDOjpJc29TdWJzcGFjZSogSlNUZXN0TmFtZWRBbmRJbmRleGVkUwogICAgIGF1dG8q
IHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9J
ZGVudGlmaWVyLmdldCgpOwogSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2Rl
IikKIElHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQotICAgIGlm
ICgmSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyOjp2aXNpdE91dHB1dENv
bnN0cmFpbnRzICE9ICZKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50cykKKyAgICB2
b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90Vmlz
aXRvciYpID0gSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyOjp2aXNpdE91
dHB1dENvbnN0cmFpbnRzOworICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQp
KEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0
cHV0Q29uc3RyYWludHM7CisgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2Vs
bFZpc2l0T3V0cHV0Q29uc3RyYWludCkKICAgICAgICAgY2xpZW50RGF0YS5vdXRwdXRDb25zdHJh
aW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKIElHTk9SRV9XQVJOSU5HU19FTkQKIElHTk9SRV9X
QVJOSU5HU19FTkQKQEAgLTM1NCw3ICszNTcsNyBAQCB2b2lkIEpTVGVzdE5hbWVkQW5kSW5kZXhl
ZFNldHRlck5vSWRlbnRpCiAgICAgQmFzZTo6YW5hbHl6ZUhlYXAoY2VsbCwgYW5hbHl6ZXIpOwog
fQogCi1ib29sIEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllck93bmVyOjpp
c1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRs
ZSwgdm9pZCosIFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQorYm9v
bCBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXJPd25lcjo6aXNSZWFjaGFi
bGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQq
LCBBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQogewog
ICAgIFVOVVNFRF9QQVJBTShoYW5kbGUpOwogICAgIFVOVVNFRF9QQVJBTSh2aXNpdG9yKTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEFu
ZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9J
ZGVudGlmaWVyLmgJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtNzMsNyArNzMsNyBAQCBwcm90ZWN0ZWQ6CiAKIGNsYXNzIEpT
VGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllck93bmVyIGZpbmFsIDogcHVibGlj
IEpTQzo6V2Vha0hhbmRsZU93bmVyIHsKIHB1YmxpYzoKLSAgICBib29sIGlzUmVhY2hhYmxlRnJv
bU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIEpT
Qzo6U2xvdFZpc2l0b3ImLCBjb25zdCBjaGFyKiopIGZpbmFsOworICAgIGJvb2wgaXNSZWFjaGFi
bGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4
dCwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiwgY29uc3QgY2hhcioqKSBmaW5hbDsKICAgICB2
b2lkIGZpbmFsaXplKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQpIGZp
bmFsOwogfTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFt
ZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24uY3BwCShyZXZpc2lvbiAyNzMxMTkp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRB
bmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
Niw2ICszNiw3IEBACiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNDSW5saW5lcy5oPgogI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTRGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLmg+
CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvUHJvcGVydHlOYW1lQXJyYXkuaD4KKyNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9TbG90VmlzaXRvck1hY3Jvcy5oPgogI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL1N1YnNwYWNlSW5saW5lcy5oPgogI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KICNpbmNs
dWRlIDx3dGYvUG9pbnRlclByZXBhcmF0aW9ucy5oPgpAQCAtMzM4LDcgKzMzOSw5IEBAIEpTQzo6
SXNvU3Vic3BhY2UqIEpTVGVzdE5hbWVkQW5kSW5kZXhlZFMKICAgICBhdXRvKiBzcGFjZSA9IHNw
YWNlcy5tX3N1YnNwYWNlRm9yVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0
aW9uLmdldCgpOwogSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKIElH
Tk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQotICAgIGlmICgmSlNU
ZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb246OnZpc2l0T3V0cHV0Q29u
c3RyYWludHMgIT0gJkpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzKQorICAgIHZv
aWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNp
dG9yJikgPSBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbjo6dmlz
aXRPdXRwdXRDb25zdHJhaW50czsKKyAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJh
aW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNp
dE91dHB1dENvbnN0cmFpbnRzOworICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBq
c0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCiAgICAgICAgIGNsaWVudERhdGEub3V0cHV0Q29u
c3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7CiBJR05PUkVfV0FSTklOR1NfRU5ECiBJR05P
UkVfV0FSTklOR1NfRU5ECkBAIC0zNTQsNyArMzU3LDcgQEAgdm9pZCBKU1Rlc3ROYW1lZEFuZElu
ZGV4ZWRTZXR0ZXJUaHJvd2luZwogICAgIEJhc2U6OmFuYWx5emVIZWFwKGNlbGwsIGFuYWx5emVy
KTsKIH0KIAotYm9vbCBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlv
bk93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25v
d24+IGhhbmRsZSwgdm9pZCosIFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVh
c29uKQorYm9vbCBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbk93
bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+
IGhhbmRsZSwgdm9pZCosIEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIq
KiByZWFzb24pCiB7CiAgICAgVU5VU0VEX1BBUkFNKGhhbmRsZSk7CiAgICAgVU5VU0VEX1BBUkFN
KHZpc2l0b3IpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVk
QW5kSW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uLmgJKHJldmlzaW9uIDI3MzExOSkKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEFuZElu
ZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC03Myw3ICs3
Myw3IEBAIHByb3RlY3RlZDoKIAogY2xhc3MgSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhy
b3dpbmdFeGNlcHRpb25Pd25lciBmaW5hbCA6IHB1YmxpYyBKU0M6OldlYWtIYW5kbGVPd25lciB7
CiBwdWJsaWM6Ci0gICAgYm9vbCBpc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRs
ZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0LCBKU0M6OlNsb3RWaXNpdG9yJiwgY29uc3Qg
Y2hhcioqKSBmaW5hbDsKKyAgICBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6
SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6QWJzdHJhY3RTbG90Vmlz
aXRvciYsIGNvbnN0IGNoYXIqKikgZmluYWw7CiAgICAgdm9pZCBmaW5hbGl6ZShKU0M6OkhhbmRs
ZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0KSBmaW5hbDsKIH07CiAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEFuZEluZGV4ZWRT
ZXR0ZXJXaXRoSWRlbnRpZmllci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVu
dGlmaWVyLmNwcAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsNiArMzgsNyBAQAogI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL0pTQ0lubGluZXMuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0Rlc3RydWN0
aWJsZU9iamVjdEhlYXBDZWxsVHlwZS5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1Byb3Bl
cnR5TmFtZUFycmF5Lmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvU2xvdFZpc2l0b3JNYWNy
b3MuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9TdWJzcGFjZUlubGluZXMuaD4KICNpbmNs
dWRlIDx3dGYvR2V0UHRyLmg+CiAjaW5jbHVkZSA8d3RmL1BvaW50ZXJQcmVwYXJhdGlvbnMuaD4K
QEAgLTQwMiw3ICs0MDMsOSBAQCBKU0M6Oklzb1N1YnNwYWNlKiBKU1Rlc3ROYW1lZEFuZEluZGV4
ZWRTCiAgICAgYXV0byogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3ROYW1lZEFuZElu
ZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5nZXQoKTsKIElHTk9SRV9XQVJOSU5HU19CRUdJTigi
dW5yZWFjaGFibGUtY29kZSIpCiBJR05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1j
b21wYXJlIikKLSAgICBpZiAoJkpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlm
aWVyOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzICE9ICZKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRD
b25zdHJhaW50cykKKyAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlND
ZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0
aElkZW50aWZpZXI6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAgdm9pZCAoKmpzQ2VsbFZp
c2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBK
U0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKKyAgICBpZiAobXlWaXNpdE91dHB1
dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQogICAgICAgICBjbGll
bnREYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOwogSUdOT1JFX1dB
Uk5JTkdTX0VORAogSUdOT1JFX1dBUk5JTkdTX0VORApAQCAtNDE4LDcgKzQyMSw3IEBAIHZvaWQg
SlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW4KICAgICBCYXNlOjphbmFseXplSGVh
cChjZWxsLCBhbmFseXplcik7CiB9CiAKLWJvb2wgSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVy
V2l0aElkZW50aWZpZXJPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5k
bGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBTbG90VmlzaXRvciYgdmlzaXRvciwgY29u
c3QgY2hhcioqIHJlYXNvbikKK2Jvb2wgSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElk
ZW50aWZpZXJPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlND
OjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBj
b25zdCBjaGFyKiogcmVhc29uKQogewogICAgIFVOVVNFRF9QQVJBTShoYW5kbGUpOwogICAgIFVO
VVNFRF9QQVJBTSh2aXNpdG9yKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5oCShyZXZpc2lvbiAyNzMxMTkp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRB
bmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNzMsNyAr
NzMsNyBAQCBwcm90ZWN0ZWQ6CiAKIGNsYXNzIEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldp
dGhJZGVudGlmaWVyT3duZXIgZmluYWwgOiBwdWJsaWMgSlNDOjpXZWFrSGFuZGxlT3duZXIgewog
cHVibGljOgotICAgIGJvb2wgaXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8
SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCwgSlNDOjpTbG90VmlzaXRvciYsIGNvbnN0IGNo
YXIqKikgZmluYWw7CisgICAgYm9vbCBpc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6Okhh
bmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0LCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0
b3ImLCBjb25zdCBjaGFyKiopIGZpbmFsOwogICAgIHZvaWQgZmluYWxpemUoSlNDOjpIYW5kbGU8
SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCkgZmluYWw7CiB9OwogCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWREZWxldGVyTm9JZGVu
dGlmaWVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0TmFtZWREZWxldGVyTm9JZGVudGlmaWVyLmNwcAkocmV2aXNpb24gMjcz
MTE5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5h
bWVkRGVsZXRlck5vSWRlbnRpZmllci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDYgKzM1LDcg
QEAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9IZWFwQW5hbHl6ZXIuaD4KICNpbmNsdWRlIDxK
YXZhU2NyaXB0Q29yZS9KU0NJbmxpbmVzLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNE
ZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9TbG90VmlzaXRvck1hY3Jvcy5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1N1YnNwYWNl
SW5saW5lcy5oPgogI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KICNpbmNsdWRlIDx3dGYvUG9pbnRl
clByZXBhcmF0aW9ucy5oPgpAQCAtMjUwLDcgKzI1MSw5IEBAIEpTQzo6SXNvU3Vic3BhY2UqIEpT
VGVzdE5hbWVkRGVsZXRlck5vSWQKICAgICBhdXRvKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNl
Rm9yVGVzdE5hbWVkRGVsZXRlck5vSWRlbnRpZmllci5nZXQoKTsKIElHTk9SRV9XQVJOSU5HU19C
RUdJTigidW5yZWFjaGFibGUtY29kZSIpCiBJR05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9n
aWNhbC1jb21wYXJlIikKLSAgICBpZiAoJkpTVGVzdE5hbWVkRGVsZXRlck5vSWRlbnRpZmllcjo6
dmlzaXRPdXRwdXRDb25zdHJhaW50cyAhPSAmSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3Ry
YWludHMpCisgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCos
IEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdE5hbWVkRGVsZXRlck5vSWRlbnRpZmllcjo6dmlz
aXRPdXRwdXRDb25zdHJhaW50czsKKyAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJh
aW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNp
dE91dHB1dENvbnN0cmFpbnRzOworICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBq
c0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCiAgICAgICAgIGNsaWVudERhdGEub3V0cHV0Q29u
c3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7CiBJR05PUkVfV0FSTklOR1NfRU5ECiBJR05P
UkVfV0FSTklOR1NfRU5ECkBAIC0yNjYsNyArMjY5LDcgQEAgdm9pZCBKU1Rlc3ROYW1lZERlbGV0
ZXJOb0lkZW50aWZpZXI6OmFuYQogICAgIEJhc2U6OmFuYWx5emVIZWFwKGNlbGwsIGFuYWx5emVy
KTsKIH0KIAotYm9vbCBKU1Rlc3ROYW1lZERlbGV0ZXJOb0lkZW50aWZpZXJPd25lcjo6aXNSZWFj
aGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZv
aWQqLCBTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikKK2Jvb2wgSlNU
ZXN0TmFtZWREZWxldGVyTm9JZGVudGlmaWVyT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJv
b3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgQWJzdHJhY3RTbG90
VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikKIHsKICAgICBVTlVTRURfUEFS
QU0oaGFuZGxlKTsKICAgICBVTlVTRURfUEFSQU0odmlzaXRvcik7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWREZWxldGVyTm9JZGVudGlm
aWVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdE5hbWVkRGVsZXRlck5vSWRlbnRpZmllci5oCShyZXZpc2lvbiAyNzMxMTkpCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWREZWxl
dGVyTm9JZGVudGlmaWVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTcyLDcgKzcyLDcgQEAgcHJvdGVj
dGVkOgogCiBjbGFzcyBKU1Rlc3ROYW1lZERlbGV0ZXJOb0lkZW50aWZpZXJPd25lciBmaW5hbCA6
IHB1YmxpYyBKU0M6OldlYWtIYW5kbGVPd25lciB7CiBwdWJsaWM6Ci0gICAgYm9vbCBpc1JlYWNo
YWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250
ZXh0LCBKU0M6OlNsb3RWaXNpdG9yJiwgY29uc3QgY2hhcioqKSBmaW5hbDsKKyAgICBib29sIGlz
UmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQq
IGNvbnRleHQsIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYsIGNvbnN0IGNoYXIqKikgZmluYWw7
CiAgICAgdm9pZCBmaW5hbGl6ZShKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250
ZXh0KSBmaW5hbDsKIH07CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3ROYW1lZERlbGV0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVk
RGVsZXRlclRocm93aW5nRXhjZXB0aW9uLmNwcAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkRGVsZXRlclRocm93
aW5nRXhjZXB0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL0hlYXBBbmFseXplci5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL0pTQ0lubGluZXMuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0Rlc3RydWN0aWJs
ZU9iamVjdEhlYXBDZWxsVHlwZS5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1Nsb3RWaXNp
dG9yTWFjcm9zLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvU3Vic3BhY2VJbmxpbmVzLmg+
CiAjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgogI2luY2x1ZGUgPHd0Zi9Qb2ludGVyUHJlcGFyYXRp
b25zLmg+CkBAIC0yNTAsNyArMjUxLDkgQEAgSlNDOjpJc29TdWJzcGFjZSogSlNUZXN0TmFtZWRE
ZWxldGVyVGhybwogICAgIGF1dG8qIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0TmFt
ZWREZWxldGVyVGhyb3dpbmdFeGNlcHRpb24uZ2V0KCk7CiBJR05PUkVfV0FSTklOR1NfQkVHSU4o
InVucmVhY2hhYmxlLWNvZGUiKQogSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwt
Y29tcGFyZSIpCi0gICAgaWYgKCZKU1Rlc3ROYW1lZERlbGV0ZXJUaHJvd2luZ0V4Y2VwdGlvbjo6
dmlzaXRPdXRwdXRDb25zdHJhaW50cyAhPSAmSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3Ry
YWludHMpCisgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCos
IEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdE5hbWVkRGVsZXRlclRocm93aW5nRXhjZXB0aW9u
Ojp2aXNpdE91dHB1dENvbnN0cmFpbnRzOworICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENv
bnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6
OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50
ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKICAgICAgICAgY2xpZW50RGF0YS5vdXRw
dXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKIElHTk9SRV9XQVJOSU5HU19FTkQK
IElHTk9SRV9XQVJOSU5HU19FTkQKQEAgLTI2Niw3ICsyNjksNyBAQCB2b2lkIEpTVGVzdE5hbWVk
RGVsZXRlclRocm93aW5nRXhjZXB0aW9uCiAgICAgQmFzZTo6YW5hbHl6ZUhlYXAoY2VsbCwgYW5h
bHl6ZXIpOwogfQogCi1ib29sIEpTVGVzdE5hbWVkRGVsZXRlclRocm93aW5nRXhjZXB0aW9uT3du
ZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4g
aGFuZGxlLCB2b2lkKiwgU2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24p
Citib29sIEpTVGVzdE5hbWVkRGVsZXRlclRocm93aW5nRXhjZXB0aW9uT3duZXI6OmlzUmVhY2hh
YmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lk
KiwgQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikKIHsK
ICAgICBVTlVTRURfUEFSQU0oaGFuZGxlKTsKICAgICBVTlVTRURfUEFSQU0odmlzaXRvcik7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRE
ZWxldGVyVGhyb3dpbmdFeGNlcHRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWREZWxldGVyVGhyb3dpbmdFeGNlcHRp
b24uaAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdE5hbWVkRGVsZXRlclRocm93aW5nRXhjZXB0aW9uLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTcyLDcgKzcyLDcgQEAgcHJvdGVjdGVkOgogCiBjbGFzcyBKU1Rlc3ROYW1lZERl
bGV0ZXJUaHJvd2luZ0V4Y2VwdGlvbk93bmVyIGZpbmFsIDogcHVibGljIEpTQzo6V2Vha0hhbmRs
ZU93bmVyIHsKIHB1YmxpYzoKLSAgICBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpT
Qzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6U2xvdFZpc2l0b3Im
LCBjb25zdCBjaGFyKiopIGZpbmFsOworICAgIGJvb2wgaXNSZWFjaGFibGVGcm9tT3BhcXVlUm9v
dHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCwgSlNDOjpBYnN0cmFj
dFNsb3RWaXNpdG9yJiwgY29uc3QgY2hhcioqKSBmaW5hbDsKICAgICB2b2lkIGZpbmFsaXplKEpT
Qzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQpIGZpbmFsOwogfTsKIApJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkRGVs
ZXRlcldpdGhJZGVudGlmaWVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWREZWxldGVyV2l0aElkZW50aWZpZXIuY3Bw
CShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0TmFtZWREZWxldGVyV2l0aElkZW50aWZpZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zNiw2ICszNiw3IEBACiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSGVhcEFuYWx5emVy
Lmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNDSW5saW5lcy5oPgogI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL0pTRGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLmg+CisjaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvU2xvdFZpc2l0b3JNYWNyb3MuaD4KICNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9TdWJzcGFjZUlubGluZXMuaD4KICNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CiAjaW5j
bHVkZSA8d3RmL1BvaW50ZXJQcmVwYXJhdGlvbnMuaD4KQEAgLTI3OSw3ICsyODAsOSBAQCBKU0M6
Oklzb1N1YnNwYWNlKiBKU1Rlc3ROYW1lZERlbGV0ZXJXaXRoCiAgICAgYXV0byogc3BhY2UgPSBz
cGFjZXMubV9zdWJzcGFjZUZvclRlc3ROYW1lZERlbGV0ZXJXaXRoSWRlbnRpZmllci5nZXQoKTsK
IElHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCiBJR05PUkVfV0FSTklO
R1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKLSAgICBpZiAoJkpTVGVzdE5hbWVkRGVs
ZXRlcldpdGhJZGVudGlmaWVyOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzICE9ICZKU0M6OkpTQ2Vs
bDo6dmlzaXRPdXRwdXRDb25zdHJhaW50cykKKyAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0
cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0TmFtZWREZWxl
dGVyV2l0aElkZW50aWZpZXI6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAgdm9pZCAoKmpz
Q2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9y
JikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKKyAgICBpZiAobXlWaXNp
dE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQogICAgICAg
ICBjbGllbnREYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOwogSUdO
T1JFX1dBUk5JTkdTX0VORAogSUdOT1JFX1dBUk5JTkdTX0VORApAQCAtMjk1LDcgKzI5OCw3IEBA
IHZvaWQgSlNUZXN0TmFtZWREZWxldGVyV2l0aElkZW50aWZpZXI6OmEKICAgICBCYXNlOjphbmFs
eXplSGVhcChjZWxsLCBhbmFseXplcik7CiB9CiAKLWJvb2wgSlNUZXN0TmFtZWREZWxldGVyV2l0
aElkZW50aWZpZXJPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8
SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3Qg
Y2hhcioqIHJlYXNvbikKK2Jvb2wgSlNUZXN0TmFtZWREZWxldGVyV2l0aElkZW50aWZpZXJPd25l
cjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBo
YW5kbGUsIHZvaWQqLCBBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiog
cmVhc29uKQogewogICAgIFVOVVNFRF9QQVJBTShoYW5kbGUpOwogICAgIFVOVVNFRF9QQVJBTSh2
aXNpdG9yKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3ROYW1lZERlbGV0ZXJXaXRoSWRlbnRpZmllci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZERlbGV0ZXJXaXRoSWRl
bnRpZmllci5oCShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWREZWxldGVyV2l0aElkZW50aWZpZXIuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNzIsNyArNzIsNyBAQCBwcm90ZWN0ZWQ6CiAKIGNsYXNzIEpTVGVzdE5hbWVk
RGVsZXRlcldpdGhJZGVudGlmaWVyT3duZXIgZmluYWwgOiBwdWJsaWMgSlNDOjpXZWFrSGFuZGxl
T3duZXIgewogcHVibGljOgotICAgIGJvb2wgaXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlND
OjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCwgSlNDOjpTbG90VmlzaXRvciYs
IGNvbnN0IGNoYXIqKikgZmluYWw7CisgICAgYm9vbCBpc1JlYWNoYWJsZUZyb21PcGFxdWVSb290
cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0LCBKU0M6OkFic3RyYWN0
U2xvdFZpc2l0b3ImLCBjb25zdCBjaGFyKiopIGZpbmFsOwogICAgIHZvaWQgZmluYWxpemUoSlND
OjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCkgZmluYWw7CiB9OwogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWREZWxl
dGVyV2l0aEluZGV4ZWRHZXR0ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZERlbGV0ZXJXaXRoSW5kZXhlZEdldHRl
ci5jcHAJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3ROYW1lZERlbGV0ZXJXaXRoSW5kZXhlZEdldHRlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0NJ
bmxpbmVzLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNEZXN0cnVjdGlibGVPYmplY3RI
ZWFwQ2VsbFR5cGUuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9Qcm9wZXJ0eU5hbWVBcnJh
eS5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1Nsb3RWaXNpdG9yTWFjcm9zLmg+CiAjaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvU3Vic3BhY2VJbmxpbmVzLmg+CiAjaW5jbHVkZSA8d3RmL0dl
dFB0ci5oPgogI2luY2x1ZGUgPHd0Zi9Qb2ludGVyUHJlcGFyYXRpb25zLmg+CkBAIC0yNjQsNyAr
MjY1LDkgQEAgSlNDOjpJc29TdWJzcGFjZSogSlNUZXN0TmFtZWREZWxldGVyV2l0aAogICAgIGF1
dG8qIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0TmFtZWREZWxldGVyV2l0aEluZGV4
ZWRHZXR0ZXIuZ2V0KCk7CiBJR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUi
KQogSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgaWYg
KCZKU1Rlc3ROYW1lZERlbGV0ZXJXaXRoSW5kZXhlZEdldHRlcjo6dmlzaXRPdXRwdXRDb25zdHJh
aW50cyAhPSAmSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHMpCisgICAgdm9pZCAo
Km15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3Im
KSA9IEpTVGVzdE5hbWVkRGVsZXRlcldpdGhJbmRleGVkR2V0dGVyOjp2aXNpdE91dHB1dENvbnN0
cmFpbnRzOworICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlND
ZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3Ry
YWludHM7CisgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0
cHV0Q29uc3RyYWludCkKICAgICAgICAgY2xpZW50RGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2Vz
KCkuYXBwZW5kKHNwYWNlKTsKIElHTk9SRV9XQVJOSU5HU19FTkQKIElHTk9SRV9XQVJOSU5HU19F
TkQKQEAgLTI4MCw3ICsyODMsNyBAQCB2b2lkIEpTVGVzdE5hbWVkRGVsZXRlcldpdGhJbmRleGVk
R2V0dGVyCiAgICAgQmFzZTo6YW5hbHl6ZUhlYXAoY2VsbCwgYW5hbHl6ZXIpOwogfQogCi1ib29s
IEpTVGVzdE5hbWVkRGVsZXRlcldpdGhJbmRleGVkR2V0dGVyT3duZXI6OmlzUmVhY2hhYmxlRnJv
bU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgU2xv
dFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCitib29sIEpTVGVzdE5hbWVk
RGVsZXRlcldpdGhJbmRleGVkR2V0dGVyT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3Rz
KEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgQWJzdHJhY3RTbG90Vmlz
aXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikKIHsKICAgICBVTlVTRURfUEFSQU0o
aGFuZGxlKTsKICAgICBVTlVTRURfUEFSQU0odmlzaXRvcik7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWREZWxldGVyV2l0aEluZGV4ZWRH
ZXR0ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0TmFtZWREZWxldGVyV2l0aEluZGV4ZWRHZXR0ZXIuaAkocmV2aXNpb24gMjcz
MTE5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5h
bWVkRGVsZXRlcldpdGhJbmRleGVkR2V0dGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTcyLDcgKzcy
LDcgQEAgcHJvdGVjdGVkOgogCiBjbGFzcyBKU1Rlc3ROYW1lZERlbGV0ZXJXaXRoSW5kZXhlZEdl
dHRlck93bmVyIGZpbmFsIDogcHVibGljIEpTQzo6V2Vha0hhbmRsZU93bmVyIHsKIHB1YmxpYzoK
LSAgICBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5r
bm93bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6U2xvdFZpc2l0b3ImLCBjb25zdCBjaGFyKiopIGZp
bmFsOworICAgIGJvb2wgaXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlND
OjpVbmtub3duPiwgdm9pZCogY29udGV4dCwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiwgY29u
c3QgY2hhcioqKSBmaW5hbDsKICAgICB2b2lkIGZpbmFsaXplKEpTQzo6SGFuZGxlPEpTQzo6VW5r
bm93bj4sIHZvaWQqIGNvbnRleHQpIGZpbmFsOwogfTsKIApJbmRleDogU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkR2V0dGVyQ2FsbFdpdGguY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3ROYW1lZEdldHRlckNhbGxXaXRoLmNwcAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkR2V0dGVyQ2FsbFdpdGgu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvSGVhcEFuYWx5emVyLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNDSW5saW5l
cy5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTRGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENl
bGxUeXBlLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvU2xvdFZpc2l0b3JNYWNyb3MuaD4K
ICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9TdWJzcGFjZUlubGluZXMuaD4KICNpbmNsdWRlIDx3
dGYvR2V0UHRyLmg+CiAjaW5jbHVkZSA8d3RmL1BvaW50ZXJQcmVwYXJhdGlvbnMuaD4KQEAgLTIy
NCw3ICsyMjUsOSBAQCBKU0M6Oklzb1N1YnNwYWNlKiBKU1Rlc3ROYW1lZEdldHRlckNhbGxXCiAg
ICAgYXV0byogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3ROYW1lZEdldHRlckNhbGxX
aXRoLmdldCgpOwogSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKIElH
Tk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQotICAgIGlmICgmSlNU
ZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aDo6dmlzaXRPdXRwdXRDb25zdHJhaW50cyAhPSAmSlNDOjpK
U0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHMpCisgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRD
b25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdE5hbWVk
R2V0dGVyQ2FsbFdpdGg6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAgdm9pZCAoKmpzQ2Vs
bFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikg
PSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKKyAgICBpZiAobXlWaXNpdE91
dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQogICAgICAgICBj
bGllbnREYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOwogSUdOT1JF
X1dBUk5JTkdTX0VORAogSUdOT1JFX1dBUk5JTkdTX0VORApAQCAtMjQwLDcgKzI0Myw3IEBAIHZv
aWQgSlNUZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aDo6YW5hbHl6ZUgKICAgICBCYXNlOjphbmFseXpl
SGVhcChjZWxsLCBhbmFseXplcik7CiB9CiAKLWJvb2wgSlNUZXN0TmFtZWRHZXR0ZXJDYWxsV2l0
aE93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25v
d24+IGhhbmRsZSwgdm9pZCosIFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVh
c29uKQorYm9vbCBKU1Rlc3ROYW1lZEdldHRlckNhbGxXaXRoT3duZXI6OmlzUmVhY2hhYmxlRnJv
bU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgQWJz
dHJhY3RTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikKIHsKICAgICBV
TlVTRURfUEFSQU0oaGFuZGxlKTsKICAgICBVTlVTRURfUEFSQU0odmlzaXRvcik7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRHZXR0ZXJD
YWxsV2l0aC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3ROYW1lZEdldHRlckNhbGxXaXRoLmgJKHJldmlzaW9uIDI3MzExOSkKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEdldHRl
ckNhbGxXaXRoLmgJKHdvcmtpbmcgY29weSkKQEAgLTcwLDcgKzcwLDcgQEAgcHJvdGVjdGVkOgog
CiBjbGFzcyBKU1Rlc3ROYW1lZEdldHRlckNhbGxXaXRoT3duZXIgZmluYWwgOiBwdWJsaWMgSlND
OjpXZWFrSGFuZGxlT3duZXIgewogcHVibGljOgotICAgIGJvb2wgaXNSZWFjaGFibGVGcm9tT3Bh
cXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCwgSlNDOjpT
bG90VmlzaXRvciYsIGNvbnN0IGNoYXIqKikgZmluYWw7CisgICAgYm9vbCBpc1JlYWNoYWJsZUZy
b21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0LCBK
U0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImLCBjb25zdCBjaGFyKiopIGZpbmFsOwogICAgIHZvaWQg
ZmluYWxpemUoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCkgZmluYWw7
CiB9OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0TmFtZWRHZXR0ZXJOb0lkZW50aWZpZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEdldHRlck5vSWRlbnRpZmll
ci5jcHAJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEdldHRlck5vSWRlbnRpZmllci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9IZWFwQW5hbHl6
ZXIuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0NJbmxpbmVzLmg+CiAjaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvSlNEZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUuaD4KKyNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9TbG90VmlzaXRvck1hY3Jvcy5oPgogI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL1N1YnNwYWNlSW5saW5lcy5oPgogI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KICNp
bmNsdWRlIDx3dGYvUG9pbnRlclByZXBhcmF0aW9ucy5oPgpAQCAtMjI0LDcgKzIyNSw5IEBAIEpT
Qzo6SXNvU3Vic3BhY2UqIEpTVGVzdE5hbWVkR2V0dGVyTm9JZGUKICAgICBhdXRvKiBzcGFjZSA9
IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE5hbWVkR2V0dGVyTm9JZGVudGlmaWVyLmdldCgpOwog
SUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKIElHTk9SRV9XQVJOSU5H
U19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQotICAgIGlmICgmSlNUZXN0TmFtZWRHZXR0
ZXJOb0lkZW50aWZpZXI6OnZpc2l0T3V0cHV0Q29uc3RyYWludHMgIT0gJkpTQzo6SlNDZWxsOjp2
aXNpdE91dHB1dENvbnN0cmFpbnRzKQorICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWlu
dCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3ROYW1lZEdldHRlck5v
SWRlbnRpZmllcjo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKKyAgICB2b2lkICgqanNDZWxsVmlz
aXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpT
Qzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOworICAgIGlmIChteVZpc2l0T3V0cHV0
Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCiAgICAgICAgIGNsaWVu
dERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7CiBJR05PUkVfV0FS
TklOR1NfRU5ECiBJR05PUkVfV0FSTklOR1NfRU5ECkBAIC0yNDAsNyArMjQzLDcgQEAgdm9pZCBK
U1Rlc3ROYW1lZEdldHRlck5vSWRlbnRpZmllcjo6YW5hbAogICAgIEJhc2U6OmFuYWx5emVIZWFw
KGNlbGwsIGFuYWx5emVyKTsKIH0KIAotYm9vbCBKU1Rlc3ROYW1lZEdldHRlck5vSWRlbnRpZmll
ck93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25v
d24+IGhhbmRsZSwgdm9pZCosIFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVh
c29uKQorYm9vbCBKU1Rlc3ROYW1lZEdldHRlck5vSWRlbnRpZmllck93bmVyOjppc1JlYWNoYWJs
ZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCos
IEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCiB7CiAg
ICAgVU5VU0VEX1BBUkFNKGhhbmRsZSk7CiAgICAgVU5VU0VEX1BBUkFNKHZpc2l0b3IpOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkR2V0
dGVyTm9JZGVudGlmaWVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkR2V0dGVyTm9JZGVudGlmaWVyLmgJKHJldmlzaW9u
IDI3MzExOSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3ROYW1lZEdldHRlck5vSWRlbnRpZmllci5oCSh3b3JraW5nIGNvcHkpCkBAIC03MCw3ICs3MCw3
IEBAIHByb3RlY3RlZDoKIAogY2xhc3MgSlNUZXN0TmFtZWRHZXR0ZXJOb0lkZW50aWZpZXJPd25l
ciBmaW5hbCA6IHB1YmxpYyBKU0M6OldlYWtIYW5kbGVPd25lciB7CiBwdWJsaWM6Ci0gICAgYm9v
bCBpc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2
b2lkKiBjb250ZXh0LCBKU0M6OlNsb3RWaXNpdG9yJiwgY29uc3QgY2hhcioqKSBmaW5hbDsKKyAg
ICBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93
bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYsIGNvbnN0IGNoYXIq
KikgZmluYWw7CiAgICAgdm9pZCBmaW5hbGl6ZShKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2
b2lkKiBjb250ZXh0KSBmaW5hbDsKIH07CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEdldHRlcldpdGhJZGVudGlmaWVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmllci5jcHAJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEdldHRlcldpdGhJ
ZGVudGlmaWVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL0hlYXBBbmFseXplci5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L0pTQ0lubGluZXMuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0Rlc3RydWN0aWJsZU9i
amVjdEhlYXBDZWxsVHlwZS5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1Nsb3RWaXNpdG9y
TWFjcm9zLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvU3Vic3BhY2VJbmxpbmVzLmg+CiAj
aW5jbHVkZSA8d3RmL0dldFB0ci5oPgogI2luY2x1ZGUgPHd0Zi9Qb2ludGVyUHJlcGFyYXRpb25z
Lmg+CkBAIC0yNTUsNyArMjU2LDkgQEAgSlNDOjpJc29TdWJzcGFjZSogSlNUZXN0TmFtZWRHZXR0
ZXJXaXRoSQogICAgIGF1dG8qIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0TmFtZWRH
ZXR0ZXJXaXRoSWRlbnRpZmllci5nZXQoKTsKIElHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFj
aGFibGUtY29kZSIpCiBJR05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJl
IikKLSAgICBpZiAoJkpTVGVzdE5hbWVkR2V0dGVyV2l0aElkZW50aWZpZXI6OnZpc2l0T3V0cHV0
Q29uc3RyYWludHMgIT0gJkpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzKQorICAg
IHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RW
aXNpdG9yJikgPSBKU1Rlc3ROYW1lZEdldHRlcldpdGhJZGVudGlmaWVyOjp2aXNpdE91dHB1dENv
bnN0cmFpbnRzOworICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6
SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29u
c3RyYWludHM7CisgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0
T3V0cHV0Q29uc3RyYWludCkKICAgICAgICAgY2xpZW50RGF0YS5vdXRwdXRDb25zdHJhaW50U3Bh
Y2VzKCkuYXBwZW5kKHNwYWNlKTsKIElHTk9SRV9XQVJOSU5HU19FTkQKIElHTk9SRV9XQVJOSU5H
U19FTkQKQEAgLTI3MSw3ICsyNzQsNyBAQCB2b2lkIEpTVGVzdE5hbWVkR2V0dGVyV2l0aElkZW50
aWZpZXI6OmFuCiAgICAgQmFzZTo6YW5hbHl6ZUhlYXAoY2VsbCwgYW5hbHl6ZXIpOwogfQogCi1i
b29sIEpTVGVzdE5hbWVkR2V0dGVyV2l0aElkZW50aWZpZXJPd25lcjo6aXNSZWFjaGFibGVGcm9t
T3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBTbG90
VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikKK2Jvb2wgSlNUZXN0TmFtZWRH
ZXR0ZXJXaXRoSWRlbnRpZmllck93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6
OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIEFic3RyYWN0U2xvdFZpc2l0b3Im
IHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCiB7CiAgICAgVU5VU0VEX1BBUkFNKGhhbmRs
ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHZpc2l0b3IpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkR2V0dGVyV2l0aElkZW50aWZpZXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmllci5oCShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRHZXR0ZXJXaXRo
SWRlbnRpZmllci5oCSh3b3JraW5nIGNvcHkpCkBAIC03MCw3ICs3MCw3IEBAIHByb3RlY3RlZDoK
IAogY2xhc3MgSlNUZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmllck93bmVyIGZpbmFsIDogcHVi
bGljIEpTQzo6V2Vha0hhbmRsZU93bmVyIHsKIHB1YmxpYzoKLSAgICBib29sIGlzUmVhY2hhYmxl
RnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQs
IEpTQzo6U2xvdFZpc2l0b3ImLCBjb25zdCBjaGFyKiopIGZpbmFsOworICAgIGJvb2wgaXNSZWFj
aGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29u
dGV4dCwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiwgY29uc3QgY2hhcioqKSBmaW5hbDsKICAg
ICB2b2lkIGZpbmFsaXplKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQp
IGZpbmFsOwogfTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJOb0lk
ZW50aWZpZXIuY3BwCShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSGVh
cEFuYWx5emVyLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNDSW5saW5lcy5oPgogI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTRGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLmg+
CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvU2xvdFZpc2l0b3JNYWNyb3MuaD4KICNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9TdWJzcGFjZUlubGluZXMuaD4KICNpbmNsdWRlIDx3dGYvR2V0UHRy
Lmg+CiAjaW5jbHVkZSA8d3RmL1BvaW50ZXJQcmVwYXJhdGlvbnMuaD4KQEAgLTI5Myw3ICsyOTQs
OSBAQCBKU0M6Oklzb1N1YnNwYWNlKiBKU1Rlc3ROYW1lZFNldHRlck5vSWRlCiAgICAgYXV0byog
c3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3ROYW1lZFNldHRlck5vSWRlbnRpZmllci5n
ZXQoKTsKIElHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCiBJR05PUkVf
V0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKLSAgICBpZiAoJkpTVGVzdE5h
bWVkU2V0dGVyTm9JZGVudGlmaWVyOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzICE9ICZKU0M6OkpT
Q2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50cykKKyAgICB2b2lkICgqbXlWaXNpdE91dHB1dENv
bnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0TmFtZWRT
ZXR0ZXJOb0lkZW50aWZpZXI6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAgdm9pZCAoKmpz
Q2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9y
JikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKKyAgICBpZiAobXlWaXNp
dE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQogICAgICAg
ICBjbGllbnREYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOwogSUdO
T1JFX1dBUk5JTkdTX0VORAogSUdOT1JFX1dBUk5JTkdTX0VORApAQCAtMzA5LDcgKzMxMiw3IEBA
IHZvaWQgSlNUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXI6OmFuYWwKICAgICBCYXNlOjphbmFs
eXplSGVhcChjZWxsLCBhbmFseXplcik7CiB9CiAKLWJvb2wgSlNUZXN0TmFtZWRTZXR0ZXJOb0lk
ZW50aWZpZXJPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlND
OjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hh
cioqIHJlYXNvbikKK2Jvb2wgSlNUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXJPd25lcjo6aXNS
ZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUs
IHZvaWQqLCBBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29u
KQogewogICAgIFVOVVNFRF9QQVJBTShoYW5kbGUpOwogICAgIFVOVVNFRF9QQVJBTSh2aXNpdG9y
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RO
YW1lZFNldHRlck5vSWRlbnRpZmllci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlck5vSWRlbnRpZmllci5oCShy
ZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNzMs
NyArNzMsNyBAQCBwcm90ZWN0ZWQ6CiAKIGNsYXNzIEpTVGVzdE5hbWVkU2V0dGVyTm9JZGVudGlm
aWVyT3duZXIgZmluYWwgOiBwdWJsaWMgSlNDOjpXZWFrSGFuZGxlT3duZXIgewogcHVibGljOgot
ICAgIGJvb2wgaXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtu
b3duPiwgdm9pZCogY29udGV4dCwgSlNDOjpTbG90VmlzaXRvciYsIGNvbnN0IGNoYXIqKikgZmlu
YWw7CisgICAgYm9vbCBpc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6
OlVua25vd24+LCB2b2lkKiBjb250ZXh0LCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImLCBjb25z
dCBjaGFyKiopIGZpbmFsOwogICAgIHZvaWQgZmluYWxpemUoSlNDOjpIYW5kbGU8SlNDOjpVbmtu
b3duPiwgdm9pZCogY29udGV4dCkgZmluYWw7CiB9OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlv
bi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24uY3BwCShyZXZpc2lvbiAyNzMx
MTkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFt
ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDYgKzM1
LDcgQEAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9IZWFwQW5hbHl6ZXIuaD4KICNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9KU0NJbmxpbmVzLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
SlNEZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9TbG90VmlzaXRvck1hY3Jvcy5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1N1YnNw
YWNlSW5saW5lcy5oPgogI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KICNpbmNsdWRlIDx3dGYvUG9p
bnRlclByZXBhcmF0aW9ucy5oPgpAQCAtMjkzLDcgKzI5NCw5IEBAIEpTQzo6SXNvU3Vic3BhY2Uq
IEpTVGVzdE5hbWVkU2V0dGVyVGhyb3cKICAgICBhdXRvKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNw
YWNlRm9yVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24uZ2V0KCk7CiBJR05PUkVfV0FS
TklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQogSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0
YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgaWYgKCZKU1Rlc3ROYW1lZFNldHRlclRocm93aW5n
RXhjZXB0aW9uOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzICE9ICZKU0M6OkpTQ2VsbDo6dmlzaXRP
dXRwdXRDb25zdHJhaW50cykKKyAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpT
Qzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0TmFtZWRTZXR0ZXJUaHJvd2lu
Z0V4Y2VwdGlvbjo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKKyAgICB2b2lkICgqanNDZWxsVmlz
aXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpT
Qzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOworICAgIGlmIChteVZpc2l0T3V0cHV0
Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCiAgICAgICAgIGNsaWVu
dERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7CiBJR05PUkVfV0FS
TklOR1NfRU5ECiBJR05PUkVfV0FSTklOR1NfRU5ECkBAIC0zMDksNyArMzEyLDcgQEAgdm9pZCBK
U1Rlc3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0aW9uOgogICAgIEJhc2U6OmFuYWx5emVIZWFw
KGNlbGwsIGFuYWx5emVyKTsKIH0KIAotYm9vbCBKU1Rlc3ROYW1lZFNldHRlclRocm93aW5nRXhj
ZXB0aW9uT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6
VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgU2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIq
KiByZWFzb24pCitib29sIEpTVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb25Pd25lcjo6
aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5k
bGUsIHZvaWQqLCBBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVh
c29uKQogewogICAgIFVOVVNFRF9QQVJBTShoYW5kbGUpOwogICAgIFVOVVNFRF9QQVJBTSh2aXNp
dG9yKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdF
eGNlcHRpb24uaAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24uaAkod29y
a2luZyBjb3B5KQpAQCAtNzMsNyArNzMsNyBAQCBwcm90ZWN0ZWQ6CiAKIGNsYXNzIEpTVGVzdE5h
bWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb25Pd25lciBmaW5hbCA6IHB1YmxpYyBKU0M6OldlYWtI
YW5kbGVPd25lciB7CiBwdWJsaWM6Ci0gICAgYm9vbCBpc1JlYWNoYWJsZUZyb21PcGFxdWVSb290
cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0LCBKU0M6OlNsb3RWaXNp
dG9yJiwgY29uc3QgY2hhcioqKSBmaW5hbDsKKyAgICBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1
ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6QWJz
dHJhY3RTbG90VmlzaXRvciYsIGNvbnN0IGNoYXIqKikgZmluYWw7CiAgICAgdm9pZCBmaW5hbGl6
ZShKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0KSBmaW5hbDsKIH07CiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1l
ZFNldHRlcldpdGhJZGVudGlmaWVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5j
cHAJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhJZGVudGlmaWVyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0hlYXBBbmFseXpl
ci5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTQ0lubGluZXMuaD4KICNpbmNsdWRlIDxK
YXZhU2NyaXB0Q29yZS9KU0Rlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZS5oPgorI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL1Nsb3RWaXNpdG9yTWFjcm9zLmg+CiAjaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvU3Vic3BhY2VJbmxpbmVzLmg+CiAjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgogI2lu
Y2x1ZGUgPHd0Zi9Qb2ludGVyUHJlcGFyYXRpb25zLmg+CkBAIC0zMjksNyArMzMwLDkgQEAgSlND
OjpJc29TdWJzcGFjZSogSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSQogICAgIGF1dG8qIHNwYWNlID0g
c3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5nZXQoKTsK
IElHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCiBJR05PUkVfV0FSTklO
R1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKLSAgICBpZiAoJkpTVGVzdE5hbWVkU2V0
dGVyV2l0aElkZW50aWZpZXI6OnZpc2l0T3V0cHV0Q29uc3RyYWludHMgIT0gJkpTQzo6SlNDZWxs
Ojp2aXNpdE91dHB1dENvbnN0cmFpbnRzKQorICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3Ry
YWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3ROYW1lZFNldHRl
cldpdGhJZGVudGlmaWVyOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOworICAgIHZvaWQgKCpqc0Nl
bGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYp
ID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAgaWYgKG15VmlzaXRP
dXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKICAgICAgICAg
Y2xpZW50RGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKIElHTk9S
RV9XQVJOSU5HU19FTkQKIElHTk9SRV9XQVJOSU5HU19FTkQKQEAgLTM0NSw3ICszNDgsNyBAQCB2
b2lkIEpTVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXI6OmFuCiAgICAgQmFzZTo6YW5hbHl6
ZUhlYXAoY2VsbCwgYW5hbHl6ZXIpOwogfQogCi1ib29sIEpTVGVzdE5hbWVkU2V0dGVyV2l0aElk
ZW50aWZpZXJPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlND
OjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hh
cioqIHJlYXNvbikKK2Jvb2wgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllck93bmVyOjpp
c1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRs
ZSwgdm9pZCosIEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFz
b24pCiB7CiAgICAgVU5VU0VEX1BBUkFNKGhhbmRsZSk7CiAgICAgVU5VU0VEX1BBUkFNKHZpc2l0
b3IpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmll
ci5oCShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5oCSh3b3JraW5nIGNvcHkp
CkBAIC03Myw3ICs3Myw3IEBAIHByb3RlY3RlZDoKIAogY2xhc3MgSlNUZXN0TmFtZWRTZXR0ZXJX
aXRoSWRlbnRpZmllck93bmVyIGZpbmFsIDogcHVibGljIEpTQzo6V2Vha0hhbmRsZU93bmVyIHsK
IHB1YmxpYzoKLSAgICBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxl
PEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6U2xvdFZpc2l0b3ImLCBjb25zdCBj
aGFyKiopIGZpbmFsOworICAgIGJvb2wgaXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpI
YW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCwgSlNDOjpBYnN0cmFjdFNsb3RWaXNp
dG9yJiwgY29uc3QgY2hhcioqKSBmaW5hbDsKICAgICB2b2lkIGZpbmFsaXplKEpTQzo6SGFuZGxl
PEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQpIGZpbmFsOwogfTsKIApJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aElu
ZGV4ZWRHZXR0ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyLmNwcAkocmV2
aXNpb24gMjczMTE5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zOCw2ICszOCw3IEBACiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNDSW5saW5lcy5oPgog
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTRGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBl
Lmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvUHJvcGVydHlOYW1lQXJyYXkuaD4KKyNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9TbG90VmlzaXRvck1hY3Jvcy5oPgogI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL1N1YnNwYWNlSW5saW5lcy5oPgogI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KICNp
bmNsdWRlIDx3dGYvUG9pbnRlclByZXBhcmF0aW9ucy5oPgpAQCAtMzc0LDcgKzM3NSw5IEBAIEpT
Qzo6SXNvU3Vic3BhY2UqIEpTVGVzdE5hbWVkU2V0dGVyV2l0aEkKICAgICBhdXRvKiBzcGFjZSA9
IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXIuZ2V0
KCk7CiBJR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQogSUdOT1JFX1dB
Uk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgaWYgKCZKU1Rlc3ROYW1l
ZFNldHRlcldpdGhJbmRleGVkR2V0dGVyOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzICE9ICZKU0M6
OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50cykKKyAgICB2b2lkICgqbXlWaXNpdE91dHB1
dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0TmFt
ZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlcjo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKKyAgICB2
b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xv
dFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOworICAgIGlm
IChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQp
CiAgICAgICAgIGNsaWVudERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFj
ZSk7CiBJR05PUkVfV0FSTklOR1NfRU5ECiBJR05PUkVfV0FSTklOR1NfRU5ECkBAIC0zOTAsNyAr
MzkzLDcgQEAgdm9pZCBKU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyOgogICAgIEJh
c2U6OmFuYWx5emVIZWFwKGNlbGwsIGFuYWx5emVyKTsKIH0KIAotYm9vbCBKU1Rlc3ROYW1lZFNl
dHRlcldpdGhJbmRleGVkR2V0dGVyT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpT
Qzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgU2xvdFZpc2l0b3ImIHZpc2l0
b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCitib29sIEpTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4
ZWRHZXR0ZXJPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlND
OjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBj
b25zdCBjaGFyKiogcmVhc29uKQogewogICAgIFVOVVNFRF9QQVJBTShoYW5kbGUpOwogICAgIFVO
VVNFRF9QQVJBTSh2aXNpdG9yKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVk
U2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXIuaAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4
ZWRHZXR0ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNzMsNyArNzMsNyBAQCBwcm90ZWN0ZWQ6CiAK
IGNsYXNzIEpTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJPd25lciBmaW5hbCA6IHB1
YmxpYyBKU0M6OldlYWtIYW5kbGVPd25lciB7CiBwdWJsaWM6Ci0gICAgYm9vbCBpc1JlYWNoYWJs
ZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0
LCBKU0M6OlNsb3RWaXNpdG9yJiwgY29uc3QgY2hhcioqKSBmaW5hbDsKKyAgICBib29sIGlzUmVh
Y2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNv
bnRleHQsIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYsIGNvbnN0IGNoYXIqKikgZmluYWw7CiAg
ICAgdm9pZCBmaW5hbGl6ZShKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0
KSBmaW5hbDsKIH07CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQW5kU2V0dGVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRlci5jcHAJKHJldmlzaW9uIDI3MzEx
OSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1l
ZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQW5kU2V0dGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzgsNiArMzgsNyBAQAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTQ0lubGluZXMuaD4KICNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0Rlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZS5o
PgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1Byb3BlcnR5TmFtZUFycmF5Lmg+CisjaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvU2xvdFZpc2l0b3JNYWNyb3MuaD4KICNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9TdWJzcGFjZUlubGluZXMuaD4KICNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CiAjaW5j
bHVkZSA8d3RmL1BvaW50ZXJQcmVwYXJhdGlvbnMuaD4KQEAgLTQyOSw3ICs0MzAsOSBAQCBKU0M6
Oklzb1N1YnNwYWNlKiBKU1Rlc3ROYW1lZFNldHRlcldpdGhJCiAgICAgYXV0byogc3BhY2UgPSBz
cGFjZXMubV9zdWJzcGFjZUZvclRlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQW5kU2V0
dGVyLmdldCgpOwogSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKIElH
Tk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQotICAgIGlmICgmSlNU
ZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRlcjo6dmlzaXRPdXRwdXRDb25z
dHJhaW50cyAhPSAmSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHMpCisgICAgdm9p
ZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0
b3ImKSA9IEpTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRTZXR0ZXI6OnZpc2l0
T3V0cHV0Q29uc3RyYWludHM7CisgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWlu
dCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRP
dXRwdXRDb25zdHJhaW50czsKKyAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganND
ZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQogICAgICAgICBjbGllbnREYXRhLm91dHB1dENvbnN0
cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOwogSUdOT1JFX1dBUk5JTkdTX0VORAogSUdOT1JF
X1dBUk5JTkdTX0VORApAQCAtNDQ1LDcgKzQ0OCw3IEBAIHZvaWQgSlNUZXN0TmFtZWRTZXR0ZXJX
aXRoSW5kZXhlZEdldHRlckEKICAgICBCYXNlOjphbmFseXplSGVhcChjZWxsLCBhbmFseXplcik7
CiB9CiAKLWJvb2wgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRlck93
bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+
IGhhbmRsZSwgdm9pZCosIFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29u
KQorYm9vbCBKU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQW5kU2V0dGVyT3duZXI6
OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFu
ZGxlLCB2b2lkKiwgQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJl
YXNvbikKIHsKICAgICBVTlVTRURfUEFSQU0oaGFuZGxlKTsKICAgICBVTlVTRURfUEFSQU0odmlz
aXRvcik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRlci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRl
cldpdGhJbmRleGVkR2V0dGVyQW5kU2V0dGVyLmgJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhJ
bmRleGVkR2V0dGVyQW5kU2V0dGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTczLDcgKzczLDcgQEAg
cHJvdGVjdGVkOgogCiBjbGFzcyBKU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQW5k
U2V0dGVyT3duZXIgZmluYWwgOiBwdWJsaWMgSlNDOjpXZWFrSGFuZGxlT3duZXIgewogcHVibGlj
OgotICAgIGJvb2wgaXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpV
bmtub3duPiwgdm9pZCogY29udGV4dCwgSlNDOjpTbG90VmlzaXRvciYsIGNvbnN0IGNoYXIqKikg
ZmluYWw7CisgICAgYm9vbCBpc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxK
U0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0LCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImLCBj
b25zdCBjaGFyKiopIGZpbmFsOwogICAgIHZvaWQgZmluYWxpemUoSlNDOjpIYW5kbGU8SlNDOjpV
bmtub3duPiwgdm9pZCogY29udGV4dCkgZmluYWw7CiB9OwogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5T3Zl
cnJpZGVCdWlsdElucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeU92ZXJyaWRlQnVpbHRJ
bnMuY3BwCShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5T3ZlcnJpZGVCdWlsdElucy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9IZWFwQW5hbHl6ZXIuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0NJbmxpbmVz
Lmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNEZXN0cnVjdGlibGVPYmplY3RIZWFwQ2Vs
bFR5cGUuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9TbG90VmlzaXRvck1hY3Jvcy5oPgog
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1N1YnNwYWNlSW5saW5lcy5oPgogI2luY2x1ZGUgPHd0
Zi9HZXRQdHIuaD4KICNpbmNsdWRlIDx3dGYvUG9pbnRlclByZXBhcmF0aW9ucy5oPgpAQCAtMjc0
LDcgKzI3NSw5IEBAIEpTQzo6SXNvU3Vic3BhY2UqIEpTVGVzdE5hbWVkU2V0dGVyV2l0aEwKICAg
ICBhdXRvKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE5hbWVkU2V0dGVyV2l0aExl
Z2FjeU92ZXJyaWRlQnVpbHRJbnMuZ2V0KCk7CiBJR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVh
Y2hhYmxlLWNvZGUiKQogSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFy
ZSIpCi0gICAgaWYgKCZKU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lPdmVycmlkZUJ1aWx0SW5z
Ojp2aXNpdE91dHB1dENvbnN0cmFpbnRzICE9ICZKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25z
dHJhaW50cykKKyAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxs
KiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5T3ZlcnJp
ZGVCdWlsdEluczo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKKyAgICB2b2lkICgqanNDZWxsVmlz
aXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpT
Qzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOworICAgIGlmIChteVZpc2l0T3V0cHV0
Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCiAgICAgICAgIGNsaWVu
dERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7CiBJR05PUkVfV0FS
TklOR1NfRU5ECiBJR05PUkVfV0FSTklOR1NfRU5ECkBAIC0yOTAsNyArMjkzLDcgQEAgdm9pZCBK
U1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lPdmVycmlkZQogICAgIEJhc2U6OmFuYWx5emVIZWFw
KGNlbGwsIGFuYWx5emVyKTsKIH0KIAotYm9vbCBKU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lP
dmVycmlkZUJ1aWx0SW5zT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFu
ZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgU2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNv
bnN0IGNoYXIqKiByZWFzb24pCitib29sIEpTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeU92ZXJy
aWRlQnVpbHRJbnNPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8
SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9y
LCBjb25zdCBjaGFyKiogcmVhc29uKQogewogICAgIFVOVVNFRF9QQVJBTShoYW5kbGUpOwogICAg
IFVOVVNFRF9QQVJBTSh2aXNpdG9yKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lPdmVycmlkZUJ1aWx0SW5z
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMuaAkocmV2aXNpb24g
MjczMTE5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dE5hbWVkU2V0dGVyV2l0aExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMuaAkod29ya2luZyBjb3B5KQpA
QCAtNzMsNyArNzMsNyBAQCBwcm90ZWN0ZWQ6CiAKIGNsYXNzIEpTVGVzdE5hbWVkU2V0dGVyV2l0
aExlZ2FjeU92ZXJyaWRlQnVpbHRJbnNPd25lciBmaW5hbCA6IHB1YmxpYyBKU0M6OldlYWtIYW5k
bGVPd25lciB7CiBwdWJsaWM6Ci0gICAgYm9vbCBpc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhK
U0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0LCBKU0M6OlNsb3RWaXNpdG9y
JiwgY29uc3QgY2hhcioqKSBmaW5hbDsKKyAgICBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJv
b3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6QWJzdHJh
Y3RTbG90VmlzaXRvciYsIGNvbnN0IGNoYXIqKikgZmluYWw7CiAgICAgdm9pZCBmaW5hbGl6ZShK
U0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0KSBmaW5hbDsKIH07CiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNl
dHRlcldpdGhMZWdhY3lVbmZvcmdlYWJsZVByb3BlcnRpZXMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldp
dGhMZWdhY3lVbmZvcmdlYWJsZVByb3BlcnRpZXMuY3BwCShyZXZpc2lvbiAyNzMxMTkpCisrKyBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJX
aXRoTGVnYWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcs
NiArMzcsNyBAQAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0hlYXBBbmFseXplci5oPgogI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTQ0lubGluZXMuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9KU0Rlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZS5oPgorI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL1Nsb3RWaXNpdG9yTWFjcm9zLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
U3Vic3BhY2VJbmxpbmVzLmg+CiAjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgogI2luY2x1ZGUgPHd0
Zi9Qb2ludGVyUHJlcGFyYXRpb25zLmg+CkBAIC0zNjQsNyArMzY1LDkgQEAgSlNDOjpJc29TdWJz
cGFjZSogSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTAogICAgIGF1dG8qIHNwYWNlID0gc3BhY2VzLm1f
c3Vic3BhY2VGb3JUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVz
LmdldCgpOwogSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKIElHTk9S
RV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQotICAgIGlmICgmSlNUZXN0
TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVzOjp2aXNpdE91dHB1dENv
bnN0cmFpbnRzICE9ICZKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50cykKKyAgICB2
b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90Vmlz
aXRvciYpID0gSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVz
Ojp2aXNpdE91dHB1dENvbnN0cmFpbnRzOworICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENv
bnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6
OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50
ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKICAgICAgICAgY2xpZW50RGF0YS5vdXRw
dXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKIElHTk9SRV9XQVJOSU5HU19FTkQK
IElHTk9SRV9XQVJOSU5HU19FTkQKQEAgLTM4MCw3ICszODMsNyBAQCB2b2lkIEpTVGVzdE5hbWVk
U2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2VhCiAgICAgQmFzZTo6YW5hbHl6ZUhlYXAoY2VsbCwgYW5h
bHl6ZXIpOwogfQogCi1ib29sIEpTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxl
UHJvcGVydGllc093bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxK
U0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBj
aGFyKiogcmVhc29uKQorYm9vbCBKU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lVbmZvcmdlYWJs
ZVByb3BlcnRpZXNPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8
SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9y
LCBjb25zdCBjaGFyKiogcmVhc29uKQogewogICAgIFVOVVNFRF9QQVJBTShoYW5kbGUpOwogICAg
IFVOVVNFRF9QQVJBTSh2aXNpdG9yKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lVbmZvcmdlYWJsZVByb3Bl
cnRpZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVzLmgJ
KHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lVbmZvcmdlYWJsZVByb3BlcnRpZXMuaAko
d29ya2luZyBjb3B5KQpAQCAtNzMsNyArNzMsNyBAQCBwcm90ZWN0ZWQ6CiAKIGNsYXNzIEpTVGVz
dE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllc093bmVyIGZpbmFsIDog
cHVibGljIEpTQzo6V2Vha0hhbmRsZU93bmVyIHsKIHB1YmxpYzoKLSAgICBib29sIGlzUmVhY2hh
YmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRl
eHQsIEpTQzo6U2xvdFZpc2l0b3ImLCBjb25zdCBjaGFyKiopIGZpbmFsOworICAgIGJvb2wgaXNS
ZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCog
Y29udGV4dCwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiwgY29uc3QgY2hhcioqKSBmaW5hbDsK
ICAgICB2b2lkIGZpbmFsaXplKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRl
eHQpIGZpbmFsOwogfTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllc0Fu
ZExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lVbmZv
cmdlYWJsZVByb3BlcnRpZXNBbmRMZWdhY3lPdmVycmlkZUJ1aWx0SW5zLmNwcAkocmV2aXNpb24g
MjczMTE5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllc0FuZExlZ2FjeU92ZXJy
aWRlQnVpbHRJbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw2ICszNyw3IEBACiAjaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvSGVhcEFuYWx5emVyLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvSlNDSW5saW5lcy5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTRGVzdHJ1Y3RpYmxl
T2JqZWN0SGVhcENlbGxUeXBlLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvU2xvdFZpc2l0
b3JNYWNyb3MuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9TdWJzcGFjZUlubGluZXMuaD4K
ICNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CiAjaW5jbHVkZSA8d3RmL1BvaW50ZXJQcmVwYXJhdGlv
bnMuaD4KQEAgLTM0NSw3ICszNDYsOSBAQCBKU0M6Oklzb1N1YnNwYWNlKiBKU1Rlc3ROYW1lZFNl
dHRlcldpdGhMCiAgICAgYXV0byogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3ROYW1l
ZFNldHRlcldpdGhMZWdhY3lVbmZvcmdlYWJsZVByb3BlcnRpZXNBbmRMZWdhY3lPdmVycmlkZUJ1
aWx0SW5zLmdldCgpOwogSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikK
IElHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQotICAgIGlmICgm
SlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVzQW5kTGVnYWN5
T3ZlcnJpZGVCdWlsdEluczo6dmlzaXRPdXRwdXRDb25zdHJhaW50cyAhPSAmSlNDOjpKU0NlbGw6
OnZpc2l0T3V0cHV0Q29uc3RyYWludHMpCisgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJh
aW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdE5hbWVkU2V0dGVy
V2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllc0FuZExlZ2FjeU92ZXJyaWRlQnVpbHRJbnM6
OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29u
c3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6
dmlzaXRPdXRwdXRDb25zdHJhaW50czsKKyAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQg
IT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQogICAgICAgICBjbGllbnREYXRhLm91dHB1
dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOwogSUdOT1JFX1dBUk5JTkdTX0VORAog
SUdOT1JFX1dBUk5JTkdTX0VORApAQCAtMzYxLDcgKzM2NCw3IEBAIHZvaWQgSlNUZXN0TmFtZWRT
ZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWEKICAgICBCYXNlOjphbmFseXplSGVhcChjZWxsLCBhbmFs
eXplcik7CiB9CiAKLWJvb2wgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWFibGVQ
cm9wZXJ0aWVzQW5kTGVnYWN5T3ZlcnJpZGVCdWlsdEluc093bmVyOjppc1JlYWNoYWJsZUZyb21P
cGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIFNsb3RW
aXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQorYm9vbCBKU1Rlc3ROYW1lZFNl
dHRlcldpdGhMZWdhY3lVbmZvcmdlYWJsZVByb3BlcnRpZXNBbmRMZWdhY3lPdmVycmlkZUJ1aWx0
SW5zT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5r
bm93bj4gaGFuZGxlLCB2b2lkKiwgQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3Qg
Y2hhcioqIHJlYXNvbikKIHsKICAgICBVTlVTRURfUEFSQU0oaGFuZGxlKTsKICAgICBVTlVTRURf
UEFSQU0odmlzaXRvcik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVzQW5k
TGVnYWN5T3ZlcnJpZGVCdWlsdElucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lVbmZvcmdl
YWJsZVByb3BlcnRpZXNBbmRMZWdhY3lPdmVycmlkZUJ1aWx0SW5zLmgJKHJldmlzaW9uIDI3MzEx
OSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1l
ZFNldHRlcldpdGhMZWdhY3lVbmZvcmdlYWJsZVByb3BlcnRpZXNBbmRMZWdhY3lPdmVycmlkZUJ1
aWx0SW5zLmgJKHdvcmtpbmcgY29weSkKQEAgLTczLDcgKzczLDcgQEAgcHJvdGVjdGVkOgogCiBj
bGFzcyBKU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lVbmZvcmdlYWJsZVByb3BlcnRpZXNBbmRM
ZWdhY3lPdmVycmlkZUJ1aWx0SW5zT3duZXIgZmluYWwgOiBwdWJsaWMgSlNDOjpXZWFrSGFuZGxl
T3duZXIgewogcHVibGljOgotICAgIGJvb2wgaXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlND
OjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCwgSlNDOjpTbG90VmlzaXRvciYs
IGNvbnN0IGNoYXIqKikgZmluYWw7CisgICAgYm9vbCBpc1JlYWNoYWJsZUZyb21PcGFxdWVSb290
cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0LCBKU0M6OkFic3RyYWN0
U2xvdFZpc2l0b3ImLCBjb25zdCBjaGFyKiopIGZpbmFsOwogICAgIHZvaWQgZmluYWxpemUoSlND
OjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCkgZmluYWw7CiB9OwogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Tm9kZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdE5vZGUuY3BwCShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Tm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzLDYg
KzQzLDcgQEAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0NJbmxpbmVzLmg+CiAjaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvSlNEZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUuaD4KICNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9PYmplY3RDb25zdHJ1Y3Rvci5oPgorI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL1Nsb3RWaXNpdG9yTWFjcm9zLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvU3Vic3BhY2VJbmxpbmVzLmg+CiAjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgogI2luY2x1ZGUg
PHd0Zi9Qb2ludGVyUHJlcGFyYXRpb25zLmg+CkBAIC00MTUsNyArNDE2LDkgQEAgcHVibGljOgog
ICAgICAgICBhdXRvKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE5vZGVJdGVyYXRv
ci5nZXQoKTsKIElHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCiBJR05P
UkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKLSAgICAgICAgaWYgKCZU
ZXN0Tm9kZUl0ZXJhdG9yOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzICE9ICZKU0M6OkpTQ2VsbDo6
dmlzaXRPdXRwdXRDb25zdHJhaW50cykKKyAgICAgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25z
dHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IFRlc3ROb2RlSXRlcmF0
b3I6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAgICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91
dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpK
U0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAgICAgIGlmIChteVZpc2l0T3V0cHV0
Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCiAgICAgICAgICAgICBj
bGllbnREYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOwogSUdOT1JF
X1dBUk5JTkdTX0VORAogSUdOT1JFX1dBUk5JTkdTX0VORApAQCAtNTA1LDcgKzUwOCw5IEBAIEpT
Qzo6SXNvU3Vic3BhY2UqIEpTVGVzdE5vZGU6OnN1YnNwYWNlRm8KICAgICBhdXRvKiBzcGFjZSA9
IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE5vZGUuZ2V0KCk7CiBJR05PUkVfV0FSTklOR1NfQkVH
SU4oInVucmVhY2hhYmxlLWNvZGUiKQogSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2lj
YWwtY29tcGFyZSIpCi0gICAgaWYgKCZKU1Rlc3ROb2RlOjp2aXNpdE91dHB1dENvbnN0cmFpbnRz
ICE9ICZKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50cykKKyAgICB2b2lkICgqbXlW
aXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0g
SlNUZXN0Tm9kZTo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKKyAgICB2b2lkICgqanNDZWxsVmlz
aXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpT
Qzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOworICAgIGlmIChteVZpc2l0T3V0cHV0
Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCiAgICAgICAgIGNsaWVu
dERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7CiBJR05PUkVfV0FS
TklOR1NfRU5ECiBJR05PUkVfV0FSTklOR1NfRU5ECkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcAkocmV2aXNpb24g
MjczMTE5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dE9iai5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkyLDYgKzkyLDcgQEAKICNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9KU1N0cmluZy5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL09iamVjdENv
bnN0cnVjdG9yLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvUHJvcGVydHlOYW1lQXJyYXku
aD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9TbG90VmlzaXRvck1hY3Jvcy5oPgogI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL1N1YnNwYWNlSW5saW5lcy5oPgogI2luY2x1ZGUgPHd0Zi9HZXRQ
dHIuaD4KICNpbmNsdWRlIDx3dGYvUG9pbnRlclByZXBhcmF0aW9ucy5oPgpAQCAtOTQ1OSwxNCAr
OTQ2MCwxNyBAQCBKU0M6Oklzb1N1YnNwYWNlKiBKU1Rlc3RPYmo6OnN1YnNwYWNlRm9yCiAgICAg
YXV0byogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RPYmouZ2V0KCk7CiBJR05PUkVf
V0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQogSUdOT1JFX1dBUk5JTkdTX0JFR0lO
KCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgaWYgKCZKU1Rlc3RPYmo6OnZpc2l0T3V0cHV0
Q29uc3RyYWludHMgIT0gJkpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzKQorICAg
IHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RW
aXNpdG9yJikgPSBKU1Rlc3RPYmo6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAgdm9pZCAo
KmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNp
dG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKKyAgICBpZiAobXlW
aXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQogICAg
ICAgICBjbGllbnREYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOwog
SUdOT1JFX1dBUk5JTkdTX0VORAogSUdOT1JFX1dBUk5JTkdTX0VORAogICAgIHJldHVybiBzcGFj
ZTsKIH0KIAotdm9pZCBKU1Rlc3RPYmo6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90
VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTVGVz
dE9iajo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQog
ewogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0T2JqKj4oY2VsbCk7CiAgICAg
QVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtOTQ3OCw2
ICs5NDgyLDggQEAgdm9pZCBKU1Rlc3RPYmo6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZQogI2Vu
ZGlmCiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU1Rlc3RPYmopOworCiB2b2lkIEpTVGVz
dE9iajo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQog
ewogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0T2JqKj4oY2VsbCk7CkBAIC05
NDg3LDcgKzk0OTMsNyBAQCB2b2lkIEpTVGVzdE9iajo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxs
CiAgICAgQmFzZTo6YW5hbHl6ZUhlYXAoY2VsbCwgYW5hbHl6ZXIpOwogfQogCi1ib29sIEpTVGVz
dE9iak93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVu
a25vd24+IGhhbmRsZSwgdm9pZCosIFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiog
cmVhc29uKQorYm9vbCBKU1Rlc3RPYmpPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMo
SlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBBYnN0cmFjdFNsb3RWaXNp
dG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQogewogICAgIFVOVVNFRF9QQVJBTSho
YW5kbGUpOwogICAgIFVOVVNFRF9QQVJBTSh2aXNpdG9yKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmgJKHJldmlzaW9u
IDI3MzExOSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RPYmouaAkod29ya2luZyBjb3B5KQpAQCAtNjYsNyArNjYsNyBAQCBwdWJsaWM6CiAgICAgICAg
IHJldHVybiBzdWJzcGFjZUZvckltcGwodm0pOwogICAgIH0KICAgICBzdGF0aWMgSlNDOjpJc29T
dWJzcGFjZSogc3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKTsKLSAgICBzdGF0aWMgdm9pZCB2
aXNpdENoaWxkcmVuKEpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJ
U0lUX0NISUxEUkVOOwogCiAgICAgc3RhdGljIHZvaWQgYW5hbHl6ZUhlYXAoSlNDZWxsKiwgSlND
OjpIZWFwQW5hbHl6ZXImKTsKIApAQCAtOTEsNyArOTEsNyBAQCBwcm90ZWN0ZWQ6CiAKIGNsYXNz
IEpTVGVzdE9iak93bmVyIGZpbmFsIDogcHVibGljIEpTQzo6V2Vha0hhbmRsZU93bmVyIHsKIHB1
YmxpYzoKLSAgICBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpT
Qzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6U2xvdFZpc2l0b3ImLCBjb25zdCBjaGFy
KiopIGZpbmFsOworICAgIGJvb2wgaXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5k
bGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9y
JiwgY29uc3QgY2hhcioqKSBmaW5hbDsKICAgICB2b2lkIGZpbmFsaXplKEpTQzo6SGFuZGxlPEpT
Qzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQpIGZpbmFsOwogfTsKIApJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9wZXJhdGlvbkNvbmRpdGlvbmFs
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0T3BlcmF0aW9uQ29uZGl0aW9uYWwuY3BwCShyZXZpc2lvbiAyNzMxMTkpCisrKyBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3BlcmF0aW9uQ29u
ZGl0aW9uYWwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw2ICszNyw3IEBACiAjaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvSGVhcEFuYWx5emVyLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
SlNDSW5saW5lcy5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTRGVzdHJ1Y3RpYmxlT2Jq
ZWN0SGVhcENlbGxUeXBlLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvU2xvdFZpc2l0b3JN
YWNyb3MuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9TdWJzcGFjZUlubGluZXMuaD4KICNp
bmNsdWRlIDx3dGYvR2V0UHRyLmg+CiAjaW5jbHVkZSA8d3RmL1BvaW50ZXJQcmVwYXJhdGlvbnMu
aD4KQEAgLTI0MCw3ICsyNDEsOSBAQCBKU0M6Oklzb1N1YnNwYWNlKiBKU1Rlc3RPcGVyYXRpb25D
b25kaXRpCiAgICAgYXV0byogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RPcGVyYXRp
b25Db25kaXRpb25hbC5nZXQoKTsKIElHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUt
Y29kZSIpCiBJR05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKLSAg
ICBpZiAoJkpTVGVzdE9wZXJhdGlvbkNvbmRpdGlvbmFsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRz
ICE9ICZKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50cykKKyAgICB2b2lkICgqbXlW
aXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0g
SlNUZXN0T3BlcmF0aW9uQ29uZGl0aW9uYWw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAg
dm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNs
b3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKKyAgICBp
ZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50
KQogICAgICAgICBjbGllbnREYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3Bh
Y2UpOwogSUdOT1JFX1dBUk5JTkdTX0VORAogSUdOT1JFX1dBUk5JTkdTX0VORApAQCAtMjU2LDcg
KzI1OSw3IEBAIHZvaWQgSlNUZXN0T3BlcmF0aW9uQ29uZGl0aW9uYWw6OmFuYWx5emUKICAgICBC
YXNlOjphbmFseXplSGVhcChjZWxsLCBhbmFseXplcik7CiB9CiAKLWJvb2wgSlNUZXN0T3BlcmF0
aW9uQ29uZGl0aW9uYWxPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5k
bGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBTbG90VmlzaXRvciYgdmlzaXRvciwgY29u
c3QgY2hhcioqIHJlYXNvbikKK2Jvb2wgSlNUZXN0T3BlcmF0aW9uQ29uZGl0aW9uYWxPd25lcjo6
aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5k
bGUsIHZvaWQqLCBBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVh
c29uKQogewogICAgIFVOVVNFRF9QQVJBTShoYW5kbGUpOwogICAgIFVOVVNFRF9QQVJBTSh2aXNp
dG9yKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RPcGVyYXRpb25Db25kaXRpb25hbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPcGVyYXRpb25Db25kaXRpb25hbC5oCShyZXZp
c2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0T3BlcmF0aW9uQ29uZGl0aW9uYWwuaAkod29ya2luZyBjb3B5KQpAQCAtNjcsNyArNjcs
NyBAQCBwcm90ZWN0ZWQ6CiAKIGNsYXNzIEpTVGVzdE9wZXJhdGlvbkNvbmRpdGlvbmFsT3duZXIg
ZmluYWwgOiBwdWJsaWMgSlNDOjpXZWFrSGFuZGxlT3duZXIgewogcHVibGljOgotICAgIGJvb2wg
aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9p
ZCogY29udGV4dCwgSlNDOjpTbG90VmlzaXRvciYsIGNvbnN0IGNoYXIqKikgZmluYWw7CisgICAg
Ym9vbCBpc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+
LCB2b2lkKiBjb250ZXh0LCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImLCBjb25zdCBjaGFyKiop
IGZpbmFsOwogICAgIHZvaWQgZmluYWxpemUoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9p
ZCogY29udGV4dCkgZmluYWw7CiB9OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE92ZXJs
b2FkZWRDb25zdHJ1Y3RvcnMuY3BwCShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDYgKzM5LDcgQEAKICNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9IZWFwQW5hbHl6ZXIuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0NJbmxpbmVz
Lmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNEZXN0cnVjdGlibGVPYmplY3RIZWFwQ2Vs
bFR5cGUuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9TbG90VmlzaXRvck1hY3Jvcy5oPgog
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1N1YnNwYWNlSW5saW5lcy5oPgogI2luY2x1ZGUgPHd0
Zi9HZXRQdHIuaD4KICNpbmNsdWRlIDx3dGYvUG9pbnRlclByZXBhcmF0aW9ucy5oPgpAQCAtMjk3
LDcgKzI5OCw5IEBAIEpTQzo6SXNvU3Vic3BhY2UqIEpTVGVzdE92ZXJsb2FkZWRDb25zdHIKICAg
ICBhdXRvKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE92ZXJsb2FkZWRDb25zdHJ1
Y3RvcnMuZ2V0KCk7CiBJR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQog
SUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgaWYgKCZK
U1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzICE9ICZK
U0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50cykKKyAgICB2b2lkICgqbXlWaXNpdE91
dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0
T3ZlcmxvYWRlZENvbnN0cnVjdG9yczo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKKyAgICB2b2lk
ICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZp
c2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOworICAgIGlmICht
eVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCiAg
ICAgICAgIGNsaWVudERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7
CiBJR05PUkVfV0FSTklOR1NfRU5ECiBJR05PUkVfV0FSTklOR1NfRU5ECkBAIC0zMTMsNyArMzE2
LDcgQEAgdm9pZCBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzOjphbmFseQogICAgIEJhc2U6
OmFuYWx5emVIZWFwKGNlbGwsIGFuYWx5emVyKTsKIH0KIAotYm9vbCBKU1Rlc3RPdmVybG9hZGVk
Q29uc3RydWN0b3JzT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxl
PEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgU2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0
IGNoYXIqKiByZWFzb24pCitib29sIEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNPd25lcjo6
aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5k
bGUsIHZvaWQqLCBBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVh
c29uKQogewogICAgIFVOVVNFRF9QQVJBTShoYW5kbGUpOwogICAgIFVOVVNFRF9QQVJBTSh2aXNp
dG9yKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RPdmVybG9hZGVkQ29uc3RydWN0b3JzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMuaAko
cmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMuaAkod29ya2luZyBjb3B5KQpAQCAtNjUs
NyArNjUsNyBAQCBwcm90ZWN0ZWQ6CiAKIGNsYXNzIEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3Rv
cnNPd25lciBmaW5hbCA6IHB1YmxpYyBKU0M6OldlYWtIYW5kbGVPd25lciB7CiBwdWJsaWM6Ci0g
ICAgYm9vbCBpc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25v
d24+LCB2b2lkKiBjb250ZXh0LCBKU0M6OlNsb3RWaXNpdG9yJiwgY29uc3QgY2hhcioqKSBmaW5h
bDsKKyAgICBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6
VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYsIGNvbnN0
IGNoYXIqKikgZmluYWw7CiAgICAgdm9pZCBmaW5hbGl6ZShKU0M6OkhhbmRsZTxKU0M6OlVua25v
d24+LCB2b2lkKiBjb250ZXh0KSBmaW5hbDsKIH07CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNl
cXVlbmNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZS5jcHAJKHJl
dmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzgsNiArMzgsNyBAQAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTQXJyYXku
aD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0NJbmxpbmVzLmg+CiAjaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvSlNEZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUuaD4KKyNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9TbG90VmlzaXRvck1hY3Jvcy5oPgogI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL1N1YnNwYWNlSW5saW5lcy5oPgogI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KICNpbmNs
dWRlIDx3dGYvUG9pbnRlclByZXBhcmF0aW9ucy5oPgpAQCAtMjQwLDcgKzI0MSw5IEBAIEpTQzo6
SXNvU3Vic3BhY2UqIEpTVGVzdE92ZXJsb2FkZWRDb25zdHIKICAgICBhdXRvKiBzcGFjZSA9IHNw
YWNlcy5tX3N1YnNwYWNlRm9yVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2Uu
Z2V0KCk7CiBJR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQogSUdOT1JF
X1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgaWYgKCZKU1Rlc3RP
dmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNlOjp2aXNpdE91dHB1dENvbnN0cmFpbnRz
ICE9ICZKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50cykKKyAgICB2b2lkICgqbXlW
aXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0g
SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZTo6dmlzaXRPdXRwdXRDb25z
dHJhaW50czsKKyAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpT
Q2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0
cmFpbnRzOworICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91
dHB1dENvbnN0cmFpbnQpCiAgICAgICAgIGNsaWVudERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNl
cygpLmFwcGVuZChzcGFjZSk7CiBJR05PUkVfV0FSTklOR1NfRU5ECiBJR05PUkVfV0FSTklOR1Nf
RU5ECkBAIC0yNTYsNyArMjU5LDcgQEAgdm9pZCBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3Jz
V2l0aFNlcQogICAgIEJhc2U6OmFuYWx5emVIZWFwKGNlbGwsIGFuYWx5emVyKTsKIH0KIAotYm9v
bCBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNlT3duZXI6OmlzUmVhY2hh
YmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lk
KiwgU2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCitib29sIEpTVGVz
dE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2VPd25lcjo6aXNSZWFjaGFibGVGcm9t
T3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBBYnN0
cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQogewogICAgIFVO
VVNFRF9QQVJBTShoYW5kbGUpOwogICAgIFVOVVNFRF9QQVJBTSh2aXNpdG9yKTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPdmVybG9hZGVkQ29u
c3RydWN0b3JzV2l0aFNlcXVlbmNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2Vx
dWVuY2UuaAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2UuaAko
d29ya2luZyBjb3B5KQpAQCAtNjUsNyArNjUsNyBAQCBwcm90ZWN0ZWQ6CiAKIGNsYXNzIEpTVGVz
dE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2VPd25lciBmaW5hbCA6IHB1YmxpYyBK
U0M6OldlYWtIYW5kbGVPd25lciB7CiBwdWJsaWM6Ci0gICAgYm9vbCBpc1JlYWNoYWJsZUZyb21P
cGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0LCBKU0M6
OlNsb3RWaXNpdG9yJiwgY29uc3QgY2hhcioqKSBmaW5hbDsKKyAgICBib29sIGlzUmVhY2hhYmxl
RnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQs
IEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYsIGNvbnN0IGNoYXIqKikgZmluYWw7CiAgICAgdm9p
ZCBmaW5hbGl6ZShKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0KSBmaW5h
bDsKIH07CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RQbHVnaW5JbnRlcmZhY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RQbHVnaW5JbnRlcmZhY2UuY3BwCShyZXZpc2lv
biAyNzMxMTkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0UGx1Z2luSW50ZXJmYWNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsNyBAQAog
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0hlYXBBbmFseXplci5oPgogI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL0pTQ0lubGluZXMuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0Rlc3Ry
dWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZS5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1Ns
b3RWaXNpdG9yTWFjcm9zLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvU3Vic3BhY2VJbmxp
bmVzLmg+CiAjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgogI2luY2x1ZGUgPHd0Zi9Qb2ludGVyUHJl
cGFyYXRpb25zLmg+CkBAIC0yMzQsNyArMjM1LDkgQEAgSlNDOjpJc29TdWJzcGFjZSogSlNUZXN0
UGx1Z2luSW50ZXJmYWNlOgogICAgIGF1dG8qIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JU
ZXN0UGx1Z2luSW50ZXJmYWNlLmdldCgpOwogSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNo
YWJsZS1jb2RlIikKIElHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUi
KQotICAgIGlmICgmSlNUZXN0UGx1Z2luSW50ZXJmYWNlOjp2aXNpdE91dHB1dENvbnN0cmFpbnRz
ICE9ICZKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50cykKKyAgICB2b2lkICgqbXlW
aXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0g
SlNUZXN0UGx1Z2luSW50ZXJmYWNlOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOworICAgIHZvaWQg
KCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90Vmlz
aXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAgaWYgKG15
VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKICAg
ICAgICAgY2xpZW50RGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsK
IElHTk9SRV9XQVJOSU5HU19FTkQKIElHTk9SRV9XQVJOSU5HU19FTkQKQEAgLTI1MCw3ICsyNTMs
NyBAQCB2b2lkIEpTVGVzdFBsdWdpbkludGVyZmFjZTo6YW5hbHl6ZUhlYXAoCiAgICAgQmFzZTo6
YW5hbHl6ZUhlYXAoY2VsbCwgYW5hbHl6ZXIpOwogfQogCi1ib29sIEpTVGVzdFBsdWdpbkludGVy
ZmFjZU93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVu
a25vd24+IGhhbmRsZSwgdm9pZCosIFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiog
cmVhc29uKQorYm9vbCBKU1Rlc3RQbHVnaW5JbnRlcmZhY2VPd25lcjo6aXNSZWFjaGFibGVGcm9t
T3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBBYnN0
cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQogewogICAgIFVO
VVNFRF9QQVJBTShoYW5kbGUpOwogICAgIFVOVVNFRF9QQVJBTSh2aXNpdG9yKTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RQbHVnaW5JbnRlcmZh
Y2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0UGx1Z2luSW50ZXJmYWNlLmgJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RQbHVnaW5JbnRlcmZhY2UuaAko
d29ya2luZyBjb3B5KQpAQCAtNzQsNyArNzQsNyBAQCBwcm90ZWN0ZWQ6CiAKIGNsYXNzIEpTVGVz
dFBsdWdpbkludGVyZmFjZU93bmVyIGZpbmFsIDogcHVibGljIEpTQzo6V2Vha0hhbmRsZU93bmVy
IHsKIHB1YmxpYzoKLSAgICBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFu
ZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6U2xvdFZpc2l0b3ImLCBjb25z
dCBjaGFyKiopIGZpbmFsOworICAgIGJvb2wgaXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlND
OjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCwgSlNDOjpBYnN0cmFjdFNsb3RW
aXNpdG9yJiwgY29uc3QgY2hhcioqKSBmaW5hbDsKICAgICB2b2lkIGZpbmFsaXplKEpTQzo6SGFu
ZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQpIGZpbmFsOwogfTsKIApJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFByb21pc2VSZWplY3Rp
b25FdmVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdFByb21pc2VSZWplY3Rpb25FdmVudC5jcHAJKHJldmlzaW9uIDI3MzEx
OSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RQcm9t
aXNlUmVqZWN0aW9uRXZlbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0MCw3IEBACiAj
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSGVhcEFuYWx5emVyLmg+CiAjaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvSlNDSW5saW5lcy5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTRGVzdHJ1
Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvU2xv
dFZpc2l0b3JNYWNyb3MuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9TdWJzcGFjZUlubGlu
ZXMuaD4KICNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CiAjaW5jbHVkZSA8d3RmL1BvaW50ZXJQcmVw
YXJhdGlvbnMuaD4KQEAgLTMwOCw3ICszMDksOSBAQCBKU0M6Oklzb1N1YnNwYWNlKiBKU1Rlc3RQ
cm9taXNlUmVqZWN0aW9uCiAgICAgYXV0byogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRl
c3RQcm9taXNlUmVqZWN0aW9uRXZlbnQuZ2V0KCk7CiBJR05PUkVfV0FSTklOR1NfQkVHSU4oInVu
cmVhY2hhYmxlLWNvZGUiKQogSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29t
cGFyZSIpCi0gICAgaWYgKCZKU1Rlc3RQcm9taXNlUmVqZWN0aW9uRXZlbnQ6OnZpc2l0T3V0cHV0
Q29uc3RyYWludHMgIT0gJkpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzKQorICAg
IHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RW
aXNpdG9yJikgPSBKU1Rlc3RQcm9taXNlUmVqZWN0aW9uRXZlbnQ6OnZpc2l0T3V0cHV0Q29uc3Ry
YWludHM7CisgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0Nl
bGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJh
aW50czsKKyAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRw
dXRDb25zdHJhaW50KQogICAgICAgICBjbGllbnREYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMo
KS5hcHBlbmQoc3BhY2UpOwogSUdOT1JFX1dBUk5JTkdTX0VORAogSUdOT1JFX1dBUk5JTkdTX0VO
RApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFJl
YWRPbmx5TWFwTGlrZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdFJlYWRPbmx5TWFwTGlrZS5jcHAJKHJldmlzaW9uIDI3MzEx
OSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RSZWFk
T25seU1hcExpa2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw2ICszOSw3IEBACiAjaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvSGVhcEFuYWx5emVyLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvSlNDSW5saW5lcy5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTRGVzdHJ1Y3RpYmxl
T2JqZWN0SGVhcENlbGxUeXBlLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvU2xvdFZpc2l0
b3JNYWNyb3MuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9TdWJzcGFjZUlubGluZXMuaD4K
ICNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CiAjaW5jbHVkZSA8d3RmL1BvaW50ZXJQcmVwYXJhdGlv
bnMuaD4KQEAgLTMxNyw3ICszMTgsOSBAQCBKU0M6Oklzb1N1YnNwYWNlKiBKU1Rlc3RSZWFkT25s
eU1hcExpa2U6CiAgICAgYXV0byogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RSZWFk
T25seU1hcExpa2UuZ2V0KCk7CiBJR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNv
ZGUiKQogSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAg
aWYgKCZKU1Rlc3RSZWFkT25seU1hcExpa2U6OnZpc2l0T3V0cHV0Q29uc3RyYWludHMgIT0gJkpT
Qzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzKQorICAgIHZvaWQgKCpteVZpc2l0T3V0
cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3RS
ZWFkT25seU1hcExpa2U6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAgdm9pZCAoKmpzQ2Vs
bFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikg
PSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKKyAgICBpZiAobXlWaXNpdE91
dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQogICAgICAgICBj
bGllbnREYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOwogSUdOT1JF
X1dBUk5JTkdTX0VORAogSUdOT1JFX1dBUk5JTkdTX0VORApAQCAtMzMzLDcgKzMzNiw3IEBAIHZv
aWQgSlNUZXN0UmVhZE9ubHlNYXBMaWtlOjphbmFseXplSGVhcCgKICAgICBCYXNlOjphbmFseXpl
SGVhcChjZWxsLCBhbmFseXplcik7CiB9CiAKLWJvb2wgSlNUZXN0UmVhZE9ubHlNYXBMaWtlT3du
ZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4g
aGFuZGxlLCB2b2lkKiwgU2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24p
Citib29sIEpTVGVzdFJlYWRPbmx5TWFwTGlrZU93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVS
b290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIEFic3RyYWN0U2xv
dFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCiB7CiAgICAgVU5VU0VEX1BB
UkFNKGhhbmRsZSk7CiAgICAgVU5VU0VEX1BBUkFNKHZpc2l0b3IpOwpJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFJlYWRPbmx5TWFwTGlrZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RSZWFkT25seU1hcExpa2UuaAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFJlYWRPbmx5TWFwTGlrZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC02NSw3ICs2NSw3IEBAIHByb3RlY3RlZDoKIAogY2xhc3MgSlNUZXN0UmVhZE9u
bHlNYXBMaWtlT3duZXIgZmluYWwgOiBwdWJsaWMgSlNDOjpXZWFrSGFuZGxlT3duZXIgewogcHVi
bGljOgotICAgIGJvb2wgaXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlND
OjpVbmtub3duPiwgdm9pZCogY29udGV4dCwgSlNDOjpTbG90VmlzaXRvciYsIGNvbnN0IGNoYXIq
KikgZmluYWw7CisgICAgYm9vbCBpc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRs
ZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0LCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3Im
LCBjb25zdCBjaGFyKiopIGZpbmFsOwogICAgIHZvaWQgZmluYWxpemUoSlNDOjpIYW5kbGU8SlND
OjpVbmtub3duPiwgdm9pZCogY29udGV4dCkgZmluYWw7CiB9OwogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0UmVhZE9ubHlTZXRMaWtlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0UmVhZE9ubHlTZXRMaWtlLmNwcAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFJlYWRPbmx5U2V0TGlrZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM5LDYgKzM5LDcgQEAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9I
ZWFwQW5hbHl6ZXIuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0NJbmxpbmVzLmg+CiAj
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNEZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUu
aD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9TbG90VmlzaXRvck1hY3Jvcy5oPgogI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL1N1YnNwYWNlSW5saW5lcy5oPgogI2luY2x1ZGUgPHd0Zi9HZXRQ
dHIuaD4KICNpbmNsdWRlIDx3dGYvUG9pbnRlclByZXBhcmF0aW9ucy5oPgpAQCAtMjk2LDcgKzI5
Nyw5IEBAIEpTQzo6SXNvU3Vic3BhY2UqIEpTVGVzdFJlYWRPbmx5U2V0TGlrZToKICAgICBhdXRv
KiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdFJlYWRPbmx5U2V0TGlrZS5nZXQoKTsK
IElHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCiBJR05PUkVfV0FSTklO
R1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKLSAgICBpZiAoJkpTVGVzdFJlYWRPbmx5
U2V0TGlrZTo6dmlzaXRPdXRwdXRDb25zdHJhaW50cyAhPSAmSlNDOjpKU0NlbGw6OnZpc2l0T3V0
cHV0Q29uc3RyYWludHMpCisgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6
OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdFJlYWRPbmx5U2V0TGlrZTo6dmlz
aXRPdXRwdXRDb25zdHJhaW50czsKKyAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJh
aW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNp
dE91dHB1dENvbnN0cmFpbnRzOworICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBq
c0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCiAgICAgICAgIGNsaWVudERhdGEub3V0cHV0Q29u
c3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7CiBJR05PUkVfV0FSTklOR1NfRU5ECiBJR05P
UkVfV0FSTklOR1NfRU5ECkBAIC0zMTIsNyArMzE1LDcgQEAgdm9pZCBKU1Rlc3RSZWFkT25seVNl
dExpa2U6OmFuYWx5emVIZWFwKAogICAgIEJhc2U6OmFuYWx5emVIZWFwKGNlbGwsIGFuYWx5emVy
KTsKIH0KIAotYm9vbCBKU1Rlc3RSZWFkT25seVNldExpa2VPd25lcjo6aXNSZWFjaGFibGVGcm9t
T3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBTbG90
VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikKK2Jvb2wgSlNUZXN0UmVhZE9u
bHlTZXRMaWtlT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpT
Qzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvciwg
Y29uc3QgY2hhcioqIHJlYXNvbikKIHsKICAgICBVTlVTRURfUEFSQU0oaGFuZGxlKTsKICAgICBV
TlVTRURfUEFSQU0odmlzaXRvcik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0UmVhZE9ubHlTZXRMaWtlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFJlYWRPbmx5U2V0TGlrZS5o
CShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0UmVhZE9ubHlTZXRMaWtlLmgJKHdvcmtpbmcgY29weSkKQEAgLTY1LDcgKzY1
LDcgQEAgcHJvdGVjdGVkOgogCiBjbGFzcyBKU1Rlc3RSZWFkT25seVNldExpa2VPd25lciBmaW5h
bCA6IHB1YmxpYyBKU0M6OldlYWtIYW5kbGVPd25lciB7CiBwdWJsaWM6Ci0gICAgYm9vbCBpc1Jl
YWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBj
b250ZXh0LCBKU0M6OlNsb3RWaXNpdG9yJiwgY29uc3QgY2hhcioqKSBmaW5hbDsKKyAgICBib29s
IGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZv
aWQqIGNvbnRleHQsIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYsIGNvbnN0IGNoYXIqKikgZmlu
YWw7CiAgICAgdm9pZCBmaW5hbGl6ZShKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBj
b250ZXh0KSBmaW5hbDsKIH07CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RSZXBvcnRFeHRyYU1lbW9yeUNvc3QuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RSZXBvcnRFeHRy
YU1lbW9yeUNvc3QuY3BwCShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0UmVwb3J0RXh0cmFNZW1vcnlDb3N0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0hl
YXBBbmFseXplci5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTQ0lubGluZXMuaD4KICNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0Rlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZS5o
PgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1Nsb3RWaXNpdG9yTWFjcm9zLmg+CiAjaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvU3Vic3BhY2VJbmxpbmVzLmg+CiAjaW5jbHVkZSA8d3RmL0dldFB0
ci5oPgogI2luY2x1ZGUgPHd0Zi9Qb2ludGVyUHJlcGFyYXRpb25zLmg+CkBAIC0xNzMsMTQgKzE3
NCwxNyBAQCBKU0M6Oklzb1N1YnNwYWNlKiBKU1Rlc3RSZXBvcnRFeHRyYU1lbW9yCiAgICAgYXV0
byogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RSZXBvcnRFeHRyYU1lbW9yeUNvc3Qu
Z2V0KCk7CiBJR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQogSUdOT1JF
X1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgaWYgKCZKU1Rlc3RS
ZXBvcnRFeHRyYU1lbW9yeUNvc3Q6OnZpc2l0T3V0cHV0Q29uc3RyYWludHMgIT0gJkpTQzo6SlND
ZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzKQorICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29u
c3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3RSZXBvcnRF
eHRyYU1lbW9yeUNvc3Q6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAgdm9pZCAoKmpzQ2Vs
bFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikg
PSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKKyAgICBpZiAobXlWaXNpdE91
dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQogICAgICAgICBj
bGllbnREYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOwogSUdOT1JF
X1dBUk5JTkdTX0VORAogSUdOT1JFX1dBUk5JTkdTX0VORAogICAgIHJldHVybiBzcGFjZTsKIH0K
IAotdm9pZCBKU1Rlc3RSZXBvcnRFeHRyYU1lbW9yeUNvc3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+
Cit2b2lkIEpTVGVzdFJlcG9ydEV4dHJhTWVtb3J5Q29zdDo6dmlzaXRDaGlsZHJlbkltcGwoSlND
ZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBq
c0Nhc3Q8SlNUZXN0UmVwb3J0RXh0cmFNZW1vcnlDb3N0Kj4oY2VsbCk7CiAgICAgQVNTRVJUX0dD
X09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtMTg4LDYgKzE5Miw4IEBA
IHZvaWQgSlNUZXN0UmVwb3J0RXh0cmFNZW1vcnlDb3N0Ojp2aXNpdEMKICAgICB2aXNpdG9yLnJl
cG9ydEV4dHJhTWVtb3J5VmlzaXRlZCh0aGlzT2JqZWN0LT53cmFwcGVkKCkubWVtb3J5Q29zdCgp
KTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTVGVzdFJlcG9ydEV4dHJhTWVtb3J5Q29z
dCk7CisKIHNpemVfdCBKU1Rlc3RSZXBvcnRFeHRyYU1lbW9yeUNvc3Q6OmVzdGltYXRlZFNpemUo
SlNDZWxsKiBjZWxsLCBWTSYgdm0pCiB7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxK
U1Rlc3RSZXBvcnRFeHRyYU1lbW9yeUNvc3QqPihjZWxsKTsKQEAgLTIwMyw3ICsyMDksNyBAQCB2
b2lkIEpTVGVzdFJlcG9ydEV4dHJhTWVtb3J5Q29zdDo6YW5hbHl6CiAgICAgQmFzZTo6YW5hbHl6
ZUhlYXAoY2VsbCwgYW5hbHl6ZXIpOwogfQogCi1ib29sIEpTVGVzdFJlcG9ydEV4dHJhTWVtb3J5
Q29zdE93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVu
a25vd24+IGhhbmRsZSwgdm9pZCosIFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiog
cmVhc29uKQorYm9vbCBKU1Rlc3RSZXBvcnRFeHRyYU1lbW9yeUNvc3RPd25lcjo6aXNSZWFjaGFi
bGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQq
LCBBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQogewog
ICAgIFVOVVNFRF9QQVJBTShoYW5kbGUpOwogICAgIFVOVVNFRF9QQVJBTSh2aXNpdG9yKTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RSZXBvcnRF
eHRyYU1lbW9yeUNvc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0UmVwb3J0RXh0cmFNZW1vcnlDb3N0LmgJKHJldmlzaW9uIDI3
MzExOSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RS
ZXBvcnRFeHRyYU1lbW9yeUNvc3QuaAkod29ya2luZyBjb3B5KQpAQCAtNTcsNyArNTcsNyBAQCBw
dWJsaWM6CiAgICAgICAgIHJldHVybiBzdWJzcGFjZUZvckltcGwodm0pOwogICAgIH0KICAgICBz
dGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKTsKLSAg
ICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKTsK
KyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgc3RhdGljIHZvaWQgYW5hbHl6ZUhl
YXAoSlNDZWxsKiwgSlNDOjpIZWFwQW5hbHl6ZXImKTsKIHByb3RlY3RlZDoKQEAgLTY4LDcgKzY4
LDcgQEAgcHJvdGVjdGVkOgogCiBjbGFzcyBKU1Rlc3RSZXBvcnRFeHRyYU1lbW9yeUNvc3RPd25l
ciBmaW5hbCA6IHB1YmxpYyBKU0M6OldlYWtIYW5kbGVPd25lciB7CiBwdWJsaWM6Ci0gICAgYm9v
bCBpc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2
b2lkKiBjb250ZXh0LCBKU0M6OlNsb3RWaXNpdG9yJiwgY29uc3QgY2hhcioqKSBmaW5hbDsKKyAg
ICBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93
bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYsIGNvbnN0IGNoYXIq
KikgZmluYWw7CiAgICAgdm9pZCBmaW5hbGl6ZShKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2
b2lkKiBjb250ZXh0KSBmaW5hbDsKIH07CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuY3BwCShyZXZpc2lvbiAyNzMxMTkp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFs
aXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUsNiArNDUs
NyBAQAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTQXJyYXkuaD4KICNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9KU0NJbmxpbmVzLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNEZXN0
cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9T
bG90VmlzaXRvck1hY3Jvcy5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1N1YnNwYWNlSW5s
aW5lcy5oPgogI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KICNpbmNsdWRlIDx3dGYvUG9pbnRlclBy
ZXBhcmF0aW9ucy5oPgpAQCAtMzYxLDE0ICszNjIsMTcgQEAgSlNDOjpJc29TdWJzcGFjZSogSlNU
ZXN0U2VyaWFsaXplZFNjcmlwdAogICAgIGF1dG8qIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VG
b3JUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmdldCgpOwogSUdOT1JFX1dBUk5J
TkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKIElHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1
dG9sb2dpY2FsLWNvbXBhcmUiKQotICAgIGlmICgmSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVl
SW50ZXJmYWNlOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzICE9ICZKU0M6OkpTQ2VsbDo6dmlzaXRP
dXRwdXRDb25zdHJhaW50cykKKyAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpT
Qzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZh
bHVlSW50ZXJmYWNlOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOworICAgIHZvaWQgKCpqc0NlbGxW
aXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0g
SlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAgaWYgKG15VmlzaXRPdXRw
dXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKICAgICAgICAgY2xp
ZW50RGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKIElHTk9SRV9X
QVJOSU5HU19FTkQKIElHTk9SRV9XQVJOSU5HU19FTkQKICAgICByZXR1cm4gc3BhY2U7CiB9CiAK
LXZvaWQgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlOjp2aXNpdENoaWxkcmVu
KEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPgordm9pZCBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2U6OnZpc2l0
Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBhdXRv
KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFj
ZSo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5m
bygpKTsKQEAgLTM3Nyw2ICszODEsOCBAQCB2b2lkIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZUludGVyZmFjCiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9jYWNoZWRSZWFkb25s
eVZhbHVlKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTVGVzdFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZUludGVyZmFjZSk7CisKIHZvaWQgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50
ZXJmYWNlOjphbmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5hbHl6ZXIp
CiB7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3RTZXJpYWxpemVkU2NyaXB0
VmFsdWVJbnRlcmZhY2UqPihjZWxsKTsKQEAgLTM4Niw3ICszOTIsNyBAQCB2b2lkIEpTVGVzdFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjCiAgICAgQmFzZTo6YW5hbHl6ZUhlYXAoY2VsbCwg
YW5hbHl6ZXIpOwogfQogCi1ib29sIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFj
ZU93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25v
d24+IGhhbmRsZSwgdm9pZCosIFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVh
c29uKQorYm9vbCBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VPd25lcjo6aXNS
ZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUs
IHZvaWQqLCBBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29u
KQogewogICAgIFVOVVNFRF9QQVJBTShoYW5kbGUpOwogICAgIFVOVVNFRF9QQVJBTSh2aXNpdG9y
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RT
ZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVl
SW50ZXJmYWNlLmgJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuaAko
d29ya2luZyBjb3B5KQpAQCAtNjAsNyArNjAsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBz
dWJzcGFjZUZvckltcGwodm0pOwogICAgIH0KICAgICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSog
c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxk
cmVuKEpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxE
UkVOOwogCiAgICAgc3RhdGljIHZvaWQgYW5hbHl6ZUhlYXAoSlNDZWxsKiwgSlNDOjpIZWFwQW5h
bHl6ZXImKTsKIHByb3RlY3RlZDoKQEAgLTcxLDcgKzcxLDcgQEAgcHJvdGVjdGVkOgogCiBjbGFz
cyBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VPd25lciBmaW5hbCA6IHB1Ymxp
YyBKU0M6OldlYWtIYW5kbGVPd25lciB7CiBwdWJsaWM6Ci0gICAgYm9vbCBpc1JlYWNoYWJsZUZy
b21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0LCBK
U0M6OlNsb3RWaXNpdG9yJiwgY29uc3QgY2hhcioqKSBmaW5hbDsKKyAgICBib29sIGlzUmVhY2hh
YmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRl
eHQsIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYsIGNvbnN0IGNoYXIqKikgZmluYWw7CiAgICAg
dm9pZCBmaW5hbGl6ZShKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0KSBm
aW5hbDsKIH07CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RTZXRMaWtlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2V0TGlrZS5jcHAJKHJldmlzaW9uIDI3MzExOSkKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXRMaWtlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzksNiArMzksNyBAQAogI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL0hlYXBBbmFseXplci5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTQ0lubGluZXMu
aD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0Rlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxs
VHlwZS5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1Nsb3RWaXNpdG9yTWFjcm9zLmg+CiAj
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvU3Vic3BhY2VJbmxpbmVzLmg+CiAjaW5jbHVkZSA8d3Rm
L0dldFB0ci5oPgogI2luY2x1ZGUgPHd0Zi9Qb2ludGVyUHJlcGFyYXRpb25zLmg+CkBAIC0zNTYs
NyArMzU3LDkgQEAgSlNDOjpJc29TdWJzcGFjZSogSlNUZXN0U2V0TGlrZTo6c3Vic3BhYwogICAg
IGF1dG8qIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0U2V0TGlrZS5nZXQoKTsKIElH
Tk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCiBJR05PUkVfV0FSTklOR1Nf
QkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKLSAgICBpZiAoJkpTVGVzdFNldExpa2U6OnZp
c2l0T3V0cHV0Q29uc3RyYWludHMgIT0gJkpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFp
bnRzKQorICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBK
U0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3RTZXRMaWtlOjp2aXNpdE91dHB1dENvbnN0cmFpbnRz
OworICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwg
SlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7
CisgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29u
c3RyYWludCkKICAgICAgICAgY2xpZW50RGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBw
ZW5kKHNwYWNlKTsKIElHTk9SRV9XQVJOSU5HU19FTkQKIElHTk9SRV9XQVJOSU5HU19FTkQKQEAg
LTM3Miw3ICszNzUsNyBAQCB2b2lkIEpTVGVzdFNldExpa2U6OmFuYWx5emVIZWFwKEpTQ2VsbCog
CiAgICAgQmFzZTo6YW5hbHl6ZUhlYXAoY2VsbCwgYW5hbHl6ZXIpOwogfQogCi1ib29sIEpTVGVz
dFNldExpa2VPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlND
OjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hh
cioqIHJlYXNvbikKK2Jvb2wgSlNUZXN0U2V0TGlrZU93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFx
dWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIEFic3RyYWN0
U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCiB7CiAgICAgVU5VU0VE
X1BBUkFNKGhhbmRsZSk7CiAgICAgVU5VU0VEX1BBUkFNKHZpc2l0b3IpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNldExpa2UuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2V0
TGlrZS5oCShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0U2V0TGlrZS5oCSh3b3JraW5nIGNvcHkpCkBAIC02NSw3ICs2NSw3
IEBAIHByb3RlY3RlZDoKIAogY2xhc3MgSlNUZXN0U2V0TGlrZU93bmVyIGZpbmFsIDogcHVibGlj
IEpTQzo6V2Vha0hhbmRsZU93bmVyIHsKIHB1YmxpYzoKLSAgICBib29sIGlzUmVhY2hhYmxlRnJv
bU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIEpT
Qzo6U2xvdFZpc2l0b3ImLCBjb25zdCBjaGFyKiopIGZpbmFsOworICAgIGJvb2wgaXNSZWFjaGFi
bGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4
dCwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiwgY29uc3QgY2hhcioqKSBmaW5hbDsKICAgICB2
b2lkIGZpbmFsaXplKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQpIGZp
bmFsOwogfTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdFNldExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXRMaWtlV2l0
aE92ZXJyaWRkZW5PcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNldExpa2VXaXRoT3ZlcnJpZGRl
bk9wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0MCw3IEBACiAjaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvSGVhcEFuYWx5emVyLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvSlNDSW5saW5lcy5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTRGVzdHJ1Y3RpYmxl
T2JqZWN0SGVhcENlbGxUeXBlLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvU2xvdFZpc2l0
b3JNYWNyb3MuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9TdWJzcGFjZUlubGluZXMuaD4K
ICNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CiAjaW5jbHVkZSA8d3RmL1BvaW50ZXJQcmVwYXJhdGlv
bnMuaD4KQEAgLTM2OCw3ICszNjksOSBAQCBKU0M6Oklzb1N1YnNwYWNlKiBKU1Rlc3RTZXRMaWtl
V2l0aE92ZXJyCiAgICAgYXV0byogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RTZXRM
aWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zLmdldCgpOwogSUdOT1JFX1dBUk5JTkdTX0JFR0lO
KCJ1bnJlYWNoYWJsZS1jb2RlIikKIElHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2Fs
LWNvbXBhcmUiKQotICAgIGlmICgmSlNUZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9u
czo6dmlzaXRPdXRwdXRDb25zdHJhaW50cyAhPSAmSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29u
c3RyYWludHMpCisgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2Vs
bCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdFNldExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJh
dGlvbnM6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0
cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpT
Q2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKKyAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0
cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQogICAgICAgICBjbGllbnREYXRh
Lm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOwogSUdOT1JFX1dBUk5JTkdT
X0VORAogSUdOT1JFX1dBUk5JTkdTX0VORApAQCAtMzg0LDcgKzM4Nyw3IEBAIHZvaWQgSlNUZXN0
U2V0TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW8KICAgICBCYXNlOjphbmFseXplSGVhcChjZWxs
LCBhbmFseXplcik7CiB9CiAKLWJvb2wgSlNUZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0
aW9uc093bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVu
a25vd24+IGhhbmRsZSwgdm9pZCosIFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiog
cmVhc29uKQorYm9vbCBKU1Rlc3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zT3duZXI6
OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFu
ZGxlLCB2b2lkKiwgQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJl
YXNvbikKIHsKICAgICBVTlVTRURfUEFSQU0oaGFuZGxlKTsKICAgICBVTlVTRURfUEFSQU0odmlz
aXRvcik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXRMaWtlV2l0aE92ZXJy
aWRkZW5PcGVyYXRpb25zLmgJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRp
b25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTY1LDcgKzY1LDcgQEAgcHJvdGVjdGVkOgogCiBjbGFz
cyBKU1Rlc3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zT3duZXIgZmluYWwgOiBwdWJs
aWMgSlNDOjpXZWFrSGFuZGxlT3duZXIgewogcHVibGljOgotICAgIGJvb2wgaXNSZWFjaGFibGVG
cm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCwg
SlNDOjpTbG90VmlzaXRvciYsIGNvbnN0IGNoYXIqKikgZmluYWw7CisgICAgYm9vbCBpc1JlYWNo
YWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250
ZXh0LCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImLCBjb25zdCBjaGFyKiopIGZpbmFsOwogICAg
IHZvaWQgZmluYWxpemUoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCkg
ZmluYWw7CiB9OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0U3RyaW5naWZpZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTdHJpbmdpZmllci5jcHAJKHJldmlzaW9uIDI3
MzExOSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RT
dHJpbmdpZmllci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9IZWFwQW5hbHl6ZXIuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9KU0NJbmxpbmVzLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNEZXN0cnVjdGlibGVP
YmplY3RIZWFwQ2VsbFR5cGUuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9TbG90VmlzaXRv
ck1hY3Jvcy5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1N1YnNwYWNlSW5saW5lcy5oPgog
I2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KICNpbmNsdWRlIDx3dGYvUG9pbnRlclByZXBhcmF0aW9u
cy5oPgpAQCAtMTk5LDcgKzIwMCw5IEBAIEpTQzo6SXNvU3Vic3BhY2UqIEpTVGVzdFN0cmluZ2lm
aWVyOjpzdWIKICAgICBhdXRvKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdFN0cmlu
Z2lmaWVyLmdldCgpOwogSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikK
IElHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQotICAgIGlmICgm
SlNUZXN0U3RyaW5naWZpZXI6OnZpc2l0T3V0cHV0Q29uc3RyYWludHMgIT0gJkpTQzo6SlNDZWxs
Ojp2aXNpdE91dHB1dENvbnN0cmFpbnRzKQorICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3Ry
YWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3RTdHJpbmdpZmll
cjo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKKyAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRD
b25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxs
Ojp2aXNpdE91dHB1dENvbnN0cmFpbnRzOworICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWlu
dCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCiAgICAgICAgIGNsaWVudERhdGEub3V0
cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7CiBJR05PUkVfV0FSTklOR1NfRU5E
CiBJR05PUkVfV0FSTklOR1NfRU5ECkBAIC0yMTUsNyArMjE4LDcgQEAgdm9pZCBKU1Rlc3RTdHJp
bmdpZmllcjo6YW5hbHl6ZUhlYXAoSlNDZQogICAgIEJhc2U6OmFuYWx5emVIZWFwKGNlbGwsIGFu
YWx5emVyKTsKIH0KIAotYm9vbCBKU1Rlc3RTdHJpbmdpZmllck93bmVyOjppc1JlYWNoYWJsZUZy
b21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIFNs
b3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQorYm9vbCBKU1Rlc3RTdHJp
bmdpZmllck93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6
OlVua25vd24+IGhhbmRsZSwgdm9pZCosIEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNv
bnN0IGNoYXIqKiByZWFzb24pCiB7CiAgICAgVU5VU0VEX1BBUkFNKGhhbmRsZSk7CiAgICAgVU5V
U0VEX1BBUkFNKHZpc2l0b3IpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdFN0cmluZ2lmaWVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFN0cmluZ2lmaWVyLmgJKHJldmlzaW9u
IDI3MzExOSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RTdHJpbmdpZmllci5oCSh3b3JraW5nIGNvcHkpCkBAIC02NSw3ICs2NSw3IEBAIHByb3RlY3Rl
ZDoKIAogY2xhc3MgSlNUZXN0U3RyaW5naWZpZXJPd25lciBmaW5hbCA6IHB1YmxpYyBKU0M6Oldl
YWtIYW5kbGVPd25lciB7CiBwdWJsaWM6Ci0gICAgYm9vbCBpc1JlYWNoYWJsZUZyb21PcGFxdWVS
b290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0LCBKU0M6OlNsb3RW
aXNpdG9yJiwgY29uc3QgY2hhcioqKSBmaW5hbDsKKyAgICBib29sIGlzUmVhY2hhYmxlRnJvbU9w
YXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6
QWJzdHJhY3RTbG90VmlzaXRvciYsIGNvbnN0IGNoYXIqKikgZmluYWw7CiAgICAgdm9pZCBmaW5h
bGl6ZShKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0KSBmaW5hbDsKIH07
CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RT
dHJpbmdpZmllckFub255bW91c09wZXJhdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFN0cmluZ2lmaWVyQW5vbnltb3Vz
T3BlcmF0aW9uLmNwcAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFN0cmluZ2lmaWVyQW5vbnltb3VzT3BlcmF0aW9uLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL0hlYXBBbmFseXplci5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTQ0lubGluZXMu
aD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0Rlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxs
VHlwZS5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1Nsb3RWaXNpdG9yTWFjcm9zLmg+CiAj
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvU3Vic3BhY2VJbmxpbmVzLmg+CiAjaW5jbHVkZSA8d3Rm
L0dldFB0ci5oPgogI2luY2x1ZGUgPHd0Zi9Qb2ludGVyUHJlcGFyYXRpb25zLmg+CkBAIC0xOTks
NyArMjAwLDkgQEAgSlNDOjpJc29TdWJzcGFjZSogSlNUZXN0U3RyaW5naWZpZXJBbm9ueQogICAg
IGF1dG8qIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0U3RyaW5naWZpZXJBbm9ueW1v
dXNPcGVyYXRpb24uZ2V0KCk7CiBJR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNv
ZGUiKQogSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAg
aWYgKCZKU1Rlc3RTdHJpbmdpZmllckFub255bW91c09wZXJhdGlvbjo6dmlzaXRPdXRwdXRDb25z
dHJhaW50cyAhPSAmSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHMpCisgICAgdm9p
ZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0
b3ImKSA9IEpTVGVzdFN0cmluZ2lmaWVyQW5vbnltb3VzT3BlcmF0aW9uOjp2aXNpdE91dHB1dENv
bnN0cmFpbnRzOworICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6
SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29u
c3RyYWludHM7CisgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0
T3V0cHV0Q29uc3RyYWludCkKICAgICAgICAgY2xpZW50RGF0YS5vdXRwdXRDb25zdHJhaW50U3Bh
Y2VzKCkuYXBwZW5kKHNwYWNlKTsKIElHTk9SRV9XQVJOSU5HU19FTkQKIElHTk9SRV9XQVJOSU5H
U19FTkQKQEAgLTIxNSw3ICsyMTgsNyBAQCB2b2lkIEpTVGVzdFN0cmluZ2lmaWVyQW5vbnltb3Vz
T3BlcmF0aW9uCiAgICAgQmFzZTo6YW5hbHl6ZUhlYXAoY2VsbCwgYW5hbHl6ZXIpOwogfQogCi1i
b29sIEpTVGVzdFN0cmluZ2lmaWVyQW5vbnltb3VzT3BlcmF0aW9uT3duZXI6OmlzUmVhY2hhYmxl
RnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwg
U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCitib29sIEpTVGVzdFN0
cmluZ2lmaWVyQW5vbnltb3VzT3BlcmF0aW9uT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJv
b3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgQWJzdHJhY3RTbG90
VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikKIHsKICAgICBVTlVTRURfUEFS
QU0oaGFuZGxlKTsKICAgICBVTlVTRURfUEFSQU0odmlzaXRvcik7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U3RyaW5naWZpZXJBbm9ueW1vdXNP
cGVyYXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0U3RyaW5naWZpZXJBbm9ueW1vdXNPcGVyYXRpb24uaAkocmV2aXNpb24g
MjczMTE5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dFN0cmluZ2lmaWVyQW5vbnltb3VzT3BlcmF0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTY1LDcg
KzY1LDcgQEAgcHJvdGVjdGVkOgogCiBjbGFzcyBKU1Rlc3RTdHJpbmdpZmllckFub255bW91c09w
ZXJhdGlvbk93bmVyIGZpbmFsIDogcHVibGljIEpTQzo6V2Vha0hhbmRsZU93bmVyIHsKIHB1Ymxp
YzoKLSAgICBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6
VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6U2xvdFZpc2l0b3ImLCBjb25zdCBjaGFyKiop
IGZpbmFsOworICAgIGJvb2wgaXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8
SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiwg
Y29uc3QgY2hhcioqKSBmaW5hbDsKICAgICB2b2lkIGZpbmFsaXplKEpTQzo6SGFuZGxlPEpTQzo6
VW5rbm93bj4sIHZvaWQqIGNvbnRleHQpIGZpbmFsOwogfTsKIApJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFN0cmluZ2lmaWVyTmFtZWRPcGVyYXRp
b24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RTdHJpbmdpZmllck5hbWVkT3BlcmF0aW9uLmNwcAkocmV2aXNpb24gMjczMTE5
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFN0cmlu
Z2lmaWVyTmFtZWRPcGVyYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw2ICszNSw3IEBA
CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSGVhcEFuYWx5emVyLmg+CiAjaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvSlNDSW5saW5lcy5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTRGVz
dHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
U2xvdFZpc2l0b3JNYWNyb3MuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9TdWJzcGFjZUlu
bGluZXMuaD4KICNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CiAjaW5jbHVkZSA8d3RmL1BvaW50ZXJQ
cmVwYXJhdGlvbnMuaD4KQEAgLTIxNiw3ICsyMTcsOSBAQCBKU0M6Oklzb1N1YnNwYWNlKiBKU1Rl
c3RTdHJpbmdpZmllck5hbWVkCiAgICAgYXV0byogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZv
clRlc3RTdHJpbmdpZmllck5hbWVkT3BlcmF0aW9uLmdldCgpOwogSUdOT1JFX1dBUk5JTkdTX0JF
R0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKIElHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dp
Y2FsLWNvbXBhcmUiKQotICAgIGlmICgmSlNUZXN0U3RyaW5naWZpZXJOYW1lZE9wZXJhdGlvbjo6
dmlzaXRPdXRwdXRDb25zdHJhaW50cyAhPSAmSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3Ry
YWludHMpCisgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCos
IEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdFN0cmluZ2lmaWVyTmFtZWRPcGVyYXRpb246OnZp
c2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3Ry
YWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlz
aXRPdXRwdXRDb25zdHJhaW50czsKKyAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0g
anNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQogICAgICAgICBjbGllbnREYXRhLm91dHB1dENv
bnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOwogSUdOT1JFX1dBUk5JTkdTX0VORAogSUdO
T1JFX1dBUk5JTkdTX0VORApAQCAtMjMyLDcgKzIzNSw3IEBAIHZvaWQgSlNUZXN0U3RyaW5naWZp
ZXJOYW1lZE9wZXJhdGlvbjo6YW4KICAgICBCYXNlOjphbmFseXplSGVhcChjZWxsLCBhbmFseXpl
cik7CiB9CiAKLWJvb2wgSlNUZXN0U3RyaW5naWZpZXJOYW1lZE9wZXJhdGlvbk93bmVyOjppc1Jl
YWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwg
dm9pZCosIFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQorYm9vbCBK
U1Rlc3RTdHJpbmdpZmllck5hbWVkT3BlcmF0aW9uT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1
ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgQWJzdHJhY3RT
bG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikKIHsKICAgICBVTlVTRURf
UEFSQU0oaGFuZGxlKTsKICAgICBVTlVTRURfUEFSQU0odmlzaXRvcik7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U3RyaW5naWZpZXJOYW1lZE9w
ZXJhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RTdHJpbmdpZmllck5hbWVkT3BlcmF0aW9uLmgJKHJldmlzaW9uIDI3MzEx
OSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTdHJp
bmdpZmllck5hbWVkT3BlcmF0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTY1LDcgKzY1LDcgQEAg
cHJvdGVjdGVkOgogCiBjbGFzcyBKU1Rlc3RTdHJpbmdpZmllck5hbWVkT3BlcmF0aW9uT3duZXIg
ZmluYWwgOiBwdWJsaWMgSlNDOjpXZWFrSGFuZGxlT3duZXIgewogcHVibGljOgotICAgIGJvb2wg
aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9p
ZCogY29udGV4dCwgSlNDOjpTbG90VmlzaXRvciYsIGNvbnN0IGNoYXIqKikgZmluYWw7CisgICAg
Ym9vbCBpc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+
LCB2b2lkKiBjb250ZXh0LCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImLCBjb25zdCBjaGFyKiop
IGZpbmFsOwogICAgIHZvaWQgZmluYWxpemUoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9p
ZCogY29udGV4dCkgZmluYWw7CiB9OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25JbXBsZW1lbnRlZEFzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25JbXBsZW1lbnRlZEFzLmNwcAkocmV2aXNpb24gMjcz
MTE5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFN0
cmluZ2lmaWVyT3BlcmF0aW9uSW1wbGVtZW50ZWRBcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1
LDYgKzM1LDcgQEAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9IZWFwQW5hbHl6ZXIuaD4KICNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0NJbmxpbmVzLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvSlNEZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUuaD4KKyNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9TbG90VmlzaXRvck1hY3Jvcy5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L1N1YnNwYWNlSW5saW5lcy5oPgogI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KICNpbmNsdWRlIDx3
dGYvUG9pbnRlclByZXBhcmF0aW9ucy5oPgpAQCAtMjE2LDcgKzIxNyw5IEBAIEpTQzo6SXNvU3Vi
c3BhY2UqIEpTVGVzdFN0cmluZ2lmaWVyT3BlcmEKICAgICBhdXRvKiBzcGFjZSA9IHNwYWNlcy5t
X3N1YnNwYWNlRm9yVGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9uSW1wbGVtZW50ZWRBcy5nZXQoKTsK
IElHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCiBJR05PUkVfV0FSTklO
R1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKLSAgICBpZiAoJkpTVGVzdFN0cmluZ2lm
aWVyT3BlcmF0aW9uSW1wbGVtZW50ZWRBczo6dmlzaXRPdXRwdXRDb25zdHJhaW50cyAhPSAmSlND
OjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHMpCisgICAgdm9pZCAoKm15VmlzaXRPdXRw
dXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdFN0
cmluZ2lmaWVyT3BlcmF0aW9uSW1wbGVtZW50ZWRBczo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsK
KyAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpT
Qzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwor
ICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0
cmFpbnQpCiAgICAgICAgIGNsaWVudERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVu
ZChzcGFjZSk7CiBJR05PUkVfV0FSTklOR1NfRU5ECiBJR05PUkVfV0FSTklOR1NfRU5ECkBAIC0y
MzIsNyArMjM1LDcgQEAgdm9pZCBKU1Rlc3RTdHJpbmdpZmllck9wZXJhdGlvbkltcGxlbWVudAog
ICAgIEJhc2U6OmFuYWx5emVIZWFwKGNlbGwsIGFuYWx5emVyKTsKIH0KIAotYm9vbCBKU1Rlc3RT
dHJpbmdpZmllck9wZXJhdGlvbkltcGxlbWVudGVkQXNPd25lcjo6aXNSZWFjaGFibGVGcm9tT3Bh
cXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBTbG90Vmlz
aXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikKK2Jvb2wgSlNUZXN0U3RyaW5naWZp
ZXJPcGVyYXRpb25JbXBsZW1lbnRlZEFzT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3Rz
KEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgQWJzdHJhY3RTbG90Vmlz
aXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikKIHsKICAgICBVTlVTRURfUEFSQU0o
aGFuZGxlKTsKICAgICBVTlVTRURfUEFSQU0odmlzaXRvcik7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25JbXBs
ZW1lbnRlZEFzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9uSW1wbGVtZW50ZWRBcy5oCShyZXZp
c2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25JbXBsZW1lbnRlZEFzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTY1LDcgKzY1LDcgQEAgcHJvdGVjdGVkOgogCiBjbGFzcyBKU1Rlc3RTdHJpbmdpZmllck9w
ZXJhdGlvbkltcGxlbWVudGVkQXNPd25lciBmaW5hbCA6IHB1YmxpYyBKU0M6OldlYWtIYW5kbGVP
d25lciB7CiBwdWJsaWM6Ci0gICAgYm9vbCBpc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6
OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0LCBKU0M6OlNsb3RWaXNpdG9yJiwg
Y29uc3QgY2hhcioqKSBmaW5hbDsKKyAgICBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3Rz
KEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6QWJzdHJhY3RT
bG90VmlzaXRvciYsIGNvbnN0IGNoYXIqKikgZmluYWw7CiAgICAgdm9pZCBmaW5hbGl6ZShKU0M6
OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0KSBmaW5hbDsKIH07CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTdHJpbmdpZmll
ck9wZXJhdGlvbk5hbWVkVG9TdHJpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTdHJpbmdpZmllck9wZXJhdGlvbk5hbWVk
VG9TdHJpbmcuY3BwCShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25OYW1lZFRvU3RyaW5n
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL0hlYXBBbmFseXplci5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTQ0lubGlu
ZXMuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0Rlc3RydWN0aWJsZU9iamVjdEhlYXBD
ZWxsVHlwZS5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1Nsb3RWaXNpdG9yTWFjcm9zLmg+
CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvU3Vic3BhY2VJbmxpbmVzLmg+CiAjaW5jbHVkZSA8
d3RmL0dldFB0ci5oPgogI2luY2x1ZGUgPHd0Zi9Qb2ludGVyUHJlcGFyYXRpb25zLmg+CkBAIC0x
OTksNyArMjAwLDkgQEAgSlNDOjpJc29TdWJzcGFjZSogSlNUZXN0U3RyaW5naWZpZXJPcGVyYQog
ICAgIGF1dG8qIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0U3RyaW5naWZpZXJPcGVy
YXRpb25OYW1lZFRvU3RyaW5nLmdldCgpOwogSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNo
YWJsZS1jb2RlIikKIElHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUi
KQotICAgIGlmICgmSlNUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25OYW1lZFRvU3RyaW5nOjp2aXNp
dE91dHB1dENvbnN0cmFpbnRzICE9ICZKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50
cykKKyAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlND
OjpTbG90VmlzaXRvciYpID0gSlNUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25OYW1lZFRvU3RyaW5n
Ojp2aXNpdE91dHB1dENvbnN0cmFpbnRzOworICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENv
bnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6
OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50
ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKICAgICAgICAgY2xpZW50RGF0YS5vdXRw
dXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKIElHTk9SRV9XQVJOSU5HU19FTkQK
IElHTk9SRV9XQVJOSU5HU19FTkQKQEAgLTIxNSw3ICsyMTgsNyBAQCB2b2lkIEpTVGVzdFN0cmlu
Z2lmaWVyT3BlcmF0aW9uTmFtZWRUb1N0CiAgICAgQmFzZTo6YW5hbHl6ZUhlYXAoY2VsbCwgYW5h
bHl6ZXIpOwogfQogCi1ib29sIEpTVGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9uTmFtZWRUb1N0cmlu
Z093bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25v
d24+IGhhbmRsZSwgdm9pZCosIFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVh
c29uKQorYm9vbCBKU1Rlc3RTdHJpbmdpZmllck9wZXJhdGlvbk5hbWVkVG9TdHJpbmdPd25lcjo6
aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5k
bGUsIHZvaWQqLCBBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVh
c29uKQogewogICAgIFVOVVNFRF9QQVJBTShoYW5kbGUpOwogICAgIFVOVVNFRF9QQVJBTSh2aXNp
dG9yKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RTdHJpbmdpZmllck9wZXJhdGlvbk5hbWVkVG9TdHJpbmcuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U3RyaW5naWZpZXJPcGVy
YXRpb25OYW1lZFRvU3RyaW5nLmgJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTdHJpbmdpZmllck9wZXJhdGlvbk5hbWVk
VG9TdHJpbmcuaAkod29ya2luZyBjb3B5KQpAQCAtNjUsNyArNjUsNyBAQCBwcm90ZWN0ZWQ6CiAK
IGNsYXNzIEpTVGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9uTmFtZWRUb1N0cmluZ093bmVyIGZpbmFs
IDogcHVibGljIEpTQzo6V2Vha0hhbmRsZU93bmVyIHsKIHB1YmxpYzoKLSAgICBib29sIGlzUmVh
Y2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNv
bnRleHQsIEpTQzo6U2xvdFZpc2l0b3ImLCBjb25zdCBjaGFyKiopIGZpbmFsOworICAgIGJvb2wg
aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9p
ZCogY29udGV4dCwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiwgY29uc3QgY2hhcioqKSBmaW5h
bDsKICAgICB2b2lkIGZpbmFsaXplKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNv
bnRleHQpIGZpbmFsOwogfTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdFN0cmluZ2lmaWVyUmVhZE9ubHlBdHRyaWJ1dGUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTdHJp
bmdpZmllclJlYWRPbmx5QXR0cmlidXRlLmNwcAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFN0cmluZ2lmaWVyUmVhZE9u
bHlBdHRyaWJ1dGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw2ICszNiw3IEBACiAjaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvSGVhcEFuYWx5emVyLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvSlNDSW5saW5lcy5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTRGVzdHJ1Y3RpYmxl
T2JqZWN0SGVhcENlbGxUeXBlLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvU2xvdFZpc2l0
b3JNYWNyb3MuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9TdWJzcGFjZUlubGluZXMuaD4K
ICNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CiAjaW5jbHVkZSA8d3RmL1BvaW50ZXJQcmVwYXJhdGlv
bnMuaD4KQEAgLTIyMCw3ICsyMjEsOSBAQCBKU0M6Oklzb1N1YnNwYWNlKiBKU1Rlc3RTdHJpbmdp
ZmllclJlYWRPCiAgICAgYXV0byogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RTdHJp
bmdpZmllclJlYWRPbmx5QXR0cmlidXRlLmdldCgpOwogSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1
bnJlYWNoYWJsZS1jb2RlIikKIElHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNv
bXBhcmUiKQotICAgIGlmICgmSlNUZXN0U3RyaW5naWZpZXJSZWFkT25seUF0dHJpYnV0ZTo6dmlz
aXRPdXRwdXRDb25zdHJhaW50cyAhPSAmSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWlu
dHMpCisgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpT
Qzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdFN0cmluZ2lmaWVyUmVhZE9ubHlBdHRyaWJ1dGU6OnZp
c2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3Ry
YWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlz
aXRPdXRwdXRDb25zdHJhaW50czsKKyAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0g
anNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQogICAgICAgICBjbGllbnREYXRhLm91dHB1dENv
bnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOwogSUdOT1JFX1dBUk5JTkdTX0VORAogSUdO
T1JFX1dBUk5JTkdTX0VORApAQCAtMjM2LDcgKzIzOSw3IEBAIHZvaWQgSlNUZXN0U3RyaW5naWZp
ZXJSZWFkT25seUF0dHJpYnV0ZToKICAgICBCYXNlOjphbmFseXplSGVhcChjZWxsLCBhbmFseXpl
cik7CiB9CiAKLWJvb2wgSlNUZXN0U3RyaW5naWZpZXJSZWFkT25seUF0dHJpYnV0ZU93bmVyOjpp
c1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRs
ZSwgdm9pZCosIFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQorYm9v
bCBKU1Rlc3RTdHJpbmdpZmllclJlYWRPbmx5QXR0cmlidXRlT3duZXI6OmlzUmVhY2hhYmxlRnJv
bU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgQWJz
dHJhY3RTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikKIHsKICAgICBV
TlVTRURfUEFSQU0oaGFuZGxlKTsKICAgICBVTlVTRURfUEFSQU0odmlzaXRvcik7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U3RyaW5naWZpZXJS
ZWFkT25seUF0dHJpYnV0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTdHJpbmdpZmllclJlYWRPbmx5QXR0cmlidXRlLmgJKHJl
dmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RTdHJpbmdpZmllclJlYWRPbmx5QXR0cmlidXRlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTY1LDcgKzY1LDcgQEAgcHJvdGVjdGVkOgogCiBjbGFzcyBKU1Rlc3RTdHJpbmdpZmllclJlYWRP
bmx5QXR0cmlidXRlT3duZXIgZmluYWwgOiBwdWJsaWMgSlNDOjpXZWFrSGFuZGxlT3duZXIgewog
cHVibGljOgotICAgIGJvb2wgaXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8
SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCwgSlNDOjpTbG90VmlzaXRvciYsIGNvbnN0IGNo
YXIqKikgZmluYWw7CisgICAgYm9vbCBpc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6Okhh
bmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0LCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0
b3ImLCBjb25zdCBjaGFyKiopIGZpbmFsOwogICAgIHZvaWQgZmluYWxpemUoSlNDOjpIYW5kbGU8
SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCkgZmluYWw7CiB9OwogCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U3RyaW5naWZpZXJSZWFkV3Jp
dGVBdHRyaWJ1dGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RTdHJpbmdpZmllclJlYWRXcml0ZUF0dHJpYnV0ZS5jcHAJKHJl
dmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RTdHJpbmdpZmllclJlYWRXcml0ZUF0dHJpYnV0ZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9IZWFwQW5hbHl6ZXIu
aD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0NJbmxpbmVzLmg+CiAjaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvSlNEZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUuaD4KKyNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9TbG90VmlzaXRvck1hY3Jvcy5oPgogI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL1N1YnNwYWNlSW5saW5lcy5oPgogI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KICNpbmNs
dWRlIDx3dGYvUG9pbnRlclByZXBhcmF0aW9ucy5oPgpAQCAtMjM5LDcgKzI0MCw5IEBAIEpTQzo6
SXNvU3Vic3BhY2UqIEpTVGVzdFN0cmluZ2lmaWVyUmVhZFcKICAgICBhdXRvKiBzcGFjZSA9IHNw
YWNlcy5tX3N1YnNwYWNlRm9yVGVzdFN0cmluZ2lmaWVyUmVhZFdyaXRlQXR0cmlidXRlLmdldCgp
OwogSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKIElHTk9SRV9XQVJO
SU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQotICAgIGlmICgmSlNUZXN0U3RyaW5n
aWZpZXJSZWFkV3JpdGVBdHRyaWJ1dGU6OnZpc2l0T3V0cHV0Q29uc3RyYWludHMgIT0gJkpTQzo6
SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzKQorICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0
Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3RTdHJp
bmdpZmllclJlYWRXcml0ZUF0dHJpYnV0ZTo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKKyAgICB2
b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xv
dFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOworICAgIGlm
IChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQp
CiAgICAgICAgIGNsaWVudERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFj
ZSk7CiBJR05PUkVfV0FSTklOR1NfRU5ECiBJR05PUkVfV0FSTklOR1NfRU5ECkBAIC0yNTUsNyAr
MjU4LDcgQEAgdm9pZCBKU1Rlc3RTdHJpbmdpZmllclJlYWRXcml0ZUF0dHJpYnV0ZQogICAgIEJh
c2U6OmFuYWx5emVIZWFwKGNlbGwsIGFuYWx5emVyKTsKIH0KIAotYm9vbCBKU1Rlc3RTdHJpbmdp
ZmllclJlYWRXcml0ZUF0dHJpYnV0ZU93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhK
U0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIFNsb3RWaXNpdG9yJiB2aXNp
dG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQorYm9vbCBKU1Rlc3RTdHJpbmdpZmllclJlYWRXcml0
ZUF0dHJpYnV0ZU93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxK
U0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3Is
IGNvbnN0IGNoYXIqKiByZWFzb24pCiB7CiAgICAgVU5VU0VEX1BBUkFNKGhhbmRsZSk7CiAgICAg
VU5VU0VEX1BBUkFNKHZpc2l0b3IpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdFN0cmluZ2lmaWVyUmVhZFdyaXRlQXR0cmlidXRlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFN0
cmluZ2lmaWVyUmVhZFdyaXRlQXR0cmlidXRlLmgJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTdHJpbmdpZmllclJlYWRX
cml0ZUF0dHJpYnV0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC02NSw3ICs2NSw3IEBAIHByb3RlY3Rl
ZDoKIAogY2xhc3MgSlNUZXN0U3RyaW5naWZpZXJSZWFkV3JpdGVBdHRyaWJ1dGVPd25lciBmaW5h
bCA6IHB1YmxpYyBKU0M6OldlYWtIYW5kbGVPd25lciB7CiBwdWJsaWM6Ci0gICAgYm9vbCBpc1Jl
YWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBj
b250ZXh0LCBKU0M6OlNsb3RWaXNpdG9yJiwgY29uc3QgY2hhcioqKSBmaW5hbDsKKyAgICBib29s
IGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZv
aWQqIGNvbnRleHQsIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYsIGNvbnN0IGNoYXIqKikgZmlu
YWw7CiAgICAgdm9pZCBmaW5hbGl6ZShKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBj
b250ZXh0KSBmaW5hbDsKIH07CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RUeXBlZGVmcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFR5cGVkZWZzLmNwcAkocmV2aXNpb24g
MjczMTE5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dFR5cGVkZWZzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTMsNiArNTMsNyBAQAogI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL0pTQXJyYXkuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0NJ
bmxpbmVzLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNEZXN0cnVjdGlibGVPYmplY3RI
ZWFwQ2VsbFR5cGUuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9TbG90VmlzaXRvck1hY3Jv
cy5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1N1YnNwYWNlSW5saW5lcy5oPgogI2luY2x1
ZGUgPHd0Zi9HZXRQdHIuaD4KICNpbmNsdWRlIDx3dGYvUG9pbnRlclByZXBhcmF0aW9ucy5oPgpA
QCAtODI1LDcgKzgyNiw5IEBAIEpTQzo6SXNvU3Vic3BhY2UqIEpTVGVzdFR5cGVkZWZzOjpzdWJz
cGEKICAgICBhdXRvKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdFR5cGVkZWZzLmdl
dCgpOwogSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKIElHTk9SRV9X
QVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQotICAgIGlmICgmSlNUZXN0VHlw
ZWRlZnM6OnZpc2l0T3V0cHV0Q29uc3RyYWludHMgIT0gJkpTQzo6SlNDZWxsOjp2aXNpdE91dHB1
dENvbnN0cmFpbnRzKQorICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpK
U0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3RUeXBlZGVmczo6dmlzaXRPdXRwdXRD
b25zdHJhaW50czsKKyAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6
OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENv
bnN0cmFpbnRzOworICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNp
dE91dHB1dENvbnN0cmFpbnQpCiAgICAgICAgIGNsaWVudERhdGEub3V0cHV0Q29uc3RyYWludFNw
YWNlcygpLmFwcGVuZChzcGFjZSk7CiBJR05PUkVfV0FSTklOR1NfRU5ECiBJR05PUkVfV0FSTklO
R1NfRU5ECkBAIC04NDEsNyArODQ0LDcgQEAgdm9pZCBKU1Rlc3RUeXBlZGVmczo6YW5hbHl6ZUhl
YXAoSlNDZWxsKgogICAgIEJhc2U6OmFuYWx5emVIZWFwKGNlbGwsIGFuYWx5emVyKTsKIH0KIAot
Ym9vbCBKU1Rlc3RUeXBlZGVmc093bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6
OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIFNsb3RWaXNpdG9yJiB2aXNpdG9y
LCBjb25zdCBjaGFyKiogcmVhc29uKQorYm9vbCBKU1Rlc3RUeXBlZGVmc093bmVyOjppc1JlYWNo
YWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9p
ZCosIEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCiB7
CiAgICAgVU5VU0VEX1BBUkFNKGhhbmRsZSk7CiAgICAgVU5VU0VEX1BBUkFNKHZpc2l0b3IpOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFR5cGVk
ZWZzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdFR5cGVkZWZzLmgJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RUeXBlZGVmcy5oCSh3b3JraW5nIGNvcHkp
CkBAIC02Nyw3ICs2Nyw3IEBAIHByb3RlY3RlZDoKIAogY2xhc3MgSlNUZXN0VHlwZWRlZnNPd25l
ciBmaW5hbCA6IHB1YmxpYyBKU0M6OldlYWtIYW5kbGVPd25lciB7CiBwdWJsaWM6Ci0gICAgYm9v
bCBpc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2
b2lkKiBjb250ZXh0LCBKU0M6OlNsb3RWaXNpdG9yJiwgY29uc3QgY2hhcioqKSBmaW5hbDsKKyAg
ICBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93
bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYsIGNvbnN0IGNoYXIq
KikgZmluYWw7CiAgICAgdm9pZCBmaW5hbGl6ZShKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2
b2lkKiBjb250ZXh0KSBmaW5hbDsKIH07CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1dvcmtlckdsb2JhbFNjb3BlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNXb3JrZXJHbG9iYWxTY29w
ZS5jcHAJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1dvcmtlckdsb2JhbFNjb3BlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAs
NiArNDAsNyBAQAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0hlYXBBbmFseXplci5oPgogI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTQ0lubGluZXMuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9KU0Rlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZS5oPgorI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL1Nsb3RWaXNpdG9yTWFjcm9zLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
U3Vic3BhY2VJbmxpbmVzLmg+CiAjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgogI2luY2x1ZGUgPHd0
Zi9Qb2ludGVyUHJlcGFyYXRpb25zLmg+CkBAIC0zMzIsNyArMzMzLDkgQEAgSlNDOjpJc29TdWJz
cGFjZSogSlNXb3JrZXJHbG9iYWxTY29wZTo6cwogICAgIGF1dG8qIHNwYWNlID0gc3BhY2VzLm1f
c3Vic3BhY2VGb3JXb3JrZXJHbG9iYWxTY29wZS5nZXQoKTsKIElHTk9SRV9XQVJOSU5HU19CRUdJ
TigidW5yZWFjaGFibGUtY29kZSIpCiBJR05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNh
bC1jb21wYXJlIikKLSAgICBpZiAoJkpTV29ya2VyR2xvYmFsU2NvcGU6OnZpc2l0T3V0cHV0Q29u
c3RyYWludHMgIT0gJkpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzKQorICAgIHZv
aWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNp
dG9yJikgPSBKU1dvcmtlckdsb2JhbFNjb3BlOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOworICAg
IHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpT
bG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAg
aWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWlu
dCkKICAgICAgICAgY2xpZW50RGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNw
YWNlKTsKIElHTk9SRV9XQVJOSU5HU19FTkQKIElHTk9SRV9XQVJOSU5HU19FTkQKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1dvcmtsZXRHbG9iYWxTY29w
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTV29ya2xldEdsb2JhbFNjb3BlLmNwcAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTV29ya2xldEdsb2JhbFNjb3BlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL0hlYXBBbmFseXplci5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTQ0lubGluZXMu
aD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0Rlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxs
VHlwZS5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1Nsb3RWaXNpdG9yTWFjcm9zLmg+CiAj
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvU3Vic3BhY2VJbmxpbmVzLmg+CiAjaW5jbHVkZSA8d3Rm
L0dldFB0ci5oPgogI2luY2x1ZGUgPHd0Zi9Qb2ludGVyUHJlcGFyYXRpb25zLmg+CkBAIC0xODEs
NyArMTgyLDkgQEAgSlNDOjpJc29TdWJzcGFjZSogSlNXb3JrbGV0R2xvYmFsU2NvcGU6OgogICAg
IGF1dG8qIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JXb3JrbGV0R2xvYmFsU2NvcGUuZ2V0
KCk7CiBJR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQogSUdOT1JFX1dB
Uk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgaWYgKCZKU1dvcmtsZXRH
bG9iYWxTY29wZTo6dmlzaXRPdXRwdXRDb25zdHJhaW50cyAhPSAmSlNDOjpKU0NlbGw6OnZpc2l0
T3V0cHV0Q29uc3RyYWludHMpCisgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShK
U0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTV29ya2xldEdsb2JhbFNjb3BlOjp2
aXNpdE91dHB1dENvbnN0cmFpbnRzOworICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0
cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZp
c2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9
IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKICAgICAgICAgY2xpZW50RGF0YS5vdXRwdXRD
b25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKIElHTk9SRV9XQVJOSU5HU19FTkQKIElH
Tk9SRV9XQVJOSU5HU19FTkQKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9BY3RpdmVET01DYWxs
YmFjay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9BY3RpdmVET01DYWxsYmFj
ay5oCShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vQWN0aXZlRE9NQ2Fs
bGJhY2suaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQg
KEMpIDIwMTAsIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCkBAIC0zMyw2ICszNCw3IEBACiAjaW5jbHVkZSAiQ29u
dGV4dERlc3RydWN0aW9uT2JzZXJ2ZXIuaCIKIAogbmFtZXNwYWNlIEpTQyB7CitjbGFzcyBBYnN0
cmFjdFNsb3RWaXNpdG9yOwogY2xhc3MgU2xvdFZpc2l0b3I7CiB9CiAKQEAgLTU1LDYgKzU3LDcg
QEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgYWN0aXZlRE9NT2JqZWN0c0FyZVN1
c3BlbmRlZCgpIGNvbnN0OwogICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgYWN0aXZlRE9NT2JqZWN0
QXJlU3RvcHBlZCgpIGNvbnN0OwogICAgIAorICAgIHZpcnR1YWwgdm9pZCB2aXNpdEpTRnVuY3Rp
b24oSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJikgeyB9CiAgICAgdmlydHVhbCB2b2lkIHZpc2l0
SlNGdW5jdGlvbihKU0M6OlNsb3RWaXNpdG9yJikgeyB9CiB9OwogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9kb20vRXZlbnRMaXN0ZW5lci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Rv
bS9FdmVudExpc3RlbmVyLmgJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9XZWJDb3JlL2Rv
bS9FdmVudExpc3RlbmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDA2LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjQsNiArMjQsNyBAQAogI2luY2x1ZGUg
PHd0Zi9XZWFrUHRyLmg+CiAKIG5hbWVzcGFjZSBKU0MgeworY2xhc3MgQWJzdHJhY3RTbG90Vmlz
aXRvcjsKIGNsYXNzIEpTT2JqZWN0OwogY2xhc3MgU2xvdFZpc2l0b3I7CiB9CkBAIC01Miw2ICs1
Myw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlRXZlbnQoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCYsIEV2ZW50JikgPSAwOwogICAgIHZpcnR1YWwgYm9vbCB3YXNDcmVhdGVkRnJv
bU1hcmt1cCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAKKyAgICB2aXJ0dWFsIHZvaWQgdmlz
aXRKU0Z1bmN0aW9uKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpIHsgfQogICAgIHZpcnR1YWwg
dm9pZCB2aXNpdEpTRnVuY3Rpb24oSlNDOjpTbG90VmlzaXRvciYpIHsgfQogCiAgICAgdmlydHVh
bCBib29sIGlzQXR0cmlidXRlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2RvbS9FdmVudFRhcmdldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvZG9tL0V2ZW50VGFyZ2V0LmNwcAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL1dlYkNv
cmUvZG9tL0V2ZW50VGFyZ2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMiw3ICsyLDcgQEAKICAq
IENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQogICogICAgICAg
ICAgIChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQogICogICAgICAg
ICAgIChDKSAyMDAxIERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUub3JnKQotICogQ29weXJpZ2h0
IChDKSAyMDA0LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDA0LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29w
eXJpZ2h0IChDKSAyMDA2IEFsZXhleSBQcm9za3VyeWFrb3YgKGFwQHdlYmtpdC5vcmcpCiAgKiAg
ICAgICAgICAgKEMpIDIwMDcsIDIwMDggTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtk
ZS5vcmc+CiAgKgpAQCAtMzg0LDcgKzM4NCw4IEBAIHZvaWQgRXZlbnRUYXJnZXQ6OnJlbW92ZUFs
bEV2ZW50TGlzdGVuZXIKICAgICB0aHJlYWREYXRhLnNldElzSW5SZW1vdmVBbGxFdmVudExpc3Rl
bmVycyhmYWxzZSk7CiB9CiAKLXZvaWQgRXZlbnRUYXJnZXQ6OnZpc2l0SlNFdmVudExpc3RlbmVy
cyhKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4K
K3ZvaWQgRXZlbnRUYXJnZXQ6OnZpc2l0SlNFdmVudExpc3RlbmVycyhWaXNpdG9yJiB2aXNpdG9y
KQogewogICAgIEV2ZW50VGFyZ2V0RGF0YSogZGF0YSA9IGV2ZW50VGFyZ2V0RGF0YUNvbmN1cnJl
bnRseSgpOwogICAgIGlmICghZGF0YSkKQEAgLTM5Niw2ICszOTcsOSBAQCB2b2lkIEV2ZW50VGFy
Z2V0Ojp2aXNpdEpTRXZlbnRMaXN0ZW5lcnMoCiAgICAgICAgIGxpc3RlbmVyLT52aXNpdEpTRnVu
Y3Rpb24odmlzaXRvcik7CiB9CiAKK3RlbXBsYXRlIHZvaWQgRXZlbnRUYXJnZXQ6OnZpc2l0SlNF
dmVudExpc3RlbmVycyhKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQg
RXZlbnRUYXJnZXQ6OnZpc2l0SlNFdmVudExpc3RlbmVycyhKU0M6OlNsb3RWaXNpdG9yJik7CisK
IHZvaWQgRXZlbnRUYXJnZXQ6OmludmFsaWRhdGVFdmVudExpc3RlbmVyUmVnaW9ucygpCiB7CiAg
ICAgaWYgKGlzPEVsZW1lbnQ+KCp0aGlzKSkgewpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0V2
ZW50VGFyZ2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50VGFyZ2V0
LmgJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9FdmVudFRhcmdldC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yLDcgKzIsNyBAQAogICogQ29weXJpZ2h0IChDKSAxOTk5IExh
cnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29p
dmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDIwMDEgRGlyayBNdWVs
bGVyIChtdWVsbGVyQGtkZS5vcmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxNyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAyMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQWxleGV5
IFByb3NrdXJ5YWtvdiAoYXBAd2Via2l0Lm9yZykKICAqICAgICAgICAgICAoQykgMjAwNywgMjAw
OCBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KICAqCkBAIC05Nyw3ICs5
Nyw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGZpcmVFdmVudExpc3RlbmVycyhFdmVudCYsIEV2ZW50
SW52b2tlUGhhc2UpOwogICAgIGJvb2wgaXNGaXJpbmdFdmVudExpc3RlbmVycygpIGNvbnN0Owog
Ci0gICAgdm9pZCB2aXNpdEpTRXZlbnRMaXN0ZW5lcnMoSlNDOjpTbG90VmlzaXRvciYpOworICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgdmlzaXRKU0V2ZW50TGlzdGVuZXJzKFZp
c2l0b3ImKTsKICAgICB2b2lkIGludmFsaWRhdGVKU0V2ZW50TGlzdGVuZXJzKEpTQzo6SlNPYmpl
Y3QqKTsKIAogICAgIGNvbnN0IEV2ZW50VGFyZ2V0RGF0YSogZXZlbnRUYXJnZXREYXRhKCkgY29u
c3Q7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vTXV0YXRpb25SZWNvcmQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9NdXRhdGlvblJlY29yZC5jcHAJKHJldmlzaW9uIDI3
MzExOSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9NdXRhdGlvblJlY29yZC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy
ZQpAQCAtNDEsNyArNDIsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIG5hbWVzcGFjZSB7CiAK
LXN0YXRpYyB2b2lkIHZpc2l0Tm9kZUxpc3QoSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvciwgTm9k
ZUxpc3QmIG5vZGVMaXN0KQorc3RhdGljIHZvaWQgdmlzaXROb2RlTGlzdChKU0M6OkFic3RyYWN0
U2xvdFZpc2l0b3ImIHZpc2l0b3IsIE5vZGVMaXN0JiBub2RlTGlzdCkKIHsKICAgICBBU1NFUlQo
IW5vZGVMaXN0LmlzTGl2ZU5vZGVMaXN0KCkpOwogICAgIHVuc2lnbmVkIGxlbmd0aCA9IG5vZGVM
aXN0Lmxlbmd0aCgpOwpAQCAtNjgsNyArNjksNyBAQCBwcml2YXRlOgogICAgIE5vZGUqIHByZXZp
b3VzU2libGluZygpIG92ZXJyaWRlIHsgcmV0dXJuIG1fcHJldmlvdXNTaWJsaW5nLmdldCgpOyB9
CiAgICAgTm9kZSogbmV4dFNpYmxpbmcoKSBvdmVycmlkZSB7IHJldHVybiBtX25leHRTaWJsaW5n
LmdldCgpOyB9CiAKLSAgICB2b2lkIHZpc2l0Tm9kZXNDb25jdXJyZW50bHkoSlNDOjpTbG90Vmlz
aXRvciYgdmlzaXRvcikgY29uc3QgZmluYWwKKyAgICB2b2lkIHZpc2l0Tm9kZXNDb25jdXJyZW50
bHkoSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBjb25zdCBmaW5hbAogICAgIHsK
ICAgICAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHJvb3QobV90YXJnZXQucHRyKCkpKTsKICAg
ICAgICAgaWYgKG1fYWRkZWROb2RlcykKQEAgLTEwNSw3ICsxMDYsNyBAQCBwcml2YXRlOgogICAg
ICAgICByZXR1cm4gbm9kZUxpc3QuZ2V0KCk7CiAgICAgfQogCi0gICAgdm9pZCB2aXNpdE5vZGVz
Q29uY3VycmVudGx5KEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0IGZpbmFsCisgICAg
dm9pZCB2aXNpdE5vZGVzQ29uY3VycmVudGx5KEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYgdmlz
aXRvcikgY29uc3QgZmluYWwKICAgICB7CiAgICAgICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChy
b290KG1fdGFyZ2V0LnB0cigpKSk7CiAgICAgfQpAQCAtMTY0LDcgKzE2NSw3IEBAIHByaXZhdGU6
CiAKICAgICBTdHJpbmcgb2xkVmFsdWUoKSBvdmVycmlkZSB7IHJldHVybiBTdHJpbmcoKTsgfQog
Ci0gICAgdm9pZCB2aXNpdE5vZGVzQ29uY3VycmVudGx5KEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0
b3IpIGNvbnN0IGZpbmFsCisgICAgdm9pZCB2aXNpdE5vZGVzQ29uY3VycmVudGx5KEpTQzo6QWJz
dHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikgY29uc3QgZmluYWwKICAgICB7CiAgICAgICAgIG1f
cmVjb3JkLT52aXNpdE5vZGVzQ29uY3VycmVudGx5KHZpc2l0b3IpOwogICAgIH0KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2RvbS9NdXRhdGlvblJlY29yZC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2RvbS9NdXRhdGlvblJlY29yZC5oCShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2Uv
V2ViQ29yZS9kb20vTXV0YXRpb25SZWNvcmQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYg
QEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCkBAIC0zNiw3ICszNyw3IEBA
CiAKIG5hbWVzcGFjZSBKU0MgewogCi1jbGFzcyBTbG90VmlzaXRvcjsKK2NsYXNzIEFic3RyYWN0
U2xvdFZpc2l0b3I7CiAKIH0KIApAQCAtNzIsNyArNzMsNyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0
dWFsIFN0cmluZyBvbGRWYWx1ZSgpIHsgcmV0dXJuIFN0cmluZygpOyB9CiAKLSAgICB2aXJ0dWFs
IHZvaWQgdmlzaXROb2Rlc0NvbmN1cnJlbnRseShKU0M6OlNsb3RWaXNpdG9yJikgY29uc3QgPSAw
OworICAgIHZpcnR1YWwgdm9pZCB2aXNpdE5vZGVzQ29uY3VycmVudGx5KEpTQzo6QWJzdHJhY3RT
bG90VmlzaXRvciYpIGNvbnN0ID0gMDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlRmlsdGVyQ29uZGl0aW9uLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvZG9tL05vZGVGaWx0ZXJDb25kaXRpb24uaAkocmV2aXNpb24gMjcz
MTE5KQorKysgU291cmNlL1dlYkNvcmUvZG9tL05vZGVGaWx0ZXJDb25kaXRpb24uaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzgsNyArMzgsNiBAQCBjbGFzcyBOb2RlRmlsdGVyQ29uZGl0aW9uIDogcHVi
bGljIFJlZkNvCiBwdWJsaWM6CiAgICAgdmlydHVhbCB+Tm9kZUZpbHRlckNvbmRpdGlvbigpID0g
ZGVmYXVsdDsKICAgICB2aXJ0dWFsIHVuc2lnbmVkIHNob3J0IGFjY2VwdE5vZGUoTm9kZSYpIGNv
bnN0ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXRBZ2dyZWdhdGUoSlNDOjpTbG90VmlzaXRv
ciYpIHsgfQogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNv
cmUvZG9tL1N0YXRpY1JhbmdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20v
U3RhdGljUmFuZ2UuY3BwCShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20v
U3RhdGljUmFuZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxNi0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNzYsNyArNzYsNyBAQCBFeGNlcHRp
b25PcjxSZWY8U3RhdGljUmFuZ2U+PiBTdGF0aWNSYW5nCiAgICAgcmV0dXJuIGNyZWF0ZSh7IHsg
aW5pdC5zdGFydENvbnRhaW5lci5yZWxlYXNlTm9uTnVsbCgpLCBpbml0LnN0YXJ0T2Zmc2V0IH0s
IHsgaW5pdC5lbmRDb250YWluZXIucmVsZWFzZU5vbk51bGwoKSwgaW5pdC5lbmRPZmZzZXQgfSB9
KTsKIH0KIAotdm9pZCBTdGF0aWNSYW5nZTo6dmlzaXROb2Rlc0NvbmN1cnJlbnRseShKU0M6OlNs
b3RWaXNpdG9yJiB2aXNpdG9yKSBjb25zdAordm9pZCBTdGF0aWNSYW5nZTo6dmlzaXROb2Rlc0Nv
bmN1cnJlbnRseShKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0CiB7CiAg
ICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHJvb3Qoc3RhcnQuY29udGFpbmVyLmdldCgpKSk7CiAg
ICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHJvb3QoZW5kLmNvbnRhaW5lci5nZXQoKSkpOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvZG9tL1N0YXRpY1JhbmdlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvZG9tL1N0YXRpY1JhbmdlLmgJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9X
ZWJDb3JlL2RvbS9TdGF0aWNSYW5nZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzAsNyArMzAsNyBA
QAogCiBuYW1lc3BhY2UgSlNDIHsKIAotY2xhc3MgU2xvdFZpc2l0b3I7CitjbGFzcyBBYnN0cmFj
dFNsb3RWaXNpdG9yOwogCiB9CiAKQEAgLTU4LDcgKzU4LDcgQEAgcHVibGljOgogICAgIHVuc2ln
bmVkIGVuZE9mZnNldCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIFNpbXBsZVJhbmdlOjplbmRPZmZz
ZXQoKTsgfQogICAgIGJvb2wgY29sbGFwc2VkKCkgY29uc3QgZmluYWwgeyByZXR1cm4gU2ltcGxl
UmFuZ2U6OmNvbGxhcHNlZCgpOyB9CiAKLSAgICB2b2lkIHZpc2l0Tm9kZXNDb25jdXJyZW50bHko
SlNDOjpTbG90VmlzaXRvciYpIGNvbnN0OworICAgIHZvaWQgdmlzaXROb2Rlc0NvbmN1cnJlbnRs
eShKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKSBjb25zdDsKIAogcHJpdmF0ZToKICAgICBTdGF0
aWNSYW5nZShTaW1wbGVSYW5nZSYmKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L1dlYkdMMlJlbmRlcmluZ0NvbnRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL1dlYkdMMlJlbmRlcmluZ0NvbnRleHQuY3BwCShyZXZpc2lvbiAyNzMxMTkp
CisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTDJSZW5kZXJpbmdDb250ZXh0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTUtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTUtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTMwNzgsNyArMzA3OCw3IEBAIGJvb2wgV2ViR0wyUmVuZGVy
aW5nQ29udGV4dDo6Y2hlY2tBbmRUcmEKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBXZWJH
TDJSZW5kZXJpbmdDb250ZXh0OjphZGRNZW1iZXJzVG9PcGFxdWVSb290cyhKU0M6OlNsb3RWaXNp
dG9yJiB2aXNpdG9yKQordm9pZCBXZWJHTDJSZW5kZXJpbmdDb250ZXh0OjphZGRNZW1iZXJzVG9P
cGFxdWVSb290cyhKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6YWRkTWVtYmVyc1RvT3BhcXVlUm9vdHModmlzaXRvcik7
CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMMlJlbmRlcmluZ0NvbnRl
eHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTDJSZW5k
ZXJpbmdDb250ZXh0LmgJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL1dlYkdMMlJlbmRlcmluZ0NvbnRleHQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2MSw3
ICsyNjEsNyBAQCBwdWJsaWM6CiAKICAgICBib29sIGNoZWNrQW5kVHJhbnNsYXRlQXR0YWNobWVu
dHMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQ0dMZW51bSwgVmVjdG9yPEdDR0xlbnVtPiYp
OwogCi0gICAgdm9pZCBhZGRNZW1iZXJzVG9PcGFxdWVSb290cyhKU0M6OlNsb3RWaXNpdG9yJikg
b3ZlcnJpZGU7CisgICAgdm9pZCBhZGRNZW1iZXJzVG9PcGFxdWVSb290cyhKU0M6OkFic3RyYWN0
U2xvdFZpc2l0b3ImKSBvdmVycmlkZTsKIAogcHJpdmF0ZToKICAgICBXZWJHTDJSZW5kZXJpbmdD
b250ZXh0KENhbnZhc0Jhc2UmLCBHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMpOwpJbmRleDog
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xGcmFtZWJ1ZmZlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xGcmFtZWJ1ZmZlci5jcHAJKHJl
dmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRnJhbWVi
dWZmZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAwOS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAwOS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjMsNyArNjMsNyBAQCBuYW1lc3BhY2Ugewog
ICAgICAgICB2b2lkIG9uRGV0YWNoZWQoY29uc3QgQWJzdHJhY3RMb2NrZXImLCBHcmFwaGljc0Nv
bnRleHRHTCopIG92ZXJyaWRlOwogICAgICAgICB2b2lkIGF0dGFjaChHcmFwaGljc0NvbnRleHRH
TCosIEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gYXR0YWNobWVudCkgb3ZlcnJpZGU7CiAgICAg
ICAgIHZvaWQgdW5hdHRhY2goR3JhcGhpY3NDb250ZXh0R0wqLCBHQ0dMZW51bSB0YXJnZXQsIEdD
R0xlbnVtIGF0dGFjaG1lbnQpIG92ZXJyaWRlOwotICAgICAgICB2b2lkIGFkZE1lbWJlcnNUb09w
YXF1ZVJvb3RzKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgSlNDOjpTbG90VmlzaXRvciYpIG92ZXJy
aWRlOworICAgICAgICB2b2lkIGFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKGNvbnN0IEFic3RyYWN0
TG9ja2VyJiwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJikgb3ZlcnJpZGU7CiAKICAgICAgICAg
V2ViR0xSZW5kZXJidWZmZXJBdHRhY2htZW50KCkgeyB9OwogCkBAIC0xNDUsNyArMTQ1LDcgQEAg
bmFtZXNwYWNlIHsKICAgICAgICAgICAgIGNvbnRleHQtPmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVy
KHRhcmdldCwgYXR0YWNobWVudCwgR3JhcGhpY3NDb250ZXh0R0w6OlJFTkRFUkJVRkZFUiwgMCk7
CiAgICAgfQogCi0gICAgdm9pZCBXZWJHTFJlbmRlcmJ1ZmZlckF0dGFjaG1lbnQ6OmFkZE1lbWJl
cnNUb09wYXF1ZVJvb3RzKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgSlNDOjpTbG90VmlzaXRvciYg
dmlzaXRvcikKKyAgICB2b2lkIFdlYkdMUmVuZGVyYnVmZmVyQXR0YWNobWVudDo6YWRkTWVtYmVy
c1RvT3BhcXVlUm9vdHMoY29uc3QgQWJzdHJhY3RMb2NrZXImLCBKU0M6OkFic3RyYWN0U2xvdFZp
c2l0b3ImIHZpc2l0b3IpCiAgICAgewogICAgICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QobV9y
ZW5kZXJidWZmZXIuZ2V0KCkpOwogICAgIH0KQEAgLTE2OSw3ICsxNjksNyBAQCBuYW1lc3BhY2Ug
ewogICAgICAgICB2b2lkIG9uRGV0YWNoZWQoY29uc3QgQWJzdHJhY3RMb2NrZXImLCBHcmFwaGlj
c0NvbnRleHRHTCopIG92ZXJyaWRlOwogICAgICAgICB2b2lkIGF0dGFjaChHcmFwaGljc0NvbnRl
eHRHTCosIEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gYXR0YWNobWVudCkgb3ZlcnJpZGU7CiAg
ICAgICAgIHZvaWQgdW5hdHRhY2goR3JhcGhpY3NDb250ZXh0R0wqLCBHQ0dMZW51bSB0YXJnZXQs
IEdDR0xlbnVtIGF0dGFjaG1lbnQpIG92ZXJyaWRlOwotICAgICAgICB2b2lkIGFkZE1lbWJlcnNU
b09wYXF1ZVJvb3RzKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgSlNDOjpTbG90VmlzaXRvciYpIG92
ZXJyaWRlOworICAgICAgICB2b2lkIGFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKGNvbnN0IEFic3Ry
YWN0TG9ja2VyJiwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJikgb3ZlcnJpZGU7CiAKICAgICAg
ICAgV2ViR0xUZXh0dXJlQXR0YWNobWVudCgpIHsgfTsKIApAQCAtMjY3LDcgKzI2Nyw3IEBAIG5h
bWVzcGFjZSB7CiAjZW5kaWYKICAgICB9CiAKLSAgICB2b2lkIFdlYkdMVGV4dHVyZUF0dGFjaG1l
bnQ6OmFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgSlNDOjpT
bG90VmlzaXRvciYgdmlzaXRvcikKKyAgICB2b2lkIFdlYkdMVGV4dHVyZUF0dGFjaG1lbnQ6OmFk
ZE1lbWJlcnNUb09wYXF1ZVJvb3RzKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgSlNDOjpBYnN0cmFj
dFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogICAgIHsKICAgICAgICAgdmlzaXRvci5hZGRPcGFxdWVS
b290KG1fdGV4dHVyZS5nZXQoKSk7CiAgICAgfQpAQCAtNzIxLDcgKzcyMSw3IEBAIEdDR0xlbnVt
IFdlYkdMRnJhbWVidWZmZXI6OmdldERyYXdCdWZmZXIKICAgICByZXR1cm4gR3JhcGhpY3NDb250
ZXh0R0w6Ok5PTkU7CiB9CiAKLXZvaWQgV2ViR0xGcmFtZWJ1ZmZlcjo6YWRkTWVtYmVyc1RvT3Bh
cXVlUm9vdHMoY29uc3QgQWJzdHJhY3RMb2NrZXImIGxvY2tlciwgSlNDOjpTbG90VmlzaXRvciYg
dmlzaXRvcikKK3ZvaWQgV2ViR0xGcmFtZWJ1ZmZlcjo6YWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMo
Y29uc3QgQWJzdHJhY3RMb2NrZXImIGxvY2tlciwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQogewogICAgIGZvciAoYXV0byYgZW50cnkgOiBtX2F0dGFjaG1lbnRzKQogICAgICAg
ICBlbnRyeS52YWx1ZS0+YWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMobG9ja2VyLCB2aXNpdG9yKTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRnJhbWVidWZmZXIuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEZyYW1lYnVmZmVyLmgJ
KHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRnJh
bWVidWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDA5LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNCw3ICszNCw3IEBACiAjaW5jbHVkZSA8d3RmL1Zl
Y3Rvci5oPgogCiBuYW1lc3BhY2UgSlNDIHsKLWNsYXNzIFNsb3RWaXNpdG9yOworY2xhc3MgQWJz
dHJhY3RTbG90VmlzaXRvcjsKIH0KIAogbmFtZXNwYWNlIFdURiB7CkBAIC02NSw3ICs2NSw3IEBA
IHB1YmxpYzoKICAgICAgICAgdmlydHVhbCB2b2lkIG9uRGV0YWNoZWQoY29uc3QgV1RGOjpBYnN0
cmFjdExvY2tlciYsIEdyYXBoaWNzQ29udGV4dEdMKikgPSAwOwogICAgICAgICB2aXJ0dWFsIHZv
aWQgYXR0YWNoKEdyYXBoaWNzQ29udGV4dEdMKiwgR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBh
dHRhY2htZW50KSA9IDA7CiAgICAgICAgIHZpcnR1YWwgdm9pZCB1bmF0dGFjaChHcmFwaGljc0Nv
bnRleHRHTCosIEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gYXR0YWNobWVudCkgPSAwOwotICAg
ICAgICB2aXJ0dWFsIHZvaWQgYWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMoY29uc3QgV1RGOjpBYnN0
cmFjdExvY2tlciYsIEpTQzo6U2xvdFZpc2l0b3ImKSA9IDA7CisgICAgICAgIHZpcnR1YWwgdm9p
ZCBhZGRNZW1iZXJzVG9PcGFxdWVSb290cyhjb25zdCBXVEY6OkFic3RyYWN0TG9ja2VyJiwgSlND
OjpBYnN0cmFjdFNsb3RWaXNpdG9yJikgPSAwOwogCiAgICAgcHJvdGVjdGVkOgogICAgICAgICBX
ZWJHTEF0dGFjaG1lbnQoKTsKQEAgLTExNCw3ICsxMTQsNyBAQCBwdWJsaWM6CiAKICAgICBHQ0dM
ZW51bSBnZXREcmF3QnVmZmVyKEdDR0xlbnVtKTsKIAotICAgIHZvaWQgYWRkTWVtYmVyc1RvT3Bh
cXVlUm9vdHMoY29uc3QgV1RGOjpBYnN0cmFjdExvY2tlciYsIEpTQzo6U2xvdFZpc2l0b3ImKTsK
KyAgICB2b2lkIGFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKGNvbnN0IFdURjo6QWJzdHJhY3RMb2Nr
ZXImLCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKTsKIAogcHJpdmF0ZToKICAgICBXZWJHTEZy
YW1lYnVmZmVyKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UmKTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2h0bWwvY2FudmFzL1dlYkdMUHJvZ3JhbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvaHRtbC9jYW52YXMvV2ViR0xQcm9ncmFtLmNwcAkocmV2aXNpb24gMjczMTE5KQorKysg
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xQcm9ncmFtLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0yMDYsNyArMjA2LDcgQEAgYm9vbCBXZWJHTFByb2dyYW06OmRldGFjaFNoYWRlcihjb25zdCBB
YgogICAgIH0KIH0KIAotdm9pZCBXZWJHTFByb2dyYW06OmFkZE1lbWJlcnNUb09wYXF1ZVJvb3Rz
KGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQg
V2ViR0xQcm9ncmFtOjphZGRNZW1iZXJzVG9PcGFxdWVSb290cyhjb25zdCBBYnN0cmFjdExvY2tl
ciYsIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB2aXNpdG9yLmFk
ZE9wYXF1ZVJvb3QobV92ZXJ0ZXhTaGFkZXIuZ2V0KCkpOwogICAgIHZpc2l0b3IuYWRkT3BhcXVl
Um9vdChtX2ZyYWdtZW50U2hhZGVyLmdldCgpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL1dlYkdMUHJvZ3JhbS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL1dlYkdMUHJvZ3JhbS5oCShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9XZWJHTFByb2dyYW0uaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM1LDcgKzM1
LDcgQEAKICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBKU0MgewotY2xhc3Mg
U2xvdFZpc2l0b3I7CitjbGFzcyBBYnN0cmFjdFNsb3RWaXNpdG9yOwogfQogCiBuYW1lc3BhY2Ug
V1RGIHsKQEAgLTg4LDcgKzg4LDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9yZXF1aXJl
ZFRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyQ291bnQ7CiAgICAgfQogCi0gICAgdm9pZCBhZGRNZW1i
ZXJzVG9PcGFxdWVSb290cyhjb25zdCBXVEY6OkFic3RyYWN0TG9ja2VyJiwgSlNDOjpTbG90Vmlz
aXRvciYpOworICAgIHZvaWQgYWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMoY29uc3QgV1RGOjpBYnN0
cmFjdExvY2tlciYsIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpOwogCiBwcml2YXRlOgogICAg
IFdlYkdMUHJvZ3JhbShXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlJik7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlLmNwcAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03OTMxLDcg
Kzc5MzEsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmRpc3BhdGNoCiAgICAg
cXVldWVUYXNrVG9EaXNwYXRjaEV2ZW50KCpjYW52YXMsIFRhc2tTb3VyY2U6OldlYkdMLCBXZWJH
TENvbnRleHRFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS53ZWJnbGNvbnRleHRjaGFuZ2VkRXZl
bnQsIEV2ZW50OjpDYW5CdWJibGU6Ok5vLCBFdmVudDo6SXNDYW5jZWxhYmxlOjpZZXMsIGVtcHR5
U3RyaW5nKCkpKTsKIH0KIAotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjphZGRNZW1i
ZXJzVG9PcGFxdWVSb290cyhKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlOjphZGRNZW1iZXJzVG9PcGFxdWVSb290cyhKU0M6OkFic3RyYWN0
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhvYmpl
Y3RHcmFwaExvY2soKSk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmgJKHJldmlzaW9uIDI3MzExOSkKKysr
IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUt
MjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTUtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTU4LDcgKzU4LDcgQEAKICNlbmRpZgogCiBuYW1lc3BhY2UgSlND
IHsKLWNsYXNzIFNsb3RWaXNpdG9yOworY2xhc3MgQWJzdHJhY3RTbG90VmlzaXRvcjsKIH0KIAog
bmFtZXNwYWNlIFdURiB7CkBAIC00MTEsNyArNDExLDcgQEAgcHVibGljOgogICAgIHZvaWQgcmVj
eWNsZUNvbnRleHQoKSBvdmVycmlkZTsKICAgICB2b2lkIGRpc3BhdGNoQ29udGV4dENoYW5nZWRO
b3RpZmljYXRpb24oKSBvdmVycmlkZTsKIAotICAgIHZpcnR1YWwgdm9pZCBhZGRNZW1iZXJzVG9P
cGFxdWVSb290cyhKU0M6OlNsb3RWaXNpdG9yJik7CisgICAgdmlydHVhbCB2b2lkIGFkZE1lbWJl
cnNUb09wYXF1ZVJvb3RzKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpOwogICAgIC8vIFRoaXMg
bG9jayBtdXN0IGJlIGhlbGQgYWNyb3NzIGFsbCBtdXRhdGlvbnMgb2YgY29udGFpbmVycyBsaWtl
CiAgICAgLy8gVmVjdG9ycywgSGFzaFNldHMsIGV0Yy4gd2hpY2ggY29udGFpbiBSZWZQdHI8V2Vi
R0xPYmplY3Q+LCBhbmQKICAgICAvLyB3aGljaCBhcmUgdHJhdmVyc2VkIGJ5IGFkZE1lbWJlcnNU
b09wYXF1ZVJvb3RzKCkgb3IgYW55IG9mIHRoZQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9j
YW52YXMvV2ViR0xUcmFuc2Zvcm1GZWVkYmFjay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvaHRtbC9jYW52YXMvV2ViR0xUcmFuc2Zvcm1GZWVkYmFjay5jcHAJKHJldmlzaW9uIDI3
MzExOSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVHJhbnNmb3JtRmVlZGJh
Y2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTUtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTMwLDggKzMwLDcgQEAKIAogI2luY2x1ZGUgIldlYkdMQ29u
dGV4dEdyb3VwLmgiCiAjaW5jbHVkZSAiV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5oIgotI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL1Nsb3RWaXNpdG9yLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvU2xvdFZpc2l0b3JJbmxpbmVzLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvQWJz
dHJhY3RTbG90VmlzaXRvcklubGluZXMuaD4KICNpbmNsdWRlIDx3dGYvTG9jay5oPgogI2luY2x1
ZGUgPHd0Zi9Mb2NrZXIuaD4KIApAQCAtOTMsNyArOTIsNyBAQCBib29sIFdlYkdMVHJhbnNmb3Jt
RmVlZGJhY2s6Omhhc0Vub3VnaEJ1CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgV2ViR0xU
cmFuc2Zvcm1GZWVkYmFjazo6YWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMoY29uc3QgQWJzdHJhY3RM
b2NrZXImIGxvY2tlciwgSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgV2ViR0xUcmFu
c2Zvcm1GZWVkYmFjazo6YWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMoY29uc3QgQWJzdHJhY3RMb2Nr
ZXImIGxvY2tlciwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGZv
ciAoYXV0byYgYnVmZmVyIDogbV9ib3VuZEluZGV4ZWRUcmFuc2Zvcm1GZWVkYmFja0J1ZmZlcnMp
CiAgICAgICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChidWZmZXIuZ2V0KCkpOwpJbmRleDogU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xUcmFuc2Zvcm1GZWVkYmFjay5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVHJhbnNmb3JtRmVlZGJhY2su
aAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xU
cmFuc2Zvcm1GZWVkYmFjay5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxNS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzEsNyArMzEsNyBAQAogI2lu
Y2x1ZGUgIldlYkdMU2hhcmVkT2JqZWN0LmgiCiAKIG5hbWVzcGFjZSBKU0MgewotY2xhc3MgU2xv
dFZpc2l0b3I7CitjbGFzcyBBYnN0cmFjdFNsb3RWaXNpdG9yOwogfQogCiBuYW1lc3BhY2UgV1RG
IHsKQEAgLTcwLDcgKzcwLDcgQEAgcHVibGljOgogICAgIAogICAgIGJvb2wgaGFzRW5vdWdoQnVm
ZmVycyhHQ0dMdWludCBudW1SZXF1aXJlZCkgY29uc3Q7CiAKLSAgICB2b2lkIGFkZE1lbWJlcnNU
b09wYXF1ZVJvb3RzKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgSlNDOjpTbG90VmlzaXRvciYpOwor
ICAgIHZvaWQgYWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMoY29uc3QgQWJzdHJhY3RMb2NrZXImLCBK
U0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKTsKIAogcHJpdmF0ZToKICAgICBXZWJHTFRyYW5zZm9y
bUZlZWRiYWNrKFdlYkdMMlJlbmRlcmluZ0NvbnRleHQmKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL1dlYkdMVmVydGV4QXJyYXlPYmplY3RCYXNlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFZlcnRleEFycmF5T2JqZWN0QmFzZS5j
cHAJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdM
VmVydGV4QXJyYXlPYmplY3RCYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI5LDggKzI5LDcg
QEAKICNpZiBFTkFCTEUoV0VCR0wpCiAKICNpbmNsdWRlICJXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvU2xvdFZpc2l0b3IuaD4KLSNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9TbG90VmlzaXRvcklubGluZXMuaD4KKyNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9BYnN0cmFjdFNsb3RWaXNpdG9ySW5saW5lcy5oPgogI2luY2x1ZGUgPHd0Zi9Mb2Nr
ZXIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMTA5LDcgKzEwOCw3IEBAIHZvaWQgV2Vi
R0xWZXJ0ZXhBcnJheU9iamVjdEJhc2U6OnNldFZlcnQKICAgICBtX3ZlcnRleEF0dHJpYlN0YXRl
W2luZGV4XS5kaXZpc29yID0gZGl2aXNvcjsKIH0KIAotdm9pZCBXZWJHTFZlcnRleEFycmF5T2Jq
ZWN0QmFzZTo6YWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMoY29uc3QgQWJzdHJhY3RMb2NrZXImLCBK
U0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBXZWJHTFZlcnRleEFycmF5T2JqZWN0QmFz
ZTo6YWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMoY29uc3QgQWJzdHJhY3RMb2NrZXImLCBKU0M6OkFi
c3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290
KG1fYm91bmRFbGVtZW50QXJyYXlCdWZmZXIuZ2V0KCkpOwogICAgIGZvciAoYXV0byYgc3RhdGUg
OiBtX3ZlcnRleEF0dHJpYlN0YXRlKQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
V2ViR0xWZXJ0ZXhBcnJheU9iamVjdEJhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9XZWJHTFZlcnRleEFycmF5T2JqZWN0QmFzZS5oCShyZXZpc2lvbiAyNzMx
MTkpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFZlcnRleEFycmF5T2JqZWN0
QmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxNS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzIsNyArMzIsNyBAQAogI2luY2x1ZGUgIldlYkdM
Q29udGV4dE9iamVjdC5oIgogCiBuYW1lc3BhY2UgSlNDIHsKLWNsYXNzIFNsb3RWaXNpdG9yOwor
Y2xhc3MgQWJzdHJhY3RTbG90VmlzaXRvcjsKIH0KIAogbmFtZXNwYWNlIFdURiB7CkBAIC03Nyw3
ICs3Nyw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgc2V0VmVydGV4QXR0cmliRGl2aXNvcihHQ0dM
dWludCBpbmRleCwgR0NHTHVpbnQgZGl2aXNvcik7CiAKLSAgICB2b2lkIGFkZE1lbWJlcnNUb09w
YXF1ZVJvb3RzKGNvbnN0IFdURjo6QWJzdHJhY3RMb2NrZXImLCBKU0M6OlNsb3RWaXNpdG9yJik7
CisgICAgdm9pZCBhZGRNZW1iZXJzVG9PcGFxdWVSb290cyhjb25zdCBXVEY6OkFic3RyYWN0TG9j
a2VyJiwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJik7CiAKIHByb3RlY3RlZDoKICAgICBXZWJH
TFZlcnRleEFycmF5T2JqZWN0QmFzZShXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlJiwgVHlwZSk7
Cg==
</data>
<flag name="commit-queue"
          id="439585"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>420900</attachid>
            <date>2021-02-18 18:57:58 -0800</date>
            <delta_ts>2021-02-18 20:02:02 -0800</delta_ts>
            <desc>proposed patch.</desc>
            <filename>bug-217274.patch</filename>
            <type>text/plain</type>
            <size>879363</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwMDQg
QEAKKzIwMjEtMDItMTggIE1hcmsgTGFtICA8bWFyay5sYW1AYXBwbGUuY29tPgorCisgICAgICAg
IEltcGxlbWVudCBhIEdDIHZlcmlmaWVyLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjE3Mjc0CisgICAgICAgIHJkYXI6Ly81NjI1NTY4MworCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoZSBpZGVhIGJlaGlu
ZCB0aGUgR0MgdmVyaWZpZXIgaXMgdGhhdCBpbiB0aGUgR0MgRW5kIHBoYXNlIGJlZm9yZSB3ZSBm
aW5hbGl6ZQorICAgICAgICBhbmQgc3dlZXAsIHdlJ2xsIGRvIGEgc2ltcGxlIHN0b3AgdGhlIHdv
cmxkIHN5bmNocm9ub3VzIGZ1bGwgR0Mgd2l0aCB0aGUKKyAgICAgICAgVmVyaWZpZXJTbG90Vmlz
aXRvci4gIFRoZSBWZXJpZmllclNsb3RWaXNpdG9yIHdpbGwgY29sbGVjdCBpdCdzIG93biBpbmZv
cm1hdGlvbgorICAgICAgICBvbiB3aGV0aGVyIGEgSlMgY2VsbCBzaG91bGQgYmUgbWFya2VkIG9y
IG5vdC4gIEFmdGVyIHRoaXMgdmVyaWZpZXIgR0MgcGFzcywgd2UnbGwKKyAgICAgICAgY29tcGFy
ZSB0aGUgbWFyayByZXN1bHRzLgorCisgICAgICAgIElmIHRoZSB2ZXJpZmllciBHQyBzYXlzIGEg
Y2VsbCBzaG91bGQgYmUgbWFya2VkLCB0aGVuIHRoZSByZWFsIEdDIHNob3VsZCBoYXZlCisgICAg
ICAgIG1hcmtlZCB0aGUgY2VsbC4gIFRoZSByZXZlcnNlIGlzIG5vdCB0cnVlOiBpZiB0aGUgdmVy
aWZpZXIgZG9lcyBub3QgbWFyayBhIGNlbGwsCisgICAgICAgIGl0IGlzIHN0aWxsIE9LIGZvciB0
aGUgcmVhbCBHQyB0byBtYXJrIGl0LiAgRm9yIGV4YW1wbGUsIGluIGFuIGVkZW4gR0MsIGFsbCBv
bGQKKyAgICAgICAgZ2VuZXJhdGlvbiBjZWxscyB3b3VsZCBiZSBjb25zaWRlcmVkIG1hcmsgYnkg
dGhlIHJlYWwgR0MgdGhvdWdoIHRoZSB2ZXJpZmllciB3b3VsZAorICAgICAgICBrbm93IGJldHRl
ciBpZiB0aGV5IGFyZSBhbHJlYWR5IGRlYWQuCisKKyAgICAgICAgSW1wbGVtZW50YXRpb24gZGV0
YWlsczoKKworICAgICAgICAxLiBTbG90VmlzaXRvciAob25seSB1c2VkIGJ5IHRoZSByZWFsIEdD
KSBub3cgaW5oZXJpdHMgZnJvbSBhIG5ldyBhYnN0cmFjdCBjbGFzcywKKyAgICAgICAgICAgQWJz
dHJhY3RTbG90VmlzaXRvci4KKworICAgICAgICAgICBWZXJpZmllclNsb3RWaXNpdG9yIChvbmx5
IHVzZWQgYnkgdGhlIHZlcmlmaWVyIEdDKSBhbHNvIGluaGVyaXRzIGZyb20KKyAgICAgICAgICAg
QWJzdHJhY3RTbG90VmlzaXRvci4KKworICAgICAgICAyLiBBYnN0cmFjdFNsb3RWaXNpdG9yIGRl
Y2xhcmVzIG1hbnkgdmlydHVhbCBtZXRob2RzLgorCisgICAgICAgICAgIFNsb3RWaXNpdG9yIGlt
cGxlbWVudHMgc29tZSBvZiB0aGVzZSB2aXJ0dWFsIG1ldGhvZHMgYXMgaW5saW5lIGFuZCBmaW5h
bC4KKyAgICAgICAgICAgSWYgdGhlIGNsaWVudCBpcyBpbnZva2luZyBvbmUgdGhlc2UgbWV0aG9k
cyBhbmQga25vd3MgdGhhdCBpdCB3aWxsIGJlIG9wZXJhdGluZworICAgICAgICAgICBvbiBhIFNs
b3RWaXNpdG9yLCB0aGUgbWV0aG9kIGJlaW5nIGZpbmFsIGFsbG93cyBpdCB0byBiZSBpbmxpbmVk
IGludG8gdGhlIGNsaWVudAorICAgICAgICAgICBpbnN0ZWFkIG9mIGdvaW5nIHRocm91Z2ggdGhl
IHZpcnR1YWwgZGlzcGF0Y2guCisKKyAgICAgICAgICAgRm9yIHRoZSBWZXJpZmllclNsb3RWaXNp
dG9yLCB0aGVzZSBtZXRob2RzIHdpbGwgYWx3YXlzIGJlIGludm9rZWQgYnkgIHZpcnR1YWwKKyAg
ICAgICAgICAgZGlzcGF0Y2ggdmlhIHRoZSBBYnN0cmFjdFNsb3RWaXNpdG9yIGFic3RyYWN0aW9u
LgorCisgICAgICAgIDMuIEFsbW9zdCBhbGwgbWV0aG9kcyB0aGF0IHRha2VzIGEgU2xvdFZpc2l0
b3IgcHJldmlvdXNseSAod2l0aCBhIGZldyBleGNlcHRpb25zKQorICAgICAgICAgICB3aWxsIG5v
dyBiZSB0ZW1wbGF0aXplZCwgYW5kIHNwZWNpYWxpemVkIHRvIGVpdGhlciB0YWtlIGEgU2xvdFZp
c2l0b3Igb3IgYW4KKyAgICAgICAgICAgQWJzdHJhY3RTbG90VmlzaXRvci4KKworICAgICAgICAg
ICBUaGUgY2VsbCBNZXRob2RUYWJsZSB3aWxsIG5vdyBoYXZlIDIgdmVyc2lvbnMgb2YgdmlzaXRD
aGlsZHJlbiBhbmQgdmlzaXRPdXRwdXRDb25zdHJhaW50czoKKyAgICAgICAgICAgb25lIGZvciBT
bG90VmlzaXRvciwgYW5kIG9uZSBmb3IgQWJzdHJhY3RTbG90VmlzaXRvci4KKworICAgICAgICAg
ICBUaGUgcmVhc29uIHdlIGRvbid0IHdpcmUgdGhlIDJuZCB2ZXJzaW9uIHRvIFZlcmlmaWVyU2xv
dFZpc2l0b3IgKGluc3RlYWQgb2YKKyAgICAgICAgICAgQWJzdHJhY3RTbG90VmlzaXRvcikgaXMg
YmVjYXVzZSB3ZSBkb24ndCBuZWVkIHRoZSBHQyB2ZXJpZmllciB0byBydW4gYXQgdG9wCisgICAg
ICAgICAgIHNwZWVkICh0aG91Z2ggd2UgZG9uJ3Qgd2FudCBpdCB0byBiZSB0b28gc2xvdykuICBB
bHNvLCBoYXZpbmcgaG9va3MgZm9yIHVzaW5nCisgICAgICAgICAgIGFuIEFic3RyYWN0U2xvdFZp
c2l0b3IgZ2l2ZXMgdXMgbW9yZSB1dGlsaXR5IGZvciBpbXBsZW1lbnRpbmcgb3RoZXIgdHlwZXMg
b2YKKyAgICAgICAgICAgR0MgY2hlY2tlcnMgLyBhbmFseXplcnMgaW4gdGhlIGZ1dHVyZSBhcyBz
dWJjbGFzc2VzIG9mIEFic3RyYWN0U2xvdFZpc2l0b3IuCisKKyAgICAgICAgNC4gU29tZSBtaW5v
cml0eSBvZiBtZXRob2RzIHRoYXQgdXNlZCB0byB0YWtlIGEgU2xvdFZpc2l0b3IgYnV0IGFyZSBu
b3QgY3JpdGljYWwKKyAgICAgICAgICAgdG8gcGVyZm9ybWFuY2UsIHdpbGwgbm93IGp1c3QgdGFr
ZSBhbiBBYnN0cmFjdFNsb3RWaXNpdG9yIGluc3RlYWQuICBGb3IgZXhhbXBsZSwKKyAgICAgICAg
ICAgc2VlIFR5cGVQcm9maWxlckxvZzo6dmlzaXQoKS4KKworICAgICAgICA1LiBpc1JlYWNoYWJs
ZUZyb21PcGFxdWVSb290cygpIG1ldGhvZHMgd2lsbCBhbHNvIG9ubHkgdGFrZSBhbiBBYnN0cmFj
dFNsb3RWaXNpdG9yLgorCisgICAgICAgICAgIFRoZSByZWFzb24gdGhpcyBpcyBPSyBpcyBiZWNh
dXNlIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKCkgb25seSB1c2VzIHRoZQorICAgICAgICAg
ICB2aXNpdG9yJ3MgYWRkT3BhcXVlUm9vdCgpIGFuZCBjb250YWluc09wYXF1ZVJvb3QoKSBtZXRo
b2RzLCB3aGljaCBhcmUgaW1wbGVtZW50ZWQKKyAgICAgICAgICAgaW4gdGhlIEFic3RyYWN0U2xv
dFZpc2l0b3IgaXRzZWxmLgorCisgICAgICAgICAgIEZvciBTbG90VmlzaXRvciwgdGhlIG1fb3Bh
cXVlUm9vdCBmaWVsZCB3aWxsIGJlIHJlZmVyZW5jZSBIZWFwOjptX29wYXF1ZVJvb3RzLgorICAg
ICAgICAgICBGb3IgVmVyaWZpZXJTbG90VmlzaXRvciwgdGhlIG1fb3BhcXVlUm9vdCBmaWVsZCB3
aWxsIGJlIHJlZmVyZW5jZSBpdHMgb3duCisgICAgICAgICAgIG9wYXF1ZSByb290cyBzdG9yYWdl
LgorCisgICAgICAgICAgIFRoaXMgaW1wbGVtZW50YXRpb24gb2YgYWRkT3BhcXVlUm9vdCgpIGlz
IHBlcmYgbmV1dHJhbCBmb3IgU2xvdFZpc2l0b3IgYmVjYXVzZQorICAgICAgICAgICB3aGVyZSBp
dCB3b3VsZCBwcmV2aW91c2x5IGludm9rZSBtX2hlYXAubV9vcGFxdWVSb290cy5hZGQoKSwgaXQg
d2lsbCBub3cKKyAgICAgICAgICAgaW52b2tlIG1fb3BhcXVlUm9vdC5hZGQoKSBpbnN0ZWFkIHdo
ZXJlIG1fb3BhcXVlUm9vdCBwb2ludHMgdG8gbV9oZWFwLm1fb3BhcXVlUm9vdHMuCisKKyAgICAg
ICAgICAgRGl0dG8gZm9yIEFic3RyYWN0U2xvdFZpc2l0b3I6OmNvbnRhaW5zT3BhcXVlUm9vdCgp
LgorCisgICAgICAgIDYuIFdoZW4gcmVpZnlpbmcgYSB0ZW1wbGF0aXplZCB2aXNpdCBtZXRob2Qs
IHdlIGRvIGl0IGluIDIgd2F5czoKKworICAgICAgICAgICBhLiBJbXBsZW1lbnQgdGhlIHRlbXBs
YXRlIG1ldGhvZCBhcyBhbiBBTFdBWVNfSU5MSU5FIEltcGwgbWV0aG9kLCBhbmQgaGF2ZQorICAg
ICAgICAgICAgICAyIHZpc2l0IG1ldGhvZHMgKHRha2luZyBhIFNsb3RWaXNpdG9yIGFuZCBhbiBB
YnN0cmFjdFNsb3RWaXNpdG9yIHJlc3BlY3RpdmVseSkKKyAgICAgICAgICAgICAgaW5saW5lIHRo
ZSBJbXBsIG1ldGhvZC4gIEZvciBleGFtcGxlLCBzZWUgSlNPYmplY3Q6OnZpc2l0Q2hpbGRyZW5J
bXBsKCkuCisKKyAgICAgICAgICAgYi4gSnVzdCB0ZW1wbGF0aXplIHRoZSB2aXNpdCBtZXRob2Qs
IGFuZCBleHBsaWNpdGx5IGluc3RhbnRpYXRlIGl0IHdpdGggYSBTbG90VmlzaXRvcgorICAgICAg
ICAgICAgICBhbmQgYW4gQWJzdHJhY3RTbG90VmlzaXRvci4gIEZvciBleGFtcGxlLCBzZWUgRGVz
aXJlZFRyYW5zaXRpb246OnZpc2l0Q2hpbGRyZW4oKS4KKworICAgICAgICAgICBUaGUgcmVhc29u
IHdlIG5lZWQgZm9ybSAoYSkgaXMgaWY6CisKKyAgICAgICAgICAgIGkuIHdlIG5lZWQgdG8gZXhw
b3J0IHRoZSB2aXNpdCBtZXRob2RzLgorICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHNlZSBK
U09iamVjdDp2aXNpdENoaWxkcmVuKCkuCisKKyAgICAgICAgICAgICAgIE5vdGU6IEEgQ2xhbmcg
ZW5naW5lZXIgdG9sZCBtZSB0aGF0ICJ0aGVyZeKAmXMgbm8gd2F5IHRvIGV4cG9ydCBhbiBleHBs
aWNpdAorICAgICAgICAgICAgICAgaW5zdGFudGlhdGlvbiB0aGF0IHdpbGwgbWFrZSBpdCBhIHN0
cm9uZyBzeW1ib2wuIiAgVGhpcyBpcyBiZWNhdXNlICJDKysgZG9lcyBub3QKKyAgICAgICAgICAg
ICAgIHByb3ZpZGUgYW55IHN0YW5kYXJkIHdheSB0byBndWFyYW50ZWUgdGhhdCBhbiBleHBsaWNp
dCBpbnN0YW50aWF0aW9uIGlzIHVuaXF1ZSwKKyAgICAgICAgICAgICAgIGFuZCBDbGFuZyBoYXNu
4oCZdCBhZGRlZCBhbnkgZXh0ZW5zaW9uIHRvIGRvIHNvLiIKKworICAgICAgICAgICBpaS4gdGhl
IHZpc2l0IG1ldGhvZCBpcyBhbiBvdmVycmlkZSBvZiBhIHZpcnR1YWwgbWV0aG9kLgorICAgICAg
ICAgICAgICAgRm9yIGV4YW1wbGUsIHNlZSBERkc6OlNjYW5uYWJsZTo6dmlzaXRDaGlsZHJlbigp
IGFuZCBERkc6OkdyYXBoOjp2aXNpdENoaWxkcmVuKCkuCisKKyAgICAgICAgICAgT3RoZXJ3aXNl
LCB3ZSdsbCBwcmVmZXIgZm9ybSAoYikgYXMgaXQgaXMgbmF0dXJhbCBDKysuCisKKyAgICAgICAg
Ny4gQmVjYXVzZSB0ZW1wbGF0aXppbmcgYWxsIHRoZSB2aXNpdCBtZXRob2RzIHJlcXVpcmVzIGEg
bG90IG9mIGJvaWxlciBwbGF0ZSBjb2RlLAorICAgICAgICAgICB3ZSBpbnRyb2R1Y2Ugc29tZSBt
YWNyb3MgaW4gU2xvdFZpc2l0b3JNYWNyb3MuaCB0byBtYWtlIHJlZHVjZSBzb21lIG9mIHRoZQor
ICAgICAgICAgICBib2lsZXIgcGxhdGUgYnVyZGVuLgorCisgICAgICAgICAgIFdlIGVzcGVjaWFs
bHkgdHJ5IHRvIGRvIHRoaXMgZm9yIG1ldGhvZHMgb2YgZm9ybSAoYSkgKHNlZSAoNikgYWJvdmUp
IHdoaWNoCisgICAgICAgICAgIHJlcXVpcmUgbW9yZSBib2lsZXIgcGxhdGUuCisKKyAgICAgICAg
OC4gVGhlIGRyaXZlciBvZiB0aGUgcmVhbCBHQyBpcyBNYXJraW5nQ29uc3RyYWludFNldDo6ZXhl
Y3V0ZUNvbnZlcmdlbmNlKCkgd2hpY2gKKyAgICAgICAgICAgcnVucyB3aXRoIHRoZSBNYXJraW5n
Q29uc3RyYWludFNvbHZlci4KKworICAgICAgICAgICBUaGUgZHJpdmVyIG9mIHRoZSB2ZXJpZmll
ciBHQyBpcyBIZWFwOjp2ZXJpZnlHQygpLCB3aGljaCBoYXMgYSBsb29wIHRvIGRyYWluCisgICAg
ICAgICAgIG1hcmtlZCBvYmplY3RzIGFuZCBleGVjdXRlIGNvbnRyYWludHMuCisKKyAgICAgICAg
OS4gVGhlIEdDIHZlcmlmaWVyIGlzIGJ1aWx0IGluIGJ5IGRlZmF1bHQgYnV0IGRpc2FibGVkLiAg
VGhlIHJlbGV2YW50IG9wdGlvbnMgYXJlOgorICAgICAgICAgICBKU0NfdmVyaWZ5R0MgYW5kIEpT
Q192ZXJib3NlVmVyaWZ5R0MuCisKKyAgICAgICAgICAgSlNDX3ZlcmlmeUdDIHdpbGwgZW5hYmxl
IHRoZSBHQyB2ZXJpZmllci4KKworICAgICAgICAgICBJZiBKU0NfdmVyaWZ5R0MgaXMgdHJ1ZSBh
bmQgdGhlIHZlcmlmaWVyIGZpbmRzIGEgY2VsbCB0aGF0IGlzCisgICAgICAgICAgIGVycm9uZW91
c2x5IG5vdCBtYXJrZWQgYnkgdGhlIHJlYWwgR0MsIGl0IHdpbGwgZHVtcCBhbiBlcnJvciBtZXNz
YWdlIGFuZCB0aGVuCisgICAgICAgICAgIGNyYXNoIHdpdGggYSBSRUxFQVNFX0FTU0VSVC4KKwor
ICAgICAgICAgICBKU0NfdmVyYm9zZVZlcmlmeUdDIHdpbGwgZW5hYmxlIHRoZSBHQyB2ZXJpZmll
ciBhbG9uZyB3aXRoIHNvbWUgbW9yZSBoZWF2eQorICAgICAgICAgICB3ZWlnaHQgcmVjb3JkIGtl
ZXBpbmcgKGkuZS4gdHJhY2tpbmcgdGhlIHBhcmVudCAvIG93bmVyIGNlbGwgdGhhdCBtYXJrZWQg
YQorICAgICAgICAgICBjZWxsLCBhbmQgY2FwdHVyaW5nIHRoZSBjYWxsIHN0YWNrIHRoZSBtYXJr
ZWQgY2VsbCBpcyBhcHBlbmRlZCB0byB0aGUgbWFyaworICAgICAgICAgICBzdGFjaykuCisKKyAg
ICAgICAgICAgSWYgSlNDX3ZlcmJvc2VWZXJpZnlHQyBpcyB0cnVlIGFuZCB0aGUgdmVyaWZpZXIg
ZmluZHMgYSBjZWxsIHRoYXQgaXMKKyAgICAgICAgICAgZXJyb25lb3VzbHkgbm90IG1hcmtlZCBi
eSB0aGUgcmVhbCBHQywgaXQgd2lsbCBkdW1wIHRoZSBwYXJlbnQgY2VsbCBhbmQKKyAgICAgICAg
ICAgY2FwdHVyZWQgc3RhY2sgYWxvbmcgd2l0aCBhbiBlcnJvciBtZXNzYWdlIGJlZm9yZSBjcmFz
aGluZy4gIFRoaXMgZXh0cmEKKyAgICAgICAgICAgaW5mb3JtYXRpb24gcHJvdmlkZXMgdGhlIHN0
YXJ0aW5nIHBvaW50IGZvciBkZWJ1Z2dpbmcgR0MgYnVncyBmb3VuZCBieSB0aGUKKyAgICAgICAg
ICAgdmVyaWZpZXIuCisKKyAgICAgICAgICAgRW5hYmxpbmcgSlNDX3ZlcmJvc2VWZXJpZnlHQyB3
aWxsIGF1dG9tYXRpY2FsbHkgZW5hYmxlIEpTQ192ZXJpZnlHQy4KKworICAgICAgICAxMC4gTm9u
LWRldGVybWluaXNtIGluIHRoZSByZWFsIEdDLgorCisgICAgICAgICAgIFRoZSBHQyB2ZXJpZmll
cidzIGFsZ29yaXRobSByZWxpZXMgb24gdGhlIHJlYWwgR0MgYmVpbmcgZGV0ZXJtaW5pc3RpYy4g
IEhvd2V2ZXIsCisgICAgICAgICAgIHRoZXJlIGFyZSBhIGZldyBwbGFjZXMgd2hlcmUgdGhpcyBp
cyBub3QgdHJ1ZToKKworICAgICAgICAgICBhLiBNYXJraW5nIGNvbnNlcnZhdGl2ZSByb290cyBv
biB0aGUgbXV0YXRvciBzdGFja3MuCisKKyAgICAgICAgICAgICAgQnkgdGhlIHRpbWUgdGhlIHZl
cmlmaWVyIEdDIHJ1bnMgKGluIHRoZSBHQyBFbmQgcGhhc2UpLCB0aGUgbXV0YXRvciBzdGFja3MK
KyAgICAgICAgICAgICAgd2lsbCBsb29rIGNvbXBsZXRlbHkgZGlmZmVyZW50IHRoYW4gd2hhdCB0
aGUgcmVhbCBHQyBzYXcuICBUbyB3b3JrIGFyb3VuZAorICAgICAgICAgICAgICB0aGlzLCBpZiB0
aGUgdmVyaWZpZXIgaXMgZW5hYmxlZCwgdGhlbiBldmVyeSBjb25zZXJ2YXRpdmUgcm9vdCBjYXB0
dXJlZCBieQorICAgICAgICAgICAgICB0aGUgcmVhbCBHQyB3aWxsIGFsc28gYmUgYWRkZWQgdG8g
dGhlIHZlcmlmaWVyJ3MgbWFyayBzdGFjay4KKworICAgICAgICAgICAgICBEdXJpbmcgdGhlIHZl
cmlmeUdDIGluIHRoZSBFbmQgcGhhc2UsIHRoZSBjb25zZXJ2YXRpdmUgcm9vdCBzY2FucyB3aWxs
IGJlCisgICAgICAgICAgICAgIHRyZWF0ZWQgYXMgbm8tb3BzLgorCisgICAgICAgICAgIGIuIENv
ZGVCbG9jazo6c2hvdWxkSmV0dGlzb25EdWVUb09sZEFnZSgpIG1heSByZXR1cm4gYSBkaWZmZXJl
bnQgdmFsdWUuCisKKyAgICAgICAgICAgICAgVGhpcyBpcyBwb3NzaWJsZSBiZWNhdXNlIHRoZSBj
b2RlQmxvY2sgbWF5IGJlIGluIG1pZCBjb21waWxhdGlvbiB3aGlsZSB0aGUKKyAgICAgICAgICAg
ICAgcmVhbCBHQyBpcyBpbiBwcm9ncmVzcy4KKworICAgICAgICAgICAgICBDb2RlQmxvY2s6OnNo
b3VsZFZpc2l0U3Ryb25nbHkoKSBjYWxscyBzaG91bGRKZXR0aXNvbkR1ZVRvT2xkQWdlKCksIGFu
ZCBtYXkKKyAgICAgICAgICAgICAgc2VlIGFuIG9sZCBMTEludCBjb2RlQmxvY2sgd2hvc2UgdGlt
ZVRvTGl2ZSBoYXMgZXhwaXJlZC4gIEFzIGEgcmVzdWx0LAorICAgICAgICAgICAgICBzaG91bGRK
ZXR0aXNvbkR1ZVRvT2xkQWdlKCkgcmV0dXJucyB0cnVlIGFuZCBzaG91bGRWaXNpdFN0cm9uZ2x5
KCkgd2lsbAorICAgICAgICAgICAgICByZXR1cm4gZmFsc2UgZm9yIHRoZSByZWFsIEdDLCBsZWFk
aW5nIHRvIGl0IG5vdCBtYXJraW5nIHRoZSBjb2RlQmxvY2suCisKKyAgICAgICAgICAgICAgSG93
ZXZlciwgYmVmb3JlIHRoZSB2ZXJpZmllciBHQyBnZXRzIHRvIHJ1biwgYmFzZWxpbmUgY29tcGls
YXRpb24gb24gdGhlCisgICAgICAgICAgICAgIGNvZGVCbG9jayBtYXkgZmluaXNoLiAgQXMgYSBi
YXNlbGluZSBjb2RlQmxvY2sgbm93LCBpdCBnZXRzIGEgbG9uZ2VyIHRpbWUKKyAgICAgICAgICAg
ICAgdG8gbGl2ZS4KKworICAgICAgICAgICAgICBBcyBhIHJlc3VsdCwgd2hlbiB0aGUgdmVyaWZp
ZXIgR0MgcnVucywgc2hvdWxkSmV0dGlzb25EdWVUb09sZEFnZSgpIHdpbGwKKyAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlLCBhbmQgc2hvdWxkVmlzaXRTdHJvbmdseSgpIGluIHR1cm4gcmV0dXJu
cyB0cnVlLiAgVGhpcyByZXN1bHRzCisgICAgICAgICAgICAgIGluIHRoZSB2ZXJpZmllciBHQyBt
YXJraW5nIHRoZSBjb2RlQmxvY2sgKGFuZCBpdHMgY2hpbGRyZW4pIHdoZW4gdGhlIHJlYWwKKyAg
ICAgICAgICAgICAgR0MgZGlkIG5vdCwgd2hpY2ggbGVhZHMgdG8gYSBmYWxzZSBlcnJvci4gIFRo
aXMgaXMgbm90IGEgcmVhbCBlcnJvciBiZWNhdXNlCisgICAgICAgICAgICAgIGlmIHRoZSByZWFs
IEdDIGRpZCBub3QgbWFyayB0aGUgY29kZSBibG9jaywgaXQgd2lsbCBzaW1wbHkgZ2V0IGpldHRp
c29uZWQsCisgICAgICAgICAgICAgIGFuZCBjYW4gYmUgcmVpbnN0YW50aWF0ZWQgd2hlbiBuZWVk
ZWQgbGF0ZXIuICBUaGVyZSdzIG5vIEdDIGJ1ZyBoZXJlLgorICAgICAgICAgICAgICBIb3dldmVy
LCB3ZSBkbyBuZWVkIHRvIHdvcmsgYXJvdW5kIHRoaXMgdG8gcHJldmVudCB0aGUgZmFsc2UgZXJy
b3IgZm9yIHRoZQorICAgICAgICAgICAgICBHQyB2ZXJpZmllci4KKworICAgICAgICAgICAgICBU
aGUgd29yayBhcm91bmQgaXMgdG8gaW50cm9kdWNlIGEgQ29kZUJsb2NrOjptX3Zpc2l0Q2hpbGRy
ZW5Ta2lwcGVkRHVlVG9PbGRBZ2UKKyAgICAgICAgICAgICAgZmxhZyB0aGF0IHJlY29yZHMgd2hh
dCB0aGUgcmVhbCBHQyBkZWNpZGVkIGluIHNob3VsZEpldHRpc29uRHVlVG9PbGRBZ2UoKS4KKyAg
ICAgICAgICAgICAgVGhpcyBhbGxvd3MgdGhlIHZlcmlmaWVyIEdDIHRvIHJlcGxheSB0aGUgc2Ft
ZSBkZWNpc2lvbiBhbmQgZ2V0IGEgY29uc2lzdGVudAorICAgICAgICAgICAgICByZXN1bHQuCisK
KyAgICAgICAgICAgYy4gQ29kZUJsb2NrOjpwcm9wYWdhdGVUcmFuc2l0aW9ucygpIHdpbGwgb25s
eSBkbyBhIGJlc3QgZWZmb3J0IGF0IHZpc2l0aW5nCisgICAgICAgICAgICAgIGNlbGxzIGluIElD
cywgZXRjLiAgSWYgYSBjZWxsIGlzIG5vdCBhbHJlYWR5IHN0cm9uZ2x5IG1hcmtlZCBieSB0aGUg
dGltZQorICAgICAgICAgICAgICBDb2RlQmxvY2s6OnByb3BhZ2F0ZVRyYW5zaXRpb25zKCkgY2hl
Y2tzIGl0LCBwcm9wYWdhdGVUcmFuc2l0aW9ucygpIHdpbGwKKyAgICAgICAgICAgICAgbm90IG1h
cmsgb3RoZXIgY2VsbHMgdGhhdCBhcmUgcmVhY2hhYmxlIGZyb20gaXQuCisKKyAgICAgICAgICAg
ICAgU2luY2UgdGhlIHJlYWwgR0MgZG9lcyBtYXJraW5nIG9uIGNvbmN1cnJlbnQgdGhyZWFkcywg
bWFya2luZyBvcmRlciBpcyBub3QKKyAgICAgICAgICAgICAgZGV0ZXJtaW5pc3RpYy4gIENvZGVC
bG9jazo6cHJvcGFnYXRlVHJhbnNpdGlvbnMoKSBtYXkgb3IgbWF5IG5vdCBzZWUgYSBjZWxsCisg
ICAgICAgICAgICAgIGFzIGFscmVhZHkgbWFya2VkIGJ5IHRoZSB0aW1lIGl0IHJ1bnMuCisKKyAg
ICAgICAgICAgICAgVGhlIHZlcmlmaWVyIEdDIG1heSBtYXJrIHNvbWUgb2YgdGhlc2UgY2VsbHMg
aW4gYSBkaWZmZXJlbnQgb3JkZXIgdGhhbiB0aGUKKyAgICAgICAgICAgICAgcmVhbCBHQy4gIEFz
IGEgcmVzdWx0LCBpbiB0aGUgdmVyaWZpZXIgR0MsIENvZGVCbG9jazo6cHJvcGFnYXRlVHJhbnNp
dGlvbnMoKQorICAgICAgICAgICAgICBtYXkgc2VlIGEgY2VsbCBhcyBtYXJrZWQgKGFuZCB0aGVy
ZWZvcmUsIHZpc2l0IGl0cyBjaGlsZHJlbikgd2hlbiBpdCBkaWQKKyAgICAgICAgICAgICAgbm90
IGZvciB0aGUgcmVhbCBHQy4KKworICAgICAgICAgICAgICBUbyB3b3JrIGFyb3VuZCB0aGlzLCB3
ZSBjdXJyZW50bHkgYWRkIGEgU3VwcHJlc3NHQ1ZlcmlmaWVyU2NvcGUgdG8KKyAgICAgICAgICAg
ICAgQ29kZUJsb2NrOjpwcm9wYWdhdGVUcmFuc2l0aW9ucygpIHRvIHBlc3NpbWl6ZSB0aGUgdmVy
aWZpZXIsIGFuZCBhc3N1bWUgdGhhdAorICAgICAgICAgICAgICBwcm9wYWdhdGVUcmFuc2l0aW9u
cygpIHdpbGwgbWFyayBub3RoaW5nLgorCisgICAgICAgICAgICAgIFN1cHByZXNzR0NWZXJpZmll
clNjb3BlIGlzIGEgYmx1bnQgaGFtbWVyIHRoYXQgc3RvcHMgdGhlIHZlcmlmaWVyIEdDIGZyb20K
KyAgICAgICAgICAgICAgYW5hbHl6aW5nIGFsbCBjZWxscyBwb3RlbnRpYWxseSByZWFjaGFibGUg
dmlhIENvZGVCbG9jazo6cHJvcGFnYXRlVHJhbnNpdGlvbnMoKS4KKyAgICAgICAgICAgICAgSW4g
dGhlIGZ1dHVyZSwgaXQgbWF5IGJlIHBvc3NpYmxlIHRvIHJlZmluZSB0aGlzIGFuZCB0cmFjayB3
aGljaCBjZWxscyB3ZXJlCisgICAgICAgICAgICAgIGFjdHVhbGx5IHNraXBwZWQgb3ZlciAobGlr
ZSB3ZSBkaWQgZm9yIHNob3VsZEpldHRpc29uRHVlVG9PbGRBZ2UoKSkuCisgICAgICAgICAgICAg
IEhvd2V2ZXIsIHRoaXMgZGVjaXNpb24gdHJhY2tpbmcgbmVlZHMgdG8gYmUgZG9uZSBpbiB0aGUg
cmVhbCBHQywgYW5kIGNhbiBiZQorICAgICAgICAgICAgICB2ZXJ5IGV4cGVuc2l2ZSBpbiB0ZXJt
cyBvZiBwZXJmb3JtYW5jZS4gIFRoZSBzaG91bGRKZXR0aXNvbkR1ZVRvT2xkQWdlKCkKKyAgICAg
ICAgICAgICAgY2FzZSBpcyByYXJlLCBhbmQgYXMgc3VjaCBsZW5kcyBpdHNlbGYgdG8gdGhpcyBt
b3JlIGZpbmUgZ3JhaW4gdHJhY2tpbmcKKyAgICAgICAgICAgICAgd2l0aG91dCBodXJ0aW5nIHBl
cmZvcm1hbmNlLiAgVGhlIGRlY2lzaW9ucyBtYWRlIGluIENvZGVCbG9jazo6cHJvcGFnYXRlVHJh
bnNpdGlvbnMoKQorICAgICAgICAgICAgICBhcmUgbm90IGFzIHJhcmUsIGFuZCBoZW5jZSwgaXQg
d291bGQgaHVydCBwZXJmb3JtYW5jZSBpZiB3ZSBkaWQgZmluZSBncmFpbgorICAgICAgICAgICAg
ICBkZWNpc2lvbiB0cmFja2luZyB0aGVyZSAoYXQgbGVhc3Qgb3Igbm93KS4KKworICAgICAgICAx
MS4gTWFya2luZyBpbiB0aGUgdmVyaWZpZXIgR0MuCisKKyAgICAgICAgICAgIFRoZSByZWFsIEdD
IHRyYWNrcyBjZWxsIG1hcmtzIHVzaW5nIGEgQml0bWFwIGluIHRoZSBNYXJrZWRCbG9ja3MuICBU
aGUgdmVyaWZpZXIKKyAgICAgICAgICAgIEdDIGtlZXBzIHRyYWNrcyBvZiBNYXJrZWRCbG9jayBj
ZWxsIG1hcmtzIHVzaW5nIGEgQml0bWFwIG9uIHRoZSBzaWRlLCBzdGFzaGVkCisgICAgICAgICAg
ICBhd2F5IGluIGEgSGFzaE1hcC4KKworICAgICAgICAgICAgVG8gaW1wcm92ZSB0aGUgdmVyaWZp
ZXIgbWFraW5nIHBlcmZvcm1hbmNlLCB3ZSByZXNlcnZlIGEgdm9pZCogbV92ZXJpZmllck1lbW8K
KyAgICAgICAgICAgIHBvaW50ZXIgaW4gdGhlIE1hcmtlZEJsb2NrLCB3aGljaCB0aGUgdmVyaWZp
ZXIgd2lsbCBlbXBsb3kgdG8gY2FjaGUgaXRzCisgICAgICAgICAgICBNYXJrZWRCbG9ja0RhdGEg
Zm9yIHRoYXQgTWFya2VkQmxvY2suICBUaGlzIGFsbG93cyB0aGUgdmVyaWZpZXIgdG8gZ2V0IHRv
IGl0cworICAgICAgICAgICAgc2lkZSBCaXRtYXAgd2l0aG91dCBoYXZpbmcgdG8gZG8gYSBIYXNo
TWFwIGxvb2sgdXAgZm9yIGV2ZXJ5IGNlbGwuCisKKyAgICAgICAgICAgIFNpemUtd2lzZSwgaW4g
dGhlIGN1cnJlbnQgMTZLIE1hcmtCbG9ja3MsIHRoZXJlIGlzIHByZXZpb3VzbHkgcm9vbSBmb3Ig
MTAwNS41CisgICAgICAgICAgICBhdG9tcyBhZnRlciByZXNlcnZpbmcgc3BhY2UgZm9yIHRoZSBN
YXJrZWRCbG9jazo6Rm9vdGVyLiAgU2luY2Ugd2UgY2FuIG5ldmVyCisgICAgICAgICAgICBhbGxv
Y2F0ZSBoYWxmIGFuIGF0b20gYW55d2F5LCB0aGF0IC41IGF0b20gZ2l2ZXMgdXMgdGhlIDggYnl0
ZXMgd2UgbmVlZCBmb3IKKyAgICAgICAgICAgIHRoZSBtX3ZlcmlmaWVyTWVtbyBwb2ludGVyLCB3
aGljaCB3ZSdsbCBwdXQgaW4gdGhlIE1hcmtlZEJsb2NrOjpGb290ZXIuICBXaXRoCisgICAgICAg
ICAgICB0aGlzIHBhdGNoLCBlYWNoIE1hcmtlZEJsb2NrIHdpbGwgbm93IGhhdmUgZXhhY3RseSAx
MDA1IGF0b21zIGF2YWlsYWJsZSBmb3IKKyAgICAgICAgICAgIGFsbG9jYXRpb24uCisKKyAgICAg
ICAgSSByYW4gSmV0U3RyZWFtMiBhbmQgU3BlZWRvbWV0ZXIyIGxvY2FsbHkgb24gYSBNYWNCb29r
QWlyMTAsMSwgTWFjQm9va1BybzE2LDEsCisgICAgICAgIGFuZCBhIDEyLjnigJ0gNHRoIEdlbiBp
UGFkIFByby4gIFRoZSBiZW5jaG1hcmsgcmVzdWx0cyBmb3IgdGhlc2Ugd2VyZSBhbGwgbmV1dHJh
bC4KKworICAgICAgICBUaGUgZGVzaWduIG9mIHRoZSBHQyB2ZXJpZmllciBpcyBzdWNoIHRoYXQg
aXQgaW5jdXJzIGFsbW9zdCBubyBhZGRpdGlvbmFsIHJ1bnRpbWUKKyAgICAgICAgbWVtb3J5IG92
ZXJoZWFkIGlmIG5vdCBpbiB1c2UuICBDb2RlIHNpemUgZG9lcyBpbmNyZWFzZSBzaWduaWZpY2Fu
dGx5IGJlY2F1c2UKKyAgICAgICAgdGhlcmUgYXJlIG5vdyAyIHZhcmlhbnRzIG9mIG1vc3Qgb2Yg
dGhlIG1ldGhvZHMgdGhhdCB0YWtlIGEgU2xvdFZpc2l0b3IuCisKKyAgICAgICAgV2hlbiBpbiB1
c2UsIHRoZSBhZGRpdGlvbmFsIHJ1bnRpbWUgbWVtb3J5IGlzIGVuY2Fwc3VsYXRlZCBpbiB0aGUK
KyAgICAgICAgVmVyaWZpZXJTbG90VmlzaXRvciwgd2hpY2ggaXMgaW5zdGFudGlhdGVkIGFuZCBk
ZXN0cnVjdGVkIGV2ZXJ5IEdDIGN5Y2xlLiAgSGVuY2UsCisgICAgICAgIGl0IGNhbiBhZmZlY3Qg
cGVhayBtZW1vcnkgdXNhZ2UgZHVyaW5nIEdDcywgYnV0IHRoZSBjb3N0IGlzIHRyYW5zaWVudC4g
IEl0IGRvZXMKKyAgICAgICAgbm90IHBlcnNpc3QgcGFzdCB0aGUgR0MgRW5kIHBoYXNlLgorCisg
ICAgICAgICogQVBJL0pTQVBJV3JhcHBlck9iamVjdC5oOgorICAgICAgICAqIEFQSS9KU0FQSVdy
YXBwZXJPYmplY3QubW06CisgICAgICAgIChKU0FQSVdyYXBwZXJPYmplY3RIYW5kbGVPd25lcjo6
aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMpOgorICAgICAgICAoSlNDOjpKU0FQSVdyYXBwZXJP
YmplY3Q6OnZpc2l0Q2hpbGRyZW5JbXBsKToKKyAgICAgICAgKEpTQzo6SlNBUElXcmFwcGVyT2Jq
ZWN0Ojp2aXNpdENoaWxkcmVuKTogRGVsZXRlZC4KKyAgICAgICAgKiBBUEkvSlNDYWxsYmFja09i
amVjdC5jcHA6CisgICAgICAgICogQVBJL0pTQ2FsbGJhY2tPYmplY3QuaDoKKyAgICAgICAgKEpT
Qzo6SlNDYWxsYmFja09iamVjdERhdGE6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAoSlNDOjpK
U0NhbGxiYWNrT2JqZWN0RGF0YTo6SlNQcml2YXRlUHJvcGVydHlNYXA6OnZpc2l0Q2hpbGRyZW4p
OgorICAgICAgICAoSlNDOjpKU0NhbGxiYWNrT2JqZWN0PFBhcmVudD46OnZpc2l0Q2hpbGRyZW5J
bXBsKToKKyAgICAgICAgKiBBUEkvSlNNYW5hZ2VkVmFsdWUubW06CisgICAgICAgIChKU01hbmFn
ZWRWYWx1ZUhhbmRsZU93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyk6CisgICAgICAg
ICogQVBJL0pTTWFya2luZ0NvbnN0cmFpbnRQcml2YXRlLmNwcDoKKyAgICAgICAgKEpTQzo6aXNN
YXJrZWQpOgorICAgICAgICAoSlNDb250ZXh0R3JvdXBBZGRNYXJraW5nQ29uc3RyYWludCk6Cisg
ICAgICAgICogQVBJL0pTVmlydHVhbE1hY2hpbmUubW06CisgICAgICAgIChzY2FuRXh0ZXJuYWxP
YmplY3RHcmFwaCk6CisgICAgICAgIChzY2FuRXh0ZXJuYWxSZW1lbWJlcmVkU2V0KToKKyAgICAg
ICAgKiBBUEkvSlNWaXJ0dWFsTWFjaGluZUludGVybmFsLmg6CisgICAgICAgICogQVBJL01hcmtl
ZEpTVmFsdWVSZWZBcnJheS5jcHA6CisgICAgICAgIChKU0M6Ok1hcmtlZEpTVmFsdWVSZWZBcnJh
eTo6dmlzaXRBZ2dyZWdhdGUpOgorICAgICAgICAqIEFQSS9NYXJrZWRKU1ZhbHVlUmVmQXJyYXku
aDoKKyAgICAgICAgKiBBUEkvZ2xpYi9KU0FQSVdyYXBwZXJHbG9iYWxPYmplY3QuY3BwOgorICAg
ICAgICAoSlNDOjpKU0FQSVdyYXBwZXJHbG9iYWxPYmplY3Q6OnZpc2l0Q2hpbGRyZW4pOiBEZWxl
dGVkLgorICAgICAgICAqIEFQSS9nbGliL0pTQVBJV3JhcHBlckdsb2JhbE9iamVjdC5oOgorICAg
ICAgICAqIEFQSS9nbGliL0pTQVBJV3JhcHBlck9iamVjdEdMaWIuY3BwOgorICAgICAgICAoSlNB
UElXcmFwcGVyT2JqZWN0SGFuZGxlT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKToK
KyAgICAgICAgKEpTQzo6SlNBUElXcmFwcGVyT2JqZWN0Ojp2aXNpdENoaWxkcmVuSW1wbCk6Cisg
ICAgICAgIChKU0M6OkpTQVBJV3JhcHBlck9iamVjdDo6dmlzaXRDaGlsZHJlbik6IERlbGV0ZWQu
CisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBTY3JpcHRzL3drYnVpbHRpbnMvYnVp
bHRpbnNfZ2VuZXJhdGVfaW50ZXJuYWxzX3dyYXBwZXJfaGVhZGVyLnB5OgorICAgICAgICAoQnVp
bHRpbnNJbnRlcm5hbHNXcmFwcGVySGVhZGVyR2VuZXJhdG9yKToKKyAgICAgICAgKiBTY3JpcHRz
L3drYnVpbHRpbnMvYnVpbHRpbnNfZ2VuZXJhdGVfaW50ZXJuYWxzX3dyYXBwZXJfaW1wbGVtZW50
YXRpb24ucHk6CisgICAgICAgIChCdWlsdGluc0ludGVybmFsc1dyYXBwZXJJbXBsZW1lbnRhdGlv
bkdlbmVyYXRvci5nZW5lcmF0ZV92aXNpdF9tZXRob2QpOgorICAgICAgICAqIFNjcmlwdHMvd2ti
dWlsdGlucy9idWlsdGluc190ZW1wbGF0ZXMucHk6CisgICAgICAgICogU291cmNlcy50eHQ6Cisg
ICAgICAgICogYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHA6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nh
c2U6OnByb3BhZ2F0ZVRyYW5zaXRpb25zIGNvbnN0KToKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2Fz
ZTo6dmlzaXRBZ2dyZWdhdGVJbXBsIGNvbnN0KToKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6
dmlzaXRBZ2dyZWdhdGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIGJ5dGVjb2RlL0FjY2Vz
c0Nhc2UuaDoKKyAgICAgICAgKiBieXRlY29kZS9CeVZhbEluZm8uY3BwOgorICAgICAgICAoSlND
OjpCeVZhbEluZm86OnZpc2l0QWdncmVnYXRlSW1wbCk6CisgICAgICAgIChKU0M6OkJ5VmFsSW5m
bzo6dmlzaXRBZ2dyZWdhdGUpOiBEZWxldGVkLgorICAgICAgICAqIGJ5dGVjb2RlL0J5VmFsSW5m
by5oOgorICAgICAgICAqIGJ5dGVjb2RlL0NoZWNrUHJpdmF0ZUJyYW5kU3RhdHVzLmNwcDoKKyAg
ICAgICAgKEpTQzo6Q2hlY2tQcml2YXRlQnJhbmRTdGF0dXM6OnZpc2l0QWdncmVnYXRlSW1wbCk6
CisgICAgICAgIChKU0M6OkNoZWNrUHJpdmF0ZUJyYW5kU3RhdHVzOjptYXJrSWZDaGVhcCk6Cisg
ICAgICAgIChKU0M6OkNoZWNrUHJpdmF0ZUJyYW5kU3RhdHVzOjp2aXNpdEFnZ3JlZ2F0ZSk6IERl
bGV0ZWQuCisgICAgICAgICogYnl0ZWNvZGUvQ2hlY2tQcml2YXRlQnJhbmRTdGF0dXMuaDoKKyAg
ICAgICAgKiBieXRlY29kZS9DaGVja1ByaXZhdGVCcmFuZFZhcmlhbnQuY3BwOgorICAgICAgICAo
SlNDOjpDaGVja1ByaXZhdGVCcmFuZFZhcmlhbnQ6Om1hcmtJZkNoZWFwKToKKyAgICAgICAgKEpT
Qzo6Q2hlY2tQcml2YXRlQnJhbmRWYXJpYW50Ojp2aXNpdEFnZ3JlZ2F0ZUltcGwpOgorICAgICAg
ICAoSlNDOjpDaGVja1ByaXZhdGVCcmFuZFZhcmlhbnQ6OnZpc2l0QWdncmVnYXRlKTogRGVsZXRl
ZC4KKyAgICAgICAgKiBieXRlY29kZS9DaGVja1ByaXZhdGVCcmFuZFZhcmlhbnQuaDoKKyAgICAg
ICAgKiBieXRlY29kZS9Db2RlQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OkNv
ZGVCbG9jayk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6dmlzaXRDaGlsZHJlbkltcGwpOgor
ICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAoSlNDOjpD
b2RlQmxvY2s6OnNob3VsZFZpc2l0U3Ryb25nbHkpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6
OnNob3VsZEpldHRpc29uRHVlVG9PbGRBZ2UpOgorICAgICAgICAoSlNDOjpzaG91bGRNYXJrVHJh
bnNpdGlvbik6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6cHJvcGFnYXRlVHJhbnNpdGlvbnMp
OgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmRldGVybWluZUxpdmVuZXNzKToKKyAgICAgICAg
KEpTQzo6Q29kZUJsb2NrOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSk6CisgICAgICAgIChKU0M6
OkNvZGVCbG9jazo6dmlzaXRPU1JFeGl0VGFyZ2V0cyk6CisgICAgICAgIChKU0M6OkNvZGVCbG9j
azo6c3Ryb25nbHlWaXNpdFN0cm9uZ1JlZmVyZW5jZXMpOgorICAgICAgICAoSlNDOjpDb2RlQmxv
Y2s6OnN0cm9uZ2x5VmlzaXRXZWFrUmVmZXJlbmNlcyk6CisgICAgICAgICogYnl0ZWNvZGUvQ29k
ZUJsb2NrLmg6CisgICAgICAgICogYnl0ZWNvZGUvRGVsZXRlQnlJZFZhcmlhbnQuY3BwOgorICAg
ICAgICAoSlNDOjpEZWxldGVCeUlkVmFyaWFudDo6dmlzaXRBZ2dyZWdhdGVJbXBsKToKKyAgICAg
ICAgKEpTQzo6RGVsZXRlQnlJZFZhcmlhbnQ6Om1hcmtJZkNoZWFwKToKKyAgICAgICAgKEpTQzo6
RGVsZXRlQnlJZFZhcmlhbnQ6OnZpc2l0QWdncmVnYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKiBi
eXRlY29kZS9EZWxldGVCeUlkVmFyaWFudC5oOgorICAgICAgICAqIGJ5dGVjb2RlL0RlbGV0ZUJ5
U3RhdHVzLmNwcDoKKyAgICAgICAgKEpTQzo6RGVsZXRlQnlTdGF0dXM6OnZpc2l0QWdncmVnYXRl
SW1wbCk6CisgICAgICAgIChKU0M6OkRlbGV0ZUJ5U3RhdHVzOjptYXJrSWZDaGVhcCk6CisgICAg
ICAgIChKU0M6OkRlbGV0ZUJ5U3RhdHVzOjp2aXNpdEFnZ3JlZ2F0ZSk6IERlbGV0ZWQuCisgICAg
ICAgICogYnl0ZWNvZGUvRGVsZXRlQnlTdGF0dXMuaDoKKyAgICAgICAgKiBieXRlY29kZS9EaXJl
Y3RFdmFsQ29kZUNhY2hlLmNwcDoKKyAgICAgICAgKEpTQzo6RGlyZWN0RXZhbENvZGVDYWNoZTo6
dmlzaXRBZ2dyZWdhdGVJbXBsKToKKyAgICAgICAgKEpTQzo6RGlyZWN0RXZhbENvZGVDYWNoZTo6
dmlzaXRBZ2dyZWdhdGUpOiBEZWxldGVkLgorICAgICAgICAqIGJ5dGVjb2RlL0RpcmVjdEV2YWxD
b2RlQ2FjaGUuaDoKKyAgICAgICAgKiBieXRlY29kZS9FeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdl
LmNwcDoKKyAgICAgICAgKEpTQzo6RXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZTo6dmlzaXRDaGls
ZHJlbkltcGwpOgorICAgICAgICAoSlNDOjpFeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlOjp2aXNp
dE91dHB1dENvbnN0cmFpbnRzSW1wbCk6CisgICAgICAgIChKU0M6OkV4ZWN1dGFibGVUb0NvZGVC
bG9ja0VkZ2U6OnJ1bkNvbnN0cmFpbnQpOgorICAgICAgICAoSlNDOjpFeGVjdXRhYmxlVG9Db2Rl
QmxvY2tFZGdlOjp2aXNpdENoaWxkcmVuKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6RXhlY3V0
YWJsZVRvQ29kZUJsb2NrRWRnZTo6dmlzaXRPdXRwdXRDb25zdHJhaW50cyk6IERlbGV0ZWQuCisg
ICAgICAgICogYnl0ZWNvZGUvRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZS5oOgorICAgICAgICAq
IGJ5dGVjb2RlL0dldEJ5SWRWYXJpYW50LmNwcDoKKyAgICAgICAgKEpTQzo6R2V0QnlJZFZhcmlh
bnQ6OnZpc2l0QWdncmVnYXRlSW1wbCk6CisgICAgICAgIChKU0M6OkdldEJ5SWRWYXJpYW50Ojpt
YXJrSWZDaGVhcCk6CisgICAgICAgIChKU0M6OkdldEJ5SWRWYXJpYW50Ojp2aXNpdEFnZ3JlZ2F0
ZSk6IERlbGV0ZWQuCisgICAgICAgICogYnl0ZWNvZGUvR2V0QnlJZFZhcmlhbnQuaDoKKyAgICAg
ICAgKiBieXRlY29kZS9HZXRCeVN0YXR1cy5jcHA6CisgICAgICAgIChKU0M6OkdldEJ5U3RhdHVz
Ojp2aXNpdEFnZ3JlZ2F0ZUltcGwpOgorICAgICAgICAoSlNDOjpHZXRCeVN0YXR1czo6bWFya0lm
Q2hlYXApOgorICAgICAgICAoSlNDOjpHZXRCeVN0YXR1czo6dmlzaXRBZ2dyZWdhdGUpOiBEZWxl
dGVkLgorICAgICAgICAqIGJ5dGVjb2RlL0dldEJ5U3RhdHVzLmg6CisgICAgICAgICogYnl0ZWNv
ZGUvSW5CeUlkU3RhdHVzLmNwcDoKKyAgICAgICAgKEpTQzo6SW5CeUlkU3RhdHVzOjptYXJrSWZD
aGVhcCk6CisgICAgICAgICogYnl0ZWNvZGUvSW5CeUlkU3RhdHVzLmg6CisgICAgICAgICogYnl0
ZWNvZGUvSW5CeUlkVmFyaWFudC5jcHA6CisgICAgICAgIChKU0M6OkluQnlJZFZhcmlhbnQ6Om1h
cmtJZkNoZWFwKToKKyAgICAgICAgKiBieXRlY29kZS9JbkJ5SWRWYXJpYW50Lmg6CisgICAgICAg
ICogYnl0ZWNvZGUvSW50ZXJuYWxGdW5jdGlvbkFsbG9jYXRpb25Qcm9maWxlLmg6CisgICAgICAg
IChKU0M6OkludGVybmFsRnVuY3Rpb25BbGxvY2F0aW9uUHJvZmlsZTo6dmlzaXRBZ2dyZWdhdGUp
OgorICAgICAgICAqIGJ5dGVjb2RlL09iamVjdEFsbG9jYXRpb25Qcm9maWxlLmg6CisgICAgICAg
IChKU0M6Ok9iamVjdEFsbG9jYXRpb25Qcm9maWxlQmFzZTo6dmlzaXRBZ2dyZWdhdGUpOgorICAg
ICAgICAoSlNDOjpPYmplY3RBbGxvY2F0aW9uUHJvZmlsZVdpdGhQcm90b3R5cGU6OnZpc2l0QWdn
cmVnYXRlKToKKyAgICAgICAgKiBieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHA6CisgICAg
ICAgIChKU0M6OlBvbHltb3JwaGljQWNjZXNzOjpwcm9wYWdhdGVUcmFuc2l0aW9ucyBjb25zdCk6
CisgICAgICAgIChKU0M6OlBvbHltb3JwaGljQWNjZXNzOjp2aXNpdEFnZ3JlZ2F0ZUltcGwpOgor
ICAgICAgICAoSlNDOjpQb2x5bW9ycGhpY0FjY2Vzczo6dmlzaXRBZ2dyZWdhdGUpOiBEZWxldGVk
LgorICAgICAgICAqIGJ5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmg6CisgICAgICAgICogYnl0
ZWNvZGUvUHV0QnlJZFN0YXR1cy5jcHA6CisgICAgICAgIChKU0M6OlB1dEJ5SWRTdGF0dXM6Om1h
cmtJZkNoZWFwKToKKyAgICAgICAgKiBieXRlY29kZS9QdXRCeUlkU3RhdHVzLmg6CisgICAgICAg
ICogYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuY3BwOgorICAgICAgICAoSlNDOjpQdXRCeUlkVmFy
aWFudDo6bWFya0lmQ2hlYXApOgorICAgICAgICAqIGJ5dGVjb2RlL1B1dEJ5SWRWYXJpYW50Lmg6
CisgICAgICAgICogYnl0ZWNvZGUvUmVjb3JkZWRTdGF0dXNlcy5jcHA6CisgICAgICAgIChKU0M6
OlJlY29yZGVkU3RhdHVzZXM6OnZpc2l0QWdncmVnYXRlSW1wbCk6CisgICAgICAgIChKU0M6OlJl
Y29yZGVkU3RhdHVzZXM6Om1hcmtJZkNoZWFwKToKKyAgICAgICAgKEpTQzo6UmVjb3JkZWRTdGF0
dXNlczo6dmlzaXRBZ2dyZWdhdGUpOiBEZWxldGVkLgorICAgICAgICAqIGJ5dGVjb2RlL1JlY29y
ZGVkU3RhdHVzZXMuaDoKKyAgICAgICAgKiBieXRlY29kZS9TZXRQcml2YXRlQnJhbmRTdGF0dXMu
Y3BwOgorICAgICAgICAoSlNDOjpTZXRQcml2YXRlQnJhbmRTdGF0dXM6OnZpc2l0QWdncmVnYXRl
SW1wbCk6CisgICAgICAgIChKU0M6OlNldFByaXZhdGVCcmFuZFN0YXR1czo6bWFya0lmQ2hlYXAp
OgorICAgICAgICAoSlNDOjpTZXRQcml2YXRlQnJhbmRTdGF0dXM6OnZpc2l0QWdncmVnYXRlKTog
RGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29kZS9TZXRQcml2YXRlQnJhbmRTdGF0dXMuaDoKKyAg
ICAgICAgKiBieXRlY29kZS9TZXRQcml2YXRlQnJhbmRWYXJpYW50LmNwcDoKKyAgICAgICAgKEpT
Qzo6U2V0UHJpdmF0ZUJyYW5kVmFyaWFudDo6bWFya0lmQ2hlYXApOgorICAgICAgICAoSlNDOjpT
ZXRQcml2YXRlQnJhbmRWYXJpYW50Ojp2aXNpdEFnZ3JlZ2F0ZUltcGwpOgorICAgICAgICAoSlND
OjpTZXRQcml2YXRlQnJhbmRWYXJpYW50Ojp2aXNpdEFnZ3JlZ2F0ZSk6IERlbGV0ZWQuCisgICAg
ICAgICogYnl0ZWNvZGUvU2V0UHJpdmF0ZUJyYW5kVmFyaWFudC5oOgorICAgICAgICAqIGJ5dGVj
b2RlL1N0cnVjdHVyZVNldC5jcHA6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVNldDo6bWFya0lm
Q2hlYXAgY29uc3QpOgorICAgICAgICAqIGJ5dGVjb2RlL1N0cnVjdHVyZVNldC5oOgorICAgICAg
ICAqIGJ5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcDoKKyAgICAgICAgKEpTQzo6U3RydWN0
dXJlU3R1YkluZm86OnZpc2l0QWdncmVnYXRlSW1wbCk6CisgICAgICAgIChKU0M6OlN0cnVjdHVy
ZVN0dWJJbmZvOjpwcm9wYWdhdGVUcmFuc2l0aW9ucyk6CisgICAgICAgIChKU0M6OlN0cnVjdHVy
ZVN0dWJJbmZvOjp2aXNpdEFnZ3JlZ2F0ZSk6IERlbGV0ZWQuCisgICAgICAgICogYnl0ZWNvZGUv
U3RydWN0dXJlU3R1YkluZm8uaDoKKyAgICAgICAgKiBieXRlY29kZS9VbmxpbmtlZENvZGVCbG9j
ay5jcHA6CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjp2aXNpdENoaWxkcmVuSW1w
bCk6CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjp2aXNpdENoaWxkcmVuKTogRGVs
ZXRlZC4KKyAgICAgICAgKiBieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oOgorICAgICAgICAq
IGJ5dGVjb2RlL1VubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlLmNwcDoKKyAgICAgICAgKEpTQzo6
VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU6OnZpc2l0Q2hpbGRyZW5JbXBsKToKKyAgICAgICAg
KEpTQzo6VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU6OnZpc2l0Q2hpbGRyZW4pOiBEZWxldGVk
LgorICAgICAgICAqIGJ5dGVjb2RlL1VubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlLmg6CisgICAg
ICAgICogZGVidWdnZXIvRGVidWdnZXJTY29wZS5jcHA6CisgICAgICAgIChKU0M6OkRlYnVnZ2Vy
U2NvcGU6OnZpc2l0Q2hpbGRyZW5JbXBsKToKKyAgICAgICAgKEpTQzo6RGVidWdnZXJTY29wZTo6
dmlzaXRDaGlsZHJlbik6IERlbGV0ZWQuCisgICAgICAgICogZGVidWdnZXIvRGVidWdnZXJTY29w
ZS5oOgorICAgICAgICAqIGRmZy9ERkdEZXNpcmVkVHJhbnNpdGlvbnMuY3BwOgorICAgICAgICAo
SlNDOjpERkc6OkRlc2lyZWRUcmFuc2l0aW9uOjp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKEpT
Qzo6REZHOjpEZXNpcmVkVHJhbnNpdGlvbnM6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAqIGRm
Zy9ERkdEZXNpcmVkVHJhbnNpdGlvbnMuaDoKKyAgICAgICAgKiBkZmcvREZHRGVzaXJlZFdlYWtS
ZWZlcmVuY2VzLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpEZXNpcmVkV2Vha1JlZmVyZW5jZXM6
OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAqIGRmZy9ERkdEZXNpcmVkV2Vha1JlZmVyZW5jZXMu
aDoKKyAgICAgICAgKiBkZmcvREZHR3JhcGguY3BwOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBo
Ojp2aXNpdENoaWxkcmVuSW1wbCk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OnZpc2l0Q2hp
bGRyZW4pOgorICAgICAgICAqIGRmZy9ERkdHcmFwaC5oOgorICAgICAgICAqIGRmZy9ERkdQbGFu
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpQbGFuOjpjaGVja0xpdmVuZXNzQW5kVmlzaXRDaGls
ZHJlbik6CisgICAgICAgIChKU0M6OkRGRzo6UGxhbjo6aXNLbm93blRvQmVMaXZlRHVyaW5nR0Mp
OgorICAgICAgICAoSlNDOjpERkc6OlBsYW46OmlzS25vd25Ub0JlTGl2ZUFmdGVyR0MpOgorICAg
ICAgICAqIGRmZy9ERkdQbGFuLmg6CisgICAgICAgICogZGZnL0RGR1BsYW5JbmxpbmVzLmg6Cisg
ICAgICAgIChKU0M6OkRGRzo6UGxhbjo6aXRlcmF0ZUNvZGVCbG9ja3NGb3JHQyk6CisgICAgICAg
ICogZGZnL0RGR1NhZmVwb2ludC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U2FmZXBvaW50Ojpj
aGVja0xpdmVuZXNzQW5kVmlzaXRDaGlsZHJlbik6CisgICAgICAgIChKU0M6OkRGRzo6U2FmZXBv
aW50Ojppc0tub3duVG9CZUxpdmVEdXJpbmdHQyk6CisgICAgICAgIChKU0M6OkRGRzo6U2FmZXBv
aW50Ojppc0tub3duVG9CZUxpdmVBZnRlckdDKToKKyAgICAgICAgKiBkZmcvREZHU2FmZXBvaW50
Lmg6CisgICAgICAgICogZGZnL0RGR1NjYW5uYWJsZS5oOgorICAgICAgICAqIGRmZy9ERkdXb3Jr
bGlzdC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6V29ya2xpc3Q6OnZpc2l0V2Vha1JlZmVyZW5j
ZXMpOgorICAgICAgICAoSlNDOjpERkc6OldvcmtsaXN0OjpyZW1vdmVEZWFkUGxhbnMpOgorICAg
ICAgICAqIGRmZy9ERkdXb3JrbGlzdC5oOgorICAgICAgICAqIGRmZy9ERkdXb3JrbGlzdElubGlu
ZXMuaDoKKyAgICAgICAgKEpTQzo6REZHOjppdGVyYXRlQ29kZUJsb2Nrc0ZvckdDKToKKyAgICAg
ICAgKEpTQzo6REZHOjpXb3JrbGlzdDo6aXRlcmF0ZUNvZGVCbG9ja3NGb3JHQyk6CisgICAgICAg
ICogaGVhcC9BYnN0cmFjdFNsb3RWaXNpdG9yLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpBYnN0
cmFjdFNsb3RWaXNpdG9yOjpDb250ZXh0OjpjZWxsIGNvbnN0KToKKyAgICAgICAgKEpTQzo6QWJz
dHJhY3RTbG90VmlzaXRvcjo6U3VwcHJlc3NHQ1ZlcmlmaWVyU2NvcGU6OlN1cHByZXNzR0NWZXJp
ZmllclNjb3BlKToKKyAgICAgICAgKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvcjo6U3VwcHJlc3NH
Q1ZlcmlmaWVyU2NvcGU6On5TdXBwcmVzc0dDVmVyaWZpZXJTY29wZSk6CisgICAgICAgIChKU0M6
OkFic3RyYWN0U2xvdFZpc2l0b3I6OkRlZmF1bHRNYXJraW5nVmlvbGF0aW9uQXNzZXJ0aW9uU2Nv
cGU6OkRlZmF1bHRNYXJraW5nVmlvbGF0aW9uQXNzZXJ0aW9uU2NvcGUpOgorICAgICAgICAoSlND
OjpBYnN0cmFjdFNsb3RWaXNpdG9yOjpjb2xsZWN0b3JNYXJrU3RhY2spOgorICAgICAgICAoSlND
OjpBYnN0cmFjdFNsb3RWaXNpdG9yOjptdXRhdG9yTWFya1N0YWNrKToKKyAgICAgICAgKEpTQzo6
QWJzdHJhY3RTbG90VmlzaXRvcjo6Y29sbGVjdG9yTWFya1N0YWNrIGNvbnN0KToKKyAgICAgICAg
KEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvcjo6bXV0YXRvck1hcmtTdGFjayBjb25zdCk6CisgICAg
ICAgIChKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3I6OmlzRW1wdHkpOgorICAgICAgICAoSlNDOjpB
YnN0cmFjdFNsb3RWaXNpdG9yOjpzZXRJZ25vcmVOZXdPcGFxdWVSb290cyk6CisgICAgICAgIChK
U0M6OkFic3RyYWN0U2xvdFZpc2l0b3I6OnZpc2l0Q291bnQgY29uc3QpOgorICAgICAgICAoSlND
OjpBYnN0cmFjdFNsb3RWaXNpdG9yOjphZGRUb1Zpc2l0Q291bnQpOgorICAgICAgICAoSlNDOjpB
YnN0cmFjdFNsb3RWaXNpdG9yOjpyb290TWFya1JlYXNvbiBjb25zdCk6CisgICAgICAgIChKU0M6
OkFic3RyYWN0U2xvdFZpc2l0b3I6OnNldFJvb3RNYXJrUmVhc29uKToKKyAgICAgICAgKEpTQzo6
QWJzdHJhY3RTbG90VmlzaXRvcjo6ZGlkUmFjZSk6CisgICAgICAgIChKU0M6OkFic3RyYWN0U2xv
dFZpc2l0b3I6OmNvZGVOYW1lIGNvbnN0KToKKyAgICAgICAgKEpTQzo6U2V0Um9vdE1hcmtSZWFz
b25TY29wZTo6U2V0Um9vdE1hcmtSZWFzb25TY29wZSk6CisgICAgICAgIChKU0M6OlNldFJvb3RN
YXJrUmVhc29uU2NvcGU6On5TZXRSb290TWFya1JlYXNvblNjb3BlKToKKyAgICAgICAgKiBoZWFw
L0Fic3RyYWN0U2xvdFZpc2l0b3JJbmxpbmVzLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpBYnN0
cmFjdFNsb3RWaXNpdG9yOjpDb250ZXh0OjpDb250ZXh0KToKKyAgICAgICAgKEpTQzo6QWJzdHJh
Y3RTbG90VmlzaXRvcjo6Q29udGV4dDo6fkNvbnRleHQpOgorICAgICAgICAoSlNDOjpBYnN0cmFj
dFNsb3RWaXNpdG9yOjpBYnN0cmFjdFNsb3RWaXNpdG9yKToKKyAgICAgICAgKEpTQzo6QWJzdHJh
Y3RTbG90VmlzaXRvcjo6aGVhcCBjb25zdCk6CisgICAgICAgIChKU0M6OkFic3RyYWN0U2xvdFZp
c2l0b3I6OnZtKToKKyAgICAgICAgKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvcjo6dm0gY29uc3Qp
OgorICAgICAgICAoSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yOjphZGRPcGFxdWVSb290KToKKyAg
ICAgICAgKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvcjo6Y29udGFpbnNPcGFxdWVSb290IGNvbnN0
KToKKyAgICAgICAgKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvcjo6YXBwZW5kKToKKyAgICAgICAg
KEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvcjo6YXBwZW5kSGlkZGVuKToKKyAgICAgICAgKEpTQzo6
QWJzdHJhY3RTbG90VmlzaXRvcjo6YXBwZW5kSGlkZGVuVW5iYXJyaWVyZWQpOgorICAgICAgICAo
SlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yOjphcHBlbmRWYWx1ZXMpOgorICAgICAgICAoSlNDOjpB
YnN0cmFjdFNsb3RWaXNpdG9yOjphcHBlbmRWYWx1ZXNIaWRkZW4pOgorICAgICAgICAoSlNDOjpB
YnN0cmFjdFNsb3RWaXNpdG9yOjphcHBlbmRVbmJhcnJpZXJlZCk6CisgICAgICAgIChKU0M6OkFi
c3RyYWN0U2xvdFZpc2l0b3I6OnBhcmVudENlbGwgY29uc3QpOgorICAgICAgICAoSlNDOjpBYnN0
cmFjdFNsb3RWaXNpdG9yOjpyZXNldCk6CisgICAgICAgICogaGVhcC9IYW5kbGVTZXQuY3BwOgor
ICAgICAgICAoSlNDOjpIYW5kbGVTZXQ6OnZpc2l0U3Ryb25nSGFuZGxlcyk6CisgICAgICAgICog
aGVhcC9IYW5kbGVTZXQuaDoKKyAgICAgICAgKiBoZWFwL0hlYXAuY3BwOgorICAgICAgICAoSlND
OjpIZWFwOjppdGVyYXRlRXhlY3V0aW5nQW5kQ29tcGlsaW5nQ29kZUJsb2Nrcyk6CisgICAgICAg
IChKU0M6OkhlYXA6Oml0ZXJhdGVFeGVjdXRpbmdBbmRDb21waWxpbmdDb2RlQmxvY2tzV2l0aG91
dEhvbGRpbmdMb2Nrcyk6CisgICAgICAgIChKU0M6OkhlYXA6OnJ1bkVuZFBoYXNlKToKKyAgICAg
ICAgKEpTQzo6SGVhcDo6d2lsbFN0YXJ0Q29sbGVjdGlvbik6CisgICAgICAgIChKU0M6OnNjYW5F
eHRlcm5hbFJlbWVtYmVyZWRTZXQpOgorICAgICAgICAoSlNDOjpzZXJ2aWNlU2FtcGxpbmdQcm9m
aWxlcik6CisgICAgICAgIChKU0M6OkhlYXA6OmFkZENvcmVDb25zdHJhaW50cyk6CisgICAgICAg
IChKU0M6OkhlYXA6OnZlcmlmeUdDKToKKyAgICAgICAgKEpTQzo6SGVhcDo6aXNBbmFseXppbmdI
ZWFwIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBoZWFwL0hlYXAuaDoKKyAgICAgICAgKEpT
Qzo6SGVhcDo6aXNNYXJraW5nRm9yR0NWZXJpZmllciBjb25zdCk6CisgICAgICAgIChKU0M6Okhl
YXA6Om51bU9wYXF1ZVJvb3RzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBoZWFwL0hlYXBJ
bmxpbmVzLmg6CisgICAgICAgIChKU0M6OkhlYXA6OmlzTWFya2VkKToKKyAgICAgICAgKiBoZWFw
L0hlYXBQcm9maWxlci5jcHA6CisgICAgICAgIChKU0M6OkhlYXBQcm9maWxlcjo6c2V0QWN0aXZl
SGVhcEFuYWx5emVyKToKKyAgICAgICAgKiBoZWFwL0lzb0NlbGxTZXQuaDoKKyAgICAgICAgKiBo
ZWFwL0lzb0NlbGxTZXRJbmxpbmVzLmg6CisgICAgICAgIChKU0M6Oklzb0NlbGxTZXQ6OmZvckVh
Y2hNYXJrZWRDZWxsSW5QYXJhbGxlbCk6CisgICAgICAgICogaGVhcC9KSVRTdHViUm91dGluZVNl
dC5jcHA6CisgICAgICAgIChKU0M6OkpJVFN0dWJSb3V0aW5lU2V0Ojp0cmFjZU1hcmtlZFN0dWJS
b3V0aW5lcyk6CisgICAgICAgICogaGVhcC9KSVRTdHViUm91dGluZVNldC5oOgorICAgICAgICAo
SlNDOjpKSVRTdHViUm91dGluZVNldDo6dHJhY2VNYXJrZWRTdHViUm91dGluZXMpOgorICAgICAg
ICAqIGhlYXAvTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQuY3BwOgorICAgICAgICAoSlNDOjpN
YXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludDo6cHJlcGFyZVRvRXhlY3V0ZUltcGwpOgorICAgICAg
ICAoSlNDOjpNYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludDo6ZXhlY3V0ZUltcGxJbXBsKToKKyAg
ICAgICAgKEpTQzo6TWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQ6OmV4ZWN1dGVJbXBsKToKKyAg
ICAgICAgKiBoZWFwL01hcmtTdGFja01lcmdpbmdDb25zdHJhaW50Lmg6CisgICAgICAgICogaGVh
cC9NYXJrZWRCbG9jay5oOgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6SGFuZGxlOjphdG9t
QXQgY29uc3QpOgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6c2V0VmVyaWZpZXJNZW1vKToK
KyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6OnZlcmlmaWVyTWVtbyBjb25zdCk6CisgICAgICAg
ICogaGVhcC9NYXJrZWRTcGFjZS5jcHA6CisgICAgICAgIChKU0M6Ok1hcmtlZFNwYWNlOjp2aXNp
dFdlYWtTZXRzKToKKyAgICAgICAgKiBoZWFwL01hcmtlZFNwYWNlLmg6CisgICAgICAgICogaGVh
cC9NYXJraW5nQ29uc3RyYWludC5jcHA6CisgICAgICAgIChKU0M6Ok1hcmtpbmdDb25zdHJhaW50
OjpleGVjdXRlKToKKyAgICAgICAgKEpTQzo6TWFya2luZ0NvbnN0cmFpbnQ6OmV4ZWN1dGVTeW5j
aHJvbm91c2x5KToKKyAgICAgICAgKEpTQzo6TWFya2luZ0NvbnN0cmFpbnQ6OnByZXBhcmVUb0V4
ZWN1dGUpOgorICAgICAgICAoSlNDOjpNYXJraW5nQ29uc3RyYWludDo6ZG9QYXJhbGxlbFdvcmsp
OgorICAgICAgICAoSlNDOjpNYXJraW5nQ29uc3RyYWludDo6cHJlcGFyZVRvRXhlY3V0ZUltcGwp
OgorICAgICAgICAqIGhlYXAvTWFya2luZ0NvbnN0cmFpbnQuaDoKKyAgICAgICAgKiBoZWFwL01h
cmtpbmdDb25zdHJhaW50RXhlY3V0b3JQYWlyLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpNYXJr
aW5nQ29uc3RyYWludEV4ZWN1dG9yUGFpcjo6TWFya2luZ0NvbnN0cmFpbnRFeGVjdXRvclBhaXIp
OgorICAgICAgICAoSlNDOjpNYXJraW5nQ29uc3RyYWludEV4ZWN1dG9yUGFpcjo6ZXhlY3V0ZSk6
CisgICAgICAgICogaGVhcC9NYXJraW5nQ29uc3RyYWludFNldC5jcHA6CisgICAgICAgIChKU0M6
Ok1hcmtpbmdDb25zdHJhaW50U2V0OjphZGQpOgorICAgICAgICAoSlNDOjpNYXJraW5nQ29uc3Ry
YWludFNldDo6ZXhlY3V0ZUFsbFN5bmNocm9ub3VzbHkpOgorICAgICAgICAoSlNDOjpNYXJraW5n
Q29uc3RyYWludFNldDo6ZXhlY3V0ZUFsbCk6IERlbGV0ZWQuCisgICAgICAgICogaGVhcC9NYXJr
aW5nQ29uc3RyYWludFNldC5oOgorICAgICAgICAoSlNDOjpNYXJraW5nQ29uc3RyYWludFNldDo6
YWRkKToKKyAgICAgICAgKiBoZWFwL01hcmtpbmdDb25zdHJhaW50U29sdmVyLmNwcDoKKyAgICAg
ICAgKiBoZWFwL01hcmtpbmdDb25zdHJhaW50U29sdmVyLmg6CisgICAgICAgICogaGVhcC9TaW1w
bGVNYXJraW5nQ29uc3RyYWludC5jcHA6CisgICAgICAgIChKU0M6OlNpbXBsZU1hcmtpbmdDb25z
dHJhaW50OjpTaW1wbGVNYXJraW5nQ29uc3RyYWludCk6CisgICAgICAgIChKU0M6OlNpbXBsZU1h
cmtpbmdDb25zdHJhaW50OjpleGVjdXRlSW1wbEltcGwpOgorICAgICAgICAoSlNDOjpTaW1wbGVN
YXJraW5nQ29uc3RyYWludDo6ZXhlY3V0ZUltcGwpOgorICAgICAgICAqIGhlYXAvU2ltcGxlTWFy
a2luZ0NvbnN0cmFpbnQuaDoKKyAgICAgICAgKiBoZWFwL1Nsb3RWaXNpdG9yLmNwcDoKKyAgICAg
ICAgKEpTQzo6U2xvdFZpc2l0b3I6OlNsb3RWaXNpdG9yKToKKyAgICAgICAgKEpTQzo6U2xvdFZp
c2l0b3I6OnJlc2V0KToKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OmFwcGVuZFNsb3cpOgor
ICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6YWRkUGFyYWxsZWxDb25zdHJhaW50VGFzayk6Cisg
ICAgICAgICogaGVhcC9TbG90VmlzaXRvci5oOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6
Y29sbGVjdG9yTWFya1N0YWNrKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6
Om11dGF0b3JNYXJrU3RhY2spOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6
Y29sbGVjdG9yTWFya1N0YWNrIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U2xvdFZp
c2l0b3I6Om11dGF0b3JNYXJrU3RhY2sgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpT
bG90VmlzaXRvcjo6aXNFbXB0eSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9y
Ojppc0ZpcnN0VmlzaXQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpTbG90VmlzaXRv
cjo6Ynl0ZXNWaXNpdGVkIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0
b3I6OnZpc2l0Q291bnQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpTbG90VmlzaXRv
cjo6YWRkVG9WaXNpdENvdW50KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6
OmlzQW5hbHl6aW5nSGVhcCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlNsb3RWaXNp
dG9yOjpoZWFwQW5hbHl6ZXIgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpTbG90Vmlz
aXRvcjo6cm9vdE1hcmtSZWFzb24gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpTbG90
VmlzaXRvcjo6c2V0Um9vdE1hcmtSZWFzb24pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpTbG90
VmlzaXRvcjo6bWFya2luZ1ZlcnNpb24gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpT
bG90VmlzaXRvcjo6bXV0YXRvcklzU3RvcHBlZCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6OlNsb3RWaXNpdG9yOjpyaWdodFRvUnVuKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U2xv
dFZpc2l0b3I6OmRpZFJhY2UpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6
c2V0SWdub3JlTmV3T3BhcXVlUm9vdHMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpTbG90Vmlz
aXRvcjo6Y29kZU5hbWUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpTZXRSb290TWFy
a1JlYXNvblNjb3BlOjpTZXRSb290TWFya1JlYXNvblNjb3BlKTogRGVsZXRlZC4KKyAgICAgICAg
KEpTQzo6U2V0Um9vdE1hcmtSZWFzb25TY29wZTo6flNldFJvb3RNYXJrUmVhc29uU2NvcGUpOiBE
ZWxldGVkLgorICAgICAgICAqIGhlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmg6CisgICAgICAgIChK
U0M6OlNsb3RWaXNpdG9yOjppc01hcmtlZCBjb25zdCk6CisgICAgICAgIChKU0M6OlNsb3RWaXNp
dG9yOjphZGRPcGFxdWVSb290KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6
OmNvbnRhaW5zT3BhcXVlUm9vdCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlNsb3RW
aXNpdG9yOjpoZWFwIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6
OnZtKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OnZtIGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKiBoZWFwL1Nsb3RWaXNpdG9yTWFjcm9zLmg6IEFkZGVkLgorICAgICAg
ICAqIGhlYXAvU3Vic3BhY2UuaDoKKyAgICAgICAgKiBoZWFwL1N1YnNwYWNlSW5saW5lcy5oOgor
ICAgICAgICAoSlNDOjpTdWJzcGFjZTo6Zm9yRWFjaE1hcmtlZENlbGxJblBhcmFsbGVsKToKKyAg
ICAgICAgKiBoZWFwL1ZlcmlmaWVyU2xvdFZpc2l0b3IuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpT
Qzo6TWFya2VyRGF0YTo6TWFya2VyRGF0YSk6CisgICAgICAgIChKU0M6OlZlcmlmaWVyU2xvdFZp
c2l0b3I6Ok1hcmtlZEJsb2NrRGF0YTo6TWFya2VkQmxvY2tEYXRhKToKKyAgICAgICAgKEpTQzo6
VmVyaWZpZXJTbG90VmlzaXRvcjo6TWFya2VkQmxvY2tEYXRhOjphZGRNYXJrZXJEYXRhKToKKyAg
ICAgICAgKEpTQzo6VmVyaWZpZXJTbG90VmlzaXRvcjo6TWFya2VkQmxvY2tEYXRhOjptYXJrZXJE
YXRhIGNvbnN0KToKKyAgICAgICAgKEpTQzo6VmVyaWZpZXJTbG90VmlzaXRvcjo6UHJlY2lzZUFs
bG9jYXRpb25EYXRhOjpQcmVjaXNlQWxsb2NhdGlvbkRhdGEpOgorICAgICAgICAoSlNDOjpWZXJp
ZmllclNsb3RWaXNpdG9yOjpQcmVjaXNlQWxsb2NhdGlvbkRhdGE6Om1hcmtlckRhdGEgY29uc3Qp
OgorICAgICAgICAoSlNDOjpWZXJpZmllclNsb3RWaXNpdG9yOjpQcmVjaXNlQWxsb2NhdGlvbkRh
dGE6OmFkZE1hcmtlckRhdGEpOgorICAgICAgICAoSlNDOjpWZXJpZmllclNsb3RWaXNpdG9yOjpW
ZXJpZmllclNsb3RWaXNpdG9yKToKKyAgICAgICAgKEpTQzo6VmVyaWZpZXJTbG90VmlzaXRvcjo6
flZlcmlmaWVyU2xvdFZpc2l0b3IpOgorICAgICAgICAoSlNDOjpWZXJpZmllclNsb3RWaXNpdG9y
OjphZGRQYXJhbGxlbENvbnN0cmFpbnRUYXNrKToKKyAgICAgICAgKEpTQzo6VmVyaWZpZXJTbG90
VmlzaXRvcjo6ZXhlY3V0ZUNvbnN0cmFpbnRUYXNrcyk6CisgICAgICAgIChKU0M6OlZlcmlmaWVy
U2xvdFZpc2l0b3I6OmFwcGVuZCk6CisgICAgICAgIChKU0M6OlZlcmlmaWVyU2xvdFZpc2l0b3I6
OmFwcGVuZFRvTWFya1N0YWNrKToKKyAgICAgICAgKEpTQzo6VmVyaWZpZXJTbG90VmlzaXRvcjo6
YXBwZW5kVW5iYXJyaWVyZWQpOgorICAgICAgICAoSlNDOjpWZXJpZmllclNsb3RWaXNpdG9yOjph
cHBlbmRIaWRkZW5VbmJhcnJpZXJlZCk6CisgICAgICAgIChKU0M6OlZlcmlmaWVyU2xvdFZpc2l0
b3I6OmRyYWluKToKKyAgICAgICAgKEpTQzo6VmVyaWZpZXJTbG90VmlzaXRvcjo6ZHVtcE1hcmtl
ckRhdGEpOgorICAgICAgICAoSlNDOjpWZXJpZmllclNsb3RWaXNpdG9yOjppc0ZpcnN0VmlzaXQg
Y29uc3QpOgorICAgICAgICAoSlNDOjpWZXJpZmllclNsb3RWaXNpdG9yOjppc01hcmtlZCBjb25z
dCk6CisgICAgICAgIChKU0M6OlZlcmlmaWVyU2xvdFZpc2l0b3I6Om1hcmtBdXhpbGlhcnkpOgor
ICAgICAgICAoSlNDOjpWZXJpZmllclNsb3RWaXNpdG9yOjptdXRhdG9ySXNTdG9wcGVkIGNvbnN0
KToKKyAgICAgICAgKEpTQzo6VmVyaWZpZXJTbG90VmlzaXRvcjo6dGVzdEFuZFNldE1hcmtlZCk6
CisgICAgICAgIChKU0M6OlZlcmlmaWVyU2xvdFZpc2l0b3I6OnNldE1hcmtlZEFuZEFwcGVuZFRv
TWFya1N0YWNrKToKKyAgICAgICAgKEpTQzo6VmVyaWZpZXJTbG90VmlzaXRvcjo6dmlzaXRBc0Nv
bnN0cmFpbnQpOgorICAgICAgICAoSlNDOjpWZXJpZmllclNsb3RWaXNpdG9yOjp2aXNpdENoaWxk
cmVuKToKKyAgICAgICAgKiBoZWFwL1ZlcmlmaWVyU2xvdFZpc2l0b3IuaDogQWRkZWQuCisgICAg
ICAgIChKU0M6OlZlcmlmaWVyU2xvdFZpc2l0b3I6Ok1hcmtlZEJsb2NrRGF0YTo6YmxvY2sgY29u
c3QpOgorICAgICAgICAoSlNDOjpWZXJpZmllclNsb3RWaXNpdG9yOjpNYXJrZWRCbG9ja0RhdGE6
OmF0b21zIGNvbnN0KToKKyAgICAgICAgKEpTQzo6VmVyaWZpZXJTbG90VmlzaXRvcjo6TWFya2Vk
QmxvY2tEYXRhOjppc01hcmtlZCk6CisgICAgICAgIChKU0M6OlZlcmlmaWVyU2xvdFZpc2l0b3I6
Ok1hcmtlZEJsb2NrRGF0YTo6dGVzdEFuZFNldE1hcmtlZCk6CisgICAgICAgIChKU0M6OlZlcmlm
aWVyU2xvdFZpc2l0b3I6OlByZWNpc2VBbGxvY2F0aW9uRGF0YTo6YWxsb2NhdGlvbiBjb25zdCk6
CisgICAgICAgIChKU0M6OlZlcmlmaWVyU2xvdFZpc2l0b3I6OmFwcGVuZFNsb3cpOgorICAgICAg
ICAqIGhlYXAvVmVyaWZpZXJTbG90VmlzaXRvcklubGluZXMuaDogQWRkZWQuCisgICAgICAgIChK
U0M6OlZlcmlmaWVyU2xvdFZpc2l0b3I6OmZvckVhY2hMaXZlQ2VsbCk6CisgICAgICAgIChKU0M6
OlZlcmlmaWVyU2xvdFZpc2l0b3I6OmZvckVhY2hMaXZlUHJlY2lzZUFsbG9jYXRpb24pOgorICAg
ICAgICAoSlNDOjpWZXJpZmllclNsb3RWaXNpdG9yOjpmb3JFYWNoTGl2ZU1hcmtlZEJsb2NrQ2Vs
bCk6CisgICAgICAgICogaGVhcC9WaXNpdENvdW50ZXIuaDoKKyAgICAgICAgKEpTQzo6VmlzaXRD
b3VudGVyOjpWaXNpdENvdW50ZXIpOgorICAgICAgICAoSlNDOjpWaXNpdENvdW50ZXI6OnZpc2l0
b3IgY29uc3QpOgorICAgICAgICAqIGhlYXAvV2Vha0Jsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6
V2Vha0Jsb2NrOjpzcGVjaWFsaXplZFZpc2l0KToKKyAgICAgICAgKEpTQzo6V2Vha0Jsb2NrOjp2
aXNpdEltcGwpOgorICAgICAgICAoSlNDOjpXZWFrQmxvY2s6OnZpc2l0KToKKyAgICAgICAgKiBo
ZWFwL1dlYWtCbG9jay5oOgorICAgICAgICAqIGhlYXAvV2Vha0hhbmRsZU93bmVyLmNwcDoKKyAg
ICAgICAgKEpTQzo6V2Vha0hhbmRsZU93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyk6
CisgICAgICAgICogaGVhcC9XZWFrSGFuZGxlT3duZXIuaDoKKyAgICAgICAgKiBoZWFwL1dlYWtT
ZXQuY3BwOgorICAgICAgICAqIGhlYXAvV2Vha1NldC5oOgorICAgICAgICAoSlNDOjpXZWFrU2V0
Ojp2aXNpdCk6CisgICAgICAgICogaW50ZXJwcmV0ZXIvU2hhZG93Q2hpY2tlbi5jcHA6CisgICAg
ICAgIChKU0M6OlNoYWRvd0NoaWNrZW46OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAqIGludGVy
cHJldGVyL1NoYWRvd0NoaWNrZW4uaDoKKyAgICAgICAgKiBqaXQvR0NBd2FyZUpJVFN0dWJSb3V0
aW5lLmNwcDoKKyAgICAgICAgKEpTQzo6TWFya2luZ0dDQXdhcmVKSVRTdHViUm91dGluZTo6bWFy
a1JlcXVpcmVkT2JqZWN0c0ludGVybmFsSW1wbCk6CisgICAgICAgIChKU0M6Ok1hcmtpbmdHQ0F3
YXJlSklUU3R1YlJvdXRpbmU6Om1hcmtSZXF1aXJlZE9iamVjdHNJbnRlcm5hbCk6CisgICAgICAg
IChKU0M6OkdDQXdhcmVKSVRTdHViUm91dGluZTo6bWFya1JlcXVpcmVkT2JqZWN0c0ludGVybmFs
KTogRGVsZXRlZC4KKyAgICAgICAgKiBqaXQvR0NBd2FyZUpJVFN0dWJSb3V0aW5lLmg6CisgICAg
ICAgIChKU0M6OkdDQXdhcmVKSVRTdHViUm91dGluZTo6bWFya1JlcXVpcmVkT2JqZWN0cyk6Cisg
ICAgICAgIChKU0M6OkdDQXdhcmVKSVRTdHViUm91dGluZTo6bWFya1JlcXVpcmVkT2JqZWN0c0lu
dGVybmFsKToKKyAgICAgICAgKiBqaXQvSklUV29ya2xpc3QuY3BwOgorICAgICAgICAqIGppdC9Q
b2x5bW9ycGhpY0NhbGxTdHViUm91dGluZS5jcHA6CisgICAgICAgIChKU0M6OlBvbHltb3JwaGlj
Q2FsbFN0dWJSb3V0aW5lOjptYXJrUmVxdWlyZWRPYmplY3RzSW50ZXJuYWxJbXBsKToKKyAgICAg
ICAgKEpTQzo6UG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmU6Om1hcmtSZXF1aXJlZE9iamVjdHNJ
bnRlcm5hbCk6CisgICAgICAgICogaml0L1BvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lLmg6Cisg
ICAgICAgICogcnVudGltZS9BYnN0cmFjdE1vZHVsZVJlY29yZC5jcHA6CisgICAgICAgIChKU0M6
OkFic3RyYWN0TW9kdWxlUmVjb3JkOjp2aXNpdENoaWxkcmVuSW1wbCk6CisgICAgICAgIChKU0M6
OkFic3RyYWN0TW9kdWxlUmVjb3JkOjp2aXNpdENoaWxkcmVuKTogRGVsZXRlZC4KKyAgICAgICAg
KiBydW50aW1lL0Fic3RyYWN0TW9kdWxlUmVjb3JkLmg6CisgICAgICAgICogcnVudGltZS9BcmdM
aXN0LmNwcDoKKyAgICAgICAgKEpTQzo6TWFya2VkQXJndW1lbnRCdWZmZXI6Om1hcmtMaXN0cyk6
CisgICAgICAgICogcnVudGltZS9BcmdMaXN0Lmg6CisgICAgICAgICogcnVudGltZS9DYWNoZWFi
bGVJZGVudGlmaWVyLmg6CisgICAgICAgICogcnVudGltZS9DYWNoZWFibGVJZGVudGlmaWVySW5s
aW5lcy5oOgorICAgICAgICAoSlNDOjpDYWNoZWFibGVJZGVudGlmaWVyOjp2aXNpdEFnZ3JlZ2F0
ZSBjb25zdCk6CisgICAgICAgICogcnVudGltZS9DbGFzc0luZm8uaDoKKyAgICAgICAgKEpTQzo6
TWV0aG9kVGFibGU6OnZpc2l0Q2hpbGRyZW4gY29uc3QpOgorICAgICAgICAoSlNDOjpNZXRob2RU
YWJsZTo6dmlzaXRPdXRwdXRDb25zdHJhaW50cyBjb25zdCk6CisgICAgICAgICogcnVudGltZS9D
bG9uZWRBcmd1bWVudHMuY3BwOgorICAgICAgICAoSlNDOjpDbG9uZWRBcmd1bWVudHM6OnZpc2l0
Q2hpbGRyZW5JbXBsKToKKyAgICAgICAgKEpTQzo6Q2xvbmVkQXJndW1lbnRzOjp2aXNpdENoaWxk
cmVuKTogRGVsZXRlZC4KKyAgICAgICAgKiBydW50aW1lL0Nsb25lZEFyZ3VtZW50cy5oOgorICAg
ICAgICAqIHJ1bnRpbWUvRGlyZWN0QXJndW1lbnRzLmNwcDoKKyAgICAgICAgKEpTQzo6RGlyZWN0
QXJndW1lbnRzOjp2aXNpdENoaWxkcmVuSW1wbCk6CisgICAgICAgIChKU0M6OkRpcmVjdEFyZ3Vt
ZW50czo6dmlzaXRDaGlsZHJlbik6IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9EaXJlY3RB
cmd1bWVudHMuaDoKKyAgICAgICAgKiBydW50aW1lL0V2YWxFeGVjdXRhYmxlLmNwcDoKKyAgICAg
ICAgKEpTQzo6RXZhbEV4ZWN1dGFibGU6OnZpc2l0Q2hpbGRyZW5JbXBsKToKKyAgICAgICAgKEpT
Qzo6RXZhbEV4ZWN1dGFibGU6OnZpc2l0Q2hpbGRyZW4pOiBEZWxldGVkLgorICAgICAgICAqIHJ1
bnRpbWUvRXZhbEV4ZWN1dGFibGUuaDoKKyAgICAgICAgKiBydW50aW1lL0V4Y2VwdGlvbi5jcHA6
CisgICAgICAgIChKU0M6OkV4Y2VwdGlvbjo6dmlzaXRDaGlsZHJlbkltcGwpOgorICAgICAgICAo
SlNDOjpFeGNlcHRpb246OnZpc2l0Q2hpbGRyZW4pOiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRp
bWUvRXhjZXB0aW9uLmg6CisgICAgICAgICogcnVudGltZS9GdW5jdGlvbkV4ZWN1dGFibGUuY3Bw
OgorICAgICAgICAoSlNDOjpGdW5jdGlvbkV4ZWN1dGFibGU6OnZpc2l0Q2hpbGRyZW5JbXBsKToK
KyAgICAgICAgKEpTQzo6RnVuY3Rpb25FeGVjdXRhYmxlOjp2aXNpdENoaWxkcmVuKTogRGVsZXRl
ZC4KKyAgICAgICAgKiBydW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZS5oOgorICAgICAgICAqIHJ1
bnRpbWUvRnVuY3Rpb25SYXJlRGF0YS5jcHA6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uUmFyZURh
dGE6OnZpc2l0Q2hpbGRyZW5JbXBsKToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25SYXJlRGF0YTo6
dmlzaXRDaGlsZHJlbik6IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9GdW5jdGlvblJhcmVE
YXRhLmg6CisgICAgICAgICogcnVudGltZS9HZW5lcmljQXJndW1lbnRzLmg6CisgICAgICAgICog
cnVudGltZS9HZW5lcmljQXJndW1lbnRzSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpHZW5lcmlj
QXJndW1lbnRzPFR5cGU+Ojp2aXNpdENoaWxkcmVuSW1wbCk6CisgICAgICAgIChKU0M6OkdlbmVy
aWNBcmd1bWVudHM8VHlwZT46OnZpc2l0Q2hpbGRyZW4pOiBEZWxldGVkLgorICAgICAgICAqIHJ1
bnRpbWUvR2V0dGVyU2V0dGVyLmNwcDoKKyAgICAgICAgKEpTQzo6R2V0dGVyU2V0dGVyOjp2aXNp
dENoaWxkcmVuSW1wbCk6CisgICAgICAgIChKU0M6OkdldHRlclNldHRlcjo6dmlzaXRDaGlsZHJl
bik6IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9HZXR0ZXJTZXR0ZXIuaDoKKyAgICAgICAg
KiBydW50aW1lL0hhc2hNYXBJbXBsLmNwcDoKKyAgICAgICAgKEpTQzo6SGFzaE1hcEJ1Y2tldDxE
YXRhPjo6dmlzaXRDaGlsZHJlbkltcGwpOgorICAgICAgICAoSlNDOjpIYXNoTWFwSW1wbDxIYXNo
TWFwQnVja2V0Pjo6dmlzaXRDaGlsZHJlbkltcGwpOgorICAgICAgICAoSlNDOjpIYXNoTWFwQnVj
a2V0PERhdGE+Ojp2aXNpdENoaWxkcmVuKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SGFzaE1h
cEltcGw8SGFzaE1hcEJ1Y2tldD46OnZpc2l0Q2hpbGRyZW4pOiBEZWxldGVkLgorICAgICAgICAq
IHJ1bnRpbWUvSGFzaE1hcEltcGwuaDoKKyAgICAgICAgKiBydW50aW1lL0ludGVybmFsRnVuY3Rp
b24uY3BwOgorICAgICAgICAoSlNDOjpJbnRlcm5hbEZ1bmN0aW9uOjp2aXNpdENoaWxkcmVuSW1w
bCk6CisgICAgICAgIChKU0M6OkludGVybmFsRnVuY3Rpb246OnZpc2l0Q2hpbGRyZW4pOiBEZWxl
dGVkLgorICAgICAgICAqIHJ1bnRpbWUvSW50ZXJuYWxGdW5jdGlvbi5oOgorICAgICAgICAqIHJ1
bnRpbWUvSW50bENvbGxhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6SW50bENvbGxhdG9yOjp2aXNp
dENoaWxkcmVuSW1wbCk6CisgICAgICAgIChKU0M6OkludGxDb2xsYXRvcjo6dmlzaXRDaGlsZHJl
bik6IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9JbnRsQ29sbGF0b3IuaDoKKyAgICAgICAg
KiBydW50aW1lL0ludGxEYXRlVGltZUZvcm1hdC5jcHA6CisgICAgICAgIChKU0M6OkludGxEYXRl
VGltZUZvcm1hdDo6dmlzaXRDaGlsZHJlbkltcGwpOgorICAgICAgICAoSlNDOjpJbnRsRGF0ZVRp
bWVGb3JtYXQ6OnZpc2l0Q2hpbGRyZW4pOiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvSW50
bERhdGVUaW1lRm9ybWF0Lmg6CisgICAgICAgICogcnVudGltZS9JbnRsTG9jYWxlLmNwcDoKKyAg
ICAgICAgKEpTQzo6SW50bExvY2FsZTo6dmlzaXRDaGlsZHJlbkltcGwpOgorICAgICAgICAoSlND
OjpJbnRsTG9jYWxlOjp2aXNpdENoaWxkcmVuKTogRGVsZXRlZC4KKyAgICAgICAgKiBydW50aW1l
L0ludGxMb2NhbGUuaDoKKyAgICAgICAgKiBydW50aW1lL0ludGxOdW1iZXJGb3JtYXQuY3BwOgor
ICAgICAgICAoSlNDOjpJbnRsTnVtYmVyRm9ybWF0Ojp2aXNpdENoaWxkcmVuSW1wbCk6CisgICAg
ICAgIChKU0M6OkludGxOdW1iZXJGb3JtYXQ6OnZpc2l0Q2hpbGRyZW4pOiBEZWxldGVkLgorICAg
ICAgICAqIHJ1bnRpbWUvSW50bE51bWJlckZvcm1hdC5oOgorICAgICAgICAqIHJ1bnRpbWUvSW50
bFBsdXJhbFJ1bGVzLmNwcDoKKyAgICAgICAgKEpTQzo6SW50bFBsdXJhbFJ1bGVzOjp2aXNpdENo
aWxkcmVuSW1wbCk6CisgICAgICAgIChKU0M6OkludGxQbHVyYWxSdWxlczo6dmlzaXRDaGlsZHJl
bik6IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9JbnRsUGx1cmFsUnVsZXMuaDoKKyAgICAg
ICAgKiBydW50aW1lL0ludGxSZWxhdGl2ZVRpbWVGb3JtYXQuY3BwOgorICAgICAgICAoSlNDOjpJ
bnRsUmVsYXRpdmVUaW1lRm9ybWF0Ojp2aXNpdENoaWxkcmVuSW1wbCk6CisgICAgICAgIChKU0M6
OkludGxSZWxhdGl2ZVRpbWVGb3JtYXQ6OnZpc2l0Q2hpbGRyZW4pOiBEZWxldGVkLgorICAgICAg
ICAqIHJ1bnRpbWUvSW50bFJlbGF0aXZlVGltZUZvcm1hdC5oOgorICAgICAgICAqIHJ1bnRpbWUv
SW50bFNlZ21lbnRJdGVyYXRvci5jcHA6CisgICAgICAgIChKU0M6OkludGxTZWdtZW50SXRlcmF0
b3I6OnZpc2l0Q2hpbGRyZW5JbXBsKToKKyAgICAgICAgKEpTQzo6SW50bFNlZ21lbnRJdGVyYXRv
cjo6dmlzaXRDaGlsZHJlbik6IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9JbnRsU2VnbWVu
dEl0ZXJhdG9yLmg6CisgICAgICAgICogcnVudGltZS9JbnRsU2VnbWVudHMuY3BwOgorICAgICAg
ICAoSlNDOjpJbnRsU2VnbWVudHM6OnZpc2l0Q2hpbGRyZW5JbXBsKToKKyAgICAgICAgKEpTQzo6
SW50bFNlZ21lbnRzOjp2aXNpdENoaWxkcmVuKTogRGVsZXRlZC4KKyAgICAgICAgKiBydW50aW1l
L0ludGxTZWdtZW50cy5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuY3Bw
OgorICAgICAgICAoSlNDOjpKU0FycmF5QnVmZmVyVmlldzo6dmlzaXRDaGlsZHJlbkltcGwpOgor
ICAgICAgICAoSlNDOjpKU0FycmF5QnVmZmVyVmlldzo6dmlzaXRDaGlsZHJlbik6IERlbGV0ZWQu
CisgICAgICAgICogcnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5oOgorICAgICAgICAqIHJ1bnRp
bWUvSlNBcnJheUl0ZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6SlNBcnJheUl0ZXJhdG9yOjp2
aXNpdENoaWxkcmVuSW1wbCk6CisgICAgICAgIChKU0M6OkpTQXJyYXlJdGVyYXRvcjo6dmlzaXRD
aGlsZHJlbik6IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9KU0FycmF5SXRlcmF0b3IuaDoK
KyAgICAgICAgKiBydW50aW1lL0pTQXN5bmNHZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpK
U0FzeW5jR2VuZXJhdG9yOjp2aXNpdENoaWxkcmVuSW1wbCk6CisgICAgICAgIChKU0M6OkpTQXN5
bmNHZW5lcmF0b3I6OnZpc2l0Q2hpbGRyZW4pOiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUv
SlNBc3luY0dlbmVyYXRvci5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNCaWdJbnQuY3BwOgorICAg
ICAgICAoSlNDOjpKU0JpZ0ludDo6dmlzaXRDaGlsZHJlbkltcGwpOgorICAgICAgICAoSlNDOjpK
U0JpZ0ludDo6dmlzaXRDaGlsZHJlbik6IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9KU0Jp
Z0ludC5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNCb3VuZEZ1bmN0aW9uLmNwcDoKKyAgICAgICAg
KEpTQzo6SlNCb3VuZEZ1bmN0aW9uOjp2aXNpdENoaWxkcmVuSW1wbCk6CisgICAgICAgIChKU0M6
OkpTQm91bmRGdW5jdGlvbjo6dmlzaXRDaGlsZHJlbik6IERlbGV0ZWQuCisgICAgICAgICogcnVu
dGltZS9KU0JvdW5kRnVuY3Rpb24uaDoKKyAgICAgICAgKiBydW50aW1lL0pTQ2FsbGVlLmNwcDoK
KyAgICAgICAgKEpTQzo6SlNDYWxsZWU6OnZpc2l0Q2hpbGRyZW5JbXBsKToKKyAgICAgICAgKEpT
Qzo6SlNDYWxsZWU6OnZpc2l0Q2hpbGRyZW4pOiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUv
SlNDYWxsZWUuaDoKKyAgICAgICAgKiBydW50aW1lL0pTQ2VsbC5oOgorICAgICAgICAqIHJ1bnRp
bWUvSlNDZWxsSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpKU0NlbGw6OnZpc2l0Q2hpbGRyZW5J
bXBsKToKKyAgICAgICAgKEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzSW1wbCk6
CisgICAgICAgIChKU0M6OkpTQ2VsbDo6dmlzaXRDaGlsZHJlbik6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50cyk6IERlbGV0ZWQuCisgICAgICAg
ICogcnVudGltZS9KU0ZpbmFsaXphdGlvblJlZ2lzdHJ5LmNwcDoKKyAgICAgICAgKEpTQzo6SlNG
aW5hbGl6YXRpb25SZWdpc3RyeTo6dmlzaXRDaGlsZHJlbkltcGwpOgorICAgICAgICAoSlNDOjpK
U0ZpbmFsaXphdGlvblJlZ2lzdHJ5Ojp2aXNpdENoaWxkcmVuKTogRGVsZXRlZC4KKyAgICAgICAg
KiBydW50aW1lL0pTRmluYWxpemF0aW9uUmVnaXN0cnkuaDoKKyAgICAgICAgKiBydW50aW1lL0pT
RnVuY3Rpb24uY3BwOgorICAgICAgICAoSlNDOjpKU0Z1bmN0aW9uOjp2aXNpdENoaWxkcmVuSW1w
bCk6CisgICAgICAgIChKU0M6OkpTRnVuY3Rpb246OnZpc2l0Q2hpbGRyZW4pOiBEZWxldGVkLgor
ICAgICAgICAqIHJ1bnRpbWUvSlNGdW5jdGlvbi5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNHZW5l
cmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpKU0dlbmVyYXRvcjo6dmlzaXRDaGlsZHJlbkltcGwp
OgorICAgICAgICAoSlNDOjpKU0dlbmVyYXRvcjo6dmlzaXRDaGlsZHJlbik6IERlbGV0ZWQuCisg
ICAgICAgICogcnVudGltZS9KU0dlbmVyYXRvci5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNHZW5l
cmljVHlwZWRBcnJheVZpZXcuaDoKKyAgICAgICAgKiBydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJy
YXlWaWV3SW5saW5lcy5oOgorICAgICAgICAoSlNDOjpKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxB
ZGFwdG9yPjo6dmlzaXRDaGlsZHJlbkltcGwpOgorICAgICAgICAoSlNDOjpKU0dlbmVyaWNUeXBl
ZEFycmF5VmlldzxBZGFwdG9yPjo6dmlzaXRDaGlsZHJlbik6IERlbGV0ZWQuCisgICAgICAgICog
cnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHA6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0
Ojp2aXNpdENoaWxkcmVuSW1wbCk6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0Ojp2aXNp
dENoaWxkcmVuKTogRGVsZXRlZC4KKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsT2JqZWN0Lmg6
CisgICAgICAgICogcnVudGltZS9KU0ltbXV0YWJsZUJ1dHRlcmZseS5jcHA6CisgICAgICAgIChK
U0M6OkpTSW1tdXRhYmxlQnV0dGVyZmx5Ojp2aXNpdENoaWxkcmVuSW1wbCk6CisgICAgICAgIChK
U0M6OkpTSW1tdXRhYmxlQnV0dGVyZmx5Ojp2aXNpdENoaWxkcmVuKTogRGVsZXRlZC4KKyAgICAg
ICAgKiBydW50aW1lL0pTSW1tdXRhYmxlQnV0dGVyZmx5Lmg6CisgICAgICAgICogcnVudGltZS9K
U0ludGVybmFsRmllbGRPYmplY3RJbXBsLmg6CisgICAgICAgICogcnVudGltZS9KU0ludGVybmFs
RmllbGRPYmplY3RJbXBsSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpKU0ludGVybmFsRmllbGRP
YmplY3RJbXBsPHBhc3NlZE51bWJlck9mSW50ZXJuYWxGaWVsZHM+Ojp2aXNpdENoaWxkcmVuSW1w
bCk6CisgICAgICAgIChKU0M6OkpTSW50ZXJuYWxGaWVsZE9iamVjdEltcGw8cGFzc2VkTnVtYmVy
T2ZJbnRlcm5hbEZpZWxkcz46OnZpc2l0Q2hpbGRyZW4pOiBEZWxldGVkLgorICAgICAgICAqIHJ1
bnRpbWUvSlNMZXhpY2FsRW52aXJvbm1lbnQuY3BwOgorICAgICAgICAoSlNDOjpKU0xleGljYWxF
bnZpcm9ubWVudDo6dmlzaXRDaGlsZHJlbkltcGwpOgorICAgICAgICAoSlNDOjpKU0xleGljYWxF
bnZpcm9ubWVudDo6dmlzaXRDaGlsZHJlbik6IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9K
U0xleGljYWxFbnZpcm9ubWVudC5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNNYXBJdGVyYXRvci5j
cHA6CisgICAgICAgIChKU0M6OkpTTWFwSXRlcmF0b3I6OnZpc2l0Q2hpbGRyZW5JbXBsKToKKyAg
ICAgICAgKEpTQzo6SlNNYXBJdGVyYXRvcjo6dmlzaXRDaGlsZHJlbik6IERlbGV0ZWQuCisgICAg
ICAgICogcnVudGltZS9KU01hcEl0ZXJhdG9yLmg6CisgICAgICAgICogcnVudGltZS9KU01vZHVs
ZUVudmlyb25tZW50LmNwcDoKKyAgICAgICAgKEpTQzo6SlNNb2R1bGVFbnZpcm9ubWVudDo6dmlz
aXRDaGlsZHJlbkltcGwpOgorICAgICAgICAoSlNDOjpKU01vZHVsZUVudmlyb25tZW50Ojp2aXNp
dENoaWxkcmVuKTogRGVsZXRlZC4KKyAgICAgICAgKiBydW50aW1lL0pTTW9kdWxlRW52aXJvbm1l
bnQuaDoKKyAgICAgICAgKiBydW50aW1lL0pTTW9kdWxlTmFtZXNwYWNlT2JqZWN0LmNwcDoKKyAg
ICAgICAgKEpTQzo6SlNNb2R1bGVOYW1lc3BhY2VPYmplY3Q6OnZpc2l0Q2hpbGRyZW5JbXBsKToK
KyAgICAgICAgKEpTQzo6SlNNb2R1bGVOYW1lc3BhY2VPYmplY3Q6OnZpc2l0Q2hpbGRyZW4pOiBE
ZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QuaDoKKyAg
ICAgICAgKiBydW50aW1lL0pTTW9kdWxlUmVjb3JkLmNwcDoKKyAgICAgICAgKEpTQzo6SlNNb2R1
bGVSZWNvcmQ6OnZpc2l0Q2hpbGRyZW5JbXBsKToKKyAgICAgICAgKEpTQzo6SlNNb2R1bGVSZWNv
cmQ6OnZpc2l0Q2hpbGRyZW4pOiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvSlNNb2R1bGVS
ZWNvcmQuaDoKKyAgICAgICAgKiBydW50aW1lL0pTTmF0aXZlU3RkRnVuY3Rpb24uY3BwOgorICAg
ICAgICAoSlNDOjpKU05hdGl2ZVN0ZEZ1bmN0aW9uOjp2aXNpdENoaWxkcmVuSW1wbCk6CisgICAg
ICAgIChKU0M6OkpTTmF0aXZlU3RkRnVuY3Rpb246OnZpc2l0Q2hpbGRyZW4pOiBEZWxldGVkLgor
ICAgICAgICAqIHJ1bnRpbWUvSlNOYXRpdmVTdGRGdW5jdGlvbi5oOgorICAgICAgICAqIHJ1bnRp
bWUvSlNPYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6bWFya0F1eGlsaWFyeUFu
ZFZpc2l0T3V0T2ZMaW5lUHJvcGVydGllcyk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojp2aXNp
dEJ1dHRlcmZseSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojp2aXNpdEJ1dHRlcmZseUltcGwp
OgorICAgICAgICAoSlNDOjpKU09iamVjdDo6dmlzaXRDaGlsZHJlbkltcGwpOgorICAgICAgICAo
SlNDOjpKU0ZpbmFsT2JqZWN0Ojp2aXNpdENoaWxkcmVuSW1wbCk6CisgICAgICAgIChKU0M6OkpT
T2JqZWN0Ojp2aXNpdENoaWxkcmVuKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SlNGaW5hbE9i
amVjdDo6dmlzaXRDaGlsZHJlbik6IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9KU09iamVj
dC5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNQcm9taXNlLmNwcDoKKyAgICAgICAgKEpTQzo6SlNQ
cm9taXNlOjp2aXNpdENoaWxkcmVuSW1wbCk6CisgICAgICAgIChKU0M6OkpTUHJvbWlzZTo6dmlz
aXRDaGlsZHJlbik6IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9KU1Byb21pc2UuaDoKKyAg
ICAgICAgKiBydW50aW1lL0pTUHJvcGVydHlOYW1lRW51bWVyYXRvci5jcHA6CisgICAgICAgIChK
U0M6OkpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6dmlzaXRDaGlsZHJlbkltcGwpOgorICAgICAg
ICAoSlNDOjpKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OnZpc2l0Q2hpbGRyZW4pOiBEZWxldGVk
LgorICAgICAgICAqIHJ1bnRpbWUvSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmg6CisgICAgICAg
ICogcnVudGltZS9KU1Byb3h5LmNwcDoKKyAgICAgICAgKEpTQzo6SlNQcm94eTo6dmlzaXRDaGls
ZHJlbkltcGwpOgorICAgICAgICAoSlNDOjpKU1Byb3h5Ojp2aXNpdENoaWxkcmVuKTogRGVsZXRl
ZC4KKyAgICAgICAgKiBydW50aW1lL0pTUHJveHkuaDoKKyAgICAgICAgKiBydW50aW1lL0pTU2Nv
cGUuY3BwOgorICAgICAgICAoSlNDOjpKU1Njb3BlOjp2aXNpdENoaWxkcmVuSW1wbCk6CisgICAg
ICAgIChKU0M6OkpTU2NvcGU6OnZpc2l0Q2hpbGRyZW4pOiBEZWxldGVkLgorICAgICAgICAqIHJ1
bnRpbWUvSlNTY29wZS5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9i
amVjdC5jcHA6CisgICAgICAgIChKU0M6OkpTU2VnbWVudGVkVmFyaWFibGVPYmplY3Q6OnZpc2l0
Q2hpbGRyZW5JbXBsKToKKyAgICAgICAgKEpTQzo6SlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdDo6
dmlzaXRDaGlsZHJlbik6IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9KU1NlZ21lbnRlZFZh
cmlhYmxlT2JqZWN0Lmg6CisgICAgICAgICogcnVudGltZS9KU1NldEl0ZXJhdG9yLmNwcDoKKyAg
ICAgICAgKEpTQzo6SlNTZXRJdGVyYXRvcjo6dmlzaXRDaGlsZHJlbkltcGwpOgorICAgICAgICAo
SlNDOjpKU1NldEl0ZXJhdG9yOjp2aXNpdENoaWxkcmVuKTogRGVsZXRlZC4KKyAgICAgICAgKiBy
dW50aW1lL0pTU2V0SXRlcmF0b3IuaDoKKyAgICAgICAgKiBydW50aW1lL0pTU3RyaW5nLmNwcDoK
KyAgICAgICAgKEpTQzo6SlNTdHJpbmc6OnZpc2l0Q2hpbGRyZW5JbXBsKToKKyAgICAgICAgKEpT
Qzo6SlNTdHJpbmc6OnZpc2l0Q2hpbGRyZW4pOiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUv
SlNTdHJpbmcuaDoKKyAgICAgICAgKiBydW50aW1lL0pTU3RyaW5nSXRlcmF0b3IuY3BwOgorICAg
ICAgICAoSlNDOjpKU1N0cmluZ0l0ZXJhdG9yOjp2aXNpdENoaWxkcmVuSW1wbCk6CisgICAgICAg
IChKU0M6OkpTU3RyaW5nSXRlcmF0b3I6OnZpc2l0Q2hpbGRyZW4pOiBEZWxldGVkLgorICAgICAg
ICAqIHJ1bnRpbWUvSlNTdHJpbmdJdGVyYXRvci5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNTeW1i
b2xUYWJsZU9iamVjdC5jcHA6CisgICAgICAgIChKU0M6OkpTU3ltYm9sVGFibGVPYmplY3Q6OnZp
c2l0Q2hpbGRyZW5JbXBsKToKKyAgICAgICAgKEpTQzo6SlNTeW1ib2xUYWJsZU9iamVjdDo6dmlz
aXRDaGlsZHJlbik6IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9KU1N5bWJvbFRhYmxlT2Jq
ZWN0Lmg6CisgICAgICAgICogcnVudGltZS9KU1dlYWtPYmplY3RSZWYuY3BwOgorICAgICAgICAo
SlNDOjpKU1dlYWtPYmplY3RSZWY6OnZpc2l0Q2hpbGRyZW5JbXBsKToKKyAgICAgICAgKEpTQzo6
SlNXZWFrT2JqZWN0UmVmOjp2aXNpdENoaWxkcmVuKTogRGVsZXRlZC4KKyAgICAgICAgKiBydW50
aW1lL0pTV2Vha09iamVjdFJlZi5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNXaXRoU2NvcGUuY3Bw
OgorICAgICAgICAoSlNDOjpKU1dpdGhTY29wZTo6dmlzaXRDaGlsZHJlbkltcGwpOgorICAgICAg
ICAoSlNDOjpKU1dpdGhTY29wZTo6dmlzaXRDaGlsZHJlbik6IERlbGV0ZWQuCisgICAgICAgICog
cnVudGltZS9KU1dpdGhTY29wZS5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNXcmFwcGVyT2JqZWN0
LmNwcDoKKyAgICAgICAgKEpTQzo6SlNXcmFwcGVyT2JqZWN0Ojp2aXNpdENoaWxkcmVuSW1wbCk6
CisgICAgICAgIChKU0M6OkpTV3JhcHBlck9iamVjdDo6dmlzaXRDaGlsZHJlbik6IERlbGV0ZWQu
CisgICAgICAgICogcnVudGltZS9KU1dyYXBwZXJPYmplY3QuaDoKKyAgICAgICAgKiBydW50aW1l
L0xhenlDbGFzc1N0cnVjdHVyZS5jcHA6CisgICAgICAgIChKU0M6OkxhenlDbGFzc1N0cnVjdHVy
ZTo6dmlzaXQpOgorICAgICAgICAqIHJ1bnRpbWUvTGF6eUNsYXNzU3RydWN0dXJlLmg6CisgICAg
ICAgICogcnVudGltZS9MYXp5UHJvcGVydHkuaDoKKyAgICAgICAgKiBydW50aW1lL0xhenlQcm9w
ZXJ0eUlubGluZXMuaDoKKyAgICAgICAgKEpTQzo6RWxlbWVudFR5cGU+Ojp2aXNpdCk6CisgICAg
ICAgICogcnVudGltZS9Nb2R1bGVQcm9ncmFtRXhlY3V0YWJsZS5jcHA6CisgICAgICAgIChKU0M6
Ok1vZHVsZVByb2dyYW1FeGVjdXRhYmxlOjp2aXNpdENoaWxkcmVuSW1wbCk6CisgICAgICAgIChK
U0M6Ok1vZHVsZVByb2dyYW1FeGVjdXRhYmxlOjp2aXNpdENoaWxkcmVuKTogRGVsZXRlZC4KKyAg
ICAgICAgKiBydW50aW1lL01vZHVsZVByb2dyYW1FeGVjdXRhYmxlLmg6CisgICAgICAgICogcnVu
dGltZS9PcHRpb25zLmNwcDoKKyAgICAgICAgKEpTQzo6T3B0aW9uczo6cmVjb21wdXRlRGVwZW5k
ZW50T3B0aW9ucyk6CisgICAgICAgICogcnVudGltZS9PcHRpb25zTGlzdC5oOgorICAgICAgICAq
IHJ1bnRpbWUvUHJvZ3JhbUV4ZWN1dGFibGUuY3BwOgorICAgICAgICAoSlNDOjpQcm9ncmFtRXhl
Y3V0YWJsZTo6dmlzaXRDaGlsZHJlbkltcGwpOgorICAgICAgICAoSlNDOjpQcm9ncmFtRXhlY3V0
YWJsZTo6dmlzaXRDaGlsZHJlbik6IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9Qcm9ncmFt
RXhlY3V0YWJsZS5oOgorICAgICAgICAqIHJ1bnRpbWUvUHJvcGVydHlNYXBIYXNoVGFibGUuaDoK
KyAgICAgICAgKiBydW50aW1lL1Byb3BlcnR5VGFibGUuY3BwOgorICAgICAgICAoSlNDOjpQcm9w
ZXJ0eVRhYmxlOjp2aXNpdENoaWxkcmVuSW1wbCk6CisgICAgICAgIChKU0M6OlByb3BlcnR5VGFi
bGU6OnZpc2l0Q2hpbGRyZW4pOiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvUHJveHlPYmpl
Y3QuY3BwOgorICAgICAgICAoSlNDOjpQcm94eU9iamVjdDo6dmlzaXRDaGlsZHJlbkltcGwpOgor
ICAgICAgICAoSlNDOjpQcm94eU9iamVjdDo6dmlzaXRDaGlsZHJlbik6IERlbGV0ZWQuCisgICAg
ICAgICogcnVudGltZS9Qcm94eU9iamVjdC5oOgorICAgICAgICAqIHJ1bnRpbWUvUHJveHlSZXZv
a2UuY3BwOgorICAgICAgICAoSlNDOjpQcm94eVJldm9rZTo6dmlzaXRDaGlsZHJlbkltcGwpOgor
ICAgICAgICAoSlNDOjpQcm94eVJldm9rZTo6dmlzaXRDaGlsZHJlbik6IERlbGV0ZWQuCisgICAg
ICAgICogcnVudGltZS9Qcm94eVJldm9rZS5oOgorICAgICAgICAqIHJ1bnRpbWUvUmVnRXhwQ2Fj
aGVkUmVzdWx0LmNwcDoKKyAgICAgICAgKEpTQzo6UmVnRXhwQ2FjaGVkUmVzdWx0Ojp2aXNpdEFn
Z3JlZ2F0ZUltcGwpOgorICAgICAgICAoSlNDOjpSZWdFeHBDYWNoZWRSZXN1bHQ6OnZpc2l0QWdn
cmVnYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKiBydW50aW1lL1JlZ0V4cENhY2hlZFJlc3VsdC5o
OgorICAgICAgICAqIHJ1bnRpbWUvUmVnRXhwR2xvYmFsRGF0YS5jcHA6CisgICAgICAgIChKU0M6
OlJlZ0V4cEdsb2JhbERhdGE6OnZpc2l0QWdncmVnYXRlSW1wbCk6CisgICAgICAgIChKU0M6OlJl
Z0V4cEdsb2JhbERhdGE6OnZpc2l0QWdncmVnYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKiBydW50
aW1lL1JlZ0V4cEdsb2JhbERhdGEuaDoKKyAgICAgICAgKiBydW50aW1lL1JlZ0V4cE9iamVjdC5j
cHA6CisgICAgICAgIChKU0M6OlJlZ0V4cE9iamVjdDo6dmlzaXRDaGlsZHJlbkltcGwpOgorICAg
ICAgICAoSlNDOjpSZWdFeHBPYmplY3Q6OnZpc2l0Q2hpbGRyZW4pOiBEZWxldGVkLgorICAgICAg
ICAqIHJ1bnRpbWUvUmVnRXhwT2JqZWN0Lmg6CisgICAgICAgICogcnVudGltZS9TYW1wbGluZ1By
b2ZpbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6U2FtcGxpbmdQcm9maWxlcjo6dmlzaXQpOgorICAg
ICAgICAqIHJ1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5oOgorICAgICAgICAqIHJ1bnRpbWUvU2Nv
cGVkQXJndW1lbnRzLmNwcDoKKyAgICAgICAgKEpTQzo6U2NvcGVkQXJndW1lbnRzOjp2aXNpdENo
aWxkcmVuSW1wbCk6CisgICAgICAgIChKU0M6OlNjb3BlZEFyZ3VtZW50czo6dmlzaXRDaGlsZHJl
bik6IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9TY29wZWRBcmd1bWVudHMuaDoKKyAgICAg
ICAgKiBydW50aW1lL1NpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKEpT
Qzo6U2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXI6OkpTQXJyYXlCdWZmZXJPd25lcjo6aXNSZWFj
aGFibGVGcm9tT3BhcXVlUm9vdHMpOgorICAgICAgICAqIHJ1bnRpbWUvU2ltcGxlVHlwZWRBcnJh
eUNvbnRyb2xsZXIuaDoKKyAgICAgICAgKiBydW50aW1lL1NtYWxsU3RyaW5ncy5jcHA6CisgICAg
ICAgIChKU0M6OlNtYWxsU3RyaW5nczo6dmlzaXRTdHJvbmdSZWZlcmVuY2VzKToKKyAgICAgICAg
KiBydW50aW1lL1NtYWxsU3RyaW5ncy5oOgorICAgICAgICAqIHJ1bnRpbWUvU3BhcnNlQXJyYXlW
YWx1ZU1hcC5jcHA6CisgICAgICAgIChKU0M6OlNwYXJzZUFycmF5VmFsdWVNYXA6OnZpc2l0Q2hp
bGRyZW5JbXBsKToKKyAgICAgICAgKEpTQzo6U3BhcnNlQXJyYXlWYWx1ZU1hcDo6dmlzaXRDaGls
ZHJlbik6IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9TcGFyc2VBcnJheVZhbHVlTWFwLmg6
CisgICAgICAgICogcnVudGltZS9TdGFja0ZyYW1lLmNwcDoKKyAgICAgICAgKEpTQzo6U3RhY2tG
cmFtZTo6dmlzaXRDaGlsZHJlbik6IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9TdGFja0Zy
YW1lLmg6CisgICAgICAgIChKU0M6OlN0YWNrRnJhbWU6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAg
ICAqIHJ1bnRpbWUvU3RydWN0dXJlLmNwcDoKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjp2aXNp
dENoaWxkcmVuSW1wbCk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6aXNDaGVhcER1cmluZ0dD
KToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjptYXJrSWZDaGVhcCk6CisgICAgICAgIChKU0M6
OlN0cnVjdHVyZTo6dmlzaXRDaGlsZHJlbik6IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9T
dHJ1Y3R1cmUuaDoKKyAgICAgICAgKiBydW50aW1lL1N0cnVjdHVyZUNoYWluLmNwcDoKKyAgICAg
ICAgKEpTQzo6U3RydWN0dXJlQ2hhaW46OnZpc2l0Q2hpbGRyZW5JbXBsKToKKyAgICAgICAgKEpT
Qzo6U3RydWN0dXJlQ2hhaW46OnZpc2l0Q2hpbGRyZW4pOiBEZWxldGVkLgorICAgICAgICAqIHJ1
bnRpbWUvU3RydWN0dXJlQ2hhaW4uaDoKKyAgICAgICAgKiBydW50aW1lL1N0cnVjdHVyZVJhcmVE
YXRhLmNwcDoKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlUmFyZURhdGE6OnZpc2l0Q2hpbGRyZW5J
bXBsKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlUmFyZURhdGE6OnZpc2l0Q2hpbGRyZW4pOiBE
ZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJlUmFyZURhdGEuaDoKKyAgICAgICAg
KiBydW50aW1lL1N5bWJvbFRhYmxlLmNwcDoKKyAgICAgICAgKEpTQzo6U3ltYm9sVGFibGU6OnZp
c2l0Q2hpbGRyZW5JbXBsKToKKyAgICAgICAgKEpTQzo6U3ltYm9sVGFibGU6OnZpc2l0Q2hpbGRy
ZW4pOiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvU3ltYm9sVGFibGUuaDoKKyAgICAgICAg
KiBydW50aW1lL1R5cGVQcm9maWxlckxvZy5jcHA6CisgICAgICAgIChKU0M6OlR5cGVQcm9maWxl
ckxvZzo6dmlzaXQpOgorICAgICAgICAqIHJ1bnRpbWUvVHlwZVByb2ZpbGVyTG9nLmg6CisgICAg
ICAgICogcnVudGltZS9WTS5oOgorICAgICAgICAoSlNDOjpWTTo6aXNBbmFseXppbmdIZWFwIGNv
bnN0KToKKyAgICAgICAgKEpTQzo6Vk06OmFjdGl2ZUhlYXBBbmFseXplciBjb25zdCk6CisgICAg
ICAgIChKU0M6OlZNOjpzZXRBY3RpdmVIZWFwQW5hbHl6ZXIpOgorICAgICAgICAqIHJ1bnRpbWUv
V2Vha01hcEltcGwuY3BwOgorICAgICAgICAoSlNDOjpXZWFrTWFwSW1wbDxXZWFrTWFwQnVja2V0
Pjo6dmlzaXRDaGlsZHJlbkltcGwpOgorICAgICAgICAoSlNDOjpXZWFrTWFwSW1wbDxXZWFrTWFw
QnVja2V0PFdlYWtNYXBCdWNrZXREYXRhS2V5Pj46OnZpc2l0T3V0cHV0Q29uc3RyYWludHMpOgor
ICAgICAgICAoSlNDOjpXZWFrTWFwSW1wbDxCdWNrZXRUeXBlPjo6dmlzaXRPdXRwdXRDb25zdHJh
aW50cyk6CisgICAgICAgIChKU0M6OldlYWtNYXBJbXBsPFdlYWtNYXBCdWNrZXQ+Ojp2aXNpdENo
aWxkcmVuKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V2Vha01hcEltcGw8V2Vha01hcEJ1Y2tl
dDxXZWFrTWFwQnVja2V0RGF0YUtleVZhbHVlPj46OnZpc2l0T3V0cHV0Q29uc3RyYWludHMpOiBE
ZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvV2Vha01hcEltcGwuaDoKKyAgICAgICAgKEpTQzo6
V2Vha01hcEJ1Y2tldDo6dmlzaXRBZ2dyZWdhdGUpOgorICAgICAgICAqIHRvb2xzL0pTRG9sbGFy
Vk0uY3BwOgorICAgICAgICAoSlNDOjpKU0RvbGxhclZNOjp2aXNpdENoaWxkcmVuSW1wbCk6Cisg
ICAgICAgIChKU0M6OkpTRG9sbGFyVk06OnZpc2l0Q2hpbGRyZW4pOiBEZWxldGVkLgorICAgICAg
ICAqIHRvb2xzL0pTRG9sbGFyVk0uaDoKKyAgICAgICAgKiB3YXNtL1dhc21HbG9iYWwuY3BwOgor
ICAgICAgICAoSlNDOjpXYXNtOjpHbG9iYWw6OnZpc2l0QWdncmVnYXRlSW1wbCk6CisgICAgICAg
IChKU0M6Oldhc206Okdsb2JhbDo6dmlzaXRBZ2dyZWdhdGUpOiBEZWxldGVkLgorICAgICAgICAq
IHdhc20vV2FzbUdsb2JhbC5oOgorICAgICAgICAqIHdhc20vV2FzbVRhYmxlLmNwcDoKKyAgICAg
ICAgKEpTQzo6V2FzbTo6VGFibGU6OnZpc2l0QWdncmVnYXRlSW1wbCk6CisgICAgICAgIChKU0M6
Oldhc206OlRhYmxlOjp2aXNpdEFnZ3JlZ2F0ZSk6IERlbGV0ZWQuCisgICAgICAgICogd2FzbS9X
YXNtVGFibGUuaDoKKyAgICAgICAgKiB3YXNtL2pzL0pTVG9XYXNtSUNDYWxsZWUuY3BwOgorICAg
ICAgICAoSlNDOjpKU1RvV2FzbUlDQ2FsbGVlOjp2aXNpdENoaWxkcmVuSW1wbCk6CisgICAgICAg
IChKU0M6OkpTVG9XYXNtSUNDYWxsZWU6OnZpc2l0Q2hpbGRyZW4pOiBEZWxldGVkLgorICAgICAg
ICAqIHdhc20vanMvSlNUb1dhc21JQ0NhbGxlZS5oOgorICAgICAgICAqIHdhc20vanMvSlNXZWJB
c3NlbWJseUNvZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlDb2RlQmxv
Y2s6OnZpc2l0Q2hpbGRyZW5JbXBsKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUNvZGVC
bG9jazo6dmlzaXRDaGlsZHJlbik6IERlbGV0ZWQuCisgICAgICAgICogd2FzbS9qcy9KU1dlYkFz
c2VtYmx5Q29kZUJsb2NrLmg6CisgICAgICAgICogd2FzbS9qcy9KU1dlYkFzc2VtYmx5R2xvYmFs
LmNwcDoKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUdsb2JhbDo6dmlzaXRDaGlsZHJlbklt
cGwpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5R2xvYmFsOjp2aXNpdENoaWxkcmVuKTog
RGVsZXRlZC4KKyAgICAgICAgKiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlHbG9iYWwuaDoKKyAgICAg
ICAgKiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5jcHA6CisgICAgICAgIChKU0M6OkpT
V2ViQXNzZW1ibHlJbnN0YW5jZTo6dmlzaXRDaGlsZHJlbkltcGwpOgorICAgICAgICAoSlNDOjpK
U1dlYkFzc2VtYmx5SW5zdGFuY2U6OnZpc2l0Q2hpbGRyZW4pOiBEZWxldGVkLgorICAgICAgICAq
IHdhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmg6CisgICAgICAgICogd2FzbS9qcy9KU1dl
YkFzc2VtYmx5TWVtb3J5LmNwcDoKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseU1lbW9yeTo6
dmlzaXRDaGlsZHJlbkltcGwpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5TWVtb3J5Ojp2
aXNpdENoaWxkcmVuKTogRGVsZXRlZC4KKyAgICAgICAgKiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlN
ZW1vcnkuaDoKKyAgICAgICAgKiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuY3BwOgorICAg
ICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5TW9kdWxlOjp2aXNpdENoaWxkcmVuSW1wbCk6CisgICAg
ICAgIChKU0M6OkpTV2ViQXNzZW1ibHlNb2R1bGU6OnZpc2l0Q2hpbGRyZW4pOiBEZWxldGVkLgor
ICAgICAgICAqIHdhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5oOgorICAgICAgICAqIHdhc20v
anMvSlNXZWJBc3NlbWJseVRhYmxlLmNwcDoKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseVRh
YmxlOjp2aXNpdENoaWxkcmVuSW1wbCk6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlUYWJs
ZTo6dmlzaXRDaGlsZHJlbik6IERlbGV0ZWQuCisgICAgICAgICogd2FzbS9qcy9KU1dlYkFzc2Vt
Ymx5VGFibGUuaDoKKyAgICAgICAgKiB3YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uY3BwOgor
ICAgICAgICAoSlNDOjpXZWJBc3NlbWJseUZ1bmN0aW9uOjp2aXNpdENoaWxkcmVuSW1wbCk6Cisg
ICAgICAgIChKU0M6OldlYkFzc2VtYmx5RnVuY3Rpb246OnZpc2l0Q2hpbGRyZW4pOiBEZWxldGVk
LgorICAgICAgICAqIHdhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5oOgorICAgICAgICAqIHdh
c20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbkJhc2UuY3BwOgorICAgICAgICAoSlNDOjpXZWJBc3Nl
bWJseUZ1bmN0aW9uQmFzZTo6dmlzaXRDaGlsZHJlbkltcGwpOgorICAgICAgICAoSlNDOjpXZWJB
c3NlbWJseUZ1bmN0aW9uQmFzZTo6dmlzaXRDaGlsZHJlbik6IERlbGV0ZWQuCisgICAgICAgICog
d2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uQmFzZS5oOgorICAgICAgICAqIHdhc20vanMvV2Vi
QXNzZW1ibHlNb2R1bGVSZWNvcmQuY3BwOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseU1vZHVs
ZVJlY29yZDo6dmlzaXRDaGlsZHJlbkltcGwpOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseU1v
ZHVsZVJlY29yZDo6dmlzaXRDaGlsZHJlbik6IERlbGV0ZWQuCisgICAgICAgICogd2FzbS9qcy9X
ZWJBc3NlbWJseU1vZHVsZVJlY29yZC5oOgorICAgICAgICAqIHdhc20vanMvV2ViQXNzZW1ibHlX
cmFwcGVyRnVuY3Rpb24uY3BwOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseVdyYXBwZXJGdW5j
dGlvbjo6dmlzaXRDaGlsZHJlbkltcGwpOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseVdyYXBw
ZXJGdW5jdGlvbjo6dmlzaXRDaGlsZHJlbik6IERlbGV0ZWQuCisgICAgICAgICogd2FzbS9qcy9X
ZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5oOgorCiAyMDIxLTAyLTE4ICBDYWlvIExpbWEgIDx0
aWNhaW9saW1hQGdtYWlsLmNvbT4KIAogICAgICAgICBbSlNDXSBJbXBsZW1lbnQgcHJpdmF0ZSBz
dGF0aWMgbWV0aG9kCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZp
c2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHdv
cmtpbmcgY29weSkKQEAgLTYxMyw2ICs2MTMsOCBAQCBzZXQoSmF2YVNjcmlwdENvcmVfUFJJVkFU
RV9GUkFNRVdPUktfSEVBCiAgICAgZG9taml0L0RPTUpJVEhlYXBSYW5nZS5oCiAgICAgZG9taml0
L0RPTUpJVFNpZ25hdHVyZS5oCiAKKyAgICBoZWFwL0Fic3RyYWN0U2xvdFZpc2l0b3IuaAorICAg
IGhlYXAvQWJzdHJhY3RTbG90VmlzaXRvcklubGluZXMuaAogICAgIGhlYXAvQWxpZ25lZE1lbW9y
eUFsbG9jYXRvci5oCiAgICAgaGVhcC9BbGxvY2F0aW9uRmFpbHVyZU1vZGUuaAogICAgIGhlYXAv
QWxsb2NhdG9yLmgKQEAgLTY3OCw2ICs2ODAsNyBAQCBzZXQoSmF2YVNjcmlwdENvcmVfUFJJVkFU
RV9GUkFNRVdPUktfSEVBCiAgICAgaGVhcC9NYXJrZWRCbG9ja1NldC5oCiAgICAgaGVhcC9NYXJr
ZWRTcGFjZS5oCiAgICAgaGVhcC9NYXJraW5nQ29uc3RyYWludC5oCisgICAgaGVhcC9NYXJraW5n
Q29uc3RyYWludEV4ZWN1dG9yUGFpci5oCiAgICAgaGVhcC9NdXRhdG9yU3RhdGUuaAogICAgIGhl
YXAvUGFja2VkQ2VsbFB0ci5oCiAgICAgaGVhcC9QcmVjaXNlQWxsb2NhdGlvbi5oCkBAIC02ODcs
MTIgKzY5MCwxNCBAQCBzZXQoSmF2YVNjcmlwdENvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVBCiAg
ICAgaGVhcC9TaW1wbGVNYXJraW5nQ29uc3RyYWludC5oCiAgICAgaGVhcC9TbG90VmlzaXRvci5o
CiAgICAgaGVhcC9TbG90VmlzaXRvcklubGluZXMuaAorICAgIGhlYXAvU2xvdFZpc2l0b3JNYWNy
b3MuaAogICAgIGhlYXAvU3Ryb25nLmgKICAgICBoZWFwL1N0cm9uZ0lubGluZXMuaAogICAgIGhl
YXAvU3Vic3BhY2UuaAogICAgIGhlYXAvU3Vic3BhY2VJbmxpbmVzLmgKICAgICBoZWFwL1N5bmNo
cm9ub3VzbmVzcy5oCiAgICAgaGVhcC9UaW55Qmxvb21GaWx0ZXIuaAorICAgIGhlYXAvVmVyaWZp
ZXJTbG90VmlzaXRvci5oCiAgICAgaGVhcC9WaXNpdFJhY2VLZXkuaAogICAgIGhlYXAvV2Vhay5o
CiAgICAgaGVhcC9XZWFrQmxvY2suaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJj
ZXMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAko
cmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CSh3
b3JraW5nIGNvcHkpCkBAIC01NjMsNiArNTYzLDcgQEAgaGVhcC9TdG9wSWZOZWNlc3NhcnlUaW1l
ci5jcHAKIGhlYXAvU3Vic3BhY2UuY3BwCiBoZWFwL1N5bmNocm9ub3VzU3RvcFRoZVdvcmxkTXV0
YXRvclNjaGVkdWxlci5jcHAKIGhlYXAvU3luY2hyb25vdXNuZXNzLmNwcAoraGVhcC9WZXJpZmll
clNsb3RWaXNpdG9yLmNwcAogaGVhcC9WaXNpdFJhY2VLZXkuY3BwCiBoZWFwL1dlYWsuY3BwCiBo
ZWFwL1dlYWtCbG9jay5jcHAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNBUElX
cmFwcGVyT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9K
U0FQSVdyYXBwZXJPYmplY3QuaAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL0FQSS9KU0FQSVdyYXBwZXJPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQxLDcg
KzQxLDcgQEAgcHVibGljOgogICAgIHN0YXRpYyB2b2lkIHN1YnNwYWNlRm9yKFZNJikgeyBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9CiAgICAgCiAgICAgdm9pZCBmaW5pc2hDcmVhdGlv
bihWTSYpOwotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgSlNDOjpTbG90
VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU5fV0lUSF9NT0RJRklFUihKU19F
WFBPUlRfUFJJVkFURSk7CiAgICAgCiAgICAgdm9pZCogd3JhcHBlZE9iamVjdCgpIHsgcmV0dXJu
IG1fd3JhcHBlZE9iamVjdDsgfQogICAgIHZvaWQgc2V0V3JhcHBlZE9iamVjdCh2b2lkKik7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQVBJV3JhcHBlck9iamVjdC5tbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQVBJV3JhcHBlck9iamVjdC5t
bQkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0FQSVdy
YXBwZXJPYmplY3QubW0JKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNyw3ICszNyw3IEBACiBjbGFzcyBK
U0FQSVdyYXBwZXJPYmplY3RIYW5kbGVPd25lciBmaW5hbCA6IHB1YmxpYyBKU0M6OldlYWtIYW5k
bGVPd25lciB7CiBwdWJsaWM6CiAgICAgdm9pZCBmaW5hbGl6ZShKU0M6OkhhbmRsZTxKU0M6OlVu
a25vd24+LCB2b2lkKikgZmluYWw7Ci0gICAgYm9vbCBpc1JlYWNoYWJsZUZyb21PcGFxdWVSb290
cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0LCBKU0M6OlNsb3RWaXNp
dG9yJiwgY29uc3QgY2hhcioqKSBmaW5hbDsKKyAgICBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1
ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6QWJz
dHJhY3RTbG90VmlzaXRvciYsIGNvbnN0IGNoYXIqKikgZmluYWw7CiB9OwogCiBzdGF0aWMgSlNB
UElXcmFwcGVyT2JqZWN0SGFuZGxlT3duZXIqIGpzQVBJV3JhcHBlck9iamVjdEhhbmRsZU93bmVy
KCkKQEAgLTU2LDE0ICs1NiwxNCBAQCB2b2lkIEpTQVBJV3JhcHBlck9iamVjdEhhbmRsZU93bmVy
OjpmaW5hCiAgICAgSlNDOjpXZWFrU2V0OjpkZWFsbG9jYXRlKEpTQzo6V2Vha0ltcGw6OmFzV2Vh
a0ltcGwoaGFuZGxlLnNsb3QoKSkpOwogfQogCi1ib29sIEpTQVBJV3JhcHBlck9iamVjdEhhbmRs
ZU93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25v
d24+IGhhbmRsZSwgdm9pZCosIEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIq
KikKK2Jvb2wgSlNBUElXcmFwcGVyT2JqZWN0SGFuZGxlT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9w
YXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgSlNDOjpB
YnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiopCiB7CiAgICAgSlNDOjpK
U0FQSVdyYXBwZXJPYmplY3QqIHdyYXBwZXJPYmplY3QgPSBKU0M6OmpzQ2FzdDxKU0M6OkpTQVBJ
V3JhcHBlck9iamVjdCo+KGhhbmRsZS5nZXQoKS5hc0NlbGwoKSk7CiAgICAgLy8gV2UgdXNlIHRo
ZSBKU0dsb2JhbE9iamVjdCB3aGVuIHByb2Nlc3Npbmcgd2VhayBoYW5kbGVzIHRvIHByZXZlbnQg
dGhlIHNpdHVhdGlvbiB3aGVyZSB1c2luZwogICAgIC8vIHRoZSBzYW1lIE9iamVjdGl2ZS1DIG9i
amVjdCBpbiBtdWx0aXBsZSBnbG9iYWwgb2JqZWN0cyBrZWVwcyBhbGwgb2YgdGhlIGdsb2JhbCBv
YmplY3RzIGFsaXZlLgogICAgIGlmICghd3JhcHBlck9iamVjdC0+d3JhcHBlZE9iamVjdCgpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIHZpc2l0b3Iudm0oKS5oZWFwLmlzTWFy
a2VkKHdyYXBwZXJPYmplY3QtPnN0cnVjdHVyZSgpLT5nbG9iYWxPYmplY3QoKSkgJiYgdmlzaXRv
ci5jb250YWluc09wYXF1ZVJvb3Qod3JhcHBlck9iamVjdC0+d3JhcHBlZE9iamVjdCgpKTsKKyAg
ICByZXR1cm4gdmlzaXRvci5pc01hcmtlZCh3cmFwcGVyT2JqZWN0LT5zdHJ1Y3R1cmUoKS0+Z2xv
YmFsT2JqZWN0KCkpICYmIHZpc2l0b3IuY29udGFpbnNPcGFxdWVSb290KHdyYXBwZXJPYmplY3Qt
PndyYXBwZWRPYmplY3QoKSk7CiB9CiAKIG5hbWVzcGFjZSBKU0MgewpAQCAtNzMsNiArNzMsOCBA
QCBzdGF0aWMgSlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElPTihjb25zdHJ1CiBzdGF0aWMgSlNDX0RF
Q0xBUkVfQ1VTVE9NX0dFVFRFUihjYWxsYmFja0dldHRlckpTQVBJV3JhcHBlck9iamVjdENhbGxi
YWNrT2JqZWN0KTsKIHN0YXRpYyBKU0NfREVDTEFSRV9DVVNUT01fR0VUVEVSKHN0YXRpY0Z1bmN0
aW9uR2V0dGVySlNBUElXcmFwcGVyT2JqZWN0Q2FsbGJhY2tPYmplY3QpOwogCitERUZJTkVfVklT
SVRfQ0hJTERSRU5fV0lUSF9NT0RJRklFUih0ZW1wbGF0ZTw+LCBKU0NhbGxiYWNrT2JqZWN0PEpT
QVBJV3JhcHBlck9iamVjdD4pOworCiB0ZW1wbGF0ZSA8PiBjb25zdCBDbGFzc0luZm8gSlNDYWxs
YmFja09iamVjdDxKU0FQSVdyYXBwZXJPYmplY3Q+OjpzX2luZm8gPSB7ICJKU0FQSVdyYXBwZXJP
YmplY3QiLCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RB
QkxFKEpTQ2FsbGJhY2tPYmplY3QpIH07CiB0ZW1wbGF0ZSA8PiBjb25zdCBib29sIEpTQ2FsbGJh
Y2tPYmplY3Q8SlNBUElXcmFwcGVyT2JqZWN0Pjo6bmVlZHNEZXN0cnVjdGlvbiA9IHRydWU7CiAK
QEAgLTEyMyw3ICsxMjUsOCBAQCB2b2lkIEpTQVBJV3JhcHBlck9iamVjdDo6c2V0V3JhcHBlZE9i
amVjCiAgICAgbV93cmFwcGVkT2JqZWN0ID0gW3N0YXRpY19jYXN0PGlkPih3cmFwcGVkT2JqZWN0
KSByZXRhaW5dOwogfQogCi12b2lkIEpTQVBJV3JhcHBlck9iamVjdDo6dmlzaXRDaGlsZHJlbihK
U0NlbGwqIGNlbGwsIEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBWaXNpdG9yPgordm9pZCBKU0FQSVdyYXBwZXJPYmplY3Q6OnZpc2l0Q2hpbGRyZW5JbXBsKEpT
Q2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU0FQSVdyYXBwZXJPYmplY3Qq
IHRoaXNPYmplY3QgPSBKU0M6OmpzQ2FzdDxKU0FQSVdyYXBwZXJPYmplY3QqPihjZWxsKTsKICAg
ICBCYXNlOjp2aXNpdENoaWxkcmVuKGNlbGwsIHZpc2l0b3IpOwpAQCAtMTMzLDYgKzEzNiw4IEBA
IHZvaWQgSlNBUElXcmFwcGVyT2JqZWN0Ojp2aXNpdENoaWxkcmVuKEoKICAgICAgICAgc2NhbkV4
dGVybmFsT2JqZWN0R3JhcGgodmlzaXRvci52bSgpLCB2aXNpdG9yLCB3cmFwcGVkT2JqZWN0KTsK
IH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOX1dJVEhfTU9ESUZJRVIoSlNfRVhQT1JUX1BSSVZB
VEUsIEpTQVBJV3JhcHBlck9iamVjdCk7CisKIHRlbXBsYXRlIDw+CiBJc29TdWJzcGFjZSogSlND
YWxsYmFja09iamVjdDxKU0FQSVdyYXBwZXJPYmplY3Q+OjpzdWJzcGFjZUZvckltcGwoVk0mIHZt
LCBTdWJzcGFjZUFjY2VzcyBtb2RlKQogewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQ
SS9KU0NhbGxiYWNrT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvQVBJL0pTQ2FsbGJhY2tPYmplY3QuY3BwCShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNi0yMDE3IEFwcGxlIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcgRXJpYyBTZWlk
ZWwgPGVyaWNAd2Via2l0Lm9yZz4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTQxLDYgKzQxLDkgQEAg
c3RhdGljIEpTQ19ERUNMQVJFX0NVU1RPTV9HRVRURVIoc3RhdGljRgogc3RhdGljIEpTQ19ERUNM
QVJFX0NVU1RPTV9HRVRURVIoY2FsbGJhY2tHZXR0ZXJKU0dsb2JhbE9iamVjdENhbGxiYWNrT2Jq
ZWN0KTsKIHN0YXRpYyBKU0NfREVDTEFSRV9DVVNUT01fR0VUVEVSKHN0YXRpY0Z1bmN0aW9uR2V0
dGVySlNHbG9iYWxPYmplY3RDYWxsYmFja09iamVjdCk7CiAKK0RFRklORV9WSVNJVF9DSElMRFJF
Tl9XSVRIX01PRElGSUVSKHRlbXBsYXRlPD4sIEpTQ2FsbGJhY2tPYmplY3Q8SlNOb25GaW5hbE9i
amVjdD4pOworREVGSU5FX1ZJU0lUX0NISUxEUkVOX1dJVEhfTU9ESUZJRVIodGVtcGxhdGU8Piwg
SlNDYWxsYmFja09iamVjdDxKU0dsb2JhbE9iamVjdD4pOworCiAvLyBEZWZpbmUgdGhlIHR3byB0
eXBlcyBvZiBKU0NhbGxiYWNrT2JqZWN0cyB3ZSBzdXBwb3J0LgogdGVtcGxhdGUgPD4gY29uc3Qg
Q2xhc3NJbmZvIEpTQ2FsbGJhY2tPYmplY3Q8SlNOb25GaW5hbE9iamVjdD46OnNfaW5mbyA9IHsg
IkNhbGxiYWNrT2JqZWN0IiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRF
X01FVEhPRF9UQUJMRShKU0NhbGxiYWNrT2JqZWN0KSB9OwogdGVtcGxhdGUgPD4gY29uc3QgQ2xh
c3NJbmZvIEpTQ2FsbGJhY2tPYmplY3Q8SlNHbG9iYWxPYmplY3Q+OjpzX2luZm8gPSB7ICJDYWxs
YmFja0dsb2JhbE9iamVjdCIsICZCYXNlOjpzX2luZm8sIG51bGxwdHIsIG51bGxwdHIsIENSRUFU
RV9NRVRIT0RfVEFCTEUoSlNDYWxsYmFja09iamVjdCkgfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdC5oCShyZXZpc2lvbiAyNzMxMTkpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3QuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcgRXJpYyBT
ZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTY5LDcgKzY5LDEw
IEBAIHB1YmxpYzoKICAgICAgICAgbV9wcml2YXRlUHJvcGVydGllcy0+ZGVsZXRlUHJpdmF0ZVBy
b3BlcnR5KHByb3BlcnR5TmFtZSk7CiAgICAgfQogCi0gICAgdm9pZCB2aXNpdENoaWxkcmVuKFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQorICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CisKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgorICAgIHZvaWQgdmlzaXRDaGlsZHJlbihWaXNpdG9y
JiB2aXNpdG9yKQogICAgIHsKICAgICAgICAgSlNQcml2YXRlUHJvcGVydHlNYXAqIHByb3BlcnRp
ZXMgPSBtX3ByaXZhdGVQcm9wZXJ0aWVzLmdldCgpOwogICAgICAgICBpZiAoIXByb3BlcnRpZXMp
CkBAIC0xMDMsNyArMTA2LDggQEAgcHVibGljOgogICAgICAgICAgICAgbV9wcm9wZXJ0eU1hcC5y
ZW1vdmUocHJvcGVydHlOYW1lLmltcGwoKSk7CiAgICAgICAgIH0KIAotICAgICAgICB2b2lkIHZp
c2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisgICAgICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFZpc2l0b3I+CisgICAgICAgIHZvaWQgdmlzaXRDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9y
KQogICAgICAgICB7CiAgICAgICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2xvY2spOwogICAg
ICAgICAgICAgZm9yIChhdXRvJiBwYWlyIDogbV9wcm9wZXJ0eU1hcCkgewpAQCAtMjE2LDEzICsy
MjAsNyBAQCBwcml2YXRlOgogICAgIHN0YXRpYyBDYWxsRGF0YSBnZXRDb25zdHJ1Y3REYXRhKEpT
Q2VsbCopOwogICAgIHN0YXRpYyBDYWxsRGF0YSBnZXRDYWxsRGF0YShKU0NlbGwqKTsKIAotICAg
IHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlz
aXRvcikKLSAgICB7Ci0gICAgICAgIEpTQ2FsbGJhY2tPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nh
c3Q8SlNDYWxsYmFja09iamVjdCo+KGNlbGwpOwotICAgICAgICBBU1NFUlRfR0NfT0JKRUNUX0lO
SEVSSVRTKChzdGF0aWNfY2FzdDxQYXJlbnQqPih0aGlzT2JqZWN0KSksIEpTQ2FsbGJhY2tPYmpl
Y3Q8UGFyZW50Pjo6aW5mbygpKTsKLSAgICAgICAgUGFyZW50Ojp2aXNpdENoaWxkcmVuKHRoaXNP
YmplY3QsIHZpc2l0b3IpOwotICAgICAgICB0aGlzT2JqZWN0LT5tX2NhbGxiYWNrT2JqZWN0RGF0
YS0+dmlzaXRDaGlsZHJlbih2aXNpdG9yKTsKLSAgICB9CisgICAgREVDTEFSRV9WSVNJVF9DSElM
RFJFTjsKIAogICAgIHZvaWQgaW5pdChKU0dsb2JhbE9iamVjdCopOwogIApAQCAtMjQzLDYgKzI0
MSwxNiBAQCBwcml2YXRlOgogICAgIGNvbnN0IENsYXNzSW5mbyogbV9jbGFzc0luZm8geyBudWxs
cHRyIH07CiB9OwogCit0ZW1wbGF0ZSA8Y2xhc3MgUGFyZW50PgordGVtcGxhdGU8dHlwZW5hbWUg
VmlzaXRvcj4KK3ZvaWQgSlNDYWxsYmFja09iamVjdDxQYXJlbnQ+Ojp2aXNpdENoaWxkcmVuSW1w
bChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgSlNDYWxsYmFja09iamVj
dCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0NhbGxiYWNrT2JqZWN0Kj4oY2VsbCk7CisgICAgQVNT
RVJUX0dDX09CSkVDVF9JTkhFUklUUygoc3RhdGljX2Nhc3Q8UGFyZW50Kj4odGhpc09iamVjdCkp
LCBKU0NhbGxiYWNrT2JqZWN0PFBhcmVudD46OmluZm8oKSk7CisgICAgUGFyZW50Ojp2aXNpdENo
aWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOworICAgIHRoaXNPYmplY3QtPm1fY2FsbGJhY2tP
YmplY3REYXRhLT52aXNpdENoaWxkcmVuKHZpc2l0b3IpOworfQorCiB9IC8vIG5hbWVzcGFjZSBK
U0MKIAogLy8gaW5jbHVkZSB0aGUgYWN0dWFsIHRlbXBsYXRlIGNsYXNzIGltcGxlbWVudGF0aW9u
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTTWFuYWdlZFZhbHVlLm1tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNNYW5hZ2VkVmFsdWUubW0JKHJl
dmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNNYW5hZ2VkVmFs
dWUubW0JKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDEzLCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDMsNyArNDMsNyBAQAogY2xhc3MgSlNNYW5hZ2Vk
VmFsdWVIYW5kbGVPd25lciBmaW5hbCA6IHB1YmxpYyBKU0M6OldlYWtIYW5kbGVPd25lciB7CiBw
dWJsaWM6CiAgICAgdm9pZCBmaW5hbGl6ZShKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lk
KiBjb250ZXh0KSBmaW5hbDsKLSAgICBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpT
Qzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6U2xvdFZpc2l0b3Im
LCBjb25zdCBjaGFyKiopIGZpbmFsOworICAgIGJvb2wgaXNSZWFjaGFibGVGcm9tT3BhcXVlUm9v
dHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCwgSlNDOjpBYnN0cmFj
dFNsb3RWaXNpdG9yJiwgY29uc3QgY2hhcioqKSBmaW5hbDsKIH07CiAKIHN0YXRpYyBKU01hbmFn
ZWRWYWx1ZUhhbmRsZU93bmVyJiBtYW5hZ2VkVmFsdWVIYW5kbGVPd25lcigpCkBAIC0xNzksNyAr
MTc5LDcgQEAgQGludGVyZmFjZSBKU01hbmFnZWRWYWx1ZSAoUHJpdmF0ZU1ldGhvZAogLSAodm9p
ZClkaXNjb25uZWN0VmFsdWU7CiBAZW5kCiAKLWJvb2wgSlNNYW5hZ2VkVmFsdWVIYW5kbGVPd25l
cjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwg
dm9pZCogY29udGV4dCwgSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJl
YXNvbikKK2Jvb2wgSlNNYW5hZ2VkVmFsdWVIYW5kbGVPd25lcjo6aXNSZWFjaGFibGVGcm9tT3Bh
cXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCwgSlNDOjpB
YnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQogewogICAg
IGlmIChVTkxJS0VMWShyZWFzb24pKQogICAgICAgICAqcmVhc29uID0gIkpTTWFuYWdlZFZhbHVl
IGlzIG9wYXF1ZSByb290IjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNNYXJr
aW5nQ29uc3RyYWludFByaXZhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9BUEkvSlNNYXJraW5nQ29uc3RyYWludFByaXZhdGUuY3BwCShyZXZpc2lvbiAyNzMxMTkp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTTWFya2luZ0NvbnN0cmFpbnRQcml2YXRl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsNyBAQCBuYW1lc3BhY2UgewogQXRvbWlj
PHVuc2lnbmVkPiBjb25zdHJhaW50Q291bnRlcjsKIAogc3RydWN0IE1hcmtlciA6IEpTTWFya2Vy
IHsKLSAgICBTbG90VmlzaXRvciogdmlzaXRvcjsKKyAgICBBYnN0cmFjdFNsb3RWaXNpdG9yKiB2
aXNpdG9yOwogfTsKIAogYm9vbCBpc01hcmtlZChKU01hcmtlclJlZiBtYXJrZXJSZWYsIEpTT2Jq
ZWN0UmVmIG9iamVjdFJlZikKQEAgLTQ0LDcgKzQ0LDcgQEAgYm9vbCBpc01hcmtlZChKU01hcmtl
clJlZiBtYXJrZXJSZWYsIEpTTwogICAgIGlmICghb2JqZWN0UmVmKQogICAgICAgICByZXR1cm4g
dHJ1ZTsgLy8gTnVsbCBpcyBhbiBpbW1vcnRhbCBvYmplY3QuCiAgICAgCi0gICAgcmV0dXJuIHN0
YXRpY19jYXN0PE1hcmtlcio+KG1hcmtlclJlZiktPnZpc2l0b3ItPnZtKCkuaGVhcC5pc01hcmtl
ZCh0b0pTKG9iamVjdFJlZikpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxNYXJrZXIqPihtYXJr
ZXJSZWYpLT52aXNpdG9yLT5pc01hcmtlZCh0b0pTKG9iamVjdFJlZikpOwogfQogCiB2b2lkIG1h
cmsoSlNNYXJrZXJSZWYgbWFya2VyUmVmLCBKU09iamVjdFJlZiBvYmplY3RSZWYpCkBAIC03Mywx
NCArNzMsMTQgQEAgdm9pZCBKU0NvbnRleHRHcm91cEFkZE1hcmtpbmdDb25zdHJhaW50KAogICAg
IGF1dG8gY29uc3RyYWludCA9IG1ha2VVbmlxdWU8U2ltcGxlTWFya2luZ0NvbnN0cmFpbnQ+KAog
ICAgICAgICB0b0NTdHJpbmcoIkFtYyIsIGNvbnN0cmFpbnRJbmRleCwgIigiLCBSYXdQb2ludGVy
KGJpdHdpc2VfY2FzdDx2b2lkKj4oY29uc3RyYWludENhbGxiYWNrKSksICIpIiksCiAgICAgICAg
IHRvQ1N0cmluZygiQVBJIE1hcmtpbmcgQ29uc3RyYWludCAjIiwgY29uc3RyYWludEluZGV4LCAi
ICgiLCBSYXdQb2ludGVyKGJpdHdpc2VfY2FzdDx2b2lkKj4oY29uc3RyYWludENhbGxiYWNrKSks
ICIsICIsIFJhd1BvaW50ZXIodXNlckRhdGEpLCAiKSIpLAotICAgICAgICBbY29uc3RyYWludENh
bGxiYWNrLCB1c2VyRGF0YV0gKFNsb3RWaXNpdG9yJiB2aXNpdG9yKSB7CisgICAgICAgIE1BS0Vf
TUFSS0lOR19DT05TVFJBSU5UX0VYRUNVVE9SX1BBSVIoKFtjb25zdHJhaW50Q2FsbGJhY2ssIHVz
ZXJEYXRhXSAoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikgewogICAgICAgICAgICAgTWFy
a2VyIG1hcmtlcjsKICAgICAgICAgICAgIG1hcmtlci5Jc01hcmtlZCA9IGlzTWFya2VkOwogICAg
ICAgICAgICAgbWFya2VyLk1hcmsgPSBtYXJrOwogICAgICAgICAgICAgbWFya2VyLnZpc2l0b3Ig
PSAmdmlzaXRvcjsKICAgICAgICAgICAgIAogICAgICAgICAgICAgY29uc3RyYWludENhbGxiYWNr
KCZtYXJrZXIsIHVzZXJEYXRhKTsKLSAgICAgICAgfSwKKyAgICAgICAgfSkpLAogICAgICAgICB2
b2xhdGlsaXR5LAogICAgICAgICBDb25zdHJhaW50Q29uY3VycmVuY3k6OlNlcXVlbnRpYWwpOwog
ICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1ZpcnR1YWxNYWNoaW5lLm1t
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWaXJ0dWFsTWFjaGlu
ZS5tbQkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1Zp
cnR1YWxNYWNoaW5lLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzEyLDcgKzMxMiw3IEBAICsgKHZv
aWQpc2V0Q3Jhc2hPblZNQ3JlYXRpb246KEJPT0wpc2hvdWwKIAogQGVuZAogCi1zdGF0aWMgdm9p
ZCBzY2FuRXh0ZXJuYWxPYmplY3RHcmFwaChKU0M6OlZNJiB2bSwgSlNDOjpTbG90VmlzaXRvciYg
dmlzaXRvciwgdm9pZCogcm9vdCwgYm9vbCBsb2NrQWNxdWlyZWQpCitzdGF0aWMgdm9pZCBzY2Fu
RXh0ZXJuYWxPYmplY3RHcmFwaChKU0M6OlZNJiB2bSwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9y
JiB2aXNpdG9yLCB2b2lkKiByb290LCBib29sIGxvY2tBY3F1aXJlZCkKIHsKICAgICBAYXV0b3Jl
bGVhc2Vwb29sIHsKICAgICAgICAgSlNWaXJ0dWFsTWFjaGluZSAqdmlydHVhbE1hY2hpbmUgPSBb
SlNWTVdyYXBwZXJDYWNoZSB3cmFwcGVyRm9ySlNDb250ZXh0R3JvdXBSZWY6dG9SZWYoJnZtKV07
CkBAIC0zNDQsMTMgKzM0NCwxMyBAQCBzdGF0aWMgdm9pZCBzY2FuRXh0ZXJuYWxPYmplY3RHcmFw
aChKU0M6CiAgICAgfQogfQogCi12b2lkIHNjYW5FeHRlcm5hbE9iamVjdEdyYXBoKEpTQzo6Vk0m
IHZtLCBKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yLCB2b2lkKiByb290KQordm9pZCBzY2FuRXh0
ZXJuYWxPYmplY3RHcmFwaChKU0M6OlZNJiB2bSwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiB2
aXNpdG9yLCB2b2lkKiByb290KQogewogICAgIGJvb2wgbG9ja0FjcXVpcmVkID0gZmFsc2U7CiAg
ICAgc2NhbkV4dGVybmFsT2JqZWN0R3JhcGgodm0sIHZpc2l0b3IsIHJvb3QsIGxvY2tBY3F1aXJl
ZCk7CiB9CiAKLXZvaWQgc2NhbkV4dGVybmFsUmVtZW1iZXJlZFNldChKU0M6OlZNJiB2bSwgSlND
OjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgc2NhbkV4dGVybmFsUmVtZW1iZXJlZFNldChK
U0M6OlZNJiB2bSwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEBh
dXRvcmVsZWFzZXBvb2wgewogICAgICAgICBKU1ZpcnR1YWxNYWNoaW5lICp2aXJ0dWFsTWFjaGlu
ZSA9IFtKU1ZNV3JhcHBlckNhY2hlIHdyYXBwZXJGb3JKU0NvbnRleHRHcm91cFJlZjp0b1JlZigm
dm0pXTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWaXJ0dWFsTWFjaGluZUlu
dGVybmFsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1ZpcnR1
YWxNYWNoaW5lSW50ZXJuYWwuaAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL0FQSS9KU1ZpcnR1YWxNYWNoaW5lSW50ZXJuYWwuaAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTcgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0zMiw3ICszMiw3IEBACiAKIG5hbWVzcGFjZSBKU0MgewogY2xhc3MgVk07Ci1jbGFzcyBTbG90
VmlzaXRvcjsKK2NsYXNzIEFic3RyYWN0U2xvdFZpc2l0b3I7CiB9CiAKICNpZiBkZWZpbmVkKF9f
T0JKQ19fKQpAQCAtNTQsOCArNTQsOCBAQCBKU0NvbnRleHRHcm91cFJlZiBnZXRHcm91cEZyb21W
aXJ0dWFsTWFjCiAKICNlbmRpZiAvLyBkZWZpbmVkKF9fT0JKQ19fKQogCi12b2lkIHNjYW5FeHRl
cm5hbE9iamVjdEdyYXBoKEpTQzo6Vk0mLCBKU0M6OlNsb3RWaXNpdG9yJiwgdm9pZCogcm9vdCk7
Ci12b2lkIHNjYW5FeHRlcm5hbFJlbWVtYmVyZWRTZXQoSlNDOjpWTSYsIEpTQzo6U2xvdFZpc2l0
b3ImKTsKK3ZvaWQgc2NhbkV4dGVybmFsT2JqZWN0R3JhcGgoSlNDOjpWTSYsIEpTQzo6QWJzdHJh
Y3RTbG90VmlzaXRvciYsIHZvaWQqIHJvb3QpOwordm9pZCBzY2FuRXh0ZXJuYWxSZW1lbWJlcmVk
U2V0KEpTQzo6Vk0mLCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKTsKIAogI2VuZGlmIC8vIEpT
Q19PQkpDX0FQSV9FTkFCTEVECiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvTWFy
a2VkSlNWYWx1ZVJlZkFycmF5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvQVBJL01hcmtlZEpTVmFsdWVSZWZBcnJheS5jcHAJKHJldmlzaW9uIDI3MzExOSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvTWFya2VkSlNWYWx1ZVJlZkFycmF5LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIwLTIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC00Niw3ICs0Niw4IEBAIE1hcmtlZEpTVmFsdWVSZWZBcnJheTo6fk1hcmtlZEpTVmFs
dWVSZWYKICAgICAgICAgcmVtb3ZlKCk7CiB9CiAKLXZvaWQgTWFya2VkSlNWYWx1ZVJlZkFycmF5
Ojp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1l
IFZpc2l0b3I+Cit2b2lkIE1hcmtlZEpTVmFsdWVSZWZBcnJheTo6dmlzaXRBZ2dyZWdhdGUoVmlz
aXRvciYgdmlzaXRvcikKIHsKICAgICBKU1ZhbHVlUmVmKiBidWZmZXIgPSBkYXRhKCk7CiAgICAg
Zm9yICh1bnNpZ25lZCBpbmRleCA9IDA7IGluZGV4IDwgbV9zaXplOyArK2luZGV4KSB7CkBAIC02
Miw0ICs2Myw3IEBAIHZvaWQgTWFya2VkSlNWYWx1ZVJlZkFycmF5Ojp2aXNpdEFnZ3JlZ2EKICAg
ICB9CiB9CiAKK3RlbXBsYXRlIHZvaWQgTWFya2VkSlNWYWx1ZVJlZkFycmF5Ojp2aXNpdEFnZ3Jl
Z2F0ZShBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIE1hcmtlZEpTVmFsdWVS
ZWZBcnJheTo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImKTsKKwogfSAvLyBuYW1lc3BhY2Ug
SlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL01hcmtlZEpTVmFsdWVSZWZBcnJh
eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvTWFya2VkSlNWYWx1
ZVJlZkFycmF5LmgJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9B
UEkvTWFya2VkSlNWYWx1ZVJlZkFycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjIsNyArNjIsNyBAQCBw
dWJsaWM6CiAgICAgICAgIHJldHVybiBtX2lubGluZUJ1ZmZlcjsKICAgICB9CiAKLSAgICB2b2lk
IHZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlz
aXRvcj4gdm9pZCB2aXNpdEFnZ3JlZ2F0ZShWaXNpdG9yJik7CiAKIHByaXZhdGU6CiAgICAgdW5z
aWduZWQgbV9zaXplOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQVBJ
V3JhcHBlckdsb2JhbE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL0FQSS9nbGliL0pTQVBJV3JhcHBlckdsb2JhbE9iamVjdC5jcHAJKHJldmlzaW9uIDI3MzEx
OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0FQSVdyYXBwZXJHbG9iYWxP
YmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OSw2ICs1OSw4IEBAIHN0YXRpYyBKU0NfREVD
TEFSRV9IT1NUX0ZVTkNUSU9OKGNvbnN0cnUKIHN0YXRpYyBKU0NfREVDTEFSRV9DVVNUT01fR0VU
VEVSKGNhbGxiYWNrR2V0dGVySlNBUElXcmFwcGVyR2xvYmFsT2JqZWN0Q2FsbGJhY2tPYmplY3Qp
Owogc3RhdGljIEpTQ19ERUNMQVJFX0NVU1RPTV9HRVRURVIoc3RhdGljRnVuY3Rpb25HZXR0ZXJK
U0FQSVdyYXBwZXJHbG9iYWxPYmplY3RDYWxsYmFja09iamVjdCk7CiAKK0RFRklORV9WSVNJVF9D
SElMRFJFTl9XSVRIX01PRElGSUVSKHRlbXBsYXRlPD4sIEpTQ2FsbGJhY2tPYmplY3Q8SlNBUElX
cmFwcGVyR2xvYmFsT2JqZWN0Pik7CisKIHRlbXBsYXRlIDw+IGNvbnN0IENsYXNzSW5mbyBKU0Nh
bGxiYWNrT2JqZWN0PEpTQVBJV3JhcHBlckdsb2JhbE9iamVjdD46OnNfaW5mbyA9IHsgIkpTQVBJ
V3JhcHBlckdsb2JhbE9iamVjdCIsICZCYXNlOjpzX2luZm8sIG51bGxwdHIsIG51bGxwdHIsIENS
RUFURV9NRVRIT0RfVEFCTEUoSlNDYWxsYmFja09iamVjdCkgfTsKIHRlbXBsYXRlPD4gY29uc3Qg
Ym9vbCBKU0NhbGxiYWNrT2JqZWN0PEpTQVBJV3JhcHBlckdsb2JhbE9iamVjdD46Om5lZWRzRGVz
dHJ1Y3Rpb24gPSB0cnVlOwogCkBAIC0xNDQsOSArMTQ2LDQgQEAgdm9pZCBKU0FQSVdyYXBwZXJH
bG9iYWxPYmplY3Q6OmZpbmlzaENyZQogICAgIFdlYWtTZXQ6OmFsbG9jYXRlKHRoaXMsIGpzQVBJ
V3JhcHBlckdsb2JhbE9iamVjdEhhbmRsZU93bmVyKCksIDApOyAvLyBCYWxhbmNlZCBpbiBKU0FQ
SVdyYXBwZXJHbG9iYWxPYmplY3RIYW5kbGVPd25lcjo6ZmluYWxpemUuCiB9CiAKLXZvaWQgSlNB
UElXcmFwcGVyR2xvYmFsT2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgSlNDOjpT
bG90VmlzaXRvciYgdmlzaXRvcikKLXsKLSAgICBCYXNlOjp2aXNpdENoaWxkcmVuKGNlbGwsIHZp
c2l0b3IpOwotfQotCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9BUEkvZ2xpYi9KU0FQSVdyYXBwZXJHbG9iYWxPYmplY3QuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNBUElXcmFwcGVyR2xvYmFsT2JqZWN0LmgJ
KHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0FQ
SVdyYXBwZXJHbG9iYWxPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMzksNyArMzksNiBAQCBw
dWJsaWM6CiAgICAgc3RhdGljIHZvaWQgc3Vic3BhY2VGb3IoVk0mKSB7IFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7IH0KIAogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKLSAgICBz
dGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKTsKIAog
ICAgIEpTQ0dMaWJXcmFwcGVyT2JqZWN0KiB3cmFwcGVkT2JqZWN0KCkgY29uc3QgeyByZXR1cm4g
bV93cmFwcGVkT2JqZWN0OyB9CiAgICAgdm9pZCBzZXRXcmFwcGVkT2JqZWN0KEpTQ0dMaWJXcmFw
cGVyT2JqZWN0KiB3cmFwcGVkT2JqZWN0KSB7IG1fd3JhcHBlZE9iamVjdCA9IHdyYXBwZWRPYmpl
Y3Q7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0FQSVdyYXBwZXJP
YmplY3RHTGliLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2ds
aWIvSlNBUElXcmFwcGVyT2JqZWN0R0xpYi5jcHAJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0FQSVdyYXBwZXJPYmplY3RHTGliLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1
ZGUgIkpTQVBJV3JhcHBlck9iamVjdC5oIgogCisjaW5jbHVkZSAiQWJzdHJhY3RTbG90VmlzaXRv
ci5oIgogI2luY2x1ZGUgIkpTQ0dMaWJXcmFwcGVyT2JqZWN0LmgiCiAjaW5jbHVkZSAiSlNDSW5s
aW5lcy5oIgogI2luY2x1ZGUgIkpTQ2FsbGJhY2tPYmplY3QuaCIKQEAgLTM2LDcgKzM3LDcgQEAK
IGNsYXNzIEpTQVBJV3JhcHBlck9iamVjdEhhbmRsZU93bmVyIGZpbmFsIDogcHVibGljIEpTQzo6
V2Vha0hhbmRsZU93bmVyIHsKIHB1YmxpYzoKICAgICB2b2lkIGZpbmFsaXplKEpTQzo6SGFuZGxl
PEpTQzo6VW5rbm93bj4sIHZvaWQqKSBmaW5hbDsKLSAgICBib29sIGlzUmVhY2hhYmxlRnJvbU9w
YXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6
U2xvdFZpc2l0b3ImLCBjb25zdCBjaGFyKiopIGZpbmFsOworICAgIGJvb2wgaXNSZWFjaGFibGVG
cm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCwg
SlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiwgY29uc3QgY2hhcioqKSBmaW5hbDsKIH07CiAKIHN0
YXRpYyBKU0FQSVdyYXBwZXJPYmplY3RIYW5kbGVPd25lcioganNBUElXcmFwcGVyT2JqZWN0SGFu
ZGxlT3duZXIoKQpAQCAtNTUsNyArNTYsNyBAQCB2b2lkIEpTQVBJV3JhcHBlck9iamVjdEhhbmRs
ZU93bmVyOjpmaW5hCiAgICAgSlNDOjpXZWFrU2V0OjpkZWFsbG9jYXRlKEpTQzo6V2Vha0ltcGw6
OmFzV2Vha0ltcGwoaGFuZGxlLnNsb3QoKSkpOwogfQogCi1ib29sIEpTQVBJV3JhcHBlck9iamVj
dEhhbmRsZU93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6
OlVua25vd24+IGhhbmRsZSwgdm9pZCosIEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0
IGNoYXIqKikKK2Jvb2wgSlNBUElXcmFwcGVyT2JqZWN0SGFuZGxlT3duZXI6OmlzUmVhY2hhYmxl
RnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwg
SlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiopCiB7CiAgICAg
SlNDOjpKU0FQSVdyYXBwZXJPYmplY3QqIHdyYXBwZXJPYmplY3QgPSBKU0M6OmpzQ2FzdDxKU0M6
OkpTQVBJV3JhcHBlck9iamVjdCo+KGhhbmRsZS5nZXQoKS5hc0NlbGwoKSk7CiAgICAgLy8gV2Ug
dXNlIHRoZSBKU0dsb2JhbE9iamVjdCB3aGVuIHByb2Nlc3Npbmcgd2VhayBoYW5kbGVzIHRvIHBy
ZXZlbnQgdGhlIHNpdHVhdGlvbiB3aGVyZSB1c2luZwpAQCAtNzIsNiArNzMsOCBAQCBzdGF0aWMg
SlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElPTihjb25zdHJ1CiBzdGF0aWMgSlNDX0RFQ0xBUkVfQ1VT
VE9NX0dFVFRFUihjYWxsYmFja0dldHRlckpTQVBJV3JhcHBlck9iamVjdENhbGxiYWNrT2JqZWN0
KTsKIHN0YXRpYyBKU0NfREVDTEFSRV9DVVNUT01fR0VUVEVSKHN0YXRpY0Z1bmN0aW9uR2V0dGVy
SlNBUElXcmFwcGVyT2JqZWN0Q2FsbGJhY2tPYmplY3QpOwogCitERUZJTkVfVklTSVRfQ0hJTERS
RU5fV0lUSF9NT0RJRklFUih0ZW1wbGF0ZTw+LCBKU0NhbGxiYWNrT2JqZWN0PEpTQVBJV3JhcHBl
ck9iamVjdD4pOworCiB0ZW1wbGF0ZSA8PiBjb25zdCBDbGFzc0luZm8gSlNDYWxsYmFja09iamVj
dDxKU0FQSVdyYXBwZXJPYmplY3Q+OjpzX2luZm8gPSB7ICJKU0FQSVdyYXBwZXJPYmplY3QiLCAm
QmFzZTo6c19pbmZvLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTQ2Fs
bGJhY2tPYmplY3QpIH07CiB0ZW1wbGF0ZTw+IGNvbnN0IGJvb2wgSlNDYWxsYmFja09iamVjdDxK
U0FQSVdyYXBwZXJPYmplY3Q+OjpuZWVkc0Rlc3RydWN0aW9uID0gdHJ1ZTsKIApAQCAtMTU1LDkg
KzE1OCwxMiBAQCB2b2lkIEpTQVBJV3JhcHBlck9iamVjdDo6c2V0V3JhcHBlZE9iamVjCiAgICAg
bV93cmFwcGVkT2JqZWN0ID0gd3JhcHBlZE9iamVjdDsKIH0KIAotdm9pZCBKU0FQSVdyYXBwZXJP
YmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBKU0M6OlNsb3RWaXNpdG9yJiB2aXNp
dG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNBUElXcmFwcGVyT2JqZWN0
Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAg
ICAgQmFzZTo6dmlzaXRDaGlsZHJlbihjZWxsLCB2aXNpdG9yKTsKIH0KIAorREVGSU5FX1ZJU0lU
X0NISUxEUkVOX1dJVEhfTU9ESUZJRVIoSlNfRVhQT1JUX1BSSVZBVEUsIEpTQVBJV3JhcHBlck9i
amVjdCk7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xMTU4
LDYgKzExNTgsNyBAQAogCQk2NUI4MzkyRTFCQUNBRDM2MDA0NEU4MjQgLyogQ2FjaGVkUmVjb3Zl
cnkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1Qjgz
OTJDMUJBQ0E5MkEwMDQ0RTgyNCAvKiBDYWNoZWRSZWNvdmVyeS5oICovOyB9OwogCQk2QTM4Q0ZB
QTFFMzJCNUFCMDA2MDIwNkYgLyogQXN5bmNTdGFja1RyYWNlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2QTM4Q0ZBODFFMzJCNThCMDA2MDIwNkYgLyog
QXN5bmNTdGFja1RyYWNlLmggKi87IH07CiAJCTZBRDJDQjREMTlCOTE0MDEwMDA2NTcxOSAvKiBE
ZWJ1Z2dlckV2YWxFbmFibGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA2QUQyQ0I0QzE5QjkxNDAxMDAwNjU3MTkgLyogRGVidWdnZXJFdmFsRW5hYmxl
ci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTZC
Q0NFQzA0MjVEMUZBMjcwMDBGMzkxRCAvKiBWZXJpZmllclNsb3RWaXNpdG9ySW5saW5lcy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkJDQ0VDMDMyNUQx
RkEyNzAwMEYzOTFEIC8qIFZlcmlmaWVyU2xvdFZpc2l0b3JJbmxpbmVzLmggKi87IH07CiAJCTcw
MTEzRDRDMUE4REIwOTMwMDM4NDhDNCAvKiBJdGVyYXRvck9wZXJhdGlvbnMuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcwMTEzRDRBMUE4REIwOTMwMDM4
NDhDNCAvKiBJdGVyYXRvck9wZXJhdGlvbnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQk3MDEzQ0E4QzFCNDkxQTk0MDBDQUU2MTMgLyogSlNNaWNy
b3Rhc2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcw
MTNDQThBMUI0OTFBOTQwMENBRTYxMyAvKiBKU01pY3JvdGFzay5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTcwNUI0MUFDMUE2RTUwMUUwMDcxNjc1
NyAvKiBTeW1ib2wuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDcwNUI0MUE0MUE2RTUwMUUwMDcxNjc1NyAvKiBTeW1ib2wuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMTkyMCw2ICsxOTIxLDcgQEAKIAkJ
RTNGRjc1MzMxRDlDRUExODAwQzdFMTZEIC8qIERPTUpJVEdldHRlclNldHRlci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTNGRjc1MkYxRDlDRUExMjAw
QzdFMTZEIC8qIERPTUpJVEdldHRlclNldHRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCUU0OURDMTZDMTJFRjI5NEUwMDE4NEExRiAvKiBTb3Vy
Y2VQcm92aWRlckNhY2hlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBFNDlEQzE1MTEyRUYyNzIyMDAxODRBMUYgLyogU291cmNlUHJvdmlkZXJDYWNoZS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUU0OURD
MTZEMTJFRjI5NTMwMDE4NEExRiAvKiBTb3VyY2VQcm92aWRlckNhY2hlSXRlbS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQ5REMxNDkxMkVGMjYxQTAw
MTg0QTFGIC8qIFNvdXJjZVByb3ZpZGVyQ2FjaGVJdGVtLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJRkUwNDE1NTMyNTJFQzA3MzAwOTFFQjVEIC8q
IFNsb3RWaXNpdG9yTWFjcm9zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBGRTA0MTU1MjI1MkVDMDczMDA5MUVCNUQgLyogU2xvdFZpc2l0b3JNYWNyb3Mu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlGRTA1
RkFGRDFGRTRDRURBMDAwOTMyMzAgLyogRGVwcmVjYXRlZEluc3BlY3RvclZhbHVlcy5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5OTJENkExMTFGQkQ0
OTFEMDAwMjQ1RjQgLyogRGVwcmVjYXRlZEluc3BlY3RvclZhbHVlcy5jcHAgKi87IH07CiAJCUZF
MDg2QkNBMjEyM0RFRkIwMDNGMjkyOSAvKiBFbnRyeUZyYW1lLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTA4NkJDOTIxMjNERUZBMDAzRjI5MjkgLyog
RW50cnlGcmFtZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCUZFMEQ0QTA2MUFCOEREMEEwMDJGNTRCRiAvKiBFeGVjdXRpb25UaW1lTGltaXRUZXN0
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFMEQ0
QTA0MUFCOEREMEEwMDJGNTRCRiAvKiBFeGVjdXRpb25UaW1lTGltaXRUZXN0LmNwcCAqLzsgfTsK
QEAgLTE5NDIsOSArMTk0NCwxMSBAQAogCQlGRTFFMkMzRjIyNDBERDU4MDBGNkI3MjkgLyogTWFj
cm9Bc3NlbWJsZXJBUk02NEUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEZFMUUyQzNFMjI0MEQzMEIwMEY2QjcyOSAvKiBNYWNyb0Fzc2VtYmxlckFSTTY0
RS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUZF
MUUyQzQwMjI0MERENjIwMEY2QjcyOSAvKiBBUk02NEVBc3NlbWJsZXIuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFMUUyQzNEMjI0MEQyRjYwMEY2Qjcy
OSAvKiBBUk02NEVBc3NlbWJsZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQlGRTIwQ0U5RTE1RjA0QTk1MDBERjM0MzAgLyogTExJbnRDTG9vcC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUyMENFOUMx
NUYwNEE5NTAwREYzNDMwIC8qIExMSW50Q0xvb3AuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OworCQlGRTI4N0QwMjI1MkZCMkU4MDBENzIzRjkgLyogVmVy
aWZpZXJTbG90VmlzaXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRkUyODdEMDEyNTJGQjJFODAwRDcyM0Y5IC8qIFZlcmlmaWVyU2xvdFZpc2l0b3Iu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlGRTJB
ODc2MDFGMDIzODE2MDBFQjMxQjIgLyogTWluaW11bVJlc2VydmVkWm9uZVNpemUuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFMkE4NzVGMUYwMjM4MTYw
MEVCMzFCMiAvKiBNaW5pbXVtUmVzZXJ2ZWRab25lU2l6ZS5oICovOyB9OwogCQlGRTMwMjJEMzFF
M0Q3M0E1MDBCQUM0OTMgLyogU2lnaWxsQ3Jhc2hBbmFseXplci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUzMDIyRDExRTNENzM5NjAwQkFDNDkzIC8q
IFNpZ2lsbENyYXNoQW5hbHl6ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQlGRTMwMjJENzFFNDI4NTczMDBCQUM0OTMgLyogVk1JbnNwZWN0b3Iu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFMzAyMkQ1
MUU0Mjg1NjcwMEJBQzQ5MyAvKiBWTUluc3BlY3Rvci5oICovOyB9OworCQlGRTMzNkI1MzI1REI0
OTdEMDA5OEYwMzQgLyogTWFya2luZ0NvbnN0cmFpbnRFeGVjdXRvclBhaXIuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFMzM2QjUyMjVEQjQ5N0QwMDk4
RjAzNCAvKiBNYXJraW5nQ29uc3RyYWludEV4ZWN1dG9yUGFpci5oICovOyB9OwogCQlGRTM0MjIx
MjFENkI4MUMzMDAzMkJFODggLyogVGhyb3dTY29wZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUzNDIyMTExRDZCODE4QzAwMzJCRTg4IC8qIFRocm93
U2NvcGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQlGRTM0RUUyMTI0Mzk4QUFFMDBBQTJFN0MgLyogRW5zdXJlU3RpbGxBbGl2ZUhlcmUuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFMzRFRTIwMjQzOThB
OUEwMEFBMkU3QyAvKiBFbnN1cmVTdGlsbEFsaXZlSGVyZS5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUZFMzg0MjMzMjMyNEQ1MUIwMDlERDQ0NSAv
KiBPcHRpb25zTGlzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gRkUzODQyMzEyMzI0RDUxQjAwOURENDQ1IC8qIE9wdGlvbnNMaXN0LmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTE5ODAsNiArMTk4NCw4
IEBACiAJCUZFODBDMTk3MUQ3NzVDREQwMDg1MTBDMCAvKiBDYXRjaFNjb3BlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTgwQzE5NjFENzc1QjI3MDA4
NTEwQzAgLyogQ2F0Y2hTY29wZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCUZFOERFNTRCMjNBQzFEQUQwMDVDOTE0MiAvKiBDYWNoZWFibGVJZGVu
dGlmaWVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBG
RThERTU0QTIzQUMxREFEMDA1QzkxNDIgLyogQ2FjaGVhYmxlSWRlbnRpZmllci5oICovOyB9Owog
CQlGRThERTU0RDIzQUMxRTg2MDA1QzkxNDIgLyogQ2FjaGVhYmxlSWRlbnRpZmllcklubGluZXMu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFOERFNTRD
MjNBQzFFODYwMDVDOTE0MiAvKiBDYWNoZWFibGVJZGVudGlmaWVySW5saW5lcy5oICovOyB9Owor
CQlGRTkxMkI0RjI1MzExOTMzMDBGQUJEREYgLyogQWJzdHJhY3RTbG90VmlzaXRvci5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkU5MTJCNEUyNTMxMTkz
MzAwRkFCRERGIC8qIEFic3RyYWN0U2xvdFZpc2l0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlGRTkxMkI1MTI1MzExQUQxMDBGQUJEREYgLyog
QWJzdHJhY3RTbG90VmlzaXRvcklubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEZFOTEyQjUwMjUzMTFBRDEwMEZBQkRERiAvKiBBYnN0cmFjdFNs
b3RWaXNpdG9ySW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCUZFOTlCMjQ5MUMyNEMzRDMwMEM4MjE1OSAvKiBKSVROZWdHZW5lcmF0b3Iu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFOTlCMjQ4
MUMyNEI2RDMwMEM4MjE1OSAvKiBKSVROZWdHZW5lcmF0b3IuaCAqLzsgfTsKIAkJRkVBMDg2MjAx
ODJCN0EwNDAwRjZEODUxIC8qIEJyZWFrcG9pbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFQTA4NjFFMTgyQjdBMDQwMEY2RDg1MSAvKiBCcmVha3Bv
aW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
RkVBMDg2MjExODJCN0EwNDAwRjZEODUxIC8qIERlYnVnZ2VyUHJpbWl0aXZlcy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkVBMDg2MUYxODJCN0EwNDAw
RjZEODUxIC8qIERlYnVnZ2VyUHJpbWl0aXZlcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0zOTkxLDYgKzM5OTcsNyBAQAogCQk2QTM4Q0ZBODFF
MzJCNThCMDA2MDIwNkYgLyogQXN5bmNTdGFja1RyYWNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEFzeW5jU3RhY2tUcmFjZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk2QUQyQ0I0QzE5QjkxNDAxMDAwNjU3MTkgLyogRGVidWdnZXJFdmFsRW5hYmxlci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEZWJ1Z2dlckV2YWxFbmFibGVyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZCQTkzQzk1OTA0ODRDNUJBRDkzMTZFQSAvKiBK
U1NjcmlwdEZldGNoZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNTY3Jp
cHRGZXRjaGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTZCQ0NFQzAzMjVEMUZB
MjcwMDBGMzkxRCAvKiBWZXJpZmllclNsb3RWaXNpdG9ySW5saW5lcy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBWZXJpZmllclNsb3RWaXNpdG9ySW5saW5lcy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk3MDExM0Q0OTFBOERCMDkzMDAzODQ4QzQgLyogSXRlcmF0
b3JPcGVyYXRpb25zLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEl0
ZXJhdG9yT3BlcmF0aW9ucy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcwMTEz
RDRBMUE4REIwOTMwMDM4NDhDNCAvKiBJdGVyYXRvck9wZXJhdGlvbnMuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSXRlcmF0b3JPcGVyYXRpb25zLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTcwMTNDQTg5MUI0OTFBOTQwMENBRTYxMyAvKiBKU01pY3JvdGFzay5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU01pY3JvdGFzay5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01MjI3LDYgKzUyMzQsNyBAQAogCQlGNjky
QTg4NzAyNTU1OTdEMDFGRjYwRjcgLyogSlNDSlNWYWx1ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0NKU1ZhbHVlLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB9OwogCQlGNzM5MjY5MThEQzY0MzMw
QUZDREYwRDcgLyogSlNTb3VyY2VDb2RlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEpTU291cmNlQ29kZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUZFMDAyNjIyMjNGM0FGMzMwMDNBMzU4RiAvKiBXZWJBc3NlbWJseS5hc20gKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmFzbS5hc207
IG5hbWUgPSBXZWJBc3NlbWJseS5hc207IHBhdGggPSBsbGludC9XZWJBc3NlbWJseS5hc207IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZFMDQxNTUyMjUyRUMwNzMwMDkxRUI1RCAvKiBT
bG90VmlzaXRvck1hY3Jvcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTbG90
VmlzaXRvck1hY3Jvcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTA4NkJDOTIx
MjNERUZBMDAzRjI5MjkgLyogRW50cnlGcmFtZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBFbnRyeUZyYW1lLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFMEQ0
QTA0MUFCOEREMEEwMDJGNTRCRiAvKiBFeGVjdXRpb25UaW1lTGltaXRUZXN0LmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEV4ZWN1dGlvblRpbWVMaW1pdFRlc3QuY3Bw
OyBwYXRoID0gQVBJL3Rlc3RzL0V4ZWN1dGlvblRpbWVMaW1pdFRlc3QuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlGRTBENEEwNTFBQjhERDBBMDAyRjU0QkYgLyogRXhlY3V0aW9u
VGltZUxpbWl0VGVzdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBFeGVjdXRp
b25UaW1lTGltaXRUZXN0Lmg7IHBhdGggPSBBUEkvdGVzdHMvRXhlY3V0aW9uVGltZUxpbWl0VGVz
dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNTI2MSwxMiArNTI2OSwxNSBAQAog
CQlGRTFFMkMzRTIyNDBEMzBCMDBGNkI3MjkgLyogTWFjcm9Bc3NlbWJsZXJBUk02NEUuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWFjcm9Bc3NlbWJsZXJBUk02NEUuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkUyMENFOUIxNUYwNEE5NTAwREYzNDMwIC8qIExM
SW50Q0xvb3AuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gTExJbnRD
TG9vcC5jcHA7IHBhdGggPSBsbGludC9MTEludENMb29wLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJRkUyMENFOUMxNUYwNEE5NTAwREYzNDMwIC8qIExMSW50Q0xvb3AuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gTExJbnRDTG9vcC5oOyBwYXRoID0gbGxpbnQv
TExJbnRDTG9vcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRTI4N0QwMTI1MkZC
MkU4MDBENzIzRjkgLyogVmVyaWZpZXJTbG90VmlzaXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBWZXJpZmllclNsb3RWaXNpdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUZFMkE4NzVGMUYwMjM4MTYwMEVCMzFCMiAvKiBNaW5pbXVtUmVzZXJ2ZWRab25l
U2l6ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBNaW5pbXVtUmVzZXJ2ZWRab25lU2l6ZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlGRTJCRDY2RTI1QzBEQzgyMDA5OTlEM0IgLyogVmVyaWZp
ZXJTbG90VmlzaXRvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBW
ZXJpZmllclNsb3RWaXNpdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkUy
RTZBN0ExRDZFQTVGRTAwNjBGODk2IC8qIFRocm93U2NvcGUuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gVGhyb3dTY29wZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUZFMzAyMkQwMUUzRDczOTYwMEJBQzQ5MyAvKiBTaWdpbGxDcmFzaEFuYWx5emVy
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNpZ2lsbENyYXNoQW5h
bHl6ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTMwMjJEMTFFM0Q3Mzk2
MDBCQUM0OTMgLyogU2lnaWxsQ3Jhc2hBbmFseXplci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBTaWdpbGxDcmFzaEFuYWx5emVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUZFMzAyMkQ0MUU0Mjg1NjcwMEJBQzQ5MyAvKiBWTUluc3BlY3Rvci5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBWTUluc3BlY3Rvci5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFMzAyMkQ1MUU0Mjg1NjcwMEJBQzQ5MyAvKiBWTUluc3Bl
Y3Rvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBWTUluc3BlY3Rvci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRTMzNkI1MjI1REI0OTdEMDA5OEYwMzQgLyog
TWFya2luZ0NvbnN0cmFpbnRFeGVjdXRvclBhaXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gTWFya2luZ0NvbnN0cmFpbnRFeGVjdXRvclBhaXIuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJRkUzNDIyMTExRDZCODE4QzAwMzJCRTg4IC8qIFRocm93U2NvcGUuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGhyb3dTY29wZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlGRTM0RUUyMDI0Mzk4QTlBMDBBQTJFN0MgLyogRW5zdXJlU3Rp
bGxBbGl2ZUhlcmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRW5zdXJlU3RpbGxBbGl2ZUhlcmUuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkUzNEVFMjIyNDM5OEI4NTAwQUEyRTdDIC8qIEVu
c3VyZVN0aWxsQWxpdmVIZXJlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEVuc3VyZVN0aWxsQWxpdmVIZXJlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTUzMzUsNiArNTM0Niw4IEBACiAJCUZFOERFNTRDMjNBQzFFODYwMDVDOTE0MiAvKiBDYWNo
ZWFibGVJZGVudGlmaWVySW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBDYWNoZWFibGVJZGVudGlmaWVySW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlGRThERTU0RTIzQUMzQThFMDA1QzkxNDIgLyogQ2FjaGVhYmxlSWRlbnRpZmllci5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBDYWNoZWFibGVJZGVudGlmaWVyLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJRkU5MEJCM0ExQjdDRjY0RTAwNkIzRjAzIC8qIFZNSW5saW5lcy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBWTUlubGluZXMuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkU5MTJCNEUyNTMxMTkzMzAwRkFCRERGIC8qIEFic3RyYWN0
U2xvdFZpc2l0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQWJzdHJhY3RT
bG90VmlzaXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRTkxMkI1MDI1MzEx
QUQxMDBGQUJEREYgLyogQWJzdHJhY3RTbG90VmlzaXRvcklubGluZXMuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gQWJzdHJhY3RTbG90VmlzaXRvcklubGluZXMuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkU5OEI1QjYxQkI5QUUxMTAwNzNFN0E2IC8qIEpJVFN1
YkdlbmVyYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKSVRTdWJHZW5l
cmF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkU5OUIyNDcxQzI0QjZEMzAw
QzgyMTU5IC8qIEpJVE5lZ0dlbmVyYXRvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBKSVROZWdHZW5lcmF0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlGRTk5QjI0ODFDMjRCNkQzMDBDODIxNTkgLyogSklUTmVnR2VuZXJhdG9yLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpJVE5lZ0dlbmVyYXRvci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtNjI4Miw2ICs2Mjk1LDggQEAKIAkJMTQyRTMxMkExMzRGRjBB
NjAwQUZBREI1IC8qIGhlYXAgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVu
ID0gKAorCQkJCUZFOTEyQjRFMjUzMTE5MzMwMEZBQkRERiAvKiBBYnN0cmFjdFNsb3RWaXNpdG9y
LmggKi8sCisJCQkJRkU5MTJCNTAyNTMxMUFEMTAwRkFCRERGIC8qIEFic3RyYWN0U2xvdFZpc2l0
b3JJbmxpbmVzLmggKi8sCiAJCQkJMEZFQzNDNTAxRjMzQTQxNjAwRjU5QjZDIC8qIEFsaWduZWRN
ZW1vcnlBbGxvY2F0b3IuY3BwICovLAogCQkJCTBGRUMzQzUxMUYzM0E0MTYwMEY1OUI2QyAvKiBB
bGlnbmVkTWVtb3J5QWxsb2NhdG9yLmggKi8sCiAJCQkJMEZBNzYyMEExREI5NTlGNjAwQjdBMkZE
IC8qIEFsbG9jYXRpbmdTY29wZS5oICovLApAQCAtNjQxMyw2ICs2NDI4LDcgQEAKIAkJCQkwRjdE
RjEzMDFFMjk3MEQ1MDA5NTk1MUIgLyogTWFya2VkU3BhY2VJbmxpbmVzLmggKi8sCiAJCQkJMEY2
NjBFMzMxRTA1MTdCNzAwMzE0NjJDIC8qIE1hcmtpbmdDb25zdHJhaW50LmNwcCAqLywKIAkJCQkw
RjY2MEUzNDFFMDUxN0I3MDAzMTQ2MkMgLyogTWFya2luZ0NvbnN0cmFpbnQuaCAqLywKKwkJCQlG
RTMzNkI1MjI1REI0OTdEMDA5OEYwMzQgLyogTWFya2luZ0NvbnN0cmFpbnRFeGVjdXRvclBhaXIu
aCAqLywKIAkJCQkwRjY2MEUzNTFFMDUxN0I3MDAzMTQ2MkMgLyogTWFya2luZ0NvbnN0cmFpbnRT
ZXQuY3BwICovLAogCQkJCTBGNjYwRTM2MUUwNTE3QjgwMDMxNDYyQyAvKiBNYXJraW5nQ29uc3Ry
YWludFNldC5oICovLAogCQkJCTBGOURBQTA2MUZEMUMzQzgwMDc5QzVCMiAvKiBNYXJraW5nQ29u
c3RyYWludFNvbHZlci5jcHAgKi8sCkBAIC02NDM5LDYgKzY0NTUsNyBAQAogCQkJCUMyMjU0OTQy
MTVGN0RCQUEwMDY1RTg5OCAvKiBTbG90VmlzaXRvci5jcHAgKi8sCiAJCQkJMTRCQTc4RjAxM0FB
Qjg4RjAwNUI3QzJDIC8qIFNsb3RWaXNpdG9yLmggKi8sCiAJCQkJMEZDQjQwODUxNUMwQTNDMzAw
NDg5MzJCIC8qIFNsb3RWaXNpdG9ySW5saW5lcy5oICovLAorCQkJCUZFMDQxNTUyMjUyRUMwNzMw
MDkxRUI1RCAvKiBTbG90VmlzaXRvck1hY3Jvcy5oICovLAogCQkJCTBGREU4N0ZBMURGRTZFNTAw
MDY0QzM5MCAvKiBTcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyLmNwcCAqLywKIAkJCQkwRkRFODdG
QjFERkU2RTUwMDA2NEMzOTAgLyogU3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlci5oICovLAogCQkJ
CTBGNEY4Mjg5MUUzMUI5NzEwMDc1MTg0QyAvKiBTdG9jaGFzdGljU3BhY2VUaW1lTXV0YXRvclNj
aGVkdWxlci5jcHAgKi8sCkBAIC02NDU2LDYgKzY0NzMsOSBAQAogCQkJCTBGMUZCMzhBMUUxNzNB
NjIwMEE5QkU1MCAvKiBTeW5jaHJvbm91c1N0b3BUaGVXb3JsZE11dGF0b3JTY2hlZHVsZXIuY3Bw
ICovLAogCQkJCTBGMUZCMzhCMUUxNzNBNjIwMEE5QkU1MCAvKiBTeW5jaHJvbm91c1N0b3BUaGVX
b3JsZE11dGF0b3JTY2hlZHVsZXIuaCAqLywKIAkJCQkxNDE0NDhDQzEzQTE3ODM3MDBGNUJBMUEg
LyogVGlueUJsb29tRmlsdGVyLmggKi8sCisJCQkJRkUyQkQ2NkUyNUMwREM4MjAwOTk5RDNCIC8q
IFZlcmlmaWVyU2xvdFZpc2l0b3IuY3BwICovLAorCQkJCUZFMjg3RDAxMjUyRkIyRTgwMEQ3MjNG
OSAvKiBWZXJpZmllclNsb3RWaXNpdG9yLmggKi8sCisJCQkJNkJDQ0VDMDMyNUQxRkEyNzAwMEYz
OTFEIC8qIFZlcmlmaWVyU2xvdFZpc2l0b3JJbmxpbmVzLmggKi8sCiAJCQkJMEY0RDhDNzIxRkM3
QTk3MzAwMUQzMkFDIC8qIFZpc2l0Q291bnRlci5oICovLAogCQkJCTBGOTUyQTlGMURGNzg2MDcw
MEUwNkZCRCAvKiBWaXNpdFJhY2VLZXkuY3BwICovLAogCQkJCTBGOTUyQUEwMURGNzg2MDcwMEUw
NkZCRCAvKiBWaXNpdFJhY2VLZXkuaCAqLywKQEAgLTkzMDEsNiArOTMyMSw3IEBACiAJCQkJMTQ3
QjgzQUMwRTZEQjhDOTAwNDc3NUE0IC8qIEJhdGNoZWRUcmFuc2l0aW9uT3B0aW1pemVyLmggaW4g
SGVhZGVycyAqLywKIAkJCQlFMzVFODlGRDI1QzUwRjg3MDA3MUVFMUUgLyogQmlnSW50NjRBcnJh
eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODY5NzZFNUYxRkEzRThCQzAwRTdDNEUxIC8qIEJpZ0lu
dENvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKKwkJCQlGRTA0MTU1MzI1MkVDMDczMDA5MUVC
NUQgLyogU2xvdFZpc2l0b3JNYWNyb3MuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2NjczOUQyMTNC
RkRFNzEwMDIzRDg3QyAvKiBCaWdJbnRlZ2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjE4MTY3
NzFGQjc5MjQyMDBFQ0M0RUMgLyogQmlnSW50T2JqZWN0LmggaW4gSGVhZGVycyAqLywKIAkJCQk4
Njk3NkU1RTFGQTNFOEI2MDBFN0M0RTEgLyogQmlnSW50UHJvdG90eXBlLmggaW4gSGVhZGVycyAq
LywKQEAgLTk1ODIsNiArOTYwMyw3IEBACiAJCQkJMEZEODJFNTcxNDFEQUYxMDAwMTc5Qzk0IC8q
IERGR09TUkVudHJ5LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkQ4QTMyNjE3RDUxRjU3MDBDQTJD
NDAgLyogREZHT1NSRW50cnlwb2ludENyZWF0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGQzA5NzZBMTQ2OEE2RjcwMENGMjQ0MiAvKiBERkdPU1JFeGl0LmggaW4gSGVhZGVycyAqLywK
KwkJCQlGRTkxMkI0RjI1MzExOTMzMDBGQUJEREYgLyogQWJzdHJhY3RTbG90VmlzaXRvci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEYyMzVCRUMxNzE3OEU3MzAwNjkwQzdGIC8qIERGR09TUkV4aXRC
YXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkZCOTIxQzE2RDAyRjExMDA1NUE1REIgLyogREZH
T1NSRXhpdENvbXBpbGF0aW9uSW5mby5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY3MDI1QUExNzE0
QjBGQzAwMzgyQzBFIC8qIERGR09TUkV4aXRDb21waWxlckNvbW1vbi5oIGluIEhlYWRlcnMgKi8s
CkBAIC05ODY4LDYgKzk4OTAsNyBAQAogCQkJCUE1MTNFNUJFMTg1QkZBQ0MwMDdFOTVBRCAvKiBJ
bmplY3RlZFNjcmlwdEhvc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1MTNFNUNCMTg1Rjk2MjQw
MDdFOTVBRCAvKiBJbmplY3RlZFNjcmlwdE1hbmFnZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1
ODQwRTIxMTg3QjdCODYwMDg0M0IxMCAvKiBJbmplY3RlZFNjcmlwdE1vZHVsZS5oIGluIEhlYWRl
cnMgKi8sCisJCQkJRkUyODdEMDIyNTJGQjJFODAwRDcyM0Y5IC8qIFZlcmlmaWVyU2xvdFZpc2l0
b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1MTNFNUM3MTg1Rjk0NDYwMDdFOTVBRCAvKiBJbmpl
Y3RlZFNjcmlwdFNvdXJjZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTk1OUU5MzIxQkQxODI3OTAw
MUFBNDEzIC8qIGlubGluZS1hbmQtbWluaWZ5LXN0eWxlc2hlZXRzLWFuZC1zY3JpcHRzLnB5IGlu
IEhlYWRlcnMgKi8sCiAJCQkJNzkwNUJCNjkxRDEyMDUwRTAwMTlGRTU3IC8qIElubGluZUFjY2Vz
cy5oIGluIEhlYWRlcnMgKi8sCkBAIC0xMDAwNyw2ICsxMDAzMCw3IEBACiAJCQkJNTNDNEY2NkIy
MUIxQTQwOTAwMkZEMDA5IC8qIEpTQVBJR2xvYmFsT2JqZWN0LmggaW4gSGVhZGVycyAqLywKIAkJ
CQk4NDA0ODAxMzEwMjFBMUQ5MDA4RTdGMDEgLyogSlNBUElWYWx1ZVdyYXBwZXIuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUMyQ0YzOUMyMTZFMTVBODEwMERENjlCRSAvKiBKU0FQSVdyYXBwZXJPYmpl
Y3QuaCBpbiBIZWFkZXJzICovLAorCQkJCUZFMzM2QjUzMjVEQjQ5N0QwMDk4RjAzNCAvKiBNYXJr
aW5nQ29uc3RyYWludEV4ZWN1dG9yUGFpci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MTcw
RTE2RjVDRDAwQjM0NDYwIC8qIEpTQXJyYXkuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkI2NkUz
MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RjJCNjZFNTE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yLmggaW4g
SGVhZGVycyAqLywKQEAgLTEwMDQzLDYgKzEwMDY3LDcgQEAKIAkJCQlBNThDMDI0MjE4RTRBNDFB
MDAwMzJCQzUgLyogSlNDb250ZXh0UHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0
MUUwRTE2RjVDRDAwQjM0NDYwIC8qIEpTQ29udGV4dFJlZi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QTVFQTcwRUUxOUY1QjVDNDAwOThGNUVDIC8qIEpTQ29udGV4dFJlZkluc3BlY3RvclN1cHBvcnQu
aCBpbiBIZWFkZXJzICovLAorCQkJCTZCQ0NFQzA0MjVEMUZBMjcwMDBGMzkxRCAvKiBWZXJpZmll
clNsb3RWaXNpdG9ySW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTVEMkU2NjUxOTVFMTc0
MDAwQTUxOEU3IC8qIEpTQ29udGV4dFJlZkludGVybmFsLmggaW4gSGVhZGVycyAqLywKIAkJCQkx
NDhDRDFEODEwOENGOTAyMDA4MTYzQzYgLyogSlNDb250ZXh0UmVmUHJpdmF0ZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJRkU3NDk3RTYyMDkwMDFCMTAwMDM1NjVCIC8qIEpTQ1B0clRhZy5oIGluIEhl
YWRlcnMgKi8sCkBAIC0xMDE3NCw2ICsxMDE5OSw3IEBACiAJCQkJNzk1QUM2MTgyMEEyMzU1RTAw
NTJDNzZDIC8qIEpTVmlydHVhbE1hY2hpbmVQcml2YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQlB
N0NBM0FFODE3REE0MUFFMDA2NTM4QUYgLyogSlNXZWFrTWFwLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBNzQ4MkU5MzExNkE3Q0FEMDAzQjA3MTIgLyogSlNXZWFrT2JqZWN0TWFwUmVmSW50ZXJuYWwu
aCBpbiBIZWFkZXJzICovLAorCQkJCUZFOTEyQjUxMjUzMTFBRDEwMEZBQkRERiAvKiBBYnN0cmFj
dFNsb3RWaXNpdG9ySW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc0ODJCOTMxMTY3MTE0
NzAwM0IwNzEyIC8qIEpTV2Vha09iamVjdE1hcFJlZlByaXZhdGUuaCBpbiBIZWFkZXJzICovLAog
CQkJCTUzOUJGQkIwMjJBRDNDREMwMDIzRjRDMCAvKiBKU1dlYWtPYmplY3RSZWYuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGMEIyODZCMUVCOEU2Q0YwMDBFQjVEMiAvKiBKU1dlYWtQcml2YXRlLmgg
aW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL3drYnVp
bHRpbnMvYnVpbHRpbnNfZ2VuZXJhdGVfaW50ZXJuYWxzX3dyYXBwZXJfaGVhZGVyLnB5Cj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL3drYnVpbHRpbnMvYnVpbHRp
bnNfZ2VuZXJhdGVfaW50ZXJuYWxzX3dyYXBwZXJfaGVhZGVyLnB5CShyZXZpc2lvbiAyNzMxMTkp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy93a2J1aWx0aW5zL2J1aWx0aW5zX2dl
bmVyYXRlX2ludGVybmFsc193cmFwcGVyX2hlYWRlci5weQkod29ya2luZyBjb3B5KQpAQCAtMSw2
ICsxLDYgQEAKICMhL3Vzci9iaW4vZW52IHB5dGhvbgogIwotIyBDb3B5cmlnaHQgKGMpIDIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyBDb3B5cmlnaHQgKGMpIDIwMTYtMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAjCiAjIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogIyBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTkzLDcgKzkzLDcgQEAgY2xhc3MgQnVpbHRpbnNJbnRlcm5hbHNXcmFwcGVySGVh
ZGVyR2VuZQogCiAgICAgZGVmIGdlbmVyYXRlX21ldGhvZHMoc2VsZik6CiAgICAgICAgIHJldHVy
biAiIiIKLSAgICB2b2lkIHZpc2l0KEpTQzo6U2xvdFZpc2l0b3ImKTsKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBWaXNpdG9yPiB2b2lkIHZpc2l0KFZpc2l0b3ImKTsKICAgICB2b2lkIGluaXRpYWxp
emUoSlNET01HbG9iYWxPYmplY3QmKTsKICIiIgogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvU2NyaXB0cy93a2J1aWx0aW5zL2J1aWx0aW5zX2dlbmVyYXRlX2ludGVybmFsc193cmFwcGVy
X2ltcGxlbWVudGF0aW9uLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9T
Y3JpcHRzL3drYnVpbHRpbnMvYnVpbHRpbnNfZ2VuZXJhdGVfaW50ZXJuYWxzX3dyYXBwZXJfaW1w
bGVtZW50YXRpb24ucHkJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9TY3JpcHRzL3drYnVpbHRpbnMvYnVpbHRpbnNfZ2VuZXJhdGVfaW50ZXJuYWxzX3dyYXBwZXJf
aW1wbGVtZW50YXRpb24ucHkJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAjIS91c3Iv
YmluL2VudiBweXRob24KICMKLSMgQ29weXJpZ2h0IChjKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyMgQ29weXJpZ2h0IChjKSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogIwogIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICMgbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMjAsMTMg
KzEyMCwxNiBAQCBjbGFzcyBCdWlsdGluc0ludGVybmFsc1dyYXBwZXJJbXBsZW1lbnRhCiAgICAg
ICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMpCiAKICAgICBkZWYgZ2VuZXJhdGVfdmlzaXRfbWV0
aG9kKHNlbGYpOgotICAgICAgICBsaW5lcyA9IFsidm9pZCBKU0J1aWx0aW5JbnRlcm5hbEZ1bmN0
aW9uczo6dmlzaXQoSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikiLAorICAgICAgICBsaW5lcyA9
IFsidGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4iLAorICAgICAgICAgICAgICAgICAidm9pZCBK
U0J1aWx0aW5JbnRlcm5hbEZ1bmN0aW9uczo6dmlzaXQoVmlzaXRvciYgdmlzaXRvcikiLAogICAg
ICAgICAgICAgICAgICAieyJdCiAgICAgICAgIGZvciBvYmplY3QgaW4gc2VsZi5pbnRlcm5hbHM6
CiAgICAgICAgICAgICB2aXNpdCA9ICIgICAgJXMudmlzaXQodmlzaXRvcik7IiAlIHNlbGYubWVt
YmVyX25hbWUob2JqZWN0KQogICAgICAgICAgICAgbGluZXMuYXBwZW5kKEJ1aWx0aW5zR2VuZXJh
dG9yLndyYXBfd2l0aF9ndWFyZChvYmplY3QuYW5ub3RhdGlvbnMuZ2V0KCdjb25kaXRpb25hbCcp
LCB2aXNpdCkpCiAgICAgICAgIGxpbmVzLmFwcGVuZCgiICAgIFVOVVNFRF9QQVJBTSh2aXNpdG9y
KTsiKQogICAgICAgICBsaW5lcy5hcHBlbmQoIn1cbiIpCisgICAgICAgIGxpbmVzLmFwcGVuZCgi
dGVtcGxhdGUgdm9pZCBKU0J1aWx0aW5JbnRlcm5hbEZ1bmN0aW9uczo6dmlzaXQoQWJzdHJhY3RT
bG90VmlzaXRvciYpOyIpCisgICAgICAgIGxpbmVzLmFwcGVuZCgidGVtcGxhdGUgdm9pZCBKU0J1
aWx0aW5JbnRlcm5hbEZ1bmN0aW9uczo6dmlzaXQoU2xvdFZpc2l0b3ImKTtcbiIpCiAgICAgICAg
IHJldHVybiAnXG4nLmpvaW4obGluZXMpCiAKICAgICBkZWYgX2dlbmVyYXRlX2luaXRpYWxpemVf
c3RhdGljX2dsb2JhbHMoc2VsZik6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0
cy93a2J1aWx0aW5zL2J1aWx0aW5zX3RlbXBsYXRlcy5weQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvU2NyaXB0cy93a2J1aWx0aW5zL2J1aWx0aW5zX3RlbXBsYXRlcy5weQko
cmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvd2tidWls
dGlucy9idWlsdGluc190ZW1wbGF0ZXMucHkJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBA
CiAjIS91c3IvYmluL2VudiBweXRob24KICMKLSMgQ29weXJpZ2h0IChjKSAyMDE0LTIwMTkgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyBDb3B5cmlnaHQgKGMpIDIwMTQtMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAjIENvcHlyaWdodCAoQykgMjAxNSBDYW5v
biBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAjCiAjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMTg4LDcgKzE4
OCw3IEBAIHB1YmxpYzoKICAgICBleHBsaWNpdCAke29iamVjdE5hbWV9QnVpbHRpbkZ1bmN0aW9u
cyhKU0M6OlZNJiB2bSkgOiBtX3ZtKHZtKSB7IH0KIAogICAgIHZvaWQgaW5pdChKU0M6OkpTR2xv
YmFsT2JqZWN0Jik7Ci0gICAgdm9pZCB2aXNpdChKU0M6OlNsb3RWaXNpdG9yJik7CisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCB2aXNpdChWaXNpdG9yJik7CiAKIHB1YmxpYzoK
ICAgICBKU0M6OlZNJiBtX3ZtOwpAQCAtMjA3LDEwICsyMDcsMTUgQEAgaW5saW5lIHZvaWQgJHtv
YmplY3ROYW1lfUJ1aWx0aW5GdW5jdGlvbgogI3VuZGVmIEVYUE9SVF9GVU5DVElPTgogfQogCi1p
bmxpbmUgdm9pZCAke29iamVjdE5hbWV9QnVpbHRpbkZ1bmN0aW9uczo6dmlzaXQoSlNDOjpTbG90
VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+CitpbmxpbmUgdm9p
ZCAke29iamVjdE5hbWV9QnVpbHRpbkZ1bmN0aW9uczo6dmlzaXQoVmlzaXRvciYgdmlzaXRvcikK
IHsKICNkZWZpbmUgVklTSVRfRlVOQ1RJT04obmFtZSkgdmlzaXRvci5hcHBlbmQobV8jI25hbWUj
I0Z1bmN0aW9uKTsKICAgICAke21hY3JvUHJlZml4fV9GT1JFQUNIXyR7b2JqZWN0TWFjcm99X0JV
SUxUSU5fRlVOQ1RJT05fTkFNRShWSVNJVF9GVU5DVElPTikKICN1bmRlZiBWSVNJVF9GVU5DVElP
TgogfQorCit0ZW1wbGF0ZSB2b2lkICR7b2JqZWN0TmFtZX1CdWlsdGluRnVuY3Rpb25zOjp2aXNp
dChKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgJHtvYmplY3ROYW1l
fUJ1aWx0aW5GdW5jdGlvbnM6OnZpc2l0KEpTQzo6U2xvdFZpc2l0b3ImKTsKKwogIiIiKQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmNwcAkocmV2
aXNpb24gMjczMTE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nh
c2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxNy0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNzU3LDcgKzc1Nyw4IEBAIGJvb2wgQWNjZXNzQ2Fz
ZTo6dmlzaXRXZWFrKFZNJiB2bSkgY29uc3QKICAgICByZXR1cm4gaXNWYWxpZDsKIH0KIAotYm9v
bCBBY2Nlc3NDYXNlOjpwcm9wYWdhdGVUcmFuc2l0aW9ucyhTbG90VmlzaXRvciYgdmlzaXRvcikg
Y29uc3QKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Citib29sIEFjY2Vzc0Nhc2U6OnByb3Bh
Z2F0ZVRyYW5zaXRpb25zKFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0CiB7CiAgICAgYm9vbCByZXN1
bHQgPSB0cnVlOwogCkBAIC03NzIsNyArNzczLDcgQEAgYm9vbCBBY2Nlc3NDYXNlOjpwcm9wYWdh
dGVUcmFuc2l0aW9ucyhTbAogICAgIHN3aXRjaCAobV90eXBlKSB7CiAgICAgY2FzZSBUcmFuc2l0
aW9uOgogICAgIGNhc2UgRGVsZXRlOgotICAgICAgICBpZiAodmlzaXRvci52bSgpLmhlYXAuaXNN
YXJrZWQobV9zdHJ1Y3R1cmUtPnByZXZpb3VzSUQoKSkpCisgICAgICAgIGlmICh2aXNpdG9yLmlz
TWFya2VkKG1fc3RydWN0dXJlLT5wcmV2aW91c0lEKCkpKQogICAgICAgICAgICAgdmlzaXRvci5h
cHBlbmRVbmJhcnJpZXJlZChtX3N0cnVjdHVyZS5nZXQoKSk7CiAgICAgICAgIGVsc2UKICAgICAg
ICAgICAgIHJlc3VsdCA9IGZhbHNlOwpAQCAtNzg0LDExICs3ODUsMTggQEAgYm9vbCBBY2Nlc3ND
YXNlOjpwcm9wYWdhdGVUcmFuc2l0aW9ucyhTbAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZv
aWQgQWNjZXNzQ2FzZTo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0
Cit0ZW1wbGF0ZSBib29sIEFjY2Vzc0Nhc2U6OnByb3BhZ2F0ZVRyYW5zaXRpb25zKEFic3RyYWN0
U2xvdFZpc2l0b3ImKSBjb25zdDsKK3RlbXBsYXRlIGJvb2wgQWNjZXNzQ2FzZTo6cHJvcGFnYXRl
VHJhbnNpdGlvbnMoU2xvdFZpc2l0b3ImKSBjb25zdDsKKworCit0ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPgordm9pZCBBY2Nlc3NDYXNlOjp2aXNpdEFnZ3JlZ2F0ZUltcGwoVmlzaXRvciYgdmlz
aXRvcikgY29uc3QKIHsKICAgICBtX2lkZW50aWZpZXIudmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7
CiB9CiAKK0RFRklORV9WSVNJVF9BR0dSRUdBVEVfV0lUSF9NT0RJRklFUihBY2Nlc3NDYXNlLCBj
b25zdCk7CisKIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVXaXRoR3VhcmQoCiAgICAgQWNjZXNz
R2VuZXJhdGlvblN0YXRlJiBzdGF0ZSwgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCYgZmFsbFRocm91
Z2gpCiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNl
LmgJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9B
Y2Nlc3NDYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDE3LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yODAsOSArMjgwLDkgQEAgcHJpdmF0ZToK
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgogICAgIHZvaWQgZm9yRWFjaERlcGVuZGVu
dENlbGwoVk0mLCBjb25zdCBGdW5jdG9yJikgY29uc3Q7CiAKLSAgICB2b2lkIHZpc2l0QWdncmVn
YXRlKFNsb3RWaXNpdG9yJikgY29uc3Q7CisgICAgREVDTEFSRV9WSVNJVF9BR0dSRUdBVEVfV0lU
SF9NT0RJRklFUihjb25zdCk7CiAgICAgYm9vbCB2aXNpdFdlYWsoVk0mKSBjb25zdDsKLSAgICBi
b29sIHByb3BhZ2F0ZVRyYW5zaXRpb25zKFNsb3RWaXNpdG9yJikgY29uc3Q7CisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgVmlzaXRvcj4gYm9vbCBwcm9wYWdhdGVUcmFuc2l0aW9ucyhWaXNpdG9yJikg
Y29uc3Q7CiAKICAgICAvLyBGSVhNRTogVGhpcyBvbmx5IGV4aXN0cyBiZWNhdXNlIG9mIGhvdyBB
Y2Nlc3NDYXNlIHB1dHMgcG9zdC1nZW5lcmF0aW9uIHRoaW5ncyBpbnRvIGl0c2VsZi4KICAgICAv
LyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU2NDU2CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnlWYWxJbmZvLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnlWYWxJbmZvLmNwcAkocmV2aXNpb24g
MjczMTE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5VmFsSW5mby5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDIw
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMC0y
MDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMzIsMTEgKzMyLDE0IEBAIG5hbWVzcGFjZSBKU0MgewogCiAjaWYgRU5B
QkxFKEpJVCkKIAotdm9pZCBCeVZhbEluZm86OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgQnlWYWxJbmZvOjp2aXNp
dEFnZ3JlZ2F0ZUltcGwoVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBjYWNoZWRJZC52aXNpdEFn
Z3JlZ2F0ZSh2aXNpdG9yKTsKIH0KIAorREVGSU5FX1ZJU0lUX0FHR1JFR0FURShCeVZhbEluZm8p
OworCiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnlWYWxJbmZvLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5VmFsSW5mby5oCShyZXZpc2lvbiAyNzMx
MTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnlWYWxJbmZvLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTgg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIw
MjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0yNjAsNyArMjYwLDcgQEAgc3RydWN0IEJ5VmFsSW5mbyB7CiAgICAgICAg
IHRoaXMtPnNlZW4gPSBmYWxzZTsKICAgICB9CiAKLSAgICB2b2lkIHZpc2l0QWdncmVnYXRlKFNs
b3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9BR0dSRUdBVEU7CiAKICAgICBDb2RlTG9j
YXRpb25KdW1wPEpTSW50ZXJuYWxQdHJUYWc+IG5vdEluZGV4SnVtcDsKICAgICBDb2RlTG9jYXRp
b25KdW1wPEpTSW50ZXJuYWxQdHJUYWc+IGJhZFR5cGVKdW1wOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NoZWNrUHJpdmF0ZUJyYW5kU3RhdHVzLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2hlY2tQcml2YXRlQnJhbmRTdGF0
dXMuY3BwCShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQ2hlY2tQcml2YXRlQnJhbmRTdGF0dXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjgsMTgg
KzIyOCwyNSBAQCBDYWNoZWFibGVJZGVudGlmaWVyIENoZWNrUHJpdmF0ZUJyYW5kU3RhCiAgICAg
cmV0dXJuIHJlc3VsdDsKIH0KIAotdm9pZCBDaGVja1ByaXZhdGVCcmFuZFN0YXR1czo6dmlzaXRB
Z2dyZWdhdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
Pgordm9pZCBDaGVja1ByaXZhdGVCcmFuZFN0YXR1czo6dmlzaXRBZ2dyZWdhdGVJbXBsKFZpc2l0
b3ImIHZpc2l0b3IpCiB7CiAgICAgZm9yIChDaGVja1ByaXZhdGVCcmFuZFZhcmlhbnQmIHZhcmlh
bnQgOiBtX3ZhcmlhbnRzKQogICAgICAgICB2YXJpYW50LnZpc2l0QWdncmVnYXRlKHZpc2l0b3Ip
OwogfQogCi12b2lkIENoZWNrUHJpdmF0ZUJyYW5kU3RhdHVzOjptYXJrSWZDaGVhcChTbG90Vmlz
aXRvciYgdmlzaXRvcikKK0RFRklORV9WSVNJVF9BR0dSRUdBVEUoQ2hlY2tQcml2YXRlQnJhbmRT
dGF0dXMpOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBDaGVja1ByaXZhdGVC
cmFuZFN0YXR1czo6bWFya0lmQ2hlYXAoVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBmb3IgKENo
ZWNrUHJpdmF0ZUJyYW5kVmFyaWFudCYgdmFyaWFudCA6IG1fdmFyaWFudHMpCiAgICAgICAgIHZh
cmlhbnQubWFya0lmQ2hlYXAodmlzaXRvcik7CiB9CiAKK3RlbXBsYXRlIHZvaWQgQ2hlY2tQcml2
YXRlQnJhbmRTdGF0dXM6Om1hcmtJZkNoZWFwKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBs
YXRlIHZvaWQgQ2hlY2tQcml2YXRlQnJhbmRTdGF0dXM6Om1hcmtJZkNoZWFwKFNsb3RWaXNpdG9y
Jik7CisKIGJvb2wgQ2hlY2tQcml2YXRlQnJhbmRTdGF0dXM6OmZpbmFsaXplKFZNJiB2bSkKIHsK
ICAgICBmb3IgKGF1dG8mIHZhcmlhbnQgOiBtX3ZhcmlhbnRzKSB7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2hlY2tQcml2YXRlQnJhbmRTdGF0dXMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2hlY2tQcml2YXRlQnJhbmRTdGF0
dXMuaAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NoZWNrUHJpdmF0ZUJyYW5kU3RhdHVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTgyLDggKzgyLDgg
QEAgcHVibGljOgogICAgIC8vIEF0dGVtcHRzIHRvIHJlZHVjZSB0aGUgc2V0IG9mIHZhcmlhbnRz
IHRvIGZpdCB0aGUgZ2l2ZW4gc3RydWN0dXJlIHNldC4gVGhpcyBtYXkgYmUgYXBwcm94aW1hdGUu
CiAgICAgdm9pZCBmaWx0ZXIoY29uc3QgU3RydWN0dXJlU2V0Jik7CiAKLSAgICB2b2lkIHZpc2l0
QWdncmVnYXRlKFNsb3RWaXNpdG9yJik7Ci0gICAgdm9pZCBtYXJrSWZDaGVhcChTbG90VmlzaXRv
ciYpOworICAgIERFQ0xBUkVfVklTSVRfQUdHUkVHQVRFOworICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFZpc2l0b3I+IHZvaWQgbWFya0lmQ2hlYXAoVmlzaXRvciYpOwogICAgIGJvb2wgZmluYWxpemUo
Vk0mKTsKIAogICAgIGJvb2wgYXBwZW5kVmFyaWFudChjb25zdCBDaGVja1ByaXZhdGVCcmFuZFZh
cmlhbnQmKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DaGVja1ByaXZh
dGVCcmFuZFZhcmlhbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9DaGVja1ByaXZhdGVCcmFuZFZhcmlhbnQuY3BwCShyZXZpc2lvbiAyNzMxMTkpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2hlY2tQcml2YXRlQnJhbmRWYXJpYW50
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTEsMTEgKzUxLDE1IEBAIGJvb2wgQ2hlY2tQcml2YXRl
QnJhbmRWYXJpYW50OjphdHRlbXB0VG8KICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBDaGVj
a1ByaXZhdGVCcmFuZFZhcmlhbnQ6Om1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQor
dGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgQ2hlY2tQcml2YXRlQnJhbmRWYXJpYW50
OjptYXJrSWZDaGVhcChWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIG1fc3RydWN0dXJlU2V0Lm1h
cmtJZkNoZWFwKHZpc2l0b3IpOwogfQogCit0ZW1wbGF0ZSB2b2lkIENoZWNrUHJpdmF0ZUJyYW5k
VmFyaWFudDo6bWFya0lmQ2hlYXAoQWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9p
ZCBDaGVja1ByaXZhdGVCcmFuZFZhcmlhbnQ6Om1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJik7CisK
IGJvb2wgQ2hlY2tQcml2YXRlQnJhbmRWYXJpYW50OjpmaW5hbGl6ZShWTSYgdm0pCiB7CiAgICAg
aWYgKCFtX3N0cnVjdHVyZVNldC5pc1N0aWxsQWxpdmUodm0pKQpAQCAtNjMsMTEgKzY3LDE0IEBA
IGJvb2wgQ2hlY2tQcml2YXRlQnJhbmRWYXJpYW50OjpmaW5hbGl6ZSgKICAgICByZXR1cm4gdHJ1
ZTsKIH0KIAotdm9pZCBDaGVja1ByaXZhdGVCcmFuZFZhcmlhbnQ6OnZpc2l0QWdncmVnYXRlKFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgQ2hl
Y2tQcml2YXRlQnJhbmRWYXJpYW50Ojp2aXNpdEFnZ3JlZ2F0ZUltcGwoVmlzaXRvciYgdmlzaXRv
cikKIHsKICAgICBtX2lkZW50aWZpZXIudmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7CiB9CiAKK0RF
RklORV9WSVNJVF9BR0dSRUdBVEUoQ2hlY2tQcml2YXRlQnJhbmRWYXJpYW50KTsKKwogdm9pZCBD
aGVja1ByaXZhdGVCcmFuZFZhcmlhbnQ6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKIHsK
ICAgICBkdW1wSW5Db250ZXh0KG91dCwgbnVsbHB0cik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ2hlY2tQcml2YXRlQnJhbmRWYXJpYW50LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NoZWNrUHJpdmF0ZUJyYW5kVmFyaWFudC5o
CShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2hl
Y2tQcml2YXRlQnJhbmRWYXJpYW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDggKzQ2LDggQEAg
cHVibGljOgogCiAgICAgYm9vbCBhdHRlbXB0VG9NZXJnZShjb25zdCBDaGVja1ByaXZhdGVCcmFu
ZFZhcmlhbnQmIG90aGVyKTsKIAotICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3Im
KTsKLSAgICB2b2lkIG1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJ
VF9BR0dSRUdBVEU7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCBtYXJrSWZD
aGVhcChWaXNpdG9yJik7CiAgICAgYm9vbCBmaW5hbGl6ZShWTSYpOwogCiAgICAgdm9pZCBkdW1w
KFByaW50U3RyZWFtJikgY29uc3Q7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQ29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQ29kZUJsb2NrLmNwcAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4MSw3ICsy
ODEsNyBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhWTSYgdm0sIFN0cnVjdHVyZSogCiAgICAgLCBt
X2RpZEZhaWxGVExDb21waWxhdGlvbihmYWxzZSkKICAgICAsIG1faGFzQmVlbkNvbXBpbGVkV2l0
aEZUTChmYWxzZSkKICAgICAsIG1faGFzTGlua2VkT1NSRXhpdChmYWxzZSkKLSAgICAsIG1faXNF
bGlnaWJsZUZvckxMSW50RG93bmdyYWRlKGZhbHNlKSAKKyAgICAsIG1faXNFbGlnaWJsZUZvckxM
SW50RG93bmdyYWRlKGZhbHNlKQogICAgICwgbV9udW1DYWxsZWVMb2NhbHMob3RoZXIubV9udW1D
YWxsZWVMb2NhbHMpCiAgICAgLCBtX251bVZhcnMob3RoZXIubV9udW1WYXJzKQogICAgICwgbV9u
dW1iZXJPZkFyZ3VtZW50c1RvU2tpcChvdGhlci5tX251bWJlck9mQXJndW1lbnRzVG9Ta2lwKQpA
QCAtMTAwMSw3ICsxMDAxLDggQEAgc2l6ZV90IENvZGVCbG9jazo6ZXN0aW1hdGVkU2l6ZShKU0Nl
bGwqIAogICAgIHJldHVybiBCYXNlOjplc3RpbWF0ZWRTaXplKGNlbGwsIHZtKSArIGV4dHJhTWVt
b3J5QWxsb2NhdGVkOwogfQogCi12b2lkIENvZGVCbG9jazo6dmlzaXRDaGlsZHJlbihKU0NlbGwq
IGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4K
K3ZvaWQgQ29kZUJsb2NrOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3Im
IHZpc2l0b3IpCiB7CiAgICAgQ29kZUJsb2NrKiB0aGlzT2JqZWN0ID0ganNDYXN0PENvZGVCbG9j
ayo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5m
bygpKTsKQEAgLTEwMTAsOSArMTAxMSwxNyBAQCB2b2lkIENvZGVCbG9jazo6dmlzaXRDaGlsZHJl
bihKU0NlbGwqIGNlCiAgICAgdGhpc09iamVjdC0+dmlzaXRDaGlsZHJlbih2aXNpdG9yKTsKIH0K
IAotdm9pZCBDb2RlQmxvY2s6OnZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCitE
RUZJTkVfVklTSVRfQ0hJTERSRU4oQ29kZUJsb2NrKTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVmlz
aXRvcj4KK3ZvaWQgQ29kZUJsb2NrOjp2aXNpdENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7
CiAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2spOworCisgICAgLy8gSW4gQ29k
ZUJsb2NrOjpzaG91bGRWaXNpdFN0cm9uZ2x5KCkgd2UgbWF5IGhhdmUgZGVjaWRlZCB0byBza2lw
IHZpc2l0aW5nIHRoaXMKKyAgICAvLyBjb2RlQmxvY2suIEhvd2V2ZXIsIGlmIHdlIGVuZCB1cCB2
aXNpdGluZyBpdCBhbnl3YXkgZHVlIHRvIG90aGVyIHJlZmVyZW5jZXMsCisgICAgLy8gd2UgY2Fu
IGNsZWFyIHRoaXMgZmxhZyBhbmQgYWxsb3cgdGhlIHZlcmlmaWVyIEdDIHRvIHZpc2l0IGl0IGFz
IHdlbGwuCisgICAgbV92aXNpdENoaWxkcmVuU2tpcHBlZER1ZVRvT2xkQWdlID0gZmFsc2U7CiAg
ICAgaWYgKENvZGVCbG9jayogb3RoZXJCbG9jayA9IHNwZWNpYWxPU1JFbnRyeUJsb2NrT3JOdWxs
KCkpCiAgICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQob3RoZXJCbG9jayk7CiAKQEAg
LTEwMjksMTMgKzEwMzgsMjIgQEAgdm9pZCBDb2RlQmxvY2s6OnZpc2l0Q2hpbGRyZW4oU2xvdFZp
c2l0bwogICAgIFZNOjpTcGFjZUFuZFNldDo6c2V0Rm9yKCpzdWJzcGFjZSgpKS5hZGQodGhpcyk7
CiB9CiAKLWJvb2wgQ29kZUJsb2NrOjpzaG91bGRWaXNpdFN0cm9uZ2x5KGNvbnN0IENvbmN1cnJl
bnRKU0xvY2tlciYgbG9ja2VyKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK2Jvb2wgQ29k
ZUJsb2NrOjpzaG91bGRWaXNpdFN0cm9uZ2x5KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYgbG9j
a2VyLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGlmIChPcHRpb25zOjpmb3JjZUNvZGVCbG9j
a0xpdmVuZXNzKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgaWYgKHNob3VsZEpldHRp
c29uRHVlVG9PbGRBZ2UobG9ja2VyKSkKKyAgICBpZiAoc2hvdWxkSmV0dGlzb25EdWVUb09sZEFn
ZShsb2NrZXIsIHZpc2l0b3IpKSB7CisgICAgICAgIGlmIChPcHRpb25zOjp2ZXJpZnlHQygpKQor
ICAgICAgICAgICAgbV92aXNpdENoaWxkcmVuU2tpcHBlZER1ZVRvT2xkQWdlID0gdHJ1ZTsKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmIChVTkxJS0VMWShtX3Zpc2l0Q2hp
bGRyZW5Ta2lwcGVkRHVlVG9PbGRBZ2UpKSB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKE9wdGlv
bnM6OnZlcmlmeUdDKCkpOwogICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQogCiAgICAgLy8g
SW50ZXJwcmV0ZXIgYW5kIEJhc2VsaW5lIEpJVCBDb2RlQmxvY2tzIGRvbid0IG5lZWQgdG8gYmUg
amV0dGlzb25lZCB3aGVuCiAgICAgLy8gdGhlaXIgd2VhayByZWZlcmVuY2VzIGdvIHN0YWxlLiBT
byBpZiBhIGJhc2xpbmUgSklUIENvZGVCbG9jayBnZXRzCkBAIC0xMDQ2LDYgKzEwNjQsOSBAQCBi
b29sIENvZGVCbG9jazo6c2hvdWxkVmlzaXRTdHJvbmdseShjb25zCiAgICAgcmV0dXJuIGZhbHNl
OwogfQogCit0ZW1wbGF0ZSBib29sIENvZGVCbG9jazo6c2hvdWxkVmlzaXRTdHJvbmdseShjb25z
dCBDb25jdXJyZW50SlNMb2NrZXImLCBBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSBi
b29sIENvZGVCbG9jazo6c2hvdWxkVmlzaXRTdHJvbmdseShjb25zdCBDb25jdXJyZW50SlNMb2Nr
ZXImLCBTbG90VmlzaXRvciYpOworCiBib29sIENvZGVCbG9jazo6c2hvdWxkSmV0dGlzb25EdWVU
b1dlYWtSZWZlcmVuY2UoVk0mIHZtKQogewogICAgIGlmICghSklUQ29kZTo6aXNPcHRpbWl6aW5n
SklUKGppdFR5cGUoKSkpCkBAIC0xMDg2LDkgKzExMDcsMTEgQEAgc3RhdGljIFNlY29uZHMgdGlt
ZVRvTGl2ZShKSVRUeXBlIGppdFR5cAogICAgIH0KIH0KIAotYm9vbCBDb2RlQmxvY2s6OnNob3Vs
ZEpldHRpc29uRHVlVG9PbGRBZ2UoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJikKKy8vIEFMV0FZ
U19JTkxJTkUgYmVjYXVzZSB0aGlzIG9ubHkgaGFzIDEgY2xpZW50LgordGVtcGxhdGU8dHlwZW5h
bWUgVmlzaXRvcj4KK0FMV0FZU19JTkxJTkUgYm9vbCBDb2RlQmxvY2s6OnNob3VsZEpldHRpc29u
RHVlVG9PbGRBZ2UoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgVmlzaXRvciYgdmlzaXRvcikK
IHsKLSAgICBpZiAobV92bS0+aGVhcC5pc01hcmtlZCh0aGlzKSkKKyAgICBpZiAodmlzaXRvci5p
c01hcmtlZCh0aGlzKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKFVOTElLRUxZ
KE9wdGlvbnM6OmZvcmNlQ29kZUJsb2NrVG9KZXR0aXNvbkR1ZVRvT2xkQWdlKCkpKQpAQCAtMTEw
MSwxMiArMTEyNCwxMyBAQCBib29sIENvZGVCbG9jazo6c2hvdWxkSmV0dGlzb25EdWVUb09sZEFn
CiB9CiAKICNpZiBFTkFCTEUoREZHX0pJVCkKLXN0YXRpYyBib29sIHNob3VsZE1hcmtUcmFuc2l0
aW9uKFZNJiB2bSwgREZHOjpXZWFrUmVmZXJlbmNlVHJhbnNpdGlvbiYgdHJhbnNpdGlvbikKK3Rl
bXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+CitzdGF0aWMgaW5saW5lIGJvb2wgc2hvdWxkTWFya1Ry
YW5zaXRpb24oVmlzaXRvciYgdmlzaXRvciwgREZHOjpXZWFrUmVmZXJlbmNlVHJhbnNpdGlvbiYg
dHJhbnNpdGlvbikKIHsKLSAgICBpZiAodHJhbnNpdGlvbi5tX2NvZGVPcmlnaW4gJiYgIXZtLmhl
YXAuaXNNYXJrZWQodHJhbnNpdGlvbi5tX2NvZGVPcmlnaW4uZ2V0KCkpKQorICAgIGlmICh0cmFu
c2l0aW9uLm1fY29kZU9yaWdpbiAmJiAhdmlzaXRvci5pc01hcmtlZCh0cmFuc2l0aW9uLm1fY29k
ZU9yaWdpbi5nZXQoKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKLSAgICBpZiAoIXZt
LmhlYXAuaXNNYXJrZWQodHJhbnNpdGlvbi5tX2Zyb20uZ2V0KCkpKQorICAgIGlmICghdmlzaXRv
ci5pc01hcmtlZCh0cmFuc2l0aW9uLm1fZnJvbS5nZXQoKSkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTExMjIsOCArMTE0NiwxMCBAQCBCeXRlY29k
ZUluZGV4IENvZGVCbG9jazo6Ynl0ZWNvZGVJbmRleEZvCiB9CiAjZW5kaWYgLy8gRU5BQkxFKERG
R19KSVQpCiAKLXZvaWQgQ29kZUJsb2NrOjpwcm9wYWdhdGVUcmFuc2l0aW9ucyhjb25zdCBDb25j
dXJyZW50SlNMb2NrZXImLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1l
IFZpc2l0b3I+Cit2b2lkIENvZGVCbG9jazo6cHJvcGFnYXRlVHJhbnNpdGlvbnMoY29uc3QgQ29u
Y3VycmVudEpTTG9ja2VyJiwgVmlzaXRvciYgdmlzaXRvcikKIHsKKyAgICB0eXBlbmFtZSBWaXNp
dG9yOjpTdXBwcmVzc0dDVmVyaWZpZXJTY29wZSBzdXBwcmVzc1Njb3BlKHZpc2l0b3IpOwogICAg
IFZNJiB2bSA9ICptX3ZtOwogCiAgICAgaWYgKGppdFR5cGUoKSA9PSBKSVRUeXBlOjpJbnRlcnBy
ZXRlclRodW5rKSB7CkBAIC0xMTMzLDggKzExNTksOSBAQCB2b2lkIENvZGVCbG9jazo6cHJvcGFn
YXRlVHJhbnNpdGlvbnMoY29uCiAgICAgICAgICAgICAgICAgU3RydWN0dXJlSUQgbmV3U3RydWN0
dXJlSUQgPSBtZXRhZGF0YS5tX25ld1N0cnVjdHVyZUlEOwogICAgICAgICAgICAgICAgIGlmICgh
b2xkU3RydWN0dXJlSUQgfHwgIW5ld1N0cnVjdHVyZUlEKQogICAgICAgICAgICAgICAgICAgICBy
ZXR1cm47CisKICAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSA9IHZtLmhl
YXAuc3RydWN0dXJlSURUYWJsZSgpLmdldChvbGRTdHJ1Y3R1cmVJRCk7Ci0gICAgICAgICAgICAg
ICAgaWYgKHZtLmhlYXAuaXNNYXJrZWQob2xkU3RydWN0dXJlKSkgeworICAgICAgICAgICAgICAg
IGlmICh2aXNpdG9yLmlzTWFya2VkKG9sZFN0cnVjdHVyZSkpIHsKICAgICAgICAgICAgICAgICAg
ICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSB2bS5oZWFwLnN0cnVjdHVyZUlEVGFibGUoKS5n
ZXQobmV3U3RydWN0dXJlSUQpOwogICAgICAgICAgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZFVu
YmFycmllcmVkKG5ld1N0cnVjdHVyZSk7CiAgICAgICAgICAgICAgICAgfQpAQCAtMTE0OCwxMSAr
MTE3NSwxMSBAQCB2b2lkIENvZGVCbG9jazo6cHJvcGFnYXRlVHJhbnNpdGlvbnMoY29uCiAKICAg
ICAgICAgICAgICAgICBKU0NlbGwqIHByb3BlcnR5ID0gbWV0YWRhdGEubV9wcm9wZXJ0eS5nZXQo
KTsKICAgICAgICAgICAgICAgICBBU1NFUlQocHJvcGVydHkpOwotICAgICAgICAgICAgICAgIGlm
ICghdm0uaGVhcC5pc01hcmtlZChwcm9wZXJ0eSkpCisgICAgICAgICAgICAgICAgaWYgKCF2aXNp
dG9yLmlzTWFya2VkKHByb3BlcnR5KSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogCiAg
ICAgICAgICAgICAgICAgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUgPSB2bS5oZWFwLnN0cnVjdHVy
ZUlEVGFibGUoKS5nZXQob2xkU3RydWN0dXJlSUQpOwotICAgICAgICAgICAgICAgIGlmICh2bS5o
ZWFwLmlzTWFya2VkKG9sZFN0cnVjdHVyZSkpIHsKKyAgICAgICAgICAgICAgICBpZiAodmlzaXRv
ci5pc01hcmtlZChvbGRTdHJ1Y3R1cmUpKSB7CiAgICAgICAgICAgICAgICAgICAgIFN0cnVjdHVy
ZSogbmV3U3RydWN0dXJlID0gdm0uaGVhcC5zdHJ1Y3R1cmVJRFRhYmxlKCkuZ2V0KG5ld1N0cnVj
dHVyZUlEKTsKICAgICAgICAgICAgICAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZChu
ZXdTdHJ1Y3R1cmUpOwogICAgICAgICAgICAgICAgIH0KQEAgLTExNjYsMTEgKzExOTMsMTEgQEAg
dm9pZCBDb2RlQmxvY2s6OnByb3BhZ2F0ZVRyYW5zaXRpb25zKGNvbgogCiAgICAgICAgICAgICAg
ICAgSlNDZWxsKiBicmFuZCA9IG1ldGFkYXRhLm1fYnJhbmQuZ2V0KCk7CiAgICAgICAgICAgICAg
ICAgQVNTRVJUKGJyYW5kKTsKLSAgICAgICAgICAgICAgICBpZiAoIXZtLmhlYXAuaXNNYXJrZWQo
YnJhbmQpKQorICAgICAgICAgICAgICAgIGlmICghdmlzaXRvci5pc01hcmtlZChicmFuZCkpCiAg
ICAgICAgICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICAgICAgICAgIFN0cnVjdHVyZSog
b2xkU3RydWN0dXJlID0gdm0uaGVhcC5zdHJ1Y3R1cmVJRFRhYmxlKCkuZ2V0KG9sZFN0cnVjdHVy
ZUlEKTsKLSAgICAgICAgICAgICAgICBpZiAodm0uaGVhcC5pc01hcmtlZChvbGRTdHJ1Y3R1cmUp
KSB7CisgICAgICAgICAgICAgICAgaWYgKHZpc2l0b3IuaXNNYXJrZWQob2xkU3RydWN0dXJlKSkg
ewogICAgICAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IHZtLmhlYXAu
c3RydWN0dXJlSURUYWJsZSgpLmdldChuZXdTdHJ1Y3R1cmVJRCk7CiAgICAgICAgICAgICAgICAg
ICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQobmV3U3RydWN0dXJlKTsKICAgICAgICAgICAg
ICAgICB9CkBAIC0xMTk3LDcgKzEyMjQsNyBAQCB2b2lkIENvZGVCbG9jazo6cHJvcGFnYXRlVHJh
bnNpdGlvbnMoY29uCiAgICAgICAgICAgICB2bS5nZXRTdHJ1Y3R1cmUoc3RydWN0dXJlSUQpLT5t
YXJrSWZDaGVhcCh2aXNpdG9yKTsKIAogICAgICAgICBmb3IgKGF1dG8mIHRyYW5zaXRpb24gOiBk
ZmdDb21tb24tPnRyYW5zaXRpb25zKSB7Ci0gICAgICAgICAgICBpZiAoc2hvdWxkTWFya1RyYW5z
aXRpb24odm0sIHRyYW5zaXRpb24pKSB7CisgICAgICAgICAgICBpZiAoc2hvdWxkTWFya1RyYW5z
aXRpb24odmlzaXRvciwgdHJhbnNpdGlvbikpIHsKICAgICAgICAgICAgICAgICAvLyBJZiB0aGUg
Zm9sbG93aW5nIHRocmVlIHRoaW5ncyBhcmUgbGl2ZSwgdGhlbiB0aGUgdGFyZ2V0IG9mIHRoZQog
ICAgICAgICAgICAgICAgIC8vIHRyYW5zaXRpb24gaXMgYWxzbyBsaXZlOgogICAgICAgICAgICAg
ICAgIC8vCkBAIC0xMjI0LDEzICsxMjUxLDE3IEBAIHZvaWQgQ29kZUJsb2NrOjpwcm9wYWdhdGVU
cmFuc2l0aW9ucyhjb24KICNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKIH0KIAotdm9pZCBDb2Rl
QmxvY2s6OmRldGVybWluZUxpdmVuZXNzKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGUgdm9pZCBDb2RlQmxvY2s6OnByb3BhZ2F0ZVRyYW5z
aXRpb25zKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIEFic3RyYWN0U2xvdFZpc2l0b3ImKTsK
K3RlbXBsYXRlIHZvaWQgQ29kZUJsb2NrOjpwcm9wYWdhdGVUcmFuc2l0aW9ucyhjb25zdCBDb25j
dXJyZW50SlNMb2NrZXImLCBTbG90VmlzaXRvciYpOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNp
dG9yPgordm9pZCBDb2RlQmxvY2s6OmRldGVybWluZUxpdmVuZXNzKGNvbnN0IENvbmN1cnJlbnRK
U0xvY2tlciYsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHZpc2l0b3Ip
OwogICAgIAogI2lmIEVOQUJMRShERkdfSklUKQogICAgIFZNJiB2bSA9ICptX3ZtOwotICAgIGlm
ICh2bS5oZWFwLmlzTWFya2VkKHRoaXMpKQorICAgIGlmICh2aXNpdG9yLmlzTWFya2VkKHRoaXMp
KQogICAgICAgICByZXR1cm47CiAgICAgCiAgICAgLy8gSW4gcmFyZSBhbmQgd2VpcmQgY2FzZXMs
IHRoaXMgY291bGQgYmUgY2FsbGVkIG9uIGEgYmFzZWxpbmUgQ29kZUJsb2NrLiBPbmUgdGhhdCBJ
IGZvdW5kIHdhcwpAQCAtMTI0Nyw3ICsxMjc4LDcgQEAgdm9pZCBDb2RlQmxvY2s6OmRldGVybWlu
ZUxpdmVuZXNzKGNvbnN0IAogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkZmdDb21tb24t
PndlYWtSZWZlcmVuY2VzLnNpemUoKTsgKytpKSB7CiAgICAgICAgIEpTQ2VsbCogcmVmZXJlbmNl
ID0gZGZnQ29tbW9uLT53ZWFrUmVmZXJlbmNlc1tpXS5nZXQoKTsKICAgICAgICAgQVNTRVJUKCFq
c0R5bmFtaWNDYXN0PENvZGVCbG9jayo+KHZtLCByZWZlcmVuY2UpKTsKLSAgICAgICAgaWYgKCF2
bS5oZWFwLmlzTWFya2VkKHJlZmVyZW5jZSkpIHsKKyAgICAgICAgaWYgKCF2aXNpdG9yLmlzTWFy
a2VkKHJlZmVyZW5jZSkpIHsKICAgICAgICAgICAgIGFsbEFyZUxpdmVTb0ZhciA9IGZhbHNlOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTEyNTUsNyArMTI4Niw3IEBAIHZvaWQg
Q29kZUJsb2NrOjpkZXRlcm1pbmVMaXZlbmVzcyhjb25zdCAKICAgICBpZiAoYWxsQXJlTGl2ZVNv
RmFyKSB7CiAgICAgICAgIGZvciAoU3RydWN0dXJlSUQgc3RydWN0dXJlSUQgOiBkZmdDb21tb24t
PndlYWtTdHJ1Y3R1cmVSZWZlcmVuY2VzKSB7CiAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSA9IHZtLmdldFN0cnVjdHVyZShzdHJ1Y3R1cmVJRCk7Ci0gICAgICAgICAgICBpZiAoIXZt
LmhlYXAuaXNNYXJrZWQoc3RydWN0dXJlKSkgeworICAgICAgICAgICAgaWYgKCF2aXNpdG9yLmlz
TWFya2VkKHN0cnVjdHVyZSkpIHsKICAgICAgICAgICAgICAgICBhbGxBcmVMaXZlU29GYXIgPSBm
YWxzZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KQEAgLTEyNzMsNiAr
MTMwNCw5IEBAIHZvaWQgQ29kZUJsb2NrOjpkZXRlcm1pbmVMaXZlbmVzcyhjb25zdCAKICNlbmRp
ZiAvLyBFTkFCTEUoREZHX0pJVCkKIH0KIAordGVtcGxhdGUgdm9pZCBDb2RlQmxvY2s6OmRldGVy
bWluZUxpdmVuZXNzKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIEFic3RyYWN0U2xvdFZpc2l0
b3ImKTsKK3RlbXBsYXRlIHZvaWQgQ29kZUJsb2NrOjpkZXRlcm1pbmVMaXZlbmVzcyhjb25zdCBD
b25jdXJyZW50SlNMb2NrZXImLCBTbG90VmlzaXRvciYpOworCiB2b2lkIENvZGVCbG9jazo6Zmlu
YWxpemVMTEludElubGluZUNhY2hlcygpCiB7CiAgICAgVk0mIHZtID0gKm1fdm07CkBAIC0xNjE2
LDYgKzE2NTAsMTEgQEAgdm9pZCBDb2RlQmxvY2s6OmZpbmFsaXplVW5jb25kaXRpb25hbGx5KAog
ICAgIHVwZGF0ZUFjdGl2aXR5KCk7CiAKICAgICBWTTo6U3BhY2VBbmRTZXQ6OnNldEZvcigqc3Vi
c3BhY2UoKSkucmVtb3ZlKHRoaXMpOworCisgICAgLy8gSW4gQ29kZUJsb2NrOjpzaG91bGRWaXNp
dFN0cm9uZ2x5KCkgd2UgbWF5IGhhdmUgZGVjaWRlZCB0byBza2lwIHZpc2l0aW5nIHRoaXMKKyAg
ICAvLyBjb2RlQmxvY2suIEJ5IHRoZSB0aW1lIHdlIGdldCBoZXJlLCB3ZSdyZSBkb25lIHdpdGgg
dGhlIHZlcmlmaWVyIEdDLiBTbywgbGV0J3MKKyAgICAvLyByZXNldCB0aGlzIGZsYWcgZm9yIHRo
ZSBuZXh0IEdDIGN5Y2xlLgorICAgIG1fdmlzaXRDaGlsZHJlblNraXBwZWREdWVUb09sZEFnZSA9
IGZhbHNlOwogfQogCiB2b2lkIENvZGVCbG9jazo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCkBAIC0x
ODA4LDcgKzE4NDcsOCBAQCB2b2lkIENvZGVCbG9jazo6cmVzZXRKSVREYXRhKCkKIH0KICNlbmRp
ZgogCi12b2lkIENvZGVCbG9jazo6dmlzaXRPU1JFeGl0VGFyZ2V0cyhjb25zdCBDb25jdXJyZW50
SlNMb2NrZXImLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0
b3I+Cit2b2lkIENvZGVCbG9jazo6dmlzaXRPU1JFeGl0VGFyZ2V0cyhjb25zdCBDb25jdXJyZW50
SlNMb2NrZXImLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIC8vIFdlIHN0cm9uZ2x5IHZpc2l0
IE9TUiBleGl0cyB0YXJnZXRzIGJlY2F1c2Ugd2UgZG9uJ3Qgd2FudCB0byBkZWFsIHdpdGgKICAg
ICAvLyB0aGUgY29tcGxleGl0eSBvZiBnZW5lcmF0aW5nIGFuIGV4aXQgdGFyZ2V0IENvZGVCbG9j
ayBvbiBkZW1hbmQgYW5kCkBAIC0xODI4LDcgKzE4NjgsOCBAQCB2b2lkIENvZGVCbG9jazo6dmlz
aXRPU1JFeGl0VGFyZ2V0cyhjb25zCiAjZW5kaWYKIH0KIAotdm9pZCBDb2RlQmxvY2s6OnN0cm9u
Z2x5VmlzaXRTdHJvbmdSZWZlcmVuY2VzKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYgbG9ja2Vy
LCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lk
IENvZGVCbG9jazo6c3Ryb25nbHlWaXNpdFN0cm9uZ1JlZmVyZW5jZXMoY29uc3QgQ29uY3VycmVu
dEpTTG9ja2VyJiBsb2NrZXIsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgVU5VU0VEX1BBUkFN
KGxvY2tlcik7CiAgICAgCkBAIC0xODY0LDcgKzE5MDUsOCBAQCB2b2lkIENvZGVCbG9jazo6c3Ry
b25nbHlWaXNpdFN0cm9uZ1JlZmVyCiAjZW5kaWYKIH0KIAotdm9pZCBDb2RlQmxvY2s6OnN0cm9u
Z2x5VmlzaXRXZWFrUmVmZXJlbmNlcyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBTbG90Vmlz
aXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIENvZGVCbG9j
azo6c3Ryb25nbHlWaXNpdFdlYWtSZWZlcmVuY2VzKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYs
IFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHZpc2l0b3IpOwogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShyZXZpc2lvbiAy
NzMxMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LTIw
MjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4
LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAy
MDA4IENhbWVyb24gWndhcmljaCA8Y3d6d2FyaWNoQHV3YXRlcmxvby5jYT4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKQEAgLTIwMSwxMCArMjAxLDEwIEBAIHB1YmxpYzoKICAgICAvLyBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIzNjc3CiAgICAgQ29kZUJsb2NrKiBiYXNlbGlu
ZVZlcnNpb24oKTsKIAorICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CisKICAgICBzdGF0aWMg
c2l6ZV90IGVzdGltYXRlZFNpemUoSlNDZWxsKiwgVk0mKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNp
dENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CiAgICAgc3RhdGljIHZvaWQgZGVzdHJv
eShKU0NlbGwqKTsKLSAgICB2b2lkIHZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKICAgICB2
b2lkIGZpbmFsaXplVW5jb25kaXRpb25hbGx5KFZNJik7CiAKICAgICB2b2lkIG5vdGlmeUxleGlj
YWxCaW5kaW5nVXBkYXRlKCk7CkBAIC04NjksNiArODY5LDcgQEAgcHVibGljOgogCiAgICAgYm9v
bCBtX2hhc0xpbmtlZE9TUkV4aXQgOiAxOwogICAgIGJvb2wgbV9pc0VsaWdpYmxlRm9yTExJbnRE
b3duZ3JhZGUgOiAxOworICAgIGJvb2wgbV92aXNpdENoaWxkcmVuU2tpcHBlZER1ZVRvT2xkQWdl
IHsgZmFsc2UgfTsKIAogICAgIC8vIEludGVybmFsIG1ldGhvZHMgZm9yIHVzZSBieSB2YWxpZGF0
aW9uIGNvZGUuIEl0IHdvdWxkIGJlIHByaXZhdGUgaWYgaXQgd2Fzbid0CiAgICAgLy8gZm9yIHRo
ZSBmYWN0IHRoYXQgd2UgdXNlIGl0IGZyb20gYW5vbnltb3VzIG5hbWVzcGFjZXMuCkBAIC05NDMs
NiArOTQ0LDggQEAgcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgQ29kZUJsb2NrU2V0OwogICAg
IGZyaWVuZCBjbGFzcyBFeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlOwogCisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgVmlzaXRvcj4gQUxXQVlTX0lOTElORSB2b2lkIHZpc2l0Q2hpbGRyZW4oVmlzaXRv
ciYpOworCiAgICAgQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzJiBsaXZlbmVzc0FuYWx5c2lzU2xv
dygpOwogICAgIAogICAgIENvZGVCbG9jayogc3BlY2lhbE9TUkVudHJ5QmxvY2tPck51bGwoKTsK
QEAgLTk2MywxNiArOTY2LDE2IEBAIHByaXZhdGU6CiAgICAgICAgIG1fY29uc3RhbnRSZWdpc3Rl
cnNbcmVnLnRvQ29uc3RhbnRJbmRleCgpXS5zZXQoKm1fdm0sIHRoaXMsIHZhbHVlKTsKICAgICB9
CiAKLSAgICBib29sIHNob3VsZFZpc2l0U3Ryb25nbHkoY29uc3QgQ29uY3VycmVudEpTTG9ja2Vy
Jik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gYm9vbCBzaG91bGRWaXNpdFN0cm9u
Z2x5KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIFZpc2l0b3ImKTsKICAgICBib29sIHNob3Vs
ZEpldHRpc29uRHVlVG9XZWFrUmVmZXJlbmNlKFZNJik7Ci0gICAgYm9vbCBzaG91bGRKZXR0aXNv
bkR1ZVRvT2xkQWdlKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYpOworICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFZpc2l0b3I+IGJvb2wgc2hvdWxkSmV0dGlzb25EdWVUb09sZEFnZShjb25zdCBDb25j
dXJyZW50SlNMb2NrZXImLCBWaXNpdG9yJik7CiAgICAgCi0gICAgdm9pZCBwcm9wYWdhdGVUcmFu
c2l0aW9ucyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBTbG90VmlzaXRvciYpOwotICAgIHZv
aWQgZGV0ZXJtaW5lTGl2ZW5lc3MoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgU2xvdFZpc2l0
b3ImKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIHByb3BhZ2F0ZVRyYW5z
aXRpb25zKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIFZpc2l0b3ImKTsKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIGRldGVybWluZUxpdmVuZXNzKGNvbnN0IENvbmN1cnJl
bnRKU0xvY2tlciYsIFZpc2l0b3ImKTsKICAgICAgICAgCi0gICAgdm9pZCBzdHJvbmdseVZpc2l0
U3Ryb25nUmVmZXJlbmNlcyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBTbG90VmlzaXRvciYp
OwotICAgIHZvaWQgc3Ryb25nbHlWaXNpdFdlYWtSZWZlcmVuY2VzKGNvbnN0IENvbmN1cnJlbnRK
U0xvY2tlciYsIFNsb3RWaXNpdG9yJik7Ci0gICAgdm9pZCB2aXNpdE9TUkV4aXRUYXJnZXRzKGNv
bnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIFNsb3RWaXNpdG9yJik7CisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVmlzaXRvcj4gdm9pZCBzdHJvbmdseVZpc2l0U3Ryb25nUmVmZXJlbmNlcyhjb25zdCBD
b25jdXJyZW50SlNMb2NrZXImLCBWaXNpdG9yJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlz
aXRvcj4gdm9pZCBzdHJvbmdseVZpc2l0V2Vha1JlZmVyZW5jZXMoY29uc3QgQ29uY3VycmVudEpT
TG9ja2VyJiwgVmlzaXRvciYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQg
dmlzaXRPU1JFeGl0VGFyZ2V0cyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBWaXNpdG9yJik7
CiAKICAgICB1bnNpZ25lZCBudW1iZXJPZk5vbkFyZ3VtZW50VmFsdWVQcm9maWxlcygpIHsgcmV0
dXJuIG1fbnVtYmVyT2ZOb25Bcmd1bWVudFZhbHVlUHJvZmlsZXM7IH0KICAgICB1bnNpZ25lZCB0
b3RhbE51bWJlck9mVmFsdWVQcm9maWxlcygpIHsgcmV0dXJuIG51bWJlck9mQXJndW1lbnRWYWx1
ZVByb2ZpbGVzKCkgKyBudW1iZXJPZk5vbkFyZ3VtZW50VmFsdWVQcm9maWxlcygpOyB9CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRGVsZXRlQnlJZFZhcmlhbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9EZWxldGVCeUlkVmFy
aWFudC5jcHAJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9EZWxldGVCeUlkVmFyaWFudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODgsMTIgKzg4LDE2IEBA
IGJvb2wgRGVsZXRlQnlJZFZhcmlhbnQ6OndyaXRlc1N0cnVjdHVyZXMKICAgICByZXR1cm4gISFu
ZXdTdHJ1Y3R1cmUoKTsKIH0KIAotdm9pZCBEZWxldGVCeUlkVmFyaWFudDo6dmlzaXRBZ2dyZWdh
dGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9p
ZCBEZWxldGVCeUlkVmFyaWFudDo6dmlzaXRBZ2dyZWdhdGVJbXBsKFZpc2l0b3ImIHZpc2l0b3Ip
CiB7CiAgICAgbV9pZGVudGlmaWVyLnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOwogfQogCi12b2lk
IERlbGV0ZUJ5SWRWYXJpYW50OjptYXJrSWZDaGVhcChTbG90VmlzaXRvciYgdmlzaXRvcikKK0RF
RklORV9WSVNJVF9BR0dSRUdBVEUoRGVsZXRlQnlJZFZhcmlhbnQpOworCit0ZW1wbGF0ZTx0eXBl
bmFtZSBWaXNpdG9yPgordm9pZCBEZWxldGVCeUlkVmFyaWFudDo6bWFya0lmQ2hlYXAoVmlzaXRv
ciYgdmlzaXRvcikKIHsKICAgICBpZiAobV9vbGRTdHJ1Y3R1cmUpCiAgICAgICAgIG1fb2xkU3Ry
dWN0dXJlLT5tYXJrSWZDaGVhcCh2aXNpdG9yKTsKQEAgLTEwMSw2ICsxMDUsOSBAQCB2b2lkIERl
bGV0ZUJ5SWRWYXJpYW50OjptYXJrSWZDaGVhcChTbG90CiAgICAgICAgIG1fbmV3U3RydWN0dXJl
LT5tYXJrSWZDaGVhcCh2aXNpdG9yKTsKIH0KIAordGVtcGxhdGUgdm9pZCBEZWxldGVCeUlkVmFy
aWFudDo6bWFya0lmQ2hlYXAoQWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBE
ZWxldGVCeUlkVmFyaWFudDo6bWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImKTsKKwogdm9pZCBEZWxl
dGVCeUlkVmFyaWFudDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAogewogICAgIGR1bXBJ
bkNvbnRleHQob3V0LCBudWxscHRyKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9EZWxldGVCeUlkVmFyaWFudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9EZWxldGVCeUlkVmFyaWFudC5oCShyZXZpc2lvbiAyNzMxMTkpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRGVsZXRlQnlJZFZhcmlhbnQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIwLTIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC02MSw4ICs2MSw4IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgYXR0ZW1wdFRvTWVyZ2Uo
Y29uc3QgRGVsZXRlQnlJZFZhcmlhbnQmIG90aGVyKTsKIAotICAgIHZvaWQgdmlzaXRBZ2dyZWdh
dGUoU2xvdFZpc2l0b3ImKTsKLSAgICB2b2lkIG1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJik7Cisg
ICAgREVDTEFSRV9WSVNJVF9BR0dSRUdBVEU7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRv
cj4gdm9pZCBtYXJrSWZDaGVhcChWaXNpdG9yJik7CiAgICAgYm9vbCBmaW5hbGl6ZShWTSYpOwog
CiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvRGVsZXRlQnlTdGF0dXMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9EZWxldGVCeVN0YXR1cy5jcHAJKHJldmlzaW9uIDI3
MzExOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9EZWxldGVCeVN0YXR1cy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAy
MC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMjU0LDE4ICsyNTQsMjUgQEAgQ2FjaGVhYmxlSWRlbnRpZmllciBE
ZWxldGVCeVN0YXR1czo6c2luZwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQgRGVsZXRl
QnlTdGF0dXM6OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8
dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgRGVsZXRlQnlTdGF0dXM6OnZpc2l0QWdncmVnYXRlSW1w
bChWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGZvciAoRGVsZXRlQnlJZFZhcmlhbnQmIHZhcmlh
bnQgOiBtX3ZhcmlhbnRzKQogICAgICAgICB2YXJpYW50LnZpc2l0QWdncmVnYXRlKHZpc2l0b3Ip
OwogfQogCi12b2lkIERlbGV0ZUJ5U3RhdHVzOjptYXJrSWZDaGVhcChTbG90VmlzaXRvciYgdmlz
aXRvcikKK0RFRklORV9WSVNJVF9BR0dSRUdBVEUoRGVsZXRlQnlTdGF0dXMpOworCit0ZW1wbGF0
ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBEZWxldGVCeVN0YXR1czo6bWFya0lmQ2hlYXAoVmlz
aXRvciYgdmlzaXRvcikKIHsKICAgICBmb3IgKERlbGV0ZUJ5SWRWYXJpYW50JiB2YXJpYW50IDog
bV92YXJpYW50cykKICAgICAgICAgdmFyaWFudC5tYXJrSWZDaGVhcCh2aXNpdG9yKTsKIH0KIAor
dGVtcGxhdGUgdm9pZCBEZWxldGVCeVN0YXR1czo6bWFya0lmQ2hlYXAoQWJzdHJhY3RTbG90Vmlz
aXRvciYpOwordGVtcGxhdGUgdm9pZCBEZWxldGVCeVN0YXR1czo6bWFya0lmQ2hlYXAoU2xvdFZp
c2l0b3ImKTsKKwogYm9vbCBEZWxldGVCeVN0YXR1czo6ZmluYWxpemUoVk0mIHZtKQogewogICAg
IGZvciAoYXV0byYgdmFyaWFudCA6IG1fdmFyaWFudHMpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9EZWxldGVCeVN0YXR1cy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9EZWxldGVCeVN0YXR1cy5oCShyZXZpc2lvbiAyNzMxMTkp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRGVsZXRlQnlTdGF0dXMuaAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIwLTIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC04MSw4ICs4MSw4IEBAIHB1YmxpYzoKICAgICAvLyBBdHRlbXB0cyB0byByZWR1
Y2UgdGhlIHNldCBvZiB2YXJpYW50cyB0byBmaXQgdGhlIGdpdmVuIHN0cnVjdHVyZSBzZXQuIFRo
aXMgbWF5IGJlIGFwcHJveGltYXRlLgogICAgIHZvaWQgZmlsdGVyKGNvbnN0IFN0cnVjdHVyZVNl
dCYpOwogCi0gICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYpOwotICAgIHZvaWQg
bWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0FHR1JFR0FURTsK
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIG1hcmtJZkNoZWFwKFZpc2l0b3Im
KTsKICAgICBib29sIGZpbmFsaXplKFZNJik7CiAKICAgICBib29sIGFwcGVuZFZhcmlhbnQoY29u
c3QgRGVsZXRlQnlJZFZhcmlhbnQmKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9EaXJlY3RFdmFsQ29kZUNhY2hlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvRGlyZWN0RXZhbENvZGVDYWNoZS5jcHAJKHJldmlzaW9uIDI3MzEx
OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9EaXJlY3RFdmFsQ29kZUNhY2hl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC00NSw3ICs0NSw4IEBAIHZvaWQgRGlyZWN0RXZhbENvZGVDYWNo
ZTo6Y2xlYXIoKQogICAgIG1fY2FjaGVNYXAuY2xlYXIoKTsKIH0KIAotdm9pZCBEaXJlY3RFdmFs
Q29kZUNhY2hlOjp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRl
PHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIERpcmVjdEV2YWxDb2RlQ2FjaGU6OnZpc2l0QWdncmVn
YXRlSW1wbChWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fbG9j
ayk7CiAgICAgRXZhbENhY2hlTWFwOjppdGVyYXRvciBlbmQgPSBtX2NhY2hlTWFwLmVuZCgpOwpA
QCAtNTMsNSArNTQsNiBAQCB2b2lkIERpcmVjdEV2YWxDb2RlQ2FjaGU6OnZpc2l0QWdncmVnYXRl
CiAgICAgICAgIHZpc2l0b3IuYXBwZW5kKHB0ci0+dmFsdWUpOwogfQogCi19IC8vIG5hbWVzcGFj
ZSBKU0MKK0RFRklORV9WSVNJVF9BR0dSRUdBVEUoRGlyZWN0RXZhbENvZGVDYWNoZSk7CiAKK30g
Ly8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Rp
cmVjdEV2YWxDb2RlQ2FjaGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvRGlyZWN0RXZhbENvZGVDYWNoZS5oCShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRGlyZWN0RXZhbENvZGVDYWNoZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOC0yMDE5IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtOTcsNyArOTcsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBib29s
IGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBtX2NhY2hlTWFwLmlzRW1wdHkoKTsgfQogCi0gICAg
ICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImKTsKKyAgICAgICAgREVDTEFSRV9W
SVNJVF9BR0dSRUdBVEU7CiAKICAgICAgICAgdm9pZCBjbGVhcigpOwogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGFibGVUb0Nv
ZGVCbG9ja0VkZ2UuY3BwCShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOC0yMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
NTMsNyArNTMsOCBAQCB2b2lkIEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2U6OmZpbmlzaENyCiAg
ICAgQVNTRVJUKCFpc0FjdGl2ZSgpKTsKIH0KIAotdm9pZCBFeGVjdXRhYmxlVG9Db2RlQmxvY2tF
ZGdlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0
ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBFeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdl
Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAg
ICAgVk0mIHZtID0gdmlzaXRvci52bSgpOwogICAgIEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2Uq
IGVkZ2UgPSBqc0Nhc3Q8RXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZSo+KGNlbGwpOwpAQCAtNjEs
NyArNjIsNyBAQCB2b2lkIEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2U6OnZpc2l0Q2hpCiAgICAg
QmFzZTo6dmlzaXRDaGlsZHJlbihjZWxsLCB2aXNpdG9yKTsKIAogICAgIENvZGVCbG9jayogY29k
ZUJsb2NrID0gZWRnZS0+bV9jb2RlQmxvY2suZ2V0KCk7Ci0gICAgCisKICAgICAvLyBJdCdzIHBv
c3NpYmxlIGZvciBzb21lb25lIHRvIGhvbGQgYSBwb2ludGVyIHRvIHRoZSBlZGdlIGFmdGVyIHRo
ZSBlZGdlIGhhcyBjbGVhcmVkIGl0cyB3ZWFrCiAgICAgLy8gcmVmZXJlbmNlIHRvIHRoZSBjb2Rl
QmxvY2suIEluIGEgY29uc2VydmF0aXZlIEdDIGxpa2Ugb3VycywgdGhhdCBjb3VsZCBoYXBwZW4g
YXQgcmFuZG9tIGZvcgogICAgIC8vIG5vIGdvb2QgcmVhc29uIGFuZCBpdCdzIFRvdGFsbHkgT0sg
KFRNKS4gU2VlIGZpbmFsaXplVW5jb25kaXRpb25hbGx5KCkgZm9yIHdoZXJlIHdlIGNsZWFyCkBA
IC03NSwxMSArNzYsMTEgQEAgdm9pZCBFeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlOjp2aXNpdENo
aQogICAgIH0KICAgICAKICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+
bV9sb2NrKTsKLSAgICAKLSAgICBpZiAoY29kZUJsb2NrLT5zaG91bGRWaXNpdFN0cm9uZ2x5KGxv
Y2tlcikpCisKKyAgICBpZiAoY29kZUJsb2NrLT5zaG91bGRWaXNpdFN0cm9uZ2x5KGxvY2tlciwg
dmlzaXRvcikpCiAgICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQoY29kZUJsb2NrKTsK
ICAgICAKLSAgICBpZiAoIXZtLmhlYXAuaXNNYXJrZWQoY29kZUJsb2NrKSkKKyAgICBpZiAoIXZp
c2l0b3IuaXNNYXJrZWQoY29kZUJsb2NrKSkKICAgICAgICAgdm0uZXhlY3V0YWJsZVRvQ29kZUJs
b2NrRWRnZXNXaXRoRmluYWxpemVycy5hZGQoZWRnZSk7CiAgICAgCiAgICAgaWYgKEpJVENvZGU6
OmlzT3B0aW1pemluZ0pJVChjb2RlQmxvY2stPmppdFR5cGUoKSkpIHsKQEAgLTExNyw3ICsxMTgs
MTAgQEAgdm9pZCBFeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlOjp2aXNpdENoaQogICAgIGVkZ2Ut
PnJ1bkNvbnN0cmFpbnQobG9ja2VyLCB2bSwgdmlzaXRvcik7CiB9CiAKLXZvaWQgRXhlY3V0YWJs
ZVRvQ29kZUJsb2NrRWRnZTo6dmlzaXRPdXRwdXRDb25zdHJhaW50cyhKU0NlbGwqIGNlbGwsIFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEV4ZWN1dGFibGVUb0Nv
ZGVCbG9ja0VkZ2UpOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBFeGVjdXRh
YmxlVG9Db2RlQmxvY2tFZGdlOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzSW1wbChKU0NlbGwqIGNl
bGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgVk0mIHZtID0gdmlzaXRvci52bSgpOwogICAg
IEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UqIGVkZ2UgPSBqc0Nhc3Q8RXhlY3V0YWJsZVRvQ29k
ZUJsb2NrRWRnZSo+KGNlbGwpOwpAQCAtMTI1LDYgKzEyOSw4IEBAIHZvaWQgRXhlY3V0YWJsZVRv
Q29kZUJsb2NrRWRnZTo6dmlzaXRPdXQKICAgICBlZGdlLT5ydW5Db25zdHJhaW50KE5vTG9ja2lu
Z05lY2Vzc2FyeSwgdm0sIHZpc2l0b3IpOwogfQogCitERUZJTkVfVklTSVRfT1VUUFVUX0NPTlNU
UkFJTlRTKEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UpOworCiB2b2lkIEV4ZWN1dGFibGVUb0Nv
ZGVCbG9ja0VkZ2U6OmZpbmFsaXplVW5jb25kaXRpb25hbGx5KFZNJiB2bSkKIHsKICAgICBDb2Rl
QmxvY2sqIGNvZGVCbG9jayA9IG1fY29kZUJsb2NrLmdldCgpOwpAQCAtMTg2LDE2ICsxOTIsMjEg
QEAgRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZTo6RXhlY3V0YWJsZVRvQwogewogfQogCi12b2lk
IEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2U6OnJ1bkNvbnN0cmFpbnQoY29uc3QgQ29uY3VycmVu
dEpTTG9ja2VyJiBsb2NrZXIsIFZNJiB2bSwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0
ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBFeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlOjpydW5D
b25zdHJhaW50KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYgbG9ja2VyLCBWTSYgdm0sIFZpc2l0
b3ImIHZpc2l0b3IpCiB7CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBtX2NvZGVCbG9jay5n
ZXQoKTsKICAgICAKICAgICBjb2RlQmxvY2stPnByb3BhZ2F0ZVRyYW5zaXRpb25zKGxvY2tlciwg
dmlzaXRvcik7CiAgICAgY29kZUJsb2NrLT5kZXRlcm1pbmVMaXZlbmVzcyhsb2NrZXIsIHZpc2l0
b3IpOwotICAgIAotICAgIGlmICh2bS5oZWFwLmlzTWFya2VkKGNvZGVCbG9jaykpCisKKyAgICBp
ZiAodmlzaXRvci5pc01hcmtlZChjb2RlQmxvY2spKQogICAgICAgICB2bS5leGVjdXRhYmxlVG9D
b2RlQmxvY2tFZGdlc1dpdGhDb25zdHJhaW50cy5yZW1vdmUodGhpcyk7CiB9CiAKK3RlbXBsYXRl
IHZvaWQgRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZTo6cnVuQ29uc3RyYWludChjb25zdCBDb25j
dXJyZW50SlNMb2NrZXImLCBWTSYsIEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZv
aWQgRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZTo6cnVuQ29uc3RyYWludChjb25zdCBDb25jdXJy
ZW50SlNMb2NrZXImLCBWTSYsIFNsb3RWaXNpdG9yJik7CisKKwogfSAvLyBuYW1lc3BhY2UgSlND
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGVjdXRhYmxlVG9Db2Rl
QmxvY2tFZGdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0V4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UuaAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UuaAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAx
OSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTgt
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTUzLDkgKzUzLDkgQEAgcHVibGljOgogICAgIERFQ0xBUkVfSU5GTzsK
IAogICAgIENvZGVCbG9jayogY29kZUJsb2NrKCkgY29uc3QgeyByZXR1cm4gbV9jb2RlQmxvY2su
Z2V0KCk7IH0KLSAgICAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNs
b3RWaXNpdG9yJik7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRPdXRwdXRDb25zdHJhaW50cyhKU0Nl
bGwqLCBTbG90VmlzaXRvciYpOworCisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKKyAgICBE
RUNMQVJFX1ZJU0lUX09VVFBVVF9DT05TVFJBSU5UUzsKICAgICB2b2lkIGZpbmFsaXplVW5jb25k
aXRpb25hbGx5KFZNJik7CiAgICAgCiAgICAgc3RhdGljIENvZGVCbG9jayogdW53cmFwKEV4ZWN1
dGFibGVUb0NvZGVCbG9ja0VkZ2UqIGVkZ2UpCkBAIC04MSw5ICs4MSw5IEBAIHByaXZhdGU6CiAg
ICAgdm9pZCBhY3RpdmF0ZSgpOwogICAgIHZvaWQgZGVhY3RpdmF0ZSgpOwogICAgIGJvb2wgaXNB
Y3RpdmUoKSBjb25zdDsKLSAgICAKLSAgICB2b2lkIHJ1bkNvbnN0cmFpbnQoY29uc3QgQ29uY3Vy
cmVudEpTTG9ja2VyJiwgVk0mLCBTbG90VmlzaXRvciYpOwotICAgIAorCisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCBydW5Db25zdHJhaW50KGNvbnN0IENvbmN1cnJlbnRKU0xv
Y2tlciYsIFZNJiwgVmlzaXRvciYpOworCiAgICAgV3JpdGVCYXJyaWVyPENvZGVCbG9jaz4gbV9j
b2RlQmxvY2s7CiB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0
QnlJZFZhcmlhbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9HZXRCeUlkVmFyaWFudC5jcHAJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkVmFyaWFudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMjAgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0xNTYsMTYgKzE1NiwyMyBAQCBib29sIEdldEJ5SWRWYXJpYW50OjphdHRlbXB0VG9NZXJnZShj
b25zCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgR2V0QnlJZFZhcmlhbnQ6OnZpc2l0QWdn
cmVnYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4K
K3ZvaWQgR2V0QnlJZFZhcmlhbnQ6OnZpc2l0QWdncmVnYXRlSW1wbChWaXNpdG9yJiB2aXNpdG9y
KQogewogICAgIG1faWRlbnRpZmllci52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKIH0KIAotdm9p
ZCBHZXRCeUlkVmFyaWFudDo6bWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCitERUZJ
TkVfVklTSVRfQUdHUkVHQVRFKEdldEJ5SWRWYXJpYW50KTsKKwordGVtcGxhdGU8dHlwZW5hbWUg
VmlzaXRvcj4KK3ZvaWQgR2V0QnlJZFZhcmlhbnQ6Om1hcmtJZkNoZWFwKFZpc2l0b3ImIHZpc2l0
b3IpCiB7CiAgICAgbV9zdHJ1Y3R1cmVTZXQubWFya0lmQ2hlYXAodmlzaXRvcik7CiB9CiAKK3Rl
bXBsYXRlIHZvaWQgR2V0QnlJZFZhcmlhbnQ6Om1hcmtJZkNoZWFwKEFic3RyYWN0U2xvdFZpc2l0
b3ImKTsKK3RlbXBsYXRlIHZvaWQgR2V0QnlJZFZhcmlhbnQ6Om1hcmtJZkNoZWFwKFNsb3RWaXNp
dG9yJik7CisKIGJvb2wgR2V0QnlJZFZhcmlhbnQ6OmZpbmFsaXplKFZNJiB2bSkKIHsKICAgICBp
ZiAoIW1fc3RydWN0dXJlU2V0LmlzU3RpbGxBbGl2ZSh2bSkpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFZhcmlhbnQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFZhcmlhbnQuaAkocmV2aXNpb24gMjczMTE5
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRWYXJpYW50LmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0LTIw
MjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0
LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC03Nyw4ICs3Nyw4IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgYXR0ZW1w
dFRvTWVyZ2UoY29uc3QgR2V0QnlJZFZhcmlhbnQmIG90aGVyKTsKICAgICAKLSAgICB2b2lkIHZp
c2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJik7Ci0gICAgdm9pZCBtYXJrSWZDaGVhcChTbG90Vmlz
aXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQUdHUkVHQVRFOworICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFZpc2l0b3I+IHZvaWQgbWFya0lmQ2hlYXAoVmlzaXRvciYpOwogICAgIGJvb2wgZmluYWxp
emUoVk0mKTsKICAgICAKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeVN0YXR1cy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5U3RhdHVzLmNwcAkocmV2
aXNpb24gMjczMTE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5U3Rh
dHVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTItMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTItMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTUzMCw3ICs1MzAsOCBAQCB2b2lkIEdldEJ5U3Rh
dHVzOjpmaWx0ZXIoY29uc3QgU3RydWN0dXJlCiAgICAgICAgIG1fc3RhdGUgPSBOb0luZm9ybWF0
aW9uOwogfQogCi12b2lkIEdldEJ5U3RhdHVzOjp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYg
dmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEdldEJ5U3RhdHVzOjp2
aXNpdEFnZ3JlZ2F0ZUltcGwoVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBpZiAoaXNNb2R1bGVO
YW1lc3BhY2UoKSkKICAgICAgICAgbV9tb2R1bGVOYW1lc3BhY2VEYXRhLT5tX2lkZW50aWZpZXIu
dmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7CkBAIC01MzgsMTIgKzUzOSwxOCBAQCB2b2lkIEdldEJ5
U3RhdHVzOjp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzCiAgICAgICAgIHZhcmlhbnQudmlzaXRBZ2dy
ZWdhdGUodmlzaXRvcik7CiB9CiAKLXZvaWQgR2V0QnlTdGF0dXM6Om1hcmtJZkNoZWFwKFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQorREVGSU5FX1ZJU0lUX0FHR1JFR0FURShHZXRCeVN0YXR1cyk7CisK
K3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEdldEJ5U3RhdHVzOjptYXJrSWZDaGVh
cChWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGZvciAoR2V0QnlJZFZhcmlhbnQmIHZhcmlhbnQg
OiBtX3ZhcmlhbnRzKQogICAgICAgICB2YXJpYW50Lm1hcmtJZkNoZWFwKHZpc2l0b3IpOwogfQog
Cit0ZW1wbGF0ZSB2b2lkIEdldEJ5U3RhdHVzOjptYXJrSWZDaGVhcChBYnN0cmFjdFNsb3RWaXNp
dG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEdldEJ5U3RhdHVzOjptYXJrSWZDaGVhcChTbG90VmlzaXRv
ciYpOworCiBib29sIEdldEJ5U3RhdHVzOjpmaW5hbGl6ZShWTSYgdm0pCiB7CiAgICAgZm9yIChH
ZXRCeUlkVmFyaWFudCYgdmFyaWFudCA6IG1fdmFyaWFudHMpIHsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeVN0YXR1cy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeVN0YXR1cy5oCShyZXZpc2lvbiAyNzMxMTkpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlTdGF0dXMuaAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTExOCw4ICsxMTgsOCBAQCBwdWJsaWM6CiAgICAgSlNNb2R1bGVFbnZpcm9ubWVu
dCogbW9kdWxlRW52aXJvbm1lbnQoKSBjb25zdCB7IHJldHVybiBtX21vZHVsZU5hbWVzcGFjZURh
dGEtPm1fbW9kdWxlRW52aXJvbm1lbnQ7IH0KICAgICBTY29wZU9mZnNldCBzY29wZU9mZnNldCgp
IGNvbnN0IHsgcmV0dXJuIG1fbW9kdWxlTmFtZXNwYWNlRGF0YS0+bV9zY29wZU9mZnNldDsgfQog
ICAgIAotICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImKTsKLSAgICB2b2lkIG1h
cmtJZkNoZWFwKFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9BR0dSRUdBVEU7Cisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCBtYXJrSWZDaGVhcChWaXNpdG9yJik7
CiAgICAgYm9vbCBmaW5hbGl6ZShWTSYpOyAvLyBSZXR1cm4gdHJ1ZSBpZiB0aGlzIGdldHMgdG8g
bGl2ZS4KIAogICAgIGJvb2wgYXBwZW5kVmFyaWFudChjb25zdCBHZXRCeUlkVmFyaWFudCYpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luQnlJZFN0YXR1cy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luQnlJZFN0YXR1cy5j
cHAJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9J
bkJ5SWRTdGF0dXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENv
cHlyaWdodCAoQykgMjAxOCBZdXN1a2UgU3V6dWtpIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+Lgot
ICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxOC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjUxLDEyICsyNTEsMTYgQEAgdm9p
ZCBJbkJ5SWRTdGF0dXM6OmZpbHRlcihjb25zdCBTdHJ1Y3R1cgogICAgICAgICBtX3N0YXRlID0g
Tm9JbmZvcm1hdGlvbjsKIH0KIAotdm9pZCBJbkJ5SWRTdGF0dXM6Om1hcmtJZkNoZWFwKFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSW5CeUlk
U3RhdHVzOjptYXJrSWZDaGVhcChWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGZvciAoSW5CeUlk
VmFyaWFudCYgdmFyaWFudCA6IG1fdmFyaWFudHMpCiAgICAgICAgIHZhcmlhbnQubWFya0lmQ2hl
YXAodmlzaXRvcik7CiB9CiAKK3RlbXBsYXRlIHZvaWQgSW5CeUlkU3RhdHVzOjptYXJrSWZDaGVh
cChBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEluQnlJZFN0YXR1czo6bWFy
a0lmQ2hlYXAoU2xvdFZpc2l0b3ImKTsKKwogYm9vbCBJbkJ5SWRTdGF0dXM6OmZpbmFsaXplKFZN
JiB2bSkKIHsKICAgICBmb3IgKEluQnlJZFZhcmlhbnQmIHZhcmlhbnQgOiBtX3ZhcmlhbnRzKSB7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5CeUlkU3RhdHVzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luQnlJZFN0YXR1cy5o
CShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5C
eUlkU3RhdHVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogQ29weXJp
Z2h0IChDKSAyMDE4IFl1c3VrZSBTdXp1a2kgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4uCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE4LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMDYsNyArMTA2LDcgQEAgcHVibGljOgog
ICAgIC8vIEF0dGVtcHRzIHRvIHJlZHVjZSB0aGUgc2V0IG9mIHZhcmlhbnRzIHRvIGZpdCB0aGUg
Z2l2ZW4gc3RydWN0dXJlIHNldC4gVGhpcyBtYXkgYmUgYXBwcm94aW1hdGUuCiAgICAgdm9pZCBm
aWx0ZXIoY29uc3QgU3RydWN0dXJlU2V0Jik7CiAgICAgCi0gICAgdm9pZCBtYXJrSWZDaGVhcChT
bG90VmlzaXRvciYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgbWFya0lm
Q2hlYXAoVmlzaXRvciYpOwogICAgIGJvb2wgZmluYWxpemUoVk0mKTsKIAogICAgIHZvaWQgZHVt
cChQcmludFN0cmVhbSYpIGNvbnN0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0luQnlJZFZhcmlhbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9JbkJ5SWRWYXJpYW50LmNwcAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luQnlJZFZhcmlhbnQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxOCBZdXN1a2UgU3V6dWtp
IDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+LgotICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOC0yMDIxIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtNjQsMTEgKzY0LDE1IEBAIGJvb2wgSW5CeUlkVmFyaWFudDo6YXR0ZW1wdFRvTWVyZ2Uo
Y29uc3QKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBJbkJ5SWRWYXJpYW50OjptYXJrSWZD
aGVhcChTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2
b2lkIEluQnlJZFZhcmlhbnQ6Om1hcmtJZkNoZWFwKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAg
bV9zdHJ1Y3R1cmVTZXQubWFya0lmQ2hlYXAodmlzaXRvcik7CiB9CiAKK3RlbXBsYXRlIHZvaWQg
SW5CeUlkVmFyaWFudDo6bWFya0lmQ2hlYXAoQWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxh
dGUgdm9pZCBJbkJ5SWRWYXJpYW50OjptYXJrSWZDaGVhcChTbG90VmlzaXRvciYpOworCiBib29s
IEluQnlJZFZhcmlhbnQ6OmZpbmFsaXplKFZNJiB2bSkKIHsKICAgICBpZiAoIW1fc3RydWN0dXJl
U2V0LmlzU3RpbGxBbGl2ZSh2bSkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvSW5CeUlkVmFyaWFudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9JbkJ5SWRWYXJpYW50LmgJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9JbkJ5SWRWYXJpYW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NiArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDE4IFl1c3VrZSBTdXp1a2kgPHV0YXRh
bmUudGVhQGdtYWlsLmNvbT4uCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01
Nyw3ICs1Nyw3IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgYXR0ZW1wdFRvTWVyZ2UoY29uc3QgSW5C
eUlkVmFyaWFudCYgb3RoZXIpOwogICAgIAotICAgIHZvaWQgbWFya0lmQ2hlYXAoU2xvdFZpc2l0
b3ImKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIG1hcmtJZkNoZWFwKFZp
c2l0b3ImKTsKICAgICBib29sIGZpbmFsaXplKFZNJik7CiAKICAgICB2b2lkIGR1bXAoUHJpbnRT
dHJlYW0mKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnRl
cm5hbEZ1bmN0aW9uQWxsb2NhdGlvblByb2ZpbGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW50ZXJuYWxGdW5jdGlvbkFsbG9jYXRpb25Qcm9maWxlLmgJ
KHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnRl
cm5hbEZ1bmN0aW9uQWxsb2NhdGlvblByb2ZpbGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM5LDcg
KzM5LDcgQEAgcHVibGljOgogICAgIFN0cnVjdHVyZSogY3JlYXRlQWxsb2NhdGlvblN0cnVjdHVy
ZUZyb21CYXNlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU0NlbGwqIG93bmVyLCBKU09iamVjdCog
cHJvdG90eXBlLCBTdHJ1Y3R1cmUqIGJhc2UpOwogCiAgICAgdm9pZCBjbGVhcigpIHsgbV9zdHJ1
Y3R1cmUuY2xlYXIoKTsgfQotICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImIHZp
c2l0b3IpIHsgdmlzaXRvci5hcHBlbmQobV9zdHJ1Y3R1cmUpOyB9CisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVmlzaXRvcj4gdm9pZCB2aXNpdEFnZ3JlZ2F0ZShWaXNpdG9yJiB2aXNpdG9yKSB7IHZp
c2l0b3IuYXBwZW5kKG1fc3RydWN0dXJlKTsgfQogCiBwcml2YXRlOgogICAgIFdyaXRlQmFycmll
cjxTdHJ1Y3R1cmU+IG1fc3RydWN0dXJlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL09iamVjdEFsbG9jYXRpb25Qcm9maWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL09iamVjdEFsbG9jYXRpb25Qcm9maWxlLmgJKHJldmlzaW9u
IDI3MzExOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PYmplY3RBbGxvY2F0
aW9uUHJvZmlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjQsNyArNjQsOCBAQCBwcm90ZWN0ZWQ6
CiAgICAgICAgIEFTU0VSVChpc051bGwoKSk7CiAgICAgfQogCi0gICAgdm9pZCB2aXNpdEFnZ3Jl
Z2F0ZShTbG90VmlzaXRvciYgdmlzaXRvcikKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
PgorICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoVmlzaXRvciYgdmlzaXRvcikKICAgICB7CiAgICAg
ICAgIHZpc2l0b3IuYXBwZW5kKG1fc3RydWN0dXJlKTsKICAgICB9CkBAIC0xMTAsNyArMTExLDgg
QEAgcHVibGljOgogICAgICAgICBBU1NFUlQoaXNOdWxsKCkpOwogICAgIH0KIAotICAgIHZvaWQg
dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgVmlzaXRvcj4KKyAgICB2b2lkIHZpc2l0QWdncmVnYXRlKFZpc2l0b3ImIHZpc2l0b3IpCiAg
ICAgewogICAgICAgICBCYXNlOjp2aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKICAgICAgICAgdmlz
aXRvci5hcHBlbmQobV9wcm90b3R5cGUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwCShyZXZpc2lvbiAyNzMxMTkp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
NC0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMzU4LDcgKzM1OCw4IEBAIGJvb2wgUG9seW1vcnBoaWNBY2Nl
c3M6OnZpc2l0V2VhayhWTSYgdm0KICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBQb2x5bW9y
cGhpY0FjY2Vzczo6cHJvcGFnYXRlVHJhbnNpdGlvbnMoU2xvdFZpc2l0b3ImIHZpc2l0b3IpIGNv
bnN0Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgorYm9vbCBQb2x5bW9ycGhpY0FjY2Vzczo6
cHJvcGFnYXRlVHJhbnNpdGlvbnMoVmlzaXRvciYgdmlzaXRvcikgY29uc3QKIHsKICAgICBib29s
IHJlc3VsdCA9IHRydWU7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemUoKTsgKytp
KQpAQCAtMzY2LDEyICszNjcsMTggQEAgYm9vbCBQb2x5bW9ycGhpY0FjY2Vzczo6cHJvcGFnYXRl
VHJhbnNpdAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQgUG9seW1vcnBoaWNBY2Nlc3M6
OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGUgYm9vbCBQb2x5
bW9ycGhpY0FjY2Vzczo6cHJvcGFnYXRlVHJhbnNpdGlvbnMoQWJzdHJhY3RTbG90VmlzaXRvciYp
IGNvbnN0OwordGVtcGxhdGUgYm9vbCBQb2x5bW9ycGhpY0FjY2Vzczo6cHJvcGFnYXRlVHJhbnNp
dGlvbnMoU2xvdFZpc2l0b3ImKSBjb25zdDsKKwordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4K
K3ZvaWQgUG9seW1vcnBoaWNBY2Nlc3M6OnZpc2l0QWdncmVnYXRlSW1wbChWaXNpdG9yJiB2aXNp
dG9yKQogewogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplKCk7ICsraSkKICAgICAg
ICAgYXQoaSkudmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7CiB9CiAKK0RFRklORV9WSVNJVF9BR0dS
RUdBVEUoUG9seW1vcnBoaWNBY2Nlc3MpOworCiB2b2lkIFBvbHltb3JwaGljQWNjZXNzOjpkdW1w
KFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiB7CiAgICAgb3V0LnByaW50KFJhd1BvaW50ZXIodGhp
cyksICI6WyIpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3Jw
aGljQWNjZXNzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1BvbHltb3JwaGljQWNjZXNzLmgJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNC0yMDIwIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MTUyLDE0ICsxNTIsMTQgQEAgcHVibGljOgogICAgIGNvbnN0IEFjY2Vzc0Nhc2UmIGF0KHVuc2ln
bmVkIGkpIGNvbnN0IHsgcmV0dXJuICptX2xpc3RbaV07IH0KICAgICBjb25zdCBBY2Nlc3NDYXNl
JiBvcGVyYXRvcltdKHVuc2lnbmVkIGkpIGNvbnN0IHsgcmV0dXJuICptX2xpc3RbaV07IH0KIAot
ICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lU
X0FHR1JFR0FURTsKIAogICAgIC8vIElmIHRoaXMgcmV0dXJucyBmYWxzZSB0aGVuIHdlIGFyZSBy
ZXF1ZXN0aW5nIGEgcmVzZXQgb2YgdGhlIG93bmluZyBTdHJ1Y3R1cmVTdHViSW5mby4KICAgICBi
b29sIHZpc2l0V2VhayhWTSYpIGNvbnN0OwogICAgIAogICAgIC8vIFRoaXMgcmV0dXJucyB0cnVl
IGlmIGl0IGhhcyBtYXJrZWQgZXZlcnl0aGluZyBpdCB3aWxsIGV2ZXIgbWFya2VkLiBUaGlzIGNh
biBiZSB1c2VkIGFzIGFuCiAgICAgLy8gb3B0aW1pemF0aW9uIHRvIHRoZW4gYXZvaWQgY2FsbGlu
ZyB0aGlzIG1ldGhvZCBhZ2FpbiBkdXJpbmcgdGhlIGZpeHBvaW50LgotICAgIGJvb2wgcHJvcGFn
YXRlVHJhbnNpdGlvbnMoU2xvdFZpc2l0b3ImKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBWaXNpdG9yPiBib29sIHByb3BhZ2F0ZVRyYW5zaXRpb25zKFZpc2l0b3ImKSBjb25zdDsKIAog
ICAgIHZvaWQgYWJvdXRUb0RpZSgpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvUHV0QnlJZFN0YXR1cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuY3BwCShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTkgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0zOTYsMTIgKzM5NiwxNiBAQCBQdXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OnNs
b3dWZXJzaW9uCiAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMobWFrZXNDYWxscygpID8gTWFrZXND
YWxscyA6IFRha2VzU2xvd1BhdGgpOwogfQogCi12b2lkIFB1dEJ5SWRTdGF0dXM6Om1hcmtJZkNo
ZWFwKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3Zv
aWQgUHV0QnlJZFN0YXR1czo6bWFya0lmQ2hlYXAoVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBm
b3IgKFB1dEJ5SWRWYXJpYW50JiB2YXJpYW50IDogbV92YXJpYW50cykKICAgICAgICAgdmFyaWFu
dC5tYXJrSWZDaGVhcCh2aXNpdG9yKTsKIH0KIAordGVtcGxhdGUgdm9pZCBQdXRCeUlkU3RhdHVz
OjptYXJrSWZDaGVhcChBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIFB1dEJ5
SWRTdGF0dXM6Om1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJik7CisKIGJvb2wgUHV0QnlJZFN0YXR1
czo6ZmluYWxpemUoVk0mIHZtKQogewogICAgIGZvciAoUHV0QnlJZFZhcmlhbnQmIHZhcmlhbnQg
OiBtX3ZhcmlhbnRzKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0
QnlJZFN0YXR1cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9QdXRCeUlkU3RhdHVzLmgJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMTcsNyAr
MTE3LDcgQEAgcHVibGljOgogICAgIGNvbnN0IFB1dEJ5SWRWYXJpYW50JiBhdChzaXplX3QgaW5k
ZXgpIGNvbnN0IHsgcmV0dXJuIG1fdmFyaWFudHNbaW5kZXhdOyB9CiAgICAgY29uc3QgUHV0QnlJ
ZFZhcmlhbnQmIG9wZXJhdG9yW10oc2l6ZV90IGluZGV4KSBjb25zdCB7IHJldHVybiBhdChpbmRl
eCk7IH0KICAgICAKLSAgICB2b2lkIG1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJik7CisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCBtYXJrSWZDaGVhcChWaXNpdG9yJik7CiAgICAg
Ym9vbCBmaW5hbGl6ZShWTSYpOwogICAgIAogICAgIHZvaWQgbWVyZ2UoY29uc3QgUHV0QnlJZFN0
YXR1cyYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJp
YW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0
QnlJZFZhcmlhbnQuY3BwCShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNC0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYyLDEz
ICsyNjIsMTcgQEAgYm9vbCBQdXRCeUlkVmFyaWFudDo6YXR0ZW1wdFRvTWVyZ2VUcmFucwogICAg
IHJldHVybiB0cnVlOwogfQogCi12b2lkIFB1dEJ5SWRWYXJpYW50OjptYXJrSWZDaGVhcChTbG90
VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFB1dEJ5
SWRWYXJpYW50OjptYXJrSWZDaGVhcChWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIG1fb2xkU3Ry
dWN0dXJlLm1hcmtJZkNoZWFwKHZpc2l0b3IpOwogICAgIGlmIChtX25ld1N0cnVjdHVyZSkKICAg
ICAgICAgbV9uZXdTdHJ1Y3R1cmUtPm1hcmtJZkNoZWFwKHZpc2l0b3IpOwogfQogCit0ZW1wbGF0
ZSB2b2lkIFB1dEJ5SWRWYXJpYW50OjptYXJrSWZDaGVhcChBYnN0cmFjdFNsb3RWaXNpdG9yJik7
Cit0ZW1wbGF0ZSB2b2lkIFB1dEJ5SWRWYXJpYW50OjptYXJrSWZDaGVhcChTbG90VmlzaXRvciYp
OworCiBib29sIFB1dEJ5SWRWYXJpYW50OjpmaW5hbGl6ZShWTSYgdm0pCiB7CiAgICAgaWYgKCFt
X29sZFN0cnVjdHVyZS5pc1N0aWxsQWxpdmUodm0pKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmgJKHJldmlzaW9uIDI3MzExOSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkVmFyaWFudC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNC0yMDE4IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMTMyLDcgKzEzMiw3IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgYXR0ZW1wdFRv
TWVyZ2UoY29uc3QgUHV0QnlJZFZhcmlhbnQmIG90aGVyKTsKICAgICAKLSAgICB2b2lkIG1hcmtJ
ZkNoZWFwKFNsb3RWaXNpdG9yJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9p
ZCBtYXJrSWZDaGVhcChWaXNpdG9yJik7CiAgICAgYm9vbCBmaW5hbGl6ZShWTSYpOwogICAgIAog
ICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1JlY29yZGVkU3RhdHVzZXMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9SZWNvcmRlZFN0YXR1c2VzLmNwcAkocmV2aXNpb24g
MjczMTE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1JlY29yZGVkU3RhdHVz
ZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDIsNyArMTAyLDggQEAgU2V0UHJpdmF0ZUJyYW5k
U3RhdHVzKiBSZWNvcmRlZFN0YXR1c2VzOgogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQg
UmVjb3JkZWRTdGF0dXNlczo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0
ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBSZWNvcmRlZFN0YXR1c2VzOjp2aXNpdEFn
Z3JlZ2F0ZUltcGwoVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBmb3IgKGF1dG8mIHBhaXIgOiBn
ZXRzKQogICAgICAgICBwYWlyLnNlY29uZC0+dmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7CkBAIC0x
MTQsNyArMTE1LDEwIEBAIHZvaWQgUmVjb3JkZWRTdGF0dXNlczo6dmlzaXRBZ2dyZWdhdGUoU2wK
ICAgICAgICAgcGFpci5zZWNvbmQtPnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOwogfQogCi12b2lk
IFJlY29yZGVkU3RhdHVzZXM6Om1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorREVG
SU5FX1ZJU0lUX0FHR1JFR0FURShSZWNvcmRlZFN0YXR1c2VzKTsKKwordGVtcGxhdGU8dHlwZW5h
bWUgVmlzaXRvcj4KK3ZvaWQgUmVjb3JkZWRTdGF0dXNlczo6bWFya0lmQ2hlYXAoVmlzaXRvciYg
dmlzaXRvcikKIHsKICAgICBmb3IgKGF1dG8mIHBhaXIgOiBnZXRzKQogICAgICAgICBwYWlyLnNl
Y29uZC0+bWFya0lmQ2hlYXAodmlzaXRvcik7CkBAIC0xMzAsNiArMTM0LDkgQEAgdm9pZCBSZWNv
cmRlZFN0YXR1c2VzOjptYXJrSWZDaGVhcChTbG90VgogICAgICAgICBwYWlyLnNlY29uZC0+bWFy
a0lmQ2hlYXAodmlzaXRvcik7CiB9CiAKK3RlbXBsYXRlIHZvaWQgUmVjb3JkZWRTdGF0dXNlczo6
bWFya0lmQ2hlYXAoQWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBSZWNvcmRl
ZFN0YXR1c2VzOjptYXJrSWZDaGVhcChTbG90VmlzaXRvciYpOworCiB2b2lkIFJlY29yZGVkU3Rh
dHVzZXM6OmZpbmFsaXplV2l0aG91dERlbGV0aW5nKFZNJiB2bSkKIHsKICAgICAvLyBUaGlzIHZh
cmlhbnQgb2YgZmluYWxpemUgZ2V0cyBjYWxsZWQgZnJvbSB3aXRoaW4gZ3JhcGggc2FmZXBvaW50
cyAtLSBzbyB0aGVyZSBtYXkgYmUgREZHIElSIGluCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvUmVjb3JkZWRTdGF0dXNlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9SZWNvcmRlZFN0YXR1c2VzLmgJKHJldmlzaW9uIDI3MzExOSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9SZWNvcmRlZFN0YXR1c2VzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE4LTIw
MjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE4
LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC01NCw4ICs1NCw4IEBAIHN0cnVjdCBSZWNvcmRlZFN0YXR1c2VzIHsK
ICAgICBDaGVja1ByaXZhdGVCcmFuZFN0YXR1cyogYWRkQ2hlY2tQcml2YXRlQnJhbmRTdGF0dXMo
Y29uc3QgQ29kZU9yaWdpbiYsIGNvbnN0IENoZWNrUHJpdmF0ZUJyYW5kU3RhdHVzJik7CiAgICAg
U2V0UHJpdmF0ZUJyYW5kU3RhdHVzKiBhZGRTZXRQcml2YXRlQnJhbmRTdGF0dXMoY29uc3QgQ29k
ZU9yaWdpbiYsIGNvbnN0IFNldFByaXZhdGVCcmFuZFN0YXR1cyYpOwogICAgIAotICAgIHZvaWQg
dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImKTsKLSAgICB2b2lkIG1hcmtJZkNoZWFwKFNsb3RW
aXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9BR0dSRUdBVEU7CisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVmlzaXRvcj4gdm9pZCBtYXJrSWZDaGVhcChWaXNpdG9yJik7CiAgICAgCiAgICAgdm9p
ZCBmaW5hbGl6ZVdpdGhvdXREZWxldGluZyhWTSYpOwogICAgIHZvaWQgZmluYWxpemUoVk0mKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TZXRQcml2YXRlQnJhbmRTdGF0
dXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TZXRQ
cml2YXRlQnJhbmRTdGF0dXMuY3BwCShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvU2V0UHJpdmF0ZUJyYW5kU3RhdHVzLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjM1LDE4ICsyMzUsMjUgQEAgQ2FjaGVhYmxlSWRlbnRpZmllciBTZXRQcml2YXRlQnJh
bmRTdGF0dQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQgU2V0UHJpdmF0ZUJyYW5kU3Rh
dHVzOjp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVu
YW1lIFZpc2l0b3I+Cit2b2lkIFNldFByaXZhdGVCcmFuZFN0YXR1czo6dmlzaXRBZ2dyZWdhdGVJ
bXBsKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgZm9yIChTZXRQcml2YXRlQnJhbmRWYXJpYW50
JiB2YXJpYW50IDogbV92YXJpYW50cykKICAgICAgICAgdmFyaWFudC52aXNpdEFnZ3JlZ2F0ZSh2
aXNpdG9yKTsKIH0KIAotdm9pZCBTZXRQcml2YXRlQnJhbmRTdGF0dXM6Om1hcmtJZkNoZWFwKFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQorREVGSU5FX1ZJU0lUX0FHR1JFR0FURShTZXRQcml2YXRlQnJh
bmRTdGF0dXMpOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBTZXRQcml2YXRl
QnJhbmRTdGF0dXM6Om1hcmtJZkNoZWFwKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgZm9yIChT
ZXRQcml2YXRlQnJhbmRWYXJpYW50JiB2YXJpYW50IDogbV92YXJpYW50cykKICAgICAgICAgdmFy
aWFudC5tYXJrSWZDaGVhcCh2aXNpdG9yKTsKIH0KIAordGVtcGxhdGUgdm9pZCBTZXRQcml2YXRl
QnJhbmRTdGF0dXM6Om1hcmtJZkNoZWFwKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRl
IHZvaWQgU2V0UHJpdmF0ZUJyYW5kU3RhdHVzOjptYXJrSWZDaGVhcChTbG90VmlzaXRvciYpOwor
CiBib29sIFNldFByaXZhdGVCcmFuZFN0YXR1czo6ZmluYWxpemUoVk0mIHZtKQogewogICAgIGZv
ciAoYXV0byYgdmFyaWFudCA6IG1fdmFyaWFudHMpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9TZXRQcml2YXRlQnJhbmRTdGF0dXMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU2V0UHJpdmF0ZUJyYW5kU3RhdHVzLmgJKHJldmlz
aW9uIDI3MzExOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TZXRQcml2YXRl
QnJhbmRTdGF0dXMuaAkod29ya2luZyBjb3B5KQpAQCAtODMsOCArODMsOCBAQCBwdWJsaWM6CiAg
ICAgLy8gQXR0ZW1wdHMgdG8gcmVkdWNlIHRoZSBzZXQgb2YgdmFyaWFudHMgdG8gZml0IHRoZSBn
aXZlbiBzdHJ1Y3R1cmUgc2V0LiBUaGlzIG1heSBiZSBhcHByb3hpbWF0ZS4KICAgICB2b2lkIGZp
bHRlcihjb25zdCBTdHJ1Y3R1cmVTZXQmKTsKIAotICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xv
dFZpc2l0b3ImKTsKLSAgICB2b2lkIG1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJik7CisgICAgREVD
TEFSRV9WSVNJVF9BR0dSRUdBVEU7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9p
ZCBtYXJrSWZDaGVhcChWaXNpdG9yJik7CiAgICAgYm9vbCBmaW5hbGl6ZShWTSYpOwogCiAgICAg
Ym9vbCBhcHBlbmRWYXJpYW50KGNvbnN0IFNldFByaXZhdGVCcmFuZFZhcmlhbnQmKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TZXRQcml2YXRlQnJhbmRWYXJpYW50LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU2V0UHJpdmF0
ZUJyYW5kVmFyaWFudC5jcHAJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9TZXRQcml2YXRlQnJhbmRWYXJpYW50LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIwLTIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDIxIElnYWxpYSBTLkEuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC01NCw3ICs1NCw4IEBAIGJv
b2wgU2V0UHJpdmF0ZUJyYW5kVmFyaWFudDo6YXR0ZW1wdFRvTWUKICAgICByZXR1cm4gdHJ1ZTsK
IH0KIAotdm9pZCBTZXRQcml2YXRlQnJhbmRWYXJpYW50OjptYXJrSWZDaGVhcChTbG90VmlzaXRv
ciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFNldFByaXZhdGVC
cmFuZFZhcmlhbnQ6Om1hcmtJZkNoZWFwKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgaWYgKG1f
b2xkU3RydWN0dXJlKQogICAgICAgICBtX29sZFN0cnVjdHVyZS0+bWFya0lmQ2hlYXAodmlzaXRv
cik7CkBAIC02Miw2ICs2Myw5IEBAIHZvaWQgU2V0UHJpdmF0ZUJyYW5kVmFyaWFudDo6bWFya0lm
Q2hlYXAKICAgICAgICAgbV9uZXdTdHJ1Y3R1cmUtPm1hcmtJZkNoZWFwKHZpc2l0b3IpOwogfQog
Cit0ZW1wbGF0ZSB2b2lkIFNldFByaXZhdGVCcmFuZFZhcmlhbnQ6Om1hcmtJZkNoZWFwKEFic3Ry
YWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgU2V0UHJpdmF0ZUJyYW5kVmFyaWFudDo6
bWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImKTsKKwogYm9vbCBTZXRQcml2YXRlQnJhbmRWYXJpYW50
OjpmaW5hbGl6ZShWTSYgdm0pCiB7CiAgICAgaWYgKCF2bS5oZWFwLmlzTWFya2VkKG1fb2xkU3Ry
dWN0dXJlKSkKQEAgLTcxLDExICs3NSwxNCBAQCBib29sIFNldFByaXZhdGVCcmFuZFZhcmlhbnQ6
OmZpbmFsaXplKFZNCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgU2V0UHJpdmF0ZUJyYW5k
VmFyaWFudDo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0
eXBlbmFtZSBWaXNpdG9yPgordm9pZCBTZXRQcml2YXRlQnJhbmRWYXJpYW50Ojp2aXNpdEFnZ3Jl
Z2F0ZUltcGwoVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBtX2lkZW50aWZpZXIudmlzaXRBZ2dy
ZWdhdGUodmlzaXRvcik7CiB9CiAKK0RFRklORV9WSVNJVF9BR0dSRUdBVEUoU2V0UHJpdmF0ZUJy
YW5kVmFyaWFudCk7CisKIHZvaWQgU2V0UHJpdmF0ZUJyYW5kVmFyaWFudDo6ZHVtcChQcmludFN0
cmVhbSYgb3V0KSBjb25zdAogewogICAgIGR1bXBJbkNvbnRleHQob3V0LCBudWxscHRyKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TZXRQcml2YXRlQnJhbmRWYXJpYW50
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NldFByaXZh
dGVCcmFuZFZhcmlhbnQuaAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1NldFByaXZhdGVCcmFuZFZhcmlhbnQuaAkod29ya2luZyBjb3B5KQpAQCAt
NDUsOCArNDUsOCBAQCBwdWJsaWM6CiAKICAgICBib29sIGF0dGVtcHRUb01lcmdlKGNvbnN0IFNl
dFByaXZhdGVCcmFuZFZhcmlhbnQmIG90aGVyKTsKIAotICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUo
U2xvdFZpc2l0b3ImKTsKLSAgICB2b2lkIG1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJik7CisgICAg
REVDTEFSRV9WSVNJVF9BR0dSRUdBVEU7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4g
dm9pZCBtYXJrSWZDaGVhcChWaXNpdG9yJik7CiAgICAgYm9vbCBmaW5hbGl6ZShWTSYpOwogCiAg
ICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU2V0LmNwcAkocmV2aXNpb24gMjczMTE5KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVNldC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTgg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIw
MjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0zMSwxMiArMzEsMTYgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLXZvaWQg
U3RydWN0dXJlU2V0OjptYXJrSWZDaGVhcChTbG90VmlzaXRvciYgdmlzaXRvcikgY29uc3QKK3Rl
bXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFN0cnVjdHVyZVNldDo6bWFya0lmQ2hlYXAo
VmlzaXRvciYgdmlzaXRvcikgY29uc3QKIHsKICAgICBmb3IgKFN0cnVjdHVyZSogc3RydWN0dXJl
IDogKnRoaXMpCiAgICAgICAgIHN0cnVjdHVyZS0+bWFya0lmQ2hlYXAodmlzaXRvcik7CiB9CiAK
K3RlbXBsYXRlIHZvaWQgU3RydWN0dXJlU2V0OjptYXJrSWZDaGVhcChBYnN0cmFjdFNsb3RWaXNp
dG9yJikgY29uc3Q7Cit0ZW1wbGF0ZSB2b2lkIFN0cnVjdHVyZVNldDo6bWFya0lmQ2hlYXAoU2xv
dFZpc2l0b3ImKSBjb25zdDsKKwogYm9vbCBTdHJ1Y3R1cmVTZXQ6OmlzU3RpbGxBbGl2ZShWTSYg
dm0pIGNvbnN0CiB7CiAgICAgZm9yIChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA6ICp0aGlzKSB7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU2V0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVNldC5oCShy
ZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0
dXJlU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDExLTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDExLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01NCw3ICs1NCw3IEBAIHB1YmxpYzoKICAgICAg
ICAgcmV0dXJuIG9ubHlFbnRyeSgpOwogICAgIH0KIAotICAgIHZvaWQgbWFya0lmQ2hlYXAoU2xv
dFZpc2l0b3ImKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIG1h
cmtJZkNoZWFwKFZpc2l0b3ImKSBjb25zdDsKICAgICBib29sIGlzU3RpbGxBbGl2ZShWTSYpIGNv
bnN0OwogICAgIAogICAgIHZvaWQgZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYsIER1bXBDb250
ZXh0KikgY29uc3Q7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0
dXJlU3R1YkluZm8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMjAgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0yOTYsNyArMjk2LDggQEAgdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6cmVzZXQoY29u
c3QgQ29uYwogICAgIHNldENhY2hlVHlwZShsb2NrZXIsIENhY2hlVHlwZTo6VW5zZXQpOwogfQog
Ci12b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYgdmlz
aXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFN0cnVjdHVyZVN0dWJJbmZv
Ojp2aXNpdEFnZ3JlZ2F0ZUltcGwoVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB7CiAgICAgICAg
IGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9idWZmZXJlZFN0cnVjdHVyZXNMb2NrKTsKQEAgLTMy
Miw2ICszMjMsOCBAQCB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjp2aXNpdEFnZ3JlZ2F0ZShTCiAg
ICAgcmV0dXJuOwogfQogCitERUZJTkVfVklTSVRfQUdHUkVHQVRFKFN0cnVjdHVyZVN0dWJJbmZv
KTsKKwogdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6dmlzaXRXZWFrUmVmZXJlbmNlcyhjb25zdCBD
b25jdXJyZW50SlNMb2NrZXJCYXNlJiBsb2NrZXIsIENvZGVCbG9jayogY29kZUJsb2NrKQogewog
ICAgIFZNJiB2bSA9IGNvZGVCbG9jay0+dm0oKTsKQEAgLTM1Miw3ICszNTUsOCBAQCB2b2lkIFN0
cnVjdHVyZVN0dWJJbmZvOjp2aXNpdFdlYWtSZWZlcmVuCiAgICAgcmVzZXRCeUdDID0gdHJ1ZTsK
IH0KIAotYm9vbCBTdHJ1Y3R1cmVTdHViSW5mbzo6cHJvcGFnYXRlVHJhbnNpdGlvbnMoU2xvdFZp
c2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgorYm9vbCBTdHJ1Y3R1
cmVTdHViSW5mbzo6cHJvcGFnYXRlVHJhbnNpdGlvbnMoVmlzaXRvciYgdmlzaXRvcikKIHsKICAg
ICBzd2l0Y2ggKG1fY2FjaGVUeXBlKSB7CiAgICAgY2FzZSBDYWNoZVR5cGU6OlVuc2V0OgpAQCAt
MzcxLDYgKzM3NSw5IEBAIGJvb2wgU3RydWN0dXJlU3R1YkluZm86OnByb3BhZ2F0ZVRyYW5zaXQK
ICAgICByZXR1cm4gdHJ1ZTsKIH0KIAordGVtcGxhdGUgYm9vbCBTdHJ1Y3R1cmVTdHViSW5mbzo6
cHJvcGFnYXRlVHJhbnNpdGlvbnMoQWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgYm9v
bCBTdHJ1Y3R1cmVTdHViSW5mbzo6cHJvcGFnYXRlVHJhbnNpdGlvbnMoU2xvdFZpc2l0b3ImKTsK
KwogU3R1YkluZm9TdW1tYXJ5IFN0cnVjdHVyZVN0dWJJbmZvOjpzdW1tYXJ5KFZNJiB2bSkgY29u
c3QKIHsKICAgICBTdHViSW5mb1N1bW1hcnkgdGFrZXNTbG93UGF0aCA9IFN0dWJJbmZvU3VtbWFy
eTo6VGFrZXNTbG93UGF0aDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9T
dHJ1Y3R1cmVTdHViSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAyMCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAyMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTkzLDE0ICs5MywxNCBAQCBwdWJsaWM6CiAgICAgdm9pZCBkZXJlZigpOwogICAgIHZv
aWQgYWJvdXRUb0RpZSgpOwogCi0gICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYp
OworICAgIERFQ0xBUkVfVklTSVRfQUdHUkVHQVRFOwogCiAgICAgLy8gQ2hlY2sgaWYgdGhlIHN0
dWIgaGFzIHdlYWsgcmVmZXJlbmNlcyB0aGF0IGFyZSBkZWFkLiBJZiBpdCBkb2VzLCB0aGVuIGl0
IHJlc2V0cyBpdHNlbGYsCiAgICAgLy8gZWl0aGVyIGVudGlyZWx5IG9yIGp1c3QgZW5vdWdoIHRv
IGVuc3VyZSB0aGF0IHRob3NlIGRlYWQgcG9pbnRlcnMgZG9uJ3QgZ2V0IHVzZWQgYW55bW9yZS4K
ICAgICB2b2lkIHZpc2l0V2Vha1JlZmVyZW5jZXMoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyQmFz
ZSYsIENvZGVCbG9jayopOwogICAgIAogICAgIC8vIFRoaXMgcmV0dXJucyB0cnVlIGlmIGl0IGhh
cyBtYXJrZWQgZXZlcnl0aGluZyB0aGF0IGl0IHdpbGwgZXZlciBtYXJrLgotICAgIGJvb2wgcHJv
cGFnYXRlVHJhbnNpdGlvbnMoU2xvdFZpc2l0b3ImKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPiBib29sIHByb3BhZ2F0ZVRyYW5zaXRpb25zKFZpc2l0b3ImKTsKICAgICAgICAgCiAg
ICAgU3R1YkluZm9TdW1tYXJ5IHN1bW1hcnkoVk0mKSBjb25zdDsKICAgICAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNw
cAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Vu
bGlua2VkQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxOSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTc1LDcgKzc1LDggQEAgVW5s
aW5rZWRDb2RlQmxvY2s6OlVubGlua2VkQ29kZUJsb2NrKFZNJgogICAgIH0KIH0KIAotdm9pZCBV
bmxpbmtlZENvZGVCbG9jazo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9y
JiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgVW5saW5rZWRDb2Rl
QmxvY2s6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikK
IHsKICAgICBVbmxpbmtlZENvZGVCbG9jayogdGhpc09iamVjdCA9IGpzQ2FzdDxVbmxpbmtlZENv
ZGVCbG9jayo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVj
dCwgaW5mbygpKTsKQEAgLTk0LDYgKzk1LDggQEAgdm9pZCBVbmxpbmtlZENvZGVCbG9jazo6dmlz
aXRDaGlsZHJlbihKUwogICAgIHZpc2l0b3IucmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKGV4dHJh
TWVtb3J5KTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKFVubGlua2VkQ29kZUJsb2NrKTsK
Kwogc2l6ZV90IFVubGlua2VkQ29kZUJsb2NrOjplc3RpbWF0ZWRTaXplKEpTQ2VsbCogY2VsbCwg
Vk0mIHZtKQogewogICAgIFVubGlua2VkQ29kZUJsb2NrKiB0aGlzT2JqZWN0ID0ganNDYXN0PFVu
bGlua2VkQ29kZUJsb2NrKj4oY2VsbCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaAkocmV2aXNpb24gMjczMTE5KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTkg
QXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIw
MjEgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC00MzEsNyArNDMxLDcgQEAgcHJpdmF0ZToKICAgICBSZWZDb3VudGVkQXJy
YXk8RXhwcmVzc2lvblJhbmdlSW5mbz4gbV9leHByZXNzaW9uSW5mbzsKIAogcHJvdGVjdGVkOgot
ICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAg
ICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogICAgIHN0YXRpYyBzaXplX3QgZXN0aW1hdGVkU2l6
ZShKU0NlbGwqLCBWTSYpOwogCiBwdWJsaWM6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5j
cHAJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9V
bmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTkgQXBwbGUgSW5jLiBBbGwgUmlnaHRz
IFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjEgQXBwbGUgSW5jLiBBbGwgUmln
aHRzIFJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xNDYsNyAr
MTQ2LDggQEAgdm9pZCBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6ZGVzdHJveQogICAgIHN0
YXRpY19jYXN0PFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKj4oY2VsbCktPn5VbmxpbmtlZEZ1
bmN0aW9uRXhlY3V0YWJsZSgpOwogfQogCi12b2lkIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxl
Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1w
bGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6
dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAg
IFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiB0aGlzT2JqZWN0ID0ganNDYXN0PFVubGlua2Vk
RnVuY3Rpb25FeGVjdXRhYmxlKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklU
Uyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtMTY5LDYgKzE3MCw4IEBAIHZvaWQgVW5saW5rZWRG
dW5jdGlvbkV4ZWN1dGFibGU6OnZpc2l0Q2gKICAgICB9CiB9CiAKK0RFRklORV9WSVNJVF9DSElM
RFJFTihVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSk7CisKIFNvdXJjZUNvZGUgVW5saW5rZWRG
dW5jdGlvbkV4ZWN1dGFibGU6OmxpbmtlZFNvdXJjZUNvZGUoY29uc3QgU291cmNlQ29kZSYgcGFz
c2VkUGFyZW50U291cmNlKSBjb25zdAogewogICAgIGNvbnN0IFNvdXJjZUNvZGUmIHBhcmVudFNv
dXJjZSA9ICFtX2lzQnVpbHRpbkRlZmF1bHRDbGFzc0NvbnN0cnVjdG9yID8gcGFzc2VkUGFyZW50
U291cmNlIDogQnVpbHRpbkV4ZWN1dGFibGVzOjpkZWZhdWx0Q29uc3RydWN0b3JTb3VyY2VDb2Rl
KGNvbnN0cnVjdG9yS2luZCgpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9VbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5oCShyZXZpc2lv
biAyNzMxMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRGdW5j
dGlvbkV4ZWN1dGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTItMjAxOSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI0Miw3ICsyNDIsNyBAQCBwcml2
YXRlOgogICAgIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKFZNJiwgU3RydWN0dXJlKiwgY29u
c3QgU291cmNlQ29kZSYsIEZ1bmN0aW9uTWV0YWRhdGFOb2RlKiwgVW5saW5rZWRGdW5jdGlvbktp
bmQsIENvbnN0cnVjdEFiaWxpdHksIEpTUGFyc2VyU2NyaXB0TW9kZSwgUmVmUHRyPFREWkVudmly
b25tZW50TGluaz4sIE9wdGlvbmFsPFByaXZhdGVOYW1lRW52aXJvbm1lbnQ+LCBKU0M6OkRlcml2
ZWRDb250ZXh0VHlwZSwgSlNDOjpOZWVkc0NsYXNzRmllbGRJbml0aWFsaXplciwgUHJpdmF0ZUJy
YW5kUmVxdWlyZW1lbnQsIGJvb2wgaXNCdWlsdGluRGVmYXVsdENsYXNzQ29uc3RydWN0b3IpOwog
ICAgIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKERlY29kZXImLCBjb25zdCBDYWNoZWRGdW5j
dGlvbkV4ZWN1dGFibGUmKTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgdm9p
ZCBkZWNvZGVDYWNoZWRDb2RlQmxvY2tzKFZNJik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlclNjb3BlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXJTY29wZS5jcHAJKHJldmlzaW9uIDI3MzExOSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlclNjb3BlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAx
OSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgt
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTU1LDcgKzU1LDggQEAgdm9pZCBEZWJ1Z2dlclNjb3BlOjpmaW5pc2hD
cmVhdGlvbihWTSYgdgogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKIH0KIAotdm9pZCBE
ZWJ1Z2dlclNjb3BlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZp
c2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBEZWJ1Z2dlclNjb3BlOjp2
aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAg
RGVidWdnZXJTY29wZSogdGhpc09iamVjdCA9IGpzQ2FzdDxEZWJ1Z2dlclNjb3BlKj4oY2VsbCk7
CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAt
NjUsNiArNjYsOCBAQCB2b2lkIERlYnVnZ2VyU2NvcGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsCiAg
ICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9uZXh0KTsKIH0KIAorREVGSU5FX1ZJU0lU
X0NISUxEUkVOKERlYnVnZ2VyU2NvcGUpOworCiBTdHJpbmcgRGVidWdnZXJTY29wZTo6Y2xhc3NO
YW1lKGNvbnN0IEpTT2JqZWN0KiBvYmplY3QsIFZNJiB2bSkKIHsKICAgICBjb25zdCBEZWJ1Z2dl
clNjb3BlKiBzY29wZSA9IGpzQ2FzdDxjb25zdCBEZWJ1Z2dlclNjb3BlKj4ob2JqZWN0KTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlclNjb3BlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyU2NvcGUuaAko
cmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVn
Z2VyU2NvcGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDgtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDgtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ2LDcgKzQ2LDcgQEAgcHVibGljOgogCiAg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIERlYnVnZ2VyU2NvcGUqIGNyZWF0ZShWTSYgdm0s
IEpTU2NvcGUqIHNjb3BlKTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogICAgIHN0YXRp
YyBTdHJpbmcgY2xhc3NOYW1lKGNvbnN0IEpTT2JqZWN0KiwgVk0mKTsKICAgICBzdGF0aWMgU3Ry
aW5nIHRvU3RyaW5nTmFtZShjb25zdCBKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0Kik7CiAgICAg
c3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3Qq
LCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdEZXNpcmVkVHJhbnNpdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFRyYW5zaXRpb25zLmNwcAkocmV2aXNpb24gMjcz
MTE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkVHJhbnNpdGlvbnMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIkNvZGVCbG9j
ay5oIgogI2luY2x1ZGUgIkRGR0NvbW1vbkRhdGEuaCIKICNpbmNsdWRlICJKU0NlbGxJbmxpbmVz
LmgiCisjaW5jbHVkZSAiU2xvdFZpc2l0b3JJbmxpbmVzLmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgREZHIHsKIApAQCAtNTIsMTMgKzUzLDE3IEBAIHZvaWQgRGVzaXJlZFRyYW5zaXRp
b246OnJlYWxseUFkZChWTSYgdm0KICAgICAgICAgICAgIG1fb2xkU3RydWN0dXJlLCBtX25ld1N0
cnVjdHVyZSkpOwogfQogCi12b2lkIERlc2lyZWRUcmFuc2l0aW9uOjp2aXNpdENoaWxkcmVuKFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgRGVz
aXJlZFRyYW5zaXRpb246OnZpc2l0Q2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB2
aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKG1fY29kZU9yaWdpbk93bmVyKTsKICAgICB2aXNpdG9y
LmFwcGVuZFVuYmFycmllcmVkKG1fb2xkU3RydWN0dXJlKTsKICAgICB2aXNpdG9yLmFwcGVuZFVu
YmFycmllcmVkKG1fbmV3U3RydWN0dXJlKTsKIH0KIAordGVtcGxhdGUgdm9pZCBEZXNpcmVkVHJh
bnNpdGlvbjo6dmlzaXRDaGlsZHJlbihBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2
b2lkIERlc2lyZWRUcmFuc2l0aW9uOjp2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CisKIERl
c2lyZWRUcmFuc2l0aW9uczo6RGVzaXJlZFRyYW5zaXRpb25zKCkKIHsKIH0KQEAgLTc4LDEyICs4
MywxNiBAQCB2b2lkIERlc2lyZWRUcmFuc2l0aW9uczo6cmVhbGx5QWRkKFZNJiB2CiAgICAgICAg
IG1fdHJhbnNpdGlvbnNbaV0ucmVhbGx5QWRkKHZtLCBjb21tb24pOwogfQogCi12b2lkIERlc2ly
ZWRUcmFuc2l0aW9uczo6dmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBs
YXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIERlc2lyZWRUcmFuc2l0aW9uczo6dmlzaXRDaGls
ZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBt
X3RyYW5zaXRpb25zLnNpemUoKTsgaSsrKQogICAgICAgICBtX3RyYW5zaXRpb25zW2ldLnZpc2l0
Q2hpbGRyZW4odmlzaXRvcik7CiB9CiAKK3RlbXBsYXRlIHZvaWQgRGVzaXJlZFRyYW5zaXRpb25z
Ojp2aXNpdENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgRGVz
aXJlZFRyYW5zaXRpb25zOjp2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CisKIH0gfSAvLyBu
YW1lc3BhY2UgSlNDOjpERkcKIAogI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkVHJhbnNpdGlvbnMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRUcmFuc2l0aW9ucy5oCShy
ZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRU
cmFuc2l0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMzLDcgKzMzLDYgQEAgbmFtZXNwYWNl
IEpTQyB7IAogCiBjbGFzcyBDb2RlQmxvY2s7CiBjbGFzcyBTY3JpcHRFeGVjdXRhYmxlOwotY2xh
c3MgU2xvdFZpc2l0b3I7CiBjbGFzcyBTdHJ1Y3R1cmU7CiBjbGFzcyBWTTsKIApAQCAtNDYsOCAr
NDUsNyBAQCBwdWJsaWM6CiAgICAgRGVzaXJlZFRyYW5zaXRpb24oQ29kZUJsb2NrKiwgQ29kZUJs
b2NrKiBjb2RlT3JpZ2luT3duZXIsIFN0cnVjdHVyZSosIFN0cnVjdHVyZSopOwogCiAgICAgdm9p
ZCByZWFsbHlBZGQoVk0mLCBDb21tb25EYXRhKik7Ci0gICAgCi0gICAgdm9pZCB2aXNpdENoaWxk
cmVuKFNsb3RWaXNpdG9yJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCB2
aXNpdENoaWxkcmVuKFZpc2l0b3ImKTsKIAogcHJpdmF0ZToKICAgICBDb2RlQmxvY2sqIG1fY29k
ZUJsb2NrOwpAQCAtNjMsNyArNjEsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGFkZExhemlseShD
b2RlQmxvY2sqLCBDb2RlQmxvY2sqIGNvZGVPcmlnaW5Pd25lciwgU3RydWN0dXJlKiwgU3RydWN0
dXJlKik7CiAgICAgdm9pZCByZWFsbHlBZGQoVk0mLCBDb21tb25EYXRhKik7Ci0gICAgdm9pZCB2
aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRv
cj4gdm9pZCB2aXNpdENoaWxkcmVuKFZpc2l0b3ImKTsKIAogcHJpdmF0ZToKICAgICBWZWN0b3I8
RGVzaXJlZFRyYW5zaXRpb24+IG1fdHJhbnNpdGlvbnM7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Rlc2lyZWRXZWFrUmVmZXJlbmNlcy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2Vha1JlZmVyZW5jZXMuY3BwCShyZXZp
c2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXZWFr
UmVmZXJlbmNlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC04NywxMiArODcsMTYgQEAgdm9pZCBE
ZXNpcmVkV2Vha1JlZmVyZW5jZXM6OnJlYWxseUFkZChWTQogICAgIH0KIH0KIAotdm9pZCBEZXNp
cmVkV2Vha1JlZmVyZW5jZXM6OnZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0
ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBEZXNpcmVkV2Vha1JlZmVyZW5jZXM6OnZp
c2l0Q2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBmb3IgKEpTQ2VsbCogdGFyZ2V0
IDogbV9yZWZlcmVuY2VzKQogICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKHRhcmdl
dCk7CiB9CiAKK3RlbXBsYXRlIHZvaWQgRGVzaXJlZFdlYWtSZWZlcmVuY2VzOjp2aXNpdENoaWxk
cmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgRGVzaXJlZFdlYWtSZWZl
cmVuY2VzOjp2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CisKIH0gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpERkcKIAogI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2Vha1JlZmVyZW5jZXMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXZWFrUmVmZXJlbmNlcy5oCShyZXZp
c2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXZWFr
UmVmZXJlbmNlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzQsNyArMzQsNiBAQCBuYW1lc3BhY2Ug
SlNDIHsgCiBjbGFzcyBDb2RlQmxvY2s7CiBjbGFzcyBKU0NlbGw7CiBjbGFzcyBKU1ZhbHVlOwot
Y2xhc3MgU2xvdFZpc2l0b3I7CiBjbGFzcyBWTTsKIAogbmFtZXNwYWNlIERGRyB7CkBAIC01Miw4
ICs1MSw4IEBAIHB1YmxpYzoKICAgICBib29sIGNvbnRhaW5zKEpTQ2VsbCopOwogICAgIAogICAg
IHZvaWQgcmVhbGx5QWRkKFZNJiwgQ29tbW9uRGF0YSopOwotICAgIAotICAgIHZvaWQgdmlzaXRD
aGlsZHJlbihTbG90VmlzaXRvciYpOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4g
dm9pZCB2aXNpdENoaWxkcmVuKFZpc2l0b3ImKTsKIAogcHJpdmF0ZToKICAgICBDb2RlQmxvY2sq
IG1fY29kZUJsb2NrOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJ
KHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGgu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MSw2ICs1MSw3IEBACiAjaW5jbHVkZSAiSlNMZXhpY2Fs
RW52aXJvbm1lbnQuaCIKICNpbmNsdWRlICJNYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbC5o
IgogI2luY2x1ZGUgIk9wZXJhbmRzSW5saW5lcy5oIgorI2luY2x1ZGUgIlNsb3RWaXNpdG9ySW5s
aW5lcy5oIgogI2luY2x1ZGUgIlNuaXBwZXQuaCIKICNpbmNsdWRlICJTdGFja0FsaWdubWVudC5o
IgogI2luY2x1ZGUgIlN0cnVjdHVyZUlubGluZXMuaCIKQEAgLTE0NDgsNyArMTQ0OSw4IEBAIHZv
aWQgR3JhcGg6OnJlZ2lzdGVyRnJvemVuVmFsdWVzKCkKICAgICBtX2NvZGVCbG9jay0+Y29uc3Rh
bnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uKCkuc2hyaW5rVG9GaXQoKTsKIH0KIAotdm9pZCBH
cmFwaDo6dmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVu
YW1lIFZpc2l0b3I+CitBTFdBWVNfSU5MSU5FIHZvaWQgR3JhcGg6OnZpc2l0Q2hpbGRyZW5JbXBs
KFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgZm9yIChGcm96ZW5WYWx1ZSogdmFsdWUgOiBtX2Zy
b3plblZhbHVlcykgewogICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKHZhbHVlLT52
YWx1ZSgpKTsKQEAgLTE0NTYsNiArMTQ1OCw5IEBAIHZvaWQgR3JhcGg6OnZpc2l0Q2hpbGRyZW4o
U2xvdFZpc2l0b3ImIHYKICAgICB9CiB9CiAKK3ZvaWQgR3JhcGg6OnZpc2l0Q2hpbGRyZW4oQWJz
dHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikgeyB2aXNpdENoaWxkcmVuSW1wbCh2aXNpdG9yKTsg
fQordm9pZCBHcmFwaDo6dmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikgeyB2aXNp
dENoaWxkcmVuSW1wbCh2aXNpdG9yKTsgfQorCiBGcm96ZW5WYWx1ZSogR3JhcGg6OmZyZWV6ZShK
U1ZhbHVlIHZhbHVlKQogewogICAgIGlmIChVTkxJS0VMWSghdmFsdWUpKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMS0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTAwMCw5ICsx
MDAwLDEwIEBAIHB1YmxpYzoKICAgICBib29sIGNhbkRvRmFzdFNwcmVhZChOb2RlKiwgY29uc3Qg
QWJzdHJhY3RWYWx1ZSYpOwogICAgIAogICAgIHZvaWQgcmVnaXN0ZXJGcm96ZW5WYWx1ZXMoKTsK
LSAgICAKKworICAgIHZvaWQgdmlzaXRDaGlsZHJlbihBYnN0cmFjdFNsb3RWaXNpdG9yJikgZmlu
YWw7CiAgICAgdm9pZCB2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJikgZmluYWw7Ci0gICAgCisK
ICAgICB2b2lkIGxvZ0Fzc2VydGlvbkZhaWx1cmUoCiAgICAgICAgIHN0ZDo6bnVsbHB0cl90LCBj
b25zdCBjaGFyKiBmaWxlLCBpbnQgbGluZSwgY29uc3QgY2hhciogZnVuY3Rpb24sCiAgICAgICAg
IGNvbnN0IGNoYXIqIGFzc2VydGlvbik7CkBAIC0xMTg0LDYgKzExODUsOCBAQCBwdWJsaWM6CiAg
ICAgSGFzaFNldDxOb2RlKj4gbV9zbG93R2V0QnlWYWw7CiAKIHByaXZhdGU6CisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCB2aXNpdENoaWxkcmVuSW1wbChWaXNpdG9yJik7CisK
ICAgICBib29sIGlzU3RyaW5nUHJvdG90eXBlTWV0aG9kU2FuZShKU0dsb2JhbE9iamVjdCosIFVu
aXF1ZWRTdHJpbmdJbXBsKik7CiAKICAgICB2b2lkIGhhbmRsZVN1Y2Nlc3NvcihWZWN0b3I8QmFz
aWNCbG9jayosIDE2PiYgd29ya2xpc3QsIEJhc2ljQmxvY2sqLCBCYXNpY0Jsb2NrKiBzdWNjZXNz
b3IpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCShyZXZpc2lvbiAy
NzMxMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIwIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtNjcyLDkgKzY3MiwxMCBAQCBDb21waWxhdGlvbktleSBQbGFuOjprZXkoKQog
ICAgIHJldHVybiBDb21waWxhdGlvbktleShtX2NvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSwgbV9t
b2RlKTsKIH0KIAotdm9pZCBQbGFuOjpjaGVja0xpdmVuZXNzQW5kVmlzaXRDaGlsZHJlbihTbG90
VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFBsYW46
OmNoZWNrTGl2ZW5lc3NBbmRWaXNpdENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7Ci0gICAg
aWYgKCFpc0tub3duVG9CZUxpdmVEdXJpbmdHQygpKQorICAgIGlmICghaXNLbm93blRvQmVMaXZl
RHVyaW5nR0ModmlzaXRvcikpCiAgICAgICAgIHJldHVybjsKIAogICAgIGNsZWFuTXVzdEhhbmRs
ZVZhbHVlc0lmTmVjZXNzYXJ5KCk7CkBAIC03MDIsMTMgKzcwMywzMyBAQCB2b2lkIFBsYW46OmNo
ZWNrTGl2ZW5lc3NBbmRWaXNpdENoaWxkcmVuCiAgICAgbV90cmFuc2l0aW9ucy52aXNpdENoaWxk
cmVuKHZpc2l0b3IpOwogfQogCit0ZW1wbGF0ZSB2b2lkIFBsYW46OmNoZWNrTGl2ZW5lc3NBbmRW
aXNpdENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgUGxhbjo6
Y2hlY2tMaXZlbmVzc0FuZFZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKKwogdm9pZCBQbGFu
OjpmaW5hbGl6ZUluR0MoKQogewogICAgIEFTU0VSVChtX3ZtKTsKICAgICBtX3JlY29yZGVkU3Rh
dHVzZXMuZmluYWxpemVXaXRob3V0RGVsZXRpbmcoKm1fdm0pOwogfQogCi1ib29sIFBsYW46Omlz
S25vd25Ub0JlTGl2ZUR1cmluZ0dDKCkKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Citib29s
IFBsYW46OmlzS25vd25Ub0JlTGl2ZUR1cmluZ0dDKFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAg
aWYgKG1fc3RhZ2UgPT0gQ2FuY2VsbGVkKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYg
KCF2aXNpdG9yLmlzTWFya2VkKG1fY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIXZpc2l0b3IuaXNNYXJrZWQobV9jb2RlQmxvY2st
PmFsdGVybmF0aXZlKCkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCEhbV9wcm9m
aWxlZERGR0NvZGVCbG9jayAmJiAhdmlzaXRvci5pc01hcmtlZChtX3Byb2ZpbGVkREZHQ29kZUJs
b2NrKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiB0cnVlOworfQorCit0ZW1w
bGF0ZSBib29sIFBsYW46OmlzS25vd25Ub0JlTGl2ZUR1cmluZ0dDKEFic3RyYWN0U2xvdFZpc2l0
b3ImKTsKK3RlbXBsYXRlIGJvb2wgUGxhbjo6aXNLbm93blRvQmVMaXZlRHVyaW5nR0MoU2xvdFZp
c2l0b3ImKTsKKworYm9vbCBQbGFuOjppc0tub3duVG9CZUxpdmVBZnRlckdDKCkKIHsKICAgICBp
ZiAobV9zdGFnZSA9PSBDYW5jZWxsZWQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5oCShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ0LDcgKzQ0
LDYgQEAKIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBDb2RlQmxvY2s7Ci1jbGFzcyBTbG90Vmlz
aXRvcjsKIAogbmFtZXNwYWNlIERGRyB7CiAKQEAgLTcwLDEwICs2OSwxMSBAQCBwdWJsaWM6CiAg
ICAgCiAgICAgQ29tcGlsYXRpb25LZXkga2V5KCk7CiAgICAgCi0gICAgdGVtcGxhdGU8dHlwZW5h
bWUgRnVuYz4KLSAgICB2b2lkIGl0ZXJhdGVDb2RlQmxvY2tzRm9yR0MoY29uc3QgRnVuYyYpOwot
ICAgIHZvaWQgY2hlY2tMaXZlbmVzc0FuZFZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKLSAg
ICBib29sIGlzS25vd25Ub0JlTGl2ZUR1cmluZ0dDKCk7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
RnVuYywgdHlwZW5hbWUgVmlzaXRvcj4KKyAgICB2b2lkIGl0ZXJhdGVDb2RlQmxvY2tzRm9yR0Mo
VmlzaXRvciYsIGNvbnN0IEZ1bmMmKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2
b2lkIGNoZWNrTGl2ZW5lc3NBbmRWaXNpdENoaWxkcmVuKFZpc2l0b3ImKTsKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBWaXNpdG9yPiBib29sIGlzS25vd25Ub0JlTGl2ZUR1cmluZ0dDKFZpc2l0b3Im
KTsKKyAgICBib29sIGlzS25vd25Ub0JlTGl2ZUFmdGVyR0MoKTsKICAgICB2b2lkIGZpbmFsaXpl
SW5HQygpOwogICAgIHZvaWQgY2FuY2VsKCk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHUGxhbklubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1BsYW5JbmxpbmVzLmgJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHUGxhbklubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMxLDEw
ICszMSwxMCBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKICNpZiBFTkFCTEUo
REZHX0pJVCkKIAotdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KLXZvaWQgUGxhbjo6aXRlcmF0ZUNv
ZGVCbG9ja3NGb3JHQyhjb25zdCBGdW5jJiBmdW5jKQordGVtcGxhdGU8dHlwZW5hbWUgRnVuYywg
dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgUGxhbjo6aXRlcmF0ZUNvZGVCbG9ja3NGb3JHQyhWaXNp
dG9yJiB2aXNpdG9yLCBjb25zdCBGdW5jJiBmdW5jKQogewotICAgIGlmICghaXNLbm93blRvQmVM
aXZlRHVyaW5nR0MoKSkKKyAgICBpZiAoIWlzS25vd25Ub0JlTGl2ZUR1cmluZ0dDKHZpc2l0b3Ip
KQogICAgICAgICByZXR1cm47CiAgICAgCiAgICAgLy8gQ29tcGlsYXRpb24gd3JpdGVzIGxvdHMg
b2YgdmFsdWVzIHRvIGEgQ29kZUJsb2NrIHdpdGhvdXQgcGVyZm9ybWluZwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlcG9pbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZXBvaW50LmNwcAkocmV2aXNpb24gMjczMTE5KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlcG9pbnQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNC0yMDE5IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtODMsMjggKzgzLDQ2IEBAIHZvaWQgU2FmZXBvaW50OjpiZWdpbigpCiAgICAgfQog
fQogCi12b2lkIFNhZmVwb2ludDo6Y2hlY2tMaXZlbmVzc0FuZFZpc2l0Q2hpbGRyZW4oU2xvdFZp
c2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBTYWZlcG9p
bnQ6OmNoZWNrTGl2ZW5lc3NBbmRWaXNpdENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAg
ICAgUkVMRUFTRV9BU1NFUlQobV9kaWRDYWxsQmVnaW4pOwogCiAgICAgaWYgKG1fcmVzdWx0Lm1f
ZGlkR2V0Q2FuY2VsbGVkKQogICAgICAgICByZXR1cm47IC8vIFdlIHdlcmUgY2FuY2VsbGVkIGR1
cmluZyBhIHByZXZpb3VzIEdDIQogICAgIAotICAgIGlmICghaXNLbm93blRvQmVMaXZlRHVyaW5n
R0MoKSkKKyAgICBpZiAoIWlzS25vd25Ub0JlTGl2ZUR1cmluZ0dDKHZpc2l0b3IpKQogICAgICAg
ICByZXR1cm47CiAgICAgCiAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9zY2FubmFibGVzLnNpemUo
KTsgaS0tOykKICAgICAgICAgbV9zY2FubmFibGVzW2ldLT52aXNpdENoaWxkcmVuKHZpc2l0b3Ip
OwogfQogCi1ib29sIFNhZmVwb2ludDo6aXNLbm93blRvQmVMaXZlRHVyaW5nR0MoKQordGVtcGxh
dGUgdm9pZCBTYWZlcG9pbnQ6OmNoZWNrTGl2ZW5lc3NBbmRWaXNpdENoaWxkcmVuKEFic3RyYWN0
U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgU2FmZXBvaW50OjpjaGVja0xpdmVuZXNzQW5k
VmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYpOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
PgorYm9vbCBTYWZlcG9pbnQ6OmlzS25vd25Ub0JlTGl2ZUR1cmluZ0dDKFZpc2l0b3ImIHZpc2l0
b3IpCit7CisgICAgUkVMRUFTRV9BU1NFUlQobV9kaWRDYWxsQmVnaW4pOworICAgIAorICAgIGlm
IChtX3Jlc3VsdC5tX2RpZEdldENhbmNlbGxlZCkKKyAgICAgICAgcmV0dXJuIHRydWU7IC8vIFdl
IHdlcmUgY2FuY2VsbGVkIGR1cmluZyBhIHByZXZpb3VzIEdDLCBzbyBsZXQncyBub3QgbWVzcyB3
aXRoIGl0IHRoaXMgdGltZSBhcm91bmQgLSBwcmV0ZW5kIGl0J3MgbGl2ZSBhbmQgbW92ZSBvbi4K
KyAgICAKKyAgICByZXR1cm4gbV9wbGFuLmlzS25vd25Ub0JlTGl2ZUR1cmluZ0dDKHZpc2l0b3Ip
OworfQorCit0ZW1wbGF0ZSBib29sIFNhZmVwb2ludDo6aXNLbm93blRvQmVMaXZlRHVyaW5nR0Mo
QWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgYm9vbCBTYWZlcG9pbnQ6OmlzS25vd25U
b0JlTGl2ZUR1cmluZ0dDKFNsb3RWaXNpdG9yJik7CisKK2Jvb2wgU2FmZXBvaW50Ojppc0tub3du
VG9CZUxpdmVBZnRlckdDKCkKIHsKICAgICBSRUxFQVNFX0FTU0VSVChtX2RpZENhbGxCZWdpbik7
CiAgICAgCiAgICAgaWYgKG1fcmVzdWx0Lm1fZGlkR2V0Q2FuY2VsbGVkKQogICAgICAgICByZXR1
cm4gdHJ1ZTsgLy8gV2Ugd2VyZSBjYW5jZWxsZWQgZHVyaW5nIGEgcHJldmlvdXMgR0MsIHNvIGxl
dCdzIG5vdCBtZXNzIHdpdGggaXQgdGhpcyB0aW1lIGFyb3VuZCAtIHByZXRlbmQgaXQncyBsaXZl
IGFuZCBtb3ZlIG9uLgogICAgIAotICAgIHJldHVybiBtX3BsYW4uaXNLbm93blRvQmVMaXZlRHVy
aW5nR0MoKTsKKyAgICByZXR1cm4gbV9wbGFuLmlzS25vd25Ub0JlTGl2ZUFmdGVyR0MoKTsKIH0K
IAogdm9pZCBTYWZlcG9pbnQ6OmNhbmNlbCgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NhZmVwb2ludC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU2FmZXBvaW50LmgJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU2FmZXBvaW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDE0LCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzEsNyArMzEsNiBA
QAogCiBuYW1lc3BhY2UgSlNDIHsKIAotY2xhc3MgU2xvdFZpc2l0b3I7CiBjbGFzcyBWTTsKIAog
bmFtZXNwYWNlIERGRyB7CkBAIC02Niw5ICs2NSwxMCBAQCBwdWJsaWM6CiAgICAgdm9pZCBhZGQo
U2Nhbm5hYmxlKik7CiAgICAgCiAgICAgdm9pZCBiZWdpbigpOwotICAgIAotICAgIHZvaWQgY2hl
Y2tMaXZlbmVzc0FuZFZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKLSAgICBib29sIGlzS25v
d25Ub0JlTGl2ZUR1cmluZ0dDKCk7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2
b2lkIGNoZWNrTGl2ZW5lc3NBbmRWaXNpdENoaWxkcmVuKFZpc2l0b3ImKTsKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBWaXNpdG9yPiBib29sIGlzS25vd25Ub0JlTGl2ZUR1cmluZ0dDKFZpc2l0b3Im
KTsKKyAgICBib29sIGlzS25vd25Ub0JlTGl2ZUFmdGVyR0MoKTsKICAgICB2b2lkIGNhbmNlbCgp
OwogICAgIAogICAgIFZNKiB2bSgpIGNvbnN0OyAvLyBNYXkgcmV0dXJuIG51bGwgaWYgd2UndmUg
YmVlbiBjYW5jZWxsZWQuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NjYW5u
YWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2Nhbm5h
YmxlLmgJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U2Nhbm5hYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjksNiArMjksNyBAQAogCiBuYW1lc3BhY2UgSlND
IHsKIAorY2xhc3MgQWJzdHJhY3RTbG90VmlzaXRvcjsKIGNsYXNzIFNsb3RWaXNpdG9yOwogCiBu
YW1lc3BhY2UgREZHIHsKQEAgLTM3LDcgKzM4LDggQEAgY2xhc3MgU2Nhbm5hYmxlIHsKIHB1Ymxp
YzoKICAgICBTY2FubmFibGUoKSB7IH0KICAgICB2aXJ0dWFsIH5TY2FubmFibGUoKSB7IH0KLSAg
ICAKKworICAgIHZpcnR1YWwgdm9pZCB2aXNpdENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0b3Im
KSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImKSA9IDA7
CiB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0LmNwcAko
cmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlz
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNzIsNyArMzcyLDggQEAgdm9pZCBXb3JrbGlzdDo6
cmVzdW1lQWxsVGhyZWFkcygpCiAgICAgbV9zdXNwZW5zaW9uTG9jay51bmxvY2soKTsKIH0KIAot
dm9pZCBXb3JrbGlzdDo6dmlzaXRXZWFrUmVmZXJlbmNlcyhTbG90VmlzaXRvciYgdmlzaXRvcikK
K3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFdvcmtsaXN0Ojp2aXNpdFdlYWtSZWZl
cmVuY2VzKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgVk0qIHZtID0gJnZpc2l0b3IuaGVhcCgp
LT52bSgpOwogICAgIHsKQEAgLTM5Niw2ICszOTcsOSBAQCB2b2lkIFdvcmtsaXN0Ojp2aXNpdFdl
YWtSZWZlcmVuY2VzKFNsb3RWCiAgICAgfQogfQogCit0ZW1wbGF0ZSB2b2lkIFdvcmtsaXN0Ojp2
aXNpdFdlYWtSZWZlcmVuY2VzKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQg
V29ya2xpc3Q6OnZpc2l0V2Vha1JlZmVyZW5jZXMoU2xvdFZpc2l0b3ImKTsKKwogdm9pZCBXb3Jr
bGlzdDo6cmVtb3ZlRGVhZFBsYW5zKFZNJiB2bSkKIHsKICAgICB7CkBAIC00MDUsNyArNDA5LDcg
QEAgdm9pZCBXb3JrbGlzdDo6cmVtb3ZlRGVhZFBsYW5zKFZNJiB2bSkKICAgICAgICAgICAgIFBs
YW4qIHBsYW4gPSBpdGVyLT52YWx1ZS5nZXQoKTsKICAgICAgICAgICAgIGlmIChwbGFuLT52bSgp
ICE9ICZ2bSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGlmIChwbGFu
LT5pc0tub3duVG9CZUxpdmVEdXJpbmdHQygpKSB7CisgICAgICAgICAgICBpZiAocGxhbi0+aXNL
bm93blRvQmVMaXZlQWZ0ZXJHQygpKSB7CiAgICAgICAgICAgICAgICAgcGxhbi0+ZmluYWxpemVJ
bkdDKCk7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CkBAIC00NDAs
NyArNDQ0LDcgQEAgdm9pZCBXb3JrbGlzdDo6cmVtb3ZlRGVhZFBsYW5zKFZNJiB2bSkKICAgICAg
ICAgICAgIGNvbnRpbnVlOwogICAgICAgICBpZiAoc2FmZXBvaW50LT52bSgpICE9ICZ2bSkKICAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAoc2FmZXBvaW50LT5pc0tub3duVG9CZUxp
dmVEdXJpbmdHQygpKQorICAgICAgICBpZiAoc2FmZXBvaW50LT5pc0tub3duVG9CZUxpdmVBZnRl
ckdDKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgc2FmZXBvaW50LT5jYW5jZWwo
KTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5oCShy
ZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0zMywxMSArMzMsNyBAQAogI2luY2x1ZGUgPHd0Zi9IYXNo
TWFwLmg+CiAjaW5jbHVkZSA8d3RmL0xvY2suaD4KIAotbmFtZXNwYWNlIEpTQyB7Ci0KLWNsYXNz
IFNsb3RWaXNpdG9yOwotCi1uYW1lc3BhY2UgREZHIHsKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgREZHIHsKIAogI2lmIEVOQUJMRShERkdfSklUKQogCkBAIC01Niw4ICs1Miw4IEBAIHB1Ymxp
YzoKICAgICAvLyB3b3JrbGlzdC0+Y29tcGxldGVBbGxSZWFkeVBsYW5zRm9yVk0odm0pOwogICAg
IHZvaWQgY29tcGxldGVBbGxQbGFuc0ZvclZNKFZNJik7CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBGdW5jPgotICAgIHZvaWQgaXRlcmF0ZUNvZGVCbG9ja3NGb3JHQyhWTSYsIGNvbnN0IEZ1bmMm
KTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jLCB0eXBlbmFtZSBWaXNpdG9yPgorICAgIHZv
aWQgaXRlcmF0ZUNvZGVCbG9ja3NGb3JHQyhWaXNpdG9yJiwgVk0mLCBjb25zdCBGdW5jJik7CiAK
ICAgICB2b2lkIHdhaXRVbnRpbEFsbFBsYW5zRm9yVk1BcmVSZWFkeShWTSYpOwogICAgIFN0YXRl
IGNvbXBsZXRlQWxsUmVhZHlQbGFuc0ZvclZNKFZNJiwgQ29tcGlsYXRpb25LZXkgPSBDb21waWxh
dGlvbktleSgpKTsKQEAgLTczLDcgKzY5LDcgQEAgcHVibGljOgogICAgIGJvb2wgaXNBY3RpdmVG
b3JWTShWTSYpIGNvbnN0OwogICAgIAogICAgIC8vIE9ubHkgY2FsbGVkIG9uIHRoZSBtYWluIHRo
cmVhZCBhZnRlciBzdXNwZW5kaW5nIGFsbCB0aHJlYWRzLgotICAgIHZvaWQgdmlzaXRXZWFrUmVm
ZXJlbmNlcyhTbG90VmlzaXRvciYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZv
aWQgdmlzaXRXZWFrUmVmZXJlbmNlcyhWaXNpdG9yJik7CiAgICAgdm9pZCByZW1vdmVEZWFkUGxh
bnMoVk0mKTsKICAgICAKICAgICB2b2lkIHJlbW92ZU5vbkNvbXBpbGluZ1BsYW5zRm9yVk0oVk0m
KTsKQEAgLTE0Myw4ICsxMzksOCBAQCBXb3JrbGlzdCYgZXhpc3RpbmdXb3JrbGlzdEZvckluZGV4
KHVuc2lnCiAKIHZvaWQgY29tcGxldGVBbGxQbGFuc0ZvclZNKFZNJik7CiAKLXRlbXBsYXRlPHR5
cGVuYW1lIEZ1bmM+Ci12b2lkIGl0ZXJhdGVDb2RlQmxvY2tzRm9yR0MoVk0mLCBjb25zdCBGdW5j
Jik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jLCB0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBpdGVy
YXRlQ29kZUJsb2Nrc0ZvckdDKFZpc2l0b3ImLCBWTSYsIGNvbnN0IEZ1bmMmKTsKIAogfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkRGRwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1dvcmtsaXN0SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHV29ya2xpc3RJbmxpbmVzLmgJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3RJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMTggQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0z
MiwzMSArMzIsMzEgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCiAjaWYgRU5B
QkxFKERGR19KSVQpCiAKLXRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+Ci12b2lkIGl0ZXJhdGVDb2Rl
QmxvY2tzRm9yR0MoVk0mIHZtLCBjb25zdCBGdW5jJiBmdW5jKQordGVtcGxhdGU8dHlwZW5hbWUg
RnVuYywgdHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgaXRlcmF0ZUNvZGVCbG9ja3NGb3JHQyhWaXNp
dG9yJiB2aXNpdG9yLCBWTSYgdm0sIGNvbnN0IEZ1bmMmIGZ1bmMpCiB7CiAgICAgZm9yICh1bnNp
Z25lZCBpID0gREZHOjpudW1iZXJPZldvcmtsaXN0cygpOyBpLS07KSB7CiAgICAgICAgIGlmIChE
Rkc6OldvcmtsaXN0KiB3b3JrbGlzdCA9IERGRzo6ZXhpc3RpbmdXb3JrbGlzdEZvckluZGV4T3JO
dWxsKGkpKQotICAgICAgICAgICAgd29ya2xpc3QtPml0ZXJhdGVDb2RlQmxvY2tzRm9yR0Modm0s
IGZ1bmMpOworICAgICAgICAgICAgd29ya2xpc3QtPml0ZXJhdGVDb2RlQmxvY2tzRm9yR0Modmlz
aXRvciwgdm0sIGZ1bmMpOwogICAgIH0KIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KLXZv
aWQgV29ya2xpc3Q6Oml0ZXJhdGVDb2RlQmxvY2tzRm9yR0MoVk0mIHZtLCBjb25zdCBGdW5jJiBm
dW5jKQordGVtcGxhdGU8dHlwZW5hbWUgRnVuYywgdHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgV29y
a2xpc3Q6Oml0ZXJhdGVDb2RlQmxvY2tzRm9yR0MoVmlzaXRvciYgdmlzaXRvciwgVk0mIHZtLCBj
b25zdCBGdW5jJiBmdW5jKQogewogICAgIExvY2tIb2xkZXIgbG9ja2VyKCptX2xvY2spOwogICAg
IGZvciAoUGxhbk1hcDo6aXRlcmF0b3IgaXRlciA9IG1fcGxhbnMuYmVnaW4oKTsgaXRlciAhPSBt
X3BsYW5zLmVuZCgpOyArK2l0ZXIpIHsKICAgICAgICAgUGxhbiogcGxhbiA9IGl0ZXItPnZhbHVl
LmdldCgpOwogICAgICAgICBpZiAocGxhbi0+dm0oKSAhPSAmdm0pCiAgICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgcGxhbi0+aXRlcmF0ZUNvZGVCbG9ja3NGb3JHQyhmdW5jKTsKKyAgICAg
ICAgcGxhbi0+aXRlcmF0ZUNvZGVCbG9ja3NGb3JHQyh2aXNpdG9yLCBmdW5jKTsKICAgICB9CiB9
CiAKICNlbHNlIC8vIEVOQUJMRShERkdfSklUKQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgot
dm9pZCBpdGVyYXRlQ29kZUJsb2Nrc0ZvckdDKFZNJiwgY29uc3QgRnVuYyYpCit0ZW1wbGF0ZTx0
eXBlbmFtZSBGdW5jLCB0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBpdGVyYXRlQ29kZUJsb2Nrc0Zv
ckdDKFZpc2l0b3ImLCBWTSYsIGNvbnN0IEZ1bmMmKQogewogfQogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9BYnN0cmFjdFNsb3RWaXNpdG9yLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQWJzdHJhY3RTbG90VmlzaXRvci5oCShub25leGlzdGVu
dCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Fic3RyYWN0U2xvdFZpc2l0b3IuaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIwOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiSlNDSlNWYWx1
ZS5oIgorI2luY2x1ZGUgIk1hcmtTdGFjay5oIgorI2luY2x1ZGUgIlJvb3RNYXJrUmVhc29uLmgi
CisjaW5jbHVkZSAiVmlzaXRSYWNlS2V5LmgiCisjaW5jbHVkZSA8d3RmL0NvbmN1cnJlbnRQdHJI
YXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL1NoYXJlZFRhc2suaD4KKyNpbmNsdWRlIDx3dGYvdGV4
dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBDb25zZXJ2YXRpdmVSb290
czsKK2NsYXNzIEhlYXA7CitjbGFzcyBIZWFwQ2VsbDsKK2NsYXNzIEpTQ2VsbDsKK2NsYXNzIE1h
cmtlZEJsb2NrOworY2xhc3MgTWFya2luZ0NvbnN0cmFpbnQ7CitjbGFzcyBNYXJraW5nQ29uc3Ry
YWludFNvbHZlcjsKK2NsYXNzIFByZWNpc2VBbGxvY2F0aW9uOworY2xhc3MgU2xvdFZpc2l0b3I7
CitjbGFzcyBWTTsKK2NsYXNzIFZlcmlmaWVyU2xvdFZpc2l0b3I7Cit0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBjbGFzcyBXZWFrOwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVHJhaXRzPiBj
bGFzcyBXcml0ZUJhcnJpZXJCYXNlOworCitjbGFzcyBBYnN0cmFjdFNsb3RWaXNpdG9yIHsKKyAg
ICBXVEZfTUFLRV9OT05DT1BZQUJMRShBYnN0cmFjdFNsb3RWaXNpdG9yKTsKKyAgICBXVEZfTUFL
RV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBjbGFzcyBDb250ZXh0IHsKKyAgICBwdWJs
aWM6CisgICAgICAgIENvbnRleHQoQWJzdHJhY3RTbG90VmlzaXRvciYsIEhlYXBDZWxsKik7Cisg
ICAgICAgIH5Db250ZXh0KCk7CisgICAgICAgIEhlYXBDZWxsKiBjZWxsKCkgY29uc3QgeyByZXR1
cm4gbV9jZWxsOyB9CisgICAgcHJpdmF0ZToKKyAgICAgICAgQWJzdHJhY3RTbG90VmlzaXRvciYg
bV92aXNpdG9yOworICAgICAgICBIZWFwQ2VsbCogbV9jZWxsOworICAgICAgICBDb250ZXh0KiBt
X3ByZXZpb3VzOworICAgIH07CisKKyAgICBjbGFzcyBTdXBwcmVzc0dDVmVyaWZpZXJTY29wZSB7
CisgICAgcHVibGljOgorICAgICAgICBTdXBwcmVzc0dDVmVyaWZpZXJTY29wZShBYnN0cmFjdFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQorICAgICAgICAgICAgOiBtX3Zpc2l0b3IodmlzaXRvcikKKyAg
ICAgICAgeworICAgICAgICAgICAgQVNTRVJUKCFtX3Zpc2l0b3IubV9zdXBwcmVzc1ZlcmlmaWVy
KTsKKyAgICAgICAgICAgIG1fdmlzaXRvci5tX3N1cHByZXNzVmVyaWZpZXIgPSB0cnVlOworICAg
ICAgICB9CisgICAgICAgIH5TdXBwcmVzc0dDVmVyaWZpZXJTY29wZSgpIHsgbV92aXNpdG9yLm1f
c3VwcHJlc3NWZXJpZmllciA9IGZhbHNlOyB9CisgICAgcHJpdmF0ZToKKyAgICAgICAgQWJzdHJh
Y3RTbG90VmlzaXRvciYgbV92aXNpdG9yOworICAgIH07CisKKyAgICBjbGFzcyBEZWZhdWx0TWFy
a2luZ1Zpb2xhdGlvbkFzc2VydGlvblNjb3BlIHsKKyAgICBwdWJsaWM6CisgICAgICAgIERlZmF1
bHRNYXJraW5nVmlvbGF0aW9uQXNzZXJ0aW9uU2NvcGUoQWJzdHJhY3RTbG90VmlzaXRvciYpIHsg
fQorICAgIH07CisKKyAgICB2aXJ0dWFsIH5BYnN0cmFjdFNsb3RWaXNpdG9yKCkgPSBkZWZhdWx0
OworCisgICAgTWFya1N0YWNrQXJyYXkmIGNvbGxlY3Rvck1hcmtTdGFjaygpIHsgcmV0dXJuIG1f
Y29sbGVjdG9yU3RhY2s7IH0KKyAgICBNYXJrU3RhY2tBcnJheSYgbXV0YXRvck1hcmtTdGFjaygp
IHsgcmV0dXJuIG1fbXV0YXRvclN0YWNrOyB9CisgICAgY29uc3QgTWFya1N0YWNrQXJyYXkmIGNv
bGxlY3Rvck1hcmtTdGFjaygpIGNvbnN0IHsgcmV0dXJuIG1fY29sbGVjdG9yU3RhY2s7IH0KKyAg
ICBjb25zdCBNYXJrU3RhY2tBcnJheSYgbXV0YXRvck1hcmtTdGFjaygpIGNvbnN0IHsgcmV0dXJu
IG1fbXV0YXRvclN0YWNrOyB9CisKKyAgICBib29sIGlzRW1wdHkoKSB7IHJldHVybiBtX2NvbGxl
Y3RvclN0YWNrLmlzRW1wdHkoKSAmJiBtX211dGF0b3JTdGFjay5pc0VtcHR5KCk7IH0KKworICAg
IFZNJiB2bSgpOworICAgIGNvbnN0IFZNJiB2bSgpIGNvbnN0OworICAgIEhlYXAqIGhlYXAoKSBj
b25zdDsKKworICAgIHZpcnR1YWwgdm9pZCBhcHBlbmQoY29uc3QgQ29uc2VydmF0aXZlUm9vdHMm
KSA9IDA7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBUcmFpdHM+IHZvaWQg
YXBwZW5kKGNvbnN0IFdyaXRlQmFycmllckJhc2U8VCwgVHJhaXRzPiYpOworICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFQsIHR5cGVuYW1lIFRyYWl0cz4gdm9pZCBhcHBlbmRIaWRkZW4oY29uc3QgV3Jp
dGVCYXJyaWVyQmFzZTxULCBUcmFpdHM+Jik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSXRlcmF0
b3I+IHZvaWQgYXBwZW5kKEl0ZXJhdG9yIGJlZ2luICwgSXRlcmF0b3IgZW5kKTsKKyAgICBBTFdB
WVNfSU5MSU5FIHZvaWQgYXBwZW5kVmFsdWVzKGNvbnN0IFdyaXRlQmFycmllckJhc2U8VW5rbm93
biwgUmF3VmFsdWVUcmFpdHM8VW5rbm93bj4+Kiwgc2l6ZV90IGNvdW50KTsKKyAgICBBTFdBWVNf
SU5MSU5FIHZvaWQgYXBwZW5kVmFsdWVzSGlkZGVuKGNvbnN0IFdyaXRlQmFycmllckJhc2U8VW5r
bm93biwgUmF3VmFsdWVUcmFpdHM8VW5rbm93bj4+Kiwgc2l6ZV90IGNvdW50KTsKKworICAgIC8v
IFRoZXNlIGRvbid0IHJlcXVpcmUgeW91IHRvIHByb3ZlIHRoYXQgeW91IGhhdmUgYSBXcml0ZUJh
cnJpZXI8Pi4gVGhhdCBtYWtlcyBzZW5zZQorICAgIC8vIGZvcjoKKyAgICAvLworICAgIC8vIC0g
cm9vdHMuCisgICAgLy8gLSBzb3BoaXN0aWNhdGVkIGRhdGEgc3RydWN0dXJlcyB0aGF0IGJhcnJp
ZXIgdGhyb3VnaCBvdGhlciBtZWFucyAobGlrZSBERkc6OlBsYW4gYW5kCisgICAgLy8gICBmcmll
bmRzKS4KKyAgICAvLworICAgIC8vIElmIHlvdSBhcmUgbm90IGEgcm9vdCBhbmQgeW91IGRvbid0
IGtub3cgd2hhdCBraW5kIG9mIGJhcnJpZXIgeW91IGhhdmUsIHRoZW4geW91CisgICAgLy8gc2hv
dWxkbid0IGNhbGwgdGhlc2UgbWV0aG9kcy4KKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgYXBwZW5k
VW5iYXJyaWVyZWQoSlNWYWx1ZSk7CisgICAgQUxXQVlTX0lOTElORSB2b2lkIGFwcGVuZFVuYmFy
cmllcmVkKEpTVmFsdWUqLCBzaXplX3QpOworICAgIHZpcnR1YWwgdm9pZCBhcHBlbmRVbmJhcnJp
ZXJlZChKU0NlbGwqKSA9IDA7CisKKyAgICBpbmxpbmUgYm9vbCBhZGRPcGFxdWVSb290KHZvaWQq
KTsgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSByb290IHdhcyBuZXcuCisgICAgaW5saW5lIGJvb2wg
Y29udGFpbnNPcGFxdWVSb290KHZvaWQqKSBjb25zdDsKKyAgICB2b2lkIHNldElnbm9yZU5ld09w
YXF1ZVJvb3RzKGJvb2wgdmFsdWUpIHsgbV9pZ25vcmVOZXdPcGFxdWVSb290cyA9IHZhbHVlOyB9
CisKKyAgICB2aXJ0dWFsIGJvb2wgaXNGaXJzdFZpc2l0KCkgY29uc3QgPSAwOworCisgICAgdmly
dHVhbCBib29sIGlzTWFya2VkKGNvbnN0IHZvaWQqKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBi
b29sIGlzTWFya2VkKE1hcmtlZEJsb2NrJiwgSGVhcENlbGwqKSBjb25zdCA9IDA7CisgICAgdmly
dHVhbCBib29sIGlzTWFya2VkKFByZWNpc2VBbGxvY2F0aW9uJiwgSGVhcENlbGwqKSBjb25zdCA9
IDA7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIHZvaWQgYXBwZW5kKGNvbnN0IFdl
YWs8VD4mKTsKKworICAgIEFMV0FZU19JTkxJTkUgdm9pZCBhcHBlbmRIaWRkZW5VbmJhcnJpZXJl
ZChKU1ZhbHVlKTsKKyAgICB2aXJ0dWFsIHZvaWQgYXBwZW5kSGlkZGVuVW5iYXJyaWVyZWQoSlND
ZWxsKikgPSAwOworCisgICAgc2l6ZV90IHZpc2l0Q291bnQoKSBjb25zdCB7IHJldHVybiBtX3Zp
c2l0Q291bnQ7IH0KKworICAgIHZvaWQgYWRkVG9WaXNpdENvdW50KHNpemVfdCB2YWx1ZSkgeyBt
X3Zpc2l0Q291bnQgKz0gdmFsdWU7IH0KKworICAgIHZpcnR1YWwgdm9pZCBhZGRQYXJhbGxlbENv
bnN0cmFpbnRUYXNrKFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoQWJzdHJhY3RTbG90VmlzaXRvciYp
Pj4pID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgYWRkUGFyYWxsZWxDb25zdHJhaW50VGFzayhSZWZQ
dHI8U2hhcmVkVGFzazx2b2lkKFNsb3RWaXNpdG9yJik+PikgPSAwOworCisgICAgdmlydHVhbCB2
b2lkIG1hcmtBdXhpbGlhcnkoY29uc3Qgdm9pZCogYmFzZSkgPSAwOworCisgICAgdmlydHVhbCB2
b2lkIHJlcG9ydEV4dHJhTWVtb3J5VmlzaXRlZChzaXplX3QpID0gMDsKKyNpZiBFTkFCTEUoUkVT
T1VSQ0VfVVNBR0UpCisgICAgdmlydHVhbCB2b2lkIHJlcG9ydEV4dGVybmFsTWVtb3J5VmlzaXRl
ZChzaXplX3QpID0gMDsKKyNlbmRpZgorCisgICAgdmlydHVhbCB2b2lkIGR1bXAoUHJpbnRTdHJl
YW0mKSBjb25zdCA9IDA7CisKKyAgICBSb290TWFya1JlYXNvbiByb290TWFya1JlYXNvbigpIGNv
bnN0IHsgcmV0dXJuIG1fcm9vdE1hcmtSZWFzb247IH0KKyAgICB2b2lkIHNldFJvb3RNYXJrUmVh
c29uKFJvb3RNYXJrUmVhc29uIHJlYXNvbikgeyBtX3Jvb3RNYXJrUmVhc29uID0gcmVhc29uOyB9
CisKKyAgICB2aXJ0dWFsIGJvb2wgbXV0YXRvcklzU3RvcHBlZCgpIGNvbnN0ID0gMDsKKworICAg
IHZpcnR1YWwgdm9pZCBkaWRSYWNlKGNvbnN0IFZpc2l0UmFjZUtleSYpID0gMDsKKyAgICB2b2lk
IGRpZFJhY2UoSlNDZWxsKiBjZWxsLCBjb25zdCBjaGFyKiByZWFzb24pIHsgZGlkUmFjZShWaXNp
dFJhY2VLZXkoY2VsbCwgcmVhc29uKSk7IH0KKworICAgIHZpcnR1YWwgdm9pZCB2aXNpdEFzQ29u
c3RyYWludChjb25zdCBKU0NlbGwqKSA9IDA7CisKKyAgICBjb25zdCBjaGFyKiBjb2RlTmFtZSgp
IGNvbnN0IHsgcmV0dXJuIG1fY29kZU5hbWUuZGF0YSgpOyB9CisKK3Byb3RlY3RlZDoKKyAgICBp
bmxpbmUgQWJzdHJhY3RTbG90VmlzaXRvcihIZWFwJiwgQ1N0cmluZyBjb2RlTmFtZSwgQ29uY3Vy
cmVudFB0ckhhc2hTZXQmKTsKKworICAgIEhlYXBDZWxsKiBwYXJlbnRDZWxsKCkgY29uc3Q7Cisg
ICAgdm9pZCByZXNldCgpOworCisgICAgTWFya1N0YWNrQXJyYXkgbV9jb2xsZWN0b3JTdGFjazsK
KyAgICBNYXJrU3RhY2tBcnJheSBtX211dGF0b3JTdGFjazsKKworICAgIHNpemVfdCBtX3Zpc2l0
Q291bnQgeyAwIH07CisKKyAgICBIZWFwJiBtX2hlYXA7CisgICAgQ29udGV4dCogbV9jb250ZXh0
IHsgbnVsbHB0ciB9OworICAgIENTdHJpbmcgbV9jb2RlTmFtZTsKKworICAgIE1hcmtpbmdDb25z
dHJhaW50KiBtX2N1cnJlbnRDb25zdHJhaW50IHsgbnVsbHB0ciB9OworICAgIE1hcmtpbmdDb25z
dHJhaW50U29sdmVyKiBtX2N1cnJlbnRTb2x2ZXIgeyBudWxscHRyIH07CisgICAgQ29uY3VycmVu
dFB0ckhhc2hTZXQmIG1fb3BhcXVlUm9vdHM7CisKKyAgICBSb290TWFya1JlYXNvbiBtX3Jvb3RN
YXJrUmVhc29uIHsgUm9vdE1hcmtSZWFzb246Ok5vbmUgfTsKKyAgICBib29sIG1fc3VwcHJlc3NW
ZXJpZmllciB7IGZhbHNlIH07CisgICAgYm9vbCBtX2lnbm9yZU5ld09wYXF1ZVJvb3RzIHsgZmFs
c2UgfTsgLy8gVXNlZnVsIGFzIGEgZGVidWdnaW5nIG1vZGUuCisKKyAgICBmcmllbmQgY2xhc3Mg
TWFya2luZ0NvbnN0cmFpbnRTb2x2ZXI7Cit9OworCitjbGFzcyBTZXRSb290TWFya1JlYXNvblNj
b3BlIHsKK3B1YmxpYzoKKyAgICBTZXRSb290TWFya1JlYXNvblNjb3BlKEFic3RyYWN0U2xvdFZp
c2l0b3ImIHZpc2l0b3IsIFJvb3RNYXJrUmVhc29uIHJlYXNvbikKKyAgICAgICAgOiBtX3Zpc2l0
b3IodmlzaXRvcikKKyAgICAgICAgLCBtX3ByZXZpb3VzUmVhc29uKHZpc2l0b3Iucm9vdE1hcmtS
ZWFzb24oKSkKKyAgICB7CisgICAgICAgIG1fdmlzaXRvci5zZXRSb290TWFya1JlYXNvbihyZWFz
b24pOworICAgIH0KKworICAgIH5TZXRSb290TWFya1JlYXNvblNjb3BlKCkKKyAgICB7CisgICAg
ICAgIG1fdmlzaXRvci5zZXRSb290TWFya1JlYXNvbihtX3ByZXZpb3VzUmVhc29uKTsKKyAgICB9
CisKK3ByaXZhdGU6CisgICAgQWJzdHJhY3RTbG90VmlzaXRvciYgbV92aXNpdG9yOworICAgIFJv
b3RNYXJrUmVhc29uIG1fcHJldmlvdXNSZWFzb247Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Fic3RyYWN0U2xvdFZpc2l0b3JJbmxp
bmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQWJzdHJhY3RT
bG90VmlzaXRvcklubGluZXMuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9BYnN0cmFjdFNsb3RWaXNpdG9ySW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMTU0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJBYnN0cmFjdFNsb3RWaXNpdG9yLmgiCisjaW5j
bHVkZSAiSGVhcC5oIgorI2luY2x1ZGUgIldlYWtJbmxpbmVzLmgiCisjaW5jbHVkZSAiV3JpdGVC
YXJyaWVyLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitpbmxpbmUgQWJzdHJhY3RTbG90VmlzaXRv
cjo6Q29udGV4dDo6Q29udGV4dChBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBIZWFwQ2Vs
bCogY2VsbCkKKyAgICA6IG1fdmlzaXRvcih2aXNpdG9yKQorICAgICwgbV9jZWxsKGNlbGwpCit7
CisgICAgbV9wcmV2aW91cyA9IG1fdmlzaXRvci5tX2NvbnRleHQ7CisgICAgbV92aXNpdG9yLm1f
Y29udGV4dCA9IHRoaXM7Cit9CisKK2lubGluZSBBYnN0cmFjdFNsb3RWaXNpdG9yOjpDb250ZXh0
Ojp+Q29udGV4dCgpCit7CisgICAgbV92aXNpdG9yLm1fY29udGV4dCA9IG1fcHJldmlvdXM7Cit9
CisKK2lubGluZSBBYnN0cmFjdFNsb3RWaXNpdG9yOjpBYnN0cmFjdFNsb3RWaXNpdG9yKEhlYXAm
IGhlYXAsIENTdHJpbmcgY29kZU5hbWUsIENvbmN1cnJlbnRQdHJIYXNoU2V0JiBvcGFxdWVSb290
cykKKyAgICA6IG1faGVhcChoZWFwKQorICAgICwgbV9jb2RlTmFtZShjb2RlTmFtZSkKKyAgICAs
IG1fb3BhcXVlUm9vdHMob3BhcXVlUm9vdHMpCit7Cit9CisKK2lubGluZSBIZWFwKiBBYnN0cmFj
dFNsb3RWaXNpdG9yOjpoZWFwKCkgY29uc3QKK3sKKyAgICByZXR1cm4gJm1faGVhcDsKK30KKwor
aW5saW5lIFZNJiBBYnN0cmFjdFNsb3RWaXNpdG9yOjp2bSgpCit7CisgICAgcmV0dXJuIG1faGVh
cC52bSgpOworfQorCitpbmxpbmUgY29uc3QgVk0mIEFic3RyYWN0U2xvdFZpc2l0b3I6OnZtKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gbV9oZWFwLnZtKCk7Cit9CisKK2lubGluZSBib29sIEFic3Ry
YWN0U2xvdFZpc2l0b3I6OmFkZE9wYXF1ZVJvb3Qodm9pZCogcHRyKQoreworICAgIGlmICghcHRy
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG1faWdub3JlTmV3T3BhcXVlUm9vdHMp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIW1fb3BhcXVlUm9vdHMuYWRkKHB0cikp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBtX3Zpc2l0Q291bnQrKzsKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKworaW5saW5lIGJvb2wgQWJzdHJhY3RTbG90VmlzaXRvcjo6Y29udGFpbnNPcGFx
dWVSb290KHZvaWQqIHB0cikgY29uc3QKK3sKKyAgICByZXR1cm4gbV9vcGFxdWVSb290cy5jb250
YWlucyhwdHIpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorQUxXQVlTX0lOTElORSB2b2lk
IEFic3RyYWN0U2xvdFZpc2l0b3I6OmFwcGVuZChjb25zdCBXZWFrPFQ+JiB3ZWFrKQoreworICAg
IGFwcGVuZFVuYmFycmllcmVkKHdlYWsuZ2V0KCkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
LCB0eXBlbmFtZSBUcmFpdHM+CitBTFdBWVNfSU5MSU5FIHZvaWQgQWJzdHJhY3RTbG90VmlzaXRv
cjo6YXBwZW5kKGNvbnN0IFdyaXRlQmFycmllckJhc2U8VCwgVHJhaXRzPiYgc2xvdCkKK3sKKyAg
ICBhcHBlbmRVbmJhcnJpZXJlZChzbG90LmdldCgpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUg
VCwgdHlwZW5hbWUgVHJhaXRzPgorQUxXQVlTX0lOTElORSB2b2lkIEFic3RyYWN0U2xvdFZpc2l0
b3I6OmFwcGVuZEhpZGRlbihjb25zdCBXcml0ZUJhcnJpZXJCYXNlPFQsIFRyYWl0cz4mIHNsb3Qp
Cit7CisgICAgYXBwZW5kSGlkZGVuVW5iYXJyaWVyZWQoc2xvdC5nZXQoKSk7Cit9CisKK0FMV0FZ
U19JTkxJTkUgdm9pZCBBYnN0cmFjdFNsb3RWaXNpdG9yOjphcHBlbmRIaWRkZW5VbmJhcnJpZXJl
ZChKU1ZhbHVlIHZhbHVlKQoreworICAgIGlmICh2YWx1ZS5pc0NlbGwoKSkKKyAgICAgICAgYXBw
ZW5kSGlkZGVuVW5iYXJyaWVyZWQodmFsdWUuYXNDZWxsKCkpOworfQorCit0ZW1wbGF0ZTx0eXBl
bmFtZSBJdGVyYXRvcj4KK0FMV0FZU19JTkxJTkUgdm9pZCBBYnN0cmFjdFNsb3RWaXNpdG9yOjph
cHBlbmQoSXRlcmF0b3IgYmVnaW4sIEl0ZXJhdG9yIGVuZCkKK3sKKyAgICBmb3IgKGF1dG8gaXQg
PSBiZWdpbjsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICBhcHBlbmQoKml0KTsKK30KKworQUxX
QVlTX0lOTElORSB2b2lkIEFic3RyYWN0U2xvdFZpc2l0b3I6OmFwcGVuZFZhbHVlcyhjb25zdCBX
cml0ZUJhcnJpZXJCYXNlPFVua25vd24+KiBiYXJyaWVycywgc2l6ZV90IGNvdW50KQoreworICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY291bnQ7ICsraSkKKyAgICAgICAgYXBwZW5kKGJhcnJp
ZXJzW2ldKTsKK30KKworQUxXQVlTX0lOTElORSB2b2lkIEFic3RyYWN0U2xvdFZpc2l0b3I6OmFw
cGVuZFZhbHVlc0hpZGRlbihjb25zdCBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+KiBiYXJyaWVy
cywgc2l6ZV90IGNvdW50KQoreworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY291bnQ7ICsr
aSkKKyAgICAgICAgYXBwZW5kSGlkZGVuKGJhcnJpZXJzW2ldKTsKK30KKworQUxXQVlTX0lOTElO
RSB2b2lkIEFic3RyYWN0U2xvdFZpc2l0b3I6OmFwcGVuZFVuYmFycmllcmVkKEpTVmFsdWUgdmFs
dWUpCit7CisgICAgaWYgKHZhbHVlLmlzQ2VsbCgpKQorICAgICAgICBhcHBlbmRVbmJhcnJpZXJl
ZCh2YWx1ZS5hc0NlbGwoKSk7Cit9CisKK0FMV0FZU19JTkxJTkUgdm9pZCBBYnN0cmFjdFNsb3RW
aXNpdG9yOjphcHBlbmRVbmJhcnJpZXJlZChKU1ZhbHVlKiBzbG90LCBzaXplX3QgY291bnQpCit7
CisgICAgZm9yIChzaXplX3QgaSA9IGNvdW50OyBpLS07KQorICAgICAgICBhcHBlbmRVbmJhcnJp
ZXJlZChzbG90W2ldKTsKK30KKworQUxXQVlTX0lOTElORSBIZWFwQ2VsbCogQWJzdHJhY3RTbG90
VmlzaXRvcjo6cGFyZW50Q2VsbCgpIGNvbnN0Cit7CisgICAgaWYgKCFtX2NvbnRleHQpCisgICAg
ICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiBtX2NvbnRleHQtPmNlbGwoKTsKK30KKwor
QUxXQVlTX0lOTElORSB2b2lkIEFic3RyYWN0U2xvdFZpc2l0b3I6OnJlc2V0KCkKK3sKKyAgICBt
X3Zpc2l0Q291bnQgPSAwOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0hhbmRsZVNldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvSGFuZGxlU2V0LmNwcAkocmV2aXNpb24gMjczMTE5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGFuZGxlU2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxOSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTU2LDcgKzU2LDggQEAgdm9pZCBIYW5kbGVTZXQ6Omdyb3coKQogICAgIH0KIH0KIAotdm9pZCBI
YW5kbGVTZXQ6OnZpc2l0U3Ryb25nSGFuZGxlcyhTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBs
YXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEhhbmRsZVNldDo6dmlzaXRTdHJvbmdIYW5kbGVz
KFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgTm9kZSogZW5kID0gbV9zdHJvbmdMaXN0LmVuZCgp
OwogICAgIGZvciAoTm9kZSogbm9kZSA9IG1fc3Ryb25nTGlzdC5iZWdpbigpOyBub2RlICE9IGVu
ZDsgbm9kZSA9IG5vZGUtPm5leHQoKSkgewpAQCAtNjcsNiArNjgsOSBAQCB2b2lkIEhhbmRsZVNl
dDo6dmlzaXRTdHJvbmdIYW5kbGVzKFNsb3RWCiAgICAgfQogfQogCit0ZW1wbGF0ZSB2b2lkIEhh
bmRsZVNldDo6dmlzaXRTdHJvbmdIYW5kbGVzKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBs
YXRlIHZvaWQgSGFuZGxlU2V0Ojp2aXNpdFN0cm9uZ0hhbmRsZXMoU2xvdFZpc2l0b3ImKTsKKwog
dm9pZCBIYW5kbGVTZXQ6OndyaXRlQmFycmllcihIYW5kbGVTbG90IHNsb3QsIGNvbnN0IEpTVmFs
dWUmIHZhbHVlKQogewogICAgIGlmICghdmFsdWUgPT0gISpzbG90ICYmIHNsb3QtPmlzQ2VsbCgp
ID09IHZhbHVlLmlzQ2VsbCgpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGFu
ZGxlU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGFuZGxl
U2V0LmgJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hh
bmRsZVNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMS0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzgsNyArMzgsNiBAQCBuYW1lc3BhY2UgSlND
IHsKIGNsYXNzIEhhbmRsZVNldDsKIGNsYXNzIFZNOwogY2xhc3MgSlNWYWx1ZTsKLWNsYXNzIFNs
b3RWaXNpdG9yOwogCiBjbGFzcyBIYW5kbGVOb2RlIHsKIHB1YmxpYzoKQEAgLTczLDcgKzcyLDcg
QEAgcHVibGljOgogICAgIEhhbmRsZVNsb3QgYWxsb2NhdGUoKTsKICAgICB2b2lkIGRlYWxsb2Nh
dGUoSGFuZGxlU2xvdCk7CiAKLSAgICB2b2lkIHZpc2l0U3Ryb25nSGFuZGxlcyhTbG90VmlzaXRv
ciYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgdmlzaXRTdHJvbmdIYW5k
bGVzKFZpc2l0b3ImKTsKIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgd3JpdGVCYXJyaWVy
KEhhbmRsZVNsb3QsIGNvbnN0IEpTVmFsdWUmKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvSGVhcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvSGVhcC5jcHAJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0hlYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Miw2ICs3Miw3IEBACiAjaW5jbHVkZSAi
VHlwZVByb2ZpbGVyLmgiCiAjaW5jbHVkZSAiVHlwZVByb2ZpbGVyTG9nLmgiCiAjaW5jbHVkZSAi
Vk0uaCIKKyNpbmNsdWRlICJWZXJpZmllclNsb3RWaXNpdG9ySW5saW5lcy5oIgogI2luY2x1ZGUg
IldlYWtNYXBJbXBsSW5saW5lcy5oIgogI2luY2x1ZGUgIldlYWtTZXRJbmxpbmVzLmgiCiAjaW5j
bHVkZSA8YWxnb3JpdGhtPgpAQCAtNjQzLDE5ICs2NDQsMTkgQEAgdm9pZCBIZWFwOjpjb21wbGV0
ZUFsbEpJVFBsYW5zKCkKICAgICBERkc6OmNvbXBsZXRlQWxsUGxhbnNGb3JWTShtX3ZtKTsKIH0K
IAotdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KLXZvaWQgSGVhcDo6aXRlcmF0ZUV4ZWN1dGluZ0Fu
ZENvbXBpbGluZ0NvZGVCbG9ja3MoY29uc3QgRnVuYyYgZnVuYykKK3RlbXBsYXRlPHR5cGVuYW1l
IEZ1bmMsIHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEhlYXA6Oml0ZXJhdGVFeGVjdXRpbmdBbmRD
b21waWxpbmdDb2RlQmxvY2tzKFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IEZ1bmMmIGZ1bmMpCiB7
CiAgICAgbV9jb2RlQmxvY2tzLT5pdGVyYXRlQ3VycmVudGx5RXhlY3V0aW5nKGZ1bmMpOwogICAg
IGlmIChPcHRpb25zOjp1c2VKSVQoKSkKLSAgICAgICAgREZHOjppdGVyYXRlQ29kZUJsb2Nrc0Zv
ckdDKG1fdm0sIGZ1bmMpOworICAgICAgICBERkc6Oml0ZXJhdGVDb2RlQmxvY2tzRm9yR0Modmlz
aXRvciwgbV92bSwgZnVuYyk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+Ci12b2lkIEhl
YXA6Oml0ZXJhdGVFeGVjdXRpbmdBbmRDb21waWxpbmdDb2RlQmxvY2tzV2l0aG91dEhvbGRpbmdM
b2Nrcyhjb25zdCBGdW5jJiBmdW5jKQordGVtcGxhdGU8dHlwZW5hbWUgRnVuYywgdHlwZW5hbWUg
VmlzaXRvcj4KK3ZvaWQgSGVhcDo6aXRlcmF0ZUV4ZWN1dGluZ0FuZENvbXBpbGluZ0NvZGVCbG9j
a3NXaXRob3V0SG9sZGluZ0xvY2tzKFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IEZ1bmMmIGZ1bmMp
CiB7CiAgICAgVmVjdG9yPENvZGVCbG9jayosIDI1Nj4gY29kZUJsb2NrczsKLSAgICBpdGVyYXRl
RXhlY3V0aW5nQW5kQ29tcGlsaW5nQ29kZUJsb2NrcygKKyAgICBpdGVyYXRlRXhlY3V0aW5nQW5k
Q29tcGlsaW5nQ29kZUJsb2Nrcyh2aXNpdG9yLAogICAgICAgICBbJl0gKENvZGVCbG9jayogY29k
ZUJsb2NrKSB7CiAgICAgICAgICAgICBjb2RlQmxvY2tzLmFwcGVuZChjb2RlQmxvY2spOwogICAg
ICAgICB9KTsKQEAgLTczMywxNCArNzM0LDYgQEAgdm9pZCBIZWFwOjpyZW1vdmVEZWFkQ29tcGls
ZXJXb3JrbGlzdEVudAogI2VuZGlmCiB9CiAKLWJvb2wgSGVhcDo6aXNBbmFseXppbmdIZWFwKCkg
Y29uc3QKLXsKLSAgICBIZWFwUHJvZmlsZXIqIGhlYXBQcm9maWxlciA9IG1fdm0uaGVhcFByb2Zp
bGVyKCk7Ci0gICAgaWYgKFVOTElLRUxZKGhlYXBQcm9maWxlcikpCi0gICAgICAgIHJldHVybiBo
ZWFwUHJvZmlsZXItPmFjdGl2ZUhlYXBBbmFseXplcigpOwotICAgIHJldHVybiBmYWxzZTsKLX0K
LQogc3RydWN0IEdhdGhlckV4dHJhSGVhcERhdGEgOiBNYXJrZWRCbG9jazo6Q291bnRGdW5jdG9y
IHsKICAgICBHYXRoZXJFeHRyYUhlYXBEYXRhKFZNJiB2bSwgSGVhcEFuYWx5emVyJiBhbmFseXpl
cikKICAgICAgICAgOiBtX3ZtKHZtKQpAQCAtMTQ4NSwxNCArMTQ3OCwyMSBAQCBORVZFUl9JTkxJ
TkUgYm9vbCBIZWFwOjpydW5FbmRQaGFzZShHQ0NvCiAgICAgfQogICAgIG1faGVscGVyQ2xpZW50
LmZpbmlzaCgpOwogICAgIAotICAgIGl0ZXJhdGVFeGVjdXRpbmdBbmRDb21waWxpbmdDb2RlQmxv
Y2tzKAorICAgIEFTU0VSVChtX211dGF0b3JNYXJrU3RhY2stPmlzRW1wdHkoKSk7CisgICAgQVNT
RVJUKG1fcmFjZU1hcmtTdGFjay0+aXNFbXB0eSgpKTsKKworICAgIFNsb3RWaXNpdG9yJiB2aXNp
dG9yID0gKm1fY29sbGVjdG9yU2xvdFZpc2l0b3I7CisgICAgaXRlcmF0ZUV4ZWN1dGluZ0FuZENv
bXBpbGluZ0NvZGVCbG9ja3ModmlzaXRvciwKICAgICAgICAgWyZdIChDb2RlQmxvY2sqIGNvZGVC
bG9jaykgewogICAgICAgICAgICAgd3JpdGVCYXJyaWVyKGNvZGVCbG9jayk7CiAgICAgICAgIH0p
OwotICAgICAgICAKKwogICAgIHVwZGF0ZU9iamVjdENvdW50cygpOwogICAgIGVuZE1hcmtpbmco
KTsKIAorICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjp2ZXJpZnlHQygpKSkKKyAgICAgICAgdmVy
aWZ5R0MoKTsKKwogICAgIGlmIChVTkxJS0VMWShtX3ZlcmlmaWVyKSkgewogICAgICAgICBtX3Zl
cmlmaWVyLT5nYXRoZXJMaXZlQ2VsbHMoSGVhcFZlcmlmaWVyOjpQaGFzZTo6QWZ0ZXJNYXJraW5n
KTsKICAgICAgICAgbV92ZXJpZmllci0+dmVyaWZ5KEhlYXBWZXJpZmllcjo6UGhhc2U6OkFmdGVy
TWFya2luZyk7CkBAIC0yMTcwLDYgKzIxNzAsMTEgQEAgdm9pZCBIZWFwOjpzdXNwZW5kQ29tcGls
ZXJUaHJlYWRzKCkKIAogdm9pZCBIZWFwOjp3aWxsU3RhcnRDb2xsZWN0aW9uKCkKIHsKKyAgICBp
ZiAoVU5MSUtFTFkoT3B0aW9uczo6dmVyaWZ5R0MoKSkpIHsKKyAgICAgICAgbV92ZXJpZmllclNs
b3RWaXNpdG9yID0gbWFrZVVuaXF1ZTxWZXJpZmllclNsb3RWaXNpdG9yPigqdGhpcyk7CisgICAg
ICAgIEFTU0VSVCghbV9pc01hcmtpbmdGb3JHQ1ZlcmlmaWVyKTsKKyAgICB9CisKICAgICBkYXRh
TG9nSWYoT3B0aW9uczo6bG9nR0MoKSwgIj0+ICIpOwogICAgIAogICAgIGlmIChzaG91bGREb0Z1
bGxDb2xsZWN0aW9uKCkpIHsKQEAgLTI2OTcsMTMgKzI3MDIsNDkgQEAgdm9pZCBIZWFwOjpkaWRG
cmVlQmxvY2soc2l6ZV90IGNhcGFjaXR5KQogI2VuZGlmCiB9CiAKKy8vIFRoZSBmb2xsb3dpbmcg
YXJlIHB1bGxlZCBvdXQgb2YgdGhlIGJvZHkgb2YgSGVhcDo6YWRkQ29yZUNvbnN0cmFpbnRzKCkg
b25seQorLy8gYmVjYXVzZSB0aGUgV2luQ2Fpcm8gcG9ydCBpcyBub3QgYWJsZSB0byBoYW5kbGUg
I2lmJ3MgaW5zaWRlIHRoZSBib2R5IG9mIHRoZQorLy8gbGFtYmRhIHBhc3NlZCBpbnRvIHRoZSBN
QUtFX01BUktJTkdfQ09OU1RSQUlOVF9FWEVDVVRPUl9QQUlSIG1hY3JvLiBUaGlzIHdvcmtzCisv
LyBhcm91bmQgdGhhdCBpc3N1ZS4KKworI2lmIEpTQ19PQkpDX0FQSV9FTkFCTEVECitjb25zdGV4
cHIgYm9vbCBvYmpjQVBJRW5hYmxlZCA9IHRydWU7CisjZWxzZQorY29uc3RleHByIGJvb2wgb2Jq
Y0FQSUVuYWJsZWQgPSBmYWxzZTsKK3N0YXRpYyBVTlVTRURfRlVOQ1RJT04gdm9pZCBzY2FuRXh0
ZXJuYWxSZW1lbWJlcmVkU2V0KFZNJiwgQWJzdHJhY3RTbG90VmlzaXRvciYpIHsgfQorI2VuZGlm
CisKKyNpZiBFTkFCTEUoU0FNUExJTkdfUFJPRklMRVIpCitjb25zdGV4cHIgYm9vbCBzYW1wbGlu
Z1Byb2ZpbGVyU3VwcG9ydGVkID0gdHJ1ZTsKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Citz
dGF0aWMgQUxXQVlTX0lOTElORSB2b2lkIHNlcnZpY2VTYW1wbGluZ1Byb2ZpbGVyKFZNJiB2bSwg
VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBTYW1wbGluZ1Byb2ZpbGVyKiBzYW1wbGluZ1Byb2Zp
bGVyID0gdm0uc2FtcGxpbmdQcm9maWxlcigpOworICAgIGlmIChVTkxJS0VMWShzYW1wbGluZ1By
b2ZpbGVyKSkgeworICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKHNhbXBsaW5nUHJvZmls
ZXItPmdldExvY2soKSk7CisgICAgICAgIHNhbXBsaW5nUHJvZmlsZXItPnByb2Nlc3NVbnZlcmlm
aWVkU3RhY2tUcmFjZXMobG9ja2VyKTsKKyAgICAgICAgc2FtcGxpbmdQcm9maWxlci0+dmlzaXQo
dmlzaXRvcik7CisgICAgICAgIGlmIChPcHRpb25zOjpsb2dHQygpID09IEdDTG9nZ2luZzo6VmVy
Ym9zZSkKKyAgICAgICAgICAgIGRhdGFMb2coIlNhbXBsaW5nIFByb2ZpbGVyIGRhdGE6XG4iLCB2
aXNpdG9yKTsKKyAgICB9Cit9OworI2Vsc2UKK2NvbnN0ZXhwciBib29sIHNhbXBsaW5nUHJvZmls
ZXJTdXBwb3J0ZWQgPSBmYWxzZTsKK3N0YXRpYyBVTlVTRURfRlVOQ1RJT04gdm9pZCBzZXJ2aWNl
U2FtcGxpbmdQcm9maWxlcihWTSYsIEFic3RyYWN0U2xvdFZpc2l0b3ImKSB7IH07CisjZW5kaWYK
Kwogdm9pZCBIZWFwOjphZGRDb3JlQ29uc3RyYWludHMoKQogewogICAgIG1fY29uc3RyYWludFNl
dC0+YWRkKAogICAgICAgICAiQ3MiLCAiQ29uc2VydmF0aXZlIFNjYW4iLAotICAgICAgICBbdGhp
cywgbGFzdFZlcnNpb24gPSBzdGF0aWNfY2FzdDx1aW50NjRfdD4oMCldIChTbG90VmlzaXRvciYg
dmlzaXRvcikgbXV0YWJsZSB7CisgICAgICAgIE1BS0VfTUFSS0lOR19DT05TVFJBSU5UX0VYRUNV
VE9SX1BBSVIoKFt0aGlzLCBsYXN0VmVyc2lvbiA9IHN0YXRpY19jYXN0PHVpbnQ2NF90PigwKV0g
KGF1dG8mIHZpc2l0b3IpIG11dGFibGUgewogICAgICAgICAgICAgYm9vbCBzaG91bGROb3RQcm9k
dWNlV29yayA9IGxhc3RWZXJzaW9uID09IG1fcGhhc2VWZXJzaW9uOwotICAgICAgICAgICAgaWYg
KHNob3VsZE5vdFByb2R1Y2VXb3JrKQorCisgICAgICAgICAgICAvLyBGb3IgdGhlIEdDIFZlcmZp
ZXIsIHdlIHdvdWxkIGxpa2UgdG8gdXNlIHRoZSBpZGVudGljYWwgc2V0IG9mIGNvbnNlcnZhdGl2
ZSByb290cworICAgICAgICAgICAgLy8gYXMgdGhlIHJlYWwgR0MuIE90aGVyd2lzZSwgdGhlIEdD
IHZlcmlmaWVyIG1heSByZXBvcnQgZmFsc2UgbmVnYXRpdmVzIGR1ZSB0bworICAgICAgICAgICAg
Ly8gdmFyaWF0aW9ucyBpbiBzdGFjayB2YWx1ZXMuIEZvciB0aGlzIHNhbWUgcmVhc29uLCB3ZSB3
aWxsIHNraXAgdGhpcyBjb25zdHJhaW50CisgICAgICAgICAgICAvLyB3aGVuIHdlJ3JlIHJ1bm5p
bmcgdGhlIEdDIHZlcmlmaWNhdGlvbiBpbiB0aGUgRW5kIHBoYXNlLgorICAgICAgICAgICAgaWYg
KHNob3VsZE5vdFByb2R1Y2VXb3JrIHx8IG1faXNNYXJraW5nRm9yR0NWZXJpZmllcikKICAgICAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAKICAgICAgICAgICAgIFRpbWluZ1Njb3Bl
IHByZUNvbnZlcmdlbmNlVGltaW5nU2NvcGUoKnRoaXMsICJDb25zdHJhaW50OiBjb25zZXJ2YXRp
dmUgc2NhbiIpOwpAQCAtMjcyMCwyNCArMjc2MSwzMSBAQCB2b2lkIEhlYXA6OmFkZENvcmVDb25z
dHJhaW50cygpCiAKICAgICAgICAgICAgICAgICBTZXRSb290TWFya1JlYXNvblNjb3BlIHJvb3RT
Y29wZSh2aXNpdG9yLCBSb290TWFya1JlYXNvbjo6Q29uc2VydmF0aXZlU2Nhbik7CiAgICAgICAg
ICAgICAgICAgdmlzaXRvci5hcHBlbmQoY29uc2VydmF0aXZlUm9vdHMpOworICAgICAgICAgICAg
ICAgIGlmIChVTkxJS0VMWShtX3ZlcmlmaWVyU2xvdFZpc2l0b3IpKQorICAgICAgICAgICAgICAg
ICAgICBtX3ZlcmlmaWVyU2xvdFZpc2l0b3ItPmFwcGVuZChjb25zZXJ2YXRpdmVSb290cyk7CiAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoT3B0aW9uczo6dXNlSklUKCkpIHsKICAgICAg
ICAgICAgICAgICAvLyBKSVRTdHViUm91dGluZXMgbXVzdCBiZSB2aXNpdGVkIGFmdGVyIHNjYW5u
aW5nIENvbnNlcnZhdGl2ZVJvb3RzIHNpbmNlIEpJVFN0dWJSb3V0aW5lcyBkZXBlbmQgb24gdGhl
IGhvb2sgZXhlY3V0ZWQgZHVyaW5nIGdhdGhlcmluZyBDb25zZXJ2YXRpdmVSb290cy4KICAgICAg
ICAgICAgICAgICBTZXRSb290TWFya1JlYXNvblNjb3BlIHJvb3RTY29wZSh2aXNpdG9yLCBSb290
TWFya1JlYXNvbjo6SklUU3R1YlJvdXRpbmVzKTsKICAgICAgICAgICAgICAgICBtX2ppdFN0dWJS
b3V0aW5lcy0+dHJhY2VNYXJrZWRTdHViUm91dGluZXModmlzaXRvcik7CisgICAgICAgICAgICAg
ICAgaWYgKFVOTElLRUxZKG1fdmVyaWZpZXJTbG90VmlzaXRvcikpIHsKKyAgICAgICAgICAgICAg
ICAgICAgLy8gSXQncyBpbXBvcnRhbnQgdG8gY2FzdCBtX3ZlcmlmaWVyU2xvdFZpc2l0b3IgdG8g
YW4gQWJzdHJhY3RTbG90VmlzaXRvciBoZXJlCisgICAgICAgICAgICAgICAgICAgIC8vIHNvIHRo
YXQgd2UnbGwgY2FsbCB0aGUgQWJzdHJhY3RTbG90VmlzaXRvciB2ZXJzaW9uIG9mIHRyYWNlTWFy
a2VkU3R1YlJvdXRpbmVzKCkuCisgICAgICAgICAgICAgICAgICAgIEFic3RyYWN0U2xvdFZpc2l0
b3ImIHZpc2l0b3IgPSAqbV92ZXJpZmllclNsb3RWaXNpdG9yOworICAgICAgICAgICAgICAgICAg
ICBtX2ppdFN0dWJSb3V0aW5lcy0+dHJhY2VNYXJrZWRTdHViUm91dGluZXModmlzaXRvcik7Cisg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgICAg
ICBsYXN0VmVyc2lvbiA9IG1fcGhhc2VWZXJzaW9uOwotICAgICAgICB9LAorICAgICAgICB9KSks
CiAgICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5OjpHcmV5ZWRCeUV4ZWN1dGlvbik7CiAgICAg
CiAgICAgbV9jb25zdHJhaW50U2V0LT5hZGQoCiAgICAgICAgICJNc3IiLCAiTWlzYyBTbWFsbCBS
b290cyIsCi0gICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsKKyAgICAgICAg
TUFLRV9NQVJLSU5HX0NPTlNUUkFJTlRfRVhFQ1VUT1JfUEFJUigoW3RoaXNdIChhdXRvJiB2aXNp
dG9yKSB7CisgICAgICAgICAgICBpZiBjb25zdGV4cHIgKG9iamNBUElFbmFibGVkKQorICAgICAg
ICAgICAgICAgIHNjYW5FeHRlcm5hbFJlbWVtYmVyZWRTZXQobV92bSwgdmlzaXRvcik7CiAKLSNp
ZiBKU0NfT0JKQ19BUElfRU5BQkxFRAotICAgICAgICAgICAgc2NhbkV4dGVybmFsUmVtZW1iZXJl
ZFNldChtX3ZtLCB2aXNpdG9yKTsKLSNlbmRpZgogICAgICAgICAgICAgaWYgKG1fdm0uc21hbGxT
dHJpbmdzLm5lZWRzVG9CZVZpc2l0ZWQoKm1fY29sbGVjdGlvblNjb3BlKSkgewogICAgICAgICAg
ICAgICAgIFNldFJvb3RNYXJrUmVhc29uU2NvcGUgcm9vdFNjb3BlKHZpc2l0b3IsIFJvb3RNYXJr
UmVhc29uOjpTdHJvbmdSZWZlcmVuY2VzKTsKICAgICAgICAgICAgICAgICBtX3ZtLnNtYWxsU3Ry
aW5ncy52aXNpdFN0cm9uZ1JlZmVyZW5jZXModmlzaXRvcik7CkBAIC0yNzYzLDY4ICsyODExLDY2
IEBAIHZvaWQgSGVhcDo6YWRkQ29yZUNvbnN0cmFpbnRzKCkKICAgICAgICAgICAgICAgICB2aXNp
dG9yLmFwcGVuZFVuYmFycmllcmVkKG1fdm0uZXhjZXB0aW9uKCkpOwogICAgICAgICAgICAgICAg
IHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQobV92bS5sYXN0RXhjZXB0aW9uKCkpOwogICAgICAg
ICAgICAgfQotICAgICAgICB9LAorICAgICAgICB9KSksCiAgICAgICAgIENvbnN0cmFpbnRWb2xh
dGlsaXR5OjpHcmV5ZWRCeUV4ZWN1dGlvbik7CiAgICAgCiAgICAgbV9jb25zdHJhaW50U2V0LT5h
ZGQoCiAgICAgICAgICJTaCIsICJTdHJvbmcgSGFuZGxlcyIsCi0gICAgICAgIFt0aGlzXSAoU2xv
dFZpc2l0b3ImIHZpc2l0b3IpIHsKKyAgICAgICAgTUFLRV9NQVJLSU5HX0NPTlNUUkFJTlRfRVhF
Q1VUT1JfUEFJUigoW3RoaXNdIChhdXRvJiB2aXNpdG9yKSB7CiAgICAgICAgICAgICBTZXRSb290
TWFya1JlYXNvblNjb3BlIHJvb3RTY29wZSh2aXNpdG9yLCBSb290TWFya1JlYXNvbjo6U3Ryb25n
SGFuZGxlcyk7CiAgICAgICAgICAgICBtX2hhbmRsZVNldC52aXNpdFN0cm9uZ0hhbmRsZXModmlz
aXRvcik7Ci0gICAgICAgIH0sCisgICAgICAgIH0pKSwKICAgICAgICAgQ29uc3RyYWludFZvbGF0
aWxpdHk6OkdyZXllZEJ5RXhlY3V0aW9uKTsKICAgICAKICAgICBtX2NvbnN0cmFpbnRTZXQtPmFk
ZCgKICAgICAgICAgIkQiLCAiRGVidWdnZXIiLAotICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9y
JiB2aXNpdG9yKSB7CisgICAgICAgIE1BS0VfTUFSS0lOR19DT05TVFJBSU5UX0VYRUNVVE9SX1BB
SVIoKFt0aGlzXSAoYXV0byYgdmlzaXRvcikgewogICAgICAgICAgICAgU2V0Um9vdE1hcmtSZWFz
b25TY29wZSByb290U2NvcGUodmlzaXRvciwgUm9vdE1hcmtSZWFzb246OkRlYnVnZ2VyKTsKIAot
I2lmIEVOQUJMRShTQU1QTElOR19QUk9GSUxFUikKLSAgICAgICAgICAgIGlmIChTYW1wbGluZ1By
b2ZpbGVyKiBzYW1wbGluZ1Byb2ZpbGVyID0gbV92bS5zYW1wbGluZ1Byb2ZpbGVyKCkpIHsKLSAg
ICAgICAgICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKHNhbXBsaW5nUHJvZmlsZXItPmdl
dExvY2soKSk7Ci0gICAgICAgICAgICAgICAgc2FtcGxpbmdQcm9maWxlci0+cHJvY2Vzc1VudmVy
aWZpZWRTdGFja1RyYWNlcyhsb2NrZXIpOwotICAgICAgICAgICAgICAgIHNhbXBsaW5nUHJvZmls
ZXItPnZpc2l0KHZpc2l0b3IpOwotICAgICAgICAgICAgICAgIGlmIChPcHRpb25zOjpsb2dHQygp
ID09IEdDTG9nZ2luZzo6VmVyYm9zZSkKLSAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiU2Ft
cGxpbmcgUHJvZmlsZXIgZGF0YTpcbiIsIHZpc2l0b3IpOwotICAgICAgICAgICAgfQotI2VuZGlm
IC8vIEVOQUJMRShTQU1QTElOR19QUk9GSUxFUikKKyAgICAgICAgICAgIGlmIGNvbnN0ZXhwciAo
c2FtcGxpbmdQcm9maWxlclN1cHBvcnRlZCkKKyAgICAgICAgICAgICAgICBzZXJ2aWNlU2FtcGxp
bmdQcm9maWxlcihtX3ZtLCB2aXNpdG9yKTsKIAogICAgICAgICAgICAgaWYgKG1fdm0udHlwZVBy
b2ZpbGVyKCkpCiAgICAgICAgICAgICAgICAgbV92bS50eXBlUHJvZmlsZXJMb2coKS0+dmlzaXQo
dmlzaXRvcik7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmIChhdXRvKiBzaGFkb3dDaGlj
a2VuID0gbV92bS5zaGFkb3dDaGlja2VuKCkpCiAgICAgICAgICAgICAgICAgc2hhZG93Q2hpY2tl
bi0+dmlzaXRDaGlsZHJlbih2aXNpdG9yKTsKLSAgICAgICAgfSwKKyAgICAgICAgfSkpLAogICAg
ICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eTo6R3JleWVkQnlFeGVjdXRpb24pOwogICAgIAogICAg
IG1fY29uc3RyYWludFNldC0+YWRkKAogICAgICAgICAiV3MiLCAiV2VhayBTZXRzIiwKLSAgICAg
ICAgW3RoaXNdIChTbG90VmlzaXRvciYgdmlzaXRvcikgeworICAgICAgICBNQUtFX01BUktJTkdf
Q09OU1RSQUlOVF9FWEVDVVRPUl9QQUlSKChbdGhpc10gKGF1dG8mIHZpc2l0b3IpIHsKICAgICAg
ICAgICAgIFNldFJvb3RNYXJrUmVhc29uU2NvcGUgcm9vdFNjb3BlKHZpc2l0b3IsIFJvb3RNYXJr
UmVhc29uOjpXZWFrU2V0cyk7CiAgICAgICAgICAgICBtX29iamVjdFNwYWNlLnZpc2l0V2Vha1Nl
dHModmlzaXRvcik7Ci0gICAgICAgIH0sCisgICAgICAgIH0pKSwKICAgICAgICAgQ29uc3RyYWlu
dFZvbGF0aWxpdHk6OkdyZXllZEJ5TWFya2luZyk7CiAgICAgCiAgICAgbV9jb25zdHJhaW50U2V0
LT5hZGQoCiAgICAgICAgICJPIiwgIk91dHB1dCIsCi0gICAgICAgIFtdIChTbG90VmlzaXRvciYg
dmlzaXRvcikgeworICAgICAgICBNQUtFX01BUktJTkdfQ09OU1RSQUlOVF9FWEVDVVRPUl9QQUlS
KChbXSAoYXV0byYgdmlzaXRvcikgeworICAgICAgICAgICAgdXNpbmcgVmlzaXRvciA9IGRlY2x0
eXBlKHZpc2l0b3IpOwogICAgICAgICAgICAgVk0mIHZtID0gdmlzaXRvci52bSgpOwogCi0gICAg
ICAgICAgICBhdXRvIGNhbGxPdXRwdXRDb25zdHJhaW50ID0gW10gKFNsb3RWaXNpdG9yJiB2aXNp
dG9yLCBIZWFwQ2VsbCogaGVhcENlbGwsIEhlYXBDZWxsOjpLaW5kKSB7Ci0gICAgICAgICAgICAg
ICAgU2V0Um9vdE1hcmtSZWFzb25TY29wZSByb290U2NvcGUodmlzaXRvciwgUm9vdE1hcmtSZWFz
b246Ok91dHB1dCk7Ci0gICAgICAgICAgICAgICAgVk0mIHZtID0gdmlzaXRvci52bSgpOworICAg
ICAgICAgICAgLy8gVGhlIGB2aXNpdG9yMmAgYXJndW1lbnQgaXMgc3RyYW5nZWx5IG5hbWVkIGJl
Y2F1c2UgdGhlIFdpbkNhaXJvIHBvcnQKKyAgICAgICAgICAgIC8vIGdldHMgY29uZnVzZWQgIGFu
ZCB0aGlua3Mgd2UncmUgdHJ5aW5nIHRvIGNhcHR1cmUgdGhlIG91dGVyIHZpc2l0b3IKKyAgICAg
ICAgICAgIC8vIGFyZyBoZXJlLiBHaXZpbmcgaXQgYSB1bmlxdWUgbmFtZSB3b3JrcyBhcm91bmQg
dGhpcyBpc3N1ZS4KKyAgICAgICAgICAgIGF1dG8gY2FsbE91dHB1dENvbnN0cmFpbnQgPSBbXSAo
VmlzaXRvciYgdmlzaXRvcjIsIEhlYXBDZWxsKiBoZWFwQ2VsbCwgSGVhcENlbGw6OktpbmQpIHsK
KyAgICAgICAgICAgICAgICBTZXRSb290TWFya1JlYXNvblNjb3BlIHJvb3RTY29wZSh2aXNpdG9y
MiwgUm9vdE1hcmtSZWFzb246Ok91dHB1dCk7CisgICAgICAgICAgICAgICAgVk0mIHZtID0gdmlz
aXRvcjIudm0oKTsKICAgICAgICAgICAgICAgICBKU0NlbGwqIGNlbGwgPSBzdGF0aWNfY2FzdDxK
U0NlbGwqPihoZWFwQ2VsbCk7Ci0gICAgICAgICAgICAgICAgY2VsbC0+bWV0aG9kVGFibGUodm0p
LT52aXNpdE91dHB1dENvbnN0cmFpbnRzKGNlbGwsIHZpc2l0b3IpOworICAgICAgICAgICAgICAg
IGNlbGwtPm1ldGhvZFRhYmxlKHZtKS0+dmlzaXRPdXRwdXRDb25zdHJhaW50cyhjZWxsLCB2aXNp
dG9yMik7CiAgICAgICAgICAgICB9OwogICAgICAgICAgICAgCiAgICAgICAgICAgICBhdXRvIGFk
ZCA9IFsmXSAoYXV0byYgc2V0KSB7Ci0gICAgICAgICAgICAgICAgdmlzaXRvci5hZGRQYXJhbGxl
bENvbnN0cmFpbnRUYXNrKHNldC5mb3JFYWNoTWFya2VkQ2VsbEluUGFyYWxsZWwoY2FsbE91dHB1
dENvbnN0cmFpbnQpKTsKKyAgICAgICAgICAgICAgICBSZWZQdHI8U2hhcmVkVGFzazx2b2lkKFZp
c2l0b3ImKT4+IHRhc2sgPSBzZXQudGVtcGxhdGUgZm9yRWFjaE1hcmtlZENlbGxJblBhcmFsbGVs
PFZpc2l0b3I+KGNhbGxPdXRwdXRDb25zdHJhaW50KTsKKyAgICAgICAgICAgICAgICB2aXNpdG9y
LmFkZFBhcmFsbGVsQ29uc3RyYWludFRhc2sodGFzayk7CiAgICAgICAgICAgICB9OwogICAgICAg
ICAgICAgCiAgICAgICAgICAgICBhZGQodm0uZXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZXNXaXRo
Q29uc3RyYWludHMpOwogICAgICAgICAgICAgaWYgKHZtLm1fd2Vha01hcFNwYWNlKQogICAgICAg
ICAgICAgICAgIGFkZCgqdm0ubV93ZWFrTWFwU3BhY2UpOwotICAgICAgICB9LAorICAgICAgICB9
KSksCiAgICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5OjpHcmV5ZWRCeU1hcmtpbmcsCiAgICAg
ICAgIENvbnN0cmFpbnRQYXJhbGxlbGlzbTo6UGFyYWxsZWwpOwogICAgIApAQCAtMjgzMiw3ICsy
ODc4LDcgQEAgdm9pZCBIZWFwOjphZGRDb3JlQ29uc3RyYWludHMoKQogICAgIGlmIChPcHRpb25z
Ojp1c2VKSVQoKSkgewogICAgICAgICBtX2NvbnN0cmFpbnRTZXQtPmFkZCgKICAgICAgICAgICAg
ICJEdyIsICJERkcgV29ya2xpc3RzIiwKLSAgICAgICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3Im
IHZpc2l0b3IpIHsKKyAgICAgICAgICAgIE1BS0VfTUFSS0lOR19DT05TVFJBSU5UX0VYRUNVVE9S
X1BBSVIoKFt0aGlzXSAoYXV0byYgdmlzaXRvcikgewogICAgICAgICAgICAgICAgIFNldFJvb3RN
YXJrUmVhc29uU2NvcGUgcm9vdFNjb3BlKHZpc2l0b3IsIFJvb3RNYXJrUmVhc29uOjpERkdXb3Jr
TGlzdHMpOwogCiAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gREZHOjpudW1iZXJP
ZldvcmtsaXN0cygpOyBpLS07KQpAQCAtMjg0MCw3ICsyODg2LDcgQEAgdm9pZCBIZWFwOjphZGRD
b3JlQ29uc3RyYWludHMoKQogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIC8vIEZJ
WE1FOiBUaGlzIGlzIGFsbW9zdCBjZXJ0YWlubHkgdW5uZWNlc3NhcnkuCiAgICAgICAgICAgICAg
ICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NjgyOQotICAg
ICAgICAgICAgICAgIERGRzo6aXRlcmF0ZUNvZGVCbG9ja3NGb3JHQygKKyAgICAgICAgICAgICAg
ICBERkc6Oml0ZXJhdGVDb2RlQmxvY2tzRm9yR0ModmlzaXRvciwKICAgICAgICAgICAgICAgICAg
ICAgbV92bSwKICAgICAgICAgICAgICAgICAgICAgWyZdIChDb2RlQmxvY2sqIGNvZGVCbG9jaykg
ewogICAgICAgICAgICAgICAgICAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZChjb2Rl
QmxvY2spOwpAQCAtMjg0OCwyMyArMjg5NCwyMyBAQCB2b2lkIEhlYXA6OmFkZENvcmVDb25zdHJh
aW50cygpCiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgaWYgKE9wdGlvbnM6Omxv
Z0dDKCkgPT0gR0NMb2dnaW5nOjpWZXJib3NlKQogICAgICAgICAgICAgICAgICAgICBkYXRhTG9n
KCJERkcgV29ya2xpc3RzOlxuIiwgdmlzaXRvcik7Ci0gICAgICAgICAgICB9LAorICAgICAgICAg
ICAgfSkpLAogICAgICAgICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHk6OkdyZXllZEJ5TWFya2lu
Zyk7CiAgICAgfQogI2VuZGlmCiAgICAgCiAgICAgbV9jb25zdHJhaW50U2V0LT5hZGQoCiAgICAg
ICAgICJDYiIsICJDb2RlQmxvY2tzIiwKLSAgICAgICAgW3RoaXNdIChTbG90VmlzaXRvciYgdmlz
aXRvcikgeworICAgICAgICBNQUtFX01BUktJTkdfQ09OU1RSQUlOVF9FWEVDVVRPUl9QQUlSKChb
dGhpc10gKGF1dG8mIHZpc2l0b3IpIHsKICAgICAgICAgICAgIFNldFJvb3RNYXJrUmVhc29uU2Nv
cGUgcm9vdFNjb3BlKHZpc2l0b3IsIFJvb3RNYXJrUmVhc29uOjpDb2RlQmxvY2tzKTsKLSAgICAg
ICAgICAgIGl0ZXJhdGVFeGVjdXRpbmdBbmRDb21waWxpbmdDb2RlQmxvY2tzV2l0aG91dEhvbGRp
bmdMb2NrcygKKyAgICAgICAgICAgIGl0ZXJhdGVFeGVjdXRpbmdBbmRDb21waWxpbmdDb2RlQmxv
Y2tzV2l0aG91dEhvbGRpbmdMb2Nrcyh2aXNpdG9yLAogICAgICAgICAgICAgICAgIFsmXSAoQ29k
ZUJsb2NrKiBjb2RlQmxvY2spIHsKICAgICAgICAgICAgICAgICAgICAgLy8gVmlzaXQgdGhlIENv
ZGVCbG9jayBhcyBhIGNvbnN0cmFpbnQgb25seSBpZiBpdCdzIGJsYWNrLgotICAgICAgICAgICAg
ICAgICAgICBpZiAoaXNNYXJrZWQoY29kZUJsb2NrKQorICAgICAgICAgICAgICAgICAgICBpZiAo
dmlzaXRvci5pc01hcmtlZChjb2RlQmxvY2spCiAgICAgICAgICAgICAgICAgICAgICAgICAmJiBj
b2RlQmxvY2stPmNlbGxTdGF0ZSgpID09IENlbGxTdGF0ZTo6UG9zc2libHlCbGFjaykKICAgICAg
ICAgICAgICAgICAgICAgICAgIHZpc2l0b3IudmlzaXRBc0NvbnN0cmFpbnQoY29kZUJsb2NrKTsK
ICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgfSwKKyAgICAgICAgfSkpLAogICAgICAgICBD
b25zdHJhaW50Vm9sYXRpbGl0eTo6U2VsZG9tR3JleWVkKTsKICAgICAKICAgICBtX2NvbnN0cmFp
bnRTZXQtPmFkZChtYWtlVW5pcXVlPE1hcmtTdGFja01lcmdpbmdDb25zdHJhaW50PigqdGhpcykp
OwpAQCAtMzAyMyw0ICszMDY5LDM0IEBAIHZvaWQgSGVhcDo6cnVuVGFza0luUGFyYWxsZWwoUmVm
UHRyPFNoYXIKICAgICB9CiB9CiAKK3ZvaWQgSGVhcDo6dmVyaWZ5R0MoKQoreworICAgIFJFTEVB
U0VfQVNTRVJUKG1fdmVyaWZpZXJTbG90VmlzaXRvcik7CisgICAgUkVMRUFTRV9BU1NFUlQoIW1f
aXNNYXJraW5nRm9yR0NWZXJpZmllcik7CisgICAgbV9pc01hcmtpbmdGb3JHQ1ZlcmlmaWVyID0g
dHJ1ZTsKKworICAgIFZlcmlmaWVyU2xvdFZpc2l0b3ImIHZpc2l0b3IgPSAqbV92ZXJpZmllclNs
b3RWaXNpdG9yOworCisgICAgZG8geworICAgICAgICB3aGlsZSAoIXZpc2l0b3IuaXNFbXB0eSgp
KQorICAgICAgICAgICAgdmlzaXRvci5kcmFpbigpOworICAgICAgICBtX2NvbnN0cmFpbnRTZXQt
PmV4ZWN1dGVBbGxTeW5jaHJvbm91c2x5KHZpc2l0b3IpOworICAgICAgICB2aXNpdG9yLmV4ZWN1
dGVDb25zdHJhaW50VGFza3MoKTsKKyAgICB9IHdoaWxlICghdmlzaXRvci5pc0VtcHR5KCkpOwor
CisgICAgbV9pc01hcmtpbmdGb3JHQ1ZlcmlmaWVyID0gZmFsc2U7CisKKyAgICB2aXNpdG9yLmZv
ckVhY2hMaXZlQ2VsbChbJl0gKEhlYXBDZWxsKiBjZWxsKSB7CisgICAgICAgIGlmIChIZWFwOjpp
c01hcmtlZChjZWxsKSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBkYXRhTG9nTG4o
IlxuIiAiR0MgVmVyaWZpZXI6IEVSUk9SIGNlbGwgIiwgUmF3UG9pbnRlcihjZWxsKSwgIiB3YXMg
bm90IG1hcmtlZCIpOworICAgICAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6dmVyYm9zZVZlcmlm
eUdDKCkpKQorICAgICAgICAgICAgdmlzaXRvci5kdW1wTWFya2VyRGF0YShjZWxsKTsKKyAgICAg
ICAgUkVMRUFTRV9BU1NFUlQodGhpcy0+aXNNYXJrZWQoY2VsbCkpOworICAgIH0pOworCisgICAg
bV92ZXJpZmllclNsb3RWaXNpdG9yID0gbnVsbHB0cjsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlND
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCShyZXZpc2lvbiAyNzMxMTkpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNyAr
MSw3IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAwIEhhcnJpIFBvcnRlbiAocG9y
dGVuQGtkZS5vcmcpCiAgKiAgQ29weXJpZ2h0IChDKSAyMDAxIFBldGVyIEtlbGx5IChwbWtAcG9z
dC5jb20pCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKQEAgLTg2LDYgKzg2LDcgQEAgY2xh
c3MgU3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlcjsKIGNsYXNzIFN0b3BJZk5lY2Vzc2FyeVRpbWVy
OwogY2xhc3MgU3dlZXBpbmdTY29wZTsKIGNsYXNzIFZNOworY2xhc3MgVmVyaWZpZXJTbG90Vmlz
aXRvcjsKIGNsYXNzIFdlYWtHQ01hcEJhc2U7CiBzdHJ1Y3QgQ3VycmVudFRocmVhZFN0YXRlOwog
CkBAIC0xODQsOCArMTg1LDYgQEAgcHVibGljOgogICAgIAogICAgIGJvb2wgaXNTaHV0dGluZ0Rv
d24oKSBjb25zdCB7IHJldHVybiBtX2lzU2h1dHRpbmdEb3duOyB9CiAKLSAgICBKU19FWFBPUlRf
UFJJVkFURSBib29sIGlzQW5hbHl6aW5nSGVhcCgpIGNvbnN0OwotCiAgICAgSlNfRVhQT1JUX1BS
SVZBVEUgdm9pZCBzd2VlcFN5bmNocm9ub3VzbHkoKTsKIAogICAgIGJvb2wgc2hvdWxkQ29sbGVj
dEhldXJpc3RpYygpOwpAQCAtMzg1LDggKzM4NCw2IEBAIHB1YmxpYzoKICAgICAKICAgICBKU19F
WFBPUlRfUFJJVkFURSB2b2lkIGFkZE1hcmtpbmdDb25zdHJhaW50KHN0ZDo6dW5pcXVlX3B0cjxN
YXJraW5nQ29uc3RyYWludD4pOwogICAgIAotICAgIHNpemVfdCBudW1PcGFxdWVSb290cygpIGNv
bnN0IHsgcmV0dXJuIG1fb3BhcXVlUm9vdHMuc2l6ZSgpOyB9Ci0KICAgICBIZWFwVmVyaWZpZXIq
IHZlcmlmaWVyKCkgY29uc3QgeyByZXR1cm4gbV92ZXJpZmllci5nZXQoKTsgfQogICAgIAogICAg
IHZvaWQgYWRkSGVhcEZpbmFsaXplckNhbGxiYWNrKGNvbnN0IEhlYXBGaW5hbGl6ZXJDYWxsYmFj
ayYpOwpAQCAtNDA3LDYgKzQwNCw4IEBAIHB1YmxpYzoKIAogICAgIEhhc2hNYXA8SlNJbW11dGFi
bGVCdXR0ZXJmbHkqLCBKU1N0cmluZyo+IGltbXV0YWJsZUJ1dHRlcmZseVRvU3RyaW5nQ2FjaGU7
CiAKKyAgICBib29sIGlzTWFya2luZ0ZvckdDVmVyaWZpZXIoKSBjb25zdCB7IHJldHVybiBtX2lz
TWFya2luZ0ZvckdDVmVyaWZpZXI7IH0KKwogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgQWxs
b2NhdGluZ1Njb3BlOwogICAgIGZyaWVuZCBjbGFzcyBDb2RlQmxvY2s7CkBAIC01NzUsMTEgKzU3
NCwxMSBAQCBwcml2YXRlOgogCiAgICAgYm9vbCBvdmVyQ3JpdGljYWxNZW1vcnlUaHJlc2hvbGQo
TWVtb3J5VGhyZXNob2xkQ2FsbFR5cGUgbWVtb3J5VGhyZXNob2xkQ2FsbFR5cGUgPSBNZW1vcnlU
aHJlc2hvbGRDYWxsVHlwZTo6Q2FjaGVkKTsKICAgICAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBG
dW5jPgotICAgIHZvaWQgaXRlcmF0ZUV4ZWN1dGluZ0FuZENvbXBpbGluZ0NvZGVCbG9ja3MoY29u
c3QgRnVuYyYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmMsIHR5cGVuYW1lIFZpc2l0b3I+
CisgICAgdm9pZCBpdGVyYXRlRXhlY3V0aW5nQW5kQ29tcGlsaW5nQ29kZUJsb2NrcyhWaXNpdG9y
JiwgY29uc3QgRnVuYyYpOwogICAgIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+Ci0gICAg
dm9pZCBpdGVyYXRlRXhlY3V0aW5nQW5kQ29tcGlsaW5nQ29kZUJsb2Nrc1dpdGhvdXRIb2xkaW5n
TG9ja3MoY29uc3QgRnVuYyYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmMsIHR5cGVuYW1l
IFZpc2l0b3I+CisgICAgdm9pZCBpdGVyYXRlRXhlY3V0aW5nQW5kQ29tcGlsaW5nQ29kZUJsb2Nr
c1dpdGhvdXRIb2xkaW5nTG9ja3MoVmlzaXRvciYsIGNvbnN0IEZ1bmMmKTsKICAgICAKICAgICB2
b2lkIGFzc2VydE1hcmtTdGFja3NFbXB0eSgpOwogCkBAIC01OTAsNiArNTg5LDggQEAgcHJpdmF0
ZToKICAgICBzdGF0aWMgYm9vbCB1c2VHZW5lcmF0aW9uYWxHQygpOwogICAgIHN0YXRpYyBib29s
IHNob3VsZFN3ZWVwU3luY2hyb25vdXNseSgpOwogICAgIAorICAgIHZvaWQgdmVyaWZ5R0MoKTsK
KwogICAgIGNvbnN0IEhlYXBUeXBlIG1faGVhcFR5cGU7CiAgICAgTXV0YXRvclN0YXRlIG1fbXV0
YXRvclN0YXRlIHsgTXV0YXRvclN0YXRlOjpSdW5uaW5nIH07CiAgICAgY29uc3Qgc2l6ZV90IG1f
cmFtU2l6ZTsKQEAgLTYzNiw2ICs2MzcsNyBAQCBwcml2YXRlOgogICAgIHN0ZDo6dW5pcXVlX3B0
cjxNYXJrU3RhY2tBcnJheT4gbV9tdXRhdG9yTWFya1N0YWNrOwogICAgIHN0ZDo6dW5pcXVlX3B0
cjxNYXJrU3RhY2tBcnJheT4gbV9yYWNlTWFya1N0YWNrOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxN
YXJraW5nQ29uc3RyYWludFNldD4gbV9jb25zdHJhaW50U2V0OworICAgIHN0ZDo6dW5pcXVlX3B0
cjxWZXJpZmllclNsb3RWaXNpdG9yPiBtX3ZlcmlmaWVyU2xvdFZpc2l0b3I7CiAKICAgICAvLyBX
ZSBwb29sIHRoZSBzbG90IHZpc2l0b3JzIHVzZWQgYnkgcGFyYWxsZWwgbWFya2luZyB0aHJlYWRz
LiBJdCdzIHVzZWZ1bCB0byBiZSBhYmxlIHRvCiAgICAgLy8gZW51bWVyYXRlIG92ZXIgdGhlbSwg
YW5kIGl0J3MgdXNlZnVsIHRvIGhhdmUgdGhlbSBjYWNoZSBzb21lIHNtYWxsIGFtb3VudCBvZiBt
ZW1vcnkgZnJvbQpAQCAtNjU0LDYgKzY1Niw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2lzU2Fm
ZVRvQ29sbGVjdCB7IGZhbHNlIH07CiAgICAgYm9vbCBtX2lzU2h1dHRpbmdEb3duIHsgZmFsc2Ug
fTsKICAgICBib29sIG1fbXV0YXRvclNob3VsZEJlRmVuY2VkIHsgT3B0aW9uczo6Zm9yY2VGZW5j
ZWRCYXJyaWVyKCkgfTsKKyAgICBib29sIG1faXNNYXJraW5nRm9yR0NWZXJpZmllciB7IGZhbHNl
IH07CiAKICAgICB1bnNpZ25lZCBtX2JhcnJpZXJUaHJlc2hvbGQgeyBPcHRpb25zOjpmb3JjZUZl
bmNlZEJhcnJpZXIoKSA/IHRhdXRvbG9naWNhbFRocmVzaG9sZCA6IGJsYWNrVGhyZXNob2xkIH07
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBJbmxpbmVzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcElubGluZXMuaAkocmV2aXNp
b24gMjczMTE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcElubGluZXMuaAko
d29ya2luZyBjb3B5KQpAQCAtNjksNiArNjksNyBAQCBpbmxpbmUgYm9vbCBIZWFwOjp3b3JsZElz
U3RvcHBlZCgpIGNvbnN0CiAKIEFMV0FZU19JTkxJTkUgYm9vbCBIZWFwOjppc01hcmtlZChjb25z
dCB2b2lkKiByYXdDZWxsKQogeworICAgIEFTU0VSVCghbV9pc01hcmtpbmdGb3JHQ1ZlcmlmaWVy
KTsKICAgICBIZWFwQ2VsbCogY2VsbCA9IGJpdHdpc2VfY2FzdDxIZWFwQ2VsbCo+KHJhd0NlbGwp
OwogICAgIGlmIChjZWxsLT5pc1ByZWNpc2VBbGxvY2F0aW9uKCkpCiAgICAgICAgIHJldHVybiBj
ZWxsLT5wcmVjaXNlQWxsb2NhdGlvbigpLmlzTWFya2VkKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9IZWFwUHJvZmlsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0hlYXBQcm9maWxlci5jcHAJKHJldmlzaW9uIDI3MzExOSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBQcm9maWxlci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
NjAsNiArNjAsNyBAQCB2b2lkIEhlYXBQcm9maWxlcjo6c2V0QWN0aXZlSGVhcEFuYWx5emVyCiB7
CiAgICAgQVNTRVJUKCEhbV9hY3RpdmVBbmFseXplciAhPSAhIWFuYWx5emVyKTsKICAgICBtX2Fj
dGl2ZUFuYWx5emVyID0gYW5hbHl6ZXI7CisgICAgbV92bS5zZXRBY3RpdmVIZWFwQW5hbHl6ZXIo
YW5hbHl6ZXIpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0lzb0NlbGxTZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9Jc29DZWxsU2V0LmgJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0lzb0NlbGxTZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01OCw4ICs1OCw4IEBA
IHB1YmxpYzoKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgogICAgIHZvaWQgZm9yRWFjaE1h
cmtlZENlbGwoY29uc3QgRnVuYyYpOwogCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KLSAg
ICBSZWY8U2hhcmVkVGFzazx2b2lkKFNsb3RWaXNpdG9yJik+PiBmb3JFYWNoTWFya2VkQ2VsbElu
UGFyYWxsZWwoY29uc3QgRnVuYyYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3IsIHR5
cGVuYW1lIEZ1bmM+CisgICAgUmVmPFNoYXJlZFRhc2s8dm9pZChWaXNpdG9yJik+PiBmb3JFYWNo
TWFya2VkQ2VsbEluUGFyYWxsZWwoY29uc3QgRnVuYyYpOwogICAgIAogICAgIHRlbXBsYXRlPHR5
cGVuYW1lIEZ1bmM+CiAgICAgdm9pZCBmb3JFYWNoTGl2ZUNlbGwoY29uc3QgRnVuYyYpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvQ2VsbFNldElubGluZXMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Jc29DZWxsU2V0SW5saW5lcy5oCShy
ZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Jc29DZWxsU2V0
SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTkxLDEwICs5MSwxMCBAQCB2b2lkIElzb0NlbGxTZXQ6
OmZvckVhY2hNYXJrZWRDZWxsKGNvbnN0CiAgICAgICAgIH0pOwogfQogCi10ZW1wbGF0ZTx0eXBl
bmFtZSBGdW5jPgotUmVmPFNoYXJlZFRhc2s8dm9pZChTbG90VmlzaXRvciYpPj4gSXNvQ2VsbFNl
dDo6Zm9yRWFjaE1hcmtlZENlbGxJblBhcmFsbGVsKGNvbnN0IEZ1bmMmIGZ1bmMpCit0ZW1wbGF0
ZTx0eXBlbmFtZSBWaXNpdG9yLCB0eXBlbmFtZSBGdW5jPgorUmVmPFNoYXJlZFRhc2s8dm9pZChW
aXNpdG9yJik+PiBJc29DZWxsU2V0Ojpmb3JFYWNoTWFya2VkQ2VsbEluUGFyYWxsZWwoY29uc3Qg
RnVuYyYgZnVuYykKIHsKLSAgICBjbGFzcyBUYXNrIGZpbmFsIDogcHVibGljIFNoYXJlZFRhc2s8
dm9pZChTbG90VmlzaXRvciYpPiB7CisgICAgY2xhc3MgVGFzayBmaW5hbCA6IHB1YmxpYyBTaGFy
ZWRUYXNrPHZvaWQoVmlzaXRvciYpPiB7CiAgICAgcHVibGljOgogICAgICAgICBUYXNrKElzb0Nl
bGxTZXQmIHNldCwgY29uc3QgRnVuYyYgZnVuYykKICAgICAgICAgICAgIDogbV9zZXQoc2V0KQpA
QCAtMTAzLDcgKzEwMyw3IEBAIFJlZjxTaGFyZWRUYXNrPHZvaWQoU2xvdFZpc2l0b3ImKT4+IElz
b0MKICAgICAgICAgewogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICB2b2lkIHJ1bihTbG90
VmlzaXRvciYgdmlzaXRvcikgZmluYWwKKyAgICAgICAgdm9pZCBydW4oVmlzaXRvciYgdmlzaXRv
cikgZmluYWwKICAgICAgICAgewogICAgICAgICAgICAgd2hpbGUgKE1hcmtlZEJsb2NrOjpIYW5k
bGUqIGhhbmRsZSA9IG1fYmxvY2tTb3VyY2UtPnJ1bigpKSB7CiAgICAgICAgICAgICAgICAgdW5z
aWduZWQgYmxvY2tJbmRleCA9IGhhbmRsZS0+aW5kZXgoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0pJVFN0dWJSb3V0aW5lU2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9KSVRTdHViUm91dGluZVNldC5jcHAJKHJldmlzaW9uIDI3MzEx
OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0pJVFN0dWJSb3V0aW5lU2V0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIw
MjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0xMjgsNyArMTI4LDggQEAgdm9pZCBKSVRTdHViUm91dGluZVNldDo6ZGVs
ZXRlVW5tYXJrZWRKZQogICAgIG1fcm91dGluZXMuc2hyaW5rKGRzdEluZGV4KTsKIH0KIAotdm9p
ZCBKSVRTdHViUm91dGluZVNldDo6dHJhY2VNYXJrZWRTdHViUm91dGluZXMoU2xvdFZpc2l0b3Im
IHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKSVRTdHViUm91dGlu
ZVNldDo6dHJhY2VNYXJrZWRTdHViUm91dGluZXMoVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBm
b3IgKGF1dG8mIGVudHJ5IDogbV9yb3V0aW5lcykgewogICAgICAgICBHQ0F3YXJlSklUU3R1YlJv
dXRpbmUqIHJvdXRpbmUgPSBlbnRyeS5yb3V0aW5lOwpAQCAtMTM5LDYgKzE0MCw5IEBAIHZvaWQg
SklUU3R1YlJvdXRpbmVTZXQ6OnRyYWNlTWFya2VkU3R1YlIKICAgICB9CiB9CiAKK3RlbXBsYXRl
IHZvaWQgSklUU3R1YlJvdXRpbmVTZXQ6OnRyYWNlTWFya2VkU3R1YlJvdXRpbmVzKEFic3RyYWN0
U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSklUU3R1YlJvdXRpbmVTZXQ6OnRyYWNlTWFy
a2VkU3R1YlJvdXRpbmVzKFNsb3RWaXNpdG9yJik7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAj
ZW5kaWYgLy8gRU5BQkxFKEpJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0pJ
VFN0dWJSb3V0aW5lU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvSklUU3R1YlJvdXRpbmVTZXQuaAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvSklUU3R1YlJvdXRpbmVTZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxOCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM2
LDcgKzM2LDYgQEAgdXNpbmcgV1RGOjpSYW5nZTsKIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBH
Q0F3YXJlSklUU3R1YlJvdXRpbmU7Ci1jbGFzcyBTbG90VmlzaXRvcjsKIAogI2lmIEVOQUJMRShK
SVQpCiAKQEAgLTYzLDggKzYyLDggQEAgcHVibGljOgogICAgIHZvaWQgcHJlcGFyZUZvckNvbnNl
cnZhdGl2ZVNjYW4oKTsKICAgICAKICAgICB2b2lkIGRlbGV0ZVVubWFya2VkSmV0dGlzb25lZFN0
dWJSb3V0aW5lcygpOwotICAgIAotICAgIHZvaWQgdHJhY2VNYXJrZWRTdHViUm91dGluZXMoU2xv
dFZpc2l0b3ImKTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgdHJhY2VN
YXJrZWRTdHViUm91dGluZXMoVmlzaXRvciYpOwogICAgIAogcHJpdmF0ZToKICAgICB2b2lkIG1h
cmtTbG93KHVpbnRwdHJfdCBhZGRyZXNzKTsKQEAgLTkyLDcgKzkxLDcgQEAgcHVibGljOgogICAg
IHZvaWQgbWFyayh2b2lkKikgeyB9CiAgICAgdm9pZCBwcmVwYXJlRm9yQ29uc2VydmF0aXZlU2Nh
bigpIHsgfQogICAgIHZvaWQgZGVsZXRlVW5tYXJrZWRKZXR0aXNvbmVkU3R1YlJvdXRpbmVzKCkg
eyB9Ci0gICAgdm9pZCB0cmFjZU1hcmtlZFN0dWJSb3V0aW5lcyhTbG90VmlzaXRvciYpIHsgfQor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgdHJhY2VNYXJrZWRTdHViUm91dGlu
ZXMoVmlzaXRvciYpIHsgfQogfTsKIAogI2VuZGlmIC8vICFFTkFCTEUoSklUKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtTdGFja01lcmdpbmdD
b25zdHJhaW50LmNwcAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ2LDcg
KzQ2LDcgQEAgZG91YmxlIE1hcmtTdGFja01lcmdpbmdDb25zdHJhaW50OjpxdWljawogICAgIHJl
dHVybiBtX2hlYXAubV9tdXRhdG9yTWFya1N0YWNrLT5zaXplKCkgKyBtX2hlYXAubV9yYWNlTWFy
a1N0YWNrLT5zaXplKCk7CiB9CiAKLXZvaWQgTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQ6OnBy
ZXBhcmVUb0V4ZWN1dGVJbXBsKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgU2xvdFZpc2l0b3ImIHZp
c2l0b3IpCit2b2lkIE1hcmtTdGFja01lcmdpbmdDb25zdHJhaW50OjpwcmVwYXJlVG9FeGVjdXRl
SW1wbChjb25zdCBBYnN0cmFjdExvY2tlciYsIEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3Ip
CiB7CiAgICAgLy8gTG9nZ2luZyB0aGUgd29yayBoZXJlIGVuc3VyZXMgdGhhdCB0aGUgY29uc3Ry
YWludCBzb2x2ZXIga25vd3MgdGhhdCBpdCBkb2Vzbid0IG5lZWQgdG8gcHJvZHVjZQogICAgIC8v
IGFueW1vcmUgd29yay4KQEAgLTU2LDExICs1NiwyNCBAQCB2b2lkIE1hcmtTdGFja01lcmdpbmdD
b25zdHJhaW50OjpwcmVwYXJlCiAgICAgZGF0YUxvZ0lmKE9wdGlvbnM6OmxvZ0dDKCksICIoIiwg
c2l6ZSwgIikiKTsKIH0KIAotdm9pZCBNYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludDo6ZXhlY3V0
ZUltcGwoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgor
dm9pZCBNYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludDo6ZXhlY3V0ZUltcGxJbXBsKFZpc2l0b3Im
IHZpc2l0b3IpCiB7CisgICAgLy8gV2Ugd2FudCB0byBza2lwIHRoaXMgY29uc3RyYWludCBmb3Ig
dGhlIEdDIHZlcmlmaWVyIGJlY2F1c2U6CisgICAgLy8gMS4gVGhlcmUgc2hvdWxkIGJlIG5vIG11
dGF0b3IgbWFya2luZyBhY3Rpb24gYmV0d2VlbiB0aGUgRW5kIHBoYXNlIGFuZCB2ZXJpZnlHQygp
LgorICAgIC8vICAgIEhlbmNlLCB3ZSBjYW4gaWdub3JlIHRoc2Ugc3RhY2tzLgorICAgIC8vIDIu
IFRoZSBFbmQgcGhhc2UgZXhwbGljdGx5IGNhbGxzIGl0ZXJhdGVFeGVjdXRpbmdBbmRDb21waWxp
bmdDb2RlQmxvY2tzKCkKKyAgICAvLyAgICB0byBhZGQgZXhlY3V0aW5nIENvZGVCbG9ja3MgdG8g
bV9oZWFwLm1fbXV0YXRvck1hcmtTdGFjay4gV2Ugd2FudCB0bworICAgIC8vICAgIGxlYXZlIHRo
b3NlIHVucGVydHVyYmVkLgorICAgIGlmIChtX2hlYXAubV9pc01hcmtpbmdGb3JHQ1ZlcmlmaWVy
KQorICAgICAgICByZXR1cm47CisKICAgICBtX2hlYXAubV9tdXRhdG9yTWFya1N0YWNrLT50cmFu
c2ZlclRvKHZpc2l0b3IubXV0YXRvck1hcmtTdGFjaygpKTsKICAgICBtX2hlYXAubV9yYWNlTWFy
a1N0YWNrLT50cmFuc2ZlclRvKHZpc2l0b3IubXV0YXRvck1hcmtTdGFjaygpKTsKIH0KIAordm9p
ZCBNYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludDo6ZXhlY3V0ZUltcGwoQWJzdHJhY3RTbG90Vmlz
aXRvciYgdmlzaXRvcikgeyBleGVjdXRlSW1wbEltcGwodmlzaXRvcik7IH0KK3ZvaWQgTWFya1N0
YWNrTWVyZ2luZ0NvbnN0cmFpbnQ6OmV4ZWN1dGVJbXBsKFNsb3RWaXNpdG9yJiB2aXNpdG9yKSB7
IGV4ZWN1dGVJbXBsSW1wbCh2aXNpdG9yKTsgfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3RhY2tNZXJn
aW5nQ29uc3RyYWludC5oCShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9NYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludC5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
MCw2ICszMCw3IEBACiBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgSGVhcDsKK2NsYXNzIEFic3Ry
YWN0U2xvdFZpc2l0b3I7CiBjbGFzcyBTbG90VmlzaXRvcjsKIAogY2xhc3MgTWFya1N0YWNrTWVy
Z2luZ0NvbnN0cmFpbnQgZmluYWwgOiBwdWJsaWMgTWFya2luZ0NvbnN0cmFpbnQgewpAQCAtNDAs
NyArNDEsOSBAQCBwdWJsaWM6CiAgICAgZG91YmxlIHF1aWNrV29ya0VzdGltYXRlKFNsb3RWaXNp
dG9yJikgZmluYWw7CiAgICAgCiBwcml2YXRlOgotICAgIHZvaWQgcHJlcGFyZVRvRXhlY3V0ZUlt
cGwoY29uc3QgQWJzdHJhY3RMb2NrZXImIGNvbnN0cmFpbnRTb2x2aW5nTG9ja2VyLCBTbG90Vmlz
aXRvciYpIGZpbmFsOworICAgIHZvaWQgcHJlcGFyZVRvRXhlY3V0ZUltcGwoY29uc3QgQWJzdHJh
Y3RMb2NrZXImIGNvbnN0cmFpbnRTb2x2aW5nTG9ja2VyLCBBYnN0cmFjdFNsb3RWaXNpdG9yJikg
ZmluYWw7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gQUxXQVlTX0lOTElORSB2b2lk
IGV4ZWN1dGVJbXBsSW1wbChWaXNpdG9yJik7CisgICAgdm9pZCBleGVjdXRlSW1wbChBYnN0cmFj
dFNsb3RWaXNpdG9yJikgZmluYWw7CiAgICAgdm9pZCBleGVjdXRlSW1wbChTbG90VmlzaXRvciYp
IGZpbmFsOwogICAgIAogICAgIEhlYXAmIG1faGVhcDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL01hcmtlZEJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvTWFya2VkQmxvY2suaAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMjAwLDYgKzIw
MCw3IEBAIHB1YmxpYzoKICAgICAgICAgCiAgICAgICAgIHZvaWQqIHN0YXJ0KCkgY29uc3QgeyBy
ZXR1cm4gJm1fYmxvY2stPmF0b21zKClbMF07IH0KICAgICAgICAgdm9pZCogZW5kKCkgY29uc3Qg
eyByZXR1cm4gJm1fYmxvY2stPmF0b21zKClbbV9lbmRBdG9tXTsgfQorICAgICAgICB2b2lkKiBh
dG9tQXQoc2l6ZV90IGkpIGNvbnN0IHsgcmV0dXJuICZtX2Jsb2NrLT5hdG9tcygpW2ldOyB9CiAg
ICAgICAgIGJvb2wgY29udGFpbnModm9pZCogcCkgY29uc3QgeyByZXR1cm4gc3RhcnQoKSA8PSBw
ICYmIHAgPCBlbmQoKTsgfQogCiAgICAgICAgIHZvaWQgZHVtcFN0YXRlKFByaW50U3RyZWFtJik7
CkBAIC0yOTUsOSArMjk2LDEwIEBAIHB1YmxpYzoKIAogICAgICAgICBCaXRtYXA8YXRvbXNQZXJC
bG9jaz4gbV9tYXJrczsKICAgICAgICAgQml0bWFwPGF0b21zUGVyQmxvY2s+IG1fbmV3bHlBbGxv
Y2F0ZWQ7CisgICAgICAgIHZvaWQqIG1fdmVyaWZpZXJNZW1vIHsgbnVsbHB0ciB9OwogICAgIH07
CiAgICAgCi1wcml2YXRlOiAgICAKK3ByaXZhdGU6CiAgICAgRm9vdGVyJiBmb290ZXIoKTsKICAg
ICBjb25zdCBGb290ZXImIGZvb3RlcigpIGNvbnN0OwogCkBAIC0zODQsNyArMzg2LDExIEBAIHB1
YmxpYzoKICAgICAgICAgKmJpdHdpc2VfY2FzdDx2b2xhdGlsZSB1aW50OF90Kj4oJmZvb3Rlcigp
KTsKICAgICB9CiAgICAgCisgICAgdm9pZCBzZXRWZXJpZmllck1lbW8odm9pZCopOworICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFQ+IFQgdmVyaWZpZXJNZW1vKCkgY29uc3Q7CisKICAgICBzdGF0aWMg
Y29uc3RleHByIHNpemVfdCBvZmZzZXRPZkZvb3RlciA9IGVuZEF0b20gKiBhdG9tU2l6ZTsKKyAg
ICBzdGF0aWNfYXNzZXJ0KG9mZnNldE9mRm9vdGVyICsgc2l6ZW9mKEZvb3RlcikgPD0gYmxvY2tT
aXplKTsKIAogcHJpdmF0ZToKICAgICBNYXJrZWRCbG9jayhWTSYsIEhhbmRsZSYpOwpAQCAtNjYw
LDYgKzY2NiwxNyBAQCBpbmxpbmUgdm9pZCBNYXJrZWRCbG9jazo6bm90ZU1hcmtlZCgpCiAgICAg
ICAgIG5vdGVNYXJrZWRTbG93KCk7CiB9CiAKK2lubGluZSB2b2lkIE1hcmtlZEJsb2NrOjpzZXRW
ZXJpZmllck1lbW8odm9pZCogcCkKK3sKKyAgICBmb290ZXIoKS5tX3ZlcmlmaWVyTWVtbyA9IHA7
Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitUIE1hcmtlZEJsb2NrOjp2ZXJpZmllck1lbW8o
KSBjb25zdAoreworICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8VD4oZm9vdGVyKCkubV92ZXJpZmll
ck1lbW8pOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogbmFtZXNwYWNlIFdURiB7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRTcGFjZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkU3BhY2UuY3BwCShyZXZpc2lvbiAy
NzMxMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRTcGFjZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI3Miw3ICsyNzIsOCBAQCB2b2lkIE1hcmtlZFNwYWNlOjplbmFibGVQ
cmVjaXNlQWxsb2NhdGlvCiAgICAgICAgIG1fcHJlY2lzZUFsbG9jYXRpb25TZXQtPmFkZChhbGxv
Y2F0aW9uLT5jZWxsKCkpOwogfQogCi12b2lkIE1hcmtlZFNwYWNlOjp2aXNpdFdlYWtTZXRzKFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgTWFy
a2VkU3BhY2U6OnZpc2l0V2Vha1NldHMoVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBhdXRvIHZp
c2l0ID0gWyZdIChXZWFrU2V0KiB3ZWFrU2V0KSB7CiAgICAgICAgIHdlYWtTZXQtPnZpc2l0KHZp
c2l0b3IpOwpAQCAtMjg0LDYgKzI4NSw5IEBAIHZvaWQgTWFya2VkU3BhY2U6OnZpc2l0V2Vha1Nl
dHMoU2xvdFZpc2kKICAgICAgICAgbV9hY3RpdmVXZWFrU2V0cy5mb3JFYWNoKHZpc2l0KTsKIH0K
IAordGVtcGxhdGUgdm9pZCBNYXJrZWRTcGFjZTo6dmlzaXRXZWFrU2V0cyhBYnN0cmFjdFNsb3RW
aXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIE1hcmtlZFNwYWNlOjp2aXNpdFdlYWtTZXRzKFNsb3RW
aXNpdG9yJik7CisKIHZvaWQgTWFya2VkU3BhY2U6OnJlYXBXZWFrU2V0cygpCiB7CiAgICAgYXV0
byB2aXNpdCA9IFsmXSAoV2Vha1NldCogd2Vha1NldCkgewpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvTWFya2VkU3BhY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9NYXJrZWRTcGFjZS5oCShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRTcGFjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEs
NyBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMCBIYXJyaSBQb3J0ZW4gKHBvcnRl
bkBrZGUub3JnKQogICogIENvcHlyaWdodCAoQykgMjAwMSBQZXRlciBLZWxseSAocG1rQHBvc3Qu
Y29tKQotICogIENvcHlyaWdodCAoQykgMjAwMy0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCkBAIC0xMDUsNyArMTA1LDcgQEAgcHVi
bGljOgogICAgIAogICAgIHZvaWQgcHJlcGFyZUZvckFsbG9jYXRpb24oKTsKIAotICAgIHZvaWQg
dmlzaXRXZWFrU2V0cyhTbG90VmlzaXRvciYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0
b3I+IHZvaWQgdmlzaXRXZWFrU2V0cyhWaXNpdG9yJik7CiAgICAgdm9pZCByZWFwV2Vha1NldHMo
KTsKIAogICAgIE1hcmtlZEJsb2NrU2V0JiBibG9ja3MoKSB7IHJldHVybiBtX2Jsb2NrczsgfQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50
LmNwcAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFy
a2luZ0NvbnN0cmFpbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTUzLDYgKzUzLDcgQEAgdm9pZCBNYXJr
aW5nQ29uc3RyYWludDo6cmVzZXRTdGF0cygpCiAKIHZvaWQgTWFya2luZ0NvbnN0cmFpbnQ6OmV4
ZWN1dGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CisgICAgQVNTRVJUKCF2aXNpdG9yLmhlYXAo
KS0+aXNNYXJraW5nRm9yR0NWZXJpZmllcigpKTsKICAgICBWaXNpdENvdW50ZXIgdmlzaXRDb3Vu
dGVyKHZpc2l0b3IpOwogICAgIGV4ZWN1dGVJbXBsKHZpc2l0b3IpOwogICAgIG1fbGFzdFZpc2l0
Q291bnQgKz0gdmlzaXRDb3VudGVyLnZpc2l0Q291bnQoKTsKQEAgLTYwLDYgKzYxLDEyIEBAIHZv
aWQgTWFya2luZ0NvbnN0cmFpbnQ6OmV4ZWN1dGUoU2xvdFZpc2kKICAgICAgICAgZGF0YUxvZygi
KCIsIGFiYnJldmlhdGVkTmFtZSgpLCAiIHZpc2l0ZWQgIiwgdmlzaXRDb3VudGVyLnZpc2l0Q291
bnQoKSwgIiBpbiBleGVjdXRlKSIpOwogfQogCit2b2lkIE1hcmtpbmdDb25zdHJhaW50OjpleGVj
dXRlU3luY2hyb25vdXNseShBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIHBy
ZXBhcmVUb0V4ZWN1dGVJbXBsKE5vTG9ja2luZ05lY2Vzc2FyeSwgdmlzaXRvcik7CisgICAgZXhl
Y3V0ZUltcGwodmlzaXRvcik7Cit9CisKIGRvdWJsZSBNYXJraW5nQ29uc3RyYWludDo6cXVpY2tX
b3JrRXN0aW1hdGUoU2xvdFZpc2l0b3ImKQogewogICAgIHJldHVybiAwOwpAQCAtNzIsNiArNzks
NyBAQCBkb3VibGUgTWFya2luZ0NvbnN0cmFpbnQ6OndvcmtFc3RpbWF0ZShTCiAKIHZvaWQgTWFy
a2luZ0NvbnN0cmFpbnQ6OnByZXBhcmVUb0V4ZWN1dGUoY29uc3QgQWJzdHJhY3RMb2NrZXImIGNv
bnN0cmFpbnRTb2x2aW5nTG9ja2VyLCBTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKKyAgICBBU1NF
UlQoIXZpc2l0b3IuaGVhcCgpLT5pc01hcmtpbmdGb3JHQ1ZlcmlmaWVyKCkpOwogICAgIGRhdGFM
b2dJZihPcHRpb25zOjpsb2dHQygpLCBhYmJyZXZpYXRlZE5hbWUoKSk7CiAgICAgVmlzaXRDb3Vu
dGVyIHZpc2l0Q291bnRlcih2aXNpdG9yKTsKICAgICBwcmVwYXJlVG9FeGVjdXRlSW1wbChjb25z
dHJhaW50U29sdmluZ0xvY2tlciwgdmlzaXRvcik7CkBAIC04Miw2ICs5MCw3IEBAIHZvaWQgTWFy
a2luZ0NvbnN0cmFpbnQ6OnByZXBhcmVUb0V4ZWN1dGUKIAogdm9pZCBNYXJraW5nQ29uc3RyYWlu
dDo6ZG9QYXJhbGxlbFdvcmsoU2xvdFZpc2l0b3ImIHZpc2l0b3IsIFNoYXJlZFRhc2s8dm9pZChT
bG90VmlzaXRvciYpPiYgdGFzaykKIHsKKyAgICBBU1NFUlQoIXZpc2l0b3IuaGVhcCgpLT5pc01h
cmtpbmdGb3JHQ1ZlcmlmaWVyKCkpOwogICAgIFZpc2l0Q291bnRlciB2aXNpdENvdW50ZXIodmlz
aXRvcik7CiAgICAgdGFzay5ydW4odmlzaXRvcik7CiAgICAgaWYgKHZlcmJvc2VNYXJraW5nQ29u
c3RyYWludCAmJiB2aXNpdENvdW50ZXIudmlzaXRDb3VudCgpKQpAQCAtOTIsNyArMTAxLDcgQEAg
dm9pZCBNYXJraW5nQ29uc3RyYWludDo6ZG9QYXJhbGxlbFdvcmsoUwogICAgIH0KIH0KIAotdm9p
ZCBNYXJraW5nQ29uc3RyYWludDo6cHJlcGFyZVRvRXhlY3V0ZUltcGwoY29uc3QgQWJzdHJhY3RM
b2NrZXImLCBTbG90VmlzaXRvciYpCit2b2lkIE1hcmtpbmdDb25zdHJhaW50OjpwcmVwYXJlVG9F
eGVjdXRlSW1wbChjb25zdCBBYnN0cmFjdExvY2tlciYsIEFic3RyYWN0U2xvdFZpc2l0b3ImKQog
ewogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWlu
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25z
dHJhaW50LmgJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L01hcmtpbmdDb25zdHJhaW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzgsNiArMzgsNyBAQAogbmFtZXNw
YWNlIEpTQyB7CiAKIGNsYXNzIE1hcmtpbmdDb25zdHJhaW50U2V0OworY2xhc3MgQWJzdHJhY3RT
bG90VmlzaXRvcjsKIGNsYXNzIFNsb3RWaXNpdG9yOwogCiBjbGFzcyBNYXJraW5nQ29uc3RyYWlu
dCB7CkBAIC02MCwxMSArNjEsMTMgQEAgcHVibGljOgogICAgIAogICAgIHNpemVfdCBsYXN0Vmlz
aXRDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fbGFzdFZpc2l0Q291bnQ7IH0KICAgICAKKyAgICAv
LyBUaGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBhcmUgb25seSB1c2VkIGJ5IHRoZSByZWFsIEdDIHZp
YSB0aGUgTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXIuCisgICAgLy8gSGVuY2UsIHdlIG9ubHkgbmVl
ZCB0aGUgU2xvdFZpc2l0b3IgdmVyc2lvbi4KICAgICB2b2lkIGV4ZWN1dGUoU2xvdFZpc2l0b3Im
KTsKKworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZpcnR1YWwgZG91YmxlIHF1aWNrV29ya0VzdGlt
YXRlKFNsb3RWaXNpdG9yJik7CiAgICAgCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgdmlydHVhbCBk
b3VibGUgcXVpY2tXb3JrRXN0aW1hdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpOwotICAgIAotICAg
IGRvdWJsZSB3b3JrRXN0aW1hdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpOworICAgIGRvdWJsZSB3
b3JrRXN0aW1hdGUoU2xvdFZpc2l0b3ImKTsKICAgICAKICAgICB2b2lkIHByZXBhcmVUb0V4ZWN1
dGUoY29uc3QgQWJzdHJhY3RMb2NrZXImIGNvbnN0cmFpbnRTb2x2aW5nTG9ja2VyLCBTbG90Vmlz
aXRvciYpOwogICAgIApAQCAtNzYsOSArNzksMTQgQEAgcHVibGljOgogICAgIENvbnN0cmFpbnRQ
YXJhbGxlbGlzbSBwYXJhbGxlbGlzbSgpIGNvbnN0IHsgcmV0dXJuIG1fcGFyYWxsZWxpc207IH0K
IAogcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlSW1wbChBYnN0cmFjdFNsb3RW
aXNpdG9yJikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlSW1wbChTbG90VmlzaXRvciYp
ID0gMDsKLSAgICBKU19FWFBPUlRfUFJJVkFURSB2aXJ0dWFsIHZvaWQgcHJlcGFyZVRvRXhlY3V0
ZUltcGwoY29uc3QgQWJzdHJhY3RMb2NrZXImIGNvbnN0cmFpbnRTb2x2aW5nTG9ja2VyLCBTbG90
VmlzaXRvciYpOwotICAgIAorICAgIEpTX0VYUE9SVF9QUklWQVRFIHZpcnR1YWwgdm9pZCBwcmVw
YXJlVG9FeGVjdXRlSW1wbChjb25zdCBBYnN0cmFjdExvY2tlciYgY29uc3RyYWludFNvbHZpbmdM
b2NrZXIsIEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKKworICAgIC8vIFRoaXMgZnVuY3Rpb24gaXMg
b25seSB1c2VkIGJ5IHRoZSB2ZXJpZmllciBHQyB2aWEgSGVhcDo6dmVyaWZ5R0MoKS4KKyAgICAv
LyBIZW5jZSwgd2Ugb25seSBuZWVkIHRoZSBBYnN0cmFjdFNsb3RWaXNpdG9yIHZlcnNpb24uCisg
ICAgdm9pZCBleGVjdXRlU3luY2hyb25vdXNseShBYnN0cmFjdFNsb3RWaXNpdG9yJik7CisKIHBy
aXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIE1hcmtpbmdDb25zdHJhaW50U2V0OyAvLyBTbyBpdCBj
YW4gc2V0IG1faW5kZXguCiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9N
YXJraW5nQ29uc3RyYWludEV4ZWN1dG9yUGFpci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50RXhlY3V0b3JQYWlyLmgJKG5vbmV4aXN0
ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnRFeGVj
dXRvclBhaXIuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU0IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvRnVuY3Rpb24uaD4KKworbmFtZXNwYWNlIEpT
QyB7CisKK2NsYXNzIEFic3RyYWN0U2xvdFZpc2l0b3I7CitjbGFzcyBTbG90VmlzaXRvcjsKKwor
c3RydWN0IE1hcmtpbmdDb25zdHJhaW50RXhlY3V0b3JQYWlyIHsKKyAgICBNYXJraW5nQ29uc3Ry
YWludEV4ZWN1dG9yUGFpcigKKyAgICAgICAgOjpGdW5jdGlvbjx2b2lkKEFic3RyYWN0U2xvdFZp
c2l0b3ImKT4gYWJzdHJhY3RTbG90VmlzaXRvckZ1bmMsCisgICAgICAgIDo6RnVuY3Rpb248dm9p
ZChTbG90VmlzaXRvciYpPiBzbG90VmlzaXRvckZ1bmMpCisgICAgICAgIDogYWJzdHJhY3RTbG90
VmlzaXRvckZ1bmMoV1RGTW92ZShhYnN0cmFjdFNsb3RWaXNpdG9yRnVuYykpCisgICAgICAgICwg
c2xvdFZpc2l0b3JGdW5jKFdURk1vdmUoc2xvdFZpc2l0b3JGdW5jKSkKKyAgICB7IH0KKyAgICBN
YXJraW5nQ29uc3RyYWludEV4ZWN1dG9yUGFpcihNYXJraW5nQ29uc3RyYWludEV4ZWN1dG9yUGFp
ciYmKSA9IGRlZmF1bHQ7CisKKyAgICB2b2lkIGV4ZWN1dGUoQWJzdHJhY3RTbG90VmlzaXRvciYg
dmlzaXRvcikgeyBhYnN0cmFjdFNsb3RWaXNpdG9yRnVuYyh2aXNpdG9yKTsgfQorICAgIHZvaWQg
ZXhlY3V0ZShTbG90VmlzaXRvciYgdmlzaXRvcikgeyBzbG90VmlzaXRvckZ1bmModmlzaXRvcik7
IH0KKworICAgIDo6RnVuY3Rpb248dm9pZChBYnN0cmFjdFNsb3RWaXNpdG9yJik+IGFic3RyYWN0
U2xvdFZpc2l0b3JGdW5jOworICAgIDo6RnVuY3Rpb248dm9pZChTbG90VmlzaXRvciYpPiBzbG90
VmlzaXRvckZ1bmM7Cit9OworCisjZGVmaW5lIE1BS0VfTUFSS0lOR19DT05TVFJBSU5UX0VYRUNV
VE9SX1BBSVIobGFtYmRhKSBcCisgICAgTWFya2luZ0NvbnN0cmFpbnRFeGVjdXRvclBhaXIoKGxh
bWJkYSksIChsYW1iZGEpKQorCit9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50U2V0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludFNldC5jcHAJKHJldmlz
aW9uIDI3MzExOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJh
aW50U2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02Myw5ICs2Myw5IEBAIHZvaWQgTWFya2luZ0NvbnN0
cmFpbnRTZXQ6OmRpZFN0YXJ0TWFya2kKICAgICBtX2l0ZXJhdGlvbiA9IDE7CiB9CiAKLXZvaWQg
TWFya2luZ0NvbnN0cmFpbnRTZXQ6OmFkZChDU3RyaW5nIGFiYnJldmlhdGVkTmFtZSwgQ1N0cmlu
ZyBuYW1lLCA6OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3ImKT4gZnVuY3Rpb24sIENvbnN0cmFp
bnRWb2xhdGlsaXR5IHZvbGF0aWxpdHksIENvbnN0cmFpbnRDb25jdXJyZW5jeSBjb25jdXJyZW5j
eSwgQ29uc3RyYWludFBhcmFsbGVsaXNtIHBhcmFsbGVsaXNtKQordm9pZCBNYXJraW5nQ29uc3Ry
YWludFNldDo6YWRkKENTdHJpbmcgYWJicmV2aWF0ZWROYW1lLCBDU3RyaW5nIG5hbWUsIE1hcmtp
bmdDb25zdHJhaW50RXhlY3V0b3JQYWlyJiYgZXhlY3V0b3JzLCBDb25zdHJhaW50Vm9sYXRpbGl0
eSB2b2xhdGlsaXR5LCBDb25zdHJhaW50Q29uY3VycmVuY3kgY29uY3VycmVuY3ksIENvbnN0cmFp
bnRQYXJhbGxlbGlzbSBwYXJhbGxlbGlzbSkKIHsKLSAgICBhZGQobWFrZVVuaXF1ZTxTaW1wbGVN
YXJraW5nQ29uc3RyYWludD4oV1RGTW92ZShhYmJyZXZpYXRlZE5hbWUpLCBXVEZNb3ZlKG5hbWUp
LCBXVEZNb3ZlKGZ1bmN0aW9uKSwgdm9sYXRpbGl0eSwgY29uY3VycmVuY3ksIHBhcmFsbGVsaXNt
KSk7CisgICAgYWRkKG1ha2VVbmlxdWU8U2ltcGxlTWFya2luZ0NvbnN0cmFpbnQ+KFdURk1vdmUo
YWJicmV2aWF0ZWROYW1lKSwgV1RGTW92ZShuYW1lKSwgV1RGTW92ZShleGVjdXRvcnMpLCB2b2xh
dGlsaXR5LCBjb25jdXJyZW5jeSwgcGFyYWxsZWxpc20pKTsKIH0KIAogdm9pZCBNYXJraW5nQ29u
c3RyYWludFNldDo6YWRkKApAQCAtMTY2LDEwICsxNjYsMTAgQEAgYm9vbCBNYXJraW5nQ29uc3Ry
YWludFNldDo6ZXhlY3V0ZUNvbnZlcgogICAgIHJldHVybiAhc29sdmVyLmRpZFZpc2l0U29tZXRo
aW5nKCk7CiB9CiAKLXZvaWQgTWFya2luZ0NvbnN0cmFpbnRTZXQ6OmV4ZWN1dGVBbGwoU2xvdFZp
c2l0b3ImIHZpc2l0b3IpCit2b2lkIE1hcmtpbmdDb25zdHJhaW50U2V0OjpleGVjdXRlQWxsU3lu
Y2hyb25vdXNseShBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGZvciAoYXV0
byYgY29uc3RyYWludCA6IG1fc2V0KQotICAgICAgICBjb25zdHJhaW50LT5leGVjdXRlKHZpc2l0
b3IpOworICAgICAgICBjb25zdHJhaW50LT5leGVjdXRlU3luY2hyb25vdXNseSh2aXNpdG9yKTsK
ICAgICBkYXRhTG9nSWYoT3B0aW9uczo6bG9nR0MoKSwgIiAiKTsKIH0KIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnRTZXQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludFNldC5oCShyZXZp
c2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3Ry
YWludFNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2LDYgKzI2LDcgQEAKICNwcmFnbWEgb25jZQogCiAj
aW5jbHVkZSAiTWFya2luZ0NvbnN0cmFpbnQuaCIKKyNpbmNsdWRlICJNYXJraW5nQ29uc3RyYWlu
dEV4ZWN1dG9yUGFpci5oIgogI2luY2x1ZGUgPHd0Zi9CaXRWZWN0b3IuaD4KICNpbmNsdWRlIDx3
dGYvVmVjdG9yLmg+CiAKQEAgLTQ2LDIyICs0NywyNSBAQCBwdWJsaWM6CiAgICAgdm9pZCBhZGQo
CiAgICAgICAgIENTdHJpbmcgYWJicmV2aWF0ZWROYW1lLAogICAgICAgICBDU3RyaW5nIG5hbWUs
Ci0gICAgICAgIDo6RnVuY3Rpb248dm9pZChTbG90VmlzaXRvciYpPiwKKyAgICAgICAgTWFya2lu
Z0NvbnN0cmFpbnRFeGVjdXRvclBhaXImJiwKICAgICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHks
CiAgICAgICAgIENvbnN0cmFpbnRDb25jdXJyZW5jeSA9IENvbnN0cmFpbnRDb25jdXJyZW5jeTo6
Q29uY3VycmVudCwKICAgICAgICAgQ29uc3RyYWludFBhcmFsbGVsaXNtID0gQ29uc3RyYWludFBh
cmFsbGVsaXNtOjpTZXF1ZW50aWFsKTsKICAgICAKICAgICB2b2lkIGFkZCgKICAgICAgICAgQ1N0
cmluZyBhYmJyZXZpYXRlZE5hbWUsIENTdHJpbmcgbmFtZSwKLSAgICAgICAgOjpGdW5jdGlvbjx2
b2lkKFNsb3RWaXNpdG9yJik+IGZ1bmMsCisgICAgICAgIE1hcmtpbmdDb25zdHJhaW50RXhlY3V0
b3JQYWlyJiYgZXhlY3V0b3JzLAogICAgICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eSB2b2xhdGls
aXR5LAogICAgICAgICBDb25zdHJhaW50UGFyYWxsZWxpc20gcGFyYWxsZWxpc20pCiAgICAgewot
ICAgICAgICBhZGQoYWJicmV2aWF0ZWROYW1lLCBuYW1lLCBXVEZNb3ZlKGZ1bmMpLCB2b2xhdGls
aXR5LCBDb25zdHJhaW50Q29uY3VycmVuY3k6OkNvbmN1cnJlbnQsIHBhcmFsbGVsaXNtKTsKKyAg
ICAgICAgYWRkKGFiYnJldmlhdGVkTmFtZSwgbmFtZSwgV1RGTW92ZShleGVjdXRvcnMpLCB2b2xh
dGlsaXR5LCBDb25zdHJhaW50Q29uY3VycmVuY3k6OkNvbmN1cnJlbnQsIHBhcmFsbGVsaXNtKTsK
ICAgICB9CiAgICAgCiAgICAgdm9pZCBhZGQoc3RkOjp1bmlxdWVfcHRyPE1hcmtpbmdDb25zdHJh
aW50Pik7Ci0gICAgCisKKyAgICAvLyBUaGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBhcmUgb25seSB1
c2VkIGJ5IHRoZSByZWFsIEdDIHZpYSB0aGUgTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXIuCisgICAg
Ly8gSGVuY2UsIHdlIG9ubHkgbmVlZCB0aGUgU2xvdFZpc2l0b3IgdmVyc2lvbi4KKwogICAgIC8v
IEFzc3VtaW5nIHRoYXQgdGhlIG1hcmsgc3RhY2tzIGFyZSBhbGwgZW1wdHksIHRoaXMgd2lsbCBn
aXZlIHlvdSBhIGd1ZXNzIGFzIHRvIHdoZXRoZXIgb3IKICAgICAvLyBub3QgdGhlIHdhdmVmcm9u
dCBpcyBhZHZhbmNpbmcuCiAgICAgYm9vbCBpc1dhdmVmcm9udEFkdmFuY2luZyhTbG90VmlzaXRv
ciYpOwpAQCAtNzAsMTMgKzc0LDE2IEBAIHB1YmxpYzoKICAgICAvLyBSZXR1cm5zIHRydWUgaWYg
dGhpcyBleGVjdXRlZCBhbGwgY29uc3RyYWludHMgYW5kIG5vbmUgb2YgdGhlbSBwcm9kdWNlZCBu
ZXcgd29yay4gVGhpcwogICAgIC8vIGFzc3VtZXMgdGhhdCB5b3UndmUgYWxyYWVkeSB2aXNpdGVk
IHJvb3RzIGFuZCBkcmFpbmVkIGZyb20gdGhlcmUuCiAgICAgYm9vbCBleGVjdXRlQ29udmVyZ2Vu
Y2UoU2xvdFZpc2l0b3ImKTsKLSAgICAKKworICAgIC8vIFRoaXMgZnVuY3Rpb24gaXMgb25seSB1
c2VkIGJ5IHRoZSB2ZXJpZmllciBHQyB2aWEgSGVhcDo6dmVyaWZ5R0MoKS4KKyAgICAvLyBIZW5j
ZSwgd2Ugb25seSBuZWVkIHRoZSBBYnN0cmFjdFNsb3RWaXNpdG9yIHZlcnNpb24uCisKICAgICAv
LyBTaW1wbHkgcnVucyBhbGwgY29uc3RyYWludHMgd2l0aG91dCBhbnkgc2hlbmFuaWdhbnMuCi0g
ICAgdm9pZCBleGVjdXRlQWxsKFNsb3RWaXNpdG9yJik7Ci0gICAgCisgICAgdm9pZCBleGVjdXRl
QWxsU3luY2hyb25vdXNseShBYnN0cmFjdFNsb3RWaXNpdG9yJik7CisKIHByaXZhdGU6CiAgICAg
ZnJpZW5kIGNsYXNzIE1hcmtpbmdDb25zdHJhaW50U29sdmVyOwotICAgIAorCiAgICAgYm9vbCBl
eGVjdXRlQ29udmVyZ2VuY2VJbXBsKFNsb3RWaXNpdG9yJik7CiAgICAgCiAgICAgSGVhcCYgbV9o
ZWFwOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnRT
b2x2ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtp
bmdDb25zdHJhaW50U29sdmVyLmNwcAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50U29sdmVyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFp
bnRTb2x2ZXIuaAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9TaW1wbGVNYXJraW5nQ29uc3RyYWludC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQuY3Bw
CShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TaW1wbGVN
YXJraW5nQ29uc3RyYWludC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzAsMTEgKzMwLDExIEBAIG5hbWVz
cGFjZSBKU0MgewogCiBTaW1wbGVNYXJraW5nQ29uc3RyYWludDo6U2ltcGxlTWFya2luZ0NvbnN0
cmFpbnQoCiAgICAgQ1N0cmluZyBhYmJyZXZpYXRlZE5hbWUsIENTdHJpbmcgbmFtZSwKLSAgICA6
OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3ImKT4gZXhlY3V0ZUZ1bmN0aW9uLAorICAgIE1hcmtp
bmdDb25zdHJhaW50RXhlY3V0b3JQYWlyJiYgZXhlY3V0b3JzLAogICAgIENvbnN0cmFpbnRWb2xh
dGlsaXR5IHZvbGF0aWxpdHksIENvbnN0cmFpbnRDb25jdXJyZW5jeSBjb25jdXJyZW5jeSwKICAg
ICBDb25zdHJhaW50UGFyYWxsZWxpc20gcGFyYWxsZWxpc20pCiAgICAgOiBNYXJraW5nQ29uc3Ry
YWludChXVEZNb3ZlKGFiYnJldmlhdGVkTmFtZSksIFdURk1vdmUobmFtZSksIHZvbGF0aWxpdHks
IGNvbmN1cnJlbmN5LCBwYXJhbGxlbGlzbSkKLSAgICAsIG1fZXhlY3V0ZUZ1bmN0aW9uKFdURk1v
dmUoZXhlY3V0ZUZ1bmN0aW9uKSkKKyAgICAsIG1fZXhlY3V0b3JzKFdURk1vdmUoZXhlY3V0b3Jz
KSkKIHsKIH0KIApAQCAtNDIsMTAgKzQyLDE0IEBAIFNpbXBsZU1hcmtpbmdDb25zdHJhaW50Ojp+
U2ltcGxlTWFya2luZ0MKIHsKIH0KIAotdm9pZCBTaW1wbGVNYXJraW5nQ29uc3RyYWludDo6ZXhl
Y3V0ZUltcGwoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
Pgordm9pZCBTaW1wbGVNYXJraW5nQ29uc3RyYWludDo6ZXhlY3V0ZUltcGxJbXBsKFZpc2l0b3Im
IHZpc2l0b3IpCiB7Ci0gICAgbV9leGVjdXRlRnVuY3Rpb24odmlzaXRvcik7CisgICAgbV9leGVj
dXRvcnMuZXhlY3V0ZSh2aXNpdG9yKTsKIH0KIAordm9pZCBTaW1wbGVNYXJraW5nQ29uc3RyYWlu
dDo6ZXhlY3V0ZUltcGwoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikgeyBleGVjdXRlSW1w
bEltcGwodmlzaXRvcik7IH0KK3ZvaWQgU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQ6OmV4ZWN1dGVJ
bXBsKFNsb3RWaXNpdG9yJiB2aXNpdG9yKSB7IGV4ZWN1dGVJbXBsSW1wbCh2aXNpdG9yKTsgfQor
CiB9IC8vIG5hbWVzcGFjZSBKU0MKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
U2ltcGxlTWFya2luZ0NvbnN0cmFpbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9TaW1wbGVNYXJraW5nQ29uc3RyYWludC5oCShyZXZpc2lvbiAyNzMxMTkpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TaW1wbGVNYXJraW5nQ29uc3RyYWludC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTI2LDcgKzI2LDcgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiTWFy
a2luZ0NvbnN0cmFpbnQuaCIKLSNpbmNsdWRlIDx3dGYvRnVuY3Rpb24uaD4KKyNpbmNsdWRlICJN
YXJraW5nQ29uc3RyYWludEV4ZWN1dG9yUGFpci5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIApAQCAt
MzcsMjYgKzM3LDI4IEBAIGNsYXNzIFNpbXBsZU1hcmtpbmdDb25zdHJhaW50IGZpbmFsIDogcHUK
IHB1YmxpYzoKICAgICBKU19FWFBPUlRfUFJJVkFURSBTaW1wbGVNYXJraW5nQ29uc3RyYWludCgK
ICAgICAgICAgQ1N0cmluZyBhYmJyZXZpYXRlZE5hbWUsIENTdHJpbmcgbmFtZSwKLSAgICAgICAg
OjpGdW5jdGlvbjx2b2lkKFNsb3RWaXNpdG9yJik+LAorICAgICAgICBNYXJraW5nQ29uc3RyYWlu
dEV4ZWN1dG9yUGFpciYmLAogICAgICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eSwKICAgICAgICAg
Q29uc3RyYWludENvbmN1cnJlbmN5ID0gQ29uc3RyYWludENvbmN1cnJlbmN5OjpDb25jdXJyZW50
LAogICAgICAgICBDb25zdHJhaW50UGFyYWxsZWxpc20gPSBDb25zdHJhaW50UGFyYWxsZWxpc206
OlNlcXVlbnRpYWwpOwogICAgIAogICAgIFNpbXBsZU1hcmtpbmdDb25zdHJhaW50KAogICAgICAg
ICBDU3RyaW5nIGFiYnJldmlhdGVkTmFtZSwgQ1N0cmluZyBuYW1lLAotICAgICAgICA6OkZ1bmN0
aW9uPHZvaWQoU2xvdFZpc2l0b3ImKT4gZnVuYywKKyAgICAgICAgTWFya2luZ0NvbnN0cmFpbnRF
eGVjdXRvclBhaXImJiBleGVjdXRvcnMsCiAgICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5IHZv
bGF0aWxpdHksCiAgICAgICAgIENvbnN0cmFpbnRQYXJhbGxlbGlzbSBwYXJhbGxlbGlzbSkKLSAg
ICAgICAgOiBTaW1wbGVNYXJraW5nQ29uc3RyYWludChhYmJyZXZpYXRlZE5hbWUsIG5hbWUsIFdU
Rk1vdmUoZnVuYyksIHZvbGF0aWxpdHksIENvbnN0cmFpbnRDb25jdXJyZW5jeTo6Q29uY3VycmVu
dCwgcGFyYWxsZWxpc20pCisgICAgICAgIDogU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQoYWJicmV2
aWF0ZWROYW1lLCBuYW1lLCBXVEZNb3ZlKGV4ZWN1dG9ycyksIHZvbGF0aWxpdHksIENvbnN0cmFp
bnRDb25jdXJyZW5jeTo6Q29uY3VycmVudCwgcGFyYWxsZWxpc20pCiAgICAgewogICAgIH0KICAg
ICAKICAgICBKU19FWFBPUlRfUFJJVkFURSB+U2ltcGxlTWFya2luZ0NvbnN0cmFpbnQoKSBmaW5h
bDsKICAgICAKIHByaXZhdGU6CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gQUxXQVlT
X0lOTElORSB2b2lkIGV4ZWN1dGVJbXBsSW1wbChWaXNpdG9yJik7CisgICAgdm9pZCBleGVjdXRl
SW1wbChBYnN0cmFjdFNsb3RWaXNpdG9yJikgZmluYWw7CiAgICAgdm9pZCBleGVjdXRlSW1wbChT
bG90VmlzaXRvciYpIGZpbmFsOwogCi0gICAgOjpGdW5jdGlvbjx2b2lkKFNsb3RWaXNpdG9yJik+
IG1fZXhlY3V0ZUZ1bmN0aW9uOworICAgIE1hcmtpbmdDb25zdHJhaW50RXhlY3V0b3JQYWlyIG1f
ZXhlY3V0b3JzOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuY3BwCShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjAgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC03NywxNSArNzcsMTAgQEAgc3RhdGljIHZvaWQgdmFsaWRhdGUoSlNDZWxsKiBjZWxsKQogI2Vu
ZGlmCiAKIFNsb3RWaXNpdG9yOjpTbG90VmlzaXRvcihIZWFwJiBoZWFwLCBDU3RyaW5nIGNvZGVO
YW1lKQotICAgIDogbV9ieXRlc1Zpc2l0ZWQoMCkKLSAgICAsIG1fdmlzaXRDb3VudCgwKQotICAg
ICwgbV9pc0luUGFyYWxsZWxNb2RlKGZhbHNlKQorICAgIDogQmFzZShoZWFwLCBjb2RlTmFtZSwg
aGVhcC5tX29wYXF1ZVJvb3RzKQogICAgICwgbV9tYXJraW5nVmVyc2lvbihNYXJrZWRTcGFjZTo6
aW5pdGlhbFZlcnNpb24pCi0gICAgLCBtX2hlYXAoaGVhcCkKLSAgICAsIG1fY29kZU5hbWUoY29k
ZU5hbWUpCiAjaWYgQVNTRVJUX0VOQUJMRUQKICAgICAsIG1faXNDaGVja2luZ0ZvckRlZmF1bHRN
YXJrVmlvbGF0aW9uKGZhbHNlKQotICAgICwgbV9pc0RyYWluaW5nKGZhbHNlKQogI2VuZGlmCiB7
CiB9CkBAIC0xMTcsOCArMTEyLDggQEAgdm9pZCBTbG90VmlzaXRvcjo6ZGlkU3RhcnRNYXJraW5n
KCkKIAogdm9pZCBTbG90VmlzaXRvcjo6cmVzZXQoKQogeworICAgIEFic3RyYWN0U2xvdFZpc2l0
b3I6OnJlc2V0KCk7CiAgICAgbV9ieXRlc1Zpc2l0ZWQgPSAwOwotICAgIG1fdmlzaXRDb3VudCA9
IDA7CiAgICAgbV9oZWFwQW5hbHl6ZXIgPSBudWxscHRyOwogICAgIFJFTEVBU0VfQVNTRVJUKCFt
X2N1cnJlbnRDZWxsKTsKIH0KQEAgLTIzMCw3ICsyMjUsNyBAQCB2b2lkIFNsb3RWaXNpdG9yOjph
cHBlbmRKU0NlbGxPckF1eGlsaWFyCiB2b2lkIFNsb3RWaXNpdG9yOjphcHBlbmRTbG93KEpTQ2Vs
bCogY2VsbCwgRGVwZW5kZW5jeSBkZXBlbmRlbmN5KQogewogICAgIGlmIChVTkxJS0VMWShtX2hl
YXBBbmFseXplcikpCi0gICAgICAgIG1faGVhcEFuYWx5emVyLT5hbmFseXplRWRnZShtX2N1cnJl
bnRDZWxsLCBjZWxsLCBtX3Jvb3RNYXJrUmVhc29uKTsKKyAgICAgICAgbV9oZWFwQW5hbHl6ZXIt
PmFuYWx5emVFZGdlKG1fY3VycmVudENlbGwsIGNlbGwsIHJvb3RNYXJrUmVhc29uKCkpOwogCiAg
ICAgYXBwZW5kSGlkZGVuU2xvd0ltcGwoY2VsbCwgZGVwZW5kZW5jeSk7CiB9CkBAIC04MDcsMTIg
KzgwMiwxNyBAQCBNYXJrU3RhY2tBcnJheSYgU2xvdFZpc2l0b3I6OmNvcnJlc3BvbmRpCiAgICAg
cmV0dXJuICptX2hlYXAubV9zaGFyZWRNdXRhdG9yTWFya1N0YWNrOwogfQogCitOT19SRVRVUk5f
RFVFX1RPX0NSQVNIIHZvaWQgU2xvdFZpc2l0b3I6OmFkZFBhcmFsbGVsQ29uc3RyYWludFRhc2so
UmVmUHRyPFNoYXJlZFRhc2s8dm9pZChBYnN0cmFjdFNsb3RWaXNpdG9yJik+PikKK3sKKyAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCiB2b2lkIFNsb3RWaXNpdG9yOjphZGRQ
YXJhbGxlbENvbnN0cmFpbnRUYXNrKFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoU2xvdFZpc2l0b3Im
KT4+IHRhc2spCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQobV9jdXJyZW50U29sdmVyKTsKICAgICBS
RUxFQVNFX0FTU0VSVChtX2N1cnJlbnRDb25zdHJhaW50KTsKICAgICBSRUxFQVNFX0FTU0VSVCh0
YXNrKTsKLSAgICAKKwogICAgIG1fY3VycmVudFNvbHZlci0+YWRkUGFyYWxsZWxUYXNrKHRhc2ss
ICptX2N1cnJlbnRDb25zdHJhaW50KTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvU2xvdFZpc2l0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9TbG90VmlzaXRvci5oCShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9TbG90VmlzaXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw1OSArMjUsNzYg
QEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRlICJBYnN0cmFjdFNsb3RWaXNpdG9yLmgiCiAj
aW5jbHVkZSAiSGFuZGxlVHlwZXMuaCIKICNpbmNsdWRlICJJdGVyYXRpb25TdGF0dXMuaCIKLSNp
bmNsdWRlICJNYXJrU3RhY2suaCIKLSNpbmNsdWRlICJSb290TWFya1JlYXNvbi5oIgotI2luY2x1
ZGUgIlZpc2l0UmFjZUtleS5oIgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8
d3RmL01vbm90b25pY1RpbWUuaD4KLSNpbmNsdWRlIDx3dGYvU2hhcmVkVGFzay5oPgotI2luY2x1
ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKLWNsYXNzIENvbnNl
cnZhdGl2ZVJvb3RzOwogY2xhc3MgR0NUaHJlYWRTaGFyZWREYXRhOwotY2xhc3MgSGVhcDsKIGNs
YXNzIEhlYXBDZWxsOwogY2xhc3MgSGVhcEFuYWx5emVyOwotY2xhc3MgTWFya2VkQmxvY2s7CiBj
bGFzcyBNYXJraW5nQ29uc3RyYWludDsKIGNsYXNzIE1hcmtpbmdDb25zdHJhaW50U29sdmVyOwot
dGVtcGxhdGU8dHlwZW5hbWUgVD4gY2xhc3MgV2VhazsKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5
cGVuYW1lIFRyYWl0cz4gY2xhc3MgV3JpdGVCYXJyaWVyQmFzZTsKIAogdHlwZWRlZiB1aW50MzJf
dCBIZWFwVmVyc2lvbjsKIAotY2xhc3MgU2xvdFZpc2l0b3IgeworY2xhc3MgU2xvdFZpc2l0b3Ig
ZmluYWwgOiBwdWJsaWMgQWJzdHJhY3RTbG90VmlzaXRvciB7CiAgICAgV1RGX01BS0VfTk9OQ09Q
WUFCTEUoU2xvdFZpc2l0b3IpOwogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogCisgICAg
dXNpbmcgQmFzZSA9IEFic3RyYWN0U2xvdFZpc2l0b3I7CisKICAgICBmcmllbmQgY2xhc3MgU2V0
Q3VycmVudENlbGxTY29wZTsKICAgICBmcmllbmQgY2xhc3MgSGVhcDsKIAogcHVibGljOgorICAg
IGNsYXNzIENvbnRleHQgeworICAgIHB1YmxpYzoKKyAgICAgICAgQUxXQVlTX0lOTElORSBDb250
ZXh0KEFic3RyYWN0U2xvdFZpc2l0b3ImLCBIZWFwQ2VsbCopIHsgfQorICAgIH07CisKKyAgICBj
bGFzcyBTdXBwcmVzc0dDVmVyaWZpZXJTY29wZSB7CisgICAgcHVibGljOgorICAgICAgICBTdXBw
cmVzc0dDVmVyaWZpZXJTY29wZShTbG90VmlzaXRvciYpIHsgfQorICAgIH07CisKKyAgICBjbGFz
cyBEZWZhdWx0TWFya2luZ1Zpb2xhdGlvbkFzc2VydGlvblNjb3BlIHsKKyAgICBwdWJsaWM6Cisj
aWYgQVNTRVJUX0VOQUJMRUQKKyAgICAgICAgRGVmYXVsdE1hcmtpbmdWaW9sYXRpb25Bc3NlcnRp
b25TY29wZShTbG90VmlzaXRvciYgdmlzaXRvcikKKyAgICAgICAgICAgIDogbV92aXNpdG9yKHZp
c2l0b3IpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1fd2FzQ2hlY2tpbmdGb3JEZWZhdWx0TWFy
a1Zpb2xhdGlvbiA9IG1fdmlzaXRvci5tX2lzQ2hlY2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlv
bjsKKyAgICAgICAgICAgIG1fdmlzaXRvci5tX2lzQ2hlY2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xh
dGlvbiA9IGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgfkRlZmF1bHRNYXJraW5nVmlvbGF0
aW9uQXNzZXJ0aW9uU2NvcGUoKQorICAgICAgICB7CisgICAgICAgICAgICBtX3Zpc2l0b3IubV9p
c0NoZWNraW5nRm9yRGVmYXVsdE1hcmtWaW9sYXRpb24gPSBtX3dhc0NoZWNraW5nRm9yRGVmYXVs
dE1hcmtWaW9sYXRpb247CisgICAgICAgIH0KKworICAgIHByaXZhdGU6CisgICAgICAgIFNsb3RW
aXNpdG9yJiBtX3Zpc2l0b3I7CisgICAgICAgIGJvb2wgbV93YXNDaGVja2luZ0ZvckRlZmF1bHRN
YXJrVmlvbGF0aW9uOworI2Vsc2UKKyAgICAgICAgRGVmYXVsdE1hcmtpbmdWaW9sYXRpb25Bc3Nl
cnRpb25TY29wZShTbG90VmlzaXRvciYpIHsgfQorI2VuZGlmCisgICAgfTsKKwogICAgIFNsb3RW
aXNpdG9yKEhlYXAmLCBDU3RyaW5nIGNvZGVOYW1lKTsKICAgICB+U2xvdFZpc2l0b3IoKTsKIAot
ICAgIE1hcmtTdGFja0FycmF5JiBjb2xsZWN0b3JNYXJrU3RhY2soKSB7IHJldHVybiBtX2NvbGxl
Y3RvclN0YWNrOyB9Ci0gICAgTWFya1N0YWNrQXJyYXkmIG11dGF0b3JNYXJrU3RhY2soKSB7IHJl
dHVybiBtX211dGF0b3JTdGFjazsgfQotICAgIGNvbnN0IE1hcmtTdGFja0FycmF5JiBjb2xsZWN0
b3JNYXJrU3RhY2soKSBjb25zdCB7IHJldHVybiBtX2NvbGxlY3RvclN0YWNrOyB9Ci0gICAgY29u
c3QgTWFya1N0YWNrQXJyYXkmIG11dGF0b3JNYXJrU3RhY2soKSBjb25zdCB7IHJldHVybiBtX211
dGF0b3JTdGFjazsgfQotICAgIAotICAgIFZNJiB2bSgpOwotICAgIGNvbnN0IFZNJiB2bSgpIGNv
bnN0OwotICAgIEhlYXAqIGhlYXAoKSBjb25zdDsKKyAgICB2b2lkIGFwcGVuZChjb25zdCBDb25z
ZXJ2YXRpdmVSb290cyYpIGZpbmFsOwogCi0gICAgdm9pZCBhcHBlbmQoY29uc3QgQ29uc2VydmF0
aXZlUm9vdHMmKTsKLSAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBUcmFp
dHM+IHZvaWQgYXBwZW5kKGNvbnN0IFdyaXRlQmFycmllckJhc2U8VCwgVHJhaXRzPiYpOwogICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFRyYWl0cz4gdm9pZCBhcHBlbmRIaWRkZW4o
Y29uc3QgV3JpdGVCYXJyaWVyQmFzZTxULCBUcmFpdHM+Jik7CiAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgSXRlcmF0b3I+IHZvaWQgYXBwZW5kKEl0ZXJhdG9yIGJlZ2luICwgSXRlcmF0b3IgZW5kKTsK
LSAgICB2b2lkIGFwcGVuZFZhbHVlcyhjb25zdCBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24sIFJh
d1ZhbHVlVHJhaXRzPFVua25vd24+PiosIHNpemVfdCBjb3VudCk7Ci0gICAgdm9pZCBhcHBlbmRW
YWx1ZXNIaWRkZW4oY29uc3QgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duLCBSYXdWYWx1ZVRyYWl0
czxVbmtub3duPj4qLCBzaXplX3QgY291bnQpOwotICAgIAorICAgIEFMV0FZU19JTkxJTkUgdm9p
ZCBhcHBlbmRWYWx1ZXMoY29uc3QgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duLCBSYXdWYWx1ZVRy
YWl0czxVbmtub3duPj4qLCBzaXplX3QgY291bnQpOworICAgIEFMV0FZU19JTkxJTkUgdm9pZCBh
cHBlbmRWYWx1ZXNIaWRkZW4oY29uc3QgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duLCBSYXdWYWx1
ZVRyYWl0czxVbmtub3duPj4qLCBzaXplX3QgY291bnQpOworCiAgICAgLy8gVGhlc2UgZG9uJ3Qg
cmVxdWlyZSB5b3UgdG8gcHJvdmUgdGhhdCB5b3UgaGF2ZSBhIFdyaXRlQmFycmllcjw+LiBUaGF0
IG1ha2VzIHNlbnNlCiAgICAgLy8gZm9yOgogICAgIC8vCkBAIC04NywzMiArMTA0LDI3IEBAIHB1
YmxpYzoKICAgICAvLwogICAgIC8vIElmIHlvdSBhcmUgbm90IGEgcm9vdCBhbmQgeW91IGRvbid0
IGtub3cgd2hhdCBraW5kIG9mIGJhcnJpZXIgeW91IGhhdmUsIHRoZW4geW91CiAgICAgLy8gc2hv
dWxkbid0IGNhbGwgdGhlc2UgbWV0aG9kcy4KLSAgICB2b2lkIGFwcGVuZFVuYmFycmllcmVkKEpT
VmFsdWUpOwotICAgIHZvaWQgYXBwZW5kVW5iYXJyaWVyZWQoSlNWYWx1ZSosIHNpemVfdCk7Ci0g
ICAgdm9pZCBhcHBlbmRVbmJhcnJpZXJlZChKU0NlbGwqKTsKKyAgICBBTFdBWVNfSU5MSU5FIHZv
aWQgYXBwZW5kVW5iYXJyaWVyZWQoSlNWYWx1ZSk7CisgICAgQUxXQVlTX0lOTElORSB2b2lkIGFw
cGVuZFVuYmFycmllcmVkKEpTVmFsdWUqLCBzaXplX3QpOworICAgIHZvaWQgYXBwZW5kVW5iYXJy
aWVyZWQoSlNDZWxsKikgZmluYWw7CiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KICAg
ICB2b2lkIGFwcGVuZChjb25zdCBXZWFrPFQ+JiB3ZWFrKTsKICAgICAKLSAgICB2b2lkIGFwcGVu
ZEhpZGRlblVuYmFycmllcmVkKEpTVmFsdWUpOwotICAgIHZvaWQgYXBwZW5kSGlkZGVuVW5iYXJy
aWVyZWQoSlNDZWxsKik7Ci0KLSAgICBib29sIGFkZE9wYXF1ZVJvb3Qodm9pZCopOyAvLyBSZXR1
cm5zIHRydWUgaWYgdGhlIHJvb3Qgd2FzIG5ldy4KLSAgICAKLSAgICBib29sIGNvbnRhaW5zT3Bh
cXVlUm9vdCh2b2lkKikgY29uc3Q7CisgICAgQUxXQVlTX0lOTElORSB2b2lkIGFwcGVuZEhpZGRl
blVuYmFycmllcmVkKEpTVmFsdWUpOworICAgIHZvaWQgYXBwZW5kSGlkZGVuVW5iYXJyaWVyZWQo
SlNDZWxsKikgZmluYWw7CiAKLSAgICBib29sIGlzRW1wdHkoKSB7IHJldHVybiBtX2NvbGxlY3Rv
clN0YWNrLmlzRW1wdHkoKSAmJiBtX211dGF0b3JTdGFjay5pc0VtcHR5KCk7IH0KKyAgICBib29s
IGlzRmlyc3RWaXNpdCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1faXNGaXJzdFZpc2l0OyB9CiAK
LSAgICBib29sIGlzRmlyc3RWaXNpdCgpIGNvbnN0IHsgcmV0dXJuIG1faXNGaXJzdFZpc2l0OyB9
CisgICAgYm9vbCBpc01hcmtlZChjb25zdCB2b2lkKikgY29uc3QgZmluYWw7CisgICAgYm9vbCBp
c01hcmtlZChNYXJrZWRCbG9jayYsIEhlYXBDZWxsKikgY29uc3QgZmluYWw7CisgICAgYm9vbCBp
c01hcmtlZChQcmVjaXNlQWxsb2NhdGlvbiYsIEhlYXBDZWxsKikgY29uc3QgZmluYWw7CiAKICAg
ICB2b2lkIGRpZFN0YXJ0TWFya2luZygpOwogICAgIHZvaWQgcmVzZXQoKTsKICAgICB2b2lkIGNs
ZWFyTWFya1N0YWNrcygpOwogCiAgICAgc2l6ZV90IGJ5dGVzVmlzaXRlZCgpIGNvbnN0IHsgcmV0
dXJuIG1fYnl0ZXNWaXNpdGVkOyB9Ci0gICAgc2l6ZV90IHZpc2l0Q291bnQoKSBjb25zdCB7IHJl
dHVybiBtX3Zpc2l0Q291bnQ7IH0KLSAgICAKLSAgICB2b2lkIGFkZFRvVmlzaXRDb3VudChzaXpl
X3QgdmFsdWUpIHsgbV92aXNpdENvdW50ICs9IHZhbHVlOyB9CiAKICAgICB2b2lkIGRvbmF0ZSgp
OwogICAgIHZvaWQgZHJhaW4oTW9ub3RvbmljVGltZSB0aW1lb3V0ID0gTW9ub3RvbmljVGltZTo6
aW5maW5pdHkoKSk7CkBAIC0xMzUsMjQgKzE0NywxOCBAQCBwdWJsaWM6CiAgICAgCiAgICAgLy8g
VGhpcyBpbmZvcm1zIHRoZSBHQyBhYm91dCBhdXhpbGlhcnkgb2Ygc29tZSBzaXplIHRoYXQgd2Ug
YXJlIGtlZXBpbmcgYWxpdmUuIElmIHlvdSBkb24ndCBkbwogICAgIC8vIHRoaXMgdGhlbiB0aGUg
c3BhY2Ugd2lsbCBiZSBmcmVlZCBhdCBlbmQgb2YgR0MuCi0gICAgdm9pZCBtYXJrQXV4aWxpYXJ5
KGNvbnN0IHZvaWQqIGJhc2UpOworICAgIHZvaWQgbWFya0F1eGlsaWFyeShjb25zdCB2b2lkKiBi
YXNlKSBmaW5hbDsKIAotICAgIHZvaWQgcmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKHNpemVfdCk7
CisgICAgdm9pZCByZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQoc2l6ZV90KSBmaW5hbDsKICNpZiBF
TkFCTEUoUkVTT1VSQ0VfVVNBR0UpCi0gICAgdm9pZCByZXBvcnRFeHRlcm5hbE1lbW9yeVZpc2l0
ZWQoc2l6ZV90KTsKKyAgICB2b2lkIHJlcG9ydEV4dGVybmFsTWVtb3J5VmlzaXRlZChzaXplX3Qp
IGZpbmFsOwogI2VuZGlmCiAgICAgCi0gICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7
Ci0KLSAgICBib29sIGlzQW5hbHl6aW5nSGVhcCgpIGNvbnN0IHsgcmV0dXJuICEhbV9oZWFwQW5h
bHl6ZXI7IH0KLSAgICBIZWFwQW5hbHl6ZXIqIGhlYXBBbmFseXplcigpIGNvbnN0IHsgcmV0dXJu
IG1faGVhcEFuYWx5emVyOyB9Ci0gICAgCi0gICAgUm9vdE1hcmtSZWFzb24gcm9vdE1hcmtSZWFz
b24oKSBjb25zdCB7IHJldHVybiBtX3Jvb3RNYXJrUmVhc29uOyB9Ci0gICAgdm9pZCBzZXRSb290
TWFya1JlYXNvbihSb290TWFya1JlYXNvbiByZWFzb24pIHsgbV9yb290TWFya1JlYXNvbiA9IHJl
YXNvbjsgfQorICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0IGZpbmFsOwogCiAgICAg
SGVhcFZlcnNpb24gbWFya2luZ1ZlcnNpb24oKSBjb25zdCB7IHJldHVybiBtX21hcmtpbmdWZXJz
aW9uOyB9CiAKLSAgICBib29sIG11dGF0b3JJc1N0b3BwZWQoKSBjb25zdCB7IHJldHVybiBtX211
dGF0b3JJc1N0b3BwZWQ7IH0KKyAgICBib29sIG11dGF0b3JJc1N0b3BwZWQoKSBjb25zdCBmaW5h
bCB7IHJldHVybiBtX211dGF0b3JJc1N0b3BwZWQ7IH0KICAgICAKICAgICBMb2NrJiByaWdodFRv
UnVuKCkgeyByZXR1cm4gbV9yaWdodFRvUnVuOyB9CiAgICAgCkBAIC0xNjQsMjAgKzE3MCwxNyBA
QCBwdWJsaWM6CiAgICAgCiAgICAgdm9pZCBvcHRpbWl6ZUZvclN0b3BwZWRNdXRhdG9yKCk7CiAg
ICAgCi0gICAgdm9pZCBkaWRSYWNlKGNvbnN0IFZpc2l0UmFjZUtleSYpOworICAgIHZvaWQgZGlk
UmFjZShjb25zdCBWaXNpdFJhY2VLZXkmKSBmaW5hbDsKICAgICB2b2lkIGRpZFJhY2UoSlNDZWxs
KiBjZWxsLCBjb25zdCBjaGFyKiByZWFzb24pIHsgZGlkUmFjZShWaXNpdFJhY2VLZXkoY2VsbCwg
cmVhc29uKSk7IH0KICAgICAKLSAgICB2b2lkIHZpc2l0QXNDb25zdHJhaW50KGNvbnN0IEpTQ2Vs
bCopOworICAgIHZvaWQgdmlzaXRBc0NvbnN0cmFpbnQoY29uc3QgSlNDZWxsKikgZmluYWw7CiAg
ICAgCiAgICAgYm9vbCBkaWRSZWFjaFRlcm1pbmF0aW9uKCk7CiAgICAgCi0gICAgdm9pZCBzZXRJ
Z25vcmVOZXdPcGFxdWVSb290cyhib29sIHZhbHVlKSB7IG1faWdub3JlTmV3T3BhcXVlUm9vdHMg
PSB2YWx1ZTsgfQotCiAgICAgdm9pZCBkb25hdGVBbGwoKTsKLSAgICAKLSAgICBjb25zdCBjaGFy
KiBjb2RlTmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29kZU5hbWUuZGF0YSgpOyB9Ci0gICAgCi0g
ICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBhZGRQYXJhbGxlbENvbnN0cmFpbnRUYXNrKFJlZlB0
cjxTaGFyZWRUYXNrPHZvaWQoU2xvdFZpc2l0b3ImKT4+KTsKKworICAgIE5PX1JFVFVSTl9EVUVf
VE9fQ1JBU0ggdm9pZCBhZGRQYXJhbGxlbENvbnN0cmFpbnRUYXNrKFJlZlB0cjxTaGFyZWRUYXNr
PHZvaWQoQWJzdHJhY3RTbG90VmlzaXRvciYpPj4pIGZpbmFsOworICAgIEpTX0VYUE9SVF9QUklW
QVRFIHZvaWQgYWRkUGFyYWxsZWxDb25zdHJhaW50VGFzayhSZWZQdHI8U2hhcmVkVGFzazx2b2lk
KFNsb3RWaXNpdG9yJik+PikgZmluYWw7CiAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIFBh
cmFsbGVsTW9kZUVuYWJsZXI7CkBAIC0yMTYsMzkgKzIxOSwyNSBAQCBwcml2YXRlOgogCiAgICAg
TWFya1N0YWNrQXJyYXkmIGNvcnJlc3BvbmRpbmdHbG9iYWxTdGFjayhNYXJrU3RhY2tBcnJheSYp
OwogCi0gICAgTWFya1N0YWNrQXJyYXkgbV9jb2xsZWN0b3JTdGFjazsKLSAgICBNYXJrU3RhY2tB
cnJheSBtX211dGF0b3JTdGFjazsKLSAgICAKLSAgICBzaXplX3QgbV9ieXRlc1Zpc2l0ZWQ7Ci0g
ICAgc2l6ZV90IG1fdmlzaXRDb3VudDsKLSAgICBzaXplX3QgbV9ub25DZWxsVmlzaXRDb3VudCB7
IDAgfTsgLy8gVXNlZCBmb3IgaW5jcmVtZW50YWwgZHJhaW5pbmcsIGlnbm9yZWQgb3RoZXJ3aXNl
LgotICAgIENoZWNrZWRTaXplIG1fZXh0cmFNZW1vcnlTaXplIHsgMCB9OwotICAgIGJvb2wgbV9p
c0luUGFyYWxsZWxNb2RlOwotICAgIGJvb2wgbV9pZ25vcmVOZXdPcGFxdWVSb290cyB7IGZhbHNl
IH07IC8vIFVzZWZ1bCBhcyBhIGRlYnVnZ2luZyBtb2RlLgorICAgIGJvb2wgbV9pc0luUGFyYWxs
ZWxNb2RlIHsgZmFsc2UgfTsKIAogICAgIEhlYXBWZXJzaW9uIG1fbWFya2luZ1ZlcnNpb247Ci0g
ICAgCi0gICAgSGVhcCYgbV9oZWFwOworCisgICAgc2l6ZV90IG1fYnl0ZXNWaXNpdGVkIHsgMCB9
OworICAgIHNpemVfdCBtX25vbkNlbGxWaXNpdENvdW50IHsgMCB9OyAvLyBVc2VkIGZvciBpbmNy
ZW1lbnRhbCBkcmFpbmluZywgaWdub3JlZCBvdGhlcndpc2UuCisgICAgQ2hlY2tlZFNpemUgbV9l
eHRyYU1lbW9yeVNpemUgeyAwIH07CiAKICAgICBIZWFwQW5hbHl6ZXIqIG1faGVhcEFuYWx5emVy
IHsgbnVsbHB0ciB9OwogICAgIEpTQ2VsbCogbV9jdXJyZW50Q2VsbCB7IG51bGxwdHIgfTsKLSAg
ICBSb290TWFya1JlYXNvbiBtX3Jvb3RNYXJrUmVhc29uIHsgUm9vdE1hcmtSZWFzb246Ok5vbmUg
fTsKICAgICBib29sIG1faXNGaXJzdFZpc2l0IHsgZmFsc2UgfTsKICAgICBib29sIG1fbXV0YXRv
cklzU3RvcHBlZCB7IGZhbHNlIH07CiAgICAgYm9vbCBtX2Nhbk9wdGltaXplRm9yU3RvcHBlZE11
dGF0b3IgeyBmYWxzZSB9OwogICAgIExvY2sgbV9yaWdodFRvUnVuOwogICAgIAotICAgIENTdHJp
bmcgbV9jb2RlTmFtZTsKLSAgICAKLSAgICBNYXJraW5nQ29uc3RyYWludCogbV9jdXJyZW50Q29u
c3RyYWludCB7IG51bGxwdHIgfTsKLSAgICBNYXJraW5nQ29uc3RyYWludFNvbHZlciogbV9jdXJy
ZW50U29sdmVyIHsgbnVsbHB0ciB9OwotICAgIAogICAgIC8vIFB1dCBwYWRkaW5nIGhlcmUgdG8g
bWl0aWdhdGUgZmFsc2Ugc2hhcmluZyBiZXR3ZWVuIG11bHRpcGxlIFNsb3RWaXNpdG9ycy4KICAg
ICBjaGFyIHBhZGRpbmdbNjRdOwotcHVibGljOgogI2lmIEFTU0VSVF9FTkFCTEVECi0gICAgYm9v
bCBtX2lzQ2hlY2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlvbjsKLSAgICBib29sIG1faXNEcmFp
bmluZzsKKyAgICBib29sIG1faXNDaGVja2luZ0ZvckRlZmF1bHRNYXJrVmlvbGF0aW9uIHsgZmFs
c2UgfTsKICNlbmRpZgogfTsKIApAQCAtMjcxLDIzICsyNjAsNCBAQCBwcml2YXRlOgogICAgIFNs
b3RWaXNpdG9yJiBtX3N0YWNrOwogfTsKIAotY2xhc3MgU2V0Um9vdE1hcmtSZWFzb25TY29wZSB7
Ci1wdWJsaWM6Ci0gICAgU2V0Um9vdE1hcmtSZWFzb25TY29wZShTbG90VmlzaXRvciYgdmlzaXRv
ciwgUm9vdE1hcmtSZWFzb24gcmVhc29uKQotICAgICAgICA6IG1fdmlzaXRvcih2aXNpdG9yKQot
ICAgICAgICAsIG1fcHJldmlvdXNSZWFzb24odmlzaXRvci5yb290TWFya1JlYXNvbigpKQotICAg
IHsKLSAgICAgICAgbV92aXNpdG9yLnNldFJvb3RNYXJrUmVhc29uKHJlYXNvbik7Ci0gICAgfQot
Ci0gICAgflNldFJvb3RNYXJrUmVhc29uU2NvcGUoKQotICAgIHsKLSAgICAgICAgbV92aXNpdG9y
LnNldFJvb3RNYXJrUmVhc29uKG1fcHJldmlvdXNSZWFzb24pOwotICAgIH0KLQotcHJpdmF0ZToK
LSAgICBTbG90VmlzaXRvciYgbV92aXNpdG9yOwotICAgIFJvb3RNYXJrUmVhc29uIG1fcHJldmlv
dXNSZWFzb247Ci19OwotCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9ySW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9ySW5saW5lcy5oCShyZXZpc2lvbiAyNzMxMTkp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvcklubGluZXMuaAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAx
OSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIt
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTI1LDkgKzI1LDEwIEBACiAKICNwcmFnbWEgb25jZQogCisjaW5jbHVk
ZSAiQWJzdHJhY3RTbG90VmlzaXRvcklubGluZXMuaCIKKyNpbmNsdWRlICJNYXJrZWRCbG9jay5o
IgorI2luY2x1ZGUgIlByZWNpc2VBbGxvY2F0aW9uLmgiCiAjaW5jbHVkZSAiU2xvdFZpc2l0b3Iu
aCIKLSNpbmNsdWRlICJXZWFrLmgiCi0jaW5jbHVkZSAiV2Vha0lubGluZXMuaCIKIAogbmFtZXNw
YWNlIEpTQyB7CiAKQEAgLTEzNCwyMSArMTM1LDE5IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBTbG90
VmlzaXRvcjo6YXBwZW5kVmEKICAgICAgICAgYXBwZW5kSGlkZGVuKGJhcnJpZXJzW2ldKTsKIH0K
IAotaW5saW5lIGJvb2wgU2xvdFZpc2l0b3I6OmFkZE9wYXF1ZVJvb3Qodm9pZCogcHRyKQorQUxX
QVlTX0lOTElORSBib29sIFNsb3RWaXNpdG9yOjppc01hcmtlZChjb25zdCB2b2lkKiBwKSBjb25z
dAogewotICAgIGlmICghcHRyKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKG1faWdu
b3JlTmV3T3BhcXVlUm9vdHMpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoIWhlYXAo
KS0+bV9vcGFxdWVSb290cy5hZGQocHRyKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1f
dmlzaXRDb3VudCsrOwotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBoZWFwKCktPmlzTWFy
a2VkKHApOwogfQogCi1pbmxpbmUgYm9vbCBTbG90VmlzaXRvcjo6Y29udGFpbnNPcGFxdWVSb290
KHZvaWQqIHB0cikgY29uc3QKK0FMV0FZU19JTkxJTkUgYm9vbCBTbG90VmlzaXRvcjo6aXNNYXJr
ZWQoTWFya2VkQmxvY2smIGNvbnRhaW5lciwgSGVhcENlbGwqIGNlbGwpIGNvbnN0CiB7Ci0gICAg
cmV0dXJuIGhlYXAoKS0+bV9vcGFxdWVSb290cy5jb250YWlucyhwdHIpOworICAgIHJldHVybiBj
b250YWluZXIuaXNNYXJrZWQobWFya2luZ1ZlcnNpb24oKSwgY2VsbCk7Cit9CisKK0FMV0FZU19J
TkxJTkUgYm9vbCBTbG90VmlzaXRvcjo6aXNNYXJrZWQoUHJlY2lzZUFsbG9jYXRpb24mIGNvbnRh
aW5lciwgSGVhcENlbGwqIGNlbGwpIGNvbnN0Cit7CisgICAgcmV0dXJuIGNvbnRhaW5lci5pc01h
cmtlZChtYXJraW5nVmVyc2lvbigpLCBjZWxsKTsKIH0KIAogaW5saW5lIHZvaWQgU2xvdFZpc2l0
b3I6OnJlcG9ydEV4dHJhTWVtb3J5VmlzaXRlZChzaXplX3Qgc2l6ZSkKQEAgLTE2OSwyMSArMTY4
LDYgQEAgaW5saW5lIHZvaWQgU2xvdFZpc2l0b3I6OnJlcG9ydEV4dGVybmFsTQogfQogI2VuZGlm
CiAKLWlubGluZSBIZWFwKiBTbG90VmlzaXRvcjo6aGVhcCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
ICZtX2hlYXA7Ci19Ci0KLWlubGluZSBWTSYgU2xvdFZpc2l0b3I6OnZtKCkKLXsKLSAgICByZXR1
cm4gbV9oZWFwLnZtKCk7Ci19Ci0KLWlubGluZSBjb25zdCBWTSYgU2xvdFZpc2l0b3I6OnZtKCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gbV9oZWFwLnZtKCk7Ci19Ci0KIHRlbXBsYXRlPHR5cGVuYW1l
IEZ1bmM+CiBJdGVyYXRpb25TdGF0dXMgU2xvdFZpc2l0b3I6OmZvckVhY2hNYXJrU3RhY2soY29u
c3QgRnVuYyYgZnVuYykKIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RW
aXNpdG9yTWFjcm9zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
U2xvdFZpc2l0b3JNYWNyb3MuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9TbG90VmlzaXRvck1hY3Jvcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTIz
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdt
YSBvbmNlCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBBYnN0cmFjdFNsb3RWaXNpdG9yOwor
Y2xhc3MgSlNDZWxsOworY2xhc3MgU2xvdFZpc2l0b3I7CisKKyNkZWZpbmUgVU5VU0VEX01PRElG
SUVSX0FSR1VNRU5UIC8qIHVudXNlZCAqLworCisjZGVmaW5lIERFQ0xBUkVfVU5VU0VEX1NUUlVD
VF9UT19URVJNSU5BVEVfVklTSVRfTUFDUk9fRVhQQU5ERVJfSU1QTChjb3VudGVyKSBcCisgICAg
c3RydWN0IFVudXNlZFNsb3RWaXNpdG9yTWFjcm9TdHJ1Y3RTb1dlQ2FuSGF2ZUFTZW1pY29sb24j
I2NvdW50ZXIgeyB9CisKKyNkZWZpbmUgREVDTEFSRV9VTlVTRURfU1RSVUNUX1RPX1RFUk1JTkFU
RV9WSVNJVF9NQUNST19FWFBBTkRFUihjb3VudGVyKSBcCisgICAgREVDTEFSRV9VTlVTRURfU1RS
VUNUX1RPX1RFUk1JTkFURV9WSVNJVF9NQUNST19FWFBBTkRFUl9JTVBMKGNvdW50ZXIpCisKKyNk
ZWZpbmUgREVDTEFSRV9VTlVTRURfU1RSVUNUX1RPX1RFUk1JTkFURV9WSVNJVF9NQUNSTyBcCisg
ICAgREVDTEFSRV9VTlVTRURfU1RSVUNUX1RPX1RFUk1JTkFURV9WSVNJVF9NQUNST19FWFBBTkRF
UihfX0NPVU5URVJfXykKKworLy8gTWFjcm9zIGZvciB2aXNpdEFnZ3JlZ2F0ZSgpLgorCisjZGVm
aW5lIERFQ0xBUkVfVklTSVRfQUdHUkVHQVRFX1dJVEhfTU9ESUZJRVIocG9zdE1vZGlmaWVyKSBc
Citwcml2YXRlOiBcCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gQUxXQVlTX0lOTElO
RSB2b2lkIHZpc2l0QWdncmVnYXRlSW1wbChWaXNpdG9yJikgcG9zdE1vZGlmaWVyOyBcCitwdWJs
aWM6IFwKKyAgICB2b2lkIHZpc2l0QWdncmVnYXRlKEFic3RyYWN0U2xvdFZpc2l0b3ImKSBwb3N0
TW9kaWZpZXI7IFwKKyAgICB2b2lkIHZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJikgcG9zdE1v
ZGlmaWVyCisKKyNkZWZpbmUgREVDTEFSRV9WSVNJVF9BR0dSRUdBVEUgXAorICAgIERFQ0xBUkVf
VklTSVRfQUdHUkVHQVRFX1dJVEhfTU9ESUZJRVIoVU5VU0VEX01PRElGSUVSX0FSR1VNRU5UKQor
CisjZGVmaW5lIERFRklORV9WSVNJVF9BR0dSRUdBVEVfV0lUSF9NT0RJRklFUihjbGFzc05hbWUs
IHBvc3RNb2RpZmllcikgXAorICAgIHZvaWQgY2xhc3NOYW1lOjp2aXNpdEFnZ3JlZ2F0ZShBYnN0
cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBwb3N0TW9kaWZpZXIgeyB2aXNpdEFnZ3JlZ2F0ZUlt
cGwodmlzaXRvcik7IH0gXAorICAgIHZvaWQgY2xhc3NOYW1lOjp2aXNpdEFnZ3JlZ2F0ZShTbG90
VmlzaXRvciYgdmlzaXRvcikgcG9zdE1vZGlmaWVyIHsgdmlzaXRBZ2dyZWdhdGVJbXBsKHZpc2l0
b3IpOyB9IFwKKyAgICBERUNMQVJFX1VOVVNFRF9TVFJVQ1RfVE9fVEVSTUlOQVRFX1ZJU0lUX01B
Q1JPCisKKyNkZWZpbmUgREVGSU5FX1ZJU0lUX0FHR1JFR0FURShjbGFzc05hbWUpIFwKKyAgICBE
RUZJTkVfVklTSVRfQUdHUkVHQVRFX1dJVEhfTU9ESUZJRVIoY2xhc3NOYW1lLCBVTlVTRURfTU9E
SUZJRVJfQVJHVU1FTlQpCisKKy8vIE1hY3JvcyBmb3Igc3RhdGljIHZpc2l0Q2hpbGRyZW4oKS4K
KworI2RlZmluZSBERUNMQVJFX1ZJU0lUX0NISUxEUkVOX1dJVEhfTU9ESUZJRVIocHJlTW9kaWZp
ZXIpIFwKK3ByaXZhdGU6IFwKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiBBTFdBWVNf
SU5MSU5FIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCosIFZpc2l0b3ImKTsg
XAorcHVibGljOiBcCisgICAgcHJlTW9kaWZpZXIgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihK
U0NlbGwqLCBBYnN0cmFjdFNsb3RWaXNpdG9yJik7IFwKKyAgICBwcmVNb2RpZmllciBzdGF0aWMg
dm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJikKKworI2RlZmluZSBERUNM
QVJFX1ZJU0lUX0NISUxEUkVOIFwKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOX1dJVEhfTU9E
SUZJRVIoVU5VU0VEX01PRElGSUVSX0FSR1VNRU5UKQorCisjZGVmaW5lIERFRklORV9WSVNJVF9D
SElMRFJFTl9XSVRIX01PRElGSUVSKHByZU1vZGlmaWVyLCBjbGFzc05hbWUpIFwKKyAgICBwcmVN
b2RpZmllciB2b2lkIGNsYXNzTmFtZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIEFic3Ry
YWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpIFwKKyAgICB7IFwKKyAgICAgICAgQWJzdHJhY3RTbG90
VmlzaXRvcjo6Q29udGV4dCBjb250ZXh0KHZpc2l0b3IsIGNlbGwpOyBcCisgICAgICAgIHZpc2l0
Q2hpbGRyZW5JbXBsKGNlbGwsIHZpc2l0b3IpOyBcCisgICAgfSBcCisgICAgcHJlTW9kaWZpZXIg
dm9pZCBjbGFzc05hbWU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYg
dmlzaXRvcikgeyB2aXNpdENoaWxkcmVuSW1wbChjZWxsLCB2aXNpdG9yKTsgfSBcCisgICAgREVD
TEFSRV9VTlVTRURfU1RSVUNUX1RPX1RFUk1JTkFURV9WSVNJVF9NQUNSTworCisjZGVmaW5lIERF
RklORV9WSVNJVF9DSElMRFJFTihjbGFzc05hbWUpIFwKKyAgICBERUZJTkVfVklTSVRfQ0hJTERS
RU5fV0lUSF9NT0RJRklFUihVTlVTRURfTU9ESUZJRVJfQVJHVU1FTlQsIGNsYXNzTmFtZSkKKwor
Ly8gTWFjcm9zIGZvciBzdGF0aWMgdmlzaXRPdXRwdXRDb25zdHJhaW50cygpLgorCisjZGVmaW5l
IERFQ0xBUkVfVklTSVRfT1VUUFVUX0NPTlNUUkFJTlRTX1dJVEhfTU9ESUZJRVIocHJlTW9kaWZp
ZXIpIFwKK3ByaXZhdGU6IFwKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiBBTFdBWVNf
SU5MSU5FIHN0YXRpYyB2b2lkIHZpc2l0T3V0cHV0Q29uc3RyYWludHNJbXBsKEpTQ2VsbCosIFZp
c2l0b3ImKTsgXAorcHVibGljOiBcCisgICAgcHJlTW9kaWZpZXIgc3RhdGljIHZvaWQgdmlzaXRP
dXRwdXRDb25zdHJhaW50cyhKU0NlbGwqLCBBYnN0cmFjdFNsb3RWaXNpdG9yJik7IFwKKyAgICBw
cmVNb2RpZmllciBzdGF0aWMgdm9pZCB2aXNpdE91dHB1dENvbnN0cmFpbnRzKEpTQ2VsbCosIFNs
b3RWaXNpdG9yJikKKworI2RlZmluZSBERUNMQVJFX1ZJU0lUX09VVFBVVF9DT05TVFJBSU5UUyBc
CisgICAgREVDTEFSRV9WSVNJVF9PVVRQVVRfQ09OU1RSQUlOVFNfV0lUSF9NT0RJRklFUihVTlVT
RURfTU9ESUZJRVJfQVJHVU1FTlQpCisKKyNkZWZpbmUgREVGSU5FX1ZJU0lUX09VVFBVVF9DT05T
VFJBSU5UU19XSVRIX01PRElGSUVSKHByZU1vZGlmaWVyLCBjbGFzc05hbWUpIFwKKyAgICBwcmVN
b2RpZmllciB2b2lkIGNsYXNzTmFtZTo6dmlzaXRPdXRwdXRDb25zdHJhaW50cyhKU0NlbGwqIGNl
bGwsIEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpIFwKKyAgICB7IFwKKyAgICAgICAgQWJz
dHJhY3RTbG90VmlzaXRvcjo6Q29udGV4dCBjb250ZXh0KHZpc2l0b3IsIGNlbGwpOyBcCisgICAg
ICAgIHZpc2l0T3V0cHV0Q29uc3RyYWludHNJbXBsKGNlbGwsIHZpc2l0b3IpOyBcCisgICAgfSBc
CisgICAgcHJlTW9kaWZpZXIgdm9pZCBjbGFzc05hbWU6OnZpc2l0T3V0cHV0Q29uc3RyYWludHMo
SlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikgeyB2aXNpdE91dHB1dENvbnN0cmFp
bnRzSW1wbChjZWxsLCB2aXNpdG9yKTsgfSBcCisgICAgREVDTEFSRV9VTlVTRURfU1RSVUNUX1RP
X1RFUk1JTkFURV9WSVNJVF9NQUNSTworCisjZGVmaW5lIERFRklORV9WSVNJVF9PVVRQVVRfQ09O
U1RSQUlOVFMoY2xhc3NOYW1lKSBcCisgICAgREVGSU5FX1ZJU0lUX09VVFBVVF9DT05TVFJBSU5U
U19XSVRIX01PRElGSUVSKFVOVVNFRF9NT0RJRklFUl9BUkdVTUVOVCwgY2xhc3NOYW1lKQorCisv
LyBNYWNyb3MgZm9yIHZpc2l0QWRkaXRpb25hbENoaWxkcmVuKCkuCisKKyNkZWZpbmUgREVGSU5F
X1ZJU0lUX0FERElUSU9OQUxfQ0hJTERSRU4oY2xhc3NOYW1lKSBcCisgICAgdGVtcGxhdGUgdm9p
ZCBjbGFzc05hbWU6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6QWJzdHJhY3RTbG90Vmlz
aXRvciYpOyBcCisgICAgdGVtcGxhdGUgdm9pZCBjbGFzc05hbWU6OnZpc2l0QWRkaXRpb25hbENo
aWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImKQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwordXNpbmcg
SlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yOwordXNpbmcgSlNDOjpKU0NlbGw7Cit1c2luZyBKU0M6
OlNsb3RWaXNpdG9yOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3Vic3BhY2Uu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdWJzcGFjZS5oCShy
ZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdWJzcGFjZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
Ny0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtODYsOCArODYsOCBAQCBwdWJsaWM6CiAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgRnVuYz4KICAgICB2b2lkIGZvckVhY2hNYXJrZWRDZWxsKGNvbnN0IEZ1bmMmKTsK
ICAgICAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgotICAgIFJlZjxTaGFyZWRUYXNrPHZv
aWQoU2xvdFZpc2l0b3ImKT4+IGZvckVhY2hNYXJrZWRDZWxsSW5QYXJhbGxlbChjb25zdCBGdW5j
Jik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvciwgdHlwZW5hbWUgRnVuYz4KKyAgICBS
ZWY8U2hhcmVkVGFzazx2b2lkKFZpc2l0b3ImKT4+IGZvckVhY2hNYXJrZWRDZWxsSW5QYXJhbGxl
bChjb25zdCBGdW5jJik7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgogICAgIHZvaWQg
Zm9yRWFjaExpdmVDZWxsKGNvbnN0IEZ1bmMmKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL1N1YnNwYWNlSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL1N1YnNwYWNlSW5saW5lcy5oCShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9TdWJzcGFjZUlubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAxOCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTg1LDEwICs4NSwxMCBAQCB2b2lkIFN1YnNwYWNlOjpmb3JFYWNoTWFya2VkQ2VsbChjb25zdCBG
CiAgICAgICAgIH0pOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgotUmVmPFNoYXJlZFRh
c2s8dm9pZChTbG90VmlzaXRvciYpPj4gU3Vic3BhY2U6OmZvckVhY2hNYXJrZWRDZWxsSW5QYXJh
bGxlbChjb25zdCBGdW5jJiBmdW5jKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvciwgdHlwZW5h
bWUgRnVuYz4KK1JlZjxTaGFyZWRUYXNrPHZvaWQoVmlzaXRvciYpPj4gU3Vic3BhY2U6OmZvckVh
Y2hNYXJrZWRDZWxsSW5QYXJhbGxlbChjb25zdCBGdW5jJiBmdW5jKQogewotICAgIGNsYXNzIFRh
c2sgZmluYWwgOiBwdWJsaWMgU2hhcmVkVGFzazx2b2lkKFNsb3RWaXNpdG9yJik+IHsKKyAgICBj
bGFzcyBUYXNrIGZpbmFsIDogcHVibGljIFNoYXJlZFRhc2s8dm9pZChWaXNpdG9yJik+IHsKICAg
ICBwdWJsaWM6CiAgICAgICAgIFRhc2soU3Vic3BhY2UmIHN1YnNwYWNlLCBjb25zdCBGdW5jJiBm
dW5jKQogICAgICAgICAgICAgOiBtX3N1YnNwYWNlKHN1YnNwYWNlKQpAQCAtOTcsNyArOTcsNyBA
QCBSZWY8U2hhcmVkVGFzazx2b2lkKFNsb3RWaXNpdG9yJik+PiBTdWJzCiAgICAgICAgIHsKICAg
ICAgICAgfQogICAgICAgICAKLSAgICAgICAgdm9pZCBydW4oU2xvdFZpc2l0b3ImIHZpc2l0b3Ip
IGZpbmFsCisgICAgICAgIHZvaWQgcnVuKFZpc2l0b3ImIHZpc2l0b3IpIGZpbmFsCiAgICAgICAg
IHsKICAgICAgICAgICAgIHdoaWxlIChNYXJrZWRCbG9jazo6SGFuZGxlKiBoYW5kbGUgPSBtX2Js
b2NrU291cmNlLT5ydW4oKSkgewogICAgICAgICAgICAgICAgIGhhbmRsZS0+Zm9yRWFjaE1hcmtl
ZENlbGwoCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9WZXJpZmllclNsb3RWaXNp
dG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9WZXJpZmll
clNsb3RWaXNpdG9yLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9WZXJpZmllclNsb3RWaXNpdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM0
NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJWZXJpZmll
clNsb3RWaXNpdG9yLmgiCisKKyNpbmNsdWRlICJCbG9ja0RpcmVjdG9yeUlubGluZXMuaCIKKyNp
bmNsdWRlICJDb25zZXJ2YXRpdmVSb290cy5oIgorI2luY2x1ZGUgIkdDU2VnbWVudGVkQXJyYXlJ
bmxpbmVzLmgiCisjaW5jbHVkZSAiSGVhcENlbGwuaCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgi
CisjaW5jbHVkZSAiVk0uaCIKKyNpbmNsdWRlICJWZXJpZmllclNsb3RWaXNpdG9ySW5saW5lcy5o
IgorI2luY2x1ZGUgPHd0Zi9TdGFja1RyYWNlLmg+CisKK25hbWVzcGFjZSBKU0MgeworCit1c2lu
ZyBNYXJrZXJEYXRhID0gVmVyaWZpZXJTbG90VmlzaXRvcjo6TWFya2VyRGF0YTsKKworY29uc3Rl
eHByIGludCBtYXhNYXJraW5nU3RhY2tGcmFtZXNUb0NhcHR1cmUgPSAxMDA7CisKK01hcmtlckRh
dGE6Ok1hcmtlckRhdGEoSGVhcENlbGwqIHBhcmVudCwgc3RkOjp1bmlxdWVfcHRyPFN0YWNrVHJh
Y2U+JiYgc3RhY2spCisgICAgOiBwYXJlbnQocGFyZW50KQorICAgICwgc3RhY2soV1RGTW92ZShz
dGFjaykpCit7Cit9CisKK1ZlcmlmaWVyU2xvdFZpc2l0b3I6Ok1hcmtlZEJsb2NrRGF0YTo6TWFy
a2VkQmxvY2tEYXRhKE1hcmtlZEJsb2NrKiBibG9jaykKKyAgICA6IG1fYmxvY2soYmxvY2spCit7
Cit9CisKK3ZvaWQgVmVyaWZpZXJTbG90VmlzaXRvcjo6TWFya2VkQmxvY2tEYXRhOjphZGRNYXJr
ZXJEYXRhKHVuc2lnbmVkIGF0b21OdW1iZXIsIE1hcmtlckRhdGEmJiBtYXJrZXIpCit7CisgICAg
aWYgKG1fbWFya2Vycy5pc0VtcHR5KCkpCisgICAgICAgIG1fbWFya2Vycy5ncm93KE1hcmtlZEJs
b2NrOjphdG9tc1BlckJsb2NrKTsKKyAgICBtX21hcmtlcnNbYXRvbU51bWJlcl0gPSBXVEZNb3Zl
KG1hcmtlcik7Cit9CisKK2NvbnN0IE1hcmtlckRhdGEqIFZlcmlmaWVyU2xvdFZpc2l0b3I6Ok1h
cmtlZEJsb2NrRGF0YTo6bWFya2VyRGF0YSh1bnNpZ25lZCBhdG9tTnVtYmVyKSBjb25zdAorewor
ICAgIGF1dG8mIG1hcmtlciA9IG1fbWFya2Vyc1thdG9tTnVtYmVyXTsKKyAgICBpZiAobWFya2Vy
LnN0YWNrKQorICAgICAgICByZXR1cm4gJm1hcmtlcjsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30K
KworVmVyaWZpZXJTbG90VmlzaXRvcjo6UHJlY2lzZUFsbG9jYXRpb25EYXRhOjpQcmVjaXNlQWxs
b2NhdGlvbkRhdGEoUHJlY2lzZUFsbG9jYXRpb24qIGFsbG9jYXRpb24pCisgICAgOiBtX2FsbG9j
YXRpb24oYWxsb2NhdGlvbikKK3sKK30KKworY29uc3QgTWFya2VyRGF0YSogVmVyaWZpZXJTbG90
VmlzaXRvcjo6UHJlY2lzZUFsbG9jYXRpb25EYXRhOjptYXJrZXJEYXRhKCkgY29uc3QKK3sKKyAg
ICBpZiAobV9tYXJrZXIuc3RhY2spCisgICAgICAgIHJldHVybiAmbV9tYXJrZXI7CisgICAgcmV0
dXJuIG51bGxwdHI7Cit9CisKK3ZvaWQgVmVyaWZpZXJTbG90VmlzaXRvcjo6UHJlY2lzZUFsbG9j
YXRpb25EYXRhOjphZGRNYXJrZXJEYXRhKE1hcmtlckRhdGEmJiBtYXJrZXIpCit7CisgICAgbV9t
YXJrZXIgPSBXVEZNb3ZlKG1hcmtlcik7Cit9CisKK1ZlcmlmaWVyU2xvdFZpc2l0b3I6OlZlcmlm
aWVyU2xvdFZpc2l0b3IoSGVhcCYgaGVhcCkKKyAgICA6IEJhc2UoaGVhcCwgIlZlcmlmaWVyIiwg
bV9vcGFxdWVSb290U3RvcmFnZSkKK3sKK30KKworVmVyaWZpZXJTbG90VmlzaXRvcjo6flZlcmlm
aWVyU2xvdFZpc2l0b3IoKQoreworICAgIGhlYXAoKS0+b2JqZWN0U3BhY2UoKS5mb3JFYWNoQmxv
Y2soCisgICAgICAgIFsmXSAoTWFya2VkQmxvY2s6OkhhbmRsZSogaGFuZGxlKSB7CisgICAgICAg
ICAgICBoYW5kbGUtPmJsb2NrKCkuc2V0VmVyaWZpZXJNZW1vKG51bGxwdHIpOworICAgICAgICB9
KTsKK30KKwordm9pZCBWZXJpZmllclNsb3RWaXNpdG9yOjphZGRQYXJhbGxlbENvbnN0cmFpbnRU
YXNrKFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoQWJzdHJhY3RTbG90VmlzaXRvciYpPj4gdGFzaykK
K3sKKyAgICBtX2NvbnN0cmFpbnRUYXNrcy5hcHBlbmQoV1RGTW92ZSh0YXNrKSk7Cit9CisKK05P
X1JFVFVSTl9EVUVfVE9fQ1JBU0ggdm9pZCBWZXJpZmllclNsb3RWaXNpdG9yOjphZGRQYXJhbGxl
bENvbnN0cmFpbnRUYXNrKFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoU2xvdFZpc2l0b3ImKT4+KQor
eworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK3ZvaWQgVmVyaWZpZXJT
bG90VmlzaXRvcjo6ZXhlY3V0ZUNvbnN0cmFpbnRUYXNrcygpCit7CisgICAgd2hpbGUgKCFtX2Nv
bnN0cmFpbnRUYXNrcy5pc0VtcHR5KCkpCisgICAgICAgIG1fY29uc3RyYWludFRhc2tzLnRha2VG
aXJzdCgpLT5ydW4oKnRoaXMpOworfQorCit2b2lkIFZlcmlmaWVyU2xvdFZpc2l0b3I6OmFwcGVu
ZChjb25zdCBDb25zZXJ2YXRpdmVSb290cyYgY29uc2VydmF0aXZlUm9vdHMpCit7CisgICAgYXV0
byBhcHBlbmRKU0NlbGxPckF1eGlsaWFyeSA9IFsmXSAoSGVhcENlbGwqIGhlYXBDZWxsKSB7Cisg
ICAgICAgIGlmICghaGVhcENlbGwpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgaWYg
KHRlc3RBbmRTZXRNYXJrZWQoaGVhcENlbGwpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAg
ICAgIHN3aXRjaCAoaGVhcENlbGwtPmNlbGxLaW5kKCkpIHsKKyAgICAgICAgY2FzZSBIZWFwQ2Vs
bDo6SlNDZWxsOgorICAgICAgICBjYXNlIEhlYXBDZWxsOjpKU0NlbGxXaXRoSW5kZXhpbmdIZWFk
ZXI6IHsKKyAgICAgICAgICAgIEpTQ2VsbCoganNDZWxsID0gc3RhdGljX2Nhc3Q8SlNDZWxsKj4o
aGVhcENlbGwpOworICAgICAgICAgICAgYXBwZW5kVG9NYXJrU3RhY2soanNDZWxsKTsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgSGVhcENlbGw6OkF1eGls
aWFyeToKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH07CisKKyAgICBIZWFw
Q2VsbCoqIHJvb3RzID0gY29uc2VydmF0aXZlUm9vdHMucm9vdHMoKTsKKyAgICBzaXplX3Qgc2l6
ZSA9IGNvbnNlcnZhdGl2ZVJvb3RzLnNpemUoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IHNpemU7ICsraSkKKyAgICAgICAgYXBwZW5kSlNDZWxsT3JBdXhpbGlhcnkocm9vdHNbaV0pOwor
fQorCit2b2lkIFZlcmlmaWVyU2xvdFZpc2l0b3I6OmFwcGVuZFRvTWFya1N0YWNrKEpTQ2VsbCog
Y2VsbCkKK3sKKyAgICBBU1NFUlQoIWNlbGwtPmlzWmFwcGVkKCkpOworICAgIG1fY29sbGVjdG9y
U3RhY2suYXBwZW5kKGNlbGwpOworfQorCit2b2lkIFZlcmlmaWVyU2xvdFZpc2l0b3I6OmFwcGVu
ZFVuYmFycmllcmVkKEpTQ2VsbCogY2VsbCkKK3sKKyAgICBpZiAoIWNlbGwpCisgICAgICAgIHJl
dHVybjsKKworICAgIGlmIChVTkxJS0VMWShjZWxsLT5pc1ByZWNpc2VBbGxvY2F0aW9uKCkpKSB7
CisgICAgICAgIGlmIChMSUtFTFkoaXNNYXJrZWQoY2VsbC0+cHJlY2lzZUFsbG9jYXRpb24oKSwg
Y2VsbCkpKQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0gZWxzZSB7CisgICAgICAgIE1hcmtl
ZEJsb2NrJiBibG9jayA9IGNlbGwtPm1hcmtlZEJsb2NrKCk7CisgICAgICAgIGlmIChMSUtFTFko
aXNNYXJrZWQoYmxvY2ssIGNlbGwpKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBhcHBlbmRTbG93KGNlbGwpOworfQorCit2b2lkIFZlcmlmaWVyU2xvdFZpc2l0b3I6OmFwcGVu
ZEhpZGRlblVuYmFycmllcmVkKEpTQ2VsbCogY2VsbCkKK3sKKyAgICBhcHBlbmRVbmJhcnJpZXJl
ZChjZWxsKTsKK30KKwordm9pZCBWZXJpZmllclNsb3RWaXNpdG9yOjpkcmFpbigpCit7CisgICAg
UkVMRUFTRV9BU1NFUlQobV9tdXRhdG9yU3RhY2suaXNFbXB0eSgpKTsKKworICAgIE1hcmtTdGFj
a0FycmF5JiBzdGFjayA9IG1fY29sbGVjdG9yU3RhY2s7CisgICAgaWYgKHN0YWNrLmlzRW1wdHko
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgc3RhY2sucmVmaWxsKCk7CisgICAgd2hpbGUgKHN0
YWNrLmNhblJlbW92ZUxhc3QoKSkKKyAgICAgICAgdmlzaXRDaGlsZHJlbihzdGFjay5yZW1vdmVM
YXN0KCkpOworfQorCit2b2lkIFZlcmlmaWVyU2xvdFZpc2l0b3I6OmR1bXBNYXJrZXJEYXRhKEhl
YXBDZWxsKiBjZWxsKQoreworICAgIGlmIChjZWxsLT5pc1ByZWNpc2VBbGxvY2F0aW9uKCkpCisg
ICAgICAgIHJldHVybiBkdW1wTWFya2VyRGF0YShjZWxsLT5wcmVjaXNlQWxsb2NhdGlvbigpLCBj
ZWxsKTsKKyAgICByZXR1cm4gZHVtcE1hcmtlckRhdGEoY2VsbC0+bWFya2VkQmxvY2soKSwgY2Vs
bCk7Cit9CisKK3ZvaWQgVmVyaWZpZXJTbG90VmlzaXRvcjo6ZHVtcE1hcmtlckRhdGEoUHJlY2lz
ZUFsbG9jYXRpb24mIGFsbG9jYXRpb24sIEhlYXBDZWxsKiBjZWxsKQoreworICAgIGF1dG8gaXRl
cmF0b3IgPSBtX3ByZWNpc2VBbGxvY2F0aW9uTWFwLmZpbmQoJmFsbG9jYXRpb24pOworICAgIGlm
IChpdGVyYXRvciAhPSBtX3ByZWNpc2VBbGxvY2F0aW9uTWFwLmVuZCgpKSB7CisgICAgICAgIGR1
bXBNYXJrZXJEYXRhKGNlbGwsIGl0ZXJhdG9yLT52YWx1ZS0+bWFya2VyRGF0YSgpKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyAgICBkYXRhTG9nTG4oIkNlbGwgIiwgUmF3UG9pbnRlcihjZWxs
KSwgIiBub3QgZm91bmQiKTsKK30KKwordm9pZCBWZXJpZmllclNsb3RWaXNpdG9yOjpkdW1wTWFy
a2VyRGF0YShNYXJrZWRCbG9jayYgYmxvY2ssIEhlYXBDZWxsKiBjZWxsKQoreworICAgIGF1dG8g
aXRlcmF0b3IgPSBtX21hcmtlZEJsb2NrTWFwLmZpbmQoJmJsb2NrKTsKKyAgICBpZiAoaXRlcmF0
b3IgIT0gbV9tYXJrZWRCbG9ja01hcC5lbmQoKSkgeworICAgICAgICB1bnNpZ25lZCBhdG9tTnVt
YmVyID0gYmxvY2suYXRvbU51bWJlcihjZWxsKTsKKyAgICAgICAgZHVtcE1hcmtlckRhdGEoY2Vs
bCwgaXRlcmF0b3ItPnZhbHVlLT5tYXJrZXJEYXRhKGF0b21OdW1iZXIpKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKyAgICBkYXRhTG9nTG4oIkNlbGwgIiwgUmF3UG9pbnRlcihjZWxsKSwgIiBu
b3QgZm91bmQiKTsKK30KKwordm9pZCBWZXJpZmllclNsb3RWaXNpdG9yOjpkdW1wTWFya2VyRGF0
YShIZWFwQ2VsbCogY2VsbCwgY29uc3QgTWFya2VyRGF0YSogbWFya2VyKQoreworICAgIGlmICgh
bWFya2VyKSB7CisgICAgICAgIGRhdGFMb2dMbigiTWFya2VyIGRhdGEgaXMgbm90IGF2YWlsYWJs
ZSBmb3IgY2VsbCAiLCBSYXdQb2ludGVyKGNlbGwpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIGRhdGFMb2dMbigiQ2VsbCAiLCBSYXdQb2ludGVyKGNlbGwpLCAiIHdhcyByZWFjaGFi
bGUgdmlhIGNlbGwgIiwgUmF3UG9pbnRlcihtYXJrZXItPnBhcmVudCksICIgYXQ6Iik7CisgICAg
bWFya2VyLT5zdGFjay0+ZHVtcChXVEY6OmRhdGFGaWxlKCksICIgICAgIik7Cit9CisKK2Jvb2wg
VmVyaWZpZXJTbG90VmlzaXRvcjo6aXNGaXJzdFZpc2l0KCkgY29uc3QKK3sKKyAgICAvLyBJbiB0
aGUgcmVndWxhciBHQywgdGhpcyByZXR1cm4gdmFsdWUgaXMgb25seSB1c2VkIHRvIGNvbnRyb2wg
d2hldGhlcgorICAgIC8vIFVubGlua2VkQ29kZUJsb2NrcyB3aWxsIGJlIGFnZWQgKHNlZSBVbmxp
bmtlZENvZGVCbG9jazo6dmlzaXRDaGlsZHJlbkltcGwoKSkuCisgICAgLy8gRm9yIHRoZSB2ZXJp
ZmllciBHQyBwYXNzLCB3ZSBzaG91bGQgYWx3YXlzIHJldHVybiBmYWxzZSBiZWNhdXNlIHdlIGRv
bid0CisgICAgLy8gd2FudCB0byBkbyB0aGUgYWdpbmcgYWN0aW9uIGFnYWluLgorICAgIHJldHVy
biBmYWxzZTsKK30KKworYm9vbCBWZXJpZmllclNsb3RWaXNpdG9yOjppc01hcmtlZChjb25zdCB2
b2lkKiByYXdDZWxsKSBjb25zdAoreworICAgIEhlYXBDZWxsKiBjZWxsID0gYml0d2lzZV9jYXN0
PEhlYXBDZWxsKj4ocmF3Q2VsbCk7CisgICAgaWYgKGNlbGwtPmlzUHJlY2lzZUFsbG9jYXRpb24o
KSkKKyAgICAgICAgcmV0dXJuIGlzTWFya2VkKGNlbGwtPnByZWNpc2VBbGxvY2F0aW9uKCksIGNl
bGwpOworICAgIHJldHVybiBpc01hcmtlZChjZWxsLT5tYXJrZWRCbG9jaygpLCBjZWxsKTsKK30K
KworYm9vbCBWZXJpZmllclNsb3RWaXNpdG9yOjppc01hcmtlZChQcmVjaXNlQWxsb2NhdGlvbiYg
YWxsb2NhdGlvbiwgSGVhcENlbGwqKSBjb25zdAoreworICAgIHJldHVybiBtX3ByZWNpc2VBbGxv
Y2F0aW9uTWFwLmNvbnRhaW5zKCZhbGxvY2F0aW9uKTsKK30KKworYm9vbCBWZXJpZmllclNsb3RW
aXNpdG9yOjppc01hcmtlZChNYXJrZWRCbG9jayYgYmxvY2ssIEhlYXBDZWxsKiBjZWxsKSBjb25z
dAoreworICAgIGF1dG8gZW50cnkgPSBtX21hcmtlZEJsb2NrTWFwLmZpbmQoJmJsb2NrKTsKKyAg
ICBpZiAoZW50cnkgPT0gbV9tYXJrZWRCbG9ja01hcC5lbmQoKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgYXV0byYgZGF0YSA9IGVudHJ5LT52YWx1ZTsKKyAgICB1bnNpZ25lZCBhdG9t
TnVtYmVyID0gYmxvY2suYXRvbU51bWJlcihjZWxsKTsKKyAgICByZXR1cm4gZGF0YS0+aXNNYXJr
ZWQoYXRvbU51bWJlcik7Cit9CisKK3ZvaWQgVmVyaWZpZXJTbG90VmlzaXRvcjo6bWFya0F1eGls
aWFyeShjb25zdCB2b2lkKiBiYXNlKQoreworICAgIEhlYXBDZWxsKiBjZWxsID0gYml0d2lzZV9j
YXN0PEhlYXBDZWxsKj4oYmFzZSk7CisKKyAgICBBU1NFUlQoY2VsbC0+aGVhcCgpID09IGhlYXAo
KSk7CisgICAgdGVzdEFuZFNldE1hcmtlZChjZWxsKTsKK30KKworYm9vbCBWZXJpZmllclNsb3RW
aXNpdG9yOjptdXRhdG9ySXNTdG9wcGVkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gdHJ1ZTsKK30K
KworYm9vbCBWZXJpZmllclNsb3RWaXNpdG9yOjp0ZXN0QW5kU2V0TWFya2VkKGNvbnN0IHZvaWQq
IHJhd0NlbGwpCit7CisgICAgSGVhcENlbGwqIGNlbGwgPSBiaXR3aXNlX2Nhc3Q8SGVhcENlbGwq
PihyYXdDZWxsKTsKKyAgICBpZiAoY2VsbC0+aXNQcmVjaXNlQWxsb2NhdGlvbigpKQorICAgICAg
ICByZXR1cm4gdGVzdEFuZFNldE1hcmtlZChjZWxsLT5wcmVjaXNlQWxsb2NhdGlvbigpKTsKKyAg
ICByZXR1cm4gdGVzdEFuZFNldE1hcmtlZChjZWxsLT5tYXJrZWRCbG9jaygpLCBjZWxsKTsKK30K
KworYm9vbCBWZXJpZmllclNsb3RWaXNpdG9yOjp0ZXN0QW5kU2V0TWFya2VkKFByZWNpc2VBbGxv
Y2F0aW9uJiBhbGxvY2F0aW9uKQoreworICAgIHN0ZDo6dW5pcXVlX3B0cjxQcmVjaXNlQWxsb2Nh
dGlvbkRhdGE+JiBkYXRhID0gbV9wcmVjaXNlQWxsb2NhdGlvbk1hcC5hZGQoJmFsbG9jYXRpb24s
IG51bGxwdHIpLml0ZXJhdG9yLT52YWx1ZTsKKyAgICBpZiAoIWRhdGEpIHsKKyAgICAgICAgZGF0
YSA9IG1ha2VVbmlxdWU8UHJlY2lzZUFsbG9jYXRpb25EYXRhPigmYWxsb2NhdGlvbik7CisgICAg
ICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjp2ZXJib3NlVmVyaWZ5R0MoKSkpCisgICAgICAgICAg
ICBkYXRhLT5hZGRNYXJrZXJEYXRhKHsgcGFyZW50Q2VsbCgpLCBTdGFja1RyYWNlOjpjYXB0dXJl
U3RhY2tUcmFjZShtYXhNYXJraW5nU3RhY2tGcmFtZXNUb0NhcHR1cmUsIDIpIH0pOworICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCitib29sIFZlcmlm
aWVyU2xvdFZpc2l0b3I6OnRlc3RBbmRTZXRNYXJrZWQoTWFya2VkQmxvY2smIGJsb2NrLCBIZWFw
Q2VsbCogY2VsbCkKK3sKKyAgICBNYXJrZWRCbG9ja0RhdGEqIGRhdGEgPSBibG9jay52ZXJpZmll
ck1lbW88TWFya2VkQmxvY2tEYXRhKj4oKTsKKyAgICBpZiAoVU5MSUtFTFkoIWRhdGEpKSB7Cisg
ICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxNYXJrZWRCbG9ja0RhdGE+JiBlbnRyeURhdGEgPSBtX21h
cmtlZEJsb2NrTWFwLmFkZCgmYmxvY2ssIG51bGxwdHIpLml0ZXJhdG9yLT52YWx1ZTsKKyAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoIWVudHJ5RGF0YSk7CisgICAgICAgIGVudHJ5RGF0YSA9IG1ha2VV
bmlxdWU8TWFya2VkQmxvY2tEYXRhPigmYmxvY2spOworICAgICAgICBkYXRhID0gZW50cnlEYXRh
LmdldCgpOworICAgICAgICBibG9jay5zZXRWZXJpZmllck1lbW8oZGF0YSk7CisgICAgfQorCisg
ICAgdW5zaWduZWQgYXRvbU51bWJlciA9IGJsb2NrLmF0b21OdW1iZXIoY2VsbCk7CisgICAgYm9v
bCBhbHJlYWR5U2V0ID0gZGF0YS0+dGVzdEFuZFNldE1hcmtlZChhdG9tTnVtYmVyKTsKKyAgICBp
ZiAoIWFscmVhZHlTZXQgJiYgVU5MSUtFTFkoT3B0aW9uczo6dmVyYm9zZVZlcmlmeUdDKCkpKQor
ICAgICAgICBkYXRhLT5hZGRNYXJrZXJEYXRhKGF0b21OdW1iZXIsIHsgcGFyZW50Q2VsbCgpLCBT
dGFja1RyYWNlOjpjYXB0dXJlU3RhY2tUcmFjZShtYXhNYXJraW5nU3RhY2tGcmFtZXNUb0NhcHR1
cmUsIDIpIH0pOworICAgIHJldHVybiBhbHJlYWR5U2V0OworfQorCit2b2lkIFZlcmlmaWVyU2xv
dFZpc2l0b3I6OnNldE1hcmtlZEFuZEFwcGVuZFRvTWFya1N0YWNrKEpTQ2VsbCogY2VsbCkKK3sK
KyAgICBpZiAobV9zdXBwcmVzc1ZlcmlmaWVyKQorICAgICAgICByZXR1cm47CisgICAgaWYgKHRl
c3RBbmRTZXRNYXJrZWQoY2VsbCkpCisgICAgICAgIHJldHVybjsKKyAgICBhcHBlbmRUb01hcmtT
dGFjayhjZWxsKTsKK30KKwordm9pZCBWZXJpZmllclNsb3RWaXNpdG9yOjp2aXNpdEFzQ29uc3Ry
YWludChjb25zdCBKU0NlbGwqIGNlbGwpCit7CisgICAgdmlzaXRDaGlsZHJlbihjZWxsKTsKK30K
Kwordm9pZCBWZXJpZmllclNsb3RWaXNpdG9yOjp2aXNpdENoaWxkcmVuKGNvbnN0IEpTQ2VsbCog
Y2VsbCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChpc01hcmtlZChjZWxsKSk7CisgICAgc3dpdGNo
IChjZWxsLT50eXBlKCkpIHsKKyAgICBjYXNlIFN0cmluZ1R5cGU6CisgICAgICAgIEpTU3RyaW5n
Ojp2aXNpdENoaWxkcmVuKGNvbnN0X2Nhc3Q8SlNDZWxsKj4oY2VsbCksICp0aGlzKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgICAgIAorICAgIGNhc2UgRmluYWxPYmplY3RUeXBlOgorICAgICAgICBK
U0ZpbmFsT2JqZWN0Ojp2aXNpdENoaWxkcmVuKGNvbnN0X2Nhc3Q8SlNDZWxsKj4oY2VsbCksICp0
aGlzKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEFycmF5VHlwZToKKyAgICAgICAgSlNB
cnJheTo6dmlzaXRDaGlsZHJlbihjb25zdF9jYXN0PEpTQ2VsbCo+KGNlbGwpLCAqdGhpcyk7Cisg
ICAgICAgIGJyZWFrOworICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICAvLyBGSVhNRTog
VGhpcyBjb3VsZCBiZSBzbyBtdWNoIGJldHRlci4KKyAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MjQ2MgorICAgICAgICBjZWxsLT5tZXRob2RUYWJs
ZSh2bSgpKS0+dmlzaXRDaGlsZHJlbihjb25zdF9jYXN0PEpTQ2VsbCo+KGNlbGwpLCAqdGhpcyk7
CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9WZXJpZmllclNsb3RWaXNpdG9yLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVmVyaWZpZXJTbG90VmlzaXRvci5oCShu
b25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1ZlcmlmaWVyU2xvdFZp
c2l0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE3MiBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAi
QWJzdHJhY3RTbG90VmlzaXRvci5oIgorI2luY2x1ZGUgIkpTQ0pTVmFsdWUuaCIKKyNpbmNsdWRl
ICJNYXJrZWRCbG9jay5oIgorI2luY2x1ZGUgIlZpc2l0UmFjZUtleS5oIgorI2luY2x1ZGUgIldl
YWsuaCIKKyNpbmNsdWRlIDxtZW1vcnk+CisjaW5jbHVkZSA8d3RmL0JpdG1hcC5oPgorI2luY2x1
ZGUgPHd0Zi9EZXF1ZS5oPgorI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CisjaW5jbHVkZSA8
d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1No
YXJlZFRhc2suaD4KKworbmFtZXNwYWNlIFdURiB7CisKK2NsYXNzIFN0YWNrVHJhY2U7CisKK30g
Ly8gbmFtZXNwYWNlIFdURgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgQ29uc2VydmF0aXZl
Um9vdHM7CitjbGFzcyBIZWFwOworY2xhc3MgSGVhcENlbGw7CitjbGFzcyBQcmVjaXNlQWxsb2Nh
dGlvbjsKKwordXNpbmcgV1RGOjpTdGFja1RyYWNlOworCitjbGFzcyBWZXJpZmllclNsb3RWaXNp
dG9yIDogcHVibGljIEFic3RyYWN0U2xvdFZpc2l0b3IgeworICAgIFdURl9NQUtFX05PTkNPUFlB
QkxFKFZlcmlmaWVyU2xvdFZpc2l0b3IpOworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwor
ICAgIHVzaW5nIEJhc2UgPSBBYnN0cmFjdFNsb3RWaXNpdG9yOworcHVibGljOgorICAgIHN0cnVj
dCBNYXJrZXJEYXRhIHsKKyAgICAgICAgTWFya2VyRGF0YSgpID0gZGVmYXVsdDsKKyAgICAgICAg
TWFya2VyRGF0YShNYXJrZXJEYXRhJiYpID0gZGVmYXVsdDsKKyAgICAgICAgTWFya2VyRGF0YShI
ZWFwQ2VsbCosIHN0ZDo6dW5pcXVlX3B0cjxTdGFja1RyYWNlPiYmKTsKKyAgICAgICAgTWFya2Vy
RGF0YSYgb3BlcmF0b3I9KE1hcmtlckRhdGEmJikgPSBkZWZhdWx0OworCisgICAgICAgIEhlYXBD
ZWxsKiBwYXJlbnQgeyBudWxscHRyIH07CisgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxTdGFja1Ry
YWNlPiBzdGFjazsKKyAgICB9OworCisgICAgVmVyaWZpZXJTbG90VmlzaXRvcihIZWFwJik7Cisg
ICAgflZlcmlmaWVyU2xvdFZpc2l0b3IoKTsKKworICAgIHZvaWQgYXBwZW5kKGNvbnN0IENvbnNl
cnZhdGl2ZVJvb3RzJikgZmluYWw7CisgICAgdm9pZCBhcHBlbmRVbmJhcnJpZXJlZChKU0NlbGwq
KSBmaW5hbDsKKyAgICB2b2lkIGFwcGVuZEhpZGRlblVuYmFycmllcmVkKEpTQ2VsbCopIGZpbmFs
OworCisgICAgYm9vbCBpc0ZpcnN0VmlzaXQoKSBjb25zdCBmaW5hbDsKKyAgICBib29sIGlzTWFy
a2VkKGNvbnN0IHZvaWQqKSBjb25zdCBmaW5hbDsKKyAgICBib29sIGlzTWFya2VkKE1hcmtlZEJs
b2NrJiwgSGVhcENlbGwqKSBjb25zdCBmaW5hbDsKKyAgICBib29sIGlzTWFya2VkKFByZWNpc2VB
bGxvY2F0aW9uJiwgSGVhcENlbGwqKSBjb25zdCBmaW5hbDsKKworICAgIHZvaWQgbWFya0F1eGls
aWFyeShjb25zdCB2b2lkKikgZmluYWw7CisKKyAgICB2b2lkIHJlcG9ydEV4dHJhTWVtb3J5Vmlz
aXRlZChzaXplX3QpIGZpbmFsIHsgfQorI2lmIEVOQUJMRShSRVNPVVJDRV9VU0FHRSkKKyAgICB2
b2lkIHJlcG9ydEV4dGVybmFsTWVtb3J5VmlzaXRlZChzaXplX3QpIGZpbmFsIHsgfQorI2VuZGlm
CisKKyAgICBib29sIG11dGF0b3JJc1N0b3BwZWQoKSBjb25zdCBmaW5hbDsKKworICAgIHZvaWQg
ZGlkUmFjZShjb25zdCBWaXNpdFJhY2VLZXkmKSBmaW5hbCB7IH0KKyAgICB2b2lkIGR1bXAoUHJp
bnRTdHJlYW0mKSBjb25zdCBmaW5hbCB7IH0KKworICAgIHZvaWQgdmlzaXRBc0NvbnN0cmFpbnQo
Y29uc3QgSlNDZWxsKikgZmluYWw7CisKKyAgICB2b2lkIGRyYWluKCk7CisKKyAgICB2b2lkIGFk
ZFBhcmFsbGVsQ29uc3RyYWludFRhc2soUmVmUHRyPFNoYXJlZFRhc2s8dm9pZChBYnN0cmFjdFNs
b3RWaXNpdG9yJik+PikgZmluYWw7CisgICAgTk9fUkVUVVJOX0RVRV9UT19DUkFTSCB2b2lkIGFk
ZFBhcmFsbGVsQ29uc3RyYWludFRhc2soUmVmUHRyPFNoYXJlZFRhc2s8dm9pZChTbG90VmlzaXRv
ciYpPj4pIGZpbmFsOworICAgIHZvaWQgZXhlY3V0ZUNvbnN0cmFpbnRUYXNrcygpOworCisgICAg
dGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBmb3JFYWNoTGl2ZUNlbGwoY29uc3QgRnVu
Y3RvciYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaExpdmVQ
cmVjaXNlQWxsb2NhdGlvbihjb25zdCBGdW5jdG9yJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
RnVuY3Rvcj4gdm9pZCBmb3JFYWNoTGl2ZU1hcmtlZEJsb2NrQ2VsbChjb25zdCBGdW5jdG9yJik7
CisKKyAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGR1bXBNYXJrZXJEYXRhKEhlYXBDZWxsKik7
CisKK3ByaXZhdGU6CisgICAgY2xhc3MgTWFya2VkQmxvY2tEYXRhIHsKKyAgICAgICAgV1RGX01B
S0VfRkFTVF9BTExPQ0FURUQ7CisgICAgICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKE1hcmtlZEJs
b2NrRGF0YSk7CisgICAgcHVibGljOgorICAgICAgICB1c2luZyBBdG9tc0JpdG1hcCA9IEJpdG1h
cDxNYXJrZWRCbG9jazo6YXRvbXNQZXJCbG9jaz47CisKKyAgICAgICAgTWFya2VkQmxvY2tEYXRh
KE1hcmtlZEJsb2NrKik7CisKKyAgICAgICAgTWFya2VkQmxvY2sqIGJsb2NrKCkgY29uc3QgeyBy
ZXR1cm4gbV9ibG9jazsgfQorICAgICAgICBjb25zdCBBdG9tc0JpdG1hcCYgYXRvbXMoKSBjb25z
dCB7IHJldHVybiBtX2F0b21zOyB9CisKKyAgICAgICAgYm9vbCBpc01hcmtlZCh1bnNpZ25lZCBh
dG9tTnVtYmVyKSB7IHJldHVybiBtX2F0b21zLmdldChhdG9tTnVtYmVyKTsgfQorICAgICAgICBi
b29sIHRlc3RBbmRTZXRNYXJrZWQodW5zaWduZWQgYXRvbU51bWJlcikgeyByZXR1cm4gbV9hdG9t
cy50ZXN0QW5kU2V0KGF0b21OdW1iZXIpOyB9CisKKyAgICAgICAgdm9pZCBhZGRNYXJrZXJEYXRh
KHVuc2lnbmVkIGF0b21OdW1iZXIsIE1hcmtlckRhdGEmJik7CisgICAgICAgIGNvbnN0IE1hcmtl
ckRhdGEqIG1hcmtlckRhdGEodW5zaWduZWQgYXRvbU51bWJlcikgY29uc3Q7CisKKyAgICBwcml2
YXRlOgorICAgICAgICBNYXJrZWRCbG9jayogbV9ibG9jayB7IG51bGxwdHIgfTsKKyAgICAgICAg
QXRvbXNCaXRtYXAgbV9hdG9tczsKKyAgICAgICAgVmVjdG9yPE1hcmtlckRhdGE+IG1fbWFya2Vy
czsKKyAgICB9OworCisgICAgY2xhc3MgUHJlY2lzZUFsbG9jYXRpb25EYXRhIHsKKyAgICAgICAg
V1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CisgICAgICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFBy
ZWNpc2VBbGxvY2F0aW9uRGF0YSk7CisgICAgcHVibGljOgorICAgICAgICBQcmVjaXNlQWxsb2Nh
dGlvbkRhdGEoUHJlY2lzZUFsbG9jYXRpb24qKTsKKyAgICAgICAgUHJlY2lzZUFsbG9jYXRpb24q
IGFsbG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBtX2FsbG9jYXRpb247IH0KKworICAgICAgICB2
b2lkIGFkZE1hcmtlckRhdGEoTWFya2VyRGF0YSYmKTsKKyAgICAgICAgY29uc3QgTWFya2VyRGF0
YSogbWFya2VyRGF0YSgpIGNvbnN0OworCisgICAgcHJpdmF0ZToKKyAgICAgICAgUHJlY2lzZUFs
bG9jYXRpb24qIG1fYWxsb2NhdGlvbiB7IG51bGxwdHIgfTsKKyAgICAgICAgTWFya2VyRGF0YSBt
X21hcmtlcjsKKyAgICB9OworCisgICAgdXNpbmcgTWFya2VkQmxvY2tNYXAgPSBIYXNoTWFwPE1h
cmtlZEJsb2NrKiwgc3RkOjp1bmlxdWVfcHRyPE1hcmtlZEJsb2NrRGF0YT4+OworICAgIHVzaW5n
IFByZWNpc2VBbGxvY2F0aW9uTWFwID0gSGFzaE1hcDxQcmVjaXNlQWxsb2NhdGlvbiosIHN0ZDo6
dW5pcXVlX3B0cjxQcmVjaXNlQWxsb2NhdGlvbkRhdGE+PjsKKworICAgIHZvaWQgYXBwZW5kVG9N
YXJrU3RhY2soSlNDZWxsKik7CisgICAgdm9pZCBhcHBlbmRTbG93KEpTQ2VsbCogY2VsbCkgeyBz
ZXRNYXJrZWRBbmRBcHBlbmRUb01hcmtTdGFjayhjZWxsKTsgfQorCisgICAgYm9vbCB0ZXN0QW5k
U2V0TWFya2VkKGNvbnN0IHZvaWQqIHJhd0NlbGwpOworICAgIGJvb2wgdGVzdEFuZFNldE1hcmtl
ZChQcmVjaXNlQWxsb2NhdGlvbiYpOworICAgIGJvb2wgdGVzdEFuZFNldE1hcmtlZChNYXJrZWRC
bG9jayYsIEhlYXBDZWxsKik7CisKKyAgICB2b2lkIHNldE1hcmtlZEFuZEFwcGVuZFRvTWFya1N0
YWNrKEpTQ2VsbCopOworCisgICAgdm9pZCB2aXNpdENoaWxkcmVuKGNvbnN0IEpTQ2VsbCopOwor
CisgICAgdm9pZCBkdW1wTWFya2VyRGF0YShQcmVjaXNlQWxsb2NhdGlvbiYsIEhlYXBDZWxsKik7
CisgICAgdm9pZCBkdW1wTWFya2VyRGF0YShNYXJrZWRCbG9jayYsIEhlYXBDZWxsKik7CisgICAg
dm9pZCBkdW1wTWFya2VyRGF0YShIZWFwQ2VsbCosIGNvbnN0IE1hcmtlckRhdGEqKTsKKworICAg
IFByZWNpc2VBbGxvY2F0aW9uTWFwIG1fcHJlY2lzZUFsbG9jYXRpb25NYXA7CisgICAgTWFya2Vk
QmxvY2tNYXAgbV9tYXJrZWRCbG9ja01hcDsKKyAgICBDb25jdXJyZW50UHRySGFzaFNldCBtX29w
YXF1ZVJvb3RTdG9yYWdlOworICAgIERlcXVlPFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoQWJzdHJh
Y3RTbG90VmlzaXRvciYpPj4sIDMyPiBtX2NvbnN0cmFpbnRUYXNrczsKK307CisKK30gLy8gbmFt
ZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVmVyaWZpZXJTbG90
VmlzaXRvcklubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9WZXJpZmllclNsb3RWaXNpdG9ySW5saW5lcy5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL1ZlcmlmaWVyU2xvdFZpc2l0b3JJbmxpbmVzLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQWJzdHJhY3RTbG90VmlzaXRv
cklubGluZXMuaCIKKyNpbmNsdWRlICJWZXJpZmllclNsb3RWaXNpdG9yLmgiCisKK25hbWVzcGFj
ZSBKU0MgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgordm9pZCBWZXJpZmllclNsb3RW
aXNpdG9yOjpmb3JFYWNoTGl2ZUNlbGwoY29uc3QgRnVuY3RvciYgZnVuY3RvcikKK3sKKyAgICBm
b3JFYWNoTGl2ZVByZWNpc2VBbGxvY2F0aW9uKGZ1bmN0b3IpOworICAgIGZvckVhY2hMaXZlTWFy
a2VkQmxvY2tDZWxsKGZ1bmN0b3IpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgor
dm9pZCBWZXJpZmllclNsb3RWaXNpdG9yOjpmb3JFYWNoTGl2ZVByZWNpc2VBbGxvY2F0aW9uKGNv
bnN0IEZ1bmN0b3ImIGZ1bmMpCit7CisgICAgZm9yIChhdXRvJiBlbnRyeSA6IG1fcHJlY2lzZUFs
bG9jYXRpb25NYXApIHsKKyAgICAgICAgUHJlY2lzZUFsbG9jYXRpb24qIGFsbG9jYXRpb24gPSBl
bnRyeS52YWx1ZS0+YWxsb2NhdGlvbigpOworICAgICAgICBmdW5jKGFsbG9jYXRpb24tPmNlbGwo
KSk7CisgICAgfQorfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgordm9pZCBWZXJpZmll
clNsb3RWaXNpdG9yOjpmb3JFYWNoTGl2ZU1hcmtlZEJsb2NrQ2VsbChjb25zdCBGdW5jdG9yJiBm
dW5jKQoreworICAgIGZvciAoYXV0byYgZW50cnkgOiBtX21hcmtlZEJsb2NrTWFwKSB7CisgICAg
ICAgIGF1dG8mIGRhdGEgPSBlbnRyeS52YWx1ZTsKKyAgICAgICAgTWFya2VkQmxvY2sqIGJsb2Nr
ID0gZGF0YS0+YmxvY2soKTsKKyAgICAgICAgY29uc3QgTWFya2VkQmxvY2tEYXRhOjpBdG9tc0Jp
dG1hcCYgYXRvbXMgPSAgZGF0YS0+YXRvbXMoKTsKKyAgICAgICAgZm9yIChhdXRvIGF0b21OdW1i
ZXIgOiBhdG9tcykKKyAgICAgICAgICAgIGZ1bmMoYml0d2lzZV9jYXN0PEhlYXBDZWxsKj4oYmxv
Y2stPmhhbmRsZSgpLmF0b21BdChhdG9tTnVtYmVyKSkpOworICAgIH0KK30KKworfSAvLyBuYW1l
c3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9WaXNpdENvdW50ZXIu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9WaXNpdENvdW50ZXIu
aAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVmlzaXRD
b3VudGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjUsNyArMjUsNyBAQAogCiAjcHJhZ21hIG9uY2UKIAot
I2luY2x1ZGUgIlNsb3RWaXNpdG9yLmgiCisjaW5jbHVkZSAiQWJzdHJhY3RTbG90VmlzaXRvci5o
IgogCiBuYW1lc3BhY2UgSlNDIHsKIApAQCAtMzMsMTMgKzMzLDEzIEBAIGNsYXNzIFZpc2l0Q291
bnRlciB7CiBwdWJsaWM6CiAgICAgVmlzaXRDb3VudGVyKCkgeyB9CiAgICAgCi0gICAgVmlzaXRD
b3VudGVyKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorICAgIFZpc2l0Q291bnRlcihBYnN0cmFjdFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQogICAgICAgICA6IG1fdmlzaXRvcigmdmlzaXRvcikKICAgICAg
ICAgLCBtX2luaXRpYWxWaXNpdENvdW50KHZpc2l0b3IudmlzaXRDb3VudCgpKQogICAgIHsKICAg
ICB9CiAgICAgCi0gICAgU2xvdFZpc2l0b3ImIHZpc2l0b3IoKSBjb25zdCB7IHJldHVybiAqbV92
aXNpdG9yOyB9CisgICAgQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcigpIGNvbnN0IHsgcmV0
dXJuICptX3Zpc2l0b3I7IH0KICAgICAKICAgICBzaXplX3QgdmlzaXRDb3VudCgpIGNvbnN0CiAg
ICAgewpAQCAtNDcsNyArNDcsNyBAQCBwdWJsaWM6CiAgICAgfQogICAgIAogcHJpdmF0ZToKLSAg
ICBTbG90VmlzaXRvciogbV92aXNpdG9yIHsgbnVsbHB0ciB9OworICAgIEFic3RyYWN0U2xvdFZp
c2l0b3IqIG1fdmlzaXRvciB7IG51bGxwdHIgfTsKICAgICBzaXplX3QgbV9pbml0aWFsVmlzaXRD
b3VudCB7IDAgfTsKIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtC
bG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha0Js
b2NrLmNwcAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
V2Vha0Jsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTItMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTItMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTk4LDEyICs5OCwxMSBAQCB2b2lkIFdl
YWtCbG9jazo6c3dlZXAoKQogICAgIEFTU0VSVCghbV9zd2VlcFJlc3VsdC5pc051bGwoKSk7CiB9
CiAKLXRlbXBsYXRlPHR5cGVuYW1lIENvbnRhaW5lclR5cGU+Ci12b2lkIFdlYWtCbG9jazo6c3Bl
Y2lhbGl6ZWRWaXNpdChDb250YWluZXJUeXBlJiBjb250YWluZXIsIFNsb3RWaXNpdG9yJiB2aXNp
dG9yKQordGVtcGxhdGU8dHlwZW5hbWUgQ29udGFpbmVyVHlwZSwgdHlwZW5hbWUgVmlzaXRvcj4K
K3ZvaWQgV2Vha0Jsb2NrOjpzcGVjaWFsaXplZFZpc2l0KENvbnRhaW5lclR5cGUmIGNvbnRhaW5l
ciwgVmlzaXRvciYgdmlzaXRvcikKIHsKLSAgICBIZWFwVmVyc2lvbiBtYXJraW5nVmVyc2lvbiA9
IHZpc2l0b3IubWFya2luZ1ZlcnNpb24oKTsKLQogICAgIHNpemVfdCBjb3VudCA9IHdlYWtJbXBs
Q291bnQoKTsKKyAgICBIZWFwQW5hbHl6ZXIqIGhlYXBBbmFseXplciA9IHZpc2l0b3Iudm0oKS5h
Y3RpdmVIZWFwQW5hbHl6ZXIoKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyAr
K2kpIHsKICAgICAgICAgV2Vha0ltcGwqIHdlYWtJbXBsID0gJndlYWtJbXBscygpW2ldOwogICAg
ICAgICBpZiAod2Vha0ltcGwtPnN0YXRlKCkgIT0gV2Vha0ltcGw6OkxpdmUpCkBAIC0xMTQsMTIg
KzExMywxMiBAQCB2b2lkIFdlYWtCbG9jazo6c3BlY2lhbGl6ZWRWaXNpdChDb250YWluCiAgICAg
ICAgICAgICBjb250aW51ZTsKIAogICAgICAgICBKU1ZhbHVlIGpzVmFsdWUgPSB3ZWFrSW1wbC0+
anNWYWx1ZSgpOwotICAgICAgICBpZiAoY29udGFpbmVyLmlzTWFya2VkKG1hcmtpbmdWZXJzaW9u
LCBqc1ZhbHVlLmFzQ2VsbCgpKSkKKyAgICAgICAgaWYgKHZpc2l0b3IuaXNNYXJrZWQoY29udGFp
bmVyLCBqc1ZhbHVlLmFzQ2VsbCgpKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAK
ICAgICAgICAgY29uc3QgY2hhciogcmVhc29uID0gIiI7CiAgICAgICAgIGNvbnN0IGNoYXIqKiBy
ZWFzb25QdHIgPSBudWxscHRyOwotICAgICAgICBpZiAoVU5MSUtFTFkodmlzaXRvci5pc0FuYWx5
emluZ0hlYXAoKSkpCisgICAgICAgIGlmIChVTkxJS0VMWShoZWFwQW5hbHl6ZXIpKQogICAgICAg
ICAgICAgcmVhc29uUHRyID0gJnJlYXNvbjsKIAogICAgICAgICBpZiAoIXdlYWtIYW5kbGVPd25l
ci0+aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSGFuZGxlPFVua25vd24+Ojp3cmFwU2xvdCgm
Y29uc3RfY2FzdDxKU1ZhbHVlJj4oanNWYWx1ZSkpLCB3ZWFrSW1wbC0+Y29udGV4dCgpLCB2aXNp
dG9yLCByZWFzb25QdHIpKQpAQCAtMTI3LDE0ICsxMjYsMTUgQEAgdm9pZCBXZWFrQmxvY2s6OnNw
ZWNpYWxpemVkVmlzaXQoQ29udGFpbgogCiAgICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVy
ZWQoanNWYWx1ZSk7CiAKLSAgICAgICAgaWYgKFVOTElLRUxZKHZpc2l0b3IuaXNBbmFseXppbmdI
ZWFwKCkpKSB7CisgICAgICAgIGlmIChVTkxJS0VMWShoZWFwQW5hbHl6ZXIpKSB7CiAgICAgICAg
ICAgICBpZiAoanNWYWx1ZS5pc0NlbGwoKSkKLSAgICAgICAgICAgICAgICB2aXNpdG9yLmhlYXBB
bmFseXplcigpLT5zZXRPcGFxdWVSb290UmVhY2hhYmlsaXR5UmVhc29uRm9yQ2VsbChqc1ZhbHVl
LmFzQ2VsbCgpLCAqcmVhc29uUHRyKTsKKyAgICAgICAgICAgICAgICBoZWFwQW5hbHl6ZXItPnNl
dE9wYXF1ZVJvb3RSZWFjaGFiaWxpdHlSZWFzb25Gb3JDZWxsKGpzVmFsdWUuYXNDZWxsKCksICpy
ZWFzb25QdHIpOwogICAgICAgICB9CiAgICAgfQogfQogCi12b2lkIFdlYWtCbG9jazo6dmlzaXQo
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgorQUxXQVlT
X0lOTElORSB2b2lkIFdlYWtCbG9jazo6dmlzaXRJbXBsKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAg
ICAgLy8gSWYgYSBibG9jayBpcyBjb21wbGV0ZWx5IGVtcHR5LCBhIHZpc2l0IHdvbid0IGhhdmUg
YW55IGVmZmVjdC4KICAgICBpZiAoaXNFbXB0eSgpKQpAQCAtMTQ5LDYgKzE0OSw5IEBAIHZvaWQg
V2Vha0Jsb2NrOjp2aXNpdChTbG90VmlzaXRvciYgdmlzaXQKICAgICAgICAgc3BlY2lhbGl6ZWRW
aXNpdChtX2NvbnRhaW5lci5tYXJrZWRCbG9jaygpLCB2aXNpdG9yKTsKIH0KIAordm9pZCBXZWFr
QmxvY2s6OnZpc2l0KEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsgdmlzaXRJbXBsKHZp
c2l0b3IpOyB9Cit2b2lkIFdlYWtCbG9jazo6dmlzaXQoU2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsg
dmlzaXRJbXBsKHZpc2l0b3IpOyB9CisKIHZvaWQgV2Vha0Jsb2NrOjpyZWFwKCkKIHsKICAgICAv
LyBJZiBhIGJsb2NrIGlzIGNvbXBsZXRlbHkgZW1wdHksIGEgcmVhcGluZyB3b24ndCBoYXZlIGFu
eSBlZmZlY3QuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrQmxvY2suaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrQmxvY2suaAkocmV2
aXNpb24gMjczMTE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha0Jsb2NrLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEy
LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEyLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC0zMiw2ICszMiw3IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCitj
bGFzcyBBYnN0cmFjdFNsb3RWaXNpdG9yOwogY2xhc3MgSGVhcDsKIGNsYXNzIFNsb3RWaXNpdG9y
OwogCkBAIC02NSw3ICs2Niw4IEBAIHB1YmxpYzoKICAgICB2b2lkIHN3ZWVwKCk7CiAgICAgU3dl
ZXBSZXN1bHQgdGFrZVN3ZWVwUmVzdWx0KCk7CiAKLSAgICB2b2lkIHZpc2l0KFNsb3RWaXNpdG9y
Jik7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCB2aXNpdChBYnN0cmFjdFNsb3RWaXNpdG9y
Jik7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCB2aXNpdChTbG90VmlzaXRvciYpOwogCiAg
ICAgdm9pZCByZWFwKCk7CiAKQEAgLTczLDEwICs3NSwxMiBAQCBwdWJsaWM6CiAgICAgdm9pZCBk
aXNjb25uZWN0Q29udGFpbmVyKCkgeyBtX2NvbnRhaW5lciA9IENlbGxDb250YWluZXIoKTsgfQog
CiBwcml2YXRlOgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgdmlzaXRJbXBs
KFZpc2l0b3ImKTsKKwogICAgIHN0YXRpYyBGcmVlQ2VsbCogYXNGcmVlQ2VsbChXZWFrSW1wbCop
OwogICAgIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIENvbnRhaW5lclR5cGU+Ci0gICAgdm9pZCBz
cGVjaWFsaXplZFZpc2l0KENvbnRhaW5lclR5cGUmLCBTbG90VmlzaXRvciYpOworICAgIHRlbXBs
YXRlPHR5cGVuYW1lIENvbnRhaW5lclR5cGUsIHR5cGVuYW1lIFZpc2l0b3I+CisgICAgdm9pZCBz
cGVjaWFsaXplZFZpc2l0KENvbnRhaW5lclR5cGUmLCBWaXNpdG9yJik7CiAKICAgICBleHBsaWNp
dCBXZWFrQmxvY2soQ2VsbENvbnRhaW5lcik7CiAgICAgdm9pZCBmaW5hbGl6ZShXZWFrSW1wbCop
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha0hhbmRsZU93bmVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrSGFuZGxlT3duZXIu
Y3BwCShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFr
SGFuZGxlT3duZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTItMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM1LDcgKzM1LDcgQEAgV2Vha0hhbmRsZU93
bmVyOjp+V2Vha0hhbmRsZU93bmVyKCkKIHsKIH0KIAotYm9vbCBXZWFrSGFuZGxlT3duZXI6Omlz
UmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEhhbmRsZTxVbmtub3duPiwgdm9pZCosIFNsb3RWaXNp
dG9yJiwgY29uc3QgY2hhcioqKQorYm9vbCBXZWFrSGFuZGxlT3duZXI6OmlzUmVhY2hhYmxlRnJv
bU9wYXF1ZVJvb3RzKEhhbmRsZTxVbmtub3duPiwgdm9pZCosIEFic3RyYWN0U2xvdFZpc2l0b3Im
LCBjb25zdCBjaGFyKiopCiB7CiAgICAgcmV0dXJuIGZhbHNlOwogfQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvV2Vha0hhbmRsZU93bmVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha0hhbmRsZU93bmVyLmgJKHJldmlzaW9uIDI3MzExOSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtIYW5kbGVPd25lci5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTI5LDEzICsyOSwxMyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotY2xhc3MgU2xvdFZp
c2l0b3I7CitjbGFzcyBBYnN0cmFjdFNsb3RWaXNpdG9yOwogCiBjbGFzcyBKU19FWFBPUlRfUFJJ
VkFURSBXZWFrSGFuZGxlT3duZXIgewogcHVibGljOgogICAgIHZpcnR1YWwgfldlYWtIYW5kbGVP
d25lcigpOwogICAgIC8vIHJlYXNvbiB3aWxsIG9ubHkgYmUgbm9uLW51bGwgd2hlbiBnZW5lcmF0
aW5nIGEgZGVidWcgR0MgaGVhcCBzbmFwc2hvdC4KLSAgICB2aXJ0dWFsIGJvb2wgaXNSZWFjaGFi
bGVGcm9tT3BhcXVlUm9vdHMoSGFuZGxlPFVua25vd24+LCB2b2lkKiBjb250ZXh0LCBTbG90Vmlz
aXRvciYsIGNoYXIgY29uc3QqKiByZWFzb24gPSBudWxscHRyKTsKKyAgICB2aXJ0dWFsIGJvb2wg
aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSGFuZGxlPFVua25vd24+LCB2b2lkKiBjb250ZXh0
LCBBYnN0cmFjdFNsb3RWaXNpdG9yJiwgY2hhciBjb25zdCoqIHJlYXNvbiA9IG51bGxwdHIpOwog
ICAgIHZpcnR1YWwgdm9pZCBmaW5hbGl6ZShIYW5kbGU8VW5rbm93bj4sIHZvaWQqIGNvbnRleHQp
OwogfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha1NldC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha1NldC5jcHAJKHJldmlz
aW9uIDI3MzExOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtTZXQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMjMsNCArMTIzLDcgQEAgdm9pZCBXZWFrU2V0OjpyZW1vdmVBbGxv
Y2F0b3IoV2Vha0Jsb2NrKgogICAgIFdlYWtCbG9jazo6ZGVzdHJveSgqaGVhcCgpLCBibG9jayk7
CiB9CiAKK3RlbXBsYXRlIHZvaWQgV2Vha1NldDo6dmlzaXQoQWJzdHJhY3RTbG90VmlzaXRvciYp
OwordGVtcGxhdGUgdm9pZCBXZWFrU2V0Ojp2aXNpdChTbG90VmlzaXRvciYpOworCiB9IC8vIG5h
bWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtTZXQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrU2V0LmgJKHJldmlz
aW9uIDI3MzExOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtTZXQuaAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAx
OSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIt
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTUxLDcgKzUxLDcgQEAgcHVibGljOgogICAgIGJvb2wgaXNFbXB0eSgp
IGNvbnN0OwogICAgIGJvb2wgaXNUcml2aWFsbHlEZXN0cnVjdGlibGUoKSBjb25zdDsKIAotICAg
IHZvaWQgdmlzaXQoU2xvdFZpc2l0b3ImKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
PiB2b2lkIHZpc2l0KFZpc2l0b3ImKTsKIAogICAgIHZvaWQgcmVhcCgpOwogICAgIHZvaWQgc3dl
ZXAoKTsKQEAgLTExNCw3ICsxMTQsOCBAQCBpbmxpbmUgdm9pZCBXZWFrU2V0OjpsYXN0Q2hhbmNl
VG9GaW5hbGl6CiAgICAgICAgIGJsb2NrLT5sYXN0Q2hhbmNlVG9GaW5hbGl6ZSgpOwogfQogCi1p
bmxpbmUgdm9pZCBXZWFrU2V0Ojp2aXNpdChTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRl
PHR5cGVuYW1lIFZpc2l0b3I+CitpbmxpbmUgdm9pZCBXZWFrU2V0Ojp2aXNpdChWaXNpdG9yJiB2
aXNpdG9yKQogewogICAgIGZvciAoV2Vha0Jsb2NrKiBibG9jayA9IG1fYmxvY2tzLmhlYWQoKTsg
YmxvY2s7IGJsb2NrID0gYmxvY2stPm5leHQoKSkKICAgICAgICAgYmxvY2stPnZpc2l0KHZpc2l0
b3IpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1NoYWRvd0NoaWNr
ZW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9T
aGFkb3dDaGlja2VuLmNwcAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2ludGVycHJldGVyL1NoYWRvd0NoaWNrZW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE5IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDQw
LDcgKzQ0MCw5IEBAIHZvaWQgU2hhZG93Q2hpY2tlbjo6dXBkYXRlKFZNJiB2bSwgQ2FsbEYKICAg
ICAgICAgZGF0YUxvZygiICAgIEFmdGVyIGNsZWFuLXVwOiAiLCAqdGhpcywgIlxuIik7CiB9CiAK
LXZvaWQgU2hhZG93Q2hpY2tlbjo6dmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikK
Ky8vIFdlIGRvbid0IG5lZWQgYSBTbG90VmlzaXRvciB2ZXJzaW9uIG9mIHRoaXMgYmVjYXVzZSBT
aGFkb3dDaGlja2VuIGlzIG9ubHkgdXNlZCBieSB0aGUKKy8vIERlYnVnZ2VyLCBhbmQgaXMgdGhl
cmVmb3JlIG5vdCBvbiB0aGUgY3JpdGljYWwgcGF0aCBmb3IgcGVyZm9ybWFuY2UuCit2b2lkIFNo
YWRvd0NoaWNrZW46OnZpc2l0Q2hpbGRyZW4oQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikK
IHsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2xvZ0N1cnNvciAtIG1fbG9nOyBpLS07KSB7CiAg
ICAgICAgIEpTT2JqZWN0KiBjYWxsZWUgPSBtX2xvZ1tpXS5jYWxsZWU7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU2hhZG93Q2hpY2tlbi5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TaGFkb3dDaGlja2VuLmgJKHJldmlz
aW9uIDI3MzExOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TaGFkb3dD
aGlja2VuLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzUsMTMgKzM1LDEzIEBACiAKIG5hbWVzcGFjZSBKU0Mg
ewogCitjbGFzcyBBYnN0cmFjdFNsb3RWaXNpdG9yOwogY2xhc3MgQ2FsbEZyYW1lOwogY2xhc3Mg
Q29kZUJsb2NrOwogY2xhc3MgSlNBcnJheTsKIGNsYXNzIEpTT2JqZWN0OwogY2xhc3MgSlNTY29w
ZTsKIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKLWNsYXNzIFNsb3RWaXNpdG9yOwogY2xh
c3MgVk07CiAKIC8vIFNoYWRvd0NoaWNrZW4gaXMgYSBsb2cgdGhhdCBjYW4gYmUgdXNlZCB0byBw
cm9kdWNlIGEgc2hhZG93IHN0YWNrIG9mIENISUNLRU4tc3R5bGUgc3RhY2sgZnJhbWVzLgpAQCAt
MTk2LDcgKzE5Niw3IEBAIHB1YmxpYzoKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgog
ICAgIHZvaWQgaXRlcmF0ZShWTSYsIENhbGxGcmFtZSosIGNvbnN0IEZ1bmN0b3ImKTsKICAgICAK
LSAgICB2b2lkIHZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKKyAgICB2b2lkIHZpc2l0Q2hp
bGRyZW4oQWJzdHJhY3RTbG90VmlzaXRvciYpOwogICAgIHZvaWQgcmVzZXQoKTsKICAgICAKICAg
ICAvLyBKSVQgc3VwcG9ydC4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvR0NBd2Fy
ZUpJVFN0dWJSb3V0aW5lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0dDQXdhcmVKSVRTdHViUm91dGluZS5jcHAJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvR0NBd2FyZUpJVFN0dWJSb3V0aW5lLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxOCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTczLDEwICs3Myw2IEBAIHZvaWQgR0NBd2FyZUpJVFN0dWJSb3V0aW5lOjpkZWxl
dGVGcm9tR0MKICAgICBkZWxldGUgdGhpczsKIH0KIAotdm9pZCBHQ0F3YXJlSklUU3R1YlJvdXRp
bmU6Om1hcmtSZXF1aXJlZE9iamVjdHNJbnRlcm5hbChTbG90VmlzaXRvciYpCi17Ci19Ci0KIE1h
cmtpbmdHQ0F3YXJlSklUU3R1YlJvdXRpbmU6Ok1hcmtpbmdHQ0F3YXJlSklUU3R1YlJvdXRpbmUo
CiAgICAgY29uc3QgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiYg
Y29kZSwgVk0mIHZtLCBjb25zdCBKU0NlbGwqIG93bmVyLAogICAgIGNvbnN0IFZlY3RvcjxKU0Nl
bGwqPiYgY2VsbHMsIEJhZzxDYWxsTGlua0luZm8+JiYgY2FsbExpbmtJbmZvcykKQEAgLTkyLDEy
ICs4OCwyMSBAQCBNYXJraW5nR0NBd2FyZUpJVFN0dWJSb3V0aW5lOjp+TWFya2luZ0dDCiB7CiB9
CiAKLXZvaWQgTWFya2luZ0dDQXdhcmVKSVRTdHViUm91dGluZTo6bWFya1JlcXVpcmVkT2JqZWN0
c0ludGVybmFsKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRv
cj4KK0FMV0FZU19JTkxJTkUgdm9pZCBNYXJraW5nR0NBd2FyZUpJVFN0dWJSb3V0aW5lOjptYXJr
UmVxdWlyZWRPYmplY3RzSW50ZXJuYWxJbXBsKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgZm9y
IChhdXRvJiBlbnRyeSA6IG1fY2VsbHMpCiAgICAgICAgIHZpc2l0b3IuYXBwZW5kKGVudHJ5KTsK
IH0KIAordm9pZCBNYXJraW5nR0NBd2FyZUpJVFN0dWJSb3V0aW5lOjptYXJrUmVxdWlyZWRPYmpl
Y3RzSW50ZXJuYWwoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBtYXJrUmVx
dWlyZWRPYmplY3RzSW50ZXJuYWxJbXBsKHZpc2l0b3IpOworfQordm9pZCBNYXJraW5nR0NBd2Fy
ZUpJVFN0dWJSb3V0aW5lOjptYXJrUmVxdWlyZWRPYmplY3RzSW50ZXJuYWwoU2xvdFZpc2l0b3Im
IHZpc2l0b3IpCit7CisgICAgbWFya1JlcXVpcmVkT2JqZWN0c0ludGVybmFsSW1wbCh2aXNpdG9y
KTsKK30KIAogR0NBd2FyZUpJVFN0dWJSb3V0aW5lV2l0aEV4Y2VwdGlvbkhhbmRsZXI6OkdDQXdh
cmVKSVRTdHViUm91dGluZVdpdGhFeGNlcHRpb25IYW5kbGVyKAogICAgIGNvbnN0IE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxKSVRTdHViUm91dGluZVB0clRhZz4mIGNvZGUsIFZNJiB2bSwgIGNvbnN0
IEpTQ2VsbCogb3duZXIsIGNvbnN0IFZlY3RvcjxKU0NlbGwqPiYgY2VsbHMsIEJhZzxDYWxsTGlu
a0luZm8+JiYgY2FsbExpbmtJbmZvcywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
R0NBd2FyZUpJVFN0dWJSb3V0aW5lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9HQ0F3YXJlSklUU3R1YlJvdXRpbmUuaAkocmV2aXNpb24gMjczMTE5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9HQ0F3YXJlSklUU3R1YlJvdXRpbmUuaAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxOCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTYwLDggKzYwLDkgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKCpuZXcgR0NBd2FyZUpJVFN0dWJSb3V0aW5lKGNvZGUsIHZtKSk7CiAgICAgfQotICAg
IAotICAgIHZvaWQgbWFya1JlcXVpcmVkT2JqZWN0cyhTbG90VmlzaXRvciYgdmlzaXRvcikKKwor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+CisgICAgdm9pZCBtYXJrUmVxdWlyZWRPYmpl
Y3RzKFZpc2l0b3ImIHZpc2l0b3IpCiAgICAgewogICAgICAgICBtYXJrUmVxdWlyZWRPYmplY3Rz
SW50ZXJuYWwodmlzaXRvcik7CiAgICAgfQpAQCAtNzEsNyArNzIsOCBAQCBwdWJsaWM6CiBwcm90
ZWN0ZWQ6CiAgICAgdm9pZCBvYnNlcnZlWmVyb1JlZkNvdW50KCkgb3ZlcnJpZGU7CiAgICAgCi0g
ICAgdmlydHVhbCB2b2lkIG1hcmtSZXF1aXJlZE9iamVjdHNJbnRlcm5hbChTbG90VmlzaXRvciYp
OworICAgIHZpcnR1YWwgdm9pZCBtYXJrUmVxdWlyZWRPYmplY3RzSW50ZXJuYWwoQWJzdHJhY3RT
bG90VmlzaXRvciYpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBtYXJrUmVxdWlyZWRPYmplY3RzSW50
ZXJuYWwoU2xvdFZpc2l0b3ImKSB7IH0KIAogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgSklU
U3R1YlJvdXRpbmVTZXQ7CkBAIC04OSw3ICs5MSw5IEBAIHB1YmxpYzoKICAgICB+TWFya2luZ0dD
QXdhcmVKSVRTdHViUm91dGluZSgpIG92ZXJyaWRlOwogICAgIAogcHJvdGVjdGVkOgotICAgIHZv
aWQgbWFya1JlcXVpcmVkT2JqZWN0c0ludGVybmFsKFNsb3RWaXNpdG9yJikgb3ZlcnJpZGU7Cisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCBtYXJrUmVxdWlyZWRPYmplY3RzSW50
ZXJuYWxJbXBsKFZpc2l0b3ImKTsKKyAgICB2b2lkIG1hcmtSZXF1aXJlZE9iamVjdHNJbnRlcm5h
bChBYnN0cmFjdFNsb3RWaXNpdG9yJikgZmluYWw7CisgICAgdm9pZCBtYXJrUmVxdWlyZWRPYmpl
Y3RzSW50ZXJuYWwoU2xvdFZpc2l0b3ImKSBmaW5hbDsKIAogcHJpdmF0ZToKICAgICBWZWN0b3I8
V3JpdGVCYXJyaWVyPEpTQ2VsbD4+IG1fY2VsbHM7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVFdvcmtsaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVFdvcmtsaXN0LmNwcAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRXb3JrbGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L1BvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1BvbHltb3JwaGljQ2FsbFN0dWJS
b3V0aW5lLmNwcAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9Qb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTggQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMzUs
MTIgKzEzNSwyMiBAQCBib29sIFBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lOjp2aXNpdFdlCiAg
ICAgcmV0dXJuIGlzU3RpbGxMaXZlOwogfQogCi12b2lkIFBvbHltb3JwaGljQ2FsbFN0dWJSb3V0
aW5lOjptYXJrUmVxdWlyZWRPYmplY3RzSW50ZXJuYWwoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0
ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgorQUxXQVlTX0lOTElORSB2b2lkIFBvbHltb3JwaGlj
Q2FsbFN0dWJSb3V0aW5lOjptYXJrUmVxdWlyZWRPYmplY3RzSW50ZXJuYWxJbXBsKFZpc2l0b3Im
IHZpc2l0b3IpCiB7CiAgICAgZm9yIChhdXRvJiB2YXJpYW50IDogbV92YXJpYW50cykKICAgICAg
ICAgdmlzaXRvci5hcHBlbmQodmFyaWFudCk7CiB9CiAKK3ZvaWQgUG9seW1vcnBoaWNDYWxsU3R1
YlJvdXRpbmU6Om1hcmtSZXF1aXJlZE9iamVjdHNJbnRlcm5hbChBYnN0cmFjdFNsb3RWaXNpdG9y
JiB2aXNpdG9yKQoreworICAgIG1hcmtSZXF1aXJlZE9iamVjdHNJbnRlcm5hbEltcGwodmlzaXRv
cik7Cit9Cit2b2lkIFBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lOjptYXJrUmVxdWlyZWRPYmpl
Y3RzSW50ZXJuYWwoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgbWFya1JlcXVpcmVkT2Jq
ZWN0c0ludGVybmFsSW1wbCh2aXNpdG9yKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNl
bmRpZiAvLyBFTkFCTEUoSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Qb2x5
bW9ycGhpY0NhbGxTdHViUm91dGluZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUuaAkocmV2aXNpb24gMjczMTE5KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Qb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
NS0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMTA1LDYgKzEwNSw4IEBAIHB1YmxpYzoKICAgICBib29sIHZp
c2l0V2VhayhWTSYpIGZpbmFsOwogCiBwcml2YXRlOgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZp
c2l0b3I+IHZvaWQgbWFya1JlcXVpcmVkT2JqZWN0c0ludGVybmFsSW1wbChWaXNpdG9yJik7Cisg
ICAgdm9pZCBtYXJrUmVxdWlyZWRPYmplY3RzSW50ZXJuYWwoQWJzdHJhY3RTbG90VmlzaXRvciYp
IGZpbmFsOwogICAgIHZvaWQgbWFya1JlcXVpcmVkT2JqZWN0c0ludGVybmFsKFNsb3RWaXNpdG9y
JikgZmluYWw7CiAKICAgICBWZWN0b3I8V3JpdGVCYXJyaWVyPEpTQ2VsbD4sIDI+IG1fdmFyaWFu
dHM7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BYnN0cmFjdE1vZHVsZVJl
Y29yZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQWJz
dHJhY3RNb2R1bGVSZWNvcmQuY3BwCShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9BYnN0cmFjdE1vZHVsZVJlY29yZC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTkgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC02MCw3ICs2MCw4IEBAIHZvaWQgQWJzdHJhY3RNb2R1bGVSZWNvcmQ6OmZpbmlzaENyZWF0
aW8KICAgICBwdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJkZXBlbmRl
bmNpZXNNYXAiX3MpLCBtX2RlcGVuZGVuY2llc01hcC5nZXQoKSk7CiB9CiAKLXZvaWQgQWJzdHJh
Y3RNb2R1bGVSZWNvcmQ6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYg
dmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEFic3RyYWN0TW9kdWxl
UmVjb3JkOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3Ip
CiB7CiAgICAgQWJzdHJhY3RNb2R1bGVSZWNvcmQqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8QWJzdHJh
Y3RNb2R1bGVSZWNvcmQqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRo
aXNPYmplY3QsIGluZm8oKSk7CkBAIC03MCw2ICs3MSw4IEBAIHZvaWQgQWJzdHJhY3RNb2R1bGVS
ZWNvcmQ6OnZpc2l0Q2hpbGRyZW4KICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2Rl
cGVuZGVuY2llc01hcCk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihBYnN0cmFjdE1vZHVs
ZVJlY29yZCk7CisKIHZvaWQgQWJzdHJhY3RNb2R1bGVSZWNvcmQ6OmFwcGVuZFJlcXVlc3RlZE1v
ZHVsZShjb25zdCBJZGVudGlmaWVyJiBtb2R1bGVOYW1lKQogewogICAgIG1fcmVxdWVzdGVkTW9k
dWxlcy5hZGQobW9kdWxlTmFtZS5pbXBsKCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQWJzdHJhY3RNb2R1bGVSZWNvcmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9BYnN0cmFjdE1vZHVsZVJlY29yZC5oCShyZXZpc2lvbiAyNzMx
MTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BYnN0cmFjdE1vZHVsZVJlY29y
ZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTUtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTEzNiw3ICsxMzYsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgQWJzdHJh
Y3RNb2R1bGVSZWNvcmQoVk0mLCBTdHJ1Y3R1cmUqLCBjb25zdCBJZGVudGlmaWVyJik7CiAgICAg
dm9pZCBmaW5pc2hDcmVhdGlvbihKU0dsb2JhbE9iamVjdCosIFZNJik7CiAKLSAgICBzdGF0aWMg
dm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9W
SVNJVF9DSElMRFJFTjsKIAogICAgIHZvaWQgc2V0TW9kdWxlRW52aXJvbm1lbnQoSlNHbG9iYWxP
YmplY3QqLCBKU01vZHVsZUVudmlyb25tZW50Kik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0FyZ0xpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0FyZ0xpc3QuY3BwCShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9BcmdMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwMy0yMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC01MSw3ICs1MSw4IEBA
IHZvaWQgQXJnTGlzdDo6Z2V0U2xpY2UoaW50IHN0YXJ0SW5kZXgsIEEKICAgICByZXN1bHQubV9h
cmdDb3VudCA9ICBtX2FyZ0NvdW50IC0gc3RhcnRJbmRleDsKIH0KIAotdm9pZCBNYXJrZWRBcmd1
bWVudEJ1ZmZlcjo6bWFya0xpc3RzKFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBMaXN0U2V0JiBtYXJr
U2V0KQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgTWFya2VkQXJndW1lbnRCdWZm
ZXI6Om1hcmtMaXN0cyhWaXNpdG9yJiB2aXNpdG9yLCBMaXN0U2V0JiBtYXJrU2V0KQogewogICAg
IExpc3RTZXQ6Oml0ZXJhdG9yIGVuZCA9IG1hcmtTZXQuZW5kKCk7CiAgICAgZm9yIChMaXN0U2V0
OjppdGVyYXRvciBpdCA9IG1hcmtTZXQuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CkBAIC02
MSw2ICs2Miw5IEBAIHZvaWQgTWFya2VkQXJndW1lbnRCdWZmZXI6Om1hcmtMaXN0cyhTbG8KICAg
ICB9CiB9CiAKK3RlbXBsYXRlIHZvaWQgTWFya2VkQXJndW1lbnRCdWZmZXI6Om1hcmtMaXN0cyhB
YnN0cmFjdFNsb3RWaXNpdG9yJiwgTGlzdFNldCYpOwordGVtcGxhdGUgdm9pZCBNYXJrZWRBcmd1
bWVudEJ1ZmZlcjo6bWFya0xpc3RzKFNsb3RWaXNpdG9yJiwgTGlzdFNldCYpOworCiB2b2lkIE1h
cmtlZEFyZ3VtZW50QnVmZmVyOjpzbG93RW5zdXJlQ2FwYWNpdHkoc2l6ZV90IHJlcXVlc3RlZENh
cGFjaXR5KQogewogICAgIHNldE5lZWRzT3ZlcmZsb3dDaGVjaygpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJnTGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0FyZ0xpc3QuaAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJnTGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYg
KzEsNiBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMSBIYXJyaSBQb3J0ZW4gKHBv
cnRlbkBrZGUub3JnKQotICogIENvcHlyaWdodCAoQykgMjAwMy0yMDE3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMTE4LDcgKzEx
OCw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAgICAgICAgIAot
ICAgIHN0YXRpYyB2b2lkIG1hcmtMaXN0cyhTbG90VmlzaXRvciYsIExpc3RTZXQmKTsKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiBzdGF0aWMgdm9pZCBtYXJrTGlzdHMoVmlzaXRvciYs
IExpc3RTZXQmKTsKIAogICAgIHZvaWQgZW5zdXJlQ2FwYWNpdHkoc2l6ZV90IHJlcXVlc3RlZENh
cGFjaXR5KQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hl
YWJsZUlkZW50aWZpZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9DYWNoZWFibGVJZGVudGlmaWVyLmgJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlYWJsZUlkZW50aWZpZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIwLTIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC00Miw3ICs0Miw2IEBAIG5hbWVzcGFjZSBKU0MgewogY2xhc3MgQ29kZUJsb2NrOwogY2xhc3Mg
SWRlbnRpZmllcjsKIGNsYXNzIEpTQ2VsbDsKLWNsYXNzIFNsb3RWaXNpdG9yOwogCiBjbGFzcyBD
YWNoZWFibGVJZGVudGlmaWVyIHsKIHB1YmxpYzoKQEAgLTg3LDcgKzg2LDcgQEAgcHVibGljOgog
CiAgICAgdWludHB0cl90IHJhd0JpdHMoKSBjb25zdCB7IHJldHVybiBtX2JpdHM7IH0KIAotICAg
IGlubGluZSB2b2lkIHZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJikgY29uc3Q7CisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gaW5saW5lIHZvaWQgdmlzaXRBZ2dyZWdhdGUoVmlzaXRv
ciYpIGNvbnN0OwogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBkdW1wKFByaW50U3RyZWFt
JikgY29uc3Q7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlYWJs
ZUlkZW50aWZpZXJJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQ2FjaGVhYmxlSWRlbnRpZmllcklubGluZXMuaAkocmV2aXNpb24gMjczMTE5KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVhYmxlSWRlbnRpZmllcklubGlu
ZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDIwLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC0xMzcsNyArMTM3LDggQEAgaW5saW5lIHZvaWQgQ2FjaGVhYmxl
SWRlbnRpZmllcjo6c2V0VWlkQgogICAgIG1fYml0cyA9IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+
KHVpZCkgfCBzX3VpZFRhZzsKIH0KIAotaW5saW5lIHZvaWQgQ2FjaGVhYmxlSWRlbnRpZmllcjo6
dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0Cit0ZW1wbGF0ZTx0eXBl
bmFtZSBWaXNpdG9yPgoraW5saW5lIHZvaWQgQ2FjaGVhYmxlSWRlbnRpZmllcjo6dmlzaXRBZ2dy
ZWdhdGUoVmlzaXRvciYgdmlzaXRvcikgY29uc3QKIHsKICAgICBpZiAobV9iaXRzICYmIGlzQ2Vs
bCgpKQogICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKGNlbGwoKSk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DbGFzc0luZm8uaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DbGFzc0luZm8uaAkocmV2aXNpb24gMjczMTE5
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xhc3NJbmZvLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNyArMSw3IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAxIEhh
cnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCiAgKiAgQ29weXJpZ2h0IChDKSAyMDAxIFBldGVy
IEtlbGx5IChwbWtAcG9zdC5jb20pCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMTkgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwMy0yMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC00
NCw5ICs0NCw2IEBAIHN0cnVjdCBNZXRob2RUYWJsZSB7CiAgICAgdXNpbmcgRGVzdHJveUZ1bmN0
aW9uUHRyID0gdm9pZCAoKikoSlNDZWxsKik7CiAgICAgRGVzdHJveUZ1bmN0aW9uUHRyIE1FVEhP
RF9UQUJMRV9FTlRSWShkZXN0cm95KTsKIAotICAgIHVzaW5nIFZpc2l0Q2hpbGRyZW5GdW5jdGlv
blB0ciA9IHZvaWQgKCopKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7Ci0gICAgVmlzaXRDaGlsZHJl
bkZ1bmN0aW9uUHRyIE1FVEhPRF9UQUJMRV9FTlRSWSh2aXNpdENoaWxkcmVuKTsKLQogICAgIHVz
aW5nIEdldENhbGxEYXRhRnVuY3Rpb25QdHIgPSBDYWxsRGF0YSAoKikoSlNDZWxsKik7CiAgICAg
R2V0Q2FsbERhdGFGdW5jdGlvblB0ciBNRVRIT0RfVEFCTEVfRU5UUlkoZ2V0Q2FsbERhdGEpOwog
CkBAIC0xMjAsOCArMTE3LDIzIEBAIHN0cnVjdCBNZXRob2RUYWJsZSB7CiAgICAgdXNpbmcgRXN0
aW1hdGVkU2l6ZUZ1bmN0aW9uUHRyID0gc2l6ZV90ICgqKShKU0NlbGwqLCBWTSYpOwogICAgIEVz
dGltYXRlZFNpemVGdW5jdGlvblB0ciBNRVRIT0RfVEFCTEVfRU5UUlkoZXN0aW1hdGVkU2l6ZSk7
CiAKKyAgICB1c2luZyBWaXNpdENoaWxkcmVuRnVuY3Rpb25QdHIgPSB2b2lkICgqKShKU0NlbGwq
LCBTbG90VmlzaXRvciYpOworICAgIFZpc2l0Q2hpbGRyZW5GdW5jdGlvblB0ciBNRVRIT0RfVEFC
TEVfRU5UUlkodmlzaXRDaGlsZHJlbldpdGhTbG90VmlzaXRvcik7CisKKyAgICB1c2luZyBWaXNp
dENoaWxkcmVuV2l0aEFic3RyYWN0U2xvdFZpc2l0b3JQdHIgPSB2b2lkICgqKShKU0NlbGwqLCBB
YnN0cmFjdFNsb3RWaXNpdG9yJik7CisgICAgVmlzaXRDaGlsZHJlbldpdGhBYnN0cmFjdFNsb3RW
aXNpdG9yUHRyIE1FVEhPRF9UQUJMRV9FTlRSWSh2aXNpdENoaWxkcmVuV2l0aEFic3RyYWN0U2xv
dFZpc2l0b3IpOworCisgICAgQUxXQVlTX0lOTElORSB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikgY29uc3QgeyB2aXNpdENoaWxkcmVuV2l0aFNs
b3RWaXNpdG9yKGNlbGwsIHZpc2l0b3IpOyB9CisgICAgQUxXQVlTX0lOTElORSB2b2lkIHZpc2l0
Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBjb25z
dCB7IHZpc2l0Q2hpbGRyZW5XaXRoQWJzdHJhY3RTbG90VmlzaXRvcihjZWxsLCB2aXNpdG9yKTsg
fQorCiAgICAgdXNpbmcgVmlzaXRPdXRwdXRDb25zdHJhaW50c1B0ciA9IHZvaWQgKCopKEpTQ2Vs
bCosIFNsb3RWaXNpdG9yJik7Ci0gICAgVmlzaXRPdXRwdXRDb25zdHJhaW50c1B0ciBNRVRIT0Rf
VEFCTEVfRU5UUlkodmlzaXRPdXRwdXRDb25zdHJhaW50cyk7CisgICAgVmlzaXRPdXRwdXRDb25z
dHJhaW50c1B0ciBNRVRIT0RfVEFCTEVfRU5UUlkodmlzaXRPdXRwdXRDb25zdHJhaW50c1dpdGhT
bG90VmlzaXRvcik7CisKKyAgICB1c2luZyBWaXNpdE91dHB1dENvbnN0cmFpbnRzV2l0aEFic3Ry
YWN0U2xvdFZpc2l0b3JQdHIgPSB2b2lkICgqKShKU0NlbGwqLCBBYnN0cmFjdFNsb3RWaXNpdG9y
Jik7CisgICAgVmlzaXRPdXRwdXRDb25zdHJhaW50c1dpdGhBYnN0cmFjdFNsb3RWaXNpdG9yUHRy
IE1FVEhPRF9UQUJMRV9FTlRSWSh2aXNpdE91dHB1dENvbnN0cmFpbnRzV2l0aEFic3RyYWN0U2xv
dFZpc2l0b3IpOworCisgICAgQUxXQVlTX0lOTElORSB2b2lkIHZpc2l0T3V0cHV0Q29uc3RyYWlu
dHMoSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikgY29uc3QgeyB2aXNpdE91dHB1
dENvbnN0cmFpbnRzV2l0aFNsb3RWaXNpdG9yKGNlbGwsIHZpc2l0b3IpOyB9CisgICAgQUxXQVlT
X0lOTElORSB2b2lkIHZpc2l0T3V0cHV0Q29uc3RyYWludHMoSlNDZWxsKiBjZWxsLCBBYnN0cmFj
dFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBjb25zdCB7IHZpc2l0T3V0cHV0Q29uc3RyYWludHNXaXRo
QWJzdHJhY3RTbG90VmlzaXRvcihjZWxsLCB2aXNpdG9yKTsgfQogfTsKIAogI2RlZmluZSBDUkVB
VEVfTUVNQkVSX0NIRUNLRVIobWVtYmVyKSBcCkBAIC0xNDcsNyArMTU5LDYgQEAgc3RydWN0IE1l
dGhvZFRhYmxlIHsKICAgICBKU0Nhc3RpbmdIZWxwZXJzOjpJbmhlcml0c1RyYWl0czxDbGFzc05h
bWU+Ojp0eXBlUmFuZ2UsIFwKICAgICB7IFwKICAgICAgICAgJkNsYXNzTmFtZTo6ZGVzdHJveSwg
XAotICAgICAgICAmQ2xhc3NOYW1lOjp2aXNpdENoaWxkcmVuLCBcCiAgICAgICAgICZDbGFzc05h
bWU6OmdldENhbGxEYXRhLCBcCiAgICAgICAgICZDbGFzc05hbWU6OmdldENvbnN0cnVjdERhdGEs
IFwKICAgICAgICAgJkNsYXNzTmFtZTo6cHV0LCBcCkBAIC0xNzMsNiArMTg0LDkgQEAgc3RydWN0
IE1ldGhvZFRhYmxlIHsKICAgICAgICAgJkNsYXNzTmFtZTo6ZHVtcFRvU3RyZWFtLCBcCiAgICAg
ICAgICZDbGFzc05hbWU6OmFuYWx5emVIZWFwLCBcCiAgICAgICAgICZDbGFzc05hbWU6OmVzdGlt
YXRlZFNpemUsIFwKKyAgICAgICAgJkNsYXNzTmFtZTo6dmlzaXRDaGlsZHJlbiwgXAorICAgICAg
ICAmQ2xhc3NOYW1lOjp2aXNpdENoaWxkcmVuLCBcCisgICAgICAgICZDbGFzc05hbWU6OnZpc2l0
T3V0cHV0Q29uc3RyYWludHMsIFwKICAgICAgICAgJkNsYXNzTmFtZTo6dmlzaXRPdXRwdXRDb25z
dHJhaW50cywgXAogICAgIH0sIFwKICAgICBDbGFzc05hbWU6OlR5cGVkQXJyYXlTdG9yYWdlVHlw
ZSwgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xvbmVkQXJndW1lbnRz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DbG9uZWRB
cmd1bWVudHMuY3BwCShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9DbG9uZWRBcmd1bWVudHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjY3LDcgKzI2
Nyw4IEBAIHZvaWQgQ2xvbmVkQXJndW1lbnRzOjptYXRlcmlhbGl6ZVNwZWNpYWwKICAgICAgICAg
bWF0ZXJpYWxpemVTcGVjaWFscyhnbG9iYWxPYmplY3QpOwogfQogCi12b2lkIENsb25lZEFyZ3Vt
ZW50czo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQor
dGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgQ2xvbmVkQXJndW1lbnRzOjp2aXNpdENo
aWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgQ2xvbmVk
QXJndW1lbnRzKiB0aGlzT2JqZWN0ID0ganNDYXN0PENsb25lZEFyZ3VtZW50cyo+KGNlbGwpOwog
ICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTI3
NSw1ICsyNzYsNyBAQCB2b2lkIENsb25lZEFyZ3VtZW50czo6dmlzaXRDaGlsZHJlbihKU0NlCiAg
ICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9jYWxsZWUpOwogfQogCitERUZJTkVfVklT
SVRfQ0hJTERSRU4oQ2xvbmVkQXJndW1lbnRzKTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Nsb25lZEFyZ3VtZW50cy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Nsb25lZEFyZ3VtZW50cy5o
CShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DbG9u
ZWRBcmd1bWVudHMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTUtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTYyLDcgKzYyLDcgQEAgcHVibGljOgog
ICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0
KiwgSlNWYWx1ZSBwcm90b3R5cGUpOwogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVNsb3dQ
dXRTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUgcHJvdG90eXBlKTsKIAot
ICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAg
ICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgREVDTEFSRV9JTkZPOwogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EaXJlY3RBcmd1bWVudHMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5jcHAJ
KHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVj
dEFyZ3VtZW50cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDE1LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE1LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC05MCw3ICs5MCw4IEBAIHNpemVfdCBE
aXJlY3RBcmd1bWVudHM6OmVzdGltYXRlZFNpemUoSlMKICAgICByZXR1cm4gQmFzZTo6ZXN0aW1h
dGVkU2l6ZShjZWxsLCB2bSkgKyBtYXBwZWRBcmd1bWVudHNTaXplICsgbW9kaWZpZWRBcmd1bWVu
dHNTaXplOwogfQogCi12b2lkIERpcmVjdEFyZ3VtZW50czo6dmlzaXRDaGlsZHJlbihKU0NlbGwq
IHRoaXNDZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0
b3I+Cit2b2lkIERpcmVjdEFyZ3VtZW50czo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiB0aGlz
Q2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBEaXJlY3RBcmd1bWVudHMqIHRoaXNPYmpl
Y3QgPSBzdGF0aWNfY2FzdDxEaXJlY3RBcmd1bWVudHMqPih0aGlzQ2VsbCk7CiAgICAgQVNTRVJU
X0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtMTA0LDYgKzEwNSw4
IEBAIHZvaWQgRGlyZWN0QXJndW1lbnRzOjp2aXNpdENoaWxkcmVuKEpTQ2UKICAgICBHZW5lcmlj
QXJndW1lbnRzPERpcmVjdEFyZ3VtZW50cz46OnZpc2l0Q2hpbGRyZW4odGhpc0NlbGwsIHZpc2l0
b3IpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oRGlyZWN0QXJndW1lbnRzKTsKKwogU3Ry
dWN0dXJlKiBEaXJlY3RBcmd1bWVudHM6OmNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQogewogICAgIHJldHVybiBT
dHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKERp
cmVjdEFyZ3VtZW50c1R5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5oCShyZXZpc2lv
biAyNzMxMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EaXJlY3RBcmd1bWVu
dHMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTUtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTUtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY1LDcgKzY1LDcgQEAgcHVibGljOgogICAgIHN0YXRp
YyBEaXJlY3RBcmd1bWVudHMqIGNyZWF0ZUJ5Q29weWluZyhKU0dsb2JhbE9iamVjdCosIENhbGxG
cmFtZSopOwogCiAgICAgc3RhdGljIHNpemVfdCBlc3RpbWF0ZWRTaXplKEpTQ2VsbCosIFZNJik7
Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwor
ICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAgICAgCiAgICAgdWludDMyX3QgaW50ZXJuYWxM
ZW5ndGgoKSBjb25zdAogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0V2YWxFeGVjdXRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9FdmFsRXhlY3V0YWJsZS5jcHAJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0V2YWxFeGVjdXRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAsIDIwMTMsIDIw
MTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDktMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTUwLDcgKzUwLDggQEAgYXV0byBFdmFsRXhlY3V0YWJsZTo6
ZW5zdXJlVGVtcGxhdGVPYmplYwogICAgIHJldHVybiBlbnN1cmVUZW1wbGF0ZU9iamVjdE1hcElt
cGwobV90ZW1wbGF0ZU9iamVjdE1hcCk7CiB9CiAKLXZvaWQgRXZhbEV4ZWN1dGFibGU6OnZpc2l0
Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5
cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEV2YWxFeGVjdXRhYmxlOjp2aXNpdENoaWxkcmVuSW1wbChK
U0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgRXZhbEV4ZWN1dGFibGUqIHRo
aXNPYmplY3QgPSBqc0Nhc3Q8RXZhbEV4ZWN1dGFibGUqPihjZWxsKTsKICAgICBBU1NFUlRfR0Nf
T0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC02NCw0ICs2NSw2IEBAIHZv
aWQgRXZhbEV4ZWN1dGFibGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWwKICAgICB9CiB9CiAKK0RFRklO
RV9WSVNJVF9DSElMRFJFTihFdmFsRXhlY3V0YWJsZSk7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXZhbEV4ZWN1dGFibGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FdmFsRXhlY3V0YWJsZS5o
CShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FdmFs
RXhlY3V0YWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAwOS0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAwOS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNzksNyArNzksNyBAQCBwcm90ZWN0ZWQ6
CiAgICAgdXNpbmcgQmFzZTo6ZmluaXNoQ3JlYXRpb247CiAgICAgRXZhbEV4ZWN1dGFibGUoSlNH
bG9iYWxPYmplY3QqLCBjb25zdCBTb3VyY2VDb2RlJiwgYm9vbCBpblN0cmljdENvbnRleHQsIERl
cml2ZWRDb250ZXh0VHlwZSwgYm9vbCBpc0Fycm93RnVuY3Rpb25Db250ZXh0LCBib29sIGlzSW5z
aWRlT3JkaW5hcnlGdW5jdGlvbiwgRXZhbENvbnRleHRUeXBlLCBOZWVkc0NsYXNzRmllbGRJbml0
aWFsaXplciwgUHJpdmF0ZUJyYW5kUmVxdWlyZW1lbnQpOwogCi0gICAgc3RhdGljIHZvaWQgdmlz
aXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJ
TERSRU47CiAKICAgICB1bnNpZ25lZCBtX25lZWRzQ2xhc3NGaWVsZEluaXRpYWxpemVyIDogMTsK
ICAgICB1bnNpZ25lZCBtX3ByaXZhdGVCcmFuZFJlcXVpcmVtZW50IDogMTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9uLmNwcAkocmV2aXNpb24gMjczMTE5
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9uLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxOSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTUzLDcgKzUzLDggQEAgU3RydWN0dXJlKiBFeGNlcHRpb246OmNyZWF0ZVN0
cnVjdHVyZShWTQogICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0
LCBwcm90b3R5cGUsIFR5cGVJbmZvKENlbGxUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7
CiB9CiAKLXZvaWQgRXhjZXB0aW9uOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZp
c2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBFeGNlcHRp
b246OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsK
ICAgICBFeGNlcHRpb24qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8RXhjZXB0aW9uKj4oY2VsbCk7CiAg
ICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNjQs
NiArNjUsOCBAQCB2b2lkIEV4Y2VwdGlvbjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlCiAgICAg
ICAgIGZyYW1lLnZpc2l0Q2hpbGRyZW4odmlzaXRvcik7CiB9CiAKK0RFRklORV9WSVNJVF9DSElM
RFJFTihFeGNlcHRpb24pOworCiBFeGNlcHRpb246OkV4Y2VwdGlvbihWTSYgdm0pCiAgICAgOiBC
YXNlKHZtLCB2bS5leGNlcHRpb25TdHJ1Y3R1cmUuZ2V0KCkpCiB7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9FeGNlcHRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9FeGNlcHRpb24uaAkocmV2aXNpb24gMjczMTE5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTkgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC01MSw3ICs1MSw3IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0
cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBwcm90b3R5cGUpOwogCi0gICAg
c3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERF
Q0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBERUNMQVJFX0VYUE9SVF9JTkZPOwogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvbkV4ZWN1dGFibGUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uRXhlY3V0
YWJsZS5jcHAJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02Nyw3ICs2Nyw4
IEBAIEZ1bmN0aW9uQ29kZUJsb2NrKiBGdW5jdGlvbkV4ZWN1dGFibGU6OmIKICAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8RnVuY3Rpb25Db2RlQmxvY2sqPihlZGdlLT5jb2RlQmxvY2soKS0+YmFzZWxp
bmVBbHRlcm5hdGl2ZSgpKTsKIH0KIAotdm9pZCBGdW5jdGlvbkV4ZWN1dGFibGU6OnZpc2l0Q2hp
bGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVu
YW1lIFZpc2l0b3I+Cit2b2lkIEZ1bmN0aW9uRXhlY3V0YWJsZTo6dmlzaXRDaGlsZHJlbkltcGwo
SlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEZ1bmN0aW9uRXhlY3V0YWJs
ZSogdGhpc09iamVjdCA9IGpzQ2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihjZWxsKTsKICAgICBB
U1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC04Niw2ICs4
Nyw4IEBAIHZvaWQgRnVuY3Rpb25FeGVjdXRhYmxlOjp2aXNpdENoaWxkcmVuKEoKICAgICB9CiB9
CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihGdW5jdGlvbkV4ZWN1dGFibGUpOworCiBGdW5jdGlv
bkV4ZWN1dGFibGUqIEZ1bmN0aW9uRXhlY3V0YWJsZTo6ZnJvbUdsb2JhbENvZGUoCiAgICAgY29u
c3QgSWRlbnRpZmllciYgbmFtZSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3Qg
U291cmNlQ29kZSYgc291cmNlLCAKICAgICBKU09iamVjdComIGV4Y2VwdGlvbiwgaW50IG92ZXJy
aWRlTGluZU51bWJlciwgT3B0aW9uYWw8aW50PiBmdW5jdGlvbkNvbnN0cnVjdG9yUGFyYW1ldGVy
c0VuZFBvc2l0aW9uKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rp
b25FeGVjdXRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvRnVuY3Rpb25FeGVjdXRhYmxlLmgJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOS0yMDE5IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDIxIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtMTY2LDcgKzE2Niw3IEBAIHB1YmxpYzoKICAgICBKU1BhcnNlclNjcmlwdE1vZGUgc2NyaXB0
TW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fdW5saW5rZWRFeGVjdXRhYmxlLT5zY3JpcHRNb2RlKCk7
IH0KICAgICBTb3VyY2VDb2RlIGNsYXNzU291cmNlKCkgY29uc3QgeyByZXR1cm4gbV91bmxpbmtl
ZEV4ZWN1dGFibGUtPmNsYXNzU291cmNlKCk7IH0KIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hp
bGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVO
OwogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG8pCiAgICAgewogICAgICAgICByZXR1
cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG8sIFR5cGVJbmZvKEZ1
bmN0aW9uRXhlY3V0YWJsZVR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uUmFyZURhdGEuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uUmFyZURhdGEuY3Bw
CShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5j
dGlvblJhcmVEYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTUtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTUxLDcgKzUxLDggQEAgU3RydWN0
dXJlKiBGdW5jdGlvblJhcmVEYXRhOjpjcmVhdGVTdHJ1YwogICAgIHJldHVybiBTdHJ1Y3R1cmU6
OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKENlbGxUeXBlLCBT
dHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CiB9CiAKLXZvaWQgRnVuY3Rpb25SYXJlRGF0YTo6dmlz
aXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8
dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgRnVuY3Rpb25SYXJlRGF0YTo6dmlzaXRDaGlsZHJlbklt
cGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEZ1bmN0aW9uUmFyZURh
dGEqIHJhcmVEYXRhID0ganNDYXN0PEZ1bmN0aW9uUmFyZURhdGEqPihjZWxsKTsKICAgICBBU1NF
UlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNlbGwsIGluZm8oKSk7CkBAIC02Myw2ICs2NCw4IEBAIHZv
aWQgRnVuY3Rpb25SYXJlRGF0YTo6dmlzaXRDaGlsZHJlbihKU0MKICAgICB2aXNpdG9yLmFwcGVu
ZChyYXJlRGF0YS0+bV9leGVjdXRhYmxlKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEZ1
bmN0aW9uUmFyZURhdGEpOworCiBGdW5jdGlvblJhcmVEYXRhOjpGdW5jdGlvblJhcmVEYXRhKFZN
JiB2bSwgRXhlY3V0YWJsZUJhc2UqIGV4ZWN1dGFibGUpCiAgICAgOiBCYXNlKHZtLCB2bS5mdW5j
dGlvblJhcmVEYXRhU3RydWN0dXJlLmdldCgpKQogICAgICwgbV9vYmplY3RBbGxvY2F0aW9uUHJv
ZmlsZSgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvblJhcmVE
YXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rp
b25SYXJlRGF0YS5oCShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9GdW5jdGlvblJhcmVEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02NSw3ICs2NSw3
IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYs
IEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBwcm90b3R5cGUpOwogCi0gICAgc3RhdGljIHZvaWQg
dmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRf
Q0hJTERSRU47CiAKICAgICBERUNMQVJFX0lORk87CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0dlbmVyaWNBcmd1bWVudHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljQXJndW1lbnRzLmgJKHJldmlzaW9uIDI3MzExOSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNBcmd1bWVudHMuaAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAy
MCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUt
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTQ0LDcgKzQ0LDcgQEAgcHJvdGVjdGVkOgogICAgIHsKICAgICB9CiAK
LSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7Cisg
ICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0
eVNsb3QoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlT
bG90Jik7CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU09iamVj
dCosIEpTR2xvYmFsT2JqZWN0KiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3Qm
KTsKICAgICBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgSlNHbG9i
YWxPYmplY3QqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIERvbnRFbnVtUHJvcGVydGllc01vZGUpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50c0lubGlu
ZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmlj
QXJndW1lbnRzSW5saW5lcy5oCShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9HZW5lcmljQXJndW1lbnRzSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIwIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIxIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtMzEsNyArMzEsOCBAQAogbmFtZXNwYWNlIEpTQyB7CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFR5
cGU+Ci12b2lkIEdlbmVyaWNBcmd1bWVudHM8VHlwZT46OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiB0
aGlzQ2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
Pgordm9pZCBHZW5lcmljQXJndW1lbnRzPFR5cGU+Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwq
IHRoaXNDZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFR5cGUqIHRoaXNPYmplY3QgPSBz
dGF0aWNfY2FzdDxUeXBlKj4odGhpc0NlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJ
VFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTQxLDYgKzQyLDggQEAgdm9pZCBHZW5lcmljQXJn
dW1lbnRzPFR5cGU+Ojp2aXNpdENoaWxkcgogICAgICAgICB2aXNpdG9yLm1hcmtBdXhpbGlhcnko
dGhpc09iamVjdC0+bV9tb2RpZmllZEFyZ3VtZW50c0Rlc2NyaXB0b3IuZ2V0VW5zYWZlKCkpOwog
fQogCitERUZJTkVfVklTSVRfQ0hJTERSRU5fV0lUSF9NT0RJRklFUih0ZW1wbGF0ZTx0eXBlbmFt
ZSBUeXBlPiwgR2VuZXJpY0FyZ3VtZW50czxUeXBlPik7CisKIHRlbXBsYXRlPHR5cGVuYW1lIFR5
cGU+CiBib29sIEdlbmVyaWNBcmd1bWVudHM8VHlwZT46OmdldE93blByb3BlcnR5U2xvdChKU09i
amVjdCogb2JqZWN0LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWUg
aWRlbnQsIFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0dldHRlclNldHRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvR2V0dGVyU2V0dGVyLmNwcAkocmV2aXNpb24gMjczMTE5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2V0dGVyU2V0dGVyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDIgSGFycmkg
UG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKICAqICBDb3B5cmlnaHQgKEMpIDIwMDEgUGV0ZXIgS2Vs
bHkgKHBta0Bwb3N0LmNvbSkKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxNyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDA0LTIwMjEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTMzLDcg
KzMzLDggQEAgU1RBVElDX0FTU0VSVF9JU19UUklWSUFMTFlfREVTVFJVQ1RJQkxFKAogCiBjb25z
dCBDbGFzc0luZm8gR2V0dGVyU2V0dGVyOjpzX2luZm8gPSB7ICJHZXR0ZXJTZXR0ZXIiLCBudWxs
cHRyLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEdldHRlclNldHRlcikg
fTsKIAotdm9pZCBHZXR0ZXJTZXR0ZXI6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90
VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEdldHRl
clNldHRlcjo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9y
KQogewogICAgIEdldHRlclNldHRlciogdGhpc09iamVjdCA9IGpzQ2FzdDxHZXR0ZXJTZXR0ZXIq
PihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8o
KSk7CkBAIC00Myw2ICs0NCw4IEBAIHZvaWQgR2V0dGVyU2V0dGVyOjp2aXNpdENoaWxkcmVuKEpT
Q2VsbCoKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX3NldHRlcik7CiB9CiAKK0RF
RklORV9WSVNJVF9DSElMRFJFTihHZXR0ZXJTZXR0ZXIpOworCiBKU1ZhbHVlIGNhbGxHZXR0ZXIo
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBiYXNlLCBKU1ZhbHVlIGdldHRl
clNldHRlcikKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZXR0ZXJTZXR0ZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZXR0ZXJTZXR0ZXIuaAkocmV2aXNpb24gMjcz
MTE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2V0dGVyU2V0dGVyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNyArMSw3IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMTk5OS0y
MDAxIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCiAgKiAgQ29weXJpZ2h0IChDKSAyMDAx
IFBldGVyIEtlbGx5IChwbWtAcG9zdC5jb20pCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMTkg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwMy0y
MDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CkBAIC04Miw3ICs4Miw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGNyZWF0ZSh2bSwgZ2xv
YmFsT2JqZWN0LCBnZXR0ZXJPYmplY3QsIHNldHRlck9iamVjdCk7CiAgICAgfQogCi0gICAgc3Rh
dGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xB
UkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBKU09iamVjdCogZ2V0dGVyKCkgY29uc3QgeyByZXR1
cm4gbV9nZXR0ZXIuZ2V0KCk7IH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSGFzaE1hcEltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0hhc2hNYXBJbXBsLmNwcAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSGFzaE1hcEltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMwLDYgKzMw
LDkgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTl9XSVRIX01P
RElGSUVSKHRlbXBsYXRlPD4sIEhhc2hNYXBCdWNrZXQ8SGFzaE1hcEJ1Y2tldERhdGFLZXk+KTsK
K0RFRklORV9WSVNJVF9DSElMRFJFTl9XSVRIX01PRElGSUVSKHRlbXBsYXRlPD4sIEhhc2hNYXBC
dWNrZXQ8SGFzaE1hcEJ1Y2tldERhdGFLZXlWYWx1ZT4pOworCiB0ZW1wbGF0ZTw+CiBjb25zdCBD
bGFzc0luZm8gSGFzaE1hcEJ1Y2tldDxIYXNoTWFwQnVja2V0RGF0YUtleT46OnNfaW5mbyA9CiAg
ICAgeyAiSGFzaE1hcEJ1Y2tldCIsIG51bGxwdHIsIG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9N
RVRIT0RfVEFCTEUoSGFzaE1hcEJ1Y2tldDxIYXNoTWFwQnVja2V0RGF0YUtleT4pIH07CkBAIC0z
OCw4ICs0MSw5IEBAIHRlbXBsYXRlPD4KIGNvbnN0IENsYXNzSW5mbyBIYXNoTWFwQnVja2V0PEhh
c2hNYXBCdWNrZXREYXRhS2V5VmFsdWU+OjpzX2luZm8gPQogICAgIHsgIkhhc2hNYXBCdWNrZXQi
LCBudWxscHRyLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEhhc2hNYXBC
dWNrZXQ8SGFzaE1hcEJ1Y2tldERhdGFLZXlWYWx1ZT4pIH07CiAKLXRlbXBsYXRlIDx0eXBlbmFt
ZSBEYXRhPgotdm9pZCBIYXNoTWFwQnVja2V0PERhdGE+Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCog
Y2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBEYXRhPgordGVt
cGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSGFzaE1hcEJ1Y2tldDxEYXRhPjo6dmlzaXRD
aGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEhhc2hN
YXBCdWNrZXQqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SGFzaE1hcEJ1Y2tldCo+KGNlbGwpOwogICAg
IEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTUyLDgg
KzU2LDkgQEAgdm9pZCBIYXNoTWFwQnVja2V0PERhdGE+Ojp2aXNpdENoaWxkcmVuKAogICAgIHZp
c2l0b3IuYXBwZW5kVmFsdWVzKGJpdHdpc2VfY2FzdDxXcml0ZUJhcnJpZXI8VW5rbm93bj4qPigm
dGhpc09iamVjdC0+bV9kYXRhKSwgc2l6ZW9mKERhdGEpIC8gc2l6ZW9mKFdyaXRlQmFycmllcjxV
bmtub3duPikpOwogfQogCi10ZW1wbGF0ZSA8dHlwZW5hbWUgSGFzaE1hcEJ1Y2tldD4KLXZvaWQg
SGFzaE1hcEltcGw8SGFzaE1hcEJ1Y2tldD46OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBT
bG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIEhhc2hNYXBCdWNrZXQ+Cit0
ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBIYXNoTWFwSW1wbDxIYXNoTWFwQnVja2V0
Pjo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewog
ICAgIEhhc2hNYXBJbXBsKiB0aGlzT2JqZWN0ID0ganNDYXN0PEhhc2hNYXBJbXBsKj4oY2VsbCk7
CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAt
NjYsNiArNzEsOCBAQCB2b2lkIEhhc2hNYXBJbXBsPEhhc2hNYXBCdWNrZXQ+Ojp2aXNpdENoCiAg
ICAgICAgIHZpc2l0b3IubWFya0F1eGlsaWFyeShidWZmZXIpOwogfQogCitERUZJTkVfVklTSVRf
Q0hJTERSRU5fV0lUSF9NT0RJRklFUih0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoTWFwQnVja2V0Piwg
SGFzaE1hcEltcGw8SGFzaE1hcEJ1Y2tldD4pOworCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgSGFzaE1h
cEJ1Y2tldD4KIHNpemVfdCBIYXNoTWFwSW1wbDxIYXNoTWFwQnVja2V0Pjo6ZXN0aW1hdGVkU2l6
ZShKU0NlbGwqIGNlbGwsIFZNJiB2bSkKIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0hhc2hNYXBJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSGFzaE1hcEltcGwuaAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSGFzaE1hcEltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE0OCw3
ICsxNDgsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX2RhdGEudmFsdWUuZ2V0KCk7CiAg
ICAgfQogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRv
ciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBBTFdBWVNfSU5MSU5FIEhh
c2hNYXBCdWNrZXQqIG5leHQoKSBjb25zdCB7IHJldHVybiBtX25leHQuZ2V0KCk7IH0KICAgICBB
TFdBWVNfSU5MSU5FIEhhc2hNYXBCdWNrZXQqIHByZXYoKSBjb25zdCB7IHJldHVybiBtX3ByZXYu
Z2V0KCk7IH0KQEAgLTM2NCw3ICszNjQsNyBAQCBjbGFzcyBIYXNoTWFwSW1wbCA6IHB1YmxpYyBK
U05vbkZpbmFsT2JqCiBwdWJsaWM6CiAgICAgdXNpbmcgQnVja2V0VHlwZSA9IEhhc2hNYXBCdWNr
ZXRUeXBlOwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90Vmlz
aXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBzdGF0aWMgc2l6ZV90
IGVzdGltYXRlZFNpemUoSlNDZWxsKiwgVk0mKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSW50ZXJuYWxGdW5jdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50ZXJuYWxGdW5jdGlvbi5jcHAJKHJldmlzaW9uIDI3MzEx
OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGVybmFsRnVuY3Rpb24uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5
OTktMjAwMiBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQogICogIENvcHlyaWdodCAoQykg
MjAwMSBQZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQotICogIENvcHlyaWdodCAoQykgMjAwNC0y
MDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIw
MDQtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAq
ICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYwpAQCAtNjQsNyArNjQsOCBAQCB2b2lkIEludGVybmFsRnVuY3Rpb246OmZpbmlzaENyZWF0
aW9uKFZNCiAgICAgfQogfQogCi12b2lkIEludGVybmFsRnVuY3Rpb246OnZpc2l0Q2hpbGRyZW4o
SlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZp
c2l0b3I+Cit2b2lkIEludGVybmFsRnVuY3Rpb246OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCog
Y2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBJbnRlcm5hbEZ1bmN0aW9uKiB0aGlzT2Jq
ZWN0ID0ganNDYXN0PEludGVybmFsRnVuY3Rpb24qPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JK
RUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC03Myw2ICs3NCw4IEBAIHZvaWQg
SW50ZXJuYWxGdW5jdGlvbjo6dmlzaXRDaGlsZHJlbihKU0MKICAgICB2aXNpdG9yLmFwcGVuZCh0
aGlzT2JqZWN0LT5tX29yaWdpbmFsTmFtZSk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTl9X
SVRIX01PRElGSUVSKEpTX0VYUE9SVF9QUklWQVRFLCBJbnRlcm5hbEZ1bmN0aW9uKTsKKwogY29u
c3QgU3RyaW5nJiBJbnRlcm5hbEZ1bmN0aW9uOjpuYW1lKCkKIHsKICAgICBjb25zdCBTdHJpbmcm
IG5hbWUgPSBtX29yaWdpbmFsTmFtZS0+dHJ5R2V0VmFsdWUoKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0ludGVybmFsRnVuY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRlcm5hbEZ1bmN0aW9uLmgJKHJldmlzaW9uIDI3
MzExOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGVybmFsRnVuY3Rpb24u
aAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAx
OTk5LTIwMDAgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKLSAqICBDb3B5cmlnaHQgKEMp
IDIwMDMtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0
IChDKSAyMDAzLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogIENvcHly
aWdodCAoQykgMjAwNyBDYW1lcm9uIFp3YXJpY2ggKGN3endhcmljaEB1d2F0ZXJsb28uY2EpCiAg
KiAgQ29weXJpZ2h0IChDKSAyMDA3IE1ha3MgT3Jsb3ZpY2gKICAqCkBAIC00Niw3ICs0Niw3IEBA
IHB1YmxpYzoKIAogICAgIERFQ0xBUkVfRVhQT1JUX0lORk87CiAKLSAgICBKU19FWFBPUlRfUFJJ
VkFURSBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7Cisg
ICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTl9XSVRIX01PRElGSUVSKEpTX0VYUE9SVF9QUklWQVRF
KTsKIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIGNvbnN0IFN0cmluZyYgbmFtZSgpOwogICAgIGNv
bnN0IFN0cmluZyBkaXNwbGF5TmFtZShWTSYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSW50bENvbGxhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9JbnRsQ29sbGF0b3IuY3BwCShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsQ29sbGF0b3IuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxNSBBbmR5IFZhbldhZ29u
ZXIgKGFuZHlAdmFud2Fnb25lci5mYW1pbHkpCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTUgU3Vrb2xz
YWsgU2Frc2h1d29uZyAoc3Vrb2xzYWtAZ21haWwuY29tKQotICogQ29weXJpZ2h0IChDKSAyMDE2
LTIwMjAgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC02NSw3ICs2NSw4IEBAIHZvaWQgSW50bENvbGxhdG9yOjpmaW5p
c2hDcmVhdGlvbihWTSYgdm0KICAgICBBU1NFUlQoaW5oZXJpdHModm0sIGluZm8oKSkpOwogfQog
Ci12b2lkIEludGxDb2xsYXRvcjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNp
dG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSW50bENvbGxh
dG9yOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7
CiAgICAgSW50bENvbGxhdG9yKiB0aGlzT2JqZWN0ID0ganNDYXN0PEludGxDb2xsYXRvcio+KGNl
bGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsK
QEAgLTc1LDYgKzc2LDggQEAgdm9pZCBJbnRsQ29sbGF0b3I6OnZpc2l0Q2hpbGRyZW4oSlNDZWxs
KgogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fYm91bmRDb21wYXJlKTsKIH0KIAor
REVGSU5FX1ZJU0lUX0NISUxEUkVOKEludGxDb2xsYXRvcik7CisKIFZlY3RvcjxTdHJpbmc+IElu
dGxDb2xsYXRvcjo6c29ydExvY2FsZURhdGEoY29uc3QgU3RyaW5nJiBsb2NhbGUsIFJlbGV2YW50
RXh0ZW5zaW9uS2V5IGtleSkKIHsKICAgICAvLyA5LjEgSW50ZXJuYWwgc2xvdHMgb2YgU2Vydmlj
ZSBDb25zdHJ1Y3RvcnMgJiAxMC4yLjMgSW50ZXJuYWwgc2xvdHMgKEVDTUEtNDAyIDIuMCkKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxDb2xsYXRvci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxDb2xsYXRvci5oCShyZXZp
c2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsQ29sbGF0
b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMp
IDIwMTUgQW5keSBWYW5XYWdvbmVyIChhbmR5QHZhbndhZ29uZXIuZmFtaWx5KQorICogQ29weXJp
Z2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODAsNyArODEsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgog
ICAgIEludGxDb2xsYXRvcihWTSYsIFN0cnVjdHVyZSopOwogICAgIHZvaWQgZmluaXNoQ3JlYXRp
b24oVk0mKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNp
dG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIGJvb2wgdXBkYXRlQ2Fu
RG9BU0NJSVVDQURVQ0VUQ29tcGFyaXNvbigpIGNvbnN0OwogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9JbnRsRGF0ZVRpbWVGb3JtYXQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxEYXRlVGltZUZvcm1hdC5jcHAJKHJldmlz
aW9uIDI3MzExOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxEYXRlVGlt
ZUZvcm1hdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogQ29weXJp
Z2h0IChDKSAyMDE1IEFuZHkgVmFuV2Fnb25lciAoYW5keUB2YW53YWdvbmVyLmZhbWlseSkKLSAq
IENvcHlyaWdodCAoQykgMjAxNi0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtOTAsNyArOTAsOCBAQCB2b2lk
IEludGxEYXRlVGltZUZvcm1hdDo6ZmluaXNoQ3JlYXRpb24oCiAgICAgQVNTRVJUKGluaGVyaXRz
KHZtLCBpbmZvKCkpKTsKIH0KIAotdm9pZCBJbnRsRGF0ZVRpbWVGb3JtYXQ6OnZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1l
IFZpc2l0b3I+Cit2b2lkIEludGxEYXRlVGltZUZvcm1hdDo6dmlzaXRDaGlsZHJlbkltcGwoSlND
ZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEludGxEYXRlVGltZUZvcm1hdCog
dGhpc09iamVjdCA9IGpzQ2FzdDxJbnRsRGF0ZVRpbWVGb3JtYXQqPihjZWxsKTsKICAgICBBU1NF
UlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC0xMDAsNiArMTAx
LDggQEAgdm9pZCBJbnRsRGF0ZVRpbWVGb3JtYXQ6OnZpc2l0Q2hpbGRyZW4oSgogICAgIHZpc2l0
b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fYm91bmRGb3JtYXQpOwogfQogCitERUZJTkVfVklTSVRf
Q0hJTERSRU4oSW50bERhdGVUaW1lRm9ybWF0KTsKKwogdm9pZCBJbnRsRGF0ZVRpbWVGb3JtYXQ6
OnNldEJvdW5kRm9ybWF0KFZNJiB2bSwgSlNCb3VuZEZ1bmN0aW9uKiBmb3JtYXQpCiB7CiAgICAg
bV9ib3VuZEZvcm1hdC5zZXQodm0sIHRoaXMsIGZvcm1hdCk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9JbnRsRGF0ZVRpbWVGb3JtYXQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsRGF0ZVRpbWVGb3JtYXQuaAkocmV2aXNpb24g
MjczMTE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERhdGVUaW1lRm9y
bWF0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChD
KSAyMDE1IEFuZHkgVmFuV2Fnb25lciAoYW5keUB2YW53YWdvbmVyLmZhbWlseSkKKyAqIENvcHly
aWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTg1LDcgKzg2LDcgQEAgcHVibGljOgogcHJpdmF0ZToK
ICAgICBJbnRsRGF0ZVRpbWVGb3JtYXQoVk0mLCBTdHJ1Y3R1cmUqKTsKICAgICB2b2lkIGZpbmlz
aENyZWF0aW9uKFZNJik7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBT
bG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBzdGF0aWMg
VmVjdG9yPFN0cmluZz4gbG9jYWxlRGF0YShjb25zdCBTdHJpbmcmLCBSZWxldmFudEV4dGVuc2lv
bktleSk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxMb2NhbGUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxMb2Nh
bGUuY3BwCShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9JbnRsTG9jYWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBD
b3B5cmlnaHQgKEMpIDIwMjAgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAq
IENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU4LDcgKzU5LDggQEAgdm9pZCBJbnRsTG9j
YWxlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCiAgICAgQVNTRVJUKGluaGVyaXRzKHZtLCBpbmZv
KCkpKTsKIH0KIAotdm9pZCBJbnRsTG9jYWxlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwg
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBJ
bnRsTG9jYWxlOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0
b3IpCiB7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxJbnRsTG9jYWxlKj4oY2VsbCk7
CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAt
NjYsNiArNjgsOCBAQCB2b2lkIEludGxMb2NhbGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjCiAg
ICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKIH0KIAorREVGSU5F
X1ZJU0lUX0NISUxEUkVOKEludGxMb2NhbGUpOworCiBjbGFzcyBMb2NhbGVJREJ1aWxkZXIgZmlu
YWwgewogcHVibGljOgogICAgIGJvb2wgaW5pdGlhbGl6ZShjb25zdCBTdHJpbmcmKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxMb2NhbGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTG9jYWxlLmgJKHJldmlzaW9uIDI3
MzExOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxMb2NhbGUuaAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMjAgU29u
eSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTcxLDcgKzcyLDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBJbnRsTG9jYWxl
KFZNJiwgU3RydWN0dXJlKik7CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOwotICAgIHN0
YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNM
QVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgU3RyaW5nIGtleXdvcmRWYWx1ZShBU0NJSUxpdGVy
YWwsIGJvb2wgaXNCb29sZWFuID0gZmFsc2UpIGNvbnN0OwogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9JbnRsTnVtYmVyRm9ybWF0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTnVtYmVyRm9ybWF0LmNwcAkocmV2aXNpb24g
MjczMTE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE51bWJlckZvcm1h
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChD
KSAyMDE1IEFuZHkgVmFuV2Fnb25lciAoYW5keUB2YW53YWdvbmVyLmZhbWlseSkKICAqIENvcHly
aWdodCAoQykgMjAxNiBTdWtvbHNhayBTYWtzaHV3b25nIChzdWtvbHNha0BnbWFpbC5jb20pCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMjAgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50
IEluYy4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTczLDcgKzczLDggQEAgdm9pZCBJbnRsTnVtYmVy
Rm9ybWF0OjpmaW5pc2hDcmVhdGlvbihWTQogICAgIEFTU0VSVChpbmhlcml0cyh2bSwgaW5mbygp
KSk7CiB9CiAKLXZvaWQgSW50bE51bWJlckZvcm1hdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNl
bGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3Zv
aWQgSW50bE51bWJlckZvcm1hdDo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNp
dG9yJiB2aXNpdG9yKQogewogICAgIEludGxOdW1iZXJGb3JtYXQqIHRoaXNPYmplY3QgPSBqc0Nh
c3Q8SW50bE51bWJlckZvcm1hdCo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJ
VFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTgzLDYgKzg0LDggQEAgdm9pZCBJbnRsTnVtYmVy
Rm9ybWF0Ojp2aXNpdENoaWxkcmVuKEpTQwogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3Qt
Pm1fYm91bmRGb3JtYXQpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSW50bE51bWJlckZv
cm1hdCk7CisKIFZlY3RvcjxTdHJpbmc+IEludGxOdW1iZXJGb3JtYXQ6OmxvY2FsZURhdGEoY29u
c3QgU3RyaW5nJiBsb2NhbGUsIFJlbGV2YW50RXh0ZW5zaW9uS2V5IGtleSkKIHsKICAgICAvLyA5
LjEgSW50ZXJuYWwgc2xvdHMgb2YgU2VydmljZSBDb25zdHJ1Y3RvcnMgJiAxMS4yLjMgSW50ZXJu
YWwgc2xvdHMgKEVDTUEtNDAyIDIuMCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0ludGxOdW1iZXJGb3JtYXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9JbnRsTnVtYmVyRm9ybWF0LmgJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxOdW1iZXJGb3JtYXQuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw2ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQW5keSBWYW5XYWdv
bmVyIChhbmR5QHZhbndhZ29uZXIuZmFtaWx5KQogICogQ29weXJpZ2h0IChDKSAyMDIwIFNvbnkg
SW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC05Niw3ICs5Nyw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgSW50bE51bWJlckZv
cm1hdChWTSYsIFN0cnVjdHVyZSopOwogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKLSAg
ICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAg
REVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIHN0YXRpYyBWZWN0b3I8U3RyaW5nPiBsb2Nh
bGVEYXRhKGNvbnN0IFN0cmluZyYsIFJlbGV2YW50RXh0ZW5zaW9uS2V5KTsKIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFBsdXJhbFJ1bGVzLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsUGx1cmFsUnVsZXMuY3BwCShy
ZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsUGx1
cmFsUnVsZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENvcHly
aWdodCAoQykgMjAxOCBBbmR5IFZhbldhZ29uZXIgKGFuZHlAdmFud2Fnb25lci5mYW1pbHkpCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTYxLDcgKzYxLDggQEAgdm9p
ZCBJbnRsUGx1cmFsUnVsZXM6OmZpbmlzaENyZWF0aW9uKFZNJgogICAgIEFTU0VSVChpbmhlcml0
cyh2bSwgaW5mbygpKSk7CiB9CiAKLXZvaWQgSW50bFBsdXJhbFJ1bGVzOjp2aXNpdENoaWxkcmVu
KEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPgordm9pZCBJbnRsUGx1cmFsUnVsZXM6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCog
Y2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBJbnRsUGx1cmFsUnVsZXMqIHRoaXNPYmpl
Y3QgPSBqc0Nhc3Q8SW50bFBsdXJhbFJ1bGVzKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVD
VF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNjksNiArNzAsOCBAQCB2b2lkIElu
dGxQbHVyYWxSdWxlczo6dmlzaXRDaGlsZHJlbihKU0NlCiAgICAgQmFzZTo6dmlzaXRDaGlsZHJl
bih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEludGxQ
bHVyYWxSdWxlcyk7CisKIFZlY3RvcjxTdHJpbmc+IEludGxQbHVyYWxSdWxlczo6bG9jYWxlRGF0
YShjb25zdCBTdHJpbmcmLCBSZWxldmFudEV4dGVuc2lvbktleSkKIHsKICAgICByZXR1cm4geyB9
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFBsdXJhbFJ1bGVzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFBsdXJhbFJ1
bGVzLmgJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0ludGxQbHVyYWxSdWxlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAq
IENvcHlyaWdodCAoQykgMjAxOCBBbmR5IFZhbldhZ29uZXIgKGFuZHlAdmFud2Fnb25lci5mYW1p
bHkpCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02Niw3ICs2Nyw3IEBAIHB1Ymxp
YzoKIHByaXZhdGU6CiAgICAgSW50bFBsdXJhbFJ1bGVzKFZNJiwgU3RydWN0dXJlKik7CiAgICAg
dm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOwotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4o
SlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAg
ICAgc3RhdGljIFZlY3RvcjxTdHJpbmc+IGxvY2FsZURhdGEoY29uc3QgU3RyaW5nJiwgUmVsZXZh
bnRFeHRlbnNpb25LZXkpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9J
bnRsUmVsYXRpdmVUaW1lRm9ybWF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9JbnRsUmVsYXRpdmVUaW1lRm9ybWF0LmNwcAkocmV2aXNpb24gMjczMTE5
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFJlbGF0aXZlVGltZUZvcm1h
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChD
KSAyMDIwIFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC02Miw3ICs2Myw4IEBAIHZvaWQgSW50bFJlbGF0aXZlVGltZUZv
cm1hdDo6ZmluaXNoQ3JlYXQKICAgICBBU1NFUlQoaW5oZXJpdHModm0sIGluZm8oKSkpOwogfQog
Ci12b2lkIEludGxSZWxhdGl2ZVRpbWVGb3JtYXQ6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxs
LCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lk
IEludGxSZWxhdGl2ZVRpbWVGb3JtYXQ6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwg
VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEludGxS
ZWxhdGl2ZVRpbWVGb3JtYXQqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRT
KHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC03MCw2ICs3Miw4IEBAIHZvaWQgSW50bFJlbGF0aXZl
VGltZUZvcm1hdDo6dmlzaXRDaGlsZHIKICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmpl
Y3QsIHZpc2l0b3IpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSW50bFJlbGF0aXZlVGlt
ZUZvcm1hdCk7CisKIFZlY3RvcjxTdHJpbmc+IEludGxSZWxhdGl2ZVRpbWVGb3JtYXQ6OmxvY2Fs
ZURhdGEoY29uc3QgU3RyaW5nJiBsb2NhbGUsIFJlbGV2YW50RXh0ZW5zaW9uS2V5IGtleSkKIHsK
ICAgICBBU1NFUlRfVU5VU0VEKGtleSwga2V5ID09IFJlbGV2YW50RXh0ZW5zaW9uS2V5OjpOdSk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsUmVsYXRpdmVUaW1lRm9y
bWF0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFJl
bGF0aXZlVGltZUZvcm1hdC5oCShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9JbnRsUmVsYXRpdmVUaW1lRm9ybWF0LmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsNiArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDIwIFNvbnkgSW50ZXJhY3RpdmUg
RW50ZXJ0YWlubWVudCBJbmMuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIwLTIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02
NCw3ICs2NCw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgSW50bFJlbGF0aXZlVGltZUZvcm1h
dChWTSYsIFN0cnVjdHVyZSopOwogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKLSAgICBz
dGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVD
TEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIHN0YXRpYyBWZWN0b3I8U3RyaW5nPiBsb2NhbGVE
YXRhKGNvbnN0IFN0cmluZyYsIFJlbGV2YW50RXh0ZW5zaW9uS2V5KTsKIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFNlZ21lbnRJdGVyYXRvci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFNlZ21lbnRJdGVyYXRvci5j
cHAJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lu
dGxTZWdtZW50SXRlcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoK
ICAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02NCwxMyArNjUsMTYgQEAgdm9pZCBJbnRs
U2VnbWVudEl0ZXJhdG9yOjpmaW5pc2hDcmVhdGlvbgogICAgIG1fc3RyaW5nLnNldCh2bSwgdGhp
cywgc3RyaW5nKTsKIH0KIAotdm9pZCBJbnRsU2VnbWVudEl0ZXJhdG9yOjp2aXNpdENoaWxkcmVu
KEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPgordm9pZCBJbnRsU2VnbWVudEl0ZXJhdG9yOjp2aXNpdENoaWxkcmVuSW1wbChKU0Nl
bGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpz
Q2FzdDxJbnRsU2VnbWVudEl0ZXJhdG9yKj4oY2VsbCk7CiAgICAgQmFzZTo6dmlzaXRDaGlsZHJl
bih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5t
X3N0cmluZyk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihJbnRsU2VnbWVudEl0ZXJhdG9y
KTsKKwogSlNPYmplY3QqIEludGxTZWdtZW50SXRlcmF0b3I6Om5leHQoSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCkKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsU2VnbWVudEl0ZXJhdG9yLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFNlZ21lbnRJdGVy
YXRvci5oCShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9JbnRsU2VnbWVudEl0ZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAv
KgogICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTUzLDcgKzU0LDcgQEAgcHVibGljOgog
CiAgICAgSlNPYmplY3QqIG5leHQoSlNHbG9iYWxPYmplY3QqKTsKIAotICAgIHN0YXRpYyB2b2lk
IHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lU
X0NISUxEUkVOOwogCiBwcml2YXRlOgogICAgIEludGxTZWdtZW50SXRlcmF0b3IoVk0mLCBTdHJ1
Y3R1cmUqLCBzdGQ6OnVuaXF1ZV9wdHI8VUJyZWFrSXRlcmF0b3IsIFVCcmVha0l0ZXJhdG9yRGVs
ZXRlcj4mJiwgQm94PFZlY3RvcjxVQ2hhcj4+JiYsIEludGxTZWdtZW50ZXI6OkdyYW51bGFyaXR5
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxTZWdtZW50cy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFNlZ21lbnRz
LmNwcAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SW50bFNlZ21lbnRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBD
b3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTA5LDExICsxMTAsMTQgQEAgSlNPYmplY3QqIElu
dGxTZWdtZW50czo6Y3JlYXRlU2VnbWVudEl0ZQogICAgIHJldHVybiBJbnRsU2VnbWVudEl0ZXJh
dG9yOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdC0+c2VnbWVudEl0ZXJhdG9yU3RydWN0dXJlKCks
IFdURk1vdmUoc2VnbWVudGVyKSwgbV9idWZmZXIsIG1fc3RyaW5nLmdldCgpLCBtX2dyYW51bGFy
aXR5KTsKIH0KIAotdm9pZCBJbnRsU2VnbWVudHM6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxs
LCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lk
IEludGxTZWdtZW50czo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2
aXNpdG9yKQogewogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SW50bFNlZ21lbnRzKj4o
Y2VsbCk7CiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKICAg
ICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX3N0cmluZyk7CiB9CiAKK0RFRklORV9WSVNJ
VF9DSElMRFJFTihJbnRsU2VnbWVudHMpOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxTZWdtZW50cy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxTZWdtZW50cy5oCShyZXZpc2lvbiAy
NzMxMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsU2VnbWVudHMuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMjAg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtNTQsNyArNTUsNyBAQCBwdWJsaWM6CiAgICAgSlNWYWx1ZSBjb250YWluaW5nKEpT
R2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBpbmRleFZhbHVlKTsKICAgICBKU09iamVjdCogY3JlYXRl
U2VnbWVudEl0ZXJhdG9yKEpTR2xvYmFsT2JqZWN0Kik7CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNp
dENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElM
RFJFTjsKIAogcHJpdmF0ZToKICAgICBJbnRsU2VnbWVudHMoVk0mLCBTdHJ1Y3R1cmUqLCBzdGQ6
OnVuaXF1ZV9wdHI8VUJyZWFrSXRlcmF0b3IsIFVCcmVha0l0ZXJhdG9yRGVsZXRlcj4mJiwgQm94
PFZlY3RvcjxVQ2hhcj4+JiYsIEludGxTZWdtZW50ZXI6OkdyYW51bGFyaXR5KTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5j
cHAJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
QXJyYXlCdWZmZXJWaWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE1NSw3ICsxNTUsOCBAQCB2
b2lkIEpTQXJyYXlCdWZmZXJWaWV3OjpmaW5pc2hDcmVhdGlvbihWCiAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKIH0KIAotdm9pZCBKU0FycmF5QnVmZmVyVmlldzo6dmlzaXRDaGls
ZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5h
bWUgVmlzaXRvcj4KK3ZvaWQgSlNBcnJheUJ1ZmZlclZpZXc6OnZpc2l0Q2hpbGRyZW5JbXBsKEpT
Q2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU0FycmF5QnVmZmVyVmlldyog
dGhpc09iamVjdCA9IGpzQ2FzdDxKU0FycmF5QnVmZmVyVmlldyo+KGNlbGwpOwogICAgIEFTU0VS
VF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTE2OSw2ICsxNzAs
OCBAQCB2b2lkIEpTQXJyYXlCdWZmZXJWaWV3Ojp2aXNpdENoaWxkcmVuKEpTCiAgICAgfQogfQog
CitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNBcnJheUJ1ZmZlclZpZXcpOworCiBib29sIEpTQXJy
YXlCdWZmZXJWaWV3OjpwdXQoCiAgICAgSlNDZWxsKiBjZWxsLCBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLAogICAg
IFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTQXJyYXlCdWZmZXJWaWV3LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuaAkocmV2aXNpb24gMjczMTE5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuaAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTE3Miw3ICsxNzIsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgCiAgICAgc3RhdGljIGJv
b2wgcHV0KEpTQ2VsbCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBQ
dXRQcm9wZXJ0eVNsb3QmKTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogICAgIAogcHVi
bGljOgogICAgIFR5cGVkQXJyYXlNb2RlIG1vZGUoKSBjb25zdCB7IHJldHVybiBtX21vZGU7IH0K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlJdGVyYXRvci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUl0ZXJh
dG9yLmNwcAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNBcnJheUl0ZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDIwLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02OCwxMSArNjgsMTQgQEAgdm9p
ZCBKU0FycmF5SXRlcmF0b3I6OmZpbmlzaENyZWF0aW9uKFZNJgogICAgICAgICBCYXNlOjppbnRl
cm5hbEZpZWxkKGluZGV4KS5zZXQodm0sIHRoaXMsIHZhbHVlc1tpbmRleF0pOwogfQogCi12b2lk
IEpTQXJyYXlJdGVyYXRvcjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9y
JiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNBcnJheUl0ZXJh
dG9yOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7
CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0FycmF5SXRlcmF0b3IqPihjZWxsKTsK
ICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAgICAg
QmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKIH0KIAorREVGSU5FX1ZJ
U0lUX0NISUxEUkVOKEpTQXJyYXlJdGVyYXRvcik7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUl0ZXJhdG9yLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUl0ZXJhdG9yLmgJ
KHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJy
YXlJdGVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMjAtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTc4LDcgKzc4LDcgQEAgcHVibGljOgogCiAgICAg
REVDTEFSRV9JTkZPOwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBT
bG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKIHByaXZhdGU6CiAg
ICAgSlNBcnJheUl0ZXJhdG9yKFZNJiwgU3RydWN0dXJlKik7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0FzeW5jR2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FzeW5jR2VuZXJhdG9yLmNwcAkocmV2aXNpb24g
MjczMTE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBc3luY0dlbmVyYXRv
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxOS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtNTksMTEgKzU5LDE0IEBAIHZvaWQgSlNBc3luY0dlbmVyYXRv
cjo6ZmluaXNoQ3JlYXRpb24oVk0KICAgICAgICAgaW50ZXJuYWxGaWVsZChpbmRleCkuc2V0KHZt
LCB0aGlzLCB2YWx1ZXNbaW5kZXhdKTsKIH0KIAotdm9pZCBKU0FzeW5jR2VuZXJhdG9yOjp2aXNp
dENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0
eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0FzeW5jR2VuZXJhdG9yOjp2aXNpdENoaWxkcmVuSW1w
bChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0byogdGhpc09iamVj
dCA9IGpzQ2FzdDxKU0FzeW5jR2VuZXJhdG9yKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVD
VF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4o
dGhpc09iamVjdCwgdmlzaXRvcik7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU0FzeW5j
R2VuZXJhdG9yKTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0FzeW5jR2VuZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBc3luY0dlbmVyYXRvci5oCShyZXZpc2lvbiAyNzMxMTkp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FzeW5jR2VuZXJhdG9yLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE5IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOS0yMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtOTUsNyArOTUsNyBAQCBwdWJsaWM6CiAKICAgICBERUNMQVJFX0VYUE9SVF9J
TkZPOwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRv
ciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKIHByaXZhdGU6CiAgICAgSlNBc3lu
Y0dlbmVyYXRvcihWTSYsIFN0cnVjdHVyZSopOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNCaWdJbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQmlnSW50LmNwcAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNCaWdJbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEs
NiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxNyBDYWlvIExpbWEgPHRpY2Fpb2xpbWFAZ21h
aWwuY29tPgotICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02Nyw3ICs2
Nyw4IEBAIEpTQmlnSW50OjpKU0JpZ0ludChWTSYgdm0sIFN0cnVjdHVyZSogc3QKICAgICAsIG1f
ZGF0YSh2bSwgdGhpcywgZGF0YSwgbGVuZ3RoKQogeyB9CiAKLXZvaWQgSlNCaWdJbnQ6OnZpc2l0
Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5
cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTQmlnSW50Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwq
IGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2Fz
dDxKU0JpZ0ludCo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09i
amVjdCwgaW5mbygpKTsKQEAgLTc2LDYgKzc3LDggQEAgdm9pZCBKU0JpZ0ludDo6dmlzaXRDaGls
ZHJlbihKU0NlbGwqIGNlbAogICAgICAgICB2aXNpdG9yLm1hcmtBdXhpbGlhcnkoZGF0YSk7CiB9
CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU0JpZ0ludCk7CisKIHZvaWQgSlNCaWdJbnQ6Omlu
aXRpYWxpemUoSW5pdGlhbGl6YXRpb25UeXBlIGluaXRUeXBlKQogewogICAgIGlmIChpbml0VHlw
ZSA9PSBJbml0aWFsaXphdGlvblR5cGU6OldpdGhaZXJvKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNCaWdJbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0JpZ0ludC5oCShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0JpZ0ludC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEs
NiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxNyBDYWlvIExpbWEgPHRpY2Fpb2xpbWFAZ21h
aWwuY29tPgotICogQ29weXJpZ2h0IChDKSAyMDE5LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE5LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01MCw3ICs1
MCw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZs
YWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBTdHJ1Y3R1cmVJc0ltbW9ydGFsIHwgT3ZlcnJp
ZGVzVG9UaGlzOwogICAgIGZyaWVuZCBjbGFzcyBDYWNoZWRCaWdJbnQ7CiAKLSAgICBzdGF0aWMg
dm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9W
SVNJVF9DSElMRFJFTjsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFj
ZUFjY2Vzcz4KICAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQm91bmRGdW5jdGlvbi5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCb3VuZEZ1bmN0aW9u
LmNwcAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNCb3VuZEZ1bmN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI0OSw3ICsyNDks
OCBAQCB2b2lkIEpTQm91bmRGdW5jdGlvbjo6ZmluaXNoQ3JlYXRpb24oVk0mCiAgICAgQVNTRVJU
KGluaGVyaXRzKHZtLCBpbmZvKCkpKTsKIH0KIAotdm9pZCBKU0JvdW5kRnVuY3Rpb246OnZpc2l0
Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5
cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTQm91bmRGdW5jdGlvbjo6dmlzaXRDaGlsZHJlbkltcGwo
SlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTQm91bmRGdW5jdGlvbiog
dGhpc09iamVjdCA9IGpzQ2FzdDxKU0JvdW5kRnVuY3Rpb24qPihjZWxsKTsKICAgICBBU1NFUlRf
R0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC0yNjEsNCArMjYyLDYg
QEAgdm9pZCBKU0JvdW5kRnVuY3Rpb246OnZpc2l0Q2hpbGRyZW4oSlNDZQogICAgIHZpc2l0b3Iu
YXBwZW5kKHRoaXNPYmplY3QtPm1fbmFtZU1heUJlTnVsbCk7CiB9CiAKK0RFRklORV9WSVNJVF9D
SElMRFJFTihKU0JvdW5kRnVuY3Rpb24pOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQm91bmRGdW5jdGlvbi5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQm91bmRGdW5jdGlvbi5oCShyZXZp
c2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JvdW5kRnVu
Y3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTEtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTEtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTg0LDcgKzg0LDcgQEAgcHJpdmF0ZToKICAgICBK
U0JvdW5kRnVuY3Rpb24oVk0mLCBOYXRpdmVFeGVjdXRhYmxlKiwgSlNHbG9iYWxPYmplY3QqLCBT
dHJ1Y3R1cmUqLCBKU09iamVjdCogdGFyZ2V0RnVuY3Rpb24sIEpTVmFsdWUgYm91bmRUaGlzLCBK
U0ltbXV0YWJsZUJ1dHRlcmZseSogYm91bmRBcmdzLCBKU1N0cmluZyogbmFtZU1heUJlTnVsbCwg
ZG91YmxlIGxlbmd0aCk7CiAKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7Ci0gICAgc3Rh
dGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xB
UkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBXcml0ZUJhcnJpZXI8SlNPYmplY3Q+IG1fdGFyZ2V0
RnVuY3Rpb247CiAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+IG1fYm91bmRUaGlzOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDYWxsZWUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2FsbGVlLmNwcAkocmV2aXNpb24gMjcz
MTE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDYWxsZWUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQt
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTUwLDcgKzUwLDggQEAgdm9pZCBKU0NhbGxlZTo6ZmluaXNoQ3JlYXRp
b24oVk0mIHZtKQogICAgIEFTU0VSVChpbmhlcml0cyh2bSwgaW5mbygpKSk7CiB9CiAKLXZvaWQg
SlNDYWxsZWU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRv
cikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTQ2FsbGVlOjp2aXNpdENoaWxk
cmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNDYWxsZWUq
IHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNDYWxsZWUqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JK
RUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC01OSw0ICs2MCw2IEBAIHZvaWQg
SlNDYWxsZWU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWwKICAgICB2aXNpdG9yLmFwcGVuZCh0
aGlzT2JqZWN0LT5tX3Njb3BlKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTQ2FsbGVl
KTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0NhbGxlZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTQ2FsbGVlLmgJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQ2FsbGVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTAwLDcgKzEwMCw3IEBAIHByb3Rl
Y3RlZDoKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7CiAgICAgdXNpbmcgQmFzZTo6Zmlu
aXNoQ3JlYXRpb247CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNs
b3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogcHJpdmF0ZToKICAg
ICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBA
QAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMSBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBr
ZGUub3JnKQogICogIENvcHlyaWdodCAoQykgMjAwMSBQZXRlciBLZWxseSAocG1rQHBvc3QuY29t
KQotICogIENvcHlyaWdodCAoQykgMjAwMy0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1
ZGUgIkpTTG9jay5oIgogI2luY2x1ZGUgIkpTVHlwZUluZm8uaCIKICNpbmNsdWRlICJTbG90Vmlz
aXRvci5oIgorI2luY2x1ZGUgIlNsb3RWaXNpdG9yTWFjcm9zLmgiCiAjaW5jbHVkZSAiU3Vic3Bh
Y2VBY2Nlc3MuaCIKICNpbmNsdWRlICJUeXBlZEFycmF5VHlwZS5oIgogI2luY2x1ZGUgIldyaXRl
QmFycmllci5oIgpAQCAtMTY3LDggKzE2OCw4IEBAIHB1YmxpYzoKICAgICBzaXplX3QgZXN0aW1h
dGVkU2l6ZUluQnl0ZXMoVk0mKSBjb25zdDsKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMg
c2l6ZV90IGVzdGltYXRlZFNpemUoSlNDZWxsKiwgVk0mKTsKIAotICAgIHN0YXRpYyB2b2lkIHZp
c2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNp
dE91dHB1dENvbnN0cmFpbnRzKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9W
SVNJVF9DSElMRFJFTl9XSVRIX01PRElGSUVSKGlubGluZSk7CisgICAgREVDTEFSRV9WSVNJVF9P
VVRQVVRfQ09OU1RSQUlOVFNfV0lUSF9NT0RJRklFUihpbmxpbmUpOwogCiAgICAgSlNfRVhQT1JU
X1BSSVZBVEUgc3RhdGljIHZvaWQgYW5hbHl6ZUhlYXAoSlNDZWxsKiwgSGVhcEFuYWx5emVyJik7
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbElubGluZXMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGxJbmxpbmVz
LmgJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
Q2VsbElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTItMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTItMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE0MSwxNSArMTQxLDIxIEBAIEFMV0FZ
U19JTkxJTkUgU3RydWN0dXJlKiBKU0NlbGw6OnN0cnVjdHUKICAgICByZXR1cm4gdm0uZ2V0U3Ry
dWN0dXJlKG1fc3RydWN0dXJlSUQpOwogfQogCi1pbmxpbmUgdm9pZCBKU0NlbGw6OnZpc2l0Q2hp
bGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVu
YW1lIFZpc2l0b3I+Cit2b2lkIEpTQ2VsbDo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxs
LCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQoY2Vs
bC0+c3RydWN0dXJlKHZpc2l0b3Iudm0oKSkpOwogfQogCi1pbmxpbmUgdm9pZCBKU0NlbGw6OnZp
c2l0T3V0cHV0Q29uc3RyYWludHMoSlNDZWxsKiwgU2xvdFZpc2l0b3ImKQorREVGSU5FX1ZJU0lU
X0NISUxEUkVOX1dJVEhfTU9ESUZJRVIoaW5saW5lLCBKU0NlbGwpOworCit0ZW1wbGF0ZTx0eXBl
bmFtZSBWaXNpdG9yPgorQUxXQVlTX0lOTElORSB2b2lkIEpTQ2VsbDo6dmlzaXRPdXRwdXRDb25z
dHJhaW50c0ltcGwoSlNDZWxsKiwgVmlzaXRvciYpCiB7CiB9CiAKK0RFRklORV9WSVNJVF9PVVRQ
VVRfQ09OU1RSQUlOVFNfV0lUSF9NT0RJRklFUihpbmxpbmUsIEpTQ2VsbCk7CisKIEFMV0FZU19J
TkxJTkUgVk0mIENhbGxGcmFtZTo6ZGVwcmVjYXRlZFZNKCkgY29uc3QKIHsKICAgICBKU0NlbGwq
IGNhbGxlZSA9IHRoaXMtPmNhbGxlZSgpLmFzQ2VsbCgpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNGaW5hbGl6YXRpb25SZWdpc3RyeS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGaW5hbGl6YXRpb25SZWdpc3RyeS5jcHAJ
KHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRmlu
YWxpemF0aW9uUmVnaXN0cnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDIwLTIwMjEgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYsNiArMjYsNyBAQAogI2lu
Y2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkpTRmluYWxpemF0aW9uUmVnaXN0cnkuaCIKIAor
I2luY2x1ZGUgIkFic3RyYWN0U2xvdFZpc2l0b3IuaCIKICNpbmNsdWRlICJEZWZlcnJlZFdvcmtU
aW1lci5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJKU0ludGVybmFsRmll
bGRPYmplY3RJbXBsSW5saW5lcy5oIgpAQCAtNjAsNyArNjEsOCBAQCB2b2lkIEpTRmluYWxpemF0
aW9uUmVnaXN0cnk6OmZpbmlzaENyZWF0CiAgICAgZ2xvYmFsT2JqZWN0LT5nbG9iYWxPYmplY3RN
ZXRob2RUYWJsZSgpLT5jdXJyZW50U2NyaXB0RXhlY3V0aW9uT3duZXIoZ2xvYmFsT2JqZWN0KTsK
IH0KIAotdm9pZCBKU0ZpbmFsaXphdGlvblJlZ2lzdHJ5Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCog
Y2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgor
dm9pZCBKU0ZpbmFsaXphdGlvblJlZ2lzdHJ5Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNl
bGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbihjZWxsLCB2
aXNpdG9yKTsKIApAQCAtODAsMTMgKzgyLDE1IEBAIHZvaWQgSlNGaW5hbGl6YXRpb25SZWdpc3Ry
eTo6dmlzaXRDaGlsZHIKICAgICBmb3IgKGF1dG8mIGhvbGRpbmdzIDogdGhpc09iamVjdC0+bV9u
b1VucmVnaXN0cmF0aW9uRGVhZCkKICAgICAgICAgdmlzaXRvci5hcHBlbmQoaG9sZGluZ3MpOwog
Ci0gICAgc2l6ZV90IHRvdGFsQnVmZmVyU2l6ZXNJbkJ5dGVzID0gdGhpc09iamVjdC0+bV9kZWFk
UmVnaXN0cmF0aW9ucy5jYXBhY2l0eSgpICogc2l6ZW9mKGRlY2x0eXBlKHRoaXNPYmplY3QtPm1f
ZGVhZFJlZ2lzdHJhdGlvbnMpOjpLZXlWYWx1ZVBhaXJUeXBlKTsKLSAgICB0b3RhbEJ1ZmZlclNp
emVzSW5CeXRlcyArPSB0aGlzT2JqZWN0LT5tX2xpdmVSZWdpc3RyYXRpb25zLmNhcGFjaXR5KCkg
KiBzaXplb2YoZGVjbHR5cGUodGhpc09iamVjdC0+bV9kZWFkUmVnaXN0cmF0aW9ucyk6OktleVZh
bHVlUGFpclR5cGUpOworICAgIHNpemVfdCB0b3RhbEJ1ZmZlclNpemVzSW5CeXRlcyA9IHRoaXNP
YmplY3QtPm1fZGVhZFJlZ2lzdHJhdGlvbnMuY2FwYWNpdHkoKSAqIHNpemVvZih0eXBlbmFtZSBk
ZWNsdHlwZSh0aGlzT2JqZWN0LT5tX2RlYWRSZWdpc3RyYXRpb25zKTo6S2V5VmFsdWVQYWlyVHlw
ZSk7CisgICAgdG90YWxCdWZmZXJTaXplc0luQnl0ZXMgKz0gdGhpc09iamVjdC0+bV9saXZlUmVn
aXN0cmF0aW9ucy5jYXBhY2l0eSgpICogc2l6ZW9mKHR5cGVuYW1lIGRlY2x0eXBlKHRoaXNPYmpl
Y3QtPm1fZGVhZFJlZ2lzdHJhdGlvbnMpOjpLZXlWYWx1ZVBhaXJUeXBlKTsKICAgICB0b3RhbEJ1
ZmZlclNpemVzSW5CeXRlcyArPSB0aGlzT2JqZWN0LT5tX25vVW5yZWdpc3RyYXRpb25MaXZlLmNh
cGFjaXR5KCkgKiBzaXplb2YoZGVjbHR5cGUodGhpc09iamVjdC0+bV9ub1VucmVnaXN0cmF0aW9u
TGl2ZS50YWtlTGFzdCgpKSk7CiAgICAgdG90YWxCdWZmZXJTaXplc0luQnl0ZXMgKz0gdGhpc09i
amVjdC0+bV9ub1VucmVnaXN0cmF0aW9uRGVhZC5jYXBhY2l0eSgpICogc2l6ZW9mKGRlY2x0eXBl
KHRoaXNPYmplY3QtPm1fbm9VbnJlZ2lzdHJhdGlvbkxpdmUudGFrZUxhc3QoKSkpOwogICAgIHZp
c2l0b3Iudm0oKS5oZWFwLnJlcG9ydEV4dHJhTWVtb3J5VmlzaXRlZCh0b3RhbEJ1ZmZlclNpemVz
SW5CeXRlcyk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU0ZpbmFsaXphdGlvblJlZ2lz
dHJ5KTsKKwogdm9pZCBKU0ZpbmFsaXphdGlvblJlZ2lzdHJ5OjpkZXN0cm95KEpTQ2VsbCogdGFi
bGUpCiB7CiAgICAgc3RhdGljX2Nhc3Q8SlNGaW5hbGl6YXRpb25SZWdpc3RyeSo+KHRhYmxlKS0+
fkpTRmluYWxpemF0aW9uUmVnaXN0cnkoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTRmluYWxpemF0aW9uUmVnaXN0cnkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0ZpbmFsaXphdGlvblJlZ2lzdHJ5LmgJKHJldmlzaW9uIDI3
MzExOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRmluYWxpemF0aW9uUmVn
aXN0cnkuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMjAgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAyMC0yMDIxIEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTcwLDcgKzcwLDcgQEAgcHVibGljOgogICAgIERFQ0xB
UkVfRVhQT1JUX0lORk87CiAKICAgICB2b2lkIGZpbmFsaXplVW5jb25kaXRpb25hbGx5KFZNJik7
Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwor
ICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0Nl
bGwqKTsKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNEZXN0cnVjdGlvbiA9IHRydWU7
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uY3Bw
CShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1
bmN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiAgQ29weXJp
Z2h0IChDKSAxOTk5LTIwMDIgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKICAqICBDb3B5
cmlnaHQgKEMpIDIwMDEgUGV0ZXIgS2VsbHkgKHBta0Bwb3N0LmNvbSkKLSAqICBDb3B5cmlnaHQg
KEMpIDIwMDMtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJp
Z2h0IChDKSAyMDAzLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogIENv
cHlyaWdodCAoQykgMjAwNyBDYW1lcm9uIFp3YXJpY2ggKGN3endhcmljaEB1d2F0ZXJsb28uY2Ep
CiAgKiAgQ29weXJpZ2h0IChDKSAyMDA3IE1ha3MgT3Jsb3ZpY2gKICAqICBDb3B5cmlnaHQgKEMp
IDIwMTUgQ2Fub24gSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgpAQCAtMjUyLDcgKzI1Miw4IEBA
IGNvbnN0IFNvdXJjZUNvZGUqIEpTRnVuY3Rpb246OnNvdXJjZUNvZGUKICAgICByZXR1cm4gJmpz
RXhlY3V0YWJsZSgpLT5zb3VyY2UoKTsKIH0KICAgICAKLXZvaWQgSlNGdW5jdGlvbjo6dmlzaXRD
aGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlw
ZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNGdW5jdGlvbjo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxs
KiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTRnVuY3Rpb24qIHRoaXNPYmplY3Qg
PSBqc0Nhc3Q8SlNGdW5jdGlvbio+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJ
VFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTI2MSw2ICsyNjIsOCBAQCB2b2lkIEpTRnVuY3Rp
b246OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjCiAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJl
ZChiaXR3aXNlX2Nhc3Q8SlNDZWxsKj4oYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4odGhpc09iamVj
dC0+bV9leGVjdXRhYmxlT3JSYXJlRGF0YSkgJiB+cmFyZURhdGFUYWcpKTsKIH0KIAorREVGSU5F
X1ZJU0lUX0NISUxEUkVOKEpTRnVuY3Rpb24pOworCiBDYWxsRGF0YSBKU0Z1bmN0aW9uOjpnZXRD
YWxsRGF0YShKU0NlbGwqIGNlbGwpCiB7CiAgICAgLy8gS2VlcCB0aGlzIGZ1bmN0aW9uIE9LIGZv
ciBpbnZvY2F0aW9uIGZyb20gY29uY3VycmVudCBjb21waWxlcnMuCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5oCShyZXZpc2lvbiAyNzMxMTkpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNiArMSw2IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAwIEhhcnJpIFBv
cnRlbiAocG9ydGVuQGtkZS5vcmcpCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMjAgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwMy0yMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqICBDb3B5cmlnaHQgKEMpIDIwMDcgQ2Ft
ZXJvbiBad2FyaWNoIChjd3p3YXJpY2hAdXdhdGVybG9vLmNhKQogICogIENvcHlyaWdodCAoQykg
MjAwNyBNYWtzIE9ybG92aWNoCiAgKgpAQCAtMTgwLDcgKzE4MCw3IEBAIHByb3RlY3RlZDoKIAog
ICAgIHN0YXRpYyBib29sIGRlbGV0ZVByb3BlcnR5KEpTQ2VsbCosIEpTR2xvYmFsT2JqZWN0Kiwg
UHJvcGVydHlOYW1lLCBEZWxldGVQcm9wZXJ0eVNsb3QmKTsKIAotICAgIHN0YXRpYyB2b2lkIHZp
c2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NI
SUxEUkVOOwogCiBwcml2YXRlOgogICAgIHN0YXRpYyBKU0Z1bmN0aW9uKiBjcmVhdGVJbXBsKFZN
JiB2bSwgRnVuY3Rpb25FeGVjdXRhYmxlKiBleGVjdXRhYmxlLCBKU1Njb3BlKiBzY29wZSwgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0dlbmVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0dlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTksMTEgKzU5LDE0
IEBAIHZvaWQgSlNHZW5lcmF0b3I6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKICAgICAgICAgaW50
ZXJuYWxGaWVsZChpbmRleCkuc2V0KHZtLCB0aGlzLCB2YWx1ZXNbaW5kZXhdKTsKIH0KIAotdm9p
ZCBKU0dlbmVyYXRvcjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNHZW5lcmF0b3I6OnZp
c2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBh
dXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTR2VuZXJhdG9yKj4oY2VsbCk7CiAgICAgQVNTRVJU
X0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwogICAgIEJhc2U6OnZpc2l0
Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJF
TihKU0dlbmVyYXRvcik7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyYXRvci5oCShyZXZpc2lvbiAyNzMxMTkpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyYXRvci5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTk0LDcgKzk0LDcgQEAgcHVibGljOgogCiAgICAgREVDTEFSRV9FWFBPUlRfSU5GTzsKIAotICAg
IHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBE
RUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiBwcml2YXRlOgogICAgIEpTR2VuZXJhdG9yKFZNJiwg
U3RydWN0dXJlKik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVy
aWNUeXBlZEFycmF5Vmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmgJKHJldmlzaW9uIDI3MzExOSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0zMTMsNyArMzEzLDcgQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgdm9p
ZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0
eU5hbWVBcnJheSYsIERvbnRFbnVtUHJvcGVydGllc01vZGUpOwogCiAgICAgc3RhdGljIHNpemVf
dCBlc3RpbWF0ZWRTaXplKEpTQ2VsbCosIFZNJik7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGls
ZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47
CiAKICAgICAvLyBSZXR1cm5zIHRydWUgaWYgc3VjY2Vzc2Z1bCwgYW5kIGZhbHNlIG9uIGVycm9y
OyBpdCB3aWxsIHRocm93IG9uIGVycm9yLgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIE90aGVyQWRh
cHRvcj4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVk
QXJyYXlWaWV3SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oCShyZXZpc2lvbiAyNzMxMTkp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmll
d0lubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTUxNyw3ICs1MTcsOCBAQCBzaXplX3QgSlNH
ZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEFk
YXB0b3I+Ci12b2lkIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+Ojp2aXNpdENoaWxk
cmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBWaXNpdG9yPgordm9pZCBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6dmlzaXRD
aGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTR2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTR2VuZXJpY1R5cGVkQXJy
YXlWaWV3Kj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0
LCBpbmZvKCkpOwpAQCAtNTU1LDQgKzU1Niw2IEBAIHZvaWQgSlNHZW5lcmljVHlwZWRBcnJheVZp
ZXc8QWRhcHRvcj46OnYKICAgICB9CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTl9XSVRIX01P
RElGSUVSKHRlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+LCBKU0dlbmVyaWNUeXBlZEFycmF5Vmll
dzxBZGFwdG9yPik7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAkocmV2aXNpb24gMjczMTE5
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNy0y
MDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAw
Ny0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykg
MjAwOCBDYW1lcm9uIFp3YXJpY2ggKGN3endhcmljaEB1d2F0ZXJsb28uY2EpCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CkBAIC0xOTA1LDcgKzE5MDUsOCBAQCB2b2lkIEpTR2xvYmFsT2JqZWN0OjpyZXNldFBy
b3RvdHlwZShWTSYgCiAgICAgc2V0R2xvYmFsVGhpcyh2bSwgSlNQcm94eTo6Y3JlYXRlKHZtLCBK
U1Byb3h5OjpjcmVhdGVTdHJ1Y3R1cmUodm0sIHRoaXMsIHByb3RvdHlwZSwgUHVyZUZvcndhcmRp
bmdQcm94eVR5cGUpLCB0aGlzKSk7CiB9CiAKLXZvaWQgSlNHbG9iYWxPYmplY3Q6OnZpc2l0Q2hp
bGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVu
YW1lIFZpc2l0b3I+Cit2b2lkIEpTR2xvYmFsT2JqZWN0Ojp2aXNpdENoaWxkcmVuSW1wbChKU0Nl
bGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7IAogICAgIEpTR2xvYmFsT2JqZWN0KiB0aGlz
T2JqZWN0ID0ganNDYXN0PEpTR2xvYmFsT2JqZWN0Kj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09C
SkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtMjA3Niw2ICsyMDc3LDggQEAg
dm9pZCBKU0dsb2JhbE9iamVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbAogICAgIHRoaXNPYmplY3Qt
Pm1fcmVnRXhwR2xvYmFsRGF0YS52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKIH0KIAorREVGSU5F
X1ZJU0lUX0NISUxEUkVOX1dJVEhfTU9ESUZJRVIoSlNfRVhQT1JUX1BSSVZBVEUsIEpTR2xvYmFs
T2JqZWN0KTsKKwogQ2FsbEZyYW1lKiBKU0dsb2JhbE9iamVjdDo6ZGVwcmVjYXRlZENhbGxGcmFt
ZUZvckRlYnVnZ2VyKCkKIHsKICAgICByZXR1cm4gQ2FsbEZyYW1lOjpjcmVhdGUobV9kZXByZWNh
dGVkQ2FsbEZyYW1lRm9yRGVidWdnZXIpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNHbG9iYWxPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDYgKzEsNiBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDIwMDcgRXJpYyBTZWlkZWwgPGVy
aWNAd2Via2l0Lm9yZz4KLSAqICBDb3B5cmlnaHQgKEMpIDIwMDctMjAyMCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDA3LTIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTYxOSw3ICs2
MTksNyBAQCBwdWJsaWM6CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgfkpTR2xvYmFsT2JqZWN0KCk7
CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKIAot
ICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwg
U2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOX1dJVEhfTU9ESUZJRVIo
SlNfRVhQT1JUX1BSSVZBVEUpOwogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIGJvb2wg
Z2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5h
bWUsIFByb3BlcnR5U2xvdCYpOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBib29sIHB1
dChKU0NlbGwqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgUHV0UHJv
cGVydHlTbG90Jik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ltbXV0
YWJsZUJ1dHRlcmZseS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNJbW11dGFibGVCdXR0ZXJmbHkuY3BwCShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ltbXV0YWJsZUJ1dHRlcmZseS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOC0yMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMzIsNyArMzIsOCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogY29uc3QgQ2xhc3NJbmZv
IEpTSW1tdXRhYmxlQnV0dGVyZmx5OjpzX2luZm8gPSB7ICJJbW11dGFibGUgQnV0dGVyZmx5Iiwg
bnVsbHB0ciwgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU0ltbXV0YWJs
ZUJ1dHRlcmZseSkgfTsKIAotdm9pZCBKU0ltbXV0YWJsZUJ1dHRlcmZseTo6dmlzaXRDaGlsZHJl
bihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUg
VmlzaXRvcj4KK3ZvaWQgSlNJbW11dGFibGVCdXR0ZXJmbHk6OnZpc2l0Q2hpbGRyZW5JbXBsKEpT
Q2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lO
SEVSSVRTKGNlbGwsIGluZm8oKSk7CiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbihjZWxsLCB2aXNp
dG9yKTsKQEAgLTQ1LDYgKzQ2LDggQEAgdm9pZCBKU0ltbXV0YWJsZUJ1dHRlcmZseTo6dmlzaXRD
aGlsZHJlbgogICAgIHZpc2l0b3IuYXBwZW5kVmFsdWVzSGlkZGVuKGJ1dHRlcmZseS0+Y29udGln
dW91cygpLmRhdGEoKSwgYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKSk7CiB9CiAKK0RFRklORV9W
SVNJVF9DSElMRFJFTihKU0ltbXV0YWJsZUJ1dHRlcmZseSk7CisKIHZvaWQgSlNJbW11dGFibGVC
dXR0ZXJmbHk6OmNvcHlUb0FyZ3VtZW50cyhKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUqIGZpcnN0
RWxlbWVudERlc3QsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQogewogICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNJbW11dGFibGVCdXR0ZXJmbHkuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ltbXV0YWJsZUJ1dHRlcmZseS5oCShyZXZp
c2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ltbXV0YWJs
ZUJ1dHRlcmZseS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxOC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxOC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTQ1LDcgKzE0NSw3IEBAIHB1YmxpYzoK
ICAgICAgICAgcmV0dXJuIGpzRG91YmxlTnVtYmVyKHZhbHVlKTsKICAgICB9CiAKLSAgICBzdGF0
aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFS
RV9WSVNJVF9DSElMRFJFTjsKIAogICAgIHZvaWQgY29weVRvQXJndW1lbnRzKEpTR2xvYmFsT2Jq
ZWN0KiwgSlNWYWx1ZSogZmlyc3RFbGVtZW50RGVzdCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25l
ZCBsZW5ndGgpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ludGVy
bmFsRmllbGRPYmplY3RJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbC5oCShyZXZpc2lvbiAyNzMxMTkpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ludGVybmFsRmllbGRPYmplY3RJbXBs
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
OS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtNjYsNyArNjYsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHB0cmRp
ZmZfdCBvZmZzZXRPZkludGVybmFsRmllbGQodW5zaWduZWQgaW5kZXgpIHsgcmV0dXJuIE9CSkVD
VF9PRkZTRVRPRihKU0ludGVybmFsRmllbGRPYmplY3RJbXBsLCBtX2ludGVybmFsRmllbGRzKSAr
IGluZGV4ICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPik7IH0KIAogcHJvdGVjdGVkOgot
ICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAg
ICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgSlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1w
bChWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQogICAgICAgICA6IEJhc2Uodm0sIHN0cnVj
dHVyZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTSW50ZXJuYWxGaWVs
ZE9iamVjdEltcGxJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbElubGluZXMuaAkocmV2aXNpb24gMjcz
MTE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbnRlcm5hbEZpZWxkT2Jq
ZWN0SW1wbElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE5LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMCw3ICszMCw4IEBACiBuYW1lc3BhY2Ug
SlNDIHsKIAogdGVtcGxhdGU8dW5zaWduZWQgcGFzc2VkTnVtYmVyT2ZJbnRlcm5hbEZpZWxkcz4K
LXZvaWQgSlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbDxwYXNzZWROdW1iZXJPZkludGVybmFsRmll
bGRzPjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQor
dGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1w
bDxwYXNzZWROdW1iZXJPZkludGVybmFsRmllbGRzPjo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxs
KiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nh
c3Q8SlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbCo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpF
Q1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTM4LDQgKzM5LDYgQEAgdm9pZCBK
U0ludGVybmFsRmllbGRPYmplY3RJbXBsPHBhc3NlZE51bQogICAgIHZpc2l0b3IuYXBwZW5kVmFs
dWVzKHRoaXNPYmplY3QtPm1faW50ZXJuYWxGaWVsZHMsIG51bWJlck9mSW50ZXJuYWxGaWVsZHMp
OwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU5fV0lUSF9NT0RJRklFUih0ZW1wbGF0ZTx1bnNp
Z25lZCBwYXNzZWROdW1iZXJPZkludGVybmFsRmllbGRzPiwgSlNJbnRlcm5hbEZpZWxkT2JqZWN0
SW1wbDxwYXNzZWROdW1iZXJPZkludGVybmFsRmllbGRzPik7CisKIH0gLy8gbmFtZXNwYWNlIEpT
QwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMZXhpY2FsRW52aXJvbm1l
bnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTGV4
aWNhbEVudmlyb25tZW50LmNwcAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNMZXhpY2FsRW52aXJvbm1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOC0yMDE5IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDIxIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtMzYsNyArMzYsOCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogY29uc3QgQ2xhc3NJbmZvIEpTTGV4
aWNhbEVudmlyb25tZW50OjpzX2luZm8gPSB7ICJKU0xleGljYWxFbnZpcm9ubWVudCIsICZCYXNl
OjpzX2luZm8sIG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNMZXhpY2Fs
RW52aXJvbm1lbnQpIH07CiAKLXZvaWQgSlNMZXhpY2FsRW52aXJvbm1lbnQ6OnZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1l
IFZpc2l0b3I+Cit2b2lkIEpTTGV4aWNhbEVudmlyb25tZW50Ojp2aXNpdENoaWxkcmVuSW1wbChK
U0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0byogdGhpc09iamVjdCA9
IGpzQ2FzdDxKU0xleGljYWxFbnZpcm9ubWVudCo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpF
Q1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTQ0LDYgKzQ1LDggQEAgdm9pZCBK
U0xleGljYWxFbnZpcm9ubWVudDo6dmlzaXRDaGlsZHJlbgogICAgIHZpc2l0b3IuYXBwZW5kVmFs
dWVzSGlkZGVuKHRoaXNPYmplY3QtPnZhcmlhYmxlcygpLCB0aGlzT2JqZWN0LT5zeW1ib2xUYWJs
ZSgpLT5zY29wZVNpemUoKSk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU0xleGljYWxF
bnZpcm9ubWVudCk7CisKIHZvaWQgSlNMZXhpY2FsRW52aXJvbm1lbnQ6OmFuYWx5emVIZWFwKEpT
Q2VsbCogY2VsbCwgSGVhcEFuYWx5emVyJiBhbmFseXplcikKIHsKICAgICBhdXRvKiB0aGlzT2Jq
ZWN0ID0ganNDYXN0PEpTTGV4aWNhbEVudmlyb25tZW50Kj4oY2VsbCk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xleGljYWxFbnZpcm9ubWVudC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTGV4aWNhbEVudmlyb25tZW50LmgJ
KHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTGV4
aWNhbEVudmlyb25tZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDA4LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMzQsNyArMTM0LDcgQEAgcHJv
dGVjdGVkOgogICAgICAgICB9CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJl
bihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAg
ICAgc3RhdGljIHZvaWQgYW5hbHl6ZUhlYXAoSlNDZWxsKiwgSGVhcEFuYWx5emVyJik7CiB9Owog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01hcEl0ZXJhdG9yLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01hcEl0ZXJhdG9y
LmNwcAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNNYXBJdGVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTcgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIxIEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU3LDEzICs1NywxNiBAQCB2
b2lkIEpTTWFwSXRlcmF0b3I6OmZpbmlzaENyZWF0aW9uKFZNJiB2CiAgICAgICAgIEJhc2U6Omlu
dGVybmFsRmllbGQoaW5kZXgpLnNldCh2bSwgdGhpcywgdmFsdWVzW2luZGV4XSk7CiB9CiAKLXZv
aWQgSlNNYXBJdGVyYXRvcjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9y
JiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNNYXBJdGVyYXRv
cjo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewog
ICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNNYXBJdGVyYXRvcio+KGNlbGwpOwogICAg
IEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKICAgICBCYXNl
Ojp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwogfQogCitERUZJTkVfVklTSVRf
Q0hJTERSRU4oSlNNYXBJdGVyYXRvcik7CisKIEpTVmFsdWUgSlNNYXBJdGVyYXRvcjo6Y3JlYXRl
UGFpcihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIGtleSwgSlNWYWx1ZSB2
YWx1ZSkKIHsKICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdzOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNYXBJdGVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTWFwSXRlcmF0b3IuaAkocmV2aXNpb24gMjczMTE5
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNYXBJdGVyYXRvci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMywgMjAx
NiBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMjEgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMTQyLDcgKzE0Miw3IEBAIHByaXZhdGU6CiAgICAgSlNfRVhQT1JU
X1BSSVZBVEUgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIEpTTWFwKiwgSXRlcmF0aW9uS2luZCk7
CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOwogICAgIEpTVmFsdWUgY3JlYXRlUGFpcihK
U0dsb2JhbE9iamVjdCosIEpTVmFsdWUsIEpTVmFsdWUpOwotICAgIHN0YXRpYyB2b2lkIHZpc2l0
Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxE
UkVOOwogfTsKIFNUQVRJQ19BU1NFUlRfSVNfVFJJVklBTExZX0RFU1RSVUNUSUJMRShKU01hcEl0
ZXJhdG9yKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVF
bnZpcm9ubWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNNb2R1bGVFbnZpcm9ubWVudC5jcHAJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlRW52aXJvbm1lbnQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE5IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtNjUsNyArNjUsOCBAQCB2b2lkIEpTTW9kdWxlRW52aXJvbm1lbnQ6OmZpbmlzaENy
ZWF0aW9uCiAgICAgdGhpcy0+bW9kdWxlUmVjb3JkU2xvdCgpLnNldCh2bSwgdGhpcywgbW9kdWxl
UmVjb3JkKTsKIH0KIAotdm9pZCBKU01vZHVsZUVudmlyb25tZW50Ojp2aXNpdENoaWxkcmVuKEpT
Q2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNp
dG9yPgordm9pZCBKU01vZHVsZUVudmlyb25tZW50Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwq
IGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNNb2R1bGVFbnZpcm9ubWVudCogdGhp
c09iamVjdCA9IGpzQ2FzdDxKU01vZHVsZUVudmlyb25tZW50Kj4oY2VsbCk7CiAgICAgQVNTRVJU
X0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNzQsNiArNzUsOCBA
QCB2b2lkIEpTTW9kdWxlRW52aXJvbm1lbnQ6OnZpc2l0Q2hpbGRyZW4oCiAgICAgdmlzaXRvci5h
cHBlbmQodGhpc09iamVjdC0+bW9kdWxlUmVjb3JkU2xvdCgpKTsKIH0KIAorREVGSU5FX1ZJU0lU
X0NISUxEUkVOKEpTTW9kdWxlRW52aXJvbm1lbnQpOworCiBib29sIEpTTW9kdWxlRW52aXJvbm1l
bnQ6OmdldE93blByb3BlcnR5U2xvdChKU09iamVjdCogY2VsbCwgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90
KQogewogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlRW52aXJvbm1lbnQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZUVudmlyb25tZW50LmgJKHJldmlz
aW9uIDI3MzExOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlRW52
aXJvbm1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTUtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTUtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTg5LDcgKzg5LDcgQEAgcHJpdmF0ZToKICAg
ICAgICAgcmV0dXJuICpiaXR3aXNlX2Nhc3Q8V3JpdGVCYXJyaWVyQmFzZTxBYnN0cmFjdE1vZHVs
ZVJlY29yZD4qPihiaXR3aXNlX2Nhc3Q8Y2hhcio+KHRoaXMpICsgb2Zmc2V0T2ZNb2R1bGVSZWNv
cmQoc3ltYm9sVGFibGUoKSkpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwog
fTsKIAogaW5saW5lIEpTTW9kdWxlRW52aXJvbm1lbnQ6OkpTTW9kdWxlRW52aXJvbm1lbnQoVk0m
IHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNTY29wZSogY3VycmVudFNjb3BlLCBTeW1ib2xU
YWJsZSogc3ltYm9sVGFibGUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U01vZHVsZU5hbWVzcGFjZU9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QuY3BwCShyZXZpc2lvbiAyNzMx
MTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZU5hbWVzcGFjZU9i
amVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDE1LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE1LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC04NSw3ICs4NSw4IEBAIHZvaWQgSlNNb2R1bGVO
YW1lc3BhY2VPYmplY3Q6OmRlc3Ryb3koSlMKICAgICB0aGlzT2JqZWN0LT5KU01vZHVsZU5hbWVz
cGFjZU9iamVjdDo6fkpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0KCk7CiB9CiAKLXZvaWQgSlNNb2R1
bGVOYW1lc3BhY2VPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRv
ciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTTW9kdWxlTmFt
ZXNwYWNlT2JqZWN0Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZp
c2l0b3IpCiB7CiAgICAgSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nh
c3Q8SlNNb2R1bGVOYW1lc3BhY2VPYmplY3QqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNU
X0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC05OCw2ICs5OSw4IEBAIHZvaWQgSlNN
b2R1bGVOYW1lc3BhY2VPYmplY3Q6OnZpc2l0Q2hpbGQKICAgICB9CiB9CiAKK0RFRklORV9WSVNJ
VF9DSElMRFJFTihKU01vZHVsZU5hbWVzcGFjZU9iamVjdCk7CisKIHN0YXRpYyBKU1ZhbHVlIGdl
dFZhbHVlKEpTTW9kdWxlRW52aXJvbm1lbnQqIGVudmlyb25tZW50LCBQcm9wZXJ0eU5hbWUgbG9j
YWxOYW1lLCBTY29wZU9mZnNldCYgc2NvcGVPZmZzZXQpCiB7CiAgICAgU3ltYm9sVGFibGUqIHN5
bWJvbFRhYmxlID0gZW52aXJvbm1lbnQtPnN5bWJvbFRhYmxlKCk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZU5hbWVzcGFjZU9iamVjdC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlTmFtZXNwYWNlT2JqZWN0
LmgJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
TW9kdWxlTmFtZXNwYWNlT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03Miw3ICs3Miw3IEBA
IHB1YmxpYzoKIHByaXZhdGU6CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgSlNNb2R1bGVOYW1lc3Bh
Y2VPYmplY3QoVk0mLCBTdHJ1Y3R1cmUqKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGZp
bmlzaENyZWF0aW9uKEpTR2xvYmFsT2JqZWN0KiwgQWJzdHJhY3RNb2R1bGVSZWNvcmQqLCBWZWN0
b3I8c3RkOjpwYWlyPElkZW50aWZpZXIsIEFic3RyYWN0TW9kdWxlUmVjb3JkOjpSZXNvbHV0aW9u
Pj4mJik7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRv
ciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAgICAgYm9vbCBnZXRPd25Qcm9wZXJ0
eVNsb3RDb21tb24oSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYp
OwogCiAgICAgc3RydWN0IEV4cG9ydEVudHJ5IHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTTW9kdWxlUmVjb3JkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU01vZHVsZVJlY29yZC5jcHAJKHJldmlzaW9uIDI3MzExOSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlUmVjb3JkLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxOSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTcwLDcgKzcwLDggQEAgdm9pZCBKU01vZHVsZVJlY29yZDo6ZmluaXNoQ3Jl
YXRpb24oSlNHbAogICAgIEFTU0VSVChpbmhlcml0cyh2bSwgaW5mbygpKSk7CiB9CiAKLXZvaWQg
SlNNb2R1bGVSZWNvcmQ6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYg
dmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTTW9kdWxlUmVjb3Jk
Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAg
ICAgSlNNb2R1bGVSZWNvcmQqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNNb2R1bGVSZWNvcmQqPihj
ZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7
CkBAIC03OCw2ICs3OSw4IEBAIHZvaWQgSlNNb2R1bGVSZWNvcmQ6OnZpc2l0Q2hpbGRyZW4oSlND
ZWwKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX21vZHVsZVByb2dyYW1FeGVjdXRh
YmxlKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTTW9kdWxlUmVjb3JkKTsKKwogdm9p
ZCBKU01vZHVsZVJlY29yZDo6bGluayhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1Zh
bHVlIHNjcmlwdEZldGNoZXIpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVSZWNvcmQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZVJlY29yZC5o
CShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01v
ZHVsZVJlY29yZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjYsNyArNjYsNyBAQCBwcml2YXRlOgog
CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0dsb2JhbE9iamVjdCosIFZNJik7CiAKLSAgICBz
dGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVD
TEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIHZvaWQgaW5zdGFudGlhdGVEZWNsYXJhdGlvbnMo
SlNHbG9iYWxPYmplY3QqLCBNb2R1bGVQcm9ncmFtRXhlY3V0YWJsZSosIEpTVmFsdWUgc2NyaXB0
RmV0Y2hlcik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTmF0aXZl
U3RkRnVuY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTTmF0aXZlU3RkRnVuY3Rpb24uY3BwCShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU05hdGl2ZVN0ZEZ1bmN0aW9uLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTQxLDEzICs0MSwxNiBAQCBKU05hdGl2ZVN0ZEZ1bmN0aW9uOjpKU05hdGl2ZVN0
ZEZ1bmN0aW9uCiB7CiB9CiAKLXZvaWQgSlNOYXRpdmVTdGRGdW5jdGlvbjo6dmlzaXRDaGlsZHJl
bihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUg
VmlzaXRvcj4KK3ZvaWQgSlNOYXRpdmVTdGRGdW5jdGlvbjo6dmlzaXRDaGlsZHJlbkltcGwoSlND
ZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTTmF0aXZlU3RkRnVuY3Rpb24q
IHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNOYXRpdmVTdGRGdW5jdGlvbio+KGNlbGwpOwogICAgIEFT
U0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKICAgICBCYXNlOjp2
aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwogfQogCitERUZJTkVfVklTSVRfQ0hJ
TERSRU4oSlNOYXRpdmVTdGRGdW5jdGlvbik7CisKIHZvaWQgSlNOYXRpdmVTdGRGdW5jdGlvbjo6
ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBOYXRpdmVFeGVjdXRhYmxlKiBleGVjdXRhYmxlLCB1bnNp
Z25lZCBsZW5ndGgsIGNvbnN0IFN0cmluZyYgbmFtZSkKIHsKICAgICBCYXNlOjpmaW5pc2hDcmVh
dGlvbih2bSwgZXhlY3V0YWJsZSwgbGVuZ3RoLCBuYW1lKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTTmF0aXZlU3RkRnVuY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU05hdGl2ZVN0ZEZ1bmN0aW9uLmgJKHJldmlzaW9u
IDI3MzExOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTmF0aXZlU3RkRnVu
Y3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTUtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTUtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY1LDcgKzY1LDcgQEAgcHVibGljOgogcHJpdmF0
ZToKICAgICBKU05hdGl2ZVN0ZEZ1bmN0aW9uKFZNJiwgTmF0aXZlRXhlY3V0YWJsZSosIEpTR2xv
YmFsT2JqZWN0KiwgU3RydWN0dXJlKiwgTmF0aXZlU3RkRnVuY3Rpb24mJik7CiAgICAgdm9pZCBm
aW5pc2hDcmVhdGlvbihWTSYsIE5hdGl2ZUV4ZWN1dGFibGUqLCB1bnNpZ25lZCBsZW5ndGgsIGNv
bnN0IFN0cmluZyYgbmFtZSk7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwq
LCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBOYXRp
dmVTdGRGdW5jdGlvbiBtX2Z1bmN0aW9uOwogfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU09iamVjdC5jcHAJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw3ICsx
LDcgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDEgSGFycmkgUG9ydGVuIChwb3J0
ZW5Aa2RlLm9yZykKICAqICBDb3B5cmlnaHQgKEMpIDIwMDEgUGV0ZXIgS2VsbHkgKHBta0Bwb3N0
LmNvbSkKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICogIENvcHlyaWdodCAoQykgMjAwNyBFcmljIFNlaWRlbCAoZXJpY0B3
ZWJraXQub3JnKQogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBAIC03Myw3ICs3Myw4IEBAIGNvbnN0IENsYXNzSW5m
byBKU09iamVjdDo6c19pbmZvID0geyAiT2IKIAogY29uc3QgQ2xhc3NJbmZvIEpTRmluYWxPYmpl
Y3Q6OnNfaW5mbyA9IHsgIk9iamVjdCIsICZCYXNlOjpzX2luZm8sIG51bGxwdHIsIG51bGxwdHIs
IENSRUFURV9NRVRIT0RfVEFCTEUoSlNGaW5hbE9iamVjdCkgfTsKIAotQUxXQVlTX0lOTElORSB2
b2lkIEpTT2JqZWN0OjptYXJrQXV4aWxpYXJ5QW5kVmlzaXRPdXRPZkxpbmVQcm9wZXJ0aWVzKFNs
b3RWaXNpdG9yJiB2aXNpdG9yLCBCdXR0ZXJmbHkqIGJ1dHRlcmZseSwgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IG1heE9mZnNldCkKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0
b3I+CitBTFdBWVNfSU5MSU5FIHZvaWQgSlNPYmplY3Q6Om1hcmtBdXhpbGlhcnlBbmRWaXNpdE91
dE9mTGluZVByb3BlcnRpZXMoVmlzaXRvciYgdmlzaXRvciwgQnV0dGVyZmx5KiBidXR0ZXJmbHks
IFN0cnVjdHVyZSogc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBtYXhPZmZzZXQpCiB7CiAgICAg
Ly8gV2UgY2FsbCB0aGlzIHdoZW4gd2UgZm91bmQgZXZlcnl0aGluZyB3aXRob3V0IHJhY2VzLgog
ICAgIEFTU0VSVChzdHJ1Y3R1cmUpOwpAQCAtMTA0LDcgKzEwNSw4IEBAIEFMV0FZU19JTkxJTkUg
dm9pZCBKU09iamVjdDo6bWFya0F1eGlsaWEKICAgICB2aXNpdG9yLmFwcGVuZFZhbHVlc0hpZGRl
bihidXR0ZXJmbHktPnByb3BlcnR5U3RvcmFnZSgpIC0gb3V0T2ZMaW5lU2l6ZSwgb3V0T2ZMaW5l
U2l6ZSk7CiB9CiAKLUFMV0FZU19JTkxJTkUgU3RydWN0dXJlKiBKU09iamVjdDo6dmlzaXRCdXR0
ZXJmbHkoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgor
QUxXQVlTX0lOTElORSBTdHJ1Y3R1cmUqIEpTT2JqZWN0Ojp2aXNpdEJ1dHRlcmZseShWaXNpdG9y
JiB2aXNpdG9yKQogewogICAgIHN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCByYWNlUmVhc29uID0g
IkpTT2JqZWN0Ojp2aXNpdEJ1dHRlcmZseSI7CiAgICAgU3RydWN0dXJlKiByZXN1bHQgPSB2aXNp
dEJ1dHRlcmZseUltcGwodmlzaXRvcik7CkBAIC0xMTMsNyArMTE1LDggQEAgQUxXQVlTX0lOTElO
RSBTdHJ1Y3R1cmUqIEpTT2JqZWN0Ojp2aXNpdAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUFM
V0FZU19JTkxJTkUgU3RydWN0dXJlKiBKU09iamVjdDo6dmlzaXRCdXR0ZXJmbHlJbXBsKFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK0FMV0FZU19JTkxJ
TkUgU3RydWN0dXJlKiBKU09iamVjdDo6dmlzaXRCdXR0ZXJmbHlJbXBsKFZpc2l0b3ImIHZpc2l0
b3IpCiB7CiAgICAgVk0mIHZtID0gdmlzaXRvci52bSgpOwogICAgIApAQCAtNDEzLDI0ICs0MTYs
MjAgQEAgc2l6ZV90IEpTT2JqZWN0Ojplc3RpbWF0ZWRTaXplKEpTQ2VsbCogYwogICAgIHJldHVy
biBCYXNlOjplc3RpbWF0ZWRTaXplKGNlbGwsIHZtKSArIGJ1dHRlcmZseU91dE9mTGluZVNpemU7
CiB9CiAKLXZvaWQgSlNPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90Vmlz
aXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTT2JqZWN0
Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAg
ICAgSlNPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNPYmplY3QqPihjZWxsKTsKICAgICBB
U1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7Ci0jaWYgQVNTRVJU
X0VOQUJMRUQKLSAgICBib29sIHdhc0NoZWNraW5nRm9yRGVmYXVsdE1hcmtWaW9sYXRpb24gPSB2
aXNpdG9yLm1faXNDaGVja2luZ0ZvckRlZmF1bHRNYXJrVmlvbGF0aW9uOwotICAgIHZpc2l0b3Iu
bV9pc0NoZWNraW5nRm9yRGVmYXVsdE1hcmtWaW9sYXRpb24gPSBmYWxzZTsKLSNlbmRpZgotICAg
IAorICAgIHR5cGVuYW1lIFZpc2l0b3I6OkRlZmF1bHRNYXJraW5nVmlvbGF0aW9uQXNzZXJ0aW9u
U2NvcGUgYXNzZXJ0aW9uU2NvcGUodmlzaXRvcik7CisKICAgICBKU0NlbGw6OnZpc2l0Q2hpbGRy
ZW4odGhpc09iamVjdCwgdmlzaXRvcik7Ci0gICAgCisKICAgICB0aGlzT2JqZWN0LT52aXNpdEJ1
dHRlcmZseSh2aXNpdG9yKTsKLSAgICAKLSNpZiBBU1NFUlRfRU5BQkxFRAotICAgIHZpc2l0b3Iu
bV9pc0NoZWNraW5nRm9yRGVmYXVsdE1hcmtWaW9sYXRpb24gPSB3YXNDaGVja2luZ0ZvckRlZmF1
bHRNYXJrVmlvbGF0aW9uOwotI2VuZGlmCiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTl9XSVRI
X01PRElGSUVSKEpTX0VYUE9SVF9QUklWQVRFLCBKU09iamVjdCk7CisKIHZvaWQgSlNPYmplY3Q6
OmFuYWx5emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFuYWx5emVyJiBhbmFseXplcikKIHsKICAg
ICBKU09iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU09iamVjdCo+KGNlbGwpOwpAQCAtNDY5
LDE0ICs0NjgsMTIgQEAgdm9pZCBKU09iamVjdDo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLAog
ICAgIH0KIH0KIAotdm9pZCBKU0ZpbmFsT2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2Vs
bCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9p
ZCBKU0ZpbmFsT2JqZWN0Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3Im
IHZpc2l0b3IpCiB7CiAgICAgSlNGaW5hbE9iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0Zp
bmFsT2JqZWN0Kj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2Jq
ZWN0LCBpbmZvKCkpOwotI2lmIEFTU0VSVF9FTkFCTEVECi0gICAgYm9vbCB3YXNDaGVja2luZ0Zv
ckRlZmF1bHRNYXJrVmlvbGF0aW9uID0gdmlzaXRvci5tX2lzQ2hlY2tpbmdGb3JEZWZhdWx0TWFy
a1Zpb2xhdGlvbjsKLSAgICB2aXNpdG9yLm1faXNDaGVja2luZ0ZvckRlZmF1bHRNYXJrVmlvbGF0
aW9uID0gZmFsc2U7Ci0jZW5kaWYKKyAgICB0eXBlbmFtZSBWaXNpdG9yOjpEZWZhdWx0TWFya2lu
Z1Zpb2xhdGlvbkFzc2VydGlvblNjb3BlIGFzc2VydGlvblNjb3BlKHZpc2l0b3IpOwogICAgIAog
ICAgIEpTQ2VsbDo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKICAgICAKQEAg
LTQ4NCwxMiArNDgxLDEwIEBAIHZvaWQgSlNGaW5hbE9iamVjdDo6dmlzaXRDaGlsZHJlbihKU0Nl
bGwKICAgICAgICAgaWYgKHVuc2lnbmVkIHN0b3JhZ2VTaXplID0gc3RydWN0dXJlLT5pbmxpbmVT
aXplKCkpCiAgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZFZhbHVlc0hpZGRlbih0aGlzT2JqZWN0
LT5pbmxpbmVTdG9yYWdlKCksIHN0b3JhZ2VTaXplKTsKICAgICB9Ci0gICAgCi0jaWYgQVNTRVJU
X0VOQUJMRUQKLSAgICB2aXNpdG9yLm1faXNDaGVja2luZ0ZvckRlZmF1bHRNYXJrVmlvbGF0aW9u
ID0gd2FzQ2hlY2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlvbjsKLSNlbmRpZgogfQogCitERUZJ
TkVfVklTSVRfQ0hJTERSRU5fV0lUSF9NT0RJRklFUihKU19FWFBPUlRfUFJJVkFURSwgSlNGaW5h
bE9iamVjdCk7CisKIFN0cmluZyBKU09iamVjdDo6Y2xhc3NOYW1lKGNvbnN0IEpTT2JqZWN0KiBv
YmplY3QsIFZNJiB2bSkKIHsKICAgICBjb25zdCBDbGFzc0luZm8qIGluZm8gPSBvYmplY3QtPmNs
YXNzSW5mbyh2bSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVj
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0
LmgJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
T2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSw3IEBACiAvKgogICogIENvcHlyaWdo
dCAoQykgMTk5OS0yMDAxIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCiAgKiAgQ29weXJp
Z2h0IChDKSAyMDAxIFBldGVyIEtlbGx5IChwbWtAcG9zdC5jb20pCi0gKiAgQ29weXJpZ2h0IChD
KSAyMDAzLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdo
dCAoQykgMjAwMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiAg
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCkBAIC0xMDgsOCArMTA4LDkgQEAgY2xhc3MgSlNPYmplY3QgOiBwdWJsaWMg
SlNDZWxsIHsKIHB1YmxpYzoKICAgICB1c2luZyBCYXNlID0gSlNDZWxsOwogCisgICAgREVDTEFS
RV9WSVNJVF9DSElMRFJFTl9XSVRIX01PRElGSUVSKEpTX0VYUE9SVF9QUklWQVRFKTsKKwogICAg
IEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBzaXplX3QgZXN0aW1hdGVkU2l6ZShKU0NlbGwqLCBW
TSYpOwotICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlND
ZWxsKiwgU2xvdFZpc2l0b3ImKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBh
bmFseXplSGVhcChKU0NlbGwqLCBIZWFwQW5hbHl6ZXImKTsKIAogICAgIEpTX0VYUE9SVF9QUklW
QVRFIHN0YXRpYyBTdHJpbmcgY2xhc3NOYW1lKGNvbnN0IEpTT2JqZWN0KiwgVk0mKTsKQEAgLTk4
MiwxMSArOTgzLDExIEBAIHByb3RlY3RlZDoKICAgICBKU09iamVjdChWTSYsIFN0cnVjdHVyZSos
IEJ1dHRlcmZseSogPSBudWxscHRyKTsKICAgICAKICAgICAvLyBWaXNpdHMgdGhlIGJ1dHRlcmZs
eSB1bmxlc3MgdGhlcmUgaXMgYSByYWNlLiBSZXR1cm5zIHRoZSBzdHJ1Y3R1cmUgaWYgdGhlcmUg
d2FzIG5vIHJhY2UuCi0gICAgU3RydWN0dXJlKiB2aXNpdEJ1dHRlcmZseShTbG90VmlzaXRvciYp
OworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IFN0cnVjdHVyZSogdmlzaXRCdXR0ZXJm
bHkoVmlzaXRvciYpOwogICAgIAotICAgIFN0cnVjdHVyZSogdmlzaXRCdXR0ZXJmbHlJbXBsKFNs
b3RWaXNpdG9yJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gU3RydWN0dXJlKiB2
aXNpdEJ1dHRlcmZseUltcGwoVmlzaXRvciYpOwogICAgIAotICAgIHZvaWQgbWFya0F1eGlsaWFy
eUFuZFZpc2l0T3V0T2ZMaW5lUHJvcGVydGllcyhTbG90VmlzaXRvciYsIEJ1dHRlcmZseSosIFN0
cnVjdHVyZSosIFByb3BlcnR5T2Zmc2V0IG1heE9mZnNldCk7CisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgVmlzaXRvcj4gdm9pZCBtYXJrQXV4aWxpYXJ5QW5kVmlzaXRPdXRPZkxpbmVQcm9wZXJ0aWVz
KFZpc2l0b3ImLCBCdXR0ZXJmbHkqLCBTdHJ1Y3R1cmUqLCBQcm9wZXJ0eU9mZnNldCBtYXhPZmZz
ZXQpOwogCiAgICAgLy8gQ2FsbCB0aGlzIGlmIHlvdSBrbm93IHRoYXQgdGhlIG9iamVjdCBpcyBp
biBhIG1vZGUgd2hlcmUgaXQgaGFzIGFycmF5CiAgICAgLy8gc3RvcmFnZS4gVGhpcyB3aWxsIGFz
c2VydCBvdGhlcndpc2UuCkBAIC0xMTc0LDggKzExNzUsNiBAQCBwcm90ZWN0ZWQ6CiAgICAgfQog
fTsKIAotY2xhc3MgSlNGaW5hbE9iamVjdDsKLQogLy8gSlNGaW5hbE9iamVjdCBpcyBhIHR5cGUg
b2YgSlNPYmplY3QgdGhhdCBjb250YWlucyBzdWZmaWNpZW50IGludGVybmFsCiAvLyBzdG9yYWdl
IHRvIGZ1bGx5IG1ha2UgdXNlIG9mIHRoZSBjb2xsZWN0b3IgY2VsbCBjb250YWluaW5nIGl0Lgog
Y2xhc3MgSlNGaW5hbE9iamVjdCBmaW5hbCA6IHB1YmxpYyBKU09iamVjdCB7CkBAIC0xMjE0LDE1
ICsxMjEzLDEzIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZt
LCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgdHlwZUluZm8oKSwgaW5mbygpLCBkZWZhdWx0SW5k
ZXhpbmdUeXBlLCBpbmxpbmVDYXBhY2l0eSk7CiAgICAgfQogCi0gICAgSlNfRVhQT1JUX1BSSVZB
VEUgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAg
IERFQ0xBUkVfVklTSVRfQ0hJTERSRU5fV0lUSF9NT0RJRklFUihKU19FWFBPUlRfUFJJVkFURSk7
CiAKICAgICBERUNMQVJFX0VYUE9SVF9JTkZPOwogCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFz
cyBMTEludE9mZnNldHNFeHRyYWN0b3I7CiAKLSAgICB2b2lkIHZpc2l0Q2hpbGRyZW5Db21tb24o
U2xvdFZpc2l0b3ImKTsKLQogICAgIGV4cGxpY2l0IEpTRmluYWxPYmplY3QoVk0mIHZtLCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSwgQnV0dGVyZmx5KiBidXR0ZXJmbHkpCiAgICAgICAgIDogSlNPYmpl
Y3Qodm0sIHN0cnVjdHVyZSwgYnV0dGVyZmx5KQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTUHJvbWlzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9taXNlLmNwcAkocmV2aXNpb24gMjczMTE5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9taXNlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTY3LDEzICs2NywxNiBAQCB2b2lkIEpTUHJvbWlzZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZt
KQogICAgICAgICBCYXNlOjppbnRlcm5hbEZpZWxkKGluZGV4KS5zZXQodm0sIHRoaXMsIHZhbHVl
c1tpbmRleF0pOwogfQogCi12b2lkIEpTUHJvbWlzZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNl
bGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3Zv
aWQgSlNQcm9taXNlOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZp
c2l0b3IpCiB7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Byb21pc2UqPihjZWxs
KTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAg
ICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKIH0KIAorREVGSU5F
X1ZJU0lUX0NISUxEUkVOKEpTUHJvbWlzZSk7CisKIGF1dG8gSlNQcm9taXNlOjpzdGF0dXMoVk0m
KSBjb25zdCAtPiBTdGF0dXMKIHsKICAgICBKU1ZhbHVlIHZhbHVlID0gaW50ZXJuYWxGaWVsZChG
aWVsZDo6RmxhZ3MpLmdldCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNQcm9taXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNQcm9taXNlLmgJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTUHJvbWlzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTk2LDcgKzk2LDcgQEAgcHVibGljOgog
ICAgIH07CiAgICAgc3RhdGljIERlZmVycmVkRGF0YSBjcmVhdGVEZWZlcnJlZERhdGEoSlNHbG9i
YWxPYmplY3QqLCBKU1Byb21pc2VDb25zdHJ1Y3RvciopOwogCi0gICAgc3RhdGljIHZvaWQgdmlz
aXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJ
TERSRU47CiAKIHByb3RlY3RlZDoKICAgICBKU1Byb21pc2UoVk0mLCBTdHJ1Y3R1cmUqKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVydHlOYW1lRW51bWVyYXRv
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9w
ZXJ0eU5hbWVFbnVtZXJhdG9yLmNwcAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxOSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTcwLDcgKzcwLDggQEAgdm9pZCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmZp
bmlzaENyZQogICAgIH0KIH0KIAotdm9pZCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OnZpc2l0
Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5
cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6dmlzaXRDaGls
ZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTUHJvcGVy
dHlOYW1lRW51bWVyYXRvciogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Byb3BlcnR5TmFtZUVudW1l
cmF0b3IqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3Qs
IGluZm8oKSk7CkBAIC04Nyw2ICs4OCw4IEBAIHZvaWQgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9y
Ojp2aXNpdENoaWwKICAgICB9CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU1Byb3BlcnR5
TmFtZUVudW1lcmF0b3IpOworCiAvLyBGSVhNRTogQXNzZXJ0IHRoYXQgcHJvcGVydGllcyByZXR1
cm5lZCBieSBnZXRPd25Qcm9wZXJ0eU5hbWVzKCkgYXJlIHJlcG9ydGVkIGVudW1lcmFibGUgYnkg
Z2V0T3duUHJvcGVydHlTbG90KCkuCiAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjE5OTI2CiB2b2lkIGdldEVudW1lcmFibGVQcm9wZXJ0eU5hbWVzKEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTT2JqZWN0KiBiYXNlLCBQcm9wZXJ0eU5hbWVBcnJheSYg
cHJvcGVydHlOYW1lcywgdWludDMyX3QmIGluZGV4ZWRMZW5ndGgsIHVpbnQzMl90JiBzdHJ1Y3R1
cmVQcm9wZXJ0eUNvdW50KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQ
cm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmgJKHJldmlzaW9uIDI3MzExOSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVydHlOYW1lRW51bWVyYXRv
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxNC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODQsNyArODQsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJl
dHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLCBtX3Byb3BlcnR5
TmFtZXMpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwg
U2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiBwcml2YXRlOgog
ICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3h5LmNwcAkocmV2aXNpb24gMjczMTE5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm94eS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTIsIDIwMTYtMjAxNyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTM1LDcgKzM1LDggQEAgU1RBVElDX0FTU0VSVF9JU19UUklWSUFMTFlfREVT
VFJVQ1RJQkxFKAogCiBjb25zdCBDbGFzc0luZm8gSlNQcm94eTo6c19pbmZvID0geyAiSlNQcm94
eSIsICZCYXNlOjpzX2luZm8sIG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUo
SlNQcm94eSkgfTsKIAotdm9pZCBKU1Byb3h5Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwg
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBK
U1Byb3h5Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3Ip
CiB7CiAgICAgSlNQcm94eSogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Byb3h5Kj4oY2VsbCk7CiAg
ICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNDMs
NiArNDQsOCBAQCB2b2lkIEpTUHJveHk6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsCiAgICAg
dmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV90YXJnZXQpOwogfQogCitERUZJTkVfVklTSVRf
Q0hJTERSRU5fV0lUSF9NT0RJRklFUihKU19FWFBPUlRfUFJJVkFURSwgSlNQcm94eSk7CisKIHZv
aWQgSlNQcm94eTo6c2V0VGFyZ2V0KFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCkKIHsKICAgICBtX3RhcmdldC5zZXQodm0sIHRoaXMsIGdsb2JhbE9iamVjdCk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3h5LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm94eS5oCShyZXZpc2lvbiAyNzMxMTkpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3h5LmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLTIwMjAgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMjEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC04NSw3ICs4NSw3IEBAIHByb3RlY3RlZDoKICAgICAgICAgbV90YXJnZXQuc2V0KHZtLCB0
aGlzLCB0YXJnZXQpOwogICAgIH0KIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lk
IHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lU
X0NISUxEUkVOX1dJVEhfTU9ESUZJRVIoSlNfRVhQT1JUX1BSSVZBVEUpOwogCiAgICAgSlNfRVhQ
T1JUX1BSSVZBVEUgc3RhdGljIFN0cmluZyBjbGFzc05hbWUoY29uc3QgSlNPYmplY3QqLCBWTSYp
OwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBTdHJpbmcgdG9TdHJpbmdOYW1lKGNvbnN0
IEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTU2NvcGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTU2NvcGUuY3BwCShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU1Njb3BlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMCBBcHBsZSBJbmMuIEFsbCBSaWdodHMg
UmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMSBBcHBsZSBJbmMuIEFsbCBSaWdo
dHMgUmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM5LDcgKzM5
LDggQEAgU1RBVElDX0FTU0VSVF9JU19UUklWSUFMTFlfREVTVFJVQ1RJQkxFKAogCiBjb25zdCBD
bGFzc0luZm8gSlNTY29wZTo6c19pbmZvID0geyAiU2NvcGUiLCAmQmFzZTo6c19pbmZvLCBudWxs
cHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTU2NvcGUpIH07CiAKLXZvaWQgSlNT
Y29wZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQor
dGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNTY29wZTo6dmlzaXRDaGlsZHJlbklt
cGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTU2NvcGUqIHRoaXNP
YmplY3QgPSBqc0Nhc3Q8SlNTY29wZSo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5I
RVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTQ3LDYgKzQ4LDggQEAgdm9pZCBKU1Njb3Bl
Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbAogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmpl
Y3QtPm1fbmV4dCk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU1Njb3BlKTsKKwogLy8g
UmV0dXJucyB0cnVlIGlmIHdlIGZvdW5kIGVub3VnaCBpbmZvcm1hdGlvbiB0byB0ZXJtaW5hdGUg
b3B0aW1pemF0aW9uLgogc3RhdGljIGlubGluZSBib29sIGFic3RyYWN0QWNjZXNzKEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTU2NvcGUqIHNjb3BlLCBjb25zdCBJZGVudGlmaWVyJiBp
ZGVudCwgR2V0T3JQdXQgZ2V0T3JQdXQsIHNpemVfdCBkZXB0aCwgYm9vbCYgbmVlZHNWYXJJbmpl
Y3Rpb25DaGVja3MsIFJlc29sdmVPcCYgb3AsIEluaXRpYWxpemF0aW9uTW9kZSBpbml0aWFsaXph
dGlvbk1vZGUpCiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Njb3Bl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTY29wZS5o
CShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Nj
b3BlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDEyLTIwMTkgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEyLTIwMjEgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02NCw3ICs2NCw3IEBAIHB1YmxpYzoKIAogICAgIHN0
YXRpYyB2b2lkIGNvbGxlY3RDbG9zdXJlVmFyaWFibGVzVW5kZXJURFooSlNTY29wZSosIFREWkVu
dmlyb25tZW50JiByZXN1bHQsIFByaXZhdGVOYW1lRW52aXJvbm1lbnQmKTsKIAotICAgIHN0YXRp
YyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJF
X1ZJU0lUX0NISUxEUkVOOwogCiAgICAgYm9vbCBpc1ZhclNjb3BlKCk7CiAgICAgYm9vbCBpc0xl
eGljYWxTY29wZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZWdt
ZW50ZWRWYXJpYWJsZU9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdC5jcHAJKHJldmlzaW9uIDI3MzEx
OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVP
YmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Miw3ICs2Miw4IEBAIFNjb3BlT2Zmc2V0IEpT
U2VnbWVudGVkVmFyaWFibGVPYmplY3Q6OmEKICAgICByZXR1cm4gU2NvcGVPZmZzZXQob2xkU2l6
ZSk7CiB9CiAKLXZvaWQgSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdDo6dmlzaXRDaGlsZHJlbihK
U0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlz
aXRvcj4KK3ZvaWQgSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdDo6dmlzaXRDaGlsZHJlbkltcGwo
SlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTU2VnbWVudGVkVmFyaWFi
bGVPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdCo+
KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygp
KTsKQEAgLTc1LDYgKzc2LDggQEAgdm9pZCBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0Ojp2aXNp
dENoaQogICAgICAgICB2aXNpdG9yLmFwcGVuZEhpZGRlbih0aGlzT2JqZWN0LT5tX3ZhcmlhYmxl
c1tpXSk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTl9XSVRIX01PRElGSUVSKEpTX0VYUE9S
VF9QUklWQVRFLCBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0KTsKKwogdm9pZCBKU1NlZ21lbnRl
ZFZhcmlhYmxlT2JqZWN0OjphbmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhlYXBBbmFseXplciYg
YW5hbHl6ZXIpCiB7CiAgICAgSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdCogdGhpc09iamVjdCA9
IGpzQ2FzdDxKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0Kj4oY2VsbCk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJs
ZU9iamVjdC5oCShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC04NSw4
ICs4NSw4IEBAIHB1YmxpYzoKICAgICAvLyBBZGRzIG51bWJlck9mUmVnaXN0ZXJzVG9BZGQgcmVn
aXN0ZXJzLCBpbml0aWFsaXplcyB0aGVtIHRvIFVuZGVmaW5lZCwgYW5kIHJldHVybnMKICAgICAv
LyB0aGUgaW5kZXggb2YgdGhlIGZpcnN0IG9uZSBhZGRlZC4KICAgICBKU19FWFBPUlRfUFJJVkFU
RSBTY29wZU9mZnNldCBhZGRWYXJpYWJsZXModW5zaWduZWQgbnVtYmVyT2ZWYXJpYWJsZXNUb0Fk
ZCwgSlNWYWx1ZSk7Ci0gICAgCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgdmlz
aXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworCisgICAgREVDTEFSRV9WSVNJVF9D
SElMRFJFTl9XSVRIX01PRElGSUVSKEpTX0VYUE9SVF9QUklWQVRFKTsKICAgICBKU19FWFBPUlRf
UFJJVkFURSBzdGF0aWMgdm9pZCBhbmFseXplSGVhcChKU0NlbGwqLCBIZWFwQW5hbHl6ZXImKTsK
ICAgICAKIHByb3RlY3RlZDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
U2V0SXRlcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTU2V0SXRlcmF0b3IuY3BwCShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU1NldEl0ZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNyBBcHBsZSwgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjEgQXBwbGUsIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
NTcsMTMgKzU3LDE2IEBAIHZvaWQgSlNTZXRJdGVyYXRvcjo6ZmluaXNoQ3JlYXRpb24oVk0mIHYK
ICAgICAgICAgQmFzZTo6aW50ZXJuYWxGaWVsZChpbmRleCkuc2V0KHZtLCB0aGlzLCB2YWx1ZXNb
aW5kZXhdKTsKIH0KIAotdm9pZCBKU1NldEl0ZXJhdG9yOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCog
Y2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgor
dm9pZCBKU1NldEl0ZXJhdG9yOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0
b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1NldEl0ZXJh
dG9yKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBp
bmZvKCkpOwogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CiB9
CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU1NldEl0ZXJhdG9yKTsKKwogSlNWYWx1ZSBKU1Nl
dEl0ZXJhdG9yOjpjcmVhdGVQYWlyKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFs
dWUga2V5LCBKU1ZhbHVlIHZhbHVlKQogewogICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3M7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NldEl0ZXJhdG9yLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZXRJdGVyYXRvci5o
CShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Nl
dEl0ZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDEzLCAyMDE2IEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAyMSBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMzAsNyArMTMwLDcgQEAgcHJpdmF0
ZToKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgSlNTZXQq
LCBJdGVyYXRpb25LaW5kKTsKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7CiAgICAgSlNf
RVhQT1JUX1BSSVZBVEUgSlNWYWx1ZSBjcmVhdGVQYWlyKEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1
ZSwgSlNWYWx1ZSk7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90
VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiB9OwogU1RBVElDX0FTU0VS
VF9JU19UUklWSUFMTFlfREVTVFJVQ1RJQkxFKEpTU2V0SXRlcmF0b3IpOwogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuY3BwCShyZXZpc2lvbiAyNzMxMTkp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNyArMSw3IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAyIEhh
cnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCiAgKiAgQ29weXJpZ2h0IChDKSAyMDAxIFBldGVy
IEtlbGx5IChwbWtAcG9zdC5jb20pCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA0LTIwMTkgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwNC0yMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0x
MDUsNyArMTA1LDggQEAgc2l6ZV90IEpTU3RyaW5nOjplc3RpbWF0ZWRTaXplKEpTQ2VsbCogYwog
ICAgIHJldHVybiBCYXNlOjplc3RpbWF0ZWRTaXplKGNlbGwsIHZtKSArIGJpdHdpc2VfY2FzdDxT
dHJpbmdJbXBsKj4ocG9pbnRlciktPmNvc3REdXJpbmdHQygpOwogfQogCi12b2lkIEpTU3RyaW5n
Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1w
bGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1N0cmluZzo6dmlzaXRDaGlsZHJlbkltcGwo
SlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTU3RyaW5nKiB0aGlzT2Jq
ZWN0ID0gYXNTdHJpbmcoY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlz
T2JqZWN0LCBpbmZvKCkpOwpAQCAtMTQzLDYgKzE0NCw4IEBAIHZvaWQgSlNTdHJpbmc6OnZpc2l0
Q2hpbGRyZW4oSlNDZWxsKiBjZWwKICAgICAgICAgdmlzaXRvci5yZXBvcnRFeHRyYU1lbW9yeVZp
c2l0ZWQoaW1wbC0+Y29zdER1cmluZ0dDKCkpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4o
SlNTdHJpbmcpOworCiBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG1heExlbmd0aEZvck9uU3Rh
Y2tSZXNvbHZlID0gMjA0ODsKIAogdm9pZCBKU1JvcGVTdHJpbmc6OnJlc29sdmVSb3BlSW50ZXJu
YWw4KExDaGFyKiBidWZmZXIpIGNvbnN0CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1N0cmluZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTU3RyaW5nLmgJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTU3RyaW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSw3IEBACiAvKgog
ICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAxIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcp
CiAgKiAgQ29weXJpZ2h0IChDKSAyMDAxIFBldGVyIEtlbGx5IChwbWtAcG9zdC5jb20pCi0gKiAg
Q29weXJpZ2h0IChDKSAyMDAzLTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogIENvcHlyaWdodCAoQykgMjAwMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yMTcsNyArMjE3LDcgQEAgcHVibGljOgogCiAg
ICAgc3RhdGljIHZvaWQgZHVtcFRvU3RyZWFtKGNvbnN0IEpTQ2VsbCosIFByaW50U3RyZWFtJik7
CiAgICAgc3RhdGljIHNpemVfdCBlc3RpbWF0ZWRTaXplKEpTQ2VsbCosIFZNJik7Ci0gICAgc3Rh
dGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xB
UkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaXNSb3BlKCkgY29u
c3QKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZ0l0
ZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U1N0cmluZ0l0ZXJhdG9yLmNwcAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNTdHJpbmdJdGVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
NiArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDE1IFl1c3VrZSBTdXp1a2kgPHV0YXRh
bmUudGVhQGdtYWlsLmNvbT4uCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01
MSwxMSArNTEsMTQgQEAgSlNTdHJpbmdJdGVyYXRvciogSlNTdHJpbmdJdGVyYXRvcjo6Y2xvbgog
ICAgIHJldHVybiBjbG9uZTsKIH0KIAotdm9pZCBKU1N0cmluZ0l0ZXJhdG9yOjp2aXNpdENoaWxk
cmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBWaXNpdG9yPgordm9pZCBKU1N0cmluZ0l0ZXJhdG9yOjp2aXNpdENoaWxkcmVuSW1wbChKU0Nl
bGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpz
Q2FzdDxKU1N0cmluZ0l0ZXJhdG9yKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhF
UklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09i
amVjdCwgdmlzaXRvcik7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU1N0cmluZ0l0ZXJh
dG9yKTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU1N0cmluZ0l0ZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNTdHJpbmdJdGVyYXRvci5oCShyZXZpc2lvbiAyNzMxMTkpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZ0l0ZXJhdG9yLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDE1IFl1c3VrZSBT
dXp1a2kgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4uCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC03OSw3ICs4MCw3IEBAIHB1YmxpYzoKICAgICBKU1ZhbHVlIGluZGV4KCkgY29uc3Qg
eyByZXR1cm4gaW50ZXJuYWxGaWVsZChGaWVsZDo6SW5kZXgpLmdldCgpOyB9CiAgICAgSlNTdHJp
bmdJdGVyYXRvciogY2xvbmUoSlNHbG9iYWxPYmplY3QqKTsKIAotICAgIHN0YXRpYyB2b2lkIHZp
c2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NI
SUxEUkVOOwogCiBwcml2YXRlOgogICAgIEpTU3RyaW5nSXRlcmF0b3IoVk0mIHZtLCBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3lt
Ym9sVGFibGVPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuY3BwCShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxOSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTM2LDcgKzM2LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAKIGNvbnN0IENsYXNz
SW5mbyBKU1N5bWJvbFRhYmxlT2JqZWN0OjpzX2luZm8gPSB7ICJTeW1ib2xUYWJsZU9iamVjdCIs
ICZCYXNlOjpzX2luZm8sIG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNT
eW1ib2xUYWJsZU9iamVjdCkgfTsKIAotdm9pZCBKU1N5bWJvbFRhYmxlT2JqZWN0Ojp2aXNpdENo
aWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBl
bmFtZSBWaXNpdG9yPgordm9pZCBKU1N5bWJvbFRhYmxlT2JqZWN0Ojp2aXNpdENoaWxkcmVuSW1w
bChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNTeW1ib2xUYWJsZU9i
amVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1N5bWJvbFRhYmxlT2JqZWN0Kj4oY2VsbCk7CiAg
ICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtNDQs
NiArNDUsOCBAQCB2b2lkIEpTU3ltYm9sVGFibGVPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oCiAgICAg
dmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9zeW1ib2xUYWJsZSk7CiB9CiAKK0RFRklORV9W
SVNJVF9DSElMRFJFTihKU1N5bWJvbFRhYmxlT2JqZWN0KTsKKwogYm9vbCBKU1N5bWJvbFRhYmxl
T2JqZWN0OjpkZWxldGVQcm9wZXJ0eShKU0NlbGwqIGNlbGwsIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIERlbGV0ZVByb3BlcnR5U2xvdCYg
c2xvdCkKIHsKICAgICBKU1N5bWJvbFRhYmxlT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpT
U3ltYm9sVGFibGVPYmplY3QqPihjZWxsKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0LmgJKHJldmlzaW9uIDI3MzExOSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIt
MjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTItMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTcwLDcgKzcwLDcgQEAgcHJvdGVjdGVkOgogICAgICAgICBtX3N5
bWJvbFRhYmxlLnNldCh2bSwgdGhpcywgc3ltYm9sVGFibGUpOwogICAgIH0KICAgICAKLSAgICBz
dGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVD
TEFSRV9WSVNJVF9DSElMRFJFTjsKICAgICAKIHByaXZhdGU6CiAgICAgV3JpdGVCYXJyaWVyPFN5
bWJvbFRhYmxlPiBtX3N5bWJvbFRhYmxlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNXZWFrT2JqZWN0UmVmLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU1dlYWtPYmplY3RSZWYuY3BwCShyZXZpc2lvbiAyNzMxMTkpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1dlYWtPYmplY3RSZWYuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSwg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE5LTIwMjEgQXBw
bGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMzksNyArMzksOCBAQCB2b2lkIEpTV2Vha09iamVjdFJlZjo6ZmluaXNoQ3JlYXRp
b24oVk0mCiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwogfQogCi12b2lkIEpTV2Vha09i
amVjdFJlZjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9y
KQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNXZWFrT2JqZWN0UmVmOjp2aXNp
dENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0
byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1dlYWtPYmplY3RSZWYqPihjZWxsKTsKICAgICBBU1NF
UlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC01MSw2ICs1Miw4
IEBAIHZvaWQgSlNXZWFrT2JqZWN0UmVmOjp2aXNpdENoaWxkcmVuKEpTQ2UKICAgICB9CiB9CiAK
K0RFRklORV9WSVNJVF9DSElMRFJFTihKU1dlYWtPYmplY3RSZWYpOworCiB2b2lkIEpTV2Vha09i
amVjdFJlZjo6ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoVk0mIHZtKQogewogICAgIGlmIChtX3Zh
bHVlICYmICF2bS5oZWFwLmlzTWFya2VkKG1fdmFsdWUuZ2V0KCkpKQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNXZWFrT2JqZWN0UmVmLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNXZWFrT2JqZWN0UmVmLmgJKHJldmlzaW9uIDI3
MzExOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTV2Vha09iamVjdFJlZi5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
OSBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE5
LTIwMjEgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtNjUsNyArNjUsNyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgdm9p
ZCBmaW5hbGl6ZVVuY29uZGl0aW9uYWxseShWTSYpOwotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hp
bGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVO
OwogCiBwcml2YXRlOgogICAgIEpTV2Vha09iamVjdFJlZihWTSYgdm0sIFN0cnVjdHVyZSogc3Ry
dWN0dXJlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNXaXRoU2NvcGUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTV2l0aFNj
b3BlLmNwcAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNXaXRoU2NvcGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMiwgMjAxNiBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQxLDcgKzQxLDggQEAgSlNX
aXRoU2NvcGUqIEpTV2l0aFNjb3BlOjpjcmVhdGUoCiAgICAgcmV0dXJuIHdpdGhTY29wZTsKIH0K
IAotdm9pZCBKU1dpdGhTY29wZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNp
dG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNXaXRoU2Nv
cGU6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsK
ICAgICBKU1dpdGhTY29wZSogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1dpdGhTY29wZSo+KGNlbGwp
OwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAg
LTQ5LDYgKzUwLDggQEAgdm9pZCBKU1dpdGhTY29wZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIAog
ICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fb2JqZWN0KTsKIH0KIAorREVGSU5FX1ZJ
U0lUX0NISUxEUkVOKEpTV2l0aFNjb3BlKTsKKwogU3RydWN0dXJlKiBKU1dpdGhTY29wZTo6Y3Jl
YXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1
ZSBwcm90bykKIHsKICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVj
dCwgcHJvdG8sIFR5cGVJbmZvKFdpdGhTY29wZVR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygp
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTV2l0aFNjb3BlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNXaXRoU2NvcGUuaAko
cmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNXaXRo
U2NvcGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTIsIDIwMTYgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEyLTIwMjEgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00Myw3ICs0Myw3IEBAIHB1YmxpYzoKIAogICAg
IEpTT2JqZWN0KiBvYmplY3QoKSB7IHJldHVybiBtX29iamVjdC5nZXQoKTsgfQogCi0gICAgc3Rh
dGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xB
UkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1
cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUgcHJvdG8pOwogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1dyYXBwZXJPYmplY3QuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTV3JhcHBlck9iamVjdC5jcHAJKHJldmlz
aW9uIDI3MzExOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTV3JhcHBlck9i
amVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogIENvcHlyaWdo
dCAoQykgMjAwNiBNYWtzIE9ybG92aWNoCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA5LCAy
MDEyIEFwcGxlLCBJbmMuCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMjEgQXBwbGUsIEluYy4K
ICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yOSwxMSArMjksMTQgQEAgbmFtZXNwYWNlIEpTQyB7
CiAKIFNUQVRJQ19BU1NFUlRfSVNfVFJJVklBTExZX0RFU1RSVUNUSUJMRShKU1dyYXBwZXJPYmpl
Y3QpOwogCi12b2lkIEpTV3JhcHBlck9iamVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGws
IFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQg
SlNXcmFwcGVyT2JqZWN0Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3Im
IHZpc2l0b3IpCiB7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1dyYXBwZXJPYmpl
Y3QqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGlu
Zm8oKSk7CiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKIH0K
IAorREVGSU5FX1ZJU0lUX0NISUxEUkVOX1dJVEhfTU9ESUZJRVIoSlNfRVhQT1JUX1BSSVZBVEUs
IEpTV3JhcHBlck9iamVjdCk7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNXcmFwcGVyT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNXcmFwcGVyT2JqZWN0LmgJKHJldmlzaW9uIDI3
MzExOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTV3JhcHBlck9iamVjdC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDIw
MDYgTWFrcyBPcmxvdmljaAotICogIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCwgMjAw
OSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2
LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAg
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKQEAgLTY0LDcgKzY0LDcgQEAgcHVibGljOgogcHJvdGVjdGVkOgogICAgIGV4cGxpY2l0IEpT
V3JhcHBlck9iamVjdChWTSYsIFN0cnVjdHVyZSopOwogCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUg
c3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERF
Q0xBUkVfVklTSVRfQ0hJTERSRU5fV0lUSF9NT0RJRklFUihKU19FWFBPUlRfUFJJVkFURSk7CiB9
OwogCiBpbmxpbmUgSlNXcmFwcGVyT2JqZWN0OjpKU1dyYXBwZXJPYmplY3QoVk0mIHZtLCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0xh
enlDbGFzc1N0cnVjdHVyZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvTGF6eUNsYXNzU3RydWN0dXJlLmNwcAkocmV2aXNpb24gMjczMTE5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTGF6eUNsYXNzU3RydWN0dXJlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxOSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTcyLDEyICs3MiwxNiBAQCB2b2lkIExhenlDbGFzc1N0cnVjdHVyZTo6SW5p
dGlhbGl6ZXI6OnNlCiAgICAgY2xhc3NTdHJ1Y3R1cmUubV9jb25zdHJ1Y3Rvci5zZXQodm0sIGds
b2JhbCwgY29uc3RydWN0b3IpOwogfQogCi12b2lkIExhenlDbGFzc1N0cnVjdHVyZTo6dmlzaXQo
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBM
YXp5Q2xhc3NTdHJ1Y3R1cmU6OnZpc2l0KFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgbV9zdHJ1
Y3R1cmUudmlzaXQodmlzaXRvcik7CiAgICAgdmlzaXRvci5hcHBlbmQobV9jb25zdHJ1Y3Rvcik7
CiB9CiAKK3RlbXBsYXRlIHZvaWQgTGF6eUNsYXNzU3RydWN0dXJlOjp2aXNpdChBYnN0cmFjdFNs
b3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIExhenlDbGFzc1N0cnVjdHVyZTo6dmlzaXQoU2xv
dFZpc2l0b3ImKTsKKwogdm9pZCBMYXp5Q2xhc3NTdHJ1Y3R1cmU6OmR1bXAoUHJpbnRTdHJlYW0m
IG91dCkgY29uc3QKIHsKICAgICBvdXQucHJpbnQoIjxzdHJ1Y3R1cmUgPSAiLCBtX3N0cnVjdHVy
ZSwgIiwgY29uc3RydWN0b3IgPSAiLCBSYXdQb2ludGVyKG1fY29uc3RydWN0b3IuZ2V0KCkpLCAi
PiIpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTGF6eUNsYXNzU3RydWN0
dXJlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTGF6eUNs
YXNzU3RydWN0dXJlLmgJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0xhenlDbGFzc1N0cnVjdHVyZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTExNyw3ICsxMTcs
NyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX2NvbnN0cnVjdG9yLmdldCgpOwogICAgIH0K
ICAgICAKLSAgICB2b2lkIHZpc2l0KFNsb3RWaXNpdG9yJik7CisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgVmlzaXRvcj4gdm9pZCB2aXNpdChWaXNpdG9yJik7CiAgICAgCiAgICAgdm9pZCBkdW1wKFBy
aW50U3RyZWFtJikgY29uc3Q7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0xhenlQcm9wZXJ0eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0xhenlQcm9wZXJ0eS5oCShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9MYXp5UHJvcGVydHkuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEwMyw3ICsx
MDMsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRNYXlCZU51bGwoVk0mLCBjb25zdCBPd25lclR5
cGUqIG93bmVyLCBFbGVtZW50VHlwZSopOwogICAgIHZvaWQgc2V0KFZNJiwgY29uc3QgT3duZXJU
eXBlKiBvd25lciwgRWxlbWVudFR5cGUqKTsKICAgICAKLSAgICB2b2lkIHZpc2l0KFNsb3RWaXNp
dG9yJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCB2aXNpdChWaXNpdG9y
Jik7CiAgICAgCiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CiAgICAgCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9MYXp5UHJvcGVydHlJbmxpbmVzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTGF6eVByb3BlcnR5SW5s
aW5lcy5oCShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9MYXp5UHJvcGVydHlJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjYsNyArNjYsOCBAQCB2b2lk
IExhenlQcm9wZXJ0eTxPd25lclR5cGUsIEVsZW1lbnRUeXBlCiB9CiAKIHRlbXBsYXRlPHR5cGVu
YW1lIE93bmVyVHlwZSwgdHlwZW5hbWUgRWxlbWVudFR5cGU+Ci12b2lkIExhenlQcm9wZXJ0eTxP
d25lclR5cGUsIEVsZW1lbnRUeXBlPjo6dmlzaXQoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1w
bGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBMYXp5UHJvcGVydHk8T3duZXJUeXBlLCBFbGVt
ZW50VHlwZT46OnZpc2l0KFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgaWYgKG1fcG9pbnRlciAm
JiAhKG1fcG9pbnRlciAmIGxhenlUYWcpKQogICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmll
cmVkKGJpdHdpc2VfY2FzdDxFbGVtZW50VHlwZSo+KG1fcG9pbnRlcikpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01vZHVsZVByb2dyYW1FeGVj
dXRhYmxlLmNwcAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCwgMjAxMywgMjAxNS0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOS0y
MDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtNzksNyArNzksOCBAQCBhdXRvIE1vZHVsZVByb2dyYW1FeGVjdXRhYmxl
OjplbnN1cmVUZW1wCiAgICAgcmV0dXJuIGVuc3VyZVRlbXBsYXRlT2JqZWN0TWFwSW1wbChtX3Rl
bXBsYXRlT2JqZWN0TWFwKTsKIH0KIAotdm9pZCBNb2R1bGVQcm9ncmFtRXhlY3V0YWJsZTo6dmlz
aXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8
dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGU6OnZpc2l0Q2hp
bGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBNb2R1bGVQ
cm9ncmFtRXhlY3V0YWJsZSogdGhpc09iamVjdCA9IGpzQ2FzdDxNb2R1bGVQcm9ncmFtRXhlY3V0
YWJsZSo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwg
aW5mbygpKTsKQEAgLTk0LDQgKzk1LDYgQEAgdm9pZCBNb2R1bGVQcm9ncmFtRXhlY3V0YWJsZTo6
dmlzaXRDaGlsZAogICAgIH0KIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKE1vZHVsZVByb2dy
YW1FeGVjdXRhYmxlKTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9Nb2R1bGVQcm9ncmFtRXhlY3V0YWJsZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01vZHVsZVByb2dyYW1FeGVjdXRhYmxlLmgJ
KHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01vZHVs
ZVByb2dyYW1FeGVjdXRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03Nyw3ICs3Nyw3IEBAIHBy
aXZhdGU6CiAKICAgICBNb2R1bGVQcm9ncmFtRXhlY3V0YWJsZShKU0dsb2JhbE9iamVjdCosIGNv
bnN0IFNvdXJjZUNvZGUmKTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgV3Jp
dGVCYXJyaWVyPFVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jaz4gbV91bmxpbmtlZE1vZHVs
ZVByb2dyYW1Db2RlQmxvY2s7CiAgICAgV3JpdGVCYXJyaWVyPFN5bWJvbFRhYmxlPiBtX21vZHVs
ZUVudmlyb25tZW50U3ltYm9sVGFibGU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9PcHRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9PcHRpb25zLmNwcAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDExLTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01NTgsNiArNTU4LDkg
QEAgdm9pZCBPcHRpb25zOjpyZWNvbXB1dGVEZXBlbmRlbnRPcHRpb25zKAogCiAgICAgaWYgKE9w
dGlvbnM6OnVzZVByaXZhdGVTdGF0aWNDbGFzc0ZpZWxkcygpKQogICAgICAgICBPcHRpb25zOjp1
c2VQcml2YXRlQ2xhc3NGaWVsZHMoKSA9IHRydWU7CisKKyAgICBpZiAoT3B0aW9uczo6dmVyYm9z
ZVZlcmlmeUdDKCkpCisgICAgICAgIE9wdGlvbnM6OnZlcmlmeUdDKCkgPSB0cnVlOwogfQogCiBp
bmxpbmUgdm9pZCogT3B0aW9uczo6YWRkcmVzc09mT3B0aW9uKE9wdGlvbnM6OklEIGlkKQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zTGlzdC5oCShyZXZpc2lv
biAyNzMxMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zTGlzdC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zNjksNiArMzY5LDggQEAgSlNfRVhQT1JUX1BSSVZBVEUgYm9v
bCBjYW5Vc2VKSVRDYWdlKCk7CiAgICAgdihCb29sLCBhbHdheXNHZW5lcmF0ZVBDVG9Db2RlT3Jp
Z2luTWFwLCBmYWxzZSwgTm9ybWFsLCAiVGhpcyB3aWxsIG1ha2Ugc3VyZSB3ZSBhbHdheXMgZ2Vu
ZXJhdGUgYSBQQ1RvQ29kZU9yaWdpbk1hcCBmb3IgSklUZWQgY29kZS4iKSBcCiAgICAgXAogICAg
IHYoRG91YmxlLCByYW5kb21JbnRlZ3JpdHlBdWRpdFJhdGUsIDAuMDUsIE5vcm1hbCwgIlByb2Jh
YmlsaXR5IG9mIHJhbmRvbSBpbnRlZ3JpdHkgYXVkaXRzIFswLjAgLSAxLjBdIikgXAorICAgIHYo
Qm9vbCwgdmVyaWZ5R0MsIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpIFwKKyAgICB2KEJvb2wsIHZl
cmJvc2VWZXJpZnlHQywgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoQm9vbCwgdmVy
aWZ5SGVhcCwgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoVW5zaWduZWQsIG51bWJl
ck9mR0NDeWNsZXNUb1JlY29yZEZvclZlcmlmaWNhdGlvbiwgMywgTm9ybWFsLCBudWxscHRyKSBc
CiAgICAgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvZ3JhbUV4ZWN1
dGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1By
b2dyYW1FeGVjdXRhYmxlLmNwcAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvUHJvZ3JhbUV4ZWN1dGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOS0yMDE5IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MjA4LDcgKzIwOCw4IEBAIGF1dG8gUHJvZ3JhbUV4ZWN1dGFibGU6OmVuc3VyZVRlbXBsYXRlT2IK
ICAgICByZXR1cm4gZW5zdXJlVGVtcGxhdGVPYmplY3RNYXBJbXBsKG1fdGVtcGxhdGVPYmplY3RN
YXApOwogfQogCi12b2lkIFByb2dyYW1FeGVjdXRhYmxlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCog
Y2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgor
dm9pZCBQcm9ncmFtRXhlY3V0YWJsZTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBW
aXNpdG9yJiB2aXNpdG9yKQogewogICAgIFByb2dyYW1FeGVjdXRhYmxlKiB0aGlzT2JqZWN0ID0g
anNDYXN0PFByb2dyYW1FeGVjdXRhYmxlKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9J
TkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtMjIyLDQgKzIyMyw2IEBAIHZvaWQgUHJv
Z3JhbUV4ZWN1dGFibGU6OnZpc2l0Q2hpbGRyZW4oSlMKICAgICB9CiB9CiAKK0RFRklORV9WSVNJ
VF9DSElMRFJFTihQcm9ncmFtRXhlY3V0YWJsZSk7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvZ3JhbUV4ZWN1dGFibGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9ncmFtRXhlY3V0YWJs
ZS5oCShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Q
cm9ncmFtRXhlY3V0YWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAwOS0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODEsNyArODEsNyBAQCBwcml2
YXRlOgogCiAgICAgUHJvZ3JhbUV4ZWN1dGFibGUoSlNHbG9iYWxPYmplY3QqLCBjb25zdCBTb3Vy
Y2VDb2RlJik7CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RW
aXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIFdyaXRlQmFycmll
cjxVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2s+IG1fdW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrOwog
ICAgIFdyaXRlQmFycmllcjxFeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlPiBtX3Byb2dyYW1Db2Rl
QmxvY2s7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eU1hcEhh
c2hUYWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1By
b3BlcnR5TWFwSGFzaFRhYmxlLmgJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5TWFwSGFzaFRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogIENvcHlyaWdodCAoQykgMjAwNC0yMDE5IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDQtMjAyMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMTMzLDcg
KzEzMyw3IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0Rlc3Ry
dWN0aW9uID0gdHJ1ZTsKICAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwotICAgIHN0
YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNM
QVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgREVDTEFSRV9FWFBPUlRfSU5GTzsKIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlUYWJsZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlUYWJsZS5jcHAJKHJl
dmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5
VGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTExOCw3ICsxMTgsOCBAQCB2b2lkIFByb3Bl
cnR5VGFibGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2CiAgICAgdm0uaGVhcC5yZXBvcnRFeHRyYU1l
bW9yeUFsbG9jYXRlZChkYXRhU2l6ZSgpKTsKIH0KIAotdm9pZCBQcm9wZXJ0eVRhYmxlOjp2aXNp
dENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0
eXBlbmFtZSBWaXNpdG9yPgordm9pZCBQcm9wZXJ0eVRhYmxlOjp2aXNpdENoaWxkcmVuSW1wbChK
U0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0byogdGhpc09iamVjdCA9
IGpzQ2FzdDxQcm9wZXJ0eVRhYmxlKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhF
UklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtMTI2LDYgKzEyNyw4IEBAIHZvaWQgUHJvcGVy
dHlUYWJsZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwKICAgICB2aXNpdG9yLnJlcG9ydEV4dHJhTWVt
b3J5VmlzaXRlZCh0aGlzT2JqZWN0LT5kYXRhU2l6ZSgpKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NI
SUxEUkVOKFByb3BlcnR5VGFibGUpOworCiB2b2lkIFByb3BlcnR5VGFibGU6OmRlc3Ryb3koSlND
ZWxsKiBjZWxsKQogewogICAgIHN0YXRpY19jYXN0PFByb3BlcnR5VGFibGUqPihjZWxsKS0+UHJv
cGVydHlUYWJsZTo6flByb3BlcnR5VGFibGUoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1Byb3h5T2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9Qcm94eU9iamVjdC5jcHAJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3h5T2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMCBBcHBsZSBJbmMu
IEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJ
bmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTExNzksNyArMTE3OSw4IEBAIGJvb2wgUHJveHlPYmplY3Q6OmlzUmV2b2tlZCgpIGNvbnN0
CiAgICAgcmV0dXJuIGhhbmRsZXIoKS5pc051bGwoKTsKIH0KIAotdm9pZCBQcm94eU9iamVjdDo6
dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxh
dGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgUHJveHlPYmplY3Q6OnZpc2l0Q2hpbGRyZW5JbXBs
KEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBQcm94eU9iamVjdCogdGhp
c09iamVjdCA9IGpzQ2FzdDxQcm94eU9iamVjdCo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpF
Q1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTExODksNCArMTE5MCw2IEBAIHZv
aWQgUHJveHlPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiAKICAgICB2aXNpdG9yLmFwcGVu
ZCh0aGlzT2JqZWN0LT5tX2hhbmRsZXIpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oUHJv
eHlPYmplY3QpOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1Byb3h5T2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvUHJveHlPYmplY3QuaAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJveHlPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC05MSw3
ICs5MSw3IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhK
U09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lQXJyYXkmLCBEb250RW51bVBy
b3BlcnRpZXNNb2RlKTsKICAgICBzdGF0aWMgYm9vbCBzZXRQcm90b3R5cGUoSlNPYmplY3QqLCBK
U0dsb2JhbE9iamVjdCosIEpTVmFsdWUgcHJvdG90eXBlLCBib29sIHNob3VsZFRocm93SWZDYW50
U2V0KTsKICAgICBzdGF0aWMgSlNWYWx1ZSBnZXRQcm90b3R5cGUoSlNPYmplY3QqLCBKU0dsb2Jh
bE9iamVjdCopOwotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZp
c2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgYm9vbCBnZXRPd25Q
cm9wZXJ0eVNsb3RDb21tb24oSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5
U2xvdCYpOwogICAgIGJvb2wgcGVyZm9ybUludGVybmFsTWV0aG9kR2V0T3duUHJvcGVydHkoSlNH
bG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJveHlSZXZva2UuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3h5UmV2b2tlLmNwcAkocmV2aXNpb24gMjcz
MTE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJveHlSZXZva2UuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBB
cHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAy
MSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTY5LDcgKzY5LDggQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKHBlcmZv
cm1Qcm94eVJldgogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9
CiAKLXZvaWQgUHJveHlSZXZva2U6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90Vmlz
aXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFByb3h5UmV2
b2tlOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7
CiAgICAgUHJveHlSZXZva2UqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8UHJveHlSZXZva2UqPihjZWxs
KTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBA
IC03OCw0ICs3OSw2IEBAIHZvaWQgUHJveHlSZXZva2U6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiAK
ICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX3Byb3h5KTsKIH0KIAorREVGSU5FX1ZJ
U0lUX0NISUxEUkVOKFByb3h5UmV2b2tlKTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm94eVJldm9rZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3h5UmV2b2tlLmgJKHJldmlzaW9uIDI3
MzExOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3h5UmV2b2tlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIw
MTkgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2
LTIwMjEgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC01Miw3ICs1Miw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICB2b2lk
IGZpbmlzaENyZWF0aW9uKFZNJiwgUHJveHlPYmplY3QqKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNp
dENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElM
RFJFTjsKICAgICBKU1ZhbHVlIHByb3h5KCkgeyByZXR1cm4gbV9wcm94eS5nZXQoKTsgfQogICAg
IHZvaWQgc2V0UHJveHlUb051bGwoVk0mIHZtKSB7IHJldHVybiBtX3Byb3h5LnNldCh2bSwgdGhp
cywganNOdWxsKCkpOyB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Jl
Z0V4cENhY2hlZFJlc3VsdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvUmVnRXhwQ2FjaGVkUmVzdWx0LmNwcAkocmV2aXNpb24gMjczMTE5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwQ2FjaGVkUmVzdWx0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIw
MjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0zMSw3ICszMSw4IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi12b2lkIFJl
Z0V4cENhY2hlZFJlc3VsdDo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0
ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBSZWdFeHBDYWNoZWRSZXN1bHQ6OnZpc2l0
QWdncmVnYXRlSW1wbChWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHZpc2l0b3IuYXBwZW5kKG1f
bGFzdElucHV0KTsKICAgICB2aXNpdG9yLmFwcGVuZChtX2xhc3RSZWdFeHApOwpAQCAtNDMsNiAr
NDQsOCBAQCB2b2lkIFJlZ0V4cENhY2hlZFJlc3VsdDo6dmlzaXRBZ2dyZWdhdGUoCiAgICAgfQog
fQogCitERUZJTkVfVklTSVRfQUdHUkVHQVRFKFJlZ0V4cENhY2hlZFJlc3VsdCk7CisKIEpTQXJy
YXkqIFJlZ0V4cENhY2hlZFJlc3VsdDo6bGFzdFJlc3VsdChKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBKU09iamVjdCogb3duZXIpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52
bSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwQ2FjaGVkUmVz
dWx0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhw
Q2FjaGVkUmVzdWx0LmgJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1JlZ0V4cENhY2hlZFJlc3VsdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY1LDcg
KzY1LDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9yZWlmaWVkID8gbV9yZWlmaWVkSW5w
dXQuZ2V0KCkgOiBtX2xhc3RJbnB1dC5nZXQoKTsKICAgICB9CiAKLSAgICB2b2lkIHZpc2l0QWdn
cmVnYXRlKFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9BR0dSRUdBVEU7CiAKICAg
ICAvLyBtX2xhc3RSZWdFeHAgd291bGQgYmUgbnVsbHB0ciB3aGVuIFJlZ0V4cENhY2hlZFJlc3Vs
dCBpcyBub3QgcmVpZmllZC4KICAgICAvLyBJZiB3ZSBmaW5kIG1fbGFzdFJlZ0V4cCBpcyBudWxs
cHRyLCBpdCBtZWFucyB0aGlzIHNob3VsZCBob2xkIHRoZSBlbXB0eSBSZWdFeHAuCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBHbG9iYWxEYXRhLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBHbG9iYWxEYXRhLmNw
cAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVn
RXhwR2xvYmFsRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxOS0yMDIxIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzAsMTEgKzMwLDE0IEBACiAKIG5hbWVz
cGFjZSBKU0MgewogCi12b2lkIFJlZ0V4cEdsb2JhbERhdGE6OnZpc2l0QWdncmVnYXRlKFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgUmVnRXhw
R2xvYmFsRGF0YTo6dmlzaXRBZ2dyZWdhdGVJbXBsKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAg
bV9jYWNoZWRSZXN1bHQudmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7CiB9CiAKK0RFRklORV9WSVNJ
VF9BR0dSRUdBVEUoUmVnRXhwR2xvYmFsRGF0YSk7CisKIEpTVmFsdWUgUmVnRXhwR2xvYmFsRGF0
YTo6Z2V0QmFja3JlZihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCB1bnNpZ25lZCBpKQog
ewogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1JlZ0V4cEdsb2JhbERhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBHbG9iYWxEYXRhLmgJKHJldmlzaW9uIDI3MzEx
OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cEdsb2JhbERhdGEuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTkg
QXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE5LTIw
MjEgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC00MSw3ICs0MSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldElucHV0KEpT
R2xvYmFsT2JqZWN0KiwgSlNTdHJpbmcqKTsKICAgICBKU1N0cmluZyogaW5wdXQoKSB7IHJldHVy
biBtX2NhY2hlZFJlc3VsdC5pbnB1dCgpOyB9CiAKLSAgICB2b2lkIHZpc2l0QWdncmVnYXRlKFNs
b3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9BR0dSRUdBVEU7CiAKICAgICBKU1ZhbHVl
IGdldEJhY2tyZWYoSlNHbG9iYWxPYmplY3QqLCB1bnNpZ25lZCk7CiAgICAgSlNWYWx1ZSBnZXRM
YXN0UGFyZW4oSlNHbG9iYWxPYmplY3QqKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1JlZ0V4cE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0LmNwcAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw2ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDAgSGFycmkgUG9y
dGVuIChwb3J0ZW5Aa2RlLm9yZykKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAxOSBBcHBsZSBJ
bmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMjEgQXBw
bGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwpAQCAtNDYs
NyArNDYsOCBAQCB2b2lkIFJlZ0V4cE9iamVjdDo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtCiAgICAg
QVNTRVJUKHR5cGUoKSA9PSBSZWdFeHBPYmplY3RUeXBlKTsKIH0KIAotdm9pZCBSZWdFeHBPYmpl
Y3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3Rl
bXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFJlZ0V4cE9iamVjdDo6dmlzaXRDaGlsZHJl
bkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFJlZ0V4cE9iamVj
dCogdGhpc09iamVjdCA9IGpzQ2FzdDxSZWdFeHBPYmplY3QqPihjZWxsKTsKICAgICBBU1NFUlRf
R0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC01NSw2ICs1Niw4IEBA
IHZvaWQgUmVnRXhwT2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCoKICAgICB2aXNpdG9yLmFw
cGVuZCh0aGlzT2JqZWN0LT5tX2xhc3RJbmRleCk7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJF
TihSZWdFeHBPYmplY3QpOworCiBib29sIFJlZ0V4cE9iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90
KEpTT2JqZWN0KiBvYmplY3QsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFByb3BlcnR5
TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBWTSYgdm0gPSBn
bG9iYWxPYmplY3QtPnZtKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9S
ZWdFeHBPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9SZWdFeHBPYmplY3QuaAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBA
CiAvKgogICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAwIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtk
ZS5vcmcpCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMTkgQXBwbGUgSW5jLiBBbGwgUmlnaHRz
IFJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwMy0yMDIxIEFwcGxlIEluYy4gQWxsIFJp
Z2h0cyBSZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKQEAgLTEzMyw3ICsxMzMsNyBAQCBw
cml2YXRlOgogICAgIEpTX0VYUE9SVF9QUklWQVRFIFJlZ0V4cE9iamVjdChWTSYsIFN0cnVjdHVy
ZSosIFJlZ0V4cCopOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZmluaXNoQ3JlYXRpb24o
Vk0mKTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0
b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgYm9vbCBsYXN0SW5kZXhJ
c1dyaXRhYmxlKCkgY29uc3QKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TYW1wbGluZ1Byb2ZpbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TYW1wbGluZ1Byb2ZpbGVyLmNwcAkocmV2aXNpb24gMjczMTE5KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTY1MiwxMyArNjUyLDE3IEBAIHZvaWQgU2FtcGxpbmdQcm9maWxlcjo6cHJv
Y2Vzc1VudmVyaWZpZWQKICAgICBtX3VucHJvY2Vzc2VkU3RhY2tUcmFjZXMuY2xlYXIoKTsKIH0K
IAotdm9pZCBTYW1wbGluZ1Byb2ZpbGVyOjp2aXNpdChTbG90VmlzaXRvciYgdmlzaXRvcikKK3Rl
bXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFNhbXBsaW5nUHJvZmlsZXI6OnZpc2l0KFZp
c2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQobV9sb2NrLmlzTG9ja2VkKCkp
OwogICAgIGZvciAoSlNDZWxsKiBjZWxsIDogbV9saXZlQ2VsbFBvaW50ZXJzKQogICAgICAgICB2
aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKGNlbGwpOwogfQogCit0ZW1wbGF0ZSB2b2lkIFNhbXBs
aW5nUHJvZmlsZXI6OnZpc2l0KEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQg
U2FtcGxpbmdQcm9maWxlcjo6dmlzaXQoU2xvdFZpc2l0b3ImKTsKKwogdm9pZCBTYW1wbGluZ1By
b2ZpbGVyOjpzaHV0ZG93bigpCiB7CiAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9sb2NrKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NhbXBsaW5nUHJvZmlsZXIuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TYW1wbGluZ1Byb2ZpbGVy
LmgJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Nh
bXBsaW5nUHJvZmlsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xNzEsNyArMTcxLDcgQEAgcHVibGljOgog
ICAgIHZvaWQgbm90aWNlSlNMb2NrQWNxdWlzaXRpb24oKTsKICAgICB2b2lkIG5vdGljZVZNRW50
cnkoKTsKICAgICB2b2lkIHNodXRkb3duKCk7Ci0gICAgdm9pZCB2aXNpdChTbG90VmlzaXRvciYp
OworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgdmlzaXQoVmlzaXRvciYpOwog
ICAgIExvY2smIGdldExvY2soKSB7IHJldHVybiBtX2xvY2s7IH0KICAgICB2b2lkIHNldFRpbWlu
Z0ludGVydmFsKFNlY29uZHMgaW50ZXJ2YWwpIHsgbV90aW1pbmdJbnRlcnZhbCA9IGludGVydmFs
OyB9CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBzdGFydCgpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVkQXJndW1lbnRzLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29wZWRBcmd1bWVudHMuY3BwCShyZXZpc2lv
biAyNzMxMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29wZWRBcmd1bWVu
dHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxNS0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtOTgsNyArOTgsOCBAQCBTY29wZWRBcmd1bWVudHMq
IFNjb3BlZEFyZ3VtZW50czo6Y3JlYXRlCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotdm9pZCBT
Y29wZWRBcmd1bWVudHM6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYg
dmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFNjb3BlZEFyZ3VtZW50
czo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewog
ICAgIFNjb3BlZEFyZ3VtZW50cyogdGhpc09iamVjdCA9IHN0YXRpY19jYXN0PFNjb3BlZEFyZ3Vt
ZW50cyo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwg
aW5mbygpKTsKQEAgLTExNSw2ICsxMTYsOCBAQCB2b2lkIFNjb3BlZEFyZ3VtZW50czo6dmlzaXRD
aGlsZHJlbihKU0NlCiAgICAgfQogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oU2NvcGVkQXJn
dW1lbnRzKTsKKwogU3RydWN0dXJlKiBTY29wZWRBcmd1bWVudHM6OmNyZWF0ZVN0cnVjdHVyZShW
TSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQog
ewogICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5
cGUsIFR5cGVJbmZvKFNjb3BlZEFyZ3VtZW50c1R5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygp
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlZEFyZ3VtZW50cy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlZEFyZ3Vt
ZW50cy5oCShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TY29wZWRBcmd1bWVudHMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTYzLDkgKzYzLDkgQEAgcHVi
bGljOgogICAgIAogICAgIC8vIENyZWF0ZXMgYW4gYXJndW1lbnRzIG9iamVjdCBieSBjb3B5aW5n
IHRoZSBhcmd1bWVudHMgZnJvbSBhIHdlbGwtZGVmaW5lZCBzdGFjayBsb2NhdGlvbi4KICAgICBz
dGF0aWMgU2NvcGVkQXJndW1lbnRzKiBjcmVhdGVCeUNvcHlpbmdGcm9tKFZNJiwgU3RydWN0dXJl
KiwgUmVnaXN0ZXIqIGFyZ3VtZW50c1N0YXJ0LCB1bnNpZ25lZCB0b3RhbExlbmd0aCwgSlNGdW5j
dGlvbiogY2FsbGVlLCBTY29wZWRBcmd1bWVudHNUYWJsZSosIEpTTGV4aWNhbEVudmlyb25tZW50
Kik7Ci0gICAgCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90Vmlz
aXRvciYpOwotICAgIAorCisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKKwogICAgIHVpbnQz
Ml90IGludGVybmFsTGVuZ3RoKCkgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiBtX3RvdGFs
TGVuZ3RoOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2ltcGxlVHlwZWRB
cnJheUNvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1NpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyLmNwcAkocmV2aXNpb24gMjczMTE5KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xs
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMywgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTYyLDcgKzYyLDcgQEAgYm9vbCBTaW1wbGVUeXBl
ZEFycmF5Q29udHJvbGxlcjo6aXNBdG9taQogICAgIHJldHVybiBtX2FsbG93QXRvbWljc1dhaXQ7
CiB9CiAKLWJvb2wgU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXI6OkpTQXJyYXlCdWZmZXJPd25l
cjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBo
YW5kbGUsIHZvaWQqLCBKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVh
c29uKQorYm9vbCBTaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlcjo6SlNBcnJheUJ1ZmZlck93bmVy
Ojppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhh
bmRsZSwgdm9pZCosIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hh
cioqIHJlYXNvbikKIHsKICAgICBpZiAoVU5MSUtFTFkocmVhc29uKSkKICAgICAgICAgKnJlYXNv
biA9ICJKU0FycmF5QnVmZmVyIGlzIG9wYXF1ZSByb290IjsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1NpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xs
ZXIuaAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01OCw3ICs1OCw3IEBA
IHB1YmxpYzoKIHByaXZhdGU6CiAgICAgY2xhc3MgSlNBcnJheUJ1ZmZlck93bmVyIGZpbmFsIDog
cHVibGljIFdlYWtIYW5kbGVPd25lciB7CiAgICAgcHVibGljOgotICAgICAgICBib29sIGlzUmVh
Y2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNv
bnRleHQsIFNsb3RWaXNpdG9yJiwgY29uc3QgY2hhcioqIHJlYXNvbikgZmluYWw7CisgICAgICAg
IGJvb2wgaXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3du
Piwgdm9pZCogY29udGV4dCwgQWJzdHJhY3RTbG90VmlzaXRvciYsIGNvbnN0IGNoYXIqKiByZWFz
b24pIGZpbmFsOwogICAgICAgICB2b2lkIGZpbmFsaXplKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93
bj4sIHZvaWQqIGNvbnRleHQpIGZpbmFsOwogICAgIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1NtYWxsU3RyaW5ncy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU21hbGxTdHJpbmdzLmNwcAkocmV2aXNpb24gMjczMTE5KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU21hbGxTdHJpbmdzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMTAg
QXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIw
MjEgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC02Niw3ICs2Niw4IEBAIHZvaWQgU21hbGxTdHJpbmdzOjppbml0aWFsaXpl
Q29tbW9uU3RyaW4KICAgICBzZXRJc0luaXRpYWxpemVkKHRydWUpOwogfQogCi12b2lkIFNtYWxs
U3RyaW5nczo6dmlzaXRTdHJvbmdSZWZlcmVuY2VzKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVt
cGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgU21hbGxTdHJpbmdzOjp2aXNpdFN0cm9uZ1Jl
ZmVyZW5jZXMoVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBtX25lZWRzVG9CZVZpc2l0ZWQgPSBm
YWxzZTsKICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKG1fZW1wdHlTdHJpbmcpOwpAQCAt
ODQsNiArODUsOSBAQCB2b2lkIFNtYWxsU3RyaW5nczo6dmlzaXRTdHJvbmdSZWZlcmVuY2VzCiAg
ICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZChtX29rU3RyaW5nKTsKIH0KIAordGVtcGxhdGUg
dm9pZCBTbWFsbFN0cmluZ3M6OnZpc2l0U3Ryb25nUmVmZXJlbmNlcyhBYnN0cmFjdFNsb3RWaXNp
dG9yJik7Cit0ZW1wbGF0ZSB2b2lkIFNtYWxsU3RyaW5nczo6dmlzaXRTdHJvbmdSZWZlcmVuY2Vz
KFNsb3RWaXNpdG9yJik7CisKIFNtYWxsU3RyaW5nczo6flNtYWxsU3RyaW5ncygpCiB7CiB9Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TbWFsbFN0cmluZ3MuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TbWFsbFN0cmluZ3MuaAkocmV2
aXNpb24gMjczMTE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU21hbGxTdHJp
bmdzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDA4LTIwMTkgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDA4LTIwMjEgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01MSw3ICs1MSw2IEBAIG5hbWVzcGFjZSBKU0Mgewog
CiBjbGFzcyBWTTsKIGNsYXNzIEpTU3RyaW5nOwotY2xhc3MgU2xvdFZpc2l0b3I7CiAKIHN0YXRp
YyBjb25zdGV4cHIgdW5zaWduZWQgbWF4U2luZ2xlQ2hhcmFjdGVyU3RyaW5nID0gMHhGRjsKIApA
QCAtNzgsNyArNzcsNyBAQCBwdWJsaWM6CiAgICAgSlNTdHJpbmcqKiBzaW5nbGVDaGFyYWN0ZXJT
dHJpbmdzKCkgeyByZXR1cm4gJm1fc2luZ2xlQ2hhcmFjdGVyU3RyaW5nc1swXTsgfQogCiAgICAg
dm9pZCBpbml0aWFsaXplQ29tbW9uU3RyaW5ncyhWTSYpOwotICAgIHZvaWQgdmlzaXRTdHJvbmdS
ZWZlcmVuY2VzKFNsb3RWaXNpdG9yJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4g
dm9pZCB2aXNpdFN0cm9uZ1JlZmVyZW5jZXMoVmlzaXRvciYpOwogCiAjZGVmaW5lIEpTQ19DT01N
T05fU1RSSU5HU19BQ0NFU1NPUl9ERUZJTklUSU9OKG5hbWUpIFwKICAgICBKU1N0cmluZyogbmFt
ZSMjU3RyaW5nKCkgY29uc3QgICAgICAgICAgICAgICAgICAgXApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU3BhcnNlQXJyYXlWYWx1ZU1hcC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3BhcnNlQXJyYXlWYWx1ZU1hcC5jcHAJKHJl
dmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NwYXJzZUFy
cmF5VmFsdWVNYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjEwLDcgKzIxMCw4IEBAIEpTVmFs
dWUgU3BhcnNlQXJyYXlFbnRyeTo6Z2V0Tm9uU3BhcnNlTW8KICAgICByZXR1cm4gQmFzZTo6Z2V0
KCk7CiB9CiAKLXZvaWQgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6dmlzaXRDaGlsZHJlbihKU0NlbGwq
IGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4K
K3ZvaWQgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxs
LCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFNwYXJzZUFycmF5VmFsdWVNYXAqIHRoaXNPYmpl
Y3QgPSBqc0Nhc3Q8U3BhcnNlQXJyYXlWYWx1ZU1hcCo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19P
QkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTIyMyw1ICsyMjQsNyBAQCB2
b2lkIFNwYXJzZUFycmF5VmFsdWVNYXA6OnZpc2l0Q2hpbGRyZW4oCiAgICAgdmlzaXRvci5yZXBv
cnRFeHRyYU1lbW9yeVZpc2l0ZWQodGhpc09iamVjdC0+bV9yZXBvcnRlZENhcGFjaXR5ICogc2l6
ZW9mKE1hcDo6S2V5VmFsdWVQYWlyVHlwZSkpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4o
U3BhcnNlQXJyYXlWYWx1ZU1hcCk7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TcGFyc2VBcnJheVZhbHVlTWFwLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3BhcnNlQXJyYXlWYWx1ZU1hcC5o
CShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TcGFy
c2VBcnJheVZhbHVlTWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDExLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDExLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMTUsNyArMTE1LDcgQEAgcHVi
bGljOgogICAgIAogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpT
R2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBwcm90b3R5cGUpOwogCi0gICAgc3RhdGljIHZvaWQgdmlz
aXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJ
TERSRU47CiAKICAgICBib29sIHNwYXJzZU1vZGUoKQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1N0YWNrRnJhbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0YWNrRnJhbWUuY3BwCShyZXZpc2lvbiAyNzMxMTkpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdGFja0ZyYW1lLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxOSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTE0MSwxMyArMTQxLDUgQEAgU3RyaW5nIFN0YWNrRnJhbWU6OnRvU3RyaW5nKFZN
JiB2bSkgY29ucwogICAgIHJldHVybiB0cmFjZUJ1aWxkLnRvU3RyaW5nKCkuaW1wbCgpOwogfQog
Ci12b2lkIFN0YWNrRnJhbWU6OnZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCi17
Ci0gICAgaWYgKG1fY2FsbGVlKQotICAgICAgICB2aXNpdG9yLmFwcGVuZChtX2NhbGxlZSk7Ci0g
ICAgaWYgKG1fY29kZUJsb2NrKQotICAgICAgICB2aXNpdG9yLmFwcGVuZChtX2NvZGVCbG9jayk7
Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIEpTQwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TdGFja0ZyYW1lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU3RhY2tGcmFtZS5oCShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TdGFja0ZyYW1lLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNiw2ICsy
Niw3IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkhlYXAuaCIKKyNpbmNsdWRlICJTbG90
VmlzaXRvck1hY3Jvcy5oIgogI2luY2x1ZGUgIlZNLmgiCiAjaW5jbHVkZSAiV2FzbUluZGV4T3JO
YW1lLmgiCiAjaW5jbHVkZSAiV3JpdGVCYXJyaWVyLmgiCkBAIC0zNSw3ICszNiw2IEBAIG5hbWVz
cGFjZSBKU0MgewogCiBjbGFzcyBDb2RlQmxvY2s7CiBjbGFzcyBKU09iamVjdDsKLWNsYXNzIFNs
b3RWaXNpdG9yOwogCiBjbGFzcyBTdGFja0ZyYW1lIHsKIHB1YmxpYzoKQEAgLTU3LDggKzU3LDE2
IEBAIHB1YmxpYzoKICAgICAgICAgQVNTRVJUKGhhc0J5dGVjb2RlSW5kZXgoKSk7CiAgICAgICAg
IHJldHVybiBtX2J5dGVjb2RlSW5kZXg7CiAgICAgfQotICAgIAotICAgIHZvaWQgdmlzaXRDaGls
ZHJlbihTbG90VmlzaXRvciYpOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KKyAg
ICB2b2lkIHZpc2l0Q2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKKyAgICB7CisgICAgICAgIGlm
IChtX2NhbGxlZSkKKyAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kKG1fY2FsbGVlKTsKKyAgICAg
ICAgaWYgKG1fY29kZUJsb2NrKQorICAgICAgICAgICAgdmlzaXRvci5hcHBlbmQobV9jb2RlQmxv
Y2spOworICAgIH0KKwogICAgIGJvb2wgaXNNYXJrZWQoVk0mIHZtKSBjb25zdCB7IHJldHVybiAo
IW1fY2FsbGVlIHx8IHZtLmhlYXAuaXNNYXJrZWQobV9jYWxsZWUuZ2V0KCkpKSAmJiAoIW1fY29k
ZUJsb2NrIHx8IHZtLmhlYXAuaXNNYXJrZWQobV9jb2RlQmxvY2suZ2V0KCkpKTsgfQogCiBwcml2
YXRlOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3Bw
CShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1
Y3R1cmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAwOC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAwOC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENv
cHlyaWdodCAoQykgMjAyMCBBbGV4ZXkgU2h2YXlrYSA8c2h2YWlrYWxlc2hAZ21haWwuY29tPi4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKQEAgLTEyNjgsNyArMTI2OCw4IEBAIHZvaWQgU3RydWN0dXJlOjpk
aWRUcmFuc2l0aW9uRnJvbVRoaXNTdHIKICAgICAgICAgbV90cmFuc2l0aW9uV2F0Y2hwb2ludFNl
dC5maXJlQWxsKHZtKCksIFN0cnVjdHVyZUZpcmVEZXRhaWwodGhpcykpOwogfQogCi12b2lkIFN0
cnVjdHVyZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9y
KQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgU3RydWN0dXJlOjp2aXNpdENoaWxk
cmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgU3RydWN0dXJl
KiB0aGlzT2JqZWN0ID0ganNDYXN0PFN0cnVjdHVyZSo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19P
QkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTEyOTAsMzIgKzEyOTEsMzgg
QEAgdm9pZCBTdHJ1Y3R1cmU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZQogICAgICAgICAvLyBO
T1RFOiBUaGlzIGNhbiBpbnRlcmxlYXZlIGluIHBpbigpLCBpbiB3aGljaCBjYXNlIGl0IG1heSBz
ZWUgYSBudWxsIHByb3BlcnR5IHRhYmxlLgogICAgICAgICAvLyBUaGF0J3MgZmluZSwgYmVjYXVz
ZSB0aGVuIHRoZSBiYXJyaWVyIHdpbGwgZmlyZSBhbmQgd2Ugd2lsbCBzY2FuIHRoaXMgYWdhaW4u
CiAgICAgICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fcHJvcGVydHlUYWJsZVVuc2Fm
ZSk7Ci0gICAgfSBlbHNlIGlmICh2aXNpdG9yLmlzQW5hbHl6aW5nSGVhcCgpKQorICAgIH0gZWxz
ZSBpZiAodmlzaXRvci52bSgpLmlzQW5hbHl6aW5nSGVhcCgpKQogICAgICAgICB2aXNpdG9yLmFw
cGVuZCh0aGlzT2JqZWN0LT5tX3Byb3BlcnR5VGFibGVVbnNhZmUpOwogICAgIGVsc2UgaWYgKHRo
aXNPYmplY3QtPm1fcHJvcGVydHlUYWJsZVVuc2FmZSkKICAgICAgICAgdGhpc09iamVjdC0+bV9w
cm9wZXJ0eVRhYmxlVW5zYWZlLmNsZWFyKCk7CiB9CiAKLWJvb2wgU3RydWN0dXJlOjppc0NoZWFw
RHVyaW5nR0MoVk0mIHZtKQorREVGSU5FX1ZJU0lUX0NISUxEUkVOKFN0cnVjdHVyZSk7CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+CitBTFdBWVNfSU5MSU5FIGJvb2wgU3RydWN0dXJlOjpp
c0NoZWFwRHVyaW5nR0MoVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICAvLyBGSVhNRTogV2UgY291
bGQgbWFrZSB0aGlzIGV2ZW4gc2FmZXIgYnkgcmV0dXJuaW5nIGZhbHNlIGlmIHRoaXMgc3RydWN0
dXJlJ3MgcHJvcGVydHkgdGFibGUKICAgICAvLyBoYXMgYW55IGxhcmdlIHByb3BlcnR5IG5hbWVz
LgogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTczMzQK
ICAgICAKLSAgICByZXR1cm4gKCFtX2dsb2JhbE9iamVjdCB8fCB2bS5oZWFwLmlzTWFya2VkKG1f
Z2xvYmFsT2JqZWN0LmdldCgpKSkKLSAgICAgICAgJiYgKGhhc1BvbHlQcm90bygpIHx8ICFzdG9y
ZWRQcm90b3R5cGVPYmplY3QoKSB8fCB2bS5oZWFwLmlzTWFya2VkKHN0b3JlZFByb3RvdHlwZU9i
amVjdCgpKSk7CisgICAgcmV0dXJuICghbV9nbG9iYWxPYmplY3QgfHwgdmlzaXRvci5pc01hcmtl
ZChtX2dsb2JhbE9iamVjdC5nZXQoKSkpCisgICAgICAgICYmIChoYXNQb2x5UHJvdG8oKSB8fCAh
c3RvcmVkUHJvdG90eXBlT2JqZWN0KCkgfHwgdmlzaXRvci5pc01hcmtlZChzdG9yZWRQcm90b3R5
cGVPYmplY3QoKSkpOwogfQogCi1ib29sIFN0cnVjdHVyZTo6bWFya0lmQ2hlYXAoU2xvdFZpc2l0
b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgorYm9vbCBTdHJ1Y3R1cmU6
Om1hcmtJZkNoZWFwKFZpc2l0b3ImIHZpc2l0b3IpCiB7Ci0gICAgVk0mIHZtID0gdmlzaXRvci52
bSgpOwotICAgIGlmICghaXNDaGVhcER1cmluZ0dDKHZtKSkKLSAgICAgICAgcmV0dXJuIHZtLmhl
YXAuaXNNYXJrZWQodGhpcyk7Ci0gICAgCisgICAgaWYgKCFpc0NoZWFwRHVyaW5nR0ModmlzaXRv
cikpCisgICAgICAgIHJldHVybiB2aXNpdG9yLmlzTWFya2VkKHRoaXMpOworCiAgICAgdmlzaXRv
ci5hcHBlbmRVbmJhcnJpZXJlZCh0aGlzKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAordGVtcGxh
dGUgYm9vbCBTdHJ1Y3R1cmU6Om1hcmtJZkNoZWFwKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3Rl
bXBsYXRlIGJvb2wgU3RydWN0dXJlOjptYXJrSWZDaGVhcChTbG90VmlzaXRvciYpOworCiBSZWY8
U3RydWN0dXJlU2hhcGU+IFN0cnVjdHVyZTo6dG9TdHJ1Y3R1cmVTaGFwZShKU1ZhbHVlIHZhbHVl
LCBib29sJiBzYXdQb2x5UHJvdG9TdHJ1Y3R1cmUpCiB7CiAgICAgUmVmPFN0cnVjdHVyZVNoYXBl
PiBiYXNlU2hhcGUgPSBTdHJ1Y3R1cmVTaGFwZTo6Y3JlYXRlKCk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAkocmV2aXNpb24gMjczMTE5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMjAgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC02MCw3ICs2MCw2IEBAIGNsYXNzIFByb3BlcnR5TmFtZUFycmF5RGF0YTsKIGNsYXNzIFByb3Bl
cnR5VGFibGU7CiBjbGFzcyBTdHJ1Y3R1cmVDaGFpbjsKIGNsYXNzIFN0cnVjdHVyZVNoYXBlOwot
Y2xhc3MgU2xvdFZpc2l0b3I7CiBjbGFzcyBKU1N0cmluZzsKIHN0cnVjdCBEdW1wQ29udGV4dDsK
IHN0cnVjdCBIYXNoVGFibGU7CkBAIC0zMTAsNyArMzA5LDcgQEAgcHVibGljOgogICAgIEpTVmFs
dWUgcHJvdG90eXBlRm9yTG9va3VwKEpTR2xvYmFsT2JqZWN0KiwgSlNDZWxsKiBiYXNlKSBjb25z
dDsKICAgICBTdHJ1Y3R1cmVDaGFpbiogcHJvdG90eXBlQ2hhaW4oVk0mLCBKU0dsb2JhbE9iamVj
dCosIEpTT2JqZWN0KiBiYXNlKSBjb25zdDsKICAgICBTdHJ1Y3R1cmVDaGFpbiogcHJvdG90eXBl
Q2hhaW4oSlNHbG9iYWxPYmplY3QqLCBKU09iamVjdCogYmFzZSkgY29uc3Q7Ci0gICAgc3RhdGlj
IHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVf
VklTSVRfQ0hJTERSRU47CiAgICAgCiAgICAgLy8gQSBTdHJ1Y3R1cmUgaXMgY2hlYXAgdG8gbWFy
ayBkdXJpbmcgR0MgaWYgZG9pbmcgc28gd291bGQgb25seSBhZGQgYSBzbWFsbCBhbmQgYm91bmRl
ZCBhbW91bnQKICAgICAvLyB0byBvdXIgaGVhcCBmb290cHJpbnQuIEZvciBleGFtcGxlLCBpZiB0
aGUgc3RydWN0dXJlIHJlZmVycyB0byBhIGdsb2JhbCBvYmplY3QgdGhhdCBpcyBub3QKQEAgLTMx
OCwxMCArMzE3LDEwIEBAIHB1YmxpYzoKICAgICAvLyBpbmNyZWFzZSBpbiBmb290cHJpbnQgYmVj
YXVzZSBubyBvdGhlciBvYmplY3QgcmVmZXJzIHRvIHRoYXQgZ2xvYmFsIG9iamVjdC4gVGhpcyBt
ZXRob2QKICAgICAvLyByZXR1cm5zIHRydWUgaWYgYWxsIHVzZXItY29udHJvbGxlZCAoYW5kIGhl
bmNlIHVuYm91bmRlZCBpbiBzaXplKSBvYmplY3RzIHJlZmVyZW5jZWQgZnJvbSB0aGUKICAgICAv
LyBTdHJ1Y3R1cmUgYXJlIGFscmVhZHkgbWFya2VkLgotICAgIGJvb2wgaXNDaGVhcER1cmluZ0dD
KFZNJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gYm9vbCBpc0NoZWFwRHVyaW5n
R0MoVmlzaXRvciYpOwogICAgIAogICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGlzIHN0cnVjdHVy
ZSBpcyBub3cgbWFya2VkLgotICAgIGJvb2wgbWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImKTsKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiBib29sIG1hcmtJZkNoZWFwKFZpc2l0b3ImKTsK
ICAgICAKICAgICBib29sIGhhc1JhcmVEYXRhKCkgY29uc3QKICAgICB7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVDaGFpbi5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlQ2hhaW4uY3BwCShyZXZpc2lv
biAyNzMxMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVDaGFp
bi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAwOC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtNjYsNyArNjYsOCBAQCB2b2lkIFN0cnVjdHVyZUNoYWluOjpm
aW5pc2hDcmVhdGlvbihWTSYgCiAgICAgfQogfQogCi12b2lkIFN0cnVjdHVyZUNoYWluOjp2aXNp
dENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0
eXBlbmFtZSBWaXNpdG9yPgordm9pZCBTdHJ1Y3R1cmVDaGFpbjo6dmlzaXRDaGlsZHJlbkltcGwo
SlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFN0cnVjdHVyZUNoYWluKiB0
aGlzT2JqZWN0ID0ganNDYXN0PFN0cnVjdHVyZUNoYWluKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dD
X09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtODAsNCArODEsNiBAQCB2
b2lkIFN0cnVjdHVyZUNoYWluOjp2aXNpdENoaWxkcmVuKEpTQ2VsCiAgICAgfQogfQogCitERUZJ
TkVfVklTSVRfQ0hJTERSRU4oU3RydWN0dXJlQ2hhaW4pOworCiB9IC8vIG5hbWVzcGFjZSBKU0MK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUNoYWluLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlQ2hhaW4u
aAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3Ry
dWN0dXJlQ2hhaW4uaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDgtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDgtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTUxLDcgKzUxLDcgQEAgcHVibGljOgog
CiAgICAgc3RhdGljIFN0cnVjdHVyZUNoYWluKiBjcmVhdGUoVk0mLCBKU09iamVjdCopOwogICAg
IFN0cnVjdHVyZUlEKiBoZWFkKCkgeyByZXR1cm4gbV92ZWN0b3IuZ2V0KCk7IH0KLSAgICBzdGF0
aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFS
RV9WSVNJVF9DSElMRFJFTjsKIAogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVy
ZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBl
KQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZVJh
cmVEYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
dHJ1Y3R1cmVSYXJlRGF0YS5jcHAJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZVJhcmVEYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTY3LDcgKzY3LDggQEAgU3RydWN0dXJlUmFyZURhdGE6OlN0cnVjdHVyZVJhcmVEYXRhKFZNJgog
ICAgICAgICBtX3ByZXZpb3VzLnNldCh2bSwgdGhpcywgcHJldmlvdXMpOwogfQogCi12b2lkIFN0
cnVjdHVyZVJhcmVEYXRhOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3Im
IHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBTdHJ1Y3R1cmVSYXJl
RGF0YTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQog
ewogICAgIFN0cnVjdHVyZVJhcmVEYXRhKiB0aGlzT2JqZWN0ID0ganNDYXN0PFN0cnVjdHVyZVJh
cmVEYXRhKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0
LCBpbmZvKCkpOwpAQCAtODYsNiArODcsOCBAQCB2b2lkIFN0cnVjdHVyZVJhcmVEYXRhOjp2aXNp
dENoaWxkcmVuKEpTCiAgICAgfQogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oU3RydWN0dXJl
UmFyZURhdGEpOworCiAvLyAtLS0tLS0tLS0tLSBDYWNoZWQgc3BlY2lhbCBwcm9wZXJ0aWVzIGhl
bHBlciB3YXRjaHBvaW50IGNsYXNzZXMgLS0tLS0tLS0tLS0KIAogY2xhc3MgQ2FjaGVkU3BlY2lh
bFByb3BlcnR5QWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50IGZpbmFsIDog
cHVibGljIEFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludEJhc2UgewpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlUmFyZURhdGEuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVSYXJlRGF0
YS5oCShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
dHJ1Y3R1cmVSYXJlRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjgsNyArNjgsNyBAQCBwdWJs
aWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOwog
ICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNp
dENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElM
RFJFTjsKIAogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xv
YmFsT2JqZWN0KiwgSlNWYWx1ZSBwcm90b3R5cGUpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TeW1ib2xUYWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFibGUuY3BwCShyZXZpc2lvbiAyNzMxMTkpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TeW1ib2xUYWJsZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTkgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC05Miw3ICs5Miw4IEBAIHZvaWQgU3ltYm9sVGFibGU6OmZpbmlzaENyZWF0aW9uKFZN
JiB2bSkKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CiB9CiAKLXZvaWQgU3ltYm9sVGFi
bGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiB0aGlzQ2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3Ip
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBTeW1ib2xUYWJsZTo6dmlzaXRDaGls
ZHJlbkltcGwoSlNDZWxsKiB0aGlzQ2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBTeW1i
b2xUYWJsZSogdGhpc1N5bWJvbFRhYmxlID0ganNDYXN0PFN5bWJvbFRhYmxlKj4odGhpc0NlbGwp
OwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc1N5bWJvbFRhYmxlLCBpbmZvKCkp
OwpAQCAtMTA4LDYgKzEwOSw4IEBAIHZvaWQgU3ltYm9sVGFibGU6OnZpc2l0Q2hpbGRyZW4oSlND
ZWxsKiAKICAgICB0aGlzU3ltYm9sVGFibGUtPm1fbG9jYWxUb0VudHJ5ID0gbnVsbHB0cjsKIH0K
IAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKFN5bWJvbFRhYmxlKTsKKwogY29uc3QgU3ltYm9sVGFi
bGU6OkxvY2FsVG9FbnRyeVZlYyYgU3ltYm9sVGFibGU6OmxvY2FsVG9FbnRyeShjb25zdCBDb25j
dXJyZW50SlNMb2NrZXImKQogewogICAgIGlmIChVTkxJS0VMWSghbV9sb2NhbFRvRW50cnkpKSB7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TeW1ib2xUYWJsZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJvbFRhYmxlLmgJKHJl
dmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJvbFRh
YmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDA3LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDA3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03MzMsNyArNzMzLDcgQEAgcHVibGljOgogICAgICAg
ICBtX3NpbmdsZXRvbi5ub3RpZnlXcml0ZSh2bSwgdGhpcywgc2NvcGUsIHJlYXNvbik7CiAgICAg
fQogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYp
OworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBERUNMQVJFX0VYUE9SVF9JTkZP
OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlUHJvZmlsZXJMb2cu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVQcm9m
aWxlckxvZy5jcHAJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1R5cGVQcm9maWxlckxvZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMjQsNyArMTI0
LDkgQEAgdm9pZCBUeXBlUHJvZmlsZXJMb2c6OnByb2Nlc3NMb2dFbnRyaWVzKAogICAgIH0KIH0K
IAotdm9pZCBUeXBlUHJvZmlsZXJMb2c6OnZpc2l0KFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorLy8g
V2UgZG9uJ3QgbmVlZCBhIFNsb3RWaXNpdG9yIHZlcnNpb24gb2YgdGhpcyBiZWNhdXNlIFR5cGVQ
cm9maWxlckxvZyBpcyBvbmx5IHVzZWQgYnkKKy8vIGRldiB0b29scywgYW5kIGlzIHRoZXJlZm9y
ZSBub3Qgb24gdGhlIGNyaXRpY2FsIHBhdGggZm9yIHBlcmZvcm1hbmNlLgordm9pZCBUeXBlUHJv
ZmlsZXJMb2c6OnZpc2l0KEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgZm9y
IChMb2dFbnRyeSogZW50cnkgPSBtX2xvZ1N0YXJ0UHRyOyBlbnRyeSAhPSBtX2N1cnJlbnRMb2dF
bnRyeVB0cjsgKytlbnRyeSkgewogICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKGVu
dHJ5LT52YWx1ZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlUHJv
ZmlsZXJMb2cuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9U
eXBlUHJvZmlsZXJMb2cuaAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvVHlwZVByb2ZpbGVyTG9nLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzMsNiArMzMsNyBA
QAogCiBuYW1lc3BhY2UgSlNDIHsKIAorY2xhc3MgQWJzdHJhY3RTbG90VmlzaXRvcjsKIGNsYXNz
IFR5cGVMb2NhdGlvbjsKIAogY2xhc3MgVHlwZVByb2ZpbGVyTG9nIHsKQEAgLTU5LDcgKzYwLDcg
QEAgcHVibGljOgogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgcHJvY2Vzc0xvZ0VudHJpZXMo
Vk0mLCBjb25zdCBTdHJpbmcmKTsKICAgICBMb2dFbnRyeSogbG9nRW5kUHRyKCkgY29uc3QgeyBy
ZXR1cm4gbV9sb2dFbmRQdHI7IH0KIAotICAgIHZvaWQgdmlzaXQoU2xvdFZpc2l0b3ImKTsKKyAg
ICB2b2lkIHZpc2l0KEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKIAogICAgIHN0YXRpYyBwdHJkaWZm
X3QgbG9nU3RhcnRPZmZzZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoVHlwZVByb2ZpbGVy
TG9nLCBtX2xvZ1N0YXJ0UHRyKTsgfQogICAgIHN0YXRpYyBwdHJkaWZmX3QgY3VycmVudExvZ0Vu
dHJ5T2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFR5cGVQcm9maWxlckxvZywgbV9j
dXJyZW50TG9nRW50cnlQdHIpOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9WTS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJ
KHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4
LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDA4LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC0xMjEsNiArMTIxLDcgQEAgY2xhc3MgRmFzdE1hbGxvY0FsaWdu
ZWRNZW1vcnlBbGxvY2F0b3I7CiBjbGFzcyBHaWdhY2FnZUFsaWduZWRNZW1vcnlBbGxvY2F0b3I7
CiBjbGFzcyBIYW5kbGVTdGFjazsKIGNsYXNzIEhhc093blByb3BlcnR5Q2FjaGU7CitjbGFzcyBI
ZWFwQW5hbHl6ZXI7CiBjbGFzcyBIZWFwUHJvZmlsZXI7CiBjbGFzcyBJZGVudGlmaWVyOwogY2xh
c3MgSW50ZXJwcmV0ZXI7CkBAIC0zMDksNiArMzEwLDEwIEBAIHB1YmxpYzoKICAgICBIZWFwUHJv
ZmlsZXIqIGhlYXBQcm9maWxlcigpIGNvbnN0IHsgcmV0dXJuIG1faGVhcFByb2ZpbGVyLmdldCgp
OyB9CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgSGVhcFByb2ZpbGVyJiBlbnN1cmVIZWFwUHJvZmls
ZXIoKTsKIAorICAgIGJvb2wgaXNBbmFseXppbmdIZWFwKCkgY29uc3QgeyByZXR1cm4gbV9hY3Rp
dmVIZWFwQW5hbHl6ZXI7IH0KKyAgICBIZWFwQW5hbHl6ZXIqIGFjdGl2ZUhlYXBBbmFseXplcigp
IGNvbnN0IHsgcmV0dXJuIG1fYWN0aXZlSGVhcEFuYWx5emVyOyB9CisgICAgdm9pZCBzZXRBY3Rp
dmVIZWFwQW5hbHl6ZXIoSGVhcEFuYWx5emVyKiBhbmFseXplcikgeyBtX2FjdGl2ZUhlYXBBbmFs
eXplciA9IGFuYWx5emVyOyB9CisKICNpZiBFTkFCTEUoU0FNUExJTkdfUFJPRklMRVIpCiAgICAg
U2FtcGxpbmdQcm9maWxlciogc2FtcGxpbmdQcm9maWxlcigpIHsgcmV0dXJuIG1fc2FtcGxpbmdQ
cm9maWxlci5nZXQoKTsgfQogICAgIEpTX0VYUE9SVF9QUklWQVRFIFNhbXBsaW5nUHJvZmlsZXIm
IGVuc3VyZVNhbXBsaW5nUHJvZmlsZXIoUmVmPFN0b3B3YXRjaD4mJik7CkBAIC0xMTk0LDkgKzEx
OTksMTAgQEAgcHVibGljOgogICAgIGJvb2wgZGlkRW50ZXJWTSB7IGZhbHNlIH07CiBwcml2YXRl
OgogICAgIGJvb2wgbV9mYWlsTmV4dE5ld0NvZGVCbG9jayB7IGZhbHNlIH07Ci0gICAgRGVsZXRl
UHJvcGVydHlNb2RlIG1fZGVsZXRlUHJvcGVydHlNb2RlIHsgRGVsZXRlUHJvcGVydHlNb2RlOjpE
ZWZhdWx0IH07CiAgICAgYm9vbCBtX2dsb2JhbENvbnN0UmVkZWNsYXJhdGlvblNob3VsZFRocm93
IHsgdHJ1ZSB9OwogICAgIGJvb2wgbV9zaG91bGRCdWlsZFBDVG9Db2RlT3JpZ2luTWFwcGluZyB7
IGZhbHNlIH07CisgICAgRGVsZXRlUHJvcGVydHlNb2RlIG1fZGVsZXRlUHJvcGVydHlNb2RlIHsg
RGVsZXRlUHJvcGVydHlNb2RlOjpEZWZhdWx0IH07CisgICAgSGVhcEFuYWx5emVyKiBtX2FjdGl2
ZUhlYXBBbmFseXplciB7IG51bGxwdHIgfTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q29kZUNhY2hl
PiBtX2NvZGVDYWNoZTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SW50bENhY2hlPiBtX2ludGxDYWNo
ZTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8QnVpbHRpbkV4ZWN1dGFibGVzPiBtX2J1aWx0aW5FeGVj
dXRhYmxlczsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtNYXBJbXBs
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9XZWFrTWFw
SW1wbC5jcHAJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1dlYWtNYXBJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICogQ29weXJpZ2h0IChDKSAyMDE3IFl1c3VrZSBTdXp1a2kgPHV0YXRhbmUudGVhQGdtYWlsLmNv
bT4uCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSAiV2Vha01h
cEltcGwuaCIKIAogI2luY2x1ZGUgIkF1eGlsaWFyeUJhcnJpZXJJbmxpbmVzLmgiCisjaW5jbHVk
ZSAiU2xvdFZpc2l0b3JJbmxpbmVzLmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlSW5saW5lcy5oIgog
I2luY2x1ZGUgIldlYWtNYXBJbXBsSW5saW5lcy5oIgogCkBAIC0zOSw4ICs0MCw5IEBAIHZvaWQg
V2Vha01hcEltcGw8V2Vha01hcEJ1Y2tldD46OmRlc3Ryb3kKICAgICBzdGF0aWNfY2FzdDxXZWFr
TWFwSW1wbCo+KGNlbGwpLT5+V2Vha01hcEltcGwoKTsKIH0KIAotdGVtcGxhdGUgPHR5cGVuYW1l
IFdlYWtNYXBCdWNrZXQ+Ci12b2lkIFdlYWtNYXBJbXBsPFdlYWtNYXBCdWNrZXQ+Ojp2aXNpdENo
aWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBl
bmFtZSBXZWFrTWFwQnVja2V0PgordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgV2Vh
a01hcEltcGw8V2Vha01hcEJ1Y2tldD46OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwg
VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBXZWFrTWFwSW1wbCogdGhpc09iamVjdCA9IGpzQ2Fz
dDxXZWFrTWFwSW1wbCo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhp
c09iamVjdCwgaW5mbygpKTsKQEAgLTQ4LDYgKzUwLDggQEAgdm9pZCBXZWFrTWFwSW1wbDxXZWFr
TWFwQnVja2V0Pjo6dmlzaXRDaAogICAgIHZpc2l0b3IucmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVk
KHRoaXNPYmplY3QtPm1fY2FwYWNpdHkgKiBzaXplb2YoV2Vha01hcEJ1Y2tldCkpOwogfQogCitE
RUZJTkVfVklTSVRfQ0hJTERSRU5fV0lUSF9NT0RJRklFUih0ZW1wbGF0ZTx0eXBlbmFtZSBXZWFr
TWFwQnVja2V0PiwgV2Vha01hcEltcGw8V2Vha01hcEJ1Y2tldD4pOworCiB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgV2Vha01hcEJ1Y2tldD4KIHNpemVfdCBXZWFrTWFwSW1wbDxXZWFrTWFwQnVja2V0Pjo6
ZXN0aW1hdGVkU2l6ZShKU0NlbGwqIGNlbGwsIFZNJiB2bSkKIHsKQEAgLTU2LDE1ICs2MCwyNSBA
QCBzaXplX3QgV2Vha01hcEltcGw8V2Vha01hcEJ1Y2tldD46OmVzdGltCiB9CiAKIHRlbXBsYXRl
IDw+Ci12b2lkIFdlYWtNYXBJbXBsPFdlYWtNYXBCdWNrZXQ8V2Vha01hcEJ1Y2tldERhdGFLZXk+
Pjo6dmlzaXRPdXRwdXRDb25zdHJhaW50cyhKU0NlbGwqLCBTbG90VmlzaXRvciYpCit0ZW1wbGF0
ZSA8Pgordm9pZCBXZWFrTWFwSW1wbDxXZWFrTWFwQnVja2V0PFdlYWtNYXBCdWNrZXREYXRhS2V5
Pj46OnZpc2l0T3V0cHV0Q29uc3RyYWludHMoSlNDZWxsKiwgQWJzdHJhY3RTbG90VmlzaXRvciYp
CiB7CiAgICAgLy8gT25seSBKU1dlYWtNYXAgbmVlZHMgdG8gaGFydmVzdCB2YWx1ZSByZWZlcmVu
Y2VzCiB9CiAKIHRlbXBsYXRlIDw+Ci12b2lkIFdlYWtNYXBJbXBsPFdlYWtNYXBCdWNrZXQ8V2Vh
a01hcEJ1Y2tldERhdGFLZXlWYWx1ZT4+Ojp2aXNpdE91dHB1dENvbnN0cmFpbnRzKEpTQ2VsbCog
Y2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZSA8Pgordm9pZCBXZWFrTWFwSW1w
bDxXZWFrTWFwQnVja2V0PFdlYWtNYXBCdWNrZXREYXRhS2V5Pj46OnZpc2l0T3V0cHV0Q29uc3Ry
YWludHMoSlNDZWxsKiwgU2xvdFZpc2l0b3ImKQogewotICAgIFZNJiB2bSA9IHZpc2l0b3Iudm0o
KTsKKyAgICAvLyBPbmx5IEpTV2Vha01hcCBuZWVkcyB0byBoYXJ2ZXN0IHZhbHVlIHJlZmVyZW5j
ZXMKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQnVja2V0VHlwZT4KK3RlbXBsYXRlPHR5cGVuYW1l
IFZpc2l0b3I+CitBTFdBWVNfSU5MSU5FIHZvaWQgV2Vha01hcEltcGw8QnVja2V0VHlwZT46OnZp
c2l0T3V0cHV0Q29uc3RyYWludHMoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQorewor
ICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19zYW1lPEJ1Y2tldFR5cGUsIFdlYWtNYXBCdWNrZXQ8
V2Vha01hcEJ1Y2tldERhdGFLZXlWYWx1ZT4+Ojp2YWx1ZSk7CisKICAgICBhdXRvKiB0aGlzT2Jq
ZWN0ID0ganNDYXN0PFdlYWtNYXBJbXBsKj4oY2VsbCk7CiAgICAgYXV0byBsb2NrZXIgPSBob2xk
TG9jayh0aGlzT2JqZWN0LT5jZWxsTG9jaygpKTsKICAgICBhdXRvKiBidWZmZXIgPSB0aGlzT2Jq
ZWN0LT5idWZmZXIoKTsKQEAgLTcyLDEyICs4NiwxNSBAQCB2b2lkIFdlYWtNYXBJbXBsPFdlYWtN
YXBCdWNrZXQ8V2Vha01hcEJ1CiAgICAgICAgIGF1dG8qIGJ1Y2tldCA9IGJ1ZmZlciArIGluZGV4
OwogICAgICAgICBpZiAoYnVja2V0LT5pc0VtcHR5KCkgfHwgYnVja2V0LT5pc0RlbGV0ZWQoKSkK
ICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAoIXZtLmhlYXAuaXNNYXJrZWQoYnVj
a2V0LT5rZXkoKSkpCisgICAgICAgIGlmICghdmlzaXRvci5pc01hcmtlZChidWNrZXQtPmtleSgp
KSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBidWNrZXQtPnZpc2l0QWdncmVnYXRl
KHZpc2l0b3IpOwogICAgIH0KIH0KIAordGVtcGxhdGUgdm9pZCBXZWFrTWFwSW1wbDxXZWFrTWFw
QnVja2V0PFdlYWtNYXBCdWNrZXREYXRhS2V5VmFsdWU+Pjo6dmlzaXRPdXRwdXRDb25zdHJhaW50
cyhKU0NlbGwqLCBBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIFdlYWtNYXBJ
bXBsPFdlYWtNYXBCdWNrZXQ8V2Vha01hcEJ1Y2tldERhdGFLZXlWYWx1ZT4+Ojp2aXNpdE91dHB1
dENvbnN0cmFpbnRzKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisKIHRlbXBsYXRlIDx0eXBlbmFt
ZSBXZWFrTWFwQnVja2V0PgogdGVtcGxhdGU8dHlwZW5hbWUgQXBwZW5kZXI+CiB2b2lkIFdlYWtN
YXBJbXBsPFdlYWtNYXBCdWNrZXQ+Ojp0YWtlU25hcHNob3RJbnRlcm5hbCh1bnNpZ25lZCBsaW1p
dCwgQXBwZW5kZXIgYXBwZW5kZXIpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9XZWFrTWFwSW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1dlYWtNYXBJbXBsLmgJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1dlYWtNYXBJbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDE3IFl1c3VrZSBTdXp1a2kgPHV0YXRhbmUu
dGVhQGdtYWlsLmNvbT4uCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0xNDQsOCArMTQ0LDggQEAgcHVi
bGljOgogICAgICAgICBjbGVhclZhbHVlKCk7CiAgICAgfQogCi0gICAgdGVtcGxhdGUgPHR5cGVu
YW1lIFQgPSBEYXRhPgotICAgIEFMV0FZU19JTkxJTkUgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8
c3RkOjppc19zYW1lPFQsIFdlYWtNYXBCdWNrZXREYXRhS2V5VmFsdWU+Ojp2YWx1ZT46OnR5cGUg
dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisgICAgdGVtcGxhdGUgPHR5cGVu
YW1lIFQgPSBEYXRhLCB0eXBlbmFtZSBWaXNpdG9yPgorICAgIEFMV0FZU19JTkxJTkUgdHlwZW5h
bWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19zYW1lPFQsIFdlYWtNYXBCdWNrZXREYXRhS2V5VmFs
dWU+Ojp2YWx1ZT46OnR5cGUgdmlzaXRBZ2dyZWdhdGUoVmlzaXRvciYgdmlzaXRvcikKICAgICB7
CiAgICAgICAgIHZpc2l0b3IuYXBwZW5kKG1fZGF0YS52YWx1ZSk7CiAgICAgfQpAQCAtMjAyLDcg
KzIwMiw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNEZXN0cnVj
dGlvbiA9IHRydWU7CiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKIAotICAgIHN0
YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNM
QVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgc3RhdGljIHNpemVfdCBlc3RpbWF0ZWRTaXplKEpT
Q2VsbCosIFZNJik7CiAKQEAgLTMxMSwxMCArMzExLDEzIEBAIHB1YmxpYzoKICAgICAgICAgcmV0
dXJuIHZtLndlYWtTZXRTcGFjZTxtb2RlPigpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIHZp
c2l0T3V0cHV0Q29uc3RyYWludHMoSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBWaXNpdG9yPiBzdGF0aWMgdm9pZCB2aXNpdE91dHB1dENvbnN0cmFpbnRzKEpT
Q2VsbCosIFZpc2l0b3ImKTsKICAgICB2b2lkIGZpbmFsaXplVW5jb25kaXRpb25hbGx5KFZNJik7
CiAKIHByaXZhdGU6CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KKyAgICBBTFdBWVNf
SU5MSU5FIHN0YXRpYyB2b2lkIHZpc2l0T3V0cHV0Q29uc3RyYWludHNGb3JEYXRhS2V5VmFsdWUo
SlNDZWxsKiwgVmlzaXRvciYpOworCiAgICAgQUxXQVlTX0lOTElORSBXZWFrTWFwQnVja2V0VHlw
ZSogZmluZEJ1Y2tldChKU09iamVjdCoga2V5KQogICAgIHsKICAgICAgICAgcmV0dXJuIGZpbmRC
dWNrZXQoa2V5LCBqc1dlYWtNYXBIYXNoKGtleSkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3Rvb2xzL0pTRG9sbGFyVk0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS90b29scy9KU0RvbGxhclZNLmNwcAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3Rvb2xzL0pTRG9sbGFyVk0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIwIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjI0
LDE0ICsyMjQsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgUm9v
dCopOwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQotICAgIHsKLSAgICAgICAgRG9sbGFyVk1Bc3NlcnRTY29wZSBhc3Nl
cnRTY29wZTsKLSAgICAgICAgRWxlbWVudCogdGhpc09iamVjdCA9IGpzQ2FzdDxFbGVtZW50Kj4o
Y2VsbCk7Ci0gICAgICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5m
bygpKTsKLSAgICAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsK
LSAgICAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9yb290KTsKLSAgICB9CisgICAg
REVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIHN0YXRpYyBFbGVtZW50SGFuZGxlT3duZXIq
IGhhbmRsZU93bmVyKCk7CiAKQEAgLTI0NywxMCArMjQwLDIyIEBAIHByaXZhdGU6CiAgICAgV3Jp
dGVCYXJyaWVyPFJvb3Q+IG1fcm9vdDsKIH07CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+
Cit2b2lkIEVsZW1lbnQ6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYg
dmlzaXRvcikKK3sKKyAgICBEb2xsYXJWTUFzc2VydFNjb3BlIGFzc2VydFNjb3BlOworICAgIEVs
ZW1lbnQqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8RWxlbWVudCo+KGNlbGwpOworICAgIEFTU0VSVF9H
Q19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKKyAgICBCYXNlOjp2aXNpdENo
aWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOworICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmpl
Y3QtPm1fcm9vdCk7Cit9CisKK0RFRklORV9WSVNJVF9DSElMRFJFTihFbGVtZW50KTsKKwogY2xh
c3MgRWxlbWVudEhhbmRsZU93bmVyIGZpbmFsIDogcHVibGljIFdlYWtIYW5kbGVPd25lciB7CiAg
ICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgYm9vbCBpc1JlYWNoYWJs
ZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCos
IFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKSBmaW5hbAorICAgIGJv
b2wgaXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBo
YW5kbGUsIHZvaWQqLCBBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiog
cmVhc29uKSBmaW5hbAogICAgIHsKICAgICAgICAgRG9sbGFyVk1Bc3NlcnRTY29wZSBhc3NlcnRT
Y29wZTsKICAgICAgICAgaWYgKFVOTElLRUxZKHJlYXNvbikpCkBAIC0zMDQsMTggKzMwOSwyMyBA
QCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2Jq
ZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5m
bygpKTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCogdGhp
c09iamVjdCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCi0gICAgewotICAgICAgICBEb2xsYXJWTUFz
c2VydFNjb3BlIGFzc2VydFNjb3BlOwotICAgICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRT
KHRoaXNPYmplY3QsIGluZm8oKSk7Ci0gICAgICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09i
amVjdCwgdmlzaXRvcik7Ci0gICAgICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdCh0aGlzT2JqZWN0
KTsKLSAgICB9CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogcHJpdmF0ZToKICAgICBX
ZWFrPEVsZW1lbnQ+IG1fZWxlbWVudDsKIH07CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+
Cit2b2lkIFJvb3Q6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogdGhpc09iamVjdCwgVmlzaXRv
ciYgdmlzaXRvcikKK3sKKyAgICBEb2xsYXJWTUFzc2VydFNjb3BlIGFzc2VydFNjb3BlOworICAg
IEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKKyAgICBCYXNl
Ojp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOworICAgIHZpc2l0b3IuYWRkT3Bh
cXVlUm9vdCh0aGlzT2JqZWN0KTsKK30KKworREVGSU5FX1ZJU0lUX0NISUxEUkVOKFJvb3QpOwor
CiBjbGFzcyBTaW1wbGVPYmplY3QgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7CiBwdWJsaWM6
CiAgICAgU2ltcGxlT2JqZWN0KFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCkBAIC0zNDAs
MTQgKzM1MCw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHNpbXBsZU9iamVjdDsKICAgICB9
CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0
b3ImIHZpc2l0b3IpCi0gICAgewotICAgICAgICBEb2xsYXJWTUFzc2VydFNjb3BlIGFzc2VydFNj
b3BlOwotICAgICAgICBTaW1wbGVPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8U2ltcGxlT2Jq
ZWN0Kj4oY2VsbCk7Ci0gICAgICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVj
dCwgaW5mbygpKTsKLSAgICAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNp
dG9yKTsKLSAgICAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9oaWRkZW5WYWx1ZSk7
Ci0gICAgfQorICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBzdGF0aWMgU3RydWN0
dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBKU1ZhbHVlIHByb3RvdHlwZSkKICAgICB7CkBAIC0zODAsNiArMzgzLDE4IEBAIHByaXZhdGU6
CiAgICAgV3JpdGVCYXJyaWVyPEpTQzo6VW5rbm93bj4gbV9oaWRkZW5WYWx1ZTsKIH07CiAKK3Rl
bXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFNpbXBsZU9iamVjdDo6dmlzaXRDaGlsZHJl
bkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIERvbGxhclZNQXNz
ZXJ0U2NvcGUgYXNzZXJ0U2NvcGU7CisgICAgU2ltcGxlT2JqZWN0KiB0aGlzT2JqZWN0ID0ganND
YXN0PFNpbXBsZU9iamVjdCo+KGNlbGwpOworICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMo
dGhpc09iamVjdCwgaW5mbygpKTsKKyAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3Qs
IHZpc2l0b3IpOworICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1faGlkZGVuVmFsdWUp
OworfQorCitERUZJTkVfVklTSVRfQ0hJTERSRU4oU2ltcGxlT2JqZWN0KTsKKwogY2xhc3MgSW1w
dXJlR2V0dGVyIDogcHVibGljIEpTTm9uRmluYWxPYmplY3QgewogcHVibGljOgogICAgIEltcHVy
ZUdldHRlcihWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQpAQCAtNDM2LDE0ICs0NTEsNyBA
QCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBCYXNlOjpnZXRPd25Qcm9wZXJ0eVNsb3Qob2JqZWN0
LCBnbG9iYWxPYmplY3QsIG5hbWUsIHNsb3QpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIHZp
c2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKLSAgICB7Ci0g
ICAgICAgIERvbGxhclZNQXNzZXJ0U2NvcGUgYXNzZXJ0U2NvcGU7Ci0gICAgICAgIEFTU0VSVF9H
Q19PQkpFQ1RfSU5IRVJJVFMoY2VsbCwgaW5mbygpKTsKLSAgICAgICAgQmFzZTo6dmlzaXRDaGls
ZHJlbihjZWxsLCB2aXNpdG9yKTsKLSAgICAgICAgSW1wdXJlR2V0dGVyKiB0aGlzT2JqZWN0ID0g
anNDYXN0PEltcHVyZUdldHRlcio+KGNlbGwpOwotICAgICAgICB2aXNpdG9yLmFwcGVuZCh0aGlz
T2JqZWN0LT5tX2RlbGVnYXRlKTsKLSAgICB9CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsK
IAogICAgIHZvaWQgc2V0RGVsZWdhdGUoVk0mIHZtLCBKU09iamVjdCogZGVsZWdhdGUpCiAgICAg
ewpAQCAtNDU0LDYgKzQ2MiwxOCBAQCBwcml2YXRlOgogICAgIFdyaXRlQmFycmllcjxKU09iamVj
dD4gbV9kZWxlZ2F0ZTsKIH07CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIElt
cHVyZUdldHRlcjo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNp
dG9yKQoreworICAgIERvbGxhclZNQXNzZXJ0U2NvcGUgYXNzZXJ0U2NvcGU7CisgICAgQVNTRVJU
X0dDX09CSkVDVF9JTkhFUklUUyhjZWxsLCBpbmZvKCkpOworICAgIEJhc2U6OnZpc2l0Q2hpbGRy
ZW4oY2VsbCwgdmlzaXRvcik7CisgICAgSW1wdXJlR2V0dGVyKiB0aGlzT2JqZWN0ID0ganNDYXN0
PEltcHVyZUdldHRlcio+KGNlbGwpOworICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1f
ZGVsZWdhdGUpOworfQorCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSW1wdXJlR2V0dGVyKTsKKwog
c3RhdGljIEpTQ19ERUNMQVJFX0NVU1RPTV9HRVRURVIoY3VzdG9tR2V0dGVyVmFsdWVHZXR0ZXIp
Owogc3RhdGljIEpTQ19ERUNMQVJFX0NVU1RPTV9HRVRURVIoY3VzdG9tR2V0dGVyQWNlc3Nvckdl
dHRlcik7CiAKQEAgLTE4MjIsMTQgKzE4NDIsNyBAQCBwdWJsaWM6CiAgICAgICAgIHB1dERpcmVj
dE5hdGl2ZUZ1bmN0aW9uKHZtLCBnbG9iYWxPYmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmco
dm0sICJhZGRCeXRlcyIpLCAwLCBmdW5jdGlvbldhc21TdHJlYW1pbmdDb21waWxlckFkZEJ5dGVz
LCBOb0ludHJpbnNpYywgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpE
b250RW51bSkpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKLSAgICB7Ci0gICAgICAgIERvbGxhclZNQXNz
ZXJ0U2NvcGUgYXNzZXJ0U2NvcGU7Ci0gICAgICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8
V2FzbVN0cmVhbWluZ0NvbXBpbGVyKj4oY2VsbCk7Ci0gICAgICAgIEFTU0VSVF9HQ19PQkpFQ1Rf
SU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKLSAgICAgICAgQmFzZTo6dmlzaXRDaGlsZHJl
bih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKLSAgICAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVj
dC0+bV9wcm9taXNlKTsKLSAgICB9CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAg
IERFQ0xBUkVfSU5GTzsKIApAQCAtMTgzNyw2ICsxODUwLDE4IEBAIHB1YmxpYzoKICAgICBSZWY8
V2FzbTo6U3RyZWFtaW5nQ29tcGlsZXI+IG1fc3RyZWFtaW5nQ29tcGlsZXI7CiB9OwogCit0ZW1w
bGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBXYXNtU3RyZWFtaW5nQ29tcGlsZXI6OnZpc2l0
Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBEb2xs
YXJWTUFzc2VydFNjb3BlIGFzc2VydFNjb3BlOworICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nh
c3Q8V2FzbVN0cmVhbWluZ0NvbXBpbGVyKj4oY2VsbCk7CisgICAgQVNTRVJUX0dDX09CSkVDVF9J
TkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOworICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhp
c09iamVjdCwgdmlzaXRvcik7CisgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9wcm9t
aXNlKTsKK30KKworREVGSU5FX1ZJU0lUX0NISUxEUkVOKFdhc21TdHJlYW1pbmdDb21waWxlcik7
CisKIGNvbnN0IENsYXNzSW5mbyBXYXNtU3RyZWFtaW5nQ29tcGlsZXI6OnNfaW5mbyA9IHsgIldh
c21TdHJlYW1pbmdDb21waWxlciIsICZCYXNlOjpzX2luZm8sIG51bGxwdHIsIG51bGxwdHIsIENS
RUFURV9NRVRIT0RfVEFCTEUoV2FzbVN0cmVhbWluZ0NvbXBpbGVyKSB9OwogCiBKU0NfREVGSU5F
X0hPU1RfRlVOQ1RJT04oZnVuY3Rpb25XYXNtU3RyZWFtaW5nQ29tcGlsZXJBZGRCeXRlcywgKEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKSkKQEAgLTM2
OTksMTMgKzM3MjQsMTYgQEAgdm9pZCBKU0RvbGxhclZNOjphZGRDb25zdHJ1Y3RpYmxlRnVuY3Rp
bwogICAgIHB1dERpcmVjdCh2bSwgaWRlbnRpZmllciwgSlNGdW5jdGlvbjo6Y3JlYXRlKHZtLCBn
bG9iYWxPYmplY3QsIGFyZ3VtZW50cywgaWRlbnRpZmllci5zdHJpbmcoKSwgZnVuY3Rpb24sIE5v
SW50cmluc2ljLCBmdW5jdGlvbiksIGpzRG9sbGFyVk1Qcm9wZXJ0eUF0dHJpYnV0ZXMpOwogfQog
Ci12b2lkIEpTRG9sbGFyVk06OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRv
ciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTRG9sbGFyVk06
OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAg
ICBKU0RvbGxhclZNKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTRG9sbGFyVk0qPihjZWxsKTsKICAg
ICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwogICAgIHZpc2l0b3Iu
YXBwZW5kKHRoaXNPYmplY3QtPm1fb2JqZWN0RG9pbmdTaWRlRWZmZWN0UHV0V2l0aG91dENvcnJl
Y3RTbG90U3RhdHVzU3RydWN0dXJlKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTRG9s
bGFyVk0pOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogSUdOT1JFX1dBUk5JTkdTX0VORApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0pTRG9sbGFyVk0uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvSlNEb2xsYXJWTS5oCShyZXZpc2lvbiAyNzMx
MTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvSlNEb2xsYXJWTS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE5IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtNzQsNyArNzQsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgYWRkRnVuY3Rpb24o
Vk0mLCBKU0dsb2JhbE9iamVjdCosIGNvbnN0IGNoYXIqIG5hbWUsIE5hdGl2ZUZ1bmN0aW9uLCB1
bnNpZ25lZCBhcmd1bWVudHMpOwogICAgIHZvaWQgYWRkQ29uc3RydWN0aWJsZUZ1bmN0aW9uKFZN
JiwgSlNHbG9iYWxPYmplY3QqLCBjb25zdCBjaGFyKiBuYW1lLCBOYXRpdmVGdW5jdGlvbiwgdW5z
aWduZWQgYXJndW1lbnRzKTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgV3Jp
dGVCYXJyaWVyPFN0cnVjdHVyZT4gbV9vYmplY3REb2luZ1NpZGVFZmZlY3RQdXRXaXRob3V0Q29y
cmVjdFNsb3RTdGF0dXNTdHJ1Y3R1cmU7CiB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbUdsb2JhbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbUdsb2JhbC5jcHAJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21HbG9iYWwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEwMyw3ICsxMDMsOCBA
QCB2b2lkIEdsb2JhbDo6c2V0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPCiAgICAgfQogfQogCi12
b2lkIEdsb2JhbDo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0
ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBHbG9iYWw6OnZpc2l0QWdncmVnYXRlSW1wbChWaXNp
dG9yJiB2aXNpdG9yKQogewogICAgIHN3aXRjaCAobV90eXBlKSB7CiAgICAgY2FzZSBXYXNtOjpU
eXBlOjpFeHRlcm5yZWY6CkBAIC0xMTcsNiArMTE4LDggQEAgdm9pZCBHbG9iYWw6OnZpc2l0QWdn
cmVnYXRlKFNsb3RWaXNpdG9yJgogICAgIH0KIH0KIAorREVGSU5FX1ZJU0lUX0FHR1JFR0FURShH
bG9iYWwpOworCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6R2xvYmFsCiAKICNlbmRpZiAvLyBFTkFC
TEUoV0VCQVNTRU1CTFkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtR2xv
YmFsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUdsb2Jh
bC5oCShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
R2xvYmFsLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDE3LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01Nyw3ICs1Nyw4IEBAIHB1YmxpYzoKICAgICBK
U1ZhbHVlIGdldChKU0dsb2JhbE9iamVjdCopIGNvbnN0OwogICAgIHVpbnQ2NF90IGdldFByaW1p
dGl2ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWUubV9wcmltaXRpdmU7IH0KICAgICB2b2lkIHNl
dChKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUpOwotICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xv
dFZpc2l0b3ImKTsKKy8vICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgdmlzaXRB
Z2dyZWdhdGUoVmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQUdHUkVHQVRFOwogCiAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgVD4gVCogb3duZXIoKSBjb25zdCB7IHJldHVybiByZWludGVycHJl
dF9jYXN0PFQqPihtX293bmVyKTsgfQogICAgIHZvaWQgc2V0T3duZXIoSlNPYmplY3QqIG93bmVy
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRhYmxlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGFibGUuY3BwCShyZXZpc2lv
biAyNzMxMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGFibGUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNy0y
MDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
Ny0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMTY2LDcgKzE2Niw4IEBAIEpTVmFsdWUgVGFibGU6OmdldCh1aW50
MzJfdCBpbmRleCkgY29uc3QKICAgICByZXR1cm4gbV9qc1ZhbHVlcy5nZXQoKVtpbmRleCAmIG1f
bWFza10uZ2V0KCk7CiB9CiAKLXZvaWQgVGFibGU6OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9y
JiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgVGFibGU6OnZpc2l0
QWdncmVnYXRlSW1wbChWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFJFTEVBU0VfQVNTRVJUKG1f
b3duZXIpOwogICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9vd25lci0+Y2VsbExvY2soKSk7
CkBAIC0xNzQsNiArMTc1LDggQEAgdm9pZCBUYWJsZTo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0
b3ImIAogICAgICAgICB2aXNpdG9yLmFwcGVuZChtX2pzVmFsdWVzLmdldCgpW2ldKTsKIH0KIAor
REVGSU5FX1ZJU0lUX0FHR1JFR0FURShUYWJsZSk7CisKIFR5cGUgVGFibGU6Ondhc21UeXBlKCkg
Y29uc3QKIHsKICAgICBpZiAoaXNFeHRlcm5yZWZUYWJsZSgpKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbVRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbVRhYmxlLmgJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21UYWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNy0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODAsNyArODAs
NyBAQCBwdWJsaWM6CiAgICAgT3B0aW9uYWw8dWludDMyX3Q+IGdyb3codWludDMyX3QgZGVsdGEs
IEpTVmFsdWUgZGVmYXVsdFZhbHVlKTsKICAgICB2b2lkIGNvcHkoY29uc3QgVGFibGUqIHNyY1Rh
YmxlLCB1aW50MzJfdCBkc3RJbmRleCwgdWludDMyX3Qgc3JjSW5kZXgpOwogCi0gICAgdm9pZCB2
aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQUdHUkVHQVRF
OwogCiBwcm90ZWN0ZWQ6CiAgICAgVGFibGUodWludDMyX3QgaW5pdGlhbCwgT3B0aW9uYWw8dWlu
dDMyX3Q+IG1heGltdW0sIFRhYmxlRWxlbWVudFR5cGUgPSBUYWJsZUVsZW1lbnRUeXBlOjpFeHRl
cm5yZWYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNUb1dhc21JQ0Nh
bGxlZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNU
b1dhc21JQ0NhbGxlZS5jcHAJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL0pTVG9XYXNtSUNDYWxsZWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ5LDcgKzQ5
LDggQEAgU3RydWN0dXJlKiBKU1RvV2FzbUlDQ2FsbGVlOjpjcmVhdGVTdHJ1YwogICAgIHJldHVy
biBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZv
KEpTQ2FsbGVlVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwogfQogCi12b2lkIEpTVG9X
YXNtSUNDYWxsZWU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlz
aXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTVG9XYXNtSUNDYWxsZWU6
OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAg
ICBKU1RvV2FzbUlDQ2FsbGVlKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVG9XYXNtSUNDYWxsZWUq
PihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8o
KSk7CkBAIC01OCw2ICs1OSw4IEBAIHZvaWQgSlNUb1dhc21JQ0NhbGxlZTo6dmlzaXRDaGlsZHJl
bihKU0MKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2Z1bmN0aW9uKTsKIH0KIAor
REVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTVG9XYXNtSUNDYWxsZWUpOworCiB9IC8vIG5hbWVzcGFj
ZSBKU0MKIAogI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2pzL0pTVG9XYXNtSUNDYWxsZWUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1RvV2FzbUlDQ2FsbGVlLmgJKHJldmlzaW9uIDI3
MzExOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTVG9XYXNtSUNDYWxsZWUu
aAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE5
LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC01Niw3ICs1Niw3IEBAIHByaXZhdGU6CiAgICAgSlNUb1dhc21JQ0Nh
bGxlZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3Ry
dWN0dXJlKQogICAgICAgICA6IEJhc2Uodm0sIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKQogICAg
IHsgfQotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3Im
KTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgV3JpdGVCYXJyaWVyPFdlYkFz
c2VtYmx5RnVuY3Rpb24+IG1fZnVuY3Rpb247CiB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9jay5jcHAJKHJl
dmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNz
ZW1ibHlDb2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxNy0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODIsNyArODIsOCBAQCB2b2lk
IEpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6OmNsZWFySlNDYWxsCiAgICAgICAgICgqaXRlciktPnVu
bGluayh2bSk7CiB9CiAKLXZvaWQgSlNXZWJBc3NlbWJseUNvZGVCbG9jazo6dmlzaXRDaGlsZHJl
bihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUg
VmlzaXRvcj4KK3ZvaWQgSlNXZWJBc3NlbWJseUNvZGVCbG9jazo6dmlzaXRDaGlsZHJlbkltcGwo
SlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTV2ViQXNzZW1ibHlDb2Rl
QmxvY2sqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNXZWJBc3NlbWJseUNvZGVCbG9jayo+KGNlbGwp
OwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAg
LTkwLDYgKzkxLDggQEAgdm9pZCBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrOjp2aXNpdENoaWxkcgog
ICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CiB9CiAKK0RFRklO
RV9WSVNJVF9DSElMRFJFTihKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKTsKKwogdm9pZCBKU1dlYkFz
c2VtYmx5Q29kZUJsb2NrOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxseShWTSYgdm0pCiB7CiAgICAg
Zm9yIChhdXRvIGl0ZXIgPSBtX2NhbGxMaW5rSW5mb3MuYmVnaW4oKTsgISFpdGVyOyArK2l0ZXIp
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJs
b2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJB
c3NlbWJseUNvZGVCbG9jay5oCShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjAgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC04Niw3ICs4Niw3IEBAIHByaXZhdGU6CiAgICAgREVDTEFSRV9FWFBPUlRfSU5GTzsKICAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNEZXN0cnVjdGlvbiA9IHRydWU7CiAgICAgc3RhdGlj
IHZvaWQgZGVzdHJveShKU0NlbGwqKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpT
Q2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAg
IFJlZjxXYXNtOjpDb2RlQmxvY2s+IG1fY29kZUJsb2NrOwogICAgIFZlY3RvcjxNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8V2FzbUVudHJ5UHRyVGFnPj4gbV93YXNtVG9KU0V4aXRTdHViczsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlHbG9iYWwuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlH
bG9iYWwuY3BwCShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9KU1dlYkFzc2VtYmx5R2xvYmFsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE5LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03MSw3ICs3MSw4IEBA
IHZvaWQgSlNXZWJBc3NlbWJseUdsb2JhbDo6ZGVzdHJveShKU0NlbGwKICAgICBzdGF0aWNfY2Fz
dDxKU1dlYkFzc2VtYmx5R2xvYmFsKj4oY2VsbCktPkpTV2ViQXNzZW1ibHlHbG9iYWw6On5KU1dl
YkFzc2VtYmx5R2xvYmFsKCk7CiB9CiAKLXZvaWQgSlNXZWJBc3NlbWJseUdsb2JhbDo6dmlzaXRD
aGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlw
ZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNXZWJBc3NlbWJseUdsb2JhbDo6dmlzaXRDaGlsZHJlbklt
cGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTV2ViQXNzZW1ibHlH
bG9iYWwqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNXZWJBc3NlbWJseUdsb2JhbCo+KGNlbGwpOwog
ICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTgw
LDYgKzgxLDggQEAgdm9pZCBKU1dlYkFzc2VtYmx5R2xvYmFsOjp2aXNpdENoaWxkcmVuKAogICAg
IHRoaXNPYmplY3QtPmdsb2JhbCgpLT52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKIH0KIAorREVG
SU5FX1ZJU0lUX0NISUxEUkVOKEpTV2ViQXNzZW1ibHlHbG9iYWwpOworCiB9IC8vIG5hbWVzcGFj
ZSBKU0MKIAogI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlHbG9iYWwuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5R2xvYmFsLmgJKHJldmlz
aW9uIDI3MzExOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1i
bHlHbG9iYWwuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE5LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01OSw3ICs1OSw3IEBAIHB1YmxpYzoKIHByaXZhdGU6
CiAgICAgSlNXZWJBc3NlbWJseUdsb2JhbChWTSYsIFN0cnVjdHVyZSosIFJlZjxXYXNtOjpHbG9i
YWw+JiYpOwogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKLSAgICBzdGF0aWMgdm9pZCB2
aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9D
SElMRFJFTjsKIAogICAgIFJlZjxXYXNtOjpHbG9iYWw+IG1fZ2xvYmFsOwogfTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUlu
c3RhbmNlLmNwcAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTczLDcg
KzczLDggQEAgdm9pZCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OmRlc3Ryb3koSlNDZQogICAgIHN0
YXRpY19jYXN0PEpTV2ViQXNzZW1ibHlJbnN0YW5jZSo+KGNlbGwpLT5KU1dlYkFzc2VtYmx5SW5z
dGFuY2U6On5KU1dlYkFzc2VtYmx5SW5zdGFuY2UoKTsKIH0KIAotdm9pZCBKU1dlYkFzc2VtYmx5
SW5zdGFuY2U6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRv
cikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTV2ViQXNzZW1ibHlJbnN0YW5j
ZTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewog
ICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNXZWJBc3NlbWJseUluc3RhbmNlKj4oY2Vs
bCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpA
QCAtMTAyLDYgKzEwMyw4IEBAIHZvaWQgSlNXZWJBc3NlbWJseUluc3RhbmNlOjp2aXNpdENoaWxk
cmUKICAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZCh3cmFwcGVyLmdldCgpKTsKIH0K
IAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTV2ViQXNzZW1ibHlJbnN0YW5jZSk7CisKIHZvaWQg
SlNXZWJBc3NlbWJseUluc3RhbmNlOjpmaW5hbGl6ZUNyZWF0aW9uKFZNJiB2bSwgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgUmVmPFdhc206OkNvZGVCbG9jaz4mJiB3YXNtQ29kZUJsb2Nr
LCBKU09iamVjdCogaW1wb3J0T2JqZWN0LCBXYXNtOjpDcmVhdGlvbk1vZGUgY3JlYXRpb25Nb2Rl
KQogewogICAgIG1faW5zdGFuY2UtPmZpbmFsaXplQ3JlYXRpb24odGhpcywgd2FzbUNvZGVCbG9j
ay5jb3B5UmVmKCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJB
c3NlbWJseUluc3RhbmNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmgJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE5IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMTA1LDcgKzEwNSw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgSlNXZWJB
c3NlbWJseUluc3RhbmNlKFZNJiwgU3RydWN0dXJlKiwgUmVmPFdhc206Okluc3RhbmNlPiYmKTsK
ICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgSlNXZWJBc3NlbWJseU1vZHVsZSosIFdlYkFz
c2VtYmx5TW9kdWxlUmVjb3JkKik7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0Nl
bGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBS
ZWY8V2FzbTo6SW5zdGFuY2U+IG1faW5zdGFuY2U7CiAgICAgVk0qIG1fdm07CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TWVtb3J5LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TWVtb3J5
LmNwcAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
SlNXZWJBc3NlbWJseU1lbW9yeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xNTksNyArMTU5LDgg
QEAgdm9pZCBKU1dlYkFzc2VtYmx5TWVtb3J5OjpkZXN0cm95KEpTQ2VsbAogICAgIG1lbW9yeS0+
SlNXZWJBc3NlbWJseU1lbW9yeTo6fkpTV2ViQXNzZW1ibHlNZW1vcnkoKTsKIH0KIAotdm9pZCBK
U1dlYkFzc2VtYmx5TWVtb3J5Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0
b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1dlYkFzc2Vt
Ymx5TWVtb3J5Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0
b3IpCiB7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1dlYkFzc2VtYmx5TWVtb3J5
Kj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZv
KCkpOwpAQCAtMTY5LDYgKzE3MCw4IEBAIHZvaWQgSlNXZWJBc3NlbWJseU1lbW9yeTo6dmlzaXRD
aGlsZHJlbigKICAgICB2aXNpdG9yLnJlcG9ydEV4dHJhTWVtb3J5VmlzaXRlZCh0aGlzT2JqZWN0
LT5tZW1vcnkoKS5zaXplKCkpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNXZWJBc3Nl
bWJseU1lbW9yeSk7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gRU5BQkxFKFdF
QkFTU0VNQkxZKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3Nl
bWJseU1lbW9yeS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L0pTV2ViQXNzZW1ibHlNZW1vcnkuaAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1lbW9yeS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE5IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIxIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtNjMsNyArNjMsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIEpTV2ViQXNzZW1ibHlNZW1v
cnkoVk0mLCBTdHJ1Y3R1cmUqKTsKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7Ci0gICAg
c3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERF
Q0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBSZWY8V2FzbTo6TWVtb3J5PiBtX21lbW9yeTsK
ICAgICBXcml0ZUJhcnJpZXI8SlNBcnJheUJ1ZmZlcj4gbV9idWZmZXJXcmFwcGVyOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1v
ZHVsZS5jcHAJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTI0LDcgKzEy
NCw4IEBAIHZvaWQgSlNXZWJBc3NlbWJseU1vZHVsZTo6c2V0Q29kZUJsb2NrKFYKICAgICBtX2Nv
ZGVCbG9ja3Nbc3RhdGljX2Nhc3Q8c2l6ZV90Pihtb2RlKV0uc2V0KHZtLCB0aGlzLCBjb2RlQmxv
Y2spOwogfQogCi12b2lkIEpTV2ViQXNzZW1ibHlNb2R1bGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+
Cit2b2lkIEpTV2ViQXNzZW1ibHlNb2R1bGU6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2Vs
bCwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU1dlYkFzc2VtYmx5TW9kdWxlKiB0aGlzT2Jq
ZWN0ID0ganNDYXN0PEpTV2ViQXNzZW1ibHlNb2R1bGUqPihjZWxsKTsKICAgICBBU1NFUlRfR0Nf
T0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC0xMzUsNiArMTM2LDggQEAg
dm9pZCBKU1dlYkFzc2VtYmx5TW9kdWxlOjp2aXNpdENoaWxkcmVuKAogICAgICAgICB2aXNpdG9y
LmFwcGVuZCh0aGlzT2JqZWN0LT5tX2NvZGVCbG9ja3NbaV0pOwogfQogCitERUZJTkVfVklTSVRf
Q0hJTERSRU4oSlNXZWJBc3NlbWJseU1vZHVsZSk7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAj
ZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuaAkocmV2aXNpb24gMjczMTE5
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
Ni0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtODAsNyArODAsNyBAQCBwcml2YXRlOgogCiAgICAgSlNXZWJB
c3NlbWJseU1vZHVsZShWTSYsIFN0cnVjdHVyZSosIFJlZjxXYXNtOjpNb2R1bGU+JiYpOwogICAg
IHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVu
KEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAog
ICAgIFJlZjxXYXNtOjpNb2R1bGU+IG1fbW9kdWxlOwogICAgIFdyaXRlQmFycmllcjxTeW1ib2xU
YWJsZT4gbV9leHBvcnRTeW1ib2xUYWJsZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL2pzL0pTV2ViQXNzZW1ibHlUYWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseVRhYmxlLmNwcAkocmV2aXNpb24gMjczMTE5
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseVRhYmxlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTYtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTcyLDcgKzcyLDggQEAgdm9pZCBKU1dlYkFzc2VtYmx5VGFi
bGU6OmRlc3Ryb3koSlNDZWxsKgogICAgIHN0YXRpY19jYXN0PEpTV2ViQXNzZW1ibHlUYWJsZSo+
KGNlbGwpLT5KU1dlYkFzc2VtYmx5VGFibGU6On5KU1dlYkFzc2VtYmx5VGFibGUoKTsKIH0KIAot
dm9pZCBKU1dlYkFzc2VtYmx5VGFibGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90
VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTV2Vi
QXNzZW1ibHlUYWJsZTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2
aXNpdG9yKQogewogICAgIEpTV2ViQXNzZW1ibHlUYWJsZSogdGhpc09iamVjdCA9IGpzQ2FzdDxK
U1dlYkFzc2VtYmx5VGFibGUqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRT
KHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC04MSw2ICs4Miw4IEBAIHZvaWQgSlNXZWJBc3NlbWJs
eVRhYmxlOjp2aXNpdENoaWxkcmVuKEoKICAgICB0aGlzT2JqZWN0LT50YWJsZSgpLT52aXNpdEFn
Z3JlZ2F0ZSh2aXNpdG9yKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTV2ViQXNzZW1i
bHlUYWJsZSk7CisKIGJvb2wgSlNXZWJBc3NlbWJseVRhYmxlOjpncm93KHVpbnQzMl90IGRlbHRh
LCBKU1ZhbHVlIGRlZmF1bHRWYWx1ZSkKIHsKICAgICBpZiAoZGVsdGEgPT0gMCkKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlUYWJsZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlUYWJsZS5o
CShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dl
YkFzc2VtYmx5VGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTYtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTcwLDcgKzcwLDcgQEAgcHVibGlj
OgogcHJpdmF0ZToKICAgICBKU1dlYkFzc2VtYmx5VGFibGUoVk0mLCBTdHJ1Y3R1cmUqLCBSZWY8
V2FzbTo6VGFibGU+JiYpOwogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKLSAgICBzdGF0
aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFS
RV9WSVNJVF9DSElMRFJFTjsKIAogICAgIFJlZjxXYXNtOjpUYWJsZT4gbV90YWJsZTsKIH07Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJs
eUZ1bmN0aW9uLmNwcAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00NTIs
NyArNDUyLDggQEAgV2ViQXNzZW1ibHlGdW5jdGlvbjo6V2ViQXNzZW1ibHlGdW5jdGlvbgogICAg
ICwgbV9pbXBvcnRhYmxlRnVuY3Rpb24geyBzaWduYXR1cmVJbmRleCwgd2FzbVRvV2FzbUVudHJ5
cG9pbnRMb2FkTG9jYXRpb24gfQogeyB9CiAKLXZvaWQgV2ViQXNzZW1ibHlGdW5jdGlvbjo6dmlz
aXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8
dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgV2ViQXNzZW1ibHlGdW5jdGlvbjo6dmlzaXRDaGlsZHJl
bkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFdlYkFzc2VtYmx5
RnVuY3Rpb24qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8V2ViQXNzZW1ibHlGdW5jdGlvbio+KGNlbGwp
OwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAg
LTQ2MSw2ICs0NjIsOCBAQCB2b2lkIFdlYkFzc2VtYmx5RnVuY3Rpb246OnZpc2l0Q2hpbGRyZW4o
CiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9qc1RvV2FzbUlDQ2FsbGVlKTsKIH0K
IAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKFdlYkFzc2VtYmx5RnVuY3Rpb24pOworCiB2b2lkIFdl
YkFzc2VtYmx5RnVuY3Rpb246OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQogewogICAgIHN0YXRpY19j
YXN0PFdlYkFzc2VtYmx5RnVuY3Rpb24qPihjZWxsKS0+V2ViQXNzZW1ibHlGdW5jdGlvbjo6fldl
YkFzc2VtYmx5RnVuY3Rpb24oKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L1dlYkFzc2VtYmx5RnVuY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmgJKHJldmlzaW9uIDI3MzExOSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxOSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTg2LDcgKzg2LDcgQEAgcHVibGljOgogICAgIFdhc206Okluc3RhbmNlKiBw
cmV2aW91c0luc3RhbmNlKENhbGxGcmFtZSopOwogCiBwcml2YXRlOgotICAgIHN0YXRpYyB2b2lk
IHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lU
X0NISUxEUkVOOwogICAgIFdlYkFzc2VtYmx5RnVuY3Rpb24oVk0mLCBOYXRpdmVFeGVjdXRhYmxl
KiwgSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqLCBXYXNtOjpDYWxsZWUmIGpzRW50cnlwb2lu
dCwgV2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbjo6TG9hZExvY2F0aW9uIGVudHJ5cG9pbnRM
b2FkTG9jYXRpb24sIFdhc206OlNpZ25hdHVyZUluZGV4KTsKIAogICAgIE1hY3JvQXNzZW1ibGVy
Q29kZVB0cjxKU0VudHJ5UHRyVGFnPiBqc0NhbGxFbnRyeXBvaW50U2xvdygpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbkJhc2UuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVu
Y3Rpb25CYXNlLmNwcAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbkJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQxLDcg
KzQxLDggQEAgV2ViQXNzZW1ibHlGdW5jdGlvbkJhc2U6OldlYkFzc2VtYmx5RnVuYwogICAgIDog
QmFzZSh2bSwgZXhlY3V0YWJsZSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUpCiB7IH0KIAotdm9p
ZCBXZWJBc3NlbWJseUZ1bmN0aW9uQmFzZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgV2Vi
QXNzZW1ibHlGdW5jdGlvbkJhc2U6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlz
aXRvciYgdmlzaXRvcikKIHsKICAgICBXZWJBc3NlbWJseUZ1bmN0aW9uQmFzZSogdGhpc09iamVj
dCA9IGpzQ2FzdDxXZWJBc3NlbWJseUZ1bmN0aW9uQmFzZSo+KGNlbGwpOwogICAgIEFTU0VSVF9H
Q19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTQ5LDYgKzUwLDggQEAg
dm9pZCBXZWJBc3NlbWJseUZ1bmN0aW9uQmFzZTo6dmlzaXRDaGlsZAogICAgIHZpc2l0b3IuYXBw
ZW5kKHRoaXNPYmplY3QtPm1faW5zdGFuY2UpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4o
V2ViQXNzZW1ibHlGdW5jdGlvbkJhc2UpOworCiB2b2lkIFdlYkFzc2VtYmx5RnVuY3Rpb25CYXNl
OjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIE5hdGl2ZUV4ZWN1dGFibGUqIGV4ZWN1dGFibGUsIHVu
c2lnbmVkIGxlbmd0aCwgY29uc3QgU3RyaW5nJiBuYW1lLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2Uq
IGluc3RhbmNlKQogewogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtLCBleGVjdXRhYmxlLCBs
ZW5ndGgsIG5hbWUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNz
ZW1ibHlGdW5jdGlvbkJhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uQmFzZS5oCShyZXZpc2lvbiAyNzMxMTkpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uQmFzZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNy0y
MDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
Ny0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtNDYsNyArNDYsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHB0cmRp
ZmZfdCBvZmZzZXRPZkluc3RhbmNlKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFdlYkFzc2Vt
Ymx5RnVuY3Rpb25CYXNlLCBtX2luc3RhbmNlKTsgfQogCiBwcm90ZWN0ZWQ6Ci0gICAgc3RhdGlj
IHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVf
VklTSVRfQ0hJTERSRU47CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIE5hdGl2ZUV4ZWN1
dGFibGUqLCB1bnNpZ25lZCBsZW5ndGgsIGNvbnN0IFN0cmluZyYgbmFtZSwgSlNXZWJBc3NlbWJs
eUluc3RhbmNlKik7CiAgICAgV2ViQXNzZW1ibHlGdW5jdGlvbkJhc2UoVk0mLCBOYXRpdmVFeGVj
dXRhYmxlKiwgSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqKTsKIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVj
b3JkLmNwcAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
anMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNzgsNyAr
NzgsOCBAQCB2b2lkIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpmaW5pc2hDcmVhCiAgICAgfQog
fQogCi12b2lkIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCog
Y2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgor
dm9pZCBXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBj
ZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkKiB0
aGlzT2JqZWN0ID0ganNDYXN0PFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkKj4oY2VsbCk7CiAgICAg
QVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtODgsNiAr
ODksOCBAQCB2b2lkIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjp2aXNpdENoaWxkCiAgICAgdmlz
aXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9leHBvcnRzT2JqZWN0KTsKIH0KIAorREVGSU5FX1ZJ
U0lUX0NISUxEUkVOKFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkKTsKKwogdm9pZCBXZWJBc3NlbWJs
eU1vZHVsZVJlY29yZDo6cHJlcGFyZUxpbmsoVk0mIHZtLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2Uq
IGluc3RhbmNlKQogewogICAgIFJFTEVBU0VfQVNTRVJUKCFtX2luc3RhbmNlKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1
bGVSZWNvcmQuaAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY5LDcg
KzY5LDcgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxPYmpl
Y3QqLCBWTSYsIGNvbnN0IFdhc206Ok1vZHVsZUluZm9ybWF0aW9uJik7CiAKLSAgICBzdGF0aWMg
dm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9W
SVNJVF9DSElMRFJFTjsKIAogICAgIFdyaXRlQmFycmllcjxKU1dlYkFzc2VtYmx5SW5zdGFuY2U+
IG1faW5zdGFuY2U7CiAgICAgV3JpdGVCYXJyaWVyPEpTT2JqZWN0PiBtX3N0YXJ0RnVuY3Rpb247
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVdyYXBwZXJG
dW5jdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
V2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uY3BwCShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3
LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC02Nyw3ICs2Nyw4IEBAIFN0cnVjdHVyZSogV2ViQXNzZW1ibHlX
cmFwcGVyRnVuY3Rpb246OmMKICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2Jh
bE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhKU0Z1bmN0aW9uVHlwZSwgU3RydWN0dXJlRmxh
Z3MpLCBpbmZvKCkpOwogfQogCi12b2lkIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uOjp2aXNp
dENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0
eXBlbmFtZSBWaXNpdG9yPgordm9pZCBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbjo6dmlzaXRD
aGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFdlYkFz
c2VtYmx5V3JhcHBlckZ1bmN0aW9uKiB0aGlzT2JqZWN0ID0ganNDYXN0PFdlYkFzc2VtYmx5V3Jh
cHBlckZ1bmN0aW9uKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlz
T2JqZWN0LCBpbmZvKCkpOwpAQCAtNzYsNiArNzcsOCBAQCB2b2lkIFdlYkFzc2VtYmx5V3JhcHBl
ckZ1bmN0aW9uOjp2aXNpdENoCiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9mdW5j
dGlvbik7CiB9CiAKK0RFRklORV9WSVNJVF9DSElMRFJFTihXZWJBc3NlbWJseVdyYXBwZXJGdW5j
dGlvbik7CisKIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihjYWxsV2ViQXNzZW1ibHlXcmFwcGVy
RnVuY3Rpb24sIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxG
cmFtZSkpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVdyYXBw
ZXJGdW5jdGlvbi5oCShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9qcy9XZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNy0yMDE5IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
NTksNyArNTksNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIFdlYkFzc2VtYmx5V3JhcHBlckZ1
bmN0aW9uKFZNJiwgTmF0aXZlRXhlY3V0YWJsZSosIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJl
KiwgV2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbik7CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlv
bihWTSYsIE5hdGl2ZUV4ZWN1dGFibGUqLCB1bnNpZ25lZCBsZW5ndGgsIGNvbnN0IFN0cmluZyYg
bmFtZSwgSlNPYmplY3QqLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqKTsKLSAgICBzdGF0aWMgdm9p
ZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJ
VF9DSElMRFJFTjsKIAogICAgIFdyaXRlQmFycmllcjxKU09iamVjdD4gbV9mdW5jdGlvbjsKICAg
ICAvLyBJdCdzIHNhZmUgdG8ganVzdCBob2xkIHRoZSByYXcgV2FzbVRvV2FzbUltcG9ydGFibGVG
dW5jdGlvbiBiZWNhdXNlIHdlIGhhdmUgYSByZWZlcmVuY2UKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlz
aW9uIDI3MzExOSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDUyOSBAQAorMjAyMS0wMi0xOCAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5j
b20+CisKKyAgICAgICAgSW1wbGVtZW50IGEgR0MgdmVyaWZpZXIuCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTcyNzQKKyAgICAgICAgcmRhcjovLzU2
MjU1NjgzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
MS4gQWRkZWQgc3VwcG9ydCBmb3IgdGhlIEdDIHZlcmlmaWVyLgorICAgICAgICAyLiBBbHNvIHJl
bW92ZWQgTm9kZUZpbHRlckNvbmRpdGlvbjo6dmlzaXRBZ2dyZWdhdGUoKSBiZWNhdXNlIGl0IGlz
IG5vdCB1c2VkLgorICAgICAgICAzLiBSZWJhc2VkIGJpbmRpbmdzIHRlc3QgcmVzdWx0cy4KKwor
ICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OklEQk9iamVjdFN0b3JlOjp2aXNpdFJlZmVyZW5jZWRJbmRleGVzIGNvbnN0KToK
KyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5oOgorICAgICAgICAq
IE1vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OklEQlRyYW5zYWN0aW9uOjp2aXNpdFJlZmVyZW5jZWRPYmplY3RTdG9yZXMgY29uc3QpOgorICAg
ICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmg6CisgICAgICAgICogTW9k
dWxlcy93ZWJhdWRpby9BdWRpb0J1ZmZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0J1
ZmZlcjo6dmlzaXRDaGFubmVsV3JhcHBlcnMpOgorICAgICAgICAqIE1vZHVsZXMvd2ViYXVkaW8v
QXVkaW9CdWZmZXIuaDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9ET01HQ091dHB1dENvbnN0cmFp
bnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RE9NR0NPdXRwdXRDb25zdHJhaW50OjpleGVjdXRl
SW1wbEltcGwpOgorICAgICAgICAoV2ViQ29yZTo6RE9NR0NPdXRwdXRDb25zdHJhaW50OjpleGVj
dXRlSW1wbCk6CisgICAgICAgICogYmluZGluZ3MvanMvRE9NR0NPdXRwdXRDb25zdHJhaW50Lmg6
CisgICAgICAgICogYmluZGluZ3MvanMvSlNBYm9ydENvbnRyb2xsZXJDdXN0b20uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SlNBYm9ydENvbnRyb2xsZXI6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVu
KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0Fib3J0U2lnbmFsQ3VzdG9tLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkpTQWJvcnRTaWduYWxPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9v
dHMpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTQXR0ckN1c3RvbS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpKU0F0dHI6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKToKKyAgICAgICAgKiBiaW5k
aW5ncy9qcy9KU0F1ZGlvQnVmZmVyQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTQXVk
aW9CdWZmZXI6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKToKKyAgICAgICAgKiBiaW5kaW5ncy9q
cy9KU0F1ZGlvVHJhY2tDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNBdWRpb1RyYWNr
Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbik6CisgICAgICAgICogYmluZGluZ3MvanMvSlNBdWRp
b1RyYWNrTGlzdEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0F1ZGlvVHJhY2tMaXN0
Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbik6CisgICAgICAgICogYmluZGluZ3MvanMvSlNBdWRp
b1dvcmtsZXRQcm9jZXNzb3JDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNBdWRpb1dv
cmtsZXRQcm9jZXNzb3I6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKToKKyAgICAgICAgKiBiaW5k
aW5ncy9qcy9KU0NTU1J1bGVDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNDU1NSdWxl
Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbik6CisgICAgICAgICogYmluZGluZ3MvanMvSlNDU1NS
dWxlTGlzdEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0NTU1J1bGVMaXN0T3duZXI6
OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0NT
U1N0eWxlRGVjbGFyYXRpb25DdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNDU1NTdHls
ZURlY2xhcmF0aW9uOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbik6CisgICAgICAgICogYmluZGlu
Z3MvanMvSlNDYWxsYmFja0RhdGEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNDYWxsYmFja0Rh
dGFXZWFrOjp2aXNpdEpTRnVuY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6SlNDYWxsYmFja0Rh
dGFXZWFrOjpXZWFrT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKToKKyAgICAgICAg
KiBiaW5kaW5ncy9qcy9KU0NhbGxiYWNrRGF0YS5oOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pT
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpT
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJET3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3Rz
KToKKyAgICAgICAgKFdlYkNvcmU6OkpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjp2aXNpdEFk
ZGl0aW9uYWxDaGlsZHJlbik6CisgICAgICAgICogYmluZGluZ3MvanMvSlNDdXN0b21FdmVudEN1
c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0N1c3RvbUV2ZW50Ojp2aXNpdEFkZGl0aW9u
YWxDaGlsZHJlbik6CisgICAgICAgICogYmluZGluZ3MvanMvSlNET01CdWlsdGluQ29uc3RydWN0
b3JCYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NQnVpbHRpbkNvbnN0cnVjdG9yQmFz
ZTo6dmlzaXRDaGlsZHJlbkltcGwpOgorICAgICAgICAoV2ViQ29yZTo6SlNET01CdWlsdGluQ29u
c3RydWN0b3JCYXNlOjp2aXNpdENoaWxkcmVuKTogRGVsZXRlZC4KKyAgICAgICAgKiBiaW5kaW5n
cy9qcy9KU0RPTUJ1aWx0aW5Db25zdHJ1Y3RvckJhc2UuaDoKKyAgICAgICAgKiBiaW5kaW5ncy9q
cy9KU0RPTUdsb2JhbE9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0RPTUdsb2JhbE9i
amVjdDo6dmlzaXRDaGlsZHJlbkltcGwpOgorICAgICAgICAoV2ViQ29yZTo6SlNET01HbG9iYWxP
YmplY3Q6OnZpc2l0Q2hpbGRyZW4pOiBEZWxldGVkLgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pT
RE9NR2xvYmFsT2JqZWN0Lmg6CisgICAgICAgICogYmluZGluZ3MvanMvSlNET01HdWFyZGVkT2Jq
ZWN0Lmg6CisgICAgICAgICogYmluZGluZ3MvanMvSlNET01RdWFkQ3VzdG9tLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkpTRE9NUXVhZDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4pOgorICAgICAg
ICAqIGJpbmRpbmdzL2pzL0pTRE9NV2luZG93Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkpTRE9NV2luZG93Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbik6CisgICAgICAgICogYmluZGlu
Z3MvanMvSlNEZXByZWNhdGVkQ1NTT01WYWx1ZUN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpKU0RlcHJlY2F0ZWRDU1NPTVZhbHVlT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3Rz
KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RvY3VtZW50Q3VzdG9tLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkpTRG9jdW1lbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKToKKyAgICAgICAg
KiBiaW5kaW5ncy9qcy9KU0Vycm9yRXZlbnRDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SlNFcnJvckV2ZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbik6CisgICAgICAgICogYmluZGlu
Z3MvanMvSlNFdmVudExpc3RlbmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTRXZlbnRMaXN0
ZW5lcjo6dmlzaXRKU0Z1bmN0aW9uSW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpKU0V2ZW50TGlz
dGVuZXI6OnZpc2l0SlNGdW5jdGlvbik6CisgICAgICAgICogYmluZGluZ3MvanMvSlNFdmVudExp
c3RlbmVyLmg6CisgICAgICAgICogYmluZGluZ3MvanMvSlNFdmVudFRhcmdldEN1c3RvbS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpKU0V2ZW50VGFyZ2V0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJl
bik6CisgICAgICAgICogYmluZGluZ3MvanMvSlNGZXRjaEV2ZW50Q3VzdG9tLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkpTRmV0Y2hFdmVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4pOgorICAg
ICAgICAqIGJpbmRpbmdzL2pzL0pTSFRNTENhbnZhc0VsZW1lbnRDdXN0b20uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SlNIVE1MQ2FudmFzRWxlbWVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4p
OgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTSFRNTFRlbXBsYXRlRWxlbWVudEN1c3RvbS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpKU0hUTUxUZW1wbGF0ZUVsZW1lbnQ6OnZpc2l0QWRkaXRpb25h
bENoaWxkcmVuKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0hpc3RvcnlDdXN0b20uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SlNIaXN0b3J5Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbik6Cisg
ICAgICAgICogYmluZGluZ3MvanMvSlNJREJDdXJzb3JDdXN0b20uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SlNJREJDdXJzb3I6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKToKKyAgICAgICAgKiBi
aW5kaW5ncy9qcy9KU0lEQkN1cnNvcldpdGhWYWx1ZUN1c3RvbS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpKU0lEQkN1cnNvcldpdGhWYWx1ZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4pOgorICAg
ICAgICAqIGJpbmRpbmdzL2pzL0pTSURCSW5kZXhDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SlNJREJJbmRleDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4pOgorICAgICAgICAqIGJpbmRp
bmdzL2pzL0pTSURCT2JqZWN0U3RvcmVDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNJ
REJPYmplY3RTdG9yZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4pOgorICAgICAgICAqIGJpbmRp
bmdzL2pzL0pTSURCUmVxdWVzdEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0lEQlJl
cXVlc3Q6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9K
U0lEQlRyYW5zYWN0aW9uQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTSURCVHJhbnNh
Y3Rpb246OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9K
U0ludGVyc2VjdGlvbk9ic2VydmVyQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTSW50
ZXJzZWN0aW9uT2JzZXJ2ZXI6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKToKKyAgICAgICAgKiBi
aW5kaW5ncy9qcy9KU0ludGVyc2VjdGlvbk9ic2VydmVyRW50cnlDdXN0b20uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SlNJbnRlcnNlY3Rpb25PYnNlcnZlckVudHJ5Ojp2aXNpdEFkZGl0aW9uYWxD
aGlsZHJlbik6CisgICAgICAgICogYmluZGluZ3MvanMvSlNNZXNzYWdlQ2hhbm5lbEN1c3RvbS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpKU01lc3NhZ2VDaGFubmVsOjp2aXNpdEFkZGl0aW9uYWxD
aGlsZHJlbik6CisgICAgICAgICogYmluZGluZ3MvanMvSlNNZXNzYWdlRXZlbnRDdXN0b20uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SlNNZXNzYWdlRXZlbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxk
cmVuKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU01lc3NhZ2VQb3J0Q3VzdG9tLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkpTTWVzc2FnZVBvcnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKToK
KyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU011dGF0aW9uT2JzZXJ2ZXJDdXN0b20uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SlNNdXRhdGlvbk9ic2VydmVyOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJl
bik6CisgICAgICAgIChXZWJDb3JlOjpKU011dGF0aW9uT2JzZXJ2ZXJPd25lcjo6aXNSZWFjaGFi
bGVGcm9tT3BhcXVlUm9vdHMpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTTXV0YXRpb25SZWNv
cmRDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNNdXRhdGlvblJlY29yZDo6dmlzaXRB
ZGRpdGlvbmFsQ2hpbGRyZW4pOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTTmF2aWdhdG9yQ3Vz
dG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTTmF2aWdhdG9yOjp2aXNpdEFkZGl0aW9uYWxD
aGlsZHJlbik6CisgICAgICAgICogYmluZGluZ3MvanMvSlNOb2RlQ3VzdG9tLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OmlzUmVhY2hhYmxlRnJvbURPTSk6CisgICAgICAgIChXZWJDb3JlOjpKU05v
ZGVPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMpOgorICAgICAgICAoV2ViQ29yZTo6
SlNOb2RlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbik6CisgICAgICAgICogYmluZGluZ3MvanMv
SlNOb2RlSXRlcmF0b3JDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNOb2RlSXRlcmF0
b3I6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU05v
ZGVMaXN0Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTTm9kZUxpc3RPd25lcjo6aXNS
ZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTT2Zmc2Ny
ZWVuQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkpTT2Zmc2NyZWVuQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJET3duZXI6OmlzUmVhY2hhYmxlRnJv
bU9wYXF1ZVJvb3RzKToKKyAgICAgICAgKFdlYkNvcmU6OkpTT2Zmc2NyZWVuQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJEOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbik6CisgICAgICAgICogYmluZGlu
Z3MvanMvSlNQYWludFJlbmRlcmluZ0NvbnRleHQyREN1c3RvbS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpKU1BhaW50UmVuZGVyaW5nQ29udGV4dDJET3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1
ZVJvb3RzKToKKyAgICAgICAgKFdlYkNvcmU6OkpTUGFpbnRSZW5kZXJpbmdDb250ZXh0MkQ6OnZp
c2l0QWRkaXRpb25hbENoaWxkcmVuKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1BhaW50V29y
a2xldEdsb2JhbFNjb3BlQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTUGFpbnRXb3Jr
bGV0R2xvYmFsU2NvcGU6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKToKKyAgICAgICAgKiBiaW5k
aW5ncy9qcy9KU1BheW1lbnRNZXRob2RDaGFuZ2VFdmVudEN1c3RvbS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpKU1BheW1lbnRNZXRob2RDaGFuZ2VFdmVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRy
ZW4pOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTUGF5bWVudFJlc3BvbnNlQ3VzdG9tLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkpTUGF5bWVudFJlc3BvbnNlOjp2aXNpdEFkZGl0aW9uYWxDaGls
ZHJlbik6CisgICAgICAgICogYmluZGluZ3MvanMvSlNQZXJmb3JtYW5jZU9ic2VydmVyQ3VzdG9t
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTUGVyZm9ybWFuY2VPYnNlcnZlcjo6dmlzaXRBZGRp
dGlvbmFsQ2hpbGRyZW4pOgorICAgICAgICAoV2ViQ29yZTo6SlNQZXJmb3JtYW5jZU9ic2VydmVy
T3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKToKKyAgICAgICAgKiBiaW5kaW5ncy9q
cy9KU1BvcFN0YXRlRXZlbnRDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNQb3BTdGF0
ZUV2ZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbik6CisgICAgICAgICogYmluZGluZ3MvanMv
SlNQcm9taXNlUmVqZWN0aW9uRXZlbnRDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNQ
cm9taXNlUmVqZWN0aW9uRXZlbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKToKKyAgICAgICAg
KiBiaW5kaW5ncy9qcy9KU1Jlc2l6ZU9ic2VydmVyQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkpTUmVzaXplT2JzZXJ2ZXI6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKToKKyAgICAgICAg
KiBiaW5kaW5ncy9qcy9KU1Jlc2l6ZU9ic2VydmVyRW50cnlDdXN0b20uY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SlNSZXNpemVPYnNlcnZlckVudHJ5Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbik6
CisgICAgICAgICogYmluZGluZ3MvanMvSlNTVkdWaWV3U3BlY0N1c3RvbS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpKU1NWR1ZpZXdTcGVjOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbik6CisgICAg
ICAgICogYmluZGluZ3MvanMvSlNTZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGVDdXN0b20uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SlNTZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGU6OnZpc2l0QWRkaXRp
b25hbENoaWxkcmVuKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1N0YXRpY1JhbmdlQ3VzdG9t
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTU3RhdGljUmFuZ2U6OnZpc2l0QWRkaXRpb25hbENo
aWxkcmVuKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1N0eWxlU2hlZXRDdXN0b20uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SlNTdHlsZVNoZWV0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbik6
CisgICAgICAgICogYmluZGluZ3MvanMvSlNUZXh0VHJhY2tDdWVDdXN0b20uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SlNUZXh0VHJhY2tDdWVPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9v
dHMpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXh0VHJhY2tDdWU6OnZpc2l0QWRkaXRpb25hbENo
aWxkcmVuKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1RleHRUcmFja0N1c3RvbS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpKU1RleHRUcmFjazo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4pOgor
ICAgICAgICAqIGJpbmRpbmdzL2pzL0pTVGV4dFRyYWNrTGlzdEN1c3RvbS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpKU1RleHRUcmFja0xpc3Q6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKToKKyAg
ICAgICAgKiBiaW5kaW5ncy9qcy9KU1RyZWVXYWxrZXJDdXN0b20uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SlNUcmVlV2Fsa2VyOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbik6CisgICAgICAgICog
YmluZGluZ3MvanMvSlNVbmRvSXRlbUN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Vu
ZG9JdGVtOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbik6CisgICAgICAgIChXZWJDb3JlOjpKU1Vu
ZG9JdGVtT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKToKKyAgICAgICAgKiBiaW5k
aW5ncy9qcy9KU1ZhbHVlSW5XcmFwcGVkT2JqZWN0Lmg6CisgICAgICAgIChXZWJDb3JlOjpKU1Zh
bHVlSW5XcmFwcGVkT2JqZWN0Ojp2aXNpdCBjb25zdCk6CisgICAgICAgICogYmluZGluZ3MvanMv
SlNWaWRlb1RyYWNrQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVmlkZW9UcmFjazo6
dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4pOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTVmlkZW9U
cmFja0xpc3RDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNWaWRlb1RyYWNrTGlzdDo6
dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4pOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTV2ViR0wy
UmVuZGVyaW5nQ29udGV4dEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1dlYkdMMlJl
bmRlcmluZ0NvbnRleHQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKToKKyAgICAgICAgKiBiaW5k
aW5ncy9qcy9KU1dlYkdMUmVuZGVyaW5nQ29udGV4dEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4pOgor
ICAgICAgICAqIGJpbmRpbmdzL2pzL0pTV29ya2VyR2xvYmFsU2NvcGVCYXNlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkpTV29ya2VyR2xvYmFsU2NvcGVCYXNlOjp2aXNpdENoaWxkcmVuSW1wbCk6
CisgICAgICAgIChXZWJDb3JlOjpKU1dvcmtlckdsb2JhbFNjb3BlQmFzZTo6dmlzaXRDaGlsZHJl
bik6IERlbGV0ZWQuCisgICAgICAgICogYmluZGluZ3MvanMvSlNXb3JrZXJHbG9iYWxTY29wZUJh
c2UuaDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1dvcmtlckdsb2JhbFNjb3BlQ3VzdG9tLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkpTV29ya2VyR2xvYmFsU2NvcGU6OnZpc2l0QWRkaXRpb25h
bENoaWxkcmVuKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1dvcmtlck5hdmlnYXRvckN1c3Rv
bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1dvcmtlck5hdmlnYXRvcjo6dmlzaXRBZGRpdGlv
bmFsQ2hpbGRyZW4pOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTV29ya2xldEdsb2JhbFNjb3Bl
QmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1dvcmtsZXRHbG9iYWxTY29wZUJhc2U6OnZp
c2l0Q2hpbGRyZW5JbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OkpTV29ya2xldEdsb2JhbFNjb3Bl
QmFzZTo6dmlzaXRDaGlsZHJlbik6IERlbGV0ZWQuCisgICAgICAgICogYmluZGluZ3MvanMvSlNX
b3JrbGV0R2xvYmFsU2NvcGVCYXNlLmg6CisgICAgICAgICogYmluZGluZ3MvanMvSlNYTUxIdHRw
UmVxdWVzdEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1hNTEh0dHBSZXF1ZXN0Ojp2
aXNpdEFkZGl0aW9uYWxDaGlsZHJlbik6CisgICAgICAgICogYmluZGluZ3MvanMvSlNYUGF0aFJl
c3VsdEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1hQYXRoUmVzdWx0Ojp2aXNpdEFk
ZGl0aW9uYWxDaGlsZHJlbik6CisgICAgICAgICogYmluZGluZ3MvanMvV2ViQ29yZVR5cGVkQXJy
YXlDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkNvcmVUeXBlZEFycmF5Q29u
dHJvbGxlcjo6SlNBcnJheUJ1ZmZlck93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyk6
CisgICAgICAgICogYmluZGluZ3MvanMvV2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyLmg6Cisg
ICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG06CisgICAgICAgIChH
ZW5lcmF0ZUhlYWRlcik6CisgICAgICAgIChHZW5lcmF0ZUltcGxlbWVudGF0aW9uKToKKyAgICAg
ICAgKEdlbmVyYXRlQ2FsbGJhY2tIZWFkZXJDb250ZW50KToKKyAgICAgICAgKEdlbmVyYXRlQ2Fs
bGJhY2tJbXBsZW1lbnRhdGlvbkNvbnRlbnQpOgorICAgICAgICAoR2VuZXJhdGVJdGVyYWJsZURl
ZmluaXRpb24pOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU0RPTVdpbmRv
dy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0RPTVdpbmRvdzo6c3Vic3BhY2VGb3JJbXBsKToK
KyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNEZWRpY2F0ZWRXb3JrZXJHbG9i
YWxTY29wZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0RlZGljYXRlZFdvcmtlckdsb2JhbFNj
b3BlOjpzdWJzcGFjZUZvckltcGwpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU0V4cG9zZWRUb1dvcmtlckFuZFdpbmRvdy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0V4
cG9zZWRUb1dvcmtlckFuZFdpbmRvdzo6c3Vic3BhY2VGb3JJbXBsKToKKyAgICAgICAgKFdlYkNv
cmU6OkpTRXhwb3NlZFRvV29ya2VyQW5kV2luZG93T3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1
ZVJvb3RzKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNFeHBvc2VkVG9X
b3JrZXJBbmRXaW5kb3cuaDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNQ
YWludFdvcmtsZXRHbG9iYWxTY29wZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1BhaW50V29y
a2xldEdsb2JhbFNjb3BlOjpzdWJzcGFjZUZvckltcGwpOgorICAgICAgICAqIGJpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1NlcnZpY2VXb3JrZXJHbG9iYWxTY29wZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpKU1NlcnZpY2VXb3JrZXJHbG9iYWxTY29wZTo6c3Vic3BhY2VGb3JJbXBsKToKKyAg
ICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q0VSZWFjdGlvbnMuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SlNUZXN0Q0VSZWFjdGlvbnM6OnN1YnNwYWNlRm9ySW1wbCk6Cisg
ICAgICAgIChXZWJDb3JlOjpKU1Rlc3RDRVJlYWN0aW9uc093bmVyOjppc1JlYWNoYWJsZUZyb21P
cGFxdWVSb290cyk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENF
UmVhY3Rpb25zLmg6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENF
UmVhY3Rpb25zU3RyaW5naWZpZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0Q0VSZWFj
dGlvbnNTdHJpbmdpZmllcjo6c3Vic3BhY2VGb3JJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OkpT
VGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXJPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9v
dHMpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDRVJlYWN0aW9u
c1N0cmluZ2lmaWVyLmg6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dENhbGxUcmFjZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0Q2FsbFRyYWNlcjo6c3Vi
c3BhY2VGb3JJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdENhbGxUcmFjZXJPd25lcjo6
aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RDYWxsVHJhY2VyLmg6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkpTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yOjpzdWJzcGFjZUZv
ckltcGwpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3Ry
dWN0b3JPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMpOgorICAgICAgICAqIGJpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvci5o
OgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDb25kaXRpb25hbElu
Y2x1ZGVzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdENvbmRpdGlvbmFsSW5jbHVkZXM6
OnN1YnNwYWNlRm9ySW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RDb25kaXRpb25hbElu
Y2x1ZGVzT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKToKKyAgICAgICAgKiBiaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q29uZGl0aW9uYWxJbmNsdWRlcy5oOgorICAgICAg
ICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDb25kaXRpb25hbGx5UmVhZFdyaXRl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdENvbmRpdGlvbmFsbHlSZWFkV3JpdGU6OnN1
YnNwYWNlRm9ySW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RDb25kaXRpb25hbGx5UmVh
ZFdyaXRlT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKToKKyAgICAgICAgKiBiaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q29uZGl0aW9uYWxseVJlYWRXcml0ZS5oOgorICAg
ICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RET01KSVQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SlNUZXN0RE9NSklUOjpzdWJzcGFjZUZvckltcGwpOgorICAgICAgICAqIGJp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3REZWZhdWx0VG9KU09OLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkpTVGVzdERlZmF1bHRUb0pTT046OnN1YnNwYWNlRm9ySW1wbCk6CisgICAgICAg
IChXZWJDb3JlOjpKU1Rlc3REZWZhdWx0VG9KU09OT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1
ZVJvb3RzKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RGVmYXVs
dFRvSlNPTi5oOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3REZWZh
dWx0VG9KU09ORmlsdGVyZWRCeUV4cG9zZWQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0
RGVmYXVsdFRvSlNPTkZpbHRlcmVkQnlFeHBvc2VkOjpzdWJzcGFjZUZvckltcGwpOgorICAgICAg
ICAoV2ViQ29yZTo6SlNUZXN0RGVmYXVsdFRvSlNPTkZpbHRlcmVkQnlFeHBvc2VkT3duZXI6Omlz
UmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0RGVmYXVsdFRvSlNPTkZpbHRlcmVkQnlFeHBvc2VkLmg6CisgICAgICAgICog
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVy
aXRhbmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdERlZmF1bHRUb0pTT05JbmRpcmVj
dEluaGVyaXRhbmNlOjpzdWJzcGFjZUZvckltcGwpOgorICAgICAgICAqIGJpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdDo6c3Vic3BhY2VGb3JJbXBsKToKKyAgICAg
ICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRG
aW5hbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZp
bmFsOjpzdWJzcGFjZUZvckltcGwpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3REb21haW5TZWN1cml0eS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3REb21h
aW5TZWN1cml0eTo6c3Vic3BhY2VGb3JJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdERv
bWFpblNlY3VyaXR5T3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKToKKyAgICAgICAg
KiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RG9tYWluU2VjdXJpdHkuaDoKKyAgICAg
ICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RW5hYmxlZEJ5U2V0dGluZy5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RFbmFibGVkQnlTZXR0aW5nOjpzdWJzcGFjZUZvcklt
cGwpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0RW5hYmxlZEJ5U2V0dGluZ093bmVyOjppc1Jl
YWNoYWJsZUZyb21PcGFxdWVSb290cyk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdEVuYWJsZWRCeVNldHRpbmcuaDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0RW5hYmxlZEZvckNvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SlNUZXN0RW5hYmxlZEZvckNvbnRleHQ6OnN1YnNwYWNlRm9ySW1wbCk6CisgICAgICAgIChXZWJD
b3JlOjpKU1Rlc3RFbmFibGVkRm9yQ29udGV4dE93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVS
b290cyk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEVuYWJsZWRG
b3JDb250ZXh0Lmg6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV2
ZW50Q29uc3RydWN0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0RXZlbnRDb25zdHJ1
Y3Rvcjo6c3Vic3BhY2VGb3JJbXBsKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0RXZlbnRUYXJnZXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0RXZlbnRU
YXJnZXQ6OnN1YnNwYWNlRm9ySW1wbCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdEV4Y2VwdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RFeGNlcHRp
b246OnN1YnNwYWNlRm9ySW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RFeGNlcHRpb25P
d25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMpOgorICAgICAgICAqIGJpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RFeGNlcHRpb24uaDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpKU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlOjpzdWJzcGFjZUZvckltcGwpOgorICAgICAg
ICAoV2ViQ29yZTo6SlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZU93bmVyOjppc1JlYWNoYWJsZUZy
b21PcGFxdWVSb290cyk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dEdlbmVyYXRlSXNSZWFjaGFibGUuaDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0R2xvYmFsT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEdsb2Jh
bE9iamVjdDo6c3Vic3BhY2VGb3JJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEdsb2Jh
bE9iamVjdE93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyk6CisgICAgICAgICogYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEdsb2JhbE9iamVjdC5oOgorICAgICAgICAqIGJp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXI6OnN1
YnNwYWNlRm9ySW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RJbmRleGVkU2V0dGVyTm9J
ZGVudGlmaWVyT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKToKKyAgICAgICAgKiBi
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW5kZXhlZFNldHRlck5vSWRlbnRpZmllci5o
OgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbmRleGVkU2V0dGVy
VGhyb3dpbmdFeGNlcHRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0SW5kZXhlZFNl
dHRlclRocm93aW5nRXhjZXB0aW9uOjpzdWJzcGFjZUZvckltcGwpOgorICAgICAgICAoV2ViQ29y
ZTo6SlNUZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uT3duZXI6OmlzUmVhY2hhYmxl
RnJvbU9wYXF1ZVJvb3RzKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uLmg6CisgICAgICAgICogYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpKU1Rlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXI6OnN1YnNw
YWNlRm9ySW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RJbmRleGVkU2V0dGVyV2l0aElk
ZW50aWZpZXJPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMpOgorICAgICAgICAqIGJp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIu
aDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW50ZXJmYWNlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdEludGVyZmFjZVByb3RvdHlwZUZ1bmN0aW9uX2Vu
dHJpZXNDYWxsZXIpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0SW50ZXJmYWNlOjpzdWJzcGFj
ZUZvckltcGwpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0SW50ZXJmYWNlT3duZXI6OmlzUmVh
Y2hhYmxlRnJvbU9wYXF1ZVJvb3RzKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0SW50ZXJmYWNlLmg6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdEludGVyZmFjZUxlYWRpbmdVbmRlcnNjb3JlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkpTVGVzdEludGVyZmFjZUxlYWRpbmdVbmRlcnNjb3JlOjpzdWJzcGFjZUZvckltcGwpOgorICAg
ICAgICAoV2ViQ29yZTo6SlNUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmVPd25lcjo6aXNS
ZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RJbnRlcmZhY2VMZWFkaW5nVW5kZXJzY29yZS5oOgorICAgICAgICAqIGJpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJdGVyYWJsZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
Ojpqc1Rlc3RJdGVyYWJsZVByb3RvdHlwZUZ1bmN0aW9uX2VudHJpZXNDYWxsZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6SlNUZXN0SXRlcmFibGU6OnN1YnNwYWNlRm9ySW1wbCk6CisgICAgICAgIChX
ZWJDb3JlOjpKU1Rlc3RJdGVyYWJsZU93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyk6
CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEl0ZXJhYmxlLmg6Cisg
ICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEpTQnVpbHRpbkNvbnN0cnVj
dG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yOjpz
dWJzcGFjZUZvckltcGwpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RMZWdhY3lGYWN0b3J5RnVuY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TGVn
YWN5RmFjdG9yeUZ1bmN0aW9uOjpzdWJzcGFjZUZvckltcGwpOgorICAgICAgICAoV2ViQ29yZTo6
SlNUZXN0TGVnYWN5RmFjdG9yeUZ1bmN0aW9uT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJv
b3RzKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TGVnYWN5RmFj
dG9yeUZ1bmN0aW9uLmg6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dExlZ2FjeU5vSW50ZXJmYWNlT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdExl
Z2FjeU5vSW50ZXJmYWNlT2JqZWN0OjpzdWJzcGFjZUZvckltcGwpOgorICAgICAgICAoV2ViQ29y
ZTo6SlNUZXN0TGVnYWN5Tm9JbnRlcmZhY2VPYmplY3RPd25lcjo6aXNSZWFjaGFibGVGcm9tT3Bh
cXVlUm9vdHMpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RMZWdh
Y3lOb0ludGVyZmFjZU9iamVjdC5oOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RMZWdhY3lPdmVycmlkZUJ1aWx0SW5zLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpT
VGVzdExlZ2FjeU92ZXJyaWRlQnVpbHRJbnM6OnN1YnNwYWNlRm9ySW1wbCk6CisgICAgICAgIChX
ZWJDb3JlOjpKU1Rlc3RMZWdhY3lPdmVycmlkZUJ1aWx0SW5zT3duZXI6OmlzUmVhY2hhYmxlRnJv
bU9wYXF1ZVJvb3RzKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
TGVnYWN5T3ZlcnJpZGVCdWlsdElucy5oOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RNYXBMaWtlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE1hcExpa2U6
OnN1YnNwYWNlRm9ySW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RNYXBMaWtlT3duZXI6
OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0TWFwTGlrZS5oOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkpTVGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnM6OnN1YnNwYWNl
Rm9ySW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5P
cGVyYXRpb25zT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKToKKyAgICAgICAgKiBi
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0
aW9ucy5oOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEFu
ZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0
TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyOjpzdWJzcGFjZUZvckltcGwpOgorICAg
ICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyT3du
ZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyLmg6Cisg
ICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkQW5kSW5kZXhlZFNl
dHRlclRocm93aW5nRXhjZXB0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVk
QW5kSW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uOjpzdWJzcGFjZUZvckltcGwpOgorICAg
ICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRp
b25Pd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMpOgorICAgICAgICAqIGJpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2Vw
dGlvbi5oOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEFu
ZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rl
c3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcjo6c3Vic3BhY2VGb3JJbXBsKToK
KyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlm
aWVyT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKToKKyAgICAgICAgKiBiaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZp
ZXIuaDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWREZWxl
dGVyTm9JZGVudGlmaWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkRGVsZXRl
ck5vSWRlbnRpZmllcjo6c3Vic3BhY2VGb3JJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVz
dE5hbWVkRGVsZXRlck5vSWRlbnRpZmllck93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290
cyk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkRGVsZXRl
ck5vSWRlbnRpZmllci5oOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3ROYW1lZERlbGV0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpK
U1Rlc3ROYW1lZERlbGV0ZXJUaHJvd2luZ0V4Y2VwdGlvbjo6c3Vic3BhY2VGb3JJbXBsKToKKyAg
ICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkRGVsZXRlclRocm93aW5nRXhjZXB0aW9uT3duZXI6
OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0TmFtZWREZWxldGVyVGhyb3dpbmdFeGNlcHRpb24uaDoKKyAgICAgICAg
KiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWREZWxldGVyV2l0aElkZW50aWZp
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWREZWxldGVyV2l0aElkZW50aWZp
ZXI6OnN1YnNwYWNlRm9ySW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZERlbGV0
ZXJXaXRoSWRlbnRpZmllck93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyk6CisgICAg
ICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkRGVsZXRlcldpdGhJZGVu
dGlmaWVyLmg6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVk
RGVsZXRlcldpdGhJbmRleGVkR2V0dGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5h
bWVkRGVsZXRlcldpdGhJbmRleGVkR2V0dGVyOjpzdWJzcGFjZUZvckltcGwpOgorICAgICAgICAo
V2ViQ29yZTo6SlNUZXN0TmFtZWREZWxldGVyV2l0aEluZGV4ZWRHZXR0ZXJPd25lcjo6aXNSZWFj
aGFibGVGcm9tT3BhcXVlUm9vdHMpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3ROYW1lZERlbGV0ZXJXaXRoSW5kZXhlZEdldHRlci5oOgorICAgICAgICAqIGJpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEdldHRlckNhbGxXaXRoLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkR2V0dGVyQ2FsbFdpdGg6OnN1YnNwYWNlRm9ySW1wbCk6
CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZEdldHRlckNhbGxXaXRoT3duZXI6OmlzUmVh
Y2hhYmxlRnJvbU9wYXF1ZVJvb3RzKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aC5oOgorICAgICAgICAqIGJpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEdldHRlck5vSWRlbnRpZmllci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpKU1Rlc3ROYW1lZEdldHRlck5vSWRlbnRpZmllcjo6c3Vic3BhY2VGb3JJbXBsKToK
KyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkR2V0dGVyTm9JZGVudGlmaWVyT3duZXI6Omlz
UmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0TmFtZWRHZXR0ZXJOb0lkZW50aWZpZXIuaDoKKyAgICAgICAgKiBiaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmllci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZEdldHRlcldpdGhJZGVudGlmaWVyOjpzdWJzcGFj
ZUZvckltcGwpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRp
Zmllck93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyk6CisgICAgICAgICogYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkR2V0dGVyV2l0aElkZW50aWZpZXIuaDoKKyAg
ICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJOb0lkZW50
aWZpZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZp
ZXI6OnN1YnNwYWNlRm9ySW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZFNldHRl
ck5vSWRlbnRpZmllck93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyk6CisgICAgICAg
ICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVy
Lmg6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVy
VGhyb3dpbmdFeGNlcHRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWRTZXR0
ZXJUaHJvd2luZ0V4Y2VwdGlvbjo6c3Vic3BhY2VGb3JJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6
OkpTVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb25Pd25lcjo6aXNSZWFjaGFibGVGcm9t
T3BhcXVlUm9vdHMpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RO
YW1lZFNldHRlclRocm93aW5nRXhjZXB0aW9uLmg6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SlNUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllcjo6c3Vic3BhY2VGb3JJbXBs
KToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXJPd25l
cjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMpOgorICAgICAgICAqIGJpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhJZGVudGlmaWVyLmg6CisgICAgICAgICog
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdl
dHRlcjo6c3Vic3BhY2VGb3JJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkU2V0
dGVyV2l0aEluZGV4ZWRHZXR0ZXJPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMpOgor
ICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhJ
bmRleGVkR2V0dGVyLmg6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRTZXR0ZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRlcjo6c3Vic3Bh
Y2VGb3JJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4
ZWRHZXR0ZXJBbmRTZXR0ZXJPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMpOgorICAg
ICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRl
eGVkR2V0dGVyQW5kU2V0dGVyLmg6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5T3ZlcnJpZGVCdWlsdEluczo6
c3Vic3BhY2VGb3JJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkU2V0dGVyV2l0
aExlZ2FjeU92ZXJyaWRlQnVpbHRJbnNPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMp
OgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldp
dGhMZWdhY3lPdmVycmlkZUJ1aWx0SW5zLmg6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllcy5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lVbmZvcmdl
YWJsZVByb3BlcnRpZXM6OnN1YnNwYWNlRm9ySW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rl
c3ROYW1lZFNldHRlcldpdGhMZWdhY3lVbmZvcmdlYWJsZVByb3BlcnRpZXNPd25lcjo6aXNSZWFj
aGFibGVGcm9tT3BhcXVlUm9vdHMpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lVbmZvcmdlYWJsZVByb3BlcnRpZXMuaDoKKyAg
ICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVn
YWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVzQW5kTGVnYWN5T3ZlcnJpZGVCdWlsdElucy5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lVbmZvcmdlYWJsZVBy
b3BlcnRpZXNBbmRMZWdhY3lPdmVycmlkZUJ1aWx0SW5zOjpzdWJzcGFjZUZvckltcGwpOgorICAg
ICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWFibGVQcm9w
ZXJ0aWVzQW5kTGVnYWN5T3ZlcnJpZGVCdWlsdEluc093bmVyOjppc1JlYWNoYWJsZUZyb21PcGFx
dWVSb290cyk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVk
U2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllc0FuZExlZ2FjeU92ZXJyaWRlQnVp
bHRJbnMuaDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Tm9kZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3ROb2RlUHJvdG90eXBlRnVuY3Rpb25fZW50cmll
c0NhbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROb2RlOjpzdWJzcGFjZUZvckltcGwp
OgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SlNUZXN0T2JqOjpzdWJzcGFjZUZvckltcGwpOgorICAgICAgICAoV2Vi
Q29yZTo6SlNUZXN0T2JqOjp2aXNpdENoaWxkcmVuSW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpK
U1Rlc3RPYmpPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMpOgorICAgICAgICAoV2Vi
Q29yZTo6SlNUZXN0T2JqOjp2aXNpdENoaWxkcmVuKTogRGVsZXRlZC4KKyAgICAgICAgKiBiaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmg6CisgICAgICAgICogYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdE9wZXJhdGlvbkNvbmRpdGlvbmFsLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkpTVGVzdE9wZXJhdGlvbkNvbmRpdGlvbmFsOjpzdWJzcGFjZUZvckltcGwpOgorICAg
ICAgICAoV2ViQ29yZTo6SlNUZXN0T3BlcmF0aW9uQ29uZGl0aW9uYWxPd25lcjo6aXNSZWFjaGFi
bGVGcm9tT3BhcXVlUm9vdHMpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RPcGVyYXRpb25Db25kaXRpb25hbC5oOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnM6OnN1YnNwYWNlRm9ySW1wbCk6CisgICAg
ICAgIChXZWJDb3JlOjpKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzT3duZXI6OmlzUmVhY2hh
YmxlRnJvbU9wYXF1ZVJvb3RzKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycy5oOgorICAgICAgICAqIGJpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVu
Y2U6OnN1YnNwYWNlRm9ySW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RPdmVybG9hZGVk
Q29uc3RydWN0b3JzV2l0aFNlcXVlbmNlT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3Rz
KToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3ZlcmxvYWRlZENv
bnN0cnVjdG9yc1dpdGhTZXF1ZW5jZS5oOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RQbHVnaW5JbnRlcmZhY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0
UGx1Z2luSW50ZXJmYWNlOjpzdWJzcGFjZUZvckltcGwpOgorICAgICAgICAoV2ViQ29yZTo6SlNU
ZXN0UGx1Z2luSW50ZXJmYWNlT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKToKKyAg
ICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0UGx1Z2luSW50ZXJmYWNlLmg6
CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFByb21pc2VSZWplY3Rp
b25FdmVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RQcm9taXNlUmVqZWN0aW9uRXZl
bnQ6OnN1YnNwYWNlRm9ySW1wbCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdFJlYWRPbmx5TWFwTGlrZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RSZWFk
T25seU1hcExpa2U6OnN1YnNwYWNlRm9ySW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RS
ZWFkT25seU1hcExpa2VPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMpOgorICAgICAg
ICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RSZWFkT25seU1hcExpa2UuaDoKKyAg
ICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0UmVhZE9ubHlTZXRMaWtlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdFJlYWRPbmx5U2V0TGlrZTo6c3Vic3BhY2VGb3JJ
bXBsKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdFJlYWRPbmx5U2V0TGlrZU93bmVyOjppc1Jl
YWNoYWJsZUZyb21PcGFxdWVSb290cyk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdFJlYWRPbmx5U2V0TGlrZS5oOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RSZXBvcnRFeHRyYU1lbW9yeUNvc3QuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SlNUZXN0UmVwb3J0RXh0cmFNZW1vcnlDb3N0OjpzdWJzcGFjZUZvckltcGwpOgorICAgICAg
ICAoV2ViQ29yZTo6SlNUZXN0UmVwb3J0RXh0cmFNZW1vcnlDb3N0Ojp2aXNpdENoaWxkcmVuSW1w
bCk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RSZXBvcnRFeHRyYU1lbW9yeUNvc3RPd25lcjo6
aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0UmVw
b3J0RXh0cmFNZW1vcnlDb3N0Ojp2aXNpdENoaWxkcmVuKTogRGVsZXRlZC4KKyAgICAgICAgKiBi
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0UmVwb3J0RXh0cmFNZW1vcnlDb3N0Lmg6Cisg
ICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZUludGVyZmFjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RTZXJpYWxpemVkU2Ny
aXB0VmFsdWVJbnRlcmZhY2U6OnN1YnNwYWNlRm9ySW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpK
U1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2U6OnZpc2l0Q2hpbGRyZW5JbXBsKToK
KyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZU93
bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rl
c3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2U6OnZpc2l0Q2hpbGRyZW4pOiBEZWxldGVk
LgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemVkU2Ny
aXB0VmFsdWVJbnRlcmZhY2UuaDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0U2V0TGlrZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RTZXRMaWtlOjpzdWJz
cGFjZUZvckltcGwpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0U2V0TGlrZU93bmVyOjppc1Jl
YWNoYWJsZUZyb21PcGFxdWVSb290cyk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdFNldExpa2UuaDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucy5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpKU1Rlc3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zOjpzdWJzcGFjZUZvcklt
cGwpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0
aW9uc093bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyk6CisgICAgICAgICogYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNldExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnMu
aDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U3RyaW5naWZpZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0U3RyaW5naWZpZXI6OnN1YnNwYWNlRm9ySW1w
bCk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RTdHJpbmdpZmllck93bmVyOjppc1JlYWNoYWJs
ZUZyb21PcGFxdWVSb290cyk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdFN0cmluZ2lmaWVyLmg6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdFN0cmluZ2lmaWVyQW5vbnltb3VzT3BlcmF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkpTVGVzdFN0cmluZ2lmaWVyQW5vbnltb3VzT3BlcmF0aW9uOjpzdWJzcGFjZUZvckltcGwpOgor
ICAgICAgICAoV2ViQ29yZTo6SlNUZXN0U3RyaW5naWZpZXJBbm9ueW1vdXNPcGVyYXRpb25Pd25l
cjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMpOgorICAgICAgICAqIGJpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RTdHJpbmdpZmllckFub255bW91c09wZXJhdGlvbi5oOgorICAgICAg
ICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTdHJpbmdpZmllck5hbWVkT3BlcmF0
aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdFN0cmluZ2lmaWVyTmFtZWRPcGVyYXRp
b246OnN1YnNwYWNlRm9ySW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RTdHJpbmdpZmll
ck5hbWVkT3BlcmF0aW9uT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKToKKyAgICAg
ICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U3RyaW5naWZpZXJOYW1lZE9wZXJh
dGlvbi5oOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTdHJpbmdp
Zmllck9wZXJhdGlvbkltcGxlbWVudGVkQXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0
U3RyaW5naWZpZXJPcGVyYXRpb25JbXBsZW1lbnRlZEFzOjpzdWJzcGFjZUZvckltcGwpOgorICAg
ICAgICAoV2ViQ29yZTo6SlNUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25JbXBsZW1lbnRlZEFzT3du
ZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25JbXBsZW1lbnRlZEFzLmg6Cisg
ICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFN0cmluZ2lmaWVyT3BlcmF0
aW9uTmFtZWRUb1N0cmluZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RTdHJpbmdpZmll
ck9wZXJhdGlvbk5hbWVkVG9TdHJpbmc6OnN1YnNwYWNlRm9ySW1wbCk6CisgICAgICAgIChXZWJD
b3JlOjpKU1Rlc3RTdHJpbmdpZmllck9wZXJhdGlvbk5hbWVkVG9TdHJpbmdPd25lcjo6aXNSZWFj
aGFibGVGcm9tT3BhcXVlUm9vdHMpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RTdHJpbmdpZmllck9wZXJhdGlvbk5hbWVkVG9TdHJpbmcuaDoKKyAgICAgICAgKiBi
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U3RyaW5naWZpZXJSZWFkT25seUF0dHJpYnV0
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RTdHJpbmdpZmllclJlYWRPbmx5QXR0cmli
dXRlOjpzdWJzcGFjZUZvckltcGwpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0U3RyaW5naWZp
ZXJSZWFkT25seUF0dHJpYnV0ZU93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyk6Cisg
ICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFN0cmluZ2lmaWVyUmVhZE9u
bHlBdHRyaWJ1dGUuaDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
U3RyaW5naWZpZXJSZWFkV3JpdGVBdHRyaWJ1dGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNU
ZXN0U3RyaW5naWZpZXJSZWFkV3JpdGVBdHRyaWJ1dGU6OnN1YnNwYWNlRm9ySW1wbCk6CisgICAg
ICAgIChXZWJDb3JlOjpKU1Rlc3RTdHJpbmdpZmllclJlYWRXcml0ZUF0dHJpYnV0ZU93bmVyOjpp
c1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdFN0cmluZ2lmaWVyUmVhZFdyaXRlQXR0cmlidXRlLmg6CisgICAgICAgICog
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFR5cGVkZWZzLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkpTVGVzdFR5cGVkZWZzOjpzdWJzcGFjZUZvckltcGwpOgorICAgICAgICAoV2ViQ29y
ZTo6SlNUZXN0VHlwZWRlZnNPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMpOgorICAg
ICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RUeXBlZGVmcy5oOgorICAgICAg
ICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1dvcmtlckdsb2JhbFNjb3BlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkpTV29ya2VyR2xvYmFsU2NvcGU6OnN1YnNwYWNlRm9ySW1wbCk6Cisg
ICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTV29ya2xldEdsb2JhbFNjb3BlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkpTV29ya2xldEdsb2JhbFNjb3BlOjpzdWJzcGFjZUZvcklt
cGwpOgorICAgICAgICAqIGRvbS9BY3RpdmVET01DYWxsYmFjay5oOgorICAgICAgICAoV2ViQ29y
ZTo6QWN0aXZlRE9NQ2FsbGJhY2s6OnZpc2l0SlNGdW5jdGlvbik6CisgICAgICAgICogZG9tL0V2
ZW50TGlzdGVuZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50TGlzdGVuZXI6OnZpc2l0SlNG
dW5jdGlvbik6CisgICAgICAgICogZG9tL0V2ZW50VGFyZ2V0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkV2ZW50VGFyZ2V0Ojp2aXNpdEpTRXZlbnRMaXN0ZW5lcnMpOgorICAgICAgICAqIGRvbS9F
dmVudFRhcmdldC5oOgorICAgICAgICAqIGRvbS9NdXRhdGlvblJlY29yZC5jcHA6CisgICAgICAg
ICogZG9tL011dGF0aW9uUmVjb3JkLmg6CisgICAgICAgICogZG9tL05vZGVGaWx0ZXJDb25kaXRp
b24uaDoKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGVGaWx0ZXJDb25kaXRpb246OnZpc2l0QWdncmVn
YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKiBkb20vU3RhdGljUmFuZ2UuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U3RhdGljUmFuZ2U6OnZpc2l0Tm9kZXNDb25jdXJyZW50bHkgY29uc3QpOgorICAg
ICAgICAqIGRvbS9TdGF0aWNSYW5nZS5oOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMMlJl
bmRlcmluZ0NvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0wyUmVuZGVyaW5nQ29u
dGV4dDo6YWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMpOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dl
YkdMMlJlbmRlcmluZ0NvbnRleHQuaDoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTEZyYW1l
YnVmZmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMRnJhbWVidWZmZXI6OmFkZE1lbWJl
cnNUb09wYXF1ZVJvb3RzKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTEZyYW1lYnVmZmVy
Lmg6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xQcm9ncmFtLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OldlYkdMUHJvZ3JhbTo6YWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMpOgorICAgICAgICAq
IGh0bWwvY2FudmFzL1dlYkdMUHJvZ3JhbS5oOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJp
bmdDb250ZXh0QmFzZTo6YWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMpOgorICAgICAgICAqIGh0bWwv
Y2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuaDoKKyAgICAgICAgKiBodG1sL2NhbnZh
cy9XZWJHTFRyYW5zZm9ybUZlZWRiYWNrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMVHJh
bnNmb3JtRmVlZGJhY2s6OmFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKToKKyAgICAgICAgKiBodG1s
L2NhbnZhcy9XZWJHTFRyYW5zZm9ybUZlZWRiYWNrLmg6CisgICAgICAgICogaHRtbC9jYW52YXMv
V2ViR0xWZXJ0ZXhBcnJheU9iamVjdEJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xW
ZXJ0ZXhBcnJheU9iamVjdEJhc2U6OmFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKToKKyAgICAgICAg
KiBodG1sL2NhbnZhcy9XZWJHTFZlcnRleEFycmF5T2JqZWN0QmFzZS5oOgorCiAyMDIxLTAyLTE4
ICBaYWxhbiBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CiAKICAgICAgICAgW0xGQ11bSUZDXSBE
byBub3QgY3JlYXRlIHRoZSBsaW5lIHdpdGggbmVnYXRpdmUgd2lkdGggd2hlbiBuZWdhdGl2ZSBs
ZXR0ZXIgc3BhY2luZyBpcyBwcmVzZW50CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuY3BwCShyZXZpc2lvbiAyNzMxMTkpCisr
KyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtNzI4LDcgKzcyOCw4IEBAIHZvaWQgSURCT2JqZWN0U3RvcmU6OnJvbGxiYWNr
Rm9yVmVyc2lvbkMKICAgICB9CiB9CiAKLXZvaWQgSURCT2JqZWN0U3RvcmU6OnZpc2l0UmVmZXJl
bmNlZEluZGV4ZXMoU2xvdFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0Cit0ZW1wbGF0ZTx0eXBlbmFt
ZSBWaXNpdG9yPgordm9pZCBJREJPYmplY3RTdG9yZTo6dmlzaXRSZWZlcmVuY2VkSW5kZXhlcyhW
aXNpdG9yJiB2aXNpdG9yKSBjb25zdAogewogICAgIExvY2tlcjxMb2NrPiBsb2NrZXIobV9yZWZl
cmVuY2VkSW5kZXhMb2NrKTsKICAgICBmb3IgKGF1dG8mIGluZGV4IDogbV9yZWZlcmVuY2VkSW5k
ZXhlcy52YWx1ZXMoKSkKQEAgLTczNyw2ICs3MzgsOSBAQCB2b2lkIElEQk9iamVjdFN0b3JlOjp2
aXNpdFJlZmVyZW5jZWRJbmRlCiAgICAgICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChpbmRleC5n
ZXQoKSk7CiB9CiAKK3RlbXBsYXRlIHZvaWQgSURCT2JqZWN0U3RvcmU6OnZpc2l0UmVmZXJlbmNl
ZEluZGV4ZXMoQWJzdHJhY3RTbG90VmlzaXRvciYpIGNvbnN0OwordGVtcGxhdGUgdm9pZCBJREJP
YmplY3RTdG9yZTo6dmlzaXRSZWZlcmVuY2VkSW5kZXhlcyhTbG90VmlzaXRvciYpIGNvbnN0Owor
CiB2b2lkIElEQk9iamVjdFN0b3JlOjpyZW5hbWVSZWZlcmVuY2VkSW5kZXgoSURCSW5kZXgmIGlu
ZGV4LCBjb25zdCBTdHJpbmcmIG5ld05hbWUpCiB7CiAgICAgTE9HKEluZGV4ZWREQiwgIklEQk9i
amVjdFN0b3JlOjpyZW5hbWVSZWZlcmVuY2VkSW5kZXgiKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuaAkocmV2aXNpb24gMjcz
MTE5KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUu
aAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1
LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0xMDksNyArMTA5LDcgQEAgcHVibGljOgogICAgIHZvaWQgcmVmKCk7
CiAgICAgdm9pZCBkZXJlZigpOwogCi0gICAgdm9pZCB2aXNpdFJlZmVyZW5jZWRJbmRleGVzKEpT
Qzo6U2xvdFZpc2l0b3ImKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2
b2lkIHZpc2l0UmVmZXJlbmNlZEluZGV4ZXMoVmlzaXRvciYpIGNvbnN0OwogICAgIHZvaWQgcmVu
YW1lUmVmZXJlbmNlZEluZGV4KElEQkluZGV4JiwgY29uc3QgU3RyaW5nJiBuZXdOYW1lKTsKIAog
cHJpdmF0ZToKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5z
YWN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJUcmFuc2FjdGlvbi5jcHAJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTE0NTUsNyArMTQ1NSw4IEBAIHZvaWQgSURCVHJhbnNhY3Rpb246OmNvbm5lY3Rpb25DbG9zZWRG
cm8KICAgICBmaXJlT25BYm9ydCgpOwogfQogCi12b2lkIElEQlRyYW5zYWN0aW9uOjp2aXNpdFJl
ZmVyZW5jZWRPYmplY3RTdG9yZXMoSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikgY29uc3QKK3Rl
bXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIElEQlRyYW5zYWN0aW9uOjp2aXNpdFJlZmVy
ZW5jZWRPYmplY3RTdG9yZXMoVmlzaXRvciYgdmlzaXRvcikgY29uc3QKIHsKICAgICBMb2NrZXI8
TG9jaz4gbG9ja2VyKG1fcmVmZXJlbmNlZE9iamVjdFN0b3JlTG9jayk7CiAgICAgZm9yIChhdXRv
JiBvYmplY3RTdG9yZSA6IG1fcmVmZXJlbmNlZE9iamVjdFN0b3Jlcy52YWx1ZXMoKSkKQEAgLTE0
NjQsNiArMTQ2NSw5IEBAIHZvaWQgSURCVHJhbnNhY3Rpb246OnZpc2l0UmVmZXJlbmNlZE9iamUK
ICAgICAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KG9iamVjdFN0b3JlLmdldCgpKTsKIH0KIAor
dGVtcGxhdGUgdm9pZCBJREJUcmFuc2FjdGlvbjo6dmlzaXRSZWZlcmVuY2VkT2JqZWN0U3RvcmVz
KEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpIGNvbnN0OwordGVtcGxhdGUgdm9pZCBJREJUcmFu
c2FjdGlvbjo6dmlzaXRSZWZlcmVuY2VkT2JqZWN0U3RvcmVzKEpTQzo6U2xvdFZpc2l0b3ImKSBj
b25zdDsKKwogdm9pZCBJREJUcmFuc2FjdGlvbjo6aGFuZGxlUGVuZGluZ09wZXJhdGlvbnMoKQog
ewogICAgIEFTU0VSVChjYW5DdXJyZW50VGhyZWFkQWNjZXNzVGhyZWFkTG9jYWxEYXRhKG1fZGF0
YWJhc2UtPm9yaWdpblRocmVhZCgpKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmgJKHJldmlzaW9uIDI3MzExOSkKKysrIFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIxIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMTQ5LDcgKzE0OSw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgY29ubmVjdGlvbkNsb3Nl
ZEZyb21TZXJ2ZXIoY29uc3QgSURCRXJyb3ImKTsKIAotICAgIHZvaWQgdmlzaXRSZWZlcmVuY2Vk
T2JqZWN0U3RvcmVzKEpTQzo6U2xvdFZpc2l0b3ImKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBWaXNpdG9yPiB2b2lkIHZpc2l0UmVmZXJlbmNlZE9iamVjdFN0b3JlcyhWaXNpdG9yJikg
Y29uc3Q7CiAKICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgc3RkOjphdG9taWM8dW5zaWduZWQ+
IG51bWJlck9mSURCVHJhbnNhY3Rpb25zOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmF1ZGlvL0F1ZGlvQnVmZmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQnVmZmVyLmNwcAkocmV2aXNpb24gMjczMTE5KQorKysgU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0J1ZmZlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0xNTQsMTIgKzE1NCwxNiBAQCBFeGNlcHRpb25PcjxKU0M6OkpTVmFsdWU+IEF1ZGlvQnVmZmVy
OjpnCiAgICAgcmV0dXJuIGNvbnN0cnVjdEpTQXJyYXkoKTsKIH0KIAotdm9pZCBBdWRpb0J1ZmZl
cjo6dmlzaXRDaGFubmVsV3JhcHBlcnMoSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBs
YXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEF1ZGlvQnVmZmVyOjp2aXNpdENoYW5uZWxXcmFw
cGVycyhWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGZvciAoYXV0byYgY2hhbm5lbFdyYXBwZXIg
OiBtX2NoYW5uZWxXcmFwcGVycykKICAgICAgICAgY2hhbm5lbFdyYXBwZXIudmlzaXQodmlzaXRv
cik7CiB9CiAKK3RlbXBsYXRlIHZvaWQgQXVkaW9CdWZmZXI6OnZpc2l0Q2hhbm5lbFdyYXBwZXJz
KEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBBdWRpb0J1ZmZlcjo6
dmlzaXRDaGFubmVsV3JhcHBlcnMoSlNDOjpTbG90VmlzaXRvciYpOworCiBSZWZQdHI8RmxvYXQz
MkFycmF5PiBBdWRpb0J1ZmZlcjo6Y2hhbm5lbERhdGEodW5zaWduZWQgY2hhbm5lbEluZGV4KQog
ewogICAgIGlmIChjaGFubmVsSW5kZXggPj0gbV9jaGFubmVscy5zaXplKCkpCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQnVmZmVyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0J1ZmZlci5oCShyZXZpc2lvbiAy
NzMxMTkpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQnVmZmVyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDEw
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIw
MjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC03NSw3ICs3NSw3IEBAIHB1YmxpYzoKIAogICAgIHNpemVfdCBtZW1vcnlD
b3N0KCkgY29uc3Q7CiAKLSAgICB2b2lkIHZpc2l0Q2hhbm5lbFdyYXBwZXJzKEpTQzo6U2xvdFZp
c2l0b3ImKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIHZpc2l0Q2hhbm5l
bFdyYXBwZXJzKFZpc2l0b3ImKTsKICAgICAKIHByaXZhdGU6CiAgICAgQXVkaW9CdWZmZXIodW5z
aWduZWQgbnVtYmVyT2ZDaGFubmVscywgc2l6ZV90IGxlbmd0aCwgZmxvYXQgc2FtcGxlUmF0ZSwg
TGVnYWN5UHJldmVudERldGFjaGluZyA9IExlZ2FjeVByZXZlbnREZXRhY2hpbmc6Ok5vKTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0RPTUdDT3V0cHV0Q29uc3RyYWludC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvRE9NR0NPdXRwdXRDb25z
dHJhaW50LmNwcAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvRE9NR0NPdXRwdXRDb25zdHJhaW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDksNyArNDks
OCBAQCBET01HQ091dHB1dENvbnN0cmFpbnQ6On5ET01HQ091dHB1dENvbnN0CiB7CiB9CiAKLXZv
aWQgRE9NR0NPdXRwdXRDb25zdHJhaW50OjpleGVjdXRlSW1wbChTbG90VmlzaXRvciYgdmlzaXRv
cikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIERPTUdDT3V0cHV0Q29uc3RyYWlu
dDo6ZXhlY3V0ZUltcGxJbXBsKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSGVhcCYgaGVhcCA9
IG1fdm0uaGVhcDsKICAgICAKQEAgLTYwLDE1ICs2MSwxOSBAQCB2b2lkIERPTUdDT3V0cHV0Q29u
c3RyYWludDo6ZXhlY3V0ZUltcGwoCiAgICAgCiAgICAgbV9jbGllbnREYXRhLmZvckVhY2hPdXRw
dXRDb25zdHJhaW50U3BhY2UoCiAgICAgICAgIFsmXSAoU3Vic3BhY2UmIHN1YnNwYWNlKSB7Ci0g
ICAgICAgICAgICBhdXRvIGZ1bmMgPSBbXSAoU2xvdFZpc2l0b3ImIHZpc2l0b3IsIEhlYXBDZWxs
KiBoZWFwQ2VsbCwgSGVhcENlbGw6OktpbmQpIHsKKyAgICAgICAgICAgIGF1dG8gZnVuYyA9IFtd
IChWaXNpdG9yJiB2aXNpdG9yLCBIZWFwQ2VsbCogaGVhcENlbGwsIEhlYXBDZWxsOjpLaW5kKSB7
CiAgICAgICAgICAgICAgICAgU2V0Um9vdE1hcmtSZWFzb25TY29wZSByb290U2NvcGUodmlzaXRv
ciwgUm9vdE1hcmtSZWFzb246OkRPTUdDT3V0cHV0KTsKICAgICAgICAgICAgICAgICBKU0NlbGwq
IGNlbGwgPSBzdGF0aWNfY2FzdDxKU0NlbGwqPihoZWFwQ2VsbCk7CiAgICAgICAgICAgICAgICAg
Y2VsbC0+bWV0aG9kVGFibGUodmlzaXRvci52bSgpKS0+dmlzaXRPdXRwdXRDb25zdHJhaW50cyhj
ZWxsLCB2aXNpdG9yKTsKICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAKLSAgICAgICAgICAg
IHZpc2l0b3IuYWRkUGFyYWxsZWxDb25zdHJhaW50VGFzayhzdWJzcGFjZS5mb3JFYWNoTWFya2Vk
Q2VsbEluUGFyYWxsZWwoZnVuYykpOworICAgICAgICAgICAgUmVmUHRyPFNoYXJlZFRhc2s8dm9p
ZChWaXNpdG9yJik+PiB0YXNrID0gc3Vic3BhY2UudGVtcGxhdGUgZm9yRWFjaE1hcmtlZENlbGxJ
blBhcmFsbGVsPFZpc2l0b3I+KGZ1bmMpOworICAgICAgICAgICAgdmlzaXRvci5hZGRQYXJhbGxl
bENvbnN0cmFpbnRUYXNrKHRhc2spOwogICAgICAgICB9KTsKIH0KICAgICAgICAgCit2b2lkIERP
TUdDT3V0cHV0Q29uc3RyYWludDo6ZXhlY3V0ZUltcGwoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlz
aXRvcikgeyBleGVjdXRlSW1wbEltcGwodmlzaXRvcik7IH0KK3ZvaWQgRE9NR0NPdXRwdXRDb25z
dHJhaW50OjpleGVjdXRlSW1wbChTbG90VmlzaXRvciYgdmlzaXRvcikgeyBleGVjdXRlSW1wbElt
cGwodmlzaXRvcik7IH0KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9ET01HQ091dHB1dENvbnN0cmFpbnQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9ET01HQ091dHB1dENvbnN0cmFpbnQuaAkocmV2
aXNpb24gMjczMTE5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvRE9NR0NPdXRwdXRD
b25zdHJhaW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDE3LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00Miw5ICs0MiwxMiBAQCBwdWJsaWM6CiAg
ICAgfkRPTUdDT3V0cHV0Q29uc3RyYWludCgpOwogICAgIAogcHJvdGVjdGVkOgorICAgIHZvaWQg
ZXhlY3V0ZUltcGwoSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJikgb3ZlcnJpZGU7CiAgICAgdm9p
ZCBleGVjdXRlSW1wbChKU0M6OlNsb3RWaXNpdG9yJikgb3ZlcnJpZGU7CiAKIHByaXZhdGU6Cisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCBleGVjdXRlSW1wbEltcGwoVmlzaXRv
ciYpOworCiAgICAgSlNDOjpWTSYgbV92bTsKICAgICBKU1ZNQ2xpZW50RGF0YSYgbV9jbGllbnRE
YXRhOwogICAgIHVpbnQ2NF90IG1fbGFzdEV4ZWN1dGlvblZlcnNpb247CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Fib3J0Q29udHJvbGxlckN1c3RvbS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNBYm9ydENvbnRyb2xsZXJDdXN0b20u
Y3BwCShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Fi
b3J0Q29udHJvbGxlckN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
KiBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAqCiAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI4LDkgKzI4LDEyIEBACiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotdm9pZCBKU0Fib3J0Q29udHJvbGxlcjo6dmlzaXRBZGRpdGlvbmFs
Q2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZp
c2l0b3I+Cit2b2lkIEpTQWJvcnRDb250cm9sbGVyOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihW
aXNpdG9yJiB2aXNpdG9yKQogewogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdCgmd3JhcHBlZCgp
LnNpZ25hbCgpKTsKIH0KIAorREVGSU5FX1ZJU0lUX0FERElUSU9OQUxfQ0hJTERSRU4oSlNBYm9y
dENvbnRyb2xsZXIpOworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0Fib3J0U2lnbmFsQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Fib3J0U2lnbmFsQ3VzdG9tLmNwcAkocmV2aXNp
b24gMjczMTE5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNBYm9ydFNpZ25hbEN1
c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotKiBDb3B5cmlnaHQg
KEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKiBDb3B5cmlnaHQgKEMp
IDIwMTktMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAqCiAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTI4LDcgKzI4LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci1ib29sIEpTQWJvcnRTaWduYWxPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlND
OjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBKU0M6OlNsb3RWaXNpdG9yJiB2
aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQorYm9vbCBKU0Fib3J0U2lnbmFsT3duZXI6Omlz
UmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxl
LCB2b2lkKiwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiog
cmVhc29uKQogewogICAgIGF1dG8mIGFib3J0U2lnbmFsID0gSlNDOjpqc0Nhc3Q8SlNBYm9ydFNp
Z25hbCo+KGhhbmRsZS5zbG90KCktPmFzQ2VsbCgpKS0+d3JhcHBlZCgpOwogICAgIGlmIChhYm9y
dFNpZ25hbC5pc0ZpcmluZ0V2ZW50TGlzdGVuZXJzKCkpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTQXR0ckN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNBdHRyQ3VzdG9tLmNwcAkocmV2aXNpb24gMjczMTE5KQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNBdHRyQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIwMDkgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0zMywxMCArMzMsMTMgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lk
IEpTQXR0cjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRv
cikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTQXR0cjo6dmlzaXRBZGRpdGlv
bmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBpZiAoRWxlbWVudCogZWxlbWVu
dCA9IHdyYXBwZWQoKS5vd25lckVsZW1lbnQoKSkKICAgICAgICAgdmlzaXRvci5hZGRPcGFxdWVS
b290KHJvb3QoZWxlbWVudCkpOwogfQogCitERUZJTkVfVklTSVRfQURESVRJT05BTF9DSElMRFJF
TihKU0F0dHIpOworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0F1ZGlvQnVmZmVyQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0F1ZGlvQnVmZmVyQ3VzdG9tLmNwcAkocmV2aXNpb24g
MjczMTE5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNBdWRpb0J1ZmZlckN1c3Rv
bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAyMC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMzEsMTEgKzMxLDE0IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCi12b2lkIEpTQXVkaW9CdWZmZXI6OnZpc2l0QWRkaXRp
b25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlz
aXRvcj4KK3ZvaWQgSlNBdWRpb0J1ZmZlcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRv
ciYgdmlzaXRvcikKIHsKICAgICB3cmFwcGVkKCkudmlzaXRDaGFubmVsV3JhcHBlcnModmlzaXRv
cik7CiB9CiAKK0RFRklORV9WSVNJVF9BRERJVElPTkFMX0NISUxEUkVOKEpTQXVkaW9CdWZmZXIp
OworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoV0VCX0FVRElP
KQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNBdWRpb1RyYWNrQ3VzdG9tLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0F1ZGlvVHJhY2tD
dXN0b20uY3BwCShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0F1ZGlvVHJhY2tDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM1LDExICszNSwxNCBAQAog
bmFtZXNwYWNlIFdlYkNvcmUgewogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAotdm9pZCBKU0F1ZGlv
VHJhY2s6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVt
cGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNBdWRpb1RyYWNrOjp2aXNpdEFkZGl0aW9u
YWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9v
dChyb290KCZ3cmFwcGVkKCkpKTsKIH0KIAorREVGSU5FX1ZJU0lUX0FERElUSU9OQUxfQ0hJTERS
RU4oSlNBdWRpb1RyYWNrKTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXVkaW9UcmFja0xpc3RDdXN0b20uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXVkaW9UcmFja0xp
c3RDdXN0b20uY3BwCShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0F1ZGlvVHJhY2tMaXN0Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNiwxMSArMzYs
MTQgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKLXZvaWQg
SlNBdWRpb1RyYWNrTGlzdDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZp
c2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0F1ZGlvVHJhY2tMaXN0
Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHZpc2l0
b3IuYWRkT3BhcXVlUm9vdChyb290KHdyYXBwZWQoKS5lbGVtZW50KCkpKTsKIH0KIAorREVGSU5F
X1ZJU0lUX0FERElUSU9OQUxfQ0hJTERSRU4oSlNBdWRpb1RyYWNrTGlzdCk7CisKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0F1ZGlvV29ya2xldFByb2Nlc3NvckN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNBdWRpb1dvcmtsZXRQcm9jZXNzb3JDdXN0b20uY3BwCShy
ZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0F1ZGlvV29y
a2xldFByb2Nlc3NvckN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAyMC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzEsNyArMzEsOCBAQAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAotdm9pZCBKU0F1ZGlvV29y
a2xldFByb2Nlc3Nvcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0
b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0F1ZGlvV29ya2xldFByb2Nl
c3Nvcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBh
dXRvJiBwcm9jZXNzb3IgPSB3cmFwcGVkKCk7CiAgICAgcHJvY2Vzc29yLmpzSW5wdXRzV3JhcHBl
cigpLnZpc2l0KHZpc2l0b3IpOwpAQCAtMzksNiArNDAsOCBAQCB2b2lkIEpTQXVkaW9Xb3JrbGV0
UHJvY2Vzc29yOjp2aXNpdEFkZGl0CiAgICAgcHJvY2Vzc29yLmpzUGFyYW1WYWx1ZXNXcmFwcGVy
KCkudmlzaXQodmlzaXRvcik7CiB9CiAKK0RFRklORV9WSVNJVF9BRERJVElPTkFMX0NISUxEUkVO
KEpTQXVkaW9Xb3JrbGV0UHJvY2Vzc29yKTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAj
ZW5kaWYgLy8gRU5BQkxFKFdFQl9BVURJTykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTQ1NTUnVsZUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNDU1NSdWxlQ3VzdG9tLmNwcAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNDU1NSdWxlQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDggQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMjEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC01MSwxMSArNTEsMTQgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFj
ZSBKU0M7CiAKLXZvaWQgSlNDU1NSdWxlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90Vmlz
aXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTQ1NTUnVs
ZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB2aXNp
dG9yLmFkZE9wYXF1ZVJvb3Qocm9vdCgmd3JhcHBlZCgpKSk7CiB9CiAKK0RFRklORV9WSVNJVF9B
RERJVElPTkFMX0NISUxEUkVOKEpTQ1NTUnVsZSk7CisKIEpTVmFsdWUgdG9KU05ld2x5Q3JlYXRl
ZChKU0dsb2JhbE9iamVjdCosIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZjxD
U1NSdWxlPiYmIHJ1bGUpCiB7CiAgICAgc3dpdGNoIChydWxlLT50eXBlKCkpIHsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ1NTUnVsZUxpc3RDdXN0b20uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ1NTUnVsZUxpc3RDdXN0b20uY3Bw
CShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NTU1J1
bGVMaXN0Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDktMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodCByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAwOS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0IHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNiw3ICszNiw3IEBACiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCi1ib29sIEpTQ1NTUnVsZUxpc3RP
d25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3du
PiBoYW5kbGUsIHZvaWQqLCBTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNv
bikKK2Jvb2wgSlNDU1NSdWxlTGlzdE93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhK
U0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIEFic3RyYWN0U2xvdFZpc2l0
b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCiB7CiAgICAgSlNDU1NSdWxlTGlzdCog
anNDU1NSdWxlTGlzdCA9IGpzQ2FzdDxKU0NTU1J1bGVMaXN0Kj4oaGFuZGxlLnNsb3QoKS0+YXND
ZWxsKCkpOwogICAgIGlmICghanNDU1NSdWxlTGlzdC0+aGFzQ3VzdG9tUHJvcGVydGllcyhqc0NT
U1J1bGVMaXN0LT52bSgpKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ1NT
U3R5bGVEZWNsYXJhdGlvbkN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNDU1NTdHlsZURlY2xhcmF0aW9uQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcz
MTE5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDU1NTdHlsZURlY2xhcmF0aW9u
Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDctMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTUxLDkgKzUxLDEyIEBAIHZvaWQqIHJvb3Qo
Q1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUpCiAgICAgcmV0dXJuIHN0eWxlOwogfQogCi12b2lk
IEpTQ1NTU3R5bGVEZWNsYXJhdGlvbjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0
b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0NTU1N0eWxl
RGVjbGFyYXRpb246OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7
CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHJvb3QoJndyYXBwZWQoKSkpOwogfQogCitERUZJ
TkVfVklTSVRfQURESVRJT05BTF9DSElMRFJFTihKU0NTU1N0eWxlRGVjbGFyYXRpb24pOworCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0NhbGxiYWNrRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNDYWxsYmFja0RhdGEuY3BwCShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0NhbGxiYWNrRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDksIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC05NSwxMiArOTUsMTYgQEAgSlNWYWx1ZSBKU0NhbGxiYWNrRGF0YTo6aW52b2tlQ2FsbGJhY2so
SgogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQgSlNDYWxsYmFja0RhdGFXZWFrOjp2aXNp
dEpTRnVuY3Rpb24oSlNDOjpTbG90VmlzaXRvciYgdmlzdG9yKQordGVtcGxhdGU8dHlwZW5hbWUg
VmlzaXRvcj4KK3ZvaWQgSlNDYWxsYmFja0RhdGFXZWFrOjp2aXNpdEpTRnVuY3Rpb24oVmlzaXRv
ciYgdmlzaXRvcikKIHsKLSAgICB2aXN0b3IuYXBwZW5kKG1fY2FsbGJhY2spOworICAgIHZpc2l0
b3IuYXBwZW5kKG1fY2FsbGJhY2spOwogfQogCi1ib29sIEpTQ2FsbGJhY2tEYXRhV2Vhazo6V2Vh
a093bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25v
d24+LCB2b2lkKiBjb250ZXh0LCBTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJl
YXNvbikKK3RlbXBsYXRlIHZvaWQgSlNDYWxsYmFja0RhdGFXZWFrOjp2aXNpdEpTRnVuY3Rpb24o
SlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIEpTQ2FsbGJhY2tEYXRh
V2Vhazo6dmlzaXRKU0Z1bmN0aW9uKEpTQzo6U2xvdFZpc2l0b3ImKTsKKworYm9vbCBKU0NhbGxi
YWNrRGF0YVdlYWs6OldlYWtPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpI
YW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCwgQWJzdHJhY3RTbG90VmlzaXRvciYg
dmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikKIHsKICAgICBpZiAoVU5MSUtFTFkocmVhc29u
KSkKICAgICAgICAgKnJlYXNvbiA9ICJDb250ZXh0IGlzIG9wYXF1ZSByb290IjsgLy8gRklYTUU6
IHdoYXQgaXMgdGhlIGNvbnRleHQuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0NhbGxiYWNrRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTQ2FsbGJhY2tEYXRhLmgJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTQ2FsbGJhY2tEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDksIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMTMs
MTEgKzExMywxMSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBKU0NhbGxiYWNrRGF0YTo6aW52
b2tlQ2FsbGJhY2soKmdsb2JhbE9iamVjdCwgY2FsbGJhY2soKSwgdGhpc1ZhbHVlLCBhcmdzLCBj
YWxsYmFja1R5cGUsIGZ1bmN0aW9uTmFtZSwgcmV0dXJuZWRFeGNlcHRpb24pOwogICAgIH0KIAot
ICAgIHZvaWQgdmlzaXRKU0Z1bmN0aW9uKEpTQzo6U2xvdFZpc2l0b3ImKTsKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIHZpc2l0SlNGdW5jdGlvbihWaXNpdG9yJik7CiAKIHBy
aXZhdGU6CiAgICAgY2xhc3MgV2Vha093bmVyIDogcHVibGljIEpTQzo6V2Vha0hhbmRsZU93bmVy
IHsKLSAgICAgICAgYm9vbCBpc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxK
U0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0LCBKU0M6OlNsb3RWaXNpdG9yJiwgY29uc3QgY2hh
cioqKSBvdmVycmlkZTsKKyAgICAgICAgYm9vbCBpc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhK
U0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0LCBKU0M6OkFic3RyYWN0U2xv
dFZpc2l0b3ImLCBjb25zdCBjaGFyKiopIG92ZXJyaWRlOwogICAgIH07CiAgICAgV2Vha093bmVy
IG1fd2Vha093bmVyOwogICAgIEpTQzo6V2VhazxKU0M6OkpTT2JqZWN0PiBtX2NhbGxiYWNrOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0
MkRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQ3VzdG9tLmNwcAkocmV2aXNpb24gMjczMTE5KQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRDdXN0
b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAwNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAwNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYwpAQCAtMjQsNyArMjQsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWJv
b2wgSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVl
Um9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBKU0M6OlNsb3RW
aXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQorYm9vbCBKU0NhbnZhc1JlbmRl
cmluZ0NvbnRleHQyRE93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRs
ZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYg
dmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikKIHsKICAgICBpZiAoVU5MSUtFTFkocmVhc29u
KSkKICAgICAgICAgKnJlYXNvbiA9ICJDYW52YXMgaXMgb3BhcXVlIHJvb3QiOwpAQCAtMzQsOSAr
MzQsMTIgQEAgYm9vbCBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRE93bmVyOjppcwogICAgIHJl
dHVybiB2aXNpdG9yLmNvbnRhaW5zT3BhcXVlUm9vdChyb290KTsKIH0KIAotdm9pZCBKU0NhbnZh
c1JlbmRlcmluZ0NvbnRleHQyRDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90Vmlz
aXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNp
dG9yKQogewogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChyb290KHdyYXBwZWQoKS5jYW52YXMo
KSkpOwogfQogCitERUZJTkVfVklTSVRfQURESVRJT05BTF9DSElMRFJFTihKU0NhbnZhc1JlbmRl
cmluZ0NvbnRleHQyRCk7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9tRXZlbnRDdXN0b20uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9tRXZlbnRDdXN0b20uY3BwCShyZXZp
c2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0N1c3RvbUV2ZW50
Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTUtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTUtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQyLDEwICs0MiwxMyBAQCBKU0M6OkpTVmFs
dWUgSlNDdXN0b21FdmVudDo6ZGV0YWlsKEpTQzo6CiAgICAgfSk7CiB9CiAKLXZvaWQgSlNDdXN0
b21FdmVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRv
cikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTQ3VzdG9tRXZlbnQ6OnZpc2l0
QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgd3JhcHBlZCgpLmRl
dGFpbCgpLnZpc2l0KHZpc2l0b3IpOwogICAgIHdyYXBwZWQoKS5jYWNoZWREZXRhaWwoKS52aXNp
dCh2aXNpdG9yKTsKIH0KIAorREVGSU5FX1ZJU0lUX0FERElUSU9OQUxfQ0hJTERSRU4oSlNDdXN0
b21FdmVudCk7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTRE9NQnVpbHRpbkNvbnN0cnVjdG9yQmFzZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CdWlsdGluQ29uc3RydWN0b3JCYXNl
LmNwcAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNE
T01CdWlsdGluQ29uc3RydWN0b3JCYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYg
QEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDEgSGFycmkgUG9ydGVuIChwb3J0ZW5A
a2RlLm9yZykKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDA0LTIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICogIENvcHlyaWdodCAoQykgMjAwNyBTYW11ZWwgV2VpbmlnIDxz
YW1Ad2Via2l0Lm9yZz4KICAqICBDb3B5cmlnaHQgKEMpIDIwMTMgTWljaGFlbCBQcnVldHQgPG1p
Y2hhZWxANjhrLm9yZz4KICAqCkBAIC00NSw3ICs0NSw4IEBAIHZvaWQgSlNET01CdWlsdGluQ29u
c3RydWN0b3JCYXNlOjpjYWxsRnUKICAgICBKU0M6OmNhbGwoJmxleGljYWxHbG9iYWxPYmplY3Qs
ICZmdW5jdGlvbiwgY2FsbERhdGEsICZ0aGlzT2JqZWN0LCBhcmd1bWVudHMpOwogfQogCi12b2lk
IEpTRE9NQnVpbHRpbkNvbnN0cnVjdG9yQmFzZTo6dmlzaXRDaGlsZHJlbihKU0M6OkpTQ2VsbCog
Y2VsbCwgSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0
b3I+Cit2b2lkIEpTRE9NQnVpbHRpbkNvbnN0cnVjdG9yQmFzZTo6dmlzaXRDaGlsZHJlbkltcGwo
SlNDOjpKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0byogdGhpc09i
amVjdCA9IGpzQ2FzdDxKU0RPTUJ1aWx0aW5Db25zdHJ1Y3RvckJhc2UqPihjZWxsKTsKICAgICBB
U1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC01Myw2ICs1
NCw4IEBAIHZvaWQgSlNET01CdWlsdGluQ29uc3RydWN0b3JCYXNlOjp2aXNpdEMKICAgICB2aXNp
dG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2luaXRpYWxpemVGdW5jdGlvbik7CiB9CiAKK0RFRklO
RV9WSVNJVF9DSElMRFJFTihKU0RPTUJ1aWx0aW5Db25zdHJ1Y3RvckJhc2UpOworCiBKU0M6Oklz
b1N1YnNwYWNlKiBKU0RPTUJ1aWx0aW5Db25zdHJ1Y3RvckJhc2U6OnN1YnNwYWNlRm9ySW1wbChK
U0M6OlZNJiB2bSkKIHsKICAgICByZXR1cm4gJnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4o
dm0uY2xpZW50RGF0YSktPmRvbUJ1aWx0aW5Db25zdHJ1Y3RvclNwYWNlKCk7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJ1aWx0aW5Db25zdHJ1Y3RvckJhc2UuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJ1aWx0aW5Db25zdHJ1
Y3RvckJhc2UuaAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNET01CdWlsdGluQ29uc3RydWN0b3JCYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiAr
MSw2IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMjAxNSwgMjAxNiBDYW5vbiBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiAgQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCkBAIC00Miw3ICs0Miw3IEBA
IHByb3RlY3RlZDoKICAgICB7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJl
bihKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NI
SUxEUkVOOwogCiAgICAgSlNDOjpKU0Z1bmN0aW9uKiBpbml0aWFsaXplRnVuY3Rpb24oKTsKICAg
ICB2b2lkIHNldEluaXRpYWxpemVGdW5jdGlvbihKU0M6OlZNJiwgSlNDOjpKU0Z1bmN0aW9uJik7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01HbG9iYWxPYmpl
Y3QuY3BwCShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0RPTUdsb2JhbE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTggQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMjEgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yMzgsNyArMjM4LDggQEAg
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogSlNET01HbG9iYWxPYmplYwogICAgIHJldHVybiBudWxs
cHRyOwogfQogCi12b2lkIEpTRE9NR2xvYmFsT2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCog
Y2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgor
dm9pZCBKU0RPTUdsb2JhbE9iamVjdDo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBW
aXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTRE9NR2xvYmFsT2JqZWN0KiB0aGlzT2JqZWN0ID0g
anNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9J
TkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtMjYwLDYgKzI2MSw4IEBAIHZvaWQgSlNE
T01HbG9iYWxPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlMKICAgICB0aGlzT2JqZWN0LT5tX2J1aWx0
aW5JbnRlcm5hbEZ1bmN0aW9ucy52aXNpdCh2aXNpdG9yKTsKIH0KIAorREVGSU5FX1ZJU0lUX0NI
SUxEUkVOKEpTRE9NR2xvYmFsT2JqZWN0KTsKKwogdm9pZCBKU0RPTUdsb2JhbE9iamVjdDo6cHJv
bWlzZVJlamVjdGlvblRyYWNrZXIoSlNHbG9iYWxPYmplY3QqIGpzR2xvYmFsT2JqZWN0LCBKU1By
b21pc2UqIHByb21pc2UsIEpTUHJvbWlzZVJlamVjdGlvbk9wZXJhdGlvbiBvcGVyYXRpb24pCiB7
CiAgICAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvd2ViYXBwYXBp
cy5odG1sI3RoZS1ob3N0cHJvbWlzZXJlamVjdGlvbnRyYWNrZXItaW1wbGVtZW50YXRpb24KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01HbG9iYWxPYmplY3QuaAko
cmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01HbG9i
YWxPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDgtMjAxOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDgtMjAyMSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY5LDcgKzY5LDcgQEAgcHVibGljOgogICAg
IC8vIE1ha2UgYmluZGluZyBjb2RlIGdlbmVyYXRpb24gZWFzaWVyLgogICAgIEpTRE9NR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QoKSB7IHJldHVybiB0aGlzOyB9CiAKLSAgICBzdGF0aWMgdm9p
ZCB2aXNpdENoaWxkcmVuKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpOworICAgIERF
Q0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBET01XcmFwcGVyV29ybGQmIHdvcmxkKCkgeyBy
ZXR1cm4gbV93b3JsZC5nZXQoKTsgfQogICAgIGJvb2wgd29ybGRJc05vcm1hbCgpIGNvbnN0IHsg
cmV0dXJuIG1fd29ybGRJc05vcm1hbDsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNET01HdWFyZGVkT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNET01HdWFyZGVkT2JqZWN0LmgJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR3VhcmRlZE9iamVjdC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTQwLDcgKzQwLDcgQEAgcHVibGljOgogCiAgICAgYm9vbCBpc1N1c3BlbmRlZCgpIGNvbnN0IHsg
cmV0dXJuICFtX2d1YXJkZWQgfHwgIWNhbkludm9rZUNhbGxiYWNrKCk7IH0gLy8gVGhlIHdyYXBw
ZXIgd29ybGQgaGFzIGdvbmUgYXdheSBvciBhY3RpdmUgRE9NIG9iamVjdHMgaGF2ZSBiZWVuIHN1
c3BlbmRlZC4KIAotICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoSlNDOjpTbG90VmlzaXRvciYgdmlz
aXRvcikgeyB2aXNpdG9yLmFwcGVuZChtX2d1YXJkZWQpOyB9CisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgVmlzaXRvcj4gdm9pZCB2aXNpdEFnZ3JlZ2F0ZShWaXNpdG9yJiB2aXNpdG9yKSB7IHZpc2l0
b3IuYXBwZW5kKG1fZ3VhcmRlZCk7IH0KIAogICAgIEpTQzo6SlNWYWx1ZSBndWFyZGVkT2JqZWN0
KCkgY29uc3QgeyByZXR1cm4gbV9ndWFyZGVkLmdldCgpOyB9CiAgICAgSlNET01HbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fZ2xvYmFsT2JqZWN0LmdldCgpOyB9
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVF1YWRDdXN0b20uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NUXVhZEN1c3RvbS5j
cHAJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9N
UXVhZEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzMsNyArMzMsOCBAQAogbmFtZXNwYWNlIFdl
YkNvcmUgewogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAotdm9pZCBKU0RPTVF1YWQ6OnZpc2l0QWRk
aXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUg
VmlzaXRvcj4KK3ZvaWQgSlNET01RdWFkOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9y
JiB2aXNpdG9yKQogewogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChjb25zdF9jYXN0PERPTVBv
aW50Kj4oJndyYXBwZWQoKS5wMSgpKSk7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KGNvbnN0
X2Nhc3Q8RE9NUG9pbnQqPigmd3JhcHBlZCgpLnAyKCkpKTsKQEAgLTQxLDQgKzQyLDYgQEAgdm9p
ZCBKU0RPTVF1YWQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKAogICAgIHZpc2l0b3IuYWRkT3Bh
cXVlUm9vdChjb25zdF9jYXN0PERPTVBvaW50Kj4oJndyYXBwZWQoKS5wNCgpKSk7CiB9CiAKLX0K
K0RFRklORV9WSVNJVF9BRERJVElPTkFMX0NISUxEUkVOKEpTRE9NUXVhZCk7CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2lu
ZG93Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0RPTVdpbmRvd0N1c3RvbS5jcHAJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTRE9NV2luZG93Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAyMCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAyMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBAIC0xMTksNyArMTE5LDggQEAgSlNDX0RF
RklORV9DVVNUT01fR0VUVEVSKGpzRE9NV2luZG93SW5zdAogICAgIHJldHVybiBub25DYWNoaW5n
U3RhdGljRnVuY3Rpb25HZXR0ZXJJbXBsPGpzRE9NV2luZG93SW5zdGFuY2VGdW5jdGlvbl9wb3N0
TWVzc2FnZSwgMj4oZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUpOwogfQogCi12b2lkIEpTRE9N
V2luZG93Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3Rl
bXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTRE9NV2luZG93Ojp2aXNpdEFkZGl0aW9u
YWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGlmIChGcmFtZSogZnJhbWUgPSB3
cmFwcGVkKCkuZnJhbWUoKSkKICAgICAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KGZyYW1lKTsK
QEAgLTEzMiw2ICsxMzMsOCBAQCB2b2lkIEpTRE9NV2luZG93Ojp2aXNpdEFkZGl0aW9uYWxDaGls
ZHJlCiAgICAgd3JhcHBlZCgpLnZpc2l0SlNFdmVudExpc3RlbmVycyh2aXNpdG9yKTsKIH0KIAor
REVGSU5FX1ZJU0lUX0FERElUSU9OQUxfQ0hJTERSRU4oSlNET01XaW5kb3cpOworCiAjaWYgRU5B
QkxFKFVTRVJfTUVTU0FHRV9IQU5ETEVSUykKIEpTQ19ERUZJTkVfQ1VTVE9NX0dFVFRFUihqc0RP
TVdpbmRvd193ZWJraXQsIChKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5j
b2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpKQogewpJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNEZXByZWNhdGVkQ1NTT01WYWx1ZUN1c3RvbS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNEZXByZWNhdGVkQ1NTT01WYWx1
ZUN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTRGVwcmVjYXRlZENTU09NVmFsdWVDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNy0yMDE5IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MzUsNyArMzUsNyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogdXNpbmcgbmFtZXNwYWNlIEpTQzsK
IAotYm9vbCBKU0RlcHJlY2F0ZWRDU1NPTVZhbHVlT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1
ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgU2xvdFZpc2l0
b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCitib29sIEpTRGVwcmVjYXRlZENTU09N
VmFsdWVPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpV
bmtub3duPiBoYW5kbGUsIHZvaWQqLCBBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25z
dCBjaGFyKiogcmVhc29uKQogewogICAgIEpTRGVwcmVjYXRlZENTU09NVmFsdWUqIGpzQ1NTVmFs
dWUgPSBqc0Nhc3Q8SlNEZXByZWNhdGVkQ1NTT01WYWx1ZSo+KGhhbmRsZS5zbG90KCktPmFzQ2Vs
bCgpKTsKICAgICBpZiAoIWpzQ1NTVmFsdWUtPmhhc0N1c3RvbVByb3BlcnRpZXMoanNDU1NWYWx1
ZS0+dm0oKSkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RvY3VtZW50Q3Vz
dG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RvY3Vt
ZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNEb2N1bWVudEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDksIDIwMTEsIDIwMTYsIDIwMTcgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC05MSwx
MSArOTEsMTQgQEAgSlNWYWx1ZSB0b0pTKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYgogICAg
IHJldHVybiB0b0pTTmV3bHlDcmVhdGVkKGxleGljYWxHbG9iYWxPYmplY3QsIGdsb2JhbE9iamVj
dCwgUmVmPERvY3VtZW50Pihkb2N1bWVudCkpOwogfQogCi12b2lkIEpTRG9jdW1lbnQ6OnZpc2l0
QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5h
bWUgVmlzaXRvcj4KK3ZvaWQgSlNEb2N1bWVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlz
aXRvciYgdmlzaXRvcikKIHsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qoc3RhdGljX2Nhc3Q8
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCo+KCZ3cmFwcGVkKCkpKTsKIH0KIAorREVGSU5FX1ZJU0lU
X0FERElUSU9OQUxfQ0hJTERSRU4oSlNEb2N1bWVudCk7CisKIHZvaWQgSlNEb2N1bWVudDo6YW5h
bHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQogewogICAgIEJh
c2U6OmFuYWx5emVIZWFwKGNlbGwsIGFuYWx5emVyKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTRXJyb3JFdmVudEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNFcnJvckV2ZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gMjczMTE5
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFcnJvckV2ZW50Q3VzdG9tLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTgg
WXVzdWtlIFN1enVraSA8eXVzdWtlc3V6dWtpQHNsb3dzdGFydC5vcmc+LgorICogQ29weXJpZ2h0
IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMjgsOSArMjksMTIgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCi12b2lkIEpTRXJyb3JFdmVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90
VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTRXJy
b3JFdmVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAg
ICB3cmFwcGVkKCkub3JpZ2luYWxFcnJvcigpLnZpc2l0KHZpc2l0b3IpOwogfQogCitERUZJTkVf
VklTSVRfQURESVRJT05BTF9DSElMRFJFTihKU0Vycm9yRXZlbnQpOworCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50TGlzdGVu
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRM
aXN0ZW5lci5jcHAJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTRXZlbnRMaXN0ZW5lci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAv
KgogICogIENvcHlyaWdodCAoQykgMjAwMSBQZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQotICog
IENvcHlyaWdodCAoQykgMjAwMy0yMDE5IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4K
KyAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAyMSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2
ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCkBAIC03OCw3ICs3OCw4IEBAIEpTT2JqZWN0KiBKU0V2
ZW50TGlzdGVuZXI6OmluaXRpYWxpemVKU0YKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotdm9p
ZCBKU0V2ZW50TGlzdGVuZXI6OnZpc2l0SlNGdW5jdGlvbihTbG90VmlzaXRvciYgdmlzaXRvcikK
K3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+CitpbmxpbmUgdm9pZCBKU0V2ZW50TGlzdGVuZXI6
OnZpc2l0SlNGdW5jdGlvbkltcGwoVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICAvLyBJZiBtX3dy
YXBwZXIgaXMgbnVsbCwgd2UgYXJlIG5vdCBrZWVwaW5nIG1fanNGdW5jdGlvbiBhbGl2ZS4KICAg
ICBpZiAoIW1fd3JhcHBlcikKQEAgLTg3LDYgKzg4LDkgQEAgdm9pZCBKU0V2ZW50TGlzdGVuZXI6
OnZpc2l0SlNGdW5jdGlvbihTbAogICAgIHZpc2l0b3IuYXBwZW5kKG1fanNGdW5jdGlvbik7CiB9
CiAKK3ZvaWQgSlNFdmVudExpc3RlbmVyOjp2aXNpdEpTRnVuY3Rpb24oQWJzdHJhY3RTbG90Vmlz
aXRvciYgdmlzaXRvcikgeyB2aXNpdEpTRnVuY3Rpb25JbXBsKHZpc2l0b3IpOyB9Cit2b2lkIEpT
RXZlbnRMaXN0ZW5lcjo6dmlzaXRKU0Z1bmN0aW9uKFNsb3RWaXNpdG9yJiB2aXNpdG9yKSB7IHZp
c2l0SlNGdW5jdGlvbkltcGwodmlzaXRvcik7IH0KKwogc3RhdGljIHZvaWQgaGFuZGxlQmVmb3Jl
VW5sb2FkRXZlbnRSZXR1cm5WYWx1ZShCZWZvcmVVbmxvYWRFdmVudCYgZXZlbnQsIGNvbnN0IFN0
cmluZyYgcmV0dXJuVmFsdWUpCiB7CiAgICAgaWYgKHJldHVyblZhbHVlLmlzTnVsbCgpKQpJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudExpc3RlbmVyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudExpc3RlbmVyLmgJKHJldmlz
aW9uIDI3MzExOSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRMaXN0ZW5l
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMp
IDIwMDEgUGV0ZXIgS2VsbHkgKHBta0Bwb3N0LmNvbSkKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDMt
MjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAy
MDAzLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAg
KiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1
YmxpYwpAQCAtNjIsNiArNjIsOSBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAgICAgdmlydHVhbCBK
U0M6OkpTT2JqZWN0KiBpbml0aWFsaXplSlNGdW5jdGlvbihTY3JpcHRFeGVjdXRpb25Db250ZXh0
JikgY29uc3Q7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIHZpc2l0SlNG
dW5jdGlvbkltcGwoVmlzaXRvciYpOworICAgIHZvaWQgdmlzaXRKU0Z1bmN0aW9uKEpTQzo6QWJz
dHJhY3RTbG90VmlzaXRvciYpIGZpbmFsOwogICAgIHZvaWQgdmlzaXRKU0Z1bmN0aW9uKEpTQzo6
U2xvdFZpc2l0b3ImKSBmaW5hbDsKIAogcHJvdGVjdGVkOgpJbmRleDogU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNFdmVudFRhcmdldEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudFRhcmdldEN1c3RvbS5jcHAJKHJldmlzaW9uIDI3
MzExOSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRUYXJnZXRDdXN0b20u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwOC0yMDE3IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAwOC0yMDIxIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNzIsOSArNzIsMTIgQEAgc3RkOjp1bmlxdWVfcHRyPEpT
RXZlbnRUYXJnZXRXcmFwcGVyPiBqcwogICAgIHJldHVybiBudWxscHRyOwogfQogCi12b2lkIEpT
RXZlbnRUYXJnZXQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9y
KQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNFdmVudFRhcmdldDo6dmlzaXRB
ZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB3cmFwcGVkKCkudmlz
aXRKU0V2ZW50TGlzdGVuZXJzKHZpc2l0b3IpOwogfQogCitERUZJTkVfVklTSVRfQURESVRJT05B
TF9DSElMRFJFTihKU0V2ZW50VGFyZ2V0KTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNGZXRjaEV2ZW50Q3VzdG9tLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0ZldGNoRXZlbnRDdXN0b20u
Y3BwCShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Zl
dGNoRXZlbnRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMwLDExICszMCwxNCBAQAogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgSlNGZXRjaEV2ZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGls
ZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRv
cj4KK3ZvaWQgSlNGZXRjaEV2ZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2
aXNpdG9yKQogewogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdCgmd3JhcHBlZCgpLnJlcXVlc3Qo
KSk7CiB9CiAKLX0KK0RFRklORV9WSVNJVF9BRERJVElPTkFMX0NISUxEUkVOKEpTRmV0Y2hFdmVu
dCk7CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0hUTUxDYW52YXNFbGVtZW50Q3VzdG9tLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxDYW52YXNFbGVtZW50Q3VzdG9t
LmNwcAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNI
VE1MQ2FudmFzRWxlbWVudEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzEsOSArMzEsMTIgQEAK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIEpTSFRNTENhbnZhc0VsZW1lbnQ6OnZpc2l0
QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0
eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0hUTUxDYW52YXNFbGVtZW50Ojp2aXNpdEFkZGl0aW9u
YWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9v
dChzdGF0aWNfY2FzdDxDYW52YXNCYXNlKj4oJndyYXBwZWQoKSkpOwogfQogCitERUZJTkVfVklT
SVRfQURESVRJT05BTF9DSElMRFJFTihKU0hUTUxDYW52YXNFbGVtZW50KTsKKwogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MVGVt
cGxhdGVFbGVtZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0hUTUxUZW1wbGF0ZUVsZW1lbnRDdXN0b20uY3BwCShyZXZpc2lvbiAyNzMxMTkp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxUZW1wbGF0ZUVsZW1lbnRDdXN0
b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAo
QykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucyBhcmUKQEAgLTM3LDEwICszOCwxMyBAQAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAotdm9pZCBKU0hUTUxUZW1wbGF0ZUVsZW1lbnQ6OnZp
c2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0
ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0hUTUxUZW1wbGF0ZUVsZW1lbnQ6OnZpc2l0QWRk
aXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgaWYgKGF1dG8qIGNvbnRl
bnQgPSB3cmFwcGVkKCkuY29udGVudElmQXZhaWxhYmxlKCkpCiAgICAgICAgIHZpc2l0b3IuYWRk
T3BhcXVlUm9vdChyb290KGNvbnRlbnQpKTsKIH0KIAorREVGSU5FX1ZJU0lUX0FERElUSU9OQUxf
Q0hJTERSRU4oSlNIVE1MVGVtcGxhdGVFbGVtZW50KTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIaXN0b3J5Q3VzdG9tLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hpc3RvcnlDdXN0b20u
Y3BwCShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hp
c3RvcnlDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAwOC0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAwOC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDQsOSArNDQsMTIgQEAgSlNWYWx1
ZSBKU0hpc3Rvcnk6OnN0YXRlKEpTR2xvYmFsT2JqZWN0JgogICAgIH0pOwogfQogCi12b2lkIEpT
SGlzdG9yeTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0
ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU0hpc3Rvcnk6OnZpc2l0QWRkaXRpb25h
bENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgd3JhcHBlZCgpLmNhY2hlZFN0YXRl
Rm9yR0MoKS52aXNpdCh2aXNpdG9yKTsKIH0KIAorREVGSU5FX1ZJU0lUX0FERElUSU9OQUxfQ0hJ
TERSRU4oSlNIaXN0b3J5KTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJDdXJzb3JDdXN0b20uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCQ3Vyc29yQ3VzdG9tLmNwcAkocmV2aXNp
b24gMjczMTE5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJDdXJzb3JDdXN0
b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTUwLDcgKzUwLDggQEAgSlNDOjpKU1ZhbHVlIEpTSURCQ3Vy
c29yOjpwcmltYXJ5S2V5KEpTQwogICAgIH0pOwogfQogCi12b2lkIEpTSURCQ3Vyc29yOjp2aXNp
dEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVu
YW1lIFZpc2l0b3I+Cit2b2lkIEpTSURCQ3Vyc29yOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihW
aXNpdG9yJiB2aXNpdG9yKQogewogICAgIGF1dG8mIGN1cnNvciA9IHdyYXBwZWQoKTsKICAgICBp
ZiAoYXV0byogcmVxdWVzdCA9IGN1cnNvci5yZXF1ZXN0KCkpCkBAIC01OSw2ICs2MCw4IEBAIHZv
aWQgSlNJREJDdXJzb3I6OnZpc2l0QWRkaXRpb25hbENoaWxkcmUKICAgICBjdXJzb3IucHJpbWFy
eUtleVdyYXBwZXIoKS52aXNpdCh2aXNpdG9yKTsKIH0KIAorREVGSU5FX1ZJU0lUX0FERElUSU9O
QUxfQ0hJTERSRU4oSlNJREJDdXJzb3IpOworCiBKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlND
OjpKU0dsb2JhbE9iamVjdCosIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZjxJ
REJDdXJzb3I+JiYgY3Vyc29yKQogewogICAgIGlmIChpczxJREJDdXJzb3JXaXRoVmFsdWU+KGN1
cnNvcikpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQkN1cnNvcldpdGhW
YWx1ZUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNJREJDdXJzb3JXaXRoVmFsdWVDdXN0b20uY3BwCShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQkN1cnNvcldpdGhWYWx1ZUN1c3RvbS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtNDMsMTIgKzQzLDE1IEBAIEpTQzo6SlNWYWx1ZSBKU0lEQkN1cnNvcldpdGhW
YWx1ZTo6dmFsdWUKICAgICB9KTsKIH0KIAotdm9pZCBKU0lEQkN1cnNvcldpdGhWYWx1ZTo6dmlz
aXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBl
bmFtZSBWaXNpdG9yPgordm9pZCBKU0lEQkN1cnNvcldpdGhWYWx1ZTo6dmlzaXRBZGRpdGlvbmFs
Q2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU0lEQkN1cnNvcjo6dmlzaXRBZGRp
dGlvbmFsQ2hpbGRyZW4odmlzaXRvcik7CiAgICAgd3JhcHBlZCgpLnZhbHVlV3JhcHBlcigpLnZp
c2l0KHZpc2l0b3IpOwogfQogCitERUZJTkVfVklTSVRfQURESVRJT05BTF9DSElMRFJFTihKU0lE
QkN1cnNvcldpdGhWYWx1ZSk7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8v
IEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNJREJJbmRleEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNJREJJbmRleEN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCSW5kZXhDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTM0LDExICszNCwxNCBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogdXNpbmcgbmFtZXNwYWNlIEpT
QzsKIAotdm9pZCBKU0lEQkluZGV4Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRv
ciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTSURCSW5kZXg6
OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgdmlzaXRv
ci5hZGRPcGFxdWVSb290KHN0YXRpY19jYXN0PElEQkluZGV4Jj4od3JhcHBlZCgpKS5vYmplY3RT
dG9yZUFzT3BhcXVlUm9vdCgpKTsKIH0KIAorREVGSU5FX1ZJU0lUX0FERElUSU9OQUxfQ0hJTERS
RU4oSlNJREJJbmRleCk7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVO
QUJMRShJTkRFWEVEX0RBVEFCQVNFKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNJREJPYmplY3RTdG9yZUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNJREJPYmplY3RTdG9yZUN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MzExOSkK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCT2JqZWN0U3RvcmVDdXN0b20uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAx
MiBNaWNoYWVsIFBydWV0dCA8bWljaGFlbEA2OGsub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKQEAgLTM2LDExICszNywxNCBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogdXNp
bmcgbmFtZXNwYWNlIEpTQzsKIAotdm9pZCBKU0lEQk9iamVjdFN0b3JlOjp2aXNpdEFkZGl0aW9u
YWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0
b3I+Cit2b2lkIEpTSURCT2JqZWN0U3RvcmU6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0
b3ImIHZpc2l0b3IpCiB7CiAgICAgc3RhdGljX2Nhc3Q8SURCT2JqZWN0U3RvcmUmPih3cmFwcGVk
KCkpLnZpc2l0UmVmZXJlbmNlZEluZGV4ZXModmlzaXRvcik7CiB9CiAKLX0KK0RFRklORV9WSVNJ
VF9BRERJVElPTkFMX0NISUxEUkVOKEpTSURCT2JqZWN0U3RvcmUpOworCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCiAKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJ
REJSZXF1ZXN0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0lEQlJlcXVlc3RDdXN0b20uY3BwCShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQlJlcXVlc3RDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTg5LDEyICs4OSwxNiBAQCBKU0M6OkpTVmFsdWUgSlNJREJSZXF1ZXN0OjpyZXN1bHQoSlNDOjpK
CiAgICAgfSk7CiB9CiAKLXZvaWQgSlNJREJSZXF1ZXN0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJl
bihTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lk
IEpTSURCUmVxdWVzdDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikK
IHsKICAgICBhdXRvJiByZXF1ZXN0ID0gd3JhcHBlZCgpOwogICAgIHJlcXVlc3QucmVzdWx0V3Jh
cHBlcigpLnZpc2l0KHZpc2l0b3IpOwogICAgIHJlcXVlc3QuY3Vyc29yV3JhcHBlcigpLnZpc2l0
KHZpc2l0b3IpOwogfQogCi19CitERUZJTkVfVklTSVRfQURESVRJT05BTF9DSElMRFJFTihKU0lE
QlJlcXVlc3QpOworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKICNlbmRpZiAvLyBFTkFCTEUo
SU5ERVhFRF9EQVRBQkFTRSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURC
VHJhbnNhY3Rpb25DdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTSURCVHJhbnNhY3Rpb25DdXN0b20uY3BwCShyZXZpc2lvbiAyNzMxMTkpCisrKyBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQlRyYW5zYWN0aW9uQ3VzdG9tLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0zNCwxMSArMzQsMTQgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5h
bWVzcGFjZSBKU0M7CiAKLXZvaWQgSlNJREJUcmFuc2FjdGlvbjo6dmlzaXRBZGRpdGlvbmFsQ2hp
bGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgor
dm9pZCBKU0lEQlRyYW5zYWN0aW9uOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2
aXNpdG9yKQogewogICAgIHN0YXRpY19jYXN0PElEQlRyYW5zYWN0aW9uJj4od3JhcHBlZCgpKS52
aXNpdFJlZmVyZW5jZWRPYmplY3RTdG9yZXModmlzaXRvcik7CiB9CiAKLX0KK0RFRklORV9WSVNJ
VF9BRERJVElPTkFMX0NISUxEUkVOKEpTSURCVHJhbnNhY3Rpb24pOworCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCiAKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJ
bnRlcnNlY3Rpb25PYnNlcnZlckN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNJbnRlcnNlY3Rpb25PYnNlcnZlckN1c3RvbS5jcHAJKHJldmlzaW9u
IDI3MzExOSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW50ZXJzZWN0aW9uT2Jz
ZXJ2ZXJDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENv
cHlyaWdodCAoQykgMjAyMCBJZ2FsaWEgUy5MLgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMzAsMTAgKzMxLDEzIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBKU0lu
dGVyc2VjdGlvbk9ic2VydmVyOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNp
dG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNJbnRlcnNl
Y3Rpb25PYnNlcnZlcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikK
IHsKICAgICBpZiAoYXV0byogY2FsbGJhY2sgPSB3cmFwcGVkKCkuY2FsbGJhY2tDb25jdXJyZW50
bHkoKSkKICAgICAgICAgY2FsbGJhY2stPnZpc2l0SlNGdW5jdGlvbih2aXNpdG9yKTsKIH0KIAot
fQorREVGSU5FX1ZJU0lUX0FERElUSU9OQUxfQ0hJTERSRU4oSlNJbnRlcnNlY3Rpb25PYnNlcnZl
cik7CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTSW50ZXJzZWN0aW9uT2JzZXJ2ZXJFbnRyeUN1c3RvbS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJbnRlcnNlY3Rpb25PYnNlcnZlckVudHJ5
Q3VzdG9tLmNwcAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNJbnRlcnNlY3Rpb25PYnNlcnZlckVudHJ5Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTggR29vZ2xlIExMQy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMwLDcg
KzMxLDggQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIEpTSW50ZXJzZWN0aW9uT2Jz
ZXJ2ZXJFbnRyeTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlz
aXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTSW50ZXJzZWN0aW9uT2Jz
ZXJ2ZXJFbnRyeTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsK
ICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qocm9vdCh3cmFwcGVkKCkudGFyZ2V0KCkpKTsKICAg
ICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qod3JhcHBlZCgpLmJvdW5kaW5nQ2xpZW50UmVjdCgpKTsK
QEAgLTM4LDQgKzQwLDYgQEAgdm9pZCBKU0ludGVyc2VjdGlvbk9ic2VydmVyRW50cnk6OnZpc2l0
QQogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdCh3cmFwcGVkKCkucm9vdEJvdW5kcygpKTsKIH0K
IAotfQorREVGSU5FX1ZJU0lUX0FERElUSU9OQUxfQ0hJTERSRU4oSlNJbnRlcnNlY3Rpb25PYnNl
cnZlckVudHJ5KTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNNZXNzYWdlQ2hhbm5lbEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNZXNzYWdlQ2hhbm5lbEN1c3RvbS5jcHAJKHJl
dmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWVzc2FnZUNo
YW5uZWxDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAyMSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMzLDcgKzMzLDggQEAKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIEpTTWVzc2FnZUNoYW5uZWw6OnZpc2l0QWRkaXRpb25h
bENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPgordm9pZCBKU01lc3NhZ2VDaGFubmVsOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihW
aXNpdG9yJiB2aXNpdG9yKQogewogICAgIGlmIChNZXNzYWdlUG9ydCogcG9ydCA9IHdyYXBwZWQo
KS5wb3J0MSgpKQogICAgICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QocG9ydCk7CkBAIC00Miw2
ICs0Myw4IEBAIHZvaWQgSlNNZXNzYWdlQ2hhbm5lbDo6dmlzaXRBZGRpdGlvbmFsQ2gKICAgICAg
ICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHBvcnQpOwogfQogCitERUZJTkVfVklTSVRfQURESVRJ
T05BTF9DSElMRFJFTihKU01lc3NhZ2VDaGFubmVsKTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQogCiAjZW5kaWYgLy8gRU5BQkxFKENIQU5ORUxfTUVTU0FHSU5HKQpJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNNZXNzYWdlRXZlbnRDdXN0b20uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWVzc2FnZUV2ZW50Q3VzdG9tLmNwcAkocmV2
aXNpb24gMjczMTE5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNZXNzYWdlRXZl
bnRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENvcHly
aWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDA5LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDA5LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQpAQCAtNzAsNyArNzAsOCBAQCBKU0M6OkpT
VmFsdWUgSlNNZXNzYWdlRXZlbnQ6OmRhdGEoSlNDOjpKCiAgICAgfSk7CiB9CiAKLXZvaWQgSlNN
ZXNzYWdlRXZlbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZp
c2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU01lc3NhZ2VFdmVudDo6
dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBXVEY6OnN3
aXRjaE9uKHdyYXBwZWQoKS5kYXRhKCksIFsmdmlzaXRvcl0gKGNvbnN0IEpTVmFsdWVJbldyYXBw
ZWRPYmplY3QmIGRhdGEpIHsKICAgICAgICAgZGF0YS52aXNpdCh2aXNpdG9yKTsKQEAgLTg0LDQg
Kzg1LDYgQEAgdm9pZCBKU01lc3NhZ2VFdmVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbAogICAgIHdy
YXBwZWQoKS5jYWNoZWRQb3J0cygpLnZpc2l0KHZpc2l0b3IpOwogfQogCitERUZJTkVfVklTSVRf
QURESVRJT05BTF9DSElMRFJFTihKU01lc3NhZ2VFdmVudCk7CisKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWVzc2FnZVBvcnRDdXN0
b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWVzc2Fn
ZVBvcnRDdXN0b20uY3BwCShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU01lc3NhZ2VQb3J0Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAwOSwgMjAxNiBBcHBsZSBJbmMuIEFs
bCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAyMSBBcHBsZSBJbmMu
IEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4g
QWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTMxLDExICszMSwxNCBA
QAogbmFtZXNwYWNlIFdlYkNvcmUgewogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAotdm9pZCBKU01l
c3NhZ2VQb3J0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikK
K3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTTWVzc2FnZVBvcnQ6OnZpc2l0QWRk
aXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgLy8gSWYgd2UgaGF2ZSBh
IGxvY2FsbHkgZW50YW5nbGVkIHBvcnQsIHdlIGNhbiBkaXJlY3RseSBtYXJrIGl0IGFzIHJlYWNo
YWJsZS4gUG9ydHMgdGhhdCBhcmUgcmVtb3RlbHkgZW50YW5nbGVkIGFyZSBtYXJrZWQgaW4tdXNl
IGJ5IG1hcmtBY3RpdmVPYmplY3RzRm9yQ29udGV4dCgpLgogICAgIGlmIChNZXNzYWdlUG9ydCog
cG9ydCA9IHdyYXBwZWQoKS5sb2NhbGx5RW50YW5nbGVkUG9ydCgpKQogICAgICAgICB2aXNpdG9y
LmFkZE9wYXF1ZVJvb3QocG9ydCk7CiB9CiAKK0RFRklORV9WSVNJVF9BRERJVElPTkFMX0NISUxE
UkVOKEpTTWVzc2FnZVBvcnQpOworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU011dGF0aW9uT2JzZXJ2ZXJDdXN0b20uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTXV0YXRpb25PYnNlcnZlckN1
c3RvbS5jcHAJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTTXV0YXRpb25PYnNlcnZlckN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2
IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQpAQCAtMzksMTIgKzM5
LDE1IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCi12b2lk
IEpTTXV0YXRpb25PYnNlcnZlcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90Vmlz
aXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTTXV0YXRp
b25PYnNlcnZlcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsK
ICAgICB3cmFwcGVkKCkuY2FsbGJhY2soKS52aXNpdEpTRnVuY3Rpb24odmlzaXRvcik7CiB9CiAK
LWJvb2wgSlNNdXRhdGlvbk9ic2VydmVyT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3Rz
KEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgU2xvdFZpc2l0b3ImIHZp
c2l0b3IsIGNvbnN0IGNoYXIqKnJlYXNvbikKK0RFRklORV9WSVNJVF9BRERJVElPTkFMX0NISUxE
UkVOKEpTTXV0YXRpb25PYnNlcnZlcik7CisKK2Jvb2wgSlNNdXRhdGlvbk9ic2VydmVyT3duZXI6
OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFu
ZGxlLCB2b2lkKiwgQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqcmVh
c29uKQogewogICAgIGZvciAoYXV0byogbm9kZSA6IGpzQ2FzdDxKU011dGF0aW9uT2JzZXJ2ZXIq
PihoYW5kbGUuc2xvdCgpLT5hc0NlbGwoKSktPndyYXBwZWQoKS5vYnNlcnZlZE5vZGVzKCkpIHsK
ICAgICAgICAgaWYgKHZpc2l0b3IuY29udGFpbnNPcGFxdWVSb290KHJvb3Qobm9kZSkpKSB7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU011dGF0aW9uUmVjb3JkQ3VzdG9tLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU011dGF0aW9uUmVj
b3JkQ3VzdG9tLmNwcAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNNdXRhdGlvblJlY29yZEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzAsOSArMzAs
MTIgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIEpTTXV0YXRpb25SZWNvcmQ6OnZp
c2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0
ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU011dGF0aW9uUmVjb3JkOjp2aXNpdEFkZGl0aW9u
YWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHdyYXBwZWQoKS52aXNpdE5vZGVz
Q29uY3VycmVudGx5KHZpc2l0b3IpOwogfQotICAgIAorCitERUZJTkVfVklTSVRfQURESVRJT05B
TF9DSElMRFJFTihKU011dGF0aW9uUmVjb3JkKTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOYXZpZ2F0b3JDdXN0b20uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTmF2aWdhdG9yQ3VzdG9t
LmNwcAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNO
YXZpZ2F0b3JDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMyLDExICszMiwxNCBAQAogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgSlNOYXZpZ2F0b3I6OnZpc2l0QWRkaXRpb25hbENoaWxk
cmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
Pgordm9pZCBKU05hdmlnYXRvcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlz
aXRvcikKIHsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qoc3RhdGljX2Nhc3Q8TmF2aWdhdG9y
QmFzZSo+KCZ3cmFwcGVkKCkpKTsKIH0KIAorREVGSU5FX1ZJU0lUX0FERElUSU9OQUxfQ0hJTERS
RU4oSlNOYXZpZ2F0b3IpOworCiAjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKIEpTQzo6SlNWYWx1
ZSBKU05hdmlnYXRvcjo6Z2V0VXNlck1lZGlhKEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxH
bG9iYWxPYmplY3QsIEpTQzo6Q2FsbEZyYW1lJiBjYWxsRnJhbWUpCiB7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MzExOSkK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUN1c3RvbS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA5LTIw
MTAsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDA3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC03NCw3ICs3NCw3IEBAIHVzaW5nIG5hbWVzcGFjZSBKU0M7
CiAKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBpc1Jl
YWNoYWJsZUZyb21ET00oTm9kZSogbm9kZSwgU2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNo
YXIqKiByZWFzb24pCitzdGF0aWMgaW5saW5lIGJvb2wgaXNSZWFjaGFibGVGcm9tRE9NKE5vZGUq
IG5vZGUsIEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24p
CiB7CiAgICAgaWYgKCFub2RlLT5pc0Nvbm5lY3RlZCgpKSB7CiAgICAgICAgIGlmIChpczxFbGVt
ZW50Pigqbm9kZSkpIHsKQEAgLTEyMyw3ICsxMjMsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaXNS
ZWFjaGFibGVGcm9tRE9NKE5vCiAgICAgcmV0dXJuIHZpc2l0b3IuY29udGFpbnNPcGFxdWVSb290
KHJvb3Qobm9kZSkpOwogfQogCi1ib29sIEpTTm9kZU93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFx
dWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIFNsb3RWaXNp
dG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQorYm9vbCBKU05vZGVPd25lcjo6aXNS
ZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUs
IHZvaWQqLCBBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29u
KQogewogICAgIEpTTm9kZSoganNOb2RlID0ganNDYXN0PEpTTm9kZSo+KGhhbmRsZS5zbG90KCkt
PmFzQ2VsbCgpKTsKICAgICByZXR1cm4gaXNSZWFjaGFibGVGcm9tRE9NKCZqc05vZGUtPndyYXBw
ZWQoKSwgdmlzaXRvciwgcmVhc29uKTsKQEAgLTEzNiwxMSArMTM2LDE0IEBAIEpTU2NvcGUqIEpT
Tm9kZTo6cHVzaEV2ZW50SGFuZGxlclNjb3BlKEoKICAgICByZXR1cm4gbm9kZTsKIH0KIAotdm9p
ZCBKU05vZGU6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQor
dGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNOb2RlOjp2aXNpdEFkZGl0aW9uYWxD
aGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChy
b290KHdyYXBwZWQoKSkpOwogfQogCitERUZJTkVfVklTSVRfQURESVRJT05BTF9DSElMRFJFTihK
U05vZGUpOworCiBzdGF0aWMgQUxXQVlTX0lOTElORSBKU1ZhbHVlIGNyZWF0ZVdyYXBwZXJJbmxp
bmUoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTRE9NR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIFJlZjxOb2RlPiYmIG5vZGUpCiB7CiAgICAgQVNTRVJUKCFnZXRDYWNo
ZWRXcmFwcGVyKGdsb2JhbE9iamVjdC0+d29ybGQoKSwgbm9kZSkpOwpJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNOb2RlSXRlcmF0b3JDdXN0b20uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUl0ZXJhdG9yQ3VzdG9tLmNwcAkocmV2
aXNpb24gMjczMTE5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlSXRlcmF0
b3JDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAwNiwgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI1LDEwICsyNSwxMyBAQAogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLXZvaWQgSlNOb2RlSXRlcmF0b3I6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVu
KEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgor
dm9pZCBKU05vZGVJdGVyYXRvcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlz
aXRvcikKIHsKICAgICBpZiAoTm9kZUZpbHRlciogZmlsdGVyID0gd3JhcHBlZCgpLmZpbHRlcigp
KQogICAgICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QoZmlsdGVyKTsKIH0KIAotfQorREVGSU5F
X1ZJU0lUX0FERElUSU9OQUxfQ0hJTERSRU4oSlNOb2RlSXRlcmF0b3IpOworCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVMaXN0
Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05v
ZGVMaXN0Q3VzdG9tLmNwcAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNOb2RlTGlzdEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNyw3ICsz
Nyw3IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCi1ib29s
IEpTTm9kZUxpc3RPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8
SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3Qg
Y2hhcioqIHJlYXNvbikKK2Jvb2wgSlNOb2RlTGlzdE93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFx
dWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIEFic3RyYWN0
U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCiB7CiAgICAgSlNOb2Rl
TGlzdCoganNOb2RlTGlzdCA9IGpzQ2FzdDxKU05vZGVMaXN0Kj4oaGFuZGxlLnNsb3QoKS0+YXND
ZWxsKCkpOwogICAgIGlmICghanNOb2RlTGlzdC0+aGFzQ3VzdG9tUHJvcGVydGllcyhqc05vZGVM
aXN0LT52bSgpKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTT2Zmc2NyZWVu
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU09mZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyREN1
c3RvbS5jcHAJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTT2Zmc2NyZWVuQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQ3VzdG9tLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0zMSw3ICsz
MSw3IEBAIGlubGluZSB2b2lkKiByb290KE9mZnNjcmVlbkNhbnZhcyogY2FudmEKICAgICByZXR1
cm4gY2FudmFzOwogfQogCi1ib29sIEpTT2Zmc2NyZWVuQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
T3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93
bj4gaGFuZGxlLCB2b2lkKiwgU2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFz
b24pCitib29sIEpTT2Zmc2NyZWVuQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJET3duZXI6OmlzUmVh
Y2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2
b2lkKiwgQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikK
IHsKICAgICBpZiAoVU5MSUtFTFkocmVhc29uKSkKICAgICAgICAgKnJlYXNvbiA9ICJDYW52YXMg
aXMgb3BhcXVlIHJvb3QiOwpAQCAtNDEsMTEgKzQxLDE0IEBAIGJvb2wgSlNPZmZzY3JlZW5DYW52
YXNSZW5kZXJpbmdDb250ZXh0MkQKICAgICByZXR1cm4gdmlzaXRvci5jb250YWluc09wYXF1ZVJv
b3Qocm9vdCk7CiB9CiAKLXZvaWQgSlNPZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6
OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8
dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNPZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0
MkQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgdmlz
aXRvci5hZGRPcGFxdWVSb290KHJvb3QoJndyYXBwZWQoKS5jYW52YXMoKSkpOwogfQogCitERUZJ
TkVfVklTSVRfQURESVRJT05BTF9DSElMRFJFTihKU09mZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyRCk7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1BhaW50UmVuZGVyaW5nQ29udGV4dDJEQ3VzdG9tLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1BhaW50UmVuZGVy
aW5nQ29udGV4dDJEQ3VzdG9tLmNwcAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNQYWludFJlbmRlcmluZ0NvbnRleHQyREN1c3RvbS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOC0yMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMzYsNyArMzYsNyBAQCBpbmxpbmUgdm9pZCogcm9vdChDdXN0b21QYWludENhbnZh
cyogY2FuCiAgICAgcmV0dXJuIGNhbnZhczsKIH0KIAotYm9vbCBKU1BhaW50UmVuZGVyaW5nQ29u
dGV4dDJET3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6
VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgU2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIq
KiByZWFzb24pCitib29sIEpTUGFpbnRSZW5kZXJpbmdDb250ZXh0MkRPd25lcjo6aXNSZWFjaGFi
bGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQq
LCBBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQogewog
ICAgIGlmIChVTkxJS0VMWShyZWFzb24pKQogICAgICAgICAqcmVhc29uID0gIkNhbnZhcyBpcyBv
cGFxdWUgcm9vdCI7CkBAIC00NiwxMSArNDYsMTQgQEAgYm9vbCBKU1BhaW50UmVuZGVyaW5nQ29u
dGV4dDJET3duZXI6OmlzUgogICAgIHJldHVybiB2aXNpdG9yLmNvbnRhaW5zT3BhcXVlUm9vdChy
b290KTsKIH0KIAotdm9pZCBKU1BhaW50UmVuZGVyaW5nQ29udGV4dDJEOjp2aXNpdEFkZGl0aW9u
YWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0
b3I+Cit2b2lkIEpTUGFpbnRSZW5kZXJpbmdDb250ZXh0MkQ6OnZpc2l0QWRkaXRpb25hbENoaWxk
cmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHJvb3Qo
JndyYXBwZWQoKS5jYW52YXMoKSkpOwogfQogCitERUZJTkVfVklTSVRfQURESVRJT05BTF9DSElM
RFJFTihKU1BhaW50UmVuZGVyaW5nQ29udGV4dDJEKTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQogI2VuZGlmCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUGFpbnRXb3Jr
bGV0R2xvYmFsU2NvcGVDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTUGFpbnRXb3JrbGV0R2xvYmFsU2NvcGVDdXN0b20uY3BwCShyZXZpc2lvbiAy
NzMxMTkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1BhaW50V29ya2xldEdsb2Jh
bFNjb3BlQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE4LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMSw3ICszMSw4IEBACiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCi12b2lkIEpTUGFpbnRXb3JrbGV0R2xv
YmFsU2NvcGU6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0
b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1BhaW50V29ya2xldEdsb2Jh
bFNjb3BlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAg
IGF1dG8gbG9ja2VyID0gaG9sZExvY2sod3JhcHBlZCgpLnBhaW50RGVmaW5pdGlvbkxvY2soKSk7
CiAgICAgZm9yIChhdXRvJiByZWdpc3RlcmVkIDogd3JhcHBlZCgpLnBhaW50RGVmaW5pdGlvbk1h
cCgpLnZhbHVlcygpKSB7CkBAIC00MCw1ICs0MSw4IEBAIHZvaWQgSlNQYWludFdvcmtsZXRHbG9i
YWxTY29wZTo6dmlzaXRBZGQKICAgICB9CiB9CiAKLX0KK0RFRklORV9WSVNJVF9BRERJVElPTkFM
X0NISUxEUkVOKEpTUGFpbnRXb3JrbGV0R2xvYmFsU2NvcGUpOworCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNQYXlt
ZW50TWV0aG9kQ2hhbmdlRXZlbnRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTUGF5bWVudE1ldGhvZENoYW5nZUV2ZW50Q3VzdG9tLmNwcAkocmV2
aXNpb24gMjczMTE5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNQYXltZW50TWV0
aG9kQ2hhbmdlRXZlbnRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQxLDcgKzQxLDggQEAgSlND
OjpKU1ZhbHVlIEpTUGF5bWVudE1ldGhvZENoYW5nZUV2ZW50OgogICAgIH0pOwogfQogCi12b2lk
IEpTUGF5bWVudE1ldGhvZENoYW5nZUV2ZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6
OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQg
SlNQYXltZW50TWV0aG9kQ2hhbmdlRXZlbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0
b3ImIHZpc2l0b3IpCiB7CiAgICAgV1RGOjpzd2l0Y2hPbih3cmFwcGVkKCkubWV0aG9kRGV0YWls
cygpLCBbJnZpc2l0b3JdKGNvbnN0IEpTVmFsdWVJbldyYXBwZWRPYmplY3QmIG1ldGhvZERldGFp
bHMpIHsKICAgICAgICAgbWV0aG9kRGV0YWlscy52aXNpdCh2aXNpdG9yKTsKQEAgLTUxLDYgKzUy
LDggQEAgdm9pZCBKU1BheW1lbnRNZXRob2RDaGFuZ2VFdmVudDo6dmlzaXRBZAogICAgIHdyYXBw
ZWQoKS5jYWNoZWRNZXRob2REZXRhaWxzKCkudmlzaXQodmlzaXRvcik7CiB9CiAKK0RFRklORV9W
SVNJVF9BRERJVElPTkFMX0NISUxEUkVOKEpTUGF5bWVudE1ldGhvZENoYW5nZUV2ZW50KTsKKwog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKFBBWU1FTlRfUkVRVUVT
VCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUGF5bWVudFJlc3BvbnNlQ3Vz
dG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1BheW1l
bnRSZXNwb25zZUN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTUGF5bWVudFJlc3BvbnNlQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0z
NywxMSArMzcsMTQgQEAgSlNDOjpKU1ZhbHVlIEpTUGF5bWVudFJlc3BvbnNlOjpkZXRhaWxzKAog
ICAgIH0pOwogfQogCi12b2lkIEpTUGF5bWVudFJlc3BvbnNlOjp2aXNpdEFkZGl0aW9uYWxDaGls
ZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRv
cj4KK3ZvaWQgSlNQYXltZW50UmVzcG9uc2U6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0
b3ImIHZpc2l0b3IpCiB7CiAgICAgd3JhcHBlZCgpLmNhY2hlZERldGFpbHMoKS52aXNpdCh2aXNp
dG9yKTsKIH0KIAorREVGSU5FX1ZJU0lUX0FERElUSU9OQUxfQ0hJTERSRU4oSlNQYXltZW50UmVz
cG9uc2UpOworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoUEFZ
TUVOVF9SRVFVRVNUKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNQZXJmb3Jt
YW5jZU9ic2VydmVyQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU1BlcmZvcm1hbmNlT2JzZXJ2ZXJDdXN0b20uY3BwCShyZXZpc2lvbiAyNzMxMTkp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1BlcmZvcm1hbmNlT2JzZXJ2ZXJDdXN0
b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTgtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTMxLDEyICszMSwxNSBAQAogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLXZvaWQgSlNQZXJmb3JtYW5jZU9ic2VydmVyOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJl
bihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4K
K3ZvaWQgSlNQZXJmb3JtYW5jZU9ic2VydmVyOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNp
dG9yJiB2aXNpdG9yKQogewogICAgIHdyYXBwZWQoKS5jYWxsYmFjaygpLnZpc2l0SlNGdW5jdGlv
bih2aXNpdG9yKTsKIH0KIAotYm9vbCBKU1BlcmZvcm1hbmNlT2JzZXJ2ZXJPd25lcjo6aXNSZWFj
aGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZv
aWQqLCBKU0M6OlNsb3RWaXNpdG9yJiwgY29uc3QgY2hhcioqIHJlYXNvbikKK0RFRklORV9WSVNJ
VF9BRERJVElPTkFMX0NISUxEUkVOKEpTUGVyZm9ybWFuY2VPYnNlcnZlcik7CisKK2Jvb2wgSlNQ
ZXJmb3JtYW5jZU9ic2VydmVyT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6
SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgSlNDOjpBYnN0cmFjdFNsb3RWaXNp
dG9yJiwgY29uc3QgY2hhcioqIHJlYXNvbikKIHsKICAgICBpZiAoVU5MSUtFTFkocmVhc29uKSkK
ICAgICAgICAgKnJlYXNvbiA9ICJSZWdpc3RlcmVkIFBlcmZvcm1hbmNlT2JzZXJ2ZXIgY2FsbGJh
Y2siOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNQb3BTdGF0ZUV2ZW50Q3Vz
dG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1BvcFN0
YXRlRXZlbnRDdXN0b20uY3BwCShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU1BvcFN0YXRlRXZlbnRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKQEAgLTkwLDkg
KzkxLDEyIEBAIEpTVmFsdWUgSlNQb3BTdGF0ZUV2ZW50OjpzdGF0ZShKU0dsb2JhbE8KICAgICBy
ZXR1cm4gY2FjaGVTdGF0ZShyZXN1bHQpOwogfQogCi12b2lkIEpTUG9wU3RhdGVFdmVudDo6dmlz
aXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRl
PHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTUG9wU3RhdGVFdmVudDo6dmlzaXRBZGRpdGlvbmFs
Q2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB3cmFwcGVkKCkuc3RhdGUoKS52aXNp
dCh2aXNpdG9yKTsKIH0KIAorREVGSU5FX1ZJU0lUX0FERElUSU9OQUxfQ0hJTERSRU4oSlNQb3BT
dGF0ZUV2ZW50KTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNQcm9taXNlUmVqZWN0aW9uRXZlbnRDdXN0b20uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUHJvbWlzZVJlamVjdGlvbkV2ZW50
Q3VzdG9tLmNwcAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNQcm9taXNlUmVqZWN0aW9uRXZlbnRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxOCBZdXN1a2UgU3V6dWtpIDx5dXN1
a2VzdXp1a2lAc2xvd3N0YXJ0Lm9yZz4uCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0zMiw5ICszMywxMiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgSlNQcm9taXNl
UmVqZWN0aW9uRXZlbnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3Im
IHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1Byb21pc2VSZWpl
Y3Rpb25FdmVudDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsK
ICAgICB3cmFwcGVkKCkucmVhc29uKCkudmlzaXQodmlzaXRvcik7CiB9CiAKK0RFRklORV9WSVNJ
VF9BRERJVElPTkFMX0NISUxEUkVOKEpTUHJvbWlzZVJlamVjdGlvbkV2ZW50KTsKKwogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNSZXNp
emVPYnNlcnZlckN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNSZXNpemVPYnNlcnZlckN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MzExOSkKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUmVzaXplT2JzZXJ2ZXJDdXN0b20uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAyMCBJZ2Fs
aWEgUy5MLgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzAsMTEgKzMxLDE0IEBA
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBKU1Jlc2l6ZU9ic2VydmVyOjp2aXNpdEFk
ZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlw
ZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNSZXNpemVPYnNlcnZlcjo6dmlzaXRBZGRpdGlvbmFsQ2hp
bGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBSZXNpemVPYnNlcnZlckNhbGxiYWNrKiBj
YWxsYmFjayA9IHdyYXBwZWQoKS5jYWxsYmFja0NvbmN1cnJlbnRseSgpOwogICAgIGlmIChjYWxs
YmFjaykKICAgICAgICAgY2FsbGJhY2stPnZpc2l0SlNGdW5jdGlvbih2aXNpdG9yKTsKIH0KIAot
fQorREVGSU5FX1ZJU0lUX0FERElUSU9OQUxfQ0hJTERSRU4oSlNSZXNpemVPYnNlcnZlcik7CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTUmVzaXplT2JzZXJ2ZXJFbnRyeUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNSZXNpemVPYnNlcnZlckVudHJ5Q3VzdG9tLmNwcAkocmV2aXNp
b24gMjczMTE5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNSZXNpemVPYnNlcnZl
ckVudHJ5Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBD
b3B5cmlnaHQgKEMpIDIwMTkgSWdhbGlhIFMuTC4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTMwLDEwICszMSwxMyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgSlNS
ZXNpemVPYnNlcnZlckVudHJ5Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNp
dG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNSZXNpemVP
YnNlcnZlckVudHJ5Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQog
ewogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChyb290KHdyYXBwZWQoKS50YXJnZXQoKSkpOwog
ICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdCh3cmFwcGVkKCkuY29udGVudFJlY3QoKSk7CiB9CiAK
LX0KK0RFRklORV9WSVNJVF9BRERJVElPTkFMX0NISUxEUkVOKEpTUmVzaXplT2JzZXJ2ZXJFbnRy
eSk7CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTU1ZHVmlld1NwZWNDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTU1ZHVmlld1NwZWNDdXN0b20uY3BwCShyZXZpc2lvbiAyNzMxMTkp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NWR1ZpZXdTcGVjQ3VzdG9tLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTgg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE4LTIw
MjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0zMCwxMCArMzAsMTMgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12
b2lkIEpTU1ZHVmlld1NwZWM6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0
b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1NWR1ZpZXdT
cGVjOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEFT
U0VSVCh3cmFwcGVkKCkuY29udGV4dEVsZW1lbnRDb25jdXJyZW50bHkoKS5nZXQoKSk7CiAgICAg
dmlzaXRvci5hZGRPcGFxdWVSb290KHJvb3Qod3JhcHBlZCgpLmNvbnRleHRFbGVtZW50Q29uY3Vy
cmVudGx5KCkuZ2V0KCkpKTsKIH0KIAotfQorREVGSU5FX1ZJU0lUX0FERElUSU9OQUxfQ0hJTERS
RU4oSlNTVkdWaWV3U3BlYyk7CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU2VydmljZVdvcmtlckdsb2JhbFNjb3BlQ3VzdG9tLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NlcnZpY2VXb3Jr
ZXJHbG9iYWxTY29wZUN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTU2VydmljZVdvcmtlckdsb2JhbFNjb3BlQ3VzdG9tLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0zNCwxMiArMzQsMTUgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2luZyBu
YW1lc3BhY2UgSlNDOwogCi12b2lkIEpTU2VydmljZVdvcmtlckdsb2JhbFNjb3BlOjp2aXNpdEFk
ZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1l
IFZpc2l0b3I+Cit2b2lkIEpTU2VydmljZVdvcmtlckdsb2JhbFNjb3BlOjp2aXNpdEFkZGl0aW9u
YWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9v
dCgmd3JhcHBlZCgpLmNsaWVudHMoKSk7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KCZ3cmFw
cGVkKCkucmVnaXN0cmF0aW9uKCkpOwogfQogCitERUZJTkVfVklTSVRfQURESVRJT05BTF9DSElM
RFJFTihKU1NlcnZpY2VXb3JrZXJHbG9iYWxTY29wZSk7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKIAogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1N0YXRpY1Jh
bmdlQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U1N0YXRpY1JhbmdlQ3VzdG9tLmNwcAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNTdGF0aWNSYW5nZUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMwLDkgKzMwLDEyIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBKU1N0YXRpY1Jh
bmdlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQor
dGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNTdGF0aWNSYW5nZTo6dmlzaXRBZGRp
dGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB3cmFwcGVkKCkudmlzaXRO
b2Rlc0NvbmN1cnJlbnRseSh2aXNpdG9yKTsKIH0KIAorREVGSU5FX1ZJU0lUX0FERElUSU9OQUxf
Q0hJTERSRU4oSlNTdGF0aWNSYW5nZSk7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU3R5bGVTaGVldEN1c3RvbS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNTdHlsZVNoZWV0Q3VzdG9tLmNw
cAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNTdHls
ZVNoZWV0Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMCwxMSArMzAsMTQg
QEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIEpTU3R5bGVTaGVldDo6dmlzaXRBZGRp
dGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVu
YW1lIFZpc2l0b3I+Cit2b2lkIEpTU3R5bGVTaGVldDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4o
VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qocm9vdCgmd3Jh
cHBlZCgpKSk7CiB9CiAKK0RFRklORV9WSVNJVF9BRERJVElPTkFMX0NISUxEUkVOKEpTU3R5bGVT
aGVldCk7CisKIEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6SlNHbG9iYWxPYmpl
Y3QqLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWY8U3R5bGVTaGVldD4mJiBz
dHlsZVNoZWV0KQogewogICAgIGlmIChzdHlsZVNoZWV0LT5pc0NTU1N0eWxlU2hlZXQoKSkKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVGV4dFRyYWNrQ3VlQ3VzdG9tLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1RleHRUcmFja0N1ZUN1
c3RvbS5jcHAJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTVGV4dFRyYWNrQ3VlQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zOCw3ICszOCw3IEBACiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCi1ib29sIEpTVGV4dFRy
YWNrQ3VlT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6
VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgU2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIq
KiByZWFzb24pCitib29sIEpTVGV4dFRyYWNrQ3VlT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1
ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgQWJzdHJhY3RT
bG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikKIHsKICAgICBKU1RleHRU
cmFja0N1ZSoganNUZXh0VHJhY2tDdWUgPSBqc0Nhc3Q8SlNUZXh0VHJhY2tDdWUqPihoYW5kbGUu
c2xvdCgpLT5hc0NlbGwoKSk7CiAgICAgVGV4dFRyYWNrQ3VlJiB0ZXh0VHJhY2tDdWUgPSBqc1Rl
eHRUcmFja0N1ZS0+d3JhcHBlZCgpOwpAQCAtODIsMTIgKzgyLDE1IEBAIEpTVmFsdWUgdG9KUyhK
U0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2IKICAgICByZXR1cm4gd3JhcChsZXhpY2FsR2xvYmFs
T2JqZWN0LCBnbG9iYWxPYmplY3QsIGN1ZSk7CiB9CiAKLXZvaWQgSlNUZXh0VHJhY2tDdWU6OnZp
c2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlw
ZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNUZXh0VHJhY2tDdWU6OnZpc2l0QWRkaXRpb25hbENoaWxk
cmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgaWYgKFRleHRUcmFjayogdGV4dFRyYWNrID0g
d3JhcHBlZCgpLnRyYWNrKCkpCiAgICAgICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChyb290KHRl
eHRUcmFjaykpOwogfQogCitERUZJTkVfVklTSVRfQURESVRJT05BTF9DSElMRFJFTihKU1RleHRU
cmFja0N1ZSk7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1RleHRUcmFja0N1c3RvbS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNUZXh0VHJhY2tDdXN0b20uY3BwCShyZXZp
c2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1RleHRUcmFja0N1
c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzYsMTEgKzM2LDE0IEBACiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCi12b2lkIEpTVGV4dFRyYWNrOjp2aXNpdEFkZGl0
aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZp
c2l0b3I+Cit2b2lkIEpTVGV4dFRyYWNrOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9y
JiB2aXNpdG9yKQogewogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChyb290KCZ3cmFwcGVkKCkp
KTsKIH0KIAorREVGSU5FX1ZJU0lUX0FERElUSU9OQUxfQ0hJTERSRU4oSlNUZXh0VHJhY2spOwor
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNUZXh0VHJhY2tMaXN0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1RleHRUcmFja0xpc3RDdXN0b20uY3BwCShyZXZpc2lv
biAyNzMxMTkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1RleHRUcmFja0xpc3RD
dXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTEtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM2LDExICszNiwxNCBAQAogbmFtZXNwYWNlIFdlYkNv
cmUgewogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAotdm9pZCBKU1RleHRUcmFja0xpc3Q6OnZpc2l0
QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0
eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1RleHRUcmFja0xpc3Q6OnZpc2l0QWRkaXRpb25hbENo
aWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHJv
b3Qod3JhcHBlZCgpLmVsZW1lbnQoKSkpOwogfQogICAgIAorREVGSU5FX1ZJU0lUX0FERElUSU9O
QUxfQ0hJTERSRU4oSlNUZXh0VHJhY2tMaXN0KTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQog
CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVHJlZVdhbGtlckN1
c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNUcmVl
V2Fsa2VyQ3VzdG9tLmNwcAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNUcmVlV2Fsa2VyQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yNSwxMCArMjUs
MTMgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIEpTVHJlZVdhbGtlcjo6dmlzaXRB
ZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5
cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTVHJlZVdhbGtlcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRy
ZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBpZiAoTm9kZUZpbHRlciogZmlsdGVyID0gd3Jh
cHBlZCgpLmZpbHRlcigpKQogICAgICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QoZmlsdGVyKTsK
IH0KIAotfQorREVGSU5FX1ZJU0lUX0FERElUSU9OQUxfQ0hJTERSRU4oSlNUcmVlV2Fsa2VyKTsK
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNVbmRvSXRlbUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNVbmRvSXRlbUN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVW5kb0l0ZW1DdXN0b20uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTI5LDEzICsyOSwxNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgSlNVbmRvSXRl
bTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3Rl
bXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTVW5kb0l0ZW06OnZpc2l0QWRkaXRpb25h
bENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgd3JhcHBlZCgpLnVuZG9IYW5kbGVy
KCkudmlzaXRKU0Z1bmN0aW9uKHZpc2l0b3IpOwogICAgIHdyYXBwZWQoKS5yZWRvSGFuZGxlcigp
LnZpc2l0SlNGdW5jdGlvbih2aXNpdG9yKTsKIH0KIAotYm9vbCBKU1VuZG9JdGVtT3duZXI6Omlz
UmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxl
LCB2b2lkKiwgSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikK
K0RFRklORV9WSVNJVF9BRERJVElPTkFMX0NISUxEUkVOKEpTVW5kb0l0ZW0pOworCitib29sIEpT
VW5kb0l0ZW1Pd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlND
OjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0
b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCiB7CiAgICAgaWYgKFVOTElLRUxZKHJlYXNvbikpCiAg
ICAgICAgICpyZWFzb24gPSAiRG9jdW1lbnQgaXMgYW4gb3BhcXVlIHJvb3QuIjsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVmFsdWVJbldyYXBwZWRPYmplY3QuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1ZhbHVlSW5XcmFwcGVkT2JqZWN0
LmgJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVmFs
dWVJbldyYXBwZWRPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE4LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDAsNyArNDAsNyBAQCBwdWJsaWM6CiAg
ICAgb3BlcmF0b3IgSlNDOjpKU1ZhbHVlKCkgY29uc3Q7CiAgICAgZXhwbGljaXQgb3BlcmF0b3Ig
Ym9vbCgpIGNvbnN0OwogICAgIEpTVmFsdWVJbldyYXBwZWRPYmplY3QmIG9wZXJhdG9yPShjb25z
dCBKU1ZhbHVlSW5XcmFwcGVkT2JqZWN0JiBvdGhlcik7Ci0gICAgdm9pZCB2aXNpdChKU0M6OlNs
b3RWaXNpdG9yJikgY29uc3Q7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCB2
aXNpdChWaXNpdG9yJikgY29uc3Q7CiAgICAgdm9pZCBjbGVhcigpOwogCiBwcml2YXRlOgpAQCAt
OTgsNyArOTgsOCBAQCBpbmxpbmUgSlNWYWx1ZUluV3JhcHBlZE9iamVjdCYgSlNWYWx1ZUluCiAg
ICAgcmV0dXJuICp0aGlzOwogfQogCi1pbmxpbmUgdm9pZCBKU1ZhbHVlSW5XcmFwcGVkT2JqZWN0
Ojp2aXNpdChKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKSBjb25zdAordGVtcGxhdGU8dHlwZW5h
bWUgVmlzaXRvcj4KK2lubGluZSB2b2lkIEpTVmFsdWVJbldyYXBwZWRPYmplY3Q6OnZpc2l0KFZp
c2l0b3ImIHZpc2l0b3IpIGNvbnN0CiB7CiAgICAgcmV0dXJuIFdURjo6c3dpdGNoT24obV92YWx1
ZSwgW10gKEpTQzo6SlNWYWx1ZSkgewogICAgICAgICAvLyBOb3RoaW5nIHRvIHZpc2l0LgpAQCAt
MTA3LDYgKzEwOCw5IEBAIGlubGluZSB2b2lkIEpTVmFsdWVJbldyYXBwZWRPYmplY3Q6OnZpc2kK
ICAgICB9KTsKIH0KIAordGVtcGxhdGUgdm9pZCBKU1ZhbHVlSW5XcmFwcGVkT2JqZWN0Ojp2aXNp
dChKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKSBjb25zdDsKK3RlbXBsYXRlIHZvaWQgSlNWYWx1
ZUluV3JhcHBlZE9iamVjdDo6dmlzaXQoSlNDOjpTbG90VmlzaXRvciYpIGNvbnN0OworCiBpbmxp
bmUgdm9pZCBKU1ZhbHVlSW5XcmFwcGVkT2JqZWN0OjpjbGVhcigpCiB7CiAgICAgV1RGOjpzd2l0
Y2hPbihtX3ZhbHVlLCBbXSAoV2VhayYgdmFsdWUpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTVmlkZW9UcmFja0N1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNWaWRlb1RyYWNrQ3VzdG9tLmNwcAkocmV2aXNpb24gMjczMTE5
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNWaWRlb1RyYWNrQ3VzdG9tLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLTIw
MjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0zNSwxMSArMzUsMTQgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5n
IG5hbWVzcGFjZSBKU0M7CiAKLXZvaWQgSlNWaWRlb1RyYWNrOjp2aXNpdEFkZGl0aW9uYWxDaGls
ZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2
b2lkIEpTVmlkZW9UcmFjazo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRv
cikKIHsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qocm9vdCgmd3JhcHBlZCgpKSk7CiB9CiAK
K0RFRklORV9WSVNJVF9BRERJVElPTkFMX0NISUxEUkVOKEpTVmlkZW9UcmFjayk7CisKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU1ZpZGVvVHJhY2tMaXN0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU1ZpZGVvVHJhY2tMaXN0Q3VzdG9tLmNwcAkocmV2aXNpb24gMjcz
MTE5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNWaWRlb1RyYWNrTGlzdEN1c3Rv
bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMzUsMTEgKzM1LDE0IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCi12b2lkIEpTVmlkZW9UcmFja0xpc3Q6OnZpc2l0QWRk
aXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUg
VmlzaXRvcj4KK3ZvaWQgSlNWaWRlb1RyYWNrTGlzdDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4o
VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qocm9vdCh3cmFw
cGVkKCkuZWxlbWVudCgpKSk7CiB9CiAKK0RFRklORV9WSVNJVF9BRERJVElPTkFMX0NISUxEUkVO
KEpTVmlkZW9UcmFja0xpc3QpOworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZgpJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJHTDJSZW5kZXJpbmdDb250ZXh0
Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dl
YkdMMlJlbmRlcmluZ0NvbnRleHRDdXN0b20uY3BwCShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYkdMMlJlbmRlcmluZ0NvbnRleHRDdXN0b20uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
NS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMzMsMTIgKzMzLDE1IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCi12b2lkIEpTV2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6
dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0
eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1dlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OnZpc2l0QWRk
aXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgdmlzaXRvci5hZGRPcGFx
dWVSb290KCZ3cmFwcGVkKCkpOwogICAgIHdyYXBwZWQoKS5hZGRNZW1iZXJzVG9PcGFxdWVSb290
cyh2aXNpdG9yKTsKIH0KIAorREVGSU5FX1ZJU0lUX0FERElUSU9OQUxfQ0hJTERSRU4oSlNXZWJH
TDJSZW5kZXJpbmdDb250ZXh0KTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYg
Ly8gRU5BQkxFKFdFQkdMKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJH
TFJlbmRlcmluZ0NvbnRleHRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTV2ViR0xSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcAkocmV2aXNpb24g
MjczMTE5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJHTFJlbmRlcmluZ0Nv
bnRleHRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTUtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMzLDEyICszMywxNSBAQAogbmFtZXNwYWNl
IFdlYkNvcmUgewogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAotdm9pZCBKU1dlYkdMUmVuZGVyaW5n
Q29udGV4dDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0
ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6
dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB2aXNpdG9y
LmFkZE9wYXF1ZVJvb3QoJndyYXBwZWQoKSk7CiAgICAgd3JhcHBlZCgpLmFkZE1lbWJlcnNUb09w
YXF1ZVJvb3RzKHZpc2l0b3IpOwogfQogCitERUZJTkVfVklTSVRfQURESVRJT05BTF9DSElMRFJF
TihKU1dlYkdMUmVuZGVyaW5nQ29udGV4dCk7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAog
I2VuZGlmIC8vIEVOQUJMRShXRUJHTCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTV29ya2VyR2xvYmFsU2NvcGVCYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU1dvcmtlckdsb2JhbFNjb3BlQmFzZS5jcHAJKHJldmlzaW9uIDI3MzEx
OSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyR2xvYmFsU2NvcGVCYXNl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDgsIDIwMDksIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDA4LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICog
Q29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CkBAIC05Miw3ICs5Miw4IEBAIHZvaWQgSlNXb3JrZXJHbG9iYWxTY29wZUJh
c2U6OmZpbmlzaENyZWEKICAgICBBU1NFUlQoaW5oZXJpdHModm0sIGluZm8oKSkpOwogfQogCi12
b2lkIEpTV29ya2VyR2xvYmFsU2NvcGVCYXNlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwg
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBK
U1dvcmtlckdsb2JhbFNjb3BlQmFzZTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBW
aXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTV29ya2VyR2xvYmFsU2NvcGVCYXNlKiB0aGlzT2Jq
ZWN0ID0ganNDYXN0PEpTV29ya2VyR2xvYmFsU2NvcGVCYXNlKj4oY2VsbCk7CiAgICAgQVNTRVJU
X0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtMTAwLDYgKzEwMSw4
IEBAIHZvaWQgSlNXb3JrZXJHbG9iYWxTY29wZUJhc2U6OnZpc2l0Q2hpbGQKICAgICB2aXNpdG9y
LmFwcGVuZCh0aGlzT2JqZWN0LT5tX3Byb3h5KTsKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVO
KEpTV29ya2VyR2xvYmFsU2NvcGVCYXNlKTsKKwogdm9pZCBKU1dvcmtlckdsb2JhbFNjb3BlQmFz
ZTo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCiB7CiAgICAgc3RhdGljX2Nhc3Q8SlNXb3JrZXJHbG9i
YWxTY29wZUJhc2UqPihjZWxsKS0+SlNXb3JrZXJHbG9iYWxTY29wZUJhc2U6On5KU1dvcmtlckds
b2JhbFNjb3BlQmFzZSgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXb3Jr
ZXJHbG9iYWxTY29wZUJhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU1dvcmtlckdsb2JhbFNjb3BlQmFzZS5oCShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckdsb2JhbFNjb3BlQmFzZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTc5LDcgKzc5LDcgQEAgcHJvdGVjdGVkOgogICAgIEpTV29ya2VyR2xvYmFs
U2NvcGVCYXNlKEpTQzo6Vk0mLCBKU0M6OlN0cnVjdHVyZSosIFJlZlB0cjxXb3JrZXJHbG9iYWxT
Y29wZT4mJik7CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJiwgSlNDOjpKU1Byb3h5
Kik7CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQzo6SlNDZWxsKiwgSlNDOjpT
bG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKIHByaXZhdGU6CiAg
ICAgUmVmUHRyPFdvcmtlckdsb2JhbFNjb3BlPiBtX3dyYXBwZWQ7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckdsb2JhbFNjb3BlQ3VzdG9tLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckdsb2JhbFNjb3BlQ3VzdG9t
LmNwcAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNX
b3JrZXJHbG9iYWxTY29wZUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMDksIDIwMTEsIDIwMTYgQXBwbGUgSW5jLiBB
bGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMjEgQXBwbGUgSW5j
LiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0zMyw3ICszMyw4IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2UgSlND
OwogCi12b2lkIEpTV29ya2VyR2xvYmFsU2NvcGU6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNX
b3JrZXJHbG9iYWxTY29wZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRv
cikKIHsKICAgICBpZiAoYXV0byogbG9jYXRpb24gPSB3cmFwcGVkKCkub3B0aW9uYWxMb2NhdGlv
bigpKQogICAgICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QobG9jYXRpb24pOwpAQCAtNDgsNiAr
NDksOCBAQCB2b2lkIEpTV29ya2VyR2xvYmFsU2NvcGU6OnZpc2l0QWRkaXRpb25hCiAgICAgd3Jh
cHBlZCgpLnZpc2l0SlNFdmVudExpc3RlbmVycyh2aXNpdG9yKTsKIH0KIAorREVGSU5FX1ZJU0lU
X0FERElUSU9OQUxfQ0hJTERSRU4oSlNXb3JrZXJHbG9iYWxTY29wZSk7CisKIEpTVmFsdWUgSlNX
b3JrZXJHbG9iYWxTY29wZTo6cXVldWVNaWNyb3Rhc2soSlNHbG9iYWxPYmplY3QmIGxleGljYWxH
bG9iYWxPYmplY3QsIENhbGxGcmFtZSYgY2FsbEZyYW1lKQogewogICAgIFZNJiB2bSA9IGxleGlj
YWxHbG9iYWxPYmplY3Qudm0oKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
V29ya2VyTmF2aWdhdG9yQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU1dvcmtlck5hdmlnYXRvckN1c3RvbS5jcHAJKHJldmlzaW9uIDI3MzExOSkK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyTmF2aWdhdG9yQ3VzdG9tLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3
LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0yOCw5ICsyOCwxMiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
LXZvaWQgSlNXb3JrZXJOYXZpZ2F0b3I6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xv
dFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1dv
cmtlck5hdmlnYXRvcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikK
IHsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qoc3RhdGljX2Nhc3Q8TmF2aWdhdG9yQmFzZSo+
KCZ3cmFwcGVkKCkpKTsKIH0KIAotfQorREVGSU5FX1ZJU0lUX0FERElUSU9OQUxfQ0hJTERSRU4o
SlNXb3JrZXJOYXZpZ2F0b3IpOworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtsZXRHbG9iYWxTY29wZUJhc2UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2xldEdsb2JhbFNjb3Bl
QmFzZS5jcHAJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTV29ya2xldEdsb2JhbFNjb3BlQmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODIsNyArODIsOCBA
QCB2b2lkIEpTV29ya2xldEdsb2JhbFNjb3BlQmFzZTo6ZmluaXNoQ3JlCiAgICAgQVNTRVJUKGlu
aGVyaXRzKHZtLCBpbmZvKCkpKTsKIH0KIAotdm9pZCBKU1dvcmtsZXRHbG9iYWxTY29wZUJhc2U6
OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3RlbXBs
YXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTV29ya2xldEdsb2JhbFNjb3BlQmFzZTo6dmlz
aXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGF1
dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNXb3JrbGV0R2xvYmFsU2NvcGVCYXNlKj4oY2VsbCk7
CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAt
OTAsNiArOTEsOCBAQCB2b2lkIEpTV29ya2xldEdsb2JhbFNjb3BlQmFzZTo6dmlzaXRDaGlsCiAg
ICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9wcm94eSk7CiB9CiAKK0RFRklORV9WSVNJ
VF9DSElMRFJFTihKU1dvcmtsZXRHbG9iYWxTY29wZUJhc2UpOworCiB2b2lkIEpTV29ya2xldEds
b2JhbFNjb3BlQmFzZTo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCiB7CiAgICAgc3RhdGljX2Nhc3Q8
SlNXb3JrbGV0R2xvYmFsU2NvcGVCYXNlKj4oY2VsbCktPkpTV29ya2xldEdsb2JhbFNjb3BlQmFz
ZTo6fkpTV29ya2xldEdsb2JhbFNjb3BlQmFzZSgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNXb3JrbGV0R2xvYmFsU2NvcGVCYXNlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrbGV0R2xvYmFsU2NvcGVCYXNlLmgJKHJldmlzaW9u
IDI3MzExOSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2xldEdsb2JhbFNj
b3BlQmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTgtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY3LDcgKzY3LDcgQEAgcHJvdGVjdGVkOgogICAgIEpT
V29ya2xldEdsb2JhbFNjb3BlQmFzZShKU0M6OlZNJiwgSlNDOjpTdHJ1Y3R1cmUqLCBSZWZQdHI8
V29ya2xldEdsb2JhbFNjb3BlPiYmKTsKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0m
LCBKU0M6OkpTUHJveHkqKTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDOjpK
U0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsK
IAogcHJpdmF0ZToKICAgICBSZWZQdHI8V29ya2xldEdsb2JhbFNjb3BlPiBtX3dyYXBwZWQ7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1hNTEh0dHBSZXF1ZXN0Q3VzdG9tLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1hNTEh0dHBSZXF1
ZXN0Q3VzdG9tLmNwcAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNYTUxIdHRwUmVxdWVzdEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDEs
NyArNDEsOCBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAot
dm9pZCBKU1hNTEh0dHBSZXF1ZXN0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRv
ciYgdmlzaXRvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTWE1MSHR0cFJl
cXVlc3Q6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAg
aWYgKGF1dG8qIHVwbG9hZCA9IHdyYXBwZWQoKS5vcHRpb25hbFVwbG9hZCgpKQogICAgICAgICB2
aXNpdG9yLmFkZE9wYXF1ZVJvb3QodXBsb2FkKTsKQEAgLTUwLDYgKzUxLDggQEAgdm9pZCBKU1hN
TEh0dHBSZXF1ZXN0Ojp2aXNpdEFkZGl0aW9uYWxDaAogICAgICAgICB2aXNpdG9yLmFkZE9wYXF1
ZVJvb3QocmVzcG9uc2VEb2N1bWVudCk7CiB9CiAKK0RFRklORV9WSVNJVF9BRERJVElPTkFMX0NI
SUxEUkVOKEpTWE1MSHR0cFJlcXVlc3QpOworCiBKU1ZhbHVlIEpTWE1MSHR0cFJlcXVlc3Q6OnJl
c3BvbnNlKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0KSBjb25zdAogewogICAg
IGF1dG8gY2FjaGVSZXN1bHQgPSBbJl0gKEpTVmFsdWUgdmFsdWUpIC0+IEpTVmFsdWUgewpJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNYUGF0aFJlc3VsdEN1c3RvbS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNYUGF0aFJlc3VsdEN1c3Rv
bS5jcHAJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
WFBhdGhSZXN1bHRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoK
ICAqIENvcHlyaWdodCAoQykgMjAxMSBKdWxpZW4gQ2hhZmZyYWl4IDxqY2hhZmZyYWl4QHdlYmtp
dC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMSw3ICszMiw4IEBACiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBKU1hQYXRoUmVzdWx0Ojp2aXNpdEFkZGl0aW9u
YWxDaGlsZHJlbihKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5hbWUg
VmlzaXRvcj4KK3ZvaWQgSlNYUGF0aFJlc3VsdDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlz
aXRvciYgdmlzaXRvcikKIHsKICAgICBhdXRvJiB2YWx1ZSA9IHdyYXBwZWQoKS52YWx1ZSgpOwog
ICAgIGlmICh2YWx1ZS5pc05vZGVTZXQoKSkgewpAQCAtNDEsNCArNDMsNiBAQCB2b2lkIEpTWFBh
dGhSZXN1bHQ6OnZpc2l0QWRkaXRpb25hbENoaWxkCiAgICAgfQogfQogCitERUZJTkVfVklTSVRf
QURESVRJT05BTF9DSElMRFJFTihKU1hQYXRoUmVzdWx0KTsKKwogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV2ViQ29yZVR5cGVkQXJyYXlD
b250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9X
ZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTU2LDcgKzU2LDcgQEAgYm9vbCBXZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xs
ZXI6OmlzQXRvbQogICAgIHJldHVybiBtX2FsbG93QXRvbWljc1dhaXQ7CiB9CiAKLWJvb2wgV2Vi
Q29yZVR5cGVkQXJyYXlDb250cm9sbGVyOjpKU0FycmF5QnVmZmVyT3duZXI6OmlzUmVhY2hhYmxl
RnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwg
SlNDOjpTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikKK2Jvb2wgV2Vi
Q29yZVR5cGVkQXJyYXlDb250cm9sbGVyOjpKU0FycmF5QnVmZmVyT3duZXI6OmlzUmVhY2hhYmxl
RnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwg
SlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQog
ewogICAgIGlmIChVTkxJS0VMWShyZWFzb24pKQogICAgICAgICAqcmVhc29uID0gIkFycmF5QnVm
ZmVyIGlzIG9wYXF1ZSByb290IjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dl
YkNvcmVUeXBlZEFycmF5Q29udHJvbGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL1dlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlci5oCShyZXZpc2lvbiAyNzMx
MTkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlVHlwZWRBcnJheUNvbnRy
b2xsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC00OCw3ICs0OCw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAg
ICAgY2xhc3MgSlNBcnJheUJ1ZmZlck93bmVyIDogcHVibGljIEpTQzo6V2Vha0hhbmRsZU93bmVy
IHsKICAgICBwdWJsaWM6Ci0gICAgICAgIGJvb2wgaXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMo
SlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCwgSlNDOjpTbG90VmlzaXRv
ciYsIGNvbnN0IGNoYXIqKikgb3ZlcnJpZGU7CisgICAgICAgIGJvb2wgaXNSZWFjaGFibGVGcm9t
T3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCwgSlND
OjpBYnN0cmFjdFNsb3RWaXNpdG9yJiwgY29uc3QgY2hhcioqKSBvdmVycmlkZTsKICAgICAgICAg
dm9pZCBmaW5hbGl6ZShKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0KSBv
dmVycmlkZTsKICAgICB9OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L0NvZGVHZW5lcmF0b3JKUy5wbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0JKHdvcmtpbmcgY29w
eSkKQEAgLTMsNyArMyw3IEBACiAjIENvcHlyaWdodCAoQykgMjAwNiBBbmRlcnMgQ2FybHNzb24g
PGFuZGVyc2NhQG1hYy5jb20+CiAjIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBTYW11ZWwgV2Vp
bmlnIDxzYW1Ad2Via2l0Lm9yZz4KICMgQ29weXJpZ2h0IChDKSAyMDA2IEFsZXhleSBQcm9za3Vy
eWFrb3YgPGFwQHdlYmtpdC5vcmc+Ci0jIENvcHlyaWdodCAoQykgMjAwNi0yMDIwIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgQ29weXJpZ2h0IChDKSAyMDA2LTIwMjEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogIyBDb3B5cmlnaHQgKEMpIDIwMDkgQ2FtZXJvbiBN
Y0Nvcm1hY2sgPGNhbUBtY2MuaWQuYXU+CiAjIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90
aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICMgQ29weXJpZ2h0IChDKSAy
MDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQpAQCAtMzA4
Nyw4ICszMDg3LDggQEAgc3ViIEdlbmVyYXRlSGVhZGVyCiAKICAgICAjIHZpc2l0IGZ1bmN0aW9u
CiAgICAgaWYgKCRuZWVkc1Zpc2l0Q2hpbGRyZW4pIHsKLSAgICAgICAgcHVzaChAaGVhZGVyQ29u
dGVudCwgIiAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIEpTQzo6U2xvdFZp
c2l0b3ImKTtcbiIpOwotICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHZvaWQgdmlz
aXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYpO1xuIikgaWYgJGludGVyZmFj
ZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57SlNDdXN0b21NYXJrRnVuY3Rpb259OworICAgICAgICBw
dXNoKEBoZWFkZXJDb250ZW50LCAiICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47XG4iKTsKKyAg
ICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
PiB2b2lkIHZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImKTtcbiIpIGlmICRpbnRlcmZh
Y2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+e0pTQ3VzdG9tTWFya0Z1bmN0aW9ufTsKICAgICAgICAg
cHVzaChAaGVhZGVyQ29udGVudCwgIlxuIik7CiAKICAgICAgICAgaWYgKCRpbnRlcmZhY2UtPmV4
dGVuZGVkQXR0cmlidXRlcy0+e0pTQ3VzdG9tTWFya0Z1bmN0aW9ufSkgewpAQCAtMzEwMyw3ICsz
MTAzLDcgQEAgc3ViIEdlbmVyYXRlSGVhZGVyCiAgICAgICAgICAgICAjIHRoYXQgdGhlIEdDIGNh
bGxzIHRvIGFzayBhbiBvYmplY3QgaXMgaXQgd291bGQgbGlrZSB0byBtYXJrIGFueXRoaW5nIGVs
c2UgYWZ0ZXIgdGhlCiAgICAgICAgICAgICAjIHByb2dyYW0gcmVzdW1lZCBzaW5jZSB0aGUgbGFz
dCBjYWxsIHRvIHZpc2l0Q2hpbGRyZW4gb3IgdmlzaXRPdXRwdXRDb25zdHJhaW50cy4gU2luY2UK
ICAgICAgICAgICAgICMgdGhpcyBqdXN0IGNhbGxzIHZpc2l0QWRkaXRpb25hbENoaWxkcmVuLCB5
b3UgdXN1YWxseSBkb24ndCBoYXZlIHRvIHdvcnJ5IGFib3V0IHRoaXMuCi0gICAgICAgICAgICBw
dXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHN0YXRpYyB2b2lkIHZpc2l0T3V0cHV0Q29uc3RyYWlu
dHMoSlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpO1xuIik7CisgICAgICAgICAgICBwdXNoKEBo
ZWFkZXJDb250ZW50LCAiICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHN0YXRpYyB2b2lk
IHZpc2l0T3V0cHV0Q29uc3RyYWludHMoSlNDZWxsKiwgVmlzaXRvciYpO1xuIik7CiAgICAgICAg
IH0KICAgICB9CiAKQEAgLTMyMjQsNyArMzIyNCw3IEBAIHN1YiBHZW5lcmF0ZUhlYWRlcgogICAg
ICAgICB9CiAgICAgICAgICRoZWFkZXJJbmNsdWRlc3siPHd0Zi9OZXZlckRlc3Ryb3llZC5oPiJ9
ID0gMTsKICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgInB1YmxpYzpcbiIpOwotICAgICAg
ICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIGJvb2wgaXNSZWFjaGFibGVGcm9tT3BhcXVlUm9v
dHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCwgSlNDOjpTbG90Vmlz
aXRvciYsIGNvbnN0IGNoYXIqKikgJHtvdmVycmlkZURlY2x9O1xuIik7CisgICAgICAgIHB1c2go
QGhlYWRlckNvbnRlbnQsICIgICAgYm9vbCBpc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6
OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0LCBKU0M6OkFic3RyYWN0U2xvdFZp
c2l0b3ImLCBjb25zdCBjaGFyKiopICR7b3ZlcnJpZGVEZWNsfTtcbiIpOwogICAgICAgICBwdXNo
KEBoZWFkZXJDb250ZW50LCAiICAgIHZvaWQgZmluYWxpemUoSlNDOjpIYW5kbGU8SlNDOjpVbmtu
b3duPiwgdm9pZCogY29udGV4dCkgJHtvdmVycmlkZURlY2x9O1xuIik7CiAgICAgICAgIHB1c2go
QGhlYWRlckNvbnRlbnQsICJ9O1xuIik7CiAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJc
biIpOwpAQCAtNDk0OCw2ICs0OTQ4LDcgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAg
ICBBZGRUb0ltcGxJbmNsdWRlcygiRE9NSXNvU3Vic3BhY2VzLmgiKTsKICAgICBBZGRUb0ltcGxJ
bmNsdWRlcygiV2ViQ29yZUpTQ2xpZW50RGF0YS5oIik7CiAgICAgQWRkVG9JbXBsSW5jbHVkZXMo
IjxKYXZhU2NyaXB0Q29yZS9KU0Rlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZS5oPiIpOwor
ICAgIEFkZFRvSW1wbEluY2x1ZGVzKCI8SmF2YVNjcmlwdENvcmUvU2xvdFZpc2l0b3JNYWNyb3Mu
aD4iKTsKICAgICBBZGRUb0ltcGxJbmNsdWRlcygiPEphdmFTY3JpcHRDb3JlL1N1YnNwYWNlSW5s
aW5lcy5oPiIpOwogICAgIHB1c2goQGltcGxDb250ZW50LCAiSlNDOjpJc29TdWJzcGFjZSogJHtj
bGFzc05hbWV9OjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pXG4iKTsKICAgICBwdXNoKEBp
bXBsQ29udGVudCwgIntcbiIpOwpAQCAtNDk2Nyw3ICs0OTY4LDEwIEBAIHN1YiBHZW5lcmF0ZUlt
cGxlbWVudGF0aW9uCiAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgYXV0byogc3BhY2UgPSBz
cGFjZXMubV9zdWJzcGFjZUZvciR7aW50ZXJmYWNlTmFtZX0uZ2V0KCk7XG4iKTsKICAgICBwdXNo
KEBpbXBsQ29udGVudCwgIklHTk9SRV9XQVJOSU5HU19CRUdJTihcInVucmVhY2hhYmxlLWNvZGVc
IilcbiIpOwogICAgIHB1c2goQGltcGxDb250ZW50LCAiSUdOT1JFX1dBUk5JTkdTX0JFR0lOKFwi
dGF1dG9sb2dpY2FsLWNvbXBhcmVcIilcbiIpOwotICAgIHB1c2goQGltcGxDb250ZW50LCAiICAg
IGlmICgmJHtjbGFzc05hbWV9Ojp2aXNpdE91dHB1dENvbnN0cmFpbnRzICE9ICZKU0M6OkpTQ2Vs
bDo6dmlzaXRPdXRwdXRDb25zdHJhaW50cylcbiIpOworICAgIHB1c2goQGltcGxDb250ZW50LCAi
ICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNs
b3RWaXNpdG9yJikgPSAke2NsYXNzTmFtZX06OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7XG4iKTsK
KyAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25z
dHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2
aXNpdE91dHB1dENvbnN0cmFpbnRzO1xuIik7CisgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAg
aWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWlu
dClcbiIpOworIyAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAoJiR7Y2xhc3NOYW1lfTo6
dmlzaXRPdXRwdXRDb25zdHJhaW50cyAhPSAmSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3Ry
YWludHMpXG4iKTsKICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgY2xpZW50RGF0YS5v
dXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTtcbiIpOwogICAgIHB1c2goQGlt
cGxDb250ZW50LCAiSUdOT1JFX1dBUk5JTkdTX0VORFxuIik7CiAgICAgcHVzaChAaW1wbENvbnRl
bnQsICJJR05PUkVfV0FSTklOR1NfRU5EXG4iKTsKQEAgLTQ5NzUsNyArNDk3OSw4IEBAIHN1YiBH
ZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ9XG5cbiIpOwog
CiAgICAgaWYgKCRuZWVkc1Zpc2l0Q2hpbGRyZW4pIHsKLSAgICAgICAgcHVzaChAaW1wbENvbnRl
bnQsICJ2b2lkICR7Y2xhc3NOYW1lfTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RW
aXNpdG9yJiB2aXNpdG9yKVxuIik7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAidGVtcGxh
dGU8dHlwZW5hbWUgVmlzaXRvcj5cbiIpOworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgInZv
aWQgJHtjbGFzc05hbWV9Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3Im
IHZpc2l0b3IpXG4iKTsKICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ7XG4iKTsKICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDwke2Ns
YXNzTmFtZX0qPihjZWxsKTtcbiIpOwogICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBB
U1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7XG4iKTsKQEAgLTUw
MDAsMTQgKzUwMDUsMTkgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICAgICAgICAg
IH0KICAgICAgICAgfQogICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIn1cblxuIik7CisgICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAiREVGSU5FX1ZJU0lUX0NISUxEUkVOKCR7Y2xhc3NOYW1l
fSk7XG5cbiIpOworCiAgICAgICAgIGlmICgkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMt
PntKU0N1c3RvbU1hcmtGdW5jdGlvbn0pIHsKLSAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50
LCAidm9pZCAke2NsYXNzTmFtZX06OnZpc2l0T3V0cHV0Q29uc3RyYWludHMoSlNDZWxsKiBjZWxs
LCBTbG90VmlzaXRvciYgdmlzaXRvcilcbiIpOworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRl
bnQsICJ0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPlxuIik7CisgICAgICAgICAgICBwdXNoKEBp
bXBsQ29udGVudCwgInZvaWQgJHtjbGFzc05hbWV9Ojp2aXNpdE91dHB1dENvbnN0cmFpbnRzKEpT
Q2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcilcbiIpOwogICAgICAgICAgICAgcHVzaChAaW1w
bENvbnRlbnQsICJ7XG4iKTsKICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGF1
dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8JHtjbGFzc05hbWV9Kj4oY2VsbCk7XG4iKTsKICAgICAg
ICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMo
dGhpc09iamVjdCwgaW5mbygpKTtcbiIpOwogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICIgICAgQmFzZTo6dmlzaXRPdXRwdXRDb25zdHJhaW50cyh0aGlzT2JqZWN0LCB2aXNpdG9yKTtc
biIpOwogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgdGhpc09iamVjdC0+dmlz
aXRBZGRpdGlvbmFsQ2hpbGRyZW4odmlzaXRvcik7XG4iKTsKICAgICAgICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAifVxuXG4iKTsKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAidGVt
cGxhdGUgdm9pZCAke2NsYXNzTmFtZX06OnZpc2l0T3V0cHV0Q29uc3RyYWludHMoSlNDZWxsKiwg
QWJzdHJhY3RTbG90VmlzaXRvciYpO1xuIik7CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgInRlbXBsYXRlIHZvaWQgJHtjbGFzc05hbWV9Ojp2aXNpdE91dHB1dENvbnN0cmFpbnRzKEpT
Q2VsbCosIFNsb3RWaXNpdG9yJik7XG4iKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtNTA0Miw3
ICs1MDUyLDcgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICB9CiAKICAgICBpZiAo
U2hvdWxkR2VuZXJhdGVXcmFwcGVyT3duZXJDb2RlKCRoYXNQYXJlbnQsICRpbnRlcmZhY2UpICYm
ICFHZXRDdXN0b21Jc1JlYWNoYWJsZSgkaW50ZXJmYWNlKSkgewotICAgICAgICBwdXNoKEBpbXBs
Q29udGVudCwgImJvb2wgSlMke2ludGVyZmFjZU5hbWV9T3duZXI6OmlzUmVhY2hhYmxlRnJvbU9w
YXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgU2xvdFZp
c2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pXG4iKTsKKyAgICAgICAgcHVzaChA
aW1wbENvbnRlbnQsICJib29sIEpTJHtpbnRlcmZhY2VOYW1lfU93bmVyOjppc1JlYWNoYWJsZUZy
b21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIEFi
c3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pXG4iKTsKICAg
ICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ7XG4iKTsKICAgICAgICAgIyBBbGwgQWN0aXZlRE9N
T2JqZWN0cyBpbXBsZW1lbnQgaGFzUGVuZGluZ0FjdGl2aXR5KCksIGJ1dCBub3QgYWxsIG9mIHRo
ZW0KICAgICAgICAgIyBpbmNyZW1lbnQgdGhlaXIgQysrIHJlZmVyZW5jZSBjb3VudHMgd2hlbiBo
YXNQZW5kaW5nQWN0aXZpdHkoKSBiZWNvbWVzCkBAIC02NDQxLDYgKzY0NTEsNyBAQCBzdWIgR2Vu
ZXJhdGVDYWxsYmFja0hlYWRlckNvbnRlbnQKICAgICAgICAgcHVzaChAJGNvbnRlbnRSZWYsICIg
ICAgYm9vbCBoYXNDYWxsYmFjaygpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fZGF0YSAmJiBtX2Rh
dGEtPmNhbGxiYWNrKCk7IH1cblxuIik7CiAgICAgfQogCisgICAgcHVzaChAJGNvbnRlbnRSZWYs
ICIgICAgdm9pZCB2aXNpdEpTRnVuY3Rpb24oSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJikgb3Zl
cnJpZGU7XG5cbiIpIGlmICRpbnRlcmZhY2VPckNhbGxiYWNrLT5leHRlbmRlZEF0dHJpYnV0ZXMt
PntJc1dlYWtDYWxsYmFja307CiAgICAgcHVzaChAJGNvbnRlbnRSZWYsICIgICAgdm9pZCB2aXNp
dEpTRnVuY3Rpb24oSlNDOjpTbG90VmlzaXRvciYpIG92ZXJyaWRlO1xuXG4iKSBpZiAkaW50ZXJm
YWNlT3JDYWxsYmFjay0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57SXNXZWFrQ2FsbGJhY2t9OwogCiAg
ICAgcHVzaChAJGNvbnRlbnRSZWYsICIgICAgJHtjYWxsYmFja0RhdGFUeXBlfSogbV9kYXRhO1xu
Iik7CkBAIC02NjMyLDYgKzY2NDMsMTAgQEAgc3ViIEdlbmVyYXRlQ2FsbGJhY2tJbXBsZW1lbnRh
dGlvbkNvbnRlbgogICAgIH0KIAogICAgIGlmICgkaW50ZXJmYWNlT3JDYWxsYmFjay0+ZXh0ZW5k
ZWRBdHRyaWJ1dGVzLT57SXNXZWFrQ2FsbGJhY2t9KSB7CisgICAgICAgIHB1c2goQCRjb250ZW50
UmVmLCAidm9pZCAke2NsYXNzTmFtZX06OnZpc2l0SlNGdW5jdGlvbihKU0M6OkFic3RyYWN0U2xv
dFZpc2l0b3ImIHZpc2l0b3IpXG4iKTsKKyAgICAgICAgcHVzaChAJGNvbnRlbnRSZWYsICJ7XG4i
KTsKKyAgICAgICAgcHVzaChAJGNvbnRlbnRSZWYsICIgICAgbV9kYXRhLT52aXNpdEpTRnVuY3Rp
b24odmlzaXRvcik7XG4iKTsKKyAgICAgICAgcHVzaChAJGNvbnRlbnRSZWYsICJ9XG5cbiIpOwog
ICAgICAgICBwdXNoKEAkY29udGVudFJlZiwgInZvaWQgJHtjbGFzc05hbWV9Ojp2aXNpdEpTRnVu
Y3Rpb24oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcilcbiIpOwogICAgICAgICBwdXNoKEAkY29u
dGVudFJlZiwgIntcbiIpOwogICAgICAgICBwdXNoKEAkY29udGVudFJlZiwgIiAgICBtX2RhdGEt
PnZpc2l0SlNGdW5jdGlvbih2aXNpdG9yKTtcbiIpOwpAQCAtNjc0Myw2ICs2NzU4LDcgQEAgc3Vi
IEdlbmVyYXRlSXRlcmFibGVEZWZpbml0aW9uCiAgICAgbXkgJHZpc2libGVJbnRlcmZhY2VOYW1l
ID0gJGNvZGVHZW5lcmF0b3ItPkdldFZpc2libGVJbnRlcmZhY2VOYW1lKCRpbnRlcmZhY2UpOwog
CiAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIkpTRE9NSXRlcmF0b3IuaCIpOworICAgIEFkZFRvSW1w
bEluY2x1ZGVzKCI8SmF2YVNjcmlwdENvcmUvU2xvdFZpc2l0b3JNYWNyb3MuaD4iKTsKIAogICAg
IHJldHVybiB1bmxlc3MgSXNLZXlWYWx1ZUl0ZXJhYmxlSW50ZXJmYWNlKCRpbnRlcmZhY2UpOwog
CkBAIC02Nzg2LDcgKzY4MDIsOSBAQCBwdWJsaWM6CiAgICAgICAgIGF1dG8qIHNwYWNlID0gc3Bh
Y2VzLm1fc3Vic3BhY2VGb3Ike2l0ZXJhdG9yTmFtZX0uZ2V0KCk7CiBJR05PUkVfV0FSTklOR1Nf
QkVHSU4oXCJ1bnJlYWNoYWJsZS1jb2RlXCIpCiBJR05PUkVfV0FSTklOR1NfQkVHSU4oXCJ0YXV0
b2xvZ2ljYWwtY29tcGFyZVwiKQotICAgICAgICBpZiAoJiR7aXRlcmF0b3JOYW1lfTo6dmlzaXRP
dXRwdXRDb25zdHJhaW50cyAhPSAmSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHMp
CisgICAgICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBK
U0M6OlNsb3RWaXNpdG9yJikgPSAke2l0ZXJhdG9yTmFtZX06OnZpc2l0T3V0cHV0Q29uc3RyYWlu
dHM7CisgICAgICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlND
ZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3Ry
YWludHM7CisgICAgICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNp
dE91dHB1dENvbnN0cmFpbnQpCiAgICAgICAgICAgICBjbGllbnREYXRhLm91dHB1dENvbnN0cmFp
bnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOwogSUdOT1JFX1dBUk5JTkdTX0VORAogSUdOT1JFX1dB
Uk5JTkdTX0VORApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTRE9NV2luZG93LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNET01XaW5kb3cuY3BwCShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNET01XaW5kb3cuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00NSw2ICs0NSw3IEBACiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSGVh
cEFuYWx5emVyLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNDSW5saW5lcy5oPgogI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTRGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLmg+
CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvU2xvdFZpc2l0b3JNYWNyb3MuaD4KICNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9TdWJzcGFjZUlubGluZXMuaD4KICNpbmNsdWRlIDx3dGYvR2V0UHRy
Lmg+CiAjaW5jbHVkZSA8d3RmL1BvaW50ZXJQcmVwYXJhdGlvbnMuaD4KQEAgLTUxOSw3ICs1MjAs
OSBAQCBKU0M6Oklzb1N1YnNwYWNlKiBKU0RPTVdpbmRvdzo6c3Vic3BhY2VGCiAgICAgYXV0byog
c3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvckRPTVdpbmRvdy5nZXQoKTsKIElHTk9SRV9XQVJO
SU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCiBJR05PUkVfV0FSTklOR1NfQkVHSU4oInRh
dXRvbG9naWNhbC1jb21wYXJlIikKLSAgICBpZiAoJkpTRE9NV2luZG93Ojp2aXNpdE91dHB1dENv
bnN0cmFpbnRzICE9ICZKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50cykKKyAgICB2
b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90Vmlz
aXRvciYpID0gSlNET01XaW5kb3c6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAgdm9pZCAo
KmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNp
dG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKKyAgICBpZiAobXlW
aXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQogICAg
ICAgICBjbGllbnREYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOwog
SUdOT1JFX1dBUk5JTkdTX0VORAogSUdOT1JFX1dBUk5JTkdTX0VORApJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTRGVkaWNhdGVkV29ya2VyR2xvYmFsU2Nv
cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU0RlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlLmNwcAkocmV2aXNpb24gMjczMTE5KQor
KysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTRGVkaWNhdGVkV29y
a2VyR2xvYmFsU2NvcGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw2ICszNSw3IEBACiAjaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvSGVhcEFuYWx5emVyLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvSlNDSW5saW5lcy5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTRGVzdHJ1Y3Rp
YmxlT2JqZWN0SGVhcENlbGxUeXBlLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvU2xvdFZp
c2l0b3JNYWNyb3MuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9TdWJzcGFjZUlubGluZXMu
aD4KICNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CiAjaW5jbHVkZSA8d3RmL1BvaW50ZXJQcmVwYXJh
dGlvbnMuaD4KQEAgLTE3MSw3ICsxNzIsOSBAQCBKU0M6Oklzb1N1YnNwYWNlKiBKU0RlZGljYXRl
ZFdvcmtlckdsb2JhCiAgICAgYXV0byogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvckRlZGlj
YXRlZFdvcmtlckdsb2JhbFNjb3BlLmdldCgpOwogSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJl
YWNoYWJsZS1jb2RlIikKIElHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBh
cmUiKQotICAgIGlmICgmSlNEZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZTo6dmlzaXRPdXRwdXRD
b25zdHJhaW50cyAhPSAmSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHMpCisgICAg
dm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZp
c2l0b3ImKSA9IEpTRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGU6OnZpc2l0T3V0cHV0Q29uc3Ry
YWludHM7CisgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0Nl
bGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJh
aW50czsKKyAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRw
dXRDb25zdHJhaW50KQogICAgICAgICBjbGllbnREYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMo
KS5hcHBlbmQoc3BhY2UpOwogSUdOT1JFX1dBUk5JTkdTX0VORAogSUdOT1JFX1dBUk5JTkdTX0VO
RApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTRXhwb3Nl
ZFRvV29ya2VyQW5kV2luZG93LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNFeHBvc2VkVG9Xb3JrZXJBbmRXaW5kb3cuY3BwCShyZXZp
c2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNFeHBvc2VkVG9Xb3JrZXJBbmRXaW5kb3cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw2ICsz
OCw3IEBACiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNDSW5saW5lcy5oPgogI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL0pTRGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLmg+CiAjaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvT2JqZWN0Q29uc3RydWN0b3IuaD4KKyNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9TbG90VmlzaXRvck1hY3Jvcy5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L1N1YnNwYWNlSW5saW5lcy5oPgogI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KICNpbmNsdWRlIDx3
dGYvUG9pbnRlclByZXBhcmF0aW9ucy5oPgpAQCAtMjU3LDcgKzI1OCw5IEBAIEpTQzo6SXNvU3Vi
c3BhY2UqIEpTRXhwb3NlZFRvV29ya2VyQW5kV2kKICAgICBhdXRvKiBzcGFjZSA9IHNwYWNlcy5t
X3N1YnNwYWNlRm9yRXhwb3NlZFRvV29ya2VyQW5kV2luZG93LmdldCgpOwogSUdOT1JFX1dBUk5J
TkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKIElHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1
dG9sb2dpY2FsLWNvbXBhcmUiKQotICAgIGlmICgmSlNFeHBvc2VkVG9Xb3JrZXJBbmRXaW5kb3c6
OnZpc2l0T3V0cHV0Q29uc3RyYWludHMgIT0gJkpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0
cmFpbnRzKQorICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwq
LCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0V4cG9zZWRUb1dvcmtlckFuZFdpbmRvdzo6dmlzaXRP
dXRwdXRDb25zdHJhaW50czsKKyAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50
KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91
dHB1dENvbnN0cmFpbnRzOworICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0Nl
bGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCiAgICAgICAgIGNsaWVudERhdGEub3V0cHV0Q29uc3Ry
YWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7CiBJR05PUkVfV0FSTklOR1NfRU5ECiBJR05PUkVf
V0FSTklOR1NfRU5ECkBAIC0yNzMsNyArMjc2LDcgQEAgdm9pZCBKU0V4cG9zZWRUb1dvcmtlckFu
ZFdpbmRvdzo6YW5hbHl6ZQogICAgIEJhc2U6OmFuYWx5emVIZWFwKGNlbGwsIGFuYWx5emVyKTsK
IH0KIAotYm9vbCBKU0V4cG9zZWRUb1dvcmtlckFuZFdpbmRvd093bmVyOjppc1JlYWNoYWJsZUZy
b21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIFNs
b3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQorYm9vbCBKU0V4cG9zZWRU
b1dvcmtlckFuZFdpbmRvd093bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6Okhh
bmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIEFic3RyYWN0U2xvdFZpc2l0b3ImIHZp
c2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCiB7CiAgICAgVU5VU0VEX1BBUkFNKGhhbmRsZSk7
CiAgICAgVU5VU0VEX1BBUkFNKHZpc2l0b3IpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTRXhwb3NlZFRvV29ya2VyQW5kV2luZG93LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTRXhwb3NlZFRv
V29ya2VyQW5kV2luZG93LmgJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU0V4cG9zZWRUb1dvcmtlckFuZFdpbmRvdy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC02Niw3ICs2Niw3IEBAIHByb3RlY3RlZDoKIAogY2xhc3MgSlNFeHBvc2Vk
VG9Xb3JrZXJBbmRXaW5kb3dPd25lciBmaW5hbCA6IHB1YmxpYyBKU0M6OldlYWtIYW5kbGVPd25l
ciB7CiBwdWJsaWM6Ci0gICAgYm9vbCBpc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6Okhh
bmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0LCBKU0M6OlNsb3RWaXNpdG9yJiwgY29u
c3QgY2hhcioqKSBmaW5hbDsKKyAgICBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpT
Qzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6QWJzdHJhY3RTbG90
VmlzaXRvciYsIGNvbnN0IGNoYXIqKikgZmluYWw7CiAgICAgdm9pZCBmaW5hbGl6ZShKU0M6Okhh
bmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0KSBmaW5hbDsKIH07CiAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1BhaW50V29ya2xldEdsb2Jh
bFNjb3BlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNQYWludFdvcmtsZXRHbG9iYWxTY29wZS5jcHAJKHJldmlzaW9uIDI3MzExOSkK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1BhaW50V29ya2xl
dEdsb2JhbFNjb3BlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL0hlYXBBbmFseXplci5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL0pTQ0lubGluZXMuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0Rlc3RydWN0aWJs
ZU9iamVjdEhlYXBDZWxsVHlwZS5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1Nsb3RWaXNp
dG9yTWFjcm9zLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvU3Vic3BhY2VJbmxpbmVzLmg+
CiAjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgogI2luY2x1ZGUgPHd0Zi9Qb2ludGVyUHJlcGFyYXRp
b25zLmg+CkBAIC0xNzEsNyArMTcyLDkgQEAgSlNDOjpJc29TdWJzcGFjZSogSlNQYWludFdvcmts
ZXRHbG9iYWxTYwogICAgIGF1dG8qIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JQYWludFdv
cmtsZXRHbG9iYWxTY29wZS5nZXQoKTsKIElHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFi
bGUtY29kZSIpCiBJR05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikK
LSAgICBpZiAoJkpTUGFpbnRXb3JrbGV0R2xvYmFsU2NvcGU6OnZpc2l0T3V0cHV0Q29uc3RyYWlu
dHMgIT0gJkpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzKQorICAgIHZvaWQgKCpt
eVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikg
PSBKU1BhaW50V29ya2xldEdsb2JhbFNjb3BlOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOworICAg
IHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpT
bG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAg
aWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWlu
dCkKICAgICAgICAgY2xpZW50RGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNw
YWNlKTsKIElHTk9SRV9XQVJOSU5HU19FTkQKIElHTk9SRV9XQVJOSU5HU19FTkQKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1NlcnZpY2VXb3JrZXJHbG9i
YWxTY29wZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTU2VydmljZVdvcmtlckdsb2JhbFNjb3BlLmNwcAkocmV2aXNpb24gMjczMTE5
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTU2VydmljZVdv
cmtlckdsb2JhbFNjb3BlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsNiArMzUsNyBAQAogI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL0hlYXBBbmFseXplci5oPgogI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL0pTQ0lubGluZXMuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0Rlc3RydWN0
aWJsZU9iamVjdEhlYXBDZWxsVHlwZS5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1Nsb3RW
aXNpdG9yTWFjcm9zLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvU3Vic3BhY2VJbmxpbmVz
Lmg+CiAjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgogI2luY2x1ZGUgPHd0Zi9Qb2ludGVyUHJlcGFy
YXRpb25zLmg+CkBAIC0xNzEsNyArMTcyLDkgQEAgSlNDOjpJc29TdWJzcGFjZSogSlNTZXJ2aWNl
V29ya2VyR2xvYmFsUwogICAgIGF1dG8qIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JTZXJ2
aWNlV29ya2VyR2xvYmFsU2NvcGUuZ2V0KCk7CiBJR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVh
Y2hhYmxlLWNvZGUiKQogSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFy
ZSIpCi0gICAgaWYgKCZKU1NlcnZpY2VXb3JrZXJHbG9iYWxTY29wZTo6dmlzaXRPdXRwdXRDb25z
dHJhaW50cyAhPSAmSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHMpCisgICAgdm9p
ZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0
b3ImKSA9IEpTU2VydmljZVdvcmtlckdsb2JhbFNjb3BlOjp2aXNpdE91dHB1dENvbnN0cmFpbnRz
OworICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwg
SlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7
CisgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29u
c3RyYWludCkKICAgICAgICAgY2xpZW50RGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBw
ZW5kKHNwYWNlKTsKIElHTk9SRV9XQVJOSU5HU19FTkQKIElHTk9SRV9XQVJOSU5HU19FTkQKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDRVJlYWN0
aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdENFUmVhY3Rpb25zLmNwcAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENFUmVhY3Rpb25zLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDEsNiArNDEsNyBAQAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L0hlYXBBbmFseXplci5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTQ0lubGluZXMuaD4K
ICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0Rlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlw
ZS5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1Nsb3RWaXNpdG9yTWFjcm9zLmg+CiAjaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvU3Vic3BhY2VJbmxpbmVzLmg+CiAjaW5jbHVkZSA8d3RmL0dl
dFB0ci5oPgogI2luY2x1ZGUgPHd0Zi9Qb2ludGVyUHJlcGFyYXRpb25zLmg+CkBAIC00NTEsNyAr
NDUyLDkgQEAgSlNDOjpJc29TdWJzcGFjZSogSlNUZXN0Q0VSZWFjdGlvbnM6OnN1YgogICAgIGF1
dG8qIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0Q0VSZWFjdGlvbnMuZ2V0KCk7CiBJ
R05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQogSUdOT1JFX1dBUk5JTkdT
X0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgaWYgKCZKU1Rlc3RDRVJlYWN0aW9u
czo6dmlzaXRPdXRwdXRDb25zdHJhaW50cyAhPSAmSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29u
c3RyYWludHMpCisgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2Vs
bCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdENFUmVhY3Rpb25zOjp2aXNpdE91dHB1dENv
bnN0cmFpbnRzOworICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6
SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29u
c3RyYWludHM7CisgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0
T3V0cHV0Q29uc3RyYWludCkKICAgICAgICAgY2xpZW50RGF0YS5vdXRwdXRDb25zdHJhaW50U3Bh
Y2VzKCkuYXBwZW5kKHNwYWNlKTsKIElHTk9SRV9XQVJOSU5HU19FTkQKIElHTk9SRV9XQVJOSU5H
U19FTkQKQEAgLTQ2Nyw3ICs0NzAsNyBAQCB2b2lkIEpTVGVzdENFUmVhY3Rpb25zOjphbmFseXpl
SGVhcChKU0NlCiAgICAgQmFzZTo6YW5hbHl6ZUhlYXAoY2VsbCwgYW5hbHl6ZXIpOwogfQogCi1i
b29sIEpTVGVzdENFUmVhY3Rpb25zT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpT
Qzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgU2xvdFZpc2l0b3ImIHZpc2l0
b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCitib29sIEpTVGVzdENFUmVhY3Rpb25zT3duZXI6Omlz
UmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxl
LCB2b2lkKiwgQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNv
bikKIHsKICAgICBVTlVTRURfUEFSQU0oaGFuZGxlKTsKICAgICBVTlVTRURfUEFSQU0odmlzaXRv
cik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
Q0VSZWFjdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0Q0VSZWFjdGlvbnMuaAkocmV2aXNpb24gMjczMTE5KQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENFUmVhY3Rpb25zLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTY1LDcgKzY1LDcgQEAgcHJvdGVjdGVkOgogCiBjbGFzcyBKU1Rl
c3RDRVJlYWN0aW9uc093bmVyIGZpbmFsIDogcHVibGljIEpTQzo6V2Vha0hhbmRsZU93bmVyIHsK
IHB1YmxpYzoKLSAgICBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxl
PEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6U2xvdFZpc2l0b3ImLCBjb25zdCBj
aGFyKiopIGZpbmFsOworICAgIGJvb2wgaXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpI
YW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCwgSlNDOjpBYnN0cmFjdFNsb3RWaXNp
dG9yJiwgY29uc3QgY2hhcioqKSBmaW5hbDsKICAgICB2b2lkIGZpbmFsaXplKEpTQzo6SGFuZGxl
PEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQpIGZpbmFsOwogfTsKIApJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENFUmVhY3Rpb25zU3RyaW5n
aWZpZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyLmNwcAkocmV2aXNpb24gMjczMTE5
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENFUmVh
Y3Rpb25zU3RyaW5naWZpZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw2ICszNyw3IEBACiAj
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSGVhcEFuYWx5emVyLmg+CiAjaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvSlNDSW5saW5lcy5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTRGVzdHJ1
Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvU2xv
dFZpc2l0b3JNYWNyb3MuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9TdWJzcGFjZUlubGlu
ZXMuaD4KICNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CiAjaW5jbHVkZSA8d3RmL1BvaW50ZXJQcmVw
YXJhdGlvbnMuaD4KQEAgLTI3Niw3ICsyNzcsOSBAQCBKU0M6Oklzb1N1YnNwYWNlKiBKU1Rlc3RD
RVJlYWN0aW9uc1N0cmluCiAgICAgYXV0byogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRl
c3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyLmdldCgpOwogSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1
bnJlYWNoYWJsZS1jb2RlIikKIElHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNv
bXBhcmUiKQotICAgIGlmICgmSlNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllcjo6dmlzaXRPdXRw
dXRDb25zdHJhaW50cyAhPSAmSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHMpCisg
ICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xv
dFZpc2l0b3ImKSA9IEpTVGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXI6OnZpc2l0T3V0cHV0Q29u
c3RyYWludHM7CisgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpK
U0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25z
dHJhaW50czsKKyAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRP
dXRwdXRDb25zdHJhaW50KQogICAgICAgICBjbGllbnREYXRhLm91dHB1dENvbnN0cmFpbnRTcGFj
ZXMoKS5hcHBlbmQoc3BhY2UpOwogSUdOT1JFX1dBUk5JTkdTX0VORAogSUdOT1JFX1dBUk5JTkdT
X0VORApAQCAtMjkyLDcgKzI5NSw3IEBAIHZvaWQgSlNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmll
cjo6YW5hbHkKICAgICBCYXNlOjphbmFseXplSGVhcChjZWxsLCBhbmFseXplcik7CiB9CiAKLWJv
b2wgSlNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllck93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFx
dWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIFNsb3RWaXNp
dG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQorYm9vbCBKU1Rlc3RDRVJlYWN0aW9u
c1N0cmluZ2lmaWVyT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxl
PEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRv
ciwgY29uc3QgY2hhcioqIHJlYXNvbikKIHsKICAgICBVTlVTRURfUEFSQU0oaGFuZGxlKTsKICAg
ICBVTlVTRURfUEFSQU0odmlzaXRvcik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDRVJlYWN0
aW9uc1N0cmluZ2lmaWVyLmgJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTY1LDcgKzY1LDcgQEAgcHJvdGVjdGVkOgogCiBjbGFzcyBKU1Rlc3RD
RVJlYWN0aW9uc1N0cmluZ2lmaWVyT3duZXIgZmluYWwgOiBwdWJsaWMgSlNDOjpXZWFrSGFuZGxl
T3duZXIgewogcHVibGljOgotICAgIGJvb2wgaXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlND
OjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCwgSlNDOjpTbG90VmlzaXRvciYs
IGNvbnN0IGNoYXIqKikgZmluYWw7CisgICAgYm9vbCBpc1JlYWNoYWJsZUZyb21PcGFxdWVSb290
cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0LCBKU0M6OkFic3RyYWN0
U2xvdFZpc2l0b3ImLCBjb25zdCBjaGFyKiopIGZpbmFsOwogICAgIHZvaWQgZmluYWxpemUoSlND
OjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCkgZmluYWw7CiB9OwogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q2FsbFRyYWNl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdENhbGxUcmFjZXIuY3BwCShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q2FsbFRyYWNlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQ0LDYgKzQ0LDcgQEAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9IZWFw
QW5hbHl6ZXIuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0NJbmxpbmVzLmg+CiAjaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvSlNEZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUuaD4K
KyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9TbG90VmlzaXRvck1hY3Jvcy5oPgogI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL1N1YnNwYWNlSW5saW5lcy5oPgogI2luY2x1ZGUgPHd0Zi9HZXRQdHIu
aD4KICNpbmNsdWRlIDx3dGYvUG9pbnRlclByZXBhcmF0aW9ucy5oPgpAQCAtNTM3LDcgKzUzOCw5
IEBAIEpTQzo6SXNvU3Vic3BhY2UqIEpTVGVzdENhbGxUcmFjZXI6OnN1YnMKICAgICBhdXRvKiBz
cGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdENhbGxUcmFjZXIuZ2V0KCk7CiBJR05PUkVf
V0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQogSUdOT1JFX1dBUk5JTkdTX0JFR0lO
KCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgaWYgKCZKU1Rlc3RDYWxsVHJhY2VyOjp2aXNp
dE91dHB1dENvbnN0cmFpbnRzICE9ICZKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50
cykKKyAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlND
OjpTbG90VmlzaXRvciYpID0gSlNUZXN0Q2FsbFRyYWNlcjo6dmlzaXRPdXRwdXRDb25zdHJhaW50
czsKKyAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCos
IEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRz
OworICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENv
bnN0cmFpbnQpCiAgICAgICAgIGNsaWVudERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFw
cGVuZChzcGFjZSk7CiBJR05PUkVfV0FSTklOR1NfRU5ECiBJR05PUkVfV0FSTklOR1NfRU5ECkBA
IC01NTMsNyArNTU2LDcgQEAgdm9pZCBKU1Rlc3RDYWxsVHJhY2VyOjphbmFseXplSGVhcChKU0Nl
bAogICAgIEJhc2U6OmFuYWx5emVIZWFwKGNlbGwsIGFuYWx5emVyKTsKIH0KIAotYm9vbCBKU1Rl
c3RDYWxsVHJhY2VyT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxl
PEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgU2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0
IGNoYXIqKiByZWFzb24pCitib29sIEpTVGVzdENhbGxUcmFjZXJPd25lcjo6aXNSZWFjaGFibGVG
cm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBB
YnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQogewogICAg
IFVOVVNFRF9QQVJBTShoYW5kbGUpOwogICAgIFVOVVNFRF9QQVJBTSh2aXNpdG9yKTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDYWxsVHJhY2Vy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdENhbGxUcmFjZXIuaAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENhbGxUcmFjZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtNjUsNyArNjUsNyBAQCBwcm90ZWN0ZWQ6CiAKIGNsYXNzIEpTVGVzdENhbGxUcmFjZXJP
d25lciBmaW5hbCA6IHB1YmxpYyBKU0M6OldlYWtIYW5kbGVPd25lciB7CiBwdWJsaWM6Ci0gICAg
Ym9vbCBpc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+
LCB2b2lkKiBjb250ZXh0LCBKU0M6OlNsb3RWaXNpdG9yJiwgY29uc3QgY2hhcioqKSBmaW5hbDsK
KyAgICBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5r
bm93bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYsIGNvbnN0IGNo
YXIqKikgZmluYWw7CiAgICAgdm9pZCBmaW5hbGl6ZShKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+
LCB2b2lkKiBjb250ZXh0KSBmaW5hbDsKIH07CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMjczMTE5
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENsYXNz
V2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQs
NyBAQAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0hlYXBBbmFseXplci5oPgogI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL0pTQ0lubGluZXMuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9K
U0Rlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZS5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL1Nsb3RWaXNpdG9yTWFjcm9zLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvU3Vic3Bh
Y2VJbmxpbmVzLmg+CiAjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgogI2luY2x1ZGUgPHd0Zi9Qb2lu
dGVyUHJlcGFyYXRpb25zLmg+CkBAIC0xNzgsNyArMTc5LDkgQEAgSlNDOjpJc29TdWJzcGFjZSog
SlNUZXN0Q2xhc3NXaXRoSlNCdWlsdAogICAgIGF1dG8qIHNwYWNlID0gc3BhY2VzLm1fc3Vic3Bh
Y2VGb3JUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IuZ2V0KCk7CiBJR05PUkVfV0FS
TklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQogSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0
YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgaWYgKCZKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5D
b25zdHJ1Y3Rvcjo6dmlzaXRPdXRwdXRDb25zdHJhaW50cyAhPSAmSlNDOjpKU0NlbGw6OnZpc2l0
T3V0cHV0Q29uc3RyYWludHMpCisgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShK
U0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdENsYXNzV2l0aEpTQnVpbHRp
bkNvbnN0cnVjdG9yOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOworICAgIHZvaWQgKCpqc0NlbGxW
aXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0g
SlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAgaWYgKG15VmlzaXRPdXRw
dXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKICAgICAgICAgY2xp
ZW50RGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKIElHTk9SRV9X
QVJOSU5HU19FTkQKIElHTk9SRV9XQVJOSU5HU19FTkQKQEAgLTE5NCw3ICsxOTcsNyBAQCB2b2lk
IEpTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yCiAgICAgQmFzZTo6YW5hbHl6ZUhl
YXAoY2VsbCwgYW5hbHl6ZXIpOwogfQogCi1ib29sIEpTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNv
bnN0cnVjdG9yT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpT
Qzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgU2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNo
YXIqKiByZWFzb24pCitib29sIEpTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yT3du
ZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4g
aGFuZGxlLCB2b2lkKiwgQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioq
IHJlYXNvbikKIHsKICAgICBVTlVTRURfUEFSQU0oaGFuZGxlKTsKICAgICBVTlVTRURfUEFSQU0o
dmlzaXRvcik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q2xhc3NXaXRoSlNCdWls
dGluQ29uc3RydWN0b3IuaAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9y
LmgJKHdvcmtpbmcgY29weSkKQEAgLTY1LDcgKzY1LDcgQEAgcHJvdGVjdGVkOgogCiBjbGFzcyBK
U1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvck93bmVyIGZpbmFsIDogcHVibGljIEpT
Qzo6V2Vha0hhbmRsZU93bmVyIHsKIHB1YmxpYzoKLSAgICBib29sIGlzUmVhY2hhYmxlRnJvbU9w
YXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6
U2xvdFZpc2l0b3ImLCBjb25zdCBjaGFyKiopIGZpbmFsOworICAgIGJvb2wgaXNSZWFjaGFibGVG
cm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCwg
SlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiwgY29uc3QgY2hhcioqKSBmaW5hbDsKICAgICB2b2lk
IGZpbmFsaXplKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQpIGZpbmFs
OwogfTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdENvbmRpdGlvbmFsSW5jbHVkZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDb25kaXRpb25hbEluY2x1ZGVzLmNwcAko
cmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdENvbmRpdGlvbmFsSW5jbHVkZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw2
ICszNiw3IEBACiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSGVhcEFuYWx5emVyLmg+CiAjaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvSlNDSW5saW5lcy5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL0pTRGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLmg+CisjaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvU2xvdFZpc2l0b3JNYWNyb3MuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9T
dWJzcGFjZUlubGluZXMuaD4KICNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CiAjaW5jbHVkZSA8d3Rm
L1BvaW50ZXJQcmVwYXJhdGlvbnMuaD4KQEAgLTgwNCw3ICs4MDUsOSBAQCBKU0M6Oklzb1N1YnNw
YWNlKiBKU1Rlc3RDb25kaXRpb25hbEluY2x1CiAgICAgYXV0byogc3BhY2UgPSBzcGFjZXMubV9z
dWJzcGFjZUZvclRlc3RDb25kaXRpb25hbEluY2x1ZGVzLmdldCgpOwogSUdOT1JFX1dBUk5JTkdT
X0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKIElHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9s
b2dpY2FsLWNvbXBhcmUiKQotICAgIGlmICgmSlNUZXN0Q29uZGl0aW9uYWxJbmNsdWRlczo6dmlz
aXRPdXRwdXRDb25zdHJhaW50cyAhPSAmSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWlu
dHMpCisgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpT
Qzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdENvbmRpdGlvbmFsSW5jbHVkZXM6OnZpc2l0T3V0cHV0
Q29uc3RyYWludHM7CisgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlND
OjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRD
b25zdHJhaW50czsKKyAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlz
aXRPdXRwdXRDb25zdHJhaW50KQogICAgICAgICBjbGllbnREYXRhLm91dHB1dENvbnN0cmFpbnRT
cGFjZXMoKS5hcHBlbmQoc3BhY2UpOwogSUdOT1JFX1dBUk5JTkdTX0VORAogSUdOT1JFX1dBUk5J
TkdTX0VORApAQCAtODIwLDcgKzgyMyw3IEBAIHZvaWQgSlNUZXN0Q29uZGl0aW9uYWxJbmNsdWRl
czo6YW5hbHl6ZUgKICAgICBCYXNlOjphbmFseXplSGVhcChjZWxsLCBhbmFseXplcik7CiB9CiAK
LWJvb2wgSlNUZXN0Q29uZGl0aW9uYWxJbmNsdWRlc093bmVyOjppc1JlYWNoYWJsZUZyb21PcGFx
dWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIFNsb3RWaXNp
dG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQorYm9vbCBKU1Rlc3RDb25kaXRpb25h
bEluY2x1ZGVzT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpT
Qzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvciwg
Y29uc3QgY2hhcioqIHJlYXNvbikKIHsKICAgICBVTlVTRURfUEFSQU0oaGFuZGxlKTsKICAgICBV
TlVTRURfUEFSQU0odmlzaXRvcik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0Q29uZGl0aW9uYWxJbmNsdWRlcy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDb25kaXRpb25hbElu
Y2x1ZGVzLmgJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RDb25kaXRpb25hbEluY2x1ZGVzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTc4LDcgKzc4LDcgQEAgcHJvdGVjdGVkOgogCiBjbGFzcyBKU1Rlc3RDb25kaXRpb25hbElu
Y2x1ZGVzT3duZXIgZmluYWwgOiBwdWJsaWMgSlNDOjpXZWFrSGFuZGxlT3duZXIgewogcHVibGlj
OgotICAgIGJvb2wgaXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpV
bmtub3duPiwgdm9pZCogY29udGV4dCwgSlNDOjpTbG90VmlzaXRvciYsIGNvbnN0IGNoYXIqKikg
ZmluYWw7CisgICAgYm9vbCBpc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxK
U0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0LCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImLCBj
b25zdCBjaGFyKiopIGZpbmFsOwogICAgIHZvaWQgZmluYWxpemUoSlNDOjpIYW5kbGU8SlNDOjpV
bmtub3duPiwgdm9pZCogY29udGV4dCkgZmluYWw7CiB9OwogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q29uZGl0aW9uYWxseVJlYWRXcml0ZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdENvbmRpdGlvbmFsbHlSZWFkV3JpdGUuY3BwCShyZXZpc2lvbiAyNzMxMTkpCisrKyBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q29uZGl0aW9uYWxs
eVJlYWRXcml0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyLDYgKzQyLDcgQEAKICNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9IZWFwQW5hbHl6ZXIuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9KU0NJbmxpbmVzLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNEZXN0cnVjdGlibGVP
YmplY3RIZWFwQ2VsbFR5cGUuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9TbG90VmlzaXRv
ck1hY3Jvcy5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1N1YnNwYWNlSW5saW5lcy5oPgog
I2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KICNpbmNsdWRlIDx3dGYvUG9pbnRlclByZXBhcmF0aW9u
cy5oPgpAQCAtNjE4LDcgKzYxOSw5IEBAIEpTQzo6SXNvU3Vic3BhY2UqIEpTVGVzdENvbmRpdGlv
bmFsbHlSZWEKICAgICBhdXRvKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdENvbmRp
dGlvbmFsbHlSZWFkV3JpdGUuZ2V0KCk7CiBJR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hh
YmxlLWNvZGUiKQogSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIp
Ci0gICAgaWYgKCZKU1Rlc3RDb25kaXRpb25hbGx5UmVhZFdyaXRlOjp2aXNpdE91dHB1dENvbnN0
cmFpbnRzICE9ICZKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50cykKKyAgICB2b2lk
ICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRv
ciYpID0gSlNUZXN0Q29uZGl0aW9uYWxseVJlYWRXcml0ZTo6dmlzaXRPdXRwdXRDb25zdHJhaW50
czsKKyAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCos
IEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRz
OworICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENv
bnN0cmFpbnQpCiAgICAgICAgIGNsaWVudERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFw
cGVuZChzcGFjZSk7CiBJR05PUkVfV0FSTklOR1NfRU5ECiBJR05PUkVfV0FSTklOR1NfRU5ECkBA
IC02MzQsNyArNjM3LDcgQEAgdm9pZCBKU1Rlc3RDb25kaXRpb25hbGx5UmVhZFdyaXRlOjphbmFs
eQogICAgIEJhc2U6OmFuYWx5emVIZWFwKGNlbGwsIGFuYWx5emVyKTsKIH0KIAotYm9vbCBKU1Rl
c3RDb25kaXRpb25hbGx5UmVhZFdyaXRlT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3Rz
KEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgU2xvdFZpc2l0b3ImIHZp
c2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCitib29sIEpTVGVzdENvbmRpdGlvbmFsbHlSZWFk
V3JpdGVPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpV
bmtub3duPiBoYW5kbGUsIHZvaWQqLCBBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25z
dCBjaGFyKiogcmVhc29uKQogewogICAgIFVOVVNFRF9QQVJBTShoYW5kbGUpOwogICAgIFVOVVNF
RF9QQVJBTSh2aXNpdG9yKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RDb25kaXRpb25hbGx5UmVhZFdyaXRlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENvbmRpdGlvbmFsbHlS
ZWFkV3JpdGUuaAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdENvbmRpdGlvbmFsbHlSZWFkV3JpdGUuaAkod29ya2luZyBj
b3B5KQpAQCAtNjcsNyArNjcsNyBAQCBwcm90ZWN0ZWQ6CiAKIGNsYXNzIEpTVGVzdENvbmRpdGlv
bmFsbHlSZWFkV3JpdGVPd25lciBmaW5hbCA6IHB1YmxpYyBKU0M6OldlYWtIYW5kbGVPd25lciB7
CiBwdWJsaWM6Ci0gICAgYm9vbCBpc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRs
ZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0LCBKU0M6OlNsb3RWaXNpdG9yJiwgY29uc3Qg
Y2hhcioqKSBmaW5hbDsKKyAgICBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6
SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6QWJzdHJhY3RTbG90Vmlz
aXRvciYsIGNvbnN0IGNoYXIqKikgZmluYWw7CiAgICAgdm9pZCBmaW5hbGl6ZShKU0M6OkhhbmRs
ZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0KSBmaW5hbDsKIH07CiAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RET01KSVQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RE
T01KSVQuY3BwCShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0RE9NSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDgsNiAr
NDgsNyBAQAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0hlYXBBbmFseXplci5oPgogI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL0pTQ0lubGluZXMuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9KU0Rlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZS5oPgorI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL1Nsb3RWaXNpdG9yTWFjcm9zLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvU3Vi
c3BhY2VJbmxpbmVzLmg+CiAjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgogI2luY2x1ZGUgPHd0Zi9Q
b2ludGVyUHJlcGFyYXRpb25zLmg+CkBAIC0xMjcxLDcgKzEyNzIsOSBAQCBKU0M6Oklzb1N1YnNw
YWNlKiBKU1Rlc3RET01KSVQ6OnN1YnNwYWNlCiAgICAgYXV0byogc3BhY2UgPSBzcGFjZXMubV9z
dWJzcGFjZUZvclRlc3RET01KSVQuZ2V0KCk7CiBJR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVh
Y2hhYmxlLWNvZGUiKQogSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFy
ZSIpCi0gICAgaWYgKCZKU1Rlc3RET01KSVQ6OnZpc2l0T3V0cHV0Q29uc3RyYWludHMgIT0gJkpT
Qzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzKQorICAgIHZvaWQgKCpteVZpc2l0T3V0
cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3RE
T01KSVQ6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0
cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpT
Q2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKKyAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0
cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQogICAgICAgICBjbGllbnREYXRh
Lm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOwogSUdOT1JFX1dBUk5JTkdT
X0VORAogSUdOT1JFX1dBUk5JTkdTX0VORApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdERlZmF1bHRUb0pTT04uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3REZWZhdWx0VG9KU09O
LmNwcAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdERlZmF1bHRUb0pTT04uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MSw2
ICs1MSw3IEBACiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNDSW5saW5lcy5oPgogI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL0pTRGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLmg+CiAj
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvT2JqZWN0Q29uc3RydWN0b3IuaD4KKyNpbmNsdWRlIDxK
YXZhU2NyaXB0Q29yZS9TbG90VmlzaXRvck1hY3Jvcy5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL1N1YnNwYWNlSW5saW5lcy5oPgogI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KICNpbmNsdWRl
IDx3dGYvUG9pbnRlclByZXBhcmF0aW9ucy5oPgpAQCAtNzkwLDcgKzc5MSw5IEBAIEpTQzo6SXNv
U3Vic3BhY2UqIEpTVGVzdERlZmF1bHRUb0pTT046OnMKICAgICBhdXRvKiBzcGFjZSA9IHNwYWNl
cy5tX3N1YnNwYWNlRm9yVGVzdERlZmF1bHRUb0pTT04uZ2V0KCk7CiBJR05PUkVfV0FSTklOR1Nf
QkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQogSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xv
Z2ljYWwtY29tcGFyZSIpCi0gICAgaWYgKCZKU1Rlc3REZWZhdWx0VG9KU09OOjp2aXNpdE91dHB1
dENvbnN0cmFpbnRzICE9ICZKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50cykKKyAg
ICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90
VmlzaXRvciYpID0gSlNUZXN0RGVmYXVsdFRvSlNPTjo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsK
KyAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpT
Qzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwor
ICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0
cmFpbnQpCiAgICAgICAgIGNsaWVudERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVu
ZChzcGFjZSk7CiBJR05PUkVfV0FSTklOR1NfRU5ECiBJR05PUkVfV0FSTklOR1NfRU5ECkBAIC04
MDYsNyArODA5LDcgQEAgdm9pZCBKU1Rlc3REZWZhdWx0VG9KU09OOjphbmFseXplSGVhcChKUwog
ICAgIEJhc2U6OmFuYWx5emVIZWFwKGNlbGwsIGFuYWx5emVyKTsKIH0KIAotYm9vbCBKU1Rlc3RE
ZWZhdWx0VG9KU09OT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxl
PEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgU2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0
IGNoYXIqKiByZWFzb24pCitib29sIEpTVGVzdERlZmF1bHRUb0pTT05Pd25lcjo6aXNSZWFjaGFi
bGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQq
LCBBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQogewog
ICAgIFVOVVNFRF9QQVJBTShoYW5kbGUpOwogICAgIFVOVVNFRF9QQVJBTSh2aXNpdG9yKTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3REZWZhdWx0
VG9KU09OLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdERlZmF1bHRUb0pTT04uaAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdERlZmF1bHRUb0pTT04uaAko
d29ya2luZyBjb3B5KQpAQCAtNjUsNyArNjUsNyBAQCBwcm90ZWN0ZWQ6CiAKIGNsYXNzIEpTVGVz
dERlZmF1bHRUb0pTT05Pd25lciBmaW5hbCA6IHB1YmxpYyBKU0M6OldlYWtIYW5kbGVPd25lciB7
CiBwdWJsaWM6Ci0gICAgYm9vbCBpc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRs
ZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0LCBKU0M6OlNsb3RWaXNpdG9yJiwgY29uc3Qg
Y2hhcioqKSBmaW5hbDsKKyAgICBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6
SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6QWJzdHJhY3RTbG90Vmlz
aXRvciYsIGNvbnN0IGNoYXIqKikgZmluYWw7CiAgICAgdm9pZCBmaW5hbGl6ZShKU0M6OkhhbmRs
ZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0KSBmaW5hbDsKIH07CiAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3REZWZhdWx0VG9KU09ORmls
dGVyZWRCeUV4cG9zZWQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3REZWZhdWx0VG9KU09ORmlsdGVyZWRCeUV4cG9zZWQuY3Bw
CShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0RGVmYXVsdFRvSlNPTkZpbHRlcmVkQnlFeHBvc2VkLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzgsNiArMzgsNyBAQAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTQ0lubGlu
ZXMuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0Rlc3RydWN0aWJsZU9iamVjdEhlYXBD
ZWxsVHlwZS5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL09iamVjdENvbnN0cnVjdG9yLmg+
CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvU2xvdFZpc2l0b3JNYWNyb3MuaD4KICNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9TdWJzcGFjZUlubGluZXMuaD4KICNpbmNsdWRlIDx3dGYvR2V0UHRy
Lmg+CiAjaW5jbHVkZSA8d3RmL1BvaW50ZXJQcmVwYXJhdGlvbnMuaD4KQEAgLTI3Niw3ICsyNzcs
OSBAQCBKU0M6Oklzb1N1YnNwYWNlKiBKU1Rlc3REZWZhdWx0VG9KU09ORmlsCiAgICAgYXV0byog
c3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3REZWZhdWx0VG9KU09ORmlsdGVyZWRCeUV4
cG9zZWQuZ2V0KCk7CiBJR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQog
SUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgaWYgKCZK
U1Rlc3REZWZhdWx0VG9KU09ORmlsdGVyZWRCeUV4cG9zZWQ6OnZpc2l0T3V0cHV0Q29uc3RyYWlu
dHMgIT0gJkpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzKQorICAgIHZvaWQgKCpt
eVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikg
PSBKU1Rlc3REZWZhdWx0VG9KU09ORmlsdGVyZWRCeUV4cG9zZWQ6OnZpc2l0T3V0cHV0Q29uc3Ry
YWludHM7CisgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0Nl
bGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJh
aW50czsKKyAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRw
dXRDb25zdHJhaW50KQogICAgICAgICBjbGllbnREYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMo
KS5hcHBlbmQoc3BhY2UpOwogSUdOT1JFX1dBUk5JTkdTX0VORAogSUdOT1JFX1dBUk5JTkdTX0VO
RApAQCAtMjkyLDcgKzI5NSw3IEBAIHZvaWQgSlNUZXN0RGVmYXVsdFRvSlNPTkZpbHRlcmVkQnlF
eHBvc2UKICAgICBCYXNlOjphbmFseXplSGVhcChjZWxsLCBhbmFseXplcik7CiB9CiAKLWJvb2wg
SlNUZXN0RGVmYXVsdFRvSlNPTkZpbHRlcmVkQnlFeHBvc2VkT3duZXI6OmlzUmVhY2hhYmxlRnJv
bU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgU2xv
dFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCitib29sIEpTVGVzdERlZmF1
bHRUb0pTT05GaWx0ZXJlZEJ5RXhwb3NlZE93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290
cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIEFic3RyYWN0U2xvdFZp
c2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCiB7CiAgICAgVU5VU0VEX1BBUkFN
KGhhbmRsZSk7CiAgICAgVU5VU0VEX1BBUkFNKHZpc2l0b3IpOwpJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdERlZmF1bHRUb0pTT05GaWx0ZXJlZEJ5
RXhwb3NlZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3REZWZhdWx0VG9KU09ORmlsdGVyZWRCeUV4cG9zZWQuaAkocmV2aXNpb24g
MjczMTE5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dERlZmF1bHRUb0pTT05GaWx0ZXJlZEJ5RXhwb3NlZC5oCSh3b3JraW5nIGNvcHkpCkBAIC02NSw3
ICs2NSw3IEBAIHByb3RlY3RlZDoKIAogY2xhc3MgSlNUZXN0RGVmYXVsdFRvSlNPTkZpbHRlcmVk
QnlFeHBvc2VkT3duZXIgZmluYWwgOiBwdWJsaWMgSlNDOjpXZWFrSGFuZGxlT3duZXIgewogcHVi
bGljOgotICAgIGJvb2wgaXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlND
OjpVbmtub3duPiwgdm9pZCogY29udGV4dCwgSlNDOjpTbG90VmlzaXRvciYsIGNvbnN0IGNoYXIq
KikgZmluYWw7CisgICAgYm9vbCBpc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRs
ZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0LCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3Im
LCBjb25zdCBjaGFyKiopIGZpbmFsOwogICAgIHZvaWQgZmluYWxpemUoSlNDOjpIYW5kbGU8SlND
OjpVbmtub3duPiwgdm9pZCogY29udGV4dCkgZmluYWw7CiB9OwogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RGVmYXVsdFRvSlNPTkluZGlyZWN0
SW5oZXJpdGFuY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3REZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhlcml0YW5jZS5jcHAJ
KHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3REZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhlcml0YW5jZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9IZWFwQW5h
bHl6ZXIuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0NJbmxpbmVzLmg+CiAjaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvSlNEZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUuaD4KKyNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9TbG90VmlzaXRvck1hY3Jvcy5oPgogI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL1N1YnNwYWNlSW5saW5lcy5oPgogI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4K
ICNpbmNsdWRlIDx3dGYvUG9pbnRlclByZXBhcmF0aW9ucy5oPgpAQCAtMTY0LDcgKzE2NSw5IEBA
IEpTQzo6SXNvU3Vic3BhY2UqIEpTVGVzdERlZmF1bHRUb0pTT05JbmQKICAgICBhdXRvKiBzcGFj
ZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRh
bmNlLmdldCgpOwogSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKIElH
Tk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQotICAgIGlmICgmSlNU
ZXN0RGVmYXVsdFRvSlNPTkluZGlyZWN0SW5oZXJpdGFuY2U6OnZpc2l0T3V0cHV0Q29uc3RyYWlu
dHMgIT0gJkpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzKQorICAgIHZvaWQgKCpt
eVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikg
PSBKU1Rlc3REZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhlcml0YW5jZTo6dmlzaXRPdXRwdXRDb25z
dHJhaW50czsKKyAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpT
Q2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0
cmFpbnRzOworICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91
dHB1dENvbnN0cmFpbnQpCiAgICAgICAgIGNsaWVudERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNl
cygpLmFwcGVuZChzcGFjZSk7CiBJR05PUkVfV0FSTklOR1NfRU5ECiBJR05PUkVfV0FSTklOR1Nf
RU5ECkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
RGVmYXVsdFRvSlNPTkluaGVyaXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdC5jcHAJKHJl
dmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDYg
KzQ3LDcgQEAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0NJbmxpbmVzLmg+CiAjaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvSlNEZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUuaD4KICNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9PYmplY3RDb25zdHJ1Y3Rvci5oPgorI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL1Nsb3RWaXNpdG9yTWFjcm9zLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvU3Vic3BhY2VJbmxpbmVzLmg+CiAjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgogI2luY2x1ZGUg
PHd0Zi9Qb2ludGVyUHJlcGFyYXRpb25zLmg+CkBAIC0yNzIsNyArMjczLDkgQEAgSlNDOjpJc29T
dWJzcGFjZSogSlNUZXN0RGVmYXVsdFRvSlNPTkluaAogICAgIGF1dG8qIHNwYWNlID0gc3BhY2Vz
Lm1fc3Vic3BhY2VGb3JUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXQuZ2V0KCk7CiBJR05PUkVfV0FS
TklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQogSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0
YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgaWYgKCZKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJp
dDo6dmlzaXRPdXRwdXRDb25zdHJhaW50cyAhPSAmSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29u
c3RyYWludHMpCisgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2Vs
bCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0Ojp2aXNp
dE91dHB1dENvbnN0cmFpbnRzOworICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFp
bnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0
T3V0cHV0Q29uc3RyYWludHM7CisgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpz
Q2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKICAgICAgICAgY2xpZW50RGF0YS5vdXRwdXRDb25z
dHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKIElHTk9SRV9XQVJOSU5HU19FTkQKIElHTk9S
RV9XQVJOSU5HU19FTkQKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RGVmYXVsdFRvSlNP
TkluaGVyaXRGaW5hbC5jcHAJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDcsNiArNDcsNyBAQAogI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL0pTQ0lubGluZXMuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0Rlc3RydWN0aWJs
ZU9iamVjdEhlYXBDZWxsVHlwZS5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL09iamVjdENv
bnN0cnVjdG9yLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvU2xvdFZpc2l0b3JNYWNyb3Mu
aD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9TdWJzcGFjZUlubGluZXMuaD4KICNpbmNsdWRl
IDx3dGYvR2V0UHRyLmg+CiAjaW5jbHVkZSA8d3RmL1BvaW50ZXJQcmVwYXJhdGlvbnMuaD4KQEAg
LTMwOCw3ICszMDksOSBAQCBKU0M6Oklzb1N1YnNwYWNlKiBKU1Rlc3REZWZhdWx0VG9KU09OSW5o
CiAgICAgYXV0byogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3REZWZhdWx0VG9KU09O
SW5oZXJpdEZpbmFsLmdldCgpOwogSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1j
b2RlIikKIElHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQotICAg
IGlmICgmSlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbDo6dmlzaXRPdXRwdXRDb25zdHJh
aW50cyAhPSAmSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHMpCisgICAgdm9pZCAo
Km15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3Im
KSA9IEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWw6OnZpc2l0T3V0cHV0Q29uc3RyYWlu
dHM7CisgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwq
LCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50
czsKKyAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRD
b25zdHJhaW50KQogICAgICAgICBjbGllbnREYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5h
cHBlbmQoc3BhY2UpOwogSUdOT1JFX1dBUk5JTkdTX0VORAogSUdOT1JFX1dBUk5JTkdTX0VORApJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdERvbWFp
blNlY3VyaXR5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0RG9tYWluU2VjdXJpdHkuY3BwCShyZXZpc2lvbiAyNzMxMTkpCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RG9tYWluU2Vj
dXJpdHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSw2ICs0MSw3IEBACiAjaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvSGVhcEFuYWx5emVyLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlND
SW5saW5lcy5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTRGVzdHJ1Y3RpYmxlT2JqZWN0
SGVhcENlbGxUeXBlLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvU2xvdFZpc2l0b3JNYWNy
b3MuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9TdWJzcGFjZUlubGluZXMuaD4KICNpbmNs
dWRlIDx3dGYvR2V0UHRyLmg+CiAjaW5jbHVkZSA8d3RmL1BvaW50ZXJQcmVwYXJhdGlvbnMuaD4K
QEAgLTMzOCw3ICszMzksOSBAQCBKU0M6Oklzb1N1YnNwYWNlKiBKU1Rlc3REb21haW5TZWN1cml0
eTo6CiAgICAgYXV0byogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3REb21haW5TZWN1
cml0eS5nZXQoKTsKIElHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCiBJ
R05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKLSAgICBpZiAoJkpT
VGVzdERvbWFpblNlY3VyaXR5Ojp2aXNpdE91dHB1dENvbnN0cmFpbnRzICE9ICZKU0M6OkpTQ2Vs
bDo6dmlzaXRPdXRwdXRDb25zdHJhaW50cykKKyAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0
cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0RG9tYWluU2Vj
dXJpdHk6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0
cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpT
Q2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKKyAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0
cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQogICAgICAgICBjbGllbnREYXRh
Lm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOwogSUdOT1JFX1dBUk5JTkdT
X0VORAogSUdOT1JFX1dBUk5JTkdTX0VORApAQCAtMzU0LDcgKzM1Nyw3IEBAIHZvaWQgSlNUZXN0
RG9tYWluU2VjdXJpdHk6OmFuYWx5emVIZWFwKEoKICAgICBCYXNlOjphbmFseXplSGVhcChjZWxs
LCBhbmFseXplcik7CiB9CiAKLWJvb2wgSlNUZXN0RG9tYWluU2VjdXJpdHlPd25lcjo6aXNSZWFj
aGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZv
aWQqLCBTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikKK2Jvb2wgSlNU
ZXN0RG9tYWluU2VjdXJpdHlPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpI
YW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBBYnN0cmFjdFNsb3RWaXNpdG9yJiB2
aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQogewogICAgIFVOVVNFRF9QQVJBTShoYW5kbGUp
OwogICAgIFVOVVNFRF9QQVJBTSh2aXNpdG9yKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3REb21haW5TZWN1cml0eS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3REb21haW5TZWN1
cml0eS5oCShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0RG9tYWluU2VjdXJpdHkuaAkod29ya2luZyBjb3B5KQpAQCAtNjgs
NyArNjgsNyBAQCBwcm90ZWN0ZWQ6CiAKIGNsYXNzIEpTVGVzdERvbWFpblNlY3VyaXR5T3duZXIg
ZmluYWwgOiBwdWJsaWMgSlNDOjpXZWFrSGFuZGxlT3duZXIgewogcHVibGljOgotICAgIGJvb2wg
aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9p
ZCogY29udGV4dCwgSlNDOjpTbG90VmlzaXRvciYsIGNvbnN0IGNoYXIqKikgZmluYWw7CisgICAg
Ym9vbCBpc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+
LCB2b2lkKiBjb250ZXh0LCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImLCBjb25zdCBjaGFyKiop
IGZpbmFsOwogICAgIHZvaWQgZmluYWxpemUoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9p
ZCogY29udGV4dCkgZmluYWw7CiB9OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0RW5hYmxlZEJ5U2V0dGluZy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEVuYWJsZWRCeVNl
dHRpbmcuY3BwCShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0RW5hYmxlZEJ5U2V0dGluZy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM4LDYgKzM4LDcgQEAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9IZWFwQW5hbHl6ZXIu
aD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0NJbmxpbmVzLmg+CiAjaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvSlNEZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUuaD4KKyNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9TbG90VmlzaXRvck1hY3Jvcy5oPgogI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL1N1YnNwYWNlSW5saW5lcy5oPgogI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KICNpbmNs
dWRlIDx3dGYvUG9pbnRlclByZXBhcmF0aW9ucy5oPgpAQCAtNTA3LDcgKzUwOCw5IEBAIEpTQzo6
SXNvU3Vic3BhY2UqIEpTVGVzdEVuYWJsZWRCeVNldHRpbmcKICAgICBhdXRvKiBzcGFjZSA9IHNw
YWNlcy5tX3N1YnNwYWNlRm9yVGVzdEVuYWJsZWRCeVNldHRpbmcuZ2V0KCk7CiBJR05PUkVfV0FS
TklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQogSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0
YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgaWYgKCZKU1Rlc3RFbmFibGVkQnlTZXR0aW5nOjp2
aXNpdE91dHB1dENvbnN0cmFpbnRzICE9ICZKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJh
aW50cykKKyAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwg
SlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0RW5hYmxlZEJ5U2V0dGluZzo6dmlzaXRPdXRwdXRD
b25zdHJhaW50czsKKyAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6
OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENv
bnN0cmFpbnRzOworICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNp
dE91dHB1dENvbnN0cmFpbnQpCiAgICAgICAgIGNsaWVudERhdGEub3V0cHV0Q29uc3RyYWludFNw
YWNlcygpLmFwcGVuZChzcGFjZSk7CiBJR05PUkVfV0FSTklOR1NfRU5ECiBJR05PUkVfV0FSTklO
R1NfRU5ECkBAIC01MjMsNyArNTI2LDcgQEAgdm9pZCBKU1Rlc3RFbmFibGVkQnlTZXR0aW5nOjph
bmFseXplSGVhcAogICAgIEJhc2U6OmFuYWx5emVIZWFwKGNlbGwsIGFuYWx5emVyKTsKIH0KIAot
Ym9vbCBKU1Rlc3RFbmFibGVkQnlTZXR0aW5nT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJv
b3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgU2xvdFZpc2l0b3Im
IHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCitib29sIEpTVGVzdEVuYWJsZWRCeVNldHRp
bmdPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtu
b3duPiBoYW5kbGUsIHZvaWQqLCBBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBj
aGFyKiogcmVhc29uKQogewogICAgIFVOVVNFRF9QQVJBTShoYW5kbGUpOwogICAgIFVOVVNFRF9Q
QVJBTSh2aXNpdG9yKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RFbmFibGVkQnlTZXR0aW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEVuYWJsZWRCeVNldHRpbmcuaAkocmV2
aXNpb24gMjczMTE5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdEVuYWJsZWRCeVNldHRpbmcuaAkod29ya2luZyBjb3B5KQpAQCAtNjcsNyArNjcsNyBA
QCBwcm90ZWN0ZWQ6CiAKIGNsYXNzIEpTVGVzdEVuYWJsZWRCeVNldHRpbmdPd25lciBmaW5hbCA6
IHB1YmxpYyBKU0M6OldlYWtIYW5kbGVPd25lciB7CiBwdWJsaWM6Ci0gICAgYm9vbCBpc1JlYWNo
YWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250
ZXh0LCBKU0M6OlNsb3RWaXNpdG9yJiwgY29uc3QgY2hhcioqKSBmaW5hbDsKKyAgICBib29sIGlz
UmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQq
IGNvbnRleHQsIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYsIGNvbnN0IGNoYXIqKikgZmluYWw7
CiAgICAgdm9pZCBmaW5hbGl6ZShKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250
ZXh0KSBmaW5hbDsKIH07CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RFbmFibGVkRm9yQ29udGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEVuYWJsZWRGb3JDb250ZXh0
LmNwcAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdEVuYWJsZWRGb3JDb250ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzUsNiArMzUsNyBAQAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0hlYXBBbmFseXplci5oPgog
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTQ0lubGluZXMuaD4KICNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9KU0Rlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZS5oPgorI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL1Nsb3RWaXNpdG9yTWFjcm9zLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvU3Vic3BhY2VJbmxpbmVzLmg+CiAjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgogI2luY2x1ZGUg
PHd0Zi9Qb2ludGVyUHJlcGFyYXRpb25zLmg+CkBAIC0yMDYsNyArMjA3LDkgQEAgSlNDOjpJc29T
dWJzcGFjZSogSlNUZXN0RW5hYmxlZEZvckNvbnRleAogICAgIGF1dG8qIHNwYWNlID0gc3BhY2Vz
Lm1fc3Vic3BhY2VGb3JUZXN0RW5hYmxlZEZvckNvbnRleHQuZ2V0KCk7CiBJR05PUkVfV0FSTklO
R1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQogSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0
b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgaWYgKCZKU1Rlc3RFbmFibGVkRm9yQ29udGV4dDo6dmlz
aXRPdXRwdXRDb25zdHJhaW50cyAhPSAmSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWlu
dHMpCisgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpT
Qzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdEVuYWJsZWRGb3JDb250ZXh0Ojp2aXNpdE91dHB1dENv
bnN0cmFpbnRzOworICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6
SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29u
c3RyYWludHM7CisgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0
T3V0cHV0Q29uc3RyYWludCkKICAgICAgICAgY2xpZW50RGF0YS5vdXRwdXRDb25zdHJhaW50U3Bh
Y2VzKCkuYXBwZW5kKHNwYWNlKTsKIElHTk9SRV9XQVJOSU5HU19FTkQKIElHTk9SRV9XQVJOSU5H
U19FTkQKQEAgLTIyMiw3ICsyMjUsNyBAQCB2b2lkIEpTVGVzdEVuYWJsZWRGb3JDb250ZXh0Ojph
bmFseXplSGVhCiAgICAgQmFzZTo6YW5hbHl6ZUhlYXAoY2VsbCwgYW5hbHl6ZXIpOwogfQogCi1i
b29sIEpTVGVzdEVuYWJsZWRGb3JDb250ZXh0T3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJv
b3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgU2xvdFZpc2l0b3Im
IHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCitib29sIEpTVGVzdEVuYWJsZWRGb3JDb250
ZXh0T3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5r
bm93bj4gaGFuZGxlLCB2b2lkKiwgQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3Qg
Y2hhcioqIHJlYXNvbikKIHsKICAgICBVTlVTRURfUEFSQU0oaGFuZGxlKTsKICAgICBVTlVTRURf
UEFSQU0odmlzaXRvcik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0RW5hYmxlZEZvckNvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RW5hYmxlZEZvckNvbnRleHQuaAko
cmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdEVuYWJsZWRGb3JDb250ZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTY3LDcgKzY3
LDcgQEAgcHJvdGVjdGVkOgogCiBjbGFzcyBKU1Rlc3RFbmFibGVkRm9yQ29udGV4dE93bmVyIGZp
bmFsIDogcHVibGljIEpTQzo6V2Vha0hhbmRsZU93bmVyIHsKIHB1YmxpYzoKLSAgICBib29sIGlz
UmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQq
IGNvbnRleHQsIEpTQzo6U2xvdFZpc2l0b3ImLCBjb25zdCBjaGFyKiopIGZpbmFsOworICAgIGJv
b2wgaXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwg
dm9pZCogY29udGV4dCwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiwgY29uc3QgY2hhcioqKSBm
aW5hbDsKICAgICB2b2lkIGZpbmFsaXplKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQq
IGNvbnRleHQpIGZpbmFsOwogfTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdEV2ZW50Q29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFdmVudENvbnN0cnVj
dG9yLmNwcAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdEV2ZW50Q29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zNiw2ICszNiw3IEBACiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSGVhcEFuYWx5emVyLmg+
CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNDSW5saW5lcy5oPgogI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL0pTRGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLmg+CisjaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvU2xvdFZpc2l0b3JNYWNyb3MuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9TdWJzcGFjZUlubGluZXMuaD4KICNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CiAjaW5jbHVk
ZSA8d3RmL1BvaW50ZXJQcmVwYXJhdGlvbnMuaD4KQEAgLTMyOCw3ICszMjksOSBAQCBKU0M6Oklz
b1N1YnNwYWNlKiBKU1Rlc3RFdmVudENvbnN0cnVjdG9yCiAgICAgYXV0byogc3BhY2UgPSBzcGFj
ZXMubV9zdWJzcGFjZUZvclRlc3RFdmVudENvbnN0cnVjdG9yLmdldCgpOwogSUdOT1JFX1dBUk5J
TkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKIElHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1
dG9sb2dpY2FsLWNvbXBhcmUiKQotICAgIGlmICgmSlNUZXN0RXZlbnRDb25zdHJ1Y3Rvcjo6dmlz
aXRPdXRwdXRDb25zdHJhaW50cyAhPSAmSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWlu
dHMpCisgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpT
Qzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdEV2ZW50Q29uc3RydWN0b3I6OnZpc2l0T3V0cHV0Q29u
c3RyYWludHM7CisgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpK
U0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25z
dHJhaW50czsKKyAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRP
dXRwdXRDb25zdHJhaW50KQogICAgICAgICBjbGllbnREYXRhLm91dHB1dENvbnN0cmFpbnRTcGFj
ZXMoKS5hcHBlbmQoc3BhY2UpOwogSUdOT1JFX1dBUk5JTkdTX0VORAogSUdOT1JFX1dBUk5JTkdT
X0VORApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dEV2ZW50VGFyZ2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXZlbnRUYXJnZXQuY3BwCShyZXZpc2lvbiAyNzMxMTkpCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXZlbnRUYXJn
ZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw2ICszOSw3IEBACiAjaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvSlNDSW5saW5lcy5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTRGVzdHJ1
Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvUHJv
cGVydHlOYW1lQXJyYXkuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9TbG90VmlzaXRvck1h
Y3Jvcy5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1N1YnNwYWNlSW5saW5lcy5oPgogI2lu
Y2x1ZGUgPHd0Zi9HZXRQdHIuaD4KICNpbmNsdWRlIDx3dGYvUG9pbnRlclByZXBhcmF0aW9ucy5o
PgpAQCAtMjY5LDcgKzI3MCw5IEBAIEpTQzo6SXNvU3Vic3BhY2UqIEpTVGVzdEV2ZW50VGFyZ2V0
OjpzdWIKICAgICBhdXRvKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdEV2ZW50VGFy
Z2V0LmdldCgpOwogSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKIElH
Tk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQotICAgIGlmICgmSlNU
ZXN0RXZlbnRUYXJnZXQ6OnZpc2l0T3V0cHV0Q29uc3RyYWludHMgIT0gJkpTQzo6SlNDZWxsOjp2
aXNpdE91dHB1dENvbnN0cmFpbnRzKQorICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWlu
dCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3RFdmVudFRhcmdldDo6
dmlzaXRPdXRwdXRDb25zdHJhaW50czsKKyAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25z
dHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2
aXNpdE91dHB1dENvbnN0cmFpbnRzOworICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAh
PSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCiAgICAgICAgIGNsaWVudERhdGEub3V0cHV0
Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7CiBJR05PUkVfV0FSTklOR1NfRU5ECiBJ
R05PUkVfV0FSTklOR1NfRU5ECkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0RXhjZXB0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXhjZXB0aW9uLmNwcAkocmV2aXNpb24g
MjczMTE5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dEV4Y2VwdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9IZWFwQW5hbHl6ZXIuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9KU0NJbmxpbmVzLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNEZXN0cnVjdGlibGVP
YmplY3RIZWFwQ2VsbFR5cGUuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9TbG90VmlzaXRv
ck1hY3Jvcy5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1N1YnNwYWNlSW5saW5lcy5oPgog
I2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KICNpbmNsdWRlIDx3dGYvUG9pbnRlclByZXBhcmF0aW9u
cy5oPgpAQCAtMTk0LDcgKzE5NSw5IEBAIEpTQzo6SXNvU3Vic3BhY2UqIEpTVGVzdEV4Y2VwdGlv
bjo6c3Vic3AKICAgICBhdXRvKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdEV4Y2Vw
dGlvbi5nZXQoKTsKIElHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCiBJ
R05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKLSAgICBpZiAoJkpT
VGVzdEV4Y2VwdGlvbjo6dmlzaXRPdXRwdXRDb25zdHJhaW50cyAhPSAmSlNDOjpKU0NlbGw6OnZp
c2l0T3V0cHV0Q29uc3RyYWludHMpCisgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50
KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdEV4Y2VwdGlvbjo6dmlz
aXRPdXRwdXRDb25zdHJhaW50czsKKyAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJh
aW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNp
dE91dHB1dENvbnN0cmFpbnRzOworICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBq
c0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCiAgICAgICAgIGNsaWVudERhdGEub3V0cHV0Q29u
c3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7CiBJR05PUkVfV0FSTklOR1NfRU5ECiBJR05P
UkVfV0FSTklOR1NfRU5ECkBAIC0yMTAsNyArMjEzLDcgQEAgdm9pZCBKU1Rlc3RFeGNlcHRpb246
OmFuYWx5emVIZWFwKEpTQ2VsbAogICAgIEJhc2U6OmFuYWx5emVIZWFwKGNlbGwsIGFuYWx5emVy
KTsKIH0KIAotYm9vbCBKU1Rlc3RFeGNlcHRpb25Pd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVl
Um9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBTbG90VmlzaXRv
ciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikKK2Jvb2wgSlNUZXN0RXhjZXB0aW9uT3du
ZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4g
aGFuZGxlLCB2b2lkKiwgQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioq
IHJlYXNvbikKIHsKICAgICBVTlVTRURfUEFSQU0oaGFuZGxlKTsKICAgICBVTlVTRURfUEFSQU0o
dmlzaXRvcik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0RXhjZXB0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV4Y2VwdGlvbi5oCShyZXZpc2lvbiAyNzMxMTkpCisrKyBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXhjZXB0aW9uLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTY2LDcgKzY2LDcgQEAgcHJvdGVjdGVkOgogCiBjbGFzcyBKU1Rl
c3RFeGNlcHRpb25Pd25lciBmaW5hbCA6IHB1YmxpYyBKU0M6OldlYWtIYW5kbGVPd25lciB7CiBw
dWJsaWM6Ci0gICAgYm9vbCBpc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxK
U0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0LCBKU0M6OlNsb3RWaXNpdG9yJiwgY29uc3QgY2hh
cioqKSBmaW5hbDsKKyAgICBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFu
ZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRv
ciYsIGNvbnN0IGNoYXIqKikgZmluYWw7CiAgICAgdm9pZCBmaW5hbGl6ZShKU0M6OkhhbmRsZTxK
U0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0KSBmaW5hbDsKIH07CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZS5jcHAJKHJldmlzaW9uIDI3MzExOSkKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RHZW5lcmF0ZUlzUmVh
Y2hhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL0hlYXBBbmFseXplci5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pT
Q0lubGluZXMuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0Rlc3RydWN0aWJsZU9iamVj
dEhlYXBDZWxsVHlwZS5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1Nsb3RWaXNpdG9yTWFj
cm9zLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvU3Vic3BhY2VJbmxpbmVzLmg+CiAjaW5j
bHVkZSA8d3RmL0dldFB0ci5oPgogI2luY2x1ZGUgPHd0Zi9Qb2ludGVyUHJlcGFyYXRpb25zLmg+
CkBAIC0yMDQsNyArMjA1LDkgQEAgSlNDOjpJc29TdWJzcGFjZSogSlNUZXN0R2VuZXJhdGVJc1Jl
YWNoYQogICAgIGF1dG8qIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0R2VuZXJhdGVJ
c1JlYWNoYWJsZS5nZXQoKTsKIElHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29k
ZSIpCiBJR05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKLSAgICBp
ZiAoJkpTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGU6OnZpc2l0T3V0cHV0Q29uc3RyYWludHMgIT0g
JkpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzKQorICAgIHZvaWQgKCpteVZpc2l0
T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rl
c3RHZW5lcmF0ZUlzUmVhY2hhYmxlOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOworICAgIHZvaWQg
KCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90Vmlz
aXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAgaWYgKG15
VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKICAg
ICAgICAgY2xpZW50RGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsK
IElHTk9SRV9XQVJOSU5HU19FTkQKIElHTk9SRV9XQVJOSU5HU19FTkQKQEAgLTIyMCw3ICsyMjMs
NyBAQCB2b2lkIEpTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGU6OmFuYWx5emVICiAgICAgQmFzZTo6
YW5hbHl6ZUhlYXAoY2VsbCwgYW5hbHl6ZXIpOwogfQogCi1ib29sIEpTVGVzdEdlbmVyYXRlSXNS
ZWFjaGFibGVPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlND
OjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hh
cioqIHJlYXNvbikKK2Jvb2wgSlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZU93bmVyOjppc1JlYWNo
YWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9p
ZCosIEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCiB7
CiAgICAgYXV0byoganNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZSA9IGpzQ2FzdDxKU1Rlc3RHZW5l
cmF0ZUlzUmVhY2hhYmxlKj4oaGFuZGxlLnNsb3QoKS0+YXNDZWxsKCkpOwogICAgIFRlc3RHZW5l
cmF0ZUlzUmVhY2hhYmxlKiByb290ID0gJmpzVGVzdEdlbmVyYXRlSXNSZWFjaGFibGUtPndyYXBw
ZWQoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RHZW5lcmF0ZUlzUmVhY2hhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGUuaAkocmV2aXNp
b24gMjczMTE5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdEdlbmVyYXRlSXNSZWFjaGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtNjUsNyArNjUsNyBA
QCBwcm90ZWN0ZWQ6CiAKIGNsYXNzIEpTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGVPd25lciBmaW5h
bCA6IHB1YmxpYyBKU0M6OldlYWtIYW5kbGVPd25lciB7CiBwdWJsaWM6Ci0gICAgYm9vbCBpc1Jl
YWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBj
b250ZXh0LCBKU0M6OlNsb3RWaXNpdG9yJiwgY29uc3QgY2hhcioqKSBmaW5hbDsKKyAgICBib29s
IGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZv
aWQqIGNvbnRleHQsIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYsIGNvbnN0IGNoYXIqKikgZmlu
YWw7CiAgICAgdm9pZCBmaW5hbGl6ZShKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBj
b250ZXh0KSBmaW5hbDsKIH07CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RHbG9iYWxPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RHbG9iYWxPYmplY3QuY3BwCShy
ZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0R2xvYmFsT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTksNiArOTksNyBA
QAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0hlYXBBbmFseXplci5oPgogI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL0pTQ0lubGluZXMuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0Rl
c3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZS5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L1Nsb3RWaXNpdG9yTWFjcm9zLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvU3Vic3BhY2VJ
bmxpbmVzLmg+CiAjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgogI2luY2x1ZGUgPHd0Zi9Qb2ludGVy
UHJlcGFyYXRpb25zLmg+CkBAIC0yNTk4LDcgKzI1OTksOSBAQCBKU0M6Oklzb1N1YnNwYWNlKiBK
U1Rlc3RHbG9iYWxPYmplY3Q6OnN1CiAgICAgYXV0byogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFj
ZUZvclRlc3RHbG9iYWxPYmplY3QuZ2V0KCk7CiBJR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVh
Y2hhYmxlLWNvZGUiKQogSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFy
ZSIpCi0gICAgaWYgKCZKU1Rlc3RHbG9iYWxPYmplY3Q6OnZpc2l0T3V0cHV0Q29uc3RyYWludHMg
IT0gJkpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzKQorICAgIHZvaWQgKCpteVZp
c2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBK
U1Rlc3RHbG9iYWxPYmplY3Q6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAgdm9pZCAoKmpz
Q2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9y
JikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKKyAgICBpZiAobXlWaXNp
dE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQogICAgICAg
ICBjbGllbnREYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOwogSUdO
T1JFX1dBUk5JTkdTX0VORAogSUdOT1JFX1dBUk5JTkdTX0VORApAQCAtMjYxNCw3ICsyNjE3LDcg
QEAgdm9pZCBKU1Rlc3RHbG9iYWxPYmplY3Q6OmFuYWx5emVIZWFwKEpTQwogICAgIEJhc2U6OmFu
YWx5emVIZWFwKGNlbGwsIGFuYWx5emVyKTsKIH0KIAotYm9vbCBKU1Rlc3RHbG9iYWxPYmplY3RP
d25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3du
PiBoYW5kbGUsIHZvaWQqLCBTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNv
bikKK2Jvb2wgSlNUZXN0R2xvYmFsT2JqZWN0T3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJv
b3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgQWJzdHJhY3RTbG90
VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikKIHsKICAgICBVTlVTRURfUEFS
QU0oaGFuZGxlKTsKICAgICBVTlVTRURfUEFSQU0odmlzaXRvcik7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0R2xvYmFsT2JqZWN0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEds
b2JhbE9iamVjdC5oCShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0R2xvYmFsT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAg
LTY3LDcgKzY3LDcgQEAgcHJvdGVjdGVkOgogCiBjbGFzcyBKU1Rlc3RHbG9iYWxPYmplY3RPd25l
ciBmaW5hbCA6IHB1YmxpYyBKU0M6OldlYWtIYW5kbGVPd25lciB7CiBwdWJsaWM6Ci0gICAgYm9v
bCBpc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2
b2lkKiBjb250ZXh0LCBKU0M6OlNsb3RWaXNpdG9yJiwgY29uc3QgY2hhcioqKSBmaW5hbDsKKyAg
ICBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93
bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYsIGNvbnN0IGNoYXIq
KikgZmluYWw7CiAgICAgdm9pZCBmaW5hbGl6ZShKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2
b2lkKiBjb250ZXh0KSBmaW5hbDsKIH07CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
SW5kZXhlZFNldHRlck5vSWRlbnRpZmllci5jcHAJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbmRleGVkU2V0dGVyTm9J
ZGVudGlmaWVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL0pTQ0lubGluZXMuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9K
U0Rlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZS5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL1Byb3BlcnR5TmFtZUFycmF5Lmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvU2xvdFZp
c2l0b3JNYWNyb3MuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9TdWJzcGFjZUlubGluZXMu
aD4KICNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CiAjaW5jbHVkZSA8d3RmL1BvaW50ZXJQcmVwYXJh
dGlvbnMuaD4KQEAgLTI2NCw3ICsyNjUsOSBAQCBKU0M6Oklzb1N1YnNwYWNlKiBKU1Rlc3RJbmRl
eGVkU2V0dGVyTm9JCiAgICAgYXV0byogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RJ
bmRleGVkU2V0dGVyTm9JZGVudGlmaWVyLmdldCgpOwogSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1
bnJlYWNoYWJsZS1jb2RlIikKIElHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNv
bXBhcmUiKQotICAgIGlmICgmSlNUZXN0SW5kZXhlZFNldHRlck5vSWRlbnRpZmllcjo6dmlzaXRP
dXRwdXRDb25zdHJhaW50cyAhPSAmSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHMp
CisgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6
U2xvdFZpc2l0b3ImKSA9IEpTVGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXI6OnZpc2l0T3V0
cHV0Q29uc3RyYWludHM7CisgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCko
SlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRw
dXRDb25zdHJhaW50czsKKyAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxs
VmlzaXRPdXRwdXRDb25zdHJhaW50KQogICAgICAgICBjbGllbnREYXRhLm91dHB1dENvbnN0cmFp
bnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOwogSUdOT1JFX1dBUk5JTkdTX0VORAogSUdOT1JFX1dB
Uk5JTkdTX0VORApAQCAtMjgwLDcgKzI4Myw3IEBAIHZvaWQgSlNUZXN0SW5kZXhlZFNldHRlck5v
SWRlbnRpZmllcjo6YW4KICAgICBCYXNlOjphbmFseXplSGVhcChjZWxsLCBhbmFseXplcik7CiB9
CiAKLWJvb2wgSlNUZXN0SW5kZXhlZFNldHRlck5vSWRlbnRpZmllck93bmVyOjppc1JlYWNoYWJs
ZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCos
IFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQorYm9vbCBKU1Rlc3RJ
bmRleGVkU2V0dGVyTm9JZGVudGlmaWVyT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3Rz
KEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgQWJzdHJhY3RTbG90Vmlz
aXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikKIHsKICAgICBVTlVTRURfUEFSQU0o
aGFuZGxlKTsKICAgICBVTlVTRURfUEFSQU0odmlzaXRvcik7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW5kZXhlZFNldHRlck5vSWRlbnRpZmll
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyLmgJKHJldmlzaW9uIDI3MzExOSkKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbmRleGVkU2V0
dGVyTm9JZGVudGlmaWVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTczLDcgKzczLDcgQEAgcHJvdGVj
dGVkOgogCiBjbGFzcyBKU1Rlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyT3duZXIgZmluYWwg
OiBwdWJsaWMgSlNDOjpXZWFrSGFuZGxlT3duZXIgewogcHVibGljOgotICAgIGJvb2wgaXNSZWFj
aGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29u
dGV4dCwgSlNDOjpTbG90VmlzaXRvciYsIGNvbnN0IGNoYXIqKikgZmluYWw7CisgICAgYm9vbCBp
c1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lk
KiBjb250ZXh0LCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImLCBjb25zdCBjaGFyKiopIGZpbmFs
OwogICAgIHZvaWQgZmluYWxpemUoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29u
dGV4dCkgZmluYWw7CiB9OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW5k
ZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uLmNwcAkocmV2aXNpb24gMjczMTE5KQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEluZGV4ZWRTZXR0ZXJU
aHJvd2luZ0V4Y2VwdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDYgKzM1LDcgQEAKICNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0NJbmxpbmVzLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvSlNEZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUuaD4KICNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9Qcm9wZXJ0eU5hbWVBcnJheS5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L1Nsb3RWaXNpdG9yTWFjcm9zLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvU3Vic3BhY2VJ
bmxpbmVzLmg+CiAjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgogI2luY2x1ZGUgPHd0Zi9Qb2ludGVy
UHJlcGFyYXRpb25zLmg+CkBAIC0yNjQsNyArMjY1LDkgQEAgSlNDOjpJc29TdWJzcGFjZSogSlNU
ZXN0SW5kZXhlZFNldHRlclRocgogICAgIGF1dG8qIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VG
b3JUZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uLmdldCgpOwogSUdOT1JFX1dBUk5J
TkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKIElHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1
dG9sb2dpY2FsLWNvbXBhcmUiKQotICAgIGlmICgmSlNUZXN0SW5kZXhlZFNldHRlclRocm93aW5n
RXhjZXB0aW9uOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzICE9ICZKU0M6OkpTQ2VsbDo6dmlzaXRP
dXRwdXRDb25zdHJhaW50cykKKyAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpT
Qzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0SW5kZXhlZFNldHRlclRocm93
aW5nRXhjZXB0aW9uOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOworICAgIHZvaWQgKCpqc0NlbGxW
aXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0g
SlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAgaWYgKG15VmlzaXRPdXRw
dXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKICAgICAgICAgY2xp
ZW50RGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKIElHTk9SRV9X
QVJOSU5HU19FTkQKIElHTk9SRV9XQVJOSU5HU19FTkQKQEAgLTI4MCw3ICsyODMsNyBAQCB2b2lk
IEpTVGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvCiAgICAgQmFzZTo6YW5hbHl6ZUhl
YXAoY2VsbCwgYW5hbHl6ZXIpOwogfQogCi1ib29sIEpTVGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2lu
Z0V4Y2VwdGlvbk93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxK
U0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBj
aGFyKiogcmVhc29uKQorYm9vbCBKU1Rlc3RJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb25P
d25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3du
PiBoYW5kbGUsIHZvaWQqLCBBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFy
KiogcmVhc29uKQogewogICAgIFVOVVNFRF9QQVJBTShoYW5kbGUpOwogICAgIFVOVVNFRF9QQVJB
TSh2aXNpdG9yKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24uaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW5kZXhlZFNldHRl
clRocm93aW5nRXhjZXB0aW9uLmgJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNl
cHRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtNzMsNyArNzMsNyBAQCBwcm90ZWN0ZWQ6CiAKIGNs
YXNzIEpTVGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbk93bmVyIGZpbmFsIDogcHVi
bGljIEpTQzo6V2Vha0hhbmRsZU93bmVyIHsKIHB1YmxpYzoKLSAgICBib29sIGlzUmVhY2hhYmxl
RnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQs
IEpTQzo6U2xvdFZpc2l0b3ImLCBjb25zdCBjaGFyKiopIGZpbmFsOworICAgIGJvb2wgaXNSZWFj
aGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29u
dGV4dCwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiwgY29uc3QgY2hhcioqKSBmaW5hbDsKICAg
ICB2b2lkIGZpbmFsaXplKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQp
IGZpbmFsOwogfTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEluZGV4ZWRTZXR0
ZXJXaXRoSWRlbnRpZmllci5jcHAJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZp
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw2ICszNyw3IEBACiAjaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvSlNDSW5saW5lcy5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTRGVzdHJ1
Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvUHJv
cGVydHlOYW1lQXJyYXkuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9TbG90VmlzaXRvck1h
Y3Jvcy5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1N1YnNwYWNlSW5saW5lcy5oPgogI2lu
Y2x1ZGUgPHd0Zi9HZXRQdHIuaD4KICNpbmNsdWRlIDx3dGYvUG9pbnRlclByZXBhcmF0aW9ucy5o
PgpAQCAtMzAxLDcgKzMwMiw5IEBAIEpTQzo6SXNvU3Vic3BhY2UqIEpTVGVzdEluZGV4ZWRTZXR0
ZXJXaXQKICAgICBhdXRvKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdEluZGV4ZWRT
ZXR0ZXJXaXRoSWRlbnRpZmllci5nZXQoKTsKIElHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFj
aGFibGUtY29kZSIpCiBJR05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJl
IikKLSAgICBpZiAoJkpTVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcjo6dmlzaXRPdXRw
dXRDb25zdHJhaW50cyAhPSAmSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHMpCisg
ICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xv
dFZpc2l0b3ImKSA9IEpTVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcjo6dmlzaXRPdXRw
dXRDb25zdHJhaW50czsKKyAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShK
U0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1
dENvbnN0cmFpbnRzOworICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxW
aXNpdE91dHB1dENvbnN0cmFpbnQpCiAgICAgICAgIGNsaWVudERhdGEub3V0cHV0Q29uc3RyYWlu
dFNwYWNlcygpLmFwcGVuZChzcGFjZSk7CiBJR05PUkVfV0FSTklOR1NfRU5ECiBJR05PUkVfV0FS
TklOR1NfRU5ECkBAIC0zMTcsNyArMzIwLDcgQEAgdm9pZCBKU1Rlc3RJbmRleGVkU2V0dGVyV2l0
aElkZW50aWZpZXI6OgogICAgIEJhc2U6OmFuYWx5emVIZWFwKGNlbGwsIGFuYWx5emVyKTsKIH0K
IAotYm9vbCBKU1Rlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXJPd25lcjo6aXNSZWFjaGFi
bGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQq
LCBTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikKK2Jvb2wgSlNUZXN0
SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJv
b3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgQWJzdHJhY3RTbG90
VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikKIHsKICAgICBVTlVTRURfUEFS
QU0oaGFuZGxlKTsKICAgICBVTlVTRURfUEFSQU0odmlzaXRvcik7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVu
dGlmaWVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5oCShyZXZpc2lvbiAyNzMx
MTkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW5k
ZXhlZFNldHRlcldpdGhJZGVudGlmaWVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTczLDcgKzczLDcg
QEAgcHJvdGVjdGVkOgogCiBjbGFzcyBKU1Rlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXJP
d25lciBmaW5hbCA6IHB1YmxpYyBKU0M6OldlYWtIYW5kbGVPd25lciB7CiBwdWJsaWM6Ci0gICAg
Ym9vbCBpc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+
LCB2b2lkKiBjb250ZXh0LCBKU0M6OlNsb3RWaXNpdG9yJiwgY29uc3QgY2hhcioqKSBmaW5hbDsK
KyAgICBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5r
bm93bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYsIGNvbnN0IGNo
YXIqKikgZmluYWw7CiAgICAgdm9pZCBmaW5hbGl6ZShKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+
LCB2b2lkKiBjb250ZXh0KSBmaW5hbDsKIH07CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbnRlcmZhY2UuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbnRlcmZhY2UuY3Bw
CShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0SW50ZXJmYWNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYsNiArNDYsNyBA
QAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0hlYXBBbmFseXplci5oPgogI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL0pTQ0lubGluZXMuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0Rl
c3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZS5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L1Nsb3RWaXNpdG9yTWFjcm9zLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvU3Vic3BhY2VJ
bmxpbmVzLmg+CiAjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgogI2luY2x1ZGUgPHd0Zi9Qb2ludGVy
UHJlcGFyYXRpb25zLmg+CkBAIC0xMTIyLDcgKzExMjMsOSBAQCBwdWJsaWM6CiAgICAgICAgIGF1
dG8qIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0SW50ZXJmYWNlSXRlcmF0b3IuZ2V0
KCk7CiBJR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQogSUdOT1JFX1dB
Uk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgICAgIGlmICgmVGVzdElu
dGVyZmFjZUl0ZXJhdG9yOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzICE9ICZKU0M6OkpTQ2VsbDo6
dmlzaXRPdXRwdXRDb25zdHJhaW50cykKKyAgICAgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25z
dHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IFRlc3RJbnRlcmZhY2VJ
dGVyYXRvcjo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKKyAgICAgICAgdm9pZCAoKmpzQ2VsbFZp
c2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBK
U0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKKyAgICAgICAgaWYgKG15VmlzaXRP
dXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKICAgICAgICAg
ICAgIGNsaWVudERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7CiBJ
R05PUkVfV0FSTklOR1NfRU5ECiBJR05PUkVfV0FSTklOR1NfRU5ECkBAIC0xMjEyLDcgKzEyMTUs
OSBAQCBKU0M6Oklzb1N1YnNwYWNlKiBKU1Rlc3RJbnRlcmZhY2U6OnN1YnNwCiAgICAgYXV0byog
c3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RJbnRlcmZhY2UuZ2V0KCk7CiBJR05PUkVf
V0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQogSUdOT1JFX1dBUk5JTkdTX0JFR0lO
KCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgaWYgKCZKU1Rlc3RJbnRlcmZhY2U6OnZpc2l0
T3V0cHV0Q29uc3RyYWludHMgIT0gJkpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRz
KQorICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6
OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3RJbnRlcmZhY2U6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7
CisgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBK
U0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsK
KyAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25z
dHJhaW50KQogICAgICAgICBjbGllbnREYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBl
bmQoc3BhY2UpOwogSUdOT1JFX1dBUk5JTkdTX0VORAogSUdOT1JFX1dBUk5JTkdTX0VORApAQCAt
MTIyOCw3ICsxMjMzLDcgQEAgdm9pZCBKU1Rlc3RJbnRlcmZhY2U6OmFuYWx5emVIZWFwKEpTQ2Vs
bAogICAgIEJhc2U6OmFuYWx5emVIZWFwKGNlbGwsIGFuYWx5emVyKTsKIH0KIAotYm9vbCBKU1Rl
c3RJbnRlcmZhY2VPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8
SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3Qg
Y2hhcioqIHJlYXNvbikKK2Jvb2wgSlNUZXN0SW50ZXJmYWNlT3duZXI6OmlzUmVhY2hhYmxlRnJv
bU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgQWJz
dHJhY3RTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikKIHsKICAgICBh
dXRvKiBqc1Rlc3RJbnRlcmZhY2UgPSBqc0Nhc3Q8SlNUZXN0SW50ZXJmYWNlKj4oaGFuZGxlLnNs
b3QoKS0+YXNDZWxsKCkpOwogICAgIGF1dG8mIHdyYXBwZWQgPSBqc1Rlc3RJbnRlcmZhY2UtPndy
YXBwZWQoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RJbnRlcmZhY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW50ZXJmYWNlLmgJKHJldmlzaW9uIDI3MzExOSkKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbnRlcmZhY2UuaAko
d29ya2luZyBjb3B5KQpAQCAtOTEsNyArOTEsNyBAQCBwcm90ZWN0ZWQ6CiAKIGNsYXNzIFdFQkNP
UkVfRVhQT1JUIEpTVGVzdEludGVyZmFjZU93bmVyIGZpbmFsIDogcHVibGljIEpTQzo6V2Vha0hh
bmRsZU93bmVyIHsKIHB1YmxpYzoKLSAgICBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3Rz
KEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6U2xvdFZpc2l0
b3ImLCBjb25zdCBjaGFyKiopIGZpbmFsOworICAgIGJvb2wgaXNSZWFjaGFibGVGcm9tT3BhcXVl
Um9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCwgSlNDOjpBYnN0
cmFjdFNsb3RWaXNpdG9yJiwgY29uc3QgY2hhcioqKSBmaW5hbDsKICAgICB2b2lkIGZpbmFsaXpl
KEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQpIGZpbmFsOwogfTsKIApJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEludGVy
ZmFjZUxlYWRpbmdVbmRlcnNjb3JlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmUu
Y3BwCShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSGVhcEFuYWx5
emVyLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNDSW5saW5lcy5oPgogI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL0pTRGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLmg+CisjaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvU2xvdFZpc2l0b3JNYWNyb3MuaD4KICNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9TdWJzcGFjZUlubGluZXMuaD4KICNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CiAj
aW5jbHVkZSA8d3RmL1BvaW50ZXJQcmVwYXJhdGlvbnMuaD4KQEAgLTE5NCw3ICsxOTUsOSBAQCBK
U0M6Oklzb1N1YnNwYWNlKiBKU1Rlc3RJbnRlcmZhY2VMZWFkaW5nCiAgICAgYXV0byogc3BhY2Ug
PSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RJbnRlcmZhY2VMZWFkaW5nVW5kZXJzY29yZS5nZXQo
KTsKIElHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCiBJR05PUkVfV0FS
TklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKLSAgICBpZiAoJkpTVGVzdEludGVy
ZmFjZUxlYWRpbmdVbmRlcnNjb3JlOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzICE9ICZKU0M6OkpT
Q2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50cykKKyAgICB2b2lkICgqbXlWaXNpdE91dHB1dENv
bnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0SW50ZXJm
YWNlTGVhZGluZ1VuZGVyc2NvcmU6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAgdm9pZCAo
KmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNp
dG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKKyAgICBpZiAobXlW
aXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQogICAg
ICAgICBjbGllbnREYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOwog
SUdOT1JFX1dBUk5JTkdTX0VORAogSUdOT1JFX1dBUk5JTkdTX0VORApAQCAtMjEwLDcgKzIxMyw3
IEBAIHZvaWQgSlNUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmU6OmEKICAgICBCYXNlOjph
bmFseXplSGVhcChjZWxsLCBhbmFseXplcik7CiB9CiAKLWJvb2wgSlNUZXN0SW50ZXJmYWNlTGVh
ZGluZ1VuZGVyc2NvcmVPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5k
bGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBTbG90VmlzaXRvciYgdmlzaXRvciwgY29u
c3QgY2hhcioqIHJlYXNvbikKK2Jvb2wgSlNUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmVP
d25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3du
PiBoYW5kbGUsIHZvaWQqLCBBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFy
KiogcmVhc29uKQogewogICAgIFVOVVNFRF9QQVJBTShoYW5kbGUpOwogICAgIFVOVVNFRF9QQVJB
TSh2aXNpdG9yKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RJbnRlcmZhY2VMZWFkaW5nVW5kZXJzY29yZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbnRlcmZhY2VMZWFkaW5n
VW5kZXJzY29yZS5oCShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmUuaAkod29y
a2luZyBjb3B5KQpAQCAtNjUsNyArNjUsNyBAQCBwcm90ZWN0ZWQ6CiAKIGNsYXNzIEpTVGVzdElu
dGVyZmFjZUxlYWRpbmdVbmRlcnNjb3JlT3duZXIgZmluYWwgOiBwdWJsaWMgSlNDOjpXZWFrSGFu
ZGxlT3duZXIgewogcHVibGljOgotICAgIGJvb2wgaXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMo
SlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCwgSlNDOjpTbG90VmlzaXRv
ciYsIGNvbnN0IGNoYXIqKikgZmluYWw7CisgICAgYm9vbCBpc1JlYWNoYWJsZUZyb21PcGFxdWVS
b290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0LCBKU0M6OkFic3Ry
YWN0U2xvdFZpc2l0b3ImLCBjb25zdCBjaGFyKiopIGZpbmFsOwogICAgIHZvaWQgZmluYWxpemUo
SlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCkgZmluYWw7CiB9OwogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SXRlcmFi
bGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RJdGVyYWJsZS5jcHAJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJdGVyYWJsZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM4LDYgKzM4LDcgQEAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9IZWFwQW5h
bHl6ZXIuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0NJbmxpbmVzLmg+CiAjaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvSlNEZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUuaD4KKyNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9TbG90VmlzaXRvck1hY3Jvcy5oPgogI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL1N1YnNwYWNlSW5saW5lcy5oPgogI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4K
ICNpbmNsdWRlIDx3dGYvUG9pbnRlclByZXBhcmF0aW9ucy5oPgpAQCAtMjA4LDcgKzIwOSw5IEBA
IHB1YmxpYzoKICAgICAgICAgYXV0byogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RJ
dGVyYWJsZUl0ZXJhdG9yLmdldCgpOwogSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJs
ZS1jb2RlIikKIElHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQot
ICAgICAgICBpZiAoJlRlc3RJdGVyYWJsZUl0ZXJhdG9yOjp2aXNpdE91dHB1dENvbnN0cmFpbnRz
ICE9ICZKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50cykKKyAgICAgICAgdm9pZCAo
Km15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3Im
KSA9IFRlc3RJdGVyYWJsZUl0ZXJhdG9yOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOworICAgICAg
ICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6
U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOworICAg
ICAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25z
dHJhaW50KQogICAgICAgICAgICAgY2xpZW50RGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCku
YXBwZW5kKHNwYWNlKTsKIElHTk9SRV9XQVJOSU5HU19FTkQKIElHTk9SRV9XQVJOSU5HU19FTkQK
QEAgLTI5OCw3ICszMDEsOSBAQCBKU0M6Oklzb1N1YnNwYWNlKiBKU1Rlc3RJdGVyYWJsZTo6c3Vi
c3BhCiAgICAgYXV0byogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RJdGVyYWJsZS5n
ZXQoKTsKIElHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCiBJR05PUkVf
V0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKLSAgICBpZiAoJkpTVGVzdEl0
ZXJhYmxlOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzICE9ICZKU0M6OkpTQ2VsbDo6dmlzaXRPdXRw
dXRDb25zdHJhaW50cykKKyAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6
SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0SXRlcmFibGU6OnZpc2l0T3V0cHV0
Q29uc3RyYWludHM7CisgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlND
OjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRD
b25zdHJhaW50czsKKyAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlz
aXRPdXRwdXRDb25zdHJhaW50KQogICAgICAgICBjbGllbnREYXRhLm91dHB1dENvbnN0cmFpbnRT
cGFjZXMoKS5hcHBlbmQoc3BhY2UpOwogSUdOT1JFX1dBUk5JTkdTX0VORAogSUdOT1JFX1dBUk5J
TkdTX0VORApAQCAtMzE0LDcgKzMxOSw3IEBAIHZvaWQgSlNUZXN0SXRlcmFibGU6OmFuYWx5emVI
ZWFwKEpTQ2VsbCoKICAgICBCYXNlOjphbmFseXplSGVhcChjZWxsLCBhbmFseXplcik7CiB9CiAK
LWJvb2wgSlNUZXN0SXRlcmFibGVPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlND
OjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBTbG90VmlzaXRvciYgdmlzaXRv
ciwgY29uc3QgY2hhcioqIHJlYXNvbikKK2Jvb2wgSlNUZXN0SXRlcmFibGVPd25lcjo6aXNSZWFj
aGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZv
aWQqLCBBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQog
ewogICAgIFVOVVNFRF9QQVJBTShoYW5kbGUpOwogICAgIFVOVVNFRF9QQVJBTSh2aXNpdG9yKTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJdGVy
YWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RJdGVyYWJsZS5oCShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SXRlcmFibGUuaAkod29ya2luZyBjb3B5
KQpAQCAtNjUsNyArNjUsNyBAQCBwcm90ZWN0ZWQ6CiAKIGNsYXNzIEpTVGVzdEl0ZXJhYmxlT3du
ZXIgZmluYWwgOiBwdWJsaWMgSlNDOjpXZWFrSGFuZGxlT3duZXIgewogcHVibGljOgotICAgIGJv
b2wgaXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwg
dm9pZCogY29udGV4dCwgSlNDOjpTbG90VmlzaXRvciYsIGNvbnN0IGNoYXIqKikgZmluYWw7Cisg
ICAgYm9vbCBpc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25v
d24+LCB2b2lkKiBjb250ZXh0LCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImLCBjb25zdCBjaGFy
KiopIGZpbmFsOwogICAgIHZvaWQgZmluYWxpemUoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwg
dm9pZCogY29udGV4dCkgZmluYWw7CiB9OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3IuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RKU0J1
aWx0aW5Db25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rvci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9GdW5jdGlvblByb3RvdHlwZS5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTQ0lubGlu
ZXMuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0Rlc3RydWN0aWJsZU9iamVjdEhlYXBD
ZWxsVHlwZS5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1Nsb3RWaXNpdG9yTWFjcm9zLmg+
CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvU3Vic3BhY2VJbmxpbmVzLmg+CiAjaW5jbHVkZSA8
d3RmL0dldFB0ci5oPgogI2luY2x1ZGUgPHd0Zi9Qb2ludGVyUHJlcGFyYXRpb25zLmg+CkBAIC0y
NDIsNyArMjQzLDkgQEAgSlNDOjpJc29TdWJzcGFjZSogSlNUZXN0SlNCdWlsdGluQ29uc3RydQog
ICAgIGF1dG8qIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0SlNCdWlsdGluQ29uc3Ry
dWN0b3IuZ2V0KCk7CiBJR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQog
SUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgaWYgKCZK
U1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rvcjo6dmlzaXRPdXRwdXRDb25zdHJhaW50cyAhPSAmSlND
OjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHMpCisgICAgdm9pZCAoKm15VmlzaXRPdXRw
dXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdEpT
QnVpbHRpbkNvbnN0cnVjdG9yOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOworICAgIHZvaWQgKCpq
c0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRv
ciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAgaWYgKG15Vmlz
aXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKICAgICAg
ICAgY2xpZW50RGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKIElH
Tk9SRV9XQVJOSU5HU19FTkQKIElHTk9SRV9XQVJOSU5HU19FTkQKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RMZWdhY3lGYWN0b3J5RnVuY3Rpb24u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RMZWdhY3lGYWN0b3J5RnVuY3Rpb24uY3BwCShyZXZpc2lvbiAyNzMxMTkpCisrKyBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TGVnYWN5RmFjdG9y
eUZ1bmN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsNiArMzcsNyBAQAogI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL0hlYXBBbmFseXplci5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L0pTQ0lubGluZXMuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0Rlc3RydWN0aWJsZU9i
amVjdEhlYXBDZWxsVHlwZS5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1Nsb3RWaXNpdG9y
TWFjcm9zLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvU3Vic3BhY2VJbmxpbmVzLmg+CiAj
aW5jbHVkZSA8d3RmL0dldFB0ci5oPgogI2luY2x1ZGUgPHd0Zi9Qb2ludGVyUHJlcGFyYXRpb25z
Lmg+CkBAIC0yMzAsNyArMjMxLDkgQEAgSlNDOjpJc29TdWJzcGFjZSogSlNUZXN0TGVnYWN5RmFj
dG9yeUZ1bgogICAgIGF1dG8qIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0TGVnYWN5
RmFjdG9yeUZ1bmN0aW9uLmdldCgpOwogSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJs
ZS1jb2RlIikKIElHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQot
ICAgIGlmICgmSlNUZXN0TGVnYWN5RmFjdG9yeUZ1bmN0aW9uOjp2aXNpdE91dHB1dENvbnN0cmFp
bnRzICE9ICZKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50cykKKyAgICB2b2lkICgq
bXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYp
ID0gSlNUZXN0TGVnYWN5RmFjdG9yeUZ1bmN0aW9uOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwor
ICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlND
OjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Cisg
ICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3Ry
YWludCkKICAgICAgICAgY2xpZW50RGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5k
KHNwYWNlKTsKIElHTk9SRV9XQVJOSU5HU19FTkQKIElHTk9SRV9XQVJOSU5HU19FTkQKQEAgLTI0
Niw3ICsyNDksNyBAQCB2b2lkIEpTVGVzdExlZ2FjeUZhY3RvcnlGdW5jdGlvbjo6YW5hbHl6CiAg
ICAgQmFzZTo6YW5hbHl6ZUhlYXAoY2VsbCwgYW5hbHl6ZXIpOwogfQogCi1ib29sIEpTVGVzdExl
Z2FjeUZhY3RvcnlGdW5jdGlvbk93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6
OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIFNsb3RWaXNpdG9yJiB2aXNpdG9y
LCBjb25zdCBjaGFyKiogcmVhc29uKQorYm9vbCBKU1Rlc3RMZWdhY3lGYWN0b3J5RnVuY3Rpb25P
d25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3du
PiBoYW5kbGUsIHZvaWQqLCBBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFy
KiogcmVhc29uKQogewogICAgIGF1dG8qIGpzVGVzdExlZ2FjeUZhY3RvcnlGdW5jdGlvbiA9IGpz
Q2FzdDxKU1Rlc3RMZWdhY3lGYWN0b3J5RnVuY3Rpb24qPihoYW5kbGUuc2xvdCgpLT5hc0NlbGwo
KSk7CiAgICAgYXV0byYgd3JhcHBlZCA9IGpzVGVzdExlZ2FjeUZhY3RvcnlGdW5jdGlvbi0+d3Jh
cHBlZCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdExlZ2FjeUZhY3RvcnlGdW5jdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RMZWdhY3lGYWN0b3J5RnVuY3Rpb24uaAko
cmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdExlZ2FjeUZhY3RvcnlGdW5jdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC02Niw3
ICs2Niw3IEBAIHByb3RlY3RlZDoKIAogY2xhc3MgSlNUZXN0TGVnYWN5RmFjdG9yeUZ1bmN0aW9u
T3duZXIgZmluYWwgOiBwdWJsaWMgSlNDOjpXZWFrSGFuZGxlT3duZXIgewogcHVibGljOgotICAg
IGJvb2wgaXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3du
Piwgdm9pZCogY29udGV4dCwgSlNDOjpTbG90VmlzaXRvciYsIGNvbnN0IGNoYXIqKikgZmluYWw7
CisgICAgYm9vbCBpc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVu
a25vd24+LCB2b2lkKiBjb250ZXh0LCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImLCBjb25zdCBj
aGFyKiopIGZpbmFsOwogICAgIHZvaWQgZmluYWxpemUoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3du
Piwgdm9pZCogY29udGV4dCkgZmluYWw7CiB9OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TGVnYWN5Tm9JbnRlcmZhY2VPYmplY3QuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RMZWdhY3lOb0ludGVyZmFjZU9iamVjdC5jcHAJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RMZWdhY3lOb0ludGVyZmFj
ZU9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDYgKzQxLDcgQEAKICNpbmNsdWRlIDxK
YXZhU2NyaXB0Q29yZS9IZWFwQW5hbHl6ZXIuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9K
U0NJbmxpbmVzLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNEZXN0cnVjdGlibGVPYmpl
Y3RIZWFwQ2VsbFR5cGUuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9TbG90VmlzaXRvck1h
Y3Jvcy5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1N1YnNwYWNlSW5saW5lcy5oPgogI2lu
Y2x1ZGUgPHd0Zi9HZXRQdHIuaD4KICNpbmNsdWRlIDx3dGYvUG9pbnRlclByZXBhcmF0aW9ucy5o
PgpAQCAtMzgxLDcgKzM4Miw5IEBAIEpTQzo6SXNvU3Vic3BhY2UqIEpTVGVzdExlZ2FjeU5vSW50
ZXJmYWMKICAgICBhdXRvKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdExlZ2FjeU5v
SW50ZXJmYWNlT2JqZWN0LmdldCgpOwogSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJs
ZS1jb2RlIikKIElHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQot
ICAgIGlmICgmSlNUZXN0TGVnYWN5Tm9JbnRlcmZhY2VPYmplY3Q6OnZpc2l0T3V0cHV0Q29uc3Ry
YWludHMgIT0gJkpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzKQorICAgIHZvaWQg
KCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9y
JikgPSBKU1Rlc3RMZWdhY3lOb0ludGVyZmFjZU9iamVjdDo6dmlzaXRPdXRwdXRDb25zdHJhaW50
czsKKyAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCos
IEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRz
OworICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENv
bnN0cmFpbnQpCiAgICAgICAgIGNsaWVudERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFw
cGVuZChzcGFjZSk7CiBJR05PUkVfV0FSTklOR1NfRU5ECiBJR05PUkVfV0FSTklOR1NfRU5ECkBA
IC0zOTcsNyArNDAwLDcgQEAgdm9pZCBKU1Rlc3RMZWdhY3lOb0ludGVyZmFjZU9iamVjdDo6YW5h
bAogICAgIEJhc2U6OmFuYWx5emVIZWFwKGNlbGwsIGFuYWx5emVyKTsKIH0KIAotYm9vbCBKU1Rl
c3RMZWdhY3lOb0ludGVyZmFjZU9iamVjdE93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290
cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIFNsb3RWaXNpdG9yJiB2
aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQorYm9vbCBKU1Rlc3RMZWdhY3lOb0ludGVyZmFj
ZU9iamVjdE93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6
OlVua25vd24+IGhhbmRsZSwgdm9pZCosIEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNv
bnN0IGNoYXIqKiByZWFzb24pCiB7CiAgICAgVU5VU0VEX1BBUkFNKGhhbmRsZSk7CiAgICAgVU5V
U0VEX1BBUkFNKHZpc2l0b3IpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdExlZ2FjeU5vSW50ZXJmYWNlT2JqZWN0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdExlZ2FjeU5vSW50
ZXJmYWNlT2JqZWN0LmgJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RMZWdhY3lOb0ludGVyZmFjZU9iamVjdC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC03Myw3ICs3Myw3IEBAIHByb3RlY3RlZDoKIAogY2xhc3MgSlNUZXN0TGVn
YWN5Tm9JbnRlcmZhY2VPYmplY3RPd25lciBmaW5hbCA6IHB1YmxpYyBKU0M6OldlYWtIYW5kbGVP
d25lciB7CiBwdWJsaWM6Ci0gICAgYm9vbCBpc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6
OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0LCBKU0M6OlNsb3RWaXNpdG9yJiwg
Y29uc3QgY2hhcioqKSBmaW5hbDsKKyAgICBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3Rz
KEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6QWJzdHJhY3RT
bG90VmlzaXRvciYsIGNvbnN0IGNoYXIqKikgZmluYWw7CiAgICAgdm9pZCBmaW5hbGl6ZShKU0M6
OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0KSBmaW5hbDsKIH07CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RMZWdhY3lPdmVy
cmlkZUJ1aWx0SW5zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0TGVnYWN5T3ZlcnJpZGVCdWlsdElucy5jcHAJKHJldmlzaW9u
IDI3MzExOSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RMZWdhY3lPdmVycmlkZUJ1aWx0SW5zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksNiArMzks
NyBAQAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0hlYXBBbmFseXplci5oPgogI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL0pTQ0lubGluZXMuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9K
U0Rlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZS5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL1Nsb3RWaXNpdG9yTWFjcm9zLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvU3Vic3Bh
Y2VJbmxpbmVzLmg+CiAjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgogI2luY2x1ZGUgPHd0Zi9Qb2lu
dGVyUHJlcGFyYXRpb25zLmg+CkBAIC0yNTgsNyArMjU5LDkgQEAgSlNDOjpJc29TdWJzcGFjZSog
SlNUZXN0TGVnYWN5T3ZlcnJpZGVCdQogICAgIGF1dG8qIHNwYWNlID0gc3BhY2VzLm1fc3Vic3Bh
Y2VGb3JUZXN0TGVnYWN5T3ZlcnJpZGVCdWlsdElucy5nZXQoKTsKIElHTk9SRV9XQVJOSU5HU19C
RUdJTigidW5yZWFjaGFibGUtY29kZSIpCiBJR05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9n
aWNhbC1jb21wYXJlIikKLSAgICBpZiAoJkpTVGVzdExlZ2FjeU92ZXJyaWRlQnVpbHRJbnM6OnZp
c2l0T3V0cHV0Q29uc3RyYWludHMgIT0gJkpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFp
bnRzKQorICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBK
U0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3RMZWdhY3lPdmVycmlkZUJ1aWx0SW5zOjp2aXNpdE91
dHB1dENvbnN0cmFpbnRzOworICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQp
KEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0
cHV0Q29uc3RyYWludHM7CisgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2Vs
bFZpc2l0T3V0cHV0Q29uc3RyYWludCkKICAgICAgICAgY2xpZW50RGF0YS5vdXRwdXRDb25zdHJh
aW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKIElHTk9SRV9XQVJOSU5HU19FTkQKIElHTk9SRV9X
QVJOSU5HU19FTkQKQEAgLTI3NCw3ICsyNzcsNyBAQCB2b2lkIEpTVGVzdExlZ2FjeU92ZXJyaWRl
QnVpbHRJbnM6OmFuYWx5CiAgICAgQmFzZTo6YW5hbHl6ZUhlYXAoY2VsbCwgYW5hbHl6ZXIpOwog
fQogCi1ib29sIEpTVGVzdExlZ2FjeU92ZXJyaWRlQnVpbHRJbnNPd25lcjo6aXNSZWFjaGFibGVG
cm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBT
bG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikKK2Jvb2wgSlNUZXN0TGVn
YWN5T3ZlcnJpZGVCdWlsdEluc093bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6
OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIEFic3RyYWN0U2xvdFZpc2l0b3Im
IHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCiB7CiAgICAgVU5VU0VEX1BBUkFNKGhhbmRs
ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHZpc2l0b3IpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
TGVnYWN5T3ZlcnJpZGVCdWlsdElucy5oCShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TGVnYWN5T3ZlcnJpZGVCdWlsdElu
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC03MCw3ICs3MCw3IEBAIHByb3RlY3RlZDoKIAogY2xhc3Mg
SlNUZXN0TGVnYWN5T3ZlcnJpZGVCdWlsdEluc093bmVyIGZpbmFsIDogcHVibGljIEpTQzo6V2Vh
a0hhbmRsZU93bmVyIHsKIHB1YmxpYzoKLSAgICBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJv
b3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6U2xvdFZp
c2l0b3ImLCBjb25zdCBjaGFyKiopIGZpbmFsOworICAgIGJvb2wgaXNSZWFjaGFibGVGcm9tT3Bh
cXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCwgSlNDOjpB
YnN0cmFjdFNsb3RWaXNpdG9yJiwgY29uc3QgY2hhcioqKSBmaW5hbDsKICAgICB2b2lkIGZpbmFs
aXplKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQpIGZpbmFsOwogfTsK
IApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE1h
cExpa2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RNYXBMaWtlLmNwcAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE1hcExpa2UuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zOSw2ICszOSw3IEBACiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSGVhcEFu
YWx5emVyLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNDSW5saW5lcy5oPgogI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL0pTRGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLmg+Cisj
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvU2xvdFZpc2l0b3JNYWNyb3MuaD4KICNpbmNsdWRlIDxK
YXZhU2NyaXB0Q29yZS9TdWJzcGFjZUlubGluZXMuaD4KICNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+
CiAjaW5jbHVkZSA8d3RmL1BvaW50ZXJQcmVwYXJhdGlvbnMuaD4KQEAgLTM4MCw3ICszODEsOSBA
QCBKU0M6Oklzb1N1YnNwYWNlKiBKU1Rlc3RNYXBMaWtlOjpzdWJzcGFjCiAgICAgYXV0byogc3Bh
Y2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RNYXBMaWtlLmdldCgpOwogSUdOT1JFX1dBUk5J
TkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKIElHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1
dG9sb2dpY2FsLWNvbXBhcmUiKQotICAgIGlmICgmSlNUZXN0TWFwTGlrZTo6dmlzaXRPdXRwdXRD
b25zdHJhaW50cyAhPSAmSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHMpCisgICAg
dm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZp
c2l0b3ImKSA9IEpTVGVzdE1hcExpa2U6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAgdm9p
ZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RW
aXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKKyAgICBpZiAo
bXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQog
ICAgICAgICBjbGllbnREYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2Up
OwogSUdOT1JFX1dBUk5JTkdTX0VORAogSUdOT1JFX1dBUk5JTkdTX0VORApAQCAtMzk2LDcgKzM5
OSw3IEBAIHZvaWQgSlNUZXN0TWFwTGlrZTo6YW5hbHl6ZUhlYXAoSlNDZWxsKiAKICAgICBCYXNl
OjphbmFseXplSGVhcChjZWxsLCBhbmFseXplcik7CiB9CiAKLWJvb2wgSlNUZXN0TWFwTGlrZU93
bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+
IGhhbmRsZSwgdm9pZCosIFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29u
KQorYm9vbCBKU1Rlc3RNYXBMaWtlT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpT
Qzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgQWJzdHJhY3RTbG90VmlzaXRv
ciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikKIHsKICAgICBVTlVTRURfUEFSQU0oaGFu
ZGxlKTsKICAgICBVTlVTRURfUEFSQU0odmlzaXRvcik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TWFwTGlrZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RNYXBMaWtlLmgJKHJl
dmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RNYXBMaWtlLmgJKHdvcmtpbmcgY29weSkKQEAgLTY1LDcgKzY1LDcgQEAgcHJvdGVj
dGVkOgogCiBjbGFzcyBKU1Rlc3RNYXBMaWtlT3duZXIgZmluYWwgOiBwdWJsaWMgSlNDOjpXZWFr
SGFuZGxlT3duZXIgewogcHVibGljOgotICAgIGJvb2wgaXNSZWFjaGFibGVGcm9tT3BhcXVlUm9v
dHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCwgSlNDOjpTbG90Vmlz
aXRvciYsIGNvbnN0IGNoYXIqKikgZmluYWw7CisgICAgYm9vbCBpc1JlYWNoYWJsZUZyb21PcGFx
dWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0LCBKU0M6OkFi
c3RyYWN0U2xvdFZpc2l0b3ImLCBjb25zdCBjaGFyKiopIGZpbmFsOwogICAgIHZvaWQgZmluYWxp
emUoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCkgZmluYWw7CiB9Owog
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TWFw
TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRl
bk9wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9u
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDYgKzQwLDcgQEAKICNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9IZWFwQW5hbHl6ZXIuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0NJbmxp
bmVzLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNEZXN0cnVjdGlibGVPYmplY3RIZWFw
Q2VsbFR5cGUuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9TbG90VmlzaXRvck1hY3Jvcy5o
PgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1N1YnNwYWNlSW5saW5lcy5oPgogI2luY2x1ZGUg
PHd0Zi9HZXRQdHIuaD4KICNpbmNsdWRlIDx3dGYvUG9pbnRlclByZXBhcmF0aW9ucy5oPgpAQCAt
MzkyLDcgKzM5Myw5IEBAIEpTQzo6SXNvU3Vic3BhY2UqIEpTVGVzdE1hcExpa2VXaXRoT3ZlcnIK
ICAgICBhdXRvKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE1hcExpa2VXaXRoT3Zl
cnJpZGRlbk9wZXJhdGlvbnMuZ2V0KCk7CiBJR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hh
YmxlLWNvZGUiKQogSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIp
Ci0gICAgaWYgKCZKU1Rlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zOjp2aXNpdE91
dHB1dENvbnN0cmFpbnRzICE9ICZKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50cykK
KyAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpT
bG90VmlzaXRvciYpID0gSlNUZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9uczo6dmlz
aXRPdXRwdXRDb25zdHJhaW50czsKKyAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJh
aW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNp
dE91dHB1dENvbnN0cmFpbnRzOworICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBq
c0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCiAgICAgICAgIGNsaWVudERhdGEub3V0cHV0Q29u
c3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7CiBJR05PUkVfV0FSTklOR1NfRU5ECiBJR05P
UkVfV0FSTklOR1NfRU5ECkBAIC00MDgsNyArNDExLDcgQEAgdm9pZCBKU1Rlc3RNYXBMaWtlV2l0
aE92ZXJyaWRkZW5PcGVyYXRpbwogICAgIEJhc2U6OmFuYWx5emVIZWFwKGNlbGwsIGFuYWx5emVy
KTsKIH0KIAotYm9vbCBKU1Rlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zT3duZXI6
OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFu
ZGxlLCB2b2lkKiwgU2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCiti
b29sIEpTVGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnNPd25lcjo6aXNSZWFjaGFi
bGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQq
LCBBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQogewog
ICAgIFVOVVNFRF9QQVJBTShoYW5kbGUpOwogICAgIFVOVVNFRF9QQVJBTSh2aXNpdG9yKTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RNYXBMaWtl
V2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJh
dGlvbnMuaAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnMuaAkod29y
a2luZyBjb3B5KQpAQCAtNjUsNyArNjUsNyBAQCBwcm90ZWN0ZWQ6CiAKIGNsYXNzIEpTVGVzdE1h
cExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnNPd25lciBmaW5hbCA6IHB1YmxpYyBKU0M6Oldl
YWtIYW5kbGVPd25lciB7CiBwdWJsaWM6Ci0gICAgYm9vbCBpc1JlYWNoYWJsZUZyb21PcGFxdWVS
b290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0LCBKU0M6OlNsb3RW
aXNpdG9yJiwgY29uc3QgY2hhcioqKSBmaW5hbDsKKyAgICBib29sIGlzUmVhY2hhYmxlRnJvbU9w
YXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6
QWJzdHJhY3RTbG90VmlzaXRvciYsIGNvbnN0IGNoYXIqKikgZmluYWw7CiAgICAgdm9pZCBmaW5h
bGl6ZShKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0KSBmaW5hbDsKIH07
CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RO
YW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEFuZEluZGV4ZWRT
ZXR0ZXJOb0lkZW50aWZpZXIuY3BwCShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9J
ZGVudGlmaWVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL0pTQ0lubGluZXMuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9K
U0Rlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZS5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL1Byb3BlcnR5TmFtZUFycmF5Lmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvU2xvdFZp
c2l0b3JNYWNyb3MuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9TdWJzcGFjZUlubGluZXMu
aD4KICNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CiAjaW5jbHVkZSA8d3RmL1BvaW50ZXJQcmVwYXJh
dGlvbnMuaD4KQEAgLTMzOCw3ICszMzksOSBAQCBKU0M6Oklzb1N1YnNwYWNlKiBKU1Rlc3ROYW1l
ZEFuZEluZGV4ZWRTCiAgICAgYXV0byogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RO
YW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIuZ2V0KCk7CiBJR05PUkVfV0FSTklOR1Nf
QkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQogSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xv
Z2ljYWwtY29tcGFyZSIpCi0gICAgaWYgKCZKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lk
ZW50aWZpZXI6OnZpc2l0T3V0cHV0Q29uc3RyYWludHMgIT0gJkpTQzo6SlNDZWxsOjp2aXNpdE91
dHB1dENvbnN0cmFpbnRzKQorICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlND
OjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0
ZXJOb0lkZW50aWZpZXI6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAgdm9pZCAoKmpzQ2Vs
bFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikg
PSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKKyAgICBpZiAobXlWaXNpdE91
dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQogICAgICAgICBj
bGllbnREYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOwogSUdOT1JF
X1dBUk5JTkdTX0VORAogSUdOT1JFX1dBUk5JTkdTX0VORApAQCAtMzU0LDcgKzM1Nyw3IEBAIHZv
aWQgSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVudGkKICAgICBCYXNlOjphbmFseXpl
SGVhcChjZWxsLCBhbmFseXplcik7CiB9CiAKLWJvb2wgSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0
dGVyTm9JZGVudGlmaWVyT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFu
ZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgU2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNv
bnN0IGNoYXIqKiByZWFzb24pCitib29sIEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRl
bnRpZmllck93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6
OlVua25vd24+IGhhbmRsZSwgdm9pZCosIEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNv
bnN0IGNoYXIqKiByZWFzb24pCiB7CiAgICAgVU5VU0VEX1BBUkFNKGhhbmRsZSk7CiAgICAgVU5V
U0VEX1BBUkFNKHZpc2l0b3IpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RO
YW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIuaAkocmV2aXNpb24gMjczMTE5KQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkQW5kSW5k
ZXhlZFNldHRlck5vSWRlbnRpZmllci5oCSh3b3JraW5nIGNvcHkpCkBAIC03Myw3ICs3Myw3IEBA
IHByb3RlY3RlZDoKIAogY2xhc3MgSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVudGlm
aWVyT3duZXIgZmluYWwgOiBwdWJsaWMgSlNDOjpXZWFrSGFuZGxlT3duZXIgewogcHVibGljOgot
ICAgIGJvb2wgaXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtu
b3duPiwgdm9pZCogY29udGV4dCwgSlNDOjpTbG90VmlzaXRvciYsIGNvbnN0IGNoYXIqKikgZmlu
YWw7CisgICAgYm9vbCBpc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6
OlVua25vd24+LCB2b2lkKiBjb250ZXh0LCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImLCBjb25z
dCBjaGFyKiopIGZpbmFsOwogICAgIHZvaWQgZmluYWxpemUoSlNDOjpIYW5kbGU8SlNDOjpVbmtu
b3duPiwgdm9pZCogY29udGV4dCkgZmluYWw7CiB9OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dp
bmdFeGNlcHRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlv
bi5jcHAJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9KU0NJbmxpbmVzLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNEZXN0cnVjdGli
bGVPYmplY3RIZWFwQ2VsbFR5cGUuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9Qcm9wZXJ0
eU5hbWVBcnJheS5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1Nsb3RWaXNpdG9yTWFjcm9z
Lmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvU3Vic3BhY2VJbmxpbmVzLmg+CiAjaW5jbHVk
ZSA8d3RmL0dldFB0ci5oPgogI2luY2x1ZGUgPHd0Zi9Qb2ludGVyUHJlcGFyYXRpb25zLmg+CkBA
IC0zMzgsNyArMzM5LDkgQEAgSlNDOjpJc29TdWJzcGFjZSogSlNUZXN0TmFtZWRBbmRJbmRleGVk
UwogICAgIGF1dG8qIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0TmFtZWRBbmRJbmRl
eGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24uZ2V0KCk7CiBJR05PUkVfV0FSTklOR1NfQkVHSU4o
InVucmVhY2hhYmxlLWNvZGUiKQogSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwt
Y29tcGFyZSIpCi0gICAgaWYgKCZKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4
Y2VwdGlvbjo6dmlzaXRPdXRwdXRDb25zdHJhaW50cyAhPSAmSlNDOjpKU0NlbGw6OnZpc2l0T3V0
cHV0Q29uc3RyYWludHMpCisgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6
OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRl
clRocm93aW5nRXhjZXB0aW9uOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOworICAgIHZvaWQgKCpq
c0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRv
ciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAgaWYgKG15Vmlz
aXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKICAgICAg
ICAgY2xpZW50RGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKIElH
Tk9SRV9XQVJOSU5HU19FTkQKIElHTk9SRV9XQVJOSU5HU19FTkQKQEAgLTM1NCw3ICszNTcsNyBA
QCB2b2lkIEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5nCiAgICAgQmFzZTo6YW5h
bHl6ZUhlYXAoY2VsbCwgYW5hbHl6ZXIpOwogfQogCi1ib29sIEpTVGVzdE5hbWVkQW5kSW5kZXhl
ZFNldHRlclRocm93aW5nRXhjZXB0aW9uT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3Rz
KEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgU2xvdFZpc2l0b3ImIHZp
c2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCitib29sIEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNl
dHRlclRocm93aW5nRXhjZXB0aW9uT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpT
Qzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgQWJzdHJhY3RTbG90VmlzaXRv
ciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikKIHsKICAgICBVTlVTRURfUEFSQU0oaGFu
ZGxlKTsKICAgICBVTlVTRURfUEFSQU0odmlzaXRvcik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dp
bmdFeGNlcHRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24u
aAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uLmgJKHdv
cmtpbmcgY29weSkKQEAgLTczLDcgKzczLDcgQEAgcHJvdGVjdGVkOgogCiBjbGFzcyBKU1Rlc3RO
YW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbk93bmVyIGZpbmFsIDogcHVibGlj
IEpTQzo6V2Vha0hhbmRsZU93bmVyIHsKIHB1YmxpYzoKLSAgICBib29sIGlzUmVhY2hhYmxlRnJv
bU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIEpT
Qzo6U2xvdFZpc2l0b3ImLCBjb25zdCBjaGFyKiopIGZpbmFsOworICAgIGJvb2wgaXNSZWFjaGFi
bGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4
dCwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiwgY29uc3QgY2hhcioqKSBmaW5hbDsKICAgICB2
b2lkIGZpbmFsaXplKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQpIGZp
bmFsOwogfTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRB
bmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIuY3BwCShyZXZpc2lvbiAyNzMxMTkpCisrKyBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRBbmRJbmRl
eGVkU2V0dGVyV2l0aElkZW50aWZpZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw2ICszOCw3
IEBACiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNDSW5saW5lcy5oPgogI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL0pTRGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLmg+CiAjaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvUHJvcGVydHlOYW1lQXJyYXkuaD4KKyNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9TbG90VmlzaXRvck1hY3Jvcy5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1N1
YnNwYWNlSW5saW5lcy5oPgogI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KICNpbmNsdWRlIDx3dGYv
UG9pbnRlclByZXBhcmF0aW9ucy5oPgpAQCAtNDAyLDcgKzQwMyw5IEBAIEpTQzo6SXNvU3Vic3Bh
Y2UqIEpTVGVzdE5hbWVkQW5kSW5kZXhlZFMKICAgICBhdXRvKiBzcGFjZSA9IHNwYWNlcy5tX3N1
YnNwYWNlRm9yVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyLmdldCgpOwog
SUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKIElHTk9SRV9XQVJOSU5H
U19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQotICAgIGlmICgmSlNUZXN0TmFtZWRBbmRJ
bmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXI6OnZpc2l0T3V0cHV0Q29uc3RyYWludHMgIT0gJkpT
Qzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzKQorICAgIHZvaWQgKCpteVZpc2l0T3V0
cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3RO
YW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcjo6dmlzaXRPdXRwdXRDb25zdHJhaW50
czsKKyAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCos
IEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRz
OworICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENv
bnN0cmFpbnQpCiAgICAgICAgIGNsaWVudERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFw
cGVuZChzcGFjZSk7CiBJR05PUkVfV0FSTklOR1NfRU5ECiBJR05PUkVfV0FSTklOR1NfRU5ECkBA
IC00MTgsNyArNDIxLDcgQEAgdm9pZCBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRl
bgogICAgIEJhc2U6OmFuYWx5emVIZWFwKGNlbGwsIGFuYWx5emVyKTsKIH0KIAotYm9vbCBKU1Rl
c3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllck93bmVyOjppc1JlYWNoYWJsZUZy
b21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIFNs
b3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQorYm9vbCBKU1Rlc3ROYW1l
ZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllck93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFx
dWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIEFic3RyYWN0
U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCiB7CiAgICAgVU5VU0VE
X1BBUkFNKGhhbmRsZSk7CiAgICAgVU5VU0VEX1BBUkFNKHZpc2l0b3IpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkQW5kSW5kZXhlZFNl
dHRlcldpdGhJZGVudGlmaWVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlm
aWVyLmgJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5oCSh3
b3JraW5nIGNvcHkpCkBAIC03Myw3ICs3Myw3IEBAIHByb3RlY3RlZDoKIAogY2xhc3MgSlNUZXN0
TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXJPd25lciBmaW5hbCA6IHB1YmxpYyBK
U0M6OldlYWtIYW5kbGVPd25lciB7CiBwdWJsaWM6Ci0gICAgYm9vbCBpc1JlYWNoYWJsZUZyb21P
cGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0LCBKU0M6
OlNsb3RWaXNpdG9yJiwgY29uc3QgY2hhcioqKSBmaW5hbDsKKyAgICBib29sIGlzUmVhY2hhYmxl
RnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQs
IEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYsIGNvbnN0IGNoYXIqKikgZmluYWw7CiAgICAgdm9p
ZCBmaW5hbGl6ZShKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0KSBmaW5h
bDsKIH07CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3ROYW1lZERlbGV0ZXJOb0lkZW50aWZpZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZERlbGV0ZXJOb0lkZW50
aWZpZXIuY3BwCShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWREZWxldGVyTm9JZGVudGlmaWVyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0hlYXBB
bmFseXplci5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTQ0lubGluZXMuaD4KICNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9KU0Rlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZS5oPgor
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1Nsb3RWaXNpdG9yTWFjcm9zLmg+CiAjaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvU3Vic3BhY2VJbmxpbmVzLmg+CiAjaW5jbHVkZSA8d3RmL0dldFB0ci5o
PgogI2luY2x1ZGUgPHd0Zi9Qb2ludGVyUHJlcGFyYXRpb25zLmg+CkBAIC0yNTAsNyArMjUxLDkg
QEAgSlNDOjpJc29TdWJzcGFjZSogSlNUZXN0TmFtZWREZWxldGVyTm9JZAogICAgIGF1dG8qIHNw
YWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0TmFtZWREZWxldGVyTm9JZGVudGlmaWVyLmdl
dCgpOwogSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKIElHTk9SRV9X
QVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQotICAgIGlmICgmSlNUZXN0TmFt
ZWREZWxldGVyTm9JZGVudGlmaWVyOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzICE9ICZKU0M6OkpT
Q2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50cykKKyAgICB2b2lkICgqbXlWaXNpdE91dHB1dENv
bnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0TmFtZWRE
ZWxldGVyTm9JZGVudGlmaWVyOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOworICAgIHZvaWQgKCpq
c0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRv
ciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAgaWYgKG15Vmlz
aXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKICAgICAg
ICAgY2xpZW50RGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKIElH
Tk9SRV9XQVJOSU5HU19FTkQKIElHTk9SRV9XQVJOSU5HU19FTkQKQEAgLTI2Niw3ICsyNjksNyBA
QCB2b2lkIEpTVGVzdE5hbWVkRGVsZXRlck5vSWRlbnRpZmllcjo6YW5hCiAgICAgQmFzZTo6YW5h
bHl6ZUhlYXAoY2VsbCwgYW5hbHl6ZXIpOwogfQogCi1ib29sIEpTVGVzdE5hbWVkRGVsZXRlck5v
SWRlbnRpZmllck93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxK
U0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBj
aGFyKiogcmVhc29uKQorYm9vbCBKU1Rlc3ROYW1lZERlbGV0ZXJOb0lkZW50aWZpZXJPd25lcjo6
aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5k
bGUsIHZvaWQqLCBBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVh
c29uKQogewogICAgIFVOVVNFRF9QQVJBTShoYW5kbGUpOwogICAgIFVOVVNFRF9QQVJBTSh2aXNp
dG9yKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3ROYW1lZERlbGV0ZXJOb0lkZW50aWZpZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWREZWxldGVyTm9JZGVudGlmaWVy
LmgJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3ROYW1lZERlbGV0ZXJOb0lkZW50aWZpZXIuaAkod29ya2luZyBjb3B5KQpA
QCAtNzIsNyArNzIsNyBAQCBwcm90ZWN0ZWQ6CiAKIGNsYXNzIEpTVGVzdE5hbWVkRGVsZXRlck5v
SWRlbnRpZmllck93bmVyIGZpbmFsIDogcHVibGljIEpTQzo6V2Vha0hhbmRsZU93bmVyIHsKIHB1
YmxpYzoKLSAgICBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpT
Qzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6U2xvdFZpc2l0b3ImLCBjb25zdCBjaGFy
KiopIGZpbmFsOworICAgIGJvb2wgaXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5k
bGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9y
JiwgY29uc3QgY2hhcioqKSBmaW5hbDsKICAgICB2b2lkIGZpbmFsaXplKEpTQzo6SGFuZGxlPEpT
Qzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQpIGZpbmFsOwogfTsKIApJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkRGVsZXRlclRocm93aW5n
RXhjZXB0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWREZWxldGVyVGhyb3dpbmdFeGNlcHRpb24uY3BwCShyZXZp
c2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0TmFtZWREZWxldGVyVGhyb3dpbmdFeGNlcHRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSGVhcEFuYWx5emVyLmg+
CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNDSW5saW5lcy5oPgogI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL0pTRGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLmg+CisjaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvU2xvdFZpc2l0b3JNYWNyb3MuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9TdWJzcGFjZUlubGluZXMuaD4KICNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CiAjaW5jbHVk
ZSA8d3RmL1BvaW50ZXJQcmVwYXJhdGlvbnMuaD4KQEAgLTI1MCw3ICsyNTEsOSBAQCBKU0M6Oklz
b1N1YnNwYWNlKiBKU1Rlc3ROYW1lZERlbGV0ZXJUaHJvCiAgICAgYXV0byogc3BhY2UgPSBzcGFj
ZXMubV9zdWJzcGFjZUZvclRlc3ROYW1lZERlbGV0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5nZXQoKTsK
IElHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCiBJR05PUkVfV0FSTklO
R1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKLSAgICBpZiAoJkpTVGVzdE5hbWVkRGVs
ZXRlclRocm93aW5nRXhjZXB0aW9uOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzICE9ICZKU0M6OkpT
Q2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50cykKKyAgICB2b2lkICgqbXlWaXNpdE91dHB1dENv
bnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0TmFtZWRE
ZWxldGVyVGhyb3dpbmdFeGNlcHRpb246OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAgdm9p
ZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RW
aXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKKyAgICBpZiAo
bXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQog
ICAgICAgICBjbGllbnREYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2Up
OwogSUdOT1JFX1dBUk5JTkdTX0VORAogSUdOT1JFX1dBUk5JTkdTX0VORApAQCAtMjY2LDcgKzI2
OSw3IEBAIHZvaWQgSlNUZXN0TmFtZWREZWxldGVyVGhyb3dpbmdFeGNlcHRpb24KICAgICBCYXNl
OjphbmFseXplSGVhcChjZWxsLCBhbmFseXplcik7CiB9CiAKLWJvb2wgSlNUZXN0TmFtZWREZWxl
dGVyVGhyb3dpbmdFeGNlcHRpb25Pd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlND
OjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBTbG90VmlzaXRvciYgdmlzaXRv
ciwgY29uc3QgY2hhcioqIHJlYXNvbikKK2Jvb2wgSlNUZXN0TmFtZWREZWxldGVyVGhyb3dpbmdF
eGNlcHRpb25Pd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlND
OjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBj
b25zdCBjaGFyKiogcmVhc29uKQogewogICAgIFVOVVNFRF9QQVJBTShoYW5kbGUpOwogICAgIFVO
VVNFRF9QQVJBTSh2aXNpdG9yKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3ROYW1lZERlbGV0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1l
ZERlbGV0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5oCShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWREZWxldGVyVGhyb3dp
bmdFeGNlcHRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtNzIsNyArNzIsNyBAQCBwcm90ZWN0ZWQ6
CiAKIGNsYXNzIEpTVGVzdE5hbWVkRGVsZXRlclRocm93aW5nRXhjZXB0aW9uT3duZXIgZmluYWwg
OiBwdWJsaWMgSlNDOjpXZWFrSGFuZGxlT3duZXIgewogcHVibGljOgotICAgIGJvb2wgaXNSZWFj
aGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29u
dGV4dCwgSlNDOjpTbG90VmlzaXRvciYsIGNvbnN0IGNoYXIqKikgZmluYWw7CisgICAgYm9vbCBp
c1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lk
KiBjb250ZXh0LCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImLCBjb25zdCBjaGFyKiopIGZpbmFs
OwogICAgIHZvaWQgZmluYWxpemUoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29u
dGV4dCkgZmluYWw7CiB9OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0TmFtZWREZWxldGVyV2l0aElkZW50aWZpZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZERl
bGV0ZXJXaXRoSWRlbnRpZmllci5jcHAJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZERlbGV0ZXJXaXRoSWRlbnRp
Zmllci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9IZWFwQW5hbHl6ZXIuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0NJ
bmxpbmVzLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNEZXN0cnVjdGlibGVPYmplY3RI
ZWFwQ2VsbFR5cGUuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9TbG90VmlzaXRvck1hY3Jv
cy5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1N1YnNwYWNlSW5saW5lcy5oPgogI2luY2x1
ZGUgPHd0Zi9HZXRQdHIuaD4KICNpbmNsdWRlIDx3dGYvUG9pbnRlclByZXBhcmF0aW9ucy5oPgpA
QCAtMjc5LDcgKzI4MCw5IEBAIEpTQzo6SXNvU3Vic3BhY2UqIEpTVGVzdE5hbWVkRGVsZXRlcldp
dGgKICAgICBhdXRvKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE5hbWVkRGVsZXRl
cldpdGhJZGVudGlmaWVyLmdldCgpOwogSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJs
ZS1jb2RlIikKIElHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQot
ICAgIGlmICgmSlNUZXN0TmFtZWREZWxldGVyV2l0aElkZW50aWZpZXI6OnZpc2l0T3V0cHV0Q29u
c3RyYWludHMgIT0gJkpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzKQorICAgIHZv
aWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNp
dG9yJikgPSBKU1Rlc3ROYW1lZERlbGV0ZXJXaXRoSWRlbnRpZmllcjo6dmlzaXRPdXRwdXRDb25z
dHJhaW50czsKKyAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpT
Q2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0
cmFpbnRzOworICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91
dHB1dENvbnN0cmFpbnQpCiAgICAgICAgIGNsaWVudERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNl
cygpLmFwcGVuZChzcGFjZSk7CiBJR05PUkVfV0FSTklOR1NfRU5ECiBJR05PUkVfV0FSTklOR1Nf
RU5ECkBAIC0yOTUsNyArMjk4LDcgQEAgdm9pZCBKU1Rlc3ROYW1lZERlbGV0ZXJXaXRoSWRlbnRp
Zmllcjo6YQogICAgIEJhc2U6OmFuYWx5emVIZWFwKGNlbGwsIGFuYWx5emVyKTsKIH0KIAotYm9v
bCBKU1Rlc3ROYW1lZERlbGV0ZXJXaXRoSWRlbnRpZmllck93bmVyOjppc1JlYWNoYWJsZUZyb21P
cGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIFNsb3RW
aXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQorYm9vbCBKU1Rlc3ROYW1lZERl
bGV0ZXJXaXRoSWRlbnRpZmllck93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6
OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIEFic3RyYWN0U2xvdFZpc2l0b3Im
IHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCiB7CiAgICAgVU5VU0VEX1BBUkFNKGhhbmRs
ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHZpc2l0b3IpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkRGVsZXRlcldpdGhJZGVudGlmaWVyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdE5hbWVkRGVsZXRlcldpdGhJZGVudGlmaWVyLmgJKHJldmlzaW9uIDI3MzExOSkKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZERlbGV0ZXJX
aXRoSWRlbnRpZmllci5oCSh3b3JraW5nIGNvcHkpCkBAIC03Miw3ICs3Miw3IEBAIHByb3RlY3Rl
ZDoKIAogY2xhc3MgSlNUZXN0TmFtZWREZWxldGVyV2l0aElkZW50aWZpZXJPd25lciBmaW5hbCA6
IHB1YmxpYyBKU0M6OldlYWtIYW5kbGVPd25lciB7CiBwdWJsaWM6Ci0gICAgYm9vbCBpc1JlYWNo
YWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250
ZXh0LCBKU0M6OlNsb3RWaXNpdG9yJiwgY29uc3QgY2hhcioqKSBmaW5hbDsKKyAgICBib29sIGlz
UmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQq
IGNvbnRleHQsIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYsIGNvbnN0IGNoYXIqKikgZmluYWw7
CiAgICAgdm9pZCBmaW5hbGl6ZShKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250
ZXh0KSBmaW5hbDsKIH07CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3ROYW1lZERlbGV0ZXJXaXRoSW5kZXhlZEdldHRlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVk
RGVsZXRlcldpdGhJbmRleGVkR2V0dGVyLmNwcAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkRGVsZXRlcldpdGhJ
bmRleGVkR2V0dGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL0pTQ0lubGluZXMuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9KU0Rlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZS5oPgogI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL1Byb3BlcnR5TmFtZUFycmF5Lmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvU2xv
dFZpc2l0b3JNYWNyb3MuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9TdWJzcGFjZUlubGlu
ZXMuaD4KICNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CiAjaW5jbHVkZSA8d3RmL1BvaW50ZXJQcmVw
YXJhdGlvbnMuaD4KQEAgLTI2NCw3ICsyNjUsOSBAQCBKU0M6Oklzb1N1YnNwYWNlKiBKU1Rlc3RO
YW1lZERlbGV0ZXJXaXRoCiAgICAgYXV0byogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRl
c3ROYW1lZERlbGV0ZXJXaXRoSW5kZXhlZEdldHRlci5nZXQoKTsKIElHTk9SRV9XQVJOSU5HU19C
RUdJTigidW5yZWFjaGFibGUtY29kZSIpCiBJR05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9n
aWNhbC1jb21wYXJlIikKLSAgICBpZiAoJkpTVGVzdE5hbWVkRGVsZXRlcldpdGhJbmRleGVkR2V0
dGVyOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzICE9ICZKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRD
b25zdHJhaW50cykKKyAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlND
ZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0TmFtZWREZWxldGVyV2l0aEluZGV4ZWRH
ZXR0ZXI6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0
cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpT
Q2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKKyAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0
cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQogICAgICAgICBjbGllbnREYXRh
Lm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOwogSUdOT1JFX1dBUk5JTkdT
X0VORAogSUdOT1JFX1dBUk5JTkdTX0VORApAQCAtMjgwLDcgKzI4Myw3IEBAIHZvaWQgSlNUZXN0
TmFtZWREZWxldGVyV2l0aEluZGV4ZWRHZXR0ZXIKICAgICBCYXNlOjphbmFseXplSGVhcChjZWxs
LCBhbmFseXplcik7CiB9CiAKLWJvb2wgSlNUZXN0TmFtZWREZWxldGVyV2l0aEluZGV4ZWRHZXR0
ZXJPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtu
b3duPiBoYW5kbGUsIHZvaWQqLCBTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJl
YXNvbikKK2Jvb2wgSlNUZXN0TmFtZWREZWxldGVyV2l0aEluZGV4ZWRHZXR0ZXJPd25lcjo6aXNS
ZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUs
IHZvaWQqLCBBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29u
KQogewogICAgIFVOVVNFRF9QQVJBTShoYW5kbGUpOwogICAgIFVOVVNFRF9QQVJBTSh2aXNpdG9y
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RO
YW1lZERlbGV0ZXJXaXRoSW5kZXhlZEdldHRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZERlbGV0ZXJXaXRoSW5kZXhl
ZEdldHRlci5oCShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWREZWxldGVyV2l0aEluZGV4ZWRHZXR0ZXIuaAkod29y
a2luZyBjb3B5KQpAQCAtNzIsNyArNzIsNyBAQCBwcm90ZWN0ZWQ6CiAKIGNsYXNzIEpTVGVzdE5h
bWVkRGVsZXRlcldpdGhJbmRleGVkR2V0dGVyT3duZXIgZmluYWwgOiBwdWJsaWMgSlNDOjpXZWFr
SGFuZGxlT3duZXIgewogcHVibGljOgotICAgIGJvb2wgaXNSZWFjaGFibGVGcm9tT3BhcXVlUm9v
dHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCwgSlNDOjpTbG90Vmlz
aXRvciYsIGNvbnN0IGNoYXIqKikgZmluYWw7CisgICAgYm9vbCBpc1JlYWNoYWJsZUZyb21PcGFx
dWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0LCBKU0M6OkFi
c3RyYWN0U2xvdFZpc2l0b3ImLCBjb25zdCBjaGFyKiopIGZpbmFsOwogICAgIHZvaWQgZmluYWxp
emUoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCkgZmluYWw7CiB9Owog
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFt
ZWRHZXR0ZXJDYWxsV2l0aC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkR2V0dGVyQ2FsbFdpdGguY3BwCShyZXZpc2lv
biAyNzMxMTkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDYgKzM1LDcg
QEAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9IZWFwQW5hbHl6ZXIuaD4KICNpbmNsdWRlIDxK
YXZhU2NyaXB0Q29yZS9KU0NJbmxpbmVzLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNE
ZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9TbG90VmlzaXRvck1hY3Jvcy5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1N1YnNwYWNl
SW5saW5lcy5oPgogI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KICNpbmNsdWRlIDx3dGYvUG9pbnRl
clByZXBhcmF0aW9ucy5oPgpAQCAtMjI0LDcgKzIyNSw5IEBAIEpTQzo6SXNvU3Vic3BhY2UqIEpT
VGVzdE5hbWVkR2V0dGVyQ2FsbFcKICAgICBhdXRvKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNl
Rm9yVGVzdE5hbWVkR2V0dGVyQ2FsbFdpdGguZ2V0KCk7CiBJR05PUkVfV0FSTklOR1NfQkVHSU4o
InVucmVhY2hhYmxlLWNvZGUiKQogSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwt
Y29tcGFyZSIpCi0gICAgaWYgKCZKU1Rlc3ROYW1lZEdldHRlckNhbGxXaXRoOjp2aXNpdE91dHB1
dENvbnN0cmFpbnRzICE9ICZKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50cykKKyAg
ICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90
VmlzaXRvciYpID0gSlNUZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aDo6dmlzaXRPdXRwdXRDb25zdHJh
aW50czsKKyAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2Vs
bCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFp
bnRzOworICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1
dENvbnN0cmFpbnQpCiAgICAgICAgIGNsaWVudERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygp
LmFwcGVuZChzcGFjZSk7CiBJR05PUkVfV0FSTklOR1NfRU5ECiBJR05PUkVfV0FSTklOR1NfRU5E
CkBAIC0yNDAsNyArMjQzLDcgQEAgdm9pZCBKU1Rlc3ROYW1lZEdldHRlckNhbGxXaXRoOjphbmFs
eXplSAogICAgIEJhc2U6OmFuYWx5emVIZWFwKGNlbGwsIGFuYWx5emVyKTsKIH0KIAotYm9vbCBK
U1Rlc3ROYW1lZEdldHRlckNhbGxXaXRoT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3Rz
KEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgU2xvdFZpc2l0b3ImIHZp
c2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCitib29sIEpTVGVzdE5hbWVkR2V0dGVyQ2FsbFdp
dGhPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtu
b3duPiBoYW5kbGUsIHZvaWQqLCBBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBj
aGFyKiogcmVhc29uKQogewogICAgIFVOVVNFRF9QQVJBTShoYW5kbGUpOwogICAgIFVOVVNFRF9Q
QVJBTSh2aXNpdG9yKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3ROYW1lZEdldHRlckNhbGxXaXRoLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkR2V0dGVyQ2FsbFdpdGgu
aAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdE5hbWVkR2V0dGVyQ2FsbFdpdGguaAkod29ya2luZyBjb3B5KQpAQCAtNzAs
NyArNzAsNyBAQCBwcm90ZWN0ZWQ6CiAKIGNsYXNzIEpTVGVzdE5hbWVkR2V0dGVyQ2FsbFdpdGhP
d25lciBmaW5hbCA6IHB1YmxpYyBKU0M6OldlYWtIYW5kbGVPd25lciB7CiBwdWJsaWM6Ci0gICAg
Ym9vbCBpc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+
LCB2b2lkKiBjb250ZXh0LCBKU0M6OlNsb3RWaXNpdG9yJiwgY29uc3QgY2hhcioqKSBmaW5hbDsK
KyAgICBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5r
bm93bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYsIGNvbnN0IGNo
YXIqKikgZmluYWw7CiAgICAgdm9pZCBmaW5hbGl6ZShKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+
LCB2b2lkKiBjb250ZXh0KSBmaW5hbDsKIH07CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEdldHRlck5vSWRlbnRpZmllci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dE5hbWVkR2V0dGVyTm9JZGVudGlmaWVyLmNwcAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkR2V0dGVyTm9JZGVu
dGlmaWVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL0hlYXBBbmFseXplci5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pT
Q0lubGluZXMuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0Rlc3RydWN0aWJsZU9iamVj
dEhlYXBDZWxsVHlwZS5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1Nsb3RWaXNpdG9yTWFj
cm9zLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvU3Vic3BhY2VJbmxpbmVzLmg+CiAjaW5j
bHVkZSA8d3RmL0dldFB0ci5oPgogI2luY2x1ZGUgPHd0Zi9Qb2ludGVyUHJlcGFyYXRpb25zLmg+
CkBAIC0yMjQsNyArMjI1LDkgQEAgSlNDOjpJc29TdWJzcGFjZSogSlNUZXN0TmFtZWRHZXR0ZXJO
b0lkZQogICAgIGF1dG8qIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0TmFtZWRHZXR0
ZXJOb0lkZW50aWZpZXIuZ2V0KCk7CiBJR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxl
LWNvZGUiKQogSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0g
ICAgaWYgKCZKU1Rlc3ROYW1lZEdldHRlck5vSWRlbnRpZmllcjo6dmlzaXRPdXRwdXRDb25zdHJh
aW50cyAhPSAmSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHMpCisgICAgdm9pZCAo
Km15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3Im
KSA9IEpTVGVzdE5hbWVkR2V0dGVyTm9JZGVudGlmaWVyOjp2aXNpdE91dHB1dENvbnN0cmFpbnRz
OworICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwg
SlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7
CisgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29u
c3RyYWludCkKICAgICAgICAgY2xpZW50RGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBw
ZW5kKHNwYWNlKTsKIElHTk9SRV9XQVJOSU5HU19FTkQKIElHTk9SRV9XQVJOSU5HU19FTkQKQEAg
LTI0MCw3ICsyNDMsNyBAQCB2b2lkIEpTVGVzdE5hbWVkR2V0dGVyTm9JZGVudGlmaWVyOjphbmFs
CiAgICAgQmFzZTo6YW5hbHl6ZUhlYXAoY2VsbCwgYW5hbHl6ZXIpOwogfQogCi1ib29sIEpTVGVz
dE5hbWVkR2V0dGVyTm9JZGVudGlmaWVyT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3Rz
KEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgU2xvdFZpc2l0b3ImIHZp
c2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCitib29sIEpTVGVzdE5hbWVkR2V0dGVyTm9JZGVu
dGlmaWVyT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6
VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvciwgY29u
c3QgY2hhcioqIHJlYXNvbikKIHsKICAgICBVTlVTRURfUEFSQU0oaGFuZGxlKTsKICAgICBVTlVT
RURfUEFSQU0odmlzaXRvcik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0TmFtZWRHZXR0ZXJOb0lkZW50aWZpZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRHZXR0ZXJO
b0lkZW50aWZpZXIuaAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkR2V0dGVyTm9JZGVudGlmaWVyLmgJKHdvcmtp
bmcgY29weSkKQEAgLTcwLDcgKzcwLDcgQEAgcHJvdGVjdGVkOgogCiBjbGFzcyBKU1Rlc3ROYW1l
ZEdldHRlck5vSWRlbnRpZmllck93bmVyIGZpbmFsIDogcHVibGljIEpTQzo6V2Vha0hhbmRsZU93
bmVyIHsKIHB1YmxpYzoKLSAgICBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6
SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6U2xvdFZpc2l0b3ImLCBj
b25zdCBjaGFyKiopIGZpbmFsOworICAgIGJvb2wgaXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMo
SlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCwgSlNDOjpBYnN0cmFjdFNs
b3RWaXNpdG9yJiwgY29uc3QgY2hhcioqKSBmaW5hbDsKICAgICB2b2lkIGZpbmFsaXplKEpTQzo6
SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQpIGZpbmFsOwogfTsKIApJbmRleDog
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkR2V0dGVy
V2l0aElkZW50aWZpZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEdldHRlcldpdGhJZGVudGlmaWVyLmNwcAkocmV2
aXNpb24gMjczMTE5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdE5hbWVkR2V0dGVyV2l0aElkZW50aWZpZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
Niw2ICszNiw3IEBACiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSGVhcEFuYWx5emVyLmg+CiAj
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNDSW5saW5lcy5oPgogI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL0pTRGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLmg+CisjaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvU2xvdFZpc2l0b3JNYWNyb3MuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9TdWJzcGFjZUlubGluZXMuaD4KICNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CiAjaW5jbHVkZSA8
d3RmL1BvaW50ZXJQcmVwYXJhdGlvbnMuaD4KQEAgLTI1NSw3ICsyNTYsOSBAQCBKU0M6Oklzb1N1
YnNwYWNlKiBKU1Rlc3ROYW1lZEdldHRlcldpdGhJCiAgICAgYXV0byogc3BhY2UgPSBzcGFjZXMu
bV9zdWJzcGFjZUZvclRlc3ROYW1lZEdldHRlcldpdGhJZGVudGlmaWVyLmdldCgpOwogSUdOT1JF
X1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKIElHTk9SRV9XQVJOSU5HU19CRUdJ
TigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQotICAgIGlmICgmSlNUZXN0TmFtZWRHZXR0ZXJXaXRo
SWRlbnRpZmllcjo6dmlzaXRPdXRwdXRDb25zdHJhaW50cyAhPSAmSlNDOjpKU0NlbGw6OnZpc2l0
T3V0cHV0Q29uc3RyYWludHMpCisgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShK
U0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdE5hbWVkR2V0dGVyV2l0aElk
ZW50aWZpZXI6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAgdm9pZCAoKmpzQ2VsbFZpc2l0
T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6
OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKKyAgICBpZiAobXlWaXNpdE91dHB1dENv
bnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQogICAgICAgICBjbGllbnRE
YXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOwogSUdOT1JFX1dBUk5J
TkdTX0VORAogSUdOT1JFX1dBUk5JTkdTX0VORApAQCAtMjcxLDcgKzI3NCw3IEBAIHZvaWQgSlNU
ZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmllcjo6YW4KICAgICBCYXNlOjphbmFseXplSGVhcChj
ZWxsLCBhbmFseXplcik7CiB9CiAKLWJvb2wgSlNUZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmll
ck93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25v
d24+IGhhbmRsZSwgdm9pZCosIFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVh
c29uKQorYm9vbCBKU1Rlc3ROYW1lZEdldHRlcldpdGhJZGVudGlmaWVyT3duZXI6OmlzUmVhY2hh
YmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lk
KiwgQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikKIHsK
ICAgICBVTlVTRURfUEFSQU0oaGFuZGxlKTsKICAgICBVTlVTRURfUEFSQU0odmlzaXRvcik7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRH
ZXR0ZXJXaXRoSWRlbnRpZmllci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEdldHRlcldpdGhJZGVudGlmaWVyLmgJKHJl
dmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3ROYW1lZEdldHRlcldpdGhJZGVudGlmaWVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTcw
LDcgKzcwLDcgQEAgcHJvdGVjdGVkOgogCiBjbGFzcyBKU1Rlc3ROYW1lZEdldHRlcldpdGhJZGVu
dGlmaWVyT3duZXIgZmluYWwgOiBwdWJsaWMgSlNDOjpXZWFrSGFuZGxlT3duZXIgewogcHVibGlj
OgotICAgIGJvb2wgaXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpV
bmtub3duPiwgdm9pZCogY29udGV4dCwgSlNDOjpTbG90VmlzaXRvciYsIGNvbnN0IGNoYXIqKikg
ZmluYWw7CisgICAgYm9vbCBpc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxK
U0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0LCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImLCBj
b25zdCBjaGFyKiopIGZpbmFsOwogICAgIHZvaWQgZmluYWxpemUoSlNDOjpIYW5kbGU8SlNDOjpV
bmtub3duPiwgdm9pZCogY29udGV4dCkgZmluYWw7CiB9OwogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3ROYW1lZFNldHRlck5vSWRlbnRpZmllci5jcHAJKHJldmlzaW9uIDI3MzExOSkKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRl
ck5vSWRlbnRpZmllci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9IZWFwQW5hbHl6ZXIuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9KU0NJbmxpbmVzLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNEZXN0cnVjdGli
bGVPYmplY3RIZWFwQ2VsbFR5cGUuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9TbG90Vmlz
aXRvck1hY3Jvcy5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1N1YnNwYWNlSW5saW5lcy5o
PgogI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KICNpbmNsdWRlIDx3dGYvUG9pbnRlclByZXBhcmF0
aW9ucy5oPgpAQCAtMjkzLDcgKzI5NCw5IEBAIEpTQzo6SXNvU3Vic3BhY2UqIEpTVGVzdE5hbWVk
U2V0dGVyTm9JZGUKICAgICBhdXRvKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE5h
bWVkU2V0dGVyTm9JZGVudGlmaWVyLmdldCgpOwogSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJl
YWNoYWJsZS1jb2RlIikKIElHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBh
cmUiKQotICAgIGlmICgmSlNUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXI6OnZpc2l0T3V0cHV0
Q29uc3RyYWludHMgIT0gJkpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzKQorICAg
IHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RW
aXNpdG9yJikgPSBKU1Rlc3ROYW1lZFNldHRlck5vSWRlbnRpZmllcjo6dmlzaXRPdXRwdXRDb25z
dHJhaW50czsKKyAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpT
Q2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0
cmFpbnRzOworICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91
dHB1dENvbnN0cmFpbnQpCiAgICAgICAgIGNsaWVudERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNl
cygpLmFwcGVuZChzcGFjZSk7CiBJR05PUkVfV0FSTklOR1NfRU5ECiBJR05PUkVfV0FSTklOR1Nf
RU5ECkBAIC0zMDksNyArMzEyLDcgQEAgdm9pZCBKU1Rlc3ROYW1lZFNldHRlck5vSWRlbnRpZmll
cjo6YW5hbAogICAgIEJhc2U6OmFuYWx5emVIZWFwKGNlbGwsIGFuYWx5emVyKTsKIH0KIAotYm9v
bCBKU1Rlc3ROYW1lZFNldHRlck5vSWRlbnRpZmllck93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFx
dWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIFNsb3RWaXNp
dG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQorYm9vbCBKU1Rlc3ROYW1lZFNldHRl
ck5vSWRlbnRpZmllck93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRs
ZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0
b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCiB7CiAgICAgVU5VU0VEX1BBUkFNKGhhbmRsZSk7CiAg
ICAgVU5VU0VEX1BBUkFNKHZpc2l0b3IpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVk
U2V0dGVyTm9JZGVudGlmaWVyLmgJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlck5vSWRlbnRpZmllci5o
CSh3b3JraW5nIGNvcHkpCkBAIC03Myw3ICs3Myw3IEBAIHByb3RlY3RlZDoKIAogY2xhc3MgSlNU
ZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXJPd25lciBmaW5hbCA6IHB1YmxpYyBKU0M6OldlYWtI
YW5kbGVPd25lciB7CiBwdWJsaWM6Ci0gICAgYm9vbCBpc1JlYWNoYWJsZUZyb21PcGFxdWVSb290
cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0LCBKU0M6OlNsb3RWaXNp
dG9yJiwgY29uc3QgY2hhcioqKSBmaW5hbDsKKyAgICBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1
ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6QWJz
dHJhY3RTbG90VmlzaXRvciYsIGNvbnN0IGNoYXIqKikgZmluYWw7CiAgICAgdm9pZCBmaW5hbGl6
ZShKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0KSBmaW5hbDsKIH07CiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1l
ZFNldHRlclRocm93aW5nRXhjZXB0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2Vw
dGlvbi5jcHAJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0aW9uLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0hl
YXBBbmFseXplci5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTQ0lubGluZXMuaD4KICNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0Rlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZS5o
PgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1Nsb3RWaXNpdG9yTWFjcm9zLmg+CiAjaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvU3Vic3BhY2VJbmxpbmVzLmg+CiAjaW5jbHVkZSA8d3RmL0dldFB0
ci5oPgogI2luY2x1ZGUgPHd0Zi9Qb2ludGVyUHJlcGFyYXRpb25zLmg+CkBAIC0yOTMsNyArMjk0
LDkgQEAgSlNDOjpJc29TdWJzcGFjZSogSlNUZXN0TmFtZWRTZXR0ZXJUaHJvdwogICAgIGF1dG8q
IHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2Vw
dGlvbi5nZXQoKTsKIElHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCiBJ
R05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKLSAgICBpZiAoJkpT
VGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb246OnZpc2l0T3V0cHV0Q29uc3RyYWludHMg
IT0gJkpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzKQorICAgIHZvaWQgKCpteVZp
c2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBK
U1Rlc3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0aW9uOjp2aXNpdE91dHB1dENvbnN0cmFpbnRz
OworICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwg
SlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7
CisgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29u
c3RyYWludCkKICAgICAgICAgY2xpZW50RGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBw
ZW5kKHNwYWNlKTsKIElHTk9SRV9XQVJOSU5HU19FTkQKIElHTk9SRV9XQVJOSU5HU19FTkQKQEAg
LTMwOSw3ICszMTIsNyBAQCB2b2lkIEpTVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb246
CiAgICAgQmFzZTo6YW5hbHl6ZUhlYXAoY2VsbCwgYW5hbHl6ZXIpOwogfQogCi1ib29sIEpTVGVz
dE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb25Pd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVl
Um9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBTbG90VmlzaXRv
ciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikKK2Jvb2wgSlNUZXN0TmFtZWRTZXR0ZXJU
aHJvd2luZ0V4Y2VwdGlvbk93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6Okhh
bmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIEFic3RyYWN0U2xvdFZpc2l0b3ImIHZp
c2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCiB7CiAgICAgVU5VU0VEX1BBUkFNKGhhbmRsZSk7
CiAgICAgVU5VU0VEX1BBUkFNKHZpc2l0b3IpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24uaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5oCShyZXZpc2lvbiAyNzMxMTkpCisrKyBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJU
aHJvd2luZ0V4Y2VwdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC03Myw3ICs3Myw3IEBAIHByb3Rl
Y3RlZDoKIAogY2xhc3MgSlNUZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbk93bmVyIGZp
bmFsIDogcHVibGljIEpTQzo6V2Vha0hhbmRsZU93bmVyIHsKIHB1YmxpYzoKLSAgICBib29sIGlz
UmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQq
IGNvbnRleHQsIEpTQzo6U2xvdFZpc2l0b3ImLCBjb25zdCBjaGFyKiopIGZpbmFsOworICAgIGJv
b2wgaXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwg
dm9pZCogY29udGV4dCwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiwgY29uc3QgY2hhcioqKSBm
aW5hbDsKICAgICB2b2lkIGZpbmFsaXplKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQq
IGNvbnRleHQpIGZpbmFsOwogfTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1l
ZFNldHRlcldpdGhJZGVudGlmaWVyLmNwcAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50
aWZpZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw2ICszNiw3IEBACiAjaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvSGVhcEFuYWx5emVyLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlND
SW5saW5lcy5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTRGVzdHJ1Y3RpYmxlT2JqZWN0
SGVhcENlbGxUeXBlLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvU2xvdFZpc2l0b3JNYWNy
b3MuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9TdWJzcGFjZUlubGluZXMuaD4KICNpbmNs
dWRlIDx3dGYvR2V0UHRyLmg+CiAjaW5jbHVkZSA8d3RmL1BvaW50ZXJQcmVwYXJhdGlvbnMuaD4K
QEAgLTMyOSw3ICszMzAsOSBAQCBKU0M6Oklzb1N1YnNwYWNlKiBKU1Rlc3ROYW1lZFNldHRlcldp
dGhJCiAgICAgYXV0byogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3ROYW1lZFNldHRl
cldpdGhJZGVudGlmaWVyLmdldCgpOwogSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJs
ZS1jb2RlIikKIElHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQot
ICAgIGlmICgmSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllcjo6dmlzaXRPdXRwdXRDb25z
dHJhaW50cyAhPSAmSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHMpCisgICAgdm9p
ZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0
b3ImKSA9IEpTVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXI6OnZpc2l0T3V0cHV0Q29uc3Ry
YWludHM7CisgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0Nl
bGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJh
aW50czsKKyAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRw
dXRDb25zdHJhaW50KQogICAgICAgICBjbGllbnREYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMo
KS5hcHBlbmQoc3BhY2UpOwogSUdOT1JFX1dBUk5JTkdTX0VORAogSUdOT1JFX1dBUk5JTkdTX0VO
RApAQCAtMzQ1LDcgKzM0OCw3IEBAIHZvaWQgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmll
cjo6YW4KICAgICBCYXNlOjphbmFseXplSGVhcChjZWxsLCBhbmFseXplcik7CiB9CiAKLWJvb2wg
SlNUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllck93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFx
dWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIFNsb3RWaXNp
dG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQorYm9vbCBKU1Rlc3ROYW1lZFNldHRl
cldpdGhJZGVudGlmaWVyT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFu
ZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgQWJzdHJhY3RTbG90VmlzaXRvciYgdmlz
aXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikKIHsKICAgICBVTlVTRURfUEFSQU0oaGFuZGxlKTsK
ICAgICBVTlVTRURfUEFSQU0odmlzaXRvcik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RO
YW1lZFNldHRlcldpdGhJZGVudGlmaWVyLmgJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhJZGVu
dGlmaWVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTczLDcgKzczLDcgQEAgcHJvdGVjdGVkOgogCiBj
bGFzcyBKU1Rlc3ROYW1lZFNldHRlcldpdGhJZGVudGlmaWVyT3duZXIgZmluYWwgOiBwdWJsaWMg
SlNDOjpXZWFrSGFuZGxlT3duZXIgewogcHVibGljOgotICAgIGJvb2wgaXNSZWFjaGFibGVGcm9t
T3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCwgSlND
OjpTbG90VmlzaXRvciYsIGNvbnN0IGNoYXIqKikgZmluYWw7CisgICAgYm9vbCBpc1JlYWNoYWJs
ZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0
LCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImLCBjb25zdCBjaGFyKiopIGZpbmFsOwogICAgIHZv
aWQgZmluYWxpemUoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCkgZmlu
YWw7CiB9OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0
aEluZGV4ZWRHZXR0ZXIuY3BwCShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDYgKzM4LDcgQEAKICNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9KU0NJbmxpbmVzLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNEZXN0cnVj
dGlibGVPYmplY3RIZWFwQ2VsbFR5cGUuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9Qcm9w
ZXJ0eU5hbWVBcnJheS5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1Nsb3RWaXNpdG9yTWFj
cm9zLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvU3Vic3BhY2VJbmxpbmVzLmg+CiAjaW5j
bHVkZSA8d3RmL0dldFB0ci5oPgogI2luY2x1ZGUgPHd0Zi9Qb2ludGVyUHJlcGFyYXRpb25zLmg+
CkBAIC0zNzQsNyArMzc1LDkgQEAgSlNDOjpJc29TdWJzcGFjZSogSlNUZXN0TmFtZWRTZXR0ZXJX
aXRoSQogICAgIGF1dG8qIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0TmFtZWRTZXR0
ZXJXaXRoSW5kZXhlZEdldHRlci5nZXQoKTsKIElHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFj
aGFibGUtY29kZSIpCiBJR05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJl
IikKLSAgICBpZiAoJkpTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXI6OnZpc2l0T3V0
cHV0Q29uc3RyYWludHMgIT0gJkpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzKQor
ICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNs
b3RWaXNpdG9yJikgPSBKU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyOjp2aXNpdE91
dHB1dENvbnN0cmFpbnRzOworICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQp
KEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0
cHV0Q29uc3RyYWludHM7CisgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2Vs
bFZpc2l0T3V0cHV0Q29uc3RyYWludCkKICAgICAgICAgY2xpZW50RGF0YS5vdXRwdXRDb25zdHJh
aW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKIElHTk9SRV9XQVJOSU5HU19FTkQKIElHTk9SRV9X
QVJOSU5HU19FTkQKQEAgLTM5MCw3ICszOTMsNyBAQCB2b2lkIEpTVGVzdE5hbWVkU2V0dGVyV2l0
aEluZGV4ZWRHZXR0ZXI6CiAgICAgQmFzZTo6YW5hbHl6ZUhlYXAoY2VsbCwgYW5hbHl6ZXIpOwog
fQogCi1ib29sIEpTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJPd25lcjo6aXNSZWFj
aGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZv
aWQqLCBTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikKK2Jvb2wgSlNU
ZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlck93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFx
dWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIEFic3RyYWN0
U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCiB7CiAgICAgVU5VU0VE
X1BBUkFNKGhhbmRsZSk7CiAgICAgVU5VU0VEX1BBUkFNKHZpc2l0b3IpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aElu
ZGV4ZWRHZXR0ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlci5oCShyZXZpc2lv
biAyNzMxMTkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC03Myw3
ICs3Myw3IEBAIHByb3RlY3RlZDoKIAogY2xhc3MgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhl
ZEdldHRlck93bmVyIGZpbmFsIDogcHVibGljIEpTQzo6V2Vha0hhbmRsZU93bmVyIHsKIHB1Ymxp
YzoKLSAgICBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6
VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6U2xvdFZpc2l0b3ImLCBjb25zdCBjaGFyKiop
IGZpbmFsOworICAgIGJvb2wgaXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8
SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiwg
Y29uc3QgY2hhcioqKSBmaW5hbDsKICAgICB2b2lkIGZpbmFsaXplKEpTQzo6SGFuZGxlPEpTQzo6
VW5rbm93bj4sIHZvaWQqIGNvbnRleHQpIGZpbmFsOwogfTsKIApJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRH
ZXR0ZXJBbmRTZXR0ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQW5kU2V0
dGVyLmNwcAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRTZXR0ZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw2ICszOCw3IEBACiAjaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvSlNDSW5saW5lcy5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTRGVzdHJ1Y3Rp
YmxlT2JqZWN0SGVhcENlbGxUeXBlLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvUHJvcGVy
dHlOYW1lQXJyYXkuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9TbG90VmlzaXRvck1hY3Jv
cy5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1N1YnNwYWNlSW5saW5lcy5oPgogI2luY2x1
ZGUgPHd0Zi9HZXRQdHIuaD4KICNpbmNsdWRlIDx3dGYvUG9pbnRlclByZXBhcmF0aW9ucy5oPgpA
QCAtNDI5LDcgKzQzMCw5IEBAIEpTQzo6SXNvU3Vic3BhY2UqIEpTVGVzdE5hbWVkU2V0dGVyV2l0
aEkKICAgICBhdXRvKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE5hbWVkU2V0dGVy
V2l0aEluZGV4ZWRHZXR0ZXJBbmRTZXR0ZXIuZ2V0KCk7CiBJR05PUkVfV0FSTklOR1NfQkVHSU4o
InVucmVhY2hhYmxlLWNvZGUiKQogSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwt
Y29tcGFyZSIpCi0gICAgaWYgKCZKU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQW5k
U2V0dGVyOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzICE9ICZKU0M6OkpTQ2VsbDo6dmlzaXRPdXRw
dXRDb25zdHJhaW50cykKKyAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6
SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhl
ZEdldHRlckFuZFNldHRlcjo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKKyAgICB2b2lkICgqanND
ZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3Im
KSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOworICAgIGlmIChteVZpc2l0
T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCiAgICAgICAg
IGNsaWVudERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7CiBJR05P
UkVfV0FSTklOR1NfRU5ECiBJR05PUkVfV0FSTklOR1NfRU5ECkBAIC00NDUsNyArNDQ4LDcgQEAg
dm9pZCBKU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQQogICAgIEJhc2U6OmFuYWx5
emVIZWFwKGNlbGwsIGFuYWx5emVyKTsKIH0KIAotYm9vbCBKU1Rlc3ROYW1lZFNldHRlcldpdGhJ
bmRleGVkR2V0dGVyQW5kU2V0dGVyT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpT
Qzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgU2xvdFZpc2l0b3ImIHZpc2l0
b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCitib29sIEpTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4
ZWRHZXR0ZXJBbmRTZXR0ZXJPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpI
YW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBBYnN0cmFjdFNsb3RWaXNpdG9yJiB2
aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQogewogICAgIFVOVVNFRF9QQVJBTShoYW5kbGUp
OwogICAgIFVOVVNFRF9QQVJBTSh2aXNpdG9yKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQW5k
U2V0dGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRTZXR0ZXIuaAkocmV2
aXNpb24gMjczMTE5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRTZXR0ZXIuaAkod29ya2luZyBj
b3B5KQpAQCAtNzMsNyArNzMsNyBAQCBwcm90ZWN0ZWQ6CiAKIGNsYXNzIEpTVGVzdE5hbWVkU2V0
dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRTZXR0ZXJPd25lciBmaW5hbCA6IHB1YmxpYyBKU0M6Oldl
YWtIYW5kbGVPd25lciB7CiBwdWJsaWM6Ci0gICAgYm9vbCBpc1JlYWNoYWJsZUZyb21PcGFxdWVS
b290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0LCBKU0M6OlNsb3RW
aXNpdG9yJiwgY29uc3QgY2hhcioqKSBmaW5hbDsKKyAgICBib29sIGlzUmVhY2hhYmxlRnJvbU9w
YXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6
QWJzdHJhY3RTbG90VmlzaXRvciYsIGNvbnN0IGNoYXIqKikgZmluYWw7CiAgICAgdm9pZCBmaW5h
bGl6ZShKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0KSBmaW5hbDsKIH07
CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RO
YW1lZFNldHRlcldpdGhMZWdhY3lPdmVycmlkZUJ1aWx0SW5zLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJX
aXRoTGVnYWN5T3ZlcnJpZGVCdWlsdElucy5jcHAJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhM
ZWdhY3lPdmVycmlkZUJ1aWx0SW5zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsNiArMzUsNyBA
QAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0hlYXBBbmFseXplci5oPgogI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL0pTQ0lubGluZXMuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0Rl
c3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZS5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L1Nsb3RWaXNpdG9yTWFjcm9zLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvU3Vic3BhY2VJ
bmxpbmVzLmg+CiAjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgogI2luY2x1ZGUgPHd0Zi9Qb2ludGVy
UHJlcGFyYXRpb25zLmg+CkBAIC0yNzQsNyArMjc1LDkgQEAgSlNDOjpJc29TdWJzcGFjZSogSlNU
ZXN0TmFtZWRTZXR0ZXJXaXRoTAogICAgIGF1dG8qIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VG
b3JUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5T3ZlcnJpZGVCdWlsdElucy5nZXQoKTsKIElHTk9S
RV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCiBJR05PUkVfV0FSTklOR1NfQkVH
SU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKLSAgICBpZiAoJkpTVGVzdE5hbWVkU2V0dGVyV2l0
aExlZ2FjeU92ZXJyaWRlQnVpbHRJbnM6OnZpc2l0T3V0cHV0Q29uc3RyYWludHMgIT0gJkpTQzo6
SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzKQorICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0
Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3ROYW1l
ZFNldHRlcldpdGhMZWdhY3lPdmVycmlkZUJ1aWx0SW5zOjp2aXNpdE91dHB1dENvbnN0cmFpbnRz
OworICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwg
SlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7
CisgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29u
c3RyYWludCkKICAgICAgICAgY2xpZW50RGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBw
ZW5kKHNwYWNlKTsKIElHTk9SRV9XQVJOSU5HU19FTkQKIElHTk9SRV9XQVJOSU5HU19FTkQKQEAg
LTI5MCw3ICsyOTMsNyBAQCB2b2lkIEpTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeU92ZXJyaWRl
CiAgICAgQmFzZTo6YW5hbHl6ZUhlYXAoY2VsbCwgYW5hbHl6ZXIpOwogfQogCi1ib29sIEpTVGVz
dE5hbWVkU2V0dGVyV2l0aExlZ2FjeU92ZXJyaWRlQnVpbHRJbnNPd25lcjo6aXNSZWFjaGFibGVG
cm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBT
bG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikKK2Jvb2wgSlNUZXN0TmFt
ZWRTZXR0ZXJXaXRoTGVnYWN5T3ZlcnJpZGVCdWlsdEluc093bmVyOjppc1JlYWNoYWJsZUZyb21P
cGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIEFic3Ry
YWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCiB7CiAgICAgVU5V
U0VEX1BBUkFNKGhhbmRsZSk7CiAgICAgVU5VU0VEX1BBUkFNKHZpc2l0b3IpOwpJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0
aExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5T3ZlcnJp
ZGVCdWlsdElucy5oCShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5T3ZlcnJpZGVCdWls
dElucy5oCSh3b3JraW5nIGNvcHkpCkBAIC03Myw3ICs3Myw3IEBAIHByb3RlY3RlZDoKIAogY2xh
c3MgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5T3ZlcnJpZGVCdWlsdEluc093bmVyIGZpbmFs
IDogcHVibGljIEpTQzo6V2Vha0hhbmRsZU93bmVyIHsKIHB1YmxpYzoKLSAgICBib29sIGlzUmVh
Y2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNv
bnRleHQsIEpTQzo6U2xvdFZpc2l0b3ImLCBjb25zdCBjaGFyKiopIGZpbmFsOworICAgIGJvb2wg
aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9p
ZCogY29udGV4dCwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiwgY29uc3QgY2hhcioqKSBmaW5h
bDsKICAgICB2b2lkIGZpbmFsaXplKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNv
bnRleHQpIGZpbmFsOwogfTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGll
cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllcy5jcHAJ
KHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lVbmZvcmdlYWJsZVByb3BlcnRpZXMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zNyw2ICszNyw3IEBACiAjaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvSGVhcEFuYWx5emVyLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNDSW5saW5lcy5o
PgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTRGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxU
eXBlLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvU2xvdFZpc2l0b3JNYWNyb3MuaD4KICNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9TdWJzcGFjZUlubGluZXMuaD4KICNpbmNsdWRlIDx3dGYv
R2V0UHRyLmg+CiAjaW5jbHVkZSA8d3RmL1BvaW50ZXJQcmVwYXJhdGlvbnMuaD4KQEAgLTM2NCw3
ICszNjUsOSBAQCBKU0M6Oklzb1N1YnNwYWNlKiBKU1Rlc3ROYW1lZFNldHRlcldpdGhMCiAgICAg
YXV0byogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3ROYW1lZFNldHRlcldpdGhMZWdh
Y3lVbmZvcmdlYWJsZVByb3BlcnRpZXMuZ2V0KCk7CiBJR05PUkVfV0FSTklOR1NfQkVHSU4oInVu
cmVhY2hhYmxlLWNvZGUiKQogSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29t
cGFyZSIpCi0gICAgaWYgKCZKU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lVbmZvcmdlYWJsZVBy
b3BlcnRpZXM6OnZpc2l0T3V0cHV0Q29uc3RyYWludHMgIT0gJkpTQzo6SlNDZWxsOjp2aXNpdE91
dHB1dENvbnN0cmFpbnRzKQorICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlND
OjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdh
Y3lVbmZvcmdlYWJsZVByb3BlcnRpZXM6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAgdm9p
ZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RW
aXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKKyAgICBpZiAo
bXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQog
ICAgICAgICBjbGllbnREYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2Up
OwogSUdOT1JFX1dBUk5JTkdTX0VORAogSUdOT1JFX1dBUk5JTkdTX0VORApAQCAtMzgwLDcgKzM4
Myw3IEBAIHZvaWQgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWEKICAgICBCYXNl
OjphbmFseXplSGVhcChjZWxsLCBhbmFseXplcik7CiB9CiAKLWJvb2wgSlNUZXN0TmFtZWRTZXR0
ZXJXaXRoTGVnYWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVzT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9w
YXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgU2xvdFZp
c2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCitib29sIEpTVGVzdE5hbWVkU2V0
dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllc093bmVyOjppc1JlYWNoYWJsZUZyb21P
cGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIEFic3Ry
YWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCiB7CiAgICAgVU5V
U0VEX1BBUkFNKGhhbmRsZSk7CiAgICAgVU5VU0VEX1BBUkFNKHZpc2l0b3IpOwpJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0
aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lV
bmZvcmdlYWJsZVByb3BlcnRpZXMuaAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVu
Zm9yZ2VhYmxlUHJvcGVydGllcy5oCSh3b3JraW5nIGNvcHkpCkBAIC03Myw3ICs3Myw3IEBAIHBy
b3RlY3RlZDoKIAogY2xhc3MgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWFibGVQ
cm9wZXJ0aWVzT3duZXIgZmluYWwgOiBwdWJsaWMgSlNDOjpXZWFrSGFuZGxlT3duZXIgewogcHVi
bGljOgotICAgIGJvb2wgaXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlND
OjpVbmtub3duPiwgdm9pZCogY29udGV4dCwgSlNDOjpTbG90VmlzaXRvciYsIGNvbnN0IGNoYXIq
KikgZmluYWw7CisgICAgYm9vbCBpc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRs
ZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0LCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3Im
LCBjb25zdCBjaGFyKiopIGZpbmFsOwogICAgIHZvaWQgZmluYWxpemUoSlNDOjpIYW5kbGU8SlND
OjpVbmtub3duPiwgdm9pZCogY29udGV4dCkgZmluYWw7CiB9OwogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5
VW5mb3JnZWFibGVQcm9wZXJ0aWVzQW5kTGVnYWN5T3ZlcnJpZGVCdWlsdElucy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5h
bWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllc0FuZExlZ2FjeU92ZXJyaWRl
QnVpbHRJbnMuY3BwCShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWFibGVQ
cm9wZXJ0aWVzQW5kTGVnYWN5T3ZlcnJpZGVCdWlsdElucy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM3LDYgKzM3LDcgQEAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9IZWFwQW5hbHl6ZXIuaD4K
ICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0NJbmxpbmVzLmg+CiAjaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvSlNEZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUuaD4KKyNpbmNsdWRlIDxK
YXZhU2NyaXB0Q29yZS9TbG90VmlzaXRvck1hY3Jvcy5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL1N1YnNwYWNlSW5saW5lcy5oPgogI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KICNpbmNsdWRl
IDx3dGYvUG9pbnRlclByZXBhcmF0aW9ucy5oPgpAQCAtMzQ1LDcgKzM0Niw5IEBAIEpTQzo6SXNv
U3Vic3BhY2UqIEpTVGVzdE5hbWVkU2V0dGVyV2l0aEwKICAgICBhdXRvKiBzcGFjZSA9IHNwYWNl
cy5tX3N1YnNwYWNlRm9yVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVy
dGllc0FuZExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMuZ2V0KCk7CiBJR05PUkVfV0FSTklOR1NfQkVH
SU4oInVucmVhY2hhYmxlLWNvZGUiKQogSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2lj
YWwtY29tcGFyZSIpCi0gICAgaWYgKCZKU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lVbmZvcmdl
YWJsZVByb3BlcnRpZXNBbmRMZWdhY3lPdmVycmlkZUJ1aWx0SW5zOjp2aXNpdE91dHB1dENvbnN0
cmFpbnRzICE9ICZKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50cykKKyAgICB2b2lk
ICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRv
ciYpID0gSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVzQW5k
TGVnYWN5T3ZlcnJpZGVCdWlsdEluczo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKKyAgICB2b2lk
ICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZp
c2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOworICAgIGlmICht
eVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCiAg
ICAgICAgIGNsaWVudERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7
CiBJR05PUkVfV0FSTklOR1NfRU5ECiBJR05PUkVfV0FSTklOR1NfRU5ECkBAIC0zNjEsNyArMzY0
LDcgQEAgdm9pZCBKU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lVbmZvcmdlYQogICAgIEJhc2U6
OmFuYWx5emVIZWFwKGNlbGwsIGFuYWx5emVyKTsKIH0KIAotYm9vbCBKU1Rlc3ROYW1lZFNldHRl
cldpdGhMZWdhY3lVbmZvcmdlYWJsZVByb3BlcnRpZXNBbmRMZWdhY3lPdmVycmlkZUJ1aWx0SW5z
T3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93
bj4gaGFuZGxlLCB2b2lkKiwgU2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFz
b24pCitib29sIEpTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGll
c0FuZExlZ2FjeU92ZXJyaWRlQnVpbHRJbnNPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9v
dHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBBYnN0cmFjdFNsb3RW
aXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQogewogICAgIFVOVVNFRF9QQVJB
TShoYW5kbGUpOwogICAgIFVOVVNFRF9QQVJBTSh2aXNpdG9yKTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lV
bmZvcmdlYWJsZVByb3BlcnRpZXNBbmRMZWdhY3lPdmVycmlkZUJ1aWx0SW5zLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVk
U2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllc0FuZExlZ2FjeU92ZXJyaWRlQnVp
bHRJbnMuaAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVy
dGllc0FuZExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMuaAkod29ya2luZyBjb3B5KQpAQCAtNzMsNyAr
NzMsNyBAQCBwcm90ZWN0ZWQ6CiAKIGNsYXNzIEpTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVu
Zm9yZ2VhYmxlUHJvcGVydGllc0FuZExlZ2FjeU92ZXJyaWRlQnVpbHRJbnNPd25lciBmaW5hbCA6
IHB1YmxpYyBKU0M6OldlYWtIYW5kbGVPd25lciB7CiBwdWJsaWM6Ci0gICAgYm9vbCBpc1JlYWNo
YWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250
ZXh0LCBKU0M6OlNsb3RWaXNpdG9yJiwgY29uc3QgY2hhcioqKSBmaW5hbDsKKyAgICBib29sIGlz
UmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQq
IGNvbnRleHQsIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYsIGNvbnN0IGNoYXIqKikgZmluYWw7
CiAgICAgdm9pZCBmaW5hbGl6ZShKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250
ZXh0KSBmaW5hbDsKIH07CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3ROb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Tm9kZS5jcHAJKHJldmlzaW9uIDI3MzExOSkKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROb2RlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDMsNiArNDMsNyBAQAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L0pTQ0lubGluZXMuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0Rlc3RydWN0aWJsZU9i
amVjdEhlYXBDZWxsVHlwZS5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL09iamVjdENvbnN0
cnVjdG9yLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvU2xvdFZpc2l0b3JNYWNyb3MuaD4K
ICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9TdWJzcGFjZUlubGluZXMuaD4KICNpbmNsdWRlIDx3
dGYvR2V0UHRyLmg+CiAjaW5jbHVkZSA8d3RmL1BvaW50ZXJQcmVwYXJhdGlvbnMuaD4KQEAgLTQx
NSw3ICs0MTYsOSBAQCBwdWJsaWM6CiAgICAgICAgIGF1dG8qIHNwYWNlID0gc3BhY2VzLm1fc3Vi
c3BhY2VGb3JUZXN0Tm9kZUl0ZXJhdG9yLmdldCgpOwogSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1
bnJlYWNoYWJsZS1jb2RlIikKIElHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNv
bXBhcmUiKQotICAgICAgICBpZiAoJlRlc3ROb2RlSXRlcmF0b3I6OnZpc2l0T3V0cHV0Q29uc3Ry
YWludHMgIT0gJkpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzKQorICAgICAgICB2
b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90Vmlz
aXRvciYpID0gVGVzdE5vZGVJdGVyYXRvcjo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKKyAgICAg
ICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6
OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKKyAg
ICAgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29u
c3RyYWludCkKICAgICAgICAgICAgIGNsaWVudERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygp
LmFwcGVuZChzcGFjZSk7CiBJR05PUkVfV0FSTklOR1NfRU5ECiBJR05PUkVfV0FSTklOR1NfRU5E
CkBAIC01MDUsNyArNTA4LDkgQEAgSlNDOjpJc29TdWJzcGFjZSogSlNUZXN0Tm9kZTo6c3Vic3Bh
Y2VGbwogICAgIGF1dG8qIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0Tm9kZS5nZXQo
KTsKIElHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCiBJR05PUkVfV0FS
TklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKLSAgICBpZiAoJkpTVGVzdE5vZGU6
OnZpc2l0T3V0cHV0Q29uc3RyYWludHMgIT0gJkpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0
cmFpbnRzKQorICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwq
LCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3ROb2RlOjp2aXNpdE91dHB1dENvbnN0cmFpbnRz
OworICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwg
SlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7
CisgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29u
c3RyYWludCkKICAgICAgICAgY2xpZW50RGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBw
ZW5kKHNwYWNlKTsKIElHTk9SRV9XQVJOSU5HU19FTkQKIElHTk9SRV9XQVJOSU5HU19FTkQKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RPYmouY3BwCShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTIsNiAr
OTIsNyBAQAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTU3RyaW5nLmg+CiAjaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvT2JqZWN0Q29uc3RydWN0b3IuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9Qcm9wZXJ0eU5hbWVBcnJheS5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1Nsb3RW
aXNpdG9yTWFjcm9zLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvU3Vic3BhY2VJbmxpbmVz
Lmg+CiAjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgogI2luY2x1ZGUgPHd0Zi9Qb2ludGVyUHJlcGFy
YXRpb25zLmg+CkBAIC05NDU5LDE0ICs5NDYwLDE3IEBAIEpTQzo6SXNvU3Vic3BhY2UqIEpTVGVz
dE9iajo6c3Vic3BhY2VGb3IKICAgICBhdXRvKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9y
VGVzdE9iai5nZXQoKTsKIElHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIp
CiBJR05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKLSAgICBpZiAo
JkpTVGVzdE9iajo6dmlzaXRPdXRwdXRDb25zdHJhaW50cyAhPSAmSlNDOjpKU0NlbGw6OnZpc2l0
T3V0cHV0Q29uc3RyYWludHMpCisgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShK
U0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdE9iajo6dmlzaXRPdXRwdXRD
b25zdHJhaW50czsKKyAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6
OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENv
bnN0cmFpbnRzOworICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNp
dE91dHB1dENvbnN0cmFpbnQpCiAgICAgICAgIGNsaWVudERhdGEub3V0cHV0Q29uc3RyYWludFNw
YWNlcygpLmFwcGVuZChzcGFjZSk7CiBJR05PUkVfV0FSTklOR1NfRU5ECiBJR05PUkVfV0FSTklO
R1NfRU5ECiAgICAgcmV0dXJuIHNwYWNlOwogfQogCi12b2lkIEpTVGVzdE9iajo6dmlzaXRDaGls
ZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVtcGxhdGU8dHlwZW5h
bWUgVmlzaXRvcj4KK3ZvaWQgSlNUZXN0T2JqOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNl
bGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxK
U1Rlc3RPYmoqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmpl
Y3QsIGluZm8oKSk7CkBAIC05NDc4LDYgKzk0ODIsOCBAQCB2b2lkIEpTVGVzdE9iajo6dmlzaXRD
aGlsZHJlbihKU0NlbGwqIGNlCiAjZW5kaWYKIH0KIAorREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpT
VGVzdE9iaik7CisKIHZvaWQgSlNUZXN0T2JqOjphbmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhl
YXBBbmFseXplciYgYW5hbHl6ZXIpCiB7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxK
U1Rlc3RPYmoqPihjZWxsKTsKQEAgLTk0ODcsNyArOTQ5Myw3IEBAIHZvaWQgSlNUZXN0T2JqOjph
bmFseXplSGVhcChKU0NlbGwqIGNlbGwKICAgICBCYXNlOjphbmFseXplSGVhcChjZWxsLCBhbmFs
eXplcik7CiB9CiAKLWJvb2wgSlNUZXN0T2JqT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJv
b3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgU2xvdFZpc2l0b3Im
IHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCitib29sIEpTVGVzdE9iak93bmVyOjppc1Jl
YWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwg
dm9pZCosIEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24p
CiB7CiAgICAgVU5VU0VEX1BBUkFNKGhhbmRsZSk7CiAgICAgVU5VU0VEX1BBUkFNKHZpc2l0b3Ip
OwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9i
ai5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RPYmouaAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5oCSh3b3JraW5nIGNvcHkpCkBAIC02Niw3ICs2
Niw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHN1YnNwYWNlRm9ySW1wbCh2bSk7CiAgICAg
fQogICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYg
dm0pOwotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgSlNDOjpTbG90Vmlz
aXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBzdGF0aWMgdm9pZCBh
bmFseXplSGVhcChKU0NlbGwqLCBKU0M6OkhlYXBBbmFseXplciYpOwogCkBAIC05MSw3ICs5MSw3
IEBAIHByb3RlY3RlZDoKIAogY2xhc3MgSlNUZXN0T2JqT3duZXIgZmluYWwgOiBwdWJsaWMgSlND
OjpXZWFrSGFuZGxlT3duZXIgewogcHVibGljOgotICAgIGJvb2wgaXNSZWFjaGFibGVGcm9tT3Bh
cXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCwgSlNDOjpT
bG90VmlzaXRvciYsIGNvbnN0IGNoYXIqKikgZmluYWw7CisgICAgYm9vbCBpc1JlYWNoYWJsZUZy
b21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0LCBK
U0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImLCBjb25zdCBjaGFyKiopIGZpbmFsOwogICAgIHZvaWQg
ZmluYWxpemUoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCkgZmluYWw7
CiB9OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0T3BlcmF0aW9uQ29uZGl0aW9uYWwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPcGVyYXRpb25Db25kaXRpb25hbC5jcHAJ
KHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RPcGVyYXRpb25Db25kaXRpb25hbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3
LDYgKzM3LDcgQEAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9IZWFwQW5hbHl6ZXIuaD4KICNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0NJbmxpbmVzLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvSlNEZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUuaD4KKyNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9TbG90VmlzaXRvck1hY3Jvcy5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L1N1YnNwYWNlSW5saW5lcy5oPgogI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KICNpbmNsdWRlIDx3
dGYvUG9pbnRlclByZXBhcmF0aW9ucy5oPgpAQCAtMjQwLDcgKzI0MSw5IEBAIEpTQzo6SXNvU3Vi
c3BhY2UqIEpTVGVzdE9wZXJhdGlvbkNvbmRpdGkKICAgICBhdXRvKiBzcGFjZSA9IHNwYWNlcy5t
X3N1YnNwYWNlRm9yVGVzdE9wZXJhdGlvbkNvbmRpdGlvbmFsLmdldCgpOwogSUdOT1JFX1dBUk5J
TkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKIElHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1
dG9sb2dpY2FsLWNvbXBhcmUiKQotICAgIGlmICgmSlNUZXN0T3BlcmF0aW9uQ29uZGl0aW9uYWw6
OnZpc2l0T3V0cHV0Q29uc3RyYWludHMgIT0gJkpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0
cmFpbnRzKQorICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwq
LCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3RPcGVyYXRpb25Db25kaXRpb25hbDo6dmlzaXRP
dXRwdXRDb25zdHJhaW50czsKKyAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50
KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91
dHB1dENvbnN0cmFpbnRzOworICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0Nl
bGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCiAgICAgICAgIGNsaWVudERhdGEub3V0cHV0Q29uc3Ry
YWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7CiBJR05PUkVfV0FSTklOR1NfRU5ECiBJR05PUkVf
V0FSTklOR1NfRU5ECkBAIC0yNTYsNyArMjU5LDcgQEAgdm9pZCBKU1Rlc3RPcGVyYXRpb25Db25k
aXRpb25hbDo6YW5hbHl6ZQogICAgIEJhc2U6OmFuYWx5emVIZWFwKGNlbGwsIGFuYWx5emVyKTsK
IH0KIAotYm9vbCBKU1Rlc3RPcGVyYXRpb25Db25kaXRpb25hbE93bmVyOjppc1JlYWNoYWJsZUZy
b21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIFNs
b3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQorYm9vbCBKU1Rlc3RPcGVy
YXRpb25Db25kaXRpb25hbE93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6Okhh
bmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIEFic3RyYWN0U2xvdFZpc2l0b3ImIHZp
c2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCiB7CiAgICAgVU5VU0VEX1BBUkFNKGhhbmRsZSk7
CiAgICAgVU5VU0VEX1BBUkFNKHZpc2l0b3IpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9wZXJhdGlvbkNvbmRpdGlvbmFsLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9wZXJh
dGlvbkNvbmRpdGlvbmFsLmgJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPcGVyYXRpb25Db25kaXRpb25hbC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC02Nyw3ICs2Nyw3IEBAIHByb3RlY3RlZDoKIAogY2xhc3MgSlNUZXN0T3Bl
cmF0aW9uQ29uZGl0aW9uYWxPd25lciBmaW5hbCA6IHB1YmxpYyBKU0M6OldlYWtIYW5kbGVPd25l
ciB7CiBwdWJsaWM6Ci0gICAgYm9vbCBpc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6Okhh
bmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0LCBKU0M6OlNsb3RWaXNpdG9yJiwgY29u
c3QgY2hhcioqKSBmaW5hbDsKKyAgICBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpT
Qzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6QWJzdHJhY3RTbG90
VmlzaXRvciYsIGNvbnN0IGNoYXIqKikgZmluYWw7CiAgICAgdm9pZCBmaW5hbGl6ZShKU0M6Okhh
bmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0KSBmaW5hbDsKIH07CiAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPdmVybG9hZGVkQ29u
c3RydWN0b3JzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycy5jcHAJKHJldmlzaW9uIDI3
MzExOSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RP
dmVybG9hZGVkQ29uc3RydWN0b3JzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksNiArMzksNyBA
QAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0hlYXBBbmFseXplci5oPgogI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL0pTQ0lubGluZXMuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0Rl
c3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZS5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L1Nsb3RWaXNpdG9yTWFjcm9zLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvU3Vic3BhY2VJ
bmxpbmVzLmg+CiAjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgogI2luY2x1ZGUgPHd0Zi9Qb2ludGVy
UHJlcGFyYXRpb25zLmg+CkBAIC0yOTcsNyArMjk4LDkgQEAgSlNDOjpJc29TdWJzcGFjZSogSlNU
ZXN0T3ZlcmxvYWRlZENvbnN0cgogICAgIGF1dG8qIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VG
b3JUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycy5nZXQoKTsKIElHTk9SRV9XQVJOSU5HU19CRUdJ
TigidW5yZWFjaGFibGUtY29kZSIpCiBJR05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNh
bC1jb21wYXJlIikKLSAgICBpZiAoJkpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnM6OnZpc2l0
T3V0cHV0Q29uc3RyYWludHMgIT0gJkpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRz
KQorICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6
OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzOjp2aXNpdE91dHB1
dENvbnN0cmFpbnRzOworICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpT
Qzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0
Q29uc3RyYWludHM7CisgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZp
c2l0T3V0cHV0Q29uc3RyYWludCkKICAgICAgICAgY2xpZW50RGF0YS5vdXRwdXRDb25zdHJhaW50
U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKIElHTk9SRV9XQVJOSU5HU19FTkQKIElHTk9SRV9XQVJO
SU5HU19FTkQKQEAgLTMxMyw3ICszMTYsNyBAQCB2b2lkIEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1
Y3RvcnM6OmFuYWx5CiAgICAgQmFzZTo6YW5hbHl6ZUhlYXAoY2VsbCwgYW5hbHl6ZXIpOwogfQog
Ci1ib29sIEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNPd25lcjo6aXNSZWFjaGFibGVGcm9t
T3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBTbG90
VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikKK2Jvb2wgSlNUZXN0T3Zlcmxv
YWRlZENvbnN0cnVjdG9yc093bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6Okhh
bmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIEFic3RyYWN0U2xvdFZpc2l0b3ImIHZp
c2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCiB7CiAgICAgVU5VU0VEX1BBUkFNKGhhbmRsZSk7
CiAgICAgVU5VU0VEX1BBUkFNKHZpc2l0b3IpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3Zl
cmxvYWRlZENvbnN0cnVjdG9ycy5oCShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycy5o
CSh3b3JraW5nIGNvcHkpCkBAIC02NSw3ICs2NSw3IEBAIHByb3RlY3RlZDoKIAogY2xhc3MgSlNU
ZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc093bmVyIGZpbmFsIDogcHVibGljIEpTQzo6V2Vha0hh
bmRsZU93bmVyIHsKIHB1YmxpYzoKLSAgICBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3Rz
KEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6U2xvdFZpc2l0
b3ImLCBjb25zdCBjaGFyKiopIGZpbmFsOworICAgIGJvb2wgaXNSZWFjaGFibGVGcm9tT3BhcXVl
Um9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCwgSlNDOjpBYnN0
cmFjdFNsb3RWaXNpdG9yJiwgY29uc3QgY2hhcioqKSBmaW5hbDsKICAgICB2b2lkIGZpbmFsaXpl
KEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQpIGZpbmFsOwogfTsKIApJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE92ZXJs
b2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0
b3JzV2l0aFNlcXVlbmNlLmNwcAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRo
U2VxdWVuY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw2ICszOCw3IEBACiAjaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvSlNBcnJheS5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTQ0lu
bGluZXMuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0Rlc3RydWN0aWJsZU9iamVjdEhl
YXBDZWxsVHlwZS5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1Nsb3RWaXNpdG9yTWFjcm9z
Lmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvU3Vic3BhY2VJbmxpbmVzLmg+CiAjaW5jbHVk
ZSA8d3RmL0dldFB0ci5oPgogI2luY2x1ZGUgPHd0Zi9Qb2ludGVyUHJlcGFyYXRpb25zLmg+CkBA
IC0yNDAsNyArMjQxLDkgQEAgSlNDOjpJc29TdWJzcGFjZSogSlNUZXN0T3ZlcmxvYWRlZENvbnN0
cgogICAgIGF1dG8qIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0T3ZlcmxvYWRlZENv
bnN0cnVjdG9yc1dpdGhTZXF1ZW5jZS5nZXQoKTsKIElHTk9SRV9XQVJOSU5HU19CRUdJTigidW5y
ZWFjaGFibGUtY29kZSIpCiBJR05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21w
YXJlIikKLSAgICBpZiAoJkpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2U6
OnZpc2l0T3V0cHV0Q29uc3RyYWludHMgIT0gJkpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0
cmFpbnRzKQorICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwq
LCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNl
cXVlbmNlOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOworICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91
dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpK
U0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAgaWYgKG15VmlzaXRPdXRwdXRDb25z
dHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKICAgICAgICAgY2xpZW50RGF0
YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKIElHTk9SRV9XQVJOSU5H
U19FTkQKIElHTk9SRV9XQVJOSU5HU19FTkQKQEAgLTI1Niw3ICsyNTksNyBAQCB2b2lkIEpTVGVz
dE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxCiAgICAgQmFzZTo6YW5hbHl6ZUhlYXAoY2Vs
bCwgYW5hbHl6ZXIpOwogfQogCi1ib29sIEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRo
U2VxdWVuY2VPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlND
OjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hh
cioqIHJlYXNvbikKK2Jvb2wgSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5j
ZU93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25v
d24+IGhhbmRsZSwgdm9pZCosIEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNo
YXIqKiByZWFzb24pCiB7CiAgICAgVU5VU0VEX1BBUkFNKGhhbmRsZSk7CiAgICAgVU5VU0VEX1BB
UkFNKHZpc2l0b3IpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2UuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3Zlcmxv
YWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZS5oCShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3ZlcmxvYWRlZENvbnN0
cnVjdG9yc1dpdGhTZXF1ZW5jZS5oCSh3b3JraW5nIGNvcHkpCkBAIC02NSw3ICs2NSw3IEBAIHBy
b3RlY3RlZDoKIAogY2xhc3MgSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5j
ZU93bmVyIGZpbmFsIDogcHVibGljIEpTQzo6V2Vha0hhbmRsZU93bmVyIHsKIHB1YmxpYzoKLSAg
ICBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93
bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6U2xvdFZpc2l0b3ImLCBjb25zdCBjaGFyKiopIGZpbmFs
OworICAgIGJvb2wgaXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpV
bmtub3duPiwgdm9pZCogY29udGV4dCwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiwgY29uc3Qg
Y2hhcioqKSBmaW5hbDsKICAgICB2b2lkIGZpbmFsaXplKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93
bj4sIHZvaWQqIGNvbnRleHQpIGZpbmFsOwogfTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFBsdWdpbkludGVyZmFjZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFBsdWdp
bkludGVyZmFjZS5jcHAJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RQbHVnaW5JbnRlcmZhY2UuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSGVhcEFuYWx5
emVyLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNDSW5saW5lcy5oPgogI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL0pTRGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLmg+CisjaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvU2xvdFZpc2l0b3JNYWNyb3MuaD4KICNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9TdWJzcGFjZUlubGluZXMuaD4KICNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CiAj
aW5jbHVkZSA8d3RmL1BvaW50ZXJQcmVwYXJhdGlvbnMuaD4KQEAgLTIzNCw3ICsyMzUsOSBAQCBK
U0M6Oklzb1N1YnNwYWNlKiBKU1Rlc3RQbHVnaW5JbnRlcmZhY2U6CiAgICAgYXV0byogc3BhY2Ug
PSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RQbHVnaW5JbnRlcmZhY2UuZ2V0KCk7CiBJR05PUkVf
V0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQogSUdOT1JFX1dBUk5JTkdTX0JFR0lO
KCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgaWYgKCZKU1Rlc3RQbHVnaW5JbnRlcmZhY2U6
OnZpc2l0T3V0cHV0Q29uc3RyYWludHMgIT0gJkpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0
cmFpbnRzKQorICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwq
LCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3RQbHVnaW5JbnRlcmZhY2U6OnZpc2l0T3V0cHV0
Q29uc3RyYWludHM7CisgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlND
OjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRD
b25zdHJhaW50czsKKyAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlz
aXRPdXRwdXRDb25zdHJhaW50KQogICAgICAgICBjbGllbnREYXRhLm91dHB1dENvbnN0cmFpbnRT
cGFjZXMoKS5hcHBlbmQoc3BhY2UpOwogSUdOT1JFX1dBUk5JTkdTX0VORAogSUdOT1JFX1dBUk5J
TkdTX0VORApAQCAtMjUwLDcgKzI1Myw3IEBAIHZvaWQgSlNUZXN0UGx1Z2luSW50ZXJmYWNlOjph
bmFseXplSGVhcCgKICAgICBCYXNlOjphbmFseXplSGVhcChjZWxsLCBhbmFseXplcik7CiB9CiAK
LWJvb2wgSlNUZXN0UGx1Z2luSW50ZXJmYWNlT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJv
b3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgU2xvdFZpc2l0b3Im
IHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCitib29sIEpTVGVzdFBsdWdpbkludGVyZmFj
ZU93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25v
d24+IGhhbmRsZSwgdm9pZCosIEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNo
YXIqKiByZWFzb24pCiB7CiAgICAgVU5VU0VEX1BBUkFNKGhhbmRsZSk7CiAgICAgVU5VU0VEX1BB
UkFNKHZpc2l0b3IpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdFBsdWdpbkludGVyZmFjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RQbHVnaW5JbnRlcmZhY2UuaAkocmV2aXNp
b24gMjczMTE5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdFBsdWdpbkludGVyZmFjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03NCw3ICs3NCw3IEBAIHBy
b3RlY3RlZDoKIAogY2xhc3MgSlNUZXN0UGx1Z2luSW50ZXJmYWNlT3duZXIgZmluYWwgOiBwdWJs
aWMgSlNDOjpXZWFrSGFuZGxlT3duZXIgewogcHVibGljOgotICAgIGJvb2wgaXNSZWFjaGFibGVG
cm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCwg
SlNDOjpTbG90VmlzaXRvciYsIGNvbnN0IGNoYXIqKikgZmluYWw7CisgICAgYm9vbCBpc1JlYWNo
YWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250
ZXh0LCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImLCBjb25zdCBjaGFyKiopIGZpbmFsOwogICAg
IHZvaWQgZmluYWxpemUoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCkg
ZmluYWw7CiB9OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0UHJvbWlzZVJlamVjdGlvbkV2ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0UHJvbWlzZVJlamVjdGlvbkV2
ZW50LmNwcAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdFByb21pc2VSZWplY3Rpb25FdmVudC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQwLDYgKzQwLDcgQEAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9IZWFwQW5hbHl6
ZXIuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0NJbmxpbmVzLmg+CiAjaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvSlNEZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUuaD4KKyNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9TbG90VmlzaXRvck1hY3Jvcy5oPgogI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL1N1YnNwYWNlSW5saW5lcy5oPgogI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KICNp
bmNsdWRlIDx3dGYvUG9pbnRlclByZXBhcmF0aW9ucy5oPgpAQCAtMzA4LDcgKzMwOSw5IEBAIEpT
Qzo6SXNvU3Vic3BhY2UqIEpTVGVzdFByb21pc2VSZWplY3Rpb24KICAgICBhdXRvKiBzcGFjZSA9
IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdFByb21pc2VSZWplY3Rpb25FdmVudC5nZXQoKTsKIElH
Tk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCiBJR05PUkVfV0FSTklOR1Nf
QkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKLSAgICBpZiAoJkpTVGVzdFByb21pc2VSZWpl
Y3Rpb25FdmVudDo6dmlzaXRPdXRwdXRDb25zdHJhaW50cyAhPSAmSlNDOjpKU0NlbGw6OnZpc2l0
T3V0cHV0Q29uc3RyYWludHMpCisgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShK
U0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdFByb21pc2VSZWplY3Rpb25F
dmVudDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKKyAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRw
dXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlND
ZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOworICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3Ry
YWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCiAgICAgICAgIGNsaWVudERhdGEu
b3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7CiBJR05PUkVfV0FSTklOR1Nf
RU5ECiBJR05PUkVfV0FSTklOR1NfRU5ECkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0UmVhZE9ubHlNYXBMaWtlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0UmVhZE9ubHlNYXBM
aWtlLmNwcAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdFJlYWRPbmx5TWFwTGlrZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM5LDYgKzM5LDcgQEAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9IZWFwQW5hbHl6ZXIuaD4K
ICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0NJbmxpbmVzLmg+CiAjaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvSlNEZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUuaD4KKyNpbmNsdWRlIDxK
YXZhU2NyaXB0Q29yZS9TbG90VmlzaXRvck1hY3Jvcy5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL1N1YnNwYWNlSW5saW5lcy5oPgogI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KICNpbmNsdWRl
IDx3dGYvUG9pbnRlclByZXBhcmF0aW9ucy5oPgpAQCAtMzE3LDcgKzMxOCw5IEBAIEpTQzo6SXNv
U3Vic3BhY2UqIEpTVGVzdFJlYWRPbmx5TWFwTGlrZToKICAgICBhdXRvKiBzcGFjZSA9IHNwYWNl
cy5tX3N1YnNwYWNlRm9yVGVzdFJlYWRPbmx5TWFwTGlrZS5nZXQoKTsKIElHTk9SRV9XQVJOSU5H
U19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCiBJR05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRv
bG9naWNhbC1jb21wYXJlIikKLSAgICBpZiAoJkpTVGVzdFJlYWRPbmx5TWFwTGlrZTo6dmlzaXRP
dXRwdXRDb25zdHJhaW50cyAhPSAmSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHMp
CisgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6
U2xvdFZpc2l0b3ImKSA9IEpTVGVzdFJlYWRPbmx5TWFwTGlrZTo6dmlzaXRPdXRwdXRDb25zdHJh
aW50czsKKyAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2Vs
bCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFp
bnRzOworICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1
dENvbnN0cmFpbnQpCiAgICAgICAgIGNsaWVudERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygp
LmFwcGVuZChzcGFjZSk7CiBJR05PUkVfV0FSTklOR1NfRU5ECiBJR05PUkVfV0FSTklOR1NfRU5E
CkBAIC0zMzMsNyArMzM2LDcgQEAgdm9pZCBKU1Rlc3RSZWFkT25seU1hcExpa2U6OmFuYWx5emVI
ZWFwKAogICAgIEJhc2U6OmFuYWx5emVIZWFwKGNlbGwsIGFuYWx5emVyKTsKIH0KIAotYm9vbCBK
U1Rlc3RSZWFkT25seU1hcExpa2VPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlND
OjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBTbG90VmlzaXRvciYgdmlzaXRv
ciwgY29uc3QgY2hhcioqIHJlYXNvbikKK2Jvb2wgSlNUZXN0UmVhZE9ubHlNYXBMaWtlT3duZXI6
OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFu
ZGxlLCB2b2lkKiwgQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJl
YXNvbikKIHsKICAgICBVTlVTRURfUEFSQU0oaGFuZGxlKTsKICAgICBVTlVTRURfUEFSQU0odmlz
aXRvcik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0UmVhZE9ubHlNYXBMaWtlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFJlYWRPbmx5TWFwTGlrZS5oCShyZXZpc2lvbiAyNzMx
MTkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0UmVh
ZE9ubHlNYXBMaWtlLmgJKHdvcmtpbmcgY29weSkKQEAgLTY1LDcgKzY1LDcgQEAgcHJvdGVjdGVk
OgogCiBjbGFzcyBKU1Rlc3RSZWFkT25seU1hcExpa2VPd25lciBmaW5hbCA6IHB1YmxpYyBKU0M6
OldlYWtIYW5kbGVPd25lciB7CiBwdWJsaWM6Ci0gICAgYm9vbCBpc1JlYWNoYWJsZUZyb21PcGFx
dWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0LCBKU0M6OlNs
b3RWaXNpdG9yJiwgY29uc3QgY2hhcioqKSBmaW5hbDsKKyAgICBib29sIGlzUmVhY2hhYmxlRnJv
bU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIEpT
Qzo6QWJzdHJhY3RTbG90VmlzaXRvciYsIGNvbnN0IGNoYXIqKikgZmluYWw7CiAgICAgdm9pZCBm
aW5hbGl6ZShKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0KSBmaW5hbDsK
IH07CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RSZWFkT25seVNldExpa2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RSZWFkT25seVNldExpa2UuY3BwCShyZXZpc2lvbiAy
NzMxMTkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
UmVhZE9ubHlTZXRMaWtlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksNiArMzksNyBAQAogI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL0hlYXBBbmFseXplci5oPgogI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL0pTQ0lubGluZXMuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0Rlc3RydWN0
aWJsZU9iamVjdEhlYXBDZWxsVHlwZS5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1Nsb3RW
aXNpdG9yTWFjcm9zLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvU3Vic3BhY2VJbmxpbmVz
Lmg+CiAjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgogI2luY2x1ZGUgPHd0Zi9Qb2ludGVyUHJlcGFy
YXRpb25zLmg+CkBAIC0yOTYsNyArMjk3LDkgQEAgSlNDOjpJc29TdWJzcGFjZSogSlNUZXN0UmVh
ZE9ubHlTZXRMaWtlOgogICAgIGF1dG8qIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0
UmVhZE9ubHlTZXRMaWtlLmdldCgpOwogSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJs
ZS1jb2RlIikKIElHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQot
ICAgIGlmICgmSlNUZXN0UmVhZE9ubHlTZXRMaWtlOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzICE9
ICZKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50cykKKyAgICB2b2lkICgqbXlWaXNp
dE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNU
ZXN0UmVhZE9ubHlTZXRMaWtlOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOworICAgIHZvaWQgKCpq
c0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRv
ciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAgaWYgKG15Vmlz
aXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKICAgICAg
ICAgY2xpZW50RGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKIElH
Tk9SRV9XQVJOSU5HU19FTkQKIElHTk9SRV9XQVJOSU5HU19FTkQKQEAgLTMxMiw3ICszMTUsNyBA
QCB2b2lkIEpTVGVzdFJlYWRPbmx5U2V0TGlrZTo6YW5hbHl6ZUhlYXAoCiAgICAgQmFzZTo6YW5h
bHl6ZUhlYXAoY2VsbCwgYW5hbHl6ZXIpOwogfQogCi1ib29sIEpTVGVzdFJlYWRPbmx5U2V0TGlr
ZU93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25v
d24+IGhhbmRsZSwgdm9pZCosIFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVh
c29uKQorYm9vbCBKU1Rlc3RSZWFkT25seVNldExpa2VPd25lcjo6aXNSZWFjaGFibGVGcm9tT3Bh
cXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBBYnN0cmFj
dFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQogewogICAgIFVOVVNF
RF9QQVJBTShoYW5kbGUpOwogICAgIFVOVVNFRF9QQVJBTSh2aXNpdG9yKTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RSZWFkT25seVNldExpa2Uu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0UmVhZE9ubHlTZXRMaWtlLmgJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RSZWFkT25seVNldExpa2UuaAkod29y
a2luZyBjb3B5KQpAQCAtNjUsNyArNjUsNyBAQCBwcm90ZWN0ZWQ6CiAKIGNsYXNzIEpTVGVzdFJl
YWRPbmx5U2V0TGlrZU93bmVyIGZpbmFsIDogcHVibGljIEpTQzo6V2Vha0hhbmRsZU93bmVyIHsK
IHB1YmxpYzoKLSAgICBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxl
PEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6U2xvdFZpc2l0b3ImLCBjb25zdCBj
aGFyKiopIGZpbmFsOworICAgIGJvb2wgaXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpI
YW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCwgSlNDOjpBYnN0cmFjdFNsb3RWaXNp
dG9yJiwgY29uc3QgY2hhcioqKSBmaW5hbDsKICAgICB2b2lkIGZpbmFsaXplKEpTQzo6SGFuZGxl
PEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQpIGZpbmFsOwogfTsKIApJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFJlcG9ydEV4dHJhTWVtb3J5
Q29zdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdFJlcG9ydEV4dHJhTWVtb3J5Q29zdC5jcHAJKHJldmlzaW9uIDI3MzExOSkK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RSZXBvcnRF
eHRyYU1lbW9yeUNvc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw3IEBACiAjaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvSGVhcEFuYWx5emVyLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvSlNDSW5saW5lcy5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTRGVzdHJ1Y3Rp
YmxlT2JqZWN0SGVhcENlbGxUeXBlLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvU2xvdFZp
c2l0b3JNYWNyb3MuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9TdWJzcGFjZUlubGluZXMu
aD4KICNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CiAjaW5jbHVkZSA8d3RmL1BvaW50ZXJQcmVwYXJh
dGlvbnMuaD4KQEAgLTE3MywxNCArMTc0LDE3IEBAIEpTQzo6SXNvU3Vic3BhY2UqIEpTVGVzdFJl
cG9ydEV4dHJhTWVtb3IKICAgICBhdXRvKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVz
dFJlcG9ydEV4dHJhTWVtb3J5Q29zdC5nZXQoKTsKIElHTk9SRV9XQVJOSU5HU19CRUdJTigidW5y
ZWFjaGFibGUtY29kZSIpCiBJR05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21w
YXJlIikKLSAgICBpZiAoJkpTVGVzdFJlcG9ydEV4dHJhTWVtb3J5Q29zdDo6dmlzaXRPdXRwdXRD
b25zdHJhaW50cyAhPSAmSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHMpCisgICAg
dm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZp
c2l0b3ImKSA9IEpTVGVzdFJlcG9ydEV4dHJhTWVtb3J5Q29zdDo6dmlzaXRPdXRwdXRDb25zdHJh
aW50czsKKyAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2Vs
bCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFp
bnRzOworICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1
dENvbnN0cmFpbnQpCiAgICAgICAgIGNsaWVudERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygp
LmFwcGVuZChzcGFjZSk7CiBJR05PUkVfV0FSTklOR1NfRU5ECiBJR05PUkVfV0FSTklOR1NfRU5E
CiAgICAgcmV0dXJuIHNwYWNlOwogfQogCi12b2lkIEpTVGVzdFJlcG9ydEV4dHJhTWVtb3J5Q29z
dDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordGVt
cGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNUZXN0UmVwb3J0RXh0cmFNZW1vcnlDb3N0
Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAg
ICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3RSZXBvcnRFeHRyYU1lbW9yeUNvc3Qq
PihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8o
KSk7CkBAIC0xODgsNiArMTkyLDggQEAgdm9pZCBKU1Rlc3RSZXBvcnRFeHRyYU1lbW9yeUNvc3Q6
OnZpc2l0QwogICAgIHZpc2l0b3IucmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKHRoaXNPYmplY3Qt
PndyYXBwZWQoKS5tZW1vcnlDb3N0KCkpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNU
ZXN0UmVwb3J0RXh0cmFNZW1vcnlDb3N0KTsKKwogc2l6ZV90IEpTVGVzdFJlcG9ydEV4dHJhTWVt
b3J5Q29zdDo6ZXN0aW1hdGVkU2l6ZShKU0NlbGwqIGNlbGwsIFZNJiB2bSkKIHsKICAgICBhdXRv
KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdFJlcG9ydEV4dHJhTWVtb3J5Q29zdCo+KGNlbGwp
OwpAQCAtMjAzLDcgKzIwOSw3IEBAIHZvaWQgSlNUZXN0UmVwb3J0RXh0cmFNZW1vcnlDb3N0Ojph
bmFseXoKICAgICBCYXNlOjphbmFseXplSGVhcChjZWxsLCBhbmFseXplcik7CiB9CiAKLWJvb2wg
SlNUZXN0UmVwb3J0RXh0cmFNZW1vcnlDb3N0T3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJv
b3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgU2xvdFZpc2l0b3Im
IHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCitib29sIEpTVGVzdFJlcG9ydEV4dHJhTWVt
b3J5Q29zdE93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6
OlVua25vd24+IGhhbmRsZSwgdm9pZCosIEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNv
bnN0IGNoYXIqKiByZWFzb24pCiB7CiAgICAgVU5VU0VEX1BBUkFNKGhhbmRsZSk7CiAgICAgVU5V
U0VEX1BBUkFNKHZpc2l0b3IpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdFJlcG9ydEV4dHJhTWVtb3J5Q29zdC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RSZXBvcnRFeHRyYU1l
bW9yeUNvc3QuaAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdFJlcG9ydEV4dHJhTWVtb3J5Q29zdC5oCSh3b3JraW5nIGNv
cHkpCkBAIC01Nyw3ICs1Nyw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHN1YnNwYWNlRm9y
SW1wbCh2bSk7CiAgICAgfQogICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZv
ckltcGwoSlNDOjpWTSYgdm0pOwotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiwgSlNDOjpTbG90VmlzaXRvciYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAg
ICBzdGF0aWMgdm9pZCBhbmFseXplSGVhcChKU0NlbGwqLCBKU0M6OkhlYXBBbmFseXplciYpOwog
cHJvdGVjdGVkOgpAQCAtNjgsNyArNjgsNyBAQCBwcm90ZWN0ZWQ6CiAKIGNsYXNzIEpTVGVzdFJl
cG9ydEV4dHJhTWVtb3J5Q29zdE93bmVyIGZpbmFsIDogcHVibGljIEpTQzo6V2Vha0hhbmRsZU93
bmVyIHsKIHB1YmxpYzoKLSAgICBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6
SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6U2xvdFZpc2l0b3ImLCBj
b25zdCBjaGFyKiopIGZpbmFsOworICAgIGJvb2wgaXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMo
SlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCwgSlNDOjpBYnN0cmFjdFNs
b3RWaXNpdG9yJiwgY29uc3QgY2hhcioqKSBmaW5hbDsKICAgICB2b2lkIGZpbmFsaXplKEpTQzo6
SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQpIGZpbmFsOwogfTsKIApJbmRleDog
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZUludGVyZmFjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFj
ZS5jcHAJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00NSw2ICs0NSw3IEBACiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNB
cnJheS5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTQ0lubGluZXMuaD4KICNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9KU0Rlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZS5oPgorI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL1Nsb3RWaXNpdG9yTWFjcm9zLmg+CiAjaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvU3Vic3BhY2VJbmxpbmVzLmg+CiAjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgog
I2luY2x1ZGUgPHd0Zi9Qb2ludGVyUHJlcGFyYXRpb25zLmg+CkBAIC0zNjEsMTQgKzM2MiwxNyBA
QCBKU0M6Oklzb1N1YnNwYWNlKiBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0CiAgICAgYXV0byogc3Bh
Y2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZh
Y2UuZ2V0KCk7CiBJR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQogSUdO
T1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgaWYgKCZKU1Rl
c3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2U6OnZpc2l0T3V0cHV0Q29uc3RyYWludHMg
IT0gJkpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzKQorICAgIHZvaWQgKCpteVZp
c2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBK
U1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2U6OnZpc2l0T3V0cHV0Q29uc3RyYWlu
dHM7CisgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwq
LCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50
czsKKyAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRD
b25zdHJhaW50KQogICAgICAgICBjbGllbnREYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5h
cHBlbmQoc3BhY2UpOwogSUdOT1JFX1dBUk5JTkdTX0VORAogSUdOT1JFX1dBUk5JTkdTX0VORAog
ICAgIHJldHVybiBzcGFjZTsKIH0KIAotdm9pZCBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJ
bnRlcmZhY2U6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRv
cikKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTVGVzdFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZUludGVyZmFjZTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9y
JiB2aXNpdG9yKQogewogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0U2VyaWFs
aXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9J
TkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtMzc3LDYgKzM4MSw4IEBAIHZvaWQgSlNU
ZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWMKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlz
T2JqZWN0LT5tX2NhY2hlZFJlYWRvbmx5VmFsdWUpOwogfQogCitERUZJTkVfVklTSVRfQ0hJTERS
RU4oSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKTsKKwogdm9pZCBKU1Rlc3RT
ZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2U6OmFuYWx5emVIZWFwKEpTQ2VsbCogY2VsbCwg
SGVhcEFuYWx5emVyJiBhbmFseXplcikKIHsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0
PEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSo+KGNlbGwpOwpAQCAtMzg2LDcg
KzM5Miw3IEBAIHZvaWQgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWMKICAgICBC
YXNlOjphbmFseXplSGVhcChjZWxsLCBhbmFseXplcik7CiB9CiAKLWJvb2wgSlNUZXN0U2VyaWFs
aXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3Rz
KEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgU2xvdFZpc2l0b3ImIHZp
c2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCitib29sIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZUludGVyZmFjZU93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRs
ZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0
b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCiB7CiAgICAgVU5VU0VEX1BBUkFNKGhhbmRsZSk7CiAg
ICAgVU5VU0VEX1BBUkFNKHZpc2l0b3IpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuaAkocmV2aXNpb24gMjczMTE5KQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZUludGVyZmFjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC02MCw3ICs2MCw3IEBAIHB1
YmxpYzoKICAgICAgICAgcmV0dXJuIHN1YnNwYWNlRm9ySW1wbCh2bSk7CiAgICAgfQogICAgIHN0
YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pOwotICAg
IHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpOwor
ICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBzdGF0aWMgdm9pZCBhbmFseXplSGVh
cChKU0NlbGwqLCBKU0M6OkhlYXBBbmFseXplciYpOwogcHJvdGVjdGVkOgpAQCAtNzEsNyArNzEs
NyBAQCBwcm90ZWN0ZWQ6CiAKIGNsYXNzIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVy
ZmFjZU93bmVyIGZpbmFsIDogcHVibGljIEpTQzo6V2Vha0hhbmRsZU93bmVyIHsKIHB1YmxpYzoK
LSAgICBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5r
bm93bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6U2xvdFZpc2l0b3ImLCBjb25zdCBjaGFyKiopIGZp
bmFsOworICAgIGJvb2wgaXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlND
OjpVbmtub3duPiwgdm9pZCogY29udGV4dCwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiwgY29u
c3QgY2hhcioqKSBmaW5hbDsKICAgICB2b2lkIGZpbmFsaXplKEpTQzo6SGFuZGxlPEpTQzo6VW5r
bm93bj4sIHZvaWQqIGNvbnRleHQpIGZpbmFsOwogfTsKIApJbmRleDogU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNldExpa2UuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXRMaWtlLmNw
cAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdFNldExpa2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw2ICszOSw3IEBA
CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSGVhcEFuYWx5emVyLmg+CiAjaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvSlNDSW5saW5lcy5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTRGVz
dHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
U2xvdFZpc2l0b3JNYWNyb3MuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9TdWJzcGFjZUlu
bGluZXMuaD4KICNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CiAjaW5jbHVkZSA8d3RmL1BvaW50ZXJQ
cmVwYXJhdGlvbnMuaD4KQEAgLTM1Niw3ICszNTcsOSBAQCBKU0M6Oklzb1N1YnNwYWNlKiBKU1Rl
c3RTZXRMaWtlOjpzdWJzcGFjCiAgICAgYXV0byogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZv
clRlc3RTZXRMaWtlLmdldCgpOwogSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1j
b2RlIikKIElHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQotICAg
IGlmICgmSlNUZXN0U2V0TGlrZTo6dmlzaXRPdXRwdXRDb25zdHJhaW50cyAhPSAmSlNDOjpKU0Nl
bGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHMpCisgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25z
dHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdFNldExpa2U6
OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29u
c3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6
dmlzaXRPdXRwdXRDb25zdHJhaW50czsKKyAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQg
IT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQogICAgICAgICBjbGllbnREYXRhLm91dHB1
dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOwogSUdOT1JFX1dBUk5JTkdTX0VORAog
SUdOT1JFX1dBUk5JTkdTX0VORApAQCAtMzcyLDcgKzM3NSw3IEBAIHZvaWQgSlNUZXN0U2V0TGlr
ZTo6YW5hbHl6ZUhlYXAoSlNDZWxsKiAKICAgICBCYXNlOjphbmFseXplSGVhcChjZWxsLCBhbmFs
eXplcik7CiB9CiAKLWJvb2wgSlNUZXN0U2V0TGlrZU93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFx
dWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIFNsb3RWaXNp
dG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQorYm9vbCBKU1Rlc3RTZXRMaWtlT3du
ZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4g
aGFuZGxlLCB2b2lkKiwgQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioq
IHJlYXNvbikKIHsKICAgICBVTlVTRURfUEFSQU0oaGFuZGxlKTsKICAgICBVTlVTRURfUEFSQU0o
dmlzaXRvcik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0U2V0TGlrZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXRMaWtlLmgJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXRMaWtlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTY1LDcgKzY1LDcgQEAgcHJvdGVjdGVkOgogCiBjbGFzcyBKU1Rlc3RTZXRM
aWtlT3duZXIgZmluYWwgOiBwdWJsaWMgSlNDOjpXZWFrSGFuZGxlT3duZXIgewogcHVibGljOgot
ICAgIGJvb2wgaXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtu
b3duPiwgdm9pZCogY29udGV4dCwgSlNDOjpTbG90VmlzaXRvciYsIGNvbnN0IGNoYXIqKikgZmlu
YWw7CisgICAgYm9vbCBpc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6
OlVua25vd24+LCB2b2lkKiBjb250ZXh0LCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImLCBjb25z
dCBjaGFyKiopIGZpbmFsOwogICAgIHZvaWQgZmluYWxpemUoSlNDOjpIYW5kbGU8SlNDOjpVbmtu
b3duPiwgdm9pZCogY29udGV4dCkgZmluYWw7CiB9OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0
aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdFNldExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnMuY3BwCShyZXZpc2lv
biAyNzMxMTkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQwLDYgKzQwLDcgQEAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9IZWFwQW5hbHl6ZXIuaD4K
ICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0NJbmxpbmVzLmg+CiAjaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvSlNEZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUuaD4KKyNpbmNsdWRlIDxK
YXZhU2NyaXB0Q29yZS9TbG90VmlzaXRvck1hY3Jvcy5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL1N1YnNwYWNlSW5saW5lcy5oPgogI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KICNpbmNsdWRl
IDx3dGYvUG9pbnRlclByZXBhcmF0aW9ucy5oPgpAQCAtMzY4LDcgKzM2OSw5IEBAIEpTQzo6SXNv
U3Vic3BhY2UqIEpTVGVzdFNldExpa2VXaXRoT3ZlcnIKICAgICBhdXRvKiBzcGFjZSA9IHNwYWNl
cy5tX3N1YnNwYWNlRm9yVGVzdFNldExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnMuZ2V0KCk7
CiBJR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQogSUdOT1JFX1dBUk5J
TkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgaWYgKCZKU1Rlc3RTZXRMaWtl
V2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzICE9ICZKU0M6
OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50cykKKyAgICB2b2lkICgqbXlWaXNpdE91dHB1
dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0U2V0
TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9uczo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKKyAg
ICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6
U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOworICAg
IGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFp
bnQpCiAgICAgICAgIGNsaWVudERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChz
cGFjZSk7CiBJR05PUkVfV0FSTklOR1NfRU5ECiBJR05PUkVfV0FSTklOR1NfRU5ECkBAIC0zODQs
NyArMzg3LDcgQEAgdm9pZCBKU1Rlc3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpbwogICAg
IEJhc2U6OmFuYWx5emVIZWFwKGNlbGwsIGFuYWx5emVyKTsKIH0KIAotYm9vbCBKU1Rlc3RTZXRM
aWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJv
b3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgU2xvdFZpc2l0b3Im
IHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCitib29sIEpTVGVzdFNldExpa2VXaXRoT3Zl
cnJpZGRlbk9wZXJhdGlvbnNPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpI
YW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBBYnN0cmFjdFNsb3RWaXNpdG9yJiB2
aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQogewogICAgIFVOVVNFRF9QQVJBTShoYW5kbGUp
OwogICAgIFVOVVNFRF9QQVJBTSh2aXNpdG9yKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25z
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdFNldExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnMuaAkocmV2aXNpb24gMjczMTE5
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNldExp
a2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtNjUsNyArNjUs
NyBAQCBwcm90ZWN0ZWQ6CiAKIGNsYXNzIEpTVGVzdFNldExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJh
dGlvbnNPd25lciBmaW5hbCA6IHB1YmxpYyBKU0M6OldlYWtIYW5kbGVPd25lciB7CiBwdWJsaWM6
Ci0gICAgYm9vbCBpc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVu
a25vd24+LCB2b2lkKiBjb250ZXh0LCBKU0M6OlNsb3RWaXNpdG9yJiwgY29uc3QgY2hhcioqKSBm
aW5hbDsKKyAgICBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpT
Qzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYsIGNv
bnN0IGNoYXIqKikgZmluYWw7CiAgICAgdm9pZCBmaW5hbGl6ZShKU0M6OkhhbmRsZTxKU0M6OlVu
a25vd24+LCB2b2lkKiBjb250ZXh0KSBmaW5hbDsKIH07CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTdHJpbmdpZmllci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFN0cmlu
Z2lmaWVyLmNwcAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdFN0cmluZ2lmaWVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzUsNiArMzUsNyBAQAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0hlYXBBbmFseXplci5oPgog
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTQ0lubGluZXMuaD4KICNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9KU0Rlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZS5oPgorI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL1Nsb3RWaXNpdG9yTWFjcm9zLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvU3Vic3BhY2VJbmxpbmVzLmg+CiAjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgogI2luY2x1ZGUg
PHd0Zi9Qb2ludGVyUHJlcGFyYXRpb25zLmg+CkBAIC0xOTksNyArMjAwLDkgQEAgSlNDOjpJc29T
dWJzcGFjZSogSlNUZXN0U3RyaW5naWZpZXI6OnN1YgogICAgIGF1dG8qIHNwYWNlID0gc3BhY2Vz
Lm1fc3Vic3BhY2VGb3JUZXN0U3RyaW5naWZpZXIuZ2V0KCk7CiBJR05PUkVfV0FSTklOR1NfQkVH
SU4oInVucmVhY2hhYmxlLWNvZGUiKQogSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2lj
YWwtY29tcGFyZSIpCi0gICAgaWYgKCZKU1Rlc3RTdHJpbmdpZmllcjo6dmlzaXRPdXRwdXRDb25z
dHJhaW50cyAhPSAmSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHMpCisgICAgdm9p
ZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0
b3ImKSA9IEpTVGVzdFN0cmluZ2lmaWVyOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOworICAgIHZv
aWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90
VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAgaWYg
KG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkK
ICAgICAgICAgY2xpZW50RGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNl
KTsKIElHTk9SRV9XQVJOSU5HU19FTkQKIElHTk9SRV9XQVJOSU5HU19FTkQKQEAgLTIxNSw3ICsy
MTgsNyBAQCB2b2lkIEpTVGVzdFN0cmluZ2lmaWVyOjphbmFseXplSGVhcChKU0NlCiAgICAgQmFz
ZTo6YW5hbHl6ZUhlYXAoY2VsbCwgYW5hbHl6ZXIpOwogfQogCi1ib29sIEpTVGVzdFN0cmluZ2lm
aWVyT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5r
bm93bj4gaGFuZGxlLCB2b2lkKiwgU2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiBy
ZWFzb24pCitib29sIEpTVGVzdFN0cmluZ2lmaWVyT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1
ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgQWJzdHJhY3RT
bG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikKIHsKICAgICBVTlVTRURf
UEFSQU0oaGFuZGxlKTsKICAgICBVTlVTRURfUEFSQU0odmlzaXRvcik7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U3RyaW5naWZpZXIuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
U3RyaW5naWZpZXIuaAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFN0cmluZ2lmaWVyLmgJKHdvcmtpbmcgY29weSkKQEAg
LTY1LDcgKzY1LDcgQEAgcHJvdGVjdGVkOgogCiBjbGFzcyBKU1Rlc3RTdHJpbmdpZmllck93bmVy
IGZpbmFsIDogcHVibGljIEpTQzo6V2Vha0hhbmRsZU93bmVyIHsKIHB1YmxpYzoKLSAgICBib29s
IGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZv
aWQqIGNvbnRleHQsIEpTQzo6U2xvdFZpc2l0b3ImLCBjb25zdCBjaGFyKiopIGZpbmFsOworICAg
IGJvb2wgaXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3du
Piwgdm9pZCogY29udGV4dCwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiwgY29uc3QgY2hhcioq
KSBmaW5hbDsKICAgICB2b2lkIGZpbmFsaXplKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZv
aWQqIGNvbnRleHQpIGZpbmFsOwogfTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdFN0cmluZ2lmaWVyQW5vbnltb3VzT3BlcmF0aW9uLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0U3RyaW5naWZpZXJBbm9ueW1vdXNPcGVyYXRpb24uY3BwCShyZXZpc2lvbiAyNzMxMTkpCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U3RyaW5naWZp
ZXJBbm9ueW1vdXNPcGVyYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw2ICszNSw3IEBA
CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSGVhcEFuYWx5emVyLmg+CiAjaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvSlNDSW5saW5lcy5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTRGVz
dHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
U2xvdFZpc2l0b3JNYWNyb3MuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9TdWJzcGFjZUlu
bGluZXMuaD4KICNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CiAjaW5jbHVkZSA8d3RmL1BvaW50ZXJQ
cmVwYXJhdGlvbnMuaD4KQEAgLTE5OSw3ICsyMDAsOSBAQCBKU0M6Oklzb1N1YnNwYWNlKiBKU1Rl
c3RTdHJpbmdpZmllckFub255CiAgICAgYXV0byogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZv
clRlc3RTdHJpbmdpZmllckFub255bW91c09wZXJhdGlvbi5nZXQoKTsKIElHTk9SRV9XQVJOSU5H
U19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCiBJR05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRv
bG9naWNhbC1jb21wYXJlIikKLSAgICBpZiAoJkpTVGVzdFN0cmluZ2lmaWVyQW5vbnltb3VzT3Bl
cmF0aW9uOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzICE9ICZKU0M6OkpTQ2VsbDo6dmlzaXRPdXRw
dXRDb25zdHJhaW50cykKKyAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6
SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0U3RyaW5naWZpZXJBbm9ueW1vdXNP
cGVyYXRpb246OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAgdm9pZCAoKmpzQ2VsbFZpc2l0
T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6
OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKKyAgICBpZiAobXlWaXNpdE91dHB1dENv
bnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQogICAgICAgICBjbGllbnRE
YXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOwogSUdOT1JFX1dBUk5J
TkdTX0VORAogSUdOT1JFX1dBUk5JTkdTX0VORApAQCAtMjE1LDcgKzIxOCw3IEBAIHZvaWQgSlNU
ZXN0U3RyaW5naWZpZXJBbm9ueW1vdXNPcGVyYXRpb24KICAgICBCYXNlOjphbmFseXplSGVhcChj
ZWxsLCBhbmFseXplcik7CiB9CiAKLWJvb2wgSlNUZXN0U3RyaW5naWZpZXJBbm9ueW1vdXNPcGVy
YXRpb25Pd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpV
bmtub3duPiBoYW5kbGUsIHZvaWQqLCBTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioq
IHJlYXNvbikKK2Jvb2wgSlNUZXN0U3RyaW5naWZpZXJBbm9ueW1vdXNPcGVyYXRpb25Pd25lcjo6
aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5k
bGUsIHZvaWQqLCBBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVh
c29uKQogewogICAgIFVOVVNFRF9QQVJBTShoYW5kbGUpOwogICAgIFVOVVNFRF9QQVJBTSh2aXNp
dG9yKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RTdHJpbmdpZmllckFub255bW91c09wZXJhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTdHJpbmdpZmllckFub255bW91
c09wZXJhdGlvbi5oCShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U3RyaW5naWZpZXJBbm9ueW1vdXNPcGVyYXRpb24uaAko
d29ya2luZyBjb3B5KQpAQCAtNjUsNyArNjUsNyBAQCBwcm90ZWN0ZWQ6CiAKIGNsYXNzIEpTVGVz
dFN0cmluZ2lmaWVyQW5vbnltb3VzT3BlcmF0aW9uT3duZXIgZmluYWwgOiBwdWJsaWMgSlNDOjpX
ZWFrSGFuZGxlT3duZXIgewogcHVibGljOgotICAgIGJvb2wgaXNSZWFjaGFibGVGcm9tT3BhcXVl
Um9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCwgSlNDOjpTbG90
VmlzaXRvciYsIGNvbnN0IGNoYXIqKikgZmluYWw7CisgICAgYm9vbCBpc1JlYWNoYWJsZUZyb21P
cGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0LCBKU0M6
OkFic3RyYWN0U2xvdFZpc2l0b3ImLCBjb25zdCBjaGFyKiopIGZpbmFsOwogICAgIHZvaWQgZmlu
YWxpemUoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCkgZmluYWw7CiB9
OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
U3RyaW5naWZpZXJOYW1lZE9wZXJhdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFN0cmluZ2lmaWVyTmFtZWRPcGVyYXRp
b24uY3BwCShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0U3RyaW5naWZpZXJOYW1lZE9wZXJhdGlvbi5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9IZWFwQW5h
bHl6ZXIuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0NJbmxpbmVzLmg+CiAjaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvSlNEZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUuaD4KKyNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9TbG90VmlzaXRvck1hY3Jvcy5oPgogI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL1N1YnNwYWNlSW5saW5lcy5oPgogI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4K
ICNpbmNsdWRlIDx3dGYvUG9pbnRlclByZXBhcmF0aW9ucy5oPgpAQCAtMjE2LDcgKzIxNyw5IEBA
IEpTQzo6SXNvU3Vic3BhY2UqIEpTVGVzdFN0cmluZ2lmaWVyTmFtZWQKICAgICBhdXRvKiBzcGFj
ZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdFN0cmluZ2lmaWVyTmFtZWRPcGVyYXRpb24uZ2V0
KCk7CiBJR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQogSUdOT1JFX1dB
Uk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgaWYgKCZKU1Rlc3RTdHJp
bmdpZmllck5hbWVkT3BlcmF0aW9uOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzICE9ICZKU0M6OkpT
Q2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50cykKKyAgICB2b2lkICgqbXlWaXNpdE91dHB1dENv
bnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0U3RyaW5n
aWZpZXJOYW1lZE9wZXJhdGlvbjo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKKyAgICB2b2lkICgq
anNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0
b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOworICAgIGlmIChteVZp
c2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCiAgICAg
ICAgIGNsaWVudERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7CiBJ
R05PUkVfV0FSTklOR1NfRU5ECiBJR05PUkVfV0FSTklOR1NfRU5ECkBAIC0yMzIsNyArMjM1LDcg
QEAgdm9pZCBKU1Rlc3RTdHJpbmdpZmllck5hbWVkT3BlcmF0aW9uOjphbgogICAgIEJhc2U6OmFu
YWx5emVIZWFwKGNlbGwsIGFuYWx5emVyKTsKIH0KIAotYm9vbCBKU1Rlc3RTdHJpbmdpZmllck5h
bWVkT3BlcmF0aW9uT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxl
PEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgU2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0
IGNoYXIqKiByZWFzb24pCitib29sIEpTVGVzdFN0cmluZ2lmaWVyTmFtZWRPcGVyYXRpb25Pd25l
cjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBo
YW5kbGUsIHZvaWQqLCBBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiog
cmVhc29uKQogewogICAgIFVOVVNFRF9QQVJBTShoYW5kbGUpOwogICAgIFVOVVNFRF9QQVJBTSh2
aXNpdG9yKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RTdHJpbmdpZmllck5hbWVkT3BlcmF0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFN0cmluZ2lmaWVyTmFtZWRPcGVy
YXRpb24uaAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdFN0cmluZ2lmaWVyTmFtZWRPcGVyYXRpb24uaAkod29ya2luZyBj
b3B5KQpAQCAtNjUsNyArNjUsNyBAQCBwcm90ZWN0ZWQ6CiAKIGNsYXNzIEpTVGVzdFN0cmluZ2lm
aWVyTmFtZWRPcGVyYXRpb25Pd25lciBmaW5hbCA6IHB1YmxpYyBKU0M6OldlYWtIYW5kbGVPd25l
ciB7CiBwdWJsaWM6Ci0gICAgYm9vbCBpc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6Okhh
bmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0LCBKU0M6OlNsb3RWaXNpdG9yJiwgY29u
c3QgY2hhcioqKSBmaW5hbDsKKyAgICBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpT
Qzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6QWJzdHJhY3RTbG90
VmlzaXRvciYsIGNvbnN0IGNoYXIqKikgZmluYWw7CiAgICAgdm9pZCBmaW5hbGl6ZShKU0M6Okhh
bmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0KSBmaW5hbDsKIH07CiAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTdHJpbmdpZmllck9w
ZXJhdGlvbkltcGxlbWVudGVkQXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTdHJpbmdpZmllck9wZXJhdGlvbkltcGxlbWVu
dGVkQXMuY3BwCShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25JbXBsZW1lbnRlZEFzLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL0hlYXBBbmFseXplci5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTQ0lubGluZXMu
aD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0Rlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxs
VHlwZS5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1Nsb3RWaXNpdG9yTWFjcm9zLmg+CiAj
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvU3Vic3BhY2VJbmxpbmVzLmg+CiAjaW5jbHVkZSA8d3Rm
L0dldFB0ci5oPgogI2luY2x1ZGUgPHd0Zi9Qb2ludGVyUHJlcGFyYXRpb25zLmg+CkBAIC0yMTYs
NyArMjE3LDkgQEAgSlNDOjpJc29TdWJzcGFjZSogSlNUZXN0U3RyaW5naWZpZXJPcGVyYQogICAg
IGF1dG8qIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0U3RyaW5naWZpZXJPcGVyYXRp
b25JbXBsZW1lbnRlZEFzLmdldCgpOwogSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJs
ZS1jb2RlIikKIElHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQot
ICAgIGlmICgmSlNUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25JbXBsZW1lbnRlZEFzOjp2aXNpdE91
dHB1dENvbnN0cmFpbnRzICE9ICZKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50cykK
KyAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpT
bG90VmlzaXRvciYpID0gSlNUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25JbXBsZW1lbnRlZEFzOjp2
aXNpdE91dHB1dENvbnN0cmFpbnRzOworICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0
cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZp
c2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9
IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKICAgICAgICAgY2xpZW50RGF0YS5vdXRwdXRD
b25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKIElHTk9SRV9XQVJOSU5HU19FTkQKIElH
Tk9SRV9XQVJOSU5HU19FTkQKQEAgLTIzMiw3ICsyMzUsNyBAQCB2b2lkIEpTVGVzdFN0cmluZ2lm
aWVyT3BlcmF0aW9uSW1wbGVtZW50CiAgICAgQmFzZTo6YW5hbHl6ZUhlYXAoY2VsbCwgYW5hbHl6
ZXIpOwogfQogCi1ib29sIEpTVGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9uSW1wbGVtZW50ZWRBc093
bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+
IGhhbmRsZSwgdm9pZCosIFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29u
KQorYm9vbCBKU1Rlc3RTdHJpbmdpZmllck9wZXJhdGlvbkltcGxlbWVudGVkQXNPd25lcjo6aXNS
ZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUs
IHZvaWQqLCBBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29u
KQogewogICAgIFVOVVNFRF9QQVJBTShoYW5kbGUpOwogICAgIFVOVVNFRF9QQVJBTSh2aXNpdG9y
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RT
dHJpbmdpZmllck9wZXJhdGlvbkltcGxlbWVudGVkQXMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U3RyaW5naWZpZXJPcGVyYXRp
b25JbXBsZW1lbnRlZEFzLmgJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTdHJpbmdpZmllck9wZXJhdGlvbkltcGxlbWVu
dGVkQXMuaAkod29ya2luZyBjb3B5KQpAQCAtNjUsNyArNjUsNyBAQCBwcm90ZWN0ZWQ6CiAKIGNs
YXNzIEpTVGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9uSW1wbGVtZW50ZWRBc093bmVyIGZpbmFsIDog
cHVibGljIEpTQzo6V2Vha0hhbmRsZU93bmVyIHsKIHB1YmxpYzoKLSAgICBib29sIGlzUmVhY2hh
YmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRl
eHQsIEpTQzo6U2xvdFZpc2l0b3ImLCBjb25zdCBjaGFyKiopIGZpbmFsOworICAgIGJvb2wgaXNS
ZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCog
Y29udGV4dCwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiwgY29uc3QgY2hhcioqKSBmaW5hbDsK
ICAgICB2b2lkIGZpbmFsaXplKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRl
eHQpIGZpbmFsOwogfTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9uTmFtZWRUb1N0cmluZy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFN0
cmluZ2lmaWVyT3BlcmF0aW9uTmFtZWRUb1N0cmluZy5jcHAJKHJldmlzaW9uIDI3MzExOSkKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTdHJpbmdpZmll
ck9wZXJhdGlvbk5hbWVkVG9TdHJpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw2ICszNSw3
IEBACiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSGVhcEFuYWx5emVyLmg+CiAjaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvSlNDSW5saW5lcy5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pT
RGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvU2xvdFZpc2l0b3JNYWNyb3MuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9TdWJzcGFj
ZUlubGluZXMuaD4KICNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CiAjaW5jbHVkZSA8d3RmL1BvaW50
ZXJQcmVwYXJhdGlvbnMuaD4KQEAgLTE5OSw3ICsyMDAsOSBAQCBKU0M6Oklzb1N1YnNwYWNlKiBK
U1Rlc3RTdHJpbmdpZmllck9wZXJhCiAgICAgYXV0byogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFj
ZUZvclRlc3RTdHJpbmdpZmllck9wZXJhdGlvbk5hbWVkVG9TdHJpbmcuZ2V0KCk7CiBJR05PUkVf
V0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQogSUdOT1JFX1dBUk5JTkdTX0JFR0lO
KCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgaWYgKCZKU1Rlc3RTdHJpbmdpZmllck9wZXJh
dGlvbk5hbWVkVG9TdHJpbmc6OnZpc2l0T3V0cHV0Q29uc3RyYWludHMgIT0gJkpTQzo6SlNDZWxs
Ojp2aXNpdE91dHB1dENvbnN0cmFpbnRzKQorICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3Ry
YWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3RTdHJpbmdpZmll
ck9wZXJhdGlvbk5hbWVkVG9TdHJpbmc6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAgdm9p
ZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RW
aXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKKyAgICBpZiAo
bXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQog
ICAgICAgICBjbGllbnREYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2Up
OwogSUdOT1JFX1dBUk5JTkdTX0VORAogSUdOT1JFX1dBUk5JTkdTX0VORApAQCAtMjE1LDcgKzIx
OCw3IEBAIHZvaWQgSlNUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25OYW1lZFRvU3QKICAgICBCYXNl
OjphbmFseXplSGVhcChjZWxsLCBhbmFseXplcik7CiB9CiAKLWJvb2wgSlNUZXN0U3RyaW5naWZp
ZXJPcGVyYXRpb25OYW1lZFRvU3RyaW5nT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3Rz
KEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgU2xvdFZpc2l0b3ImIHZp
c2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCitib29sIEpTVGVzdFN0cmluZ2lmaWVyT3BlcmF0
aW9uTmFtZWRUb1N0cmluZ093bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6Okhh
bmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIEFic3RyYWN0U2xvdFZpc2l0b3ImIHZp
c2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCiB7CiAgICAgVU5VU0VEX1BBUkFNKGhhbmRsZSk7
CiAgICAgVU5VU0VEX1BBUkFNKHZpc2l0b3IpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9uTmFtZWRUb1N0cmlu
Zy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RTdHJpbmdpZmllck9wZXJhdGlvbk5hbWVkVG9TdHJpbmcuaAkocmV2aXNpb24gMjcz
MTE5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFN0
cmluZ2lmaWVyT3BlcmF0aW9uTmFtZWRUb1N0cmluZy5oCSh3b3JraW5nIGNvcHkpCkBAIC02NSw3
ICs2NSw3IEBAIHByb3RlY3RlZDoKIAogY2xhc3MgSlNUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25O
YW1lZFRvU3RyaW5nT3duZXIgZmluYWwgOiBwdWJsaWMgSlNDOjpXZWFrSGFuZGxlT3duZXIgewog
cHVibGljOgotICAgIGJvb2wgaXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8
SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCwgSlNDOjpTbG90VmlzaXRvciYsIGNvbnN0IGNo
YXIqKikgZmluYWw7CisgICAgYm9vbCBpc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6Okhh
bmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0LCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0
b3ImLCBjb25zdCBjaGFyKiopIGZpbmFsOwogICAgIHZvaWQgZmluYWxpemUoSlNDOjpIYW5kbGU8
SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCkgZmluYWw7CiB9OwogCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U3RyaW5naWZpZXJSZWFkT25s
eUF0dHJpYnV0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdFN0cmluZ2lmaWVyUmVhZE9ubHlBdHRyaWJ1dGUuY3BwCShyZXZp
c2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0U3RyaW5naWZpZXJSZWFkT25seUF0dHJpYnV0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9IZWFwQW5hbHl6ZXIuaD4K
ICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0NJbmxpbmVzLmg+CiAjaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvSlNEZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUuaD4KKyNpbmNsdWRlIDxK
YXZhU2NyaXB0Q29yZS9TbG90VmlzaXRvck1hY3Jvcy5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL1N1YnNwYWNlSW5saW5lcy5oPgogI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KICNpbmNsdWRl
IDx3dGYvUG9pbnRlclByZXBhcmF0aW9ucy5oPgpAQCAtMjIwLDcgKzIyMSw5IEBAIEpTQzo6SXNv
U3Vic3BhY2UqIEpTVGVzdFN0cmluZ2lmaWVyUmVhZE8KICAgICBhdXRvKiBzcGFjZSA9IHNwYWNl
cy5tX3N1YnNwYWNlRm9yVGVzdFN0cmluZ2lmaWVyUmVhZE9ubHlBdHRyaWJ1dGUuZ2V0KCk7CiBJ
R05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQogSUdOT1JFX1dBUk5JTkdT
X0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgaWYgKCZKU1Rlc3RTdHJpbmdpZmll
clJlYWRPbmx5QXR0cmlidXRlOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzICE9ICZKU0M6OkpTQ2Vs
bDo6dmlzaXRPdXRwdXRDb25zdHJhaW50cykKKyAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0
cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0U3RyaW5naWZp
ZXJSZWFkT25seUF0dHJpYnV0ZTo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKKyAgICB2b2lkICgq
anNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0
b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOworICAgIGlmIChteVZp
c2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCiAgICAg
ICAgIGNsaWVudERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7CiBJ
R05PUkVfV0FSTklOR1NfRU5ECiBJR05PUkVfV0FSTklOR1NfRU5ECkBAIC0yMzYsNyArMjM5LDcg
QEAgdm9pZCBKU1Rlc3RTdHJpbmdpZmllclJlYWRPbmx5QXR0cmlidXRlOgogICAgIEJhc2U6OmFu
YWx5emVIZWFwKGNlbGwsIGFuYWx5emVyKTsKIH0KIAotYm9vbCBKU1Rlc3RTdHJpbmdpZmllclJl
YWRPbmx5QXR0cmlidXRlT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFu
ZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgU2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNv
bnN0IGNoYXIqKiByZWFzb24pCitib29sIEpTVGVzdFN0cmluZ2lmaWVyUmVhZE9ubHlBdHRyaWJ1
dGVPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtu
b3duPiBoYW5kbGUsIHZvaWQqLCBBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBj
aGFyKiogcmVhc29uKQogewogICAgIFVOVVNFRF9QQVJBTShoYW5kbGUpOwogICAgIFVOVVNFRF9Q
QVJBTSh2aXNpdG9yKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RTdHJpbmdpZmllclJlYWRPbmx5QXR0cmlidXRlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFN0cmluZ2lmaWVy
UmVhZE9ubHlBdHRyaWJ1dGUuaAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFN0cmluZ2lmaWVyUmVhZE9ubHlBdHRyaWJ1
dGUuaAkod29ya2luZyBjb3B5KQpAQCAtNjUsNyArNjUsNyBAQCBwcm90ZWN0ZWQ6CiAKIGNsYXNz
IEpTVGVzdFN0cmluZ2lmaWVyUmVhZE9ubHlBdHRyaWJ1dGVPd25lciBmaW5hbCA6IHB1YmxpYyBK
U0M6OldlYWtIYW5kbGVPd25lciB7CiBwdWJsaWM6Ci0gICAgYm9vbCBpc1JlYWNoYWJsZUZyb21P
cGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0LCBKU0M6
OlNsb3RWaXNpdG9yJiwgY29uc3QgY2hhcioqKSBmaW5hbDsKKyAgICBib29sIGlzUmVhY2hhYmxl
RnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQs
IEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYsIGNvbnN0IGNoYXIqKikgZmluYWw7CiAgICAgdm9p
ZCBmaW5hbGl6ZShKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0KSBmaW5h
bDsKIH07CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RTdHJpbmdpZmllclJlYWRXcml0ZUF0dHJpYnV0ZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFN0cmluZ2lmaWVyUmVh
ZFdyaXRlQXR0cmlidXRlLmNwcAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFN0cmluZ2lmaWVyUmVhZFdyaXRlQXR0cmli
dXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL0hlYXBBbmFseXplci5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTQ0lu
bGluZXMuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0Rlc3RydWN0aWJsZU9iamVjdEhl
YXBDZWxsVHlwZS5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1Nsb3RWaXNpdG9yTWFjcm9z
Lmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvU3Vic3BhY2VJbmxpbmVzLmg+CiAjaW5jbHVk
ZSA8d3RmL0dldFB0ci5oPgogI2luY2x1ZGUgPHd0Zi9Qb2ludGVyUHJlcGFyYXRpb25zLmg+CkBA
IC0yMzksNyArMjQwLDkgQEAgSlNDOjpJc29TdWJzcGFjZSogSlNUZXN0U3RyaW5naWZpZXJSZWFk
VwogICAgIGF1dG8qIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0U3RyaW5naWZpZXJS
ZWFkV3JpdGVBdHRyaWJ1dGUuZ2V0KCk7CiBJR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hh
YmxlLWNvZGUiKQogSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIp
Ci0gICAgaWYgKCZKU1Rlc3RTdHJpbmdpZmllclJlYWRXcml0ZUF0dHJpYnV0ZTo6dmlzaXRPdXRw
dXRDb25zdHJhaW50cyAhPSAmSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHMpCisg
ICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xv
dFZpc2l0b3ImKSA9IEpTVGVzdFN0cmluZ2lmaWVyUmVhZFdyaXRlQXR0cmlidXRlOjp2aXNpdE91
dHB1dENvbnN0cmFpbnRzOworICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQp
KEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0
cHV0Q29uc3RyYWludHM7CisgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2Vs
bFZpc2l0T3V0cHV0Q29uc3RyYWludCkKICAgICAgICAgY2xpZW50RGF0YS5vdXRwdXRDb25zdHJh
aW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKIElHTk9SRV9XQVJOSU5HU19FTkQKIElHTk9SRV9X
QVJOSU5HU19FTkQKQEAgLTI1NSw3ICsyNTgsNyBAQCB2b2lkIEpTVGVzdFN0cmluZ2lmaWVyUmVh
ZFdyaXRlQXR0cmlidXRlCiAgICAgQmFzZTo6YW5hbHl6ZUhlYXAoY2VsbCwgYW5hbHl6ZXIpOwog
fQogCi1ib29sIEpTVGVzdFN0cmluZ2lmaWVyUmVhZFdyaXRlQXR0cmlidXRlT3duZXI6OmlzUmVh
Y2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2
b2lkKiwgU2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCitib29sIEpT
VGVzdFN0cmluZ2lmaWVyUmVhZFdyaXRlQXR0cmlidXRlT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9w
YXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgQWJzdHJh
Y3RTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikKIHsKICAgICBVTlVT
RURfUEFSQU0oaGFuZGxlKTsKICAgICBVTlVTRURfUEFSQU0odmlzaXRvcik7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U3RyaW5naWZpZXJSZWFk
V3JpdGVBdHRyaWJ1dGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0U3RyaW5naWZpZXJSZWFkV3JpdGVBdHRyaWJ1dGUuaAkocmV2
aXNpb24gMjczMTE5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdFN0cmluZ2lmaWVyUmVhZFdyaXRlQXR0cmlidXRlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTY1LDcgKzY1LDcgQEAgcHJvdGVjdGVkOgogCiBjbGFzcyBKU1Rlc3RTdHJpbmdpZmllclJlYWRX
cml0ZUF0dHJpYnV0ZU93bmVyIGZpbmFsIDogcHVibGljIEpTQzo6V2Vha0hhbmRsZU93bmVyIHsK
IHB1YmxpYzoKLSAgICBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxl
PEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6U2xvdFZpc2l0b3ImLCBjb25zdCBj
aGFyKiopIGZpbmFsOworICAgIGJvb2wgaXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpI
YW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCwgSlNDOjpBYnN0cmFjdFNsb3RWaXNp
dG9yJiwgY29uc3QgY2hhcioqKSBmaW5hbDsKICAgICB2b2lkIGZpbmFsaXplKEpTQzo6SGFuZGxl
PEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQpIGZpbmFsOwogfTsKIApJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFR5cGVkZWZzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
VHlwZWRlZnMuY3BwCShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0VHlwZWRlZnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01
Myw2ICs1Myw3IEBACiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNBcnJheS5oPgogI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL0pTQ0lubGluZXMuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9KU0Rlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZS5oPgorI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL1Nsb3RWaXNpdG9yTWFjcm9zLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvU3Vi
c3BhY2VJbmxpbmVzLmg+CiAjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgogI2luY2x1ZGUgPHd0Zi9Q
b2ludGVyUHJlcGFyYXRpb25zLmg+CkBAIC04MjUsNyArODI2LDkgQEAgSlNDOjpJc29TdWJzcGFj
ZSogSlNUZXN0VHlwZWRlZnM6OnN1YnNwYQogICAgIGF1dG8qIHNwYWNlID0gc3BhY2VzLm1fc3Vi
c3BhY2VGb3JUZXN0VHlwZWRlZnMuZ2V0KCk7CiBJR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVh
Y2hhYmxlLWNvZGUiKQogSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFy
ZSIpCi0gICAgaWYgKCZKU1Rlc3RUeXBlZGVmczo6dmlzaXRPdXRwdXRDb25zdHJhaW50cyAhPSAm
SlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHMpCisgICAgdm9pZCAoKm15VmlzaXRP
dXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVz
dFR5cGVkZWZzOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOworICAgIHZvaWQgKCpqc0NlbGxWaXNp
dE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlND
OjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAgaWYgKG15VmlzaXRPdXRwdXRD
b25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKICAgICAgICAgY2xpZW50
RGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKIElHTk9SRV9XQVJO
SU5HU19FTkQKIElHTk9SRV9XQVJOSU5HU19FTkQKQEAgLTg0MSw3ICs4NDQsNyBAQCB2b2lkIEpT
VGVzdFR5cGVkZWZzOjphbmFseXplSGVhcChKU0NlbGwqCiAgICAgQmFzZTo6YW5hbHl6ZUhlYXAo
Y2VsbCwgYW5hbHl6ZXIpOwogfQogCi1ib29sIEpTVGVzdFR5cGVkZWZzT3duZXI6OmlzUmVhY2hh
YmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lk
KiwgU2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCitib29sIEpTVGVz
dFR5cGVkZWZzT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpT
Qzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvciwg
Y29uc3QgY2hhcioqIHJlYXNvbikKIHsKICAgICBVTlVTRURfUEFSQU0oaGFuZGxlKTsKICAgICBV
TlVTRURfUEFSQU0odmlzaXRvcik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0VHlwZWRlZnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0VHlwZWRlZnMuaAkocmV2aXNpb24gMjcz
MTE5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFR5
cGVkZWZzLmgJKHdvcmtpbmcgY29weSkKQEAgLTY3LDcgKzY3LDcgQEAgcHJvdGVjdGVkOgogCiBj
bGFzcyBKU1Rlc3RUeXBlZGVmc093bmVyIGZpbmFsIDogcHVibGljIEpTQzo6V2Vha0hhbmRsZU93
bmVyIHsKIHB1YmxpYzoKLSAgICBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6
SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6U2xvdFZpc2l0b3ImLCBj
b25zdCBjaGFyKiopIGZpbmFsOworICAgIGJvb2wgaXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMo
SlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCwgSlNDOjpBYnN0cmFjdFNs
b3RWaXNpdG9yJiwgY29uc3QgY2hhcioqKSBmaW5hbDsKICAgICB2b2lkIGZpbmFsaXplKEpTQzo6
SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQpIGZpbmFsOwogfTsKIApJbmRleDog
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTV29ya2VyR2xvYmFsU2Nv
cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1dvcmtlckdsb2JhbFNjb3BlLmNwcAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTV29ya2VyR2xvYmFsU2NvcGUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0MCw3IEBACiAjaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvSGVhcEFuYWx5emVyLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNDSW5saW5lcy5o
PgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTRGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxU
eXBlLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvU2xvdFZpc2l0b3JNYWNyb3MuaD4KICNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9TdWJzcGFjZUlubGluZXMuaD4KICNpbmNsdWRlIDx3dGYv
R2V0UHRyLmg+CiAjaW5jbHVkZSA8d3RmL1BvaW50ZXJQcmVwYXJhdGlvbnMuaD4KQEAgLTMzMiw3
ICszMzMsOSBAQCBKU0M6Oklzb1N1YnNwYWNlKiBKU1dvcmtlckdsb2JhbFNjb3BlOjpzCiAgICAg
YXV0byogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvcldvcmtlckdsb2JhbFNjb3BlLmdldCgp
OwogSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKIElHTk9SRV9XQVJO
SU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQotICAgIGlmICgmSlNXb3JrZXJHbG9i
YWxTY29wZTo6dmlzaXRPdXRwdXRDb25zdHJhaW50cyAhPSAmSlNDOjpKU0NlbGw6OnZpc2l0T3V0
cHV0Q29uc3RyYWludHMpCisgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6
OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTV29ya2VyR2xvYmFsU2NvcGU6OnZpc2l0
T3V0cHV0Q29uc3RyYWludHM7CisgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWlu
dCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRP
dXRwdXRDb25zdHJhaW50czsKKyAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganND
ZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQogICAgICAgICBjbGllbnREYXRhLm91dHB1dENvbnN0
cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOwogSUdOT1JFX1dBUk5JTkdTX0VORAogSUdOT1JF
X1dBUk5JTkdTX0VORApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTV29ya2xldEdsb2JhbFNjb3BlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNXb3JrbGV0R2xvYmFsU2NvcGUuY3BwCShyZXZp
c2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNXb3JrbGV0R2xvYmFsU2NvcGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw2ICszNSw3IEBA
CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSGVhcEFuYWx5emVyLmg+CiAjaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvSlNDSW5saW5lcy5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTRGVz
dHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
U2xvdFZpc2l0b3JNYWNyb3MuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9TdWJzcGFjZUlu
bGluZXMuaD4KICNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CiAjaW5jbHVkZSA8d3RmL1BvaW50ZXJQ
cmVwYXJhdGlvbnMuaD4KQEAgLTE4MSw3ICsxODIsOSBAQCBKU0M6Oklzb1N1YnNwYWNlKiBKU1dv
cmtsZXRHbG9iYWxTY29wZTo6CiAgICAgYXV0byogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZv
cldvcmtsZXRHbG9iYWxTY29wZS5nZXQoKTsKIElHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFj
aGFibGUtY29kZSIpCiBJR05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJl
IikKLSAgICBpZiAoJkpTV29ya2xldEdsb2JhbFNjb3BlOjp2aXNpdE91dHB1dENvbnN0cmFpbnRz
ICE9ICZKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50cykKKyAgICB2b2lkICgqbXlW
aXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0g
SlNXb3JrbGV0R2xvYmFsU2NvcGU6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAgdm9pZCAo
KmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNp
dG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKKyAgICBpZiAobXlW
aXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQogICAg
ICAgICBjbGllbnREYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOwog
SUdOT1JFX1dBUk5JTkdTX0VORAogSUdOT1JFX1dBUk5JTkdTX0VORApJbmRleDogU291cmNlL1dl
YkNvcmUvZG9tL0FjdGl2ZURPTUNhbGxiYWNrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvZG9tL0FjdGl2ZURPTUNhbGxiYWNrLmgJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9X
ZWJDb3JlL2RvbS9BY3RpdmVET01DYWxsYmFjay5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKQEAgLTMzLDYg
KzM0LDcgQEAKICNpbmNsdWRlICJDb250ZXh0RGVzdHJ1Y3Rpb25PYnNlcnZlci5oIgogCiBuYW1l
c3BhY2UgSlNDIHsKK2NsYXNzIEFic3RyYWN0U2xvdFZpc2l0b3I7CiBjbGFzcyBTbG90VmlzaXRv
cjsKIH0KIApAQCAtNTUsNiArNTcsNyBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgYm9v
bCBhY3RpdmVET01PYmplY3RzQXJlU3VzcGVuZGVkKCkgY29uc3Q7CiAgICAgV0VCQ09SRV9FWFBP
UlQgYm9vbCBhY3RpdmVET01PYmplY3RBcmVTdG9wcGVkKCkgY29uc3Q7CiAgICAgCisgICAgdmly
dHVhbCB2b2lkIHZpc2l0SlNGdW5jdGlvbihKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKSB7IH0K
ICAgICB2aXJ0dWFsIHZvaWQgdmlzaXRKU0Z1bmN0aW9uKEpTQzo6U2xvdFZpc2l0b3ImKSB7IH0K
IH07CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9FdmVudExpc3RlbmVyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50TGlzdGVuZXIuaAkocmV2aXNpb24gMjczMTE5
KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50TGlzdGVuZXIuaAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDgsIDIwMDkgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0y
NCw2ICsyNCw3IEBACiAjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KIAogbmFtZXNwYWNlIEpTQyB7
CitjbGFzcyBBYnN0cmFjdFNsb3RWaXNpdG9yOwogY2xhc3MgSlNPYmplY3Q7CiBjbGFzcyBTbG90
VmlzaXRvcjsKIH0KQEAgLTUyLDYgKzUzLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBo
YW5kbGVFdmVudChTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgRXZlbnQmKSA9IDA7CiAgICAgdmly
dHVhbCBib29sIHdhc0NyZWF0ZWRGcm9tTWFya3VwKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0K
IAorICAgIHZpcnR1YWwgdm9pZCB2aXNpdEpTRnVuY3Rpb24oSlNDOjpBYnN0cmFjdFNsb3RWaXNp
dG9yJikgeyB9CiAgICAgdmlydHVhbCB2b2lkIHZpc2l0SlNGdW5jdGlvbihKU0M6OlNsb3RWaXNp
dG9yJikgeyB9CiAKICAgICB2aXJ0dWFsIGJvb2wgaXNBdHRyaWJ1dGUoKSBjb25zdCB7IHJldHVy
biBmYWxzZTsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50VGFyZ2V0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRUYXJnZXQuY3BwCShyZXZpc2lvbiAy
NzMxMTkpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRUYXJnZXQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yLDcgKzIsNyBAQAogICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtu
b2xsQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZp
c3RvQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDIwMDEgRGlyayBNdWVsbGVyIChtdWVsbGVy
QGtkZS5vcmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQWxleGV5IFByb3NrdXJ5YWtv
diAoYXBAd2Via2l0Lm9yZykKICAqICAgICAgICAgICAoQykgMjAwNywgMjAwOCBOaWtvbGFzIFpp
bW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KICAqCkBAIC0zODQsNyArMzg0LDggQEAgdm9p
ZCBFdmVudFRhcmdldDo6cmVtb3ZlQWxsRXZlbnRMaXN0ZW5lcgogICAgIHRocmVhZERhdGEuc2V0
SXNJblJlbW92ZUFsbEV2ZW50TGlzdGVuZXJzKGZhbHNlKTsKIH0KIAotdm9pZCBFdmVudFRhcmdl
dDo6dmlzaXRKU0V2ZW50TGlzdGVuZXJzKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit0ZW1w
bGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBFdmVudFRhcmdldDo6dmlzaXRKU0V2ZW50TGlz
dGVuZXJzKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgRXZlbnRUYXJnZXREYXRhKiBkYXRhID0g
ZXZlbnRUYXJnZXREYXRhQ29uY3VycmVudGx5KCk7CiAgICAgaWYgKCFkYXRhKQpAQCAtMzk2LDYg
KzM5Nyw5IEBAIHZvaWQgRXZlbnRUYXJnZXQ6OnZpc2l0SlNFdmVudExpc3RlbmVycygKICAgICAg
ICAgbGlzdGVuZXItPnZpc2l0SlNGdW5jdGlvbih2aXNpdG9yKTsKIH0KIAordGVtcGxhdGUgdm9p
ZCBFdmVudFRhcmdldDo6dmlzaXRKU0V2ZW50TGlzdGVuZXJzKEpTQzo6QWJzdHJhY3RTbG90Vmlz
aXRvciYpOwordGVtcGxhdGUgdm9pZCBFdmVudFRhcmdldDo6dmlzaXRKU0V2ZW50TGlzdGVuZXJz
KEpTQzo6U2xvdFZpc2l0b3ImKTsKKwogdm9pZCBFdmVudFRhcmdldDo6aW52YWxpZGF0ZUV2ZW50
TGlzdGVuZXJSZWdpb25zKCkKIHsKICAgICBpZiAoaXM8RWxlbWVudD4oKnRoaXMpKSB7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRUYXJnZXQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9kb20vRXZlbnRUYXJnZXQuaAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL1dl
YkNvcmUvZG9tL0V2ZW50VGFyZ2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTIsNyArMiw3IEBACiAg
KiBDb3B5cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKICAqICAgICAg
ICAgICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKICAqICAgICAg
ICAgICAoQykgMjAwMSBEaXJrIE11ZWxsZXIgKG11ZWxsZXJAa2RlLm9yZykKLSAqIENvcHlyaWdo
dCAoQykgMjAwNC0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAwNC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENv
cHlyaWdodCAoQykgMjAwNiBBbGV4ZXkgUHJvc2t1cnlha292IChhcEB3ZWJraXQub3JnKQogICog
ICAgICAgICAgIChDKSAyMDA3LCAyMDA4IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBr
ZGUub3JnPgogICoKQEAgLTk3LDcgKzk3LDcgQEAgcHVibGljOgogICAgIHZvaWQgZmlyZUV2ZW50
TGlzdGVuZXJzKEV2ZW50JiwgRXZlbnRJbnZva2VQaGFzZSk7CiAgICAgYm9vbCBpc0ZpcmluZ0V2
ZW50TGlzdGVuZXJzKCkgY29uc3Q7CiAKLSAgICB2b2lkIHZpc2l0SlNFdmVudExpc3RlbmVycyhK
U0M6OlNsb3RWaXNpdG9yJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCB2
aXNpdEpTRXZlbnRMaXN0ZW5lcnMoVmlzaXRvciYpOwogICAgIHZvaWQgaW52YWxpZGF0ZUpTRXZl
bnRMaXN0ZW5lcnMoSlNDOjpKU09iamVjdCopOwogCiAgICAgY29uc3QgRXZlbnRUYXJnZXREYXRh
KiBldmVudFRhcmdldERhdGEoKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9NdXRh
dGlvblJlY29yZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL011dGF0aW9u
UmVjb3JkLmNwcAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL1dlYkNvcmUvZG9tL011dGF0
aW9uUmVjb3JkLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5
cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCkBAIC00MSw3ICs0Miw3IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogbmFtZXNwYWNlIHsKIAotc3RhdGljIHZvaWQgdmlzaXROb2RlTGlzdChKU0M6OlNs
b3RWaXNpdG9yJiB2aXNpdG9yLCBOb2RlTGlzdCYgbm9kZUxpc3QpCitzdGF0aWMgdm9pZCB2aXNp
dE5vZGVMaXN0KEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvciwgTm9kZUxpc3QmIG5v
ZGVMaXN0KQogewogICAgIEFTU0VSVCghbm9kZUxpc3QuaXNMaXZlTm9kZUxpc3QoKSk7CiAgICAg
dW5zaWduZWQgbGVuZ3RoID0gbm9kZUxpc3QubGVuZ3RoKCk7CkBAIC02OCw3ICs2OSw3IEBAIHBy
aXZhdGU6CiAgICAgTm9kZSogcHJldmlvdXNTaWJsaW5nKCkgb3ZlcnJpZGUgeyByZXR1cm4gbV9w
cmV2aW91c1NpYmxpbmcuZ2V0KCk7IH0KICAgICBOb2RlKiBuZXh0U2libGluZygpIG92ZXJyaWRl
IHsgcmV0dXJuIG1fbmV4dFNpYmxpbmcuZ2V0KCk7IH0KIAotICAgIHZvaWQgdmlzaXROb2Rlc0Nv
bmN1cnJlbnRseShKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKSBjb25zdCBmaW5hbAorICAgIHZv
aWQgdmlzaXROb2Rlc0NvbmN1cnJlbnRseShKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0
b3IpIGNvbnN0IGZpbmFsCiAgICAgewogICAgICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qocm9v
dChtX3RhcmdldC5wdHIoKSkpOwogICAgICAgICBpZiAobV9hZGRlZE5vZGVzKQpAQCAtMTA1LDcg
KzEwNiw3IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiBub2RlTGlzdC5nZXQoKTsKICAgICB9
CiAKLSAgICB2b2lkIHZpc2l0Tm9kZXNDb25jdXJyZW50bHkoSlNDOjpTbG90VmlzaXRvciYgdmlz
aXRvcikgY29uc3QgZmluYWwKKyAgICB2b2lkIHZpc2l0Tm9kZXNDb25jdXJyZW50bHkoSlNDOjpB
YnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBjb25zdCBmaW5hbAogICAgIHsKICAgICAgICAg
dmlzaXRvci5hZGRPcGFxdWVSb290KHJvb3QobV90YXJnZXQucHRyKCkpKTsKICAgICB9CkBAIC0x
NjQsNyArMTY1LDcgQEAgcHJpdmF0ZToKIAogICAgIFN0cmluZyBvbGRWYWx1ZSgpIG92ZXJyaWRl
IHsgcmV0dXJuIFN0cmluZygpOyB9CiAKLSAgICB2b2lkIHZpc2l0Tm9kZXNDb25jdXJyZW50bHko
SlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikgY29uc3QgZmluYWwKKyAgICB2b2lkIHZpc2l0Tm9k
ZXNDb25jdXJyZW50bHkoSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBjb25zdCBm
aW5hbAogICAgIHsKICAgICAgICAgbV9yZWNvcmQtPnZpc2l0Tm9kZXNDb25jdXJyZW50bHkodmlz
aXRvcik7CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL011dGF0aW9uUmVjb3JkLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL011dGF0aW9uUmVjb3JkLmgJKHJldmlz
aW9uIDI3MzExOSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9NdXRhdGlvblJlY29yZC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxMSBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKQEAgLTM2LDcgKzM3LDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLWNsYXNzIFNsb3RW
aXNpdG9yOworY2xhc3MgQWJzdHJhY3RTbG90VmlzaXRvcjsKIAogfQogCkBAIC03Miw3ICs3Myw3
IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgU3RyaW5nIG9sZFZhbHVlKCkgeyByZXR1cm4gU3Ry
aW5nKCk7IH0KIAotICAgIHZpcnR1YWwgdm9pZCB2aXNpdE5vZGVzQ29uY3VycmVudGx5KEpTQzo6
U2xvdFZpc2l0b3ImKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0Tm9kZXNDb25j
dXJyZW50bHkoSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJikgY29uc3QgPSAwOwogfTsKIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL05vZGVGaWx0ZXJD
b25kaXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZUZpbHRlckNv
bmRpdGlvbi5oCShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZUZp
bHRlckNvbmRpdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3ICszOCw2IEBAIGNsYXNzIE5v
ZGVGaWx0ZXJDb25kaXRpb24gOiBwdWJsaWMgUmVmQ28KIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5O
b2RlRmlsdGVyQ29uZGl0aW9uKCkgPSBkZWZhdWx0OwogICAgIHZpcnR1YWwgdW5zaWduZWQgc2hv
cnQgYWNjZXB0Tm9kZShOb2RlJikgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgdm9pZCB2aXNpdEFn
Z3JlZ2F0ZShKU0M6OlNsb3RWaXNpdG9yJikgeyB9CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vU3RhdGljUmFuZ2UuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9TdGF0aWNSYW5nZS5jcHAJKHJldmlzaW9uIDI3MzExOSkK
KysrIFNvdXJjZS9XZWJDb3JlL2RvbS9TdGF0aWNSYW5nZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjAgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC03Niw3ICs3Niw3IEBAIEV4Y2VwdGlvbk9yPFJlZjxTdGF0aWNSYW5nZT4+IFN0YXRpY1JhbmcK
ICAgICByZXR1cm4gY3JlYXRlKHsgeyBpbml0LnN0YXJ0Q29udGFpbmVyLnJlbGVhc2VOb25OdWxs
KCksIGluaXQuc3RhcnRPZmZzZXQgfSwgeyBpbml0LmVuZENvbnRhaW5lci5yZWxlYXNlTm9uTnVs
bCgpLCBpbml0LmVuZE9mZnNldCB9IH0pOwogfQogCi12b2lkIFN0YXRpY1JhbmdlOjp2aXNpdE5v
ZGVzQ29uY3VycmVudGx5KEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0Cit2b2lkIFN0
YXRpY1JhbmdlOjp2aXNpdE5vZGVzQ29uY3VycmVudGx5KEpTQzo6QWJzdHJhY3RTbG90VmlzaXRv
ciYgdmlzaXRvcikgY29uc3QKIHsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qocm9vdChzdGFy
dC5jb250YWluZXIuZ2V0KCkpKTsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qocm9vdChlbmQu
Y29udGFpbmVyLmdldCgpKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vU3RhdGljUmFuZ2Uu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vU3RhdGljUmFuZ2UuaAkocmV2aXNp
b24gMjczMTE5KQorKysgU291cmNlL1dlYkNvcmUvZG9tL1N0YXRpY1JhbmdlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjAgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0zMCw3ICszMCw3IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1jbGFzcyBTbG90
VmlzaXRvcjsKK2NsYXNzIEFic3RyYWN0U2xvdFZpc2l0b3I7CiAKIH0KIApAQCAtNTgsNyArNTgs
NyBAQCBwdWJsaWM6CiAgICAgdW5zaWduZWQgZW5kT2Zmc2V0KCkgY29uc3QgZmluYWwgeyByZXR1
cm4gU2ltcGxlUmFuZ2U6OmVuZE9mZnNldCgpOyB9CiAgICAgYm9vbCBjb2xsYXBzZWQoKSBjb25z
dCBmaW5hbCB7IHJldHVybiBTaW1wbGVSYW5nZTo6Y29sbGFwc2VkKCk7IH0KIAotICAgIHZvaWQg
dmlzaXROb2Rlc0NvbmN1cnJlbnRseShKU0M6OlNsb3RWaXNpdG9yJikgY29uc3Q7CisgICAgdm9p
ZCB2aXNpdE5vZGVzQ29uY3VycmVudGx5KEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpIGNvbnN0
OwogCiBwcml2YXRlOgogICAgIFN0YXRpY1JhbmdlKFNpbXBsZVJhbmdlJiYpOwpJbmRleDogU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0wyUmVuZGVyaW5nQ29udGV4
dC5jcHAJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dl
YkdMMlJlbmRlcmluZ0NvbnRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzA3OCw3ICszMDc4
LDcgQEAgYm9vbCBXZWJHTDJSZW5kZXJpbmdDb250ZXh0OjpjaGVja0FuZFRyYQogICAgIHJldHVy
biB0cnVlOwogfQogCi12b2lkIFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OmFkZE1lbWJlcnNUb09w
YXF1ZVJvb3RzKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIFdlYkdMMlJlbmRlcmlu
Z0NvbnRleHQ6OmFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRv
ciYgdmlzaXRvcikKIHsKICAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjphZGRNZW1iZXJz
VG9PcGFxdWVSb290cyh2aXNpdG9yKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52
YXMvV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL1dlYkdMMlJlbmRlcmluZ0NvbnRleHQuaAkocmV2aXNpb24gMjczMTE5KQor
KysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0y
MDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
NS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMjYxLDcgKzI2MSw3IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgY2hl
Y2tBbmRUcmFuc2xhdGVBdHRhY2htZW50cyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDR0xl
bnVtLCBWZWN0b3I8R0NHTGVudW0+Jik7CiAKLSAgICB2b2lkIGFkZE1lbWJlcnNUb09wYXF1ZVJv
b3RzKEpTQzo6U2xvdFZpc2l0b3ImKSBvdmVycmlkZTsKKyAgICB2b2lkIGFkZE1lbWJlcnNUb09w
YXF1ZVJvb3RzKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpIG92ZXJyaWRlOwogCiBwcml2YXRl
OgogICAgIFdlYkdMMlJlbmRlcmluZ0NvbnRleHQoQ2FudmFzQmFzZSYsIEdyYXBoaWNzQ29udGV4
dEdMQXR0cmlidXRlcyk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEZy
YW1lYnVmZmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9X
ZWJHTEZyYW1lYnVmZmVyLmNwcAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvV2ViR0xGcmFtZWJ1ZmZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02Myw3
ICs2Myw3IEBAIG5hbWVzcGFjZSB7CiAgICAgICAgIHZvaWQgb25EZXRhY2hlZChjb25zdCBBYnN0
cmFjdExvY2tlciYsIEdyYXBoaWNzQ29udGV4dEdMKikgb3ZlcnJpZGU7CiAgICAgICAgIHZvaWQg
YXR0YWNoKEdyYXBoaWNzQ29udGV4dEdMKiwgR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBhdHRh
Y2htZW50KSBvdmVycmlkZTsKICAgICAgICAgdm9pZCB1bmF0dGFjaChHcmFwaGljc0NvbnRleHRH
TCosIEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gYXR0YWNobWVudCkgb3ZlcnJpZGU7Ci0gICAg
ICAgIHZvaWQgYWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMoY29uc3QgQWJzdHJhY3RMb2NrZXImLCBK
U0M6OlNsb3RWaXNpdG9yJikgb3ZlcnJpZGU7CisgICAgICAgIHZvaWQgYWRkTWVtYmVyc1RvT3Bh
cXVlUm9vdHMoY29uc3QgQWJzdHJhY3RMb2NrZXImLCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3Im
KSBvdmVycmlkZTsKIAogICAgICAgICBXZWJHTFJlbmRlcmJ1ZmZlckF0dGFjaG1lbnQoKSB7IH07
CiAKQEAgLTE0NSw3ICsxNDUsNyBAQCBuYW1lc3BhY2UgewogICAgICAgICAgICAgY29udGV4dC0+
ZnJhbWVidWZmZXJSZW5kZXJidWZmZXIodGFyZ2V0LCBhdHRhY2htZW50LCBHcmFwaGljc0NvbnRl
eHRHTDo6UkVOREVSQlVGRkVSLCAwKTsKICAgICB9CiAKLSAgICB2b2lkIFdlYkdMUmVuZGVyYnVm
ZmVyQXR0YWNobWVudDo6YWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMoY29uc3QgQWJzdHJhY3RMb2Nr
ZXImLCBKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQorICAgIHZvaWQgV2ViR0xSZW5kZXJidWZm
ZXJBdHRhY2htZW50OjphZGRNZW1iZXJzVG9PcGFxdWVSb290cyhjb25zdCBBYnN0cmFjdExvY2tl
ciYsIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKICAgICB7CiAgICAgICAgIHZp
c2l0b3IuYWRkT3BhcXVlUm9vdChtX3JlbmRlcmJ1ZmZlci5nZXQoKSk7CiAgICAgfQpAQCAtMTY5
LDcgKzE2OSw3IEBAIG5hbWVzcGFjZSB7CiAgICAgICAgIHZvaWQgb25EZXRhY2hlZChjb25zdCBB
YnN0cmFjdExvY2tlciYsIEdyYXBoaWNzQ29udGV4dEdMKikgb3ZlcnJpZGU7CiAgICAgICAgIHZv
aWQgYXR0YWNoKEdyYXBoaWNzQ29udGV4dEdMKiwgR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBh
dHRhY2htZW50KSBvdmVycmlkZTsKICAgICAgICAgdm9pZCB1bmF0dGFjaChHcmFwaGljc0NvbnRl
eHRHTCosIEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gYXR0YWNobWVudCkgb3ZlcnJpZGU7Ci0g
ICAgICAgIHZvaWQgYWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMoY29uc3QgQWJzdHJhY3RMb2NrZXIm
LCBKU0M6OlNsb3RWaXNpdG9yJikgb3ZlcnJpZGU7CisgICAgICAgIHZvaWQgYWRkTWVtYmVyc1Rv
T3BhcXVlUm9vdHMoY29uc3QgQWJzdHJhY3RMb2NrZXImLCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0
b3ImKSBvdmVycmlkZTsKIAogICAgICAgICBXZWJHTFRleHR1cmVBdHRhY2htZW50KCkgeyB9Owog
CkBAIC0yNjcsNyArMjY3LDcgQEAgbmFtZXNwYWNlIHsKICNlbmRpZgogICAgIH0KIAotICAgIHZv
aWQgV2ViR0xUZXh0dXJlQXR0YWNobWVudDo6YWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMoY29uc3Qg
QWJzdHJhY3RMb2NrZXImLCBKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQorICAgIHZvaWQgV2Vi
R0xUZXh0dXJlQXR0YWNobWVudDo6YWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMoY29uc3QgQWJzdHJh
Y3RMb2NrZXImLCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiAgICAgewogICAg
ICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QobV90ZXh0dXJlLmdldCgpKTsKICAgICB9CkBAIC03
MjEsNyArNzIxLDcgQEAgR0NHTGVudW0gV2ViR0xGcmFtZWJ1ZmZlcjo6Z2V0RHJhd0J1ZmZlcgog
ICAgIHJldHVybiBHcmFwaGljc0NvbnRleHRHTDo6Tk9ORTsKIH0KIAotdm9pZCBXZWJHTEZyYW1l
YnVmZmVyOjphZGRNZW1iZXJzVG9PcGFxdWVSb290cyhjb25zdCBBYnN0cmFjdExvY2tlciYgbG9j
a2VyLCBKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBXZWJHTEZyYW1lYnVmZmVyOjph
ZGRNZW1iZXJzVG9PcGFxdWVSb290cyhjb25zdCBBYnN0cmFjdExvY2tlciYgbG9ja2VyLCBKU0M6
OkFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgZm9yIChhdXRvJiBlbnRyeSA6
IG1fYXR0YWNobWVudHMpCiAgICAgICAgIGVudHJ5LnZhbHVlLT5hZGRNZW1iZXJzVG9PcGFxdWVS
b290cyhsb2NrZXIsIHZpc2l0b3IpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
V2ViR0xGcmFtZWJ1ZmZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2Fu
dmFzL1dlYkdMRnJhbWVidWZmZXIuaAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvV2ViR0xGcmFtZWJ1ZmZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM0LDcgKzM0
LDcgQEAKICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBKU0MgewotY2xhc3Mg
U2xvdFZpc2l0b3I7CitjbGFzcyBBYnN0cmFjdFNsb3RWaXNpdG9yOwogfQogCiBuYW1lc3BhY2Ug
V1RGIHsKQEAgLTY1LDcgKzY1LDcgQEAgcHVibGljOgogICAgICAgICB2aXJ0dWFsIHZvaWQgb25E
ZXRhY2hlZChjb25zdCBXVEY6OkFic3RyYWN0TG9ja2VyJiwgR3JhcGhpY3NDb250ZXh0R0wqKSA9
IDA7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBhdHRhY2goR3JhcGhpY3NDb250ZXh0R0wqLCBHQ0dM
ZW51bSB0YXJnZXQsIEdDR0xlbnVtIGF0dGFjaG1lbnQpID0gMDsKICAgICAgICAgdmlydHVhbCB2
b2lkIHVuYXR0YWNoKEdyYXBoaWNzQ29udGV4dEdMKiwgR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51
bSBhdHRhY2htZW50KSA9IDA7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBhZGRNZW1iZXJzVG9PcGFx
dWVSb290cyhjb25zdCBXVEY6OkFic3RyYWN0TG9ja2VyJiwgSlNDOjpTbG90VmlzaXRvciYpID0g
MDsKKyAgICAgICAgdmlydHVhbCB2b2lkIGFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKGNvbnN0IFdU
Rjo6QWJzdHJhY3RMb2NrZXImLCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKSA9IDA7CiAKICAg
ICBwcm90ZWN0ZWQ6CiAgICAgICAgIFdlYkdMQXR0YWNobWVudCgpOwpAQCAtMTE0LDcgKzExNCw3
IEBAIHB1YmxpYzoKIAogICAgIEdDR0xlbnVtIGdldERyYXdCdWZmZXIoR0NHTGVudW0pOwogCi0g
ICAgdm9pZCBhZGRNZW1iZXJzVG9PcGFxdWVSb290cyhjb25zdCBXVEY6OkFic3RyYWN0TG9ja2Vy
JiwgSlNDOjpTbG90VmlzaXRvciYpOworICAgIHZvaWQgYWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMo
Y29uc3QgV1RGOjpBYnN0cmFjdExvY2tlciYsIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpOwog
CiBwcml2YXRlOgogICAgIFdlYkdMRnJhbWVidWZmZXIoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZSYpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xQcm9ncmFtLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFByb2dyYW0uY3Bw
CShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFBy
b2dyYW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDktMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTIwNiw3ICsyMDYsNyBAQCBib29sIFdlYkdMUHJvZ3Jh
bTo6ZGV0YWNoU2hhZGVyKGNvbnN0IEFiCiAgICAgfQogfQogCi12b2lkIFdlYkdMUHJvZ3JhbTo6
YWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMoY29uc3QgQWJzdHJhY3RMb2NrZXImLCBKU0M6OlNsb3RW
aXNpdG9yJiB2aXNpdG9yKQordm9pZCBXZWJHTFByb2dyYW06OmFkZE1lbWJlcnNUb09wYXF1ZVJv
b3RzKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNp
dG9yKQogewogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChtX3ZlcnRleFNoYWRlci5nZXQoKSk7
CiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KG1fZnJhZ21lbnRTaGFkZXIuZ2V0KCkpOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xQcm9ncmFtLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xQcm9ncmFtLmgJKHJldmlzaW9uIDI3
MzExOSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUHJvZ3JhbS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOS0yMDE3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOS0y
MDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMzUsNyArMzUsNyBAQAogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAog
bmFtZXNwYWNlIEpTQyB7Ci1jbGFzcyBTbG90VmlzaXRvcjsKK2NsYXNzIEFic3RyYWN0U2xvdFZp
c2l0b3I7CiB9CiAKIG5hbWVzcGFjZSBXVEYgewpAQCAtODgsNyArODgsNyBAQCBwdWJsaWM6CiAg
ICAgICAgIHJldHVybiBtX3JlcXVpcmVkVHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJDb3VudDsKICAg
ICB9CiAKLSAgICB2b2lkIGFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKGNvbnN0IFdURjo6QWJzdHJh
Y3RMb2NrZXImLCBKU0M6OlNsb3RWaXNpdG9yJik7CisgICAgdm9pZCBhZGRNZW1iZXJzVG9PcGFx
dWVSb290cyhjb25zdCBXVEY6OkFic3RyYWN0TG9ja2VyJiwgSlNDOjpBYnN0cmFjdFNsb3RWaXNp
dG9yJik7CiAKIHByaXZhdGU6CiAgICAgV2ViR0xQcm9ncmFtKFdlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2UmKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuY3BwCShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAx
NyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUt
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTc5MzEsNyArNzkzMSw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZTo6ZGlzcGF0Y2gKICAgICBxdWV1ZVRhc2tUb0Rpc3BhdGNoRXZlbnQoKmNhbnZhcywg
VGFza1NvdXJjZTo6V2ViR0wsIFdlYkdMQ29udGV4dEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygp
LndlYmdsY29udGV4dGNoYW5nZWRFdmVudCwgRXZlbnQ6OkNhbkJ1YmJsZTo6Tm8sIEV2ZW50OjpJ
c0NhbmNlbGFibGU6OlllcywgZW1wdHlTdHJpbmcoKSkpOwogfQogCi12b2lkIFdlYkdMUmVuZGVy
aW5nQ29udGV4dEJhc2U6OmFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKEpTQzo6U2xvdFZpc2l0b3Im
IHZpc2l0b3IpCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmFkZE1lbWJlcnNUb09w
YXF1ZVJvb3RzKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBhdXRv
IGxvY2tlciA9IGhvbGRMb2NrKG9iamVjdEdyYXBoTG9jaygpKTsKIApJbmRleDogU291cmNlL1dl
YkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2Uu
aAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTgsNyArNTgsNyBAQAog
I2VuZGlmCiAKIG5hbWVzcGFjZSBKU0MgewotY2xhc3MgU2xvdFZpc2l0b3I7CitjbGFzcyBBYnN0
cmFjdFNsb3RWaXNpdG9yOwogfQogCiBuYW1lc3BhY2UgV1RGIHsKQEAgLTQxMSw3ICs0MTEsNyBA
QCBwdWJsaWM6CiAgICAgdm9pZCByZWN5Y2xlQ29udGV4dCgpIG92ZXJyaWRlOwogICAgIHZvaWQg
ZGlzcGF0Y2hDb250ZXh0Q2hhbmdlZE5vdGlmaWNhdGlvbigpIG92ZXJyaWRlOwogCi0gICAgdmly
dHVhbCB2b2lkIGFkZE1lbWJlcnNUb09wYXF1ZVJvb3RzKEpTQzo6U2xvdFZpc2l0b3ImKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgYWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMoSlNDOjpBYnN0cmFjdFNsb3RW
aXNpdG9yJik7CiAgICAgLy8gVGhpcyBsb2NrIG11c3QgYmUgaGVsZCBhY3Jvc3MgYWxsIG11dGF0
aW9ucyBvZiBjb250YWluZXJzIGxpa2UKICAgICAvLyBWZWN0b3JzLCBIYXNoU2V0cywgZXRjLiB3
aGljaCBjb250YWluIFJlZlB0cjxXZWJHTE9iamVjdD4sIGFuZAogICAgIC8vIHdoaWNoIGFyZSB0
cmF2ZXJzZWQgYnkgYWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMoKSBvciBhbnkgb2YgdGhlCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFRyYW5zZm9ybUZlZWRiYWNrLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFRyYW5zZm9ybUZl
ZWRiYWNrLmNwcAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52
YXMvV2ViR0xUcmFuc2Zvcm1GZWVkYmFjay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzAsOCArMzAsNyBA
QAogCiAjaW5jbHVkZSAiV2ViR0xDb250ZXh0R3JvdXAuaCIKICNpbmNsdWRlICJXZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvU2xvdFZpc2l0b3Iu
aD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9TbG90VmlzaXRvcklubGluZXMuaD4KKyNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9BYnN0cmFjdFNsb3RWaXNpdG9ySW5saW5lcy5oPgogI2luY2x1
ZGUgPHd0Zi9Mb2NrLmg+CiAjaW5jbHVkZSA8d3RmL0xvY2tlci5oPgogCkBAIC05Myw3ICs5Miw3
IEBAIGJvb2wgV2ViR0xUcmFuc2Zvcm1GZWVkYmFjazo6aGFzRW5vdWdoQnUKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIAotdm9pZCBXZWJHTFRyYW5zZm9ybUZlZWRiYWNrOjphZGRNZW1iZXJzVG9PcGFx
dWVSb290cyhjb25zdCBBYnN0cmFjdExvY2tlciYgbG9ja2VyLCBKU0M6OlNsb3RWaXNpdG9yJiB2
aXNpdG9yKQordm9pZCBXZWJHTFRyYW5zZm9ybUZlZWRiYWNrOjphZGRNZW1iZXJzVG9PcGFxdWVS
b290cyhjb25zdCBBYnN0cmFjdExvY2tlciYgbG9ja2VyLCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0
b3ImIHZpc2l0b3IpCiB7CiAgICAgZm9yIChhdXRvJiBidWZmZXIgOiBtX2JvdW5kSW5kZXhlZFRy
YW5zZm9ybUZlZWRiYWNrQnVmZmVycykKICAgICAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KGJ1
ZmZlci5nZXQoKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFRyYW5z
Zm9ybUZlZWRiYWNrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
V2ViR0xUcmFuc2Zvcm1GZWVkYmFjay5oCShyZXZpc2lvbiAyNzMxMTkpCisrKyBTb3VyY2UvV2Vi
Q29yZS9odG1sL2NhbnZhcy9XZWJHTFRyYW5zZm9ybUZlZWRiYWNrLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTcgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC0zMSw3ICszMSw3IEBACiAjaW5jbHVkZSAiV2ViR0xTaGFyZWRPYmplY3QuaCIKIAogbmFt
ZXNwYWNlIEpTQyB7Ci1jbGFzcyBTbG90VmlzaXRvcjsKK2NsYXNzIEFic3RyYWN0U2xvdFZpc2l0
b3I7CiB9CiAKIG5hbWVzcGFjZSBXVEYgewpAQCAtNzAsNyArNzAsNyBAQCBwdWJsaWM6CiAgICAg
CiAgICAgYm9vbCBoYXNFbm91Z2hCdWZmZXJzKEdDR0x1aW50IG51bVJlcXVpcmVkKSBjb25zdDsK
IAotICAgIHZvaWQgYWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMoY29uc3QgQWJzdHJhY3RMb2NrZXIm
LCBKU0M6OlNsb3RWaXNpdG9yJik7CisgICAgdm9pZCBhZGRNZW1iZXJzVG9PcGFxdWVSb290cyhj
b25zdCBBYnN0cmFjdExvY2tlciYsIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpOwogCiBwcml2
YXRlOgogICAgIFdlYkdMVHJhbnNmb3JtRmVlZGJhY2soV2ViR0wyUmVuZGVyaW5nQ29udGV4dCYp
OwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xWZXJ0ZXhBcnJheU9iamVj
dEJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdM
VmVydGV4QXJyYXlPYmplY3RCYXNlLmNwcAkocmV2aXNpb24gMjczMTE5KQorKysgU291cmNlL1dl
YkNvcmUvaHRtbC9jYW52YXMvV2ViR0xWZXJ0ZXhBcnJheU9iamVjdEJhc2UuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE3IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMjksOCArMjksNyBAQAogI2lmIEVOQUJMRShXRUJHTCkKIAogI2luY2x1ZGUg
IldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9T
bG90VmlzaXRvci5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1Nsb3RWaXNpdG9ySW5saW5l
cy5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0Fic3RyYWN0U2xvdFZpc2l0b3JJbmxpbmVz
Lmg+CiAjaW5jbHVkZSA8d3RmL0xvY2tlci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0x
MDksNyArMTA4LDcgQEAgdm9pZCBXZWJHTFZlcnRleEFycmF5T2JqZWN0QmFzZTo6c2V0VmVydAog
ICAgIG1fdmVydGV4QXR0cmliU3RhdGVbaW5kZXhdLmRpdmlzb3IgPSBkaXZpc29yOwogfQogCi12
b2lkIFdlYkdMVmVydGV4QXJyYXlPYmplY3RCYXNlOjphZGRNZW1iZXJzVG9PcGFxdWVSb290cyhj
b25zdCBBYnN0cmFjdExvY2tlciYsIEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIFdl
YkdMVmVydGV4QXJyYXlPYmplY3RCYXNlOjphZGRNZW1iZXJzVG9PcGFxdWVSb290cyhjb25zdCBB
YnN0cmFjdExvY2tlciYsIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAg
ICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QobV9ib3VuZEVsZW1lbnRBcnJheUJ1ZmZlci5nZXQoKSk7
CiAgICAgZm9yIChhdXRvJiBzdGF0ZSA6IG1fdmVydGV4QXR0cmliU3RhdGUpCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFZlcnRleEFycmF5T2JqZWN0QmFzZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVmVydGV4QXJyYXlPYmpl
Y3RCYXNlLmgJKHJldmlzaW9uIDI3MzExOSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L1dlYkdMVmVydGV4QXJyYXlPYmplY3RCYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMiw3ICsz
Miw3IEBACiAjaW5jbHVkZSAiV2ViR0xDb250ZXh0T2JqZWN0LmgiCiAKIG5hbWVzcGFjZSBKU0Mg
ewotY2xhc3MgU2xvdFZpc2l0b3I7CitjbGFzcyBBYnN0cmFjdFNsb3RWaXNpdG9yOwogfQogCiBu
YW1lc3BhY2UgV1RGIHsKQEAgLTc3LDcgKzc3LDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBzZXRW
ZXJ0ZXhBdHRyaWJEaXZpc29yKEdDR0x1aW50IGluZGV4LCBHQ0dMdWludCBkaXZpc29yKTsKIAot
ICAgIHZvaWQgYWRkTWVtYmVyc1RvT3BhcXVlUm9vdHMoY29uc3QgV1RGOjpBYnN0cmFjdExvY2tl
ciYsIEpTQzo6U2xvdFZpc2l0b3ImKTsKKyAgICB2b2lkIGFkZE1lbWJlcnNUb09wYXF1ZVJvb3Rz
KGNvbnN0IFdURjo6QWJzdHJhY3RMb2NrZXImLCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKTsK
IAogcHJvdGVjdGVkOgogICAgIFdlYkdMVmVydGV4QXJyYXlPYmplY3RCYXNlKFdlYkdMUmVuZGVy
aW5nQ29udGV4dEJhc2UmLCBUeXBlKTsK
</data>
<flag name="review"
          id="439593"
          type_id="1"
          status="+"
          setter="fpizlo"
    />
          </attachment>
      

    </bug>

</bugzilla>